diff --git a/.gitignore b/.gitignore index a3341f7..2be1cf4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /cf-targets-plugin +bin/ diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 147de95..9fdfb1e 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,160 +1,642 @@ { - "ImportPath": "github.com/guidowb/cf-targets-plugin", - "GoVersion": "go1.4.2", + "ImportPath": "github.com/loafoe/cf-targets-plugin", + "GoVersion": "go1.7", + "GodepVersion": "v74", + "Packages": [ + "./..." + ], "Deps": [ { - "ImportPath": "code.google.com/p/go.crypto/ssh/terminal", - "Comment": "null-236", - "Rev": "69e2a90ed92d03812364aeb947b7068dc42e561e" + "ImportPath": "code.cloudfoundry.org/cli/cf", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "code.google.com/p/go.net/websocket", - "Comment": "null-240", - "Rev": "937a34c9de13c766c814510f76bca091dee06028" + "ImportPath": "code.cloudfoundry.org/cli/cf/actors", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry-incubator/candiedyaml", - "Rev": "2e03482782caf025b6abc16679ee6fe4af4b595b" + "ImportPath": "code.cloudfoundry.org/cli/cf/actors/brokerbuilder", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry-incubator/cli-plugin-repo/models", - "Rev": "cc5149f7305a1896b37e08c8db7b266d0a826b1e" + "ImportPath": "code.cloudfoundry.org/cli/cf/actors/planbuilder", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/cf", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/actors/pluginrepo", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/fileutils", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/actors/servicebuilder", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/flags", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/api", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/generic", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/api/appevents", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/glob", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/api/appfiles", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/json", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/api/appinstances", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/plugin", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/cf/api/applicationbits", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/applications", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/authentication", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/copyapplicationsource", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/environmentvariablegroups", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/featureflags", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/logs", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/organizations", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/password", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/quotas", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/resources", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/securitygroups", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/running", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/staging", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/securitygroups/spaces", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/spacequotas", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/spaces", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/api/stacks", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/appfiles", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/commandregistry", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/configuration", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/configuration/confighelpers", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/configuration/coreconfig", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/configuration/pluginconfig", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/errors", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/flags", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/formatters", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/i18n", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/manifest", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/models", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/net", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/requirements", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/resources", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/terminal", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/trace", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/v3/models", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/cf/v3/repository", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/plugin", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/plugin/models", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/configv3", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/generic", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/glob", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/sorting", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/testhelpers/commands", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/testhelpers/net", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/testhelpers/terminal", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "code.cloudfoundry.org/cli/util/words", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/commands", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/util/words/generator", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/configuration", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/cli/version", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/io", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "code.cloudfoundry.org/gofileutils/fileutils", + "Rev": "4d0c80011a0f37da1711c184028bc40137cd45af" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/matchers", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "github.com/SermoDigital/jose", + "Comment": "1.1-1-g2bd9b81", + "Rev": "2bd9b81ac51d6d6134fcd4fd846bd2e7347a15f9" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/net", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "github.com/SermoDigital/jose/crypto", + "Comment": "1.1-1-g2bd9b81", + "Rev": "2bd9b81ac51d6d6134fcd4fd846bd2e7347a15f9" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/requirements", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "github.com/SermoDigital/jose/jws", + "Comment": "1.1-1-g2bd9b81", + "Rev": "2bd9b81ac51d6d6134fcd4fd846bd2e7347a15f9" }, { - "ImportPath": "github.com/cloudfoundry/cli/testhelpers/terminal", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "github.com/SermoDigital/jose/jwt", + "Comment": "1.1-1-g2bd9b81", + "Rev": "2bd9b81ac51d6d6134fcd4fd846bd2e7347a15f9" }, { - "ImportPath": "github.com/cloudfoundry/cli/utils", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "github.com/blang/semver", + "Comment": "v3.1.0", + "Rev": "aea32c919a18e5ef4537bbd283ff29594b1b0165" }, { - "ImportPath": "github.com/cloudfoundry/cli/words", - "Comment": "v6.11.3-183-g8c65bbd", - "Rev": "8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48" + "ImportPath": "github.com/bmizerany/pat", + "Rev": "c068ca2f0aacee5ac3681d68e4d0a003b7d1fd2c" }, { - "ImportPath": "github.com/cloudfoundry/gofileutils/fileutils", - "Rev": "74388e8083dc77ebfba108a8dd3e3af92b76ee04" + "ImportPath": "github.com/cloudfoundry-incubator/cli-plugin-repo/web", + "Rev": "62545a44009bc8edb02ef5b2b5c939488960b2c9" }, { - "ImportPath": "github.com/cloudfoundry/loggregator_consumer", - "Rev": "2f4815b96a74aeca9564cc8461ab13c79d42496d" + "ImportPath": "github.com/cloudfoundry/cli/cf/configuration", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/loggregatorlib/logmessage", - "Rev": "3b1a0926134b02971ce08113382965c4bbe21f80" + "ImportPath": "github.com/cloudfoundry/cli/cf/configuration/confighelpers", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" }, { - "ImportPath": "github.com/cloudfoundry/loggregatorlib/signature", - "Rev": "3b1a0926134b02971ce08113382965c4bbe21f80" + "ImportPath": "github.com/cloudfoundry/cli/cf/configuration/coreconfig", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "github.com/cloudfoundry/cli/plugin", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "github.com/cloudfoundry/cli/plugin/pluginfakes", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "github.com/cloudfoundry/cli/util/testhelpers/io", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "github.com/cloudfoundry/cli/util/testhelpers/matchers", + "Comment": "v6.23.1-77-g489fb50", + "Rev": "489fb5030c24b678a6232cc730d328cd7b2d98e9" + }, + { + "ImportPath": "github.com/cloudfoundry/go-ccapi/v3/client", + "Rev": "71998966d470aeafdb4acabf79a75e444d6f78f6" + }, + { + "ImportPath": "github.com/cloudfoundry/go-ccapi/v3/routing", + "Rev": "71998966d470aeafdb4acabf79a75e444d6f78f6" }, { "ImportPath": "github.com/cloudfoundry/noaa", - "Rev": "7f3b03afe00e1bf449cf1651a8623d878e20c70d" + "Comment": "v2.0.0-5-g9e08723", + "Rev": "9e087230f2fedf46641976e14cbc41fe6a2bbec8" + }, + { + "ImportPath": "github.com/cloudfoundry/noaa/consumer", + "Comment": "v2.0.0-5-g9e08723", + "Rev": "9e087230f2fedf46641976e14cbc41fe6a2bbec8" + }, + { + "ImportPath": "github.com/cloudfoundry/noaa/consumer/internal", + "Comment": "v2.0.0-5-g9e08723", + "Rev": "9e087230f2fedf46641976e14cbc41fe6a2bbec8" + }, + { + "ImportPath": "github.com/cloudfoundry/noaa/errors", + "Comment": "v2.0.0-5-g9e08723", + "Rev": "9e087230f2fedf46641976e14cbc41fe6a2bbec8" }, { "ImportPath": "github.com/cloudfoundry/sonde-go/events", - "Rev": "e9b4698e850553401d1d2dd998c756fdf29356ea" + "Rev": "78019103037ae46207993c8816e970d85bf1a9e4" }, { - "ImportPath": "github.com/codegangsta/cli", - "Comment": "1.2.0-24-g7381bc4", - "Rev": "7381bc4e62942763475703c7edd405f1e42adf4f" + "ImportPath": "github.com/fatih/color", + "Comment": "v0.1-8-g76d4231", + "Rev": "76d423163af754ff6423d2d9be0057fbf03c57c2" + }, + { + "ImportPath": "github.com/gogo/protobuf/gogoproto", + "Comment": "v0.3-145-gfb8a359", + "Rev": "fb8a359905af6e2b6517cccda0ba25915322ee88" }, { "ImportPath": "github.com/gogo/protobuf/proto", - "Rev": "64f27bf06efee53589314a6e5a4af34cdd85adf6" + "Comment": "v0.3-145-gfb8a359", + "Rev": "fb8a359905af6e2b6517cccda0ba25915322ee88" + }, + { + "ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/descriptor", + "Comment": "v0.3-145-gfb8a359", + "Rev": "fb8a359905af6e2b6517cccda0ba25915322ee88" + }, + { + "ImportPath": "github.com/google/go-querystring/query", + "Rev": "53e6ce116135b80d037921a7fdd5138cf32d7a8a" }, { "ImportPath": "github.com/gorilla/websocket", - "Rev": "a3ec486e6a7a41858210b0fc5d7b5df593b3c4a3" + "Rev": "3986be78bf859e01f01af631ad76da5b269d270c" + }, + { + "ImportPath": "github.com/mattn/go-colorable", + "Comment": "v0.0.6-9-gd228849", + "Rev": "d228849504861217f796da67fae4f6e347643f15" + }, + { + "ImportPath": "github.com/mattn/go-isatty", + "Rev": "7fcbc72f853b92b5720db4a6b8482be612daef24" }, { "ImportPath": "github.com/nicksnyder/go-i18n/i18n", - "Comment": "v1.0.0-10-g4ca110f", - "Rev": "4ca110fd329186426c0404dbb3c0d239bb38b3a3" + "Comment": "v1.7.0-1-g64786dc", + "Rev": "64786dc4f56b1cceffc2ce90a7f512d9ab70bba2" + }, + { + "ImportPath": "github.com/nicksnyder/go-i18n/i18n/bundle", + "Comment": "v1.7.0-1-g64786dc", + "Rev": "64786dc4f56b1cceffc2ce90a7f512d9ab70bba2" + }, + { + "ImportPath": "github.com/nicksnyder/go-i18n/i18n/language", + "Comment": "v1.7.0-1-g64786dc", + "Rev": "64786dc4f56b1cceffc2ce90a7f512d9ab70bba2" + }, + { + "ImportPath": "github.com/nicksnyder/go-i18n/i18n/translation", + "Comment": "v1.7.0-1-g64786dc", + "Rev": "64786dc4f56b1cceffc2ce90a7f512d9ab70bba2" }, { "ImportPath": "github.com/onsi/ginkgo", - "Comment": "v1.2.0-8-g25380c6", - "Rev": "25380c62e61d3f90436be125b8127dbae578fdef" + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/config", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/codelocation", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/containernode", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/failer", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/leafnodes", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/remote", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/spec", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/specrunner", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/suite", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/testingtproxy", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/internal/writer", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/reporters", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/reporters/stenographer", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" + }, + { + "ImportPath": "github.com/onsi/ginkgo/types", + "Comment": "v1.2.0-90-gbb93381", + "Rev": "bb93381d543b0e5725244abe752214a110791d01" }, { "ImportPath": "github.com/onsi/gomega", - "Comment": "v1.0-50-gd6c945f", - "Rev": "d6c945f9fdbf6cad99e85b0feff591caa268e0db" + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/format", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/internal/assertion", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/internal/asyncassertion", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/internal/oraclematcher", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/internal/testingtsupport", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/matchers", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/matchers/support/goraph/bipartitegraph", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/matchers/support/goraph/edge", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/matchers/support/goraph/node", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/matchers/support/goraph/util", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/onsi/gomega/types", + "Comment": "v1.0-109-g82a02ec", + "Rev": "82a02eccf12c018071eef42fbb701c0db6f1e3db" + }, + { + "ImportPath": "github.com/tedsuo/rata", + "Comment": "v1.0.0", + "Rev": "0649c23705dfb45a9693b668c4fc1c0666f485d9" + }, + { + "ImportPath": "golang.org/x/crypto/ssh/terminal", + "Rev": "854ae91cdcbf914b499b1d7641d07859f3653481" + }, + { + "ImportPath": "golang.org/x/net/websocket", + "Rev": "cd8c2701a5e10f044db915e65eac68f738399d22" + }, + { + "ImportPath": "golang.org/x/sys/unix", + "Rev": "62bee037599929a6e9146f29d10dd5208c43507d" }, { - "ImportPath": "github.com/pivotal-cf-experimental/jibber_jabber", - "Rev": "5181a0a92a50f392c5638170d6cfad5397df5895" + "ImportPath": "gopkg.in/yaml.v2", + "Rev": "f7716cbe52baa25d2e9b0d0da546fcf909fc16b4" } ] } diff --git a/Godeps/_workspace/.gitignore b/Godeps/_workspace/.gitignore deleted file mode 100644 index f037d68..0000000 --- a/Godeps/_workspace/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/pkg -/bin diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/terminal_test.go b/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/terminal_test.go deleted file mode 100644 index 6579801..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/terminal_test.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package terminal - -import ( - "io" - "testing" -) - -type MockTerminal struct { - toSend []byte - bytesPerRead int - received []byte -} - -func (c *MockTerminal) Read(data []byte) (n int, err error) { - n = len(data) - if n == 0 { - return - } - if n > len(c.toSend) { - n = len(c.toSend) - } - if n == 0 { - return 0, io.EOF - } - if c.bytesPerRead > 0 && n > c.bytesPerRead { - n = c.bytesPerRead - } - copy(data, c.toSend[:n]) - c.toSend = c.toSend[n:] - return -} - -func (c *MockTerminal) Write(data []byte) (n int, err error) { - c.received = append(c.received, data...) - return len(data), nil -} - -func TestClose(t *testing.T) { - c := &MockTerminal{} - ss := NewTerminal(c, "> ") - line, err := ss.ReadLine() - if line != "" { - t.Errorf("Expected empty line but got: %s", line) - } - if err != io.EOF { - t.Errorf("Error should have been EOF but got: %s", err) - } -} - -var keyPressTests = []struct { - in string - line string - err error - throwAwayLines int -}{ - { - err: io.EOF, - }, - { - in: "\r", - line: "", - }, - { - in: "foo\r", - line: "foo", - }, - { - in: "a\x1b[Cb\r", // right - line: "ab", - }, - { - in: "a\x1b[Db\r", // left - line: "ba", - }, - { - in: "a\177b\r", // backspace - line: "b", - }, - { - in: "\x1b[A\r", // up - }, - { - in: "\x1b[B\r", // down - }, - { - in: "line\x1b[A\x1b[B\r", // up then down - line: "line", - }, - { - in: "line1\rline2\x1b[A\r", // recall previous line. - line: "line1", - throwAwayLines: 1, - }, - { - // recall two previous lines and append. - in: "line1\rline2\rline3\x1b[A\x1b[Axxx\r", - line: "line1xxx", - throwAwayLines: 2, - }, - { - // Ctrl-A to move to beginning of line followed by ^K to kill - // line. - in: "a b \001\013\r", - line: "", - }, - { - // Ctrl-A to move to beginning of line, Ctrl-E to move to end, - // finally ^K to kill nothing. - in: "a b \001\005\013\r", - line: "a b ", - }, - { - in: "\027\r", - line: "", - }, - { - in: "a\027\r", - line: "", - }, - { - in: "a \027\r", - line: "", - }, - { - in: "a b\027\r", - line: "a ", - }, - { - in: "a b \027\r", - line: "a ", - }, - { - in: "one two thr\x1b[D\027\r", - line: "one two r", - }, - { - in: "\013\r", - line: "", - }, - { - in: "a\013\r", - line: "a", - }, - { - in: "ab\x1b[D\013\r", - line: "a", - }, - { - in: "Ξεσκεπάζω\r", - line: "Ξεσκεπάζω", - }, - { - in: "£\r\x1b[A\177\r", // non-ASCII char, enter, up, backspace. - line: "", - throwAwayLines: 1, - }, - { - in: "£\r££\x1b[A\x1b[B\177\r", // non-ASCII char, enter, 2x non-ASCII, up, down, backspace, enter. - line: "£", - throwAwayLines: 1, - }, - { - // Ctrl-D at the end of the line should be ignored. - in: "a\004\r", - line: "a", - }, - { - // a, b, left, Ctrl-D should erase the b. - in: "ab\x1b[D\004\r", - line: "a", - }, - { - // a, b, c, d, left, left, ^U should erase to the beginning of - // the line. - in: "abcd\x1b[D\x1b[D\025\r", - line: "cd", - }, - { - // Bracketed paste mode: control sequences should be returned - // verbatim in paste mode. - in: "abc\x1b[200~de\177f\x1b[201~\177\r", - line: "abcde\177", - }, - { - // Enter in bracketed paste mode should still work. - in: "abc\x1b[200~d\refg\x1b[201~h\r", - line: "efgh", - throwAwayLines: 1, - }, - { - // Lines consisting entirely of pasted data should be indicated as such. - in: "\x1b[200~a\r", - line: "a", - err: ErrPasteIndicator, - }, -} - -func TestKeyPresses(t *testing.T) { - for i, test := range keyPressTests { - for j := 1; j < len(test.in); j++ { - c := &MockTerminal{ - toSend: []byte(test.in), - bytesPerRead: j, - } - ss := NewTerminal(c, "> ") - for k := 0; k < test.throwAwayLines; k++ { - _, err := ss.ReadLine() - if err != nil { - t.Errorf("Throwaway line %d from test %d resulted in error: %s", k, i, err) - } - } - line, err := ss.ReadLine() - if line != test.line { - t.Errorf("Line resulting from test %d (%d bytes per read) was '%s', expected '%s'", i, j, line, test.line) - break - } - if err != test.err { - t.Errorf("Error resulting from test %d (%d bytes per read) was '%v', expected '%v'", i, j, err, test.err) - break - } - } - } -} - -func TestPasswordNotSaved(t *testing.T) { - c := &MockTerminal{ - toSend: []byte("password\r\x1b[A\r"), - bytesPerRead: 1, - } - ss := NewTerminal(c, "> ") - pw, _ := ss.ReadPassword("> ") - if pw != "password" { - t.Fatalf("failed to read password, got %s", pw) - } - line, _ := ss.ReadLine() - if len(line) > 0 { - t.Fatalf("password was saved in history") - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util.go b/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util.go deleted file mode 100644 index 0763c9a..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2011 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. - -// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd - -// Package terminal provides support functions for dealing with terminals, as -// commonly found on UNIX systems. -// -// Putting a terminal into raw mode is the most common requirement: -// -// oldState, err := terminal.MakeRaw(0) -// if err != nil { -// panic(err) -// } -// defer terminal.Restore(0, oldState) -package terminal - -import ( - "io" - "syscall" - "unsafe" -) - -// State contains the state of a terminal. -type State struct { - termios syscall.Termios -} - -// IsTerminal returns true if the given file descriptor is a terminal. -func IsTerminal(fd int) bool { - var termios syscall.Termios - _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) - return err == 0 -} - -// MakeRaw put the terminal connected to the given file descriptor into raw -// mode and returns the previous state of the terminal so that it can be -// restored. -func MakeRaw(fd int) (*State, error) { - var oldState State - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { - return nil, err - } - - newState := oldState.termios - newState.Iflag &^= syscall.ISTRIP | syscall.INLCR | syscall.ICRNL | syscall.IGNCR | syscall.IXON | syscall.IXOFF - newState.Lflag &^= syscall.ECHO | syscall.ICANON | syscall.ISIG - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { - return nil, err - } - - return &oldState, nil -} - -// GetState returns the current state of a terminal which may be useful to -// restore the terminal after a signal. -func GetState(fd int) (*State, error) { - var oldState State - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { - return nil, err - } - - return &oldState, nil -} - -// Restore restores the terminal connected to the given file descriptor to a -// previous state. -func Restore(fd int, state *State) error { - _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0) - return err -} - -// GetSize returns the dimensions of the given terminal. -func GetSize(fd int) (width, height int, err error) { - var dimensions [4]uint16 - - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 { - return -1, -1, err - } - return int(dimensions[1]), int(dimensions[0]), nil -} - -// ReadPassword reads a line of input from a terminal without local echo. This -// is commonly used for inputting passwords and other sensitive data. The slice -// returned does not include the \n. -func ReadPassword(fd int) ([]byte, error) { - var oldState syscall.Termios - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 { - return nil, err - } - - newState := oldState - newState.Lflag &^= syscall.ECHO - newState.Lflag |= syscall.ICANON | syscall.ISIG - newState.Iflag |= syscall.ICRNL - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { - return nil, err - } - - defer func() { - syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0) - }() - - var buf [16]byte - var ret []byte - for { - n, err := syscall.Read(fd, buf[:]) - if err != nil { - return nil, err - } - if n == 0 { - if len(ret) == 0 { - return nil, io.EOF - } - break - } - if buf[n-1] == '\n' { - n-- - } - ret = append(ret, buf[:n]...) - if n < len(buf) { - break - } - } - - return ret, nil -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/client.go b/Godeps/_workspace/src/code.google.com/p/go.net/websocket/client.go deleted file mode 100644 index a861bb9..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/client.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bufio" - "crypto/tls" - "io" - "net" - "net/http" - "net/url" -) - -// DialError is an error that occurs while dialling a websocket server. -type DialError struct { - *Config - Err error -} - -func (e *DialError) Error() string { - return "websocket.Dial " + e.Config.Location.String() + ": " + e.Err.Error() -} - -// NewConfig creates a new WebSocket config for client connection. -func NewConfig(server, origin string) (config *Config, err error) { - config = new(Config) - config.Version = ProtocolVersionHybi13 - config.Location, err = url.ParseRequestURI(server) - if err != nil { - return - } - config.Origin, err = url.ParseRequestURI(origin) - if err != nil { - return - } - config.Header = http.Header(make(map[string][]string)) - return -} - -// NewClient creates a new WebSocket client connection over rwc. -func NewClient(config *Config, rwc io.ReadWriteCloser) (ws *Conn, err error) { - br := bufio.NewReader(rwc) - bw := bufio.NewWriter(rwc) - err = hybiClientHandshake(config, br, bw) - if err != nil { - return - } - buf := bufio.NewReadWriter(br, bw) - ws = newHybiClientConn(config, buf, rwc) - return -} - -// Dial opens a new client connection to a WebSocket. -func Dial(url_, protocol, origin string) (ws *Conn, err error) { - config, err := NewConfig(url_, origin) - if err != nil { - return nil, err - } - if protocol != "" { - config.Protocol = []string{protocol} - } - return DialConfig(config) -} - -// DialConfig opens a new client connection to a WebSocket with a config. -func DialConfig(config *Config) (ws *Conn, err error) { - var client net.Conn - if config.Location == nil { - return nil, &DialError{config, ErrBadWebSocketLocation} - } - if config.Origin == nil { - return nil, &DialError{config, ErrBadWebSocketOrigin} - } - switch config.Location.Scheme { - case "ws": - client, err = net.Dial("tcp", config.Location.Host) - - case "wss": - client, err = tls.Dial("tcp", config.Location.Host, config.TlsConfig) - - default: - err = ErrBadScheme - } - if err != nil { - goto Error - } - - ws, err = NewClient(config, client) - if err != nil { - goto Error - } - return - -Error: - return nil, &DialError{config, err} -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/exampledial_test.go b/Godeps/_workspace/src/code.google.com/p/go.net/websocket/exampledial_test.go deleted file mode 100644 index 72bb9d4..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/exampledial_test.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket_test - -import ( - "fmt" - "log" - - "golang.org/x/net/websocket" -) - -// This example demonstrates a trivial client. -func ExampleDial() { - origin := "http://localhost/" - url := "ws://localhost:12345/ws" - ws, err := websocket.Dial(url, "", origin) - if err != nil { - log.Fatal(err) - } - if _, err := ws.Write([]byte("hello, world!\n")); err != nil { - log.Fatal(err) - } - var msg = make([]byte, 512) - var n int - if n, err = ws.Read(msg); err != nil { - log.Fatal(err) - } - fmt.Printf("Received: %s.\n", msg[:n]) -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/examplehandler_test.go b/Godeps/_workspace/src/code.google.com/p/go.net/websocket/examplehandler_test.go deleted file mode 100644 index f22a98f..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/examplehandler_test.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket_test - -import ( - "io" - "net/http" - - "golang.org/x/net/websocket" -) - -// Echo the data received on the WebSocket. -func EchoServer(ws *websocket.Conn) { - io.Copy(ws, ws) -} - -// This example demonstrates a trivial echo server. -func ExampleHandler() { - http.Handle("/echo", websocket.Handler(EchoServer)) - err := http.ListenAndServe(":12345", nil) - if err != nil { - panic("ListenAndServe: " + err.Error()) - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi_test.go b/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi_test.go deleted file mode 100644 index d6a1910..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi_test.go +++ /dev/null @@ -1,590 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bufio" - "bytes" - "fmt" - "io" - "net/http" - "net/url" - "strings" - "testing" -) - -// Test the getNonceAccept function with values in -// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17 -func TestSecWebSocketAccept(t *testing.T) { - nonce := []byte("dGhlIHNhbXBsZSBub25jZQ==") - expected := []byte("s3pPLMBiTxaQ9kYGzzhZRbK+xOo=") - accept, err := getNonceAccept(nonce) - if err != nil { - t.Errorf("getNonceAccept: returned error %v", err) - return - } - if !bytes.Equal(expected, accept) { - t.Errorf("getNonceAccept: expected %q got %q", expected, accept) - } -} - -func TestHybiClientHandshake(t *testing.T) { - b := bytes.NewBuffer([]byte{}) - bw := bufio.NewWriter(b) - br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols -Upgrade: websocket -Connection: Upgrade -Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= -Sec-WebSocket-Protocol: chat - -`)) - var err error - config := new(Config) - config.Location, err = url.ParseRequestURI("ws://server.example.com/chat") - if err != nil { - t.Fatal("location url", err) - } - config.Origin, err = url.ParseRequestURI("http://example.com") - if err != nil { - t.Fatal("origin url", err) - } - config.Protocol = append(config.Protocol, "chat") - config.Protocol = append(config.Protocol, "superchat") - config.Version = ProtocolVersionHybi13 - - config.handshakeData = map[string]string{ - "key": "dGhlIHNhbXBsZSBub25jZQ==", - } - err = hybiClientHandshake(config, br, bw) - if err != nil { - t.Errorf("handshake failed: %v", err) - } - req, err := http.ReadRequest(bufio.NewReader(b)) - if err != nil { - t.Fatalf("read request: %v", err) - } - if req.Method != "GET" { - t.Errorf("request method expected GET, but got %q", req.Method) - } - if req.URL.Path != "/chat" { - t.Errorf("request path expected /chat, but got %q", req.URL.Path) - } - if req.Proto != "HTTP/1.1" { - t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto) - } - if req.Host != "server.example.com" { - t.Errorf("request Host expected server.example.com, but got %v", req.Host) - } - var expectedHeader = map[string]string{ - "Connection": "Upgrade", - "Upgrade": "websocket", - "Sec-Websocket-Key": config.handshakeData["key"], - "Origin": config.Origin.String(), - "Sec-Websocket-Protocol": "chat, superchat", - "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi13), - } - for k, v := range expectedHeader { - if req.Header.Get(k) != v { - t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k))) - } - } -} - -func TestHybiClientHandshakeWithHeader(t *testing.T) { - b := bytes.NewBuffer([]byte{}) - bw := bufio.NewWriter(b) - br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols -Upgrade: websocket -Connection: Upgrade -Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= -Sec-WebSocket-Protocol: chat - -`)) - var err error - config := new(Config) - config.Location, err = url.ParseRequestURI("ws://server.example.com/chat") - if err != nil { - t.Fatal("location url", err) - } - config.Origin, err = url.ParseRequestURI("http://example.com") - if err != nil { - t.Fatal("origin url", err) - } - config.Protocol = append(config.Protocol, "chat") - config.Protocol = append(config.Protocol, "superchat") - config.Version = ProtocolVersionHybi13 - config.Header = http.Header(make(map[string][]string)) - config.Header.Add("User-Agent", "test") - - config.handshakeData = map[string]string{ - "key": "dGhlIHNhbXBsZSBub25jZQ==", - } - err = hybiClientHandshake(config, br, bw) - if err != nil { - t.Errorf("handshake failed: %v", err) - } - req, err := http.ReadRequest(bufio.NewReader(b)) - if err != nil { - t.Fatalf("read request: %v", err) - } - if req.Method != "GET" { - t.Errorf("request method expected GET, but got %q", req.Method) - } - if req.URL.Path != "/chat" { - t.Errorf("request path expected /chat, but got %q", req.URL.Path) - } - if req.Proto != "HTTP/1.1" { - t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto) - } - if req.Host != "server.example.com" { - t.Errorf("request Host expected server.example.com, but got %v", req.Host) - } - var expectedHeader = map[string]string{ - "Connection": "Upgrade", - "Upgrade": "websocket", - "Sec-Websocket-Key": config.handshakeData["key"], - "Origin": config.Origin.String(), - "Sec-Websocket-Protocol": "chat, superchat", - "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi13), - "User-Agent": "test", - } - for k, v := range expectedHeader { - if req.Header.Get(k) != v { - t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k))) - } - } -} - -func TestHybiServerHandshake(t *testing.T) { - config := new(Config) - handshaker := &hybiServerHandshaker{Config: config} - br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 -Host: server.example.com -Upgrade: websocket -Connection: Upgrade -Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== -Origin: http://example.com -Sec-WebSocket-Protocol: chat, superchat -Sec-WebSocket-Version: 13 - -`)) - req, err := http.ReadRequest(br) - if err != nil { - t.Fatal("request", err) - } - code, err := handshaker.ReadHandshake(br, req) - if err != nil { - t.Errorf("handshake failed: %v", err) - } - if code != http.StatusSwitchingProtocols { - t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code) - } - expectedProtocols := []string{"chat", "superchat"} - if fmt.Sprintf("%v", config.Protocol) != fmt.Sprintf("%v", expectedProtocols) { - t.Errorf("protocol expected %q but got %q", expectedProtocols, config.Protocol) - } - b := bytes.NewBuffer([]byte{}) - bw := bufio.NewWriter(b) - - config.Protocol = config.Protocol[:1] - - err = handshaker.AcceptHandshake(bw) - if err != nil { - t.Errorf("handshake response failed: %v", err) - } - expectedResponse := strings.Join([]string{ - "HTTP/1.1 101 Switching Protocols", - "Upgrade: websocket", - "Connection: Upgrade", - "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", - "Sec-WebSocket-Protocol: chat", - "", ""}, "\r\n") - - if b.String() != expectedResponse { - t.Errorf("handshake expected %q but got %q", expectedResponse, b.String()) - } -} - -func TestHybiServerHandshakeNoSubProtocol(t *testing.T) { - config := new(Config) - handshaker := &hybiServerHandshaker{Config: config} - br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 -Host: server.example.com -Upgrade: websocket -Connection: Upgrade -Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== -Origin: http://example.com -Sec-WebSocket-Version: 13 - -`)) - req, err := http.ReadRequest(br) - if err != nil { - t.Fatal("request", err) - } - code, err := handshaker.ReadHandshake(br, req) - if err != nil { - t.Errorf("handshake failed: %v", err) - } - if code != http.StatusSwitchingProtocols { - t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code) - } - if len(config.Protocol) != 0 { - t.Errorf("len(config.Protocol) expected 0, but got %q", len(config.Protocol)) - } - b := bytes.NewBuffer([]byte{}) - bw := bufio.NewWriter(b) - - err = handshaker.AcceptHandshake(bw) - if err != nil { - t.Errorf("handshake response failed: %v", err) - } - expectedResponse := strings.Join([]string{ - "HTTP/1.1 101 Switching Protocols", - "Upgrade: websocket", - "Connection: Upgrade", - "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", - "", ""}, "\r\n") - - if b.String() != expectedResponse { - t.Errorf("handshake expected %q but got %q", expectedResponse, b.String()) - } -} - -func TestHybiServerHandshakeHybiBadVersion(t *testing.T) { - config := new(Config) - handshaker := &hybiServerHandshaker{Config: config} - br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 -Host: server.example.com -Upgrade: websocket -Connection: Upgrade -Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== -Sec-WebSocket-Origin: http://example.com -Sec-WebSocket-Protocol: chat, superchat -Sec-WebSocket-Version: 9 - -`)) - req, err := http.ReadRequest(br) - if err != nil { - t.Fatal("request", err) - } - code, err := handshaker.ReadHandshake(br, req) - if err != ErrBadWebSocketVersion { - t.Errorf("handshake expected err %q but got %q", ErrBadWebSocketVersion, err) - } - if code != http.StatusBadRequest { - t.Errorf("status expected %q but got %q", http.StatusBadRequest, code) - } -} - -func testHybiFrame(t *testing.T, testHeader, testPayload, testMaskedPayload []byte, frameHeader *hybiFrameHeader) { - b := bytes.NewBuffer([]byte{}) - frameWriterFactory := &hybiFrameWriterFactory{bufio.NewWriter(b), false} - w, _ := frameWriterFactory.NewFrameWriter(TextFrame) - w.(*hybiFrameWriter).header = frameHeader - _, err := w.Write(testPayload) - w.Close() - if err != nil { - t.Errorf("Write error %q", err) - } - var expectedFrame []byte - expectedFrame = append(expectedFrame, testHeader...) - expectedFrame = append(expectedFrame, testMaskedPayload...) - if !bytes.Equal(expectedFrame, b.Bytes()) { - t.Errorf("frame expected %q got %q", expectedFrame, b.Bytes()) - } - frameReaderFactory := &hybiFrameReaderFactory{bufio.NewReader(b)} - r, err := frameReaderFactory.NewFrameReader() - if err != nil { - t.Errorf("Read error %q", err) - } - if header := r.HeaderReader(); header == nil { - t.Errorf("no header") - } else { - actualHeader := make([]byte, r.Len()) - n, err := header.Read(actualHeader) - if err != nil { - t.Errorf("Read header error %q", err) - } else { - if n < len(testHeader) { - t.Errorf("header too short %q got %q", testHeader, actualHeader[:n]) - } - if !bytes.Equal(testHeader, actualHeader[:n]) { - t.Errorf("header expected %q got %q", testHeader, actualHeader[:n]) - } - } - } - if trailer := r.TrailerReader(); trailer != nil { - t.Errorf("unexpected trailer %q", trailer) - } - frame := r.(*hybiFrameReader) - if frameHeader.Fin != frame.header.Fin || - frameHeader.OpCode != frame.header.OpCode || - len(testPayload) != int(frame.header.Length) { - t.Errorf("mismatch %v (%d) vs %v", frameHeader, len(testPayload), frame) - } - payload := make([]byte, len(testPayload)) - _, err = r.Read(payload) - if err != nil { - t.Errorf("read %v", err) - } - if !bytes.Equal(testPayload, payload) { - t.Errorf("payload %q vs %q", testPayload, payload) - } -} - -func TestHybiShortTextFrame(t *testing.T) { - frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame} - payload := []byte("hello") - testHybiFrame(t, []byte{0x81, 0x05}, payload, payload, frameHeader) - - payload = make([]byte, 125) - testHybiFrame(t, []byte{0x81, 125}, payload, payload, frameHeader) -} - -func TestHybiShortMaskedTextFrame(t *testing.T) { - frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame, - MaskingKey: []byte{0xcc, 0x55, 0x80, 0x20}} - payload := []byte("hello") - maskedPayload := []byte{0xa4, 0x30, 0xec, 0x4c, 0xa3} - header := []byte{0x81, 0x85} - header = append(header, frameHeader.MaskingKey...) - testHybiFrame(t, header, payload, maskedPayload, frameHeader) -} - -func TestHybiShortBinaryFrame(t *testing.T) { - frameHeader := &hybiFrameHeader{Fin: true, OpCode: BinaryFrame} - payload := []byte("hello") - testHybiFrame(t, []byte{0x82, 0x05}, payload, payload, frameHeader) - - payload = make([]byte, 125) - testHybiFrame(t, []byte{0x82, 125}, payload, payload, frameHeader) -} - -func TestHybiControlFrame(t *testing.T) { - frameHeader := &hybiFrameHeader{Fin: true, OpCode: PingFrame} - payload := []byte("hello") - testHybiFrame(t, []byte{0x89, 0x05}, payload, payload, frameHeader) - - frameHeader = &hybiFrameHeader{Fin: true, OpCode: PongFrame} - testHybiFrame(t, []byte{0x8A, 0x05}, payload, payload, frameHeader) - - frameHeader = &hybiFrameHeader{Fin: true, OpCode: CloseFrame} - payload = []byte{0x03, 0xe8} // 1000 - testHybiFrame(t, []byte{0x88, 0x02}, payload, payload, frameHeader) -} - -func TestHybiLongFrame(t *testing.T) { - frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame} - payload := make([]byte, 126) - testHybiFrame(t, []byte{0x81, 126, 0x00, 126}, payload, payload, frameHeader) - - payload = make([]byte, 65535) - testHybiFrame(t, []byte{0x81, 126, 0xff, 0xff}, payload, payload, frameHeader) - - payload = make([]byte, 65536) - testHybiFrame(t, []byte{0x81, 127, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}, payload, payload, frameHeader) -} - -func TestHybiClientRead(t *testing.T) { - wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o', - 0x89, 0x05, 'h', 'e', 'l', 'l', 'o', // ping - 0x81, 0x05, 'w', 'o', 'r', 'l', 'd'} - br := bufio.NewReader(bytes.NewBuffer(wireData)) - bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) - conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil) - - msg := make([]byte, 512) - n, err := conn.Read(msg) - if err != nil { - t.Errorf("read 1st frame, error %q", err) - } - if n != 5 { - t.Errorf("read 1st frame, expect 5, got %d", n) - } - if !bytes.Equal(wireData[2:7], msg[:n]) { - t.Errorf("read 1st frame %v, got %v", wireData[2:7], msg[:n]) - } - n, err = conn.Read(msg) - if err != nil { - t.Errorf("read 2nd frame, error %q", err) - } - if n != 5 { - t.Errorf("read 2nd frame, expect 5, got %d", n) - } - if !bytes.Equal(wireData[16:21], msg[:n]) { - t.Errorf("read 2nd frame %v, got %v", wireData[16:21], msg[:n]) - } - n, err = conn.Read(msg) - if err == nil { - t.Errorf("read not EOF") - } - if n != 0 { - t.Errorf("expect read 0, got %d", n) - } -} - -func TestHybiShortRead(t *testing.T) { - wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o', - 0x89, 0x05, 'h', 'e', 'l', 'l', 'o', // ping - 0x81, 0x05, 'w', 'o', 'r', 'l', 'd'} - br := bufio.NewReader(bytes.NewBuffer(wireData)) - bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) - conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil) - - step := 0 - pos := 0 - expectedPos := []int{2, 5, 16, 19} - expectedLen := []int{3, 2, 3, 2} - for { - msg := make([]byte, 3) - n, err := conn.Read(msg) - if step >= len(expectedPos) { - if err == nil { - t.Errorf("read not EOF") - } - if n != 0 { - t.Errorf("expect read 0, got %d", n) - } - return - } - pos = expectedPos[step] - endPos := pos + expectedLen[step] - if err != nil { - t.Errorf("read from %d, got error %q", pos, err) - return - } - if n != endPos-pos { - t.Errorf("read from %d, expect %d, got %d", pos, endPos-pos, n) - } - if !bytes.Equal(wireData[pos:endPos], msg[:n]) { - t.Errorf("read from %d, frame %v, got %v", pos, wireData[pos:endPos], msg[:n]) - } - step++ - } -} - -func TestHybiServerRead(t *testing.T) { - wireData := []byte{0x81, 0x85, 0xcc, 0x55, 0x80, 0x20, - 0xa4, 0x30, 0xec, 0x4c, 0xa3, // hello - 0x89, 0x85, 0xcc, 0x55, 0x80, 0x20, - 0xa4, 0x30, 0xec, 0x4c, 0xa3, // ping: hello - 0x81, 0x85, 0xed, 0x83, 0xb4, 0x24, - 0x9a, 0xec, 0xc6, 0x48, 0x89, // world - } - br := bufio.NewReader(bytes.NewBuffer(wireData)) - bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) - conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, new(http.Request)) - - expected := [][]byte{[]byte("hello"), []byte("world")} - - msg := make([]byte, 512) - n, err := conn.Read(msg) - if err != nil { - t.Errorf("read 1st frame, error %q", err) - } - if n != 5 { - t.Errorf("read 1st frame, expect 5, got %d", n) - } - if !bytes.Equal(expected[0], msg[:n]) { - t.Errorf("read 1st frame %q, got %q", expected[0], msg[:n]) - } - - n, err = conn.Read(msg) - if err != nil { - t.Errorf("read 2nd frame, error %q", err) - } - if n != 5 { - t.Errorf("read 2nd frame, expect 5, got %d", n) - } - if !bytes.Equal(expected[1], msg[:n]) { - t.Errorf("read 2nd frame %q, got %q", expected[1], msg[:n]) - } - - n, err = conn.Read(msg) - if err == nil { - t.Errorf("read not EOF") - } - if n != 0 { - t.Errorf("expect read 0, got %d", n) - } -} - -func TestHybiServerReadWithoutMasking(t *testing.T) { - wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o'} - br := bufio.NewReader(bytes.NewBuffer(wireData)) - bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) - conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, new(http.Request)) - // server MUST close the connection upon receiving a non-masked frame. - msg := make([]byte, 512) - _, err := conn.Read(msg) - if err != io.EOF { - t.Errorf("read 1st frame, expect %q, but got %q", io.EOF, err) - } -} - -func TestHybiClientReadWithMasking(t *testing.T) { - wireData := []byte{0x81, 0x85, 0xcc, 0x55, 0x80, 0x20, - 0xa4, 0x30, 0xec, 0x4c, 0xa3, // hello - } - br := bufio.NewReader(bytes.NewBuffer(wireData)) - bw := bufio.NewWriter(bytes.NewBuffer([]byte{})) - conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil) - - // client MUST close the connection upon receiving a masked frame. - msg := make([]byte, 512) - _, err := conn.Read(msg) - if err != io.EOF { - t.Errorf("read 1st frame, expect %q, but got %q", io.EOF, err) - } -} - -// Test the hybiServerHandshaker supports firefox implementation and -// checks Connection request header include (but it's not necessary -// equal to) "upgrade" -func TestHybiServerFirefoxHandshake(t *testing.T) { - config := new(Config) - handshaker := &hybiServerHandshaker{Config: config} - br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1 -Host: server.example.com -Upgrade: websocket -Connection: keep-alive, upgrade -Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== -Origin: http://example.com -Sec-WebSocket-Protocol: chat, superchat -Sec-WebSocket-Version: 13 - -`)) - req, err := http.ReadRequest(br) - if err != nil { - t.Fatal("request", err) - } - code, err := handshaker.ReadHandshake(br, req) - if err != nil { - t.Errorf("handshake failed: %v", err) - } - if code != http.StatusSwitchingProtocols { - t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code) - } - b := bytes.NewBuffer([]byte{}) - bw := bufio.NewWriter(b) - - config.Protocol = []string{"chat"} - - err = handshaker.AcceptHandshake(bw) - if err != nil { - t.Errorf("handshake response failed: %v", err) - } - expectedResponse := strings.Join([]string{ - "HTTP/1.1 101 Switching Protocols", - "Upgrade: websocket", - "Connection: Upgrade", - "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", - "Sec-WebSocket-Protocol: chat", - "", ""}, "\r\n") - - if b.String() != expectedResponse { - t.Errorf("handshake expected %q but got %q", expectedResponse, b.String()) - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/server.go b/Godeps/_workspace/src/code.google.com/p/go.net/websocket/server.go deleted file mode 100644 index 7032213..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/server.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bufio" - "fmt" - "io" - "net/http" -) - -func newServerConn(rwc io.ReadWriteCloser, buf *bufio.ReadWriter, req *http.Request, config *Config, handshake func(*Config, *http.Request) error) (conn *Conn, err error) { - var hs serverHandshaker = &hybiServerHandshaker{Config: config} - code, err := hs.ReadHandshake(buf.Reader, req) - if err == ErrBadWebSocketVersion { - fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) - fmt.Fprintf(buf, "Sec-WebSocket-Version: %s\r\n", SupportedProtocolVersion) - buf.WriteString("\r\n") - buf.WriteString(err.Error()) - buf.Flush() - return - } - if err != nil { - fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) - buf.WriteString("\r\n") - buf.WriteString(err.Error()) - buf.Flush() - return - } - if handshake != nil { - err = handshake(config, req) - if err != nil { - code = http.StatusForbidden - fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) - buf.WriteString("\r\n") - buf.Flush() - return - } - } - err = hs.AcceptHandshake(buf.Writer) - if err != nil { - code = http.StatusBadRequest - fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) - buf.WriteString("\r\n") - buf.Flush() - return - } - conn = hs.NewServerConn(buf, rwc, req) - return -} - -// Server represents a server of a WebSocket. -type Server struct { - // Config is a WebSocket configuration for new WebSocket connection. - Config - - // Handshake is an optional function in WebSocket handshake. - // For example, you can check, or don't check Origin header. - // Another example, you can select config.Protocol. - Handshake func(*Config, *http.Request) error - - // Handler handles a WebSocket connection. - Handler -} - -// ServeHTTP implements the http.Handler interface for a WebSocket -func (s Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { - s.serveWebSocket(w, req) -} - -func (s Server) serveWebSocket(w http.ResponseWriter, req *http.Request) { - rwc, buf, err := w.(http.Hijacker).Hijack() - if err != nil { - panic("Hijack failed: " + err.Error()) - return - } - // The server should abort the WebSocket connection if it finds - // the client did not send a handshake that matches with protocol - // specification. - defer rwc.Close() - conn, err := newServerConn(rwc, buf, req, &s.Config, s.Handshake) - if err != nil { - return - } - if conn == nil { - panic("unexpected nil conn") - } - s.Handler(conn) -} - -// Handler is a simple interface to a WebSocket browser client. -// It checks if Origin header is valid URL by default. -// You might want to verify websocket.Conn.Config().Origin in the func. -// If you use Server instead of Handler, you could call websocket.Origin and -// check the origin in your Handshake func. So, if you want to accept -// non-browser client, which doesn't send Origin header, you could use Server -//. that doesn't check origin in its Handshake. -type Handler func(*Conn) - -func checkOrigin(config *Config, req *http.Request) (err error) { - config.Origin, err = Origin(config, req) - if err == nil && config.Origin == nil { - return fmt.Errorf("null origin") - } - return err -} - -// ServeHTTP implements the http.Handler interface for a WebSocket -func (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) { - s := Server{Handler: h, Handshake: checkOrigin} - s.serveWebSocket(w, req) -} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket_test.go b/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket_test.go deleted file mode 100644 index 48f14b6..0000000 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket_test.go +++ /dev/null @@ -1,341 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bytes" - "fmt" - "io" - "log" - "net" - "net/http" - "net/http/httptest" - "net/url" - "strings" - "sync" - "testing" -) - -var serverAddr string -var once sync.Once - -func echoServer(ws *Conn) { io.Copy(ws, ws) } - -type Count struct { - S string - N int -} - -func countServer(ws *Conn) { - for { - var count Count - err := JSON.Receive(ws, &count) - if err != nil { - return - } - count.N++ - count.S = strings.Repeat(count.S, count.N) - err = JSON.Send(ws, count) - if err != nil { - return - } - } -} - -func subProtocolHandshake(config *Config, req *http.Request) error { - for _, proto := range config.Protocol { - if proto == "chat" { - config.Protocol = []string{proto} - return nil - } - } - return ErrBadWebSocketProtocol -} - -func subProtoServer(ws *Conn) { - for _, proto := range ws.Config().Protocol { - io.WriteString(ws, proto) - } -} - -func startServer() { - http.Handle("/echo", Handler(echoServer)) - http.Handle("/count", Handler(countServer)) - subproto := Server{ - Handshake: subProtocolHandshake, - Handler: Handler(subProtoServer), - } - http.Handle("/subproto", subproto) - server := httptest.NewServer(nil) - serverAddr = server.Listener.Addr().String() - log.Print("Test WebSocket server listening on ", serverAddr) -} - -func newConfig(t *testing.T, path string) *Config { - config, _ := NewConfig(fmt.Sprintf("ws://%s%s", serverAddr, path), "http://localhost") - return config -} - -func TestEcho(t *testing.T) { - once.Do(startServer) - - // websocket.Dial() - client, err := net.Dial("tcp", serverAddr) - if err != nil { - t.Fatal("dialing", err) - } - conn, err := NewClient(newConfig(t, "/echo"), client) - if err != nil { - t.Errorf("WebSocket handshake error: %v", err) - return - } - - msg := []byte("hello, world\n") - if _, err := conn.Write(msg); err != nil { - t.Errorf("Write: %v", err) - } - var actual_msg = make([]byte, 512) - n, err := conn.Read(actual_msg) - if err != nil { - t.Errorf("Read: %v", err) - } - actual_msg = actual_msg[0:n] - if !bytes.Equal(msg, actual_msg) { - t.Errorf("Echo: expected %q got %q", msg, actual_msg) - } - conn.Close() -} - -func TestAddr(t *testing.T) { - once.Do(startServer) - - // websocket.Dial() - client, err := net.Dial("tcp", serverAddr) - if err != nil { - t.Fatal("dialing", err) - } - conn, err := NewClient(newConfig(t, "/echo"), client) - if err != nil { - t.Errorf("WebSocket handshake error: %v", err) - return - } - - ra := conn.RemoteAddr().String() - if !strings.HasPrefix(ra, "ws://") || !strings.HasSuffix(ra, "/echo") { - t.Errorf("Bad remote addr: %v", ra) - } - la := conn.LocalAddr().String() - if !strings.HasPrefix(la, "http://") { - t.Errorf("Bad local addr: %v", la) - } - conn.Close() -} - -func TestCount(t *testing.T) { - once.Do(startServer) - - // websocket.Dial() - client, err := net.Dial("tcp", serverAddr) - if err != nil { - t.Fatal("dialing", err) - } - conn, err := NewClient(newConfig(t, "/count"), client) - if err != nil { - t.Errorf("WebSocket handshake error: %v", err) - return - } - - var count Count - count.S = "hello" - if err := JSON.Send(conn, count); err != nil { - t.Errorf("Write: %v", err) - } - if err := JSON.Receive(conn, &count); err != nil { - t.Errorf("Read: %v", err) - } - if count.N != 1 { - t.Errorf("count: expected %d got %d", 1, count.N) - } - if count.S != "hello" { - t.Errorf("count: expected %q got %q", "hello", count.S) - } - if err := JSON.Send(conn, count); err != nil { - t.Errorf("Write: %v", err) - } - if err := JSON.Receive(conn, &count); err != nil { - t.Errorf("Read: %v", err) - } - if count.N != 2 { - t.Errorf("count: expected %d got %d", 2, count.N) - } - if count.S != "hellohello" { - t.Errorf("count: expected %q got %q", "hellohello", count.S) - } - conn.Close() -} - -func TestWithQuery(t *testing.T) { - once.Do(startServer) - - client, err := net.Dial("tcp", serverAddr) - if err != nil { - t.Fatal("dialing", err) - } - - config := newConfig(t, "/echo") - config.Location, err = url.ParseRequestURI(fmt.Sprintf("ws://%s/echo?q=v", serverAddr)) - if err != nil { - t.Fatal("location url", err) - } - - ws, err := NewClient(config, client) - if err != nil { - t.Errorf("WebSocket handshake: %v", err) - return - } - ws.Close() -} - -func testWithProtocol(t *testing.T, subproto []string) (string, error) { - once.Do(startServer) - - client, err := net.Dial("tcp", serverAddr) - if err != nil { - t.Fatal("dialing", err) - } - - config := newConfig(t, "/subproto") - config.Protocol = subproto - - ws, err := NewClient(config, client) - if err != nil { - return "", err - } - msg := make([]byte, 16) - n, err := ws.Read(msg) - if err != nil { - return "", err - } - ws.Close() - return string(msg[:n]), nil -} - -func TestWithProtocol(t *testing.T) { - proto, err := testWithProtocol(t, []string{"chat"}) - if err != nil { - t.Errorf("SubProto: unexpected error: %v", err) - } - if proto != "chat" { - t.Errorf("SubProto: expected %q, got %q", "chat", proto) - } -} - -func TestWithTwoProtocol(t *testing.T) { - proto, err := testWithProtocol(t, []string{"test", "chat"}) - if err != nil { - t.Errorf("SubProto: unexpected error: %v", err) - } - if proto != "chat" { - t.Errorf("SubProto: expected %q, got %q", "chat", proto) - } -} - -func TestWithBadProtocol(t *testing.T) { - _, err := testWithProtocol(t, []string{"test"}) - if err != ErrBadStatus { - t.Errorf("SubProto: expected %v, got %v", ErrBadStatus, err) - } -} - -func TestHTTP(t *testing.T) { - once.Do(startServer) - - // If the client did not send a handshake that matches the protocol - // specification, the server MUST return an HTTP response with an - // appropriate error code (such as 400 Bad Request) - resp, err := http.Get(fmt.Sprintf("http://%s/echo", serverAddr)) - if err != nil { - t.Errorf("Get: error %#v", err) - return - } - if resp == nil { - t.Error("Get: resp is null") - return - } - if resp.StatusCode != http.StatusBadRequest { - t.Errorf("Get: expected %q got %q", http.StatusBadRequest, resp.StatusCode) - } -} - -func TestTrailingSpaces(t *testing.T) { - // http://code.google.com/p/go/issues/detail?id=955 - // The last runs of this create keys with trailing spaces that should not be - // generated by the client. - once.Do(startServer) - config := newConfig(t, "/echo") - for i := 0; i < 30; i++ { - // body - ws, err := DialConfig(config) - if err != nil { - t.Errorf("Dial #%d failed: %v", i, err) - break - } - ws.Close() - } -} - -func TestDialConfigBadVersion(t *testing.T) { - once.Do(startServer) - config := newConfig(t, "/echo") - config.Version = 1234 - - _, err := DialConfig(config) - - if dialerr, ok := err.(*DialError); ok { - if dialerr.Err != ErrBadProtocolVersion { - t.Errorf("dial expected err %q but got %q", ErrBadProtocolVersion, dialerr.Err) - } - } -} - -func TestSmallBuffer(t *testing.T) { - // http://code.google.com/p/go/issues/detail?id=1145 - // Read should be able to handle reading a fragment of a frame. - once.Do(startServer) - - // websocket.Dial() - client, err := net.Dial("tcp", serverAddr) - if err != nil { - t.Fatal("dialing", err) - } - conn, err := NewClient(newConfig(t, "/echo"), client) - if err != nil { - t.Errorf("WebSocket handshake error: %v", err) - return - } - - msg := []byte("hello, world\n") - if _, err := conn.Write(msg); err != nil { - t.Errorf("Write: %v", err) - } - var small_msg = make([]byte, 8) - n, err := conn.Read(small_msg) - if err != nil { - t.Errorf("Read: %v", err) - } - if !bytes.Equal(msg[:len(small_msg)], small_msg) { - t.Errorf("Echo: expected %q got %q", msg[:len(small_msg)], small_msg) - } - var second_msg = make([]byte, len(msg)) - n, err = conn.Read(second_msg) - if err != nil { - t.Errorf("Read: %v", err) - } - second_msg = second_msg[0:n] - if !bytes.Equal(msg[len(small_msg):], second_msg) { - t.Errorf("Echo: expected %q got %q", msg[len(small_msg):], second_msg) - } - conn.Close() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/.gitignore b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/.gitignore deleted file mode 100644 index 7823778..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.coverprofile diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/.travis.yml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/.travis.yml deleted file mode 100644 index b39955e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: go - -go: - - 1.4.1 - -install: - - go get -t -v ./... - - go install github.com/onsi/ginkgo/ginkgo - -script: - - export PATH=$HOME/gopath/bin:$PATH - - ginkgo -r -failOnPending -randomizeAllSpecs -race diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/LICENSE b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/LICENSE deleted file mode 100644 index f4f87bd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/LICENSE +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/README.md b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/README.md deleted file mode 100644 index 4979e59..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/README.md +++ /dev/null @@ -1,55 +0,0 @@ -[![Build Status](https://travis-ci.org/cloudfoundry-incubator/candiedyaml.svg)](https://travis-ci.org/cloudfoundry-incubator/candiedyaml) - -candiedyaml -=========== - -YAML for Go - -A YAML 1.1 parser with support for YAML 1.2 features - -Usage ------ - -```go -package myApp - -import ( - "github.com/cloudfoundry-incubator/candiedyaml" - "fmt" - "os" -) - -func main() { - file, err := os.Open("path/to/some/file.yml") - if err != nil { - println("File does not exist:", err.Error()) - os.Exit(1) - } - - document := new(interface{}) - decoder := candiedyaml.NewDecoder(file) - err = decoder.Decode(document) - - if err != nil { - println("Failed to decode document:", err.Error()) - } - - println("parsed yml into interface:", fmt.Sprintf("%#v", document)) - - fileToWrite, err := os.Create("path/to/some/new/file.yml") - if err != nil { - println("Failed to open file for writing:", err.Error()) - os.Exit(1) - } - - encoder := candiedyaml.NewEncoder(fileToWrite) - err = encoder.Encode(document) - - if err != nil { - println("Failed to encode document:", err.Error()) - os.Exit(1) - } - - return -} -``` diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/api.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/api.go deleted file mode 100644 index 87c1043..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/api.go +++ /dev/null @@ -1,834 +0,0 @@ -/* -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 candiedyaml - -import ( - "io" -) - -/* - * Create a new parser object. - */ - -func yaml_parser_initialize(parser *yaml_parser_t) bool { - *parser = yaml_parser_t{ - raw_buffer: make([]byte, 0, INPUT_RAW_BUFFER_SIZE), - buffer: make([]byte, 0, INPUT_BUFFER_SIZE), - } - - return true -} - -/* - * Destroy a parser object. - */ -func yaml_parser_delete(parser *yaml_parser_t) { - *parser = yaml_parser_t{} -} - -/* - * String read handler. - */ - -func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (int, error) { - if parser.input_pos == len(parser.input) { - return 0, io.EOF - } - - n := copy(buffer, parser.input[parser.input_pos:]) - parser.input_pos += n - return n, nil -} - -/* - * File read handler. - */ - -func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (int, error) { - return parser.input_reader.Read(buffer) -} - -/* - * Set a string input. - */ - -func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { - if parser.read_handler != nil { - panic("input already set") - } - - parser.read_handler = yaml_string_read_handler - - parser.input = input - parser.input_pos = 0 -} - -/* - * Set a reader input - */ -func yaml_parser_set_input_reader(parser *yaml_parser_t, reader io.Reader) { - if parser.read_handler != nil { - panic("input already set") - } - - parser.read_handler = yaml_file_read_handler - parser.input_reader = reader -} - -/* - * Set a generic input. - */ - -func yaml_parser_set_input(parser *yaml_parser_t, handler yaml_read_handler_t) { - if parser.read_handler != nil { - panic("input already set") - } - - parser.read_handler = handler -} - -/* - * Set the source encoding. - */ - -func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { - if parser.encoding != yaml_ANY_ENCODING { - panic("encoding already set") - } - - parser.encoding = encoding -} - -/* - * Create a new emitter object. - */ - -func yaml_emitter_initialize(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{ - buffer: make([]byte, OUTPUT_BUFFER_SIZE), - raw_buffer: make([]byte, 0, OUTPUT_RAW_BUFFER_SIZE), - states: make([]yaml_emitter_state_t, 0, INITIAL_STACK_SIZE), - events: make([]yaml_event_t, 0, INITIAL_QUEUE_SIZE), - } -} - -func yaml_emitter_delete(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{} -} - -/* - * String write handler. - */ - -func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - *emitter.output_buffer = append(*emitter.output_buffer, buffer...) - return nil -} - -/* - * File write handler. - */ - -func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - _, err := emitter.output_writer.Write(buffer) - return err -} - -/* - * Set a string output. - */ - -func yaml_emitter_set_output_string(emitter *yaml_emitter_t, buffer *[]byte) { - if emitter.write_handler != nil { - panic("output already set") - } - - emitter.write_handler = yaml_string_write_handler - emitter.output_buffer = buffer -} - -/* - * Set a file output. - */ - -func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { - if emitter.write_handler != nil { - panic("output already set") - } - - emitter.write_handler = yaml_writer_write_handler - emitter.output_writer = w -} - -/* - * Set a generic output handler. - */ - -func yaml_emitter_set_output(emitter *yaml_emitter_t, handler yaml_write_handler_t) { - if emitter.write_handler != nil { - panic("output already set") - } - - emitter.write_handler = handler -} - -/* - * Set the output encoding. - */ - -func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { - if emitter.encoding != yaml_ANY_ENCODING { - panic("encoding already set") - } - - emitter.encoding = encoding -} - -/* - * Set the canonical output style. - */ - -func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { - emitter.canonical = canonical -} - -/* - * Set the indentation increment. - */ - -func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { - if indent < 2 || indent > 9 { - indent = 2 - } - emitter.best_indent = indent -} - -/* - * Set the preferred line width. - */ - -func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { - if width < 0 { - width = -1 - } - emitter.best_width = width -} - -/* - * Set if unescaped non-ASCII characters are allowed. - */ - -func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { - emitter.unicode = unicode -} - -/* - * Set the preferred line break character. - */ - -func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { - emitter.line_break = line_break -} - -/* - * Destroy a token object. - */ - -// yaml_DECLARE(void) -// yaml_token_delete(yaml_token_t *token) -// { -// assert(token); /* Non-NULL token object expected. */ -// -// switch (token.type) -// { -// case yaml_TAG_DIRECTIVE_TOKEN: -// yaml_free(token.data.tag_directive.handle); -// yaml_free(token.data.tag_directive.prefix); -// break; -// -// case yaml_ALIAS_TOKEN: -// yaml_free(token.data.alias.value); -// break; -// -// case yaml_ANCHOR_TOKEN: -// yaml_free(token.data.anchor.value); -// break; -// -// case yaml_TAG_TOKEN: -// yaml_free(token.data.tag.handle); -// yaml_free(token.data.tag.suffix); -// break; -// -// case yaml_SCALAR_TOKEN: -// yaml_free(token.data.scalar.value); -// break; -// -// default: -// break; -// } -// -// memset(token, 0, sizeof(yaml_token_t)); -// } - -/* - * Check if a string is a valid UTF-8 sequence. - * - * Check 'reader.c' for more details on UTF-8 encoding. - */ - -// static int -// yaml_check_utf8(yaml_char_t *start, size_t length) -// { -// yaml_char_t *end = start+length; -// yaml_char_t *pointer = start; -// -// while (pointer < end) { -// unsigned char octet; -// unsigned int width; -// unsigned int value; -// size_t k; -// -// octet = pointer[0]; -// width = (octet & 0x80) == 0x00 ? 1 : -// (octet & 0xE0) == 0xC0 ? 2 : -// (octet & 0xF0) == 0xE0 ? 3 : -// (octet & 0xF8) == 0xF0 ? 4 : 0; -// value = (octet & 0x80) == 0x00 ? octet & 0x7F : -// (octet & 0xE0) == 0xC0 ? octet & 0x1F : -// (octet & 0xF0) == 0xE0 ? octet & 0x0F : -// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; -// if (!width) return 0; -// if (pointer+width > end) return 0; -// for (k = 1; k < width; k ++) { -// octet = pointer[k]; -// if ((octet & 0xC0) != 0x80) return 0; -// value = (value << 6) + (octet & 0x3F); -// } -// if (!((width == 1) || -// (width == 2 && value >= 0x80) || -// (width == 3 && value >= 0x800) || -// (width == 4 && value >= 0x10000))) return 0; -// -// pointer += width; -// } -// -// return 1; -// } - -/* - * Create STREAM-START. - */ - -func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { - *event = yaml_event_t{ - event_type: yaml_STREAM_START_EVENT, - encoding: encoding, - } -} - -/* - * Create STREAM-END. - */ - -func yaml_stream_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - event_type: yaml_STREAM_END_EVENT, - } -} - -/* - * Create DOCUMENT-START. - */ - -func yaml_document_start_event_initialize(event *yaml_event_t, - version_directive *yaml_version_directive_t, - tag_directives []yaml_tag_directive_t, - implicit bool) { - *event = yaml_event_t{ - event_type: yaml_DOCUMENT_START_EVENT, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: implicit, - } -} - -/* - * Create DOCUMENT-END. - */ - -func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { - *event = yaml_event_t{ - event_type: yaml_DOCUMENT_END_EVENT, - implicit: implicit, - } -} - -/* - * Create ALIAS. - */ - -func yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) { - *event = yaml_event_t{ - event_type: yaml_ALIAS_EVENT, - anchor: anchor, - } -} - -/* - * Create SCALAR. - */ - -func yaml_scalar_event_initialize(event *yaml_event_t, - anchor []byte, tag []byte, - value []byte, - plain_implicit bool, quoted_implicit bool, - style yaml_scalar_style_t) { - - *event = yaml_event_t{ - event_type: yaml_SCALAR_EVENT, - anchor: anchor, - tag: tag, - value: value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(style), - } -} - -/* - * Create SEQUENCE-START. - */ - -func yaml_sequence_start_event_initialize(event *yaml_event_t, - anchor []byte, tag []byte, implicit bool, style yaml_sequence_style_t) { - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } -} - -/* - * Create SEQUENCE-END. - */ - -func yaml_sequence_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_END_EVENT, - } -} - -/* - * Create MAPPING-START. - */ - -func yaml_mapping_start_event_initialize(event *yaml_event_t, - anchor []byte, tag []byte, implicit bool, style yaml_mapping_style_t) { - *event = yaml_event_t{ - event_type: yaml_MAPPING_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } -} - -/* - * Create MAPPING-END. - */ - -func yaml_mapping_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - event_type: yaml_MAPPING_END_EVENT, - } -} - -/* - * Destroy an event object. - */ - -func yaml_event_delete(event *yaml_event_t) { - *event = yaml_event_t{} -} - -// /* -// * Create a document object. -// */ -// -// func yaml_document_initialize(document *yaml_document_t, -// version_directive *yaml_version_directive_t, -// tag_directives []yaml_tag_directive_t, -// start_implicit, end_implicit bool) bool { -// -// -// { -// struct { -// YAML_error_type_t error; -// } context; -// struct { -// yaml_node_t *start; -// yaml_node_t *end; -// yaml_node_t *top; -// } nodes = { NULL, NULL, NULL }; -// yaml_version_directive_t *version_directive_copy = NULL; -// struct { -// yaml_tag_directive_t *start; -// yaml_tag_directive_t *end; -// yaml_tag_directive_t *top; -// } tag_directives_copy = { NULL, NULL, NULL }; -// yaml_tag_directive_t value = { NULL, NULL }; -// YAML_mark_t mark = { 0, 0, 0 }; -// -// assert(document); /* Non-NULL document object is expected. */ -// assert((tag_directives_start && tag_directives_end) || -// (tag_directives_start == tag_directives_end)); -// /* Valid tag directives are expected. */ -// -// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error; -// -// if (version_directive) { -// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)); -// if (!version_directive_copy) goto error; -// version_directive_copy.major = version_directive.major; -// version_directive_copy.minor = version_directive.minor; -// } -// -// if (tag_directives_start != tag_directives_end) { -// yaml_tag_directive_t *tag_directive; -// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) -// goto error; -// for (tag_directive = tag_directives_start; -// tag_directive != tag_directives_end; tag_directive ++) { -// assert(tag_directive.handle); -// assert(tag_directive.prefix); -// if (!yaml_check_utf8(tag_directive.handle, -// strlen((char *)tag_directive.handle))) -// goto error; -// if (!yaml_check_utf8(tag_directive.prefix, -// strlen((char *)tag_directive.prefix))) -// goto error; -// value.handle = yaml_strdup(tag_directive.handle); -// value.prefix = yaml_strdup(tag_directive.prefix); -// if (!value.handle || !value.prefix) goto error; -// if (!PUSH(&context, tag_directives_copy, value)) -// goto error; -// value.handle = NULL; -// value.prefix = NULL; -// } -// } -// -// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, -// tag_directives_copy.start, tag_directives_copy.top, -// start_implicit, end_implicit, mark, mark); -// -// return 1; -// -// error: -// STACK_DEL(&context, nodes); -// yaml_free(version_directive_copy); -// while (!STACK_EMPTY(&context, tag_directives_copy)) { -// yaml_tag_directive_t value = POP(&context, tag_directives_copy); -// yaml_free(value.handle); -// yaml_free(value.prefix); -// } -// STACK_DEL(&context, tag_directives_copy); -// yaml_free(value.handle); -// yaml_free(value.prefix); -// -// return 0; -// } -// -// /* -// * Destroy a document object. -// */ -// -// yaml_DECLARE(void) -// yaml_document_delete(document *yaml_document_t) -// { -// struct { -// YAML_error_type_t error; -// } context; -// yaml_tag_directive_t *tag_directive; -// -// context.error = yaml_NO_ERROR; /* Eliminate a compliler warning. */ -// -// assert(document); /* Non-NULL document object is expected. */ -// -// while (!STACK_EMPTY(&context, document.nodes)) { -// yaml_node_t node = POP(&context, document.nodes); -// yaml_free(node.tag); -// switch (node.type) { -// case yaml_SCALAR_NODE: -// yaml_free(node.data.scalar.value); -// break; -// case yaml_SEQUENCE_NODE: -// STACK_DEL(&context, node.data.sequence.items); -// break; -// case yaml_MAPPING_NODE: -// STACK_DEL(&context, node.data.mapping.pairs); -// break; -// default: -// assert(0); /* Should not happen. */ -// } -// } -// STACK_DEL(&context, document.nodes); -// -// yaml_free(document.version_directive); -// for (tag_directive = document.tag_directives.start; -// tag_directive != document.tag_directives.end; -// tag_directive++) { -// yaml_free(tag_directive.handle); -// yaml_free(tag_directive.prefix); -// } -// yaml_free(document.tag_directives.start); -// -// memset(document, 0, sizeof(yaml_document_t)); -// } -// -// /** -// * Get a document node. -// */ -// -// yaml_DECLARE(yaml_node_t *) -// yaml_document_get_node(document *yaml_document_t, int index) -// { -// assert(document); /* Non-NULL document object is expected. */ -// -// if (index > 0 && document.nodes.start + index <= document.nodes.top) { -// return document.nodes.start + index - 1; -// } -// return NULL; -// } -// -// /** -// * Get the root object. -// */ -// -// yaml_DECLARE(yaml_node_t *) -// yaml_document_get_root_node(document *yaml_document_t) -// { -// assert(document); /* Non-NULL document object is expected. */ -// -// if (document.nodes.top != document.nodes.start) { -// return document.nodes.start; -// } -// return NULL; -// } -// -// /* -// * Add a scalar node to a document. -// */ -// -// yaml_DECLARE(int) -// yaml_document_add_scalar(document *yaml_document_t, -// yaml_char_t *tag, yaml_char_t *value, int length, -// yaml_scalar_style_t style) -// { -// struct { -// YAML_error_type_t error; -// } context; -// YAML_mark_t mark = { 0, 0, 0 }; -// yaml_char_t *tag_copy = NULL; -// yaml_char_t *value_copy = NULL; -// yaml_node_t node; -// -// assert(document); /* Non-NULL document object is expected. */ -// assert(value); /* Non-NULL value is expected. */ -// -// if (!tag) { -// tag = (yaml_char_t *)yaml_DEFAULT_SCALAR_TAG; -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error; -// tag_copy = yaml_strdup(tag); -// if (!tag_copy) goto error; -// -// if (length < 0) { -// length = strlen((char *)value); -// } -// -// if (!yaml_check_utf8(value, length)) goto error; -// value_copy = yaml_malloc(length+1); -// if (!value_copy) goto error; -// memcpy(value_copy, value, length); -// value_copy[length] = '\0'; -// -// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark); -// if (!PUSH(&context, document.nodes, node)) goto error; -// -// return document.nodes.top - document.nodes.start; -// -// error: -// yaml_free(tag_copy); -// yaml_free(value_copy); -// -// return 0; -// } -// -// /* -// * Add a sequence node to a document. -// */ -// -// yaml_DECLARE(int) -// yaml_document_add_sequence(document *yaml_document_t, -// yaml_char_t *tag, yaml_sequence_style_t style) -// { -// struct { -// YAML_error_type_t error; -// } context; -// YAML_mark_t mark = { 0, 0, 0 }; -// yaml_char_t *tag_copy = NULL; -// struct { -// yaml_node_item_t *start; -// yaml_node_item_t *end; -// yaml_node_item_t *top; -// } items = { NULL, NULL, NULL }; -// yaml_node_t node; -// -// assert(document); /* Non-NULL document object is expected. */ -// -// if (!tag) { -// tag = (yaml_char_t *)yaml_DEFAULT_SEQUENCE_TAG; -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error; -// tag_copy = yaml_strdup(tag); -// if (!tag_copy) goto error; -// -// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error; -// -// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, -// style, mark, mark); -// if (!PUSH(&context, document.nodes, node)) goto error; -// -// return document.nodes.top - document.nodes.start; -// -// error: -// STACK_DEL(&context, items); -// yaml_free(tag_copy); -// -// return 0; -// } -// -// /* -// * Add a mapping node to a document. -// */ -// -// yaml_DECLARE(int) -// yaml_document_add_mapping(document *yaml_document_t, -// yaml_char_t *tag, yaml_mapping_style_t style) -// { -// struct { -// YAML_error_type_t error; -// } context; -// YAML_mark_t mark = { 0, 0, 0 }; -// yaml_char_t *tag_copy = NULL; -// struct { -// yaml_node_pair_t *start; -// yaml_node_pair_t *end; -// yaml_node_pair_t *top; -// } pairs = { NULL, NULL, NULL }; -// yaml_node_t node; -// -// assert(document); /* Non-NULL document object is expected. */ -// -// if (!tag) { -// tag = (yaml_char_t *)yaml_DEFAULT_MAPPING_TAG; -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error; -// tag_copy = yaml_strdup(tag); -// if (!tag_copy) goto error; -// -// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error; -// -// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, -// style, mark, mark); -// if (!PUSH(&context, document.nodes, node)) goto error; -// -// return document.nodes.top - document.nodes.start; -// -// error: -// STACK_DEL(&context, pairs); -// yaml_free(tag_copy); -// -// return 0; -// } -// -// /* -// * Append an item to a sequence node. -// */ -// -// yaml_DECLARE(int) -// yaml_document_append_sequence_item(document *yaml_document_t, -// int sequence, int item) -// { -// struct { -// YAML_error_type_t error; -// } context; -// -// assert(document); /* Non-NULL document is required. */ -// assert(sequence > 0 -// && document.nodes.start + sequence <= document.nodes.top); -// /* Valid sequence id is required. */ -// assert(document.nodes.start[sequence-1].type == yaml_SEQUENCE_NODE); -// /* A sequence node is required. */ -// assert(item > 0 && document.nodes.start + item <= document.nodes.top); -// /* Valid item id is required. */ -// -// if (!PUSH(&context, -// document.nodes.start[sequence-1].data.sequence.items, item)) -// return 0; -// -// return 1; -// } -// -// /* -// * Append a pair of a key and a value to a mapping node. -// */ -// -// yaml_DECLARE(int) -// yaml_document_append_mapping_pair(document *yaml_document_t, -// int mapping, int key, int value) -// { -// struct { -// YAML_error_type_t error; -// } context; -// -// yaml_node_pair_t pair; -// -// assert(document); /* Non-NULL document is required. */ -// assert(mapping > 0 -// && document.nodes.start + mapping <= document.nodes.top); -// /* Valid mapping id is required. */ -// assert(document.nodes.start[mapping-1].type == yaml_MAPPING_NODE); -// /* A mapping node is required. */ -// assert(key > 0 && document.nodes.start + key <= document.nodes.top); -// /* Valid key id is required. */ -// assert(value > 0 && document.nodes.start + value <= document.nodes.top); -// /* Valid value id is required. */ -// -// pair.key = key; -// pair.value = value; -// -// if (!PUSH(&context, -// document.nodes.start[mapping-1].data.mapping.pairs, pair)) -// return 0; -// -// return 1; -// } -// diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/candiedyaml_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/candiedyaml_suite_test.go deleted file mode 100644 index 0b97fe9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/candiedyaml_suite_test.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -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 candiedyaml - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCandiedyaml(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Candiedyaml Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/decode.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/decode.go deleted file mode 100644 index 3cb5d73..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/decode.go +++ /dev/null @@ -1,622 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" - "errors" - "fmt" - "io" - "reflect" - "runtime" - "strconv" - "strings" -) - -type Unmarshaler interface { - UnmarshalYAML(tag string, value interface{}) error -} - -// A Number represents a JSON number literal. -type Number string - -// String returns the literal text of the number. -func (n Number) String() string { return string(n) } - -// Float64 returns the number as a float64. -func (n Number) Float64() (float64, error) { - return strconv.ParseFloat(string(n), 64) -} - -// Int64 returns the number as an int64. -func (n Number) Int64() (int64, error) { - return strconv.ParseInt(string(n), 10, 64) -} - -type Decoder struct { - parser yaml_parser_t - event yaml_event_t - replay_events []yaml_event_t - useNumber bool - - anchors map[string][]yaml_event_t - tracking_anchors [][]yaml_event_t -} - -type ParserError struct { - ErrorType YAML_error_type_t - Context string - ContextMark YAML_mark_t - Problem string - ProblemMark YAML_mark_t -} - -func (e *ParserError) Error() string { - return fmt.Sprintf("yaml: [%s] %s at line %d, column %d", e.Context, e.Problem, e.ProblemMark.line+1, e.ProblemMark.column+1) -} - -type UnexpectedEventError struct { - Value string - EventType yaml_event_type_t - At YAML_mark_t -} - -func (e *UnexpectedEventError) Error() string { - return fmt.Sprintf("yaml: Unexpect event [%d]: '%s' at line %d, column %d", e.EventType, e.Value, e.At.line+1, e.At.column+1) -} - -func recovery(err *error) { - if r := recover(); r != nil { - if _, ok := r.(runtime.Error); ok { - panic(r) - } - - var tmpError error - switch r := r.(type) { - case error: - tmpError = r - case string: - tmpError = errors.New(r) - default: - tmpError = errors.New("Unknown panic: " + reflect.ValueOf(r).String()) - } - - *err = tmpError - } -} - -func Unmarshal(data []byte, v interface{}) error { - d := NewDecoder(bytes.NewBuffer(data)) - return d.Decode(v) -} - -func NewDecoder(r io.Reader) *Decoder { - d := &Decoder{ - anchors: make(map[string][]yaml_event_t), - tracking_anchors: make([][]yaml_event_t, 1), - } - yaml_parser_initialize(&d.parser) - yaml_parser_set_input_reader(&d.parser, r) - return d -} - -func (d *Decoder) Decode(v interface{}) (err error) { - defer recovery(&err) - - rv := reflect.ValueOf(v) - if rv.Kind() != reflect.Ptr || rv.IsNil() { - return fmt.Errorf("Expected a pointer or nil but was a %s at %s", rv.String(), d.event.start_mark) - } - - if d.event.event_type == yaml_NO_EVENT { - d.nextEvent() - - if d.event.event_type != yaml_STREAM_START_EVENT { - return errors.New("Invalid stream") - } - - d.nextEvent() - } - - d.document(rv) - return nil -} - -func (d *Decoder) UseNumber() { d.useNumber = true } - -func (d *Decoder) error(err error) { - panic(err) -} - -func (d *Decoder) nextEvent() { - if d.event.event_type == yaml_STREAM_END_EVENT { - d.error(errors.New("The stream is closed")) - } - - if d.replay_events != nil { - d.event = d.replay_events[0] - if len(d.replay_events) == 1 { - d.replay_events = nil - } else { - d.replay_events = d.replay_events[1:] - } - } else { - if !yaml_parser_parse(&d.parser, &d.event) { - yaml_event_delete(&d.event) - - d.error(&ParserError{ - ErrorType: d.parser.error, - Context: d.parser.context, - ContextMark: d.parser.context_mark, - Problem: d.parser.problem, - ProblemMark: d.parser.problem_mark, - }) - } - } - - last := len(d.tracking_anchors) - // skip aliases when tracking an anchor - if last > 0 && d.event.event_type != yaml_ALIAS_EVENT { - d.tracking_anchors[last-1] = append(d.tracking_anchors[last-1], d.event) - } -} - -func (d *Decoder) document(rv reflect.Value) { - if d.event.event_type != yaml_DOCUMENT_START_EVENT { - d.error(fmt.Errorf("Expected document start at %s", d.event.start_mark)) - } - - d.nextEvent() - d.parse(rv) - - if d.event.event_type != yaml_DOCUMENT_END_EVENT { - d.error(fmt.Errorf("Expected document end at %s", d.event.start_mark)) - } - - d.nextEvent() -} - -func (d *Decoder) parse(rv reflect.Value) { - if !rv.IsValid() { - // skip ahead since we cannot store - d.valueInterface() - return - } - - anchor := string(d.event.anchor) - switch d.event.event_type { - case yaml_SEQUENCE_START_EVENT: - d.begin_anchor(anchor) - d.sequence(rv) - d.end_anchor(anchor) - case yaml_MAPPING_START_EVENT: - d.begin_anchor(anchor) - d.mapping(rv) - d.end_anchor(anchor) - case yaml_SCALAR_EVENT: - d.begin_anchor(anchor) - d.scalar(rv) - d.end_anchor(anchor) - case yaml_ALIAS_EVENT: - d.alias(rv) - case yaml_DOCUMENT_END_EVENT: - default: - d.error(&UnexpectedEventError{ - Value: string(d.event.value), - EventType: d.event.event_type, - At: d.event.start_mark, - }) - } -} - -func (d *Decoder) begin_anchor(anchor string) { - if anchor != "" { - events := []yaml_event_t{d.event} - d.tracking_anchors = append(d.tracking_anchors, events) - } -} - -func (d *Decoder) end_anchor(anchor string) { - if anchor != "" { - events := d.tracking_anchors[len(d.tracking_anchors)-1] - d.tracking_anchors = d.tracking_anchors[0 : len(d.tracking_anchors)-1] - // remove the anchor, replaying events shouldn't have anchors - events[0].anchor = nil - // we went one too many, remove the extra event - events = events[:len(events)-1] - // if nested, append to all the other anchors - for i, e := range d.tracking_anchors { - d.tracking_anchors[i] = append(e, events...) - } - d.anchors[anchor] = events - } -} - -func (d *Decoder) indirect(v reflect.Value, decodingNull bool) (Unmarshaler, reflect.Value) { - // If v is a named type and is addressable, - // start with its address, so that if the type has pointer methods, - // we find them. - if v.Kind() != reflect.Ptr && v.Type().Name() != "" && v.CanAddr() { - v = v.Addr() - } - for { - // Load value from interface, but only if the result will be - // usefully addressable. - if v.Kind() == reflect.Interface && !v.IsNil() { - e := v.Elem() - if e.Kind() == reflect.Ptr && !e.IsNil() && (!decodingNull || e.Elem().Kind() == reflect.Ptr) { - v = e - continue - } - } - - if v.Kind() != reflect.Ptr { - break - } - - if v.Elem().Kind() != reflect.Ptr && decodingNull && v.CanSet() { - break - } - - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - - if v.Type().NumMethod() > 0 { - if u, ok := v.Interface().(Unmarshaler); ok { - var temp interface{} - return u, reflect.ValueOf(&temp) - } - } - - v = v.Elem() - } - - return nil, v -} - -func (d *Decoder) sequence(v reflect.Value) { - if d.event.event_type != yaml_SEQUENCE_START_EVENT { - d.error(fmt.Errorf("Expected sequence start at %s", d.event.start_mark)) - } - - u, pv := d.indirect(v, false) - if u != nil { - defer func() { - if err := u.UnmarshalYAML(yaml_SEQ_TAG, pv.Interface()); err != nil { - d.error(err) - } - }() - _, pv = d.indirect(pv, false) - } - - v = pv - - // Check type of target. - switch v.Kind() { - case reflect.Interface: - if v.NumMethod() == 0 { - // Decoding into nil interface? Switch to non-reflect code. - v.Set(reflect.ValueOf(d.sequenceInterface())) - return - } - // Otherwise it's invalid. - fallthrough - default: - d.error(fmt.Errorf("Expected an array, slice or interface{} but was a %s at %s", v, d.event.start_mark)) - case reflect.Array: - case reflect.Slice: - break - } - - d.nextEvent() - - i := 0 -done: - for { - switch d.event.event_type { - case yaml_SEQUENCE_END_EVENT, yaml_DOCUMENT_END_EVENT: - break done - } - - // Get element of array, growing if necessary. - if v.Kind() == reflect.Slice { - // Grow slice if necessary - if i >= v.Cap() { - newcap := v.Cap() + v.Cap()/2 - if newcap < 4 { - newcap = 4 - } - newv := reflect.MakeSlice(v.Type(), v.Len(), newcap) - reflect.Copy(newv, v) - v.Set(newv) - } - if i >= v.Len() { - v.SetLen(i + 1) - } - } - - if i < v.Len() { - // Decode into element. - d.parse(v.Index(i)) - } else { - // Ran out of fixed array: skip. - d.parse(reflect.Value{}) - } - i++ - } - - if i < v.Len() { - if v.Kind() == reflect.Array { - // Array. Zero the rest. - z := reflect.Zero(v.Type().Elem()) - for ; i < v.Len(); i++ { - v.Index(i).Set(z) - } - } else { - v.SetLen(i) - } - } - if i == 0 && v.Kind() == reflect.Slice { - v.Set(reflect.MakeSlice(v.Type(), 0, 0)) - } - - if d.event.event_type != yaml_DOCUMENT_END_EVENT { - d.nextEvent() - } -} - -func (d *Decoder) mapping(v reflect.Value) { - u, pv := d.indirect(v, false) - if u != nil { - defer func() { - if err := u.UnmarshalYAML(yaml_MAP_TAG, pv.Interface()); err != nil { - d.error(err) - } - }() - _, pv = d.indirect(pv, false) - } - v = pv - - // Decoding into nil interface? Switch to non-reflect code. - if v.Kind() == reflect.Interface && v.NumMethod() == 0 { - v.Set(reflect.ValueOf(d.mappingInterface())) - return - } - - // Check type of target: struct or map[X]Y - switch v.Kind() { - case reflect.Struct: - d.mappingStruct(v) - return - case reflect.Map: - default: - d.error(fmt.Errorf("Expected a struct or map but was a %s at %s ", v, d.event.start_mark)) - } - - mapt := v.Type() - if v.IsNil() { - v.Set(reflect.MakeMap(mapt)) - } - - d.nextEvent() - - keyt := mapt.Key() - mapElemt := mapt.Elem() - - var mapElem reflect.Value -done: - for { - switch d.event.event_type { - case yaml_MAPPING_END_EVENT: - break done - case yaml_DOCUMENT_END_EVENT: - return - } - - key := reflect.New(keyt) - d.parse(key.Elem()) - - if !mapElem.IsValid() { - mapElem = reflect.New(mapElemt).Elem() - } else { - mapElem.Set(reflect.Zero(mapElemt)) - } - - d.parse(mapElem) - - v.SetMapIndex(key.Elem(), mapElem) - } - - d.nextEvent() -} - -func (d *Decoder) mappingStruct(v reflect.Value) { - - structt := v.Type() - fields := cachedTypeFields(structt) - - d.nextEvent() - -done: - for { - switch d.event.event_type { - case yaml_MAPPING_END_EVENT: - break done - case yaml_DOCUMENT_END_EVENT: - return - } - - key := "" - d.parse(reflect.ValueOf(&key)) - - // Figure out field corresponding to key. - var subv reflect.Value - - var f *field - for i := range fields { - ff := &fields[i] - if ff.name == key { - f = ff - break - } - - if f == nil && strings.EqualFold(ff.name, key) { - f = ff - } - } - - if f != nil { - subv = v - for _, i := range f.index { - if subv.Kind() == reflect.Ptr { - if subv.IsNil() { - subv.Set(reflect.New(subv.Type().Elem())) - } - subv = subv.Elem() - } - subv = subv.Field(i) - } - } - d.parse(subv) - } - - d.nextEvent() -} - -func (d *Decoder) scalar(v reflect.Value) { - val := string(d.event.value) - wantptr := null_values[val] - - u, pv := d.indirect(v, wantptr) - - var tag string - if u != nil { - defer func() { - if err := u.UnmarshalYAML(tag, pv.Interface()); err != nil { - d.error(err) - } - }() - - _, pv = d.indirect(pv, wantptr) - } - v = pv - - var err error - tag, err = resolve(d.event, v, d.useNumber) - if err != nil { - d.error(err) - } - - d.nextEvent() -} - -func (d *Decoder) alias(rv reflect.Value) { - val, ok := d.anchors[string(d.event.anchor)] - if !ok { - d.error(fmt.Errorf("missing anchor: '%s' at %s", d.event.anchor, d.event.start_mark)) - } - - d.replay_events = val - d.nextEvent() - d.parse(rv) -} - -func (d *Decoder) valueInterface() interface{} { - var v interface{} - - anchor := string(d.event.anchor) - switch d.event.event_type { - case yaml_SEQUENCE_START_EVENT: - d.begin_anchor(anchor) - v = d.sequenceInterface() - case yaml_MAPPING_START_EVENT: - d.begin_anchor(anchor) - v = d.mappingInterface() - case yaml_SCALAR_EVENT: - d.begin_anchor(anchor) - v = d.scalarInterface() - case yaml_ALIAS_EVENT: - rv := reflect.ValueOf(&v) - d.alias(rv) - return v - case yaml_DOCUMENT_END_EVENT: - d.error(&UnexpectedEventError{ - Value: string(d.event.value), - EventType: d.event.event_type, - At: d.event.start_mark, - }) - - } - d.end_anchor(anchor) - - return v -} - -func (d *Decoder) scalarInterface() interface{} { - _, v := resolveInterface(d.event, d.useNumber) - - d.nextEvent() - return v -} - -// arrayInterface is like array but returns []interface{}. -func (d *Decoder) sequenceInterface() []interface{} { - var v = make([]interface{}, 0) - - d.nextEvent() - -done: - for { - switch d.event.event_type { - case yaml_SEQUENCE_END_EVENT, yaml_DOCUMENT_END_EVENT: - break done - } - - v = append(v, d.valueInterface()) - } - - if d.event.event_type != yaml_DOCUMENT_END_EVENT { - d.nextEvent() - } - - return v -} - -// objectInterface is like object but returns map[string]interface{}. -func (d *Decoder) mappingInterface() map[interface{}]interface{} { - m := make(map[interface{}]interface{}) - - d.nextEvent() - -done: - for { - switch d.event.event_type { - case yaml_MAPPING_END_EVENT, yaml_DOCUMENT_END_EVENT: - break done - } - - key := d.valueInterface() - - // Read value. - m[key] = d.valueInterface() - } - - if d.event.event_type != yaml_DOCUMENT_END_EVENT { - d.nextEvent() - } - - return m -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/decode_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/decode_test.go deleted file mode 100644 index 6ba1275..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/decode_test.go +++ /dev/null @@ -1,906 +0,0 @@ -/* -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 candiedyaml - -import ( - "math" - "os" - "strconv" - "strings" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Decode", func() { - It("Decodes a file", func() { - f, _ := os.Open("fixtures/specification/example2_1.yaml") - d := NewDecoder(f) - var v interface{} - err := d.Decode(&v) - - Expect(err).NotTo(HaveOccurred()) - }) - - Context("strings", func() { - It("Decodes an empty string", func() { - d := NewDecoder(strings.NewReader(`"" -`)) - var v string - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal("")) - }) - - It("Decodes an empty string to an interface", func() { - d := NewDecoder(strings.NewReader(`"" -`)) - var v interface{} - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal("")) - }) - - It("Decodes a map containing empty strings to an interface", func() { - d := NewDecoder(strings.NewReader(`"" : "" -`)) - var v interface{} - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[interface{}]interface{}{"": ""})) - }) - }) - - Context("Sequence", func() { - It("Decodes to interface{}s", func() { - f, _ := os.Open("fixtures/specification/example2_1.yaml") - d := NewDecoder(f) - var v interface{} - err := d.Decode(&v) - - Expect(err).NotTo(HaveOccurred()) - Expect((v).([]interface{})).To(Equal([]interface{}{"Mark McGwire", "Sammy Sosa", "Ken Griffey"})) - }) - - It("Decodes to []string", func() { - f, _ := os.Open("fixtures/specification/example2_1.yaml") - d := NewDecoder(f) - v := make([]string, 0, 3) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([]string{"Mark McGwire", "Sammy Sosa", "Ken Griffey"})) - }) - - It("Decodes a sequence of maps", func() { - f, _ := os.Open("fixtures/specification/example2_12.yaml") - d := NewDecoder(f) - v := make([]map[string]interface{}, 1) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([]map[string]interface{}{ - {"item": "Super Hoop", "quantity": int64(1)}, - {"item": "Basketball", "quantity": int64(4)}, - {"item": "Big Shoes", "quantity": int64(1)}, - })) - - }) - - Describe("As structs", func() { - It("Simple struct", func() { - f, _ := os.Open("fixtures/specification/example2_4.yaml") - d := NewDecoder(f) - - type batter struct { - Name string - HR int64 - AVG float64 - } - v := make([]batter, 0, 1) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([]batter{ - batter{Name: "Mark McGwire", HR: 65, AVG: 0.278}, - batter{Name: "Sammy Sosa", HR: 63, AVG: 0.288}, - })) - - }) - - It("Tagged struct", func() { - f, _ := os.Open("fixtures/specification/example2_4.yaml") - d := NewDecoder(f) - - type batter struct { - N string `yaml:"name"` - H int64 `yaml:"hr"` - A float64 `yaml:"avg"` - } - v := make([]batter, 0, 1) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([]batter{ - batter{N: "Mark McGwire", H: 65, A: 0.278}, - batter{N: "Sammy Sosa", H: 63, A: 0.288}, - })) - - }) - - It("handles null values", func() { - type S struct { - Default interface{} - } - - d := NewDecoder(strings.NewReader(` ---- -default: -`)) - var s S - err := d.Decode(&s) - Expect(err).NotTo(HaveOccurred()) - Expect(s).To(Equal(S{Default: nil})) - - }) - - It("ignores missing tags", func() { - f, _ := os.Open("fixtures/specification/example2_4.yaml") - d := NewDecoder(f) - - type batter struct { - N string `yaml:"name"` - HR int64 - A float64 - } - v := make([]batter, 0, 1) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([]batter{ - batter{N: "Mark McGwire", HR: 65}, - batter{N: "Sammy Sosa", HR: 63}, - })) - - }) - }) - - It("Decodes a sequence of sequences", func() { - f, _ := os.Open("fixtures/specification/example2_5.yaml") - d := NewDecoder(f) - v := make([][]interface{}, 1) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([][]interface{}{ - {"name", "hr", "avg"}, - {"Mark McGwire", int64(65), float64(0.278)}, - {"Sammy Sosa", int64(63), float64(0.288)}, - })) - - }) - }) - - Context("Maps", func() { - It("Decodes to interface{}s", func() { - f, _ := os.Open("fixtures/specification/example2_2.yaml") - d := NewDecoder(f) - var v interface{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect((v).(map[interface{}]interface{})).To(Equal(map[interface{}]interface{}{ - "hr": int64(65), - "avg": float64(0.278), - "rbi": int64(147), - })) - - }) - - It("Decodes to a struct", func() { - f, _ := os.Open("fixtures/specification/example2_2.yaml") - d := NewDecoder(f) - - type batter struct { - HR int64 - AVG float64 - RBI int64 - } - v := batter{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(batter{HR: 65, AVG: 0.278, RBI: 147})) - }) - - It("Decodes to a map of string arrays", func() { - f, _ := os.Open("fixtures/specification/example2_9.yaml") - d := NewDecoder(f) - v := make(map[string][]string) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string][]string{"hr": []string{"Mark McGwire", "Sammy Sosa"}, "rbi": []string{"Sammy Sosa", "Ken Griffey"}})) - }) - }) - - Context("Sequence of Maps", func() { - It("Decodes to interface{}s", func() { - f, _ := os.Open("fixtures/specification/example2_4.yaml") - d := NewDecoder(f) - var v interface{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect((v).([]interface{})).To(Equal([]interface{}{ - map[interface{}]interface{}{"name": "Mark McGwire", "hr": int64(65), "avg": float64(0.278)}, - map[interface{}]interface{}{"name": "Sammy Sosa", "hr": int64(63), "avg": float64(0.288)}, - })) - - }) - }) - - It("Decodes ascii art", func() { - f, _ := os.Open("fixtures/specification/example2_13.yaml") - d := NewDecoder(f) - v := "" - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(`\//||\/|| -// || ||__ -`)) - - }) - - It("Decodes folded strings", func() { - f, _ := os.Open("fixtures/specification/example2_15.yaml") - d := NewDecoder(f) - v := "" - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal("Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n")) - }) - - It("Decodes literal and folded strings with indents", func() { - f, _ := os.Open("fixtures/specification/example2_16.yaml") - d := NewDecoder(f) - v := make(map[string]string) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]string{ - "name": "Mark McGwire", - "accomplishment": `Mark set a major league home run record in 1998. -`, - "stats": `65 Home Runs -0.278 Batting Average -`, - })) - - }) - - It("Decodes single quoted", func() { - f, _ := os.Open("fixtures/specification/example2_17_quoted.yaml") - d := NewDecoder(f) - v := make(map[string]string) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]string{ - "quoted": ` # not a 'comment'.`, - })) - - }) - - Context("ints", func() { - It("Decodes into an interface{}", func() { - f, _ := os.Open("fixtures/specification/example2_19.yaml") - d := NewDecoder(f) - v := make(map[string]interface{}) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "canonical": int64(12345), - "decimal": int64(12345), - "octal": int64(12), - "hexadecimal": int64(12), - })) - - }) - - It("Decodes into int64", func() { - f, _ := os.Open("fixtures/specification/example2_19.yaml") - d := NewDecoder(f) - v := make(map[string]int64) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]int64{ - "canonical": int64(12345), - "decimal": int64(12345), - "octal": int64(12), - "hexadecimal": int64(12), - })) - - }) - - Context("boundary values", func() { - intoInt64 := func(val int64) { - It("Decodes into an int64 value", func() { - var v int64 - - d := NewDecoder(strings.NewReader(strconv.FormatInt(val, 10))) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(val)) - - }) - } - - intoInt := func(val int) { - It("Decodes into an int value", func() { - var v int - - d := NewDecoder(strings.NewReader(strconv.FormatInt(int64(val), 10))) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(val)) - - }) - } - - intoInterface := func(val int64) { - It("Decodes into an interface{}", func() { - var v interface{} - - d := NewDecoder(strings.NewReader(strconv.FormatInt(val, 10))) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(val)) - }) - } - - intoInt64(math.MaxInt64) - intoInterface(math.MaxInt64) - - intoInt64(math.MinInt64) - intoInterface(math.MinInt64) - - intoInt(math.MaxInt32) - intoInt(math.MinInt32) - }) - }) - - It("Decodes a variety of floats", func() { - f, _ := os.Open("fixtures/specification/example2_20.yaml") - d := NewDecoder(f) - v := make(map[string]float64) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - - Expect(math.IsNaN(v["not a number"])).To(BeTrue()) - delete(v, "not a number") - - Expect(v).To(Equal(map[string]float64{ - "canonical": float64(1230.15), - "exponential": float64(1230.15), - "fixed": float64(1230.15), - "negative infinity": math.Inf(-1), - })) - - }) - - It("Decodes booleans, nil and strings", func() { - f, _ := os.Open("fixtures/specification/example2_21.yaml") - d := NewDecoder(f) - v := make(map[string]interface{}) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "": interface{}(nil), - "true": true, - "false": false, - "string": "12345", - })) - - }) - - It("Decodes a null ptr", func() { - d := NewDecoder(strings.NewReader(`null -`)) - var v *bool - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(BeNil()) - }) - - It("Decodes dates/time", func() { - f, _ := os.Open("fixtures/specification/example2_22.yaml") - d := NewDecoder(f) - v := make(map[string]time.Time) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]time.Time{ - "canonical": time.Date(2001, time.December, 15, 2, 59, 43, int(1*time.Millisecond), time.UTC), - "iso8601": time.Date(2001, time.December, 14, 21, 59, 43, int(10*time.Millisecond), time.FixedZone("", -5*3600)), - "spaced": time.Date(2001, time.December, 14, 21, 59, 43, int(10*time.Millisecond), time.FixedZone("", -5*3600)), - "date": time.Date(2002, time.December, 14, 0, 0, 0, 0, time.UTC), - })) - - }) - - Context("Tags", func() { - It("Respects tags", func() { - f, _ := os.Open("fixtures/specification/example2_23_non_date.yaml") - d := NewDecoder(f) - v := make(map[string]string) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]string{ - "not-date": "2002-04-28", - })) - - }) - - It("handles non-specific tags", func() { - d := NewDecoder(strings.NewReader(` ---- -not_parsed: ! 123 -`)) - v := make(map[string]int) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]int{"not_parsed": 123})) - }) - - It("handles non-specific tags", func() { - d := NewDecoder(strings.NewReader(` ---- -? a complex key -: ! "123" -`)) - v := make(map[string]string) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]string{"a complex key": "123"})) - }) - }) - - Context("Decodes binary/base64", func() { - It("to []byte", func() { - f, _ := os.Open("fixtures/specification/example2_23_picture.yaml") - d := NewDecoder(f) - v := make(map[string][]byte) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string][]byte{ - "picture": []byte{0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x0c, 0x00, - 0x0c, 0x00, 0x84, 0x00, 0x00, 0xff, 0xff, 0xf7, 0xf5, 0xf5, 0xee, - 0xe9, 0xe9, 0xe5, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0xe7, 0xe7, - 0xe7, 0x5e, 0x5e, 0x5e, 0xf3, 0xf3, 0xed, 0x8e, 0x8e, 0x8e, 0xe0, - 0xe0, 0xe0, 0x9f, 0x9f, 0x9f, 0x93, 0x93, 0x93, 0xa7, 0xa7, 0xa7, - 0x9e, 0x9e, 0x9e, 0x69, 0x5e, 0x10, 0x27, 0x20, 0x82, 0x0a, 0x01, - 0x00, 0x3b}, - })) - - }) - - It("to string", func() { - d := NewDecoder(strings.NewReader("!binary YWJjZGVmZw==")) - var v string - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal("abcdefg")) - }) - - It("to string via alternate form", func() { - d := NewDecoder(strings.NewReader("!!binary YWJjZGVmZw==")) - var v string - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal("abcdefg")) - }) - - It("to interface", func() { - d := NewDecoder(strings.NewReader("!binary YWJjZGVmZw==")) - var v interface{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal([]byte("abcdefg"))) - }) - }) - - Context("Aliases", func() { - Context("to known types", func() { - It("aliases scalars", func() { - f, _ := os.Open("fixtures/specification/example2_10.yaml") - d := NewDecoder(f) - v := make(map[string][]string) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string][]string{ - "hr": {"Mark McGwire", "Sammy Sosa"}, - "rbi": {"Sammy Sosa", "Ken Griffey"}, - })) - - }) - - It("aliases sequences", func() { - d := NewDecoder(strings.NewReader(` ---- -hr: &ss - - MG - - SS -rbi: *ss -`)) - v := make(map[string][]string) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string][]string{ - "hr": {"MG", "SS"}, - "rbi": {"MG", "SS"}, - })) - - }) - - It("aliases maps", func() { - d := NewDecoder(strings.NewReader(` ---- -hr: &ss - MG : SS -rbi: *ss -`)) - v := make(map[string]map[string]string) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]map[string]string{ - "hr": {"MG": "SS"}, - "rbi": {"MG": "SS"}, - })) - - }) - }) - - It("aliases to different types", func() { - type S struct { - A map[string]int - C map[string]string - } - d := NewDecoder(strings.NewReader(` ---- -a: &map - b : 1 -c: *map -`)) - var s S - err := d.Decode(&s) - Expect(err).NotTo(HaveOccurred()) - Expect(s).To(Equal(S{ - A: map[string]int{"b": 1}, - C: map[string]string{"b": "1"}, - })) - - }) - - It("fails if an anchor is undefined", func() { - d := NewDecoder(strings.NewReader(` ---- -a: *missing -`)) - m := make(map[string]string) - err := d.Decode(&m) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(MatchRegexp("missing anchor.*line.*column.*")) - }) - - Context("to Interface", func() { - It("aliases scalars", func() { - f, _ := os.Open("fixtures/specification/example2_10.yaml") - d := NewDecoder(f) - v := make(map[string]interface{}) - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "hr": []interface{}{"Mark McGwire", "Sammy Sosa"}, - "rbi": []interface{}{"Sammy Sosa", "Ken Griffey"}, - })) - - }) - - It("aliases sequences", func() { - d := NewDecoder(strings.NewReader(` ---- -hr: &ss - - MG - - SS -rbi: *ss -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "hr": []interface{}{"MG", "SS"}, - "rbi": []interface{}{"MG", "SS"}, - })) - - }) - - It("aliases maps", func() { - d := NewDecoder(strings.NewReader(` ---- -hr: &ss - MG : SS -rbi: *ss -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "hr": map[interface{}]interface{}{"MG": "SS"}, - "rbi": map[interface{}]interface{}{"MG": "SS"}, - })) - - }) - - It("supports duplicate aliases", func() { - d := NewDecoder(strings.NewReader(` ---- -a: &a - b: 1 -x: *a -y: *a -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "a": map[interface{}]interface{}{"b": int64(1)}, - "x": map[interface{}]interface{}{"b": int64(1)}, - "y": map[interface{}]interface{}{"b": int64(1)}, - })) - - }) - - It("supports overriden anchors", func() { - d := NewDecoder(strings.NewReader(` ---- -First occurrence: &anchor Foo -Second occurrence: *anchor -Override anchor: &anchor Bar -Reuse anchor: *anchor -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "First occurrence": "Foo", - "Second occurrence": "Foo", - "Override anchor": "Bar", - "Reuse anchor": "Bar", - })) - - }) - - It("fails if an anchor is undefined", func() { - d := NewDecoder(strings.NewReader(` ---- -a: *missing -`)) - var i interface{} - err := d.Decode(&i) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(MatchRegexp("missing anchor.*line.*column.*")) - }) - - }) - - It("supports composing aliases", func() { - d := NewDecoder(strings.NewReader(` ---- -a: &a b -x: &b - d: *a -z: *b -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "a": "b", - "x": map[interface{}]interface{}{"d": "b"}, - "z": map[interface{}]interface{}{"d": "b"}, - })) - - }) - - It("redefinition while composing aliases", func() { - d := NewDecoder(strings.NewReader(` ---- -a: &a b -x: &c - d : &a 1 -y: *a -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(Equal(map[string]interface{}{ - "a": "b", - "x": map[interface{}]interface{}{"d": int64(1)}, - "y": int64(1), - })) - - }) - - It("can parse nested anchors", func() { - d := NewDecoder(strings.NewReader(` ---- -a: - aa: &x - aaa: 1 - ab: - aba: &y - abaa: - abaaa: *x -b: -- ba: - baa: *y -`)) - v := make(map[string]interface{}) - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("When decoding fails", func() { - It("returns an error", func() { - f, _ := os.Open("fixtures/specification/example_empty.yaml") - d := NewDecoder(f) - var v interface{} - - err := d.Decode(&v) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Expected document start at line 0, column 0")) - }) - }) - - Context("Unmarshaler support", func() { - Context("Receiver is a value", func() { - It("the Marshaler interface is not used", func() { - d := NewDecoder(strings.NewReader("abc\n")) - v := hasMarshaler{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v.Value).To(BeNil()) - }) - }) - - Context("Receiver is a pointer", func() { - It("uses the Marshaler interface when a pointer", func() { - d := NewDecoder(strings.NewReader("abc\n")) - v := hasPtrMarshaler{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - }) - - It("marshals a scalar", func() { - d := NewDecoder(strings.NewReader("abc\n")) - v := hasPtrMarshaler{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v.Tag).To(Equal(yaml_STR_TAG)) - Expect(v.Value).To(Equal("abc")) - }) - - It("marshals a sequence", func() { - d := NewDecoder(strings.NewReader("[abc, def]\n")) - v := hasPtrMarshaler{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v.Tag).To(Equal(yaml_SEQ_TAG)) - Expect(v.Value).To(Equal([]interface{}{"abc", "def"})) - }) - - It("marshals a map", func() { - d := NewDecoder(strings.NewReader("{ a: bc}\n")) - v := hasPtrMarshaler{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v.Tag).To(Equal(yaml_MAP_TAG)) - Expect(v.Value).To(Equal(map[interface{}]interface{}{"a": "bc"})) - }) - }) - }) - - Context("Marshals into a Number", func() { - It("when the number is an int", func() { - d := NewDecoder(strings.NewReader("123\n")) - d.UseNumber() - var v Number - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v.String()).To(Equal("123")) - }) - - It("when the number is an float", func() { - d := NewDecoder(strings.NewReader("1.23\n")) - d.UseNumber() - var v Number - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v.String()).To(Equal("1.23")) - }) - - It("it fails when its a non-Number", func() { - d := NewDecoder(strings.NewReader("on\n")) - d.UseNumber() - var v Number - - err := d.Decode(&v) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(MatchRegexp("Not a number: 'on' at line 0, column 0")) - }) - - It("returns a Number", func() { - d := NewDecoder(strings.NewReader("123\n")) - d.UseNumber() - var v interface{} - - err := d.Decode(&v) - Expect(err).NotTo(HaveOccurred()) - Expect(v).To(BeAssignableToTypeOf(Number(""))) - - n := v.(Number) - Expect(n.String()).To(Equal("123")) - }) - }) - Context("When there are special characters", func() { - It("returns an error", func() { - d := NewDecoder(strings.NewReader(` ---- -applications: - - name: m - services: - - !@# -`)) - var v interface{} - - err := d.Decode(&v) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(MatchRegexp("yaml.*did not find.*line.*column.*")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/emitter.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/emitter.go deleted file mode 100644 index 4f07eb6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/emitter.go +++ /dev/null @@ -1,2072 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" -) - -var default_tag_directives = []yaml_tag_directive_t{ - {[]byte("!"), []byte("!")}, - {[]byte("!!"), []byte("tag:yaml.org,2002:")}, -} - -/* - * Flush the buffer if needed. - */ - -func flush(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) { - return yaml_emitter_flush(emitter) - } - return true -} - -/* - * Put a character to the output buffer. - */ -func put(emitter *yaml_emitter_t, value byte) bool { - if !flush(emitter) { - return false - } - - emitter.buffer[emitter.buffer_pos] = value - emitter.buffer_pos++ - emitter.column++ - return true -} - -/* - * Put a line break to the output buffer. - */ - -func put_break(emitter *yaml_emitter_t) bool { - if !flush(emitter) { - return false - } - switch emitter.line_break { - case yaml_CR_BREAK: - emitter.buffer[emitter.buffer_pos] = '\r' - emitter.buffer_pos++ - case yaml_LN_BREAK: - emitter.buffer[emitter.buffer_pos] = '\n' - emitter.buffer_pos++ - case yaml_CRLN_BREAK: - emitter.buffer[emitter.buffer_pos] = '\r' - emitter.buffer[emitter.buffer_pos] = '\n' - emitter.buffer_pos += 2 - default: - return false - } - emitter.column = 0 - emitter.line++ - return true -} - -/* - * Copy a character from a string into buffer. - */ -func write(emitter *yaml_emitter_t, src []byte, src_pos *int) bool { - if !flush(emitter) { - return false - } - copy_bytes(emitter.buffer, &emitter.buffer_pos, src, src_pos) - emitter.column++ - return true -} - -/* - * Copy a line break character from a string into buffer. - */ - -func write_break(emitter *yaml_emitter_t, src []byte, src_pos *int) bool { - if src[*src_pos] == '\n' { - if !put_break(emitter) { - return false - } - *src_pos++ - } else { - if !write(emitter, src, src_pos) { - return false - } - emitter.column = 0 - emitter.line++ - } - - return true -} - -/* - * Set an emitter error and return 0. - */ - -func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_EMITTER_ERROR - emitter.problem = problem - return false -} - -/* - * Emit an event. - */ - -func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.events = append(emitter.events, *event) - for !yaml_emitter_need_more_events(emitter) { - event := &emitter.events[emitter.events_head] - if !yaml_emitter_analyze_event(emitter, event) { - return false - } - if !yaml_emitter_state_machine(emitter, event) { - return false - } - yaml_event_delete(event) - emitter.events_head++ - } - return true -} - -/* - * Check if we need to accumulate more events before emitting. - * - * We accumulate extra - * - 1 event for DOCUMENT-START - * - 2 events for SEQUENCE-START - * - 3 events for MAPPING-START - */ - -func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { - if emitter.events_head == len(emitter.events) { - return true - } - - accumulate := 0 - switch emitter.events[emitter.events_head].event_type { - case yaml_DOCUMENT_START_EVENT: - accumulate = 1 - case yaml_SEQUENCE_START_EVENT: - accumulate = 2 - case yaml_MAPPING_START_EVENT: - accumulate = 3 - default: - return false - } - - if len(emitter.events)-emitter.events_head > accumulate { - return false - } - - level := 0 - for i := emitter.events_head; i < len(emitter.events); i++ { - switch emitter.events[i].event_type { - case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: - level++ - case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: - level-- - } - - if level == 0 { - return false - } - } - return true -} - -/* - * Append a directive to the directives stack. - */ - -func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, - value *yaml_tag_directive_t, allow_duplicates bool) bool { - - for i := range emitter.tag_directives { - - if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_emitter_set_emitter_error(emitter, "duplicat %TAG directive") - } - } - - tag_copy := yaml_tag_directive_t{ - handle: value.handle, - prefix: value.prefix, - } - - emitter.tag_directives = append(emitter.tag_directives, tag_copy) - - return true -} - -/* - * Increase the indentation level. - */ - -func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow bool, indentless bool) bool { - - emitter.indents = append(emitter.indents, emitter.indent) - - if emitter.indent < 0 { - if flow { - emitter.indent = emitter.best_indent - } else { - emitter.indent = 0 - } - } else if !indentless { - emitter.indent += emitter.best_indent - } - - return true -} - -/* - * State dispatcher. - */ - -func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { - switch emitter.state { - case yaml_EMIT_STREAM_START_STATE: - return yaml_emitter_emit_stream_start(emitter, event) - - case yaml_EMIT_FIRST_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, true) - - case yaml_EMIT_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, false) - - case yaml_EMIT_DOCUMENT_CONTENT_STATE: - return yaml_emitter_emit_document_content(emitter, event) - - case yaml_EMIT_DOCUMENT_END_STATE: - return yaml_emitter_emit_document_end(emitter, event) - - case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, true) - - case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, false) - - case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, true) - - case yaml_EMIT_FLOW_MAPPING_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, false) - - case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, true) - - case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, false) - - case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, true) - - case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, false) - - case yaml_EMIT_END_STATE: - return yaml_emitter_set_emitter_error(emitter, - "expected nothing after STREAM-END") - - } - - panic("invalid state") -} - -/* - * Expect STREAM-START. - */ - -func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - if event.event_type != yaml_STREAM_START_EVENT { - return yaml_emitter_set_emitter_error(emitter, - "expected STREAM-START") - } - - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = event.encoding - - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = yaml_UTF8_ENCODING - } - } - - if emitter.best_indent < 2 || emitter.best_indent > 9 { - emitter.best_indent = 2 - } - - if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { - emitter.best_width = 80 - } - - if emitter.best_width < 0 { - emitter.best_width = 1<<31 - 1 - } - - if emitter.line_break == yaml_ANY_BREAK { - emitter.line_break = yaml_LN_BREAK - } - - emitter.indent = -1 - - emitter.line = 0 - emitter.column = 0 - emitter.whitespace = true - emitter.indention = true - - if emitter.encoding != yaml_UTF8_ENCODING { - if !yaml_emitter_write_bom(emitter) { - return false - } - } - - emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE - - return true -} - -/* - * Expect DOCUMENT-START or STREAM-END. - */ - -func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, - event *yaml_event_t, first bool) bool { - - if event.event_type == yaml_DOCUMENT_START_EVENT { - if event.version_directive != nil { - if !yaml_emitter_analyze_version_directive(emitter, - *event.version_directive) { - return false - } - } - - for i := range event.tag_directives { - tag_directive := &event.tag_directives[i] - - if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { - return false - } - if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { - return false - } - } - - for i := range default_tag_directives { - if !yaml_emitter_append_tag_directive(emitter, &default_tag_directives[i], true) { - return false - } - } - - implicit := event.implicit - if !first || emitter.canonical { - implicit = false - } - - if (event.version_directive != nil || len(event.tag_directives) > 0) && - emitter.open_ended { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if event.version_directive != nil { - implicit = false - if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { - return false - } - - if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { - return false - } - - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if len(event.tag_directives) > 0 { - implicit = false - for i := range event.tag_directives { - tag_directive := &event.tag_directives[i] - - if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { - return false - } - if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - if yaml_emitter_check_empty_document(emitter) { - implicit = false - } - - if !implicit { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { - return false - } - - if emitter.canonical { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE - - return true - } else if event.event_type == yaml_STREAM_END_EVENT { - if emitter.open_ended { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if !yaml_emitter_flush(emitter) { - return false - } - - emitter.state = yaml_EMIT_END_STATE - - return true - } - - return yaml_emitter_set_emitter_error(emitter, - "expected DOCUMENT-START or STREAM-END") -} - -/* - * Expect the root node. - */ - -func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) - - return yaml_emitter_emit_node(emitter, event, true, false, false, false) -} - -/* - * Expect DOCUMENT-END. - */ - -func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - if event.event_type != yaml_DOCUMENT_END_EVENT { - return yaml_emitter_set_emitter_error(emitter, - "expected DOCUMENT-END") - } - - if !yaml_emitter_write_indent(emitter) { - return false - } - if !event.implicit { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - - emitter.state = yaml_EMIT_DOCUMENT_START_STATE - emitter.tag_directives = emitter.tag_directives[:0] - return true -} - -/* - * - * Expect a flow item node. - */ - -func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte("["), true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.event_type == yaml_SEQUENCE_END_EVENT { - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.canonical && !first { - if !yaml_emitter_write_indicator(emitter, []byte(","), false, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte("]"), false, false, false) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !first { - if !yaml_emitter_write_indicator(emitter, []byte(","), false, false, false) { - return false - } - } - - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) - return yaml_emitter_emit_node(emitter, event, false, true, false, false) -} - -/* - * Expect a flow key node. - */ - -func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, - event *yaml_event_t, first bool) bool { - - if first { - - if !yaml_emitter_write_indicator(emitter, []byte("{"), true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.event_type == yaml_MAPPING_END_EVENT { - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - - if emitter.canonical && !first { - if !yaml_emitter_write_indicator(emitter, []byte(","), false, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte("}"), false, false, false) { - return false - } - - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !first { - if !yaml_emitter_write_indicator(emitter, []byte(","), false, false, false) { - return false - } - } - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } else { - if !yaml_emitter_write_indicator(emitter, []byte("?"), true, false, false) { - return false - } - - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) - } -} - -/* - * Expect a flow value node. - */ - -func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, - event *yaml_event_t, simple bool) bool { - - if simple { - if !yaml_emitter_write_indicator(emitter, []byte(":"), false, false, false) { - return false - } - } else { - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte(":"), true, false, false) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -/* - * Expect a block item node. - */ - -func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, - event *yaml_event_t, first bool) bool { - - if first { - if !yaml_emitter_increase_indent(emitter, false, - (emitter.mapping_context && !emitter.indention)) { - return false - } - } - - if event.event_type == yaml_SEQUENCE_END_EVENT { - - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("-"), true, false, true) { - return false - } - - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) - return yaml_emitter_emit_node(emitter, event, false, true, false, false) -} - -/* - * Expect a block key node. - */ - -func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, - event *yaml_event_t, first bool) bool { - - if first { - if !yaml_emitter_increase_indent(emitter, false, false) { - return false - } - } - - if event.event_type == yaml_MAPPING_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !yaml_emitter_write_indent(emitter) { - return false - } - - if yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) - - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } else { - if !yaml_emitter_write_indicator(emitter, []byte("?"), true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) - - return yaml_emitter_emit_node(emitter, event, false, false, true, false) - } -} - -/* - * Expect a block value node. - */ - -func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, - event *yaml_event_t, simple bool) bool { - - if simple { - if !yaml_emitter_write_indicator(emitter, []byte(":"), false, false, false) { - return false - } - } else { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte(":"), true, false, true) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) - - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -/* - * Expect a node. - */ - -func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, - root bool, sequence bool, mapping bool, simple_key bool) bool { - emitter.root_context = root - emitter.sequence_context = sequence - emitter.mapping_context = mapping - emitter.simple_key_context = simple_key - - switch event.event_type { - case yaml_ALIAS_EVENT: - return yaml_emitter_emit_alias(emitter, event) - - case yaml_SCALAR_EVENT: - return yaml_emitter_emit_scalar(emitter, event) - - case yaml_SEQUENCE_START_EVENT: - return yaml_emitter_emit_sequence_start(emitter, event) - - case yaml_MAPPING_START_EVENT: - return yaml_emitter_emit_mapping_start(emitter, event) - - default: - return yaml_emitter_set_emitter_error(emitter, - "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS") - } - - return false -} - -/* - * Expect ALIAS. - */ - -func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true -} - -/* - * Expect SCALAR. - */ - -func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_select_scalar_style(emitter, event) { - return false - } - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - if !yaml_emitter_process_scalar(emitter) { - return false - } - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true -} - -/* - * Expect SEQUENCE-START. - */ - -func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - - if emitter.flow_level > 0 || emitter.canonical || - event.style == yaml_style_t(yaml_FLOW_SEQUENCE_STYLE) || - yaml_emitter_check_empty_sequence(emitter) { - emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE - } - - return true -} - -/* - * Expect MAPPING-START. - */ - -func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - - if emitter.flow_level > 0 || emitter.canonical || - event.style == yaml_style_t(yaml_FLOW_MAPPING_STYLE) || - yaml_emitter_check_empty_mapping(emitter) { - emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE - } - - return true -} - -/* - * Check if the document content is an empty scalar. - */ - -func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { - return false -} - -/* - * Check if the next events represent an empty sequence. - */ - -func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - - return (emitter.events[emitter.events_head].event_type == yaml_SEQUENCE_START_EVENT && - emitter.events[emitter.events_head+1].event_type == yaml_SEQUENCE_END_EVENT) -} - -/* - * Check if the next events represent an empty mapping. - */ - -func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - - return (emitter.events[emitter.events_head].event_type == yaml_MAPPING_START_EVENT && - emitter.events[emitter.events_head+1].event_type == yaml_MAPPING_END_EVENT) -} - -/* - * Check if the next node can be expressed as a simple key. - */ - -func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { - length := 0 - - switch emitter.events[emitter.events_head].event_type { - case yaml_ALIAS_EVENT: - length += len(emitter.anchor_data.anchor) - - case yaml_SCALAR_EVENT: - if emitter.scalar_data.multiline { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) + - len(emitter.scalar_data.value) - - case yaml_SEQUENCE_START_EVENT: - if !yaml_emitter_check_empty_sequence(emitter) { - return false - } - - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - - case yaml_MAPPING_START_EVENT: - if !yaml_emitter_check_empty_mapping(emitter) { - return false - } - - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - - default: - return false - } - - if length > 128 { - return false - } - - return true -} - -/* - * Determine an acceptable scalar style. - */ - -func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { - no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 - - if no_tag && !event.implicit && !event.quoted_implicit { - return yaml_emitter_set_emitter_error(emitter, - "neither tag nor implicit flags are specified") - } - - style := yaml_scalar_style_t(event.style) - - if style == yaml_ANY_SCALAR_STYLE { - style = yaml_PLAIN_SCALAR_STYLE - } - - if emitter.canonical { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - if emitter.simple_key_context && emitter.scalar_data.multiline { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - if style == yaml_PLAIN_SCALAR_STYLE { - if (emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed) || - (emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed) { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if len(emitter.scalar_data.value) == 0 && - (emitter.flow_level > 0 || emitter.simple_key_context) { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if no_tag && !event.implicit { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - } - - if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { - if !emitter.scalar_data.single_quoted_allowed { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - - if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { - if !emitter.scalar_data.block_allowed || - emitter.flow_level > 0 || emitter.simple_key_context { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - - if no_tag && !event.quoted_implicit && - style != yaml_PLAIN_SCALAR_STYLE { - emitter.tag_data.handle = []byte("!") - } - - emitter.scalar_data.style = style - - return true -} - -/* - * Write an achor. - */ - -func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { - if emitter.anchor_data.anchor == nil { - return true - } - - indicator := "*" - if !emitter.anchor_data.alias { - indicator = "&" - } - if !yaml_emitter_write_indicator(emitter, []byte(indicator), true, false, false) { - return false - } - - return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) -} - -/* - * Write a tag. - */ - -func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { - if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { - return true - } - - if len(emitter.tag_data.handle) > 0 { - if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { - return false - } - - if len(emitter.tag_data.suffix) > 0 { - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - - } - } else { - if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { - return false - } - - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - - if !yaml_emitter_write_indicator(emitter, []byte(">"), false, false, false) { - return false - } - - } - - return true -} - -/* - * Write a scalar. - */ - -func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { - switch emitter.scalar_data.style { - case yaml_PLAIN_SCALAR_STYLE: - return yaml_emitter_write_plain_scalar(emitter, - emitter.scalar_data.value, - !emitter.simple_key_context) - - case yaml_SINGLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_single_quoted_scalar(emitter, - emitter.scalar_data.value, - !emitter.simple_key_context) - - case yaml_DOUBLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_double_quoted_scalar(emitter, - emitter.scalar_data.value, - !emitter.simple_key_context) - - case yaml_LITERAL_SCALAR_STYLE: - return yaml_emitter_write_literal_scalar(emitter, - emitter.scalar_data.value) - - case yaml_FOLDED_SCALAR_STYLE: - return yaml_emitter_write_folded_scalar(emitter, - emitter.scalar_data.value) - - default: - panic("unknown scalar") - } - - return false -} - -/* - * Check if a %YAML directive is valid. - */ - -func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, - version_directive yaml_version_directive_t) bool { - if version_directive.major != 1 || version_directive.minor != 1 { - return yaml_emitter_set_emitter_error(emitter, - "incompatible %YAML directive") - } - - return true -} - -/* - * Check if a %TAG directive is valid. - */ - -func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, - tag_directive *yaml_tag_directive_t) bool { - handle := tag_directive.handle - prefix := tag_directive.prefix - - if len(handle) == 0 { - return yaml_emitter_set_emitter_error(emitter, - "tag handle must not be empty") - } - - if handle[0] != '!' { - return yaml_emitter_set_emitter_error(emitter, - "tag handle must start with '!'") - } - - if handle[len(handle)-1] != '!' { - return yaml_emitter_set_emitter_error(emitter, - "tag handle must end with '!'") - } - - for i := 1; i < len(handle)-1; width(handle[i]) { - if !is_alpha(handle[i]) { - return yaml_emitter_set_emitter_error(emitter, - "tag handle must contain alphanumerical characters only") - } - } - - if len(prefix) == 0 { - return yaml_emitter_set_emitter_error(emitter, - "tag prefix must not be empty") - } - - return true -} - -/* - * Check if an anchor is valid. - */ - -func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, - anchor []byte, alias bool) bool { - if len(anchor) == 0 { - errmsg := "alias value must not be empty" - if !alias { - errmsg = "anchor value must not be empty" - } - return yaml_emitter_set_emitter_error(emitter, errmsg) - } - - for i := 0; i < len(anchor); i += width(anchor[i]) { - if !is_alpha(anchor[i]) { - errmsg := "alias value must contain alphanumerical characters only" - if !alias { - errmsg = "anchor value must contain alphanumerical characters only" - } - return yaml_emitter_set_emitter_error(emitter, errmsg) - } - } - - emitter.anchor_data.anchor = anchor - emitter.anchor_data.alias = alias - - return true -} - -/* - * Check if a tag is valid. - */ - -func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { - if len(tag) == 0 { - return yaml_emitter_set_emitter_error(emitter, - "tag value must not be empty") - } - - for i := range emitter.tag_directives { - tag_directive := &emitter.tag_directives[i] - if bytes.HasPrefix(tag, tag_directive.prefix) { - emitter.tag_data.handle = tag_directive.handle - emitter.tag_data.suffix = tag[len(tag_directive.prefix):] - return true - } - } - - emitter.tag_data.suffix = tag - - return true -} - -/* - * Check if a scalar is valid. - */ - -func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { - block_indicators := false - flow_indicators := false - line_breaks := false - special_characters := false - - leading_space := false - leading_break := false - trailing_space := false - trailing_break := false - break_space := false - space_break := false - - preceeded_by_whitespace := false - followed_by_whitespace := false - previous_space := false - previous_break := false - - emitter.scalar_data.value = value - - if len(value) == 0 { - emitter.scalar_data.multiline = false - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = false - - return true - } - - if (value[0] == '-' && value[1] == '-' && value[2] == '-') || - (value[0] == '.' && value[1] == '.' && value[2] == '.') { - block_indicators = true - flow_indicators = true - } - - preceeded_by_whitespace = true - - for i, w := 0, 0; i < len(value); i += w { - w = width(value[i]) - followed_by_whitespace = i+w >= len(value) || is_blankz_at(value, w) - - if i == 0 { - switch value[i] { - case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': - flow_indicators = true - block_indicators = true - case '?', ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '-': - if followed_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } else { - switch value[i] { - case ',', '?', '[', ']', '{', '}': - flow_indicators = true - case ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '#': - if preceeded_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } - - if !is_printable_at(value, i) || (!is_ascii(value[i]) && !emitter.unicode) { - special_characters = true - } - - if is_break_at(value, i) { - line_breaks = true - } - - if is_space(value[i]) { - if i == 0 { - leading_space = true - } - if i+w == len(value) { - trailing_space = true - } - if previous_break { - break_space = true - } - previous_space = true - previous_break = false - } else if is_break_at(value, i) { - if i == 0 { - leading_break = true - } - if i+width(value[i]) == len(value) { - trailing_break = true - } - if previous_space { - space_break = true - } - previous_space = false - previous_break = true - } else { - previous_space = false - previous_break = false - } - - preceeded_by_whitespace = is_blankz_at(value, i) - } - - emitter.scalar_data.multiline = line_breaks - - emitter.scalar_data.flow_plain_allowed = true - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = true - - if leading_space || leading_break || trailing_space || trailing_break { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - - if trailing_space { - emitter.scalar_data.block_allowed = false - } - - if break_space { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - } - - if space_break || special_characters { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - emitter.scalar_data.block_allowed = false - } - - if line_breaks { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - - if flow_indicators { - emitter.scalar_data.flow_plain_allowed = false - } - - if block_indicators { - emitter.scalar_data.block_plain_allowed = false - } - - return true -} - -/* - * Check if the event data is valid. - */ - -func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.anchor_data.anchor = nil - emitter.tag_data.handle = nil - emitter.tag_data.suffix = nil - emitter.scalar_data.value = nil - - switch event.event_type { - case yaml_ALIAS_EVENT: - if !yaml_emitter_analyze_anchor(emitter, - event.anchor, true) { - return false - } - - case yaml_SCALAR_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, - event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || - (!event.implicit && - !event.quoted_implicit)) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - if !yaml_emitter_analyze_scalar(emitter, event.value) { - return false - } - case yaml_SEQUENCE_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, - event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || - !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, - event.tag) { - return false - } - } - case yaml_MAPPING_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, - event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || - !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, - event.tag) { - return false - } - } - - } - return true -} - -/* - * Write the BOM character. - */ - -func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { - if !flush(emitter) { - return false - } - - pos := emitter.buffer_pos - emitter.buffer[pos] = '\xEF' - emitter.buffer[pos+1] = '\xBB' - emitter.buffer[pos+2] = '\xBF' - emitter.buffer_pos += 3 - return true -} - -func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { - indent := emitter.indent - if indent < 0 { - indent = 0 - } - - if !emitter.indention || emitter.column > indent || - (emitter.column == indent && !emitter.whitespace) { - if !put_break(emitter) { - return false - } - } - - for emitter.column < indent { - if !put(emitter, ' ') { - return false - } - } - - emitter.whitespace = true - emitter.indention = true - - return true -} - -func yaml_emitter_write_indicator(emitter *yaml_emitter_t, - indicator []byte, need_whitespace bool, - is_whitespace bool, is_indention bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - ind_pos := 0 - for ind_pos < len(indicator) { - if !write(emitter, indicator, &ind_pos) { - return false - } - } - - emitter.whitespace = is_whitespace - emitter.indention = (emitter.indention && is_indention) - emitter.open_ended = false - - return true -} - -func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { - pos := 0 - for pos < len(value) { - if !write(emitter, value, &pos) { - return false - } - } - - emitter.whitespace = false - emitter.indention = false - - return true -} - -func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - pos := 0 - for pos < len(value) { - if !write(emitter, value, &pos) { - return false - } - } - - emitter.whitespace = false - emitter.indention = false - - return true -} - -func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, - need_whitespace bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - for i := 0; i < len(value); { - write_it := false - switch value[i] { - case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', - '.', '!', '~', '*', '\'', '(', ')', '[', ']': - write_it = true - default: - write_it = is_alpha(value[i]) - } - if write_it { - if !write(emitter, value, &i) { - return false - } - } else { - w := width(value[i]) - for j := 0; j < w; j++ { - val := value[i] - i++ - - if !put(emitter, '%') { - return false - } - c := val >> 4 - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - - c = val & 0x0f - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - - } - } - } - - emitter.whitespace = false - emitter.indention = false - - return true -} - -func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, - allow_breaks bool) bool { - spaces := false - breaks := false - - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - for i := 0; i < len(value); { - if is_space(value[i]) { - if allow_breaks && !spaces && - emitter.column > emitter.best_width && - !is_space(value[i+1]) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break_at(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - - emitter.whitespace = false - emitter.indention = false - if emitter.root_context { - emitter.open_ended = true - } - - return true -} - -func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, - allow_breaks bool) bool { - spaces := false - breaks := false - - if !yaml_emitter_write_indicator(emitter, []byte("'"), true, false, false) { - return false - } - - for i := 0; i < len(value); { - if is_space(value[i]) { - if allow_breaks && !spaces && - emitter.column > emitter.best_width && - i > 0 && i < len(value)-1 && - !is_space(value[i+1]) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break_at(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if value[i] == '\'' { - if !put(emitter, '\'') { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - - if !yaml_emitter_write_indicator(emitter, []byte("'"), false, false, false) { - return false - } - - emitter.whitespace = false - emitter.indention = false - - return true -} - -func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, - allow_breaks bool) bool { - - spaces := false - - if !yaml_emitter_write_indicator(emitter, []byte("\""), true, false, false) { - return false - } - - for i := 0; i < len(value); { - if !is_printable_at(value, i) || (!emitter.unicode && !is_ascii(value[i])) || - is_bom_at(value, i) || is_break_at(value, i) || - value[i] == '"' || value[i] == '\\' { - octet := value[i] - - var w int - var v rune - switch { - case octet&0x80 == 0x00: - w, v = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, v = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, v = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, v = 4, rune(octet&0x07) - } - - for k := 1; k < w; k++ { - octet = value[i+k] - v = (v << 6) + (rune(octet) & 0x3F) - } - i += w - - if !put(emitter, '\\') { - return false - } - - switch v { - case 0x00: - if !put(emitter, '0') { - return false - } - case 0x07: - if !put(emitter, 'a') { - return false - } - case 0x08: - if !put(emitter, 'b') { - return false - } - case 0x09: - if !put(emitter, 't') { - return false - } - - case 0x0A: - if !put(emitter, 'n') { - return false - } - - case 0x0B: - if !put(emitter, 'v') { - return false - } - - case 0x0C: - if !put(emitter, 'f') { - return false - } - - case 0x0D: - if !put(emitter, 'r') { - return false - } - - case 0x1B: - if !put(emitter, 'e') { - return false - } - case 0x22: - if !put(emitter, '"') { - return false - } - case 0x5C: - if !put(emitter, '\\') { - return false - } - case 0x85: - if !put(emitter, 'N') { - return false - } - - case 0xA0: - if !put(emitter, '_') { - return false - } - - case 0x2028: - if !put(emitter, 'L') { - return false - } - - case 0x2029: - if !put(emitter, 'P') { - return false - } - default: - if v <= 0xFF { - if !put(emitter, 'x') { - return false - } - w = 2 - } else if v <= 0xFFFF { - if !put(emitter, 'u') { - return false - } - w = 4 - } else { - if !put(emitter, 'U') { - return false - } - w = 8 - } - for k := (w - 1) * 4; k >= 0; k -= 4 { - digit := byte((v >> uint(k)) & 0x0F) - c := digit + '0' - if c > 9 { - c = digit + 'A' - 10 - } - if !put(emitter, c) { - return false - } - } - } - spaces = false - } else if is_space(value[i]) { - if allow_breaks && !spaces && - emitter.column > emitter.best_width && - i > 0 && i < len(value)-1 { - if !yaml_emitter_write_indent(emitter) { - return false - } - if is_space(value[i+1]) { - if !put(emitter, '\\') { - return false - } - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else { - if !write(emitter, value, &i) { - return false - } - spaces = false - } - } - - if !yaml_emitter_write_indicator(emitter, []byte("\""), false, false, false) { - return false - } - - emitter.whitespace = false - emitter.indention = false - - return true -} - -func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { - - if is_space(value[0]) || is_break_at(value, 0) { - indent_hint := []byte{'0' + byte(emitter.best_indent)} - if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { - return false - } - } - - emitter.open_ended = false - - var chomp_hint [1]byte - if len(value) == 0 { - chomp_hint[0] = '-' - } else { - i := len(value) - 1 - for value[i]&0xC0 == 0x80 { - i-- - } - - if !is_break_at(value, i) { - chomp_hint[0] = '-' - } else if i == 0 { - chomp_hint[0] = '+' - emitter.open_ended = true - } else { - for value[i]&0xC0 == 0x80 { - i-- - } - - if is_break_at(value, i) { - chomp_hint[0] = '+' - emitter.open_ended = true - } - } - } - - if chomp_hint[0] != 0 { - if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { - return false - } - } - - return true -} - -func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { - - breaks := true - - if !yaml_emitter_write_indicator(emitter, []byte("|"), true, false, false) { - return false - } - - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - - if !put_break(emitter) { - return false - } - - emitter.indention = true - emitter.whitespace = true - - for i := 0; i < len(value); { - if is_break_at(value, i) { - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - breaks = false - } - } - - return true -} - -func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { - breaks := true - leading_spaces := true - - if !yaml_emitter_write_indicator(emitter, []byte(">"), true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - if !put_break(emitter) { - return false - } - emitter.indention = true - emitter.whitespace = true - - for i := 0; i < len(value); { - if is_break_at(value, i) { - if !breaks && !leading_spaces && value[i] == '\n' { - k := i - for is_break_at(value, k) { - k += width(value[k]) - } - if !is_blankz_at(value, k) { - if !put_break(emitter) { - return false - } - } - } - if !write_break(emitter, value, &i) { - return false - } - emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - leading_spaces = is_blank(value[i]) - } - if !breaks && is_space(value[i]) && !is_space(value[i+1]) && - emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - emitter.indention = false - breaks = false - } - } - - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/encode.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/encode.go deleted file mode 100644 index 8c0de8f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/encode.go +++ /dev/null @@ -1,388 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" - "encoding/base64" - "io" - "math" - "reflect" - "regexp" - "sort" - "strconv" - "time" -) - -var ( - timeTimeType = reflect.TypeOf(time.Time{}) - marshalerType = reflect.TypeOf(new(Marshaler)).Elem() - numberType = reflect.TypeOf(Number("")) - nonPrintable = regexp.MustCompile("[^\t\n\r\u0020-\u007E\u0085\u00A0-\uD7FF\uE000-\uFFFD]") - multiline = regexp.MustCompile("\n|\u0085|\u2028|\u2029") - - shortTags = map[string]string{ - yaml_NULL_TAG: "!!null", - yaml_BOOL_TAG: "!!bool", - yaml_STR_TAG: "!!str", - yaml_INT_TAG: "!!int", - yaml_FLOAT_TAG: "!!float", - yaml_TIMESTAMP_TAG: "!!timestamp", - yaml_SEQ_TAG: "!!seq", - yaml_MAP_TAG: "!!map", - yaml_BINARY_TAG: "!!binary", - } -) - -type Marshaler interface { - MarshalYAML() (tag string, value interface{}) -} - -// An Encoder writes JSON objects to an output stream. -type Encoder struct { - w io.Writer - emitter yaml_emitter_t - event yaml_event_t - flow bool - err error -} - -func Marshal(v interface{}) ([]byte, error) { - b := bytes.Buffer{} - e := NewEncoder(&b) - err := e.Encode(v) - return b.Bytes(), err -} - -// NewEncoder returns a new encoder that writes to w. -func NewEncoder(w io.Writer) *Encoder { - e := &Encoder{w: w} - yaml_emitter_initialize(&e.emitter) - yaml_emitter_set_output_writer(&e.emitter, e.w) - yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) - e.emit() - yaml_document_start_event_initialize(&e.event, nil, nil, true) - e.emit() - - return e -} - -func (e *Encoder) Encode(v interface{}) (err error) { - defer recovery(&err) - - if e.err != nil { - return e.err - } - - e.marshal("", reflect.ValueOf(v), true) - - yaml_document_end_event_initialize(&e.event, true) - e.emit() - e.emitter.open_ended = false - yaml_stream_end_event_initialize(&e.event) - e.emit() - - return nil -} - -func (e *Encoder) emit() { - if !yaml_emitter_emit(&e.emitter, &e.event) { - panic("bad emit") - } -} - -func (e *Encoder) marshal(tag string, v reflect.Value, allowAddr bool) { - vt := v.Type() - - if vt.Implements(marshalerType) { - e.emitMarshaler(tag, v) - return - } - - if vt.Kind() != reflect.Ptr && allowAddr { - if reflect.PtrTo(vt).Implements(marshalerType) { - e.emitAddrMarshaler(tag, v) - return - } - } - - switch v.Kind() { - case reflect.Interface: - if v.IsNil() { - e.emitNil() - } else { - e.marshal(tag, v.Elem(), allowAddr) - } - case reflect.Map: - e.emitMap(tag, v) - case reflect.Ptr: - if v.IsNil() { - e.emitNil() - } else { - e.marshal(tag, v.Elem(), true) - } - case reflect.Struct: - e.emitStruct(tag, v) - case reflect.Slice: - e.emitSlice(tag, v) - case reflect.String: - e.emitString(tag, v) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - e.emitInt(tag, v) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - e.emitUint(tag, v) - case reflect.Float32, reflect.Float64: - e.emitFloat(tag, v) - case reflect.Bool: - e.emitBool(tag, v) - default: - panic("Can't marshal type yet: " + v.Type().String()) - } -} - -func (e *Encoder) emitMap(tag string, v reflect.Value) { - e.mapping(tag, func() { - var keys stringValues = v.MapKeys() - sort.Sort(keys) - for _, k := range keys { - e.marshal("", k, true) - e.marshal("", v.MapIndex(k), true) - } - }) -} - -func (e *Encoder) emitStruct(tag string, v reflect.Value) { - if v.Type() == timeTimeType { - e.emitTime(tag, v) - return - } - - fields := cachedTypeFields(v.Type()) - - e.mapping(tag, func() { - for _, f := range fields { - fv := fieldByIndex(v, f.index) - if !fv.IsValid() || f.omitEmpty && isEmptyValue(fv) { - continue - } - - e.marshal("", reflect.ValueOf(f.name), true) - e.flow = f.flow - e.marshal("", fv, true) - } - }) -} - -func (e *Encoder) emitTime(tag string, v reflect.Value) { - t := v.Interface().(time.Time) - bytes, _ := t.MarshalText() - e.emitScalar(string(bytes), "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func isEmptyValue(v reflect.Value) bool { - switch v.Kind() { - case reflect.Array, reflect.Map, reflect.Slice, reflect.String: - return v.Len() == 0 - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.Interface, reflect.Ptr: - return v.IsNil() - } - return false -} - -func (e *Encoder) mapping(tag string, f func()) { - implicit := tag == "" - style := yaml_BLOCK_MAPPING_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_MAPPING_STYLE - } - yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) - e.emit() - - f() - - yaml_mapping_end_event_initialize(&e.event) - e.emit() -} - -func (e *Encoder) emitSlice(tag string, v reflect.Value) { - if v.Type() == byteSliceType { - e.emitBase64(tag, v) - return - } - - implicit := tag == "" - style := yaml_BLOCK_SEQUENCE_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_SEQUENCE_STYLE - } - yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) - e.emit() - - n := v.Len() - for i := 0; i < n; i++ { - e.marshal("", v.Index(i), true) - } - - yaml_sequence_end_event_initialize(&e.event) - e.emit() -} - -func (e *Encoder) emitBase64(tag string, v reflect.Value) { - if v.IsNil() { - e.emitNil() - return - } - - s := v.Bytes() - - dst := make([]byte, base64.StdEncoding.EncodedLen(len(s))) - - base64.StdEncoding.Encode(dst, s) - e.emitScalar(string(dst), "", yaml_BINARY_TAG, yaml_DOUBLE_QUOTED_SCALAR_STYLE) -} - -func (e *Encoder) emitString(tag string, v reflect.Value) { - var style yaml_scalar_style_t - s := v.String() - - if nonPrintable.MatchString(s) { - e.emitBase64(tag, v) - return - } - - if v.Type() == numberType { - style = yaml_PLAIN_SCALAR_STYLE - } else { - event := yaml_event_t{ - implicit: true, - value: []byte(s), - } - - rtag, _ := resolveInterface(event, false) - if tag == "" && rtag != yaml_STR_TAG { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } else if multiline.MatchString(s) { - style = yaml_LITERAL_SCALAR_STYLE - } else { - style = yaml_PLAIN_SCALAR_STYLE - } - } - - e.emitScalar(s, "", tag, style) -} - -func (e *Encoder) emitBool(tag string, v reflect.Value) { - s := strconv.FormatBool(v.Bool()) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *Encoder) emitInt(tag string, v reflect.Value) { - s := strconv.FormatInt(v.Int(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *Encoder) emitUint(tag string, v reflect.Value) { - s := strconv.FormatUint(v.Uint(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *Encoder) emitFloat(tag string, v reflect.Value) { - f := v.Float() - - var s string - switch { - case math.IsNaN(f): - s = ".nan" - case math.IsInf(f, 1): - s = "+.inf" - case math.IsInf(f, -1): - s = "-.inf" - default: - s = strconv.FormatFloat(f, 'g', -1, v.Type().Bits()) - } - - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) -} - -func (e *Encoder) emitNil() { - e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) -} - -func (e *Encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { - implicit := tag == "" - if !implicit { - style = yaml_PLAIN_SCALAR_STYLE - } - - stag := shortTags[tag] - if stag == "" { - stag = tag - } - - yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(stag), []byte(value), implicit, implicit, style) - e.emit() -} - -func (e *Encoder) emitMarshaler(tag string, v reflect.Value) { - if v.Kind() == reflect.Ptr && v.IsNil() { - e.emitNil() - return - } - - m := v.Interface().(Marshaler) - if m == nil { - e.emitNil() - return - } - t, val := m.MarshalYAML() - if val == nil { - e.emitNil() - return - } - - e.marshal(t, reflect.ValueOf(val), false) -} - -func (e *Encoder) emitAddrMarshaler(tag string, v reflect.Value) { - if !v.CanAddr() { - e.marshal(tag, v, false) - return - } - - va := v.Addr() - if va.IsNil() { - e.emitNil() - return - } - - m := v.Interface().(Marshaler) - t, val := m.MarshalYAML() - if val == nil { - e.emitNil() - return - } - - e.marshal(t, reflect.ValueOf(val), false) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/encode_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/encode_test.go deleted file mode 100644 index 004e0f1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/encode_test.go +++ /dev/null @@ -1,593 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" - "math" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Encode", func() { - var buf *bytes.Buffer - var enc *Encoder - - BeforeEach(func() { - buf = &bytes.Buffer{} - enc = NewEncoder(buf) - }) - - Context("Scalars", func() { - It("handles strings", func() { - err := enc.Encode("abc") - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`abc -`)) - - }) - - It("encodes strings with multilines", func() { - err := enc.Encode("a\nc") - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`|- - a - c -`)) - - }) - - It("handles strings that match known scalars", func() { - err := enc.Encode("true") - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`"true" -`)) - - }) - - Context("handles ints", func() { - It("handles ints", func() { - err := enc.Encode(13) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("13\n")) - }) - - It("handles uints", func() { - err := enc.Encode(uint64(1)) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("1\n")) - }) - }) - - Context("handles floats", func() { - It("handles float32", func() { - err := enc.Encode(float32(1.234)) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("1.234\n")) - - }) - - It("handles float64", func() { - err := enc.Encode(float64(1.2e23)) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("1.2e+23\n")) - }) - - It("handles NaN", func() { - err := enc.Encode(math.NaN()) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(".nan\n")) - }) - - It("handles infinity", func() { - err := enc.Encode(math.Inf(-1)) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("-.inf\n")) - }) - }) - - It("handles bools", func() { - err := enc.Encode(true) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("true\n")) - }) - - It("handles time.Time", func() { - t := time.Now() - err := enc.Encode(t) - Expect(err).NotTo(HaveOccurred()) - bytes, _ := t.MarshalText() - Expect(buf.String()).To(Equal(string(bytes) + "\n")) - }) - - Context("Null", func() { - It("fails on nil", func() { - err := enc.Encode(nil) - Expect(err).To(HaveOccurred()) - }) - }) - - It("handles []byte", func() { - err := enc.Encode([]byte{'a', 'b', 'c'}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("!!binary YWJj\n")) - }) - - Context("Ptrs", func() { - It("handles ptr of a type", func() { - p := new(int) - *p = 10 - err := enc.Encode(p) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("10\n")) - }) - - It("handles nil ptr", func() { - var p *int - err := enc.Encode(p) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("null\n")) - }) - }) - - Context("Structs", func() { - It("handles simple structs", func() { - type batter struct { - Name string - HR int64 - AVG float64 - } - - batters := []batter{ - batter{Name: "Mark McGwire", HR: 65, AVG: 0.278}, - batter{Name: "Sammy Sosa", HR: 63, AVG: 0.288}, - } - err := enc.Encode(batters) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`- Name: Mark McGwire - HR: 65 - AVG: 0.278 -- Name: Sammy Sosa - HR: 63 - AVG: 0.288 -`)) - - }) - - It("handles tagged structs", func() { - type batter struct { - Name string `yaml:"name"` - HR int64 - AVG float64 `yaml:"avg"` - } - - batters := []batter{ - batter{Name: "Mark McGwire", HR: 65, AVG: 0.278}, - batter{Name: "Sammy Sosa", HR: 63, AVG: 0.288}, - } - err := enc.Encode(batters) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`- name: Mark McGwire - HR: 65 - avg: 0.278 -- name: Sammy Sosa - HR: 63 - avg: 0.288 -`)) - - }) - - It("handles nested structs", func() { - type nestedConfig struct { - AString string `yaml:"str"` - Integer int `yaml:"int"` - } - type config struct { - TopString string - Nested nestedConfig - } - - cfg := config{ - TopString: "def", - Nested: nestedConfig{ - AString: "abc", - Integer: 123, - }, - } - - err := enc.Encode(cfg) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`TopString: def -Nested: - str: abc - int: 123 -`)) - - }) - - It("handles inline structs", func() { - type NestedConfig struct { - AString string `yaml:"str"` - Integer int `yaml:"int"` - } - type config struct { - TopString string - NestedConfig - } - - cfg := config{ - TopString: "def", - NestedConfig: NestedConfig{ - AString: "abc", - Integer: 123, - }, - } - - err := enc.Encode(cfg) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`TopString: def -str: abc -int: 123 -`)) - - }) - - It("handles inline structs with conflicts", func() { - type NestedConfig struct { - AString string `yaml:"str"` - Integer int `yaml:"int"` - } - type config struct { - AString string `yaml:"str"` - NestedConfig - } - - cfg := config{ - AString: "def", - NestedConfig: NestedConfig{ - AString: "abc", - Integer: 123, - }, - } - - err := enc.Encode(cfg) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`str: def -int: 123 -`)) - - }) - - }) - - }) - - Context("Sequence", func() { - It("handles slices", func() { - val := []string{"a", "b", "c"} - err := enc.Encode(val) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`- a -- b -- c -`)) - - }) - }) - - Context("Maps", func() { - It("Decodes simple maps", func() { - err := enc.Encode(&map[string]string{ - "name": "Mark McGwire", - "hr": "65", - "avg": "0.278", - }) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`avg: "0.278" -hr: "65" -name: Mark McGwire -`)) - - }) - - It("Decodes mix types", func() { - err := enc.Encode(&map[string]interface{}{ - "name": "Mark McGwire", - "hr": 65, - "avg": 0.278, - }) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`avg: 0.278 -hr: 65 -name: Mark McGwire -`)) - - }) - }) - - Context("Sequence of Maps", func() { - It("decodes", func() { - err := enc.Encode([]map[string]interface{}{ - {"name": "Mark McGwire", - "hr": 65, - "avg": 0.278, - }, - {"name": "Sammy Sosa", - "hr": 63, - "avg": 0.288, - }, - }) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`- avg: 0.278 - hr: 65 - name: Mark McGwire -- avg: 0.288 - hr: 63 - name: Sammy Sosa -`)) - - }) - }) - - Context("Maps of Sequence", func() { - It("decodes", func() { - err := enc.Encode(map[string][]interface{}{ - "name": []interface{}{"Mark McGwire", "Sammy Sosa"}, - "hr": []interface{}{65, 63}, - "avg": []interface{}{0.278, 0.288}, - }) - Expect(err).NotTo(HaveOccurred()) - - Expect(buf.String()).To(Equal(`avg: -- 0.278 -- 0.288 -hr: -- 65 -- 63 -name: -- Mark McGwire -- Sammy Sosa -`)) - - }) - }) - - Context("Flow", func() { - It("flows structs", func() { - type i struct { - A string - } - type o struct { - I i `yaml:"i,flow"` - } - - err := enc.Encode(o{ - I: i{A: "abc"}, - }) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`i: {A: abc} -`)) - - }) - - It("flows sequences", func() { - type i struct { - A string - } - type o struct { - I []i `yaml:"i,flow"` - } - - err := enc.Encode(o{ - I: []i{{A: "abc"}}, - }) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`i: [{A: abc}] -`)) - - }) - }) - - Context("Omit empty", func() { - It("omits nil ptrs", func() { - type i struct { - A *string `yaml:"a,omitempty"` - } - type o struct { - I []i `yaml:"i,flow"` - } - - err := enc.Encode(o{ - I: []i{{A: nil}}, - }) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`i: [{}] -`)) - - }) - - }) - - Context("Skip field", func() { - It("does not include the field", func() { - type a struct { - B string `yaml:"-"` - C string - } - - err := enc.Encode(a{B: "b", C: "c"}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`C: c -`)) - - }) - }) - - Context("Marshaler support", func() { - Context("Receiver is a value", func() { - It("uses the Marshaler interface when a value", func() { - err := enc.Encode(hasMarshaler{Value: 123}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("123\n")) - }) - - It("uses the Marshaler interface when a pointer", func() { - err := enc.Encode(&hasMarshaler{Value: "abc"}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`abc -`)) - - }) - }) - - Context("Receiver is a pointer", func() { - It("uses the Marshaler interface when a pointer", func() { - err := enc.Encode(&hasPtrMarshaler{Value: map[string]string{"a": "b"}}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`a: b -`)) - - }) - - It("skips the Marshaler when its a value", func() { - err := enc.Encode(hasPtrMarshaler{Value: map[string]string{"a": "b"}}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`Tag: "" -Value: - a: b -`)) - - }) - - Context("the receiver is nil", func() { - var ptr *hasPtrMarshaler - - It("returns a null", func() { - err := enc.Encode(ptr) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`null -`)) - - }) - - It("returns a null value for ptr types", func() { - err := enc.Encode(map[string]*hasPtrMarshaler{"a": ptr}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`a: null -`)) - - }) - - It("panics when used as a nil interface", func() { - Expect(func() { enc.Encode(map[string]Marshaler{"a": ptr}) }).To(Panic()) - }) - }) - - Context("the receiver has a nil value", func() { - ptr := &hasPtrMarshaler{Value: nil} - - It("returns null", func() { - err := enc.Encode(ptr) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`null -`)) - - }) - - Context("in a map", func() { - It("returns a null value for ptr types", func() { - err := enc.Encode(map[string]*hasPtrMarshaler{"a": ptr}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`a: null -`)) - - }) - - It("returns a null value for interface types", func() { - err := enc.Encode(map[string]Marshaler{"a": ptr}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`a: null -`)) - - }) - }) - - Context("in a slice", func() { - It("returns a null value for ptr types", func() { - err := enc.Encode([]*hasPtrMarshaler{ptr}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`- null -`)) - - }) - - It("returns a null value for interface types", func() { - err := enc.Encode([]Marshaler{ptr}) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal(`- null -`)) - - }) - }) - }) - }) - }) - - Context("Number type", func() { - It("encodes as a number", func() { - n := Number("12345") - err := enc.Encode(n) - Expect(err).NotTo(HaveOccurred()) - Expect(buf.String()).To(Equal("12345\n")) - }) - }) -}) - -type hasMarshaler struct { - Value interface{} -} - -func (m hasMarshaler) MarshalYAML() (tag string, value interface{}) { - return "", m.Value -} - -func (m hasMarshaler) UnmarshalYAML(tag string, value interface{}) error { - m.Value = value - return nil -} - -type hasPtrMarshaler struct { - Tag string - Value interface{} -} - -func (m *hasPtrMarshaler) MarshalYAML() (tag string, value interface{}) { - return "", m.Value -} - -func (m *hasPtrMarshaler) UnmarshalYAML(tag string, value interface{}) error { - m.Tag = tag - m.Value = value - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_1.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_1.yaml deleted file mode 100644 index d12e671..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_1.yaml +++ /dev/null @@ -1,3 +0,0 @@ -- Mark McGwire -- Sammy Sosa -- Ken Griffey diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_10.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_10.yaml deleted file mode 100644 index 61808f6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_10.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -hr: - - Mark McGwire - # Following node labeled SS - - &SS Sammy Sosa -rbi: - - *SS # Subsequent occurrence - - Ken Griffey diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_11.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_11.yaml deleted file mode 100644 index 9123ce2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_11.yaml +++ /dev/null @@ -1,9 +0,0 @@ -? - Detroit Tigers - - Chicago cubs -: - - 2001-07-23 - -? [ New York Yankees, - Atlanta Braves ] -: [ 2001-07-02, 2001-08-12, - 2001-08-14 ] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_12.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_12.yaml deleted file mode 100644 index 1fc33f9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_12.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -# products purchased -- item : Super Hoop - quantity: 1 -- item : Basketball - quantity: 4 -- item : Big Shoes - quantity: 1 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_13.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_13.yaml deleted file mode 100644 index 13fb656..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_13.yaml +++ /dev/null @@ -1,4 +0,0 @@ -# ASCII Art ---- | - \//||\/|| - // || ||__ diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_14.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_14.yaml deleted file mode 100644 index 59943de..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_14.yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- - Mark McGwire's - year was crippled - by a knee injury. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_15.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_15.yaml deleted file mode 100644 index 80b89a6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_15.yaml +++ /dev/null @@ -1,8 +0,0 @@ -> - Sammy Sosa completed another - fine season with great stats. - - 63 Home Runs - 0.288 Batting Average - - What a year! diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_15_dumped.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_15_dumped.yaml deleted file mode 100644 index cc2d963..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_15_dumped.yaml +++ /dev/null @@ -1,7 +0,0 @@ -> - Sammy Sosa completed another fine season with great stats. - - 63 Home Runs - 0.288 Batting Average - - What a year! \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_16.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_16.yaml deleted file mode 100644 index 9f66d88..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_16.yaml +++ /dev/null @@ -1,7 +0,0 @@ -name: Mark McGwire -accomplishment: > - Mark set a major league - home run record in 1998. -stats: | - 65 Home Runs - 0.278 Batting Average diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17.yaml deleted file mode 100644 index 3e899c0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17.yaml +++ /dev/null @@ -1,7 +0,0 @@ -unicode: "Sosa did fine.\u263A" -control: "\b1998\t1999\t2000\n" -hexesc: "\x0D\x0A is \r\n" - -single: '"Howdy!" he cried.' -quoted: ' # not a ''comment''.' -tie-fighter: '|\-*-/|' diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_control.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_control.yaml deleted file mode 100644 index 59398a6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_control.yaml +++ /dev/null @@ -1,2 +0,0 @@ -control: "\b1998\t1999\t2000\n" - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_hexesc.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_hexesc.yaml deleted file mode 100644 index 7ddff26..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_hexesc.yaml +++ /dev/null @@ -1,2 +0,0 @@ -hexesc: "\x0D\x0A is \r\n" - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_quoted.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_quoted.yaml deleted file mode 100644 index bedc4a5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_quoted.yaml +++ /dev/null @@ -1,2 +0,0 @@ -quoted: ' # not a ''comment''.' - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_single.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_single.yaml deleted file mode 100644 index c3fe6aa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_single.yaml +++ /dev/null @@ -1 +0,0 @@ -single: '"Howdy!" he cried.' diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_tie_fighter.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_tie_fighter.yaml deleted file mode 100644 index 9d82173..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_tie_fighter.yaml +++ /dev/null @@ -1 +0,0 @@ -tie-fighter: '|\-*-/|' diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_unicode.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_unicode.yaml deleted file mode 100644 index 2b378bd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_17_unicode.yaml +++ /dev/null @@ -1,2 +0,0 @@ -unicode: "Sosa did fine.\u263A" - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_18.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_18.yaml deleted file mode 100644 index e0a8bfa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_18.yaml +++ /dev/null @@ -1,6 +0,0 @@ -plain: - This unquoted scalar - spans many lines. - -quoted: "So does this - quoted scalar.\n" diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_19.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_19.yaml deleted file mode 100644 index 524f21d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_19.yaml +++ /dev/null @@ -1,4 +0,0 @@ -canonical: 12345 -decimal: +12_345 -octal: 014 -hexadecimal: 0xC diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_2.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_2.yaml deleted file mode 100644 index 7b7ec94..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_2.yaml +++ /dev/null @@ -1,3 +0,0 @@ -hr: 65 # Home runs -avg: 0.278 # Batting average -rbi: 147 # Runs Batted In diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_20.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_20.yaml deleted file mode 100644 index 727b261..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_20.yaml +++ /dev/null @@ -1,5 +0,0 @@ -canonical: 1.23015e+3 -exponential: 12.3015e+02 -fixed: 1_230.15 -negative infinity: -.inf -not a number: .NaN diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_21.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_21.yaml deleted file mode 100644 index c065b2a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_21.yaml +++ /dev/null @@ -1,4 +0,0 @@ -null: ~ -true: yes -false: no -string: '12345' diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_22.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_22.yaml deleted file mode 100644 index aaac185..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_22.yaml +++ /dev/null @@ -1,4 +0,0 @@ -canonical: 2001-12-15T02:59:43.1Z -iso8601: 2001-12-14t21:59:43.10-05:00 -spaced: 2001-12-14 21:59:43.10 -5 -date: 2002-12-14 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23.yaml deleted file mode 100644 index adbe4e6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -not-date: !!str 2002-04-28 - -picture: !!binary "\ - R0lGODlhDAAMAIQAAP//9/X\ - 17unp5WZmZgAAAOfn515eXv\ - Pz7Y6OjuDg4J+fn5OTk6enp\ - 56enmleECcgggoBADs=" - -application specific tag: !something | - The semantics of the tag - above may be different for - different documents. - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_application.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_application.yaml deleted file mode 100644 index 03cc760..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_application.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -application specific tag: !something | - The semantics of the tag - above may be different for - different documents. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_non_date.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_non_date.yaml deleted file mode 100644 index 2e95415..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_non_date.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -not-date: !!str 2002-04-28 - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_picture.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_picture.yaml deleted file mode 100644 index b87063e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_23_picture.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -picture: !!binary "\ - R0lGODlhDAAMAIQAAP//9/X\ - 17unp5WZmZgAAAOfn515eXv\ - Pz7Y6OjuDg4J+fn5OTk6enp\ - 56enmleECcgggoBADs=" - - - \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_24.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_24.yaml deleted file mode 100644 index 1180757..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_24.yaml +++ /dev/null @@ -1,14 +0,0 @@ -%TAG ! tag:clarkevans.com,2002: ---- !shape - # Use the ! handle for presenting - # tag:clarkevans.com,2002:circle -- !circle - center: &ORIGIN {x: 73, y: 129} - radius: 7 -- !line - start: *ORIGIN - finish: { x: 89, y: 102 } -- !label - start: *ORIGIN - color: 0xFFEEBB - text: Pretty vector drawing. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_24_dumped.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_24_dumped.yaml deleted file mode 100644 index 1742cd2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_24_dumped.yaml +++ /dev/null @@ -1,11 +0,0 @@ -!shape -- !circle - center: &id001 {x: 73, y: 129} - radius: 7 -- !line - finish: {x: 89, y: 102} - start: *id001 -- !label - color: 0xFFEEBB - start: *id001 - text: Pretty vector drawing. \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_25.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_25.yaml deleted file mode 100644 index 769ac31..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_25.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# sets are represented as a -# mapping where each key is -# associated with the empty string ---- !!set -? Mark McGwire -? Sammy Sosa -? Ken Griff diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_26.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_26.yaml deleted file mode 100644 index 3143763..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_26.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# ordered maps are represented as -# a sequence of mappings, with -# each mapping having one key ---- !!omap -- Mark McGwire: 65 -- Sammy Sosa: 63 -- Ken Griffy: 58 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_27.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_27.yaml deleted file mode 100644 index 395e79c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_27.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- ! -invoice: 34843 -date : 2001-01-23 -billTo: &id001 - given : Chris - family : Dumars - address: - lines: | - 458 Walkman Dr. - Suite #292 - city : Royal Oak - state : MI - postal : 48046 -shipTo: *id001 -product: - - sku : BL394D - quantity : 4 - description : Basketball - price : 450.00 - - sku : BL4438H - quantity : 1 - description : Super Hoop - price : 2392.00 -tax : 251.42 -total: 4443.52 -comments: - Late afternoon is best. - Backup contact is Nancy - Billsmer @ 338-4338. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_27_dumped.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_27_dumped.yaml deleted file mode 100644 index 51a89b8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_27_dumped.yaml +++ /dev/null @@ -1,20 +0,0 @@ -!!org.yaml.snakeyaml.Invoice -billTo: &id001 - address: - city: Royal Oak - lines: | - 458 Walkman Dr. - Suite #292 - postal: '48046' - state: MI - family: Dumars - given: Chris -comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338. -date: '2001-01-23' -invoice: 34843 -product: -- {description: Basketball, price: 450.0, quantity: 4, sku: BL394D} -- {description: Super Hoop, price: 2392.0, quantity: 1, sku: BL4438H} -shipTo: *id001 -tax: 251.42 -total: 4443.52 \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_28.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_28.yaml deleted file mode 100644 index eb5fb8a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_28.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- -Time: 2001-11-23 15:01:42 -5 -User: ed -Warning: - This is an error message - for the log file ---- -Time: 2001-11-23 15:02:31 -5 -User: ed -Warning: - A slightly different error - message. ---- -Date: 2001-11-23 15:03:17 -5 -User: ed -Fatal: - Unknown variable "bar" -Stack: - - file: TopClass.py - line: 23 - code: | - x = MoreObject("345\n") - - file: MoreClass.py - line: 58 - code: |- - foo = bar - - - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_3.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_3.yaml deleted file mode 100644 index 2c884b7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_3.yaml +++ /dev/null @@ -1,8 +0,0 @@ -american: - - Boston Red Sox - - Detroit Tigers - - New York Yankees -national: - - New York Mets - - Chicago Cubs - - Atlanta Braves \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_4.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_4.yaml deleted file mode 100644 index 430f6b3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_4.yaml +++ /dev/null @@ -1,8 +0,0 @@ -- - name: Mark McGwire - hr: 65 - avg: 0.278 -- - name: Sammy Sosa - hr: 63 - avg: 0.288 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_5.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_5.yaml deleted file mode 100644 index cdd7770..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_5.yaml +++ /dev/null @@ -1,3 +0,0 @@ -- [name , hr, avg ] -- [Mark McGwire, 65, 0.278] -- [Sammy Sosa , 63, 0.288] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_6.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_6.yaml deleted file mode 100644 index 7a957b2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_6.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Mark McGwire: {hr: 65, avg: 0.278} -Sammy Sosa: { - hr: 63, - avg: 0.288 - } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_7.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_7.yaml deleted file mode 100644 index bc711d5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_7.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Ranking of 1998 home runs ---- -- Mark McGwire -- Sammy Sosa -- Ken Griffey - -# Team ranking ---- -- Chicago Cubs -- St Louis Cardinals diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_8.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_8.yaml deleted file mode 100644 index 05e102d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_8.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -time: 20:03:20 -player: Sammy Sosa -action: strike (miss) -... ---- -time: 20:03:47 -player: Sammy Sosa -action: grand slam -... diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_9.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_9.yaml deleted file mode 100644 index e264180..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example2_9.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -hr: # 1998 hr ranking - - Mark McGwire - - Sammy Sosa -rbi: - # 1998 rbi ranking - - Sammy Sosa - - Ken Griffey diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example_empty.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/example_empty.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/map.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/map.yaml deleted file mode 100644 index 022446d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/map.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Unordered set of key: value pairs. -Block style: !!map - Clark : Evans - Brian : Ingerson - Oren : Ben-Kiki -Flow style: !!map { Clark: Evans, Brian: Ingerson, Oren: Ben-Kiki } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/map_mixed_tags.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/map_mixed_tags.yaml deleted file mode 100644 index a5d35b0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/map_mixed_tags.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Unordered set of key: value pairs. -Block style: ! - Clark : Evans - Brian : Ingerson - Oren : Ben-Kiki -Flow style: { Clark: Evans, Brian: Ingerson, Oren: Ben-Kiki } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/merge.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/merge.yaml deleted file mode 100644 index ee4a48f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/merge.yaml +++ /dev/null @@ -1,27 +0,0 @@ ---- -- &CENTER { x: 1, y: 2 } -- &LEFT { x: 0, y: 2 } -- &BIG { r: 10 } -- &SMALL { r: 1 } - -# All the following maps are equal: - -- # Explicit keys - x: 1 - y: 2 - r: 10 - label: center/big - -- # Merge one map - << : *CENTER - r: 10 - label: center/big - -- # Merge multiple maps - << : [ *CENTER, *BIG ] - label: center/big - -- # Override - << : [ *BIG, *LEFT, *SMALL ] - x: 1 - label: center/big diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/omap.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/omap.yaml deleted file mode 100644 index 4fa0f45..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/omap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Explicitly typed ordered map (dictionary). -Bestiary: !!omap - - aardvark: African pig-like ant eater. Ugly. - - anteater: South-American ant eater. Two species. - - anaconda: South-American constrictor snake. Scaly. - # Etc. -# Flow style -Numbers: !!omap [ one: 1, two: 2, three : 3 ] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/pairs.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/pairs.yaml deleted file mode 100644 index 05f55b9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/pairs.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# Explicitly typed pairs. -Block tasks: !!pairs - - meeting: with team. - - meeting: with boss. - - break: lunch. - - meeting: with client. -Flow tasks: !!pairs [ meeting: with team, meeting: with boss ] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/seq.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/seq.yaml deleted file mode 100644 index 5849115..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/seq.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Ordered sequence of nodes -Block style: !!seq -- Mercury # Rotates - no light/dark sides. -- Venus # Deadliest. Aptly named. -- Earth # Mostly dirt. -- Mars # Seems empty. -- Jupiter # The king. -- Saturn # Pretty. -- Uranus # Where the sun hardly shines. -- Neptune # Boring. No rings. -- Pluto # You call this a planet? -Flow style: !!seq [ Mercury, Venus, Earth, Mars, # Rocks - Jupiter, Saturn, Uranus, Neptune, # Gas - Pluto ] # Overrated diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/set.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/set.yaml deleted file mode 100644 index e05dc88..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/set.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# Explicitly typed set. -baseball players: !!set - ? Mark McGwire - ? Sammy Sosa - ? Ken Griffey -# Flow style -baseball teams: !!set { Boston Red Sox, Detroit Tigers, New York Yankees } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/v.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/v.yaml deleted file mode 100644 index 81c5d51..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/v.yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- # New schema -link with: - - = : library1.dll - version: 1.2 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/value.yaml b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/value.yaml deleted file mode 100644 index 3eb7919..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/fixtures/specification/types/value.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- # Old schema -link with: - - library1.dll - - library2.dll ---- # New schema -link with: - - = : library1.dll - version: 1.2 - - = : library2.dll - version: 2.3 diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/libyaml-LICENSE b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/libyaml-LICENSE deleted file mode 100644 index 050ced2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/libyaml-LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006 Kirill Simonov - -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/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/parser.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/parser.go deleted file mode 100644 index 8d38e30..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/parser.go +++ /dev/null @@ -1,1230 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" -) - -/* - * The parser implements the following grammar: - * - * stream ::= STREAM-START implicit_document? explicit_document* STREAM-END - * implicit_document ::= block_node DOCUMENT-END* - * explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* - * block_node_or_indentless_sequence ::= - * ALIAS - * | properties (block_content | indentless_block_sequence)? - * | block_content - * | indentless_block_sequence - * block_node ::= ALIAS - * | properties block_content? - * | block_content - * flow_node ::= ALIAS - * | properties flow_content? - * | flow_content - * properties ::= TAG ANCHOR? | ANCHOR TAG? - * block_content ::= block_collection | flow_collection | SCALAR - * flow_content ::= flow_collection | SCALAR - * block_collection ::= block_sequence | block_mapping - * flow_collection ::= flow_sequence | flow_mapping - * block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END - * indentless_sequence ::= (BLOCK-ENTRY block_node?)+ - * block_mapping ::= BLOCK-MAPPING_START - * ((KEY block_node_or_indentless_sequence?)? - * (VALUE block_node_or_indentless_sequence?)?)* - * BLOCK-END - * flow_sequence ::= FLOW-SEQUENCE-START - * (flow_sequence_entry FLOW-ENTRY)* - * flow_sequence_entry? - * FLOW-SEQUENCE-END - * flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * flow_mapping ::= FLOW-MAPPING-START - * (flow_mapping_entry FLOW-ENTRY)* - * flow_mapping_entry? - * FLOW-MAPPING-END - * flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - */ - -/* - * Peek the next token in the token queue. - */ -func peek_token(parser *yaml_parser_t) *yaml_token_t { - if parser.token_available || yaml_parser_fetch_more_tokens(parser) { - return &parser.tokens[parser.tokens_head] - } - return nil -} - -/* - * Remove the next token from the queue (must be called after peek_token). - */ -func skip_token(parser *yaml_parser_t) { - parser.token_available = false - parser.tokens_parsed++ - parser.stream_end_produced = parser.tokens[parser.tokens_head].token_type == yaml_STREAM_END_TOKEN - parser.tokens_head++ -} - -/* - * Get the next event. - */ - -func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { - /* Erase the event object. */ - *event = yaml_event_t{} - - /* No events after the end of the stream or error. */ - - if parser.stream_end_produced || parser.error != yaml_NO_ERROR || - parser.state == yaml_PARSE_END_STATE { - return true - } - - /* Generate the next event. */ - - return yaml_parser_state_machine(parser, event) -} - -/* - * Set parser error. - */ - -func yaml_parser_set_parser_error(parser *yaml_parser_t, - problem string, problem_mark YAML_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.problem = problem - parser.problem_mark = problem_mark - - return false -} - -func yaml_parser_set_parser_error_context(parser *yaml_parser_t, - context string, context_mark YAML_mark_t, - problem string, problem_mark YAML_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = problem_mark - - return false -} - -/* - * State dispatcher. - */ - -func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { - switch parser.state { - case yaml_PARSE_STREAM_START_STATE: - return yaml_parser_parse_stream_start(parser, event) - - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, true) - - case yaml_PARSE_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, false) - - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return yaml_parser_parse_document_content(parser, event) - - case yaml_PARSE_DOCUMENT_END_STATE: - return yaml_parser_parse_document_end(parser, event) - - case yaml_PARSE_BLOCK_NODE_STATE: - return yaml_parser_parse_node(parser, event, true, false) - - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return yaml_parser_parse_node(parser, event, true, true) - - case yaml_PARSE_FLOW_NODE_STATE: - return yaml_parser_parse_node(parser, event, false, false) - - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, true) - - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, false) - - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_indentless_sequence_entry(parser, event) - - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, true) - - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, false) - - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return yaml_parser_parse_block_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, true) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, false) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) - - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, true) - - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, true) - } - - panic("invalid parser state") -} - -/* - * Parse the production: - * stream ::= STREAM-START implicit_document? explicit_document* STREAM-END - * ************ - */ - -func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type != yaml_STREAM_START_TOKEN { - return yaml_parser_set_parser_error(parser, - "did not find expected ", token.start_mark) - } - - parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE - *event = yaml_event_t{ - event_type: yaml_STREAM_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - encoding: token.encoding, - } - skip_token(parser) - - return true -} - -/* - * Parse the productions: - * implicit_document ::= block_node DOCUMENT-END* - * * - * explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* - * ************************* - */ - -func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, - implicit bool) bool { - - token := peek_token(parser) - if token == nil { - return false - } - - /* Parse extra document end indicators. */ - - if !implicit { - for token.token_type == yaml_DOCUMENT_END_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - /* Parse an implicit document. */ - - if implicit && token.token_type != yaml_VERSION_DIRECTIVE_TOKEN && - token.token_type != yaml_TAG_DIRECTIVE_TOKEN && - token.token_type != yaml_DOCUMENT_START_TOKEN && - token.token_type != yaml_STREAM_END_TOKEN { - if !yaml_parser_process_directives(parser, nil, nil) { - return false - } - - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_BLOCK_NODE_STATE - - *event = yaml_event_t{ - event_type: yaml_DOCUMENT_START_EVENT, - implicit: true, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - } else if token.token_type != yaml_STREAM_END_TOKEN { - /* Parse an explicit document. */ - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - - start_mark := token.start_mark - if !yaml_parser_process_directives(parser, &version_directive, - &tag_directives) { - return false - } - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_DOCUMENT_START_TOKEN { - yaml_parser_set_parser_error(parser, - "did not find expected ", token.start_mark) - return false - } - - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE - - end_mark := token.end_mark - - *event = yaml_event_t{ - event_type: yaml_DOCUMENT_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: false, - } - skip_token(parser) - } else { - /* Parse the stream end. */ - parser.state = yaml_PARSE_END_STATE - - *event = yaml_event_t{ - event_type: yaml_STREAM_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - } - return true -} - -/* - * Parse the productions: - * explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* - * *********** - */ - -func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_VERSION_DIRECTIVE_TOKEN || - token.token_type == yaml_TAG_DIRECTIVE_TOKEN || - token.token_type == yaml_DOCUMENT_START_TOKEN || - token.token_type == yaml_DOCUMENT_END_TOKEN || - token.token_type == yaml_STREAM_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - return yaml_parser_process_empty_scalar(parser, event, - token.start_mark) - } else { - return yaml_parser_parse_node(parser, event, true, false) - } -} - -/* - * Parse the productions: - * implicit_document ::= block_node DOCUMENT-END* - * ************* - * explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* - * ************* - */ - -func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { - implicit := true - - token := peek_token(parser) - if token == nil { - return false - } - - start_mark, end_mark := token.start_mark, token.start_mark - - if token.token_type == yaml_DOCUMENT_END_TOKEN { - end_mark = token.end_mark - skip_token(parser) - implicit = false - } - - parser.tag_directives = parser.tag_directives[:0] - - parser.state = yaml_PARSE_DOCUMENT_START_STATE - *event = yaml_event_t{ - event_type: yaml_DOCUMENT_END_EVENT, - start_mark: start_mark, - end_mark: end_mark, - implicit: implicit, - } - - return true -} - -/* - * Parse the productions: - * block_node_or_indentless_sequence ::= - * ALIAS - * ***** - * | properties (block_content | indentless_block_sequence)? - * ********** * - * | block_content | indentless_block_sequence - * * - * block_node ::= ALIAS - * ***** - * | properties block_content? - * ********** * - * | block_content - * * - * flow_node ::= ALIAS - * ***** - * | properties flow_content? - * ********** * - * | flow_content - * * - * properties ::= TAG ANCHOR? | ANCHOR TAG? - * ************************* - * block_content ::= block_collection | flow_collection | SCALAR - * ****** - * flow_content ::= flow_collection | SCALAR - * ****** - */ - -func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, - block bool, indentless_sequence bool) bool { - - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_ALIAS_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - event_type: yaml_ALIAS_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - anchor: token.value, - } - skip_token(parser) - return true - } else { - start_mark, end_mark := token.start_mark, token.start_mark - - var tag_handle []byte - var tag_suffix, anchor []byte - var tag_mark YAML_mark_t - if token.token_type == yaml_ANCHOR_TOKEN { - anchor = token.value - start_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type == yaml_TAG_TOKEN { - tag_handle = token.value - tag_suffix = token.suffix - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } else if token.token_type == yaml_TAG_TOKEN { - tag_handle = token.value - tag_suffix = token.suffix - start_mark, tag_mark = token.start_mark, token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type == yaml_ANCHOR_TOKEN { - anchor = token.value - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - - } - } - - var tag []byte - if tag_handle != nil { - if len(tag_handle) == 0 { - tag = tag_suffix - tag_handle = nil - tag_suffix = nil - } else { - for i := range parser.tag_directives { - tag_directive := &parser.tag_directives[i] - if bytes.Equal(tag_directive.handle, tag_handle) { - tag = append([]byte(nil), tag_directive.prefix...) - tag = append(tag, tag_suffix...) - tag_handle = nil - tag_suffix = nil - break - } - } - if len(tag) == 0 { - yaml_parser_set_parser_error_context(parser, - "while parsing a node", start_mark, - "found undefined tag handle", tag_mark) - return false - } - } - } - - implicit := len(tag) == 0 - if indentless_sequence && token.token_type == yaml_BLOCK_ENTRY_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - - return true - } else { - if token.token_type == yaml_SCALAR_TOKEN { - plain_implicit := false - quoted_implicit := false - end_mark = token.end_mark - if (token.style == yaml_PLAIN_SCALAR_STYLE && len(tag) == 0) || - (len(tag) == 1 && tag[0] == '!') { - plain_implicit = true - } else if len(tag) == 0 { - quoted_implicit = true - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - event_type: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - value: token.value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(token.style), - } - - skip_token(parser) - return true - } else if token.token_type == yaml_FLOW_SEQUENCE_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE - - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), - } - - return true - } else if token.token_type == yaml_FLOW_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE - - *event = yaml_event_t{ - event_type: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - - return true - } else if block && token.token_type == yaml_BLOCK_SEQUENCE_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE - - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - - return true - } else if block && token.token_type == yaml_BLOCK_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE - - *event = yaml_event_t{ - event_type: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), - } - return true - } else if len(anchor) > 0 || len(tag) > 0 { - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - event_type: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - quoted_implicit: false, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true - } else { - msg := "while parsing a block node" - if !block { - msg = "while parsing a flow node" - } - yaml_parser_set_parser_error_context(parser, msg, start_mark, - "did not find expected node content", token.start_mark) - return false - } - } - } - - return false -} - -/* - * Parse the productions: - * block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END - * ******************** *********** * ********* - */ - -func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, - event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_BLOCK_ENTRY_TOKEN && - token.token_type != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } else { - parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else if token.token_type == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true - } else { - mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - return yaml_parser_set_parser_error_context(parser, - "while parsing a block collection", mark, - "did not find expected '-' indicator", token.start_mark) - } -} - -/* - * Parse the productions: - * indentless_sequence ::= (BLOCK-ENTRY block_node?)+ - * *********** * - */ - -func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, - event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_BLOCK_ENTRY_TOKEN && - token.token_type != yaml_KEY_TOKEN && - token.token_type != yaml_VALUE_TOKEN && - token.token_type != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } else { - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, - } - return true - } -} - -/* - * Parse the productions: - * block_mapping ::= BLOCK-MAPPING_START - * ******************* - * ((KEY block_node_or_indentless_sequence?)? - * *** * - * (VALUE block_node_or_indentless_sequence?)?)* - * - * BLOCK-END - * ********* - */ - -func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, - event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_KEY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_KEY_TOKEN && - token.token_type != yaml_VALUE_TOKEN && - token.token_type != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } else { - parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else if token.token_type == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - event_type: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - return true - } else { - mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - return yaml_parser_set_parser_error_context(parser, - "while parsing a block mapping", mark, - "did not find expected key", token.start_mark) - } -} - -/* - * Parse the productions: - * block_mapping ::= BLOCK-MAPPING_START - * - * ((KEY block_node_or_indentless_sequence?)? - * - * (VALUE block_node_or_indentless_sequence?)?)* - * ***** * - * BLOCK-END - * - */ - -func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, - event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_VALUE_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_KEY_TOKEN && - token.token_type != yaml_VALUE_TOKEN && - token.token_type != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } else { - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else { - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } -} - -/* - * Parse the productions: - * flow_sequence ::= FLOW-SEQUENCE-START - * ******************* - * (flow_sequence_entry FLOW-ENTRY)* - * * ********** - * flow_sequence_entry? - * * - * FLOW-SEQUENCE-END - * ***************** - * flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * * - */ - -func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, - event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type != yaml_FLOW_SEQUENCE_END_TOKEN { - if !first { - if token.token_type == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow sequence", mark, - "did not find expected ',' or ']'", token.start_mark) - } - } - - if token.token_type == yaml_KEY_TOKEN { - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE - *event = yaml_event_t{ - event_type: yaml_MAPPING_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - implicit: true, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - - skip_token(parser) - return true - } else if token.token_type != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - event_type: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true -} - -/* - * Parse the productions: - * flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * *** * - */ - -func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, - event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type != yaml_VALUE_TOKEN && - token.token_type != yaml_FLOW_ENTRY_TOKEN && - token.token_type != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } else { - mark := token.end_mark - skip_token(parser) - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } -} - -/* - * Parse the productions: - * flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * ***** * - */ - -func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, - event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type == yaml_VALUE_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_FLOW_ENTRY_TOKEN && - token.token_type != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -/* - * Parse the productions: - * flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * * - */ - -func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, - event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - event_type: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, - } - - return true -} - -/* - * Parse the productions: - * flow_mapping ::= FLOW-MAPPING-START - * ****************** - * (flow_mapping_entry FLOW-ENTRY)* - * * ********** - * flow_mapping_entry? - * ****************** - * FLOW-MAPPING-END - * **************** - * flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * * *** * - */ - -func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, - event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.token_type != yaml_FLOW_MAPPING_END_TOKEN { - if !first { - if token.token_type == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow mapping", mark, - "did not find expected ',' or '}'", token.start_mark) - } - } - - if token.token_type == yaml_KEY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_VALUE_TOKEN && - token.token_type != yaml_FLOW_ENTRY_TOKEN && - token.token_type != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } else { - parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, - token.start_mark) - } - } else if token.token_type != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - event_type: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true -} - -/* - * Parse the productions: - * flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - * * ***** * - */ - -func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, - event *yaml_event_t, empty bool) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if empty { - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, - token.start_mark) - } - - if token.token_type == yaml_VALUE_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.token_type != yaml_FLOW_ENTRY_TOKEN && - token.token_type != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -/* - * Generate an empty scalar event. - */ - -func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, - mark YAML_mark_t) bool { - *event = yaml_event_t{ - event_type: yaml_SCALAR_EVENT, - start_mark: mark, - end_mark: mark, - value: nil, - implicit: true, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - - return true -} - -/* - * Parse directives. - */ - -func yaml_parser_process_directives(parser *yaml_parser_t, - version_directive_ref **yaml_version_directive_t, - tag_directives_ref *[]yaml_tag_directive_t) bool { - - token := peek_token(parser) - if token == nil { - return false - } - - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - - for token.token_type == yaml_VERSION_DIRECTIVE_TOKEN || - token.token_type == yaml_TAG_DIRECTIVE_TOKEN { - if token.token_type == yaml_VERSION_DIRECTIVE_TOKEN { - if version_directive != nil { - yaml_parser_set_parser_error(parser, - "found duplicate %YAML directive", token.start_mark) - return false - } - if token.major != 1 || - token.minor != 1 { - yaml_parser_set_parser_error(parser, - "found incompatible YAML document", token.start_mark) - return false - } - version_directive = &yaml_version_directive_t{ - major: token.major, - minor: token.minor, - } - } else if token.token_type == yaml_TAG_DIRECTIVE_TOKEN { - value := yaml_tag_directive_t{ - handle: token.value, - prefix: token.prefix, - } - - if !yaml_parser_append_tag_directive(parser, value, false, - token.start_mark) { - return false - } - tag_directives = append(tag_directives, value) - } - - skip_token(parser) - token := peek_token(parser) - if token == nil { - return false - } - } - - for i := range default_tag_directives { - if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { - return false - } - } - - if version_directive_ref != nil { - *version_directive_ref = version_directive - } - if tag_directives_ref != nil { - *tag_directives_ref = tag_directives - } - - return true -} - -/* - * Append a tag directive to the directives stack. - */ - -func yaml_parser_append_tag_directive(parser *yaml_parser_t, - value yaml_tag_directive_t, allow_duplicates bool, mark YAML_mark_t) bool { - for i := range parser.tag_directives { - tag := &parser.tag_directives[i] - if bytes.Equal(value.handle, tag.handle) { - if allow_duplicates { - return true - } - return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) - } - } - - parser.tag_directives = append(parser.tag_directives, value) - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/parser_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/parser_test.go deleted file mode 100644 index 534ca5e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/parser_test.go +++ /dev/null @@ -1,81 +0,0 @@ -/* -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 candiedyaml - -import ( - "io/ioutil" - "os" - "path/filepath" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var parses = func(filename string) { - It("parses "+filename, func() { - file, err := os.Open(filename) - Expect(err).To(BeNil()) - - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_reader(&parser, file) - - failed := false - event := yaml_event_t{} - - for { - if !yaml_parser_parse(&parser, &event) { - failed = true - println("---", parser.error, parser.problem, parser.context, "line", parser.problem_mark.line, "col", parser.problem_mark.column) - break - } - - if event.event_type == yaml_STREAM_END_EVENT { - break - } - } - - file.Close() - - // msg := "SUCCESS" - // if failed { - // msg = "FAILED" - // if parser.error != yaml_NO_ERROR { - // m := parser.problem_mark - // fmt.Printf("ERROR: (%s) %s @ line: %d col: %d\n", - // parser.context, parser.problem, m.line, m.column) - // } - // } - Expect(failed).To(BeFalse()) - }) -} - -var parseYamls = func(dirname string) { - fileInfos, err := ioutil.ReadDir(dirname) - if err != nil { - panic(err.Error()) - } - - for _, fileInfo := range fileInfos { - if !fileInfo.IsDir() { - parses(filepath.Join(dirname, fileInfo.Name())) - } - } -} - -var _ = Describe("Parser", func() { - parseYamls("fixtures/specification") - parseYamls("fixtures/specification/types") -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/reader.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/reader.go deleted file mode 100644 index 5631da2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/reader.go +++ /dev/null @@ -1,465 +0,0 @@ -/* -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 candiedyaml - -import ( - "io" -) - -/* - * Set the reader error and return 0. - */ - -func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, - offset int, value int) bool { - parser.error = yaml_READER_ERROR - parser.problem = problem - parser.problem_offset = offset - parser.problem_value = value - - return false -} - -/* - * Byte order marks. - */ -const ( - BOM_UTF8 = "\xef\xbb\xbf" - BOM_UTF16LE = "\xff\xfe" - BOM_UTF16BE = "\xfe\xff" -) - -/* - * Determine the input stream encoding by checking the BOM symbol. If no BOM is - * found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. - */ - -func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { - /* Ensure that we had enough bytes in the raw buffer. */ - for !parser.eof && - len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { - if !yaml_parser_update_raw_buffer(parser) { - return false - } - } - - /* Determine the encoding. */ - raw := parser.raw_buffer - pos := parser.raw_buffer_pos - remaining := len(raw) - pos - if remaining >= 2 && - raw[pos] == BOM_UTF16LE[0] && raw[pos+1] == BOM_UTF16LE[1] { - parser.encoding = yaml_UTF16LE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if remaining >= 2 && - raw[pos] == BOM_UTF16BE[0] && raw[pos+1] == BOM_UTF16BE[1] { - parser.encoding = yaml_UTF16BE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if remaining >= 3 && - raw[pos] == BOM_UTF8[0] && raw[pos+1] == BOM_UTF8[1] && raw[pos+2] == BOM_UTF8[2] { - parser.encoding = yaml_UTF8_ENCODING - parser.raw_buffer_pos += 3 - parser.offset += 3 - } else { - parser.encoding = yaml_UTF8_ENCODING - } - - return true -} - -/* - * Update the raw buffer. - */ - -func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { - size_read := 0 - - /* Return if the raw buffer is full. */ - if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { - return true - } - - /* Return on EOF. */ - - if parser.eof { - return true - } - - /* Move the remaining bytes in the raw buffer to the beginning. */ - if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { - copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) - } - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] - parser.raw_buffer_pos = 0 - - /* Call the read handler to fill the buffer. */ - size_read, err := parser.read_handler(parser, - parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] - - if err == io.EOF { - parser.eof = true - } else if err != nil { - return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), - parser.offset, -1) - } - - return true -} - -/* - * Ensure that the buffer contains at least `length` characters. - * Return 1 on success, 0 on failure. - * - * The length is supposed to be significantly less that the buffer size. - */ - -func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { - /* Read handler must be set. */ - if parser.read_handler == nil { - panic("read handler must be set") - } - - /* If the EOF flag is set and the raw buffer is empty, do nothing. */ - - if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { - return true - } - - /* Return if the buffer contains enough characters. */ - - if parser.unread >= length { - return true - } - - /* Determine the input encoding if it is not known yet. */ - - if parser.encoding == yaml_ANY_ENCODING { - if !yaml_parser_determine_encoding(parser) { - return false - } - } - - /* Move the unread characters to the beginning of the buffer. */ - buffer_end := len(parser.buffer) - if 0 < parser.buffer_pos && - parser.buffer_pos < buffer_end { - copy(parser.buffer, parser.buffer[parser.buffer_pos:]) - buffer_end -= parser.buffer_pos - parser.buffer_pos = 0 - } else if parser.buffer_pos == buffer_end { - buffer_end = 0 - parser.buffer_pos = 0 - } - - parser.buffer = parser.buffer[:cap(parser.buffer)] - - /* Fill the buffer until it has enough characters. */ - first := true - for parser.unread < length { - /* Fill the raw buffer if necessary. */ - - if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { - if !yaml_parser_update_raw_buffer(parser) { - parser.buffer = parser.buffer[:buffer_end] - return false - } - } - first = false - - /* Decode the raw buffer. */ - for parser.raw_buffer_pos != len(parser.raw_buffer) { - var value rune - var w int - - raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos - incomplete := false - - /* Decode the next character. */ - - switch parser.encoding { - case yaml_UTF8_ENCODING: - - /* - * Decode a UTF-8 character. Check RFC 3629 - * (http://www.ietf.org/rfc/rfc3629.txt) for more details. - * - * The following table (taken from the RFC) is used for - * decoding. - * - * Char. number range | UTF-8 octet sequence - * (hexadecimal) | (binary) - * --------------------+------------------------------------ - * 0000 0000-0000 007F | 0xxxxxxx - * 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - * 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - * 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * - * Additionally, the characters in the range 0xD800-0xDFFF - * are prohibited as they are reserved for use with UTF-16 - * surrogate pairs. - */ - - /* Determine the length of the UTF-8 sequence. */ - - octet := parser.raw_buffer[parser.raw_buffer_pos] - w = width(octet) - - /* Check if the leading octet is valid. */ - - if w == 0 { - return yaml_parser_set_reader_error(parser, - "invalid leading UTF-8 octet", - parser.offset, int(octet)) - } - - /* Check if the raw buffer contains an incomplete character. */ - - if w > raw_unread { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-8 octet sequence", - parser.offset, -1) - } - incomplete = true - break - } - - /* Decode the leading octet. */ - switch { - case octet&0x80 == 0x00: - value = rune(octet & 0x7F) - case octet&0xE0 == 0xC0: - value = rune(octet & 0x1F) - case octet&0xF0 == 0xE0: - value = rune(octet & 0x0F) - case octet&0xF8 == 0xF0: - value = rune(octet & 0x07) - default: - value = 0 - } - - /* Check and decode the trailing octets. */ - - for k := 1; k < w; k++ { - octet = parser.raw_buffer[parser.raw_buffer_pos+k] - - /* Check if the octet is valid. */ - - if (octet & 0xC0) != 0x80 { - return yaml_parser_set_reader_error(parser, - "invalid trailing UTF-8 octet", - parser.offset+k, int(octet)) - } - - /* Decode the octet. */ - - value = (value << 6) + rune(octet&0x3F) - } - - /* Check the length of the sequence against the value. */ - switch { - case w == 1: - case w == 2 && value >= 0x80: - case w == 3 && value >= 0x800: - case w == 4 && value >= 0x10000: - default: - return yaml_parser_set_reader_error(parser, - "invalid length of a UTF-8 sequence", - parser.offset, -1) - } - - /* Check the range of the value. */ - - if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { - return yaml_parser_set_reader_error(parser, - "invalid Unicode character", - parser.offset, int(value)) - } - case yaml_UTF16LE_ENCODING, - yaml_UTF16BE_ENCODING: - - var low, high int - if parser.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - high, low = 1, 0 - } - - /* - * The UTF-16 encoding is not as simple as one might - * naively think. Check RFC 2781 - * (http://www.ietf.org/rfc/rfc2781.txt). - * - * Normally, two subsequent bytes describe a Unicode - * character. However a special technique (called a - * surrogate pair) is used for specifying character - * values larger than 0xFFFF. - * - * A surrogate pair consists of two pseudo-characters: - * high surrogate area (0xD800-0xDBFF) - * low surrogate area (0xDC00-0xDFFF) - * - * The following formulas are used for decoding - * and encoding characters using surrogate pairs: - * - * U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) - * U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) - * W1 = 110110yyyyyyyyyy - * W2 = 110111xxxxxxxxxx - * - * where U is the character value, W1 is the high surrogate - * area, W2 is the low surrogate area. - */ - - /* Check for incomplete UTF-16 character. */ - - if raw_unread < 2 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 character", - parser.offset, -1) - } - incomplete = true - break - } - - /* Get the character. */ - value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) - - /* Check for unexpected low surrogate area. */ - - if (value & 0xFC00) == 0xDC00 { - return yaml_parser_set_reader_error(parser, - "unexpected low surrogate area", - parser.offset, int(value)) - } - - /* Check for a high surrogate area. */ - - if (value & 0xFC00) == 0xD800 { - - w = 4 - - /* Check for incomplete surrogate pair. */ - - if raw_unread < 4 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 surrogate pair", - parser.offset, -1) - } - incomplete = true - break - } - - /* Get the next character. */ - - value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) - - /* Check for a low surrogate area. */ - - if (value2 & 0xFC00) != 0xDC00 { - return yaml_parser_set_reader_error(parser, - "expected low surrogate area", - parser.offset+2, int(value2)) - } - - /* Generate the value of the surrogate pair. */ - - value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) - } else { - w = 2 - } - - break - - default: - panic("Impossible") /* Impossible. */ - } - - /* Check if the raw buffer contains enough bytes to form a character. */ - - if incomplete { - break - } - - /* - * Check if the character is in the allowed range: - * #x9 | #xA | #xD | [#x20-#x7E] (8 bit) - * | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) - * | [#x10000-#x10FFFF] (32 bit) - */ - - if !(value == 0x09 || value == 0x0A || value == 0x0D || - (value >= 0x20 && value <= 0x7E) || - (value == 0x85) || (value >= 0xA0 && value <= 0xD7FF) || - (value >= 0xE000 && value <= 0xFFFD) || - (value >= 0x10000 && value <= 0x10FFFF)) { - return yaml_parser_set_reader_error(parser, - "control characters are not allowed", - parser.offset, int(value)) - } - - /* Move the raw pointers. */ - - parser.raw_buffer_pos += w - parser.offset += w - - /* Finally put the character into the buffer. */ - - /* 0000 0000-0000 007F . 0xxxxxxx */ - if value <= 0x7F { - parser.buffer[buffer_end] = byte(value) - } else if value <= 0x7FF { - /* 0000 0080-0000 07FF . 110xxxxx 10xxxxxx */ - parser.buffer[buffer_end] = byte(0xC0 + (value >> 6)) - parser.buffer[buffer_end+1] = byte(0x80 + (value & 0x3F)) - } else if value <= 0xFFFF { - /* 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx */ - parser.buffer[buffer_end] = byte(0xE0 + (value >> 12)) - parser.buffer[buffer_end+1] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_end+2] = byte(0x80 + (value & 0x3F)) - } else { - /* 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - parser.buffer[buffer_end] = byte(0xF0 + (value >> 18)) - parser.buffer[buffer_end+1] = byte(0x80 + ((value >> 12) & 0x3F)) - parser.buffer[buffer_end+2] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_end+3] = byte(0x80 + (value & 0x3F)) - } - - buffer_end += w - parser.unread++ - } - - /* On EOF, put NUL into the buffer and return. */ - - if parser.eof { - parser.buffer[buffer_end] = 0 - buffer_end++ - parser.buffer = parser.buffer[:buffer_end] - parser.unread++ - return true - } - - } - - parser.buffer = parser.buffer[:buffer_end] - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/reader_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/reader_test.go deleted file mode 100644 index 3771ee7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/reader_test.go +++ /dev/null @@ -1,291 +0,0 @@ -/* -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 candiedyaml - -import ( - // "fmt" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -/* - * Test cases are stolen from - * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt - */ - -type test_case struct { - title string - test string - result bool -} - -var _ = Describe("Reader", func() { - LONG := 100000 - - Context("UTF8 Sequences", func() { - utf8_sequences := []test_case{ - /* {"title", "test 1|test 2|...|test N!", (0 or 1)}, */ - - {"a simple test", "'test' is '\xd0\xbf\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb5\xd1\x80\xd0\xba\xd0\xb0' in Russian!", true}, - - {"an empty line", "!", true}, - {"u-0 is a control character", "\x00!", false}, - {"u-80 is a control character", "\xc2\x80!", false}, - {"u-800 is valid", "\xe0\xa0\x80!", true}, - {"u-10000 is valid", "\xf0\x90\x80\x80!", true}, - {"5 bytes sequences are not allowed", "\xf8\x88\x80\x80\x80!", false}, - {"6 bytes sequences are not allowed", "\xfc\x84\x80\x80\x80\x80!", false}, - - {"u-7f is a control character", "\x7f!", false}, - {"u-7FF is valid", "\xdf\xbf!", true}, - {"u-FFFF is a control character", "\xef\xbf\xbf!", false}, - {"u-1FFFFF is too large", "\xf7\xbf\xbf\xbf!", false}, - {"u-3FFFFFF is 5 bytes", "\xfb\xbf\xbf\xbf\xbf!", false}, - {"u-7FFFFFFF is 6 bytes", "\xfd\xbf\xbf\xbf\xbf\xbf!", false}, - - {"u-D7FF", "\xed\x9f\xbf!", true}, - {"u-E000", "\xee\x80\x80!", true}, - {"u-FFFD", "\xef\xbf\xbd!", true}, - {"u-10FFFF", "\xf4\x8f\xbf\xbf!", true}, - {"u-110000", "\xf4\x90\x80\x80!", false}, - - {"first continuation byte", "\x80!", false}, - {"last continuation byte", "\xbf!", false}, - - {"2 continuation bytes", "\x80\xbf!", false}, - {"3 continuation bytes", "\x80\xbf\x80!", false}, - {"4 continuation bytes", "\x80\xbf\x80\xbf!", false}, - {"5 continuation bytes", "\x80\xbf\x80\xbf\x80!", false}, - {"6 continuation bytes", "\x80\xbf\x80\xbf\x80\xbf!", false}, - {"7 continuation bytes", "\x80\xbf\x80\xbf\x80\xbf\x80!", false}, - - {"sequence of all 64 possible continuation bytes", - "\x80|\x81|\x82|\x83|\x84|\x85|\x86|\x87|\x88|\x89|\x8a|\x8b|\x8c|\x8d|\x8e|\x8f|" + - "\x90|\x91|\x92|\x93|\x94|\x95|\x96|\x97|\x98|\x99|\x9a|\x9b|\x9c|\x9d|\x9e|\x9f|" + - "\xa0|\xa1|\xa2|\xa3|\xa4|\xa5|\xa6|\xa7|\xa8|\xa9|\xaa|\xab|\xac|\xad|\xae|\xaf|" + - "\xb0|\xb1|\xb2|\xb3|\xb4|\xb5|\xb6|\xb7|\xb8|\xb9|\xba|\xbb|\xbc|\xbd|\xbe|\xbf!", false}, - {"32 first bytes of 2-byte sequences {0xc0-0xdf}", - "\xc0 |\xc1 |\xc2 |\xc3 |\xc4 |\xc5 |\xc6 |\xc7 |\xc8 |\xc9 |\xca |\xcb |\xcc |\xcd |\xce |\xcf |" + - "\xd0 |\xd1 |\xd2 |\xd3 |\xd4 |\xd5 |\xd6 |\xd7 |\xd8 |\xd9 |\xda |\xdb |\xdc |\xdd |\xde |\xdf !", false}, - {"16 first bytes of 3-byte sequences {0xe0-0xef}", - "\xe0 |\xe1 |\xe2 |\xe3 |\xe4 |\xe5 |\xe6 |\xe7 |\xe8 |\xe9 |\xea |\xeb |\xec |\xed |\xee |\xef !", false}, - {"8 first bytes of 4-byte sequences {0xf0-0xf7}", "\xf0 |\xf1 |\xf2 |\xf3 |\xf4 |\xf5 |\xf6 |\xf7 !", false}, - {"4 first bytes of 5-byte sequences {0xf8-0xfb}", "\xf8 |\xf9 |\xfa |\xfb !", false}, - {"2 first bytes of 6-byte sequences {0xfc-0xfd}", "\xfc |\xfd !", false}, - - {"sequences with last byte missing {u-0}", - "\xc0|\xe0\x80|\xf0\x80\x80|\xf8\x80\x80\x80|\xfc\x80\x80\x80\x80!", false}, - {"sequences with last byte missing {u-...FF}", - "\xdf|\xef\xbf|\xf7\xbf\xbf|\xfb\xbf\xbf\xbf|\xfd\xbf\xbf\xbf\xbf!", false}, - - {"impossible bytes", "\xfe|\xff|\xfe\xfe\xff\xff!", false}, - - {"overlong sequences {u-2f}", - "\xc0\xaf|\xe0\x80\xaf|\xf0\x80\x80\xaf|\xf8\x80\x80\x80\xaf|\xfc\x80\x80\x80\x80\xaf!", false}, - - {"maximum overlong sequences", - "\xc1\xbf|\xe0\x9f\xbf|\xf0\x8f\xbf\xbf|\xf8\x87\xbf\xbf\xbf|\xfc\x83\xbf\xbf\xbf\xbf!", false}, - - {"overlong representation of the NUL character", - "\xc0\x80|\xe0\x80\x80|\xf0\x80\x80\x80|\xf8\x80\x80\x80\x80|\xfc\x80\x80\x80\x80\x80!", false}, - - {"single UTF-16 surrogates", - "\xed\xa0\x80|\xed\xad\xbf|\xed\xae\x80|\xed\xaf\xbf|\xed\xb0\x80|\xed\xbe\x80|\xed\xbf\xbf!", false}, - - {"paired UTF-16 surrogates", - "\xed\xa0\x80\xed\xb0\x80|\xed\xa0\x80\xed\xbf\xbf|\xed\xad\xbf\xed\xb0\x80|" + - "\xed\xad\xbf\xed\xbf\xbf|\xed\xae\x80\xed\xb0\x80|\xed\xae\x80\xed\xbf\xbf|" + - "\xed\xaf\xbf\xed\xb0\x80|\xed\xaf\xbf\xed\xbf\xbf!", false}, - - {"other illegal code positions", "\xef\xbf\xbe|\xef\xbf\xbf!", false}, - } - - check_sequence := func(tc test_case) { - It(tc.title, func() { - start := 0 - end := start - bytes := []byte(tc.test) - - for { - for bytes[end] != '|' && bytes[end] != '!' { - end++ - } - - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_string(&parser, bytes) - result := yaml_parser_update_buffer(&parser, end-start) - Expect(result).To(Equal(tc.result)) - // outcome := '+' - // if result != tc.result { - // outcome = '-' - // } - // fmt.Printf("\t\t %c %s", outcome, tc.title) - // if parser.error == yaml_NO_ERROR { - // fmt.Printf("(no error)\n") - // } else if parser.error == yaml_READER_ERROR { - // if parser.problem_value != -1 { - // fmt.Printf("(reader error: %s: #%X at %d)\n", - // parser.problem, parser.problem_value, parser.problem_offset) - // } else { - // fmt.Printf("(reader error: %s: at %d)\n", - // parser.problem, parser.problem_offset) - // } - // } - - if bytes[end] == '!' { - break - } - - end++ - start = end - yaml_parser_delete(&parser) - } - }) - } - - for _, test := range utf8_sequences { - check_sequence(test) - } - }) - - Context("BOMs", func() { - boms := []test_case{ - /* {"title", "test!", lenth}, */ - {"no bom (utf-8)", "Hi is \xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!", true}, - {"bom (utf-8)", "\xef\xbb\xbfHi is \xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!", true}, - {"bom (utf-16-le)", "\xff\xfeH\x00i\x00 \x00i\x00s\x00 \x00\x1f\x04@\x04" + "8\x04" + "2\x04" + "5\x04" + "B\x04!", true}, - {"bom (utf-16-be)", "\xfe\xff\x00H\x00i\x00 \x00i\x00s\x00 \x04\x1f\x04@\x04" + "8\x04" + "2\x04" + "5\x04" + "B!", true}, - } - - check_bom := func(tc test_case) { - It(tc.title, func() { - start := 0 - end := start - bytes := []byte(tc.test) - - for bytes[end] != '!' { - end++ - } - - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_string(&parser, bytes[:end-start]) - result := yaml_parser_update_buffer(&parser, end-start) - Expect(result).To(Equal(tc.result)) - yaml_parser_delete(&parser) - }) - } - - for _, test := range boms { - check_bom(test) - } - - }) - - Context("Long UTF8", func() { - It("parses properly", func() { - buffer := make([]byte, 0, 3+LONG*2) - buffer = append(buffer, '\xef', '\xbb', '\xbf') - for j := 0; j < LONG; j++ { - if j%2 == 1 { - buffer = append(buffer, '\xd0', '\x90') - } else { - buffer = append(buffer, '\xd0', '\xaf') - } - } - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_string(&parser, buffer) - - for k := 0; k < LONG; k++ { - if parser.unread == 0 { - updated := yaml_parser_update_buffer(&parser, 1) - Expect(updated).To(BeTrue()) - // printf("\treader error: %s at %d\n", parser.problem, parser.problem_offset); - } - Expect(parser.unread).NotTo(Equal(0)) - // printf("\tnot enough characters at %d\n", k); - var ch0, ch1 byte - if k%2 == 1 { - ch0 = '\xd0' - ch1 = '\x90' - } else { - ch0 = '\xd0' - ch1 = '\xaf' - } - Expect(parser.buffer[parser.buffer_pos]).To(Equal(ch0)) - Expect(parser.buffer[parser.buffer_pos+1]).To(Equal(ch1)) - // printf("\tincorrect UTF-8 sequence: %X %X instead of %X %X\n", - // (int)parser.buffer.pointer[0], (int)parser.buffer.pointer[1], - // (int)ch0, (int)ch1); - - parser.buffer_pos += 2 - parser.unread -= 1 - } - updated := yaml_parser_update_buffer(&parser, 1) - Expect(updated).To(BeTrue()) - // printf("\treader error: %s at %d\n", parser.problem, parser.problem_offset); - yaml_parser_delete(&parser) - }) - }) - - Context("Long UTF16", func() { - It("parses properly", func() { - buffer := make([]byte, 0, 2+LONG*2) - buffer = append(buffer, '\xff', '\xfe') - for j := 0; j < LONG; j++ { - if j%2 == 1 { - buffer = append(buffer, '\x10', '\x04') - } else { - buffer = append(buffer, '/', '\x04') - } - } - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_string(&parser, buffer) - - for k := 0; k < LONG; k++ { - if parser.unread == 0 { - updated := yaml_parser_update_buffer(&parser, 1) - Expect(updated).To(BeTrue()) - // printf("\treader error: %s at %d\n", parser.problem, parser.problem_offset); - } - Expect(parser.unread).NotTo(Equal(0)) - // printf("\tnot enough characters at %d\n", k); - var ch0, ch1 byte - if k%2 == 1 { - ch0 = '\xd0' - ch1 = '\x90' - } else { - ch0 = '\xd0' - ch1 = '\xaf' - } - Expect(parser.buffer[parser.buffer_pos]).To(Equal(ch0)) - Expect(parser.buffer[parser.buffer_pos+1]).To(Equal(ch1)) - // printf("\tincorrect UTF-8 sequence: %X %X instead of %X %X\n", - // (int)parser.buffer.pointer[0], (int)parser.buffer.pointer[1], - // (int)ch0, (int)ch1); - - parser.buffer_pos += 2 - parser.unread -= 1 - } - updated := yaml_parser_update_buffer(&parser, 1) - Expect(updated).To(BeTrue()) - // printf("\treader error: %s at %d\n", parser.problem, parser.problem_offset); - yaml_parser_delete(&parser) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/resolver.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/resolver.go deleted file mode 100644 index 65a6d3d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/resolver.go +++ /dev/null @@ -1,449 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" - "encoding/base64" - "fmt" - "math" - "reflect" - "regexp" - "strconv" - "strings" - "time" -) - -var byteSliceType = reflect.TypeOf([]byte(nil)) - -var binary_tags = [][]byte{[]byte("!binary"), []byte(yaml_BINARY_TAG)} -var bool_values map[string]bool -var null_values map[string]bool - -var signs = []byte{'-', '+'} -var nulls = []byte{'~', 'n', 'N'} -var bools = []byte{'t', 'T', 'f', 'F', 'y', 'Y', 'n', 'N', 'o', 'O'} - -var timestamp_regexp *regexp.Regexp -var ymd_regexp *regexp.Regexp - -func init() { - bool_values = make(map[string]bool) - bool_values["y"] = true - bool_values["yes"] = true - bool_values["n"] = false - bool_values["no"] = false - bool_values["true"] = true - bool_values["false"] = false - bool_values["on"] = true - bool_values["off"] = false - - null_values = make(map[string]bool) - null_values["~"] = true - null_values["null"] = true - null_values["Null"] = true - null_values["NULL"] = true - - timestamp_regexp = regexp.MustCompile("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \t]*(?:Z|([-+][0-9][0-9]?)(?::([0-9][0-9])?)?))?)?$") - ymd_regexp = regexp.MustCompile("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)$") -} - -func resolve(event yaml_event_t, v reflect.Value, useNumber bool) (string, error) { - val := string(event.value) - - if null_values[val] { - v.Set(reflect.Zero(v.Type())) - return yaml_NULL_TAG, nil - } - - switch v.Kind() { - case reflect.String: - if useNumber && v.Type() == numberType { - tag, i := resolveInterface(event, useNumber) - if n, ok := i.(Number); ok { - v.Set(reflect.ValueOf(n)) - return tag, nil - } - return "", fmt.Errorf("Not a number: '%s' at %s", event.value, event.start_mark) - } - - return resolve_string(val, v, event) - case reflect.Bool: - return resolve_bool(val, v, event) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return resolve_int(val, v, useNumber, event) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return resolve_uint(val, v, useNumber, event) - case reflect.Float32, reflect.Float64: - return resolve_float(val, v, useNumber, event) - case reflect.Interface: - _, i := resolveInterface(event, useNumber) - if i != nil { - v.Set(reflect.ValueOf(i)) - } else { - v.Set(reflect.Zero(v.Type())) - } - - case reflect.Struct: - return resolve_time(val, v, event) - case reflect.Slice: - if v.Type() != byteSliceType { - return "", fmt.Errorf("Cannot resolve %s into %s at %s", val, v.String(), event.start_mark) - } - b, err := decode_binary(event.value, event) - if err != nil { - return "", err - } - - v.Set(reflect.ValueOf(b)) - default: - return "", fmt.Errorf("Unknown resolution for '%s' using %s at %s", val, v.String(), event.start_mark) - } - - return yaml_STR_TAG, nil -} - -func hasBinaryTag(event yaml_event_t) bool { - for _, tag := range binary_tags { - if bytes.Equal(event.tag, tag) { - return true - } - } - return false -} - -func decode_binary(value []byte, event yaml_event_t) ([]byte, error) { - b := make([]byte, base64.StdEncoding.DecodedLen(len(value))) - n, err := base64.StdEncoding.Decode(b, value) - if err != nil { - return nil, fmt.Errorf("Invalid base64 text: '%s' at %s", string(b), event.start_mark) - } - return b[:n], nil -} - -func resolve_string(val string, v reflect.Value, event yaml_event_t) (string, error) { - if len(event.tag) > 0 { - if hasBinaryTag(event) { - b, err := decode_binary(event.value, event) - if err != nil { - return "", err - } - val = string(b) - } - } - v.SetString(val) - return yaml_STR_TAG, nil -} - -func resolve_bool(val string, v reflect.Value, event yaml_event_t) (string, error) { - b, found := bool_values[strings.ToLower(val)] - if !found { - return "", fmt.Errorf("Invalid boolean: '%s' at %s", val, event.start_mark) - } - - v.SetBool(b) - return yaml_BOOL_TAG, nil -} - -func resolve_int(val string, v reflect.Value, useNumber bool, event yaml_event_t) (string, error) { - original := val - val = strings.Replace(val, "_", "", -1) - var value uint64 - - isNumberValue := v.Type() == numberType - - sign := int64(1) - if val[0] == '-' { - sign = -1 - val = val[1:] - } else if val[0] == '+' { - val = val[1:] - } - - base := 0 - if val == "0" { - if isNumberValue { - v.SetString("0") - } else { - v.Set(reflect.Zero(v.Type())) - } - - return yaml_INT_TAG, nil - } - - if strings.HasPrefix(val, "0o") { - base = 8 - val = val[2:] - } - - value, err := strconv.ParseUint(val, base, 64) - if err != nil { - return "", fmt.Errorf("Invalid integer: '%s' at %s", original, event.start_mark) - } - - var val64 int64 - if value <= math.MaxInt64 { - val64 = int64(value) - if sign == -1 { - val64 = -val64 - } - } else if sign == -1 && value == uint64(math.MaxInt64)+1 { - val64 = math.MinInt64 - } else { - return "", fmt.Errorf("Invalid integer: '%s' at %s", original, event.start_mark) - } - - if isNumberValue { - v.SetString(strconv.FormatInt(val64, 10)) - } else { - if v.OverflowInt(val64) { - return "", fmt.Errorf("Invalid integer: '%s' at %s", original, event.start_mark) - } - v.SetInt(val64) - } - - return yaml_INT_TAG, nil -} - -func resolve_uint(val string, v reflect.Value, useNumber bool, event yaml_event_t) (string, error) { - original := val - val = strings.Replace(val, "_", "", -1) - var value uint64 - - isNumberValue := v.Type() == numberType - - if val[0] == '-' { - return "", fmt.Errorf("Unsigned int with negative value: '%s' at %s", original, event.start_mark) - } - - if val[0] == '+' { - val = val[1:] - } - - base := 0 - if val == "0" { - if isNumberValue { - v.SetString("0") - } else { - v.Set(reflect.Zero(v.Type())) - } - - return yaml_INT_TAG, nil - } - - if strings.HasPrefix(val, "0o") { - base = 8 - val = val[2:] - } - - value, err := strconv.ParseUint(val, base, 64) - if err != nil { - return "", fmt.Errorf("Invalid unsigned integer: '%s' at %s", val, event.start_mark) - } - - if isNumberValue { - v.SetString(strconv.FormatUint(value, 10)) - } else { - if v.OverflowUint(value) { - return "", fmt.Errorf("Invalid unsigned integer: '%s' at %s", val, event.start_mark) - } - - v.SetUint(value) - } - - return yaml_INT_TAG, nil -} - -func resolve_float(val string, v reflect.Value, useNumber bool, event yaml_event_t) (string, error) { - val = strings.Replace(val, "_", "", -1) - var value float64 - - isNumberValue := v.Type() == numberType - typeBits := 64 - if !isNumberValue { - typeBits = v.Type().Bits() - } - - sign := 1 - if val[0] == '-' { - sign = -1 - val = val[1:] - } else if val[0] == '+' { - val = val[1:] - } - - valLower := strings.ToLower(val) - if valLower == ".inf" { - value = math.Inf(sign) - } else if valLower == ".nan" { - value = math.NaN() - } else { - var err error - value, err = strconv.ParseFloat(val, typeBits) - value *= float64(sign) - - if err != nil { - return "", fmt.Errorf("Invalid float: '%s' at %s", val, event.start_mark) - } - } - - if isNumberValue { - v.SetString(strconv.FormatFloat(value, 'g', -1, typeBits)) - } else { - if v.OverflowFloat(value) { - return "", fmt.Errorf("Invalid float: '%s' at %s", val, event.start_mark) - } - - v.SetFloat(value) - } - - return yaml_FLOAT_TAG, nil -} - -func resolve_time(val string, v reflect.Value, event yaml_event_t) (string, error) { - var parsedTime time.Time - matches := ymd_regexp.FindStringSubmatch(val) - if len(matches) > 0 { - year, _ := strconv.Atoi(matches[1]) - month, _ := strconv.Atoi(matches[2]) - day, _ := strconv.Atoi(matches[3]) - parsedTime = time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) - } else { - matches = timestamp_regexp.FindStringSubmatch(val) - if len(matches) == 0 { - return "", fmt.Errorf("Invalid timestap: '%s' at %s", val, event.start_mark) - } - - year, _ := strconv.Atoi(matches[1]) - month, _ := strconv.Atoi(matches[2]) - day, _ := strconv.Atoi(matches[3]) - hour, _ := strconv.Atoi(matches[4]) - min, _ := strconv.Atoi(matches[5]) - sec, _ := strconv.Atoi(matches[6]) - - nsec := 0 - if matches[7] != "" { - millis, _ := strconv.Atoi(matches[7]) - nsec = int(time.Duration(millis) * time.Millisecond) - } - - loc := time.UTC - if matches[8] != "" { - sign := matches[8][0] - hr, _ := strconv.Atoi(matches[8][1:]) - min := 0 - if matches[9] != "" { - min, _ = strconv.Atoi(matches[9]) - } - - zoneOffset := (hr*60 + min) * 60 - if sign == '-' { - zoneOffset = -zoneOffset - } - - loc = time.FixedZone("", zoneOffset) - } - parsedTime = time.Date(year, time.Month(month), day, hour, min, sec, nsec, loc) - } - - v.Set(reflect.ValueOf(parsedTime)) - return "", nil -} - -func resolveInterface(event yaml_event_t, useNumber bool) (string, interface{}) { - val := string(event.value) - if len(event.tag) == 0 && !event.implicit { - return "", val - } - - if len(val) == 0 { - return yaml_NULL_TAG, nil - } - - var result interface{} - - sign := false - c := val[0] - switch { - case bytes.IndexByte(signs, c) != -1: - sign = true - fallthrough - case c >= '0' && c <= '9': - i := int64(0) - result = &i - if useNumber { - var n Number - result = &n - } - - v := reflect.ValueOf(result).Elem() - if _, err := resolve_int(val, v, useNumber, event); err == nil { - return yaml_INT_TAG, v.Interface() - } - - f := float64(0) - result = &f - if useNumber { - var n Number - result = &n - } - - v = reflect.ValueOf(result).Elem() - if _, err := resolve_float(val, v, useNumber, event); err == nil { - return yaml_FLOAT_TAG, v.Interface() - } - - if !sign { - t := time.Time{} - if _, err := resolve_time(val, reflect.ValueOf(&t).Elem(), event); err == nil { - return "", t - } - } - case bytes.IndexByte(nulls, c) != -1: - if null_values[val] { - return yaml_NULL_TAG, nil - } - b := false - if _, err := resolve_bool(val, reflect.ValueOf(&b).Elem(), event); err == nil { - return yaml_BOOL_TAG, b - } - case c == '.': - f := float64(0) - result = &f - if useNumber { - var n Number - result = &n - } - - v := reflect.ValueOf(result).Elem() - if _, err := resolve_float(val, v, useNumber, event); err == nil { - return yaml_FLOAT_TAG, v.Interface() - } - case bytes.IndexByte(bools, c) != -1: - b := false - if _, err := resolve_bool(val, reflect.ValueOf(&b).Elem(), event); err == nil { - return yaml_BOOL_TAG, b - } - } - - if hasBinaryTag(event) { - bytes, err := decode_binary(event.value, event) - if err == nil { - return yaml_BINARY_TAG, bytes - } - } - - return yaml_STR_TAG, val -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/resolver_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/resolver_test.go deleted file mode 100644 index 88e61fd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/resolver_test.go +++ /dev/null @@ -1,665 +0,0 @@ -/* -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 candiedyaml - -import ( - "math" - "reflect" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Resolver", func() { - var event yaml_event_t - - var nulls = []string{"~", "null", "Null", "NULL"} - - BeforeEach(func() { - event = yaml_event_t{} - }) - - Context("Resolve", func() { - Context("Implicit events", func() { - checkNulls := func(f func()) { - for _, null := range nulls { - event = yaml_event_t{implicit: true} - event.value = []byte(null) - f() - } - } - - BeforeEach(func() { - event.implicit = true - }) - - Context("String", func() { - It("resolves a string", func() { - aString := "" - v := reflect.ValueOf(&aString) - event.value = []byte("abc") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_STR_TAG)) - Expect(aString).To(Equal("abc")) - }) - - It("resolves the empty string", func() { - aString := "abc" - v := reflect.ValueOf(&aString) - event.value = []byte("") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_STR_TAG)) - Expect(aString).To(Equal("")) - - }) - - It("resolves null", func() { - checkNulls(func() { - aString := "abc" - v := reflect.ValueOf(&aString) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(aString).To(Equal("")) - }) - }) - - It("resolves null pointers", func() { - checkNulls(func() { - aString := "abc" - pString := &aString - v := reflect.ValueOf(&pString) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(pString).To(BeNil()) - }) - }) - - }) - - Context("Booleans", func() { - match_bool := func(val string, expected bool) { - b := !expected - - v := reflect.ValueOf(&b) - event.value = []byte(val) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_BOOL_TAG)) - Expect(b).To(Equal(expected)) - } - - It("resolves on", func() { - match_bool("on", true) - match_bool("ON", true) - }) - - It("resolves off", func() { - match_bool("off", false) - match_bool("OFF", false) - }) - - It("resolves true", func() { - match_bool("true", true) - match_bool("TRUE", true) - }) - - It("resolves false", func() { - match_bool("false", false) - match_bool("FALSE", false) - }) - - It("resolves yes", func() { - match_bool("yes", true) - match_bool("YES", true) - }) - - It("resolves no", func() { - match_bool("no", false) - match_bool("NO", false) - }) - - It("reports an error otherwise", func() { - b := true - v := reflect.ValueOf(&b) - event.value = []byte("fail") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Invalid boolean: 'fail' at line 0, column 0")) - }) - - It("resolves null", func() { - checkNulls(func() { - b := true - v := reflect.ValueOf(&b) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(b).To(BeFalse()) - }) - }) - - It("resolves null pointers", func() { - checkNulls(func() { - b := true - pb := &b - v := reflect.ValueOf(&pb) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(pb).To(BeNil()) - }) - }) - }) - - Context("Ints", func() { - It("simple ints", func() { - i := 0 - v := reflect.ValueOf(&i) - event.value = []byte("1234") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(1234)) - }) - - It("positive ints", func() { - i := int16(0) - v := reflect.ValueOf(&i) - event.value = []byte("+678") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(int16(678))) - }) - - It("negative ints", func() { - i := int32(0) - v := reflect.ValueOf(&i) - event.value = []byte("-2345") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(int32(-2345))) - }) - - It("base 8", func() { - i := 0 - v := reflect.ValueOf(&i) - event.value = []byte("0o12") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(10)) - }) - - It("base 16", func() { - i := 0 - v := reflect.ValueOf(&i) - event.value = []byte("0xff") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(255)) - }) - - It("fails on overflow", func() { - i := int8(0) - v := reflect.ValueOf(&i) - event.value = []byte("2345") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Invalid integer: '2345' at line 0, column 0")) - }) - - It("fails on invalid int", func() { - i := 0 - v := reflect.ValueOf(&i) - event.value = []byte("234f") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Invalid integer: '234f' at line 0, column 0")) - }) - - It("resolves null", func() { - checkNulls(func() { - i := 1 - v := reflect.ValueOf(&i) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(i).To(Equal(0)) - }) - }) - - It("resolves null pointers", func() { - checkNulls(func() { - i := 1 - pi := &i - v := reflect.ValueOf(&pi) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(pi).To(BeNil()) - }) - }) - - It("returns a Number", func() { - var i Number - v := reflect.ValueOf(&i) - - tag, err := resolve_int("12345", v.Elem(), true, event) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(Number("12345"))) - Expect(i.Int64()).To(Equal(int64(12345))) - - event.value = []byte("1234") - tag, err = resolve(event, v.Elem(), true) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(Number("1234"))) - }) - }) - - Context("UInts", func() { - It("resolves simple uints", func() { - i := uint(0) - v := reflect.ValueOf(&i) - event.value = []byte("1234") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(uint(1234))) - }) - - It("resolves positive uints", func() { - i := uint16(0) - v := reflect.ValueOf(&i) - event.value = []byte("+678") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(uint16(678))) - }) - - It("base 8", func() { - i := uint(0) - v := reflect.ValueOf(&i) - event.value = []byte("0o12") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(uint(10))) - }) - - It("base 16", func() { - i := uint(0) - v := reflect.ValueOf(&i) - event.value = []byte("0xff") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(uint(255))) - }) - - It("fails with negative ints", func() { - i := uint(0) - v := reflect.ValueOf(&i) - event.value = []byte("-2345") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Unsigned int with negative value: '-2345' at line 0, column 0")) - }) - - It("fails on overflow", func() { - i := uint8(0) - v := reflect.ValueOf(&i) - event.value = []byte("2345") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Invalid unsigned integer: '2345' at line 0, column 0")) - }) - - It("resolves null", func() { - checkNulls(func() { - i := uint(1) - v := reflect.ValueOf(&i) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(i).To(Equal(uint(0))) - }) - }) - - It("resolves null pointers", func() { - checkNulls(func() { - i := uint(1) - pi := &i - v := reflect.ValueOf(&pi) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(pi).To(BeNil()) - }) - }) - - It("returns a Number", func() { - var i Number - v := reflect.ValueOf(&i) - - tag, err := resolve_uint("12345", v.Elem(), true, event) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(Number("12345"))) - - event.value = []byte("1234") - tag, err = resolve(event, v.Elem(), true) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_INT_TAG)) - Expect(i).To(Equal(Number("1234"))) - }) - }) - - Context("Floats", func() { - It("float32", func() { - f := float32(0) - v := reflect.ValueOf(&f) - event.value = []byte("2345.01") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(f).To(Equal(float32(2345.01))) - }) - - It("float64", func() { - f := float64(0) - v := reflect.ValueOf(&f) - event.value = []byte("-456456.01") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(f).To(Equal(float64(-456456.01))) - }) - - It("+inf", func() { - f := float64(0) - v := reflect.ValueOf(&f) - event.value = []byte("+.inf") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(f).To(Equal(math.Inf(1))) - }) - - It("-inf", func() { - f := float32(0) - v := reflect.ValueOf(&f) - event.value = []byte("-.inf") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(f).To(Equal(float32(math.Inf(-1)))) - }) - - It("nan", func() { - f := float64(0) - v := reflect.ValueOf(&f) - event.value = []byte(".NaN") - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(math.IsNaN(f)).To(BeTrue()) - }) - - It("fails on overflow", func() { - i := float32(0) - v := reflect.ValueOf(&i) - event.value = []byte("123e10000") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Invalid float: '123e10000' at line 0, column 0")) - }) - - It("fails on invalid float", func() { - i := float32(0) - v := reflect.ValueOf(&i) - event.value = []byte("123e1a") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Invalid float: '123e1a' at line 0, column 0")) - }) - - It("resolves null", func() { - checkNulls(func() { - f := float64(1) - v := reflect.ValueOf(&f) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(f).To(Equal(0.0)) - }) - }) - - It("resolves null pointers", func() { - checkNulls(func() { - f := float64(1) - pf := &f - v := reflect.ValueOf(&pf) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(pf).To(BeNil()) - }) - }) - - It("returns a Number", func() { - var i Number - v := reflect.ValueOf(&i) - - tag, err := resolve_float("12.345", v.Elem(), true, event) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(i).To(Equal(Number("12.345"))) - Expect(i.Float64()).To(Equal(12.345)) - - event.value = []byte("1.234") - tag, err = resolve(event, v.Elem(), true) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_FLOAT_TAG)) - Expect(i).To(Equal(Number("1.234"))) - }) - }) - - Context("Timestamps", func() { - parse_date := func(val string, date time.Time) { - d := time.Now() - v := reflect.ValueOf(&d) - event.value = []byte(val) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal("")) - Expect(d).To(Equal(date)) - } - - It("date", func() { - parse_date("2002-12-14", time.Date(2002, time.December, 14, 0, 0, 0, 0, time.UTC)) - }) - - It("canonical", func() { - parse_date("2001-12-15T02:59:43.1Z", time.Date(2001, time.December, 15, 2, 59, 43, int(1*time.Millisecond), time.UTC)) - }) - - It("iso8601", func() { - parse_date("2001-12-14t21:59:43.10-05:00", time.Date(2001, time.December, 14, 21, 59, 43, int(10*time.Millisecond), time.FixedZone("", -5*3600))) - }) - - It("space separated", func() { - parse_date("2001-12-14 21:59:43.10 -5", time.Date(2001, time.December, 14, 21, 59, 43, int(10*time.Millisecond), time.FixedZone("", -5*3600))) - }) - - It("no time zone", func() { - parse_date("2001-12-15 2:59:43.10", time.Date(2001, time.December, 15, 2, 59, 43, int(10*time.Millisecond), time.UTC)) - }) - - It("resolves null", func() { - checkNulls(func() { - d := time.Now() - v := reflect.ValueOf(&d) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(d).To(Equal(time.Time{})) - }) - }) - - It("resolves null pointers", func() { - checkNulls(func() { - d := time.Now() - pd := &d - v := reflect.ValueOf(&pd) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_NULL_TAG)) - Expect(pd).To(BeNil()) - }) - }) - }) - - Context("Binary tag", func() { - It("string", func() { - checkNulls(func() { - event.value = []byte("YWJjZGVmZw==") - event.tag = []byte("!binary") - aString := "" - v := reflect.ValueOf(&aString) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_STR_TAG)) - Expect(aString).To(Equal("abcdefg")) - }) - }) - - It("[]byte", func() { - checkNulls(func() { - event.value = []byte("YWJjZGVmZw==") - event.tag = []byte("!binary") - bytes := []byte(nil) - v := reflect.ValueOf(&bytes) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_STR_TAG)) - Expect(bytes).To(Equal([]byte("abcdefg"))) - }) - }) - - It("returns a []byte when provided no hints", func() { - checkNulls(func() { - event.value = []byte("YWJjZGVmZw==") - event.tag = []byte("!binary") - var intf interface{} - v := reflect.ValueOf(&intf) - - tag, err := resolve(event, v.Elem(), false) - Expect(err).NotTo(HaveOccurred()) - Expect(tag).To(Equal(yaml_STR_TAG)) - Expect(intf).To(Equal([]byte("abcdefg"))) - }) - }) - }) - - It("fails to resolve a pointer", func() { - aString := "" - pString := &aString - v := reflect.ValueOf(&pString) - event.value = []byte("abc") - - _, err := resolve(event, v.Elem(), false) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Unknown resolution for 'abc' using <*string Value> at line 0, column 0")) - }) - }) - - Context("Not an implicit event && no tag", func() { - It("bool returns a string", func() { - event.value = []byte("on") - - tag, result := resolveInterface(event, false) - Expect(result).To(Equal("on")) - Expect(tag).To(Equal("")) - }) - - It("number returns a string", func() { - event.value = []byte("1234") - - tag, result := resolveInterface(event, false) - Expect(result).To(Equal("1234")) - Expect(tag).To(Equal("")) - }) - - It("returns the empty string", func() { - event.value = []byte("") - // event.implicit = true - - tag, result := resolveInterface(event, false) - Expect(result).To(Equal("")) - Expect(tag).To(Equal("")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/run_parser.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/run_parser.go deleted file mode 100644 index 25c2981..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/run_parser.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -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 candiedyaml - -import ( - "fmt" - "os" -) - -func Run_parser(cmd string, args []string) { - for i := 0; i < len(args); i++ { - fmt.Printf("[%d] Scanning '%s'", i, args[i]) - file, err := os.Open(args[i]) - if err != nil { - panic(fmt.Sprintf("Invalid file '%s': %s", args[i], err.Error())) - } - - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_reader(&parser, file) - - failed := false - token := yaml_token_t{} - count := 0 - for { - if !yaml_parser_scan(&parser, &token) { - failed = true - break - } - - if token.token_type == yaml_STREAM_END_TOKEN { - break - } - count++ - } - - file.Close() - - msg := "SUCCESS" - if failed { - msg = "FAILED" - if parser.error != yaml_NO_ERROR { - m := parser.problem_mark - fmt.Printf("ERROR: (%s) %s @ line: %d col: %d\n", - parser.context, parser.problem, m.line, m.column) - } - } - fmt.Printf("%s (%d tokens)\n", msg, count) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/scanner.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/scanner.go deleted file mode 100644 index f856a56..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/scanner.go +++ /dev/null @@ -1,3318 +0,0 @@ -/* -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 candiedyaml - -import ( - "bytes" -) - -/* - * Introduction - * ************ - * - * The following notes assume that you are familiar with the YAML specification - * (http://yaml.org/spec/cvs/current.html). We mostly follow it, although in - * some cases we are less restrictive that it requires. - * - * The process of transforming a YAML stream into a sequence of events is - * divided on two steps: Scanning and Parsing. - * - * The Scanner transforms the input stream into a sequence of tokens, while the - * parser transform the sequence of tokens produced by the Scanner into a - * sequence of parsing events. - * - * The Scanner is rather clever and complicated. The Parser, on the contrary, - * is a straightforward implementation of a recursive-descendant parser (or, - * LL(1) parser, as it is usually called). - * - * Actually there are two issues of Scanning that might be called "clever", the - * rest is quite straightforward. The issues are "block collection start" and - * "simple keys". Both issues are explained below in details. - * - * Here the Scanning step is explained and implemented. We start with the list - * of all the tokens produced by the Scanner together with short descriptions. - * - * Now, tokens: - * - * STREAM-START(encoding) # The stream start. - * STREAM-END # The stream end. - * VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. - * TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. - * DOCUMENT-START # '---' - * DOCUMENT-END # '...' - * BLOCK-SEQUENCE-START # Indentation increase denoting a block - * BLOCK-MAPPING-START # sequence or a block mapping. - * BLOCK-END # Indentation decrease. - * FLOW-SEQUENCE-START # '[' - * FLOW-SEQUENCE-END # ']' - * BLOCK-SEQUENCE-START # '{' - * BLOCK-SEQUENCE-END # '}' - * BLOCK-ENTRY # '-' - * FLOW-ENTRY # ',' - * KEY # '?' or nothing (simple keys). - * VALUE # ':' - * ALIAS(anchor) # '*anchor' - * ANCHOR(anchor) # '&anchor' - * TAG(handle,suffix) # '!handle!suffix' - * SCALAR(value,style) # A scalar. - * - * The following two tokens are "virtual" tokens denoting the beginning and the - * end of the stream: - * - * STREAM-START(encoding) - * STREAM-END - * - * We pass the information about the input stream encoding with the - * STREAM-START token. - * - * The next two tokens are responsible for tags: - * - * VERSION-DIRECTIVE(major,minor) - * TAG-DIRECTIVE(handle,prefix) - * - * Example: - * - * %YAML 1.1 - * %TAG ! !foo - * %TAG !yaml! tag:yaml.org,2002: - * --- - * - * The correspoding sequence of tokens: - * - * STREAM-START(utf-8) - * VERSION-DIRECTIVE(1,1) - * TAG-DIRECTIVE("!","!foo") - * TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") - * DOCUMENT-START - * STREAM-END - * - * Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole - * line. - * - * The document start and end indicators are represented by: - * - * DOCUMENT-START - * DOCUMENT-END - * - * Note that if a YAML stream contains an implicit document (without '---' - * and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be - * produced. - * - * In the following examples, we present whole documents together with the - * produced tokens. - * - * 1. An implicit document: - * - * 'a scalar' - * - * Tokens: - * - * STREAM-START(utf-8) - * SCALAR("a scalar",single-quoted) - * STREAM-END - * - * 2. An explicit document: - * - * --- - * 'a scalar' - * ... - * - * Tokens: - * - * STREAM-START(utf-8) - * DOCUMENT-START - * SCALAR("a scalar",single-quoted) - * DOCUMENT-END - * STREAM-END - * - * 3. Several documents in a stream: - * - * 'a scalar' - * --- - * 'another scalar' - * --- - * 'yet another scalar' - * - * Tokens: - * - * STREAM-START(utf-8) - * SCALAR("a scalar",single-quoted) - * DOCUMENT-START - * SCALAR("another scalar",single-quoted) - * DOCUMENT-START - * SCALAR("yet another scalar",single-quoted) - * STREAM-END - * - * We have already introduced the SCALAR token above. The following tokens are - * used to describe aliases, anchors, tag, and scalars: - * - * ALIAS(anchor) - * ANCHOR(anchor) - * TAG(handle,suffix) - * SCALAR(value,style) - * - * The following series of examples illustrate the usage of these tokens: - * - * 1. A recursive sequence: - * - * &A [ *A ] - * - * Tokens: - * - * STREAM-START(utf-8) - * ANCHOR("A") - * FLOW-SEQUENCE-START - * ALIAS("A") - * FLOW-SEQUENCE-END - * STREAM-END - * - * 2. A tagged scalar: - * - * !!float "3.14" # A good approximation. - * - * Tokens: - * - * STREAM-START(utf-8) - * TAG("!!","float") - * SCALAR("3.14",double-quoted) - * STREAM-END - * - * 3. Various scalar styles: - * - * --- # Implicit empty plain scalars do not produce tokens. - * --- a plain scalar - * --- 'a single-quoted scalar' - * --- "a double-quoted scalar" - * --- |- - * a literal scalar - * --- >- - * a folded - * scalar - * - * Tokens: - * - * STREAM-START(utf-8) - * DOCUMENT-START - * DOCUMENT-START - * SCALAR("a plain scalar",plain) - * DOCUMENT-START - * SCALAR("a single-quoted scalar",single-quoted) - * DOCUMENT-START - * SCALAR("a double-quoted scalar",double-quoted) - * DOCUMENT-START - * SCALAR("a literal scalar",literal) - * DOCUMENT-START - * SCALAR("a folded scalar",folded) - * STREAM-END - * - * Now it's time to review collection-related tokens. We will start with - * flow collections: - * - * FLOW-SEQUENCE-START - * FLOW-SEQUENCE-END - * FLOW-MAPPING-START - * FLOW-MAPPING-END - * FLOW-ENTRY - * KEY - * VALUE - * - * The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and - * FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' - * correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the - * indicators '?' and ':', which are used for denoting mapping keys and values, - * are represented by the KEY and VALUE tokens. - * - * The following examples show flow collections: - * - * 1. A flow sequence: - * - * [item 1, item 2, item 3] - * - * Tokens: - * - * STREAM-START(utf-8) - * FLOW-SEQUENCE-START - * SCALAR("item 1",plain) - * FLOW-ENTRY - * SCALAR("item 2",plain) - * FLOW-ENTRY - * SCALAR("item 3",plain) - * FLOW-SEQUENCE-END - * STREAM-END - * - * 2. A flow mapping: - * - * { - * a simple key: a value, # Note that the KEY token is produced. - * ? a complex key: another value, - * } - * - * Tokens: - * - * STREAM-START(utf-8) - * FLOW-MAPPING-START - * KEY - * SCALAR("a simple key",plain) - * VALUE - * SCALAR("a value",plain) - * FLOW-ENTRY - * KEY - * SCALAR("a complex key",plain) - * VALUE - * SCALAR("another value",plain) - * FLOW-ENTRY - * FLOW-MAPPING-END - * STREAM-END - * - * A simple key is a key which is not denoted by the '?' indicator. Note that - * the Scanner still produce the KEY token whenever it encounters a simple key. - * - * For scanning block collections, the following tokens are used (note that we - * repeat KEY and VALUE here): - * - * BLOCK-SEQUENCE-START - * BLOCK-MAPPING-START - * BLOCK-END - * BLOCK-ENTRY - * KEY - * VALUE - * - * The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation - * increase that precedes a block collection (cf. the INDENT token in Python). - * The token BLOCK-END denote indentation decrease that ends a block collection - * (cf. the DEDENT token in Python). However YAML has some syntax pecularities - * that makes detections of these tokens more complex. - * - * The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators - * '-', '?', and ':' correspondingly. - * - * The following examples show how the tokens BLOCK-SEQUENCE-START, - * BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: - * - * 1. Block sequences: - * - * - item 1 - * - item 2 - * - - * - item 3.1 - * - item 3.2 - * - - * key 1: value 1 - * key 2: value 2 - * - * Tokens: - * - * STREAM-START(utf-8) - * BLOCK-SEQUENCE-START - * BLOCK-ENTRY - * SCALAR("item 1",plain) - * BLOCK-ENTRY - * SCALAR("item 2",plain) - * BLOCK-ENTRY - * BLOCK-SEQUENCE-START - * BLOCK-ENTRY - * SCALAR("item 3.1",plain) - * BLOCK-ENTRY - * SCALAR("item 3.2",plain) - * BLOCK-END - * BLOCK-ENTRY - * BLOCK-MAPPING-START - * KEY - * SCALAR("key 1",plain) - * VALUE - * SCALAR("value 1",plain) - * KEY - * SCALAR("key 2",plain) - * VALUE - * SCALAR("value 2",plain) - * BLOCK-END - * BLOCK-END - * STREAM-END - * - * 2. Block mappings: - * - * a simple key: a value # The KEY token is produced here. - * ? a complex key - * : another value - * a mapping: - * key 1: value 1 - * key 2: value 2 - * a sequence: - * - item 1 - * - item 2 - * - * Tokens: - * - * STREAM-START(utf-8) - * BLOCK-MAPPING-START - * KEY - * SCALAR("a simple key",plain) - * VALUE - * SCALAR("a value",plain) - * KEY - * SCALAR("a complex key",plain) - * VALUE - * SCALAR("another value",plain) - * KEY - * SCALAR("a mapping",plain) - * BLOCK-MAPPING-START - * KEY - * SCALAR("key 1",plain) - * VALUE - * SCALAR("value 1",plain) - * KEY - * SCALAR("key 2",plain) - * VALUE - * SCALAR("value 2",plain) - * BLOCK-END - * KEY - * SCALAR("a sequence",plain) - * VALUE - * BLOCK-SEQUENCE-START - * BLOCK-ENTRY - * SCALAR("item 1",plain) - * BLOCK-ENTRY - * SCALAR("item 2",plain) - * BLOCK-END - * BLOCK-END - * STREAM-END - * - * YAML does not always require to start a new block collection from a new - * line. If the current line contains only '-', '?', and ':' indicators, a new - * block collection may start at the current line. The following examples - * illustrate this case: - * - * 1. Collections in a sequence: - * - * - - item 1 - * - item 2 - * - key 1: value 1 - * key 2: value 2 - * - ? complex key - * : complex value - * - * Tokens: - * - * STREAM-START(utf-8) - * BLOCK-SEQUENCE-START - * BLOCK-ENTRY - * BLOCK-SEQUENCE-START - * BLOCK-ENTRY - * SCALAR("item 1",plain) - * BLOCK-ENTRY - * SCALAR("item 2",plain) - * BLOCK-END - * BLOCK-ENTRY - * BLOCK-MAPPING-START - * KEY - * SCALAR("key 1",plain) - * VALUE - * SCALAR("value 1",plain) - * KEY - * SCALAR("key 2",plain) - * VALUE - * SCALAR("value 2",plain) - * BLOCK-END - * BLOCK-ENTRY - * BLOCK-MAPPING-START - * KEY - * SCALAR("complex key") - * VALUE - * SCALAR("complex value") - * BLOCK-END - * BLOCK-END - * STREAM-END - * - * 2. Collections in a mapping: - * - * ? a sequence - * : - item 1 - * - item 2 - * ? a mapping - * : key 1: value 1 - * key 2: value 2 - * - * Tokens: - * - * STREAM-START(utf-8) - * BLOCK-MAPPING-START - * KEY - * SCALAR("a sequence",plain) - * VALUE - * BLOCK-SEQUENCE-START - * BLOCK-ENTRY - * SCALAR("item 1",plain) - * BLOCK-ENTRY - * SCALAR("item 2",plain) - * BLOCK-END - * KEY - * SCALAR("a mapping",plain) - * VALUE - * BLOCK-MAPPING-START - * KEY - * SCALAR("key 1",plain) - * VALUE - * SCALAR("value 1",plain) - * KEY - * SCALAR("key 2",plain) - * VALUE - * SCALAR("value 2",plain) - * BLOCK-END - * BLOCK-END - * STREAM-END - * - * YAML also permits non-indented sequences if they are included into a block - * mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: - * - * key: - * - item 1 # BLOCK-SEQUENCE-START is NOT produced here. - * - item 2 - * - * Tokens: - * - * STREAM-START(utf-8) - * BLOCK-MAPPING-START - * KEY - * SCALAR("key",plain) - * VALUE - * BLOCK-ENTRY - * SCALAR("item 1",plain) - * BLOCK-ENTRY - * SCALAR("item 2",plain) - * BLOCK-END - */ - -/* - * Ensure that the buffer contains the required number of characters. - * Return 1 on success, 0 on failure (reader error or memory error). - */ -func cache(parser *yaml_parser_t, length int) bool { - if parser.unread >= length { - return true - } - - return yaml_parser_update_buffer(parser, length) -} - -/* - * Advance the buffer pointer. - */ -func skip(parser *yaml_parser_t) { - parser.mark.index++ - parser.mark.column++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) -} - -func skip_line(parser *yaml_parser_t) { - if is_crlf_at(parser.buffer, parser.buffer_pos) { - parser.mark.index += 2 - parser.mark.column = 0 - parser.mark.line++ - parser.unread -= 2 - parser.buffer_pos += 2 - } else if is_break_at(parser.buffer, parser.buffer_pos) { - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) - } -} - -/* - * Copy a character to a string buffer and advance pointers. - */ - -func read(parser *yaml_parser_t, s []byte) []byte { - w := width(parser.buffer[parser.buffer_pos]) - if w == 0 { - panic("invalid character sequence") - } - if len(s) == 0 { - s = make([]byte, 0, 32) - } - if w == 1 && len(s)+w <= cap(s) { - s = s[:len(s)+1] - s[len(s)-1] = parser.buffer[parser.buffer_pos] - parser.buffer_pos++ - } else { - s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) - parser.buffer_pos += w - } - parser.mark.index++ - parser.mark.column++ - parser.unread-- - return s -} - -/* - * Copy a line break character to a string buffer and advance pointers. - */ -func read_line(parser *yaml_parser_t, s []byte) []byte { - buf := parser.buffer - pos := parser.buffer_pos - if buf[pos] == '\r' && buf[pos+1] == '\n' { - /* CR LF . LF */ - s = append(s, '\n') - parser.buffer_pos += 2 - parser.mark.index++ - parser.unread-- - } else if buf[pos] == '\r' || buf[pos] == '\n' { - /* CR|LF . LF */ - s = append(s, '\n') - parser.buffer_pos += 1 - } else if buf[pos] == '\xC2' && buf[pos+1] == '\x85' { - /* NEL . LF */ - s = append(s, '\n') - parser.buffer_pos += 2 - } else if buf[pos] == '\xE2' && buf[pos+1] == '\x80' && - (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9') { - // LS|PS . LS|PS - s = append(s, buf[parser.buffer_pos:pos+3]...) - parser.buffer_pos += 3 - } else { - return s - } - - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - return s -} - -/* - * Get the next token. - */ - -func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { - /* Erase the token object. */ - *token = yaml_token_t{} - - /* No tokens after STREAM-END or error. */ - - if parser.stream_end_produced || parser.error != yaml_NO_ERROR { - return true - } - - /* Ensure that the tokens queue contains enough tokens. */ - - if !parser.token_available { - if !yaml_parser_fetch_more_tokens(parser) { - return false - } - } - - /* Fetch the next token from the queue. */ - - *token = parser.tokens[parser.tokens_head] - parser.tokens_head++ - parser.token_available = false - parser.tokens_parsed++ - - if token.token_type == yaml_STREAM_END_TOKEN { - parser.stream_end_produced = true - } - - return true -} - -/* - * Set the scanner error and return 0. - */ - -func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, - context_mark YAML_mark_t, problem string) bool { - parser.error = yaml_SCANNER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = parser.mark - - return false -} - -func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark YAML_mark_t, problem string) bool { - context := "while parsing a %TAG directive" - if directive { - context = "while parsing a tag" - } - return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet") -} - -/* - * Ensure that the tokens queue contains at least one token which can be - * returned to the Parser. - */ - -func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { - /* While we need more tokens to fetch, do it. */ - - for { - /* - * Check if we really need to fetch more tokens. - */ - - need_more_tokens := false - - if parser.tokens_head == len(parser.tokens) { - /* Queue is empty. */ - - need_more_tokens = true - } else { - - /* Check if any potential simple key may occupy the head position. */ - - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - for i := range parser.simple_keys { - simple_key := &parser.simple_keys[i] - - if simple_key.possible && - simple_key.token_number == parser.tokens_parsed { - need_more_tokens = true - break - } - } - } - if len(parser.simple_keys) > 0 { - - } - /* We are finished. */ - - if !need_more_tokens { - break - } - - /* Fetch the next token. */ - - if !yaml_parser_fetch_next_token(parser) { - return false - } - - } - - parser.token_available = true - - return true -} - -/* - * The dispatcher for token fetchers. - */ - -func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { - /* Ensure that the buffer is initialized. */ - - if !cache(parser, 1) { - return false - } - - /* Check if we just started scanning. Fetch STREAM-START then. */ - - if !parser.stream_start_produced { - return yaml_parser_fetch_stream_start(parser) - } - - /* Eat whitespaces and comments until we reach the next token. */ - - if !yaml_parser_scan_to_next_token(parser) { - return false - } - - /* Remove obsolete potential simple keys. */ - - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - /* Check the indentation level against the current column. */ - - if !yaml_parser_unroll_indent(parser, parser.mark.column) { - return false - } - - /* - * Ensure that the buffer contains at least 4 characters. 4 is the length - * of the longest indicators ('--- ' and '... '). - */ - - if !cache(parser, 4) { - return false - } - - /* Is it the end of the stream? */ - buf := parser.buffer - pos := parser.buffer_pos - - if is_z(buf[pos]) { - return yaml_parser_fetch_stream_end(parser) - } - - /* Is it a directive? */ - - if parser.mark.column == 0 && buf[pos] == '%' { - return yaml_parser_fetch_directive(parser) - } - - /* Is it the document start indicator? */ - - if parser.mark.column == 0 && - buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && - is_blankz_at(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, - yaml_DOCUMENT_START_TOKEN) - } - - /* Is it the document end indicator? */ - - if parser.mark.column == 0 && - buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && - is_blankz_at(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, - yaml_DOCUMENT_END_TOKEN) - } - - /* Is it the flow sequence start indicator? */ - - if buf[pos] == '[' { - return yaml_parser_fetch_flow_collection_start(parser, - yaml_FLOW_SEQUENCE_START_TOKEN) - } - - /* Is it the flow mapping start indicator? */ - - if buf[pos] == '{' { - return yaml_parser_fetch_flow_collection_start(parser, - yaml_FLOW_MAPPING_START_TOKEN) - } - - /* Is it the flow sequence end indicator? */ - - if buf[pos] == ']' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_SEQUENCE_END_TOKEN) - } - - /* Is it the flow mapping end indicator? */ - - if buf[pos] == '}' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_MAPPING_END_TOKEN) - } - - /* Is it the flow entry indicator? */ - - if buf[pos] == ',' { - return yaml_parser_fetch_flow_entry(parser) - } - - /* Is it the block entry indicator? */ - if buf[pos] == '-' && is_blankz_at(buf, pos+1) { - return yaml_parser_fetch_block_entry(parser) - } - - /* Is it the key indicator? */ - if buf[pos] == '?' && - (parser.flow_level > 0 || is_blankz_at(buf, pos+1)) { - return yaml_parser_fetch_key(parser) - } - - /* Is it the value indicator? */ - if buf[pos] == ':' && - (parser.flow_level > 0 || is_blankz_at(buf, pos+1)) { - return yaml_parser_fetch_value(parser) - } - - /* Is it an alias? */ - if buf[pos] == '*' { - return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) - } - - /* Is it an anchor? */ - - if buf[pos] == '&' { - return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) - } - - /* Is it a tag? */ - - if buf[pos] == '!' { - return yaml_parser_fetch_tag(parser) - } - - /* Is it a literal scalar? */ - if buf[pos] == '|' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, true) - } - - /* Is it a folded scalar? */ - if buf[pos] == '>' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, false) - } - - /* Is it a single-quoted scalar? */ - - if buf[pos] == '\'' { - return yaml_parser_fetch_flow_scalar(parser, true) - } - - /* Is it a double-quoted scalar? */ - if buf[pos] == '"' { - return yaml_parser_fetch_flow_scalar(parser, false) - } - - /* - * Is it a plain scalar? - * - * A plain scalar may start with any non-blank characters except - * - * '-', '?', ':', ',', '[', ']', '{', '}', - * '#', '&', '*', '!', '|', '>', '\'', '\"', - * '%', '@', '`'. - * - * In the block context (and, for the '-' indicator, in the flow context - * too), it may also start with the characters - * - * '-', '?', ':' - * - * if it is followed by a non-space character. - * - * The last rule is more restrictive than the specification requires. - */ - - b := buf[pos] - if !(is_blankz_at(buf, pos) || b == '-' || - b == '?' || b == ':' || - b == ',' || b == '[' || - b == ']' || b == '{' || - b == '}' || b == '#' || - b == '&' || b == '*' || - b == '!' || b == '|' || - b == '>' || b == '\'' || - b == '"' || b == '%' || - b == '@' || b == '`') || - (b == '-' && !is_blank(buf[pos+1])) || - (parser.flow_level == 0 && - (buf[pos] == '?' || buf[pos+1] == ':') && - !is_blank(buf[pos+1])) { - return yaml_parser_fetch_plain_scalar(parser) - } - - /* - * If we don't determine the token type so far, it is an error. - */ - - return yaml_parser_set_scanner_error(parser, - "while scanning for the next token", parser.mark, - "found character that cannot start any token") -} - -/* - * Check the list of potential simple keys and remove the positions that - * cannot contain simple keys anymore. - */ - -func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { - /* Check for a potential simple key for each flow level. */ - - for i := range parser.simple_keys { - /* - * The specification requires that a simple key - * - * - is limited to a single line, - * - is shorter than 1024 characters. - */ - - simple_key := &parser.simple_keys[i] - if simple_key.possible && - (simple_key.mark.line < parser.mark.line || - simple_key.mark.index+1024 < parser.mark.index) { - - /* Check if the potential simple key to be removed is required. */ - - if simple_key.required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", simple_key.mark, - "could not find expected ':'") - } - - simple_key.possible = false - } - } - - return true -} - -/* - * Check if a simple key may start at the current position and add it if - * needed. - */ - -func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { - /* - * A simple key is required at the current position if the scanner is in - * the block context and the current column coincides with the indentation - * level. - */ - - required := (parser.flow_level == 0 && - parser.indent == parser.mark.column) - - /* - * A simple key is required only when it is the first token in the current - * line. Therefore it is always allowed. But we add a check anyway. - */ - if required && !parser.simple_key_allowed { - panic("impossible") /* Impossible. */ - } - - /* - * If the current position may start a simple key, save it. - */ - - if parser.simple_key_allowed { - simple_key := yaml_simple_key_t{ - possible: true, - required: required, - token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), - } - simple_key.mark = parser.mark - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_keys[len(parser.simple_keys)-1] = simple_key - } - - return true -} - -/* - * Remove a potential simple key at the current flow level. - */ - -func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { - simple_key := &parser.simple_keys[len(parser.simple_keys)-1] - - if simple_key.possible { - /* If the key is required, it is an error. */ - - if simple_key.required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", simple_key.mark, - "could not find expected ':'") - } - } - - /* Remove the key from the stack. */ - - simple_key.possible = false - - return true -} - -/* - * Increase the flow level and resize the simple key list if needed. - */ - -func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { - /* Reset the simple key on the next level. */ - - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - /* Increase the flow level. */ - - parser.flow_level++ - - return true -} - -/* - * Decrease the flow level. - */ - -func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { - if parser.flow_level > 0 { - parser.flow_level-- - parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1] - } - - return true -} - -/* - * Push the current indentation level to the stack and set the new level - * the current column is greater than the indentation level. In this case, - * append or insert the specified token into the token queue. - * - */ - -func yaml_parser_roll_indent(parser *yaml_parser_t, column int, - number int, token_type yaml_token_type_t, mark YAML_mark_t) bool { - /* In the flow context, do nothing. */ - - if parser.flow_level > 0 { - return true - } - - if parser.indent == -1 || parser.indent < column { - /* - * Push the current indentation level to the stack and set the new - * indentation level. - */ - - parser.indents = append(parser.indents, parser.indent) - parser.indent = column - - /* Create a token and insert it into the queue. */ - token := yaml_token_t{ - token_type: token_type, - start_mark: mark, - end_mark: mark, - } - - // number == -1 -> enqueue otherwise insert - if number > -1 { - number -= parser.tokens_parsed - } - insert_token(parser, number, &token) - } - - return true -} - -/* - * Pop indentation levels from the indents stack until the current level - * becomes less or equal to the column. For each indentation level, append - * the BLOCK-END token. - */ - -func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { - /* In the flow context, do nothing. */ - - if parser.flow_level > 0 { - return true - } - - /* - * column is unsigned and parser->indent is signed, so if - * parser->indent is less than zero the conditional in the while - * loop below is incorrect. Guard against that. - */ - - if parser.indent < 0 { - return true - } - - /* Loop through the indentation levels in the stack. */ - - for parser.indent > column { - /* Create a token and append it to the queue. */ - token := yaml_token_t{ - token_type: yaml_BLOCK_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - insert_token(parser, -1, &token) - - /* Pop the indentation level. */ - parser.indent = parser.indents[len(parser.indents)-1] - parser.indents = parser.indents[:len(parser.indents)-1] - - } - - return true -} - -/* - * Pop indentation levels from the indents stack until the current - * level resets to -1. For each indentation level, append the - * BLOCK-END token. - */ - -func yaml_parser_reset_indent(parser *yaml_parser_t) bool { - /* In the flow context, do nothing. */ - - if parser.flow_level > 0 { - return true - } - - /* Loop through the indentation levels in the stack. */ - - for parser.indent > -1 { - /* Create a token and append it to the queue. */ - - token := yaml_token_t{ - token_type: yaml_BLOCK_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - insert_token(parser, -1, &token) - - /* Pop the indentation level. */ - parser.indent = parser.indents[len(parser.indents)-1] - parser.indents = parser.indents[:len(parser.indents)-1] - } - - return true -} - -/* - * Initialize the scanner and produce the STREAM-START token. - */ - -func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { - /* Set the initial indentation. */ - - parser.indent = -1 - - /* Initialize the simple key stack. */ - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - /* A simple key is allowed at the beginning of the stream. */ - - parser.simple_key_allowed = true - - /* We have started. */ - - parser.stream_start_produced = true - - /* Create the STREAM-START token and append it to the queue. */ - token := yaml_token_t{ - token_type: yaml_STREAM_START_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - encoding: parser.encoding, - } - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the STREAM-END token and shut down the scanner. - */ - -func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { - /* Force new line. */ - - if parser.mark.column != 0 { - parser.mark.column = 0 - parser.mark.line++ - } - - /* Reset the indentation level. */ - - if !yaml_parser_reset_indent(parser) { - return false - } - - /* Reset simple keys. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - /* Create the STREAM-END token and append it to the queue. */ - token := yaml_token_t{ - token_type: yaml_STREAM_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. - */ - -func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { - /* Reset the indentation level. */ - - if !yaml_parser_reset_indent(parser) { - return false - } - - /* Reset simple keys. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - /* Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. */ - var token yaml_token_t - if !yaml_parser_scan_directive(parser, &token) { - return false - } - - /* Append the token to the queue. */ - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the DOCUMENT-START or DOCUMENT-END token. - */ - -func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, - token_type yaml_token_type_t) bool { - - /* Reset the indentation level. */ - - if !yaml_parser_reset_indent(parser) { - return false - } - - /* Reset simple keys. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - /* Consume the token. */ - - start_mark := parser.mark - - skip(parser) - skip(parser) - skip(parser) - - end_mark := parser.mark - - /* Create the DOCUMENT-START or DOCUMENT-END token. */ - - token := yaml_token_t{ - token_type: token_type, - start_mark: start_mark, - end_mark: end_mark, - } - - /* Append the token to the queue. */ - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. - */ - -func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, - token_type yaml_token_type_t) bool { - - /* The indicators '[' and '{' may start a simple key. */ - - if !yaml_parser_save_simple_key(parser) { - return false - } - - /* Increase the flow level. */ - - if !yaml_parser_increase_flow_level(parser) { - return false - } - - /* A simple key may follow the indicators '[' and '{'. */ - - parser.simple_key_allowed = true - - /* Consume the token. */ - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - /* Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. */ - - token := yaml_token_t{ - token_type: token_type, - start_mark: start_mark, - end_mark: end_mark, - } - - /* Append the token to the queue. */ - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. - */ - -func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, - token_type yaml_token_type_t) bool { - - /* Reset any potential simple key on the current flow level. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - /* Decrease the flow level. */ - - if !yaml_parser_decrease_flow_level(parser) { - return false - } - - /* No simple keys after the indicators ']' and '}'. */ - - parser.simple_key_allowed = false - - /* Consume the token. */ - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - /* Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. */ - - token := yaml_token_t{ - token_type: token_type, - start_mark: start_mark, - end_mark: end_mark, - } - - /* Append the token to the queue. */ - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the FLOW-ENTRY token. - */ - -func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { - - /* Reset any potential simple keys on the current flow level. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - /* Simple keys are allowed after ','. */ - - parser.simple_key_allowed = true - - /* Consume the token. */ - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - /* Create the FLOW-ENTRY token and append it to the queue. */ - - token := yaml_token_t{ - token_type: yaml_FLOW_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the BLOCK-ENTRY token. - */ - -func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { - - /* Check if the scanner is in the block context. */ - - if parser.flow_level == 0 { - /* Check if we are allowed to start a new entry. */ - - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "block sequence entries are not allowed in this context") - } - - /* Add the BLOCK-SEQUENCE-START token if needed. */ - - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, - yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { - return false - } - } else { - /* - * It is an error for the '-' indicator to occur in the flow context, - * but we let the Parser detect and report about it because the Parser - * is able to point to the context. - */ - } - - /* Reset any potential simple keys on the current flow level. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - /* Simple keys are allowed after '-'. */ - - parser.simple_key_allowed = true - - /* Consume the token. */ - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - /* Create the BLOCK-ENTRY token and append it to the queue. */ - - token := yaml_token_t{ - token_type: yaml_BLOCK_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the KEY token. - */ - -func yaml_parser_fetch_key(parser *yaml_parser_t) bool { - /* In the block context, additional checks are required. */ - - if parser.flow_level == 0 { - /* Check if we are allowed to start a new key (not nessesary simple). */ - - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping keys are not allowed in this context") - } - - /* Add the BLOCK-MAPPING-START token if needed. */ - - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, - yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - /* Reset any potential simple keys on the current flow level. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - /* Simple keys are allowed after '?' in the block context. */ - - parser.simple_key_allowed = (parser.flow_level == 0) - - /* Consume the token. */ - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - /* Create the KEY token and append it to the queue. */ - - token := yaml_token_t{ - token_type: yaml_KEY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the VALUE token. - */ - -func yaml_parser_fetch_value(parser *yaml_parser_t) bool { - - simple_key := &parser.simple_keys[len(parser.simple_keys)-1] - - /* Have we found a simple key? */ - - if simple_key.possible { - - /* Create the KEY token and insert it into the queue. */ - - token := yaml_token_t{ - token_type: yaml_KEY_TOKEN, - start_mark: simple_key.mark, - end_mark: simple_key.mark, - } - - insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) - - /* In the block context, we may need to add the BLOCK-MAPPING-START token. */ - - if !yaml_parser_roll_indent(parser, simple_key.mark.column, - simple_key.token_number, - yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { - return false - } - - /* Remove the simple key. */ - - simple_key.possible = false - - /* A simple key cannot follow another simple key. */ - - parser.simple_key_allowed = false - } else { - /* The ':' indicator follows a complex key. */ - - /* In the block context, extra checks are required. */ - - if parser.flow_level == 0 { - /* Check if we are allowed to start a complex value. */ - - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping values are not allowed in this context") - } - - /* Add the BLOCK-MAPPING-START token if needed. */ - - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, - yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - /* Simple keys after ':' are allowed in the block context. */ - - parser.simple_key_allowed = (parser.flow_level == 0) - } - - /* Consume the token. */ - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - /* Create the VALUE token and append it to the queue. */ - - token := yaml_token_t{ - token_type: yaml_VALUE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the ALIAS or ANCHOR token. - */ - -func yaml_parser_fetch_anchor(parser *yaml_parser_t, token_type yaml_token_type_t) bool { - - /* An anchor or an alias could be a simple key. */ - - if !yaml_parser_save_simple_key(parser) { - return false - } - - /* A simple key cannot follow an anchor or an alias. */ - - parser.simple_key_allowed = false - - /* Create the ALIAS or ANCHOR token and append it to the queue. */ - var token yaml_token_t - if !yaml_parser_scan_anchor(parser, &token, token_type) { - return false - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the TAG token. - */ - -func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { - /* A tag could be a simple key. */ - - if !yaml_parser_save_simple_key(parser) { - return false - } - - /* A simple key cannot follow a tag. */ - - parser.simple_key_allowed = false - - /* Create the TAG token and append it to the queue. */ - var token yaml_token_t - if !yaml_parser_scan_tag(parser, &token) { - return false - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. - */ - -func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { - /* Remove any potential simple keys. */ - - if !yaml_parser_remove_simple_key(parser) { - return false - } - - /* A simple key may follow a block scalar. */ - - parser.simple_key_allowed = true - - /* Create the SCALAR token and append it to the queue. */ - var token yaml_token_t - if !yaml_parser_scan_block_scalar(parser, &token, literal) { - return false - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. - */ - -func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { - - /* A plain scalar could be a simple key. */ - - if !yaml_parser_save_simple_key(parser) { - return false - } - - /* A simple key cannot follow a flow scalar. */ - - parser.simple_key_allowed = false - - /* Create the SCALAR token and append it to the queue. */ - var token yaml_token_t - if !yaml_parser_scan_flow_scalar(parser, &token, single) { - return false - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Produce the SCALAR(...,plain) token. - */ - -func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { - /* A plain scalar could be a simple key. */ - - if !yaml_parser_save_simple_key(parser) { - return false - } - - /* A simple key cannot follow a flow scalar. */ - - parser.simple_key_allowed = false - - /* Create the SCALAR token and append it to the queue. */ - var token yaml_token_t - if !yaml_parser_scan_plain_scalar(parser, &token) { - return false - } - - insert_token(parser, -1, &token) - - return true -} - -/* - * Eat whitespaces and comments until the next token is found. - */ - -func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { - /* Until the next token is not found. */ - - for { - /* Allow the BOM mark to start a line. */ - - if !cache(parser, 1) { - return false - } - - if parser.mark.column == 0 && is_bom_at(parser.buffer, parser.buffer_pos) { - skip(parser) - } - - /* - * Eat whitespaces. - * - * Tabs are allowed: - * - * - in the flow context; - * - in the block context, but not at the beginning of the line or - * after '-', '?', or ':' (complex value). - */ - - if !cache(parser, 1) { - return false - } - - for parser.buffer[parser.buffer_pos] == ' ' || - ((parser.flow_level > 0 || !parser.simple_key_allowed) && - parser.buffer[parser.buffer_pos] == '\t') { - skip(parser) - if !cache(parser, 1) { - return false - } - } - - /* Eat a comment until a line break. */ - - if parser.buffer[parser.buffer_pos] == '#' { - for !is_breakz_at(parser.buffer, parser.buffer_pos) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - } - - /* If it is a line break, eat it. */ - - if is_break_at(parser.buffer, parser.buffer_pos) { - if !cache(parser, 2) { - return false - } - skip_line(parser) - - /* In the block context, a new line may start a simple key. */ - - if parser.flow_level == 0 { - parser.simple_key_allowed = true - } - } else { - /* We have found a token. */ - - break - } - } - - return true -} - -/* - * Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. - * - * Scope: - * %YAML 1.1 # a comment \n - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * %TAG !yaml! tag:yaml.org,2002: \n - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - */ - -func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { - /* Eat '%'. */ - - start_mark := parser.mark - - skip(parser) - - /* Scan the directive name. */ - var name []byte - if !yaml_parser_scan_directive_name(parser, start_mark, &name) { - return false - } - - /* Is it a YAML directive? */ - var major, minor int - if bytes.Equal(name, []byte("YAML")) { - /* Scan the VERSION directive value. */ - - if !yaml_parser_scan_version_directive_value(parser, start_mark, - &major, &minor) { - return false - } - - end_mark := parser.mark - - /* Create a VERSION-DIRECTIVE token. */ - - *token = yaml_token_t{ - token_type: yaml_VERSION_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - major: major, - minor: minor, - } - } else if bytes.Equal(name, []byte("TAG")) { - /* Is it a TAG directive? */ - /* Scan the TAG directive value. */ - var handle, prefix []byte - if !yaml_parser_scan_tag_directive_value(parser, start_mark, - &handle, &prefix) { - return false - } - - end_mark := parser.mark - - /* Create a TAG-DIRECTIVE token. */ - - *token = yaml_token_t{ - token_type: yaml_TAG_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - prefix: prefix, - } - } else { - /* Unknown directive. */ - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found uknown directive name") - return false - } - - /* Eat the rest of the line including any comments. */ - - if !cache(parser, 1) { - return false - } - - for is_blank(parser.buffer[parser.buffer_pos]) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - - if parser.buffer[parser.buffer_pos] == '#' { - for !is_breakz_at(parser.buffer, parser.buffer_pos) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - } - - /* Check if we are at the end of the line. */ - - if !is_breakz_at(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "did not find expected comment or line break") - return false - } - - /* Eat a line break. */ - - if is_break_at(parser.buffer, parser.buffer_pos) { - if !cache(parser, 2) { - return false - } - skip_line(parser) - } - - return true -} - -/* - * Scan the directive name. - * - * Scope: - * %YAML 1.1 # a comment \n - * ^^^^ - * %TAG !yaml! tag:yaml.org,2002: \n - * ^^^ - */ - -func yaml_parser_scan_directive_name(parser *yaml_parser_t, - start_mark YAML_mark_t, name *[]byte) bool { - - /* Consume the directive name. */ - - if !cache(parser, 1) { - return false - } - - var s []byte - for is_alpha(parser.buffer[parser.buffer_pos]) { - s = read(parser, s) - if !cache(parser, 1) { - return false - } - } - - /* Check if the name is empty. */ - - if len(s) == 0 { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "could not find expected directive name") - return false - } - - /* Check for an blank character after the name. */ - - if !is_blankz_at(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found unexpected non-alphabetical character") - return false - } - - *name = s - - return true -} - -/* - * Scan the value of VERSION-DIRECTIVE. - * - * Scope: - * %YAML 1.1 # a comment \n - * ^^^^^^ - */ - -func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, - start_mark YAML_mark_t, major *int, minor *int) bool { - /* Eat whitespaces. */ - - if !cache(parser, 1) { - return false - } - - for is_blank(parser.buffer[parser.buffer_pos]) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - - /* Consume the major version number. */ - - if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { - return false - } - - /* Eat '.'. */ - - if parser.buffer[parser.buffer_pos] != '.' { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected digit or '.' character") - } - - skip(parser) - - /* Consume the minor version number. */ - - if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { - return false - } - - return true -} - -const MAX_NUMBER_LENGTH = 9 - -/* - * Scan the version number of VERSION-DIRECTIVE. - * - * Scope: - * %YAML 1.1 # a comment \n - * ^ - * %YAML 1.1 # a comment \n - * ^ - */ - -func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, - start_mark YAML_mark_t, number *int) bool { - - /* Repeat while the next character is digit. */ - - if !cache(parser, 1) { - return false - } - - value := 0 - length := 0 - for is_digit(parser.buffer[parser.buffer_pos]) { - /* Check if the number is too long. */ - - length++ - if length > MAX_NUMBER_LENGTH { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "found extremely long version number") - } - - value = value*10 + as_digit(parser.buffer[parser.buffer_pos]) - - skip(parser) - - if !cache(parser, 1) { - return false - } - } - - /* Check if the number was present. */ - - if length == 0 { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected version number") - } - - *number = value - - return true -} - -/* - * Scan the value of a TAG-DIRECTIVE token. - * - * Scope: - * %TAG !yaml! tag:yaml.org,2002: \n - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - */ - -func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, - start_mark YAML_mark_t, handle, prefix *[]byte) bool { - - /* Eat whitespaces. */ - - if !cache(parser, 1) { - return false - } - - for is_blank(parser.buffer[parser.buffer_pos]) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - - /* Scan a handle. */ - var handle_value []byte - if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { - return false - } - - /* Expect a whitespace. */ - - if !cache(parser, 1) { - return false - } - - if !is_blank(parser.buffer[parser.buffer_pos]) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace") - return false - } - - /* Eat whitespaces. */ - - for is_blank(parser.buffer[parser.buffer_pos]) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - - /* Scan a prefix. */ - var prefix_value []byte - if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { - return false - } - - /* Expect a whitespace or line break. */ - - if !cache(parser, 1) { - return false - } - - if !is_blankz_at(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace or line break") - return false - } - - *handle = handle_value - *prefix = prefix_value - - return true -} - -func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, - token_type yaml_token_type_t) bool { - - /* Eat the indicator character. */ - - start_mark := parser.mark - - skip(parser) - - /* Consume the value. */ - - if !cache(parser, 1) { - return false - } - - var s []byte - for is_alpha(parser.buffer[parser.buffer_pos]) { - s = read(parser, s) - if !cache(parser, 1) { - return false - } - } - - end_mark := parser.mark - - /* - * Check if length of the anchor is greater than 0 and it is followed by - * a whitespace character or one of the indicators: - * - * '?', ':', ',', ']', '}', '%', '@', '`'. - */ - - b := parser.buffer[parser.buffer_pos] - if len(s) == 0 || !(is_blankz_at(parser.buffer, parser.buffer_pos) || b == '?' || - b == ':' || b == ',' || - b == ']' || b == '}' || - b == '%' || b == '@' || - b == '`') { - context := "while scanning an anchor" - if token_type != yaml_ANCHOR_TOKEN { - context = "while scanning an alias" - } - yaml_parser_set_scanner_error(parser, context, start_mark, - "did not find expected alphabetic or numeric character") - return false - } - - /* Create a token. */ - *token = yaml_token_t{ - token_type: token_type, - start_mark: start_mark, - end_mark: end_mark, - value: s, - } - - return true -} - -/* - * Scan a TAG token. - */ - -func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { - start_mark := parser.mark - - /* Check if the tag is in the canonical form. */ - - if !cache(parser, 2) { - return false - } - - var handle []byte - var suffix []byte - if parser.buffer[parser.buffer_pos+1] == '<' { - /* Set the handle to '' */ - - /* Eat '!<' */ - - skip(parser) - skip(parser) - - /* Consume the tag value. */ - - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - - /* Check for '>' and eat it. */ - - if parser.buffer[parser.buffer_pos] != '>' { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find the expected '>'") - return false - } - - skip(parser) - } else if is_blank(parser.buffer[parser.buffer_pos+1]) { - // NON-SPECIFIED - skip(parser) - } else { - /* The tag has either the '!suffix' or the '!handle!suffix' form. */ - - /* First, try to scan a handle. */ - - if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { - return false - } - - /* Check if it is, indeed, handle. */ - - if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { - /* Scan the suffix now. */ - - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - } else { - /* It wasn't a handle after all. Scan the rest of the tag. */ - - if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { - return false - } - - /* Set the handle to '!'. */ - - handle = []byte{'!'} - - /* - * A special case: the '!' tag. Set the handle to '' and the - * suffix to '!'. - */ - - if len(suffix) == 0 { - handle, suffix = suffix, handle - } - - } - } - - /* Check the character which ends the tag. */ - - if !cache(parser, 1) { - return false - } - - if !is_blankz_at(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find expected whitespace or line break") - return false - } - - end_mark := parser.mark - - /* Create a token. */ - - *token = yaml_token_t{ - token_type: yaml_TAG_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - suffix: suffix, - } - - return true -} - -/* - * Scan a tag handle. - */ - -func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, - start_mark YAML_mark_t, handle *[]byte) bool { - - /* Check the initial '!' character. */ - - if !cache(parser, 1) { - return false - } - - if parser.buffer[parser.buffer_pos] != '!' { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - - /* Copy the '!' character. */ - var s []byte - s = read(parser, s) - - /* Copy all subsequent alphabetical and numerical characters. */ - - if !cache(parser, 1) { - return false - } - - for is_alpha(parser.buffer[parser.buffer_pos]) { - s = read(parser, s) - if !cache(parser, 1) { - return false - } - } - - /* Check if the trailing character is '!' and copy it. */ - - if parser.buffer[parser.buffer_pos] == '!' { - s = read(parser, s) - } else { - /* - * It's either the '!' tag or not really a tag handle. If it's a %TAG - * directive, it's an error. If it's a tag token, it must be a part of - * URI. - */ - - if directive && !(s[0] == '!' && len(s) == 1) { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - } - - *handle = s - - return true -} - -/* - * Scan a tag. - */ - -func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, - head []byte, start_mark YAML_mark_t, uri *[]byte) bool { - - var s []byte - /* - * Copy the head if needed. - * - * Note that we don't copy the leading '!' character. - */ - if len(head) > 1 { - s = append(s, head[1:]...) - } - - /* Scan the tag. */ - if !cache(parser, 1) { - return false - } - - /* - * The set of characters that may appear in URI is as follows: - * - * '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', - * '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', - * '%'. - */ - - b := parser.buffer[parser.buffer_pos] - for is_alpha(b) || b == ';' || - b == '/' || b == '?' || - b == ':' || b == '@' || - b == '&' || b == '=' || - b == '+' || b == '$' || - b == ',' || b == '.' || - b == '!' || b == '~' || - b == '*' || b == '\'' || - b == '(' || b == ')' || - b == '[' || b == ']' || - b == '%' { - /* Check if it is a URI-escape sequence. */ - - if b == '%' { - if !yaml_parser_scan_uri_escapes(parser, - directive, start_mark, &s) { - return false - } - } else { - s = read(parser, s) - } - - if !cache(parser, 1) { - return false - } - b = parser.buffer[parser.buffer_pos] - } - - /* Check if the tag is non-empty. */ - - if len(s) == 0 { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected tag URI") - return false - } - - *uri = s - - return true -} - -/* - * Decode an URI-escape sequence corresponding to a single UTF-8 character. - */ - -func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, - start_mark YAML_mark_t, s *[]byte) bool { - - /* Decode the required number of characters. */ - w := 10 - for w > 0 { - - /* Check for a URI-escaped octet. */ - - if !cache(parser, 3) { - return false - } - - if !(parser.buffer[parser.buffer_pos] == '%' && - is_hex(parser.buffer[parser.buffer_pos+1]) && - is_hex(parser.buffer[parser.buffer_pos+2])) { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find URI escaped octet") - } - - /* Get the octet. */ - octet := byte((as_hex(parser.buffer[parser.buffer_pos+1]) << 4) + - as_hex(parser.buffer[parser.buffer_pos+2])) - - /* If it is the leading octet, determine the length of the UTF-8 sequence. */ - - if w == 10 { - w = width(octet) - if w == 0 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect leading UTF-8 octet") - } - } else { - /* Check if the trailing octet is correct. */ - - if (octet & 0xC0) != 0x80 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect trailing UTF-8 octet") - } - } - - /* Copy the octet and move the pointers. */ - - *s = append(*s, octet) - skip(parser) - skip(parser) - skip(parser) - w-- - } - - return true -} - -/* - * Scan a block scalar. - */ - -func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, - literal bool) bool { - - /* Eat the indicator '|' or '>'. */ - - start_mark := parser.mark - - skip(parser) - - /* Scan the additional block scalar indicators. */ - - if !cache(parser, 1) { - return false - } - - /* Check for a chomping indicator. */ - chomping := 0 - increment := 0 - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - /* Set the chomping method and eat the indicator. */ - - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - - skip(parser) - - /* Check for an indentation indicator. */ - - if !cache(parser, 1) { - return false - } - - if is_digit(parser.buffer[parser.buffer_pos]) { - /* Check that the indentation is greater than 0. */ - - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an indentation indicator equal to 0") - return false - } - - /* Get the indentation level and eat the indicator. */ - - increment = as_digit(parser.buffer[parser.buffer_pos]) - - skip(parser) - } - } else if is_digit(parser.buffer[parser.buffer_pos]) { - - /* Do the same as above, but in the opposite order. */ - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an indentation indicator equal to 0") - return false - } - - increment = as_digit(parser.buffer[parser.buffer_pos]) - - skip(parser) - - if !cache(parser, 1) { - return false - } - - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - - skip(parser) - } - } - - /* Eat whitespaces and comments to the end of the line. */ - - if !cache(parser, 1) { - return false - } - - for is_blank(parser.buffer[parser.buffer_pos]) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - - if parser.buffer[parser.buffer_pos] == '#' { - for !is_breakz_at(parser.buffer, parser.buffer_pos) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - } - - /* Check if we are at the end of the line. */ - - if !is_breakz_at(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "did not find expected comment or line break") - return false - } - - /* Eat a line break. */ - - if is_break_at(parser.buffer, parser.buffer_pos) { - if !cache(parser, 2) { - return false - } - - skip_line(parser) - } - - end_mark := parser.mark - - /* Set the indentation level if it was specified. */ - indent := 0 - if increment > 0 { - if parser.indent >= 0 { - indent = parser.indent + increment - } else { - indent = increment - } - } - - /* Scan the leading line breaks and determine the indentation level if needed. */ - var trailing_breaks []byte - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, - start_mark, &end_mark) { - return false - } - - /* Scan the block scalar content. */ - - if !cache(parser, 1) { - return false - } - - var s []byte - var leading_break []byte - leading_blank := false - trailing_blank := false - for parser.mark.column == indent && !is_z(parser.buffer[parser.buffer_pos]) { - - /* - * We are at the beginning of a non-empty line. - */ - - /* Is it a trailing whitespace? */ - - trailing_blank = is_blank(parser.buffer[parser.buffer_pos]) - - /* Check if we need to fold the leading line break. */ - - if !literal && len(leading_break) > 0 && leading_break[0] == '\n' && - !leading_blank && !trailing_blank { - /* Do we need to join the lines by space? */ - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } - leading_break = leading_break[:0] - } else { - s = append(s, leading_break...) - leading_break = leading_break[:0] - } - - /* Append the remaining line breaks. */ - s = append(s, trailing_breaks...) - trailing_breaks = trailing_breaks[:0] - - /* Is it a leading whitespace? */ - - leading_blank = is_blank(parser.buffer[parser.buffer_pos]) - - /* Consume the current line. */ - - for !is_breakz_at(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if !cache(parser, 1) { - return false - } - } - - /* Consume the line break. */ - - if !cache(parser, 2) { - return false - } - - leading_break = read_line(parser, leading_break) - - /* Eat the following indentation spaces and line breaks. */ - - if !yaml_parser_scan_block_scalar_breaks(parser, - &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - } - - /* Chomp the tail. */ - - if chomping != -1 { - s = append(s, leading_break...) - } - if chomping == 1 { - s = append(s, trailing_breaks...) - } - - /* Create a token. */ - - *token = yaml_token_t{ - token_type: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_LITERAL_SCALAR_STYLE, - } - if !literal { - token.style = yaml_FOLDED_SCALAR_STYLE - } - - return true -} - -/* - * Scan indentation spaces and line breaks for a block scalar. Determine the - * indentation level if needed. - */ - -func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, - indent *int, breaks *[]byte, - start_mark YAML_mark_t, end_mark *YAML_mark_t) bool { - - *end_mark = parser.mark - - /* Eat the indentation spaces and line breaks. */ - max_indent := 0 - for { - /* Eat the indentation spaces. */ - - if !cache(parser, 1) { - return false - } - - for (*indent == 0 || parser.mark.column < *indent) && - is_space(parser.buffer[parser.buffer_pos]) { - skip(parser) - if !cache(parser, 1) { - return false - } - } - if parser.mark.column > max_indent { - max_indent = parser.mark.column - } - - /* Check for a tab character messing the indentation. */ - - if (*indent == 0 || parser.mark.column < *indent) && - is_tab(parser.buffer[parser.buffer_pos]) { - return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found a tab character where an indentation space is expected") - } - - /* Have we found a non-empty line? */ - - if !is_break_at(parser.buffer, parser.buffer_pos) { - break - } - - /* Consume the line break. */ - - if !cache(parser, 2) { - return false - } - - *breaks = read_line(parser, *breaks) - *end_mark = parser.mark - } - - /* Determine the indentation level if needed. */ - - if *indent == 0 { - *indent = max_indent - if *indent < parser.indent+1 { - *indent = parser.indent + 1 - } - if *indent < 1 { - *indent = 1 - } - } - - return true -} - -/* - * Scan a quoted scalar. - */ - -func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, - single bool) bool { - - /* Eat the left quote. */ - - start_mark := parser.mark - - skip(parser) - - /* Consume the content of the quoted scalar. */ - var s []byte - var leading_break []byte - var trailing_breaks []byte - var whitespaces []byte - for { - /* Check that there are no document indicators at the beginning of the line. */ - - if !cache(parser, 4) { - return false - } - - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz_at(parser.buffer, parser.buffer_pos+3) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected document indicator") - return false - } - - /* Check for EOF. */ - - if is_z(parser.buffer[parser.buffer_pos]) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected end of stream") - return false - } - - /* Consume non-blank characters. */ - - if !cache(parser, 2) { - return false - } - - leading_blanks := false - - for !is_blankz_at(parser.buffer, parser.buffer_pos) { - /* Check for an escaped single quote. */ - - if single && parser.buffer[parser.buffer_pos] == '\'' && - parser.buffer[parser.buffer_pos+1] == '\'' { - // Is is an escaped single quote. - s = append(s, '\'') - skip(parser) - skip(parser) - } else if single && parser.buffer[parser.buffer_pos] == '\'' { - /* Check for the right quote. */ - break - } else if !single && parser.buffer[parser.buffer_pos] == '"' { - /* Check for the right quote. */ - break - } else if !single && parser.buffer[parser.buffer_pos] == '\\' && - is_break_at(parser.buffer, parser.buffer_pos+1) { - - /* Check for an escaped line break. */ - if !cache(parser, 3) { - return false - } - - skip(parser) - skip_line(parser) - leading_blanks = true - break - } else if !single && parser.buffer[parser.buffer_pos] == '\\' { - - /* Check for an escape sequence. */ - - code_length := 0 - - /* Check the escape character. */ - - switch parser.buffer[parser.buffer_pos+1] { - case '0': - s = append(s, 0) - case 'a': - s = append(s, '\x07') - case 'b': - s = append(s, '\x08') - case 't', '\t': - s = append(s, '\x09') - case 'n': - s = append(s, '\x0A') - case 'v': - s = append(s, '\x0B') - case 'f': - s = append(s, '\x0C') - case 'r': - s = append(s, '\x0D') - case 'e': - s = append(s, '\x1B') - case ' ': - s = append(s, '\x20') - case '"': - s = append(s, '"') - case '/': - s = append(s, '/') - case '\\': - s = append(s, '\\') - case 'N': /* NEL (#x85) */ - s = append(s, '\xC2') - s = append(s, '\x85') - case '_': /* #xA0 */ - s = append(s, '\xC2') - s = append(s, '\xA0') - case 'L': /* LS (#x2028) */ - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA8') - case 'P': /* PS (#x2029) */ - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA9') - case 'x': - code_length = 2 - case 'u': - code_length = 4 - case 'U': - code_length = 8 - default: - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found unknown escape character") - return false - } - - skip(parser) - skip(parser) - - /* Consume an arbitrary escape code. */ - - if code_length > 0 { - value := 0 - - /* Scan the character value. */ - - if !cache(parser, code_length) { - return false - } - - for k := 0; k < code_length; k++ { - if !is_hex(parser.buffer[parser.buffer_pos+k]) { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "did not find expected hexdecimal number") - return false - } - value = (value << 4) + as_hex(parser.buffer[parser.buffer_pos+k]) - } - - /* Check the value and write the character. */ - - if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found invalid Unicode character escape code") - return false - } - - if value <= 0x7F { - s = append(s, byte(value)) - } else if value <= 0x7FF { - s = append(s, byte(0xC0+(value>>6))) - s = append(s, byte(0x80+(value&0x3F))) - } else if value <= 0xFFFF { - s = append(s, byte(0xE0+(value>>12))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } else { - s = append(s, byte(0xF0+(value>>18))) - s = append(s, byte(0x80+((value>>12)&0x3F))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } - - /* Advance the pointer. */ - - for k := 0; k < code_length; k++ { - skip(parser) - } - } - } else { - /* It is a non-escaped non-blank character. */ - - s = read(parser, s) - } - - if !cache(parser, 2) { - return false - } - } - - /* Check if we are at the end of the scalar. */ - b := parser.buffer[parser.buffer_pos] - if single { - if b == '\'' { - break - } - } else if b == '"' { - break - } - - /* Consume blank characters. */ - - if !cache(parser, 1) { - return false - } - - for is_blank(parser.buffer[parser.buffer_pos]) || is_break_at(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer[parser.buffer_pos]) { - /* Consume a space or a tab character. */ - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if !cache(parser, 2) { - return false - } - - /* Check if it is a first line break. */ - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - - if !cache(parser, 1) { - return false - } - } - - /* Join the whitespaces or fold line breaks. */ - - if leading_blanks { - /* Do we need to fold line breaks? */ - - if len(leading_break) > 0 && leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - trailing_breaks = trailing_breaks[:0] - } - - leading_break = leading_break[:0] - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - leading_break = leading_break[:0] - trailing_breaks = trailing_breaks[:0] - } - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - /* Eat the right quote. */ - - skip(parser) - - end_mark := parser.mark - - /* Create a token. */ - - *token = yaml_token_t{ - token_type: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_SINGLE_QUOTED_SCALAR_STYLE, - } - if !single { - token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - return true -} - -/* - * Scan a plain scalar. - */ - -func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { - var s []byte - var leading_break []byte - var trailing_breaks []byte - var whitespaces []byte - leading_blanks := false - indent := parser.indent + 1 - - start_mark := parser.mark - end_mark := parser.mark - - /* Consume the content of the plain scalar. */ - - for { - /* Check for a document indicator. */ - - if !cache(parser, 4) { - return false - } - - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz_at(parser.buffer, parser.buffer_pos+3) { - break - } - - /* Check for a comment. */ - - if parser.buffer[parser.buffer_pos] == '#' { - break - } - - /* Consume non-blank characters. */ - - for !is_blankz_at(parser.buffer, parser.buffer_pos) { - /* Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". */ - - if parser.flow_level > 0 && - parser.buffer[parser.buffer_pos] == ':' && - !is_blankz_at(parser.buffer, parser.buffer_pos+1) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found unexpected ':'") - return false - } - - /* Check for indicators that may end a plain scalar. */ - b := parser.buffer[parser.buffer_pos] - if (b == ':' && is_blankz_at(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level > 0 && - (b == ',' || b == ':' || - b == '?' || b == '[' || - b == ']' || b == '{' || - b == '}')) { - break - } - - /* Check if we need to join whitespaces and breaks. */ - - if leading_blanks || len(whitespaces) > 0 { - if leading_blanks { - /* Do we need to fold line breaks? */ - - if leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - trailing_breaks = trailing_breaks[:0] - } - leading_break = leading_break[:0] - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - leading_break = leading_break[:0] - trailing_breaks = trailing_breaks[:0] - } - - leading_blanks = false - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - /* Copy the character. */ - - s = read(parser, s) - end_mark = parser.mark - - if !cache(parser, 2) { - return false - } - } - - /* Is it the end? */ - - if !(is_blank(parser.buffer[parser.buffer_pos]) || - is_break_at(parser.buffer, parser.buffer_pos)) { - break - } - - /* Consume blank characters. */ - - if !cache(parser, 1) { - return false - } - - for is_blank(parser.buffer[parser.buffer_pos]) || - is_break_at(parser.buffer, parser.buffer_pos) { - - if is_blank(parser.buffer[parser.buffer_pos]) { - /* Check for tab character that abuse indentation. */ - - if leading_blanks && parser.mark.column < indent && - is_tab(parser.buffer[parser.buffer_pos]) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found a tab character that violate indentation") - return false - } - - /* Consume a space or a tab character. */ - - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if !cache(parser, 2) { - return false - } - - /* Check if it is a first line break. */ - - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if !cache(parser, 1) { - return false - } - } - - /* Check indentation level. */ - - if parser.flow_level == 0 && parser.mark.column < indent { - break - } - } - - /* Create a token. */ - - *token = yaml_token_t{ - token_type: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_PLAIN_SCALAR_STYLE, - } - - /* Note that we change the 'simple_key_allowed' flag. */ - - if leading_blanks { - parser.simple_key_allowed = true - } - - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/scanner_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/scanner_test.go deleted file mode 100644 index db31e65..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/scanner_test.go +++ /dev/null @@ -1,80 +0,0 @@ -/* -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 candiedyaml - -import ( - "io/ioutil" - "os" - "path/filepath" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var scan = func(filename string) { - It("scan "+filename, func() { - file, err := os.Open(filename) - Expect(err).To(BeNil()) - - parser := yaml_parser_t{} - yaml_parser_initialize(&parser) - yaml_parser_set_input_reader(&parser, file) - - failed := false - token := yaml_token_t{} - - for { - if !yaml_parser_scan(&parser, &token) { - failed = true - break - } - - if token.token_type == yaml_STREAM_END_TOKEN { - break - } - } - - file.Close() - - // msg := "SUCCESS" - // if failed { - // msg = "FAILED" - // if parser.error != yaml_NO_ERROR { - // m := parser.problem_mark - // fmt.Printf("ERROR: (%s) %s @ line: %d col: %d\n", - // parser.context, parser.problem, m.line, m.column) - // } - // } - Expect(failed).To(BeFalse()) - }) -} - -var scanYamls = func(dirname string) { - fileInfos, err := ioutil.ReadDir(dirname) - if err != nil { - panic(err.Error()) - } - - for _, fileInfo := range fileInfos { - if !fileInfo.IsDir() { - scan(filepath.Join(dirname, fileInfo.Name())) - } - } -} - -var _ = Describe("Scanner", func() { - scanYamls("fixtures/specification") - scanYamls("fixtures/specification/types") -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/tags.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/tags.go deleted file mode 100644 index 4df0b0a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/tags.go +++ /dev/null @@ -1,343 +0,0 @@ -/* -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 candiedyaml - -import ( - "reflect" - "sort" - "strings" - "sync" - "unicode" -) - -// A field represents a single field found in a struct. -type field struct { - name string - tag bool - index []int - typ reflect.Type - omitEmpty bool - flow bool -} - -// byName sorts field by name, breaking ties with depth, -// then breaking ties with "name came from json tag", then -// breaking ties with index sequence. -type byName []field - -func (x byName) Len() int { return len(x) } - -func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byName) Less(i, j int) bool { - if x[i].name != x[j].name { - return x[i].name < x[j].name - } - if len(x[i].index) != len(x[j].index) { - return len(x[i].index) < len(x[j].index) - } - if x[i].tag != x[j].tag { - return x[i].tag - } - return byIndex(x).Less(i, j) -} - -// byIndex sorts field by index sequence. -type byIndex []field - -func (x byIndex) Len() int { return len(x) } - -func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -func (x byIndex) Less(i, j int) bool { - for k, xik := range x[i].index { - if k >= len(x[j].index) { - return false - } - if xik != x[j].index[k] { - return xik < x[j].index[k] - } - } - return len(x[i].index) < len(x[j].index) -} - -// typeFields returns a list of fields that JSON should recognize for the given type. -// The algorithm is breadth-first search over the set of structs to include - the top struct -// and then any reachable anonymous structs. -func typeFields(t reflect.Type) []field { - // Anonymous fields to explore at the current level and the next. - current := []field{} - next := []field{{typ: t}} - - // Count of queued names for current level and the next. - count := map[reflect.Type]int{} - nextCount := map[reflect.Type]int{} - - // Types already visited at an earlier level. - visited := map[reflect.Type]bool{} - - // Fields found. - var fields []field - - for len(next) > 0 { - current, next = next, current[:0] - count, nextCount = nextCount, map[reflect.Type]int{} - - for _, f := range current { - if visited[f.typ] { - continue - } - visited[f.typ] = true - - // Scan f.typ for fields to include. - for i := 0; i < f.typ.NumField(); i++ { - sf := f.typ.Field(i) - if sf.PkgPath != "" { // unexported - continue - } - tag := sf.Tag.Get("yaml") - if tag == "-" { - continue - } - name, opts := parseTag(tag) - if !isValidTag(name) { - name = "" - } - index := make([]int, len(f.index)+1) - copy(index, f.index) - index[len(f.index)] = i - - ft := sf.Type - if ft.Name() == "" && ft.Kind() == reflect.Ptr { - // Follow pointer. - ft = ft.Elem() - } - - // Record found field and index sequence. - if name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct { - tagged := name != "" - if name == "" { - name = sf.Name - } - fields = append(fields, field{name, tagged, index, ft, - opts.Contains("omitempty"), opts.Contains("flow")}) - if count[f.typ] > 1 { - // If there were multiple instances, add a second, - // so that the annihilation code will see a duplicate. - // It only cares about the distinction between 1 or 2, - // so don't bother generating any more copies. - fields = append(fields, fields[len(fields)-1]) - } - continue - } - - // Record new anonymous struct to explore in next round. - nextCount[ft]++ - if nextCount[ft] == 1 { - next = append(next, field{name: ft.Name(), index: index, typ: ft}) - } - } - } - } - - sort.Sort(byName(fields)) - - // Delete all fields that are hidden by the Go rules for embedded fields, - // except that fields with JSON tags are promoted. - - // The fields are sorted in primary order of name, secondary order - // of field index length. Loop over names; for each name, delete - // hidden fields by choosing the one dominant field that survives. - out := fields[:0] - for advance, i := 0, 0; i < len(fields); i += advance { - // One iteration per name. - // Find the sequence of fields with the name of this first field. - fi := fields[i] - name := fi.name - for advance = 1; i+advance < len(fields); advance++ { - fj := fields[i+advance] - if fj.name != name { - break - } - } - if advance == 1 { // Only one field with this name - out = append(out, fi) - continue - } - dominant, ok := dominantField(fields[i : i+advance]) - if ok { - out = append(out, dominant) - } - } - - fields = out - sort.Sort(byIndex(fields)) - - return fields -} - -// dominantField looks through the fields, all of which are known to -// have the same name, to find the single field that dominates the -// others using Go's embedding rules, modified by the presence of -// JSON tags. If there are multiple top-level fields, the boolean -// will be false: This condition is an error in Go and we skip all -// the fields. -func dominantField(fields []field) (field, bool) { - // The fields are sorted in increasing index-length order. The winner - // must therefore be one with the shortest index length. Drop all - // longer entries, which is easy: just truncate the slice. - length := len(fields[0].index) - tagged := -1 // Index of first tagged field. - for i, f := range fields { - if len(f.index) > length { - fields = fields[:i] - break - } - if f.tag { - if tagged >= 0 { - // Multiple tagged fields at the same level: conflict. - // Return no field. - return field{}, false - } - tagged = i - } - } - if tagged >= 0 { - return fields[tagged], true - } - // All remaining fields have the same length. If there's more than one, - // we have a conflict (two fields named "X" at the same level) and we - // return no field. - if len(fields) > 1 { - return field{}, false - } - return fields[0], true -} - -var fieldCache struct { - sync.RWMutex - m map[reflect.Type][]field -} - -// cachedTypeFields is like typeFields but uses a cache to avoid repeated work. -func cachedTypeFields(t reflect.Type) []field { - fieldCache.RLock() - f := fieldCache.m[t] - fieldCache.RUnlock() - if f != nil { - return f - } - - // Compute fields without lock. - // Might duplicate effort but won't hold other computations back. - f = typeFields(t) - if f == nil { - f = []field{} - } - - fieldCache.Lock() - if fieldCache.m == nil { - fieldCache.m = map[reflect.Type][]field{} - } - fieldCache.m[t] = f - fieldCache.Unlock() - return f -} - -// tagOptions is the string following a comma in a struct field's "json" -// tag, or the empty string. It does not include the leading comma. -type tagOptions string - -func isValidTag(s string) bool { - if s == "" { - return false - } - for _, c := range s { - switch { - case strings.ContainsRune("!#$%&()*+-./:<=>?@[]^_{|}~ ", c): - // Backslash and quote chars are reserved, but - // otherwise any punctuation chars are allowed - // in a tag name. - default: - if !unicode.IsLetter(c) && !unicode.IsDigit(c) { - return false - } - } - } - return true -} - -func fieldByIndex(v reflect.Value, index []int) reflect.Value { - for _, i := range index { - if v.Kind() == reflect.Ptr { - if v.IsNil() { - return reflect.Value{} - } - v = v.Elem() - } - v = v.Field(i) - } - return v -} - -func typeByIndex(t reflect.Type, index []int) reflect.Type { - for _, i := range index { - if t.Kind() == reflect.Ptr { - t = t.Elem() - } - t = t.Field(i).Type - } - return t -} - -// stringValues is a slice of reflect.Value holding *reflect.StringValue. -// It implements the methods to sort by string. -type stringValues []reflect.Value - -func (sv stringValues) Len() int { return len(sv) } -func (sv stringValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] } -func (sv stringValues) Less(i, j int) bool { return sv.get(i) < sv.get(j) } -func (sv stringValues) get(i int) string { return sv[i].String() } - -// parseTag splits a struct field's json tag into its name and -// comma-separated options. -func parseTag(tag string) (string, tagOptions) { - if idx := strings.Index(tag, ","); idx != -1 { - return tag[:idx], tagOptions(tag[idx+1:]) - } - return tag, tagOptions("") -} - -// Contains reports whether a comma-separated list of options -// contains a particular substr flag. substr must be surrounded by a -// string boundary or commas. -func (o tagOptions) Contains(optionName string) bool { - if len(o) == 0 { - return false - } - s := string(o) - for s != "" { - var next string - i := strings.Index(s, ",") - if i >= 0 { - s, next = s[:i], s[i+1:] - } - if s == optionName { - return true - } - s = next - } - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/writer.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/writer.go deleted file mode 100644 index a76b633..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/writer.go +++ /dev/null @@ -1,128 +0,0 @@ -/* -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 candiedyaml - -/* - * Set the writer error and return 0. - */ - -func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_WRITER_ERROR - emitter.problem = problem - - return false -} - -/* - * Flush the output buffer. - */ - -func yaml_emitter_flush(emitter *yaml_emitter_t) bool { - if emitter.write_handler == nil { - panic("Write handler must be set") /* Write handler must be set. */ - } - if emitter.encoding == yaml_ANY_ENCODING { - panic("Encoding must be set") /* Output encoding must be set. */ - } - - /* Check if the buffer is empty. */ - - if emitter.buffer_pos == 0 { - return true - } - - /* If the output encoding is UTF-8, we don't need to recode the buffer. */ - - if emitter.encoding == yaml_UTF8_ENCODING { - if err := emitter.write_handler(emitter, - emitter.buffer[:emitter.buffer_pos]); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - emitter.buffer_pos = 0 - return true - } - - /* Recode the buffer into the raw buffer. */ - - var low, high int - if emitter.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - high, low = 1, 0 - } - - pos := 0 - for pos < emitter.buffer_pos { - - /* - * See the "reader.c" code for more details on UTF-8 encoding. Note - * that we assume that the buffer contains a valid UTF-8 sequence. - */ - - /* Read the next UTF-8 character. */ - - octet := emitter.buffer[pos] - - var w int - var value rune - switch { - case octet&0x80 == 0x00: - w, value = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, value = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, value = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, value = 4, rune(octet&0x07) - } - - for k := 1; k < w; k++ { - octet = emitter.buffer[pos+k] - value = (value << 6) + (rune(octet) & 0x3F) - } - - pos += w - - /* Write the character. */ - - if value < 0x10000 { - var b [2]byte - b[high] = byte(value >> 8) - b[low] = byte(value & 0xFF) - emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1]) - } else { - /* Write the character using a surrogate pair (check "reader.c"). */ - - var b [4]byte - value -= 0x10000 - b[high] = byte(0xD8 + (value >> 18)) - b[low] = byte((value >> 10) & 0xFF) - b[high+2] = byte(0xDC + ((value >> 8) & 0xFF)) - b[low+2] = byte(value & 0xFF) - emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3]) - } - } - - /* Write the raw buffer. */ - - // Write the raw buffer. - if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - - emitter.buffer_pos = 0 - emitter.raw_buffer = emitter.raw_buffer[:0] - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yaml_definesh.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yaml_definesh.go deleted file mode 100644 index de4c05a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yaml_definesh.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -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 candiedyaml - -const ( - yaml_VERSION_MAJOR = 0 - yaml_VERSION_MINOR = 1 - yaml_VERSION_PATCH = 6 - yaml_VERSION_STRING = "0.1.6" -) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yaml_privateh.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yaml_privateh.go deleted file mode 100644 index 2b3b7d7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yaml_privateh.go +++ /dev/null @@ -1,891 +0,0 @@ -/* -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 candiedyaml - -const ( - INPUT_RAW_BUFFER_SIZE = 1024 - - /* - * The size of the input buffer. - * - * It should be possible to decode the whole raw buffer. - */ - INPUT_BUFFER_SIZE = (INPUT_RAW_BUFFER_SIZE * 3) - - /* - * The size of the output buffer. - */ - - OUTPUT_BUFFER_SIZE = 512 - - /* - * The size of the output raw buffer. - * - * It should be possible to encode the whole output buffer. - */ - - OUTPUT_RAW_BUFFER_SIZE = (OUTPUT_BUFFER_SIZE*2 + 2) - - INITIAL_STACK_SIZE = 16 - INITIAL_QUEUE_SIZE = 16 -) - -func width(b byte) int { - if b&0x80 == 0 { - return 1 - } - - if b&0xE0 == 0xC0 { - return 2 - } - - if b&0xF0 == 0xE0 { - return 3 - } - - if b&0xF8 == 0xF0 { - return 4 - } - - return 0 -} - -func copy_bytes(dest []byte, dest_pos *int, src []byte, src_pos *int) { - w := width(src[*src_pos]) - switch w { - case 4: - dest[*dest_pos+3] = src[*src_pos+3] - fallthrough - case 3: - dest[*dest_pos+2] = src[*src_pos+2] - fallthrough - case 2: - dest[*dest_pos+1] = src[*src_pos+1] - fallthrough - case 1: - dest[*dest_pos] = src[*src_pos] - default: - panic("invalid width") - } - *dest_pos += w - *src_pos += w -} - -// /* -// * Check if the character at the specified position is an alphabetical -// * character, a digit, '_', or '-'. -// */ - -func is_alpha(b byte) bool { - return (b >= '0' && b <= '9') || - (b >= 'A' && b <= 'Z') || - (b >= 'a' && b <= 'z') || - b == '_' || b == '-' -} - -// /* -// * Check if the character at the specified position is a digit. -// */ -// -func is_digit(b byte) bool { - return b >= '0' && b <= '9' -} - -// /* -// * Get the value of a digit. -// */ -// -func as_digit(b byte) int { - return int(b) - '0' -} - -// /* -// * Check if the character at the specified position is a hex-digit. -// */ -// -func is_hex(b byte) bool { - return (b >= '0' && b <= '9') || - (b >= 'A' && b <= 'F') || - (b >= 'a' && b <= 'f') -} - -// -// /* -// * Get the value of a hex-digit. -// */ -// -func as_hex(b byte) int { - if b >= 'A' && b <= 'F' { - return int(b) - 'A' + 10 - } else if b >= 'a' && b <= 'f' { - return int(b) - 'a' + 10 - } - return int(b) - '0' -} - -// #define AS_HEX_AT(string,offset) \ -// (((string).pointer[offset] >= (yaml_char_t) 'A' && \ -// (string).pointer[offset] <= (yaml_char_t) 'F') ? \ -// ((string).pointer[offset] - (yaml_char_t) 'A' + 10) : \ -// ((string).pointer[offset] >= (yaml_char_t) 'a' && \ -// (string).pointer[offset] <= (yaml_char_t) 'f') ? \ -// ((string).pointer[offset] - (yaml_char_t) 'a' + 10) : \ -// ((string).pointer[offset] - (yaml_char_t) '0')) - -// /* -// * Check if the character is a line break, space, tab, or NUL. -// */ -func is_blankz_at(b []byte, i int) bool { - return is_blank(b[i]) || is_breakz_at(b, i) -} - -// /* -// * Check if the character at the specified position is a line break. -// */ -func is_break_at(b []byte, i int) bool { - return b[i] == '\r' || /* CR (#xD)*/ - b[i] == '\n' || /* LF (#xA) */ - (b[i] == 0xC2 && b[i+1] == 0x85) || /* NEL (#x85) */ - (b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8) || /* LS (#x2028) */ - (b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) /* PS (#x2029) */ -} - -func is_breakz_at(b []byte, i int) bool { - return is_break_at(b, i) || is_z(b[i]) -} - -func is_crlf_at(b []byte, i int) bool { - return b[i] == '\r' && b[i+1] == '\n' -} - -// /* -// * Check if the character at the specified position is NUL. -// */ -func is_z(b byte) bool { - return b == 0x0 -} - -// /* -// * Check if the character at the specified position is space. -// */ -func is_space(b byte) bool { - return b == ' ' -} - -// -// /* -// * Check if the character at the specified position is tab. -// */ -func is_tab(b byte) bool { - return b == '\t' -} - -// /* -// * Check if the character at the specified position is blank (space or tab). -// */ -func is_blank(b byte) bool { - return is_space(b) || is_tab(b) -} - -// /* -// * Check if the character is ASCII. -// */ -func is_ascii(b byte) bool { - return b <= '\x7f' -} - -// /* -// * Check if the character can be printed unescaped. -// */ -func is_printable_at(b []byte, i int) bool { - return ((b[i] == 0x0A) || /* . == #x0A */ - (b[i] >= 0x20 && b[i] <= 0x7E) || /* #x20 <= . <= #x7E */ - (b[i] == 0xC2 && b[i+1] >= 0xA0) || /* #0xA0 <= . <= #xD7FF */ - (b[i] > 0xC2 && b[i] < 0xED) || - (b[i] == 0xED && b[i+1] < 0xA0) || - (b[i] == 0xEE) || - (b[i] == 0xEF && /* && . != #xFEFF */ - !(b[i+1] == 0xBB && b[i+2] == 0xBF) && - !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) -} - -func insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { - // collapse the slice - if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { - if parser.tokens_head != len(parser.tokens) { - // move the tokens down - copy(parser.tokens, parser.tokens[parser.tokens_head:]) - } - // readjust the length - parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] - parser.tokens_head = 0 - } - - parser.tokens = append(parser.tokens, *token) - if pos < 0 { - return - } - copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) - parser.tokens[parser.tokens_head+pos] = *token -} - -// /* -// * Check if the character at the specified position is BOM. -// */ -// -func is_bom_at(b []byte, i int) bool { - return b[i] == 0xEF && b[i+1] == 0xBB && b[i+2] == 0xBF -} - -// -// #ifdef HAVE_CONFIG_H -// #include -// #endif -// -// #include "./yaml.h" -// -// #include -// #include -// -// /* -// * Memory management. -// */ -// -// yaml_DECLARE(void *) -// yaml_malloc(size_t size); -// -// yaml_DECLARE(void *) -// yaml_realloc(void *ptr, size_t size); -// -// yaml_DECLARE(void) -// yaml_free(void *ptr); -// -// yaml_DECLARE(yaml_char_t *) -// yaml_strdup(const yaml_char_t *); -// -// /* -// * Reader: Ensure that the buffer contains at least `length` characters. -// */ -// -// yaml_DECLARE(int) -// yaml_parser_update_buffer(yaml_parser_t *parser, size_t length); -// -// /* -// * Scanner: Ensure that the token stack contains at least one token ready. -// */ -// -// yaml_DECLARE(int) -// yaml_parser_fetch_more_tokens(yaml_parser_t *parser); -// -// /* -// * The size of the input raw buffer. -// */ -// -// #define INPUT_RAW_BUFFER_SIZE 16384 -// -// /* -// * The size of the input buffer. -// * -// * It should be possible to decode the whole raw buffer. -// */ -// -// #define INPUT_BUFFER_SIZE (INPUT_RAW_BUFFER_SIZE*3) -// -// /* -// * The size of the output buffer. -// */ -// -// #define OUTPUT_BUFFER_SIZE 16384 -// -// /* -// * The size of the output raw buffer. -// * -// * It should be possible to encode the whole output buffer. -// */ -// -// #define OUTPUT_RAW_BUFFER_SIZE (OUTPUT_BUFFER_SIZE*2+2) -// -// /* -// * The size of other stacks and queues. -// */ -// -// #define INITIAL_STACK_SIZE 16 -// #define INITIAL_QUEUE_SIZE 16 -// #define INITIAL_STRING_SIZE 16 -// -// /* -// * Buffer management. -// */ -// -// #define BUFFER_INIT(context,buffer,size) \ -// (((buffer).start = yaml_malloc(size)) ? \ -// ((buffer).last = (buffer).pointer = (buffer).start, \ -// (buffer).end = (buffer).start+(size), \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// #define BUFFER_DEL(context,buffer) \ -// (yaml_free((buffer).start), \ -// (buffer).start = (buffer).pointer = (buffer).end = 0) -// -// /* -// * String management. -// */ -// -// typedef struct { -// yaml_char_t *start; -// yaml_char_t *end; -// yaml_char_t *pointer; -// } yaml_string_t; -// -// yaml_DECLARE(int) -// yaml_string_extend(yaml_char_t **start, -// yaml_char_t **pointer, yaml_char_t **end); -// -// yaml_DECLARE(int) -// yaml_string_join( -// yaml_char_t **a_start, yaml_char_t **a_pointer, yaml_char_t **a_end, -// yaml_char_t **b_start, yaml_char_t **b_pointer, yaml_char_t **b_end); -// -// #define NULL_STRING { NULL, NULL, NULL } -// -// #define STRING(string,length) { (string), (string)+(length), (string) } -// -// #define STRING_ASSIGN(value,string,length) \ -// ((value).start = (string), \ -// (value).end = (string)+(length), \ -// (value).pointer = (string)) -// -// #define STRING_INIT(context,string,size) \ -// (((string).start = yaml_malloc(size)) ? \ -// ((string).pointer = (string).start, \ -// (string).end = (string).start+(size), \ -// memset((string).start, 0, (size)), \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// #define STRING_DEL(context,string) \ -// (yaml_free((string).start), \ -// (string).start = (string).pointer = (string).end = 0) -// -// #define STRING_EXTEND(context,string) \ -// (((string).pointer+5 < (string).end) \ -// || yaml_string_extend(&(string).start, \ -// &(string).pointer, &(string).end)) -// -// #define CLEAR(context,string) \ -// ((string).pointer = (string).start, \ -// memset((string).start, 0, (string).end-(string).start)) -// -// #define JOIN(context,string_a,string_b) \ -// ((yaml_string_join(&(string_a).start, &(string_a).pointer, \ -// &(string_a).end, &(string_b).start, \ -// &(string_b).pointer, &(string_b).end)) ? \ -// ((string_b).pointer = (string_b).start, \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// /* -// * String check operations. -// */ -// -// /* -// * Check the octet at the specified position. -// */ -// -// #define CHECK_AT(string,octet,offset) \ -// ((string).pointer[offset] == (yaml_char_t)(octet)) -// -// /* -// * Check the current octet in the buffer. -// */ -// -// #define CHECK(string,octet) CHECK_AT((string),(octet),0) -// -// /* -// * Check if the character at the specified position is an alphabetical -// * character, a digit, '_', or '-'. -// */ -// -// #define IS_ALPHA_AT(string,offset) \ -// (((string).pointer[offset] >= (yaml_char_t) '0' && \ -// (string).pointer[offset] <= (yaml_char_t) '9') || \ -// ((string).pointer[offset] >= (yaml_char_t) 'A' && \ -// (string).pointer[offset] <= (yaml_char_t) 'Z') || \ -// ((string).pointer[offset] >= (yaml_char_t) 'a' && \ -// (string).pointer[offset] <= (yaml_char_t) 'z') || \ -// (string).pointer[offset] == '_' || \ -// (string).pointer[offset] == '-') -// -// #define IS_ALPHA(string) IS_ALPHA_AT((string),0) -// -// /* -// * Check if the character at the specified position is a digit. -// */ -// -// #define IS_DIGIT_AT(string,offset) \ -// (((string).pointer[offset] >= (yaml_char_t) '0' && \ -// (string).pointer[offset] <= (yaml_char_t) '9')) -// -// #define IS_DIGIT(string) IS_DIGIT_AT((string),0) -// -// /* -// * Get the value of a digit. -// */ -// -// #define AS_DIGIT_AT(string,offset) \ -// ((string).pointer[offset] - (yaml_char_t) '0') -// -// #define AS_DIGIT(string) AS_DIGIT_AT((string),0) -// -// /* -// * Check if the character at the specified position is a hex-digit. -// */ -// -// #define IS_HEX_AT(string,offset) \ -// (((string).pointer[offset] >= (yaml_char_t) '0' && \ -// (string).pointer[offset] <= (yaml_char_t) '9') || \ -// ((string).pointer[offset] >= (yaml_char_t) 'A' && \ -// (string).pointer[offset] <= (yaml_char_t) 'F') || \ -// ((string).pointer[offset] >= (yaml_char_t) 'a' && \ -// (string).pointer[offset] <= (yaml_char_t) 'f')) -// -// #define IS_HEX(string) IS_HEX_AT((string),0) -// -// /* -// * Get the value of a hex-digit. -// */ -// -// #define AS_HEX_AT(string,offset) \ -// (((string).pointer[offset] >= (yaml_char_t) 'A' && \ -// (string).pointer[offset] <= (yaml_char_t) 'F') ? \ -// ((string).pointer[offset] - (yaml_char_t) 'A' + 10) : \ -// ((string).pointer[offset] >= (yaml_char_t) 'a' && \ -// (string).pointer[offset] <= (yaml_char_t) 'f') ? \ -// ((string).pointer[offset] - (yaml_char_t) 'a' + 10) : \ -// ((string).pointer[offset] - (yaml_char_t) '0')) -// -// #define AS_HEX(string) AS_HEX_AT((string),0) -// -// /* -// * Check if the character is ASCII. -// */ -// -// #define IS_ASCII_AT(string,offset) \ -// ((string).pointer[offset] <= (yaml_char_t) '\x7F') -// -// #define IS_ASCII(string) IS_ASCII_AT((string),0) -// -// /* -// * Check if the character can be printed unescaped. -// */ -// -// #define IS_PRINTABLE_AT(string,offset) \ -// (((string).pointer[offset] == 0x0A) /* . == #x0A */ \ -// || ((string).pointer[offset] >= 0x20 /* #x20 <= . <= #x7E */ \ -// && (string).pointer[offset] <= 0x7E) \ -// || ((string).pointer[offset] == 0xC2 /* #0xA0 <= . <= #xD7FF */ \ -// && (string).pointer[offset+1] >= 0xA0) \ -// || ((string).pointer[offset] > 0xC2 \ -// && (string).pointer[offset] < 0xED) \ -// || ((string).pointer[offset] == 0xED \ -// && (string).pointer[offset+1] < 0xA0) \ -// || ((string).pointer[offset] == 0xEE) \ -// || ((string).pointer[offset] == 0xEF /* #xE000 <= . <= #xFFFD */ \ -// && !((string).pointer[offset+1] == 0xBB /* && . != #xFEFF */ \ -// && (string).pointer[offset+2] == 0xBF) \ -// && !((string).pointer[offset+1] == 0xBF \ -// && ((string).pointer[offset+2] == 0xBE \ -// || (string).pointer[offset+2] == 0xBF)))) -// -// #define IS_PRINTABLE(string) IS_PRINTABLE_AT((string),0) -// -// /* -// * Check if the character at the specified position is NUL. -// */ -// -// #define IS_Z_AT(string,offset) CHECK_AT((string),'\0',(offset)) -// -// #define IS_Z(string) IS_Z_AT((string),0) -// -// /* -// * Check if the character at the specified position is BOM. -// */ -// -// #define IS_BOM_AT(string,offset) \ -// (CHECK_AT((string),'\xEF',(offset)) \ -// && CHECK_AT((string),'\xBB',(offset)+1) \ -// && CHECK_AT((string),'\xBF',(offset)+2)) /* BOM (#xFEFF) */ -// -// #define IS_BOM(string) IS_BOM_AT(string,0) -// -// /* -// * Check if the character at the specified position is space. -// */ -// -// #define IS_SPACE_AT(string,offset) CHECK_AT((string),' ',(offset)) -// -// #define IS_SPACE(string) IS_SPACE_AT((string),0) -// -// /* -// * Check if the character at the specified position is tab. -// */ -// -// #define IS_TAB_AT(string,offset) CHECK_AT((string),'\t',(offset)) -// -// #define IS_TAB(string) IS_TAB_AT((string),0) -// -// /* -// * Check if the character at the specified position is blank (space or tab). -// */ -// -// #define IS_BLANK_AT(string,offset) \ -// (IS_SPACE_AT((string),(offset)) || IS_TAB_AT((string),(offset))) -// -// #define IS_BLANK(string) IS_BLANK_AT((string),0) -// -// /* -// * Check if the character at the specified position is a line break. -// */ -// -// #define IS_BREAK_AT(string,offset) \ -// (CHECK_AT((string),'\r',(offset)) /* CR (#xD)*/ \ -// || CHECK_AT((string),'\n',(offset)) /* LF (#xA) */ \ -// || (CHECK_AT((string),'\xC2',(offset)) \ -// && CHECK_AT((string),'\x85',(offset)+1)) /* NEL (#x85) */ \ -// || (CHECK_AT((string),'\xE2',(offset)) \ -// && CHECK_AT((string),'\x80',(offset)+1) \ -// && CHECK_AT((string),'\xA8',(offset)+2)) /* LS (#x2028) */ \ -// || (CHECK_AT((string),'\xE2',(offset)) \ -// && CHECK_AT((string),'\x80',(offset)+1) \ -// && CHECK_AT((string),'\xA9',(offset)+2))) /* PS (#x2029) */ -// -// #define IS_BREAK(string) IS_BREAK_AT((string),0) -// -// #define IS_CRLF_AT(string,offset) \ -// (CHECK_AT((string),'\r',(offset)) && CHECK_AT((string),'\n',(offset)+1)) -// -// #define IS_CRLF(string) IS_CRLF_AT((string),0) -// -// /* -// * Check if the character is a line break or NUL. -// */ -// -// #define IS_BREAKZ_AT(string,offset) \ -// (IS_BREAK_AT((string),(offset)) || IS_Z_AT((string),(offset))) -// -// #define IS_BREAKZ(string) IS_BREAKZ_AT((string),0) -// -// /* -// * Check if the character is a line break, space, or NUL. -// */ -// -// #define IS_SPACEZ_AT(string,offset) \ -// (IS_SPACE_AT((string),(offset)) || IS_BREAKZ_AT((string),(offset))) -// -// #define IS_SPACEZ(string) IS_SPACEZ_AT((string),0) -// -// /* -// * Check if the character is a line break, space, tab, or NUL. -// */ -// -// #define IS_BLANKZ_AT(string,offset) \ -// (IS_BLANK_AT((string),(offset)) || IS_BREAKZ_AT((string),(offset))) -// -// #define IS_BLANKZ(string) IS_BLANKZ_AT((string),0) -// -// /* -// * Determine the width of the character. -// */ -// -// #define WIDTH_AT(string,offset) \ -// (((string).pointer[offset] & 0x80) == 0x00 ? 1 : \ -// ((string).pointer[offset] & 0xE0) == 0xC0 ? 2 : \ -// ((string).pointer[offset] & 0xF0) == 0xE0 ? 3 : \ -// ((string).pointer[offset] & 0xF8) == 0xF0 ? 4 : 0) -// -// #define WIDTH(string) WIDTH_AT((string),0) -// -// /* -// * Move the string pointer to the next character. -// */ -// -// #define MOVE(string) ((string).pointer += WIDTH((string))) -// -// /* -// * Copy a character and move the pointers of both strings. -// */ -// -// #define COPY(string_a,string_b) \ -// ((*(string_b).pointer & 0x80) == 0x00 ? \ -// (*((string_a).pointer++) = *((string_b).pointer++)) : \ -// (*(string_b).pointer & 0xE0) == 0xC0 ? \ -// (*((string_a).pointer++) = *((string_b).pointer++), \ -// *((string_a).pointer++) = *((string_b).pointer++)) : \ -// (*(string_b).pointer & 0xF0) == 0xE0 ? \ -// (*((string_a).pointer++) = *((string_b).pointer++), \ -// *((string_a).pointer++) = *((string_b).pointer++), \ -// *((string_a).pointer++) = *((string_b).pointer++)) : \ -// (*(string_b).pointer & 0xF8) == 0xF0 ? \ -// (*((string_a).pointer++) = *((string_b).pointer++), \ -// *((string_a).pointer++) = *((string_b).pointer++), \ -// *((string_a).pointer++) = *((string_b).pointer++), \ -// *((string_a).pointer++) = *((string_b).pointer++)) : 0) -// -// /* -// * Stack and queue management. -// */ -// -// yaml_DECLARE(int) -// yaml_stack_extend(void **start, void **top, void **end); -// -// yaml_DECLARE(int) -// yaml_queue_extend(void **start, void **head, void **tail, void **end); -// -// #define STACK_INIT(context,stack,size) \ -// (((stack).start = yaml_malloc((size)*sizeof(*(stack).start))) ? \ -// ((stack).top = (stack).start, \ -// (stack).end = (stack).start+(size), \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// #define STACK_DEL(context,stack) \ -// (yaml_free((stack).start), \ -// (stack).start = (stack).top = (stack).end = 0) -// -// #define STACK_EMPTY(context,stack) \ -// ((stack).start == (stack).top) -// -// #define PUSH(context,stack,value) \ -// (((stack).top != (stack).end \ -// || yaml_stack_extend((void **)&(stack).start, \ -// (void **)&(stack).top, (void **)&(stack).end)) ? \ -// (*((stack).top++) = value, \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// #define POP(context,stack) \ -// (*(--(stack).top)) -// -// #define QUEUE_INIT(context,queue,size) \ -// (((queue).start = yaml_malloc((size)*sizeof(*(queue).start))) ? \ -// ((queue).head = (queue).tail = (queue).start, \ -// (queue).end = (queue).start+(size), \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// #define QUEUE_DEL(context,queue) \ -// (yaml_free((queue).start), \ -// (queue).start = (queue).head = (queue).tail = (queue).end = 0) -// -// #define QUEUE_EMPTY(context,queue) \ -// ((queue).head == (queue).tail) -// -// #define ENQUEUE(context,queue,value) \ -// (((queue).tail != (queue).end \ -// || yaml_queue_extend((void **)&(queue).start, (void **)&(queue).head, \ -// (void **)&(queue).tail, (void **)&(queue).end)) ? \ -// (*((queue).tail++) = value, \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// #define DEQUEUE(context,queue) \ -// (*((queue).head++)) -// -// #define QUEUE_INSERT(context,queue,index,value) \ -// (((queue).tail != (queue).end \ -// || yaml_queue_extend((void **)&(queue).start, (void **)&(queue).head, \ -// (void **)&(queue).tail, (void **)&(queue).end)) ? \ -// (memmove((queue).head+(index)+1,(queue).head+(index), \ -// ((queue).tail-(queue).head-(index))*sizeof(*(queue).start)), \ -// *((queue).head+(index)) = value, \ -// (queue).tail++, \ -// 1) : \ -// ((context)->error = yaml_MEMORY_ERROR, \ -// 0)) -// -// /* -// * Token initializers. -// */ -// -// #define TOKEN_INIT(token,token_type,token_start_mark,token_end_mark) \ -// (memset(&(token), 0, sizeof(yaml_token_t)), \ -// (token).type = (token_type), \ -// (token).start_mark = (token_start_mark), \ -// (token).end_mark = (token_end_mark)) -// -// #define STREAM_START_TOKEN_INIT(token,token_encoding,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_STREAM_START_TOKEN,(start_mark),(end_mark)), \ -// (token).data.stream_start.encoding = (token_encoding)) -// -// #define STREAM_END_TOKEN_INIT(token,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_STREAM_END_TOKEN,(start_mark),(end_mark))) -// -// #define ALIAS_TOKEN_INIT(token,token_value,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_ALIAS_TOKEN,(start_mark),(end_mark)), \ -// (token).data.alias.value = (token_value)) -// -// #define ANCHOR_TOKEN_INIT(token,token_value,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_ANCHOR_TOKEN,(start_mark),(end_mark)), \ -// (token).data.anchor.value = (token_value)) -// -// #define TAG_TOKEN_INIT(token,token_handle,token_suffix,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_TAG_TOKEN,(start_mark),(end_mark)), \ -// (token).data.tag.handle = (token_handle), \ -// (token).data.tag.suffix = (token_suffix)) -// -// #define SCALAR_TOKEN_INIT(token,token_value,token_length,token_style,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_SCALAR_TOKEN,(start_mark),(end_mark)), \ -// (token).data.scalar.value = (token_value), \ -// (token).data.scalar.length = (token_length), \ -// (token).data.scalar.style = (token_style)) -// -// #define VERSION_DIRECTIVE_TOKEN_INIT(token,token_major,token_minor,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_VERSION_DIRECTIVE_TOKEN,(start_mark),(end_mark)), \ -// (token).data.version_directive.major = (token_major), \ -// (token).data.version_directive.minor = (token_minor)) -// -// #define TAG_DIRECTIVE_TOKEN_INIT(token,token_handle,token_prefix,start_mark,end_mark) \ -// (TOKEN_INIT((token),yaml_TAG_DIRECTIVE_TOKEN,(start_mark),(end_mark)), \ -// (token).data.tag_directive.handle = (token_handle), \ -// (token).data.tag_directive.prefix = (token_prefix)) -// -// /* -// * Event initializers. -// */ -// -// #define EVENT_INIT(event,event_type,event_start_mark,event_end_mark) \ -// (memset(&(event), 0, sizeof(yaml_event_t)), \ -// (event).type = (event_type), \ -// (event).start_mark = (event_start_mark), \ -// (event).end_mark = (event_end_mark)) -// -// #define STREAM_START_EVENT_INIT(event,event_encoding,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_STREAM_START_EVENT,(start_mark),(end_mark)), \ -// (event).data.stream_start.encoding = (event_encoding)) -// -// #define STREAM_END_EVENT_INIT(event,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_STREAM_END_EVENT,(start_mark),(end_mark))) -// -// #define DOCUMENT_START_EVENT_INIT(event,event_version_directive, \ -// event_tag_directives_start,event_tag_directives_end,event_implicit,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_DOCUMENT_START_EVENT,(start_mark),(end_mark)), \ -// (event).data.document_start.version_directive = (event_version_directive), \ -// (event).data.document_start.tag_directives.start = (event_tag_directives_start), \ -// (event).data.document_start.tag_directives.end = (event_tag_directives_end), \ -// (event).data.document_start.implicit = (event_implicit)) -// -// #define DOCUMENT_END_EVENT_INIT(event,event_implicit,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_DOCUMENT_END_EVENT,(start_mark),(end_mark)), \ -// (event).data.document_end.implicit = (event_implicit)) -// -// #define ALIAS_EVENT_INIT(event,event_anchor,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_ALIAS_EVENT,(start_mark),(end_mark)), \ -// (event).data.alias.anchor = (event_anchor)) -// -// #define SCALAR_EVENT_INIT(event,event_anchor,event_tag,event_value,event_length, \ -// event_plain_implicit, event_quoted_implicit,event_style,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_SCALAR_EVENT,(start_mark),(end_mark)), \ -// (event).data.scalar.anchor = (event_anchor), \ -// (event).data.scalar.tag = (event_tag), \ -// (event).data.scalar.value = (event_value), \ -// (event).data.scalar.length = (event_length), \ -// (event).data.scalar.plain_implicit = (event_plain_implicit), \ -// (event).data.scalar.quoted_implicit = (event_quoted_implicit), \ -// (event).data.scalar.style = (event_style)) -// -// #define SEQUENCE_START_EVENT_INIT(event,event_anchor,event_tag, \ -// event_implicit,event_style,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_SEQUENCE_START_EVENT,(start_mark),(end_mark)), \ -// (event).data.sequence_start.anchor = (event_anchor), \ -// (event).data.sequence_start.tag = (event_tag), \ -// (event).data.sequence_start.implicit = (event_implicit), \ -// (event).data.sequence_start.style = (event_style)) -// -// #define SEQUENCE_END_EVENT_INIT(event,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_SEQUENCE_END_EVENT,(start_mark),(end_mark))) -// -// #define MAPPING_START_EVENT_INIT(event,event_anchor,event_tag, \ -// event_implicit,event_style,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_MAPPING_START_EVENT,(start_mark),(end_mark)), \ -// (event).data.mapping_start.anchor = (event_anchor), \ -// (event).data.mapping_start.tag = (event_tag), \ -// (event).data.mapping_start.implicit = (event_implicit), \ -// (event).data.mapping_start.style = (event_style)) -// -// #define MAPPING_END_EVENT_INIT(event,start_mark,end_mark) \ -// (EVENT_INIT((event),yaml_MAPPING_END_EVENT,(start_mark),(end_mark))) -// -// /* -// * Document initializer. -// */ -// -// #define DOCUMENT_INIT(document,document_nodes_start,document_nodes_end, \ -// document_version_directive,document_tag_directives_start, \ -// document_tag_directives_end,document_start_implicit, \ -// document_end_implicit,document_start_mark,document_end_mark) \ -// (memset(&(document), 0, sizeof(yaml_document_t)), \ -// (document).nodes.start = (document_nodes_start), \ -// (document).nodes.end = (document_nodes_end), \ -// (document).nodes.top = (document_nodes_start), \ -// (document).version_directive = (document_version_directive), \ -// (document).tag_directives.start = (document_tag_directives_start), \ -// (document).tag_directives.end = (document_tag_directives_end), \ -// (document).start_implicit = (document_start_implicit), \ -// (document).end_implicit = (document_end_implicit), \ -// (document).start_mark = (document_start_mark), \ -// (document).end_mark = (document_end_mark)) -// -// /* -// * Node initializers. -// */ -// -// #define NODE_INIT(node,node_type,node_tag,node_start_mark,node_end_mark) \ -// (memset(&(node), 0, sizeof(yaml_node_t)), \ -// (node).type = (node_type), \ -// (node).tag = (node_tag), \ -// (node).start_mark = (node_start_mark), \ -// (node).end_mark = (node_end_mark)) -// -// #define SCALAR_NODE_INIT(node,node_tag,node_value,node_length, \ -// node_style,start_mark,end_mark) \ -// (NODE_INIT((node),yaml_SCALAR_NODE,(node_tag),(start_mark),(end_mark)), \ -// (node).data.scalar.value = (node_value), \ -// (node).data.scalar.length = (node_length), \ -// (node).data.scalar.style = (node_style)) -// -// #define SEQUENCE_NODE_INIT(node,node_tag,node_items_start,node_items_end, \ -// node_style,start_mark,end_mark) \ -// (NODE_INIT((node),yaml_SEQUENCE_NODE,(node_tag),(start_mark),(end_mark)), \ -// (node).data.sequence.items.start = (node_items_start), \ -// (node).data.sequence.items.end = (node_items_end), \ -// (node).data.sequence.items.top = (node_items_start), \ -// (node).data.sequence.style = (node_style)) -// -// #define MAPPING_NODE_INIT(node,node_tag,node_pairs_start,node_pairs_end, \ -// node_style,start_mark,end_mark) \ -// (NODE_INIT((node),yaml_MAPPING_NODE,(node_tag),(start_mark),(end_mark)), \ -// (node).data.mapping.pairs.start = (node_pairs_start), \ -// (node).data.mapping.pairs.end = (node_pairs_end), \ -// (node).data.mapping.pairs.top = (node_pairs_start), \ -// (node).data.mapping.style = (node_style)) -// diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yamlh.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yamlh.go deleted file mode 100644 index d608dbb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/candiedyaml/yamlh.go +++ /dev/null @@ -1,953 +0,0 @@ -/* -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 candiedyaml - -import ( - "fmt" - "io" -) - -/** The version directive data. */ -type yaml_version_directive_t struct { - major int // The major version number - minor int // The minor version number -} - -/** The tag directive data. */ -type yaml_tag_directive_t struct { - handle []byte // The tag handle - prefix []byte // The tag prefix -} - -/** The stream encoding. */ -type yaml_encoding_t int - -const ( - /** Let the parser choose the encoding. */ - yaml_ANY_ENCODING yaml_encoding_t = iota - /** The defau lt UTF-8 encoding. */ - yaml_UTF8_ENCODING - /** The UTF-16-LE encoding with BOM. */ - yaml_UTF16LE_ENCODING - /** The UTF-16-BE encoding with BOM. */ - yaml_UTF16BE_ENCODING -) - -/** Line break types. */ -type yaml_break_t int - -const ( - yaml_ANY_BREAK yaml_break_t = iota /** Let the parser choose the break type. */ - yaml_CR_BREAK /** Use CR for line breaks (Mac style). */ - yaml_LN_BREAK /** Use LN for line breaks (Unix style). */ - yaml_CRLN_BREAK /** Use CR LN for line breaks (DOS style). */ -) - -/** Many bad things could happen with the parser and emitter. */ -type YAML_error_type_t int - -const ( - /** No error is produced. */ - yaml_NO_ERROR YAML_error_type_t = iota - - /** Cannot allocate or reallocate a block of memory. */ - yaml_MEMORY_ERROR - - /** Cannot read or decode the input stream. */ - yaml_READER_ERROR - /** Cannot scan the input stream. */ - yaml_SCANNER_ERROR - /** Cannot parse the input stream. */ - yaml_PARSER_ERROR - /** Cannot compose a YAML document. */ - yaml_COMPOSER_ERROR - - /** Cannot write to the output stream. */ - yaml_WRITER_ERROR - /** Cannot emit a YAML stream. */ - yaml_EMITTER_ERROR -) - -/** The pointer position. */ -type YAML_mark_t struct { - /** The position index. */ - index int - - /** The position line. */ - line int - - /** The position column. */ - column int -} - -func (m YAML_mark_t) String() string { - return fmt.Sprintf("line %d, column %d", m.line, m.column) -} - -/** @} */ - -/** - * @defgroup styles Node Styles - * @{ - */ - -type yaml_style_t int - -/** Scalar styles. */ -type yaml_scalar_style_t yaml_style_t - -const ( - /** Let the emitter choose the style. */ - yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota - - /** The plain scalar style. */ - yaml_PLAIN_SCALAR_STYLE - - /** The single-quoted scalar style. */ - yaml_SINGLE_QUOTED_SCALAR_STYLE - /** The double-quoted scalar style. */ - yaml_DOUBLE_QUOTED_SCALAR_STYLE - - /** The literal scalar style. */ - yaml_LITERAL_SCALAR_STYLE - /** The folded scalar style. */ - yaml_FOLDED_SCALAR_STYLE -) - -/** Sequence styles. */ -type yaml_sequence_style_t yaml_style_t - -const ( - /** Let the emitter choose the style. */ - yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota - - /** The block sequence style. */ - yaml_BLOCK_SEQUENCE_STYLE - /** The flow sequence style. */ - yaml_FLOW_SEQUENCE_STYLE -) - -/** Mapping styles. */ -type yaml_mapping_style_t yaml_style_t - -const ( - /** Let the emitter choose the style. */ - yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota - - /** The block mapping style. */ - yaml_BLOCK_MAPPING_STYLE - /** The flow mapping style. */ - yaml_FLOW_MAPPING_STYLE - -/* yaml_FLOW_SET_MAPPING_STYLE */ -) - -/** @} */ - -/** - * @defgroup tokens Tokens - * @{ - */ - -/** Token types. */ -type yaml_token_type_t int - -const ( - /** An empty token. */ - yaml_NO_TOKEN yaml_token_type_t = iota - - /** A STREAM-START token. */ - yaml_STREAM_START_TOKEN - /** A STREAM-END token. */ - yaml_STREAM_END_TOKEN - - /** A VERSION-DIRECTIVE token. */ - yaml_VERSION_DIRECTIVE_TOKEN - /** A TAG-DIRECTIVE token. */ - yaml_TAG_DIRECTIVE_TOKEN - /** A DOCUMENT-START token. */ - yaml_DOCUMENT_START_TOKEN - /** A DOCUMENT-END token. */ - yaml_DOCUMENT_END_TOKEN - - /** A BLOCK-SEQUENCE-START token. */ - yaml_BLOCK_SEQUENCE_START_TOKEN - /** A BLOCK-SEQUENCE-END token. */ - yaml_BLOCK_MAPPING_START_TOKEN - /** A BLOCK-END token. */ - yaml_BLOCK_END_TOKEN - - /** A FLOW-SEQUENCE-START token. */ - yaml_FLOW_SEQUENCE_START_TOKEN - /** A FLOW-SEQUENCE-END token. */ - yaml_FLOW_SEQUENCE_END_TOKEN - /** A FLOW-MAPPING-START token. */ - yaml_FLOW_MAPPING_START_TOKEN - /** A FLOW-MAPPING-END token. */ - yaml_FLOW_MAPPING_END_TOKEN - - /** A BLOCK-ENTRY token. */ - yaml_BLOCK_ENTRY_TOKEN - /** A FLOW-ENTRY token. */ - yaml_FLOW_ENTRY_TOKEN - /** A KEY token. */ - yaml_KEY_TOKEN - /** A VALUE token. */ - yaml_VALUE_TOKEN - - /** An ALIAS token. */ - yaml_ALIAS_TOKEN - /** An ANCHOR token. */ - yaml_ANCHOR_TOKEN - /** A TAG token. */ - yaml_TAG_TOKEN - /** A SCALAR token. */ - yaml_SCALAR_TOKEN -) - -/** The token structure. */ -type yaml_token_t struct { - - /** The token type. */ - token_type yaml_token_type_t - - /** The token data. */ - /** The stream start (for @c yaml_STREAM_START_TOKEN). */ - encoding yaml_encoding_t - - /** The alias (for @c yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN,yaml_TAG_TOKEN ). */ - /** The anchor (for @c ). */ - /** The scalar value (for @c ). */ - value []byte - - /** The tag suffix. */ - suffix []byte - - /** The scalar value (for @c yaml_SCALAR_TOKEN). */ - /** The scalar style. */ - style yaml_scalar_style_t - - /** The version directive (for @c yaml_VERSION_DIRECTIVE_TOKEN). */ - version_directive yaml_version_directive_t - - /** The tag directive (for @c yaml_TAG_DIRECTIVE_TOKEN). */ - prefix []byte - - /** The beginning of the token. */ - start_mark YAML_mark_t - /** The end of the token. */ - end_mark YAML_mark_t - - major, minor int -} - -/** - * @defgroup events Events - * @{ - */ - -/** Event types. */ -type yaml_event_type_t int - -const ( - /** An empty event. */ - yaml_NO_EVENT yaml_event_type_t = iota - - /** A STREAM-START event. */ - yaml_STREAM_START_EVENT - /** A STREAM-END event. */ - yaml_STREAM_END_EVENT - - /** A DOCUMENT-START event. */ - yaml_DOCUMENT_START_EVENT - /** A DOCUMENT-END event. */ - yaml_DOCUMENT_END_EVENT - - /** An ALIAS event. */ - yaml_ALIAS_EVENT - /** A SCALAR event. */ - yaml_SCALAR_EVENT - - /** A SEQUENCE-START event. */ - yaml_SEQUENCE_START_EVENT - /** A SEQUENCE-END event. */ - yaml_SEQUENCE_END_EVENT - - /** A MAPPING-START event. */ - yaml_MAPPING_START_EVENT - /** A MAPPING-END event. */ - yaml_MAPPING_END_EVENT -) - -/** The event structure. */ -type yaml_event_t struct { - - /** The event type. */ - event_type yaml_event_type_t - - /** The stream parameters (for @c yaml_STREAM_START_EVENT). */ - encoding yaml_encoding_t - - /** The document parameters (for @c yaml_DOCUMENT_START_EVENT). */ - version_directive *yaml_version_directive_t - - /** The beginning and end of the tag directives list. */ - tag_directives []yaml_tag_directive_t - - /** The document parameters (for @c yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT,yaml_MAPPING_START_EVENT). */ - /** Is the document indicator implicit? */ - implicit bool - - /** The alias parameters (for @c yaml_ALIAS_EVENT,yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). */ - /** The anchor. */ - anchor []byte - - /** The scalar parameters (for @c yaml_SCALAR_EVENT,yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). */ - /** The tag. */ - tag []byte - /** The scalar value. */ - value []byte - - /** Is the tag optional for the plain style? */ - plain_implicit bool - /** Is the tag optional for any non-plain style? */ - quoted_implicit bool - - /** The sequence parameters (for @c yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). */ - /** The sequence style. */ - /** The scalar style. */ - style yaml_style_t - - /** The beginning of the event. */ - start_mark, end_mark YAML_mark_t -} - -/** - * @defgroup nodes Nodes - * @{ - */ - -const ( - /** The tag @c !!null with the only possible value: @c null. */ - yaml_NULL_TAG = "tag:yaml.org,2002:null" - /** The tag @c !!bool with the values: @c true and @c falce. */ - yaml_BOOL_TAG = "tag:yaml.org,2002:bool" - /** The tag @c !!str for string values. */ - yaml_STR_TAG = "tag:yaml.org,2002:str" - /** The tag @c !!int for integer values. */ - yaml_INT_TAG = "tag:yaml.org,2002:int" - /** The tag @c !!float for float values. */ - yaml_FLOAT_TAG = "tag:yaml.org,2002:float" - /** The tag @c !!timestamp for date and time values. */ - yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" - - /** The tag @c !!seq is used to denote sequences. */ - yaml_SEQ_TAG = "tag:yaml.org,2002:seq" - /** The tag @c !!map is used to denote mapping. */ - yaml_MAP_TAG = "tag:yaml.org,2002:map" - - /** The default scalar tag is @c !!str. */ - yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG - /** The default sequence tag is @c !!seq. */ - yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG - /** The default mapping tag is @c !!map. */ - yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG - - yaml_BINARY_TAG = "tag:yaml.org,2002:binary" -) - -/** Node types. */ -type yaml_node_type_t int - -const ( - /** An empty node. */ - yaml_NO_NODE yaml_node_type_t = iota - - /** A scalar node. */ - yaml_SCALAR_NODE - /** A sequence node. */ - yaml_SEQUENCE_NODE - /** A mapping node. */ - yaml_MAPPING_NODE -) - -/** An element of a sequence node. */ -type yaml_node_item_t int - -/** An element of a mapping node. */ -type yaml_node_pair_t struct { - /** The key of the element. */ - key int - /** The value of the element. */ - value int -} - -/** The node structure. */ -type yaml_node_t struct { - - /** The node type. */ - node_type yaml_node_type_t - - /** The node tag. */ - tag []byte - - /** The scalar parameters (for @c yaml_SCALAR_NODE). */ - scalar struct { - /** The scalar value. */ - value []byte - /** The scalar style. */ - style yaml_scalar_style_t - } - - /** The sequence parameters (for @c yaml_SEQUENCE_NODE). */ - sequence struct { - /** The stack of sequence items. */ - items []yaml_node_item_t - /** The sequence style. */ - style yaml_sequence_style_t - } - - /** The mapping parameters (for @c yaml_MAPPING_NODE). */ - mapping struct { - /** The stack of mapping pairs (key, value). */ - pairs []yaml_node_pair_t - /** The mapping style. */ - style yaml_mapping_style_t - } - - /** The beginning of the node. */ - start_mark YAML_mark_t - /** The end of the node. */ - end_mark YAML_mark_t -} - -/** The document structure. */ -type yaml_document_t struct { - - /** The document nodes. */ - nodes []yaml_node_t - - /** The version directive. */ - version_directive *yaml_version_directive_t - - /** The list of tag directives. */ - tags []yaml_tag_directive_t - - /** Is the document start indicator implicit? */ - start_implicit bool - /** Is the document end indicator implicit? */ - end_implicit bool - - /** The beginning of the document. */ - start_mark YAML_mark_t - /** The end of the document. */ - end_mark YAML_mark_t -} - -/** - * The prototype of a read handler. - * - * The read handler is called when the parser needs to read more bytes from the - * source. The handler should write not more than @a size bytes to the @a - * buffer. The number of written bytes should be set to the @a length variable. - * - * @param[in,out] data A pointer to an application data specified by - * yaml_parser_set_input(). - * @param[out] buffer The buffer to write the data from the source. - * @param[in] size The size of the buffer. - * @param[out] size_read The actual number of bytes read from the source. - * - * @returns On success, the handler should return @c 1. If the handler failed, - * the returned value should be @c 0. On EOF, the handler should set the - * @a size_read to @c 0 and return @c 1. - */ - -type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) - -/** - * This structure holds information about a potential simple key. - */ - -type yaml_simple_key_t struct { - /** Is a simple key possible? */ - possible bool - - /** Is a simple key required? */ - required bool - - /** The number of the token. */ - token_number int - - /** The position mark. */ - mark YAML_mark_t -} - -/** - * The states of the parser. - */ -type yaml_parser_state_t int - -const ( - /** Expect STREAM-START. */ - yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota - /** Expect the beginning of an implicit document. */ - yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE - /** Expect DOCUMENT-START. */ - yaml_PARSE_DOCUMENT_START_STATE - /** Expect the content of a document. */ - yaml_PARSE_DOCUMENT_CONTENT_STATE - /** Expect DOCUMENT-END. */ - yaml_PARSE_DOCUMENT_END_STATE - /** Expect a block node. */ - yaml_PARSE_BLOCK_NODE_STATE - /** Expect a block node or indentless sequence. */ - yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE - /** Expect a flow node. */ - yaml_PARSE_FLOW_NODE_STATE - /** Expect the first entry of a block sequence. */ - yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE - /** Expect an entry of a block sequence. */ - yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE - /** Expect an entry of an indentless sequence. */ - yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - /** Expect the first key of a block mapping. */ - yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE - /** Expect a block mapping key. */ - yaml_PARSE_BLOCK_MAPPING_KEY_STATE - /** Expect a block mapping value. */ - yaml_PARSE_BLOCK_MAPPING_VALUE_STATE - /** Expect the first entry of a flow sequence. */ - yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE - /** Expect an entry of a flow sequence. */ - yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE - /** Expect a key of an ordered mapping. */ - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE - /** Expect a value of an ordered mapping. */ - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE - /** Expect the and of an ordered mapping entry. */ - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE - /** Expect the first key of a flow mapping. */ - yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE - /** Expect a key of a flow mapping. */ - yaml_PARSE_FLOW_MAPPING_KEY_STATE - /** Expect a value of a flow mapping. */ - yaml_PARSE_FLOW_MAPPING_VALUE_STATE - /** Expect an empty value of a flow mapping. */ - yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE - /** Expect nothing. */ - yaml_PARSE_END_STATE -) - -/** - * This structure holds aliases data. - */ - -type yaml_alias_data_t struct { - /** The anchor. */ - anchor []byte - /** The node id. */ - index int - /** The anchor mark. */ - mark YAML_mark_t -} - -/** - * The parser structure. - * - * All members are internal. Manage the structure using the @c yaml_parser_ - * family of functions. - */ - -type yaml_parser_t struct { - - /** - * @name Error handling - * @{ - */ - - /** Error type. */ - error YAML_error_type_t - /** Error description. */ - problem string - /** The byte about which the problem occured. */ - problem_offset int - /** The problematic value (@c -1 is none). */ - problem_value int - /** The problem position. */ - problem_mark YAML_mark_t - /** The error context. */ - context string - /** The context position. */ - context_mark YAML_mark_t - - /** - * @} - */ - - /** - * @name Reader stuff - * @{ - */ - - /** Read handler. */ - read_handler yaml_read_handler_t - - /** Reader input data. */ - input_reader io.Reader - input []byte - input_pos int - - /** EOF flag */ - eof bool - - /** The working buffer. */ - buffer []byte - buffer_pos int - - /* The number of unread characters in the buffer. */ - unread int - - /** The raw buffer. */ - raw_buffer []byte - raw_buffer_pos int - - /** The input encoding. */ - encoding yaml_encoding_t - - /** The offset of the current position (in bytes). */ - offset int - - /** The mark of the current position. */ - mark YAML_mark_t - - /** - * @} - */ - - /** - * @name Scanner stuff - * @{ - */ - - /** Have we started to scan the input stream? */ - stream_start_produced bool - - /** Have we reached the end of the input stream? */ - stream_end_produced bool - - /** The number of unclosed '[' and '{' indicators. */ - flow_level int - - /** The tokens queue. */ - tokens []yaml_token_t - tokens_head int - - /** The number of tokens fetched from the queue. */ - tokens_parsed int - - /* Does the tokens queue contain a token ready for dequeueing. */ - token_available bool - - /** The indentation levels stack. */ - indents []int - - /** The current indentation level. */ - indent int - - /** May a simple key occur at the current position? */ - simple_key_allowed bool - - /** The stack of simple keys. */ - simple_keys []yaml_simple_key_t - - /** - * @} - */ - - /** - * @name Parser stuff - * @{ - */ - - /** The parser states stack. */ - states []yaml_parser_state_t - - /** The current parser state. */ - state yaml_parser_state_t - - /** The stack of marks. */ - marks []YAML_mark_t - - /** The list of TAG directives. */ - tag_directives []yaml_tag_directive_t - - /** - * @} - */ - - /** - * @name Dumper stuff - * @{ - */ - - /** The alias data. */ - aliases []yaml_alias_data_t - - /** The currently parsed document. */ - document *yaml_document_t - - /** - * @} - */ - -} - -/** - * The prototype of a write handler. - * - * The write handler is called when the emitter needs to flush the accumulated - * characters to the output. The handler should write @a size bytes of the - * @a buffer to the output. - * - * @param[in,out] data A pointer to an application data specified by - * yaml_emitter_set_output(). - * @param[in] buffer The buffer with bytes to be written. - * @param[in] size The size of the buffer. - * - * @returns On success, the handler should return @c 1. If the handler failed, - * the returned value should be @c 0. - */ - -type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error - -/** The emitter states. */ -type yaml_emitter_state_t int - -const ( - /** Expect STREAM-START. */ - yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota - /** Expect the first DOCUMENT-START or STREAM-END. */ - yaml_EMIT_FIRST_DOCUMENT_START_STATE - /** Expect DOCUMENT-START or STREAM-END. */ - yaml_EMIT_DOCUMENT_START_STATE - /** Expect the content of a document. */ - yaml_EMIT_DOCUMENT_CONTENT_STATE - /** Expect DOCUMENT-END. */ - yaml_EMIT_DOCUMENT_END_STATE - /** Expect the first item of a flow sequence. */ - yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE - /** Expect an item of a flow sequence. */ - yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE - /** Expect the first key of a flow mapping. */ - yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE - /** Expect a key of a flow mapping. */ - yaml_EMIT_FLOW_MAPPING_KEY_STATE - /** Expect a value for a simple key of a flow mapping. */ - yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE - /** Expect a value of a flow mapping. */ - yaml_EMIT_FLOW_MAPPING_VALUE_STATE - /** Expect the first item of a block sequence. */ - yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE - /** Expect an item of a block sequence. */ - yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE - /** Expect the first key of a block mapping. */ - yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE - /** Expect the key of a block mapping. */ - yaml_EMIT_BLOCK_MAPPING_KEY_STATE - /** Expect a value for a simple key of a block mapping. */ - yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE - /** Expect a value of a block mapping. */ - yaml_EMIT_BLOCK_MAPPING_VALUE_STATE - /** Expect nothing. */ - yaml_EMIT_END_STATE -) - -/** - * The emitter structure. - * - * All members are internal. Manage the structure using the @c yaml_emitter_ - * family of functions. - */ - -type yaml_emitter_t struct { - - /** - * @name Error handling - * @{ - */ - - /** Error type. */ - error YAML_error_type_t - /** Error description. */ - problem string - - /** - * @} - */ - - /** - * @name Writer stuff - * @{ - */ - - /** Write handler. */ - write_handler yaml_write_handler_t - - /** Standard (string or file) output data. */ - output_buffer *[]byte - output_writer io.Writer - - /** The working buffer. */ - buffer []byte - buffer_pos int - - /** The raw buffer. */ - raw_buffer []byte - raw_buffer_pos int - - /** The stream encoding. */ - encoding yaml_encoding_t - - /** - * @} - */ - - /** - * @name Emitter stuff - * @{ - */ - - /** If the output is in the canonical style? */ - canonical bool - /** The number of indentation spaces. */ - best_indent int - /** The preferred width of the output lines. */ - best_width int - /** Allow unescaped non-ASCII characters? */ - unicode bool - /** The preferred line break. */ - line_break yaml_break_t - - /** The stack of states. */ - states []yaml_emitter_state_t - - /** The current emitter state. */ - state yaml_emitter_state_t - - /** The event queue. */ - events []yaml_event_t - events_head int - - /** The stack of indentation levels. */ - indents []int - - /** The list of tag directives. */ - tag_directives []yaml_tag_directive_t - - /** The current indentation level. */ - indent int - - /** The current flow level. */ - flow_level int - - /** Is it the document root context? */ - root_context bool - /** Is it a sequence context? */ - sequence_context bool - /** Is it a mapping context? */ - mapping_context bool - /** Is it a simple mapping key context? */ - simple_key_context bool - - /** The current line. */ - line int - /** The current column. */ - column int - /** If the last character was a whitespace? */ - whitespace bool - /** If the last character was an indentation character (' ', '-', '?', ':')? */ - indention bool - /** If an explicit document end is required? */ - open_ended bool - - /** Anchor analysis. */ - anchor_data struct { - /** The anchor value. */ - anchor []byte - /** Is it an alias? */ - alias bool - } - - /** Tag analysis. */ - tag_data struct { - /** The tag handle. */ - handle []byte - /** The tag suffix. */ - suffix []byte - } - - /** Scalar analysis. */ - scalar_data struct { - /** The scalar value. */ - value []byte - /** Does the scalar contain line breaks? */ - multiline bool - /** Can the scalar be expessed in the flow plain style? */ - flow_plain_allowed bool - /** Can the scalar be expressed in the block plain style? */ - block_plain_allowed bool - /** Can the scalar be expressed in the single quoted style? */ - single_quoted_allowed bool - /** Can the scalar be expressed in the literal or folded styles? */ - block_allowed bool - /** The output style. */ - style yaml_scalar_style_t - } - - /** - * @} - */ - - /** - * @name Dumper stuff - * @{ - */ - - /** If the stream was already opened? */ - opened bool - /** If the stream was already closed? */ - closed bool - - /** The information associated with the document nodes. */ - anchors *struct { - /** The number of references. */ - references int - /** The anchor id. */ - anchor int - /** If the node has been emitted? */ - serialized bool - } - - /** The last assigned anchor id. */ - last_anchor_id int - - /** The currently emitted document. */ - document *yaml_document_t - - /** - * @} - */ - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/fakes/fake_plugin_model.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/fakes/fake_plugin_model.go deleted file mode 100644 index 39d8ec2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/fakes/fake_plugin_model.go +++ /dev/null @@ -1,52 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - "sync" -) - -type FakePluginModel struct { - PopulateModelStub func(interface{}) []models.Plugin - populateModelMutex sync.RWMutex - populateModelArgsForCall []struct { - arg1 interface{} - } - populateModelReturns struct { - result1 []models.Plugin - } -} - -func (fake *FakePluginModel) PopulateModel(arg1 interface{}) []models.Plugin { - fake.populateModelMutex.Lock() - defer fake.populateModelMutex.Unlock() - fake.populateModelArgsForCall = append(fake.populateModelArgsForCall, struct { - arg1 interface{} - }{arg1}) - if fake.PopulateModelStub != nil { - return fake.PopulateModelStub(arg1) - } else { - return fake.populateModelReturns.result1 - } -} - -func (fake *FakePluginModel) PopulateModelCallCount() int { - fake.populateModelMutex.RLock() - defer fake.populateModelMutex.RUnlock() - return len(fake.populateModelArgsForCall) -} - -func (fake *FakePluginModel) PopulateModelArgsForCall(i int) interface{} { - fake.populateModelMutex.RLock() - defer fake.populateModelMutex.RUnlock() - return fake.populateModelArgsForCall[i].arg1 -} - -func (fake *FakePluginModel) PopulateModelReturns(result1 []models.Plugin) { - fake.PopulateModelStub = nil - fake.populateModelReturns = struct { - result1 []models.Plugin - }{result1} -} - -var _ models.PluginModel = new(FakePluginModel) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/models_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/models_suite_test.go deleted file mode 100644 index 2d4c6de..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/models_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package models_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestModels(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Models Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/plugins.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/plugins.go deleted file mode 100644 index b46df52..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/plugins.go +++ /dev/null @@ -1,148 +0,0 @@ -package models - -import ( - "fmt" - "io" - "time" -) - -type PluginModel interface { - PopulateModel(interface{}) []Plugin -} - -type Plugins struct { - logger io.Writer -} - -type Plugin struct { - Name string `json:"name"` - Description string `json:"description"` - Version string `json:"version"` - Created time.Time `json:"created"` - Updated time.Time `json:"updated"` - Company string `json:"company"` - Authors []Author `json:"authors"` - Homepage string `json:"homepage"` - Binaries []Binary `json:"binaries"` -} - -type Binary struct { - Platform string `json:"platform"` - Url string `json:"url"` - Checksum string `json:"checksum"` -} - -type PluginsJson struct { - Plugins []Plugin `json:"plugins"` -} - -type Author struct { - Name string `json:"name"` - Homepage string `json:"homepage"` - Contact string `json:"contact"` -} - -func NewPlugins(logger io.Writer) PluginModel { - return &Plugins{ - logger: logger, - } -} - -func (p *Plugins) PopulateModel(input interface{}) []Plugin { - plugins := []Plugin{} - if contents, ok := input.(map[interface{}]interface{})["plugins"].([]interface{}); ok { - for _, plugin := range contents { - plugins = append(plugins, p.extractPlugin(plugin)) - } - } else { - p.logger.Write([]byte("unexpected yaml structure, 'plugins' field not found.\n")) - } - return plugins -} - -func (p *Plugins) extractPlugin(rawData interface{}) Plugin { - plugin := Plugin{} - for k, v := range rawData.(map[interface{}]interface{}) { - switch k.(string) { - case "name": - plugin.Name = v.(string) - case "description": - plugin.Description = v.(string) - case "binaries": - for _, binary := range v.([]interface{}) { - plugin.Binaries = append(plugin.Binaries, p.extractBinaries(binary)) - } - case "version": - plugin.Version = optionalStringField(v) - case "authors": - if v == nil { - plugin.Authors = []Author{} - } else { - for _, author := range v.([]interface{}) { - plugin.Authors = append(plugin.Authors, p.extractAuthors(author)) - } - } - case "homepage": - plugin.Homepage = optionalStringField(v) - case "company": - plugin.Company = optionalStringField(v) - case "created": - plugin.Created = v.(time.Time) - case "updated": - plugin.Updated = v.(time.Time) - default: - p.logger.Write([]byte("unexpected field in plugins: " + k.(string) + "\n")) - } - } - return plugin -} - -func (p *Plugins) extractBinaries(input interface{}) Binary { - binary := Binary{} - for k, v := range input.(map[interface{}]interface{}) { - switch k.(string) { - case "platform": - binary.Platform = v.(string) - case "url": - binary.Url = v.(string) - case "checksum": - binary.Checksum = v.(string) - default: - p.logger.Write([]byte("unexpected field in binaries: %s" + k.(string) + "\n")) - } - } - return binary -} - -func (p *Plugins) extractAuthors(input interface{}) Author { - author := Author{} - for k, v := range input.(map[interface{}]interface{}) { - switch k.(string) { - case "name": - author.Name = v.(string) - case "homepage": - author.Homepage = optionalStringField(v) - case "contact": - author.Contact = optionalStringField(v) - default: - p.logger.Write([]byte("unexpected field in Authors: %s" + k.(string) + "\n")) - } - } - return author -} - -func optionalStringField(v interface{}) string { - if v != nil { - switch v := v.(type) { - default: - return fmt.Sprintf("%v", v) - case float64: - return fmt.Sprintf("%.1f", v) - case int64: - return fmt.Sprintf("%d", v) - case bool: - return fmt.Sprintf("%t", v) - } - } - return "" -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/plugins_test.go b/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/plugins_test.go deleted file mode 100644 index f5cdbe3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry-incubator/cli-plugin-repo/models/plugins_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package models_test - -import ( - "os" - - . "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - "github.com/cloudfoundry-incubator/cli-plugin-repo/test_helpers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Models", func() { - var ( - parsedYaml interface{} - pluginModel PluginModel - data []Plugin - ) - - Context("When raw data is valid", func() { - BeforeEach(func() { - parsedYaml = map[interface{}]interface{}{ - "plugins": []interface{}{ - map[interface{}]interface{}{ - "name": "test1", - "description": "n/a", - "authors": []interface{}{ - map[interface{}]interface{}{ - "name": "sample_name", - "homepage": "", - "contact": "cant.find.me@mars.com", - }, - }, - "binaries": []interface{}{ - map[interface{}]interface{}{ - "platform": "osx", - "url": "example.com/plugin", - "checksum": "abcdefg", - }, - }, - }, - map[interface{}]interface{}{ - "name": "test2", - "description": "n/a", - "binaries": []interface{}{ - map[interface{}]interface{}{ - "platform": "windows", - "url": "example.com/plugin", - "checksum": "abcdefg", - }, - map[interface{}]interface{}{ - "platform": "linux32", - "url": "example.com/plugin", - "checksum": "abcdefg", - }, - }, - }, - }, - } - - pluginModel = NewPlugins(os.Stdout) - data = pluginModel.PopulateModel(parsedYaml) - }) - - It("populates the plugin model with raw data", func() { - Ω(len(data)).To(Equal(2)) - Ω(data[0].Name).To(Equal("test1")) - Ω(data[0].Binaries[0].Platform).To(Equal("osx")) - Ω(data[1].Name).To(Equal("test2")) - Ω(data[1].Binaries[1].Platform).To(Equal("linux32")) - }) - - It("turns optional string fields with nil value into empty string", func() { - Ω(len(data)).To(Equal(2)) - Ω(data[0].Authors[0].Name).To(Equal("sample_name")) - Ω(data[0].Company).To(Equal("")) - Ω(data[0].Homepage).To(Equal("")) - }) - }) - - Context("When raw data contains unknown field", func() { - var ( - logger *test_helpers.TestLogger - ) - - BeforeEach(func() { - parsedYaml = map[interface{}]interface{}{ - "plugins": []interface{}{ - map[interface{}]interface{}{ - "name": "test1", - "description": "n/a", - "unknown_field": "123", - }, - }, - } - - logger = test_helpers.NewTestLogger() - pluginModel = NewPlugins(logger) - data = pluginModel.PopulateModel(parsedYaml) - }) - - It("logs error to terminal", func() { - Ω(len(data)).To(Equal(1)) - Ω(logger.ContainsSubstring([]string{"unexpected field", "unknown_field"})).To(Equal(true)) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/actors_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/actors_suite_test.go deleted file mode 100644 index 2fcb971..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/actors_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package actors_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestActors(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Actors Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder_suite_test.go deleted file mode 100644 index e4709b5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package broker_builder_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestBrokerBuilder(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "BrokerBuilder Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder_test.go deleted file mode 100644 index 2e9c63a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder_test.go +++ /dev/null @@ -1,240 +0,0 @@ -package broker_builder_test - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf/actors/broker_builder" - "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - - fake_service_builder "github.com/cloudfoundry/cli/cf/actors/service_builder/fakes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Broker Builder", func() { - var ( - brokerBuilder broker_builder.BrokerBuilder - - serviceBuilder *fake_service_builder.FakeServiceBuilder - brokerRepo *fakes.FakeServiceBrokerRepo - - serviceBroker1 models.ServiceBroker - - services models.ServiceOfferings - service1 models.ServiceOffering - service2 models.ServiceOffering - service3 models.ServiceOffering - publicServicePlan models.ServicePlanFields - privateServicePlan models.ServicePlanFields - ) - - BeforeEach(func() { - brokerRepo = &fakes.FakeServiceBrokerRepo{} - serviceBuilder = &fake_service_builder.FakeServiceBuilder{} - brokerBuilder = broker_builder.NewBuilder(brokerRepo, serviceBuilder) - - serviceBroker1 = models.ServiceBroker{Guid: "my-service-broker-guid", Name: "my-service-broker"} - - publicServicePlan = models.ServicePlanFields{ - Name: "public-service-plan", - Guid: "public-service-plan-guid", - Public: true, - } - - privateServicePlan = models.ServicePlanFields{ - Name: "private-service-plan", - Guid: "private-service-plan-guid", - Public: false, - OrgNames: []string{ - "org-1", - "org-2", - }, - } - - service1 = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-public-service", - Guid: "my-public-service-guid", - BrokerGuid: "my-service-broker-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - privateServicePlan, - }, - } - - service2 = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-other-public-service", - Guid: "my-other-public-service-guid", - BrokerGuid: "my-service-broker-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - privateServicePlan, - }, - } - - service3 = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-other-public-service", - Guid: "my-other-public-service-guid", - BrokerGuid: "my-service-broker-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - privateServicePlan, - }, - } - - services = models.ServiceOfferings( - []models.ServiceOffering{ - service1, - service2, - }) - - brokerRepo.FindByGuidServiceBroker = serviceBroker1 - }) - - Describe(".AttachBrokersToServices", func() { - It("attaches brokers to an array of services", func() { - - brokers, err := brokerBuilder.AttachBrokersToServices(services) - Expect(err).NotTo(HaveOccurred()) - Expect(len(brokers)).To(Equal(1)) - Expect(brokers[0].Name).To(Equal("my-service-broker")) - Expect(brokers[0].Services[0].Label).To(Equal("my-public-service")) - Expect(len(brokers[0].Services[0].Plans)).To(Equal(2)) - Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service")) - Expect(len(brokers[0].Services[0].Plans)).To(Equal(2)) - }) - - It("skips services that have no associated broker, e.g. v1 services", func() { - brokerlessService := models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "lonely-v1-service", - Guid: "i-am-sad-and-old", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - privateServicePlan, - }, - } - services = models.ServiceOfferings( - []models.ServiceOffering{ - service1, - service2, - brokerlessService, - }) - - brokers, err := brokerBuilder.AttachBrokersToServices(services) - Expect(err).NotTo(HaveOccurred()) - Expect(len(brokers)).To(Equal(1)) - Expect(brokers[0].Name).To(Equal("my-service-broker")) - Expect(brokers[0].Services[0].Label).To(Equal("my-public-service")) - Expect(len(brokers[0].Services[0].Plans)).To(Equal(2)) - Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service")) - Expect(len(brokers[0].Services[0].Plans)).To(Equal(2)) - }) - }) - - Describe(".AttachSpecificBrokerToServices", func() { - BeforeEach(func() { - service3 = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-other-public-service", - Guid: "my-other-public-service-guid", - BrokerGuid: "my-other-service-broker-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - privateServicePlan, - }, - } - services = append(services, service3) - }) - - It("attaches a single broker to only services that match", func() { - serviceBroker1.Services = models.ServiceOfferings{} - brokerRepo.FindByNameServiceBroker = serviceBroker1 - broker, err := brokerBuilder.AttachSpecificBrokerToServices("my-service-broker", services) - - Expect(err).NotTo(HaveOccurred()) - Expect(broker.Name).To(Equal("my-service-broker")) - Expect(broker.Services[0].Label).To(Equal("my-public-service")) - Expect(len(broker.Services[0].Plans)).To(Equal(2)) - Expect(broker.Services[1].Label).To(Equal("my-other-public-service")) - Expect(len(broker.Services[0].Plans)).To(Equal(2)) - Expect(len(broker.Services)).To(Equal(2)) - }) - }) - - Describe(".GetAllServiceBrokers", func() { - It("returns an error if we cannot list all brokers", func() { - brokerRepo.ListErr = true - - _, err := brokerBuilder.GetAllServiceBrokers() - Expect(err).To(HaveOccurred()) - }) - - It("returns an error if we cannot list the services for a broker", func() { - brokerRepo.ServiceBrokers = []models.ServiceBroker{serviceBroker1} - serviceBuilder.GetServicesForManyBrokersReturns(nil, errors.New("Cannot find services")) - - _, err := brokerBuilder.GetAllServiceBrokers() - Expect(err).To(HaveOccurred()) - }) - - It("returns all service brokers populated with their services", func() { - brokerRepo.ServiceBrokers = []models.ServiceBroker{serviceBroker1} - serviceBuilder.GetServicesForManyBrokersReturns(services, nil) - - brokers, err := brokerBuilder.GetAllServiceBrokers() - Expect(err).NotTo(HaveOccurred()) - Expect(len(brokers)).To(Equal(1)) - Expect(brokers[0].Name).To(Equal("my-service-broker")) - Expect(brokers[0].Services[0].Label).To(Equal("my-public-service")) - Expect(len(brokers[0].Services[0].Plans)).To(Equal(2)) - Expect(brokers[0].Services[1].Label).To(Equal("my-other-public-service")) - Expect(len(brokers[0].Services[0].Plans)).To(Equal(2)) - }) - }) - - Describe(".GetBrokerWithAllServices", func() { - It("returns a service broker populated with their services", func() { - brokerRepo.FindByNameServiceBroker = serviceBroker1 - serviceBuilder.GetServicesForBrokerReturns(services, nil) - - broker, err := brokerBuilder.GetBrokerWithAllServices("my-service-broker") - Expect(err).NotTo(HaveOccurred()) - Expect(broker.Name).To(Equal("my-service-broker")) - Expect(broker.Services[0].Label).To(Equal("my-public-service")) - Expect(len(broker.Services[0].Plans)).To(Equal(2)) - Expect(broker.Services[1].Label).To(Equal("my-other-public-service")) - Expect(len(broker.Services[0].Plans)).To(Equal(2)) - }) - }) - - Describe(".GetBrokerWithSpecifiedService", func() { - It("returns an error if a broker containeing the specific service cannot be found", func() { - serviceBuilder.GetServiceByNameWithPlansWithOrgNamesReturns(models.ServiceOffering{}, errors.New("Asplosions")) - _, err := brokerBuilder.GetBrokerWithSpecifiedService("totally-not-a-service") - - Expect(err).To(HaveOccurred()) - }) - - It("returns the service broker populated with the specific service", func() { - serviceBuilder.GetServiceByNameWithPlansWithOrgNamesReturns(service1, nil) - brokerRepo.FindByGuidServiceBroker = serviceBroker1 - - broker, err := brokerBuilder.GetBrokerWithSpecifiedService("my-public-service") - Expect(err).NotTo(HaveOccurred()) - Expect(broker.Name).To(Equal("my-service-broker")) - Expect(len(broker.Services)).To(Equal(1)) - Expect(broker.Services[0].Label).To(Equal("my-public-service")) - Expect(len(broker.Services[0].Plans)).To(Equal(2)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/fakes/fake_broker_builder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/fakes/fake_broker_builder.go deleted file mode 100644 index 54dca0c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/fakes/fake_broker_builder.go +++ /dev/null @@ -1,212 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/actors/broker_builder" - - "sync" - - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeBrokerBuilder struct { - AttachBrokersToServicesStub func([]models.ServiceOffering) ([]models.ServiceBroker, error) - attachBrokersToServicesMutex sync.RWMutex - attachBrokersToServicesArgsForCall []struct { - arg1 []models.ServiceOffering - } - attachBrokersToServicesReturns struct { - result1 []models.ServiceBroker - result2 error - } - AttachSpecificBrokerToServicesStub func(string, []models.ServiceOffering) (models.ServiceBroker, error) - attachSpecificBrokerToServicesMutex sync.RWMutex - attachSpecificBrokerToServicesArgsForCall []struct { - arg1 string - arg2 []models.ServiceOffering - } - attachSpecificBrokerToServicesReturns struct { - result1 models.ServiceBroker - result2 error - } - GetAllServiceBrokersStub func() ([]models.ServiceBroker, error) - getAllServiceBrokersMutex sync.RWMutex - getAllServiceBrokersArgsForCall []struct{} - getAllServiceBrokersReturns struct { - result1 []models.ServiceBroker - result2 error - } - GetBrokerWithAllServicesStub func(brokerName string) (models.ServiceBroker, error) - getBrokerWithAllServicesMutex sync.RWMutex - getBrokerWithAllServicesArgsForCall []struct { - brokerName string - } - getBrokerWithAllServicesReturns struct { - result1 models.ServiceBroker - result2 error - } - GetBrokerWithSpecifiedServiceStub func(serviceName string) (models.ServiceBroker, error) - getBrokerWithSpecifiedServiceMutex sync.RWMutex - getBrokerWithSpecifiedServiceArgsForCall []struct { - serviceName string - } - getBrokerWithSpecifiedServiceReturns struct { - result1 models.ServiceBroker - result2 error - } -} - -func (fake *FakeBrokerBuilder) AttachBrokersToServices(arg1 []models.ServiceOffering) ([]models.ServiceBroker, error) { - fake.attachBrokersToServicesMutex.Lock() - defer fake.attachBrokersToServicesMutex.Unlock() - fake.attachBrokersToServicesArgsForCall = append(fake.attachBrokersToServicesArgsForCall, struct { - arg1 []models.ServiceOffering - }{arg1}) - if fake.AttachBrokersToServicesStub != nil { - return fake.AttachBrokersToServicesStub(arg1) - } else { - return fake.attachBrokersToServicesReturns.result1, fake.attachBrokersToServicesReturns.result2 - } -} - -func (fake *FakeBrokerBuilder) AttachBrokersToServicesCallCount() int { - fake.attachBrokersToServicesMutex.RLock() - defer fake.attachBrokersToServicesMutex.RUnlock() - return len(fake.attachBrokersToServicesArgsForCall) -} - -func (fake *FakeBrokerBuilder) AttachBrokersToServicesArgsForCall(i int) []models.ServiceOffering { - fake.attachBrokersToServicesMutex.RLock() - defer fake.attachBrokersToServicesMutex.RUnlock() - return fake.attachBrokersToServicesArgsForCall[i].arg1 -} - -func (fake *FakeBrokerBuilder) AttachBrokersToServicesReturns(result1 []models.ServiceBroker, result2 error) { - fake.attachBrokersToServicesReturns = struct { - result1 []models.ServiceBroker - result2 error - }{result1, result2} -} - -func (fake *FakeBrokerBuilder) AttachSpecificBrokerToServices(arg1 string, arg2 []models.ServiceOffering) (models.ServiceBroker, error) { - fake.attachSpecificBrokerToServicesMutex.Lock() - defer fake.attachSpecificBrokerToServicesMutex.Unlock() - fake.attachSpecificBrokerToServicesArgsForCall = append(fake.attachSpecificBrokerToServicesArgsForCall, struct { - arg1 string - arg2 []models.ServiceOffering - }{arg1, arg2}) - if fake.AttachSpecificBrokerToServicesStub != nil { - return fake.AttachSpecificBrokerToServicesStub(arg1, arg2) - } else { - return fake.attachSpecificBrokerToServicesReturns.result1, fake.attachSpecificBrokerToServicesReturns.result2 - } -} - -func (fake *FakeBrokerBuilder) AttachSpecificBrokerToServicesCallCount() int { - fake.attachSpecificBrokerToServicesMutex.RLock() - defer fake.attachSpecificBrokerToServicesMutex.RUnlock() - return len(fake.attachSpecificBrokerToServicesArgsForCall) -} - -func (fake *FakeBrokerBuilder) AttachSpecificBrokerToServicesArgsForCall(i int) (string, []models.ServiceOffering) { - fake.attachSpecificBrokerToServicesMutex.RLock() - defer fake.attachSpecificBrokerToServicesMutex.RUnlock() - return fake.attachSpecificBrokerToServicesArgsForCall[i].arg1, fake.attachSpecificBrokerToServicesArgsForCall[i].arg2 -} - -func (fake *FakeBrokerBuilder) AttachSpecificBrokerToServicesReturns(result1 models.ServiceBroker, result2 error) { - fake.attachSpecificBrokerToServicesReturns = struct { - result1 models.ServiceBroker - result2 error - }{result1, result2} -} - -func (fake *FakeBrokerBuilder) GetAllServiceBrokers() ([]models.ServiceBroker, error) { - fake.getAllServiceBrokersMutex.Lock() - defer fake.getAllServiceBrokersMutex.Unlock() - fake.getAllServiceBrokersArgsForCall = append(fake.getAllServiceBrokersArgsForCall, struct{}{}) - if fake.GetAllServiceBrokersStub != nil { - return fake.GetAllServiceBrokersStub() - } else { - return fake.getAllServiceBrokersReturns.result1, fake.getAllServiceBrokersReturns.result2 - } -} - -func (fake *FakeBrokerBuilder) GetAllServiceBrokersCallCount() int { - fake.getAllServiceBrokersMutex.RLock() - defer fake.getAllServiceBrokersMutex.RUnlock() - return len(fake.getAllServiceBrokersArgsForCall) -} - -func (fake *FakeBrokerBuilder) GetAllServiceBrokersReturns(result1 []models.ServiceBroker, result2 error) { - fake.getAllServiceBrokersReturns = struct { - result1 []models.ServiceBroker - result2 error - }{result1, result2} -} - -func (fake *FakeBrokerBuilder) GetBrokerWithAllServices(brokerName string) (models.ServiceBroker, error) { - fake.getBrokerWithAllServicesMutex.Lock() - defer fake.getBrokerWithAllServicesMutex.Unlock() - fake.getBrokerWithAllServicesArgsForCall = append(fake.getBrokerWithAllServicesArgsForCall, struct { - brokerName string - }{brokerName}) - if fake.GetBrokerWithAllServicesStub != nil { - return fake.GetBrokerWithAllServicesStub(brokerName) - } else { - return fake.getBrokerWithAllServicesReturns.result1, fake.getBrokerWithAllServicesReturns.result2 - } -} - -func (fake *FakeBrokerBuilder) GetBrokerWithAllServicesCallCount() int { - fake.getBrokerWithAllServicesMutex.RLock() - defer fake.getBrokerWithAllServicesMutex.RUnlock() - return len(fake.getBrokerWithAllServicesArgsForCall) -} - -func (fake *FakeBrokerBuilder) GetBrokerWithAllServicesArgsForCall(i int) string { - fake.getBrokerWithAllServicesMutex.RLock() - defer fake.getBrokerWithAllServicesMutex.RUnlock() - return fake.getBrokerWithAllServicesArgsForCall[i].brokerName -} - -func (fake *FakeBrokerBuilder) GetBrokerWithAllServicesReturns(result1 models.ServiceBroker, result2 error) { - fake.getBrokerWithAllServicesReturns = struct { - result1 models.ServiceBroker - result2 error - }{result1, result2} -} - -func (fake *FakeBrokerBuilder) GetBrokerWithSpecifiedService(serviceName string) (models.ServiceBroker, error) { - fake.getBrokerWithSpecifiedServiceMutex.Lock() - defer fake.getBrokerWithSpecifiedServiceMutex.Unlock() - fake.getBrokerWithSpecifiedServiceArgsForCall = append(fake.getBrokerWithSpecifiedServiceArgsForCall, struct { - serviceName string - }{serviceName}) - if fake.GetBrokerWithSpecifiedServiceStub != nil { - return fake.GetBrokerWithSpecifiedServiceStub(serviceName) - } else { - return fake.getBrokerWithSpecifiedServiceReturns.result1, fake.getBrokerWithSpecifiedServiceReturns.result2 - } -} - -func (fake *FakeBrokerBuilder) GetBrokerWithSpecifiedServiceCallCount() int { - fake.getBrokerWithSpecifiedServiceMutex.RLock() - defer fake.getBrokerWithSpecifiedServiceMutex.RUnlock() - return len(fake.getBrokerWithSpecifiedServiceArgsForCall) -} - -func (fake *FakeBrokerBuilder) GetBrokerWithSpecifiedServiceArgsForCall(i int) string { - fake.getBrokerWithSpecifiedServiceMutex.RLock() - defer fake.getBrokerWithSpecifiedServiceMutex.RUnlock() - return fake.getBrokerWithSpecifiedServiceArgsForCall[i].serviceName -} - -func (fake *FakeBrokerBuilder) GetBrokerWithSpecifiedServiceReturns(result1 models.ServiceBroker, result2 error) { - fake.getBrokerWithSpecifiedServiceReturns = struct { - result1 models.ServiceBroker - result2 error - }{result1, result2} -} - -var _ BrokerBuilder = new(FakeBrokerBuilder) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_push_actor.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_push_actor.go deleted file mode 100644 index 39b4461..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_push_actor.go +++ /dev/null @@ -1,105 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "os" - "sync" - - "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/api/resources" -) - -type FakePushActor struct { - UploadAppStub func(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) error - uploadAppMutex sync.RWMutex - uploadAppArgsForCall []struct { - appGuid string - zipFile *os.File - presentFiles []resources.AppFileResource - } - uploadAppReturns struct { - result1 error - } - GatherFilesStub func(appDir string, uploadDir string) ([]resources.AppFileResource, bool, error) - gatherFilesMutex sync.RWMutex - gatherFilesArgsForCall []struct { - appDir string - uploadDir string - } - gatherFilesReturns struct { - result1 []resources.AppFileResource - result2 bool - result3 error - } -} - -func (fake *FakePushActor) UploadApp(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) error { - fake.uploadAppMutex.Lock() - fake.uploadAppArgsForCall = append(fake.uploadAppArgsForCall, struct { - appGuid string - zipFile *os.File - presentFiles []resources.AppFileResource - }{appGuid, zipFile, presentFiles}) - fake.uploadAppMutex.Unlock() - if fake.UploadAppStub != nil { - return fake.UploadAppStub(appGuid, zipFile, presentFiles) - } else { - return fake.uploadAppReturns.result1 - } -} - -func (fake *FakePushActor) UploadAppCallCount() int { - fake.uploadAppMutex.RLock() - defer fake.uploadAppMutex.RUnlock() - return len(fake.uploadAppArgsForCall) -} - -func (fake *FakePushActor) UploadAppArgsForCall(i int) (string, *os.File, []resources.AppFileResource) { - fake.uploadAppMutex.RLock() - defer fake.uploadAppMutex.RUnlock() - return fake.uploadAppArgsForCall[i].appGuid, fake.uploadAppArgsForCall[i].zipFile, fake.uploadAppArgsForCall[i].presentFiles -} - -func (fake *FakePushActor) UploadAppReturns(result1 error) { - fake.UploadAppStub = nil - fake.uploadAppReturns = struct { - result1 error - }{result1} -} - -func (fake *FakePushActor) GatherFiles(appDir string, uploadDir string) ([]resources.AppFileResource, bool, error) { - fake.gatherFilesMutex.Lock() - fake.gatherFilesArgsForCall = append(fake.gatherFilesArgsForCall, struct { - appDir string - uploadDir string - }{appDir, uploadDir}) - fake.gatherFilesMutex.Unlock() - if fake.GatherFilesStub != nil { - return fake.GatherFilesStub(appDir, uploadDir) - } else { - return fake.gatherFilesReturns.result1, fake.gatherFilesReturns.result2, fake.gatherFilesReturns.result3 - } -} - -func (fake *FakePushActor) GatherFilesCallCount() int { - fake.gatherFilesMutex.RLock() - defer fake.gatherFilesMutex.RUnlock() - return len(fake.gatherFilesArgsForCall) -} - -func (fake *FakePushActor) GatherFilesArgsForCall(i int) (string, string) { - fake.gatherFilesMutex.RLock() - defer fake.gatherFilesMutex.RUnlock() - return fake.gatherFilesArgsForCall[i].appDir, fake.gatherFilesArgsForCall[i].uploadDir -} - -func (fake *FakePushActor) GatherFilesReturns(result1 []resources.AppFileResource, result2 bool, result3 error) { - fake.GatherFilesStub = nil - fake.gatherFilesReturns = struct { - result1 []resources.AppFileResource - result2 bool - result3 error - }{result1, result2, result3} -} - -var _ actors.PushActor = new(FakePushActor) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_service_actor.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_service_actor.go deleted file mode 100644 index 32d8462..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_service_actor.go +++ /dev/null @@ -1,140 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/models" - "sync" -) - -type FakeServiceActor struct { - FilterBrokersStub func(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) - filterBrokersMutex sync.RWMutex - filterBrokersArgsForCall []struct { - arg1 string - arg2 string - arg3 string - } - filterBrokersReturns struct { - result1 []models.ServiceBroker - result2 error - } - AttachPlansToServiceStub func(models.ServiceOffering) (models.ServiceOffering, error) - attachPlansToServiceMutex sync.RWMutex - attachPlansToServiceArgsForCall []struct { - arg1 models.ServiceOffering - } - attachPlansToServiceReturns struct { - result1 models.ServiceOffering - result2 error - } - AttachOrgsToPlansStub func([]models.ServicePlanFields) ([]models.ServicePlanFields, error) - attachOrgsToPlansMutex sync.RWMutex - attachOrgsToPlansArgsForCall []struct { - arg1 []models.ServicePlanFields - } - attachOrgsToPlansReturns struct { - result1 []models.ServicePlanFields - result2 error - } -} - -func (fake *FakeServiceActor) FilterBrokers(arg1 string, arg2 string, arg3 string) ([]models.ServiceBroker, error) { - fake.filterBrokersMutex.Lock() - defer fake.filterBrokersMutex.Unlock() - fake.filterBrokersArgsForCall = append(fake.filterBrokersArgsForCall, struct { - arg1 string - arg2 string - arg3 string - }{arg1, arg2, arg3}) - if fake.FilterBrokersStub != nil { - return fake.FilterBrokersStub(arg1, arg2, arg3) - } else { - return fake.filterBrokersReturns.result1, fake.filterBrokersReturns.result2 - } -} - -func (fake *FakeServiceActor) FilterBrokersCallCount() int { - fake.filterBrokersMutex.RLock() - defer fake.filterBrokersMutex.RUnlock() - return len(fake.filterBrokersArgsForCall) -} - -func (fake *FakeServiceActor) FilterBrokersArgsForCall(i int) (string, string, string) { - fake.filterBrokersMutex.RLock() - defer fake.filterBrokersMutex.RUnlock() - return fake.filterBrokersArgsForCall[i].arg1, fake.filterBrokersArgsForCall[i].arg2, fake.filterBrokersArgsForCall[i].arg3 -} - -func (fake *FakeServiceActor) FilterBrokersReturns(result1 []models.ServiceBroker, result2 error) { - fake.filterBrokersReturns = struct { - result1 []models.ServiceBroker - result2 error - }{result1, result2} -} - -func (fake *FakeServiceActor) AttachPlansToService(arg1 models.ServiceOffering) (models.ServiceOffering, error) { - fake.attachPlansToServiceMutex.Lock() - defer fake.attachPlansToServiceMutex.Unlock() - fake.attachPlansToServiceArgsForCall = append(fake.attachPlansToServiceArgsForCall, struct { - arg1 models.ServiceOffering - }{arg1}) - if fake.AttachPlansToServiceStub != nil { - return fake.AttachPlansToServiceStub(arg1) - } else { - return fake.attachPlansToServiceReturns.result1, fake.attachPlansToServiceReturns.result2 - } -} - -func (fake *FakeServiceActor) AttachPlansToServiceCallCount() int { - fake.attachPlansToServiceMutex.RLock() - defer fake.attachPlansToServiceMutex.RUnlock() - return len(fake.attachPlansToServiceArgsForCall) -} - -func (fake *FakeServiceActor) AttachPlansToServiceArgsForCall(i int) models.ServiceOffering { - fake.attachPlansToServiceMutex.RLock() - defer fake.attachPlansToServiceMutex.RUnlock() - return fake.attachPlansToServiceArgsForCall[i].arg1 -} - -func (fake *FakeServiceActor) AttachPlansToServiceReturns(result1 models.ServiceOffering, result2 error) { - fake.attachPlansToServiceReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceActor) AttachOrgsToPlans(arg1 []models.ServicePlanFields) ([]models.ServicePlanFields, error) { - fake.attachOrgsToPlansMutex.Lock() - defer fake.attachOrgsToPlansMutex.Unlock() - fake.attachOrgsToPlansArgsForCall = append(fake.attachOrgsToPlansArgsForCall, struct { - arg1 []models.ServicePlanFields - }{arg1}) - if fake.AttachOrgsToPlansStub != nil { - return fake.AttachOrgsToPlansStub(arg1) - } else { - return fake.attachOrgsToPlansReturns.result1, fake.attachOrgsToPlansReturns.result2 - } -} - -func (fake *FakeServiceActor) AttachOrgsToPlansCallCount() int { - fake.attachOrgsToPlansMutex.RLock() - defer fake.attachOrgsToPlansMutex.RUnlock() - return len(fake.attachOrgsToPlansArgsForCall) -} - -func (fake *FakeServiceActor) AttachOrgsToPlansArgsForCall(i int) []models.ServicePlanFields { - fake.attachOrgsToPlansMutex.RLock() - defer fake.attachOrgsToPlansMutex.RUnlock() - return fake.attachOrgsToPlansArgsForCall[i].arg1 -} - -func (fake *FakeServiceActor) AttachOrgsToPlansReturns(result1 []models.ServicePlanFields, result2 error) { - fake.attachOrgsToPlansReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -var _ ServiceActor = new(FakeServiceActor) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_service_plan_actor.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_service_plan_actor.go deleted file mode 100644 index 5c6dc20..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/fakes/fake_service_plan_actor.go +++ /dev/null @@ -1,240 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/actors" - "sync" -) - -type FakeServicePlanActor struct { - FindServiceAccessStub func(string, string) (actors.ServiceAccess, error) - findServiceAccessMutex sync.RWMutex - findServiceAccessArgsForCall []struct { - arg1 string - arg2 string - } - findServiceAccessReturns struct { - result1 actors.ServiceAccess - result2 error - } - UpdateAllPlansForServiceStub func(string, bool) (bool, error) - updateAllPlansForServiceMutex sync.RWMutex - updateAllPlansForServiceArgsForCall []struct { - arg1 string - arg2 bool - } - updateAllPlansForServiceReturns struct { - result1 bool - result2 error - } - UpdateOrgForServiceStub func(string, string, bool) (bool, error) - updateOrgForServiceMutex sync.RWMutex - updateOrgForServiceArgsForCall []struct { - arg1 string - arg2 string - arg3 bool - } - updateOrgForServiceReturns struct { - result1 bool - result2 error - } - UpdateSinglePlanForServiceStub func(string, string, bool) (actors.PlanAccess, error) - updateSinglePlanForServiceMutex sync.RWMutex - updateSinglePlanForServiceArgsForCall []struct { - arg1 string - arg2 string - arg3 bool - } - updateSinglePlanForServiceReturns struct { - result1 actors.PlanAccess - result2 error - } - UpdatePlanAndOrgForServiceStub func(string, string, string, bool) (actors.PlanAccess, error) - updatePlanAndOrgForServiceMutex sync.RWMutex - updatePlanAndOrgForServiceArgsForCall []struct { - arg1 string - arg2 string - arg3 string - arg4 bool - } - updatePlanAndOrgForServiceReturns struct { - result1 actors.PlanAccess - result2 error - } -} - -func (fake *FakeServicePlanActor) FindServiceAccess(arg1 string, arg2 string) (actors.ServiceAccess, error) { - fake.findServiceAccessMutex.Lock() - defer fake.findServiceAccessMutex.Unlock() - fake.findServiceAccessArgsForCall = append(fake.findServiceAccessArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.FindServiceAccessStub != nil { - return fake.FindServiceAccessStub(arg1, arg2) - } else { - return fake.findServiceAccessReturns.result1, fake.findServiceAccessReturns.result2 - } -} - -func (fake *FakeServicePlanActor) FindServiceAccessCallCount() int { - fake.findServiceAccessMutex.RLock() - defer fake.findServiceAccessMutex.RUnlock() - return len(fake.findServiceAccessArgsForCall) -} - -func (fake *FakeServicePlanActor) FindServiceAccessArgsForCall(i int) (string, string) { - fake.findServiceAccessMutex.RLock() - defer fake.findServiceAccessMutex.RUnlock() - return fake.findServiceAccessArgsForCall[i].arg1, fake.findServiceAccessArgsForCall[i].arg2 -} - -func (fake *FakeServicePlanActor) FindServiceAccessReturns(result1 actors.ServiceAccess, result2 error) { - fake.FindServiceAccessStub = nil - fake.findServiceAccessReturns = struct { - result1 actors.ServiceAccess - result2 error - }{result1, result2} -} - -func (fake *FakeServicePlanActor) UpdateAllPlansForService(arg1 string, arg2 bool) (bool, error) { - fake.updateAllPlansForServiceMutex.Lock() - defer fake.updateAllPlansForServiceMutex.Unlock() - fake.updateAllPlansForServiceArgsForCall = append(fake.updateAllPlansForServiceArgsForCall, struct { - arg1 string - arg2 bool - }{arg1, arg2}) - if fake.UpdateAllPlansForServiceStub != nil { - return fake.UpdateAllPlansForServiceStub(arg1, arg2) - } else { - return fake.updateAllPlansForServiceReturns.result1, fake.updateAllPlansForServiceReturns.result2 - } -} - -func (fake *FakeServicePlanActor) UpdateAllPlansForServiceCallCount() int { - fake.updateAllPlansForServiceMutex.RLock() - defer fake.updateAllPlansForServiceMutex.RUnlock() - return len(fake.updateAllPlansForServiceArgsForCall) -} - -func (fake *FakeServicePlanActor) UpdateAllPlansForServiceArgsForCall(i int) (string, bool) { - fake.updateAllPlansForServiceMutex.RLock() - defer fake.updateAllPlansForServiceMutex.RUnlock() - return fake.updateAllPlansForServiceArgsForCall[i].arg1, fake.updateAllPlansForServiceArgsForCall[i].arg2 -} - -func (fake *FakeServicePlanActor) UpdateAllPlansForServiceReturns(result1 bool, result2 error) { - fake.UpdateAllPlansForServiceStub = nil - fake.updateAllPlansForServiceReturns = struct { - result1 bool - result2 error - }{result1, result2} -} - -func (fake *FakeServicePlanActor) UpdateOrgForService(arg1 string, arg2 string, arg3 bool) (bool, error) { - fake.updateOrgForServiceMutex.Lock() - defer fake.updateOrgForServiceMutex.Unlock() - fake.updateOrgForServiceArgsForCall = append(fake.updateOrgForServiceArgsForCall, struct { - arg1 string - arg2 string - arg3 bool - }{arg1, arg2, arg3}) - if fake.UpdateOrgForServiceStub != nil { - return fake.UpdateOrgForServiceStub(arg1, arg2, arg3) - } else { - return fake.updateOrgForServiceReturns.result1, fake.updateOrgForServiceReturns.result2 - } -} - -func (fake *FakeServicePlanActor) UpdateOrgForServiceCallCount() int { - fake.updateOrgForServiceMutex.RLock() - defer fake.updateOrgForServiceMutex.RUnlock() - return len(fake.updateOrgForServiceArgsForCall) -} - -func (fake *FakeServicePlanActor) UpdateOrgForServiceArgsForCall(i int) (string, string, bool) { - fake.updateOrgForServiceMutex.RLock() - defer fake.updateOrgForServiceMutex.RUnlock() - return fake.updateOrgForServiceArgsForCall[i].arg1, fake.updateOrgForServiceArgsForCall[i].arg2, fake.updateOrgForServiceArgsForCall[i].arg3 -} - -func (fake *FakeServicePlanActor) UpdateOrgForServiceReturns(result1 bool, result2 error) { - fake.UpdateOrgForServiceStub = nil - fake.updateOrgForServiceReturns = struct { - result1 bool - result2 error - }{result1, result2} -} - -func (fake *FakeServicePlanActor) UpdateSinglePlanForService(arg1 string, arg2 string, arg3 bool) (actors.PlanAccess, error) { - fake.updateSinglePlanForServiceMutex.Lock() - defer fake.updateSinglePlanForServiceMutex.Unlock() - fake.updateSinglePlanForServiceArgsForCall = append(fake.updateSinglePlanForServiceArgsForCall, struct { - arg1 string - arg2 string - arg3 bool - }{arg1, arg2, arg3}) - if fake.UpdateSinglePlanForServiceStub != nil { - return fake.UpdateSinglePlanForServiceStub(arg1, arg2, arg3) - } else { - return fake.updateSinglePlanForServiceReturns.result1, fake.updateSinglePlanForServiceReturns.result2 - } -} - -func (fake *FakeServicePlanActor) UpdateSinglePlanForServiceCallCount() int { - fake.updateSinglePlanForServiceMutex.RLock() - defer fake.updateSinglePlanForServiceMutex.RUnlock() - return len(fake.updateSinglePlanForServiceArgsForCall) -} - -func (fake *FakeServicePlanActor) UpdateSinglePlanForServiceArgsForCall(i int) (string, string, bool) { - fake.updateSinglePlanForServiceMutex.RLock() - defer fake.updateSinglePlanForServiceMutex.RUnlock() - return fake.updateSinglePlanForServiceArgsForCall[i].arg1, fake.updateSinglePlanForServiceArgsForCall[i].arg2, fake.updateSinglePlanForServiceArgsForCall[i].arg3 -} - -func (fake *FakeServicePlanActor) UpdateSinglePlanForServiceReturns(result1 actors.PlanAccess, result2 error) { - fake.UpdateSinglePlanForServiceStub = nil - fake.updateSinglePlanForServiceReturns = struct { - result1 actors.PlanAccess - result2 error - }{result1, result2} -} - -func (fake *FakeServicePlanActor) UpdatePlanAndOrgForService(arg1 string, arg2 string, arg3 string, arg4 bool) (actors.PlanAccess, error) { - fake.updatePlanAndOrgForServiceMutex.Lock() - defer fake.updatePlanAndOrgForServiceMutex.Unlock() - fake.updatePlanAndOrgForServiceArgsForCall = append(fake.updatePlanAndOrgForServiceArgsForCall, struct { - arg1 string - arg2 string - arg3 string - arg4 bool - }{arg1, arg2, arg3, arg4}) - if fake.UpdatePlanAndOrgForServiceStub != nil { - return fake.UpdatePlanAndOrgForServiceStub(arg1, arg2, arg3, arg4) - } else { - return fake.updatePlanAndOrgForServiceReturns.result1, fake.updatePlanAndOrgForServiceReturns.result2 - } -} - -func (fake *FakeServicePlanActor) UpdatePlanAndOrgForServiceCallCount() int { - fake.updatePlanAndOrgForServiceMutex.RLock() - defer fake.updatePlanAndOrgForServiceMutex.RUnlock() - return len(fake.updatePlanAndOrgForServiceArgsForCall) -} - -func (fake *FakeServicePlanActor) UpdatePlanAndOrgForServiceArgsForCall(i int) (string, string, string, bool) { - fake.updatePlanAndOrgForServiceMutex.RLock() - defer fake.updatePlanAndOrgForServiceMutex.RUnlock() - return fake.updatePlanAndOrgForServiceArgsForCall[i].arg1, fake.updatePlanAndOrgForServiceArgsForCall[i].arg2, fake.updatePlanAndOrgForServiceArgsForCall[i].arg3, fake.updatePlanAndOrgForServiceArgsForCall[i].arg4 -} - -func (fake *FakeServicePlanActor) UpdatePlanAndOrgForServiceReturns(result1 actors.PlanAccess, result2 error) { - fake.UpdatePlanAndOrgForServiceStub = nil - fake.updatePlanAndOrgForServiceReturns = struct { - result1 actors.PlanAccess - result2 error - }{result1, result2} -} - -var _ actors.ServicePlanActor = new(FakeServicePlanActor) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes/fake_plan_builder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes/fake_plan_builder.go deleted file mode 100644 index 72bb29e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes/fake_plan_builder.go +++ /dev/null @@ -1,312 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/actors/plan_builder" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakePlanBuilder struct { - AttachOrgsToPlansStub func([]models.ServicePlanFields) ([]models.ServicePlanFields, error) - attachOrgsToPlansMutex sync.RWMutex - attachOrgsToPlansArgsForCall []struct { - arg1 []models.ServicePlanFields - } - attachOrgsToPlansReturns struct { - result1 []models.ServicePlanFields - result2 error - } - AttachOrgToPlansStub func([]models.ServicePlanFields, string) ([]models.ServicePlanFields, error) - attachOrgToPlansMutex sync.RWMutex - attachOrgToPlansArgsForCall []struct { - arg1 []models.ServicePlanFields - arg2 string - } - attachOrgToPlansReturns struct { - result1 []models.ServicePlanFields - result2 error - } - GetPlansForServiceForOrgStub func(string, string) ([]models.ServicePlanFields, error) - getPlansForServiceForOrgMutex sync.RWMutex - getPlansForServiceForOrgArgsForCall []struct { - arg1 string - arg2 string - } - getPlansForServiceForOrgReturns struct { - result1 []models.ServicePlanFields - result2 error - } - GetPlansForServiceWithOrgsStub func(string) ([]models.ServicePlanFields, error) - getPlansForServiceWithOrgsMutex sync.RWMutex - getPlansForServiceWithOrgsArgsForCall []struct { - arg1 string - } - getPlansForServiceWithOrgsReturns struct { - result1 []models.ServicePlanFields - result2 error - } - GetPlansForManyServicesWithOrgsStub func([]string) ([]models.ServicePlanFields, error) - getPlansForManyServicesWithOrgsMutex sync.RWMutex - getPlansForManyServicesWithOrgsArgsForCall []struct { - arg1 []string - } - getPlansForManyServicesWithOrgsReturns struct { - result1 []models.ServicePlanFields - result2 error - } - GetPlansForServiceStub func(string) ([]models.ServicePlanFields, error) - getPlansForServiceMutex sync.RWMutex - getPlansForServiceArgsForCall []struct { - arg1 string - } - getPlansForServiceReturns struct { - result1 []models.ServicePlanFields - result2 error - } - GetPlansVisibleToOrgStub func(string) ([]models.ServicePlanFields, error) - getPlansVisibleToOrgMutex sync.RWMutex - getPlansVisibleToOrgArgsForCall []struct { - arg1 string - } - getPlansVisibleToOrgReturns struct { - result1 []models.ServicePlanFields - result2 error - } -} - -func (fake *FakePlanBuilder) AttachOrgsToPlans(arg1 []models.ServicePlanFields) ([]models.ServicePlanFields, error) { - fake.attachOrgsToPlansMutex.Lock() - fake.attachOrgsToPlansArgsForCall = append(fake.attachOrgsToPlansArgsForCall, struct { - arg1 []models.ServicePlanFields - }{arg1}) - fake.attachOrgsToPlansMutex.Unlock() - if fake.AttachOrgsToPlansStub != nil { - return fake.AttachOrgsToPlansStub(arg1) - } else { - return fake.attachOrgsToPlansReturns.result1, fake.attachOrgsToPlansReturns.result2 - } -} - -func (fake *FakePlanBuilder) AttachOrgsToPlansCallCount() int { - fake.attachOrgsToPlansMutex.RLock() - defer fake.attachOrgsToPlansMutex.RUnlock() - return len(fake.attachOrgsToPlansArgsForCall) -} - -func (fake *FakePlanBuilder) AttachOrgsToPlansArgsForCall(i int) []models.ServicePlanFields { - fake.attachOrgsToPlansMutex.RLock() - defer fake.attachOrgsToPlansMutex.RUnlock() - return fake.attachOrgsToPlansArgsForCall[i].arg1 -} - -func (fake *FakePlanBuilder) AttachOrgsToPlansReturns(result1 []models.ServicePlanFields, result2 error) { - fake.AttachOrgsToPlansStub = nil - fake.attachOrgsToPlansReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -func (fake *FakePlanBuilder) AttachOrgToPlans(arg1 []models.ServicePlanFields, arg2 string) ([]models.ServicePlanFields, error) { - fake.attachOrgToPlansMutex.Lock() - fake.attachOrgToPlansArgsForCall = append(fake.attachOrgToPlansArgsForCall, struct { - arg1 []models.ServicePlanFields - arg2 string - }{arg1, arg2}) - fake.attachOrgToPlansMutex.Unlock() - if fake.AttachOrgToPlansStub != nil { - return fake.AttachOrgToPlansStub(arg1, arg2) - } else { - return fake.attachOrgToPlansReturns.result1, fake.attachOrgToPlansReturns.result2 - } -} - -func (fake *FakePlanBuilder) AttachOrgToPlansCallCount() int { - fake.attachOrgToPlansMutex.RLock() - defer fake.attachOrgToPlansMutex.RUnlock() - return len(fake.attachOrgToPlansArgsForCall) -} - -func (fake *FakePlanBuilder) AttachOrgToPlansArgsForCall(i int) ([]models.ServicePlanFields, string) { - fake.attachOrgToPlansMutex.RLock() - defer fake.attachOrgToPlansMutex.RUnlock() - return fake.attachOrgToPlansArgsForCall[i].arg1, fake.attachOrgToPlansArgsForCall[i].arg2 -} - -func (fake *FakePlanBuilder) AttachOrgToPlansReturns(result1 []models.ServicePlanFields, result2 error) { - fake.AttachOrgToPlansStub = nil - fake.attachOrgToPlansReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -func (fake *FakePlanBuilder) GetPlansForServiceForOrg(arg1 string, arg2 string) ([]models.ServicePlanFields, error) { - fake.getPlansForServiceForOrgMutex.Lock() - fake.getPlansForServiceForOrgArgsForCall = append(fake.getPlansForServiceForOrgArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - fake.getPlansForServiceForOrgMutex.Unlock() - if fake.GetPlansForServiceForOrgStub != nil { - return fake.GetPlansForServiceForOrgStub(arg1, arg2) - } else { - return fake.getPlansForServiceForOrgReturns.result1, fake.getPlansForServiceForOrgReturns.result2 - } -} - -func (fake *FakePlanBuilder) GetPlansForServiceForOrgCallCount() int { - fake.getPlansForServiceForOrgMutex.RLock() - defer fake.getPlansForServiceForOrgMutex.RUnlock() - return len(fake.getPlansForServiceForOrgArgsForCall) -} - -func (fake *FakePlanBuilder) GetPlansForServiceForOrgArgsForCall(i int) (string, string) { - fake.getPlansForServiceForOrgMutex.RLock() - defer fake.getPlansForServiceForOrgMutex.RUnlock() - return fake.getPlansForServiceForOrgArgsForCall[i].arg1, fake.getPlansForServiceForOrgArgsForCall[i].arg2 -} - -func (fake *FakePlanBuilder) GetPlansForServiceForOrgReturns(result1 []models.ServicePlanFields, result2 error) { - fake.GetPlansForServiceForOrgStub = nil - fake.getPlansForServiceForOrgReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -func (fake *FakePlanBuilder) GetPlansForServiceWithOrgs(arg1 string) ([]models.ServicePlanFields, error) { - fake.getPlansForServiceWithOrgsMutex.Lock() - fake.getPlansForServiceWithOrgsArgsForCall = append(fake.getPlansForServiceWithOrgsArgsForCall, struct { - arg1 string - }{arg1}) - fake.getPlansForServiceWithOrgsMutex.Unlock() - if fake.GetPlansForServiceWithOrgsStub != nil { - return fake.GetPlansForServiceWithOrgsStub(arg1) - } else { - return fake.getPlansForServiceWithOrgsReturns.result1, fake.getPlansForServiceWithOrgsReturns.result2 - } -} - -func (fake *FakePlanBuilder) GetPlansForServiceWithOrgsCallCount() int { - fake.getPlansForServiceWithOrgsMutex.RLock() - defer fake.getPlansForServiceWithOrgsMutex.RUnlock() - return len(fake.getPlansForServiceWithOrgsArgsForCall) -} - -func (fake *FakePlanBuilder) GetPlansForServiceWithOrgsArgsForCall(i int) string { - fake.getPlansForServiceWithOrgsMutex.RLock() - defer fake.getPlansForServiceWithOrgsMutex.RUnlock() - return fake.getPlansForServiceWithOrgsArgsForCall[i].arg1 -} - -func (fake *FakePlanBuilder) GetPlansForServiceWithOrgsReturns(result1 []models.ServicePlanFields, result2 error) { - fake.GetPlansForServiceWithOrgsStub = nil - fake.getPlansForServiceWithOrgsReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -func (fake *FakePlanBuilder) GetPlansForManyServicesWithOrgs(arg1 []string) ([]models.ServicePlanFields, error) { - fake.getPlansForManyServicesWithOrgsMutex.Lock() - fake.getPlansForManyServicesWithOrgsArgsForCall = append(fake.getPlansForManyServicesWithOrgsArgsForCall, struct { - arg1 []string - }{arg1}) - fake.getPlansForManyServicesWithOrgsMutex.Unlock() - if fake.GetPlansForManyServicesWithOrgsStub != nil { - return fake.GetPlansForManyServicesWithOrgsStub(arg1) - } else { - return fake.getPlansForManyServicesWithOrgsReturns.result1, fake.getPlansForManyServicesWithOrgsReturns.result2 - } -} - -func (fake *FakePlanBuilder) GetPlansForManyServicesWithOrgsCallCount() int { - fake.getPlansForManyServicesWithOrgsMutex.RLock() - defer fake.getPlansForManyServicesWithOrgsMutex.RUnlock() - return len(fake.getPlansForManyServicesWithOrgsArgsForCall) -} - -func (fake *FakePlanBuilder) GetPlansForManyServicesWithOrgsArgsForCall(i int) []string { - fake.getPlansForManyServicesWithOrgsMutex.RLock() - defer fake.getPlansForManyServicesWithOrgsMutex.RUnlock() - return fake.getPlansForManyServicesWithOrgsArgsForCall[i].arg1 -} - -func (fake *FakePlanBuilder) GetPlansForManyServicesWithOrgsReturns(result1 []models.ServicePlanFields, result2 error) { - fake.GetPlansForManyServicesWithOrgsStub = nil - fake.getPlansForManyServicesWithOrgsReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -func (fake *FakePlanBuilder) GetPlansForService(arg1 string) ([]models.ServicePlanFields, error) { - fake.getPlansForServiceMutex.Lock() - fake.getPlansForServiceArgsForCall = append(fake.getPlansForServiceArgsForCall, struct { - arg1 string - }{arg1}) - fake.getPlansForServiceMutex.Unlock() - if fake.GetPlansForServiceStub != nil { - return fake.GetPlansForServiceStub(arg1) - } else { - return fake.getPlansForServiceReturns.result1, fake.getPlansForServiceReturns.result2 - } -} - -func (fake *FakePlanBuilder) GetPlansForServiceCallCount() int { - fake.getPlansForServiceMutex.RLock() - defer fake.getPlansForServiceMutex.RUnlock() - return len(fake.getPlansForServiceArgsForCall) -} - -func (fake *FakePlanBuilder) GetPlansForServiceArgsForCall(i int) string { - fake.getPlansForServiceMutex.RLock() - defer fake.getPlansForServiceMutex.RUnlock() - return fake.getPlansForServiceArgsForCall[i].arg1 -} - -func (fake *FakePlanBuilder) GetPlansForServiceReturns(result1 []models.ServicePlanFields, result2 error) { - fake.GetPlansForServiceStub = nil - fake.getPlansForServiceReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -func (fake *FakePlanBuilder) GetPlansVisibleToOrg(arg1 string) ([]models.ServicePlanFields, error) { - fake.getPlansVisibleToOrgMutex.Lock() - fake.getPlansVisibleToOrgArgsForCall = append(fake.getPlansVisibleToOrgArgsForCall, struct { - arg1 string - }{arg1}) - fake.getPlansVisibleToOrgMutex.Unlock() - if fake.GetPlansVisibleToOrgStub != nil { - return fake.GetPlansVisibleToOrgStub(arg1) - } else { - return fake.getPlansVisibleToOrgReturns.result1, fake.getPlansVisibleToOrgReturns.result2 - } -} - -func (fake *FakePlanBuilder) GetPlansVisibleToOrgCallCount() int { - fake.getPlansVisibleToOrgMutex.RLock() - defer fake.getPlansVisibleToOrgMutex.RUnlock() - return len(fake.getPlansVisibleToOrgArgsForCall) -} - -func (fake *FakePlanBuilder) GetPlansVisibleToOrgArgsForCall(i int) string { - fake.getPlansVisibleToOrgMutex.RLock() - defer fake.getPlansVisibleToOrgMutex.RUnlock() - return fake.getPlansVisibleToOrgArgsForCall[i].arg1 -} - -func (fake *FakePlanBuilder) GetPlansVisibleToOrgReturns(result1 []models.ServicePlanFields, result2 error) { - fake.GetPlansVisibleToOrgStub = nil - fake.getPlansVisibleToOrgReturns = struct { - result1 []models.ServicePlanFields - result2 error - }{result1, result2} -} - -var _ plan_builder.PlanBuilder = new(FakePlanBuilder) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder.go deleted file mode 100644 index 5da3549..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder.go +++ /dev/null @@ -1,230 +0,0 @@ -package plan_builder - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/models" -) - -type PlanBuilder interface { - AttachOrgsToPlans([]models.ServicePlanFields) ([]models.ServicePlanFields, error) - AttachOrgToPlans([]models.ServicePlanFields, string) ([]models.ServicePlanFields, error) - GetPlansForServiceForOrg(string, string) ([]models.ServicePlanFields, error) - GetPlansForServiceWithOrgs(string) ([]models.ServicePlanFields, error) - GetPlansForManyServicesWithOrgs([]string) ([]models.ServicePlanFields, error) - GetPlansForService(string) ([]models.ServicePlanFields, error) - GetPlansVisibleToOrg(string) ([]models.ServicePlanFields, error) -} - -var ( - OrgToPlansVisibilityMap *map[string][]string - PlanToOrgsVisibilityMap *map[string][]string -) - -type Builder struct { - servicePlanRepo api.ServicePlanRepository - servicePlanVisibilityRepo api.ServicePlanVisibilityRepository - orgRepo organizations.OrganizationRepository -} - -func NewBuilder(plan api.ServicePlanRepository, vis api.ServicePlanVisibilityRepository, org organizations.OrganizationRepository) Builder { - return Builder{ - servicePlanRepo: plan, - servicePlanVisibilityRepo: vis, - orgRepo: org, - } -} - -func (builder Builder) AttachOrgToPlans(plans []models.ServicePlanFields, orgName string) ([]models.ServicePlanFields, error) { - visMap, err := builder.buildPlanToOrgVisibilityMap(orgName) - if err != nil { - return nil, err - } - for planIndex, _ := range plans { - plan := &plans[planIndex] - plan.OrgNames = visMap[plan.Guid] - } - - return plans, nil -} - -func (builder Builder) AttachOrgsToPlans(plans []models.ServicePlanFields) ([]models.ServicePlanFields, error) { - visMap, err := builder.buildPlanToOrgsVisibilityMap() - if err != nil { - return nil, err - } - for planIndex, _ := range plans { - plan := &plans[planIndex] - plan.OrgNames = visMap[plan.Guid] - } - - return plans, nil -} - -func (builder Builder) GetPlansForServiceForOrg(serviceGuid string, orgName string) ([]models.ServicePlanFields, error) { - plans, err := builder.servicePlanRepo.Search(map[string]string{"service_guid": serviceGuid}) - if err != nil { - return nil, err - } - - plans, err = builder.AttachOrgToPlans(plans, orgName) - if err != nil { - return nil, err - } - return plans, nil -} - -func (builder Builder) GetPlansForService(serviceGuid string) ([]models.ServicePlanFields, error) { - plans, err := builder.servicePlanRepo.Search(map[string]string{"service_guid": serviceGuid}) - if err != nil { - return nil, err - } - return plans, nil -} - -func (builder Builder) GetPlansForServiceWithOrgs(serviceGuid string) ([]models.ServicePlanFields, error) { - plans, err := builder.GetPlansForService(serviceGuid) - if err != nil { - return nil, err - } - - plans, err = builder.AttachOrgsToPlans(plans) - if err != nil { - return nil, err - } - return plans, nil -} - -func (builder Builder) GetPlansForManyServicesWithOrgs(serviceGuids []string) ([]models.ServicePlanFields, error) { - plans, err := builder.servicePlanRepo.ListPlansFromManyServices(serviceGuids) - if err != nil { - return nil, err - } - - plans, err = builder.AttachOrgsToPlans(plans) - if err != nil { - return nil, err - } - return plans, nil -} - -func (builder Builder) GetPlansVisibleToOrg(orgName string) ([]models.ServicePlanFields, error) { - var plansToReturn []models.ServicePlanFields - allPlans, err := builder.servicePlanRepo.Search(nil) - - planToOrgsVisMap, err := builder.buildPlanToOrgsVisibilityMap() - if err != nil { - return nil, err - } - - orgToPlansVisMap := builder.buildOrgToPlansVisibilityMap(planToOrgsVisMap) - - filterOrgPlans := orgToPlansVisMap[orgName] - - for _, plan := range allPlans { - if builder.containsGuid(filterOrgPlans, plan.Guid) { - plan.OrgNames = planToOrgsVisMap[plan.Guid] - plansToReturn = append(plansToReturn, plan) - } else if plan.Public { - plansToReturn = append(plansToReturn, plan) - } - } - - return plansToReturn, nil -} - -func (builder Builder) containsGuid(guidSlice []string, guid string) bool { - for _, g := range guidSlice { - if g == guid { - return true - } - } - return false -} - -func (builder Builder) buildPlanToOrgVisibilityMap(orgName string) (map[string][]string, error) { - // Since this map doesn't ever change, we memoize it for performance - orgLookup := make(map[string]string) - - org, err := builder.orgRepo.FindByName(orgName) - if err != nil { - return nil, err - } - orgLookup[org.Guid] = org.Name - - visibilities, err := builder.servicePlanVisibilityRepo.List() - if err != nil { - return nil, err - } - - visMap := make(map[string][]string) - for _, vis := range visibilities { - if _, exists := orgLookup[vis.OrganizationGuid]; exists { - visMap[vis.ServicePlanGuid] = append(visMap[vis.ServicePlanGuid], orgLookup[vis.OrganizationGuid]) - } - } - - return visMap, nil -} - -func (builder Builder) buildPlanToOrgsVisibilityMap() (map[string][]string, error) { - // Since this map doesn't ever change, we memoize it for performance - if PlanToOrgsVisibilityMap == nil { - orgLookup := make(map[string]string) - - visibilities, err := builder.servicePlanVisibilityRepo.List() - if err != nil { - return nil, err - } - - orgGuids := builder.getUniqueOrgGuidsFromVisibilities(visibilities) - - orgs, err := builder.orgRepo.GetManyOrgsByGuid(orgGuids) - if err != nil { - return nil, err - } - - for _, org := range orgs { - orgLookup[org.Guid] = org.Name - } - - visMap := make(map[string][]string) - for _, vis := range visibilities { - visMap[vis.ServicePlanGuid] = append(visMap[vis.ServicePlanGuid], orgLookup[vis.OrganizationGuid]) - } - - PlanToOrgsVisibilityMap = &visMap - } - - return *PlanToOrgsVisibilityMap, nil -} - -func (builder Builder) getUniqueOrgGuidsFromVisibilities(visibilities []models.ServicePlanVisibilityFields) (orgGuids []string) { - for _, visibility := range visibilities { - found := false - for _, orgGuid := range orgGuids { - if orgGuid == visibility.OrganizationGuid { - found = true - break - } - } - if !found { - orgGuids = append(orgGuids, visibility.OrganizationGuid) - } - } - return -} - -func (builder Builder) buildOrgToPlansVisibilityMap(planToOrgsMap map[string][]string) map[string][]string { - if OrgToPlansVisibilityMap == nil { - visMap := make(map[string][]string) - for planGuid, orgNames := range planToOrgsMap { - for _, orgName := range orgNames { - visMap[orgName] = append(visMap[orgName], planGuid) - } - } - OrgToPlansVisibilityMap = &visMap - } - - return *OrgToPlansVisibilityMap -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder_suite_test.go deleted file mode 100644 index cc6f5a3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package plan_builder_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPlanBuilder(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "PlanBuilder Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder_test.go deleted file mode 100644 index e1e0534..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plan_builder/plan_builder_test.go +++ /dev/null @@ -1,161 +0,0 @@ -package plan_builder_test - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf/actors/plan_builder" - "github.com/cloudfoundry/cli/cf/api/fakes" - testorg "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Plan builder", func() { - var ( - builder plan_builder.PlanBuilder - - planRepo *fakes.FakeServicePlanRepo - visibilityRepo *fakes.FakeServicePlanVisibilityRepository - orgRepo *testorg.FakeOrganizationRepository - - plan1 models.ServicePlanFields - plan2 models.ServicePlanFields - - org1 models.Organization - org2 models.Organization - ) - - BeforeEach(func() { - plan_builder.PlanToOrgsVisibilityMap = nil - plan_builder.OrgToPlansVisibilityMap = nil - planRepo = &fakes.FakeServicePlanRepo{} - visibilityRepo = &fakes.FakeServicePlanVisibilityRepository{} - orgRepo = &testorg.FakeOrganizationRepository{} - builder = plan_builder.NewBuilder(planRepo, visibilityRepo, orgRepo) - - plan1 = models.ServicePlanFields{ - Name: "service-plan1", - Guid: "service-plan1-guid", - ServiceOfferingGuid: "service-guid1", - } - plan2 = models.ServicePlanFields{ - Name: "service-plan2", - Guid: "service-plan2-guid", - ServiceOfferingGuid: "service-guid1", - } - - planRepo.SearchReturns = map[string][]models.ServicePlanFields{ - "service-guid1": []models.ServicePlanFields{plan1, plan2}, - } - org1 = models.Organization{} - org1.Name = "org1" - org1.Guid = "org1-guid" - - org2 = models.Organization{} - org2.Name = "org2" - org2.Guid = "org2-guid" - visibilityRepo.ListReturns([]models.ServicePlanVisibilityFields{ - {ServicePlanGuid: "service-plan1-guid", OrganizationGuid: "org1-guid"}, - {ServicePlanGuid: "service-plan1-guid", OrganizationGuid: "org2-guid"}, - {ServicePlanGuid: "service-plan2-guid", OrganizationGuid: "org1-guid"}, - }, nil) - orgRepo.GetManyOrgsByGuidReturns([]models.Organization{org1, org2}, nil) - }) - - Describe(".AttachOrgsToPlans", func() { - It("returns plans fully populated with the orgnames that have visibility", func() { - barePlans := []models.ServicePlanFields{plan1, plan2} - - plans, err := builder.AttachOrgsToPlans(barePlans) - Expect(err).ToNot(HaveOccurred()) - - Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - }) - - Describe(".AttachOrgToPlans", func() { - It("returns plans fully populated with the orgnames that have visibility", func() { - orgRepo.FindByNameReturns(org1, nil) - barePlans := []models.ServicePlanFields{plan1, plan2} - - plans, err := builder.AttachOrgToPlans(barePlans, "org1") - Expect(err).ToNot(HaveOccurred()) - - Expect(plans[0].OrgNames).To(Equal([]string{"org1"})) - }) - }) - - Describe(".GetPlansForServiceWithOrgs", func() { - It("returns all the plans for the service with the provided guid", func() { - plans, err := builder.GetPlansForServiceWithOrgs("service-guid1") - Expect(err).ToNot(HaveOccurred()) - - Expect(len(plans)).To(Equal(2)) - Expect(plans[0].Name).To(Equal("service-plan1")) - Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - Expect(plans[1].Name).To(Equal("service-plan2")) - }) - }) - - Describe(".GetPlansForManyServicesWithOrgs", func() { - It("returns all the plans for all service in a list of guids", func() { - planRepo.ListPlansFromManyServicesReturns = []models.ServicePlanFields{ - plan1, plan2, - } - serviceGuids := []string{"service-guid1", "service-guid2"} - plans, err := builder.GetPlansForManyServicesWithOrgs(serviceGuids) - Expect(err).ToNot(HaveOccurred()) - Expect(orgRepo.GetManyOrgsByGuidCallCount()).To(Equal(1)) - Expect(orgRepo.GetManyOrgsByGuidArgsForCall(0)).To(ConsistOf("org1-guid", "org2-guid")) - - Expect(len(plans)).To(Equal(2)) - Expect(plans[0].Name).To(Equal("service-plan1")) - Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - Expect(plans[1].Name).To(Equal("service-plan2")) - }) - - It("returns errors from the service plan repo", func() { - planRepo.ListPlansFromManyServicesError = errors.New("Error") - serviceGuids := []string{"service-guid1", "service-guid2"} - _, err := builder.GetPlansForManyServicesWithOrgs(serviceGuids) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe(".GetPlansForService", func() { - It("returns all the plans for the service with the provided guid", func() { - plans, err := builder.GetPlansForService("service-guid1") - Expect(err).ToNot(HaveOccurred()) - - Expect(len(plans)).To(Equal(2)) - Expect(plans[0].Name).To(Equal("service-plan1")) - Expect(plans[0].OrgNames).To(BeNil()) - Expect(plans[1].Name).To(Equal("service-plan2")) - }) - }) - - Describe(".GetPlansForServiceForOrg", func() { - It("returns all the plans for the service with the provided guid", func() { - orgRepo.FindByNameReturns(org1, nil) - plans, err := builder.GetPlansForServiceForOrg("service-guid1", "org1") - Expect(err).ToNot(HaveOccurred()) - - Expect(len(plans)).To(Equal(2)) - Expect(plans[0].Name).To(Equal("service-plan1")) - Expect(plans[0].OrgNames).To(Equal([]string{"org1"})) - Expect(plans[1].Name).To(Equal("service-plan2")) - }) - }) - - Describe(".GetPlansVisibleToOrg", func() { - It("returns all the plans visible to the named org", func() { - plans, err := builder.GetPlansVisibleToOrg("org1") - Expect(err).ToNot(HaveOccurred()) - - Expect(len(plans)).To(Equal(2)) - Expect(plans[0].Name).To(Equal("service-plan1")) - Expect(plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/fakes/fake_plugin_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/fakes/fake_plugin_repo.go deleted file mode 100644 index 482bf90..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/fakes/fake_plugin_repo.go +++ /dev/null @@ -1,57 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - "github.com/cloudfoundry/cli/cf/actors/plugin_repo" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakePluginRepo struct { - GetPluginsStub func([]models.PluginRepo) (map[string][]clipr.Plugin, []string) - getPluginsMutex sync.RWMutex - getPluginsArgsForCall []struct { - arg1 []models.PluginRepo - } - getPluginsReturns struct { - result1 map[string][]clipr.Plugin - result2 []string - } -} - -func (fake *FakePluginRepo) GetPlugins(arg1 []models.PluginRepo) (map[string][]clipr.Plugin, []string) { - fake.getPluginsMutex.Lock() - defer fake.getPluginsMutex.Unlock() - fake.getPluginsArgsForCall = append(fake.getPluginsArgsForCall, struct { - arg1 []models.PluginRepo - }{arg1}) - if fake.GetPluginsStub != nil { - return fake.GetPluginsStub(arg1) - } else { - return fake.getPluginsReturns.result1, fake.getPluginsReturns.result2 - } -} - -func (fake *FakePluginRepo) GetPluginsCallCount() int { - fake.getPluginsMutex.RLock() - defer fake.getPluginsMutex.RUnlock() - return len(fake.getPluginsArgsForCall) -} - -func (fake *FakePluginRepo) GetPluginsArgsForCall(i int) []models.PluginRepo { - fake.getPluginsMutex.RLock() - defer fake.getPluginsMutex.RUnlock() - return fake.getPluginsArgsForCall[i].arg1 -} - -func (fake *FakePluginRepo) GetPluginsReturns(result1 map[string][]clipr.Plugin, result2 []string) { - fake.GetPluginsStub = nil - fake.getPluginsReturns = struct { - result1 map[string][]clipr.Plugin - result2 []string - }{result1, result2} -} - -var _ plugin_repo.PluginRepo = new(FakePluginRepo) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo.go deleted file mode 100644 index bb9b3a2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo.go +++ /dev/null @@ -1,68 +0,0 @@ -package plugin_repo - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "strings" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type PluginRepo interface { - GetPlugins([]models.PluginRepo) (map[string][]clipr.Plugin, []string) -} - -type pluginRepo struct{} - -func NewPluginRepo() PluginRepo { - return pluginRepo{} -} - -func (r pluginRepo) GetPlugins(repos []models.PluginRepo) (map[string][]clipr.Plugin, []string) { - var pluginList clipr.PluginsJson - repoError := []string{} - repoPlugins := make(map[string][]clipr.Plugin) - - for _, repo := range repos { - resp, err := http.Get(getListEndpoint(repo.Url)) - if err != nil { - repoError = append(repoError, fmt.Sprintf(T("Error requesting from")+" '%s' - %s", repo.Name, err.Error())) - continue - } else { - defer resp.Body.Close() - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - repoError = append(repoError, fmt.Sprintf(T("Error reading response from")+" '%s' - %s ", repo.Name, err.Error())) - continue - } - - pluginList = clipr.PluginsJson{Plugins: nil} - err = json.Unmarshal(body, &pluginList) - if err != nil { - repoError = append(repoError, fmt.Sprintf(T("Invalid json data from")+" '%s' - %s", repo.Name, err.Error())) - continue - } else if pluginList.Plugins == nil { - repoError = append(repoError, T("Invalid data from '{{.repoName}}' - plugin data does not exist", map[string]interface{}{"repoName": repo.Name})) - continue - } - - } - - repoPlugins[repo.Name] = pluginList.Plugins - } - - return repoPlugins, repoError -} - -func getListEndpoint(url string) string { - if strings.HasSuffix(url, "/") { - return url + "list" - } - return url + "/list" -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo_suite_test.go deleted file mode 100644 index 0a7558e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package plugin_repo_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPluginRepo(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "PluginRepo Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo_test.go deleted file mode 100644 index 3a15e1d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/plugin_repo/plugin_repo_test.go +++ /dev/null @@ -1,197 +0,0 @@ -package plugin_repo_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - - . "github.com/cloudfoundry/cli/cf/actors/plugin_repo" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("PluginRepo", func() { - var ( - repoActor PluginRepo - testServer1CallCount int - testServer2CallCount int - testServer1 *httptest.Server - testServer2 *httptest.Server - ) - - Context("request data from all repos", func() { - BeforeEach(func() { - repoActor = NewPluginRepo() - testServer1CallCount = 0 - h1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - testServer1CallCount++ - fmt.Fprintln(w, `{"plugins":[]}`) - }) - testServer1 = httptest.NewServer(h1) - - testServer2CallCount = 0 - h2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - testServer2CallCount++ - fmt.Fprintln(w, `{"plugins":[]}`) - }) - testServer2 = httptest.NewServer(h2) - - }) - - AfterEach(func() { - testServer1.Close() - testServer2.Close() - }) - - It("make query to all repos listed in config.json", func() { - repoActor.GetPlugins([]models.PluginRepo{ - models.PluginRepo{ - Name: "repo1", - Url: testServer1.URL, - }, - models.PluginRepo{ - Name: "repo2", - Url: testServer2.URL, - }, - }) - - Ω(testServer1CallCount).To(Equal(1)) - Ω(testServer2CallCount).To(Equal(1)) - }) - - It("lists each of the repos in config.json", func() { - list, _ := repoActor.GetPlugins([]models.PluginRepo{ - models.PluginRepo{ - Name: "repo1", - Url: testServer1.URL, - }, - models.PluginRepo{ - Name: "repo2", - Url: testServer2.URL, - }, - }) - - Ω(list["repo1"]).ToNot(BeNil()) - Ω(list["repo2"]).ToNot(BeNil()) - }) - - }) - - Context("Getting data from repos", func() { - Context("When data is valid", func() { - BeforeEach(func() { - h1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{"plugins":[ - { - "name":"plugin1", - "description":"none", - "version":"1.3.4", - "binaries":[ - { - "platform":"osx", - "url":"https://github.com/simonleung8/cli-plugin-echo/raw/master/bin/osx/echo", - "checksum":"2a087d5cddcfb057fbda91e611c33f46" - } - ] - }, - { - "name":"plugin2", - "binaries":[ - { - "platform":"windows", - "url":"http://going.no.where", - "checksum":"abcdefg" - } - ] - }] - }`) - }) - testServer1 = httptest.NewServer(h1) - - }) - - AfterEach(func() { - testServer1.Close() - }) - - It("lists the info for each plugin", func() { - list, _ := repoActor.GetPlugins([]models.PluginRepo{ - models.PluginRepo{ - Name: "repo1", - Url: testServer1.URL, - }, - }) - - Ω(list["repo1"]).ToNot(BeNil()) - Ω(len(list["repo1"])).To(Equal(2)) - - Ω(list["repo1"][0].Name).To(Equal("plugin1")) - Ω(list["repo1"][0].Description).To(Equal("none")) - Ω(list["repo1"][0].Version).To(Equal("1.3.4")) - Ω(list["repo1"][0].Binaries[0].Platform).To(Equal("osx")) - Ω(list["repo1"][1].Name).To(Equal("plugin2")) - Ω(list["repo1"][1].Binaries[0].Platform).To(Equal("windows")) - }) - - }) - }) - - Context("When data is invalid", func() { - Context("json is invalid", func() { - BeforeEach(func() { - h1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `"plugins":[]}`) - }) - testServer1 = httptest.NewServer(h1) - }) - - AfterEach(func() { - testServer1.Close() - }) - - It("informs user of invalid json", func() { - _, err := repoActor.GetPlugins([]models.PluginRepo{ - models.PluginRepo{ - Name: "repo1", - Url: testServer1.URL, - }, - }) - - Ω(err).To(ContainSubstrings( - []string{"Invalid json data"}, - )) - }) - - }) - - Context("when data is valid json, but not valid plugin repo data", func() { - BeforeEach(func() { - h1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{"bad_plugin_tag":[]}`) - }) - testServer1 = httptest.NewServer(h1) - }) - - AfterEach(func() { - testServer1.Close() - }) - - It("informs user of invalid repo data", func() { - _, err := repoActor.GetPlugins([]models.PluginRepo{ - models.PluginRepo{ - Name: "repo1", - Url: testServer1.URL, - }, - }) - - Ω(err).To(ContainSubstrings( - []string{"Invalid data", "plugin data does not exist"}, - )) - }) - - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/push.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/push.go deleted file mode 100644 index afae4d2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/push.go +++ /dev/null @@ -1,118 +0,0 @@ -package actors - -import ( - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/api/application_bits" - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/gofileutils/fileutils" -) - -type PushActor interface { - UploadApp(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) error - GatherFiles(appDir string, uploadDir string) ([]resources.AppFileResource, bool, error) -} - -type PushActorImpl struct { - appBitsRepo application_bits.ApplicationBitsRepository - appfiles app_files.AppFiles - zipper app_files.Zipper -} - -func NewPushActor(appBitsRepo application_bits.ApplicationBitsRepository, zipper app_files.Zipper, appfiles app_files.AppFiles) PushActor { - return PushActorImpl{ - appBitsRepo: appBitsRepo, - appfiles: appfiles, - zipper: zipper, - } -} - -func (actor PushActorImpl) GatherFiles(appDir string, uploadDir string) (presentFiles []resources.AppFileResource, hasFileToUpload bool, apiErr error) { - if actor.zipper.IsZipFile(appDir) { - fileutils.TempDir("unzipped-app", func(tmpDir string, err error) { - err = actor.zipper.Unzip(appDir, tmpDir) - if err != nil { - presentFiles = nil - apiErr = err - return - } - presentFiles, hasFileToUpload, apiErr = actor.copyUploadableFiles(tmpDir, uploadDir) - }) - } else { - presentFiles, hasFileToUpload, apiErr = actor.copyUploadableFiles(appDir, uploadDir) - } - return presentFiles, hasFileToUpload, apiErr -} - -func (actor PushActorImpl) UploadApp(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) error { - return actor.appBitsRepo.UploadBits(appGuid, zipFile, presentFiles) -} - -func (actor PushActorImpl) copyUploadableFiles(appDir string, uploadDir string) (presentFiles []resources.AppFileResource, hasFileToUpload bool, err error) { - // Find which files need to be uploaded - allAppFiles, err := actor.appfiles.AppFilesInDir(appDir) - if err != nil { - return - } - - appFilesToUpload, presentFiles, apiErr := actor.getFilesToUpload(allAppFiles) - if apiErr != nil { - err = errors.New(apiErr.Error()) - return - } - hasFileToUpload = len(appFilesToUpload) > 0 - - // Copy files into a temporary directory and return it - err = actor.appfiles.CopyFiles(appFilesToUpload, appDir, uploadDir) - if err != nil { - return - } - - // copy cfignore if present - fileutils.CopyPathToPath(filepath.Join(appDir, ".cfignore"), filepath.Join(uploadDir, ".cfignore")) //error handling? - - return -} - -func (actor PushActorImpl) getFilesToUpload(allAppFiles []models.AppFileFields) (appFilesToUpload []models.AppFileFields, presentFiles []resources.AppFileResource, apiErr error) { - appFilesRequest := []resources.AppFileResource{} - for _, file := range allAppFiles { - appFilesRequest = append(appFilesRequest, resources.AppFileResource{ - Path: file.Path, - Sha1: file.Sha1, - Size: file.Size, - }) - } - - presentFiles, apiErr = actor.appBitsRepo.GetApplicationFiles(appFilesRequest) - if apiErr != nil { - return nil, nil, apiErr - } - - appFilesToUpload = make([]models.AppFileFields, len(allAppFiles)) - copy(appFilesToUpload, allAppFiles) - for _, file := range presentFiles { - appFile := models.AppFileFields{ - Path: file.Path, - Sha1: file.Sha1, - Size: file.Size, - } - appFilesToUpload = actor.deleteAppFile(appFilesToUpload, appFile) - } - - return -} - -func (actor PushActorImpl) deleteAppFile(appFiles []models.AppFileFields, targetFile models.AppFileFields) []models.AppFileFields { - for i, file := range appFiles { - if file.Path == targetFile.Path { - appFiles[i] = appFiles[len(appFiles)-1] - return appFiles[:len(appFiles)-1] - } - } - return appFiles -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/push_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/push_test.go deleted file mode 100644 index 65d9847..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/push_test.go +++ /dev/null @@ -1,143 +0,0 @@ -package actors_test - -import ( - "errors" - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/actors" - fakeBits "github.com/cloudfoundry/cli/cf/api/application_bits/fakes" - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/app_files/fakes" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/gofileutils/fileutils" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Push Actor", func() { - var ( - appBitsRepo *fakeBits.FakeApplicationBitsRepository - appFiles *fakes.FakeAppFiles - zipper *fakes.FakeZipper - actor actors.PushActor - fixturesDir string - appDir string - allFiles []models.AppFileFields - presentFiles []resources.AppFileResource - ) - - BeforeEach(func() { - appBitsRepo = &fakeBits.FakeApplicationBitsRepository{} - appFiles = &fakes.FakeAppFiles{} - zipper = &fakes.FakeZipper{} - actor = actors.NewPushActor(appBitsRepo, zipper, appFiles) - fixturesDir = filepath.Join("..", "..", "fixtures", "applications") - }) - - Describe("GatherFiles", func() { - BeforeEach(func() { - allFiles = []models.AppFileFields{ - models.AppFileFields{Path: "example-app/.cfignore"}, - models.AppFileFields{Path: "example-app/app.rb"}, - models.AppFileFields{Path: "example-app/config.ru"}, - models.AppFileFields{Path: "example-app/Gemfile"}, - models.AppFileFields{Path: "example-app/Gemfile.lock"}, - models.AppFileFields{Path: "example-app/ignore-me"}, - models.AppFileFields{Path: "example-app/manifest.yml"}, - } - - presentFiles = []resources.AppFileResource{ - resources.AppFileResource{Path: "example-app/ignore-me"}, - } - - appDir = filepath.Join(fixturesDir, "example-app.zip") - zipper.UnzipReturns(nil) - appFiles.AppFilesInDirReturns(allFiles, nil) - appBitsRepo.GetApplicationFilesReturns(presentFiles, nil) - }) - - AfterEach(func() { - }) - - Context("when the input is a zipfile", func() { - BeforeEach(func() { - zipper.IsZipFileReturns(true) - }) - - It("extracts the zip", func() { - fileutils.TempDir("gather-files", func(tmpDir string, err error) { - files, _, err := actor.GatherFiles(appDir, tmpDir) - Expect(zipper.UnzipCallCount()).To(Equal(1)) - Expect(err).NotTo(HaveOccurred()) - Expect(files).To(Equal(presentFiles)) - }) - }) - - }) - - Context("when the input is a directory full of files", func() { - BeforeEach(func() { - zipper.IsZipFileReturns(false) - }) - - It("does not try to unzip the directory", func() { - fileutils.TempDir("gather-files", func(tmpDir string, err error) { - files, _, err := actor.GatherFiles(appDir, tmpDir) - Expect(zipper.UnzipCallCount()).To(Equal(0)) - Expect(err).NotTo(HaveOccurred()) - Expect(files).To(Equal(presentFiles)) - }) - }) - }) - - Context("when errors occur", func() { - It("returns an error if it cannot unzip the files", func() { - fileutils.TempDir("gather-files", func(tmpDir string, err error) { - zipper.IsZipFileReturns(true) - zipper.UnzipReturns(errors.New("error")) - _, _, err = actor.GatherFiles(appDir, tmpDir) - Expect(err).To(HaveOccurred()) - }) - }) - - It("returns an error if it cannot walk the files", func() { - fileutils.TempDir("gather-files", func(tmpDir string, err error) { - appFiles.AppFilesInDirReturns(nil, errors.New("error")) - _, _, err = actor.GatherFiles(appDir, tmpDir) - Expect(err).To(HaveOccurred()) - }) - }) - - It("returns an error if we cannot reach the cc", func() { - fileutils.TempDir("gather-files", func(tmpDir string, err error) { - appBitsRepo.GetApplicationFilesReturns(nil, errors.New("error")) - _, _, err = actor.GatherFiles(appDir, tmpDir) - Expect(err).To(HaveOccurred()) - }) - }) - }) - - Context("when using .cfignore", func() { - BeforeEach(func() { - appBitsRepo.GetApplicationFilesReturns(nil, nil) - appDir = filepath.Join(fixturesDir, "exclude-a-default-cfignore") - }) - - It("includes the .cfignore file in the upload directory", func() { - fileutils.TempDir("gather-files", func(tmpDir string, err error) { - files, _, err := actor.GatherFiles(appDir, tmpDir) - Expect(err).NotTo(HaveOccurred()) - - _, err = os.Stat(filepath.Join(tmpDir, ".cfignore")) - Expect(os.IsNotExist(err)).To(BeFalse()) - Expect(len(files)).To(Equal(0)) - }) - }) - }) - }) - - Describe(".UploadApp", func() { - It("Simply delegates to the UploadApp function on the app bits repo, which is not worth testing", func() {}) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/routes.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/routes.go deleted file mode 100644 index 4f75d67..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/routes.go +++ /dev/null @@ -1,67 +0,0 @@ -package actors - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type RouteActor struct { - ui terminal.UI - routeRepo api.RouteRepository -} - -func NewRouteActor(ui terminal.UI, routeRepo api.RouteRepository) RouteActor { - return RouteActor{ui: ui, routeRepo: routeRepo} -} - -func (routeActor RouteActor) FindOrCreateRoute(hostname string, domain models.DomainFields) (route models.Route) { - route, apiErr := routeActor.routeRepo.FindByHostAndDomain(hostname, domain) - - switch apiErr.(type) { - case nil: - routeActor.ui.Say(T("Using route {{.RouteURL}}", map[string]interface{}{"RouteURL": terminal.EntityNameColor(route.URL())})) - case *errors.ModelNotFoundError: - routeActor.ui.Say(T("Creating route {{.Hostname}}...", map[string]interface{}{"Hostname": terminal.EntityNameColor(domain.UrlForHost(hostname))})) - - route, apiErr = routeActor.routeRepo.Create(hostname, domain) - if apiErr != nil { - routeActor.ui.Failed(apiErr.Error()) - } - - routeActor.ui.Ok() - routeActor.ui.Say("") - default: - routeActor.ui.Failed(apiErr.Error()) - } - - return -} - -func (routeActor RouteActor) BindRoute(app models.Application, route models.Route) { - if !app.HasRoute(route) { - routeActor.ui.Say(T("Binding {{.URL}} to {{.AppName}}...", map[string]interface{}{"URL": terminal.EntityNameColor(route.URL()), "AppName": terminal.EntityNameColor(app.Name)})) - - apiErr := routeActor.routeRepo.Bind(route.Guid, app.Guid) - switch apiErr := apiErr.(type) { - case nil: - routeActor.ui.Ok() - routeActor.ui.Say("") - return - case errors.HttpError: - if apiErr.ErrorCode() == errors.INVALID_RELATION { - routeActor.ui.Failed(T("The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", map[string]interface{}{"URL": route.URL()})) - } - } - routeActor.ui.Failed(apiErr.Error()) - } -} - -func (routeActor RouteActor) UnbindAll(app models.Application) { - for _, route := range app.Routes { - routeActor.ui.Say(T("Removing route {{.URL}}...", map[string]interface{}{"URL": terminal.EntityNameColor(route.URL())})) - routeActor.routeRepo.Unbind(route.Guid, app.Guid) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/fakes/fake_service_builder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/fakes/fake_service_builder.go deleted file mode 100644 index b1f19ea..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/fakes/fake_service_builder.go +++ /dev/null @@ -1,567 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeServiceBuilder struct { - GetAllServicesStub func() ([]models.ServiceOffering, error) - getAllServicesMutex sync.RWMutex - getAllServicesArgsForCall []struct{} - getAllServicesReturns struct { - result1 []models.ServiceOffering - result2 error - } - GetAllServicesWithPlansStub func() ([]models.ServiceOffering, error) - getAllServicesWithPlansMutex sync.RWMutex - getAllServicesWithPlansArgsForCall []struct{} - getAllServicesWithPlansReturns struct { - result1 []models.ServiceOffering - result2 error - } - GetServiceByNameWithPlansStub func(string) (models.ServiceOffering, error) - getServiceByNameWithPlansMutex sync.RWMutex - getServiceByNameWithPlansArgsForCall []struct { - arg1 string - } - getServiceByNameWithPlansReturns struct { - result1 models.ServiceOffering - result2 error - } - GetServiceByNameWithPlansWithOrgNamesStub func(string) (models.ServiceOffering, error) - getServiceByNameWithPlansWithOrgNamesMutex sync.RWMutex - getServiceByNameWithPlansWithOrgNamesArgsForCall []struct { - arg1 string - } - getServiceByNameWithPlansWithOrgNamesReturns struct { - result1 models.ServiceOffering - result2 error - } - GetServiceByNameForSpaceStub func(string, string) (models.ServiceOffering, error) - getServiceByNameForSpaceMutex sync.RWMutex - getServiceByNameForSpaceArgsForCall []struct { - arg1 string - arg2 string - } - getServiceByNameForSpaceReturns struct { - result1 models.ServiceOffering - result2 error - } - GetServiceByNameForSpaceWithPlansStub func(string, string) (models.ServiceOffering, error) - getServiceByNameForSpaceWithPlansMutex sync.RWMutex - getServiceByNameForSpaceWithPlansArgsForCall []struct { - arg1 string - arg2 string - } - getServiceByNameForSpaceWithPlansReturns struct { - result1 models.ServiceOffering - result2 error - } - GetServicesByNameForSpaceWithPlansStub func(string, string) (models.ServiceOfferings, error) - getServicesByNameForSpaceWithPlansMutex sync.RWMutex - getServicesByNameForSpaceWithPlansArgsForCall []struct { - arg1 string - arg2 string - } - getServicesByNameForSpaceWithPlansReturns struct { - result1 models.ServiceOfferings - result2 error - } - GetServiceByNameForOrgStub func(string, string) (models.ServiceOffering, error) - getServiceByNameForOrgMutex sync.RWMutex - getServiceByNameForOrgArgsForCall []struct { - arg1 string - arg2 string - } - getServiceByNameForOrgReturns struct { - result1 models.ServiceOffering - result2 error - } - GetServicesForManyBrokersStub func([]string) ([]models.ServiceOffering, error) - getServicesForManyBrokersMutex sync.RWMutex - getServicesForManyBrokersArgsForCall []struct { - arg1 []string - } - getServicesForManyBrokersReturns struct { - result1 []models.ServiceOffering - result2 error - } - - GetServicesForBrokerStub func(string) ([]models.ServiceOffering, error) - getServicesForBrokerMutex sync.RWMutex - getServicesForBrokerArgsForCall []struct { - arg1 string - } - getServicesForBrokerReturns struct { - result1 []models.ServiceOffering - result2 error - } - GetServicesForSpaceStub func(string) ([]models.ServiceOffering, error) - getServicesForSpaceMutex sync.RWMutex - getServicesForSpaceArgsForCall []struct { - arg1 string - } - getServicesForSpaceReturns struct { - result1 []models.ServiceOffering - result2 error - } - GetServicesForSpaceWithPlansStub func(string) ([]models.ServiceOffering, error) - getServicesForSpaceWithPlansMutex sync.RWMutex - getServicesForSpaceWithPlansArgsForCall []struct { - arg1 string - } - getServicesForSpaceWithPlansReturns struct { - result1 []models.ServiceOffering - result2 error - } - GetServiceVisibleToOrgStub func(string, string) (models.ServiceOffering, error) - getServiceVisibleToOrgMutex sync.RWMutex - getServiceVisibleToOrgArgsForCall []struct { - arg1 string - arg2 string - } - getServiceVisibleToOrgReturns struct { - result1 models.ServiceOffering - result2 error - } - GetServicesVisibleToOrgStub func(string) ([]models.ServiceOffering, error) - getServicesVisibleToOrgMutex sync.RWMutex - getServicesVisibleToOrgArgsForCall []struct { - arg1 string - } - getServicesVisibleToOrgReturns struct { - result1 []models.ServiceOffering - result2 error - } -} - -func (fake *FakeServiceBuilder) GetAllServices() ([]models.ServiceOffering, error) { - fake.getAllServicesMutex.Lock() - defer fake.getAllServicesMutex.Unlock() - fake.getAllServicesArgsForCall = append(fake.getAllServicesArgsForCall, struct{}{}) - if fake.GetAllServicesStub != nil { - return fake.GetAllServicesStub() - } else { - return fake.getAllServicesReturns.result1, fake.getAllServicesReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetAllServicesCallCount() int { - fake.getAllServicesMutex.RLock() - defer fake.getAllServicesMutex.RUnlock() - return len(fake.getAllServicesArgsForCall) -} - -func (fake *FakeServiceBuilder) GetAllServicesReturns(result1 []models.ServiceOffering, result2 error) { - fake.getAllServicesReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetAllServicesWithPlans() ([]models.ServiceOffering, error) { - fake.getAllServicesWithPlansMutex.Lock() - defer fake.getAllServicesWithPlansMutex.Unlock() - fake.getAllServicesWithPlansArgsForCall = append(fake.getAllServicesWithPlansArgsForCall, struct{}{}) - if fake.GetAllServicesWithPlansStub != nil { - return fake.GetAllServicesWithPlansStub() - } else { - return fake.getAllServicesWithPlansReturns.result1, fake.getAllServicesWithPlansReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetAllServicesWithPlansCallCount() int { - fake.getAllServicesWithPlansMutex.RLock() - defer fake.getAllServicesWithPlansMutex.RUnlock() - return len(fake.getAllServicesWithPlansArgsForCall) -} - -func (fake *FakeServiceBuilder) GetAllServicesWithPlansReturns(result1 []models.ServiceOffering, result2 error) { - fake.getAllServicesWithPlansReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlans(arg1 string) (models.ServiceOffering, error) { - fake.getServiceByNameWithPlansMutex.Lock() - defer fake.getServiceByNameWithPlansMutex.Unlock() - fake.getServiceByNameWithPlansArgsForCall = append(fake.getServiceByNameWithPlansArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetServiceByNameWithPlansStub != nil { - return fake.GetServiceByNameWithPlansStub(arg1) - } else { - return fake.getServiceByNameWithPlansReturns.result1, fake.getServiceByNameWithPlansReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansCallCount() int { - fake.getServiceByNameWithPlansMutex.RLock() - defer fake.getServiceByNameWithPlansMutex.RUnlock() - return len(fake.getServiceByNameWithPlansArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansArgsForCall(i int) string { - fake.getServiceByNameWithPlansMutex.RLock() - defer fake.getServiceByNameWithPlansMutex.RUnlock() - return fake.getServiceByNameWithPlansArgsForCall[i].arg1 -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansReturns(result1 models.ServiceOffering, result2 error) { - fake.getServiceByNameWithPlansReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansWithOrgNames(arg1 string) (models.ServiceOffering, error) { - fake.getServiceByNameWithPlansWithOrgNamesMutex.Lock() - defer fake.getServiceByNameWithPlansWithOrgNamesMutex.Unlock() - fake.getServiceByNameWithPlansWithOrgNamesArgsForCall = append(fake.getServiceByNameWithPlansWithOrgNamesArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetServiceByNameWithPlansWithOrgNamesStub != nil { - return fake.GetServiceByNameWithPlansWithOrgNamesStub(arg1) - } else { - return fake.getServiceByNameWithPlansWithOrgNamesReturns.result1, fake.getServiceByNameWithPlansWithOrgNamesReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansWithOrgNamesCallCount() int { - fake.getServiceByNameWithPlansWithOrgNamesMutex.RLock() - defer fake.getServiceByNameWithPlansWithOrgNamesMutex.RUnlock() - return len(fake.getServiceByNameWithPlansWithOrgNamesArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansWithOrgNamesArgsForCall(i int) string { - fake.getServiceByNameWithPlansWithOrgNamesMutex.RLock() - defer fake.getServiceByNameWithPlansWithOrgNamesMutex.RUnlock() - return fake.getServiceByNameWithPlansWithOrgNamesArgsForCall[i].arg1 -} - -func (fake *FakeServiceBuilder) GetServiceByNameWithPlansWithOrgNamesReturns(result1 models.ServiceOffering, result2 error) { - fake.getServiceByNameWithPlansWithOrgNamesReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpace(arg1 string, arg2 string) (models.ServiceOffering, error) { - fake.getServiceByNameForSpaceMutex.Lock() - defer fake.getServiceByNameForSpaceMutex.Unlock() - fake.getServiceByNameForSpaceArgsForCall = append(fake.getServiceByNameForSpaceArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.GetServiceByNameForSpaceStub != nil { - return fake.GetServiceByNameForSpaceStub(arg1, arg2) - } else { - return fake.getServiceByNameForSpaceReturns.result1, fake.getServiceByNameForSpaceReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceCallCount() int { - fake.getServiceByNameForSpaceMutex.RLock() - defer fake.getServiceByNameForSpaceMutex.RUnlock() - return len(fake.getServiceByNameForSpaceArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceArgsForCall(i int) (string, string) { - fake.getServiceByNameForSpaceMutex.RLock() - defer fake.getServiceByNameForSpaceMutex.RUnlock() - return fake.getServiceByNameForSpaceArgsForCall[i].arg1, fake.getServiceByNameForSpaceArgsForCall[i].arg2 -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceReturns(result1 models.ServiceOffering, result2 error) { - fake.getServiceByNameForSpaceReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceWithPlans(arg1 string, arg2 string) (models.ServiceOffering, error) { - fake.getServiceByNameForSpaceWithPlansMutex.Lock() - defer fake.getServiceByNameForSpaceWithPlansMutex.Unlock() - fake.getServiceByNameForSpaceWithPlansArgsForCall = append(fake.getServiceByNameForSpaceWithPlansArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.GetServiceByNameForSpaceWithPlansStub != nil { - return fake.GetServiceByNameForSpaceWithPlansStub(arg1, arg2) - } else { - return fake.getServiceByNameForSpaceWithPlansReturns.result1, fake.getServiceByNameForSpaceWithPlansReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceWithPlansCallCount() int { - fake.getServiceByNameForSpaceWithPlansMutex.RLock() - defer fake.getServiceByNameForSpaceWithPlansMutex.RUnlock() - return len(fake.getServiceByNameForSpaceWithPlansArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceWithPlansArgsForCall(i int) (string, string) { - fake.getServiceByNameForSpaceWithPlansMutex.RLock() - defer fake.getServiceByNameForSpaceWithPlansMutex.RUnlock() - return fake.getServiceByNameForSpaceWithPlansArgsForCall[i].arg1, fake.getServiceByNameForSpaceWithPlansArgsForCall[i].arg2 -} - -func (fake *FakeServiceBuilder) GetServiceByNameForSpaceWithPlansReturns(result1 models.ServiceOffering, result2 error) { - fake.getServiceByNameForSpaceWithPlansReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServicesByNameForSpaceWithPlans(arg1 string, arg2 string) (models.ServiceOfferings, error) { - fake.getServicesByNameForSpaceWithPlansMutex.Lock() - defer fake.getServicesByNameForSpaceWithPlansMutex.Unlock() - fake.getServicesByNameForSpaceWithPlansArgsForCall = append(fake.getServicesByNameForSpaceWithPlansArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.GetServicesByNameForSpaceWithPlansStub != nil { - return fake.GetServicesByNameForSpaceWithPlansStub(arg1, arg2) - } else { - return fake.getServicesByNameForSpaceWithPlansReturns.result1, fake.getServicesByNameForSpaceWithPlansReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServicesByNameForSpaceWithPlansCallCount() int { - fake.getServicesByNameForSpaceWithPlansMutex.RLock() - defer fake.getServicesByNameForSpaceWithPlansMutex.RUnlock() - return len(fake.getServicesByNameForSpaceWithPlansArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServicesByNameForSpaceWithPlansArgsForCall(i int) (string, string) { - fake.getServicesByNameForSpaceWithPlansMutex.RLock() - defer fake.getServicesByNameForSpaceWithPlansMutex.RUnlock() - return fake.getServicesByNameForSpaceWithPlansArgsForCall[i].arg1, fake.getServicesByNameForSpaceWithPlansArgsForCall[i].arg2 -} - -func (fake *FakeServiceBuilder) GetServicesByNameForSpaceWithPlansReturns(result1 models.ServiceOfferings, result2 error) { - fake.getServicesByNameForSpaceWithPlansReturns = struct { - result1 models.ServiceOfferings - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServiceByNameForOrg(arg1 string, arg2 string) (models.ServiceOffering, error) { - fake.getServiceByNameForOrgMutex.Lock() - defer fake.getServiceByNameForOrgMutex.Unlock() - fake.getServiceByNameForOrgArgsForCall = append(fake.getServiceByNameForOrgArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.GetServiceByNameForOrgStub != nil { - return fake.GetServiceByNameForOrgStub(arg1, arg2) - } else { - return fake.getServiceByNameForOrgReturns.result1, fake.getServiceByNameForOrgReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServiceByNameForOrgCallCount() int { - fake.getServiceByNameForOrgMutex.RLock() - defer fake.getServiceByNameForOrgMutex.RUnlock() - return len(fake.getServiceByNameForOrgArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServiceByNameForOrgArgsForCall(i int) (string, string) { - fake.getServiceByNameForOrgMutex.RLock() - defer fake.getServiceByNameForOrgMutex.RUnlock() - return fake.getServiceByNameForOrgArgsForCall[i].arg1, fake.getServiceByNameForOrgArgsForCall[i].arg2 -} - -func (fake *FakeServiceBuilder) GetServiceByNameForOrgReturns(result1 models.ServiceOffering, result2 error) { - fake.getServiceByNameForOrgReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServicesForManyBrokers(arg1 []string) ([]models.ServiceOffering, error) { - fake.getServicesForManyBrokersMutex.Lock() - defer fake.getServicesForManyBrokersMutex.Unlock() - fake.getServicesForManyBrokersArgsForCall = append(fake.getServicesForManyBrokersArgsForCall, struct { - arg1 []string - }{arg1}) - if fake.GetServicesForManyBrokersStub != nil { - return fake.GetServicesForManyBrokersStub(arg1) - } else { - return fake.getServicesForManyBrokersReturns.result1, fake.getServicesForManyBrokersReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServicesForBroker(arg1 string) ([]models.ServiceOffering, error) { - fake.getServicesForBrokerMutex.Lock() - defer fake.getServicesForBrokerMutex.Unlock() - fake.getServicesForBrokerArgsForCall = append(fake.getServicesForBrokerArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetServicesForBrokerStub != nil { - return fake.GetServicesForBrokerStub(arg1) - } else { - return fake.getServicesForBrokerReturns.result1, fake.getServicesForBrokerReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServicesForBrokerCallCount() int { - fake.getServicesForBrokerMutex.RLock() - defer fake.getServicesForBrokerMutex.RUnlock() - return len(fake.getServicesForBrokerArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServicesForBrokerArgsForCall(i int) string { - fake.getServicesForBrokerMutex.RLock() - defer fake.getServicesForBrokerMutex.RUnlock() - return fake.getServicesForBrokerArgsForCall[i].arg1 -} - -func (fake *FakeServiceBuilder) GetServicesForManyBrokersReturns(result1 []models.ServiceOffering, result2 error) { - fake.getServicesForManyBrokersReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServicesForBrokerReturns(result1 []models.ServiceOffering, result2 error) { - fake.getServicesForBrokerReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServicesForSpace(arg1 string) ([]models.ServiceOffering, error) { - fake.getServicesForSpaceMutex.Lock() - defer fake.getServicesForSpaceMutex.Unlock() - fake.getServicesForSpaceArgsForCall = append(fake.getServicesForSpaceArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetServicesForSpaceStub != nil { - return fake.GetServicesForSpaceStub(arg1) - } else { - return fake.getServicesForSpaceReturns.result1, fake.getServicesForSpaceReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceCallCount() int { - fake.getServicesForSpaceMutex.RLock() - defer fake.getServicesForSpaceMutex.RUnlock() - return len(fake.getServicesForSpaceArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceArgsForCall(i int) string { - fake.getServicesForSpaceMutex.RLock() - defer fake.getServicesForSpaceMutex.RUnlock() - return fake.getServicesForSpaceArgsForCall[i].arg1 -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceReturns(result1 []models.ServiceOffering, result2 error) { - fake.getServicesForSpaceReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceWithPlans(arg1 string) ([]models.ServiceOffering, error) { - fake.getServicesForSpaceWithPlansMutex.Lock() - defer fake.getServicesForSpaceWithPlansMutex.Unlock() - fake.getServicesForSpaceWithPlansArgsForCall = append(fake.getServicesForSpaceWithPlansArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetServicesForSpaceWithPlansStub != nil { - return fake.GetServicesForSpaceWithPlansStub(arg1) - } else { - return fake.getServicesForSpaceWithPlansReturns.result1, fake.getServicesForSpaceWithPlansReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceWithPlansCallCount() int { - fake.getServicesForSpaceWithPlansMutex.RLock() - defer fake.getServicesForSpaceWithPlansMutex.RUnlock() - return len(fake.getServicesForSpaceWithPlansArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceWithPlansArgsForCall(i int) string { - fake.getServicesForSpaceWithPlansMutex.RLock() - defer fake.getServicesForSpaceWithPlansMutex.RUnlock() - return fake.getServicesForSpaceWithPlansArgsForCall[i].arg1 -} - -func (fake *FakeServiceBuilder) GetServicesForSpaceWithPlansReturns(result1 []models.ServiceOffering, result2 error) { - fake.getServicesForSpaceWithPlansReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServiceVisibleToOrg(arg1 string, arg2 string) (models.ServiceOffering, error) { - fake.getServiceVisibleToOrgMutex.Lock() - defer fake.getServiceVisibleToOrgMutex.Unlock() - fake.getServiceVisibleToOrgArgsForCall = append(fake.getServiceVisibleToOrgArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.GetServiceVisibleToOrgStub != nil { - return fake.GetServiceVisibleToOrgStub(arg1, arg2) - } else { - return fake.getServiceVisibleToOrgReturns.result1, fake.getServiceVisibleToOrgReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServiceVisibleToOrgCallCount() int { - fake.getServiceVisibleToOrgMutex.RLock() - defer fake.getServiceVisibleToOrgMutex.RUnlock() - return len(fake.getServiceVisibleToOrgArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServiceVisibleToOrgArgsForCall(i int) (string, string) { - fake.getServiceVisibleToOrgMutex.RLock() - defer fake.getServiceVisibleToOrgMutex.RUnlock() - return fake.getServiceVisibleToOrgArgsForCall[i].arg1, fake.getServiceVisibleToOrgArgsForCall[i].arg2 -} - -func (fake *FakeServiceBuilder) GetServiceVisibleToOrgReturns(result1 models.ServiceOffering, result2 error) { - fake.getServiceVisibleToOrgReturns = struct { - result1 models.ServiceOffering - result2 error - }{result1, result2} -} - -func (fake *FakeServiceBuilder) GetServicesVisibleToOrg(arg1 string) ([]models.ServiceOffering, error) { - fake.getServicesVisibleToOrgMutex.Lock() - defer fake.getServicesVisibleToOrgMutex.Unlock() - fake.getServicesVisibleToOrgArgsForCall = append(fake.getServicesVisibleToOrgArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetServicesVisibleToOrgStub != nil { - return fake.GetServicesVisibleToOrgStub(arg1) - } else { - return fake.getServicesVisibleToOrgReturns.result1, fake.getServicesVisibleToOrgReturns.result2 - } -} - -func (fake *FakeServiceBuilder) GetServicesVisibleToOrgCallCount() int { - fake.getServicesVisibleToOrgMutex.RLock() - defer fake.getServicesVisibleToOrgMutex.RUnlock() - return len(fake.getServicesVisibleToOrgArgsForCall) -} - -func (fake *FakeServiceBuilder) GetServicesVisibleToOrgArgsForCall(i int) string { - fake.getServicesVisibleToOrgMutex.RLock() - defer fake.getServicesVisibleToOrgMutex.RUnlock() - return fake.getServicesVisibleToOrgArgsForCall[i].arg1 -} - -func (fake *FakeServiceBuilder) GetServicesVisibleToOrgReturns(result1 []models.ServiceOffering, result2 error) { - fake.getServicesVisibleToOrgReturns = struct { - result1 []models.ServiceOffering - result2 error - }{result1, result2} -} - -var _ ServiceBuilder = new(FakeServiceBuilder) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder_suite_test.go deleted file mode 100644 index 3fa7963..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package service_builder_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestServiceBuilder(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "ServiceBuilder Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder_test.go deleted file mode 100644 index 2bce689..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder_test.go +++ /dev/null @@ -1,482 +0,0 @@ -package service_builder_test - -import ( - "errors" - - plan_builder_fakes "github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes" - "github.com/cloudfoundry/cli/cf/actors/service_builder" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Service Builder", func() { - var ( - planBuilder *plan_builder_fakes.FakePlanBuilder - serviceBuilder service_builder.ServiceBuilder - serviceRepo *testapi.FakeServiceRepo - service1 models.ServiceOffering - service2 models.ServiceOffering - v1Service models.ServiceOffering - planWithoutOrgs models.ServicePlanFields - plan1 models.ServicePlanFields - plan2 models.ServicePlanFields - plan3 models.ServicePlanFields - ) - - BeforeEach(func() { - serviceRepo = &testapi.FakeServiceRepo{} - planBuilder = &plan_builder_fakes.FakePlanBuilder{} - - serviceBuilder = service_builder.NewBuilder(serviceRepo, planBuilder) - service1 = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-service1", - Guid: "service-guid1", - BrokerGuid: "my-service-broker-guid1", - }, - } - - service2 = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-service2", - Guid: "service-guid2", - BrokerGuid: "my-service-broker-guid2", - }, - } - - v1Service = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "v1Service", - Guid: "v1Service-guid", - BrokerGuid: "my-service-broker-guid1", - Provider: "IAmV1", - }, - } - - serviceRepo.FindServiceOfferingsByLabelName = "my-service1" - serviceRepo.FindServiceOfferingsByLabelServiceOfferings = - models.ServiceOfferings([]models.ServiceOffering{service1, v1Service}) - - serviceRepo.GetServiceOfferingByGuidReturns = struct { - ServiceOffering models.ServiceOffering - Error error - }{ - service1, - nil, - } - - serviceRepo.ListServicesFromBrokerReturns = map[string][]models.ServiceOffering{ - "my-service-broker-guid1": []models.ServiceOffering{service1}, - } - - serviceRepo.ListServicesFromManyBrokersReturns = map[string][]models.ServiceOffering{ - "my-service-broker-guid1,my-service-broker-guid2": []models.ServiceOffering{service1, service2}, - } - - plan1 = models.ServicePlanFields{ - Name: "service-plan1", - Guid: "service-plan1-guid", - ServiceOfferingGuid: "service-guid1", - OrgNames: []string{"org1", "org2"}, - } - - plan2 = models.ServicePlanFields{ - Name: "service-plan2", - Guid: "service-plan2-guid", - ServiceOfferingGuid: "service-guid1", - } - - plan3 = models.ServicePlanFields{ - Name: "service-plan3", - Guid: "service-plan3-guid", - ServiceOfferingGuid: "service-guid2", - } - - planWithoutOrgs = models.ServicePlanFields{ - Name: "service-plan-without-orgs", - Guid: "service-plan-without-orgs-guid", - ServiceOfferingGuid: "service-guid1", - } - - planBuilder.GetPlansVisibleToOrgReturns([]models.ServicePlanFields{plan1, plan2}, nil) - planBuilder.GetPlansForServiceWithOrgsReturns([]models.ServicePlanFields{plan1, plan2}, nil) - planBuilder.GetPlansForManyServicesWithOrgsReturns([]models.ServicePlanFields{plan1, plan2, plan3}, nil) - planBuilder.GetPlansForServiceForOrgReturns([]models.ServicePlanFields{plan1, plan2}, nil) - }) - - Describe(".GetServicesForSpace", func() { - BeforeEach(func() { - serviceRepo.GetServiceOfferingsForSpaceReturns = struct { - ServiceOfferings []models.ServiceOffering - Error error - }{ - []models.ServiceOffering{service1, service1}, - nil, - } - }) - - It("returns the services for the space", func() { - services, err := serviceBuilder.GetServicesForSpace("spaceGuid") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(services)).To(Equal(2)) - }) - }) - - Describe(".GetServicesForSpaceWithPlans", func() { - BeforeEach(func() { - serviceRepo.GetServiceOfferingsForSpaceReturns = struct { - ServiceOfferings []models.ServiceOffering - Error error - }{ - []models.ServiceOffering{service1, service1}, - nil, - } - - planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{planWithoutOrgs}, nil) - }) - - It("returns the services for the space, populated with plans", func() { - services, err := serviceBuilder.GetServicesForSpaceWithPlans("spaceGuid") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(services)).To(Equal(2)) - Expect(services[0].Plans[0]).To(Equal(planWithoutOrgs)) - Expect(services[1].Plans[0]).To(Equal(planWithoutOrgs)) - }) - }) - - Describe(".GetAllServices", func() { - BeforeEach(func() { - serviceRepo.GetAllServiceOfferingsReturns = struct { - ServiceOfferings []models.ServiceOffering - Error error - }{ - []models.ServiceOffering{service1, service1}, - nil, - } - }) - - It("returns the named service, populated with plans", func() { - services, err := serviceBuilder.GetAllServices() - Expect(err).NotTo(HaveOccurred()) - - Expect(len(services)).To(Equal(2)) - }) - }) - - Describe(".GetAllServicesWithPlans", func() { - BeforeEach(func() { - serviceRepo.GetAllServiceOfferingsReturns = struct { - ServiceOfferings []models.ServiceOffering - Error error - }{ - []models.ServiceOffering{service1, service1}, - nil, - } - - planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{plan1}, nil) - }) - - It("returns the named service, populated with plans", func() { - services, err := serviceBuilder.GetAllServicesWithPlans() - Expect(err).NotTo(HaveOccurred()) - - Expect(len(services)).To(Equal(2)) - Expect(services[0].Plans[0]).To(Equal(plan1)) - }) - }) - - Describe(".GetServiceByNameWithPlans", func() { - BeforeEach(func() { - planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{plan2}, nil) - }) - - It("returns the named service, populated with plans", func() { - service, err := serviceBuilder.GetServiceByNameWithPlans("my-service1") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(service.Plans)).To(Equal(1)) - Expect(service.Plans[0].Name).To(Equal("service-plan2")) - Expect(service.Plans[0].OrgNames).To(BeNil()) - }) - }) - - Describe(".GetServiceByNameWithPlansWithOrgNames", func() { - It("returns the named service, populated with plans", func() { - service, err := serviceBuilder.GetServiceByNameWithPlansWithOrgNames("my-service1") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(service.Plans)).To(Equal(2)) - Expect(service.Plans[0].Name).To(Equal("service-plan1")) - Expect(service.Plans[1].Name).To(Equal("service-plan2")) - Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - }) - - Describe(".GetServiceByNameForSpace", func() { - Context("mixed v2 and v1 services", func() { - BeforeEach(func() { - service2 := models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "service", - Guid: "service-guid-v2", - }, - } - - service1 := models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "service", - Guid: "service-guid", - Provider: "a provider", - }, - } - - serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { - ServiceOfferings models.ServiceOfferings - Error error - }{ - models.ServiceOfferings([]models.ServiceOffering{ - service1, service2}), - nil, - } - }) - - It("returns the nv2 service", func() { - service, err := serviceBuilder.GetServiceByNameForSpace("service", "spaceGuid") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(service.Plans)).To(Equal(0)) - Expect(service.Guid).To(Equal("service-guid-v2")) - }) - }) - - Context("v2 services", func() { - BeforeEach(func() { - service := models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "service", - Guid: "service-guid", - }, - } - - serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { - ServiceOfferings models.ServiceOfferings - Error error - }{ - models.ServiceOfferings([]models.ServiceOffering{ - service}), - nil, - } - }) - - It("returns the named service", func() { - service, err := serviceBuilder.GetServiceByNameForSpace("service", "spaceGuid") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(service.Plans)).To(Equal(0)) - Expect(service.Guid).To(Equal("service-guid")) - }) - }) - - Context("v1 services", func() { - BeforeEach(func() { - service := models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "service", - Guid: "service-guid", - Provider: "a provider", - }, - } - - serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { - ServiceOfferings models.ServiceOfferings - Error error - }{ - models.ServiceOfferings([]models.ServiceOffering{ - service}), - nil, - } - }) - - It("returns the an error", func() { - service, err := serviceBuilder.GetServiceByNameForSpace("service", "spaceGuid") - Expect(service).To(Equal(models.ServiceOffering{})) - Expect(err).To(HaveOccurred()) - }) - }) - }) - - Describe(".GetServiceByNameForSpaceWithPlans", func() { - BeforeEach(func() { - service := models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "serviceWithPlans", - }, - } - - serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { - ServiceOfferings models.ServiceOfferings - Error error - }{ - models.ServiceOfferings([]models.ServiceOffering{service}), - nil, - } - - planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{planWithoutOrgs}, nil) - }) - - It("returns the named service", func() { - service, err := serviceBuilder.GetServiceByNameForSpaceWithPlans("serviceWithPlans", "spaceGuid") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(service.Plans)).To(Equal(1)) - Expect(service.Plans[0].Name).To(Equal("service-plan-without-orgs")) - Expect(service.Plans[0].OrgNames).To(BeNil()) - }) - }) - - Describe(".GetServicesByNameForSpaceWithPlans", func() { - BeforeEach(func() { - serviceRepo.FindServiceOfferingsForSpaceByLabelReturns = struct { - ServiceOfferings models.ServiceOfferings - Error error - }{ - models.ServiceOfferings([]models.ServiceOffering{service1, v1Service}), - nil, - } - - planBuilder.GetPlansForServiceReturns([]models.ServicePlanFields{planWithoutOrgs}, nil) - }) - - It("returns the named service", func() { - services, err := serviceBuilder.GetServicesByNameForSpaceWithPlans("serviceWithPlans", "spaceGuid") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(services)).To(Equal(2)) - Expect(services[0].Label).To(Equal("my-service1")) - Expect(services[0].Plans[0].Name).To(Equal("service-plan-without-orgs")) - Expect(services[0].Plans[0].OrgNames).To(BeNil()) - Expect(services[1].Label).To(Equal("v1Service")) - Expect(services[1].Plans[0].Name).To(Equal("service-plan-without-orgs")) - Expect(services[1].Plans[0].OrgNames).To(BeNil()) - }) - }) - - Describe(".GetServiceByNameForOrg", func() { - It("returns the named service, populated with plans", func() { - service, err := serviceBuilder.GetServiceByNameForOrg("my-service1", "org1") - Expect(err).NotTo(HaveOccurred()) - - Expect(planBuilder.GetPlansForServiceForOrgCallCount()).To(Equal(1)) - servName, orgName := planBuilder.GetPlansForServiceForOrgArgsForCall(0) - Expect(servName).To(Equal("service-guid1")) - Expect(orgName).To(Equal("org1")) - - Expect(len(service.Plans)).To(Equal(2)) - Expect(service.Plans[0].Name).To(Equal("service-plan1")) - Expect(service.Plans[1].Name).To(Equal("service-plan2")) - Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - }) - - Describe(".GetServicesForBroker", func() { - It("returns all the services for a broker, fully populated", func() { - services, err := serviceBuilder.GetServicesForBroker("my-service-broker-guid1") - Expect(err).NotTo(HaveOccurred()) - - service := services[0] - Expect(service.Label).To(Equal("my-service1")) - Expect(len(service.Plans)).To(Equal(2)) - Expect(service.Plans[0].Name).To(Equal("service-plan1")) - Expect(service.Plans[1].Name).To(Equal("service-plan2")) - Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - }) - - Describe(".GetServicesForManyBrokers", func() { - It("returns all the services for an array of broker guids, fully populated", func() { - brokerGuids := []string{"my-service-broker-guid1", "my-service-broker-guid2"} - services, err := serviceBuilder.GetServicesForManyBrokers(brokerGuids) - Expect(err).NotTo(HaveOccurred()) - - Expect(services).To(HaveLen(2)) - - broker_service := services[0] - Expect(broker_service.Label).To(Equal("my-service1")) - Expect(len(broker_service.Plans)).To(Equal(2)) - Expect(broker_service.Plans[0].Name).To(Equal("service-plan1")) - Expect(broker_service.Plans[1].Name).To(Equal("service-plan2")) - Expect(broker_service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - - broker_service2 := services[1] - Expect(broker_service2.Label).To(Equal("my-service2")) - Expect(len(broker_service2.Plans)).To(Equal(1)) - Expect(broker_service2.Plans[0].Name).To(Equal("service-plan3")) - }) - - It("raises errors from the service repo", func() { - serviceRepo.ListServicesFromManyBrokersErr = errors.New("error") - brokerGuids := []string{"my-service-broker-guid1", "my-service-broker-guid2"} - _, err := serviceBuilder.GetServicesForManyBrokers(brokerGuids) - Expect(err).To(HaveOccurred()) - }) - - It("raises errors from the plan builder", func() { - planBuilder.GetPlansForManyServicesWithOrgsReturns(nil, errors.New("error")) - brokerGuids := []string{"my-service-broker-guid1", "my-service-broker-guid2"} - _, err := serviceBuilder.GetServicesForManyBrokers(brokerGuids) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe(".GetServiceVisibleToOrg", func() { - It("Returns a service populated with plans visible to the provided org", func() { - service, err := serviceBuilder.GetServiceVisibleToOrg("my-service1", "org1") - Expect(err).NotTo(HaveOccurred()) - - Expect(service.Label).To(Equal("my-service1")) - Expect(len(service.Plans)).To(Equal(2)) - Expect(service.Plans[0].Name).To(Equal("service-plan1")) - Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - - Context("When no plans are visible to the provided org", func() { - It("Returns nil", func() { - planBuilder.GetPlansVisibleToOrgReturns(nil, nil) - service, err := serviceBuilder.GetServiceVisibleToOrg("my-service1", "org3") - Expect(err).NotTo(HaveOccurred()) - - Expect(service).To(Equal(models.ServiceOffering{})) - }) - }) - }) - - Describe(".GetServicesVisibleToOrg", func() { - It("Returns services with plans visible to the provided org", func() { - planBuilder.GetPlansVisibleToOrgReturns([]models.ServicePlanFields{plan1, plan2}, nil) - services, err := serviceBuilder.GetServicesVisibleToOrg("org1") - Expect(err).NotTo(HaveOccurred()) - - service := services[0] - Expect(service.Label).To(Equal("my-service1")) - Expect(len(service.Plans)).To(Equal(2)) - Expect(service.Plans[0].Name).To(Equal("service-plan1")) - Expect(service.Plans[0].OrgNames).To(Equal([]string{"org1", "org2"})) - }) - - Context("When no plans are visible to the provided org", func() { - It("Returns nil", func() { - planBuilder.GetPlansVisibleToOrgReturns(nil, nil) - services, err := serviceBuilder.GetServicesVisibleToOrg("org3") - Expect(err).NotTo(HaveOccurred()) - - Expect(services).To(BeNil()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services.go deleted file mode 100644 index 9332202..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services.go +++ /dev/null @@ -1,113 +0,0 @@ -package actors - -import ( - "github.com/cloudfoundry/cli/cf/actors/broker_builder" - "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/models" -) - -type ServiceActor interface { - FilterBrokers(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) -} - -type ServiceHandler struct { - orgRepo organizations.OrganizationRepository - brokerBuilder broker_builder.BrokerBuilder - serviceBuilder service_builder.ServiceBuilder -} - -func NewServiceHandler(org organizations.OrganizationRepository, brokerBuilder broker_builder.BrokerBuilder, serviceBuilder service_builder.ServiceBuilder) ServiceHandler { - return ServiceHandler{ - orgRepo: org, - brokerBuilder: brokerBuilder, - serviceBuilder: serviceBuilder, - } -} - -func (actor ServiceHandler) FilterBrokers(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) { - if orgFlag == "" { - return actor.getServiceBrokers(brokerFlag, serviceFlag) - } else { - err := actor.checkForOrgExistence(orgFlag) - if err != nil { - return nil, err - } - return actor.buildBrokersVisibleFromOrg(brokerFlag, serviceFlag, orgFlag) - } -} - -func (actor ServiceHandler) checkForOrgExistence(orgName string) error { - _, err := actor.orgRepo.FindByName(orgName) - return err -} - -func (actor ServiceHandler) getServiceBrokers(brokerName string, serviceName string) ([]models.ServiceBroker, error) { - if serviceName != "" { - broker, err := actor.brokerBuilder.GetBrokerWithSpecifiedService(serviceName) - if err != nil { - return nil, err - } - - if brokerName != "" { - if broker.Name != brokerName { - return nil, nil - } - } - return []models.ServiceBroker{broker}, nil - } - - if brokerName != "" && serviceName == "" { - broker, err := actor.brokerBuilder.GetBrokerWithAllServices(brokerName) - if err != nil { - return nil, err - } - return []models.ServiceBroker{broker}, nil - } - - return actor.brokerBuilder.GetAllServiceBrokers() -} - -func (actor ServiceHandler) buildBrokersVisibleFromOrg(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) { - if serviceFlag != "" && brokerFlag != "" { - service, err := actor.serviceBuilder.GetServiceVisibleToOrg(serviceFlag, orgFlag) - if err != nil { - return nil, err - } - broker, err := actor.brokerBuilder.AttachSpecificBrokerToServices(brokerFlag, []models.ServiceOffering{service}) - if err != nil { - return nil, err - } - return []models.ServiceBroker{broker}, nil - } - - if serviceFlag != "" && brokerFlag == "" { - service, err := actor.serviceBuilder.GetServiceVisibleToOrg(serviceFlag, orgFlag) - if err != nil { - return nil, err - } - return actor.brokerBuilder.AttachBrokersToServices([]models.ServiceOffering{service}) - } - - if serviceFlag == "" && brokerFlag != "" { - services, err := actor.serviceBuilder.GetServicesVisibleToOrg(orgFlag) - if err != nil { - return nil, err - } - broker, err := actor.brokerBuilder.AttachSpecificBrokerToServices(brokerFlag, services) - if err != nil { - return nil, err - } - return []models.ServiceBroker{broker}, nil - } - - if serviceFlag == "" && brokerFlag == "" { - services, err := actor.serviceBuilder.GetServicesVisibleToOrg(orgFlag) - if err != nil { - return nil, err - } - return actor.brokerBuilder.AttachBrokersToServices(services) - } - - return nil, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_plans.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_plans.go deleted file mode 100644 index 5c47838..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_plans.go +++ /dev/null @@ -1,271 +0,0 @@ -package actors - -import ( - "errors" - "fmt" - - "github.com/cloudfoundry/cli/cf/api/organizations" - - "github.com/cloudfoundry/cli/cf/actors/plan_builder" - "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" -) - -type ServicePlanActor interface { - FindServiceAccess(string, string) (ServiceAccess, error) - UpdateAllPlansForService(string, bool) (bool, error) - UpdateOrgForService(string, string, bool) (bool, error) - UpdateSinglePlanForService(string, string, bool) (PlanAccess, error) - UpdatePlanAndOrgForService(string, string, string, bool) (PlanAccess, error) -} - -type PlanAccess int - -const ( - PlanAccessError PlanAccess = iota - All - Limited - None -) - -type ServiceAccess int - -const ( - ServiceAccessError ServiceAccess = iota - AllPlansArePublic - AllPlansArePrivate - AllPlansAreLimited - SomePlansArePublicSomeAreLimited - SomePlansArePublicSomeArePrivate - SomePlansAreLimitedSomeArePrivate - SomePlansArePublicSomeAreLimitedSomeArePrivate -) - -type ServicePlanHandler struct { - servicePlanRepo api.ServicePlanRepository - servicePlanVisibilityRepo api.ServicePlanVisibilityRepository - orgRepo organizations.OrganizationRepository - serviceBuilder service_builder.ServiceBuilder - planBuilder plan_builder.PlanBuilder -} - -func NewServicePlanHandler(plan api.ServicePlanRepository, vis api.ServicePlanVisibilityRepository, org organizations.OrganizationRepository, planBuilder plan_builder.PlanBuilder, serviceBuilder service_builder.ServiceBuilder) ServicePlanHandler { - return ServicePlanHandler{ - servicePlanRepo: plan, - servicePlanVisibilityRepo: vis, - orgRepo: org, - serviceBuilder: serviceBuilder, - planBuilder: planBuilder, - } -} - -func (actor ServicePlanHandler) UpdateAllPlansForService(serviceName string, setPlanVisibility bool) (bool, error) { - service, err := actor.serviceBuilder.GetServiceByNameWithPlans(serviceName) - if err != nil { - return false, err - } - - allPlansWereSet := true - for _, plan := range service.Plans { - planAccess, err := actor.updateSinglePlan(service, plan.Name, setPlanVisibility) - if err != nil { - return false, err - } - // If any plan is Limited we know that we have to change the visibility. - planAlreadySet := ((planAccess == All) == setPlanVisibility) && planAccess != Limited - allPlansWereSet = allPlansWereSet && planAlreadySet - } - return allPlansWereSet, nil -} - -func (actor ServicePlanHandler) UpdateOrgForService(serviceName string, orgName string, setPlanVisibility bool) (bool, error) { - var err error - var service models.ServiceOffering - - service, err = actor.serviceBuilder.GetServiceByNameForOrg(serviceName, orgName) - if err != nil { - return false, err - } - - org, err := actor.orgRepo.FindByName(orgName) - if err != nil { - return false, err - } - - allPlansWereSet := true - for _, plan := range service.Plans { - visibilityExists := plan.OrgHasVisibility(org.Name) - if plan.Public || visibilityExists == setPlanVisibility { - continue - } else if visibilityExists && !setPlanVisibility { - actor.deleteServicePlanVisibilities(map[string]string{"organization_guid": org.Guid, "service_plan_guid": plan.Guid}) - } else if !visibilityExists && setPlanVisibility { - err = actor.servicePlanVisibilityRepo.Create(plan.Guid, org.Guid) - if err != nil { - return false, err - } - } - // We only get here once we have already updated a plan. - allPlansWereSet = false - } - return allPlansWereSet, nil -} - -func (actor ServicePlanHandler) UpdatePlanAndOrgForService(serviceName, planName, orgName string, setPlanVisibility bool) (PlanAccess, error) { - service, err := actor.serviceBuilder.GetServiceByNameForOrg(serviceName, orgName) - if err != nil { - return PlanAccessError, err - } - - org, err := actor.orgRepo.FindByName(orgName) - if err != nil { - return PlanAccessError, err - } - - found := false - var servicePlan models.ServicePlanFields - for i, val := range service.Plans { - if val.Name == planName { - found = true - servicePlan = service.Plans[i] - } - } - if !found { - return PlanAccessError, errors.New(fmt.Sprintf("Service plan %s not found", planName)) - } - - if !servicePlan.Public && setPlanVisibility { - if servicePlan.OrgHasVisibility(orgName) { - return Limited, nil - } - - // Enable service access - err = actor.servicePlanVisibilityRepo.Create(servicePlan.Guid, org.Guid) - if err != nil { - return PlanAccessError, err - } - } else if !servicePlan.Public && !setPlanVisibility { - // Disable service access - if servicePlan.OrgHasVisibility(org.Name) { - err = actor.deleteServicePlanVisibilities(map[string]string{"organization_guid": org.Guid, "service_plan_guid": servicePlan.Guid}) - if err != nil { - return PlanAccessError, err - } - } - } - - access := actor.findPlanAccess(servicePlan) - return access, nil -} - -func (actor ServicePlanHandler) UpdateSinglePlanForService(serviceName string, planName string, setPlanVisibility bool) (PlanAccess, error) { - serviceOffering, err := actor.serviceBuilder.GetServiceByNameWithPlans(serviceName) - if err != nil { - return PlanAccessError, err - } - return actor.updateSinglePlan(serviceOffering, planName, setPlanVisibility) -} - -func (actor ServicePlanHandler) updateSinglePlan(serviceOffering models.ServiceOffering, planName string, setPlanVisibility bool) (PlanAccess, error) { - var planToUpdate *models.ServicePlanFields - - for _, servicePlan := range serviceOffering.Plans { - if servicePlan.Name == planName { - planToUpdate = &servicePlan - break - } - } - - if planToUpdate == nil { - return PlanAccessError, errors.New(fmt.Sprintf("The plan %s could not be found for service %s", planName, serviceOffering.Label)) - } - - err := actor.updateServicePlanAvailability(serviceOffering.Guid, *planToUpdate, setPlanVisibility) - if err != nil { - return PlanAccessError, err - } - - access := actor.findPlanAccess(*planToUpdate) - return access, nil -} - -func (actor ServicePlanHandler) deleteServicePlanVisibilities(queryParams map[string]string) error { - visibilities, err := actor.servicePlanVisibilityRepo.Search(queryParams) - if err != nil { - return err - } - for _, visibility := range visibilities { - err = actor.servicePlanVisibilityRepo.Delete(visibility.Guid) - if err != nil { - return err - } - } - - return nil -} - -func (actor ServicePlanHandler) updateServicePlanAvailability(serviceGuid string, servicePlan models.ServicePlanFields, setPlanVisibility bool) error { - // We delete all service plan visibilities for the given Plan since the attribute public should function as a giant on/off - // switch for all orgs. Thus we need to clean up any visibilities laying around so that they don't carry over. - err := actor.deleteServicePlanVisibilities(map[string]string{"service_plan_guid": servicePlan.Guid}) - if err != nil { - return err - } - - if servicePlan.Public == setPlanVisibility { - return nil - } - - return actor.servicePlanRepo.Update(servicePlan, serviceGuid, setPlanVisibility) -} - -func (actor ServicePlanHandler) FindServiceAccess(serviceName string, orgName string) (ServiceAccess, error) { - service, err := actor.serviceBuilder.GetServiceByNameForOrg(serviceName, orgName) - if err != nil { - return ServiceAccessError, err - } - - publicBucket, limitedBucket, privateBucket := 0, 0, 0 - - for _, plan := range service.Plans { - if plan.Public { - publicBucket++ - } else if len(plan.OrgNames) > 0 { - limitedBucket++ - } else { - privateBucket++ - } - } - - if publicBucket > 0 && limitedBucket == 0 && privateBucket == 0 { - return AllPlansArePublic, nil - } - if publicBucket > 0 && limitedBucket > 0 && privateBucket == 0 { - return SomePlansArePublicSomeAreLimited, nil - } - if publicBucket > 0 && privateBucket > 0 && limitedBucket == 0 { - return SomePlansArePublicSomeArePrivate, nil - } - - if limitedBucket > 0 && publicBucket == 0 && privateBucket == 0 { - return AllPlansAreLimited, nil - } - if privateBucket > 0 && publicBucket == 0 && privateBucket == 0 { - return AllPlansArePrivate, nil - } - if limitedBucket > 0 && privateBucket > 0 && publicBucket == 0 { - return SomePlansAreLimitedSomeArePrivate, nil - } - return SomePlansArePublicSomeAreLimitedSomeArePrivate, nil -} - -func (actor ServicePlanHandler) findPlanAccess(plan models.ServicePlanFields) PlanAccess { - if plan.Public { - return All - } else if len(plan.OrgNames) > 0 { - return Limited - } else { - return None - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_plans_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_plans_test.go deleted file mode 100644 index cf5349f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_plans_test.go +++ /dev/null @@ -1,621 +0,0 @@ -package actors_test - -import ( - "github.com/cloudfoundry/cli/cf/errors" - - "github.com/cloudfoundry/cli/cf/actors" - fake_plan_builder "github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes" - fake_service_builder "github.com/cloudfoundry/cli/cf/actors/service_builder/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - fake_orgs "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Service Plans", func() { - var ( - actor actors.ServicePlanActor - - servicePlanRepo *testapi.FakeServicePlanRepo - servicePlanVisibilityRepo *testapi.FakeServicePlanVisibilityRepository - orgRepo *fake_orgs.FakeOrganizationRepository - - planBuilder *fake_plan_builder.FakePlanBuilder - serviceBuilder *fake_service_builder.FakeServiceBuilder - - privateServicePlanVisibilityFields models.ServicePlanVisibilityFields - publicServicePlanVisibilityFields models.ServicePlanVisibilityFields - limitedServicePlanVisibilityFields models.ServicePlanVisibilityFields - - publicServicePlan models.ServicePlanFields - privateServicePlan models.ServicePlanFields - limitedServicePlan models.ServicePlanFields - - publicService models.ServiceOffering - mixedService models.ServiceOffering - privateService models.ServiceOffering - publicAndLimitedService models.ServiceOffering - - org1 models.Organization - org2 models.Organization - - visibility1 models.ServicePlanVisibilityFields - ) - - BeforeEach(func() { - servicePlanRepo = &testapi.FakeServicePlanRepo{} - servicePlanVisibilityRepo = &testapi.FakeServicePlanVisibilityRepository{} - orgRepo = &fake_orgs.FakeOrganizationRepository{} - planBuilder = &fake_plan_builder.FakePlanBuilder{} - serviceBuilder = &fake_service_builder.FakeServiceBuilder{} - - actor = actors.NewServicePlanHandler(servicePlanRepo, servicePlanVisibilityRepo, orgRepo, planBuilder, serviceBuilder) - - org1 = models.Organization{} - org1.Name = "org-1" - org1.Guid = "org-1-guid" - - org2 = models.Organization{} - org2.Name = "org-2" - org2.Guid = "org-2-guid" - - orgRepo.FindByNameReturns(org1, nil) - - publicServicePlanVisibilityFields = models.ServicePlanVisibilityFields{ - Guid: "public-service-plan-visibility-guid", - ServicePlanGuid: "public-service-plan-guid", - } - - privateServicePlanVisibilityFields = models.ServicePlanVisibilityFields{ - Guid: "private-service-plan-visibility-guid", - ServicePlanGuid: "private-service-plan-guid", - } - - limitedServicePlanVisibilityFields = models.ServicePlanVisibilityFields{ - Guid: "limited-service-plan-visibility-guid", - ServicePlanGuid: "limited-service-plan-guid", - OrganizationGuid: "org-1-guid", - } - - publicServicePlan = models.ServicePlanFields{ - Name: "public-service-plan", - Guid: "public-service-plan-guid", - Public: true, - } - - privateServicePlan = models.ServicePlanFields{ - Name: "private-service-plan", - Guid: "private-service-plan-guid", - Public: false, - OrgNames: []string{}, - } - - limitedServicePlan = models.ServicePlanFields{ - Name: "limited-service-plan", - Guid: "limited-service-plan-guid", - Public: false, - OrgNames: []string{ - "org-1", - }, - } - - publicService = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-public-service", - Guid: "my-public-service-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - publicServicePlan, - }, - } - - mixedService = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-mixed-service", - Guid: "my-mixed-service-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - privateServicePlan, - limitedServicePlan, - }, - } - - privateService = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-private-service", - Guid: "my-private-service-guid", - }, - Plans: []models.ServicePlanFields{ - privateServicePlan, - privateServicePlan, - }, - } - publicAndLimitedService = models.ServiceOffering{ - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-public-and-limited-service", - Guid: "my-public-and-limited-service-guid", - }, - Plans: []models.ServicePlanFields{ - publicServicePlan, - publicServicePlan, - limitedServicePlan, - }, - } - - visibility1 = models.ServicePlanVisibilityFields{ - Guid: "visibility-guid-1", - OrganizationGuid: "org-1-guid", - ServicePlanGuid: "limited-service-plan-guid", - } - }) - - Describe(".UpdateAllPlansForService", func() { - BeforeEach(func() { - servicePlanVisibilityRepo.SearchReturns( - []models.ServicePlanVisibilityFields{privateServicePlanVisibilityFields}, nil) - - servicePlanRepo.SearchReturns = map[string][]models.ServicePlanFields{ - "my-mixed-service-guid": { - publicServicePlan, - privateServicePlan, - }, - } - }) - - It("Returns an error if the service cannot be found", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(models.ServiceOffering{}, errors.New("service was not found")) - _, err := actor.UpdateAllPlansForService("not-a-service", true) - Expect(err.Error()).To(Equal("service was not found")) - }) - - It("Removes the service plan visibilities for any non-public service plans", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateAllPlansForService("my-mixed-service", true) - Expect(err).ToNot(HaveOccurred()) - - servicePlanVisibilityGuid := servicePlanVisibilityRepo.DeleteArgsForCall(0) - Expect(servicePlanVisibilityGuid).To(Equal("private-service-plan-visibility-guid")) - }) - - Context("when setting all plans to public", func() { - It("Sets all non-public service plans to public", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateAllPlansForService("my-mixed-service", true) - Expect(err).ToNot(HaveOccurred()) - - servicePlan, serviceGuid, public := servicePlanRepo.UpdateArgsForCall(0) - Expect(servicePlan.Public).To(BeFalse()) - Expect(serviceGuid).To(Equal("my-mixed-service-guid")) - Expect(public).To(BeTrue()) - }) - - It("Returns true if all the plans were public", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(publicService, nil) - - servicesOriginallyPublic, err := actor.UpdateAllPlansForService("my-public-service", true) - Expect(err).NotTo(HaveOccurred()) - Expect(servicesOriginallyPublic).To(BeTrue()) - }) - - It("Returns false if any of the plans were not public", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - - servicesOriginallyPublic, err := actor.UpdateAllPlansForService("my-mixed-service", true) - Expect(err).NotTo(HaveOccurred()) - Expect(servicesOriginallyPublic).To(BeFalse()) - }) - - It("Does not try to update service plans if they are all already public", func() { - servicePlanRepo.SearchReturns = map[string][]models.ServicePlanFields{ - "my-public-service-guid": { - publicServicePlan, - publicServicePlan, - }, - } - - _, err := actor.UpdateAllPlansForService("my-public-service", true) - Expect(err).ToNot(HaveOccurred()) - - Expect(servicePlanRepo.UpdateCallCount()).To(Equal(0)) - }) - }) - - Context("when setting all plans to private", func() { - It("Sets all public service plans to private", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - - _, err := actor.UpdateAllPlansForService("my-mixed-service", false) - Expect(err).ToNot(HaveOccurred()) - - servicePlan, serviceGuid, public := servicePlanRepo.UpdateArgsForCall(0) - Expect(servicePlan.Public).To(BeTrue()) - Expect(serviceGuid).To(Equal("my-mixed-service-guid")) - Expect(public).To(BeFalse()) - }) - - It("Returns true if all plans were already private", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(privateService, nil) - - allPlansAlreadyPrivate, err := actor.UpdateAllPlansForService("my-private-service", false) - Expect(err).NotTo(HaveOccurred()) - Expect(allPlansAlreadyPrivate).To(BeTrue()) - }) - - It("Returns false if any of the plans were not private", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - - allPlansAlreadyPrivate, err := actor.UpdateAllPlansForService("my-mixed-service", false) - Expect(err).NotTo(HaveOccurred()) - Expect(allPlansAlreadyPrivate).To(BeFalse()) - }) - - It("Does not try to update service plans if they are all already private", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(privateService, nil) - - _, err := actor.UpdateAllPlansForService("my-private-service", false) - Expect(err).ToNot(HaveOccurred()) - - Expect(servicePlanRepo.UpdateCallCount()).To(Equal(0)) - }) - }) - }) - - Describe(".UpdateOrgForService", func() { - BeforeEach(func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - - orgRepo.FindByNameReturns(org1, nil) - }) - - It("Returns an error if the service cannot be found", func() { - serviceBuilder.GetServiceByNameForOrgReturns(models.ServiceOffering{}, errors.New("service was not found")) - - _, err := actor.UpdateOrgForService("not-a-service", "org-1", true) - Expect(err.Error()).To(Equal("service was not found")) - }) - - Context("when giving access to all plans for a single org", func() { - It("creates a service plan visibility for all private plans", func() { - _, err := actor.UpdateOrgForService("my-mixed-service", "org-1", true) - Expect(err).ToNot(HaveOccurred()) - - Expect(servicePlanVisibilityRepo.CreateCallCount()).To(Equal(1)) - - planGuid, orgGuid := servicePlanVisibilityRepo.CreateArgsForCall(0) - Expect(planGuid).To(Equal("private-service-plan-guid")) - Expect(orgGuid).To(Equal("org-1-guid")) - }) - - It("Returns true if all the plans were already public", func() { - serviceBuilder.GetServiceByNameForOrgReturns(publicService, nil) - allPlansSet, err := actor.UpdateOrgForService("my-public-service", "org-1", true) - Expect(err).NotTo(HaveOccurred()) - Expect(allPlansSet).To(BeTrue()) - }) - - It("Returns false if any of the plans were not public", func() { - serviceBuilder.GetServiceByNameForOrgReturns(privateService, nil) - allPlansSet, err := actor.UpdateOrgForService("my-private-service", "org-1", true) - Expect(err).NotTo(HaveOccurred()) - Expect(allPlansSet).To(BeFalse()) - }) - - It("Does not try to update service plans if they are all already public or the org already has access", func() { - serviceBuilder.GetServiceByNameForOrgReturns(publicAndLimitedService, nil) - - allPlansWereSet, err := actor.UpdateOrgForService("my-public-and-limited-service", "org-1", true) - Expect(err).ToNot(HaveOccurred()) - Expect(servicePlanVisibilityRepo.CreateCallCount()).To(Equal(0)) - Expect(allPlansWereSet).To(BeTrue()) - }) - }) - - Context("when disabling access to all plans for a single org", func() { - It("deletes the associated visibilities for all limited plans", func() { - serviceBuilder.GetServiceByNameForOrgReturns(publicAndLimitedService, nil) - servicePlanVisibilityRepo.SearchReturns([]models.ServicePlanVisibilityFields{visibility1}, nil) - allPlansSet, err := actor.UpdateOrgForService("my-public-and-limited-service", "org-1", false) - Expect(err).ToNot(HaveOccurred()) - Expect(servicePlanVisibilityRepo.DeleteCallCount()).To(Equal(1)) - Expect(allPlansSet).To(BeFalse()) - - services := servicePlanVisibilityRepo.SearchArgsForCall(0) - Expect(services["organization_guid"]).To(Equal("org-1-guid")) - - visibilityGuid := servicePlanVisibilityRepo.DeleteArgsForCall(0) - Expect(visibilityGuid).To(Equal("visibility-guid-1")) - }) - - It("Does not try to update service plans if they are all public", func() { - serviceBuilder.GetServiceByNameForOrgReturns(publicService, nil) - - allPlansWereSet, err := actor.UpdateOrgForService("my-public-and-limited-service", "org-1", false) - Expect(err).ToNot(HaveOccurred()) - Expect(servicePlanVisibilityRepo.DeleteCallCount()).To(Equal(0)) - Expect(allPlansWereSet).To(BeTrue()) - }) - - It("Does not try to update service plans if the org already did not have visibility", func() { - serviceBuilder.GetServiceByNameForOrgReturns(privateService, nil) - - allPlansWereSet, err := actor.UpdateOrgForService("my-private-service", "org-1", false) - Expect(err).ToNot(HaveOccurred()) - Expect(servicePlanVisibilityRepo.DeleteCallCount()).To(Equal(0)) - Expect(allPlansWereSet).To(BeTrue()) - }) - }) - }) - - Describe(".UpdateSinglePlanForService", func() { - It("Returns an error if the service cannot be found", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(models.ServiceOffering{}, errors.New("service was not found")) - _, err := actor.UpdateSinglePlanForService("not-a-service", "public-service-plan", true) - Expect(err.Error()).To(Equal("service was not found")) - }) - - It("Returns None if the original plan was private", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(privateService, nil) - originalAccessValue, err := actor.UpdateSinglePlanForService("my-mixed-service", "private-service-plan", true) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.None)) - }) - - It("Returns All if the original plan was public", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - originalAccessValue, err := actor.UpdateSinglePlanForService("my-mixed-service", "public-service-plan", true) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.All)) - }) - - It("Returns an error if the plan cannot be found", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "not-a-service-plan", true) - Expect(err.Error()).To(Equal("The plan not-a-service-plan could not be found for service my-mixed-service")) - }) - - Context("when setting a public service plan to public", func() { - It("Does not try to update the service plan", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "public-service-plan", true) - Expect(err).ToNot(HaveOccurred()) - Expect(servicePlanRepo.UpdateCallCount()).To(Equal(0)) - }) - }) - - Context("when setting private service plan to public", func() { - BeforeEach(func() { - servicePlanVisibilityRepo.SearchReturns( - []models.ServicePlanVisibilityFields{privateServicePlanVisibilityFields}, nil) - }) - - It("removes the service plan visibilities for the service plan", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "private-service-plan", true) - Expect(err).ToNot(HaveOccurred()) - - servicePlanVisibilityGuid := servicePlanVisibilityRepo.DeleteArgsForCall(0) - Expect(servicePlanVisibilityGuid).To(Equal("private-service-plan-visibility-guid")) - }) - - It("sets a service plan to public", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "private-service-plan", true) - Expect(err).ToNot(HaveOccurred()) - - servicePlan, serviceGuid, public := servicePlanRepo.UpdateArgsForCall(0) - Expect(servicePlan.Public).To(BeFalse()) - Expect(serviceGuid).To(Equal("my-mixed-service-guid")) - Expect(public).To(BeTrue()) - }) - }) - - Context("when setting a private service plan to private", func() { - It("Does not try to update the service plan", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "private-service-plan", false) - Expect(err).ToNot(HaveOccurred()) - Expect(servicePlanRepo.UpdateCallCount()).To(Equal(0)) - }) - }) - - Context("When setting public service plan to private", func() { - BeforeEach(func() { - servicePlanVisibilityRepo.SearchReturns( - []models.ServicePlanVisibilityFields{publicServicePlanVisibilityFields}, nil) - }) - - It("removes the service plan visibilities for the service plan", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "public-service-plan", false) - Expect(err).ToNot(HaveOccurred()) - - servicePlanVisibilityGuid := servicePlanVisibilityRepo.DeleteArgsForCall(0) - Expect(servicePlanVisibilityGuid).To(Equal("public-service-plan-visibility-guid")) - }) - - It("sets the plan to private", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(mixedService, nil) - _, err := actor.UpdateSinglePlanForService("my-mixed-service", "public-service-plan", false) - Expect(err).ToNot(HaveOccurred()) - - servicePlan, serviceGuid, public := servicePlanRepo.UpdateArgsForCall(0) - Expect(servicePlan.Public).To(BeTrue()) - Expect(serviceGuid).To(Equal("my-mixed-service-guid")) - Expect(public).To(BeFalse()) - }) - }) - }) - - Describe(".UpdatePlanAndOrgForService", func() { - BeforeEach(func() { - orgRepo.FindByNameReturns(org1, nil) - }) - - It("returns an error if the service cannot be found", func() { - serviceBuilder.GetServiceByNameForOrgReturns(models.ServiceOffering{}, errors.New("service was not found")) - - _, err := actor.UpdatePlanAndOrgForService("not-a-service", "public-service-plan", "public-org", true) - Expect(err.Error()).To(Equal("service was not found")) - }) - - It("returns an error if the org cannot be found", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.NewModelNotFoundError("organization", "not-an-org")) - _, err := actor.UpdatePlanAndOrgForService("a-real-service", "public-service-plan", "not-an-org", true) - Expect(err).To(HaveOccurred()) - }) - - It("returns an error if the plan cannot be found", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - - _, err := actor.UpdatePlanAndOrgForService("a-real-service", "not-a-plan", "org-1", true) - Expect(err).To(HaveOccurred()) - }) - - Context("when disabling access to a single plan for a single org", func() { - Context("for a public plan", func() { - It("returns All", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "public-service-plan", "org-1", false) - - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.All)) - }) - - It("does not try and delete the visibility", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "public-service-plan", "org-1", false) - - Expect(servicePlanVisibilityRepo.DeleteCallCount()).To(Equal(0)) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.All)) - }) - }) - - Context("for a private plan", func() { - Context("with no service plan visibilities", func() { - It("returns None", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "private-service-plan", "org-1", false) - - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.None)) - }) - It("does not try and delete the visibility", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "private-service-plan", "org-1", false) - - Expect(servicePlanVisibilityRepo.DeleteCallCount()).To(Equal(0)) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.None)) - }) - }) - - Context("with service plan visibilities", func() { - BeforeEach(func() { - servicePlanVisibilityRepo.SearchReturns( - []models.ServicePlanVisibilityFields{limitedServicePlanVisibilityFields}, nil) - - }) - It("deletes a service plan visibility", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "limited-service-plan", "org-1", false) - - servicePlanVisGuid := servicePlanVisibilityRepo.DeleteArgsForCall(0) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.Limited)) - Expect(servicePlanVisGuid).To(Equal("limited-service-plan-visibility-guid")) - }) - - It("does not call delete if the specified service plan visibility does not exist", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - orgRepo.FindByNameReturns(org2, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "limited-service-plan", "org-2", false) - - Expect(servicePlanVisibilityRepo.DeleteCallCount()).To(Equal(0)) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.Limited)) - }) - }) - }) - }) - - Context("when enabling access", func() { - Context("for a public plan", func() { - It("returns All", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "public-service-plan", "org-1", true) - - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.All)) - }) - - It("does not try and create the visibility", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "public-service-plan", "org-1", true) - - Expect(servicePlanVisibilityRepo.CreateCallCount()).To(Equal(0)) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.All)) - }) - }) - - Context("for a limited plan", func() { - BeforeEach(func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - }) - It("returns Limited", func() { - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "limited-service-plan", "org-1", true) - - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.Limited)) - }) - - Context("when the org already has access", func() { - It("does not try and create the visibility", func() { - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "limited-service-plan", "org-1", true) - - Expect(servicePlanVisibilityRepo.CreateCallCount()).To(Equal(0)) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.Limited)) - }) - }) - Context("when the org does not have access", func() { - It("creates the visibility", func() { - orgRepo.FindByNameReturns(org2, nil) - - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "limited-service-plan", "org-2", true) - - Expect(servicePlanVisibilityRepo.CreateCallCount()).To(Equal(1)) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.Limited)) - }) - }) - }) - - Context("for a private plan", func() { - It("returns None", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "private-service-plan", "org-1", true) - - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.None)) - }) - - It("creates a service plan visibility", func() { - serviceBuilder.GetServiceByNameForOrgReturns(mixedService, nil) - originalAccessValue, err := actor.UpdatePlanAndOrgForService("my-mixed-service", "private-service-plan", "org-1", true) - - servicePlanGuid, orgGuid := servicePlanVisibilityRepo.CreateArgsForCall(0) - Expect(err).NotTo(HaveOccurred()) - Expect(originalAccessValue).To(Equal(actors.None)) - Expect(servicePlanGuid).To(Equal("private-service-plan-guid")) - Expect(orgGuid).To(Equal("org-1-guid")) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_test.go deleted file mode 100644 index e4ba4b9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/services_test.go +++ /dev/null @@ -1,203 +0,0 @@ -package actors_test - -import ( - "github.com/cloudfoundry/cli/cf/actors" - broker_builder "github.com/cloudfoundry/cli/cf/actors/broker_builder/fakes" - service_builder "github.com/cloudfoundry/cli/cf/actors/service_builder/fakes" - organization_fakes "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Services", func() { - var ( - actor actors.ServiceActor - brokerBuilder *broker_builder.FakeBrokerBuilder - serviceBuilder *service_builder.FakeServiceBuilder - orgRepo *organization_fakes.FakeOrganizationRepository - serviceBroker1 models.ServiceBroker - serviceBroker2 models.ServiceBroker - service1 models.ServiceOffering - ) - - BeforeEach(func() { - orgRepo = &organization_fakes.FakeOrganizationRepository{} - brokerBuilder = &broker_builder.FakeBrokerBuilder{} - serviceBuilder = &service_builder.FakeServiceBuilder{} - - actor = actors.NewServiceHandler(orgRepo, brokerBuilder, serviceBuilder) - - serviceBroker1 = models.ServiceBroker{Guid: "my-service-broker-guid1", Name: "my-service-broker1"} - serviceBroker2 = models.ServiceBroker{Guid: "my-service-broker-guid2", Name: "my-service-broker2"} - - service1 = models.ServiceOffering{ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "my-service1", - Guid: "service-guid1", - BrokerGuid: "my-service-broker-guid1"}, - } - - org1 := models.Organization{} - org1.Name = "org1" - org1.Guid = "org-guid" - - org2 := models.Organization{} - org2.Name = "org2" - org2.Guid = "org2-guid" - }) - - Describe("FilterBrokers", func() { - Context("when no flags are passed", func() { - It("returns all brokers", func() { - returnedBrokers := []models.ServiceBroker{serviceBroker1} - brokerBuilder.GetAllServiceBrokersReturns(returnedBrokers, nil) - - brokers, err := actor.FilterBrokers("", "", "") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - }) - }) - - Context("when the -b flag is passed", func() { - It("returns a single broker contained in a slice with all dependencies populated", func() { - returnedBroker := serviceBroker1 - brokerBuilder.GetBrokerWithAllServicesReturns(returnedBroker, nil) - - brokers, err := actor.FilterBrokers("my-service-broker1", "", "") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - }) - }) - - Context("when the -e flag is passed", func() { - It("returns a single broker containing a single service", func() { - serviceBroker1.Services = []models.ServiceOffering{service1} - returnedBroker := serviceBroker1 - brokerBuilder.GetBrokerWithSpecifiedServiceReturns(returnedBroker, nil) - - brokers, err := actor.FilterBrokers("", "my-service1", "") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - Expect(len(brokers[0].Services)).To(Equal(1)) - - Expect(brokers[0].Services[0].Guid).To(Equal("service-guid1")) - }) - }) - - Context("when the -o flag is passed", func() { - It("returns an error if the org does not actually exist", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.NewModelNotFoundError("organization", "org-that-shall-not-be-found")) - _, err := actor.FilterBrokers("", "", "org-that-shall-not-be-found") - - Expect(err).To(HaveOccurred()) - }) - - It("returns a slice of brokers containing Services/Service Plans visible to the org", func() { - serviceBroker1.Services = []models.ServiceOffering{service1} - returnedBroker := []models.ServiceBroker{serviceBroker1} - - serviceBuilder.GetServicesVisibleToOrgReturns([]models.ServiceOffering{service1}, nil) - brokerBuilder.AttachBrokersToServicesReturns(returnedBroker, nil) - - brokers, err := actor.FilterBrokers("", "", "org1") - Expect(err).NotTo(HaveOccurred()) - - orgName := serviceBuilder.GetServicesVisibleToOrgArgsForCall(0) - Expect(orgName).To(Equal("org1")) - - Expect(len(brokers)).To(Equal(1)) - Expect(len(brokers[0].Services)).To(Equal(1)) - Expect(brokers[0].Services[0].Guid).To(Equal("service-guid1")) - }) - }) - - Context("when the -b AND the -e flags are passed", func() { - It("returns the intersection set", func() { - serviceBroker1.Services = []models.ServiceOffering{service1} - returnedBroker := serviceBroker1 - brokerBuilder.GetBrokerWithSpecifiedServiceReturns(returnedBroker, nil) - - brokers, err := actor.FilterBrokers("my-service-broker1", "my-service1", "") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - Expect(len(brokers[0].Services)).To(Equal(1)) - - Expect(brokers[0].Services[0].Label).To(Equal("my-service1")) - Expect(brokers[0].Services[0].Guid).To(Equal("service-guid1")) - }) - - Context("when the -b AND -e intersection is the empty set", func() { - It("returns an empty set", func() { - brokerBuilder.GetBrokerWithSpecifiedServiceReturns(models.ServiceBroker{}, nil) - brokers, err := actor.FilterBrokers("my-service-broker", "my-service2", "") - - Expect(len(brokers)).To(Equal(0)) - Expect(err).To(BeNil()) - }) - }) - }) - - Context("when the -b AND the -o flags are passed", func() { - It("returns the intersection set", func() { - serviceBroker1.Services = []models.ServiceOffering{service1} - returnedBroker := serviceBroker1 - - serviceBuilder.GetServiceVisibleToOrgReturns(service1, nil) - brokerBuilder.AttachSpecificBrokerToServicesReturns(returnedBroker, nil) - - brokers, err := actor.FilterBrokers("my-service-broker", "", "org1") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - Expect(len(brokers[0].Services)).To(Equal(1)) - - Expect(brokers[0].Services[0].Label).To(Equal("my-service1")) - Expect(brokers[0].Services[0].Guid).To(Equal("service-guid1")) - }) - }) - - Context("when the -e AND the -o flags are passed", func() { - It("returns the intersection set", func() { - serviceBroker1.Services = []models.ServiceOffering{service1} - returnedBrokers := []models.ServiceBroker{serviceBroker1} - - serviceBuilder.GetServicesVisibleToOrgReturns([]models.ServiceOffering{service1}, nil) - brokerBuilder.AttachBrokersToServicesReturns(returnedBrokers, nil) - - brokers, err := actor.FilterBrokers("", "my-service1", "org1") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - Expect(len(brokers[0].Services)).To(Equal(1)) - - Expect(brokers[0].Services[0].Label).To(Equal("my-service1")) - Expect(brokers[0].Services[0].Guid).To(Equal("service-guid1")) - }) - }) - - Context("when the -b AND -e AND the -o flags are passed", func() { - It("returns the intersection set", func() { - serviceBroker1.Services = []models.ServiceOffering{service1} - returnedBroker := serviceBroker1 - - serviceBuilder.GetServicesVisibleToOrgReturns([]models.ServiceOffering{service1}, nil) - brokerBuilder.AttachSpecificBrokerToServicesReturns(returnedBroker, nil) - - brokers, err := actor.FilterBrokers("my-service-broker1", "my-service1", "org1") - Expect(err).NotTo(HaveOccurred()) - - Expect(len(brokers)).To(Equal(1)) - Expect(len(brokers[0].Services)).To(Equal(1)) - - Expect(brokers[0].Services[0].Label).To(Equal("my-service1")) - Expect(brokers[0].Services[0].Guid).To(Equal("service-guid1")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/api_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/api_suite_test.go deleted file mode 100644 index f379739..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/api_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package api_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestApi(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Api Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events.go deleted file mode 100644 index 20fa00b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events.go +++ /dev/null @@ -1,50 +0,0 @@ -package app_events - -import ( - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/api/strategy" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type AppEventsRepository interface { - RecentEvents(appGuid string, limit int64) ([]models.EventFields, error) -} - -type CloudControllerAppEventsRepository struct { - config core_config.Reader - gateway net.Gateway - strategy strategy.EndpointStrategy -} - -func NewCloudControllerAppEventsRepository(config core_config.Reader, gateway net.Gateway, strategy strategy.EndpointStrategy) CloudControllerAppEventsRepository { - return CloudControllerAppEventsRepository{ - config: config, - gateway: gateway, - strategy: strategy, - } -} - -func (repo CloudControllerAppEventsRepository) RecentEvents(appGuid string, limit int64) ([]models.EventFields, error) { - count := int64(0) - events := make([]models.EventFields, 0, limit) - apiErr := repo.listEvents(appGuid, limit, func(eventField models.EventFields) bool { - count++ - events = append(events, eventField) - return count < limit - }) - - return events, apiErr -} - -func (repo CloudControllerAppEventsRepository) listEvents(appGuid string, limit int64, cb func(models.EventFields) bool) error { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - repo.strategy.EventsURL(appGuid, limit), - repo.strategy.EventsResource(), - - func(resource interface{}) bool { - return cb(resource.(resources.EventResource).ToFields()) - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events_suite_test.go deleted file mode 100644 index 4f78a36..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package app_events_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAppEvents(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "AppEvents Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events_test.go deleted file mode 100644 index 5f4e2b1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/app_events_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package app_events_test - -import ( - "net/http" - "net/http/httptest" - "time" - - . "github.com/cloudfoundry/cli/cf/api/app_events" - "github.com/cloudfoundry/cli/cf/api/strategy" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - testtime "github.com/cloudfoundry/cli/testhelpers/time" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("App Events Repo", func() { - var ( - server *httptest.Server - handler *testnet.TestHandler - config core_config.ReadWriter - repo AppEventsRepository - ) - - BeforeEach(func() { - config = testconfig.NewRepository() - config.SetAccessToken("BEARER my_access_token") - config.SetApiVersion("2.2.0") - }) - - JustBeforeEach(func() { - strategy := strategy.NewEndpointStrategy(config.ApiVersion()) - gateway := net.NewCloudControllerGateway(config, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerAppEventsRepository(config, gateway, strategy) - }) - - AfterEach(func() { - server.Close() - }) - - setupTestServer := func(requests ...testnet.TestRequest) { - server, handler = testnet.NewServer(requests) - config.SetApiEndpoint(server.URL) - } - - Describe("list recent events", func() { - It("returns the most recent events", func() { - setupTestServer(eventsRequest) - - list, err := repo.RecentEvents("my-app-guid", 2) - Expect(err).ToNot(HaveOccurred()) - - Expect(list).To(ConsistOf([]models.EventFields{ - models.EventFields{ - Guid: "event-1-guid", - Name: "audit.app.update", - Timestamp: testtime.MustParse(eventTimestampFormat, "2014-01-21T00:20:11+00:00"), - Description: "instances: 1, memory: 256, command: PRIVATE DATA HIDDEN, environment_json: PRIVATE DATA HIDDEN", - ActorName: "somebody@pivotallabs.com", - }, - models.EventFields{ - Guid: "event-2-guid", - Name: "audit.app.update", - Timestamp: testtime.MustParse(eventTimestampFormat, "2014-01-21T00:20:11+00:00"), - Description: "instances: 1, memory: 256, command: PRIVATE DATA HIDDEN, environment_json: PRIVATE DATA HIDDEN", - ActorName: "nobody@pivotallabs.com", - }, - })) - }) - }) -}) - -const eventTimestampFormat = "2006-01-02T15:04:05-07:00" - -var eventsRequest = testnet.TestRequest{ - Method: "GET", - Path: "/v2/events?q=actee%3Amy-app-guid&order-direction=desc&results-per-page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 1, - "total_pages": 1, - "prev_url": null, - "next_url": "/v2/events?q=actee%3Amy-app-guid&page=2", - "resources": [ - { - "metadata": { - "guid": "event-1-guid" - }, - "entity": { - "type": "audit.app.update", - "timestamp": "2014-01-21T00:20:11+00:00", - "actor_name": "somebody@pivotallabs.com", - "metadata": { - "request": { - "command": "PRIVATE DATA HIDDEN", - "instances": 1, - "memory": 256, - "name": "dora", - "environment_json": "PRIVATE DATA HIDDEN" - } - } - } - }, - { - "metadata": { - "guid": "event-2-guid" - }, - "entity": { - "type": "audit.app.update", - "actor_name": "nobody@pivotallabs.com", - "timestamp": "2014-01-21T00:20:11+00:00", - "metadata": { - "request": { - "command": "PRIVATE DATA HIDDEN", - "instances": 1, - "memory": 256, - "name": "dora", - "environment_json": "PRIVATE DATA HIDDEN" - } - } - } - } - ] - }`}} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/fakes/fake_app_events_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/fakes/fake_app_events_repository.go deleted file mode 100644 index b8730a5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_events/fakes/fake_app_events_repository.go +++ /dev/null @@ -1,57 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/app_events" - - "github.com/cloudfoundry/cli/cf/models" - "sync" -) - -type FakeAppEventsRepository struct { - RecentEventsStub func(appGuid string, limit int64) ([]models.EventFields, error) - recentEventsMutex sync.RWMutex - recentEventsArgsForCall []struct { - appGuid string - limit int64 - } - recentEventsReturns struct { - result1 []models.EventFields - result2 error - } -} - -func (fake *FakeAppEventsRepository) RecentEvents(appGuid string, limit int64) ([]models.EventFields, error) { - fake.recentEventsMutex.Lock() - defer fake.recentEventsMutex.Unlock() - fake.recentEventsArgsForCall = append(fake.recentEventsArgsForCall, struct { - appGuid string - limit int64 - }{appGuid, limit}) - if fake.RecentEventsStub != nil { - return fake.RecentEventsStub(appGuid, limit) - } else { - return fake.recentEventsReturns.result1, fake.recentEventsReturns.result2 - } -} - -func (fake *FakeAppEventsRepository) RecentEventsCallCount() int { - fake.recentEventsMutex.RLock() - defer fake.recentEventsMutex.RUnlock() - return len(fake.recentEventsArgsForCall) -} - -func (fake *FakeAppEventsRepository) RecentEventsArgsForCall(i int) (string, int64) { - fake.recentEventsMutex.RLock() - defer fake.recentEventsMutex.RUnlock() - return fake.recentEventsArgsForCall[i].appGuid, fake.recentEventsArgsForCall[i].limit -} - -func (fake *FakeAppEventsRepository) RecentEventsReturns(result1 []models.EventFields, result2 error) { - fake.recentEventsReturns = struct { - result1 []models.EventFields - result2 error - }{result1, result2} -} - -var _ AppEventsRepository = new(FakeAppEventsRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files.go deleted file mode 100644 index 459c365..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files.go +++ /dev/null @@ -1,34 +0,0 @@ -package app_files - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" -) - -type AppFilesRepository interface { - ListFiles(appGuid string, instance int, path string) (files string, apiErr error) -} - -type CloudControllerAppFilesRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerAppFilesRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerAppFilesRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerAppFilesRepository) ListFiles(appGuid string, instance int, path string) (files string, apiErr error) { - url := fmt.Sprintf("%s/v2/apps/%s/instances/%d/files/%s", repo.config.ApiEndpoint(), appGuid, instance, path) - request, apiErr := repo.gateway.NewRequest("GET", url, repo.config.AccessToken(), nil) - if apiErr != nil { - return - } - - files, _, apiErr = repo.gateway.PerformRequestForTextResponse(request) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files_suite_test.go deleted file mode 100644 index bfdc848..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package app_files_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAppFiles(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "AppFiles Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files_test.go deleted file mode 100644 index f8add1e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/app_files_test.go +++ /dev/null @@ -1,69 +0,0 @@ -package app_files_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/app_files" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("AppFilesRepository", func() { - It("lists files", func() { - expectedResponse := "file 1\n file 2\n file 3" - - listFilesEndpoint := func(writer http.ResponseWriter, request *http.Request) { - methodMatches := request.Method == "GET" - pathMatches := request.URL.Path == "/some/path" - - if !methodMatches || !pathMatches { - fmt.Printf("One of the matchers did not match. Method [%t] Path [%t]", - methodMatches, pathMatches) - - writer.WriteHeader(http.StatusInternalServerError) - return - } - - writer.WriteHeader(http.StatusOK) - fmt.Fprint(writer, expectedResponse) - } - - listFilesServer := httptest.NewServer(http.HandlerFunc(listFilesEndpoint)) - defer listFilesServer.Close() - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/apps/my-app-guid/instances/1/files/some/path", - Response: testnet.TestResponse{ - Status: http.StatusTemporaryRedirect, - Header: http.Header{ - "Location": {fmt.Sprintf("%s/some/path", listFilesServer.URL)}, - }, - }, - }) - - listFilesRedirectServer, handler := testnet.NewServer([]testnet.TestRequest{req}) - defer listFilesRedirectServer.Close() - - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(listFilesRedirectServer.URL) - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo := NewCloudControllerAppFilesRepository(configRepo, gateway) - list, err := repo.ListFiles("my-app-guid", 1, "some/path") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).ToNot(HaveOccurred()) - Expect(list).To(Equal(expectedResponse)) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/fakes/fake_app_files_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/fakes/fake_app_files_repository.go deleted file mode 100644 index 809f31f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_files/fakes/fake_app_files_repository.go +++ /dev/null @@ -1,58 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/app_files" - - "sync" -) - -type FakeAppFilesRepository struct { - ListFilesStub func(appGuid string, instance int, path string) (files string, apiErr error) - listFilesMutex sync.RWMutex - listFilesArgsForCall []struct { - appGuid string - instance int - path string - } - listFilesReturns struct { - result1 string - result2 error - } -} - -func (fake *FakeAppFilesRepository) ListFiles(appGuid string, instance int, path string) (files string, apiErr error) { - fake.listFilesMutex.Lock() - defer fake.listFilesMutex.Unlock() - fake.listFilesArgsForCall = append(fake.listFilesArgsForCall, struct { - appGuid string - instance int - path string - }{appGuid, instance, path}) - if fake.ListFilesStub != nil { - return fake.ListFilesStub(appGuid, instance, path) - } else { - return fake.listFilesReturns.result1, fake.listFilesReturns.result2 - } -} - -func (fake *FakeAppFilesRepository) ListFilesCallCount() int { - fake.listFilesMutex.RLock() - defer fake.listFilesMutex.RUnlock() - return len(fake.listFilesArgsForCall) -} - -func (fake *FakeAppFilesRepository) ListFilesArgsForCall(i int) (string, int, string) { - fake.listFilesMutex.RLock() - defer fake.listFilesMutex.RUnlock() - return fake.listFilesArgsForCall[i].appGuid, fake.listFilesArgsForCall[i].instance, fake.listFilesArgsForCall[i].path -} - -func (fake *FakeAppFilesRepository) ListFilesReturns(result1 string, result2 error) { - fake.listFilesReturns = struct { - result1 string - result2 error - }{result1, result2} -} - -var _ AppFilesRepository = new(FakeAppFilesRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances.go deleted file mode 100644 index fc68c26..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances.go +++ /dev/null @@ -1,111 +0,0 @@ -package app_instances - -import ( - "fmt" - "strconv" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type InstancesApiResponse map[string]InstanceApiResponse - -type InstanceApiResponse struct { - State string - Since float64 - Details string -} - -type StatsApiResponse map[string]InstanceStatsApiResponse - -type InstanceStatsApiResponse struct { - Stats struct { - DiskQuota int64 `json:"disk_quota"` - MemQuota int64 `json:"mem_quota"` - Usage struct { - Cpu float64 - Disk int64 - Mem int64 - } - } -} - -type AppInstancesRepository interface { - GetInstances(appGuid string) (instances []models.AppInstanceFields, apiErr error) - DeleteInstance(appGuid string, instance int) error -} - -type CloudControllerAppInstancesRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerAppInstancesRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerAppInstancesRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerAppInstancesRepository) GetInstances(appGuid string) (instances []models.AppInstanceFields, err error) { - instancesResponse := InstancesApiResponse{} - err = repo.gateway.GetResource( - fmt.Sprintf("%s/v2/apps/%s/instances", repo.config.ApiEndpoint(), appGuid), - &instancesResponse) - if err != nil { - return - } - - instances = make([]models.AppInstanceFields, len(instancesResponse), len(instancesResponse)) - for k, v := range instancesResponse { - index, err := strconv.Atoi(k) - if err != nil { - continue - } - - instances[index] = models.AppInstanceFields{ - State: models.InstanceState(strings.ToLower(v.State)), - Details: v.Details, - Since: time.Unix(int64(v.Since), 0), - } - } - - return repo.updateInstancesWithStats(appGuid, instances) -} - -func (repo CloudControllerAppInstancesRepository) DeleteInstance(appGuid string, instance int) error { - err := repo.gateway.DeleteResource(repo.config.ApiEndpoint(), fmt.Sprintf("/v2/apps/%s/instances/%d", appGuid, instance)) - if err != nil { - return err - } - return nil -} - -func (repo CloudControllerAppInstancesRepository) updateInstancesWithStats(guid string, instances []models.AppInstanceFields) (updatedInst []models.AppInstanceFields, apiErr error) { - path := fmt.Sprintf("%s/v2/apps/%s/stats", repo.config.ApiEndpoint(), guid) - statsResponse := StatsApiResponse{} - apiErr = repo.gateway.GetResource(path, &statsResponse) - if apiErr != nil { - return - } - - updatedInst = make([]models.AppInstanceFields, len(statsResponse), len(statsResponse)) - for k, v := range statsResponse { - index, err := strconv.Atoi(k) - if err != nil { - continue - } - - instance := instances[index] - instance.CpuUsage = v.Stats.Usage.Cpu - instance.DiskQuota = v.Stats.DiskQuota - instance.DiskUsage = v.Stats.Usage.Disk - instance.MemQuota = v.Stats.MemQuota - instance.MemUsage = v.Stats.Usage.Mem - - updatedInst[index] = instance - } - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances_suite_test.go deleted file mode 100644 index d727863..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package app_instances_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAppInstances(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "AppInstances Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances_test.go deleted file mode 100644 index 12ae040..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/app_instances_test.go +++ /dev/null @@ -1,145 +0,0 @@ -package app_instances_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/app_instances" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("AppInstancesRepo", func() { - Describe("Getting the instances for an application", func() { - It("returns instances of the app, given a guid", func() { - ts, handler, repo := createAppInstancesRepo([]testnet.TestRequest{ - appInstancesRequest, - appStatsRequest, - }) - defer ts.Close() - appGuid := "my-cool-app-guid" - - instances, err := repo.GetInstances(appGuid) - Expect(err).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - - Expect(len(instances)).To(Equal(2)) - - Expect(instances[0].State).To(Equal(models.InstanceRunning)) - Expect(instances[1].State).To(Equal(models.InstanceStarting)) - Expect(instances[1].Details).To(Equal("insufficient resources")) - - instance0 := instances[0] - Expect(instance0.Since).To(Equal(time.Unix(1379522342, 0))) - Expect(instance0.DiskQuota).To(Equal(int64(1073741824))) - Expect(instance0.DiskUsage).To(Equal(int64(56037376))) - Expect(instance0.MemQuota).To(Equal(int64(67108864))) - Expect(instance0.MemUsage).To(Equal(int64(19218432))) - Expect(instance0.CpuUsage).To(Equal(3.659571249238058e-05)) - }) - }) - - Describe("Deleting an instance for an application", func() { - It("returns no error if the response is successful", func() { - ts, handler, repo := createAppInstancesRepo([]testnet.TestRequest{ - deleteInstanceRequest, - }) - defer ts.Close() - appGuid := "my-cool-app-guid" - - err := repo.DeleteInstance(appGuid, 0) - Expect(err).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - It("returns the error if the response is unsuccessful", func() { - ts, handler, repo := createAppInstancesRepo([]testnet.TestRequest{ - deleteInstanceFromUnkownApp, - }) - defer ts.Close() - appGuid := "some-wrong-app-guid" - - err := repo.DeleteInstance(appGuid, 0) - Expect(err).To(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - - }) - }) -}) - -var appStatsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/apps/my-cool-app-guid/stats", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "1":{ - "stats": { - "disk_quota": 10000, - "mem_quota": 1024, - "usage": { - "cpu": 0.3, - "disk": 10000, - "mem": 1024 - } - } - }, - "0":{ - "stats": { - "disk_quota": 1073741824, - "mem_quota": 67108864, - "usage": { - "cpu": 3.659571249238058e-05, - "disk": 56037376, - "mem": 19218432 - } - } - } -}`}}) - -var appInstancesRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/apps/my-cool-app-guid/instances", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "1": { - "state": "STARTING", - "details": "insufficient resources", - "since": 1379522342.6783738 - }, - "0": { - "state": "RUNNING", - "since": 1379522342.6783738 - } -}`}}) - -var deleteInstanceRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/apps/my-cool-app-guid/instances/0", - Response: testnet.TestResponse{Status: http.StatusNoContent, Body: `{}`}, -}) - -var deleteInstanceFromUnkownApp = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/apps/some-wrong-app-guid/instances/0", - Response: testnet.TestResponse{Status: http.StatusNotFound, Body: `{}`}, -}) - -func createAppInstancesRepo(requests []testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo AppInstancesRepository) { - ts, handler = testnet.NewServer(requests) - space := models.SpaceFields{} - space.Guid = "my-space-guid" - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(ts.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerAppInstancesRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/fakes/fake_app_instances_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/fakes/fake_app_instances_repository.go deleted file mode 100644 index 7a4106c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_instances/fakes/fake_app_instances_repository.go +++ /dev/null @@ -1,96 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/api/app_instances" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeAppInstancesRepository struct { - GetInstancesStub func(appGuid string) (instances []models.AppInstanceFields, apiErr error) - getInstancesMutex sync.RWMutex - getInstancesArgsForCall []struct { - arg1 string - } - getInstancesReturns struct { - result1 []models.AppInstanceFields - result2 error - } - DeleteInstanceStub func(appGuid string, instance int) error - deleteInstanceMutex sync.RWMutex - deleteInstanceArgsForCall []struct { - arg1 string - arg2 int - } - deleteInstanceReturns struct { - result1 error - } -} - -func (fake *FakeAppInstancesRepository) GetInstances(arg1 string) (instances []models.AppInstanceFields, apiErr error) { - fake.getInstancesMutex.Lock() - defer fake.getInstancesMutex.Unlock() - fake.getInstancesArgsForCall = append(fake.getInstancesArgsForCall, struct { - arg1 string - }{arg1}) - if fake.GetInstancesStub != nil { - return fake.GetInstancesStub(arg1) - } else { - return fake.getInstancesReturns.result1, fake.getInstancesReturns.result2 - } -} - -func (fake *FakeAppInstancesRepository) GetInstancesCallCount() int { - fake.getInstancesMutex.RLock() - defer fake.getInstancesMutex.RUnlock() - return len(fake.getInstancesArgsForCall) -} - -func (fake *FakeAppInstancesRepository) GetInstancesArgsForCall(i int) string { - fake.getInstancesMutex.RLock() - defer fake.getInstancesMutex.RUnlock() - return fake.getInstancesArgsForCall[i].arg1 -} - -func (fake *FakeAppInstancesRepository) GetInstancesReturns(result1 []models.AppInstanceFields, result2 error) { - fake.getInstancesReturns = struct { - result1 []models.AppInstanceFields - result2 error - }{result1, result2} -} - -func (fake *FakeAppInstancesRepository) DeleteInstance(arg1 string, arg2 int) error { - fake.deleteInstanceMutex.Lock() - defer fake.deleteInstanceMutex.Unlock() - fake.deleteInstanceArgsForCall = append(fake.deleteInstanceArgsForCall, struct { - arg1 string - arg2 int - }{arg1, arg2}) - if fake.DeleteInstanceStub != nil { - return fake.DeleteInstanceStub(arg1, arg2) - } else { - return fake.deleteInstanceReturns.result1 - } -} - -func (fake *FakeAppInstancesRepository) DeleteInstanceCallCount() int { - fake.deleteInstanceMutex.RLock() - defer fake.deleteInstanceMutex.RUnlock() - return len(fake.deleteInstanceArgsForCall) -} - -func (fake *FakeAppInstancesRepository) DeleteInstanceArgsForCall(i int) (string, int) { - fake.deleteInstanceMutex.RLock() - defer fake.deleteInstanceMutex.RUnlock() - return fake.deleteInstanceArgsForCall[i].arg1, fake.deleteInstanceArgsForCall[i].arg2 -} - -func (fake *FakeAppInstancesRepository) DeleteInstanceReturns(result1 error) { - fake.deleteInstanceReturns = struct { - result1 error - }{result1} -} - -var _ AppInstancesRepository = new(FakeAppInstancesRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_summary.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_summary.go deleted file mode 100644 index e2d06c4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_summary.go +++ /dev/null @@ -1,154 +0,0 @@ -package api - -import ( - "fmt" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ApplicationSummaries struct { - Apps []ApplicationFromSummary -} - -func (resource ApplicationSummaries) ToModels() (apps []models.ApplicationFields) { - for _, application := range resource.Apps { - apps = append(apps, application.ToFields()) - } - return -} - -type ApplicationFromSummary struct { - Guid string - Name string - Routes []RouteSummary - Services []ServicePlanSummary - Diego bool `json:"diego,omitempty"` - RunningInstances int `json:"running_instances"` - Memory int64 - Instances int - DiskQuota int64 `json:"disk_quota"` - Urls []string - EnvironmentVars map[string]interface{} `json:"environment_json,omitempty"` - HealthCheckTimeout int `json:"health_check_timeout"` - State string - SpaceGuid string `json:"space_guid"` - PackageUpdatedAt *time.Time `json:"package_updated_at"` - Buildpack string -} - -func (resource ApplicationFromSummary) ToFields() (app models.ApplicationFields) { - app = models.ApplicationFields{} - app.Guid = resource.Guid - app.Name = resource.Name - app.Diego = resource.Diego - app.State = strings.ToLower(resource.State) - app.InstanceCount = resource.Instances - app.DiskQuota = resource.DiskQuota - app.RunningInstances = resource.RunningInstances - app.Memory = resource.Memory - app.SpaceGuid = resource.SpaceGuid - app.PackageUpdatedAt = resource.PackageUpdatedAt - app.HealthCheckTimeout = resource.HealthCheckTimeout - app.BuildpackUrl = resource.Buildpack - - return -} - -func (resource ApplicationFromSummary) ToModel() (app models.Application) { - app.ApplicationFields = resource.ToFields() - - routes := []models.RouteSummary{} - for _, route := range resource.Routes { - routes = append(routes, route.ToModel()) - } - app.Routes = routes - - services := []models.ServicePlanSummary{} - for _, service := range resource.Services { - services = append(services, service.ToModel()) - } - - app.EnvironmentVars = resource.EnvironmentVars - app.Routes = routes - app.Services = services - - return -} - -type RouteSummary struct { - Guid string - Host string - Domain DomainSummary -} - -func (resource RouteSummary) ToModel() (route models.RouteSummary) { - domain := models.DomainFields{} - domain.Guid = resource.Domain.Guid - domain.Name = resource.Domain.Name - domain.Shared = resource.Domain.OwningOrganizationGuid != "" - - route.Guid = resource.Guid - route.Host = resource.Host - route.Domain = domain - return -} - -func (resource ServicePlanSummary) ToModel() (route models.ServicePlanSummary) { - route.Guid = resource.Guid - route.Name = resource.Name - return -} - -type DomainSummary struct { - Guid string - Name string - OwningOrganizationGuid string -} - -type AppSummaryRepository interface { - GetSummariesInCurrentSpace() (apps []models.Application, apiErr error) - GetSummary(appGuid string) (summary models.Application, apiErr error) -} - -type CloudControllerAppSummaryRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerAppSummaryRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerAppSummaryRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerAppSummaryRepository) GetSummariesInCurrentSpace() (apps []models.Application, apiErr error) { - resources := new(ApplicationSummaries) - - path := fmt.Sprintf("%s/v2/spaces/%s/summary", repo.config.ApiEndpoint(), repo.config.SpaceFields().Guid) - apiErr = repo.gateway.GetResource(path, resources) - if apiErr != nil { - return - } - - for _, resource := range resources.Apps { - apps = append(apps, resource.ToModel()) - } - return -} - -func (repo CloudControllerAppSummaryRepository) GetSummary(appGuid string) (summary models.Application, apiErr error) { - path := fmt.Sprintf("%s/v2/apps/%s/summary", repo.config.ApiEndpoint(), appGuid) - summaryResponse := new(ApplicationFromSummary) - apiErr = repo.gateway.GetResource(path, summaryResponse) - if apiErr != nil { - return - } - - summary = summaryResponse.ToModel() - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_summary_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_summary_test.go deleted file mode 100644 index a92a42f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/app_summary_test.go +++ /dev/null @@ -1,163 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("AppSummaryRepository", func() { - var ( - testServer *httptest.Server - handler *testnet.TestHandler - repo AppSummaryRepository - ) - - BeforeEach(func() { - getAppSummariesRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/summary", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: getAppSummariesResponseBody, - }, - }) - - testServer, handler = testnet.NewServer([]testnet.TestRequest{getAppSummariesRequest}) - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(testServer.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerAppSummaryRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - It("returns a slice of app summaries for each instance", func() { - apps, apiErr := repo.GetSummariesInCurrentSpace() - Expect(handler).To(HaveAllRequestsCalled()) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(3).To(Equal(len(apps))) - - app1 := apps[0] - Expect(app1.Name).To(Equal("app1")) - Expect(app1.Guid).To(Equal("app-1-guid")) - Expect(app1.BuildpackUrl).To(Equal("go_buildpack")) - Expect(len(app1.Routes)).To(Equal(1)) - Expect(app1.Routes[0].URL()).To(Equal("app1.cfapps.io")) - - Expect(app1.State).To(Equal("started")) - Expect(app1.InstanceCount).To(Equal(1)) - Expect(app1.RunningInstances).To(Equal(1)) - Expect(app1.Memory).To(Equal(int64(128))) - Expect(app1.PackageUpdatedAt.Format("2006-01-02T15:04:05Z07:00")).To(Equal("2014-10-24T19:54:00Z")) - - app2 := apps[1] - Expect(app2.Name).To(Equal("app2")) - Expect(app2.Guid).To(Equal("app-2-guid")) - Expect(len(app2.Routes)).To(Equal(2)) - Expect(app2.Routes[0].URL()).To(Equal("app2.cfapps.io")) - Expect(app2.Routes[1].URL()).To(Equal("foo.cfapps.io")) - - Expect(app2.State).To(Equal("started")) - Expect(app2.InstanceCount).To(Equal(3)) - Expect(app2.RunningInstances).To(Equal(1)) - Expect(app2.Memory).To(Equal(int64(512))) - Expect(app2.PackageUpdatedAt.Format("2006-01-02T15:04:05Z07:00")).To(Equal("2012-10-24T19:55:00Z")) - - nullUpdateAtApp := apps[2] - Expect(nullUpdateAtApp.PackageUpdatedAt).To(BeNil()) - }) -}) - -const getAppSummariesResponseBody string = ` -{ - "apps":[ - { - "guid":"app-1-guid", - "routes":[ - { - "guid":"route-1-guid", - "host":"app1", - "domain":{ - "guid":"domain-1-guid", - "name":"cfapps.io" - } - } - ], - "running_instances":1, - "name":"app1", - "memory":128, - "instances":1, - "buildpack":"go_buildpack", - "state":"STARTED", - "service_names":[ - "my-service-instance" - ], - "package_updated_at":"2014-10-24T19:54:00+00:00" - },{ - "guid":"app-2-guid", - "routes":[ - { - "guid":"route-2-guid", - "host":"app2", - "domain":{ - "guid":"domain-1-guid", - "name":"cfapps.io" - } - }, - { - "guid":"route-2-guid", - "host":"foo", - "domain":{ - "guid":"domain-1-guid", - "name":"cfapps.io" - } - } - ], - "running_instances":1, - "name":"app2", - "memory":512, - "instances":3, - "state":"STARTED", - "service_names":[ - "my-service-instance" - ], - "package_updated_at":"2012-10-24T19:55:00+00:00" - },{ - "guid":"app-with-null-updated-at-guid", - "routes":[ - { - "guid":"route-3-guid", - "host":"app3", - "domain":{ - "guid":"domain-3-guid", - "name":"cfapps.io" - } - } - ], - "running_instances":1, - "name":"app-with-null-updated-at", - "memory":512, - "instances":3, - "state":"STARTED", - "service_names":[ - "my-service-instance" - ], - "package_updated_at":null - } - ] -}` diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits.go deleted file mode 100644 index ecd6f1b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits.go +++ /dev/null @@ -1,153 +0,0 @@ -package application_bits - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "mime/multipart" - "net/textproto" - "os" - "time" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/gofileutils/fileutils" -) - -const ( - DefaultAppUploadBitsTimeout = 15 * time.Minute -) - -type ApplicationBitsRepository interface { - GetApplicationFiles(appFilesRequest []resources.AppFileResource) ([]resources.AppFileResource, error) - UploadBits(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) (apiErr error) -} - -type CloudControllerApplicationBitsRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerApplicationBitsRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerApplicationBitsRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerApplicationBitsRepository) UploadBits(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) (apiErr error) { - apiUrl := fmt.Sprintf("/v2/apps/%s/bits", appGuid) - fileutils.TempFile("requests", func(requestFile *os.File, err error) { - if err != nil { - apiErr = errors.NewWithError(T("Error creating tmp file: {{.Err}}", map[string]interface{}{"Err": err}), err) - return - } - - // json.Marshal represents a nil value as "null" instead of an empty slice "[]" - if presentFiles == nil { - presentFiles = []resources.AppFileResource{} - } - - presentFilesJSON, err := json.Marshal(presentFiles) - if err != nil { - apiErr = errors.NewWithError(T("Error marshaling JSON"), err) - return - } - - boundary, err := repo.writeUploadBody(zipFile, requestFile, presentFilesJSON) - if err != nil { - apiErr = errors.NewWithError(T("Error writing to tmp file: {{.Err}}", map[string]interface{}{"Err": err}), err) - return - } - - var request *net.Request - request, apiErr = repo.gateway.NewRequestForFile("PUT", repo.config.ApiEndpoint()+apiUrl, repo.config.AccessToken(), requestFile) - if apiErr != nil { - return - } - - contentType := fmt.Sprintf("multipart/form-data; boundary=%s", boundary) - request.HttpReq.Header.Set("Content-Type", contentType) - - response := &resources.Resource{} - _, apiErr = repo.gateway.PerformPollingRequestForJSONResponse(repo.config.ApiEndpoint(), request, response, DefaultAppUploadBitsTimeout) - if apiErr != nil { - return - } - }) - - return -} - -func (repo CloudControllerApplicationBitsRepository) GetApplicationFiles(appFilesToCheck []resources.AppFileResource) ([]resources.AppFileResource, error) { - allAppFilesJson, err := json.Marshal(appFilesToCheck) - if err != nil { - apiErr := errors.NewWithError(T("Failed to create json for resource_match request"), err) - return nil, apiErr - } - - presentFiles := []resources.AppFileResource{} - apiErr := repo.gateway.UpdateResourceSync( - repo.config.ApiEndpoint(), - "/v2/resource_match", - bytes.NewReader(allAppFilesJson), - &presentFiles) - - if apiErr != nil { - return nil, apiErr - } - - return presentFiles, nil -} - -func (repo CloudControllerApplicationBitsRepository) writeUploadBody(zipFile *os.File, body *os.File, presentResourcesJson []byte) (boundary string, err error) { - writer := multipart.NewWriter(body) - defer writer.Close() - - boundary = writer.Boundary() - - part, err := writer.CreateFormField("resources") - if err != nil { - return - } - - _, err = io.Copy(part, bytes.NewBuffer(presentResourcesJson)) - if err != nil { - return - } - - if zipFile != nil { - zipStats, zipErr := zipFile.Stat() - if zipErr != nil { - return - } - - if zipStats.Size() == 0 { - return - } - - part, zipErr = createZipPartWriter(zipStats, writer) - if zipErr != nil { - return - } - - _, zipErr = io.Copy(part, zipFile) - if zipErr != nil { - return - } - } - - return -} - -func createZipPartWriter(zipStats os.FileInfo, writer *multipart.Writer) (io.Writer, error) { - h := make(textproto.MIMEHeader) - h.Set("Content-Disposition", `form-data; name="application"; filename="application.zip"`) - h.Set("Content-Type", "application/zip") - h.Set("Content-Length", fmt.Sprintf("%d", zipStats.Size())) - h.Set("Content-Transfer-Encoding", "binary") - return writer.CreatePart(h) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits_suite_test.go deleted file mode 100644 index 217a21c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package application_bits_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestApplicationBits(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "ApplicationBits Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits_test.go deleted file mode 100644 index b02c519..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/application_bits_test.go +++ /dev/null @@ -1,420 +0,0 @@ -package application_bits_test - -import ( - "archive/zip" - "fmt" - "log" - "net/http" - "net/http/httptest" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/application_bits" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CloudControllerApplicationBitsRepository", func() { - var ( - fixturesDir string - repo ApplicationBitsRepository - file1 resources.AppFileResource - file2 resources.AppFileResource - file3 resources.AppFileResource - file4 resources.AppFileResource - testHandler *testnet.TestHandler - testServer *httptest.Server - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - cwd, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - fixturesDir = filepath.Join(cwd, "../../../fixtures/applications") - - configRepo = testconfig.NewRepositoryWithDefaults() - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - gateway.PollingThrottle = time.Duration(0) - - repo = NewCloudControllerApplicationBitsRepository(configRepo, gateway) - - file1 = resources.AppFileResource{Path: "app.rb", Sha1: "2474735f5163ba7612ef641f438f4b5bee00127b", Size: 51} - file2 = resources.AppFileResource{Path: "config.ru", Sha1: "f097424ce1fa66c6cb9f5e8a18c317376ec12e05", Size: 70} - file3 = resources.AppFileResource{Path: "Gemfile", Sha1: "d9c3a51de5c89c11331d3b90b972789f1a14699a", Size: 59} - file4 = resources.AppFileResource{Path: "Gemfile.lock", Sha1: "345f999aef9070fb9a608e65cf221b7038156b6d", Size: 229} - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".UploadBits", func() { - var uploadFile *os.File - var err error - - BeforeEach(func() { - uploadFile, err = os.Open(filepath.Join(fixturesDir, "ignored_and_resource_matched_example_app.zip")) - if err != nil { - log.Fatal(err) - } - }) - - AfterEach(func() { - testServer.Close() - }) - - It("uploads zip files", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-cool-app-guid/bits", - Matcher: uploadBodyMatcher(defaultZipCheck), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: ` - { - "metadata":{ - "guid": "my-job-guid", - "url": "/v2/jobs/my-job-guid" - } - }`, - }, - }), - createProgressEndpoint("running"), - createProgressEndpoint("finished"), - ) - - apiErr := repo.UploadBits("my-cool-app-guid", uploadFile, []resources.AppFileResource{file1, file2}) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("returns a failure when uploading bits fails", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-cool-app-guid/bits", - Matcher: uploadBodyMatcher(defaultZipCheck), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: ` - { - "metadata":{ - "guid": "my-job-guid", - "url": "/v2/jobs/my-job-guid" - } - }`, - }, - }), - createProgressEndpoint("running"), - createProgressEndpoint("failed"), - ) - apiErr := repo.UploadBits("my-cool-app-guid", uploadFile, []resources.AppFileResource{file1, file2}) - - Expect(apiErr).To(HaveOccurred()) - }) - - Context("when there are no files to upload", func() { - It("makes a request without a zipfile", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-cool-app-guid/bits", - Matcher: func(request *http.Request) { - err := request.ParseMultipartForm(maxMultipartResponseSizeInBytes) - Expect(err).NotTo(HaveOccurred()) - defer request.MultipartForm.RemoveAll() - - Expect(len(request.MultipartForm.Value)).To(Equal(1), "Should have 1 value") - valuePart, ok := request.MultipartForm.Value["resources"] - - Expect(ok).To(BeTrue(), "Resource manifest not present") - Expect(valuePart).To(Equal([]string{"[]"})) - Expect(request.MultipartForm.File).To(BeEmpty()) - }, - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: ` - { - "metadata":{ - "guid": "my-job-guid", - "url": "/v2/jobs/my-job-guid" - } - }`, - }, - }), - createProgressEndpoint("running"), - createProgressEndpoint("finished"), - ) - - apiErr := repo.UploadBits("my-cool-app-guid", nil, []resources.AppFileResource{}) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - It("marshals a nil presentFiles parameter into an empty array", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-cool-app-guid/bits", - Matcher: func(request *http.Request) { - err := request.ParseMultipartForm(maxMultipartResponseSizeInBytes) - Expect(err).NotTo(HaveOccurred()) - defer request.MultipartForm.RemoveAll() - - Expect(len(request.MultipartForm.Value)).To(Equal(1), "Should have 1 value") - valuePart, ok := request.MultipartForm.Value["resources"] - - Expect(ok).To(BeTrue(), "Resource manifest not present") - Expect(valuePart).To(Equal([]string{"[]"})) - Expect(request.MultipartForm.File).To(BeEmpty()) - }, - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: ` - { - "metadata":{ - "guid": "my-job-guid", - "url": "/v2/jobs/my-job-guid" - } - }`, - }, - }), - createProgressEndpoint("running"), - createProgressEndpoint("finished"), - ) - - apiErr := repo.UploadBits("my-cool-app-guid", nil, nil) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe(".GetApplicationFiles", func() { - It("accepts a slice of files and returns a slice of the files that it already has", func() { - setupTestServer(matchResourceRequest) - matchedFiles, err := repo.GetApplicationFiles([]resources.AppFileResource{file1, file2, file3, file4}) - Expect(matchedFiles).To(Equal([]resources.AppFileResource{file3, file4})) - Expect(err).NotTo(HaveOccurred()) - }) - }) -}) - -var matchedResources = testnet.RemoveWhiteSpaceFromBody(`[ - { - "fn": "Gemfile", - "sha1": "d9c3a51de5c89c11331d3b90b972789f1a14699a", - "size": 59 - }, - { - "fn": "Gemfile.lock", - "sha1": "345f999aef9070fb9a608e65cf221b7038156b6d", - "size": 229 - } -]`) - -var unmatchedResources = testnet.RemoveWhiteSpaceFromBody(`[ - { - "fn": "app.rb", - "sha1": "2474735f5163ba7612ef641f438f4b5bee00127b", - "size": 51 - }, - { - "fn": "config.ru", - "sha1": "f097424ce1fa66c6cb9f5e8a18c317376ec12e05", - "size": 70 - } -]`) - -func uploadApplicationRequest(zipCheck func(*zip.Reader)) testnet.TestRequest { - return testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-cool-app-guid/bits", - Matcher: uploadBodyMatcher(zipCheck), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: ` -{ - "metadata":{ - "guid": "my-job-guid", - "url": "/v2/jobs/my-job-guid" - } -} - `}, - }) -} - -var matchResourceRequest = testnet.TestRequest{ - Method: "PUT", - Path: "/v2/resource_match", - Matcher: testnet.RequestBodyMatcher(testnet.RemoveWhiteSpaceFromBody(`[ - { - "fn": "app.rb", - "sha1": "2474735f5163ba7612ef641f438f4b5bee00127b", - "size": 51 - }, - { - "fn": "config.ru", - "sha1": "f097424ce1fa66c6cb9f5e8a18c317376ec12e05", - "size": 70 - }, - { - "fn": "Gemfile", - "sha1": "d9c3a51de5c89c11331d3b90b972789f1a14699a", - "size": 59 - }, - { - "fn": "Gemfile.lock", - "sha1": "345f999aef9070fb9a608e65cf221b7038156b6d", - "size": 229 - } -]`)), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: matchedResources, - }, -} - -var defaultZipCheck = func(zipReader *zip.Reader) { - Expect(len(zipReader.File)).To(Equal(2), "Wrong number of files in zip") - - var expectedPermissionBits os.FileMode - if runtime.GOOS == "windows" { - expectedPermissionBits = 0111 - } else { - expectedPermissionBits = 0755 - } - - Expect(zipReader.File[0].Name).To(Equal("app.rb")) - Expect(executableBits(zipReader.File[0].Mode())).To(Equal(executableBits(expectedPermissionBits))) - -nextFile: - for _, f := range zipReader.File { - for _, expected := range expectedApplicationContent { - if f.Name == expected { - continue nextFile - } - } - Fail("Expected " + f.Name + " but did not find it") - } -} - -var defaultRequests = []testnet.TestRequest{ - uploadApplicationRequest(defaultZipCheck), - createProgressEndpoint("running"), - createProgressEndpoint("finished"), -} - -var expectedApplicationContent = []string{"app.rb", "config.ru"} - -const maxMultipartResponseSizeInBytes = 4096 - -func uploadBodyMatcher(zipChecks func(zipReader *zip.Reader)) func(*http.Request) { - return func(request *http.Request) { - defer GinkgoRecover() - err := request.ParseMultipartForm(maxMultipartResponseSizeInBytes) - if err != nil { - Fail(fmt.Sprintf("Failed parsing multipart form %v", err)) - return - } - defer request.MultipartForm.RemoveAll() - - Expect(len(request.MultipartForm.Value)).To(Equal(1), "Should have 1 value") - valuePart, ok := request.MultipartForm.Value["resources"] - Expect(ok).To(BeTrue(), "Resource manifest not present") - Expect(len(valuePart)).To(Equal(1), "Wrong number of values") - - resourceManifest := valuePart[0] - chompedResourceManifest := strings.Replace(resourceManifest, "\n", "", -1) - Expect(chompedResourceManifest).To(Equal(unmatchedResources), "Resources do not match") - - Expect(len(request.MultipartForm.File)).To(Equal(1), "Wrong number of files") - - fileHeaders, ok := request.MultipartForm.File["application"] - Expect(ok).To(BeTrue(), "Application file part not present") - Expect(len(fileHeaders)).To(Equal(1), "Wrong number of files") - - applicationFile := fileHeaders[0] - Expect(applicationFile.Filename).To(Equal("application.zip"), "Wrong file name") - - file, err := applicationFile.Open() - if err != nil { - Fail(fmt.Sprintf("Cannot get multipart file %v", err.Error())) - return - } - - length, err := strconv.ParseInt(applicationFile.Header.Get("content-length"), 10, 64) - if err != nil { - Fail(fmt.Sprintf("Cannot convert content-length to int %v", err.Error())) - return - } - - if zipChecks != nil { - zipReader, err := zip.NewReader(file, length) - if err != nil { - Fail(fmt.Sprintf("Error reading zip content %v", err.Error())) - return - } - - zipChecks(zipReader) - } - } -} - -func createProgressEndpoint(status string) (req testnet.TestRequest) { - body := fmt.Sprintf(` - { - "entity":{ - "status":"%s" - } - }`, status) - - req.Method = "GET" - req.Path = "/v2/jobs/my-job-guid" - req.Response = testnet.TestResponse{ - Status: http.StatusCreated, - Body: body, - } - - return -} - -var matchExcludedResourceRequest = testnet.TestRequest{ - Method: "PUT", - Path: "/v2/resource_match", - Matcher: testnet.RequestBodyMatcher(testnet.RemoveWhiteSpaceFromBody(`[ - { - "fn": ".svn", - "sha1": "0", - "size": 0 - }, - { - "fn": ".svn/test", - "sha1": "456b1d3f7cfbadc66d390de79cbbb6e6a10662da", - "size": 12 - }, - { - "fn": "_darcs", - "sha1": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", - "size": 4 - } -]`)), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: matchedResources, - }, -} - -func executableBits(mode os.FileMode) os.FileMode { - return mode & 0111 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/fakes/fake_application_bits_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/fakes/fake_application_bits_repository.go deleted file mode 100644 index 57293ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/application_bits/fakes/fake_application_bits_repository.go +++ /dev/null @@ -1,98 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/application_bits" - "github.com/cloudfoundry/cli/cf/api/resources" - "os" - "sync" -) - -type FakeApplicationBitsRepository struct { - GetApplicationFilesStub func(appFilesRequest []resources.AppFileResource) ([]resources.AppFileResource, error) - getApplicationFilesMutex sync.RWMutex - getApplicationFilesArgsForCall []struct { - arg1 []resources.AppFileResource - } - getApplicationFilesReturns struct { - result1 []resources.AppFileResource - result2 error - } - UploadBitsStub func(appGuid string, zipFile *os.File, presentFiles []resources.AppFileResource) (apiErr error) - uploadBitsMutex sync.RWMutex - uploadBitsArgsForCall []struct { - arg1 string - arg2 *os.File - arg3 []resources.AppFileResource - } - uploadBitsReturns struct { - result1 error - } -} - -func (fake *FakeApplicationBitsRepository) GetApplicationFiles(arg1 []resources.AppFileResource) ([]resources.AppFileResource, error) { - fake.getApplicationFilesMutex.Lock() - defer fake.getApplicationFilesMutex.Unlock() - fake.getApplicationFilesArgsForCall = append(fake.getApplicationFilesArgsForCall, struct { - arg1 []resources.AppFileResource - }{arg1}) - if fake.GetApplicationFilesStub != nil { - return fake.GetApplicationFilesStub(arg1) - } else { - return fake.getApplicationFilesReturns.result1, fake.getApplicationFilesReturns.result2 - } -} - -func (fake *FakeApplicationBitsRepository) GetApplicationFilesCallCount() int { - fake.getApplicationFilesMutex.RLock() - defer fake.getApplicationFilesMutex.RUnlock() - return len(fake.getApplicationFilesArgsForCall) -} - -func (fake *FakeApplicationBitsRepository) GetApplicationFilesArgsForCall(i int) []resources.AppFileResource { - fake.getApplicationFilesMutex.RLock() - defer fake.getApplicationFilesMutex.RUnlock() - return fake.getApplicationFilesArgsForCall[i].arg1 -} - -func (fake *FakeApplicationBitsRepository) GetApplicationFilesReturns(result1 []resources.AppFileResource, result2 error) { - fake.getApplicationFilesReturns = struct { - result1 []resources.AppFileResource - result2 error - }{result1, result2} -} - -func (fake *FakeApplicationBitsRepository) UploadBits(arg1 string, arg2 *os.File, arg3 []resources.AppFileResource) (apiErr error) { - fake.uploadBitsMutex.Lock() - defer fake.uploadBitsMutex.Unlock() - fake.uploadBitsArgsForCall = append(fake.uploadBitsArgsForCall, struct { - arg1 string - arg2 *os.File - arg3 []resources.AppFileResource - }{arg1, arg2, arg3}) - if fake.UploadBitsStub != nil { - return fake.UploadBitsStub(arg1, arg2, arg3) - } else { - return fake.uploadBitsReturns.result1 - } -} - -func (fake *FakeApplicationBitsRepository) UploadBitsCallCount() int { - fake.uploadBitsMutex.RLock() - defer fake.uploadBitsMutex.RUnlock() - return len(fake.uploadBitsArgsForCall) -} - -func (fake *FakeApplicationBitsRepository) UploadBitsArgsForCall(i int) (string, *os.File, []resources.AppFileResource) { - fake.uploadBitsMutex.RLock() - defer fake.uploadBitsMutex.RUnlock() - return fake.uploadBitsArgsForCall[i].arg1, fake.uploadBitsArgsForCall[i].arg2, fake.uploadBitsArgsForCall[i].arg3 -} - -func (fake *FakeApplicationBitsRepository) UploadBitsReturns(result1 error) { - fake.uploadBitsReturns = struct { - result1 error - }{result1} -} - -var _ ApplicationBitsRepository = new(FakeApplicationBitsRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications.go deleted file mode 100644 index 6b02266..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications.go +++ /dev/null @@ -1,141 +0,0 @@ -package applications - -import ( - "encoding/json" - "fmt" - "net/url" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ApplicationRepository interface { - Create(params models.AppParams) (createdApp models.Application, apiErr error) - GetApp(appGuid string) (models.Application, error) - Read(name string) (app models.Application, apiErr error) - ReadFromSpace(name string, spaceGuid string) (app models.Application, apiErr error) - Update(appGuid string, params models.AppParams) (updatedApp models.Application, apiErr error) - Delete(appGuid string) (apiErr error) - ReadEnv(guid string) (*models.Environment, error) - CreateRestageRequest(guid string) (apiErr error) -} - -type CloudControllerApplicationRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerApplicationRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerApplicationRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerApplicationRepository) Create(params models.AppParams) (createdApp models.Application, apiErr error) { - data, err := repo.formatAppJSON(params) - if err != nil { - apiErr = errors.NewWithError(T("Failed to marshal JSON"), err) - return - } - - resource := new(resources.ApplicationResource) - apiErr = repo.gateway.CreateResource(repo.config.ApiEndpoint(), "/v2/apps", strings.NewReader(data), resource) - if apiErr != nil { - return - } - - createdApp = resource.ToModel() - return -} - -func (repo CloudControllerApplicationRepository) GetApp(appGuid string) (app models.Application, apiErr error) { - path := fmt.Sprintf("%s/v2/apps/%s", repo.config.ApiEndpoint(), appGuid) - appResources := new(resources.ApplicationResource) - - apiErr = repo.gateway.GetResource(path, appResources) - if apiErr != nil { - return - } - - app = appResources.ToModel() - return -} - -func (repo CloudControllerApplicationRepository) Read(name string) (app models.Application, apiErr error) { - return repo.ReadFromSpace(name, repo.config.SpaceFields().Guid) -} - -func (repo CloudControllerApplicationRepository) ReadFromSpace(name string, spaceGuid string) (app models.Application, apiErr error) { - path := fmt.Sprintf("%s/v2/spaces/%s/apps?q=%s&inline-relations-depth=1", repo.config.ApiEndpoint(), spaceGuid, url.QueryEscape("name:"+name)) - appResources := new(resources.PaginatedApplicationResources) - apiErr = repo.gateway.GetResource(path, appResources) - if apiErr != nil { - return - } - - if len(appResources.Resources) == 0 { - apiErr = errors.NewModelNotFoundError("App", name) - return - } - - res := appResources.Resources[0] - app = res.ToModel() - return -} - -func (repo CloudControllerApplicationRepository) Update(appGuid string, params models.AppParams) (updatedApp models.Application, apiErr error) { - data, err := repo.formatAppJSON(params) - if err != nil { - apiErr = errors.NewWithError(T("Failed to marshal JSON"), err) - return - } - - path := fmt.Sprintf("/v2/apps/%s?inline-relations-depth=1", appGuid) - resource := new(resources.ApplicationResource) - apiErr = repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(data), resource) - if apiErr != nil { - return - } - - updatedApp = resource.ToModel() - return -} - -func (repo CloudControllerApplicationRepository) formatAppJSON(input models.AppParams) (data string, err error) { - appResource := resources.NewApplicationEntityFromAppParams(input) - bytes, err := json.Marshal(appResource) - data = string(bytes) - return -} - -func (repo CloudControllerApplicationRepository) Delete(appGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/apps/%s?recursive=true", appGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} - -func (repo CloudControllerApplicationRepository) ReadEnv(guid string) (*models.Environment, error) { - var ( - err error - ) - - path := fmt.Sprintf("%s/v2/apps/%s/env", repo.config.ApiEndpoint(), guid) - appResource := models.NewEnvironment() - - err = repo.gateway.GetResource(path, appResource) - if err != nil { - return &models.Environment{}, err - } - - return appResource, err -} - -func (repo CloudControllerApplicationRepository) CreateRestageRequest(guid string) error { - path := fmt.Sprintf("/v2/apps/%s/restage", guid) - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, strings.NewReader(""), nil) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications_suite_test.go deleted file mode 100644 index 73192d2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package applications_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestApplications(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Applications Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications_test.go deleted file mode 100644 index 051238e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/applications_test.go +++ /dev/null @@ -1,514 +0,0 @@ -package applications_test - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/applications" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ApplicationsRepository", func() { - Describe("finding apps by name", func() { - It("returns the app when it is found", func() { - ts, handler, repo := createAppRepo([]testnet.TestRequest{findAppRequest}) - defer ts.Close() - - app, apiErr := repo.Read("My App") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(app.Name).To(Equal("My App")) - Expect(app.Guid).To(Equal("app1-guid")) - Expect(app.Memory).To(Equal(int64(128))) - Expect(app.DiskQuota).To(Equal(int64(512))) - Expect(app.InstanceCount).To(Equal(1)) - Expect(app.EnvironmentVars).To(Equal(map[string]interface{}{"foo": "bar", "baz": "boom"})) - Expect(app.Routes[0].Host).To(Equal("app1")) - Expect(app.Routes[0].Domain.Name).To(Equal("cfapps.io")) - Expect(app.Stack.Name).To(Equal("awesome-stacks-ahoy")) - }) - - It("returns a failure response when the app is not found", func() { - request := testapi.NewCloudControllerTestRequest(findAppRequest) - request.Response = testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`} - - ts, handler, repo := createAppRepo([]testnet.TestRequest{request}) - defer ts.Close() - - _, apiErr := repo.Read("My App") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - }) - - Describe(".GetApp", func() { - It("returns an application using the given app guid", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/apps/app-guid", - Response: appModelResponse, - }) - ts, handler, repo := createAppRepo([]testnet.TestRequest{request}) - defer ts.Close() - app, err := repo.GetApp("app-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(app.Name).To(Equal("My App")) - }) - }) - - Describe(".ReadFromSpace", func() { - It("returns an application using the given space guid", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/another-space-guid/apps?q=name%3AMy+App&inline-relations-depth=1", - Response: singleAppResponse, - }) - ts, handler, repo := createAppRepo([]testnet.TestRequest{request}) - defer ts.Close() - app, err := repo.ReadFromSpace("My App", "another-space-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(app.Name).To(Equal("My App")) - }) - }) - - Describe("creating applications", func() { - It("makes the right request", func() { - ts, handler, repo := createAppRepo([]testnet.TestRequest{createApplicationRequest}) - defer ts.Close() - - params := defaultAppParams() - createdApp, apiErr := repo.Create(params) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - app := models.Application{} - app.Name = "my-cool-app" - app.Guid = "my-cool-app-guid" - Expect(createdApp).To(Equal(app)) - }) - - It("omits fields that are not set", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/apps", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-cool-app","instances":3,"memory":2048,"disk_quota":512,"space_guid":"some-space-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: createApplicationResponse}, - }) - - ts, handler, repo := createAppRepo([]testnet.TestRequest{request}) - defer ts.Close() - - params := defaultAppParams() - params.BuildpackUrl = nil - params.StackGuid = nil - params.Command = nil - - _, apiErr := repo.Create(params) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("reading environment for an app", func() { - Context("when the response can be parsed as json", func() { - var ( - testServer *httptest.Server - userEnv *models.Environment - err error - handler *testnet.TestHandler - repo ApplicationRepository - ) - - AfterEach(func() { - testServer.Close() - }) - - Context("when there are system provided env vars", func() { - BeforeEach(func() { - - var appEnvRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/apps/some-cool-app-guid/env", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "staging_env_json": { - "STAGING_ENV": "staging_value", - "staging": true, - "number": 42 - }, - "running_env_json": { - "RUNNING_ENV": "running_value", - "running": false, - "number": 37 - }, - "environment_json": { - "key": "value", - "number": 123, - "bool": true - }, - "system_env_json": { - "VCAP_SERVICES": { - "system_hash": { - "system_key": "system_value" - } - } - } -} -`, - }}) - - testServer, handler, repo = createAppRepo([]testnet.TestRequest{appEnvRequest}) - userEnv, err = repo.ReadEnv("some-cool-app-guid") - Expect(err).ToNot(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - It("returns the user environment, vcap services, running/staging env variables", func() { - Expect(userEnv.Environment["key"]).To(Equal("value")) - Expect(userEnv.Environment["number"]).To(Equal(float64(123))) - Expect(userEnv.Environment["bool"]).To(BeTrue()) - Expect(userEnv.Running["RUNNING_ENV"]).To(Equal("running_value")) - Expect(userEnv.Running["running"]).To(BeFalse()) - Expect(userEnv.Running["number"]).To(Equal(float64(37))) - Expect(userEnv.Staging["STAGING_ENV"]).To(Equal("staging_value")) - Expect(userEnv.Staging["staging"]).To(BeTrue()) - Expect(userEnv.Staging["number"]).To(Equal(float64(42))) - - vcapServices := userEnv.System["VCAP_SERVICES"] - data, err := json.Marshal(vcapServices) - - Expect(err).ToNot(HaveOccurred()) - Expect(string(data)).To(ContainSubstring("\"system_key\":\"system_value\"")) - }) - - }) - - Context("when there are no environment variables", func() { - BeforeEach(func() { - var emptyEnvRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/apps/some-cool-app-guid/env", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"system_env_json": {"VCAP_SERVICES": {} }}`, - }}) - - testServer, handler, repo = createAppRepo([]testnet.TestRequest{emptyEnvRequest}) - userEnv, err = repo.ReadEnv("some-cool-app-guid") - Expect(err).ToNot(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - It("returns an empty string", func() { - Expect(len(userEnv.Environment)).To(Equal(0)) - Expect(len(userEnv.System["VCAP_SERVICES"].(map[string]interface{}))).To(Equal(0)) - }) - }) - }) - }) - - Describe("restaging applications", func() { - It("POSTs to the right URL", func() { - appRestageRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/apps/some-cool-app-guid/restage", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: "", - }, - }) - - ts, handler, repo := createAppRepo([]testnet.TestRequest{appRestageRequest}) - defer ts.Close() - - repo.CreateRestageRequest("some-cool-app-guid") - Expect(handler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("updating applications", func() { - It("makes the right request", func() { - ts, handler, repo := createAppRepo([]testnet.TestRequest{updateApplicationRequest}) - defer ts.Close() - - app := models.Application{} - app.Guid = "my-app-guid" - app.Name = "my-cool-app" - app.BuildpackUrl = "buildpack-url" - app.Command = "some-command" - app.Memory = 2048 - app.InstanceCount = 3 - app.Stack = &models.Stack{Guid: "some-stack-guid"} - app.SpaceGuid = "some-space-guid" - app.State = "started" - app.DiskQuota = 512 - Expect(app.EnvironmentVars).To(BeNil()) - - updatedApp, apiErr := repo.Update(app.Guid, app.ToParams()) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(updatedApp.Command).To(Equal("some-command")) - Expect(updatedApp.DetectedStartCommand).To(Equal("detected command")) - Expect(updatedApp.Name).To(Equal("my-cool-app")) - Expect(updatedApp.Guid).To(Equal("my-cool-app-guid")) - }) - - It("sets environment variables", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/app1-guid", - Matcher: testnet.RequestBodyMatcher(`{"environment_json":{"DATABASE_URL":"mysql://example.com/my-db"}}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createAppRepo([]testnet.TestRequest{request}) - defer ts.Close() - - envParams := map[string]interface{}{"DATABASE_URL": "mysql://example.com/my-db"} - params := models.AppParams{EnvironmentVars: &envParams} - - _, apiErr := repo.Update("app1-guid", params) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("can remove environment variables", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/app1-guid", - Matcher: testnet.RequestBodyMatcher(`{"environment_json":{}}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createAppRepo([]testnet.TestRequest{request}) - defer ts.Close() - - envParams := map[string]interface{}{} - params := models.AppParams{EnvironmentVars: &envParams} - - _, apiErr := repo.Update("app1-guid", params) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - It("deletes applications", func() { - deleteApplicationRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/apps/my-cool-app-guid?recursive=true", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ""}, - }) - - ts, handler, repo := createAppRepo([]testnet.TestRequest{deleteApplicationRequest}) - defer ts.Close() - - apiErr := repo.Delete("my-cool-app-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) -}) - -var appModelResponse = testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "metadata": { - "guid": "app1-guid" - }, - "entity": { - "name": "My App", - "environment_json": { - "foo": "bar", - "baz": "boom" - }, - "memory": 128, - "instances": 1, - "disk_quota": 512, - "state": "STOPPED", - "stack": { - "metadata": { - "guid": "app1-route-guid" - }, - "entity": { - "name": "awesome-stacks-ahoy" - } - }, - "routes": [ - { - "metadata": { - "guid": "app1-route-guid" - }, - "entity": { - "host": "app1", - "domain": { - "metadata": { - "guid": "domain1-guid" - }, - "entity": { - "name": "cfapps.io" - } - } - } - } - ] - } - } -`} - -var singleAppResponse = testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "app1-guid" - }, - "entity": { - "name": "My App", - "environment_json": { - "foo": "bar", - "baz": "boom" - }, - "memory": 128, - "instances": 1, - "disk_quota": 512, - "state": "STOPPED", - "stack": { - "metadata": { - "guid": "app1-route-guid" - }, - "entity": { - "name": "awesome-stacks-ahoy" - } - }, - "routes": [ - { - "metadata": { - "guid": "app1-route-guid" - }, - "entity": { - "host": "app1", - "domain": { - "metadata": { - "guid": "domain1-guid" - }, - "entity": { - "name": "cfapps.io" - } - } - } - } - ] - } - } - ] -}`} - -var findAppRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/apps?q=name%3AMy+App&inline-relations-depth=1", - Response: singleAppResponse, -}) - -var createApplicationResponse = ` -{ - "metadata": { - "guid": "my-cool-app-guid" - }, - "entity": { - "name": "my-cool-app" - } -}` - -var createApplicationRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/apps", - Matcher: testnet.RequestBodyMatcher(`{ - "name":"my-cool-app", - "instances":3, - "buildpack":"buildpack-url", - "memory":2048, - "disk_quota": 512, - "space_guid":"some-space-guid", - "stack_guid":"some-stack-guid", - "command":"some-command" - }`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: createApplicationResponse}, -}) - -func defaultAppParams() models.AppParams { - name := "my-cool-app" - buildpackUrl := "buildpack-url" - spaceGuid := "some-space-guid" - stackGuid := "some-stack-guid" - command := "some-command" - memory := int64(2048) - diskQuota := int64(512) - instanceCount := 3 - - return models.AppParams{ - Name: &name, - BuildpackUrl: &buildpackUrl, - SpaceGuid: &spaceGuid, - StackGuid: &stackGuid, - Command: &command, - Memory: &memory, - DiskQuota: &diskQuota, - InstanceCount: &instanceCount, - } -} - -var updateApplicationResponse = ` -{ - "metadata": { - "guid": "my-cool-app-guid" - }, - "entity": { - "name": "my-cool-app", - "command": "some-command", - "detected_start_command": "detected command" - } -}` - -var updateApplicationRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-app-guid?inline-relations-depth=1", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-cool-app","instances":3,"buildpack":"buildpack-url","memory":2048,"disk_quota":512,"space_guid":"some-space-guid","state":"STARTED","stack_guid":"some-stack-guid","command":"some-command"}`), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: updateApplicationResponse}, -}) - -func createAppRepo(requests []testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo ApplicationRepository) { - ts, handler = testnet.NewServer(requests) - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(ts.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerApplicationRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/fakes/fake_application_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/fakes/fake_application_repository.go deleted file mode 100644 index 298fbfc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/applications/fakes/fake_application_repository.go +++ /dev/null @@ -1,239 +0,0 @@ -package fakes - -import ( - "errors" - "sync" - - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeApplicationRepository struct { - FindAllApps []models.Application - - ReadCalls int - ReadArgs struct { - Name string - } - ReadReturns struct { - App models.Application - Error error - } - - CreateAppParams []models.AppParams - - UpdateParams models.AppParams - UpdateAppGuid string - UpdateAppResult models.Application - UpdateErr bool - - DeletedAppGuid string - - CreateRestageRequestArgs struct { - AppGuid string - } - - ReadFromSpaceStub func(name string, spaceGuid string) (app models.Application, apiErr error) - readFromSpaceMutex sync.RWMutex - readFromSpaceArgsForCall []struct { - name string - spaceGuid string - } - readFromSpaceReturns struct { - result1 models.Application - result2 error - } - - ReadEnvStub func(guid string) (*models.Environment, error) - readEnvMutex sync.RWMutex - readEnvArgsForCall []struct { - guid string - } - readEnvReturns struct { - result1 *models.Environment - result2 error - } - - GetAppStub func(appGuid string) (models.Application, error) - getAppMutex sync.RWMutex - getAppArgsForCall []struct { - appGuid string - } - getAppReturns struct { - result1 models.Application - result2 error - } -} - -//counterfeiter section -func (fake *FakeApplicationRepository) ReadFromSpace(name string, spaceGuid string) (app models.Application, apiErr error) { - fake.readFromSpaceMutex.Lock() - defer fake.readFromSpaceMutex.Unlock() - fake.readFromSpaceArgsForCall = append(fake.readFromSpaceArgsForCall, struct { - name string - spaceGuid string - }{name, spaceGuid}) - if fake.ReadFromSpaceStub != nil { - return fake.ReadFromSpaceStub(name, spaceGuid) - } else { - return fake.readFromSpaceReturns.result1, fake.readFromSpaceReturns.result2 - } -} - -func (fake *FakeApplicationRepository) ReadFromSpaceCallCount() int { - fake.readFromSpaceMutex.RLock() - defer fake.readFromSpaceMutex.RUnlock() - return len(fake.readFromSpaceArgsForCall) -} - -func (fake *FakeApplicationRepository) ReadFromSpaceArgsForCall(i int) (string, string) { - fake.readFromSpaceMutex.RLock() - defer fake.readFromSpaceMutex.RUnlock() - return fake.readFromSpaceArgsForCall[i].name, fake.readFromSpaceArgsForCall[i].spaceGuid -} - -func (fake *FakeApplicationRepository) ReadFromSpaceReturns(result1 models.Application, result2 error) { - fake.readFromSpaceReturns = struct { - result1 models.Application - result2 error - }{result1, result2} -} -func (fake *FakeApplicationRepository) ReadEnv(guid string) (*models.Environment, error) { - fake.readEnvMutex.Lock() - fake.readEnvArgsForCall = append(fake.readEnvArgsForCall, struct { - guid string - }{guid}) - fake.readEnvMutex.Unlock() - if fake.ReadEnvStub != nil { - return fake.ReadEnvStub(guid) - } else { - return fake.readEnvReturns.result1, fake.readEnvReturns.result2 - } -} - -func (fake *FakeApplicationRepository) ReadEnvCallCount() int { - fake.readEnvMutex.RLock() - defer fake.readEnvMutex.RUnlock() - return len(fake.readEnvArgsForCall) -} - -func (fake *FakeApplicationRepository) ReadEnvArgsForCall(i int) string { - fake.readEnvMutex.RLock() - defer fake.readEnvMutex.RUnlock() - return fake.readEnvArgsForCall[i].guid -} - -func (fake *FakeApplicationRepository) ReadEnvReturns(result1 *models.Environment, result2 error) { - fake.ReadEnvStub = nil - fake.readEnvReturns = struct { - result1 *models.Environment - result2 error - }{result1, result2} -} - -func (fake *FakeApplicationRepository) GetApp(appGuid string) (models.Application, error) { - fake.getAppMutex.Lock() - fake.getAppArgsForCall = append(fake.getAppArgsForCall, struct { - appGuid string - }{appGuid}) - fake.getAppMutex.Unlock() - if fake.GetAppStub != nil { - return fake.GetAppStub(appGuid) - } else { - return fake.getAppReturns.result1, fake.getAppReturns.result2 - } -} - -func (fake *FakeApplicationRepository) GetAppCallCount() int { - fake.getAppMutex.RLock() - defer fake.getAppMutex.RUnlock() - return len(fake.getAppArgsForCall) -} - -func (fake *FakeApplicationRepository) GetAppArgsForCall(i int) string { - fake.getAppMutex.RLock() - defer fake.getAppMutex.RUnlock() - return fake.getAppArgsForCall[i].appGuid -} - -func (fake *FakeApplicationRepository) GetAppReturns(result1 models.Application, result2 error) { - fake.GetAppStub = nil - fake.getAppReturns = struct { - result1 models.Application - result2 error - }{result1, result2} -} - -//End counterfeiter section - -func (repo *FakeApplicationRepository) Read(name string) (app models.Application, apiErr error) { - repo.ReadCalls++ - repo.ReadArgs.Name = name - return repo.ReadReturns.App, repo.ReadReturns.Error -} - -func (repo *FakeApplicationRepository) CreatedAppParams() (params models.AppParams) { - if len(repo.CreateAppParams) > 0 { - params = repo.CreateAppParams[0] - } - return -} - -func (repo *FakeApplicationRepository) Create(params models.AppParams) (resultApp models.Application, apiErr error) { - if repo.CreateAppParams == nil { - repo.CreateAppParams = []models.AppParams{} - } - - repo.CreateAppParams = append(repo.CreateAppParams, params) - - resultApp.Guid = *params.Name + "-guid" - resultApp.Name = *params.Name - resultApp.State = "stopped" - resultApp.EnvironmentVars = map[string]interface{}{} - - if params.SpaceGuid != nil { - resultApp.SpaceGuid = *params.SpaceGuid - } - if params.BuildpackUrl != nil { - resultApp.BuildpackUrl = *params.BuildpackUrl - } - if params.Command != nil { - resultApp.Command = *params.Command - } - if params.DiskQuota != nil { - resultApp.DiskQuota = *params.DiskQuota - } - if params.InstanceCount != nil { - resultApp.InstanceCount = *params.InstanceCount - } - if params.Memory != nil { - resultApp.Memory = *params.Memory - } - if params.EnvironmentVars != nil { - resultApp.EnvironmentVars = *params.EnvironmentVars - } - - return -} - -func (repo *FakeApplicationRepository) Update(appGuid string, params models.AppParams) (updatedApp models.Application, apiErr error) { - repo.UpdateAppGuid = appGuid - repo.UpdateParams = params - updatedApp = repo.UpdateAppResult - if repo.UpdateErr { - apiErr = errors.New("Error updating app.") - } - return -} - -func (repo *FakeApplicationRepository) Delete(appGuid string) (apiErr error) { - repo.DeletedAppGuid = appGuid - return -} - -func (repo *FakeApplicationRepository) CreateRestageRequest(guid string) (apiErr error) { - repo.CreateRestageRequestArgs.AppGuid = guid - return nil -} - -var _ applications.ApplicationRepository = new(FakeApplicationRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication.go deleted file mode 100644 index 10aa70d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication.go +++ /dev/null @@ -1,147 +0,0 @@ -package authentication - -import ( - "encoding/base64" - "fmt" - "net/url" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/net" -) - -type TokenRefresher interface { - RefreshAuthToken() (updatedToken string, apiErr error) -} - -type AuthenticationRepository interface { - RefreshAuthToken() (updatedToken string, apiErr error) - Authenticate(credentials map[string]string) (apiErr error) - GetLoginPromptsAndSaveUAAServerURL() (map[string]core_config.AuthPrompt, error) -} - -type UAAAuthenticationRepository struct { - config core_config.ReadWriter - gateway net.Gateway -} - -func NewUAAAuthenticationRepository(gateway net.Gateway, config core_config.ReadWriter) (uaa UAAAuthenticationRepository) { - uaa.gateway = gateway - uaa.config = config - return -} - -func (uaa UAAAuthenticationRepository) Authenticate(credentials map[string]string) (apiErr error) { - data := url.Values{ - "grant_type": {"password"}, - "scope": {""}, - } - for key, val := range credentials { - data[key] = []string{val} - } - - apiErr = uaa.getAuthToken(data) - switch response := apiErr.(type) { - case errors.HttpError: - if response.StatusCode() == 401 { - apiErr = errors.New(T("Credentials were rejected, please try again.")) - } - } - - return -} - -type LoginResource struct { - Prompts map[string][]string - Links map[string]string -} - -var knownAuthPromptTypes = map[string]core_config.AuthPromptType{ - "text": core_config.AuthPromptTypeText, - "password": core_config.AuthPromptTypePassword, -} - -func (r *LoginResource) parsePrompts() (prompts map[string]core_config.AuthPrompt) { - prompts = make(map[string]core_config.AuthPrompt) - for key, val := range r.Prompts { - prompts[key] = core_config.AuthPrompt{ - Type: knownAuthPromptTypes[val[0]], - DisplayName: val[1], - } - } - return -} - -func (uaa UAAAuthenticationRepository) GetLoginPromptsAndSaveUAAServerURL() (prompts map[string]core_config.AuthPrompt, apiErr error) { - url := fmt.Sprintf("%s/login", uaa.config.AuthenticationEndpoint()) - resource := &LoginResource{} - apiErr = uaa.gateway.GetResource(url, resource) - - prompts = resource.parsePrompts() - if resource.Links["uaa"] == "" { - uaa.config.SetUaaEndpoint(uaa.config.AuthenticationEndpoint()) - } else { - uaa.config.SetUaaEndpoint(resource.Links["uaa"]) - } - return -} - -func (uaa UAAAuthenticationRepository) RefreshAuthToken() (string, error) { - data := url.Values{ - "refresh_token": {uaa.config.RefreshToken()}, - "grant_type": {"refresh_token"}, - "scope": {""}, - } - - apiErr := uaa.getAuthToken(data) - updatedToken := uaa.config.AccessToken() - - return updatedToken, apiErr -} - -func (uaa UAAAuthenticationRepository) getAuthToken(data url.Values) error { - type uaaErrorResponse struct { - Code string `json:"error"` - Description string `json:"error_description"` - } - - type AuthenticationResponse struct { - AccessToken string `json:"access_token"` - TokenType string `json:"token_type"` - RefreshToken string `json:"refresh_token"` - Error uaaErrorResponse `json:"error"` - } - - path := fmt.Sprintf("%s/oauth/token", uaa.config.AuthenticationEndpoint()) - request, err := uaa.gateway.NewRequest("POST", path, "Basic "+base64.StdEncoding.EncodeToString([]byte("cf:")), strings.NewReader(data.Encode())) - if err != nil { - return errors.NewWithError(T("Failed to start oauth request"), err) - } - request.HttpReq.Header.Set("Content-Type", "application/x-www-form-urlencoded") - - response := new(AuthenticationResponse) - _, err = uaa.gateway.PerformRequestForJSONResponse(request, &response) - - switch err.(type) { - case nil: - case errors.HttpError: - return err - case *errors.InvalidTokenError: - return errors.New(T("Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a -u -o -s ` to log back in and re-authenticate.")) - default: - return errors.NewWithError(T("auth request failed"), err) - } - - // TODO: get the actual status code - if response.Error.Code != "" { - return errors.NewHttpError(0, response.Error.Code, response.Error.Description) - } - - uaa.config.SetAccessToken(fmt.Sprintf("%s %s", response.TokenType, response.AccessToken)) - uaa.config.SetRefreshToken(response.RefreshToken) - - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication_suite_test.go deleted file mode 100644 index 9aecfdb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package authentication_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAuthentication(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Authentication Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication_test.go deleted file mode 100644 index 28c4aaa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/authentication/authentication_test.go +++ /dev/null @@ -1,337 +0,0 @@ -package authentication_test - -import ( - "encoding/base64" - "fmt" - "net/http" - "net/http/httptest" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/authentication" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("AuthenticationRepository", func() { - var ( - gateway net.Gateway - testServer *httptest.Server - handler *testnet.TestHandler - config core_config.ReadWriter - auth AuthenticationRepository - ) - - BeforeEach(func() { - config = testconfig.NewRepository() - gateway = net.NewUAAGateway(config, &testterm.FakeUI{}) - auth = NewUAAAuthenticationRepository(gateway, config) - }) - - AfterEach(func() { - testServer.Close() - }) - - var setupTestServer = func(request testnet.TestRequest) { - testServer, handler = testnet.NewServer([]testnet.TestRequest{request}) - config.SetAuthenticationEndpoint(testServer.URL) - } - - Describe("authenticating", func() { - var err error - - JustBeforeEach(func() { - err = auth.Authenticate(map[string]string{ - "username": "foo@example.com", - "password": "bar", - }) - }) - - Describe("when login succeeds", func() { - BeforeEach(func() { - setupTestServer(successfulLoginRequest) - }) - - It("stores the access and refresh tokens in the config", func() { - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(config.AuthenticationEndpoint()).To(Equal(testServer.URL)) - Expect(config.AccessToken()).To(Equal("BEARER my_access_token")) - Expect(config.RefreshToken()).To(Equal("my_refresh_token")) - }) - }) - - Describe("when login fails", func() { - BeforeEach(func() { - setupTestServer(unsuccessfulLoginRequest) - }) - - It("returns an error", func() { - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(BeNil()) - Expect(err.Error()).To(Equal("Credentials were rejected, please try again.")) - Expect(config.AccessToken()).To(BeEmpty()) - Expect(config.RefreshToken()).To(BeEmpty()) - }) - }) - - Describe("when an error occurs during login", func() { - BeforeEach(func() { - setupTestServer(errorLoginRequest) - }) - - It("returns a failure response", func() { - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(Equal("Server error, status code: 500, error code: , message: ")) - Expect(config.AccessToken()).To(BeEmpty()) - }) - }) - - Describe("when the UAA server has an error but still returns a 200", func() { - BeforeEach(func() { - setupTestServer(errorMaskedAsSuccessLoginRequest) - }) - - It("returns an error", func() { - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("I/O error: uaa.10.244.0.22.xip.io; nested exception is java.net.UnknownHostException: uaa.10.244.0.22.xip.io")) - Expect(config.AccessToken()).To(BeEmpty()) - }) - }) - }) - - Describe("getting login info", func() { - var ( - apiErr error - prompts map[string]core_config.AuthPrompt - ) - - JustBeforeEach(func() { - prompts, apiErr = auth.GetLoginPromptsAndSaveUAAServerURL() - }) - - Describe("when the login info API succeeds", func() { - BeforeEach(func() { - setupTestServer(loginServerLoginRequest) - }) - - It("does not return an error", func() { - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("gets the login prompts", func() { - Expect(prompts).To(Equal(map[string]core_config.AuthPrompt{ - "username": core_config.AuthPrompt{ - DisplayName: "Email", - Type: core_config.AuthPromptTypeText, - }, - "pin": core_config.AuthPrompt{ - DisplayName: "PIN Number", - Type: core_config.AuthPromptTypePassword, - }, - })) - }) - - It("saves the UAA server to the config", func() { - Expect(config.UaaEndpoint()).To(Equal("https://uaa.run.pivotal.io")) - }) - }) - - Describe("when the login info API fails", func() { - BeforeEach(func() { - setupTestServer(loginServerLoginFailureRequest) - }) - - It("returns a failure response when the login info API fails", func() { - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - Expect(prompts).To(BeEmpty()) - }) - }) - - Context("when the response does not contain links", func() { - BeforeEach(func() { - setupTestServer(uaaServerLoginRequest) - }) - - It("presumes that the authorization server is the UAA", func() { - Expect(config.UaaEndpoint()).To(Equal(config.AuthenticationEndpoint())) - }) - }) - }) - - Describe("refreshing the auth token", func() { - var refreshedToken string - var apiErr error - - JustBeforeEach(func() { - refreshedToken, apiErr = auth.RefreshAuthToken() - }) - - Context("when the refresh token has expired", func() { - BeforeEach(func() { - setupTestServer(refreshTokenExpiredRequestError) - }) - It("the returns the reauthentication error message", func() { - Expect(apiErr.Error()).To(Equal("Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a -u -o -s ` to log back in and re-authenticate.")) - }) - }) - Context("when there is a UAA error", func() { - BeforeEach(func() { - setupTestServer(errorLoginRequest) - }) - - It("returns the API error", func() { - Expect(apiErr).NotTo(BeNil()) - }) - }) - }) -}) - -var authHeaders = http.Header{ - "accept": {"application/json"}, - "content-type": {"application/x-www-form-urlencoded"}, - "authorization": {"Basic " + base64.StdEncoding.EncodeToString([]byte("cf:"))}, -} - -var successfulLoginRequest = testnet.TestRequest{ - Method: "POST", - Path: "/oauth/token", - Header: authHeaders, - Matcher: successfulLoginMatcher, - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "access_token": "my_access_token", - "token_type": "BEARER", - "refresh_token": "my_refresh_token", - "scope": "openid", - "expires_in": 98765 -} `}, -} - -var successfulLoginMatcher = func(request *http.Request) { - err := request.ParseForm() - if err != nil { - Fail(fmt.Sprintf("Failed to parse form: %s", err)) - return - } - - Expect(request.Form.Get("username")).To(Equal("foo@example.com")) - Expect(request.Form.Get("password")).To(Equal("bar")) - Expect(request.Form.Get("grant_type")).To(Equal("password")) - Expect(request.Form.Get("scope")).To(Equal("")) -} - -var unsuccessfulLoginRequest = testnet.TestRequest{ - Method: "POST", - Path: "/oauth/token", - Response: testnet.TestResponse{ - Status: http.StatusUnauthorized, - }, -} -var refreshTokenExpiredRequestError = testnet.TestRequest{ - Method: "POST", - Path: "/oauth/token", - Response: testnet.TestResponse{ - Status: http.StatusUnauthorized, - Body: ` -{ - "error": "invalid_token", - "error_description": "Invalid auth token: Invalid refresh token (expired): eyJhbGckjsdfdf" -} -`}, -} - -var errorLoginRequest = testnet.TestRequest{ - Method: "POST", - Path: "/oauth/token", - Response: testnet.TestResponse{ - Status: http.StatusInternalServerError, - }, -} - -var errorMaskedAsSuccessLoginRequest = testnet.TestRequest{ - Method: "POST", - Path: "/oauth/token", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "error": { - "error": "rest_client_error", - "error_description": "I/O error: uaa.10.244.0.22.xip.io; nested exception is java.net.UnknownHostException: uaa.10.244.0.22.xip.io" - } -} -`}, -} - -var loginServerLoginRequest = testnet.TestRequest{ - Method: "GET", - Path: "/login", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "timestamp":"2013-12-18T11:26:53-0700", - "app":{ - "artifact":"cloudfoundry-identity-uaa", - "description":"User Account and Authentication Service", - "name":"UAA", - "version":"1.4.7" - }, - "commit_id":"2701cc8", - "links":{ - "register":"https://console.run.pivotal.io/register", - "passwd":"https://console.run.pivotal.io/password_resets/new", - "home":"https://console.run.pivotal.io", - "support":"https://support.cloudfoundry.com/home", - "login":"https://login.run.pivotal.io", - "uaa":"https://uaa.run.pivotal.io" - }, - "prompts":{ - "username": ["text","Email"], - "pin": ["password", "PIN Number"] - } -}`, - }, -} - -var loginServerLoginFailureRequest = testnet.TestRequest{ - Method: "GET", - Path: "/login", - Response: testnet.TestResponse{ - Status: http.StatusInternalServerError, - }, -} - -var uaaServerLoginRequest = testnet.TestRequest{ - Method: "GET", - Path: "/login", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "timestamp":"2013-12-18T11:26:53-0700", - "app":{ - "artifact":"cloudfoundry-identity-uaa", - "description":"User Account and Authentication Service", - "name":"UAA", - "version":"1.4.7" - }, - "commit_id":"2701cc8", - "prompts":{ - "username": ["text","Email"], - "pin": ["password", "PIN Number"] - } -}`, - }, -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpack_bits.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpack_bits.go deleted file mode 100644 index cad02f8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpack_bits.go +++ /dev/null @@ -1,257 +0,0 @@ -package api - -import ( - "archive/zip" - "crypto/tls" - "crypto/x509" - "fmt" - "io" - "mime/multipart" - gonet "net" - "net/http" - "os" - "path" - "path/filepath" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/gofileutils/fileutils" -) - -type BuildpackBitsRepository interface { - UploadBuildpack(buildpack models.Buildpack, dir string) (apiErr error) -} - -type CloudControllerBuildpackBitsRepository struct { - config core_config.Reader - gateway net.Gateway - zipper app_files.Zipper - TrustedCerts []tls.Certificate -} - -func NewCloudControllerBuildpackBitsRepository(config core_config.Reader, gateway net.Gateway, zipper app_files.Zipper) (repo CloudControllerBuildpackBitsRepository) { - repo.config = config - repo.gateway = gateway - repo.zipper = zipper - return -} - -func (repo CloudControllerBuildpackBitsRepository) UploadBuildpack(buildpack models.Buildpack, buildpackLocation string) (apiErr error) { - fileutils.TempFile("buildpack-upload", func(zipFileToUpload *os.File, err error) { - if err != nil { - apiErr = errors.NewWithError(T("Couldn't create temp file for upload"), err) - return - } - - var buildpackFileName string - if isWebURL(buildpackLocation) { - buildpackFileName = path.Base(buildpackLocation) - repo.downloadBuildpack(buildpackLocation, func(downloadFile *os.File, downloadErr error) { - if downloadErr != nil { - err = downloadErr - return - } - - err = normalizeBuildpackArchive(downloadFile, zipFileToUpload) - }) - } else { - buildpackFileName = filepath.Base(buildpackLocation) - - stats, statError := os.Stat(buildpackLocation) - if statError != nil { - apiErr = errors.NewWithError(T("Error opening buildpack file"), statError) - err = statError - return - } - - if stats.IsDir() { - buildpackFileName += ".zip" // FIXME: remove once #71167394 is fixed - err = repo.zipper.Zip(buildpackLocation, zipFileToUpload) - } else { - specifiedFile, openError := os.Open(buildpackLocation) - if openError != nil { - apiErr = errors.NewWithError(T("Couldn't open buildpack file"), openError) - err = openError - return - } - err = normalizeBuildpackArchive(specifiedFile, zipFileToUpload) - } - } - - if err != nil { - apiErr = errors.NewWithError(T("Couldn't write zip file"), err) - return - } - - apiErr = repo.uploadBits(buildpack, zipFileToUpload, buildpackFileName) - }) - - return -} - -func normalizeBuildpackArchive(inputFile *os.File, outputFile *os.File) error { - stats, err := inputFile.Stat() - if err != nil { - return err - } - - reader, err := zip.NewReader(inputFile, stats.Size()) - if err != nil { - return err - } - - contents := reader.File - - parentPath, hasBuildpack := findBuildpackPath(contents) - - if !hasBuildpack { - return errors.New(T("Zip archive does not contain a buildpack")) - } - - writer := zip.NewWriter(outputFile) - - for _, file := range contents { - name := file.Name - if strings.HasPrefix(name, parentPath) { - relativeFilename := strings.TrimPrefix(name, parentPath+"/") - if relativeFilename == "" { - continue - } - - fileInfo := file.FileInfo() - header, err := zip.FileInfoHeader(fileInfo) - if err != nil { - return err - } - header.Name = relativeFilename - - w, err := writer.CreateHeader(header) - if err != nil { - return err - } - - r, err := file.Open() - if err != nil { - return err - } - - io.Copy(w, r) - err = r.Close() - if err != nil { - return err - } - } - } - - writer.Close() - outputFile.Seek(0, 0) - return nil -} - -func findBuildpackPath(zipFiles []*zip.File) (parentPath string, foundBuildpack bool) { - needle := "bin/compile" - - for _, file := range zipFiles { - if strings.HasSuffix(file.Name, needle) { - foundBuildpack = true - parentPath = path.Join(file.Name, "..", "..") - if parentPath == "." { - parentPath = "" - } - return - } - } - return -} - -func isWebURL(path string) bool { - return strings.HasPrefix(path, "http://") || strings.HasPrefix(path, "https://") -} - -func (repo CloudControllerBuildpackBitsRepository) downloadBuildpack(url string, cb func(*os.File, error)) { - fileutils.TempFile("buildpack-download", func(tempfile *os.File, err error) { - if err != nil { - cb(nil, err) - return - } - - var certPool *x509.CertPool - if len(repo.TrustedCerts) > 0 { - certPool = x509.NewCertPool() - for _, tlsCert := range repo.TrustedCerts { - cert, _ := x509.ParseCertificate(tlsCert.Certificate[0]) - certPool.AddCert(cert) - } - } - - client := &http.Client{ - Transport: &http.Transport{ - Dial: (&gonet.Dialer{Timeout: 5 * time.Second}).Dial, - TLSClientConfig: &tls.Config{RootCAs: certPool}, - Proxy: http.ProxyFromEnvironment, - }, - } - - response, err := client.Get(url) - if err != nil { - cb(nil, err) - return - } - defer response.Body.Close() - - io.Copy(tempfile, response.Body) - tempfile.Seek(0, 0) - cb(tempfile, nil) - }) -} - -func (repo CloudControllerBuildpackBitsRepository) uploadBits(buildpack models.Buildpack, body io.Reader, buildpackName string) error { - return repo.performMultiPartUpload( - fmt.Sprintf("%s/v2/buildpacks/%s/bits", repo.config.ApiEndpoint(), buildpack.Guid), - "buildpack", - buildpackName, - body) -} - -func (repo CloudControllerBuildpackBitsRepository) performMultiPartUpload(url string, fieldName string, fileName string, body io.Reader) (apiErr error) { - fileutils.TempFile("requests", func(requestFile *os.File, err error) { - if err != nil { - apiErr = err - return - } - - writer := multipart.NewWriter(requestFile) - part, err := writer.CreateFormFile(fieldName, fileName) - - if err != nil { - writer.Close() - return - } - - _, err = io.Copy(part, body) - writer.Close() - - if err != nil { - apiErr = errors.NewWithError(T("Error creating upload"), err) - return - } - - var request *net.Request - request, apiErr = repo.gateway.NewRequestForFile("PUT", url, repo.config.AccessToken(), requestFile) - contentType := fmt.Sprintf("multipart/form-data; boundary=%s", writer.Boundary()) - request.HttpReq.Header.Set("Content-Type", contentType) - if apiErr != nil { - return - } - - _, apiErr = repo.gateway.PerformRequest(request) - }) - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpack_bits_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpack_bits_test.go deleted file mode 100644 index 985d459..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpack_bits_test.go +++ /dev/null @@ -1,232 +0,0 @@ -package api_test - -import ( - "archive/zip" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/http/httptest" - "os" - "path/filepath" - "runtime" - "sort" - "time" - - "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BuildpackBitsRepository", func() { - var ( - buildpacksDir string - configRepo core_config.Repository - repo CloudControllerBuildpackBitsRepository - buildpack models.Buildpack - testServer *httptest.Server - testServerHandler *testnet.TestHandler - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - pwd, _ := os.Getwd() - - buildpacksDir = filepath.Join(pwd, "../../fixtures/buildpacks") - repo = NewCloudControllerBuildpackBitsRepository(configRepo, gateway, app_files.ApplicationZipper{}) - buildpack = models.Buildpack{Name: "my-cool-buildpack", Guid: "my-cool-buildpack-guid"} - - testServer, testServerHandler = testnet.NewServer([]testnet.TestRequest{uploadBuildpackRequest()}) - configRepo.SetApiEndpoint(testServer.URL) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe("#UploadBuildpack", func() { - It("fails to upload a buildpack with an invalid directory", func() { - apiErr := repo.UploadBuildpack(buildpack, "/foo/bar") - Expect(apiErr).NotTo(BeNil()) - Expect(apiErr.Error()).To(ContainSubstring("Error opening buildpack file")) - }) - - It("uploads a valid buildpack directory", func() { - buildpackPath := filepath.Join(buildpacksDir, "example-buildpack") - - os.Chmod(filepath.Join(buildpackPath, "bin/compile"), 0755) - os.Chmod(filepath.Join(buildpackPath, "bin/detect"), 0755) - err := os.Chmod(filepath.Join(buildpackPath, "bin/release"), 0755) - Expect(err).NotTo(HaveOccurred()) - - apiErr := repo.UploadBuildpack(buildpack, buildpackPath) - Expect(testServerHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("uploads a valid zipped buildpack", func() { - buildpackPath := filepath.Join(buildpacksDir, "example-buildpack.zip") - - apiErr := repo.UploadBuildpack(buildpack, buildpackPath) - Expect(testServerHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - Describe("when the buildpack is wrapped in an extra top-level directory", func() { - It("uploads a zip file containing only the actual buildpack", func() { - buildpackPath := filepath.Join(buildpacksDir, "example-buildpack-in-dir.zip") - - apiErr := repo.UploadBuildpack(buildpack, buildpackPath) - Expect(testServerHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("when given the URL of a buildpack", func() { - var buildpackFileServerHandler = func(buildpackName string) http.HandlerFunc { - return func(writer http.ResponseWriter, request *http.Request) { - Expect(request.URL.Path).To(Equal(fmt.Sprintf("/place/%s", buildpackName))) - f, err := os.Open(filepath.Join(buildpacksDir, buildpackName)) - Expect(err).NotTo(HaveOccurred()) - io.Copy(writer, f) - } - } - - Context("when the downloaded resource is not a valid zip file", func() { - It("fails gracefully", func() { - fileServer := httptest.NewServer(buildpackFileServerHandler("bad-buildpack.zip")) - defer fileServer.Close() - - apiErr := repo.UploadBuildpack(buildpack, fileServer.URL+"/place/bad-buildpack.zip") - Expect(testServerHandler).NotTo(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - }) - }) - - It("uploads the file over HTTP", func() { - fileServer := httptest.NewServer(buildpackFileServerHandler("example-buildpack.zip")) - defer fileServer.Close() - - apiErr := repo.UploadBuildpack(buildpack, fileServer.URL+"/place/example-buildpack.zip") - - Expect(testServerHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("uploads the file over HTTPS", func() { - fileServer := httptest.NewTLSServer(buildpackFileServerHandler("example-buildpack.zip")) - defer fileServer.Close() - - repo.TrustedCerts = fileServer.TLS.Certificates - apiErr := repo.UploadBuildpack(buildpack, fileServer.URL+"/place/example-buildpack.zip") - - Expect(testServerHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("fails when the server's SSL cert cannot be verified", func() { - fileServer := httptest.NewTLSServer(buildpackFileServerHandler("example-buildpack.zip")) - defer fileServer.Close() - - apiErr := repo.UploadBuildpack(buildpack, fileServer.URL+"/place/example-buildpack.zip") - - Expect(testServerHandler).NotTo(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - }) - - Describe("when the buildpack is wrapped in an extra top-level directory", func() { - It("uploads a zip file containing only the actual buildpack", func() { - fileServer := httptest.NewTLSServer(buildpackFileServerHandler("example-buildpack-in-dir.zip")) - defer fileServer.Close() - - repo.TrustedCerts = fileServer.TLS.Certificates - apiErr := repo.UploadBuildpack(buildpack, fileServer.URL+"/place/example-buildpack-in-dir.zip") - - Expect(testServerHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - It("returns an unsuccessful response when the server cannot be reached", func() { - apiErr := repo.UploadBuildpack(buildpack, "https://domain.bad-domain:223453/no-place/example-buildpack.zip") - Expect(testServerHandler).NotTo(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - }) - }) - }) -}) - -func uploadBuildpackRequest() testnet.TestRequest { - return testnet.TestRequest{ - Method: "PUT", - Path: "/v2/buildpacks/my-cool-buildpack-guid/bits", - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: `{ "metadata":{ "guid": "my-job-guid" } }`, - }, - Matcher: func(request *http.Request) { - err := request.ParseMultipartForm(4096) - defer request.MultipartForm.RemoveAll() - Expect(err).NotTo(HaveOccurred()) - - Expect(len(request.MultipartForm.Value)).To(Equal(0)) - Expect(len(request.MultipartForm.File)).To(Equal(1)) - - files, ok := request.MultipartForm.File["buildpack"] - Expect(ok).To(BeTrue(), "Buildpack file part not present") - Expect(len(files)).To(Equal(1), "Wrong number of files") - - buildpackFile := files[0] - file, err := buildpackFile.Open() - Expect(err).NotTo(HaveOccurred()) - - Expect(buildpackFile.Filename).To(ContainSubstring(".zip")) - - zipReader, err := zip.NewReader(file, 4096) - Expect(err).NotTo(HaveOccurred()) - - actualFileNames := []string{} - actualFileContents := []string{} - for _, f := range zipReader.File { - actualFileNames = append(actualFileNames, f.Name) - c, _ := f.Open() - content, _ := ioutil.ReadAll(c) - actualFileContents = append(actualFileContents, string(content)) - } - sort.Strings(actualFileNames) - - Expect(actualFileNames).To(Equal([]string{ - "bin/", - "bin/compile", - "bin/detect", - "bin/release", - "lib/", - "lib/helper", - })) - Expect(actualFileContents).To(Equal([]string{ - "", - "the-compile-script\n", - "the-detect-script\n", - "the-release-script\n", - "", - "the-helper-script\n", - })) - - if runtime.GOOS != "windows" { - for i := 1; i < 4; i++ { - Expect(zipReader.File[i].Mode()).To(Equal(os.FileMode(0755))) - } - } - }, - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpacks.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpacks.go deleted file mode 100644 index a3a3135..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpacks.go +++ /dev/null @@ -1,116 +0,0 @@ -package api - -import ( - "bytes" - "encoding/json" - "fmt" - "net/url" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type BuildpackRepository interface { - FindByName(name string) (buildpack models.Buildpack, apiErr error) - ListBuildpacks(func(models.Buildpack) bool) error - Create(name string, position *int, enabled *bool, locked *bool) (createdBuildpack models.Buildpack, apiErr error) - Delete(buildpackGuid string) (apiErr error) - Update(buildpack models.Buildpack) (updatedBuildpack models.Buildpack, apiErr error) -} - -type CloudControllerBuildpackRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerBuildpackRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerBuildpackRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerBuildpackRepository) ListBuildpacks(cb func(models.Buildpack) bool) error { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - buildpacks_path, - resources.BuildpackResource{}, - func(resource interface{}) bool { - return cb(resource.(resources.BuildpackResource).ToFields()) - }) -} - -func (repo CloudControllerBuildpackRepository) FindByName(name string) (buildpack models.Buildpack, apiErr error) { - foundIt := false - apiErr = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("%s?q=%s", buildpacks_path, url.QueryEscape("name:"+name)), - resources.BuildpackResource{}, - func(resource interface{}) bool { - buildpack = resource.(resources.BuildpackResource).ToFields() - foundIt = true - return false - }) - - if !foundIt { - apiErr = errors.NewModelNotFoundError("Buildpack", name) - } - return -} - -func (repo CloudControllerBuildpackRepository) Create(name string, position *int, enabled *bool, locked *bool) (createdBuildpack models.Buildpack, apiErr error) { - entity := resources.BuildpackEntity{Name: name, Position: position, Enabled: enabled, Locked: locked} - body, err := json.Marshal(entity) - if err != nil { - apiErr = errors.NewWithError(T("Could not serialize information"), err) - return - } - - resource := new(resources.BuildpackResource) - apiErr = repo.gateway.CreateResource(repo.config.ApiEndpoint(), buildpacks_path, bytes.NewReader(body), resource) - if apiErr != nil { - return - } - - createdBuildpack = resource.ToFields() - return -} - -func (repo CloudControllerBuildpackRepository) Delete(buildpackGuid string) (apiErr error) { - path := fmt.Sprintf("%s/%s", buildpacks_path, buildpackGuid) - apiErr = repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) - return -} - -func (repo CloudControllerBuildpackRepository) Update(buildpack models.Buildpack) (updatedBuildpack models.Buildpack, apiErr error) { - path := fmt.Sprintf("%s/%s", buildpacks_path, buildpack.Guid) - - entity := resources.BuildpackEntity{ - Name: buildpack.Name, - Position: buildpack.Position, - Enabled: buildpack.Enabled, - Key: "", - Filename: "", - Locked: buildpack.Locked, - } - - body, err := json.Marshal(entity) - if err != nil { - apiErr = errors.NewWithError(T("Could not serialize updates."), err) - return - } - - resource := new(resources.BuildpackResource) - apiErr = repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(body), resource) - if apiErr != nil { - return - } - - updatedBuildpack = resource.ToFields() - return -} - -const buildpacks_path = "/v2/buildpacks" diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpacks_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpacks_test.go deleted file mode 100644 index f583d68..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/buildpacks_test.go +++ /dev/null @@ -1,334 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Buildpacks repo", func() { - var ( - ts *httptest.Server - handler *testnet.TestHandler - config core_config.ReadWriter - repo BuildpackRepository - ) - - BeforeEach(func() { - config = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway((config), time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerBuildpackRepository(config, gateway) - }) - - AfterEach(func() { - ts.Close() - }) - - var setupTestServer = func(requests ...testnet.TestRequest) { - ts, handler = testnet.NewServer(requests) - config.SetApiEndpoint(ts.URL) - } - - It("lists buildpacks", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/buildpacks", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/buildpacks?page=2", - "resources": [ - { - "metadata": { - "guid": "buildpack1-guid" - }, - "entity": { - "name": "Buildpack1", - "position" : 1, - "filename" : "firstbp.zip" - } - } - ] - }`}}), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/buildpacks?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "resources": [ - { - "metadata": { - "guid": "buildpack2-guid" - }, - "entity": { - "name": "Buildpack2", - "position" : 2 - } - } - ] - }`}, - })) - - buildpacks := []models.Buildpack{} - err := repo.ListBuildpacks(func(b models.Buildpack) bool { - buildpacks = append(buildpacks, b) - return true - }) - - one := 1 - two := 2 - Expect(buildpacks).To(ConsistOf([]models.Buildpack{ - { - Guid: "buildpack1-guid", - Name: "Buildpack1", - Position: &one, - Filename: "firstbp.zip", - }, - { - Guid: "buildpack2-guid", - Name: "Buildpack2", - Position: &two, - }, - })) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Describe("finding buildpacks by name", func() { - It("returns the buildpack with that name", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/buildpacks?q=name%3ABuildpack1", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"resources": [ - { - "metadata": { - "guid": "buildpack1-guid" - }, - "entity": { - "name": "Buildpack1", - "position": 10 - } - } - ] - }`}})) - - buildpack, apiErr := repo.FindByName("Buildpack1") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(buildpack.Name).To(Equal("Buildpack1")) - Expect(buildpack.Guid).To(Equal("buildpack1-guid")) - Expect(*buildpack.Position).To(Equal(10)) - }) - - It("returns a ModelNotFoundError when the buildpack is not found", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/buildpacks?q=name%3ABuildpack1", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"resources": []}`, - }, - })) - - _, apiErr := repo.FindByName("Buildpack1") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - }) - - Describe("creating buildpacks", func() { - It("returns an error when the buildpack has an invalid name", func() { - setupTestServer(testnet.TestRequest{ - Method: "POST", - Path: "/v2/buildpacks", - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{ - "code":290003, - "description":"Buildpack is invalid: [\"name name can only contain alphanumeric characters\"]", - "error_code":"CF-BuildpackInvalid" - }`, - }}) - - one := 1 - createdBuildpack, apiErr := repo.Create("name with space", &one, nil, nil) - Expect(apiErr).To(HaveOccurred()) - Expect(createdBuildpack).To(Equal(models.Buildpack{})) - Expect(apiErr.(errors.HttpError).ErrorCode()).To(Equal("290003")) - Expect(apiErr.Error()).To(ContainSubstring("Buildpack is invalid")) - }) - - It("sets the position flag when creating a buildpack", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/buildpacks", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-cool-buildpack","position":999}`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: `{ - "metadata": { - "guid": "my-cool-buildpack-guid" - }, - "entity": { - "name": "my-cool-buildpack", - "position":999 - } - }`}, - })) - - position := 999 - created, apiErr := repo.Create("my-cool-buildpack", &position, nil, nil) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(created.Guid).NotTo(BeNil()) - Expect("my-cool-buildpack").To(Equal(created.Name)) - Expect(999).To(Equal(*created.Position)) - }) - - It("sets the enabled flag when creating a buildpack", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/buildpacks", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-cool-buildpack","position":999, "enabled":true}`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: `{ - "metadata": { - "guid": "my-cool-buildpack-guid" - }, - "entity": { - "name": "my-cool-buildpack", - "position":999, - "enabled":true - } - }`}, - })) - - position := 999 - enabled := true - created, apiErr := repo.Create("my-cool-buildpack", &position, &enabled, nil) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(created.Guid).NotTo(BeNil()) - Expect(created.Name).To(Equal("my-cool-buildpack")) - Expect(999).To(Equal(*created.Position)) - }) - }) - - It("deletes buildpacks", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/buildpacks/my-cool-buildpack-guid", - Response: testnet.TestResponse{ - Status: http.StatusNoContent, - }})) - - err := repo.Delete("my-cool-buildpack-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Describe("updating buildpacks", func() { - It("updates a buildpack's name, position and enabled flag", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/buildpacks/my-cool-buildpack-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-cool-buildpack","position":555,"enabled":false}`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: `{ - "metadata": { - "guid": "my-cool-buildpack-guid" - }, - "entity": { - "name": "my-cool-buildpack", - "position":555, - "enabled":false - } - }`}, - })) - - position := 555 - enabled := false - buildpack := models.Buildpack{ - Name: "my-cool-buildpack", - Guid: "my-cool-buildpack-guid", - Position: &position, - Enabled: &enabled, - } - - updated, err := repo.Update(buildpack) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(updated).To(Equal(buildpack)) - }) - - It("sets the locked attribute on the buildpack", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/buildpacks/my-cool-buildpack-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-cool-buildpack","locked":true}`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: `{ - - "metadata": { - "guid": "my-cool-buildpack-guid" - }, - "entity": { - "name": "my-cool-buildpack", - "position":123, - "locked": true - } - }`}, - })) - - locked := true - - buildpack := models.Buildpack{ - Name: "my-cool-buildpack", - Guid: "my-cool-buildpack-guid", - Locked: &locked, - } - - updated, err := repo.Update(buildpack) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - position := 123 - Expect(updated).To(Equal(models.Buildpack{ - Name: "my-cool-buildpack", - Guid: "my-cool-buildpack-guid", - Position: &position, - Locked: &locked, - })) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source.go deleted file mode 100644 index dd30462..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source.go +++ /dev/null @@ -1,31 +0,0 @@ -package copy_application_source - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" -) - -type CopyApplicationSourceRepository interface { - CopyApplication(sourceAppGuid, targetAppGuid string) error -} - -type CloudControllerApplicationSourceRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerCopyApplicationSourceRepository(config core_config.Reader, gateway net.Gateway) *CloudControllerApplicationSourceRepository { - return &CloudControllerApplicationSourceRepository{ - config: config, - gateway: gateway, - } -} - -func (repo *CloudControllerApplicationSourceRepository) CopyApplication(sourceAppGuid, targetAppGuid string) error { - url := fmt.Sprintf("/v2/apps/%s/copy_bits", targetAppGuid) - body := fmt.Sprintf(`{"source_app_guid":"%s"}`, sourceAppGuid) - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), url, strings.NewReader(body), new(interface{})) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source_suite_test.go deleted file mode 100644 index 63c903e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package copy_application_source_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCopyApplicationSource(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "CopyApplicationSource Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source_test.go deleted file mode 100644 index b6b46ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/copy_application_source_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package copy_application_source_test - -import ( - "net/http" - "net/http/httptest" - "time" - - . "github.com/cloudfoundry/cli/cf/api/copy_application_source" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CopyApplicationSource", func() { - var ( - repo CopyApplicationSourceRepository - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerCopyApplicationSourceRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe(".CopyApplication", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/apps/target-app-guid/copy_bits", - Matcher: testnet.RequestBodyMatcher(`{ - "source_app_guid": "source-app-guid" - }`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - }, - })) - }) - - It("should return a CopyApplicationModel", func() { - err := repo.CopyApplication("source-app-guid", "target-app-guid") - Expect(err).ToNot(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/fakes/fake_copy_application_source_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/fakes/fake_copy_application_source_repository.go deleted file mode 100644 index 057eef9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/copy_application_source/fakes/fake_copy_application_source_repository.go +++ /dev/null @@ -1,54 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/copy_application_source" - - "sync" -) - -type FakeCopyApplicationSourceRepository struct { - CopyApplicationStub func(sourceAppGuid, targetAppGuid string) error - copyApplicationMutex sync.RWMutex - copyApplicationArgsForCall []struct { - sourceAppGuid string - targetAppGuid string - } - copyApplicationReturns struct { - result1 error - } -} - -func (fake *FakeCopyApplicationSourceRepository) CopyApplication(sourceAppGuid string, targetAppGuid string) error { - fake.copyApplicationMutex.Lock() - defer fake.copyApplicationMutex.Unlock() - fake.copyApplicationArgsForCall = append(fake.copyApplicationArgsForCall, struct { - sourceAppGuid string - targetAppGuid string - }{sourceAppGuid, targetAppGuid}) - if fake.CopyApplicationStub != nil { - return fake.CopyApplicationStub(sourceAppGuid, targetAppGuid) - } else { - return fake.copyApplicationReturns.result1 - } -} - -func (fake *FakeCopyApplicationSourceRepository) CopyApplicationCallCount() int { - fake.copyApplicationMutex.RLock() - defer fake.copyApplicationMutex.RUnlock() - return len(fake.copyApplicationArgsForCall) -} - -func (fake *FakeCopyApplicationSourceRepository) CopyApplicationArgsForCall(i int) (string, string) { - fake.copyApplicationMutex.RLock() - defer fake.copyApplicationMutex.RUnlock() - return fake.copyApplicationArgsForCall[i].sourceAppGuid, fake.copyApplicationArgsForCall[i].targetAppGuid -} - -func (fake *FakeCopyApplicationSourceRepository) CopyApplicationReturns(result1 error) { - fake.copyApplicationReturns = struct { - result1 error - }{result1} -} - -var _ CopyApplicationSourceRepository = new(FakeCopyApplicationSourceRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/curl.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/curl.go deleted file mode 100644 index 72d1c5f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/curl.go +++ /dev/null @@ -1,87 +0,0 @@ -package api - -import ( - "bufio" - "fmt" - "io/ioutil" - "net/http" - "net/http/httputil" - "net/textproto" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/net" -) - -type CurlRepository interface { - Request(method, path, header, body string) (resHeaders, resBody string, apiErr error) -} - -type CloudControllerCurlRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerCurlRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerCurlRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerCurlRepository) Request(method, path, headerString, body string) (resHeaders, resBody string, err error) { - url := fmt.Sprintf("%s/%s", repo.config.ApiEndpoint(), strings.TrimLeft(path, "/")) - - req, err := repo.gateway.NewRequest(method, url, repo.config.AccessToken(), strings.NewReader(body)) - if err != nil { - return - } - - err = mergeHeaders(req.HttpReq.Header, headerString) - if err != nil { - err = errors.NewWithError(T("Error parsing headers"), err) - return - } - - res, err := repo.gateway.PerformRequest(req) - - if _, ok := err.(errors.HttpError); ok { - err = nil - } - - if err != nil { - return - } - defer res.Body.Close() - - headerBytes, _ := httputil.DumpResponse(res, false) - resHeaders = string(headerBytes) - - bytes, err := ioutil.ReadAll(res.Body) - if err != nil { - err = errors.NewWithError(T("Error reading response"), err) - } - resBody = string(bytes) - - return -} - -func mergeHeaders(destination http.Header, headerString string) (err error) { - headerString = strings.TrimSpace(headerString) - headerString += "\n\n" - headerReader := bufio.NewReader(strings.NewReader(headerString)) - headers, err := textproto.NewReader(headerReader).ReadMIMEHeader() - if err != nil { - return - } - - for key, values := range headers { - destination.Del(key) - for _, value := range values { - destination.Add(key, value) - } - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/curl_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/curl_test.go deleted file mode 100644 index c631b48..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/curl_test.go +++ /dev/null @@ -1,179 +0,0 @@ -package api_test - -import ( - "net/http" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CloudControllerCurlRepository ", func() { - var ( - headers string - body string - apiErr error - ) - - Describe("GET requests", func() { - BeforeEach(func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/endpoint", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: expectedJSONResponse}, - }) - ts, handler := testnet.NewServer([]testnet.TestRequest{req}) - defer ts.Close() - - deps := newCurlDependencies() - deps.config.SetApiEndpoint(ts.URL) - - repo := NewCloudControllerCurlRepository(deps.config, deps.gateway) - headers, body, apiErr = repo.Request("GET", "/v2/endpoint", "", "") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("returns headers with the status code", func() { - Expect(headers).To(ContainSubstring("200")) - }) - - It("returns the header content type", func() { - Expect(headers).To(ContainSubstring("Content-Type")) - Expect(headers).To(ContainSubstring("text/plain")) - }) - - It("returns the body as a JSON-encoded string", func() { - testassert.JSONStringEquals(body, expectedJSONResponse) - }) - }) - - Describe("POST requests", func() { - BeforeEach(func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/endpoint", - Matcher: testnet.RequestBodyMatcher(`{"key":"val"}`), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: expectedJSONResponse}, - }) - - ts, handler := testnet.NewServer([]testnet.TestRequest{req}) - defer ts.Close() - - deps := newCurlDependencies() - deps.config.SetApiEndpoint(ts.URL) - - repo := NewCloudControllerCurlRepository(deps.config, deps.gateway) - headers, body, apiErr = repo.Request("POST", "/v2/endpoint", "", `{"key":"val"}`) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - It("does not return an error", func() { - Expect(apiErr).NotTo(HaveOccurred()) - }) - - Context("when the server returns a 400 Bad Request header", func() { - BeforeEach(func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/endpoint", - Matcher: testnet.RequestBodyMatcher(`{"key":"val"}`), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: expectedJSONResponse}, - }) - - ts, handler := testnet.NewServer([]testnet.TestRequest{req}) - defer ts.Close() - - deps := newCurlDependencies() - deps.config.SetApiEndpoint(ts.URL) - - repo := NewCloudControllerCurlRepository(deps.config, deps.gateway) - _, body, apiErr = repo.Request("POST", "/v2/endpoint", "", `{"key":"val"}`) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - It("returns the response body", func() { - testassert.JSONStringEquals(body, expectedJSONResponse) - }) - - It("does not return an error", func() { - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Context("when provided with invalid headers", func() { - It("returns an error", func() { - deps := newCurlDependencies() - repo := NewCloudControllerCurlRepository(deps.config, deps.gateway) - _, _, apiErr := repo.Request("POST", "/v2/endpoint", "not-valid", "") - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.Error()).To(ContainSubstring("headers")) - }) - }) - - Context("when provided with valid headers", func() { - It("sends them along with the POST body", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/endpoint", - Matcher: func(req *http.Request) { - Expect(req.Header.Get("content-type")).To(Equal("ascii/cats")) - Expect(req.Header.Get("x-something-else")).To(Equal("5")) - }, - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: expectedJSONResponse}, - }) - ts, handler := testnet.NewServer([]testnet.TestRequest{req}) - defer ts.Close() - - deps := newCurlDependencies() - deps.config.SetApiEndpoint(ts.URL) - - headers := "content-type: ascii/cats\nx-something-else:5" - repo := NewCloudControllerCurlRepository(deps.config, deps.gateway) - _, _, apiErr := repo.Request("POST", "/v2/endpoint", headers, "") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - }) -}) - -const expectedJSONResponse = ` - {"resources": [ - { - "metadata": { "guid": "my-quota-guid" }, - "entity": { "name": "my-remote-quota", "memory_limit": 1024 } - } - ]} -` - -type curlDependencies struct { - config core_config.ReadWriter - gateway net.Gateway -} - -func newCurlDependencies() (deps curlDependencies) { - deps.config = testconfig.NewRepository() - deps.config.SetAccessToken("BEARER my_access_token") - deps.gateway = net.NewCloudControllerGateway(deps.config, time.Now, &testterm.FakeUI{}) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/domains.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/domains.go deleted file mode 100644 index e94bb68..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/domains.go +++ /dev/null @@ -1,180 +0,0 @@ -package api - -import ( - "encoding/json" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/api/strategy" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type DomainRepository interface { - ListDomainsForOrg(orgGuid string, cb func(models.DomainFields) bool) error - FindSharedByName(name string) (domain models.DomainFields, apiErr error) - FindPrivateByName(name string) (domain models.DomainFields, apiErr error) - FindByNameInOrg(name string, owningOrgGuid string) (domain models.DomainFields, apiErr error) - Create(domainName string, owningOrgGuid string) (createdDomain models.DomainFields, apiErr error) - CreateSharedDomain(domainName string) (apiErr error) - Delete(domainGuid string) (apiErr error) - DeleteSharedDomain(domainGuid string) (apiErr error) - FirstOrDefault(orgGuid string, name *string) (domain models.DomainFields, error error) -} - -type CloudControllerDomainRepository struct { - config core_config.Reader - gateway net.Gateway - strategy strategy.EndpointStrategy -} - -func NewCloudControllerDomainRepository(config core_config.Reader, gateway net.Gateway, strategy strategy.EndpointStrategy) CloudControllerDomainRepository { - return CloudControllerDomainRepository{ - config: config, - gateway: gateway, - strategy: strategy, - } -} - -func (repo CloudControllerDomainRepository) ListDomainsForOrg(orgGuid string, cb func(models.DomainFields) bool) error { - err := repo.listDomains(repo.strategy.PrivateDomainsByOrgURL(orgGuid), cb) - if err != nil { - return err - } - err = repo.listDomains(repo.strategy.SharedDomainsURL(), cb) - return err -} - -func (repo CloudControllerDomainRepository) listDomains(path string, cb func(models.DomainFields) bool) (apiErr error) { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.DomainResource{}, - func(resource interface{}) bool { - return cb(resource.(resources.DomainResource).ToFields()) - }) -} - -func (repo CloudControllerDomainRepository) isOrgDomain(orgGuid string, domain models.DomainFields) bool { - return orgGuid == domain.OwningOrganizationGuid || domain.Shared -} - -func (repo CloudControllerDomainRepository) FindSharedByName(name string) (domain models.DomainFields, apiErr error) { - return repo.findOneWithPath(repo.strategy.SharedDomainURL(name), name) -} - -func (repo CloudControllerDomainRepository) FindPrivateByName(name string) (domain models.DomainFields, apiErr error) { - return repo.findOneWithPath(repo.strategy.PrivateDomainURL(name), name) -} - -func (repo CloudControllerDomainRepository) FindByNameInOrg(name string, orgGuid string) (domain models.DomainFields, apiErr error) { - domain, apiErr = repo.findOneWithPath(repo.strategy.OrgDomainURL(orgGuid, name), name) - - switch apiErr.(type) { - case *errors.ModelNotFoundError: - domain, apiErr = repo.FindSharedByName(name) - if !domain.Shared { - apiErr = errors.NewModelNotFoundError("Domain", name) - } - } - - return -} - -func (repo CloudControllerDomainRepository) findOneWithPath(path, name string) (domain models.DomainFields, apiErr error) { - foundDomain := false - apiErr = repo.listDomains(path, func(result models.DomainFields) bool { - domain = result - foundDomain = true - return false - }) - - if apiErr == nil && !foundDomain { - apiErr = errors.NewModelNotFoundError("Domain", name) - } - - return -} - -func (repo CloudControllerDomainRepository) Create(domainName string, owningOrgGuid string) (createdDomain models.DomainFields, err error) { - data, err := json.Marshal(resources.DomainEntity{ - Name: domainName, - OwningOrganizationGuid: owningOrgGuid, - Wildcard: true, - }) - - if err != nil { - return - } - - resource := new(resources.DomainResource) - err = repo.gateway.CreateResource( - repo.config.ApiEndpoint(), - repo.strategy.PrivateDomainsURL(), - strings.NewReader(string(data)), - resource) - - if err != nil { - return - } - - createdDomain = resource.ToFields() - return -} - -func (repo CloudControllerDomainRepository) CreateSharedDomain(domainName string) (apiErr error) { - data, err := json.Marshal(resources.DomainEntity{ - Name: domainName, - Wildcard: true, - }) - - if err != nil { - return - } - - apiErr = repo.gateway.CreateResource( - repo.config.ApiEndpoint(), - repo.strategy.SharedDomainsURL(), - strings.NewReader(string(data))) - - return -} - -func (repo CloudControllerDomainRepository) Delete(domainGuid string) error { - return repo.gateway.DeleteResource( - repo.config.ApiEndpoint(), - repo.strategy.DeleteDomainURL(domainGuid)) -} - -func (repo CloudControllerDomainRepository) DeleteSharedDomain(domainGuid string) error { - return repo.gateway.DeleteResource( - repo.config.ApiEndpoint(), - repo.strategy.DeleteSharedDomainURL(domainGuid)) -} - -func (repo CloudControllerDomainRepository) FirstOrDefault(orgGuid string, name *string) (domain models.DomainFields, error error) { - if name == nil { - domain, error = repo.defaultDomain(orgGuid) - } else { - domain, error = repo.FindByNameInOrg(*name, orgGuid) - } - return -} - -func (repo CloudControllerDomainRepository) defaultDomain(orgGuid string) (models.DomainFields, error) { - var foundDomain *models.DomainFields - repo.ListDomainsForOrg(orgGuid, func(domain models.DomainFields) bool { - foundDomain = &domain - return !domain.Shared - }) - - if foundDomain == nil { - return models.DomainFields{}, errors.New(T("Could not find a default domain")) - } - - return *foundDomain, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/domains_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/domains_test.go deleted file mode 100644 index a7ff052..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/domains_test.go +++ /dev/null @@ -1,602 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/api/strategy" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("DomainRepository", func() { - var ( - ts *httptest.Server - handler *testnet.TestHandler - repo DomainRepository - config core_config.ReadWriter - ) - - BeforeEach(func() { - config = testconfig.NewRepositoryWithDefaults() - }) - - JustBeforeEach(func() { - gateway := net.NewCloudControllerGateway((config), time.Now, &testterm.FakeUI{}) - strategy := strategy.NewEndpointStrategy(config.ApiVersion()) - repo = NewCloudControllerDomainRepository(config, gateway, strategy) - }) - - AfterEach(func() { - ts.Close() - }) - - var setupTestServer = func(reqs ...testnet.TestRequest) { - ts, handler = testnet.NewServer(reqs) - config.SetApiEndpoint(ts.URL) - } - - Describe("listing domains", func() { - BeforeEach(func() { - config.SetApiVersion("2.2.0") - setupTestServer(firstPagePrivateDomainsRequest, secondPagePrivateDomainsRequest, firstPageSharedDomainsRequest, secondPageSharedDomainsRequest) - }) - - It("uses the organization-scoped domains endpoints", func() { - receivedDomains := []models.DomainFields{} - apiErr := repo.ListDomainsForOrg("my-org-guid", func(d models.DomainFields) bool { - receivedDomains = append(receivedDomains, d) - return true - }) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(len(receivedDomains)).To(Equal(6)) - Expect(receivedDomains[0].Guid).To(Equal("domain1-guid")) - Expect(receivedDomains[1].Guid).To(Equal("domain2-guid")) - Expect(receivedDomains[2].Guid).To(Equal("domain3-guid")) - Expect(receivedDomains[2].Shared).To(BeFalse()) - Expect(receivedDomains[3].Guid).To(Equal("shared-domain1-guid")) - Expect(receivedDomains[4].Guid).To(Equal("shared-domain2-guid")) - Expect(receivedDomains[5].Guid).To(Equal("shared-domain3-guid")) - Expect(handler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("getting default domain", func() { - BeforeEach(func() { - config.SetApiVersion("2.2.0") - setupTestServer(firstPagePrivateDomainsRequest, secondPagePrivateDomainsRequest, firstPageSharedDomainsRequest, secondPageSharedDomainsRequest) - }) - - It("should always return back the first shared domain", func() { - domain, apiErr := repo.FirstOrDefault("my-org-guid", nil) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(domain.Guid).To(Equal("shared-domain1-guid")) - }) - }) - - It("finds a shared domain by name", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { "guid": "domain2-guid" }, - "entity": { "name": "domain2.cf-app.com" } - } - ] - }`}, - })) - - domain, apiErr := repo.FindSharedByName("domain2.cf-app.com") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(domain.Name).To(Equal("domain2.cf-app.com")) - Expect(domain.Guid).To(Equal("domain2-guid")) - Expect(domain.Shared).To(BeTrue()) - }) - - It("finds a private domain by name", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { "guid": "domain2-guid" }, - "entity": { "name": "domain2.cf-app.com", "owning_organization_guid": "some-guid" } - } - ] - }`}, - })) - - domain, apiErr := repo.FindPrivateByName("domain2.cf-app.com") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(domain.Name).To(Equal("domain2.cf-app.com")) - Expect(domain.Guid).To(Equal("domain2-guid")) - Expect(domain.Shared).To(BeFalse()) - }) - - Describe("finding a domain by name in an org", func() { - It("looks in the org's domains first", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { "guid": "my-domain-guid" }, - "entity": { - "name": "my-example.com", - "owning_organization_guid": "my-org-guid" - } - } - ] - }`}, - })) - - domain, apiErr := repo.FindByNameInOrg("domain2.cf-app.com", "my-org-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(domain.Name).To(Equal("my-example.com")) - Expect(domain.Guid).To(Equal("my-domain-guid")) - Expect(domain.Shared).To(BeFalse()) - }) - - It("looks for shared domains if no there are no org-specific domains", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - }), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { "guid": "shared-domain-guid" }, - "entity": { - "name": "shared-example.com", - "owning_organization_guid": null - } - } - ] - }`}, - })) - - domain, apiErr := repo.FindByNameInOrg("domain2.cf-app.com", "my-org-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(domain.Name).To(Equal("shared-example.com")) - Expect(domain.Guid).To(Equal("shared-domain-guid")) - Expect(domain.Shared).To(BeTrue()) - }) - - It("returns not found when neither endpoint returns a domain", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - }), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - })) - - _, apiErr := repo.FindByNameInOrg("domain2.cf-app.com", "my-org-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - - It("returns not found when the global endpoint returns a non-shared domain", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - }), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/domains?inline-relations-depth=1&q=name%3Adomain2.cf-app.com", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { "guid": "shared-domain-guid" }, - "entity": { - "name": "shared-example.com", - "owning_organization_guid": "some-other-org-guid" - } - } - ] - }`}})) - - _, apiErr := repo.FindByNameInOrg("domain2.cf-app.com", "my-org-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - }) - - Describe("creating domains", func() { - Context("when the private domains endpoint is not available", func() { - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/domains", - Matcher: testnet.RequestBodyMatcher(`{"name":"example.com","owning_organization_guid":"org-guid", "wildcard": true}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { "guid": "abc-123" }, - "entity": { "name": "example.com" } - }`}, - }), - ) - }) - - It("uses the general domains endpoint", func() { - createdDomain, apiErr := repo.Create("example.com", "org-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(createdDomain.Guid).To(Equal("abc-123")) - }) - }) - - Context("when the private domains endpoint is available", func() { - BeforeEach(func() { - config.SetApiVersion("2.2.1") - }) - - It("uses that endpoint", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/private_domains", - Matcher: testnet.RequestBodyMatcher(`{"name":"example.com","owning_organization_guid":"org-guid", "wildcard": true}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { "guid": "abc-123" }, - "entity": { "name": "example.com" } - }`}, - })) - - createdDomain, apiErr := repo.Create("example.com", "org-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(createdDomain.Guid).To(Equal("abc-123")) - }) - }) - }) - - Describe("creating shared domains", func() { - Context("targeting a newer cloud controller", func() { - BeforeEach(func() { - config.SetApiVersion("2.2.0") - }) - - It("uses the shared domains endpoint", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/shared_domains", - Matcher: testnet.RequestBodyMatcher(`{"name":"example.com", "wildcard": true}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { "guid": "abc-123" }, - "entity": { "name": "example.com" } - }`}}), - ) - - apiErr := repo.CreateSharedDomain("example.com") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Context("when targeting an older cloud controller", func() { - It("uses the general domains endpoint", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/domains", - Matcher: testnet.RequestBodyMatcher(`{"name":"example.com", "wildcard": true}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { "guid": "abc-123" }, - "entity": { "name": "example.com" } - }`}, - }), - ) - - apiErr := repo.CreateSharedDomain("example.com") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("deleting domains", func() { - Context("when the private domains endpoint is available", func() { - BeforeEach(func() { - config.SetApiVersion("2.2.0") - setupTestServer(deleteDomainReq(http.StatusOK)) - }) - - It("uses the private domains endpoint", func() { - apiErr := repo.Delete("my-domain-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Context("when the private domains endpoint is NOT available", func() { - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/domains/my-domain-guid?recursive=true", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - }) - - It("uses the general domains endpoint", func() { - apiErr := repo.Delete("my-domain-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("deleting shared domains", func() { - Context("when the shared domains endpoint is available", func() { - BeforeEach(func() { - config.SetApiVersion("2.2.0") - setupTestServer(deleteSharedDomainReq(http.StatusOK)) - }) - - It("uses the shared domains endpoint", func() { - apiErr := repo.DeleteSharedDomain("my-domain-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("returns an error when the delete fails", func() { - setupTestServer(deleteSharedDomainReq(http.StatusBadRequest)) - - apiErr := repo.DeleteSharedDomain("my-domain-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(BeNil()) - }) - }) - - Context("when the shared domains endpoint is not available", func() { - It("uses the old domains endpoint", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/domains/my-domain-guid?recursive=true", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - apiErr := repo.DeleteSharedDomain("my-domain-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - }) - -}) - -var oldEndpointDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/domains", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ - "resources": [ - { - "metadata": { - "guid": "domain-guid" - }, - "entity": { - "name": "example.com", - "owning_organization_guid": "my-org-guid" - } - } - ] -}`}}) - -var firstPageDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/private_domains", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/organizations/my-org-guid/domains?page=2", - "resources": [ - { - "metadata": { - "guid": "domain1-guid", - }, - "entity": { - "name": "example.com", - "owning_organization_guid": "my-org-guid" - } - }, - { - "metadata": { - "guid": "domain2-guid" - }, - "entity": { - "name": "some-example.com", - "owning_organization_guid": "my-org-guid" - } - } - ] -}`}, -}) - -var secondPageDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/domains?page=2", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "domain3-guid" - }, - "entity": { - "name": "example.com", - "owning_organization_guid": "my-org-guid" - } - } - ] -}`}, -}) - -var firstPageSharedDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/shared_domains", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/shared_domains?page=2", - "resources": [ - { - "metadata": { - "guid": "shared-domain1-guid" - }, - "entity": { - "name": "sharedexample.com" - } - }, - { - "metadata": { - "guid": "shared-domain2-guid" - }, - "entity": { - "name": "some-other-shared-example.com" - } - } - ] -}`}, -}) - -var secondPageSharedDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/shared_domains?page=2", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "shared-domain3-guid" - }, - "entity": { - "name": "yet-another-shared-example.com" - } - } - ] -}`}, -}) - -var firstPagePrivateDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/private_domains", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/organizations/my-org-guid/private_domains?page=2", - "resources": [ - { - "metadata": { - "guid": "domain1-guid" - }, - "entity": { - "name": "example.com", - "owning_organization_guid": "my-org-guid" - } - }, - { - "metadata": { - "guid": "domain2-guid" - }, - "entity": { - "name": "some-example.com", - "owning_organization_guid": "my-org-guid" - } - } - ] -}`}, -}) - -var secondPagePrivateDomainsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/private_domains?page=2", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "domain3-guid" - }, - "entity": { - "name": "example.com", - "owning_organization_guid": null, - "shared_organizations_url": "/v2/private_domains/domain3-guid/shared_organizations" - } - } - ] -}`}, -}) - -func deleteDomainReq(statusCode int) testnet.TestRequest { - return testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/private_domains/my-domain-guid?recursive=true", - Response: testnet.TestResponse{Status: statusCode}, - }) -} - -func deleteSharedDomainReq(statusCode int) testnet.TestRequest { - return testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/shared_domains/my-domain-guid?recursive=true", - Response: testnet.TestResponse{Status: statusCode}, - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/endpoints.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/endpoints.go deleted file mode 100644 index 675079e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/endpoints.go +++ /dev/null @@ -1,108 +0,0 @@ -package api - -import ( - "fmt" - "regexp" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/net" -) - -type EndpointRepository interface { - UpdateEndpoint(endpoint string) (finalEndpoint string, apiErr error) -} - -type RemoteEndpointRepository struct { - config core_config.ReadWriter - gateway net.Gateway -} - -type endpointResource struct { - ApiVersion string `json:"api_version"` - AuthorizationEndpoint string `json:"authorization_endpoint"` - LoggregatorEndpoint string `json:"logging_endpoint"` - MinCliVersion string `json:"min_cli_version"` - MinRecommendedCliVersion string `json:"min_recommended_cli_version"` -} - -func NewEndpointRepository(config core_config.ReadWriter, gateway net.Gateway) EndpointRepository { - r := &RemoteEndpointRepository{ - config: config, - gateway: gateway, - } - return r -} - -func (repo RemoteEndpointRepository) UpdateEndpoint(endpoint string) (finalEndpoint string, apiErr error) { - defer func() { - if apiErr != nil { - repo.config.SetApiEndpoint("") - } - }() - - endpointMissingScheme := !strings.HasPrefix(endpoint, "https://") && !strings.HasPrefix(endpoint, "http://") - - if endpointMissingScheme { - finalEndpoint := "https://" + endpoint - apiErr := repo.attemptUpdate(finalEndpoint) - - switch apiErr.(type) { - case nil: - case *errors.InvalidSSLCert: - return endpoint, apiErr - default: - finalEndpoint = "http://" + endpoint - apiErr = repo.attemptUpdate(finalEndpoint) - } - - return finalEndpoint, apiErr - } else { - apiErr := repo.attemptUpdate(endpoint) - return endpoint, apiErr - } -} - -func (repo RemoteEndpointRepository) attemptUpdate(endpoint string) error { - serverResponse := new(endpointResource) - err := repo.gateway.GetResource(endpoint+"/v2/info", &serverResponse) - if err != nil { - return err - } - - if endpoint != repo.config.ApiEndpoint() { - repo.config.ClearSession() - } - - repo.config.SetApiEndpoint(endpoint) - repo.config.SetApiVersion(serverResponse.ApiVersion) - repo.config.SetAuthenticationEndpoint(serverResponse.AuthorizationEndpoint) - repo.config.SetMinCliVersion(serverResponse.MinCliVersion) - repo.config.SetMinRecommendedCliVersion(serverResponse.MinRecommendedCliVersion) - - if serverResponse.LoggregatorEndpoint == "" { - repo.config.SetLoggregatorEndpoint(defaultLoggregatorEndpoint(endpoint)) - } else { - repo.config.SetLoggregatorEndpoint(serverResponse.LoggregatorEndpoint) - } - - //* 3/5/15: loggregator endpoint will be renamed to doppler eventually, - // we just have to use the loggregator endpoint as doppler for now - repo.config.SetDopplerEndpoint(strings.Replace(repo.config.LoggregatorEndpoint(), "loggregator", "doppler", 1)) - - return nil -} - -// FIXME: needs semantic versioning -func defaultLoggregatorEndpoint(apiEndpoint string) string { - matches := endpointDomainRegex.FindStringSubmatch(apiEndpoint) - url := fmt.Sprintf("ws%s://loggregator.%s", matches[1], matches[2]) - if url[0:3] == "wss" { - return url + ":443" - } else { - return url + ":80" - } -} - -var endpointDomainRegex = regexp.MustCompile(`^http(s?)://[^\.]+\.([^:]+)`) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/endpoints_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/endpoints_test.go deleted file mode 100644 index 332498f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/endpoints_test.go +++ /dev/null @@ -1,237 +0,0 @@ -package api_test - -import ( - "crypto/tls" - "fmt" - "net/http" - "net/http/httptest" - "strings" - "time" - - . "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func validApiInfoEndpoint(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/v2/info" { - w.WriteHeader(http.StatusNotFound) - return - } - - fmt.Fprintf(w, ` -{ - "name": "vcap", - "build": "2222", - "support": "http://support.cloudfoundry.com", - "version": 2, - "description": "Cloud Foundry sponsored by Pivotal", - "authorization_endpoint": "https://login.example.com", - "logging_endpoint": "wss://loggregator.foo.example.org:4443", - "api_version": "42.0.0", - "min_cli_version": "6.5.0", - "min_recommended_cli_version": "6.7.0" -}`) -} - -func apiInfoEndpointWithoutLogURL(w http.ResponseWriter, r *http.Request) { - if !strings.HasSuffix(r.URL.Path, "/v2/info") { - w.WriteHeader(http.StatusNotFound) - return - } - - fmt.Fprintln(w, ` -{ - "name": "vcap", - "build": "2222", - "support": "http://support.cloudfoundry.com", - "version": 2, - "description": "Cloud Foundry sponsored by Pivotal", - "authorization_endpoint": "https://login.example.com", - "api_version": "42.0.0" -}`) -} - -var _ = Describe("Endpoints Repository", func() { - var ( - config core_config.ReadWriter - gateway net.Gateway - testServer *httptest.Server - repo EndpointRepository - testServerFn func(w http.ResponseWriter, r *http.Request) - ) - - BeforeEach(func() { - config = testconfig.NewRepository() - testServer = httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - testServerFn(w, r) - })) - gateway = net.NewCloudControllerGateway((config), time.Now, &testterm.FakeUI{}) - gateway.SetTrustedCerts(testServer.TLS.Certificates) - repo = NewEndpointRepository(config, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe("updating the endpoints", func() { - Context("when the API request is successful", func() { - var ( - org models.OrganizationFields - space models.SpaceFields - ) - BeforeEach(func() { - org.Name = "my-org" - org.Guid = "my-org-guid" - - space.Name = "my-space" - space.Guid = "my-space-guid" - - config.SetOrganizationFields(org) - config.SetSpaceFields(space) - testServerFn = validApiInfoEndpoint - }) - - It("stores the data from the /info api in the config", func() { - repo.UpdateEndpoint(testServer.URL) - - Expect(config.AccessToken()).To(Equal("")) - Expect(config.AuthenticationEndpoint()).To(Equal("https://login.example.com")) - Expect(config.LoggregatorEndpoint()).To(Equal("wss://loggregator.foo.example.org:4443")) - Expect(config.DopplerEndpoint()).To(Equal("wss://doppler.foo.example.org:4443")) - Expect(config.ApiEndpoint()).To(Equal(testServer.URL)) - Expect(config.ApiVersion()).To(Equal("42.0.0")) - Expect(config.HasOrganization()).To(BeFalse()) - Expect(config.HasSpace()).To(BeFalse()) - Expect(config.MinCliVersion()).To(Equal("6.5.0")) - Expect(config.MinRecommendedCliVersion()).To(Equal("6.7.0")) - }) - - Context("when the api endpoint does not change", func() { - BeforeEach(func() { - config.SetApiEndpoint(testServer.URL) - config.SetAccessToken("some access token") - config.SetRefreshToken("some refresh token") - }) - - It("does not clear the session if the api endpoint does not change", func() { - repo.UpdateEndpoint(testServer.URL) - - Expect(config.OrganizationFields()).To(Equal(org)) - Expect(config.SpaceFields()).To(Equal(space)) - Expect(config.AccessToken()).To(Equal("some access token")) - Expect(config.RefreshToken()).To(Equal("some refresh token")) - }) - }) - }) - - Context("when the API request fails", func() { - ItClearsTheConfig := func() { - Expect(config.ApiEndpoint()).To(BeEmpty()) - } - - BeforeEach(func() { - config.SetApiEndpoint("example.com") - }) - - It("returns a failure response when the server has a bad certificate", func() { - testServer.TLS.Certificates = []tls.Certificate{testnet.MakeExpiredTLSCert()} - - _, apiErr := repo.UpdateEndpoint(testServer.URL) - Expect(apiErr).NotTo(BeNil()) - ItClearsTheConfig() - }) - - It("returns a failure response when the API request fails", func() { - testServerFn = func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotFound) - } - - _, apiErr := repo.UpdateEndpoint(testServer.URL) - - Expect(apiErr).NotTo(BeNil()) - ItClearsTheConfig() - }) - - It("returns a failure response when the API returns invalid JSON", func() { - testServerFn = func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `Foo`) - } - - _, apiErr := repo.UpdateEndpoint(testServer.URL) - - Expect(apiErr).NotTo(BeNil()) - ItClearsTheConfig() - }) - }) - - Describe("when the specified API url doesn't have a scheme", func() { - It("uses https if possible", func() { - testServerFn = validApiInfoEndpoint - - schemelessURL := strings.Replace(testServer.URL, "https://", "", 1) - endpoint, apiErr := repo.UpdateEndpoint(schemelessURL) - Expect(endpoint).To(Equal("https://" + schemelessURL)) - - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(config.AccessToken()).To(Equal("")) - Expect(config.AuthenticationEndpoint()).To(Equal("https://login.example.com")) - Expect(config.ApiEndpoint()).To(Equal(testServer.URL)) - Expect(config.ApiVersion()).To(Equal("42.0.0")) - }) - - It("uses http when the server doesn't respond over https", func() { - testServer.Close() - testServer = httptest.NewServer(http.HandlerFunc(validApiInfoEndpoint)) - schemelessURL := strings.Replace(testServer.URL, "http://", "", 1) - - endpoint, apiErr := repo.UpdateEndpoint(schemelessURL) - - Expect(endpoint).To(Equal("http://" + schemelessURL)) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(config.AccessToken()).To(Equal("")) - Expect(config.AuthenticationEndpoint()).To(Equal("https://login.example.com")) - Expect(config.ApiEndpoint()).To(Equal(testServer.URL)) - Expect(config.ApiVersion()).To(Equal("42.0.0")) - }) - }) - - Describe("when the loggregator endpoint is not returned by the /info API (old CC)", func() { - BeforeEach(func() { - testServerFn = apiInfoEndpointWithoutLogURL - }) - - It("extrapolates the loggregator URL based on the API URL (SSL API)", func() { - _, err := repo.UpdateEndpoint(testServer.URL) - Expect(err).NotTo(HaveOccurred()) - Expect(config.LoggregatorEndpoint()).To(Equal("wss://loggregator.0.0.1:443")) - }) - - It("extrapolates the loggregator URL if there is a trailing slash", func() { - _, err := repo.UpdateEndpoint(testServer.URL + "/") - Expect(err).NotTo(HaveOccurred()) - Expect(config.LoggregatorEndpoint()).To(Equal("wss://loggregator.0.0.1:443")) - }) - - It("extrapolates the loggregator URL based on the API URL (non-SSL API)", func() { - testServer.Close() - testServer = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - testServerFn(w, r) - })) - - _, err := repo.UpdateEndpoint(testServer.URL) - Expect(err).NotTo(HaveOccurred()) - Expect(config.LoggregatorEndpoint()).To(Equal("ws://loggregator.0.0.1:80")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups.go deleted file mode 100644 index 53bb174..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups.go +++ /dev/null @@ -1,94 +0,0 @@ -package environment_variable_groups - -import ( - "errors" - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type EnvironmentVariableGroupsRepository interface { - ListRunning() (variables []models.EnvironmentVariable, apiErr error) - ListStaging() (variables []models.EnvironmentVariable, apiErr error) - SetStaging(string) error - SetRunning(string) error -} - -type CloudControllerEnvironmentVariableGroupsRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerEnvironmentVariableGroupsRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerEnvironmentVariableGroupsRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerEnvironmentVariableGroupsRepository) ListRunning() (variables []models.EnvironmentVariable, apiErr error) { - var raw_response interface{} - url := fmt.Sprintf("%s/v2/config/environment_variable_groups/running", repo.config.ApiEndpoint()) - apiErr = repo.gateway.GetResource(url, &raw_response) - if apiErr != nil { - return - } - - variables, err := repo.marshalToEnvironmentVariables(raw_response) - if err != nil { - return nil, err - } - - return variables, nil -} - -func (repo CloudControllerEnvironmentVariableGroupsRepository) ListStaging() (variables []models.EnvironmentVariable, apiErr error) { - var raw_response interface{} - url := fmt.Sprintf("%s/v2/config/environment_variable_groups/staging", repo.config.ApiEndpoint()) - apiErr = repo.gateway.GetResource(url, &raw_response) - if apiErr != nil { - return - } - - variables, err := repo.marshalToEnvironmentVariables(raw_response) - if err != nil { - return nil, err - } - - return variables, nil -} - -func (repo CloudControllerEnvironmentVariableGroupsRepository) SetStaging(staging_vars string) error { - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), "/v2/config/environment_variable_groups/staging", strings.NewReader(staging_vars)) -} - -func (repo CloudControllerEnvironmentVariableGroupsRepository) SetRunning(running_vars string) error { - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), "/v2/config/environment_variable_groups/running", strings.NewReader(running_vars)) -} - -func (repo CloudControllerEnvironmentVariableGroupsRepository) marshalToEnvironmentVariables(raw_response interface{}) ([]models.EnvironmentVariable, error) { - var variables []models.EnvironmentVariable - for key, value := range raw_response.(map[string]interface{}) { - stringvalue, err := repo.convertValueToString(value) - if err != nil { - return nil, err - } - variable := models.EnvironmentVariable{Name: key, Value: stringvalue} - variables = append(variables, variable) - } - return variables, nil -} - -func (repo CloudControllerEnvironmentVariableGroupsRepository) convertValueToString(value interface{}) (string, error) { - stringvalue, ok := value.(string) - if !ok { - floatvalue, ok := value.(float64) - if !ok { - return "", errors.New(fmt.Sprintf("Attempted to read environment variable value of unknown type: %#v", value)) - } - stringvalue = fmt.Sprintf("%d", int(floatvalue)) - } - return stringvalue, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups_suite_test.go deleted file mode 100644 index fcbba17..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package environment_variable_groups_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestEnvironmentVariableGroups(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "EnvironmentVariableGroups Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups_test.go deleted file mode 100644 index 15c0186..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/environment_variable_groups_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package environment_variable_groups_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CloudControllerEnvironmentVariableGroupsRepository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerEnvironmentVariableGroupsRepository - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerEnvironmentVariableGroupsRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe("ListRunning", func() { - BeforeEach(func() { - setupTestServer(listRunningRequest) - }) - - It("lists the environment variables in the running group", func() { - envVars, err := repo.ListRunning() - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - - Expect(envVars).To(ConsistOf([]models.EnvironmentVariable{ - models.EnvironmentVariable{Name: "abc", Value: "123"}, - models.EnvironmentVariable{Name: "do-re-mi", Value: "fa-sol-la-ti"}, - })) - }) - }) - - Describe("ListStaging", func() { - BeforeEach(func() { - setupTestServer(listStagingRequest) - }) - - It("lists the environment variables in the staging group", func() { - envVars, err := repo.ListStaging() - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(envVars).To(ConsistOf([]models.EnvironmentVariable{ - models.EnvironmentVariable{Name: "abc", Value: "123"}, - models.EnvironmentVariable{Name: "do-re-mi", Value: "fa-sol-la-ti"}, - })) - }) - }) - - Describe("SetStaging", func() { - BeforeEach(func() { - setupTestServer(setStagingRequest) - }) - - It("sets the environment variables in the staging group", func() { - err := repo.SetStaging(`{"abc": "one-two-three", "def": 456}`) - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("SetRunning", func() { - BeforeEach(func() { - setupTestServer(setRunningRequest) - }) - - It("sets the environment variables in the running group", func() { - err := repo.SetRunning(`{"abc": "one-two-three", "def": 456}`) - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) -}) - -var listRunningRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/environment_variable_groups/running", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "abc": 123, - "do-re-mi": "fa-sol-la-ti" -}`, - }, -}) - -var listStagingRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/environment_variable_groups/staging", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "abc": 123, - "do-re-mi": "fa-sol-la-ti" -}`, - }, -}) - -var setStagingRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/config/environment_variable_groups/staging", - Matcher: testnet.RequestBodyMatcher(`{ - "abc": "one-two-three", - "def": 456 - }`), -}) - -var setRunningRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/config/environment_variable_groups/running", - Matcher: testnet.RequestBodyMatcher(`{ - "abc": "one-two-three", - "def": 456 - }`), -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes/fake_environment_variable_groups_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes/fake_environment_variable_groups_repository.go deleted file mode 100644 index d75c91e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes/fake_environment_variable_groups_repository.go +++ /dev/null @@ -1,154 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - "github.com/cloudfoundry/cli/cf/models" - - "sync" -) - -type FakeEnvironmentVariableGroupsRepository struct { - ListRunningStub func() (variables []models.EnvironmentVariable, apiErr error) - listRunningMutex sync.RWMutex - listRunningArgsForCall []struct{} - listRunningReturns struct { - result1 []models.EnvironmentVariable - result2 error - } - ListStagingStub func() (variables []models.EnvironmentVariable, apiErr error) - listStagingMutex sync.RWMutex - listStagingArgsForCall []struct{} - listStagingReturns struct { - result1 []models.EnvironmentVariable - result2 error - } - SetStagingStub func(string) error - setStagingMutex sync.RWMutex - setStagingArgsForCall []struct { - arg1 string - } - setStagingReturns struct { - result1 error - } - SetRunningStub func(string) error - setRunningMutex sync.RWMutex - setRunningArgsForCall []struct { - arg1 string - } - setRunningReturns struct { - result1 error - } -} - -func (fake *FakeEnvironmentVariableGroupsRepository) ListRunning() (variables []models.EnvironmentVariable, apiErr error) { - fake.listRunningMutex.Lock() - defer fake.listRunningMutex.Unlock() - fake.listRunningArgsForCall = append(fake.listRunningArgsForCall, struct{}{}) - if fake.ListRunningStub != nil { - return fake.ListRunningStub() - } else { - return fake.listRunningReturns.result1, fake.listRunningReturns.result2 - } -} - -func (fake *FakeEnvironmentVariableGroupsRepository) ListRunningCallCount() int { - fake.listRunningMutex.RLock() - defer fake.listRunningMutex.RUnlock() - return len(fake.listRunningArgsForCall) -} - -func (fake *FakeEnvironmentVariableGroupsRepository) ListRunningReturns(result1 []models.EnvironmentVariable, result2 error) { - fake.listRunningReturns = struct { - result1 []models.EnvironmentVariable - result2 error - }{result1, result2} -} - -func (fake *FakeEnvironmentVariableGroupsRepository) ListStaging() (variables []models.EnvironmentVariable, apiErr error) { - fake.listStagingMutex.Lock() - defer fake.listStagingMutex.Unlock() - fake.listStagingArgsForCall = append(fake.listStagingArgsForCall, struct{}{}) - if fake.ListStagingStub != nil { - return fake.ListStagingStub() - } else { - return fake.listStagingReturns.result1, fake.listStagingReturns.result2 - } -} - -func (fake *FakeEnvironmentVariableGroupsRepository) ListStagingCallCount() int { - fake.listStagingMutex.RLock() - defer fake.listStagingMutex.RUnlock() - return len(fake.listStagingArgsForCall) -} - -func (fake *FakeEnvironmentVariableGroupsRepository) ListStagingReturns(result1 []models.EnvironmentVariable, result2 error) { - fake.listStagingReturns = struct { - result1 []models.EnvironmentVariable - result2 error - }{result1, result2} -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetStaging(arg1 string) error { - fake.setStagingMutex.Lock() - defer fake.setStagingMutex.Unlock() - fake.setStagingArgsForCall = append(fake.setStagingArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetStagingStub != nil { - return fake.SetStagingStub(arg1) - } else { - return fake.setStagingReturns.result1 - } -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetStagingCallCount() int { - fake.setStagingMutex.RLock() - defer fake.setStagingMutex.RUnlock() - return len(fake.setStagingArgsForCall) -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetStagingArgsForCall(i int) string { - fake.setStagingMutex.RLock() - defer fake.setStagingMutex.RUnlock() - return fake.setStagingArgsForCall[i].arg1 -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetStagingReturns(result1 error) { - fake.setStagingReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetRunning(arg1 string) error { - fake.setRunningMutex.Lock() - defer fake.setRunningMutex.Unlock() - fake.setRunningArgsForCall = append(fake.setRunningArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetRunningStub != nil { - return fake.SetRunningStub(arg1) - } else { - return fake.setRunningReturns.result1 - } -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetRunningCallCount() int { - fake.setRunningMutex.RLock() - defer fake.setRunningMutex.RUnlock() - return len(fake.setRunningArgsForCall) -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetRunningArgsForCall(i int) string { - fake.setRunningMutex.RLock() - defer fake.setRunningMutex.RUnlock() - return fake.setRunningArgsForCall[i].arg1 -} - -func (fake *FakeEnvironmentVariableGroupsRepository) SetRunningReturns(result1 error) { - fake.setRunningReturns = struct { - result1 error - }{result1} -} - -var _ EnvironmentVariableGroupsRepository = new(FakeEnvironmentVariableGroupsRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_app_summary_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_app_summary_repo.go deleted file mode 100644 index 57c85c3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_app_summary_repo.go +++ /dev/null @@ -1,30 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeAppSummaryRepo struct { - GetSummariesInCurrentSpaceApps []models.Application - - GetSummaryErrorCode string - GetSummaryAppGuid string - GetSummarySummary models.Application -} - -func (repo *FakeAppSummaryRepo) GetSummariesInCurrentSpace() (apps []models.Application, apiErr error) { - apps = repo.GetSummariesInCurrentSpaceApps - return -} - -func (repo *FakeAppSummaryRepo) GetSummary(appGuid string) (summary models.Application, apiErr error) { - repo.GetSummaryAppGuid = appGuid - summary = repo.GetSummarySummary - - if repo.GetSummaryErrorCode != "" { - apiErr = errors.NewHttpError(400, repo.GetSummaryErrorCode, "Error") - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_auth_token_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_auth_token_repo.go deleted file mode 100644 index 5b5c7ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_auth_token_repo.go +++ /dev/null @@ -1,46 +0,0 @@ -package fakes - -import "github.com/cloudfoundry/cli/cf/models" - -type FakeAuthTokenRepo struct { - CreatedServiceAuthTokenFields models.ServiceAuthTokenFields - - FindAllAuthTokens []models.ServiceAuthTokenFields - - FindByLabelAndProviderLabel string - FindByLabelAndProviderProvider string - FindByLabelAndProviderServiceAuthTokenFields models.ServiceAuthTokenFields - FindByLabelAndProviderApiResponse error - - UpdatedServiceAuthTokenFields models.ServiceAuthTokenFields - - DeletedServiceAuthTokenFields models.ServiceAuthTokenFields -} - -func (repo *FakeAuthTokenRepo) Create(authToken models.ServiceAuthTokenFields) (apiErr error) { - repo.CreatedServiceAuthTokenFields = authToken - return -} - -func (repo *FakeAuthTokenRepo) FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error) { - authTokens = repo.FindAllAuthTokens - return -} -func (repo *FakeAuthTokenRepo) FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error) { - repo.FindByLabelAndProviderLabel = label - repo.FindByLabelAndProviderProvider = provider - - authToken = repo.FindByLabelAndProviderServiceAuthTokenFields - apiErr = repo.FindByLabelAndProviderApiResponse - return -} - -func (repo *FakeAuthTokenRepo) Delete(authToken models.ServiceAuthTokenFields) (apiErr error) { - repo.DeletedServiceAuthTokenFields = authToken - return -} - -func (repo *FakeAuthTokenRepo) Update(authToken models.ServiceAuthTokenFields) (apiErr error) { - repo.UpdatedServiceAuthTokenFields = authToken - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_authenticator.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_authenticator.go deleted file mode 100644 index d8f792c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_authenticator.go +++ /dev/null @@ -1,65 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" -) - -type FakeAuthenticationRepository struct { - Config core_config.ReadWriter - AuthenticateArgs struct { - Credentials []map[string]string - } - GetLoginPromptsWasCalled bool - GetLoginPromptsReturns struct { - Error error - Prompts map[string]core_config.AuthPrompt - } - - AuthError bool - AccessToken string - RefreshToken string - RefreshTokenCalled bool - RefreshTokenError error -} - -func (auth *FakeAuthenticationRepository) Authenticate(credentials map[string]string) (apiErr error) { - auth.AuthenticateArgs.Credentials = append(auth.AuthenticateArgs.Credentials, copyMap(credentials)) - - if auth.AuthError { - apiErr = errors.New("Error authenticating.") - return - } - - if auth.AccessToken == "" { - auth.AccessToken = "BEARER some_access_token" - } - - auth.Config.SetAccessToken(auth.AccessToken) - auth.Config.SetRefreshToken(auth.RefreshToken) - - return -} - -func (auth *FakeAuthenticationRepository) RefreshAuthToken() (string, error) { - auth.RefreshTokenCalled = true - if auth.RefreshTokenError == nil { - return auth.RefreshToken, nil - } - return "", auth.RefreshTokenError -} - -func (auth *FakeAuthenticationRepository) GetLoginPromptsAndSaveUAAServerURL() (prompts map[string]core_config.AuthPrompt, apiErr error) { - auth.GetLoginPromptsWasCalled = true - prompts = auth.GetLoginPromptsReturns.Prompts - apiErr = auth.GetLoginPromptsReturns.Error - return -} - -func copyMap(input map[string]string) map[string]string { - output := map[string]string{} - for key, val := range input { - output[key] = val - } - return output -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_buildpack_bits_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_buildpack_bits_repo.go deleted file mode 100644 index 58c83ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_buildpack_bits_repo.go +++ /dev/null @@ -1,21 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeBuildpackBitsRepository struct { - UploadBuildpackErr bool - UploadBuildpackApiResponse error - UploadBuildpackPath string -} - -func (repo *FakeBuildpackBitsRepository) UploadBuildpack(buildpack models.Buildpack, dir string) error { - if repo.UploadBuildpackErr { - return errors.New("Invalid buildpack") - } - - repo.UploadBuildpackPath = dir - return repo.UploadBuildpackApiResponse -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_buildpack_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_buildpack_repo.go deleted file mode 100644 index cb04c76..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_buildpack_repo.go +++ /dev/null @@ -1,69 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeBuildpackRepository struct { - Buildpacks []models.Buildpack - - FindByNameNotFound bool - FindByNameName string - FindByNameBuildpack models.Buildpack - FindByNameApiResponse error - - CreateBuildpackExists bool - CreateBuildpack models.Buildpack - CreateApiResponse error - - DeleteBuildpackGuid string - DeleteApiResponse error - - UpdateBuildpackArgs struct { - Buildpack models.Buildpack - } - - UpdateBuildpackReturns struct { - Error error - } -} - -func (repo *FakeBuildpackRepository) ListBuildpacks(cb func(models.Buildpack) bool) error { - for _, b := range repo.Buildpacks { - cb(b) - } - return nil -} - -func (repo *FakeBuildpackRepository) FindByName(name string) (buildpack models.Buildpack, apiErr error) { - repo.FindByNameName = name - buildpack = repo.FindByNameBuildpack - - if repo.FindByNameNotFound { - apiErr = errors.NewModelNotFoundError("Buildpack", name) - } - - return -} - -func (repo *FakeBuildpackRepository) Create(name string, position *int, enabled *bool, locked *bool) (createdBuildpack models.Buildpack, apiErr error) { - if repo.CreateBuildpackExists { - return repo.CreateBuildpack, errors.NewHttpError(400, errors.BUILDPACK_EXISTS, "Buildpack already exists") - } - - repo.CreateBuildpack = models.Buildpack{Name: name, Position: position, Enabled: enabled, Locked: locked} - return repo.CreateBuildpack, repo.CreateApiResponse -} - -func (repo *FakeBuildpackRepository) Delete(buildpackGuid string) (apiErr error) { - repo.DeleteBuildpackGuid = buildpackGuid - apiErr = repo.DeleteApiResponse - return -} - -func (repo *FakeBuildpackRepository) Update(buildpack models.Buildpack) (updatedBuildpack models.Buildpack, apiErr error) { - repo.UpdateBuildpackArgs.Buildpack = buildpack - apiErr = repo.UpdateBuildpackReturns.Error - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_cc_request.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_cc_request.go deleted file mode 100644 index dac105b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_cc_request.go +++ /dev/null @@ -1,15 +0,0 @@ -package fakes - -import ( - testnet "github.com/cloudfoundry/cli/testhelpers/net" - "net/http" -) - -func NewCloudControllerTestRequest(request testnet.TestRequest) testnet.TestRequest { - request.Header = http.Header{ - "accept": {"application/json"}, - "authorization": {"BEARER my_access_token"}, - } - - return request -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_curl_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_curl_repo.go deleted file mode 100644 index 17cbfa0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_curl_repo.go +++ /dev/null @@ -1,23 +0,0 @@ -package fakes - -type FakeCurlRepository struct { - Method string - Path string - Header string - Body string - ResponseHeader string - ResponseBody string - Error error -} - -func (repo *FakeCurlRepository) Request(method, path, header, body string) (resHeaders, resBody string, apiErr error) { - repo.Method = method - repo.Path = path - repo.Header = header - repo.Body = body - - resHeaders = repo.ResponseHeader - resBody = repo.ResponseBody - apiErr = repo.Error - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_domain_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_domain_repo.go deleted file mode 100644 index f8061c5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_domain_repo.go +++ /dev/null @@ -1,135 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeDomainRepository struct { - ListDomainsForOrgGuid string - ListDomainsForOrgDomains []models.DomainFields - ListDomainsForOrgApiResponse error - - FindByNameInOrgName string - FindByNameInOrgGuid string - FindByNameInOrgDomain []models.DomainFields - FindByNameInOrgApiResponse error - - FindSharedByNameName string - FindSharedByNameDomain models.DomainFields - FindSharedByNameNotFound bool - FindSharedByNameErr bool - - FindPrivateByNameName string - FindPrivateByNameDomain models.DomainFields - FindPrivateByNameNotFound bool - FindPrivateByNameErr bool - - CreateDomainName string - CreateDomainOwningOrgGuid string - - CreateSharedDomainName string - - DeleteDomainGuid string - DeleteApiResponse error - - DeleteSharedDomainGuid string - DeleteSharedApiResponse error - - domainCursor int -} - -func (repo *FakeDomainRepository) ListDomainsForOrg(orgGuid string, cb func(models.DomainFields) bool) error { - repo.ListDomainsForOrgGuid = orgGuid - for _, d := range repo.ListDomainsForOrgDomains { - cb(d) - } - return repo.ListDomainsForOrgApiResponse -} - -func (repo *FakeDomainRepository) FindSharedByName(name string) (domain models.DomainFields, apiErr error) { - repo.FindSharedByNameName = name - domain = repo.FindSharedByNameDomain - - if repo.FindSharedByNameNotFound { - apiErr = errors.NewModelNotFoundError("Domain", name) - } - if repo.FindSharedByNameErr { - apiErr = errors.New("Error finding domain") - } - - return -} - -func (repo *FakeDomainRepository) FindPrivateByName(name string) (domain models.DomainFields, apiErr error) { - repo.FindPrivateByNameName = name - domain = repo.FindPrivateByNameDomain - - if repo.FindPrivateByNameNotFound { - apiErr = errors.NewModelNotFoundError("Domain", name) - } - if repo.FindPrivateByNameErr { - apiErr = errors.New("Error finding domain") - } - - return -} - -func (repo *FakeDomainRepository) FindByNameInOrg(name string, owningOrgGuid string) (domain models.DomainFields, apiErr error) { - repo.FindByNameInOrgName = name - repo.FindByNameInOrgGuid = owningOrgGuid - if len(repo.FindByNameInOrgDomain) == 0 { - domain = models.DomainFields{} - } else { - domain = repo.FindByNameInOrgDomain[repo.domainCursor] - repo.domainCursor++ - } - apiErr = repo.FindByNameInOrgApiResponse - return -} - -func (repo *FakeDomainRepository) Create(domainName string, owningOrgGuid string) (createdDomain models.DomainFields, apiErr error) { - repo.CreateDomainName = domainName - repo.CreateDomainOwningOrgGuid = owningOrgGuid - return -} - -func (repo *FakeDomainRepository) CreateSharedDomain(domainName string) (apiErr error) { - repo.CreateSharedDomainName = domainName - return -} - -func (repo *FakeDomainRepository) Delete(domainGuid string) (apiErr error) { - repo.DeleteDomainGuid = domainGuid - apiErr = repo.DeleteApiResponse - return -} - -func (repo *FakeDomainRepository) DeleteSharedDomain(domainGuid string) (apiErr error) { - repo.DeleteSharedDomainGuid = domainGuid - apiErr = repo.DeleteSharedApiResponse - return -} - -func (repo *FakeDomainRepository) FirstOrDefault(orgGuid string, name *string) (domain models.DomainFields, error error) { - if name == nil { - domain, error = repo.defaultDomain(orgGuid) - } else { - domain, error = repo.FindByNameInOrg(*name, orgGuid) - } - return -} - -func (repo *FakeDomainRepository) defaultDomain(orgGuid string) (models.DomainFields, error) { - var foundDomain *models.DomainFields - repo.ListDomainsForOrg(orgGuid, func(domain models.DomainFields) bool { - foundDomain = &domain - return !domain.Shared - }) - - if foundDomain == nil { - return models.DomainFields{}, errors.New("Could not find a default domain") - } - - return *foundDomain, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_endpoint_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_endpoint_repo.go deleted file mode 100644 index 8c50123..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_endpoint_repo.go +++ /dev/null @@ -1,11 +0,0 @@ -package fakes - -type FakeEndpointRepo struct { - UpdateEndpointReceived string - UpdateEndpointError error -} - -func (repo *FakeEndpointRepo) UpdateEndpoint(endpoint string) (string, error) { - repo.UpdateEndpointReceived = endpoint - return endpoint, repo.UpdateEndpointError -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_loggregator_consumer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_loggregator_consumer.go deleted file mode 100644 index 6337b01..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_loggregator_consumer.go +++ /dev/null @@ -1,68 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/loggregator_consumer" - "github.com/cloudfoundry/loggregatorlib/logmessage" -) - -type FakeLoggregatorConsumer struct { - RecentCalledWith struct { - AppGuid string - AuthToken string - } - - RecentReturns struct { - Messages []*logmessage.LogMessage - Err []error - callIndex int - } - - TailFunc func(appGuid, token string) (<-chan *logmessage.LogMessage, error) - - IsClosed bool - - OnConnectCallback func() - - closeChan chan bool -} - -func NewFakeLoggregatorConsumer() *FakeLoggregatorConsumer { - return &FakeLoggregatorConsumer{ - closeChan: make(chan bool, 1), - } -} - -func (c *FakeLoggregatorConsumer) Recent(appGuid string, authToken string) ([]*logmessage.LogMessage, error) { - c.RecentCalledWith.AppGuid = appGuid - c.RecentCalledWith.AuthToken = authToken - - var err error - if c.RecentReturns.callIndex < len(c.RecentReturns.Err) { - err = c.RecentReturns.Err[c.RecentReturns.callIndex] - c.RecentReturns.callIndex++ - } - - return c.RecentReturns.Messages, err -} - -func (c *FakeLoggregatorConsumer) Close() error { - c.IsClosed = true - c.closeChan <- true - return nil -} - -func (c *FakeLoggregatorConsumer) SetOnConnectCallback(cb func()) { - c.OnConnectCallback = cb -} - -func (c *FakeLoggregatorConsumer) Tail(appGuid string, authToken string) (<-chan *logmessage.LogMessage, error) { - return c.TailFunc(appGuid, authToken) -} - -func (c *FakeLoggregatorConsumer) WaitForClose() { - <-c.closeChan -} - -func (c *FakeLoggregatorConsumer) SetDebugPrinter(debugPrinter loggregator_consumer.DebugPrinter) { - <-c.closeChan -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_logs_noaa_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_logs_noaa_repository.go deleted file mode 100644 index 788a683..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_logs_noaa_repository.go +++ /dev/null @@ -1,163 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/sonde-go/events" -) - -type FakeLogsNoaaRepository struct { - GetContainerMetricsStub func(string, []models.AppInstanceFields) ([]models.AppInstanceFields, error) - getContainerMetricsMutex sync.RWMutex - getContainerMetricsArgsForCall []struct { - arg1 string - arg2 []models.AppInstanceFields - } - getContainerMetricsReturns struct { - result1 []models.AppInstanceFields - result2 error - } - RecentLogsForStub func(appGuid string) ([]*events.LogMessage, error) - recentLogsForMutex sync.RWMutex - recentLogsForArgsForCall []struct { - appGuid string - } - recentLogsForReturns struct { - result1 []*events.LogMessage - result2 error - } - TailNoaaLogsForStub func(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error - tailNoaaLogsForMutex sync.RWMutex - tailNoaaLogsForArgsForCall []struct { - appGuid string - onConnect func() - onMessage func(*events.LogMessage) - } - tailNoaaLogsForReturns struct { - result1 error - } - CloseStub func() - closeMutex sync.RWMutex - closeArgsForCall []struct{} -} - -func (fake *FakeLogsNoaaRepository) GetContainerMetrics(arg1 string, arg2 []models.AppInstanceFields) ([]models.AppInstanceFields, error) { - fake.getContainerMetricsMutex.Lock() - fake.getContainerMetricsArgsForCall = append(fake.getContainerMetricsArgsForCall, struct { - arg1 string - arg2 []models.AppInstanceFields - }{arg1, arg2}) - fake.getContainerMetricsMutex.Unlock() - if fake.GetContainerMetricsStub != nil { - return fake.GetContainerMetricsStub(arg1, arg2) - } else { - return fake.getContainerMetricsReturns.result1, fake.getContainerMetricsReturns.result2 - } -} - -func (fake *FakeLogsNoaaRepository) GetContainerMetricsCallCount() int { - fake.getContainerMetricsMutex.RLock() - defer fake.getContainerMetricsMutex.RUnlock() - return len(fake.getContainerMetricsArgsForCall) -} - -func (fake *FakeLogsNoaaRepository) GetContainerMetricsArgsForCall(i int) (string, []models.AppInstanceFields) { - fake.getContainerMetricsMutex.RLock() - defer fake.getContainerMetricsMutex.RUnlock() - return fake.getContainerMetricsArgsForCall[i].arg1, fake.getContainerMetricsArgsForCall[i].arg2 -} - -func (fake *FakeLogsNoaaRepository) GetContainerMetricsReturns(result1 []models.AppInstanceFields, result2 error) { - fake.GetContainerMetricsStub = nil - fake.getContainerMetricsReturns = struct { - result1 []models.AppInstanceFields - result2 error - }{result1, result2} -} - -func (fake *FakeLogsNoaaRepository) RecentLogsFor(appGuid string) ([]*events.LogMessage, error) { - fake.recentLogsForMutex.Lock() - fake.recentLogsForArgsForCall = append(fake.recentLogsForArgsForCall, struct { - appGuid string - }{appGuid}) - fake.recentLogsForMutex.Unlock() - if fake.RecentLogsForStub != nil { - return fake.RecentLogsForStub(appGuid) - } else { - return fake.recentLogsForReturns.result1, fake.recentLogsForReturns.result2 - } -} - -func (fake *FakeLogsNoaaRepository) RecentLogsForCallCount() int { - fake.recentLogsForMutex.RLock() - defer fake.recentLogsForMutex.RUnlock() - return len(fake.recentLogsForArgsForCall) -} - -func (fake *FakeLogsNoaaRepository) RecentLogsForArgsForCall(i int) string { - fake.recentLogsForMutex.RLock() - defer fake.recentLogsForMutex.RUnlock() - return fake.recentLogsForArgsForCall[i].appGuid -} - -func (fake *FakeLogsNoaaRepository) RecentLogsForReturns(result1 []*events.LogMessage, result2 error) { - fake.RecentLogsForStub = nil - fake.recentLogsForReturns = struct { - result1 []*events.LogMessage - result2 error - }{result1, result2} -} - -func (fake *FakeLogsNoaaRepository) TailNoaaLogsFor(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error { - fake.tailNoaaLogsForMutex.Lock() - fake.tailNoaaLogsForArgsForCall = append(fake.tailNoaaLogsForArgsForCall, struct { - appGuid string - onConnect func() - onMessage func(*events.LogMessage) - }{appGuid, onConnect, onMessage}) - fake.tailNoaaLogsForMutex.Unlock() - if fake.TailNoaaLogsForStub != nil { - return fake.TailNoaaLogsForStub(appGuid, onConnect, onMessage) - } else { - return fake.tailNoaaLogsForReturns.result1 - } -} - -func (fake *FakeLogsNoaaRepository) TailNoaaLogsForCallCount() int { - fake.tailNoaaLogsForMutex.RLock() - defer fake.tailNoaaLogsForMutex.RUnlock() - return len(fake.tailNoaaLogsForArgsForCall) -} - -func (fake *FakeLogsNoaaRepository) TailNoaaLogsForArgsForCall(i int) (string, func(), func(*events.LogMessage)) { - fake.tailNoaaLogsForMutex.RLock() - defer fake.tailNoaaLogsForMutex.RUnlock() - return fake.tailNoaaLogsForArgsForCall[i].appGuid, fake.tailNoaaLogsForArgsForCall[i].onConnect, fake.tailNoaaLogsForArgsForCall[i].onMessage -} - -func (fake *FakeLogsNoaaRepository) TailNoaaLogsForReturns(result1 error) { - fake.TailNoaaLogsForStub = nil - fake.tailNoaaLogsForReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeLogsNoaaRepository) Close() { - fake.closeMutex.Lock() - fake.closeArgsForCall = append(fake.closeArgsForCall, struct{}{}) - fake.closeMutex.Unlock() - if fake.CloseStub != nil { - fake.CloseStub() - } -} - -func (fake *FakeLogsNoaaRepository) CloseCallCount() int { - fake.closeMutex.RLock() - defer fake.closeMutex.RUnlock() - return len(fake.closeArgsForCall) -} - -var _ api.LogsNoaaRepository = new(FakeLogsNoaaRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_noaa_consumer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_noaa_consumer.go deleted file mode 100644 index 7cd97a5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_noaa_consumer.go +++ /dev/null @@ -1,197 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/sonde-go/events" -) - -type FakeNoaaConsumer struct { - TailFunc func(logChan chan<- *events.LogMessage, errChan chan<- error) - GetContainerMetricsStub func(string, string) ([]*events.ContainerMetric, error) - getContainerMetricsMutex sync.RWMutex - getContainerMetricsArgsForCall []struct { - arg1 string - arg2 string - } - getContainerMetricsReturns struct { - result1 []*events.ContainerMetric - result2 error - } - RecentLogsStub func(string, string) ([]*events.LogMessage, error) - recentLogsMutex sync.RWMutex - recentLogsArgsForCall []struct { - arg1 string - arg2 string - } - recentLogsReturns struct { - result1 []*events.LogMessage - result2 error - } - TailingLogsStub func(string, string, chan<- *events.LogMessage, chan<- error) - tailingLogsMutex sync.RWMutex - tailingLogsArgsForCall []struct { - arg1 string - arg2 string - arg3 chan<- *events.LogMessage - arg4 chan<- error - } - SetOnConnectCallbackStub func(func()) - setOnConnectCallbackMutex sync.RWMutex - setOnConnectCallbackArgsForCall []struct { - arg1 func() - } - CloseStub func() error - closeMutex sync.RWMutex - closeArgsForCall []struct{} - closeReturns struct { - result1 error - } -} - -func (fake *FakeNoaaConsumer) GetContainerMetrics(arg1 string, arg2 string) ([]*events.ContainerMetric, error) { - fake.getContainerMetricsMutex.Lock() - fake.getContainerMetricsArgsForCall = append(fake.getContainerMetricsArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - fake.getContainerMetricsMutex.Unlock() - if fake.GetContainerMetricsStub != nil { - return fake.GetContainerMetricsStub(arg1, arg2) - } else { - return fake.getContainerMetricsReturns.result1, fake.getContainerMetricsReturns.result2 - } -} - -func (fake *FakeNoaaConsumer) GetContainerMetricsCallCount() int { - fake.getContainerMetricsMutex.RLock() - defer fake.getContainerMetricsMutex.RUnlock() - return len(fake.getContainerMetricsArgsForCall) -} - -func (fake *FakeNoaaConsumer) GetContainerMetricsArgsForCall(i int) (string, string) { - fake.getContainerMetricsMutex.RLock() - defer fake.getContainerMetricsMutex.RUnlock() - return fake.getContainerMetricsArgsForCall[i].arg1, fake.getContainerMetricsArgsForCall[i].arg2 -} - -func (fake *FakeNoaaConsumer) GetContainerMetricsReturns(result1 []*events.ContainerMetric, result2 error) { - fake.GetContainerMetricsStub = nil - fake.getContainerMetricsReturns = struct { - result1 []*events.ContainerMetric - result2 error - }{result1, result2} -} - -func (fake *FakeNoaaConsumer) RecentLogs(arg1 string, arg2 string) ([]*events.LogMessage, error) { - fake.recentLogsMutex.Lock() - fake.recentLogsArgsForCall = append(fake.recentLogsArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - fake.recentLogsMutex.Unlock() - if fake.RecentLogsStub != nil { - return fake.RecentLogsStub(arg1, arg2) - } else { - return fake.recentLogsReturns.result1, fake.recentLogsReturns.result2 - } -} - -func (fake *FakeNoaaConsumer) RecentLogsCallCount() int { - fake.recentLogsMutex.RLock() - defer fake.recentLogsMutex.RUnlock() - return len(fake.recentLogsArgsForCall) -} - -func (fake *FakeNoaaConsumer) RecentLogsArgsForCall(i int) (string, string) { - fake.recentLogsMutex.RLock() - defer fake.recentLogsMutex.RUnlock() - return fake.recentLogsArgsForCall[i].arg1, fake.recentLogsArgsForCall[i].arg2 -} - -func (fake *FakeNoaaConsumer) RecentLogsReturns(result1 []*events.LogMessage, result2 error) { - fake.RecentLogsStub = nil - fake.recentLogsReturns = struct { - result1 []*events.LogMessage - result2 error - }{result1, result2} -} - -func (fake *FakeNoaaConsumer) TailingLogs(arg1 string, arg2 string, arg3 chan<- *events.LogMessage, arg4 chan<- error) { - fake.tailingLogsMutex.Lock() - fake.tailingLogsArgsForCall = append(fake.tailingLogsArgsForCall, struct { - arg1 string - arg2 string - arg3 chan<- *events.LogMessage - arg4 chan<- error - }{arg1, arg2, arg3, arg4}) - fake.tailingLogsMutex.Unlock() - if fake.TailingLogsStub != nil { - fake.TailingLogsStub(arg1, arg2, arg3, arg4) - } - - fake.TailFunc(arg3, arg4) -} - -func (fake *FakeNoaaConsumer) TailingLogsCallCount() int { - fake.tailingLogsMutex.RLock() - defer fake.tailingLogsMutex.RUnlock() - return len(fake.tailingLogsArgsForCall) -} - -func (fake *FakeNoaaConsumer) TailingLogsArgsForCall(i int) (string, string, chan<- *events.LogMessage, chan<- error) { - fake.tailingLogsMutex.RLock() - defer fake.tailingLogsMutex.RUnlock() - return fake.tailingLogsArgsForCall[i].arg1, fake.tailingLogsArgsForCall[i].arg2, fake.tailingLogsArgsForCall[i].arg3, fake.tailingLogsArgsForCall[i].arg4 -} - -func (fake *FakeNoaaConsumer) SetOnConnectCallback(arg1 func()) { - fake.setOnConnectCallbackMutex.Lock() - fake.setOnConnectCallbackArgsForCall = append(fake.setOnConnectCallbackArgsForCall, struct { - arg1 func() - }{arg1}) - fake.setOnConnectCallbackMutex.Unlock() - if fake.SetOnConnectCallbackStub != nil { - fake.SetOnConnectCallbackStub(arg1) - } -} - -func (fake *FakeNoaaConsumer) SetOnConnectCallbackCallCount() int { - fake.setOnConnectCallbackMutex.RLock() - defer fake.setOnConnectCallbackMutex.RUnlock() - return len(fake.setOnConnectCallbackArgsForCall) -} - -func (fake *FakeNoaaConsumer) SetOnConnectCallbackArgsForCall(i int) func() { - fake.setOnConnectCallbackMutex.RLock() - defer fake.setOnConnectCallbackMutex.RUnlock() - return fake.setOnConnectCallbackArgsForCall[i].arg1 -} - -func (fake *FakeNoaaConsumer) Close() error { - fake.closeMutex.Lock() - fake.closeArgsForCall = append(fake.closeArgsForCall, struct{}{}) - fake.closeMutex.Unlock() - if fake.CloseStub != nil { - return fake.CloseStub() - } else { - return fake.closeReturns.result1 - } -} - -func (fake *FakeNoaaConsumer) CloseCallCount() int { - fake.closeMutex.RLock() - defer fake.closeMutex.RUnlock() - return len(fake.closeArgsForCall) -} - -func (fake *FakeNoaaConsumer) CloseReturns(result1 error) { - fake.CloseStub = nil - fake.closeReturns = struct { - result1 error - }{result1} -} - -var _ api.NoaaConsumer = new(FakeNoaaConsumer) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_old_logs_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_old_logs_repository.go deleted file mode 100644 index ef16b48..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_old_logs_repository.go +++ /dev/null @@ -1,118 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/loggregatorlib/logmessage" -) - -type FakeOldLogsRepository struct { - RecentLogsForStub func(appGuid string) ([]*logmessage.LogMessage, error) - recentLogsForMutex sync.RWMutex - recentLogsForArgsForCall []struct { - appGuid string - } - recentLogsForReturns struct { - result1 []*logmessage.LogMessage - result2 error - } - TailLogsForStub func(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error - tailLogsForMutex sync.RWMutex - tailLogsForArgsForCall []struct { - appGuid string - onConnect func() - onMessage func(*logmessage.LogMessage) - } - tailLogsForReturns struct { - result1 error - } - CloseStub func() - closeMutex sync.RWMutex - closeArgsForCall []struct{} -} - -func (fake *FakeOldLogsRepository) RecentLogsFor(appGuid string) ([]*logmessage.LogMessage, error) { - fake.recentLogsForMutex.Lock() - fake.recentLogsForArgsForCall = append(fake.recentLogsForArgsForCall, struct { - appGuid string - }{appGuid}) - fake.recentLogsForMutex.Unlock() - if fake.RecentLogsForStub != nil { - return fake.RecentLogsForStub(appGuid) - } else { - return fake.recentLogsForReturns.result1, fake.recentLogsForReturns.result2 - } -} - -func (fake *FakeOldLogsRepository) RecentLogsForCallCount() int { - fake.recentLogsForMutex.RLock() - defer fake.recentLogsForMutex.RUnlock() - return len(fake.recentLogsForArgsForCall) -} - -func (fake *FakeOldLogsRepository) RecentLogsForArgsForCall(i int) string { - fake.recentLogsForMutex.RLock() - defer fake.recentLogsForMutex.RUnlock() - return fake.recentLogsForArgsForCall[i].appGuid -} - -func (fake *FakeOldLogsRepository) RecentLogsForReturns(result1 []*logmessage.LogMessage, result2 error) { - fake.RecentLogsForStub = nil - fake.recentLogsForReturns = struct { - result1 []*logmessage.LogMessage - result2 error - }{result1, result2} -} - -func (fake *FakeOldLogsRepository) TailLogsFor(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error { - fake.tailLogsForMutex.Lock() - fake.tailLogsForArgsForCall = append(fake.tailLogsForArgsForCall, struct { - appGuid string - onConnect func() - onMessage func(*logmessage.LogMessage) - }{appGuid, onConnect, onMessage}) - fake.tailLogsForMutex.Unlock() - if fake.TailLogsForStub != nil { - return fake.TailLogsForStub(appGuid, onConnect, onMessage) - } else { - return fake.tailLogsForReturns.result1 - } -} - -func (fake *FakeOldLogsRepository) TailLogsForCallCount() int { - fake.tailLogsForMutex.RLock() - defer fake.tailLogsForMutex.RUnlock() - return len(fake.tailLogsForArgsForCall) -} - -func (fake *FakeOldLogsRepository) TailLogsForArgsForCall(i int) (string, func(), func(*logmessage.LogMessage)) { - fake.tailLogsForMutex.RLock() - defer fake.tailLogsForMutex.RUnlock() - return fake.tailLogsForArgsForCall[i].appGuid, fake.tailLogsForArgsForCall[i].onConnect, fake.tailLogsForArgsForCall[i].onMessage -} - -func (fake *FakeOldLogsRepository) TailLogsForReturns(result1 error) { - fake.TailLogsForStub = nil - fake.tailLogsForReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeOldLogsRepository) Close() { - fake.closeMutex.Lock() - fake.closeArgsForCall = append(fake.closeArgsForCall, struct{}{}) - fake.closeMutex.Unlock() - if fake.CloseStub != nil { - fake.CloseStub() - } -} - -func (fake *FakeOldLogsRepository) CloseCallCount() int { - fake.closeMutex.RLock() - defer fake.closeMutex.RUnlock() - return len(fake.closeArgsForCall) -} - -var _ api.OldLogsRepository = new(FakeOldLogsRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_old_logs_repository_with_timeout.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_old_logs_repository_with_timeout.go deleted file mode 100644 index 39eaed8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_old_logs_repository_with_timeout.go +++ /dev/null @@ -1,25 +0,0 @@ -package fakes - -import ( - "errors" - "time" - - "github.com/cloudfoundry/loggregatorlib/logmessage" -) - -type FakeOldLogsRepositoryWithTimeout struct { -} - -func (fake *FakeOldLogsRepositoryWithTimeout) RecentLogsFor(appGuid string) ([]*logmessage.LogMessage, error) { - return nil, nil -} - -func (fake *FakeOldLogsRepositoryWithTimeout) TailLogsFor(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error { - time.Sleep(150 * time.Millisecond) - return errors.New("Fake http timeout error") -} - -func (fake *FakeOldLogsRepositoryWithTimeout) Close() { -} - -// var _ api.OldLogsRepository = new(FakeOldLogsRepositoryWithTimeout) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_pwd_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_pwd_repo.go deleted file mode 100644 index f78886b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_pwd_repo.go +++ /dev/null @@ -1,23 +0,0 @@ -package fakes - -import "github.com/cloudfoundry/cli/cf/errors" - -type FakePasswordRepo struct { - Score string - ScoredPassword string - - UpdateUnauthorized bool - UpdateNewPassword string - UpdateOldPassword string -} - -func (repo *FakePasswordRepo) UpdatePassword(old string, new string) (apiErr error) { - repo.UpdateOldPassword = old - repo.UpdateNewPassword = new - - if repo.UpdateUnauthorized { - apiErr = errors.NewHttpError(401, "unauthorized", "Authorization Failed") - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_route_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_route_repo.go deleted file mode 100644 index cc0d23e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_route_repo.go +++ /dev/null @@ -1,137 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeRouteRepository struct { - FindByHostAndDomainCalledWith struct { - Host string - Domain models.DomainFields - } - - FindByHostAndDomainReturns struct { - Route models.Route - Error error - } - - CreatedHost string - CreatedDomainGuid string - CreatedRoute models.Route - - CreateInSpaceHost string - CreateInSpaceDomainGuid string - CreateInSpaceSpaceGuid string - CreateInSpaceCreatedRoute models.Route - CreateInSpaceErr bool - - CheckIfExistsFound bool - CheckIfExistsError error - - BindErr error - BoundRouteGuid string - BoundAppGuid string - - UnboundRouteGuid string - UnboundAppGuid string - - ListErr bool - Routes []models.Route - - DeletedRouteGuids []string - DeleteErr error -} - -func (repo *FakeRouteRepository) ListRoutes(cb func(models.Route) bool) (apiErr error) { - if repo.ListErr { - return errors.New("WHOOPSIE") - } - - for _, route := range repo.Routes { - if !cb(route) { - break - } - } - return -} - -func (repo *FakeRouteRepository) ListAllRoutes(cb func(models.Route) bool) (apiErr error) { - if repo.ListErr { - return errors.New("WHOOPSIE") - } - - for _, route := range repo.Routes { - if !cb(route) { - break - } - } - return -} - -func (repo *FakeRouteRepository) FindByHostAndDomain(host string, domain models.DomainFields) (route models.Route, apiErr error) { - repo.FindByHostAndDomainCalledWith.Host = host - repo.FindByHostAndDomainCalledWith.Domain = domain - - if repo.FindByHostAndDomainReturns.Error != nil { - apiErr = repo.FindByHostAndDomainReturns.Error - } - - route = repo.FindByHostAndDomainReturns.Route - return -} - -func (repo *FakeRouteRepository) Create(host string, domain models.DomainFields) (createdRoute models.Route, apiErr error) { - repo.CreatedHost = host - repo.CreatedDomainGuid = domain.Guid - - createdRoute.Guid = host + "-route-guid" - createdRoute.Domain = domain - createdRoute.Host = host - - return -} - -func (repo *FakeRouteRepository) CheckIfExists(host string, domain models.DomainFields) (found bool, apiErr error) { - if repo.CheckIfExistsFound { - found = true - } else { - found = false - } - - if repo.CheckIfExistsError != nil { - apiErr = repo.CheckIfExistsError - } - return -} -func (repo *FakeRouteRepository) CreateInSpace(host, domainGuid, spaceGuid string) (createdRoute models.Route, apiErr error) { - repo.CreateInSpaceHost = host - repo.CreateInSpaceDomainGuid = domainGuid - repo.CreateInSpaceSpaceGuid = spaceGuid - - if repo.CreateInSpaceErr { - apiErr = errors.New("Error") - } else { - createdRoute = repo.CreateInSpaceCreatedRoute - } - - return -} - -func (repo *FakeRouteRepository) Bind(routeGuid, appGuid string) (apiErr error) { - repo.BoundRouteGuid = routeGuid - repo.BoundAppGuid = appGuid - return repo.BindErr -} - -func (repo *FakeRouteRepository) Unbind(routeGuid, appGuid string) (apiErr error) { - repo.UnboundRouteGuid = routeGuid - repo.UnboundAppGuid = appGuid - return -} - -func (repo *FakeRouteRepository) Delete(routeGuid string) (apiErr error) { - repo.DeletedRouteGuids = append(repo.DeletedRouteGuids, routeGuid) - apiErr = repo.DeleteErr - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_binding_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_binding_repo.go deleted file mode 100644 index b37c9b8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_binding_repo.go +++ /dev/null @@ -1,42 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeServiceBindingRepo struct { - CreateServiceInstanceGuid string - CreateApplicationGuid string - CreateErrorCode string - CreateParams map[string]interface{} - - DeleteServiceInstance models.ServiceInstance - DeleteApplicationGuid string - DeleteBindingNotFound bool - CreateNonHttpErrCode string -} - -func (repo *FakeServiceBindingRepo) Create(instanceGuid, appGuid string, paramsMap map[string]interface{}) (apiErr error) { - repo.CreateServiceInstanceGuid = instanceGuid - repo.CreateApplicationGuid = appGuid - repo.CreateParams = paramsMap - - if repo.CreateNonHttpErrCode != "" { - apiErr = errors.New(repo.CreateNonHttpErrCode) - return - } - - if repo.CreateErrorCode != "" { - apiErr = errors.NewHttpError(400, repo.CreateErrorCode, "Error binding service") - } - - return -} - -func (repo *FakeServiceBindingRepo) Delete(instance models.ServiceInstance, appGuid string) (found bool, apiErr error) { - repo.DeleteServiceInstance = instance - repo.DeleteApplicationGuid = appGuid - found = !repo.DeleteBindingNotFound - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_broker_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_broker_repo.go deleted file mode 100644 index 439c8e2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_broker_repo.go +++ /dev/null @@ -1,89 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeServiceBrokerRepo struct { - FindByNameName string - FindByNameServiceBroker models.ServiceBroker - FindByNameNotFound bool - - FindByGuidGuid string - FindByGuidServiceBroker models.ServiceBroker - FindByGuidNotFound bool - - CreateName string - CreateUrl string - CreateUsername string - CreatePassword string - - UpdatedServiceBroker models.ServiceBroker - RenamedServiceBrokerGuid string - RenamedServiceBrokerName string - DeletedServiceBrokerGuid string - - ServiceBrokers []models.ServiceBroker - ListErr bool -} - -func (repo *FakeServiceBrokerRepo) FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error) { - repo.FindByNameName = name - serviceBroker = repo.FindByNameServiceBroker - - if repo.FindByNameNotFound { - apiErr = errors.NewModelNotFoundError("Service Broker", name) - } - - return -} - -func (repo *FakeServiceBrokerRepo) FindByGuid(guid string) (serviceBroker models.ServiceBroker, apiErr error) { - repo.FindByGuidGuid = guid - serviceBroker = repo.FindByGuidServiceBroker - - if repo.FindByGuidNotFound { - apiErr = errors.NewModelNotFoundError("Service Broker", guid) - } - - return -} - -func (repo *FakeServiceBrokerRepo) ListServiceBrokers(callback func(broker models.ServiceBroker) bool) error { - for _, broker := range repo.ServiceBrokers { - if !callback(broker) { - break - } - } - - if repo.ListErr { - return errors.New("Error finding service brokers") - } else { - return nil - } -} - -func (repo *FakeServiceBrokerRepo) Create(name, url, username, password string) (apiErr error) { - repo.CreateName = name - repo.CreateUrl = url - repo.CreateUsername = username - repo.CreatePassword = password - return -} - -func (repo *FakeServiceBrokerRepo) Update(serviceBroker models.ServiceBroker) (apiErr error) { - repo.UpdatedServiceBroker = serviceBroker - return -} - -func (repo *FakeServiceBrokerRepo) Rename(guid, name string) (apiErr error) { - repo.RenamedServiceBrokerGuid = guid - repo.RenamedServiceBrokerName = name - return -} - -func (repo *FakeServiceBrokerRepo) Delete(guid string) (apiErr error) { - repo.DeletedServiceBrokerGuid = guid - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_key_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_key_repo.go deleted file mode 100644 index efc8a1c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_key_repo.go +++ /dev/null @@ -1,76 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeServiceKeyRepo struct { - CreateServiceKeyMethod CreateServiceKeyType - ListServiceKeysMethod ListServiceKeysType - GetServiceKeyMethod GetServiceKeyType - DeleteServiceKeyMethod DeleteServiceKeyType -} - -type CreateServiceKeyType struct { - InstanceGuid string - KeyName string - Params map[string]interface{} - - Error error -} - -type ListServiceKeysType struct { - InstanceGuid string - - ServiceKeys []models.ServiceKey - Error error -} - -type GetServiceKeyType struct { - InstanceGuid string - KeyName string - - ServiceKey models.ServiceKey - Error error -} - -type DeleteServiceKeyType struct { - Guid string - - Error error -} - -func NewFakeServiceKeyRepo() *FakeServiceKeyRepo { - return &FakeServiceKeyRepo{ - CreateServiceKeyMethod: CreateServiceKeyType{}, - ListServiceKeysMethod: ListServiceKeysType{}, - GetServiceKeyMethod: GetServiceKeyType{}, - DeleteServiceKeyMethod: DeleteServiceKeyType{}, - } -} - -func (f *FakeServiceKeyRepo) CreateServiceKey(instanceGuid string, serviceKeyName string, params map[string]interface{}) error { - f.CreateServiceKeyMethod.InstanceGuid = instanceGuid - f.CreateServiceKeyMethod.KeyName = serviceKeyName - f.CreateServiceKeyMethod.Params = params - - return f.CreateServiceKeyMethod.Error -} - -func (f *FakeServiceKeyRepo) ListServiceKeys(instanceGuid string) ([]models.ServiceKey, error) { - f.ListServiceKeysMethod.InstanceGuid = instanceGuid - - return f.ListServiceKeysMethod.ServiceKeys, f.ListServiceKeysMethod.Error -} - -func (f *FakeServiceKeyRepo) GetServiceKey(instanceGuid string, serviceKeyName string) (models.ServiceKey, error) { - f.GetServiceKeyMethod.InstanceGuid = instanceGuid - - return f.GetServiceKeyMethod.ServiceKey, f.GetServiceKeyMethod.Error -} - -func (f *FakeServiceKeyRepo) DeleteServiceKey(serviceKeyGuid string) error { - f.DeleteServiceKeyMethod.Guid = serviceKeyGuid - - return f.DeleteServiceKeyMethod.Error -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_plan_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_plan_repo.go deleted file mode 100644 index 32b319a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_plan_repo.go +++ /dev/null @@ -1,110 +0,0 @@ -package fakes - -import ( - "sort" - "strings" - "sync" - - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeServicePlanRepo struct { - SearchReturns map[string][]models.ServicePlanFields - SearchErr error - - UpdateStub func(models.ServicePlanFields, string, bool) error - updateMutex sync.RWMutex - updateArgsForCall []struct { - arg1 models.ServicePlanFields - arg2 string - arg3 bool - } - updateReturns struct { - result1 error - } - - ListPlansFromManyServicesReturns []models.ServicePlanFields - ListPlansFromManyServicesError error -} - -func (fake *FakeServicePlanRepo) ListPlansFromManyServices(serviceGuids []string) (plans []models.ServicePlanFields, err error) { - if fake.ListPlansFromManyServicesError != nil { - return nil, fake.ListPlansFromManyServicesError - } - - if fake.ListPlansFromManyServicesReturns != nil { - return fake.ListPlansFromManyServicesReturns, nil - } - return []models.ServicePlanFields{}, nil -} - -func (fake *FakeServicePlanRepo) Search(queryParams map[string]string) ([]models.ServicePlanFields, error) { - if fake.SearchErr != nil { - return nil, fake.SearchErr - } - - if queryParams == nil { - //return everything - var returnPlans []models.ServicePlanFields - for _, value := range fake.SearchReturns { - returnPlans = append(returnPlans, value...) - } - return returnPlans, nil - } - - searchKey := combineKeys(queryParams) - if fake.SearchReturns[searchKey] != nil { - return fake.SearchReturns[searchKey], nil - } - - return []models.ServicePlanFields{}, nil -} - -func combineKeys(mapToCombine map[string]string) string { - keys := []string{} - for key, _ := range mapToCombine { - keys = append(keys, key) - } - sort.Strings(keys) - - values := []string{} - for _, key := range keys { - values = append(values, mapToCombine[key]) - } - - return strings.Join(values, ":") -} - -func (fake *FakeServicePlanRepo) Update(arg1 models.ServicePlanFields, arg2 string, arg3 bool) error { - fake.updateMutex.Lock() - defer fake.updateMutex.Unlock() - fake.updateArgsForCall = append(fake.updateArgsForCall, struct { - arg1 models.ServicePlanFields - arg2 string - arg3 bool - }{arg1, arg2, arg3}) - if fake.UpdateStub != nil { - return fake.UpdateStub(arg1, arg2, arg3) - } else { - return fake.updateReturns.result1 - } -} - -func (fake *FakeServicePlanRepo) UpdateCallCount() int { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return len(fake.updateArgsForCall) -} - -func (fake *FakeServicePlanRepo) UpdateArgsForCall(i int) (models.ServicePlanFields, string, bool) { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return fake.updateArgsForCall[i].arg1, fake.updateArgsForCall[i].arg2, fake.updateArgsForCall[i].arg3 -} - -func (fake *FakeServicePlanRepo) UpdateReturns(result1 error) { - fake.UpdateStub = nil - fake.updateReturns = struct { - result1 error - }{result1} -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_plan_visibility_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_plan_visibility_repository.go deleted file mode 100644 index 8e594ba..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_plan_visibility_repository.go +++ /dev/null @@ -1,167 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api" - - "github.com/cloudfoundry/cli/cf/models" - - "sync" -) - -type FakeServicePlanVisibilityRepository struct { - CreateStub func(string, string) error - createMutex sync.RWMutex - createArgsForCall []struct { - arg1 string - arg2 string - } - createReturns struct { - result1 error - } - ListStub func() ([]models.ServicePlanVisibilityFields, error) - listMutex sync.RWMutex - listArgsForCall []struct{} - listReturns struct { - result1 []models.ServicePlanVisibilityFields - result2 error - } - DeleteStub func(string) error - deleteMutex sync.RWMutex - deleteArgsForCall []struct { - arg1 string - } - deleteReturns struct { - result1 error - } - SearchStub func(map[string]string) ([]models.ServicePlanVisibilityFields, error) - searchMutex sync.RWMutex - searchArgsForCall []struct { - arg1 map[string]string - } - searchReturns struct { - result1 []models.ServicePlanVisibilityFields - result2 error - } -} - -func (fake *FakeServicePlanVisibilityRepository) Create(arg1 string, arg2 string) error { - fake.createMutex.Lock() - defer fake.createMutex.Unlock() - fake.createArgsForCall = append(fake.createArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.CreateStub != nil { - return fake.CreateStub(arg1, arg2) - } else { - return fake.createReturns.result1 - } -} - -func (fake *FakeServicePlanVisibilityRepository) CreateCallCount() int { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return len(fake.createArgsForCall) -} - -func (fake *FakeServicePlanVisibilityRepository) CreateArgsForCall(i int) (string, string) { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return fake.createArgsForCall[i].arg1, fake.createArgsForCall[i].arg2 -} - -func (fake *FakeServicePlanVisibilityRepository) CreateReturns(result1 error) { - fake.createReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeServicePlanVisibilityRepository) List() ([]models.ServicePlanVisibilityFields, error) { - fake.listMutex.Lock() - defer fake.listMutex.Unlock() - fake.listArgsForCall = append(fake.listArgsForCall, struct{}{}) - if fake.ListStub != nil { - return fake.ListStub() - } else { - return fake.listReturns.result1, fake.listReturns.result2 - } -} - -func (fake *FakeServicePlanVisibilityRepository) ListCallCount() int { - fake.listMutex.RLock() - defer fake.listMutex.RUnlock() - return len(fake.listArgsForCall) -} - -func (fake *FakeServicePlanVisibilityRepository) ListReturns(result1 []models.ServicePlanVisibilityFields, result2 error) { - fake.listReturns = struct { - result1 []models.ServicePlanVisibilityFields - result2 error - }{result1, result2} -} - -func (fake *FakeServicePlanVisibilityRepository) Delete(arg1 string) error { - fake.deleteMutex.Lock() - defer fake.deleteMutex.Unlock() - fake.deleteArgsForCall = append(fake.deleteArgsForCall, struct { - arg1 string - }{arg1}) - if fake.DeleteStub != nil { - return fake.DeleteStub(arg1) - } else { - return fake.deleteReturns.result1 - } -} - -func (fake *FakeServicePlanVisibilityRepository) DeleteCallCount() int { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return len(fake.deleteArgsForCall) -} - -func (fake *FakeServicePlanVisibilityRepository) DeleteArgsForCall(i int) string { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return fake.deleteArgsForCall[i].arg1 -} - -func (fake *FakeServicePlanVisibilityRepository) DeleteReturns(result1 error) { - fake.deleteReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeServicePlanVisibilityRepository) Search(arg1 map[string]string) ([]models.ServicePlanVisibilityFields, error) { - fake.searchMutex.Lock() - defer fake.searchMutex.Unlock() - fake.searchArgsForCall = append(fake.searchArgsForCall, struct { - arg1 map[string]string - }{arg1}) - if fake.SearchStub != nil { - return fake.SearchStub(arg1) - } else { - return fake.searchReturns.result1, fake.searchReturns.result2 - } -} - -func (fake *FakeServicePlanVisibilityRepository) SearchCallCount() int { - fake.searchMutex.RLock() - defer fake.searchMutex.RUnlock() - return len(fake.searchArgsForCall) -} - -func (fake *FakeServicePlanVisibilityRepository) SearchArgsForCall(i int) map[string]string { - fake.searchMutex.RLock() - defer fake.searchMutex.RUnlock() - return fake.searchArgsForCall[i].arg1 -} - -func (fake *FakeServicePlanVisibilityRepository) SearchReturns(result1 []models.ServicePlanVisibilityFields, result2 error) { - fake.searchReturns = struct { - result1 []models.ServicePlanVisibilityFields - result2 error - }{result1, result2} -} - -var _ ServicePlanVisibilityRepository = new(FakeServicePlanVisibilityRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_repo.go deleted file mode 100644 index bd102f0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_repo.go +++ /dev/null @@ -1,259 +0,0 @@ -package fakes - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" -) - -type FakeServiceRepo struct { - GetServiceOfferingByGuidReturns struct { - ServiceOffering models.ServiceOffering - Error error - } - - GetAllServiceOfferingsReturns struct { - ServiceOfferings []models.ServiceOffering - Error error - } - - GetServiceOfferingsForSpaceReturns struct { - ServiceOfferings []models.ServiceOffering - Error error - } - GetServiceOfferingsForSpaceArgs struct { - SpaceGuid string - } - - FindServiceOfferingsForSpaceByLabelArgs struct { - SpaceGuid string - Name string - } - - FindServiceOfferingsForSpaceByLabelReturns struct { - ServiceOfferings models.ServiceOfferings - Error error - } - - CreateServiceInstanceArgs struct { - Name string - PlanGuid string - Params map[string]interface{} - Tags []string - } - CreateServiceInstanceReturns struct { - Error error - } - - UpdateServiceInstanceArgs struct { - InstanceGuid string - PlanGuid string - Params map[string]interface{} - Tags []string - } - - UpdateServiceInstanceReturnsErr bool - - FindInstanceByNameName string - FindInstanceByNameServiceInstance models.ServiceInstance - FindInstanceByNameErr bool - FindInstanceByNameNotFound bool - - FindInstanceByNameMap generic.Map - - DeleteServiceServiceInstance models.ServiceInstance - - RenameServiceServiceInstance models.ServiceInstance - RenameServiceNewName string - - PurgedServiceOffering models.ServiceOffering - PurgeServiceOfferingCalled bool - PurgeServiceOfferingApiResponse error - - FindServiceOfferingByLabelAndProviderName string - FindServiceOfferingByLabelAndProviderProvider string - FindServiceOfferingByLabelAndProviderServiceOffering models.ServiceOffering - FindServiceOfferingByLabelAndProviderApiResponse error - FindServiceOfferingByLabelAndProviderCalled bool - - FindServiceOfferingsByLabelName string - FindServiceOfferingsByLabelServiceOfferings models.ServiceOfferings - FindServiceOfferingsByLabelApiResponse error - FindServiceOfferingsByLabelCalled bool - - ListServicesFromManyBrokersReturns map[string][]models.ServiceOffering - ListServicesFromManyBrokersErr error - - ListServicesFromBrokerReturns map[string][]models.ServiceOffering - ListServicesFromBrokerErr error - - V1ServicePlanDescription resources.ServicePlanDescription - V2ServicePlanDescription resources.ServicePlanDescription - FindServicePlanByDescriptionArguments []resources.ServicePlanDescription - FindServicePlanByDescriptionResultGuids []string - FindServicePlanByDescriptionResponses []error - findServicePlanByDescriptionCallCount int - - ServiceInstanceCountForServicePlan int - ServiceInstanceCountApiResponse error - - V1GuidToMigrate string - V2GuidToMigrate string - MigrateServicePlanFromV1ToV2Called bool - MigrateServicePlanFromV1ToV2ReturnedCount int - MigrateServicePlanFromV1ToV2Response error -} - -func (repo *FakeServiceRepo) GetServiceOfferingByGuid(guid string) (models.ServiceOffering, error) { - return repo.GetServiceOfferingByGuidReturns.ServiceOffering, repo.GetServiceOfferingByGuidReturns.Error -} - -func (repo *FakeServiceRepo) GetAllServiceOfferings() (models.ServiceOfferings, error) { - return repo.GetAllServiceOfferingsReturns.ServiceOfferings, repo.GetAllServiceOfferingsReturns.Error -} - -func (repo *FakeServiceRepo) GetServiceOfferingsForSpace(spaceGuid string) (models.ServiceOfferings, error) { - repo.GetServiceOfferingsForSpaceArgs.SpaceGuid = spaceGuid - return repo.GetServiceOfferingsForSpaceReturns.ServiceOfferings, repo.GetServiceOfferingsForSpaceReturns.Error -} - -func (repo *FakeServiceRepo) FindServiceOfferingsForSpaceByLabel(spaceGuid, name string) (models.ServiceOfferings, error) { - repo.FindServiceOfferingsForSpaceByLabelArgs.Name = name - repo.FindServiceOfferingsForSpaceByLabelArgs.SpaceGuid = spaceGuid - return repo.FindServiceOfferingsForSpaceByLabelReturns.ServiceOfferings, repo.FindServiceOfferingsForSpaceByLabelReturns.Error -} - -func (repo *FakeServiceRepo) PurgeServiceOffering(offering models.ServiceOffering) (apiErr error) { - repo.PurgedServiceOffering = offering - repo.PurgeServiceOfferingCalled = true - return repo.PurgeServiceOfferingApiResponse -} - -func (repo *FakeServiceRepo) FindServiceOfferingByLabelAndProvider(name, provider string) (offering models.ServiceOffering, apiErr error) { - repo.FindServiceOfferingByLabelAndProviderCalled = true - repo.FindServiceOfferingByLabelAndProviderName = name - repo.FindServiceOfferingByLabelAndProviderProvider = provider - apiErr = repo.FindServiceOfferingByLabelAndProviderApiResponse - offering = repo.FindServiceOfferingByLabelAndProviderServiceOffering - return -} - -func (repo *FakeServiceRepo) FindServiceOfferingsByLabel(name string) (offerings models.ServiceOfferings, apiErr error) { - repo.FindServiceOfferingsByLabelCalled = true - repo.FindServiceOfferingsByLabelName = name - apiErr = repo.FindServiceOfferingsByLabelApiResponse - offerings = repo.FindServiceOfferingsByLabelServiceOfferings - return -} - -func (repo *FakeServiceRepo) CreateServiceInstance(name, planGuid string, params map[string]interface{}, tags []string) (apiErr error) { - repo.CreateServiceInstanceArgs.Name = name - repo.CreateServiceInstanceArgs.PlanGuid = planGuid - repo.CreateServiceInstanceArgs.Params = params - repo.CreateServiceInstanceArgs.Tags = tags - - return repo.CreateServiceInstanceReturns.Error -} - -func (repo *FakeServiceRepo) UpdateServiceInstance(instanceGuid, planGuid string, params map[string]interface{}, tags []string) (apiErr error) { - - if repo.UpdateServiceInstanceReturnsErr { - apiErr = errors.New("Error updating service instance") - } else { - repo.UpdateServiceInstanceArgs.InstanceGuid = instanceGuid - repo.UpdateServiceInstanceArgs.PlanGuid = planGuid - repo.UpdateServiceInstanceArgs.Params = params - repo.UpdateServiceInstanceArgs.Tags = tags - } - - return -} - -func (repo *FakeServiceRepo) FindInstanceByName(name string) (instance models.ServiceInstance, apiErr error) { - repo.FindInstanceByNameName = name - - if repo.FindInstanceByNameMap != nil && repo.FindInstanceByNameMap.Has(name) { - instance = repo.FindInstanceByNameMap.Get(name).(models.ServiceInstance) - } else { - instance = repo.FindInstanceByNameServiceInstance - } - - if repo.FindInstanceByNameErr { - apiErr = errors.New("Error finding instance") - } - - if repo.FindInstanceByNameNotFound { - apiErr = errors.NewModelNotFoundError("Service instance", name) - } - - return -} - -func (repo *FakeServiceRepo) DeleteService(instance models.ServiceInstance) (apiErr error) { - repo.DeleteServiceServiceInstance = instance - return -} - -func (repo *FakeServiceRepo) RenameService(instance models.ServiceInstance, newName string) (apiErr error) { - repo.RenameServiceServiceInstance = instance - repo.RenameServiceNewName = newName - return -} - -func (repo *FakeServiceRepo) FindServicePlanByDescription(planDescription resources.ServicePlanDescription) (planGuid string, apiErr error) { - - repo.FindServicePlanByDescriptionArguments = - append(repo.FindServicePlanByDescriptionArguments, planDescription) - - if len(repo.FindServicePlanByDescriptionResultGuids) > repo.findServicePlanByDescriptionCallCount { - planGuid = repo.FindServicePlanByDescriptionResultGuids[repo.findServicePlanByDescriptionCallCount] - } - if len(repo.FindServicePlanByDescriptionResponses) > repo.findServicePlanByDescriptionCallCount { - apiErr = repo.FindServicePlanByDescriptionResponses[repo.findServicePlanByDescriptionCallCount] - } - repo.findServicePlanByDescriptionCallCount += 1 - return -} - -func (repo *FakeServiceRepo) ListServicesFromManyBrokers(brokerGuids []string) ([]models.ServiceOffering, error) { - if repo.ListServicesFromManyBrokersErr != nil { - return nil, repo.ListServicesFromManyBrokersErr - } - - key := strings.Join(brokerGuids, ",") - if repo.ListServicesFromManyBrokersReturns[key] != nil { - return repo.ListServicesFromManyBrokersReturns[key], nil - } - - return []models.ServiceOffering{}, nil -} - -func (repo *FakeServiceRepo) ListServicesFromBroker(brokerGuid string) ([]models.ServiceOffering, error) { - if repo.ListServicesFromBrokerErr != nil { - return nil, repo.ListServicesFromBrokerErr - } - - if repo.ListServicesFromBrokerReturns[brokerGuid] != nil { - return repo.ListServicesFromBrokerReturns[brokerGuid], nil - } - - return []models.ServiceOffering{}, nil -} - -func (repo *FakeServiceRepo) GetServiceInstanceCountForServicePlan(v1PlanGuid string) (count int, apiErr error) { - count = repo.ServiceInstanceCountForServicePlan - apiErr = repo.ServiceInstanceCountApiResponse - return -} - -func (repo *FakeServiceRepo) MigrateServicePlanFromV1ToV2(v1PlanGuid, v2PlanGuid string) (changedCount int, apiErr error) { - repo.MigrateServicePlanFromV1ToV2Called = true - repo.V1GuidToMigrate = v1PlanGuid - repo.V2GuidToMigrate = v2PlanGuid - changedCount = repo.MigrateServicePlanFromV1ToV2ReturnedCount - apiErr = repo.MigrateServicePlanFromV1ToV2Response - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_summary_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_summary_repo.go deleted file mode 100644 index deb0fc7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_service_summary_repo.go +++ /dev/null @@ -1,12 +0,0 @@ -package fakes - -import "github.com/cloudfoundry/cli/cf/models" - -type FakeServiceSummaryRepo struct { - GetSummariesInCurrentSpaceInstances []models.ServiceInstance -} - -func (repo *FakeServiceSummaryRepo) GetSummariesInCurrentSpace() (instances []models.ServiceInstance, apiErr error) { - instances = repo.GetSummariesInCurrentSpaceInstances - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_space_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_space_repo.go deleted file mode 100644 index 8210c8e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_space_repo.go +++ /dev/null @@ -1,107 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeSpaceRepository struct { - CurrentSpace models.Space - - Spaces []models.Space - - FindByNameName string - FindByNameSpace models.Space - FindByNameErr bool - FindByNameNotFound bool - - FindByNameInOrgName string - FindByNameInOrgOrgGuid string - FindByNameInOrgSpace models.Space - FindByNameInOrgError error - - SummarySpace models.Space - - CreateSpaceName string - CreateSpaceOrgGuid string - CreateSpaceSpaceQuotaGuid string - CreateSpaceExists bool - CreateSpaceSpace models.Space - - RenameSpaceGuid string - RenameNewName string - - DeletedSpaceGuid string -} - -func (repo FakeSpaceRepository) GetCurrentSpace() (space models.Space) { - return repo.CurrentSpace -} - -func (repo FakeSpaceRepository) ListSpaces(callback func(models.Space) bool) error { - for _, space := range repo.Spaces { - if !callback(space) { - break - } - } - return nil -} - -func (repo *FakeSpaceRepository) FindByName(name string) (space models.Space, apiErr error) { - repo.FindByNameName = name - - var foundSpace bool = false - for _, someSpace := range repo.Spaces { - if name == someSpace.Name { - foundSpace = true - space = someSpace - break - } - } - - if repo.FindByNameErr || !foundSpace { - apiErr = errors.New("Error finding space by name.") - } - - if repo.FindByNameNotFound { - apiErr = errors.NewModelNotFoundError("Space", name) - } - - return -} - -func (repo *FakeSpaceRepository) FindByNameInOrg(name, orgGuid string) (space models.Space, apiErr error) { - repo.FindByNameInOrgName = name - repo.FindByNameInOrgOrgGuid = orgGuid - space = repo.FindByNameInOrgSpace - apiErr = repo.FindByNameInOrgError - return -} - -func (repo *FakeSpaceRepository) GetSummary() (space models.Space, apiErr error) { - space = repo.SummarySpace - return -} - -func (repo *FakeSpaceRepository) Create(name, orgGuid, spaceQuotaGuid string) (space models.Space, apiErr error) { - if repo.CreateSpaceExists { - apiErr = errors.NewHttpError(400, errors.SPACE_EXISTS, "Space already exists") - return - } - repo.CreateSpaceName = name - repo.CreateSpaceOrgGuid = orgGuid - repo.CreateSpaceSpaceQuotaGuid = spaceQuotaGuid - space = repo.CreateSpaceSpace - return -} - -func (repo *FakeSpaceRepository) Rename(spaceGuid, newName string) (apiErr error) { - repo.RenameSpaceGuid = spaceGuid - repo.RenameNewName = newName - return -} - -func (repo *FakeSpaceRepository) Delete(spaceGuid string) (apiErr error) { - repo.DeletedSpaceGuid = spaceGuid - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_user_provided_service_instance_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_user_provided_service_instance_repository.go deleted file mode 100644 index 4bc7798..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_user_provided_service_instance_repository.go +++ /dev/null @@ -1,129 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" - "sync" -) - -type FakeUserProvidedServiceInstanceRepository struct { - CreateStub func(name, drainUrl string, params map[string]interface{}) (apiErr error) - createMutex sync.RWMutex - createArgsForCall []struct { - name string - drainUrl string - params map[string]interface{} - } - createReturns struct { - result1 error - } - UpdateStub func(serviceInstanceFields models.ServiceInstanceFields) (apiErr error) - updateMutex sync.RWMutex - updateArgsForCall []struct { - serviceInstanceFields models.ServiceInstanceFields - } - updateReturns struct { - result1 error - } - GetSummariesStub func() (models.UserProvidedServiceSummary, error) - getSummariesMutex sync.RWMutex - getSummariesArgsForCall []struct{} - getSummariesReturns struct { - result1 models.UserProvidedServiceSummary - result2 error - } -} - -func (fake *FakeUserProvidedServiceInstanceRepository) Create(name string, drainUrl string, params map[string]interface{}) (apiErr error) { - fake.createMutex.Lock() - defer fake.createMutex.Unlock() - fake.createArgsForCall = append(fake.createArgsForCall, struct { - name string - drainUrl string - params map[string]interface{} - }{name, drainUrl, params}) - if fake.CreateStub != nil { - return fake.CreateStub(name, drainUrl, params) - } else { - return fake.createReturns.result1 - } -} - -func (fake *FakeUserProvidedServiceInstanceRepository) CreateCallCount() int { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return len(fake.createArgsForCall) -} - -func (fake *FakeUserProvidedServiceInstanceRepository) CreateArgsForCall(i int) (string, string, map[string]interface{}) { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return fake.createArgsForCall[i].name, fake.createArgsForCall[i].drainUrl, fake.createArgsForCall[i].params -} - -func (fake *FakeUserProvidedServiceInstanceRepository) CreateReturns(result1 error) { - fake.CreateStub = nil - fake.createReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeUserProvidedServiceInstanceRepository) Update(serviceInstanceFields models.ServiceInstanceFields) (apiErr error) { - fake.updateMutex.Lock() - defer fake.updateMutex.Unlock() - fake.updateArgsForCall = append(fake.updateArgsForCall, struct { - serviceInstanceFields models.ServiceInstanceFields - }{serviceInstanceFields}) - if fake.UpdateStub != nil { - return fake.UpdateStub(serviceInstanceFields) - } else { - return fake.updateReturns.result1 - } -} - -func (fake *FakeUserProvidedServiceInstanceRepository) UpdateCallCount() int { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return len(fake.updateArgsForCall) -} - -func (fake *FakeUserProvidedServiceInstanceRepository) UpdateArgsForCall(i int) models.ServiceInstanceFields { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return fake.updateArgsForCall[i].serviceInstanceFields -} - -func (fake *FakeUserProvidedServiceInstanceRepository) UpdateReturns(result1 error) { - fake.UpdateStub = nil - fake.updateReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeUserProvidedServiceInstanceRepository) GetSummaries() (models.UserProvidedServiceSummary, error) { - fake.getSummariesMutex.Lock() - defer fake.getSummariesMutex.Unlock() - fake.getSummariesArgsForCall = append(fake.getSummariesArgsForCall, struct{}{}) - if fake.GetSummariesStub != nil { - return fake.GetSummariesStub() - } else { - return fake.getSummariesReturns.result1, fake.getSummariesReturns.result2 - } -} - -func (fake *FakeUserProvidedServiceInstanceRepository) GetSummariesCallCount() int { - fake.getSummariesMutex.RLock() - defer fake.getSummariesMutex.RUnlock() - return len(fake.getSummariesArgsForCall) -} - -func (fake *FakeUserProvidedServiceInstanceRepository) GetSummariesReturns(result1 models.UserProvidedServiceSummary, result2 error) { - fake.GetSummariesStub = nil - fake.getSummariesReturns = struct { - result1 models.UserProvidedServiceSummary - result2 error - }{result1, result2} -} - -var _ api.UserProvidedServiceInstanceRepository = new(FakeUserProvidedServiceInstanceRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_user_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_user_repo.go deleted file mode 100644 index b0b6d99..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/fakes/fake_user_repo.go +++ /dev/null @@ -1,128 +0,0 @@ -package fakes - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeUserRepository struct { - FindByUsernameUsername string - FindByUsernameUserFields models.UserFields - FindByUsernameNotFound bool - - ListUsersOrganizationGuid string - ListUsersSpaceGuid string - ListUsersByRole map[string][]models.UserFields - - CreateUserUsername string - CreateUserPassword string - CreateUserExists bool - CreateUserReturnsHttpError bool - - DeleteUserGuid string - - SetOrgRoleUserGuid string - SetOrgRoleOrganizationGuid string - SetOrgRoleRole string - - UnsetOrgRoleUserGuid string - UnsetOrgRoleOrganizationGuid string - UnsetOrgRoleRole string - - SetSpaceRoleUserGuid string - SetSpaceRoleOrgGuid string - SetSpaceRoleSpaceGuid string - SetSpaceRoleRole string - - UnsetSpaceRoleUserGuid string - UnsetSpaceRoleSpaceGuid string - UnsetSpaceRoleRole string - - ListUsersInOrgForRoleWithNoUAA_CallCount int - ListUsersInOrgForRole_CallCount int - ListUsersInSpaceForRoleWithNoUAA_CallCount int - ListUsersInSpaceForRole_CallCount int -} - -func (repo *FakeUserRepository) FindByUsername(username string) (user models.UserFields, apiErr error) { - repo.FindByUsernameUsername = username - user = repo.FindByUsernameUserFields - - if repo.FindByUsernameNotFound { - apiErr = errors.NewModelNotFoundError("User", "") - } - - return -} - -func (repo *FakeUserRepository) ListUsersInOrgForRoleWithNoUAA(orgGuid string, roleName string) ([]models.UserFields, error) { - repo.ListUsersOrganizationGuid = orgGuid - repo.ListUsersInOrgForRoleWithNoUAA_CallCount++ - return repo.ListUsersByRole[roleName], nil -} - -func (repo *FakeUserRepository) ListUsersInOrgForRole(orgGuid string, roleName string) ([]models.UserFields, error) { - repo.ListUsersOrganizationGuid = orgGuid - repo.ListUsersInOrgForRole_CallCount++ - return repo.ListUsersByRole[roleName], nil -} - -func (repo *FakeUserRepository) ListUsersInSpaceForRole(spaceGuid string, roleName string) ([]models.UserFields, error) { - repo.ListUsersSpaceGuid = spaceGuid - repo.ListUsersInSpaceForRole_CallCount++ - return repo.ListUsersByRole[roleName], nil -} - -func (repo *FakeUserRepository) ListUsersInSpaceForRoleWithNoUAA(spaceGuid string, roleName string) ([]models.UserFields, error) { - repo.ListUsersSpaceGuid = spaceGuid - repo.ListUsersInSpaceForRoleWithNoUAA_CallCount++ - return repo.ListUsersByRole[roleName], nil -} - -func (repo *FakeUserRepository) Create(username, password string) (apiErr error) { - repo.CreateUserUsername = username - repo.CreateUserPassword = password - - if repo.CreateUserReturnsHttpError { - apiErr = errors.NewHttpError(403, "403", "Forbidden") - } - if repo.CreateUserExists { - apiErr = errors.NewModelAlreadyExistsError("User", username) - } - - return -} - -func (repo *FakeUserRepository) Delete(userGuid string) (apiErr error) { - repo.DeleteUserGuid = userGuid - return -} - -func (repo *FakeUserRepository) SetOrgRole(userGuid, orgGuid, role string) (apiErr error) { - repo.SetOrgRoleUserGuid = userGuid - repo.SetOrgRoleOrganizationGuid = orgGuid - repo.SetOrgRoleRole = role - return -} - -func (repo *FakeUserRepository) UnsetOrgRole(userGuid, orgGuid, role string) (apiErr error) { - repo.UnsetOrgRoleUserGuid = userGuid - repo.UnsetOrgRoleOrganizationGuid = orgGuid - repo.UnsetOrgRoleRole = role - return -} - -func (repo *FakeUserRepository) SetSpaceRole(userGuid, spaceGuid, orgGuid, role string) (apiErr error) { - repo.SetSpaceRoleUserGuid = userGuid - repo.SetSpaceRoleOrgGuid = orgGuid - repo.SetSpaceRoleSpaceGuid = spaceGuid - repo.SetSpaceRoleRole = role - return -} - -func (repo *FakeUserRepository) UnsetSpaceRole(userGuid, spaceGuid, role string) (apiErr error) { - repo.UnsetSpaceRoleUserGuid = userGuid - repo.UnsetSpaceRoleSpaceGuid = spaceGuid - repo.UnsetSpaceRoleRole = role - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/fakes/fake_feature_flag_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/fakes/fake_feature_flag_repository.go deleted file mode 100644 index 4eeff9a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/fakes/fake_feature_flag_repository.go +++ /dev/null @@ -1,126 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/feature_flags" - "github.com/cloudfoundry/cli/cf/models" - "sync" -) - -type FakeFeatureFlagRepository struct { - ListStub func() ([]models.FeatureFlag, error) - listMutex sync.RWMutex - listArgsForCall []struct{} - listReturns struct { - result1 []models.FeatureFlag - result2 error - } - FindByNameStub func(string) (models.FeatureFlag, error) - findByNameMutex sync.RWMutex - findByNameArgsForCall []struct { - arg1 string - } - findByNameReturns struct { - result1 models.FeatureFlag - result2 error - } - UpdateStub func(string, bool) error - updateMutex sync.RWMutex - updateArgsForCall []struct { - arg1 string - arg2 bool - } - updateReturns struct { - result1 error - } -} - -func (fake *FakeFeatureFlagRepository) List() ([]models.FeatureFlag, error) { - fake.listMutex.Lock() - defer fake.listMutex.Unlock() - fake.listArgsForCall = append(fake.listArgsForCall, struct{}{}) - if fake.ListStub != nil { - return fake.ListStub() - } else { - return fake.listReturns.result1, fake.listReturns.result2 - } -} - -func (fake *FakeFeatureFlagRepository) ListCallCount() int { - fake.listMutex.RLock() - defer fake.listMutex.RUnlock() - return len(fake.listArgsForCall) -} - -func (fake *FakeFeatureFlagRepository) ListReturns(result1 []models.FeatureFlag, result2 error) { - fake.listReturns = struct { - result1 []models.FeatureFlag - result2 error - }{result1, result2} -} - -func (fake *FakeFeatureFlagRepository) FindByName(arg1 string) (models.FeatureFlag, error) { - fake.findByNameMutex.Lock() - defer fake.findByNameMutex.Unlock() - fake.findByNameArgsForCall = append(fake.findByNameArgsForCall, struct { - arg1 string - }{arg1}) - if fake.FindByNameStub != nil { - return fake.FindByNameStub(arg1) - } else { - return fake.findByNameReturns.result1, fake.findByNameReturns.result2 - } -} - -func (fake *FakeFeatureFlagRepository) FindByNameCallCount() int { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return len(fake.findByNameArgsForCall) -} - -func (fake *FakeFeatureFlagRepository) FindByNameArgsForCall(i int) string { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return fake.findByNameArgsForCall[i].arg1 -} - -func (fake *FakeFeatureFlagRepository) FindByNameReturns(result1 models.FeatureFlag, result2 error) { - fake.findByNameReturns = struct { - result1 models.FeatureFlag - result2 error - }{result1, result2} -} - -func (fake *FakeFeatureFlagRepository) Update(arg1 string, arg2 bool) error { - fake.updateMutex.Lock() - defer fake.updateMutex.Unlock() - fake.updateArgsForCall = append(fake.updateArgsForCall, struct { - arg1 string - arg2 bool - }{arg1, arg2}) - if fake.UpdateStub != nil { - return fake.UpdateStub(arg1, arg2) - } else { - return fake.updateReturns.result1 - } -} - -func (fake *FakeFeatureFlagRepository) UpdateCallCount() int { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return len(fake.updateArgsForCall) -} - -func (fake *FakeFeatureFlagRepository) UpdateArgsForCall(i int) (string, bool) { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return fake.updateArgsForCall[i].arg1, fake.updateArgsForCall[i].arg2 -} - -func (fake *FakeFeatureFlagRepository) UpdateReturns(result1 error) { - fake.updateReturns = struct { - result1 error - }{result1} -} - -var _ FeatureFlagRepository = new(FakeFeatureFlagRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags.go deleted file mode 100644 index 29f5c42..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags.go +++ /dev/null @@ -1,61 +0,0 @@ -package feature_flags - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type FeatureFlagRepository interface { - List() ([]models.FeatureFlag, error) - FindByName(string) (models.FeatureFlag, error) - Update(string, bool) error -} - -type CloudControllerFeatureFlagRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerFeatureFlagRepository(config core_config.Reader, gateway net.Gateway) CloudControllerFeatureFlagRepository { - return CloudControllerFeatureFlagRepository{ - config: config, - gateway: gateway, - } -} - -func (repo CloudControllerFeatureFlagRepository) List() ([]models.FeatureFlag, error) { - flags := []models.FeatureFlag{} - apiError := repo.gateway.GetResource( - fmt.Sprintf("%s/v2/config/feature_flags", repo.config.ApiEndpoint()), - &flags) - - if apiError != nil { - return nil, apiError - } - - return flags, nil -} - -func (repo CloudControllerFeatureFlagRepository) FindByName(name string) (models.FeatureFlag, error) { - flag := models.FeatureFlag{} - apiError := repo.gateway.GetResource( - fmt.Sprintf("%s/v2/config/feature_flags/%s", repo.config.ApiEndpoint(), name), - &flag) - - if apiError != nil { - return models.FeatureFlag{}, apiError - } - - return flag, nil -} - -func (repo CloudControllerFeatureFlagRepository) Update(flag string, set bool) error { - url := fmt.Sprintf("/v2/config/feature_flags/%s", flag) - body := fmt.Sprintf(`{"enabled": %v}`, set) - - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), url, strings.NewReader(body)) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags_suite_test.go deleted file mode 100644 index f89804d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package feature_flags_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFeatureFlags(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "FeatureFlags Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags_test.go deleted file mode 100644 index f8738e4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/feature_flags/feature_flags_test.go +++ /dev/null @@ -1,186 +0,0 @@ -package feature_flags_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/feature_flags" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Feature Flags Repository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerFeatureFlagRepository - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerFeatureFlagRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".List", func() { - BeforeEach(func() { - setupTestServer(featureFlagsGetAllRequest) - }) - - It("returns all of the feature flags", func() { - featureFlagModels, err := repo.List() - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(featureFlagModels)).To(Equal(5)) - Expect(featureFlagModels[0].Name).To(Equal("user_org_creation")) - Expect(featureFlagModels[0].Enabled).To(BeFalse()) - Expect(featureFlagModels[1].Name).To(Equal("private_domain_creation")) - Expect(featureFlagModels[1].Enabled).To(BeFalse()) - Expect(featureFlagModels[2].Name).To(Equal("app_bits_upload")) - Expect(featureFlagModels[2].Enabled).To(BeTrue()) - Expect(featureFlagModels[3].Name).To(Equal("app_scaling")) - Expect(featureFlagModels[3].Enabled).To(BeTrue()) - Expect(featureFlagModels[4].Name).To(Equal("route_creation")) - Expect(featureFlagModels[4].Enabled).To(BeTrue()) - }) - }) - - Describe(".FindByName", func() { - BeforeEach(func() { - setupTestServer(featureFlagRequest) - }) - - It("returns the requested", func() { - featureFlagModel, err := repo.FindByName("user_org_creation") - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - - Expect(featureFlagModel.Name).To(Equal("user_org_creation")) - Expect(featureFlagModel.Enabled).To(BeFalse()) - }) - }) - - Describe(".Update", func() { - BeforeEach(func() { - setupTestServer(featureFlagsUpdateRequest) - }) - - It("updates the given feature flag with the specified value", func() { - err := repo.Update("app_scaling", true) - Expect(err).ToNot(HaveOccurred()) - }) - - Context("when given a non-existent feature flag", func() { - BeforeEach(func() { - setupTestServer(featureFlagsUpdateErrorRequest) - }) - - It("returns an error", func() { - err := repo.Update("i_dont_exist", true) - Expect(err).To(HaveOccurred()) - }) - }) - }) -}) - -var featureFlagsGetAllRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/feature_flags", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `[ - { - "name": "user_org_creation", - "enabled": false, - "error_message": null, - "url": "/v2/config/feature_flags/user_org_creation" - }, - { - "name": "private_domain_creation", - "enabled": false, - "error_message": "foobar", - "url": "/v2/config/feature_flags/private_domain_creation" - }, - { - "name": "app_bits_upload", - "enabled": true, - "error_message": null, - "url": "/v2/config/feature_flags/app_bits_upload" - }, - { - "name": "app_scaling", - "enabled": true, - "error_message": null, - "url": "/v2/config/feature_flags/app_scaling" - }, - { - "name": "route_creation", - "enabled": true, - "error_message": null, - "url": "/v2/config/feature_flags/route_creation" - } -]`, - }, -}) - -var featureFlagRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/feature_flags/user_org_creation", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "name": "user_org_creation", - "enabled": false, - "error_message": null, - "url": "/v2/config/feature_flags/user_org_creation" -}`, - }, -}) - -var featureFlagsUpdateErrorRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/config/feature_flags/i_dont_exist", - Response: testnet.TestResponse{ - Status: http.StatusNotFound, - Body: `{ - "code": 330000, - "description": "The feature flag could not be found: i_dont_exist", - "error_code": "CF-FeatureFlagNotFound" - }`, - }, -}) - -var featureFlagsUpdateRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/config/feature_flags/app_scaling", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "name": "app_scaling", - "enabled": true, - "error_message": null, - "url": "/v2/config/feature_flags/app_scaling" - }`, - }, -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_noaa.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_noaa.go deleted file mode 100644 index 1679dd8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_noaa.go +++ /dev/null @@ -1,81 +0,0 @@ -package api - -import ( - "sort" - "sync" - "time" - - "github.com/cloudfoundry/sonde-go/events" -) - -const MAX_INT64 int64 = 1<<63 - 1 - -type item struct { - message *events.LogMessage - timestampWhenOutputtable int64 -} - -type SortedMessageQueue struct { - clock func() time.Time - printTimeBuffer time.Duration - items []*item - - mutex sync.Mutex -} - -func NewSortedMessageQueue(printTimeBuffer time.Duration, clock func() time.Time) *SortedMessageQueue { - return &SortedMessageQueue{ - clock: clock, - printTimeBuffer: printTimeBuffer, - } -} - -func (pq *SortedMessageQueue) PushMessage(message *events.LogMessage) { - pq.mutex.Lock() - defer pq.mutex.Unlock() - - item := &item{message: message, timestampWhenOutputtable: pq.clock().Add(pq.printTimeBuffer).UnixNano()} - pq.items = append(pq.items, item) - sort.Stable(pq) -} - -func (pq *SortedMessageQueue) PopMessage() *events.LogMessage { - pq.mutex.Lock() - defer pq.mutex.Unlock() - - if len(pq.items) == 0 { - return nil - } - - var item *item - item = pq.items[0] - pq.items = pq.items[1:len(pq.items)] - - return item.message -} - -func (pq *SortedMessageQueue) NextTimestamp() int64 { - pq.mutex.Lock() - defer pq.mutex.Unlock() - - currentQueue := pq.items - n := len(currentQueue) - if n == 0 { - return MAX_INT64 - } - item := currentQueue[0] - return item.timestampWhenOutputtable -} - -// implement sort interface so we can sort messages as we receive them in PushMessage -func (pq *SortedMessageQueue) Less(i, j int) bool { - return *pq.items[i].message.Timestamp < *pq.items[j].message.Timestamp -} - -func (pq *SortedMessageQueue) Swap(i, j int) { - pq.items[i], pq.items[j] = pq.items[j], pq.items[i] -} - -func (pq *SortedMessageQueue) Len() int { - return len(pq.items) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_noaa_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_noaa_test.go deleted file mode 100644 index a5f162c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_noaa_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package api_test - -import ( - "fmt" - "time" - - "code.google.com/p/gogoprotobuf/proto" - . "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/sonde-go/events" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("is a priority queue used to sort loggregator messages", func() { - It("PriorityQueue returns a new queue", func() { - pq := NewSortedMessageQueue(10*time.Millisecond, time.Now) - - msg3 := logMessageWithTime("message 3", 130) - pq.PushMessage(msg3) - msg2 := logMessageWithTime("message 2", 120) - pq.PushMessage(msg2) - msg4 := logMessageWithTime("message 4", 140) - pq.PushMessage(msg4) - msg1 := logMessageWithTime("message 1", 110) - pq.PushMessage(msg1) - - Expect(getMsgString(pq.PopMessage())).To(Equal(getMsgString(msg1))) - Expect(getMsgString(pq.PopMessage())).To(Equal(getMsgString(msg2))) - Expect(getMsgString(pq.PopMessage())).To(Equal(getMsgString(msg3))) - Expect(getMsgString(pq.PopMessage())).To(Equal(getMsgString(msg4))) - }) - - It("pops on empty queue", func() { - pq := NewSortedMessageQueue(10*time.Millisecond, time.Now) - Expect(pq.PopMessage()).To(BeNil()) - }) - - It("NextTimeStamp returns the timestamp of the log message at the head of the queue", func() { - currentTime := time.Unix(5, 0) - clock := func() time.Time { - return currentTime - } - - pq := NewSortedMessageQueue(5*time.Second, clock) - Expect(pq.NextTimestamp()).To(Equal(MAX_INT64)) - - msg2 := logMessageWithTime("message 2", 130) - pq.PushMessage(msg2) - - currentTime = time.Unix(6, 0) - msg1 := logMessageWithTime("message 1", 100) - pq.PushMessage(msg1) - Expect(pq.NextTimestamp()).To(Equal(time.Unix(11, 0).UnixNano())) - - readMessage := pq.PopMessage() - Expect(readMessage.GetTimestamp()).To(Equal(int64(100))) - Expect(pq.NextTimestamp()).To(Equal(time.Unix(10, 0).UnixNano())) - - readMessage = pq.PopMessage() - Expect(readMessage.GetTimestamp()).To(Equal(int64(130))) - Expect(pq.NextTimestamp()).To(Equal(MAX_INT64)) - }) - - It("sorts messages based on their timestamp", func() { - pq := NewSortedMessageQueue(10*time.Millisecond, time.Now) - - msg1 := logMessageWithTime("message first", 109) - pq.PushMessage(msg1) - - for i := 1; i < 1000; i++ { - msg := logMessageWithTime(fmt.Sprintf("message %d", i), 110) - pq.PushMessage(msg) - } - msg2 := logMessageWithTime("message last", 111) - pq.PushMessage(msg2) - - Expect(getMsgString(pq.PopMessage())).To(Equal("message first")) - - for i := 1; i < 1000; i++ { - Expect(getMsgString(pq.PopMessage())).To(Equal(fmt.Sprintf("message %d", i))) - } - - Expect(getMsgString(pq.PopMessage())).To(Equal("message last")) - }) -}) - -func logMessageWithTime(messageString string, timestamp int) *events.LogMessage { - return generateMessage(messageString, int64(timestamp)) -} - -func generateMessage(messageString string, timestamp int64) *events.LogMessage { - messageType := events.LogMessage_OUT - sourceName := "DEA" - return &events.LogMessage{ - Message: []byte(messageString), - AppId: proto.String("my-app-guid"), - MessageType: &messageType, - SourceType: &sourceName, - Timestamp: proto.Int64(timestamp), - } -} - -func getMsgString(message *events.LogMessage) string { - return string(message.GetMessage()) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_old_loggregator.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_old_loggregator.go deleted file mode 100644 index 7debbdb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_old_loggregator.go +++ /dev/null @@ -1,81 +0,0 @@ -package api - -import ( - "sort" - "sync" - "time" - - "github.com/cloudfoundry/loggregatorlib/logmessage" -) - -// const MAX_INT64 int64 = 1<<63 - 1 - -type loggregator_item struct { - message *logmessage.LogMessage - timestampWhenOutputtable int64 -} - -type Loggregator_SortedMessageQueue struct { - clock func() time.Time - printTimeBuffer time.Duration - items []*loggregator_item - - mutex sync.Mutex -} - -func NewLoggregator_SortedMessageQueue(printTimeBuffer time.Duration, clock func() time.Time) *Loggregator_SortedMessageQueue { - return &Loggregator_SortedMessageQueue{ - clock: clock, - printTimeBuffer: printTimeBuffer, - } -} - -func (pq *Loggregator_SortedMessageQueue) PushMessage(message *logmessage.LogMessage) { - pq.mutex.Lock() - defer pq.mutex.Unlock() - - item := &loggregator_item{message: message, timestampWhenOutputtable: pq.clock().Add(pq.printTimeBuffer).UnixNano()} - pq.items = append(pq.items, item) - sort.Stable(pq) -} - -func (pq *Loggregator_SortedMessageQueue) PopMessage() *logmessage.LogMessage { - pq.mutex.Lock() - defer pq.mutex.Unlock() - - if len(pq.items) == 0 { - return nil - } - - var item *loggregator_item - item = pq.items[0] - pq.items = pq.items[1:len(pq.items)] - - return item.message -} - -func (pq *Loggregator_SortedMessageQueue) NextTimestamp() int64 { - pq.mutex.Lock() - defer pq.mutex.Unlock() - - currentQueue := pq.items - n := len(currentQueue) - if n == 0 { - return MAX_INT64 - } - item := currentQueue[0] - return item.timestampWhenOutputtable -} - -// implement sort interface so we can sort messages as we receive them in PushMessage -func (pq *Loggregator_SortedMessageQueue) Less(i, j int) bool { - return *pq.items[i].message.Timestamp < *pq.items[j].message.Timestamp -} - -func (pq *Loggregator_SortedMessageQueue) Swap(i, j int) { - pq.items[i], pq.items[j] = pq.items[j], pq.items[i] -} - -func (pq *Loggregator_SortedMessageQueue) Len() int { - return len(pq.items) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_old_loggregator_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_old_loggregator_test.go deleted file mode 100644 index 0caec00..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/log_message_queue_old_loggregator_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package api_test - -import ( - "fmt" - "time" - - "code.google.com/p/gogoprotobuf/proto" - . "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/loggregatorlib/logmessage" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("is a priority queue used to sort loggregator messages", func() { - It("PriorityQueue returns a new queue", func() { - pq := NewLoggregator_SortedMessageQueue(10*time.Millisecond, time.Now) - - msg3 := logLoggregatorMessageWithTime("message 3", 130) - pq.PushMessage(msg3) - msg2 := logLoggregatorMessageWithTime("message 2", 120) - pq.PushMessage(msg2) - msg4 := logLoggregatorMessageWithTime("message 4", 140) - pq.PushMessage(msg4) - msg1 := logLoggregatorMessageWithTime("message 1", 110) - pq.PushMessage(msg1) - - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal(getLoggregatorMsgString(msg1))) - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal(getLoggregatorMsgString(msg2))) - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal(getLoggregatorMsgString(msg3))) - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal(getLoggregatorMsgString(msg4))) - }) - - It("pops on empty queue", func() { - pq := NewLoggregator_SortedMessageQueue(10*time.Millisecond, time.Now) - Expect(pq.PopMessage()).To(BeNil()) - }) - - It("NextTimeStamp returns the timestamp of the log message at the head of the queue", func() { - currentTime := time.Unix(5, 0) - clock := func() time.Time { - return currentTime - } - - pq := NewLoggregator_SortedMessageQueue(5*time.Second, clock) - Expect(pq.NextTimestamp()).To(Equal(MAX_INT64)) - - msg2 := logLoggregatorMessageWithTime("message 2", 130) - pq.PushMessage(msg2) - - currentTime = time.Unix(6, 0) - msg1 := logLoggregatorMessageWithTime("message 1", 100) - pq.PushMessage(msg1) - Expect(pq.NextTimestamp()).To(Equal(time.Unix(11, 0).UnixNano())) - - readMessage := pq.PopMessage() - Expect(readMessage.GetTimestamp()).To(Equal(int64(100))) - Expect(pq.NextTimestamp()).To(Equal(time.Unix(10, 0).UnixNano())) - - readMessage = pq.PopMessage() - Expect(readMessage.GetTimestamp()).To(Equal(int64(130))) - Expect(pq.NextTimestamp()).To(Equal(MAX_INT64)) - }) - - It("sorts messages based on their timestamp", func() { - pq := NewLoggregator_SortedMessageQueue(10*time.Millisecond, time.Now) - - msg1 := logLoggregatorMessageWithTime("message first", 109) - pq.PushMessage(msg1) - - for i := 1; i < 1000; i++ { - msg := logLoggregatorMessageWithTime(fmt.Sprintf("message %d", i), 110) - pq.PushMessage(msg) - } - msg2 := logLoggregatorMessageWithTime("message last", 111) - pq.PushMessage(msg2) - - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal("message first")) - - for i := 1; i < 1000; i++ { - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal(fmt.Sprintf("message %d", i))) - } - - Expect(getLoggregatorMsgString(pq.PopMessage())).To(Equal("message last")) - }) -}) - -func logLoggregatorMessageWithTime(messageString string, timestamp int) *logmessage.LogMessage { - return generateLoggregatorMessage(messageString, int64(timestamp)) -} - -func generateLoggregatorMessage(messageString string, timestamp int64) *logmessage.LogMessage { - messageType := logmessage.LogMessage_OUT - sourceName := "DEA" - return &logmessage.LogMessage{ - Message: []byte(messageString), - AppId: proto.String("my-app-guid"), - MessageType: &messageType, - SourceName: &sourceName, - Timestamp: proto.Int64(timestamp), - } -} - -func getLoggregatorMsgString(message *logmessage.LogMessage) string { - return string(message.GetMessage()) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_noaa.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_noaa.go deleted file mode 100644 index c7803dc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_noaa.go +++ /dev/null @@ -1,168 +0,0 @@ -package api - -import ( - "errors" - "sync" - "time" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - "github.com/cloudfoundry/noaa" - noaa_errors "github.com/cloudfoundry/noaa/errors" - "github.com/cloudfoundry/sonde-go/events" -) - -type LogsNoaaRepository interface { - GetContainerMetrics(string, []models.AppInstanceFields) ([]models.AppInstanceFields, error) - RecentLogsFor(appGuid string) ([]*events.LogMessage, error) - TailNoaaLogsFor(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error - Close() -} - -type logNoaaRepository struct { - config core_config.Reader - consumer NoaaConsumer - tokenRefresher authentication.TokenRefresher - messageQueue *SortedMessageQueue - onMessage func(*events.LogMessage) - doneChan chan struct{} - tailing bool - mutexLock sync.Mutex -} - -var BufferTime time.Duration = 5 * time.Second - -func NewLogsNoaaRepository(config core_config.Reader, consumer NoaaConsumer, tr authentication.TokenRefresher) LogsNoaaRepository { - return &logNoaaRepository{ - config: config, - consumer: consumer, - tokenRefresher: tr, - messageQueue: NewSortedMessageQueue(BufferTime, time.Now), - } -} - -func (l *logNoaaRepository) Close() { - l.mutexLock.Lock() - defer l.mutexLock.Unlock() - l.tailing = false - l.flushMessageQueue() - close(l.doneChan) -} - -func (l *logNoaaRepository) GetContainerMetrics(appGuid string, instances []models.AppInstanceFields) ([]models.AppInstanceFields, error) { - metrics, err := l.consumer.GetContainerMetrics(appGuid, l.config.AccessToken()) - switch err.(type) { - case nil: // do nothing - case *noaa_errors.UnauthorizedError: - l.tokenRefresher.RefreshAuthToken() - metrics, err = l.consumer.GetContainerMetrics(appGuid, l.config.AccessToken()) - default: - return instances, err - } - - for _, m := range metrics { - instances[int(*m.InstanceIndex)].MemUsage = int64(m.GetMemoryBytes()) - instances[int(*m.InstanceIndex)].CpuUsage = m.GetCpuPercentage() - instances[int(*m.InstanceIndex)].DiskUsage = int64(m.GetDiskBytes()) - } - - return instances, nil -} - -func (l *logNoaaRepository) RecentLogsFor(appGuid string) ([]*events.LogMessage, error) { - logs, err := l.consumer.RecentLogs(appGuid, l.config.AccessToken()) - - switch err.(type) { - case nil: // do nothing - case *noaa_errors.UnauthorizedError: - l.tokenRefresher.RefreshAuthToken() - logs, err = l.consumer.RecentLogs(appGuid, l.config.AccessToken()) - default: - return logs, err - } - - return noaa.SortRecent(logs), err -} - -func (l *logNoaaRepository) TailNoaaLogsFor(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error { - l.mutexLock.Lock() - var hasReauthed bool - l.doneChan = make(chan struct{}) - l.tailing = true - l.onMessage = onMessage - l.mutexLock.Unlock() - - endpoint := l.config.DopplerEndpoint() - if endpoint == "" { - return errors.New(T("Loggregator endpoint missing from config file")) - } - - l.consumer.SetOnConnectCallback(onConnect) - - logChan := make(chan *events.LogMessage) - errChan := make(chan error) - go l.consumer.TailingLogs(appGuid, l.config.AccessToken(), logChan, errChan) - - for { - sendNoaaMessages(l.messageQueue, onMessage) - - select { - case <-l.doneChan: - l.consumer.Close() - return nil - case err := <-errChan: - switch err.(type) { - case nil: // do nothing - case *noaa_errors.UnauthorizedError: - if !hasReauthed { - l.tokenRefresher.RefreshAuthToken() - hasReauthed = true - l.consumer.Close() - time.Sleep(100 * time.Millisecond) //wait a little before retrying - go l.consumer.TailingLogs(appGuid, l.config.AccessToken(), logChan, errChan) - } else { - l.consumer.Close() - return err - } - default: - if !l.tailing { //"use of closed network connection" is expected since we closed the websocket connection - return nil - } else { - return err - } - } - case log := <-logChan: - l.messageQueue.PushMessage(log) - default: - time.Sleep(10 * time.Millisecond) - } - } -} - -func sendNoaaMessages(queue *SortedMessageQueue, onMessage func(*events.LogMessage)) { - for queue.NextTimestamp() < time.Now().UnixNano() { - msg := queue.PopMessage() - onMessage(msg) - } -} - -func (l *logNoaaRepository) flushMessageQueue() { - if l.onMessage == nil { - return - } - - for { - message := l.messageQueue.PopMessage() - if message == nil { - break - } - - l.onMessage(message) - } - - l.onMessage = nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_noaa_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_noaa_test.go deleted file mode 100644 index c630d49..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_noaa_test.go +++ /dev/null @@ -1,284 +0,0 @@ -package api_test - -import ( - "errors" - "reflect" - "time" - - "github.com/cloudfoundry/cli/cf/api" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - noaa_errors "github.com/cloudfoundry/noaa/errors" - "github.com/cloudfoundry/sonde-go/events" - "github.com/gogo/protobuf/proto" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("logs with noaa repository", func() { - var ( - fakeNoaaConsumer *testapi.FakeNoaaConsumer - config core_config.ReadWriter - fakeTokenRefresher *testapi.FakeAuthenticationRepository - repo api.LogsNoaaRepository - ) - - BeforeEach(func() { - fakeNoaaConsumer = &testapi.FakeNoaaConsumer{} - config = testconfig.NewRepositoryWithDefaults() - config.SetLoggregatorEndpoint("loggregator.test.com") - config.SetDopplerEndpoint("doppler.test.com") - config.SetAccessToken("the-access-token") - fakeTokenRefresher = &testapi.FakeAuthenticationRepository{} - repo = api.NewLogsNoaaRepository(config, fakeNoaaConsumer, fakeTokenRefresher) - }) - - Describe("RecentLogsFor", func() { - - It("refreshes token and get metric once more if token has expired.", func() { - fakeNoaaConsumer.RecentLogsReturns([]*events.LogMessage{}, - noaa_errors.NewUnauthorizedError("Unauthorized token")) - - repo.RecentLogsFor("app-guid") - Ω(fakeTokenRefresher.RefreshTokenCalled).To(BeTrue()) - Ω(fakeNoaaConsumer.RecentLogsCallCount()).To(Equal(2)) - }) - - It("refreshes token and get metric once more if token has expired.", func() { - fakeNoaaConsumer.RecentLogsReturns([]*events.LogMessage{}, errors.New("error error error")) - - _, err := repo.RecentLogsFor("app-guid") - Ω(err).To(HaveOccurred()) - Ω(err.Error()).To(Equal("error error error")) - }) - - Context("when an error does not occur", func() { - BeforeEach(func() { - l := []*events.LogMessage{ - &events.LogMessage{Message: []byte("message 3"), Timestamp: proto.Int64(3000), AppId: proto.String("app-guid-1")}, - &events.LogMessage{Message: []byte("message 2"), Timestamp: proto.Int64(2000), AppId: proto.String("app-guid-1")}, - &events.LogMessage{Message: []byte("message 1"), Timestamp: proto.Int64(1000), AppId: proto.String("app-guid-1")}, - } - - fakeNoaaConsumer.RecentLogsReturns(l, nil) - }) - - It("gets the logs for the requested app", func() { - repo.RecentLogsFor("app-guid-1") - arg, _ := fakeNoaaConsumer.RecentLogsArgsForCall(0) - Expect(arg).To(Equal("app-guid-1")) - }) - - It("returns the sorted log messages", func() { - messages, err := repo.RecentLogsFor("app-guid") - Expect(err).NotTo(HaveOccurred()) - - Expect(string(messages[0].Message)).To(Equal("message 1")) - Expect(string(messages[1].Message)).To(Equal("message 2")) - Expect(string(messages[2].Message)).To(Equal("message 3")) - }) - }) - }) - - Describe("tailing logs", func() { - - Context("when an error occurs", func() { - It("returns an error when it occurs", func() { - fakeNoaaConsumer.TailFunc = func(logChan chan<- *events.LogMessage, errChan chan<- error) { - errChan <- errors.New("oops") - } - - err := repo.TailNoaaLogsFor("app-guid", func() {}, func(*events.LogMessage) {}) - Expect(err).To(Equal(errors.New("oops"))) - }) - }) - - Context("when a noaa_errors.UnauthorizedError occurs", func() { - It("refreshes the access token and tail logs once more", func() { - calledOnce := false - fakeNoaaConsumer.TailFunc = func(logChan chan<- *events.LogMessage, errChan chan<- error) { - if !calledOnce { - calledOnce = true - errChan <- noaa_errors.NewUnauthorizedError("i'm sorry dave") - } else { - errChan <- errors.New("2nd Error") - } - } - - err := repo.TailNoaaLogsFor("app-guid", func() {}, func(*events.LogMessage) {}) - Ω(fakeTokenRefresher.RefreshTokenCalled).To(BeTrue()) - Ω(err.Error()).To(Equal("2nd Error")) - }) - }) - - Context("when no error occurs", func() { - It("asks for the logs for the given app", func() { - fakeNoaaConsumer.TailFunc = func(logChan chan<- *events.LogMessage, errChan chan<- error) { - errChan <- errors.New("quit Tailing") - } - - repo.TailNoaaLogsFor("app-guid", func() {}, func(msg *events.LogMessage) {}) - - appGuid, token, _, _ := fakeNoaaConsumer.TailingLogsArgsForCall(0) - Ω(appGuid).To(Equal("app-guid")) - Ω(token).To(Equal("the-access-token")) - }) - - It("sets the on connect callback", func() { - fakeNoaaConsumer.TailFunc = func(logChan chan<- *events.LogMessage, errChan chan<- error) { - errChan <- errors.New("quit Tailing") - } - - var cb = func() { return } - repo.TailNoaaLogsFor("app-guid", cb, func(msg *events.LogMessage) {}) - - Ω(fakeNoaaConsumer.SetOnConnectCallbackCallCount()).To(Equal(1)) - arg := fakeNoaaConsumer.SetOnConnectCallbackArgsForCall(0) - Ω(reflect.ValueOf(arg).Pointer() == reflect.ValueOf(cb).Pointer()).To(BeTrue()) - }) - }) - - Context("and the buffer time is sufficient for sorting", func() { - BeforeEach(func() { - api.BufferTime = 250 * time.Millisecond - repo = api.NewLogsNoaaRepository(config, fakeNoaaConsumer, fakeTokenRefresher) - }) - - It("sorts the messages before yielding them", func() { - fakeNoaaConsumer.TailFunc = func(logChan chan<- *events.LogMessage, errChan chan<- error) { - logChan <- makeLogMessage("hello3", 300) - logChan <- makeLogMessage("hello2", 200) - logChan <- makeLogMessage("hello1", 100) - time.Sleep(250 * time.Millisecond) - } - - receivedMessages := []*events.LogMessage{} - repo.TailNoaaLogsFor("app-guid", func() {}, func(msg *events.LogMessage) { - receivedMessages = append(receivedMessages, msg) - if len(receivedMessages) >= 3 { - repo.Close() - } - }) - - Expect(receivedMessages).To(Equal([]*events.LogMessage{ - makeLogMessage("hello1", 100), - makeLogMessage("hello2", 200), - makeLogMessage("hello3", 300), - })) - - }) - }) - - Context("and the buffer time is very long", func() { - BeforeEach(func() { - api.BufferTime = 30 * time.Second - repo = api.NewLogsNoaaRepository(config, fakeNoaaConsumer, fakeTokenRefresher) - }) - - It("flushes remaining log messages when Close is called", func() { - fakeNoaaConsumer.TailFunc = func(logChan chan<- *events.LogMessage, errChan chan<- error) { - logChan <- makeLogMessage("hello3", 300) - logChan <- makeLogMessage("hello2", 200) - logChan <- makeLogMessage("hello1", 100) - } - - receivedMessages := []*events.LogMessage{} - - go func() { - time.Sleep(500 * time.Millisecond) - repo.Close() - }() - - repo.TailNoaaLogsFor("app-guid", func() {}, func(msg *events.LogMessage) { - receivedMessages = append(receivedMessages, msg) - }) - - Expect(receivedMessages).To(Equal([]*events.LogMessage{ - makeLogMessage("hello1", 100), - makeLogMessage("hello2", 200), - makeLogMessage("hello3", 300), - })) - - }) - }) - }) - - Describe("GetContainerMetrics()", func() { - - var ( - fakeNoaaConsumer *testapi.FakeNoaaConsumer - config core_config.ReadWriter - fakeTokenRefresher *testapi.FakeAuthenticationRepository - repo api.LogsNoaaRepository - ) - - BeforeEach(func() { - fakeNoaaConsumer = &testapi.FakeNoaaConsumer{} - config = testconfig.NewRepositoryWithDefaults() - fakeTokenRefresher = &testapi.FakeAuthenticationRepository{} - repo = api.NewLogsNoaaRepository(config, fakeNoaaConsumer, fakeTokenRefresher) - }) - - It("populates metrics for an app instance", func() { - var ( - i int32 = 2 - cpu float64 = 50 - mem uint64 = 128 - disk uint64 = 256 - err error - ) - - fakeNoaaConsumer.GetContainerMetricsReturns([]*events.ContainerMetric{ - &events.ContainerMetric{ - InstanceIndex: &i, - CpuPercentage: &cpu, - MemoryBytes: &mem, - DiskBytes: &disk, - }, - }, nil) - - instances := []models.AppInstanceFields{ - models.AppInstanceFields{}, - models.AppInstanceFields{}, - models.AppInstanceFields{}, - } - - instances, err = repo.GetContainerMetrics("app-guid", instances) - Ω(err).ToNot(HaveOccurred()) - Ω(instances[0].CpuUsage).To(Equal(float64(0))) - Ω(instances[1].CpuUsage).To(Equal(float64(0))) - Ω(instances[2].CpuUsage).To(Equal(cpu)) - Ω(instances[2].MemUsage).To(Equal(int64(mem))) - Ω(instances[2].DiskUsage).To(Equal(int64(disk))) - }) - - It("refreshes token and get metric once more if token has expired.", func() { - fakeNoaaConsumer.GetContainerMetricsReturns([]*events.ContainerMetric{}, - noaa_errors.NewUnauthorizedError("Unauthorized token")) - - instances := []models.AppInstanceFields{ - models.AppInstanceFields{}, - } - - instances, _ = repo.GetContainerMetrics("app-guid", instances) - Ω(fakeTokenRefresher.RefreshTokenCalled).To(Equal(true)) - Ω(fakeNoaaConsumer.GetContainerMetricsCallCount()).To(Equal(2)) - }) - - }) - -}) - -func makeLogMessage(message string, timestamp int64) *events.LogMessage { - messageType := events.LogMessage_OUT - sourceName := "DEA" - return &events.LogMessage{ - Message: []byte(message), - AppId: proto.String("app-guid"), - MessageType: &messageType, - SourceType: &sourceName, - Timestamp: proto.Int64(timestamp), - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_old_consumer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_old_consumer.go deleted file mode 100644 index b0fe0f2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_old_consumer.go +++ /dev/null @@ -1,130 +0,0 @@ -package api - -import ( - "errors" - "time" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - consumer "github.com/cloudfoundry/loggregator_consumer" - "github.com/cloudfoundry/loggregatorlib/logmessage" - noaa_errors "github.com/cloudfoundry/noaa/errors" -) - -type OldLogsRepository interface { - RecentLogsFor(appGuid string) ([]*logmessage.LogMessage, error) - TailLogsFor(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error - Close() -} - -type LoggregatorLogsRepository struct { - consumer consumer.LoggregatorConsumer - config core_config.Reader - // TrustedCerts []tls.Certificate - tokenRefresher authentication.TokenRefresher - messageQueue *Loggregator_SortedMessageQueue - - onMessage func(*logmessage.LogMessage) -} - -// var BufferTime time.Duration = 5 * time.Second - -func NewLoggregatorLogsRepository(config core_config.Reader, consumer consumer.LoggregatorConsumer, refresher authentication.TokenRefresher) OldLogsRepository { - return &LoggregatorLogsRepository{ - config: config, - consumer: consumer, - tokenRefresher: refresher, - messageQueue: NewLoggregator_SortedMessageQueue(BufferTime, time.Now), - } -} - -func (repo *LoggregatorLogsRepository) Close() { - repo.consumer.Close() - repo.flushMessageQueue() -} - -func (repo *LoggregatorLogsRepository) RecentLogsFor(appGuid string) ([]*logmessage.LogMessage, error) { - messages, err := repo.consumer.Recent(appGuid, repo.config.AccessToken()) - - switch err.(type) { - case nil: // do nothing - case *noaa_errors.UnauthorizedError: - repo.tokenRefresher.RefreshAuthToken() - messages, err = repo.consumer.Recent(appGuid, repo.config.AccessToken()) - default: - return messages, err - } - - consumer.SortRecent(messages) - return messages, err -} - -func (repo *LoggregatorLogsRepository) TailLogsFor(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error { - repo.onMessage = onMessage - - endpoint := repo.config.LoggregatorEndpoint() - if endpoint == "" { - return errors.New(T("Loggregator endpoint missing from config file")) - } - - repo.consumer.SetOnConnectCallback(onConnect) - logChan, err := repo.consumer.Tail(appGuid, repo.config.AccessToken()) - switch err.(type) { - case nil: // do nothing - case *noaa_errors.UnauthorizedError: - repo.tokenRefresher.RefreshAuthToken() - logChan, err = repo.consumer.Tail(appGuid, repo.config.AccessToken()) - default: - return err - } - - if err != nil { - return err - } - - repo.bufferMessages(logChan, onMessage) - return nil -} - -func (repo *LoggregatorLogsRepository) bufferMessages(logChan <-chan *logmessage.LogMessage, onMessage func(*logmessage.LogMessage)) { - - for { - sendMessages(repo.messageQueue, onMessage) - - select { - case msg, ok := <-logChan: - if !ok { - return - } - repo.messageQueue.PushMessage(msg) - default: - time.Sleep(1 * time.Millisecond) - } - } -} - -func (repo *LoggregatorLogsRepository) flushMessageQueue() { - if repo.onMessage == nil { - return - } - - for { - message := repo.messageQueue.PopMessage() - if message == nil { - break - } - - repo.onMessage(message) - } - - repo.onMessage = nil -} - -func sendMessages(queue *Loggregator_SortedMessageQueue, onMessage func(*logmessage.LogMessage)) { - for queue.NextTimestamp() < time.Now().UnixNano() { - msg := queue.PopMessage() - onMessage(msg) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_old_consumer_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_old_consumer_test.go deleted file mode 100644 index d798700..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/logs_old_consumer_test.go +++ /dev/null @@ -1,255 +0,0 @@ -package api_test - -import ( - "code.google.com/p/gogoprotobuf/proto" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/loggregatorlib/logmessage" - noaa_errors "github.com/cloudfoundry/noaa/errors" - - "time" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("loggregator logs repository", func() { - var ( - fakeConsumer *testapi.FakeLoggregatorConsumer - logsRepo OldLogsRepository - configRepo core_config.ReadWriter - fakeTokenRefresher *testapi.FakeAuthenticationRepository - ) - - BeforeEach(func() { - BufferTime = 1 * time.Millisecond - fakeConsumer = testapi.NewFakeLoggregatorConsumer() - configRepo = testconfig.NewRepositoryWithDefaults() - configRepo.SetLoggregatorEndpoint("loggregator-server.test.com") - configRepo.SetAccessToken("the-access-token") - fakeTokenRefresher = &testapi.FakeAuthenticationRepository{} - }) - - JustBeforeEach(func() { - logsRepo = NewLoggregatorLogsRepository(configRepo, fakeConsumer, fakeTokenRefresher) - }) - - Describe("RecentLogsFor", func() { - Context("when a noaa_errors.UnauthorizedError occurs", func() { - BeforeEach(func() { - fakeConsumer.RecentReturns.Err = []error{ - noaa_errors.NewUnauthorizedError("i'm sorry dave"), - nil, - } - }) - - It("refreshes the access token", func() { - _, err := logsRepo.RecentLogsFor("app-guid") - Expect(err).ToNot(HaveOccurred()) - Expect(fakeTokenRefresher.RefreshTokenCalled).To(BeTrue()) - }) - }) - - Context("when an error occurs", func() { - BeforeEach(func() { - fakeConsumer.RecentReturns.Err = []error{errors.New("oops")} - }) - - It("returns the error", func() { - _, err := logsRepo.RecentLogsFor("app-guid") - Expect(err).To(Equal(errors.New("oops"))) - }) - }) - - Context("when an error does not occur", func() { - BeforeEach(func() { - fakeConsumer.RecentReturns.Messages = []*logmessage.LogMessage{ - makeOldLogMessage("My message 2", int64(2000)), - makeOldLogMessage("My message 1", int64(1000)), - } - }) - - It("gets the logs for the requested app", func() { - logsRepo.RecentLogsFor("app-guid") - Expect(fakeConsumer.RecentCalledWith.AppGuid).To(Equal("app-guid")) - }) - - It("writes the sorted log messages onto the provided channel", func() { - messages, err := logsRepo.RecentLogsFor("app-guid") - Expect(err).NotTo(HaveOccurred()) - - Expect(string(messages[0].Message)).To(Equal("My message 1")) - Expect(string(messages[1].Message)).To(Equal("My message 2")) - }) - }) - }) - - Describe("tailing logs", func() { - Context("when an error occurs", func() { - BeforeEach(func() { - fakeConsumer.TailFunc = func(_, _ string) (<-chan *logmessage.LogMessage, error) { - return nil, errors.New("oops") - } - }) - - It("returns an error", func() { - err := logsRepo.TailLogsFor("app-guid", func() {}, func(*logmessage.LogMessage) {}) - Expect(err).To(Equal(errors.New("oops"))) - }) - }) - - Context("when a LoggregatorConsumer.UnauthorizedError occurs", func() { - - It("refreshes the access token", func(done Done) { - calledOnce := false - fakeConsumer.TailFunc = func(_, _ string) (<-chan *logmessage.LogMessage, error) { - if !calledOnce { - calledOnce = true - return nil, noaa_errors.NewUnauthorizedError("i'm sorry dave") - } else { - close(done) - return nil, nil - } - } - - err := logsRepo.TailLogsFor("app-guid", func() {}, func(*logmessage.LogMessage) {}) - Expect(err).ToNot(HaveOccurred()) - Expect(fakeTokenRefresher.RefreshTokenCalled).To(BeTrue()) - }) - - Context("when LoggregatorConsumer.UnauthorizedError occurs again", func() { - It("returns an error", func(done Done) { - fakeConsumer.TailFunc = func(_, _ string) (<-chan *logmessage.LogMessage, error) { - return nil, noaa_errors.NewUnauthorizedError("All the errors") - } - - err := logsRepo.TailLogsFor("app-guid", func() {}, func(*logmessage.LogMessage) {}) - Expect(err).To(HaveOccurred()) - close(done) - }) - }) - }) - - Context("when no error occurs", func() { - It("asks for the logs for the given app", func(done Done) { - fakeConsumer.TailFunc = func(appGuid, token string) (<-chan *logmessage.LogMessage, error) { - Expect(appGuid).To(Equal("app-guid")) - Expect(token).To(Equal("the-access-token")) - close(done) - return nil, nil - } - - logsRepo.TailLogsFor("app-guid", func() {}, func(msg *logmessage.LogMessage) {}) - }) - - It("sets the on connect callback", func(done Done) { - fakeConsumer.TailFunc = func(_, _ string) (<-chan *logmessage.LogMessage, error) { - close(done) - return nil, nil - } - - called := false - logsRepo.TailLogsFor("app-guid", func() { called = true }, func(msg *logmessage.LogMessage) {}) - fakeConsumer.OnConnectCallback() - Expect(called).To(BeTrue()) - }) - - Context("and the buffer time is sufficient for sorting", func() { - BeforeEach(func() { - BufferTime = 250 * time.Millisecond - }) - - It("sorts the messages before yielding them", func(done Done) { - fakeConsumer.TailFunc = func(_, _ string) (<-chan *logmessage.LogMessage, error) { - logChan := make(chan *logmessage.LogMessage) - go func() { - logChan <- makeOldLogMessage("hello3", 300) - logChan <- makeOldLogMessage("hello2", 200) - logChan <- makeOldLogMessage("hello1", 100) - fakeConsumer.WaitForClose() - close(logChan) - }() - - return logChan, nil - } - - receivedMessages := []*logmessage.LogMessage{} - err := logsRepo.TailLogsFor("app-guid", func() {}, func(msg *logmessage.LogMessage) { - receivedMessages = append(receivedMessages, msg) - if len(receivedMessages) >= 3 { - logsRepo.Close() - } - }) - - Expect(err).NotTo(HaveOccurred()) - - Expect(receivedMessages).To(Equal([]*logmessage.LogMessage{ - makeOldLogMessage("hello1", 100), - makeOldLogMessage("hello2", 200), - makeOldLogMessage("hello3", 300), - })) - - close(done) - }) - }) - - Context("and the buffer time is very long", func() { - BeforeEach(func() { - BufferTime = 30 * time.Second - }) - - It("flushes remaining log messages when Close is called", func(done Done) { - synchronizationChannel := make(chan (bool)) - - fakeConsumer.TailFunc = func(_, _ string) (<-chan *logmessage.LogMessage, error) { - fakeConsumer.OnConnectCallback() - logChan := make(chan *logmessage.LogMessage) - go func() { - logChan <- makeOldLogMessage("One does not simply consume a log message", 1000) - synchronizationChannel <- true - fakeConsumer.WaitForClose() - close(logChan) - }() - - return logChan, nil - } - - receivedMessages := []*logmessage.LogMessage{} - - go func() { - defer GinkgoRecover() - - <-synchronizationChannel - - Expect(receivedMessages).To(BeEmpty()) - logsRepo.Close() - Expect(receivedMessages).ToNot(BeEmpty()) - - done <- true - }() - - err := logsRepo.TailLogsFor("app-guid", func() {}, func(msg *logmessage.LogMessage) { - receivedMessages = append(receivedMessages, msg) - }) - - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) - }) -}) - -func makeOldLogMessage(message string, timestamp int64) *logmessage.LogMessage { - messageType := logmessage.LogMessage_OUT - sourceName := "DEA" - return &logmessage.LogMessage{ - Message: []byte(message), - AppId: proto.String("my-app-guid"), - MessageType: &messageType, - SourceName: &sourceName, - Timestamp: proto.Int64(timestamp), - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/noaaConsumer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/noaaConsumer.go deleted file mode 100644 index bd1f59d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/noaaConsumer.go +++ /dev/null @@ -1,44 +0,0 @@ -package api - -import ( - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/sonde-go/events" -) - -type NoaaConsumer interface { - GetContainerMetrics(string, string) ([]*events.ContainerMetric, error) - RecentLogs(string, string) ([]*events.LogMessage, error) - TailingLogs(string, string, chan<- *events.LogMessage, chan<- error) - SetOnConnectCallback(func()) - Close() error -} - -type noaaConsumer struct { - consumer *noaa.Consumer -} - -func NewNoaaConsumer(consumer *noaa.Consumer) NoaaConsumer { - return &noaaConsumer{ - consumer: consumer, - } -} - -func (n *noaaConsumer) GetContainerMetrics(appGuid, token string) ([]*events.ContainerMetric, error) { - return n.consumer.ContainerMetrics(appGuid, token) -} - -func (n *noaaConsumer) RecentLogs(appGuid string, authToken string) ([]*events.LogMessage, error) { - return n.consumer.RecentLogs(appGuid, authToken) -} - -func (n *noaaConsumer) TailingLogs(appGuid string, authToken string, outputChan chan<- *events.LogMessage, errorChan chan<- error) { - n.consumer.TailingLogs(appGuid, authToken, outputChan, errorChan) -} - -func (n *noaaConsumer) SetOnConnectCallback(cb func()) { - n.consumer.SetOnConnectCallback(cb) -} - -func (n *noaaConsumer) Close() error { - return n.consumer.Close() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/fakes/fake_organization_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/fakes/fake_organization_repository.go deleted file mode 100644 index 475df00..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/fakes/fake_organization_repository.go +++ /dev/null @@ -1,336 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeOrganizationRepository struct { - ListOrgsStub func() (orgs []models.Organization, apiErr error) - listOrgsMutex sync.RWMutex - listOrgsArgsForCall []struct{} - listOrgsReturns struct { - result1 []models.Organization - result2 error - } - GetManyOrgsByGuidStub func(orgGuids []string) (orgs []models.Organization, apiErr error) - getManyOrgsByGuidMutex sync.RWMutex - getManyOrgsByGuidArgsForCall []struct { - orgGuids []string - } - getManyOrgsByGuidReturns struct { - result1 []models.Organization - result2 error - } - FindByNameStub func(name string) (org models.Organization, apiErr error) - findByNameMutex sync.RWMutex - findByNameArgsForCall []struct { - name string - } - findByNameReturns struct { - result1 models.Organization - result2 error - } - CreateStub func(org models.Organization) (apiErr error) - createMutex sync.RWMutex - createArgsForCall []struct { - org models.Organization - } - createReturns struct { - result1 error - } - RenameStub func(orgGuid string, name string) (apiErr error) - renameMutex sync.RWMutex - renameArgsForCall []struct { - orgGuid string - name string - } - renameReturns struct { - result1 error - } - DeleteStub func(orgGuid string) (apiErr error) - deleteMutex sync.RWMutex - deleteArgsForCall []struct { - orgGuid string - } - deleteReturns struct { - result1 error - } - SharePrivateDomainStub func(orgGuid string, domainGuid string) (apiErr error) - sharePrivateDomainMutex sync.RWMutex - sharePrivateDomainArgsForCall []struct { - orgGuid string - domainGuid string - } - sharePrivateDomainReturns struct { - result1 error - } - UnsharePrivateDomainStub func(orgGuid string, domainGuid string) (apiErr error) - unsharePrivateDomainMutex sync.RWMutex - unsharePrivateDomainArgsForCall []struct { - orgGuid string - domainGuid string - } - unsharePrivateDomainReturns struct { - result1 error - } -} - -func (fake *FakeOrganizationRepository) ListOrgs() (orgs []models.Organization, apiErr error) { - fake.listOrgsMutex.Lock() - fake.listOrgsArgsForCall = append(fake.listOrgsArgsForCall, struct{}{}) - fake.listOrgsMutex.Unlock() - if fake.ListOrgsStub != nil { - return fake.ListOrgsStub() - } else { - return fake.listOrgsReturns.result1, fake.listOrgsReturns.result2 - } -} - -func (fake *FakeOrganizationRepository) ListOrgsCallCount() int { - fake.listOrgsMutex.RLock() - defer fake.listOrgsMutex.RUnlock() - return len(fake.listOrgsArgsForCall) -} - -func (fake *FakeOrganizationRepository) ListOrgsReturns(result1 []models.Organization, result2 error) { - fake.ListOrgsStub = nil - fake.listOrgsReturns = struct { - result1 []models.Organization - result2 error - }{result1, result2} -} - -func (fake *FakeOrganizationRepository) GetManyOrgsByGuid(orgGuids []string) (orgs []models.Organization, apiErr error) { - fake.getManyOrgsByGuidMutex.Lock() - fake.getManyOrgsByGuidArgsForCall = append(fake.getManyOrgsByGuidArgsForCall, struct { - orgGuids []string - }{orgGuids}) - fake.getManyOrgsByGuidMutex.Unlock() - if fake.GetManyOrgsByGuidStub != nil { - return fake.GetManyOrgsByGuidStub(orgGuids) - } else { - return fake.getManyOrgsByGuidReturns.result1, fake.getManyOrgsByGuidReturns.result2 - } -} - -func (fake *FakeOrganizationRepository) GetManyOrgsByGuidCallCount() int { - fake.getManyOrgsByGuidMutex.RLock() - defer fake.getManyOrgsByGuidMutex.RUnlock() - return len(fake.getManyOrgsByGuidArgsForCall) -} - -func (fake *FakeOrganizationRepository) GetManyOrgsByGuidArgsForCall(i int) []string { - fake.getManyOrgsByGuidMutex.RLock() - defer fake.getManyOrgsByGuidMutex.RUnlock() - return fake.getManyOrgsByGuidArgsForCall[i].orgGuids -} - -func (fake *FakeOrganizationRepository) GetManyOrgsByGuidReturns(result1 []models.Organization, result2 error) { - fake.GetManyOrgsByGuidStub = nil - fake.getManyOrgsByGuidReturns = struct { - result1 []models.Organization - result2 error - }{result1, result2} -} - -func (fake *FakeOrganizationRepository) FindByName(name string) (org models.Organization, apiErr error) { - fake.findByNameMutex.Lock() - fake.findByNameArgsForCall = append(fake.findByNameArgsForCall, struct { - name string - }{name}) - fake.findByNameMutex.Unlock() - if fake.FindByNameStub != nil { - return fake.FindByNameStub(name) - } else { - return fake.findByNameReturns.result1, fake.findByNameReturns.result2 - } -} - -func (fake *FakeOrganizationRepository) FindByNameCallCount() int { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return len(fake.findByNameArgsForCall) -} - -func (fake *FakeOrganizationRepository) FindByNameArgsForCall(i int) string { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return fake.findByNameArgsForCall[i].name -} - -func (fake *FakeOrganizationRepository) FindByNameReturns(result1 models.Organization, result2 error) { - fake.FindByNameStub = nil - fake.findByNameReturns = struct { - result1 models.Organization - result2 error - }{result1, result2} -} - -func (fake *FakeOrganizationRepository) Create(org models.Organization) (apiErr error) { - fake.createMutex.Lock() - fake.createArgsForCall = append(fake.createArgsForCall, struct { - org models.Organization - }{org}) - fake.createMutex.Unlock() - if fake.CreateStub != nil { - return fake.CreateStub(org) - } else { - return fake.createReturns.result1 - } -} - -func (fake *FakeOrganizationRepository) CreateCallCount() int { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return len(fake.createArgsForCall) -} - -func (fake *FakeOrganizationRepository) CreateArgsForCall(i int) models.Organization { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return fake.createArgsForCall[i].org -} - -func (fake *FakeOrganizationRepository) CreateReturns(result1 error) { - fake.CreateStub = nil - fake.createReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeOrganizationRepository) Rename(orgGuid string, name string) (apiErr error) { - fake.renameMutex.Lock() - fake.renameArgsForCall = append(fake.renameArgsForCall, struct { - orgGuid string - name string - }{orgGuid, name}) - fake.renameMutex.Unlock() - if fake.RenameStub != nil { - return fake.RenameStub(orgGuid, name) - } else { - return fake.renameReturns.result1 - } -} - -func (fake *FakeOrganizationRepository) RenameCallCount() int { - fake.renameMutex.RLock() - defer fake.renameMutex.RUnlock() - return len(fake.renameArgsForCall) -} - -func (fake *FakeOrganizationRepository) RenameArgsForCall(i int) (string, string) { - fake.renameMutex.RLock() - defer fake.renameMutex.RUnlock() - return fake.renameArgsForCall[i].orgGuid, fake.renameArgsForCall[i].name -} - -func (fake *FakeOrganizationRepository) RenameReturns(result1 error) { - fake.RenameStub = nil - fake.renameReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeOrganizationRepository) Delete(orgGuid string) (apiErr error) { - fake.deleteMutex.Lock() - fake.deleteArgsForCall = append(fake.deleteArgsForCall, struct { - orgGuid string - }{orgGuid}) - fake.deleteMutex.Unlock() - if fake.DeleteStub != nil { - return fake.DeleteStub(orgGuid) - } else { - return fake.deleteReturns.result1 - } -} - -func (fake *FakeOrganizationRepository) DeleteCallCount() int { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return len(fake.deleteArgsForCall) -} - -func (fake *FakeOrganizationRepository) DeleteArgsForCall(i int) string { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return fake.deleteArgsForCall[i].orgGuid -} - -func (fake *FakeOrganizationRepository) DeleteReturns(result1 error) { - fake.DeleteStub = nil - fake.deleteReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeOrganizationRepository) SharePrivateDomain(orgGuid string, domainGuid string) (apiErr error) { - fake.sharePrivateDomainMutex.Lock() - fake.sharePrivateDomainArgsForCall = append(fake.sharePrivateDomainArgsForCall, struct { - orgGuid string - domainGuid string - }{orgGuid, domainGuid}) - fake.sharePrivateDomainMutex.Unlock() - if fake.SharePrivateDomainStub != nil { - return fake.SharePrivateDomainStub(orgGuid, domainGuid) - } else { - return fake.sharePrivateDomainReturns.result1 - } -} - -func (fake *FakeOrganizationRepository) SharePrivateDomainCallCount() int { - fake.sharePrivateDomainMutex.RLock() - defer fake.sharePrivateDomainMutex.RUnlock() - return len(fake.sharePrivateDomainArgsForCall) -} - -func (fake *FakeOrganizationRepository) SharePrivateDomainArgsForCall(i int) (string, string) { - fake.sharePrivateDomainMutex.RLock() - defer fake.sharePrivateDomainMutex.RUnlock() - return fake.sharePrivateDomainArgsForCall[i].orgGuid, fake.sharePrivateDomainArgsForCall[i].domainGuid -} - -func (fake *FakeOrganizationRepository) SharePrivateDomainReturns(result1 error) { - fake.SharePrivateDomainStub = nil - fake.sharePrivateDomainReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeOrganizationRepository) UnsharePrivateDomain(orgGuid string, domainGuid string) (apiErr error) { - fake.unsharePrivateDomainMutex.Lock() - fake.unsharePrivateDomainArgsForCall = append(fake.unsharePrivateDomainArgsForCall, struct { - orgGuid string - domainGuid string - }{orgGuid, domainGuid}) - fake.unsharePrivateDomainMutex.Unlock() - if fake.UnsharePrivateDomainStub != nil { - return fake.UnsharePrivateDomainStub(orgGuid, domainGuid) - } else { - return fake.unsharePrivateDomainReturns.result1 - } -} - -func (fake *FakeOrganizationRepository) UnsharePrivateDomainCallCount() int { - fake.unsharePrivateDomainMutex.RLock() - defer fake.unsharePrivateDomainMutex.RUnlock() - return len(fake.unsharePrivateDomainArgsForCall) -} - -func (fake *FakeOrganizationRepository) UnsharePrivateDomainArgsForCall(i int) (string, string) { - fake.unsharePrivateDomainMutex.RLock() - defer fake.unsharePrivateDomainMutex.RUnlock() - return fake.unsharePrivateDomainArgsForCall[i].orgGuid, fake.unsharePrivateDomainArgsForCall[i].domainGuid -} - -func (fake *FakeOrganizationRepository) UnsharePrivateDomainReturns(result1 error) { - fake.UnsharePrivateDomainStub = nil - fake.unsharePrivateDomainReturns = struct { - result1 error - }{result1} -} - -var _ organizations.OrganizationRepository = new(FakeOrganizationRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations.go deleted file mode 100644 index d362bf4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations.go +++ /dev/null @@ -1,117 +0,0 @@ -package organizations - -import ( - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -//go:generate counterfeiter -o fakes/fake_organization_repository.go . OrganizationRepository -type OrganizationRepository interface { - ListOrgs() (orgs []models.Organization, apiErr error) - GetManyOrgsByGuid(orgGuids []string) (orgs []models.Organization, apiErr error) - FindByName(name string) (org models.Organization, apiErr error) - Create(org models.Organization) (apiErr error) - Rename(orgGuid string, name string) (apiErr error) - Delete(orgGuid string) (apiErr error) - SharePrivateDomain(orgGuid string, domainGuid string) (apiErr error) - UnsharePrivateDomain(orgGuid string, domainGuid string) (apiErr error) -} - -type CloudControllerOrganizationRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerOrganizationRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerOrganizationRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerOrganizationRepository) ListOrgs() ([]models.Organization, error) { - orgs := []models.Organization{} - err := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - "/v2/organizations", - resources.OrganizationResource{}, - func(resource interface{}) bool { - orgResource, ok := resource.(resources.OrganizationResource) - if ok { - orgs = append(orgs, orgResource.ToModel()) - return true - } else { - return false - } - }) - return orgs, err -} - -func (repo CloudControllerOrganizationRepository) GetManyOrgsByGuid(orgGuids []string) (orgs []models.Organization, err error) { - for _, orgGuid := range orgGuids { - url := fmt.Sprintf("%s/v2/organizations/%s", repo.config.ApiEndpoint(), orgGuid) - orgResource := resources.OrganizationResource{} - err = repo.gateway.GetResource(url, &orgResource) - if err != nil { - return nil, err - } else { - orgs = append(orgs, orgResource.ToModel()) - } - } - return -} - -func (repo CloudControllerOrganizationRepository) FindByName(name string) (org models.Organization, apiErr error) { - found := false - apiErr = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/organizations?q=%s&inline-relations-depth=1", url.QueryEscape("name:"+strings.ToLower(name))), - resources.OrganizationResource{}, - func(resource interface{}) bool { - org = resource.(resources.OrganizationResource).ToModel() - found = true - return false - }) - - if apiErr == nil && !found { - apiErr = errors.NewModelNotFoundError("Organization", name) - } - - return -} - -func (repo CloudControllerOrganizationRepository) Create(org models.Organization) (apiErr error) { - data := fmt.Sprintf(`{"name":"%s"`, org.Name) - if org.QuotaDefinition.Guid != "" { - data = data + fmt.Sprintf(`, "quota_definition_guid":"%s"`, org.QuotaDefinition.Guid) - } - data = data + "}" - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), "/v2/organizations", strings.NewReader(data)) -} - -func (repo CloudControllerOrganizationRepository) Rename(orgGuid string, name string) (apiErr error) { - url := fmt.Sprintf("/v2/organizations/%s", orgGuid) - data := fmt.Sprintf(`{"name":"%s"}`, name) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), url, strings.NewReader(data)) -} - -func (repo CloudControllerOrganizationRepository) Delete(orgGuid string) (apiErr error) { - url := fmt.Sprintf("/v2/organizations/%s?recursive=true", orgGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), url) -} - -func (repo CloudControllerOrganizationRepository) SharePrivateDomain(orgGuid string, domainGuid string) error { - url := fmt.Sprintf("/v2/organizations/%s/private_domains/%s", orgGuid, domainGuid) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), url, nil) -} - -func (repo CloudControllerOrganizationRepository) UnsharePrivateDomain(orgGuid string, domainGuid string) error { - url := fmt.Sprintf("/v2/organizations/%s/private_domains/%s", orgGuid, domainGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), url) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations_suite_test.go deleted file mode 100644 index 098a677..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package organizations_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestOrganizations(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Organizations Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations_test.go deleted file mode 100644 index c9f16ef..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/organizations/organizations_test.go +++ /dev/null @@ -1,329 +0,0 @@ -package organizations_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/organizations" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Organization Repository", func() { - Describe("listing organizations", func() { - It("lists the orgs from the the /v2/orgs endpoint", func() { - firstPageOrgsRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ - "next_url": "/v2/organizations?page=2", - "resources": [ - { - "metadata": { "guid": "org1-guid" }, - "entity": { "name": "Org1" } - }, - { - "metadata": { "guid": "org2-guid" }, - "entity": { "name": "Org2" } - } - ]}`}, - }) - - secondPageOrgsRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations?page=2", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": [ - { - "metadata": { "guid": "org3-guid" }, - "entity": { "name": "Org3" } - } - ]}`}, - }) - - testserver, handler, repo := createOrganizationRepo(firstPageOrgsRequest, secondPageOrgsRequest) - defer testserver.Close() - - orgs := []models.Organization{} - orgs, apiErr := repo.ListOrgs() - - Expect(len(orgs)).To(Equal(3)) - Expect(orgs[0].Guid).To(Equal("org1-guid")) - Expect(orgs[1].Guid).To(Equal("org2-guid")) - Expect(orgs[2].Guid).To(Equal("org3-guid")) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - It("does not call the provided function when there are no orgs found", func() { - emptyOrgsRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - }) - - testserver, handler, repo := createOrganizationRepo(emptyOrgsRequest) - defer testserver.Close() - - _, apiErr := repo.ListOrgs() - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".GetManyOrgsByGuid", func() { - It("requests each org", func() { - firstOrgRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/org1-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ - "metadata": { "guid": "org1-guid" }, - "entity": { "name": "Org1" } - }`}, - }) - secondOrgRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/org2-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ - "metadata": { "guid": "org2-guid" }, - "entity": { "name": "Org2" } - }`}, - }) - testserver, handler, repo := createOrganizationRepo(firstOrgRequest, secondOrgRequest) - defer testserver.Close() - - orgGuids := []string{"org1-guid", "org2-guid"} - orgs, err := repo.GetManyOrgsByGuid(orgGuids) - Expect(err).NotTo(HaveOccurred()) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(len(orgs)).To(Equal(2)) - Expect(orgs[0].Guid).To(Equal("org1-guid")) - Expect(orgs[1].Guid).To(Equal("org2-guid")) - }) - }) - - Describe("finding organizations by name", func() { - It("returns the org with that name", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations?q=name%3Aorg1&inline-relations-depth=1", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": [{ - "metadata": { "guid": "org1-guid" }, - "entity": { - "name": "Org1", - "quota_definition": { - "entity": { - "name": "not-your-average-quota", - "memory_limit": 128 - } - }, - "spaces": [{ - "metadata": { "guid": "space1-guid" }, - "entity": { "name": "Space1" } - }], - "domains": [{ - "metadata": { "guid": "domain1-guid" }, - "entity": { "name": "cfapps.io" } - }], - "space_quota_definitions":[{ - "metadata": {"guid": "space-quota1-guid"}, - "entity": {"name": "space-quota1"} - }] - } - }]}`}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - existingOrg := models.Organization{} - existingOrg.Guid = "org1-guid" - existingOrg.Name = "Org1" - - org, apiErr := repo.FindByName("Org1") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(org.Name).To(Equal(existingOrg.Name)) - Expect(org.Guid).To(Equal(existingOrg.Guid)) - Expect(org.QuotaDefinition.Name).To(Equal("not-your-average-quota")) - Expect(org.QuotaDefinition.MemoryLimit).To(Equal(int64(128))) - Expect(len(org.Spaces)).To(Equal(1)) - Expect(org.Spaces[0].Name).To(Equal("Space1")) - Expect(org.Spaces[0].Guid).To(Equal("space1-guid")) - Expect(len(org.Domains)).To(Equal(1)) - Expect(org.Domains[0].Name).To(Equal("cfapps.io")) - Expect(org.Domains[0].Guid).To(Equal("domain1-guid")) - Expect(len(org.SpaceQuotas)).To(Equal(1)) - Expect(org.SpaceQuotas[0].Name).To(Equal("space-quota1")) - Expect(org.SpaceQuotas[0].Guid).To(Equal("space-quota1-guid")) - }) - - It("returns a ModelNotFoundError when the org cannot be found", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations?q=name%3Aorg1&inline-relations-depth=1", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - _, apiErr := repo.FindByName("org1") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - - It("returns an api error when the response is not successful", func() { - requestHandler := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations?q=name%3Aorg1&inline-relations-depth=1", - Response: testnet.TestResponse{Status: http.StatusBadGateway, Body: `{"resources": []}`}, - }) - - testserver, handler, repo := createOrganizationRepo(requestHandler) - defer testserver.Close() - - _, apiErr := repo.FindByName("org1") - _, ok := apiErr.(*errors.ModelNotFoundError) - Expect(ok).To(BeFalse()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".Create", func() { - It("creates the org and sends only the org name if the quota flag is not provided", func() { - org := models.Organization{ - OrganizationFields: models.OrganizationFields{ - Name: "my-org", - }} - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/organizations", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-org"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - apiErr := repo.Create(org) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("creates the org with the provided quota", func() { - org := models.Organization{ - OrganizationFields: models.OrganizationFields{ - Name: "my-org", - QuotaDefinition: models.QuotaFields{ - Guid: "my-quota-guid", - }, - }} - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/organizations", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-org", "quota_definition_guid":"my-quota-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - apiErr := repo.Create(org) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("renaming orgs", func() { - It("renames the org with the given guid", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/organizations/my-org-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-new-org"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - apiErr := repo.Rename("my-org-guid", "my-new-org") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("deleting orgs", func() { - It("deletes the org with the given guid", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/organizations/my-org-guid?recursive=true", - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - apiErr := repo.Delete("my-org-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("SharePrivateDomain", func() { - It("shares the private domain with the given org", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/organizations/my-org-guid/private_domains/domain-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - apiErr := repo.SharePrivateDomain("my-org-guid", "domain-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("UnsharePrivateDomain", func() { - It("unshares the private domain with the given org", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/organizations/my-org-guid/private_domains/domain-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - testserver, handler, repo := createOrganizationRepo(req) - defer testserver.Close() - - apiErr := repo.UnsharePrivateDomain("my-org-guid", "domain-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) -}) - -func createOrganizationRepo(reqs ...testnet.TestRequest) (testserver *httptest.Server, handler *testnet.TestHandler, repo OrganizationRepository) { - testserver, handler = testnet.NewServer(reqs) - - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(testserver.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerOrganizationRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password.go deleted file mode 100644 index 2e5f8ee..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password.go +++ /dev/null @@ -1,38 +0,0 @@ -package password - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/net" -) - -type PasswordRepository interface { - UpdatePassword(old string, new string) error -} - -type CloudControllerPasswordRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerPasswordRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerPasswordRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerPasswordRepository) UpdatePassword(old string, new string) error { - uaaEndpoint := repo.config.UaaEndpoint() - if uaaEndpoint == "" { - return errors.New(T("UAA endpoint missing from config file")) - } - - url := fmt.Sprintf("/Users/%s/password", repo.config.UserGuid()) - body := fmt.Sprintf(`{"password":"%s","oldPassword":"%s"}`, new, old) - - return repo.gateway.UpdateResource(uaaEndpoint, url, strings.NewReader(body)) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password_suite_test.go deleted file mode 100644 index f2d67b4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package password_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPassword(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Password Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password_test.go deleted file mode 100644 index 6001d75..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/password/password_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package password_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/password" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CloudControllerPasswordRepository", func() { - It("updates your password", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/Users/my-user-guid/password", - Matcher: testnet.RequestBodyMatcher(`{"password":"new-password","oldPassword":"old-password"}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - passwordUpdateServer, handler, repo := createPasswordRepo(req) - defer passwordUpdateServer.Close() - - apiErr := repo.UpdatePassword("old-password", "new-password") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) -}) - -func createPasswordRepo(req testnet.TestRequest) (passwordServer *httptest.Server, handler *testnet.TestHandler, repo PasswordRepository) { - passwordServer, handler = testnet.NewServer([]testnet.TestRequest{req}) - - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetUaaEndpoint(passwordServer.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerPasswordRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/fakes/fake_quota_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/fakes/fake_quota_repository.go deleted file mode 100644 index b296f8e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/fakes/fake_quota_repository.go +++ /dev/null @@ -1,245 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/quotas" - - "github.com/cloudfoundry/cli/cf/models" - - "sync" -) - -type FakeQuotaRepository struct { - FindAllStub func() (quotas []models.QuotaFields, apiErr error) - findAllMutex sync.RWMutex - findAllArgsForCall []struct{} - findAllReturns struct { - result1 []models.QuotaFields - result2 error - } - FindByNameStub func(name string) (quota models.QuotaFields, apiErr error) - findByNameMutex sync.RWMutex - findByNameArgsForCall []struct { - name string - } - findByNameReturns struct { - result1 models.QuotaFields - result2 error - } - AssignQuotaToOrgStub func(orgGuid, quotaGuid string) error - assignQuotaToOrgMutex sync.RWMutex - assignQuotaToOrgArgsForCall []struct { - orgGuid string - quotaGuid string - } - assignQuotaToOrgReturns struct { - result1 error - } - CreateStub func(quota models.QuotaFields) error - createMutex sync.RWMutex - createArgsForCall []struct { - quota models.QuotaFields - } - createReturns struct { - result1 error - } - UpdateStub func(quota models.QuotaFields) error - updateMutex sync.RWMutex - updateArgsForCall []struct { - quota models.QuotaFields - } - updateReturns struct { - result1 error - } - DeleteStub func(quotaGuid string) error - deleteMutex sync.RWMutex - deleteArgsForCall []struct { - quotaGuid string - } - deleteReturns struct { - result1 error - } -} - -func (fake *FakeQuotaRepository) FindAll() (quotas []models.QuotaFields, apiErr error) { - fake.findAllMutex.Lock() - defer fake.findAllMutex.Unlock() - fake.findAllArgsForCall = append(fake.findAllArgsForCall, struct{}{}) - if fake.FindAllStub != nil { - return fake.FindAllStub() - } else { - return fake.findAllReturns.result1, fake.findAllReturns.result2 - } -} - -func (fake *FakeQuotaRepository) FindAllCallCount() int { - fake.findAllMutex.RLock() - defer fake.findAllMutex.RUnlock() - return len(fake.findAllArgsForCall) -} - -func (fake *FakeQuotaRepository) FindAllReturns(result1 []models.QuotaFields, result2 error) { - fake.findAllReturns = struct { - result1 []models.QuotaFields - result2 error - }{result1, result2} -} - -func (fake *FakeQuotaRepository) FindByName(name string) (quota models.QuotaFields, apiErr error) { - fake.findByNameMutex.Lock() - defer fake.findByNameMutex.Unlock() - fake.findByNameArgsForCall = append(fake.findByNameArgsForCall, struct { - name string - }{name}) - if fake.FindByNameStub != nil { - return fake.FindByNameStub(name) - } else { - return fake.findByNameReturns.result1, fake.findByNameReturns.result2 - } -} - -func (fake *FakeQuotaRepository) FindByNameCallCount() int { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return len(fake.findByNameArgsForCall) -} - -func (fake *FakeQuotaRepository) FindByNameArgsForCall(i int) string { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return fake.findByNameArgsForCall[i].name -} - -func (fake *FakeQuotaRepository) FindByNameReturns(result1 models.QuotaFields, result2 error) { - fake.findByNameReturns = struct { - result1 models.QuotaFields - result2 error - }{result1, result2} -} - -func (fake *FakeQuotaRepository) AssignQuotaToOrg(orgGuid string, quotaGuid string) error { - fake.assignQuotaToOrgMutex.Lock() - defer fake.assignQuotaToOrgMutex.Unlock() - fake.assignQuotaToOrgArgsForCall = append(fake.assignQuotaToOrgArgsForCall, struct { - orgGuid string - quotaGuid string - }{orgGuid, quotaGuid}) - if fake.AssignQuotaToOrgStub != nil { - return fake.AssignQuotaToOrgStub(orgGuid, quotaGuid) - } else { - return fake.assignQuotaToOrgReturns.result1 - } -} - -func (fake *FakeQuotaRepository) AssignQuotaToOrgCallCount() int { - fake.assignQuotaToOrgMutex.RLock() - defer fake.assignQuotaToOrgMutex.RUnlock() - return len(fake.assignQuotaToOrgArgsForCall) -} - -func (fake *FakeQuotaRepository) AssignQuotaToOrgArgsForCall(i int) (string, string) { - fake.assignQuotaToOrgMutex.RLock() - defer fake.assignQuotaToOrgMutex.RUnlock() - return fake.assignQuotaToOrgArgsForCall[i].orgGuid, fake.assignQuotaToOrgArgsForCall[i].quotaGuid -} - -func (fake *FakeQuotaRepository) AssignQuotaToOrgReturns(result1 error) { - fake.assignQuotaToOrgReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeQuotaRepository) Create(quota models.QuotaFields) error { - fake.createMutex.Lock() - defer fake.createMutex.Unlock() - fake.createArgsForCall = append(fake.createArgsForCall, struct { - quota models.QuotaFields - }{quota}) - if fake.CreateStub != nil { - return fake.CreateStub(quota) - } else { - return fake.createReturns.result1 - } -} - -func (fake *FakeQuotaRepository) CreateCallCount() int { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return len(fake.createArgsForCall) -} - -func (fake *FakeQuotaRepository) CreateArgsForCall(i int) models.QuotaFields { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return fake.createArgsForCall[i].quota -} - -func (fake *FakeQuotaRepository) CreateReturns(result1 error) { - fake.createReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeQuotaRepository) Update(quota models.QuotaFields) error { - fake.updateMutex.Lock() - defer fake.updateMutex.Unlock() - fake.updateArgsForCall = append(fake.updateArgsForCall, struct { - quota models.QuotaFields - }{quota}) - if fake.UpdateStub != nil { - return fake.UpdateStub(quota) - } else { - return fake.updateReturns.result1 - } -} - -func (fake *FakeQuotaRepository) UpdateCallCount() int { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return len(fake.updateArgsForCall) -} - -func (fake *FakeQuotaRepository) UpdateArgsForCall(i int) models.QuotaFields { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return fake.updateArgsForCall[i].quota -} - -func (fake *FakeQuotaRepository) UpdateReturns(result1 error) { - fake.updateReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeQuotaRepository) Delete(quotaGuid string) error { - fake.deleteMutex.Lock() - defer fake.deleteMutex.Unlock() - fake.deleteArgsForCall = append(fake.deleteArgsForCall, struct { - quotaGuid string - }{quotaGuid}) - if fake.DeleteStub != nil { - return fake.DeleteStub(quotaGuid) - } else { - return fake.deleteReturns.result1 - } -} - -func (fake *FakeQuotaRepository) DeleteCallCount() int { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return len(fake.deleteArgsForCall) -} - -func (fake *FakeQuotaRepository) DeleteArgsForCall(i int) string { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return fake.deleteArgsForCall[i].quotaGuid -} - -func (fake *FakeQuotaRepository) DeleteReturns(result1 error) { - fake.deleteReturns = struct { - result1 error - }{result1} -} - -var _ QuotaRepository = new(FakeQuotaRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas.go deleted file mode 100644 index 8ac2db6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas.go +++ /dev/null @@ -1,91 +0,0 @@ -package quotas - -import ( - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type QuotaRepository interface { - FindAll() (quotas []models.QuotaFields, apiErr error) - FindByName(name string) (quota models.QuotaFields, apiErr error) - - AssignQuotaToOrg(orgGuid, quotaGuid string) error - - // CRUD ahoy - Create(quota models.QuotaFields) error - Update(quota models.QuotaFields) error - Delete(quotaGuid string) error -} - -type CloudControllerQuotaRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerQuotaRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerQuotaRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerQuotaRepository) findAllWithPath(path string) ([]models.QuotaFields, error) { - var quotas []models.QuotaFields - apiErr := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.QuotaResource{}, - func(resource interface{}) bool { - if qr, ok := resource.(resources.QuotaResource); ok { - quotas = append(quotas, qr.ToFields()) - } - return true - }) - return quotas, apiErr -} - -func (repo CloudControllerQuotaRepository) FindAll() (quotas []models.QuotaFields, apiErr error) { - return repo.findAllWithPath("/v2/quota_definitions") -} - -func (repo CloudControllerQuotaRepository) FindByName(name string) (quota models.QuotaFields, apiErr error) { - path := fmt.Sprintf("/v2/quota_definitions?q=%s", url.QueryEscape("name:"+name)) - quotas, apiErr := repo.findAllWithPath(path) - if apiErr != nil { - return - } - - if len(quotas) == 0 { - apiErr = errors.NewModelNotFoundError("Quota", name) - return - } - - quota = quotas[0] - return -} - -func (repo CloudControllerQuotaRepository) Create(quota models.QuotaFields) error { - return repo.gateway.CreateResourceFromStruct(repo.config.ApiEndpoint(), "/v2/quota_definitions", quota) -} - -func (repo CloudControllerQuotaRepository) Update(quota models.QuotaFields) error { - path := fmt.Sprintf("/v2/quota_definitions/%s", quota.Guid) - return repo.gateway.UpdateResourceFromStruct(repo.config.ApiEndpoint(), path, quota) -} - -func (repo CloudControllerQuotaRepository) AssignQuotaToOrg(orgGuid, quotaGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/organizations/%s", orgGuid) - data := fmt.Sprintf(`{"quota_definition_guid":"%s"}`, quotaGuid) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(data)) -} - -func (repo CloudControllerQuotaRepository) Delete(quotaGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/quota_definitions/%s", quotaGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas_suite_test.go deleted file mode 100644 index ee4f65f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package quotas_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestQuotas(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Quotas Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas_test.go deleted file mode 100644 index 4fb59a2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/quotas/quotas_test.go +++ /dev/null @@ -1,221 +0,0 @@ -package quotas_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/quotas" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CloudControllerQuotaRepository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerQuotaRepository - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerQuotaRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe("FindByName", func() { - BeforeEach(func() { - setupTestServer(firstQuotaRequest, secondQuotaRequest) - }) - - It("Finds Quota definitions by name", func() { - quota, err := repo.FindByName("my-remote-quota") - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(quota).To(Equal(models.QuotaFields{ - Guid: "my-quota-guid", - Name: "my-remote-quota", - MemoryLimit: 1024, - InstanceMemoryLimit: -1, - RoutesLimit: 123, - ServicesLimit: 321, - NonBasicServicesAllowed: true, - })) - }) - }) - - Describe("FindAll", func() { - BeforeEach(func() { - setupTestServer(firstQuotaRequest, secondQuotaRequest) - }) - - It("finds all Quota definitions", func() { - quotas, err := repo.FindAll() - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(quotas)).To(Equal(3)) - Expect(quotas[0].Guid).To(Equal("my-quota-guid")) - Expect(quotas[0].Name).To(Equal("my-remote-quota")) - Expect(quotas[0].MemoryLimit).To(Equal(int64(1024))) - Expect(quotas[0].RoutesLimit).To(Equal(123)) - Expect(quotas[0].ServicesLimit).To(Equal(321)) - - Expect(quotas[1].Guid).To(Equal("my-quota-guid2")) - Expect(quotas[2].Guid).To(Equal("my-quota-guid3")) - }) - }) - - Describe("AssignQuotaToOrg", func() { - It("sets the quota for an organization", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/organizations/my-org-guid", - Matcher: testnet.RequestBodyMatcher(`{"quota_definition_guid":"my-quota-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - setupTestServer(req) - - err := repo.AssignQuotaToOrg("my-org-guid", "my-quota-guid") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Describe("Create", func() { - It("creates a new quota with the given name", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/quota_definitions", - Matcher: testnet.RequestBodyMatcher(`{ - "name": "not-so-strict", - "non_basic_services_allowed": false, - "total_services": 1, - "total_routes": 12, - "memory_limit": 123, - "instance_memory_limit": 0 - }`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - setupTestServer(req) - - quota := models.QuotaFields{ - Name: "not-so-strict", - ServicesLimit: 1, - RoutesLimit: 12, - MemoryLimit: 123, - } - err := repo.Create(quota) - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("Update", func() { - It("updates an existing quota", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/quota_definitions/my-quota-guid", - Matcher: testnet.RequestBodyMatcher(`{ - "guid": "my-quota-guid", - "non_basic_services_allowed": false, - "name": "amazing-quota", - "total_services": 1, - "total_routes": 12, - "memory_limit": 123, - "instance_memory_limit": 0 - }`), - })) - - quota := models.QuotaFields{ - Guid: "my-quota-guid", - Name: "amazing-quota", - ServicesLimit: 1, - RoutesLimit: 12, - MemoryLimit: 123, - } - - err := repo.Update(quota) - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("Delete", func() { - It("deletes the quota with the given name", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/quota_definitions/my-quota-guid", - Response: testnet.TestResponse{Status: http.StatusNoContent}, - }) - setupTestServer(req) - - err := repo.Delete("my-quota-guid") - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) -}) - -var firstQuotaRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/quota_definitions", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/quota_definitions?page=2", - "resources": [ - { - "metadata": { "guid": "my-quota-guid" }, - "entity": { - "name": "my-remote-quota", - "memory_limit": 1024, - "instance_memory_limit": -1, - "total_routes": 123, - "total_services": 321, - "non_basic_services_allowed": true - } - } - ]}`, - }, -}) - -var secondQuotaRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/quota_definitions?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "resources": [ - { - "metadata": { "guid": "my-quota-guid2" }, - "entity": { "name": "my-remote-quota2", "memory_limit": 1024 } - }, - { - "metadata": { "guid": "my-quota-guid3" }, - "entity": { "name": "my-remote-quota3", "memory_limit": 1024 } - } - ]}`, - }, -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/repository_locator.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/repository_locator.go deleted file mode 100644 index af22bc6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/repository_locator.go +++ /dev/null @@ -1,331 +0,0 @@ -package api - -import ( - "crypto/tls" - "net/http" - - "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - "github.com/cloudfoundry/cli/cf/api/organizations" - - "github.com/cloudfoundry/cli/cf/api/app_events" - api_app_files "github.com/cloudfoundry/cli/cf/api/app_files" - "github.com/cloudfoundry/cli/cf/api/app_instances" - "github.com/cloudfoundry/cli/cf/api/application_bits" - applications "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/api/copy_application_source" - "github.com/cloudfoundry/cli/cf/api/feature_flags" - "github.com/cloudfoundry/cli/cf/api/password" - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running" - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging" - securitygroupspaces "github.com/cloudfoundry/cli/cf/api/security_groups/spaces" - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/api/spaces" - stacks "github.com/cloudfoundry/cli/cf/api/stacks" - "github.com/cloudfoundry/cli/cf/api/strategy" - "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/cf/terminal" - consumer "github.com/cloudfoundry/loggregator_consumer" - "github.com/cloudfoundry/noaa" -) - -type RepositoryLocator struct { - authRepo authentication.AuthenticationRepository - curlRepo CurlRepository - endpointRepo EndpointRepository - organizationRepo organizations.OrganizationRepository - quotaRepo quotas.CloudControllerQuotaRepository - spaceRepo spaces.SpaceRepository - appRepo applications.CloudControllerApplicationRepository - appBitsRepo application_bits.CloudControllerApplicationBitsRepository - appSummaryRepo AppSummaryRepository - appInstancesRepo app_instances.AppInstancesRepository - appEventsRepo app_events.CloudControllerAppEventsRepository - appFilesRepo api_app_files.CloudControllerAppFilesRepository - domainRepo CloudControllerDomainRepository - routeRepo CloudControllerRouteRepository - stackRepo stacks.CloudControllerStackRepository - serviceRepo CloudControllerServiceRepository - serviceKeyRepo CloudControllerServiceKeyRepository - serviceBindingRepo CloudControllerServiceBindingRepository - serviceSummaryRepo ServiceSummaryRepository - userRepo UserRepository - passwordRepo password.CloudControllerPasswordRepository - logsNoaaRepo LogsNoaaRepository - oldLogsRepo OldLogsRepository - authTokenRepo CloudControllerServiceAuthTokenRepository - serviceBrokerRepo CloudControllerServiceBrokerRepository - servicePlanRepo CloudControllerServicePlanRepository - servicePlanVisibilityRepo ServicePlanVisibilityRepository - userProvidedServiceInstanceRepo CCUserProvidedServiceInstanceRepository - buildpackRepo CloudControllerBuildpackRepository - buildpackBitsRepo CloudControllerBuildpackBitsRepository - securityGroupRepo security_groups.SecurityGroupRepo - stagingSecurityGroupRepo staging.StagingSecurityGroupsRepo - runningSecurityGroupRepo running.RunningSecurityGroupsRepo - securityGroupSpaceBinder securitygroupspaces.SecurityGroupSpaceBinder - spaceQuotaRepo space_quotas.SpaceQuotaRepository - featureFlagRepo feature_flags.FeatureFlagRepository - environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository - copyAppSourceRepo copy_application_source.CopyApplicationSourceRepository -} - -func NewRepositoryLocator(config core_config.ReadWriter, gatewaysByName map[string]net.Gateway) (loc RepositoryLocator) { - strategy := strategy.NewEndpointStrategy(config.ApiVersion()) - - authGateway := gatewaysByName["auth"] - cloudControllerGateway := gatewaysByName["cloud-controller"] - uaaGateway := gatewaysByName["uaa"] - loc.authRepo = authentication.NewUAAAuthenticationRepository(authGateway, config) - - // ensure gateway refreshers are set before passing them by value to repositories - cloudControllerGateway.SetTokenRefresher(loc.authRepo) - uaaGateway.SetTokenRefresher(loc.authRepo) - - tlsConfig := net.NewTLSConfig([]tls.Certificate{}, config.IsSSLDisabled()) - loggregatorConsumer := consumer.New(config.LoggregatorEndpoint(), tlsConfig, http.ProxyFromEnvironment) - loggregatorConsumer.SetDebugPrinter(terminal.DebugPrinter{}) - - noaaLib := noaa.NewConsumer(config.DopplerEndpoint(), tlsConfig, http.ProxyFromEnvironment) - noaaLib.SetDebugPrinter(terminal.DebugPrinter{}) - logNoaaConsumer := NewNoaaConsumer(noaaLib) - - loc.appBitsRepo = application_bits.NewCloudControllerApplicationBitsRepository(config, cloudControllerGateway) - loc.appEventsRepo = app_events.NewCloudControllerAppEventsRepository(config, cloudControllerGateway, strategy) - loc.appFilesRepo = api_app_files.NewCloudControllerAppFilesRepository(config, cloudControllerGateway) - loc.appRepo = applications.NewCloudControllerApplicationRepository(config, cloudControllerGateway) - loc.appSummaryRepo = NewCloudControllerAppSummaryRepository(config, cloudControllerGateway) - loc.appInstancesRepo = app_instances.NewCloudControllerAppInstancesRepository(config, cloudControllerGateway) - loc.authTokenRepo = NewCloudControllerServiceAuthTokenRepository(config, cloudControllerGateway) - loc.curlRepo = NewCloudControllerCurlRepository(config, cloudControllerGateway) - loc.domainRepo = NewCloudControllerDomainRepository(config, cloudControllerGateway, strategy) - loc.endpointRepo = NewEndpointRepository(config, cloudControllerGateway) - loc.logsNoaaRepo = NewLogsNoaaRepository(config, logNoaaConsumer, loc.authRepo) - loc.oldLogsRepo = NewLoggregatorLogsRepository(config, loggregatorConsumer, loc.authRepo) - loc.organizationRepo = organizations.NewCloudControllerOrganizationRepository(config, cloudControllerGateway) - loc.passwordRepo = password.NewCloudControllerPasswordRepository(config, uaaGateway) - loc.quotaRepo = quotas.NewCloudControllerQuotaRepository(config, cloudControllerGateway) - loc.routeRepo = NewCloudControllerRouteRepository(config, cloudControllerGateway) - loc.stackRepo = stacks.NewCloudControllerStackRepository(config, cloudControllerGateway) - loc.serviceRepo = NewCloudControllerServiceRepository(config, cloudControllerGateway) - loc.serviceKeyRepo = NewCloudControllerServiceKeyRepository(config, cloudControllerGateway) - loc.serviceBindingRepo = NewCloudControllerServiceBindingRepository(config, cloudControllerGateway) - loc.serviceBrokerRepo = NewCloudControllerServiceBrokerRepository(config, cloudControllerGateway) - loc.servicePlanRepo = NewCloudControllerServicePlanRepository(config, cloudControllerGateway) - loc.servicePlanVisibilityRepo = NewCloudControllerServicePlanVisibilityRepository(config, cloudControllerGateway) - loc.serviceSummaryRepo = NewCloudControllerServiceSummaryRepository(config, cloudControllerGateway) - loc.spaceRepo = spaces.NewCloudControllerSpaceRepository(config, cloudControllerGateway) - loc.userProvidedServiceInstanceRepo = NewCCUserProvidedServiceInstanceRepository(config, cloudControllerGateway) - loc.userRepo = NewCloudControllerUserRepository(config, uaaGateway, cloudControllerGateway) - loc.buildpackRepo = NewCloudControllerBuildpackRepository(config, cloudControllerGateway) - loc.buildpackBitsRepo = NewCloudControllerBuildpackBitsRepository(config, cloudControllerGateway, app_files.ApplicationZipper{}) - loc.securityGroupRepo = security_groups.NewSecurityGroupRepo(config, cloudControllerGateway) - loc.stagingSecurityGroupRepo = staging.NewStagingSecurityGroupsRepo(config, cloudControllerGateway) - loc.runningSecurityGroupRepo = running.NewRunningSecurityGroupsRepo(config, cloudControllerGateway) - loc.securityGroupSpaceBinder = securitygroupspaces.NewSecurityGroupSpaceBinder(config, cloudControllerGateway) - loc.spaceQuotaRepo = space_quotas.NewCloudControllerSpaceQuotaRepository(config, cloudControllerGateway) - loc.featureFlagRepo = feature_flags.NewCloudControllerFeatureFlagRepository(config, cloudControllerGateway) - loc.environmentVariableGroupRepo = environment_variable_groups.NewCloudControllerEnvironmentVariableGroupsRepository(config, cloudControllerGateway) - loc.copyAppSourceRepo = copy_application_source.NewCloudControllerCopyApplicationSourceRepository(config, cloudControllerGateway) - return -} - -func (locator RepositoryLocator) GetAuthenticationRepository() authentication.AuthenticationRepository { - return locator.authRepo -} - -func (locator RepositoryLocator) GetCurlRepository() CurlRepository { - return locator.curlRepo -} - -func (locator RepositoryLocator) GetEndpointRepository() EndpointRepository { - return locator.endpointRepo -} - -func (locator RepositoryLocator) SetEndpointRepository(e EndpointRepository) RepositoryLocator { - locator.endpointRepo = e - return locator -} - -func (locator RepositoryLocator) SetOrganizationRepository(repo organizations.OrganizationRepository) RepositoryLocator { - locator.organizationRepo = repo - return locator -} - -func (locator RepositoryLocator) GetOrganizationRepository() organizations.OrganizationRepository { - return locator.organizationRepo -} - -func (locator RepositoryLocator) GetQuotaRepository() quotas.QuotaRepository { - return locator.quotaRepo -} - -func (locator RepositoryLocator) SetSpaceRepository(repo spaces.SpaceRepository) RepositoryLocator { - locator.spaceRepo = repo - return locator -} - -func (locator RepositoryLocator) GetSpaceRepository() spaces.SpaceRepository { - return locator.spaceRepo -} - -func (locator RepositoryLocator) GetApplicationRepository() applications.ApplicationRepository { - return locator.appRepo -} - -func (locator RepositoryLocator) GetApplicationBitsRepository() application_bits.ApplicationBitsRepository { - return locator.appBitsRepo -} - -func (locator RepositoryLocator) SetAppSummaryRepository(repo AppSummaryRepository) RepositoryLocator { - locator.appSummaryRepo = repo - return locator -} - -func (locator RepositoryLocator) SetUserRepository(repo UserRepository) RepositoryLocator { - locator.userRepo = repo - return locator -} - -func (locator RepositoryLocator) GetAppSummaryRepository() AppSummaryRepository { - return locator.appSummaryRepo -} - -func (locator RepositoryLocator) SetAppInstancesRepository(repo app_instances.AppInstancesRepository) RepositoryLocator { - locator.appInstancesRepo = repo - return locator -} - -func (locator RepositoryLocator) GetAppInstancesRepository() app_instances.AppInstancesRepository { - return locator.appInstancesRepo -} - -func (locator RepositoryLocator) GetAppEventsRepository() app_events.AppEventsRepository { - return locator.appEventsRepo -} - -func (locator RepositoryLocator) GetAppFilesRepository() api_app_files.AppFilesRepository { - return locator.appFilesRepo -} - -func (locator RepositoryLocator) GetDomainRepository() DomainRepository { - return locator.domainRepo -} - -func (locator RepositoryLocator) GetRouteRepository() RouteRepository { - return locator.routeRepo -} - -func (locator RepositoryLocator) GetStackRepository() stacks.StackRepository { - return locator.stackRepo -} - -func (locator RepositoryLocator) GetServiceRepository() ServiceRepository { - return locator.serviceRepo -} - -func (locator RepositoryLocator) GetServiceKeyRepository() ServiceKeyRepository { - return locator.serviceKeyRepo -} - -func (locator RepositoryLocator) GetServiceBindingRepository() ServiceBindingRepository { - return locator.serviceBindingRepo -} - -func (locator RepositoryLocator) GetServiceSummaryRepository() ServiceSummaryRepository { - return locator.serviceSummaryRepo -} -func (locator RepositoryLocator) SetServiceSummaryRepository(repo ServiceSummaryRepository) RepositoryLocator { - locator.serviceSummaryRepo = repo - return locator -} - -func (locator RepositoryLocator) GetUserRepository() UserRepository { - return locator.userRepo -} - -func (locator RepositoryLocator) GetPasswordRepository() password.PasswordRepository { - return locator.passwordRepo -} - -func (locator RepositoryLocator) GetOldLogsRepository() OldLogsRepository { - return locator.oldLogsRepo -} - -func (locator RepositoryLocator) SetLogsNoaaRepository(repo LogsNoaaRepository) RepositoryLocator { - locator.logsNoaaRepo = repo - return locator -} - -func (locator RepositoryLocator) GetLogsNoaaRepository() LogsNoaaRepository { - return locator.logsNoaaRepo -} - -func (locator RepositoryLocator) GetServiceAuthTokenRepository() ServiceAuthTokenRepository { - return locator.authTokenRepo -} - -func (locator RepositoryLocator) GetServiceBrokerRepository() ServiceBrokerRepository { - return locator.serviceBrokerRepo -} - -func (locator RepositoryLocator) GetServicePlanRepository() ServicePlanRepository { - return locator.servicePlanRepo -} - -func (locator RepositoryLocator) GetUserProvidedServiceInstanceRepository() UserProvidedServiceInstanceRepository { - return locator.userProvidedServiceInstanceRepo -} - -func (locator RepositoryLocator) GetBuildpackRepository() BuildpackRepository { - return locator.buildpackRepo -} - -func (locator RepositoryLocator) GetBuildpackBitsRepository() BuildpackBitsRepository { - return locator.buildpackBitsRepo -} - -func (locator RepositoryLocator) GetSecurityGroupRepository() security_groups.SecurityGroupRepo { - return locator.securityGroupRepo -} - -func (locator RepositoryLocator) GetStagingSecurityGroupsRepository() staging.StagingSecurityGroupsRepo { - return locator.stagingSecurityGroupRepo -} - -func (locator RepositoryLocator) GetRunningSecurityGroupsRepository() running.RunningSecurityGroupsRepo { - return locator.runningSecurityGroupRepo -} - -func (locator RepositoryLocator) GetSecurityGroupSpaceBinder() securitygroupspaces.SecurityGroupSpaceBinder { - return locator.securityGroupSpaceBinder -} - -func (locator RepositoryLocator) GetServicePlanVisibilityRepository() ServicePlanVisibilityRepository { - return locator.servicePlanVisibilityRepo -} - -func (locator RepositoryLocator) GetSpaceQuotaRepository() space_quotas.SpaceQuotaRepository { - return locator.spaceQuotaRepo -} - -func (locator RepositoryLocator) SetSpaceQuotaRepository(repo space_quotas.SpaceQuotaRepository) RepositoryLocator { - locator.spaceQuotaRepo = repo - return locator -} - -func (locator RepositoryLocator) GetFeatureFlagRepository() feature_flags.FeatureFlagRepository { - return locator.featureFlagRepo -} - -func (locator RepositoryLocator) GetEnvironmentVariableGroupsRepository() environment_variable_groups.EnvironmentVariableGroupsRepository { - return locator.environmentVariableGroupRepo -} - -func (locator RepositoryLocator) GetCopyApplicationSourceRepository() copy_application_source.CopyApplicationSourceRepository { - return locator.copyAppSourceRepo -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/applications.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/applications.go deleted file mode 100644 index cfa70b3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/applications.go +++ /dev/null @@ -1,156 +0,0 @@ -package resources - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/models" -) - -type PaginatedApplicationResources struct { - Resources []ApplicationResource -} - -type AppRouteEntity struct { - Host string - Domain struct { - Resource - Entity struct { - Name string - } - } -} - -type AppRouteResource struct { - Resource - Entity AppRouteEntity -} - -type AppFileResource struct { - Path string `json:"fn"` - Sha1 string `json:"sha1"` - Size int64 `json:"size"` -} - -type ApplicationResource struct { - Resource - Entity ApplicationEntity -} - -type ApplicationEntity struct { - Name *string `json:"name,omitempty"` - Command *string `json:"command,omitempty"` - DetectedStartCommand *string `json:"detected_start_command,omitempty"` - State *string `json:"state,omitempty"` - SpaceGuid *string `json:"space_guid,omitempty"` - Instances *int `json:"instances,omitempty"` - Memory *int64 `json:"memory,omitempty"` - DiskQuota *int64 `json:"disk_quota,omitempty"` - StackGuid *string `json:"stack_guid,omitempty"` - Stack *StackResource `json:"stack,omitempty"` - Routes *[]AppRouteResource `json:"routes,omitempty"` - Buildpack *string `json:"buildpack,omitempty"` - DetectedBuildpack *string `json:"detected_buildpack,omitempty"` - EnvironmentJson *map[string]interface{} `json:"environment_json,omitempty"` - HealthCheckTimeout *int `json:"health_check_timeout,omitempty"` - PackageState *string `json:"package_state,omitempty"` - StagingFailedReason *string `json:"staging_failed_reason,omitempty"` -} - -func (resource AppRouteResource) ToFields() (route models.RouteSummary) { - route.Guid = resource.Metadata.Guid - route.Host = resource.Entity.Host - return -} - -func (resource AppRouteResource) ToModel() (route models.RouteSummary) { - route.Guid = resource.Metadata.Guid - route.Host = resource.Entity.Host - route.Domain.Guid = resource.Entity.Domain.Metadata.Guid - route.Domain.Name = resource.Entity.Domain.Entity.Name - return -} - -func NewApplicationEntityFromAppParams(app models.AppParams) ApplicationEntity { - entity := ApplicationEntity{ - Buildpack: app.BuildpackUrl, - Name: app.Name, - SpaceGuid: app.SpaceGuid, - Instances: app.InstanceCount, - Memory: app.Memory, - DiskQuota: app.DiskQuota, - StackGuid: app.StackGuid, - Command: app.Command, - HealthCheckTimeout: app.HealthCheckTimeout, - } - if app.State != nil { - state := strings.ToUpper(*app.State) - entity.State = &state - } - if app.EnvironmentVars != nil && *app.EnvironmentVars != nil { - entity.EnvironmentJson = app.EnvironmentVars - } - return entity -} - -func (resource ApplicationResource) ToFields() (app models.ApplicationFields) { - entity := resource.Entity - app.Guid = resource.Metadata.Guid - - if entity.Name != nil { - app.Name = *entity.Name - } - if entity.Memory != nil { - app.Memory = *entity.Memory - } - if entity.DiskQuota != nil { - app.DiskQuota = *entity.DiskQuota - } - if entity.Instances != nil { - app.InstanceCount = *entity.Instances - } - if entity.State != nil { - app.State = strings.ToLower(*entity.State) - } - if entity.EnvironmentJson != nil { - app.EnvironmentVars = *entity.EnvironmentJson - } - if entity.SpaceGuid != nil { - app.SpaceGuid = *entity.SpaceGuid - } - if entity.DetectedStartCommand != nil { - app.DetectedStartCommand = *entity.DetectedStartCommand - } - if entity.Command != nil { - app.Command = *entity.Command - } - if entity.PackageState != nil { - app.PackageState = *entity.PackageState - } - if entity.StagingFailedReason != nil { - app.StagingFailedReason = *entity.StagingFailedReason - } - if entity.Buildpack != nil { - app.Buildpack = *entity.Buildpack - } - if entity.DetectedBuildpack != nil { - app.DetectedBuildpack = *entity.DetectedBuildpack - } - return -} - -func (resource ApplicationResource) ToModel() (app models.Application) { - app.ApplicationFields = resource.ToFields() - - entity := resource.Entity - if entity.Stack != nil { - app.Stack = entity.Stack.ToFields() - } - - if entity.Routes != nil { - for _, routeResource := range *entity.Routes { - app.Routes = append(app.Routes, routeResource.ToModel()) - } - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/buildpacks.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/buildpacks.go deleted file mode 100644 index 3c4e87a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/buildpacks.go +++ /dev/null @@ -1,29 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type BuildpackResource struct { - Resource - Entity BuildpackEntity -} - -type BuildpackEntity struct { - Name string `json:"name"` - Position *int `json:"position,omitempty"` - Enabled *bool `json:"enabled,omitempty"` - Key string `json:"key,omitempty"` - Filename string `json:"filename,omitempty"` - Locked *bool `json:"locked,omitempty"` -} - -func (resource BuildpackResource) ToFields() models.Buildpack { - return models.Buildpack{ - Guid: resource.Metadata.Guid, - Name: resource.Entity.Name, - Position: resource.Entity.Position, - Enabled: resource.Entity.Enabled, - Key: resource.Entity.Key, - Filename: resource.Entity.Filename, - Locked: resource.Entity.Locked, - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/domains.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/domains.go deleted file mode 100644 index d5cb93b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/domains.go +++ /dev/null @@ -1,25 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type DomainResource struct { - Resource - Entity DomainEntity -} - -type DomainEntity struct { - Name string `json:"name"` - OwningOrganizationGuid string `json:"owning_organization_guid,omitempty"` - SharedOrganizationsUrl string `json:"shared_organizations_url,omitempty"` - Wildcard bool `json:"wildcard"` -} - -func (resource DomainResource) ToFields() models.DomainFields { - privateDomain := resource.Entity.SharedOrganizationsUrl != "" || resource.Entity.OwningOrganizationGuid != "" - return models.DomainFields{ - Name: resource.Entity.Name, - Guid: resource.Metadata.Guid, - OwningOrganizationGuid: resource.Entity.OwningOrganizationGuid, - Shared: !privateDomain, - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/events.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/events.go deleted file mode 100644 index ae29f4b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/events.go +++ /dev/null @@ -1,107 +0,0 @@ -package resources - -import ( - "fmt" - "strconv" - "strings" - "time" - - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" -) - -type EventResource interface { - ToFields() models.EventFields -} - -type EventResourceNewV2 struct { - Resource - Entity struct { - Timestamp time.Time - Type string - ActorName string `json:"actor_name"` - Metadata map[string]interface{} - } -} - -type EventResourceOldV2 struct { - Resource - Entity struct { - Timestamp time.Time - ExitDescription string `json:"exit_description"` - ExitStatus int `json:"exit_status"` - InstanceIndex int `json:"instance_index"` - } -} - -func (resource EventResourceNewV2) ToFields() models.EventFields { - metadata := generic.NewMap(resource.Entity.Metadata) - if metadata.Has("request") { - metadata = generic.NewMap(metadata.Get("request")) - } - - return models.EventFields{ - Guid: resource.Metadata.Guid, - Name: resource.Entity.Type, - Timestamp: resource.Entity.Timestamp, - Description: formatDescription(metadata, knownMetadataKeys), - ActorName: resource.Entity.ActorName, - } -} - -func (resource EventResourceOldV2) ToFields() models.EventFields { - return models.EventFields{ - Guid: resource.Metadata.Guid, - Name: T("app crashed"), - Timestamp: resource.Entity.Timestamp, - Description: fmt.Sprintf(T("instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - map[string]interface{}{ - "InstanceIndex": resource.Entity.InstanceIndex, - "ExitDescription": resource.Entity.ExitDescription, - "ExitStatus": strconv.Itoa(resource.Entity.ExitStatus), - })), - } -} - -var knownMetadataKeys = []string{ - "index", - "reason", - "exit_description", - "exit_status", - "recursive", - "disk_quota", - "instances", - "memory", - "state", - "command", - "environment_json", -} - -func formatDescription(metadata generic.Map, keys []string) string { - parts := []string{} - for _, key := range keys { - value := metadata.Get(key) - if value != nil { - parts = append(parts, fmt.Sprintf("%s: %s", key, formatDescriptionPart(value))) - } - } - return strings.Join(parts, ", ") -} - -func formatDescriptionPart(val interface{}) string { - switch val := val.(type) { - case string: - return val - case float64: - return strconv.FormatFloat(val, byte('f'), -1, 64) - case bool: - if val { - return "true" - } else { - return "false" - } - default: - return fmt.Sprintf("%s", val) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/events_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/events_test.go deleted file mode 100644 index bbca40c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/events_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package resources_test - -import ( - "encoding/json" - - . "github.com/cloudfoundry/cli/cf/api/resources" - testtime "github.com/cloudfoundry/cli/testhelpers/time" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Event resources", func() { - var resource EventResource - - Describe("New V2 resources", func() { - BeforeEach(func() { - resource = new(EventResourceNewV2) - }) - - It("unmarshals app crash events", func() { - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid":"event-1-guid" - }, - "entity": { - "timestamp": "2013-10-07T16:51:07+00:00", - "type": "app.crash", - "metadata": { - "instance": "50dd66d3f8874b35988d23a25d19bfa0", - "index": 3, - "exit_status": -1, - "exit_description": "unknown", - "reason": "CRASHED" - } - } - }`), &resource) - - Expect(err).NotTo(HaveOccurred()) - - eventFields := resource.ToFields() - Expect(eventFields.Guid).To(Equal("event-1-guid")) - Expect(eventFields.Name).To(Equal("app.crash")) - Expect(eventFields.Timestamp).To(Equal(testtime.MustParse(eventTimestampFormat, "2013-10-07T16:51:07+00:00"))) - Expect(eventFields.Description).To(Equal(`index: 3, reason: CRASHED, exit_description: unknown, exit_status: -1`)) - }) - - It("unmarshals app update events", func() { - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid": "event-1-guid" - }, - "entity": { - "type": "audit.app.update", - "timestamp": "2014-01-21T00:20:11+00:00", - "metadata": { - "request": { - "state": "STOPPED", - "command": "PRIVATE DATA HIDDEN", - "instances": 1, - "memory": 256, - "environment_json": "PRIVATE DATA HIDDEN" - } - } - } - }`), &resource) - - Expect(err).NotTo(HaveOccurred()) - - eventFields := resource.ToFields() - Expect(eventFields.Guid).To(Equal("event-1-guid")) - Expect(eventFields.Name).To(Equal("audit.app.update")) - Expect(eventFields.Timestamp).To(Equal(testtime.MustParse(eventTimestampFormat, "2014-01-21T00:20:11+00:00"))) - Expect(eventFields.Description).To(Equal("instances: 1, memory: 256, state: STOPPED, command: PRIVATE DATA HIDDEN, environment_json: PRIVATE DATA HIDDEN")) - }) - - It("unmarshals app delete events", func() { - resource := new(EventResourceNewV2) - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid": "event-2-guid" - }, - "entity": { - "type": "audit.app.delete-request", - "timestamp": "2014-01-21T18:39:09+00:00", - "metadata": { - "request": { - "recursive": true - } - } - } - }`), &resource) - - Expect(err).NotTo(HaveOccurred()) - - eventFields := resource.ToFields() - Expect(eventFields.Guid).To(Equal("event-2-guid")) - Expect(eventFields.Name).To(Equal("audit.app.delete-request")) - Expect(eventFields.Timestamp).To(Equal(testtime.MustParse(eventTimestampFormat, "2014-01-21T18:39:09+00:00"))) - Expect(eventFields.Description).To(Equal("recursive: true")) - }) - - It("unmarshals the new v2 app create event", func() { - resource := new(EventResourceNewV2) - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid": "event-1-guid" - }, - "entity": { - "type": "audit.app.create", - "timestamp": "2014-01-22T19:34:16+00:00", - "metadata": { - "request": { - "name": "java-warz", - "space_guid": "6cc20fec-0dee-4843-b875-b124bfee791a", - "production": false, - "environment_json": "PRIVATE DATA HIDDEN", - "instances": 1, - "disk_quota": 1024, - "state": "STOPPED", - "console": false - } - } - } - }`), &resource) - - Expect(err).NotTo(HaveOccurred()) - - eventFields := resource.ToFields() - Expect(eventFields.Guid).To(Equal("event-1-guid")) - Expect(eventFields.Name).To(Equal("audit.app.create")) - Expect(eventFields.Timestamp).To(Equal(testtime.MustParse(eventTimestampFormat, "2014-01-22T19:34:16+00:00"))) - Expect(eventFields.Description).To(Equal("disk_quota: 1024, instances: 1, state: STOPPED, environment_json: PRIVATE DATA HIDDEN")) - }) - }) - - Describe("Old V2 Resources", func() { - BeforeEach(func() { - resource = new(EventResourceOldV2) - }) - - It("unmarshals app crashed events", func() { - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid": "event-1-guid" - }, - "entity": { - "timestamp": "2014-01-22T19:34:16+00:00", - "exit_status": 3, - "instance_index": 4, - "exit_description": "the exit description" - } - }`), &resource) - - Expect(err).NotTo(HaveOccurred()) - eventFields := resource.ToFields() - Expect(eventFields.Guid).To(Equal("event-1-guid")) - Expect(eventFields.Name).To(Equal("app crashed")) - Expect(eventFields.Timestamp).To(Equal(testtime.MustParse(eventTimestampFormat, "2014-01-22T19:34:16+00:00"))) - Expect(eventFields.Description).To(Equal("instance: 4, reason: the exit description, exit_status: 3")) - }) - }) -}) - -const eventTimestampFormat = "2006-01-02T15:04:05-07:00" diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/feature_flags.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/feature_flags.go deleted file mode 100644 index d9a0fed..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/feature_flags.go +++ /dev/null @@ -1,14 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type FeatureFlagResource struct { - Entity models.FeatureFlag -} - -func (resource FeatureFlagResource) ToFields() (flag models.FeatureFlag) { - flag.Name = resource.Entity.Name - flag.Enabled = resource.Entity.Enabled - flag.ErrorMessage = resource.Entity.ErrorMessage - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/organizations.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/organizations.go deleted file mode 100644 index 862aec9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/organizations.go +++ /dev/null @@ -1,47 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type OrganizationResource struct { - Resource - Entity OrganizationEntity -} - -type OrganizationEntity struct { - Name string - QuotaDefinition QuotaResource `json:"quota_definition"` - Spaces []SpaceResource - Domains []DomainResource - SpaceQuotas []SpaceQuotaResource `json:"space_quota_definitions"` -} - -func (resource OrganizationResource) ToFields() (fields models.OrganizationFields) { - fields.Name = resource.Entity.Name - fields.Guid = resource.Metadata.Guid - - fields.QuotaDefinition = resource.Entity.QuotaDefinition.ToFields() - return -} - -func (resource OrganizationResource) ToModel() (org models.Organization) { - org.OrganizationFields = resource.ToFields() - - spaces := []models.SpaceFields{} - for _, s := range resource.Entity.Spaces { - spaces = append(spaces, s.ToFields()) - } - org.Spaces = spaces - - domains := []models.DomainFields{} - for _, d := range resource.Entity.Domains { - domains = append(domains, d.ToFields()) - } - org.Domains = domains - - spaceQuotas := []models.SpaceQuota{} - for _, sq := range resource.Entity.SpaceQuotas { - spaceQuotas = append(spaceQuotas, sq.ToModel()) - } - org.SpaceQuotas = spaceQuotas - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/quotas.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/quotas.go deleted file mode 100644 index 5c253e7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/quotas.go +++ /dev/null @@ -1,23 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type PaginatedQuotaResources struct { - Resources []QuotaResource -} - -type QuotaResource struct { - Resource - Entity models.QuotaFields -} - -func (resource QuotaResource) ToFields() (quota models.QuotaFields) { - quota.Guid = resource.Metadata.Guid - quota.Name = resource.Entity.Name - quota.MemoryLimit = resource.Entity.MemoryLimit - quota.InstanceMemoryLimit = resource.Entity.InstanceMemoryLimit - quota.RoutesLimit = resource.Entity.RoutesLimit - quota.ServicesLimit = resource.Entity.ServicesLimit - quota.NonBasicServicesAllowed = resource.Entity.NonBasicServicesAllowed - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/resources.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/resources.go deleted file mode 100644 index 2a124be..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/resources.go +++ /dev/null @@ -1,10 +0,0 @@ -package resources - -type Metadata struct { - Guid string `json:"guid"` - Url string `json:"url,omitempty"` -} - -type Resource struct { - Metadata Metadata -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/resources_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/resources_test.go deleted file mode 100644 index cc1fc16..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/resources_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package resources_test - -import ( - "testing" - - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func TestResources(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Resources Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/routes.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/routes.go deleted file mode 100644 index 873caec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/routes.go +++ /dev/null @@ -1,31 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type RouteResource struct { - Resource - Entity RouteEntity -} - -type RouteEntity struct { - Host string - Domain DomainResource - Space SpaceResource - Apps []ApplicationResource -} - -func (resource RouteResource) ToFields() (fields models.Route) { - fields.Guid = resource.Metadata.Guid - fields.Host = resource.Entity.Host - return -} -func (resource RouteResource) ToModel() (route models.Route) { - route.Host = resource.Entity.Host - route.Guid = resource.Metadata.Guid - route.Domain = resource.Entity.Domain.ToFields() - route.Space = resource.Entity.Space.ToFields() - for _, appResource := range resource.Entity.Apps { - route.Apps = append(route.Apps, appResource.ToFields()) - } - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/security_groups.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/security_groups.go deleted file mode 100644 index 41662bd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/security_groups.go +++ /dev/null @@ -1,37 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type PaginatedSecurityGroupResources struct { - Resources []SecurityGroupResource -} - -type SecurityGroupResource struct { - Resource - Entity SecurityGroup -} - -type SecurityGroup struct { - models.SecurityGroupFields - Spaces []SpaceResource -} - -func (resource SecurityGroupResource) ToFields() (fields models.SecurityGroupFields) { - fields.Name = resource.Entity.Name - fields.Rules = resource.Entity.Rules - fields.Guid = resource.Metadata.Guid - - return -} - -func (resource SecurityGroupResource) ToModel() (asg models.SecurityGroup) { - asg.SecurityGroupFields = resource.ToFields() - - spaces := []models.Space{} - for _, s := range resource.Entity.Spaces { - spaces = append(spaces, s.ToModel()) - } - asg.Spaces = spaces - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_bindings.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_bindings.go deleted file mode 100644 index d8a1163..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_bindings.go +++ /dev/null @@ -1,19 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type ServiceBindingResource struct { - Resource - Entity ServiceBindingEntity -} - -type ServiceBindingEntity struct { - AppGuid string `json:"app_guid"` -} - -func (resource ServiceBindingResource) ToFields() (fields models.ServiceBindingFields) { - fields.Url = resource.Metadata.Url - fields.Guid = resource.Metadata.Guid - fields.AppGuid = resource.Entity.AppGuid - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_brokers.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_brokers.go deleted file mode 100644 index b83b3d7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_brokers.go +++ /dev/null @@ -1,25 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type ServiceBrokerResource struct { - Resource - Entity ServiceBrokerEntity -} - -type ServiceBrokerEntity struct { - Guid string - Name string - Password string `json:"auth_password"` - Username string `json:"auth_username"` - Url string `json:"broker_url"` -} - -func (resource ServiceBrokerResource) ToFields() (fields models.ServiceBroker) { - fields.Name = resource.Entity.Name - fields.Guid = resource.Metadata.Guid - fields.Url = resource.Entity.Url - fields.Username = resource.Entity.Username - fields.Password = resource.Entity.Password - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_instances_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_instances_test.go deleted file mode 100644 index f5cbd1c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_instances_test.go +++ /dev/null @@ -1,284 +0,0 @@ -package resources_test - -import ( - "encoding/json" - "fmt" - - . "github.com/cloudfoundry/cli/cf/api/resources" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServiceInstanceResource", func() { - var resource, resourceWithNullLastOp ServiceInstanceResource - - BeforeEach(func() { - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid": "fake-guid", - "url": "/v2/service_instances/fake-guid", - "created_at": "2015-01-13T18:52:08+00:00", - "updated_at": null - }, - "entity": { - "name": "fake service name", - "credentials": { - }, - "service_plan_guid": "fake-service-plan-guid", - "space_guid": "fake-space-guid", - "gateway_data": null, - "dashboard_url": "https://fake/dashboard/url", - "type": "managed_service_instance", - "space_url": "/v2/spaces/fake-space-guid", - "service_plan_url": "/v2/service_plans/fake-service-plan-guid", - "service_bindings_url": "/v2/service_instances/fake-guid/service_bindings", - "last_operation": { - "type": "create", - "state": "in progress", - "description": "fake state description", - "created_at": "fake created at", - "updated_at": "fake updated at" - }, - "service_plan": { - "metadata": { - "guid": "fake-service-plan-guid" - }, - "entity": { - "name": "fake-service-plan-name", - "free": true, - "description": "fake-description", - "public": true, - "active": true, - "service_guid": "fake-service-guid" - } - }, - "service_bindings": [{ - "metadata": { - "guid": "fake-service-binding-guid", - "url": "http://fake/url" - }, - "entity": { - "app_guid": "fake-app-guid" - } - }] - } - }`), &resource) - - Expect(err).ToNot(HaveOccurred()) - - err = json.Unmarshal([]byte(` - { - "metadata": { - "guid": "fake-guid", - "url": "/v2/service_instances/fake-guid", - "created_at": "2015-01-13T18:52:08+00:00", - "updated_at": null - }, - "entity": { - "name": "fake service name", - "credentials": { - }, - "service_plan_guid": "fake-service-plan-guid", - "space_guid": "fake-space-guid", - "gateway_data": null, - "dashboard_url": "https://fake/dashboard/url", - "type": "managed_service_instance", - "space_url": "/v2/spaces/fake-space-guid", - "service_plan_url": "/v2/service_plans/fake-service-plan-guid", - "service_bindings_url": "/v2/service_instances/fake-guid/service_bindings", - "last_operation": null, - "service_plan": { - "metadata": { - "guid": "fake-service-plan-guid" - }, - "entity": { - "name": "fake-service-plan-name", - "free": true, - "description": "fake-description", - "public": true, - "active": true, - "service_guid": "fake-service-guid" - } - }, - "service_bindings": [{ - "metadata": { - "guid": "fake-service-binding-guid", - "url": "http://fake/url" - }, - "entity": { - "app_guid": "fake-app-guid" - } - }] - } - }`), &resourceWithNullLastOp) - - Expect(err).ToNot(HaveOccurred()) - }) - - Context("Async brokers", func() { - var instanceString string - - BeforeEach(func() { - instanceString = ` - { - %s, - "entity": { - "name": "fake service name", - "credentials": { - }, - "service_plan_guid": "fake-service-plan-guid", - "space_guid": "fake-space-guid", - "gateway_data": null, - "dashboard_url": "https://fake/dashboard/url", - "type": "managed_service_instance", - "space_url": "/v2/spaces/fake-space-guid", - "service_plan_url": "/v2/service_plans/fake-service-plan-guid", - "service_bindings_url": "/v2/service_instances/fake-guid/service_bindings", - "last_operation": { - "type": "create", - "state": "in progress", - "description": "fake state description", - "updated_at": "fake updated at" - }, - "service_plan": { - "metadata": { - "guid": "fake-service-plan-guid" - }, - "entity": { - "name": "fake-service-plan-name", - "free": true, - "description": "fake-description", - "public": true, - "active": true, - "service_guid": "fake-service-guid" - } - }, - "service_bindings": [{ - "metadata": { - "guid": "fake-service-binding-guid", - "url": "http://fake/url" - }, - "entity": { - "app_guid": "fake-app-guid" - } - }] - } - }` - }) - - Describe("#ToFields", func() { - It("unmarshalls the fields of a service instance resource", func() { - fields := resource.ToFields() - - Expect(fields.Guid).To(Equal("fake-guid")) - Expect(fields.Name).To(Equal("fake service name")) - Expect(fields.DashboardUrl).To(Equal("https://fake/dashboard/url")) - Expect(fields.LastOperation.Type).To(Equal("create")) - Expect(fields.LastOperation.State).To(Equal("in progress")) - Expect(fields.LastOperation.Description).To(Equal("fake state description")) - Expect(fields.LastOperation.CreatedAt).To(Equal("fake created at")) - Expect(fields.LastOperation.UpdatedAt).To(Equal("fake updated at")) - }) - - Context("When created_at is null", func() { - It("unmarshalls the service instance resource model", func() { - var resourceWithNullCreatedAt ServiceInstanceResource - metadata := `"metadata": { - "guid": "fake-guid", - "url": "/v2/service_instances/fake-guid", - "created_at": null, - "updated_at": "2015-01-13T18:52:08+00:00" - }` - stringWithNullCreatedAt := fmt.Sprintf(instanceString, metadata) - - err := json.Unmarshal([]byte(stringWithNullCreatedAt), &resourceWithNullCreatedAt) - Expect(err).ToNot(HaveOccurred()) - }) - }) - - Context("When created_at is missing", func() { - It("unmarshalls the service instance resource model", func() { - var resourceWithMissingCreatedAt ServiceInstanceResource - - metadata := `"metadata": { - "guid": "fake-guid", - "url": "/v2/service_instances/fake-guid", - "updated_at": "2015-01-13T18:52:08+00:00" - }` - stringWithMissingCreatedAt := fmt.Sprintf(instanceString, metadata) - - err := json.Unmarshal([]byte(stringWithMissingCreatedAt), &resourceWithMissingCreatedAt) - Expect(err).ToNot(HaveOccurred()) - }) - }) - }) - - Describe("#ToModel", func() { - It("unmarshalls the service instance resource model", func() { - instance := resource.ToModel() - - Expect(instance.ServiceInstanceFields.Guid).To(Equal("fake-guid")) - Expect(instance.ServiceInstanceFields.Name).To(Equal("fake service name")) - Expect(instance.ServiceInstanceFields.DashboardUrl).To(Equal("https://fake/dashboard/url")) - Expect(instance.ServiceInstanceFields.LastOperation.Type).To(Equal("create")) - Expect(instance.ServiceInstanceFields.LastOperation.State).To(Equal("in progress")) - Expect(instance.ServiceInstanceFields.LastOperation.Description).To(Equal("fake state description")) - Expect(instance.ServiceInstanceFields.LastOperation.CreatedAt).To(Equal("fake created at")) - Expect(instance.ServiceInstanceFields.LastOperation.UpdatedAt).To(Equal("fake updated at")) - - Expect(instance.ServicePlan.Guid).To(Equal("fake-service-plan-guid")) - Expect(instance.ServicePlan.Free).To(BeTrue()) - Expect(instance.ServicePlan.Description).To(Equal("fake-description")) - Expect(instance.ServicePlan.Public).To(BeTrue()) - Expect(instance.ServicePlan.Active).To(BeTrue()) - Expect(instance.ServicePlan.ServiceOfferingGuid).To(Equal("fake-service-guid")) - - Expect(instance.ServiceBindings[0].Guid).To(Equal("fake-service-binding-guid")) - Expect(instance.ServiceBindings[0].Url).To(Equal("http://fake/url")) - Expect(instance.ServiceBindings[0].AppGuid).To(Equal("fake-app-guid")) - }) - }) - }) - - Context("Old brokers (no last_operation)", func() { - Describe("#ToFields", func() { - It("unmarshalls the fields of a service instance resource", func() { - fields := resourceWithNullLastOp.ToFields() - - Expect(fields.Guid).To(Equal("fake-guid")) - Expect(fields.Name).To(Equal("fake service name")) - Expect(fields.DashboardUrl).To(Equal("https://fake/dashboard/url")) - Expect(fields.LastOperation.Type).To(Equal("")) - Expect(fields.LastOperation.State).To(Equal("")) - Expect(fields.LastOperation.Description).To(Equal("")) - }) - }) - - Describe("#ToModel", func() { - It("unmarshalls the service instance resource model", func() { - instance := resourceWithNullLastOp.ToModel() - - Expect(instance.ServiceInstanceFields.Guid).To(Equal("fake-guid")) - Expect(instance.ServiceInstanceFields.Name).To(Equal("fake service name")) - Expect(instance.ServiceInstanceFields.DashboardUrl).To(Equal("https://fake/dashboard/url")) - - Expect(instance.ServiceInstanceFields.LastOperation.Type).To(Equal("")) - Expect(instance.ServiceInstanceFields.LastOperation.State).To(Equal("")) - Expect(instance.ServiceInstanceFields.LastOperation.Description).To(Equal("")) - - Expect(instance.ServicePlan.Guid).To(Equal("fake-service-plan-guid")) - Expect(instance.ServicePlan.Free).To(BeTrue()) - Expect(instance.ServicePlan.Description).To(Equal("fake-description")) - Expect(instance.ServicePlan.Public).To(BeTrue()) - Expect(instance.ServicePlan.Active).To(BeTrue()) - Expect(instance.ServicePlan.ServiceOfferingGuid).To(Equal("fake-service-guid")) - - Expect(instance.ServiceBindings[0].Guid).To(Equal("fake-service-binding-guid")) - Expect(instance.ServiceBindings[0].Url).To(Equal("http://fake/url")) - Expect(instance.ServiceBindings[0].AppGuid).To(Equal("fake-app-guid")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_keys.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_keys.go deleted file mode 100644 index 97c0ab9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_keys.go +++ /dev/null @@ -1,37 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type ServiceKeyResource struct { - Resource - Entity ServiceKeyEntity -} - -type ServiceKeyEntity struct { - Name string `json:"name"` - ServiceInstanceGuid string `json:"service_instance_guid"` - ServiceInstanceUrl string `json:"service_instance_url"` - Credentials map[string]interface{} `json:"credentials"` -} - -func (resource ServiceKeyResource) ToFields() models.ServiceKeyFields { - return models.ServiceKeyFields{ - Name: resource.Entity.Name, - Url: resource.Metadata.Url, - Guid: resource.Metadata.Guid, - } -} - -func (resource ServiceKeyResource) ToModel() models.ServiceKey { - return models.ServiceKey{ - Fields: models.ServiceKeyFields{ - Name: resource.Entity.Name, - Guid: resource.Metadata.Guid, - Url: resource.Metadata.Url, - - ServiceInstanceGuid: resource.Entity.ServiceInstanceGuid, - ServiceInstanceUrl: resource.Entity.ServiceInstanceUrl, - }, - Credentials: resource.Entity.Credentials, - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_keys_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_keys_test.go deleted file mode 100644 index 5b9fd47..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_keys_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package resources_test - -import ( - "encoding/json" - - . "github.com/cloudfoundry/cli/cf/api/resources" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServiceKeyResource", func() { - var resource ServiceKeyResource - - BeforeEach(func() { - err := json.Unmarshal([]byte(` - { - "metadata": { - "guid": "fake-service-key-guid", - "url": "/v2/service_keys/fake-guid", - "created_at": "2015-01-13T18:52:08+00:00", - "updated_at": null - }, - "entity": { - "name": "fake-service-key-name", - "service_instance_guid":"fake-service-instance-guid", - "service_instance_url":"http://fake/service/instance/url", - "credentials": { - "username": "fake-username", - "password": "fake-password", - "host": "fake-host", - "port": 3306, - "database": "fake-db-name", - "uri": "mysql://fake-user:fake-password@fake-host:3306/fake-db-name" - } - } - }`), &resource) - - Expect(err).ToNot(HaveOccurred()) - }) - - Context("Brokers unmarshall service keys", func() { - Describe("#ToFields", func() { - It("unmarshalls the fields of a service key resource", func() { - fields := resource.ToFields() - - Expect(fields.Guid).To(Equal("fake-service-key-guid")) - Expect(fields.Name).To(Equal("fake-service-key-name")) - }) - }) - - Describe("#ToModel", func() { - It("unmarshalls the service instance resource model", func() { - instance := resource.ToModel() - - Expect(instance.Fields.Name).To(Equal("fake-service-key-name")) - Expect(instance.Fields.Guid).To(Equal("fake-service-key-guid")) - Expect(instance.Fields.Url).To(Equal("/v2/service_keys/fake-guid")) - Expect(instance.Fields.ServiceInstanceGuid).To(Equal("fake-service-instance-guid")) - Expect(instance.Fields.ServiceInstanceUrl).To(Equal("http://fake/service/instance/url")) - - Expect(instance.Credentials).To(HaveKeyWithValue("username", "fake-username")) - Expect(instance.Credentials).To(HaveKeyWithValue("password", "fake-password")) - Expect(instance.Credentials).To(HaveKeyWithValue("host", "fake-host")) - Expect(instance.Credentials).To(HaveKeyWithValue("port", float64(3306))) - Expect(instance.Credentials).To(HaveKeyWithValue("database", "fake-db-name")) - Expect(instance.Credentials).To(HaveKeyWithValue("uri", "mysql://fake-user:fake-password@fake-host:3306/fake-db-name")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_offerings.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_offerings.go deleted file mode 100644 index e94a6c9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_offerings.go +++ /dev/null @@ -1,44 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type PaginatedServiceOfferingResources struct { - Resources []ServiceOfferingResource -} - -type ServiceOfferingResource struct { - Resource - Entity ServiceOfferingEntity -} - -type ServiceOfferingEntity struct { - Label string `json:"label"` - Version string `json:"version"` - Description string `json:"description"` - DocumentationUrl string `json:"documentation_url"` - Provider string `json:"provider"` - BrokerGuid string `json:"service_broker_guid"` - ServicePlans []ServicePlanResource `json:"service_plans"` -} - -func (resource ServiceOfferingResource) ToFields() (fields models.ServiceOfferingFields) { - fields.Label = resource.Entity.Label - fields.Version = resource.Entity.Version - fields.Provider = resource.Entity.Provider - fields.Description = resource.Entity.Description - fields.BrokerGuid = resource.Entity.BrokerGuid - fields.Guid = resource.Metadata.Guid - fields.DocumentationUrl = resource.Entity.DocumentationUrl - return -} - -func (resource ServiceOfferingResource) ToModel() (offering models.ServiceOffering) { - offering.ServiceOfferingFields = resource.ToFields() - for _, p := range resource.Entity.ServicePlans { - servicePlan := models.ServicePlanFields{} - servicePlan.Name = p.Entity.Name - servicePlan.Guid = p.Metadata.Guid - offering.Plans = append(offering.Plans, servicePlan) - } - return offering -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_plan_visibility.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_plan_visibility.go deleted file mode 100644 index 9889105..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_plan_visibility.go +++ /dev/null @@ -1,15 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type ServicePlanVisibilityResource struct { - Resource - Entity models.ServicePlanVisibilityFields -} - -func (resource ServicePlanVisibilityResource) ToFields() (fields models.ServicePlanVisibilityFields) { - fields.Guid = resource.Metadata.Guid - fields.ServicePlanGuid = resource.Entity.ServicePlanGuid - fields.OrganizationGuid = resource.Entity.OrganizationGuid - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/space_quotas.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/space_quotas.go deleted file mode 100644 index 95fd03f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/space_quotas.go +++ /dev/null @@ -1,27 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type PaginatedSpaceQuotaResources struct { - Resources []SpaceQuotaResource -} - -type SpaceQuotaResource struct { - Resource - Entity models.SpaceQuota -} - -func (resource SpaceQuotaResource) ToModel() models.SpaceQuota { - entity := resource.Entity - - return models.SpaceQuota{ - Guid: resource.Metadata.Guid, - Name: entity.Name, - MemoryLimit: entity.MemoryLimit, - InstanceMemoryLimit: entity.InstanceMemoryLimit, - RoutesLimit: entity.RoutesLimit, - ServicesLimit: entity.ServicesLimit, - NonBasicServicesAllowed: entity.NonBasicServicesAllowed, - OrgGuid: entity.OrgGuid, - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/spaces.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/spaces.go deleted file mode 100644 index 6c26888..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/spaces.go +++ /dev/null @@ -1,47 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type SpaceResource struct { - Resource - Entity SpaceEntity -} - -type SpaceEntity struct { - Name string - Organization OrganizationResource - Applications []ApplicationResource `json:"apps"` - Domains []DomainResource - ServiceInstances []ServiceInstanceResource `json:"service_instances"` - SecurityGroups []SecurityGroupResource `json:"security_groups"` - SpaceQuotaGuid string `json:"space_quota_definition_guid"` -} - -func (resource SpaceResource) ToFields() (fields models.SpaceFields) { - fields.Guid = resource.Metadata.Guid - fields.Name = resource.Entity.Name - return -} - -func (resource SpaceResource) ToModel() (space models.Space) { - space.SpaceFields = resource.ToFields() - for _, app := range resource.Entity.Applications { - space.Applications = append(space.Applications, app.ToFields()) - } - - for _, domainResource := range resource.Entity.Domains { - space.Domains = append(space.Domains, domainResource.ToFields()) - } - - for _, serviceResource := range resource.Entity.ServiceInstances { - space.ServiceInstances = append(space.ServiceInstances, serviceResource.ToFields()) - } - - for _, securityGroupResource := range resource.Entity.SecurityGroups { - space.SecurityGroups = append(space.SecurityGroups, securityGroupResource.ToFields()) - } - - space.Organization = resource.Entity.Organization.ToFields() - space.SpaceQuotaGuid = resource.Entity.SpaceQuotaGuid - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/stacks.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/stacks.go deleted file mode 100644 index b1bc46a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/stacks.go +++ /dev/null @@ -1,25 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type PaginatedStackResources struct { - Resources []StackResource -} - -type StackResource struct { - Resource - Entity StackEntity -} - -type StackEntity struct { - Name string - Description string -} - -func (resource StackResource) ToFields() *models.Stack { - return &models.Stack{ - Guid: resource.Metadata.Guid, - Name: resource.Entity.Name, - Description: resource.Entity.Description, - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/users.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/users.go deleted file mode 100644 index edcbdf6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/users.go +++ /dev/null @@ -1,60 +0,0 @@ -package resources - -import "github.com/cloudfoundry/cli/cf/models" - -type UserResource struct { - Resource - Entity UserEntity -} - -type UserEntity struct { - Name string `json:"username,omitempty"` - Admin bool -} - -type UAAUserResources struct { - Resources []struct { - Id string - Username string - } -} - -func (resource UserResource) ToFields() models.UserFields { - return models.UserFields{ - Guid: resource.Metadata.Guid, - IsAdmin: resource.Entity.Admin, - Username: resource.Entity.Name, - } -} - -type UAAUserResourceEmail struct { - Value string `json:"value"` -} - -type UAAUserResourceName struct { - GivenName string `json:"givenName"` - FamilyName string `json:"familyName"` -} - -type UAAUserResource struct { - Username string `json:"userName"` - Emails []UAAUserResourceEmail `json:"emails"` - Password string `json:"password"` - Name UAAUserResourceName `json:"name"` -} - -func NewUAAUserResource(username, password string) UAAUserResource { - return UAAUserResource{ - Username: username, - Emails: []UAAUserResourceEmail{{Value: username}}, - Password: password, - Name: UAAUserResourceName{ - GivenName: username, - FamilyName: username, - }, - } -} - -type UAAUserFields struct { - Id string -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/routes.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/routes.go deleted file mode 100644 index 30df038..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/routes.go +++ /dev/null @@ -1,122 +0,0 @@ -package api - -import ( - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type RouteRepository interface { - ListRoutes(cb func(models.Route) bool) (apiErr error) - ListAllRoutes(cb func(models.Route) bool) (apiErr error) - FindByHostAndDomain(host string, domain models.DomainFields) (route models.Route, apiErr error) - Create(host string, domain models.DomainFields) (createdRoute models.Route, apiErr error) - CheckIfExists(host string, domain models.DomainFields) (found bool, apiErr error) - CreateInSpace(host, domainGuid, spaceGuid string) (createdRoute models.Route, apiErr error) - Bind(routeGuid, appGuid string) (apiErr error) - Unbind(routeGuid, appGuid string) (apiErr error) - Delete(routeGuid string) (apiErr error) -} - -type CloudControllerRouteRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerRouteRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerRouteRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerRouteRepository) ListRoutes(cb func(models.Route) bool) (apiErr error) { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/spaces/%s/routes?inline-relations-depth=1", repo.config.SpaceFields().Guid), - resources.RouteResource{}, - func(resource interface{}) bool { - return cb(resource.(resources.RouteResource).ToModel()) - }) -} - -func (repo CloudControllerRouteRepository) ListAllRoutes(cb func(models.Route) bool) (apiErr error) { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/routes?q=organization_guid:%s&inline-relations-depth=1", repo.config.OrganizationFields().Guid), - resources.RouteResource{}, - func(resource interface{}) bool { - return cb(resource.(resources.RouteResource).ToModel()) - }) -} -func (repo CloudControllerRouteRepository) FindByHostAndDomain(host string, domain models.DomainFields) (route models.Route, apiErr error) { - found := false - apiErr = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/routes?inline-relations-depth=1&q=%s", url.QueryEscape("host:"+host+";domain_guid:"+domain.Guid)), - resources.RouteResource{}, - func(resource interface{}) bool { - route = resource.(resources.RouteResource).ToModel() - found = true - return false - }) - - if apiErr == nil && !found { - apiErr = errors.NewModelNotFoundError("Route", host) - } - - return -} - -func (repo CloudControllerRouteRepository) Create(host string, domain models.DomainFields) (createdRoute models.Route, apiErr error) { - return repo.CreateInSpace(host, domain.Guid, repo.config.SpaceFields().Guid) -} - -func (repo CloudControllerRouteRepository) CheckIfExists(host string, domain models.DomainFields) (found bool, apiErr error) { - var raw_response interface{} - apiErr = repo.gateway.GetResource(fmt.Sprintf("%s/v2/routes/reserved/domain/%s/host/%s", repo.config.ApiEndpoint(), domain.Guid, host), &raw_response) - - switch apiErr.(type) { - case nil: - found = true - case *errors.HttpNotFoundError: - found = false - apiErr = nil - default: - return - } - return -} - -func (repo CloudControllerRouteRepository) CreateInSpace(host, domainGuid, spaceGuid string) (createdRoute models.Route, apiErr error) { - data := fmt.Sprintf(`{"host":"%s","domain_guid":"%s","space_guid":"%s"}`, host, domainGuid, spaceGuid) - - resource := new(resources.RouteResource) - apiErr = repo.gateway.CreateResource(repo.config.ApiEndpoint(), "/v2/routes?inline-relations-depth=1", strings.NewReader(data), resource) - if apiErr != nil { - return - } - - createdRoute = resource.ToModel() - return -} - -func (repo CloudControllerRouteRepository) Bind(routeGuid, appGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/apps/%s/routes/%s", appGuid, routeGuid) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, nil) -} - -func (repo CloudControllerRouteRepository) Unbind(routeGuid, appGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/apps/%s/routes/%s", appGuid, routeGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} - -func (repo CloudControllerRouteRepository) Delete(routeGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/routes/%s", routeGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/routes_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/routes_test.go deleted file mode 100644 index 2693c9a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/routes_test.go +++ /dev/null @@ -1,457 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("route repository", func() { - - var ( - ts *httptest.Server - handler *testnet.TestHandler - configRepo core_config.Repository - repo CloudControllerRouteRepository - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - configRepo.SetSpaceFields(models.SpaceFields{ - Guid: "the-space-guid", - Name: "the-space-name", - }) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerRouteRepository(configRepo, gateway) - }) - - AfterEach(func() { - ts.Close() - }) - - Describe("List routes", func() { - It("lists routes in the current space", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/the-space-guid/routes?inline-relations-depth=1", - Response: firstPageRoutesResponse, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/the-space-guid/routes?inline-relations-depth=1&page=2", - Response: secondPageRoutesResponse, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - routes := []models.Route{} - apiErr := repo.ListRoutes(func(route models.Route) bool { - routes = append(routes, route) - return true - }) - - Expect(len(routes)).To(Equal(2)) - Expect(routes[0].Guid).To(Equal("route-1-guid")) - Expect(routes[1].Guid).To(Equal("route-2-guid")) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("lists routes from all the spaces of current org", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes?q=organization_guid:my-org-guid&inline-relations-depth=1", - Response: firstPageRoutesOrgLvlResponse, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes?q=organization_guid:my-org-guid&inline-relations-depth=1&page=2", - Response: secondPageRoutesResponse, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - routes := []models.Route{} - apiErr := repo.ListAllRoutes(func(route models.Route) bool { - routes = append(routes, route) - return true - }) - - Expect(len(routes)).To(Equal(2)) - Expect(routes[0].Guid).To(Equal("route-1-guid")) - Expect(routes[0].Space.Guid).To(Equal("space-1-guid")) - Expect(routes[1].Guid).To(Equal("route-2-guid")) - Expect(routes[1].Space.Guid).To(Equal("space-2-guid")) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - It("finds a route by host and domain", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes?q=host%3Amy-cool-app%3Bdomain_guid%3Amy-domain-guid", - Response: findRouteByHostResponse, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - domain := models.DomainFields{} - domain.Guid = "my-domain-guid" - - route, apiErr := repo.FindByHostAndDomain("my-cool-app", domain) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(route.Host).To(Equal("my-cool-app")) - Expect(route.Guid).To(Equal("my-route-guid")) - Expect(route.Domain.Guid).To(Equal(domain.Guid)) - }) - - It("returns 'not found' response when there is no route w/ the given domain and host", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes?q=host%3Amy-cool-app%3Bdomain_guid%3Amy-domain-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ "resources": [ ] }`}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - domain := models.DomainFields{} - domain.Guid = "my-domain-guid" - - _, apiErr := repo.FindByHostAndDomain("my-cool-app", domain) - - Expect(handler).To(HaveAllRequestsCalled()) - - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - }) - - Describe("Create routes", func() { - It("creates routes in a given space", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/routes?inline-relations-depth=1", - Matcher: testnet.RequestBodyMatcher(`{"host":"my-cool-app","domain_guid":"my-domain-guid","space_guid":"my-space-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { "guid": "my-route-guid" }, - "entity": { "host": "my-cool-app" } - } - `}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - createdRoute, apiErr := repo.CreateInSpace("my-cool-app", "my-domain-guid", "my-space-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(createdRoute.Guid).To(Equal("my-route-guid")) - }) - - It("creates routes", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/routes?inline-relations-depth=1", - Matcher: testnet.RequestBodyMatcher(`{"host":"my-cool-app","domain_guid":"my-domain-guid","space_guid":"the-space-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { "guid": "my-route-guid" }, - "entity": { "host": "my-cool-app" } - } - `}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - createdRoute, apiErr := repo.Create("my-cool-app", models.DomainFields{Guid: "my-domain-guid"}) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(createdRoute.Guid).To(Equal("my-route-guid")) - }) - - }) - - Describe("Check routes", func() { - It("checks if a route exists", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes/reserved/domain/domain-guid/host/my-host", - Response: testnet.TestResponse{Status: http.StatusNoContent}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - domain := models.DomainFields{} - domain.Guid = "domain-guid" - - found, apiErr := repo.CheckIfExists("my-host", domain) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(found).To(BeTrue()) - }) - Context("when the route is not found", func() { - It("does not return the error", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes/reserved/domain/domain-guid/host/my-host", - Response: testnet.TestResponse{Status: http.StatusNotFound}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - domain := models.DomainFields{} - domain.Guid = "domain-guid" - - found, apiErr := repo.CheckIfExists("my-host", domain) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(found).To(BeFalse()) - }) - }) - Context("when there is a random httpError", func() { - It("returns false and the error", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/routes/reserved/domain/domain-guid/host/my-host", - Response: testnet.TestResponse{Status: http.StatusForbidden}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - domain := models.DomainFields{} - domain.Guid = "domain-guid" - - found, apiErr := repo.CheckIfExists("my-host", domain) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - Expect(found).To(BeFalse()) - }) - }) - }) - - Describe("Bind routes", func() { - It("binds routes", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/apps/my-cool-app-guid/routes/my-cool-route-guid", - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ""}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - apiErr := repo.Bind("my-cool-route-guid", "my-cool-app-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("unbinds routes", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/apps/my-cool-app-guid/routes/my-cool-route-guid", - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ""}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - apiErr := repo.Unbind("my-cool-route-guid", "my-cool-app-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - }) - - Describe("Delete routes", func() { - It("deletes routes", func() { - ts, handler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/routes/my-cool-route-guid", - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ""}, - }), - }) - configRepo.SetApiEndpoint(ts.URL) - - apiErr := repo.Delete("my-cool-route-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - -}) - -var firstPageRoutesResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/spaces/the-space-guid/routes?inline-relations-depth=1&page=2", - "resources": [ - { - "metadata": { - "guid": "route-1-guid" - }, - "entity": { - "host": "route-1-host", - "domain": { - "metadata": { - "guid": "domain-1-guid" - }, - "entity": { - "name": "cfapps.io" - } - }, - "space": { - "metadata": { - "guid": "space-1-guid" - }, - "entity": { - "name": "space-1" - } - }, - "apps": [ - { - "metadata": { - "guid": "app-1-guid" - }, - "entity": { - "name": "app-1" - } - } - ] - } - } - ] -}`} - -var secondPageRoutesResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "route-2-guid" - }, - "entity": { - "host": "route-2-host", - "domain": { - "metadata": { - "guid": "domain-2-guid" - }, - "entity": { - "name": "example.com" - } - }, - "space": { - "metadata": { - "guid": "space-2-guid" - }, - "entity": { - "name": "space-2" - } - }, - "apps": [ - { - "metadata": { - "guid": "app-2-guid" - }, - "entity": { - "name": "app-2" - } - }, - { - "metadata": { - "guid": "app-3-guid" - }, - "entity": { - "name": "app-3" - } - } - ] - } - } - ] -}`} - -var findRouteByHostResponse = testnet.TestResponse{Status: http.StatusCreated, Body: ` -{ "resources": [ - { - "metadata": { - "guid": "my-route-guid" - }, - "entity": { - "host": "my-cool-app", - "domain": { - "metadata": { - "guid": "my-domain-guid" - } - } - } - } -]}`} - -var firstPageRoutesOrgLvlResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/routes?q=organization_guid:my-org-guid&inline-relations-depth=1&page=2", - "resources": [ - { - "metadata": { - "guid": "route-1-guid" - }, - "entity": { - "host": "route-1-host", - "domain": { - "metadata": { - "guid": "domain-1-guid" - }, - "entity": { - "name": "cfapps.io" - } - }, - "space": { - "metadata": { - "guid": "space-1-guid" - }, - "entity": { - "name": "space-1" - } - }, - "apps": [ - { - "metadata": { - "guid": "app-1-guid" - }, - "entity": { - "name": "app-1" - } - } - ] - } - } - ] -}`} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/defaults.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/defaults.go deleted file mode 100644 index 5fd0cb5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/defaults.go +++ /dev/null @@ -1,44 +0,0 @@ -package defaults - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type DefaultSecurityGroupsRepoBase struct { - ConfigRepo core_config.Reader - Gateway net.Gateway -} - -func (repo *DefaultSecurityGroupsRepoBase) Bind(groupGuid string, path string) error { - updatedPath := fmt.Sprintf("%s/%s", path, groupGuid) - return repo.Gateway.UpdateResourceFromStruct(repo.ConfigRepo.ApiEndpoint(), updatedPath, "") -} - -func (repo *DefaultSecurityGroupsRepoBase) List(path string) ([]models.SecurityGroupFields, error) { - groups := []models.SecurityGroupFields{} - - err := repo.Gateway.ListPaginatedResources( - repo.ConfigRepo.ApiEndpoint(), - path, - resources.SecurityGroupResource{}, - func(resource interface{}) bool { - if securityGroupResource, ok := resource.(resources.SecurityGroupResource); ok { - groups = append(groups, securityGroupResource.ToFields()) - } - - return true - }, - ) - - return groups, err -} - -func (repo *DefaultSecurityGroupsRepoBase) Delete(groupGuid string, path string) error { - updatedPath := fmt.Sprintf("%s/%s", path, groupGuid) - return repo.Gateway.DeleteResource(repo.ConfigRepo.ApiEndpoint(), updatedPath) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/fakes/fake_running_security_groups_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/fakes/fake_running_security_groups_repo.go deleted file mode 100644 index 834d72e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/fakes/fake_running_security_groups_repo.go +++ /dev/null @@ -1,124 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults" - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeRunningSecurityGroupsRepo struct { - BindToRunningSetStub func(string) error - bindToRunningSetMutex sync.RWMutex - bindToRunningSetArgsForCall []struct { - arg1 string - } - bindToRunningSetReturns struct { - result1 error - } - ListStub func() ([]models.SecurityGroupFields, error) - listMutex sync.RWMutex - listArgsForCall []struct{} - listReturns struct { - result1 []models.SecurityGroupFields - result2 error - } - UnbindFromRunningSetStub func(string) error - unbindFromRunningSetMutex sync.RWMutex - unbindFromRunningSetArgsForCall []struct { - arg1 string - } - unbindFromRunningSetReturns struct { - result1 error - } -} - -func (fake *FakeRunningSecurityGroupsRepo) BindToRunningSet(arg1 string) error { - fake.bindToRunningSetMutex.Lock() - defer fake.bindToRunningSetMutex.Unlock() - fake.bindToRunningSetArgsForCall = append(fake.bindToRunningSetArgsForCall, struct { - arg1 string - }{arg1}) - if fake.BindToRunningSetStub != nil { - return fake.BindToRunningSetStub(arg1) - } else { - return fake.bindToRunningSetReturns.result1 - } -} - -func (fake *FakeRunningSecurityGroupsRepo) BindToRunningSetCallCount() int { - fake.bindToRunningSetMutex.RLock() - defer fake.bindToRunningSetMutex.RUnlock() - return len(fake.bindToRunningSetArgsForCall) -} - -func (fake *FakeRunningSecurityGroupsRepo) BindToRunningSetArgsForCall(i int) string { - fake.bindToRunningSetMutex.RLock() - defer fake.bindToRunningSetMutex.RUnlock() - return fake.bindToRunningSetArgsForCall[i].arg1 -} - -func (fake *FakeRunningSecurityGroupsRepo) BindToRunningSetReturns(result1 error) { - fake.bindToRunningSetReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeRunningSecurityGroupsRepo) List() ([]models.SecurityGroupFields, error) { - fake.listMutex.Lock() - defer fake.listMutex.Unlock() - fake.listArgsForCall = append(fake.listArgsForCall, struct{}{}) - if fake.ListStub != nil { - return fake.ListStub() - } else { - return fake.listReturns.result1, fake.listReturns.result2 - } -} - -func (fake *FakeRunningSecurityGroupsRepo) ListCallCount() int { - fake.listMutex.RLock() - defer fake.listMutex.RUnlock() - return len(fake.listArgsForCall) -} - -func (fake *FakeRunningSecurityGroupsRepo) ListReturns(result1 []models.SecurityGroupFields, result2 error) { - fake.listReturns = struct { - result1 []models.SecurityGroupFields - result2 error - }{result1, result2} -} - -func (fake *FakeRunningSecurityGroupsRepo) UnbindFromRunningSet(arg1 string) error { - fake.unbindFromRunningSetMutex.Lock() - defer fake.unbindFromRunningSetMutex.Unlock() - fake.unbindFromRunningSetArgsForCall = append(fake.unbindFromRunningSetArgsForCall, struct { - arg1 string - }{arg1}) - if fake.UnbindFromRunningSetStub != nil { - return fake.UnbindFromRunningSetStub(arg1) - } else { - return fake.unbindFromRunningSetReturns.result1 - } -} - -func (fake *FakeRunningSecurityGroupsRepo) UnbindFromRunningSetCallCount() int { - fake.unbindFromRunningSetMutex.RLock() - defer fake.unbindFromRunningSetMutex.RUnlock() - return len(fake.unbindFromRunningSetArgsForCall) -} - -func (fake *FakeRunningSecurityGroupsRepo) UnbindFromRunningSetArgsForCall(i int) string { - fake.unbindFromRunningSetMutex.RLock() - defer fake.unbindFromRunningSetMutex.RUnlock() - return fake.unbindFromRunningSetArgsForCall[i].arg1 -} - -func (fake *FakeRunningSecurityGroupsRepo) UnbindFromRunningSetReturns(result1 error) { - fake.unbindFromRunningSetReturns = struct { - result1 error - }{result1} -} - -var _ RunningSecurityGroupsRepo = new(FakeRunningSecurityGroupsRepo) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running.go deleted file mode 100644 index d516ad1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running.go +++ /dev/null @@ -1,42 +0,0 @@ -package running - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults" -) - -const urlPath = "/v2/config/running_security_groups" - -type RunningSecurityGroupsRepo interface { - BindToRunningSet(string) error - List() ([]models.SecurityGroupFields, error) - UnbindFromRunningSet(string) error -} - -type cloudControllerRunningSecurityGroupRepo struct { - repoBase DefaultSecurityGroupsRepoBase -} - -func NewRunningSecurityGroupsRepo(configRepo core_config.Reader, gateway net.Gateway) RunningSecurityGroupsRepo { - return &cloudControllerRunningSecurityGroupRepo{ - repoBase: DefaultSecurityGroupsRepoBase{ - ConfigRepo: configRepo, - Gateway: gateway, - }, - } -} - -func (repo *cloudControllerRunningSecurityGroupRepo) BindToRunningSet(groupGuid string) error { - return repo.repoBase.Bind(groupGuid, urlPath) -} - -func (repo *cloudControllerRunningSecurityGroupRepo) List() ([]models.SecurityGroupFields, error) { - return repo.repoBase.List(urlPath) -} - -func (repo *cloudControllerRunningSecurityGroupRepo) UnbindFromRunningSet(groupGuid string) error { - return repo.repoBase.Delete(groupGuid, urlPath) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running_suite_test.go deleted file mode 100644 index d9bdc21..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package running_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestRunning(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Running Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running_test.go deleted file mode 100644 index 24c0137..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/running_test.go +++ /dev/null @@ -1,193 +0,0 @@ -package running_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("RunningSecurityGroupsRepo", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo RunningSecurityGroupsRepo - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewRunningSecurityGroupsRepo(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".BindToRunningSet", func() { - It("makes a correct request", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/config/running_security_groups/a-real-guid", - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: bindRunningResponse, - }, - }), - ) - - err := repo.BindToRunningSet("a-real-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".UnbindFromRunningSet", func() { - It("makes a correct request", func() { - testServer, testHandler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/config/running_security_groups/my-guid", - Response: testnet.TestResponse{ - Status: http.StatusNoContent, - }, - }), - }) - - configRepo.SetApiEndpoint(testServer.URL) - err := repo.UnbindFromRunningSet("my-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".List", func() { - It("returns a list of security groups that are the defaults for running", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/running_security_groups", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: firstRunningListItem, - }, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/running_security_groups", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: secondRunningListItem, - }, - }), - ) - - defaults, err := repo.List() - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(defaults).To(ConsistOf([]models.SecurityGroupFields{ - { - Name: "name-71", - Guid: "cd186158-b356-474d-9861-724f34f48502", - Rules: []map[string]interface{}{{ - "protocol": "udp", - }}, - }, - { - Name: "name-72", - Guid: "d3374b62-7eac-4823-afbd-460d2bf44c67", - Rules: []map[string]interface{}{{ - "destination": "198.41.191.47/1", - }}, - }, - })) - }) - }) -}) - -var bindRunningResponse string = `{ - "metadata": { - "guid": "897341eb-ef31-406f-b57b-414f51583a3a", - "url": "/v2/config/running_security_groups/897341eb-ef31-406f-b57b-414f51583a3a", - "created_at": "2014-06-23T21:43:30+00:00", - "updated_at": "2014-06-23T21:43:30+00:00" - }, - "entity": { - "name": "name-904", - "rules": [ - { - "protocol": "udp", - "ports": "8080", - "destination": "198.41.191.47/1" - } - ] - } -}` - -var firstRunningListItem string = `{ - "next_url": "/v2/config/running_security_groups?page=2", - "resources": [ - { - "metadata": { - "guid": "cd186158-b356-474d-9861-724f34f48502", - "url": "/v2/security_groups/cd186158-b356-474d-9861-724f34f48502", - "created_at": "2014-06-23T22:55:30+00:00", - "updated_at": null - }, - "entity": { - "name": "name-71", - "rules": [ - { - "protocol": "udp" - } - ], - "spaces_url": "/v2/security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67/spaces" - } - } - ] -}` - -var secondRunningListItem string = `{ - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "d3374b62-7eac-4823-afbd-460d2bf44c67", - "url": "/v2/config/running_security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67", - "created_at": "2014-06-23T22:55:30+00:00", - "updated_at": null - }, - "entity": { - "name": "name-72", - "rules": [ - { - "destination": "198.41.191.47/1" - } - ], - "spaces_url": "/v2/security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67/spaces" - } - } - ] -}` diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/fakes/fake_staging_security_groups_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/fakes/fake_staging_security_groups_repo.go deleted file mode 100644 index 4815bf7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/fakes/fake_staging_security_groups_repo.go +++ /dev/null @@ -1,124 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults" - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeStagingSecurityGroupsRepo struct { - BindToStagingSetStub func(string) error - bindToStagingSetMutex sync.RWMutex - bindToStagingSetArgsForCall []struct { - arg1 string - } - bindToStagingSetReturns struct { - result1 error - } - ListStub func() ([]models.SecurityGroupFields, error) - listMutex sync.RWMutex - listArgsForCall []struct{} - listReturns struct { - result1 []models.SecurityGroupFields - result2 error - } - UnbindFromStagingSetStub func(string) error - unbindFromStagingSetMutex sync.RWMutex - unbindFromStagingSetArgsForCall []struct { - arg1 string - } - unbindFromStagingSetReturns struct { - result1 error - } -} - -func (fake *FakeStagingSecurityGroupsRepo) BindToStagingSet(arg1 string) error { - fake.bindToStagingSetMutex.Lock() - defer fake.bindToStagingSetMutex.Unlock() - fake.bindToStagingSetArgsForCall = append(fake.bindToStagingSetArgsForCall, struct { - arg1 string - }{arg1}) - if fake.BindToStagingSetStub != nil { - return fake.BindToStagingSetStub(arg1) - } else { - return fake.bindToStagingSetReturns.result1 - } -} - -func (fake *FakeStagingSecurityGroupsRepo) BindToStagingSetCallCount() int { - fake.bindToStagingSetMutex.RLock() - defer fake.bindToStagingSetMutex.RUnlock() - return len(fake.bindToStagingSetArgsForCall) -} - -func (fake *FakeStagingSecurityGroupsRepo) BindToStagingSetArgsForCall(i int) string { - fake.bindToStagingSetMutex.RLock() - defer fake.bindToStagingSetMutex.RUnlock() - return fake.bindToStagingSetArgsForCall[i].arg1 -} - -func (fake *FakeStagingSecurityGroupsRepo) BindToStagingSetReturns(result1 error) { - fake.bindToStagingSetReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeStagingSecurityGroupsRepo) List() ([]models.SecurityGroupFields, error) { - fake.listMutex.Lock() - defer fake.listMutex.Unlock() - fake.listArgsForCall = append(fake.listArgsForCall, struct{}{}) - if fake.ListStub != nil { - return fake.ListStub() - } else { - return fake.listReturns.result1, fake.listReturns.result2 - } -} - -func (fake *FakeStagingSecurityGroupsRepo) ListCallCount() int { - fake.listMutex.RLock() - defer fake.listMutex.RUnlock() - return len(fake.listArgsForCall) -} - -func (fake *FakeStagingSecurityGroupsRepo) ListReturns(result1 []models.SecurityGroupFields, result2 error) { - fake.listReturns = struct { - result1 []models.SecurityGroupFields - result2 error - }{result1, result2} -} - -func (fake *FakeStagingSecurityGroupsRepo) UnbindFromStagingSet(arg1 string) error { - fake.unbindFromStagingSetMutex.Lock() - defer fake.unbindFromStagingSetMutex.Unlock() - fake.unbindFromStagingSetArgsForCall = append(fake.unbindFromStagingSetArgsForCall, struct { - arg1 string - }{arg1}) - if fake.UnbindFromStagingSetStub != nil { - return fake.UnbindFromStagingSetStub(arg1) - } else { - return fake.unbindFromStagingSetReturns.result1 - } -} - -func (fake *FakeStagingSecurityGroupsRepo) UnbindFromStagingSetCallCount() int { - fake.unbindFromStagingSetMutex.RLock() - defer fake.unbindFromStagingSetMutex.RUnlock() - return len(fake.unbindFromStagingSetArgsForCall) -} - -func (fake *FakeStagingSecurityGroupsRepo) UnbindFromStagingSetArgsForCall(i int) string { - fake.unbindFromStagingSetMutex.RLock() - defer fake.unbindFromStagingSetMutex.RUnlock() - return fake.unbindFromStagingSetArgsForCall[i].arg1 -} - -func (fake *FakeStagingSecurityGroupsRepo) UnbindFromStagingSetReturns(result1 error) { - fake.unbindFromStagingSetReturns = struct { - result1 error - }{result1} -} - -var _ StagingSecurityGroupsRepo = new(FakeStagingSecurityGroupsRepo) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging.go deleted file mode 100644 index 6b6a225..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging.go +++ /dev/null @@ -1,42 +0,0 @@ -package staging - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults" -) - -const urlPath = "/v2/config/staging_security_groups" - -type StagingSecurityGroupsRepo interface { - BindToStagingSet(string) error - List() ([]models.SecurityGroupFields, error) - UnbindFromStagingSet(string) error -} - -type cloudControllerStagingSecurityGroupRepo struct { - repoBase DefaultSecurityGroupsRepoBase -} - -func NewStagingSecurityGroupsRepo(configRepo core_config.Reader, gateway net.Gateway) StagingSecurityGroupsRepo { - return &cloudControllerStagingSecurityGroupRepo{ - repoBase: DefaultSecurityGroupsRepoBase{ - ConfigRepo: configRepo, - Gateway: gateway, - }, - } -} - -func (repo *cloudControllerStagingSecurityGroupRepo) BindToStagingSet(groupGuid string) error { - return repo.repoBase.Bind(groupGuid, urlPath) -} - -func (repo *cloudControllerStagingSecurityGroupRepo) List() ([]models.SecurityGroupFields, error) { - return repo.repoBase.List(urlPath) -} - -func (repo *cloudControllerStagingSecurityGroupRepo) UnbindFromStagingSet(groupGuid string) error { - return repo.repoBase.Delete(groupGuid, urlPath) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging_suite_test.go deleted file mode 100644 index d02a47b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package staging_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestStaging(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Staging Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging_test.go deleted file mode 100644 index 026553e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/staging_test.go +++ /dev/null @@ -1,192 +0,0 @@ -package staging_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("StagingSecurityGroupsRepo", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo StagingSecurityGroupsRepo - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewStagingSecurityGroupsRepo(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe("BindToStagingSet", func() { - It("makes a correct request", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/config/staging_security_groups/a-real-guid", - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: bindStagingResponse, - }, - }), - ) - - err := repo.BindToStagingSet("a-real-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".List", func() { - It("returns a list of security groups that are the defaults for staging", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/staging_security_groups", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: firstStagingListItem, - }, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/config/staging_security_groups", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: secondStagingListItem, - }, - }), - ) - - defaults, err := repo.List() - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(defaults).To(ConsistOf([]models.SecurityGroupFields{ - { - Name: "name-71", - Guid: "cd186158-b356-474d-9861-724f34f48502", - Rules: []map[string]interface{}{{ - "protocol": "udp", - }}, - }, - { - Name: "name-72", - Guid: "d3374b62-7eac-4823-afbd-460d2bf44c67", - Rules: []map[string]interface{}{{ - "destination": "198.41.191.47/1", - }}, - }, - })) - }) - }) - - Describe("UnbindFromStagingSet", func() { - It("makes a correct request", func() { - testServer, testHandler = testnet.NewServer([]testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/config/staging_security_groups/my-guid", - Response: testnet.TestResponse{ - Status: http.StatusNoContent, - }, - }), - }) - - configRepo.SetApiEndpoint(testServer.URL) - err := repo.UnbindFromStagingSet("my-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) -}) - -var bindStagingResponse string = `{ - "metadata": { - "guid": "897341eb-ef31-406f-b57b-414f51583a3a", - "url": "/v2/config/staging_security_groups/897341eb-ef31-406f-b57b-414f51583a3a", - "created_at": "2014-06-23T21:43:30+00:00", - "updated_at": "2014-06-23T21:43:30+00:00" - }, - "entity": { - "name": "name-904", - "rules": [ - { - "protocol": "udp", - "ports": "8080", - "destination": "198.41.191.47/1" - } - ] - } -}` - -var firstStagingListItem string = `{ - "next_url": "/v2/config/staging_security_groups?page=2", - "resources": [ - { - "metadata": { - "guid": "cd186158-b356-474d-9861-724f34f48502", - "url": "/v2/security_groups/cd186158-b356-474d-9861-724f34f48502", - "created_at": "2014-06-23T22:55:30+00:00", - "updated_at": null - }, - "entity": { - "name": "name-71", - "rules": [ - { - "protocol": "udp" - } - ], - "spaces_url": "/v2/security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67/spaces" - } - } - ] -}` - -var secondStagingListItem string = `{ - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "d3374b62-7eac-4823-afbd-460d2bf44c67", - "url": "/v2/config/staging_security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67", - "created_at": "2014-06-23T22:55:30+00:00", - "updated_at": null - }, - "entity": { - "name": "name-72", - "rules": [ - { - "destination": "198.41.191.47/1" - } - ], - "spaces_url": "/v2/security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67/spaces" - } - } - ] -}` diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/fakes/fake_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/fakes/fake_security_group.go deleted file mode 100644 index a5a7d7e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/fakes/fake_security_group.go +++ /dev/null @@ -1,208 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/cloudfoundry/cli/cf/api/security_groups" -) - -type FakeSecurityGroupRepo struct { - CreateStub func(name string, rules []map[string]interface{}) error - createMutex sync.RWMutex - createArgsForCall []struct { - arg1 string - arg2 []map[string]interface{} - } - createReturns struct { - result1 error - } - UpdateStub func(guid string, rules []map[string]interface{}) error - updateMutex sync.RWMutex - updateArgsForCall []struct { - arg1 string - arg2 []map[string]interface{} - } - updateReturns struct { - result1 error - } - ReadStub func(string) (models.SecurityGroup, error) - readMutex sync.RWMutex - readArgsForCall []struct { - arg1 string - } - readReturns struct { - result1 models.SecurityGroup - result2 error - } - DeleteStub func(string) error - deleteMutex sync.RWMutex - deleteArgsForCall []struct { - arg1 string - } - deleteReturns struct { - result1 error - } - FindAllStub func() ([]models.SecurityGroup, error) - findAllMutex sync.RWMutex - findAllArgsForCall []struct{} - findAllReturns struct { - result1 []models.SecurityGroup - result2 error - } -} - -func (fake *FakeSecurityGroupRepo) Create(arg1 string, arg2 []map[string]interface{}) error { - fake.createMutex.Lock() - defer fake.createMutex.Unlock() - fake.createArgsForCall = append(fake.createArgsForCall, struct { - arg1 string - arg2 []map[string]interface{} - }{arg1, arg2}) - if fake.CreateStub != nil { - return fake.CreateStub(arg1, arg2) - } else { - return fake.createReturns.result1 - } -} - -func (fake *FakeSecurityGroupRepo) CreateCallCount() int { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return len(fake.createArgsForCall) -} - -func (fake *FakeSecurityGroupRepo) CreateArgsForCall(i int) (string, []map[string]interface{}) { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return fake.createArgsForCall[i].arg1, fake.createArgsForCall[i].arg2 -} - -func (fake *FakeSecurityGroupRepo) CreateReturns(result1 error) { - fake.createReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSecurityGroupRepo) Update(arg1 string, arg2 []map[string]interface{}) error { - fake.updateMutex.Lock() - defer fake.updateMutex.Unlock() - fake.updateArgsForCall = append(fake.updateArgsForCall, struct { - arg1 string - arg2 []map[string]interface{} - }{arg1, arg2}) - if fake.UpdateStub != nil { - return fake.UpdateStub(arg1, arg2) - } else { - return fake.updateReturns.result1 - } -} - -func (fake *FakeSecurityGroupRepo) UpdateCallCount() int { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return len(fake.updateArgsForCall) -} - -func (fake *FakeSecurityGroupRepo) UpdateArgsForCall(i int) (string, []map[string]interface{}) { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return fake.updateArgsForCall[i].arg1, fake.updateArgsForCall[i].arg2 -} - -func (fake *FakeSecurityGroupRepo) UpdateReturns(result1 error) { - fake.updateReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSecurityGroupRepo) Read(arg1 string) (models.SecurityGroup, error) { - fake.readMutex.Lock() - defer fake.readMutex.Unlock() - fake.readArgsForCall = append(fake.readArgsForCall, struct { - arg1 string - }{arg1}) - if fake.ReadStub != nil { - return fake.ReadStub(arg1) - } else { - return fake.readReturns.result1, fake.readReturns.result2 - } -} - -func (fake *FakeSecurityGroupRepo) ReadCallCount() int { - fake.readMutex.RLock() - defer fake.readMutex.RUnlock() - return len(fake.readArgsForCall) -} - -func (fake *FakeSecurityGroupRepo) ReadArgsForCall(i int) string { - fake.readMutex.RLock() - defer fake.readMutex.RUnlock() - return fake.readArgsForCall[i].arg1 -} - -func (fake *FakeSecurityGroupRepo) ReadReturns(result1 models.SecurityGroup, result2 error) { - fake.readReturns = struct { - result1 models.SecurityGroup - result2 error - }{result1, result2} -} - -func (fake *FakeSecurityGroupRepo) Delete(arg1 string) error { - fake.deleteMutex.Lock() - defer fake.deleteMutex.Unlock() - fake.deleteArgsForCall = append(fake.deleteArgsForCall, struct { - arg1 string - }{arg1}) - if fake.DeleteStub != nil { - return fake.DeleteStub(arg1) - } else { - return fake.deleteReturns.result1 - } -} - -func (fake *FakeSecurityGroupRepo) DeleteCallCount() int { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return len(fake.deleteArgsForCall) -} - -func (fake *FakeSecurityGroupRepo) DeleteArgsForCall(i int) string { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return fake.deleteArgsForCall[i].arg1 -} - -func (fake *FakeSecurityGroupRepo) DeleteReturns(result1 error) { - fake.deleteReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSecurityGroupRepo) FindAll() ([]models.SecurityGroup, error) { - fake.findAllMutex.Lock() - defer fake.findAllMutex.Unlock() - fake.findAllArgsForCall = append(fake.findAllArgsForCall, struct{}{}) - if fake.FindAllStub != nil { - return fake.FindAllStub() - } else { - return fake.findAllReturns.result1, fake.findAllReturns.result2 - } -} - -func (fake *FakeSecurityGroupRepo) FindAllCallCount() int { - fake.findAllMutex.RLock() - defer fake.findAllMutex.RUnlock() - return len(fake.findAllArgsForCall) -} - -func (fake *FakeSecurityGroupRepo) FindAllReturns(result1 []models.SecurityGroup, result2 error) { - fake.findAllReturns = struct { - result1 []models.SecurityGroup - result2 error - }{result1, result2} -} - -var _ SecurityGroupRepo = new(FakeSecurityGroupRepo) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups.go deleted file mode 100644 index 3622477..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups.go +++ /dev/null @@ -1,104 +0,0 @@ -package security_groups - -import ( - "fmt" - "net/url" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type SecurityGroupRepo interface { - Create(name string, rules []map[string]interface{}) error - Update(guid string, rules []map[string]interface{}) error - Read(string) (models.SecurityGroup, error) - Delete(string) error - FindAll() ([]models.SecurityGroup, error) -} - -type cloudControllerSecurityGroupRepo struct { - gateway net.Gateway - config core_config.Reader -} - -func NewSecurityGroupRepo(config core_config.Reader, gateway net.Gateway) SecurityGroupRepo { - return cloudControllerSecurityGroupRepo{ - config: config, - gateway: gateway, - } -} - -func (repo cloudControllerSecurityGroupRepo) Create(name string, rules []map[string]interface{}) error { - path := "/v2/security_groups" - params := models.SecurityGroupParams{ - Name: name, - Rules: rules, - } - return repo.gateway.CreateResourceFromStruct(repo.config.ApiEndpoint(), path, params) -} - -func (repo cloudControllerSecurityGroupRepo) Read(name string) (models.SecurityGroup, error) { - path := fmt.Sprintf("/v2/security_groups?q=%s&inline-relations-depth=2", url.QueryEscape("name:"+name)) - group := models.SecurityGroup{} - foundGroup := false - - err := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.SecurityGroupResource{}, - func(resource interface{}) bool { - if asgr, ok := resource.(resources.SecurityGroupResource); ok { - group = asgr.ToModel() - foundGroup = true - } - - return false - }, - ) - if err != nil { - return group, err - } - - if !foundGroup { - err = errors.NewModelNotFoundError("security group", name) - } - - return group, err -} - -func (repo cloudControllerSecurityGroupRepo) Update(guid string, rules []map[string]interface{}) error { - url := fmt.Sprintf("/v2/security_groups/%s", guid) - return repo.gateway.UpdateResourceFromStruct(repo.config.ApiEndpoint(), url, models.SecurityGroupParams{Rules: rules}) -} - -func (repo cloudControllerSecurityGroupRepo) FindAll() ([]models.SecurityGroup, error) { - path := "/v2/security_groups?inline-relations-depth=2" - securityGroups := []models.SecurityGroup{} - - err := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.SecurityGroupResource{}, - func(resource interface{}) bool { - if securityGroupResource, ok := resource.(resources.SecurityGroupResource); ok { - securityGroups = append(securityGroups, securityGroupResource.ToModel()) - } - - return true - }, - ) - - if err != nil { - return nil, err - } - - return securityGroups, err -} - -func (repo cloudControllerSecurityGroupRepo) Delete(securityGroupGuid string) error { - path := fmt.Sprintf("/v2/security_groups/%s", securityGroupGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups_suite_test.go deleted file mode 100644 index f443e4f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package security_groups_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSecurityGroups(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "SecurityGroups Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups_test.go deleted file mode 100644 index 839fb4e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/security_groups_test.go +++ /dev/null @@ -1,280 +0,0 @@ -package security_groups_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/security_groups" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("app security group api", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo SecurityGroupRepo - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewSecurityGroupRepo(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".Create", func() { - It("can create an app security group, given some attributes", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/security_groups", - // FIXME: this matcher depend on the order of the key/value pairs in the map - Matcher: testnet.RequestBodyMatcher(`{ - "name": "mygroup", - "rules": [{"my-house": "my-rules"}] - }`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - setupTestServer(req) - - err := repo.Create( - "mygroup", - []map[string]interface{}{{"my-house": "my-rules"}}, - ) - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".Read", func() { - It("returns the app security group with the given name", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/security_groups?q=name:the-name&inline-relations-depth=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "the-group-guid" - }, - "entity": { - "name": "the-name", - "rules": [{"key": "value"}], - "spaces": [ - { - "metadata":{ - "guid": "my-space-guid" - }, - "entity": { - "name": "my-space", - "organization": { - "metadata": { - "guid": "my-org-guid" - }, - "entity": { - "name": "my-org" - } - } - } - } - ] - } - } - ] -} - `, - }, - })) - - group, err := repo.Read("the-name") - - Expect(err).ToNot(HaveOccurred()) - Expect(group).To(Equal(models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "the-name", - Guid: "the-group-guid", - Rules: []map[string]interface{}{{"key": "value"}}, - }, - Spaces: []models.Space{ - { - SpaceFields: models.SpaceFields{Guid: "my-space-guid", Name: "my-space"}, - Organization: models.OrganizationFields{Guid: "my-org-guid", Name: "my-org"}, - }, - }, - })) - }) - - It("returns a ModelNotFound error if the security group cannot be found", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/security_groups?q=name:the-name&inline-relations-depth=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"resources": []}`, - }, - })) - - _, err := repo.Read("the-name") - - Expect(err).To(HaveOccurred()) - Expect(err).To(BeAssignableToTypeOf(errors.NewModelNotFoundError("model-type", "description"))) - }) - }) - - Describe(".Delete", func() { - It("deletes the security group", func() { - securityGroupGuid := "the-security-group-guid" - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/security_groups/" + securityGroupGuid, - Response: testnet.TestResponse{ - Status: http.StatusNoContent, - }, - })) - - err := repo.Delete(securityGroupGuid) - - Expect(err).ToNot(HaveOccurred()) - }) - }) - - Describe(".FindAll", func() { - It("returns all the security groups", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/security_groups?inline-relations-depth=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: firstListItem(), - }, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/security_groups?inline-relations-depth=2&page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: secondListItem(), - }, - }), - ) - - groups, err := repo.FindAll() - - Expect(err).ToNot(HaveOccurred()) - Expect(groups[0]).To(Equal(models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "name-71", - Guid: "cd186158-b356-474d-9861-724f34f48502", - Rules: []map[string]interface{}{{"protocol": "udp"}}, - }, - Spaces: []models.Space{}, - })) - Expect(groups[1]).To(Equal(models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "name-72", - Guid: "d3374b62-7eac-4823-afbd-460d2bf44c67", - Rules: []map[string]interface{}{{"destination": "198.41.191.47/1"}}, - }, - Spaces: []models.Space{ - { - SpaceFields: models.SpaceFields{Guid: "my-space-guid", Name: "my-space"}, - Organization: models.OrganizationFields{Guid: "my-org-guid", Name: "my-org"}, - }, - }, - })) - }) - }) -}) - -func firstListItem() string { - return `{ - "next_url": "/v2/security_groups?inline-relations-depth=2&page=2", - "resources": [ - { - "metadata": { - "guid": "cd186158-b356-474d-9861-724f34f48502", - "url": "/v2/security_groups/cd186158-b356-474d-9861-724f34f48502", - "created_at": "2014-06-23T22:55:30+00:00", - "updated_at": null - }, - "entity": { - "name": "name-71", - "rules": [ - { - "protocol": "udp" - } - ], - "spaces_url": "/v2/security_groups/cd186158-b356-474d-9861-724f34f48502/spaces" - } - } - ] -}` -} - -func secondListItem() string { - return `{ - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "d3374b62-7eac-4823-afbd-460d2bf44c67", - "url": "/v2/security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67", - "created_at": "2014-06-23T22:55:30+00:00", - "updated_at": null - }, - "entity": { - "name": "name-72", - "rules": [ - { - "destination": "198.41.191.47/1" - } - ], - "spaces": [ - { - "metadata":{ - "guid": "my-space-guid" - }, - "entity": { - "name": "my-space", - "organization": { - "metadata": { - "guid": "my-org-guid" - }, - "entity": { - "name": "my-org" - } - } - } - } - ], - "spaces_url": "/v2/security_groups/d3374b62-7eac-4823-afbd-460d2bf44c67/spaces" - } - } - ] -}` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/fakes/fake_security_group_space_binder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/fakes/fake_security_group_space_binder.go deleted file mode 100644 index c2ebeaf..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/fakes/fake_security_group_space_binder.go +++ /dev/null @@ -1,95 +0,0 @@ -// This file was generated by counterfeiter -package tmp - -import ( - . "github.com/cloudfoundry/cli/cf/api/security_groups/spaces" - "sync" -) - -type FakeSecurityGroupSpaceBinder struct { - BindSpaceStub func(securityGroupGuid string, spaceGuid string) error - bindSpaceMutex sync.RWMutex - bindSpaceArgsForCall []struct { - arg1 string - arg2 string - } - bindSpaceReturns struct { - result1 error - } - - UnbindSpaceStub func(securityGroupGuid string, spaceGuid string) error - unbindSpaceMutex sync.RWMutex - unbindSpaceArgsForCall []struct { - arg1 string - arg2 string - } - unbindSpaceReturns struct { - result1 error - } -} - -func (fake *FakeSecurityGroupSpaceBinder) BindSpace(arg1 string, arg2 string) error { - fake.bindSpaceMutex.Lock() - defer fake.bindSpaceMutex.Unlock() - fake.bindSpaceArgsForCall = append(fake.bindSpaceArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.BindSpaceStub != nil { - return fake.BindSpaceStub(arg1, arg2) - } else { - return fake.bindSpaceReturns.result1 - } -} - -func (fake *FakeSecurityGroupSpaceBinder) BindSpaceCallCount() int { - fake.bindSpaceMutex.RLock() - defer fake.bindSpaceMutex.RUnlock() - return len(fake.bindSpaceArgsForCall) -} - -func (fake *FakeSecurityGroupSpaceBinder) BindSpaceArgsForCall(i int) (string, string) { - fake.bindSpaceMutex.RLock() - defer fake.bindSpaceMutex.RUnlock() - return fake.bindSpaceArgsForCall[i].arg1, fake.bindSpaceArgsForCall[i].arg2 -} - -func (fake *FakeSecurityGroupSpaceBinder) BindSpaceReturns(result1 error) { - fake.bindSpaceReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSecurityGroupSpaceBinder) UnbindSpace(arg1 string, arg2 string) error { - fake.unbindSpaceMutex.Lock() - defer fake.unbindSpaceMutex.Unlock() - fake.unbindSpaceArgsForCall = append(fake.unbindSpaceArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.UnbindSpaceStub != nil { - return fake.UnbindSpaceStub(arg1, arg2) - } else { - return fake.unbindSpaceReturns.result1 - } -} - -func (fake *FakeSecurityGroupSpaceBinder) UnbindSpaceCallCount() int { - fake.unbindSpaceMutex.RLock() - defer fake.unbindSpaceMutex.RUnlock() - return len(fake.unbindSpaceArgsForCall) -} - -func (fake *FakeSecurityGroupSpaceBinder) UnbindSpaceArgsForCall(i int) (string, string) { - fake.unbindSpaceMutex.RLock() - defer fake.unbindSpaceMutex.RUnlock() - return fake.unbindSpaceArgsForCall[i].arg1, fake.unbindSpaceArgsForCall[i].arg2 -} - -func (fake *FakeSecurityGroupSpaceBinder) UnbindSpaceReturns(result1 error) { - fake.unbindSpaceReturns = struct { - result1 error - }{result1} -} - -var _ SecurityGroupSpaceBinder = new(FakeSecurityGroupSpaceBinder) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/space_binder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/space_binder.go deleted file mode 100644 index 8afc06d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/space_binder.go +++ /dev/null @@ -1,44 +0,0 @@ -package spaces - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type SecurityGroupSpaceBinder interface { - BindSpace(securityGroupGuid string, spaceGuid string) error - UnbindSpace(securityGroupGuid string, spaceGuid string) error -} - -type securityGroupSpaceBinder struct { - configRepo core_config.Reader - gateway net.Gateway -} - -func NewSecurityGroupSpaceBinder(configRepo core_config.Reader, gateway net.Gateway) (binder securityGroupSpaceBinder) { - return securityGroupSpaceBinder{ - configRepo: configRepo, - gateway: gateway, - } -} - -func (repo securityGroupSpaceBinder) BindSpace(securityGroupGuid string, spaceGuid string) error { - url := fmt.Sprintf("/v2/security_groups/%s/spaces/%s", - securityGroupGuid, - spaceGuid, - ) - - return repo.gateway.UpdateResourceFromStruct(repo.configRepo.ApiEndpoint(), url, models.SecurityGroupParams{}) -} - -func (repo securityGroupSpaceBinder) UnbindSpace(securityGroupGuid string, spaceGuid string) error { - url := fmt.Sprintf("/v2/security_groups/%s/spaces/%s", - securityGroupGuid, - spaceGuid, - ) - - return repo.gateway.DeleteResource(repo.configRepo.ApiEndpoint(), url) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/space_binder_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/space_binder_test.go deleted file mode 100644 index 0f6d847..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/space_binder_test.go +++ /dev/null @@ -1,83 +0,0 @@ -package spaces_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/security_groups/spaces" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("SecurityGroupSpaceBinder", func() { - var ( - repo SecurityGroupSpaceBinder - gateway net.Gateway - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway = net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewSecurityGroupSpaceBinder(configRepo, gateway) - }) - - AfterEach(func() { testServer.Close() }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".BindSpace", func() { - It("associates the security group with the space", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/security_groups/this-is-a-security-group-guid/spaces/yes-its-a-space-guid", - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: ` -{ - "metadata": {"guid": "fb6fdf81-ce1b-448f-ada9-09bbb8807812"}, - "entity": {"name": "dummy1", "rules": [] } -}`, - }, - })) - - err := repo.BindSpace("this-is-a-security-group-guid", "yes-its-a-space-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe(".UnbindSpace", func() { - It("removes the associated security group from the space", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/security_groups/this-is-a-security-group-guid/spaces/yes-its-a-space-guid", - Response: testnet.TestResponse{ - Status: http.StatusNoContent, - }, - })) - - err := repo.UnbindSpace("this-is-a-security-group-guid", "yes-its-a-space-guid") - - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/suite_test.go deleted file mode 100644 index c5ad4d2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/security_groups/spaces/suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package spaces_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSecurityGroupSpaces(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "SecurityGroupSpaces Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_auth_tokens.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_auth_tokens.go deleted file mode 100644 index 4081967..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_auth_tokens.go +++ /dev/null @@ -1,85 +0,0 @@ -package api - -import ( - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServiceAuthTokenRepository interface { - FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error) - FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error) - Create(authToken models.ServiceAuthTokenFields) (apiErr error) - Update(authToken models.ServiceAuthTokenFields) (apiErr error) - Delete(authToken models.ServiceAuthTokenFields) (apiErr error) -} - -type CloudControllerServiceAuthTokenRepository struct { - gateway net.Gateway - config core_config.Reader -} - -func NewCloudControllerServiceAuthTokenRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerServiceAuthTokenRepository) { - repo.gateway = gateway - repo.config = config - return -} - -func (repo CloudControllerServiceAuthTokenRepository) FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error) { - return repo.findAllWithPath("/v2/service_auth_tokens") -} - -func (repo CloudControllerServiceAuthTokenRepository) FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error) { - path := fmt.Sprintf("/v2/service_auth_tokens?q=%s", url.QueryEscape("label:"+label+";provider:"+provider)) - authTokens, apiErr := repo.findAllWithPath(path) - if apiErr != nil { - return - } - - if len(authTokens) == 0 { - apiErr = errors.NewModelNotFoundError("Service Auth Token", label+" "+provider) - return - } - - authToken = authTokens[0] - return -} - -func (repo CloudControllerServiceAuthTokenRepository) findAllWithPath(path string) ([]models.ServiceAuthTokenFields, error) { - var authTokens []models.ServiceAuthTokenFields - apiErr := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.AuthTokenResource{}, - func(resource interface{}) bool { - if at, ok := resource.(resources.AuthTokenResource); ok { - authTokens = append(authTokens, at.ToFields()) - } - return true - }) - - return authTokens, apiErr -} - -func (repo CloudControllerServiceAuthTokenRepository) Create(authToken models.ServiceAuthTokenFields) (apiErr error) { - body := fmt.Sprintf(`{"label":"%s","provider":"%s","token":"%s"}`, authToken.Label, authToken.Provider, authToken.Token) - path := "/v2/service_auth_tokens" - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} - -func (repo CloudControllerServiceAuthTokenRepository) Delete(authToken models.ServiceAuthTokenFields) (apiErr error) { - path := fmt.Sprintf("/v2/service_auth_tokens/%s", authToken.Guid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} - -func (repo CloudControllerServiceAuthTokenRepository) Update(authToken models.ServiceAuthTokenFields) (apiErr error) { - body := fmt.Sprintf(`{"token":"%s"}`, authToken.Token) - path := fmt.Sprintf("/v2/service_auth_tokens/%s", authToken.Guid) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_auth_tokens_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_auth_tokens_test.go deleted file mode 100644 index 1ec3681..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_auth_tokens_test.go +++ /dev/null @@ -1,233 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServiceAuthTokensRepo", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerServiceAuthTokenRepository - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServiceAuthTokenRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe("Create", func() { - It("creates a service auth token", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_auth_tokens", - Matcher: testnet.RequestBodyMatcher(`{"label":"a label","provider":"a provider","token":"a token"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - err := repo.Create(models.ServiceAuthTokenFields{ - Label: "a label", - Provider: "a provider", - Token: "a token", - }) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Describe("FindAll", func() { - var firstServiceAuthTokenRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_auth_tokens", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "next_url": "/v2/service_auth_tokens?page=2", - "resources": [ - { - "metadata": { - "guid": "mongodb-core-guid" - }, - "entity": { - "label": "mongodb", - "provider": "mongodb-core" - } - } - ] - }`, - }, - }) - - var secondServiceAuthTokenRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_auth_tokens", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - { - "metadata": { - "guid": "mysql-core-guid" - }, - "entity": { - "label": "mysql", - "provider": "mysql-core" - } - }, - { - "metadata": { - "guid": "postgres-core-guid" - }, - "entity": { - "label": "postgres", - "provider": "postgres-core" - } - } - ] - }`, - }, - }) - - BeforeEach(func() { - setupTestServer(firstServiceAuthTokenRequest, secondServiceAuthTokenRequest) - }) - - It("finds all service auth tokens", func() { - authTokens, err := repo.FindAll() - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(len(authTokens)).To(Equal(3)) - - Expect(authTokens[0].Label).To(Equal("mongodb")) - Expect(authTokens[0].Provider).To(Equal("mongodb-core")) - Expect(authTokens[0].Guid).To(Equal("mongodb-core-guid")) - - Expect(authTokens[1].Label).To(Equal("mysql")) - Expect(authTokens[1].Provider).To(Equal("mysql-core")) - Expect(authTokens[1].Guid).To(Equal("mysql-core-guid")) - }) - }) - - Describe("FindByLabelAndProvider", func() { - Context("when the auth token exists", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_auth_tokens?q=label%3Aa-label%3Bprovider%3Aa-provider", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "resources": [{ - "metadata": { "guid": "mysql-core-guid" }, - "entity": { - "label": "mysql", - "provider": "mysql-core" - } - }]}`, - }, - })) - }) - - It("returns the auth token", func() { - serviceAuthToken, err := repo.FindByLabelAndProvider("a-label", "a-provider") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(serviceAuthToken).To(Equal(models.ServiceAuthTokenFields{ - Guid: "mysql-core-guid", - Label: "mysql", - Provider: "mysql-core", - })) - }) - }) - - Context("when the auth token does not exist", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_auth_tokens?q=label%3Aa-label%3Bprovider%3Aa-provider", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"resources": []}`}, - })) - }) - - It("returns a ModelNotFoundError", func() { - _, err := repo.FindByLabelAndProvider("a-label", "a-provider") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - }) - }) - }) - - Describe("Update", func() { - It("updates the service auth token", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_auth_tokens/mysql-core-guid", - Matcher: testnet.RequestBodyMatcher(`{"token":"a value"}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - err := repo.Update(models.ServiceAuthTokenFields{ - Guid: "mysql-core-guid", - Token: "a value", - }) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Describe("Delete", func() { - It("deletes the service auth token", func() { - - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/service_auth_tokens/mysql-core-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - err := repo.Delete(models.ServiceAuthTokenFields{ - Guid: "mysql-core-guid", - }) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_bindings.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_bindings.go deleted file mode 100644 index 145342d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_bindings.go +++ /dev/null @@ -1,62 +0,0 @@ -package api - -import ( - "bytes" - "encoding/json" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServiceBindingRepository interface { - Create(instanceGuid, appGuid string, paramsMap map[string]interface{}) (apiErr error) - Delete(instance models.ServiceInstance, appGuid string) (found bool, apiErr error) -} - -type CloudControllerServiceBindingRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServiceBindingRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerServiceBindingRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerServiceBindingRepository) Create(instanceGuid, appGuid string, paramsMap map[string]interface{}) (apiErr error) { - path := "/v2/service_bindings" - request := models.ServiceBindingRequest{ - AppGuid: appGuid, - ServiceInstanceGuid: instanceGuid, - Params: paramsMap, - } - - jsonBytes, err := json.Marshal(request) - if err != nil { - return err - } - - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(jsonBytes)) -} - -func (repo CloudControllerServiceBindingRepository) Delete(instance models.ServiceInstance, appGuid string) (found bool, apiErr error) { - var path string - - for _, binding := range instance.ServiceBindings { - if binding.AppGuid == appGuid { - path = binding.Url - break - } - } - - if path == "" { - return - } else { - found = true - } - - apiErr = repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_bindings_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_bindings_test.go deleted file mode 100644 index fcc2eca..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_bindings_test.go +++ /dev/null @@ -1,166 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServiceBindingsRepository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerServiceBindingRepository - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServiceBindingRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe("Create", func() { - var requestMatcher testnet.RequestMatcher - Context("when the service binding can be created", func() { - BeforeEach(func() { - requestMatcher = testnet.RequestBodyMatcher(`{"app_guid":"my-app-guid","service_instance_guid":"my-service-instance-guid"}`) - }) - - JustBeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_bindings", - Matcher: requestMatcher, - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - }) - - It("creates the service binding", func() { - apiErr := repo.Create("my-service-instance-guid", "my-app-guid", nil) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - Context("when there are arbitrary parameters", func() { - BeforeEach(func() { - requestMatcher = testnet.RequestBodyMatcher(`{"app_guid":"my-app-guid","service_instance_guid":"my-service-instance-guid", "parameters": { "foo": "bar"}}`) - }) - - It("send the parameters as part of the request body", func() { - paramsMap := map[string]interface{}{"foo": "bar"} - apiErr := repo.Create("my-service-instance-guid", "my-app-guid", paramsMap) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - Context("and there is a failure during serialization", func() { - It("returns the serialization error", func() { - paramsMap := make(map[string]interface{}) - paramsMap["data"] = make(chan bool) - - err := repo.Create("my-service-instance-guid", "my-app-guid", paramsMap) - Expect(err).To(MatchError("json: unsupported type: chan bool")) - }) - }) - }) - }) - - Context("when an API error occurs", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_bindings", - Matcher: testnet.RequestBodyMatcher(`{"app_guid":"my-app-guid","service_instance_guid":"my-service-instance-guid"}`), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{"code":90003,"description":"The app space binding to service is taken: 7b959018-110a-4913-ac0a-d663e613cdea 346bf237-7eef-41a7-b892-68fb08068f09"}`, - }, - })) - }) - - It("returns an error", func() { - apiErr := repo.Create("my-service-instance-guid", "my-app-guid", nil) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.(errors.HttpError).ErrorCode()).To(Equal("90003")) - }) - }) - }) - - Describe("Delete", func() { - Context("when binding does exist", func() { - var serviceInstance models.ServiceInstance - - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/service_bindings/service-binding-2-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - serviceInstance.Guid = "my-service-instance-guid" - - binding := models.ServiceBindingFields{} - binding.Url = "/v2/service_bindings/service-binding-1-guid" - binding.AppGuid = "app-1-guid" - binding2 := models.ServiceBindingFields{} - binding2.Url = "/v2/service_bindings/service-binding-2-guid" - binding2.AppGuid = "app-2-guid" - serviceInstance.ServiceBindings = []models.ServiceBindingFields{binding, binding2} - }) - - It("deletes the service binding with the given guid", func() { - found, apiErr := repo.Delete(serviceInstance, "app-2-guid") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(found).To(BeTrue()) - }) - }) - - Context("when binding does not exist", func() { - var serviceInstance models.ServiceInstance - - BeforeEach(func() { - setupTestServer() - serviceInstance.Guid = "my-service-instance-guid" - }) - - It("does not return an error", func() { - found, apiErr := repo.Delete(serviceInstance, "app-2-guid") - - Expect(testHandler.CallCount).To(Equal(0)) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(found).To(BeFalse()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_brokers.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_brokers.go deleted file mode 100644 index 1989364..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_brokers.go +++ /dev/null @@ -1,98 +0,0 @@ -package api - -import ( - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServiceBrokerRepository interface { - ListServiceBrokers(callback func(models.ServiceBroker) bool) error - FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error) - FindByGuid(guid string) (serviceBroker models.ServiceBroker, apiErr error) - Create(name, url, username, password string) (apiErr error) - Update(serviceBroker models.ServiceBroker) (apiErr error) - Rename(guid, name string) (apiErr error) - Delete(guid string) (apiErr error) -} - -type CloudControllerServiceBrokerRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServiceBrokerRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerServiceBrokerRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerServiceBrokerRepository) ListServiceBrokers(callback func(models.ServiceBroker) bool) error { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - "/v2/service_brokers", - resources.ServiceBrokerResource{}, - func(resource interface{}) bool { - callback(resource.(resources.ServiceBrokerResource).ToFields()) - return true - }) -} - -func (repo CloudControllerServiceBrokerRepository) FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error) { - foundBroker := false - apiErr = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/service_brokers?q=%s", url.QueryEscape("name:"+name)), - resources.ServiceBrokerResource{}, - func(resource interface{}) bool { - serviceBroker = resource.(resources.ServiceBrokerResource).ToFields() - foundBroker = true - return false - }) - - if !foundBroker && (apiErr == nil) { - apiErr = errors.NewModelNotFoundError("Service Broker", name) - } - - return -} -func (repo CloudControllerServiceBrokerRepository) FindByGuid(guid string) (serviceBroker models.ServiceBroker, apiErr error) { - broker := new(resources.ServiceBrokerResource) - apiErr = repo.gateway.GetResource(repo.config.ApiEndpoint()+fmt.Sprintf("/v2/service_brokers/%s", guid), broker) - serviceBroker = broker.ToFields() - return -} - -func (repo CloudControllerServiceBrokerRepository) Create(name, url, username, password string) (apiErr error) { - path := "/v2/service_brokers" - body := fmt.Sprintf( - `{"name":"%s","broker_url":"%s","auth_username":"%s","auth_password":"%s"}`, name, url, username, password, - ) - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} - -func (repo CloudControllerServiceBrokerRepository) Update(serviceBroker models.ServiceBroker) (apiErr error) { - path := fmt.Sprintf("/v2/service_brokers/%s", serviceBroker.Guid) - body := fmt.Sprintf( - `{"broker_url":"%s","auth_username":"%s","auth_password":"%s"}`, - serviceBroker.Url, serviceBroker.Username, serviceBroker.Password, - ) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} - -func (repo CloudControllerServiceBrokerRepository) Rename(guid, name string) (apiErr error) { - path := fmt.Sprintf("/v2/service_brokers/%s", guid) - body := fmt.Sprintf(`{"name":"%s"}`, name) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} - -func (repo CloudControllerServiceBrokerRepository) Delete(guid string) (apiErr error) { - path := fmt.Sprintf("/v2/service_brokers/%s", guid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_brokers_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_brokers_test.go deleted file mode 100644 index be52ee4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_brokers_test.go +++ /dev/null @@ -1,312 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Service Brokers Repo", func() { - It("lists services brokers", func() { - firstRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/service_brokers?page=2", - "resources": [ - { - "metadata": { - "guid":"found-guid-1" - }, - "entity": { - "name": "found-name-1", - "broker_url": "http://found.example.com-1", - "auth_username": "found-username-1", - "auth_password": "found-password-1" - } - } - ] - }`, - }, - }) - - secondRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - { - "metadata": { - "guid":"found-guid-2" - }, - "entity": { - "name": "found-name-2", - "broker_url": "http://found.example.com-2", - "auth_username": "found-username-2", - "auth_password": "found-password-2" - } - } - ] - }`, - }, - }) - - ts, handler, repo := createServiceBrokerRepo(firstRequest, secondRequest) - defer ts.Close() - - serviceBrokers := []models.ServiceBroker{} - apiErr := repo.ListServiceBrokers(func(broker models.ServiceBroker) bool { - serviceBrokers = append(serviceBrokers, broker) - return true - }) - - Expect(len(serviceBrokers)).To(Equal(2)) - Expect(serviceBrokers[0].Guid).To(Equal("found-guid-1")) - Expect(serviceBrokers[1].Guid).To(Equal("found-guid-2")) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - Describe("FindByName", func() { - It("returns the service broker with the given name", func() { - responseBody := ` -{"resources": [{ - "metadata": {"guid":"found-guid"}, - "entity": { - "name": "found-name", - "broker_url": "http://found.example.com", - "auth_username": "found-username", - "auth_password": "found-password" - } -}]}` - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers?q=name%3Amy-broker", - Response: testnet.TestResponse{Status: http.StatusOK, Body: responseBody}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - foundBroker, apiErr := repo.FindByName("my-broker") - expectedBroker := models.ServiceBroker{} - expectedBroker.Name = "found-name" - expectedBroker.Url = "http://found.example.com" - expectedBroker.Username = "found-username" - expectedBroker.Password = "found-password" - expectedBroker.Guid = "found-guid" - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(foundBroker).To(Equal(expectedBroker)) - }) - - It("returns an error when the service broker cannot be found", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers?q=name%3Amy-broker", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ "resources": [ ] }`}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - _, apiErr := repo.FindByName("my-broker") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.Error()).To(Equal("Service Broker my-broker not found")) - }) - - It("returns an error when listing service brokers returns an api error", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers?q=name%3Amy-broker", - Response: testnet.TestResponse{Status: http.StatusForbidden, Body: `{ - "code": 10003, - "description": "You are not authorized to perform the requested action", - "error_code": "CF-NotAuthorized" - }`}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - _, apiErr := repo.FindByName("my-broker") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.Error()).To(Equal("Server error, status code: 403, error code: 10003, message: You are not authorized to perform the requested action")) - }) - }) - - Describe("FindByGuid", func() { - It("returns the service broker with the given guid", func() { - responseBody := ` -{ - "metadata": { - "guid": "found-guid", - "url": "/v2/service_brokers/found-guid", - "created_at": "2014-07-24T21:21:54+00:00", - "updated_at": "2014-07-25T17:03:40+00:00" - }, - "entity": { - "name": "found-name", - "broker_url": "http://found.example.com", - "auth_username": "found-username" - } -} -` - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers/found-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: responseBody}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - foundBroker, apiErr := repo.FindByGuid("found-guid") - expectedBroker := models.ServiceBroker{} - expectedBroker.Name = "found-name" - expectedBroker.Url = "http://found.example.com" - expectedBroker.Username = "found-username" - expectedBroker.Guid = "found-guid" - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(foundBroker).To(Equal(expectedBroker)) - }) - - It("returns an error when the service broker cannot be found", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_brokers/bogus-guid", - //This error code may not reflect reality. Check it, change the code to match, and remove this comment. - Response: testnet.TestResponse{Status: http.StatusNotFound, Body: `{"error_code":"ServiceBrokerNotFound","description":"Service Broker bogus-guid not found","code":270042}`}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - _, apiErr := repo.FindByGuid("bogus-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.Error()).To(Equal("Server error, status code: 404, error code: 270042, message: Service Broker bogus-guid not found")) - }) - }) - - Describe("Create", func() { - It("creates the service broker with the given name, URL, username and password", func() { - expectedReqBody := `{"name":"foobroker","broker_url":"http://example.com","auth_username":"foouser","auth_password":"password"}` - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_brokers", - Matcher: testnet.RequestBodyMatcher(expectedReqBody), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - apiErr := repo.Create("foobroker", "http://example.com", "foouser", "password") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("Update", func() { - It("updates the service broker with the given guid", func() { - expectedReqBody := `{"broker_url":"http://update.example.com","auth_username":"update-foouser","auth_password":"update-password"}` - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_brokers/my-guid", - Matcher: testnet.RequestBodyMatcher(expectedReqBody), - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - serviceBroker := models.ServiceBroker{} - serviceBroker.Guid = "my-guid" - serviceBroker.Name = "foobroker" - serviceBroker.Url = "http://update.example.com" - serviceBroker.Username = "update-foouser" - serviceBroker.Password = "update-password" - - apiErr := repo.Update(serviceBroker) - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("Rename", func() { - It("renames the service broker with the given guid", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_brokers/my-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"update-foobroker"}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - apiErr := repo.Rename("my-guid", "update-foobroker") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Describe("Delete", func() { - It("deletes the service broker with the given guid", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/service_brokers/my-guid", - Response: testnet.TestResponse{Status: http.StatusNoContent}, - }) - - ts, handler, repo := createServiceBrokerRepo(req) - defer ts.Close() - - apiErr := repo.Delete("my-guid") - - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) -}) - -func createServiceBrokerRepo(requests ...testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo ServiceBrokerRepository) { - ts, handler = testnet.NewServer(requests) - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(ts.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServiceBrokerRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_keys.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_keys.go deleted file mode 100644 index b8fe0ce..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_keys.go +++ /dev/null @@ -1,100 +0,0 @@ -package api - -import ( - "bytes" - "encoding/json" - "fmt" - "net/url" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServiceKeyRepository interface { - CreateServiceKey(serviceKeyGuid string, keyName string, params map[string]interface{}) error - ListServiceKeys(serviceKeyGuid string) ([]models.ServiceKey, error) - GetServiceKey(serviceKeyGuid string, keyName string) (models.ServiceKey, error) - DeleteServiceKey(serviceKeyGuid string) error -} - -type CloudControllerServiceKeyRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServiceKeyRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerServiceKeyRepository) { - return CloudControllerServiceKeyRepository{ - config: config, - gateway: gateway, - } -} - -func (c CloudControllerServiceKeyRepository) CreateServiceKey(instanceGuid string, keyName string, params map[string]interface{}) error { - path := "/v2/service_keys" - - request := models.ServiceKeyRequest{ - Name: keyName, - ServiceInstanceGuid: instanceGuid, - Params: params, - } - jsonBytes, err := json.Marshal(request) - if err != nil { - return err - } - - err = c.gateway.CreateResource(c.config.ApiEndpoint(), path, bytes.NewReader(jsonBytes)) - - if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.SERVICE_KEY_NAME_TAKEN { - return errors.NewModelAlreadyExistsError("Service key", keyName) - } else if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.UNBINDABLE_SERVICE { - return errors.NewUnbindableServiceError() - } else if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() != "" { - return errors.New(httpErr.Error()) - } - - return nil -} - -func (c CloudControllerServiceKeyRepository) ListServiceKeys(instanceGuid string) ([]models.ServiceKey, error) { - path := fmt.Sprintf("/v2/service_instances/%s/service_keys", instanceGuid) - - return c.listServiceKeys(path) -} - -func (c CloudControllerServiceKeyRepository) GetServiceKey(instanceGuid string, keyName string) (models.ServiceKey, error) { - path := fmt.Sprintf("/v2/service_instances/%s/service_keys?q=%s", instanceGuid, url.QueryEscape("name:"+keyName)) - - serviceKeys, err := c.listServiceKeys(path) - if err != nil || len(serviceKeys) == 0 { - return models.ServiceKey{}, err - } - - return serviceKeys[0], nil -} - -func (c CloudControllerServiceKeyRepository) listServiceKeys(path string) ([]models.ServiceKey, error) { - serviceKeys := []models.ServiceKey{} - apiErr := c.gateway.ListPaginatedResources( - c.config.ApiEndpoint(), - path, - resources.ServiceKeyResource{}, - func(resource interface{}) bool { - serviceKey := resource.(resources.ServiceKeyResource).ToModel() - serviceKeys = append(serviceKeys, serviceKey) - return true - }) - - if apiErr != nil { - return []models.ServiceKey{}, apiErr - } - - return serviceKeys, nil -} - -func (c CloudControllerServiceKeyRepository) DeleteServiceKey(serviceKeyGuid string) error { - path := fmt.Sprintf("/v2/service_keys/%s", serviceKeyGuid) - return c.gateway.DeleteResource(c.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_keys_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_keys_test.go deleted file mode 100644 index 042d653..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_keys_test.go +++ /dev/null @@ -1,305 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Service Keys Repo", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo ServiceKeyRepository - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - configRepo.SetAccessToken("BEARER my_access_token") - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServiceKeyRepository(configRepo, gateway) - }) - - Describe("CreateServiceKey", func() { - It("makes the right request", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_keys", - Matcher: testnet.RequestBodyMatcher(`{"service_instance_guid": "fake-instance-guid", "name": "fake-key-name"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - err := repo.CreateServiceKey("fake-instance-guid", "fake-key-name", nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - It("returns a ModelAlreadyExistsError if the service key exists", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_keys", - Matcher: testnet.RequestBodyMatcher(`{"service_instance_guid":"fake-instance-guid","name":"exist-service-key"}`), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{"code":360001,"description":"The service key name is taken: exist-service-key"}`}, - })) - - err := repo.CreateServiceKey("fake-instance-guid", "exist-service-key", nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelAlreadyExistsError{})) - }) - - It("returns a NotAuthorizedError when CLI user is not the space developer or admin", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_keys", - Matcher: testnet.RequestBodyMatcher(`{"service_instance_guid":"fake-instance-guid","name":"fake-service-key"}`), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{"code":10003,"description":"You are not authorized to perform the requested action"}`}, - })) - - err := repo.CreateServiceKey("fake-instance-guid", "fake-service-key", nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("You are not authorized to perform the requested action")) - }) - - Context("when there are parameters", func() { - It("sends the parameters as part of the request body", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_keys", - Matcher: testnet.RequestBodyMatcher(`{"service_instance_guid":"fake-instance-guid","name":"fake-service-key","parameters": {"data": "hello"}}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - paramsMap := make(map[string]interface{}) - paramsMap["data"] = "hello" - - err := repo.CreateServiceKey("fake-instance-guid", "fake-service-key", paramsMap) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Context("and there is a failure during serialization", func() { - It("returns the serialization error", func() { - paramsMap := make(map[string]interface{}) - paramsMap["data"] = make(chan bool) - - err := repo.CreateServiceKey("instance-name", "plan-guid", paramsMap) - Expect(err).To(MatchError("json: unsupported type: chan bool")) - }) - }) - }) - }) - - Describe("ListServiceKeys", func() { - It("returns empty result when no service key is found", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_instances/fake-instance-guid/service_keys", - Response: emptyServiceKeysResponse, - })) - - serviceKeys, err := repo.ListServiceKeys("fake-instance-guid") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(len(serviceKeys)).To(Equal(0)) - }) - - It("returns correctly when service keys are found", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_instances/fake-instance-guid/service_keys", - Response: serviceKeysResponse, - })) - - serviceKeys, err := repo.ListServiceKeys("fake-instance-guid") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(len(serviceKeys)).To(Equal(2)) - - Expect(serviceKeys[0].Fields.Guid).To(Equal("fake-service-key-guid-1")) - Expect(serviceKeys[0].Fields.Url).To(Equal("/v2/service_keys/fake-guid-1")) - Expect(serviceKeys[0].Fields.Name).To(Equal("fake-service-key-name-1")) - Expect(serviceKeys[0].Fields.ServiceInstanceGuid).To(Equal("fake-service-instance-guid-1")) - Expect(serviceKeys[0].Fields.ServiceInstanceUrl).To(Equal("http://fake/service/instance/url/1")) - - Expect(serviceKeys[0].Credentials).To(HaveKeyWithValue("username", "fake-username-1")) - Expect(serviceKeys[0].Credentials).To(HaveKeyWithValue("password", "fake-password-1")) - Expect(serviceKeys[0].Credentials).To(HaveKeyWithValue("host", "fake-host-1")) - Expect(serviceKeys[0].Credentials).To(HaveKeyWithValue("port", float64(3306))) - Expect(serviceKeys[0].Credentials).To(HaveKeyWithValue("database", "fake-db-name-1")) - Expect(serviceKeys[0].Credentials).To(HaveKeyWithValue("uri", "mysql://fake-user-1:fake-password-1@fake-host-1:3306/fake-db-name-1")) - - Expect(serviceKeys[1].Fields.Guid).To(Equal("fake-service-key-guid-2")) - Expect(serviceKeys[1].Fields.Url).To(Equal("/v2/service_keys/fake-guid-2")) - Expect(serviceKeys[1].Fields.Name).To(Equal("fake-service-key-name-2")) - Expect(serviceKeys[1].Fields.ServiceInstanceGuid).To(Equal("fake-service-instance-guid-2")) - Expect(serviceKeys[1].Fields.ServiceInstanceUrl).To(Equal("http://fake/service/instance/url/1")) - - Expect(serviceKeys[1].Credentials).To(HaveKeyWithValue("username", "fake-username-2")) - Expect(serviceKeys[1].Credentials).To(HaveKeyWithValue("password", "fake-password-2")) - Expect(serviceKeys[1].Credentials).To(HaveKeyWithValue("host", "fake-host-2")) - Expect(serviceKeys[1].Credentials).To(HaveKeyWithValue("port", float64(3306))) - Expect(serviceKeys[1].Credentials).To(HaveKeyWithValue("database", "fake-db-name-2")) - Expect(serviceKeys[1].Credentials).To(HaveKeyWithValue("uri", "mysql://fake-user-2:fake-password-2@fake-host-2:3306/fake-db-name-2")) - }) - }) - - Describe("GetServiceKey", func() { - It("returns service key detail", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_instances/fake-instance-guid/service_keys?q=name:fake-service-key-name", - Response: serviceKeyDetailResponse, - })) - - serviceKey, err := repo.GetServiceKey("fake-instance-guid", "fake-service-key-name") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(serviceKey.Fields.Guid).To(Equal("fake-service-key-guid")) - Expect(serviceKey.Fields.Url).To(Equal("/v2/service_keys/fake-guid")) - Expect(serviceKey.Fields.Name).To(Equal("fake-service-key-name")) - Expect(serviceKey.Fields.ServiceInstanceGuid).To(Equal("fake-service-instance-guid")) - Expect(serviceKey.Fields.ServiceInstanceUrl).To(Equal("http://fake/service/instance/url")) - - Expect(serviceKey.Credentials).To(HaveKeyWithValue("username", "fake-username")) - Expect(serviceKey.Credentials).To(HaveKeyWithValue("password", "fake-password")) - Expect(serviceKey.Credentials).To(HaveKeyWithValue("host", "fake-host")) - Expect(serviceKey.Credentials).To(HaveKeyWithValue("port", float64(3306))) - Expect(serviceKey.Credentials).To(HaveKeyWithValue("database", "fake-db-name")) - Expect(serviceKey.Credentials).To(HaveKeyWithValue("uri", "mysql://fake-user:fake-password@fake-host:3306/fake-db-name")) - }) - - It("returns empty result when the service key is not found", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_instances/fake-instance-guid/service_keys?q=name:non-exist-key-name", - Response: emptyServiceKeysResponse, - })) - - serviceKey, err := repo.GetServiceKey("fake-instance-guid", "non-exist-key-name") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(serviceKey).To(Equal(models.ServiceKey{})) - }) - }) - - Describe("DeleteServiceKey", func() { - It("deletes service key successfully", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/service_keys/fake-service-key-guid", - })) - - err := repo.DeleteServiceKey("fake-service-key-guid") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - AfterEach(func() { - testServer.Close() - }) -}) - -var emptyServiceKeysResponse = testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`} - -var serviceKeysResponse = testnet.TestResponse{Status: http.StatusOK, Body: `{ - "resources": [ - { - "metadata": { - "guid": "fake-service-key-guid-1", - "url": "/v2/service_keys/fake-guid-1", - "created_at": "2015-01-13T18:52:08+00:00", - "updated_at": null - }, - "entity": { - "name": "fake-service-key-name-1", - "service_instance_guid":"fake-service-instance-guid-1", - "service_instance_url":"http://fake/service/instance/url/1", - "credentials": { - "username": "fake-username-1", - "password": "fake-password-1", - "host": "fake-host-1", - "port": 3306, - "database": "fake-db-name-1", - "uri": "mysql://fake-user-1:fake-password-1@fake-host-1:3306/fake-db-name-1" - } - } - }, - { - "metadata": { - "guid": "fake-service-key-guid-2", - "url": "/v2/service_keys/fake-guid-2", - "created_at": "2015-01-13T18:52:08+00:00", - "updated_at": null - }, - "entity": { - "name": "fake-service-key-name-2", - "service_instance_guid":"fake-service-instance-guid-2", - "service_instance_url":"http://fake/service/instance/url/1", - "credentials": { - "username": "fake-username-2", - "password": "fake-password-2", - "host": "fake-host-2", - "port": 3306, - "database": "fake-db-name-2", - "uri": "mysql://fake-user-2:fake-password-2@fake-host-2:3306/fake-db-name-2" - } - } - } - ]}`, -} - -var serviceKeyDetailResponse = testnet.TestResponse{Status: http.StatusOK, Body: `{ - "resources": [ - { - "metadata": { - "guid": "fake-service-key-guid", - "url": "/v2/service_keys/fake-guid", - "created_at": "2015-01-13T18:52:08+00:00", - "updated_at": null - }, - "entity": { - "name": "fake-service-key-name", - "service_instance_guid":"fake-service-instance-guid", - "service_instance_url":"http://fake/service/instance/url", - "credentials": { - "username": "fake-username", - "password": "fake-password", - "host": "fake-host", - "port": 3306, - "database": "fake-db-name", - "uri": "mysql://fake-user:fake-password@fake-host:3306/fake-db-name" - } - } - }] - }`, -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan.go deleted file mode 100644 index 8181b8d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan.go +++ /dev/null @@ -1,89 +0,0 @@ -package api - -import ( - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServicePlanRepository interface { - Search(searchParameters map[string]string) ([]models.ServicePlanFields, error) - Update(models.ServicePlanFields, string, bool) error - ListPlansFromManyServices(serviceGuids []string) ([]models.ServicePlanFields, error) -} - -type CloudControllerServicePlanRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServicePlanRepository(config core_config.Reader, gateway net.Gateway) CloudControllerServicePlanRepository { - return CloudControllerServicePlanRepository{ - config: config, - gateway: gateway, - } -} - -func (repo CloudControllerServicePlanRepository) Update(servicePlan models.ServicePlanFields, serviceGuid string, public bool) error { - var body string - - body = fmt.Sprintf(`{"name":"%s", "free":%t, "description":"%s", "public":%t, "service_guid":"%s"}`, - servicePlan.Name, - servicePlan.Free, - servicePlan.Description, - public, - serviceGuid, - ) - - url := fmt.Sprintf("/v2/service_plans/%s", servicePlan.Guid) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), url, strings.NewReader(body)) -} - -func (repo CloudControllerServicePlanRepository) ListPlansFromManyServices(serviceGuids []string) ([]models.ServicePlanFields, error) { - serviceGuidsString := strings.Join(serviceGuids, ",") - plans := []models.ServicePlanFields{} - - err := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/service_plans?q=%s", url.QueryEscape("service_guid IN "+serviceGuidsString)), - resources.ServicePlanResource{}, - func(resource interface{}) bool { - if plan, ok := resource.(resources.ServicePlanResource); ok { - plans = append(plans, plan.ToFields()) - } - return true - }) - return plans, err -} - -func (repo CloudControllerServicePlanRepository) Search(queryParams map[string]string) (plans []models.ServicePlanFields, err error) { - err = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - combineQueryParametersWithUri("/v2/service_plans", queryParams), - resources.ServicePlanResource{}, - func(resource interface{}) bool { - if sp, ok := resource.(resources.ServicePlanResource); ok { - plans = append(plans, sp.ToFields()) - } - return true - }) - return -} - -func combineQueryParametersWithUri(uri string, queryParams map[string]string) string { - if len(queryParams) == 0 { - return uri - } - - params := []string{} - for key, value := range queryParams { - params = append(params, url.QueryEscape(key+":"+value)) - } - - return uri + "?q=" + strings.Join(params, "%3B") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_test.go deleted file mode 100644 index 607ca0d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_test.go +++ /dev/null @@ -1,295 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Service Plan Repository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerServicePlanRepository - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServicePlanRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".Search", func() { - Context("No query parameters", func() { - BeforeEach(func() { - setupTestServer(firstPlanRequest, secondPlanRequest) - }) - - It("returns service plans", func() { - servicePlansFields, err := repo.Search(map[string]string{}) - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(servicePlansFields)).To(Equal(2)) - Expect(servicePlansFields[0].Name).To(Equal("The big one")) - Expect(servicePlansFields[0].Guid).To(Equal("the-big-guid")) - Expect(servicePlansFields[0].Free).To(BeTrue()) - Expect(servicePlansFields[0].Public).To(BeTrue()) - Expect(servicePlansFields[0].Active).To(BeTrue()) - Expect(servicePlansFields[1].Name).To(Equal("The small second")) - Expect(servicePlansFields[1].Guid).To(Equal("the-small-second")) - Expect(servicePlansFields[1].Free).To(BeTrue()) - Expect(servicePlansFields[1].Public).To(BeFalse()) - Expect(servicePlansFields[1].Active).To(BeFalse()) - }) - }) - Context("With query parameters", func() { - BeforeEach(func() { - setupTestServer(firstPlanRequestWithParams, secondPlanRequestWithParams) - }) - - It("returns service plans", func() { - servicePlansFields, err := repo.Search(map[string]string{"service_guid": "Foo"}) - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(servicePlansFields)).To(Equal(2)) - Expect(servicePlansFields[0].Name).To(Equal("The big one")) - Expect(servicePlansFields[0].Guid).To(Equal("the-big-guid")) - Expect(servicePlansFields[0].Free).To(BeTrue()) - Expect(servicePlansFields[0].Public).To(BeTrue()) - Expect(servicePlansFields[0].Active).To(BeTrue()) - Expect(servicePlansFields[1].Name).To(Equal("The small second")) - Expect(servicePlansFields[1].Guid).To(Equal("the-small-second")) - Expect(servicePlansFields[1].Free).To(BeTrue()) - Expect(servicePlansFields[1].Public).To(BeFalse()) - Expect(servicePlansFields[1].Active).To(BeFalse()) - }) - }) - }) - - Describe(".Update", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_plans/my-service-plan-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-service-plan", "free":true, "description":"descriptive text", "public":true, "service_guid":"service-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - }) - - It("Updates the service to public", func() { - servicePlan := models.ServicePlanFields{ - Name: "my-service-plan", - Guid: "my-service-plan-guid", - Description: "descriptive text", - Free: true, - Public: false, - } - - err := repo.Update(servicePlan, "service-guid", true) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Describe(".ListPlansFromManyServices", func() { - BeforeEach(func() { - setupTestServer(manyServiceRequest1, manyServiceRequest2) - }) - - It("returns all service plans for a list of service guids", func() { - serviceGuids := []string{"service-guid1", "service-guid2"} - - servicePlansFields, err := repo.ListPlansFromManyServices(serviceGuids) - Expect(err).NotTo(HaveOccurred()) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(servicePlansFields)).To(Equal(2)) - - Expect(servicePlansFields[0].Name).To(Equal("plan one")) - Expect(servicePlansFields[0].Guid).To(Equal("plan1")) - - Expect(servicePlansFields[1].Name).To(Equal("plan two")) - Expect(servicePlansFields[1].Guid).To(Equal("plan2")) - }) - }) -}) - -var firstPlanRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plans", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "next_url": "/v2/service_plans?page=2", - "resources": [ - { - "metadata": { - "guid": "the-big-guid" - }, - "entity": { - "name": "The big one", - "free": true, - "public": true, - "active": true - } - } - ] -}`, - }, -}) - -var secondPlanRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plans?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "resources": [ - { - "metadata": { - "guid": "the-small-second" - }, - "entity": { - "name": "The small second", - "free": true, - "public": false, - "active": false - } - } - ] -}`, - }, -}) - -var firstPlanRequestWithParams = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plans?q=service_guid%3AFoo", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "next_url": "/v2/service_plans?q=service_guid%3AFoo&page=2", - "resources": [ - { - "metadata": { - "guid": "the-big-guid" - }, - "entity": { - "name": "The big one", - "free": true, - "public": true, - "active": true - } - } - ] -}`, - }, -}) - -var secondPlanRequestWithParams = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plans?q=service_guid%3AFoo&page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "resources": [ - { - "metadata": { - "guid": "the-small-second" - }, - "entity": { - "name": "The small second", - "free": true, - "public": false, - "active": false - } - } - ] -}`, - }, -}) - -var manyServiceRequest1 = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plans?q=service_guid+IN+service-guid1,service-guid2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "next_url": "/v2/service_plans?q=service_guid+IN+service-guid1,service-guid2&page=2", - "resources": [ - { - "metadata": { - "guid": "plan1" - }, - "entity": { - "name": "plan one", - "free": true, - "public": true, - "active": true - } - } - ] -}`, - }, -}) - -var manyServiceRequest2 = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plans?q=service_guid+IN+service-guid1,service-guid2&page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 1, - "next_url": null, - "prev_url": "/v2/service_plans?q=service_guid+IN+service-guid1,service-guid2", - "resources": [ - { - "metadata": { - "guid": "plan2" - }, - "entity": { - "name": "plan two", - "free": true, - "public": true, - "active": true - } - } - ] -}`, - }, -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_visibility.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_visibility.go deleted file mode 100644 index 1e65e0c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_visibility.go +++ /dev/null @@ -1,70 +0,0 @@ -package api - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServicePlanVisibilityRepository interface { - Create(string, string) error - List() ([]models.ServicePlanVisibilityFields, error) - Delete(string) error - Search(map[string]string) ([]models.ServicePlanVisibilityFields, error) -} - -type CloudControllerServicePlanVisibilityRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServicePlanVisibilityRepository(config core_config.Reader, gateway net.Gateway) CloudControllerServicePlanVisibilityRepository { - return CloudControllerServicePlanVisibilityRepository{ - config: config, - gateway: gateway, - } -} - -func (repo CloudControllerServicePlanVisibilityRepository) Create(serviceGuid, orgGuid string) error { - url := "/v2/service_plan_visibilities" - data := fmt.Sprintf(`{"service_plan_guid":"%s", "organization_guid":"%s"}`, serviceGuid, orgGuid) - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), url, strings.NewReader(data)) -} - -func (repo CloudControllerServicePlanVisibilityRepository) List() (visibilities []models.ServicePlanVisibilityFields, err error) { - err = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - "/v2/service_plan_visibilities", - resources.ServicePlanVisibilityResource{}, - func(resource interface{}) bool { - if spv, ok := resource.(resources.ServicePlanVisibilityResource); ok { - visibilities = append(visibilities, spv.ToFields()) - } - return true - }) - return -} - -func (repo CloudControllerServicePlanVisibilityRepository) Delete(servicePlanGuid string) error { - path := fmt.Sprintf("/v2/service_plan_visibilities/%s", servicePlanGuid) - return repo.gateway.DeleteResourceSynchronously(repo.config.ApiEndpoint(), path) -} - -func (repo CloudControllerServicePlanVisibilityRepository) Search(queryParams map[string]string) ([]models.ServicePlanVisibilityFields, error) { - var visibilities []models.ServicePlanVisibilityFields - err := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - combineQueryParametersWithUri("/v2/service_plan_visibilities", queryParams), - resources.ServicePlanVisibilityResource{}, - func(resource interface{}) bool { - if sp, ok := resource.(resources.ServicePlanVisibilityResource); ok { - visibilities = append(visibilities, sp.ToFields()) - } - return true - }) - return visibilities, err -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_visibility_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_visibility_test.go deleted file mode 100644 index e6a8c02..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_plan_visibility_test.go +++ /dev/null @@ -1,182 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Service Plan Visibility Repository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerServicePlanVisibilityRepository - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServicePlanVisibilityRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - Describe(".Create", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_plan_visibilities", - Matcher: testnet.RequestBodyMatcher(`{"service_plan_guid":"service_plan_guid", "organization_guid":"org_guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - }) - - It("creates a service plan visibility", func() { - err := repo.Create("service_plan_guid", "org_guid") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Describe(".List", func() { - BeforeEach(func() { - setupTestServer(firstPlanVisibilityRequest, secondPlanVisibilityRequest) - }) - - It("returns service plans", func() { - servicePlansVisibilitiesFields, err := repo.List() - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(servicePlansVisibilitiesFields)).To(Equal(2)) - Expect(servicePlansVisibilitiesFields[0].Guid).To(Equal("request-guid-1")) - Expect(servicePlansVisibilitiesFields[0].ServicePlanGuid).To(Equal("service-plan-guid-1")) - Expect(servicePlansVisibilitiesFields[0].OrganizationGuid).To(Equal("org-guid-1")) - Expect(servicePlansVisibilitiesFields[1].Guid).To(Equal("request-guid-2")) - Expect(servicePlansVisibilitiesFields[1].ServicePlanGuid).To(Equal("service-plan-guid-2")) - Expect(servicePlansVisibilitiesFields[1].OrganizationGuid).To(Equal("org-guid-2")) - }) - }) - - Describe(".Delete", func() { - It("deletes a service plan visibility", func() { - servicePlanVisibilityGuid := "the-service-plan-visibility-guid" - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/service_plan_visibilities/" + servicePlanVisibilityGuid, - Matcher: testnet.EmptyQueryParamMatcher(), - Response: testnet.TestResponse{ - Status: http.StatusNoContent, - }, - })) - - err := repo.Delete(servicePlanVisibilityGuid) - Expect(err).ToNot(HaveOccurred()) - }) - }) - - Describe(".Search", func() { - It("finds the service plan visibilities that match the given query parameters", func() { - setupTestServer(searchPlanVisibilityRequest) - - servicePlansVisibilitiesFields, err := repo.Search(map[string]string{"service_plan_guid": "service-plan-guid-1", "organization_guid": "org-guid-1"}) - Expect(err).ToNot(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(servicePlansVisibilitiesFields)).To(Equal(1)) - Expect(servicePlansVisibilitiesFields[0].Guid).To(Equal("request-guid-1")) - Expect(servicePlansVisibilitiesFields[0].ServicePlanGuid).To(Equal("service-plan-guid-1")) - Expect(servicePlansVisibilitiesFields[0].OrganizationGuid).To(Equal("org-guid-1")) - }) - }) -}) - -var firstPlanVisibilityRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plan_visibilities", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "next_url": "/v2/service_plan_visibilities?page=2", - "resources": [ - { - "metadata": { - "guid": "request-guid-1" - }, - "entity": { - "service_plan_guid": "service-plan-guid-1", - "organization_guid": "org-guid-1" - } - } - ] -}`, - }, -}) - -var secondPlanVisibilityRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plan_visibilities?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 2, - "total_pages": 2, - "resources": [ - { - "metadata": { - "guid": "request-guid-2" - }, - "entity": { - "service_plan_guid": "service-plan-guid-2", - "organization_guid": "org-guid-2" - } - } - ] -}`, - }, -}) - -var searchPlanVisibilityRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/service_plan_visibilities?q=service_plan_guid%3Aservice-plan-guid-1%3Borganization_guid%3Aorg-guid-1", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "total_results": 1, - "total_pages": 1, - "resources": [ - { - "metadata": { - "guid": "request-guid-1" - }, - "entity": { - "service_plan_guid": "service-plan-guid-1", - "organization_guid": "org-guid-1" - } - } - ] -}`, - }, -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_summary.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_summary.go deleted file mode 100644 index 95ab9f6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_summary.go +++ /dev/null @@ -1,114 +0,0 @@ -package api - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServiceInstancesSummaries struct { - Apps []ServiceInstanceSummaryApp - ServiceInstances []ServiceInstanceSummary `json:"services"` -} - -func (resource ServiceInstancesSummaries) ToModels() (instances []models.ServiceInstance) { - for _, instanceSummary := range resource.ServiceInstances { - applicationNames := resource.findApplicationNamesForInstance(instanceSummary.Name) - - planSummary := instanceSummary.ServicePlan - servicePlan := models.ServicePlanFields{} - servicePlan.Name = planSummary.Name - servicePlan.Guid = planSummary.Guid - - offeringSummary := planSummary.ServiceOffering - serviceOffering := models.ServiceOfferingFields{} - serviceOffering.Label = offeringSummary.Label - serviceOffering.Provider = offeringSummary.Provider - serviceOffering.Version = offeringSummary.Version - - instance := models.ServiceInstance{} - instance.Name = instanceSummary.Name - instance.LastOperation.Type = instanceSummary.LastOperation.Type - instance.LastOperation.State = instanceSummary.LastOperation.State - instance.LastOperation.Description = instanceSummary.LastOperation.Description - instance.ApplicationNames = applicationNames - instance.ServicePlan = servicePlan - instance.ServiceOffering = serviceOffering - - instances = append(instances, instance) - } - - return -} - -func (resource ServiceInstancesSummaries) findApplicationNamesForInstance(instanceName string) (applicationNames []string) { - for _, app := range resource.Apps { - for _, name := range app.ServiceNames { - if name == instanceName { - applicationNames = append(applicationNames, app.Name) - } - } - } - - return -} - -type ServiceInstanceSummaryApp struct { - Name string - ServiceNames []string `json:"service_names"` -} - -type LastOperationSummary struct { - Type string `json:"type"` - State string `json:"state"` - Description string `json:"description"` -} - -type ServiceInstanceSummary struct { - Name string - LastOperation LastOperationSummary `json:"last_operation"` - ServicePlan ServicePlanSummary `json:"service_plan"` -} - -type ServicePlanSummary struct { - Name string - Guid string - ServiceOffering ServiceOfferingSummary `json:"service"` -} - -type ServiceOfferingSummary struct { - Label string - Provider string - Version string -} - -type ServiceSummaryRepository interface { - GetSummariesInCurrentSpace() (instances []models.ServiceInstance, apiErr error) -} - -type CloudControllerServiceSummaryRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServiceSummaryRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerServiceSummaryRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerServiceSummaryRepository) GetSummariesInCurrentSpace() (instances []models.ServiceInstance, apiErr error) { - path := fmt.Sprintf("%s/v2/spaces/%s/summary", repo.config.ApiEndpoint(), repo.config.SpaceFields().Guid) - resource := new(ServiceInstancesSummaries) - - apiErr = repo.gateway.GetResource(path, resource) - if apiErr != nil { - return - } - - instances = resource.ToModels() - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_summary_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_summary_test.go deleted file mode 100644 index c897946..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/service_summary_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServiceSummaryRepository", func() { - var serviceInstanceSummariesResponse testnet.TestResponse - - BeforeEach(func() { - serviceInstanceSummariesResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "apps":[ - { - "name":"app1", - "service_names":[ - "my-service-instance" - ] - },{ - "name":"app2", - "service_names":[ - "my-service-instance" - ] - } - ], - "services": [ - { - "guid": "my-service-instance-guid", - "name": "my-service-instance", - "bound_app_count": 2, - "last_operation": { - "type": "create", - "state": "in progress", - "description": "50% done" - }, - "service_plan": { - "guid": "service-plan-guid", - "name": "spark", - "service": { - "guid": "service-offering-guid", - "label": "cleardb", - "provider": "cleardb-provider", - "version": "n/a" - } - } - } - ] - }`, - } - }) - - It("gets a summary of services in the given space", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/summary", - Response: serviceInstanceSummariesResponse, - }) - - ts, handler, repo := createServiceSummaryRepo(req) - defer ts.Close() - - serviceInstances, apiErr := repo.GetSummariesInCurrentSpace() - Expect(handler).To(HaveAllRequestsCalled()) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(1).To(Equal(len(serviceInstances))) - - instance1 := serviceInstances[0] - Expect(instance1.Name).To(Equal("my-service-instance")) - Expect(instance1.LastOperation.Type).To(Equal("create")) - Expect(instance1.LastOperation.State).To(Equal("in progress")) - Expect(instance1.LastOperation.Description).To(Equal("50% done")) - Expect(instance1.ServicePlan.Name).To(Equal("spark")) - Expect(instance1.ServiceOffering.Label).To(Equal("cleardb")) - Expect(instance1.ServiceOffering.Label).To(Equal("cleardb")) - Expect(instance1.ServiceOffering.Provider).To(Equal("cleardb-provider")) - Expect(instance1.ServiceOffering.Version).To(Equal("n/a")) - Expect(len(instance1.ApplicationNames)).To(Equal(2)) - Expect(instance1.ApplicationNames[0]).To(Equal("app1")) - Expect(instance1.ApplicationNames[1]).To(Equal("app2")) - }) -}) - -func createServiceSummaryRepo(req testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo ServiceSummaryRepository) { - ts, handler = testnet.NewServer([]testnet.TestRequest{req}) - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(ts.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServiceSummaryRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/services.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/services.go deleted file mode 100644 index 2230147..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/services.go +++ /dev/null @@ -1,310 +0,0 @@ -package api - -import ( - "bytes" - "encoding/json" - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type ServiceRepository interface { - PurgeServiceOffering(offering models.ServiceOffering) error - GetServiceOfferingByGuid(serviceGuid string) (offering models.ServiceOffering, apiErr error) - FindServiceOfferingsByLabel(name string) (offering models.ServiceOfferings, apiErr error) - FindServiceOfferingByLabelAndProvider(name, provider string) (offering models.ServiceOffering, apiErr error) - - FindServiceOfferingsForSpaceByLabel(spaceGuid, name string) (offering models.ServiceOfferings, apiErr error) - - GetAllServiceOfferings() (offerings models.ServiceOfferings, apiErr error) - GetServiceOfferingsForSpace(spaceGuid string) (offerings models.ServiceOfferings, apiErr error) - FindInstanceByName(name string) (instance models.ServiceInstance, apiErr error) - CreateServiceInstance(name, planGuid string, params map[string]interface{}, tags []string) (apiErr error) - UpdateServiceInstance(instanceGuid, planGuid string, params map[string]interface{}, tags []string) (apiErr error) - RenameService(instance models.ServiceInstance, newName string) (apiErr error) - DeleteService(instance models.ServiceInstance) (apiErr error) - FindServicePlanByDescription(planDescription resources.ServicePlanDescription) (planGuid string, apiErr error) - ListServicesFromBroker(brokerGuid string) (services []models.ServiceOffering, err error) - ListServicesFromManyBrokers(brokerGuids []string) (services []models.ServiceOffering, err error) - GetServiceInstanceCountForServicePlan(v1PlanGuid string) (count int, apiErr error) - MigrateServicePlanFromV1ToV2(v1PlanGuid, v2PlanGuid string) (changedCount int, apiErr error) -} - -type CloudControllerServiceRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerServiceRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerServiceRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerServiceRepository) GetServiceOfferingByGuid(serviceGuid string) (models.ServiceOffering, error) { - offering := new(resources.ServiceOfferingResource) - apiErr := repo.gateway.GetResource(repo.config.ApiEndpoint()+fmt.Sprintf("/v2/services/%s", serviceGuid), offering) - serviceOffering := offering.ToFields() - return models.ServiceOffering{ServiceOfferingFields: serviceOffering}, apiErr -} - -func (repo CloudControllerServiceRepository) GetServiceOfferingsForSpace(spaceGuid string) (models.ServiceOfferings, error) { - return repo.getServiceOfferings(fmt.Sprintf("/v2/spaces/%s/services", spaceGuid)) -} - -func (repo CloudControllerServiceRepository) FindServiceOfferingsForSpaceByLabel(spaceGuid, name string) (offerings models.ServiceOfferings, err error) { - offerings, err = repo.getServiceOfferings(fmt.Sprintf("/v2/spaces/%s/services?q=%s", spaceGuid, url.QueryEscape("label:"+name))) - - if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.BAD_QUERY_PARAM { - offerings, err = repo.findServiceOfferingsByPaginating(spaceGuid, name) - } - - if err == nil && len(offerings) == 0 { - err = errors.NewModelNotFoundError("Service offering", name) - } - - return -} - -func (repo CloudControllerServiceRepository) findServiceOfferingsByPaginating(spaceGuid, label string) (offerings models.ServiceOfferings, apiErr error) { - offerings, apiErr = repo.GetServiceOfferingsForSpace(spaceGuid) - if apiErr != nil { - return - } - - matchingOffering := models.ServiceOfferings{} - - for _, offering := range offerings { - if offering.Label == label { - matchingOffering = append(matchingOffering, offering) - } - } - return matchingOffering, nil -} - -func (repo CloudControllerServiceRepository) GetAllServiceOfferings() (models.ServiceOfferings, error) { - return repo.getServiceOfferings("/v2/services") -} - -func (repo CloudControllerServiceRepository) getServiceOfferings(path string) ([]models.ServiceOffering, error) { - var offerings []models.ServiceOffering - apiErr := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.ServiceOfferingResource{}, - func(resource interface{}) bool { - if so, ok := resource.(resources.ServiceOfferingResource); ok { - offerings = append(offerings, so.ToModel()) - } - return true - }) - - return offerings, apiErr -} - -func (repo CloudControllerServiceRepository) FindInstanceByName(name string) (instance models.ServiceInstance, apiErr error) { - path := fmt.Sprintf("%s/v2/spaces/%s/service_instances?return_user_provided_service_instances=true&q=%s&inline-relations-depth=1", repo.config.ApiEndpoint(), repo.config.SpaceFields().Guid, url.QueryEscape("name:"+name)) - - responseJSON := new(resources.PaginatedServiceInstanceResources) - apiErr = repo.gateway.GetResource(path, responseJSON) - if apiErr != nil { - return - } - - if len(responseJSON.Resources) == 0 { - apiErr = errors.NewModelNotFoundError("Service instance", name) - return - } - - instanceResource := responseJSON.Resources[0] - instance = instanceResource.ToModel() - - if instanceResource.Entity.ServicePlan.Metadata.Guid != "" { - resource := &resources.ServiceOfferingResource{} - path = fmt.Sprintf("%s/v2/services/%s", repo.config.ApiEndpoint(), instanceResource.Entity.ServicePlan.Entity.ServiceOfferingGuid) - apiErr = repo.gateway.GetResource(path, resource) - instance.ServiceOffering = resource.ToFields() - } - - return -} - -func (repo CloudControllerServiceRepository) CreateServiceInstance(name, planGuid string, params map[string]interface{}, tags []string) (err error) { - path := "/v2/service_instances?accepts_incomplete=true" - request := models.ServiceInstanceCreateRequest{ - Name: name, - PlanGuid: planGuid, - SpaceGuid: repo.config.SpaceFields().Guid, - Params: params, - Tags: tags, - } - - jsonBytes, err := json.Marshal(request) - if err != nil { - return err - } - - err = repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(jsonBytes)) - - if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.SERVICE_INSTANCE_NAME_TAKEN { - serviceInstance, findInstanceErr := repo.FindInstanceByName(name) - - if findInstanceErr == nil && serviceInstance.ServicePlan.Guid == planGuid { - return errors.NewModelAlreadyExistsError("Service", name) - } - } - - return -} - -func (repo CloudControllerServiceRepository) UpdateServiceInstance(instanceGuid, planGuid string, params map[string]interface{}, tags []string) (err error) { - path := fmt.Sprintf("/v2/service_instances/%s?accepts_incomplete=true", instanceGuid) - request := models.ServiceInstanceUpdateRequest{ - PlanGuid: planGuid, - Params: params, - Tags: tags, - } - - jsonBytes, err := json.Marshal(request) - if err != nil { - return err - } - - err = repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(jsonBytes)) - - return -} - -func (repo CloudControllerServiceRepository) RenameService(instance models.ServiceInstance, newName string) (apiErr error) { - body := fmt.Sprintf(`{"name":"%s"}`, newName) - path := fmt.Sprintf("/v2/service_instances/%s?accepts_incomplete=true", instance.Guid) - - if instance.IsUserProvided() { - path = fmt.Sprintf("/v2/user_provided_service_instances/%s", instance.Guid) - } - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} - -func (repo CloudControllerServiceRepository) DeleteService(instance models.ServiceInstance) (apiErr error) { - if len(instance.ServiceBindings) > 0 || len(instance.ServiceKeys) > 0 { - return errors.NewServiceAssociationError() - } - path := fmt.Sprintf("/v2/service_instances/%s?%s", instance.Guid, "accepts_incomplete=true") - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} - -func (repo CloudControllerServiceRepository) PurgeServiceOffering(offering models.ServiceOffering) error { - url := fmt.Sprintf("/v2/services/%s?purge=true", offering.Guid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), url) -} - -func (repo CloudControllerServiceRepository) FindServiceOfferingsByLabel(label string) (models.ServiceOfferings, error) { - path := fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:"+label)) - offerings, apiErr := repo.getServiceOfferings(path) - - if apiErr != nil { - return models.ServiceOfferings{}, apiErr - } else if len(offerings) == 0 { - apiErr = errors.NewModelNotFoundError("Service offering", label) - return models.ServiceOfferings{}, apiErr - } - - return offerings, apiErr -} - -func (repo CloudControllerServiceRepository) FindServiceOfferingByLabelAndProvider(label, provider string) (models.ServiceOffering, error) { - path := fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:"+label+";provider:"+provider)) - offerings, apiErr := repo.getServiceOfferings(path) - - if apiErr != nil { - return models.ServiceOffering{}, apiErr - } else if len(offerings) == 0 { - apiErr = errors.NewModelNotFoundError("Service offering", label+" "+provider) - return models.ServiceOffering{}, apiErr - } - - return offerings[0], apiErr -} - -func (repo CloudControllerServiceRepository) FindServicePlanByDescription(planDescription resources.ServicePlanDescription) (string, error) { - path := fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", - url.QueryEscape("label:"+planDescription.ServiceLabel+";provider:"+planDescription.ServiceProvider)) - - var planGuid string - offerings, apiErr := repo.getServiceOfferings(path) - if apiErr != nil { - return planGuid, apiErr - } - - for _, serviceOfferingResource := range offerings { - for _, servicePlanResource := range serviceOfferingResource.Plans { - if servicePlanResource.Name == planDescription.ServicePlanName { - planGuid := servicePlanResource.Guid - return planGuid, apiErr - } - } - } - - apiErr = errors.NewModelNotFoundError("Plan", planDescription.String()) - - return planGuid, apiErr -} - -func (repo CloudControllerServiceRepository) ListServicesFromManyBrokers(brokerGuids []string) ([]models.ServiceOffering, error) { - brokerGuidsString := strings.Join(brokerGuids, ",") - services := []models.ServiceOffering{} - - err := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("service_broker_guid IN "+brokerGuidsString)), - resources.ServiceOfferingResource{}, - func(resource interface{}) bool { - if service, ok := resource.(resources.ServiceOfferingResource); ok { - services = append(services, service.ToModel()) - } - return true - }) - return services, err -} - -func (repo CloudControllerServiceRepository) ListServicesFromBroker(brokerGuid string) (offerings []models.ServiceOffering, err error) { - err = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("service_broker_guid:"+brokerGuid)), - resources.ServiceOfferingResource{}, - func(resource interface{}) bool { - if offering, ok := resource.(resources.ServiceOfferingResource); ok { - offerings = append(offerings, offering.ToModel()) - } - return true - }) - return -} - -func (repo CloudControllerServiceRepository) MigrateServicePlanFromV1ToV2(v1PlanGuid, v2PlanGuid string) (changedCount int, apiErr error) { - path := fmt.Sprintf("/v2/service_plans/%s/service_instances", v1PlanGuid) - body := strings.NewReader(fmt.Sprintf(`{"service_plan_guid":"%s"}`, v2PlanGuid)) - response := new(resources.ServiceMigrateV1ToV2Response) - - apiErr = repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, body, response) - if apiErr != nil { - return - } - - changedCount = response.ChangedCount - return -} - -func (repo CloudControllerServiceRepository) GetServiceInstanceCountForServicePlan(v1PlanGuid string) (count int, apiErr error) { - path := fmt.Sprintf("%s/v2/service_plans/%s/service_instances?results-per-page=1", repo.config.ApiEndpoint(), v1PlanGuid) - response := new(resources.PaginatedServiceInstanceResources) - apiErr = repo.gateway.GetResource(path, response) - count = response.TotalResults - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/services_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/services_test.go deleted file mode 100644 index 1c232e2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/services_test.go +++ /dev/null @@ -1,1457 +0,0 @@ -package api_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Services Repo", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo ServiceRepository - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - configRepo.SetAccessToken("BEARER my_access_token") - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerServiceRepository(configRepo, gateway) - }) - - AfterEach(func() { - if testServer != nil { - testServer.Close() - } - }) - - Describe("GetAllServiceOfferings", func() { - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/services", - Response: firstOfferingsResponse, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/services", - Response: multipleOfferingsResponse, - }), - ) - }) - - It("gets all public service offerings", func() { - offerings, err := repo.GetAllServiceOfferings() - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(len(offerings)).To(Equal(3)) - - firstOffering := offerings[0] - Expect(firstOffering.Label).To(Equal("first-Offering 1")) - Expect(firstOffering.Version).To(Equal("1.0")) - Expect(firstOffering.Description).To(Equal("first Offering 1 description")) - Expect(firstOffering.Provider).To(Equal("Offering 1 provider")) - Expect(firstOffering.Guid).To(Equal("first-offering-1-guid")) - }) - }) - - Describe("GetServiceOfferingsForSpace", func() { - It("gets all service offerings in a given space", func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/services", - Response: firstOfferingsForSpaceResponse, - }), - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/services", - Response: multipleOfferingsResponse, - })) - - offerings, err := repo.GetServiceOfferingsForSpace("my-space-guid") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(len(offerings)).To(Equal(3)) - - firstOffering := offerings[0] - Expect(firstOffering.Label).To(Equal("first-Offering 1")) - Expect(firstOffering.Version).To(Equal("1.0")) - Expect(firstOffering.Description).To(Equal("first Offering 1 description")) - Expect(firstOffering.Provider).To(Equal("Offering 1 provider")) - Expect(firstOffering.Guid).To(Equal("first-offering-1-guid")) - Expect(len(firstOffering.Plans)).To(Equal(0)) - - secondOffering := offerings[1] - Expect(secondOffering.Label).To(Equal("Offering 1")) - Expect(secondOffering.Version).To(Equal("1.0")) - Expect(secondOffering.Description).To(Equal("Offering 1 description")) - Expect(secondOffering.Provider).To(Equal("Offering 1 provider")) - Expect(secondOffering.Guid).To(Equal("offering-1-guid")) - Expect(len(secondOffering.Plans)).To(Equal(0)) - }) - }) - - Describe("find by service broker", func() { - BeforeEach(func() { - body1 := ` -{ - "total_results": 2, - "total_pages": 2, - "prev_url": null, - "next_url": "/v2/services?q=service_broker_guid%3Amy-service-broker-guid&page=2", - "resources": [ - { - "metadata": { - "guid": "my-service-guid" - }, - "entity": { - "label": "my-service", - "provider": "androsterone-ensphere", - "description": "Dummy addon that is cool", - "version": "damageableness-preheat", - "documentation_url": "YESWECAN.com" - } - } - ] -}` - body2 := ` -{ - "total_results": 1, - "total_pages": 1, - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "my-service-guid2" - }, - "entity": { - "label": "my-service2", - "provider": "androsterone-ensphere", - "description": "Dummy addon that is cooler", - "version": "seraphine-lowdah", - "documentation_url": "YESWECAN.com" - } - } - ] -}` - - setupTestServer( - testapi.NewCloudControllerTestRequest( - testnet.TestRequest{ - Method: "GET", - Path: "/v2/services?q=service_broker_guid%3Amy-service-broker-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: body1}, - }), - testapi.NewCloudControllerTestRequest( - testnet.TestRequest{ - Method: "GET", - Path: "/v2/services?q=service_broker_guid%3Amy-service-broker-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: body2}, - }), - ) - }) - - It("returns the service brokers services", func() { - services, err := repo.ListServicesFromBroker("my-service-broker-guid") - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(services)).To(Equal(2)) - - Expect(services[0].Guid).To(Equal("my-service-guid")) - Expect(services[1].Guid).To(Equal("my-service-guid2")) - }) - }) - - Describe("returning services for many brokers", func() { - path1 := "/v2/services?q=service_broker_guid%20IN%20my-service-broker-guid,my-service-broker-guid2" - body1 := ` -{ - "total_results": 2, - "total_pages": 2, - "prev_url": null, - "next_url": "/v2/services?q=service_broker_guid%20IN%20my-service-broker-guid,my-service-broker-guid2&page=2", - "resources": [ - { - "metadata": { - "guid": "my-service-guid" - }, - "entity": { - "label": "my-service", - "provider": "androsterone-ensphere", - "description": "Dummy addon that is cool", - "version": "damageableness-preheat", - "documentation_url": "YESWECAN.com" - } - } - ] -}` - path2 := "/v2/services?q=service_broker_guid%20IN%20my-service-broker-guid,my-service-broker-guid2&page=2" - body2 := ` -{ - "total_results": 2, - "total_pages": 2, - "prev_url": "/v2/services?q=service_broker_guid%20IN%20my-service-broker-guid,my-service-broker-guid2", - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "my-service-guid2" - }, - "entity": { - "label": "my-service2", - "provider": "androsterone-ensphere", - "description": "Dummy addon that is cool", - "version": "damageableness-preheat", - "documentation_url": "YESWECAN.com" - } - } - ] -}` - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest( - testnet.TestRequest{ - Method: "GET", - Path: path1, - Response: testnet.TestResponse{Status: http.StatusOK, Body: body1}, - }), - testapi.NewCloudControllerTestRequest( - testnet.TestRequest{ - Method: "GET", - Path: path2, - Response: testnet.TestResponse{Status: http.StatusOK, Body: body2}, - }), - ) - }) - - It("returns the service brokers services", func() { - brokerGuids := []string{"my-service-broker-guid", "my-service-broker-guid2"} - services, err := repo.ListServicesFromManyBrokers(brokerGuids) - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(services)).To(Equal(2)) - - Expect(services[0].Guid).To(Equal("my-service-guid")) - Expect(services[1].Guid).To(Equal("my-service-guid2")) - }) - }) - - Describe("creating a service instance", func() { - It("makes the right request", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_instances?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"name":"instance-name","service_plan_guid":"plan-guid","space_guid":"my-space-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - err := repo.CreateServiceInstance("instance-name", "plan-guid", nil, nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Context("when there are parameters", func() { - It("sends the parameters as part of the request body", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_instances?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"name":"instance-name","service_plan_guid":"plan-guid","space_guid":"my-space-guid","parameters": {"data": "hello"}}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - paramsMap := make(map[string]interface{}) - paramsMap["data"] = "hello" - - err := repo.CreateServiceInstance("instance-name", "plan-guid", paramsMap, nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Context("and there is a failure during serialization", func() { - It("returns the serialization error", func() { - paramsMap := make(map[string]interface{}) - paramsMap["data"] = make(chan bool) - - err := repo.CreateServiceInstance("instance-name", "plan-guid", paramsMap, nil) - Expect(err).To(MatchError("json: unsupported type: chan bool")) - }) - }) - }) - - Context("when there are tags", func() { - It("sends the tags as part of the request body", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_instances?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"name":"instance-name","service_plan_guid":"plan-guid","space_guid":"my-space-guid","tags": ["foo", "bar"]}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - tags := []string{"foo", "bar"} - - err := repo.CreateServiceInstance("instance-name", "plan-guid", nil, tags) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when the name is taken but an identical service exists", func() { - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_instances?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-service","service_plan_guid":"plan-guid","space_guid":"my-space-guid"}`), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{"code":60002,"description":"The service instance name is taken: my-service"}`, - }}), - findServiceInstanceReq, - serviceOfferingReq) - }) - - It("returns a ModelAlreadyExistsError if the plan is the same", func() { - err := repo.CreateServiceInstance("my-service", "plan-guid", nil, nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelAlreadyExistsError{})) - }) - }) - - Context("when the name is taken and no identical service instance exists", func() { - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/service_instances?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-service","service_plan_guid":"different-plan-guid","space_guid":"my-space-guid"}`), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{"code":60002,"description":"The service instance name is taken: my-service"}`, - }}), - findServiceInstanceReq, - serviceOfferingReq) - }) - - It("fails if the plan is different", func() { - err := repo.CreateServiceInstance("my-service", "different-plan-guid", nil, nil) - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(HaveOccurred()) - Expect(err).To(BeAssignableToTypeOf(errors.NewHttpError(400, "", ""))) - }) - }) - }) - - Describe("UpdateServiceInstance", func() { - It("makes the right request", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_instances/instance-guid?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"service_plan_guid":"plan-guid", "tags": null}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - err := repo.UpdateServiceInstance("instance-guid", "plan-guid", nil, nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Context("When the instance or plan is not found", func() { - It("fails", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_instances/instance-guid?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"service_plan_guid":"plan-guid", "tags": null}`), - Response: testnet.TestResponse{Status: http.StatusNotFound}, - })) - - err := repo.UpdateServiceInstance("instance-guid", "plan-guid", nil, nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(HaveOccurred()) - }) - }) - - Context("when the user passes arbitrary params", func() { - It("passes the parameters in the correct field for the request", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_instances/instance-guid?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"parameters": {"foo": "bar"}, "tags": null}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - paramsMap := map[string]interface{}{"foo": "bar"} - - err := repo.UpdateServiceInstance("instance-guid", "", paramsMap, nil) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - Context("and there is a failure during serialization", func() { - It("returns the serialization error", func() { - paramsMap := make(map[string]interface{}) - paramsMap["data"] = make(chan bool) - - err := repo.UpdateServiceInstance("instance-guid", "", paramsMap, nil) - Expect(err).To(MatchError("json: unsupported type: chan bool")) - }) - }) - }) - - Context("when there are tags", func() { - It("sends the tags as part of the request body", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_instances/instance-guid?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"tags": ["foo", "bar"]}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - tags := []string{"foo", "bar"} - - err := repo.UpdateServiceInstance("instance-guid", "", nil, tags) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - It("sends empty tags", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_instances/instance-guid?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"tags": []}`), - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - tags := []string{} - - err := repo.UpdateServiceInstance("instance-guid", "", nil, tags) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("finding service instances by name", func() { - It("returns the service instance", func() { - setupTestServer(findServiceInstanceReq, serviceOfferingReq) - - instance, err := repo.FindInstanceByName("my-service") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(instance.Name).To(Equal("my-service")) - Expect(instance.Guid).To(Equal("my-service-instance-guid")) - Expect(instance.DashboardUrl).To(Equal("my-dashboard-url")) - Expect(instance.ServiceOffering.Label).To(Equal("mysql")) - Expect(instance.ServiceOffering.DocumentationUrl).To(Equal("http://info.example.com")) - Expect(instance.ServiceOffering.Description).To(Equal("MySQL database")) - Expect(instance.ServicePlan.Name).To(Equal("plan-name")) - Expect(len(instance.ServiceBindings)).To(Equal(2)) - - binding := instance.ServiceBindings[0] - Expect(binding.Url).To(Equal("/v2/service_bindings/service-binding-1-guid")) - Expect(binding.Guid).To(Equal("service-binding-1-guid")) - Expect(binding.AppGuid).To(Equal("app-1-guid")) - }) - - It("returns user provided services", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/service_instances?return_user_provided_service_instances=true&q=name%3Amy-service", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { - "guid": "my-service-instance-guid" - }, - "entity": { - "name": "my-service", - "service_bindings": [ - { - "metadata": { - "guid": "service-binding-1-guid", - "url": "/v2/service_bindings/service-binding-1-guid" - }, - "entity": { - "app_guid": "app-1-guid" - } - }, - { - "metadata": { - "guid": "service-binding-2-guid", - "url": "/v2/service_bindings/service-binding-2-guid" - }, - "entity": { - "app_guid": "app-2-guid" - } - } - ], - "service_plan_guid": null - } - } - ] - }`}})) - - instance, err := repo.FindInstanceByName("my-service") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(instance.Name).To(Equal("my-service")) - Expect(instance.Guid).To(Equal("my-service-instance-guid")) - Expect(instance.ServiceOffering.Label).To(Equal("")) - Expect(instance.ServicePlan.Name).To(Equal("")) - Expect(len(instance.ServiceBindings)).To(Equal(2)) - - binding := instance.ServiceBindings[0] - Expect(binding.Url).To(Equal("/v2/service_bindings/service-binding-1-guid")) - Expect(binding.Guid).To(Equal("service-binding-1-guid")) - Expect(binding.AppGuid).To(Equal("app-1-guid")) - }) - - It("it returns a failure response when the instance doesn't exist", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/service_instances?return_user_provided_service_instances=true&q=name%3Amy-service", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ "resources": [] }`}, - })) - - _, err := repo.FindInstanceByName("my-service") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - }) - }) - - Describe("DeleteService", func() { - It("deletes the service when no apps and keys are bound", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/service_instances/my-service-instance-guid?accepts_incomplete=true&async=true", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "my-service-instance-guid" - - err := repo.DeleteService(serviceInstance) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - It("doesn't delete the service when apps are bound", func() { - setupTestServer() - - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "my-service-instance-guid" - serviceInstance.ServiceBindings = []models.ServiceBindingFields{ - { - Url: "/v2/service_bindings/service-binding-1-guid", - AppGuid: "app-1-guid", - }, - { - Url: "/v2/service_bindings/service-binding-2-guid", - AppGuid: "app-2-guid", - }, - } - - err := repo.DeleteService(serviceInstance) - Expect(err).To(HaveOccurred()) - Expect(err).To(BeAssignableToTypeOf(&errors.ServiceAssociationError{})) - }) - - It("doesn't delete the service when keys are bound", func() { - setupTestServer() - - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "my-service-instance-guid" - serviceInstance.ServiceKeys = []models.ServiceKeyFields{ - { - Name: "fake-service-key-1", - Url: "/v2/service_keys/service-key-1-guid", - Guid: "service-key-1-guid", - }, - { - Name: "fake-service-key-2", - Url: "/v2/service_keys/service-key-2-guid", - Guid: "service-key-2-guid", - }, - } - - err := repo.DeleteService(serviceInstance) - Expect(err).To(HaveOccurred()) - Expect(err).To(BeAssignableToTypeOf(&errors.ServiceAssociationError{})) - }) - }) - - Describe("RenameService", func() { - Context("when the service is not user provided", func() { - - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_instances/my-service-instance-guid?accepts_incomplete=true", - Matcher: testnet.RequestBodyMatcher(`{"name":"new-name"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - }) - - It("renames the service", func() { - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "my-service-instance-guid" - serviceInstance.ServicePlan = models.ServicePlanFields{ - Guid: "some-plan-guid", - } - - err := repo.RenameService(serviceInstance, "new-name") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when the service is user provided", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/user_provided_service_instances/my-service-instance-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"new-name"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - }) - - It("renames the service", func() { - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "my-service-instance-guid" - - err := repo.RenameService(serviceInstance, "new-name") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("FindServiceOfferingByLabelAndProvider", func() { - Context("when the service offering can be found", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:offering-1;provider:provider-1")), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "offering-1", - "provider": "provider-1", - "description": "offering 1 description", - "version" : "1.0", - "service_plans": [] - } - } - ] - }`}}) - }) - - It("finds service offerings by label and provider", func() { - offering, err := repo.FindServiceOfferingByLabelAndProvider("offering-1", "provider-1") - Expect(offering.Guid).To(Equal("offering-1-guid")) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when the service offering cannot be found", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:offering-1;provider:provider-1")), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "next_url": null, - "resources": [] - }`, - }, - }) - }) - It("returns a ModelNotFoundError", func() { - offering, err := repo.FindServiceOfferingByLabelAndProvider("offering-1", "provider-1") - - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - Expect(offering.Guid).To(Equal("")) - }) - }) - - It("handles api errors when finding service offerings", func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:offering-1;provider:provider-1")), - Response: testnet.TestResponse{ - Status: 400, - Body: ` - { - "code": 10005, - "description": "The query parameter is invalid" - }`}}) - - _, err := repo.FindServiceOfferingByLabelAndProvider("offering-1", "provider-1") - Expect(err).To(HaveOccurred()) - Expect(err.(errors.HttpError).ErrorCode()).To(Equal("10005")) - }) - }) - - Describe("FindServiceOfferingsByLabel", func() { - Context("when the service offering can be found", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "offering-1", - "provider": "provider-1", - "description": "offering 1 description", - "version" : "1.0", - "service_plans": [], - "service_broker_guid": "broker-1-guid" - } - } - ] - }`}}) - }) - - It("finds service offerings by label", func() { - offerings, err := repo.FindServiceOfferingsByLabel("offering-1") - Expect(offerings[0].Guid).To(Equal("offering-1-guid")) - Expect(offerings[0].Label).To(Equal("offering-1")) - Expect(offerings[0].Provider).To(Equal("provider-1")) - Expect(offerings[0].Description).To(Equal("offering 1 description")) - Expect(offerings[0].Version).To(Equal("1.0")) - Expect(offerings[0].BrokerGuid).To(Equal("broker-1-guid")) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when the service offering cannot be found", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "next_url": null, - "resources": [] - }`, - }, - }) - }) - - It("returns a ModelNotFoundError", func() { - offerings, err := repo.FindServiceOfferingsByLabel("offering-1") - - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - Expect(offerings).To(Equal(models.ServiceOfferings{})) - }) - }) - - It("handles api errors when finding service offerings", func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: 400, - Body: ` - { - "code": 10005, - "description": "The query parameter is invalid" - }`}}) - - _, err := repo.FindServiceOfferingsByLabel("offering-1") - Expect(err).To(HaveOccurred()) - Expect(err.(errors.HttpError).ErrorCode()).To(Equal("10005")) - }) - }) - - Describe("GetServiceOfferingByGuid", func() { - Context("when the service offering can be found", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services/offering-1-guid"), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "offering-1", - "provider": "provider-1", - "description": "offering 1 description", - "version" : "1.0", - "service_plans": [], - "service_broker_guid": "broker-1-guid" - } - }`}}) - }) - - It("finds service offerings by guid", func() { - offering, err := repo.GetServiceOfferingByGuid("offering-1-guid") - Expect(offering.Guid).To(Equal("offering-1-guid")) - Expect(offering.Label).To(Equal("offering-1")) - Expect(offering.Provider).To(Equal("provider-1")) - Expect(offering.Description).To(Equal("offering 1 description")) - Expect(offering.Version).To(Equal("1.0")) - Expect(offering.BrokerGuid).To(Equal("broker-1-guid")) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when the service offering cannot be found", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services/offering-1-guid"), - Response: testnet.TestResponse{ - Status: 404, - Body: ` - { - "code": 120003, - "description": "The service could not be found: offering-1-guid", - "error_code": "CF-ServiceNotFound" - }`, - }, - }) - }) - - It("returns a ModelNotFoundError", func() { - offering, err := repo.GetServiceOfferingByGuid("offering-1-guid") - - Expect(err).To(BeAssignableToTypeOf(&errors.HttpNotFoundError{})) - Expect(offering.Guid).To(Equal("")) - }) - }) - }) - - Describe("PurgeServiceOffering", func() { - It("purges service offerings", func() { - setupTestServer(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/services/the-service-guid?purge=true", - Response: testnet.TestResponse{ - Status: 204, - }}) - - offering := maker.NewServiceOffering("the-offering") - offering.Guid = "the-service-guid" - - err := repo.PurgeServiceOffering(offering) - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("getting the count of service instances for a service plan", func() { - var planGuid = "abc123" - - It("returns the number of service instances", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/service_plans/%s/service_instances?results-per-page=1", planGuid), - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "total_results": 9, - "total_pages": 9, - "prev_url": null, - "next_url": "/v2/service_plans/abc123/service_instances?page=2&results-per-page=1", - "resources": [ - { - "metadata": { - "guid": "def456", - "url": "/v2/service_instances/def456", - "created_at": "2013-06-06T02:42:55+00:00", - "updated_at": null - }, - "entity": { - "name": "pet-db", - "credentials": { "name": "the_name" }, - "service_plan_guid": "abc123", - "space_guid": "ghi789", - "dashboard_url": "https://example.com/dashboard", - "type": "managed_service_instance", - "space_url": "/v2/spaces/ghi789", - "service_plan_url": "/v2/service_plans/abc123", - "service_bindings_url": "/v2/service_instances/def456/service_bindings" - } - } - ] - } - `}, - })) - - count, err := repo.GetServiceInstanceCountForServicePlan(planGuid) - Expect(count).To(Equal(9)) - Expect(err).NotTo(HaveOccurred()) - }) - - It("returns the API error when one occurs", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/service_plans/%s/service_instances?results-per-page=1", planGuid), - Response: testnet.TestResponse{Status: http.StatusInternalServerError}, - })) - - _, err := repo.GetServiceInstanceCountForServicePlan(planGuid) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe("finding a service plan", func() { - var planDescription resources.ServicePlanDescription - - Context("when the service is a v1 service", func() { - BeforeEach(func() { - planDescription = resources.ServicePlanDescription{ - ServiceLabel: "v1-elephantsql", - ServicePlanName: "v1-panda", - ServiceProvider: "v1-elephantsql", - } - - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", url.QueryEscape("label:v1-elephantsql;provider:v1-elephantsql")), - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "v1-elephantsql", - "provider": "v1-elephantsql", - "description": "Offering 1 description", - "version" : "1.0", - "service_plans": [ - { - "metadata": {"guid": "offering-1-plan-1-guid"}, - "entity": {"name": "not-the-plan-youre-looking-for"} - }, - { - "metadata": {"guid": "offering-1-plan-2-guid"}, - "entity": {"name": "v1-panda"} - } - ] - } - } - ] - }`}})) - }) - - It("returns the plan guid for a v1 plan", func() { - guid, err := repo.FindServicePlanByDescription(planDescription) - - Expect(guid).To(Equal("offering-1-plan-2-guid")) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when the service is a v2 service", func() { - BeforeEach(func() { - planDescription = resources.ServicePlanDescription{ - ServiceLabel: "v2-elephantsql", - ServicePlanName: "v2-panda", - } - - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", url.QueryEscape("label:v2-elephantsql;provider:")), - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "v2-elephantsql", - "provider": null, - "description": "Offering 1 description", - "version" : "1.0", - "service_plans": [ - { - "metadata": {"guid": "offering-1-plan-1-guid"}, - "entity": {"name": "not-the-plan-youre-looking-for"} - }, - { - "metadata": {"guid": "offering-1-plan-2-guid"}, - "entity": {"name": "v2-panda"} - } - ] - } - } - ] - }`}})) - }) - - It("returns the plan guid for a v2 plan", func() { - guid, err := repo.FindServicePlanByDescription(planDescription) - Expect(err).NotTo(HaveOccurred()) - Expect(guid).To(Equal("offering-1-plan-2-guid")) - }) - }) - - Context("when no service matches the description", func() { - BeforeEach(func() { - planDescription = resources.ServicePlanDescription{ - ServiceLabel: "v2-service-label", - ServicePlanName: "v2-plan-name", - } - - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", url.QueryEscape("label:v2-service-label;provider:")), - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{ "resources": [] }`}, - })) - }) - - It("returns an error", func() { - _, err := repo.FindServicePlanByDescription(planDescription) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - Expect(err.Error()).To(ContainSubstring("Plan")) - Expect(err.Error()).To(ContainSubstring("v2-service-label v2-plan-name")) - }) - }) - - Context("when the described service has no matching plan", func() { - BeforeEach(func() { - planDescription = resources.ServicePlanDescription{ - ServiceLabel: "v2-service-label", - ServicePlanName: "v2-plan-name", - } - - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", url.QueryEscape("label:v2-service-label;provider:")), - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "v2-elephantsql", - "provider": null, - "description": "Offering 1 description", - "version" : "1.0", - "service_plans": [ - { - "metadata": {"guid": "offering-1-plan-1-guid"}, - "entity": {"name": "not-the-plan-youre-looking-for"} - }, - { - "metadata": {"guid": "offering-1-plan-2-guid"}, - "entity": {"name": "also-not-the-plan-youre-looking-for"} - } - ] - } - } - ] - }`}})) - }) - - It("returns a ModelNotFoundError", func() { - _, err := repo.FindServicePlanByDescription(planDescription) - - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - Expect(err.Error()).To(ContainSubstring("Plan")) - Expect(err.Error()).To(ContainSubstring("v2-service-label v2-plan-name")) - }) - }) - - Context("when we get an HTTP error", func() { - BeforeEach(func() { - planDescription = resources.ServicePlanDescription{ - ServiceLabel: "v2-service-label", - ServicePlanName: "v2-plan-name", - } - - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", url.QueryEscape("label:v2-service-label;provider:")), - Response: testnet.TestResponse{ - Status: http.StatusInternalServerError, - }})) - }) - - It("returns an error", func() { - _, err := repo.FindServicePlanByDescription(planDescription) - - Expect(err).To(HaveOccurred()) - Expect(err).To(BeAssignableToTypeOf(errors.NewHttpError(500, "", ""))) - }) - }) - }) - - Describe("migrating service plans", func() { - It("makes a request to CC to migrate the instances from v1 to v2", func() { - setupTestServer(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_plans/v1-guid/service_instances", - Matcher: testnet.RequestBodyMatcher(`{"service_plan_guid":"v2-guid"}`), - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"changed_count":3}`}, - }) - - changedCount, err := repo.MigrateServicePlanFromV1ToV2("v1-guid", "v2-guid") - Expect(err).NotTo(HaveOccurred()) - Expect(changedCount).To(Equal(3)) - }) - - It("returns an error when migrating fails", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/service_plans/v1-guid/service_instances", - Matcher: testnet.RequestBodyMatcher(`{"service_plan_guid":"v2-guid"}`), - Response: testnet.TestResponse{Status: http.StatusInternalServerError}, - })) - - _, err := repo.MigrateServicePlanFromV1ToV2("v1-guid", "v2-guid") - Expect(err).To(HaveOccurred()) - }) - }) - - Describe("FindServiceOfferingsForSpaceByLabel", func() { - It("finds service offerings within a space by label", func() { - setupTestServer( - testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "next_url": "/v2/spaces/my-space-guid/services?q=label%3Aoffering-1&page=2", - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "offering-1", - "provider": "provider-1", - "description": "offering 1 description", - "version" : "1.0" - } - } - ] - }`}}, - testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: 200, - Body: ` - { - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "offering-2-guid" - }, - "entity": { - "label": "offering-2", - "provider": "provider-2", - "description": "offering 2 description", - "version" : "1.0" - } - } - ] - }`}}) - - offerings, err := repo.FindServiceOfferingsForSpaceByLabel("my-space-guid", "offering-1") - Expect(err).ToNot(HaveOccurred()) - Expect(offerings).To(HaveLen(2)) - Expect(offerings[0].Guid).To(Equal("offering-1-guid")) - }) - - It("returns an error if the offering cannot be found", func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": null, - "resources": [] - }`, - }, - }) - - offerings, err := repo.FindServiceOfferingsForSpaceByLabel("my-space-guid", "offering-1") - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - Expect(offerings).To(HaveLen(0)) - }) - - It("handles api errors when finding service offerings", func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services?q=%s", url.QueryEscape("label:offering-1")), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{ - "code": 9001, - "description": "Something Happened" - }`, - }, - }) - - _, err := repo.FindServiceOfferingsForSpaceByLabel("my-space-guid", "offering-1") - Expect(err).To(BeAssignableToTypeOf(errors.NewHttpError(400, "", ""))) - }) - - Describe("when api returns query by label is invalid", func() { - It("makes a backwards-compatible request", func() { - failedRequestByQueryLabel := testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services?q=%s", url.QueryEscape("label:my-service-offering")), - Response: testnet.TestResponse{ - Status: http.StatusBadRequest, - Body: `{"code": 10005,"description": "The query parameter is invalid"}`, - }, - } - - firstPaginatedRequest := testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services"), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/spaces/my-space-guid/services?page=2", - "resources": [ - { - "metadata": { - "guid": "my-service-offering-guid" - }, - "entity": { - "label": "my-service-offering", - "provider": "some-other-provider", - "description": "a description that does not match your provider", - "version" : "1.0" - } - } - ] - }`, - }, - } - - secondPaginatedRequest := testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/spaces/my-space-guid/services"), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"next_url": null, - "resources": [ - { - "metadata": { - "guid": "my-service-offering-guid" - }, - "entity": { - "label": "my-service-offering", - "provider": "my-provider", - "description": "offering 1 description", - "version" : "1.0" - } - } - ]}`, - }, - } - - setupTestServer(failedRequestByQueryLabel, firstPaginatedRequest, secondPaginatedRequest) - - serviceOfferings, err := repo.FindServiceOfferingsForSpaceByLabel("my-space-guid", "my-service-offering") - Expect(err).NotTo(HaveOccurred()) - Expect(len(serviceOfferings)).To(Equal(2)) - }) - }) - }) -}) - -var firstOfferingsResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/services?page=2", - "resources": [ - { - "metadata": { - "guid": "first-offering-1-guid" - }, - "entity": { - "label": "first-Offering 1", - "provider": "Offering 1 provider", - "description": "first Offering 1 description", - "version" : "1.0" - } - } - ]}`, -} - -var firstOfferingsForSpaceResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "next_url": "/v2/spaces/my-space-guid/services?inline-relations-depth=1&page=2", - "resources": [ - { - "metadata": { - "guid": "first-offering-1-guid" - }, - "entity": { - "label": "first-Offering 1", - "provider": "Offering 1 provider", - "description": "first Offering 1 description", - "version" : "1.0" - } - } - ]}`, -} - -var multipleOfferingsResponse = testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "offering-1-guid" - }, - "entity": { - "label": "Offering 1", - "provider": "Offering 1 provider", - "description": "Offering 1 description", - "version" : "1.0" - } - }, - { - "metadata": { - "guid": "offering-2-guid" - }, - "entity": { - "label": "Offering 2", - "provider": "Offering 2 provider", - "description": "Offering 2 description", - "version" : "1.5" - } - } - ]}`, -} - -var serviceOfferingReq = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/services/the-service-guid", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - { - "metadata": { - "guid": "15790581-a293-489b-9efc-847ecf1b1339" - }, - "entity": { - "label": "mysql", - "provider": "mysql", - "documentation_url": "http://info.example.com", - "description": "MySQL database" - } - }`, - }}) - -var findServiceInstanceReq = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/service_instances?return_user_provided_service_instances=true&q=name%3Amy-service", - Response: testnet.TestResponse{Status: http.StatusOK, Body: ` - {"resources": [ - { - "metadata": { - "guid": "my-service-instance-guid" - }, - "entity": { - "name": "my-service", - "dashboard_url":"my-dashboard-url", - "service_bindings": [ - { - "metadata": { - "guid": "service-binding-1-guid", - "url": "/v2/service_bindings/service-binding-1-guid" - }, - "entity": { - "app_guid": "app-1-guid" - } - }, - { - "metadata": { - "guid": "service-binding-2-guid", - "url": "/v2/service_bindings/service-binding-2-guid" - }, - "entity": { - "app_guid": "app-2-guid" - } - } - ], - "service_plan": { - "metadata": { - "guid": "plan-guid" - }, - "entity": { - "name": "plan-name", - "service_guid": "the-service-guid" - } - } - } - } - ]}`}}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/fakes/fake_space_quota_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/fakes/fake_space_quota_repository.go deleted file mode 100644 index 97eb0e9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/fakes/fake_space_quota_repository.go +++ /dev/null @@ -1,335 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/models" - "sync" -) - -type FakeSpaceQuotaRepository struct { - FindByNameStub func(name string) (quota models.SpaceQuota, apiErr error) - findByNameMutex sync.RWMutex - findByNameArgsForCall []struct { - arg1 string - } - findByNameReturns struct { - result1 models.SpaceQuota - result2 error - } - FindByOrgStub func(guid string) (quota []models.SpaceQuota, apiErr error) - findByOrgMutex sync.RWMutex - findByOrgArgsForCall []struct { - arg1 string - } - findByOrgReturns struct { - result1 []models.SpaceQuota - result2 error - } - FindByGuidStub func(guid string) (quota models.SpaceQuota, apiErr error) - findByGuidMutex sync.RWMutex - findByGuidArgsForCall []struct { - arg1 string - } - findByGuidReturns struct { - result1 models.SpaceQuota - result2 error - } - AssociateSpaceWithQuotaStub func(spaceGuid string, quotaGuid string) error - associateSpaceWithQuotaMutex sync.RWMutex - associateSpaceWithQuotaArgsForCall []struct { - arg1 string - arg2 string - } - associateSpaceWithQuotaReturns struct { - result1 error - } - UnassignQuotaFromSpaceStub func(spaceGuid string, quotaGuid string) error - unassignQuotaFromSpaceMutex sync.RWMutex - unassignQuotaFromSpaceArgsForCall []struct { - arg1 string - arg2 string - } - unassignQuotaFromSpaceReturns struct { - result1 error - } - CreateStub func(quota models.SpaceQuota) error - createMutex sync.RWMutex - createArgsForCall []struct { - arg1 models.SpaceQuota - } - createReturns struct { - result1 error - } - UpdateStub func(quota models.SpaceQuota) error - updateMutex sync.RWMutex - updateArgsForCall []struct { - arg1 models.SpaceQuota - } - updateReturns struct { - result1 error - } - DeleteStub func(quotaGuid string) error - deleteMutex sync.RWMutex - deleteArgsForCall []struct { - arg1 string - } - deleteReturns struct { - result1 error - } -} - -func (fake *FakeSpaceQuotaRepository) FindByName(arg1 string) (quota models.SpaceQuota, apiErr error) { - fake.findByNameMutex.Lock() - defer fake.findByNameMutex.Unlock() - fake.findByNameArgsForCall = append(fake.findByNameArgsForCall, struct { - arg1 string - }{arg1}) - if fake.FindByNameStub != nil { - return fake.FindByNameStub(arg1) - } else { - return fake.findByNameReturns.result1, fake.findByNameReturns.result2 - } -} - -func (fake *FakeSpaceQuotaRepository) FindByNameCallCount() int { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return len(fake.findByNameArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) FindByNameArgsForCall(i int) string { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return fake.findByNameArgsForCall[i].arg1 -} - -func (fake *FakeSpaceQuotaRepository) FindByNameReturns(result1 models.SpaceQuota, result2 error) { - fake.findByNameReturns = struct { - result1 models.SpaceQuota - result2 error - }{result1, result2} -} - -func (fake *FakeSpaceQuotaRepository) FindByOrg(arg1 string) (quota []models.SpaceQuota, apiErr error) { - fake.findByOrgMutex.Lock() - defer fake.findByOrgMutex.Unlock() - fake.findByOrgArgsForCall = append(fake.findByOrgArgsForCall, struct { - arg1 string - }{arg1}) - if fake.FindByOrgStub != nil { - return fake.FindByOrgStub(arg1) - } else { - return fake.findByOrgReturns.result1, fake.findByOrgReturns.result2 - } -} - -func (fake *FakeSpaceQuotaRepository) FindByOrgCallCount() int { - fake.findByOrgMutex.RLock() - defer fake.findByOrgMutex.RUnlock() - return len(fake.findByOrgArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) FindByOrgArgsForCall(i int) string { - fake.findByOrgMutex.RLock() - defer fake.findByOrgMutex.RUnlock() - return fake.findByOrgArgsForCall[i].arg1 -} - -func (fake *FakeSpaceQuotaRepository) FindByOrgReturns(result1 []models.SpaceQuota, result2 error) { - fake.findByOrgReturns = struct { - result1 []models.SpaceQuota - result2 error - }{result1, result2} -} - -func (fake *FakeSpaceQuotaRepository) FindByGuid(arg1 string) (quota models.SpaceQuota, apiErr error) { - fake.findByGuidMutex.Lock() - defer fake.findByGuidMutex.Unlock() - fake.findByGuidArgsForCall = append(fake.findByGuidArgsForCall, struct { - arg1 string - }{arg1}) - if fake.FindByGuidStub != nil { - return fake.FindByGuidStub(arg1) - } else { - return fake.findByGuidReturns.result1, fake.findByGuidReturns.result2 - } -} - -func (fake *FakeSpaceQuotaRepository) FindByGuidCallCount() int { - fake.findByGuidMutex.RLock() - defer fake.findByGuidMutex.RUnlock() - return len(fake.findByGuidArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) FindByGuidArgsForCall(i int) string { - fake.findByGuidMutex.RLock() - defer fake.findByGuidMutex.RUnlock() - return fake.findByGuidArgsForCall[i].arg1 -} - -func (fake *FakeSpaceQuotaRepository) FindByGuidReturns(result1 models.SpaceQuota, result2 error) { - fake.findByGuidReturns = struct { - result1 models.SpaceQuota - result2 error - }{result1, result2} -} - -func (fake *FakeSpaceQuotaRepository) AssociateSpaceWithQuota(arg1 string, arg2 string) error { - fake.associateSpaceWithQuotaMutex.Lock() - defer fake.associateSpaceWithQuotaMutex.Unlock() - fake.associateSpaceWithQuotaArgsForCall = append(fake.associateSpaceWithQuotaArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.AssociateSpaceWithQuotaStub != nil { - return fake.AssociateSpaceWithQuotaStub(arg1, arg2) - } else { - return fake.associateSpaceWithQuotaReturns.result1 - } -} - -func (fake *FakeSpaceQuotaRepository) AssociateSpaceWithQuotaCallCount() int { - fake.associateSpaceWithQuotaMutex.RLock() - defer fake.associateSpaceWithQuotaMutex.RUnlock() - return len(fake.associateSpaceWithQuotaArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) AssociateSpaceWithQuotaArgsForCall(i int) (string, string) { - fake.associateSpaceWithQuotaMutex.RLock() - defer fake.associateSpaceWithQuotaMutex.RUnlock() - return fake.associateSpaceWithQuotaArgsForCall[i].arg1, fake.associateSpaceWithQuotaArgsForCall[i].arg2 -} - -func (fake *FakeSpaceQuotaRepository) AssociateSpaceWithQuotaReturns(result1 error) { - fake.associateSpaceWithQuotaReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSpaceQuotaRepository) UnassignQuotaFromSpace(arg1 string, arg2 string) error { - fake.unassignQuotaFromSpaceMutex.Lock() - defer fake.unassignQuotaFromSpaceMutex.Unlock() - fake.unassignQuotaFromSpaceArgsForCall = append(fake.unassignQuotaFromSpaceArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.UnassignQuotaFromSpaceStub != nil { - return fake.UnassignQuotaFromSpaceStub(arg1, arg2) - } else { - return fake.unassignQuotaFromSpaceReturns.result1 - } -} - -func (fake *FakeSpaceQuotaRepository) UnassignQuotaFromSpaceCallCount() int { - fake.unassignQuotaFromSpaceMutex.RLock() - defer fake.unassignQuotaFromSpaceMutex.RUnlock() - return len(fake.unassignQuotaFromSpaceArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) UnassignQuotaFromSpaceArgsForCall(i int) (string, string) { - fake.unassignQuotaFromSpaceMutex.RLock() - defer fake.unassignQuotaFromSpaceMutex.RUnlock() - return fake.unassignQuotaFromSpaceArgsForCall[i].arg1, fake.unassignQuotaFromSpaceArgsForCall[i].arg2 -} - -func (fake *FakeSpaceQuotaRepository) UnassignQuotaFromSpaceReturns(result1 error) { - fake.unassignQuotaFromSpaceReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSpaceQuotaRepository) Create(arg1 models.SpaceQuota) error { - fake.createMutex.Lock() - defer fake.createMutex.Unlock() - fake.createArgsForCall = append(fake.createArgsForCall, struct { - arg1 models.SpaceQuota - }{arg1}) - if fake.CreateStub != nil { - return fake.CreateStub(arg1) - } else { - return fake.createReturns.result1 - } -} - -func (fake *FakeSpaceQuotaRepository) CreateCallCount() int { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return len(fake.createArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) CreateArgsForCall(i int) models.SpaceQuota { - fake.createMutex.RLock() - defer fake.createMutex.RUnlock() - return fake.createArgsForCall[i].arg1 -} - -func (fake *FakeSpaceQuotaRepository) CreateReturns(result1 error) { - fake.createReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSpaceQuotaRepository) Update(arg1 models.SpaceQuota) error { - fake.updateMutex.Lock() - defer fake.updateMutex.Unlock() - fake.updateArgsForCall = append(fake.updateArgsForCall, struct { - arg1 models.SpaceQuota - }{arg1}) - if fake.UpdateStub != nil { - return fake.UpdateStub(arg1) - } else { - return fake.updateReturns.result1 - } -} - -func (fake *FakeSpaceQuotaRepository) UpdateCallCount() int { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return len(fake.updateArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) UpdateArgsForCall(i int) models.SpaceQuota { - fake.updateMutex.RLock() - defer fake.updateMutex.RUnlock() - return fake.updateArgsForCall[i].arg1 -} - -func (fake *FakeSpaceQuotaRepository) UpdateReturns(result1 error) { - fake.updateReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeSpaceQuotaRepository) Delete(arg1 string) error { - fake.deleteMutex.Lock() - defer fake.deleteMutex.Unlock() - fake.deleteArgsForCall = append(fake.deleteArgsForCall, struct { - arg1 string - }{arg1}) - if fake.DeleteStub != nil { - return fake.DeleteStub(arg1) - } else { - return fake.deleteReturns.result1 - } -} - -func (fake *FakeSpaceQuotaRepository) DeleteCallCount() int { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return len(fake.deleteArgsForCall) -} - -func (fake *FakeSpaceQuotaRepository) DeleteArgsForCall(i int) string { - fake.deleteMutex.RLock() - defer fake.deleteMutex.RUnlock() - return fake.deleteArgsForCall[i].arg1 -} - -func (fake *FakeSpaceQuotaRepository) DeleteReturns(result1 error) { - fake.deleteReturns = struct { - result1 error - }{result1} -} - -var _ SpaceQuotaRepository = new(FakeSpaceQuotaRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas.go deleted file mode 100644 index 1916fdc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas.go +++ /dev/null @@ -1,118 +0,0 @@ -package space_quotas - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type SpaceQuotaRepository interface { - FindByName(name string) (quota models.SpaceQuota, apiErr error) - FindByOrg(guid string) (quota []models.SpaceQuota, apiErr error) - FindByGuid(guid string) (quota models.SpaceQuota, apiErr error) - - AssociateSpaceWithQuota(spaceGuid string, quotaGuid string) error - UnassignQuotaFromSpace(spaceGuid string, quotaGuid string) error - - // CRUD ahoy - Create(quota models.SpaceQuota) error - Update(quota models.SpaceQuota) error - Delete(quotaGuid string) error -} - -type CloudControllerSpaceQuotaRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerSpaceQuotaRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerSpaceQuotaRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerSpaceQuotaRepository) findAllWithPath(path string) ([]models.SpaceQuota, error) { - var quotas []models.SpaceQuota - apiErr := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.SpaceQuotaResource{}, - func(resource interface{}) bool { - if qr, ok := resource.(resources.SpaceQuotaResource); ok { - quotas = append(quotas, qr.ToModel()) - } - return true - }) - return quotas, apiErr -} - -func (repo CloudControllerSpaceQuotaRepository) FindByName(name string) (quota models.SpaceQuota, apiErr error) { - quotas, apiErr := repo.FindByOrg(repo.config.OrganizationFields().Guid) - if apiErr != nil { - return - } - - for _, quota := range quotas { - if quota.Name == name { - return quota, nil - } - } - - apiErr = errors.NewModelNotFoundError("Space Quota", name) - return models.SpaceQuota{}, apiErr -} - -func (repo CloudControllerSpaceQuotaRepository) FindByOrg(guid string) ([]models.SpaceQuota, error) { - path := fmt.Sprintf("/v2/organizations/%s/space_quota_definitions", guid) - quotas, apiErr := repo.findAllWithPath(path) - if apiErr != nil { - return nil, apiErr - } - return quotas, nil -} - -func (repo CloudControllerSpaceQuotaRepository) FindByGuid(guid string) (quota models.SpaceQuota, apiErr error) { - quotas, apiErr := repo.FindByOrg(repo.config.OrganizationFields().Guid) - if apiErr != nil { - return - } - - for _, quota := range quotas { - if quota.Guid == guid { - return quota, nil - } - } - - apiErr = errors.NewModelNotFoundError("Space Quota", guid) - return models.SpaceQuota{}, apiErr -} - -func (repo CloudControllerSpaceQuotaRepository) Create(quota models.SpaceQuota) error { - path := "/v2/space_quota_definitions" - return repo.gateway.CreateResourceFromStruct(repo.config.ApiEndpoint(), path, quota) -} - -func (repo CloudControllerSpaceQuotaRepository) Update(quota models.SpaceQuota) error { - path := fmt.Sprintf("/v2/space_quota_definitions/%s", quota.Guid) - return repo.gateway.UpdateResourceFromStruct(repo.config.ApiEndpoint(), path, quota) -} - -func (repo CloudControllerSpaceQuotaRepository) AssociateSpaceWithQuota(spaceGuid string, quotaGuid string) error { - path := fmt.Sprintf("/v2/space_quota_definitions/%s/spaces/%s", quotaGuid, spaceGuid) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader("")) -} - -func (repo CloudControllerSpaceQuotaRepository) UnassignQuotaFromSpace(spaceGuid string, quotaGuid string) error { - path := fmt.Sprintf("/v2/space_quota_definitions/%s/spaces/%s", quotaGuid, spaceGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} - -func (repo CloudControllerSpaceQuotaRepository) Delete(quotaGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/space_quota_definitions/%s", quotaGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas_suite_test.go deleted file mode 100644 index d85a8be..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package space_quotas_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSpaceQuotas(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "SpaceQuotas Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas_test.go deleted file mode 100644 index 833a024..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/space_quotas/space_quotas_test.go +++ /dev/null @@ -1,321 +0,0 @@ -package space_quotas_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/space_quotas" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CloudControllerQuotaRepository", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo CloudControllerSpaceQuotaRepository - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerSpaceQuotaRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe("FindByName", func() { - BeforeEach(func() { - setupTestServer(firstSpaceQuotaRequest, secondSpaceQuotaRequest) - }) - - It("Finds Quota definitions by name", func() { - quota, err := repo.FindByName("my-remote-quota") - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(quota).To(Equal(models.SpaceQuota{ - Guid: "my-quota-guid", - Name: "my-remote-quota", - MemoryLimit: 1024, - RoutesLimit: 123, - ServicesLimit: 321, - NonBasicServicesAllowed: true, - OrgGuid: "my-org-guid", - })) - }) - - It("Returns an error if the quota cannot be found", func() { - _, err := repo.FindByName("totally-not-a-quota") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - }) - - Describe("FindByOrg", func() { - BeforeEach(func() { - setupTestServer(firstSpaceQuotaRequest, secondSpaceQuotaRequest) - }) - - It("finds all quota definitions by org guid", func() { - quotas, err := repo.FindByOrg("my-org-guid") - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(len(quotas)).To(Equal(3)) - Expect(quotas[0].Guid).To(Equal("my-quota-guid")) - Expect(quotas[0].Name).To(Equal("my-remote-quota")) - Expect(quotas[0].MemoryLimit).To(Equal(int64(1024))) - Expect(quotas[0].RoutesLimit).To(Equal(123)) - Expect(quotas[0].ServicesLimit).To(Equal(321)) - Expect(quotas[0].OrgGuid).To(Equal("my-org-guid")) - - Expect(quotas[1].Guid).To(Equal("my-quota-guid2")) - Expect(quotas[1].OrgGuid).To(Equal("my-org-guid")) - Expect(quotas[2].Guid).To(Equal("my-quota-guid3")) - Expect(quotas[2].OrgGuid).To(Equal("my-org-guid")) - }) - }) - - Describe("FindByGuid", func() { - BeforeEach(func() { - setupTestServer(firstSpaceQuotaRequest, secondSpaceQuotaRequest) - }) - - It("Finds Quota definitions by Guid", func() { - quota, err := repo.FindByGuid("my-quota-guid") - - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(quota).To(Equal(models.SpaceQuota{ - Guid: "my-quota-guid", - Name: "my-remote-quota", - MemoryLimit: 1024, - RoutesLimit: 123, - ServicesLimit: 321, - NonBasicServicesAllowed: true, - OrgGuid: "my-org-guid", - })) - }) - It("Returns an error if the quota cannot be found", func() { - _, err := repo.FindByGuid("totally-not-a-quota-guid") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err.(*errors.ModelNotFoundError)).NotTo(BeNil()) - }) - }) - - Describe("AssociateSpaceWithQuota", func() { - It("sets the quota for a space", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/space_quota_definitions/my-quota-guid/spaces/my-space-guid", - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - setupTestServer(req) - - err := repo.AssociateSpaceWithQuota("my-space-guid", "my-quota-guid") - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Describe("UnassignQuotaFromSpace", func() { - It("deletes the association between the quota and the space", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/space_quota_definitions/my-quota-guid/spaces/my-space-guid", - Response: testnet.TestResponse{Status: http.StatusNoContent}, - }) - setupTestServer(req) - - err := repo.UnassignQuotaFromSpace("my-space-guid", "my-quota-guid") - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("Create", func() { - It("creates a new quota with the given name", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/space_quota_definitions", - Matcher: testnet.RequestBodyMatcher(`{ - "name": "not-so-strict", - "non_basic_services_allowed": false, - "total_services": 1, - "total_routes": 12, - "memory_limit": 123, - "instance_memory_limit": 0, - "organization_guid": "my-org-guid" - }`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - setupTestServer(req) - - quota := models.SpaceQuota{ - Name: "not-so-strict", - ServicesLimit: 1, - RoutesLimit: 12, - MemoryLimit: 123, - OrgGuid: "my-org-guid", - } - err := repo.Create(quota) - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("Update", func() { - It("updates an existing quota", func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/space_quota_definitions/my-quota-guid", - Matcher: testnet.RequestBodyMatcher(`{ - "guid": "my-quota-guid", - "non_basic_services_allowed": false, - "name": "amazing-quota", - "total_services": 1, - "total_routes": 12, - "memory_limit": 123, - "instance_memory_limit": 1234, - "organization_guid": "myorgguid" - }`), - })) - - quota := models.SpaceQuota{ - Guid: "my-quota-guid", - Name: "amazing-quota", - NonBasicServicesAllowed: false, - ServicesLimit: 1, - RoutesLimit: 12, - MemoryLimit: 123, - InstanceMemoryLimit: 1234, - OrgGuid: "myorgguid", - } - - err := repo.Update(quota) - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) - - Describe("Delete", func() { - It("deletes the quota with the given name", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/space_quota_definitions/my-quota-guid", - Response: testnet.TestResponse{Status: http.StatusNoContent}, - }) - setupTestServer(req) - - err := repo.Delete("my-quota-guid") - Expect(err).NotTo(HaveOccurred()) - Expect(testHandler).To(HaveAllRequestsCalled()) - }) - }) -}) - -var firstQuotaRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/space_quota_definitions", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/quota_definitions?page=2", - "resources": [ - { - "metadata": { "guid": "my-quota-guid" }, - "entity": { - "name": "my-remote-quota", - "memory_limit": 1024, - "total_routes": 123, - "total_services": 321, - "non_basic_services_allowed": true, - } - } - ]}`, - }, -}) - -var secondQuotaRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/space_quota_definitions?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "resources": [ - { - "metadata": { "guid": "my-quota-guid2" }, - "entity": { "name": "my-remote-quota2", "memory_limit": 1024 } - }, - { - "metadata": { "guid": "my-quota-guid3" }, - "entity": { "name": "my-remote-quota3", "memory_limit": 1024 } - } - ]}`, - }, -}) - -var firstSpaceQuotaRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/space_quota_definitions", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/organizations/my-org-guid/space_quota_definitions?page=2", - "resources": [ - { - "metadata": { "guid": "my-quota-guid" }, - "entity": { - "name": "my-remote-quota", - "memory_limit": 1024, - "total_routes": 123, - "total_services": 321, - "non_basic_services_allowed": true, - "organization_guid": "my-org-guid" - } - } - ]}`, - }, -}) - -var secondSpaceQuotaRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/space_quota_definitions?page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "resources": [ - { - "metadata": { "guid": "my-quota-guid2" }, - "entity": { "name": "my-remote-quota2", "memory_limit": 1024, "organization_guid": "my-org-guid" } - }, - { - "metadata": { "guid": "my-quota-guid3" }, - "entity": { "name": "my-remote-quota3", "memory_limit": 1024, "organization_guid": "my-org-guid" } - } - ]}`, - }, -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces.go deleted file mode 100644 index 4ce4486..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces.go +++ /dev/null @@ -1,100 +0,0 @@ -package spaces - -import ( - "encoding/json" - "fmt" - "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type SpaceRepository interface { - ListSpaces(func(models.Space) bool) error - FindByName(name string) (space models.Space, apiErr error) - FindByNameInOrg(name, orgGuid string) (space models.Space, apiErr error) - Create(name string, orgGuid string, spaceQuotaGuid string) (space models.Space, apiErr error) - Rename(spaceGuid, newName string) (apiErr error) - Delete(spaceGuid string) (apiErr error) -} - -type CloudControllerSpaceRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerSpaceRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerSpaceRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerSpaceRepository) ListSpaces(callback func(models.Space) bool) error { - return repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/organizations/%s/spaces?inline-relations-depth=1", repo.config.OrganizationFields().Guid), - resources.SpaceResource{}, - func(resource interface{}) bool { - return callback(resource.(resources.SpaceResource).ToModel()) - }) -} - -func (repo CloudControllerSpaceRepository) FindByName(name string) (space models.Space, apiErr error) { - return repo.FindByNameInOrg(name, repo.config.OrganizationFields().Guid) -} - -func (repo CloudControllerSpaceRepository) FindByNameInOrg(name, orgGuid string) (space models.Space, apiErr error) { - foundSpace := false - apiErr = repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - fmt.Sprintf("/v2/organizations/%s/spaces?q=%s&inline-relations-depth=1", orgGuid, url.QueryEscape("name:"+strings.ToLower(name))), - resources.SpaceResource{}, - func(resource interface{}) bool { - space = resource.(resources.SpaceResource).ToModel() - foundSpace = true - return false - }) - - if !foundSpace { - apiErr = errors.NewModelNotFoundError("Space", name) - } - - return -} - -func (repo CloudControllerSpaceRepository) Create(name, orgGuid, spaceQuotaGuid string) (space models.Space, apiErr error) { - path := "/v2/spaces?inline-relations-depth=1" - - bodyMap := map[string]string{"name": name, "organization_guid": orgGuid} - if spaceQuotaGuid != "" { - bodyMap["space_quota_definition_guid"] = spaceQuotaGuid - } - - body, apiErr := json.Marshal(bodyMap) - if apiErr != nil { - return - } - - resource := new(resources.SpaceResource) - apiErr = repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, strings.NewReader(string(body)), resource) - if apiErr != nil { - return - } - space = resource.ToModel() - return -} - -func (repo CloudControllerSpaceRepository) Rename(spaceGuid, newName string) (apiErr error) { - path := fmt.Sprintf("/v2/spaces/%s", spaceGuid) - body := fmt.Sprintf(`{"name":"%s"}`, newName) - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(body)) -} - -func (repo CloudControllerSpaceRepository) Delete(spaceGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/spaces/%s?recursive=true", spaceGuid) - return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces_suite_test.go deleted file mode 100644 index 68f9e9f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package spaces_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSpaces(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Spaces Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces_test.go deleted file mode 100644 index 62ac498..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/spaces/spaces_test.go +++ /dev/null @@ -1,331 +0,0 @@ -package spaces_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/spaces" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Space Repository", func() { - It("lists all the spaces", func() { - firstPageSpacesRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/spaces?inline-relations-depth=1", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "next_url": "/v2/organizations/my-org-guid/spaces?inline-relations-depth=1&page=2", - "resources": [ - { - "metadata": { - "guid": "acceptance-space-guid" - }, - "entity": { - "name": "acceptance", - "security_groups": [ - { - "metadata": { - "guid": "4302b3b4-4afc-4f12-ae6d-ed1bb815551f" - }, - "entity": { - "name": "imma-security-group" - } - } - ] - } - } - ] - }`}}) - - secondPageSpacesRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/spaces?inline-relations-depth=1&page=2", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - { - "metadata": { - "guid": "staging-space-guid" - }, - "entity": { - "name": "staging", - "security_groups": [] - } - } - ] - }`}}) - - ts, handler, repo := createSpacesRepo(firstPageSpacesRequest, secondPageSpacesRequest) - defer ts.Close() - - spaces := []models.Space{} - apiErr := repo.ListSpaces(func(space models.Space) bool { - spaces = append(spaces, space) - return true - }) - - Expect(len(spaces)).To(Equal(2)) - Expect(spaces[0].Guid).To(Equal("acceptance-space-guid")) - Expect(spaces[0].SecurityGroups[0].Name).To(Equal("imma-security-group")) - Expect(spaces[1].Guid).To(Equal("staging-space-guid")) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - }) - - Describe("finding spaces by name", func() { - It("returns the space", func() { - testSpacesFindByNameWithOrg("my-org-guid", - func(repo SpaceRepository, spaceName string) (models.Space, error) { - return repo.FindByName(spaceName) - }, - ) - }) - - It("can find spaces in a particular org", func() { - testSpacesFindByNameWithOrg("another-org-guid", - func(repo SpaceRepository, spaceName string) (models.Space, error) { - return repo.FindByNameInOrg(spaceName, "another-org-guid") - }, - ) - }) - - It("returns a 'not found' response when the space doesn't exist", func() { - testSpacesDidNotFindByNameWithOrg("my-org-guid", - func(repo SpaceRepository, spaceName string) (models.Space, error) { - return repo.FindByName(spaceName) - }, - ) - }) - - It("returns a 'not found' response when the space doesn't exist in the given org", func() { - testSpacesDidNotFindByNameWithOrg("another-org-guid", - func(repo SpaceRepository, spaceName string) (models.Space, error) { - return repo.FindByNameInOrg(spaceName, "another-org-guid") - }, - ) - }) - }) - - It("creates spaces without a space-quota", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/spaces", - Matcher: testnet.RequestBodyMatcher(`{"name":"space-name","organization_guid":"my-org-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { - "guid": "space-guid" - }, - "entity": { - "name": "space-name" - } - }`}, - }) - - ts, handler, repo := createSpacesRepo(request) - defer ts.Close() - - space, apiErr := repo.Create("space-name", "my-org-guid", "") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(space.Guid).To(Equal("space-guid")) - Expect(space.SpaceQuotaGuid).To(Equal("")) - }) - - It("creates spaces with a space-quota", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/spaces", - Matcher: testnet.RequestBodyMatcher(`{"name":"space-name","organization_guid":"my-org-guid","space_quota_definition_guid":"space-quota-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated, Body: ` - { - "metadata": { - "guid": "space-guid" - }, - "entity": { - "name": "space-name", - "space_quota_definition_guid":"space-quota-guid" - } - }`}, - }) - - ts, handler, repo := createSpacesRepo(request) - defer ts.Close() - - space, apiErr := repo.Create("space-name", "my-org-guid", "space-quota-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(space.Guid).To(Equal("space-guid")) - Expect(space.SpaceQuotaGuid).To(Equal("space-quota-guid")) - }) - - It("renames spaces", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/spaces/my-space-guid", - Matcher: testnet.RequestBodyMatcher(`{"name":"new-space-name"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createSpacesRepo(request) - defer ts.Close() - - apiErr := repo.Rename("my-space-guid", "new-space-name") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("deletes spaces", func() { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/spaces/my-space-guid?recursive=true", - Response: testnet.TestResponse{Status: http.StatusOK}, - }) - - ts, handler, repo := createSpacesRepo(request) - defer ts.Close() - - apiErr := repo.Delete("my-space-guid") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) -}) - -func testSpacesFindByNameWithOrg(orgGuid string, findByName func(SpaceRepository, string) (models.Space, error)) { - findSpaceByNameResponse := testnet.TestResponse{ - Status: http.StatusOK, - Body: ` -{ - "resources": [ - { - "metadata": { - "guid": "space1-guid" - }, - "entity": { - "name": "Space1", - "organization_guid": "org1-guid", - "organization": { - "metadata": { - "guid": "org1-guid" - }, - "entity": { - "name": "Org1" - } - }, - "apps": [ - { - "metadata": { - "guid": "app1-guid" - }, - "entity": { - "name": "app1" - } - }, - { - "metadata": { - "guid": "app2-guid" - }, - "entity": { - "name": "app2" - } - } - ], - "domains": [ - { - "metadata": { - "guid": "domain1-guid" - }, - "entity": { - "name": "domain1" - } - } - ], - "service_instances": [ - { - "metadata": { - "guid": "service1-guid" - }, - "entity": { - "name": "service1" - } - } - ] - } - } - ] -}`} - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/organizations/%s/spaces?q=name%%3Aspace1&inline-relations-depth=1", orgGuid), - Response: findSpaceByNameResponse, - }) - - ts, handler, repo := createSpacesRepo(request) - defer ts.Close() - - space, apiErr := findByName(repo, "Space1") - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(space.Name).To(Equal("Space1")) - Expect(space.Guid).To(Equal("space1-guid")) - - Expect(space.Organization.Guid).To(Equal("org1-guid")) - - Expect(len(space.Applications)).To(Equal(2)) - Expect(space.Applications[0].Guid).To(Equal("app1-guid")) - Expect(space.Applications[1].Guid).To(Equal("app2-guid")) - - Expect(len(space.Domains)).To(Equal(1)) - Expect(space.Domains[0].Guid).To(Equal("domain1-guid")) - - Expect(len(space.ServiceInstances)).To(Equal(1)) - Expect(space.ServiceInstances[0].Guid).To(Equal("service1-guid")) - - Expect(apiErr).NotTo(HaveOccurred()) - return -} - -func testSpacesDidNotFindByNameWithOrg(orgGuid string, findByName func(SpaceRepository, string) (models.Space, error)) { - request := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf("/v2/organizations/%s/spaces?q=name%%3Aspace1&inline-relations-depth=1", orgGuid), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` { "resources": [ ] }`, - }, - }) - - ts, handler, repo := createSpacesRepo(request) - defer ts.Close() - - _, apiErr := findByName(repo, "Space1") - Expect(handler).To(HaveAllRequestsCalled()) - - Expect(apiErr.(*errors.ModelNotFoundError)).NotTo(BeNil()) -} - -func createSpacesRepo(reqs ...testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo SpaceRepository) { - ts, handler = testnet.NewServer(reqs) - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(ts.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerSpaceRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/fakes/fake_stack_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/fakes/fake_stack_repository.go deleted file mode 100644 index 381f8ca..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/fakes/fake_stack_repository.go +++ /dev/null @@ -1,88 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/api/stacks" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeStackRepository struct { - FindByNameStub func(name string) (stack models.Stack, apiErr error) - findByNameMutex sync.RWMutex - findByNameArgsForCall []struct { - name string - } - findByNameReturns struct { - result1 models.Stack - result2 error - } - FindAllStub func() (stacks []models.Stack, apiErr error) - findAllMutex sync.RWMutex - findAllArgsForCall []struct{} - findAllReturns struct { - result1 []models.Stack - result2 error - } -} - -func (fake *FakeStackRepository) FindByName(name string) (stack models.Stack, apiErr error) { - fake.findByNameMutex.Lock() - fake.findByNameArgsForCall = append(fake.findByNameArgsForCall, struct { - name string - }{name}) - fake.findByNameMutex.Unlock() - if fake.FindByNameStub != nil { - return fake.FindByNameStub(name) - } else { - return fake.findByNameReturns.result1, fake.findByNameReturns.result2 - } -} - -func (fake *FakeStackRepository) FindByNameCallCount() int { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return len(fake.findByNameArgsForCall) -} - -func (fake *FakeStackRepository) FindByNameArgsForCall(i int) string { - fake.findByNameMutex.RLock() - defer fake.findByNameMutex.RUnlock() - return fake.findByNameArgsForCall[i].name -} - -func (fake *FakeStackRepository) FindByNameReturns(result1 models.Stack, result2 error) { - fake.FindByNameStub = nil - fake.findByNameReturns = struct { - result1 models.Stack - result2 error - }{result1, result2} -} - -func (fake *FakeStackRepository) FindAll() (stacks []models.Stack, apiErr error) { - fake.findAllMutex.Lock() - fake.findAllArgsForCall = append(fake.findAllArgsForCall, struct{}{}) - fake.findAllMutex.Unlock() - if fake.FindAllStub != nil { - return fake.FindAllStub() - } else { - return fake.findAllReturns.result1, fake.findAllReturns.result2 - } -} - -func (fake *FakeStackRepository) FindAllCallCount() int { - fake.findAllMutex.RLock() - defer fake.findAllMutex.RUnlock() - return len(fake.findAllArgsForCall) -} - -func (fake *FakeStackRepository) FindAllReturns(result1 []models.Stack, result2 error) { - fake.FindAllStub = nil - fake.findAllReturns = struct { - result1 []models.Stack - result2 error - }{result1, result2} -} - -var _ stacks.StackRepository = new(FakeStackRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks.go deleted file mode 100644 index 89746ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks.go +++ /dev/null @@ -1,63 +0,0 @@ -package stacks - -import ( - "fmt" - "net/url" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type StackRepository interface { - FindByName(name string) (stack models.Stack, apiErr error) - FindAll() (stacks []models.Stack, apiErr error) -} - -type CloudControllerStackRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCloudControllerStackRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerStackRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CloudControllerStackRepository) FindByName(name string) (stack models.Stack, apiErr error) { - path := fmt.Sprintf("/v2/stacks?q=%s", url.QueryEscape("name:"+name)) - stacks, apiErr := repo.findAllWithPath(path) - if apiErr != nil { - return - } - - if len(stacks) == 0 { - apiErr = errors.NewModelNotFoundError("Stack", name) - return - } - - stack = stacks[0] - return -} - -func (repo CloudControllerStackRepository) FindAll() (stacks []models.Stack, apiErr error) { - return repo.findAllWithPath("/v2/stacks") -} - -func (repo CloudControllerStackRepository) findAllWithPath(path string) ([]models.Stack, error) { - var stacks []models.Stack - apiErr := repo.gateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.StackResource{}, - func(resource interface{}) bool { - if sr, ok := resource.(resources.StackResource); ok { - stacks = append(stacks, *sr.ToFields()) - } - return true - }) - return stacks, apiErr -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks_suite_test.go deleted file mode 100644 index a7a0b46..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package stacks_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestStacks(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Stacks Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks_test.go deleted file mode 100644 index 86acdad..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/stacks/stacks_test.go +++ /dev/null @@ -1,168 +0,0 @@ -package stacks_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api/stacks" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("StacksRepo", func() { - var ( - testServer *httptest.Server - testHandler *testnet.TestHandler - configRepo core_config.ReadWriter - repo StackRepository - ) - - setupTestServer := func(reqs ...testnet.TestRequest) { - testServer, testHandler = testnet.NewServer(reqs) - configRepo.SetApiEndpoint(testServer.URL) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - configRepo.SetAccessToken("BEARER my_access_token") - - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCloudControllerStackRepository(configRepo, gateway) - }) - - AfterEach(func() { - testServer.Close() - }) - - Describe("FindByName", func() { - Context("when a stack exists", func() { - BeforeEach(func() { - setupTestServer(testnet.TestRequest{ - Method: "GET", - Path: "/v2/stacks?q=name%3Alinux", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - { - "metadata": { "guid": "custom-linux-guid" }, - "entity": { "name": "custom-linux" } - } - ] - }`}}) - }) - - It("finds the stack", func() { - stack, err := repo.FindByName("linux") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(stack).To(Equal(models.Stack{ - Name: "custom-linux", - Guid: "custom-linux-guid", - })) - }) - }) - - Context("when a stack does not exist", func() { - BeforeEach(func() { - setupTestServer(testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/stacks?q=name%3Alinux", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` { "resources": []}`, - }})) - }) - - It("returns an error", func() { - _, err := repo.FindByName("linux") - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - }) - }) - }) - - Describe("FindAll", func() { - BeforeEach(func() { - setupTestServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/stacks", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{ - "next_url": "/v2/stacks?page=2", - "resources": [ - { - "metadata": { - "guid": "stack-guid-1", - "url": "/v2/stacks/stack-guid-1", - "created_at": "2013-08-31 01:32:40 +0000", - "updated_at": "2013-08-31 01:32:40 +0000" - }, - "entity": { - "name": "lucid64", - "description": "Ubuntu 10.04" - } - } - ] - }`}}), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/stacks", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - { - "metadata": { - "guid": "stack-guid-2", - "url": "/v2/stacks/stack-guid-2", - "created_at": "2013-08-31 01:32:40 +0000", - "updated_at": "2013-08-31 01:32:40 +0000" - }, - "entity": { - "name": "lucid64custom", - "description": "Fake Ubuntu 10.04" - } - } - ] - }`}})) - }) - - It("finds all the stacks", func() { - stacks, err := repo.FindAll() - - Expect(testHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - Expect(stacks).To(ConsistOf([]models.Stack{ - { - Guid: "stack-guid-1", - Name: "lucid64", - Description: "Ubuntu 10.04", - }, - { - Guid: "stack-guid-2", - Name: "lucid64custom", - Description: "Fake Ubuntu 10.04", - }, - })) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/domains.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/domains.go deleted file mode 100644 index 7553ebb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/domains.go +++ /dev/null @@ -1,103 +0,0 @@ -package strategy - -type DomainsEndpointStrategy interface { - OrgDomainURL(orgGuid, name string) string - SharedDomainURL(name string) string - PrivateDomainURL(name string) string - OrgDomainsURL(orgGuid string) string - PrivateDomainsURL() string - SharedDomainsURL() string - DeleteDomainURL(guid string) string - DeleteSharedDomainURL(guid string) string - PrivateDomainsByOrgURL(guid string) string -} - -type domainsEndpointStrategy struct{} - -func (s domainsEndpointStrategy) SharedDomainURL(name string) string { - return buildURL(v2("domains"), params{ - inlineRelationsDepth: 1, - q: map[string]string{"name": name}, - }) -} - -func (s domainsEndpointStrategy) PrivateDomainURL(name string) string { - return buildURL(v2("domains"), params{ - inlineRelationsDepth: 1, - q: map[string]string{"name": name}, - }) -} - -func (s domainsEndpointStrategy) OrgDomainsURL(orgGuid string) string { - return v2("organizations", orgGuid, "domains") -} - -func (s domainsEndpointStrategy) OrgDomainURL(orgGuid, name string) string { - return buildURL(s.OrgDomainsURL(orgGuid), params{ - inlineRelationsDepth: 1, - q: map[string]string{"name": name}, - }) -} - -func (s domainsEndpointStrategy) PrivateDomainsURL() string { - return v2("domains") -} - -func (s domainsEndpointStrategy) SharedDomainsURL() string { - return v2("domains") -} - -func (s domainsEndpointStrategy) PrivateDomainsByOrgURL(orgGuid string) string { - return v2("domains") -} - -func (s domainsEndpointStrategy) DeleteDomainURL(guid string) string { - return buildURL(v2("domains", guid), params{recursive: true}) -} - -func (s domainsEndpointStrategy) DeleteSharedDomainURL(guid string) string { - return buildURL(v2("domains", guid), params{recursive: true}) -} - -type separatedDomainsEndpointStrategy struct{} - -func (s separatedDomainsEndpointStrategy) SharedDomainURL(name string) string { - return buildURL(v2("shared_domains"), params{ - q: map[string]string{"name": name}, - }) -} - -func (s separatedDomainsEndpointStrategy) PrivateDomainURL(name string) string { - return buildURL(v2("private_domains"), params{ - q: map[string]string{"name": name}, - }) -} - -func (s separatedDomainsEndpointStrategy) OrgDomainsURL(orgGuid string) string { - return v2("organizations", orgGuid, "private_domains") -} - -func (s separatedDomainsEndpointStrategy) OrgDomainURL(orgGuid, name string) string { - return buildURL(s.OrgDomainsURL(orgGuid), params{ - q: map[string]string{"name": name}, - }) -} -func (s separatedDomainsEndpointStrategy) PrivateDomainsURL() string { - return v2("private_domains") -} - -func (s separatedDomainsEndpointStrategy) SharedDomainsURL() string { - return v2("shared_domains") -} - -func (s separatedDomainsEndpointStrategy) PrivateDomainsByOrgURL(orgGuid string) string { - return v2("organizations", orgGuid, "private_domains") -} - -func (s separatedDomainsEndpointStrategy) DeleteDomainURL(guid string) string { - return buildURL(v2("private_domains", guid), params{recursive: true}) -} - -func (s separatedDomainsEndpointStrategy) DeleteSharedDomainURL(guid string) string { - return buildURL(v2("shared_domains", guid), params{recursive: true}) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/endpoint_strategy.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/endpoint_strategy.go deleted file mode 100644 index 8aa54c2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/endpoint_strategy.go +++ /dev/null @@ -1,25 +0,0 @@ -package strategy - -type EndpointStrategy struct { - EventsEndpointStrategy - DomainsEndpointStrategy -} - -func NewEndpointStrategy(versionString string) EndpointStrategy { - version, err := ParseVersion(versionString) - if err != nil { - version = Version{0, 0, 0} - } - - strategy := EndpointStrategy{ - EventsEndpointStrategy: eventsEndpointStrategy{}, - DomainsEndpointStrategy: domainsEndpointStrategy{}, - } - - if version.GreaterThanOrEqualTo(Version{2, 1, 0}) { - strategy.EventsEndpointStrategy = globalEventsEndpointStrategy{} - strategy.DomainsEndpointStrategy = separatedDomainsEndpointStrategy{} - } - - return strategy -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/endpoint_strategy_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/endpoint_strategy_test.go deleted file mode 100644 index 1446b77..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/endpoint_strategy_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package strategy_test - -import ( - "github.com/cloudfoundry/cli/cf/api/resources" - . "github.com/cloudfoundry/cli/cf/api/strategy" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("EndpointStrategy", func() { - var strategy EndpointStrategy - - Describe("events", func() { - Context("when the veresion string can't be parsed", func() { - BeforeEach(func() { - strategy = NewEndpointStrategy("") - }) - - It("uses the oldest possible strategy", func() { - Expect(strategy.EventsURL("the-guid", 20)).To(Equal("/v2/apps/the-guid/events?results-per-page=20")) - Expect(strategy.EventsResource()).To(BeAssignableToTypeOf(resources.EventResourceOldV2{})) - }) - }) - - Context("when targeting a pre-2.1.0 cloud controller", func() { - BeforeEach(func() { - strategy = NewEndpointStrategy("2.0.0") - }) - - It("returns an appropriate endpoint", func() { - Expect(strategy.EventsURL("the-guid", 20)).To(Equal("/v2/apps/the-guid/events?results-per-page=20")) - }) - - It("returns an old EventResource", func() { - Expect(strategy.EventsResource()).To(BeAssignableToTypeOf(resources.EventResourceOldV2{})) - }) - }) - - Context("when targeting a 2.1.0 cloud controller", func() { - BeforeEach(func() { - strategy = NewEndpointStrategy("2.1.0") - }) - - It("returns an appropriate endpoint", func() { - Expect(strategy.EventsURL("guids-r-us", 42)).To(Equal("/v2/events?order-direction=desc&q=actee%3Aguids-r-us&results-per-page=42")) - }) - - It("returns a new EventResource", func() { - Expect(strategy.EventsResource()).To(BeAssignableToTypeOf(resources.EventResourceNewV2{})) - }) - }) - }) - - Describe("domains", func() { - Context("when targeting a pre-2.1.0 cloud controller", func() { - BeforeEach(func() { - strategy = NewEndpointStrategy("2.0.0") - }) - - It("uses the general domains endpoint", func() { - Expect(strategy.PrivateDomainsURL()).To(Equal("/v2/domains")) - }) - }) - - Context("when targeting a v2.1.0 cloud controller", func() { - BeforeEach(func() { - strategy = NewEndpointStrategy("2.1.0") - }) - - It("uses the private domains endpoint", func() { - Expect(strategy.PrivateDomainsURL()).To(Equal("/v2/private_domains")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/events.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/events.go deleted file mode 100644 index c479370..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/events.go +++ /dev/null @@ -1,34 +0,0 @@ -package strategy - -import "github.com/cloudfoundry/cli/cf/api/resources" - -type EventsEndpointStrategy interface { - EventsURL(appGuid string, limit int64) string - EventsResource() resources.EventResource -} - -type eventsEndpointStrategy struct{} - -func (_ eventsEndpointStrategy) EventsURL(appGuid string, limit int64) string { - return buildURL(v2("apps", appGuid, "events"), params{ - resultsPerPage: limit, - }) -} - -func (_ eventsEndpointStrategy) EventsResource() resources.EventResource { - return resources.EventResourceOldV2{} -} - -type globalEventsEndpointStrategy struct{} - -func (strategy globalEventsEndpointStrategy) EventsURL(appGuid string, limit int64) string { - return buildURL(v2("events"), params{ - resultsPerPage: limit, - orderDirection: "desc", - q: map[string]string{"actee": appGuid}, - }) -} - -func (_ globalEventsEndpointStrategy) EventsResource() resources.EventResource { - return resources.EventResourceNewV2{} -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/strategy_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/strategy_suite_test.go deleted file mode 100644 index 938aee2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/strategy_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package strategy_test - -import ( - "testing" - - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func TestStrategy(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "API Strategy Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/url_helpers.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/url_helpers.go deleted file mode 100644 index c5a4bc0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/url_helpers.go +++ /dev/null @@ -1,50 +0,0 @@ -package strategy - -import ( - "net/url" - "path" - "strconv" -) - -type params struct { - resultsPerPage int64 - orderDirection string - q map[string]string - recursive bool - inlineRelationsDepth int64 -} - -func v2(segments ...string) string { - segments = append([]string{"/v2"}, segments...) - return path.Join(segments...) -} - -func buildURL(path string, params params) string { - query := url.Values{} - - if params.inlineRelationsDepth != 0 { - query.Set("inline-relations-depth", strconv.FormatInt(params.inlineRelationsDepth, 10)) - } - - if params.resultsPerPage != 0 { - query.Set("results-per-page", strconv.FormatInt(params.resultsPerPage, 10)) - } - - if params.orderDirection != "" { - query.Set("order-direction", params.orderDirection) - } - - if params.q != nil { - q := "" - for key, value := range params.q { - q += key + ":" + value - } - query.Set("q", q) - } - - if params.recursive { - query.Set("recursive", "true") - } - - return path + "?" + query.Encode() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/version.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/version.go deleted file mode 100644 index a6b7523..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/version.go +++ /dev/null @@ -1,61 +0,0 @@ -package strategy - -import ( - "strconv" - "strings" - - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type Version struct { - Major int64 - Minor int64 - Patch int64 -} - -func ParseVersion(input string) (Version, error) { - parts := strings.Split(input, ".") - if len(parts) != 3 { - return Version{}, errors.NewWithFmt(T("Could not parse version number: {{.Input}}", - map[string]interface{}{"Input": input})) - } - - major, err1 := strconv.ParseInt(parts[0], 10, 64) - minor, err2 := strconv.ParseInt(parts[1], 10, 64) - patch, err3 := strconv.ParseInt(parts[2], 10, 64) - if err1 != nil || err2 != nil || err3 != nil { - return Version{}, errors.NewWithFmt(T("Could not parse version number: {{.Input}}", - map[string]interface{}{"Input": input})) - } - - return Version{major, minor, patch}, nil -} - -func (version Version) LessThan(other Version) bool { - if version.Major < other.Major { - return true - } - - if version.Major > other.Major { - return false - } - - if version.Minor < other.Minor { - return true - } - - if version.Minor > other.Minor { - return false - } - - if version.Patch < other.Patch { - return true - } - - return false -} - -func (version Version) GreaterThanOrEqualTo(other Version) bool { - return !version.LessThan(other) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/version_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/version_test.go deleted file mode 100644 index 60128df..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/strategy/version_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package strategy_test - -import ( - . "github.com/cloudfoundry/cli/cf/api/strategy" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("api version", func() { - Describe("parsing", func() { - It("parses the major, minor and patch numbers", func() { - version, err := ParseVersion("1.2.3") - Expect(err).NotTo(HaveOccurred()) - Expect(version).To(Equal(Version{Major: 1, Minor: 2, Patch: 3})) - }) - - It("returns an error when there aren't three numbers", func() { - _, err := ParseVersion("1.2") - Expect(err).To(HaveOccurred()) - - _, err = ParseVersion("1.2.3.4") - Expect(err).To(HaveOccurred()) - }) - - It("returns an error when there are non-digits in the version numbers", func() { - _, err := ParseVersion("1.2.x") - Expect(err).To(HaveOccurred()) - - _, err = ParseVersion("1.x.2") - Expect(err).To(HaveOccurred()) - - _, err = ParseVersion("x.2.3") - Expect(err).To(HaveOccurred()) - }) - }) - - Describe("comparisons", func() { - It("compares the major version", func() { - Expect(Version{Major: 1, Minor: 2, Patch: 3}.LessThan(Version{Major: 2, Minor: 1, Patch: 1})).To(BeTrue()) - Expect(Version{Major: 2, Minor: 1, Patch: 1}.LessThan(Version{Major: 1, Minor: 3, Patch: 3})).To(BeFalse()) - }) - - It("compares the minor version", func() { - Expect(Version{Major: 1, Minor: 2, Patch: 3}.LessThan(Version{Major: 1, Minor: 3, Patch: 1})).To(BeTrue()) - Expect(Version{Major: 1, Minor: 3, Patch: 1}.LessThan(Version{Major: 1, Minor: 1, Patch: 100})).To(BeFalse()) - }) - - It("compares the patch version", func() { - Expect(Version{Major: 1, Minor: 2, Patch: 3}.LessThan(Version{Major: 1, Minor: 2, Patch: 42})).To(BeTrue()) - Expect(Version{Major: 1, Minor: 2, Patch: 42}.LessThan(Version{Major: 1, Minor: 2, Patch: 3})).To(BeFalse()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/user_provided_service_instances.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/user_provided_service_instances.go deleted file mode 100644 index 6576f0e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/user_provided_service_instances.go +++ /dev/null @@ -1,76 +0,0 @@ -package api - -import ( - "bytes" - "encoding/json" - "fmt" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -type UserProvidedServiceInstanceRepository interface { - Create(name, drainUrl string, params map[string]interface{}) (apiErr error) - Update(serviceInstanceFields models.ServiceInstanceFields) (apiErr error) - GetSummaries() (models.UserProvidedServiceSummary, error) -} - -type CCUserProvidedServiceInstanceRepository struct { - config core_config.Reader - gateway net.Gateway -} - -func NewCCUserProvidedServiceInstanceRepository(config core_config.Reader, gateway net.Gateway) (repo CCUserProvidedServiceInstanceRepository) { - repo.config = config - repo.gateway = gateway - return -} - -func (repo CCUserProvidedServiceInstanceRepository) Create(name, drainUrl string, params map[string]interface{}) (apiErr error) { - path := "/v2/user_provided_service_instances" - - jsonBytes, err := json.Marshal(models.UserProvidedService{ - Name: name, - Credentials: params, - SpaceGuid: repo.config.SpaceFields().Guid, - SysLogDrainUrl: drainUrl, - }) - - if err != nil { - apiErr = errors.NewWithError("Error parsing response", err) - return - } - - return repo.gateway.CreateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(jsonBytes)) -} - -func (repo CCUserProvidedServiceInstanceRepository) Update(serviceInstanceFields models.ServiceInstanceFields) (apiErr error) { - path := fmt.Sprintf("/v2/user_provided_service_instances/%s", serviceInstanceFields.Guid) - - reqBody := models.UserProvidedService{ - Credentials: serviceInstanceFields.Params, - SysLogDrainUrl: serviceInstanceFields.SysLogDrainUrl, - } - jsonBytes, err := json.Marshal(reqBody) - if err != nil { - apiErr = errors.NewWithError("Error parsing response", err) - return - } - - return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(jsonBytes)) -} - -func (repo CCUserProvidedServiceInstanceRepository) GetSummaries() (models.UserProvidedServiceSummary, error) { - path := fmt.Sprintf("%s/v2/user_provided_service_instances", repo.config.ApiEndpoint()) - - model := models.UserProvidedServiceSummary{} - - apiErr := repo.gateway.GetResource(path, &model) - if apiErr != nil { - return models.UserProvidedServiceSummary{}, apiErr - } - - return model, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/user_provided_service_instances_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/user_provided_service_instances_test.go deleted file mode 100644 index 8edd05d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/user_provided_service_instances_test.go +++ /dev/null @@ -1,172 +0,0 @@ -package api_test - -import ( - "net/http" - "net/http/httptest" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("UserProvidedServiceRepository", func() { - - Context("Create()", func() { - It("creates a user provided service with a name and credentials", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/user_provided_service_instances", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-custom-service","credentials":{"host":"example.com","password":"secret","user":"me"},"space_guid":"my-space-guid","syslog_drain_url":""}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createUserProvidedServiceInstanceRepo([]testnet.TestRequest{req}) - defer ts.Close() - - apiErr := repo.Create("my-custom-service", "", map[string]interface{}{ - "host": "example.com", - "user": "me", - "password": "secret", - }) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("creates user provided service instances with syslog drains", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/user_provided_service_instances", - Matcher: testnet.RequestBodyMatcher(`{"name":"my-custom-service","credentials":{"host":"example.com","password":"secret","user":"me"},"space_guid":"my-space-guid","syslog_drain_url":"syslog://example.com"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createUserProvidedServiceInstanceRepo([]testnet.TestRequest{req}) - defer ts.Close() - - apiErr := repo.Create("my-custom-service", "syslog://example.com", map[string]interface{}{ - "host": "example.com", - "user": "me", - "password": "secret", - }) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Context("Update()", func() { - It("can update a user provided service, given a service instance with a guid", func() { - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/user_provided_service_instances/my-instance-guid", - Matcher: testnet.RequestBodyMatcher(`{"credentials":{"host":"example.com","password":"secret","user":"me"},"syslog_drain_url":"syslog://example.com"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - }) - - ts, handler, repo := createUserProvidedServiceInstanceRepo([]testnet.TestRequest{req}) - defer ts.Close() - - params := map[string]interface{}{ - "host": "example.com", - "user": "me", - "password": "secret", - } - serviceInstance := models.ServiceInstanceFields{} - serviceInstance.Guid = "my-instance-guid" - serviceInstance.Params = params - serviceInstance.SysLogDrainUrl = "syslog://example.com" - - apiErr := repo.Update(serviceInstance) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - Context("GetSummaries()", func() { - It("returns all user created service in []models.UserProvidedService", func() { - responseStr := testnet.TestResponse{Status: http.StatusOK, Body: ` -{ - "total_results": 2, - "total_pages": 1, - "prev_url": null, - "next_url": null, - "resources": [ - { - "metadata": { - "guid": "2d0a1eb6-b6e5-4b92-b1da-91c5e826b3b4", - "url": "/v2/user_provided_service_instances/2d0a1eb6-b6e5-4b92-b1da-91c5e826b3b4", - "created_at": "2015-01-15T22:57:08Z", - "updated_at": null - }, - "entity": { - "name": "test_service", - "credentials": {}, - "space_guid": "f36dbf3e-eff1-4336-ae5c-aff01dd8ce94", - "type": "user_provided_service_instance", - "syslog_drain_url": "", - "space_url": "/v2/spaces/f36dbf3e-eff1-4336-ae5c-aff01dd8ce94", - "service_bindings_url": "/v2/user_provided_service_instances/2d0a1eb6-b6e5-4b92-b1da-91c5e826b3b4/service_bindings" - } - }, - { - "metadata": { - "guid": "9d0a1eb6-b6e5-4b92-b1da-91c5ed26b3b4", - "url": "/v2/user_provided_service_instances/9d0a1eb6-b6e5-4b92-b1da-91c5e826b3b4", - "created_at": "2015-01-15T22:57:08Z", - "updated_at": null - }, - "entity": { - "name": "test_service2", - "credentials": { - "password": "admin", - "username": "admin" - }, - "space_guid": "f36dbf3e-eff1-4336-ae5c-aff01dd8ce94", - "type": "user_provided_service_instance", - "syslog_drain_url": "sample/drainUrl", - "space_url": "/v2/spaces/f36dbf3e-eff1-4336-ae5c-aff01dd8ce94", - "service_bindings_url": "/v2/user_provided_service_instances/2d0a1eb6-b6e5-4b92-b1da-91c5e826b3b4/service_bindings" - } - } - ] -}`} - - req := testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/user_provided_service_instances", - Response: responseStr, - }) - - ts, handler, repo := createUserProvidedServiceInstanceRepo([]testnet.TestRequest{req}) - defer ts.Close() - - summaries, apiErr := repo.GetSummaries() - Expect(apiErr).NotTo(HaveOccurred()) - Expect(handler).To(HaveAllRequestsCalled()) - Expect(len(summaries.Resources)).To(Equal(2)) - - Expect(summaries.Resources[0].Name).To(Equal("test_service")) - Expect(summaries.Resources[1].Name).To(Equal("test_service2")) - Expect(summaries.Resources[1].Credentials["username"]).To(Equal("admin")) - Expect(summaries.Resources[1].SysLogDrainUrl).To(Equal("sample/drainUrl")) - }) - }) - -}) - -func createUserProvidedServiceInstanceRepo(req []testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo UserProvidedServiceInstanceRepository) { - ts, handler = testnet.NewServer(req) - configRepo := testconfig.NewRepositoryWithDefaults() - configRepo.SetApiEndpoint(ts.URL) - gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{}) - repo = NewCCUserProvidedServiceInstanceRepository(configRepo, gateway) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/users.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/users.go deleted file mode 100644 index c92dd9e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/users.go +++ /dev/null @@ -1,313 +0,0 @@ -package api - -import ( - "bytes" - "encoding/json" - "fmt" - "net/http" - neturl "net/url" - "strings" - - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" -) - -var orgRoleToPathMap = map[string]string{ - models.ORG_USER: "users", - models.ORG_MANAGER: "managers", - models.BILLING_MANAGER: "billing_managers", - models.ORG_AUDITOR: "auditors", -} - -var spaceRoleToPathMap = map[string]string{ - models.SPACE_MANAGER: "managers", - models.SPACE_DEVELOPER: "developers", - models.SPACE_AUDITOR: "auditors", -} - -type UserRepository interface { - FindByUsername(username string) (user models.UserFields, apiErr error) - ListUsersInOrgForRole(orgGuid string, role string) ([]models.UserFields, error) - ListUsersInOrgForRoleWithNoUAA(orgGuid string, role string) ([]models.UserFields, error) - ListUsersInSpaceForRole(spaceGuid string, role string) ([]models.UserFields, error) - ListUsersInSpaceForRoleWithNoUAA(spaceGuid string, role string) ([]models.UserFields, error) - Create(username, password string) (apiErr error) - Delete(userGuid string) (apiErr error) - SetOrgRole(userGuid, orgGuid, role string) (apiErr error) - UnsetOrgRole(userGuid, orgGuid, role string) (apiErr error) - SetSpaceRole(userGuid, spaceGuid, orgGuid, role string) (apiErr error) - UnsetSpaceRole(userGuid, spaceGuid, role string) (apiErr error) -} - -type CloudControllerUserRepository struct { - config core_config.Reader - uaaGateway net.Gateway - ccGateway net.Gateway -} - -func NewCloudControllerUserRepository(config core_config.Reader, uaaGateway net.Gateway, ccGateway net.Gateway) (repo CloudControllerUserRepository) { - repo.config = config - repo.uaaGateway = uaaGateway - repo.ccGateway = ccGateway - return -} - -func (repo CloudControllerUserRepository) FindByUsername(username string) (models.UserFields, error) { - uaaEndpoint, apiErr := repo.getAuthEndpoint() - var user models.UserFields - if apiErr != nil { - return user, apiErr - } - - usernameFilter := neturl.QueryEscape(fmt.Sprintf(`userName Eq "%s"`, username)) - path := fmt.Sprintf("%s/Users?attributes=id,userName&filter=%s", uaaEndpoint, usernameFilter) - users, apiErr := repo.updateOrFindUsersWithUAAPath([]models.UserFields{}, path) - - if apiErr != nil { - errType, ok := apiErr.(errors.HttpError) - if ok { - if errType.StatusCode() == 403 { - return user, errors.NewAccessDeniedError() - } - } - return user, apiErr - } else if len(users) == 0 { - return user, errors.NewModelNotFoundError("User", username) - } - - return users[0], apiErr -} - -func (repo CloudControllerUserRepository) ListUsersInOrgForRole(orgGuid string, roleName string) (users []models.UserFields, apiErr error) { - return repo.listUsersWithPath(fmt.Sprintf("/v2/organizations/%s/%s", orgGuid, orgRoleToPathMap[roleName])) -} - -func (repo CloudControllerUserRepository) ListUsersInOrgForRoleWithNoUAA(orgGuid string, roleName string) (users []models.UserFields, apiErr error) { - return repo.listUsersWithPathWithNoUAA(fmt.Sprintf("/v2/organizations/%s/%s", orgGuid, orgRoleToPathMap[roleName])) -} - -func (repo CloudControllerUserRepository) ListUsersInSpaceForRole(spaceGuid string, roleName string) (users []models.UserFields, apiErr error) { - return repo.listUsersWithPath(fmt.Sprintf("/v2/spaces/%s/%s", spaceGuid, spaceRoleToPathMap[roleName])) -} - -func (repo CloudControllerUserRepository) ListUsersInSpaceForRoleWithNoUAA(spaceGuid string, roleName string) (users []models.UserFields, apiErr error) { - return repo.listUsersWithPathWithNoUAA(fmt.Sprintf("/v2/spaces/%s/%s", spaceGuid, spaceRoleToPathMap[roleName])) -} - -func (repo CloudControllerUserRepository) listUsersWithPathWithNoUAA(path string) (users []models.UserFields, apiErr error) { - apiErr = repo.ccGateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.UserResource{}, - func(resource interface{}) bool { - user := resource.(resources.UserResource).ToFields() - users = append(users, user) - return true - }) - if apiErr != nil { - return - } - - return -} - -func (repo CloudControllerUserRepository) listUsersWithPath(path string) (users []models.UserFields, apiErr error) { - guidFilters := []string{} - - apiErr = repo.ccGateway.ListPaginatedResources( - repo.config.ApiEndpoint(), - path, - resources.UserResource{}, - func(resource interface{}) bool { - user := resource.(resources.UserResource).ToFields() - users = append(users, user) - guidFilters = append(guidFilters, fmt.Sprintf(`Id eq "%s"`, user.Guid)) - return true - }) - if apiErr != nil { - return - } - - if len(guidFilters) == 0 { - return - } - - uaaEndpoint, apiErr := repo.getAuthEndpoint() - if apiErr != nil { - return - } - - filter := strings.Join(guidFilters, " or ") - usersURL := fmt.Sprintf("%s/Users?attributes=id,userName&filter=%s", uaaEndpoint, neturl.QueryEscape(filter)) - users, apiErr = repo.updateOrFindUsersWithUAAPath(users, usersURL) - return -} - -func (repo CloudControllerUserRepository) updateOrFindUsersWithUAAPath(ccUsers []models.UserFields, path string) (updatedUsers []models.UserFields, apiErr error) { - uaaResponse := new(resources.UAAUserResources) - apiErr = repo.uaaGateway.GetResource(path, uaaResponse) - if apiErr != nil { - return - } - - for _, uaaResource := range uaaResponse.Resources { - var ccUserFields models.UserFields - - for _, u := range ccUsers { - if u.Guid == uaaResource.Id { - ccUserFields = u - break - } - } - - updatedUsers = append(updatedUsers, models.UserFields{ - Guid: uaaResource.Id, - Username: uaaResource.Username, - IsAdmin: ccUserFields.IsAdmin, - }) - } - return -} - -func (repo CloudControllerUserRepository) Create(username, password string) (err error) { - uaaEndpoint, err := repo.getAuthEndpoint() - if err != nil { - return - } - - path := "/Users" - body, err := json.Marshal(resources.NewUAAUserResource(username, password)) - - if err != nil { - return - } - - createUserResponse := &resources.UAAUserFields{} - err = repo.uaaGateway.CreateResource(uaaEndpoint, path, bytes.NewReader(body), createUserResponse) - switch httpErr := err.(type) { - case nil: - case errors.HttpError: - if httpErr.StatusCode() == http.StatusConflict { - err = errors.NewModelAlreadyExistsError("user", username) - return - } - return - default: - return - } - - path = "/v2/users" - body, err = json.Marshal(resources.Metadata{ - Guid: createUserResponse.Id, - }) - - if err != nil { - return - } - - return repo.ccGateway.CreateResource(repo.config.ApiEndpoint(), path, bytes.NewReader(body)) -} - -func (repo CloudControllerUserRepository) Delete(userGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/users/%s", userGuid) - - apiErr = repo.ccGateway.DeleteResource(repo.config.ApiEndpoint(), path) - - if httpErr, ok := apiErr.(errors.HttpError); ok && httpErr.ErrorCode() != errors.USER_NOT_FOUND { - return - } - uaaEndpoint, apiErr := repo.getAuthEndpoint() - if apiErr != nil { - return - } - - path = fmt.Sprintf("/Users/%s", userGuid) - return repo.uaaGateway.DeleteResource(uaaEndpoint, path) -} - -func (repo CloudControllerUserRepository) SetOrgRole(userGuid string, orgGuid string, role string) (apiErr error) { - apiErr = repo.setOrUnsetOrgRole("PUT", userGuid, orgGuid, role) - if apiErr != nil { - return - } - return repo.addOrgUserRole(userGuid, orgGuid) -} - -func (repo CloudControllerUserRepository) UnsetOrgRole(userGuid, orgGuid, role string) (apiErr error) { - return repo.setOrUnsetOrgRole("DELETE", userGuid, orgGuid, role) -} - -func (repo CloudControllerUserRepository) setOrUnsetOrgRole(verb, userGuid, orgGuid, role string) (apiErr error) { - rolePath, found := orgRoleToPathMap[role] - - if !found { - apiErr = errors.NewWithFmt(T("Invalid Role {{.Role}}", - map[string]interface{}{"Role": role})) - return - } - - path := fmt.Sprintf("%s/v2/organizations/%s/%s/%s", repo.config.ApiEndpoint(), orgGuid, rolePath, userGuid) - request, apiErr := repo.ccGateway.NewRequest(verb, path, repo.config.AccessToken(), nil) - if apiErr != nil { - return - } - - _, apiErr = repo.ccGateway.PerformRequest(request) - if apiErr != nil { - return - } - return -} - -func (repo CloudControllerUserRepository) SetSpaceRole(userGuid, spaceGuid, orgGuid, role string) (apiErr error) { - rolePath, apiErr := repo.checkSpaceRole(userGuid, spaceGuid, role) - if apiErr != nil { - return - } - - apiErr = repo.addOrgUserRole(userGuid, orgGuid) - if apiErr != nil { - return - } - - return repo.ccGateway.UpdateResource(repo.config.ApiEndpoint(), rolePath, nil) -} - -func (repo CloudControllerUserRepository) UnsetSpaceRole(userGuid, spaceGuid, role string) (apiErr error) { - rolePath, apiErr := repo.checkSpaceRole(userGuid, spaceGuid, role) - if apiErr != nil { - return - } - return repo.ccGateway.DeleteResource(repo.config.ApiEndpoint(), rolePath) -} - -func (repo CloudControllerUserRepository) checkSpaceRole(userGuid, spaceGuid, role string) (string, error) { - var apiErr error - - rolePath, found := spaceRoleToPathMap[role] - - if !found { - apiErr = errors.NewWithFmt(T("Invalid Role {{.Role}}", - map[string]interface{}{"Role": role})) - } - - apiPath := fmt.Sprintf("/v2/spaces/%s/%s/%s", spaceGuid, rolePath, userGuid) - return apiPath, apiErr -} - -func (repo CloudControllerUserRepository) addOrgUserRole(userGuid, orgGuid string) (apiErr error) { - path := fmt.Sprintf("/v2/organizations/%s/users/%s", orgGuid, userGuid) - return repo.ccGateway.UpdateResource(repo.config.ApiEndpoint(), path, nil) -} - -func (repo CloudControllerUserRepository) getAuthEndpoint() (string, error) { - uaaEndpoint := repo.config.UaaEndpoint() - if uaaEndpoint == "" { - return "", errors.New(T("UAA endpoint missing from config file")) - } - return uaaEndpoint, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/users_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/users_test.go deleted file mode 100644 index 6e97182..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/users_test.go +++ /dev/null @@ -1,603 +0,0 @@ -package api_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/api" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("User Repository", func() { - var ( - ccServer *httptest.Server - ccHandler *testnet.TestHandler - uaaServer *httptest.Server - uaaHandler *testnet.TestHandler - repo UserRepository - config core_config.ReadWriter - ) - - BeforeEach(func() { - config = testconfig.NewRepositoryWithDefaults() - ccGateway := net.NewCloudControllerGateway((config), time.Now, &testterm.FakeUI{}) - uaaGateway := net.NewUAAGateway(config, &testterm.FakeUI{}) - repo = NewCloudControllerUserRepository(config, uaaGateway, ccGateway) - }) - - AfterEach(func() { - if uaaServer != nil { - uaaServer.Close() - } - if ccServer != nil { - ccServer.Close() - } - }) - - setupCCServer := func(requests ...testnet.TestRequest) { - ccServer, ccHandler = testnet.NewServer(requests) - config.SetApiEndpoint(ccServer.URL) - } - - setupUAAServer := func(requests ...testnet.TestRequest) { - uaaServer, uaaHandler = testnet.NewServer(requests) - config.SetUaaEndpoint(uaaServer.URL) - } - - Describe("listing the users with a given role using ListUsersInOrgForRole()", func() { - Context("when there are no users in the given org", func() { - It("lists the users in a org with a given role", func() { - ccReqs := []testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/managers", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"resources": []}`, - }}), - } - - setupCCServer(ccReqs...) - - users, apiErr := repo.ListUsersInOrgForRole("my-org-guid", models.ORG_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(len(users)).To(Equal(0)) - }) - }) - - Context("when there are users in the given org", func() { - It("lists the users in an organization with a given role", func() { - ccReqs, uaaReqs := createUsersByRoleEndpoints("/v2/organizations/my-org-guid/managers") - - setupCCServer(ccReqs...) - setupUAAServer(uaaReqs...) - - users, apiErr := repo.ListUsersInOrgForRole("my-org-guid", models.ORG_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(len(users)).To(Equal(3)) - Expect(users[0].Guid).To(Equal("user-1-guid")) - Expect(users[0].Username).To(Equal("Super user 1")) - Expect(users[1].Guid).To(Equal("user-2-guid")) - Expect(users[1].Username).To(Equal("Super user 2")) - }) - }) - - Context("when there are no users in the space", func() { - It("lists the users in a space with a given role", func() { - ccReqs := []testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/spaces/my-space-guid/managers", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: `{"resources": []}`, - }}), - } - - setupCCServer(ccReqs...) - - users, apiErr := repo.ListUsersInSpaceForRole("my-space-guid", models.SPACE_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(len(users)).To(Equal(0)) - }) - }) - - Context("when there are users in the space", func() { - It("lists the users in a space with a given role", func() { - ccReqs, uaaReqs := createUsersByRoleEndpoints("/v2/spaces/my-space-guid/managers") - - setupCCServer(ccReqs...) - setupUAAServer(uaaReqs...) - - users, apiErr := repo.ListUsersInSpaceForRole("my-space-guid", models.SPACE_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(len(users)).To(Equal(3)) - Expect(users[0].Guid).To(Equal("user-1-guid")) - Expect(users[0].Username).To(Equal("Super user 1")) - Expect(users[1].Guid).To(Equal("user-2-guid")) - Expect(users[1].Username).To(Equal("Super user 2")) - }) - }) - - It("does not make a request to the UAA when the cloud controller returns an error", func() { - ccReqs := []testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/v2/organizations/my-org-guid/managers", - Response: testnet.TestResponse{ - Status: http.StatusGatewayTimeout, - }, - }), - } - - setupCCServer(ccReqs...) - - _, apiErr := repo.ListUsersInOrgForRole("my-org-guid", models.ORG_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - httpErr, ok := apiErr.(errors.HttpError) - Expect(ok).To(BeTrue()) - Expect(httpErr.StatusCode()).To(Equal(http.StatusGatewayTimeout)) - }) - - It("returns an error when the UAA endpoint cannot be determined", func() { - ccReqs, _ := createUsersByRoleEndpoints("/v2/organizations/my-org-guid/managers") - - setupCCServer(ccReqs...) - - config.SetAuthenticationEndpoint("") - - _, apiErr := repo.ListUsersInOrgForRole("my-org-guid", models.ORG_MANAGER) - Expect(apiErr).To(HaveOccurred()) - }) - }) - - Describe("listing the users with a given role using ListUsersInOrgForRoleWithNoUAA()", func() { - Context("when there are users in the given org", func() { - It("lists the users in an organization with a given role without hitting UAA endpoint", func() { - ccReqs, uaaReqs := createUsersByRoleEndpoints("/v2/organizations/my-org-guid/managers") - - setupCCServer(ccReqs...) - setupUAAServer(uaaReqs...) - - users, apiErr := repo.ListUsersInOrgForRoleWithNoUAA("my-org-guid", models.ORG_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).ToNot(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(len(users)).To(Equal(3)) - Expect(users[0].Guid).To(Equal("user-1-guid")) - Expect(users[0].Username).To(Equal("")) - Expect(users[0].Username).ToNot(Equal("Super user 1")) - - Expect(users[1].Username).To(Equal("user 2 from cc")) - Expect(users[1].Guid).To(Equal("user-2-guid")) - Expect(users[1].Username).ToNot(Equal("Super user 2")) - - Expect(users[2].Username).To(Equal("user 3 from cc")) - Expect(users[2].Guid).To(Equal("user-3-guid")) - Expect(users[2].Username).ToNot(Equal("Super user 3")) - }) - }) - - }) - - Describe("listing the users with a given role using ListUsersInSpaceForRoleWithNoUAA()", func() { - Context("when there are users in the given space", func() { - It("lists the users in a space with a given role without hitting UAA endpoint", func() { - ccReqs, uaaReqs := createUsersByRoleEndpoints("/v2/spaces/my-space-guid/managers") - - setupCCServer(ccReqs...) - setupUAAServer(uaaReqs...) - - users, apiErr := repo.ListUsersInSpaceForRoleWithNoUAA("my-space-guid", models.SPACE_MANAGER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).ToNot(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - - Expect(len(users)).To(Equal(3)) - Expect(users[0].Guid).To(Equal("user-1-guid")) - Expect(users[0].Username).To(Equal("")) - Expect(users[0].Username).ToNot(Equal("Super user 1")) - - Expect(users[1].Username).To(Equal("user 2 from cc")) - Expect(users[1].Guid).To(Equal("user-2-guid")) - Expect(users[1].Username).ToNot(Equal("Super user 2")) - - Expect(users[2].Username).To(Equal("user 3 from cc")) - Expect(users[2].Guid).To(Equal("user-3-guid")) - Expect(users[2].Username).ToNot(Equal("Super user 3")) - }) - }) - - }) - - Describe("FindByUsername", func() { - Context("when the user exists", func() { - It("finds the user", func() { - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/Users?attributes=id,userName&filter=userName+Eq+%22damien%2Buser1%40pivotallabs.com%22", - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [{ "id": "my-guid", "userName": "my-full-username" }] - }`, - }})) - - user, err := repo.FindByUsername("damien+user1@pivotallabs.com") - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(user).To(Equal(models.UserFields{ - Username: "my-full-username", - Guid: "my-guid", - })) - }) - }) - - Context("when the user does not exist", func() { - It("returns a ModelNotFoundError", func() { - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/Users?attributes=id,userName&filter=userName+Eq+%22my-user%22", - Response: testnet.TestResponse{Status: http.StatusOK, Body: `{"resources": []}`}, - })) - - _, err := repo.FindByUsername("my-user") - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.ModelNotFoundError{})) - }) - }) - - Context("when the user does not have permission", func() { - It("returns a AccessDeniedError", func() { - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/Users?attributes=id,userName&filter=userName+Eq+%22my-user%22", - Response: testnet.TestResponse{Status: http.StatusForbidden, Body: `{"error":"access_denied","error_description":"Access is denied"}`}, - })) - - _, err := repo.FindByUsername("my-user") - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(err).To(BeAssignableToTypeOf(&errors.AccessDeniedError{})) - - }) - }) - - Context("when the uaa endpoint request returns a non-403 error", func() { - It("returns the error", func() { - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: "/Users?attributes=id,userName&filter=userName+Eq+%22my-user%22", - Response: testnet.TestResponse{Status: 500, Body: `server down!`}, - })) - - _, err := repo.FindByUsername("my-user") - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(err).To(HaveOccurred()) - }) - }) - }) - - Describe("creating users", func() { - It("it creates users using the UAA /Users endpoint", func() { - setupCCServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/v2/users", - Matcher: testnet.RequestBodyMatcher(`{"guid":"my-user-guid"}`), - Response: testnet.TestResponse{Status: http.StatusCreated}, - })) - - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/Users", - Matcher: testnet.RequestBodyMatcher(`{ - "userName":"my-user", - "emails":[{"value":"my-user"}], - "password":"my-password", - "name":{ - "givenName":"my-user", - "familyName":"my-user"} - }`), - Response: testnet.TestResponse{ - Status: http.StatusCreated, - Body: `{"id":"my-user-guid"}`, - }, - })) - - apiErr := repo.Create("my-user", "my-password") - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("warns the user if the requested new user already exists", func() { - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/Users", - Response: testnet.TestResponse{ - Status: http.StatusConflict, - Body: ` - { - "message":"Username already in use: my-user", - "error":"scim_resource_already_exists" - }`, - }, - })) - - err := repo.Create("my-user", "my-password") - Expect(err).To(BeAssignableToTypeOf(&errors.ModelAlreadyExistsError{})) - }) - It("Returns any http error", func() { - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "POST", - Path: "/Users", - Response: testnet.TestResponse{ - Status: http.StatusForbidden, - Body: ` - { - "message":"Access Denied", - "error":"Forbidden" - }`, - }, - })) - - err := repo.Create("my-user", "my-password") - Expect(err.Error()).To(ContainSubstring("Forbidden")) - }) - }) - - Describe("deleting users", func() { - It("deletes the user", func() { - setupCCServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/users/my-user-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/Users/my-user-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - apiErr := repo.Delete("my-user-guid") - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - Context("when the user is not found on the cloud controller", func() { - It("when the user is not found on the cloud controller", func() { - setupCCServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/v2/users/my-user-guid", - Response: testnet.TestResponse{Status: http.StatusNotFound, Body: ` - { - "code": 20003, - "description": "The user could not be found" - }`}, - })) - - setupUAAServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: "/Users/my-user-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - err := repo.Delete("my-user-guid") - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("assigning users organization roles", func() { - orgRoleURLS := map[string]string{ - "OrgManager": "/v2/organizations/my-org-guid/managers/my-user-guid", - "BillingManager": "/v2/organizations/my-org-guid/billing_managers/my-user-guid", - "OrgAuditor": "/v2/organizations/my-org-guid/auditors/my-user-guid", - } - - for role, roleURL := range orgRoleURLS { - It("gives users the "+role+" role", func() { - setupCCServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: roleURL, - Response: testnet.TestResponse{Status: http.StatusOK}, - }), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/organizations/my-org-guid/users/my-user-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - err := repo.SetOrgRole("my-user-guid", "my-org-guid", role) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - - It("unsets the org role from user", func() { - setupCCServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "DELETE", - Path: roleURL, - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - apiErr := repo.UnsetOrgRole("my-user-guid", "my-org-guid", role) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(apiErr).NotTo(HaveOccurred()) - }) - } - - It("returns an error when given an invalid role to set", func() { - err := repo.SetOrgRole("user-guid", "org-guid", "foo") - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Invalid Role")) - }) - - It("returns an error when given an invalid role to unset", func() { - err := repo.UnsetOrgRole("user-guid", "org-guid", "foo") - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Invalid Role")) - }) - }) - - Describe("assigning space roles", func() { - spaceRoleURLS := map[string]string{ - "SpaceManager": "/v2/spaces/my-space-guid/managers/my-user-guid", - "SpaceDeveloper": "/v2/spaces/my-space-guid/developers/my-user-guid", - "SpaceAuditor": "/v2/spaces/my-space-guid/auditors/my-user-guid", - } - - for role, roleURL := range spaceRoleURLS { - It("gives the user the "+role+" role", func() { - setupCCServer( - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: "/v2/organizations/my-org-guid/users/my-user-guid", - Response: testnet.TestResponse{Status: http.StatusOK}, - }), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "PUT", - Path: roleURL, - Response: testnet.TestResponse{Status: http.StatusOK}, - })) - - err := repo.SetSpaceRole("my-user-guid", "my-space-guid", "my-org-guid", role) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - }) - } - - It("returns an error when given an invalid role to set", func() { - err := repo.SetSpaceRole("user-guid", "space-guid", "org-guid", "foo") - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Invalid Role")) - }) - }) - - It("lists all users in the org", func() { - ccReqs, uaaReqs := createUsersByRoleEndpoints("/v2/organizations/my-org-guid/users") - - setupCCServer(ccReqs...) - setupUAAServer(uaaReqs...) - - users, err := repo.ListUsersInOrgForRole("my-org-guid", models.ORG_USER) - - Expect(ccHandler).To(HaveAllRequestsCalled()) - Expect(uaaHandler).To(HaveAllRequestsCalled()) - Expect(err).NotTo(HaveOccurred()) - - Expect(len(users)).To(Equal(3)) - Expect(users[0].Guid).To(Equal("user-1-guid")) - Expect(users[0].Username).To(Equal("Super user 1")) - Expect(users[1].Guid).To(Equal("user-2-guid")) - Expect(users[1].Username).To(Equal("Super user 2")) - Expect(users[2].Guid).To(Equal("user-3-guid")) - Expect(users[2].Username).To(Equal("Super user 3")) - }) -}) - -func createUsersByRoleEndpoints(rolePath string) (ccReqs []testnet.TestRequest, uaaReqs []testnet.TestRequest) { - nextUrl := rolePath + "?page=2" - - ccReqs = []testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: rolePath, - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: fmt.Sprintf(` - { - "next_url": "%s", - "resources": [ - {"metadata": {"guid": "user-1-guid"}, "entity": {}} - ] - }`, nextUrl)}}), - - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: nextUrl, - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - {"metadata": {"guid": "user-2-guid"}, "entity": {"username":"user 2 from cc"}}, - {"metadata": {"guid": "user-3-guid"}, "entity": {"username":"user 3 from cc"}} - ] - }`}}), - } - - uaaReqs = []testnet.TestRequest{ - testapi.NewCloudControllerTestRequest(testnet.TestRequest{ - Method: "GET", - Path: fmt.Sprintf( - "/Users?attributes=id,userName&filter=%s", - url.QueryEscape(`Id eq "user-1-guid" or Id eq "user-2-guid" or Id eq "user-3-guid"`)), - Response: testnet.TestResponse{ - Status: http.StatusOK, - Body: ` - { - "resources": [ - { "id": "user-1-guid", "userName": "Super user 1" }, - { "id": "user-2-guid", "userName": "Super user 2" }, - { "id": "user-3-guid", "userName": "Super user 3" } - ] - }`}})} - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app.go deleted file mode 100644 index d500125..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app.go +++ /dev/null @@ -1,120 +0,0 @@ -package app - -import ( - "fmt" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/command_runner" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/trace" - "github.com/codegangsta/cli" -) - -const UnknownCommand = "cf: '%s' is not a registered command. See 'cf help'" - -func NewApp(cmdRunner command_runner.Runner, metadatas ...command_metadata.CommandMetadata) (app *cli.App) { - helpCommand := cli.Command{ - Name: "help", - ShortName: "h", - Description: T("Show help"), - Usage: fmt.Sprintf(T("{{.Command}} help [COMMAND]", map[string]interface{}{"Command": cf.Name()})), - Action: func(c *cli.Context) { - args := c.Args() - if len(args) > 0 { - cli.ShowCommandHelp(c, args[0]) - } else { - showAppHelp(appHelpTemplate(), c.App) - } - }, - } - - cli.AppHelpTemplate = appHelpTemplate() - cli.HelpPrinter = ShowHelp - - trace.Logger.Printf("\n%s\n%s\n\n", terminal.HeaderColor(T("VERSION:")), cf.Version) - - app = cli.NewApp() - app.Usage = Usage() - app.Version = cf.Version + "-" + cf.BuiltOnDate - app.Action = helpCommand.Action - app.CommandNotFound = func(c *cli.Context, command string) { - panic(errors.Exception{ - Message: fmt.Sprintf(UnknownCommand, command), - DisplayCrashDialog: false, - }) - } - - compiledAtTime, err := time.Parse("2006-01-02T03:04:05+00:00", cf.BuiltOnDate) - - if err == nil { - app.Compiled = compiledAtTime - } else { - err = nil - app.Compiled = time.Now() - } - - app.Commands = []cli.Command{helpCommand} - - for _, metadata := range metadatas { - app.Commands = append(app.Commands, getCommand(metadata, cmdRunner)) - } - return -} - -func getCommand(metadata command_metadata.CommandMetadata, runner command_runner.Runner) cli.Command { - return cli.Command{ - Name: metadata.Name, - ShortName: metadata.ShortName, - Description: metadata.Description, - Usage: strings.Replace(metadata.Usage, "CF_NAME", cf.Name(), -1), - Action: func(context *cli.Context) { - err := runner.RunCmdByName(metadata.Name, context) - if err != nil { - panic(terminal.QuietPanic) - } - }, - Flags: metadata.Flags, - SkipFlagParsing: metadata.SkipFlagParsing, - } -} - -func Usage() string { - return T("A command line tool to interact with Cloud Foundry") -} - -func appHelpTemplate() string { - return `{{.Title "` + T("NAME:") + `"}} - {{.Name}} - {{.Usage}} - -{{.Title "` + T("USAGE:") + `"}} - ` + T("[environment variables]") + ` {{.Name}} ` + T("[global options] command [arguments...] [command options]") + ` - -{{.Title "` + T("VERSION:") + `"}} - {{.Version}} - -{{.Title "` + T("BUILD TIME:") + `"}} - {{.Compiled}} - {{range .Commands}} -{{.SubTitle .Name}}{{range .CommandSubGroups}} -{{range .}} {{.Name}} {{.Description}} -{{end}}{{end}}{{end}} -{{.Title "` + T("ENVIRONMENT VARIABLES:") + `"}} - CF_COLOR=false ` + T("Do not colorize output") + ` - CF_HOME=path/to/dir/ ` + T("Override path to default config directory") + ` - CF_PLUGIN_HOME=path/to/dir/ ` + T("Override path to default plugin config directory") + ` - CF_STAGING_TIMEOUT=15 ` + T("Max wait time for buildpack staging, in minutes") + ` - CF_STARTUP_TIMEOUT=5 ` + T("Max wait time for app instance startup, in minutes") + ` - CF_TRACE=true ` + T("Print API request diagnostics to stdout") + ` - CF_TRACE=path/to/trace.log ` + T("Append API request diagnostics to a log file") + ` - HTTP_PROXY=proxy.example.com:8080 ` + T("Enable HTTP proxying for API requests") + ` - -{{.Title "` + T("GLOBAL OPTIONS:") + `"}} - --version, -v ` + T("Print the version") + ` - --help, -h ` + T("Show help") + ` -` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app_suite_test.go deleted file mode 100644 index 9c7e528..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app_suite_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package app_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/plugin_builder" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "path/filepath" - - "testing" -) - -func TestApp(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "fixtures", "plugins"), "test_1") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "fixtures", "plugins"), "test_2") - RunSpecs(t, "App Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app_test.go deleted file mode 100644 index e099529..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/app_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package app_test - -import ( - "bytes" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_factory" - testPluginConfig "github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/cf/trace" - "github.com/cloudfoundry/cli/plugin/rpc" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - io_helpers "github.com/cloudfoundry/cli/testhelpers/io" - testmanifest "github.com/cloudfoundry/cli/testhelpers/manifest" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/app" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var expectedCommandNames = []string{ - "auth", "bind-service", "buildpacks", "create-buildpack", - "create-domain", "create-org", "create-route", "create-service", "create-service-auth-token", - "create-service-broker", "create-space", "create-user", "create-user-provided-service", "curl", - "delete", "delete-buildpack", "delete-domain", "delete-shared-domain", "delete-org", "delete-route", - "delete-service", "delete-service-auth-token", "delete-service-broker", "delete-space", "delete-user", - "domains", "env", "events", "files", "login", "logout", "logs", "marketplace", "map-route", - "passwd", "purge-service-offering", "push", "quotas", "rename", "rename-org", - "rename-service", "rename-service-broker", "rename-space", "restage", "restart", "routes", "scale", - "service-auth-tokens", "service-brokers", "set-env", "set-org-role", - "set-space-role", "create-shared-domain", "stacks", "start", "stop", - "target", "unbind-service", "unmap-route", "unset-env", "unset-org-role", "unset-space-role", - "update-buildpack", "update-service-broker", "update-service-auth-token", "update-user-provided-service", - "quotas", "create-quota", "delete-quota", "quota", "set-quota", "install-plugin", "plugins", "uninstall-plugin", -} - -var _ = Describe("App", func() { - var ( - app *cli.App - cmdRunner *FakeRunner - ) - - JustBeforeEach(func() { - ui := &testterm.FakeUI{} - config := testconfig.NewRepository() - pluginConfig := &testPluginConfig.FakePluginConfiguration{} - manifestRepo := &testmanifest.FakeManifestRepository{} - - repoLocator := api.NewRepositoryLocator(config, map[string]net.Gateway{ - "auth": net.NewUAAGateway(config, ui), - "cloud-controller": net.NewCloudControllerGateway(config, time.Now, &testterm.FakeUI{}), - "uaa": net.NewUAAGateway(config, ui), - }) - - rpcService, _ := rpc.NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - cmdFactory := command_factory.NewFactory(ui, config, manifestRepo, repoLocator, pluginConfig, rpcService) - cmdRunner = &FakeRunner{cmdFactory: cmdFactory} - app = NewApp(cmdRunner, cmdFactory.CommandMetadatas()...) - }) - - Describe("trace file integration", func() { - var ( - output *bytes.Buffer - ) - - BeforeEach(func() { - output = bytes.NewBuffer(make([]byte, 1024)) - trace.SetStdout(output) - trace.EnableTrace() - }) - - It("prints its version number to the trace output when constructed", func() { - Expect(strings.Split(output.String(), "\n")).To(ContainSubstrings( - []string{"VERSION:"}, - []string{cf.Version}, - )) - }) - }) - - Context("when given a command name to run", func() { - It("runs the command with that name", func() { - for _, cmdName := range expectedCommandNames { - app.Run([]string{"", cmdName}) - Expect(cmdRunner.cmdName).To(Equal(cmdName)) - } - }) - }) - - Context("when running 'cf --help'", func() { - It("should output the help in our custom format", func() { - - output := io_helpers.CaptureOutput(func() { - app.Run([]string{"", "--help"}) - }) - - mergedOutput := strings.Join(output, "\n") - Expect(mergedOutput).To(ContainSubstring("CF_TRACE=true"), "CF_TRACE=true not in help") - Expect(mergedOutput).To(ContainSubstring("CF_PLUGIN_HOME=path/to/dir/")) - - for _, name := range expectedCommandNames { - Expect(mergedOutput).To(ContainSubstring(name), name+" not in help") - } - }) - }) - - Context("when the user provides an unknown command name", func() { - It("should complain loudly and then panic", func() { - Expect(func() { - io_helpers.CaptureOutput(func() { - app.Run([]string{"cf", "zoidberg"}) - }) - }).To(Panic()) - }) - }) - - It("includes the built on date in its version string", func() { - Expect(app.Version).To(Equal(cf.Version + "-" + cf.BuiltOnDate)) - }) -}) - -type FakeRunner struct { - cmdFactory command_factory.Factory - cmdName string -} - -func (runner *FakeRunner) RunCmdByName(cmdName string, c *cli.Context) (err error) { - _, err = runner.cmdFactory.GetByCmdName(cmdName) - if err != nil { - GinkgoT().Fatal("Error instantiating command with name", cmdName) - return - } - runner.cmdName = cmdName - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/flag_helper.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/flag_helper.go deleted file mode 100644 index 6cffa6e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/flag_helper.go +++ /dev/null @@ -1,61 +0,0 @@ -package app - -import ( - "fmt" - "strings" - "unicode/utf8" - - "github.com/codegangsta/cli" -) - -func NewIntFlag(name, usage string) IntFlagWithNoDefault { - return IntFlagWithNoDefault{cli.IntFlag{Name: name, Usage: usage}} -} - -func NewIntFlagWithValue(name, usage string, value int) IntFlagWithNoDefault { - return IntFlagWithNoDefault{cli.IntFlag{Name: name, Value: value, Usage: usage}} -} - -func NewStringFlag(name, usage string) StringFlagWithNoDefault { - return StringFlagWithNoDefault{cli.StringFlag{Name: name, Usage: usage}} -} - -func NewStringSliceFlag(name, usage string) StringSliceFlagWithNoDefault { - return StringSliceFlagWithNoDefault{cli.StringSliceFlag{Name: name, Usage: usage, Value: &cli.StringSlice{}}} -} - -type IntFlagWithNoDefault struct { - cli.IntFlag -} - -type StringFlagWithNoDefault struct { - cli.StringFlag -} - -type StringSliceFlagWithNoDefault struct { - cli.StringSliceFlag -} - -func (f IntFlagWithNoDefault) String() string { - defaultVal := fmt.Sprintf("'%v'", f.Value) - return strings.Replace(f.IntFlag.String(), defaultVal, "", 1) -} - -func (f StringFlagWithNoDefault) String() string { - defaultVal := fmt.Sprintf("'%v'", f.Value) - return strings.Replace(f.StringFlag.String(), defaultVal, "", 1) -} - -func (f StringSliceFlagWithNoDefault) String() string { - return fmt.Sprintf("%s%s \t%s", prefixFor(f.Name), f.Name, f.Usage) -} - -func prefixFor(name string) (prefix string) { - if utf8.RuneCountInString(name) == 1 { - prefix = "-" - } else { - prefix = "--" - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/help.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/help.go deleted file mode 100644 index 26ceef0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/help.go +++ /dev/null @@ -1,418 +0,0 @@ -package app - -import ( - "fmt" - "os" - "reflect" - "strings" - "text/tabwriter" - "text/template" - "unicode/utf8" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type groupedCommands struct { - Name string - CommandSubGroups [][]cmdPresenter -} - -func (c groupedCommands) SubTitle(name string) string { - return terminal.HeaderColor(name + ":") -} - -type cmdPresenter struct { - Name string - Description string -} - -func presentCmdName(cmd cli.Command) (name string) { - name = cmd.Name - if cmd.ShortName != "" { - name = name + ", " + cmd.ShortName - } - return -} - -type appPresenter struct { - cli.App - Commands []groupedCommands -} - -func (p appPresenter) Title(name string) string { - return terminal.HeaderColor(name) -} - -func newAppPresenter(app *cli.App) (presenter appPresenter) { - maxNameLen := 0 - for _, cmd := range app.Commands { - name := presentCmdName(cmd) - if utf8.RuneCountInString(name) > maxNameLen { - maxNameLen = len(name) - } - } - - presentCommand := func(commandName string) (presenter cmdPresenter) { - cmd := app.Command(commandName) - presenter.Name = presentCmdName(*cmd) - padding := strings.Repeat(" ", maxNameLen-utf8.RuneCountInString(presenter.Name)) - presenter.Name = presenter.Name + padding - presenter.Description = cmd.Description - return - } - - presentNonCodegangstaCommand := func(commandName string) (presenter cmdPresenter) { - cmd := command_registry.Commands.FindCommand(commandName) - presenter.Name = cmd.MetaData().Name - padding := strings.Repeat(" ", maxNameLen-utf8.RuneCountInString(presenter.Name)) - presenter.Name = presenter.Name + padding - presenter.Description = cmd.MetaData().Description - return - } - - presentPluginCommands := func() []cmdPresenter { - pluginConfig := plugin_config.NewPluginConfig(func(err error) { - //fail silently when running help? - }) - - plugins := pluginConfig.Plugins() - var presenters []cmdPresenter - var pluginPresenter cmdPresenter - - for _, pluginMetadata := range plugins { - for _, cmd := range pluginMetadata.Commands { - - if cmd.Alias == "" { - pluginPresenter.Name = cmd.Name - } else { - pluginPresenter.Name = cmd.Name + ", " + cmd.Alias - } - - padding := strings.Repeat(" ", maxNameLen-utf8.RuneCountInString(pluginPresenter.Name)) - pluginPresenter.Name = pluginPresenter.Name + padding - pluginPresenter.Description = cmd.HelpText - presenters = append(presenters, pluginPresenter) - } - } - - return presenters - } - presenter.Name = app.Name - presenter.Flags = app.Flags - presenter.Usage = app.Usage - presenter.Version = app.Version - presenter.Compiled = app.Compiled - presenter.Commands = []groupedCommands{ - { - Name: T("GETTING STARTED"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("login"), - presentCommand("logout"), - presentCommand("passwd"), - presentCommand("target"), - }, { - presentNonCodegangstaCommand("api"), - presentCommand("auth"), - }, - }, - }, { - Name: T("APPS"), - CommandSubGroups: [][]cmdPresenter{ - { - presentNonCodegangstaCommand("apps"), - presentNonCodegangstaCommand("app"), - }, { - presentCommand("push"), - presentCommand("scale"), - presentCommand("delete"), - presentCommand("rename"), - }, { - presentCommand("start"), - presentCommand("stop"), - presentCommand("restart"), - presentCommand("restage"), - presentCommand("restart-app-instance"), - }, { - presentCommand("events"), - presentCommand("files"), - presentCommand("logs"), - }, { - presentCommand("env"), - presentCommand("set-env"), - presentCommand("unset-env"), - }, { - presentCommand("stacks"), - presentCommand("stack"), - }, { - presentCommand("copy-source"), - }, { - presentCommand("create-app-manifest"), - }, - }, - }, { - Name: T("SERVICES"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("marketplace"), - presentNonCodegangstaCommand("services"), - presentNonCodegangstaCommand("service"), - }, { - presentCommand("create-service"), - presentCommand("update-service"), - presentCommand("delete-service"), - presentCommand("rename-service"), - }, { - presentCommand("create-service-key"), - presentCommand("service-keys"), - presentCommand("service-key"), - presentCommand("delete-service-key"), - }, { - presentCommand("bind-service"), - presentCommand("unbind-service"), - }, { - presentCommand("create-user-provided-service"), - presentCommand("update-user-provided-service"), - }, - }, - }, { - Name: T("ORGS"), - CommandSubGroups: [][]cmdPresenter{ - { - presentNonCodegangstaCommand("orgs"), - presentNonCodegangstaCommand("org"), - }, { - presentCommand("create-org"), - presentCommand("delete-org"), - presentCommand("rename-org"), - }, - }, - }, { - Name: T("SPACES"), - CommandSubGroups: [][]cmdPresenter{ - { - presentNonCodegangstaCommand("spaces"), - presentNonCodegangstaCommand("space"), - }, { - presentCommand("create-space"), - presentCommand("delete-space"), - presentCommand("rename-space"), - }, - }, - }, { - Name: T("DOMAINS"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("domains"), - presentCommand("create-domain"), - presentCommand("delete-domain"), - presentCommand("create-shared-domain"), - presentCommand("delete-shared-domain"), - }, - }, - }, { - Name: T("ROUTES"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("routes"), - presentCommand("create-route"), - presentCommand("check-route"), - presentCommand("map-route"), - presentCommand("unmap-route"), - presentCommand("delete-route"), - presentCommand("delete-orphaned-routes"), - }, - }, - }, { - Name: T("BUILDPACKS"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("buildpacks"), - presentCommand("create-buildpack"), - presentCommand("update-buildpack"), - presentCommand("rename-buildpack"), - presentCommand("delete-buildpack"), - }, - }, - }, { - Name: T("USER ADMIN"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("create-user"), - presentCommand("delete-user"), - }, { - presentNonCodegangstaCommand("org-users"), - presentCommand("set-org-role"), - presentCommand("unset-org-role"), - }, { - presentNonCodegangstaCommand("space-users"), - presentCommand("set-space-role"), - presentCommand("unset-space-role"), - }, - }, - }, { - Name: T("ORG ADMIN"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("quotas"), - presentCommand("quota"), - presentCommand("set-quota"), - }, { - presentCommand("create-quota"), - presentCommand("delete-quota"), - presentCommand("update-quota"), - }, - { - presentCommand("share-private-domain"), - presentCommand("unshare-private-domain"), - }, - }, - }, { - Name: T("SPACE ADMIN"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("space-quotas"), - presentCommand("space-quota"), - presentCommand("create-space-quota"), - presentCommand("update-space-quota"), - presentCommand("delete-space-quota"), - presentCommand("set-space-quota"), - presentCommand("unset-space-quota"), - }, - }, - }, { - Name: T("SERVICE ADMIN"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("service-auth-tokens"), - presentCommand("create-service-auth-token"), - presentCommand("update-service-auth-token"), - presentCommand("delete-service-auth-token"), - }, { - presentCommand("service-brokers"), - presentCommand("create-service-broker"), - presentCommand("update-service-broker"), - presentCommand("delete-service-broker"), - presentCommand("rename-service-broker"), - }, { - presentCommand("migrate-service-instances"), - presentCommand("purge-service-offering"), - }, { - presentCommand("service-access"), - presentCommand("enable-service-access"), - presentCommand("disable-service-access"), - }, - }, - }, { - Name: T("SECURITY GROUP"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("security-group"), - presentCommand("security-groups"), - presentCommand("create-security-group"), - presentCommand("update-security-group"), - presentCommand("delete-security-group"), - presentCommand("bind-security-group"), - presentCommand("unbind-security-group"), - }, { - presentCommand("bind-staging-security-group"), - presentCommand("staging-security-groups"), - presentCommand("unbind-staging-security-group"), - }, { - presentCommand("bind-running-security-group"), - presentCommand("running-security-groups"), - presentCommand("unbind-running-security-group"), - }, - }, - }, { - Name: T("ENVIRONMENT VARIABLE GROUPS"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("running-environment-variable-group"), - presentCommand("staging-environment-variable-group"), - presentCommand("set-staging-environment-variable-group"), - presentCommand("set-running-environment-variable-group"), - }, - }, - }, - { - Name: T("FEATURE FLAGS"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("feature-flags"), - presentCommand("feature-flag"), - presentCommand("enable-feature-flag"), - presentCommand("disable-feature-flag"), - }, - }, - }, { - Name: T("ADVANCED"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("curl"), - presentCommand("config"), - presentCommand("oauth-token"), - }, - }, - }, { - Name: T("ADD/REMOVE PLUGIN REPOSITORY"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("add-plugin-repo"), - presentCommand("remove-plugin-repo"), - presentCommand("list-plugin-repos"), - presentCommand("repo-plugins"), - }, - }, - }, { - Name: T("ADD/REMOVE PLUGIN"), - CommandSubGroups: [][]cmdPresenter{ - { - presentCommand("plugins"), - presentCommand("install-plugin"), - presentCommand("uninstall-plugin"), - }, - }, - }, { - Name: T("INSTALLED PLUGIN COMMANDS"), - CommandSubGroups: [][]cmdPresenter{ - presentPluginCommands(), - }, - }, - } - - return -} - -func ShowHelp(helpTemplate string, thingToPrint interface{}) { - translatedTemplatedHelp := T(strings.Replace(helpTemplate, "{{", "[[", -1)) - translatedTemplatedHelp = strings.Replace(translatedTemplatedHelp, "[[", "{{", -1) - - switch thing := thingToPrint.(type) { - case *cli.App: - showAppHelp(translatedTemplatedHelp, thing) - case cli.Command: - showCommandHelp(translatedTemplatedHelp, thing) - default: - panic(fmt.Sprintf("Help printer has received something that is neither app nor command! The beast (%s) looks like this: %s", reflect.TypeOf(thing), thing)) - } -} - -var CodeGangstaHelpPrinter = cli.HelpPrinter - -func showCommandHelp(helpTemplate string, commandToPrint cli.Command) { - CodeGangstaHelpPrinter(helpTemplate, commandToPrint) -} - -func showAppHelp(helpTemplate string, appToPrint *cli.App) { - presenter := newAppPresenter(appToPrint) - - w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) - t := template.Must(template.New("help").Parse(helpTemplate)) - t.Execute(w, presenter) - w.Flush() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/help_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/help_test.go deleted file mode 100644 index bd5f81f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app/help_test.go +++ /dev/null @@ -1,118 +0,0 @@ -package app_test - -import ( - "path/filepath" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/app" - "github.com/cloudfoundry/cli/cf/command_factory" - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" - testPluginConfig "github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/plugin/rpc" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - io_helpers "github.com/cloudfoundry/cli/testhelpers/io" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - "github.com/codegangsta/cli" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Help", func() { - It("shows help for all commands", func() { - commandFactory := createCommandFactory() - - dummyTemplate := ` -{{range .Commands}}{{range .CommandSubGroups}}{{range .}} -{{.Name}} -{{end}}{{end}}{{end}} -` - output := io_helpers.CaptureOutput(func() { - app.ShowHelp(dummyTemplate, createApp(commandFactory)) - }) - - for _, metadata := range commandFactory.CommandMetadatas() { - Expect(commandInOutput(metadata.Name, output)).To(BeTrue(), metadata.Name+" not in help") - } - }) - - It("shows help for all installed plugin's commands", func() { - config_helpers.PluginRepoDir = func() string { - return filepath.Join("..", "..", "fixtures", "config", "help-plugin-test-config") - } - - commandFactory := createCommandFactory() - - dummyTemplate := ` -{{range .Commands}}{{range .CommandSubGroups}}{{range .}} -{{.Name}} -{{end}}{{end}}{{end}} -` - output := io_helpers.CaptureOutput(func() { - app.ShowHelp(dummyTemplate, createApp(commandFactory)) - }) - - Expect(commandInOutput("test1_cmd2", output)).To(BeTrue(), "plugin command: test1_cmd2 not in help") - Expect(commandInOutput("test2_cmd1", output)).To(BeTrue(), "plugin command: test2_cmd1 not in help") - Expect(commandInOutput("test2_cmd2", output)).To(BeTrue(), "plugin command: test2_cmd2 not in help") - - }) - - It("shows command's alias in help for installed plugin", func() { - config_helpers.PluginRepoDir = func() string { - return filepath.Join("..", "..", "fixtures", "config", "help-plugin-test-config") - } - - commandFactory := createCommandFactory() - - dummyTemplate := ` -{{range .Commands}}{{range .CommandSubGroups}}{{range .}} -{{.Name}} -{{end}}{{end}}{{end}} -` - output := io_helpers.CaptureOutput(func() { - app.ShowHelp(dummyTemplate, createApp(commandFactory)) - }) - - Expect(commandInOutput("test1_cmd1, test1_cmd1_alias", output)).To(BeTrue(), "plugin command alias: test1_cmd1_alias not in help") - }) - -}) - -func createCommandFactory() command_factory.Factory { - fakeUI := &testterm.FakeUI{} - configRepo := testconfig.NewRepository() - pluginConfig := &testPluginConfig.FakePluginConfiguration{} - - manifestRepo := manifest.NewManifestDiskRepository() - apiRepoLocator := api.NewRepositoryLocator(configRepo, map[string]net.Gateway{ - "auth": net.NewUAAGateway(configRepo, fakeUI), - "cloud-controller": net.NewCloudControllerGateway(configRepo, time.Now, fakeUI), - "uaa": net.NewUAAGateway(configRepo, fakeUI), - }) - - rpcService, _ := rpc.NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - return command_factory.NewFactory(fakeUI, configRepo, manifestRepo, apiRepoLocator, pluginConfig, rpcService) -} - -func createApp(commandFactory command_factory.Factory) *cli.App { - new_app := cli.NewApp() - new_app.Commands = []cli.Command{} - for _, metadata := range commandFactory.CommandMetadatas() { - new_app.Commands = append(new_app.Commands, cli.Command{Name: metadata.Name}) - } - - return new_app -} - -func commandInOutput(cmdName string, output []string) bool { - for _, line := range output { - if strings.TrimSpace(line) == strings.TrimSpace(cmdName) { - return true - } - } - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_constants.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_constants.go deleted file mode 100644 index b1420a8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_constants.go +++ /dev/null @@ -1,15 +0,0 @@ -package cf - -import ( - "os" - "path/filepath" -) - -var ( - Version = "BUILT_FROM_SOURCE" - BuiltOnDate = "BUILT_AT_UNKNOWN_TIME" -) - -func Name() string { - return filepath.Base(os.Args[0]) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files.go deleted file mode 100644 index 01e2951..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files.go +++ /dev/null @@ -1,147 +0,0 @@ -package app_files - -import ( - "crypto/sha1" - "fmt" - "io/ioutil" - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/models" - cffileutils "github.com/cloudfoundry/cli/fileutils" - "github.com/cloudfoundry/gofileutils/fileutils" -) - -type AppFiles interface { - AppFilesInDir(dir string) (appFiles []models.AppFileFields, err error) - CopyFiles(appFiles []models.AppFileFields, fromDir, toDir string) (err error) - CountFiles(directory string) int64 - WalkAppFiles(dir string, onEachFile func(string, string) error) (err error) -} - -type ApplicationFiles struct{} - -func (appfiles ApplicationFiles) AppFilesInDir(dir string) (appFiles []models.AppFileFields, err error) { - dir, err = filepath.Abs(dir) - if err != nil { - return - } - - err = appfiles.WalkAppFiles(dir, func(fileName string, fullPath string) (err error) { - fileInfo, err := os.Lstat(fullPath) - if err != nil { - return - } - - appFile := models.AppFileFields{ - Path: filepath.ToSlash(fileName), - Size: fileInfo.Size(), - } - - if fileInfo.IsDir() { - appFile.Sha1 = "0" - appFile.Size = 0 - } else { - hash := sha1.New() - err = fileutils.CopyPathToWriter(fullPath, hash) - if err != nil { - return - } - appFile.Sha1 = fmt.Sprintf("%x", hash.Sum(nil)) - } - - appFiles = append(appFiles, appFile) - return - }) - return -} - -func (appfiles ApplicationFiles) CopyFiles(appFiles []models.AppFileFields, fromDir, toDir string) (err error) { - if err != nil { - return - } - - for _, file := range appFiles { - fromPath := filepath.Join(fromDir, file.Path) - toPath := filepath.Join(toDir, file.Path) - err = copyPathToPath(fromPath, toPath) - if err != nil { - return - } - } - return -} - -func (appfiles ApplicationFiles) CountFiles(directory string) int64 { - var count int64 - appfiles.WalkAppFiles(directory, func(_, _ string) error { - count++ - return nil - }) - return count -} - -func (appfiles ApplicationFiles) WalkAppFiles(dir string, onEachFile func(string, string) error) (err error) { - cfIgnore := loadIgnoreFile(dir) - walkFunc := func(fullPath string, f os.FileInfo, inErr error) (err error) { - err = inErr - if err != nil { - return - } - - if fullPath == dir { - return - } - - if !cffileutils.IsRegular(f) && !f.IsDir() { - return - } - - fileRelativePath, _ := filepath.Rel(dir, fullPath) - fileRelativeUnixPath := filepath.ToSlash(fileRelativePath) - - if !cfIgnore.FileShouldBeIgnored(fileRelativeUnixPath) { - err = onEachFile(fileRelativePath, fullPath) - } - - return - } - - err = filepath.Walk(dir, walkFunc) - return -} - -func copyPathToPath(fromPath, toPath string) (err error) { - srcFileInfo, err := os.Stat(fromPath) - if err != nil { - return - } - - if srcFileInfo.IsDir() { - err = os.MkdirAll(toPath, srcFileInfo.Mode()) - if err != nil { - return - } - } else { - var dst *os.File - dst, err = fileutils.Create(toPath) - if err != nil { - return - } - defer dst.Close() - - dst.Chmod(srcFileInfo.Mode()) - - err = fileutils.CopyPathToWriter(fromPath, dst) - } - return err -} - -func loadIgnoreFile(dir string) CfIgnore { - fileContents, err := ioutil.ReadFile(filepath.Join(dir, ".cfignore")) - if err == nil { - return NewCfIgnore(string(fileContents)) - } else { - return NewCfIgnore("") - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files_suite_test.go deleted file mode 100644 index e4b05fd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package app_files_test - -import ( - "testing" - - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func TestAppFiles(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "App Files Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files_test.go deleted file mode 100644 index 12076c6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/app_files_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package app_files_test - -import ( - . "github.com/cloudfoundry/cli/cf/app_files" - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/models" - cffileutils "github.com/cloudfoundry/cli/fileutils" - "github.com/cloudfoundry/gofileutils/fileutils" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("AppFiles", func() { - var appFiles = ApplicationFiles{} - fixturePath := filepath.Join("..", "..", "fixtures", "applications") - - Describe("AppFilesInDir", func() { - It("all files have '/' path separators", func() { - files, err := appFiles.AppFilesInDir(fixturePath) - Expect(err).ShouldNot(HaveOccurred()) - - for _, afile := range files { - Expect(afile.Path).Should(Equal(filepath.ToSlash(afile.Path))) - } - }) - - It("excludes files based on the .cfignore file", func() { - appPath := filepath.Join(fixturePath, "app-with-cfignore") - files, err := appFiles.AppFilesInDir(appPath) - Expect(err).ShouldNot(HaveOccurred()) - - paths := []string{} - for _, file := range files { - paths = append(paths, file.Path) - } - - Expect(paths).To(Equal([]string{ - "dir1", - "dir1/child-dir", - "dir1/child-dir/file3.txt", - "dir1/file1.txt", - "dir2", - - // TODO: this should be excluded. - // .cfignore doesn't handle ** patterns right now - "dir2/child-dir2", - })) - }) - - // NB: on windows, you can never rely on the size of a directory being zero - // see: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364946(v=vs.85).aspx - // and: https://www.pivotaltracker.com/story/show/70470232 - It("always sets the size of directories to zero bytes", func() { - fileutils.TempDir("something", func(tempdir string, err error) { - Expect(err).ToNot(HaveOccurred()) - - err = os.Mkdir(filepath.Join(tempdir, "nothing"), 0600) - Expect(err).ToNot(HaveOccurred()) - - files, err := appFiles.AppFilesInDir(tempdir) - Expect(err).ToNot(HaveOccurred()) - - sizes := []int64{} - for _, file := range files { - sizes = append(sizes, file.Size) - } - - Expect(sizes).To(Equal([]int64{0})) - }) - }) - }) - - Describe("CopyFiles", func() { - It("copies only the files specified", func() { - copyDir := filepath.Join(fixturePath, "app-copy-test") - - filesToCopy := []models.AppFileFields{ - {Path: filepath.Join("dir1")}, - {Path: filepath.Join("dir1", "child-dir", "file2.txt")}, - } - - files := []string{} - - cffileutils.TempDir("copyToDir", func(tmpDir string, err error) { - copyErr := appFiles.CopyFiles(filesToCopy, copyDir, tmpDir) - Expect(copyErr).ToNot(HaveOccurred()) - - filepath.Walk(tmpDir, func(path string, fileInfo os.FileInfo, err error) error { - Expect(err).ToNot(HaveOccurred()) - - if !fileInfo.IsDir() { - files = append(files, fileInfo.Name()) - } - return nil - }) - }) - - // file2.txt is in lowest subtree, thus is walked first. - Expect(files).To(Equal([]string{ - "file2.txt", - })) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/cf_ignore_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/cf_ignore_test.go deleted file mode 100644 index c3f8c9b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/cf_ignore_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package app_files_test - -import ( - . "github.com/cloudfoundry/cli/cf/app_files" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CF Ignore", func() { - It("excludes files based on exact path matches", func() { - ignore := NewCfIgnore(`the-dir/the-path`) - Expect(ignore.FileShouldBeIgnored("the-dir/the-path")).To(BeTrue()) - }) - - It("excludes the contents of directories based on exact path matches", func() { - ignore := NewCfIgnore(`dir1/dir2`) - Expect(ignore.FileShouldBeIgnored("dir1/dir2/the-file")).To(BeTrue()) - Expect(ignore.FileShouldBeIgnored("dir1/dir2/dir3/the-file")).To(BeTrue()) - }) - - It("excludes files based on star patterns", func() { - ignore := NewCfIgnore(`dir1/*.so`) - Expect(ignore.FileShouldBeIgnored("dir1/file1.so")).To(BeTrue()) - Expect(ignore.FileShouldBeIgnored("dir1/file2.cc")).To(BeFalse()) - }) - - It("excludes files based on double-star patterns", func() { - ignore := NewCfIgnore(`dir1/**/*.so`) - Expect(ignore.FileShouldBeIgnored("dir1/dir2/dir3/file1.so")).To(BeTrue()) - Expect(ignore.FileShouldBeIgnored("different-dir/dir2/file.so")).To(BeFalse()) - }) - - It("allows files to be explicitly included", func() { - ignore := NewCfIgnore(` -node_modules/* -!node_modules/common -`) - - Expect(ignore.FileShouldBeIgnored("node_modules/something-else")).To(BeTrue()) - Expect(ignore.FileShouldBeIgnored("node_modules/common")).To(BeFalse()) - }) - - It("applies the patterns in order from top to bottom", func() { - ignore := NewCfIgnore(` -stuff/* -!stuff/*.c -stuff/exclude.c`) - - Expect(ignore.FileShouldBeIgnored("stuff/something.txt")).To(BeTrue()) - Expect(ignore.FileShouldBeIgnored("stuff/exclude.c")).To(BeTrue()) - Expect(ignore.FileShouldBeIgnored("stuff/include.c")).To(BeFalse()) - }) - - It("ignores certain commonly ingored files by default", func() { - ignore := NewCfIgnore(``) - Expect(ignore.FileShouldBeIgnored(".git/objects")).To(BeTrue()) - - ignore = NewCfIgnore(`!.git`) - Expect(ignore.FileShouldBeIgnored(".git/objects")).To(BeFalse()) - }) - - Describe("files named manifest.yml", func() { - var ( - ignore CfIgnore - ) - - BeforeEach(func() { - ignore = NewCfIgnore("") - }) - - It("ignores manifest.yml at the top level", func() { - Expect(ignore.FileShouldBeIgnored("manifest.yml")).To(BeTrue()) - }) - - It("does not ignore nested manifest.yml files", func() { - Expect(ignore.FileShouldBeIgnored("public/assets/manifest.yml")).To(BeFalse()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/fakes/fake_app_files.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/fakes/fake_app_files.go deleted file mode 100644 index ec75791..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/fakes/fake_app_files.go +++ /dev/null @@ -1,178 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/models" - - "sync" -) - -type FakeAppFiles struct { - AppFilesInDirStub func(dir string) (appFiles []models.AppFileFields, err error) - appFilesInDirMutex sync.RWMutex - appFilesInDirArgsForCall []struct { - dir string - } - appFilesInDirReturns struct { - result1 []models.AppFileFields - result2 error - } - CopyFilesStub func(appFiles []models.AppFileFields, fromDir, toDir string) (err error) - copyFilesMutex sync.RWMutex - copyFilesArgsForCall []struct { - appFiles []models.AppFileFields - fromDir string - toDir string - } - copyFilesReturns struct { - result1 error - } - CountFilesStub func(directory string) int64 - countFilesMutex sync.RWMutex - countFilesArgsForCall []struct { - directory string - } - countFilesReturns struct { - result1 int64 - } - WalkAppFilesStub func(dir string, onEachFile func(string, string) error) (err error) - walkAppFilesMutex sync.RWMutex - walkAppFilesArgsForCall []struct { - dir string - onEachFile func(string, string) error - } - walkAppFilesReturns struct { - result1 error - } -} - -func (fake *FakeAppFiles) AppFilesInDir(dir string) (appFiles []models.AppFileFields, err error) { - fake.appFilesInDirMutex.Lock() - defer fake.appFilesInDirMutex.Unlock() - fake.appFilesInDirArgsForCall = append(fake.appFilesInDirArgsForCall, struct { - dir string - }{dir}) - if fake.AppFilesInDirStub != nil { - return fake.AppFilesInDirStub(dir) - } else { - return fake.appFilesInDirReturns.result1, fake.appFilesInDirReturns.result2 - } -} - -func (fake *FakeAppFiles) AppFilesInDirCallCount() int { - fake.appFilesInDirMutex.RLock() - defer fake.appFilesInDirMutex.RUnlock() - return len(fake.appFilesInDirArgsForCall) -} - -func (fake *FakeAppFiles) AppFilesInDirArgsForCall(i int) string { - fake.appFilesInDirMutex.RLock() - defer fake.appFilesInDirMutex.RUnlock() - return fake.appFilesInDirArgsForCall[i].dir -} - -func (fake *FakeAppFiles) AppFilesInDirReturns(result1 []models.AppFileFields, result2 error) { - fake.appFilesInDirReturns = struct { - result1 []models.AppFileFields - result2 error - }{result1, result2} -} - -func (fake *FakeAppFiles) CopyFiles(appFiles []models.AppFileFields, fromDir string, toDir string) (err error) { - fake.copyFilesMutex.Lock() - defer fake.copyFilesMutex.Unlock() - fake.copyFilesArgsForCall = append(fake.copyFilesArgsForCall, struct { - appFiles []models.AppFileFields - fromDir string - toDir string - }{appFiles, fromDir, toDir}) - if fake.CopyFilesStub != nil { - return fake.CopyFilesStub(appFiles, fromDir, toDir) - } else { - return fake.copyFilesReturns.result1 - } -} - -func (fake *FakeAppFiles) CopyFilesCallCount() int { - fake.copyFilesMutex.RLock() - defer fake.copyFilesMutex.RUnlock() - return len(fake.copyFilesArgsForCall) -} - -func (fake *FakeAppFiles) CopyFilesArgsForCall(i int) ([]models.AppFileFields, string, string) { - fake.copyFilesMutex.RLock() - defer fake.copyFilesMutex.RUnlock() - return fake.copyFilesArgsForCall[i].appFiles, fake.copyFilesArgsForCall[i].fromDir, fake.copyFilesArgsForCall[i].toDir -} - -func (fake *FakeAppFiles) CopyFilesReturns(result1 error) { - fake.copyFilesReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeAppFiles) CountFiles(directory string) int64 { - fake.countFilesMutex.Lock() - defer fake.countFilesMutex.Unlock() - fake.countFilesArgsForCall = append(fake.countFilesArgsForCall, struct { - directory string - }{directory}) - if fake.CountFilesStub != nil { - return fake.CountFilesStub(directory) - } else { - return fake.countFilesReturns.result1 - } -} - -func (fake *FakeAppFiles) CountFilesCallCount() int { - fake.countFilesMutex.RLock() - defer fake.countFilesMutex.RUnlock() - return len(fake.countFilesArgsForCall) -} - -func (fake *FakeAppFiles) CountFilesArgsForCall(i int) string { - fake.countFilesMutex.RLock() - defer fake.countFilesMutex.RUnlock() - return fake.countFilesArgsForCall[i].directory -} - -func (fake *FakeAppFiles) CountFilesReturns(result1 int64) { - fake.countFilesReturns = struct { - result1 int64 - }{result1} -} - -func (fake *FakeAppFiles) WalkAppFiles(dir string, onEachFile func(string, string) error) (err error) { - fake.walkAppFilesMutex.Lock() - defer fake.walkAppFilesMutex.Unlock() - fake.walkAppFilesArgsForCall = append(fake.walkAppFilesArgsForCall, struct { - dir string - onEachFile func(string, string) error - }{dir, onEachFile}) - if fake.WalkAppFilesStub != nil { - return fake.WalkAppFilesStub(dir, onEachFile) - } else { - return fake.walkAppFilesReturns.result1 - } -} - -func (fake *FakeAppFiles) WalkAppFilesCallCount() int { - fake.walkAppFilesMutex.RLock() - defer fake.walkAppFilesMutex.RUnlock() - return len(fake.walkAppFilesArgsForCall) -} - -func (fake *FakeAppFiles) WalkAppFilesArgsForCall(i int) (string, func(string, string) error) { - fake.walkAppFilesMutex.RLock() - defer fake.walkAppFilesMutex.RUnlock() - return fake.walkAppFilesArgsForCall[i].dir, fake.walkAppFilesArgsForCall[i].onEachFile -} - -func (fake *FakeAppFiles) WalkAppFilesReturns(result1 error) { - fake.walkAppFilesReturns = struct { - result1 error - }{result1} -} - -var _ AppFiles = new(FakeAppFiles) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/fakes/fake_zipper.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/fakes/fake_zipper.go deleted file mode 100644 index 4550c52..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/fakes/fake_zipper.go +++ /dev/null @@ -1,176 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/app_files" - - "os" - "sync" -) - -type FakeZipper struct { - ZipStub func(dirToZip string, targetFile *os.File) (err error) - zipMutex sync.RWMutex - zipArgsForCall []struct { - dirToZip string - targetFile *os.File - } - zipReturns struct { - result1 error - } - IsZipFileStub func(path string) bool - isZipFileMutex sync.RWMutex - isZipFileArgsForCall []struct { - path string - } - isZipFileReturns struct { - result1 bool - } - UnzipStub func(appDir string, destDir string) (err error) - unzipMutex sync.RWMutex - unzipArgsForCall []struct { - appDir string - destDir string - } - unzipReturns struct { - result1 error - } - GetZipSizeStub func(zipFile *os.File) (int64, error) - getZipSizeMutex sync.RWMutex - getZipSizeArgsForCall []struct { - zipFile *os.File - } - getZipSizeReturns struct { - result1 int64 - result2 error - } -} - -func (fake *FakeZipper) Zip(dirToZip string, targetFile *os.File) (err error) { - fake.zipMutex.Lock() - defer fake.zipMutex.Unlock() - fake.zipArgsForCall = append(fake.zipArgsForCall, struct { - dirToZip string - targetFile *os.File - }{dirToZip, targetFile}) - if fake.ZipStub != nil { - return fake.ZipStub(dirToZip, targetFile) - } else { - return fake.zipReturns.result1 - } -} - -func (fake *FakeZipper) ZipCallCount() int { - fake.zipMutex.RLock() - defer fake.zipMutex.RUnlock() - return len(fake.zipArgsForCall) -} - -func (fake *FakeZipper) ZipArgsForCall(i int) (string, *os.File) { - fake.zipMutex.RLock() - defer fake.zipMutex.RUnlock() - return fake.zipArgsForCall[i].dirToZip, fake.zipArgsForCall[i].targetFile -} - -func (fake *FakeZipper) ZipReturns(result1 error) { - fake.zipReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeZipper) IsZipFile(path string) bool { - fake.isZipFileMutex.Lock() - defer fake.isZipFileMutex.Unlock() - fake.isZipFileArgsForCall = append(fake.isZipFileArgsForCall, struct { - path string - }{path}) - if fake.IsZipFileStub != nil { - return fake.IsZipFileStub(path) - } else { - return fake.isZipFileReturns.result1 - } -} - -func (fake *FakeZipper) IsZipFileCallCount() int { - fake.isZipFileMutex.RLock() - defer fake.isZipFileMutex.RUnlock() - return len(fake.isZipFileArgsForCall) -} - -func (fake *FakeZipper) IsZipFileArgsForCall(i int) string { - fake.isZipFileMutex.RLock() - defer fake.isZipFileMutex.RUnlock() - return fake.isZipFileArgsForCall[i].path -} - -func (fake *FakeZipper) IsZipFileReturns(result1 bool) { - fake.isZipFileReturns = struct { - result1 bool - }{result1} -} - -func (fake *FakeZipper) Unzip(appDir string, destDir string) (err error) { - fake.unzipMutex.Lock() - defer fake.unzipMutex.Unlock() - fake.unzipArgsForCall = append(fake.unzipArgsForCall, struct { - appDir string - destDir string - }{appDir, destDir}) - if fake.UnzipStub != nil { - return fake.UnzipStub(appDir, destDir) - } else { - return fake.unzipReturns.result1 - } -} - -func (fake *FakeZipper) UnzipCallCount() int { - fake.unzipMutex.RLock() - defer fake.unzipMutex.RUnlock() - return len(fake.unzipArgsForCall) -} - -func (fake *FakeZipper) UnzipArgsForCall(i int) (string, string) { - fake.unzipMutex.RLock() - defer fake.unzipMutex.RUnlock() - return fake.unzipArgsForCall[i].appDir, fake.unzipArgsForCall[i].destDir -} - -func (fake *FakeZipper) UnzipReturns(result1 error) { - fake.unzipReturns = struct { - result1 error - }{result1} -} - -func (fake *FakeZipper) GetZipSize(zipFile *os.File) (int64, error) { - fake.getZipSizeMutex.Lock() - defer fake.getZipSizeMutex.Unlock() - fake.getZipSizeArgsForCall = append(fake.getZipSizeArgsForCall, struct { - zipFile *os.File - }{zipFile}) - if fake.GetZipSizeStub != nil { - return fake.GetZipSizeStub(zipFile) - } else { - return fake.getZipSizeReturns.result1, fake.getZipSizeReturns.result2 - } -} - -func (fake *FakeZipper) GetZipSizeCallCount() int { - fake.getZipSizeMutex.RLock() - defer fake.getZipSizeMutex.RUnlock() - return len(fake.getZipSizeArgsForCall) -} - -func (fake *FakeZipper) GetZipSizeArgsForCall(i int) *os.File { - fake.getZipSizeMutex.RLock() - defer fake.getZipSizeMutex.RUnlock() - return fake.getZipSizeArgsForCall[i].zipFile -} - -func (fake *FakeZipper) GetZipSizeReturns(result1 int64, result2 error) { - fake.getZipSizeReturns = struct { - result1 int64 - result2 error - }{result1, result2} -} - -var _ Zipper = new(FakeZipper) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/zipper.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/zipper.go deleted file mode 100644 index 96b6794..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/zipper.go +++ /dev/null @@ -1,133 +0,0 @@ -package app_files - -import ( - "archive/zip" - "io" - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/gofileutils/fileutils" -) - -type Zipper interface { - Zip(dirToZip string, targetFile *os.File) (err error) - IsZipFile(path string) bool - Unzip(appDir string, destDir string) (err error) - GetZipSize(zipFile *os.File) (int64, error) -} - -type ApplicationZipper struct{} - -func (zipper ApplicationZipper) Zip(dirOrZipFile string, targetFile *os.File) (err error) { - if zipper.IsZipFile(dirOrZipFile) { - err = fileutils.CopyPathToWriter(dirOrZipFile, targetFile) - } else { - err = writeZipFile(dirOrZipFile, targetFile) - } - targetFile.Seek(0, os.SEEK_SET) - return -} - -func (zipper ApplicationZipper) IsZipFile(file string) (result bool) { - _, err := zip.OpenReader(file) - return err == nil -} - -func writeZipFile(dir string, targetFile *os.File) error { - isEmpty, err := fileutils.IsDirEmpty(dir) - if err != nil { - return err - } - - if isEmpty { - return errors.NewEmptyDirError(dir) - } - - writer := zip.NewWriter(targetFile) - defer writer.Close() - - appfiles := ApplicationFiles{} - return appfiles.WalkAppFiles(dir, func(fileName string, fullPath string) error { - fileInfo, err := os.Stat(fullPath) - if err != nil { - return err - } - - header, err := zip.FileInfoHeader(fileInfo) - if err != nil { - return err - } - - header.Name = filepath.ToSlash(fileName) - - if fileInfo.IsDir() { - header.Name += "/" - } - - zipFilePart, err := writer.CreateHeader(header) - if err != nil { - return err - } - - if fileInfo.IsDir() { - return nil - } else { - return fileutils.CopyPathToWriter(fullPath, zipFilePart) - } - }) -} - -func (zipper ApplicationZipper) Unzip(appDir string, destDir string) (err error) { - r, err := zip.OpenReader(appDir) - if err != nil { - return - } - defer r.Close() - - for _, f := range r.File { - func() { - // Don't try to extract directories - if f.FileInfo().IsDir() { - return - } - - var rc io.ReadCloser - rc, err = f.Open() - if err != nil { - return - } - - // functional scope from above is important - // otherwise this only closes the last file handle - defer rc.Close() - - destFilePath := filepath.Join(destDir, f.Name) - - err = fileutils.CopyReaderToPath(rc, destFilePath) - if err != nil { - return - } - - err = os.Chmod(destFilePath, f.FileInfo().Mode()) - if err != nil { - return - } - }() - } - - return -} - -func (zipper ApplicationZipper) GetZipSize(zipFile *os.File) (int64, error) { - zipFileSize := int64(0) - - stat, err := zipFile.Stat() - if err != nil { - return 0, err - } - - zipFileSize = int64(stat.Size()) - - return zipFileSize, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/zipper_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/zipper_test.go deleted file mode 100644 index ec172b0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/zipper_test.go +++ /dev/null @@ -1,170 +0,0 @@ -package app_files_test - -import ( - "archive/zip" - "bytes" - . "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/gofileutils/fileutils" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "io" - "io/ioutil" - "os" - "path/filepath" -) - -func readFile(file *os.File) []byte { - bytes, err := ioutil.ReadAll(file) - Expect(err).NotTo(HaveOccurred()) - return bytes -} - -var _ = Describe("Zipper", func() { - var filesInZip = []string{ - "foo.txt", - "fooDir/", - "fooDir/bar/", - "lastDir/", - "subDir/", - "subDir/bar.txt", - "subDir/otherDir/", - "subDir/otherDir/file.txt", - } - - It("zips directories", func() { - fileutils.TempFile("zip_test", func(zipFile *os.File, err error) { - workingDir, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - - dir := filepath.Join(workingDir, "../../fixtures/zip/") - err = os.Chmod(filepath.Join(dir, "subDir/bar.txt"), 0666) - Expect(err).NotTo(HaveOccurred()) - - zipper := ApplicationZipper{} - err = zipper.Zip(dir, zipFile) - Expect(err).NotTo(HaveOccurred()) - - fileStat, err := zipFile.Stat() - Expect(err).NotTo(HaveOccurred()) - - reader, err := zip.NewReader(zipFile, fileStat.Size()) - Expect(err).NotTo(HaveOccurred()) - - filenames := []string{} - for _, file := range reader.File { - filenames = append(filenames, file.Name) - } - - Expect(filenames).To(Equal(filesInZip)) - - readFileInZip := func(index int) (string, string) { - buf := &bytes.Buffer{} - file := reader.File[index] - fReader, err := file.Open() - _, err = io.Copy(buf, fReader) - - Expect(err).NotTo(HaveOccurred()) - - return file.Name, string(buf.Bytes()) - } - - Expect(err).NotTo(HaveOccurred()) - - name, contents := readFileInZip(0) - Expect(name).To(Equal("foo.txt")) - Expect(contents).To(Equal("This is a simple text file.")) - - name, contents = readFileInZip(5) - Expect(name).To(Equal("subDir/bar.txt")) - Expect(contents).To(Equal("I am in a subdirectory.")) - Expect(reader.File[5].FileInfo().Mode()).To(Equal(os.FileMode(0666))) - }) - }) - - It("is a no-op for a zipfile", func() { - fileutils.TempFile("zip_test", func(zipFile *os.File, err error) { - dir, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - - zipper := ApplicationZipper{} - fixture := filepath.Join(dir, "../../fixtures/applications/example-app.zip") - err = zipper.Zip(fixture, zipFile) - Expect(err).NotTo(HaveOccurred()) - - zippedFile, err := os.Open(fixture) - Expect(err).NotTo(HaveOccurred()) - Expect(readFile(zipFile)).To(Equal(readFile(zippedFile))) - }) - }) - - It("returns an error when zipping fails", func() { - fileutils.TempFile("zip_test", func(zipFile *os.File, err error) { - zipper := ApplicationZipper{} - err = zipper.Zip("/a/bogus/directory", zipFile) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("open /a/bogus/directory")) - }) - }) - - It("returns an error when the directory is empty", func() { - fileutils.TempFile("zip_test", func(zipFile *os.File, err error) { - fileutils.TempDir("zip_test", func(emptyDir string, err error) { - zipper := ApplicationZipper{} - err = zipper.Zip(emptyDir, zipFile) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("is empty")) - }) - }) - }) - - Describe(".Unzip", func() { - It("extracts the zip file", func() { - filez := []string{ - "example-app/.cfignore", - "example-app/app.rb", - "example-app/config.ru", - "example-app/Gemfile", - "example-app/Gemfile.lock", - "example-app/ignore-me", - "example-app/manifest.yml", - } - - dir, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - fileutils.TempDir("unzipped_app", func(tmpDir string, err error) { - zipper := ApplicationZipper{} - - fixture := filepath.Join(dir, "../../fixtures/applications/example-app.zip") - err = zipper.Unzip(fixture, tmpDir) - Expect(err).NotTo(HaveOccurred()) - for _, file := range filez { - _, err := os.Stat(filepath.Join(tmpDir, file)) - Expect(os.IsNotExist(err)).To(BeFalse()) - } - }) - }) - }) - - Describe(".GetZipSize", func() { - var zipper = ApplicationZipper{} - - It("returns the size of the zip file", func() { - dir, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - zipFile := filepath.Join(dir, "../../fixtures/applications/example-app.zip") - - file, err := os.Open(zipFile) - Expect(err).NotTo(HaveOccurred()) - - fileSize, err := zipper.GetZipSize(file) - Expect(err).NotTo(HaveOccurred()) - Expect(fileSize).To(Equal(int64(1803))) - }) - - It("returns an error if the zip file cannot be found", func() { - tmpFile, _ := os.Open("fooBar") - _, sizeErr := zipper.GetZipSize(tmpFile) - Expect(sizeErr).To(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/cf_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/cf_suite_test.go deleted file mode 100644 index 1a3fb00..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/cf_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package cf_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCf(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Cf Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command/command.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command/command.go deleted file mode 100644 index 994ce82..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command/command.go +++ /dev/null @@ -1,13 +0,0 @@ -package command - -import ( - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/codegangsta/cli" -) - -type Command interface { - Metadata() command_metadata.CommandMetadata - GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) (reqs []requirements.Requirement, err error) - Run(context *cli.Context) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command/fakes/fake_command.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command/fakes/fake_command.go deleted file mode 100644 index 9ac7b84..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command/fakes/fake_command.go +++ /dev/null @@ -1,118 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/codegangsta/cli" -) - -type FakeCommand struct { - MetadataStub func() command_metadata.CommandMetadata - metadataMutex sync.RWMutex - metadataArgsForCall []struct{} - metadataReturns struct { - result1 command_metadata.CommandMetadata - } - GetRequirementsStub func(requirementsFactory requirements.Factory, context *cli.Context) (reqs []requirements.Requirement, err error) - getRequirementsMutex sync.RWMutex - getRequirementsArgsForCall []struct { - requirementsFactory requirements.Factory - context *cli.Context - } - getRequirementsReturns struct { - result1 []requirements.Requirement - result2 error - } - RunStub func(context *cli.Context) - runMutex sync.RWMutex - runArgsForCall []struct { - context *cli.Context - } -} - -func (fake *FakeCommand) Metadata() command_metadata.CommandMetadata { - fake.metadataMutex.Lock() - defer fake.metadataMutex.Unlock() - fake.metadataArgsForCall = append(fake.metadataArgsForCall, struct{}{}) - if fake.MetadataStub != nil { - return fake.MetadataStub() - } else { - return fake.metadataReturns.result1 - } -} - -func (fake *FakeCommand) MetadataCallCount() int { - fake.metadataMutex.RLock() - defer fake.metadataMutex.RUnlock() - return len(fake.metadataArgsForCall) -} - -func (fake *FakeCommand) MetadataReturns(result1 command_metadata.CommandMetadata) { - fake.MetadataStub = nil - fake.metadataReturns = struct { - result1 command_metadata.CommandMetadata - }{result1} -} - -func (fake *FakeCommand) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) (reqs []requirements.Requirement, err error) { - fake.getRequirementsMutex.Lock() - defer fake.getRequirementsMutex.Unlock() - fake.getRequirementsArgsForCall = append(fake.getRequirementsArgsForCall, struct { - requirementsFactory requirements.Factory - context *cli.Context - }{requirementsFactory, context}) - if fake.GetRequirementsStub != nil { - return fake.GetRequirementsStub(requirementsFactory, context) - } else { - return fake.getRequirementsReturns.result1, fake.getRequirementsReturns.result2 - } -} - -func (fake *FakeCommand) GetRequirementsCallCount() int { - fake.getRequirementsMutex.RLock() - defer fake.getRequirementsMutex.RUnlock() - return len(fake.getRequirementsArgsForCall) -} - -func (fake *FakeCommand) GetRequirementsArgsForCall(i int) (requirements.Factory, *cli.Context) { - fake.getRequirementsMutex.RLock() - defer fake.getRequirementsMutex.RUnlock() - return fake.getRequirementsArgsForCall[i].requirementsFactory, fake.getRequirementsArgsForCall[i].context -} - -func (fake *FakeCommand) GetRequirementsReturns(result1 []requirements.Requirement, result2 error) { - fake.GetRequirementsStub = nil - fake.getRequirementsReturns = struct { - result1 []requirements.Requirement - result2 error - }{result1, result2} -} - -func (fake *FakeCommand) Run(context *cli.Context) { - fake.runMutex.Lock() - defer fake.runMutex.Unlock() - fake.runArgsForCall = append(fake.runArgsForCall, struct { - context *cli.Context - }{context}) - if fake.RunStub != nil { - fake.RunStub(context) - } -} - -func (fake *FakeCommand) RunCallCount() int { - fake.runMutex.RLock() - defer fake.runMutex.RUnlock() - return len(fake.runArgsForCall) -} - -func (fake *FakeCommand) RunArgsForCall(i int) *cli.Context { - fake.runMutex.RLock() - defer fake.runMutex.RUnlock() - return fake.runArgsForCall[i].context -} - -var _ command.Command = new(FakeCommand) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/command_factory_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/command_factory_suite_test.go deleted file mode 100644 index 7530356..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/command_factory_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package command_factory_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCommandFactory(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Command Factory Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/factory.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/factory.go deleted file mode 100644 index f5c652e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/factory.go +++ /dev/null @@ -1,385 +0,0 @@ -package command_factory - -import ( - "errors" - - actor_plugin_repo "github.com/cloudfoundry/cli/cf/actors/plugin_repo" - "github.com/cloudfoundry/cli/plugin/rpc" - "github.com/cloudfoundry/cli/utils" - - "github.com/cloudfoundry/cli/cf/actors/plan_builder" - "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/codegangsta/cli" - - "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/actors/broker_builder" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/commands/buildpack" - "github.com/cloudfoundry/cli/cf/commands/domain" - "github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup" - "github.com/cloudfoundry/cli/cf/commands/featureflag" - "github.com/cloudfoundry/cli/cf/commands/organization" - "github.com/cloudfoundry/cli/cf/commands/plugin" - "github.com/cloudfoundry/cli/cf/commands/plugin_repo" - "github.com/cloudfoundry/cli/cf/commands/quota" - "github.com/cloudfoundry/cli/cf/commands/route" - "github.com/cloudfoundry/cli/cf/commands/securitygroup" - "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/commands/serviceaccess" - "github.com/cloudfoundry/cli/cf/commands/serviceauthtoken" - "github.com/cloudfoundry/cli/cf/commands/servicebroker" - "github.com/cloudfoundry/cli/cf/commands/servicekey" - "github.com/cloudfoundry/cli/cf/commands/space" - "github.com/cloudfoundry/cli/cf/commands/spacequota" - "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/words/generator" -) - -type Factory interface { - GetByCmdName(cmdName string) (cmd command.Command, err error) - CommandMetadatas() []command_metadata.CommandMetadata - CheckIfCoreCmdExists(cmdName string) bool - GetCommandFlags(string) []string - GetCommandTotalArgs(string) (int, error) -} - -type concreteFactory struct { - cmdsByName map[string]command.Command -} - -func NewFactory(ui terminal.UI, config core_config.ReadWriter, manifestRepo manifest.ManifestRepository, repoLocator api.RepositoryLocator, pluginConfig plugin_config.PluginConfiguration, rpcService *rpc.CliRpcService) (factory concreteFactory) { - factory.cmdsByName = make(map[string]command.Command) - - planBuilder := plan_builder.NewBuilder( - repoLocator.GetServicePlanRepository(), - repoLocator.GetServicePlanVisibilityRepository(), - repoLocator.GetOrganizationRepository(), - ) - - serviceBuilder := service_builder.NewBuilder( - repoLocator.GetServiceRepository(), - - planBuilder, - ) - - brokerBuilder := broker_builder.NewBuilder( - repoLocator.GetServiceBrokerRepository(), - serviceBuilder, - ) - - factory.cmdsByName["auth"] = commands.NewAuthenticate(ui, config, repoLocator.GetAuthenticationRepository()) - factory.cmdsByName["buildpacks"] = buildpack.NewListBuildpacks(ui, repoLocator.GetBuildpackRepository()) - factory.cmdsByName["config"] = commands.NewConfig(ui, config) - factory.cmdsByName["create-app-manifest"] = commands.NewCreateAppManifest(ui, config, repoLocator.GetAppSummaryRepository(), manifest.NewGenerator()) - factory.cmdsByName["create-buildpack"] = buildpack.NewCreateBuildpack(ui, repoLocator.GetBuildpackRepository(), repoLocator.GetBuildpackBitsRepository()) - factory.cmdsByName["create-domain"] = domain.NewCreateDomain(ui, config, repoLocator.GetDomainRepository()) - factory.cmdsByName["create-org"] = organization.NewCreateOrg(ui, config, repoLocator.GetOrganizationRepository(), repoLocator.GetQuotaRepository()) - factory.cmdsByName["create-service"] = service.NewCreateService(ui, config, repoLocator.GetServiceRepository(), serviceBuilder) - - factory.cmdsByName["update-service"] = service.NewUpdateService( - ui, - config, - repoLocator.GetServiceRepository(), - plan_builder.NewBuilder( - repoLocator.GetServicePlanRepository(), - repoLocator.GetServicePlanVisibilityRepository(), - repoLocator.GetOrganizationRepository(), - ), - ) - - factory.cmdsByName["create-service-auth-token"] = serviceauthtoken.NewCreateServiceAuthToken(ui, config, repoLocator.GetServiceAuthTokenRepository()) - factory.cmdsByName["create-service-broker"] = servicebroker.NewCreateServiceBroker(ui, config, repoLocator.GetServiceBrokerRepository()) - factory.cmdsByName["create-service-key"] = servicekey.NewCreateServiceKey(ui, config, repoLocator.GetServiceRepository(), repoLocator.GetServiceKeyRepository()) - factory.cmdsByName["create-user"] = user.NewCreateUser(ui, config, repoLocator.GetUserRepository()) - factory.cmdsByName["create-user-provided-service"] = service.NewCreateUserProvidedService(ui, config, repoLocator.GetUserProvidedServiceInstanceRepository()) - factory.cmdsByName["curl"] = commands.NewCurl(ui, config, repoLocator.GetCurlRepository()) - factory.cmdsByName["delete"] = application.NewDeleteApp(ui, config, repoLocator.GetApplicationRepository(), repoLocator.GetRouteRepository()) - factory.cmdsByName["delete-buildpack"] = buildpack.NewDeleteBuildpack(ui, repoLocator.GetBuildpackRepository()) - factory.cmdsByName["delete-domain"] = domain.NewDeleteDomain(ui, config, repoLocator.GetDomainRepository()) - factory.cmdsByName["delete-shared-domain"] = domain.NewDeleteSharedDomain(ui, config, repoLocator.GetDomainRepository()) - factory.cmdsByName["delete-org"] = organization.NewDeleteOrg(ui, config, repoLocator.GetOrganizationRepository()) - factory.cmdsByName["delete-orphaned-routes"] = route.NewDeleteOrphanedRoutes(ui, config, repoLocator.GetRouteRepository()) - factory.cmdsByName["delete-route"] = route.NewDeleteRoute(ui, config, repoLocator.GetRouteRepository()) - factory.cmdsByName["delete-service"] = service.NewDeleteService(ui, config, repoLocator.GetServiceRepository()) - factory.cmdsByName["delete-service-key"] = servicekey.NewDeleteServiceKey(ui, config, repoLocator.GetServiceRepository(), repoLocator.GetServiceKeyRepository()) - factory.cmdsByName["delete-service-auth-token"] = serviceauthtoken.NewDeleteServiceAuthToken(ui, config, repoLocator.GetServiceAuthTokenRepository()) - factory.cmdsByName["delete-service-broker"] = servicebroker.NewDeleteServiceBroker(ui, config, repoLocator.GetServiceBrokerRepository()) - factory.cmdsByName["delete-space"] = space.NewDeleteSpace(ui, config, repoLocator.GetSpaceRepository()) - factory.cmdsByName["delete-user"] = user.NewDeleteUser(ui, config, repoLocator.GetUserRepository()) - factory.cmdsByName["domains"] = domain.NewListDomains(ui, config, repoLocator.GetDomainRepository()) - factory.cmdsByName["env"] = application.NewEnv(ui, config, repoLocator.GetApplicationRepository()) - factory.cmdsByName["events"] = application.NewEvents(ui, config, repoLocator.GetAppEventsRepository()) - factory.cmdsByName["files"] = application.NewFiles(ui, config, repoLocator.GetAppFilesRepository()) - factory.cmdsByName["login"] = commands.NewLogin(ui, config, repoLocator.GetAuthenticationRepository(), repoLocator.GetEndpointRepository(), repoLocator.GetOrganizationRepository(), repoLocator.GetSpaceRepository()) - factory.cmdsByName["logout"] = commands.NewLogout(ui, config) - factory.cmdsByName["logs"] = application.NewLogs(ui, config, repoLocator.GetLogsNoaaRepository(), repoLocator.GetOldLogsRepository()) - factory.cmdsByName["oauth-token"] = commands.NewOAuthToken(ui, config, repoLocator.GetAuthenticationRepository()) - factory.cmdsByName["passwd"] = commands.NewPassword(ui, repoLocator.GetPasswordRepository(), config) - factory.cmdsByName["purge-service-offering"] = service.NewPurgeServiceOffering(ui, config, repoLocator.GetServiceRepository()) - factory.cmdsByName["quotas"] = quota.NewListQuotas(ui, config, repoLocator.GetQuotaRepository()) - factory.cmdsByName["quota"] = quota.NewShowQuota(ui, config, repoLocator.GetQuotaRepository()) - factory.cmdsByName["create-quota"] = quota.NewCreateQuota(ui, config, repoLocator.GetQuotaRepository()) - factory.cmdsByName["update-quota"] = quota.NewUpdateQuota(ui, config, repoLocator.GetQuotaRepository()) - factory.cmdsByName["delete-quota"] = quota.NewDeleteQuota(ui, config, repoLocator.GetQuotaRepository()) - factory.cmdsByName["rename"] = application.NewRenameApp(ui, config, repoLocator.GetApplicationRepository()) - factory.cmdsByName["rename-buildpack"] = buildpack.NewRenameBuildpack(ui, repoLocator.GetBuildpackRepository()) - factory.cmdsByName["rename-org"] = organization.NewRenameOrg(ui, config, repoLocator.GetOrganizationRepository()) - factory.cmdsByName["rename-service"] = service.NewRenameService(ui, config, repoLocator.GetServiceRepository()) - factory.cmdsByName["rename-service-broker"] = servicebroker.NewRenameServiceBroker(ui, config, repoLocator.GetServiceBrokerRepository()) - factory.cmdsByName["rename-space"] = space.NewRenameSpace(ui, config, repoLocator.GetSpaceRepository()) - factory.cmdsByName["routes"] = route.NewListRoutes(ui, config, repoLocator.GetRouteRepository()) - factory.cmdsByName["check-route"] = route.NewCheckRoute(ui, config, repoLocator.GetRouteRepository(), repoLocator.GetDomainRepository()) - factory.cmdsByName["service-auth-tokens"] = serviceauthtoken.NewListServiceAuthTokens(ui, config, repoLocator.GetServiceAuthTokenRepository()) - factory.cmdsByName["service-brokers"] = servicebroker.NewListServiceBrokers(ui, config, repoLocator.GetServiceBrokerRepository()) - factory.cmdsByName["service-keys"] = servicekey.NewListServiceKeys(ui, config, repoLocator.GetServiceRepository(), repoLocator.GetServiceKeyRepository()) - factory.cmdsByName["service-key"] = servicekey.NewGetServiceKey(ui, config, repoLocator.GetServiceRepository(), repoLocator.GetServiceKeyRepository()) - factory.cmdsByName["migrate-service-instances"] = service.NewMigrateServiceInstances(ui, config, repoLocator.GetServiceRepository()) - factory.cmdsByName["set-env"] = application.NewSetEnv(ui, config, repoLocator.GetApplicationRepository()) - factory.cmdsByName["set-org-role"] = user.NewSetOrgRole(ui, config, repoLocator.GetUserRepository()) - factory.cmdsByName["set-quota"] = organization.NewSetQuota(ui, config, repoLocator.GetQuotaRepository()) - factory.cmdsByName["create-shared-domain"] = domain.NewCreateSharedDomain(ui, config, repoLocator.GetDomainRepository()) - factory.cmdsByName["stacks"] = commands.NewListStacks(ui, config, repoLocator.GetStackRepository()) - factory.cmdsByName["stack"] = commands.NewListStack(ui, config, repoLocator.GetStackRepository()) - factory.cmdsByName["target"] = commands.NewTarget(ui, config, repoLocator.GetOrganizationRepository(), repoLocator.GetSpaceRepository()) - factory.cmdsByName["unbind-service"] = service.NewUnbindService(ui, config, repoLocator.GetServiceBindingRepository()) - factory.cmdsByName["unset-env"] = application.NewUnsetEnv(ui, config, repoLocator.GetApplicationRepository()) - factory.cmdsByName["unset-org-role"] = user.NewUnsetOrgRole(ui, config, repoLocator.GetUserRepository()) - factory.cmdsByName["unset-space-role"] = user.NewUnsetSpaceRole(ui, config, repoLocator.GetSpaceRepository(), repoLocator.GetUserRepository()) - factory.cmdsByName["update-buildpack"] = buildpack.NewUpdateBuildpack(ui, repoLocator.GetBuildpackRepository(), repoLocator.GetBuildpackBitsRepository()) - factory.cmdsByName["update-service-broker"] = servicebroker.NewUpdateServiceBroker(ui, config, repoLocator.GetServiceBrokerRepository()) - factory.cmdsByName["update-service-auth-token"] = serviceauthtoken.NewUpdateServiceAuthToken(ui, config, repoLocator.GetServiceAuthTokenRepository()) - factory.cmdsByName["update-user-provided-service"] = service.NewUpdateUserProvidedService(ui, config, repoLocator.GetUserProvidedServiceInstanceRepository()) - factory.cmdsByName["create-security-group"] = securitygroup.NewCreateSecurityGroup(ui, config, repoLocator.GetSecurityGroupRepository()) - factory.cmdsByName["update-security-group"] = securitygroup.NewUpdateSecurityGroup(ui, config, repoLocator.GetSecurityGroupRepository()) - factory.cmdsByName["delete-security-group"] = securitygroup.NewDeleteSecurityGroup(ui, config, repoLocator.GetSecurityGroupRepository()) - factory.cmdsByName["security-group"] = securitygroup.NewShowSecurityGroup(ui, config, repoLocator.GetSecurityGroupRepository()) - factory.cmdsByName["security-groups"] = securitygroup.NewSecurityGroups(ui, config, repoLocator.GetSecurityGroupRepository()) - factory.cmdsByName["bind-staging-security-group"] = securitygroup.NewBindToStagingGroup( - ui, - config, - repoLocator.GetSecurityGroupRepository(), - repoLocator.GetStagingSecurityGroupsRepository(), - ) - factory.cmdsByName["staging-security-groups"] = securitygroup.NewListStagingSecurityGroups(ui, config, repoLocator.GetStagingSecurityGroupsRepository()) - factory.cmdsByName["unbind-staging-security-group"] = securitygroup.NewUnbindFromStagingGroup( - ui, - config, - repoLocator.GetSecurityGroupRepository(), - repoLocator.GetStagingSecurityGroupsRepository(), - ) - factory.cmdsByName["bind-running-security-group"] = securitygroup.NewBindToRunningGroup( - ui, - config, - repoLocator.GetSecurityGroupRepository(), - repoLocator.GetRunningSecurityGroupsRepository(), - ) - factory.cmdsByName["unbind-running-security-group"] = securitygroup.NewUnbindFromRunningGroup( - ui, - config, - repoLocator.GetSecurityGroupRepository(), - repoLocator.GetRunningSecurityGroupsRepository(), - ) - factory.cmdsByName["running-security-groups"] = securitygroup.NewListRunningSecurityGroups(ui, config, repoLocator.GetRunningSecurityGroupsRepository()) - factory.cmdsByName["bind-security-group"] = securitygroup.NewBindSecurityGroup( - ui, - config, - repoLocator.GetSecurityGroupRepository(), - repoLocator.GetSpaceRepository(), - repoLocator.GetOrganizationRepository(), - repoLocator.GetSecurityGroupSpaceBinder(), - ) - factory.cmdsByName["unbind-security-group"] = securitygroup.NewUnbindSecurityGroup(ui, config, repoLocator.GetSecurityGroupRepository(), repoLocator.GetOrganizationRepository(), repoLocator.GetSpaceRepository(), repoLocator.GetSecurityGroupSpaceBinder()) - - createRoute := route.NewCreateRoute(ui, config, repoLocator.GetRouteRepository()) - factory.cmdsByName["create-route"] = createRoute - factory.cmdsByName["map-route"] = route.NewMapRoute(ui, config, repoLocator.GetRouteRepository(), createRoute) - factory.cmdsByName["unmap-route"] = route.NewUnmapRoute(ui, config, repoLocator.GetRouteRepository()) - - displayApp := application.NewShowApp(ui, config, repoLocator.GetAppSummaryRepository(), repoLocator.GetAppInstancesRepository(), repoLocator.GetLogsNoaaRepository()) - start := application.NewStart(ui, config, displayApp, repoLocator.GetApplicationRepository(), repoLocator.GetAppInstancesRepository(), repoLocator.GetLogsNoaaRepository(), repoLocator.GetOldLogsRepository()) - stop := application.NewStop(ui, config, repoLocator.GetApplicationRepository()) - restart := application.NewRestart(ui, config, start, stop) - restage := application.NewRestage(ui, config, repoLocator.GetApplicationRepository(), start) - bind := service.NewBindService(ui, config, repoLocator.GetServiceBindingRepository()) - - factory.cmdsByName["bind-service"] = bind - factory.cmdsByName["start"] = start - factory.cmdsByName["stop"] = stop - factory.cmdsByName["restart"] = restart - factory.cmdsByName["restart-app-instance"] = application.NewRestartAppInstance(ui, config, repoLocator.GetAppInstancesRepository()) - factory.cmdsByName["restage"] = restage - factory.cmdsByName["push"] = application.NewPush( - ui, config, manifestRepo, start, stop, bind, - repoLocator.GetApplicationRepository(), - repoLocator.GetDomainRepository(), - repoLocator.GetRouteRepository(), - repoLocator.GetStackRepository(), - repoLocator.GetServiceRepository(), - repoLocator.GetAuthenticationRepository(), - generator.NewWordGenerator(), - actors.NewPushActor(repoLocator.GetApplicationBitsRepository(), app_files.ApplicationZipper{}, app_files.ApplicationFiles{}), - app_files.ApplicationZipper{}, - app_files.ApplicationFiles{}) - - factory.cmdsByName["scale"] = application.NewScale(ui, config, restart, repoLocator.GetApplicationRepository()) - - spaceRoleSetter := user.NewSetSpaceRole(ui, config, repoLocator.GetSpaceRepository(), repoLocator.GetUserRepository()) - factory.cmdsByName["set-space-role"] = spaceRoleSetter - factory.cmdsByName["create-space"] = space.NewCreateSpace(ui, config, spaceRoleSetter, repoLocator.GetSpaceRepository(), repoLocator.GetOrganizationRepository(), repoLocator.GetUserRepository(), repoLocator.GetSpaceQuotaRepository()) - - factory.cmdsByName["service-access"] = serviceaccess.NewServiceAccess( - ui, config, - actors.NewServiceHandler( - repoLocator.GetOrganizationRepository(), - brokerBuilder, - serviceBuilder, - ), - repoLocator.GetAuthenticationRepository(), - ) - factory.cmdsByName["enable-service-access"] = serviceaccess.NewEnableServiceAccess( - ui, config, - actors.NewServicePlanHandler( - repoLocator.GetServicePlanRepository(), - repoLocator.GetServicePlanVisibilityRepository(), - repoLocator.GetOrganizationRepository(), - planBuilder, - serviceBuilder, - ), - repoLocator.GetAuthenticationRepository(), - ) - factory.cmdsByName["disable-service-access"] = serviceaccess.NewDisableServiceAccess( - ui, config, - actors.NewServicePlanHandler( - repoLocator.GetServicePlanRepository(), - repoLocator.GetServicePlanVisibilityRepository(), - repoLocator.GetOrganizationRepository(), - planBuilder, - serviceBuilder, - ), - repoLocator.GetAuthenticationRepository(), - ) - - factory.cmdsByName["marketplace"] = service.NewMarketplaceServices(ui, config, serviceBuilder) - - factory.cmdsByName["create-space-quota"] = spacequota.NewCreateSpaceQuota(ui, config, repoLocator.GetSpaceQuotaRepository(), repoLocator.GetOrganizationRepository()) - factory.cmdsByName["delete-space-quota"] = spacequota.NewDeleteSpaceQuota(ui, config, repoLocator.GetSpaceQuotaRepository()) - - factory.cmdsByName["space-quotas"] = spacequota.NewListSpaceQuotas(ui, config, repoLocator.GetSpaceQuotaRepository()) - factory.cmdsByName["space-quota"] = spacequota.NewSpaceQuota(ui, config, repoLocator.GetSpaceQuotaRepository()) - factory.cmdsByName["update-space-quota"] = spacequota.NewUpdateSpaceQuota(ui, config, repoLocator.GetSpaceQuotaRepository()) - factory.cmdsByName["set-space-quota"] = spacequota.NewSetSpaceQuota(ui, config, repoLocator.GetSpaceRepository(), repoLocator.GetSpaceQuotaRepository()) - factory.cmdsByName["unset-space-quota"] = spacequota.NewUnsetSpaceQuota(ui, config, repoLocator.GetSpaceQuotaRepository(), repoLocator.GetSpaceRepository()) - factory.cmdsByName["feature-flags"] = featureflag.NewListFeatureFlags(ui, config, repoLocator.GetFeatureFlagRepository()) - factory.cmdsByName["feature-flag"] = featureflag.NewShowFeatureFlag(ui, config, repoLocator.GetFeatureFlagRepository()) - factory.cmdsByName["enable-feature-flag"] = featureflag.NewEnableFeatureFlag(ui, config, repoLocator.GetFeatureFlagRepository()) - factory.cmdsByName["disable-feature-flag"] = featureflag.NewDisableFeatureFlag(ui, config, repoLocator.GetFeatureFlagRepository()) - factory.cmdsByName["running-environment-variable-group"] = environmentvariablegroup.NewRunningEnvironmentVariableGroup(ui, config, repoLocator.GetEnvironmentVariableGroupsRepository()) - factory.cmdsByName["staging-environment-variable-group"] = environmentvariablegroup.NewStagingEnvironmentVariableGroup(ui, config, repoLocator.GetEnvironmentVariableGroupsRepository()) - factory.cmdsByName["set-staging-environment-variable-group"] = environmentvariablegroup.NewSetStagingEnvironmentVariableGroup(ui, config, repoLocator.GetEnvironmentVariableGroupsRepository()) - factory.cmdsByName["set-running-environment-variable-group"] = environmentvariablegroup.NewSetRunningEnvironmentVariableGroup(ui, config, repoLocator.GetEnvironmentVariableGroupsRepository()) - - factory.cmdsByName["uninstall-plugin"] = plugin.NewPluginUninstall(ui, pluginConfig, rpcService) - factory.cmdsByName["install-plugin"] = plugin.NewPluginInstall(ui, config, pluginConfig, factory.cmdsByName, actor_plugin_repo.NewPluginRepo(), utils.NewSha1Checksum(""), rpcService) - factory.cmdsByName["plugins"] = plugin.NewPlugins(ui, pluginConfig) - - factory.cmdsByName["add-plugin-repo"] = plugin_repo.NewAddPluginRepo(ui, config) - factory.cmdsByName["list-plugin-repos"] = plugin_repo.NewListPluginRepos(ui, config) - factory.cmdsByName["remove-plugin-repo"] = plugin_repo.NewRemovePluginRepo(ui, config) - factory.cmdsByName["repo-plugins"] = plugin_repo.NewRepoPlugins(ui, config, actor_plugin_repo.NewPluginRepo()) - - factory.cmdsByName["copy-source"] = application.NewCopySource( - ui, - config, - repoLocator.GetAuthenticationRepository(), - repoLocator.GetApplicationRepository(), - repoLocator.GetOrganizationRepository(), - repoLocator.GetSpaceRepository(), - repoLocator.GetCopyApplicationSourceRepository(), - restart, //note this is built up above. - ) - - factory.cmdsByName["share-private-domain"] = organization.NewSharePrivateDomain(ui, config, repoLocator.GetOrganizationRepository(), repoLocator.GetDomainRepository()) - factory.cmdsByName["unshare-private-domain"] = organization.NewUnsharePrivateDomain(ui, config, repoLocator.GetOrganizationRepository(), repoLocator.GetDomainRepository()) - - return -} - -func (f concreteFactory) GetByCmdName(cmdName string) (cmd command.Command, err error) { - cmd, found := f.cmdsByName[cmdName] - if !found { - for _, c := range f.cmdsByName { - if c.Metadata().ShortName == cmdName { - return c, nil - } - } - - err = errors.New(T("Command not found")) - } - return -} - -func (f concreteFactory) CheckIfCoreCmdExists(cmdName string) bool { - if _, exists := f.cmdsByName[cmdName]; exists { - return true - } - - for _, singleCmd := range f.cmdsByName { - metaData := singleCmd.Metadata() - if metaData.ShortName == cmdName { - return true - } - } - - return false -} - -func (factory concreteFactory) CommandMetadatas() (commands []command_metadata.CommandMetadata) { - for _, command := range factory.cmdsByName { - commands = append(commands, command.Metadata()) - } - return -} - -func (f concreteFactory) GetCommandFlags(command string) []string { - cmd, err := f.GetByCmdName(command) - if err != nil { - return []string{} - } - - var flags []string - for _, flag := range cmd.Metadata().Flags { - switch t := flag.(type) { - default: - case flag_helpers.StringSliceFlagWithNoDefault: - flags = append(flags, t.Name) - case flag_helpers.IntFlagWithNoDefault: - flags = append(flags, t.Name) - case flag_helpers.StringFlagWithNoDefault: - flags = append(flags, t.Name) - case cli.BoolFlag: - flags = append(flags, t.Name) - } - } - - return flags -} - -func (f concreteFactory) GetCommandTotalArgs(command string) (int, error) { - cmd, err := f.GetByCmdName(command) - if err != nil { - return 0, err - } - - return cmd.Metadata().TotalArgs, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/factory_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/factory_test.go deleted file mode 100644 index 33abe5a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_factory/factory_test.go +++ /dev/null @@ -1,157 +0,0 @@ -package command_factory_test - -import ( - "os" - "path/filepath" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf/api" - testPluginConfig "github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/plugin/rpc" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/command_factory" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("factory", func() { - var ( - factory Factory - ) - - BeforeEach(func() { - fakeUI := &testterm.FakeUI{} - config := testconfig.NewRepository() - manifestRepo := manifest.NewManifestDiskRepository() - pluginConfig := &testPluginConfig.FakePluginConfiguration{} - repoLocator := api.NewRepositoryLocator(config, map[string]net.Gateway{ - "auth": net.NewUAAGateway(config, fakeUI), - "cloud-controller": net.NewCloudControllerGateway(config, time.Now, fakeUI), - "uaa": net.NewUAAGateway(config, fakeUI), - }) - - rpcService, _ := rpc.NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - factory = NewFactory(fakeUI, config, manifestRepo, repoLocator, pluginConfig, rpcService) - }) - - It("provides the metadata for its commands", func() { - commands := factory.CommandMetadatas() - - suffixesToIgnore := []string{ - "i18n_init.go", // ignore all i18n initializers - "_test.go", // ignore test files - ".test", // ignore generated .test (temporary files) - ".test.exe", // ignore generated .test (temporary files) - ".coverprofile", // ignore generated .coverprofile (ginkgo files to test code coverage) - "#", // emacs autosave files - } - - err := filepath.Walk("../commands", func(path string, info os.FileInfo, err error) error { - if info.IsDir() { - return nil - } - - if info.Name() == "api.go" || info.Name() == "app.go" || - info.Name() == "apps.go" || info.Name() == "orgs.go" || - info.Name() == "spaces.go" || info.Name() == "org_users.go" || - info.Name() == "space_users.go" || info.Name() == "services.go" || - info.Name() == "org.go" || info.Name() == "space.go" || - info.Name() == "service.go" { - return nil - } - - for _, suffix := range suffixesToIgnore { - if strings.HasSuffix(path, suffix) { - return nil - } - } - - extension := filepath.Ext(info.Name()) - expectedCommandName := strings.Replace(info.Name()[0:len(info.Name())-len(extension)], "_", "-", -1) - - matchingCount := 0 - for _, command := range commands { - if command.Name == expectedCommandName { - matchingCount++ - } - } - - Expect(matchingCount).To(Equal(1), "this file has no corresponding command: "+info.Name()) - return nil - }) - - Expect(err).NotTo(HaveOccurred()) - }) - Describe("GetByCmdName", func() { - It("returns the cmd if it exists", func() { - cmd, err := factory.GetByCmdName("push") - Expect(cmd).ToNot(BeNil()) - Expect(err).ToNot(HaveOccurred()) - }) - - It("can find commands by short name", func() { - cmd, err := factory.GetByCmdName("p") - Expect(cmd).ToNot(BeNil()) - Expect(err).ToNot(HaveOccurred()) - }) - - It("returns an error if it does not exist", func() { - cmd, err := factory.GetByCmdName("FOOBARRRRR") - Expect(cmd).To(BeNil()) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe("CheckIfCoreCmdExists", func() { - It("returns true if the cmd exists", func() { - exists := factory.CheckIfCoreCmdExists("push") - Expect(exists).To(BeTrue()) - }) - - It("retruns true if the cmd short name exists", func() { - exists := factory.CheckIfCoreCmdExists("p") - Expect(exists).To(BeTrue()) - }) - - It("returns an error if it does not exist", func() { - exists := factory.CheckIfCoreCmdExists("FOOOOBARRRR") - Expect(exists).To(BeFalse()) - }) - }) - - Describe("GetCommandFlags", func() { - It("returns a list of flags for the command", func() { - flags := factory.GetCommandFlags("push") - Expect(contains(flags, "b")).To(Equal(true)) - Expect(contains(flags, "c")).To(Equal(true)) - Expect(contains(flags, "no-hostname")).To(Equal(true)) - }) - }) - - Describe("GetCommandTotalArgs", func() { - It("returns the total number of argument required by the command ", func() { - totalArgs, err := factory.GetCommandTotalArgs("create-buildpack") - Expect(err).ToNot(HaveOccurred()) - Expect(totalArgs).To(Equal(3)) - }) - - It("returns an error if command does not exist", func() { - _, err := factory.GetCommandTotalArgs("not-a-command") - Expect(err).To(HaveOccurred()) - }) - }) -}) - -func contains(ary []string, item string) bool { - for _, v := range ary { - if v == item { - return true - } - } - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_metadata/command_metadata.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_metadata/command_metadata.go deleted file mode 100644 index a583bf0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_metadata/command_metadata.go +++ /dev/null @@ -1,13 +0,0 @@ -package command_metadata - -import "github.com/codegangsta/cli" - -type CommandMetadata struct { - Name string - ShortName string - Usage string - Description string - Flags []cli.Flag - SkipFlagParsing bool - TotalArgs int //Optional: number of required arguments to skip for flag verification -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/command.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/command.go deleted file mode 100644 index eacf37b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/command.go +++ /dev/null @@ -1,23 +0,0 @@ -package command_registry - -import ( - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/flags" -) - -type Command interface { - MetaData() CommandMetadata - SetDependency(deps Dependency, pluginCall bool) Command - Requirements(requirementsFactory requirements.Factory, context flags.FlagContext) (reqs []requirements.Requirement, err error) - Execute(context flags.FlagContext) -} - -type CommandMetadata struct { - Name string - ShortName string - Usage string - Description string - Flags map[string]flags.FlagSet - SkipFlagParsing bool - TotalArgs int //Optional: number of required arguments to skip for flag verification -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/command_registry_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/command_registry_suite_test.go deleted file mode 100644 index 1cf97ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/command_registry_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package command_registry_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCommandRegistry(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "CommandRegistry Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/dependency.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/dependency.go deleted file mode 100644 index b1ac545..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/dependency.go +++ /dev/null @@ -1,79 +0,0 @@ -package command_registry - -import ( - "fmt" - "os" - "time" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/trace" - "github.com/cloudfoundry/cli/plugin/models" -) - -type Dependency struct { - Ui terminal.UI - Config core_config.Repository - RepoLocator api.RepositoryLocator - Detector detection.Detector - PluginConfig plugin_config.PluginConfiguration - ManifestRepo manifest.ManifestRepository - Gateways map[string]net.Gateway - TeePrinter *terminal.TeePrinter - PluginModels *pluginModels -} - -type pluginModels struct { - Application *plugin_models.GetAppModel - AppsSummary *[]plugin_models.GetAppsModel - Organizations *[]plugin_models.GetOrgs_Model - Organization *plugin_models.GetOrg_Model - Spaces *[]plugin_models.GetSpaces_Model - Space *plugin_models.GetSpace_Model - OrgUsers *[]plugin_models.GetOrgUsers_Model - SpaceUsers *[]plugin_models.GetSpaceUsers_Model - Services *[]plugin_models.GetServices_Model - Service *plugin_models.GetService_Model -} - -func NewDependency() Dependency { - deps := Dependency{} - deps.TeePrinter = terminal.NewTeePrinter() - deps.Ui = terminal.NewUI(os.Stdin, deps.TeePrinter) - deps.ManifestRepo = manifest.NewManifestDiskRepository() - - errorHandler := func(err error) { - if err != nil { - deps.Ui.Failed(fmt.Sprintf("Config error: %s", err)) - } - } - deps.Config = core_config.NewRepositoryFromFilepath(config_helpers.DefaultFilePath(), errorHandler) - deps.PluginConfig = plugin_config.NewPluginConfig(errorHandler) - deps.Detector = &detection.JibberJabberDetector{} - - terminal.UserAskedForColors = deps.Config.ColorEnabled() - terminal.InitColorSupport() - - if os.Getenv("CF_TRACE") != "" { - trace.Logger = trace.NewLogger(os.Getenv("CF_TRACE")) - } else { - trace.Logger = trace.NewLogger(deps.Config.Trace()) - } - - deps.Gateways = map[string]net.Gateway{ - "auth": net.NewUAAGateway(deps.Config, deps.Ui), - "cloud-controller": net.NewCloudControllerGateway(deps.Config, time.Now, deps.Ui), - "uaa": net.NewUAAGateway(deps.Config, deps.Ui), - } - deps.RepoLocator = api.NewRepositoryLocator(deps.Config, deps.Gateways) - - deps.PluginModels = &pluginModels{Application: nil} - - return deps -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/fake_command/fake_command1.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/fake_command/fake_command1.go deleted file mode 100644 index 793bab6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/fake_command/fake_command1.go +++ /dev/null @@ -1,44 +0,0 @@ -package fake_command - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" -) - -type FakeCommand1 struct { - Data string -} - -func init() { - command_registry.Register(FakeCommand1{Data: "FakeCommand1 data"}) -} - -func (cmd FakeCommand1) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["boolFlag"] = &cliFlags.BoolFlag{Name: "BoolFlag", Usage: "Usage for BoolFlag"} - fs["intFlag"] = &cliFlags.IntFlag{Name: "intFlag", Usage: "Usage for intFlag"} - - return command_registry.CommandMetadata{ - Name: "fake-command", - ShortName: "fc1", - Description: "Description for fake-command", - Usage: "Usage of fake-command", - Flags: fs, - } -} - -func (cmd FakeCommand1) Requirements(_ requirements.Factory, _ flags.FlagContext) (reqs []requirements.Requirement, err error) { - return -} - -func (cmd FakeCommand1) SetDependency(deps command_registry.Dependency, _ bool) command_registry.Command { - return cmd -} - -func (cmd FakeCommand1) Execute(c flags.FlagContext) { - fmt.Println("This is fake-command") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/fake_command/fake_command2.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/fake_command/fake_command2.go deleted file mode 100644 index 16c8405..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/fake_command/fake_command2.go +++ /dev/null @@ -1,31 +0,0 @@ -package fake_command - -import ( - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/flags" -) - -type FakeCommand2 struct { - Data string -} - -func (cmd FakeCommand2) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "fake-command2", - ShortName: "fc2", - Description: "Description for fake-command2", - Usage: "Usage of fake-command2", - } -} - -func (cmd FakeCommand2) Requirements(_ requirements.Factory, _ flags.FlagContext) (reqs []requirements.Requirement, err error) { - return -} - -func (cmd FakeCommand2) SetDependency(deps command_registry.Dependency, _ bool) command_registry.Command { - return cmd -} - -func (cmd FakeCommand2) Execute(c flags.FlagContext) { -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/registry.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/registry.go deleted file mode 100644 index 9599293..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/registry.go +++ /dev/null @@ -1,124 +0,0 @@ -package command_registry - -import ( - "fmt" - "os" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - . "github.com/cloudfoundry/cli/cf/terminal" -) - -var _ = initI18nFunc() -var Commands = NewRegistry() - -func initI18nFunc() bool { - errorHandler := func(err error) { - if err != nil { - fmt.Println(FailureColor("FAILED")) - fmt.Println("Error read/writing config: ", err.Error()) - os.Exit(1) - } - } - T = Init(core_config.NewRepositoryFromFilepath(config_helpers.DefaultFilePath(), errorHandler), &detection.JibberJabberDetector{}) - return true -} - -type registry struct { - cmd map[string]Command - alias map[string]string -} - -func NewRegistry() *registry { - return ®istry{ - cmd: make(map[string]Command), - alias: make(map[string]string), - } -} - -func Register(cmd Command) { - m := cmd.MetaData() - Commands.cmd[m.Name] = cmd - - Commands.alias[m.ShortName] = m.Name -} - -func (r *registry) FindCommand(name string) Command { - if _, ok := r.cmd[name]; ok { - return r.cmd[name] - } - - if alias, exists := r.alias[name]; exists { - return r.cmd[alias] - } - - return nil -} - -func (r *registry) CommandExists(name string) bool { - var ok bool - - if _, ok = r.cmd[name]; !ok { - alias, exists := r.alias[name] - - if exists { - _, ok = r.cmd[alias] - } - } - - return ok -} - -func (r *registry) SetCommand(cmd Command) { - r.cmd[cmd.MetaData().Name] = cmd -} - -func (r *registry) CommandUsage(cmdName string) string { - output := "" - cmd := r.FindCommand(cmdName) - - output = T("NAME") + ":" + "\n" - output += " " + cmd.MetaData().Name + " - " + cmd.MetaData().Description + "\n\n" - - output += T("USAGE") + ":" + "\n" - output += " " + cmd.MetaData().Usage + "\n" - - if cmd.MetaData().ShortName != "" { - output += "\n" + T("ALIAS") + ":" + "\n" - output += " " + cmd.MetaData().ShortName + "\n" - } - - if cmd.MetaData().Flags != nil { - output += "\n" + T("OPTIONS") + ":" + "\n" - - //find longest name length - l := 0 - for n, _ := range cmd.MetaData().Flags { - if len(n) > l { - l = len(n) - } - } - - //print non-bool flags first - for n, f := range cmd.MetaData().Flags { - switch f.GetValue().(type) { - case bool: - default: - output += " -" + n + strings.Repeat(" ", 7+(l-len(n))) + f.String() + "\n" - } - } - - //then bool flags - for n, f := range cmd.MetaData().Flags { - switch f.GetValue().(type) { - case bool: - output += " --" + n + strings.Repeat(" ", 6+(l-len(n))) + f.String() + "\n" - } - } - } - - return output -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/registry_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/registry_test.go deleted file mode 100644 index 5b9df6f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_registry/registry_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package command_registry_test - -import ( - "strings" - - . "github.com/cloudfoundry/cli/cf/command_registry/fake_command" - - . "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/cloudfoundry/cli/cf/i18n" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CommandRegistry", func() { - - Context("i18n", func() { - It("initialize i18n T() func", func() { - Ω(T).ToNot(BeNil()) - }) - }) - - Context("Register()", func() { - It("registers a command and it's alias into the Command Registry map", func() { - Ω(Commands.CommandExists("fake-command2")).To(BeFalse()) - Ω(Commands.CommandExists("fc2")).To(BeFalse()) - - Register(FakeCommand2{}) - - Ω(Commands.CommandExists("fake-command2")).To(BeTrue()) - Ω(Commands.CommandExists("fc2")).To(BeTrue()) - }) - }) - - Describe("Commands", func() { - Context("CommandExists()", func() { - It("returns true the command exists in the list", func() { - Ω(Commands.CommandExists("fake-command")).To(BeTrue()) - }) - - It("returns false if the command doesn't exists in the list", func() { - Ω(Commands.CommandExists("non-exist-cmd")).To(BeFalse()) - }) - - It("returns true if the alias exists", func() { - Ω(Commands.CommandExists("fc1")).To(BeTrue()) - }) - }) - - Context("FindCommand()", func() { - It("returns the command interface when found", func() { - cmd := Commands.FindCommand("fake-command") - Ω(cmd.MetaData().Usage).To(Equal("Usage of fake-command")) - Ω(cmd.MetaData().Description).To(Equal("Description for fake-command")) - }) - - It("returns the command interface if an command alias is provided", func() { - cmd := Commands.FindCommand("fc1") - Ω(cmd.MetaData().Usage).To(Equal("Usage of fake-command")) - Ω(cmd.MetaData().Description).To(Equal("Description for fake-command")) - }) - }) - - Context("SetCommand()", func() { - It("replaces the command in registry with command provided", func() { - updatedCmd := FakeCommand1{Data: "This is new data"} - oldCmd := Commands.FindCommand("fake-command") - Ω(oldCmd).ToNot(Equal(updatedCmd)) - - Commands.SetCommand(updatedCmd) - oldCmd = Commands.FindCommand("fake-command") - Ω(oldCmd).To(Equal(updatedCmd)) - }) - }) - - Context("CommandUsage()", func() { - It("prints the name, description and usage of a command", func() { - o := Commands.CommandUsage("fake-command") - outputs := strings.Split(o, "\n") - Ω(outputs).To(BeInDisplayOrder( - []string{"NAME:"}, - []string{" fake-command", "Description"}, - []string{"USAGE:"}, - )) - }) - - It("prints the flag options", func() { - o := Commands.CommandUsage("fake-command") - outputs := strings.Split(o, "\n") - Ω(outputs).To(BeInDisplayOrder( - []string{"NAME:"}, - []string{"USAGE:"}, - []string{"OPTIONS:"}, - []string{"intFlag", "Usage for"}, - []string{"boolFlag", "Usage for"}, - )) - }) - - It("prefixes the non-bool flag with '-'", func() { - o := Commands.CommandUsage("fake-command") - outputs := strings.Split(o, "\n") - Ω(outputs).To(BeInDisplayOrder( - []string{"OPTIONS:"}, - []string{"-intFlag", "Usage for"}, - )) - }) - - It("prefixes the bool flag with '--'", func() { - o := Commands.CommandUsage("fake-command") - outputs := strings.Split(o, "\n") - Ω(outputs).To(BeInDisplayOrder( - []string{"OPTIONS:"}, - []string{"-intFlag", "Usage for"}, - []string{"--boolFlag", "Usage for"}, - )) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/command_runner_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/command_runner_suite_test.go deleted file mode 100644 index 74c5125..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/command_runner_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package command_runner_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCommandRunner(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Command Runner Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/runner.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/runner.go deleted file mode 100644 index 28f9a85..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/runner.go +++ /dev/null @@ -1,52 +0,0 @@ -package command_runner - -import ( - "errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" - - "github.com/cloudfoundry/cli/cf/command_factory" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/codegangsta/cli" -) - -type Runner interface { - RunCmdByName(cmdName string, c *cli.Context) (err error) -} - -type ConcreteRunner struct { - cmdFactory command_factory.Factory - requirementsFactory requirements.Factory - ui terminal.UI -} - -func NewRunner(cmdFactory command_factory.Factory, requirementsFactory requirements.Factory, ui terminal.UI) (runner ConcreteRunner) { - runner.cmdFactory = cmdFactory - runner.requirementsFactory = requirementsFactory - runner.ui = ui - return -} - -func (runner ConcreteRunner) RunCmdByName(cmdName string, c *cli.Context) error { - cmd, err := runner.cmdFactory.GetByCmdName(cmdName) - if err != nil { - runner.ui.Say(T("Error finding command {{.CmdName}}\n", map[string]interface{}{"CmdName": cmdName})) - return err - } - - requirements, err := cmd.GetRequirements(runner.requirementsFactory, c) - if err != nil { - return err - } - - for _, requirement := range requirements { - success := requirement.Execute() - if !success { - err = errors.New(T("Error in requirement")) - return err - } - } - - cmd.Run(c) - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/runner_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/runner_test.go deleted file mode 100644 index 7523ab1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/command_runner/runner_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package command_runner_test - -import ( - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - . "github.com/cloudfoundry/cli/cf/command_runner" - "github.com/cloudfoundry/cli/cf/requirements" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/codegangsta/cli" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type TestCommandFactory struct { - Cmd command.Command - CmdName string -} - -func (f *TestCommandFactory) GetByCmdName(cmdName string) (cmd command.Command, err error) { - f.CmdName = cmdName - cmd = f.Cmd - return -} - -func (f *TestCommandFactory) GetCommandFlags(cmdName string) []string { - return []string{} -} - -func (f *TestCommandFactory) GetCommandTotalArgs(cmdName string) (int, error) { - return 0, nil -} - -func (f *TestCommandFactory) CheckIfCoreCmdExists(cmdName string) bool { - return true -} - -func (fake *TestCommandFactory) CommandMetadatas() []command_metadata.CommandMetadata { - return []command_metadata.CommandMetadata{} -} - -type TestCommand struct { - Reqs []requirements.Requirement - WasRunWith *cli.Context -} - -func (cmd *TestCommand) GetRequirements(_ requirements.Factory, _ *cli.Context) (reqs []requirements.Requirement, err error) { - reqs = cmd.Reqs - return -} - -func (command *TestCommand) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{} -} - -func (cmd *TestCommand) Run(c *cli.Context) { - cmd.WasRunWith = c -} - -type TestRequirement struct { - Passes bool - WasExecuted bool -} - -func (r *TestRequirement) Execute() (success bool) { - r.WasExecuted = true - - if !r.Passes { - return false - } - - return true -} - -var _ = Describe("Requirements runner", func() { - It("runs", func() { - passingReq := TestRequirement{Passes: true} - failingReq := TestRequirement{Passes: false} - lastReq := TestRequirement{Passes: true} - - cmd := TestCommand{ - Reqs: []requirements.Requirement{&passingReq, &failingReq, &lastReq}, - } - - cmdFactory := &TestCommandFactory{Cmd: &cmd} - runner := NewRunner(cmdFactory, nil, nil) - - ctxt := testcmd.NewContext("login", []string{}) - err := runner.RunCmdByName("some-cmd", ctxt) - - Expect(cmdFactory.CmdName).To(Equal("some-cmd")) - - Expect(passingReq.WasExecuted).To(BeTrue()) - Expect(failingReq.WasExecuted).To(BeTrue()) - - Expect(lastReq.WasExecuted).To(BeFalse()) - Expect(cmd.WasRunWith).To(BeNil()) - - Expect(err).To(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/api.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/api.go deleted file mode 100644 index cea615c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/api.go +++ /dev/null @@ -1,120 +0,0 @@ -/* -* to port command over to new architecture -* Unit test: -* short cutting all codegangsta func (NewApi(), Medadata(),GetRequirements(),Run()) w/ -* return, then fix all unit tests -* -* bin/test -* Take out the short cutting and run test - */ - -package commands - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" -) - -type Api struct { - ui terminal.UI - endpointRepo api.EndpointRepository - config core_config.ReadWriter -} - -func init() { - command_registry.Register(Api{}) -} - -func (cmd Api) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["unset"] = &cliFlags.BoolFlag{Name: "unset", Usage: T("Remove all api endpoint targeting")} - fs["skip-ssl-validation"] = &cliFlags.BoolFlag{Name: "skip-ssl-validation", Usage: T("Please don't")} - - return command_registry.CommandMetadata{ - Name: "api", - Description: T("Set or view target api url"), - Usage: T("CF_NAME api [URL]"), - Flags: fs, - } -} - -func (cmd Api) Requirements(_ requirements.Factory, _ flags.FlagContext) (reqs []requirements.Requirement, err error) { - return -} - -func (cmd Api) SetDependency(deps command_registry.Dependency, _ bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.endpointRepo = deps.RepoLocator.GetEndpointRepository() - return cmd -} - -func (cmd Api) Execute(c flags.FlagContext) { - if c.Bool("unset") { - cmd.ui.Say(T("Unsetting api endpoint...")) - cmd.config.SetApiEndpoint("") - - cmd.ui.Ok() - cmd.ui.Say(T("\nNo api endpoint set.")) - - } else if len(c.Args()) == 0 { - if cmd.config.ApiEndpoint() == "" { - cmd.ui.Say(fmt.Sprintf(T("No api endpoint set. Use '{{.Name}}' to set an endpoint", - map[string]interface{}{"Name": terminal.CommandColor(cf.Name() + " api")}))) - } else { - cmd.ui.Say(T("API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - map[string]interface{}{"ApiEndpoint": terminal.EntityNameColor(cmd.config.ApiEndpoint()), - "ApiVersion": terminal.EntityNameColor(cmd.config.ApiVersion())})) - } - } else { - endpoint := c.Args()[0] - - cmd.ui.Say(T("Setting api endpoint to {{.Endpoint}}...", - map[string]interface{}{"Endpoint": terminal.EntityNameColor(endpoint)})) - cmd.setApiEndpoint(endpoint, c.Bool("skip-ssl-validation"), cmd.MetaData().Name) - cmd.ui.Ok() - - cmd.ui.Say("") - cmd.ui.ShowConfiguration(cmd.config) - } -} - -func (cmd Api) setApiEndpoint(endpoint string, skipSSL bool, cmdName string) { - if strings.HasSuffix(endpoint, "/") { - endpoint = strings.TrimSuffix(endpoint, "/") - } - - cmd.config.SetSSLDisabled(skipSSL) - endpoint, err := cmd.endpointRepo.UpdateEndpoint(endpoint) - - if err != nil { - cmd.config.SetApiEndpoint("") - cmd.config.SetSSLDisabled(false) - - switch typedErr := err.(type) { - case *errors.InvalidSSLCert: - cfApiCommand := terminal.CommandColor(fmt.Sprintf("%s %s --skip-ssl-validation", cf.Name(), cmdName)) - tipMessage := fmt.Sprintf(T("TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - map[string]interface{}{"ApiCommand": cfApiCommand})) - cmd.ui.Failed(T("Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - map[string]interface{}{"URL": typedErr.URL, "TipMessage": tipMessage})) - default: - cmd.ui.Failed(typedErr.Error()) - } - } - - if !strings.HasPrefix(endpoint, "https://") { - cmd.ui.Say(terminal.WarningColor(T("Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n"))) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/api_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/api_test.go deleted file mode 100644 index 3d3a7a2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/api_test.go +++ /dev/null @@ -1,215 +0,0 @@ -package commands_test - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -func callApi(args []string, config core_config.Repository, endpointRepo *testapi.FakeEndpointRepo) (ui *testterm.FakeUI) { - ui = new(testterm.FakeUI) - - // cmd := NewApi(ui, config, endpointRepo) - var cmd command_registry.Command - cmd = Api{} - repoLocator := api.RepositoryLocator{} - repoLocator = repoLocator.SetEndpointRepository(endpointRepo) - deps := command_registry.Dependency{ - Ui: ui, - Config: config, - RepoLocator: repoLocator, - } - cmd = cmd.SetDependency(deps, false) - requirementsFactory := &testreq.FakeReqFactory{} - testcmd.RunCliCommand(cmd, args, requirementsFactory) - return -} - -var _ = Describe("api command", func() { - var ( - config core_config.Repository - endpointRepo *testapi.FakeEndpointRepo - ) - - BeforeEach(func() { - config = testconfig.NewRepository() - endpointRepo = &testapi.FakeEndpointRepo{} - }) - - Context("when the api endpoint's ssl certificate is invalid", func() { - It("warns the user and prints out a tip", func() { - endpointRepo.UpdateEndpointError = errors.NewInvalidSSLCert("https://buttontomatoes.org", "why? no. go away") - ui := callApi([]string{"https://buttontomatoes.org"}, config, endpointRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"SSL Cert", "https://buttontomatoes.org"}, - []string{"TIP", "--skip-ssl-validation"}, - )) - }) - }) - - Context("when the user does not provide an endpoint", func() { - Context("when the endpoint is set in the config", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - config.SetApiEndpoint("https://api.run.pivotal.io") - config.SetApiVersion("2.0") - config.SetSSLDisabled(true) - - ui = new(testterm.FakeUI) - requirementsFactory = &testreq.FakeReqFactory{} - }) - - It("prints out the api endpoint and appropriately sets the config", func() { - // testcmd.RunCommand(NewApi(ui, config, endpointRepo), []string{}, requirementsFactory) - ui := callApi([]string{}, config, endpointRepo) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"https://api.run.pivotal.io", "2.0"})) - Expect(config.IsSSLDisabled()).To(BeTrue()) - }) - - Context("when the --unset flag is passed", func() { - It("unsets the ApiEndpoint", func() { - // testcmd.RunCommand(NewApi(ui, config, endpointRepo), []string{"--unset"}, requirementsFactory) - ui := callApi([]string{"--unset"}, config, endpointRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unsetting api endpoint..."}, - []string{"OK"}, - []string{"No api endpoint set."}, - )) - Expect(config.ApiEndpoint()).To(Equal("")) - }) - }) - }) - - Context("when the endpoint is not set in the config", func() { - It("prompts the user to set an endpoint", func() { - ui := callApi([]string{}, config, endpointRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No api endpoint set", fmt.Sprintf("Use '%s api' to set an endpoint", cf.Name())}, - )) - }) - }) - }) - - Context("when the user provides the --skip-ssl-validation flag", func() { - It("updates the SSLDisabled field in config", func() { - config.SetSSLDisabled(false) - callApi([]string{"--skip-ssl-validation", "https://example.com"}, config, endpointRepo) - - Expect(config.IsSSLDisabled()).To(Equal(true)) - }) - }) - - Context("the user provides an endpoint", func() { - var ( - ui *testterm.FakeUI - ) - - Describe("when the user passed in the skip-ssl-validation flag", func() { - It("disables SSL validation in the config", func() { - ui = callApi([]string{"--skip-ssl-validation", "https://example.com"}, config, endpointRepo) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("https://example.com")) - Expect(config.IsSSLDisabled()).To(BeTrue()) - }) - }) - - Context("when the user passed in the unset flag", func() { - Context("when the config.ApiEndpoint is set", func() { - BeforeEach(func() { - config.SetApiEndpoint("some-silly-thing") - }) - - It("unsets the ApiEndpoint", func() { - ui = callApi([]string{"--unset", "https://example.com"}, config, endpointRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unsetting api endpoint..."}, - []string{"OK"}, - []string{"No api endpoint set."}, - )) - Expect(config.ApiEndpoint()).To(Equal("")) - }) - }) - - Context("when the config.ApiEndpoint is empty", func() { - It("unsets the ApiEndpoint", func() { - ui = callApi([]string{"--unset", "https://example.com"}, config, endpointRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unsetting api endpoint..."}, - []string{"OK"}, - []string{"No api endpoint set."}, - )) - Expect(config.ApiEndpoint()).To(Equal("")) - }) - }) - - }) - - Context("when the ssl certificate is valid", func() { - It("updates the api endpoint with the given url", func() { - ui = callApi([]string{"https://example.com"}, config, endpointRepo) - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("https://example.com")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting api endpoint to", "example.com"}, - []string{"OK"}, - )) - }) - - It("trims trailing slashes from the api endpoint", func() { - ui = callApi([]string{"https://example.com/"}, config, endpointRepo) - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("https://example.com")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting api endpoint to", "example.com"}, - []string{"OK"}, - )) - }) - }) - - Context("when the ssl certificate is invalid", func() { - BeforeEach(func() { - endpointRepo.UpdateEndpointError = errors.NewInvalidSSLCert("https://example.com", "it don't work") - }) - - It("fails and gives the user a helpful message about skipping", func() { - ui := callApi([]string{"https://example.com"}, config, endpointRepo) - - Expect(config.ApiEndpoint()).To(Equal("")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Invalid SSL Cert", "https://example.com"}, - []string{"TIP", "api"}, - )) - }) - }) - - Describe("unencrypted http endpoints", func() { - It("warns the user", func() { - ui = callApi([]string{"http://example.com"}, config, endpointRepo) - Expect(ui.Outputs).To(ContainSubstrings([]string{"Warning"})) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/app.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/app.go deleted file mode 100644 index a93e7fe..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/app.go +++ /dev/null @@ -1,267 +0,0 @@ -package application - -import ( - "fmt" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" - "github.com/cloudfoundry/cli/plugin/models" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/app_instances" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/ui_helpers" -) - -type ShowApp struct { - ui terminal.UI - config core_config.Reader - appSummaryRepo api.AppSummaryRepository - appLogsNoaaRepo api.LogsNoaaRepository - appInstancesRepo app_instances.AppInstancesRepository - appReq requirements.ApplicationRequirement - pluginAppModel *plugin_models.GetAppModel - pluginCall bool -} - -type ApplicationDisplayer interface { - ShowApp(app models.Application, orgName string, spaceName string) -} - -func NewShowApp(ui terminal.UI, config core_config.Reader, appSummaryRepo api.AppSummaryRepository, appInstancesRepo app_instances.AppInstancesRepository, appLogsNoaaRepo api.LogsNoaaRepository) (cmd *ShowApp) { - cmd = &ShowApp{} - cmd.ui = ui - cmd.config = config - cmd.appSummaryRepo = appSummaryRepo - cmd.appInstancesRepo = appInstancesRepo - cmd.appLogsNoaaRepo = appLogsNoaaRepo - return -} - -func init() { - command_registry.Register(&ShowApp{}) -} - -func (cmd *ShowApp) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["guid"] = &cliFlags.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given app's guid. All other health and status output for the app is suppressed.")} - - return command_registry.CommandMetadata{ - Name: "app", - Description: T("Display health and status for app"), - Usage: T("CF_NAME app APP_NAME"), - Flags: fs, - } -} - -func (cmd *ShowApp) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 1 { - cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("app")) - } - - cmd.appReq = requirementsFactory.NewApplicationRequirement(fc.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *ShowApp) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.appSummaryRepo = deps.RepoLocator.GetAppSummaryRepository() - cmd.appLogsNoaaRepo = deps.RepoLocator.GetLogsNoaaRepository() - cmd.appInstancesRepo = deps.RepoLocator.GetAppInstancesRepository() - - cmd.pluginAppModel = deps.PluginModels.Application - cmd.pluginCall = pluginCall - - return cmd -} - -func (cmd *ShowApp) Execute(c flags.FlagContext) { - app := cmd.appReq.GetApplication() - - if cmd.pluginCall { - cmd.pluginAppModel.Name = app.Name - cmd.pluginAppModel.State = app.State - cmd.pluginAppModel.Guid = app.Guid - cmd.pluginAppModel.BuildpackUrl = app.BuildpackUrl - cmd.pluginAppModel.Command = app.Command - cmd.pluginAppModel.Diego = app.Diego - cmd.pluginAppModel.DetectedStartCommand = app.DetectedStartCommand - cmd.pluginAppModel.DiskQuota = app.DiskQuota - cmd.pluginAppModel.EnvironmentVars = app.EnvironmentVars - cmd.pluginAppModel.InstanceCount = app.InstanceCount - cmd.pluginAppModel.Memory = app.Memory - cmd.pluginAppModel.RunningInstances = app.RunningInstances - cmd.pluginAppModel.HealthCheckTimeout = app.HealthCheckTimeout - cmd.pluginAppModel.SpaceGuid = app.SpaceGuid - cmd.pluginAppModel.PackageUpdatedAt = app.PackageUpdatedAt - cmd.pluginAppModel.PackageState = app.PackageState - cmd.pluginAppModel.StagingFailedReason = app.StagingFailedReason - - cmd.pluginAppModel.Stack = &plugin_models.GetApp_Stack{ - Name: app.Stack.Name, - Guid: app.Stack.Guid, - } - - for i, _ := range app.Routes { - cmd.pluginAppModel.Routes = append(cmd.pluginAppModel.Routes, plugin_models.GetApp_RouteSummary{ - Host: app.Routes[i].Host, - Guid: app.Routes[i].Guid, - Domain: plugin_models.GetApp_DomainFields{ - Name: app.Routes[i].Domain.Name, - Guid: app.Routes[i].Domain.Guid, - Shared: app.Routes[i].Domain.Shared, - OwningOrganizationGuid: app.Routes[i].Domain.OwningOrganizationGuid, - }, - }) - } - - for i, _ := range app.Services { - cmd.pluginAppModel.Services = append(cmd.pluginAppModel.Services, plugin_models.GetApp_ServiceSummary{ - Name: app.Services[i].Name, - Guid: app.Services[i].Guid, - }) - } - } - - if c.Bool("guid") { - cmd.ui.Say(app.Guid) - } else { - cmd.ShowApp(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) - } -} - -func (cmd *ShowApp) ShowApp(app models.Application, orgName, spaceName string) { - cmd.ui.Say(T("Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(orgName), - "SpaceName": terminal.EntityNameColor(spaceName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - application, apiErr := cmd.appSummaryRepo.GetSummary(app.Guid) - - appIsStopped := (application.State == "stopped") - if err, ok := apiErr.(errors.HttpError); ok { - if err.ErrorCode() == errors.APP_STOPPED || err.ErrorCode() == errors.APP_NOT_STAGED { - appIsStopped = true - } - } - - if apiErr != nil && !appIsStopped { - cmd.ui.Failed(apiErr.Error()) - return - } - - var instances []models.AppInstanceFields - instances, apiErr = cmd.appInstancesRepo.GetInstances(app.Guid) - if apiErr != nil && !appIsStopped { - cmd.ui.Failed(apiErr.Error()) - return - } - - //temp solution, diego app metrics only come from noaa, not CC - if application.Diego { - instances, apiErr = cmd.appLogsNoaaRepo.GetContainerMetrics(app.Guid, instances) - - for i := 0; i < len(instances); i++ { - instances[i].MemQuota = application.Memory * 1024 * 1024 - instances[i].DiskQuota = application.DiskQuota * 1024 * 1024 - } - } - - if apiErr != nil && !appIsStopped { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("\n%s %s", terminal.HeaderColor(T("requested state:")), ui_helpers.ColoredAppState(application.ApplicationFields)) - cmd.ui.Say("%s %s", terminal.HeaderColor(T("instances:")), ui_helpers.ColoredAppInstances(application.ApplicationFields)) - cmd.ui.Say(T("{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - map[string]interface{}{ - "Usage": terminal.HeaderColor(T("usage:")), - "FormattedMemory": formatters.ByteSize(application.Memory * formatters.MEGABYTE), - "InstanceCount": application.InstanceCount})) - - var urls []string - for _, route := range application.Routes { - urls = append(urls, route.URL()) - } - - cmd.ui.Say("%s %s", terminal.HeaderColor(T("urls:")), strings.Join(urls, ", ")) - var lastUpdated string - if application.PackageUpdatedAt != nil { - lastUpdated = application.PackageUpdatedAt.Format("Mon Jan 2 15:04:05 MST 2006") - } else { - lastUpdated = "unknown" - } - cmd.ui.Say("%s %s", terminal.HeaderColor(T("last uploaded:")), lastUpdated) - if app.Stack != nil { - cmd.ui.Say("%s %s", terminal.HeaderColor(T("stack:")), app.Stack.Name) - } else { - cmd.ui.Say("%s %s", terminal.HeaderColor(T("stack:")), "unknown") - } - - if app.Buildpack != "" { - cmd.ui.Say("%s %s\n", terminal.HeaderColor(T("buildpack:")), app.Buildpack) - } else if app.DetectedBuildpack != "" { - cmd.ui.Say("%s %s\n", terminal.HeaderColor(T("buildpack:")), app.DetectedBuildpack) - } else { - cmd.ui.Say("%s %s\n", terminal.HeaderColor(T("buildpack:")), "unknown") - } - - if appIsStopped { - cmd.ui.Say(T("There are no running instances of this app.")) - return - } - - table := terminal.NewTable(cmd.ui, []string{"", T("state"), T("since"), T("cpu"), T("memory"), T("disk"), T("details")}) - - for index, instance := range instances { - table.Add( - fmt.Sprintf("#%d", index), - ui_helpers.ColoredInstanceState(instance), - instance.Since.Format("2006-01-02 03:04:05 PM"), - fmt.Sprintf("%.1f%%", instance.CpuUsage*100), - fmt.Sprintf(T("{{.MemUsage}} of {{.MemQuota}}", - map[string]interface{}{ - "MemUsage": formatters.ByteSize(instance.MemUsage), - "MemQuota": formatters.ByteSize(instance.MemQuota)})), - fmt.Sprintf(T("{{.DiskUsage}} of {{.DiskQuota}}", - map[string]interface{}{ - "DiskUsage": formatters.ByteSize(instance.DiskUsage), - "DiskQuota": formatters.ByteSize(instance.DiskQuota)})), - fmt.Sprintf("%s", instance.Details), - ) - - if cmd.pluginCall { - i := plugin_models.GetApp_AppInstanceFields{} - i.State = fmt.Sprintf("%s", instance.State) - i.Details = instance.Details - i.Since = instance.Since - i.CpuUsage = instance.CpuUsage - i.DiskQuota = instance.DiskQuota - i.DiskUsage = instance.DiskUsage - i.MemQuota = instance.MemQuota - i.MemUsage = instance.MemUsage - cmd.pluginAppModel.Instances = append(cmd.pluginAppModel.Instances, i) - } - } - - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/app_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/app_test.go deleted file mode 100644 index ec4d878..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/app_test.go +++ /dev/null @@ -1,476 +0,0 @@ -package application_test - -import ( - "time" - - testAppInstanaces "github.com/cloudfoundry/cli/cf/api/app_instances/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - testtime "github.com/cloudfoundry/cli/testhelpers/time" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("app Command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.Repository - appSummaryRepo *testapi.FakeAppSummaryRepo - appInstancesRepo *testAppInstanaces.FakeAppInstancesRepository - appLogsNoaaRepo *testapi.FakeLogsNoaaRepository - requirementsFactory *testreq.FakeReqFactory - app models.Application - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.RepoLocator = deps.RepoLocator.SetLogsNoaaRepository(appLogsNoaaRepo) - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetAppSummaryRepository(appSummaryRepo) - deps.RepoLocator = deps.RepoLocator.SetAppInstancesRepository(appInstancesRepo) - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("app").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - appSummaryRepo = &testapi.FakeAppSummaryRepo{} - appLogsNoaaRepo = &testapi.FakeLogsNoaaRepository{} - appInstancesRepo = &testAppInstanaces.FakeAppInstancesRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedSpaceSuccess: true, - } - app = makeAppWithRoute("my-app") - appSummaryRepo.GetSummarySummary = app - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("app") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails if not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("my-app")).To(BeFalse()) - }) - - It("fails if a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("my-app")).To(BeFalse()) - }) - - It("fails with usage when not provided exactly one arg", func() { - passed := runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "Requires an argument"}, - )) - Expect(passed).To(BeFalse()) - }) - }) - - Describe("when invoked by a plugin", func() { - var ( - pluginAppModel *plugin_models.GetAppModel - ) - - BeforeEach(func() { - app = makeAppWithRoute("my-app") - appInstance := models.AppInstanceFields{ - State: models.InstanceRunning, - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2012"), - Details: "normal", - CpuUsage: 1.0, - DiskQuota: 1 * formatters.GIGABYTE, - DiskUsage: 32 * formatters.MEGABYTE, - MemQuota: 64 * formatters.MEGABYTE, - MemUsage: 13 * formatters.MEGABYTE, - } - - appInstance2 := models.AppInstanceFields{ - State: models.InstanceDown, - Details: "failure", - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Apr 1 15:04:05 -0700 MST 2012"), - } - - instances := []models.AppInstanceFields{appInstance, appInstance2} - appInstancesRepo.GetInstancesReturns(instances, nil) - - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - pluginAppModel = &plugin_models.GetAppModel{} - deps.PluginModels.Application = pluginAppModel - updateCommandDependency(true) - }) - - It("populates the plugin model upon execution", func() { - runCommand("my-app") - Ω(pluginAppModel.Name).To(Equal("my-app")) - Ω(pluginAppModel.State).To(Equal("started")) - Ω(pluginAppModel.Guid).To(Equal("app-guid")) - Ω(pluginAppModel.BuildpackUrl).To(Equal("http://123.com")) - Ω(pluginAppModel.Command).To(Equal("command1")) - Ω(pluginAppModel.Diego).To(BeFalse()) - Ω(pluginAppModel.DetectedStartCommand).To(Equal("detected_command")) - Ω(pluginAppModel.DiskQuota).To(Equal(int64(100))) - Ω(pluginAppModel.EnvironmentVars).To(Equal(map[string]interface{}{"test": 123})) - Ω(pluginAppModel.InstanceCount).To(Equal(2)) - Ω(pluginAppModel.Memory).To(Equal(int64(256))) - Ω(pluginAppModel.RunningInstances).To(Equal(2)) - Ω(pluginAppModel.HealthCheckTimeout).To(Equal(100)) - Ω(pluginAppModel.SpaceGuid).To(Equal("guids_in_spaaace")) - Ω(pluginAppModel.PackageUpdatedAt.String()).To(Equal(time.Date(2009, time.November, 10, 15, 0, 0, 0, time.UTC).String())) - Ω(pluginAppModel.PackageState).To(Equal("STAGED")) - Ω(pluginAppModel.StagingFailedReason).To(Equal("no reason")) - Ω(pluginAppModel.Stack.Name).To(Equal("fake_stack")) - Ω(pluginAppModel.Stack.Guid).To(Equal("123-123-123")) - Ω(pluginAppModel.Routes[0].Host).To(Equal("foo")) - Ω(pluginAppModel.Routes[0].Guid).To(Equal("foo-guid")) - Ω(pluginAppModel.Routes[0].Domain.Name).To(Equal("example.com")) - Ω(pluginAppModel.Routes[0].Domain.Guid).To(Equal("domain1-guid")) - Ω(pluginAppModel.Routes[0].Domain.Shared).To(BeTrue()) - Ω(pluginAppModel.Routes[0].Domain.OwningOrganizationGuid).To(Equal("org-123")) - Ω(pluginAppModel.Services[0].Guid).To(Equal("s1-guid")) - Ω(pluginAppModel.Services[0].Name).To(Equal("s1-service")) - Ω(pluginAppModel.Instances[0].State).To(Equal("running")) - Ω(pluginAppModel.Instances[0].Details).To(Equal("normal")) - Ω(pluginAppModel.Instances[0].CpuUsage).To(Equal(float64(1.0))) - Ω(pluginAppModel.Instances[0].DiskQuota).To(Equal(int64(1 * formatters.GIGABYTE))) - Ω(pluginAppModel.Instances[0].DiskUsage).To(Equal(int64(32 * formatters.MEGABYTE))) - Ω(pluginAppModel.Instances[0].MemQuota).To(Equal(int64(64 * formatters.MEGABYTE))) - Ω(pluginAppModel.Instances[0].MemUsage).To(Equal(int64(13 * formatters.MEGABYTE))) - - Ω(pluginAppModel.Routes[1].Host).To(Equal("my-app")) - }) - }) - - Describe("displaying a summary of an app", func() { - BeforeEach(func() { - app = makeAppWithRoute("my-app") - appInstance := models.AppInstanceFields{ - State: models.InstanceRunning, - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2012"), - CpuUsage: 1.0, - DiskQuota: 1 * formatters.GIGABYTE, - DiskUsage: 32 * formatters.MEGABYTE, - MemQuota: 64 * formatters.MEGABYTE, - MemUsage: 13 * formatters.BYTE, - } - - appInstance2 := models.AppInstanceFields{ - State: models.InstanceDown, - Details: "failure", - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Apr 1 15:04:05 -0700 MST 2012"), - } - - instances := []models.AppInstanceFields{appInstance, appInstance2} - - appSummaryRepo.GetSummarySummary = app - appInstancesRepo.GetInstancesReturns(instances, nil) - requirementsFactory.Application = app - updateCommandDependency(false) - }) - - Context("When app is a diego app", func() { - It("uses noaa log library to gather metrics", func() { - app.Diego = true - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - updateCommandDependency(false) - runCommand("my-app") - Ω(appLogsNoaaRepo.GetContainerMetricsCallCount()).To(Equal(1)) - }) - It("gracefully handles when /instances is down but /noaa is not", func() { - app.Diego = true - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - appInstancesRepo.GetInstancesReturns([]models.AppInstanceFields{}, errors.New("danger will robinson")) - updateCommandDependency(false) - - runCommand("my-app") - Ω(appLogsNoaaRepo.GetContainerMetricsCallCount()).To(Equal(0)) - - }) - }) - - Context("When app is not a diego app", func() { - It("does not use noaa log library to gather metrics", func() { - app.Diego = false - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - updateCommandDependency(false) - runCommand("my-app") - Ω(appLogsNoaaRepo.GetContainerMetricsCallCount()).To(Equal(0)) - }) - }) - - Context("Displaying buildpack info", func() { - It("Shows 'Buildpack' when buildpack is set", func() { - app.Diego = false - app.Buildpack = "go_buildpack" - app.DetectedBuildpack = "should_not_display" - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - updateCommandDependency(false) - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"buildpack", "go_buildpack"}, - )) - }) - - It("Shows 'DetectedBuildpack' when detected buildpack is set and 'Buildpack' is not set", func() { - app.Diego = false - app.DetectedBuildpack = "go_buildpack" - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - updateCommandDependency(false) - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"buildpack", "go_buildpack"}, - )) - }) - - It("Shows 'Unknown' when there is no buildpack set", func() { - app.Diego = false - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - updateCommandDependency(false) - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"buildpack", "unknown"}, - )) - }) - - }) - - It("displays a summary of the app", func() { - app.Diego = false - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - - updateCommandDependency(false) - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Showing health and status", "my-app"}, - []string{"state", "started"}, - []string{"instances", "2/2"}, - []string{"usage", "256M x 2 instances"}, - []string{"urls", "my-app.example.com", "foo.example.com"}, - []string{"last uploaded", "Tue Nov 10 15:00:00 UTC 2009"}, - []string{"#0", "running", "2012-01-02 03:04:05 PM", "100.0%", "13 of 64M", "32M of 1G"}, - []string{"#1", "down", "2012-04-01 03:04:05 PM", "0%", "0 of 0", "0 of 0", "failure"}, - []string{"stack", "fake_stack"}, - )) - }) - - Describe("when the package updated at is nil", func() { - BeforeEach(func() { - appSummaryRepo.GetSummarySummary.PackageUpdatedAt = nil - updateCommandDependency(false) - }) - - It("should output whatever greg sez", func() { - runCommand("my-app") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"last uploaded", "unknown"}, - )) - }) - }) - }) - - Describe("when the app is not running", func() { - BeforeEach(func() { - application := models.Application{} - application.Name = "my-app" - application.Guid = "my-app-guid" - application.State = "stopped" - application.InstanceCount = 2 - application.RunningInstances = 0 - application.Memory = 256 - now := time.Now() - application.PackageUpdatedAt = &now - - appSummaryRepo.GetSummarySummary = application - requirementsFactory.Application = application - - updateCommandDependency(false) - }) - - It("displays nice output when the app is stopped", func() { - appSummaryRepo.GetSummaryErrorCode = errors.APP_STOPPED - - updateCommandDependency(false) - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("my-app-guid")) - Expect(appInstancesRepo.GetInstancesArgsForCall(0)).To(Equal("my-app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Showing health and status", "my-app", "my-org", "my-space", "my-user"}, - []string{"state", "stopped"}, - []string{"instances", "0/2"}, - []string{"usage", "256M x 2 instances"}, - []string{"no running instances"}, - )) - }) - - It("displays nice output when the app has not yet finished staging", func() { - appSummaryRepo.GetSummaryErrorCode = errors.APP_NOT_STAGED - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("my-app-guid")) - Expect(appInstancesRepo.GetInstancesArgsForCall(0)).To(Equal("my-app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Showing health and status", "my-app", "my-org", "my-space", "my-user"}, - []string{"state", "stopped"}, - []string{"instances", "0/2"}, - []string{"usage", "256M x 2 instances"}, - []string{"no running instances"}, - )) - }) - }) - - Describe("when running instances is unknown", func() { - BeforeEach(func() { - app := makeAppWithRoute("my-app") - app.RunningInstances = -1 - appInstance := models.AppInstanceFields{ - State: models.InstanceRunning, - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2012"), - CpuUsage: 5.0, - DiskQuota: 4 * formatters.GIGABYTE, - DiskUsage: 3 * formatters.GIGABYTE, - MemQuota: 2 * formatters.GIGABYTE, - MemUsage: 1 * formatters.GIGABYTE, - } - - appInstance2 := models.AppInstanceFields{ - State: models.InstanceRunning, - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Apr 1 15:04:05 -0700 MST 2012"), - } - - instances := []models.AppInstanceFields{appInstance, appInstance2} - - appSummaryRepo.GetSummarySummary = app - appInstancesRepo.GetInstancesReturns(instances, nil) - requirementsFactory.Application = app - - updateCommandDependency(false) - }) - - It("displays a '?' for running instances", func() { - runCommand("my-app") - - Expect(appSummaryRepo.GetSummaryAppGuid).To(Equal("app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Showing health and status", "my-app"}, - []string{"state", "started"}, - []string{"instances", "?/2"}, - []string{"usage", "256M x 2 instances"}, - []string{"urls", "my-app.example.com", "foo.example.com"}, - []string{"#0", "running", "2012-01-02 03:04:05 PM", "500.0%", "1G of 2G", "3G of 4G"}, - []string{"#1", "running", "2012-04-01 03:04:05 PM", "0%", "0 of 0", "0 of 0"}, - )) - }) - }) - - Describe("when the user passes the --guid flag", func() { - var app models.Application - BeforeEach(func() { - app = makeAppWithRoute("my-app") - - requirementsFactory.Application = app - }) - - It("displays guid for the requested app", func() { - runCommand("--guid", "my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{app.Guid}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Showing health and status", "my-app"}, - )) - }) - }) -}) - -func makeAppWithRoute(appName string) models.Application { - application := models.Application{} - application.Name = appName - application.Guid = "app-guid" - application.BuildpackUrl = "http://123.com" - application.Command = "command1" - application.Diego = false - application.DetectedStartCommand = "detected_command" - application.DiskQuota = 100 - application.EnvironmentVars = map[string]interface{}{"test": 123} - application.RunningInstances = 2 - application.HealthCheckTimeout = 100 - application.SpaceGuid = "guids_in_spaaace" - application.PackageState = "STAGED" - application.StagingFailedReason = "no reason" - application.State = "started" - application.InstanceCount = 2 - application.RunningInstances = 2 - application.Memory = 256 - - t := time.Date(2009, time.November, 10, 15, 0, 0, 0, time.UTC) - application.PackageUpdatedAt = &t - - services := models.ServicePlanSummary{ - Guid: "s1-guid", - Name: "s1-service", - } - - application.Services = []models.ServicePlanSummary{services} - - domain := models.DomainFields{Guid: "domain1-guid", Name: "example.com", OwningOrganizationGuid: "org-123", Shared: true} - - route := models.RouteSummary{Host: "foo", Guid: "foo-guid", Domain: domain} - secondRoute := models.RouteSummary{Host: appName, Domain: domain} - - application.Stack = &models.Stack{ - Name: "fake_stack", - Guid: "123-123-123", - } - application.Routes = []models.RouteSummary{route, secondRoute} - - return application -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/application_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/application_suite_test.go deleted file mode 100644 index 399609d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/application_suite_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package application_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestApplication(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Application Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/apps.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/apps.go deleted file mode 100644 index 963ac59..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/apps.go +++ /dev/null @@ -1,136 +0,0 @@ -package application - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/plugin/models" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/ui_helpers" -) - -type ListApps struct { - ui terminal.UI - config core_config.Reader - appSummaryRepo api.AppSummaryRepository - - pluginAppModels *[]plugin_models.GetAppsModel - pluginCall bool -} - -func init() { - command_registry.Register(&ListApps{}) -} - -func (cmd *ListApps) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "apps", - ShortName: "a", - Description: T("List all apps in the target space"), - Usage: "CF_NAME apps", - } -} - -func (cmd *ListApps) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 0 { - cmd.ui.Failed(T("Incorrect Usage. No argument required\n\n") + command_registry.Commands.CommandUsage("apps")) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - return -} - -func (cmd *ListApps) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.appSummaryRepo = deps.RepoLocator.GetAppSummaryRepository() - cmd.pluginAppModels = deps.PluginModels.AppsSummary - cmd.pluginCall = pluginCall - return cmd -} - -func (cmd *ListApps) Execute(c flags.FlagContext) { - cmd.ui.Say(T("Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apps, apiErr := cmd.appSummaryRepo.GetSummariesInCurrentSpace() - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if len(apps) == 0 { - cmd.ui.Say(T("No apps found")) - return - } - - table := terminal.NewTable(cmd.ui, []string{T("name"), T("requested state"), T("instances"), T("memory"), T("disk"), T("urls")}) - - for _, application := range apps { - var urls []string - for _, route := range application.Routes { - urls = append(urls, route.URL()) - } - - table.Add( - application.Name, - ui_helpers.ColoredAppState(application.ApplicationFields), - ui_helpers.ColoredAppInstances(application.ApplicationFields), - formatters.ByteSize(application.Memory*formatters.MEGABYTE), - formatters.ByteSize(application.DiskQuota*formatters.MEGABYTE), - strings.Join(urls, ", "), - ) - } - - table.Print() - - if cmd.pluginCall { - cmd.populatePluginModel(apps) - } -} - -func (cmd *ListApps) populatePluginModel(apps []models.Application) { - for _, app := range apps { - appModel := plugin_models.GetAppsModel{} - appModel.Name = app.Name - appModel.Guid = app.Guid - appModel.TotalInstances = app.InstanceCount - appModel.RunningInstances = app.RunningInstances - appModel.Memory = app.Memory - appModel.State = app.State - appModel.DiskQuota = app.DiskQuota - - *(cmd.pluginAppModels) = append(*(cmd.pluginAppModels), appModel) - - for _, route := range app.Routes { - r := plugin_models.GetAppsRouteSummary{} - r.Host = route.Host - r.Guid = route.Guid - r.Domain.Guid = route.Domain.Guid - r.Domain.Name = route.Domain.Name - r.Domain.OwningOrganizationGuid = route.Domain.OwningOrganizationGuid - r.Domain.Shared = route.Domain.Shared - - (*(cmd.pluginAppModels))[len(*(cmd.pluginAppModels))-1].Routes = append((*(cmd.pluginAppModels))[len(*(cmd.pluginAppModels))-1].Routes, r) - } - - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/apps_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/apps_test.go deleted file mode 100644 index bcc1cfe..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/apps_test.go +++ /dev/null @@ -1,207 +0,0 @@ -package application_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("list-apps command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.Repository - appSummaryRepo *testapi.FakeAppSummaryRepo - requirementsFactory *testreq.FakeReqFactory - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetAppSummaryRepository(appSummaryRepo) - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("apps").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - appSummaryRepo = &testapi.FakeAppSummaryRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedSpaceSuccess: true, - } - - app1Routes := []models.RouteSummary{ - models.RouteSummary{ - Host: "app1", - Domain: models.DomainFields{ - Name: "cfapps.io", - Shared: true, - OwningOrganizationGuid: "org-123", - Guid: "domain-guid", - }, - }, - models.RouteSummary{ - Host: "app1", - Domain: models.DomainFields{ - Name: "example.com", - }, - }} - - app2Routes := []models.RouteSummary{ - models.RouteSummary{ - Host: "app2", - Domain: models.DomainFields{Name: "cfapps.io"}, - }} - - app := models.Application{} - app.Name = "Application-1" - app.Guid = "Application-1-guid" - app.State = "started" - app.RunningInstances = 1 - app.InstanceCount = 1 - app.Memory = 512 - app.DiskQuota = 1024 - app.Routes = app1Routes - - app2 := models.Application{} - app2.Name = "Application-2" - app2.Guid = "Application-2-guid" - app2.State = "started" - app2.RunningInstances = 1 - app2.InstanceCount = 2 - app2.Memory = 256 - app2.DiskQuota = 1024 - app2.Routes = app2Routes - - appSummaryRepo.GetSummariesInCurrentSpaceApps = []models.Application{app, app2} - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("apps") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand()).To(BeFalse()) - }) - - It("requires the user to have a space targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - - Expect(runCommand()).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "No argument required"}, - )) - }) - }) - - Describe("when invoked by a plugin", func() { - var ( - pluginAppModels []plugin_models.GetAppsModel - ) - - BeforeEach(func() { - pluginAppModels = []plugin_models.GetAppsModel{} - deps.PluginModels.AppsSummary = &pluginAppModels - updateCommandDependency(true) - }) - - It("populates the plugin models upon execution", func() { - runCommand() - - Ω(pluginAppModels[0].Name).To(Equal("Application-1")) - Ω(pluginAppModels[0].Guid).To(Equal("Application-1-guid")) - Ω(pluginAppModels[1].Name).To(Equal("Application-2")) - Ω(pluginAppModels[1].Guid).To(Equal("Application-2-guid")) - Ω(pluginAppModels[0].State).To(Equal("started")) - Ω(pluginAppModels[0].TotalInstances).To(Equal(1)) - Ω(pluginAppModels[0].RunningInstances).To(Equal(1)) - Ω(pluginAppModels[0].Memory).To(Equal(int64(512))) - Ω(pluginAppModels[0].DiskQuota).To(Equal(int64(1024))) - Ω(pluginAppModels[0].Routes[0].Host).To(Equal("app1")) - Ω(pluginAppModels[0].Routes[1].Host).To(Equal("app1")) - Ω(pluginAppModels[0].Routes[0].Domain.Name).To(Equal("cfapps.io")) - Ω(pluginAppModels[0].Routes[0].Domain.Shared).To(BeTrue()) - Ω(pluginAppModels[0].Routes[0].Domain.OwningOrganizationGuid).To(Equal("org-123")) - Ω(pluginAppModels[0].Routes[0].Domain.Guid).To(Equal("domain-guid")) - }) - }) - - Context("when the user is logged in and a space is targeted", func() { - It("lists apps in a table", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting apps in", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Application-1", "started", "1/1", "512M", "1G", "app1.cfapps.io", "app1.example.com"}, - []string{"Application-2", "started", "1/2", "256M", "1G", "app2.cfapps.io"}, - )) - }) - - Context("when an app's running instances is unknown", func() { - It("dipslays a '?' for running instances", func() { - appRoutes := []models.RouteSummary{ - models.RouteSummary{ - Host: "app1", - Domain: models.DomainFields{Name: "cfapps.io"}, - }} - app := models.Application{} - app.Name = "Application-1" - app.Guid = "Application-1-guid" - app.State = "started" - app.RunningInstances = -1 - app.InstanceCount = 2 - app.Memory = 512 - app.DiskQuota = 1024 - app.Routes = appRoutes - - appSummaryRepo.GetSummariesInCurrentSpaceApps = []models.Application{app} - - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting apps in", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Application-1", "started", "?/2", "512M", "1G", "app1.cfapps.io"}, - )) - }) - }) - - Context("when there are no apps", func() { - It("tells the user that there are no apps", func() { - appSummaryRepo.GetSummariesInCurrentSpaceApps = []models.Application{} - updateCommandDependency(false) - - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting apps in", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"No apps found"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/copy_source.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/copy_source.go deleted file mode 100644 index c5e0704..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/copy_source.go +++ /dev/null @@ -1,181 +0,0 @@ -package application - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/api/copy_application_source" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CopySource struct { - ui terminal.UI - config core_config.Reader - authRepo authentication.AuthenticationRepository - appRepo applications.ApplicationRepository - orgRepo organizations.OrganizationRepository - spaceRepo spaces.SpaceRepository - copyAppSourceRepo copy_application_source.CopyApplicationSourceRepository - appRestart ApplicationRestarter -} - -func NewCopySource( - ui terminal.UI, - config core_config.Reader, - authRepo authentication.AuthenticationRepository, - appRepo applications.ApplicationRepository, - orgRepo organizations.OrganizationRepository, - spaceRepo spaces.SpaceRepository, - copyAppSourceRepo copy_application_source.CopyApplicationSourceRepository, - appRestart ApplicationRestarter, -) *CopySource { - - return &CopySource{ - ui: ui, - config: config, - authRepo: authRepo, - appRepo: appRepo, - orgRepo: orgRepo, - spaceRepo: spaceRepo, - copyAppSourceRepo: copyAppSourceRepo, - appRestart: appRestart, - } -} - -func (cmd *CopySource) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "copy-source", - Description: T("Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application."), - Usage: T(" CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("o", T("Org that contains the target application")), - flag_helpers.NewStringFlag("s", T("Space that contains the target application")), - cli.BoolFlag{Name: "no-restart", Usage: T("Override restart of the application in target environment after copy-source completes")}, - }, - } -} - -func (cmd *CopySource) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - return -} - -func (cmd *CopySource) Run(c *cli.Context) { - sourceAppName := c.Args()[0] - targetAppName := c.Args()[1] - - targetOrg := c.String("o") - targetSpace := c.String("s") - - if targetOrg != "" && targetSpace == "" { - cmd.ui.Failed(T("Please provide the space within the organization containing the target application")) - } - - _, apiErr := cmd.authRepo.RefreshAuthToken() - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - sourceApp, apiErr := cmd.appRepo.Read(sourceAppName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - var targetOrgName, targetSpaceName, spaceGuid, copyStr string - if targetOrg != "" && targetSpace != "" { - spaceGuid = cmd.findSpaceGuid(targetOrg, targetSpace) - targetOrgName = targetOrg - targetSpaceName = targetSpace - } else if targetSpace != "" { - space, err := cmd.spaceRepo.FindByName(targetSpace) - if err != nil { - cmd.ui.Failed(err.Error()) - } - spaceGuid = space.Guid - targetOrgName = cmd.config.OrganizationFields().Name - targetSpaceName = targetSpace - } else { - spaceGuid = cmd.config.SpaceFields().Guid - targetOrgName = cmd.config.OrganizationFields().Name - targetSpaceName = cmd.config.SpaceFields().Name - } - - copyStr = buildCopyString(sourceAppName, targetAppName, targetOrgName, targetSpaceName, cmd.config.Username()) - - targetApp, apiErr := cmd.appRepo.ReadFromSpace(targetAppName, spaceGuid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Say(copyStr) - cmd.ui.Say(T("Note: this may take some time")) - cmd.ui.Say("") - - apiErr = cmd.copyAppSourceRepo.CopyApplication(sourceApp.Guid, targetApp.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - if !c.Bool("no-restart") { - cmd.appRestart.ApplicationRestart(targetApp, targetOrgName, targetSpaceName) - } - - cmd.ui.Ok() -} - -func (cmd *CopySource) findSpaceGuid(targetOrg, targetSpace string) string { - org, err := cmd.orgRepo.FindByName(targetOrg) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - var space models.SpaceFields - var foundSpace bool - for _, s := range org.Spaces { - if s.Name == targetSpace { - space = s - foundSpace = true - } - } - - if !foundSpace { - cmd.ui.Failed(fmt.Sprintf(T("Could not find space {{.Space}} in organization {{.Org}}", - map[string]interface{}{ - "Space": terminal.EntityNameColor(targetSpace), - "Org": terminal.EntityNameColor(targetOrg), - }, - ))) - } - - return space.Guid -} - -func buildCopyString(sourceAppName, targetAppName, targetOrgName, targetSpaceName, username string) string { - return fmt.Sprintf(T("Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "SourceApp": terminal.EntityNameColor(sourceAppName), - "TargetApp": terminal.EntityNameColor(targetAppName), - "OrgName": terminal.EntityNameColor(targetOrgName), - "SpaceName": terminal.EntityNameColor(targetSpaceName), - "Username": terminal.EntityNameColor(username), - }, - )) - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/copy_source_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/copy_source_test.go deleted file mode 100644 index b52cb7c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/copy_source_test.go +++ /dev/null @@ -1,298 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - testCopyApplication "github.com/cloudfoundry/cli/cf/api/copy_application_source/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testorg "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CopySource", func() { - - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - authRepo *testapi.FakeAuthenticationRepository - appRepo *testApplication.FakeApplicationRepository - copyAppSourceRepo *testCopyApplication.FakeCopyApplicationSourceRepository - spaceRepo *testapi.FakeSpaceRepository - orgRepo *testorg.FakeOrganizationRepository - appRestarter *testcmd.FakeApplicationRestarter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - authRepo = &testapi.FakeAuthenticationRepository{} - appRepo = &testApplication.FakeApplicationRepository{} - copyAppSourceRepo = &testCopyApplication.FakeCopyApplicationSourceRepository{} - spaceRepo = &testapi.FakeSpaceRepository{} - orgRepo = &testorg.FakeOrganizationRepository{} - appRestarter = &testcmd.FakeApplicationRestarter{} - config = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewCopySource(ui, config, authRepo, appRepo, orgRepo, spaceRepo, copyAppSourceRepo, appRestarter) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirement failures", func() { - It("when not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("source-app", "target-app")).ToNot(HavePassedRequirements()) - }) - - It("when a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("source-app", "target-app")).ToNot(HavePassedRequirements()) - }) - - It("when provided too many args", func() { - Expect(runCommand("source-app", "target-app", "too-much", "app-name")).ToNot(HavePassedRequirements()) - }) - }) - - Describe("Passing requirements", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - }) - - Context("refreshing the auth token", func() { - It("makes a call for the app token", func() { - runCommand("source-app", "target-app") - Expect(authRepo.RefreshTokenCalled).To(BeTrue()) - }) - - Context("when refreshing the auth token fails", func() { - BeforeEach(func() { - authRepo.RefreshTokenError = errors.New("I accidentally the UAA") - }) - - It("it displays an error", func() { - runCommand("source-app", "target-app") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"accidentally the UAA"}, - )) - }) - }) - - Describe("when retrieving the app token succeeds", func() { - var ( - sourceApp, targetApp models.Application - ) - - BeforeEach(func() { - sourceApp = models.Application{ - ApplicationFields: models.ApplicationFields{ - Name: "source-app", - Guid: "source-app-guid", - }, - } - appRepo.ReadReturns.App = sourceApp - - targetApp = models.Application{ - ApplicationFields: models.ApplicationFields{ - Name: "target-app", - Guid: "target-app-guid", - }, - } - appRepo.ReadFromSpaceReturns(targetApp, nil) - }) - - Describe("when no parameters are passed", func() { - It("obtains both the source and target application from the same space", func() { - runCommand("source-app", "target-app") - - targetAppName, spaceGuid := appRepo.ReadFromSpaceArgsForCall(0) - Expect(targetAppName).To(Equal("target-app")) - Expect(spaceGuid).To(Equal("my-space-guid")) - - Expect(appRepo.ReadArgs.Name).To(Equal("source-app")) - - sourceAppGuid, targetAppGuid := copyAppSourceRepo.CopyApplicationArgsForCall(0) - Expect(sourceAppGuid).To(Equal("source-app-guid")) - Expect(targetAppGuid).To(Equal("target-app-guid")) - - appArg, orgName, spaceName := appRestarter.ApplicationRestartArgsForCall(0) - Expect(appArg).To(Equal(targetApp)) - Expect(orgName).To(Equal(config.OrganizationFields().Name)) - Expect(spaceName).To(Equal(config.SpaceFields().Name)) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Copying source from app", "source-app", "to target app", "target-app", "in org my-org / space my-space as my-user..."}, - []string{"Note: this may take some time"}, - []string{"OK"}, - )) - }) - - Context("Failures", func() { - It("if we cannot obtain the source application", func() { - appRepo.ReadReturns.Error = errors.New("could not find source app") - runCommand("source-app", "target-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"could not find source app"}, - )) - }) - - It("fails if we cannot obtain the target application", func() { - appRepo.ReadFromSpaceReturns(models.Application{}, errors.New("could not find target app")) - runCommand("source-app", "target-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"could not find target app"}, - )) - }) - }) - }) - - Describe("when a space is provided, but not an org", func() { - It("send the correct target appplication for the current org and target space", func() { - spaceRepo.Spaces = []models.Space{ - { - SpaceFields: models.SpaceFields{ - Name: "space-name", - Guid: "model-space-guid", - }, - }, - } - - runCommand("-s", "space-name", "source-app", "target-app") - - targetAppName, spaceGuid := appRepo.ReadFromSpaceArgsForCall(0) - Expect(targetAppName).To(Equal("target-app")) - Expect(spaceGuid).To(Equal("model-space-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Copying source from app", "source-app", "to target app", "target-app", "in org my-org / space space-name as my-user..."}, - []string{"Note: this may take some time"}, - []string{"OK"}, - )) - }) - - Context("Failures", func() { - It("when we cannot find the provided space", func() { - spaceRepo.FindByNameErr = true - - runCommand("-s", "space-name", "source-app", "target-app") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Error finding space by name."}, - )) - }) - }) - }) - - Describe("when an org and space name are passed as parameters", func() { - It("send the correct target application for the space and org", func() { - orgRepo.FindByNameReturns(models.Organization{ - Spaces: []models.SpaceFields{ - { - Name: "space-name", - Guid: "space-guid", - }, - }, - }, nil) - - runCommand("-o", "org-name", "-s", "space-name", "source-app", "target-app") - - targetAppName, spaceGuid := appRepo.ReadFromSpaceArgsForCall(0) - Expect(targetAppName).To(Equal("target-app")) - Expect(spaceGuid).To(Equal("space-guid")) - - sourceAppGuid, targetAppGuid := copyAppSourceRepo.CopyApplicationArgsForCall(0) - Expect(sourceAppGuid).To(Equal("source-app-guid")) - Expect(targetAppGuid).To(Equal("target-app-guid")) - - appArg, orgName, spaceName := appRestarter.ApplicationRestartArgsForCall(0) - Expect(appArg).To(Equal(targetApp)) - Expect(orgName).To(Equal("org-name")) - Expect(spaceName).To(Equal("space-name")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Copying source from app source-app to target app target-app in org org-name / space space-name as my-user..."}, - []string{"Note: this may take some time"}, - []string{"OK"}, - )) - }) - - Context("failures", func() { - It("cannot just accept an organization and no space", func() { - runCommand("-o", "org-name", "source-app", "target-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Please provide the space within the organization containing the target application"}, - )) - }) - - It("when we cannot find the provided org", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.New("Could not find org")) - runCommand("-o", "org-name", "-s", "space-name", "source-app", "target-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Could not find org"}, - )) - }) - - It("when the org does not contain the space name provide", func() { - orgRepo.FindByNameReturns(models.Organization{}, nil) - runCommand("-o", "org-name", "-s", "space-name", "source-app", "target-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Could not find space space-name in organization org-name"}, - )) - }) - - It("when the targeted app does not exist in the targeted org and space", func() { - orgRepo.FindByNameReturns(models.Organization{ - Spaces: []models.SpaceFields{ - { - Name: "space-name", - Guid: "space-guid", - }, - }, - }, nil) - - appRepo.ReadFromSpaceReturns(models.Application{}, errors.New("could not find app")) - runCommand("-o", "org-name", "-s", "space-name", "source-app", "target-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"could not find app"}, - )) - }) - }) - }) - - Describe("when the --no-restart flag is passed", func() { - It("does not restart the target application", func() { - runCommand("--no-restart", "source-app", "target-app") - Expect(appRestarter.ApplicationRestartCallCount()).To(Equal(0)) - }) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/delete.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/delete.go deleted file mode 100644 index ab146ba..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/delete.go +++ /dev/null @@ -1,99 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteApp struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository - routeRepo api.RouteRepository - appReq requirements.ApplicationRequirement -} - -func NewDeleteApp(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository, routeRepo api.RouteRepository) (cmd *DeleteApp) { - cmd = new(DeleteApp) - cmd.ui = ui - cmd.config = config - cmd.appRepo = appRepo - cmd.routeRepo = routeRepo - return -} - -func (cmd *DeleteApp) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete", - ShortName: "d", - Description: T("Delete an app"), - Usage: T("CF_NAME delete APP_NAME [-f -r]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - cli.BoolFlag{Name: "r", Usage: T("Also delete any mapped routes")}, - }, - } -} - -func (cmd *DeleteApp) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement()} - return -} - -func (cmd *DeleteApp) Run(c *cli.Context) { - appName := c.Args()[0] - - if !c.Bool("f") { - response := cmd.ui.ConfirmDelete(T("app"), appName) - if !response { - return - } - } - - cmd.ui.Say(T("Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(appName), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - app, apiErr := cmd.appRepo.Read(appName) - - switch apiErr.(type) { - case nil: // no error - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("App {{.AppName}} does not exist.", map[string]interface{}{"AppName": appName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - } - - if c.Bool("r") { - for _, route := range app.Routes { - apiErr = cmd.routeRepo.Delete(route.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - } - } - - apiErr = cmd.appRepo.Delete(app.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/delete_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/delete_test.go deleted file mode 100644 index 3e28e4d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/delete_test.go +++ /dev/null @@ -1,174 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete app command", func() { - var ( - cmd *DeleteApp - ui *testterm.FakeUI - app models.Application - configRepo core_config.ReadWriter - appRepo *testApplication.FakeApplicationRepository - routeRepo *testapi.FakeRouteRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - app = models.Application{} - app.Name = "app-to-delete" - app.Guid = "app-to-delete-guid" - - ui = &testterm.FakeUI{} - appRepo = &testApplication.FakeApplicationRepository{} - routeRepo = &testapi.FakeRouteRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - - configRepo = testconfig.NewRepositoryWithDefaults() - cmd = NewDeleteApp(ui, configRepo, appRepo, routeRepo) - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails requirements when not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("-f", "delete-this-app-plz")).To(BeFalse()) - }) - It("fails if a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("-f", "delete-this-app-plz")).To(BeFalse()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - }) - - It("fails with usage when not provided exactly one arg", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("When provided an app that exists", func() { - BeforeEach(func() { - appRepo.ReadReturns.App = app - }) - - It("deletes an app when the user confirms", func() { - ui.Inputs = []string{"y"} - - runCommand("app-to-delete") - - Expect(appRepo.ReadArgs.Name).To(Equal("app-to-delete")) - Expect(appRepo.DeletedAppGuid).To(Equal("app-to-delete-guid")) - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the app app-to-delete"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "app-to-delete", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - }) - - It("does not prompt when the -f flag is provided", func() { - runCommand("-f", "app-to-delete") - - Expect(appRepo.ReadArgs.Name).To(Equal("app-to-delete")) - Expect(appRepo.DeletedAppGuid).To(Equal("app-to-delete-guid")) - Expect(ui.Prompts).To(BeEmpty()) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "app-to-delete"}, - []string{"OK"}, - )) - }) - - Describe("mapped routes", func() { - BeforeEach(func() { - route1 := models.RouteSummary{} - route1.Guid = "the-first-route-guid" - route1.Host = "my-app-is-good.com" - - route2 := models.RouteSummary{} - route2.Guid = "the-second-route-guid" - route2.Host = "my-app-is-bad.com" - - appRepo.ReadReturns.App = models.Application{ - Routes: []models.RouteSummary{route1, route2}, - } - }) - - Context("when the -r flag is provided", func() { - Context("when deleting routes succeeds", func() { - It("deletes the app's routes", func() { - runCommand("-f", "-r", "app-to-delete") - - Expect(routeRepo.DeletedRouteGuids).To(ContainElement("the-first-route-guid")) - Expect(routeRepo.DeletedRouteGuids).To(ContainElement("the-second-route-guid")) - }) - }) - - Context("when deleting routes fails", func() { - BeforeEach(func() { - routeRepo.DeleteErr = errors.New("badness") - }) - - It("fails with the api error message", func() { - runCommand("-f", "-r", "app-to-delete") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "app-to-delete"}, - []string{"FAILED"}, - )) - }) - }) - }) - - Context("when the -r flag is not provided", func() { - It("does not delete mapped routes", func() { - runCommand("-f", "app-to-delete") - Expect(routeRepo.DeletedRouteGuids).To(BeEmpty()) - }) - }) - }) - }) - - Context("when the app provided is not found", func() { - BeforeEach(func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("App", "the-app") - }) - - It("warns the user when the provided app does not exist", func() { - runCommand("-f", "app-to-delete") - - Expect(appRepo.ReadArgs.Name).To(Equal("app-to-delete")) - Expect(appRepo.DeletedAppGuid).To(Equal("")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "app-to-delete"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"app-to-delete", "does not exist"})) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/env.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/env.go deleted file mode 100644 index c29ba72..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/env.go +++ /dev/null @@ -1,169 +0,0 @@ -package application - -import ( - "encoding/json" - "sort" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Env struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository -} - -func NewEnv(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) (cmd *Env) { - cmd = new(Env) - cmd.ui = ui - cmd.config = config - cmd.appRepo = appRepo - return -} - -func (cmd *Env) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "env", - ShortName: "e", - Description: T("Show all env variables for an app"), - Usage: T("CF_NAME env APP_NAME"), - } -} - -func (cmd *Env) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - return -} - -func (cmd *Env) Run(c *cli.Context) { - app, err := cmd.appRepo.Read(c.Args()[0]) - if notFound, ok := err.(*errors.ModelNotFoundError); ok { - cmd.ui.Failed(notFound.Error()) - } - - cmd.ui.Say(T("Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - env, err := cmd.appRepo.ReadEnv(app.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - cmd.displaySystemiAndAppProvidedEnvironment(env.System, env.Application) - cmd.ui.Say("") - cmd.displayUserProvidedEnvironment(env.Environment) - cmd.ui.Say("") - cmd.displayRunningEnvironment(env.Running) - cmd.ui.Say("") - cmd.displayStagingEnvironment(env.Staging) - cmd.ui.Say("") -} - -func (cmd *Env) displaySystemiAndAppProvidedEnvironment(env map[string]interface{}, app map[string]interface{}) { - var vcapServices string - var vcapApplication string - - servicesAsMap, ok := env["VCAP_SERVICES"].(map[string]interface{}) - if ok && len(servicesAsMap) > 0 { - jsonBytes, err := json.MarshalIndent(env, "", " ") - if err != nil { - cmd.ui.Failed(err.Error()) - } - vcapServices = string(jsonBytes) - } - - applicationAsMap, ok := app["VCAP_APPLICATION"].(map[string]interface{}) - if ok && len(applicationAsMap) > 0 { - jsonBytes, err := json.MarshalIndent(app, "", " ") - if err != nil { - cmd.ui.Failed(err.Error()) - } - vcapApplication = string(jsonBytes) - } - - if len(vcapServices) == 0 && len(vcapApplication) == 0 { - cmd.ui.Say(T("No system-provided env variables have been set")) - return - } - - cmd.ui.Say(terminal.EntityNameColor(T("System-Provided:"))) - - cmd.ui.Say(vcapServices) - cmd.ui.Say("") - cmd.ui.Say(vcapApplication) -} - -func (cmd *Env) displayUserProvidedEnvironment(envVars map[string]interface{}) { - if len(envVars) == 0 { - cmd.ui.Say(T("No user-defined env variables have been set")) - return - } - - keys := make([]string, 0, len(envVars)) - for key, _ := range envVars { - keys = append(keys, key) - } - sort.Strings(keys) - - cmd.ui.Say(terminal.EntityNameColor(T("User-Provided:"))) - for _, key := range keys { - cmd.ui.Say("%s: %v", key, envVars[key]) - } -} - -func (cmd *Env) displayRunningEnvironment(envVars map[string]interface{}) { - if len(envVars) == 0 { - cmd.ui.Say(T("No running env variables have been set")) - return - } - - keys := make([]string, 0, len(envVars)) - for key, _ := range envVars { - keys = append(keys, key) - } - sort.Strings(keys) - - cmd.ui.Say(terminal.EntityNameColor(T("Running Environment Variable Groups:"))) - for _, key := range keys { - cmd.ui.Say("%s: %v", key, envVars[key]) - } -} - -func (cmd *Env) displayStagingEnvironment(envVars map[string]interface{}) { - if len(envVars) == 0 { - cmd.ui.Say(T("No staging env variables have been set")) - return - } - - keys := make([]string, 0, len(envVars)) - for key, _ := range envVars { - keys = append(keys, key) - } - sort.Strings(keys) - - cmd.ui.Say(terminal.EntityNameColor(T("Staging Environment Variable Groups:"))) - for _, key := range keys { - cmd.ui.Say("%s: %v", key, envVars[key]) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/env_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/env_test.go deleted file mode 100644 index 7ec08e2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/env_test.go +++ /dev/null @@ -1,213 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("env command", func() { - var ( - ui *testterm.FakeUI - app models.Application - appRepo *testApplication.FakeApplicationRepository - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - - app = models.Application{} - app.Name = "my-app" - appRepo = &testApplication.FakeApplicationRepository{} - appRepo.ReadReturns.App = app - - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewEnv(ui, configRepo, appRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("Requirements", func() { - It("fails when the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("my-app")).To(BeFalse()) - }) - It("fails if a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("my-app")).To(BeFalse()) - }) - }) - - It("fails with usage when no app name is given", func() { - passed := runCommand() - - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - - It("fails with usage when the app cannot be found", func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("app", "hocus-pocus") - runCommand("hocus-pocus") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"not found"}, - )) - }) - - Context("when the app has at least one env var", func() { - BeforeEach(func() { - app = models.Application{} - app.Name = "my-app" - app.Guid = "the-app-guid" - - appRepo.ReadReturns.App = app - appRepo.ReadEnvReturns(&models.Environment{ - Environment: map[string]interface{}{ - "my-key": "my-value", - "my-key2": "my-value2", - "first-key": 0, - "first-bool": false, - }, - System: map[string]interface{}{ - "VCAP_SERVICES": map[string]interface{}{ - "pump-yer-brakes": "drive-slow", - }, - }, - Application: map[string]interface{}{ - "VCAP_APPLICATION": map[string]interface{}{ - "dis-be-an-app-field": "wit-an-app-value", - "app-key-1": 0, - "app-key-2": false, - }, - }, - }, nil) - }) - - It("lists those environment variables, in sorted order for provided services", func() { - runCommand("my-app") - Expect(appRepo.ReadEnvArgsForCall(0)).To(Equal("the-app-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting env variables for app", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"System-Provided:"}, - []string{"VCAP_SERVICES", ":", "{"}, - []string{"pump-yer-brakes", ":", "drive-slow"}, - []string{"}"}, - []string{"User-Provided:"}, - []string{"first-bool", "false"}, - []string{"first-key", "0"}, - []string{"my-key", "my-value"}, - []string{"my-key2", "my-value2"}, - )) - }) - It("displays the application env info under the System env column", func() { - runCommand("my-app") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting env variables for app", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"System-Provided:"}, - []string{"VCAP_SERVICES", ":", "{"}, - []string{"pump-yer-brakes", ":", "drive-slow"}, - []string{"}"}, - []string{"VCAP_APPLICATION", ":", "{"}, - []string{"dis-be-an-app-field", ":", "wit-an-app-value"}, - []string{"app-key-1", ":", "0"}, - []string{"app-key-2", ":", "false"}, - []string{"}"}, - )) - }) - }) - - Context("when the app has no user-defined environment variables", func() { - It("shows an empty message", func() { - appRepo.ReadEnvReturns(&models.Environment{}, nil) - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting env variables for app", "my-app"}, - []string{"OK"}, - []string{"No", "system-provided", "env variables", "have been set"}, - []string{"No", "env variables", "have been set"}, - )) - }) - }) - - Context("when the app has no environment variables", func() { - It("informs the user that each group is empty", func() { - appRepo.ReadEnvReturns(&models.Environment{}, nil) - - runCommand("my-app") - Expect(ui.Outputs).To(ContainSubstrings([]string{"No system-provided env variables have been set"})) - Expect(ui.Outputs).To(ContainSubstrings([]string{"No user-defined env variables have been set"})) - Expect(ui.Outputs).To(ContainSubstrings([]string{"No running env variables have been set"})) - Expect(ui.Outputs).To(ContainSubstrings([]string{"No staging env variables have been set"})) - }) - }) - - Context("when the app has at least one running and staging environment variable", func() { - BeforeEach(func() { - app = models.Application{} - app.Name = "my-app" - app.Guid = "the-app-guid" - - appRepo.ReadReturns.App = app - appRepo.ReadEnvReturns(&models.Environment{ - Running: map[string]interface{}{ - "running-key-1": "running-value-1", - "running-key-2": "running-value-2", - "running": true, - "number": 37, - }, - Staging: map[string]interface{}{ - "staging-key-1": "staging-value-1", - "staging-key-2": "staging-value-2", - "staging": false, - "number": 42, - }, - }, nil) - }) - - It("lists the environment variables", func() { - runCommand("my-app") - Expect(appRepo.ReadEnvArgsForCall(0)).To(Equal("the-app-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting env variables for app", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Running Environment Variable Groups:"}, - []string{"running-key-1", ":", "running-value-1"}, - []string{"running-key-2", ":", "running-value-2"}, - []string{"running", ":", "true"}, - []string{"number", ":", "37"}, - []string{"Staging Environment Variable Groups:"}, - []string{"staging-key-1", ":", "staging-value-1"}, - []string{"staging-key-2", ":", "staging-value-2"}, - []string{"staging", ":", "false"}, - []string{"number", ":", "42"}, - )) - }) - }) - - Context("when reading the environment variables returns an error", func() { - It("tells you about that error", func() { - appRepo.ReadEnvReturns(nil, errors.New("BOO YOU CANT DO THAT; GO HOME; you're drunk")) - runCommand("whatever") - Expect(ui.Outputs).To(ContainSubstrings([]string{"you're drunk"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/events.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/events.go deleted file mode 100644 index 06712fd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/events.go +++ /dev/null @@ -1,90 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/api/app_events" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Events struct { - ui terminal.UI - config core_config.Reader - appReq requirements.ApplicationRequirement - eventsRepo app_events.AppEventsRepository -} - -func NewEvents(ui terminal.UI, config core_config.Reader, eventsRepo app_events.AppEventsRepository) (cmd *Events) { - cmd = new(Events) - cmd.ui = ui - cmd.config = config - cmd.eventsRepo = eventsRepo - return -} - -func (cmd *Events) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "events", - Description: T("Show recent app events"), - Usage: T("CF_NAME events APP_NAME"), - } -} - -func (cmd *Events) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *Events) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - - cmd.ui.Say(T("Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - table := cmd.ui.Table([]string{T("time"), T("event"), T("actor"), T("description")}) - - events, apiErr := cmd.eventsRepo.RecentEvents(app.Guid, 50) - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching events.\n{{.ApiErr}}", - map[string]interface{}{"ApiErr": apiErr.Error()})) - return - } - - for _, event := range events { - table.Add( - event.Timestamp.Local().Format("2006-01-02T15:04:05.00-0700"), - event.Name, - event.ActorName, - event.Description, - ) - } - - table.Print() - - if len(events) == 0 { - cmd.ui.Say(T("No events for app {{.AppName}}", - map[string]interface{}{"AppName": terminal.EntityNameColor(app.Name)})) - return - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/events_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/events_test.go deleted file mode 100644 index ebf91ba..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/events_test.go +++ /dev/null @@ -1,118 +0,0 @@ -package application_test - -import ( - "time" - - testapi "github.com/cloudfoundry/cli/cf/api/app_events/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("events command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - eventsRepo *testapi.FakeAppEventsRepository - ui *testterm.FakeUI - ) - - const TIMESTAMP_FORMAT = "2006-01-02T15:04:05.00-0700" - - BeforeEach(func() { - eventsRepo = new(testapi.FakeAppEventsRepository) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - ui = new(testterm.FakeUI) - }) - - runCommand := func(args ...string) bool { - configRepo := testconfig.NewRepositoryWithDefaults() - cmd := NewEvents(ui, configRepo, eventsRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails with usage when called without an app name", func() { - passed := runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - - It("lists events given an app name", func() { - earlierTimestamp, err := time.Parse(TIMESTAMP_FORMAT, "1999-12-31T23:59:11.00-0000") - Expect(err).NotTo(HaveOccurred()) - - timestamp, err := time.Parse(TIMESTAMP_FORMAT, "2000-01-01T00:01:11.00-0000") - Expect(err).NotTo(HaveOccurred()) - - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - requirementsFactory.Application = app - - eventsRepo.RecentEventsReturns([]models.EventFields{ - { - Guid: "event-guid-1", - Name: "app crashed", - Timestamp: earlierTimestamp, - Description: "reason: app instance exited, exit_status: 78", - ActorName: "George Clooney", - }, - { - Guid: "event-guid-2", - Name: "app crashed", - Timestamp: timestamp, - Description: "reason: app instance was stopped, exit_status: 77", - ActorName: "Marcel Marceau", - }, - }, nil) - - runCommand("my-app") - - Expect(eventsRepo.RecentEventsCallCount()).To(Equal(1)) - appGuid, limit := eventsRepo.RecentEventsArgsForCall(0) - Expect(limit).To(Equal(int64(50))) - Expect(appGuid).To(Equal("my-app-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting events for app", "my-app", "my-org", "my-space", "my-user"}, - []string{"time", "event", "actor", "description"}, - []string{earlierTimestamp.Local().Format(TIMESTAMP_FORMAT), "app crashed", "George Clooney", "app instance exited", "78"}, - []string{timestamp.Local().Format(TIMESTAMP_FORMAT), "app crashed", "Marcel Marceau", "app instance was stopped", "77"}, - )) - }) - - It("tells the user when an error occurs", func() { - eventsRepo.RecentEventsReturns(nil, errors.New("welp")) - - app := models.Application{} - app.Name = "my-app" - requirementsFactory.Application = app - - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"events", "my-app"}, - []string{"FAILED"}, - []string{"welp"}, - )) - }) - - It("tells the user when no events exist for that app", func() { - app := models.Application{} - app.Name = "my-app" - requirementsFactory.Application = app - - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"events", "my-app"}, - []string{"No events", "my-app"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/files.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/files.go deleted file mode 100644 index 36de69d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/files.go +++ /dev/null @@ -1,107 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/api/app_files" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Files struct { - ui terminal.UI - config core_config.Reader - appFilesRepo app_files.AppFilesRepository - appReq requirements.ApplicationRequirement -} - -func NewFiles(ui terminal.UI, config core_config.Reader, appFilesRepo app_files.AppFilesRepository) (cmd *Files) { - cmd = new(Files) - cmd.ui = ui - cmd.config = config - cmd.appFilesRepo = appFilesRepo - return -} - -func (cmd *Files) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "files", - ShortName: "f", - Description: T("Print out a list of files in a directory or the contents of a specific file"), - Usage: T("CF_NAME files APP_NAME [PATH] [-i INSTANCE]"), - Flags: []cli.Flag{ - flag_helpers.NewIntFlag("i", T("Instance")), - }, - } -} - -func (cmd *Files) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) < 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *Files) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - - var instance int - if c.IsSet("i") { - instance = c.Int("i") - if instance < 0 { - cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be a positive integer", - map[string]interface{}{ - "Instance": instance, - })) - } - if instance >= app.InstanceCount { - cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - map[string]interface{}{ - "Instance": instance, - "InstanceCount": app.InstanceCount, - })) - } - } - - cmd.ui.Say(T("Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - path := "/" - if len(c.Args()) > 1 { - path = c.Args()[1] - } - - list, apiErr := cmd.appFilesRepo.ListFiles(app.Guid, instance, path) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if list == "" { - cmd.ui.Say("No files found") - } else { - cmd.ui.Say("%s", list) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/files_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/files_test.go deleted file mode 100644 index 529b899..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/files_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package application_test - -import ( - testappfiles "github.com/cloudfoundry/cli/cf/api/app_files/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("files command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - appFilesRepo *testappfiles.FakeAppFilesRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - appFilesRepo = &testappfiles.FakeAppFilesRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewFiles(ui, configRepo, appFilesRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.TargetedSpaceSuccess = true - runCommand("my-app", "/foo") - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("my-app", "/foo")).To(BeFalse()) - }) - - It("fails with usage when not provided an app name", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - passed := runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - }) - - Context("when logged in, a space is targeted and a valid app name is provided", func() { - BeforeEach(func() { - app := models.Application{} - app.Name = "my-found-app" - app.Guid = "my-app-guid" - - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - appFilesRepo.ListFilesReturns("file 1\nfile 2", nil) - }) - - It("it lists files in a directory", func() { - runCommand("my-app", "/foo") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting files for app", "my-found-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"file 1"}, - []string{"file 2"}, - )) - - guid, _, path := appFilesRepo.ListFilesArgsForCall(0) - Expect(guid).To(Equal("my-app-guid")) - Expect(path).To(Equal("/foo")) - }) - - It("does not interpolate or interpret special format characters as though it should be a format string", func() { - appFilesRepo.ListFilesReturns("%s %d %i", nil) - runCommand("my-app", "/foo") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"%s %d %i"})) - }) - - Context("checking for bad flags", func() { - It("fails when non-positive value is given for instance", func() { - runCommand("-i", "-1", "my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid instance"}, - []string{"Instance must be a positive integer"}, - )) - }) - - It("fails when instance is larger than instance count", func() { - runCommand("-i", "5", "my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid instance"}, - []string{"Instance must be less than"}, - )) - }) - - }) - - Context("when there is no file to be listed", func() { - BeforeEach(func() { - appFilesRepo.ListFilesReturns("", nil) - }) - - It("informs user that the directory is empty", func() { - runCommand("my-app", "/foo") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting files for app", "my-found-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{""}, - []string{"No files found"}, - )) - }) - - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/logs.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/logs.go deleted file mode 100644 index 2525c74..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/logs.go +++ /dev/null @@ -1,143 +0,0 @@ -package application - -import ( - "fmt" - "time" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/ui_helpers" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/sonde-go/events" - "github.com/codegangsta/cli" -) - -type Logs struct { - ui terminal.UI - config core_config.Reader - noaaRepo api.LogsNoaaRepository - oldLogsRepo api.OldLogsRepository - appReq requirements.ApplicationRequirement -} - -func NewLogs(ui terminal.UI, config core_config.Reader, noaaRepo api.LogsNoaaRepository, oldLogsRepo api.OldLogsRepository) (cmd *Logs) { - cmd = new(Logs) - cmd.ui = ui - cmd.config = config - cmd.noaaRepo = noaaRepo - cmd.oldLogsRepo = oldLogsRepo - return -} - -func (cmd *Logs) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "logs", - Description: T("Tail or show recent logs for an app"), - Usage: T("CF_NAME logs APP_NAME"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "recent", Usage: T("Dump recent logs instead of tailing")}, - }, - } -} - -func (cmd *Logs) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - - return -} - -func (cmd *Logs) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - - if c.Bool("recent") { - cmd.recentLogsFor(app) - } else { - cmd.tailLogsFor(app) - } -} - -func (cmd *Logs) recentLogsFor(app models.Application) { - cmd.ui.Say(T("Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - messages, err := cmd.oldLogsRepo.RecentLogsFor(app.Guid) - // messages, err := cmd.noaaRepo.RecentLogsFor(app.Guid) - if err != nil { - cmd.handleError(err) - } - - for _, msg := range messages { - cmd.ui.Say("%s", LogMessageOutput(msg, time.Local)) - // cmd.ui.Say("%s", LogNoaaMessageOutput(msg, time.Local)) - } -} - -func (cmd *Logs) tailLogsFor(app models.Application) { - onConnect := func() { - cmd.ui.Say(T("Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } - - err := cmd.oldLogsRepo.TailLogsFor(app.Guid, onConnect, func(msg *logmessage.LogMessage) { - cmd.ui.Say("%s", LogMessageOutput(msg, time.Local)) - }) - // err := cmd.noaaRepo.TailNoaaLogsFor(app.Guid, onConnect, func(msg *events.LogMessage) { - // cmd.ui.Say("%s", LogNoaaMessageOutput(msg, time.Local)) - // }) - - if err != nil { - cmd.handleError(err) - } -} - -func (cmd *Logs) handleError(err error) { - switch err.(type) { - case nil: - case *errors.InvalidSSLCert: - cmd.ui.Failed(err.Error() + T("\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error")) - default: - cmd.ui.Failed(err.Error()) - } -} - -func LogMessageOutput(msg *logmessage.LogMessage, loc *time.Location) string { - logHeader, coloredLogHeader := ui_helpers.ExtractLogHeader(msg, loc) - logContent := ui_helpers.ExtractLogContent(msg, logHeader) - - return fmt.Sprintf("%s%s", coloredLogHeader, logContent) -} - -func LogNoaaMessageOutput(msg *events.LogMessage, loc *time.Location) string { - logHeader, coloredLogHeader := ui_helpers.ExtractNoaaLogHeader(msg, loc) - logContent := ui_helpers.ExtractNoaaLogContent(msg, logHeader) - - return fmt.Sprintf("%s%s", coloredLogHeader, logContent) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/logs_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/logs_test.go deleted file mode 100644 index d61c94a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/logs_test.go +++ /dev/null @@ -1,235 +0,0 @@ -package application_test - -import ( - "time" - - "code.google.com/p/gogoprotobuf/proto" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testlogs "github.com/cloudfoundry/cli/testhelpers/logs" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/sonde-go/events" - - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("logs command", func() { - var ( - ui *testterm.FakeUI - oldLogsRepo *testapi.FakeOldLogsRepository - noaaRepo *testapi.FakeLogsNoaaRepository - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - oldLogsRepo = &testapi.FakeOldLogsRepository{} - noaaRepo = &testapi.FakeLogsNoaaRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewLogs(ui, configRepo, noaaRepo, oldLogsRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when called without one argument", func() { - requirementsFactory.LoginSuccess = true - - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when not logged in", func() { - Expect(runCommand("my-app")).To(BeFalse()) - }) - It("fails if a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("--recent", "my-app")).To(BeFalse()) - }) - - }) - - Context("when logged in", func() { - var ( - app models.Application - ) - - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - app = models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - - currentTime := time.Now() - recentLogs := []*logmessage.LogMessage{ - testlogs.NewOldLogMessage("Log Line 1", app.Guid, "DEA", currentTime), - testlogs.NewOldLogMessage("Log Line 2", app.Guid, "DEA", currentTime), - } - - appLogs := []*logmessage.LogMessage{ - testlogs.NewOldLogMessage("Log Line 1", app.Guid, "DEA", time.Now()), - } - // recentLogs := []*events.LogMessage{ - // testlogs.NewNoaaLogMessage("Log Line 1", app.Guid, "DEA", currentTime), - // testlogs.NewNoaaLogMessage("Log Line 2", app.Guid, "DEA", currentTime), - // } - - // appLogs := []*events.LogMessage{ - // testlogs.NewNoaaLogMessage("Log Line 1", app.Guid, "DEA", time.Now()), - // } - - requirementsFactory.Application = app - oldLogsRepo.RecentLogsForReturns(recentLogs, nil) - oldLogsRepo.TailLogsForStub = func(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error { - onConnect() - for _, log := range appLogs { - onMessage(log) - } - return nil - } - - // noaaRepo.RecentLogsForReturns(recentLogs, nil) - - // noaaRepo.TailNoaaLogsForStub = func(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error { - // onConnect() - // for _, log := range appLogs { - // onMessage(log) - // } - // return nil - // } - }) - - It("shows the recent logs when the --recent flag is provided", func() { - runCommand("--recent", "my-app") - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - // Expect(app.Guid).To(Equal(noaaRepo.RecentLogsForArgsForCall(0))) - Expect(app.Guid).To(Equal(oldLogsRepo.RecentLogsForArgsForCall(0))) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Connected, dumping recent logs for app", "my-app", "my-org", "my-space", "my-user"}, - []string{"Log Line 1"}, - []string{"Log Line 2"}, - )) - }) - - Context("when the log messages contain format string identifiers", func() { - BeforeEach(func() { - oldLogsRepo.RecentLogsForReturns([]*logmessage.LogMessage{ - testlogs.NewOldLogMessage("hello%2Bworld%v", app.Guid, "DEA", time.Now()), - }, nil) - // noaaRepo.RecentLogsForReturns([]*events.LogMessage{ - // testlogs.NewNoaaLogMessage("hello%2Bworld%v", app.Guid, "DEA", time.Now()), - // }, nil) - }) - - It("does not treat them as format strings", func() { - runCommand("--recent", "my-app") - Expect(ui.Outputs).To(ContainSubstrings([]string{"hello%2Bworld%v"})) - }) - }) - - It("tails the app's logs when no flags are given", func() { - runCommand("my-app") - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - // appGuid, _, _ := noaaRepo.TailNoaaLogsForArgsForCall(0) - appGuid, _, _ := oldLogsRepo.TailLogsForArgsForCall(0) - Expect(app.Guid).To(Equal(appGuid)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Connected, tailing logs for app", "my-app", "my-org", "my-space", "my-user"}, - []string{"Log Line 1"}, - )) - }) - - Context("when the loggregator server has an invalid cert", func() { - Context("when the skip-ssl-validation flag is not set", func() { - It("fails and informs the user about the skip-ssl-validation flag", func() { - // noaaRepo.TailNoaaLogsForReturns(errors.NewInvalidSSLCert("https://example.com", "it don't work good")) - oldLogsRepo.TailLogsForReturns(errors.NewInvalidSSLCert("https://example.com", "it don't work good")) - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Received invalid SSL certificate", "https://example.com"}, - []string{"TIP"}, - )) - }) - - It("informs the user of the error when they include the --recent flag", func() { - // noaaRepo.RecentLogsForReturns(nil, errors.NewInvalidSSLCert("https://example.com", "how does SSL work???")) - oldLogsRepo.RecentLogsForReturns(nil, errors.NewInvalidSSLCert("https://example.com", "how does SSL work???")) - runCommand("--recent", "my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Received invalid SSL certificate", "https://example.com"}, - []string{"TIP"}, - )) - }) - }) - }) - - Context("when the loggregator server has a valid cert", func() { - It("tails logs", func() { - runCommand("my-app") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Connected, tailing logs for app", "my-org", "my-space", "my-user"}, - )) - }) - }) - - Describe("Helpers", func() { - date := time.Date(2014, 4, 4, 11, 39, 20, 5, time.UTC) - - createMessage := func(sourceId string, sourceName string, msgType events.LogMessage_MessageType, date time.Time) *events.LogMessage { - timestamp := date.UnixNano() - return &events.LogMessage{ - Message: []byte("Hello World!\n\r\n\r"), - AppId: proto.String("my-app-guid"), - MessageType: &msgType, - SourceInstance: &sourceId, - Timestamp: ×tamp, - SourceType: &sourceName, - } - } - - Context("when the message comes", func() { - It("include the instance index", func() { - msg := createMessage("4", "DEA", events.LogMessage_OUT, date) - Expect(terminal.Decolorize(LogNoaaMessageOutput(msg, time.UTC))).To(Equal("2014-04-04T11:39:20.00+0000 [DEA/4] OUT Hello World!")) - }) - - It("doesn't include the instance index if sourceID is empty", func() { - msg := createMessage("", "DEA", events.LogMessage_OUT, date) - Expect(terminal.Decolorize(LogNoaaMessageOutput(msg, time.UTC))).To(Equal("2014-04-04T11:39:20.00+0000 [DEA] OUT Hello World!")) - }) - }) - - Context("when the message was written to stderr", func() { - It("shows the log type as 'ERR'", func() { - msg := createMessage("4", "STG", events.LogMessage_ERR, date) - Expect(terminal.Decolorize(LogNoaaMessageOutput(msg, time.UTC))).To(Equal("2014-04-04T11:39:20.00+0000 [STG/4] ERR Hello World!")) - }) - }) - - It("formats the time in the given time zone", func() { - msg := createMessage("4", "RTR", events.LogMessage_ERR, date) - Expect(terminal.Decolorize(LogNoaaMessageOutput(msg, time.FixedZone("the-zone", 3*60*60)))).To(Equal("2014-04-04T14:39:20.00+0300 [RTR/4] ERR Hello World!")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/push.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/push.go deleted file mode 100644 index a1760a7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/push.go +++ /dev/null @@ -1,637 +0,0 @@ -package application - -import ( - "fmt" - "os" - "regexp" - "strconv" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/fileutils" - - "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/api/stacks" - "github.com/cloudfoundry/cli/cf/app_files" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/words/generator" - "github.com/codegangsta/cli" -) - -type Push struct { - ui terminal.UI - config core_config.Reader - manifestRepo manifest.ManifestRepository - appStarter ApplicationStarter - appStopper ApplicationStopper - serviceBinder service.ServiceBinder - appRepo applications.ApplicationRepository - domainRepo api.DomainRepository - routeRepo api.RouteRepository - serviceRepo api.ServiceRepository - stackRepo stacks.StackRepository - authRepo authentication.AuthenticationRepository - wordGenerator generator.WordGenerator - actor actors.PushActor - zipper app_files.Zipper - app_files app_files.AppFiles -} - -func NewPush(ui terminal.UI, config core_config.Reader, manifestRepo manifest.ManifestRepository, - starter ApplicationStarter, stopper ApplicationStopper, binder service.ServiceBinder, - appRepo applications.ApplicationRepository, domainRepo api.DomainRepository, routeRepo api.RouteRepository, - stackRepo stacks.StackRepository, serviceRepo api.ServiceRepository, - authRepo authentication.AuthenticationRepository, wordGenerator generator.WordGenerator, - actor actors.PushActor, zipper app_files.Zipper, app_files app_files.AppFiles) *Push { - return &Push{ - ui: ui, - config: config, - manifestRepo: manifestRepo, - appStarter: starter, - appStopper: stopper, - serviceBinder: binder, - appRepo: appRepo, - domainRepo: domainRepo, - routeRepo: routeRepo, - serviceRepo: serviceRepo, - stackRepo: stackRepo, - authRepo: authRepo, - wordGenerator: wordGenerator, - actor: actor, - zipper: zipper, - app_files: app_files, - } -} - -func (cmd *Push) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "push", - ShortName: "p", - Description: T("Push a new app or sync changes to an existing app"), - Usage: T("Push a single app (with or without a manifest):\n") + T(" CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n") + T(" [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n") + - " [--no-hostname] [--no-manifest] [--no-route] [--no-start]\n" + - "\n" + T(" Push multiple apps with a manifest:\n") + T(" CF_NAME push [-f MANIFEST_PATH]\n"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("b", T("Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'")), - flag_helpers.NewStringFlag("c", T("Startup command, set to null to reset to default start command")), - flag_helpers.NewStringFlag("d", T("Domain (e.g. example.com)")), - flag_helpers.NewStringFlag("f", T("Path to manifest")), - flag_helpers.NewIntFlag("i", T("Number of instances")), - flag_helpers.NewStringFlag("k", T("Disk limit (e.g. 256M, 1024M, 1G)")), - flag_helpers.NewStringFlag("m", T("Memory limit (e.g. 256M, 1024M, 1G)")), - flag_helpers.NewStringFlag("n", T("Hostname (e.g. my-subdomain)")), - flag_helpers.NewStringFlag("p", T("Path to app directory or to a zip file of the contents of the app directory")), - flag_helpers.NewStringFlag("s", T("Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)")), - flag_helpers.NewStringFlag("t", T("Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply")), - cli.BoolFlag{Name: "no-hostname", Usage: T("Map the root domain to this app")}, - cli.BoolFlag{Name: "no-manifest", Usage: T("Ignore manifest file")}, - cli.BoolFlag{Name: "no-route", Usage: T("Do not map a route to this app and remove routes from previous pushes of this app.")}, - cli.BoolFlag{Name: "no-start", Usage: T("Do not start an app after pushing")}, - cli.BoolFlag{Name: "random-route", Usage: T("Create a random route for this app")}, - }, - } -} - -func (cmd *Push) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) > 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - return -} - -func (cmd *Push) Run(c *cli.Context) { - appSet := cmd.findAndValidateAppsToPush(c) - _, apiErr := cmd.authRepo.RefreshAuthToken() - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - routeActor := actors.NewRouteActor(cmd.ui, cmd.routeRepo) - - for _, appParams := range appSet { - cmd.fetchStackGuid(&appParams) - app := cmd.createOrUpdateApp(appParams) - - cmd.updateRoutes(routeActor, app, appParams) - - cmd.ui.Say(T("Uploading {{.AppName}}...", - map[string]interface{}{"AppName": terminal.EntityNameColor(app.Name)})) - - apiErr := cmd.uploadApp(app.Guid, *appParams.Path) - if apiErr != nil { - cmd.ui.Failed(fmt.Sprintf(T("Error uploading application.\n{{.ApiErr}}", - map[string]interface{}{"ApiErr": apiErr.Error()}))) - return - } - cmd.ui.Ok() - - if appParams.ServicesToBind != nil { - cmd.bindAppToServices(*appParams.ServicesToBind, app) - } - - cmd.restart(app, appParams, c) - } -} - -func (cmd *Push) updateRoutes(routeActor actors.RouteActor, app models.Application, appParams models.AppParams) { - defaultRouteAcceptable := len(app.Routes) == 0 - routeDefined := appParams.Domains != nil || !appParams.IsHostEmpty() || appParams.NoHostname - - if appParams.NoRoute { - cmd.removeRoutes(app, routeActor) - return - } - - if routeDefined || defaultRouteAcceptable { - if appParams.Domains == nil { - cmd.processDomainsAndBindRoutes(appParams, routeActor, app, cmd.findDomain(nil)) - } else { - for _, d := range *(appParams.Domains) { - cmd.processDomainsAndBindRoutes(appParams, routeActor, app, cmd.findDomain(&d)) - } - } - } -} - -func (cmd *Push) processDomainsAndBindRoutes(appParams models.AppParams, routeActor actors.RouteActor, app models.Application, domain models.DomainFields) { - if appParams.IsHostEmpty() { - cmd.createAndBindRoute(nil, appParams.UseRandomHostname, routeActor, app, appParams.NoHostname, domain) - } else { - for _, host := range *(appParams.Hosts) { - cmd.createAndBindRoute(&host, appParams.UseRandomHostname, routeActor, app, appParams.NoHostname, domain) - } - } -} - -func (cmd *Push) createAndBindRoute(host *string, UseRandomHostname bool, routeActor actors.RouteActor, app models.Application, noHostName bool, domain models.DomainFields) { - hostname := cmd.hostnameForApp(host, UseRandomHostname, app.Name, noHostName) - route := routeActor.FindOrCreateRoute(hostname, domain) - routeActor.BindRoute(app, route) -} - -func (cmd *Push) removeRoutes(app models.Application, routeActor actors.RouteActor) { - if len(app.Routes) == 0 { - cmd.ui.Say(T("App {{.AppName}} is a worker, skipping route creation", - map[string]interface{}{"AppName": terminal.EntityNameColor(app.Name)})) - } else { - routeActor.UnbindAll(app) - } -} - -func (cmd *Push) hostnameForApp(host *string, useRandomHostName bool, name string, noHostName bool) string { - if noHostName { - return "" - } - - if host != nil { - return *host - } else if useRandomHostName { - return hostNameForString(name) + "-" + cmd.wordGenerator.Babble() - } else { - return hostNameForString(name) - } -} - -var forbiddenHostCharRegex = regexp.MustCompile("[^a-z0-9-]") -var whitespaceRegex = regexp.MustCompile(`[\s_]+`) - -func hostNameForString(name string) string { - name = strings.ToLower(name) - name = whitespaceRegex.ReplaceAllString(name, "-") - name = forbiddenHostCharRegex.ReplaceAllString(name, "") - return name -} - -func (cmd *Push) findDomain(domainName *string) (domain models.DomainFields) { - domain, error := cmd.domainRepo.FirstOrDefault(cmd.config.OrganizationFields().Guid, domainName) - if error != nil { - cmd.ui.Failed(error.Error()) - } - - return -} - -func (cmd *Push) bindAppToServices(services []string, app models.Application) { - for _, serviceName := range services { - serviceInstance, err := cmd.serviceRepo.FindInstanceByName(serviceName) - - if err != nil { - cmd.ui.Failed(T("Could not find service {{.ServiceName}} to bind to {{.AppName}}", - map[string]interface{}{"ServiceName": serviceName, "AppName": app.Name})) - return - } - - cmd.ui.Say(T("Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceInstance.Name), - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - err = cmd.serviceBinder.BindApplication(app, serviceInstance, nil) - - switch httpErr := err.(type) { - case errors.HttpError: - if httpErr.ErrorCode() == errors.APP_ALREADY_BOUND { - err = nil - } - } - - if err != nil { - cmd.ui.Failed(T("Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - map[string]interface{}{"ServiceName": serviceName, "Err": err.Error()})) - } - - cmd.ui.Ok() - } -} - -func (cmd *Push) fetchStackGuid(appParams *models.AppParams) { - if appParams.StackName == nil { - return - } - - stackName := *appParams.StackName - cmd.ui.Say(T("Using stack {{.StackName}}...", - map[string]interface{}{"StackName": terminal.EntityNameColor(stackName)})) - - stack, apiErr := cmd.stackRepo.FindByName(stackName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - appParams.StackGuid = &stack.Guid -} - -func (cmd *Push) restart(app models.Application, params models.AppParams, c *cli.Context) { - if app.State != T("stopped") { - cmd.ui.Say("") - app, _ = cmd.appStopper.ApplicationStop(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) - } - - cmd.ui.Say("") - - if c.Bool("no-start") { - return - } - - if params.HealthCheckTimeout != nil { - cmd.appStarter.SetStartTimeoutInSeconds(*params.HealthCheckTimeout) - } - - cmd.appStarter.ApplicationStart(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) -} - -func (cmd *Push) createOrUpdateApp(appParams models.AppParams) (app models.Application) { - if appParams.Name == nil { - cmd.ui.Failed(T("Error: No name found for app")) - } - - app, apiErr := cmd.appRepo.Read(*appParams.Name) - - switch apiErr.(type) { - case nil: - app = cmd.updateApp(app, appParams) - case *errors.ModelNotFoundError: - app = cmd.createApp(appParams) - default: - cmd.ui.Failed(apiErr.Error()) - } - - return -} - -func (cmd *Push) createApp(appParams models.AppParams) (app models.Application) { - spaceGuid := cmd.config.SpaceFields().Guid - appParams.SpaceGuid = &spaceGuid - - cmd.ui.Say(T("Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(*appParams.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - app, apiErr := cmd.appRepo.Create(appParams) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - return -} - -func (cmd *Push) updateApp(app models.Application, appParams models.AppParams) (updatedApp models.Application) { - cmd.ui.Say(T("Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - if appParams.EnvironmentVars != nil { - for key, val := range app.EnvironmentVars { - if _, ok := (*appParams.EnvironmentVars)[key]; !ok { - (*appParams.EnvironmentVars)[key] = val - } - } - } - - var apiErr error - updatedApp, apiErr = cmd.appRepo.Update(app.Guid, appParams) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - return -} - -func (cmd *Push) findAndValidateAppsToPush(c *cli.Context) []models.AppParams { - appsFromManifest := cmd.getAppParamsFromManifest(c) - appFromContext := cmd.getAppParamsFromContext(c) - return cmd.createAppSetFromContextAndManifest(appFromContext, appsFromManifest) -} - -func (cmd *Push) getAppParamsFromManifest(c *cli.Context) []models.AppParams { - if c.Bool("no-manifest") { - return []models.AppParams{} - } - - var path string - if c.String("f") != "" { - path = c.String("f") - } else { - var err error - path, err = os.Getwd() - if err != nil { - cmd.ui.Failed(T("Could not determine the current working directory!"), err) - } - } - - m, err := cmd.manifestRepo.ReadManifest(path) - - if err != nil { - if m.Path == "" && c.String("f") == "" { - return []models.AppParams{} - } else { - cmd.ui.Failed(T("Error reading manifest file:\n{{.Err}}", map[string]interface{}{"Err": err.Error()})) - } - } - - apps, err := m.Applications() - if err != nil { - cmd.ui.Failed("Error reading manifest file:\n%s", err) - } - - cmd.ui.Say(T("Using manifest file {{.Path}}\n", - map[string]interface{}{"Path": terminal.EntityNameColor(m.Path)})) - return apps -} - -func (cmd *Push) createAppSetFromContextAndManifest(contextApp models.AppParams, manifestApps []models.AppParams) (apps []models.AppParams) { - var err error - - switch len(manifestApps) { - case 0: - if contextApp.Name == nil { - err = errors.New(T("Manifest file is not found in the current directory, please provide either an app name or manifest")) - } else { - err = addApp(&apps, contextApp) - } - case 1: - manifestApps[0].Merge(&contextApp) - err = addApp(&apps, manifestApps[0]) - default: - selectedAppName := contextApp.Name - contextApp.Name = nil - - if !contextApp.IsEmpty() { - cmd.ui.Failed("%s", T("Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.")) - } - - if selectedAppName != nil { - var manifestApp models.AppParams - manifestApp, err = findAppWithNameInManifest(*selectedAppName, manifestApps) - if err == nil { - addApp(&apps, manifestApp) - } - } else { - for _, manifestApp := range manifestApps { - addApp(&apps, manifestApp) - } - } - } - - if err != nil { - cmd.ui.Failed(T("Error: {{.Err}}", map[string]interface{}{"Err": err.Error()})) - } - - return -} - -func addApp(apps *[]models.AppParams, app models.AppParams) (err error) { - if app.Name == nil { - err = errors.New(T("App name is a required field")) - } - if app.Path == nil { - cwd, _ := os.Getwd() - app.Path = &cwd - } - *apps = append(*apps, app) - return -} - -func findAppWithNameInManifest(name string, manifestApps []models.AppParams) (app models.AppParams, err error) { - for _, appParams := range manifestApps { - if appParams.Name != nil && *appParams.Name == name { - app = appParams - return - } - } - - err = errors.New(T("Could not find app named '{{.AppName}}' in manifest", - map[string]interface{}{"AppName": name})) - return -} - -func (cmd *Push) getAppParamsFromContext(c *cli.Context) (appParams models.AppParams) { - if len(c.Args()) > 0 { - appParams.Name = &c.Args()[0] - } - - appParams.NoRoute = c.Bool("no-route") - appParams.UseRandomHostname = c.Bool("random-route") - appParams.NoHostname = c.Bool("no-hostname") - - if c.String("n") != "" { - appParams.Hosts = &[]string{c.String("n")} - } - - if c.String("b") != "" { - buildpack := c.String("b") - if buildpack == "null" || buildpack == "default" { - buildpack = "" - } - appParams.BuildpackUrl = &buildpack - } - - if c.String("c") != "" { - command := c.String("c") - if command == "null" || command == "default" { - command = "" - } - appParams.Command = &command - } - - if c.String("d") != "" { - appParams.Domains = &[]string{c.String("d")} - } - - if c.IsSet("i") { - instances := c.Int("i") - if instances < 1 { - cmd.ui.Failed(T("Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - map[string]interface{}{"InstancesCount": instances})) - } - appParams.InstanceCount = &instances - } - - if c.String("k") != "" { - diskQuota, err := formatters.ToMegabytes(c.String("k")) - if err != nil { - cmd.ui.Failed(T("Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - map[string]interface{}{"DiskQuota": c.String("k"), "Err": err.Error()})) - } - appParams.DiskQuota = &diskQuota - } - - if c.String("m") != "" { - memory, err := formatters.ToMegabytes(c.String("m")) - if err != nil { - cmd.ui.Failed(T("Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - map[string]interface{}{"MemLimit": c.String("m"), "Err": err.Error()})) - } - appParams.Memory = &memory - } - - if c.String("p") != "" { - path := c.String("p") - appParams.Path = &path - } - - if c.String("s") != "" { - stackName := c.String("s") - appParams.StackName = &stackName - } - - if c.String("t") != "" { - timeout, err := strconv.Atoi(c.String("t")) - if err != nil { - cmd.ui.Failed("Error: %s", errors.NewWithFmt(T("Invalid timeout param: {{.Timeout}}\n{{.Err}}", - map[string]interface{}{"Timeout": c.String("t"), "Err": err.Error()}))) - } - - appParams.HealthCheckTimeout = &timeout - } - - return -} - -func (cmd *Push) uploadApp(appGuid string, appDir string) (apiErr error) { - fileutils.TempDir("apps", func(uploadDir string, err error) { - if err != nil { - apiErr = err - return - } - - presentFiles, hasFileToUpload, err := cmd.actor.GatherFiles(appDir, uploadDir) - if err != nil { - apiErr = err - return - } - - fileutils.TempFile("uploads", func(zipFile *os.File, err error) { - if hasFileToUpload { - err = cmd.zipAppFiles(zipFile, appDir, uploadDir) - if err != nil { - apiErr = err - return - } - } - - err = cmd.actor.UploadApp(appGuid, zipFile, presentFiles) - if err != nil { - apiErr = err - return - } - }) - return - }) - return -} - -func (cmd *Push) zipAppFiles(zipFile *os.File, appDir string, uploadDir string) (zipErr error) { - zipErr = cmd.zipWithBetterErrors(uploadDir, zipFile) - if zipErr != nil { - return - } - - zipFileSize, zipErr := cmd.zipper.GetZipSize(zipFile) - if zipErr != nil { - return - } - - zipFileCount := cmd.app_files.CountFiles(uploadDir) - - cmd.describeUploadOperation(appDir, zipFileSize, zipFileCount) - return -} - -func (cmd *Push) zipWithBetterErrors(uploadDir string, zipFile *os.File) error { - zipError := cmd.zipper.Zip(uploadDir, zipFile) - switch err := zipError.(type) { - case nil: - return nil - case *errors.EmptyDirError: - zipFile = nil - return zipError - default: - return errors.NewWithError(T("Error zipping application"), err) - } -} - -func (cmd *Push) describeUploadOperation(path string, zipFileBytes, fileCount int64) { - if fileCount > 0 { - cmd.ui.Say(T("Uploading app files from: {{.Path}}", map[string]interface{}{"Path": path})) - cmd.ui.Say(T("Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - map[string]interface{}{ - "ZipFileBytes": formatters.ByteSize(zipFileBytes), - "FileCount": fileCount})) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/push_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/push_test.go deleted file mode 100644 index 7329585..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/push_test.go +++ /dev/null @@ -1,1226 +0,0 @@ -package application_test - -import ( - "os" - "path/filepath" - "syscall" - - fakeactors "github.com/cloudfoundry/cli/cf/actors/fakes" - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/api/resources" - testStacks "github.com/cloudfoundry/cli/cf/api/stacks/fakes" - fakeappfiles "github.com/cloudfoundry/cli/cf/app_files/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - testmanifest "github.com/cloudfoundry/cli/testhelpers/manifest" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - testwords "github.com/cloudfoundry/cli/words/generator/fakes" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("Push Command", func() { - var ( - cmd *Push - ui *testterm.FakeUI - configRepo core_config.ReadWriter - manifestRepo *testmanifest.FakeManifestRepository - starter *testcmd.FakeApplicationStarter - stopper *testcmd.FakeApplicationStopper - serviceBinder *testcmd.FakeAppBinder - appRepo *testApplication.FakeApplicationRepository - domainRepo *testapi.FakeDomainRepository - routeRepo *testapi.FakeRouteRepository - stackRepo *testStacks.FakeStackRepository - serviceRepo *testapi.FakeServiceRepo - wordGenerator *testwords.FakeWordGenerator - requirementsFactory *testreq.FakeReqFactory - authRepo *testapi.FakeAuthenticationRepository - actor *fakeactors.FakePushActor - app_files *fakeappfiles.FakeAppFiles - zipper *fakeappfiles.FakeZipper - ) - - BeforeEach(func() { - manifestRepo = &testmanifest.FakeManifestRepository{} - starter = &testcmd.FakeApplicationStarter{} - stopper = &testcmd.FakeApplicationStopper{} - serviceBinder = &testcmd.FakeAppBinder{} - appRepo = &testApplication.FakeApplicationRepository{} - - domainRepo = &testapi.FakeDomainRepository{} - sharedDomain := maker.NewSharedDomainFields(maker.Overrides{"name": "foo.cf-app.com", "guid": "foo-domain-guid"}) - domainRepo.ListDomainsForOrgDomains = []models.DomainFields{sharedDomain} - - routeRepo = &testapi.FakeRouteRepository{} - stackRepo = &testStacks.FakeStackRepository{} - serviceRepo = &testapi.FakeServiceRepo{} - authRepo = &testapi.FakeAuthenticationRepository{} - wordGenerator = new(testwords.FakeWordGenerator) - wordGenerator.BabbleReturns("laughing-cow") - - ui = new(testterm.FakeUI) - configRepo = testconfig.NewRepositoryWithDefaults() - - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - - zipper = &fakeappfiles.FakeZipper{} - app_files = &fakeappfiles.FakeAppFiles{} - actor = &fakeactors.FakePushActor{} - - cmd = NewPush(ui, configRepo, manifestRepo, starter, stopper, serviceBinder, - appRepo, - domainRepo, - routeRepo, - stackRepo, - serviceRepo, - authRepo, - wordGenerator, - actor, - zipper, - app_files) - }) - - callPush := func(args ...string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("passes when logged in and a space is targeted", func() { - Expect(callPush()).To(BeTrue()) - }) - - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(callPush()).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(callPush()).To(BeFalse()) - }) - - // yes, we're aware that the args here should probably be provided in a different order - // erg: app-name -p some/path some-extra-arg - // but the test infrastructure for parsing args and flags is sorely lacking - It("fails when provided too many args", func() { - Expect(callPush("-p", "path", "too-much", "app-name")).To(BeFalse()) - }) - }) - - Describe("when pushing a new app", func() { - BeforeEach(func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("App", "the-app") - - zipper.ZipReturns(nil) - zipper.GetZipSizeReturns(9001, nil) - actor.GatherFilesReturns(nil, true, nil) - actor.UploadAppReturns(nil) - }) - - It("does not call Zip() when there is no file to be uploaded", func() { - actor.GatherFilesReturns(nil, false, nil) - callPush("my-new-app") - - Expect(zipper.ZipCallCount()).To(Equal(0)) - }) - - Context("when the default route for the app already exists", func() { - BeforeEach(func() { - route := models.Route{} - route.Guid = "my-route-guid" - route.Host = "my-new-app" - route.Domain = domainRepo.ListDomainsForOrgDomains[0] - - routeRepo.FindByHostAndDomainReturns.Route = route - }) - - It("binds to existing routes", func() { - callPush("my-new-app") - - Expect(routeRepo.CreatedHost).To(BeEmpty()) - Expect(routeRepo.CreatedDomainGuid).To(BeEmpty()) - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app")) - Expect(routeRepo.BoundAppGuid).To(Equal("my-new-app-guid")) - Expect(routeRepo.BoundRouteGuid).To(Equal("my-route-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Using", "my-new-app.foo.cf-app.com"}, - []string{"Binding", "my-new-app.foo.cf-app.com"}, - []string{"OK"}, - )) - }) - }) - - Context("when the default route for the app does not exist", func() { - BeforeEach(func() { - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "couldn't find it") - }) - - It("refreshes the auth token (so fresh)", func() { // so clean - callPush("fresh-prince") - - Expect(authRepo.RefreshTokenCalled).To(BeTrue()) - }) - - Context("when refreshing the auth token fails", func() { - BeforeEach(func() { - authRepo.RefreshTokenError = errors.New("I accidentally the UAA") - }) - - It("it displays an error", func() { - callPush("of-bel-air") - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Error refreshing auth token"}, - )) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"accidentally the UAA"}, - )) - }) - }) - - Context("when multiple domains are specified in manifest", func() { - - BeforeEach(func() { - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{Name: "example1.com", Guid: "example-domain-guid"}, - models.DomainFields{Name: "example2.com", Guid: "example-domain-guid"}, - } - - manifestRepo.ReadManifestReturns.Manifest = multipleDomainsManifest() - }) - - It("creates a route for each domain", func() { - callPush() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating", "manifest-host.example1.com"}, - []string{"OK"}, - []string{"Binding", "manifest-host.example1.com"}, - []string{"OK"}, - []string{"Creating", "manifest-host.example2.com"}, - []string{"OK"}, - []string{"Binding", "manifest-host.example2.com"}, - []string{"OK"}, - )) - }) - - It("creates a route for each host on every domains", func() { - callPush() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating", "manifest-host.example1.com"}, - []string{"Binding", "manifest-host.example1.com"}, - []string{"Creating", "host2.example1.com"}, - []string{"Binding", "host2.example1.com"}, - []string{"Creating", "manifest-host.example2.com"}, - []string{"Binding", "manifest-host.example2.com"}, - []string{"Creating", "host2.example2.com"}, - []string{"Binding", "host2.example2.com"}, - )) - }) - - It("`-d` from argument will override the domains in manifest", func() { - callPush("-d", "example1.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating", "manifest-host.example1.com"}, - []string{"OK"}, - []string{"Binding", "manifest-host.example1.com"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Creating", "manifest-host.example2.com"}, - )) - }) - - }) - - It("creates an app", func() { - callPush("-t", "111", "my-new-app") - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - - Expect(*appRepo.CreatedAppParams().Name).To(Equal("my-new-app")) - Expect(*appRepo.CreatedAppParams().SpaceGuid).To(Equal("my-space-guid")) - - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app")) - Expect(routeRepo.CreatedHost).To(Equal("my-new-app")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("foo-domain-guid")) - Expect(routeRepo.BoundAppGuid).To(Equal("my-new-app-guid")) - Expect(routeRepo.BoundRouteGuid).To(Equal("my-new-app-route-guid")) - - appGuid, _, _ := actor.UploadAppArgsForCall(0) - Expect(appGuid).To(Equal("my-new-app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating app", "my-new-app", "my-org", "my-space"}, - []string{"OK"}, - []string{"Creating", "my-new-app.foo.cf-app.com"}, - []string{"OK"}, - []string{"Binding", "my-new-app.foo.cf-app.com"}, - []string{"OK"}, - []string{"Uploading my-new-app"}, - []string{"OK"}, - )) - - Expect(stopper.ApplicationStopCallCount()).To(Equal(0)) - - app, orgName, spaceName := starter.ApplicationStartArgsForCall(0) - Expect(app.Guid).To(Equal(appGuid)) - Expect(app.Name).To(Equal("my-new-app")) - Expect(orgName).To(Equal(configRepo.OrganizationFields().Name)) - Expect(spaceName).To(Equal(configRepo.SpaceFields().Name)) - Expect(starter.SetStartTimeoutInSecondsArgsForCall(0)).To(Equal(111)) - }) - - It("strips special characters when creating a default route", func() { - callPush("-t", "111", "Tim's 1st-Crazy__app!") - Expect(*appRepo.CreatedAppParams().Name).To(Equal("Tim's 1st-Crazy__app!")) - - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("tims-1st-crazy-app")) - Expect(routeRepo.CreatedHost).To(Equal("tims-1st-crazy-app")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating", "tims-1st-crazy-app.foo.cf-app.com"}, - []string{"Binding", "tims-1st-crazy-app.foo.cf-app.com"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("sets the app params from the flags", func() { - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{ - Name: "bar.cf-app.com", - Guid: "bar-domain-guid", - }, - } - stackRepo.FindByNameReturns(models.Stack{ - Name: "customLinux", - Guid: "custom-linux-guid", - }, nil) - - callPush( - "-c", "unicorn -c config/unicorn.rb -D", - "-d", "bar.cf-app.com", - "-n", "my-hostname", - "-k", "4G", - "-i", "3", - "-m", "2G", - "-b", "https://github.com/heroku/heroku-buildpack-play.git", - "-s", "customLinux", - "-t", "1", - "--no-start", - "my-new-app", - ) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Using", "customLinux"}, - []string{"OK"}, - []string{"Creating app", "my-new-app"}, - []string{"OK"}, - []string{"Creating route", "my-hostname.bar.cf-app.com"}, - []string{"OK"}, - []string{"Binding", "my-hostname.bar.cf-app.com", "my-new-app"}, - []string{"Uploading", "my-new-app"}, - []string{"OK"}, - )) - - Expect(stackRepo.FindByNameArgsForCall(0)).To(Equal("customLinux")) - - Expect(*appRepo.CreatedAppParams().Name).To(Equal("my-new-app")) - Expect(*appRepo.CreatedAppParams().Command).To(Equal("unicorn -c config/unicorn.rb -D")) - Expect(*appRepo.CreatedAppParams().InstanceCount).To(Equal(3)) - Expect(*appRepo.CreatedAppParams().DiskQuota).To(Equal(int64(4096))) - Expect(*appRepo.CreatedAppParams().Memory).To(Equal(int64(2048))) - Expect(*appRepo.CreatedAppParams().StackGuid).To(Equal("custom-linux-guid")) - Expect(*appRepo.CreatedAppParams().HealthCheckTimeout).To(Equal(1)) - Expect(*appRepo.CreatedAppParams().BuildpackUrl).To(Equal("https://github.com/heroku/heroku-buildpack-play.git")) - - Expect(domainRepo.FindByNameInOrgName).To(Equal("bar.cf-app.com")) - Expect(domainRepo.FindByNameInOrgGuid).To(Equal("my-org-guid")) - - Expect(routeRepo.CreatedHost).To(Equal("my-hostname")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("bar-domain-guid")) - Expect(routeRepo.BoundAppGuid).To(Equal("my-new-app-guid")) - Expect(routeRepo.BoundRouteGuid).To(Equal("my-hostname-route-guid")) - - appGuid, _, _ := actor.UploadAppArgsForCall(0) - Expect(appGuid).To(Equal("my-new-app-guid")) - - Expect(starter.ApplicationStartCallCount()).To(Equal(0)) - }) - - Context("when there is a shared domain", func() { - It("creates a route with the shared domain and maps it to the app", func() { - privateDomain := models.DomainFields{ - Shared: false, - Name: "private.cf-app.com", - Guid: "private-domain-guid", - } - sharedDomain := models.DomainFields{ - Name: "shared.cf-app.com", - Shared: true, - Guid: "shared-domain-guid", - } - - domainRepo.ListDomainsForOrgDomains = []models.DomainFields{privateDomain, sharedDomain} - - callPush("-t", "111", "my-new-app") - - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app")) - Expect(routeRepo.CreatedHost).To(Equal("my-new-app")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("shared-domain-guid")) - Expect(routeRepo.BoundAppGuid).To(Equal("my-new-app-guid")) - Expect(routeRepo.BoundRouteGuid).To(Equal("my-new-app-route-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating app", "my-new-app", "my-org", "my-space"}, - []string{"OK"}, - []string{"Creating", "my-new-app.shared.cf-app.com"}, - []string{"OK"}, - []string{"Binding", "my-new-app.shared.cf-app.com"}, - []string{"OK"}, - []string{"Uploading my-new-app"}, - []string{"OK"}, - )) - }) - }) - - Context("when there is no shared domain but there is a private domain in the targeted org", func() { - It("creates a route with the private domain and maps it to the app", func() { - privateDomain := models.DomainFields{ - Shared: false, - Name: "private.cf-app.com", - Guid: "private-domain-guid", - } - - domainRepo.ListDomainsForOrgDomains = []models.DomainFields{privateDomain} - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("App", "the-app") - - callPush("-t", "111", "my-new-app") - - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app")) - Expect(routeRepo.CreatedHost).To(Equal("my-new-app")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("private-domain-guid")) - Expect(routeRepo.BoundAppGuid).To(Equal("my-new-app-guid")) - Expect(routeRepo.BoundRouteGuid).To(Equal("my-new-app-route-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating app", "my-new-app", "my-org", "my-space"}, - []string{"OK"}, - []string{"Creating", "my-new-app.private.cf-app.com"}, - []string{"OK"}, - []string{"Binding", "my-new-app.private.cf-app.com"}, - []string{"OK"}, - []string{"Uploading my-new-app"}, - []string{"OK"}, - )) - }) - }) - - Describe("randomized hostnames", func() { - var manifestApp generic.Map - - BeforeEach(func() { - manifest := singleAppManifest() - manifestApp = manifest.Data.Get("applications").([]interface{})[0].(generic.Map) - manifestApp.Delete("host") - manifestRepo.ReadManifestReturns.Manifest = manifest - }) - - It("provides a random hostname when the --random-route flag is passed", func() { - callPush("--random-route", "my-new-app") - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app-laughing-cow")) - }) - - It("provides a random hostname when the random-route option is set in the manifest", func() { - manifestApp.Set("random-route", true) - - callPush("my-new-app") - - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app-laughing-cow")) - }) - }) - - It("pushes the contents of the app directory or zip file specified using the -p flag", func() { - callPush("-p", "../some/path-to/an-app/zip-file", "app-with-path") - - appDir, _ := actor.GatherFilesArgsForCall(0) - Expect(appDir).To(Equal("../some/path-to/an-app/zip-file")) - }) - - It("pushes the contents of the current working directory by default", func() { - callPush("app-with-default-path") - dir, _ := os.Getwd() - - appDir, _ := actor.GatherFilesArgsForCall(0) - Expect(appDir).To(Equal(dir)) - }) - - It("fails when given a bad manifest path", func() { - manifestRepo.ReadManifestReturns.Manifest = manifest.NewEmptyManifest() - manifestRepo.ReadManifestReturns.Error = errors.New("read manifest error") - - callPush("-f", "bad/manifest/path") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"read manifest error"}, - )) - }) - - It("does not fail when the current working directory does not contain a manifest", func() { - manifestRepo.ReadManifestReturns.Manifest = singleAppManifest() - manifestRepo.ReadManifestReturns.Error = syscall.ENOENT - manifestRepo.ReadManifestReturns.Manifest.Path = "" - - callPush("--no-route", "app-name") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating app", "app-name"}, - []string{"OK"}, - []string{"Uploading", "app-name"}, - []string{"OK"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("uses the manifest in the current directory by default", func() { - manifestRepo.ReadManifestReturns.Manifest = singleAppManifest() - manifestRepo.ReadManifestReturns.Manifest.Path = "manifest.yml" - - callPush("-p", "some/relative/path") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"Using manifest file", "manifest.yml"})) - - cwd, _ := os.Getwd() - Expect(manifestRepo.ReadManifestArgs.Path).To(Equal(cwd)) - }) - - It("does not use a manifest if the 'no-manifest' flag is passed", func() { - callPush("--no-route", "--no-manifest", "app-name") - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"FAILED"}, - []string{"hacker-manifesto"}, - )) - - Expect(manifestRepo.ReadManifestArgs.Path).To(Equal("")) - Expect(*appRepo.CreatedAppParams().Name).To(Equal("app-name")) - }) - - It("pushes an app when provided a manifest with one app defined", func() { - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{ - Name: "manifest-example.com", - Guid: "bar-domain-guid", - }, - } - - manifestRepo.ReadManifestReturns.Manifest = singleAppManifest() - - callPush() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "manifest-host.manifest-example.com"}, - []string{"OK"}, - []string{"Binding", "manifest-host.manifest-example.com"}, - []string{"manifest-app-name"}, - )) - - Expect(*appRepo.CreatedAppParams().Name).To(Equal("manifest-app-name")) - Expect(*appRepo.CreatedAppParams().Memory).To(Equal(int64(128))) - Expect(*appRepo.CreatedAppParams().InstanceCount).To(Equal(1)) - Expect(*appRepo.CreatedAppParams().StackName).To(Equal("custom-stack")) - Expect(*appRepo.CreatedAppParams().BuildpackUrl).To(Equal("some-buildpack")) - Expect(*appRepo.CreatedAppParams().Command).To(Equal("JAVA_HOME=$PWD/.openjdk JAVA_OPTS=\"-Xss995K\" ./bin/start.sh run")) - // Expect(actor.UploadedDir).To(Equal(filepath.Clean("some/path/from/manifest"))) TODO: Re-enable this once we develop a strategy - - Expect(*appRepo.CreatedAppParams().EnvironmentVars).To(Equal(map[string]interface{}{ - "PATH": "/u/apps/my-app/bin", - "FOO": "baz", - })) - }) - - It("pushes an app with multiple routes when multiple hosts are provided", func() { - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{ - Name: "manifest-example.com", - Guid: "bar-domain-guid", - }, - } - - manifestRepo.ReadManifestReturns.Manifest = multipleHostManifest() - - callPush() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "manifest-host-1.manifest-example.com"}, - []string{"OK"}, - []string{"Binding", "manifest-host-1.manifest-example.com"}, - []string{"Creating route", "manifest-host-2.manifest-example.com"}, - []string{"OK"}, - []string{"Binding", "manifest-host-2.manifest-example.com"}, - []string{"manifest-app-name"}, - )) - }) - - It("fails when parsing the manifest has errors", func() { - manifestRepo.ReadManifestReturns.Manifest = &manifest.Manifest{Path: "/some-path/"} - manifestRepo.ReadManifestReturns.Error = errors.New("buildpack should not be null") - - callPush() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Error", "reading", "manifest"}, - []string{"buildpack should not be null"}, - )) - }) - - It("does not create a route when provided the --no-route flag", func() { - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{ - Name: "bar.cf-app.com", - Guid: "bar-domain-guid", - }, - } - - callPush("--no-route", "my-new-app") - - Expect(*appRepo.CreatedAppParams().Name).To(Equal("my-new-app")) - Expect(routeRepo.CreatedHost).To(Equal("")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("")) - }) - - It("maps the root domain route to the app when given the --no-hostname flag", func() { - domainRepo.ListDomainsForOrgDomains = []models.DomainFields{{ - Name: "bar.cf-app.com", - Guid: "bar-domain-guid", - Shared: true, - }} - - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "uh oh") - - callPush("--no-hostname", "my-new-app") - - Expect(*appRepo.CreatedAppParams().Name).To(Equal("my-new-app")) - Expect(routeRepo.CreatedHost).To(Equal("")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("bar-domain-guid")) - }) - - It("Does not create a route when the no-route property is in the manifest", func() { - workerManifest := singleAppManifest() - workerManifest.Data.Get("applications").([]interface{})[0].(generic.Map).Set("no-route", true) - manifestRepo.ReadManifestReturns.Manifest = workerManifest - - callPush("worker-app") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"worker-app", "is a worker", "skipping route creation"})) - Expect(routeRepo.BoundAppGuid).To(Equal("")) - Expect(routeRepo.BoundRouteGuid).To(Equal("")) - }) - - It("fails when given an invalid memory limit", func() { - callPush("-m", "abcM", "my-new-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid", "memory limit", "abcM"}, - )) - }) - - Context("when a manifest has many apps", func() { - BeforeEach(func() { - manifestRepo.ReadManifestReturns.Manifest = manifestWithServicesAndEnv() - }) - - It("pushes each app", func() { - callPush() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating", "app1"}, - []string{"Creating", "app2"}, - )) - Expect(len(appRepo.CreateAppParams)).To(Equal(2)) - - firstApp := appRepo.CreateAppParams[0] - secondApp := appRepo.CreateAppParams[1] - Expect(*firstApp.Name).To(Equal("app1")) - Expect(*secondApp.Name).To(Equal("app2")) - - envVars := *firstApp.EnvironmentVars - Expect(envVars["SOMETHING"]).To(Equal("definitely-something")) - - envVars = *secondApp.EnvironmentVars - Expect(envVars["SOMETHING"]).To(Equal("nothing")) - }) - - It("pushes a single app when given the name of a single app in the manifest", func() { - callPush("app2") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"Creating", "app2"})) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"Creating", "app1"})) - Expect(len(appRepo.CreateAppParams)).To(Equal(1)) - Expect(*appRepo.CreateAppParams[0].Name).To(Equal("app2")) - }) - - It("fails when given the name of an app that is not in the manifest", func() { - callPush("non-existant-app") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - Expect(len(appRepo.CreateAppParams)).To(Equal(0)) - }) - }) - }) - }) - - Describe("re-pushing an existing app", func() { - var existingApp models.Application - - BeforeEach(func() { - existingApp = models.Application{} - existingApp.Name = "existing-app" - existingApp.Guid = "existing-app-guid" - existingApp.Command = "unicorn -c config/unicorn.rb -D" - existingApp.EnvironmentVars = map[string]interface{}{ - "crazy": "pants", - "FOO": "NotYoBaz", - "foo": "manchu", - } - - appRepo.ReadReturns.App = existingApp - appRepo.UpdateAppResult = existingApp - }) - - It("resets the app's buildpack when the -b flag is provided as 'default'", func() { - callPush("-b", "default", "existing-app") - Expect(*appRepo.UpdateParams.BuildpackUrl).To(Equal("")) - }) - - It("resets the app's command when the -c flag is provided as 'default'", func() { - callPush("-c", "default", "existing-app") - Expect(*appRepo.UpdateParams.Command).To(Equal("")) - }) - - It("resets the app's buildpack when the -b flag is provided as 'null'", func() { - callPush("-b", "null", "existing-app") - Expect(*appRepo.UpdateParams.BuildpackUrl).To(Equal("")) - }) - - It("resets the app's command when the -c flag is provided as 'null'", func() { - callPush("-c", "null", "existing-app") - Expect(*appRepo.UpdateParams.Command).To(Equal("")) - }) - - It("merges env vars from the manifest with those from the server", func() { - manifestRepo.ReadManifestReturns.Manifest = singleAppManifest() - - callPush("existing-app") - - updatedAppEnvVars := *appRepo.UpdateParams.EnvironmentVars - Expect(updatedAppEnvVars["crazy"]).To(Equal("pants")) - Expect(updatedAppEnvVars["FOO"]).To(Equal("baz")) - Expect(updatedAppEnvVars["foo"]).To(Equal("manchu")) - Expect(updatedAppEnvVars["PATH"]).To(Equal("/u/apps/my-app/bin")) - }) - - It("stops the app, achieving a full-downtime deploy!", func() { - appRepo.UpdateAppResult = existingApp - - callPush("existing-app") - - app, orgName, spaceName := stopper.ApplicationStopArgsForCall(0) - Expect(app.Guid).To(Equal(existingApp.Guid)) - Expect(app.Name).To(Equal("existing-app")) - Expect(orgName).To(Equal(configRepo.OrganizationFields().Name)) - Expect(spaceName).To(Equal(configRepo.SpaceFields().Name)) - - appGuid, _, _ := actor.UploadAppArgsForCall(0) - Expect(appGuid).To(Equal(existingApp.Guid)) - }) - - It("does not stop the app when it is already stopped", func() { - existingApp.State = "stopped" - appRepo.ReadReturns.App = existingApp - appRepo.UpdateAppResult = existingApp - - callPush("existing-app") - - Expect(stopper.ApplicationStopCallCount()).To(Equal(0)) - }) - - It("updates the app", func() { - existingRoute := models.RouteSummary{} - existingRoute.Host = "existing-app" - - existingApp.Routes = []models.RouteSummary{existingRoute} - appRepo.ReadReturns.App = existingApp - appRepo.UpdateAppResult = existingApp - - stackRepo.FindByNameReturns(models.Stack{ - Name: "differentStack", - Guid: "differentStack-guid", - }, nil) - - callPush( - "-c", "different start command", - "-i", "10", - "-m", "1G", - "-b", "https://github.com/heroku/heroku-buildpack-different.git", - "-s", "differentStack", - "existing-app", - ) - - Expect(appRepo.UpdateAppGuid).To(Equal(existingApp.Guid)) - Expect(*appRepo.UpdateParams.Command).To(Equal("different start command")) - Expect(*appRepo.UpdateParams.InstanceCount).To(Equal(10)) - Expect(*appRepo.UpdateParams.Memory).To(Equal(int64(1024))) - Expect(*appRepo.UpdateParams.BuildpackUrl).To(Equal("https://github.com/heroku/heroku-buildpack-different.git")) - Expect(*appRepo.UpdateParams.StackGuid).To(Equal("differentStack-guid")) - }) - - It("re-uploads the app", func() { - callPush("existing-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Uploading", "existing-app"}, - []string{"OK"}, - )) - }) - - Describe("when the app has a route bound", func() { - BeforeEach(func() { - domain := models.DomainFields{ - Name: "example.com", - Guid: "domain-guid", - Shared: true, - } - - domainRepo.ListDomainsForOrgDomains = []models.DomainFields{domain} - routeRepo.FindByHostAndDomainReturns.Route = models.Route{ - Host: "existing-app", - Domain: domain, - } - - existingApp.Routes = []models.RouteSummary{models.RouteSummary{ - Guid: "existing-route-guid", - Host: "existing-app", - Domain: domain, - }} - - appRepo.ReadReturns.App = existingApp - appRepo.UpdateAppResult = existingApp - }) - - It("uses the existing route when an app already has it bound", func() { - callPush("-d", "example.com", "existing-app") - - Expect(routeRepo.CreatedHost).To(Equal("")) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"Creating route"})) - Expect(ui.Outputs).To(ContainSubstrings([]string{"Using route", "existing-app", "example.com"})) - }) - - Context("and no route-related flags are given", func() { - Context("and there is no route in the manifest", func() { - It("does not add a route to the app", func() { - callPush("existing-app") - - appGuid, _, _ := actor.UploadAppArgsForCall(0) - Expect(appGuid).To(Equal("existing-app-guid")) - Expect(domainRepo.FindByNameInOrgName).To(Equal("")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Domain.Name).To(Equal("")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("")) - Expect(routeRepo.CreatedHost).To(Equal("")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("")) - }) - }) - - Context("and there is a route in the manifest", func() { - BeforeEach(func() { - manifestRepo.ReadManifestReturns.Manifest = existingAppManifest() - - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "uh oh") - - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{Name: "example.com", Guid: "example-domain-guid"}, - } - }) - - It("adds the route", func() { - callPush("existing-app") - Expect(routeRepo.CreatedHost).To(Equal("new-manifest-host")) - }) - }) - }) - - It("creates and binds a route when a different domain is specified", func() { - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "existing-app.newdomain.com") - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{Guid: "domain-guid", Name: "newdomain.com"}, - } - - callPush("-d", "newdomain.com", "existing-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "existing-app.newdomain.com"}, - []string{"OK"}, - []string{"Binding", "existing-app.newdomain.com"}, - )) - - Expect(domainRepo.FindByNameInOrgName).To(Equal("newdomain.com")) - Expect(domainRepo.FindByNameInOrgGuid).To(Equal("my-org-guid")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Domain.Name).To(Equal("newdomain.com")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("existing-app")) - Expect(routeRepo.CreatedHost).To(Equal("existing-app")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("domain-guid")) - }) - - It("creates and binds a route when a different hostname is specified", func() { - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "new-host.newdomain.com") - - callPush("-n", "new-host", "existing-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "new-host.example.com"}, - []string{"OK"}, - []string{"Binding", "new-host.example.com"}, - )) - - Expect(routeRepo.FindByHostAndDomainCalledWith.Domain.Name).To(Equal("example.com")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("new-host")) - Expect(routeRepo.CreatedHost).To(Equal("new-host")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("domain-guid")) - }) - - It("removes the route when the --no-route flag is given", func() { - callPush("--no-route", "existing-app") - - appGuid, _, _ := actor.UploadAppArgsForCall(0) - Expect(appGuid).To(Equal("existing-app-guid")) - Expect(domainRepo.FindByNameInOrgName).To(Equal("")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Domain.Name).To(Equal("")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("")) - Expect(routeRepo.CreatedHost).To(Equal("")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("")) - Expect(routeRepo.UnboundRouteGuid).To(Equal("existing-route-guid")) - Expect(routeRepo.UnboundAppGuid).To(Equal("existing-app-guid")) - }) - - It("binds the root domain route to an app with a pre-existing route when the --no-hostname flag is given", func() { - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "existing-app.example.com") - - callPush("--no-hostname", "existing-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "example.com"}, - []string{"OK"}, - []string{"Binding", "example.com"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"existing-app.example.com"})) - - Expect(routeRepo.FindByHostAndDomainCalledWith.Domain.Name).To(Equal("example.com")) - Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("")) - Expect(routeRepo.CreatedHost).To(Equal("")) - Expect(routeRepo.CreatedDomainGuid).To(Equal("domain-guid")) - }) - }) - }) - - Describe("service instances", func() { - BeforeEach(func() { - serviceRepo.FindInstanceByNameMap = generic.NewMap(map[interface{}]interface{}{ - "global-service": maker.NewServiceInstance("global-service"), - "app1-service": maker.NewServiceInstance("app1-service"), - "app2-service": maker.NewServiceInstance("app2-service"), - }) - - manifestRepo.ReadManifestReturns.Manifest = manifestWithServicesAndEnv() - }) - - Context("when the service is not bound", func() { - BeforeEach(func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("App", "the-app") - }) - - It("binds service instances to the app", func() { - callPush() - Expect(len(serviceBinder.AppsToBind)).To(Equal(4)) - Expect(serviceBinder.AppsToBind[0].Name).To(Equal("app1")) - Expect(serviceBinder.AppsToBind[1].Name).To(Equal("app1")) - Expect(serviceBinder.InstancesToBindTo[0].Name).To(Equal("app1-service")) - Expect(serviceBinder.InstancesToBindTo[1].Name).To(Equal("global-service")) - - Expect(serviceBinder.AppsToBind[2].Name).To(Equal("app2")) - Expect(serviceBinder.AppsToBind[3].Name).To(Equal("app2")) - Expect(serviceBinder.InstancesToBindTo[2].Name).To(Equal("app2-service")) - Expect(serviceBinder.InstancesToBindTo[3].Name).To(Equal("global-service")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating", "app1"}, - []string{"OK"}, - []string{"Binding service", "app1-service", "app1", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Binding service", "global-service", "app1", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Creating", "app2"}, - []string{"OK"}, - []string{"Binding service", "app2-service", "app2", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Binding service", "global-service", "app2", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - }) - }) - - Context("when the app is already bound to the service", func() { - BeforeEach(func() { - appRepo.ReadReturns.App = maker.NewApp(maker.Overrides{}) - serviceBinder.BindApplicationReturns.Error = errors.NewHttpError(500, "90003", "it don't work") - }) - - It("gracefully continues", func() { - callPush() - Expect(len(serviceBinder.AppsToBind)).To(Equal(4)) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when the service instance can't be found", func() { - BeforeEach(func() { - // routeRepo.FindByHostAndDomainReturns.Error = errors.new("can't find service instance") - serviceRepo.FindInstanceByNameErr = true - manifestRepo.ReadManifestReturns.Manifest = manifestWithServicesAndEnv() - }) - - It("fails with an error", func() { - callPush() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Could not find service", "app1-service", "app1"}, - )) - }) - }) - - }) - - Describe("checking for bad flags", func() { - It("fails when a non-numeric start timeout is given", func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("App", "the-app") - - callPush("-t", "FooeyTimeout", "my-new-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid", "timeout", "FooeyTimeout"}, - )) - }) - }) - - Describe("displaying information about files being uploaded", func() { - It("displays information about the files being uploaded", func() { - app_files.CountFilesReturns(11) - zipper.ZipReturns(nil) - zipper.GetZipSizeReturns(6100000, nil) - actor.GatherFilesReturns([]resources.AppFileResource{resources.AppFileResource{Path: "path/to/app"}, resources.AppFileResource{Path: "bar"}}, true, nil) - - curDir, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - - callPush("appName") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Uploading", curDir}, - []string{"5.8M", "11 files"}, - )) - }) - }) - - It("fails when the app can't be uploaded", func() { - actor.UploadAppReturns(errors.New("Boom!")) - - callPush("app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Uploading"}, - []string{"FAILED"}, - )) - }) - - Describe("when binding the route fails", func() { - BeforeEach(func() { - routeRepo.FindByHostAndDomainReturns.Route.Host = "existing-app" - routeRepo.FindByHostAndDomainReturns.Route.Domain = models.DomainFields{Name: "foo.cf-app.com"} - }) - - It("suggests using 'random-route' if the default route is taken", func() { - routeRepo.BindErr = errors.NewHttpError(400, errors.INVALID_RELATION, "The URL not available") - - callPush("existing-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"existing-app.foo.cf-app.com", "already in use"}, - []string{"TIP", "random-route"}, - )) - }) - - It("does not suggest using 'random-route' for other failures", func() { - routeRepo.BindErr = errors.NewHttpError(500, "some-code", "exception happened") - - callPush("existing-app") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"TIP", "random-route"})) - }) - }) - - It("fails when neither a manifest nor a name is given", func() { - manifestRepo.ReadManifestReturns.Error = errors.New("No such manifest") - callPush() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Manifest file is not found"}, - )) - }) -}) - -func existingAppManifest() *manifest.Manifest { - return &manifest.Manifest{ - Path: "manifest.yml", - Data: generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "name": "manifest-app-name", - "memory": "128MB", - "instances": 1, - "host": "new-manifest-host", - "domain": "example.com", - "stack": "custom-stack", - "timeout": 360, - "buildpack": "some-buildpack", - "command": `JAVA_HOME=$PWD/.openjdk JAVA_OPTS="-Xss995K" ./bin/start.sh run`, - "path": filepath.Clean("some/path/from/manifest"), - "env": generic.NewMap(map[interface{}]interface{}{ - "FOO": "baz", - "PATH": "/u/apps/my-app/bin", - }), - }), - }, - }), - } -} - -func multipleHostManifest() *manifest.Manifest { - return &manifest.Manifest{ - Path: "manifest.yml", - Data: generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "name": "manifest-app-name", - "memory": "128MB", - "instances": 1, - "hosts": []interface{}{"manifest-host-1", "manifest-host-2"}, - "domain": "manifest-example.com", - "stack": "custom-stack", - "timeout": 360, - "buildpack": "some-buildpack", - "command": `JAVA_HOME=$PWD/.openjdk JAVA_OPTS="-Xss995K" ./bin/start.sh run`, - "path": filepath.Clean("some/path/from/manifest"), - "env": generic.NewMap(map[interface{}]interface{}{ - "FOO": "baz", - "PATH": "/u/apps/my-app/bin", - }), - }), - }, - }), - } -} - -func multipleDomainsManifest() *manifest.Manifest { - return &manifest.Manifest{ - Path: "manifest.yml", - Data: generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "name": "manifest-app-name", - "memory": "128MB", - "instances": 1, - "host": "manifest-host", - "hosts": []interface{}{"host2"}, - "domains": []interface{}{"example1.com", "example2.com"}, - "stack": "custom-stack", - "timeout": 360, - "buildpack": "some-buildpack", - "command": `JAVA_HOME=$PWD/.openjdk JAVA_OPTS="-Xss995K" ./bin/start.sh run`, - "path": filepath.Clean("some/path/from/manifest"), - "env": generic.NewMap(map[interface{}]interface{}{ - "FOO": "baz", - "PATH": "/u/apps/my-app/bin", - }), - }), - }, - }), - } -} - -func singleAppManifest() *manifest.Manifest { - return &manifest.Manifest{ - Path: "manifest.yml", - Data: generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "name": "manifest-app-name", - "memory": "128MB", - "instances": 1, - "host": "manifest-host", - "domain": "manifest-example.com", - "stack": "custom-stack", - "timeout": 360, - "buildpack": "some-buildpack", - "command": `JAVA_HOME=$PWD/.openjdk JAVA_OPTS="-Xss995K" ./bin/start.sh run`, - "path": filepath.Clean("some/path/from/manifest"), - "env": generic.NewMap(map[interface{}]interface{}{ - "FOO": "baz", - "PATH": "/u/apps/my-app/bin", - }), - }), - }, - }), - } -} - -func manifestWithServicesAndEnv() *manifest.Manifest { - return &manifest.Manifest{ - Data: generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "name": "app1", - "services": []interface{}{"app1-service", "global-service"}, - "env": generic.NewMap(map[interface{}]interface{}{ - "SOMETHING": "definitely-something", - }), - }), - generic.NewMap(map[interface{}]interface{}{ - "name": "app2", - "services": []interface{}{"app2-service", "global-service"}, - "env": generic.NewMap(map[interface{}]interface{}{ - "SOMETHING": "nothing", - }), - }), - }, - }), - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/rename.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/rename.go deleted file mode 100644 index 90e9b15..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/rename.go +++ /dev/null @@ -1,76 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RenameApp struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository - appReq requirements.ApplicationRequirement -} - -func NewRenameApp(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) (cmd *RenameApp) { - cmd = new(RenameApp) - cmd.ui = ui - cmd.config = config - cmd.appRepo = appRepo - return -} - -func (cmd *RenameApp) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "rename", - Description: T("Rename an app"), - Usage: T("CF_NAME rename APP_NAME NEW_APP_NAME"), - } -} - -func (cmd *RenameApp) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *RenameApp) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - newName := c.Args()[1] - - cmd.ui.Say(T("Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "NewName": terminal.EntityNameColor(newName), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - params := models.AppParams{Name: &newName} - - _, apiErr := cmd.appRepo.Update(app.Guid, params) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/rename_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/rename_test.go deleted file mode 100644 index 090508c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/rename_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Rename command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - appRepo *testApplication.FakeApplicationRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - appRepo = &testApplication.FakeApplicationRepository{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewRenameApp(ui, configRepo, appRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not invoked with an old name and a new name", func() { - requirementsFactory.LoginSuccess = true - runCommand("foo") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("my-app", "my-new-app")).To(BeFalse()) - }) - It("fails if a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("my-app", "my-new-app")).To(BeFalse()) - }) - }) - - It("renames an application", func() { - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - requirementsFactory.Application = app - runCommand("my-app", "my-new-app") - - Expect(appRepo.UpdateAppGuid).To(Equal(app.Guid)) - Expect(*appRepo.UpdateParams.Name).To(Equal("my-new-app")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming app", "my-app", "my-new-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restage.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restage.go deleted file mode 100644 index 666615d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restage.go +++ /dev/null @@ -1,71 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Restage struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository - appStagingWatcher ApplicationStagingWatcher -} - -func NewRestage(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository, stagingWatcher ApplicationStagingWatcher) *Restage { - cmd := new(Restage) - cmd.ui = ui - cmd.config = config - cmd.appRepo = appRepo - cmd.appStagingWatcher = stagingWatcher - return cmd -} - -func (cmd *Restage) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "restage", - ShortName: "rg", - Description: T("Restage an app"), - Usage: T("CF_NAME restage APP_NAME"), - } -} - -func (cmd *Restage) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - return -} - -func (cmd *Restage) Run(c *cli.Context) { - app, err := cmd.appRepo.Read(c.Args()[0]) - if notFound, ok := err.(*errors.ModelNotFoundError); ok { - cmd.ui.Failed(notFound.Error()) - } - - cmd.ui.Say(T("Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - app.PackageState = "" - - cmd.appStagingWatcher.ApplicationWatchStaging(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name, func(app models.Application) (models.Application, error) { - return app, cmd.appRepo.CreateRestageRequest(app.Guid) - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restage_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restage_test.go deleted file mode 100644 index b10d9d2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restage_test.go +++ /dev/null @@ -1,118 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("restage command", func() { - var ( - ui *testterm.FakeUI - app models.Application - appRepo *testApplication.FakeApplicationRepository - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - stagingWatcher *fakeStagingWatcher - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - - app = models.Application{} - app.Name = "my-app" - app.PackageState = "STAGED" - appRepo = &testApplication.FakeApplicationRepository{} - appRepo.ReadReturns.App = app - - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - - stagingWatcher = &fakeStagingWatcher{} - }) - - runCommand := func(args ...string) bool { - cmd := NewRestage(ui, configRepo, appRepo, stagingWatcher) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("Requirements", func() { - It("fails when the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("my-app")).To(BeFalse()) - }) - - It("fails with usage when no arguments are given", func() { - passed := runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - It("fails if a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("my-app")).To(BeFalse()) - }) - }) - - It("fails with usage when the app cannot be found", func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("app", "hocus-pocus") - runCommand("hocus-pocus") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"not found"}, - )) - }) - - Context("when the app is found", func() { - BeforeEach(func() { - app = models.Application{} - app.Name = "my-app" - app.Guid = "the-app-guid" - - appRepo.ReadReturns.App = app - }) - - It("sends a restage request", func() { - runCommand("my-app") - Expect(appRepo.CreateRestageRequestArgs.AppGuid).To(Equal("the-app-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Restaging app", "my-app", "my-org", "my-space", "my-user"}, - )) - }) - - It("resets app's PackageState", func() { - runCommand("my-app") - Expect(stagingWatcher.watched.PackageState).ToNot(Equal("STAGED")) - }) - - It("watches the staging output", func() { - runCommand("my-app") - Expect(stagingWatcher.watched).To(Equal(app)) - Expect(stagingWatcher.orgName).To(Equal(configRepo.OrganizationFields().Name)) - Expect(stagingWatcher.spaceName).To(Equal(configRepo.SpaceFields().Name)) - }) - }) -}) - -type fakeStagingWatcher struct { - watched models.Application - orgName string - spaceName string -} - -func (f *fakeStagingWatcher) ApplicationWatchStaging(app models.Application, orgName, spaceName string, start func(models.Application) (models.Application, error)) (updatedApp models.Application, err error) { - f.watched = app - f.orgName = orgName - f.spaceName = spaceName - return start(app) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart.go deleted file mode 100644 index 090aaf2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart.go +++ /dev/null @@ -1,81 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Restart struct { - ui terminal.UI - config core_config.Reader - starter ApplicationStarter - stopper ApplicationStopper - appReq requirements.ApplicationRequirement -} - -type ApplicationRestarter interface { - ApplicationRestart(app models.Application, orgName string, spaceName string) -} - -func NewRestart(ui terminal.UI, config core_config.Reader, starter ApplicationStarter, stopper ApplicationStopper) (cmd *Restart) { - cmd = new(Restart) - cmd.ui = ui - cmd.config = config - cmd.starter = starter - cmd.stopper = stopper - return -} - -func (cmd *Restart) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "restart", - ShortName: "rs", - Description: T("Restart an app"), - Usage: T("CF_NAME restart APP_NAME"), - } -} - -func (cmd *Restart) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *Restart) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - cmd.ApplicationRestart(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) -} - -func (cmd *Restart) ApplicationRestart(app models.Application, orgName, spaceName string) { - stoppedApp, err := cmd.stopper.ApplicationStop(app, orgName, spaceName) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Say("") - - _, err = cmd.starter.ApplicationStart(stoppedApp, orgName, spaceName) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_app_instance.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_app_instance.go deleted file mode 100644 index f3eca43..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_app_instance.go +++ /dev/null @@ -1,82 +0,0 @@ -package application - -import ( - "strconv" - - "github.com/cloudfoundry/cli/cf/api/app_instances" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RestartAppInstance struct { - ui terminal.UI - config core_config.Reader - appReq requirements.ApplicationRequirement - appInstancesRepo app_instances.AppInstancesRepository -} - -func NewRestartAppInstance(ui terminal.UI, config core_config.Reader, appInstancesRepo app_instances.AppInstancesRepository) (cmd *RestartAppInstance) { - cmd = new(RestartAppInstance) - cmd.ui = ui - cmd.config = config - cmd.appInstancesRepo = appInstancesRepo - return -} - -func (cmd *RestartAppInstance) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "restart-app-instance", - Description: T("Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index"), - Usage: T("CF_NAME restart-app-instance APP_NAME INDEX"), - } -} - -func (cmd *RestartAppInstance) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - - return -} - -func (cmd *RestartAppInstance) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - - instance, err := strconv.Atoi(c.Args()[1]) - - if err != nil { - cmd.ui.Failed(T("Instance must be a non-negative integer")) - } - - cmd.ui.Say(T("Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - map[string]interface{}{ - "Instance": instance, - "AppName": terminal.EntityNameColor(app.Name), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - err = cmd.appInstancesRepo.DeleteInstance(app.Guid, instance) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_app_instance_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_app_instance_test.go deleted file mode 100644 index 33cd68f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_app_instance_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package application_test - -import ( - "errors" - - testApplication "github.com/cloudfoundry/cli/cf/api/app_instances/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("restart-app-instance", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - appInstancesRepo *testApplication.FakeAppInstancesRepository - requirementsFactory *testreq.FakeReqFactory - application models.Application - ) - - BeforeEach(func() { - application = models.Application{} - application.Name = "my-app" - application.Guid = "my-app-guid" - application.InstanceCount = 1 - - ui = &testterm.FakeUI{} - appInstancesRepo = &testApplication.FakeAppInstancesRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedSpaceSuccess: true, - Application: application, - } - - }) - - runCommand := func(args ...string) bool { - cmd := NewRestartAppInstance(ui, configRepo, appInstancesRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails if not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("my-app", "0")).To(BeFalse()) - }) - - It("fails if a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("my-app", "0")).To(BeFalse()) - }) - - It("fails when there is not exactly two arguments", func() { - Expect(runCommand("my-app")).To(BeFalse()) - Expect(runCommand("my-app", "0", "0")).To(BeFalse()) - Expect(runCommand()).To(BeFalse()) - }) - }) - - Describe("restarting an instance of an application", func() { - It("correctly 'restarts' the desired instance", func() { - runCommand("my-app", "0") - - app_guid, instance := appInstancesRepo.DeleteInstanceArgsForCall(0) - Expect(app_guid).To(Equal(application.Guid)) - Expect(instance).To(Equal(0)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Restarting instance 0 of application my-app as my-user"}, - []string{"OK"}, - )) - }) - - Context("when deleting the app instance fails", func() { - BeforeEach(func() { - appInstancesRepo.DeleteInstanceReturns(errors.New("deletion failed")) - }) - It("fails", func() { - runCommand("my-app", "0") - - app_guid, instance := appInstancesRepo.DeleteInstanceArgsForCall(0) - Expect(app_guid).To(Equal(application.Guid)) - Expect(instance).To(Equal(0)) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"deletion failed"}, - )) - }) - }) - - Context("when the instance passed is not an non-negative integer", func() { - It("fails when it is a string", func() { - runCommand("my-app", "some-silly-thing") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Instance must be a non-negative integer"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_test.go deleted file mode 100644 index c4a2b00..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/restart_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package application_test - -import ( - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("restart command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - starter *testcmd.FakeApplicationStarter - stopper *testcmd.FakeApplicationStopper - config core_config.ReadWriter - app models.Application - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - starter = &testcmd.FakeApplicationStarter{} - stopper = &testcmd.FakeApplicationStopper{} - config = testconfig.NewRepositoryWithDefaults() - - app = models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewRestart(ui, config, starter, stopper), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not provided exactly one arg", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - requirementsFactory.Application = app - requirementsFactory.TargetedSpaceSuccess = true - - Expect(runCommand()).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - - Expect(runCommand()).To(BeFalse()) - }) - }) - - Context("when logged in, targeting a space, and an app name is provided", func() { - BeforeEach(func() { - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - stopper.ApplicationStopReturns(app, nil) - }) - - It("restarts the given app", func() { - runCommand("my-app") - - application, orgName, spaceName := stopper.ApplicationStopArgsForCall(0) - Expect(application).To(Equal(app)) - Expect(orgName).To(Equal(config.OrganizationFields().Name)) - Expect(spaceName).To(Equal(config.SpaceFields().Name)) - - application, orgName, spaceName = starter.ApplicationStartArgsForCall(0) - Expect(application).To(Equal(app)) - Expect(orgName).To(Equal(config.OrganizationFields().Name)) - Expect(spaceName).To(Equal(config.SpaceFields().Name)) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/scale.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/scale.go deleted file mode 100644 index 27b902e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/scale.go +++ /dev/null @@ -1,167 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Scale struct { - ui terminal.UI - config core_config.Reader - restarter ApplicationRestarter - appReq requirements.ApplicationRequirement - appRepo applications.ApplicationRepository -} - -func NewScale(ui terminal.UI, config core_config.Reader, restarter ApplicationRestarter, appRepo applications.ApplicationRepository) (cmd *Scale) { - cmd = new(Scale) - cmd.ui = ui - cmd.config = config - cmd.restarter = restarter - cmd.appRepo = appRepo - return -} - -func (cmd *Scale) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "scale", - Description: T("Change or view the instance count, disk space limit, and memory limit for an app"), - Usage: T("CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]"), - Flags: []cli.Flag{ - flag_helpers.NewIntFlag("i", T("Number of instances")), - flag_helpers.NewStringFlag("k", T("Disk limit (e.g. 256M, 1024M, 1G)")), - flag_helpers.NewStringFlag("m", T("Memory limit (e.g. 256M, 1024M, 1G)")), - cli.BoolFlag{Name: "f", Usage: T("Force restart of app without prompt")}, - }, - } -} - -func (cmd *Scale) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -var bytesInAMegabyte int64 = 1024 * 1024 - -func (cmd *Scale) Run(c *cli.Context) { - currentApp := cmd.appReq.GetApplication() - if !anyFlagsSet(c) { - cmd.ui.Say(T("Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(currentApp.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - cmd.ui.Ok() - cmd.ui.Say("") - - cmd.ui.Say("%s %s", terminal.HeaderColor(T("memory:")), formatters.ByteSize(currentApp.Memory*bytesInAMegabyte)) - cmd.ui.Say("%s %s", terminal.HeaderColor(T("disk:")), formatters.ByteSize(currentApp.DiskQuota*bytesInAMegabyte)) - cmd.ui.Say("%s %d", terminal.HeaderColor(T("instances:")), currentApp.InstanceCount) - - return - } - - params := models.AppParams{} - shouldRestart := false - - if c.String("m") != "" { - memory, err := formatters.ToMegabytes(c.String("m")) - if err != nil { - cmd.ui.Failed(T("Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - map[string]interface{}{ - "Memory": c.String("m"), - "ErrorDescription": err, - })) - } - params.Memory = &memory - shouldRestart = true - } - - if c.String("k") != "" { - diskQuota, err := formatters.ToMegabytes(c.String("k")) - if err != nil { - cmd.ui.Failed(T("Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - map[string]interface{}{ - "DiskQuota": c.String("k"), - "ErrorDescription": err, - })) - } - params.DiskQuota = &diskQuota - shouldRestart = true - } - - if c.IsSet("i") { - instances := c.Int("i") - if instances > 0 { - params.InstanceCount = &instances - } else { - cmd.ui.Failed(T("Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - map[string]interface{}{ - "InstanceCount": instances, - })) - } - } - - if shouldRestart && !cmd.confirmRestart(c, currentApp.Name) { - return - } - - cmd.ui.Say(T("Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(currentApp.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - updatedApp, apiErr := cmd.appRepo.Update(currentApp.Guid, params) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - - if shouldRestart { - cmd.restarter.ApplicationRestart(updatedApp, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) - } -} - -func (cmd *Scale) confirmRestart(context *cli.Context, appName string) bool { - if context.Bool("f") { - return true - } else { - result := cmd.ui.Confirm(T("This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - map[string]interface{}{"AppName": terminal.EntityNameColor(appName)})) - cmd.ui.Say("") - return result - } -} - -func anyFlagsSet(context *cli.Context) bool { - return context.IsSet("m") || context.IsSet("k") || context.IsSet("i") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/scale_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/scale_test.go deleted file mode 100644 index 997e964..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/scale_test.go +++ /dev/null @@ -1,168 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("scale command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - restarter *testcmd.FakeApplicationRestarter - appRepo *testApplication.FakeApplicationRepository - ui *testterm.FakeUI - config core_config.ReadWriter - cmd *Scale - app models.Application - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - restarter = &testcmd.FakeApplicationRestarter{} - appRepo = &testApplication.FakeApplicationRepository{} - ui = new(testterm.FakeUI) - config = testconfig.NewRepositoryWithDefaults() - cmd = NewScale(ui, config, restarter, appRepo) - }) - - Describe("requirements", func() { - It("requires the user to be logged in with a targed space", func() { - args := []string{"-m", "1G", "my-app"} - - requirementsFactory.LoginSuccess = false - requirementsFactory.TargetedSpaceSuccess = true - - Expect(testcmd.RunCommand(cmd, args, requirementsFactory)).To(BeFalse()) - - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - - Expect(testcmd.RunCommand(cmd, args, requirementsFactory)).To(BeFalse()) - }) - - It("requires an app to be specified", func() { - passed := testcmd.RunCommand(cmd, []string{"-m", "1G"}, requirementsFactory) - - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - - It("does not require any flags", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - Expect(testcmd.RunCommand(cmd, []string{"my-app"}, requirementsFactory)).To(BeTrue()) - }) - }) - - Describe("scaling an app", func() { - BeforeEach(func() { - app = maker.NewApp(maker.Overrides{"name": "my-app", "guid": "my-app-guid"}) - app.InstanceCount = 42 - app.DiskQuota = 1024 - app.Memory = 256 - - requirementsFactory.Application = app - appRepo.UpdateAppResult = app - }) - - Context("when no flags are specified", func() { - It("prints a description of the app's limits", func() { - testcmd.RunCommand(cmd, []string{"my-app"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Showing", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"memory", "256M"}, - []string{"disk", "1G"}, - []string{"instances", "42"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"Scaling", "my-app", "my-org", "my-space", "my-user"})) - }) - }) - - Context("when the user does not confirm 'yes'", func() { - It("does not restart the app", func() { - ui.Inputs = []string{"whatever"} - testcmd.RunCommand(cmd, []string{"-i", "5", "-m", "512M", "-k", "2G", "my-app"}, requirementsFactory) - - Expect(restarter.ApplicationRestartCallCount()).To(Equal(0)) - }) - }) - - Context("when the user provides the -f flag", func() { - It("does not prompt the user", func() { - testcmd.RunCommand(cmd, []string{"-f", "-i", "5", "-m", "512M", "-k", "2G", "my-app"}, requirementsFactory) - - application, orgName, spaceName := restarter.ApplicationRestartArgsForCall(0) - Expect(application).To(Equal(app)) - Expect(orgName).To(Equal(config.OrganizationFields().Name)) - Expect(spaceName).To(Equal(config.SpaceFields().Name)) - }) - }) - - Context("when the user confirms they want to restart", func() { - BeforeEach(func() { - ui.Inputs = []string{"yes"} - }) - - It("can set an app's instance count, memory limit and disk limit", func() { - testcmd.RunCommand(cmd, []string{"-i", "5", "-m", "512M", "-k", "2G", "my-app"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Scaling", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(ui.Prompts).To(ContainSubstrings([]string{"This will cause the app to restart", "Are you sure", "my-app"})) - - application, orgName, spaceName := restarter.ApplicationRestartArgsForCall(0) - Expect(application).To(Equal(app)) - Expect(orgName).To(Equal(config.OrganizationFields().Name)) - Expect(spaceName).To(Equal(config.SpaceFields().Name)) - - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - Expect(*appRepo.UpdateParams.Memory).To(Equal(int64(512))) - Expect(*appRepo.UpdateParams.InstanceCount).To(Equal(5)) - Expect(*appRepo.UpdateParams.DiskQuota).To(Equal(int64(2048))) - }) - - It("does not scale the memory and disk limits if they are not specified", func() { - testcmd.RunCommand(cmd, []string{"-i", "5", "my-app"}, requirementsFactory) - - Expect(restarter.ApplicationRestartCallCount()).To(Equal(0)) - - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - Expect(*appRepo.UpdateParams.InstanceCount).To(Equal(5)) - Expect(appRepo.UpdateParams.DiskQuota).To(BeNil()) - Expect(appRepo.UpdateParams.Memory).To(BeNil()) - }) - - It("does not scale the app's instance count if it is not specified", func() { - testcmd.RunCommand(cmd, []string{"-m", "512M", "my-app"}, requirementsFactory) - - application, orgName, spaceName := restarter.ApplicationRestartArgsForCall(0) - Expect(application).To(Equal(app)) - Expect(orgName).To(Equal(config.OrganizationFields().Name)) - Expect(spaceName).To(Equal(config.SpaceFields().Name)) - - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - Expect(*appRepo.UpdateParams.Memory).To(Equal(int64(512))) - Expect(appRepo.UpdateParams.DiskQuota).To(BeNil()) - Expect(appRepo.UpdateParams.InstanceCount).To(BeNil()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/set_env.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/set_env.go deleted file mode 100644 index cf3c403..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/set_env.go +++ /dev/null @@ -1,89 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SetEnv struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository - appReq requirements.ApplicationRequirement -} - -func NewSetEnv(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) *SetEnv { - return &SetEnv{ - ui: ui, - config: config, - appRepo: appRepo, - } -} - -func (cmd *SetEnv) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-env", - ShortName: "se", - Description: T("Set an env variable for an app"), - Usage: T("CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE"), - SkipFlagParsing: true, - } -} - -func (cmd *SetEnv) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *SetEnv) Run(c *cli.Context) { - varName := c.Args()[1] - varValue := c.Args()[2] - app := cmd.appReq.GetApplication() - - cmd.ui.Say(T("Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "VarName": terminal.EntityNameColor(varName), - "VarValue": terminal.EntityNameColor(varValue), - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username())})) - - if len(app.EnvironmentVars) == 0 { - app.EnvironmentVars = map[string]interface{}{} - } - envParams := app.EnvironmentVars - envParams[varName] = varValue - - _, apiErr := cmd.appRepo.Update(app.Guid, models.AppParams{EnvironmentVars: &envParams}) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say(T("TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " restage")})) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/set_env_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/set_env_test.go deleted file mode 100644 index 0e2aef9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/set_env_test.go +++ /dev/null @@ -1,159 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("set-env command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - app models.Application - appRepo *testApplication.FakeApplicationRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - app = models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - appRepo = &testApplication.FakeApplicationRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewSetEnv(ui, configRepo, appRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when login is not successful", func() { - requirementsFactory.Application = app - requirementsFactory.TargetedSpaceSuccess = true - - Expect(runCommand("hey", "gabba", "gabba")).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - - Expect(runCommand("hey", "gabba", "gabba")).To(BeFalse()) - }) - - It("fails with usage when not provided with exactly three args", func() { - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - runCommand("zomg", "too", "many", "args") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in, a space is targeted and given enough args", func() { - BeforeEach(func() { - app.EnvironmentVars = map[string]interface{}{"foo": "bar"} - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - }) - - Context("when it is new", func() { - It("is created", func() { - runCommand("my-app", "DATABASE_URL", "mysql://new-example.com/my-db") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{ - "Setting env variable", - "DATABASE_URL", - "mysql://new-example.com/my-db", - "my-app", - "my-org", - "my-space", - "my-user", - }, - []string{"OK"}, - []string{"TIP"}, - )) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(appRepo.UpdateAppGuid).To(Equal(app.Guid)) - Expect(*appRepo.UpdateParams.EnvironmentVars).To(Equal(map[string]interface{}{ - "DATABASE_URL": "mysql://new-example.com/my-db", - "foo": "bar", - })) - }) - }) - - Context("when it already exists", func() { - BeforeEach(func() { - app.EnvironmentVars["DATABASE_URL"] = "mysql://old-example.com/my-db" - }) - - It("is updated", func() { - runCommand("my-app", "DATABASE_URL", "mysql://new-example.com/my-db") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{ - "Setting env variable", - "DATABASE_URL", - "mysql://new-example.com/my-db", - "my-app", - "my-org", - "my-space", - "my-user", - }, - []string{"OK"}, - []string{"TIP"}, - )) - }) - }) - - It("allows the variable value to begin with a hyphen", func() { - runCommand("my-app", "MY_VAR", "--has-a-cool-value") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{ - "Setting env variable", - "MY_VAR", - "--has-a-cool-value", - }, - []string{"OK"}, - []string{"TIP"}, - )) - Expect(*appRepo.UpdateParams.EnvironmentVars).To(Equal(map[string]interface{}{ - "MY_VAR": "--has-a-cool-value", - "foo": "bar", - })) - }) - - Context("when setting fails", func() { - BeforeEach(func() { - appRepo.UpdateErr = true - }) - - It("tells the user", func() { - runCommand("please", "dont", "fail") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting env variable"}, - []string{"FAILED"}, - []string{"Error updating app."}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/start.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/start.go deleted file mode 100644 index b219ea1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/start.go +++ /dev/null @@ -1,417 +0,0 @@ -package application - -import ( - "fmt" - "os" - "regexp" - "sort" - "strconv" - "strings" - "time" - - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/sonde-go/events" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/app_instances" - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -const ( - DefaultStagingTimeout = 15 * time.Minute - DefaultStartupTimeout = 5 * time.Minute - DefaultPingerThrottle = 5 * time.Second -) - -const LogMessageTypeStaging = "STG" - -type Start struct { - ui terminal.UI - config core_config.Reader - appDisplayer ApplicationDisplayer - appReq requirements.ApplicationRequirement - appRepo applications.ApplicationRepository - appInstancesRepo app_instances.AppInstancesRepository - oldLogsRepo api.OldLogsRepository - logRepo api.LogsNoaaRepository - - LogServerConnectionTimeout time.Duration - StartupTimeout time.Duration - StagingTimeout time.Duration - PingerThrottle time.Duration -} - -type ApplicationStarter interface { - SetStartTimeoutInSeconds(timeout int) - ApplicationStart(app models.Application, orgName string, spaceName string) (updatedApp models.Application, err error) -} - -type ApplicationStagingWatcher interface { - ApplicationWatchStaging(app models.Application, orgName string, spaceName string, startCommand func(app models.Application) (models.Application, error)) (updatedApp models.Application, err error) -} - -func NewStart(ui terminal.UI, config core_config.Reader, appDisplayer ApplicationDisplayer, appRepo applications.ApplicationRepository, appInstancesRepo app_instances.AppInstancesRepository, logRepo api.LogsNoaaRepository, oldLogsRepo api.OldLogsRepository) (cmd *Start) { - cmd = new(Start) - cmd.ui = ui - cmd.config = config - cmd.appDisplayer = appDisplayer - cmd.appRepo = appRepo - cmd.appInstancesRepo = appInstancesRepo - cmd.logRepo = logRepo - cmd.oldLogsRepo = oldLogsRepo - cmd.LogServerConnectionTimeout = 20 * time.Second - - cmd.PingerThrottle = DefaultPingerThrottle - - if os.Getenv("CF_STAGING_TIMEOUT") != "" { - duration, err := strconv.ParseInt(os.Getenv("CF_STAGING_TIMEOUT"), 10, 64) - if err != nil { - cmd.ui.Failed(T("invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - map[string]interface{}{"Err": err})) - } - cmd.StagingTimeout = time.Duration(duration) * time.Minute - } else { - cmd.StagingTimeout = DefaultStagingTimeout - } - - if os.Getenv("CF_STARTUP_TIMEOUT") != "" { - duration, err := strconv.ParseInt(os.Getenv("CF_STARTUP_TIMEOUT"), 10, 64) - if err != nil { - cmd.ui.Failed(T("invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - map[string]interface{}{"Err": err})) - } - cmd.StartupTimeout = time.Duration(duration) * time.Minute - } else { - cmd.StartupTimeout = DefaultStartupTimeout - } - - return -} - -func (cmd *Start) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "start", - ShortName: "st", - Description: T("Start an app"), - Usage: T("CF_NAME start APP_NAME"), - } -} - -func (cmd *Start) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), cmd.appReq} - return -} - -func (cmd *Start) Run(c *cli.Context) { - cmd.ApplicationStart(cmd.appReq.GetApplication(), cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) -} - -func (cmd *Start) ApplicationStart(app models.Application, orgName, spaceName string) (updatedApp models.Application, err error) { - if app.State == "started" { - cmd.ui.Say(terminal.WarningColor(T("App ") + app.Name + T(" is already started"))) - return - } - - return cmd.ApplicationWatchStaging(app, orgName, spaceName, func(app models.Application) (models.Application, error) { - cmd.ui.Say(T("Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(orgName), - "SpaceName": terminal.EntityNameColor(spaceName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username())})) - - state := "STARTED" - return cmd.appRepo.Update(app.Guid, models.AppParams{State: &state}) - }) -} - -func (cmd *Start) ApplicationWatchStaging(app models.Application, orgName, spaceName string, start func(app models.Application) (models.Application, error)) (updatedApp models.Application, err error) { - var isConnected bool - loggingStartedChan := make(chan bool) - doneLoggingChan := make(chan bool) - - go cmd.tailStagingLogs(app, loggingStartedChan, doneLoggingChan) - timeout := make(chan struct{}) - go func() { - time.Sleep(cmd.LogServerConnectionTimeout) - close(timeout) - }() - - select { - case <-timeout: - cmd.ui.Warn("timeout connecting to log server, no log will be shown") - break - case <-loggingStartedChan: // block until we have established connection to Loggregator - isConnected = true - break - } - - updatedApp, apiErr := start(app) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - isStaged := cmd.waitForInstancesToStage(updatedApp) - - if isConnected { //only close when actually connected, else CLI hangs at closing consumer connection - // cmd.logRepo.Close() - cmd.oldLogsRepo.Close() - } - - <-doneLoggingChan - - cmd.ui.Say("") - - if !isStaged { - cmd.ui.Failed(fmt.Sprintf("%s failed to stage within %f minutes", app.Name, cmd.StagingTimeout.Minutes())) - } - - cmd.waitForOneRunningInstance(updatedApp) - cmd.ui.Say(terminal.HeaderColor(T("\nApp started\n"))) - cmd.ui.Say("") - cmd.ui.Ok() - - //detectedstartcommand on first push is not present until starting completes - startedApp, apiErr := cmd.appRepo.Read(updatedApp.Name) - if err != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - var appStartCommand string - if app.Command == "" { - appStartCommand = startedApp.DetectedStartCommand - } else { - appStartCommand = startedApp.Command - } - - cmd.ui.Say(T("\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(startedApp.Name), - "Command": appStartCommand, - })) - - cmd.appDisplayer.ShowApp(startedApp, orgName, spaceName) - return -} - -func (cmd *Start) SetStartTimeoutInSeconds(timeout int) { - cmd.StartupTimeout = time.Duration(timeout) * time.Second -} - -func simpleOldLogMessageOutput(logMsg *logmessage.LogMessage) (msgText string) { - msgText = string(logMsg.GetMessage()) - reg, err := regexp.Compile("[\n\r]+$") - if err != nil { - return - } - msgText = reg.ReplaceAllString(msgText, "") - return -} - -func simpleLogMessageOutput(logMsg *events.LogMessage) (msgText string) { - msgText = string(logMsg.GetMessage()) - reg, err := regexp.Compile("[\n\r]+$") - if err != nil { - return - } - msgText = reg.ReplaceAllString(msgText, "") - return -} - -func (cmd Start) tailStagingLogs(app models.Application, startChan, doneChan chan bool) { - onConnect := func() { - startChan <- true - } - - err := cmd.oldLogsRepo.TailLogsFor(app.Guid, onConnect, func(msg *logmessage.LogMessage) { - if msg.GetSourceName() == LogMessageTypeStaging { - cmd.ui.Say(simpleOldLogMessageOutput(msg)) - } - }) - // err := cmd.logRepo.TailNoaaLogsFor(app.Guid, onConnect, func(msg *events.LogMessage) { - // if msg.GetSourceType() == LogMessageTypeStaging { - // cmd.ui.Say(simpleLogMessageOutput(msg)) - // } - // }) - - if err != nil { - cmd.ui.Warn(T("Warning: error tailing logs")) - cmd.ui.Say("%s", err) - close(startChan) - } - - close(doneChan) -} - -func (cmd Start) waitForInstancesToStage(app models.Application) bool { - stagingStartTime := time.Now() - - var err error - - if cmd.StagingTimeout == 0 { - app, err = cmd.appRepo.GetApp(app.Guid) - } else { - for app.PackageState != "STAGED" && app.PackageState != "FAILED" && time.Since(stagingStartTime) < cmd.StagingTimeout { - app, err = cmd.appRepo.GetApp(app.Guid) - if err != nil { - break - } - cmd.ui.Wait(cmd.PingerThrottle) - } - } - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if app.PackageState == "FAILED" { - cmd.ui.Say("") - cmd.ui.Failed(T("{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - map[string]interface{}{ - "Err": app.StagingFailedReason, - "Command": terminal.CommandColor(fmt.Sprintf("%s logs %s --recent", cf.Name(), app.Name))})) - } - - if time.Since(stagingStartTime) >= cmd.StagingTimeout { - return false - } - - return true -} - -func (cmd Start) waitForOneRunningInstance(app models.Application) { - startupStartTime := time.Now() - - for { - if time.Since(startupStartTime) > cmd.StartupTimeout { - cmd.ui.Failed(fmt.Sprintf(T("Start app timeout\n\nTIP: use '{{.Command}}' for more information", - map[string]interface{}{ - "Command": terminal.CommandColor(fmt.Sprintf("%s logs %s --recent", cf.Name(), app.Name))}))) - return - } - - count, err := cmd.fetchInstanceCount(app.Guid) - if err != nil { - cmd.ui.Wait(cmd.PingerThrottle) - continue - } - - cmd.ui.Say(instancesDetails(count)) - - if count.running > 0 { - return - } - - if count.flapping > 0 || count.crashed > 0 { - cmd.ui.Failed(fmt.Sprintf(T("Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - map[string]interface{}{"Command": terminal.CommandColor(fmt.Sprintf("%s logs %s --recent", cf.Name(), app.Name))}))) - return - } - - cmd.ui.Wait(cmd.PingerThrottle) - } -} - -type instanceCount struct { - running int - starting int - startingDetails map[string]struct{} - flapping int - down int - crashed int - total int -} - -func (cmd Start) fetchInstanceCount(appGuid string) (instanceCount, error) { - count := instanceCount{ - startingDetails: make(map[string]struct{}), - } - - instances, apiErr := cmd.appInstancesRepo.GetInstances(appGuid) - if apiErr != nil { - return instanceCount{}, apiErr - } - - count.total = len(instances) - - for _, inst := range instances { - switch inst.State { - case models.InstanceRunning: - count.running++ - case models.InstanceStarting: - count.starting++ - if inst.Details != "" { - count.startingDetails[inst.Details] = struct{}{} - } - case models.InstanceFlapping: - count.flapping++ - case models.InstanceDown: - count.down++ - case models.InstanceCrashed: - count.crashed++ - } - } - - return count, nil -} - -func instancesDetails(count instanceCount) string { - details := []string{fmt.Sprintf(T("{{.RunningCount}} of {{.TotalCount}} instances running", - map[string]interface{}{"RunningCount": count.running, "TotalCount": count.total}))} - - if count.starting > 0 { - if len(count.startingDetails) == 0 { - details = append(details, fmt.Sprintf(T("{{.StartingCount}} starting", - map[string]interface{}{"StartingCount": count.starting}))) - } else { - info := []string{} - for d, _ := range count.startingDetails { - info = append(info, d) - } - sort.Strings(info) - details = append(details, fmt.Sprintf(T("{{.StartingCount}} starting ({{.Details}})", - map[string]interface{}{ - "StartingCount": count.starting, - "Details": strings.Join(info, ", "), - }))) - } - } - - if count.down > 0 { - details = append(details, fmt.Sprintf(T("{{.DownCount}} down", - map[string]interface{}{"DownCount": count.down}))) - } - - if count.flapping > 0 { - details = append(details, fmt.Sprintf(T("{{.FlappingCount}} failing", - map[string]interface{}{"FlappingCount": count.flapping}))) - } - - if count.crashed > 0 { - details = append(details, fmt.Sprintf(T("{{.CrashedCount}} crashed", - map[string]interface{}{"CrashedCount": count.crashed}))) - } - - return strings.Join(details, ", ") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/start_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/start_test.go deleted file mode 100644 index 7fcfeeb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/start_test.go +++ /dev/null @@ -1,657 +0,0 @@ -package application_test - -import ( - "os" - "sync" - "time" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/app_instances" - testAppInstanaces "github.com/cloudfoundry/cli/cf/api/app_instances/fakes" - "github.com/cloudfoundry/cli/cf/api/applications" - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testlogs "github.com/cloudfoundry/cli/testhelpers/logs" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/sonde-go/events" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("start command", func() { - var ( - ui *testterm.FakeUI - defaultAppForStart = models.Application{} - defaultInstanceResponses = [][]models.AppInstanceFields{} - defaultInstanceErrorCodes = []string{"", ""} - requirementsFactory *testreq.FakeReqFactory - logsForTail []*events.LogMessage - logRepo *testapi.FakeLogsNoaaRepository - oldLogsForTail []*logmessage.LogMessage - oldLogsRepo *testapi.FakeOldLogsRepository - ) - - var mutex = &sync.Mutex{} - - getInstance := func(appGuid string) (instances []models.AppInstanceFields, apiErr error) { - if len(defaultInstanceResponses) > 0 { - instances = defaultInstanceResponses[0] - if len(defaultInstanceResponses) > 1 { - defaultInstanceResponses = defaultInstanceResponses[1:] - } - } - if len(defaultInstanceErrorCodes) > 0 { - errorCode := defaultInstanceErrorCodes[0] - if len(defaultInstanceErrorCodes) > 1 { - defaultInstanceErrorCodes = defaultInstanceErrorCodes[1:] - } - if errorCode != "" { - apiErr = errors.NewHttpError(400, errorCode, "Error staging app") - } - } - return - } - - BeforeEach(func() { - ui = new(testterm.FakeUI) - requirementsFactory = &testreq.FakeReqFactory{} - - defaultAppForStart.Name = "my-app" - defaultAppForStart.Guid = "my-app-guid" - defaultAppForStart.InstanceCount = 2 - defaultAppForStart.PackageState = "STAGED" - - domain := models.DomainFields{} - domain.Name = "example.com" - - route := models.RouteSummary{} - route.Host = "my-app" - route.Domain = domain - - defaultAppForStart.Routes = []models.RouteSummary{route} - - instance1 := models.AppInstanceFields{} - instance1.State = models.InstanceStarting - - instance2 := models.AppInstanceFields{} - instance2.State = models.InstanceStarting - - instance3 := models.AppInstanceFields{} - instance3.State = models.InstanceRunning - - instance4 := models.AppInstanceFields{} - instance4.State = models.InstanceStarting - - defaultInstanceResponses = [][]models.AppInstanceFields{ - []models.AppInstanceFields{instance1, instance2}, - []models.AppInstanceFields{instance1, instance2}, - []models.AppInstanceFields{instance3, instance4}, - } - - oldLogsRepo = &testapi.FakeOldLogsRepository{} - mutex.Lock() - oldLogsForTail = []*logmessage.LogMessage{} - mutex.Unlock() - oldLogsRepo.TailLogsForStub = func(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error { - onConnect() - mutex.Lock() - for _, log := range oldLogsForTail { - onMessage(log) - } - mutex.Unlock() - return nil - } - - logsForTail = []*events.LogMessage{} - logRepo = new(testapi.FakeLogsNoaaRepository) - logRepo.TailNoaaLogsForStub = func(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error { - onConnect() - for _, log := range logsForTail { - onMessage(log) - } - return nil - } - }) - - callStart := func(args []string, config core_config.Reader, requirementsFactory *testreq.FakeReqFactory, displayApp ApplicationDisplayer, appRepo applications.ApplicationRepository, appInstancesRepo app_instances.AppInstancesRepository, logRepo api.LogsNoaaRepository, oldLogsRepo api.OldLogsRepository) (ui *testterm.FakeUI) { - ui = new(testterm.FakeUI) - - cmd := NewStart(ui, config, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - cmd.StagingTimeout = 100 * time.Millisecond - cmd.StartupTimeout = 200 * time.Millisecond - cmd.PingerThrottle = 50 * time.Millisecond - - testcmd.RunCommand(cmd, args, requirementsFactory) - return - } - - callStartWithTimeout := func(args []string, config core_config.Reader, requirementsFactory *testreq.FakeReqFactory, displayApp ApplicationDisplayer, appRepo applications.ApplicationRepository, appInstancesRepo app_instances.AppInstancesRepository, logRepo api.LogsNoaaRepository, oldLogsRepo api.OldLogsRepository) (ui *testterm.FakeUI) { - oldLogsRepoWithTimeout := &testapi.FakeOldLogsRepositoryWithTimeout{} - ui = new(testterm.FakeUI) - - cmd := NewStart(ui, config, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepoWithTimeout) - cmd.LogServerConnectionTimeout = 100 * time.Millisecond - cmd.StagingTimeout = 100 * time.Millisecond - cmd.StartupTimeout = 200 * time.Millisecond - cmd.PingerThrottle = 50 * time.Millisecond - - testcmd.RunCommand(cmd, args, requirementsFactory) - return - } - - startAppWithInstancesAndErrors := func(displayApp ApplicationDisplayer, app models.Application, requirementsFactory *testreq.FakeReqFactory) (ui *testterm.FakeUI, appRepo *testApplication.FakeApplicationRepository, appInstancesRepo *testAppInstanaces.FakeAppInstancesRepository) { - configRepo := testconfig.NewRepositoryWithDefaults() - appRepo = &testApplication.FakeApplicationRepository{ - UpdateAppResult: app, - } - appRepo.ReadReturns.App = app - appRepo.GetAppReturns(app, nil) - appInstancesRepo = &testAppInstanaces.FakeAppInstancesRepository{} - appInstancesRepo.GetInstancesStub = getInstance - - logsForTail = []*events.LogMessage{ - testlogs.NewNoaaLogMessage("Log Line 1", app.Guid, LogMessageTypeStaging, time.Now()), - testlogs.NewNoaaLogMessage("Log Line 2", app.Guid, LogMessageTypeStaging, time.Now()), - } - - args := []string{"my-app"} - - requirementsFactory.Application = app - ui = callStart(args, configRepo, requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - return - } - - It("fails requirements when not logged in", func() { - requirementsFactory.LoginSuccess = false - cmd := NewStart(new(testterm.FakeUI), testconfig.NewRepository(), &testcmd.FakeAppDisplayer{}, &testApplication.FakeApplicationRepository{}, &testAppInstanaces.FakeAppInstancesRepository{}, &testapi.FakeLogsNoaaRepository{}, &testapi.FakeOldLogsRepository{}) - - Expect(testcmd.RunCommand(cmd, []string{"some-app-name"}, requirementsFactory)).To(BeFalse()) - }) - It("fails requirements when a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - cmd := NewStart(new(testterm.FakeUI), testconfig.NewRepository(), &testcmd.FakeAppDisplayer{}, &testApplication.FakeApplicationRepository{}, &testAppInstanaces.FakeAppInstancesRepository{}, &testapi.FakeLogsNoaaRepository{}, &testapi.FakeOldLogsRepository{}) - Expect(testcmd.RunCommand(cmd, []string{"some-app-name"}, requirementsFactory)).To(BeFalse()) - }) - - Describe("timeouts", func() { - It("has sane default timeout values", func() { - cmd := NewStart(new(testterm.FakeUI), testconfig.NewRepository(), &testcmd.FakeAppDisplayer{}, &testApplication.FakeApplicationRepository{}, &testAppInstanaces.FakeAppInstancesRepository{}, &testapi.FakeLogsNoaaRepository{}, &testapi.FakeOldLogsRepository{}) - Expect(cmd.StagingTimeout).To(Equal(15 * time.Minute)) - Expect(cmd.StartupTimeout).To(Equal(5 * time.Minute)) - }) - - It("can read timeout values from environment variables", func() { - oldStaging := os.Getenv("CF_STAGING_TIMEOUT") - oldStart := os.Getenv("CF_STARTUP_TIMEOUT") - defer func() { - os.Setenv("CF_STAGING_TIMEOUT", oldStaging) - os.Setenv("CF_STARTUP_TIMEOUT", oldStart) - }() - - os.Setenv("CF_STAGING_TIMEOUT", "6") - os.Setenv("CF_STARTUP_TIMEOUT", "3") - cmd := NewStart(new(testterm.FakeUI), testconfig.NewRepository(), &testcmd.FakeAppDisplayer{}, &testApplication.FakeApplicationRepository{}, &testAppInstanaces.FakeAppInstancesRepository{}, &testapi.FakeLogsNoaaRepository{}, &testapi.FakeOldLogsRepository{}) - Expect(cmd.StagingTimeout).To(Equal(6 * time.Minute)) - Expect(cmd.StartupTimeout).To(Equal(3 * time.Minute)) - }) - - Describe("when the staging timeout is zero seconds", func() { - var ( - app models.Application - cmd *Start - ) - - BeforeEach(func() { - app = defaultAppForStart - - appRepo := &testApplication.FakeApplicationRepository{ - UpdateAppResult: app, - } - - app.PackageState = "FAILED" - app.StagingFailedReason = "BLAH, FAILED" - appRepo.GetAppReturns(app, nil) - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - requirementsFactory.Application = app - config := testconfig.NewRepository() - displayApp := &testcmd.FakeAppDisplayer{} - - cmd = NewStart(ui, config, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - cmd.StagingTimeout = 0 - cmd.PingerThrottle = 1 - cmd.StartupTimeout = 1 - }) - - It("can still respond to staging failures", func() { - testcmd.RunCommand(cmd, []string{"my-app"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app"}, - []string{"FAILED"}, - []string{"BLAH, FAILED"}, - )) - }) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - }) - - It("fails with usage when not provided exactly one arg", func() { - config := testconfig.NewRepository() - displayApp := &testcmd.FakeAppDisplayer{} - appRepo := &testApplication.FakeApplicationRepository{} - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - oldLogsRepo = &testapi.FakeOldLogsRepository{} - logRepo := &testapi.FakeLogsNoaaRepository{} - - ui := callStart([]string{}, config, requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("uses proper org name and space name", func() { - config := testconfig.NewRepositoryWithDefaults() - displayApp := &testcmd.FakeAppDisplayer{} - appRepo := &testApplication.FakeApplicationRepository{} - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - - appRepo.ReadReturns.App = defaultAppForStart - appRepo.GetAppReturns(defaultAppForStart, nil) - appInstancesRepo = &testAppInstanaces.FakeAppInstancesRepository{} - appInstancesRepo.GetInstancesStub = getInstance - - cmd := NewStart(ui, config, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - cmd.StagingTimeout = 100 * time.Millisecond - cmd.StartupTimeout = 200 * time.Millisecond - cmd.PingerThrottle = 50 * time.Millisecond - cmd.ApplicationStart(defaultAppForStart, "some-org", "some-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app", "some-org", "some-space", "my-user"}, - []string{"OK"}, - )) - }) - - It("starts an app, when given the app's name", func() { - displayApp := &testcmd.FakeAppDisplayer{} - ui, appRepo, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"0 of 2 instances running", "2 starting"}, - []string{"started"}, - )) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - Expect(displayApp.AppToDisplay).To(Equal(defaultAppForStart)) - }) - - It("displays the command start command instead of the detected start command when set", func() { - defaultAppForStart.Command = "command start command" - defaultAppForStart.DetectedStartCommand = "detected start command" - displayApp := &testcmd.FakeAppDisplayer{} - ui, appRepo, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - appRepo.GetAppReturns(defaultAppForStart, nil) - - Expect(appRepo.ReadCalls).To(Equal(1)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"App my-app was started using this command `command start command`"}, - )) - }) - - It("displays the detected start command when no other command is set", func() { - defaultAppForStart.DetectedStartCommand = "detected start command" - defaultAppForStart.Command = "" - displayApp := &testcmd.FakeAppDisplayer{} - ui, appRepo, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Eventually(appRepo.ReadCalls).Should(Equal(1)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"App my-app was started using this command `detected start command`"}, - )) - }) - - It("handles timeouts gracefully", func() { - displayApp := &testcmd.FakeAppDisplayer{} - requirementsFactory.Application = defaultAppForStart - appRepo := &testApplication.FakeApplicationRepository{ - UpdateAppResult: defaultAppForStart, - } - appRepo.ReadReturns.App = defaultAppForStart - - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - - ui := callStartWithTimeout([]string{"my-app"}, testconfig.NewRepository(), requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"timeout connecting to log server"}, - )) - - }) - - It("only displays staging logs when an app is starting", func() { - displayApp := &testcmd.FakeAppDisplayer{} - requirementsFactory.Application = defaultAppForStart - appRepo := &testApplication.FakeApplicationRepository{ - UpdateAppResult: defaultAppForStart, - } - appRepo.ReadReturns.App = defaultAppForStart - - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - - currentTime := time.Now() - wrongSourceName := "DEA" - correctSourceName := "STG" - - oldLogsForTail = []*logmessage.LogMessage{ - testlogs.NewOldLogMessage("Log Line 1", defaultAppForStart.Guid, wrongSourceName, currentTime), - testlogs.NewOldLogMessage("Log Line 2", defaultAppForStart.Guid, correctSourceName, currentTime), - testlogs.NewOldLogMessage("Log Line 3", defaultAppForStart.Guid, correctSourceName, currentTime), - testlogs.NewOldLogMessage("Log Line 4", defaultAppForStart.Guid, wrongSourceName, currentTime), - } - - logsForTail = []*events.LogMessage{ - testlogs.NewNoaaLogMessage("Log Line 1", defaultAppForStart.Guid, wrongSourceName, currentTime), - testlogs.NewNoaaLogMessage("Log Line 2", defaultAppForStart.Guid, correctSourceName, currentTime), - testlogs.NewNoaaLogMessage("Log Line 3", defaultAppForStart.Guid, correctSourceName, currentTime), - testlogs.NewNoaaLogMessage("Log Line 4", defaultAppForStart.Guid, wrongSourceName, currentTime), - } - - ui := callStart([]string{"my-app"}, testconfig.NewRepository(), requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Log Line 2"}, - []string{"Log Line 3"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Log Line 1"}, - []string{"Log Line 4"}, - )) - }) - - It("gracefully handles starting an app that is still staging", func() { - displayApp := &testcmd.FakeAppDisplayer{} - - logRepoClosed := make(chan struct{}) - - oldLogsRepo.TailLogsForStub = func(appGuid string, onConnect func(), onMessage func(*logmessage.LogMessage)) error { - onConnect() - onMessage(testlogs.NewOldLogMessage("Before close", appGuid, LogMessageTypeStaging, time.Now())) - - <-logRepoClosed - - time.Sleep(50 * time.Millisecond) - onMessage(testlogs.NewOldLogMessage("After close 1", appGuid, LogMessageTypeStaging, time.Now())) - onMessage(testlogs.NewOldLogMessage("After close 2", appGuid, LogMessageTypeStaging, time.Now())) - - return nil - } - - logRepo.TailNoaaLogsForStub = func(appGuid string, onConnect func(), onMessage func(*events.LogMessage)) error { - onConnect() - onMessage(testlogs.NewNoaaLogMessage("Before close", appGuid, LogMessageTypeStaging, time.Now())) - - <-logRepoClosed - - time.Sleep(50 * time.Millisecond) - onMessage(testlogs.NewNoaaLogMessage("After close 1", appGuid, LogMessageTypeStaging, time.Now())) - onMessage(testlogs.NewNoaaLogMessage("After close 2", appGuid, LogMessageTypeStaging, time.Now())) - - return nil - } - - oldLogsRepo.CloseStub = func() { - close(logRepoClosed) - } - - logRepo.CloseStub = func() { - close(logRepoClosed) - } - - defaultInstanceResponses = [][]models.AppInstanceFields{ - []models.AppInstanceFields{}, - []models.AppInstanceFields{}, - []models.AppInstanceFields{{State: models.InstanceDown}, {State: models.InstanceStarting}}, - []models.AppInstanceFields{{State: models.InstanceStarting}, {State: models.InstanceStarting}}, - []models.AppInstanceFields{{State: models.InstanceRunning}, {State: models.InstanceRunning}}, - } - - defaultInstanceErrorCodes = []string{errors.APP_NOT_STAGED, errors.APP_NOT_STAGED, "", "", ""} - defaultAppForStart.PackageState = "PENDING" - ui, appRepo, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Expect(appRepo.GetAppArgsForCall(0)).To(Equal("my-app-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Before close"}, - []string{"After close 1"}, - []string{"After close 2"}, - []string{"my-app failed to stage within", "minutes"}, - )) - }) - - It("displays an error message when staging fails", func() { - displayApp := &testcmd.FakeAppDisplayer{} - defaultAppForStart.PackageState = "FAILED" - defaultAppForStart.StagingFailedReason = "AWWW, FAILED" - - ui, _, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app"}, - []string{"FAILED"}, - []string{"AWWW, FAILED"}, - )) - }) - - Context("when an app instance is flapping", func() { - It("fails and alerts the user", func() { - displayApp := &testcmd.FakeAppDisplayer{} - appInstance := models.AppInstanceFields{} - appInstance.State = models.InstanceStarting - appInstance2 := models.AppInstanceFields{} - appInstance2.State = models.InstanceStarting - appInstance3 := models.AppInstanceFields{} - appInstance3.State = models.InstanceStarting - appInstance4 := models.AppInstanceFields{} - appInstance4.State = models.InstanceFlapping - defaultInstanceResponses = [][]models.AppInstanceFields{ - []models.AppInstanceFields{appInstance, appInstance2}, - []models.AppInstanceFields{appInstance3, appInstance4}, - } - - defaultInstanceErrorCodes = []string{"", ""} - - ui, _, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app"}, - []string{"0 of 2 instances running", "1 starting", "1 failing"}, - []string{"FAILED"}, - []string{"Start unsuccessful"}, - )) - }) - }) - - Context("when an app instance is crashed", func() { - It("fails and alerts the user", func() { - displayApp := &testcmd.FakeAppDisplayer{} - appInstance := models.AppInstanceFields{} - appInstance.State = models.InstanceStarting - appInstance2 := models.AppInstanceFields{} - appInstance2.State = models.InstanceStarting - appInstance3 := models.AppInstanceFields{} - appInstance3.State = models.InstanceStarting - appInstance4 := models.AppInstanceFields{} - appInstance4.State = models.InstanceCrashed - defaultInstanceResponses = [][]models.AppInstanceFields{ - []models.AppInstanceFields{appInstance, appInstance2}, - []models.AppInstanceFields{appInstance3, appInstance4}, - } - - defaultInstanceErrorCodes = []string{"", ""} - - ui, _, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app"}, - []string{"0 of 2 instances running", "1 starting", "1 crashed"}, - []string{"FAILED"}, - []string{"Start unsuccessful"}, - )) - }) - }) - - Context("when an app instance is starting", func() { - It("reports any additional details", func() { - displayApp := &testcmd.FakeAppDisplayer{} - appInstance := models.AppInstanceFields{ - State: models.InstanceStarting, - } - appInstance2 := models.AppInstanceFields{ - State: models.InstanceStarting, - } - - appInstance3 := models.AppInstanceFields{ - State: models.InstanceDown, - } - appInstance4 := models.AppInstanceFields{ - State: models.InstanceStarting, - Details: "no compatible cell", - } - - appInstance5 := models.AppInstanceFields{ - State: models.InstanceStarting, - Details: "insufficient resources", - } - appInstance6 := models.AppInstanceFields{ - State: models.InstanceStarting, - Details: "no compatible cell", - } - - appInstance7 := models.AppInstanceFields{ - State: models.InstanceRunning, - } - appInstance8 := models.AppInstanceFields{ - State: models.InstanceRunning, - } - - defaultInstanceResponses = [][]models.AppInstanceFields{ - []models.AppInstanceFields{appInstance, appInstance2}, - []models.AppInstanceFields{appInstance3, appInstance4}, - []models.AppInstanceFields{appInstance5, appInstance6}, - []models.AppInstanceFields{appInstance7, appInstance8}, - } - - defaultInstanceErrorCodes = []string{"", ""} - - ui, _, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app"}, - []string{"0 of 2 instances running", "2 starting"}, - []string{"0 of 2 instances running", "1 starting (no compatible cell)", "1 down"}, - []string{"0 of 2 instances running", "2 starting (insufficient resources, no compatible cell)"}, - []string{"2 of 2 instances running"}, - []string{"App started"}, - )) - }) - }) - - It("tells the user about the failure when waiting for the app to stage times out", func() { - displayApp := &testcmd.FakeAppDisplayer{} - - defaultInstanceErrorCodes = []string{errors.APP_NOT_STAGED, errors.APP_NOT_STAGED, errors.APP_NOT_STAGED} - - defaultAppForStart.PackageState = "PENDING" - ui, _, _ := startAppWithInstancesAndErrors(displayApp, defaultAppForStart, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Starting", "my-app"}, - []string{"FAILED"}, - []string{"my-app failed to stage within", "minutes"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"instances running"})) - }) - - It("tells the user about the failure when starting the app fails", func() { - config := testconfig.NewRepository() - displayApp := &testcmd.FakeAppDisplayer{} - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - appRepo := &testApplication.FakeApplicationRepository{UpdateErr: true} - appRepo.ReadReturns.App = app - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - args := []string{"my-app"} - requirementsFactory.Application = app - ui := callStart(args, config, requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-app"}, - []string{"FAILED"}, - []string{"Error updating app."}, - )) - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - }) - - It("warns the user when the app is already running", func() { - displayApp := &testcmd.FakeAppDisplayer{} - config := testconfig.NewRepository() - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - app.State = "started" - appRepo := &testApplication.FakeApplicationRepository{} - appRepo.ReadReturns.App = app - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - - requirementsFactory.Application = app - - args := []string{"my-app"} - ui := callStart(args, config, requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"my-app", "is already started"})) - - Expect(appRepo.UpdateAppGuid).To(Equal("")) - }) - - It("tells the user when connecting to the log server fails", func() { - configRepo := testconfig.NewRepositoryWithDefaults() - displayApp := &testcmd.FakeAppDisplayer{} - - appRepo := &testApplication.FakeApplicationRepository{} - appRepo.ReadReturns.App = defaultAppForStart - appInstancesRepo := &testAppInstanaces.FakeAppInstancesRepository{} - - oldLogsRepo.TailLogsForReturns(errors.New("Ooops")) - logRepo.TailNoaaLogsForReturns(errors.New("Ooops")) - - requirementsFactory.Application = defaultAppForStart - - ui := callStart([]string{"my-app"}, configRepo, requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo, oldLogsRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"error tailing logs"}, - []string{"Ooops"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/stop.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/stop.go deleted file mode 100644 index 7f84092..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/stop.go +++ /dev/null @@ -1,94 +0,0 @@ -package application - -import ( - "errors" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ApplicationStopper interface { - ApplicationStop(app models.Application, orgName string, spaceName string) (updatedApp models.Application, err error) -} - -type Stop struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository - appReq requirements.ApplicationRequirement -} - -func NewStop(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) (cmd *Stop) { - cmd = new(Stop) - cmd.ui = ui - cmd.config = config - cmd.appRepo = appRepo - - return -} - -func (cmd *Stop) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "stop", - ShortName: "sp", - Description: T("Stop an app"), - Usage: T("CF_NAME stop APP_NAME"), - } -} - -func (cmd *Stop) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), cmd.appReq} - return -} - -func (cmd *Stop) ApplicationStop(app models.Application, orgName, spaceName string) (updatedApp models.Application, err error) { - if app.State == "stopped" { - updatedApp = app - return - } - - cmd.ui.Say(T("Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(orgName), - "SpaceName": terminal.EntityNameColor(spaceName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username())})) - - state := "STOPPED" - updatedApp, apiErr := cmd.appRepo.Update(app.Guid, models.AppParams{State: &state}) - if apiErr != nil { - err = errors.New(apiErr.Error()) - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - return -} - -func (cmd *Stop) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - if app.State == "stopped" { - cmd.ui.Say(terminal.WarningColor(T("App ") + app.Name + T(" is already stopped"))) - } else { - cmd.ApplicationStop(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/stop_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/stop_test.go deleted file mode 100644 index 38db821..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/stop_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("stop command", func() { - var ( - ui *testterm.FakeUI - app models.Application - appRepo *testApplication.FakeApplicationRepository - requirementsFactory *testreq.FakeReqFactory - config core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - appRepo = &testApplication.FakeApplicationRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewStop(ui, config, appRepo), args, requirementsFactory) - } - - It("fails requirements when not logged in", func() { - Expect(runCommand("some-app-name")).To(BeFalse()) - }) - It("fails requirements when a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("some-app-name")).To(BeFalse()) - }) - - Context("when logged in and an app exists", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - app = models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - app.State = "started" - }) - - JustBeforeEach(func() { - appRepo.ReadReturns.App = app - requirementsFactory.Application = app - }) - - It("fails with usage when the app name is not given", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("stops the app with the given name", func() { - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Stopping app", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - }) - - It("warns the user when stopping the app fails", func() { - appRepo.UpdateErr = true - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Stopping", "my-app"}, - []string{"FAILED"}, - []string{"Error updating app."}, - )) - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - }) - - Context("when the app is stopped", func() { - BeforeEach(func() { - app.State = "stopped" - }) - - It("warns the user when the app is already stopped", func() { - runCommand("my-app") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"my-app", "is already stopped"})) - Expect(appRepo.UpdateAppGuid).To(Equal("")) - }) - }) - - Describe(".ApplicationStop()", func() { - It("returns the updated app model from ApplicationStop()", func() { - expectedStoppedApp := app - expectedStoppedApp.State = "stopped" - - appRepo.UpdateAppResult = expectedStoppedApp - stopper := NewStop(ui, config, appRepo) - actualStoppedApp, err := stopper.ApplicationStop(app, config.OrganizationFields().Name, config.SpaceFields().Name) - - Expect(err).NotTo(HaveOccurred()) - Expect(expectedStoppedApp).To(Equal(actualStoppedApp)) - }) - - Context("When the app is already stopped", func() { - BeforeEach(func() { - app.State = "stopped" - }) - - It("returns the app without updating it", func() { - stopper := NewStop(ui, config, appRepo) - updatedApp, err := stopper.ApplicationStop(app, config.OrganizationFields().Name, config.SpaceFields().Name) - - Expect(err).NotTo(HaveOccurred()) - Expect(app).To(Equal(updatedApp)) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/unset_env.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/unset_env.go deleted file mode 100644 index bc6a97a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/unset_env.go +++ /dev/null @@ -1,88 +0,0 @@ -package application - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnsetEnv struct { - ui terminal.UI - config core_config.Reader - appRepo applications.ApplicationRepository - appReq requirements.ApplicationRequirement -} - -func NewUnsetEnv(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) (cmd *UnsetEnv) { - cmd = new(UnsetEnv) - cmd.ui = ui - cmd.config = config - cmd.appRepo = appRepo - return -} - -func (cmd *UnsetEnv) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unset-env", - Description: T("Remove an env variable"), - Usage: T("CF_NAME unset-env APP_NAME ENV_VAR_NAME"), - } -} - -func (cmd *UnsetEnv) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *UnsetEnv) Run(c *cli.Context) { - varName := c.Args()[1] - app := cmd.appReq.GetApplication() - - cmd.ui.Say(T("Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "VarName": terminal.EntityNameColor(varName), - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username())})) - - envParams := app.EnvironmentVars - - if _, ok := envParams[varName]; !ok { - cmd.ui.Ok() - cmd.ui.Warn(T("Env variable {{.VarName}} was not set.", map[string]interface{}{"VarName": varName})) - return - } - - delete(envParams, varName) - - _, apiErr := cmd.appRepo.Update(app.Guid, models.AppParams{EnvironmentVars: &envParams}) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say(T("TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " restage")})) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/unset_env_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/unset_env_test.go deleted file mode 100644 index 39474a5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/application/unset_env_test.go +++ /dev/null @@ -1,116 +0,0 @@ -package application_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/application" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("unset-env command", func() { - var ( - ui *testterm.FakeUI - app models.Application - appRepo *testApplication.FakeApplicationRepository - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - app = models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - appRepo = &testApplication.FakeApplicationRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewUnsetEnv(ui, configRepo, appRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.TargetedSpaceSuccess = true - requirementsFactory.Application = app - - Expect(runCommand("foo", "bar")).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.Application = app - - Expect(runCommand("foo", "bar")).To(BeFalse()) - }) - - It("fails with usage when not provided with exactly 2 args", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - requirementsFactory.Application = app - - Expect(runCommand("too", "many", "args")).To(BeFalse()) - }) - }) - - Context("when logged in, a space is targeted and provided enough args", func() { - BeforeEach(func() { - app.EnvironmentVars = map[string]interface{}{"foo": "bar", "DATABASE_URL": "mysql://example.com/my-db"} - - requirementsFactory.Application = app - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - }) - - It("updates the app and tells the user what happened", func() { - runCommand("my-app", "DATABASE_URL") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing env variable", "DATABASE_URL", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(appRepo.UpdateAppGuid).To(Equal("my-app-guid")) - Expect(*appRepo.UpdateParams.EnvironmentVars).To(Equal(map[string]interface{}{ - "foo": "bar", - })) - }) - - Context("when updating the app fails", func() { - BeforeEach(func() { - appRepo.UpdateErr = true - appRepo.ReadReturns.App = app - }) - - It("fails and alerts the user", func() { - runCommand("does-not-exist", "DATABASE_URL") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing env variable"}, - []string{"FAILED"}, - []string{"Error updating app."}, - )) - }) - }) - - It("tells the user if the specified env var was not set", func() { - runCommand("my-app", "CANT_STOP_WONT_STOP_UNSETTIN_THIS_ENV") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing env variable"}, - []string{"OK"}, - []string{"CANT_STOP_WONT_STOP_UNSETTIN_THIS_ENV", "was not set."}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/auth.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/auth.go deleted file mode 100644 index 3aee09d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/auth.go +++ /dev/null @@ -1,67 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/utils" - "github.com/codegangsta/cli" -) - -type Authenticate struct { - ui terminal.UI - config core_config.ReadWriter - authenticator authentication.AuthenticationRepository -} - -func NewAuthenticate(ui terminal.UI, config core_config.ReadWriter, authenticator authentication.AuthenticationRepository) (cmd Authenticate) { - cmd.ui = ui - cmd.config = config - cmd.authenticator = authenticator - return -} - -func (cmd Authenticate) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "auth", - Description: T("Authenticate user non-interactively"), - Usage: T("CF_NAME auth USERNAME PASSWORD\n\n") + - terminal.WarningColor(T("WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n")) + T("EXAMPLE:\n") + T(" CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n") + T(" CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)"), - } -} - -func (cmd Authenticate) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewApiEndpointRequirement()) - return -} - -func (cmd Authenticate) Run(c *cli.Context) { - cmd.config.ClearSession() - cmd.authenticator.GetLoginPromptsAndSaveUAAServerURL() - - cmd.ui.Say(T("API endpoint: {{.ApiEndpoint}}", - map[string]interface{}{"ApiEndpoint": terminal.EntityNameColor(cmd.config.ApiEndpoint())})) - cmd.ui.Say(T("Authenticating...")) - - apiErr := cmd.authenticator.Authenticate(map[string]string{"username": c.Args()[0], "password": c.Args()[1]}) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say(T("Use '{{.Name}}' to view or set your target org and space", - map[string]interface{}{"Name": terminal.CommandColor(cf.Name() + " target")})) - - utils.NotifyUpdateIfNeeded(cmd.ui, cmd.config) - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/auth_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/auth_test.go deleted file mode 100644 index 79476fc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/auth_test.go +++ /dev/null @@ -1,118 +0,0 @@ -package commands_test - -import ( - "github.com/cloudfoundry/cli/cf" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("auth command", func() { - var ( - ui *testterm.FakeUI - cmd Authenticate - config core_config.ReadWriter - repo *testapi.FakeAuthenticationRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - repo = &testapi.FakeAuthenticationRepository{ - Config: config, - AccessToken: "my-access-token", - RefreshToken: "my-refresh-token", - } - cmd = NewAuthenticate(ui, config, repo) - }) - - Describe("requirements", func() { - It("fails with usage when given too few arguments", func() { - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails if the user has not set an api endpoint", func() { - Expect(testcmd.RunCommand(cmd, []string{"username", "password"}, requirementsFactory)).To(BeFalse()) - }) - }) - - Context("when an api endpoint is targeted", func() { - BeforeEach(func() { - requirementsFactory.ApiEndpointSuccess = true - config.SetApiEndpoint("foo.example.org/authenticate") - }) - - It("authenticates successfully", func() { - requirementsFactory.ApiEndpointSuccess = true - testcmd.RunCommand(cmd, []string{"foo@example.com", "password"}, requirementsFactory) - - Expect(ui.FailedWithUsage).To(BeFalse()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"foo.example.org/authenticate"}, - []string{"OK"}, - )) - - Expect(repo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "username": "foo@example.com", - "password": "password", - }, - })) - }) - - It("prompts users to upgrade if CLI version < min cli version requirement", func() { - config.SetMinCliVersion("5.0.0") - config.SetMinRecommendedCliVersion("5.5.0") - cf.Version = "4.5.0" - - testcmd.RunCommand(cmd, []string{"foo@example.com", "password"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"To upgrade your CLI"}, - []string{"5.0.0"}, - )) - }) - - It("gets the UAA endpoint and saves it to the config file", func() { - requirementsFactory.ApiEndpointSuccess = true - testcmd.RunCommand(cmd, []string{"foo@example.com", "password"}, requirementsFactory) - Expect(repo.GetLoginPromptsWasCalled).To(BeTrue()) - }) - - Describe("when authentication fails", func() { - BeforeEach(func() { - repo.AuthError = true - testcmd.RunCommand(cmd, []string{"username", "password"}, requirementsFactory) - }) - - It("does not prompt the user when provided username and password", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{config.ApiEndpoint()}, - []string{"Authenticating..."}, - []string{"FAILED"}, - []string{"Error authenticating"}, - )) - }) - - It("clears the user's session", func() { - Expect(config.AccessToken()).To(BeEmpty()) - Expect(config.RefreshToken()).To(BeEmpty()) - Expect(config.SpaceFields()).To(Equal(models.SpaceFields{})) - Expect(config.OrganizationFields()).To(Equal(models.OrganizationFields{})) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpack_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpack_suite_test.go deleted file mode 100644 index 47b14cc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpack_suite_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package buildpack_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestBuildpack(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Buildpack Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpacks.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpacks.go deleted file mode 100644 index 157861f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpacks.go +++ /dev/null @@ -1,82 +0,0 @@ -package buildpack - -import ( - . "github.com/cloudfoundry/cli/cf/i18n" - "strconv" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListBuildpacks struct { - ui terminal.UI - buildpackRepo api.BuildpackRepository -} - -func NewListBuildpacks(ui terminal.UI, buildpackRepo api.BuildpackRepository) (cmd ListBuildpacks) { - cmd.ui = ui - cmd.buildpackRepo = buildpackRepo - return -} - -func (cmd ListBuildpacks) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "buildpacks", - Description: T("List all buildpacks"), - Usage: T("CF_NAME buildpacks"), - } -} - -func (cmd ListBuildpacks) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd ListBuildpacks) Run(c *cli.Context) { - cmd.ui.Say(T("Getting buildpacks...\n")) - - table := cmd.ui.Table([]string{"buildpack", T("position"), T("enabled"), T("locked"), T("filename")}) - noBuildpacks := true - - apiErr := cmd.buildpackRepo.ListBuildpacks(func(buildpack models.Buildpack) bool { - position := "" - if buildpack.Position != nil { - position = strconv.Itoa(*buildpack.Position) - } - enabled := "" - if buildpack.Enabled != nil { - enabled = strconv.FormatBool(*buildpack.Enabled) - } - locked := "" - if buildpack.Locked != nil { - locked = strconv.FormatBool(*buildpack.Locked) - } - table.Add( - buildpack.Name, - position, - enabled, - locked, - buildpack.Filename, - ) - noBuildpacks = false - return true - }) - table.Print() - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching buildpacks.\n{{.Error}}", map[string]interface{}{"Error": apiErr.Error()})) - } - - if noBuildpacks { - cmd.ui.Say(T("No buildpacks found")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpacks_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpacks_test.go deleted file mode 100644 index ac03b64..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/buildpacks_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package buildpack_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/commands/buildpack" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ListBuildpacks", func() { - var ( - ui *testterm.FakeUI - buildpackRepo *testapi.FakeBuildpackRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - buildpackRepo = &testapi.FakeBuildpackRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := buildpack.NewListBuildpacks(ui, buildpackRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when login fails", func() { - Expect(runCommand()).To(BeFalse()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("lists buildpacks", func() { - p1 := 5 - p2 := 10 - p3 := 15 - t := true - f := false - - buildpackRepo.Buildpacks = []models.Buildpack{ - models.Buildpack{Name: "Buildpack-1", Position: &p1, Enabled: &t, Locked: &f}, - models.Buildpack{Name: "Buildpack-2", Position: &p2, Enabled: &f, Locked: &t}, - models.Buildpack{Name: "Buildpack-3", Position: &p3, Enabled: &t, Locked: &f}, - } - - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting buildpacks"}, - []string{"buildpack", "position", "enabled"}, - []string{"Buildpack-1", "5", "true", "false"}, - []string{"Buildpack-2", "10", "false", "true"}, - []string{"Buildpack-3", "15", "true", "false"}, - )) - }) - - It("tells the user if no build packs exist", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting buildpacks"}, - []string{"No buildpacks found"}, - )) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/create_buildpack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/create_buildpack.go deleted file mode 100644 index 3c3aa8e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/create_buildpack.go +++ /dev/null @@ -1,124 +0,0 @@ -package buildpack - -import ( - "path/filepath" - "strconv" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateBuildpack struct { - ui terminal.UI - buildpackRepo api.BuildpackRepository - buildpackBitsRepo api.BuildpackBitsRepository -} - -func NewCreateBuildpack(ui terminal.UI, buildpackRepo api.BuildpackRepository, buildpackBitsRepo api.BuildpackBitsRepository) (cmd CreateBuildpack) { - cmd.ui = ui - cmd.buildpackRepo = buildpackRepo - cmd.buildpackBitsRepo = buildpackBitsRepo - return -} - -func (cmd CreateBuildpack) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-buildpack", - Description: T("Create a buildpack"), - Usage: T("CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]") + - T("\n\nTIP:\n") + T(" Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest."), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "enable", Usage: T("Enable the buildpack to be used for staging")}, - cli.BoolFlag{Name: "disable", Usage: T("Disable the buildpack from being used for staging")}, - }, - TotalArgs: 3, - } -} - -func (cmd CreateBuildpack) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd CreateBuildpack) Run(c *cli.Context) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - return - } - - buildpackName := c.Args()[0] - - cmd.ui.Say(T("Creating buildpack {{.BuildpackName}}...", map[string]interface{}{"BuildpackName": terminal.EntityNameColor(buildpackName)})) - - buildpack, err := cmd.createBuildpack(buildpackName, c) - - if err != nil { - if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.BUILDPACK_EXISTS { - cmd.ui.Ok() - cmd.ui.Warn(T("Buildpack {{.BuildpackName}} already exists", map[string]interface{}{"BuildpackName": buildpackName})) - cmd.ui.Say(T("TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", map[string]interface{}{"CfUpdateBuildpackCommand": terminal.CommandColor(cf.Name() + " " + "update-buildpack")})) - } else { - cmd.ui.Failed(err.Error()) - } - return - } - cmd.ui.Ok() - cmd.ui.Say("") - - cmd.ui.Say(T("Uploading buildpack {{.BuildpackName}}...", map[string]interface{}{"BuildpackName": terminal.EntityNameColor(buildpackName)})) - - dir, err := filepath.Abs(c.Args()[1]) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - err = cmd.buildpackBitsRepo.UploadBuildpack(buildpack, dir) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Ok() -} - -func (cmd CreateBuildpack) createBuildpack(buildpackName string, c *cli.Context) (buildpack models.Buildpack, apiErr error) { - position, err := strconv.Atoi(c.Args()[2]) - if err != nil { - apiErr = errors.NewWithFmt(T("Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", map[string]interface{}{"ErrorDescription": c.Args()[2]})) - return - } - - enabled := c.Bool("enable") - disabled := c.Bool("disable") - if enabled && disabled { - apiErr = errors.New(T("Cannot specify both {{.Enabled}} and {{.Disabled}}.", map[string]interface{}{ - "Enabled": "enabled", - "Disabled": "disabled", - })) - return - } - - var enableOption *bool = nil - if enabled { - enableOption = &enabled - } - if disabled { - disabled = false - enableOption = &disabled - } - - buildpack, apiErr = cmd.buildpackRepo.Create(buildpackName, &position, enableOption, nil) - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/create_buildpack_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/create_buildpack_test.go deleted file mode 100644 index 29c92ed..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/create_buildpack_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package buildpack_test - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/buildpack" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-buildpack command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - repo *testapi.FakeBuildpackRepository - bitsRepo *testapi.FakeBuildpackBitsRepository - ui *testterm.FakeUI - cmd CreateBuildpack - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - repo = &testapi.FakeBuildpackRepository{} - bitsRepo = &testapi.FakeBuildpackBitsRepository{} - ui = &testterm.FakeUI{} - cmd = NewCreateBuildpack(ui, repo, bitsRepo) - }) - - It("fails requirements when the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(testcmd.RunCommand(cmd, []string{"my-buildpack", "my-dir", "0"}, requirementsFactory)).To(BeFalse()) - }) - - It("fails with usage when given fewer than three arguments", func() { - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("creates and uploads buildpacks", func() { - testcmd.RunCommand(cmd, []string{"my-buildpack", "my.war", "5"}, requirementsFactory) - - Expect(repo.CreateBuildpack.Enabled).To(BeNil()) - Expect(ui.FailedWithUsage).To(BeFalse()) - Expect(strings.HasSuffix(bitsRepo.UploadBuildpackPath, "my.war")).To(Equal(true)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating buildpack", "my-buildpack"}, - []string{"OK"}, - []string{"Uploading buildpack", "my-buildpack"}, - []string{"OK"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("warns the user when the buildpack already exists", func() { - repo.CreateBuildpackExists = true - testcmd.RunCommand(cmd, []string{"my-buildpack", "my.war", "5"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating buildpack", "my-buildpack"}, - []string{"OK"}, - []string{"my-buildpack", "already exists"}, - []string{"TIP", "use", cf.Name(), "update-buildpack"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("enables the buildpack when given the --enabled flag", func() { - testcmd.RunCommand(cmd, []string{"--enable", "my-buildpack", "my.war", "5"}, requirementsFactory) - Expect(*repo.CreateBuildpack.Enabled).To(Equal(true)) - }) - - It("disables the buildpack when given the --disable flag", func() { - testcmd.RunCommand(cmd, []string{"--disable", "my-buildpack", "my.war", "5"}, requirementsFactory) - Expect(*repo.CreateBuildpack.Enabled).To(Equal(false)) - }) - - It("alerts the user when uploading the buildpack bits fails", func() { - bitsRepo.UploadBuildpackErr = true - testcmd.RunCommand(cmd, []string{"my-buildpack", "bogus/path", "5"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating buildpack", "my-buildpack"}, - []string{"OK"}, - []string{"Uploading buildpack"}, - []string{"FAILED"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/delete_buildpack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/delete_buildpack.go deleted file mode 100644 index 9f12743..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/delete_buildpack.go +++ /dev/null @@ -1,86 +0,0 @@ -package buildpack - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteBuildpack struct { - ui terminal.UI - buildpackRepo api.BuildpackRepository -} - -func NewDeleteBuildpack(ui terminal.UI, repo api.BuildpackRepository) (cmd *DeleteBuildpack) { - cmd = new(DeleteBuildpack) - cmd.ui = ui - cmd.buildpackRepo = repo - return -} - -func (cmd *DeleteBuildpack) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-buildpack", - Description: T("Delete a buildpack"), - Usage: T("CF_NAME delete-buildpack BUILDPACK [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteBuildpack) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - loginReq := requirementsFactory.NewLoginRequirement() - - reqs = []requirements.Requirement{ - loginReq, - } - - return -} - -func (cmd *DeleteBuildpack) Run(c *cli.Context) { - buildpackName := c.Args()[0] - - force := c.Bool("f") - - if !force { - answer := cmd.ui.ConfirmDelete("buildpack", buildpackName) - if !answer { - return - } - } - - cmd.ui.Say(T("Deleting buildpack {{.BuildpackName}}...", map[string]interface{}{"BuildpackName": terminal.EntityNameColor(buildpackName)})) - buildpack, apiErr := cmd.buildpackRepo.FindByName(buildpackName) - - switch apiErr.(type) { - case nil: //do nothing - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Buildpack {{.BuildpackName}} does not exist.", map[string]interface{}{"BuildpackName": buildpackName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - - } - - apiErr = cmd.buildpackRepo.Delete(buildpack.Guid) - if apiErr != nil { - cmd.ui.Failed(T("Error deleting buildpack {{.Name}}\n{{.Error}}", map[string]interface{}{ - "Name": terminal.EntityNameColor(buildpack.Name), - "Error": apiErr.Error(), - })) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/delete_buildpack_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/delete_buildpack_test.go deleted file mode 100644 index fb67b94..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/delete_buildpack_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package buildpack_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/buildpack" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-buildpack command", func() { - var ( - ui *testterm.FakeUI - buildpackRepo *testapi.FakeBuildpackRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - buildpackRepo = &testapi.FakeBuildpackRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteBuildpack(ui, buildpackRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when the user is not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand("-f", "my-buildpack")).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when the buildpack exists", func() { - BeforeEach(func() { - buildpackRepo.FindByNameBuildpack = models.Buildpack{ - Name: "my-buildpack", - Guid: "my-buildpack-guid", - } - }) - - It("deletes the buildpack", func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - - runCommand("my-buildpack") - - Expect(buildpackRepo.DeleteBuildpackGuid).To(Equal("my-buildpack-guid")) - - Expect(ui.Prompts).To(ContainSubstrings([]string{"delete the buildpack my-buildpack"})) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting buildpack", "my-buildpack"}, - []string{"OK"}, - )) - }) - - Context("when the force flag is provided", func() { - It("does not prompt the user to delete the buildback", func() { - runCommand("-f", "my-buildpack") - - Expect(buildpackRepo.DeleteBuildpackGuid).To(Equal("my-buildpack-guid")) - - Expect(len(ui.Prompts)).To(Equal(0)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting buildpack", "my-buildpack"}, - []string{"OK"}, - )) - }) - }) - }) - - Context("when the buildpack provided is not found", func() { - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - buildpackRepo.FindByNameNotFound = true - }) - - It("warns the user", func() { - runCommand("my-buildpack") - - Expect(buildpackRepo.FindByNameName).To(Equal("my-buildpack")) - Expect(buildpackRepo.FindByNameNotFound).To(BeTrue()) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "my-buildpack"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"my-buildpack", "does not exist"})) - }) - }) - - Context("when an error occurs", func() { - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - - buildpackRepo.FindByNameBuildpack = models.Buildpack{ - Name: "my-buildpack", - Guid: "my-buildpack-guid", - } - buildpackRepo.DeleteApiResponse = errors.New("failed badly") - }) - - It("fails with the error", func() { - runCommand("my-buildpack") - - Expect(buildpackRepo.DeleteBuildpackGuid).To(Equal("my-buildpack-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting buildpack", "my-buildpack"}, - []string{"FAILED"}, - []string{"my-buildpack"}, - []string{"failed badly"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/rename_buildpack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/rename_buildpack.go deleted file mode 100644 index a183c21..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/rename_buildpack.go +++ /dev/null @@ -1,63 +0,0 @@ -package buildpack - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RenameBuildpack struct { - ui terminal.UI - buildpackRepo api.BuildpackRepository -} - -func NewRenameBuildpack(ui terminal.UI, repo api.BuildpackRepository) (cmd *RenameBuildpack) { - cmd = new(RenameBuildpack) - cmd.ui = ui - cmd.buildpackRepo = repo - return -} - -func (cmd *RenameBuildpack) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "rename-buildpack", - Description: T("Rename a buildpack"), - Usage: T("CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME"), - } -} - -func (cmd *RenameBuildpack) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return -} - -func (cmd *RenameBuildpack) Run(c *cli.Context) { - buildpackName := c.Args()[0] - newBuildpackName := c.Args()[1] - - cmd.ui.Say(T("Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", map[string]interface{}{"OldBuildpackName": terminal.EntityNameColor(buildpackName), "NewBuildpackName": terminal.EntityNameColor(newBuildpackName)})) - - buildpack, apiErr := cmd.buildpackRepo.FindByName(buildpackName) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - buildpack.Name = newBuildpackName - buildpack, apiErr = cmd.buildpackRepo.Update(buildpack) - if apiErr != nil { - cmd.ui.Failed(T("Error renaming buildpack {{.Name}}\n{{.Error}}", map[string]interface{}{ - "Name": terminal.EntityNameColor(buildpack.Name), - "Error": apiErr.Error(), - })) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/rename_buildpack_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/rename_buildpack_test.go deleted file mode 100644 index 74d7310..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/rename_buildpack_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package buildpack_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/buildpack" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("rename-buildpack command", func() { - var ( - cmd *RenameBuildpack - fakeRepo *testapi.FakeBuildpackRepository - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, BuildpackSuccess: true} - ui = new(testterm.FakeUI) - fakeRepo = &testapi.FakeBuildpackRepository{} - cmd = NewRenameBuildpack(ui, fakeRepo) - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails requirements when called without the current name and the new name to use", func() { - passed := runCommand("my-buildpack-name") - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("renames a buildpack", func() { - fakeRepo.FindByNameBuildpack = models.Buildpack{ - Name: "my-buildpack", - Guid: "my-buildpack-guid", - } - - runCommand("my-buildpack", "new-buildpack") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming buildpack", "my-buildpack"}, - []string{"OK"}, - )) - }) - - It("fails when the buildpack does not exist", func() { - fakeRepo.FindByNameNotFound = true - - runCommand("my-buildpack1", "new-buildpack") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming buildpack", "my-buildpack"}, - []string{"FAILED"}, - []string{"Buildpack my-buildpack1 not found"}, - )) - }) - - It("fails when there is an error updating the buildpack", func() { - fakeRepo.FindByNameBuildpack = models.Buildpack{ - Name: "my-buildpack", - Guid: "my-buildpack-guid", - } - fakeRepo.UpdateBuildpackReturns.Error = errors.New("SAD TROMBONE") - - runCommand("my-buildpack1", "new-buildpack") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming buildpack", "my-buildpack"}, - []string{"SAD TROMBONE"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/update_buildpack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/update_buildpack.go deleted file mode 100644 index 5447ed0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/update_buildpack.go +++ /dev/null @@ -1,149 +0,0 @@ -package buildpack - -import ( - "path/filepath" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UpdateBuildpack struct { - ui terminal.UI - buildpackRepo api.BuildpackRepository - buildpackBitsRepo api.BuildpackBitsRepository - buildpackReq requirements.BuildpackRequirement -} - -func NewUpdateBuildpack(ui terminal.UI, repo api.BuildpackRepository, bitsRepo api.BuildpackBitsRepository) (cmd *UpdateBuildpack) { - cmd = new(UpdateBuildpack) - cmd.ui = ui - cmd.buildpackRepo = repo - cmd.buildpackBitsRepo = bitsRepo - return -} - -func (cmd *UpdateBuildpack) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "update-buildpack", - Description: T("Update a buildpack"), - Usage: T("CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]") + - T("\n\nTIP:\n") + T(" Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest."), - Flags: []cli.Flag{ - flag_helpers.NewIntFlag("i", T("The order in which the buildpacks are checked during buildpack auto-detection")), - flag_helpers.NewStringFlag("p", T("Path to directory or zip file")), - cli.BoolFlag{Name: "enable", Usage: T("Enable the buildpack to be used for staging")}, - cli.BoolFlag{Name: "disable", Usage: T("Disable the buildpack from being used for staging")}, - cli.BoolFlag{Name: "lock", Usage: T("Lock the buildpack to prevent updates")}, - cli.BoolFlag{Name: "unlock", Usage: T("Unlock the buildpack to enable updates")}, - }, - } -} - -func (cmd *UpdateBuildpack) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - loginReq := requirementsFactory.NewLoginRequirement() - cmd.buildpackReq = requirementsFactory.NewBuildpackRequirement(c.Args()[0]) - - reqs = []requirements.Requirement{ - loginReq, - cmd.buildpackReq, - } - - return -} - -func (cmd *UpdateBuildpack) Run(c *cli.Context) { - buildpack := cmd.buildpackReq.GetBuildpack() - - cmd.ui.Say(T("Updating buildpack {{.BuildpackName}}...", map[string]interface{}{"BuildpackName": terminal.EntityNameColor(buildpack.Name)})) - - updateBuildpack := false - - if c.IsSet("i") { - position := c.Int("i") - - buildpack.Position = &position - updateBuildpack = true - } - - enabled := c.Bool("enable") - disabled := c.Bool("disable") - if enabled && disabled { - cmd.ui.Failed(T("Cannot specify both {{.Enabled}} and {{.Disabled}}.", map[string]interface{}{ - "Enabled": "enabled", - "Disabled": "disabled", - })) - } - - if enabled { - buildpack.Enabled = &enabled - updateBuildpack = true - } - if disabled { - disabled = false - buildpack.Enabled = &disabled - updateBuildpack = true - } - - lock := c.Bool("lock") - unlock := c.Bool("unlock") - if lock && unlock { - cmd.ui.Failed(T("Cannot specify both lock and unlock options.")) - return - } - - path := c.String("p") - var dir string - var err error - if path != "" { - dir, err = filepath.Abs(path) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - } - - if dir != "" && (lock || unlock) { - cmd.ui.Failed(T("Cannot specify buildpack bits and lock/unlock.")) - } - - if lock { - buildpack.Locked = &lock - updateBuildpack = true - } - if unlock { - unlock = false - buildpack.Locked = &unlock - updateBuildpack = true - } - - if updateBuildpack { - newBuildpack, apiErr := cmd.buildpackRepo.Update(buildpack) - if apiErr != nil { - cmd.ui.Failed(T("Error updating buildpack {{.Name}}\n{{.Error}}", map[string]interface{}{ - "Name": terminal.EntityNameColor(buildpack.Name), - "Error": apiErr.Error(), - })) - } - buildpack = newBuildpack - } - - if dir != "" { - apiErr := cmd.buildpackBitsRepo.UploadBuildpack(buildpack, dir) - if apiErr != nil { - cmd.ui.Failed(T("Error uploading buildpack {{.Name}}\n{{.Error}}", map[string]interface{}{ - "Name": terminal.EntityNameColor(buildpack.Name), - "Error": apiErr.Error(), - })) - } - } - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/update_buildpack_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/update_buildpack_test.go deleted file mode 100644 index c2efa1a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/buildpack/update_buildpack_test.go +++ /dev/null @@ -1,167 +0,0 @@ -package buildpack_test - -import ( - "strings" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/buildpack" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func successfulUpdate(ui *testterm.FakeUI, buildpackName string) { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating buildpack", buildpackName}, - []string{"OK"}, - )) -} - -func failedUpdate(ui *testterm.FakeUI, buildpackName string) { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating buildpack", buildpackName}, - []string{"FAILED"}, - )) -} - -var _ = Describe("Updating buildpack command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - ui *testterm.FakeUI - repo *testapi.FakeBuildpackRepository - bitsRepo *testapi.FakeBuildpackBitsRepository - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, BuildpackSuccess: true} - ui = new(testterm.FakeUI) - repo = &testapi.FakeBuildpackRepository{} - bitsRepo = &testapi.FakeBuildpackBitsRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewUpdateBuildpack(ui, repo, bitsRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("is only successful on login and buildpack success", func() { - It("returns success when both are true", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, BuildpackSuccess: true} - - Expect(runCommand("my-buildpack")).To(BeTrue()) - }) - - It("returns failure when at least one is false", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, BuildpackSuccess: false} - Expect(runCommand("my-buildpack", "-p", "buildpack.zip", "extraArg")).To(BeFalse()) - - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, BuildpackSuccess: false} - - Expect(runCommand("my-buildpack")).To(BeFalse()) - - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false, BuildpackSuccess: true} - - Expect(runCommand("my-buildpack")).To(BeFalse()) - }) - }) - - It("updates buildpack", func() { - runCommand("my-buildpack") - - successfulUpdate(ui, "my-buildpack") - }) - - Context("updates buildpack when passed the proper flags", func() { - Context("position flag", func() { - It("sets the position when passed a value", func() { - runCommand("-i", "999", "my-buildpack") - - Expect(*repo.UpdateBuildpackArgs.Buildpack.Position).To(Equal(999)) - successfulUpdate(ui, "my-buildpack") - }) - - It("defaults to nil when not passed", func() { - runCommand("my-buildpack") - - Expect(repo.UpdateBuildpackArgs.Buildpack.Position).To(BeNil()) - }) - }) - - Context("enabling/disabling buildpacks", func() { - It("can enable buildpack", func() { - runCommand("--enable", "my-buildpack") - - Expect(repo.UpdateBuildpackArgs.Buildpack.Enabled).NotTo(BeNil()) - Expect(*repo.UpdateBuildpackArgs.Buildpack.Enabled).To(Equal(true)) - - successfulUpdate(ui, "my-buildpack") - }) - - It("can disable buildpack", func() { - runCommand("--disable", "my-buildpack") - - Expect(repo.UpdateBuildpackArgs.Buildpack.Enabled).NotTo(BeNil()) - Expect(*repo.UpdateBuildpackArgs.Buildpack.Enabled).To(Equal(false)) - }) - - It("defaults to nil when not passed", func() { - runCommand("my-buildpack") - - Expect(repo.UpdateBuildpackArgs.Buildpack.Enabled).To(BeNil()) - }) - }) - - Context("buildpack path", func() { - It("uploads buildpack when passed", func() { - runCommand("-p", "buildpack.zip", "my-buildpack") - Expect(strings.HasSuffix(bitsRepo.UploadBuildpackPath, "buildpack.zip")).To(Equal(true)) - - successfulUpdate(ui, "my-buildpack") - }) - - It("errors when passed invalid path", func() { - bitsRepo.UploadBuildpackErr = true - - runCommand("-p", "bogus/path", "my-buildpack") - - failedUpdate(ui, "my-buildpack") - }) - }) - - Context("locking buildpack", func() { - It("can lock a buildpack", func() { - runCommand("--lock", "my-buildpack") - - Expect(repo.UpdateBuildpackArgs.Buildpack.Locked).NotTo(BeNil()) - Expect(*repo.UpdateBuildpackArgs.Buildpack.Locked).To(Equal(true)) - - successfulUpdate(ui, "my-buildpack") - }) - - It("can unlock a buildpack", func() { - runCommand("--unlock", "my-buildpack") - - successfulUpdate(ui, "my-buildpack") - }) - - Context("Unsuccessful locking", func() { - It("lock fails when passed invalid path", func() { - runCommand("--lock", "-p", "buildpack.zip", "my-buildpack") - - failedUpdate(ui, "my-buildpack") - }) - - It("unlock fails when passed invalid path", func() { - runCommand("--unlock", "-p", "buildpack.zip", "my-buildpack") - - failedUpdate(ui, "my-buildpack") - }) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/commands_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/commands_suite_test.go deleted file mode 100644 index b0001ef..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/commands_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package commands_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCommands(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Commands Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/config.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/config.go deleted file mode 100644 index 0a8854f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/config.go +++ /dev/null @@ -1,99 +0,0 @@ -package commands - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ConfigCommands struct { - ui terminal.UI - config core_config.ReadWriter -} - -func NewConfig(ui terminal.UI, config core_config.ReadWriter) ConfigCommands { - return ConfigCommands{ui: ui, config: config} -} - -func (cmd ConfigCommands) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "config", - Description: T("write default values to the config"), - Usage: T("CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]"), - Flags: []cli.Flag{ - flag_helpers.NewIntFlag("async-timeout", T("Timeout for async HTTP requests")), - flag_helpers.NewStringFlag("trace", T("Trace HTTP requests")), - flag_helpers.NewStringFlag("color", T("Enable or disable color")), - flag_helpers.NewStringFlag("locale", "Set default locale. If LOCALE is CLEAR, previous locale is deleted."), - }, - } -} - -func (cmd ConfigCommands) GetRequirements(_ requirements.Factory, _ *cli.Context) ([]requirements.Requirement, error) { - return nil, nil -} - -func (cmd ConfigCommands) Run(context *cli.Context) { - if !context.IsSet("trace") && !context.IsSet("async-timeout") && !context.IsSet("color") && !context.IsSet("locale") { - cmd.ui.FailWithUsage(context) - return - } - - if context.IsSet("async-timeout") { - asyncTimeout := context.Int("async-timeout") - if asyncTimeout < 0 { - cmd.ui.FailWithUsage(context) - } - - cmd.config.SetAsyncTimeout(uint(asyncTimeout)) - } - - if context.IsSet("trace") { - cmd.config.SetTrace(context.String("trace")) - } - - if context.IsSet("color") { - value := context.String("color") - switch value { - case "true": - cmd.config.SetColorEnabled("true") - case "false": - cmd.config.SetColorEnabled("false") - default: - cmd.ui.FailWithUsage(context) - } - } - - if context.IsSet("locale") { - locale := context.String("locale") - - if locale == "CLEAR" { - cmd.config.SetLocale("") - return - } - - foundLocale := false - - for _, value := range SUPPORTED_LOCALES { - if value == locale { - cmd.config.SetLocale(locale) - foundLocale = true - break - } - } - - if !foundLocale { - cmd.ui.Say(fmt.Sprintf("Could not find locale %s. The known locales are:", locale)) - cmd.ui.Say("") - for _, locale := range SUPPORTED_LOCALES { - cmd.ui.Say(locale) - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/config_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/config_test.go deleted file mode 100644 index 438eb28..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/config_test.go +++ /dev/null @@ -1,112 +0,0 @@ -package commands_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("config command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) { - cmd := NewConfig(ui, configRepo) - testcmd.RunCommand(cmd, args, requirementsFactory) - } - It("fails requirements when no flags are provided", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("--async-timeout flag", func() { - - It("stores the timeout in minutes when the --async-timeout flag is provided", func() { - runCommand("--async-timeout", "12") - Expect(configRepo.AsyncTimeout()).Should(Equal(uint(12))) - }) - - It("fails with usage when a invalid async timeout value is passed", func() { - runCommand("--async-timeout", "-1") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails with usage when a negative timout is passed", func() { - runCommand("--async-timeout", "-555") - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(configRepo.AsyncTimeout()).To(Equal(uint(0))) - }) - }) - - Context("--trace flag", func() { - It("stores the trace value when --trace flag is provided", func() { - runCommand("--trace", "true") - Expect(configRepo.Trace()).Should(Equal("true")) - - runCommand("--trace", "false") - Expect(configRepo.Trace()).Should(Equal("false")) - - runCommand("--trace", "some/file/lol") - Expect(configRepo.Trace()).Should(Equal("some/file/lol")) - }) - }) - - Context("--color flag", func() { - It("stores the color value when --color flag is provided", func() { - runCommand("--color", "true") - Expect(configRepo.ColorEnabled()).Should(Equal("true")) - - runCommand("--color", "false") - Expect(configRepo.ColorEnabled()).Should(Equal("false")) - }) - - It("fails with usage when a non-bool value is provided", func() { - runCommand("--color", "plaid") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("--locale flag", func() { - It("stores the locale value when --locale [locale] is provided", func() { - runCommand("--locale", "zh_Hans") - Expect(configRepo.Locale()).Should(Equal("zh_Hans")) - }) - - It("informs the user of known locales if an unknown locale is provided", func() { - runCommand("--locale", "foo_BAR") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"known locales are"}, - []string{"en_US"}, - []string{"fr_FR"}, - )) - }) - - Context("when the locale is already set", func() { - BeforeEach(func() { - configRepo.SetLocale("fr_FR") - Expect(configRepo.Locale()).Should(Equal("fr_FR")) - }) - - It("clears the locale when the '--locale clear' flag is provided", func() { - runCommand("--locale", "CLEAR") - Expect(configRepo.Locale()).Should(Equal("")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/create_app_manifest.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/create_app_manifest.go deleted file mode 100644 index 0cde6ac..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/create_app_manifest.go +++ /dev/null @@ -1,159 +0,0 @@ -package commands - -import ( - "fmt" - "sort" - - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/app_instances" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type AppManifestCreater interface { - CreateAppManifest(app models.Application, orgName string, spaceName string) -} - -type CreateAppManifest struct { - ui terminal.UI - config core_config.Reader - appSummaryRepo api.AppSummaryRepository - appInstancesRepo app_instances.AppInstancesRepository - appReq requirements.ApplicationRequirement - manifest manifest.AppManifest -} - -func NewCreateAppManifest(ui terminal.UI, config core_config.Reader, appSummaryRepo api.AppSummaryRepository, manifestGenerator manifest.AppManifest) (cmd *CreateAppManifest) { - cmd = new(CreateAppManifest) - cmd.ui = ui - cmd.config = config - cmd.appSummaryRepo = appSummaryRepo - cmd.manifest = manifestGenerator - return -} - -func (cmd *CreateAppManifest) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-app-manifest", - Description: T("Create an app manifest for an app that has been pushed successfully."), - Usage: T("CF_NAME create-app-manifest APP [-p /path/to/-manifest.yml ]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Specify a path for file creation. If path not specified, manifest file is created in current working directory.")), - }, - } -} - -func (cmd *CreateAppManifest) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.appReq, - } - return -} - -func (cmd *CreateAppManifest) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - - application, apiErr := cmd.appSummaryRepo.GetSummary(app.Guid) - - if apiErr != nil { - cmd.ui.Failed(T("Error getting application summary: ") + apiErr.Error()) - } - - cmd.ui.Say(T("Creating an app manifest from current settings of app ") + application.Name + " ...") - cmd.ui.Say("") - - savePath := "./" + application.Name + "_manifest.yml" - - if c.String("p") != "" { - savePath = c.String("p") - } - - cmd.createManifest(application, savePath) -} - -func (cmd *CreateAppManifest) createManifest(app models.Application, savePath string) error { - cmd.manifest.FileSavePath(savePath) - cmd.manifest.Memory(app.Name, app.Memory) - cmd.manifest.Instances(app.Name, app.InstanceCount) - - if app.Command != "" { - cmd.manifest.StartCommand(app.Name, app.Command) - } - - if app.BuildpackUrl != "" { - cmd.manifest.BuildpackUrl(app.Name, app.BuildpackUrl) - } - - if len(app.Services) > 0 { - for _, service := range app.Services { - cmd.manifest.Service(app.Name, service.Name) - } - } - - if app.HealthCheckTimeout > 0 { - cmd.manifest.HealthCheckTimeout(app.Name, app.HealthCheckTimeout) - } - - if len(app.EnvironmentVars) > 0 { - sorted := sortEnvVar(app.EnvironmentVars) - for _, envVarKey := range sorted { - switch app.EnvironmentVars[envVarKey].(type) { - default: - cmd.ui.Failed(T("Failed to create manifest, unable to parse environment variable: ") + envVarKey) - case float64: - //json.Unmarshal turn all numbers to float64 - value := int(app.EnvironmentVars[envVarKey].(float64)) - cmd.manifest.EnvironmentVars(app.Name, envVarKey, fmt.Sprintf("%d", value)) - case bool: - cmd.manifest.EnvironmentVars(app.Name, envVarKey, fmt.Sprintf("%t", app.EnvironmentVars[envVarKey].(bool))) - case string: - cmd.manifest.EnvironmentVars(app.Name, envVarKey, "\""+app.EnvironmentVars[envVarKey].(string)+"\"") - } - } - } - - if len(app.Routes) > 0 { - cmd.manifest.Domain(app.Name, app.Routes[0].Host, app.Routes[0].Domain.Name) - } - - err := cmd.manifest.Save() - if err != nil { - cmd.ui.Failed(T("Error creating manifest file: ") + err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say(T("Manifest file created successfully at ") + savePath) - cmd.ui.Say("") - - return nil -} - -func sortEnvVar(vars map[string]interface{}) []string { - var varsAry []string - for k, _ := range vars { - varsAry = append(varsAry, k) - } - sort.Strings(varsAry) - - return varsAry -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/create_app_manifest_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/create_app_manifest_test.go deleted file mode 100644 index 2917e37..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/create_app_manifest_test.go +++ /dev/null @@ -1,287 +0,0 @@ -package commands_test - -import ( - "time" - - testAppInstanaces "github.com/cloudfoundry/cli/cf/api/app_instances/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - testManifest "github.com/cloudfoundry/cli/cf/manifest/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - testtime "github.com/cloudfoundry/cli/testhelpers/time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-app-manifest Command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - appSummaryRepo *testapi.FakeAppSummaryRepo - appInstancesRepo *testAppInstanaces.FakeAppInstancesRepository - requirementsFactory *testreq.FakeReqFactory - fakeManifest *testManifest.FakeAppManifest - ) - - BeforeEach(func() { - fakeManifest = &testManifest.FakeAppManifest{} - ui = &testterm.FakeUI{} - appSummaryRepo = &testapi.FakeAppSummaryRepo{} - appInstancesRepo = &testAppInstanaces.FakeAppInstancesRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedSpaceSuccess: true, - } - }) - - runCommand := func(args ...string) bool { - cmd := NewCreateAppManifest(ui, configRepo, appSummaryRepo, fakeManifest) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails if not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("cf-plays-dwarf-fortress")).To(BeFalse()) - }) - - It("fails if a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(runCommand("cf-plays-dwarf-fortress")).To(BeFalse()) - }) - - It("fails with usage when not provided exactly one arg", func() { - passed := runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - - }) - - Describe("creating app manifest", func() { - var ( - appInstance models.AppInstanceFields - appInstance2 models.AppInstanceFields - instances []models.AppInstanceFields - ) - - BeforeEach(func() { - appInstance = models.AppInstanceFields{ - State: models.InstanceRunning, - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Jan 2 15:04:05 -0700 MST 2012"), - CpuUsage: 1.0, - DiskQuota: 1 * formatters.GIGABYTE, - DiskUsage: 32 * formatters.MEGABYTE, - MemQuota: 64 * formatters.MEGABYTE, - MemUsage: 13 * formatters.BYTE, - } - - appInstance2 = models.AppInstanceFields{ - State: models.InstanceDown, - Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Apr 1 15:04:05 -0700 MST 2012"), - } - - instances = []models.AppInstanceFields{appInstance, appInstance2} - appInstancesRepo.GetInstancesReturns(instances, nil) - }) - - Context("app with Services, Routes, Environment Vars", func() { - BeforeEach(func() { - app := makeAppWithOptions("my-app") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("creates a manifest with services, routes and environment vars", func() { - runCommand("my-app") - Ω(fakeManifest.MemoryCallCount()).To(Equal(1)) - Ω(fakeManifest.EnvironmentVarsCallCount()).To(Equal(1)) - Ω(fakeManifest.HealthCheckTimeoutCallCount()).To(Equal(1)) - Ω(fakeManifest.InstancesCallCount()).To(Equal(1)) - Ω(fakeManifest.DomainCallCount()).To(Equal(1)) - Ω(fakeManifest.ServiceCallCount()).To(Equal(1)) - Ω(fakeManifest.StartCommandCallCount()).To(Equal(1)) - }) - }) - - Context("app with buildpack", func() { - BeforeEach(func() { - app := makeAppWithOptions("my-app") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("creates a manifest with a buildpack", func() { - runCommand("my-app") - Ω(fakeManifest.BuildpackUrlCallCount()).To(Equal(1)) - }) - }) - - Context("Env Vars will be written in aplhabetical order", func() { - BeforeEach(func() { - app := makeAppWithMultipleEnvVars("my-app") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("calls manifest EnvironmentVars() aphlhabetically", func() { - runCommand("my-app") - Ω(fakeManifest.EnvironmentVarsCallCount()).To(Equal(4)) - _, k, _ := fakeManifest.EnvironmentVarsArgsForCall(0) - Ω(k).To(Equal("abc")) - _, k, _ = fakeManifest.EnvironmentVarsArgsForCall(1) - Ω(k).To(Equal("bar")) - _, k, _ = fakeManifest.EnvironmentVarsArgsForCall(2) - Ω(k).To(Equal("foo")) - _, k, _ = fakeManifest.EnvironmentVarsArgsForCall(3) - Ω(k).To(Equal("xyz")) - }) - }) - - Context("Env Vars can be in different types (string, float64, bool)", func() { - BeforeEach(func() { - app := makeAppWithMultipleEnvVars("my-app") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("calls manifest EnvironmentVars() aphlhabetically", func() { - runCommand("my-app") - Ω(fakeManifest.EnvironmentVarsCallCount()).To(Equal(4)) - _, _, v := fakeManifest.EnvironmentVarsArgsForCall(0) - Ω(v).To(Equal("\"abc\"")) - _, _, v = fakeManifest.EnvironmentVarsArgsForCall(1) - Ω(v).To(Equal("10")) - _, _, v = fakeManifest.EnvironmentVarsArgsForCall(2) - Ω(v).To(Equal("true")) - _, _, v = fakeManifest.EnvironmentVarsArgsForCall(3) - Ω(v).To(Equal("false")) - }) - }) - - Context("app without Services, Routes, Environment Vars", func() { - BeforeEach(func() { - app := makeAppWithoutOptions("my-app") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("creates a manifest with services, routes and environment vars", func() { - runCommand("my-app") - Ω(fakeManifest.MemoryCallCount()).To(Equal(1)) - Ω(fakeManifest.EnvironmentVarsCallCount()).To(Equal(0)) - Ω(fakeManifest.HealthCheckTimeoutCallCount()).To(Equal(0)) - Ω(fakeManifest.InstancesCallCount()).To(Equal(1)) - Ω(fakeManifest.DomainCallCount()).To(Equal(0)) - Ω(fakeManifest.ServiceCallCount()).To(Equal(0)) - }) - }) - - Context("when the flag -p is supplied", func() { - BeforeEach(func() { - app := makeAppWithoutOptions("my-app") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("creates a manifest with services, routes and environment vars", func() { - filePath := "another/location/manifest.yml" - runCommand("-p", filePath, "my-app") - Ω(fakeManifest.FileSavePathArgsForCall(0)).To(Equal(filePath)) - }) - }) - - Context("when no -p flag is supplied", func() { - BeforeEach(func() { - app := makeAppWithoutOptions("my-app2") - appSummaryRepo.GetSummarySummary = app - requirementsFactory.Application = app - }) - - It("creates a manifest named _manifest.yml", func() { - runCommand("my-app2") - Ω(fakeManifest.FileSavePathArgsForCall(0)).To(Equal("./my-app2_manifest.yml")) - }) - }) - - }) -}) - -func makeAppWithOptions(appName string) models.Application { - application := models.Application{} - application.Name = appName - application.Guid = "app-guid" - application.Command = "run main.go" - application.BuildpackUrl = "go-buildpack" - - domain := models.DomainFields{} - domain.Name = "example.com" - - route := models.RouteSummary{Host: "foo", Domain: domain} - secondRoute := models.RouteSummary{Host: appName, Domain: domain} - packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") - - application.State = "started" - application.InstanceCount = 2 - application.RunningInstances = 2 - application.Memory = 256 - application.HealthCheckTimeout = 100 - application.Routes = []models.RouteSummary{route, secondRoute} - application.PackageUpdatedAt = &packgeUpdatedAt - - envMap := make(map[string]interface{}) - envMap["foo"] = "bar" - application.EnvironmentVars = envMap - - application.Services = append(application.Services, models.ServicePlanSummary{ - Guid: "", - Name: "server1", - }) - - return application -} - -func makeAppWithoutOptions(appName string) models.Application { - application := models.Application{} - application.Name = appName - application.Guid = "app-guid" - packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") - - application.State = "started" - application.InstanceCount = 2 - application.RunningInstances = 2 - application.Memory = 256 - application.PackageUpdatedAt = &packgeUpdatedAt - - return application -} - -func makeAppWithMultipleEnvVars(appName string) models.Application { - application := models.Application{} - application.Name = appName - application.Guid = "app-guid" - packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") - - application.State = "started" - application.InstanceCount = 2 - application.RunningInstances = 2 - application.Memory = 256 - application.PackageUpdatedAt = &packgeUpdatedAt - - envMap := make(map[string]interface{}) - envMap["foo"] = bool(true) - envMap["abc"] = "abc" - envMap["xyz"] = bool(false) - envMap["bar"] = float64(10) - application.EnvironmentVars = envMap - - return application -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/curl.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/curl.go deleted file mode 100644 index c0552a9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/curl.go +++ /dev/null @@ -1,121 +0,0 @@ -package commands - -import ( - "bytes" - "encoding/json" - "errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "io/ioutil" - "os" - "path/filepath" - "strings" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/trace" - "github.com/codegangsta/cli" -) - -type Curl struct { - ui terminal.UI - config core_config.Reader - curlRepo api.CurlRepository -} - -func NewCurl(ui terminal.UI, config core_config.Reader, curlRepo api.CurlRepository) (cmd *Curl) { - cmd = new(Curl) - cmd.ui = ui - cmd.config = config - cmd.curlRepo = curlRepo - return -} - -func (cmd *Curl) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "curl", - Description: T("Executes a raw request, content-type set to application/json by default"), - Usage: T("CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "i", Usage: T("Include response headers in the output")}, - cli.BoolFlag{Name: "v", Usage: T("Enable CF_TRACE output for all requests and responses")}, - cli.StringFlag{Name: "X", Value: "GET", Usage: T("HTTP method (GET,POST,PUT,DELETE,etc)")}, - flag_helpers.NewStringSliceFlag("H", T("Custom headers to include in the request, flag can be specified multiple times")), - flag_helpers.NewStringFlag("d", T("HTTP data to include in the request body")), - flag_helpers.NewStringFlag("output", T("Write curl body to FILE instead of stdout")), - }, - } -} - -func (cmd *Curl) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - err = errors.New(T("Incorrect number of arguments")) - cmd.ui.FailWithUsage(c) - return - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *Curl) Run(c *cli.Context) { - path := c.Args()[0] - method := c.String("X") - headers := c.StringSlice("H") - body := c.String("d") - verbose := c.Bool("v") - - reqHeader := strings.Join(headers, "\n") - - if verbose { - trace.EnableTrace() - } - - responseHeader, responseBody, apiErr := cmd.curlRepo.Request(method, path, reqHeader, body) - if apiErr != nil { - cmd.ui.Failed(T("Error creating request:\n{{.Err}}", map[string]interface{}{"Err": apiErr.Error()})) - } - - if verbose { - return - } - - if c.Bool("i") { - cmd.ui.Say(responseHeader) - } - - if c.String("output") != "" { - err := cmd.writeToFile(responseBody, c.String("output")) - if err != nil { - cmd.ui.Failed(T("Error creating request:\n{{.Err}}", map[string]interface{}{"Err": err})) - } - } else { - if strings.Contains(responseHeader, "application/json") { - buffer := bytes.Buffer{} - err := json.Indent(&buffer, []byte(responseBody), "", " ") - if err == nil { - responseBody = buffer.String() - } - } - - cmd.ui.Say(responseBody) - } - return -} - -func (cmd Curl) writeToFile(responseBody, filePath string) (err error) { - if _, err = os.Stat(filePath); os.IsNotExist(err) { - err = os.MkdirAll(filepath.Dir(filePath), 0755) - } - - if err != nil { - return - } - - return ioutil.WriteFile(filePath, []byte(responseBody), 0644) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/curl_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/curl_test.go deleted file mode 100644 index e24a0ca..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/curl_test.go +++ /dev/null @@ -1,208 +0,0 @@ -package commands_test - -import ( - "bytes" - "io/ioutil" - "os" - "path/filepath" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/trace" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - "github.com/cloudfoundry/gofileutils/fileutils" - - . "github.com/cloudfoundry/cli/cf/commands" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("curl command", func() { - var deps curlDependencies - - BeforeEach(func() { - deps = newCurlDependencies() - }) - - It("does not pass requirements when not logged in", func() { - Expect(runCurlWithInputs(deps, []string{"/foo"})).To(BeFalse()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - deps.requirementsFactory.LoginSuccess = true - }) - - It("fails with usage when not given enough input", func() { - runCurlWithInputs(deps, []string{}) - Expect(deps.ui.FailedWithUsage).To(BeTrue()) - }) - - It("passes requirements", func() { - Expect(runCurlWithInputs(deps, []string{"/foo"})).To(BeTrue()) - }) - - It("makes a get request given an endpoint", func() { - deps.curlRepo.ResponseHeader = "Content-Size:1024" - deps.curlRepo.ResponseBody = "response for get" - runCurlWithInputs(deps, []string{"/foo"}) - - Expect(deps.curlRepo.Method).To(Equal("GET")) - Expect(deps.curlRepo.Path).To(Equal("/foo")) - Expect(deps.ui.Outputs).To(ContainSubstrings([]string{"response for get"})) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings( - []string{"FAILED"}, - []string{"Content-Size:1024"}, - )) - }) - - Context("when the --output flag is provided", func() { - It("saves the body of the response to the given filepath if it exists", func() { - fileutils.TempFile("poor-mans-pipe", func(tempFile *os.File, err error) { - Expect(err).ToNot(HaveOccurred()) - deps.curlRepo.ResponseBody = "hai" - - runCurlWithInputs(deps, []string{"--output", tempFile.Name(), "/foo"}) - contents, err := ioutil.ReadAll(tempFile) - Expect(err).ToNot(HaveOccurred()) - Expect(string(contents)).To(Equal("hai")) - }) - }) - - It("saves the body of the response to the given filepath if it doesn't exists", func() { - fileutils.TempDir("poor-mans-dir", func(tmpDir string, err error) { - Expect(err).ToNot(HaveOccurred()) - deps.curlRepo.ResponseBody = "hai" - - filePath := filepath.Join(tmpDir, "subdir1", "banana.txt") - runCurlWithInputs(deps, []string{"--output", filePath, "/foo"}) - - file, err := os.Open(filePath) - Expect(err).ToNot(HaveOccurred()) - - contents, err := ioutil.ReadAll(file) - Expect(err).ToNot(HaveOccurred()) - Expect(string(contents)).To(Equal("hai")) - }) - }) - }) - - It("makes a post request given -X", func() { - runCurlWithInputs(deps, []string{"-X", "post", "/foo"}) - - Expect(deps.curlRepo.Method).To(Equal("post")) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("sends headers given -H", func() { - runCurlWithInputs(deps, []string{"-H", "Content-Type:cat", "/foo"}) - - Expect(deps.curlRepo.Header).To(Equal("Content-Type:cat")) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("sends multiple headers given multiple -H flags", func() { - runCurlWithInputs(deps, []string{"-H", "Content-Type:cat", "-H", "Content-Length:12", "/foo"}) - - Expect(deps.curlRepo.Header).To(Equal("Content-Type:cat\nContent-Length:12")) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("prints out the response headers given -i", func() { - deps.curlRepo.ResponseHeader = "Content-Size:1024" - deps.curlRepo.ResponseBody = "response for get" - runCurlWithInputs(deps, []string{"-i", "/foo"}) - - Expect(deps.ui.Outputs).To(ContainSubstrings( - []string{"Content-Size:1024"}, - []string{"response for get"}, - )) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("sets the request body given -d", func() { - runCurlWithInputs(deps, []string{"-d", "body content to upload", "/foo"}) - - Expect(deps.curlRepo.Body).To(Equal("body content to upload")) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - - It("prints verbose output given the -v flag", func() { - output := bytes.NewBuffer(make([]byte, 1024)) - trace.SetStdout(output) - - runCurlWithInputs(deps, []string{"-v", "/foo"}) - trace.Logger.Print("logging enabled") - - Expect([]string{output.String()}).To(ContainSubstrings([]string{"logging enabled"})) - }) - - It("prints a failure message when the response is not success", func() { - deps.curlRepo.Error = errors.New("ooops") - runCurlWithInputs(deps, []string{"/foo"}) - - Expect(deps.ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"ooops"}, - )) - }) - - Context("Whent the content type is JSON", func() { - BeforeEach(func() { - deps.curlRepo.ResponseHeader = "Content-Type: application/json;charset=utf-8" - deps.curlRepo.ResponseBody = `{"total_results":0,"total_pages":1,"prev_url":null,"next_url":null,"resources":[]}` - }) - - It("pretty-prints the response body", func() { - runCurlWithInputs(deps, []string{"/ugly-printed-json-endpoint"}) - - Expect(deps.ui.Outputs).To(ContainSubstrings( - []string{"{"}, - []string{" \"total_results", "0"}, - []string{" \"total_pages", "1"}, - []string{" \"prev_url", "null"}, - []string{" \"next_url", "null"}, - []string{" \"resources", "[]"}, - []string{"}"}, - )) - }) - - Context("But the body is not JSON", func() { - BeforeEach(func() { - deps.curlRepo.ResponseBody = "FAIL: crumpets need MOAR butterz" - }) - - It("regular-prints the response body", func() { - runCurlWithInputs(deps, []string{"/whateverz"}) - - Expect(deps.ui.Outputs).To(Equal([]string{"FAIL: crumpets need MOAR butterz"})) - }) - }) - }) - }) -}) - -type curlDependencies struct { - ui *testterm.FakeUI - config core_config.Reader - requirementsFactory *testreq.FakeReqFactory - curlRepo *testapi.FakeCurlRepository -} - -func newCurlDependencies() (deps curlDependencies) { - deps.ui = &testterm.FakeUI{} - deps.config = testconfig.NewRepository() - deps.requirementsFactory = &testreq.FakeReqFactory{} - deps.curlRepo = &testapi.FakeCurlRepository{} - return -} - -func runCurlWithInputs(deps curlDependencies, args []string) bool { - cmd := NewCurl(deps.ui, deps.config, deps.curlRepo) - return testcmd.RunCommand(cmd, args, deps.requirementsFactory) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_domain.go deleted file mode 100644 index 06144a8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_domain.go +++ /dev/null @@ -1,70 +0,0 @@ -package domain - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateDomain struct { - ui terminal.UI - config core_config.Reader - domainRepo api.DomainRepository - orgReq requirements.OrganizationRequirement -} - -func NewCreateDomain(ui terminal.UI, config core_config.Reader, domainRepo api.DomainRepository) (cmd *CreateDomain) { - cmd = new(CreateDomain) - cmd.ui = ui - cmd.config = config - cmd.domainRepo = domainRepo - return -} - -func (cmd *CreateDomain) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-domain", - Description: T("Create a domain in an org for later use"), - Usage: T("CF_NAME create-domain ORG DOMAIN"), - } -} - -func (cmd *CreateDomain) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[0]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[0]) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - return -} - -func (cmd *CreateDomain) Run(c *cli.Context) { - domainName := c.Args()[1] - owningOrg := cmd.orgReq.GetOrganization() - - cmd.ui.Say(T("Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "DomainName": terminal.EntityNameColor(domainName), - "OrgName": terminal.EntityNameColor(owningOrg.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - _, apiErr := cmd.domainRepo.Create(domainName, owningOrg.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_domain_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_domain_test.go deleted file mode 100644 index a5cc8ab..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_domain_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package domain_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/commands/domain" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create domain command", func() { - - var ( - requirementsFactory *testreq.FakeReqFactory - ui *testterm.FakeUI - domainRepo *testapi.FakeDomainRepository - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - domainRepo = &testapi.FakeDomainRepository{} - configRepo = testconfig.NewRepositoryWithAccessToken(core_config.TokenInfo{Username: "my-user"}) - }) - - runCommand := func(args ...string) bool { - ui = new(testterm.FakeUI) - cmd := domain.NewCreateDomain(ui, configRepo, domainRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails with usage", func() { - runCommand("") - Expect(ui.FailedWithUsage).To(BeTrue()) - - runCommand("org1") - Expect(ui.FailedWithUsage).To(BeTrue()) - - runCommand("org1", "example.com") - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - - Context("checks login", func() { - It("passes when logged in", func() { - Expect(runCommand("my-org", "example.com")).To(BeTrue()) - Expect(requirementsFactory.OrganizationName).To(Equal("my-org")) - }) - - It("fails when not logged in", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - - Expect(runCommand("my-org", "example.com")).To(BeFalse()) - }) - }) - - It("creates a domain", func() { - org := models.Organization{} - org.Name = "myOrg" - org.Guid = "myOrg-guid" - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, Organization: org} - runCommand("myOrg", "example.com") - - Expect(domainRepo.CreateDomainName).To(Equal("example.com")) - Expect(domainRepo.CreateDomainOwningOrgGuid).To(Equal("myOrg-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating domain", "example.com", "myOrg", "my-user"}, - []string{"OK"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_shared_domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_shared_domain.go deleted file mode 100644 index 8392a76..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_shared_domain.go +++ /dev/null @@ -1,62 +0,0 @@ -package domain - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateSharedDomain struct { - ui terminal.UI - config core_config.Reader - domainRepo api.DomainRepository - orgReq requirements.OrganizationRequirement -} - -func NewCreateSharedDomain(ui terminal.UI, config core_config.Reader, domainRepo api.DomainRepository) (cmd *CreateSharedDomain) { - cmd = new(CreateSharedDomain) - cmd.ui = ui - cmd.config = config - cmd.domainRepo = domainRepo - return -} - -func (cmd *CreateSharedDomain) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-shared-domain", - Description: T("Create a domain that can be used by all orgs (admin-only)"), - Usage: T("CF_NAME create-shared-domain DOMAIN"), - } -} - -func (cmd *CreateSharedDomain) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *CreateSharedDomain) Run(c *cli.Context) { - domainName := c.Args()[0] - - cmd.ui.Say(T("Creating shared domain {{.DomainName}} as {{.Username}}...", - map[string]interface{}{ - "DomainName": terminal.EntityNameColor(domainName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr := cmd.domainRepo.CreateSharedDomain(domainName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_shared_domain_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_shared_domain_test.go deleted file mode 100644 index a289267..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/create_shared_domain_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package domain_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/domain" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Testing with ginkgo", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - ui *testterm.FakeUI - domainRepo *testapi.FakeDomainRepository - configRepo core_config.ReadWriter - ) - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - domainRepo = &testapi.FakeDomainRepository{} - configRepo = testconfig.NewRepositoryWithAccessToken(core_config.TokenInfo{Username: "my-user"}) - }) - - runCommand := func(args ...string) bool { - ui = new(testterm.FakeUI) - cmd := NewCreateSharedDomain(ui, configRepo, domainRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("TestShareDomainRequirements", func() { - Expect(runCommand("example.com")).To(BeTrue()) - - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - - Expect(runCommand("example.com")).To(BeFalse()) - }) - - It("TestShareDomainFailsWithUsage", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - - runCommand("example.com") - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - - It("TestShareDomain", func() { - runCommand("example.com") - - Expect(domainRepo.CreateSharedDomainName).To(Equal("example.com")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating shared domain", "example.com", "my-user"}, - []string{"OK"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_domain.go deleted file mode 100644 index deb4cd9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_domain.go +++ /dev/null @@ -1,91 +0,0 @@ -package domain - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteDomain struct { - ui terminal.UI - config core_config.Reader - orgReq requirements.TargetedOrgRequirement - domainRepo api.DomainRepository -} - -func NewDeleteDomain(ui terminal.UI, config core_config.Reader, repo api.DomainRepository) (cmd *DeleteDomain) { - cmd = new(DeleteDomain) - cmd.ui = ui - cmd.config = config - cmd.domainRepo = repo - return -} - -func (cmd *DeleteDomain) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-domain", - Description: T("Delete a domain"), - Usage: T("CF_NAME delete-domain DOMAIN [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteDomain) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - loginReq := requirementsFactory.NewLoginRequirement() - cmd.orgReq = requirementsFactory.NewTargetedOrgRequirement() - - reqs = []requirements.Requirement{ - loginReq, - cmd.orgReq, - } - - return -} - -func (cmd *DeleteDomain) Run(c *cli.Context) { - domainName := c.Args()[0] - domain, apiErr := cmd.domainRepo.FindByNameInOrg(domainName, cmd.orgReq.GetOrganizationFields().Guid) - - switch apiErr.(type) { - case nil: //do nothing - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(apiErr.Error()) - return - default: - cmd.ui.Failed(T("Error finding domain {{.DomainName}}\n{{.ApiErr}}", - map[string]interface{}{"DomainName": domainName, "ApiErr": apiErr.Error()})) - return - } - - if !c.Bool("f") { - if !cmd.ui.ConfirmDelete(T("domain"), domainName) { - return - } - } - - cmd.ui.Say(T("Deleting domain {{.DomainName}} as {{.Username}}...", - map[string]interface{}{ - "DomainName": terminal.EntityNameColor(domainName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr = cmd.domainRepo.Delete(domain.Guid) - if apiErr != nil { - cmd.ui.Failed(T("Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - map[string]interface{}{"DomainName": domainName, "ApiErr": apiErr.Error()})) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_domain_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_domain_test.go deleted file mode 100644 index 34e81ae..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_domain_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package domain_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/domain" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-domain command", func() { - var ( - cmd *DeleteDomain - ui *testterm.FakeUI - configRepo core_config.ReadWriter - domainRepo *testapi.FakeDomainRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{ - Inputs: []string{"yes"}, - } - - domainRepo = &testapi.FakeDomainRepository{} - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedOrgSuccess: true, - } - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd = NewDeleteDomain(ui, configRepo, domainRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("foo.com")).To(BeFalse()) - }) - - It("fails when the an org is not targetted", func() { - requirementsFactory.TargetedOrgSuccess = false - - Expect(runCommand("foo.com")).To(BeFalse()) - }) - }) - - Context("when the domain exists", func() { - BeforeEach(func() { - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{ - Name: "foo.com", - Guid: "foo-guid", - }, - } - }) - - It("deletes domains", func() { - runCommand("foo.com") - - Expect(domainRepo.DeleteDomainGuid).To(Equal("foo-guid")) - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the domain foo.com"})) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com", "my-user"}, - []string{"OK"}, - )) - }) - - Context("when there is an error deleting the domain", func() { - BeforeEach(func() { - domainRepo.DeleteApiResponse = errors.New("failed badly") - }) - - It("show the error the user", func() { - runCommand("foo.com") - - Expect(domainRepo.DeleteDomainGuid).To(Equal("foo-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"FAILED"}, - []string{"foo.com"}, - []string{"failed badly"}, - )) - }) - }) - - Context("when the user does not confirm", func() { - BeforeEach(func() { - ui.Inputs = []string{"no"} - }) - - It("does nothing", func() { - runCommand("foo.com") - - Expect(domainRepo.DeleteDomainGuid).To(Equal("")) - - Expect(ui.Prompts).To(ContainSubstrings([]string{"delete", "foo.com"})) - - Expect(ui.Outputs).To(BeEmpty()) - }) - }) - - Context("when the user provides the -f flag", func() { - BeforeEach(func() { - ui.Inputs = []string{} - }) - - It("skips confirmation", func() { - runCommand("-f", "foo.com") - - Expect(domainRepo.DeleteDomainGuid).To(Equal("foo-guid")) - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"OK"}, - )) - }) - }) - }) - - Context("when a domain with the given name doesn't exist", func() { - BeforeEach(func() { - domainRepo.FindByNameInOrgApiResponse = errors.NewModelNotFoundError("Domain", "foo.com") - }) - - It("fails", func() { - runCommand("foo.com") - - Expect(domainRepo.DeleteDomainGuid).To(Equal("")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"OK"}, - []string{"foo.com", "not found"}, - )) - }) - }) - - Context("when there is an error finding the domain", func() { - BeforeEach(func() { - domainRepo.FindByNameInOrgApiResponse = errors.New("failed badly") - }) - - It("shows the error to the user", func() { - runCommand("foo.com") - - Expect(domainRepo.DeleteDomainGuid).To(Equal("")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"foo.com"}, - []string{"failed badly"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_shared_domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_shared_domain.go deleted file mode 100644 index 7eeefad..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_shared_domain.go +++ /dev/null @@ -1,96 +0,0 @@ -package domain - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteSharedDomain struct { - ui terminal.UI - config core_config.Reader - orgReq requirements.TargetedOrgRequirement - domainRepo api.DomainRepository -} - -func NewDeleteSharedDomain(ui terminal.UI, config core_config.Reader, repo api.DomainRepository) (cmd *DeleteSharedDomain) { - cmd = new(DeleteSharedDomain) - cmd.ui = ui - cmd.config = config - cmd.domainRepo = repo - return -} - -func (cmd *DeleteSharedDomain) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-shared-domain", - Description: T("Delete a shared domain"), - Usage: T("CF_NAME delete-shared-domain DOMAIN [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteSharedDomain) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - loginReq := requirementsFactory.NewLoginRequirement() - cmd.orgReq = requirementsFactory.NewTargetedOrgRequirement() - - reqs = []requirements.Requirement{ - loginReq, - cmd.orgReq, - } - - return -} - -func (cmd *DeleteSharedDomain) Run(c *cli.Context) { - domainName := c.Args()[0] - force := c.Bool("f") - - cmd.ui.Say(T("Deleting domain {{.DomainName}} as {{.Username}}...", - map[string]interface{}{ - "DomainName": terminal.EntityNameColor(domainName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - domain, apiErr := cmd.domainRepo.FindByNameInOrg(domainName, cmd.orgReq.GetOrganizationFields().Guid) - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(apiErr.Error()) - return - default: - cmd.ui.Failed(T("Error finding domain {{.DomainName}}\n{{.ApiErr}}", - map[string]interface{}{ - "DomainName": domainName, - "ApiErr": apiErr.Error()})) - return - } - - if !force { - answer := cmd.ui.Confirm(T("This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", map[string]interface{}{"DomainName": domainName})) - - if !answer { - return - } - } - - apiErr = cmd.domainRepo.DeleteSharedDomain(domain.Guid) - if apiErr != nil { - cmd.ui.Failed(T("Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - map[string]interface{}{"DomainName": domainName, "ApiErr": apiErr.Error()})) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_shared_domain_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_shared_domain_test.go deleted file mode 100644 index 44b8bf2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/delete_shared_domain_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package domain_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/domain" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-shared-domain command", func() { - var ( - ui *testterm.FakeUI - domainRepo *testapi.FakeDomainRepository - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - domainRepo = &testapi.FakeDomainRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewDeleteSharedDomain(ui, configRepo, domainRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails if you are not logged in", func() { - requirementsFactory.TargetedOrgSuccess = true - - Expect(runCommand("foo.com")).To(BeFalse()) - }) - - It("fails if an organiztion is not targeted", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand("foo.com")).To(BeFalse()) - }) - }) - - Context("when logged in and targeted an organiztion", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - domainRepo.FindByNameInOrgDomain = []models.DomainFields{ - models.DomainFields{ - Name: "foo.com", - Guid: "foo-guid", - Shared: true, - }, - } - }) - - Describe("and the command is invoked interactively", func() { - BeforeEach(func() { - ui.Inputs = []string{"y"} - }) - - It("when the domain is not found it tells the user", func() { - domainRepo.FindByNameInOrgApiResponse = errors.NewModelNotFoundError("Domain", "foo.com") - runCommand("foo.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"OK"}, - []string{"foo.com", "not found"}, - )) - }) - - It("fails when the api returns an error", func() { - domainRepo.FindByNameInOrgApiResponse = errors.New("couldn't find the droids you're lookin for") - runCommand("foo.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"FAILED"}, - []string{"foo.com"}, - []string{"couldn't find the droids you're lookin for"}, - )) - }) - - It("fails when deleting the domain encounters an error", func() { - domainRepo.DeleteSharedApiResponse = errors.New("failed badly") - runCommand("foo.com") - - Expect(domainRepo.DeleteSharedDomainGuid).To(Equal("foo-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"FAILED"}, - []string{"foo.com"}, - []string{"failed badly"}, - )) - }) - - It("Prompts a user to delete the shared domain", func() { - runCommand("foo.com") - - Expect(domainRepo.DeleteSharedDomainGuid).To(Equal("foo-guid")) - Expect(ui.Prompts).To(ContainSubstrings([]string{"delete", "domain", "foo.com"})) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"OK"}, - )) - }) - }) - - It("skips confirmation if the force flag is passed", func() { - runCommand("-f", "foo.com") - - Expect(domainRepo.DeleteSharedDomainGuid).To(Equal("foo-guid")) - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting domain", "foo.com"}, - []string{"OK"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domain_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domain_suite_test.go deleted file mode 100644 index 7ae32d6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domain_suite_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package domain_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestDomain(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Domain Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domains.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domains.go deleted file mode 100644 index 5fd192a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domains.go +++ /dev/null @@ -1,92 +0,0 @@ -package domain - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListDomains struct { - ui terminal.UI - config core_config.Reader - orgReq requirements.TargetedOrgRequirement - domainRepo api.DomainRepository -} - -func NewListDomains(ui terminal.UI, config core_config.Reader, domainRepo api.DomainRepository) (cmd *ListDomains) { - cmd = new(ListDomains) - cmd.ui = ui - cmd.config = config - cmd.domainRepo = domainRepo - return -} - -func (cmd *ListDomains) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "domains", - Description: T("List domains in the target org"), - Usage: "CF_NAME domains", - } -} - -func (cmd *ListDomains) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) > 0 { - cmd.ui.FailWithUsage(c) - } - - cmd.orgReq = requirementsFactory.NewTargetedOrgRequirement() - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - return -} - -func (cmd *ListDomains) Run(c *cli.Context) { - org := cmd.orgReq.GetOrganizationFields() - - cmd.ui.Say(T("Getting domains in org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(org.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - domains := cmd.fetchAllDomains(org.Guid) - cmd.printDomainsTable(domains) - - if len(domains) == 0 { - cmd.ui.Say(T("No domains found")) - } -} - -func (cmd *ListDomains) fetchAllDomains(orgGuid string) (domains []models.DomainFields) { - apiErr := cmd.domainRepo.ListDomainsForOrg(orgGuid, func(domain models.DomainFields) bool { - domains = append(domains, domain) - return true - }) - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching domains.\n{{.ApiErr}}", map[string]interface{}{"ApiErr": apiErr.Error()})) - } - return -} - -func (cmd *ListDomains) printDomainsTable(domains []models.DomainFields) { - table := cmd.ui.Table([]string{T("name"), T("status")}) - - for _, domain := range domains { - if domain.Shared { - table.Add(domain.Name, T("shared")) - } - } - - for _, domain := range domains { - if !domain.Shared { - table.Add(domain.Name, T("owned")) - } - } - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domains_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domains_test.go deleted file mode 100644 index cc23155..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/domain/domains_test.go +++ /dev/null @@ -1,122 +0,0 @@ -package domain_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/domain" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("domains command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - domainRepo *testapi.FakeDomainRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - domainRepo = &testapi.FakeDomainRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewListDomains(ui, configRepo, domainRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when an org is not targeted", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand()).To(BeFalse()) - }) - - It("fails when not logged in", func() { - requirementsFactory.TargetedOrgSuccess = true - - Expect(runCommand()).To(BeFalse()) - }) - - It("fails with usage when invoked with any args what so ever ", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - - runCommand("whoops") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in and an org is targeted", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - requirementsFactory.OrganizationFields = models.OrganizationFields{ - Name: "my-org", - Guid: "my-org-guid", - } - }) - - Context("when there is at least one domain", func() { - BeforeEach(func() { - domainRepo.ListDomainsForOrgDomains = []models.DomainFields{ - models.DomainFields{ - Shared: false, - Name: "Private-domain1", - }, - models.DomainFields{ - Shared: true, - Name: "The-shared-domain", - }, - models.DomainFields{ - Shared: false, - Name: "Private-domain2", - }, - } - }) - - It("lists domains", func() { - runCommand() - - Expect(domainRepo.ListDomainsForOrgGuid).To(Equal("my-org-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting domains in org", "my-org", "my-user"}, - []string{"name", "status"}, - []string{"The-shared-domain", "shared"}, - []string{"Private-domain1", "owned"}, - []string{"Private-domain2", "owned"}, - )) - }) - }) - - It("displays a message when no domains are found", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting domains in org", "my-org", "my-user"}, - []string{"No domains found"}, - )) - }) - - It("fails when the domains API returns an error", func() { - domainRepo.ListDomainsForOrgApiResponse = errors.New("borked!") - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting domains in org", "my-org", "my-user"}, - []string{"FAILED"}, - []string{"Failed fetching domains"}, - []string{"borked!"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/environmentvariablegroup_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/environmentvariablegroup_suite_test.go deleted file mode 100644 index f82c0ab..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/environmentvariablegroup_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package environmentvariablegroup_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestEnvironmentvariablegroup(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Environmentvariablegroup Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/running_environment_variable_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/running_environment_variable_group.go deleted file mode 100644 index b1b7115..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/running_environment_variable_group.go +++ /dev/null @@ -1,61 +0,0 @@ -package environmentvariablegroup - -import ( - "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RunningEnvironmentVariableGroup struct { - ui terminal.UI - config core_config.ReadWriter - environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository -} - -func NewRunningEnvironmentVariableGroup(ui terminal.UI, config core_config.ReadWriter, environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository) (cmd RunningEnvironmentVariableGroup) { - cmd.ui = ui - cmd.config = config - cmd.environmentVariableGroupRepo = environmentVariableGroupRepo - return -} - -func (cmd RunningEnvironmentVariableGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "running-environment-variable-group", - Description: T("Retrieve the contents of the running environment variable group"), - ShortName: "revg", - Usage: T("CF_NAME running-environment-variable-group"), - } -} - -func (cmd RunningEnvironmentVariableGroup) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd RunningEnvironmentVariableGroup) Run(c *cli.Context) { - cmd.ui.Say(T("Retrieving the contents of the running environment variable group as {{.Username}}...", map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - runningEnvVars, err := cmd.environmentVariableGroupRepo.ListRunning() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - - table := terminal.NewTable(cmd.ui, []string{T("Variable Name"), T("Assigned Value")}) - for _, envVar := range runningEnvVars { - table.Add(envVar.Name, envVar.Value) - } - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/running_environment_variable_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/running_environment_variable_group_test.go deleted file mode 100644 index 434f6ca..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/running_environment_variable_group_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package environmentvariablegroup_test - -import ( - test_environmentVariableGroups "github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes" - . "github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("running-environment-variable-group command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - environmentVariableGroupRepo *test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - environmentVariableGroupRepo = &test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewRunningEnvironmentVariableGroup(ui, testconfig.NewRepositoryWithDefaults(), environmentVariableGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - environmentVariableGroupRepo.ListRunningReturns( - []models.EnvironmentVariable{ - models.EnvironmentVariable{Name: "abc", Value: "123"}, - models.EnvironmentVariable{Name: "def", Value: "456"}, - }, nil) - }) - - It("Displays the running environment variable group", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Retrieving the contents of the running environment variable group as my-user..."}, - []string{"OK"}, - []string{"Variable Name", "Assigned Value"}, - []string{"abc", "123"}, - []string{"def", "456"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_running_environment_variable_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_running_environment_variable_group.go deleted file mode 100644 index 3f986db..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_running_environment_variable_group.go +++ /dev/null @@ -1,65 +0,0 @@ -package environmentvariablegroup - -import ( - "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - cf_errors "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SetRunningEnvironmentVariableGroup struct { - ui terminal.UI - config core_config.ReadWriter - environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository -} - -func NewSetRunningEnvironmentVariableGroup(ui terminal.UI, config core_config.ReadWriter, environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository) (cmd SetRunningEnvironmentVariableGroup) { - cmd.ui = ui - cmd.config = config - cmd.environmentVariableGroupRepo = environmentVariableGroupRepo - return -} - -func (cmd SetRunningEnvironmentVariableGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-running-environment-variable-group", - Description: T("Pass parameters as JSON to create a running environment variable group"), - ShortName: "srevg", - Usage: T(`CF_NAME set-running-environment-variable-group '{"name":"value","name":"value"}'`), - } -} - -func (cmd SetRunningEnvironmentVariableGroup) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd SetRunningEnvironmentVariableGroup) Run(c *cli.Context) { - cmd.ui.Say(T("Setting the contents of the running environment variable group as {{.Username}}...", map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - err := cmd.environmentVariableGroupRepo.SetRunning(c.Args()[0]) - if err != nil { - suggestionText := "" - - httpError, ok := err.(cf_errors.HttpError) - if ok && httpError.ErrorCode() == cf_errors.PARSE_ERROR { - suggestionText = T(` - -Your JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{"name":"value","name":"value"}'`) - } - cmd.ui.Failed(err.Error() + suggestionText) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_running_environment_variable_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_running_environment_variable_group_test.go deleted file mode 100644 index 2839df2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_running_environment_variable_group_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package environmentvariablegroup_test - -import ( - test_environmentVariableGroups "github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes" - . "github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup" - cf_errors "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("set-running-environment-variable-group command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - environmentVariableGroupRepo *test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - environmentVariableGroupRepo = &test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewSetRunningEnvironmentVariableGroup(ui, testconfig.NewRepositoryWithDefaults(), environmentVariableGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - - It("fails with usage when it does not receive any arguments", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("Sets the running environment variable group", func() { - runCommand(`{"abc":"123", "def": "456"}`) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting the contents of the running environment variable group as my-user..."}, - []string{"OK"}, - )) - Expect(environmentVariableGroupRepo.SetRunningArgsForCall(0)).To(Equal(`{"abc":"123", "def": "456"}`)) - }) - - It("Fails with a reasonable message when invalid JSON is passed", func() { - environmentVariableGroupRepo.SetRunningReturns(cf_errors.NewHttpError(400, cf_errors.PARSE_ERROR, "Request invalid due to parse error")) - runCommand(`{"abc":"123", "invalid : "json"}`) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting the contents of the running environment variable group as my-user..."}, - []string{"FAILED"}, - []string{`Your JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{"name":"value","name":"value"}'`}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_staging_environment_variable_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_staging_environment_variable_group.go deleted file mode 100644 index bb1f2cf..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_staging_environment_variable_group.go +++ /dev/null @@ -1,65 +0,0 @@ -package environmentvariablegroup - -import ( - "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - cf_errors "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SetStagingEnvironmentVariableGroup struct { - ui terminal.UI - config core_config.ReadWriter - environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository -} - -func NewSetStagingEnvironmentVariableGroup(ui terminal.UI, config core_config.ReadWriter, environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository) (cmd SetStagingEnvironmentVariableGroup) { - cmd.ui = ui - cmd.config = config - cmd.environmentVariableGroupRepo = environmentVariableGroupRepo - return -} - -func (cmd SetStagingEnvironmentVariableGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-staging-environment-variable-group", - Description: T("Pass parameters as JSON to create a staging environment variable group"), - ShortName: "ssevg", - Usage: T(`CF_NAME set-staging-environment-variable-group '{"name":"value","name":"value"}'`), - } -} - -func (cmd SetStagingEnvironmentVariableGroup) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd SetStagingEnvironmentVariableGroup) Run(c *cli.Context) { - cmd.ui.Say(T("Setting the contents of the staging environment variable group as {{.Username}}...", map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - err := cmd.environmentVariableGroupRepo.SetStaging(c.Args()[0]) - if err != nil { - suggestionText := "" - - httpError, ok := err.(cf_errors.HttpError) - if ok && httpError.ErrorCode() == cf_errors.PARSE_ERROR { - suggestionText = T(` - -Your JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{"name":"value","name":"value"}'`) - } - cmd.ui.Failed(err.Error() + suggestionText) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_staging_environment_variable_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_staging_environment_variable_group_test.go deleted file mode 100644 index 2ce6ef7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/set_staging_environment_variable_group_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package environmentvariablegroup_test - -import ( - test_environmentVariableGroups "github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes" - . "github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup" - cf_errors "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("set-staging-environment-variable-group command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - environmentVariableGroupRepo *test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - environmentVariableGroupRepo = &test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewSetStagingEnvironmentVariableGroup(ui, testconfig.NewRepositoryWithDefaults(), environmentVariableGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - - It("fails with usage when it does not receive any arguments", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("Sets the staging environment variable group", func() { - runCommand(`{"abc":"123", "def": "456"}`) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting the contents of the staging environment variable group as my-user..."}, - []string{"OK"}, - )) - Expect(environmentVariableGroupRepo.SetStagingArgsForCall(0)).To(Equal(`{"abc":"123", "def": "456"}`)) - }) - - It("Fails with a reasonable message when invalid JSON is passed", func() { - environmentVariableGroupRepo.SetStagingReturns(cf_errors.NewHttpError(400, cf_errors.PARSE_ERROR, "Request invalid due to parse error")) - runCommand(`{"abc":"123", "invalid : "json"}`) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting the contents of the staging environment variable group as my-user..."}, - []string{"FAILED"}, - []string{`Your JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{"name":"value","name":"value"}'`}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/staging_environment_variable_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/staging_environment_variable_group.go deleted file mode 100644 index af0fc4b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/staging_environment_variable_group.go +++ /dev/null @@ -1,61 +0,0 @@ -package environmentvariablegroup - -import ( - "github.com/cloudfoundry/cli/cf/api/environment_variable_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type StagingEnvironmentVariableGroup struct { - ui terminal.UI - config core_config.ReadWriter - environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository -} - -func NewStagingEnvironmentVariableGroup(ui terminal.UI, config core_config.ReadWriter, environmentVariableGroupRepo environment_variable_groups.EnvironmentVariableGroupsRepository) (cmd StagingEnvironmentVariableGroup) { - cmd.ui = ui - cmd.config = config - cmd.environmentVariableGroupRepo = environmentVariableGroupRepo - return -} - -func (cmd StagingEnvironmentVariableGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "staging-environment-variable-group", - Description: T("Retrieve the contents of the staging environment variable group"), - ShortName: "sevg", - Usage: T("CF_NAME staging-environment-variable-group"), - } -} - -func (cmd StagingEnvironmentVariableGroup) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd StagingEnvironmentVariableGroup) Run(c *cli.Context) { - cmd.ui.Say(T("Retrieving the contents of the staging environment variable group as {{.Username}}...", map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - stagingEnvVars, err := cmd.environmentVariableGroupRepo.ListStaging() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - - table := terminal.NewTable(cmd.ui, []string{T("Variable Name"), T("Assigned Value")}) - for _, envVar := range stagingEnvVars { - table.Add(envVar.Name, envVar.Value) - } - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/staging_environment_variable_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/staging_environment_variable_group_test.go deleted file mode 100644 index cdd8e98..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup/staging_environment_variable_group_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package environmentvariablegroup_test - -import ( - test_environmentVariableGroups "github.com/cloudfoundry/cli/cf/api/environment_variable_groups/fakes" - . "github.com/cloudfoundry/cli/cf/commands/environmentvariablegroup" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("staging-environment-variable-group command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - environmentVariableGroupRepo *test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - environmentVariableGroupRepo = &test_environmentVariableGroups.FakeEnvironmentVariableGroupsRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewStagingEnvironmentVariableGroup(ui, testconfig.NewRepositoryWithDefaults(), environmentVariableGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - environmentVariableGroupRepo.ListStagingReturns( - []models.EnvironmentVariable{ - models.EnvironmentVariable{Name: "abc", Value: "123"}, - models.EnvironmentVariable{Name: "def", Value: "456"}, - }, nil) - }) - - It("Displays the staging environment variable group", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Retrieving the contents of the staging environment variable group as my-user..."}, - []string{"OK"}, - []string{"Variable Name", "Assigned Value"}, - []string{"abc", "123"}, - []string{"def", "456"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/disable_feature_flag.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/disable_feature_flag.go deleted file mode 100644 index 8b273c2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/disable_feature_flag.go +++ /dev/null @@ -1,67 +0,0 @@ -package featureflag - -import ( - "github.com/cloudfoundry/cli/cf/api/feature_flags" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DisableFeatureFlag struct { - ui terminal.UI - config core_config.ReadWriter - flagRepo feature_flags.FeatureFlagRepository -} - -func NewDisableFeatureFlag( - ui terminal.UI, - config core_config.ReadWriter, - flagRepo feature_flags.FeatureFlagRepository) (cmd DisableFeatureFlag) { - return DisableFeatureFlag{ - ui: ui, - config: config, - flagRepo: flagRepo, - } -} - -func (cmd DisableFeatureFlag) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "disable-feature-flag", - Description: T("Disable the use of a feature so that users have access to and can use the feature."), - Usage: T("CF_NAME disable-feature-flag FEATURE_NAME"), - } -} - -func (cmd DisableFeatureFlag) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd DisableFeatureFlag) Run(c *cli.Context) { - flag := c.Args()[0] - - cmd.ui.Say(T("Setting status of {{.FeatureFlag}} as {{.Username}}...", map[string]interface{}{ - "FeatureFlag": terminal.EntityNameColor(flag), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr := cmd.flagRepo.Update(flag, false) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Say("") - cmd.ui.Ok() - cmd.ui.Say("") - cmd.ui.Say(T("Feature {{.FeatureFlag}} Disabled.", map[string]interface{}{ - "FeatureFlag": terminal.EntityNameColor(flag)})) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/disable_feature_flag_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/disable_feature_flag_test.go deleted file mode 100644 index b1db57a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/disable_feature_flag_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package featureflag_test - -import ( - "errors" - - fakeflag "github.com/cloudfoundry/cli/cf/api/feature_flags/fakes" - . "github.com/cloudfoundry/cli/cf/commands/featureflag" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("disable-feature-flag command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - flagRepo *fakeflag.FakeFeatureFlagRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - flagRepo = &fakeflag.FakeFeatureFlagRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewDisableFeatureFlag(ui, testconfig.NewRepositoryWithDefaults(), flagRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - - It("fails with usage if a single feature is not specified", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - flagRepo.UpdateReturns(nil) - }) - - It("Sets the flag", func() { - runCommand("user_org_creation") - - flag, set := flagRepo.UpdateArgsForCall(0) - Expect(flag).To(Equal("user_org_creation")) - Expect(set).To(BeFalse()) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting status of user_org_creation as my-user..."}, - []string{"OK"}, - []string{"Feature user_org_creation Disabled."}, - )) - }) - - Context("when an error occurs", func() { - BeforeEach(func() { - flagRepo.UpdateReturns(errors.New("An error occurred.")) - }) - - It("fails with an error", func() { - runCommand("i-dont-exist") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"An error occurred."}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/enable_feature_flag.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/enable_feature_flag.go deleted file mode 100644 index 66d7ed7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/enable_feature_flag.go +++ /dev/null @@ -1,67 +0,0 @@ -package featureflag - -import ( - "github.com/cloudfoundry/cli/cf/api/feature_flags" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type EnableFeatureFlag struct { - ui terminal.UI - config core_config.ReadWriter - flagRepo feature_flags.FeatureFlagRepository -} - -func NewEnableFeatureFlag( - ui terminal.UI, - config core_config.ReadWriter, - flagRepo feature_flags.FeatureFlagRepository) (cmd EnableFeatureFlag) { - return EnableFeatureFlag{ - ui: ui, - config: config, - flagRepo: flagRepo, - } -} - -func (cmd EnableFeatureFlag) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "enable-feature-flag", - Description: T("Enable the use of a feature so that users have access to and can use the feature."), - Usage: T("CF_NAME enable-feature-flag FEATURE_NAME"), - } -} - -func (cmd EnableFeatureFlag) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd EnableFeatureFlag) Run(c *cli.Context) { - flag := c.Args()[0] - - cmd.ui.Say(T("Setting status of {{.FeatureFlag}} as {{.Username}}...", map[string]interface{}{ - "FeatureFlag": terminal.EntityNameColor(flag), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr := cmd.flagRepo.Update(flag, true) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Say("") - cmd.ui.Ok() - cmd.ui.Say("") - cmd.ui.Say(T("Feature {{.FeatureFlag}} Enabled.", map[string]interface{}{ - "FeatureFlag": terminal.EntityNameColor(flag)})) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/enable_feature_flag_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/enable_feature_flag_test.go deleted file mode 100644 index 106e92c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/enable_feature_flag_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package featureflag_test - -import ( - "errors" - - fakeflag "github.com/cloudfoundry/cli/cf/api/feature_flags/fakes" - . "github.com/cloudfoundry/cli/cf/commands/featureflag" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("enable-feature-flag command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - flagRepo *fakeflag.FakeFeatureFlagRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - flagRepo = &fakeflag.FakeFeatureFlagRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewEnableFeatureFlag(ui, testconfig.NewRepositoryWithDefaults(), flagRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - - It("fails with usage if a single feature is not specified", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - flagRepo.UpdateReturns(nil) - }) - - It("Sets the flag", func() { - runCommand("user_org_creation") - - flag, set := flagRepo.UpdateArgsForCall(0) - Expect(flag).To(Equal("user_org_creation")) - Expect(set).To(BeTrue()) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting status of user_org_creation as my-user..."}, - []string{"OK"}, - []string{"Feature user_org_creation Enabled."}, - )) - }) - - Context("when an error occurs", func() { - BeforeEach(func() { - flagRepo.UpdateReturns(errors.New("An error occurred.")) - }) - - It("fails with an error", func() { - runCommand("i-dont-exist") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"An error occurred."}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flag.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flag.go deleted file mode 100644 index f516b4a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flag.go +++ /dev/null @@ -1,78 +0,0 @@ -package featureflag - -import ( - "github.com/cloudfoundry/cli/cf/api/feature_flags" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ShowFeatureFlag struct { - ui terminal.UI - config core_config.ReadWriter - flagRepo feature_flags.FeatureFlagRepository -} - -func NewShowFeatureFlag( - ui terminal.UI, - config core_config.ReadWriter, - flagRepo feature_flags.FeatureFlagRepository) (cmd ShowFeatureFlag) { - return ShowFeatureFlag{ - ui: ui, - config: config, - flagRepo: flagRepo, - } -} - -func (cmd ShowFeatureFlag) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "feature-flag", - Description: T("Retrieve an individual feature flag with status"), - Usage: T("CF_NAME feature-flag FEATURE_NAME"), - } -} - -func (cmd ShowFeatureFlag) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd ShowFeatureFlag) Run(c *cli.Context) { - flagName := c.Args()[0] - - cmd.ui.Say(T("Retrieving status of {{.FeatureFlag}} as {{.Username}}...", map[string]interface{}{ - "FeatureFlag": terminal.EntityNameColor(flagName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - flag, err := cmd.flagRepo.FindByName(flagName) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("Features"), T("State")}) - table.Add(flag.Name, cmd.flagBoolToString(flag.Enabled)) - - table.Print() - return -} - -func (cmd ShowFeatureFlag) flagBoolToString(enabled bool) string { - if enabled { - return "enabled" - } else { - return "disabled" - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flag_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flag_test.go deleted file mode 100644 index 90ae402..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flag_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package featureflag_test - -import ( - "errors" - - fakeflag "github.com/cloudfoundry/cli/cf/api/feature_flags/fakes" - . "github.com/cloudfoundry/cli/cf/commands/featureflag" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("feature-flag command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - flagRepo *fakeflag.FakeFeatureFlagRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - flagRepo = &fakeflag.FakeFeatureFlagRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewShowFeatureFlag(ui, testconfig.NewRepositoryWithDefaults(), flagRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("foo")).ToNot(HavePassedRequirements()) - }) - - It("requires the user to provide a feature flag", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - flag := models.FeatureFlag{ - Name: "route_creation", - Enabled: false, - } - flagRepo.FindByNameReturns(flag, nil) - }) - - It("lists the state of the specified feature flag", func() { - runCommand("route_creation") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Retrieving status of route_creation as my-user..."}, - []string{"Feature", "State"}, - []string{"route_creation", "disabled"}, - )) - }) - - Context("when an error occurs", func() { - BeforeEach(func() { - flagRepo.FindByNameReturns(models.FeatureFlag{}, errors.New("An error occurred.")) - }) - - It("fails with an error", func() { - runCommand("route_creation") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"An error occurred."}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flags.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flags.go deleted file mode 100644 index 8a0b4d6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flags.go +++ /dev/null @@ -1,80 +0,0 @@ -package featureflag - -import ( - "github.com/cloudfoundry/cli/cf/api/feature_flags" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListFeatureFlags struct { - ui terminal.UI - config core_config.ReadWriter - flagRepo feature_flags.FeatureFlagRepository -} - -func NewListFeatureFlags( - ui terminal.UI, - config core_config.ReadWriter, - flagRepo feature_flags.FeatureFlagRepository) (cmd ListFeatureFlags) { - return ListFeatureFlags{ - ui: ui, - config: config, - flagRepo: flagRepo, - } -} - -func (cmd ListFeatureFlags) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "feature-flags", - Description: T("Retrieve list of feature flags with status of each flag-able feature"), - Usage: T("CF_NAME feature-flags"), - } -} - -func (cmd ListFeatureFlags) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs := []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return reqs, nil -} - -func (cmd ListFeatureFlags) Run(c *cli.Context) { - cmd.ui.Say(T("Retrieving status of all flagged features as {{.Username}}...", map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - flags, err := cmd.flagRepo.List() - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("Features"), T("State")}) - - for _, flag := range flags { - table.Add( - flag.Name, - cmd.flagBoolToString(flag.Enabled), - ) - } - - table.Print() - return -} - -func (cmd ListFeatureFlags) flagBoolToString(enabled bool) string { - if enabled { - return "enabled" - } else { - return "disabled" - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flags_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flags_test.go deleted file mode 100644 index ec04d32..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/feature_flags_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package featureflag_test - -import ( - "errors" - - fakeflag "github.com/cloudfoundry/cli/cf/api/feature_flags/fakes" - . "github.com/cloudfoundry/cli/cf/commands/featureflag" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("feature-flags command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - flagRepo *fakeflag.FakeFeatureFlagRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - flagRepo = &fakeflag.FakeFeatureFlagRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewListFeatureFlags(ui, testconfig.NewRepositoryWithDefaults(), flagRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - flags := []models.FeatureFlag{ - models.FeatureFlag{ - Name: "user_org_creation", - Enabled: true, - ErrorMessage: "error", - }, - models.FeatureFlag{ - Name: "private_domain_creation", - Enabled: false, - }, - models.FeatureFlag{ - Name: "app_bits_upload", - Enabled: true, - }, - models.FeatureFlag{ - Name: "app_scaling", - Enabled: true, - }, - models.FeatureFlag{ - Name: "route_creation", - Enabled: false, - }, - } - flagRepo.ListReturns(flags, nil) - }) - - It("lists the state of all feature flags", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Retrieving status of all flagged features as my-user..."}, - []string{"Feature", "State"}, - []string{"user_org_creation", "enabled"}, - []string{"private_domain_creation", "disabled"}, - []string{"app_bits_upload", "enabled"}, - []string{"app_scaling", "enabled"}, - []string{"route_creation", "disabled"}, - )) - }) - - Context("when an error occurs", func() { - BeforeEach(func() { - flagRepo.ListReturns(nil, errors.New("An error occurred.")) - }) - - It("fails with an error", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"An error occurred."}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/featureflag_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/featureflag_suite_test.go deleted file mode 100644 index 8121c29..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/featureflag/featureflag_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package featureflag_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFeatureflag(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "FeatureFlag Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/login.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/login.go deleted file mode 100644 index e9ed0b9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/login.go +++ /dev/null @@ -1,358 +0,0 @@ -package commands - -import ( - "strconv" - - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/utils" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -const maxLoginTries = 3 -const maxChoices = 50 - -type Login struct { - ui terminal.UI - config core_config.ReadWriter - authenticator authentication.AuthenticationRepository - endpointRepo api.EndpointRepository - orgRepo organizations.OrganizationRepository - spaceRepo spaces.SpaceRepository -} - -func NewLogin(ui terminal.UI, - config core_config.ReadWriter, - authenticator authentication.AuthenticationRepository, - endpointRepo api.EndpointRepository, - orgRepo organizations.OrganizationRepository, - spaceRepo spaces.SpaceRepository) (cmd Login) { - return Login{ - ui: ui, - config: config, - authenticator: authenticator, - endpointRepo: endpointRepo, - orgRepo: orgRepo, - spaceRepo: spaceRepo, - } -} - -func (cmd Login) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "login", - ShortName: "l", - Description: T("Log user in"), - Usage: T("CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n") + - terminal.WarningColor(T("WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n")) + T("EXAMPLE:\n") + T(" CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n") + T(" CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n") + T(" CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n") + T(" CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n") + T(" CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("a", T("API endpoint (e.g. https://api.example.com)")), - flag_helpers.NewStringFlag("u", T("Username")), - flag_helpers.NewStringFlag("p", T("Password")), - flag_helpers.NewStringFlag("o", T("Org")), - flag_helpers.NewStringFlag("s", T("Space")), - cli.BoolFlag{Name: "sso", Usage: T("Use a one-time password to login")}, - cli.BoolFlag{Name: "skip-ssl-validation", Usage: T("Please don't")}, - }, - } -} - -func (cmd Login) GetRequirements(_ requirements.Factory, _ *cli.Context) (reqs []requirements.Requirement, err error) { - return -} - -func (cmd Login) Run(c *cli.Context) { - cmd.config.ClearSession() - - endpoint, skipSSL := cmd.decideEndpoint(c) - - Api{ - ui: cmd.ui, - config: cmd.config, - endpointRepo: cmd.endpointRepo, - }.setApiEndpoint(endpoint, skipSSL, cmd.Metadata().Name) - - defer func() { - cmd.ui.Say("") - cmd.ui.ShowConfiguration(cmd.config) - }() - - // We thought we would never need to explicitly branch in this code - // for anything as simple as authentication, but it turns out that our - // assumptions did not match reality. - - // When SAML is enabled (but not configured) then the UAA/Login server - // will always returns password prompts that includes the Passcode field. - // Users can authenticate with: - // EITHER username and password - // OR a one-time passcode - - if c.Bool("sso") { - cmd.authenticateSSO(c) - } else { - cmd.authenticate(c) - } - - orgIsSet := cmd.setOrganization(c) - - if orgIsSet { - cmd.setSpace(c) - } - utils.NotifyUpdateIfNeeded(cmd.ui, cmd.config) -} - -func (cmd Login) decideEndpoint(c *cli.Context) (string, bool) { - endpoint := c.String("a") - skipSSL := c.Bool("skip-ssl-validation") - if endpoint == "" { - endpoint = cmd.config.ApiEndpoint() - skipSSL = cmd.config.IsSSLDisabled() || skipSSL - } - - if endpoint == "" { - endpoint = cmd.ui.Ask(T("API endpoint")) - } else { - cmd.ui.Say(T("API endpoint: {{.Endpoint}}", map[string]interface{}{"Endpoint": terminal.EntityNameColor(endpoint)})) - } - - return endpoint, skipSSL -} - -func (cmd Login) authenticateSSO(c *cli.Context) { - prompts, err := cmd.authenticator.GetLoginPromptsAndSaveUAAServerURL() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - credentials := make(map[string]string) - passcode := prompts["passcode"] - - for i := 0; i < maxLoginTries; i++ { - credentials["passcode"] = cmd.ui.AskForPassword("%s", passcode.DisplayName) - - cmd.ui.Say(T("Authenticating...")) - err = cmd.authenticator.Authenticate(credentials) - - if err == nil { - cmd.ui.Ok() - cmd.ui.Say("") - break - } - - cmd.ui.Say(err.Error()) - } - - if err != nil { - cmd.ui.Failed(T("Unable to authenticate.")) - } -} - -func (cmd Login) authenticate(c *cli.Context) { - usernameFlagValue := c.String("u") - passwordFlagValue := c.String("p") - - prompts, err := cmd.authenticator.GetLoginPromptsAndSaveUAAServerURL() - if err != nil { - cmd.ui.Failed(err.Error()) - } - passwordKeys := []string{} - credentials := make(map[string]string) - - if value, ok := prompts["username"]; ok { - if prompts["username"].Type == core_config.AuthPromptTypeText && usernameFlagValue != "" { - credentials["username"] = usernameFlagValue - } else { - credentials["username"] = cmd.ui.Ask("%s", value.DisplayName) - } - } - - for key, prompt := range prompts { - if prompt.Type == core_config.AuthPromptTypePassword { - if key == "passcode" { - continue - } - - passwordKeys = append(passwordKeys, key) - } else if key == "username" { - continue - } else { - credentials[key] = cmd.ui.Ask("%s", prompt.DisplayName) - } - } - - for i := 0; i < maxLoginTries; i++ { - for _, key := range passwordKeys { - if key == "password" && passwordFlagValue != "" { - credentials[key] = passwordFlagValue - passwordFlagValue = "" - } else { - credentials[key] = cmd.ui.AskForPassword("%s", prompts[key].DisplayName) - } - } - - cmd.ui.Say(T("Authenticating...")) - err = cmd.authenticator.Authenticate(credentials) - - if err == nil { - cmd.ui.Ok() - cmd.ui.Say("") - break - } - - cmd.ui.Say(err.Error()) - } - - if err != nil { - cmd.ui.Failed(T("Unable to authenticate.")) - } -} - -func (cmd Login) setOrganization(c *cli.Context) (isOrgSet bool) { - orgName := c.String("o") - - if orgName == "" { - availableOrgs := []models.Organization{} - orgs, apiErr := cmd.orgRepo.ListOrgs() - if apiErr != nil { - cmd.ui.Failed(T("Error finding available orgs\n{{.ApiErr}}", - map[string]interface{}{"ApiErr": apiErr.Error()})) - } - for _, org := range orgs { - if len(availableOrgs) < maxChoices { - availableOrgs = append(availableOrgs, org) - } - } - - if len(availableOrgs) == 0 { - return false - } else if len(availableOrgs) == 1 { - cmd.targetOrganization(availableOrgs[0]) - return true - } else { - orgName = cmd.promptForOrgName(availableOrgs) - if orgName == "" { - cmd.ui.Say("") - return false - } - } - } - - org, err := cmd.orgRepo.FindByName(orgName) - if err != nil { - cmd.ui.Failed(T("Error finding org {{.OrgName}}\n{{.Err}}", - map[string]interface{}{"OrgName": terminal.EntityNameColor(orgName), "Err": err.Error()})) - } - - cmd.targetOrganization(org) - return true -} - -func (cmd Login) promptForOrgName(orgs []models.Organization) string { - orgNames := []string{} - for _, org := range orgs { - orgNames = append(orgNames, org.Name) - } - - return cmd.promptForName(orgNames, T("Select an org (or press enter to skip):"), "Org") -} - -func (cmd Login) targetOrganization(org models.Organization) { - cmd.config.SetOrganizationFields(org.OrganizationFields) - cmd.ui.Say(T("Targeted org {{.OrgName}}\n", - map[string]interface{}{"OrgName": terminal.EntityNameColor(org.Name)})) -} - -func (cmd Login) setSpace(c *cli.Context) { - spaceName := c.String("s") - - if spaceName == "" { - var availableSpaces []models.Space - err := cmd.spaceRepo.ListSpaces(func(space models.Space) bool { - availableSpaces = append(availableSpaces, space) - return (len(availableSpaces) < maxChoices) - }) - if err != nil { - cmd.ui.Failed(T("Error finding available spaces\n{{.Err}}", - map[string]interface{}{"Err": err.Error()})) - } - - if len(availableSpaces) == 0 { - return - } else if len(availableSpaces) == 1 { - cmd.targetSpace(availableSpaces[0]) - return - } else { - spaceName = cmd.promptForSpaceName(availableSpaces) - if spaceName == "" { - cmd.ui.Say("") - return - } - } - } - - space, err := cmd.spaceRepo.FindByName(spaceName) - if err != nil { - cmd.ui.Failed(T("Error finding space {{.SpaceName}}\n{{.Err}}", - map[string]interface{}{"SpaceName": terminal.EntityNameColor(spaceName), "Err": err.Error()})) - } - - cmd.targetSpace(space) -} - -func (cmd Login) promptForSpaceName(spaces []models.Space) string { - spaceNames := []string{} - for _, space := range spaces { - spaceNames = append(spaceNames, space.Name) - } - - return cmd.promptForName(spaceNames, T("Select a space (or press enter to skip):"), "Space") -} - -func (cmd Login) targetSpace(space models.Space) { - cmd.config.SetSpaceFields(space.SpaceFields) - cmd.ui.Say(T("Targeted space {{.SpaceName}}\n", - map[string]interface{}{"SpaceName": terminal.EntityNameColor(space.Name)})) -} - -func (cmd Login) promptForName(names []string, listPrompt, itemPrompt string) string { - nameIndex := 0 - var nameString string - for nameIndex < 1 || nameIndex > len(names) { - var err error - - // list header - cmd.ui.Say(listPrompt) - - // only display list if it is shorter than maxChoices - if len(names) < maxChoices { - for i, name := range names { - cmd.ui.Say("%d. %s", i+1, name) - } - } else { - cmd.ui.Say(T("There are too many options to display, please type in the name.")) - } - - nameString = cmd.ui.Ask("%s", itemPrompt) - if nameString == "" { - return "" - } - - nameIndex, err = strconv.Atoi(nameString) - - if err != nil { - nameIndex = 1 - return nameString - } - } - - return names[nameIndex-1] -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/login_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/login_test.go deleted file mode 100644 index 2d80634..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/login_test.go +++ /dev/null @@ -1,752 +0,0 @@ -package commands_test - -import ( - "strconv" - - "github.com/cloudfoundry/cli/cf" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - fake_organizations "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("Login Command", func() { - var ( - Flags []string - Config core_config.ReadWriter - ui *testterm.FakeUI - authRepo *testapi.FakeAuthenticationRepository - endpointRepo *testapi.FakeEndpointRepo - orgRepo *fake_organizations.FakeOrganizationRepository - spaceRepo *testapi.FakeSpaceRepository - - org models.Organization - ) - - BeforeEach(func() { - Flags = []string{} - Config = testconfig.NewRepository() - ui = &testterm.FakeUI{} - authRepo = &testapi.FakeAuthenticationRepository{ - AccessToken: "my_access_token", - RefreshToken: "my_refresh_token", - Config: Config, - } - endpointRepo = &testapi.FakeEndpointRepo{} - - org = models.Organization{} - org.Name = "my-new-org" - org.Guid = "my-new-org-guid" - - orgRepo = &fake_organizations.FakeOrganizationRepository{} - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - - space := models.Space{} - space.Guid = "my-space-guid" - space.Name = "my-space" - - spaceRepo = &testapi.FakeSpaceRepository{ - Spaces: []models.Space{space}, - } - - authRepo.GetLoginPromptsReturns.Prompts = map[string]core_config.AuthPrompt{ - "username": core_config.AuthPrompt{ - DisplayName: "Username", - Type: core_config.AuthPromptTypeText, - }, - "password": core_config.AuthPrompt{ - DisplayName: "Password", - Type: core_config.AuthPromptTypePassword, - }, - } - }) - - Context("interactive usage", func() { - Describe("when there are a small number of organizations and spaces", func() { - var org2 models.Organization - var space2 models.Space - - BeforeEach(func() { - org1 := models.Organization{} - org1.Guid = "some-org-guid" - org1.Name = "some-org" - - org2 = models.Organization{} - org2.Guid = "my-new-org-guid" - org2.Name = "my-new-org" - - space1 := models.Space{} - space1.Guid = "my-space-guid" - space1.Name = "my-space" - - space2 = models.Space{} - space2.Guid = "some-space-guid" - space2.Name = "some-space" - - orgRepo.ListOrgsReturns([]models.Organization{org1, org2}, nil) - spaceRepo.Spaces = []models.Space{space1, space2} - }) - - It("lets the user select an org and space by number", func() { - orgRepo.FindByNameReturns(org2, nil) - OUT_OF_RANGE_CHOICE := "3" - ui.Inputs = []string{"api.example.com", "user@example.com", "password", OUT_OF_RANGE_CHOICE, "2", OUT_OF_RANGE_CHOICE, "1"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Select an org"}, - []string{"1. some-org"}, - []string{"2. my-new-org"}, - []string{"Select a space"}, - []string{"1. my-space"}, - []string{"2. some-space"}, - )) - - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("my-space-guid")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("api.example.com")) - - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-new-org")) - Expect(spaceRepo.FindByNameName).To(Equal("my-space")) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("lets the user select an org and space by name", func() { - ui.Inputs = []string{"api.example.com", "user@example.com", "password", "my-new-org", "my-space"} - orgRepo.FindByNameReturns(org2, nil) - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Select an org"}, - []string{"1. some-org"}, - []string{"2. my-new-org"}, - []string{"Select a space"}, - []string{"1. my-space"}, - []string{"2. some-space"}, - )) - - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("my-space-guid")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("api.example.com")) - - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-new-org")) - Expect(spaceRepo.FindByNameName).To(Equal("my-space")) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("lets the user specify an org and space using flags", func() { - Flags = []string{"-a", "api.example.com", "-u", "user@example.com", "-p", "password", "-o", "my-new-org", "-s", "my-space"} - - orgRepo.FindByNameReturns(org2, nil) - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("my-space-guid")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("api.example.com")) - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "username": "user@example.com", - "password": "password", - }, - })) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("doesn't ask the user for the API url if they have it in their config", func() { - orgRepo.FindByNameReturns(org, nil) - Config.SetApiEndpoint("http://api.example.com") - - Flags = []string{"-o", "my-new-org", "-s", "my-space"} - ui.Inputs = []string{"user@example.com", "password"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(Config.ApiEndpoint()).To(Equal("http://api.example.com")) - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("my-space-guid")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("http://api.example.com")) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - }) - Describe("when the CLI version is below the minimum required", func() { - BeforeEach(func() { - Config.SetMinCliVersion("5.0.0") - Config.SetMinRecommendedCliVersion("5.5.0") - }) - - It("prompts users to upgrade if CLI version < min cli version requirement", func() { - ui.Inputs = []string{"http://api.example.com", "user@example.com", "password"} - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - cf.Version = "4.5.0" - - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"To upgrade your CLI"}, - []string{"5.0.0"}, - )) - }) - }) - - Describe("when there are too many orgs to show", func() { - BeforeEach(func() { - organizations := []models.Organization{} - for i := 0; i < 60; i++ { - id := strconv.Itoa(i) - org := models.Organization{} - org.Guid = "my-org-guid-" + id - org.Name = "my-org-" + id - organizations = append(organizations, org) - } - orgRepo.ListOrgsReturns(organizations, nil) - orgRepo.FindByNameReturns(organizations[1], nil) - - space1 := models.Space{} - space1.Guid = "my-space-guid" - space1.Name = "my-space" - - space2 := models.Space{} - space2.Guid = "some-space-guid" - space2.Name = "some-space" - - spaceRepo.Spaces = []models.Space{space1, space2} - }) - - It("doesn't display a list of orgs (the user must type the name)", func() { - ui.Inputs = []string{"api.example.com", "user@example.com", "password", "my-org-1", "my-space"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"my-org-2"})) - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-org-1")) - Expect(Config.OrganizationFields().Guid).To(Equal("my-org-guid-1")) - }) - }) - - Describe("when there is only a single org and space", func() { - It("does not ask the user to select an org/space", func() { - ui.Inputs = []string{"http://api.example.com", "user@example.com", "password"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("my-space-guid")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("http://api.example.com")) - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "username": "user@example.com", - "password": "password", - }, - })) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - }) - - Describe("where there are no available orgs", func() { - BeforeEach(func() { - orgRepo.ListOrgsReturns([]models.Organization{}, nil) - spaceRepo.Spaces = []models.Space{} - }) - - It("does not as the user to select an org", func() { - ui.Inputs = []string{"http://api.example.com", "user@example.com", "password"} - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(Config.OrganizationFields().Guid).To(Equal("")) - Expect(Config.SpaceFields().Guid).To(Equal("")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("http://api.example.com")) - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "username": "user@example.com", - "password": "password", - }, - })) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - }) - - Describe("when there is only a single org and no spaces", func() { - BeforeEach(func() { - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - spaceRepo.Spaces = []models.Space{} - }) - - It("does not ask the user to select a space", func() { - ui.Inputs = []string{"http://api.example.com", "user@example.com", "password"} - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("")) - Expect(Config.AccessToken()).To(Equal("my_access_token")) - Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) - - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("http://api.example.com")) - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "username": "user@example.com", - "password": "password", - }, - })) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - }) - - Describe("login prompts", func() { - BeforeEach(func() { - authRepo.GetLoginPromptsReturns.Prompts = map[string]core_config.AuthPrompt{ - "account_number": core_config.AuthPrompt{ - DisplayName: "Account Number", - Type: core_config.AuthPromptTypeText, - }, - "username": core_config.AuthPrompt{ - DisplayName: "Username", - Type: core_config.AuthPromptTypeText, - }, - "passcode": core_config.AuthPrompt{ - DisplayName: "It's a passcode, what you want it to be???", - Type: core_config.AuthPromptTypePassword, - }, - "password": core_config.AuthPrompt{ - DisplayName: "Your Password", - Type: core_config.AuthPromptTypePassword, - }, - } - }) - - Context("when the user does not provide the --sso flag", func() { - It("prompts the user for 'password' prompt and any text type prompt", func() { - ui.Inputs = []string{"api.example.com", "the-username", "the-account-number", "the-password"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"API endpoint"}, - []string{"Account Number"}, - []string{"Username"}, - )) - Expect(ui.PasswordPrompts).To(ContainSubstrings([]string{"Your Password"})) - Expect(ui.PasswordPrompts).ToNot(ContainSubstrings( - []string{"passcode"}, - )) - - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "account_number": "the-account-number", - "username": "the-username", - "password": "the-password", - }, - })) - }) - }) - - Context("when the user does provide the --sso flag", func() { - It("only prompts the user for the passcode type prompts", func() { - Flags = []string{"--sso", "-a", "api.example.com"} - ui.Inputs = []string{"the-one-time-code"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.PasswordPrompts).To(ContainSubstrings([]string{"passcode"})) - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "passcode": "the-one-time-code", - }, - })) - }) - }) - - It("takes the password from the -p flag", func() { - Flags = []string{"-p", "the-password"} - ui.Inputs = []string{"api.example.com", "the-username", "the-account-number", "the-pin"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(ui.PasswordPrompts).ToNot(ContainSubstrings([]string{"Your Password"})) - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "account_number": "the-account-number", - "username": "the-username", - "password": "the-password", - }, - })) - }) - - It("tries 3 times for the password-type prompts", func() { - authRepo.AuthError = true - ui.Inputs = []string{"api.example.com", "the-username", "the-account-number", - "the-password-1", "the-password-2", "the-password-3"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "username": "the-username", - "account_number": "the-account-number", - "password": "the-password-1", - }, - { - "username": "the-username", - "account_number": "the-account-number", - "password": "the-password-2", - }, - { - "username": "the-username", - "account_number": "the-account-number", - "password": "the-password-3", - }, - })) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - - It("prompts user for password again if password given on the cmd line fails", func() { - authRepo.AuthError = true - - Flags = []string{"-p", "the-password-1"} - - ui.Inputs = []string{"api.example.com", "the-username", "the-account-number", - "the-password-2", "the-password-3"} - - l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - testcmd.RunCommand(l, Flags, nil) - - Expect(authRepo.AuthenticateArgs.Credentials).To(Equal([]map[string]string{ - { - "account_number": "the-account-number", - "username": "the-username", - "password": "the-password-1", - }, - { - "account_number": "the-account-number", - "username": "the-username", - "password": "the-password-2", - }, - { - "account_number": "the-account-number", - "username": "the-username", - "password": "the-password-3", - }, - })) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - }) - - Describe("updates to the config", func() { - var l Login - - BeforeEach(func() { - Config.SetApiEndpoint("api.the-old-endpoint.com") - Config.SetAccessToken("the-old-access-token") - Config.SetRefreshToken("the-old-refresh-token") - l = NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - }) - - JustBeforeEach(func() { - testcmd.RunCommand(l, Flags, nil) - }) - - var ItShowsTheTarget = func() { - It("shows the target", func() { - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - } - - var ItDoesntShowTheTarget = func() { - It("does not show the target info", func() { - Expect(ui.ShowConfigurationCalled).To(BeFalse()) - }) - } - - var ItFails = func() { - It("fails", func() { - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - } - - var ItSucceeds = func() { - It("runs successfully", func() { - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - Expect(ui.Outputs).To(ContainSubstrings([]string{"OK"})) - }) - } - - Describe("when the user is setting an API", func() { - BeforeEach(func() { - l = NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) - Flags = []string{"-a", "https://api.the-server.com", "-u", "the-user-name", "-p", "the-password"} - }) - - Describe("when the --skip-ssl-validation flag is provided", func() { - BeforeEach(func() { - Flags = append(Flags, "--skip-ssl-validation") - }) - - Describe("setting api endpoint is successful", func() { - BeforeEach(func() { - Config.SetSSLDisabled(false) - }) - - ItSucceeds() - ItShowsTheTarget() - - It("stores the API endpoint and the skip-ssl flag", func() { - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("https://api.the-server.com")) - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - }) - - Describe("setting api endpoint failed", func() { - BeforeEach(func() { - Config.SetSSLDisabled(true) - endpointRepo.UpdateEndpointError = errors.New("API endpoint not found") - }) - - ItFails() - ItDoesntShowTheTarget() - - It("clears the entire config", func() { - Expect(Config.ApiEndpoint()).To(BeEmpty()) - Expect(Config.IsSSLDisabled()).To(BeFalse()) - Expect(Config.AccessToken()).To(BeEmpty()) - Expect(Config.RefreshToken()).To(BeEmpty()) - Expect(Config.OrganizationFields().Guid).To(BeEmpty()) - Expect(Config.SpaceFields().Guid).To(BeEmpty()) - }) - }) - }) - - Describe("when the --skip-ssl-validation flag is not provided", func() { - Describe("setting api endpoint is successful", func() { - BeforeEach(func() { - Config.SetSSLDisabled(true) - }) - - ItSucceeds() - ItShowsTheTarget() - - It("updates the API endpoint and enables SSL validation", func() { - Expect(endpointRepo.UpdateEndpointReceived).To(Equal("https://api.the-server.com")) - Expect(Config.IsSSLDisabled()).To(BeFalse()) - }) - }) - - Describe("setting api endpoint failed", func() { - BeforeEach(func() { - Config.SetSSLDisabled(true) - endpointRepo.UpdateEndpointError = errors.New("API endpoint not found") - }) - - ItFails() - ItDoesntShowTheTarget() - - It("clears the entire config", func() { - Expect(Config.ApiEndpoint()).To(BeEmpty()) - Expect(Config.IsSSLDisabled()).To(BeFalse()) - Expect(Config.AccessToken()).To(BeEmpty()) - Expect(Config.RefreshToken()).To(BeEmpty()) - Expect(Config.OrganizationFields().Guid).To(BeEmpty()) - Expect(Config.SpaceFields().Guid).To(BeEmpty()) - }) - }) - }) - - Describe("when there is an invalid SSL cert", func() { - BeforeEach(func() { - endpointRepo.UpdateEndpointError = errors.NewInvalidSSLCert("https://bobs-burgers.com", "SELF SIGNED SADNESS") - ui.Inputs = []string{"bobs-burgers.com"} - }) - - It("fails and suggests the user skip SSL validation", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"SSL Cert", "https://bobs-burgers.com"}, - []string{"TIP", "login", "--skip-ssl-validation"}, - )) - }) - - ItDoesntShowTheTarget() - }) - }) - - Describe("when user is logging in and not setting the api endpoint", func() { - BeforeEach(func() { - Flags = []string{"-u", "the-user-name", "-p", "the-password"} - }) - - Describe("when the --skip-ssl-validation flag is provided", func() { - BeforeEach(func() { - Flags = append(Flags, "--skip-ssl-validation") - Config.SetSSLDisabled(false) - }) - - It("disables SSL validation", func() { - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - }) - - Describe("when the --skip-ssl-validation flag is not provided", func() { - BeforeEach(func() { - Config.SetSSLDisabled(true) - }) - - It("should not change config's SSLDisabled flag", func() { - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - }) - - Describe("and the login fails authenticaton", func() { - BeforeEach(func() { - authRepo.AuthError = true - - Config.SetSSLDisabled(true) - - Flags = []string{"-u", "user@example.com"} - ui.Inputs = []string{"password", "password2", "password3", "password4"} - }) - - ItFails() - ItShowsTheTarget() - - It("does not change the api endpoint or SSL setting in the config", func() { - Expect(Config.ApiEndpoint()).To(Equal("api.the-old-endpoint.com")) - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - - It("clears Access Token, Refresh Token, Org, and Space in the config", func() { - Expect(Config.AccessToken()).To(BeEmpty()) - Expect(Config.RefreshToken()).To(BeEmpty()) - Expect(Config.OrganizationFields().Guid).To(BeEmpty()) - Expect(Config.SpaceFields().Guid).To(BeEmpty()) - }) - }) - }) - - Describe("and the login fails to target an org", func() { - BeforeEach(func() { - Flags = []string{"-u", "user@example.com", "-p", "password", "-o", "nonexistentorg", "-s", "my-space"} - orgRepo.FindByNameReturns(models.Organization{}, errors.New("No org")) - Config.SetSSLDisabled(true) - }) - - ItFails() - ItShowsTheTarget() - - It("does not update the api endpoint or ssl setting in the config", func() { - Expect(Config.ApiEndpoint()).To(Equal("api.the-old-endpoint.com")) - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - - It("clears Org, and Space in the config", func() { - Expect(Config.OrganizationFields().Guid).To(BeEmpty()) - Expect(Config.SpaceFields().Guid).To(BeEmpty()) - }) - }) - - Describe("and the login fails to target a space", func() { - BeforeEach(func() { - Flags = []string{"-u", "user@example.com", "-p", "password", "-o", "my-new-org", "-s", "nonexistent"} - orgRepo.FindByNameReturns(org, nil) - - Config.SetSSLDisabled(true) - }) - - ItFails() - ItShowsTheTarget() - - It("does not update the api endpoint or ssl setting in the config", func() { - Expect(Config.ApiEndpoint()).To(Equal("api.the-old-endpoint.com")) - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - - It("updates the org in the config", func() { - Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) - }) - - It("clears the space in the config", func() { - Expect(Config.SpaceFields().Guid).To(BeEmpty()) - }) - }) - - Describe("and the login succeeds", func() { - BeforeEach(func() { - orgRepo.FindByNameReturns(models.Organization{ - OrganizationFields: models.OrganizationFields{ - Name: "new-org", - Guid: "new-org-guid", - }, - }, nil) - spaceRepo.Spaces[0].Name = "new-space" - spaceRepo.Spaces[0].Guid = "new-space-guid" - authRepo.AccessToken = "new_access_token" - authRepo.RefreshToken = "new_refresh_token" - - Flags = []string{"-u", "user@example.com", "-p", "password", "-o", "new-org", "-s", "new-space"} - - Config.SetApiEndpoint("api.the-old-endpoint.com") - Config.SetSSLDisabled(true) - }) - - ItSucceeds() - ItShowsTheTarget() - - It("does not update the api endpoint or SSL setting", func() { - Expect(Config.ApiEndpoint()).To(Equal("api.the-old-endpoint.com")) - Expect(Config.IsSSLDisabled()).To(BeTrue()) - }) - - It("updates Access Token, Refresh Token, Org, and Space in the config", func() { - Expect(Config.AccessToken()).To(Equal("new_access_token")) - Expect(Config.RefreshToken()).To(Equal("new_refresh_token")) - Expect(Config.OrganizationFields().Guid).To(Equal("new-org-guid")) - Expect(Config.SpaceFields().Guid).To(Equal("new-space-guid")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/logout.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/logout.go deleted file mode 100644 index de7c57e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/logout.go +++ /dev/null @@ -1,40 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Logout struct { - ui terminal.UI - config core_config.ReadWriter -} - -func NewLogout(ui terminal.UI, config core_config.ReadWriter) (cmd Logout) { - cmd.ui = ui - cmd.config = config - return -} - -func (cmd Logout) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "logout", - ShortName: "lo", - Description: T("Log user out"), - Usage: T("CF_NAME logout"), - } -} - -func (cmd Logout) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - return -} - -func (cmd Logout) Run(c *cli.Context) { - cmd.ui.Say(T("Logging out...")) - cmd.config.ClearSession() - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/logout_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/logout_test.go deleted file mode 100644 index 8f42ce0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/logout_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package commands_test - -import ( - "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("logout command", func() { - var config core_config.Repository - BeforeEach(func() { - org := models.OrganizationFields{} - org.Name = "MyOrg" - - space := models.SpaceFields{} - space.Name = "MySpace" - - config = testconfig.NewRepository() - config.SetAccessToken("MyAccessToken") - config.SetOrganizationFields(org) - config.SetSpaceFields(space) - ui := new(testterm.FakeUI) - - l := commands.NewLogout(ui, config) - l.Run(nil) - }) - - It("clears access token from the config", func() { - Expect(config.AccessToken()).To(Equal("")) - }) - - It("clears organization fields from the config", func() { - Expect(config.OrganizationFields()).To(Equal(models.OrganizationFields{})) - }) - - It("clears space fields from the config", func() { - Expect(config.SpaceFields()).To(Equal(models.SpaceFields{})) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/oauth_token.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/oauth_token.go deleted file mode 100644 index 7a4f64f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/oauth_token.go +++ /dev/null @@ -1,53 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type OAuthToken struct { - ui terminal.UI - config core_config.ReadWriter - authRepo authentication.AuthenticationRepository -} - -func NewOAuthToken(ui terminal.UI, config core_config.ReadWriter, authRepo authentication.AuthenticationRepository) *OAuthToken { - return &OAuthToken{ - ui: ui, - config: config, - authRepo: authRepo, - } -} - -func (cmd *OAuthToken) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *OAuthToken) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "oauth-token", - Description: T("Retrieve and display the OAuth token for the current session"), - Usage: T("CF_NAME oauth-token"), - } -} - -func (cmd *OAuthToken) Run(c *cli.Context) { - cmd.ui.Say(T("Getting OAuth token...")) - - token, err := cmd.authRepo.RefreshAuthToken() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - cmd.ui.Say(token) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/oauth_token_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/oauth_token_test.go deleted file mode 100644 index f86925e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/oauth_token_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package commands_test - -import ( - "errors" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("OauthToken", func() { - var ( - ui *testterm.FakeUI - authRepo *testapi.FakeAuthenticationRepository - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - authRepo = &testapi.FakeAuthenticationRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func() bool { - cmd := NewOAuthToken(ui, configRepo, authRepo) - return testcmd.RunCommand(cmd, []string{}, requirementsFactory) - } - - Describe("requirments", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Describe("When logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("fails if oauth refresh fails", func() { - authRepo.RefreshTokenError = errors.New("Could not refresh") - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Could not refresh"}, - )) - }) - - It("returns to the user the oauth token after a refresh", func() { - authRepo.RefreshToken = "1234567890" - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting OAuth token..."}, - []string{"OK"}, - []string{"1234567890"}, - )) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/create_org.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/create_org.go deleted file mode 100644 index 5fff7d3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/create_org.go +++ /dev/null @@ -1,90 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateOrg struct { - ui terminal.UI - config core_config.Reader - orgRepo organizations.OrganizationRepository - quotaRepo quotas.QuotaRepository -} - -func NewCreateOrg(ui terminal.UI, config core_config.Reader, orgRepo organizations.OrganizationRepository, quotaRepo quotas.QuotaRepository) (cmd CreateOrg) { - cmd.ui = ui - cmd.config = config - cmd.orgRepo = orgRepo - cmd.quotaRepo = quotaRepo - return -} - -func (cmd CreateOrg) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-org", - ShortName: "co", - Description: T("Create an org"), - Usage: T("CF_NAME create-org ORG"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("q", T("Quota to assign to the newly created org (excluding this option results in assignment of default quota)")), - }, - } -} - -func (cmd CreateOrg) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd CreateOrg) Run(c *cli.Context) { - name := c.Args()[0] - cmd.ui.Say(T("Creating org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - org := models.Organization{OrganizationFields: models.OrganizationFields{Name: name}} - - quotaName := c.String("q") - if quotaName != "" { - quota, err := cmd.quotaRepo.FindByName(quotaName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - org.QuotaDefinition.Guid = quota.Guid - } - - err := cmd.orgRepo.Create(org) - if err != nil { - if apiErr, ok := err.(errors.HttpError); ok && apiErr.ErrorCode() == errors.ORG_EXISTS { - cmd.ui.Ok() - cmd.ui.Warn(T("Org {{.OrgName}} already exists", - map[string]interface{}{"OrgName": name})) - return - } else { - cmd.ui.Failed(err.Error()) - } - } - - cmd.ui.Ok() - cmd.ui.Say(T("\nTIP: Use '{{.Command}}' to target new org", - map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " target -o " + name)})) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/create_org_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/create_org_test.go deleted file mode 100644 index 84de7fa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/create_org_test.go +++ /dev/null @@ -1,117 +0,0 @@ -package organization_test - -import ( - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - test_quota "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/organization" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-org command", func() { - var ( - config core_config.ReadWriter - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - orgRepo *test_org.FakeOrganizationRepository - quotaRepo *test_quota.FakeQuotaRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - orgRepo = &test_org.FakeOrganizationRepository{} - quotaRepo = &test_quota.FakeQuotaRepository{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewCreateOrg(ui, config, orgRepo, quotaRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not provided exactly one arg", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("my-org")).To(BeFalse()) - }) - }) - - Context("when logged in and provided the name of an org to create", func() { - BeforeEach(func() { - orgRepo.CreateReturns(nil) - requirementsFactory.LoginSuccess = true - }) - - It("creates an org", func() { - runCommand("my-org") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating org", "my-org", "my-user"}, - []string{"OK"}, - )) - Expect(orgRepo.CreateArgsForCall(0).Name).To(Equal("my-org")) - }) - - It("fails and warns the user when the org already exists", func() { - err := errors.NewHttpError(400, errors.ORG_EXISTS, "org already exists") - orgRepo.CreateReturns(err) - runCommand("my-org") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating org", "my-org"}, - []string{"OK"}, - []string{"my-org", "already exists"}, - )) - }) - - Context("when allowing a non-defualt quota", func() { - var ( - quota models.QuotaFields - ) - - BeforeEach(func() { - quota = models.QuotaFields{ - Name: "non-default-quota", - Guid: "non-default-quota-guid", - } - }) - - It("creates an org with a non-default quota", func() { - quotaRepo.FindByNameReturns(quota, nil) - runCommand("-q", "non-default-quota", "my-org") - - Expect(quotaRepo.FindByNameArgsForCall(0)).To(Equal("non-default-quota")) - Expect(orgRepo.CreateArgsForCall(0).QuotaDefinition.Guid).To(Equal("non-default-quota-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating org", "my-org"}, - []string{"OK"}, - )) - }) - - It("fails and warns the user when the quota cannot be found", func() { - quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.New("Could not find quota")) - runCommand("-q", "non-default-quota", "my-org") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating org", "my-org"}, - []string{"Could not find quota"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/delete_org.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/delete_org.go deleted file mode 100644 index 6dc51ad..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/delete_org.go +++ /dev/null @@ -1,91 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteOrg struct { - ui terminal.UI - config core_config.ReadWriter - orgRepo organizations.OrganizationRepository - orgReq requirements.OrganizationRequirement -} - -func NewDeleteOrg(ui terminal.UI, config core_config.ReadWriter, orgRepo organizations.OrganizationRepository) (cmd *DeleteOrg) { - cmd = new(DeleteOrg) - cmd.ui = ui - cmd.config = config - cmd.orgRepo = orgRepo - return -} - -func (cmd *DeleteOrg) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-org", - Description: T("Delete an org"), - Usage: T("CF_NAME delete-org ORG [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteOrg) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return -} - -func (cmd *DeleteOrg) Run(c *cli.Context) { - orgName := c.Args()[0] - - if !c.Bool("f") { - if !cmd.ui.ConfirmDeleteWithAssociations(T("org"), orgName) { - return - } - } - - cmd.ui.Say(T("Deleting org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(orgName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - org, apiErr := cmd.orgRepo.FindByName(orgName) - - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Org {{.OrgName}} does not exist.", - map[string]interface{}{"OrgName": orgName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - apiErr = cmd.orgRepo.Delete(org.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - if org.Guid == cmd.config.OrganizationFields().Guid { - cmd.config.SetOrganizationFields(models.OrganizationFields{}) - cmd.config.SetSpaceFields(models.SpaceFields{}) - } - - cmd.ui.Ok() - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/delete_org_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/delete_org_test.go deleted file mode 100644 index f34a237..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/delete_org_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package organization_test - -import ( - "github.com/cloudfoundry/cli/cf/errors" - - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/organization" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-org command", func() { - var ( - config core_config.ReadWriter - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - orgRepo *test_org.FakeOrganizationRepository - org models.Organization - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{ - Inputs: []string{"y"}, - } - config = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - - org = models.Organization{} - org.Name = "org-to-delete" - org.Guid = "org-to-delete-guid" - orgRepo = &test_org.FakeOrganizationRepository{} - - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - orgRepo.FindByNameReturns(org, nil) - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteOrg(ui, config, orgRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails requirements when not logged in", func() { - Expect(runCommand("some-org-name")).To(BeFalse()) - }) - - It("fails with usage if no arguments are given", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when deleting the currently targeted org", func() { - It("untargets the deleted org", func() { - config.SetOrganizationFields(org.OrganizationFields) - runCommand("org-to-delete") - - Expect(config.OrganizationFields()).To(Equal(models.OrganizationFields{})) - Expect(config.SpaceFields()).To(Equal(models.SpaceFields{})) - }) - }) - - Context("when deleting an org that is not targeted", func() { - BeforeEach(func() { - otherOrgFields := models.OrganizationFields{} - otherOrgFields.Guid = "some-other-org-guid" - otherOrgFields.Name = "some-other-org" - config.SetOrganizationFields(otherOrgFields) - - spaceFields := models.SpaceFields{} - spaceFields.Name = "some-other-space" - config.SetSpaceFields(spaceFields) - }) - - It("deletes the org with the given name", func() { - runCommand("org-to-delete") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the org org-to-delete"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "org-to-delete"}, - []string{"OK"}, - )) - - Expect(orgRepo.DeleteArgsForCall(0)).To(Equal("org-to-delete-guid")) - }) - - It("does not untarget the org and space", func() { - runCommand("org-to-delete") - - Expect(config.OrganizationFields().Name).To(Equal("some-other-org")) - Expect(config.SpaceFields().Name).To(Equal("some-other-space")) - }) - }) - - It("does not prompt when the -f flag is given", func() { - ui.Inputs = []string{} - runCommand("-f", "org-to-delete") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "org-to-delete"}, - []string{"OK"}, - )) - - Expect(orgRepo.DeleteArgsForCall(0)).To(Equal("org-to-delete-guid")) - }) - - It("warns the user when the org does not exist", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.NewModelNotFoundError("Organization", "org org-to-delete does not exist")) - - runCommand("org-to-delete") - - Expect(orgRepo.DeleteCallCount()).To(Equal(0)) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "org-to-delete"}, - []string{"OK"}, - )) - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"org-to-delete", "does not exist."})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/org.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/org.go deleted file mode 100644 index 1f62fb5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/org.go +++ /dev/null @@ -1,154 +0,0 @@ -package organization - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" - "github.com/cloudfoundry/cli/plugin/models" -) - -type ShowOrg struct { - ui terminal.UI - config core_config.Reader - orgReq requirements.OrganizationRequirement - pluginModel *plugin_models.GetOrg_Model - pluginCall bool -} - -func init() { - command_registry.Register(&ShowOrg{}) -} - -func (cmd *ShowOrg) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["guid"] = &cliFlags.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given org's guid. All other output for the org is suppressed.")} - return command_registry.CommandMetadata{ - Name: "org", - Description: T("Show org info"), - Usage: T("CF_NAME org ORG"), - Flags: fs, - } -} - -func (cmd *ShowOrg) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 1 { - cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("org")) - } - - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[0]) - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - - return -} - -func (cmd *ShowOrg) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.pluginCall = pluginCall - cmd.pluginModel = deps.PluginModels.Organization - return cmd -} - -func (cmd *ShowOrg) Execute(c flags.FlagContext) { - org := cmd.orgReq.GetOrganization() - - if c.Bool("guid") { - cmd.ui.Say(org.Guid) - } else { - cmd.ui.Say(T("Getting info for org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(org.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{terminal.EntityNameColor(org.Name) + ":", "", ""}) - - domains := []string{} - for _, domain := range org.Domains { - domains = append(domains, domain.Name) - } - - spaces := []string{} - for _, space := range org.Spaces { - spaces = append(spaces, space.Name) - } - - spaceQuotas := []string{} - for _, spaceQuota := range org.SpaceQuotas { - spaceQuotas = append(spaceQuotas, spaceQuota.Name) - } - - quota := org.QuotaDefinition - orgQuota := fmt.Sprintf(T("{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - map[string]interface{}{ - "QuotaName": quota.Name, - "MemoryLimit": quota.MemoryLimit, - "InstanceMemoryLimit": formatters.InstanceMemoryLimit(quota.InstanceMemoryLimit), - "RoutesLimit": quota.RoutesLimit, - "ServicesLimit": quota.ServicesLimit, - "NonBasicServicesAllowed": formatters.Allowed(quota.NonBasicServicesAllowed)})) - - if cmd.pluginCall { - cmd.populatePluginModel(org, quota) - } else { - table.Add("", T("domains:"), terminal.EntityNameColor(strings.Join(domains, ", "))) - table.Add("", T("quota:"), terminal.EntityNameColor(orgQuota)) - table.Add("", T("spaces:"), terminal.EntityNameColor(strings.Join(spaces, ", "))) - table.Add("", T("space quotas:"), terminal.EntityNameColor(strings.Join(spaceQuotas, ", "))) - - table.Print() - } - } -} - -func (cmd *ShowOrg) populatePluginModel(org models.Organization, quota models.QuotaFields) { - cmd.pluginModel.Name = org.Name - cmd.pluginModel.Guid = org.Guid - cmd.pluginModel.QuotaDefinition.Name = quota.Name - cmd.pluginModel.QuotaDefinition.MemoryLimit = quota.MemoryLimit - cmd.pluginModel.QuotaDefinition.InstanceMemoryLimit = quota.InstanceMemoryLimit - cmd.pluginModel.QuotaDefinition.RoutesLimit = quota.RoutesLimit - cmd.pluginModel.QuotaDefinition.ServicesLimit = quota.ServicesLimit - cmd.pluginModel.QuotaDefinition.NonBasicServicesAllowed = quota.NonBasicServicesAllowed - - for _, domain := range org.Domains { - d := plugin_models.GetOrg_Domains{ - Name: domain.Name, - Guid: domain.Guid, - OwningOrganizationGuid: domain.OwningOrganizationGuid, - Shared: domain.Shared, - } - cmd.pluginModel.Domains = append(cmd.pluginModel.Domains, d) - } - - for _, space := range org.Spaces { - s := plugin_models.GetOrg_Space{ - Name: space.Name, - Guid: space.Guid, - } - cmd.pluginModel.Spaces = append(cmd.pluginModel.Spaces, s) - } - - for _, spaceQuota := range org.SpaceQuotas { - sq := plugin_models.GetOrg_SpaceQuota{ - Name: spaceQuota.Name, - Guid: spaceQuota.Guid, - MemoryLimit: spaceQuota.MemoryLimit, - InstanceMemoryLimit: spaceQuota.InstanceMemoryLimit, - } - cmd.pluginModel.SpaceQuotas = append(cmd.pluginModel.SpaceQuotas, sq) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/org_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/org_test.go deleted file mode 100644 index f70eb37..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/org_test.go +++ /dev/null @@ -1,196 +0,0 @@ -package organization_test - -import ( - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func callShowOrg(args []string, requirementsFactory *testreq.FakeReqFactory) (ui *testterm.FakeUI) { - ui = new(testterm.FakeUI) - - token := core_config.TokenInfo{Username: "my-user"} - - spaceFields := models.SpaceFields{} - spaceFields.Name = "my-space" - - orgFields := models.OrganizationFields{} - orgFields.Name = "my-org" - - configRepo := testconfig.NewRepositoryWithAccessToken(token) - configRepo.SetSpaceFields(spaceFields) - configRepo.SetOrganizationFields(orgFields) - - return -} - -var _ = Describe("org command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.Repository - requirementsFactory *testreq.FakeReqFactory - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("org").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - configRepo = testconfig.NewRepositoryWithDefaults() - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("org") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - Expect(runCommand("whoops")).To(BeFalse()) - }) - - It("fails with usage when not provided exactly one arg", func() { - requirementsFactory.LoginSuccess = true - runCommand("too", "much") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "Requires an argument"}, - )) - }) - }) - - Context("when logged in, and provided the name of an org", func() { - BeforeEach(func() { - developmentSpaceFields := models.SpaceFields{} - developmentSpaceFields.Name = "development" - developmentSpaceFields.Guid = "dev-space-guid-1" - stagingSpaceFields := models.SpaceFields{} - stagingSpaceFields.Name = "staging" - stagingSpaceFields.Guid = "staging-space-guid-1" - domainFields := models.DomainFields{} - domainFields.Name = "cfapps.io" - domainFields.Guid = "1111" - domainFields.OwningOrganizationGuid = "my-org-guid" - domainFields.Shared = true - cfAppDomainFields := models.DomainFields{} - cfAppDomainFields.Name = "cf-app.com" - cfAppDomainFields.Guid = "2222" - cfAppDomainFields.OwningOrganizationGuid = "my-org-guid" - cfAppDomainFields.Shared = false - - org := models.Organization{} - org.Name = "my-org" - org.Guid = "my-org-guid" - org.QuotaDefinition = models.NewQuotaFields("cantina-quota", 512, 256, 2, 5, true) - org.Spaces = []models.SpaceFields{developmentSpaceFields, stagingSpaceFields} - org.Domains = []models.DomainFields{domainFields, cfAppDomainFields} - org.SpaceQuotas = []models.SpaceQuota{ - {Name: "space-quota-1", Guid: "space-quota-1-guid", MemoryLimit: 512, InstanceMemoryLimit: -1}, - {Name: "space-quota-2", Guid: "space-quota-2-guid", MemoryLimit: 256, InstanceMemoryLimit: 128}, - } - - requirementsFactory.LoginSuccess = true - requirementsFactory.Organization = org - }) - - It("shows the org with the given name", func() { - runCommand("my-org") - - Expect(requirementsFactory.OrganizationName).To(Equal("my-org")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting info for org", "my-org", "my-user"}, - []string{"OK"}, - []string{"my-org"}, - []string{"domains:", "cfapps.io", "cf-app.com"}, - []string{"quota: ", "cantina-quota", "512M", "256M instance memory limit", "2 routes", "5 services", "paid services allowed"}, - []string{"spaces:", "development", "staging"}, - []string{"space quotas:", "space-quota-1", "space-quota-2"}, - )) - }) - - Context("when the guid flag is provided", func() { - It("shows only the org guid", func() { - runCommand("--guid", "my-org") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"my-org-guid"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Getting info for org", "my-org", "my-user"}, - )) - }) - }) - - Context("when invoked by a plugin", func() { - var ( - pluginModel plugin_models.GetOrg_Model - ) - BeforeEach(func() { - pluginModel = plugin_models.GetOrg_Model{} - deps.PluginModels.Organization = &pluginModel - updateCommandDependency(true) - }) - - It("populates the plugin model", func() { - runCommand("my-org") - - Ω(pluginModel.Name).To(Equal("my-org")) - Ω(pluginModel.Guid).To(Equal("my-org-guid")) - // quota - Ω(pluginModel.QuotaDefinition.Name).To(Equal("cantina-quota")) - Ω(pluginModel.QuotaDefinition.MemoryLimit).To(Equal(int64(512))) - Ω(pluginModel.QuotaDefinition.InstanceMemoryLimit).To(Equal(int64(256))) - Ω(pluginModel.QuotaDefinition.RoutesLimit).To(Equal(2)) - Ω(pluginModel.QuotaDefinition.ServicesLimit).To(Equal(5)) - Ω(pluginModel.QuotaDefinition.NonBasicServicesAllowed).To(BeTrue()) - - // domains - Ω(pluginModel.Domains).To(HaveLen(2)) - Ω(pluginModel.Domains[0].Name).To(Equal("cfapps.io")) - Ω(pluginModel.Domains[0].Guid).To(Equal("1111")) - Ω(pluginModel.Domains[0].OwningOrganizationGuid).To(Equal("my-org-guid")) - Ω(pluginModel.Domains[0].Shared).To(BeTrue()) - Ω(pluginModel.Domains[1].Name).To(Equal("cf-app.com")) - Ω(pluginModel.Domains[1].Guid).To(Equal("2222")) - Ω(pluginModel.Domains[1].OwningOrganizationGuid).To(Equal("my-org-guid")) - Ω(pluginModel.Domains[1].Shared).To(BeFalse()) - - // spaces - Ω(pluginModel.Spaces).To(HaveLen(2)) - Ω(pluginModel.Spaces[0].Name).To(Equal("development")) - Ω(pluginModel.Spaces[0].Guid).To(Equal("dev-space-guid-1")) - Ω(pluginModel.Spaces[1].Name).To(Equal("staging")) - Ω(pluginModel.Spaces[1].Guid).To(Equal("staging-space-guid-1")) - - // space quotas - Ω(pluginModel.SpaceQuotas).To(HaveLen(2)) - Ω(pluginModel.SpaceQuotas[0].Name).To(Equal("space-quota-1")) - Ω(pluginModel.SpaceQuotas[0].Guid).To(Equal("space-quota-1-guid")) - Ω(pluginModel.SpaceQuotas[0].MemoryLimit).To(Equal(int64(512))) - Ω(pluginModel.SpaceQuotas[0].InstanceMemoryLimit).To(Equal(int64(-1))) - Ω(pluginModel.SpaceQuotas[1].Name).To(Equal("space-quota-2")) - Ω(pluginModel.SpaceQuotas[1].Guid).To(Equal("space-quota-2-guid")) - Ω(pluginModel.SpaceQuotas[1].MemoryLimit).To(Equal(int64(256))) - Ω(pluginModel.SpaceQuotas[1].InstanceMemoryLimit).To(Equal(int64(128))) - }) - - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/organization_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/organization_suite_test.go deleted file mode 100644 index 21b00ae..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/organization_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package organization_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestOrganization(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Organization Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/orgs.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/orgs.go deleted file mode 100644 index 335091c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/orgs.go +++ /dev/null @@ -1,97 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/plugin/models" -) - -type ListOrgs struct { - ui terminal.UI - config core_config.Reader - orgRepo organizations.OrganizationRepository - pluginOrgsModel *[]plugin_models.GetOrgs_Model - pluginCall bool -} - -func init() { - command_registry.Register(&ListOrgs{}) -} - -func (cmd *ListOrgs) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "orgs", - ShortName: "o", - Description: T("List all orgs"), - Usage: "CF_NAME orgs", - } -} - -func (cmd *ListOrgs) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 0 { - cmd.ui.Failed(T("Incorrect Usage. No argument required\n\n") + command_registry.Commands.CommandUsage("orgs")) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *ListOrgs) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.orgRepo = deps.RepoLocator.GetOrganizationRepository() - cmd.pluginOrgsModel = deps.PluginModels.Organizations - cmd.pluginCall = pluginCall - return cmd -} - -func (cmd ListOrgs) Execute(fc flags.FlagContext) { - cmd.ui.Say(T("Getting orgs as {{.Username}}...\n", - map[string]interface{}{"Username": terminal.EntityNameColor(cmd.config.Username())})) - - noOrgs := true - table := cmd.ui.Table([]string{T("name")}) - - orgs, apiErr := cmd.orgRepo.ListOrgs() - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - for _, org := range orgs { - table.Add(org.Name) - noOrgs = false - } - - table.Print() - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching orgs.\n{{.ApiErr}}", - map[string]interface{}{"ApiErr": apiErr})) - return - } - - if noOrgs { - cmd.ui.Say(T("No orgs found")) - } - - if cmd.pluginCall { - cmd.populatePluginModel(orgs) - } - -} - -func (cmd *ListOrgs) populatePluginModel(orgs []models.Organization) { - for _, org := range orgs { - orgModel := plugin_models.GetOrgs_Model{} - orgModel.Name = org.Name - orgModel.Guid = org.Guid - *(cmd.pluginOrgsModel) = append(*(cmd.pluginOrgsModel), orgModel) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/orgs_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/orgs_test.go deleted file mode 100644 index 55691c6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/orgs_test.go +++ /dev/null @@ -1,132 +0,0 @@ -package organization_test - -import ( - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("org command", func() { - var ( - ui *testterm.FakeUI - orgRepo *test_org.FakeOrganizationRepository - configRepo core_config.Repository - requirementsFactory *testreq.FakeReqFactory - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetOrganizationRepository(orgRepo) - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("orgs").SetDependency(deps, pluginCall)) - } - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("orgs") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - orgRepo = &test_org.FakeOrganizationRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand()).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "No argument required"}, - )) - }) - }) - - Describe("when invoked by a plugin", func() { - var ( - pluginOrgsModel []plugin_models.GetOrgs_Model - ) - - BeforeEach(func() { - org1 := models.Organization{} - org1.Name = "Organization-1" - org1.Guid = "org-1-guid" - - org2 := models.Organization{} - org2.Name = "Organization-2" - - org3 := models.Organization{} - org3.Name = "Organization-3" - - orgRepo.ListOrgsReturns([]models.Organization{org1, org2, org3}, nil) - - pluginOrgsModel = []plugin_models.GetOrgs_Model{} - deps.PluginModels.Organizations = &pluginOrgsModel - updateCommandDependency(true) - }) - - It("populates the plugin models upon execution", func() { - runCommand() - Ω(pluginOrgsModel[0].Name).To(Equal("Organization-1")) - Ω(pluginOrgsModel[0].Guid).To(Equal("org-1-guid")) - Ω(pluginOrgsModel[1].Name).To(Equal("Organization-2")) - Ω(pluginOrgsModel[2].Name).To(Equal("Organization-3")) - }) - }) - - Context("when there are orgs to be listed", func() { - BeforeEach(func() { - org1 := models.Organization{} - org1.Name = "Organization-1" - - org2 := models.Organization{} - org2.Name = "Organization-2" - - org3 := models.Organization{} - org3.Name = "Organization-3" - - orgRepo.ListOrgsReturns([]models.Organization{org1, org2, org3}, nil) - }) - - It("lists orgs", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting orgs as my-user"}, - []string{"Organization-1"}, - []string{"Organization-2"}, - []string{"Organization-3"}, - )) - }) - }) - - It("tells the user when no orgs were found", func() { - orgRepo.ListOrgsReturns([]models.Organization{}, nil) - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting orgs as my-user"}, - []string{"No orgs found"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/rename_org.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/rename_org.go deleted file mode 100644 index a8ffa1e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/rename_org.go +++ /dev/null @@ -1,74 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RenameOrg struct { - ui terminal.UI - config core_config.ReadWriter - orgRepo organizations.OrganizationRepository - orgReq requirements.OrganizationRequirement -} - -func NewRenameOrg(ui terminal.UI, config core_config.ReadWriter, orgRepo organizations.OrganizationRepository) (cmd *RenameOrg) { - cmd = new(RenameOrg) - cmd.ui = ui - cmd.config = config - cmd.orgRepo = orgRepo - return -} - -func (cmd *RenameOrg) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "rename-org", - Description: T("Rename an org"), - Usage: T("CF_NAME rename-org ORG NEW_ORG"), - } -} - -func (cmd *RenameOrg) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[0]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[0]) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - return -} - -func (cmd *RenameOrg) Run(c *cli.Context) { - org := cmd.orgReq.GetOrganization() - newName := c.Args()[1] - - cmd.ui.Say(T("Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(org.Name), - "NewName": terminal.EntityNameColor(newName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr := cmd.orgRepo.Rename(org.Guid, newName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - cmd.ui.Ok() - - if org.Guid == cmd.config.OrganizationFields().Guid { - org.Name = newName - cmd.config.SetOrganizationFields(org.OrganizationFields) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/rename_org_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/rename_org_test.go deleted file mode 100644 index d2dec83..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/rename_org_test.go +++ /dev/null @@ -1,90 +0,0 @@ -package organization_test - -import ( - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/commands/organization" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("rename-org command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - orgRepo *test_org.FakeOrganizationRepository - ui *testterm.FakeUI - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{} - orgRepo = &test_org.FakeOrganizationRepository{} - ui = new(testterm.FakeUI) - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - var callRenameOrg = func(args []string) bool { - cmd := organization.NewRenameOrg(ui, configRepo, orgRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails with usage when given less than two args", func() { - callRenameOrg([]string{}) - Expect(ui.FailedWithUsage).To(BeTrue()) - - callRenameOrg([]string{"foo"}) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when not logged in", func() { - Expect(callRenameOrg([]string{"my-org", "my-new-org"})).To(BeFalse()) - }) - - Context("when logged in and given an org to rename", func() { - BeforeEach(func() { - org := models.Organization{} - org.Name = "the-old-org-name" - org.Guid = "the-old-org-guid" - requirementsFactory.Organization = org - requirementsFactory.LoginSuccess = true - }) - - It("passes requirements", func() { - Expect(callRenameOrg([]string{"the-old-org-name", "the-new-org-name"})).To(BeTrue()) - }) - - It("renames an organization", func() { - targetedOrgName := configRepo.OrganizationFields().Name - callRenameOrg([]string{"the-old-org-name", "the-new-org-name"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming org", "the-old-org-name", "the-new-org-name", "my-user"}, - []string{"OK"}, - )) - - guid, name := orgRepo.RenameArgsForCall(0) - - Expect(requirementsFactory.OrganizationName).To(Equal("the-old-org-name")) - Expect(guid).To(Equal("the-old-org-guid")) - Expect(name).To(Equal("the-new-org-name")) - Expect(configRepo.OrganizationFields().Name).To(Equal(targetedOrgName)) - }) - - Describe("when the organization is currently targeted", func() { - It("updates the name of the org in the config", func() { - configRepo.SetOrganizationFields(models.OrganizationFields{ - Guid: "the-old-org-guid", - Name: "the-old-org-name", - }) - callRenameOrg([]string{"the-old-org-name", "the-new-org-name"}) - Expect(configRepo.OrganizationFields().Name).To(Equal("the-new-org-name")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/set_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/set_quota.go deleted file mode 100644 index 9d761f2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/set_quota.go +++ /dev/null @@ -1,77 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SetQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo quotas.QuotaRepository - orgReq requirements.OrganizationRequirement -} - -func NewSetQuota(ui terminal.UI, config core_config.Reader, quotaRepo quotas.QuotaRepository) (cmd *SetQuota) { - cmd = new(SetQuota) - cmd.ui = ui - cmd.config = config - cmd.quotaRepo = quotaRepo - return -} - -func (cmd *SetQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-quota", - Description: T("Assign a quota to an org"), - Usage: T("CF_NAME set-quota ORG QUOTA\n\n") + T("TIP:\n") + T(" View allowable quotas with 'CF_NAME quotas'"), - } -} - -func (cmd *SetQuota) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[0]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[0]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - return -} - -func (cmd *SetQuota) Run(c *cli.Context) { - org := cmd.orgReq.GetOrganization() - quotaName := c.Args()[1] - quota, apiErr := cmd.quotaRepo.FindByName(quotaName) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Say(T("Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(quota.Name), - "OrgName": terminal.EntityNameColor(org.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr = cmd.quotaRepo.AssignQuotaToOrg(org.Guid, quota.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/set_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/set_quota_test.go deleted file mode 100644 index 8ae8a24..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/set_quota_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package organization_test - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/organization" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("set-quota command", func() { - var ( - cmd *SetQuota - ui *testterm.FakeUI - quotaRepo *fakes.FakeQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = new(testterm.FakeUI) - quotaRepo = &fakes.FakeQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - cmd = NewSetQuota(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) - }) - - It("fails with usage when provided too many or two few args", func() { - runCommand("org") - Expect(ui.FailedWithUsage).To(BeTrue()) - - runCommand("org", "quota", "extra-stuff") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when not logged in", func() { - Expect(runCommand("my-org", "my-quota")).To(BeFalse()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("passes requirements when provided two args", func() { - passed := runCommand("my-org", "my-quota") - Expect(passed).To(BeTrue()) - Expect(requirementsFactory.OrganizationName).To(Equal("my-org")) - }) - - It("assigns a quota to an org", func() { - org := models.Organization{} - org.Name = "my-org" - org.Guid = "my-org-guid" - - quota := models.QuotaFields{Name: "my-quota", Guid: "my-quota-guid"} - - quotaRepo.FindByNameReturns(quota, nil) - requirementsFactory.Organization = org - - runCommand("my-org", "my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Setting quota", "my-quota", "my-org", "my-user"}, - []string{"OK"}, - )) - - Expect(quotaRepo.FindByNameArgsForCall(0)).To(Equal("my-quota")) - orgGuid, quotaGuid := quotaRepo.AssignQuotaToOrgArgsForCall(0) - Expect(orgGuid).To(Equal("my-org-guid")) - Expect(quotaGuid).To(Equal("my-quota-guid")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/share_private_domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/share_private_domain.go deleted file mode 100644 index f3dc663..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/share_private_domain.go +++ /dev/null @@ -1,76 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SharePrivateDomain struct { - ui terminal.UI - config core_config.Reader - orgRepo organizations.OrganizationRepository - domainRepo api.DomainRepository - orgReq requirements.OrganizationRequirement -} - -func NewSharePrivateDomain(ui terminal.UI, config core_config.Reader, - orgRepo organizations.OrganizationRepository, domainRepo api.DomainRepository) *SharePrivateDomain { - return &SharePrivateDomain{ - ui: ui, - config: config, - orgRepo: orgRepo, - domainRepo: domainRepo, - } -} - -func (cmd *SharePrivateDomain) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "share-private-domain", - Description: T("Share a private domain with an org"), - Usage: T("CF_NAME share-private-domain ORG DOMAIN"), - } -} - -func (cmd *SharePrivateDomain) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[0]) - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - }, nil -} - -func (cmd *SharePrivateDomain) Run(c *cli.Context) { - org := cmd.orgReq.GetOrganization() - domainName := c.Args()[1] - domain, err := cmd.domainRepo.FindPrivateByName(domainName) - - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Say(T("Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "DomainName": terminal.EntityNameColor(domain.Name), - "OrgName": terminal.EntityNameColor(org.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - err = cmd.orgRepo.SharePrivateDomain(org.Guid, domain.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/unshare_private_domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/unshare_private_domain.go deleted file mode 100644 index 94e2cb7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/organization/unshare_private_domain.go +++ /dev/null @@ -1,76 +0,0 @@ -package organization - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnsharePrivateDomain struct { - ui terminal.UI - config core_config.Reader - orgRepo organizations.OrganizationRepository - domainRepo api.DomainRepository - orgReq requirements.OrganizationRequirement -} - -func NewUnsharePrivateDomain(ui terminal.UI, config core_config.Reader, - orgRepo organizations.OrganizationRepository, domainRepo api.DomainRepository) *UnsharePrivateDomain { - return &UnsharePrivateDomain{ - ui: ui, - config: config, - orgRepo: orgRepo, - domainRepo: domainRepo, - } -} - -func (cmd *UnsharePrivateDomain) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unshare-private-domain", - Description: T("Unshare a private domain with an org"), - Usage: T("CF_NAME unshare-private-domain ORG DOMAIN"), - } -} - -func (cmd *UnsharePrivateDomain) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[0]) - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - }, nil -} - -func (cmd *UnsharePrivateDomain) Run(c *cli.Context) { - org := cmd.orgReq.GetOrganization() - domainName := c.Args()[1] - domain, err := cmd.domainRepo.FindPrivateByName(domainName) - - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Say(T("Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - map[string]interface{}{ - "DomainName": terminal.EntityNameColor(domain.Name), - "OrgName": terminal.EntityNameColor(org.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - err = cmd.orgRepo.UnsharePrivateDomain(org.Guid, domain.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/passwd.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/passwd.go deleted file mode 100644 index 8d3d1a4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/passwd.go +++ /dev/null @@ -1,69 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/api/password" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type Password struct { - ui terminal.UI - pwdRepo password.PasswordRepository - config core_config.ReadWriter -} - -func NewPassword(ui terminal.UI, pwdRepo password.PasswordRepository, config core_config.ReadWriter) (cmd Password) { - cmd.ui = ui - cmd.pwdRepo = pwdRepo - cmd.config = config - return -} - -func (cmd Password) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "passwd", - ShortName: "pw", - Description: T("Change user password"), - Usage: T("CF_NAME passwd"), - } -} - -func (cmd Password) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return -} - -func (cmd Password) Run(c *cli.Context) { - oldPassword := cmd.ui.AskForPassword(T("Current Password")) - newPassword := cmd.ui.AskForPassword(T("New Password")) - verifiedPassword := cmd.ui.AskForPassword(T("Verify Password")) - - if verifiedPassword != newPassword { - cmd.ui.Failed(T("Password verification does not match")) - return - } - - cmd.ui.Say(T("Changing password...")) - apiErr := cmd.pwdRepo.UpdatePassword(oldPassword, newPassword) - - switch typedErr := apiErr.(type) { - case nil: - case errors.HttpError: - if typedErr.StatusCode() == 401 { - cmd.ui.Failed(T("Current password did not match")) - } else { - cmd.ui.Failed(apiErr.Error()) - } - default: - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Ok() - cmd.config.ClearSession() - cmd.ui.Say(T("Please log in again")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/passwd_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/passwd_test.go deleted file mode 100644 index f9c9816..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/passwd_test.go +++ /dev/null @@ -1,124 +0,0 @@ -package commands_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("password command", func() { - var deps passwordDeps - - BeforeEach(func() { - deps = getPasswordDeps() - }) - - It("does not pass requirements if you are not logged in", func() { - deps.ReqFactory.LoginSuccess = false - _, passed := callPassword([]string{}, deps) - Expect(passed).To(BeFalse()) - }) - - Context("when logged in successfully", func() { - BeforeEach(func() { - deps.ReqFactory.LoginSuccess = true - }) - - It("passes requirements", func() { - _, passed := callPassword([]string{"", "", ""}, deps) - Expect(passed).To(BeTrue()) - }) - - It("changes your password when given a new password", func() { - deps.PwdRepo.UpdateUnauthorized = false - ui, _ := callPassword([]string{"old-password", "new-password", "new-password"}, deps) - - Expect(ui.PasswordPrompts).To(ContainSubstrings( - []string{"Current Password"}, - []string{"New Password"}, - []string{"Verify Password"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Changing password..."}, - []string{"OK"}, - []string{"Please log in again"}, - )) - - Expect(deps.PwdRepo.UpdateNewPassword).To(Equal("new-password")) - Expect(deps.PwdRepo.UpdateOldPassword).To(Equal("old-password")) - - Expect(deps.Config.AccessToken()).To(Equal("")) - Expect(deps.Config.OrganizationFields()).To(Equal(models.OrganizationFields{})) - Expect(deps.Config.SpaceFields()).To(Equal(models.SpaceFields{})) - }) - - It("fails when the password verification does not match", func() { - ui, _ := callPassword([]string{"old-password", "new-password", "new-password-with-error"}, deps) - - Expect(ui.PasswordPrompts).To(ContainSubstrings( - []string{"Current Password"}, - []string{"New Password"}, - []string{"Verify Password"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Password verification does not match"}, - )) - - Expect(deps.PwdRepo.UpdateNewPassword).To(Equal("")) - }) - - It("fails when the current password does not match", func() { - deps.PwdRepo.UpdateUnauthorized = true - ui, _ := callPassword([]string{"old-password", "new-password", "new-password"}, deps) - - Expect(ui.PasswordPrompts).To(ContainSubstrings( - []string{"Current Password"}, - []string{"New Password"}, - []string{"Verify Password"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Changing password..."}, - []string{"FAILED"}, - []string{"Current password did not match"}, - )) - - Expect(deps.PwdRepo.UpdateNewPassword).To(Equal("new-password")) - Expect(deps.PwdRepo.UpdateOldPassword).To(Equal("old-password")) - }) - }) -}) - -type passwordDeps struct { - ReqFactory *testreq.FakeReqFactory - PwdRepo *testapi.FakePasswordRepo - Config core_config.ReadWriter -} - -func getPasswordDeps() passwordDeps { - return passwordDeps{ - ReqFactory: &testreq.FakeReqFactory{LoginSuccess: true}, - PwdRepo: &testapi.FakePasswordRepo{UpdateUnauthorized: true}, - Config: testconfig.NewRepository(), - } -} - -func callPassword(inputs []string, deps passwordDeps) (*testterm.FakeUI, bool) { - ui := &testterm.FakeUI{Inputs: inputs} - cmd := NewPassword(ui, deps.PwdRepo, deps.Config) - passed := testcmd.RunCommand(cmd, []string{}, deps.ReqFactory) - - return ui, passed -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/install_plugin.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/install_plugin.go deleted file mode 100644 index 3c8430f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/install_plugin.go +++ /dev/null @@ -1,361 +0,0 @@ -package plugin - -import ( - "errors" - "fmt" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - - "github.com/cloudfoundry/cli/cf/actors/plugin_repo" - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/fileutils" - "github.com/cloudfoundry/cli/plugin" - "github.com/cloudfoundry/cli/plugin/rpc" - "github.com/cloudfoundry/cli/utils" - "github.com/codegangsta/cli" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" -) - -type PluginInstall struct { - ui terminal.UI - config core_config.Reader - pluginConfig plugin_config.PluginConfiguration - coreCmds map[string]command.Command - pluginRepo plugin_repo.PluginRepo - checksum utils.Sha1Checksum - rpcService *rpc.CliRpcService -} - -func NewPluginInstall(ui terminal.UI, config core_config.Reader, pluginConfig plugin_config.PluginConfiguration, coreCmds map[string]command.Command, pluginRepo plugin_repo.PluginRepo, checksum utils.Sha1Checksum, rpcService *rpc.CliRpcService) *PluginInstall { - return &PluginInstall{ - ui: ui, - config: config, - pluginConfig: pluginConfig, - coreCmds: coreCmds, - pluginRepo: pluginRepo, - checksum: checksum, - rpcService: rpcService, - } -} - -func (cmd *PluginInstall) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "install-plugin", - Description: T("Install the plugin defined in command argument"), - Usage: T(`CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME] - -The command will download the plugin binary from repository if '-r' is provided - -EXAMPLE: - cf install-plugin https://github.com/cf-experimental/plugin-foobar - cf install-plugin ~/Downloads/plugin-foobar - cf install-plugin plugin-echo -r My-Repo -`), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("r", T("repo name where the plugin binary is located")), - }, - TotalArgs: 1, - } -} - -func (cmd *PluginInstall) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - return -} - -func (cmd *PluginInstall) Run(c *cli.Context) { - downloader := fileutils.NewDownloader(os.TempDir()) - - removeTmpFile := func() { - err := downloader.RemoveFile() - if err != nil { - cmd.ui.Say(T("Problem removing downloaded binary in temp directory: ") + err.Error()) - } - } - defer removeTmpFile() - - pluginSourceFilepath := c.Args()[0] - - repoName := c.String("r") - - if repoName != "" { - targetPluginName := strings.ToLower(c.Args()[0]) - - cmd.ui.Say(T("Looking up '{{.filePath}}' from repository '{{.repoName}}'", map[string]interface{}{"filePath": pluginSourceFilepath, "repoName": repoName})) - - repoModel, err := cmd.getRepoFromConfig(repoName) - if err != nil { - cmd.ui.Failed(err.Error() + "\n" + T("Tip: use 'add-plugin-repo' to register the repo")) - } - - pluginList, repoAry := cmd.pluginRepo.GetPlugins([]models.PluginRepo{repoModel}) - if len(repoAry) != 0 { - cmd.ui.Failed(T("Error getting plugin metadata from repo: ") + repoAry[0]) - } - - found := false - sha1 := "" - for _, plugin := range findRepoCaseInsensity(pluginList, repoName) { - if strings.ToLower(plugin.Name) == targetPluginName { - found = true - pluginSourceFilepath, sha1 = cmd.downloadBinary(plugin, downloader) - - cmd.checksum.SetFilePath(pluginSourceFilepath) - if !cmd.checksum.CheckSha1(sha1) { - cmd.ui.Failed(T("Downloaded plugin binary's checksum does not match repo metadata")) - } - } - - } - if !found { - cmd.ui.Failed(pluginSourceFilepath + T(" is not available in repo '") + repoName + "'") - } - } else { - if filepath.Dir(pluginSourceFilepath) == "." { - pluginSourceFilepath = "./" + filepath.Clean(pluginSourceFilepath) - } - - cmd.ui.Say("") - if strings.HasPrefix(pluginSourceFilepath, "https://") || strings.HasPrefix(pluginSourceFilepath, "http://") || - strings.HasPrefix(pluginSourceFilepath, "ftp://") || strings.HasPrefix(pluginSourceFilepath, "ftps://") { - cmd.ui.Say(T("Attempting to download binary file from internet address...")) - pluginSourceFilepath = cmd.tryDownloadPluginBinaryfromGivenPath(pluginSourceFilepath, downloader) - } else if !cmd.ensureCandidatePluginBinaryExistsAtGivenPath(pluginSourceFilepath) { - cmd.ui.Failed(T("File not found locally, make sure the file exists at given path {{.filepath}}", map[string]interface{}{"filepath": pluginSourceFilepath})) - } - - } - - cmd.ui.Say(fmt.Sprintf(T("Installing plugin {{.PluginPath}}...", map[string]interface{}{"PluginPath": pluginSourceFilepath}))) - - _, pluginExecutableName := filepath.Split(pluginSourceFilepath) - - pluginDestinationFilepath := filepath.Join(cmd.pluginConfig.GetPluginPath(), pluginExecutableName) - - cmd.ensurePluginBinaryWithSameFileNameDoesNotAlreadyExist(pluginDestinationFilepath, pluginExecutableName) - - pluginMetadata := cmd.runBinaryAndObtainPluginMetadata(pluginSourceFilepath) - - cmd.ensurePluginIsSafeForInstallation(pluginMetadata, pluginDestinationFilepath, pluginSourceFilepath) - - cmd.installPlugin(pluginMetadata, pluginDestinationFilepath, pluginSourceFilepath) - - cmd.ui.Ok() - cmd.ui.Say(fmt.Sprintf(T("Plugin {{.PluginName}} v{{.Version}} successfully installed.", map[string]interface{}{"PluginName": pluginMetadata.Name, "Version": fmt.Sprintf("%d.%d.%d", pluginMetadata.Version.Major, pluginMetadata.Version.Minor, pluginMetadata.Version.Build)}))) -} - -func (cmd *PluginInstall) ensurePluginBinaryWithSameFileNameDoesNotAlreadyExist(pluginDestinationFilepath, pluginExecutableName string) { - _, err := os.Stat(pluginDestinationFilepath) - if err == nil || os.IsExist(err) { - cmd.ui.Failed(fmt.Sprintf(T("The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - map[string]interface{}{ - "PluginExecutableName": pluginExecutableName, - }))) - } else if !os.IsNotExist(err) { - cmd.ui.Failed(fmt.Sprintf(T("Unexpected error has occurred:\n{{.Error}}", map[string]interface{}{"Error": err.Error()}))) - } -} - -func (cmd *PluginInstall) ensurePluginIsSafeForInstallation(pluginMetadata *plugin.PluginMetadata, pluginDestinationFilepath string, pluginSourceFilepath string) { - plugins := cmd.pluginConfig.Plugins() - if pluginMetadata.Name == "" { - cmd.ui.Failed(fmt.Sprintf(T("Unable to obtain plugin name for executable {{.Executable}}", map[string]interface{}{"Executable": pluginSourceFilepath}))) - } - - if _, ok := plugins[pluginMetadata.Name]; ok { - cmd.ui.Failed(fmt.Sprintf(T("Plugin name {{.PluginName}} is already taken", map[string]interface{}{"PluginName": pluginMetadata.Name}))) - } - - if pluginMetadata.Commands == nil { - cmd.ui.Failed(fmt.Sprintf(T("Error getting command list from plugin {{.FilePath}}", map[string]interface{}{"FilePath": pluginSourceFilepath}))) - } - - shortNames := cmd.getShortNames() - - for _, pluginCmd := range pluginMetadata.Commands { - //check for command conflicting core commands/alias - if _, exists := cmd.coreCmds[pluginCmd.Name]; exists || shortNames[pluginCmd.Name] || pluginCmd.Name == "help" { - cmd.ui.Failed(fmt.Sprintf(T("Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - map[string]interface{}{"Command": pluginCmd.Name}))) - } - - //check for alias conflicting core command/alias - if _, exists := cmd.coreCmds[pluginCmd.Alias]; exists || shortNames[pluginCmd.Alias] || pluginCmd.Alias == "help" { - cmd.ui.Failed(fmt.Sprintf(T("Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - map[string]interface{}{"Command": pluginCmd.Alias}))) - } - - for installedPluginName, installedPlugin := range plugins { - for _, installedPluginCmd := range installedPlugin.Commands { - - //check for command conflicting other plugin commands/alias - if installedPluginCmd.Name == pluginCmd.Name || installedPluginCmd.Alias == pluginCmd.Name { - cmd.ui.Failed(fmt.Sprintf(T("Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - map[string]interface{}{"Command": pluginCmd.Name, "PluginName": installedPluginName}))) - } - - //check for alias conflicting other plugin commands/alias - if pluginCmd.Alias != "" && (installedPluginCmd.Name == pluginCmd.Alias || installedPluginCmd.Alias == pluginCmd.Alias) { - cmd.ui.Failed(fmt.Sprintf(T("Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - map[string]interface{}{"Command": pluginCmd.Alias, "PluginName": installedPluginName}))) - } - } - } - } - -} - -func (cmd *PluginInstall) installPlugin(pluginMetadata *plugin.PluginMetadata, pluginDestinationFilepath, pluginSourceFilepath string) { - err := fileutils.CopyFile(pluginDestinationFilepath, pluginSourceFilepath) - if err != nil { - cmd.ui.Failed(fmt.Sprintf(T("Could not copy plugin binary: \n{{.Error}}", map[string]interface{}{"Error": err.Error()}))) - } - - configMetadata := plugin_config.PluginMetadata{ - Location: pluginDestinationFilepath, - Version: pluginMetadata.Version, - Commands: pluginMetadata.Commands, - } - - cmd.pluginConfig.SetPlugin(pluginMetadata.Name, configMetadata) -} - -func (cmd *PluginInstall) runBinaryAndObtainPluginMetadata(pluginSourceFilepath string) *plugin.PluginMetadata { - err := cmd.rpcService.Start() - if err != nil { - cmd.ui.Failed(err.Error()) - } - defer cmd.rpcService.Stop() - - cmd.runPluginBinary(pluginSourceFilepath, cmd.rpcService.Port()) - - return cmd.rpcService.RpcCmd.PluginMetadata -} - -func (cmd *PluginInstall) ensureCandidatePluginBinaryExistsAtGivenPath(pluginSourceFilepath string) bool { - _, err := os.Stat(pluginSourceFilepath) - if err != nil && os.IsNotExist(err) { - return false - } - return true -} - -func (cmd *PluginInstall) tryDownloadPluginBinaryfromGivenPath(pluginSourceFilepath string, downloader fileutils.Downloader) string { - size, filename, err := downloader.DownloadFile(pluginSourceFilepath) - - if err != nil { - cmd.ui.Failed(fmt.Sprintf(T("Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", map[string]interface{}{"Error": err.Error()}))) - } - - cmd.ui.Say(fmt.Sprintf("%d "+T("bytes downloaded")+"...", size)) - - executablePath := filepath.Join(downloader.SavePath(), filename) - os.Chmod(executablePath, 0700) - - return executablePath -} - -func (cmd *PluginInstall) getShortNames() map[string]bool { - shortNames := make(map[string]bool) - for _, singleCmd := range cmd.coreCmds { - metaData := singleCmd.Metadata() - if metaData.ShortName != "" { - shortNames[metaData.ShortName] = true - } - } - return shortNames -} - -func (cmd *PluginInstall) runPluginBinary(location string, servicePort string) { - pluginInvocation := exec.Command(location, servicePort, "SendMetadata") - - err := pluginInvocation.Run() - if err != nil { - cmd.ui.Failed(err.Error()) - } -} - -func (cmd *PluginInstall) getRepoFromConfig(repoName string) (models.PluginRepo, error) { - targetRepo := strings.ToLower(repoName) - list := cmd.config.PluginRepos() - - for i, repo := range list { - if strings.ToLower(repo.Name) == targetRepo { - return list[i], nil - } - } - - return models.PluginRepo{}, errors.New(repoName + T(" not found")) -} - -func (cmd *PluginInstall) downloadBinary(plugin clipr.Plugin, downloader fileutils.Downloader) (string, string) { - arch := runtime.GOARCH - - switch runtime.GOOS { - case "darwin": - return cmd.tryDownloadPluginBinaryfromGivenPath(cmd.getBinaryUrl(plugin, "osx"), downloader), cmd.getBinaryChecksum(plugin, "osx") - case "linux": - if arch == "386" { - return cmd.tryDownloadPluginBinaryfromGivenPath(cmd.getBinaryUrl(plugin, "linux32"), downloader), cmd.getBinaryChecksum(plugin, "linux32") - } else { - return cmd.tryDownloadPluginBinaryfromGivenPath(cmd.getBinaryUrl(plugin, "linux64"), downloader), cmd.getBinaryChecksum(plugin, "linux64") - } - case "windows": - if arch == "386" { - return cmd.tryDownloadPluginBinaryfromGivenPath(cmd.getBinaryUrl(plugin, "win32"), downloader), cmd.getBinaryChecksum(plugin, "win32") - } else { - return cmd.tryDownloadPluginBinaryfromGivenPath(cmd.getBinaryUrl(plugin, "win64"), downloader), cmd.getBinaryChecksum(plugin, "win64") - } - default: - cmd.binaryNotAvailable() - } - return "", "" -} - -func (cmd *PluginInstall) getBinaryUrl(plugin clipr.Plugin, os string) string { - for _, binary := range plugin.Binaries { - if binary.Platform == os { - return binary.Url - } - } - cmd.binaryNotAvailable() - return "" -} - -func (cmd *PluginInstall) getBinaryChecksum(plugin clipr.Plugin, os string) string { - for _, binary := range plugin.Binaries { - if binary.Platform == os { - return binary.Checksum - } - } - return "" -} - -func (cmd *PluginInstall) binaryNotAvailable() { - cmd.ui.Failed(T("Plugin requested has no binary available for your OS: ") + runtime.GOOS + ", " + runtime.GOARCH) -} - -func findRepoCaseInsensity(repoList map[string][]clipr.Plugin, repoName string) []clipr.Plugin { - target := strings.ToLower(repoName) - for k, repo := range repoList { - if strings.ToLower(k) == target { - return repo - } - } - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/install_plugin_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/install_plugin_test.go deleted file mode 100644 index 8e1a069..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/install_plugin_test.go +++ /dev/null @@ -1,574 +0,0 @@ -package plugin_test - -import ( - "fmt" - "io/ioutil" - "net/http" - "net/http/httptest" - "net/rpc" - "os" - "path/filepath" - "runtime" - - "github.com/cloudfoundry/cli/cf/actors/plugin_repo/fakes" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command" - testCommand "github.com/cloudfoundry/cli/cf/command/fakes" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - testPluginConfig "github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin" - cliRpc "github.com/cloudfoundry/cli/plugin/rpc" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - testChecksum "github.com/cloudfoundry/cli/utils/fakes" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - - . "github.com/cloudfoundry/cli/cf/commands/plugin" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Install", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - config core_config.ReadWriter - pluginConfig *testPluginConfig.FakePluginConfiguration - fakePluginRepo *fakes.FakePluginRepo - fakeChecksum *testChecksum.FakeSha1Checksum - - coreCmds map[string]command.Command - pluginFile *os.File - homeDir string - pluginDir string - curDir string - - test_1 string - test_2 string - test_curDir string - test_with_help string - test_with_push string - test_with_push_short_name string - aliasConflicts string - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - pluginConfig = &testPluginConfig.FakePluginConfiguration{} - config = testconfig.NewRepositoryWithDefaults() - fakePluginRepo = &fakes.FakePluginRepo{} - fakeChecksum = &testChecksum.FakeSha1Checksum{} - coreCmds = make(map[string]command.Command) - - dir, err := os.Getwd() - if err != nil { - panic(err) - } - test_1 = filepath.Join(dir, "..", "..", "..", "fixtures", "plugins", "test_1.exe") - test_2 = filepath.Join(dir, "..", "..", "..", "fixtures", "plugins", "test_2.exe") - test_curDir = filepath.Join("test_1.exe") - test_with_help = filepath.Join(dir, "..", "..", "..", "fixtures", "plugins", "test_with_help.exe") - test_with_push = filepath.Join(dir, "..", "..", "..", "fixtures", "plugins", "test_with_push.exe") - test_with_push_short_name = filepath.Join(dir, "..", "..", "..", "fixtures", "plugins", "test_with_push_short_name.exe") - aliasConflicts = filepath.Join(dir, "..", "..", "..", "fixtures", "plugins", "alias_conflicts.exe") - - homeDir, err = ioutil.TempDir(os.TempDir(), "plugins") - Expect(err).ToNot(HaveOccurred()) - - pluginDir = filepath.Join(homeDir, ".cf", "plugins") - pluginConfig.GetPluginPathReturns(pluginDir) - - curDir, err = os.Getwd() - Expect(err).ToNot(HaveOccurred()) - pluginFile, err = ioutil.TempFile("./", "test_plugin") - Expect(err).ToNot(HaveOccurred()) - - if runtime.GOOS != "windows" { - err = os.Chmod(test_1, 0700) - Expect(err).ToNot(HaveOccurred()) - } - }) - - AfterEach(func() { - os.Remove(filepath.Join(curDir, pluginFile.Name())) - os.Remove(homeDir) - }) - - runCommand := func(args ...string) bool { - //reset rpc registration, each service can only be registered once - rpc.DefaultServer = rpc.NewServer() - rpcService, _ := cliRpc.NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - cmd := NewPluginInstall(ui, config, pluginConfig, coreCmds, fakePluginRepo, fakeChecksum, rpcService) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not provided a path to the plugin executable", func() { - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Describe("Locating binary file", func() { - - Describe("install from plugin repository when '-r' provided", func() { - Context("gets metadata of the plugin from repo", func() { - Context("when repo is not found in config", func() { - It("informs user repo is not found", func() { - runCommand("plugin1", "-r", "repo1") - Ω(ui.Outputs).To(ContainSubstrings([]string{"Looking up 'plugin1' from repository 'repo1'"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"repo1 not found"})) - }) - }) - - Context("when repo is found in config", func() { - Context("when repo endpoint returns an error", func() { - It("informs user about the error", func() { - config.SetPluginRepo(models.PluginRepo{Name: "repo1", Url: ""}) - fakePluginRepo.GetPluginsReturns(nil, []string{"repo error1"}) - runCommand("plugin1", "-r", "repo1") - - Ω(ui.Outputs).To(ContainSubstrings([]string{"Error getting plugin metadata from repo"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"repo error1"})) - }) - }) - - Context("when plugin metadata is available and desired plugin is not found", func() { - It("informs user about the error", func() { - config.SetPluginRepo(models.PluginRepo{Name: "repo1", Url: ""}) - fakePluginRepo.GetPluginsReturns(nil, nil) - runCommand("plugin1", "-r", "repo1") - - Ω(ui.Outputs).To(ContainSubstrings([]string{"plugin1 is not available in repo 'repo1'"})) - }) - }) - - It("ignore cases in repo name", func() { - config.SetPluginRepo(models.PluginRepo{Name: "repo1", Url: ""}) - fakePluginRepo.GetPluginsReturns(nil, nil) - runCommand("plugin1", "-r", "REPO1") - - Ω(ui.Outputs).NotTo(ContainSubstrings([]string{"REPO1 not found"})) - }) - }) - }) - - Context("downloads the binary for the machine's OS", func() { - Context("when binary is not available", func() { - It("informs user when binary is not available for OS", func() { - p := clipr.Plugin{ - Name: "plugin1", - } - result := make(map[string][]clipr.Plugin) - result["repo1"] = []clipr.Plugin{p} - - config.SetPluginRepo(models.PluginRepo{Name: "repo1", Url: ""}) - fakePluginRepo.GetPluginsReturns(result, nil) - runCommand("plugin1", "-r", "repo1") - - Ω(ui.Outputs).To(ContainSubstrings([]string{"Plugin requested has no binary available"})) - }) - }) - - Context("when binary is available", func() { - var ( - testServer *httptest.Server - ) - - BeforeEach(func() { - h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "abc") - }) - - testServer = httptest.NewServer(h) - - fakeChecksum.CheckSha1Returns(true) - - p := clipr.Plugin{ - Name: "plugin1", - Binaries: []clipr.Binary{ - clipr.Binary{ - Platform: "osx", - Url: testServer.URL + "/test.exe", - }, - clipr.Binary{ - Platform: "win64", - Url: testServer.URL + "/test.exe", - }, - clipr.Binary{ - Platform: "win32", - Url: testServer.URL + "/test.exe", - }, - clipr.Binary{ - Platform: "linux32", - Url: testServer.URL + "/test.exe", - }, - clipr.Binary{ - Platform: "linux64", - Url: testServer.URL + "/test.exe", - }, - }, - } - result := make(map[string][]clipr.Plugin) - result["repo1"] = []clipr.Plugin{p} - - config.SetPluginRepo(models.PluginRepo{Name: "repo1", Url: ""}) - fakePluginRepo.GetPluginsReturns(result, nil) - }) - - AfterEach(func() { - testServer.Close() - }) - - It("performs sha1 checksum validation on the downloaded binary", func() { - runCommand("plugin1", "-r", "repo1") - Ω(fakeChecksum.CheckSha1CallCount()).To(Equal(1)) - }) - - It("reports error downloaded file's sha1 does not match the sha1 in metadata", func() { - fakeChecksum.CheckSha1Returns(false) - - runCommand("plugin1", "-r", "repo1") - Ω(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"checksum does not match"}, - )) - }) - - It("downloads and installs binary when it is available and checksum matches", func() { - runCommand("plugin1", "-r", "repo1") - - Ω(ui.Outputs).To(ContainSubstrings([]string{"4 bytes downloaded..."})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"Installing plugin"})) - }) - }) - }) - }) - - Describe("install from plugin repository with no '-r' provided", func() { - Context("downloads file from internet if path prefix with 'http','ftp' etc...", func() { - It("will not try locate file locally", func() { - runCommand("http://127.0.0.1/plugin.exe") - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"File not found locally"}, - )) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"download binary file from internet address"}, - )) - }) - - It("informs users when binary is not downloadable from net", func() { - runCommand("http://path/to/not/a/thing.exe") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Download attempt failed"}, - []string{"Unable to install"}, - []string{"FAILED"}, - )) - }) - - It("downloads and installs binary when it is available", func() { - h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "hi") - }) - - testServer := httptest.NewServer(h) - defer testServer.Close() - - runCommand(testServer.URL + "/testfile.exe") - - Ω(ui.Outputs).To(ContainSubstrings([]string{"3 bytes downloaded..."})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"Installing plugin"})) - }) - }) - - Context("tries to locate binary file at local path if path has no internet prefix", func() { - It("installs the plugin from a local file if found", func() { - runCommand("./install_plugin.go") - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"download binary file from internet"}, - )) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Installing plugin", "./install_plugin.go"}, - )) - }) - - It("reports error if local file is not found at given path", func() { - runCommand("./no/file/is/here.exe") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"File not found locally", - "./no/file/is/here.exe", - }, - )) - }) - }) - }) - - }) - - Describe("install failures", func() { - Context("when the plugin contains a 'help' command", func() { - It("fails", func() { - runCommand(test_with_help) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Command `help` in the plugin being installed is a native CF command/alias. Rename the `help` command in the plugin being installed in order to enable its installation and use."}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the plugin's command conflicts with a core command", func() { - It("fails if is shares a command name", func() { - coreCmds["push"] = &testCommand.FakeCommand{} - runCommand(test_with_push) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Command `push` in the plugin being installed is a native CF command/alias. Rename the `push` command in the plugin being installed in order to enable its installation and use."}, - []string{"FAILED"}, - )) - }) - - It("fails if it shares a command short name", func() { - push := &testCommand.FakeCommand{} - push.MetadataReturns(command_metadata.CommandMetadata{ - ShortName: "p", - }) - - coreCmds["push"] = push - runCommand(test_with_push_short_name) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Command `p` in the plugin being installed is a native CF command/alias. Rename the `p` command in the plugin being installed in order to enable its installation and use."}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the plugin's alias conflicts with a core command/alias", func() { - It("fails if is shares a command name", func() { - coreCmds["conflict-alias"] = &testCommand.FakeCommand{} - runCommand(aliasConflicts) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Alias `conflict-alias` in the plugin being installed is a native CF command/alias. Rename the `conflict-alias` command in the plugin being installed in order to enable its installation and use."}, - []string{"FAILED"}, - )) - }) - - It("fails if it shares a command short name", func() { - push := &testCommand.FakeCommand{} - push.MetadataReturns(command_metadata.CommandMetadata{ - ShortName: "conflict-alias", - }) - - coreCmds["push"] = push - runCommand(aliasConflicts) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Alias `conflict-alias` in the plugin being installed is a native CF command/alias. Rename the `conflict-alias` command in the plugin being installed in order to enable its installation and use."}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the plugin's alias conflicts with other installed plugin", func() { - It("fails if it shares a command name", func() { - pluginsMap := make(map[string]plugin_config.PluginMetadata) - pluginsMap["AliasCollision"] = plugin_config.PluginMetadata{ - Location: "location/to/config.exe", - Commands: []plugin.Command{ - { - Name: "conflict-alias", - HelpText: "Hi!", - }, - }, - } - pluginConfig.PluginsReturns(pluginsMap) - - runCommand(aliasConflicts) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Alias `conflict-alias` is a command/alias in plugin 'AliasCollision'. You could try uninstalling plugin 'AliasCollision' and then install this plugin in order to invoke the `conflict-alias` command. However, you should first fully understand the impact of uninstalling the existing 'AliasCollision' plugin."}, - []string{"FAILED"}, - )) - }) - - It("fails if it shares a command alias", func() { - pluginsMap := make(map[string]plugin_config.PluginMetadata) - pluginsMap["AliasCollision"] = plugin_config.PluginMetadata{ - Location: "location/to/alias.exe", - Commands: []plugin.Command{ - { - Name: "non-conflict-cmd", - Alias: "conflict-alias", - HelpText: "Hi!", - }, - }, - } - pluginConfig.PluginsReturns(pluginsMap) - - runCommand(aliasConflicts) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Alias `conflict-alias` is a command/alias in plugin 'AliasCollision'. You could try uninstalling plugin 'AliasCollision' and then install this plugin in order to invoke the `conflict-alias` command. However, you should first fully understand the impact of uninstalling the existing 'AliasCollision' plugin."}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the plugin's command conflicts with other installed plugin", func() { - It("fails if it shares a command name", func() { - pluginsMap := make(map[string]plugin_config.PluginMetadata) - pluginsMap["Test1Collision"] = plugin_config.PluginMetadata{ - Location: "location/to/config.exe", - Commands: []plugin.Command{ - { - Name: "test_1_cmd1", - HelpText: "Hi!", - }, - }, - } - pluginConfig.PluginsReturns(pluginsMap) - - runCommand(test_1) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Command `test_1_cmd1` is a command/alias in plugin 'Test1Collision'. You could try uninstalling plugin 'Test1Collision' and then install this plugin in order to invoke the `test_1_cmd1` command. However, you should first fully understand the impact of uninstalling the existing 'Test1Collision' plugin."}, - []string{"FAILED"}, - )) - }) - - It("fails if it shares a command alias", func() { - pluginsMap := make(map[string]plugin_config.PluginMetadata) - pluginsMap["AliasCollision"] = plugin_config.PluginMetadata{ - Location: "location/to/alias.exe", - Commands: []plugin.Command{ - { - Name: "non-conflict-cmd", - Alias: "conflict-cmd", - HelpText: "Hi!", - }, - }, - } - pluginConfig.PluginsReturns(pluginsMap) - - runCommand(aliasConflicts) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Command `conflict-cmd` is a command/alias in plugin 'AliasCollision'. You could try uninstalling plugin 'AliasCollision' and then install this plugin in order to invoke the `conflict-cmd` command. However, you should first fully understand the impact of uninstalling the existing 'AliasCollision' plugin."}, - []string{"FAILED"}, - )) - }) - }) - - It("if plugin name is already taken", func() { - pluginConfig.PluginsReturns(map[string]plugin_config.PluginMetadata{"Test1": plugin_config.PluginMetadata{}}) - runCommand(test_1) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Plugin name", "Test1", "is already taken"}, - []string{"FAILED"}, - )) - }) - - Context("io", func() { - BeforeEach(func() { - err := os.MkdirAll(pluginDir, 0700) - Expect(err).NotTo(HaveOccurred()) - }) - - It("if a file with the plugin name already exists under ~/.cf/plugin/", func() { - pluginConfig.PluginsReturns(map[string]plugin_config.PluginMetadata{"useless": plugin_config.PluginMetadata{}}) - pluginConfig.GetPluginPathReturns(curDir) - - runCommand(filepath.Join(curDir, pluginFile.Name())) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Installing plugin"}, - []string{"The file", pluginFile.Name(), "already exists"}, - []string{"FAILED"}, - )) - }) - }) - }) - - Describe("install success", func() { - BeforeEach(func() { - err := os.MkdirAll(pluginDir, 0700) - Expect(err).ToNot(HaveOccurred()) - pluginConfig.GetPluginPathReturns(pluginDir) - }) - - It("finds plugin in the current directory without having to specify `./`", func() { - curDir, err := os.Getwd() - Expect(err).ToNot(HaveOccurred()) - - err = os.Chdir("../../../fixtures/plugins") - Expect(err).ToNot(HaveOccurred()) - - runCommand(test_curDir) - _, err = os.Stat(filepath.Join(pluginDir, "test_1.exe")) - Expect(err).ToNot(HaveOccurred()) - - err = os.Chdir(curDir) - Expect(err).ToNot(HaveOccurred()) - }) - - It("copies the plugin into directory /.cf/plugins/PLUGIN_FILE_NAME", func() { - runCommand(test_1) - - _, err := os.Stat(test_1) - Expect(err).ToNot(HaveOccurred()) - _, err = os.Stat(filepath.Join(pluginDir, "test_1.exe")) - Expect(err).ToNot(HaveOccurred()) - }) - - if runtime.GOOS != "windows" { - It("Chmods the plugin so it is executable", func() { - runCommand(test_1) - - fileInfo, err := os.Stat(filepath.Join(pluginDir, "test_1.exe")) - Expect(err).ToNot(HaveOccurred()) - Expect(int(fileInfo.Mode())).To(Equal(0700)) - }) - } - - It("populate the configuration with plugin metadata", func() { - runCommand(test_1) - - pluginName, pluginMetadata := pluginConfig.SetPluginArgsForCall(0) - - Expect(pluginName).To(Equal("Test1")) - Expect(pluginMetadata.Location).To(Equal(filepath.Join(pluginDir, "test_1.exe"))) - Expect(pluginMetadata.Version.Major).To(Equal(1)) - Expect(pluginMetadata.Version.Minor).To(Equal(2)) - Expect(pluginMetadata.Version.Build).To(Equal(4)) - Expect(pluginMetadata.Commands[0].Name).To(Equal("test_1_cmd1")) - Expect(pluginMetadata.Commands[0].HelpText).To(Equal("help text for test_1_cmd1")) - Expect(pluginMetadata.Commands[1].Name).To(Equal("test_1_cmd2")) - Expect(pluginMetadata.Commands[1].HelpText).To(Equal("help text for test_1_cmd2")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Installing plugin", test_1}, - []string{"OK"}, - []string{"Plugin", "Test1", "v1.2.4", "successfully installed"}, - )) - }) - - It("installs multiple plugins with no aliases", func() { - Expect(runCommand(test_1)).To(Equal(true)) - Expect(runCommand(test_2)).To(Equal(true)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugin_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugin_suite_test.go deleted file mode 100644 index 50e8e5c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugin_suite_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package plugin_test - -import ( - "path/filepath" - - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/plugin_builder" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPlugin(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "test_with_help") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "test_with_push") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "test_with_push_short_name") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "test_1") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "test_2") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "empty_plugin") - plugin_builder.BuildTestBinary(filepath.Join("..", "..", "..", "fixtures", "plugins"), "alias_conflicts") - - RunSpecs(t, "Plugin Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugins.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugins.go deleted file mode 100644 index 09f77aa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugins.go +++ /dev/null @@ -1,95 +0,0 @@ -package plugin - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/utils" - "github.com/codegangsta/cli" -) - -type Plugins struct { - ui terminal.UI - config plugin_config.PluginConfiguration -} - -func NewPlugins(ui terminal.UI, config plugin_config.PluginConfiguration) *Plugins { - return &Plugins{ - ui: ui, - config: config, - } -} - -func (cmd *Plugins) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "plugins", - Description: T("list all available plugin commands"), - Usage: T("CF_NAME plugins"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "checksum", Usage: T("Compute and show the sha1 value of the plugin binary file")}, - }, - } -} - -func (cmd *Plugins) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - return -} - -func (cmd *Plugins) Run(c *cli.Context) { - var version string - - cmd.ui.Say(T("Listing Installed Plugins...")) - - plugins := cmd.config.Plugins() - - var table terminal.Table - if c.Bool("checksum") { - cmd.ui.Say(T("Computing sha1 for installed plugins, this may take a while ...")) - table = terminal.NewTable(cmd.ui, []string{T("Plugin Name"), T("Version"), T("Command Name"), "sha1", T("Command Help")}) - } else { - table = terminal.NewTable(cmd.ui, []string{T("Plugin Name"), T("Version"), T("Command Name"), T("Command Help")}) - } - - for pluginName, metadata := range plugins { - if metadata.Version.Major == 0 && metadata.Version.Minor == 0 && metadata.Version.Build == 0 { - version = "N/A" - } else { - version = fmt.Sprintf("%d.%d.%d", metadata.Version.Major, metadata.Version.Minor, metadata.Version.Build) - } - - for _, command := range metadata.Commands { - args := []string{pluginName, version} - - if command.Alias != "" { - args = append(args, command.Name+", "+command.Alias) - } else { - args = append(args, command.Name) - } - - if c.Bool("checksum") { - checksum := utils.NewSha1Checksum(metadata.Location) - sha1, err := checksum.ComputeFileSha1() - if err != nil { - args = append(args, "n/a") - } else { - args = append(args, fmt.Sprintf("%x", sha1)) - } - } - - args = append(args, command.HelpText) - table.Add(args...) - } - } - - cmd.ui.Ok() - cmd.ui.Say("") - - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugins_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugins_test.go deleted file mode 100644 index ac2ad68..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/plugins_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package plugin_test - -import ( - "net/rpc" - - . "github.com/cloudfoundry/cli/cf/commands/plugin" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - testconfig "github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes" - "github.com/cloudfoundry/cli/plugin" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Plugins", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - config *testconfig.FakePluginConfiguration - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - config = &testconfig.FakePluginConfiguration{} - - rpc.DefaultServer = rpc.NewServer() - }) - - runCommand := func(args ...string) bool { - cmd := NewPlugins(ui, config) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("If --checksum flag is provided", func() { - It("computes and prints the sha1 checksum of the binary", func() { - config.PluginsReturns(map[string]plugin_config.PluginMetadata{ - "Test1": plugin_config.PluginMetadata{ - Location: "../../../fixtures/plugins/test_1.go", - Version: plugin.VersionType{Major: 1, Minor: 2, Build: 3}, - Commands: []plugin.Command{ - {Name: "test_1_cmd1", HelpText: "help text for test_1_cmd1"}, - }, - }, - }) - - runCommand("--checksum") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Plugin Name", "Version", "sha1", "Command Help"}, - )) - }) - }) - - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("returns a list of available methods of a plugin", func() { - config.PluginsReturns(map[string]plugin_config.PluginMetadata{ - "Test1": plugin_config.PluginMetadata{ - Location: "path/to/plugin", - Commands: []plugin.Command{ - {Name: "test_1_cmd1", HelpText: "help text for test_1_cmd1"}, - {Name: "test_1_cmd2", HelpText: "help text for test_1_cmd2"}, - }, - }, - }) - - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Listing Installed Plugins..."}, - []string{"OK"}, - []string{"Plugin Name", "Command Name", "Command Help"}, - []string{"Test1", "test_1_cmd1", "help text for test_1_cmd1"}, - []string{"Test1", "test_1_cmd2", "help text for test_1_cmd2"}, - )) - }) - - It("lists the name of the command, it's alias and version", func() { - config.PluginsReturns(map[string]plugin_config.PluginMetadata{ - "Test1": plugin_config.PluginMetadata{ - Location: "path/to/plugin", - Version: plugin.VersionType{Major: 1, Minor: 2, Build: 3}, - Commands: []plugin.Command{ - {Name: "test_1_cmd1", Alias: "test_1_cmd1_alias", HelpText: "help text for test_1_cmd1"}, - {Name: "test_1_cmd2", Alias: "test_1_cmd2_alias", HelpText: "help text for test_1_cmd2"}, - }, - }, - }) - - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Test1", "test_1_cmd1", "1.2.3", ", test_1_cmd1_alias", "help text for test_1_cmd1"}, - []string{"Test1", "test_1_cmd2", "1.2.3", ", test_1_cmd2_alias", "help text for test_1_cmd2"}, - )) - }) - - It("lists 'N/A' as version when plugin does not provide a version", func() { - config.PluginsReturns(map[string]plugin_config.PluginMetadata{ - "Test1": plugin_config.PluginMetadata{ - Location: "path/to/plugin", - Commands: []plugin.Command{ - {Name: "test_1_cmd1", Alias: "test_1_cmd1_alias", HelpText: "help text for test_1_cmd1"}, - }, - }, - }) - - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Test1", "test_1_cmd1", "N/A", ", test_1_cmd1_alias", "help text for test_1_cmd1"}, - )) - }) - - It("does not list the plugin when it provides no available commands", func() { - config.PluginsReturns(map[string]plugin_config.PluginMetadata{ - "EmptyPlugin": plugin_config.PluginMetadata{Location: "../../../fixtures/plugins/empty_plugin.exe"}, - }) - - runCommand() - Expect(ui.Outputs).NotTo(ContainSubstrings( - []string{"EmptyPlugin"}, - )) - }) - - It("list multiple plugins and their associated commands", func() { - config.PluginsReturns(map[string]plugin_config.PluginMetadata{ - "Test1": plugin_config.PluginMetadata{Location: "path/to/plugin1", Commands: []plugin.Command{{Name: "test_1_cmd1", HelpText: "help text for test_1_cmd1"}}}, - "Test2": plugin_config.PluginMetadata{Location: "path/to/plugin2", Commands: []plugin.Command{{Name: "test_2_cmd1", HelpText: "help text for test_2_cmd1"}}}, - }) - - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Test1", "test_1_cmd1", "help text for test_1_cmd1"}, - []string{"Test2", "test_2_cmd1", "help text for test_2_cmd1"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/uninstall_plugin.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/uninstall_plugin.go deleted file mode 100644 index 1f593b4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/uninstall_plugin.go +++ /dev/null @@ -1,91 +0,0 @@ -package plugin - -import ( - "fmt" - "os" - "os/exec" - "time" - - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/plugin/rpc" - "github.com/codegangsta/cli" -) - -type PluginUninstall struct { - ui terminal.UI - config plugin_config.PluginConfiguration - rpcService *rpc.CliRpcService -} - -func NewPluginUninstall(ui terminal.UI, config plugin_config.PluginConfiguration, rpcService *rpc.CliRpcService) *PluginUninstall { - return &PluginUninstall{ - ui: ui, - config: config, - rpcService: rpcService, - } -} - -func (cmd *PluginUninstall) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "uninstall-plugin", - Description: T("Uninstall the plugin defined in command argument"), - Usage: T("CF_NAME uninstall-plugin PLUGIN-NAME"), - } -} - -func (cmd *PluginUninstall) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - return -} - -func (cmd *PluginUninstall) Run(c *cli.Context) { - pluginName := c.Args()[0] - pluginNameMap := map[string]interface{}{"PluginName": pluginName} - - cmd.ui.Say(fmt.Sprintf(T("Uninstalling plugin {{.PluginName}}...", pluginNameMap))) - - plugins := cmd.config.Plugins() - - if _, ok := plugins[pluginName]; !ok { - cmd.ui.Failed(fmt.Sprintf(T("Plugin name {{.PluginName}} does not exist", pluginNameMap))) - } - - pluginMetadata := plugins[pluginName] - - err := cmd.notifyPluginUninstalling(pluginMetadata) - if err != nil { - cmd.ui.Say("Error invoking plugin: " + err.Error() + ". Process to uninstall ...") - } - - time.Sleep(500 * time.Millisecond) //prevent 'process being used' error in Windows - - err = os.Remove(pluginMetadata.Location) - if err != nil { - cmd.ui.Warn("Error removing plugin binary: " + err.Error()) - } - - cmd.config.RemovePlugin(pluginName) - - cmd.ui.Ok() - cmd.ui.Say(fmt.Sprintf(T("Plugin {{.PluginName}} successfully uninstalled.", pluginNameMap))) -} - -func (cmd *PluginUninstall) notifyPluginUninstalling(meta plugin_config.PluginMetadata) error { - err := cmd.rpcService.Start() - if err != nil { - cmd.ui.Failed(err.Error()) - } - defer cmd.rpcService.Stop() - - pluginInvocation := exec.Command(meta.Location, cmd.rpcService.Port(), "CLI-MESSAGE-UNINSTALL") - pluginInvocation.Stdout = os.Stdout - - return pluginInvocation.Run() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/uninstall_plugin_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/uninstall_plugin_test.go deleted file mode 100644 index 9e90b74..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin/uninstall_plugin_test.go +++ /dev/null @@ -1,153 +0,0 @@ -package plugin_test - -import ( - "io/ioutil" - "net/rpc" - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - cliRpc "github.com/cloudfoundry/cli/plugin/rpc" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/plugin" - "github.com/cloudfoundry/cli/fileutils" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Uninstall", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - fakePluginRepoDir string - pluginDir string - pluginConfig *plugin_config.PluginConfig - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - - var err error - fakePluginRepoDir, err = ioutil.TempDir(os.TempDir(), "plugins") - Expect(err).ToNot(HaveOccurred()) - - fixtureDir := filepath.Join("..", "..", "..", "fixtures", "plugins") - - pluginDir = filepath.Join(fakePluginRepoDir, ".cf", "plugins") - err = os.MkdirAll(pluginDir, 0700) - Expect(err).NotTo(HaveOccurred()) - - fileutils.CopyFile(filepath.Join(pluginDir, "test_1.exe"), filepath.Join(fixtureDir, "test_1.exe")) - fileutils.CopyFile(filepath.Join(pluginDir, "test_2.exe"), filepath.Join(fixtureDir, "test_2.exe")) - - config_helpers.PluginRepoDir = func() string { - return fakePluginRepoDir - } - - pluginConfig = plugin_config.NewPluginConfig(func(err error) { Expect(err).ToNot(HaveOccurred()) }) - pluginConfig.SetPlugin("test_1.exe", plugin_config.PluginMetadata{Location: filepath.Join(pluginDir, "test_1.exe")}) - pluginConfig.SetPlugin("test_2.exe", plugin_config.PluginMetadata{Location: filepath.Join(pluginDir, "test_2.exe")}) - - }) - - AfterEach(func() { - err := os.RemoveAll(fakePluginRepoDir) - Expect(err).NotTo(HaveOccurred()) - }) - - runCommand := func(args ...string) bool { - //reset rpc registration, each service can only be registered once - rpc.DefaultServer = rpc.NewServer() - rpcService, _ := cliRpc.NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - cmd := NewPluginUninstall(ui, pluginConfig, rpcService) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not provided a path to the plugin executable", func() { - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Describe("failures", func() { - It("if plugin name does not exist", func() { - runCommand("garbage") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Uninstalling plugin garbage..."}, - []string{"FAILED"}, - []string{"Plugin name", "garbage", "does not exist"}, - )) - }) - }) - - Describe("success", func() { - - Context("notifying plugin of uninstalling", func() { - var path2file string - - BeforeEach(func() { - path2file = filepath.Join(os.TempDir(), "uninstall-test-file-for-test_1.exe") - - f, err := os.Create(path2file) - Ω(err).ToNot(HaveOccurred()) - defer f.Close() - }) - - AfterEach(func() { - os.Remove(path2file) - }) - - It("notifies the plugin upon uninstalling", func() { - _, err := os.Stat(path2file) - Ω(err).ToNot(HaveOccurred()) - - runCommand("test_1.exe") - - _, err = os.Stat(path2file) - Ω(err).To(HaveOccurred()) - Ω(os.IsNotExist(err)).To(BeTrue()) - }) - }) - - It("removes the binary from the /.cf/plugins dir", func() { - _, err := os.Stat(filepath.Join(pluginDir, "test_1.exe")) - Expect(err).ToNot(HaveOccurred()) - - runCommand("test_1.exe") - - _, err = os.Stat(filepath.Join(pluginDir, "test_1.exe")) - Expect(err).To(HaveOccurred()) - Expect(os.IsNotExist(err)).To(BeTrue()) - }) - - It("removes the entry from the config.json", func() { - plugins := pluginConfig.Plugins() - Expect(plugins).To(HaveKey("test_1.exe")) - - runCommand("test_1.exe") - - plugins = pluginConfig.Plugins() - Expect(plugins).NotTo(HaveKey("test_1.exe")) - }) - - It("prints success text", func() { - runCommand("test_1.exe") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Uninstalling plugin test_1.exe..."}, - []string{"OK"}, - []string{"Plugin", "test_1.exe", "successfully uninstalled."}, - )) - }) - - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/add_plugin_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/add_plugin_repo.go deleted file mode 100644 index 1a96653..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/add_plugin_repo.go +++ /dev/null @@ -1,121 +0,0 @@ -package plugin_repo - -import ( - "encoding/json" - "io/ioutil" - "net/http" - "strings" - - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type AddPluginRepo struct { - ui terminal.UI - config core_config.ReadWriter -} - -func NewAddPluginRepo(ui terminal.UI, config core_config.ReadWriter) AddPluginRepo { - return AddPluginRepo{ - ui: ui, - config: config, - } -} - -func (cmd AddPluginRepo) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "add-plugin-repo", - Description: T("Add a new plugin repository"), - Usage: T(`CF_NAME add-plugin-repo [REPO_NAME] [URL] - -EXAMPLE: - cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/ -`), - TotalArgs: 2, - } -} - -func (cmd AddPluginRepo) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - return -} - -func (cmd AddPluginRepo) Run(c *cli.Context) { - - cmd.ui.Say("") - repoUrl := strings.ToLower(c.Args()[1]) - repoName := strings.Trim(c.Args()[0], " ") - - cmd.checkIfRepoExists(repoName, repoUrl) - - repoUrl = cmd.verifyUrl(repoUrl) - - resp, err := http.Get(repoUrl) - if err != nil { - cmd.ui.Failed(T("There is an error performing request on '{{.repoUrl}}': ", map[string]interface{}{"repoUrl": repoUrl}), err.Error()) - } - defer resp.Body.Close() - - if resp.StatusCode == 404 { - cmd.ui.Failed(repoUrl + T(" is not responding. Please make sure it is a valid plugin repo.")) - } - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - cmd.ui.Failed(T("Error reading response from server: ") + err.Error()) - } - - result := clipr.PluginsJson{} - err = json.Unmarshal(body, &result) - if err != nil { - cmd.ui.Failed(T("Error processing data from server: ") + err.Error()) - } - - if result.Plugins == nil { - cmd.ui.Failed(T(`"Plugins" object not found in the responded data.`)) - } - - cmd.config.SetPluginRepo(models.PluginRepo{ - Name: c.Args()[0], - Url: c.Args()[1], - }) - - cmd.ui.Ok() - cmd.ui.Say(repoUrl + T(" added as '") + c.Args()[0] + "'") - cmd.ui.Say("") -} - -func (cmd AddPluginRepo) checkIfRepoExists(repoName, repoUrl string) { - repos := cmd.config.PluginRepos() - for _, repo := range repos { - if strings.ToLower(repo.Name) == strings.ToLower(repoName) { - cmd.ui.Failed(T(`Plugin repo named "{{.repoName}}" already exists, please use another name.`, map[string]interface{}{"repoName": repoName})) - } else if repo.Url == repoUrl { - cmd.ui.Failed(repo.Url + ` (` + repo.Name + T(`) already exists.`)) - } - } -} - -func (cmd AddPluginRepo) verifyUrl(repoUrl string) string { - if !strings.HasPrefix(repoUrl, "http://") && !strings.HasPrefix(repoUrl, "https://") { - cmd.ui.Failed(repoUrl + T(" is not a valid url, please provide a url, e.g. http://your_repo.com")) - } - - if strings.HasSuffix(repoUrl, "/") { - repoUrl = repoUrl + "list" - } else { - repoUrl = repoUrl + "/list" - } - - return repoUrl -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/add_plugin_repo_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/add_plugin_repo_test.go deleted file mode 100644 index ad1d983..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/add_plugin_repo_test.go +++ /dev/null @@ -1,180 +0,0 @@ -package plugin_repo_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/plugin_repo" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("add-plugin-repo", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - testServer *httptest.Server - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - config = testconfig.NewRepositoryWithDefaults() - }) - - var callAddPluginRepo = func(args []string) bool { - cmd := NewAddPluginRepo(ui, config) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("When repo server is valid", func() { - BeforeEach(func() { - - h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{"plugins":[ - { - "name":"echo", - "description":"none", - "version":"4", - "binaries":[ - { - "platform":"osx", - "url":"https://github.com/simonleung8/cli-plugin-echo/raw/master/bin/osx/echo", - "checksum":"2a087d5cddcfb057fbda91e611c33f46" - } - ] - }] - }`) - }) - testServer = httptest.NewServer(h) - }) - - AfterEach(func() { - testServer.Close() - }) - - It("saves the repo url into config", func() { - callAddPluginRepo([]string{"repo", testServer.URL}) - - Ω(config.PluginRepos()[0].Name).To(Equal("repo")) - Ω(config.PluginRepos()[0].Url).To(Equal(testServer.URL)) - }) - }) - - Context("repo name already existing", func() { - BeforeEach(func() { - config.SetPluginRepo(models.PluginRepo{Name: "repo", Url: "http://repo.com"}) - }) - - It("informs user of the already existing repo", func() { - - callAddPluginRepo([]string{"repo", "http://repo2.com"}) - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"Plugin repo named \"repo\"", " already exists"}, - )) - }) - }) - - Context("repo address already existing", func() { - BeforeEach(func() { - config.SetPluginRepo(models.PluginRepo{Name: "repo1", Url: "http://repo.com"}) - }) - - It("informs user of the already existing repo", func() { - - callAddPluginRepo([]string{"repo2", "http://repo.com"}) - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"http://repo.com (repo1)", " already exists."}, - )) - }) - }) - - Context("When repo server is not valid", func() { - - Context("server url is invalid", func() { - It("informs user of invalid url which does not has prefix http", func() { - - callAddPluginRepo([]string{"repo", "msn.com"}) - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"msn.com", "is not a valid url"}, - )) - }) - }) - - Context("server does not has a '/list' endpoint", func() { - It("informs user of invalid repo server", func() { - - callAddPluginRepo([]string{"repo", "http://google.com"}) - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"http://google.com/list", "is not responding."}, - )) - }) - }) - - Context("server responses with invalid json", func() { - BeforeEach(func() { - - h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `"plugins":[]}`) - }) - testServer = httptest.NewServer(h) - }) - - AfterEach(func() { - testServer.Close() - }) - - It("informs user of invalid repo server", func() { - callAddPluginRepo([]string{"repo", testServer.URL}) - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"Error processing data from server"}, - )) - }) - }) - - Context("server responses with json without 'plugins' object", func() { - BeforeEach(func() { - - h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{"bad_plugins":[ - { - "name": "plugin1", - "description": "none" - } - ]}`) - }) - testServer = httptest.NewServer(h) - }) - - AfterEach(func() { - testServer.Close() - }) - - It("informs user of invalid repo server", func() { - callAddPluginRepo([]string{"repo", testServer.URL}) - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"\"Plugins\" object not found in the responded data"}, - )) - }) - }) - - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/list_plugin_repos.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/list_plugin_repos.go deleted file mode 100644 index 53aed17..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/list_plugin_repos.go +++ /dev/null @@ -1,52 +0,0 @@ -package plugin_repo - -import ( - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type ListPluginRepos struct { - ui terminal.UI - config core_config.Reader -} - -func NewListPluginRepos(ui terminal.UI, config core_config.Reader) ListPluginRepos { - return ListPluginRepos{ - ui: ui, - config: config, - } -} - -func (cmd ListPluginRepos) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "list-plugin-repos", - Description: T("list all the added plugin repository"), - Usage: T("CF_NAME list-plugin-repos"), - } -} - -func (cmd ListPluginRepos) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - return -} - -func (cmd ListPluginRepos) Run(c *cli.Context) { - repos := cmd.config.PluginRepos() - - table := terminal.NewTable(cmd.ui, []string{T("Repo Name"), T("Url")}) - - for _, repo := range repos { - table.Add(repo.Name, repo.Url) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - table.Print() - - cmd.ui.Say("") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/list_plugin_repos_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/list_plugin_repos_test.go deleted file mode 100644 index 2d001b8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/list_plugin_repos_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package plugin_repo_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/plugin_repo" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("list-plugin-repo", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - config = testconfig.NewRepositoryWithDefaults() - }) - - var callListPluginRepos = func(args ...string) bool { - cmd := NewListPluginRepos(ui, config) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("lists all added plugin repo in a table", func() { - config.SetPluginRepo(models.PluginRepo{ - Name: "repo1", - Url: "http://url1.com", - }) - config.SetPluginRepo(models.PluginRepo{ - Name: "repo2", - Url: "http://url2.com", - }) - - callListPluginRepos() - - Ω(ui.Outputs).To(ContainSubstrings( - []string{"repo1", "http://url1.com"}, - []string{"repo2", "http://url2.com"}, - )) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/plugin_repo_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/plugin_repo_suite_test.go deleted file mode 100644 index 64ef3ba..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/plugin_repo_suite_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package plugin_repo_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPluginRepo(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "PluginRepo Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/remove_plugin_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/remove_plugin_repo.go deleted file mode 100644 index ae8a294..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/remove_plugin_repo.go +++ /dev/null @@ -1,70 +0,0 @@ -package plugin_repo - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type RemovePluginRepo struct { - ui terminal.UI - config core_config.ReadWriter -} - -func NewRemovePluginRepo(ui terminal.UI, config core_config.ReadWriter) RemovePluginRepo { - return RemovePluginRepo{ - ui: ui, - config: config, - } -} - -func (cmd RemovePluginRepo) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "remove-plugin-repo", - Description: T("Remove a plugin repository"), - Usage: T(`CF_NAME remove-plugin-repo [REPO_NAME] [URL] - -EXAMPLE: - cf remove-plugin-repo PrivateRepo -`), - TotalArgs: 1, - } -} - -func (cmd RemovePluginRepo) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - return -} - -func (cmd RemovePluginRepo) Run(c *cli.Context) { - - cmd.ui.Say("") - repoName := strings.Trim(c.Args()[0], " ") - - if i := cmd.findRepoIndex(repoName); i != -1 { - cmd.config.UnSetPluginRepo(i) - cmd.ui.Ok() - cmd.ui.Say(repoName + T(" removed from list of repositories")) - cmd.ui.Say("") - } else { - cmd.ui.Failed(repoName + T(" does not exist as a repo")) - } -} - -func (cmd RemovePluginRepo) findRepoIndex(repoName string) int { - repos := cmd.config.PluginRepos() - for i, repo := range repos { - if strings.ToLower(repo.Name) == strings.ToLower(repoName) { - return i - } - } - return -1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/remove_plugin_repo_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/remove_plugin_repo_test.go deleted file mode 100644 index e62b389..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/remove_plugin_repo_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package plugin_repo_test - -import ( - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/plugin_repo" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delte-plugin-repo", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - config = testconfig.NewRepositoryWithDefaults() - }) - - var callRemovePluginRepo = func(args ...string) bool { - cmd := NewRemovePluginRepo(ui, config) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("When repo name is valid", func() { - BeforeEach(func() { - config.SetPluginRepo(models.PluginRepo{ - Name: "repo1", - Url: "http://someserver1.com:1234", - }) - - config.SetPluginRepo(models.PluginRepo{ - Name: "repo2", - Url: "http://server2.org:8080", - }) - }) - - It("deletes the repo from the config", func() { - callRemovePluginRepo("repo1") - Ω(len(config.PluginRepos())).To(Equal(1)) - Ω(config.PluginRepos()[0].Name).To(Equal("repo2")) - Ω(config.PluginRepos()[0].Url).To(Equal("http://server2.org:8080")) - }) - }) - - Context("When named repo doesn't exist", func() { - BeforeEach(func() { - config.SetPluginRepo(models.PluginRepo{ - Name: "repo1", - Url: "http://someserver1.com:1234", - }) - - config.SetPluginRepo(models.PluginRepo{ - Name: "repo2", - Url: "http://server2.org:8080", - }) - }) - - It("doesn't change the config the config", func() { - callRemovePluginRepo("fake-repo") - - Ω(len(config.PluginRepos())).To(Equal(2)) - Ω(config.PluginRepos()[0].Name).To(Equal("repo1")) - Ω(config.PluginRepos()[0].Url).To(Equal("http://someserver1.com:1234")) - Ω(ui.Outputs).Should(ContainSubstrings([]string{"fake-repo", "does not exist as a repo"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/repo_plugins.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/repo_plugins.go deleted file mode 100644 index d77ed0a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/repo_plugins.go +++ /dev/null @@ -1,117 +0,0 @@ -package plugin_repo - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/actors/plugin_repo" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type RepoPlugins struct { - ui terminal.UI - config core_config.Reader - pluginRepo plugin_repo.PluginRepo -} - -func NewRepoPlugins(ui terminal.UI, config core_config.Reader, pluginRepo plugin_repo.PluginRepo) RepoPlugins { - return RepoPlugins{ - ui: ui, - config: config, - pluginRepo: pluginRepo, - } -} - -func (cmd RepoPlugins) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: T("repo-plugins"), - Description: T("List all available plugins in all added repositories"), - Usage: T(`CF_NAME repo-plugins - -EXAMPLE: - cf repo-plugins [-r REPO_NAME] -`), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("r", T("Repo Name - List plugins from just this repository")), - }, - } -} - -func (cmd RepoPlugins) GetRequirements(_ requirements.Factory, c *cli.Context) (req []requirements.Requirement, err error) { - return -} - -func (cmd RepoPlugins) Run(c *cli.Context) { - var repos []models.PluginRepo - repoName := c.String("r") - - repos = cmd.config.PluginRepos() - - if repoName == "" { - cmd.ui.Say(T("Getting plugins from all repositories ... ")) - } else { - index := cmd.findRepoIndex(repoName) - if index != -1 { - cmd.ui.Say(T("Getting plugins from repository '") + repoName + "' ...") - repos = []models.PluginRepo{repos[index]} - } else { - cmd.ui.Failed(repoName + T(" does not exist as an available plugin repo."+"\nTip: use `add-plugin-repo` command to add repos.")) - } - } - - cmd.ui.Say("") - - repoPlugins, repoError := cmd.pluginRepo.GetPlugins(repos) - - cmd.printTable(repoPlugins) - - cmd.printErrors(repoError) -} - -func (cmd RepoPlugins) printTable(repoPlugins map[string][]clipr.Plugin) { - for k, plugins := range repoPlugins { - cmd.ui.Say(terminal.ColorizeBold(T("Repository: ")+k, 33)) - table := cmd.ui.Table([]string{T("name"), T("version"), T("description")}) - for _, p := range plugins { - table.Add(p.Name, p.Version, p.Description) - } - table.Print() - cmd.ui.Say("") - } -} - -func (cmd RepoPlugins) printErrors(repoError []string) { - if len(repoError) > 0 { - cmd.ui.Say(terminal.ColorizeBold(T("Logged errors:"), 31)) - for _, e := range repoError { - cmd.ui.Say(terminal.Colorize(e, 31)) - } - cmd.ui.Say("") - } -} - -func getListEndpoint(url string) string { - if strings.HasSuffix(url, "/") { - return url + "list" - } - return url + "/list" -} - -func (cmd RepoPlugins) findRepoIndex(repoName string) int { - repos := cmd.config.PluginRepos() - for i, repo := range repos { - if strings.ToLower(repo.Name) == strings.ToLower(repoName) { - return i - } - } - return -1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/repo_plugins_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/repo_plugins_test.go deleted file mode 100644 index 4bbfaeb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/plugin_repo/repo_plugins_test.go +++ /dev/null @@ -1,117 +0,0 @@ -package plugin_repo_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/cloudfoundry/cli/cf/commands/plugin_repo" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - fakes "github.com/cloudfoundry/cli/cf/actors/plugin_repo/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/models" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("repo-plugins", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - fakePluginRepo *fakes.FakePluginRepo - ) - - BeforeEach(func() { - fakePluginRepo = &fakes.FakePluginRepo{} - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - config = testconfig.NewRepositoryWithDefaults() - - config.SetPluginRepo(models.PluginRepo{ - Name: "repo1", - Url: "", - }) - - config.SetPluginRepo(models.PluginRepo{ - Name: "repo2", - Url: "", - }) - }) - - var callRepoPlugins = func(args ...string) bool { - cmd := NewRepoPlugins(ui, config, fakePluginRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("If repo name is provided by '-r'", func() { - It("list plugins from just the named repo", func() { - callRepoPlugins("-r", "repo2") - - Ω(fakePluginRepo.GetPluginsArgsForCall(0)[0].Name).To(Equal("repo2")) - Ω(len(fakePluginRepo.GetPluginsArgsForCall(0))).To(Equal(1)) - - Ω(ui.Outputs).To(ContainSubstrings([]string{"Getting plugins from repository 'repo2'"})) - }) - }) - - Context("If no repo name is provided", func() { - It("list plugins from just the named repo", func() { - callRepoPlugins() - - Ω(fakePluginRepo.GetPluginsArgsForCall(0)[0].Name).To(Equal("repo1")) - Ω(len(fakePluginRepo.GetPluginsArgsForCall(0))).To(Equal(2)) - Ω(fakePluginRepo.GetPluginsArgsForCall(0)[1].Name).To(Equal("repo2")) - - Ω(ui.Outputs).To(ContainSubstrings([]string{"Getting plugins from all repositories"})) - }) - }) - - Context("when GetPlugins returns a list of plugin meta data", func() { - It("lists all plugin data", func() { - result := make(map[string][]clipr.Plugin) - result["repo1"] = []clipr.Plugin{ - clipr.Plugin{ - Name: "plugin1", - Description: "none1", - }, - } - result["repo2"] = []clipr.Plugin{ - clipr.Plugin{ - Name: "plugin2", - Description: "none2", - }, - } - fakePluginRepo.GetPluginsReturns(result, []string{}) - - callRepoPlugins() - - Ω(ui.Outputs).ToNot(ContainSubstrings([]string{"Logged errors:"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"repo1"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"plugin1"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"repo2"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"plugin2"})) - }) - }) - - Context("If errors are reported back from GetPlugins()", func() { - It("informs user about the errors", func() { - fakePluginRepo.GetPluginsReturns(nil, []string{ - "error from repo1", - "error from repo2", - }) - - callRepoPlugins() - - Ω(ui.Outputs).To(ContainSubstrings([]string{"Logged errors:"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"error from repo1"})) - Ω(ui.Outputs).To(ContainSubstrings([]string{"error from repo2"})) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/create_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/create_quota.go deleted file mode 100644 index 4125b4f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/create_quota.go +++ /dev/null @@ -1,115 +0,0 @@ -package quota - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo quotas.QuotaRepository -} - -func NewCreateQuota(ui terminal.UI, config core_config.Reader, quotaRepo quotas.QuotaRepository) CreateQuota { - return CreateQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - } -} - -func (cmd CreateQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-quota", - Description: T("Define a new resource quota"), - Usage: T("CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("i", T("Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.")), - flag_helpers.NewStringFlag("m", T("Total amount of memory (e.g. 1024M, 1G, 10G)")), - flag_helpers.NewIntFlag("r", T("Total number of routes")), - flag_helpers.NewIntFlag("s", T("Total number of service instances")), - cli.BoolFlag{Name: "allow-paid-service-plans", Usage: T("Can provision instances of paid service plans")}, - }, - } -} - -func (cmd CreateQuota) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd CreateQuota) Run(context *cli.Context) { - name := context.Args()[0] - - cmd.ui.Say(T("Creating quota {{.QuotaName}} as {{.Username}}...", map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(name), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - quota := models.QuotaFields{ - Name: name, - } - - memoryLimit := context.String("m") - if memoryLimit != "" { - parsedMemory, err := formatters.ToMegabytes(memoryLimit) - if err != nil { - cmd.ui.Failed(T("Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", map[string]interface{}{"MemoryLimit": memoryLimit, "Err": err})) - } - - quota.MemoryLimit = parsedMemory - } - - instanceMemoryLimit := context.String("i") - if instanceMemoryLimit == "-1" || instanceMemoryLimit == "" { - quota.InstanceMemoryLimit = -1 - } else { - parsedMemory, errr := formatters.ToMegabytes(instanceMemoryLimit) - if errr != nil { - cmd.ui.Failed(T("Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", map[string]interface{}{"MemoryLimit": instanceMemoryLimit, "Err": errr})) - } - quota.InstanceMemoryLimit = parsedMemory - } - - if context.IsSet("r") { - quota.RoutesLimit = context.Int("r") - } - - if context.IsSet("s") { - quota.ServicesLimit = context.Int("s") - } - - if context.IsSet("allow-paid-service-plans") { - quota.NonBasicServicesAllowed = true - } - - err := cmd.quotaRepo.Create(quota) - - httpErr, ok := err.(errors.HttpError) - if ok && httpErr.ErrorCode() == errors.QUOTA_EXISTS { - cmd.ui.Ok() - cmd.ui.Warn(T("Quota Definition {{.QuotaName}} already exists", map[string]interface{}{"QuotaName": quota.Name})) - return - } - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/create_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/create_quota_test.go deleted file mode 100644 index 7d445de..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/create_quota_test.go +++ /dev/null @@ -1,150 +0,0 @@ -package quota_test - -import ( - . "github.com/cloudfoundry/cli/cf/commands/quota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" -) - -var _ = Describe("create-quota command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := NewCreateQuota(ui, configuration.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when the user is not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand("my-quota", "-m", "50G")).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("fails requirements when called without a quota name", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("creates a quota with a given name", func() { - runCommand("my-quota") - Expect(quotaRepo.CreateArgsForCall(0).Name).To(Equal("my-quota")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating quota", "my-quota", "my-user", "..."}, - []string{"OK"}, - )) - }) - - Context("when the -i flag is not provided", func() { - It("defaults the memory limit to unlimited", func() { - runCommand("my-quota") - - Expect(quotaRepo.CreateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(-1))) - }) - }) - - Context("when the -m flag is provided", func() { - It("sets the memory limit", func() { - runCommand("-m", "50G", "erryday makin fitty jeez") - Expect(quotaRepo.CreateArgsForCall(0).MemoryLimit).To(Equal(int64(51200))) - }) - - It("alerts the user when parsing the memory limit fails", func() { - runCommand("whoops", "12") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when the -i flag is provided", func() { - It("sets the memory limit", func() { - runCommand("-i", "50G", "erryday makin fitty jeez") - Expect(quotaRepo.CreateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(51200))) - }) - - It("alerts the user when parsing the memory limit fails", func() { - runCommand("-i", "whoops", "wit mah hussle", "12") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - - Context("and the provided value is -1", func() { - It("sets the memory limit", func() { - runCommand("-i", "-1", "yo") - Expect(quotaRepo.CreateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(-1))) - }) - }) - }) - It("sets the route limit", func() { - runCommand("-r", "12", "ecstatic") - - Expect(quotaRepo.CreateArgsForCall(0).RoutesLimit).To(Equal(12)) - }) - - It("sets the service instance limit", func() { - runCommand("-s", "42", "black star") - Expect(quotaRepo.CreateArgsForCall(0).ServicesLimit).To(Equal(42)) - }) - - It("defaults to not allowing paid service plans", func() { - runCommand("my-pro-bono-quota") - Expect(quotaRepo.CreateArgsForCall(0).NonBasicServicesAllowed).To(BeFalse()) - }) - - Context("when requesting to allow paid service plans", func() { - It("creates the quota with paid service plans allowed", func() { - runCommand("--allow-paid-service-plans", "my-for-profit-quota") - Expect(quotaRepo.CreateArgsForCall(0).NonBasicServicesAllowed).To(BeTrue()) - }) - }) - - Context("when creating a quota returns an error", func() { - It("alerts the user when creating the quota fails", func() { - quotaRepo.CreateReturns(errors.New("WHOOP THERE IT IS")) - runCommand("my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating quota", "my-quota"}, - []string{"FAILED"}, - )) - }) - - It("warns the user when quota already exists", func() { - quotaRepo.CreateReturns(errors.NewHttpError(400, "240002", "Quota Definition is taken: quota-sct")) - runCommand("Banana") - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"FAILED"}, - )) - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"already exists"})) - }) - - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/delete_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/delete_quota.go deleted file mode 100644 index 9461b52..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/delete_quota.go +++ /dev/null @@ -1,86 +0,0 @@ -package quota - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo quotas.QuotaRepository - orgReq requirements.OrganizationRequirement -} - -func NewDeleteQuota(ui terminal.UI, config core_config.Reader, quotaRepo quotas.QuotaRepository) (cmd *DeleteQuota) { - return &DeleteQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - } -} - -func (cmd *DeleteQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-quota", - Description: T("Delete a quota"), - Usage: T("CF_NAME delete-quota QUOTA [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteQuota) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - err = errors.New(T("Incorrect Usage")) - cmd.ui.FailWithUsage(c) - return - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *DeleteQuota) Run(c *cli.Context) { - quotaName := c.Args()[0] - - if !c.Bool("f") { - response := cmd.ui.ConfirmDelete("quota", quotaName) - if !response { - return - } - } - - cmd.ui.Say(T("Deleting quota {{.QuotaName}} as {{.Username}}...", map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(quotaName), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - quota, apiErr := cmd.quotaRepo.FindByName(quotaName) - - switch (apiErr).(type) { - case nil: // no error - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Quota {{.QuotaName}} does not exist", map[string]interface{}{"QuotaName": quotaName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - } - - apiErr = cmd.quotaRepo.Delete(quota.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/delete_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/delete_quota_test.go deleted file mode 100644 index 2240aee..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/delete_quota_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package quota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/quota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-quota command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteQuota(ui, configuration.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when the user is not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand("my-quota")).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("fails requirements when called without a quota name", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("When the quota provided exists", func() { - BeforeEach(func() { - quota := models.QuotaFields{} - quota.Name = "my-quota" - quota.Guid = "my-quota-guid" - - quotaRepo.FindByNameReturns(quota, nil) - }) - - It("deletes a quota with a given name when the user confirms", func() { - ui.Inputs = []string{"y"} - - runCommand("my-quota") - Expect(quotaRepo.DeleteArgsForCall(0)).To(Equal("my-quota-guid")) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really delete the quota", "my-quota"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting quota", "my-quota", "my-user"}, - []string{"OK"}, - )) - }) - - It("does not prompt when the -f flag is provided", func() { - runCommand("-f", "my-quota") - - Expect(quotaRepo.DeleteArgsForCall(0)).To(Equal("my-quota-guid")) - - Expect(ui.Prompts).To(BeEmpty()) - }) - - It("shows an error when deletion fails", func() { - quotaRepo.DeleteReturns(errors.New("some error")) - - runCommand("-f", "my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "my-quota"}, - []string{"FAILED"}, - )) - }) - }) - - Context("when finding the quota fails", func() { - Context("when the quota provided does not exist", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.NewModelNotFoundError("Quota", "non-existent-quota")) - }) - - It("warns the user when that the quota does not exist", func() { - runCommand("-f", "non-existent-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "non-existent-quota"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings( - []string{"non-existent-quota", "does not exist"}, - )) - }) - }) - - Context("when other types of error occur", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.New("some error")) - }) - - It("shows an error", func() { - runCommand("-f", "my-quota") - - Expect(ui.WarnOutputs).ToNot(ContainSubstrings( - []string{"my-quota", "does not exist"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota.go deleted file mode 100644 index 66909ef..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota.go +++ /dev/null @@ -1,78 +0,0 @@ -package quota - -import ( - "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" - "strconv" - - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type showQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo quotas.QuotaRepository -} - -func NewShowQuota(ui terminal.UI, config core_config.Reader, quotaRepo quotas.QuotaRepository) *showQuota { - return &showQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - } -} - -func (cmd *showQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "quota", - Usage: T("CF_NAME quota QUOTA"), - Description: T("Show quota info"), - } -} - -func (cmd *showQuota) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd *showQuota) Run(context *cli.Context) { - quotaName := context.Args()[0] - cmd.ui.Say(T("Getting quota {{.QuotaName}} info as {{.Username}}...", map[string]interface{}{"QuotaName": quotaName, "Username": cmd.config.Username()})) - - quota, err := cmd.quotaRepo.FindByName(quotaName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - - var megabytes string - if quota.InstanceMemoryLimit == -1 { - megabytes = T("unlimited") - } else { - megabytes = formatters.ByteSize(quota.InstanceMemoryLimit * formatters.MEGABYTE) - } - - servicesLimit := strconv.Itoa(quota.ServicesLimit) - if servicesLimit == "-1" { - servicesLimit = T("unlimited") - } - table := terminal.NewTable(cmd.ui, []string{"", ""}) - table.Add(T("Total Memory"), formatters.ByteSize(quota.MemoryLimit*formatters.MEGABYTE)) - table.Add(T("Instance Memory"), megabytes) - table.Add(T("Routes"), fmt.Sprintf("%d", quota.RoutesLimit)) - table.Add(T("Services"), servicesLimit) - table.Add(T("Paid service plans"), formatters.Allowed(quota.NonBasicServicesAllowed)) - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota_suite_test.go deleted file mode 100644 index bd2e566..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package quota_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestQuota(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Quota Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota_test.go deleted file mode 100644 index db2143b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quota_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package quota_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - . "github.com/cloudfoundry/cli/cf/commands/quota" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("quota", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - quotaRepo *fakes.FakeQuotaRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - quotaRepo = &fakes.FakeQuotaRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewShowQuota(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("When not logged in", func() { - It("fails requirements", func() { - Expect(runCommand("quota-name")).To(BeFalse()) - }) - }) - - Context("When logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("When not providing a quota name", func() { - It("fails with usage", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("When providing a quota name", func() { - Context("that exists", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.QuotaFields{ - Guid: "my-quota-guid", - Name: "muh-muh-muh-my-qua-quota", - MemoryLimit: 512, - InstanceMemoryLimit: 5, - RoutesLimit: 2000, - ServicesLimit: 47, - NonBasicServicesAllowed: true, - }, nil) - }) - - It("shows you that quota", func() { - runCommand("muh-muh-muh-my-qua-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting quota", "muh-muh-muh-my-qua-quota", "my-user"}, - []string{"OK"}, - []string{"Total Memory", "512M"}, - []string{"Instance Memory", "5M"}, - []string{"Routes", "2000"}, - []string{"Services", "47"}, - []string{"Paid service plans", "allowed"}, - )) - }) - }) - - Context("when instance memory limit is -1", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.QuotaFields{ - Guid: "my-quota-guid", - Name: "muh-muh-muh-my-qua-quota", - MemoryLimit: 512, - InstanceMemoryLimit: -1, - RoutesLimit: 2000, - ServicesLimit: 47, - NonBasicServicesAllowed: true, - }, nil) - }) - - It("shows you that quota", func() { - runCommand("muh-muh-muh-my-qua-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting quota", "muh-muh-muh-my-qua-quota", "my-user"}, - []string{"OK"}, - []string{"Total Memory", "512M"}, - []string{"Instance Memory", "unlimited"}, - []string{"Routes", "2000"}, - []string{"Services", "47"}, - []string{"Paid service plans", "allowed"}, - )) - }) - }) - - Context("when the services limit is -1", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.QuotaFields{ - Guid: "my-quota-guid", - Name: "muh-muh-muh-my-qua-quota", - MemoryLimit: 512, - InstanceMemoryLimit: 14, - RoutesLimit: 2000, - ServicesLimit: -1, - NonBasicServicesAllowed: true, - }, nil) - }) - - It("shows you that quota", func() { - runCommand("muh-muh-muh-my-qua-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting quota", "muh-muh-muh-my-qua-quota", "my-user"}, - []string{"OK"}, - []string{"Total Memory", "512M"}, - []string{"Instance Memory", "14M"}, - []string{"Routes", "2000"}, - []string{"Services", "unlimited"}, - []string{"Paid service plans", "allowed"}, - )) - }) - }) - - Context("that doesn't exist", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.New("oops i accidentally a quota")) - }) - - It("gives an error", func() { - runCommand("an-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"oops"}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quotas.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quotas.go deleted file mode 100644 index 43fa175..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quotas.go +++ /dev/null @@ -1,87 +0,0 @@ -package quota - -import ( - "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" - "strconv" - - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListQuotas struct { - ui terminal.UI - config core_config.Reader - quotaRepo quotas.QuotaRepository -} - -func NewListQuotas(ui terminal.UI, config core_config.Reader, quotaRepo quotas.QuotaRepository) (cmd *ListQuotas) { - return &ListQuotas{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - } -} - -func (cmd *ListQuotas) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "quotas", - Description: T("List available usage quotas"), - Usage: T("CF_NAME quotas"), - } -} - -func (cmd *ListQuotas) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *ListQuotas) Run(c *cli.Context) { - cmd.ui.Say(T("Getting quotas as {{.Username}}...", map[string]interface{}{"Username": terminal.EntityNameColor(cmd.config.Username())})) - - quotas, apiErr := cmd.quotaRepo.FindAll() - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("name"), T("total memory limit"), T("instance memory limit"), T("routes"), T("service instances"), T("paid service plans")}) - - var megabytes string - for _, quota := range quotas { - if quota.InstanceMemoryLimit == -1 { - megabytes = T("unlimited") - } else { - megabytes = formatters.ByteSize(quota.InstanceMemoryLimit * formatters.MEGABYTE) - } - - servicesLimit := strconv.Itoa(quota.ServicesLimit) - if quota.ServicesLimit == -1 { - servicesLimit = T("unlimited") - } - - table.Add( - quota.Name, - formatters.ByteSize(quota.MemoryLimit*formatters.MEGABYTE), - megabytes, - fmt.Sprintf("%d", quota.RoutesLimit), - fmt.Sprintf(servicesLimit), - formatters.Allowed(quota.NonBasicServicesAllowed), - ) - } - - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quotas_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quotas_test.go deleted file mode 100644 index 6cec5b3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/quotas_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package quota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/quota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("quotas command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewListQuotas(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when quotas exist", func() { - BeforeEach(func() { - quotaRepo.FindAllReturns([]models.QuotaFields{ - models.QuotaFields{ - Name: "quota-name", - MemoryLimit: 1024, - InstanceMemoryLimit: 512, - RoutesLimit: 111, - ServicesLimit: 222, - NonBasicServicesAllowed: true, - }, - models.QuotaFields{ - Name: "quota-non-basic-not-allowed", - MemoryLimit: 434, - InstanceMemoryLimit: -1, - RoutesLimit: 1, - ServicesLimit: 2, - NonBasicServicesAllowed: false, - }, - }, nil) - }) - - It("lists quotas", func() { - Expect(Expect(runCommand()).To(HavePassedRequirements())).To(HavePassedRequirements()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting quotas as", "my-user"}, - []string{"OK"}, - []string{"name", "total memory limit", "instance memory limit", "routes", "service instances", "paid service plans"}, - []string{"quota-name", "1G", "512M", "111", "222", "allowed"}, - []string{"quota-non-basic-not-allowed", "434M", "unlimited", "1", "2", "disallowed"}, - )) - }) - - It("displays unlimited services properly", func() { - quotaRepo.FindAllReturns([]models.QuotaFields{ - models.QuotaFields{ - Name: "quota-with-no-limit-to-services", - MemoryLimit: 434, - InstanceMemoryLimit: 1, - RoutesLimit: 2, - ServicesLimit: -1, - NonBasicServicesAllowed: false, - }, - }, nil) - Expect(Expect(runCommand()).To(HavePassedRequirements())).To(HavePassedRequirements()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"quota-with-no-limit-to-services", "434M", "1", "2", "unlimited", "disallowed"}, - )) - }) - }) - - Context("when an error occurs fetching quotas", func() { - BeforeEach(func() { - quotaRepo.FindAllReturns([]models.QuotaFields{}, errors.New("I haz a borken!")) - }) - - It("prints an error", func() { - Expect(runCommand()).To(HavePassedRequirements()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting quotas as", "my-user"}, - []string{"FAILED"}, - )) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/update_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/update_quota.go deleted file mode 100644 index cd76c80..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/update_quota.go +++ /dev/null @@ -1,128 +0,0 @@ -package quota - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type updateQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo quotas.QuotaRepository -} - -func NewUpdateQuota(ui terminal.UI, config core_config.Reader, quotaRepo quotas.QuotaRepository) *updateQuota { - return &updateQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - } -} - -func (cmd *updateQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "update-quota", - Description: T("Update an existing resource quota"), - Usage: T("CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("i", T("Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)")), - flag_helpers.NewStringFlag("m", T("Total amount of memory (e.g. 1024M, 1G, 10G)")), - flag_helpers.NewStringFlag("n", T("New name")), - flag_helpers.NewIntFlag("r", T("Total number of routes")), - flag_helpers.NewIntFlag("s", T("Total number of service instances")), - cli.BoolFlag{Name: "allow-paid-service-plans", Usage: T("Can provision instances of paid service plans")}, - cli.BoolFlag{Name: "disallow-paid-service-plans", Usage: T("Cannot provision instances of paid service plans")}, - }, - } -} - -func (cmd *updateQuota) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd *updateQuota) Run(c *cli.Context) { - oldQuotaName := c.Args()[0] - quota, err := cmd.quotaRepo.FindByName(oldQuotaName) - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - allowPaidServices := c.Bool("allow-paid-service-plans") - disallowPaidServices := c.Bool("disallow-paid-service-plans") - if allowPaidServices && disallowPaidServices { - cmd.ui.Failed(T("Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.")) - } - - if allowPaidServices { - quota.NonBasicServicesAllowed = true - } - - if disallowPaidServices { - quota.NonBasicServicesAllowed = false - } - - if c.String("i") != "" { - var memory int64 - - if c.String("i") == "-1" { - memory = -1 - } else { - var formatError error - - memory, formatError = formatters.ToMegabytes(c.String("i")) - - if formatError != nil { - cmd.ui.FailWithUsage(c) - } - } - - quota.InstanceMemoryLimit = memory - } - - if c.String("m") != "" { - memory, formatError := formatters.ToMegabytes(c.String("m")) - - if formatError != nil { - cmd.ui.FailWithUsage(c) - } - - quota.MemoryLimit = memory - } - - if c.String("n") != "" { - quota.Name = c.String("n") - } - - if c.IsSet("s") { - quota.ServicesLimit = c.Int("s") - } - - if c.IsSet("r") { - quota.RoutesLimit = c.Int("r") - } - - cmd.ui.Say(T("Updating quota {{.QuotaName}} as {{.Username}}...", map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(oldQuotaName), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - err = cmd.quotaRepo.Update(quota) - if err != nil { - cmd.ui.Failed(err.Error()) - } - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/update_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/update_quota_test.go deleted file mode 100644 index 9157941..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/quota/update_quota_test.go +++ /dev/null @@ -1,177 +0,0 @@ -package quota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/quotas/fakes" - . "github.com/cloudfoundry/cli/cf/commands/quota" - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("app Command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - quotaRepo *fakes.FakeQuotaRepository - quota models.QuotaFields - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - quotaRepo = &fakes.FakeQuotaRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewUpdateQuota(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails if not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("cf-plays-dwarf-fortress")).To(BeFalse()) - }) - - It("fails with usage when no arguments are given", func() { - passed := runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(passed).To(BeFalse()) - }) - }) - - Describe("updating quota fields", func() { - BeforeEach(func() { - quota = models.QuotaFields{ - Guid: "quota-guid", - Name: "quota-name", - MemoryLimit: 1024, - RoutesLimit: 111, - ServicesLimit: 222, - } - }) - - JustBeforeEach(func() { - quotaRepo.FindByNameReturns(quota, nil) - }) - - Context("when the -i flag is provided", func() { - It("updates the instance memory limit", func() { - runCommand("-i", "15G", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).Name).To(Equal("quota-name")) - Expect(quotaRepo.UpdateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(15360))) - }) - - It("totally accepts -1 as a value because it means unlimited", func() { - runCommand("-i", "-1", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).Name).To(Equal("quota-name")) - Expect(quotaRepo.UpdateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(-1))) - }) - - It("fails with usage when the value cannot be parsed", func() { - runCommand("-m", "blasé", "le-tired") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the -m flag is provided", func() { - It("updates the memory limit", func() { - runCommand("-m", "15G", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).Name).To(Equal("quota-name")) - Expect(quotaRepo.UpdateArgsForCall(0).MemoryLimit).To(Equal(int64(15360))) - }) - - It("fails with usage when the value cannot be parsed", func() { - runCommand("-m", "blasé", "le-tired") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the -n flag is provided", func() { - It("updates the quota name", func() { - runCommand("-n", "quota-new-name", "quota-name") - - Expect(quotaRepo.UpdateArgsForCall(0).Name).To(Equal("quota-new-name")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating quota", "quota-name", "as", "my-user"}, - []string{"OK"}, - )) - }) - }) - - It("updates the total allowed services", func() { - runCommand("-s", "9000", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).ServicesLimit).To(Equal(9000)) - }) - - It("updates the total allowed routes", func() { - runCommand("-r", "9001", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).RoutesLimit).To(Equal(9001)) - }) - - Context("update paid service plans", func() { - BeforeEach(func() { - quota.NonBasicServicesAllowed = false - }) - - It("changes to paid service plan when --allow flag is provided", func() { - runCommand("--allow-paid-service-plans", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).NonBasicServicesAllowed).To(BeTrue()) - }) - - It("shows an error when both --allow and --disallow flags are provided", func() { - runCommand("--allow-paid-service-plans", "--disallow-paid-service-plans", "quota-name") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Both flags are not permitted"}, - )) - }) - - Context("when paid services are allowed", func() { - BeforeEach(func() { - quota.NonBasicServicesAllowed = true - }) - It("changes to non-paid service plan when --disallow flag is provided", func() { - quotaRepo.FindByNameReturns(quota, nil) // updating an existing quota - - runCommand("--disallow-paid-service-plans", "quota-name") - Expect(quotaRepo.UpdateArgsForCall(0).NonBasicServicesAllowed).To(BeFalse()) - }) - }) - }) - }) - - It("shows an error when updating fails", func() { - quotaRepo.UpdateReturns(errors.New("I accidentally a quota")) - runCommand("-m", "1M", "dead-serious") - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - - It("shows the user an error when finding the quota fails", func() { - quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.New("i can't believe it's not quotas!")) - - runCommand("-m", "50Somethings", "what-could-possibly-go-wrong?") - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - - It("shows a message explaining the update", func() { - quota.Name = "i-love-ui" - quotaRepo.FindByNameReturns(quota, nil) - - runCommand("-m", "50G", "i-love-ui") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating quota", "i-love-ui", "as", "my-user"}, - []string{"OK"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/check_route.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/check_route.go deleted file mode 100644 index d90a5d8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/check_route.go +++ /dev/null @@ -1,86 +0,0 @@ -package route - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CheckRoute struct { - ui terminal.UI - config core_config.Reader - routeRepo api.RouteRepository - domainRepo api.DomainRepository -} - -func NewCheckRoute(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository, domainRepo api.DomainRepository) (cmd *CheckRoute) { - cmd = new(CheckRoute) - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - cmd.domainRepo = domainRepo - return -} - -func (cmd *CheckRoute) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "check-route", - Description: T("Perform a simple check to determine whether a route currently exists or not."), - Usage: T("CF_NAME check-route HOST DOMAIN"), - } -} - -func (cmd *CheckRoute) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - return - } - reqs = []requirements.Requirement{ - requirementsFactory.NewTargetedOrgRequirement(), - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *CheckRoute) Run(c *cli.Context) { - hostName := c.Args()[0] - domainName := c.Args()[1] - - cmd.ui.Say(T("Checking for route...")) - - exists, err := cmd.CheckRoute(hostName, domainName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - - if exists { - cmd.ui.Say(T("Route {{.HostName}}.{{.DomainName}} does exist", - map[string]interface{}{"HostName": hostName, "DomainName": domainName}, - )) - } else { - cmd.ui.Say(T("Route {{.HostName}}.{{.DomainName}} does not exist", - map[string]interface{}{"HostName": hostName, "DomainName": domainName}, - )) - } -} - -func (cmd *CheckRoute) CheckRoute(hostName, domainName string) (bool, error) { - orgGuid := cmd.config.OrganizationFields().Guid - domain, err := cmd.domainRepo.FindByNameInOrg(domainName, orgGuid) - if err != nil { - return false, err - } - - found, err := cmd.routeRepo.CheckIfExists(hostName, domain) - if err != nil { - return false, err - } - - return found, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/check_route_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/check_route_test.go deleted file mode 100644 index 88c3429..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/check_route_test.go +++ /dev/null @@ -1,144 +0,0 @@ -package route_test - -import ( - "errors" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/route" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("check-route command", func() { - var ( - ui *testterm.FakeUI - routeRepo *testapi.FakeRouteRepository - domainRepo *testapi.FakeDomainRepository - requirementsFactory *testreq.FakeReqFactory - config core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - routeRepo = &testapi.FakeRouteRepository{} - domainRepo = &testapi.FakeDomainRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - config = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewCheckRoute(ui, config, routeRepo, domainRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.TargetedOrgSuccess = true - - Expect(runCommand("foobar.example.com", "bar.example.com")).To(BeFalse()) - }) - - It("fails when no org is targeted", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("foobar.example.com", "bar.example.com")).To(BeFalse()) - }) - - It("fails when the number of arguments is greater than two", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - passed := runCommand("foobar.example.com", "hello", "world") - - Expect(passed).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when the number of arguments is less than two", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - passed := runCommand("foobar.example.com") - - Expect(passed).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the route already exists", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - routeRepo.CheckIfExistsFound = true - }) - - It("prints out route does exist", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - - runCommand("some-existing-route", "example.com") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Checking for route..."}, - []string{"OK"}, - []string{"Route some-existing-route.example.com does exist"}, - )) - }) - }) - - Context("when the route does not exist", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - routeRepo.CheckIfExistsFound = false - }) - - It("prints out route does not exist", func() { - - runCommand("non-existent-route", "example.com") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Checking for route..."}, - []string{"OK"}, - []string{"Route non-existent-route.example.com does not exist"}, - )) - }) - }) - - Context("when finding the domain returns an error", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - domainRepo.FindByNameInOrgApiResponse = errors.New("Domain not found") - }) - - It("prints out route does not exist", func() { - - runCommand("some-silly-route", "some-non-real-domain") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Checking for route..."}, - []string{"FAILED"}, - []string{"Domain not found"}, - )) - }) - }) - Context("when checking if the route exists returns an error", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - routeRepo.CheckIfExistsError = errors.New("Some stupid error") - }) - - It("prints out route does not exist", func() { - - runCommand("some-silly-route", "some-non-real-domain") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Checking for route..."}, - []string{"FAILED"}, - []string{"Some stupid error"}, - )) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/create_route.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/create_route.go deleted file mode 100644 index 2071c84..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/create_route.go +++ /dev/null @@ -1,110 +0,0 @@ -package route - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RouteCreator interface { - CreateRoute(hostName string, domain models.DomainFields, space models.SpaceFields) (route models.Route, apiErr error) -} - -type CreateRoute struct { - ui terminal.UI - config core_config.Reader - routeRepo api.RouteRepository - spaceReq requirements.SpaceRequirement - domainReq requirements.DomainRequirement -} - -func NewCreateRoute(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository) (cmd *CreateRoute) { - cmd = new(CreateRoute) - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - return -} - -func (cmd *CreateRoute) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-route", - Description: T("Create a url route in a space for later use"), - Usage: T("CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("n", T("Hostname")), - }, - } -} - -func (cmd *CreateRoute) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - domainName := c.Args()[1] - - if cmd.spaceReq == nil { - cmd.spaceReq = requirementsFactory.NewSpaceRequirement(c.Args()[0]) - } else { - cmd.spaceReq.SetSpaceName(c.Args()[0]) - } - cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - cmd.spaceReq, - cmd.domainReq, - } - return -} - -func (cmd *CreateRoute) Run(c *cli.Context) { - hostName := c.String("n") - space := cmd.spaceReq.GetSpace() - domain := cmd.domainReq.GetDomain() - - _, apiErr := cmd.CreateRoute(hostName, domain, space.SpaceFields) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } -} - -func (cmd *CreateRoute) CreateRoute(hostName string, domain models.DomainFields, space models.SpaceFields) (route models.Route, apiErr error) { - cmd.ui.Say(T("Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "Hostname": terminal.EntityNameColor(domain.UrlForHost(hostName)), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(space.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - route, apiErr = cmd.routeRepo.CreateInSpace(hostName, domain.Guid, space.Guid) - if apiErr != nil { - var findApiResponse error - route, findApiResponse = cmd.routeRepo.FindByHostAndDomain(hostName, domain) - - if findApiResponse != nil || - route.Space.Guid != space.Guid || - route.Domain.Guid != domain.Guid { - return - } - - apiErr = nil - cmd.ui.Ok() - cmd.ui.Warn(T("Route {{.URL}} already exists", - map[string]interface{}{"URL": route.URL()})) - return - } - - cmd.ui.Ok() - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/create_route_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/create_route_test.go deleted file mode 100644 index c2b9517..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/create_route_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package route_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/route" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-route command", func() { - var ( - ui *testterm.FakeUI - routeRepo *testapi.FakeRouteRepository - requirementsFactory *testreq.FakeReqFactory - config core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - routeRepo = &testapi.FakeRouteRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - config = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewCreateRoute(ui, config, routeRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.TargetedOrgSuccess = true - - Expect(runCommand("my-space", "example.com", "-n", "foo")).To(BeFalse()) - }) - - It("fails when an org is not targeted", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand("my-space", "example.com", "-n", "foo")).To(BeFalse()) - }) - - It("fails with usage when not provided two args", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - - runCommand("my-space") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in, targeted a space and given a domain that exists", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - requirementsFactory.Domain = models.DomainFields{ - Guid: "domain-guid", - Name: "example.com", - } - requirementsFactory.Space = models.Space{SpaceFields: models.SpaceFields{ - Guid: "my-space-guid", - Name: "my-space", - }} - }) - - It("creates routes, obviously", func() { - runCommand("-n", "host", "my-space", "example.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "host.example.com", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(routeRepo.CreateInSpaceHost).To(Equal("host")) - Expect(routeRepo.CreateInSpaceDomainGuid).To(Equal("domain-guid")) - Expect(routeRepo.CreateInSpaceSpaceGuid).To(Equal("my-space-guid")) - }) - - It("is idempotent", func() { - routeRepo.CreateInSpaceErr = true - routeRepo.FindByHostAndDomainReturns.Route = models.Route{ - Space: requirementsFactory.Space.SpaceFields, - Guid: "my-route-guid", - Host: "host", - Domain: requirementsFactory.Domain, - } - - runCommand("-n", "host", "my-space", "example.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route"}, - []string{"OK"}, - []string{"host.example.com", "already exists"}, - )) - - Expect(routeRepo.CreateInSpaceHost).To(Equal("host")) - Expect(routeRepo.CreateInSpaceDomainGuid).To(Equal("domain-guid")) - Expect(routeRepo.CreateInSpaceSpaceGuid).To(Equal("my-space-guid")) - }) - - Describe("RouteCreator interface", func() { - It("creates a route, given a domain and space", func() { - createdRoute := models.Route{} - createdRoute.Host = "my-host" - createdRoute.Guid = "my-route-guid" - routeRepo := &testapi.FakeRouteRepository{ - CreateInSpaceCreatedRoute: createdRoute, - } - - cmd := NewCreateRoute(ui, config, routeRepo) - route, apiErr := cmd.CreateRoute("my-host", requirementsFactory.Domain, requirementsFactory.Space.SpaceFields) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(route.Guid).To(Equal(createdRoute.Guid)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating route", "my-host.example.com", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(routeRepo.CreateInSpaceHost).To(Equal("my-host")) - Expect(routeRepo.CreateInSpaceDomainGuid).To(Equal("domain-guid")) - Expect(routeRepo.CreateInSpaceSpaceGuid).To(Equal("my-space-guid")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_orphaned_routes.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_orphaned_routes.go deleted file mode 100644 index cb86c16..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_orphaned_routes.go +++ /dev/null @@ -1,80 +0,0 @@ -package route - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteOrphanedRoutes struct { - ui terminal.UI - routeRepo api.RouteRepository - config core_config.Reader -} - -func NewDeleteOrphanedRoutes(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository) (cmd DeleteOrphanedRoutes) { - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - return -} - -func (cmd DeleteOrphanedRoutes) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-orphaned-routes", - Description: T("Delete all orphaned routes (e.g.: those that are not mapped to an app)"), - Usage: T("CF_NAME delete-orphaned-routes [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd DeleteOrphanedRoutes) GetRequirements(reqFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = append(reqs, reqFactory.NewLoginRequirement()) - return -} - -func (cmd DeleteOrphanedRoutes) Run(c *cli.Context) { - - force := c.Bool("f") - if !force { - response := cmd.ui.Confirm(T("Really delete orphaned routes?{{.Prompt}}", - map[string]interface{}{"Prompt": terminal.PromptColor(">")})) - - if !response { - return - } - } - - cmd.ui.Say(T("Getting routes as {{.Username}} ...\n", - map[string]interface{}{"Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr := cmd.routeRepo.ListRoutes(func(route models.Route) bool { - - if len(route.Apps) == 0 { - cmd.ui.Say(T("Deleting route {{.Route}}...", - map[string]interface{}{"Route": terminal.EntityNameColor(route.Host + "." + route.Domain.Name)})) - apiErr := cmd.routeRepo.Delete(route.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return false - } - } - return true - }) - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching routes.\n{{.Err}}", map[string]interface{}{"Err": apiErr.Error()})) - return - } - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_orphaned_routes_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_orphaned_routes_test.go deleted file mode 100644 index 9c8fa1a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_orphaned_routes_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package route_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/route" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-orphaned-routes command", func() { - var routeRepo *testapi.FakeRouteRepository - var reqFactory *testreq.FakeReqFactory - - BeforeEach(func() { - routeRepo = &testapi.FakeRouteRepository{} - reqFactory = &testreq.FakeReqFactory{} - }) - - It("fails requirements when not logged in", func() { - _, passed := callDeleteOrphanedRoutes("y", []string{}, reqFactory, routeRepo) - Expect(passed).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - reqFactory.LoginSuccess = true - ui, passed := callDeleteOrphanedRoutes("y", []string{"blahblah"}, reqFactory, routeRepo) - Expect(passed).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("when logged in successfully", func() { - - BeforeEach(func() { - reqFactory.LoginSuccess = true - }) - - It("passes requirements when logged in", func() { - _, passed := callDeleteOrphanedRoutes("y", []string{}, reqFactory, routeRepo) - Expect(passed).To(BeTrue()) - }) - - It("passes when confirmation is provided", func() { - var ui *testterm.FakeUI - domain := models.DomainFields{Name: "example.com"} - domain2 := models.DomainFields{Name: "cookieclicker.co"} - - app1 := models.ApplicationFields{Name: "dora"} - - route := models.Route{} - route.Host = "hostname-1" - route.Domain = domain - route.Apps = []models.ApplicationFields{app1} - - route2 := models.Route{} - route2.Guid = "route2-guid" - route2.Host = "hostname-2" - route2.Domain = domain2 - - routeRepo.Routes = []models.Route{route, route2} - - ui, _ = callDeleteOrphanedRoutes("y", []string{}, reqFactory, routeRepo) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really delete orphaned routes"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting route", "hostname-2.cookieclicker.co"}, - []string{"OK"}, - )) - Expect(routeRepo.DeletedRouteGuids).To(ContainElement("route2-guid")) - }) - - It("passes when the force flag is used", func() { - var ui *testterm.FakeUI - domain := models.DomainFields{Name: "example.com"} - domain2 := models.DomainFields{Name: "cookieclicker.co"} - - app1 := models.ApplicationFields{Name: "dora"} - - route := models.Route{} - route.Host = "hostname-1" - route.Domain = domain - route.Apps = []models.ApplicationFields{app1} - - route2 := models.Route{} - route2.Guid = "route2-guid" - route2.Host = "hostname-2" - route2.Domain = domain2 - - routeRepo.Routes = []models.Route{route, route2} - - ui, _ = callDeleteOrphanedRoutes("", []string{"-f"}, reqFactory, routeRepo) - - Expect(len(ui.Prompts)).To(Equal(0)) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting route", "hostname-2.cookieclicker.co"}, - []string{"OK"}, - )) - Expect(routeRepo.DeletedRouteGuids).To(ContainElement("route2-guid")) - }) - }) -}) - -func callDeleteOrphanedRoutes(confirmation string, args []string, reqFactory *testreq.FakeReqFactory, routeRepo *testapi.FakeRouteRepository) (*testterm.FakeUI, bool) { - ui := &testterm.FakeUI{Inputs: []string{confirmation}} - configRepo := testconfig.NewRepositoryWithDefaults() - cmd := NewDeleteOrphanedRoutes(ui, configRepo, routeRepo) - passed := testcmd.RunCommand(cmd, args, reqFactory) - - return ui, passed -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_route.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_route.go deleted file mode 100644 index 8aacb14..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_route.go +++ /dev/null @@ -1,93 +0,0 @@ -package route - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteRoute struct { - ui terminal.UI - config core_config.Reader - routeRepo api.RouteRepository - domainReq requirements.DomainRequirement -} - -func NewDeleteRoute(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository) (cmd *DeleteRoute) { - cmd = new(DeleteRoute) - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - return -} - -func (cmd *DeleteRoute) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-route", - Description: T("Delete a route"), - Usage: T("CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - flag_helpers.NewStringFlag("n", T("Hostname")), - }, - } -} - -func (cmd *DeleteRoute) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - cmd.domainReq = requirementsFactory.NewDomainRequirement(c.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.domainReq, - } - return -} - -func (cmd *DeleteRoute) Run(c *cli.Context) { - host := c.String("n") - domainName := c.Args()[0] - - url := domainName - if host != "" { - url = host + "." + domainName - } - if !c.Bool("f") { - if !cmd.ui.ConfirmDelete("route", url) { - return - } - } - - cmd.ui.Say(T("Deleting route {{.URL}}...", map[string]interface{}{"URL": terminal.EntityNameColor(url)})) - - domain := cmd.domainReq.GetDomain() - route, apiErr := cmd.routeRepo.FindByHostAndDomain(host, domain) - - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Warn(T("Unable to delete, route '{{.URL}}' does not exist.", - map[string]interface{}{"URL": url})) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - apiErr = cmd.routeRepo.Delete(route.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_route_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_route_test.go deleted file mode 100644 index 4829079..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/delete_route_test.go +++ /dev/null @@ -1,111 +0,0 @@ -package route_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/route" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-route command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - routeRepo *testapi.FakeRouteRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"yes"}} - - routeRepo = &testapi.FakeRouteRepository{} - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - } - }) - - runCommand := func(args ...string) bool { - configRepo := testconfig.NewRepositoryWithDefaults() - cmd := NewDeleteRoute(ui, configRepo, routeRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("does not pass requirements", func() { - Expect(runCommand("-n", "my-host", "example.com")).To(BeFalse()) - }) - }) - - Context("when logged in successfully", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - route := models.Route{Guid: "route-guid"} - route.Domain = models.DomainFields{ - Guid: "domain-guid", - Name: "example.com", - } - routeRepo.FindByHostAndDomainReturns.Route = route - }) - - It("fails with usage when given zero args", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("does not fail with usage when provided with a domain", func() { - runCommand("example.com") - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - - It("does not fail with usage when provided a hostname", func() { - runCommand("-n", "my-host", "example.com") - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - - It("deletes routes when the user confirms", func() { - runCommand("-n", "my-host", "example.com") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the route my-host"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting route", "my-host.example.com"}, - []string{"OK"}, - )) - Expect(routeRepo.DeletedRouteGuids).To(Equal([]string{"route-guid"})) - }) - - It("does not prompt the user to confirm when they pass the '-f' flag", func() { - ui.Inputs = []string{} - runCommand("-f", "-n", "my-host", "example.com") - - Expect(ui.Prompts).To(BeEmpty()) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "my-host.example.com"}, - []string{"OK"}, - )) - Expect(routeRepo.DeletedRouteGuids).To(Equal([]string{"route-guid"})) - }) - - It("succeeds with a warning when the route does not exist", func() { - routeRepo.FindByHostAndDomainReturns.Error = errors.NewModelNotFoundError("Org", "not found") - - runCommand("-n", "my-host", "example.com") - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"my-host", "does not exist"})) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"OK"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/map_route.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/map_route.go deleted file mode 100644 index dd669ab..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/map_route.go +++ /dev/null @@ -1,90 +0,0 @@ -package route - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type MapRoute struct { - ui terminal.UI - config core_config.Reader - routeRepo api.RouteRepository - appReq requirements.ApplicationRequirement - domainReq requirements.DomainRequirement - routeCreator RouteCreator -} - -func NewMapRoute(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository, routeCreator RouteCreator) (cmd *MapRoute) { - cmd = new(MapRoute) - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - cmd.routeCreator = routeCreator - return -} - -func (cmd *MapRoute) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "map-route", - Description: T("Add a url route to an app"), - Usage: T("CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("n", T("Hostname")), - }, - } -} - -func (cmd *MapRoute) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - domainName := c.Args()[1] - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.appReq, - cmd.domainReq, - } - return -} - -func (cmd *MapRoute) Run(c *cli.Context) { - hostName := c.String("n") - domain := cmd.domainReq.GetDomain() - app := cmd.appReq.GetApplication() - - route, apiErr := cmd.routeCreator.CreateRoute(hostName, domain, cmd.config.SpaceFields()) - if apiErr != nil { - cmd.ui.Failed(T("Error resolving route:\n{{.Err}}", map[string]interface{}{"Err": apiErr.Error()})) - } - cmd.ui.Say(T("Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "URL": terminal.EntityNameColor(route.URL()), - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr = cmd.routeRepo.Bind(route.Guid, app.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/map_route_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/map_route_test.go deleted file mode 100644 index 1dc3581..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/map_route_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package route_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/route" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("map-route command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - routeRepo *testapi.FakeRouteRepository - requirementsFactory *testreq.FakeReqFactory - routeCreator *testcmd.FakeRouteCreator - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - configRepo = testconfig.NewRepositoryWithDefaults() - routeRepo = new(testapi.FakeRouteRepository) - routeCreator = &testcmd.FakeRouteCreator{} - requirementsFactory = new(testreq.FakeReqFactory) - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewMapRoute(ui, configRepo, routeRepo, routeCreator), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not invoked with exactly two args", func() { - runCommand("whoops-all-crunchberries") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("whatever", "shuttup")).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - domain := models.DomainFields{Guid: "my-domain-guid", Name: "example.com"} - route := models.Route{Guid: "my-route-guid", Host: "foo", Domain: domain} - - app := models.Application{} - app.Guid = "my-app-guid" - app.Name = "my-app" - - requirementsFactory.LoginSuccess = true - requirementsFactory.Application = app - requirementsFactory.Domain = domain - routeCreator.ReservedRoute = route - }) - - It("maps a route, obviously", func() { - passed := runCommand("-n", "my-host", "my-app", "my-domain.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Adding route", "foo.example.com", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(routeRepo.BoundRouteGuid).To(Equal("my-route-guid")) - Expect(routeRepo.BoundAppGuid).To(Equal("my-app-guid")) - Expect(passed).To(BeTrue()) - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(requirementsFactory.DomainName).To(Equal("my-domain.com")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/route_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/route_suite_test.go deleted file mode 100644 index 4cb5f2a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/route_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package route_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestRoute(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Route Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/routes.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/routes.go deleted file mode 100644 index b3aafe4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/routes.go +++ /dev/null @@ -1,97 +0,0 @@ -package route - -import ( - . "github.com/cloudfoundry/cli/cf/i18n" - "strings" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListRoutes struct { - ui terminal.UI - routeRepo api.RouteRepository - config core_config.Reader -} - -func NewListRoutes(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository) (cmd ListRoutes) { - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - return -} - -func (cmd ListRoutes) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "routes", - ShortName: "r", - Description: T("List all routes in the current space or the current organization"), - Usage: "CF_NAME routes", - Flags: []cli.Flag{ - cli.BoolFlag{Name: "orglevel", Usage: T("List all the routes for all spaces of current organization")}, - }, - } -} - -func (cmd ListRoutes) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) ([]requirements.Requirement, error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - }, nil -} - -func (cmd ListRoutes) Run(c *cli.Context) { - cmd.ui.Say(T("Getting routes as {{.Username}} ...\n", - map[string]interface{}{"Username": terminal.EntityNameColor(cmd.config.Username())})) - - table := cmd.ui.Table([]string{T("space"), T("host"), T("domain"), T("apps")}) - - noRoutes := true - var apiErr error - flag := c.Bool("orglevel") - - if flag { - apiErr = cmd.routeRepo.ListAllRoutes(func(route models.Route) bool { - noRoutes = false - appNames := []string{} - for _, app := range route.Apps { - appNames = append(appNames, app.Name) - } - - table.Add(route.Space.Name, route.Host, route.Domain.Name, strings.Join(appNames, ",")) - return true - }) - - } else { - - apiErr = cmd.routeRepo.ListRoutes(func(route models.Route) bool { - noRoutes = false - appNames := []string{} - for _, app := range route.Apps { - appNames = append(appNames, app.Name) - } - - table.Add(route.Space.Name, route.Host, route.Domain.Name, strings.Join(appNames, ",")) - return true - }) - } - - table.Print() - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching routes.\n{{.Err}}", map[string]interface{}{"Err": apiErr.Error()})) - return - } - - if noRoutes { - cmd.ui.Say(T("No routes found")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/routes_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/routes_test.go deleted file mode 100644 index a9642f3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/routes_test.go +++ /dev/null @@ -1,154 +0,0 @@ -package route_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/route" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("routes command", func() { - var ( - ui *testterm.FakeUI - routeRepo *testapi.FakeRouteRepository - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedSpaceSuccess: true, - } - routeRepo = &testapi.FakeRouteRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewListRoutes(ui, configRepo, routeRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("login requirements", func() { - It("fails if the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).To(BeFalse()) - }) - - It("fails when an org and space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - - Expect(runCommand()).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when there are routes", func() { - BeforeEach(func() { - domain := models.DomainFields{Name: "example.com"} - domain2 := models.DomainFields{Name: "cookieclicker.co"} - - app1 := models.ApplicationFields{Name: "dora"} - app2 := models.ApplicationFields{Name: "bora"} - - route := models.Route{} - route.Host = "hostname-1" - route.Domain = domain - route.Apps = []models.ApplicationFields{app1} - - route2 := models.Route{} - route2.Host = "hostname-2" - route2.Domain = domain2 - route2.Apps = []models.ApplicationFields{app1, app2} - routeRepo.Routes = []models.Route{route, route2} - }) - - It("lists routes", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting routes", "my-user"}, - []string{"host", "domain", "apps"}, - []string{"hostname-1", "example.com", "dora"}, - []string{"hostname-2", "cookieclicker.co", "dora", "bora"}, - )) - }) - }) - - Context("when there are routes in different spaces", func() { - BeforeEach(func() { - space1 := models.SpaceFields{Name: "space-1"} - space2 := models.SpaceFields{Name: "space-2"} - - domain := models.DomainFields{Name: "example.com"} - domain2 := models.DomainFields{Name: "cookieclicker.co"} - - app1 := models.ApplicationFields{Name: "dora"} - app2 := models.ApplicationFields{Name: "bora"} - - route := models.Route{} - route.Host = "hostname-1" - route.Domain = domain - route.Apps = []models.ApplicationFields{app1} - route.Space = space1 - - route2 := models.Route{} - route2.Host = "hostname-2" - route2.Domain = domain2 - route2.Apps = []models.ApplicationFields{app1, app2} - route2.Space = space2 - routeRepo.Routes = []models.Route{route, route2} - }) - - It("lists routes at orglevel", func() { - runCommand("--orglevel") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting routes", "my-user"}, - []string{"space", "host", "domain", "apps"}, - []string{"space-1", "hostname-1", "example.com", "dora"}, - []string{"space-2", "hostname-2", "cookieclicker.co", "dora", "bora"}, - )) - }) - - }) - Context("when there are not routes", func() { - It("tells the user when no routes were found", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting routes"}, - []string{"No routes found"}, - )) - }) - }) - - Context("when there is an error listing routes", func() { - BeforeEach(func() { - routeRepo.ListErr = true - }) - - It("returns an error to the user", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting routes"}, - []string{"FAILED"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/unmap_route.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/unmap_route.go deleted file mode 100644 index 47c10a2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/unmap_route.go +++ /dev/null @@ -1,98 +0,0 @@ -package route - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnmapRoute struct { - ui terminal.UI - config core_config.Reader - routeRepo api.RouteRepository - appReq requirements.ApplicationRequirement - domainReq requirements.DomainRequirement -} - -func NewUnmapRoute(ui terminal.UI, config core_config.Reader, routeRepo api.RouteRepository) (cmd *UnmapRoute) { - cmd = new(UnmapRoute) - cmd.ui = ui - cmd.config = config - cmd.routeRepo = routeRepo - return -} - -func (cmd *UnmapRoute) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unmap-route", - Description: T("Remove a url route from an app"), - Usage: T("CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("n", T("Hostname")), - }, - } -} - -func (cmd *UnmapRoute) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - domainName := c.Args()[1] - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.appReq, - cmd.domainReq, - } - return -} - -func (cmd *UnmapRoute) Run(c *cli.Context) { - hostName := c.String("n") - domain := cmd.domainReq.GetDomain() - app := cmd.appReq.GetApplication() - - route, apiErr := cmd.routeRepo.FindByHostAndDomain(hostName, domain) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - cmd.ui.Say(T("Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "URL": terminal.EntityNameColor(route.URL()), - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - var routeFound bool - for _, routeApp := range route.Apps { - if routeApp.Guid == app.Guid { - routeFound = true - apiErr = cmd.routeRepo.Unbind(route.Guid, app.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - } - } - cmd.ui.Ok() - - if !routeFound { - cmd.ui.Warn(T("\nRoute to be unmapped is not currently mapped to the application.")) - } - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/unmap_route_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/unmap_route_test.go deleted file mode 100644 index 7229610..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/route/unmap_route_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package route_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/route" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("unmap-route command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - routeRepo *testapi.FakeRouteRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - configRepo = testconfig.NewRepositoryWithDefaults() - routeRepo = new(testapi.FakeRouteRepository) - requirementsFactory = new(testreq.FakeReqFactory) - }) - - runCommand := func(args ...string) bool { - cmd := NewUnmapRoute(ui, configRepo, routeRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when the user is not logged in", func() { - It("fails requirements", func() { - Expect(runCommand("my-app", "some-domain.com")).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when the user does not provide two args", func() { - It("fails with usage", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user provides an app and a domain", func() { - BeforeEach(func() { - requirementsFactory.Application = models.Application{ - ApplicationFields: models.ApplicationFields{ - Guid: "my-app-guid", - Name: "my-app", - }, - Routes: []models.RouteSummary{ - models.RouteSummary{ - Guid: "my-route-guid", - }, - }, - } - - requirementsFactory.Domain = models.DomainFields{ - Guid: "my-domain-guid", - Name: "example.com", - } - routeRepo.FindByHostAndDomainReturns.Route = models.Route{ - Domain: requirementsFactory.Domain, - Guid: "my-route-guid", - Host: "foo", - Apps: []models.ApplicationFields{ - models.ApplicationFields{ - Guid: "my-app-guid", - Name: "my-app", - }, - }, - } - }) - - It("passes requirements", func() { - Expect(runCommand("-n", "my-host", "my-app", "my-domain.com")).To(BeTrue()) - }) - - It("reads the app and domain from its requirements", func() { - runCommand("-n", "my-host", "my-app", "my-domain.com") - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(requirementsFactory.DomainName).To(Equal("my-domain.com")) - }) - - It("unmaps the route", func() { - runCommand("-n", "my-host", "my-app", "my-domain.com") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing route", "foo.example.com", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).ToNot(ContainSubstrings( - []string{"Route to be unmapped is not currently mapped to the application."}, - )) - - Expect(routeRepo.UnboundRouteGuid).To(Equal("my-route-guid")) - Expect(routeRepo.UnboundAppGuid).To(Equal("my-app-guid")) - }) - - Context("when the route does not exist for the app", func() { - BeforeEach(func() { - requirementsFactory.Application = models.Application{ - ApplicationFields: models.ApplicationFields{ - Guid: "not-my-app-guid", - Name: "my-app", - }, - Routes: []models.RouteSummary{ - models.RouteSummary{ - Guid: "my-route-guid", - }, - }, - } - }) - - It("informs the user the route did not exist on the applicaiton", func() { - runCommand("-n", "my-host", "my-app", "my-domain.com") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing route", "foo.example.com", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings( - []string{"Route to be unmapped is not currently mapped to the application."}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_running_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_running_security_group.go deleted file mode 100644 index 439a67f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_running_security_group.go +++ /dev/null @@ -1,75 +0,0 @@ -package securitygroup - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running" - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type bindToRunningGroup struct { - ui terminal.UI - configRepo core_config.Reader - securityGroupRepo security_groups.SecurityGroupRepo - runningGroupRepo running.RunningSecurityGroupsRepo -} - -func NewBindToRunningGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo, runningGroupRepo running.RunningSecurityGroupsRepo) command.Command { - return &bindToRunningGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - runningGroupRepo: runningGroupRepo, - } -} - -func (cmd *bindToRunningGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME bind-running-security-group SECURITY_GROUP") - tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") - return command_metadata.CommandMetadata{ - Name: "bind-running-security-group", - Description: T("Bind a security group to the list of security groups to be used for running applications"), - Usage: strings.Join([]string{primaryUsage, tipUsage}, "\n\n"), - } -} - -func (cmd *bindToRunningGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd *bindToRunningGroup) Run(context *cli.Context) { - name := context.Args()[0] - - securityGroup, err := cmd.securityGroupRepo.Read(name) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Say(T("Binding security group {{.security_group}} to defaults for running as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(securityGroup.Name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - err = cmd.runningGroupRepo.BindToRunningSet(securityGroup.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("\n\n") - cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_running_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_running_security_group_test.go deleted file mode 100644 index 373a78d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_running_security_group_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package securitygroup_test - -import ( - "errors" - - fakeRunning "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/fakes" - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("bind-running-security-group command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - fakeSecurityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - fakeRunningSecurityGroupRepo *fakeRunning.FakeRunningSecurityGroupsRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - fakeSecurityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - fakeRunningSecurityGroupRepo = &fakeRunning.FakeRunningSecurityGroupsRepo{} - }) - - runCommand := func(args ...string) bool { - cmd := NewBindToRunningGroup(ui, configRepo, fakeSecurityGroupRepo, fakeRunningSecurityGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("name")).To(BeFalse()) - }) - - It("fails with usage when a name is not provided", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in and provides the name of a group", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - group := models.SecurityGroup{} - group.Guid = "being-a-guid" - group.Name = "security-group-name" - fakeSecurityGroupRepo.ReadReturns(group, nil) - }) - - JustBeforeEach(func() { - runCommand("security-group-name") - }) - - It("Describes what it is doing to the user", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding", "security-group-name", "as", "my-user"}, - []string{"OK"}, - []string{"TIP: Changes will not apply to existing running applications until they are restarted."}, - )) - }) - - It("binds the group to the running group set", func() { - Expect(fakeSecurityGroupRepo.ReadArgsForCall(0)).To(Equal("security-group-name")) - Expect(fakeRunningSecurityGroupRepo.BindToRunningSetArgsForCall(0)).To(Equal("being-a-guid")) - }) - - Context("when binding the security group to the running set fails", func() { - BeforeEach(func() { - fakeRunningSecurityGroupRepo.BindToRunningSetReturns(errors.New("WOAH. I know kung fu")) - }) - - It("fails and describes the failure to the user", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"WOAH. I know kung fu"}, - )) - }) - }) - - Context("when the security group with the given name cannot be found", func() { - BeforeEach(func() { - fakeSecurityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.New("Crème insufficiently brûlée'd")) - }) - - It("fails and tells the user that the security group does not exist", func() { - Expect(fakeRunningSecurityGroupRepo.BindToRunningSetCallCount()).To(Equal(0)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_security_group.go deleted file mode 100644 index 5b9dbc5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_security_group.go +++ /dev/null @@ -1,103 +0,0 @@ -package securitygroup - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/security_groups" - sgbinder "github.com/cloudfoundry/cli/cf/api/security_groups/spaces" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type BindSecurityGroup struct { - ui terminal.UI - configRepo core_config.Reader - orgRepo organizations.OrganizationRepository - spaceRepo spaces.SpaceRepository - securityGroupRepo security_groups.SecurityGroupRepo - spaceBinder sgbinder.SecurityGroupSpaceBinder -} - -func NewBindSecurityGroup( - ui terminal.UI, - configRepo core_config.Reader, - securityGroupRepo security_groups.SecurityGroupRepo, - spaceRepo spaces.SpaceRepository, - orgRepo organizations.OrganizationRepository, - spaceBinder sgbinder.SecurityGroupSpaceBinder, -) BindSecurityGroup { - return BindSecurityGroup{ - ui: ui, - configRepo: configRepo, - spaceRepo: spaceRepo, - orgRepo: orgRepo, - securityGroupRepo: securityGroupRepo, - spaceBinder: spaceBinder, - } -} - -func (cmd BindSecurityGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME bind-security-group SECURITY_GROUP ORG SPACE") - tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") - return command_metadata.CommandMetadata{ - Name: "bind-security-group", - Description: T("Bind a security group to a space"), - Usage: strings.Join([]string{primaryUsage, tipUsage}, "\n\n"), - } -} - -func (cmd BindSecurityGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) (reqs []requirements.Requirement, err error) { - if len(context.Args()) != 3 { - cmd.ui.FailWithUsage(context) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - return -} - -func (cmd BindSecurityGroup) Run(context *cli.Context) { - securityGroupName := context.Args()[0] - orgName := context.Args()[1] - spaceName := context.Args()[2] - - cmd.ui.Say(T("Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - map[string]interface{}{ - "security_group": securityGroupName, - "space": spaceName, - "organization": orgName, - "username": cmd.configRepo.Username(), - })) - - securityGroup, err := cmd.securityGroupRepo.Read(securityGroupName) - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - org, err := cmd.orgRepo.FindByName(orgName) - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - space, err := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - err = cmd.spaceBinder.BindSpace(securityGroup.Guid, space.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("\n\n") - cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_security_group_test.go deleted file mode 100644 index d6ed310..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_security_group_test.go +++ /dev/null @@ -1,164 +0,0 @@ -package securitygroup_test - -import ( - "github.com/cloudfoundry/cli/cf/api/fakes" - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - zoidberg "github.com/cloudfoundry/cli/cf/api/security_groups/spaces/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("bind-security-group command", func() { - var ( - ui *testterm.FakeUI - cmd BindSecurityGroup - configRepo core_config.ReadWriter - fakeSecurityGroupRepo *testapi.FakeSecurityGroupRepo - requirementsFactory *testreq.FakeReqFactory - fakeSpaceRepo *fakes.FakeSpaceRepository - fakeOrgRepo *test_org.FakeOrganizationRepository - fakeSpaceBinder *zoidberg.FakeSecurityGroupSpaceBinder - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - fakeOrgRepo = &test_org.FakeOrganizationRepository{} - fakeSpaceRepo = &fakes.FakeSpaceRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - fakeSecurityGroupRepo = &testapi.FakeSecurityGroupRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - fakeSpaceBinder = &zoidberg.FakeSecurityGroupSpaceBinder{} - cmd = NewBindSecurityGroup(ui, configRepo, fakeSecurityGroupRepo, fakeSpaceRepo, fakeOrgRepo, fakeSpaceBinder) - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("my-craaaaaazy-security-group", "my-org", "my-space")).To(BeFalse()) - }) - - It("succeeds when the user is logged in", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand("my-craaaaaazy-security-group", "my-org", "my-space")).To(BeTrue()) - }) - - It("fails with usage when not provided the name of a security group, org, and space", func() { - requirementsFactory.LoginSuccess = true - runCommand("one fish", "two fish", "three fish", "purple fish") - - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in and provides the name of a security group", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when a security group with that name does not exist", func() { - BeforeEach(func() { - fakeSecurityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.NewModelNotFoundError("security group", "my-nonexistent-security-group")) - }) - - It("fails and tells the user", func() { - runCommand("my-nonexistent-security-group", "my-org", "my-space") - - Expect(fakeSecurityGroupRepo.ReadArgsForCall(0)).To(Equal("my-nonexistent-security-group")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"security group", "my-nonexistent-security-group", "not found"}, - )) - }) - }) - - Context("when the org does not exist", func() { - BeforeEach(func() { - fakeOrgRepo.FindByNameReturns(models.Organization{}, errors.New("Org org not found")) - }) - - It("fails and tells the user", func() { - runCommand("sec group", "org", "space") - - Expect(fakeOrgRepo.FindByNameArgsForCall(0)).To(Equal("org")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Org", "org", "not found"}, - )) - }) - }) - - Context("when the space does not exist", func() { - BeforeEach(func() { - org := models.Organization{} - org.Name = "org-name" - org.Guid = "org-guid" - fakeOrgRepo.ListOrgsReturns([]models.Organization{org}, nil) - fakeOrgRepo.FindByNameReturns(org, nil) - fakeSpaceRepo.FindByNameInOrgError = errors.NewModelNotFoundError("Space", "space-name") - }) - - It("fails and tells the user", func() { - runCommand("sec group", "org-name", "space-name") - - Expect(fakeSpaceRepo.FindByNameInOrgName).To(Equal("space-name")) - Expect(fakeSpaceRepo.FindByNameInOrgOrgGuid).To(Equal("org-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Space", "space-name", "not found"}, - )) - }) - }) - - Context("everything is hunky dory", func() { - BeforeEach(func() { - org := models.Organization{} - org.Name = "org-name" - org.Guid = "org-guid" - fakeOrgRepo.ListOrgsReturns([]models.Organization{org}, nil) - - space := models.Space{} - space.Name = "space-name" - space.Guid = "space-guid" - fakeSpaceRepo.FindByNameInOrgSpace = space - - securityGroup := models.SecurityGroup{} - securityGroup.Name = "security-group" - securityGroup.Guid = "security-group-guid" - fakeSecurityGroupRepo.ReadReturns(securityGroup, nil) - }) - - JustBeforeEach(func() { - runCommand("security-group", "org-name", "space-name") - }) - - It("assigns the security group to the space", func() { - secGroupGuid, spaceGuid := fakeSpaceBinder.BindSpaceArgsForCall(0) - Expect(secGroupGuid).To(Equal("security-group-guid")) - Expect(spaceGuid).To(Equal("space-guid")) - }) - - It("describes what it is doing for the user's benefit", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning security group security-group to space space-name in org org-name as my-user"}, - []string{"OK"}, - []string{"TIP: Changes will not apply to existing running applications until they are restarted."}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_staging_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_staging_security_group.go deleted file mode 100644 index d02ad3a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_staging_security_group.go +++ /dev/null @@ -1,69 +0,0 @@ -package securitygroup - -import ( - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging" - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type bindToStagingGroup struct { - ui terminal.UI - configRepo core_config.Reader - securityGroupRepo security_groups.SecurityGroupRepo - stagingGroupRepo staging.StagingSecurityGroupsRepo -} - -func NewBindToStagingGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo, stagingGroupRepo staging.StagingSecurityGroupsRepo) command.Command { - return &bindToStagingGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - stagingGroupRepo: stagingGroupRepo, - } -} - -func (cmd *bindToStagingGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "bind-staging-security-group", - Description: T("Bind a security group to the list of security groups to be used for staging applications"), - Usage: T("CF_NAME bind-staging-security-group SECURITY_GROUP"), - } -} - -func (cmd *bindToStagingGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd *bindToStagingGroup) Run(context *cli.Context) { - name := context.Args()[0] - - securityGroup, err := cmd.securityGroupRepo.Read(name) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Say(T("Binding security group {{.security_group}} to staging as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(securityGroup.Name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - err = cmd.stagingGroupRepo.BindToStagingSet(securityGroup.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_staging_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_staging_security_group_test.go deleted file mode 100644 index ef25de4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/bind_staging_security_group_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package securitygroup_test - -import ( - "errors" - - fakeStaging "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/fakes" - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("bind-staging-security-group command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - fakeSecurityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - fakeStagingSecurityGroupRepo *fakeStaging.FakeStagingSecurityGroupsRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - fakeSecurityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - fakeStagingSecurityGroupRepo = &fakeStaging.FakeStagingSecurityGroupsRepo{} - }) - - runCommand := func(args ...string) bool { - cmd := NewBindToStagingGroup(ui, configRepo, fakeSecurityGroupRepo, fakeStagingSecurityGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("name")).To(BeFalse()) - }) - - It("fails with usage when a name is not provided", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in and provides the name of a group", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - group := models.SecurityGroup{} - group.Guid = "just-pretend-this-is-a-guid" - group.Name = "a-security-group-name" - fakeSecurityGroupRepo.ReadReturns(group, nil) - }) - - JustBeforeEach(func() { - runCommand("a-security-group-name") - }) - - It("binds the group to the default staging group set", func() { - Expect(fakeSecurityGroupRepo.ReadArgsForCall(0)).To(Equal("a-security-group-name")) - Expect(fakeStagingSecurityGroupRepo.BindToStagingSetArgsForCall(0)).To(Equal("just-pretend-this-is-a-guid")) - }) - - It("describes what it's doing to the user", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding", "a-security-group-name", "as", "my-user"}, - []string{"OK"}, - )) - }) - - Context("when binding the security group to the default set fails", func() { - BeforeEach(func() { - fakeStagingSecurityGroupRepo.BindToStagingSetReturns(errors.New("WOAH. I know kung fu")) - }) - - It("fails and describes the failure to the user", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"WOAH. I know kung fu"}, - )) - }) - }) - - Context("when the security group with the given name cannot be found", func() { - BeforeEach(func() { - fakeSecurityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.New("Crème insufficiently brûlée'd")) - }) - - It("fails and tells the user that the security group does not exist", func() { - Expect(fakeStagingSecurityGroupRepo.BindToStagingSetCallCount()).To(Equal(0)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/create_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/create_security_group.go deleted file mode 100644 index 81005e8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/create_security_group.go +++ /dev/null @@ -1,104 +0,0 @@ -package securitygroup - -import ( - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/json" - "github.com/codegangsta/cli" -) - -type CreateSecurityGroup struct { - ui terminal.UI - securityGroupRepo security_groups.SecurityGroupRepo - configRepo core_config.Reader -} - -func NewCreateSecurityGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo) CreateSecurityGroup { - return CreateSecurityGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - } -} - -func (cmd CreateSecurityGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE") - secondaryUsage := T(` The provided path can be an absolute or relative path to a file. The file should have - a single array with JSON objects inside describing the rules. The JSON Base Object is - omitted and only the square brackets and associated child object are required in the file. - - Valid json file example: - [ - { - "protocol": "tcp", - "destination": "10.244.1.18", - "ports": "3306" - } - ]`) - - return command_metadata.CommandMetadata{ - Name: "create-security-group", - Description: T("Create a security group"), - Usage: strings.Join([]string{primaryUsage, secondaryUsage}, "\n\n"), - } -} - -func (cmd CreateSecurityGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 2 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd CreateSecurityGroup) Run(context *cli.Context) { - name := context.Args()[0] - pathToJSONFile := context.Args()[1] - rules, err := json.ParseJsonArray(pathToJSONFile) - if err != nil { - cmd.ui.Failed(T(`Incorrect json format: file: {{.JSONFile}} - -Valid json file example: -[ - { - "protocol": "tcp", - "destination": "10.244.1.18", - "ports": "3306" - } -]`, map[string]interface{}{"JSONFile": pathToJSONFile})) - } - - cmd.ui.Say(T("Creating security group {{.security_group}} as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - err = cmd.securityGroupRepo.Create(name, rules) - - httpErr, ok := err.(errors.HttpError) - if ok && httpErr.ErrorCode() == errors.SECURITY_GROUP_EXISTS { - cmd.ui.Ok() - cmd.ui.Warn(T("Security group {{.security_group}} {{.error_message}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "error_message": terminal.WarningColor(T("already exists")), - })) - return - } - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/create_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/create_security_group_test.go deleted file mode 100644 index 690008b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/create_security_group_test.go +++ /dev/null @@ -1,136 +0,0 @@ -package securitygroup_test - -import ( - "io/ioutil" - "os" - - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-security-group command", func() { - var ( - ui *testterm.FakeUI - securityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - securityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewCreateSecurityGroup(ui, configRepo, securityGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("the-security-group")).To(BeFalse()) - }) - - It("fails with usage when a name is not provided", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails with usage when a rules file is not provided", func() { - requirementsFactory.LoginSuccess = true - runCommand("AWESOME_SECURITY_GROUP_NAME") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in", func() { - var tempFile *os.File - - BeforeEach(func() { - tempFile, _ = ioutil.TempFile("", "") - requirementsFactory.LoginSuccess = true - }) - - AfterEach(func() { - tempFile.Close() - os.Remove(tempFile.Name()) - }) - - JustBeforeEach(func() { - runCommand("my-group", tempFile.Name()) - }) - - Context("when the file specified has valid json", func() { - BeforeEach(func() { - tempFile.Write([]byte(`[{"protocol":"udp","ports":"8080-9090","destination":"198.41.191.47/1"}]`)) - }) - - It("displays a message describing what its going to do", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating security group", "my-group", "my-user"}, - []string{"OK"}, - )) - }) - - It("creates the security group with those rules", func() { - _, rules := securityGroupRepo.CreateArgsForCall(0) - Expect(rules).To(Equal([]map[string]interface{}{ - {"protocol": "udp", "ports": "8080-9090", "destination": "198.41.191.47/1"}, - })) - }) - - Context("when the API returns an error", func() { - Context("some sort of awful terrible error that we were not prescient enough to anticipate", func() { - BeforeEach(func() { - securityGroupRepo.CreateReturns(errors.New("Wops I failed")) - }) - - It("fails loudly", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating security group", "my-group"}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the group already exists", func() { - BeforeEach(func() { - securityGroupRepo.CreateReturns(errors.NewHttpError(400, "300005", "The security group is taken: my-group")) - }) - - It("warns the user when group already exists", func() { - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"already exists"})) - }) - }) - }) - }) - - Context("when the file specified has invalid json", func() { - BeforeEach(func() { - tempFile.Write([]byte(`[{noquote: thiswontwork}]`)) - }) - - It("freaks out", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Incorrect json format: file:", tempFile.Name()}, - []string{"Valid json file exampl"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/delete_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/delete_security_group.go deleted file mode 100644 index dc14760..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/delete_security_group.go +++ /dev/null @@ -1,80 +0,0 @@ -package securitygroup - -import ( - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteSecurityGroup struct { - ui terminal.UI - securityGroupRepo security_groups.SecurityGroupRepo - configRepo core_config.Reader -} - -func NewDeleteSecurityGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo) DeleteSecurityGroup { - return DeleteSecurityGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - } -} - -func (cmd DeleteSecurityGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-security-group", - Description: T("Deletes a security group"), - Usage: T("CF_NAME delete-security-group SECURITY_GROUP [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd DeleteSecurityGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd DeleteSecurityGroup) Run(context *cli.Context) { - name := context.Args()[0] - cmd.ui.Say(T("Deleting security group {{.security_group}} as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - if !context.Bool("f") { - response := cmd.ui.ConfirmDelete(T("security group"), name) - if !response { - return - } - } - - group, err := cmd.securityGroupRepo.Read(name) - switch err.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Security group {{.security_group}} does not exist", map[string]interface{}{"security_group": name})) - return - default: - cmd.ui.Failed(err.Error()) - } - - err = cmd.securityGroupRepo.Delete(group.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/delete_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/delete_security_group_test.go deleted file mode 100644 index ac9b408..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/delete_security_group_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package securitygroup_test - -import ( - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-security-group command", func() { - var ( - ui *testterm.FakeUI - securityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - securityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteSecurityGroup(ui, configRepo, securityGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("should fail if not logged in", func() { - Expect(runCommand("my-group")).To(BeFalse()) - }) - - It("should fail with usage when not provided a single argument", func() { - requirementsFactory.LoginSuccess = true - runCommand("whoops", "I can't believe", "I accidentally", "the whole thing") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when the group with the given name exists", func() { - BeforeEach(func() { - securityGroupRepo.ReadReturns(models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "my-group", - Guid: "group-guid", - }, - }, nil) - }) - - Context("delete a security group", func() { - It("when passed the -f flag", func() { - runCommand("-f", "my-group") - Expect(securityGroupRepo.ReadArgsForCall(0)).To(Equal("my-group")) - Expect(securityGroupRepo.DeleteArgsForCall(0)).To(Equal("group-guid")) - - Expect(ui.Prompts).To(BeEmpty()) - }) - - It("should prompt user when -f flag is not present", func() { - ui.Inputs = []string{"y"} - - runCommand("my-group") - Expect(securityGroupRepo.ReadArgsForCall(0)).To(Equal("my-group")) - Expect(securityGroupRepo.DeleteArgsForCall(0)).To(Equal("group-guid")) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really delete the security group", "my-group"}, - )) - }) - - It("should not delete when user passes 'n' to prompt", func() { - ui.Inputs = []string{"n"} - - runCommand("my-group") - Expect(securityGroupRepo.ReadCallCount()).To(Equal(0)) - Expect(securityGroupRepo.DeleteCallCount()).To(Equal(0)) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really delete the security group", "my-group"}, - )) - }) - }) - - It("tells the user what it's about to do", func() { - runCommand("-f", "my-group") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "security group", "my-group", "my-user"}, - []string{"OK"}, - )) - }) - }) - - Context("when finding the group returns an error", func() { - BeforeEach(func() { - securityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.New("pbbbbbbbbbbt")) - }) - - It("fails and tells the user", func() { - runCommand("-f", "whoops") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when a group with that name does not exist", func() { - BeforeEach(func() { - securityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.NewModelNotFoundError("Security group", "uh uh uh -- you didn't sahy the magick word")) - }) - - It("fails and tells the user", func() { - runCommand("-f", "whoop") - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"whoop", "does not exist"})) - }) - }) - - It("fails and warns the user if deleting fails", func() { - securityGroupRepo.DeleteReturns(errors.New("raspberry")) - runCommand("-f", "whoops") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/running_security_groups.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/running_security_groups.go deleted file mode 100644 index ac273fa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/running_security_groups.go +++ /dev/null @@ -1,64 +0,0 @@ -package securitygroup - -import ( - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type listRunningSecurityGroups struct { - ui terminal.UI - runningSecurityGroupRepo running.RunningSecurityGroupsRepo - configRepo core_config.Reader -} - -func NewListRunningSecurityGroups(ui terminal.UI, configRepo core_config.Reader, runningSecurityGroupRepo running.RunningSecurityGroupsRepo) listRunningSecurityGroups { - return listRunningSecurityGroups{ - ui: ui, - configRepo: configRepo, - runningSecurityGroupRepo: runningSecurityGroupRepo, - } -} - -func (cmd listRunningSecurityGroups) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "running-security-groups", - Description: T("List security groups in the set of security groups for running applications"), - Usage: "CF_NAME running-security-groups", - } -} - -func (cmd listRunningSecurityGroups) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 0 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd listRunningSecurityGroups) Run(context *cli.Context) { - cmd.ui.Say(T("Acquiring running security groups as '{{.username}}'", map[string]interface{}{ - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - defaultSecurityGroupsFields, err := cmd.runningSecurityGroupRepo.List() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if len(defaultSecurityGroupsFields) > 0 { - for _, value := range defaultSecurityGroupsFields { - cmd.ui.Say(value.Name) - } - } else { - cmd.ui.Say(T("No running security groups set")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/running_security_groups_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/running_security_groups_test.go deleted file mode 100644 index 8cea9f9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/running_security_groups_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package securitygroup_test - -import ( - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - - testapi "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Running-security-groups command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - fakeRunningSecurityGroupRepo *testapi.FakeRunningSecurityGroupsRepo - cmd command.Command - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - fakeRunningSecurityGroupRepo = &testapi.FakeRunningSecurityGroupsRepo{} - cmd = NewListRunningSecurityGroups(ui, configRepo, fakeRunningSecurityGroupRepo) - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) testcmd.RunCommandResult { - return testcmd.RunCommandMoreBetter(cmd, requirementsFactory, args...) - } - - Describe("requirements", func() { - It("should fail when not logged in", func() { - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when there are some security groups set in the Running group", func() { - BeforeEach(func() { - fakeRunningSecurityGroupRepo.ListReturns([]models.SecurityGroupFields{ - {Name: "hiphopopotamus"}, - {Name: "my lyrics are bottomless"}, - {Name: "steve"}, - }, nil) - }) - - It("shows the user the name of the security groups of the Running set", func() { - Expect(runCommand()).To(HaveSucceeded()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Acquiring", "security groups", "my-user"}, - []string{"hiphopopotamus"}, - []string{"my lyrics are bottomless"}, - []string{"steve"}, - )) - }) - }) - - Context("when the API returns an error", func() { - BeforeEach(func() { - fakeRunningSecurityGroupRepo.ListReturns(nil, errors.New("uh oh")) - }) - - It("fails loudly", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when there are no security groups set in the Running group", func() { - It("tells the user that there are none", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No", "security groups", "set"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_group.go deleted file mode 100644 index fa5439a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_group.go +++ /dev/null @@ -1,85 +0,0 @@ -package securitygroup - -import ( - "encoding/json" - "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ShowSecurityGroup struct { - ui terminal.UI - securityGroupRepo security_groups.SecurityGroupRepo - configRepo core_config.Reader -} - -func NewShowSecurityGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo) ShowSecurityGroup { - return ShowSecurityGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - } -} - -func (cmd ShowSecurityGroup) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "security-group", - Description: T("Show a single security group"), - Usage: T("CF_NAME security-group SECURITY_GROUP"), - } -} - -func (cmd ShowSecurityGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd ShowSecurityGroup) Run(context *cli.Context) { - name := context.Args()[0] - - cmd.ui.Say(T("Getting info for security group {{.security_group}} as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - securityGroup, err := cmd.securityGroupRepo.Read(name) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - jsonEncodedBytes, encodingErr := json.MarshalIndent(securityGroup.Rules, "\t", "\t") - if encodingErr != nil { - cmd.ui.Failed(encodingErr.Error()) - } - - cmd.ui.Ok() - table := terminal.NewTable(cmd.ui, []string{"", ""}) - table.Add(T("Name"), securityGroup.Name) - table.Add(T("Rules"), "") - table.Print() - cmd.ui.Say("\t" + string(jsonEncodedBytes)) - - cmd.ui.Say("") - - if len(securityGroup.Spaces) > 0 { - table = terminal.NewTable(cmd.ui, []string{"", T("Organization"), T("Space")}) - - for index, space := range securityGroup.Spaces { - table.Add(fmt.Sprintf("#%d", index), space.Organization.Name, space.Name) - } - table.Print() - } else { - cmd.ui.Say(T("No spaces assigned")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_group_test.go deleted file mode 100644 index 62f100d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_group_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package securitygroup_test - -import ( - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("security-group command", func() { - var ( - ui *testterm.FakeUI - securityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - securityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewShowSecurityGroup(ui, configRepo, securityGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("should fail if not logged in", func() { - Expect(runCommand("my-group")).To(BeFalse()) - }) - - It("should fail with usage when not provided a single argument", func() { - requirementsFactory.LoginSuccess = true - runCommand("whoops", "I can't believe", "I accidentally", "the whole thing") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when the group with the given name exists", func() { - BeforeEach(func() { - rulesMap := []map[string]interface{}{{"just-pretend": "that-this-is-correct"}} - securityGroup := models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "my-group", - Guid: "group-guid", - Rules: rulesMap, - }, - Spaces: []models.Space{ - { - SpaceFields: models.SpaceFields{Guid: "my-space-guid-1", Name: "space-1"}, - Organization: models.OrganizationFields{Guid: "my-org-guid-1", Name: "org-1"}, - }, - { - SpaceFields: models.SpaceFields{Guid: "my-space-guid", Name: "space-2"}, - Organization: models.OrganizationFields{Guid: "my-org-guid-1", Name: "org-2"}, - }, - }, - } - - securityGroupRepo.ReadReturns(securityGroup, nil) - }) - - It("should fetch the security group from its repo", func() { - runCommand("my-group") - Expect(securityGroupRepo.ReadArgsForCall(0)).To(Equal("my-group")) - }) - - It("tells the user what it's about to do and then shows the group", func() { - runCommand("my-group") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting", "security group", "my-group", "my-user"}, - []string{"OK"}, - []string{"Name", "my-group"}, - []string{"Rules"}, - []string{"["}, - []string{"{"}, - []string{"just-pretend", "that-this-is-correct"}, - []string{"}"}, - []string{"]"}, - []string{"#0", "org-1", "space-1"}, - []string{"#1", "org-2", "space-2"}, - )) - }) - - It("tells the user if no spaces are assigned", func() { - securityGroup := models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "my-group", - Guid: "group-guid", - Rules: []map[string]interface{}{}, - }, - Spaces: []models.Space{}, - } - - securityGroupRepo.ReadReturns(securityGroup, nil) - - runCommand("my-group") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No spaces assigned"}, - )) - }) - }) - - It("fails and warns the user if a group with that name could not be found", func() { - securityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.New("half-past-tea-time")) - runCommand("im-late!") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_groups.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_groups.go deleted file mode 100644 index d2a3470..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_groups.go +++ /dev/null @@ -1,89 +0,0 @@ -package securitygroup - -import ( - "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SecurityGroups struct { - ui terminal.UI - securityGroupRepo security_groups.SecurityGroupRepo - configRepo core_config.Reader -} - -func NewSecurityGroups(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo) SecurityGroups { - return SecurityGroups{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - } -} - -func (cmd SecurityGroups) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "security-groups", - Description: T("List all security groups"), - Usage: "CF_NAME security-groups", - } -} - -func (cmd SecurityGroups) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 0 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd SecurityGroups) Run(context *cli.Context) { - cmd.ui.Say(T("Getting security groups as {{.username}}", - map[string]interface{}{ - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - securityGroups, err := cmd.securityGroupRepo.FindAll() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if len(securityGroups) == 0 { - cmd.ui.Say(T("No security groups")) - return - } - - table := terminal.NewTable(cmd.ui, []string{"", T("Name"), T("Organization"), T("Space")}) - - for index, securityGroup := range securityGroups { - if len(securityGroup.Spaces) > 0 { - cmd.printSpaces(table, securityGroup, index) - } else { - table.Add(fmt.Sprintf("#%d", index), securityGroup.Name, "", "") - } - } - table.Print() -} - -func (cmd SecurityGroups) printSpaces(table terminal.Table, securityGroup models.SecurityGroup, index int) { - outputted_index := false - - for _, space := range securityGroup.Spaces { - if !outputted_index { - table.Add(fmt.Sprintf("#%d", index), securityGroup.Name, space.Organization.Name, space.Name) - outputted_index = true - } else { - table.Add("", securityGroup.Name, space.Organization.Name, space.Name) - } - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_groups_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_groups_test.go deleted file mode 100644 index 8c15767..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/security_groups_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package securitygroup_test - -import ( - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("list-security-groups command", func() { - var ( - ui *testterm.FakeUI - repo *fakeSecurityGroup.FakeSecurityGroupRepo - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - repo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewSecurityGroups(ui, configRepo, repo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("should fail if not logged in", func() { - Expect(runCommand()).To(BeFalse()) - }) - - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - runCommand("why am I typing here") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("tells the user what it's about to do", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting", "security groups", "my-user"}, - )) - }) - - It("handles api errors with an error message", func() { - repo.FindAllReturns([]models.SecurityGroup{}, errors.New("YO YO YO, ERROR YO")) - - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - }) - - Context("when there are no security groups", func() { - It("Should tell the user that there are no security groups", func() { - repo.FindAllReturns([]models.SecurityGroup{}, nil) - - runCommand() - Expect(ui.Outputs).To(ContainSubstrings([]string{"No security groups"})) - }) - }) - - Context("when there is at least one security group", func() { - BeforeEach(func() { - securityGroup := models.SecurityGroup{} - securityGroup.Name = "my-group" - securityGroup.Guid = "group-guid" - - repo.FindAllReturns([]models.SecurityGroup{securityGroup}, nil) - }) - - Describe("Where there are spaces assigned", func() { - BeforeEach(func() { - securityGroups := []models.SecurityGroup{ - { - SecurityGroupFields: models.SecurityGroupFields{ - Name: "my-group", - Guid: "group-guid", - }, - Spaces: []models.Space{ - { - SpaceFields: models.SpaceFields{Guid: "my-space-guid-1", Name: "space-1"}, - Organization: models.OrganizationFields{Guid: "my-org-guid-1", Name: "org-1"}, - }, - { - SpaceFields: models.SpaceFields{Guid: "my-space-guid", Name: "space-2"}, - Organization: models.OrganizationFields{Guid: "my-org-guid-2", Name: "org-2"}, - }, - }, - }, - } - - repo.FindAllReturns(securityGroups, nil) - }) - - It("lists out the security group's: name, organization and space", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting", "security group", "my-user"}, - []string{"OK"}, - []string{"#0", "my-group", "org-1", "space-1"}, - )) - - //If there is a panic in this test, it is likely due to the following - //Expectation to be false - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"#0", "my-group", "org-2", "space-2"}, - )) - }) - }) - - Describe("Where there are no spaces assigned", func() { - It("lists out the security group's: name", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting", "security group", "my-user"}, - []string{"OK"}, - []string{"#0", "my-group"}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/staging_security_groups.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/staging_security_groups.go deleted file mode 100644 index 9431201..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/staging_security_groups.go +++ /dev/null @@ -1,65 +0,0 @@ -package securitygroup - -import ( - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type listStagingSecurityGroups struct { - ui terminal.UI - stagingSecurityGroupRepo staging.StagingSecurityGroupsRepo - configRepo core_config.Reader -} - -func NewListStagingSecurityGroups(ui terminal.UI, configRepo core_config.Reader, stagingSecurityGroupRepo staging.StagingSecurityGroupsRepo) listStagingSecurityGroups { - return listStagingSecurityGroups{ - ui: ui, - configRepo: configRepo, - stagingSecurityGroupRepo: stagingSecurityGroupRepo, - } -} - -func (cmd listStagingSecurityGroups) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "staging-security-groups", - Description: T("List security groups in the staging set for applications"), - Usage: "CF_NAME staging-security-groups", - } -} - -func (cmd listStagingSecurityGroups) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 0 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd listStagingSecurityGroups) Run(context *cli.Context) { - cmd.ui.Say(T("Acquiring staging security group as {{.username}}", - map[string]interface{}{ - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - SecurityGroupsFields, err := cmd.stagingSecurityGroupRepo.List() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if len(SecurityGroupsFields) > 0 { - for _, value := range SecurityGroupsFields { - cmd.ui.Say(value.Name) - } - } else { - cmd.ui.Say(T("No staging security group set")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/staging_security_groups_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/staging_security_groups_test.go deleted file mode 100644 index af8277f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/staging_security_groups_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package securitygroup_test - -import ( - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - - testapi "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("staging-security-groups command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - fakeStagingSecurityGroupRepo *testapi.FakeStagingSecurityGroupsRepo - cmd command.Command - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - fakeStagingSecurityGroupRepo = &testapi.FakeStagingSecurityGroupsRepo{} - cmd = NewListStagingSecurityGroups(ui, configRepo, fakeStagingSecurityGroupRepo) - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) testcmd.RunCommandResult { - return testcmd.RunCommandMoreBetter(cmd, requirementsFactory, args...) - } - - Describe("requirements", func() { - It("should fail when not logged in", func() { - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when there are some security groups set for staging", func() { - BeforeEach(func() { - fakeStagingSecurityGroupRepo.ListReturns([]models.SecurityGroupFields{ - {Name: "hiphopopotamus"}, - {Name: "my lyrics are bottomless"}, - {Name: "steve"}, - }, nil) - }) - - It("shows the user the name of the security groups for staging", func() { - Expect(runCommand()).To(HaveSucceeded()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Acquiring", "staging security group", "my-user"}, - []string{"hiphopopotamus"}, - []string{"my lyrics are bottomless"}, - []string{"steve"}, - )) - }) - }) - - Context("when the API returns an error", func() { - BeforeEach(func() { - fakeStagingSecurityGroupRepo.ListReturns(nil, errors.New("uh oh")) - }) - - It("fails loudly", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when there are no security groups set for staging", func() { - It("tells the user that there are none", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No", "staging security group", "set"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/suite_test.go deleted file mode 100644 index b47502d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package securitygroup_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSecurityGroup(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "SecurityGroup Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_running_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_running_security_group.go deleted file mode 100644 index 8d085b0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_running_security_group.go +++ /dev/null @@ -1,84 +0,0 @@ -package securitygroup - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running" - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type unbindFromRunningGroup struct { - ui terminal.UI - configRepo core_config.Reader - securityGroupRepo security_groups.SecurityGroupRepo - runningGroupRepo running.RunningSecurityGroupsRepo -} - -func NewUnbindFromRunningGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo, runningGroupRepo running.RunningSecurityGroupsRepo) command.Command { - return &unbindFromRunningGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - runningGroupRepo: runningGroupRepo, - } -} - -func (cmd *unbindFromRunningGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME unbind-running-security-group SECURITY_GROUP") - tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") - return command_metadata.CommandMetadata{ - Name: "unbind-running-security-group", - Description: T("Unbind a security group from the set of security groups for running applications"), - Usage: strings.Join([]string{primaryUsage, tipUsage}, "\n\n"), - } -} - -func (cmd *unbindFromRunningGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd *unbindFromRunningGroup) Run(context *cli.Context) { - name := context.Args()[0] - - securityGroup, err := cmd.securityGroupRepo.Read(name) - switch (err).(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Security group {{.security_group}} {{.error_message}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "error_message": terminal.WarningColor(T("does not exist.")), - })) - return - default: - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Say(T("Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(securityGroup.Name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - err = cmd.runningGroupRepo.UnbindFromRunningSet(securityGroup.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - cmd.ui.Ok() - cmd.ui.Say("\n\n") - cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_running_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_running_security_group_test.go deleted file mode 100644 index 5355224..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_running_security_group_test.go +++ /dev/null @@ -1,99 +0,0 @@ -package securitygroup_test - -import ( - fakeRunningDefaults "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/running/fakes" - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("unbind-running-security-group command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - fakeSecurityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - fakeRunningSecurityGroupsRepo *fakeRunningDefaults.FakeRunningSecurityGroupsRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - fakeSecurityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - fakeRunningSecurityGroupsRepo = &fakeRunningDefaults.FakeRunningSecurityGroupsRepo{} - }) - - runCommand := func(args ...string) bool { - cmd := NewUnbindFromRunningGroup(ui, configRepo, fakeSecurityGroupRepo, fakeRunningSecurityGroupsRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("name")).To(BeFalse()) - }) - - It("fails with usage when a name is not provided", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in and provides the name of a group", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("security group exists", func() { - BeforeEach(func() { - group := models.SecurityGroup{} - group.Guid = "just-pretend-this-is-a-guid" - group.Name = "a-security-group-name" - fakeSecurityGroupRepo.ReadReturns(group, nil) - }) - - JustBeforeEach(func() { - runCommand("a-security-group-name") - }) - - It("unbinds the group from the running group set", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unbinding", "security group", "a-security-group-name", "my-user"}, - []string{"TIP: Changes will not apply to existing running applications until they are restarted."}, - []string{"OK"}, - )) - - Expect(fakeSecurityGroupRepo.ReadArgsForCall(0)).To(Equal("a-security-group-name")) - Expect(fakeRunningSecurityGroupsRepo.UnbindFromRunningSetArgsForCall(0)).To(Equal("just-pretend-this-is-a-guid")) - }) - }) - - Context("when the security group does not exist", func() { - BeforeEach(func() { - fakeSecurityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.NewModelNotFoundError("security group", "anana-qui-parle")) - }) - - It("warns the user", func() { - runCommand("anana-qui-parle") - Expect(ui.WarnOutputs).To(ContainSubstrings( - []string{"Security group", "anana-qui-parle", "does not exist"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"OK"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_security_group.go deleted file mode 100644 index e364a0b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_security_group.go +++ /dev/null @@ -1,115 +0,0 @@ -package securitygroup - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/security_groups" - sgbinder "github.com/cloudfoundry/cli/cf/api/security_groups/spaces" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnbindSecurityGroup struct { - ui terminal.UI - configRepo core_config.Reader - securityGroupRepo security_groups.SecurityGroupRepo - orgRepo organizations.OrganizationRepository - spaceRepo spaces.SpaceRepository - secBinder sgbinder.SecurityGroupSpaceBinder -} - -func NewUnbindSecurityGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo, orgRepo organizations.OrganizationRepository, spaceRepo spaces.SpaceRepository, secBinder sgbinder.SecurityGroupSpaceBinder) UnbindSecurityGroup { - return UnbindSecurityGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - orgRepo: orgRepo, - spaceRepo: spaceRepo, - secBinder: secBinder, - } -} - -func (cmd UnbindSecurityGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE") - tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") - return command_metadata.CommandMetadata{ - Name: "unbind-security-group", - Description: T("Unbind a security group from a space"), - Usage: strings.Join([]string{primaryUsage, tipUsage}, "\n\n"), - } -} - -func (cmd UnbindSecurityGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - argLength := len(context.Args()) - if argLength == 0 || argLength == 2 || argLength >= 4 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd UnbindSecurityGroup) Run(context *cli.Context) { - var spaceGuid string - secName := context.Args()[0] - - if len(context.Args()) == 1 { - spaceGuid = cmd.configRepo.SpaceFields().Guid - spaceName := cmd.configRepo.SpaceFields().Name - orgName := cmd.configRepo.OrganizationFields().Name - - cmd.flavorText(secName, orgName, spaceName) - } else { - orgName := context.Args()[1] - spaceName := context.Args()[2] - - cmd.flavorText(secName, orgName, spaceName) - - spaceGuid = cmd.lookupSpaceGuid(orgName, spaceName) - } - - securityGroup, err := cmd.securityGroupRepo.Read(secName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - secGuid := securityGroup.Guid - - err = cmd.secBinder.UnbindSpace(secGuid, spaceGuid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - cmd.ui.Ok() - cmd.ui.Say("\n\n") - cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) -} - -func (cmd UnbindSecurityGroup) flavorText(secName string, orgName string, spaceName string) { - cmd.ui.Say(T("Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(secName), - "organization": terminal.EntityNameColor(orgName), - "space": terminal.EntityNameColor(spaceName), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) -} - -func (cmd UnbindSecurityGroup) lookupSpaceGuid(orgName string, spaceName string) string { - organization, err := cmd.orgRepo.FindByName(orgName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - orgGuid := organization.Guid - - space, err := cmd.spaceRepo.FindByNameInOrg(spaceName, orgGuid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - return space.Guid -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_security_group_test.go deleted file mode 100644 index fc72017..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_security_group_test.go +++ /dev/null @@ -1,136 +0,0 @@ -package securitygroup_test - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - fake_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - fakeBinder "github.com/cloudfoundry/cli/cf/api/security_groups/spaces/fakes" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("unbind-security-group command", func() { - var ( - ui *testterm.FakeUI - securityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - orgRepo *fake_org.FakeOrganizationRepository - spaceRepo *fakes.FakeSpaceRepository - secBinder *fakeBinder.FakeSecurityGroupSpaceBinder - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - securityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - orgRepo = &fake_org.FakeOrganizationRepository{} - spaceRepo = &fakes.FakeSpaceRepository{} - secBinder = &fakeBinder.FakeSecurityGroupSpaceBinder{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewUnbindSecurityGroup(ui, configRepo, securityGroupRepo, orgRepo, spaceRepo, secBinder) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("should fail if not logged in", func() { - Expect(runCommand("my-group")).To(BeFalse()) - }) - - It("should fail with usage when not provided with any arguments", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("should fail with usage when provided with a number of arguments that is either 2 or 4 or a number larger than 4", func() { - requirementsFactory.LoginSuccess = true - runCommand("I", "like") - Expect(ui.FailedWithUsage).To(BeTrue()) - runCommand("Turn", "down", "for", "what") - Expect(ui.FailedWithUsage).To(BeTrue()) - runCommand("My", "Very", "Excellent", "Mother", "Just", "Sat", "Under", "Nine", "ThingsThatArentPlanets") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when everything exists", func() { - BeforeEach(func() { - securityGroup := models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "my-group", - Guid: "my-group-guid", - Rules: []map[string]interface{}{}, - }, - } - - securityGroupRepo.ReadReturns(securityGroup, nil) - - orgRepo.ListOrgsReturns([]models.Organization{{ - OrganizationFields: models.OrganizationFields{ - Name: "my-org", - Guid: "my-org-guid", - }}, - }, nil) - - spaceRepo.FindByNameInOrgSpace = models.Space{SpaceFields: models.SpaceFields{Name: "my-space", Guid: "my-space-guid"}} - }) - - It("removes the security group when we only pass the security group name (using the targeted org and space)", func() { - runCommand("my-group") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unbinding security group", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - securityGroupGuid, spaceGuid := secBinder.UnbindSpaceArgsForCall(0) - Expect(securityGroupGuid).To(Equal("my-group-guid")) - Expect(spaceGuid).To(Equal("my-space-guid")) - }) - - It("removes the security group when we pass the org and space", func() { - runCommand("my-group", "my-org", "my-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unbinding security group", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - securityGroupGuid, spaceGuid := secBinder.UnbindSpaceArgsForCall(0) - Expect(securityGroupGuid).To(Equal("my-group-guid")) - Expect(spaceGuid).To(Equal("my-space-guid")) - }) - }) - - Context("when one of the things does not exist", func() { - BeforeEach(func() { - securityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.New("I accidentally the")) - }) - - It("fails with an error", func() { - runCommand("my-group", "my-org", "my-space") - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_staging_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_staging_security_group.go deleted file mode 100644 index 9eb1ddc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_staging_security_group.go +++ /dev/null @@ -1,86 +0,0 @@ -package securitygroup - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging" - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type unbindFromStagingGroup struct { - ui terminal.UI - configRepo core_config.Reader - securityGroupRepo security_groups.SecurityGroupRepo - stagingGroupRepo staging.StagingSecurityGroupsRepo -} - -func NewUnbindFromStagingGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo, stagingGroupRepo staging.StagingSecurityGroupsRepo) command.Command { - return &unbindFromStagingGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - stagingGroupRepo: stagingGroupRepo, - } -} - -func (cmd *unbindFromStagingGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME unbind-staging-security-group SECURITY_GROUP") - tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") - return command_metadata.CommandMetadata{ - Name: "unbind-staging-security-group", - Description: T("Unbind a security group from the set of security groups for staging applications"), - Usage: strings.Join([]string{primaryUsage, tipUsage}, "\n\n"), - } -} - -func (cmd *unbindFromStagingGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd *unbindFromStagingGroup) Run(context *cli.Context) { - name := context.Args()[0] - - cmd.ui.Say(T("Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - - securityGroup, err := cmd.securityGroupRepo.Read(name) - switch (err).(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Security group {{.security_group}} {{.error_message}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "error_message": terminal.WarningColor(T("does not exist.")), - })) - return - default: - cmd.ui.Failed(err.Error()) - } - - err = cmd.stagingGroupRepo.UnbindFromStagingSet(securityGroup.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("\n\n") - cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_staging_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_staging_security_group_test.go deleted file mode 100644 index 04bc522..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/unbind_staging_security_group_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package securitygroup_test - -import ( - fakeStagingDefaults "github.com/cloudfoundry/cli/cf/api/security_groups/defaults/staging/fakes" - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("unbind-staging-security-group command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - fakeSecurityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - fakeStagingSecurityGroupsRepo *fakeStagingDefaults.FakeStagingSecurityGroupsRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - fakeSecurityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - fakeStagingSecurityGroupsRepo = &fakeStagingDefaults.FakeStagingSecurityGroupsRepo{} - }) - - runCommand := func(args ...string) bool { - cmd := NewUnbindFromStagingGroup(ui, configRepo, fakeSecurityGroupRepo, fakeStagingSecurityGroupsRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("name")).To(BeFalse()) - }) - - It("fails with usage when a name is not provided", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in and provides the name of a group", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("security group exists", func() { - BeforeEach(func() { - group := models.SecurityGroup{} - group.Guid = "just-pretend-this-is-a-guid" - group.Name = "a-security-group-name" - fakeSecurityGroupRepo.ReadReturns(group, nil) - }) - - JustBeforeEach(func() { - runCommand("a-security-group-name") - }) - - It("unbinds the group from the default staging group set", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unbinding", "security group", "a-security-group-name", "my-user"}, - []string{"OK"}, - )) - - Expect(fakeSecurityGroupRepo.ReadArgsForCall(0)).To(Equal("a-security-group-name")) - Expect(fakeStagingSecurityGroupsRepo.UnbindFromStagingSetArgsForCall(0)).To(Equal("just-pretend-this-is-a-guid")) - }) - }) - - Context("when the security group does not exist", func() { - BeforeEach(func() { - fakeSecurityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.NewModelNotFoundError("security group", "anana-qui-parle")) - }) - - It("warns the user", func() { - runCommand("anana-qui-parle") - Expect(ui.WarnOutputs).To(ContainSubstrings( - []string{"Security group", "anana-qui-parle", "does not exist"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"OK"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/update_security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/update_security_group.go deleted file mode 100644 index c3cc2b1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/update_security_group.go +++ /dev/null @@ -1,76 +0,0 @@ -package securitygroup - -import ( - . "github.com/cloudfoundry/cli/cf/i18n" - "strings" - - "github.com/cloudfoundry/cli/cf/api/security_groups" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/json" - "github.com/codegangsta/cli" -) - -type UpdateSecurityGroup struct { - ui terminal.UI - securityGroupRepo security_groups.SecurityGroupRepo - configRepo core_config.Reader -} - -func NewUpdateSecurityGroup(ui terminal.UI, configRepo core_config.Reader, securityGroupRepo security_groups.SecurityGroupRepo) UpdateSecurityGroup { - return UpdateSecurityGroup{ - ui: ui, - configRepo: configRepo, - securityGroupRepo: securityGroupRepo, - } -} - -func (cmd UpdateSecurityGroup) Metadata() command_metadata.CommandMetadata { - primaryUsage := T("CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE") - secondaryUsage := T(" The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.") - tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") - return command_metadata.CommandMetadata{ - Name: "update-security-group", - Description: T("Update a security group"), - Usage: strings.Join([]string{primaryUsage, secondaryUsage, tipUsage}, "\n\n"), - } -} - -func (cmd UpdateSecurityGroup) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 2 { - cmd.ui.FailWithUsage(context) - } - - requirements := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return requirements, nil -} - -func (cmd UpdateSecurityGroup) Run(context *cli.Context) { - name := context.Args()[0] - securityGroup, err := cmd.securityGroupRepo.Read(name) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - pathToJSONFile := context.Args()[1] - rules, err := json.ParseJsonArray(pathToJSONFile) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Say(T("Updating security group {{.security_group}} as {{.username}}", - map[string]interface{}{ - "security_group": terminal.EntityNameColor(name), - "username": terminal.EntityNameColor(cmd.configRepo.Username()), - })) - err = cmd.securityGroupRepo.Update(securityGroup.Guid, rules) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() - cmd.ui.Say("\n\n") - cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/update_security_group_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/update_security_group_test.go deleted file mode 100644 index e66be50..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/securitygroup/update_security_group_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package securitygroup_test - -import ( - "io/ioutil" - "os" - - fakeSecurityGroup "github.com/cloudfoundry/cli/cf/api/security_groups/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/securitygroup" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("update-security-group command", func() { - var ( - ui *testterm.FakeUI - securityGroupRepo *fakeSecurityGroup.FakeSecurityGroupRepo - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - securityGroupRepo = &fakeSecurityGroup.FakeSecurityGroupRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := NewUpdateSecurityGroup(ui, configRepo, securityGroupRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - Expect(runCommand("the-security-group")).To(BeFalse()) - }) - - It("fails with usage when a name is not provided", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails with usage when a file path is not provided", func() { - requirementsFactory.LoginSuccess = true - runCommand("my-group-name") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in", func() { - var tempFile *os.File - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - securityGroup := models.SecurityGroup{ - SecurityGroupFields: models.SecurityGroupFields{ - Name: "my-group-name", - Guid: "my-group-guid", - }, - } - securityGroupRepo.ReadReturns(securityGroup, nil) - tempFile, _ = ioutil.TempFile("", "") - }) - - AfterEach(func() { - tempFile.Close() - os.Remove(tempFile.Name()) - }) - - JustBeforeEach(func() { - runCommand("my-group-name", tempFile.Name()) - }) - - Context("when the file specified has valid json", func() { - BeforeEach(func() { - tempFile.Write([]byte(`[{"protocol":"udp","port":"8080-9090","destination":"198.41.191.47/1"}]`)) - }) - - It("displays a message describing what its going to do", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating security group", "my-group-name", "my-user"}, - []string{"OK"}, - []string{"TIP: Changes will not apply to existing running applications until they are restarted."}, - )) - }) - - It("updates the security group with those rules, obviously", func() { - jsonData := []map[string]interface{}{ - {"protocol": "udp", "port": "8080-9090", "destination": "198.41.191.47/1"}, - } - - _, jsonArg := securityGroupRepo.UpdateArgsForCall(0) - - Expect(jsonArg).To(Equal(jsonData)) - }) - - Context("when the API returns an error", func() { - Context("some sort of awful terrible error that we were not prescient enough to anticipate", func() { - BeforeEach(func() { - securityGroupRepo.UpdateReturns(errors.New("Wops I failed")) - }) - - It("fails loudly", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating security group", "my-group-name"}, - []string{"FAILED"}, - )) - }) - }) - }) - - Context("when the file specified has invalid json", func() { - BeforeEach(func() { - tempFile.Write([]byte(`[{noquote: thiswontwork}]`)) - }) - - It("freaks out", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/bind_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/bind_service.go deleted file mode 100644 index 615d778..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/bind_service.go +++ /dev/null @@ -1,139 +0,0 @@ -package service - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/json" - "github.com/codegangsta/cli" -) - -type BindService struct { - ui terminal.UI - config core_config.Reader - serviceBindingRepo api.ServiceBindingRepository - appReq requirements.ApplicationRequirement - serviceInstanceReq requirements.ServiceInstanceRequirement -} - -type ServiceBinder interface { - BindApplication(app models.Application, serviceInstance models.ServiceInstance, paramsMap map[string]interface{}) (apiErr error) -} - -func NewBindService(ui terminal.UI, config core_config.Reader, serviceBindingRepo api.ServiceBindingRepository) (cmd *BindService) { - cmd = new(BindService) - cmd.ui = ui - cmd.config = config - cmd.serviceBindingRepo = serviceBindingRepo - return -} - -func (cmd *BindService) Metadata() command_metadata.CommandMetadata { - baseUsage := T("CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]") - paramsUsage := T(` Optionally provide service-specific configuration parameters in a valid JSON object in-line: - - CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{"name":"value","name":"value"}' - - Optionally provide a file containing service-specific configuration parameters in a valid JSON object. - The path to the parameters file can be an absolute or relative path to a file. - CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE - - Example of valid JSON object: - { - "permissions": "read-only" - }`) - exampleUsage := T(`EXAMPLE: - Linux/Mac: - CF_NAME bind-service myapp mydb -c '{"permissions":"read-only"}' - - Windows Command Line: - CF_NAME bind-service myapp mydb -c "{\"permissions\":\"read-only\"}" - - Windows PowerShell: - CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}' - - CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json`) - - return command_metadata.CommandMetadata{ - Name: "bind-service", - ShortName: "bs", - Description: T("Bind a service instance to an app"), - Usage: strings.Join([]string{baseUsage, paramsUsage, exampleUsage}, "\n\n"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("c", T("Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.")), - }, - } -} - -func (cmd *BindService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - serviceName := c.Args()[1] - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(serviceName) - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement(), cmd.appReq, cmd.serviceInstanceReq} - return -} - -func (cmd *BindService) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() - params := c.String("c") - - paramsMap, err := json.ParseJsonFromFileOrString(params) - if err != nil { - cmd.ui.Failed(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) - } - - cmd.ui.Say(T("Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name), - "AppName": terminal.EntityNameColor(app.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - err = cmd.BindApplication(app, serviceInstance, paramsMap) - if err != nil { - if httperr, ok := err.(errors.HttpError); ok && httperr.ErrorCode() == errors.APP_ALREADY_BOUND { - cmd.ui.Ok() - cmd.ui.Warn(T("App {{.AppName}} is already bound to {{.ServiceName}}.", - map[string]interface{}{ - "AppName": app.Name, - "ServiceName": serviceInstance.Name, - })) - return - } else { - cmd.ui.Failed(err.Error()) - } - } - - cmd.ui.Ok() - cmd.ui.Say(T("TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - map[string]interface{}{"CFCommand": terminal.CommandColor(cf.Name() + " restage"), "AppName": app.Name})) -} - -func (cmd *BindService) BindApplication(app models.Application, serviceInstance models.ServiceInstance, paramsMap map[string]interface{}) (apiErr error) { - apiErr = cmd.serviceBindingRepo.Create(serviceInstance.Guid, app.Guid, paramsMap) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/bind_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/bind_service_test.go deleted file mode 100644 index 4ed234b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/bind_service_test.go +++ /dev/null @@ -1,228 +0,0 @@ -package service_test - -import ( - "io/ioutil" - "os" - - "github.com/cloudfoundry/cli/cf/api" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("bind-service command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{} - }) - - It("fails requirements when not logged in", func() { - cmd := NewBindService(&testterm.FakeUI{}, testconfig.NewRepository(), &testapi.FakeServiceBindingRepo{}) - - Expect(testcmd.RunCommand(cmd, []string{"service", "app"}, requirementsFactory)).To(BeFalse()) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("binds a service instance to an app", func() { - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "my-service" - serviceInstance.Guid = "my-service-guid" - requirementsFactory.Application = app - requirementsFactory.ServiceInstance = serviceInstance - serviceBindingRepo := &testapi.FakeServiceBindingRepo{} - ui := callBindService([]string{"my-app", "my-service"}, requirementsFactory, serviceBindingRepo) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("my-service")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding service", "my-service", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"TIP", "my-app"}, - )) - Expect(serviceBindingRepo.CreateServiceInstanceGuid).To(Equal("my-service-guid")) - Expect(serviceBindingRepo.CreateApplicationGuid).To(Equal("my-app-guid")) - }) - - It("warns the user when the service instance is already bound to the given app", func() { - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "my-service" - serviceInstance.Guid = "my-service-guid" - requirementsFactory.Application = app - requirementsFactory.ServiceInstance = serviceInstance - serviceBindingRepo := &testapi.FakeServiceBindingRepo{CreateErrorCode: "90003"} - ui := callBindService([]string{"my-app", "my-service"}, requirementsFactory, serviceBindingRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding service"}, - []string{"OK"}, - []string{"my-app", "is already bound", "my-service"}, - )) - }) - - It("warns the user when the error is non HttpError ", func() { - app := models.Application{} - app.Name = "my-app1" - app.Guid = "my-app1-guid1" - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "my-service1" - serviceInstance.Guid = "my-service1-guid1" - requirementsFactory.Application = app - requirementsFactory.ServiceInstance = serviceInstance - serviceBindingRepo := &testapi.FakeServiceBindingRepo{CreateNonHttpErrCode: "1001"} - ui := callBindService([]string{"my-app1", "my-service1"}, requirementsFactory, serviceBindingRepo) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding service", "my-service", "my-app", "my-org", "my-space", "my-user"}, - []string{"FAILED"}, - []string{"1001"}, - )) - }) - - It("fails with usage when called without a service instance and app", func() { - serviceBindingRepo := &testapi.FakeServiceBindingRepo{} - - ui := callBindService([]string{"my-service"}, requirementsFactory, serviceBindingRepo) - Expect(ui.FailedWithUsage).To(BeTrue()) - - ui = callBindService([]string{"my-app"}, requirementsFactory, serviceBindingRepo) - Expect(ui.FailedWithUsage).To(BeTrue()) - - ui = callBindService([]string{"my-app", "my-service"}, requirementsFactory, serviceBindingRepo) - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - - Context("when passing arbitrary params", func() { - var ( - app models.Application - serviceInstance models.ServiceInstance - ) - - BeforeEach(func() { - app = models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - - serviceInstance = models.ServiceInstance{} - serviceInstance.Name = "my-service" - serviceInstance.Guid = "my-service-guid" - - requirementsFactory.Application = app - requirementsFactory.ServiceInstance = serviceInstance - }) - - Context("as a json string", func() { - It("successfully creates a service and passes the params as a json string", func() { - serviceBindingRepo := &testapi.FakeServiceBindingRepo{} - ui := callBindService([]string{"my-app", "my-service", "-c", `{"foo": "bar"}`}, requirementsFactory, serviceBindingRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding service", "my-service", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"TIP"}, - )) - Expect(serviceBindingRepo.CreateServiceInstanceGuid).To(Equal("my-service-guid")) - Expect(serviceBindingRepo.CreateApplicationGuid).To(Equal("my-app-guid")) - Expect(serviceBindingRepo.CreateParams).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - It("returns an error to the UI", func() { - serviceBindingRepo := &testapi.FakeServiceBindingRepo{} - ui := callBindService([]string{"my-app", "my-service", "-c", `bad-json`}, requirementsFactory, serviceBindingRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - - Context("as a file that contains json", func() { - var jsonFile *os.File - var params string - - BeforeEach(func() { - params = "{\"foo\": \"bar\"}" - }) - - AfterEach(func() { - if jsonFile != nil { - jsonFile.Close() - os.Remove(jsonFile.Name()) - } - }) - - JustBeforeEach(func() { - var err error - jsonFile, err = ioutil.TempFile("", "") - Expect(err).ToNot(HaveOccurred()) - - err = ioutil.WriteFile(jsonFile.Name(), []byte(params), os.ModePerm) - Expect(err).NotTo(HaveOccurred()) - }) - - It("successfully creates a service and passes the params as a json", func() { - serviceBindingRepo := &testapi.FakeServiceBindingRepo{} - ui := callBindService([]string{"my-app", "my-service", "-c", jsonFile.Name()}, requirementsFactory, serviceBindingRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Binding service", "my-service", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"TIP"}, - )) - Expect(serviceBindingRepo.CreateServiceInstanceGuid).To(Equal("my-service-guid")) - Expect(serviceBindingRepo.CreateApplicationGuid).To(Equal("my-app-guid")) - Expect(serviceBindingRepo.CreateParams).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - BeforeEach(func() { - params = "bad-json" - }) - - It("returns an error to the UI", func() { - serviceBindingRepo := &testapi.FakeServiceBindingRepo{} - ui := callBindService([]string{"my-app", "my-service", "-c", jsonFile.Name()}, requirementsFactory, serviceBindingRepo) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - }) - }) -}) - -func callBindService(args []string, requirementsFactory *testreq.FakeReqFactory, serviceBindingRepo api.ServiceBindingRepository) (fakeUI *testterm.FakeUI) { - fakeUI = new(testterm.FakeUI) - - config := testconfig.NewRepositoryWithDefaults() - - cmd := NewBindService(fakeUI, config, serviceBindingRepo) - testcmd.RunCommand(cmd, args, requirementsFactory) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_service.go deleted file mode 100644 index 81ba1c0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_service.go +++ /dev/null @@ -1,171 +0,0 @@ -package service - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/ui_helpers" - "github.com/cloudfoundry/cli/json" - "github.com/codegangsta/cli" -) - -type CreateService struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceBuilder service_builder.ServiceBuilder -} - -func NewCreateService(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository, serviceBuilder service_builder.ServiceBuilder) (cmd CreateService) { - cmd.ui = ui - cmd.config = config - cmd.serviceRepo = serviceRepo - cmd.serviceBuilder = serviceBuilder - return -} - -func (cmd CreateService) Metadata() command_metadata.CommandMetadata { - baseUsage := T("CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]") - paramsUsage := T(` Optionally provide service-specific configuration parameters in a valid JSON object in-line: - - CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{"name":"value","name":"value"}' - - Optionally provide a file containing service-specific configuration parameters in a valid JSON object. - The path to the parameters file can be an absolute or relative path to a file: - - CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE - - Example of valid JSON object: - { - "cluster_nodes": { - "count": 5, - "memory_mb": 1024 - } - }`) - exampleUsage := T(`EXAMPLE: - Linux/Mac: - CF_NAME create-service db-service silver -c '{"ram_gb":4}' - - Windows Command Line: - CF_NAME create-service db-service silver -c "{\"ram_gb\":4}" - - Windows PowerShell: - CF_NAME create-service db-service silver -c '{\"ram_gb\":4}' - - CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json - - CF_NAME create-service dbaas silver mydb -t "list, of, tags"`) - tipsUsage := T(`TIP: - Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps`) - return command_metadata.CommandMetadata{ - Name: "create-service", - ShortName: "cs", - Description: T("Create a service instance"), - Usage: strings.Join([]string{baseUsage, paramsUsage, exampleUsage, tipsUsage}, "\n\n"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("c", T("Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.")), - flag_helpers.NewStringFlag("t", T("User provided tags")), - }, - } -} - -func (cmd CreateService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - - return -} - -func (cmd CreateService) Run(c *cli.Context) { - serviceName := c.Args()[0] - planName := c.Args()[1] - serviceInstanceName := c.Args()[2] - params := c.String("c") - tags := c.String("t") - - tagsList := ui_helpers.ParseTags(tags) - - paramsMap, err := json.ParseJsonFromFileOrString(params) - if err != nil { - cmd.ui.Failed(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) - } - - cmd.ui.Say(T("Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceInstanceName), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - plan, err := cmd.CreateService(serviceName, planName, serviceInstanceName, paramsMap, tagsList) - - switch err.(type) { - case nil: - err := printSuccessMessageForServiceInstance(serviceInstanceName, cmd.serviceRepo, cmd.ui) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if !plan.Free { - cmd.ui.Say("") - cmd.ui.Say(T("Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - map[string]interface{}{ - "PlanName": terminal.EntityNameColor(plan.Name), - "ServiceName": terminal.EntityNameColor(serviceName), - "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName), - })) - cmd.ui.Say("") - } - case *errors.ModelAlreadyExistsError: - cmd.ui.Ok() - cmd.ui.Warn(err.Error()) - default: - cmd.ui.Failed(err.Error()) - } -} - -func (cmd CreateService) CreateService(serviceName, planName, serviceInstanceName string, params map[string]interface{}, tags []string) (models.ServicePlanFields, error) { - offerings, apiErr := cmd.serviceBuilder.GetServicesByNameForSpaceWithPlans(cmd.config.SpaceFields().Guid, serviceName) - if apiErr != nil { - return models.ServicePlanFields{}, apiErr - } - - plan, apiErr := findPlanFromOfferings(offerings, planName) - if apiErr != nil { - return plan, apiErr - } - - apiErr = cmd.serviceRepo.CreateServiceInstance(serviceInstanceName, plan.Guid, params, tags) - return plan, apiErr -} - -func findPlanFromOfferings(offerings models.ServiceOfferings, name string) (plan models.ServicePlanFields, err error) { - for _, offering := range offerings { - for _, plan := range offering.Plans { - if name == plan.Name { - return plan, nil - } - } - } - - err = errors.New(T("Could not find plan with name {{.ServicePlanName}}", - map[string]interface{}{"ServicePlanName": name}, - )) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_service_test.go deleted file mode 100644 index 051cdaa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_service_test.go +++ /dev/null @@ -1,284 +0,0 @@ -package service_test - -import ( - "fmt" - "io/ioutil" - "os" - - "github.com/cloudfoundry/cli/cf/actors/service_builder/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/service" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("create-service command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - requirementsFactory *testreq.FakeReqFactory - cmd CreateService - serviceRepo *testapi.FakeServiceRepo - serviceBuilder *fakes.FakeServiceBuilder - - offering1 models.ServiceOffering - offering2 models.ServiceOffering - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - serviceRepo = &testapi.FakeServiceRepo{} - serviceBuilder = &fakes.FakeServiceBuilder{} - cmd = NewCreateService(ui, config, serviceRepo, serviceBuilder) - - offering1 = models.ServiceOffering{} - offering1.Label = "cleardb" - offering1.Plans = []models.ServicePlanFields{{ - Name: "spark", - Guid: "cleardb-spark-guid", - Free: true, - }, { - Name: "expensive", - Guid: "luxury-guid", - Free: false, - }} - - offering2 = models.ServiceOffering{} - offering2.Label = "postgres" - - serviceBuilder.GetServicesByNameForSpaceWithPlansReturns(models.ServiceOfferings([]models.ServiceOffering{offering1, offering2}), nil) - }) - - var callCreateService = func(args []string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("passes when logged in and a space is targeted", func() { - Expect(callCreateService([]string{"cleardb", "spark", "my-cleardb-service"})).To(BeTrue()) - }) - - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(callCreateService([]string{"cleardb", "spark", "my-cleardb-service"})).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(callCreateService([]string{"cleardb", "spark", "my-cleardb-service"})).To(BeFalse()) - }) - }) - - It("successfully creates a service", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service"}) - - spaceGuid, serviceName := serviceBuilder.GetServicesByNameForSpaceWithPlansArgsForCall(0) - Expect(spaceGuid).To(Equal(config.SpaceFields().Guid)) - Expect(serviceName).To(Equal("cleardb")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Name).To(Equal("my-cleardb-service")) - Expect(serviceRepo.CreateServiceInstanceArgs.PlanGuid).To(Equal("cleardb-spark-guid")) - }) - - Context("when passing in tags", func() { - It("sucessfully creates a service and passes the tags as json", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service", "-t", "tag1, tag2,tag3, tag4"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Tags).To(ConsistOf("tag1", "tag2", "tag3", "tag4")) - }) - }) - - Context("when passing arbitrary params", func() { - Context("as a json string", func() { - It("successfully creates a service and passes the params as a json string", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service", "-c", `{"foo": "bar"}`}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Params).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - It("returns an error to the UI", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service", "-c", `bad-json`}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - - Context("as a file that contains json", func() { - var jsonFile *os.File - var params string - - BeforeEach(func() { - params = "{\"foo\": \"bar\"}" - }) - - AfterEach(func() { - if jsonFile != nil { - jsonFile.Close() - os.Remove(jsonFile.Name()) - } - }) - - JustBeforeEach(func() { - var err error - jsonFile, err = ioutil.TempFile("", "") - Expect(err).ToNot(HaveOccurred()) - - err = ioutil.WriteFile(jsonFile.Name(), []byte(params), os.ModePerm) - Expect(err).NotTo(HaveOccurred()) - }) - - It("successfully creates a service and passes the params as a json", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service", "-c", jsonFile.Name()}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Params).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - BeforeEach(func() { - params = "bad-json" - }) - - It("returns an error to the UI", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service", "-c", jsonFile.Name()}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - }) - - Context("when service creation is asynchronous", func() { - var serviceInstance models.ServiceInstance - - BeforeEach(func() { - serviceInstance = models.ServiceInstance{ - ServiceInstanceFields: models.ServiceInstanceFields{ - Name: "my-cleardb-service", - LastOperation: models.LastOperationFields{ - Type: "create", - State: "in progress", - Description: "fake service instance description", - }, - }, - } - serviceRepo.FindInstanceByNameMap = generic.NewMap() - serviceRepo.FindInstanceByNameMap.Set("my-cleardb-service", serviceInstance) - }) - - It("successfully starts async service creation", func() { - callCreateService([]string{"cleardb", "spark", "my-cleardb-service"}) - - spaceGuid, serviceName := serviceBuilder.GetServicesByNameForSpaceWithPlansArgsForCall(0) - Expect(spaceGuid).To(Equal(config.SpaceFields().Guid)) - Expect(serviceName).To(Equal("cleardb")) - - creatingServiceMessage := fmt.Sprintf("Create in progress. Use 'cf services' or 'cf service %s' to check operation status.", serviceInstance.ServiceInstanceFields.Name) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{creatingServiceMessage}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Name).To(Equal("my-cleardb-service")) - Expect(serviceRepo.CreateServiceInstanceArgs.PlanGuid).To(Equal("cleardb-spark-guid")) - }) - - It("fails when service instance could is created but cannot be found", func() { - serviceRepo.FindInstanceByNameErr = true - callCreateService([]string{"cleardb", "spark", "fake-service-instance-name"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance fake-service-instance-name in org my-org / space my-space as my-user..."}, - []string{"FAILED"}, - []string{"Error finding instance"})) - }) - }) - - Describe("warning the user about paid services", func() { - It("does not warn the user when the service is free", func() { - callCreateService([]string{"cleardb", "spark", "my-free-cleardb-service"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-free-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(ui.Outputs).NotTo(ContainSubstrings([]string{"will incurr a cost"})) - }) - - It("warns the user when the service is not free", func() { - callCreateService([]string{"cleardb", "expensive", "my-expensive-cleardb-service"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-expensive-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Attention: The plan `expensive` of service `cleardb` is not free. The instance `my-expensive-cleardb-service` will incur a cost. Contact your administrator if you think this is in error."}, - )) - }) - }) - - It("warns the user when the service already exists with the same service plan", func() { - serviceRepo.CreateServiceInstanceReturns.Error = errors.NewModelAlreadyExistsError("Service", "my-cleardb-service") - - callCreateService([]string{"cleardb", "spark", "my-cleardb-service"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service"}, - []string{"OK"}, - []string{"my-cleardb-service", "already exists"}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Name).To(Equal("my-cleardb-service")) - Expect(serviceRepo.CreateServiceInstanceArgs.PlanGuid).To(Equal("cleardb-spark-guid")) - }) - - Context("When there are multiple services with the same label", func() { - It("finds the plan even if it has to search multiple services", func() { - offering2.Label = "cleardb" - - serviceRepo.CreateServiceInstanceReturns.Error = errors.NewModelAlreadyExistsError("Service", "my-cleardb-service") - callCreateService([]string{"cleardb", "spark", "my-cleardb-service"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service instance", "my-cleardb-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(serviceRepo.CreateServiceInstanceArgs.Name).To(Equal("my-cleardb-service")) - Expect(serviceRepo.CreateServiceInstanceArgs.PlanGuid).To(Equal("cleardb-spark-guid")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_user_provided_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_user_provided_service.go deleted file mode 100644 index b278bdb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_user_provided_service.go +++ /dev/null @@ -1,112 +0,0 @@ -package service - -import ( - "encoding/json" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateUserProvidedService struct { - ui terminal.UI - config core_config.Reader - userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository -} - -func NewCreateUserProvidedService(ui terminal.UI, config core_config.Reader, userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository) (cmd CreateUserProvidedService) { - cmd.ui = ui - cmd.config = config - cmd.userProvidedServiceInstanceRepo = userProvidedServiceInstanceRepo - return -} - -func (cmd CreateUserProvidedService) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-user-provided-service", - ShortName: "cups", - Description: T("Make a user-provided service instance available to cf apps"), - Usage: T(`CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL] - - Pass comma separated credential parameter names to enable interactive mode: - CF_NAME create-user-provided-service SERVICE_INSTANCE -p "comma, separated, parameter, names" - - Pass credential parameters as JSON to create a service non-interactively: - CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{"name":"value","name":"value"}' - -EXAMPLE - CF_NAME create-user-provided-service my-db-mine -p "username, password" - CF_NAME create-user-provided-service my-drain-service -l syslog://example.com - - Linux/Mac: - CF_NAME create-user-provided-service my-db-mine -p '{"username":"admin","password":"pa55woRD"}' - - Windows Command Line - CF_NAME create-user-provided-service my-db-mine -p "{\"username\":\"admin\",\"password\":\"pa55woRD\"}" - - Windows PowerShell - CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}' -`), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Credentials")), - flag_helpers.NewStringFlag("l", T("Syslog Drain Url")), - }, - } -} - -func (cmd CreateUserProvidedService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - return -} - -func (cmd CreateUserProvidedService) Run(c *cli.Context) { - name := c.Args()[0] - drainUrl := c.String("l") - - params := c.String("p") - params = strings.Trim(params, `"`) - paramsMap := make(map[string]interface{}) - - err := json.Unmarshal([]byte(params), ¶msMap) - if err != nil && params != "" { - paramsMap = cmd.mapValuesFromPrompt(params, paramsMap) - } - - cmd.ui.Say(T("Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr := cmd.userProvidedServiceInstanceRepo.Create(name, drainUrl, paramsMap) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} - -func (cmd CreateUserProvidedService) mapValuesFromPrompt(params string, paramsMap map[string]interface{}) map[string]interface{} { - for _, param := range strings.Split(params, ",") { - param = strings.Trim(param, " ") - paramsMap[param] = cmd.ui.Ask("%s", param) - } - return paramsMap -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_user_provided_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_user_provided_service_test.go deleted file mode 100644 index e746e97..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/create_user_provided_service_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("create-user-provided-service command", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - repo *testapi.FakeUserProvidedServiceInstanceRepository - requirementsFactory *testreq.FakeReqFactory - cmd CreateUserProvidedService - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - repo = &testapi.FakeUserProvidedServiceInstanceRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - cmd = NewCreateUserProvidedService(ui, config, repo) - }) - - Describe("login requirements", func() { - It("fails if the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(testcmd.RunCommand(cmd, []string{"my-service"}, requirementsFactory)).To(BeFalse()) - }) - It("fails when a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(testcmd.RunCommand(cmd, []string{"my-service"}, requirementsFactory)).To(BeFalse()) - }) - }) - - It("creates a new user provided service given just a name", func() { - testcmd.RunCommand(cmd, []string{"my-custom-service"}, requirementsFactory) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating user provided service"}, - []string{"OK"}, - )) - }) - - It("accepts service parameters interactively", func() { - ui.Inputs = []string{"foo value", "bar value", "baz value"} - testcmd.RunCommand(cmd, []string{"-p", `"foo, bar, baz"`, "my-custom-service"}, requirementsFactory) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"foo"}, - []string{"bar"}, - []string{"baz"}, - )) - - Expect(repo.CreateCallCount()).To(Equal(1)) - name, drainUrl, params := repo.CreateArgsForCall(0) - Expect(name).To(Equal("my-custom-service")) - Expect(drainUrl).To(Equal("")) - Expect(params["foo"]).To(Equal("foo value")) - Expect(params["bar"]).To(Equal("bar value")) - Expect(params["baz"]).To(Equal("baz value")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating user provided service", "my-custom-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - }) - - It("accepts service parameters as JSON without prompting", func() { - args := []string{"-p", `{"foo": "foo value", "bar": "bar value", "baz": 4}`, "my-custom-service"} - testcmd.RunCommand(cmd, args, requirementsFactory) - - name, _, params := repo.CreateArgsForCall(0) - Expect(name).To(Equal("my-custom-service")) - - Expect(ui.Prompts).To(BeEmpty()) - Expect(params).To(Equal(map[string]interface{}{ - "foo": "foo value", - "bar": "bar value", - "baz": float64(4), - })) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating user provided service"}, - []string{"OK"}, - )) - }) - - It("creates a user provided service with a syslog drain url", func() { - args := []string{"-l", "syslog://example.com", "-p", `{"foo": "foo value", "bar": "bar value", "baz": "baz value"}`, "my-custom-service"} - testcmd.RunCommand(cmd, args, requirementsFactory) - - _, drainUrl, _ := repo.CreateArgsForCall(0) - Expect(drainUrl).To(Equal("syslog://example.com")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating user provided service"}, - []string{"OK"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/delete_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/delete_service.go deleted file mode 100644 index 061fe7c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/delete_service.go +++ /dev/null @@ -1,89 +0,0 @@ -package service - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteService struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceInstanceReq requirements.ServiceInstanceRequirement -} - -func NewDeleteService(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository) (cmd *DeleteService) { - cmd = new(DeleteService) - cmd.ui = ui - cmd.config = config - cmd.serviceRepo = serviceRepo - return -} - -func (cmd *DeleteService) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-service", - ShortName: "ds", - Description: T("Delete a service instance"), - Usage: T("CF_NAME delete-service SERVICE_INSTANCE [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return -} - -func (cmd *DeleteService) Run(c *cli.Context) { - serviceName := c.Args()[0] - - if !c.Bool("f") { - if !cmd.ui.ConfirmDelete(T("service"), serviceName) { - return - } - } - - cmd.ui.Say(T("Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceName), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - instance, apiErr := cmd.serviceRepo.FindInstanceByName(serviceName) - - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Service {{.ServiceName}} does not exist.", map[string]interface{}{"ServiceName": serviceName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - apiErr = cmd.serviceRepo.DeleteService(instance) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - apiErr = printSuccessMessageForServiceInstance(serviceName, cmd.serviceRepo, cmd.ui) - if apiErr != nil { - cmd.ui.Ok() - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/delete_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/delete_service_test.go deleted file mode 100644 index 9205f39..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/delete_service_test.go +++ /dev/null @@ -1,154 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-service command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - serviceRepo *testapi.FakeServiceRepo - serviceInstance models.ServiceInstance - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{ - Inputs: []string{"yes"}, - } - - serviceRepo = &testapi.FakeServiceRepo{} - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - } - }) - - runCommand := func(args ...string) bool { - configRepo := testconfig.NewRepositoryWithDefaults() - cmd := NewDeleteService(ui, configRepo, serviceRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("does not pass requirements", func() { - Expect(runCommand("vestigial-service")).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("fails with usage when not provided exactly one arg", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("when the service exists", func() { - Context("and the service deletion is asynchronous", func() { - BeforeEach(func() { - serviceInstance = models.ServiceInstance{} - serviceInstance.Name = "my-service" - serviceInstance.Guid = "my-service-guid" - serviceInstance.LastOperation.Type = "delete" - serviceInstance.LastOperation.State = "in progress" - serviceInstance.LastOperation.Description = "delete" - serviceRepo.FindInstanceByNameServiceInstance = serviceInstance - }) - - Context("when the command is confirmed", func() { - It("deletes the service", func() { - runCommand("my-service") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the service my-service"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service", "my-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Delete in progress. Use 'cf services' or 'cf service my-service' to check operation status."}, - )) - - Expect(serviceRepo.DeleteServiceServiceInstance).To(Equal(serviceInstance)) - }) - }) - - It("skips confirmation when the -f flag is given", func() { - runCommand("-f", "foo.com") - - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service", "foo.com"}, - []string{"OK"}, - []string{"Delete in progress. Use 'cf services' or 'cf service foo.com' to check operation status."}, - )) - }) - }) - - Context("and the service deletion is synchronous", func() { - BeforeEach(func() { - serviceInstance = models.ServiceInstance{} - serviceInstance.Name = "my-service" - serviceInstance.Guid = "my-service-guid" - serviceRepo.FindInstanceByNameServiceInstance = serviceInstance - }) - - Context("when the command is confirmed", func() { - It("deletes the service", func() { - runCommand("my-service") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the service my-service"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service", "my-service", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(serviceRepo.DeleteServiceServiceInstance).To(Equal(serviceInstance)) - }) - }) - - It("skips confirmation when the -f flag is given", func() { - runCommand("-f", "foo.com") - - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service", "foo.com"}, - []string{"OK"}, - )) - }) - }) - }) - - Context("when the service does not exist", func() { - BeforeEach(func() { - serviceRepo.FindInstanceByNameNotFound = true - }) - - It("warns the user the service does not exist", func() { - runCommand("-f", "my-service") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service", "my-service"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"my-service", "does not exist"})) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/marketplace.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/marketplace.go deleted file mode 100644 index bfaefe0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/marketplace.go +++ /dev/null @@ -1,174 +0,0 @@ -package service - -import ( - "sort" - "strings" - - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type MarketplaceServices struct { - ui terminal.UI - config core_config.Reader - serviceBuilder service_builder.ServiceBuilder -} - -func NewMarketplaceServices(ui terminal.UI, config core_config.Reader, serviceBuilder service_builder.ServiceBuilder) MarketplaceServices { - return MarketplaceServices{ - ui: ui, - config: config, - serviceBuilder: serviceBuilder, - } -} - -func (cmd MarketplaceServices) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "marketplace", - ShortName: "m", - Description: T("List available offerings in the marketplace"), - Usage: "CF_NAME marketplace", - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("s", T("Show plan details for a particular service offering")), - }, - } -} - -func (cmd MarketplaceServices) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = append(reqs, requirementsFactory.NewApiEndpointRequirement()) - return -} - -func (cmd MarketplaceServices) Run(c *cli.Context) { - serviceName := c.String("s") - - if serviceName != "" { - cmd.marketplaceByService(serviceName) - } else { - cmd.marketplace() - } -} - -func (cmd MarketplaceServices) marketplaceByService(serviceName string) { - var ( - serviceOffering models.ServiceOffering - apiErr error - ) - - if cmd.config.HasSpace() { - cmd.ui.Say(T("Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - serviceOffering, apiErr = cmd.serviceBuilder.GetServiceByNameForSpaceWithPlans(serviceName, cmd.config.SpaceFields().Guid) - } else if !cmd.config.IsLoggedIn() { - cmd.ui.Say(T("Getting service plan information for service {{.ServiceName}}...", map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceName)})) - serviceOffering, apiErr = cmd.serviceBuilder.GetServiceByNameWithPlans(serviceName) - } else { - cmd.ui.Failed(T("Cannot list plan information for {{.ServiceName}} without a targeted space", - map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceName)})) - } - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if serviceOffering.Guid == "" { - cmd.ui.Say(T("Service offering not found")) - return - } - - table := terminal.NewTable(cmd.ui, []string{T("service plan"), T("description"), T("free or paid")}) - for _, plan := range serviceOffering.Plans { - var freeOrPaid string - if plan.Free { - freeOrPaid = "free" - } else { - freeOrPaid = "paid" - } - table.Add(plan.Name, plan.Description, freeOrPaid) - } - - table.Print() -} - -func (cmd MarketplaceServices) marketplace() { - var ( - serviceOfferings models.ServiceOfferings - apiErr error - ) - - if cmd.config.HasSpace() { - cmd.ui.Say(T("Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - serviceOfferings, apiErr = cmd.serviceBuilder.GetServicesForSpaceWithPlans(cmd.config.SpaceFields().Guid) - } else if !cmd.config.IsLoggedIn() { - cmd.ui.Say(T("Getting all services from marketplace...")) - serviceOfferings, apiErr = cmd.serviceBuilder.GetAllServicesWithPlans() - } else { - cmd.ui.Failed(T("Cannot list marketplace services without a targeted space")) - } - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if len(serviceOfferings) == 0 { - cmd.ui.Say(T("No service offerings found")) - return - } - - table := terminal.NewTable(cmd.ui, []string{T("service"), T("plans"), T("description")}) - - sort.Sort(serviceOfferings) - var paidPlanExists bool - for _, offering := range serviceOfferings { - planNames := "" - - for _, plan := range offering.Plans { - if plan.Name == "" { - continue - } - if plan.Free { - planNames += ", " + plan.Name - } else { - paidPlanExists = true - planNames += ", " + plan.Name + "*" - } - } - - planNames = strings.TrimPrefix(planNames, ", ") - - table.Add(offering.Label, planNames, offering.Description) - } - - table.Print() - if paidPlanExists { - cmd.ui.Say(T("\n* These service plans have an associated cost. Creating a service instance will incur this cost.")) - } - cmd.ui.Say(T("\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/marketplace_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/marketplace_test.go deleted file mode 100644 index 46c0204..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/marketplace_test.go +++ /dev/null @@ -1,236 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/actors/service_builder/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("marketplace command", func() { - var ui *testterm.FakeUI - var requirementsFactory *testreq.FakeReqFactory - var config core_config.ReadWriter - var serviceBuilder *testapi.FakeServiceBuilder - var fakeServiceOfferings []models.ServiceOffering - var serviceWithAPaidPlan models.ServiceOffering - var service2 models.ServiceOffering - - BeforeEach(func() { - serviceBuilder = &testapi.FakeServiceBuilder{} - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{ApiEndpointSuccess: true} - - serviceWithAPaidPlan = models.ServiceOffering{ - Plans: []models.ServicePlanFields{ - models.ServicePlanFields{Name: "service-plan-a", Description: "service-plan-a description", Free: true}, - models.ServicePlanFields{Name: "service-plan-b", Description: "service-plan-b description", Free: false}, - }, - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "zzz-my-service-offering", - Guid: "service-1-guid", - Description: "service offering 1 description", - }} - service2 = models.ServiceOffering{ - Plans: []models.ServicePlanFields{ - models.ServicePlanFields{Name: "service-plan-c", Free: true}, - models.ServicePlanFields{Name: "service-plan-d", Free: true}}, - ServiceOfferingFields: models.ServiceOfferingFields{ - Label: "aaa-my-service-offering", - Description: "service offering 2 description", - }, - } - fakeServiceOfferings = []models.ServiceOffering{serviceWithAPaidPlan, service2} - }) - - Describe("Requirements", func() { - Context("when the an API endpoint is not targeted", func() { - It("does not meet its requirements", func() { - config := testconfig.NewRepository() - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - requirementsFactory.ApiEndpointSuccess = false - - Expect(testcmd.RunCommand(cmd, []string{}, requirementsFactory)).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - config := testconfig.NewRepository() - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - requirementsFactory.ApiEndpointSuccess = true - Expect(testcmd.RunCommand(cmd, []string{"blahblah"}, requirementsFactory)).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - config = testconfig.NewRepositoryWithDefaults() - }) - - Context("when the user has a space targeted", func() { - BeforeEach(func() { - config.SetSpaceFields(models.SpaceFields{ - Guid: "the-space-guid", - Name: "the-space-name", - }) - serviceBuilder.GetServicesForSpaceWithPlansReturns(fakeServiceOfferings, nil) - }) - - It("lists all of the service offerings for the space", func() { - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - args := serviceBuilder.GetServicesForSpaceWithPlansArgsForCall(0) - Expect(args).To(Equal("the-space-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting services from marketplace in org", "my-org", "the-space-name", "my-user"}, - []string{"OK"}, - []string{"service", "plans", "description"}, - []string{"aaa-my-service-offering", "service offering 2 description", "service-plan-c,", "service-plan-d"}, - []string{"zzz-my-service-offering", "service offering 1 description", "service-plan-a,", "service-plan-b*"}, - []string{"* These service plans have an associated cost. Creating a service instance will incur this cost."}, - []string{"TIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service."}, - )) - }) - - Context("when there are no paid plans", func() { - BeforeEach(func() { - serviceBuilder.GetServicesForSpaceWithPlansReturns([]models.ServiceOffering{service2}, nil) - }) - - It("lists the service offerings without displaying the paid message", func() { - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting services from marketplace in org", "my-org", "the-space-name", "my-user"}, - []string{"OK"}, - []string{"service", "plans", "description"}, - []string{"aaa-my-service-offering", "service offering 2 description", "service-plan-c", "service-plan-d"}, - )) - Expect(ui.Outputs).NotTo(ContainSubstrings( - []string{"* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred."}, - )) - }) - - }) - - Context("when the user passes the -s flag", func() { - It("Displays the list of plans for each service with info", func() { - serviceBuilder.GetServiceByNameForSpaceWithPlansReturns(serviceWithAPaidPlan, nil) - - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{"-s", "aaa-my-service-offering"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service plan information for service aaa-my-service-offering as my-user..."}, - []string{"OK"}, - []string{"service plan", "description", "free or paid"}, - []string{"service-plan-a", "service-plan-a description", "free"}, - []string{"service-plan-b", "service-plan-b description", "paid"}, - )) - }) - - It("informs the user if the service cannot be found", func() { - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{"-s", "aaa-my-service-offering"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Service offering not found"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"service plan", "description", "free or paid"}, - )) - }) - }) - }) - - Context("when the user doesn't have a space targeted", func() { - BeforeEach(func() { - config.SetSpaceFields(models.SpaceFields{}) - }) - - It("tells the user to target a space", func() { - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"without", "space"}, - )) - }) - }) - }) - - Context("when user is not logged in", func() { - BeforeEach(func() { - config = testconfig.NewRepository() - }) - - It("lists all public service offerings if any are available", func() { - serviceBuilder := &testapi.FakeServiceBuilder{} - serviceBuilder.GetAllServicesWithPlansReturns(fakeServiceOfferings, nil) - - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting all services from marketplace"}, - []string{"OK"}, - []string{"service", "plans", "description"}, - []string{"aaa-my-service-offering", "service offering 2 description", "service-plan-c", "service-plan-d"}, - []string{"zzz-my-service-offering", "service offering 1 description", "service-plan-a", "service-plan-b"}, - )) - }) - - It("does not display a table if no service offerings exist", func() { - serviceBuilder := &testapi.FakeServiceBuilder{} - serviceBuilder.GetAllServicesWithPlansReturns([]models.ServiceOffering{}, nil) - - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No service offerings found"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"service", "plans", "description"}, - )) - }) - - Context("when the user passes the -s flag", func() { - It("Displays the list of plans for each service with info", func() { - serviceBuilder.GetServiceByNameWithPlansReturns(serviceWithAPaidPlan, nil) - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{"-s", "aaa-my-service-offering"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service plan information for service aaa-my-service-offering"}, - []string{"OK"}, - []string{"service plan", "description", "free or paid"}, - []string{"service-plan-a", "service-plan-a description", "free"}, - []string{"service-plan-b", "service-plan-b description", "paid"}, - )) - }) - - It("informs the user if the service cannot be found", func() { - cmd := NewMarketplaceServices(ui, config, serviceBuilder) - testcmd.RunCommand(cmd, []string{"-s", "aaa-my-service-offering"}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Service offering not found"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"service plan", "description", "free or paid"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/migrate_service_instances.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/migrate_service_instances.go deleted file mode 100644 index 25901e4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/migrate_service_instances.go +++ /dev/null @@ -1,146 +0,0 @@ -package service - -import ( - "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/resources" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type MigrateServiceInstances struct { - ui terminal.UI - configRepo core_config.Reader - serviceRepo api.ServiceRepository -} - -func NewMigrateServiceInstances(ui terminal.UI, configRepo core_config.Reader, serviceRepo api.ServiceRepository) (cmd *MigrateServiceInstances) { - cmd = new(MigrateServiceInstances) - cmd.ui = ui - cmd.configRepo = configRepo - cmd.serviceRepo = serviceRepo - return -} - -func migrateServiceInstanceWarning() string { - return T("WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.") -} - -func (cmd *MigrateServiceInstances) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "migrate-service-instances", - Description: T("Migrate service instances from one service plan to another"), - Usage: T("CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n") + migrateServiceInstanceWarning(), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force migration without confirmation")}, - }, - } -} - -func (cmd *MigrateServiceInstances) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 5 { - cmd.ui.FailWithUsage(c) - return - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *MigrateServiceInstances) Run(c *cli.Context) { - v1 := resources.ServicePlanDescription{ - ServiceLabel: c.Args()[0], - ServiceProvider: c.Args()[1], - ServicePlanName: c.Args()[2], - } - v2 := resources.ServicePlanDescription{ - ServiceLabel: c.Args()[3], - ServicePlanName: c.Args()[4], - } - force := c.Bool("f") - - v1Guid, apiErr := cmd.serviceRepo.FindServicePlanByDescription(v1) - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Failed(T("Plan {{.ServicePlanName}} cannot be found", - map[string]interface{}{ - "ServicePlanName": terminal.EntityNameColor(v1.String()), - })) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - v2Guid, apiErr := cmd.serviceRepo.FindServicePlanByDescription(v2) - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Failed(T("Plan {{.ServicePlanName}} cannot be found", - map[string]interface{}{ - "ServicePlanName": terminal.EntityNameColor(v2.String()), - })) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - count, apiErr := cmd.serviceRepo.GetServiceInstanceCountForServicePlan(v1Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } else if count == 0 { - cmd.ui.Failed(T("Plan {{.ServicePlanName}} has no service instances to migrate", map[string]interface{}{"ServicePlanName": terminal.EntityNameColor(v1.String())})) - return - } - - cmd.ui.Warn(migrateServiceInstanceWarning()) - - serviceInstancesPhrase := pluralizeServiceInstances(count) - - if !force { - response := cmd.ui.Confirm( - T("Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?>", - map[string]interface{}{ - "ServiceInstanceDescription": serviceInstancesPhrase, - "OldServicePlanName": terminal.EntityNameColor(v1.String()), - "NewServicePlanName": terminal.EntityNameColor(v2.String()), - })) - if !response { - return - } - } - - cmd.ui.Say(T("Attempting to migrate {{.ServiceInstanceDescription}}...", map[string]interface{}{"ServiceInstanceDescription": serviceInstancesPhrase})) - - changedCount, apiErr := cmd.serviceRepo.MigrateServicePlanFromV1ToV2(v1Guid, v2Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Say(T("{{.CountOfServices}} migrated.", map[string]interface{}{"CountOfServices": pluralizeServiceInstances(changedCount)})) - cmd.ui.Ok() - - return -} - -func pluralizeServiceInstances(count int) string { - var phrase string - if count == 1 { - phrase = T("service instance") - } else { - phrase = T("service instances") - } - - return fmt.Sprintf("%d %s", count, phrase) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/migrate_service_instances_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/migrate_service_instances_test.go deleted file mode 100644 index a93e464..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/migrate_service_instances_test.go +++ /dev/null @@ -1,292 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/api/resources" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("migrating service instances from v1 to v2", func() { - var ( - ui *testterm.FakeUI - serviceRepo *testapi.FakeServiceRepo - cmd *MigrateServiceInstances - requirementsFactory *testreq.FakeReqFactory - args []string - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config := testconfig.NewRepository() - serviceRepo = &testapi.FakeServiceRepo{} - cmd = NewMigrateServiceInstances(ui, config, serviceRepo) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - args = []string{} - }) - - Describe("requirements", func() { - It("requires you to be logged in", func() { - Expect(testcmd.RunCommand(cmd, args, requirementsFactory)).To(BeFalse()) - }) - - It("requires five arguments to run", func() { - requirementsFactory.LoginSuccess = true - args = []string{"one", "two", "three"} - - Expect(testcmd.RunCommand(cmd, args, requirementsFactory)).To(BeFalse()) - }) - - It("passes requirements if user is logged in and provided five args to run", func() { - requirementsFactory.LoginSuccess = true - args = []string{"one", "two", "three", "four", "five"} - ui.Inputs = append(ui.Inputs, "no") - - Expect(testcmd.RunCommand(cmd, args, requirementsFactory)).To(BeTrue()) - }) - }) - - Describe("migrating service instances", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - args = []string{"v1-service-label", "v1-provider-name", "v1-plan-name", "v2-service-label", "v2-plan-name"} - serviceRepo.ServiceInstanceCountForServicePlan = 1 - }) - - It("displays the warning and the prompt including info about the instances and plan to migrate", func() { - ui.Inputs = []string{""} - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"WARNING:", "this operation is to replace a service broker"})) - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really migrate", "1 service instance", - "from plan", "v1-service-label", "v1-provider-name", "v1-plan-name", - "to", "v2-service-label", "v2-plan-name"}, - )) - }) - - Context("when the user confirms", func() { - BeforeEach(func() { - ui.Inputs = []string{"yes"} - }) - - Context("when the v1 and v2 service instances exists", func() { - BeforeEach(func() { - serviceRepo.FindServicePlanByDescriptionResultGuids = []string{"v1-guid", "v2-guid"} - serviceRepo.MigrateServicePlanFromV1ToV2ReturnedCount = 1 - }) - - It("makes a request to migrate the v1 service instance", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(serviceRepo.V1GuidToMigrate).To(Equal("v1-guid")) - Expect(serviceRepo.V2GuidToMigrate).To(Equal("v2-guid")) - }) - - It("finds the v1 service plan by its name, provider and service label", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - expectedV1 := resources.ServicePlanDescription{ - ServicePlanName: "v1-plan-name", - ServiceProvider: "v1-provider-name", - ServiceLabel: "v1-service-label", - } - Expect(serviceRepo.FindServicePlanByDescriptionArguments[0]).To(Equal(expectedV1)) - }) - - It("finds the v2 service plan by its name and service label", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - expectedV2 := resources.ServicePlanDescription{ - ServicePlanName: "v2-plan-name", - ServiceLabel: "v2-service-label", - } - Expect(serviceRepo.FindServicePlanByDescriptionArguments[1]).To(Equal(expectedV2)) - }) - - It("notifies the user that the migration was successful", func() { - serviceRepo.ServiceInstanceCountForServicePlan = 2 - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Attempting to migrate", "2", "service instances"}, - []string{"1", "service instance", "migrated"}, - []string{"OK"}, - )) - }) - }) - - Context("when finding the v1 plan fails", func() { - Context("because the plan does not exist", func() { - BeforeEach(func() { - serviceRepo.FindServicePlanByDescriptionResponses = []error{errors.NewModelNotFoundError("Service Plan", "")} - }) - - It("notifies the user of the failure", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Plan", "v1-service-label", "v1-provider-name", "v1-plan-name", "cannot be found"}, - )) - }) - - It("does not display the warning", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"WARNING:", "this operation is to replace a service broker"})) - }) - }) - - Context("because there was an http error", func() { - BeforeEach(func() { - serviceRepo.FindServicePlanByDescriptionResponses = []error{errors.New("uh oh")} - }) - - It("notifies the user of the failure", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"uh oh"}, - )) - }) - - It("does not display the warning", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"WARNING:", "this operation is to replace a service broker"})) - }) - }) - }) - - Context("when finding the v2 plan fails", func() { - Context("because the plan does not exist", func() { - BeforeEach(func() { - serviceRepo.FindServicePlanByDescriptionResponses = []error{nil, errors.NewModelNotFoundError("Service Plan", "")} - }) - - It("notifies the user of the failure", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Plan", "v2-service-label", "v2-plan-name", "cannot be found"}, - )) - }) - - It("does not display the warning", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"WARNING:", "this operation is to replace a service broker"})) - }) - }) - - Context("because there was an http error", func() { - BeforeEach(func() { - serviceRepo.FindServicePlanByDescriptionResponses = []error{nil, errors.New("uh oh")} - }) - - It("notifies the user of the failure", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"uh oh"}, - )) - }) - - It("does not display the warning", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"WARNING:", "this operation is to replace a service broker"})) - }) - }) - }) - - Context("when migrating the plans fails", func() { - BeforeEach(func() { - serviceRepo.MigrateServicePlanFromV1ToV2Response = errors.New("ruh roh") - }) - - It("notifies the user of the failure", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"ruh roh"}, - )) - }) - }) - - Context("when there are no instances to migrate", func() { - BeforeEach(func() { - serviceRepo.FindServicePlanByDescriptionResultGuids = []string{"v1-guid", "v2-guid"} - serviceRepo.ServiceInstanceCountForServicePlan = 0 - }) - - It("returns a meaningful error", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"no service instances to migrate"}, - )) - }) - - It("does not show the user the warning", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"WARNING:", "this operation is to replace a service broker"})) - }) - }) - - Context("when it cannot fetch the number of instances", func() { - BeforeEach(func() { - serviceRepo.ServiceInstanceCountApiResponse = errors.New("service instance fetch is very bad") - }) - - It("notifies the user of the failure", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"service instance fetch is very bad"}, - )) - }) - }) - }) - - Context("when the user does not confirm", func() { - BeforeEach(func() { - ui.Inputs = append(ui.Inputs, "no") - }) - - It("does not continue the migration", func() { - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"Migrating"})) - Expect(serviceRepo.MigrateServicePlanFromV1ToV2Called).To(BeFalse()) - }) - }) - - Context("when the user ignores confirmation using the force flag", func() { - It("does not prompt the user for confirmation", func() { - args = []string{"-f", "v1-service-label", "v1-provider-name", "v1-plan-name", "v2-service-label", "v2-plan-name"} - - testcmd.RunCommand(cmd, args, requirementsFactory) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"Really migrate"})) - Expect(serviceRepo.MigrateServicePlanFromV1ToV2Called).To(BeTrue()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/purge_service_offering.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/purge_service_offering.go deleted file mode 100644 index 63d139e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/purge_service_offering.go +++ /dev/null @@ -1,83 +0,0 @@ -package service - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type PurgeServiceOffering struct { - ui terminal.UI - serviceRepo api.ServiceRepository -} - -func (cmd PurgeServiceOffering) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - return -} - -func scaryWarningMessage() string { - return T(`WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.`) -} - -func (cmd PurgeServiceOffering) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "purge-service-offering", - Description: T("Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker"), - Usage: T("CF_NAME purge-service-offering SERVICE [-p PROVIDER]") + "\n\n" + scaryWarningMessage(), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Provider")), - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd PurgeServiceOffering) Run(c *cli.Context) { - serviceName := c.Args()[0] - - offering, apiErr := cmd.serviceRepo.FindServiceOfferingByLabelAndProvider(serviceName, c.String("p")) - - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Warn(T("Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.")) - return - default: - cmd.ui.Failed(apiErr.Error()) - } - - confirmed := c.Bool("f") - if !confirmed { - cmd.ui.Warn(scaryWarningMessage()) - confirmed = cmd.ui.Confirm(T("Really purge service offering {{.ServiceName}} from Cloud Foundry?", - map[string]interface{}{"ServiceName": serviceName}, - )) - } - - if !confirmed { - return - } - cmd.ui.Say(T("Purging service {{.ServiceName}}...", map[string]interface{}{"ServiceName": serviceName})) - err := cmd.serviceRepo.PurgeServiceOffering(offering) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} - -func NewPurgeServiceOffering(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository) (cmd PurgeServiceOffering) { - cmd.ui = ui - cmd.serviceRepo = serviceRepo - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/purge_service_offering_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/purge_service_offering_test.go deleted file mode 100644 index 14cdc53..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/purge_service_offering_test.go +++ /dev/null @@ -1,196 +0,0 @@ -package service_test - -import ( - "errors" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - cferrors "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("purge-service command", func() { - Describe("requirements", func() { - It("fails when not logged in", func() { - deps := setupDependencies() - deps.requirementsFactory.LoginSuccess = false - - cmd := NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo) - passed := testcmd.RunCommand( - cmd, - []string{"-f", "whatever"}, - deps.requirementsFactory, - ) - - Expect(passed).To(BeFalse()) - }) - - It("fails when called without exactly one arg", func() { - deps := setupDependencies() - deps.requirementsFactory.LoginSuccess = true - - passed := testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{}, - deps.requirementsFactory, - ) - - Expect(passed).To(BeFalse()) - Expect(deps.ui.FailedWithUsage).To(BeTrue()) - }) - }) - - It("works when given -p and a provider name", func() { - deps := setupDependencies() - - offering := maker.NewServiceOffering("the-service-name") - deps.serviceRepo.FindServiceOfferingByLabelAndProviderServiceOffering = offering - - deps.ui.Inputs = []string{"yes"} - - testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"-p", "the-provider", "the-service-name"}, - deps.requirementsFactory, - ) - - Expect(deps.serviceRepo.FindServiceOfferingByLabelAndProviderName).To(Equal("the-service-name")) - Expect(deps.serviceRepo.FindServiceOfferingByLabelAndProviderProvider).To(Equal("the-provider")) - Expect(deps.serviceRepo.PurgedServiceOffering).To(Equal(offering)) - }) - - It("works when not given a provider", func() { - deps := setupDependencies() - - offering := maker.NewServiceOffering("the-service-name") - deps.serviceRepo.FindServiceOfferingByLabelAndProviderServiceOffering = offering - - deps.ui.Inputs = []string{"yes"} - - testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"the-service-name"}, - deps.requirementsFactory, - ) - - Expect(deps.ui.Outputs).To(ContainSubstrings([]string{"WARNING"})) - Expect(deps.ui.Prompts).To(ContainSubstrings([]string{"Really purge service", "the-service-name"})) - Expect(deps.ui.Outputs).To(ContainSubstrings([]string{"Purging service the-service-name..."})) - - Expect(deps.serviceRepo.FindServiceOfferingByLabelAndProviderName).To(Equal("the-service-name")) - Expect(deps.serviceRepo.FindServiceOfferingByLabelAndProviderProvider).To(Equal("")) - Expect(deps.serviceRepo.PurgedServiceOffering).To(Equal(offering)) - - Expect(deps.ui.Outputs).To(ContainSubstrings([]string{"OK"})) - }) - - It("exits when the user does not acknowledge the confirmation", func() { - deps := setupDependencies() - - deps.ui.Inputs = []string{"no"} - - testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"the-service-name"}, - deps.requirementsFactory, - ) - - Expect(deps.serviceRepo.FindServiceOfferingByLabelAndProviderCalled).To(Equal(true)) - Expect(deps.serviceRepo.PurgeServiceOfferingCalled).To(Equal(false)) - }) - - It("does not prompt with confirmation when -f is passed", func() { - deps := setupDependencies() - - offering := maker.NewServiceOffering("the-service-name") - deps.serviceRepo.FindServiceOfferingByLabelAndProviderServiceOffering = offering - - testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"-f", "the-service-name"}, - deps.requirementsFactory, - ) - - Expect(len(deps.ui.Prompts)).To(Equal(0)) - Expect(deps.serviceRepo.PurgeServiceOfferingCalled).To(Equal(true)) - }) - - It("fails with an error message when the request fails", func() { - deps := setupDependencies() - - deps.serviceRepo.FindServiceOfferingByLabelAndProviderApiResponse = cferrors.NewWithError("oh no!", errors.New("!")) - - testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"-f", "-p", "the-provider", "the-service-name"}, - deps.requirementsFactory, - ) - - Expect(deps.ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"oh no!"}, - )) - - Expect(deps.serviceRepo.PurgeServiceOfferingCalled).To(Equal(false)) - }) - - It("fails with an error message when the purging request fails", func() { - deps := setupDependencies() - deps.serviceRepo.PurgeServiceOfferingApiResponse = cferrors.New("crumpets insufficiently buttered") - - testcmd.RunCommand(NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"-f", "-p", "the-provider", "the-service-name"}, - deps.requirementsFactory, - ) - - Expect(deps.ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"crumpets insufficiently buttered"}, - )) - }) - - It("indicates when a service doesn't exist", func() { - deps := setupDependencies() - - deps.serviceRepo.FindServiceOfferingByLabelAndProviderApiResponse = cferrors.NewModelNotFoundError("Service Offering", "") - - deps.ui.Inputs = []string{"yes"} - - testcmd.RunCommand( - NewPurgeServiceOffering(deps.ui, deps.config, deps.serviceRepo), - []string{"-p", "the-provider", "the-service-name"}, - deps.requirementsFactory, - ) - - Expect(deps.ui.Outputs).To(ContainSubstrings([]string{"Service offering", "does not exist"})) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"WARNING"})) - Expect(deps.ui.Outputs).ToNot(ContainSubstrings([]string{"Ok"})) - - Expect(deps.serviceRepo.PurgeServiceOfferingCalled).To(Equal(false)) - }) -}) - -type commandDependencies struct { - ui *testterm.FakeUI - config core_config.ReadWriter - serviceRepo *testapi.FakeServiceRepo - requirementsFactory *testreq.FakeReqFactory -} - -func setupDependencies() (obj commandDependencies) { - obj.ui = &testterm.FakeUI{} - - obj.config = testconfig.NewRepository() - obj.requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - obj.serviceRepo = new(testapi.FakeServiceRepo) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/rename_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/rename_service.go deleted file mode 100644 index cb98c2a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/rename_service.go +++ /dev/null @@ -1,82 +0,0 @@ -package service - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RenameService struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceInstanceReq requirements.ServiceInstanceRequirement -} - -func NewRenameService(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository) (cmd *RenameService) { - cmd = new(RenameService) - cmd.ui = ui - cmd.config = config - cmd.serviceRepo = serviceRepo - return -} - -func (cmd *RenameService) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "rename-service", - Description: T("Rename a service instance"), - Usage: T("CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE"), - } -} - -func (cmd *RenameService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - return - } - - cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(c.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.serviceInstanceReq, - } - - return -} - -func (cmd *RenameService) Run(c *cli.Context) { - newName := c.Args()[1] - serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() - - cmd.ui.Say(T("Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceInstance.Name), - "NewServiceName": terminal.EntityNameColor(newName), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - err := cmd.serviceRepo.RenameService(serviceInstance, newName) - - if err != nil { - if httpError, ok := err.(errors.HttpError); ok && httpError.ErrorCode() == errors.SERVICE_INSTANCE_NAME_TAKEN { - cmd.ui.Failed(T("{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - map[string]interface{}{ - "ErrorDescription": httpError.Error(), - "CFServicesCommand": cf.Name() + " " + "services", - })) - } else { - cmd.ui.Failed(err.Error()) - } - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/rename_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/rename_service_test.go deleted file mode 100644 index 092e3ac..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/rename_service_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/service" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("rename-service command", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - serviceRepo *testapi.FakeServiceRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - serviceRepo = &testapi.FakeServiceRepo{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewRenameService(ui, config, serviceRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("Fails with usage when exactly two parameters not passed", func() { - runCommand("whatever") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - requirementsFactory.TargetedSpaceSuccess = true - - Expect(runCommand("banana", "fppants")).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand("banana", "faaaaasdf")).To(BeFalse()) - }) - }) - - Context("when logged in and a space is targeted", func() { - var serviceInstance models.ServiceInstance - - BeforeEach(func() { - serviceInstance = models.ServiceInstance{} - serviceInstance.Name = "different-name" - serviceInstance.Guid = "different-name-guid" - - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - requirementsFactory.ServiceInstance = serviceInstance - }) - - It("renames the service, obviously", func() { - runCommand("my-service", "new-name") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming service", "different-name", "new-name", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(serviceRepo.RenameServiceServiceInstance).To(Equal(serviceInstance)) - Expect(serviceRepo.RenameServiceNewName).To(Equal("new-name")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service.go deleted file mode 100644 index b0d5452..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service.go +++ /dev/null @@ -1,153 +0,0 @@ -package service - -import ( - "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" - "github.com/cloudfoundry/cli/plugin/models" -) - -type ShowService struct { - ui terminal.UI - serviceInstanceReq requirements.ServiceInstanceRequirement - pluginModel *plugin_models.GetService_Model - pluginCall bool -} - -func init() { - command_registry.Register(&ShowService{}) -} - -func (cmd *ShowService) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["guid"] = &cliFlags.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given service's guid. All other output for the service is suppressed.")} - return command_registry.CommandMetadata{ - Name: "service", - Description: T("Show service instance info"), - Usage: T("CF_NAME service SERVICE_INSTANCE"), - Flags: fs, - } -} - -func (cmd *ShowService) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 1 { - cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("service")) - } - - cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(fc.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - cmd.serviceInstanceReq, - } - - return -} - -func (cmd *ShowService) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - - cmd.pluginCall = pluginCall - cmd.pluginModel = deps.PluginModels.Service - - return cmd -} - -func (cmd *ShowService) Execute(c flags.FlagContext) { - serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() - - if cmd.pluginCall { - cmd.populatePluginModel(serviceInstance) - return - } - - if c.Bool("guid") { - cmd.ui.Say(serviceInstance.Guid) - } else { - cmd.ui.Say("") - cmd.ui.Say(T("Service instance: {{.ServiceName}}", map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceInstance.Name)})) - - if serviceInstance.IsUserProvided() { - cmd.ui.Say(T("Service: {{.ServiceDescription}}", - map[string]interface{}{ - "ServiceDescription": terminal.EntityNameColor(T("user-provided")), - })) - } else { - cmd.ui.Say(T("Service: {{.ServiceDescription}}", - map[string]interface{}{ - "ServiceDescription": terminal.EntityNameColor(serviceInstance.ServiceOffering.Label), - })) - cmd.ui.Say(T("Plan: {{.ServicePlanName}}", - map[string]interface{}{ - "ServicePlanName": terminal.EntityNameColor(serviceInstance.ServicePlan.Name), - })) - cmd.ui.Say(T("Description: {{.ServiceDescription}}", map[string]interface{}{"ServiceDescription": terminal.EntityNameColor(serviceInstance.ServiceOffering.Description)})) - cmd.ui.Say(T("Documentation url: {{.URL}}", - map[string]interface{}{ - "URL": terminal.EntityNameColor(serviceInstance.ServiceOffering.DocumentationUrl), - })) - cmd.ui.Say(T("Dashboard: {{.URL}}", - map[string]interface{}{ - "URL": terminal.EntityNameColor(serviceInstance.DashboardUrl), - })) - cmd.ui.Say("") - cmd.ui.Say(T("Last Operation")) - cmd.ui.Say(T("Status: {{.State}}", - map[string]interface{}{ - "State": terminal.EntityNameColor(ServiceInstanceStateToStatus(serviceInstance.LastOperation.Type, serviceInstance.LastOperation.State, serviceInstance.IsUserProvided())), - })) - cmd.ui.Say(T("Message: {{.Message}}", - map[string]interface{}{ - "Message": terminal.EntityNameColor(serviceInstance.LastOperation.Description), - })) - if "" != serviceInstance.LastOperation.CreatedAt { - cmd.ui.Say(T("Started: {{.Started}}", - map[string]interface{}{ - "Started": terminal.EntityNameColor(serviceInstance.LastOperation.CreatedAt), - })) - } - cmd.ui.Say(T("Updated: {{.Updated}}", - map[string]interface{}{ - "Updated": terminal.EntityNameColor(serviceInstance.LastOperation.UpdatedAt), - })) - } - } -} - -func ServiceInstanceStateToStatus(operationType string, state string, isUserProvidedService bool) string { - if isUserProvidedService { - return "" - } - - switch state { - case "in progress": - return T("{{.OperationType}} in progress", map[string]interface{}{"OperationType": operationType}) - case "failed": - return T("{{.OperationType}} failed", map[string]interface{}{"OperationType": operationType}) - case "succeeded": - return T("{{.OperationType}} succeeded", map[string]interface{}{"OperationType": operationType}) - default: - return "" - } -} - -func (cmd *ShowService) populatePluginModel(serviceInstance models.ServiceInstance) { - cmd.pluginModel.Name = serviceInstance.Name - cmd.pluginModel.Guid = serviceInstance.Guid - cmd.pluginModel.DashboardUrl = serviceInstance.DashboardUrl - cmd.pluginModel.IsUserProvided = serviceInstance.IsUserProvided() - cmd.pluginModel.LastOperation.Type = serviceInstance.LastOperation.Type - cmd.pluginModel.LastOperation.State = serviceInstance.LastOperation.State - cmd.pluginModel.LastOperation.Description = serviceInstance.LastOperation.Description - cmd.pluginModel.LastOperation.CreatedAt = serviceInstance.LastOperation.CreatedAt - cmd.pluginModel.LastOperation.UpdatedAt = serviceInstance.LastOperation.UpdatedAt - cmd.pluginModel.ServicePlan.Name = serviceInstance.ServicePlan.Name - cmd.pluginModel.ServicePlan.Guid = serviceInstance.ServicePlan.Guid - cmd.pluginModel.ServiceOffering.DocumentationUrl = serviceInstance.ServiceOffering.DocumentationUrl - cmd.pluginModel.ServiceOffering.Name = serviceInstance.ServiceOffering.Label -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service_suite_test.go deleted file mode 100644 index b6214ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package service_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestService(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Service Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service_test.go deleted file mode 100644 index d15de86..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/service_test.go +++ /dev/null @@ -1,297 +0,0 @@ -package service_test - -import ( - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/service" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("service command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("service").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("service") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - BeforeEach(func() { - updateCommandDependency(false) - }) - - It("fails when not provided the name of the service to show", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "Requires an argument"}, - )) - }) - - It("fails when not logged in", func() { - requirementsFactory.TargetedSpaceSuccess = true - - Expect(runCommand("come-ON")).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand("okay-this-time-please??")).To(BeFalse()) - }) - }) - - Describe("After Requirement", func() { - createServiceInstanceWithState := func(state string) { - offering := models.ServiceOfferingFields{Label: "mysql", DocumentationUrl: "http://documentation.url", Description: "the-description"} - plan := models.ServicePlanFields{Guid: "plan-guid", Name: "plan-name"} - - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "service1" - serviceInstance.Guid = "service1-guid" - serviceInstance.LastOperation.Type = "create" - serviceInstance.LastOperation.State = "in progress" - serviceInstance.LastOperation.Description = "creating resource - step 1" - serviceInstance.ServicePlan = plan - serviceInstance.ServiceOffering = offering - serviceInstance.DashboardUrl = "some-url" - serviceInstance.LastOperation.State = state - serviceInstance.LastOperation.CreatedAt = "created-date" - serviceInstance.LastOperation.UpdatedAt = "updated-date" - requirementsFactory.ServiceInstance = serviceInstance - } - - createServiceInstance := func() { - createServiceInstanceWithState("") - } - - Describe("when invoked by a plugin", func() { - var ( - pluginModel *plugin_models.GetService_Model - ) - - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - pluginModel = &plugin_models.GetService_Model{} - deps.PluginModels.Service = pluginModel - updateCommandDependency(true) - }) - - It("populates the plugin model upon execution", func() { - createServiceInstanceWithState("in progress") - runCommand("service1") - Ω(pluginModel.Name).To(Equal("service1")) - Ω(pluginModel.Guid).To(Equal("service1-guid")) - Ω(pluginModel.LastOperation.Type).To(Equal("create")) - Ω(pluginModel.LastOperation.State).To(Equal("in progress")) - Ω(pluginModel.LastOperation.Description).To(Equal("creating resource - step 1")) - Ω(pluginModel.LastOperation.CreatedAt).To(Equal("created-date")) - Ω(pluginModel.LastOperation.UpdatedAt).To(Equal("updated-date")) - Ω(pluginModel.LastOperation.Type).To(Equal("create")) - Ω(pluginModel.ServicePlan.Name).To(Equal("plan-name")) - Ω(pluginModel.ServicePlan.Guid).To(Equal("plan-guid")) - Ω(pluginModel.ServiceOffering.DocumentationUrl).To(Equal("http://documentation.url")) - Ω(pluginModel.ServiceOffering.Name).To(Equal("mysql")) - }) - }) - - Context("when logged in, a space is targeted, and provided the name of a service that exists", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - - updateCommandDependency(false) - }) - - Context("when the service is externally provided", func() { - - It("shows the service", func() { - createServiceInstanceWithState("in progress") - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Service instance:", "service1"}, - []string{"Service: ", "mysql"}, - []string{"Plan: ", "plan-name"}, - []string{"Description: ", "the-description"}, - []string{"Documentation url: ", "http://documentation.url"}, - []string{"Dashboard: ", "some-url"}, - []string{"Last Operation"}, - []string{"Status: ", "create in progress"}, - []string{"Message: ", "creating resource - step 1"}, - []string{"Started: ", "created-date"}, - []string{"Updated: ", "updated-date"}, - )) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("service1")) - }) - - Context("when the service instance CreatedAt is empty", func() { - It("does not output the Started line", func() { - createServiceInstanceWithState("in progress") - requirementsFactory.ServiceInstance.LastOperation.CreatedAt = "" - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Service instance:", "service1"}, - []string{"Service: ", "mysql"}, - []string{"Plan: ", "plan-name"}, - []string{"Description: ", "the-description"}, - []string{"Documentation url: ", "http://documentation.url"}, - []string{"Dashboard: ", "some-url"}, - []string{"Last Operation"}, - []string{"Status: ", "create in progress"}, - []string{"Message: ", "creating resource - step 1"}, - []string{"Updated: ", "updated-date"}, - )) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Started: "}, - )) - }) - }) - - Context("shows correct status information based on service instance state", func() { - It("shows status: `create in progress` when state is `in progress`", func() { - createServiceInstanceWithState("in progress") - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Status: ", "create in progress"}, - )) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("service1")) - }) - - It("shows status: `create succeeded` when state is `succeeded`", func() { - createServiceInstanceWithState("succeeded") - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Status: ", "create succeeded"}, - )) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("service1")) - }) - - It("shows status: `create failed` when state is `failed`", func() { - createServiceInstanceWithState("failed") - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Status: ", "create failed"}, - )) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("service1")) - }) - - It("shows status: `` when state is ``", func() { - createServiceInstanceWithState("") - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Status: ", ""}, - )) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("service1")) - }) - }) - - Context("when the guid flag is provided", func() { - It("shows only the service guid", func() { - createServiceInstance() - runCommand("--guid", "service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"service1-guid"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Service instance:", "service1"}, - )) - }) - }) - }) - - Context("when the service is user provided", func() { - BeforeEach(func() { - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "service1" - serviceInstance.Guid = "service1-guid" - requirementsFactory.ServiceInstance = serviceInstance - }) - - It("shows user provided services", func() { - runCommand("service1") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Service instance: ", "service1"}, - []string{"Service: ", "user-provided"}, - )) - }) - }) - }) - }) -}) - -var _ = Describe("ServiceInstanceStateToStatus", func() { - var operationType string - Context("when the service is not user provided", func() { - isUserProvided := false - - Context("when operationType is `create`", func() { - BeforeEach(func() { operationType = "create" }) - - It("returns status: `create in progress` when state: `in progress`", func() { - status := ServiceInstanceStateToStatus(operationType, "in progress", isUserProvided) - Expect(status).To(Equal("create in progress")) - }) - - It("returns status: `create succeeded` when state: `succeeded`", func() { - status := ServiceInstanceStateToStatus(operationType, "succeeded", isUserProvided) - Expect(status).To(Equal("create succeeded")) - }) - - It("returns status: `create failed` when state: `failed`", func() { - status := ServiceInstanceStateToStatus(operationType, "failed", isUserProvided) - Expect(status).To(Equal("create failed")) - }) - - It("returns status: `` when state: ``", func() { - status := ServiceInstanceStateToStatus(operationType, "", isUserProvided) - Expect(status).To(Equal("")) - }) - }) - }) - - Context("when the service is user provided", func() { - isUserProvided := true - - It("returns status: `` when state: ``", func() { - status := ServiceInstanceStateToStatus(operationType, "", isUserProvided) - Expect(status).To(Equal("")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/services.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/services.go deleted file mode 100644 index 1bc8a53..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/services.go +++ /dev/null @@ -1,126 +0,0 @@ -package service - -import ( - "strings" - - "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/plugin/models" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type ListServices struct { - ui terminal.UI - config core_config.Reader - serviceSummaryRepo api.ServiceSummaryRepository - pluginModel *[]plugin_models.GetServices_Model - pluginCall bool -} - -func init() { - command_registry.Register(&ListServices{}) -} - -func (cmd ListServices) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "services", - ShortName: "s", - Description: T("List all service instances in the target space"), - Usage: "CF_NAME services", - } -} - -func (cmd ListServices) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 0 { - cmd.ui.Failed(T("Incorrect Usage. No argument required\n\n") + command_registry.Commands.CommandUsage("services")) - } - reqs = append(reqs, - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - ) - return -} - -func (cmd *ListServices) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.serviceSummaryRepo = deps.RepoLocator.GetServiceSummaryRepository() - cmd.pluginModel = deps.PluginModels.Services - cmd.pluginCall = pluginCall - return cmd -} - -func (cmd ListServices) Execute(fc flags.FlagContext) { - cmd.ui.Say(T("Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - serviceInstances, apiErr := cmd.serviceSummaryRepo.GetSummariesInCurrentSpace() - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - if len(serviceInstances) == 0 { - cmd.ui.Say(T("No services found")) - return - } - - table := terminal.NewTable(cmd.ui, []string{T("name"), T("service"), T("plan"), T("bound apps"), T("last operation")}) - - for _, instance := range serviceInstances { - var serviceColumn string - var serviceStatus string - - if instance.IsUserProvided() { - serviceColumn = T("user-provided") - } else { - serviceColumn = instance.ServiceOffering.Label - } - serviceStatus = ServiceInstanceStateToStatus(instance.LastOperation.Type, instance.LastOperation.State, instance.IsUserProvided()) - - table.Add( - instance.Name, - serviceColumn, - instance.ServicePlan.Name, - strings.Join(instance.ApplicationNames, ", "), - serviceStatus, - ) - if cmd.pluginCall { - s := plugin_models.GetServices_Model{ - Name: instance.Name, - Guid: instance.Guid, - ServicePlan: plugin_models.GetServices_ServicePlan{ - Name: instance.ServicePlan.Name, - Guid: instance.ServicePlan.Guid, - }, - Service: plugin_models.GetServices_ServiceFields{ - Name: instance.ServiceOffering.Label, - }, - ApplicationNames: instance.ApplicationNames, - LastOperation: plugin_models.GetServices_LastOperation{ - Type: instance.LastOperation.Type, - State: instance.LastOperation.State, - }, - IsUserProvided: instance.IsUserProvided(), - } - - *(cmd.pluginModel) = append(*(cmd.pluginModel), s) - } - - } - - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/services_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/services_test.go deleted file mode 100644 index a4dd4bc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/services_test.go +++ /dev/null @@ -1,242 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("services", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.Repository - requirementsFactory *testreq.FakeReqFactory - serviceSummaryRepo *testapi.FakeServiceSummaryRepo - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetServiceSummaryRepository(serviceSummaryRepo) - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("services").SetDependency(deps, pluginCall)) - } - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("services") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - serviceSummaryRepo = &testapi.FakeServiceSummaryRepo{} - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedSpaceSuccess: true, - TargetedOrgSuccess: true, - } - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - Describe("services requirements", func() { - - Context("when not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand()).To(BeFalse()) - }) - }) - - Context("when no space is targeted", func() { - BeforeEach(func() { - requirementsFactory.TargetedSpaceSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand()).To(BeFalse()) - }) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedSpaceSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "No argument required"}, - )) - }) - }) - - It("lists available services", func() { - plan := models.ServicePlanFields{ - Guid: "spark-guid", - Name: "spark", - } - - plan2 := models.ServicePlanFields{ - Guid: "spark-guid-2", - Name: "spark-2", - } - - offering := models.ServiceOfferingFields{Label: "cleardb"} - - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "my-service-1" - serviceInstance.LastOperation.Type = "create" - serviceInstance.LastOperation.State = "in progress" - serviceInstance.LastOperation.Description = "fake state description" - serviceInstance.ServicePlan = plan - serviceInstance.ApplicationNames = []string{"cli1", "cli2"} - serviceInstance.ServiceOffering = offering - - serviceInstance2 := models.ServiceInstance{} - serviceInstance2.Name = "my-service-2" - serviceInstance2.LastOperation.Type = "create" - serviceInstance2.LastOperation.State = "" - serviceInstance2.LastOperation.Description = "fake state description" - serviceInstance2.ServicePlan = plan2 - serviceInstance2.ApplicationNames = []string{"cli1"} - serviceInstance2.ServiceOffering = offering - - userProvidedServiceInstance := models.ServiceInstance{} - userProvidedServiceInstance.Name = "my-service-provided-by-user" - - serviceInstances := []models.ServiceInstance{serviceInstance, serviceInstance2, userProvidedServiceInstance} - - serviceSummaryRepo.GetSummariesInCurrentSpaceInstances = serviceInstances - - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting services in org", "my-org", "my-space", "my-user"}, - []string{"name", "service", "plan", "bound apps", "last operation"}, - []string{"OK"}, - []string{"my-service-1", "cleardb", "spark", "cli1, cli2", "create in progress"}, - []string{"my-service-2", "cleardb", "spark-2", "cli1", ""}, - []string{"my-service-provided-by-user", "user-provided", "", "", ""}, - )) - }) - - It("lists no services when none are found", func() { - serviceInstances := []models.ServiceInstance{} - serviceSummaryRepo.GetSummariesInCurrentSpaceInstances = serviceInstances - - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting services in org", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"No services found"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"name", "service", "plan", "bound apps"}, - )) - }) - - Describe("when invoked by a plugin", func() { - - var ( - pluginModels []plugin_models.GetServices_Model - ) - - BeforeEach(func() { - - pluginModels = []plugin_models.GetServices_Model{} - deps.PluginModels.Services = &pluginModels - plan := models.ServicePlanFields{ - Guid: "spark-guid", - Name: "spark", - } - - plan2 := models.ServicePlanFields{ - Guid: "spark-guid-2", - Name: "spark-2", - } - - offering := models.ServiceOfferingFields{Label: "cleardb"} - - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "my-service-1" - serviceInstance.Guid = "123" - serviceInstance.LastOperation.Type = "create" - serviceInstance.LastOperation.State = "in progress" - serviceInstance.LastOperation.Description = "fake state description" - serviceInstance.ServicePlan = plan - serviceInstance.ApplicationNames = []string{"cli1", "cli2"} - serviceInstance.ServiceOffering = offering - - serviceInstance2 := models.ServiceInstance{} - serviceInstance2.Name = "my-service-2" - serviceInstance2.Guid = "345" - serviceInstance2.LastOperation.Type = "create" - serviceInstance2.LastOperation.State = "" - serviceInstance2.LastOperation.Description = "fake state description" - serviceInstance2.ServicePlan = plan2 - serviceInstance2.ApplicationNames = []string{"cli1"} - serviceInstance2.ServiceOffering = offering - - userProvidedServiceInstance := models.ServiceInstance{} - userProvidedServiceInstance.Name = "my-service-provided-by-user" - userProvidedServiceInstance.Guid = "678" - - serviceInstances := []models.ServiceInstance{serviceInstance, serviceInstance2, userProvidedServiceInstance} - - serviceSummaryRepo.GetSummariesInCurrentSpaceInstances = serviceInstances - updateCommandDependency(true) - }) - - It("populates the plugin model", func() { - runCommand() - - Ω(len(pluginModels)).To(Equal(3)) - Ω(pluginModels[0].Name).To(Equal("my-service-1")) - Ω(pluginModels[0].Guid).To(Equal("123")) - Ω(pluginModels[0].ServicePlan.Name).To(Equal("spark")) - Ω(pluginModels[0].ServicePlan.Guid).To(Equal("spark-guid")) - Ω(pluginModels[0].Service.Name).To(Equal("cleardb")) - Ω(pluginModels[0].ApplicationNames).To(Equal([]string{"cli1", "cli2"})) - Ω(pluginModels[0].LastOperation.Type).To(Equal("create")) - Ω(pluginModels[0].LastOperation.State).To(Equal("in progress")) - Ω(pluginModels[0].IsUserProvided).To(BeFalse()) - - Ω(pluginModels[1].Name).To(Equal("my-service-2")) - Ω(pluginModels[1].Guid).To(Equal("345")) - Ω(pluginModels[1].ServicePlan.Name).To(Equal("spark-2")) - Ω(pluginModels[1].ServicePlan.Guid).To(Equal("spark-guid-2")) - Ω(pluginModels[1].Service.Name).To(Equal("cleardb")) - Ω(pluginModels[1].ApplicationNames).To(Equal([]string{"cli1"})) - Ω(pluginModels[1].LastOperation.Type).To(Equal("create")) - Ω(pluginModels[1].LastOperation.State).To(Equal("")) - Ω(pluginModels[1].IsUserProvided).To(BeFalse()) - - Ω(pluginModels[2].Name).To(Equal("my-service-provided-by-user")) - Ω(pluginModels[2].Guid).To(Equal("678")) - Ω(pluginModels[2].ServicePlan.Name).To(Equal("")) - Ω(pluginModels[2].ServicePlan.Guid).To(Equal("")) - Ω(pluginModels[2].Service.Name).To(Equal("")) - Ω(pluginModels[2].ApplicationNames).To(BeNil()) - Ω(pluginModels[2].LastOperation.Type).To(Equal("")) - Ω(pluginModels[2].LastOperation.State).To(Equal("")) - Ω(pluginModels[2].IsUserProvided).To(BeTrue()) - - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/unbind_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/unbind_service.go deleted file mode 100644 index 4fa93ea..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/unbind_service.go +++ /dev/null @@ -1,87 +0,0 @@ -package service - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnbindService struct { - ui terminal.UI - config core_config.Reader - serviceBindingRepo api.ServiceBindingRepository - appReq requirements.ApplicationRequirement - serviceInstanceReq requirements.ServiceInstanceRequirement -} - -func NewUnbindService(ui terminal.UI, config core_config.Reader, serviceBindingRepo api.ServiceBindingRepository) (cmd *UnbindService) { - cmd = new(UnbindService) - cmd.ui = ui - cmd.config = config - cmd.serviceBindingRepo = serviceBindingRepo - return -} - -func (cmd *UnbindService) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unbind-service", - ShortName: "us", - Description: T("Unbind a service instance from an app"), - Usage: T("CF_NAME unbind-service APP_NAME SERVICE_INSTANCE"), - } -} - -func (cmd *UnbindService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - serviceName := c.Args()[1] - - if cmd.appReq == nil { - cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) - } else { - cmd.appReq.SetApplicationName(c.Args()[0]) - } - - cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(serviceName) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.appReq, - cmd.serviceInstanceReq, - } - return -} - -func (cmd *UnbindService) Run(c *cli.Context) { - app := cmd.appReq.GetApplication() - instance := cmd.serviceInstanceReq.GetServiceInstance() - - cmd.ui.Say(T("Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "AppName": terminal.EntityNameColor(app.Name), - "ServiceName": terminal.EntityNameColor(instance.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - found, apiErr := cmd.serviceBindingRepo.Delete(instance, app.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - - if !found { - cmd.ui.Warn(T("Binding between {{.InstanceName}} and {{.AppName}} did not exist", - map[string]interface{}{"InstanceName": instance.Name, "AppName": app.Name})) - } - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/unbind_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/unbind_service_test.go deleted file mode 100644 index 2868a08..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/unbind_service_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package service_test - -import ( - "github.com/cloudfoundry/cli/cf/api" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("unbind-service command", func() { - var ( - app models.Application - serviceInstance models.ServiceInstance - requirementsFactory *testreq.FakeReqFactory - serviceBindingRepo *testapi.FakeServiceBindingRepo - ) - - BeforeEach(func() { - app.Name = "my-app" - app.Guid = "my-app-guid" - - serviceInstance.Name = "my-service" - serviceInstance.Guid = "my-service-guid" - - requirementsFactory = &testreq.FakeReqFactory{} - requirementsFactory.Application = app - requirementsFactory.ServiceInstance = serviceInstance - - serviceBindingRepo = &testapi.FakeServiceBindingRepo{} - }) - - Context("when not logged in", func() { - It("fails requirements when not logged in", func() { - cmd := NewUnbindService(&testterm.FakeUI{}, testconfig.NewRepository(), serviceBindingRepo) - Expect(testcmd.RunCommand(cmd, []string{"my-service", "my-app"}, requirementsFactory)).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - Context("when the service instance exists", func() { - It("unbinds a service from an app", func() { - ui := callUnbindService([]string{"my-app", "my-service"}, requirementsFactory, serviceBindingRepo) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("my-service")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unbinding app", "my-service", "my-app", "my-org", "my-space", "my-user"}, - []string{"OK"}, - )) - Expect(serviceBindingRepo.DeleteServiceInstance).To(Equal(serviceInstance)) - Expect(serviceBindingRepo.DeleteApplicationGuid).To(Equal("my-app-guid")) - }) - }) - - Context("when the service instance does not exist", func() { - BeforeEach(func() { - serviceBindingRepo.DeleteBindingNotFound = true - }) - - It("warns the user the the service instance does not exist", func() { - ui := callUnbindService([]string{"my-app", "my-service"}, requirementsFactory, serviceBindingRepo) - - Expect(requirementsFactory.ApplicationName).To(Equal("my-app")) - Expect(requirementsFactory.ServiceInstanceName).To(Equal("my-service")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unbinding app", "my-service", "my-app"}, - []string{"OK"}, - []string{"my-service", "my-app", "did not exist"}, - )) - Expect(serviceBindingRepo.DeleteServiceInstance).To(Equal(serviceInstance)) - Expect(serviceBindingRepo.DeleteApplicationGuid).To(Equal("my-app-guid")) - }) - }) - - It("when no parameters are given the command fails with usage", func() { - ui := callUnbindService([]string{"my-service"}, requirementsFactory, serviceBindingRepo) - Expect(ui.FailedWithUsage).To(BeTrue()) - - ui = callUnbindService([]string{"my-app"}, requirementsFactory, serviceBindingRepo) - Expect(ui.FailedWithUsage).To(BeTrue()) - - ui = callUnbindService([]string{"my-app", "my-service"}, requirementsFactory, serviceBindingRepo) - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - }) -}) - -func callUnbindService(args []string, requirementsFactory *testreq.FakeReqFactory, serviceBindingRepo api.ServiceBindingRepository) (fakeUI *testterm.FakeUI) { - fakeUI = &testterm.FakeUI{} - - config := testconfig.NewRepositoryWithDefaults() - - cmd := NewUnbindService(fakeUI, config, serviceBindingRepo) - testcmd.RunCommand(cmd, args, requirementsFactory) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_service.go deleted file mode 100644 index bde7012..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_service.go +++ /dev/null @@ -1,188 +0,0 @@ -package service - -import ( - "errors" - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/actors/plan_builder" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/ui_helpers" - "github.com/cloudfoundry/cli/json" - "github.com/codegangsta/cli" -) - -type UpdateService struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - planBuilder plan_builder.PlanBuilder -} - -func NewUpdateService(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository, planBuilder plan_builder.PlanBuilder) (cmd *UpdateService) { - return &UpdateService{ - ui: ui, - config: config, - serviceRepo: serviceRepo, - planBuilder: planBuilder, - } -} - -func (cmd *UpdateService) Metadata() command_metadata.CommandMetadata { - baseUsage := T("CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]") - paramsUsage := T(` Optionally provide service-specific configuration parameters in a valid JSON object in-line. - CF_NAME update-service -c '{"name":"value","name":"value"}' - - Optionally provide a file containing service-specific configuration parameters in a valid JSON object. - The path to the parameters file can be an absolute or relative path to a file. - CF_NAME update-service -c PATH_TO_FILE - - Example of valid JSON object: - { - "cluster_nodes": { - "count": 5, - "memory_mb": 1024 - } - }`) - tagsUsage := T(` Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.`) - exampleUsage := T(`EXAMPLE: - CF_NAME update-service mydb -p gold - CF_NAME update-service mydb -c '{"ram_gb":4}' - CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json - CF_NAME update-service mydb -t "list,of, tags"`) - - return command_metadata.CommandMetadata{ - Name: "update-service", - Description: T("Update a service instance"), - Usage: T(strings.Join([]string{baseUsage, paramsUsage, tagsUsage, exampleUsage}, "\n\n")), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Change service plan for a service instance")), - flag_helpers.NewStringFlag("c", T("Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.")), - flag_helpers.NewStringFlag("t", T("User provided tags")), - }, - } -} - -func (cmd *UpdateService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedSpaceRequirement(), - } - - return -} - -func (cmd *UpdateService) Run(c *cli.Context) { - planName := c.String("p") - params := c.String("c") - - tagsSet := c.IsSet("t") - tagsList := c.String("t") - - if planName == "" && params == "" && tagsSet == false { - cmd.ui.Ok() - cmd.ui.Say(T("No changes were made")) - return - } - - serviceInstanceName := c.Args()[0] - serviceInstance, err := cmd.serviceRepo.FindInstanceByName(serviceInstanceName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - paramsMap, err := json.ParseJsonFromFileOrString(params) - if err != nil { - cmd.ui.Failed(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) - } - - tags := ui_helpers.ParseTags(tagsList) - - var plan models.ServicePlanFields - if planName != "" { - cmd.checkUpdateServicePlanApiVersion() - err, plan = cmd.findPlan(serviceInstance, planName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - } - - cmd.printUpdatingServiceInstanceMessage(serviceInstanceName) - - err = cmd.serviceRepo.UpdateServiceInstance(serviceInstance.Guid, plan.Guid, paramsMap, tags) - if err != nil { - cmd.ui.Failed(err.Error()) - } - err = printSuccessMessageForServiceInstance(serviceInstanceName, cmd.serviceRepo, cmd.ui) - if err != nil { - cmd.ui.Failed(err.Error()) - } -} - -func (cmd *UpdateService) findPlan(serviceInstance models.ServiceInstance, planName string) (err error, plan models.ServicePlanFields) { - plans, err := cmd.planBuilder.GetPlansForServiceForOrg(serviceInstance.ServiceOffering.Guid, cmd.config.OrganizationFields().Name) - if err != nil { - return - } - - for _, p := range plans { - if p.Name == planName { - plan = p - return - } - } - err = errors.New(T("Plan does not exist for the {{.ServiceName}} service", - map[string]interface{}{"ServiceName": serviceInstance.ServiceOffering.Label})) - return -} - -func (cmd *UpdateService) checkUpdateServicePlanApiVersion() { - if !cmd.config.IsMinApiVersion("2.16.0") { - cmd.ui.Failed(T("Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - map[string]interface{}{ - "RequiredCCAPIVersion": "2.16.0", - "CurrentCCAPIVersion": cmd.config.ApiVersion(), - })) - } -} - -func (cmd *UpdateService) printUpdatingServiceInstanceMessage(serviceInstanceName string) { - cmd.ui.Say(T("Updating service instance {{.ServiceName}} as {{.UserName}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceInstanceName), - "UserName": terminal.EntityNameColor(cmd.config.Username()), - })) -} - -func printSuccessMessageForServiceInstance(serviceInstanceName string, serviceRepo api.ServiceRepository, ui terminal.UI) error { - instance, apiErr := serviceRepo.FindInstanceByName(serviceInstanceName) - if apiErr != nil { - return apiErr - } - - if instance.ServiceInstanceFields.LastOperation.State == "in progress" { - ui.Ok() - ui.Say("") - ui.Say(T("{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - map[string]interface{}{ - "State": strings.Title(instance.ServiceInstanceFields.LastOperation.Type), - "ServicesCommand": terminal.CommandColor("cf services"), - "ServiceCommand": terminal.CommandColor(fmt.Sprintf("cf service %s", serviceInstanceName)), - })) - } else { - ui.Ok() - } - - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_service_test.go deleted file mode 100644 index 84f81d0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_service_test.go +++ /dev/null @@ -1,454 +0,0 @@ -package service_test - -import ( - "errors" - "io/ioutil" - "os" - - testplanbuilder "github.com/cloudfoundry/cli/cf/actors/plan_builder/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/service" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("update-service command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - requirementsFactory *testreq.FakeReqFactory - serviceRepo *testapi.FakeServiceRepo - planBuilder *testplanbuilder.FakePlanBuilder - offering1 models.ServiceOffering - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - config.SetApiVersion("2.26.0") - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} - serviceRepo = &testapi.FakeServiceRepo{} - planBuilder = &testplanbuilder.FakePlanBuilder{} - - offering1 = models.ServiceOffering{} - offering1.Label = "cleardb" - offering1.Plans = []models.ServicePlanFields{{ - Name: "spark", - Guid: "cleardb-spark-guid", - }, { - Name: "flare", - Guid: "cleardb-flare-guid", - }, - } - - }) - - var callUpdateService = func(args []string) bool { - cmd := NewUpdateService(ui, config, serviceRepo, planBuilder) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("passes when logged in and a space is targeted", func() { - Expect(callUpdateService([]string{"cleardb"})).To(BeTrue()) - }) - - It("fails with usage when not provided exactly one arg", func() { - Expect(callUpdateService([]string{})).To(BeFalse()) - }) - - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(callUpdateService([]string{"cleardb", "spark", "my-cleardb-service"})).To(BeFalse()) - }) - - It("fails when a space is not targeted", func() { - requirementsFactory.TargetedSpaceSuccess = false - Expect(callUpdateService([]string{"cleardb", "spark", "my-cleardb-service"})).To(BeFalse()) - }) - }) - - Context("when no flags are passed", func() { - - Context("when the instance exists", func() { - It("prints a user indicating it is a no-op", func() { - callUpdateService([]string{"my-service"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"OK"}, - []string{"No changes were made"}, - )) - }) - }) - }) - - Context("when passing arbitrary params", func() { - BeforeEach(func() { - serviceInstance := models.ServiceInstance{ - ServiceInstanceFields: models.ServiceInstanceFields{ - Name: "my-service-instance", - Guid: "my-service-instance-guid", - LastOperation: models.LastOperationFields{ - Type: "update", - State: "in progress", - Description: "fake service instance description", - }, - }, - ServiceOffering: models.ServiceOfferingFields{ - Label: "murkydb", - Guid: "murkydb-guid", - }, - } - - servicePlans := []models.ServicePlanFields{{ - Name: "spark", - Guid: "murkydb-spark-guid", - }, { - Name: "flare", - Guid: "murkydb-flare-guid", - }, - } - serviceRepo.FindInstanceByNameServiceInstance = serviceInstance - planBuilder.GetPlansForServiceForOrgReturns(servicePlans, nil) - }) - - Context("as a json string", func() { - It("successfully updates a service", func() { - callUpdateService([]string{"-p", "flare", "-c", `{"foo": "bar"}`, "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service", "my-service", "as", "my-user", "..."}, - []string{"OK"}, - []string{"Update in progress. Use 'cf services' or 'cf service my-service-instance' to check operation status."}, - )) - Expect(serviceRepo.FindInstanceByNameName).To(Equal("my-service-instance")) - Expect(serviceRepo.UpdateServiceInstanceArgs.InstanceGuid).To(Equal("my-service-instance-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.PlanGuid).To(Equal("murkydb-flare-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.Params).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - It("returns an error to the UI", func() { - callUpdateService([]string{"-p", "flare", "-c", `bad-json`, "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - - Context("as a file that contains json", func() { - var jsonFile *os.File - var params string - - BeforeEach(func() { - params = "{\"foo\": \"bar\"}" - }) - - AfterEach(func() { - if jsonFile != nil { - jsonFile.Close() - os.Remove(jsonFile.Name()) - } - }) - - JustBeforeEach(func() { - var err error - jsonFile, err = ioutil.TempFile("", "") - Expect(err).ToNot(HaveOccurred()) - - err = ioutil.WriteFile(jsonFile.Name(), []byte(params), os.ModePerm) - Expect(err).NotTo(HaveOccurred()) - }) - - It("successfully updates a service and passes the params as a json", func() { - callUpdateService([]string{"-p", "flare", "-c", jsonFile.Name(), "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service", "my-service", "as", "my-user", "..."}, - []string{"OK"}, - []string{"Update in progress. Use 'cf services' or 'cf service my-service-instance' to check operation status."}, - )) - Expect(serviceRepo.FindInstanceByNameName).To(Equal("my-service-instance")) - Expect(serviceRepo.UpdateServiceInstanceArgs.InstanceGuid).To(Equal("my-service-instance-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.PlanGuid).To(Equal("murkydb-flare-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.Params).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - BeforeEach(func() { - params = "bad-json" - }) - - It("returns an error to the UI", func() { - callUpdateService([]string{"-p", "flare", "-c", jsonFile.Name(), "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - }) - - Context("when passing in tags", func() { - It("successfully updates a service and passes the tags as json", func() { - callUpdateService([]string{"-t", "tag1, tag2,tag3, tag4", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service instance", "my-service-instance"}, - []string{"OK"}, - )) - Expect(serviceRepo.UpdateServiceInstanceArgs.Tags).To(ConsistOf("tag1", "tag2", "tag3", "tag4")) - }) - - It("successfully updates a service and passes the tags as json", func() { - callUpdateService([]string{"-t", "tag1", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service instance", "my-service-instance"}, - []string{"OK"}, - )) - Expect(serviceRepo.UpdateServiceInstanceArgs.Tags).To(ConsistOf("tag1")) - }) - - Context("and the tags string is passed with an empty string", func() { - It("successfully updates the service", func() { - callUpdateService([]string{"-t", "", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service instance", "my-service-instance"}, - []string{"OK"}, - )) - Expect(serviceRepo.UpdateServiceInstanceArgs.Tags).To(Equal([]string{})) - }) - }) - }) - - Context("when service update is asynchronous", func() { - Context("when the plan flag is passed", func() { - BeforeEach(func() { - serviceInstance := models.ServiceInstance{ - ServiceInstanceFields: models.ServiceInstanceFields{ - Name: "my-service-instance", - Guid: "my-service-instance-guid", - LastOperation: models.LastOperationFields{ - Type: "update", - State: "in progress", - Description: "fake service instance description", - }, - }, - ServiceOffering: models.ServiceOfferingFields{ - Label: "murkydb", - Guid: "murkydb-guid", - }, - } - - servicePlans := []models.ServicePlanFields{{ - Name: "spark", - Guid: "murkydb-spark-guid", - }, { - Name: "flare", - Guid: "murkydb-flare-guid", - }, - } - serviceRepo.FindInstanceByNameServiceInstance = serviceInstance - planBuilder.GetPlansForServiceForOrgReturns(servicePlans, nil) - }) - - It("successfully updates a service", func() { - callUpdateService([]string{"-p", "flare", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service", "my-service", "as", "my-user", "..."}, - []string{"OK"}, - []string{"Update in progress. Use 'cf services' or 'cf service my-service-instance' to check operation status."}, - )) - Expect(serviceRepo.FindInstanceByNameName).To(Equal("my-service-instance")) - Expect(serviceRepo.UpdateServiceInstanceArgs.InstanceGuid).To(Equal("my-service-instance-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.PlanGuid).To(Equal("murkydb-flare-guid")) - }) - - Context("and the CC API Version >= 2.16.0", func() { - BeforeEach(func() { - config.SetApiVersion("2.16.0") - }) - - It("successfully updates a service", func() { - callUpdateService([]string{"-p", "flare", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service", "my-service", "as", "my-user", "..."}, - []string{"OK"}, - []string{"Update in progress. Use 'cf services' or 'cf service my-service-instance' to check operation status."}, - )) - Expect(serviceRepo.FindInstanceByNameName).To(Equal("my-service-instance")) - Expect(serviceRepo.UpdateServiceInstanceArgs.InstanceGuid).To(Equal("my-service-instance-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.PlanGuid).To(Equal("murkydb-flare-guid")) - }) - - Context("when there is an err finding the instance", func() { - It("returns an error", func() { - serviceRepo.FindInstanceByNameErr = true - - callUpdateService([]string{"-p", "flare", "some-stupid-not-real-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Error finding instance"}, - []string{"FAILED"}, - )) - }) - }) - Context("when there is an err finding service plans", func() { - It("returns an error", func() { - planBuilder.GetPlansForServiceForOrgReturns(nil, errors.New("Error fetching plans")) - - callUpdateService([]string{"-p", "flare", "some-stupid-not-real-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Error fetching plans"}, - []string{"FAILED"}, - )) - }) - }) - Context("when the plan specified does not exist in the service offering", func() { - It("returns an error", func() { - callUpdateService([]string{"-p", "not-a-real-plan", "instance-without-service-offering"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Plan does not exist for the murkydb service"}, - []string{"FAILED"}, - )) - }) - }) - Context("when there is an error updating the service instance", func() { - It("returns an error", func() { - serviceRepo.UpdateServiceInstanceReturnsErr = true - callUpdateService([]string{"-p", "flare", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Error updating service instance"}, - []string{"FAILED"}, - )) - }) - }) - }) - - Context("and the CC API Version < 2.16.0", func() { - BeforeEach(func() { - config.SetApiVersion("2.15.0") - }) - - It("returns an error", func() { - callUpdateService([]string{"-p", "flare", "instance-without-service-offering"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Updating a plan requires API v2.16.0 or newer. Your current target is v2.15.0."}, - )) - }) - }) - }) - }) - - Context("when service update is synchronous", func() { - Context("when the plan flag is passed", func() { - BeforeEach(func() { - serviceInstance := models.ServiceInstance{ - ServiceInstanceFields: models.ServiceInstanceFields{ - Name: "my-service-instance", - Guid: "my-service-instance-guid", - }, - ServiceOffering: models.ServiceOfferingFields{ - Label: "murkydb", - Guid: "murkydb-guid", - }, - } - - servicePlans := []models.ServicePlanFields{{ - Name: "spark", - Guid: "murkydb-spark-guid", - }, { - Name: "flare", - Guid: "murkydb-flare-guid", - }, - } - serviceRepo.FindInstanceByNameServiceInstance = serviceInstance - planBuilder.GetPlansForServiceForOrgReturns(servicePlans, nil) - - }) - It("successfully updates a service", func() { - callUpdateService([]string{"-p", "flare", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service", "my-service", "as", "my-user", "..."}, - []string{"OK"}, - )) - Expect(serviceRepo.FindInstanceByNameName).To(Equal("my-service-instance")) - serviceGuid, orgName := planBuilder.GetPlansForServiceForOrgArgsForCall(0) - Expect(serviceGuid).To(Equal("murkydb-guid")) - Expect(orgName).To(Equal("my-org")) - Expect(serviceRepo.UpdateServiceInstanceArgs.InstanceGuid).To(Equal("my-service-instance-guid")) - Expect(serviceRepo.UpdateServiceInstanceArgs.PlanGuid).To(Equal("murkydb-flare-guid")) - }) - - Context("when there is an err finding the instance", func() { - It("returns an error", func() { - serviceRepo.FindInstanceByNameErr = true - - callUpdateService([]string{"-p", "flare", "some-stupid-not-real-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Error finding instance"}, - []string{"FAILED"}, - )) - }) - }) - Context("when there is an err finding service plans", func() { - It("returns an error", func() { - planBuilder.GetPlansForServiceForOrgReturns(nil, errors.New("Error fetching plans")) - - callUpdateService([]string{"-p", "flare", "some-stupid-not-real-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Error fetching plans"}, - []string{"FAILED"}, - )) - }) - }) - Context("when the plan specified does not exist in the service offering", func() { - It("returns an error", func() { - callUpdateService([]string{"-p", "not-a-real-plan", "instance-without-service-offering"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Plan does not exist for the murkydb service"}, - []string{"FAILED"}, - )) - }) - }) - Context("when there is an error updating the service instance", func() { - It("returns an error", func() { - serviceRepo.UpdateServiceInstanceReturnsErr = true - callUpdateService([]string{"-p", "flare", "my-service-instance"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Error updating service instance"}, - []string{"FAILED"}, - )) - }) - }) - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_user_provided_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_user_provided_service.go deleted file mode 100644 index 7527b7e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_user_provided_service.go +++ /dev/null @@ -1,112 +0,0 @@ -package service - -import ( - "encoding/json" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UpdateUserProvidedService struct { - ui terminal.UI - config core_config.Reader - userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository - serviceInstanceReq requirements.ServiceInstanceRequirement -} - -func NewUpdateUserProvidedService(ui terminal.UI, config core_config.Reader, userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository) (cmd *UpdateUserProvidedService) { - cmd = new(UpdateUserProvidedService) - cmd.ui = ui - cmd.config = config - cmd.userProvidedServiceInstanceRepo = userProvidedServiceInstanceRepo - return -} - -func (cmd *UpdateUserProvidedService) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "update-user-provided-service", - ShortName: "uups", - Description: T("Update user-provided service instance name value pairs"), - Usage: T(`CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]' - -EXAMPLE: - CF_NAME update-user-provided-service my-db-mine -p '{"username":"admin","password":"pa55woRD"}' - CF_NAME update-user-provided-service my-drain-service -l syslog://example.com`), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Credentials")), - flag_helpers.NewStringFlag("l", T("Syslog Drain Url")), - }, - } -} - -func (cmd *UpdateUserProvidedService) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(c.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.serviceInstanceReq, - } - - return -} - -func (cmd *UpdateUserProvidedService) Run(c *cli.Context) { - - serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() - if !serviceInstance.IsUserProvided() { - cmd.ui.Failed(T("Service Instance is not user provided")) - return - } - - drainUrl := c.String("l") - params := c.String("p") - - paramsMap := make(map[string]interface{}) - if params != "" { - - err := json.Unmarshal([]byte(params), ¶msMap) - if err != nil { - cmd.ui.Failed(T("JSON is invalid: {{.ErrorDescription}}", map[string]interface{}{"ErrorDescription": err.Error()})) - return - } - } - - cmd.ui.Say(T("Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceInstance.Name), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - serviceInstance.Params = paramsMap - serviceInstance.SysLogDrainUrl = drainUrl - - apiErr := cmd.userProvidedServiceInstanceRepo.Update(serviceInstance.ServiceInstanceFields) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say(T("TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - map[string]interface{}{ - "CFRestageCommand": terminal.CommandColor(cf.Name() + " restage"), - })) - - if params == "" && drainUrl == "" { - cmd.ui.Warn(T("No flags specified. No changes were made.")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_user_provided_service_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_user_provided_service_test.go deleted file mode 100644 index 922c686..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/service/update_user_provided_service_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package service_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/service" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("update-user-provided-service test", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - serviceRepo *testapi.FakeUserProvidedServiceInstanceRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - serviceRepo = &testapi.FakeUserProvidedServiceInstanceRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := NewUpdateUserProvidedService(ui, configRepo, serviceRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not provided the name of the service to update", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("whoops")).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "service-name" - requirementsFactory.ServiceInstance = serviceInstance - }) - - Context("when no flags are provided", func() { - It("tells the user that no changes occurred", func() { - runCommand("service-name") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating user provided service", "service-name", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"No changes"}, - )) - }) - }) - - Context("when the user provides valid JSON with the -p flag", func() { - It("updates the user provided service specified", func() { - runCommand("-p", `{"foo":"bar"}`, "-l", "syslog://example.com", "service-name") - - Expect(requirementsFactory.ServiceInstanceName).To(Equal("service-name")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating user provided service", "service-name", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"TIP"}, - )) - - Expect(serviceRepo.UpdateArgsForCall(0).Name).To(Equal("service-name")) - Expect(serviceRepo.UpdateArgsForCall(0).Params).To(Equal(map[string]interface{}{"foo": "bar"})) - Expect(serviceRepo.UpdateArgsForCall(0).SysLogDrainUrl).To(Equal("syslog://example.com")) - }) - }) - - Context("when the user provides invalid JSON with the -p flag", func() { - It("tells the user the JSON is invalid", func() { - runCommand("-p", `{"foo":"ba WHOOPS OH MY HOW DID THIS GET HERE???`, "service-name") - - Expect(serviceRepo.UpdateCallCount()).To(Equal(0)) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"JSON is invalid"}, - )) - }) - }) - - Context("when the service with the given name is not user provided", func() { - BeforeEach(func() { - plan := models.ServicePlanFields{Guid: "my-plan-guid"} - serviceInstance := models.ServiceInstance{} - serviceInstance.Name = "found-service-name" - serviceInstance.ServicePlan = plan - - requirementsFactory.ServiceInstance = serviceInstance - }) - - It("fails and tells the user what went wrong", func() { - runCommand("-p", `{"foo":"bar"}`, "service-name") - - Expect(serviceRepo.UpdateCallCount()).To(Equal(0)) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Service Instance is not user provided"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/disable_service_access.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/disable_service_access.go deleted file mode 100644 index 882fa41..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/disable_service_access.go +++ /dev/null @@ -1,142 +0,0 @@ -package serviceaccess - -import ( - "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DisableServiceAccess struct { - ui terminal.UI - config core_config.Reader - actor actors.ServicePlanActor - tokenRefresher authentication.TokenRefresher -} - -func NewDisableServiceAccess(ui terminal.UI, config core_config.Reader, actor actors.ServicePlanActor, tokenRefresher authentication.TokenRefresher) (cmd *DisableServiceAccess) { - return &DisableServiceAccess{ - ui: ui, - config: config, - actor: actor, - tokenRefresher: tokenRefresher, - } -} - -func (cmd *DisableServiceAccess) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{requirementsFactory.NewLoginRequirement()}, nil -} - -func (cmd *DisableServiceAccess) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "disable-service-access", - Description: T("Disable access to a service or service plan for one or all orgs"), - Usage: "CF_NAME disable-service-access SERVICE [-p PLAN] [-o ORG]", - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Disable access to a specified service plan")), - flag_helpers.NewStringFlag("o", T("Disable access for a specified organization")), - }, - } -} - -func (cmd *DisableServiceAccess) Run(c *cli.Context) { - _, err := cmd.tokenRefresher.RefreshAuthToken() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - serviceName := c.Args()[0] - planName := c.String("p") - orgName := c.String("o") - - if planName != "" && orgName != "" { - cmd.disablePlanAndOrgForService(serviceName, planName, orgName) - } else if planName != "" { - cmd.disableSinglePlanForService(serviceName, planName) - } else if orgName != "" { - cmd.disablePlansForSingleOrgForService(serviceName, orgName) - } else { - cmd.disableServiceForAll(serviceName) - } - - cmd.ui.Say(T("OK")) -} - -func (cmd *DisableServiceAccess) disableServiceForAll(serviceName string) { - cmd.ui.Say(T("Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceName), "UserName": terminal.EntityNameColor(cmd.config.Username())})) - allPlansAlreadySet, err := cmd.actor.UpdateAllPlansForService(serviceName, false) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if allPlansAlreadySet { - cmd.ui.Say(T("All plans of the service are already inaccessible for all orgs")) - } -} - -func (cmd *DisableServiceAccess) disablePlanAndOrgForService(serviceName string, planName string, orgName string) { - cmd.ui.Say(T("Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", map[string]interface{}{"PlanName": terminal.EntityNameColor(planName), "ServiceName": terminal.EntityNameColor(serviceName), "OrgName": terminal.EntityNameColor(orgName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - planOriginalAccess, err := cmd.actor.UpdatePlanAndOrgForService(serviceName, planName, orgName, false) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if planOriginalAccess == actors.None { - cmd.ui.Say(T("The plan is already inaccessible for this org")) - } else if planOriginalAccess != actors.Limited { - cmd.ui.Say(T("No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - map[string]interface{}{ - "PlanName": terminal.EntityNameColor(planName), - "ServiceName": terminal.EntityNameColor(serviceName), - "OrgName": terminal.EntityNameColor(orgName), - })) - } - return -} - -func (cmd *DisableServiceAccess) disableSinglePlanForService(serviceName string, planName string) { - cmd.ui.Say(T("Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", map[string]interface{}{"PlanName": terminal.EntityNameColor(planName), "ServiceName": terminal.EntityNameColor(serviceName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - planOriginalAccess, err := cmd.actor.UpdateSinglePlanForService(serviceName, planName, false) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if planOriginalAccess == actors.None { - cmd.ui.Say(T("The plan is already inaccessible for all orgs")) - } - return -} - -func (cmd *DisableServiceAccess) disablePlansForSingleOrgForService(serviceName string, orgName string) { - cmd.ui.Say(T("Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceName), "OrgName": terminal.EntityNameColor(orgName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - serviceAccess, err := cmd.actor.FindServiceAccess(serviceName, orgName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - if serviceAccess == actors.AllPlansArePublic { - cmd.ui.Say(T("No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - map[string]interface{}{ - "ServiceName": terminal.EntityNameColor(serviceName), - "OrgName": terminal.EntityNameColor(orgName), - })) - return - } - - allPlansWereSet, err := cmd.actor.UpdateOrgForService(serviceName, orgName, false) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if allPlansWereSet { - cmd.ui.Say(T("All plans of the service are already inaccessible for this org")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/disable_service_access_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/disable_service_access_test.go deleted file mode 100644 index 865c2fd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/disable_service_access_test.go +++ /dev/null @@ -1,220 +0,0 @@ -package serviceaccess_test - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf/actors" - testactor "github.com/cloudfoundry/cli/cf/actors/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/serviceaccess" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("disable-service-access command", func() { - var ( - ui *testterm.FakeUI - actor *testactor.FakeServicePlanActor - requirementsFactory *testreq.FakeReqFactory - tokenRefresher *testapi.FakeAuthenticationRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{ - Inputs: []string{"yes"}, - } - actor = &testactor.FakeServicePlanActor{} - requirementsFactory = &testreq.FakeReqFactory{} - tokenRefresher = &testapi.FakeAuthenticationRepository{} - }) - - runCommand := func(args []string) bool { - cmd := NewDisableServiceAccess(ui, configuration.NewRepositoryWithDefaults(), actor, tokenRefresher) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - Expect(runCommand([]string{"foo"})).To(BeFalse()) - }) - - It("fails with usage when it does not recieve any arguments", func() { - requirementsFactory.LoginSuccess = true - runCommand(nil) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("refreshes the auth token", func() { - runCommand([]string{"service"}) - Expect(tokenRefresher.RefreshTokenCalled).To(BeTrue()) - }) - - Context("when refreshing the auth token fails", func() { - It("fails and returns the error", func() { - tokenRefresher.RefreshTokenError = errors.New("Refreshing went wrong") - runCommand([]string{"service"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Refreshing went wrong"}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the named service exists", func() { - It("tells the user if all plans were already private", func() { - actor.UpdateAllPlansForServiceReturns(true, nil) - - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"All plans of the service are already inaccessible for all orgs"}, - []string{"OK"}, - )) - }) - - It("tells the user the plans are being updated if they weren't all already private", func() { - actor.UpdateAllPlansForServiceReturns(false, nil) - - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Disabling access to all plans of service service for all orgs as my-user..."}, - []string{"OK"}, - )) - }) - - It("prints an error if updating one of the plans fails", func() { - actor.UpdateAllPlansForServiceReturns(true, errors.New("Kaboom!")) - - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Kaboom!"}, - )) - }) - - Context("The user provides a plan", func() { - It("prints an error if the service does not exist", func() { - actor.UpdateSinglePlanForServiceReturns(actors.All, errors.New("could not find service")) - - Expect(runCommand([]string{"-p", "service-plan", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"could not find service"}, - )) - }) - - It("tells the user if the plan is already private", func() { - actor.UpdateSinglePlanForServiceReturns(actors.None, nil) - - Expect(runCommand([]string{"-p", "private-service-plan", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"The plan is already inaccessible for all orgs"}, - []string{"OK"}, - )) - }) - - It("tells the user the plan is being updated if it is not private", func() { - actor.UpdateSinglePlanForServiceReturns(actors.All, nil) - - Expect(runCommand([]string{"-p", "public-service-plan", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Disabling access of plan public-service-plan for service service"}, - []string{"OK"}, - )) - }) - }) - - Context("the user provides an org", func() { - It("fails if the org does not exist", func() { - actor.UpdateOrgForServiceReturns(false, errors.New("could not find org")) - - Expect(runCommand([]string{"-o", "not-findable-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"could not find org"}, - )) - }) - - It("tells the user if the service's plans are already inaccessible", func() { - actor.UpdateOrgForServiceReturns(true, nil) - - Expect(runCommand([]string{"-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"All plans of the service are already inaccessible for this org"}, - []string{"OK"}, - )) - }) - - It("tells the user the service's plans are being updated if they are accessible", func() { - actor.UpdateOrgForServiceReturns(false, nil) - - Expect(runCommand([]string{"-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Disabling access to all plans of service service for the org my-org as"}, - []string{"OK"}, - )) - }) - - It("tells the user if the service's plans are all public", func() { - actor.FindServiceAccessReturns(actors.AllPlansArePublic, nil) - actor.UpdateOrgForServiceReturns(true, nil) - - Expect(runCommand([]string{"-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No action taken. You must disable access to all plans of service service for all orgs and then grant access for all orgs except the my-org org."}, - []string{"OK"}, - )) - }) - }) - - Context("the user provides a plan and org", func() { - It("fails if the org does not exist", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.All, errors.New("could not find org")) - - Expect(runCommand([]string{"-p", "service-plan", "-o", "not-findable-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"could not find org"}, - )) - }) - - It("tells the user if the plan is already private", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.None, nil) - - Expect(runCommand([]string{"-p", "private-service-plan", "-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"The plan is already inaccessible for this org"}, - []string{"OK"}, - )) - }) - - It("tells the user the use if the plan is being updated if the plan is limited", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.Limited, nil) - - Expect(runCommand([]string{"-p", "limited-service-plan", "-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Disabling access to plan limited-service-plan of service service for org my-org as"}, - []string{"OK"}, - )) - }) - - It("tells the user the plan is accessible to all orgs if the plan is public", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.All, nil) - - Expect(runCommand([]string{"-p", "public-service-plan", "-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"No action taken. You must disable access to the public-service-plan plan of service service for all orgs and then grant access for all orgs except the my-org org."}, - []string{"OK"}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/enable_service_access.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/enable_service_access.go deleted file mode 100644 index 5733937..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/enable_service_access.go +++ /dev/null @@ -1,120 +0,0 @@ -package serviceaccess - -import ( - "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type EnableServiceAccess struct { - ui terminal.UI - config core_config.Reader - actor actors.ServicePlanActor - tokenRefresher authentication.TokenRefresher -} - -func NewEnableServiceAccess(ui terminal.UI, config core_config.Reader, actor actors.ServicePlanActor, tokenRefresher authentication.TokenRefresher) (cmd *EnableServiceAccess) { - return &EnableServiceAccess{ - ui: ui, - config: config, - actor: actor, - tokenRefresher: tokenRefresher, - } -} - -func (cmd *EnableServiceAccess) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{requirementsFactory.NewLoginRequirement()}, nil -} - -func (cmd *EnableServiceAccess) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "enable-service-access", - Description: T("Enable access to a service or service plan for one or all orgs"), - Usage: "CF_NAME enable-service-access SERVICE [-p PLAN] [-o ORG]", - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("p", T("Enable access to a specified service plan")), - flag_helpers.NewStringFlag("o", T("Enable access for a specified organization")), - }, - } -} - -func (cmd *EnableServiceAccess) Run(c *cli.Context) { - _, err := cmd.tokenRefresher.RefreshAuthToken() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - serviceName := c.Args()[0] - planName := c.String("p") - orgName := c.String("o") - - if planName != "" && orgName != "" { - cmd.enablePlanAndOrgForService(serviceName, planName, orgName) - } else if planName != "" { - cmd.enablePlanForService(serviceName, planName) - } else if orgName != "" { - cmd.enableAllPlansForSingleOrgForService(serviceName, orgName) - } else { - cmd.enableAllPlansForService(serviceName) - } - cmd.ui.Ok() -} - -func (cmd *EnableServiceAccess) enablePlanAndOrgForService(serviceName string, planName string, orgName string) { - cmd.ui.Say(T("Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", map[string]interface{}{"PlanName": terminal.EntityNameColor(planName), "ServiceName": terminal.EntityNameColor(serviceName), "OrgName": terminal.EntityNameColor(orgName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - planOriginalAccess, err := cmd.actor.UpdatePlanAndOrgForService(serviceName, planName, orgName, true) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if planOriginalAccess == actors.All { - cmd.ui.Say(T("The plan is already accessible for this org")) - } -} - -func (cmd *EnableServiceAccess) enablePlanForService(serviceName string, planName string) { - cmd.ui.Say(T("Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", map[string]interface{}{"PlanName": terminal.EntityNameColor(planName), "ServiceName": terminal.EntityNameColor(serviceName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - planOriginalAccess, err := cmd.actor.UpdateSinglePlanForService(serviceName, planName, true) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if planOriginalAccess == actors.All { - cmd.ui.Say(T("The plan is already accessible for all orgs")) - } -} - -func (cmd *EnableServiceAccess) enableAllPlansForService(serviceName string) { - cmd.ui.Say(T("Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - allPlansInServicePublic, err := cmd.actor.UpdateAllPlansForService(serviceName, true) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if allPlansInServicePublic { - cmd.ui.Say(T("All plans of the service are already accessible for all orgs")) - } -} - -func (cmd *EnableServiceAccess) enableAllPlansForSingleOrgForService(serviceName string, orgName string) { - cmd.ui.Say(T("Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", map[string]interface{}{"ServiceName": terminal.EntityNameColor(serviceName), "OrgName": terminal.EntityNameColor(orgName), "Username": terminal.EntityNameColor(cmd.config.Username())})) - allPlansWereSet, err := cmd.actor.UpdateOrgForService(serviceName, orgName, true) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if allPlansWereSet { - cmd.ui.Say(T("All plans of the service are already accessible for this org")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/enable_service_access_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/enable_service_access_test.go deleted file mode 100644 index 4fecb3e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/enable_service_access_test.go +++ /dev/null @@ -1,205 +0,0 @@ -package serviceaccess_test - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf/actors" - testactor "github.com/cloudfoundry/cli/cf/actors/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/serviceaccess" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("enable-service-access command", func() { - var ( - ui *testterm.FakeUI - actor *testactor.FakeServicePlanActor - requirementsFactory *testreq.FakeReqFactory - tokenRefresher *testapi.FakeAuthenticationRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - actor = &testactor.FakeServicePlanActor{} - requirementsFactory = &testreq.FakeReqFactory{} - tokenRefresher = &testapi.FakeAuthenticationRepository{} - }) - - runCommand := func(args []string) bool { - cmd := NewEnableServiceAccess(ui, configuration.NewRepositoryWithDefaults(), actor, tokenRefresher) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - Expect(runCommand([]string{"foo"})).To(BeFalse()) - }) - - It("fails with usage when it does not recieve any arguments", func() { - requirementsFactory.LoginSuccess = true - runCommand(nil) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("Refreshes the auth token", func() { - runCommand([]string{"service"}) - Expect(tokenRefresher.RefreshTokenCalled).To(BeTrue()) - }) - - Context("when refreshing the auth token fails", func() { - It("fails and returns the error", func() { - tokenRefresher.RefreshTokenError = errors.New("Refreshing went wrong") - runCommand([]string{"service"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Refreshing went wrong"}, - []string{"FAILED"}, - )) - }) - }) - - Context("when the named service exists", func() { - It("returns OK when ran successfully", func() { - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"OK"}, - )) - }) - - It("tells the user if all plans were already public", func() { - actor.UpdateAllPlansForServiceReturns(true, nil) - - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"All plans of the service", "are already accessible for all orgs"}, - []string{"OK"}, - )) - }) - - It("tells the user the plans are being updated if they weren't all already public", func() { - actor.UpdateAllPlansForServiceReturns(false, nil) - - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Enabling access to all plans of service service for all orgs as my-user..."}, - []string{"OK"}, - )) - }) - - It("prints an error if updating one of the plans fails", func() { - actor.UpdateAllPlansForServiceReturns(true, errors.New("Kaboom!")) - - Expect(runCommand([]string{"service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Kaboom!"}, - )) - }) - - Context("The user provides a plan", func() { - It("prints an error if the service does not exist", func() { - actor.UpdateSinglePlanForServiceReturns(actors.All, errors.New("could not find service")) - - Expect(runCommand([]string{"-p", "service-plan", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"could not find service"}, - )) - }) - - It("tells the user if the plan is already public", func() { - actor.UpdateSinglePlanForServiceReturns(actors.All, nil) - - Expect(runCommand([]string{"-p", "public-service-plan", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"The plan is already accessible for all orgs"}, - []string{"OK"}, - )) - }) - - It("tells the user the plan is being updated if it is not public", func() { - actor.UpdateSinglePlanForServiceReturns(actors.None, nil) - - Expect(runCommand([]string{"-p", "private-service-plan", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Enabling access of plan private-service-plan for service service"}, - []string{"OK"}, - )) - }) - }) - - Context("the user provides a plan and org", func() { - It("fails if the org does not exist", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.All, errors.New("could not find org")) - - Expect(runCommand([]string{"-p", "service-plan", "-o", "not-findable-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"could not find org"}, - )) - }) - - It("tells the user if the plan is already public", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.All, nil) - - Expect(runCommand([]string{"-p", "public-service-plan", "-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"The plan is already accessible for this org"}, - []string{"OK"}, - )) - }) - - It("tells the user the plan is being updated if it is not public", func() { - actor.UpdatePlanAndOrgForServiceReturns(actors.None, nil) - - Expect(runCommand([]string{"-p", "private-service-plan", "-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Enabling access to plan private-service-plan of service service for org my-org as"}, - []string{"OK"}, - )) - }) - }) - - Context("the user provides an org", func() { - It("fails if the org does not exist", func() { - actor.UpdateOrgForServiceReturns(false, errors.New("could not find org")) - - Expect(runCommand([]string{"-o", "not-findable-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"could not find org"}, - )) - }) - - It("tells the user if the service's plans are already accessible", func() { - actor.UpdateOrgForServiceReturns(true, nil) - - Expect(runCommand([]string{"-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"All plans of the service are already accessible for this org"}, - []string{"OK"}, - )) - }) - - It("tells the user the service's plans are being updated if it is not accessible", func() { - actor.UpdateOrgForServiceReturns(false, nil) - - Expect(runCommand([]string{"-o", "my-org", "service"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Enabling access to all plans of service service for the org my-org as"}, - []string{"OK"}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/service_access.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/service_access.go deleted file mode 100644 index 50d97e1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/service_access.go +++ /dev/null @@ -1,143 +0,0 @@ -package serviceaccess - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/actors" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ServiceAccess struct { - ui terminal.UI - config core_config.Reader - actor actors.ServiceActor - tokenRefresher authentication.TokenRefresher -} - -func NewServiceAccess(ui terminal.UI, config core_config.Reader, actor actors.ServiceActor, tokenRefresher authentication.TokenRefresher) (cmd *ServiceAccess) { - return &ServiceAccess{ - ui: ui, - config: config, - actor: actor, - tokenRefresher: tokenRefresher, - } -} - -func (cmd *ServiceAccess) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "service-access", - Description: T("List service access settings"), - Usage: "CF_NAME service-access [-b BROKER] [-e SERVICE] [-o ORG]", - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("b", T("access for plans of a particular broker")), - flag_helpers.NewStringFlag("e", T("access for plans of a particular service offering")), - flag_helpers.NewStringFlag("o", T("plans accessible by a particular organization")), - }, - } -} - -func (cmd *ServiceAccess) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd *ServiceAccess) Run(c *cli.Context) { - _, err := cmd.tokenRefresher.RefreshAuthToken() - if err != nil { - cmd.ui.Failed(err.Error()) - } - - brokerName := c.String("b") - serviceName := c.String("e") - orgName := c.String("o") - - if brokerName != "" && serviceName != "" && orgName != "" { - cmd.ui.Say(T("Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", map[string]interface{}{ - "Broker": terminal.EntityNameColor(brokerName), - "Service": terminal.EntityNameColor(serviceName), - "Organization": terminal.EntityNameColor(orgName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else if serviceName != "" && orgName != "" { - cmd.ui.Say(T("Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", map[string]interface{}{ - "Service": terminal.EntityNameColor(serviceName), - "Organization": terminal.EntityNameColor(orgName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else if brokerName != "" && orgName != "" { - cmd.ui.Say(T("Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", map[string]interface{}{ - "Broker": terminal.EntityNameColor(brokerName), - "Organization": terminal.EntityNameColor(orgName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else if brokerName != "" && serviceName != "" { - cmd.ui.Say(T("Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", map[string]interface{}{ - "Broker": terminal.EntityNameColor(brokerName), - "Service": terminal.EntityNameColor(serviceName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else if brokerName != "" { - cmd.ui.Say(T("Getting service access for broker {{.Broker}} as {{.Username}}...", map[string]interface{}{ - "Broker": terminal.EntityNameColor(brokerName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else if serviceName != "" { - cmd.ui.Say(T("Getting service access for service {{.Service}} as {{.Username}}...", map[string]interface{}{ - "Service": terminal.EntityNameColor(serviceName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else if orgName != "" { - cmd.ui.Say(T("Getting service access for organization {{.Organization}} as {{.Username}}...", map[string]interface{}{ - "Organization": terminal.EntityNameColor(orgName), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } else { - cmd.ui.Say(T("Getting service access as {{.Username}}...", map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username())})) - } - - brokers, err := cmd.actor.FilterBrokers(brokerName, serviceName, orgName) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - cmd.printTable(brokers) -} - -func (cmd ServiceAccess) printTable(brokers []models.ServiceBroker) { - for _, serviceBroker := range brokers { - cmd.ui.Say(fmt.Sprintf(T("broker: {{.Name}}", map[string]interface{}{"Name": serviceBroker.Name}))) - - table := terminal.NewTable(cmd.ui, []string{"", T("service"), T("plan"), T("access"), T("orgs")}) - for _, service := range serviceBroker.Services { - if len(service.Plans) > 0 { - for _, plan := range service.Plans { - table.Add("", service.Label, plan.Name, cmd.formatAccess(plan.Public, plan.OrgNames), strings.Join(plan.OrgNames, ",")) - } - } else { - table.Add("", service.Label, "", "", "") - } - } - table.Print() - - cmd.ui.Say("") - } - return -} - -func (cmd ServiceAccess) formatAccess(public bool, orgNames []string) string { - if public { - return T("all") - } - if len(orgNames) > 0 { - return T("limited") - } - return T("none") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/service_access_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/service_access_test.go deleted file mode 100644 index 26587cd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/service_access_test.go +++ /dev/null @@ -1,206 +0,0 @@ -package serviceaccess_test - -import ( - "errors" - "strings" - - testactor "github.com/cloudfoundry/cli/cf/actors/fakes" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/serviceaccess" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("service-access command", func() { - var ( - ui *testterm.FakeUI - actor *testactor.FakeServiceActor - requirementsFactory *testreq.FakeReqFactory - serviceBroker1 models.ServiceBroker - serviceBroker2 models.ServiceBroker - tokenRefresher *testapi.FakeAuthenticationRepository - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - actor = &testactor.FakeServiceActor{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - tokenRefresher = &testapi.FakeAuthenticationRepository{} - }) - - runCommand := func(args ...string) bool { - cmd := NewServiceAccess(ui, testconfig.NewRepositoryWithDefaults(), actor, tokenRefresher) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when logged in", func() { - BeforeEach(func() { - serviceBroker1 = models.ServiceBroker{ - Guid: "broker1", - Name: "brokername1", - Services: []models.ServiceOffering{ - { - ServiceOfferingFields: models.ServiceOfferingFields{Label: "my-service-1"}, - Plans: []models.ServicePlanFields{ - {Name: "beep", Public: true}, - {Name: "burp", Public: false}, - {Name: "boop", Public: false, OrgNames: []string{"fwip", "brzzt"}}, - }, - }, - { - ServiceOfferingFields: models.ServiceOfferingFields{Label: "my-service-2"}, - Plans: []models.ServicePlanFields{ - {Name: "petaloideous-noncelebration", Public: false}, - }, - }, - }, - } - serviceBroker2 = models.ServiceBroker{ - Guid: "broker2", - Name: "brokername2", - Services: []models.ServiceOffering{ - {ServiceOfferingFields: models.ServiceOfferingFields{Label: "my-service-3"}}, - }, - } - - actor.FilterBrokersReturns([]models.ServiceBroker{ - serviceBroker1, - serviceBroker2, - }, - nil, - ) - }) - - It("refreshes the auth token", func() { - runCommand() - Expect(tokenRefresher.RefreshTokenCalled).To(BeTrue()) - }) - - Context("when refreshing the auth token fails", func() { - It("fails and returns the error", func() { - tokenRefresher.RefreshTokenError = errors.New("Refreshing went wrong") - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Refreshing went wrong"}, - []string{"FAILED"}, - )) - }) - }) - - Context("When no flags are provided", func() { - It("tells the user it is obtaining the service access", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access as", "my-user"}, - )) - }) - - It("prints all of the brokers", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"broker: brokername1"}, - []string{"service", "plan", "access", "orgs"}, - []string{"my-service-1", "beep", "all"}, - []string{"my-service-1", "burp", "none"}, - []string{"my-service-1", "boop", "limited", "fwip", "brzzt"}, - []string{"my-service-2", "petaloideous-noncelebration"}, - []string{"broker: brokername2"}, - []string{"service", "plan", "access", "orgs"}, - []string{"my-service-3"}, - )) - }) - }) - - Context("When the broker flag is provided", func() { - It("tells the user it is obtaining the services access for a particular broker", func() { - runCommand("-b", "brokername1") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for broker brokername1 as", "my-user"}, - )) - }) - }) - - Context("when the service flag is provided", func() { - It("tells the user it is obtaining the service access for a particular service", func() { - runCommand("-e", "my-service-1") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for service my-service-1 as", "my-user"}, - )) - }) - }) - - Context("when the org flag is provided", func() { - It("tells the user it is obtaining the service access for a particular org", func() { - runCommand("-o", "fwip") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for organization fwip as", "my-user"}, - )) - }) - }) - - Context("when the broker and service flag are both provided", func() { - It("tells the user it is obtaining the service access for a particular broker and service", func() { - runCommand("-b", "brokername1", "-e", "my-service-1") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for broker brokername1", "and service my-service-1", "as", "my-user"}, - )) - }) - }) - - Context("when the broker and org name are both provided", func() { - It("tells the user it is obtaining the service access for a particular broker and org", func() { - runCommand("-b", "brokername1", "-o", "fwip") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for broker brokername1", "and organization fwip", "as", "my-user"}, - )) - }) - }) - - Context("when the service and org name are both provided", func() { - It("tells the user it is obtaining the service access for a particular service and org", func() { - runCommand("-e", "my-service-1", "-o", "fwip") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for service my-service-1", "and organization fwip", "as", "my-user"}, - )) - }) - }) - - Context("when all flags are provided", func() { - It("tells the user it is filtering on all options", func() { - runCommand("-b", "brokername1", "-e", "my-service-1", "-o", "fwip") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service access", "for broker brokername1", "and service my-service-1", "and organization fwip", "as", "my-user"}, - )) - }) - }) - Context("when filter brokers returns an error", func() { - It("gives only the access error", func() { - err := errors.New("Error finding service brokers") - actor.FilterBrokersReturns([]models.ServiceBroker{}, err) - runCommand() - - Expect(strings.Join(ui.Outputs, "\n")).To(MatchRegexp(`FAILED\nError finding service brokers`)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/serviceaccess_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/serviceaccess_suite_test.go deleted file mode 100644 index 47f699e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceaccess/serviceaccess_suite_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package serviceaccess_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestServiceAccess(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Service Access Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/create_service_auth_token.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/create_service_auth_token.go deleted file mode 100644 index 5e3e9e7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/create_service_auth_token.go +++ /dev/null @@ -1,66 +0,0 @@ -package serviceauthtoken - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateServiceAuthTokenFields struct { - ui terminal.UI - config core_config.Reader - authTokenRepo api.ServiceAuthTokenRepository -} - -func NewCreateServiceAuthToken(ui terminal.UI, config core_config.Reader, authTokenRepo api.ServiceAuthTokenRepository) (cmd CreateServiceAuthTokenFields) { - cmd.ui = ui - cmd.config = config - cmd.authTokenRepo = authTokenRepo - return -} - -func (cmd CreateServiceAuthTokenFields) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-service-auth-token", - Description: T("Create a service auth token"), - Usage: T("CF_NAME create-service-auth-token LABEL PROVIDER TOKEN"), - } -} - -func (cmd CreateServiceAuthTokenFields) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - return - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd CreateServiceAuthTokenFields) Run(c *cli.Context) { - cmd.ui.Say(T("Creating service auth token as {{.CurrentUser}}...", - map[string]interface{}{ - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - serviceAuthTokenRepo := models.ServiceAuthTokenFields{ - Label: c.Args()[0], - Provider: c.Args()[1], - Token: c.Args()[2], - } - - apiErr := cmd.authTokenRepo.Create(serviceAuthTokenRepo) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/create_service_auth_token_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/create_service_auth_token_test.go deleted file mode 100644 index 7205e9f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/create_service_auth_token_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package serviceauthtoken_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/serviceauthtoken" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-service-auth-token command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - authTokenRepo *testapi.FakeAuthTokenRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - authTokenRepo = &testapi.FakeAuthTokenRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := NewCreateServiceAuthToken(ui, configRepo, authTokenRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not invoked with exactly three args", func() { - requirementsFactory.LoginSuccess = true - runCommand("whoops", "i-accidentally-an-arg") - - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("just", "enough", "args")).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("creates a service auth token, obviously", func() { - runCommand("a label", "a provider", "a value") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service auth token as", "my-user"}, - []string{"OK"}, - )) - - authToken := models.ServiceAuthTokenFields{} - authToken.Label = "a label" - authToken.Provider = "a provider" - authToken.Token = "a value" - Expect(authTokenRepo.CreatedServiceAuthTokenFields).To(Equal(authToken)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/delete_service_auth_token.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/delete_service_auth_token.go deleted file mode 100644 index eb080c5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/delete_service_auth_token.go +++ /dev/null @@ -1,83 +0,0 @@ -package serviceauthtoken - -import ( - "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteServiceAuthTokenFields struct { - ui terminal.UI - config core_config.Reader - authTokenRepo api.ServiceAuthTokenRepository -} - -func NewDeleteServiceAuthToken(ui terminal.UI, config core_config.Reader, authTokenRepo api.ServiceAuthTokenRepository) (cmd DeleteServiceAuthTokenFields) { - cmd.ui = ui - cmd.config = config - cmd.authTokenRepo = authTokenRepo - return -} - -func (cmd DeleteServiceAuthTokenFields) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-service-auth-token", - Description: T("Delete a service auth token"), - Usage: T("CF_NAME delete-service-auth-token LABEL PROVIDER [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd DeleteServiceAuthTokenFields) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - return - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - return -} - -func (cmd DeleteServiceAuthTokenFields) Run(c *cli.Context) { - tokenLabel := c.Args()[0] - tokenProvider := c.Args()[1] - - if c.Bool("f") == false { - if !cmd.ui.ConfirmDelete(T("service auth token"), fmt.Sprintf("%s %s", tokenLabel, tokenProvider)) { - return - } - } - - cmd.ui.Say(T("Deleting service auth token as {{.CurrentUser}}", - map[string]interface{}{ - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - token, apiErr := cmd.authTokenRepo.FindByLabelAndProvider(tokenLabel, tokenProvider) - - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Service Auth Token {{.Label}} {{.Provider}} does not exist.", map[string]interface{}{"Label": tokenLabel, "Provider": tokenProvider})) - return - default: - cmd.ui.Failed(apiErr.Error()) - } - - apiErr = cmd.authTokenRepo.Delete(token) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/delete_service_auth_token_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/delete_service_auth_token_test.go deleted file mode 100644 index 6a0ba65..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/delete_service_auth_token_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package serviceauthtoken_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/serviceauthtoken" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-service-auth-token command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - authTokenRepo *testapi.FakeAuthTokenRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - authTokenRepo = &testapi.FakeAuthTokenRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteServiceAuthToken(ui, configRepo, authTokenRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when fewer than two arguments are given", func() { - runCommand("yurp") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).To(BeFalse()) - }) - }) - - Context("when the service auth token exists", func() { - BeforeEach(func() { - authTokenRepo.FindByLabelAndProviderServiceAuthTokenFields = models.ServiceAuthTokenFields{ - Guid: "the-guid", - Label: "a label", - Provider: "a provider", - } - }) - - It("deletes the service auth token", func() { - runCommand("a label", "a provider") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service auth token as", "my-user"}, - []string{"OK"}, - )) - - Expect(authTokenRepo.FindByLabelAndProviderLabel).To(Equal("a label")) - Expect(authTokenRepo.FindByLabelAndProviderProvider).To(Equal("a provider")) - Expect(authTokenRepo.DeletedServiceAuthTokenFields.Guid).To(Equal("the-guid")) - }) - - It("does nothing when the user does not confirm", func() { - ui.Inputs = []string{"nope"} - runCommand("a label", "a provider") - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really delete", "service auth token", "a label", "a provider"}, - )) - Expect(ui.Outputs).To(BeEmpty()) - Expect(authTokenRepo.DeletedServiceAuthTokenFields).To(Equal(models.ServiceAuthTokenFields{})) - }) - - It("does not prompt the user when the -f flag is given", func() { - ui.Inputs = []string{} - runCommand("-f", "a label", "a provider") - - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting"}, - []string{"OK"}, - )) - - Expect(authTokenRepo.DeletedServiceAuthTokenFields.Guid).To(Equal("the-guid")) - }) - }) - - Context("when the service auth token does not exist", func() { - BeforeEach(func() { - authTokenRepo.FindByLabelAndProviderApiResponse = errors.NewModelNotFoundError("Service Auth Token", "") - }) - - It("warns the user when the specified service auth token does not exist", func() { - runCommand("a label", "a provider") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service auth token as", "my-user"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"does not exist"})) - }) - }) - - Context("when there is an error deleting the service auth token", func() { - BeforeEach(func() { - authTokenRepo.FindByLabelAndProviderApiResponse = errors.New("OH NOES") - }) - - It("shows the user an error", func() { - runCommand("a label", "a provider") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service auth token as", "my-user"}, - []string{"FAILED"}, - []string{"OH NOES"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/service_auth_tokens.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/service_auth_tokens.go deleted file mode 100644 index f5185a6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/service_auth_tokens.go +++ /dev/null @@ -1,64 +0,0 @@ -package serviceauthtoken - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListServiceAuthTokens struct { - ui terminal.UI - config core_config.Reader - authTokenRepo api.ServiceAuthTokenRepository -} - -func NewListServiceAuthTokens(ui terminal.UI, config core_config.Reader, authTokenRepo api.ServiceAuthTokenRepository) (cmd ListServiceAuthTokens) { - cmd.ui = ui - cmd.config = config - cmd.authTokenRepo = authTokenRepo - return -} - -func (cmd ListServiceAuthTokens) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "service-auth-tokens", - Description: T("List service auth tokens"), - Usage: T("CF_NAME service-auth-tokens"), - } -} - -func (cmd ListServiceAuthTokens) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd ListServiceAuthTokens) Run(c *cli.Context) { - cmd.ui.Say(T("Getting service auth tokens as {{.CurrentUser}}...", - map[string]interface{}{ - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - authTokens, apiErr := cmd.authTokenRepo.FindAll() - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("label"), T("provider")}) - - for _, authToken := range authTokens { - table.Add(authToken.Label, authToken.Provider) - } - - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/service_auth_tokens_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/service_auth_tokens_test.go deleted file mode 100644 index 7a8c8b0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/service_auth_tokens_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package serviceauthtoken_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/serviceauthtoken" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func callListServiceAuthTokens(requirementsFactory *testreq.FakeReqFactory, authTokenRepo *testapi.FakeAuthTokenRepo) (ui *testterm.FakeUI) { - ui = &testterm.FakeUI{} - - config := testconfig.NewRepositoryWithDefaults() - - cmd := NewListServiceAuthTokens(ui, config, authTokenRepo) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - return -} - -var _ = Describe("service-auth-tokens command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - authTokenRepo *testapi.FakeAuthTokenRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - authTokenRepo = &testapi.FakeAuthTokenRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewListServiceAuthTokens(ui, configRepo, authTokenRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - Expect(runCommand()).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in and some service auth tokens exist", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - - authTokenRepo.FindAllAuthTokens = []models.ServiceAuthTokenFields{ - models.ServiceAuthTokenFields{Label: "a label", Provider: "a provider"}, - models.ServiceAuthTokenFields{Label: "a second label", Provider: "a second provider"}, - } - }) - - It("shows you the service auth tokens", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service auth tokens as", "my-user"}, - []string{"OK"}, - []string{"label", "provider"}, - []string{"a label", "a provider"}, - []string{"a second label", "a second provider"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/serviceauthtoken_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/serviceauthtoken_suite_test.go deleted file mode 100644 index 6df621c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/serviceauthtoken_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package serviceauthtoken_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestServiceauthtoken(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Serviceauthtoken Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/update_service_auth_token.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/update_service_auth_token.go deleted file mode 100644 index e293e9a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/update_service_auth_token.go +++ /dev/null @@ -1,63 +0,0 @@ -package serviceauthtoken - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UpdateServiceAuthTokenFields struct { - ui terminal.UI - config core_config.Reader - authTokenRepo api.ServiceAuthTokenRepository -} - -func NewUpdateServiceAuthToken(ui terminal.UI, config core_config.Reader, authTokenRepo api.ServiceAuthTokenRepository) (cmd UpdateServiceAuthTokenFields) { - cmd.ui = ui - cmd.config = config - cmd.authTokenRepo = authTokenRepo - return -} - -func (cmd UpdateServiceAuthTokenFields) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "update-service-auth-token", - Description: T("Update a service auth token"), - Usage: T("CF_NAME update-service-auth-token LABEL PROVIDER TOKEN"), - } -} - -func (cmd UpdateServiceAuthTokenFields) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - } - return -} - -func (cmd UpdateServiceAuthTokenFields) Run(c *cli.Context) { - cmd.ui.Say(T("Updating service auth token as {{.CurrentUser}}...", map[string]interface{}{"CurrentUser": terminal.EntityNameColor(cmd.config.Username())})) - - serviceAuthToken, apiErr := cmd.authTokenRepo.FindByLabelAndProvider(c.Args()[0], c.Args()[1]) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - serviceAuthToken.Token = c.Args()[2] - - apiErr = cmd.authTokenRepo.Update(serviceAuthToken) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/update_service_auth_token_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/update_service_auth_token_test.go deleted file mode 100644 index b84bdac..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/serviceauthtoken/update_service_auth_token_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package serviceauthtoken_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/serviceauthtoken" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("update-service-auth-token command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - authTokenRepo *testapi.FakeAuthTokenRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - authTokenRepo = &testapi.FakeAuthTokenRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewUpdateServiceAuthToken(ui, configRepo, authTokenRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not provided exactly three args", func() { - requirementsFactory.LoginSuccess = true - runCommand("some-token-label", "a-provider") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("label", "provider", "token")).To(BeFalse()) - }) - }) - - Context("when logged in and the service auth token exists", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - foundAuthToken := models.ServiceAuthTokenFields{} - foundAuthToken.Guid = "found-auth-token-guid" - foundAuthToken.Label = "found label" - foundAuthToken.Provider = "found provider" - authTokenRepo.FindByLabelAndProviderServiceAuthTokenFields = foundAuthToken - }) - - It("updates the service auth token with the provided args", func() { - runCommand("a label", "a provider", "a value") - - expectedAuthToken := models.ServiceAuthTokenFields{} - expectedAuthToken.Guid = "found-auth-token-guid" - expectedAuthToken.Label = "found label" - expectedAuthToken.Provider = "found provider" - expectedAuthToken.Token = "a value" - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service auth token as", "my-user"}, - []string{"OK"}, - )) - - Expect(authTokenRepo.FindByLabelAndProviderLabel).To(Equal("a label")) - Expect(authTokenRepo.FindByLabelAndProviderProvider).To(Equal("a provider")) - Expect(authTokenRepo.UpdatedServiceAuthTokenFields).To(Equal(expectedAuthToken)) - Expect(authTokenRepo.UpdatedServiceAuthTokenFields).To(Equal(expectedAuthToken)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/create_service_broker.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/create_service_broker.go deleted file mode 100644 index 209015a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/create_service_broker.go +++ /dev/null @@ -1,63 +0,0 @@ -package servicebroker - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateServiceBroker struct { - ui terminal.UI - config core_config.Reader - serviceBrokerRepo api.ServiceBrokerRepository -} - -func NewCreateServiceBroker(ui terminal.UI, config core_config.Reader, serviceBrokerRepo api.ServiceBrokerRepository) (cmd CreateServiceBroker) { - cmd.ui = ui - cmd.config = config - cmd.serviceBrokerRepo = serviceBrokerRepo - return -} - -func (cmd CreateServiceBroker) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-service-broker", - Description: T("Create a service broker"), - Usage: T("CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL"), - } -} - -func (cmd CreateServiceBroker) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - - if len(c.Args()) != 4 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - - return -} - -func (cmd CreateServiceBroker) Run(c *cli.Context) { - name := c.Args()[0] - username := c.Args()[1] - password := c.Args()[2] - url := c.Args()[3] - - cmd.ui.Say(T("Creating service broker {{.Name}} as {{.Username}}...", - map[string]interface{}{ - "Name": terminal.EntityNameColor(name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr := cmd.serviceBrokerRepo.Create(name, url, username, password) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/create_service_broker_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/create_service_broker_test.go deleted file mode 100644 index 76870b4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/create_service_broker_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package servicebroker_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/servicebroker" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-service-broker command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - serviceBrokerRepo *testapi.FakeServiceBrokerRepo - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - serviceBrokerRepo = &testapi.FakeServiceBrokerRepo{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewCreateServiceBroker(ui, configRepo, serviceBrokerRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when called without exactly four args", func() { - requirementsFactory.LoginSuccess = true - runCommand("whoops", "not-enough", "args") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("Just", "Enough", "Args", "Provided")).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("creates a service broker, obviously", func() { - runCommand("my-broker", "my-username", "my-password", "http://example.com") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service broker", "my-broker", "my-user"}, - []string{"OK"}, - )) - - Expect(serviceBrokerRepo.CreateName).To(Equal("my-broker")) - Expect(serviceBrokerRepo.CreateUrl).To(Equal("http://example.com")) - Expect(serviceBrokerRepo.CreateUsername).To(Equal("my-username")) - Expect(serviceBrokerRepo.CreatePassword).To(Equal("my-password")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/delete_service_broker.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/delete_service_broker.go deleted file mode 100644 index 1cae04c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/delete_service_broker.go +++ /dev/null @@ -1,80 +0,0 @@ -package servicebroker - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteServiceBroker struct { - ui terminal.UI - config core_config.Reader - repo api.ServiceBrokerRepository -} - -func NewDeleteServiceBroker(ui terminal.UI, config core_config.Reader, repo api.ServiceBrokerRepository) (cmd DeleteServiceBroker) { - cmd.ui = ui - cmd.config = config - cmd.repo = repo - return -} - -func (cmd DeleteServiceBroker) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-service-broker", - Description: T("Delete a service broker"), - Usage: T("CF_NAME delete-service-broker SERVICE_BROKER [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd DeleteServiceBroker) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - return -} - -func (cmd DeleteServiceBroker) Run(c *cli.Context) { - brokerName := c.Args()[0] - if !c.Bool("f") && !cmd.ui.ConfirmDelete(T("service-broker"), brokerName) { - return - } - - cmd.ui.Say(T("Deleting service broker {{.Name}} as {{.Username}}...", - map[string]interface{}{ - "Name": terminal.EntityNameColor(brokerName), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - broker, apiErr := cmd.repo.FindByName(brokerName) - - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Service Broker {{.Name}} does not exist.", map[string]interface{}{"Name": brokerName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - apiErr = cmd.repo.Delete(broker.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/delete_service_broker_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/delete_service_broker_test.go deleted file mode 100644 index 3b7c25e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/delete_service_broker_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package servicebroker_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/servicebroker" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-service-broker command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - brokerRepo *testapi.FakeServiceBrokerRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - brokerRepo = &testapi.FakeServiceBrokerRepo{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteServiceBroker(ui, configRepo, brokerRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when called without a broker's name", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("-f", "my-broker")).To(BeFalse()) - }) - }) - - Context("when the service broker exists", func() { - BeforeEach(func() { - brokerRepo.FindByNameServiceBroker = models.ServiceBroker{ - Name: "service-broker-to-delete", - Guid: "service-broker-to-delete-guid", - } - }) - - It("deletes the service broker with the given name", func() { - runCommand("service-broker-to-delete") - - Expect(brokerRepo.FindByNameName).To(Equal("service-broker-to-delete")) - Expect(brokerRepo.DeletedServiceBrokerGuid).To(Equal("service-broker-to-delete-guid")) - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the service-broker service-broker-to-delete"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service broker", "service-broker-to-delete", "my-user"}, - []string{"OK"}, - )) - }) - - It("does not prompt when the -f flag is provided", func() { - runCommand("-f", "service-broker-to-delete") - - Expect(brokerRepo.FindByNameName).To(Equal("service-broker-to-delete")) - Expect(brokerRepo.DeletedServiceBrokerGuid).To(Equal("service-broker-to-delete-guid")) - - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service broker", "service-broker-to-delete", "my-user"}, - []string{"OK"}, - )) - }) - }) - - Context("when the service broker does not exist", func() { - BeforeEach(func() { - brokerRepo.FindByNameNotFound = true - }) - - It("warns the user", func() { - ui.Inputs = []string{} - runCommand("-f", "service-broker-to-delete") - - Expect(brokerRepo.FindByNameName).To(Equal("service-broker-to-delete")) - Expect(brokerRepo.DeletedServiceBrokerGuid).To(Equal("")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting service broker", "service-broker-to-delete"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"service-broker-to-delete", "does not exist"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/rename_service_broker.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/rename_service_broker.go deleted file mode 100644 index a211884..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/rename_service_broker.go +++ /dev/null @@ -1,67 +0,0 @@ -package servicebroker - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RenameServiceBroker struct { - ui terminal.UI - config core_config.Reader - repo api.ServiceBrokerRepository -} - -func NewRenameServiceBroker(ui terminal.UI, config core_config.Reader, repo api.ServiceBrokerRepository) (cmd RenameServiceBroker) { - cmd.ui = ui - cmd.config = config - cmd.repo = repo - return -} - -func (cmd RenameServiceBroker) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "rename-service-broker", - Description: T("Rename a service broker"), - Usage: T("CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER"), - } -} - -func (cmd RenameServiceBroker) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - - return -} - -func (cmd RenameServiceBroker) Run(c *cli.Context) { - serviceBroker, apiErr := cmd.repo.FindByName(c.Args()[0]) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Say(T("Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - map[string]interface{}{ - "OldName": terminal.EntityNameColor(serviceBroker.Name), - "NewName": terminal.EntityNameColor(c.Args()[1]), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - newName := c.Args()[1] - - apiErr = cmd.repo.Rename(serviceBroker.Guid, newName) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/rename_service_broker_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/rename_service_broker_test.go deleted file mode 100644 index ec3d116..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/rename_service_broker_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package servicebroker_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/servicebroker" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("rename-service-broker command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - serviceBrokerRepo *testapi.FakeServiceBrokerRepo - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - serviceBrokerRepo = &testapi.FakeServiceBrokerRepo{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewRenameServiceBroker(ui, configRepo, serviceBrokerRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when not invoked with exactly two args", func() { - requirementsFactory.LoginSuccess = true - runCommand("welp") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("okay", "DO---IIIIT")).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - broker := models.ServiceBroker{} - broker.Name = "my-found-broker" - broker.Guid = "my-found-broker-guid" - serviceBrokerRepo.FindByNameServiceBroker = broker - }) - - It("renames the given service broker", func() { - runCommand("my-broker", "my-new-broker") - Expect(serviceBrokerRepo.FindByNameName).To(Equal("my-broker")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming service broker", "my-found-broker", "my-new-broker", "my-user"}, - []string{"OK"}, - )) - - Expect(serviceBrokerRepo.RenamedServiceBrokerGuid).To(Equal("my-found-broker-guid")) - Expect(serviceBrokerRepo.RenamedServiceBrokerName).To(Equal("my-new-broker")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/service_brokers.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/service_brokers.go deleted file mode 100644 index 1ad369e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/service_brokers.go +++ /dev/null @@ -1,91 +0,0 @@ -package servicebroker - -import ( - "sort" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListServiceBrokers struct { - ui terminal.UI - config core_config.Reader - repo api.ServiceBrokerRepository -} - -type serviceBrokerRow struct { - name string - url string -} - -type serviceBrokerTable []serviceBrokerRow - -func NewListServiceBrokers(ui terminal.UI, config core_config.Reader, repo api.ServiceBrokerRepository) (cmd ListServiceBrokers) { - cmd.ui = ui - cmd.config = config - cmd.repo = repo - return -} - -func (cmd ListServiceBrokers) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "service-brokers", - Description: T("List service brokers"), - Usage: "CF_NAME service-brokers", - } -} - -func (cmd ListServiceBrokers) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - return -} - -func (cmd ListServiceBrokers) Run(c *cli.Context) { - sbTable := serviceBrokerTable{} - - cmd.ui.Say(T("Getting service brokers as {{.Username}}...\n", - map[string]interface{}{ - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - table := cmd.ui.Table([]string{T("name"), T("url")}) - foundBrokers := false - apiErr := cmd.repo.ListServiceBrokers(func(serviceBroker models.ServiceBroker) bool { - sbTable = append(sbTable, serviceBrokerRow{ - name: serviceBroker.Name, - url: serviceBroker.Url, - }) - foundBrokers = true - return true - }) - - sort.Sort(sbTable) - - for _, sb := range sbTable { - table.Add(sb.name, sb.url) - } - - table.Print() - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - if !foundBrokers { - cmd.ui.Say(T("No service brokers found")) - } -} - -func (a serviceBrokerTable) Len() int { return len(a) } -func (a serviceBrokerTable) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a serviceBrokerTable) Less(i, j int) bool { return a[i].name < a[j].name } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/service_brokers_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/service_brokers_test.go deleted file mode 100644 index ec1c2b5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/service_brokers_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package servicebroker_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/servicebroker" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "strings" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -func callListServiceBrokers(args []string, serviceBrokerRepo *testapi.FakeServiceBrokerRepo) (ui *testterm.FakeUI) { - ui = &testterm.FakeUI{} - config := testconfig.NewRepositoryWithDefaults() - cmd := NewListServiceBrokers(ui, config, serviceBrokerRepo) - testcmd.RunCommand(cmd, args, &testreq.FakeReqFactory{}) - - return -} - -var _ = Describe("service-brokers command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - cmd ListServiceBrokers - repo *testapi.FakeServiceBrokerRepo - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - repo = &testapi.FakeServiceBrokerRepo{} - cmd = NewListServiceBrokers(ui, config, repo) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - Describe("login requirements", func() { - It("fails if the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(testcmd.RunCommand(cmd, []string{}, requirementsFactory)).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(testcmd.RunCommand(cmd, []string{"blahblah"}, requirementsFactory)).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - It("lists service brokers", func() { - repo.ServiceBrokers = []models.ServiceBroker{models.ServiceBroker{ - Name: "service-broker-to-list-a", - Guid: "service-broker-to-list-guid-a", - Url: "http://service-a-url.com", - }, models.ServiceBroker{ - Name: "service-broker-to-list-b", - Guid: "service-broker-to-list-guid-b", - Url: "http://service-b-url.com", - }, models.ServiceBroker{ - Name: "service-broker-to-list-c", - Guid: "service-broker-to-list-guid-c", - Url: "http://service-c-url.com", - }} - - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service brokers as", "my-user"}, - []string{"name", "url"}, - []string{"service-broker-to-list-a", "http://service-a-url.com"}, - []string{"service-broker-to-list-b", "http://service-b-url.com"}, - []string{"service-broker-to-list-c", "http://service-c-url.com"}, - )) - }) - - It("lists service brokers by alphabetical order", func() { - repo.ServiceBrokers = []models.ServiceBroker{models.ServiceBroker{ - Name: "z-service-broker-to-list", - Guid: "z-service-broker-to-list-guid-a", - Url: "http://service-a-url.com", - }, models.ServiceBroker{ - Name: "a-service-broker-to-list", - Guid: "a-service-broker-to-list-guid-c", - Url: "http://service-c-url.com", - }, models.ServiceBroker{ - Name: "fun-service-broker-to-list", - Guid: "fun-service-broker-to-list-guid-b", - Url: "http://service-b-url.com", - }, models.ServiceBroker{ - Name: "123-service-broker-to-list", - Guid: "123-service-broker-to-list-guid-c", - Url: "http://service-d-url.com", - }} - - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(BeInDisplayOrder( - []string{"Getting service brokers as", "my-user"}, - []string{"name", "url"}, - []string{"123-service-broker-to-list", "http://service-d-url.com"}, - []string{"a-service-broker-to-list", "http://service-c-url.com"}, - []string{"fun-service-broker-to-list", "http://service-b-url.com"}, - []string{"z-service-broker-to-list", "http://service-a-url.com"}, - )) - }) - - It("says when no service brokers were found", func() { - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service brokers as", "my-user"}, - []string{"No service brokers found"}, - )) - }) - - It("reports errors when listing service brokers", func() { - repo.ListErr = true - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting service brokers as ", "my-user"}, - )) - Expect(strings.Join(ui.Outputs, "\n")).To(MatchRegexp(`FAILED\nError finding service brokers`)) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/servicebroker_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/servicebroker_suite_test.go deleted file mode 100644 index f5abe52..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/servicebroker_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package servicebroker_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestServicebroker(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Servicebroker Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/update_service_broker.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/update_service_broker.go deleted file mode 100644 index 98950be..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/update_service_broker.go +++ /dev/null @@ -1,68 +0,0 @@ -package servicebroker - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UpdateServiceBroker struct { - ui terminal.UI - config core_config.Reader - repo api.ServiceBrokerRepository -} - -func NewUpdateServiceBroker(ui terminal.UI, config core_config.Reader, repo api.ServiceBrokerRepository) (cmd UpdateServiceBroker) { - cmd.ui = ui - cmd.config = config - cmd.repo = repo - return -} - -func (cmd UpdateServiceBroker) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "update-service-broker", - Description: T("Update a service broker"), - Usage: T("CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL"), - } -} - -func (cmd UpdateServiceBroker) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 4 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - - return -} - -func (cmd UpdateServiceBroker) Run(c *cli.Context) { - serviceBroker, apiErr := cmd.repo.FindByName(c.Args()[0]) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Say(T("Updating service broker {{.Name}} as {{.Username}}...", - map[string]interface{}{ - "Name": terminal.EntityNameColor(serviceBroker.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - serviceBroker.Username = c.Args()[1] - serviceBroker.Password = c.Args()[2] - serviceBroker.Url = c.Args()[3] - - apiErr = cmd.repo.Update(serviceBroker) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/update_service_broker_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/update_service_broker_test.go deleted file mode 100644 index 28eec23..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicebroker/update_service_broker_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package servicebroker_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/servicebroker" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("update-service-broker command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.ReadWriter - serviceBrokerRepo *testapi.FakeServiceBrokerRepo - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - serviceBrokerRepo = &testapi.FakeServiceBrokerRepo{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewUpdateServiceBroker(ui, configRepo, serviceBrokerRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when invoked without exactly four args", func() { - requirementsFactory.LoginSuccess = true - - runCommand("arg1", "arg2", "arg3") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when not logged in", func() { - Expect(runCommand("heeeeeeey", "yooouuuuuuu", "guuuuuuuuys", "ヾ(@*ー⌒ー*@)ノ")).To(BeFalse()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - broker := models.ServiceBroker{} - broker.Name = "my-found-broker" - broker.Guid = "my-found-broker-guid" - serviceBrokerRepo.FindByNameServiceBroker = broker - }) - - It("updates the service broker with the provided properties", func() { - runCommand("my-broker", "new-username", "new-password", "new-url") - - Expect(serviceBrokerRepo.FindByNameName).To(Equal("my-broker")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating service broker", "my-found-broker", "my-user"}, - []string{"OK"}, - )) - - expectedServiceBroker := models.ServiceBroker{} - expectedServiceBroker.Name = "my-found-broker" - expectedServiceBroker.Username = "new-username" - expectedServiceBroker.Password = "new-password" - expectedServiceBroker.Url = "new-url" - expectedServiceBroker.Guid = "my-found-broker-guid" - - Expect(serviceBrokerRepo.UpdatedServiceBroker).To(Equal(expectedServiceBroker)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/create_service_key.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/create_service_key.go deleted file mode 100644 index d8f28c4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/create_service_key.go +++ /dev/null @@ -1,103 +0,0 @@ -package servicekey - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/json" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type CreateServiceKey struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceKeyRepo api.ServiceKeyRepository - serviceInstanceGuid string -} - -func NewCreateServiceKey(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository, serviceKeyRepo api.ServiceKeyRepository) (cmd *CreateServiceKey) { - return &CreateServiceKey{ - ui: ui, - config: config, - serviceRepo: serviceRepo, - serviceKeyRepo: serviceKeyRepo, - } -} - -func (cmd *CreateServiceKey) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-service-key", - ShortName: "csk", - Description: T("Create key for a service instance"), - Usage: T(`CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON] - - Optionally provide service-specific configuration parameters in a valid JSON object in-line. - CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{"name":"value","name":"value"}' - - Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file. - CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE - - Example of valid JSON object: - { - "permissions": "read-only" - } - -EXAMPLE: - CF_NAME create-service-key mydb mykey -c '{"permissions":"read-only"}' - CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json`), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("c", T("Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.")), - }, - } -} - -func (cmd *CreateServiceKey) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - loginRequirement := requirementsFactory.NewLoginRequirement() - serviceInstanceRequirement := requirementsFactory.NewServiceInstanceRequirement(c.Args()[0]) - cmd.serviceInstanceGuid = serviceInstanceRequirement.GetServiceInstance().Guid - targetSpaceRequirement := requirementsFactory.NewTargetedSpaceRequirement() - - reqs = []requirements.Requirement{loginRequirement, serviceInstanceRequirement, targetSpaceRequirement} - - return reqs, nil -} - -func (cmd *CreateServiceKey) Run(c *cli.Context) { - serviceInstanceName := c.Args()[0] - serviceKeyName := c.Args()[1] - params := c.String("c") - - paramsMap, err := json.ParseJsonFromFileOrString(params) - if err != nil { - cmd.ui.Failed(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) - } - - cmd.ui.Say(T("Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName), - "ServiceKeyName": terminal.EntityNameColor(serviceKeyName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - err = cmd.serviceKeyRepo.CreateServiceKey(cmd.serviceInstanceGuid, serviceKeyName, paramsMap) - switch err.(type) { - case nil: - cmd.ui.Ok() - case *errors.ModelAlreadyExistsError: - cmd.ui.Ok() - cmd.ui.Warn(err.Error()) - default: - cmd.ui.Failed(err.Error()) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/create_service_key_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/create_service_key_test.go deleted file mode 100644 index 2517c2c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/create_service_key_test.go +++ /dev/null @@ -1,185 +0,0 @@ -package servicekey_test - -import ( - "io/ioutil" - "os" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/servicekey" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-service-key command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - cmd *CreateServiceKey - requirementsFactory *testreq.FakeReqFactory - serviceRepo *testapi.FakeServiceRepo - serviceKeyRepo *testapi.FakeServiceKeyRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - serviceRepo = &testapi.FakeServiceRepo{} - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "fake-instance-guid" - serviceRepo.FindInstanceByNameMap = generic.NewMap() - serviceRepo.FindInstanceByNameMap.Set("fake-service-instance", serviceInstance) - serviceKeyRepo = testapi.NewFakeServiceKeyRepo() - cmd = NewCreateServiceKey(ui, config, serviceRepo, serviceKeyRepo) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true, ServiceInstanceNotFound: false} - requirementsFactory.ServiceInstance = serviceInstance - }) - - var callCreateService = func(args []string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - Expect(callCreateService([]string{"fake-service-instance", "fake-service-key"})).To(BeFalse()) - }) - - It("requires two arguments to run", func() { - Expect(callCreateService([]string{})).To(BeFalse()) - Expect(callCreateService([]string{"fake-arg-one"})).To(BeFalse()) - Expect(callCreateService([]string{"fake-arg-one", "fake-arg-two", "fake-arg-three"})).To(BeFalse()) - }) - - It("fails when service instance is not found", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: true} - Expect(callCreateService([]string{"non-exist-service-instance", "fake-service-key"})).To(BeFalse()) - }) - - It("fails when space is not targetted", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: false} - Expect(callCreateService([]string{"non-exist-service-instance", "fake-service-key"})).To(BeFalse()) - }) - }) - - Describe("requiremnts are satisfied", func() { - It("create service key successfully", func() { - callCreateService([]string{"fake-service-instance", "fake-service-key"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"OK"}, - )) - Expect(serviceKeyRepo.CreateServiceKeyMethod.InstanceGuid).To(Equal("fake-instance-guid")) - Expect(serviceKeyRepo.CreateServiceKeyMethod.KeyName).To(Equal("fake-service-key")) - }) - - It("create service key failed when the service key already exists", func() { - serviceKeyRepo.CreateServiceKeyMethod.Error = errors.NewModelAlreadyExistsError("Service key", "exist-service-key") - - callCreateService([]string{"fake-service-instance", "exist-service-key"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service key", "exist-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"OK"}, - []string{"Service key exist-service-key already exists"})) - }) - - It("create service key failed when the service is unbindable", func() { - serviceKeyRepo.CreateServiceKeyMethod.Error = errors.NewUnbindableServiceError() - callCreateService([]string{"fake-service-instance", "exist-service-key"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service key", "exist-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"FAILED"}, - []string{"This service doesn't support creation of keys."})) - }) - }) - - Context("when passing arbitrary params", func() { - Context("as a json string", func() { - It("successfully creates a service key and passes the params as a json string", func() { - callCreateService([]string{"fake-service-instance", "fake-service-key", "-c", `{"foo": "bar"}`}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"OK"}, - )) - Expect(serviceKeyRepo.CreateServiceKeyMethod.InstanceGuid).To(Equal("fake-instance-guid")) - Expect(serviceKeyRepo.CreateServiceKeyMethod.KeyName).To(Equal("fake-service-key")) - Expect(serviceKeyRepo.CreateServiceKeyMethod.Params).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - }) - - Context("that are not valid json", func() { - It("returns an error to the UI", func() { - callCreateService([]string{"fake-service-instance", "fake-service-key", "-c", `bad-json`}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - Context("as a file that contains json", func() { - var jsonFile *os.File - var params string - - BeforeEach(func() { - params = "{\"foo\": \"bar\"}" - }) - - AfterEach(func() { - if jsonFile != nil { - jsonFile.Close() - os.Remove(jsonFile.Name()) - } - }) - - JustBeforeEach(func() { - var err error - jsonFile, err = ioutil.TempFile("", "") - Expect(err).ToNot(HaveOccurred()) - - err = ioutil.WriteFile(jsonFile.Name(), []byte(params), os.ModePerm) - Expect(err).NotTo(HaveOccurred()) - }) - - It("successfully creates a service key and passes the params as a json", func() { - callCreateService([]string{"fake-service-instance", "fake-service-key", "-c", jsonFile.Name()}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating service key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"OK"}, - )) - Expect(serviceKeyRepo.CreateServiceKeyMethod.Params).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("that are not valid json", func() { - BeforeEach(func() { - params = "bad-json" - }) - - It("returns an error to the UI", func() { - callCreateService([]string{"fake-service-instance", "fake-service-key", "-c", jsonFile.Name()}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object."}, - )) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/delete_service_key.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/delete_service_key.go deleted file mode 100644 index 56f09d2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/delete_service_key.go +++ /dev/null @@ -1,108 +0,0 @@ -package servicekey - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type DeleteServiceKey struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceKeyRepo api.ServiceKeyRepository -} - -func NewDeleteServiceKey(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository, serviceKeyRepo api.ServiceKeyRepository) (cmd DeleteServiceKey) { - return DeleteServiceKey{ - ui: ui, - config: config, - serviceRepo: serviceRepo, - serviceKeyRepo: serviceKeyRepo, - } -} - -func (cmd DeleteServiceKey) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-service-key", - ShortName: "dsk", - Description: T("Delete a service key"), - Usage: T(`CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f] - -EXAMPLE: - CF_NAME delete-service-key mydb mykey`), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd DeleteServiceKey) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - loginRequirement := requirementsFactory.NewLoginRequirement() - serviceInstanceRequirement := requirementsFactory.NewServiceInstanceRequirement(c.Args()[0]) - targetSpaceRequirement := requirementsFactory.NewTargetedSpaceRequirement() - - reqs = []requirements.Requirement{loginRequirement, serviceInstanceRequirement, targetSpaceRequirement} - - return reqs, nil -} - -func (cmd DeleteServiceKey) Run(c *cli.Context) { - serviceInstanceName := c.Args()[0] - serviceKeyName := c.Args()[1] - - if !c.Bool("f") { - if !cmd.ui.ConfirmDelete(T("service key"), serviceKeyName) { - return - } - } - - cmd.ui.Say(T("Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceKeyName": terminal.EntityNameColor(serviceKeyName), - "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - serviceInstance, err := cmd.serviceRepo.FindInstanceByName(serviceInstanceName) - if err != nil { - cmd.ui.Ok() - - cmd.ui.Warn(T("Service instance {{.ServiceInstanceName}} does not exist.", - map[string]interface{}{ - "ServiceInstanceName": serviceInstanceName, - })) - - return - } - - serviceKey, err := cmd.serviceKeyRepo.GetServiceKey(serviceInstance.Guid, serviceKeyName) - if err != nil || serviceKey.Fields.Guid == "" { - cmd.ui.Ok() - - cmd.ui.Warn(T("Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - map[string]interface{}{ - "ServiceKeyName": serviceKeyName, - "ServiceInstanceName": serviceInstanceName, - })) - - return - } - - err = cmd.serviceKeyRepo.DeleteServiceKey(serviceKey.Fields.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/delete_service_key_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/delete_service_key_test.go deleted file mode 100644 index 450b644..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/delete_service_key_test.go +++ /dev/null @@ -1,160 +0,0 @@ -package servicekey_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/servicekey" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-service-key command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - cmd DeleteServiceKey - requirementsFactory *testreq.FakeReqFactory - serviceRepo *testapi.FakeServiceRepo - serviceKeyRepo *testapi.FakeServiceKeyRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - serviceRepo = &testapi.FakeServiceRepo{} - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "fake-service-instance-guid" - serviceRepo.FindInstanceByNameMap = generic.NewMap() - serviceRepo.FindInstanceByNameMap.Set("fake-service-instance", serviceInstance) - serviceKeyRepo = testapi.NewFakeServiceKeyRepo() - cmd = NewDeleteServiceKey(ui, config, serviceRepo, serviceKeyRepo) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true, ServiceInstanceNotFound: false} - }) - - var callDeleteServiceKey = func(args []string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements are not satisfied", func() { - It("fails when not logged in", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - Expect(callDeleteServiceKey([]string{"fake-service-key-name"})).To(BeFalse()) - }) - - It("requires two arguments and one option to run", func() { - Expect(callDeleteServiceKey([]string{})).To(BeFalse()) - Expect(callDeleteServiceKey([]string{"fake-arg-one"})).To(BeFalse()) - Expect(callDeleteServiceKey([]string{"fake-arg-one", "fake-arg-two", "fake-arg-three"})).To(BeFalse()) - }) - - It("fails when service instance is not found", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: true} - Expect(callDeleteServiceKey([]string{"non-exist-service-instance"})).To(BeFalse()) - }) - - It("fails when space is not targetted", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: false} - Expect(callDeleteServiceKey([]string{"fake-service-instance", "fake-service-key"})).To(BeFalse()) - }) - }) - - Describe("requirements are satisfied", func() { - Context("deletes service key successfully", func() { - BeforeEach(func() { - serviceKeyRepo.GetServiceKeyMethod.ServiceKey = models.ServiceKey{ - Fields: models.ServiceKeyFields{ - Name: "fake-service-key", - Guid: "fake-service-key-guid", - Url: "fake-service-key-url", - ServiceInstanceGuid: "fake-service-instance-guid", - ServiceInstanceUrl: "fake-service-instance-url", - }, - Credentials: map[string]interface{}{ - "username": "fake-username", - "password": "fake-password", - "host": "fake-host", - "port": "3306", - "database": "fake-db-name", - "uri": "mysql://fake-user:fake-password@fake-host:3306/fake-db-name", - }, - } - }) - - It("deletes service key successfully when '-f' option is provided", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: false, TargetedSpaceSuccess: true} - - Expect(callDeleteServiceKey([]string{"fake-service-instance", "fake-service-key", "-f"})).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"OK"})) - }) - - It("deletes service key successfully when '-f' option is not provided and confirmed 'yes'", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: false, TargetedSpaceSuccess: true} - ui.Inputs = append(ui.Inputs, "yes") - - Expect(callDeleteServiceKey([]string{"fake-service-instance", "fake-service-key"})).To(BeTrue()) - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the service key", "fake-service-key"})) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"OK"})) - }) - - It("skips to delete service key when '-f' option is not provided and confirmed 'no'", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: false, TargetedSpaceSuccess: true} - ui.Inputs = append(ui.Inputs, "no") - - Expect(callDeleteServiceKey([]string{"fake-service-instance", "fake-service-key"})).To(BeTrue()) - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the service key", "fake-service-key"})) - Expect(ui.Outputs).To(BeEmpty()) - }) - - }) - - Context("deletes service key unsuccessful", func() { - It("fails to delete service key when service instance does not exist", func() { - serviceRepo.FindInstanceByNameNotFound = true - callDeleteServiceKey([]string{"non-exist-service-instance", "fake-service-key", "-f"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting key", "fake-service-key", "for service instance", "non-exist-service-instance", "as", "my-user..."}, - []string{"OK"}, - []string{"Service instance", "non-exist-service-instance", "does not exist."}, - )) - }) - - It("fails to delete service key when the service key repository returns an error", func() { - serviceKeyRepo.GetServiceKeyMethod.Error = errors.New("") - callDeleteServiceKey([]string{"fake-service-instance", "non-exist-service-key", "-f"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting key", "non-exist-service-key", "for service instance", "fake-service-instance", "as", "my-user..."}, - []string{"OK"}, - []string{"Service key", "non-exist-service-key", "does not exist for service instance", "fake-service-instance"}, - )) - }) - - It("fails to delete service key when service key does not exist", func() { - serviceKeyRepo.GetServiceKeyMethod.ServiceKey = models.ServiceKey{} - callDeleteServiceKey([]string{"fake-service-instance", "non-exist-service-key", "-f"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting key", "non-exist-service-key", "for service instance", "fake-service-instance", "as", "my-user..."}, - []string{"OK"}, - []string{"Service key", "non-exist-service-key", "does not exist for service instance", "fake-service-instance"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_key.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_key.go deleted file mode 100644 index 9556598..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_key.go +++ /dev/null @@ -1,99 +0,0 @@ -package servicekey - -import ( - "encoding/json" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type ServiceKey struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceKeyRepo api.ServiceKeyRepository - serviceInstanceGuid string -} - -func NewGetServiceKey(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository, serviceKeyRepo api.ServiceKeyRepository) (cmd *ServiceKey) { - return &ServiceKey{ - ui: ui, - config: config, - serviceRepo: serviceRepo, - serviceKeyRepo: serviceKeyRepo, - } -} - -func (cmd *ServiceKey) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "service-key", - Description: T("Show service key info"), - Usage: T(`CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY - -EXAMPLE: - CF_NAME service-key mydb mykey`), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given service-key's guid. All other output for the service is suppressed.")}, - }, - } -} - -func (cmd *ServiceKey) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - loginRequirement := requirementsFactory.NewLoginRequirement() - serviceInstanceRequirement := requirementsFactory.NewServiceInstanceRequirement(c.Args()[0]) - cmd.serviceInstanceGuid = serviceInstanceRequirement.GetServiceInstance().Guid - targetSpaceRequirement := requirementsFactory.NewTargetedSpaceRequirement() - - reqs = []requirements.Requirement{loginRequirement, serviceInstanceRequirement, targetSpaceRequirement} - - return reqs, nil -} - -func (cmd *ServiceKey) Run(c *cli.Context) { - serviceInstanceName := c.Args()[0] - serviceKeyName := c.Args()[1] - - serviceKey, err := cmd.serviceKeyRepo.GetServiceKey(cmd.serviceInstanceGuid, serviceKeyName) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - if c.Bool("guid") { - cmd.ui.Say(serviceKey.Fields.Guid) - } else { - cmd.ui.Say(T("Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceKeyName": terminal.EntityNameColor(serviceKeyName), - "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - if serviceKey.Fields.Name == "" { - cmd.ui.Say(T("No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - map[string]interface{}{ - "ServiceKeyName": terminal.EntityNameColor(serviceKeyName), - "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName)})) - return - } - - jsonBytes, err := json.MarshalIndent(serviceKey.Credentials, "", " ") - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Say("") - cmd.ui.Say(string(jsonBytes)) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_key_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_key_test.go deleted file mode 100644 index 4722889..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_key_test.go +++ /dev/null @@ -1,137 +0,0 @@ -package servicekey_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/servicekey" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("service-key command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - cmd *ServiceKey - requirementsFactory *testreq.FakeReqFactory - serviceRepo *testapi.FakeServiceRepo - serviceKeyRepo *testapi.FakeServiceKeyRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - serviceRepo = &testapi.FakeServiceRepo{} - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "fake-service-instance-guid" - serviceRepo.FindInstanceByNameMap = generic.NewMap() - serviceRepo.FindInstanceByNameMap.Set("fake-service-instance", serviceInstance) - serviceKeyRepo = testapi.NewFakeServiceKeyRepo() - cmd = NewGetServiceKey(ui, config, serviceRepo, serviceKeyRepo) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true, ServiceInstanceNotFound: false} - requirementsFactory.ServiceInstance = serviceInstance - }) - - var callGetServiceKey = func(args []string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - Expect(callGetServiceKey([]string{"fake-service-key-name"})).To(BeFalse()) - }) - - It("requires two arguments to run", func() { - Expect(callGetServiceKey([]string{})).To(BeFalse()) - Expect(callGetServiceKey([]string{"fake-arg-one"})).To(BeFalse()) - Expect(callGetServiceKey([]string{"fake-arg-one", "fake-arg-two"})).To(BeTrue()) - Expect(callGetServiceKey([]string{"fake-arg-one", "fake-arg-two", "fake-arg-three"})).To(BeFalse()) - }) - - It("fails when service instance is not found", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: true} - Expect(callGetServiceKey([]string{"non-exist-service-instance"})).To(BeFalse()) - }) - - It("fails when space is not targetted", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: false} - Expect(callGetServiceKey([]string{"fake-service-instance", "fake-service-key-name"})).To(BeFalse()) - }) - }) - - Describe("requirements are satisfied", func() { - Context("gets service key successfully", func() { - BeforeEach(func() { - serviceKeyRepo.GetServiceKeyMethod.ServiceKey = models.ServiceKey{ - Fields: models.ServiceKeyFields{ - Name: "fake-service-key", - Guid: "fake-service-key-guid", - Url: "fake-service-key-url", - ServiceInstanceGuid: "fake-service-instance-guid", - ServiceInstanceUrl: "fake-service-instance-url", - }, - Credentials: map[string]interface{}{ - "username": "fake-username", - "password": "fake-password", - "host": "fake-host", - "port": "3306", - "database": "fake-db-name", - "uri": "mysql://fake-user:fake-password@fake-host:3306/fake-db-name", - }, - } - }) - - It("gets service credential", func() { - callGetServiceKey([]string{"fake-service-instance", "fake-service-key"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"username", "fake-username"}, - []string{"password", "fake-password"}, - []string{"host", "fake-host"}, - []string{"port", "3306"}, - []string{"database", "fake-db-name"}, - []string{"uri", "mysql://fake-user:fake-password@fake-host:3306/fake-db-name"}, - )) - Expect(ui.Outputs[1]).To(BeEmpty()) - Expect(serviceKeyRepo.GetServiceKeyMethod.InstanceGuid).To(Equal("fake-service-instance-guid")) - }) - - It("gets service guid when '--guid' flag is provided", func() { - callGetServiceKey([]string{"--guid", "fake-service-instance", "fake-service-key"}) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"fake-service-key-guid"})) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Getting key", "fake-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - )) - }) - }) - - Context("when service key does not exist", func() { - It("shows no service key is found", func() { - callGetServiceKey([]string{"fake-service-instance", "non-exist-service-key"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting key", "non-exist-service-key", "for service instance", "fake-service-instance", "as", "my-user"}, - []string{"No service key", "non-exist-service-key", "found for service instance", "fake-service-instance"}, - )) - }) - - It("returns the empty string as guid when '--guid' flag is provided", func() { - callGetServiceKey([]string{"--guid", "fake-service-instance", "non-exist-service-key"}) - - Expect(len(ui.Outputs)).To(Equal(1)) - Expect(ui.Outputs[0]).To(BeEmpty()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_keys.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_keys.go deleted file mode 100644 index 4742f57..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_keys.go +++ /dev/null @@ -1,87 +0,0 @@ -package servicekey - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type ServiceKeys struct { - ui terminal.UI - config core_config.Reader - serviceRepo api.ServiceRepository - serviceKeyRepo api.ServiceKeyRepository - serviceInstanceGuid string -} - -func NewListServiceKeys(ui terminal.UI, config core_config.Reader, serviceRepo api.ServiceRepository, serviceKeyRepo api.ServiceKeyRepository) (cmd *ServiceKeys) { - return &ServiceKeys{ - ui: ui, - config: config, - serviceRepo: serviceRepo, - serviceKeyRepo: serviceKeyRepo, - } -} - -func (cmd *ServiceKeys) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "service-keys", - ShortName: "sk", - Description: T("List keys for a service instance"), - Usage: T(`CF_NAME service-keys SERVICE_INSTANCE - -EXAMPLE: - CF_NAME service-keys mydb`), - } -} - -func (cmd *ServiceKeys) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - loginRequirement := requirementsFactory.NewLoginRequirement() - serviceInstanceRequirement := requirementsFactory.NewServiceInstanceRequirement(c.Args()[0]) - cmd.serviceInstanceGuid = serviceInstanceRequirement.GetServiceInstance().Guid - targetSpaceRequirement := requirementsFactory.NewTargetedSpaceRequirement() - - reqs = []requirements.Requirement{loginRequirement, serviceInstanceRequirement, targetSpaceRequirement} - - return reqs, nil -} - -func (cmd *ServiceKeys) Run(c *cli.Context) { - serviceInstanceName := c.Args()[0] - - cmd.ui.Say(T("Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - serviceKeys, err := cmd.serviceKeyRepo.ListServiceKeys(cmd.serviceInstanceGuid) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - table := cmd.ui.Table([]string{T("name")}) - - for _, serviceKey := range serviceKeys { - table.Add(serviceKey.Fields.Name) - } - - if len(serviceKeys) == 0 { - cmd.ui.Say(T("No service key for service instance {{.ServiceInstanceName}}", - map[string]interface{}{"ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName)})) - return - } else { - cmd.ui.Say("") - table.Print() - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_keys_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_keys_test.go deleted file mode 100644 index 45be470..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/service_keys_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package servicekey_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/servicekey" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("service-keys command", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - cmd *ServiceKeys - requirementsFactory *testreq.FakeReqFactory - serviceRepo *testapi.FakeServiceRepo - serviceKeyRepo *testapi.FakeServiceKeyRepo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config = testconfig.NewRepositoryWithDefaults() - serviceRepo = &testapi.FakeServiceRepo{} - serviceInstance := models.ServiceInstance{} - serviceInstance.Guid = "fake-instance-guid" - serviceRepo.FindInstanceByNameMap = generic.NewMap() - serviceRepo.FindInstanceByNameMap.Set("fake-service-instance", serviceInstance) - serviceKeyRepo = testapi.NewFakeServiceKeyRepo() - cmd = NewListServiceKeys(ui, config, serviceRepo, serviceKeyRepo) - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true, ServiceInstanceNotFound: false} - requirementsFactory.ServiceInstance = serviceInstance - }) - - var callListServiceKeys = func(args []string) bool { - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} - Expect(callListServiceKeys([]string{"fake-service-instance", "fake-service-key"})).To(BeFalse()) - }) - - It("requires one argument to run", func() { - Expect(callListServiceKeys([]string{})).To(BeFalse()) - Expect(callListServiceKeys([]string{"fake-arg-one"})).To(BeTrue()) - Expect(callListServiceKeys([]string{"fake-arg-one", "fake-arg-two"})).To(BeFalse()) - }) - - It("fails when service instance is not found", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, ServiceInstanceNotFound: true} - Expect(callListServiceKeys([]string{"non-exist-service-instance"})).To(BeFalse()) - }) - - It("fails when space is not targetted", func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: false} - Expect(callListServiceKeys([]string{"non-exist-service-instance"})).To(BeFalse()) - }) - }) - - Describe("requirements are satisfied", func() { - It("list service keys successfully", func() { - serviceKeyRepo.ListServiceKeysMethod.ServiceKeys = []models.ServiceKey{ - models.ServiceKey{ - Fields: models.ServiceKeyFields{ - Name: "fake-service-key-1", - }, - }, - models.ServiceKey{ - Fields: models.ServiceKeyFields{ - Name: "fake-service-key-2", - }, - }, - } - callListServiceKeys([]string{"fake-service-instance"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting keys for service instance", "fake-service-instance", "as", "my-user"}, - []string{"name"}, - []string{"fake-service-key-1"}, - []string{"fake-service-key-2"}, - )) - Expect(ui.Outputs[1]).To(BeEmpty()) - Expect(serviceKeyRepo.ListServiceKeysMethod.InstanceGuid).To(Equal("fake-instance-guid")) - }) - - It("does not list service keys when none are returned", func() { - callListServiceKeys([]string{"fake-service-instance"}) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting keys for service instance", "fake-service-instance", "as", "my-user"}, - []string{"No service key for service instance", "fake-service-instance"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/servicekey_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/servicekey_suite_test.go deleted file mode 100644 index bdaab4d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/servicekey/servicekey_suite_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package servicekey_test - -import ( - "testing" - - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func TestServicekey(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Servicekey Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/create_space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/create_space.go deleted file mode 100644 index d7ad91f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/create_space.go +++ /dev/null @@ -1,140 +0,0 @@ -package space - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateSpace struct { - ui terminal.UI - config core_config.Reader - spaceRepo spaces.SpaceRepository - orgRepo organizations.OrganizationRepository - userRepo api.UserRepository - spaceRoleSetter user.SpaceRoleSetter - spaceQuotaRepo space_quotas.SpaceQuotaRepository -} - -func NewCreateSpace(ui terminal.UI, config core_config.Reader, spaceRoleSetter user.SpaceRoleSetter, spaceRepo spaces.SpaceRepository, orgRepo organizations.OrganizationRepository, userRepo api.UserRepository, spaceQuotaRepo space_quotas.SpaceQuotaRepository) (cmd CreateSpace) { - cmd.ui = ui - cmd.config = config - cmd.spaceRoleSetter = spaceRoleSetter - cmd.spaceRepo = spaceRepo - cmd.orgRepo = orgRepo - cmd.userRepo = userRepo - cmd.spaceQuotaRepo = spaceQuotaRepo - return -} - -func (cmd CreateSpace) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-space", - Description: T("Create a space"), - Usage: T("CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("o", T("Organization")), - flag_helpers.NewStringFlag("q", T("Quota to assign to the newly created space (excluding this option results in assignment of default quota)")), - }, - } -} - -func (cmd CreateSpace) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} - if c.String("o") == "" { - reqs = append(reqs, requirementsFactory.NewTargetedOrgRequirement()) - } - - return -} - -func (cmd CreateSpace) Run(c *cli.Context) { - spaceName := c.Args()[0] - orgName := c.String("o") - spaceQuotaName := c.String("q") - orgGuid := "" - if orgName == "" { - orgName = cmd.config.OrganizationFields().Name - orgGuid = cmd.config.OrganizationFields().Guid - } - - cmd.ui.Say(T("Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "SpaceName": terminal.EntityNameColor(spaceName), - "OrgName": terminal.EntityNameColor(orgName), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - var spaceQuotaGuid string - if spaceQuotaName != "" { - spaceQuota, err := cmd.spaceQuotaRepo.FindByName(spaceQuotaName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - spaceQuotaGuid = spaceQuota.Guid - } - - if orgGuid == "" { - org, apiErr := cmd.orgRepo.FindByName(orgName) - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Failed(T("Org {{.OrgName}} does not exist or is not accessible", map[string]interface{}{"OrgName": orgName})) - return - default: - cmd.ui.Failed(T("Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - map[string]interface{}{ - "OrgName": orgName, - "ErrorDescription": apiErr.Error(), - })) - return - } - - orgGuid = org.Guid - } - - space, err := cmd.spaceRepo.Create(spaceName, orgGuid, spaceQuotaGuid) - if err != nil { - if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.SPACE_EXISTS { - cmd.ui.Ok() - cmd.ui.Warn(T("Space {{.SpaceName}} already exists", map[string]interface{}{"SpaceName": spaceName})) - return - } - cmd.ui.Failed(err.Error()) - return - } - cmd.ui.Ok() - - err = cmd.spaceRoleSetter.SetSpaceRole(space, models.SPACE_MANAGER, cmd.config.UserGuid(), cmd.config.Username()) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - err = cmd.spaceRoleSetter.SetSpaceRole(space, models.SPACE_DEVELOPER, cmd.config.UserGuid(), cmd.config.Username()) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } - - cmd.ui.Say(T("\nTIP: Use '{{.CFTargetCommand}}' to target new space", - map[string]interface{}{ - "CFTargetCommand": terminal.CommandColor(cf.Name() + " target -o " + orgName + " -s " + space.Name), - })) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/create_space_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/create_space_test.go deleted file mode 100644 index 7a2161d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/create_space_test.go +++ /dev/null @@ -1,209 +0,0 @@ -package space_test - -import ( - "errors" - - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - fake_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/space" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("create-space command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configSpace models.SpaceFields - configOrg models.OrganizationFields - configRepo core_config.ReadWriter - spaceRepo *testapi.FakeSpaceRepository - orgRepo *fake_org.FakeOrganizationRepository - userRepo *testapi.FakeUserRepository - spaceRoleSetter user.SpaceRoleSetter - spaceQuotaRepo *fakes.FakeSpaceQuotaRepository - ) - - runCommand := func(args ...string) bool { - cmd := NewCreateSpace(ui, configRepo, spaceRoleSetter, spaceRepo, orgRepo, userRepo, spaceQuotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - configRepo = testconfig.NewRepositoryWithDefaults() - - orgRepo = &fake_org.FakeOrganizationRepository{} - userRepo = &testapi.FakeUserRepository{} - spaceRoleSetter = user.NewSetSpaceRole(ui, configRepo, spaceRepo, userRepo) - spaceQuotaRepo = &fakes.FakeSpaceQuotaRepository{} - - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedOrgSuccess: true} - configOrg = models.OrganizationFields{ - Name: "my-org", - Guid: "my-org-guid", - } - - configSpace = models.SpaceFields{ - Name: "config-space", - Guid: "config-space-guid", - } - - spaceRepo = &testapi.FakeSpaceRepository{ - CreateSpaceSpace: maker.NewSpace(maker.Overrides{"name": "my-space", "guid": "my-space-guid", "organization": configOrg}), - } - Expect(spaceRepo.CreateSpaceSpace.Name).To(Equal("my-space")) - }) - - Describe("Requirements", func() { - It("fails with usage when not provided exactly one argument", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Context("when not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand("some-space")).To(BeFalse()) - }) - }) - - Context("when a org is not targeted", func() { - BeforeEach(func() { - requirementsFactory.TargetedOrgSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand("what-is-space?")).To(BeFalse()) - }) - }) - }) - - It("creates a space", func() { - runCommand("my-space") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating space", "my-space", "my-org", "my-user"}, - []string{"OK"}, - []string{"Assigning", models.SpaceRoleToUserInput[models.SPACE_MANAGER], "my-user", "my-space"}, - []string{"Assigning", models.SpaceRoleToUserInput[models.SPACE_DEVELOPER], "my-user", "my-space"}, - []string{"TIP"}, - )) - - Expect(spaceRepo.CreateSpaceName).To(Equal("my-space")) - Expect(spaceRepo.CreateSpaceOrgGuid).To(Equal("my-org-guid")) - Expect(userRepo.SetSpaceRoleUserGuid).To(Equal("my-user-guid")) - Expect(userRepo.SetSpaceRoleSpaceGuid).To(Equal("my-space-guid")) - Expect(userRepo.SetSpaceRoleRole).To(Equal(models.SPACE_DEVELOPER)) - }) - - It("warns the user when a space with that name already exists", func() { - spaceRepo.CreateSpaceExists = true - runCommand("my-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating space", "my-space"}, - []string{"OK"}, - )) - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"my-space", "already exists"})) - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Assigning", "my-user", "my-space", models.SpaceRoleToUserInput[models.SPACE_MANAGER]}, - )) - - Expect(spaceRepo.CreateSpaceName).To(Equal("")) - Expect(spaceRepo.CreateSpaceOrgGuid).To(Equal("")) - Expect(userRepo.SetSpaceRoleUserGuid).To(Equal("")) - Expect(userRepo.SetSpaceRoleSpaceGuid).To(Equal("")) - }) - - Context("when the -o flag is provided", func() { - It("creates a space within that org", func() { - org := models.Organization{ - OrganizationFields: models.OrganizationFields{ - Name: "other-org", - Guid: "org-guid-1", - }} - orgRepo.FindByNameReturns(org, nil) - - runCommand("-o", "other-org", "my-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating space", "my-space", "other-org", "my-user"}, - []string{"OK"}, - []string{"Assigning", "my-user", "my-space", models.SpaceRoleToUserInput[models.SPACE_MANAGER]}, - []string{"Assigning", "my-user", "my-space", models.SpaceRoleToUserInput[models.SPACE_DEVELOPER]}, - []string{"TIP"}, - )) - - Expect(spaceRepo.CreateSpaceName).To(Equal("my-space")) - Expect(spaceRepo.CreateSpaceOrgGuid).To(Equal(org.Guid)) - Expect(userRepo.SetSpaceRoleUserGuid).To(Equal("my-user-guid")) - Expect(userRepo.SetSpaceRoleSpaceGuid).To(Equal("my-space-guid")) - Expect(userRepo.SetSpaceRoleRole).To(Equal(models.SPACE_DEVELOPER)) - }) - - It("fails when the org provided does not exist", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.New("cool-organization does not exist")) - runCommand("-o", "cool-organization", "my-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"cool-organization", "does not exist"}, - )) - - Expect(spaceRepo.CreateSpaceName).To(Equal("")) - }) - - It("fails when finding the org returns an error", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.New("cool-organization does not exist")) - runCommand("-o", "cool-organization", "my-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Error"}, - )) - - Expect(spaceRepo.CreateSpaceName).To(Equal("")) - }) - }) - - Context("when the -q flag is provided", func() { - It("assigns the space-quota specified to the space", func() { - spaceQuota := models.SpaceQuota{ - Name: "my-space-quota", - Guid: "my-space-quota-guid", - } - spaceQuotaRepo.FindByNameReturns(spaceQuota, nil) - runCommand("-q", "my-space-quota", "my-space") - - Expect(spaceQuotaRepo.FindByNameArgsForCall(0)).To(Equal(spaceQuota.Name)) - Expect(spaceRepo.CreateSpaceSpaceQuotaGuid).To(Equal(spaceQuota.Guid)) - - }) - - Context("when the space-quota provided does not exist", func() { - It("fails", func() { - spaceQuotaRepo.FindByNameReturns(models.SpaceQuota{}, errors.New("Error")) - runCommand("-q", "my-space-quota", "my-space") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Error"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/delete_space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/delete_space.go deleted file mode 100644 index 84fa573..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/delete_space.go +++ /dev/null @@ -1,92 +0,0 @@ -package space - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteSpace struct { - ui terminal.UI - config core_config.ReadWriter - spaceRepo spaces.SpaceRepository - spaceReq requirements.SpaceRequirement -} - -func NewDeleteSpace(ui terminal.UI, config core_config.ReadWriter, spaceRepo spaces.SpaceRepository) (cmd *DeleteSpace) { - cmd = new(DeleteSpace) - cmd.ui = ui - cmd.config = config - cmd.spaceRepo = spaceRepo - return -} - -func (cmd *DeleteSpace) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-space", - Description: T("Delete a space"), - Usage: T("CF_NAME delete-space SPACE [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd *DeleteSpace) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - if cmd.spaceReq == nil { - cmd.spaceReq = requirementsFactory.NewSpaceRequirement(c.Args()[0]) - } else { - cmd.spaceReq.SetSpaceName(c.Args()[0]) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - cmd.spaceReq, - } - return -} - -func (cmd *DeleteSpace) Run(c *cli.Context) { - spaceName := c.Args()[0] - - if !c.Bool("f") { - if !cmd.ui.ConfirmDelete(T("space"), spaceName) { - return - } - } - - cmd.ui.Say(T("Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - map[string]interface{}{ - "TargetSpace": terminal.EntityNameColor(spaceName), - "TargetOrg": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - space := cmd.spaceReq.GetSpace() - - apiErr := cmd.spaceRepo.Delete(space.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - - if cmd.config.SpaceFields().Guid == space.Guid { - cmd.config.SetSpaceFields(models.SpaceFields{}) - cmd.ui.Say(T("TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - map[string]interface{}{"CfTargetCommand": cf.Name() + " target -s"})) - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/delete_space_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/delete_space_test.go deleted file mode 100644 index f898138..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/delete_space_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package space_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/space" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-space command", func() { - var ( - ui *testterm.FakeUI - space models.Space - config core_config.ReadWriter - spaceRepo *testapi.FakeSpaceRepository - requirementsFactory *testreq.FakeReqFactory - ) - - runCommand := func(args ...string) bool { - cmd := NewDeleteSpace(ui, config, spaceRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - spaceRepo = &testapi.FakeSpaceRepository{} - config = testconfig.NewRepositoryWithDefaults() - - space = maker.NewSpace(maker.Overrides{ - "name": "space-to-delete", - "guid": "space-to-delete-guid", - }) - - requirementsFactory = &testreq.FakeReqFactory{ - LoginSuccess: true, - TargetedOrgSuccess: true, - Space: space, - } - }) - - Describe("requirements", func() { - BeforeEach(func() { - ui.Inputs = []string{"y"} - }) - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("my-space")).To(BeFalse()) - }) - - It("fails when not targeting a space", func() { - requirementsFactory.TargetedOrgSuccess = false - - Expect(runCommand("my-space")).To(BeFalse()) - }) - }) - - It("deletes a space, given its name", func() { - ui.Inputs = []string{"yes"} - runCommand("space-to-delete") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the space space-to-delete"})) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting space", "space-to-delete", "my-org", "my-user"}, - []string{"OK"}, - )) - Expect(spaceRepo.DeletedSpaceGuid).To(Equal("space-to-delete-guid")) - Expect(config.HasSpace()).To(Equal(true)) - }) - - It("does not prompt when the -f flag is given", func() { - runCommand("-f", "space-to-delete") - - Expect(ui.Prompts).To(BeEmpty()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "space-to-delete"}, - []string{"OK"}, - )) - Expect(spaceRepo.DeletedSpaceGuid).To(Equal("space-to-delete-guid")) - }) - - It("clears the space from the config, when deleting the space currently targeted", func() { - config.SetSpaceFields(space.SpaceFields) - runCommand("-f", "space-to-delete") - - Expect(config.HasSpace()).To(Equal(false)) - }) - - It("clears the space from the config, when deleting the space currently targeted even if space name is case insensitive", func() { - config.SetSpaceFields(space.SpaceFields) - runCommand("-f", "Space-To-Delete") - - Expect(config.HasSpace()).To(Equal(false)) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/rename_space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/rename_space.go deleted file mode 100644 index 50aba67..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/rename_space.go +++ /dev/null @@ -1,77 +0,0 @@ -package space - -import ( - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type RenameSpace struct { - ui terminal.UI - config core_config.ReadWriter - spaceRepo spaces.SpaceRepository - spaceReq requirements.SpaceRequirement -} - -func NewRenameSpace(ui terminal.UI, config core_config.ReadWriter, spaceRepo spaces.SpaceRepository) (cmd *RenameSpace) { - cmd = new(RenameSpace) - cmd.ui = ui - cmd.config = config - cmd.spaceRepo = spaceRepo - return -} - -func (cmd *RenameSpace) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "rename-space", - Description: T("Rename a space"), - Usage: T("CF_NAME rename-space SPACE NEW_SPACE"), - } -} - -func (cmd *RenameSpace) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - if cmd.spaceReq == nil { - cmd.spaceReq = requirementsFactory.NewSpaceRequirement(c.Args()[0]) - } else { - cmd.spaceReq.SetSpaceName(c.Args()[0]) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - cmd.spaceReq, - } - return -} - -func (cmd *RenameSpace) Run(c *cli.Context) { - space := cmd.spaceReq.GetSpace() - newName := c.Args()[1] - cmd.ui.Say(T("Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "OldSpaceName": terminal.EntityNameColor(space.Name), - "NewSpaceName": terminal.EntityNameColor(newName), - "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr := cmd.spaceRepo.Rename(space.Guid, newName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - if cmd.config.SpaceFields().Guid == space.Guid { - space.Name = newName - cmd.config.SetSpaceFields(space.SpaceFields) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/rename_space_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/rename_space_test.go deleted file mode 100644 index e8d35f2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/rename_space_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package space_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/space" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("rename-space command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - spaceRepo *testapi.FakeSpaceRepository - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedOrgSuccess: true} - spaceRepo = &testapi.FakeSpaceRepository{} - }) - - var callRenameSpace = func(args []string) bool { - cmd := NewRenameSpace(ui, configRepo, spaceRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("when the user is not logged in", func() { - It("does not pass requirements", func() { - requirementsFactory.LoginSuccess = false - - Expect(callRenameSpace([]string{"my-space", "my-new-space"})).To(BeFalse()) - }) - }) - - Describe("when the user has not targeted an org", func() { - It("does not pass requirements", func() { - requirementsFactory.TargetedOrgSuccess = false - - Expect(callRenameSpace([]string{"my-space", "my-new-space"})).To(BeFalse()) - }) - }) - - Describe("when the user provides fewer than two args", func() { - It("fails with usage", func() { - callRenameSpace([]string{"foo"}) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Describe("when the user is logged in and has provided an old and new space name", func() { - BeforeEach(func() { - space := models.Space{} - space.Name = "the-old-space-name" - space.Guid = "the-old-space-guid" - requirementsFactory.Space = space - }) - - It("renames a space", func() { - originalSpaceName := configRepo.SpaceFields().Name - callRenameSpace([]string{"the-old-space-name", "my-new-space"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Renaming space", "the-old-space-name", "my-new-space", "my-org", "my-user"}, - []string{"OK"}, - )) - - Expect(spaceRepo.RenameSpaceGuid).To(Equal("the-old-space-guid")) - Expect(spaceRepo.RenameNewName).To(Equal("my-new-space")) - Expect(configRepo.SpaceFields().Name).To(Equal(originalSpaceName)) - }) - - Describe("renaming the space the user has targeted", func() { - BeforeEach(func() { - configRepo.SetSpaceFields(requirementsFactory.Space.SpaceFields) - }) - - It("renames the targeted space", func() { - callRenameSpace([]string{"the-old-space-name", "my-new-space-name"}) - Expect(configRepo.SpaceFields().Name).To(Equal("my-new-space-name")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space.go deleted file mode 100644 index c87958d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space.go +++ /dev/null @@ -1,229 +0,0 @@ -package space - -import ( - "fmt" - "strings" - - "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" - "github.com/cloudfoundry/cli/plugin/models" - - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type ShowSpace struct { - ui terminal.UI - config core_config.Reader - spaceReq requirements.SpaceRequirement - quotaRepo space_quotas.SpaceQuotaRepository - pluginModel *plugin_models.GetSpace_Model - pluginCall bool -} - -func init() { - command_registry.Register(&ShowSpace{}) -} - -func NewShowSpace(ui terminal.UI, config core_config.Reader, quotaRepo space_quotas.SpaceQuotaRepository) (cmd *ShowSpace) { - cmd = new(ShowSpace) - cmd.ui = ui - cmd.config = config - cmd.quotaRepo = quotaRepo - return -} - -func (cmd *ShowSpace) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["guid"] = &cliFlags.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given org's guid. All other output for the org is suppressed.")} - fs["security-group-rules"] = &cliFlags.BoolFlag{Name: "security-group-rules", Usage: T("Retrive the rules for all the security groups associated with the space")} - return command_registry.CommandMetadata{ - Name: "space", - Description: T("Show space info"), - Usage: T("CF_NAME space SPACE"), - Flags: fs, - } -} - -func (cmd *ShowSpace) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 1 { - cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("space")) - } - - cmd.spaceReq = requirementsFactory.NewSpaceRequirement(fc.Args()[0]) - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - cmd.spaceReq, - } - return -} - -func (cmd *ShowSpace) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.quotaRepo = deps.RepoLocator.GetSpaceQuotaRepository() - cmd.pluginCall = pluginCall - cmd.pluginModel = deps.PluginModels.Space - return cmd -} - -func (cmd *ShowSpace) Execute(c flags.FlagContext) { - space := cmd.spaceReq.GetSpace() - if cmd.pluginCall { - cmd.populatePluginModel(space) - return - } - if c.Bool("guid") { - cmd.ui.Say(space.Guid) - } else { - cmd.ui.Say(T("Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - map[string]interface{}{ - "TargetSpace": terminal.EntityNameColor(space.Name), - "OrgName": terminal.EntityNameColor(space.Organization.Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - quotaString := cmd.quotaString(space) - cmd.ui.Ok() - cmd.ui.Say("") - table := terminal.NewTable(cmd.ui, []string{terminal.EntityNameColor(space.Name), "", ""}) - table.Add("", T("Org:"), terminal.EntityNameColor(space.Organization.Name)) - - apps := []string{} - for _, app := range space.Applications { - apps = append(apps, terminal.EntityNameColor(app.Name)) - } - table.Add("", T("Apps:"), strings.Join(apps, ", ")) - - domains := []string{} - for _, domain := range space.Domains { - domains = append(domains, terminal.EntityNameColor(domain.Name)) - } - table.Add("", T("Domains:"), strings.Join(domains, ", ")) - - services := []string{} - for _, service := range space.ServiceInstances { - services = append(services, terminal.EntityNameColor(service.Name)) - } - table.Add("", T("Services:"), strings.Join(services, ", ")) - - securityGroups := []string{} - for _, group := range space.SecurityGroups { - securityGroups = append(securityGroups, terminal.EntityNameColor(group.Name)) - } - table.Add("", T("Security Groups:"), strings.Join(securityGroups, ", ")) - - table.Add("", T("Space Quota:"), quotaString) - - table.Print() - } - if c.Bool("security-group-rules") { - cmd.ui.Say("") - for _, group := range space.SecurityGroups { - cmd.ui.Say(T("Getting rules for the security group : {{.SecurityGroupName}}...", - map[string]interface{}{"SecurityGroupName": terminal.EntityNameColor(group.Name)})) - table := terminal.NewTable(cmd.ui, []string{"", "", "", ""}) - for _, rules := range group.Rules { - for ruleName, ruleValue := range rules { - table.Add("", ruleName, ":", ruleValue.(string)) - } - table.Add("", "", "", "") - } - table.Print() - } - } - -} - -func (cmd *ShowSpace) quotaString(space models.Space) string { - var instance_memory string - - if space.SpaceQuotaGuid == "" { - return "" - } - - quota, err := cmd.quotaRepo.FindByGuid(space.SpaceQuotaGuid) - if err != nil { - cmd.ui.Failed(err.Error()) - return "" - } - - if quota.InstanceMemoryLimit == -1 { - instance_memory = "-1" - } else { - instance_memory = formatters.ByteSize(quota.InstanceMemoryLimit * formatters.MEGABYTE) - } - memory := formatters.ByteSize(quota.MemoryLimit * formatters.MEGABYTE) - - spaceQuota := fmt.Sprintf("%s (%s memory limit, %s instance memory limit, %d routes, %d services, paid services %s)", quota.Name, memory, instance_memory, quota.RoutesLimit, quota.ServicesLimit, formatters.Allowed(quota.NonBasicServicesAllowed)) - // spaceQuota := fmt.Sprintf(T("{{.QuotaName}} ({{.MemoryLimit}} memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - // map[string]interface{}{ - // "QuotaName": quota.Name, - // "MemoryLimit": memory, - // "InstanceMemoryLimit": instance_memory, - // "RoutesLimit": quota.RoutesLimit, - // "ServicesLimit": quota.ServicesLimit, - // "NonBasicServicesAllowed": formatters.Allowed(quota.NonBasicServicesAllowed)})) - - return spaceQuota -} - -func (cmd *ShowSpace) populatePluginModel(space models.Space) { - cmd.pluginModel.Name = space.Name - cmd.pluginModel.Guid = space.Guid - - cmd.pluginModel.Organization.Name = space.Organization.Name - cmd.pluginModel.Organization.Guid = space.Organization.Guid - - for _, app := range space.Applications { - a := plugin_models.GetSpace_Apps{ - Name: app.Name, - Guid: app.Guid, - } - cmd.pluginModel.Applications = append(cmd.pluginModel.Applications, a) - } - - for _, domain := range space.Domains { - d := plugin_models.GetSpace_Domains{ - Name: domain.Name, - Guid: domain.Guid, - OwningOrganizationGuid: domain.OwningOrganizationGuid, - Shared: domain.Shared, - } - cmd.pluginModel.Domains = append(cmd.pluginModel.Domains, d) - } - - for _, service := range space.ServiceInstances { - si := plugin_models.GetSpace_ServiceInstance{ - Name: service.Name, - Guid: service.Guid, - } - cmd.pluginModel.ServiceInstances = append(cmd.pluginModel.ServiceInstances, si) - } - for _, group := range space.SecurityGroups { - sg := plugin_models.GetSpace_SecurityGroup{ - Name: group.Name, - Guid: group.Guid, - Rules: group.Rules, - } - cmd.pluginModel.SecurityGroups = append(cmd.pluginModel.SecurityGroups, sg) - } - - quota, err := cmd.quotaRepo.FindByGuid(space.SpaceQuotaGuid) - if err == nil { - cmd.pluginModel.SpaceQuota.Name = quota.Name - cmd.pluginModel.SpaceQuota.Guid = quota.Guid - cmd.pluginModel.SpaceQuota.MemoryLimit = quota.MemoryLimit - cmd.pluginModel.SpaceQuota.InstanceMemoryLimit = quota.InstanceMemoryLimit - cmd.pluginModel.SpaceQuota.RoutesLimit = quota.RoutesLimit - cmd.pluginModel.SpaceQuota.ServicesLimit = quota.ServicesLimit - cmd.pluginModel.SpaceQuota.NonBasicServicesAllowed = quota.NonBasicServicesAllowed - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space_suite_test.go deleted file mode 100644 index f405930..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package space_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSpace(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Space Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space_test.go deleted file mode 100644 index fb92e11..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/space_test.go +++ /dev/null @@ -1,259 +0,0 @@ -package space_test - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("space command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - quotaRepo *fakes.FakeSpaceQuotaRepository - configRepo core_config.Repository - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetSpaceQuotaRepository(quotaRepo) - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("space").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("space") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.TargetedOrgSuccess = true - - Expect(runCommand("some-space")).To(BeFalse()) - }) - - It("fails when an org is not targeted", func() { - requirementsFactory.LoginSuccess = true - - Expect(runCommand("some-space")).To(BeFalse()) - }) - - It("Shows usage when called incorrectly", func() { - requirementsFactory.LoginSuccess = true - - runCommand("some-space", "much") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "Requires an argument"}, - )) - }) - }) - - Context("when logged in and an org is targeted", func() { - BeforeEach(func() { - org := models.OrganizationFields{} - org.Name = "my-org" - org.Guid = "my-org-guid" - - app := models.ApplicationFields{} - app.Name = "app1" - app.Guid = "app1-guid" - apps := []models.ApplicationFields{app} - - domain := models.DomainFields{} - domain.Name = "domain1" - domain.Guid = "domain1-guid" - domains := []models.DomainFields{domain} - - serviceInstance := models.ServiceInstanceFields{} - serviceInstance.Name = "service1" - serviceInstance.Guid = "service1-guid" - services := []models.ServiceInstanceFields{serviceInstance} - - securityGroup1 := models.SecurityGroupFields{Name: "Nacho Security", Rules: []map[string]interface{}{ - {"protocol": "all", "destination": "0.0.0.0-9.255.255.255"}, - }} - securityGroup2 := models.SecurityGroupFields{Name: "Nacho Prime", Rules: []map[string]interface{}{ - {"protocol": "udp", "ports": "8080-9090", "destination": "198.41.191.47/1"}, - }} - securityGroups := []models.SecurityGroupFields{securityGroup1, securityGroup2} - - space := models.Space{} - space.Name = "whose-space-is-it-anyway" - space.Guid = "whose-space-is-it-anyway-guid" - space.Organization = org - space.Applications = apps - space.Domains = domains - space.ServiceInstances = services - space.SecurityGroups = securityGroups - space.SpaceQuotaGuid = "runaway-guid" - - quota := models.SpaceQuota{} - quota.Guid = "runaway-guid" - quota.Name = "runaway" - quota.MemoryLimit = 102400 - quota.InstanceMemoryLimit = -1 - quota.RoutesLimit = 111 - quota.ServicesLimit = 222 - quota.NonBasicServicesAllowed = false - - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - requirementsFactory.Space = space - - quotaRepo.FindByGuidReturns(quota, nil) - }) - - Context("when the guid flag is passed", func() { - It("shows only the space guid", func() { - runCommand("--guid", "whose-space-is-it-anyway") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"whose-space-is-it-anyway-guid"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"Getting info for space", "whose-space-is-it-anyway", "my-org", "my-user"}, - )) - }) - }) - - Context("when the security-group-rules flag is passed", func() { - It("it shows space information and security group rules", func() { - runCommand("--security-group-rules", "whose-space-is-it-anyway") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting rules for the security group", "Nacho Security"}, - []string{"protocol", "all"}, - []string{"destination", "0.0.0.0-9.255.255.255"}, - []string{"Getting rules for the security group", "Nacho Prime"}, - []string{"protocol", "udp"}, - []string{"ports", "8080-9090"}, - []string{"destination", "198.41.191.47/1"}, - )) - }) - }) - - Context("when the space has a space quota", func() { - It("shows information about the given space", func() { - runCommand("whose-space-is-it-anyway") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting info for space", "whose-space-is-it-anyway", "my-org", "my-user"}, - []string{"OK"}, - []string{"whose-space-is-it-anyway"}, - []string{"Org", "my-org"}, - []string{"Apps", "app1"}, - []string{"Domains", "domain1"}, - []string{"Services", "service1"}, - []string{"Security Groups", "Nacho Security", "Nacho Prime"}, - []string{"Space Quota", "runaway (100G memory limit, -1 instance memory limit, 111 routes, 222 services, paid services disallowed)"}, - )) - }) - - }) - - Context("when the space does not have a space quota", func() { - It("shows information without a space quota", func() { - requirementsFactory.Space.SpaceQuotaGuid = "" - runCommand("whose-space-is-it-anyway") - Expect(quotaRepo.FindByGuidCallCount()).To(Equal(0)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting info for space", "whose-space-is-it-anyway", "my-org", "my-user"}, - []string{"OK"}, - []string{"whose-space-is-it-anyway"}, - []string{"Org", "my-org"}, - []string{"Apps", "app1"}, - []string{"Domains", "domain1"}, - []string{"Services", "service1"}, - []string{"Security Groups", "Nacho Security", "Nacho Prime"}, - []string{"Space Quota"}, - )) - }) - }) - - Context("When called as a plugin", func() { - var ( - pluginModel plugin_models.GetSpace_Model - ) - BeforeEach(func() { - pluginModel = plugin_models.GetSpace_Model{} - deps.PluginModels.Space = &pluginModel - updateCommandDependency(true) - }) - - BeforeEach(func() { - updateCommandDependency(true) - }) - - It("Fills in the PluginModel", func() { - runCommand("whose-space-is-it-anyway") - Ω(pluginModel.Name).To(Equal("whose-space-is-it-anyway")) - Ω(pluginModel.Guid).To(Equal("whose-space-is-it-anyway-guid")) - - Ω(pluginModel.Organization.Name).To(Equal("my-org")) - Ω(pluginModel.Organization.Guid).To(Equal("my-org-guid")) - - Ω(pluginModel.Applications).To(HaveLen(1)) - Ω(pluginModel.Applications[0].Name).To(Equal("app1")) - Ω(pluginModel.Applications[0].Guid).To(Equal("app1-guid")) - - Ω(pluginModel.Domains).To(HaveLen(1)) - Ω(pluginModel.Domains[0].Name).To(Equal("domain1")) - Ω(pluginModel.Domains[0].Guid).To(Equal("domain1-guid")) - - Ω(pluginModel.ServiceInstances).To(HaveLen(1)) - Ω(pluginModel.ServiceInstances[0].Name).To(Equal("service1")) - Ω(pluginModel.ServiceInstances[0].Guid).To(Equal("service1-guid")) - - Ω(pluginModel.SecurityGroups).To(HaveLen(2)) - Ω(pluginModel.SecurityGroups[0].Name).To(Equal("Nacho Security")) - Ω(pluginModel.SecurityGroups[0].Rules).To(HaveLen(1)) - Ω(pluginModel.SecurityGroups[0].Rules[0]).To(HaveLen(2)) - val := pluginModel.SecurityGroups[0].Rules[0]["protocol"] - Ω(val).To(Equal("all")) - val = pluginModel.SecurityGroups[0].Rules[0]["destination"] - Ω(val).To(Equal("0.0.0.0-9.255.255.255")) - - Ω(pluginModel.SecurityGroups[1].Name).To(Equal("Nacho Prime")) - Ω(pluginModel.SecurityGroups[1].Rules).To(HaveLen(1)) - Ω(pluginModel.SecurityGroups[1].Rules[0]).To(HaveLen(3)) - val = pluginModel.SecurityGroups[1].Rules[0]["protocol"] - Ω(val).To(Equal("udp")) - val = pluginModel.SecurityGroups[1].Rules[0]["destination"] - Ω(val).To(Equal("198.41.191.47/1")) - val = pluginModel.SecurityGroups[1].Rules[0]["ports"] - Ω(val).To(Equal("8080-9090")) - - Ω(pluginModel.SpaceQuota.Name).To(Equal("runaway")) - Ω(pluginModel.SpaceQuota.Guid).To(Equal("runaway-guid")) - Ω(pluginModel.SpaceQuota.MemoryLimit).To(Equal(int64(102400))) - Ω(pluginModel.SpaceQuota.InstanceMemoryLimit).To(Equal(int64(-1))) - Ω(pluginModel.SpaceQuota.RoutesLimit).To(Equal(111)) - Ω(pluginModel.SpaceQuota.ServicesLimit).To(Equal(222)) - Ω(pluginModel.SpaceQuota.NonBasicServicesAllowed).To(BeFalse()) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/spaces.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/spaces.go deleted file mode 100644 index da4d231..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/spaces.go +++ /dev/null @@ -1,100 +0,0 @@ -package space - -import ( - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/plugin/models" -) - -type ListSpaces struct { - ui terminal.UI - config core_config.Reader - spaceRepo spaces.SpaceRepository - - pluginModel *[]plugin_models.GetSpaces_Model - pluginCall bool -} - -func NewListSpaces(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository) (cmd ListSpaces) { - cmd.ui = ui - cmd.config = config - cmd.spaceRepo = spaceRepo - return -} - -func init() { - command_registry.Register(&ListSpaces{}) -} - -func (cmd *ListSpaces) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "spaces", - Description: T("List all spaces in an org"), - Usage: T("CF_NAME spaces"), - } - -} - -func (cmd *ListSpaces) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 0 { - cmd.ui.Failed(T("Incorrect Usage. No argument required\n\n") + command_registry.Commands.CommandUsage("spaces")) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - } - return -} - -func (cmd *ListSpaces) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.spaceRepo = deps.RepoLocator.GetSpaceRepository() - cmd.pluginCall = pluginCall - cmd.pluginModel = deps.PluginModels.Spaces - return cmd -} - -func (cmd *ListSpaces) Execute(c flags.FlagContext) { - cmd.ui.Say(T("Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - map[string]interface{}{ - "TargetOrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - foundSpaces := false - table := cmd.ui.Table([]string{T("name")}) - apiErr := cmd.spaceRepo.ListSpaces(func(space models.Space) bool { - table.Add(space.Name) - foundSpaces = true - - if cmd.pluginCall { - s := plugin_models.GetSpaces_Model{} - s.Name = space.Name - s.Guid = space.Guid - *(cmd.pluginModel) = append(*(cmd.pluginModel), s) - } - - return true - }) - table.Print() - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching spaces.\n{{.ErrorDescription}}", - map[string]interface{}{ - "ErrorDescription": apiErr.Error(), - })) - return - } - - if !foundSpaces { - cmd.ui.Say(T("No spaces found")) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/spaces_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/spaces_test.go deleted file mode 100644 index e75962a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/space/spaces_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package space_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("spaces command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.Repository - spaceRepo *testapi.FakeSpaceRepository - - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetSpaceRepository(spaceRepo) - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("spaces").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - deps = command_registry.NewDependency() - ui = &testterm.FakeUI{} - spaceRepo = &testapi.FakeSpaceRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("spaces") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.TargetedOrgSuccess = true - updateCommandDependency(false) - - Expect(runCommand()).To(BeFalse()) - }) - - It("fails when an org is not targeted", func() { - requirementsFactory.LoginSuccess = true - updateCommandDependency(false) - - Expect(runCommand()).To(BeFalse()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - updateCommandDependency(false) - - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "No argument required"}, - )) - }) - }) - - Describe("when invoked by a plugin", func() { - var ( - pluginModels []plugin_models.GetSpaces_Model - ) - - BeforeEach(func() { - pluginModels = []plugin_models.GetSpaces_Model{} - deps.PluginModels.Spaces = &pluginModels - - space := models.Space{} - space.Name = "space1" - space.Guid = "123" - space2 := models.Space{} - space2.Name = "space2" - space2.Guid = "456" - spaceRepo.Spaces = []models.Space{space, space2} - - requirementsFactory.TargetedOrgSuccess = true - requirementsFactory.LoginSuccess = true - - updateCommandDependency(true) - }) - - It("populates the plugin models upon execution", func() { - runCommand() - Ω(pluginModels[0].Name).To(Equal("space1")) - Ω(pluginModels[0].Guid).To(Equal("123")) - Ω(pluginModels[1].Name).To(Equal("space2")) - Ω(pluginModels[1].Guid).To(Equal("456")) - }) - }) - - Context("when logged in and an org is targeted", func() { - BeforeEach(func() { - space := models.Space{} - space.Name = "space1" - space2 := models.Space{} - space2.Name = "space2" - space3 := models.Space{} - space3.Name = "space3" - spaceRepo.Spaces = []models.Space{space, space2, space3} - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - - updateCommandDependency(false) - }) - - It("lists all of the spaces", func() { - runCommand() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting spaces in org", "my-org", "my-user"}, - []string{"space1"}, - []string{"space2"}, - []string{"space3"}, - )) - }) - - Context("when there are no spaces", func() { - BeforeEach(func() { - spaceRepo.Spaces = []models.Space{} - }) - - It("politely tells the user", func() { - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting spaces in org", "my-org", "my-user"}, - []string{"No spaces found"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/create_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/create_quota.go deleted file mode 100644 index 855b725..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/create_quota.go +++ /dev/null @@ -1,125 +0,0 @@ -package spacequota - -import ( - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateSpaceQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo space_quotas.SpaceQuotaRepository - orgRepo organizations.OrganizationRepository -} - -func NewCreateSpaceQuota(ui terminal.UI, config core_config.Reader, quotaRepo space_quotas.SpaceQuotaRepository, orgRepo organizations.OrganizationRepository) CreateSpaceQuota { - return CreateSpaceQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - orgRepo: orgRepo, - } -} - -func (cmd CreateSpaceQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-space-quota", - Description: T("Define a new space resource quota"), - Usage: T("CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("i", T("Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)")), - flag_helpers.NewStringFlag("m", T("Total amount of memory a space can have (e.g. 1024M, 1G, 10G)")), - flag_helpers.NewIntFlag("r", T("Total number of routes")), - flag_helpers.NewIntFlag("s", T("Total number of service instances")), - cli.BoolFlag{Name: "allow-paid-service-plans", Usage: T("Can provision instances of paid service plans (Default: disallowed)")}, - }, - } -} - -func (cmd CreateSpaceQuota) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - }, nil -} - -func (cmd CreateSpaceQuota) Run(context *cli.Context) { - name := context.Args()[0] - org := cmd.config.OrganizationFields() - - cmd.ui.Say(T("Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(name), - "OrgName": terminal.EntityNameColor(org.Name), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - quota := models.SpaceQuota{ - Name: name, - OrgGuid: org.Guid, - } - - memoryLimit := context.String("m") - if memoryLimit != "" { - parsedMemory, errr := formatters.ToMegabytes(memoryLimit) - if errr != nil { - cmd.ui.Failed(T("Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", map[string]interface{}{"MemoryLimit": memoryLimit, "Err": errr})) - } - - quota.MemoryLimit = parsedMemory - } - - instanceMemoryLimit := context.String("i") - var parsedMemory int64 - var err error - if instanceMemoryLimit == "-1" || instanceMemoryLimit == "" { - parsedMemory = -1 - } else { - parsedMemory, err = formatters.ToMegabytes(instanceMemoryLimit) - if err != nil { - cmd.ui.Failed(T("Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", map[string]interface{}{"MemoryLimit": instanceMemoryLimit, "Err": err})) - } - } - - quota.InstanceMemoryLimit = parsedMemory - - if context.IsSet("r") { - quota.RoutesLimit = context.Int("r") - } - - if context.IsSet("s") { - quota.ServicesLimit = context.Int("s") - } - - if context.IsSet("allow-paid-service-plans") { - quota.NonBasicServicesAllowed = true - } - - err = cmd.quotaRepo.Create(quota) - - httpErr, ok := err.(errors.HttpError) - if ok && httpErr.ErrorCode() == errors.QUOTA_EXISTS { - cmd.ui.Ok() - cmd.ui.Warn(T("Space Quota Definition {{.QuotaName}} already exists", map[string]interface{}{"QuotaName": quota.Name})) - return - } - - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/create_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/create_quota_test.go deleted file mode 100644 index 6d580ea..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/create_quota_test.go +++ /dev/null @@ -1,166 +0,0 @@ -package spacequota_test - -import ( - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" -) - -var _ = Describe("create-quota command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeSpaceQuotaRepository - orgRepo *test_org.FakeOrganizationRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - orgRepo = &test_org.FakeOrganizationRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - - org := models.Organization{} - org.Name = "my-org" - org.Guid = "my-org-guid" - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - orgRepo.FindByNameReturns(org, nil) - }) - - runCommand := func(args ...string) bool { - cmd := NewCreateSpaceQuota(ui, configuration.NewRepositoryWithDefaults(), quotaRepo, orgRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("my-quota", "-m", "50G")).To(BeFalse()) - }) - - It("requires the user to target an org", func() { - requirementsFactory.TargetedOrgSuccess = false - - Expect(runCommand("my-quota", "-m", "50G")).To(BeFalse()) - }) - }) - - Context("when requirements have been met", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - }) - - It("fails requirements when called without a quota name", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("creates a quota with a given name", func() { - runCommand("my-quota") - Expect(quotaRepo.CreateArgsForCall(0).Name).To(Equal("my-quota")) - Expect(quotaRepo.CreateArgsForCall(0).OrgGuid).To(Equal("my-org-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating space quota", "my-org", "my-quota", "my-user", "..."}, - []string{"OK"}, - )) - }) - - Context("when the -i flag is not provided", func() { - It("sets the instance memory limit to unlimiited", func() { - runCommand("my-quota") - - Expect(quotaRepo.CreateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(-1))) - }) - }) - - Context("when the -m flag is provided", func() { - It("sets the memory limit", func() { - runCommand("-m", "50G", "erryday makin fitty jeez") - Expect(quotaRepo.CreateArgsForCall(0).MemoryLimit).To(Equal(int64(51200))) - }) - - It("alerts the user when parsing the memory limit fails", func() { - runCommand("-m", "whoops", "wit mah hussle") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when the -i flag is provided", func() { - It("sets the memory limit", func() { - runCommand("-i", "50G", "erryday makin fitty jeez") - Expect(quotaRepo.CreateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(51200))) - }) - - It("accepts -1 without units as an appropriate value", func() { - runCommand("-i", "-1", "wit mah hussle") - Expect(quotaRepo.CreateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(-1))) - }) - - It("alerts the user when parsing the memory limit fails", func() { - runCommand("-i", "whoops", "yo", "12") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - It("sets the route limit", func() { - runCommand("-r", "12", "ecstatic") - - Expect(quotaRepo.CreateArgsForCall(0).RoutesLimit).To(Equal(12)) - }) - - It("sets the service instance limit", func() { - runCommand("-s", "42", "black star") - Expect(quotaRepo.CreateArgsForCall(0).ServicesLimit).To(Equal(42)) - }) - - It("defaults to not allowing paid service plans", func() { - runCommand("my-pro-bono-quota") - Expect(quotaRepo.CreateArgsForCall(0).NonBasicServicesAllowed).To(BeFalse()) - }) - - Context("when requesting to allow paid service plans", func() { - It("creates the quota with paid service plans allowed", func() { - runCommand("--allow-paid-service-plans", "my-for-profit-quota") - Expect(quotaRepo.CreateArgsForCall(0).NonBasicServicesAllowed).To(BeTrue()) - }) - }) - - Context("when creating a quota returns an error", func() { - It("alerts the user when creating the quota fails", func() { - quotaRepo.CreateReturns(errors.New("WHOOP THERE IT IS")) - runCommand("my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating space quota", "my-quota", "my-org"}, - []string{"FAILED"}, - )) - }) - - It("warns the user when quota already exists", func() { - quotaRepo.CreateReturns(errors.NewHttpError(400, "240002", "Quota Definition is taken: quota-sct")) - runCommand("Banana") - - Expect(ui.Outputs).ToNot(ContainSubstrings( - []string{"FAILED"}, - )) - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"already exists"})) - }) - - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/delete_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/delete_quota.go deleted file mode 100644 index 0ab8621..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/delete_quota.go +++ /dev/null @@ -1,81 +0,0 @@ -package spacequota - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type DeleteSpaceQuota struct { - ui terminal.UI - config core_config.Reader - spaceQuotaRepo space_quotas.SpaceQuotaRepository -} - -func NewDeleteSpaceQuota(ui terminal.UI, config core_config.Reader, spaceQuotaRepo space_quotas.SpaceQuotaRepository) DeleteSpaceQuota { - return DeleteSpaceQuota{ - ui: ui, - config: config, - spaceQuotaRepo: spaceQuotaRepo, - } -} -func (cmd DeleteSpaceQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-space-quota", - Description: T("Delete a space quota definition and unassign the space quota from all spaces"), - Usage: T("CF_NAME delete-space-quota SPACE-QUOTA-NAME"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force delete (do not prompt for confirmation)")}, - }, - } -} - -func (cmd DeleteSpaceQuota) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 1 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - }, nil -} - -func (cmd DeleteSpaceQuota) Run(context *cli.Context) { - quotaName := context.Args()[0] - - if !context.Bool("f") { - response := cmd.ui.ConfirmDelete("quota", quotaName) - if !response { - return - } - } - - cmd.ui.Say(T("Deleting space quota {{.QuotaName}} as {{.Username}}...", map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(quotaName), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - quota, apiErr := cmd.spaceQuotaRepo.FindByName(quotaName) - switch (apiErr).(type) { - case nil: // no error - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("Quota {{.QuotaName}} does not exist", map[string]interface{}{"QuotaName": quotaName})) - return - default: - cmd.ui.Failed(apiErr.Error()) - } - - apiErr = cmd.spaceQuotaRepo.Delete(quota.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/delete_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/delete_quota_test.go deleted file mode 100644 index 969cbe4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/delete_quota_test.go +++ /dev/null @@ -1,155 +0,0 @@ -package spacequota_test - -import ( - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("delete-quota command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeSpaceQuotaRepository - orgRepo *test_org.FakeOrganizationRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - orgRepo = &test_org.FakeOrganizationRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - - org := models.Organization{} - org.Name = "my-org" - org.Guid = "my-org-guid" - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - orgRepo.FindByNameReturns(org, nil) - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteSpaceQuota(ui, configuration.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Context("when the user is not logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = false - }) - - It("fails requirements", func() { - Expect(runCommand("my-quota")).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - It("fails requirements when called without a quota name", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when an org is not targeted", func() { - requirementsFactory.TargetedOrgSuccess = false - Expect(runCommand()).To(BeFalse()) - }) - - Context("When the quota provided exists", func() { - BeforeEach(func() { - quota := models.SpaceQuota{} - quota.Name = "my-quota" - quota.Guid = "my-quota-guid" - quota.OrgGuid = "my-org-guid" - quotaRepo.FindByNameReturns(quota, nil) - }) - - It("deletes a quota with a given name when the user confirms", func() { - ui.Inputs = []string{"y"} - - runCommand("my-quota") - Expect(quotaRepo.DeleteArgsForCall(0)).To(Equal("my-quota-guid")) - - Expect(ui.Prompts).To(ContainSubstrings( - []string{"Really delete the quota", "my-quota"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting space quota", "my-quota", "as", "my-user"}, - []string{"OK"}, - )) - }) - - It("does not prompt when the -f flag is provided", func() { - runCommand("-f", "my-quota") - - Expect(quotaRepo.DeleteArgsForCall(0)).To(Equal("my-quota-guid")) - - Expect(ui.Prompts).To(BeEmpty()) - }) - - It("shows an error when deletion fails", func() { - quotaRepo.DeleteReturns(errors.New("some error")) - - runCommand("-f", "my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "my-quota"}, - []string{"FAILED"}, - )) - }) - }) - - Context("when finding the quota fails", func() { - Context("when the quota provided does not exist", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.SpaceQuota{}, errors.NewModelNotFoundError("Quota", "non-existent-quota")) - }) - - It("warns the user when that the quota does not exist", func() { - runCommand("-f", "non-existent-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting", "non-existent-quota"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings( - []string{"non-existent-quota", "does not exist"}, - )) - }) - }) - - Context("when other types of error occur", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.SpaceQuota{}, errors.New("some error")) - }) - - It("shows an error", func() { - runCommand("-f", "my-quota") - - Expect(ui.WarnOutputs).ToNot(ContainSubstrings( - []string{"my-quota", "does not exist"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/set_space_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/set_space_quota.go deleted file mode 100644 index 5b171aa..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/set_space_quota.go +++ /dev/null @@ -1,80 +0,0 @@ -package spacequota - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SetSpaceQuota struct { - ui terminal.UI - config core_config.Reader - spaceRepo spaces.SpaceRepository - quotaRepo space_quotas.SpaceQuotaRepository -} - -func NewSetSpaceQuota(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, quotaRepo space_quotas.SpaceQuotaRepository) SetSpaceQuota { - return SetSpaceQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - spaceRepo: spaceRepo, - } -} - -func (cmd SetSpaceQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-space-quota", - Description: T("Assign a space quota definition to a space"), - Usage: T("CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME"), - } -} - -func (cmd SetSpaceQuota) GetRequirements(requirementsFactory requirements.Factory, context *cli.Context) ([]requirements.Requirement, error) { - if len(context.Args()) != 2 { - cmd.ui.FailWithUsage(context) - } - - return []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - }, nil -} - -func (cmd SetSpaceQuota) Run(context *cli.Context) { - - spaceName := context.Args()[0] - quotaName := context.Args()[1] - - cmd.ui.Say(T("Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(quotaName), - "SpaceName": terminal.EntityNameColor(spaceName), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - space, err := cmd.spaceRepo.FindByName(spaceName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - if space.SpaceQuotaGuid != "" { - cmd.ui.Failed(T("This space already has an assigned space quota.")) - } - - quota, err := cmd.quotaRepo.FindByName(quotaName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - err = cmd.quotaRepo.AssociateSpaceWithQuota(space.Guid, quota.Guid) - if err != nil { - cmd.ui.Failed(err.Error()) - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/set_space_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/set_space_quota_test.go deleted file mode 100644 index ce0ca33..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/set_space_quota_test.go +++ /dev/null @@ -1,165 +0,0 @@ -package spacequota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/fakes" - quotafakes "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("set-space-quota command", func() { - var ( - ui *testterm.FakeUI - spaceRepo *fakes.FakeSpaceRepository - quotaRepo *quotafakes.FakeSpaceQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - spaceRepo = &fakes.FakeSpaceRepository{} - quotaRepo = "afakes.FakeSpaceQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewSetSpaceQuota(ui, testconfig.NewRepositoryWithDefaults(), spaceRepo, quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("space", "space-quota")).ToNot(HavePassedRequirements()) - }) - - It("requires the user to target an org", func() { - requirementsFactory.TargetedOrgSuccess = false - Expect(runCommand("space", "space-quota")).ToNot(HavePassedRequirements()) - }) - - It("fails with usage if the user does not provide a quota and space", func() { - requirementsFactory.TargetedOrgSuccess = true - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in", func() { - JustBeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - Expect(runCommand("my-space", "quota-name")).To(HavePassedRequirements()) - }) - - Context("when the space and quota both exist", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns( - models.SpaceQuota{ - Name: "quota-name", - Guid: "quota-guid", - MemoryLimit: 1024, - InstanceMemoryLimit: 512, - RoutesLimit: 111, - ServicesLimit: 222, - NonBasicServicesAllowed: true, - OrgGuid: "my-org-guid", - }, nil) - - spaceRepo.Spaces = []models.Space{ - models.Space{ - SpaceFields: models.SpaceFields{ - Name: "my-space", - Guid: "my-space-guid", - }, - SpaceQuotaGuid: "", - }, - } - }) - - Context("when the space quota was not previously assigned to a space", func() { - It("associates the provided space with the provided space quota", func() { - spaceGuid, quotaGuid := quotaRepo.AssociateSpaceWithQuotaArgsForCall(0) - - Expect(spaceGuid).To(Equal("my-space-guid")) - Expect(quotaGuid).To(Equal("quota-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning space quota", "to space", "my-user"}, - []string{"OK"}, - )) - }) - }) - - Context("when the space quota was previously assigned to a space", func() { - BeforeEach(func() { - spaceRepo.Spaces = []models.Space{ - models.Space{ - SpaceFields: models.SpaceFields{ - Name: "my-space", - Guid: "my-space-guid", - }, - SpaceQuotaGuid: "another-quota", - }, - } - }) - - It("warns the user that the operation was not performed", func() { - Expect(quotaRepo.UpdateCallCount()).To(Equal(0)) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning space quota", "to space", "my-user"}, - []string{"FAILED"}, - []string{"This space already has an assigned space quota."}, - )) - }) - }) - }) - - Context("when an error occurs fetching the space", func() { - BeforeEach(func() { - spaceRepo.FindByNameErr = true - }) - - It("prints an error", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning space quota", "to space", "my-user"}, - []string{"FAILED"}, - []string{"Error finding space by name"}, - )) - }) - }) - - Context("when an error occurs fetching the quota", func() { - BeforeEach(func() { - spaceRepo.Spaces = []models.Space{ - models.Space{ - SpaceFields: models.SpaceFields{ - Name: "my-space", - Guid: "my-space-guid", - }, - SpaceQuotaGuid: "", - }, - } - spaceRepo.FindByNameErr = false - quotaRepo.FindByNameReturns(models.SpaceQuota{}, errors.New("I can't find my quota name!")) - }) - - It("prints an error", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning space quota", "to space", "my-user"}, - []string{"FAILED"}, - []string{"I can't find my quota name!"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quota.go deleted file mode 100644 index c0a682a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quota.go +++ /dev/null @@ -1,91 +0,0 @@ -package spacequota - -import ( - "fmt" - "strconv" - - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SpaceQuota struct { - ui terminal.UI - config core_config.Reader - spaceQuotaRepo space_quotas.SpaceQuotaRepository -} - -func NewSpaceQuota(ui terminal.UI, config core_config.Reader, spaceQuotaRepo space_quotas.SpaceQuotaRepository) (cmd *SpaceQuota) { - return &SpaceQuota{ - ui: ui, - config: config, - spaceQuotaRepo: spaceQuotaRepo, - } -} - -func (cmd *SpaceQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "space-quota", - Description: T("Show space quota info"), - Usage: T("CF_NAME space-quota SPACE_QUOTA_NAME"), - } -} - -func (cmd *SpaceQuota) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - } - return -} - -func (cmd *SpaceQuota) Run(c *cli.Context) { - name := c.Args()[0] - - cmd.ui.Say(T("Getting space quota {{.Quota}} info as {{.Username}}...", - map[string]interface{}{ - "Quota": terminal.EntityNameColor(name), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - spaceQuota, apiErr := cmd.spaceQuotaRepo.FindByName(name) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - var megabytes string - - table := terminal.NewTable(cmd.ui, []string{"", ""}) - table.Add(T("total memory limit"), formatters.ByteSize(spaceQuota.MemoryLimit*formatters.MEGABYTE)) - if spaceQuota.InstanceMemoryLimit == -1 { - megabytes = T("unlimited") - } else { - megabytes = formatters.ByteSize(spaceQuota.InstanceMemoryLimit * formatters.MEGABYTE) - } - - servicesLimit := strconv.Itoa(spaceQuota.ServicesLimit) - if servicesLimit == "-1" { - servicesLimit = T("unlimited") - } - - table.Add(T("instance memory limit"), megabytes) - table.Add(T("routes"), fmt.Sprintf("%d", spaceQuota.RoutesLimit)) - table.Add(T("services"), servicesLimit) - table.Add(T("non basic services"), formatters.Allowed(spaceQuota.NonBasicServicesAllowed)) - - table.Print() - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quota_test.go deleted file mode 100644 index ffd4c6a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quota_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package spacequota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("quotas command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeSpaceQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewSpaceQuota(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand("foo")).ToNot(HavePassedRequirements()) - }) - - It("requires the user to target an org", func() { - requirementsFactory.TargetedOrgSuccess = false - Expect(runCommand("bar")).ToNot(HavePassedRequirements()) - }) - - It("fails when a quota name is not provided", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - }) - - Context("when logged in", func() { - JustBeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - Expect(runCommand("quota-name")).To(HavePassedRequirements()) - }) - - Context("when quotas exist", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns( - models.SpaceQuota{ - Name: "quota-name", - MemoryLimit: 1024, - InstanceMemoryLimit: -1, - RoutesLimit: 111, - ServicesLimit: 222, - NonBasicServicesAllowed: true, - OrgGuid: "my-org-guid", - }, nil) - }) - - It("lists the specific quota info", func() { - Expect(quotaRepo.FindByNameArgsForCall(0)).To(Equal("quota-name")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting space quota quota-name info as", "my-user"}, - []string{"OK"}, - []string{"total memory limit", "1G"}, - []string{"instance memory limit", "unlimited"}, - []string{"routes", "111"}, - []string{"service", "222"}, - []string{"non basic services", "allowed"}, - )) - }) - - Context("when the services are unlimited", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns( - models.SpaceQuota{ - Name: "quota-name", - MemoryLimit: 1024, - InstanceMemoryLimit: 14, - RoutesLimit: 111, - ServicesLimit: -1, - NonBasicServicesAllowed: true, - OrgGuid: "my-org-guid", - }, nil) - - }) - - It("replaces -1 with unlimited", func() { - Expect(quotaRepo.FindByNameArgsForCall(0)).To(Equal("quota-name")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting space quota quota-name info as", "my-user"}, - []string{"OK"}, - []string{"total memory limit", "1G"}, - []string{"instance memory limit", "14M"}, - []string{"routes", "111"}, - []string{"service", "unlimited"}, - []string{"non basic services", "allowed"}, - )) - }) - }) - }) - Context("when an error occurs fetching quotas", func() { - BeforeEach(func() { - quotaRepo.FindByNameReturns(models.SpaceQuota{}, errors.New("I haz a borken!")) - }) - - It("prints an error", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting space quota quota-name info as", "my-user"}, - []string{"FAILED"}, - )) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quotas.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quotas.go deleted file mode 100644 index 2e4208a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quotas.go +++ /dev/null @@ -1,90 +0,0 @@ -package spacequota - -import ( - "fmt" - "strconv" - - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListSpaceQuotas struct { - ui terminal.UI - config core_config.Reader - spaceQuotaRepo space_quotas.SpaceQuotaRepository -} - -func NewListSpaceQuotas(ui terminal.UI, config core_config.Reader, spaceQuotaRepo space_quotas.SpaceQuotaRepository) (cmd *ListSpaceQuotas) { - return &ListSpaceQuotas{ - ui: ui, - config: config, - spaceQuotaRepo: spaceQuotaRepo, - } -} - -func (cmd *ListSpaceQuotas) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "space-quotas", - Description: T("List available space resource quotas"), - Usage: T("CF_NAME space-quotas"), - } -} - -func (cmd *ListSpaceQuotas) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - } - return -} - -func (cmd *ListSpaceQuotas) Run(c *cli.Context) { - cmd.ui.Say(T("Getting space quotas as {{.Username}}...", map[string]interface{}{"Username": terminal.EntityNameColor(cmd.config.Username())})) - - quotas, apiErr := cmd.spaceQuotaRepo.FindByOrg(cmd.config.OrganizationFields().Guid) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("name"), T("total memory limit"), T("instance memory limit"), T("routes"), T("service instances"), T("paid service plans")}) - var megabytes string - - for _, quota := range quotas { - if quota.InstanceMemoryLimit == -1 { - megabytes = T("unlimited") - } else { - megabytes = formatters.ByteSize(quota.InstanceMemoryLimit * formatters.MEGABYTE) - } - - servicesLimit := strconv.Itoa(quota.ServicesLimit) - if servicesLimit == "-1" { - servicesLimit = T("unlimited") - } - - table.Add( - quota.Name, - formatters.ByteSize(quota.MemoryLimit*formatters.MEGABYTE), - megabytes, - fmt.Sprintf("%d", quota.RoutesLimit), - fmt.Sprintf(servicesLimit), - formatters.Allowed(quota.NonBasicServicesAllowed), - ) - } - - table.Print() - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quotas_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quotas_test.go deleted file mode 100644 index 8a2a449..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/space_quotas_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package spacequota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("quotas command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeSpaceQuotaRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - }) - - runCommand := func(args ...string) bool { - cmd := NewListSpaceQuotas(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - - It("requires the user to target an org", func() { - requirementsFactory.TargetedOrgSuccess = false - Expect(runCommand()).ToNot(HavePassedRequirements()) - }) - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - Expect(runCommand("blahblah")).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when requirements have been met", func() { - JustBeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - Expect(runCommand()).To(HavePassedRequirements()) - }) - - Context("when quotas exist", func() { - BeforeEach(func() { - quotaRepo.FindByOrgReturns([]models.SpaceQuota{ - models.SpaceQuota{ - Name: "quota-name", - MemoryLimit: 1024, - InstanceMemoryLimit: 512, - RoutesLimit: 111, - ServicesLimit: 222, - NonBasicServicesAllowed: true, - OrgGuid: "my-org-guid", - }, - models.SpaceQuota{ - Name: "quota-non-basic-not-allowed", - MemoryLimit: 434, - InstanceMemoryLimit: -1, - RoutesLimit: 1, - ServicesLimit: 2, - NonBasicServicesAllowed: false, - OrgGuid: "my-org-guid", - }, - }, nil) - }) - - It("lists quotas", func() { - Expect(quotaRepo.FindByOrgArgsForCall(0)).To(Equal("my-org-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting space quotas as", "my-user"}, - []string{"OK"}, - []string{"name", "total memory limit", "instance memory limit", "routes", "service instances", "paid service plans"}, - []string{"quota-name", "1G", "512M", "111", "222", "allowed"}, - []string{"quota-non-basic-not-allowed", "434M", "unlimited", "1", "2", "disallowed"}, - )) - }) - Context("when services are unlimited", func() { - BeforeEach(func() { - quotaRepo.FindByOrgReturns([]models.SpaceQuota{ - models.SpaceQuota{ - Name: "quota-non-basic-not-allowed", - MemoryLimit: 434, - InstanceMemoryLimit: 57, - RoutesLimit: 1, - ServicesLimit: -1, - NonBasicServicesAllowed: false, - OrgGuid: "my-org-guid", - }, - }, nil) - }) - It("replaces -1 with unlimited", func() { - Expect(quotaRepo.FindByOrgArgsForCall(0)).To(Equal("my-org-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - - []string{"quota-non-basic-not-allowed", "434M", "57M ", "1", "unlimited", "disallowed"}, - )) - }) - - }) - }) - - Context("when an error occurs fetching quotas", func() { - BeforeEach(func() { - quotaRepo.FindByOrgReturns([]models.SpaceQuota{}, errors.New("I haz a borken!")) - }) - - It("prints an error", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting space quotas as", "my-user"}, - []string{"FAILED"}, - )) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/spacequota_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/spacequota_suite_test.go deleted file mode 100644 index e22720d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/spacequota_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package spacequota_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSpacequota(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Spacequota Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/unset_space_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/unset_space_quota.go deleted file mode 100644 index 41aaced..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/unset_space_quota.go +++ /dev/null @@ -1,79 +0,0 @@ -package spacequota - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnsetSpaceQuota struct { - ui terminal.UI - config core_config.Reader - quotaRepo space_quotas.SpaceQuotaRepository - spaceRepo spaces.SpaceRepository -} - -func NewUnsetSpaceQuota(ui terminal.UI, config core_config.Reader, quotaRepo space_quotas.SpaceQuotaRepository, spaceRepo spaces.SpaceRepository) UnsetSpaceQuota { - return UnsetSpaceQuota{ - ui: ui, - config: config, - quotaRepo: quotaRepo, - spaceRepo: spaceRepo, - } -} - -func (cmd UnsetSpaceQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unset-space-quota", - Description: T("Unassign a quota from a space"), - Usage: T("CF_NAME unset-space-quota SPACE QUOTA\n\n"), - } -} - -func (cmd UnsetSpaceQuota) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - } - return -} - -func (cmd UnsetSpaceQuota) Run(c *cli.Context) { - spaceName := c.Args()[0] - quotaName := c.Args()[1] - - space, apiErr := cmd.spaceRepo.FindByName(spaceName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - quota, apiErr := cmd.quotaRepo.FindByName(quotaName) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Say(T("Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{ - "QuotaName": terminal.EntityNameColor(quota.Name), - "SpaceName": terminal.EntityNameColor(space.Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - apiErr = cmd.quotaRepo.UnassignQuotaFromSpace(space.Guid, quota.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/unset_space_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/unset_space_quota_test.go deleted file mode 100644 index ed3e1fe..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/unset_space_quota_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package spacequota_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("unset-space-quota command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeSpaceQuotaRepository - spaceRepo *testapi.FakeSpaceRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - spaceRepo = &testapi.FakeSpaceRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - runCommand := func(args ...string) bool { - cmd := NewUnsetSpaceQuota(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo, spaceRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails with usage when provided too many or two few args", func() { - runCommand("space") - Expect(ui.FailedWithUsage).To(BeTrue()) - - runCommand("space", "quota", "extra-stuff") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Describe("requirements", func() { - It("requires the user to be logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("space", "quota")).To(BeFalse()) - }) - - It("requires the user to target an org", func() { - requirementsFactory.TargetedOrgSuccess = false - - Expect(runCommand("space", "quota")).To(BeFalse()) - }) - }) - - Context("when requirements are met", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - }) - - It("unassigns a quota from a space", func() { - space := models.Space{ - SpaceFields: models.SpaceFields{ - Name: "my-space", - Guid: "my-space-guid", - }, - } - - quota := models.SpaceQuota{Name: "my-quota", Guid: "my-quota-guid"} - - quotaRepo.FindByNameReturns(quota, nil) - spaceRepo.FindByNameName = space.Name - spaceRepo.Spaces = []models.Space{space} - - runCommand("my-space", "my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Unassigning space quota", "my-quota", "my-space", "my-user"}, - []string{"OK"}, - )) - - Expect(quotaRepo.FindByNameArgsForCall(0)).To(Equal("my-quota")) - spaceGuid, quotaGuid := quotaRepo.UnassignQuotaFromSpaceArgsForCall(0) - Expect(spaceGuid).To(Equal("my-space-guid")) - Expect(quotaGuid).To(Equal("my-quota-guid")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/update_space_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/update_space_quota.go deleted file mode 100644 index 3d74bca..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/update_space_quota.go +++ /dev/null @@ -1,134 +0,0 @@ -package spacequota - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/flag_helpers" - "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UpdateSpaceQuota struct { - ui terminal.UI - config core_config.Reader - spaceQuotaRepo space_quotas.SpaceQuotaRepository -} - -func NewUpdateSpaceQuota(ui terminal.UI, config core_config.Reader, spaceQuotaRepo space_quotas.SpaceQuotaRepository) (cmd *UpdateSpaceQuota) { - return &UpdateSpaceQuota{ - ui: ui, - config: config, - spaceQuotaRepo: spaceQuotaRepo, - } -} - -func (cmd *UpdateSpaceQuota) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "update-space-quota", - Description: T("update an existing space quota"), - Usage: T("CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("i", T("Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.")), - flag_helpers.NewStringFlag("m", T("Total amount of memory a space can have (e.g. 1024M, 1G, 10G)")), - flag_helpers.NewStringFlag("n", T("New name")), - flag_helpers.NewIntFlag("r", T("Total number of routes")), - flag_helpers.NewIntFlag("s", T("Total number of service instances")), - cli.BoolFlag{Name: "allow-paid-service-plans", Usage: T("Can provision instances of paid service plans")}, - cli.BoolFlag{Name: "disallow-paid-service-plans", Usage: T("Can not provision instances of paid service plans")}, - }, - } -} - -func (cmd *UpdateSpaceQuota) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - requirementsFactory.NewTargetedOrgRequirement(), - } - return -} - -func (cmd *UpdateSpaceQuota) Run(c *cli.Context) { - name := c.Args()[0] - - spaceQuota, apiErr := cmd.spaceQuotaRepo.FindByName(name) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - allowPaidServices := c.Bool("allow-paid-service-plans") - disallowPaidServices := c.Bool("disallow-paid-service-plans") - if allowPaidServices && disallowPaidServices { - cmd.ui.Failed(T("Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.")) - } - - if allowPaidServices { - spaceQuota.NonBasicServicesAllowed = true - } - - if disallowPaidServices { - spaceQuota.NonBasicServicesAllowed = false - } - - if c.String("i") != "" { - var memory int64 - var formatError error - - memFlag := c.String("i") - - if memFlag == "-1" { - memory = -1 - } else { - memory, formatError = formatters.ToMegabytes(memFlag) - if formatError != nil { - cmd.ui.FailWithUsage(c) - } - } - - spaceQuota.InstanceMemoryLimit = memory - } - - if c.String("m") != "" { - memory, formatError := formatters.ToMegabytes(c.String("m")) - - if formatError != nil { - cmd.ui.FailWithUsage(c) - } - - spaceQuota.MemoryLimit = memory - } - - if c.String("n") != "" { - spaceQuota.Name = c.String("n") - } - - if c.IsSet("s") { - spaceQuota.ServicesLimit = c.Int("s") - } - - if c.IsSet("r") { - spaceQuota.RoutesLimit = c.Int("r") - } - - cmd.ui.Say(T("Updating space quota {{.Quota}} as {{.Username}}...", - map[string]interface{}{ - "Quota": terminal.EntityNameColor(name), - "Username": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr = cmd.spaceQuotaRepo.Update(spaceQuota) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/update_space_quota_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/update_space_quota_test.go deleted file mode 100644 index ca1e648..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/spacequota/update_space_quota_test.go +++ /dev/null @@ -1,171 +0,0 @@ -package spacequota_test - -import ( - "github.com/cloudfoundry/cli/cf/api/space_quotas/fakes" - . "github.com/cloudfoundry/cli/cf/commands/spacequota" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("update-space-quota command", func() { - var ( - ui *testterm.FakeUI - quotaRepo *fakes.FakeSpaceQuotaRepository - requirementsFactory *testreq.FakeReqFactory - - quota models.SpaceQuota - quotaPaidService models.SpaceQuota - ) - - runCommand := func(args ...string) bool { - cmd := NewUpdateSpaceQuota(ui, configuration.NewRepositoryWithDefaults(), quotaRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - quotaRepo = &fakes.FakeSpaceQuotaRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - }) - - Describe("requirements", func() { - It("fails when the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - requirementsFactory.TargetedOrgSuccess = true - Expect(runCommand("my-quota", "-m", "50G")).NotTo(HavePassedRequirements()) - }) - - It("fails when the user does not have an org targeted", func() { - requirementsFactory.TargetedOrgSuccess = false - requirementsFactory.LoginSuccess = true - Expect(runCommand()).NotTo(HavePassedRequirements()) - Expect(runCommand("my-quota", "-m", "50G")).NotTo(HavePassedRequirements()) - }) - - It("fails with usage if space quota name is not provided", func() { - requirementsFactory.TargetedOrgSuccess = true - requirementsFactory.LoginSuccess = true - runCommand() - - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - quota = models.SpaceQuota{ - Guid: "my-quota-guid", - Name: "my-quota", - MemoryLimit: 1024, - InstanceMemoryLimit: 512, - RoutesLimit: 111, - ServicesLimit: 222, - NonBasicServicesAllowed: false, - OrgGuid: "my-org-guid", - } - - quotaPaidService = models.SpaceQuota{NonBasicServicesAllowed: true} - - requirementsFactory.LoginSuccess = true - requirementsFactory.TargetedOrgSuccess = true - }) - - JustBeforeEach(func() { - quotaRepo.FindByNameReturns(quota, nil) - }) - - Context("when the -m flag is provided", func() { - It("updates the memory limit", func() { - runCommand("-m", "15G", "my-quota") - Expect(quotaRepo.UpdateArgsForCall(0).Name).To(Equal("my-quota")) - Expect(quotaRepo.UpdateArgsForCall(0).MemoryLimit).To(Equal(int64(15360))) - }) - - It("alerts the user when parsing the memory limit fails", func() { - runCommand("-m", "whoops", "wit mah hussle", "my-org") - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when the -i flag is provided", func() { - It("sets the memory limit", func() { - runCommand("-i", "50G", "my-quota") - Expect(quotaRepo.UpdateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(51200))) - }) - - It("sets the memory limit to -1", func() { - runCommand("-i", "-1", "my-quota") - Expect(quotaRepo.UpdateArgsForCall(0).InstanceMemoryLimit).To(Equal(int64(-1))) - }) - - It("alerts the user when parsing the memory limit fails", func() { - runCommand("-i", "whoops", "my-quota") - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - }) - }) - - Context("when the -r flag is provided", func() { - It("sets the route limit", func() { - runCommand("-r", "12", "ecstatic") - Expect(quotaRepo.UpdateArgsForCall(0).RoutesLimit).To(Equal(12)) - }) - }) - - Context("when the -s flag is provided", func() { - It("sets the service instance limit", func() { - runCommand("-s", "42", "my-quota") - Expect(quotaRepo.UpdateArgsForCall(0).ServicesLimit).To(Equal(42)) - }) - }) - - Context("when the -n flag is provided", func() { - It("sets the service instance name", func() { - runCommand("-n", "foo", "my-quota") - Expect(quotaRepo.UpdateArgsForCall(0).Name).To(Equal("foo")) - }) - }) - - Context("when --allow-non-basic-services is provided", func() { - It("updates the quota to allow paid service plans", func() { - runCommand("--allow-paid-service-plans", "my-for-profit-quota") - Expect(quotaRepo.UpdateArgsForCall(0).NonBasicServicesAllowed).To(BeTrue()) - }) - }) - - Context("when --disallow-non-basic-services is provided", func() { - It("updates the quota to disallow paid service plans", func() { - quotaRepo.FindByNameReturns(quotaPaidService, nil) - - runCommand("--disallow-paid-service-plans", "my-for-profit-quota") - Expect(quotaRepo.UpdateArgsForCall(0).NonBasicServicesAllowed).To(BeFalse()) - }) - }) - - Context("when updating a quota returns an error", func() { - It("alerts the user when creating the quota fails", func() { - quotaRepo.UpdateReturns(errors.New("WHOOP THERE IT IS")) - runCommand("my-quota") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Updating space quota", "my-quota", "my-user"}, - []string{"FAILED"}, - )) - }) - - It("fails if the allow and disallow flag are both passed", func() { - runCommand("--disallow-paid-service-plans", "--allow-paid-service-plans", "my-for-profit-quota") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stack.go deleted file mode 100644 index 54652a3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stack.go +++ /dev/null @@ -1,73 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/api/stacks" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListStack struct { - ui terminal.UI - config core_config.Reader - stacksRepo stacks.StackRepository -} - -func NewListStack(ui terminal.UI, config core_config.Reader, stacksRepo stacks.StackRepository) (cmd ListStack) { - cmd.ui = ui - cmd.config = config - cmd.stacksRepo = stacksRepo - return -} - -func (cmd ListStack) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "stack", - Description: T("Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)"), - Usage: T("CF_NAME stack STACK_NAME"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given stack's guid. All other output for the stack is suppressed.")}, - }, - TotalArgs: 1, - } -} - -func (cmd ListStack) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - return -} - -func (cmd ListStack) Run(c *cli.Context) { - stackName := c.Args()[0] - - stack, apiErr := cmd.stacksRepo.FindByName(stackName) - - if c.Bool("guid") { - cmd.ui.Say(stack.Guid) - } else { - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Say(T("Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{"Stack": stackName, - "OrganizationName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("name"), T("description")}) - table.Add(stack.Name, stack.Description) - table.Print() - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stack_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stack_test.go deleted file mode 100644 index 1be8cf8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stack_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package commands_test - -import ( - "errors" - - testapi "github.com/cloudfoundry/cli/cf/api/stacks/fakes" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/cf/commands" - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("stack command", func() { - var ( - ui *testterm.FakeUI - cmd ListStack - repo *testapi.FakeStackRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config := testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - repo = &testapi.FakeStackRepository{} - cmd = NewListStack(ui, config, repo) - }) - - Describe("login requirements", func() { - It("fails if the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(testcmd.RunCommand(cmd, []string{}, requirementsFactory)).To(BeFalse()) - }) - - It("fails with usage when not provided exactly one arg", func() { - requirementsFactory.LoginSuccess = true - Expect(testcmd.RunCommand(cmd, []string{}, requirementsFactory)).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Incorrect Usage."}, - )) - }) - }) - - It("returns the stack guid when '--guid' flag is provided", func() { - stack1 := models.Stack{ - Name: "Stack-1", - Description: "Stack 1 Description", - Guid: "Stack-1-GUID", - } - - repo.FindByNameReturns(stack1, nil) - - testcmd.RunCommand(cmd, []string{"Stack-1", "--guid"}, requirementsFactory) - - Expect(len(ui.Outputs)).To(Equal(1)) - Expect(ui.Outputs[0]).To(Equal("Stack-1-GUID")) - }) - - It("returns the empty string as guid when '--guid' flag is provided and stack doesn't exist", func() { - stack1 := models.Stack{ - Name: "Stack-1", - Description: "Stack 1 Description", - Guid: "Stack-1-GUID", - } - - repo.FindByNameReturns(stack1, nil) - - testcmd.RunCommand(cmd, []string{"Stack-1", "--guid"}, requirementsFactory) - - Expect(len(ui.Outputs)).To(Equal(1)) - Expect(ui.Outputs[0]).To(Equal("Stack-1-GUID")) - }) - - It("lists the stack requested", func() { - repo.FindByNameReturns(models.Stack{}, errors.New("Stack Stack-1 not found")) - - testcmd.RunCommand(cmd, []string{"Stack-1", "--guid"}, requirementsFactory) - - Expect(len(ui.Outputs)).To(Equal(1)) - Expect(ui.Outputs[0]).To(Equal("")) - }) - - It("informs user if stack is not found", func() { - repo.FindByNameReturns(models.Stack{}, errors.New("Stack Stack-1 not found")) - - testcmd.RunCommand(cmd, []string{"Stack-1"}, requirementsFactory) - - Expect(ui.Outputs).To(BeInDisplayOrder( - []string{"FAILED"}, - []string{"Stack Stack-1 not found"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stacks.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stacks.go deleted file mode 100644 index 8e76a7f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stacks.go +++ /dev/null @@ -1,65 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/api/stacks" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type ListStacks struct { - ui terminal.UI - config core_config.Reader - stacksRepo stacks.StackRepository -} - -func NewListStacks(ui terminal.UI, config core_config.Reader, stacksRepo stacks.StackRepository) (cmd ListStacks) { - cmd.ui = ui - cmd.config = config - cmd.stacksRepo = stacksRepo - return -} - -func (cmd ListStacks) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "stacks", - Description: T("List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)"), - Usage: T("CF_NAME stacks"), - } -} - -func (cmd ListStacks) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - return -} - -func (cmd ListStacks) Run(c *cli.Context) { - cmd.ui.Say(T("Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - map[string]interface{}{"OrganizationName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), - "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), - "Username": terminal.EntityNameColor(cmd.config.Username())})) - - stacks, apiErr := cmd.stacksRepo.FindAll() - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() - cmd.ui.Say("") - - table := terminal.NewTable(cmd.ui, []string{T("name"), T("description")}) - - for _, stack := range stacks { - table.Add(stack.Name, stack.Description) - } - - table.Print() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stacks_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stacks_test.go deleted file mode 100644 index 3b93367..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/stacks_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package commands_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/stacks/fakes" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("stacks command", func() { - var ( - ui *testterm.FakeUI - cmd ListStacks - repo *testapi.FakeStackRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - config := testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - repo = &testapi.FakeStackRepository{} - cmd = NewListStacks(ui, config, repo) - }) - - Describe("login requirements", func() { - It("fails if the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(testcmd.RunCommand(cmd, []string{}, requirementsFactory)).To(BeFalse()) - }) - - It("should fail with usage when provided any arguments", func() { - requirementsFactory.LoginSuccess = true - Expect(testcmd.RunCommand(cmd, []string{"etcetc"}, requirementsFactory)).To(BeFalse()) - Expect(ui.FailedWithUsage).To(BeTrue()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Incorrect Usage."}, - )) - }) - }) - - It("lists the stacks", func() { - stack1 := models.Stack{ - Name: "Stack-1", - Description: "Stack 1 Description", - } - stack2 := models.Stack{ - Name: "Stack-2", - Description: "Stack 2 Description", - } - - repo.FindAllReturns([]models.Stack{stack1, stack2}, nil) - testcmd.RunCommand(cmd, []string{}, requirementsFactory) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting stacks in org", "my-org", "my-space", "my-user"}, - []string{"OK"}, - []string{"Stack-1", "Stack 1 Description"}, - []string{"Stack-2", "Stack 2 Description"}, - )) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/target.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/target.go deleted file mode 100644 index 45e438d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/target.go +++ /dev/null @@ -1,137 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/flag_helpers" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/utils" - "github.com/codegangsta/cli" -) - -type Target struct { - ui terminal.UI - config core_config.ReadWriter - orgRepo organizations.OrganizationRepository - spaceRepo spaces.SpaceRepository -} - -func NewTarget(ui terminal.UI, - config core_config.ReadWriter, - orgRepo organizations.OrganizationRepository, - spaceRepo spaces.SpaceRepository) (cmd Target) { - - cmd.ui = ui - cmd.config = config - cmd.orgRepo = orgRepo - cmd.spaceRepo = spaceRepo - - return -} - -func (cmd Target) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "target", - ShortName: "t", - Description: T("Set or view the targeted org or space"), - Usage: T("CF_NAME target [-o ORG] [-s SPACE]"), - Flags: []cli.Flag{ - flag_helpers.NewStringFlag("o", T("organization")), - flag_helpers.NewStringFlag("s", T("space")), - }, - } -} - -func (cmd Target) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 0 { - err = errors.New(T("incorrect usage")) - cmd.ui.FailWithUsage(c) - return - } - - reqs = append(reqs, requirementsFactory.NewApiEndpointRequirement()) - if c.String("o") != "" || c.String("s") != "" { - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - } - - return -} - -func (cmd Target) Run(c *cli.Context) { - orgName := c.String("o") - spaceName := c.String("s") - - if orgName != "" { - err := cmd.setOrganization(orgName) - if err != nil { - cmd.ui.Failed(err.Error()) - } else if spaceName == "" { - spaceList, apiErr := cmd.getSpaceList() - if apiErr == nil && len(spaceList) == 1 { - cmd.setSpace(spaceList[0].Name) - } - } - } - - if spaceName != "" { - err := cmd.setSpace(spaceName) - if err != nil { - cmd.ui.Failed(err.Error()) - } - } - - cmd.ui.ShowConfiguration(cmd.config) - if !cmd.config.IsLoggedIn() { - cmd.ui.PanicQuietly() - } - utils.NotifyUpdateIfNeeded(cmd.ui, cmd.config) - return -} - -func (cmd Target) setOrganization(orgName string) error { - // setting an org necessarily invalidates any space you had previously targeted - cmd.config.SetOrganizationFields(models.OrganizationFields{}) - cmd.config.SetSpaceFields(models.SpaceFields{}) - - org, apiErr := cmd.orgRepo.FindByName(orgName) - if apiErr != nil { - return errors.NewWithFmt(T("Could not target org.\n{{.ApiErr}}", - map[string]interface{}{"ApiErr": apiErr.Error()})) - } - - cmd.config.SetOrganizationFields(org.OrganizationFields) - return nil -} - -func (cmd Target) setSpace(spaceName string) error { - cmd.config.SetSpaceFields(models.SpaceFields{}) - - if !cmd.config.HasOrganization() { - return errors.New(T("An org must be targeted before targeting a space")) - } - - space, apiErr := cmd.spaceRepo.FindByName(spaceName) - if apiErr != nil { - return errors.NewWithFmt(T("Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - map[string]interface{}{"SpaceName": spaceName, "ApiErr": apiErr.Error()})) - } - - cmd.config.SetSpaceFields(space.SpaceFields) - return nil -} - -func (cmd Target) getSpaceList() ([]models.Space, error) { - spaceList := []models.Space{} - apiErr := cmd.spaceRepo.ListSpaces( - func(space models.Space) bool { - spaceList = append(spaceList, space) - return true - }) - return spaceList, apiErr -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/target_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/target_test.go deleted file mode 100644 index b542448..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/target_test.go +++ /dev/null @@ -1,299 +0,0 @@ -package commands_test - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf" - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - fake_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - . "github.com/cloudfoundry/cli/cf/commands" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("target command", func() { - var ( - orgRepo *fake_org.FakeOrganizationRepository - spaceRepo *testapi.FakeSpaceRepository - requirementsFactory *testreq.FakeReqFactory - config core_config.ReadWriter - ui *testterm.FakeUI - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - orgRepo = new(fake_org.FakeOrganizationRepository) - spaceRepo = new(testapi.FakeSpaceRepository) - requirementsFactory = new(testreq.FakeReqFactory) - config = testconfig.NewRepositoryWithDefaults() - requirementsFactory.ApiEndpointSuccess = true - }) - - var callTarget = func(args []string) bool { - cmd := NewTarget(ui, config, orgRepo, spaceRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("fails with usage when called with an argument but no flags", func() { - callTarget([]string{"some-argument"}) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Describe("when there is no api endpoint set", func() { - BeforeEach(func() { - requirementsFactory.ApiEndpointSuccess = false - }) - - It("fails requirements", func() { - Expect(callTarget([]string{})).To(BeFalse()) - }) - }) - - Describe("when the user is not logged in", func() { - BeforeEach(func() { - config.SetAccessToken("") - }) - - It("prints the target info when no org or space is specified", func() { - Expect(callTarget([]string{})).To(BeTrue()) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("panics silently so that it returns an exit code of 1", func() { - callTarget([]string{}) - Expect(ui.PanickedQuietly).To(BeTrue()) - }) - - It("fails requirements when targeting a space or org", func() { - Expect(callTarget([]string{"-o", "some-crazy-org-im-not-in"})).To(BeFalse()) - - Expect(callTarget([]string{"-s", "i-love-space"})).To(BeFalse()) - }) - }) - - Context("when the user is logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - }) - - var expectOrgToBeCleared = func() { - Expect(config.OrganizationFields()).To(Equal(models.OrganizationFields{})) - } - - var expectSpaceToBeCleared = func() { - Expect(config.SpaceFields()).To(Equal(models.SpaceFields{})) - } - - Context("there are no errors", func() { - BeforeEach(func() { - org := models.Organization{} - org.Name = "my-organization" - org.Guid = "my-organization-guid" - - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - orgRepo.FindByNameReturns(org, nil) - }) - - It("it updates the organization in the config", func() { - callTarget([]string{"-o", "my-organization"}) - - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-organization")) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - - Expect(config.OrganizationFields().Guid).To(Equal("my-organization-guid")) - }) - - It("updates the space in the config", func() { - space := models.Space{} - space.Name = "my-space" - space.Guid = "my-space-guid" - - spaceRepo.Spaces = []models.Space{space} - spaceRepo.FindByNameSpace = space - - callTarget([]string{"-s", "my-space"}) - - Expect(spaceRepo.FindByNameName).To(Equal("my-space")) - Expect(config.SpaceFields().Guid).To(Equal("my-space-guid")) - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("updates both the organization and the space in the config", func() { - space := models.Space{} - space.Name = "my-space" - space.Guid = "my-space-guid" - spaceRepo.Spaces = []models.Space{space} - - callTarget([]string{"-o", "my-organization", "-s", "my-space"}) - - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-organization")) - Expect(config.OrganizationFields().Guid).To(Equal("my-organization-guid")) - - Expect(spaceRepo.FindByNameName).To(Equal("my-space")) - Expect(config.SpaceFields().Guid).To(Equal("my-space-guid")) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("only updates the organization in the config when the space can't be found", func() { - config.SetSpaceFields(models.SpaceFields{}) - - spaceRepo.FindByNameErr = true - - callTarget([]string{"-o", "my-organization", "-s", "my-space"}) - - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-organization")) - Expect(config.OrganizationFields().Guid).To(Equal("my-organization-guid")) - - Expect(spaceRepo.FindByNameName).To(Equal("my-space")) - Expect(config.SpaceFields().Guid).To(Equal("")) - - Expect(ui.ShowConfigurationCalled).To(BeFalse()) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Unable to access space", "my-space"}, - )) - }) - - Describe("when there is only a single space", func() { - It("target space automatically ", func() { - space := models.Space{} - space.Name = "my-space" - space.Guid = "my-space-guid" - spaceRepo.Spaces = []models.Space{space} - - callTarget([]string{"-o", "my-organization"}) - - Expect(config.OrganizationFields().Guid).To(Equal("my-organization-guid")) - Expect(config.SpaceFields().Guid).To(Equal("my-space-guid")) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - }) - - It("not target space automatically for orgs having multiple spaces", func() { - space1 := models.Space{} - space1.Name = "my-space" - space1.Guid = "my-space-guid" - space2 := models.Space{} - space2.Name = "my-space" - space2.Guid = "my-space-guid" - spaceRepo.Spaces = []models.Space{space1, space2} - - callTarget([]string{"-o", "my-organization"}) - - Expect(config.OrganizationFields().Guid).To(Equal("my-organization-guid")) - Expect(config.SpaceFields().Guid).To(Equal("")) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - - It("prompts users to upgrade if CLI version < min cli version requirement", func() { - config.SetMinCliVersion("5.0.0") - config.SetMinRecommendedCliVersion("5.5.0") - cf.Version = "4.5.0" - - callTarget([]string{"-o", "my-organization"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"To upgrade your CLI"}, - []string{"5.0.0"}, - )) - }) - }) - - Context("there are errors", func() { - It("fails when the user does not have access to the specified organization", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.New("Invalid access")) - - callTarget([]string{"-o", "my-organization"}) - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - expectOrgToBeCleared() - expectSpaceToBeCleared() - }) - - It("fails when the organization is not found", func() { - orgRepo.FindByNameReturns(models.Organization{}, errors.New("my-organization not found")) - - callTarget([]string{"-o", "my-organization"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"my-organization", "not found"}, - )) - - expectOrgToBeCleared() - expectSpaceToBeCleared() - }) - - It("fails to target a space if no organization is targeted", func() { - config.SetOrganizationFields(models.OrganizationFields{}) - - callTarget([]string{"-s", "my-space"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"An org must be targeted before targeting a space"}, - )) - - expectSpaceToBeCleared() - }) - - It("fails when the user doesn't have access to the space", func() { - spaceRepo.FindByNameErr = true - - callTarget([]string{"-s", "my-space"}) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"Unable to access space", "my-space"}, - )) - - Expect(config.SpaceFields().Guid).To(Equal("")) - Expect(ui.ShowConfigurationCalled).To(BeFalse()) - - Expect(config.OrganizationFields().Guid).NotTo(BeEmpty()) - expectSpaceToBeCleared() - }) - - It("fails when the space is not found", func() { - spaceRepo.FindByNameNotFound = true - - callTarget([]string{"-s", "my-space"}) - - expectSpaceToBeCleared() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"my-space", "not found"}, - )) - }) - It("fails to target the space automatically if is not found", func() { - org := models.Organization{} - org.Name = "my-organization" - org.Guid = "my-organization-guid" - - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - orgRepo.FindByNameReturns(org, nil) - - spaceRepo.FindByNameNotFound = true - - callTarget([]string{"-o", "my-organization"}) - - Expect(config.OrganizationFields().Guid).To(Equal("my-organization-guid")) - Expect(config.SpaceFields().Guid).To(Equal("")) - - Expect(ui.ShowConfigurationCalled).To(BeTrue()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/create_user.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/create_user.go deleted file mode 100644 index 6220d87..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/create_user.go +++ /dev/null @@ -1,71 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type CreateUser struct { - ui terminal.UI - config core_config.Reader - userRepo api.UserRepository -} - -func NewCreateUser(ui terminal.UI, config core_config.Reader, userRepo api.UserRepository) (cmd CreateUser) { - cmd.ui = ui - cmd.config = config - cmd.userRepo = userRepo - return -} - -func (cmd CreateUser) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "create-user", - Description: T("Create a new user"), - Usage: T("CF_NAME create-user USERNAME PASSWORD"), - } -} - -func (cmd CreateUser) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 2 { - cmd.ui.FailWithUsage(c) - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - - return -} - -func (cmd CreateUser) Run(c *cli.Context) { - username := c.Args()[0] - password := c.Args()[1] - - cmd.ui.Say(T("Creating user {{.TargetUser}}...", - map[string]interface{}{ - "TargetUser": terminal.EntityNameColor(username), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - err := cmd.userRepo.Create(username, password) - switch err.(type) { - case nil: - case *errors.ModelAlreadyExistsError: - cmd.ui.Warn("%s", err.Error()) - default: - cmd.ui.Failed(T("Error creating user {{.TargetUser}}.\n{{.Error}}", - map[string]interface{}{ - "TargetUser": terminal.EntityNameColor(username), - "Error": err.Error(), - })) - } - - cmd.ui.Ok() - cmd.ui.Say(T("\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", map[string]interface{}{"CurrentUser": cf.Name()})) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/create_user_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/create_user_test.go deleted file mode 100644 index 10bf39f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/create_user_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("Create user command", func() { - var ( - requirementsFactory *testreq.FakeReqFactory - ui *testterm.FakeUI - userRepo *testapi.FakeUserRepository - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - ui = new(testterm.FakeUI) - userRepo = &testapi.FakeUserRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - accessToken, _ := testconfig.EncodeAccessToken(core_config.TokenInfo{ - Username: "current-user", - }) - configRepo.SetAccessToken(accessToken) - }) - - runCommand := func(args ...string) bool { - cmd := NewCreateUser(ui, configRepo, userRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - It("creates a user", func() { - runCommand("my-user", "my-password") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Creating user", "my-user"}, - []string{"OK"}, - []string{"TIP"}, - )) - - Expect(userRepo.CreateUserUsername).To(Equal("my-user")) - }) - - Context("when creating the user returns an error", func() { - It("prints a warning when the given user already exists", func() { - userRepo.CreateUserExists = true - - runCommand("my-user", "my-password") - - Expect(ui.WarnOutputs).To(ContainSubstrings( - []string{"already exists"}, - )) - - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"FAILED"})) - }) - It("fails when any error other than alreadyExists is returned", func() { - userRepo.CreateUserReturnsHttpError = true - - runCommand("my-user", "my-password") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Forbidden"}, - )) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) - - }) - }) - - It("fails when no arguments are passed", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails when the user is not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("my-user", "my-password")).To(BeFalse()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/delete_user.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/delete_user.go deleted file mode 100644 index baf6dd2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/delete_user.go +++ /dev/null @@ -1,83 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type DeleteUser struct { - ui terminal.UI - config core_config.Reader - userRepo api.UserRepository -} - -func NewDeleteUser(ui terminal.UI, config core_config.Reader, userRepo api.UserRepository) (cmd DeleteUser) { - cmd.ui = ui - cmd.config = config - cmd.userRepo = userRepo - return -} - -func (cmd DeleteUser) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "delete-user", - Description: T("Delete a user"), - Usage: T("CF_NAME delete-user USERNAME [-f]"), - Flags: []cli.Flag{ - cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, - }, - } -} - -func (cmd DeleteUser) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 1 { - err = errors.New(T("Invalid usage")) - cmd.ui.FailWithUsage(c) - return - } - - reqs = append(reqs, requirementsFactory.NewLoginRequirement()) - - return -} - -func (cmd DeleteUser) Run(c *cli.Context) { - username := c.Args()[0] - force := c.Bool("f") - - if !force && !cmd.ui.ConfirmDelete(T("user"), username) { - return - } - - cmd.ui.Say(T("Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - map[string]interface{}{ - "TargetUser": terminal.EntityNameColor(username), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - user, apiErr := cmd.userRepo.FindByUsername(username) - switch apiErr.(type) { - case nil: - case *errors.ModelNotFoundError: - cmd.ui.Ok() - cmd.ui.Warn(T("User {{.TargetUser}} does not exist.", map[string]interface{}{"TargetUser": username})) - return - default: - cmd.ui.Failed(apiErr.Error()) - return - } - - apiErr = cmd.userRepo.Delete(user.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/delete_user_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/delete_user_test.go deleted file mode 100644 index b2cde41..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/delete_user_test.go +++ /dev/null @@ -1,122 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("delete-user command", func() { - var ( - ui *testterm.FakeUI - configRepo core_config.ReadWriter - userRepo *testapi.FakeUserRepository - requirementsFactory *testreq.FakeReqFactory - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{Inputs: []string{"y"}} - userRepo = &testapi.FakeUserRepository{} - requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} - configRepo = testconfig.NewRepositoryWithDefaults() - - token, err := testconfig.EncodeAccessToken(core_config.TokenInfo{ - UserGuid: "admin-user-guid", - Username: "admin-user", - }) - Expect(err).ToNot(HaveOccurred()) - configRepo.SetAccessToken(token) - }) - - runCommand := func(args ...string) bool { - cmd := NewDeleteUser(ui, configRepo, userRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("my-user")).To(BeFalse()) - }) - - It("fails with usage when no arguments are given", func() { - runCommand() - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when the given user exists", func() { - BeforeEach(func() { - userRepo.FindByUsernameUserFields = models.UserFields{ - Username: "user-name", - Guid: "user-guid", - } - }) - - It("deletes a user with the given name", func() { - runCommand("user-name") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete the user user-name"})) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting user", "user-name", "admin-user"}, - []string{"OK"}, - )) - - Expect(userRepo.FindByUsernameUsername).To(Equal("user-name")) - Expect(userRepo.DeleteUserGuid).To(Equal("user-guid")) - }) - - It("does not delete the user when no confirmation is given", func() { - ui.Inputs = []string{"nope"} - runCommand("user") - - Expect(ui.Prompts).To(ContainSubstrings([]string{"Really delete"})) - Expect(userRepo.FindByUsernameUsername).To(Equal("")) - Expect(userRepo.DeleteUserGuid).To(Equal("")) - }) - - It("deletes without confirmation when the -f flag is given", func() { - ui.Inputs = []string{} - runCommand("-f", "user-name") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting user", "user-name"}, - []string{"OK"}, - )) - - Expect(userRepo.FindByUsernameUsername).To(Equal("user-name")) - Expect(userRepo.DeleteUserGuid).To(Equal("user-guid")) - }) - }) - - Context("when the given user does not exist", func() { - BeforeEach(func() { - userRepo.FindByUsernameNotFound = true - }) - - It("prints a warning", func() { - runCommand("-f", "user-name") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Deleting user", "user-name"}, - []string{"OK"}, - )) - - Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"user-name", "does not exist"})) - - Expect(userRepo.FindByUsernameUsername).To(Equal("user-name")) - Expect(userRepo.DeleteUserGuid).To(Equal("")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/org_users.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/org_users.go deleted file mode 100644 index 253b276..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/org_users.go +++ /dev/null @@ -1,147 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" - "github.com/cloudfoundry/cli/plugin/models" -) - -var orgRoles = []string{models.ORG_MANAGER, models.BILLING_MANAGER, models.ORG_AUDITOR} - -type OrgUsers struct { - ui terminal.UI - config core_config.Reader - orgReq requirements.OrganizationRequirement - userRepo api.UserRepository - pluginModel *[]plugin_models.GetOrgUsers_Model - pluginCall bool -} - -func init() { - command_registry.Register(&OrgUsers{}) -} - -func NewOrgUsers(ui terminal.UI, config core_config.Reader, userRepo api.UserRepository) (cmd *OrgUsers) { - cmd = &OrgUsers{} - cmd.ui = ui - cmd.config = config - cmd.userRepo = userRepo - return -} - -func (cmd *OrgUsers) MetaData() command_registry.CommandMetadata { - fs := make(map[string]flags.FlagSet) - fs["a"] = &cliFlags.BoolFlag{Name: "a", Usage: T("List all users in the org")} - - return command_registry.CommandMetadata{ - Name: "org-users", - Description: T("Show org users by role"), - Usage: T("CF_NAME org-users ORG"), - Flags: fs, - } -} - -func (cmd *OrgUsers) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 1 { - cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("org-users")) - } - - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - return -} - -func (cmd *OrgUsers) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.userRepo = deps.RepoLocator.GetUserRepository() - cmd.pluginCall = pluginCall - cmd.pluginModel = deps.PluginModels.OrgUsers - return cmd -} - -func (cmd *OrgUsers) Execute(c flags.FlagContext) { - org := cmd.orgReq.GetOrganization() - all := c.Bool("a") - - cmd.ui.Say(T("Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - map[string]interface{}{ - "TargetOrg": terminal.EntityNameColor(org.Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - roles := orgRoles - if all { - roles = []string{models.ORG_USER} - } - - var orgRoleToDisplayName = map[string]string{ - models.ORG_USER: T("USERS"), - models.ORG_MANAGER: T("ORG MANAGER"), - models.BILLING_MANAGER: T("BILLING MANAGER"), - models.ORG_AUDITOR: T("ORG AUDITOR"), - } - - var usersMap = make(map[string]plugin_models.GetOrgUsers_Model) - var users []models.UserFields - var apiErr error - - for _, role := range roles { - displayName := orgRoleToDisplayName[role] - - if cmd.config.IsMinApiVersion("2.21.0") { - users, apiErr = cmd.userRepo.ListUsersInOrgForRoleWithNoUAA(org.Guid, role) - } else { - users, apiErr = cmd.userRepo.ListUsersInOrgForRole(org.Guid, role) - } - - cmd.ui.Say("") - cmd.ui.Say("%s", terminal.HeaderColor(displayName)) - - for _, user := range users { - cmd.ui.Say(" %s", user.Username) - - if cmd.pluginCall { - u, found := usersMap[user.Username] - if !found { - u = plugin_models.GetOrgUsers_Model{} - u.Username = user.Username - u.Guid = user.Guid - u.IsAdmin = user.IsAdmin - u.Roles = make([]string, 1) - u.Roles[0] = role - usersMap[user.Username] = u - } else { - u.Roles = append(u.Roles, role) - usersMap[user.Username] = u - } - } - } - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - map[string]interface{}{ - "Error": apiErr.Error(), - "OrgRoleToDisplayName": displayName, - })) - return - } - } - - if cmd.pluginCall { - for _, v := range usersMap { - *(cmd.pluginModel) = append(*(cmd.pluginModel), v) - } - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/org_users_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/org_users_test.go deleted file mode 100644 index 2e89903..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/org_users_test.go +++ /dev/null @@ -1,330 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("org-users command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - configRepo core_config.Repository - userRepo *testapi.FakeUserRepository - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetUserRepository(userRepo) - - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("org-users").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - userRepo = &testapi.FakeUserRepository{} - configRepo = testconfig.NewRepositoryWithDefaults() - requirementsFactory = &testreq.FakeReqFactory{} - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("org-users") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails with usage when invoked without an org name", func() { - requirementsFactory.LoginSuccess = true - runCommand() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "Requires an argument"}, - )) - }) - - It("fails when not logged in", func() { - Expect(runCommand("say-hello-to-my-little-org")).To(BeFalse()) - }) - }) - - Context("when logged in and given an org with users", func() { - BeforeEach(func() { - org := models.Organization{} - org.Name = "the-org" - org.Guid = "the-org-guid" - - user := models.UserFields{} - user.Username = "user1" - user2 := models.UserFields{} - user2.Username = "user2" - user3 := models.UserFields{} - user3.Username = "user3" - user4 := models.UserFields{} - user4.Username = "user4" - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.ORG_MANAGER: []models.UserFields{user, user2}, - models.BILLING_MANAGER: []models.UserFields{user4}, - models.ORG_AUDITOR: []models.UserFields{user3}, - } - - requirementsFactory.LoginSuccess = true - requirementsFactory.Organization = org - updateCommandDependency(false) - }) - - It("shows the special users in the given org", func() { - runCommand("the-org") - - Expect(userRepo.ListUsersOrganizationGuid).To(Equal("the-org-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting users in org", "the-org", "my-user"}, - []string{"ORG MANAGER"}, - []string{"user1"}, - []string{"user2"}, - []string{"BILLING MANAGER"}, - []string{"user4"}, - []string{"ORG AUDITOR"}, - []string{"user3"}, - )) - }) - - Context("when the -a flag is provided", func() { - BeforeEach(func() { - user := models.UserFields{} - user.Username = "user1" - user2 := models.UserFields{} - user2.Username = "user2" - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.ORG_USER: []models.UserFields{user, user2}, - } - }) - - It("lists all org users, regardless of role", func() { - runCommand("-a", "the-org") - - Expect(userRepo.ListUsersOrganizationGuid).To(Equal("the-org-guid")) - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting users in org", "the-org", "my-user"}, - []string{"USERS"}, - []string{"user1"}, - []string{"user2"}, - )) - }) - }) - - Context("when cc api verson is >= 2.21.0", func() { - BeforeEach(func() { - userRepo.ListUsersInOrgForRole_CallCount = 0 - userRepo.ListUsersInOrgForRoleWithNoUAA_CallCount = 0 - }) - - It("calls ListUsersInOrgForRoleWithNoUAA()", func() { - configRepo.SetApiVersion("2.22.0") - runCommand("the-org") - - Expect(userRepo.ListUsersInOrgForRoleWithNoUAA_CallCount).To(BeNumerically(">=", 1)) - Expect(userRepo.ListUsersInOrgForRole_CallCount).To(Equal(0)) - }) - }) - - Context("when cc api verson is < 2.21.0", func() { - It("calls ListUsersInOrgForRole()", func() { - configRepo.SetApiVersion("2.20.0") - runCommand("the-org") - - Expect(userRepo.ListUsersInOrgForRoleWithNoUAA_CallCount).To(Equal(0)) - Expect(userRepo.ListUsersInOrgForRole_CallCount).To(BeNumerically(">=", 1)) - }) - }) - }) - - Describe("when invoked by a plugin", func() { - var ( - pluginUserModel []plugin_models.GetOrgUsers_Model - ) - - Context("single roles", func() { - - BeforeEach(func() { - org := models.Organization{} - org.Name = "the-org" - org.Guid = "the-org-guid" - - // org managers - user := models.UserFields{} - user.Username = "user1" - user.Guid = "1111" - - user2 := models.UserFields{} - user2.Username = "user2" - user2.Guid = "2222" - - // billing manager - user3 := models.UserFields{} - user3.Username = "user3" - user3.Guid = "3333" - - // auditors - user4 := models.UserFields{} - user4.Username = "user4" - user4.Guid = "4444" - - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.ORG_MANAGER: []models.UserFields{user, user2}, - models.BILLING_MANAGER: []models.UserFields{user4}, - models.ORG_AUDITOR: []models.UserFields{user3}, - models.ORG_USER: []models.UserFields{user3}, - } - - requirementsFactory.LoginSuccess = true - requirementsFactory.Organization = org - pluginUserModel = []plugin_models.GetOrgUsers_Model{} - deps.PluginModels.OrgUsers = &pluginUserModel - updateCommandDependency(true) - }) - - It("populates the plugin model with users with single roles", func() { - runCommand("the-org") - Ω(pluginUserModel).To(HaveLen(4)) - - for _, u := range pluginUserModel { - switch u.Username { - case "user1": - Ω(u.Guid).To(Equal("1111")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_MANAGER})) - case "user2": - Ω(u.Guid).To(Equal("2222")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_MANAGER})) - case "user3": - Ω(u.Guid).To(Equal("3333")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_AUDITOR})) - case "user4": - Ω(u.Guid).To(Equal("4444")) - Ω(u.Roles).To(ConsistOf([]string{models.BILLING_MANAGER})) - default: - Fail("unexpected user: " + u.Username) - } - } - - }) - - It("populates the plugin model with users with single roles -a flag", func() { - runCommand("-a", "the-org") - Ω(pluginUserModel).To(HaveLen(1)) - Ω(pluginUserModel[0].Username).To(Equal("user3")) - Ω(pluginUserModel[0].Guid).To(Equal("3333")) - Ω(pluginUserModel[0].Roles[0]).To(Equal(models.ORG_USER)) - }) - - }) - - Context("multiple roles", func() { - - BeforeEach(func() { - org := models.Organization{} - org.Name = "the-org" - org.Guid = "the-org-guid" - - // org managers - user := models.UserFields{} - user.Username = "user1" - user.Guid = "1111" - user.IsAdmin = true - - user2 := models.UserFields{} - user2.Username = "user2" - user2.Guid = "2222" - - // billing manager - user3 := models.UserFields{} - user3.Username = "user3" - user3.Guid = "3333" - - // auditors - user4 := models.UserFields{} - user4.Username = "user4" - user4.Guid = "4444" - - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.ORG_MANAGER: []models.UserFields{user, user2, user3, user4}, - models.BILLING_MANAGER: []models.UserFields{user2, user4}, - models.ORG_AUDITOR: []models.UserFields{user, user3}, - models.ORG_USER: []models.UserFields{user, user2, user3, user4}, - } - - requirementsFactory.LoginSuccess = true - requirementsFactory.Organization = org - pluginUserModel = []plugin_models.GetOrgUsers_Model{} - deps.PluginModels.OrgUsers = &pluginUserModel - updateCommandDependency(true) - }) - - It("populates the plugin model with users with multiple roles", func() { - runCommand("the-org") - - Ω(pluginUserModel).To(HaveLen(4)) - for _, u := range pluginUserModel { - switch u.Username { - case "user1": - Ω(u.Guid).To(Equal("1111")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_MANAGER, models.ORG_AUDITOR})) - Ω(u.IsAdmin).To(BeTrue()) - case "user2": - Ω(u.Guid).To(Equal("2222")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_MANAGER, models.BILLING_MANAGER})) - case "user3": - Ω(u.Guid).To(Equal("3333")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_AUDITOR, models.ORG_MANAGER})) - case "user4": - Ω(u.Guid).To(Equal("4444")) - Ω(u.Roles).To(ConsistOf([]string{models.BILLING_MANAGER, models.ORG_MANAGER})) - default: - Fail("unexpected user: " + u.Username) - } - } - - }) - - It("populates the plugin model with users with multiple roles -a flag", func() { - runCommand("-a", "the-org") - - Ω(pluginUserModel).To(HaveLen(4)) - for _, u := range pluginUserModel { - switch u.Username { - case "user1": - Ω(u.Guid).To(Equal("1111")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_USER})) - case "user2": - Ω(u.Guid).To(Equal("2222")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_USER})) - case "user3": - Ω(u.Guid).To(Equal("3333")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_USER})) - case "user4": - Ω(u.Guid).To(Equal("4444")) - Ω(u.Roles).To(ConsistOf([]string{models.ORG_USER})) - default: - Fail("unexpected user: " + u.Username) - } - } - - }) - - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_org_role.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_org_role.go deleted file mode 100644 index fc2895a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_org_role.go +++ /dev/null @@ -1,83 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SetOrgRole struct { - ui terminal.UI - config core_config.Reader - userRepo api.UserRepository - userReq requirements.UserRequirement - orgReq requirements.OrganizationRequirement -} - -func NewSetOrgRole(ui terminal.UI, config core_config.Reader, userRepo api.UserRepository) (cmd *SetOrgRole) { - cmd = new(SetOrgRole) - cmd.ui = ui - cmd.config = config - cmd.userRepo = userRepo - return -} - -func (cmd *SetOrgRole) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-org-role", - Description: T("Assign an org role to a user"), - Usage: T("CF_NAME set-org-role USERNAME ORG ROLE\n\n") + - T("ROLES:\n") + - T(" OrgManager - Invite and manage users, select and change plans, and set spending limits\n") + - T(" BillingManager - Create and manage the billing account and payment info\n") + - T(" OrgAuditor - Read-only access to org info and reports\n"), - } -} - -func (cmd *SetOrgRole) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - } - - cmd.userReq = requirementsFactory.NewUserRequirement(c.Args()[0]) - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[1]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[1]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.userReq, - cmd.orgReq, - } - - return -} - -func (cmd *SetOrgRole) Run(c *cli.Context) { - user := cmd.userReq.GetUser() - org := cmd.orgReq.GetOrganization() - role := models.UserInputToOrgRole[c.Args()[2]] - - cmd.ui.Say(T("Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - map[string]interface{}{ - "Role": terminal.EntityNameColor(role), - "TargetUser": terminal.EntityNameColor(user.Username), - "TargetOrg": terminal.EntityNameColor(org.Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr := cmd.userRepo.SetOrgRole(user.Guid, org.Guid, role) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_org_role_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_org_role_test.go deleted file mode 100644 index 5c87105..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_org_role_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -func callSetOrgRole(args []string, requirementsFactory *testreq.FakeReqFactory, userRepo *testapi.FakeUserRepository) (ui *testterm.FakeUI) { - ui = new(testterm.FakeUI) - config := testconfig.NewRepositoryWithDefaults() - cmd := NewSetOrgRole(ui, config, userRepo) - testcmd.RunCommand(cmd, args, requirementsFactory) - return -} - -var _ = Describe("set-org-role command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - userRepo *testapi.FakeUserRepository - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - userRepo = &testapi.FakeUserRepository{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewSetOrgRole(ui, configRepo, userRepo), args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - Expect(runCommand("hey", "there", "jude")).To(BeFalse()) - }) - - It("fails with usage when not provided exactly three args", func() { - runCommand("one fish", "two fish") // red fish, blue fish - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - - org := models.Organization{} - org.Guid = "my-org-guid" - org.Name = "my-org" - requirementsFactory.UserFields = models.UserFields{Guid: "my-user-guid", Username: "my-user"} - requirementsFactory.Organization = org - }) - - It("sets the given org role on the given user", func() { - runCommand("some-user", "some-org", "OrgManager") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning role", "OrgManager", "my-user", "my-org", "my-user"}, - []string{"OK"}, - )) - Expect(userRepo.SetOrgRoleUserGuid).To(Equal("my-user-guid")) - Expect(userRepo.SetOrgRoleOrganizationGuid).To(Equal("my-org-guid")) - Expect(userRepo.SetOrgRoleRole).To(Equal(models.ORG_MANAGER)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_space_role.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_space_role.go deleted file mode 100644 index 3dcaab6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_space_role.go +++ /dev/null @@ -1,109 +0,0 @@ -package user - -import ( - "errors" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type SpaceRoleSetter interface { - SetSpaceRole(space models.Space, role, userGuid, userName string) (err error) -} - -type SetSpaceRole struct { - ui terminal.UI - config core_config.Reader - spaceRepo spaces.SpaceRepository - userRepo api.UserRepository - userReq requirements.UserRequirement - orgReq requirements.OrganizationRequirement -} - -func NewSetSpaceRole(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, userRepo api.UserRepository) (cmd *SetSpaceRole) { - cmd = new(SetSpaceRole) - cmd.ui = ui - cmd.config = config - cmd.spaceRepo = spaceRepo - cmd.userRepo = userRepo - return -} - -func (cmd *SetSpaceRole) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "set-space-role", - Description: T("Assign a space role to a user"), - Usage: T("CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n") + - T("ROLES:\n") + - T(" SpaceManager - Invite and manage users, and enable features for a given space\n") + - T(" SpaceDeveloper - Create and manage apps and services, and see logs and reports\n") + - T(" SpaceAuditor - View logs, reports, and settings on this space\n"), - } -} - -func (cmd *SetSpaceRole) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 4 { - cmd.ui.FailWithUsage(c) - } - - cmd.userReq = requirementsFactory.NewUserRequirement(c.Args()[0]) - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[1]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[1]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.userReq, - cmd.orgReq, - } - return -} - -func (cmd *SetSpaceRole) Run(c *cli.Context) { - spaceName := c.Args()[2] - role := models.UserInputToSpaceRole[c.Args()[3]] - user := cmd.userReq.GetUser() - org := cmd.orgReq.GetOrganization() - - space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - err := cmd.SetSpaceRole(space, role, user.Guid, user.Username) - if err != nil { - cmd.ui.Failed(err.Error()) - return - } -} - -func (cmd *SetSpaceRole) SetSpaceRole(space models.Space, role, userGuid, userName string) (err error) { - cmd.ui.Say(T("Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - map[string]interface{}{ - "Role": terminal.EntityNameColor(role), - "TargetUser": terminal.EntityNameColor(userName), - "TargetOrg": terminal.EntityNameColor(space.Organization.Name), - "TargetSpace": terminal.EntityNameColor(space.Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr := cmd.userRepo.SetSpaceRole(userGuid, space.Guid, space.Organization.Guid, role) - if apiErr != nil { - err = errors.New(apiErr.Error()) - return - } - - cmd.ui.Ok() - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_space_role_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_space_role_test.go deleted file mode 100644 index c1f8e3c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/set_space_role_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("set-space-role command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - spaceRepo *testapi.FakeSpaceRepository - userRepo *testapi.FakeUserRepository - configRepo core_config.ReadWriter - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - accessToken, err := testconfig.EncodeAccessToken(core_config.TokenInfo{Username: "current-user"}) - Expect(err).NotTo(HaveOccurred()) - configRepo.SetAccessToken(accessToken) - - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - spaceRepo = &testapi.FakeSpaceRepository{} - userRepo = &testapi.FakeUserRepository{} - }) - - runCommand := func(args ...string) bool { - return testcmd.RunCommand(NewSetSpaceRole(ui, configRepo, spaceRepo, userRepo), args, requirementsFactory) - } - - It("fails with usage when not provided exactly four args", func() { - runCommand("foo", "bar", "baz") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("does not fail with usage when provided four args", func() { - runCommand("whatever", "these", "are", "args") - Expect(ui.FailedWithUsage).To(BeFalse()) - }) - - Describe("requirements", func() { - It("fails when not logged in", func() { - Expect(runCommand("username", "org", "space", "role")).To(BeFalse()) - }) - - It("succeeds when logged in", func() { - requirementsFactory.LoginSuccess = true - passed := runCommand("username", "org", "space", "role") - - Expect(passed).To(BeTrue()) - Expect(requirementsFactory.UserUsername).To(Equal("username")) - Expect(requirementsFactory.OrganizationName).To(Equal("org")) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - - org := models.Organization{} - org.Guid = "my-org-guid" - org.Name = "my-org" - - requirementsFactory.UserFields = models.UserFields{Guid: "my-user-guid", Username: "my-user"} - requirementsFactory.Organization = org - - spaceRepo.FindByNameInOrgSpace = models.Space{} - spaceRepo.FindByNameInOrgSpace.Guid = "my-space-guid" - spaceRepo.FindByNameInOrgSpace.Name = "my-space" - spaceRepo.FindByNameInOrgSpace.Organization = org.OrganizationFields - }) - - It("sets the given space role on the given user", func() { - runCommand("some-user", "some-org", "some-space", "SpaceManager") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Assigning role ", "SpaceManager", "my-user", "my-org", "my-space", "current-user"}, - []string{"OK"}, - )) - - Expect(spaceRepo.FindByNameInOrgName).To(Equal("some-space")) - Expect(spaceRepo.FindByNameInOrgOrgGuid).To(Equal("my-org-guid")) - - Expect(userRepo.SetSpaceRoleUserGuid).To(Equal("my-user-guid")) - Expect(userRepo.SetSpaceRoleSpaceGuid).To(Equal("my-space-guid")) - Expect(userRepo.SetSpaceRoleRole).To(Equal(models.SPACE_MANAGER)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/space_users.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/space_users.go deleted file mode 100644 index 3c6a319..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/space_users.go +++ /dev/null @@ -1,146 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/plugin/models" -) - -var spaceRoles = []string{models.SPACE_MANAGER, models.SPACE_DEVELOPER, models.SPACE_AUDITOR} - -type SpaceUsers struct { - ui terminal.UI - config core_config.Reader - spaceRepo spaces.SpaceRepository - userRepo api.UserRepository - orgReq requirements.OrganizationRequirement - pluginModel *[]plugin_models.GetSpaceUsers_Model - pluginCall bool -} - -func init() { - command_registry.Register(&SpaceUsers{}) -} - -func NewSpaceUsers(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, userRepo api.UserRepository) (cmd *SpaceUsers) { - cmd = &SpaceUsers{} - cmd.ui = ui - cmd.config = config - cmd.spaceRepo = spaceRepo - cmd.userRepo = userRepo - return -} - -func (cmd *SpaceUsers) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "space-users", - Description: T("Show space users by role"), - Usage: T("CF_NAME space-users ORG SPACE"), - } -} - -func (cmd *SpaceUsers) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { - if len(fc.Args()) != 2 { - cmd.ui.Failed(T("Incorrect Usage. Requires arguments\n\n") + command_registry.Commands.CommandUsage("space-users")) - } - - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(fc.Args()[0]) - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.orgReq, - } - return -} - -func (cmd *SpaceUsers) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.ui = deps.Ui - cmd.config = deps.Config - cmd.userRepo = deps.RepoLocator.GetUserRepository() - cmd.spaceRepo = deps.RepoLocator.GetSpaceRepository() - cmd.pluginCall = pluginCall - cmd.pluginModel = deps.PluginModels.SpaceUsers - - return cmd -} - -func (cmd *SpaceUsers) Execute(c flags.FlagContext) { - spaceName := c.Args()[1] - org := cmd.orgReq.GetOrganization() - - space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - } - - cmd.ui.Say(T("Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - map[string]interface{}{ - "TargetOrg": terminal.EntityNameColor(org.Name), - "TargetSpace": terminal.EntityNameColor(space.Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - var spaceRoleToDisplayName = map[string]string{ - models.SPACE_MANAGER: T("SPACE MANAGER"), - models.SPACE_DEVELOPER: T("SPACE DEVELOPER"), - models.SPACE_AUDITOR: T("SPACE AUDITOR"), - } - - var usersMap = make(map[string]plugin_models.GetSpaceUsers_Model) - - var users []models.UserFields - for _, role := range spaceRoles { - displayName := spaceRoleToDisplayName[role] - - if cmd.config.IsMinApiVersion("2.21.0") { - users, apiErr = cmd.userRepo.ListUsersInSpaceForRoleWithNoUAA(space.Guid, role) - } else { - users, apiErr = cmd.userRepo.ListUsersInSpaceForRole(space.Guid, role) - } - - cmd.ui.Say("") - cmd.ui.Say("%s", terminal.HeaderColor(displayName)) - - for _, user := range users { - cmd.ui.Say(" %s", user.Username) - - if cmd.pluginCall { - u, found := usersMap[user.Username] - if !found { - u = plugin_models.GetSpaceUsers_Model{} - u.Username = user.Username - u.Guid = user.Guid - u.IsAdmin = user.IsAdmin - u.Roles = make([]string, 1) - u.Roles[0] = role - usersMap[user.Username] = u - } else { - u.Roles = append(u.Roles, role) - usersMap[user.Username] = u - } - } - } - - if apiErr != nil { - cmd.ui.Failed(T("Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - map[string]interface{}{ - "Error": apiErr.Error(), - "SpaceRoleToDisplayName": displayName, - })) - return - } - } - - if cmd.pluginCall { - for _, v := range usersMap { - *(cmd.pluginModel) = append(*(cmd.pluginModel), v) - } - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/space_users_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/space_users_test.go deleted file mode 100644 index 1cb27bd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/space_users_test.go +++ /dev/null @@ -1,299 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/plugin/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("space-users command", func() { - var ( - ui *testterm.FakeUI - requirementsFactory *testreq.FakeReqFactory - spaceRepo *testapi.FakeSpaceRepository - userRepo *testapi.FakeUserRepository - configRepo core_config.Repository - deps command_registry.Dependency - ) - - updateCommandDependency := func(pluginCall bool) { - deps.Ui = ui - deps.Config = configRepo - deps.RepoLocator = deps.RepoLocator.SetUserRepository(userRepo) - deps.RepoLocator = deps.RepoLocator.SetSpaceRepository(spaceRepo) - - command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("space-users").SetDependency(deps, pluginCall)) - } - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - ui = &testterm.FakeUI{} - requirementsFactory = &testreq.FakeReqFactory{} - spaceRepo = &testapi.FakeSpaceRepository{} - userRepo = &testapi.FakeUserRepository{} - deps = command_registry.NewDependency() - updateCommandDependency(false) - }) - - runCommand := func(args ...string) bool { - cmd := command_registry.Commands.FindCommand("space-users") - return testcmd.RunCliCommand(cmd, args, requirementsFactory) - } - - Describe("requirements", func() { - It("fails when not logged in", func() { - Expect(runCommand("my-org", "my-space")).To(BeFalse()) - }) - - It("succeeds when logged in", func() { - requirementsFactory.LoginSuccess = true - passed := runCommand("some-org", "whatever-space") - - Expect(passed).To(BeTrue()) - Expect("some-org").To(Equal(requirementsFactory.OrganizationName)) - }) - }) - - It("fails with usage when not invoked with exactly two args", func() { - runCommand("my-org") - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Incorrect Usage", "Requires arguments"}, - )) - }) - - Context("when logged in and given some users in the org and space", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - - org := models.Organization{} - org.Name = "Org1" - org.Guid = "org1-guid" - space := models.Space{} - space.Name = "Space1" - space.Guid = "space1-guid" - - requirementsFactory.Organization = org - spaceRepo.FindByNameInOrgSpace = space - - user := models.UserFields{} - user.Username = "user1" - user2 := models.UserFields{} - user2.Username = "user2" - user3 := models.UserFields{} - user3.Username = "user3" - user4 := models.UserFields{} - user4.Username = "user4" - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.SPACE_MANAGER: []models.UserFields{user, user2}, - models.SPACE_DEVELOPER: []models.UserFields{user4}, - models.SPACE_AUDITOR: []models.UserFields{user3}, - } - }) - - It("tells you about the space users in the given space", func() { - runCommand("my-org", "my-space") - - Expect(spaceRepo.FindByNameInOrgName).To(Equal("my-space")) - Expect(spaceRepo.FindByNameInOrgOrgGuid).To(Equal("org1-guid")) - Expect(userRepo.ListUsersSpaceGuid).To(Equal("space1-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Getting users in org", "Org1", "Space1", "my-user"}, - []string{"SPACE MANAGER"}, - []string{"user1"}, - []string{"user2"}, - []string{"SPACE DEVELOPER"}, - []string{"user4"}, - []string{"SPACE AUDITOR"}, - []string{"user3"}, - )) - }) - - Context("when cc api verson is >= 2.21.0", func() { - BeforeEach(func() { - userRepo.ListUsersInSpaceForRole_CallCount = 0 - userRepo.ListUsersInSpaceForRoleWithNoUAA_CallCount = 0 - }) - - It("calls ListUsersInSpaceForRoleWithNoUAA()", func() { - configRepo.SetApiVersion("2.22.0") - runCommand("my-org", "my-sapce") - - Expect(userRepo.ListUsersInSpaceForRoleWithNoUAA_CallCount).To(BeNumerically(">=", 1)) - Expect(userRepo.ListUsersInSpaceForRole_CallCount).To(Equal(0)) - }) - }) - - Context("when cc api verson is < 2.21.0", func() { - It("calls ListUsersInSpaceForRole()", func() { - configRepo.SetApiVersion("2.20.0") - runCommand("my-org", "my-space") - - Expect(userRepo.ListUsersInSpaceForRoleWithNoUAA_CallCount).To(Equal(0)) - Expect(userRepo.ListUsersInSpaceForRole_CallCount).To(BeNumerically(">=", 1)) - }) - }) - }) - - Describe("when invoked by a plugin", func() { - var ( - pluginUserModel []plugin_models.GetSpaceUsers_Model - ) - - Context("single roles", func() { - - BeforeEach(func() { - - org := models.Organization{} - org.Name = "the-org" - org.Guid = "the-org-guid" - - space := models.Space{} - space.Name = "the-space" - space.Guid = "the-space-guid" - - // space managers - user := models.UserFields{} - user.Username = "user1" - user.Guid = "1111" - - user2 := models.UserFields{} - user2.Username = "user2" - user2.Guid = "2222" - - // space auditor - user3 := models.UserFields{} - user3.Username = "user3" - user3.Guid = "3333" - - // space developer - user4 := models.UserFields{} - user4.Username = "user4" - user4.Guid = "4444" - - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.SPACE_MANAGER: []models.UserFields{user, user2}, - models.SPACE_DEVELOPER: []models.UserFields{user4}, - models.SPACE_AUDITOR: []models.UserFields{user3}, - } - - requirementsFactory.LoginSuccess = true - requirementsFactory.Organization = org - requirementsFactory.Space = space - pluginUserModel = []plugin_models.GetSpaceUsers_Model{} - deps.PluginModels.SpaceUsers = &pluginUserModel - updateCommandDependency(true) - }) - - It("populates the plugin model with users with single roles", func() { - runCommand("the-org", "the-space") - - Ω(pluginUserModel).To(HaveLen(4)) - for _, u := range pluginUserModel { - switch u.Username { - case "user1": - Ω(u.Guid).To(Equal("1111")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER})) - case "user2": - Ω(u.Guid).To(Equal("2222")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER})) - case "user3": - Ω(u.Guid).To(Equal("3333")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_AUDITOR})) - case "user4": - Ω(u.Guid).To(Equal("4444")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_DEVELOPER})) - default: - Fail("unexpected user: " + u.Username) - } - } - - }) - - }) - - Context("multiple roles", func() { - - BeforeEach(func() { - - org := models.Organization{} - org.Name = "the-org" - org.Guid = "the-org-guid" - - space := models.Space{} - space.Name = "the-space" - space.Guid = "the-space-guid" - - // space managers - user := models.UserFields{} - user.Username = "user1" - user.Guid = "1111" - - user2 := models.UserFields{} - user2.Username = "user2" - user2.Guid = "2222" - - // space auditor - user3 := models.UserFields{} - user3.Username = "user3" - user3.Guid = "3333" - - // space developer - user4 := models.UserFields{} - user4.Username = "user4" - user4.Guid = "4444" - - userRepo.ListUsersByRole = map[string][]models.UserFields{ - models.SPACE_MANAGER: []models.UserFields{user, user2, user3, user4}, - models.SPACE_DEVELOPER: []models.UserFields{user2, user4}, - models.SPACE_AUDITOR: []models.UserFields{user, user3}, - } - - requirementsFactory.LoginSuccess = true - requirementsFactory.Organization = org - requirementsFactory.Space = space - pluginUserModel = []plugin_models.GetSpaceUsers_Model{} - deps.PluginModels.SpaceUsers = &pluginUserModel - updateCommandDependency(true) - }) - - It("populates the plugin model with users with multiple roles", func() { - runCommand("the-org", "the-space") - - Ω(pluginUserModel).To(HaveLen(4)) - for _, u := range pluginUserModel { - switch u.Username { - case "user1": - Ω(u.Guid).To(Equal("1111")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_AUDITOR})) - case "user2": - Ω(u.Guid).To(Equal("2222")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_DEVELOPER})) - case "user3": - Ω(u.Guid).To(Equal("3333")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_AUDITOR})) - case "user4": - Ω(u.Guid).To(Equal("4444")) - Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_DEVELOPER})) - default: - Fail("unexpected user: " + u.Username) - } - } - - }) - - }) - - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_org_role.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_org_role.go deleted file mode 100644 index 4a94730..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_org_role.go +++ /dev/null @@ -1,85 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnsetOrgRole struct { - ui terminal.UI - config core_config.Reader - userRepo api.UserRepository - userReq requirements.UserRequirement - orgReq requirements.OrganizationRequirement -} - -func NewUnsetOrgRole(ui terminal.UI, config core_config.Reader, userRepo api.UserRepository) (cmd *UnsetOrgRole) { - cmd = new(UnsetOrgRole) - cmd.ui = ui - cmd.config = config - cmd.userRepo = userRepo - - return -} - -func (cmd *UnsetOrgRole) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unset-org-role", - Description: T("Remove an org role from a user"), - Usage: T("CF_NAME unset-org-role USERNAME ORG ROLE\n\n") + - T("ROLES:\n") + - T(" OrgManager - Invite and manage users, select and change plans, and set spending limits\n") + - T(" BillingManager - Create and manage the billing account and payment info\n") + - T(" OrgAuditor - Read-only access to org info and reports\n"), - } -} - -func (cmd *UnsetOrgRole) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 3 { - cmd.ui.FailWithUsage(c) - } - - cmd.userReq = requirementsFactory.NewUserRequirement(c.Args()[0]) - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[1]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[1]) - } - - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.userReq, - cmd.orgReq, - } - - return -} - -func (cmd *UnsetOrgRole) Run(c *cli.Context) { - role := models.UserInputToOrgRole[c.Args()[2]] - user := cmd.userReq.GetUser() - org := cmd.orgReq.GetOrganization() - - cmd.ui.Say(T("Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - map[string]interface{}{ - "Role": terminal.EntityNameColor(role), - "TargetUser": terminal.EntityNameColor(c.Args()[0]), - "TargetOrg": terminal.EntityNameColor(c.Args()[1]), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr := cmd.userRepo.UnsetOrgRole(user.Guid, org.Guid, role) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_org_role_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_org_role_test.go deleted file mode 100644 index 9233273..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_org_role_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("unset-org-role command", func() { - var ( - ui *testterm.FakeUI - userRepo *testapi.FakeUserRepository - configRepo core_config.ReadWriter - requirementsFactory *testreq.FakeReqFactory - ) - - runCommand := func(args ...string) bool { - cmd := NewUnsetOrgRole(ui, configRepo, userRepo) - return testcmd.RunCommand(cmd, args, requirementsFactory) - } - - BeforeEach(func() { - ui = &testterm.FakeUI{} - userRepo = &testapi.FakeUserRepository{} - requirementsFactory = &testreq.FakeReqFactory{} - configRepo = testconfig.NewRepositoryWithDefaults() - }) - - It("fails with usage when invoked without exactly three args", func() { - runCommand("username", "org") - Expect(ui.FailedWithUsage).To(BeTrue()) - - runCommand("woah", "too", "many", "args") - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - Describe("requirements", func() { - It("fails when not logged in", func() { - requirementsFactory.LoginSuccess = false - - Expect(runCommand("username", "org", "role")).To(BeFalse()) - }) - - It("succeeds when logged in", func() { - requirementsFactory.LoginSuccess = true - passed := runCommand("username", "org", "role") - Expect(passed).To(BeTrue()) - - Expect(requirementsFactory.UserUsername).To(Equal("username")) - Expect(requirementsFactory.OrganizationName).To(Equal("org")) - }) - }) - - Context("when logged in", func() { - BeforeEach(func() { - requirementsFactory.LoginSuccess = true - - user := models.UserFields{} - user.Username = "some-user" - user.Guid = "some-user-guid" - org := models.Organization{} - org.Name = "some-org" - org.Guid = "some-org-guid" - - requirementsFactory.UserFields = user - requirementsFactory.Organization = org - }) - - It("unsets a user's org role", func() { - runCommand("my-username", "my-org", "OrgManager") - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing role", "OrgManager", "my-username", "my-org", "my-user"}, - []string{"OK"}, - )) - - Expect(userRepo.UnsetOrgRoleRole).To(Equal(models.ORG_MANAGER)) - Expect(userRepo.UnsetOrgRoleUserGuid).To(Equal("some-user-guid")) - Expect(userRepo.UnsetOrgRoleOrganizationGuid).To(Equal("some-org-guid")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_space_role.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_space_role.go deleted file mode 100644 index 2c1ea7a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_space_role.go +++ /dev/null @@ -1,94 +0,0 @@ -package user - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/command_metadata" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -type UnsetSpaceRole struct { - ui terminal.UI - config core_config.Reader - spaceRepo spaces.SpaceRepository - userRepo api.UserRepository - userReq requirements.UserRequirement - orgReq requirements.OrganizationRequirement -} - -func NewUnsetSpaceRole(ui terminal.UI, config core_config.Reader, spaceRepo spaces.SpaceRepository, userRepo api.UserRepository) (cmd *UnsetSpaceRole) { - cmd = new(UnsetSpaceRole) - cmd.ui = ui - cmd.config = config - cmd.spaceRepo = spaceRepo - cmd.userRepo = userRepo - return -} - -func (cmd *UnsetSpaceRole) Metadata() command_metadata.CommandMetadata { - return command_metadata.CommandMetadata{ - Name: "unset-space-role", - Description: T("Remove a space role from a user"), - Usage: T("CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n") + - T("ROLES:\n") + - T(" SpaceManager - Invite and manage users, and enable features for a given space\n") + - T(" SpaceDeveloper - Create and manage apps and services, and see logs and reports\n") + - T(" SpaceAuditor - View logs, reports, and settings on this space\n"), - } -} - -func (cmd *UnsetSpaceRole) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { - if len(c.Args()) != 4 { - cmd.ui.FailWithUsage(c) - } - - cmd.userReq = requirementsFactory.NewUserRequirement(c.Args()[0]) - if cmd.orgReq == nil { - cmd.orgReq = requirementsFactory.NewOrganizationRequirement(c.Args()[1]) - } else { - cmd.orgReq.SetOrganizationName(c.Args()[1]) - } - reqs = []requirements.Requirement{ - requirementsFactory.NewLoginRequirement(), - cmd.userReq, - cmd.orgReq, - } - - return -} - -func (cmd *UnsetSpaceRole) Run(c *cli.Context) { - spaceName := c.Args()[2] - role := models.UserInputToSpaceRole[c.Args()[3]] - - user := cmd.userReq.GetUser() - org := cmd.orgReq.GetOrganization() - space, apiErr := cmd.spaceRepo.FindByNameInOrg(spaceName, org.Guid) - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Say(T("Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - map[string]interface{}{ - "Role": terminal.EntityNameColor(role), - "TargetUser": terminal.EntityNameColor(user.Username), - "TargetOrg": terminal.EntityNameColor(org.Name), - "TargetSpace": terminal.EntityNameColor(space.Name), - "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), - })) - - apiErr = cmd.userRepo.UnsetSpaceRole(user.Guid, space.Guid, role) - - if apiErr != nil { - cmd.ui.Failed(apiErr.Error()) - return - } - - cmd.ui.Ok() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_space_role_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_space_role_test.go deleted file mode 100644 index 05a634d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/unset_space_role_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package user_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - . "github.com/cloudfoundry/cli/cf/commands/user" - "github.com/cloudfoundry/cli/cf/models" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("unset-space-role command", func() { - It("fails with usage when not called with exactly four args", func() { - requirementsFactory, spaceRepo, userRepo := getUnsetSpaceRoleDeps() - - ui, _ := callUnsetSpaceRole([]string{"username", "org", "space"}, spaceRepo, userRepo, requirementsFactory) - Expect(ui.FailedWithUsage).To(BeTrue()) - }) - - It("fails requirements when not logged in", func() { - requirementsFactory, spaceRepo, userRepo := getUnsetSpaceRoleDeps() - args := []string{"username", "org", "space", "role"} - - requirementsFactory.LoginSuccess = false - _, passed := callUnsetSpaceRole(args, spaceRepo, userRepo, requirementsFactory) - Expect(passed).To(BeFalse()) - }) - - It("unsets the user's space role", func() { - user := models.UserFields{} - user.Username = "some-user" - user.Guid = "some-user-guid" - org := models.Organization{} - org.Name = "some-org" - org.Guid = "some-org-guid" - - requirementsFactory, spaceRepo, userRepo := getUnsetSpaceRoleDeps() - requirementsFactory.LoginSuccess = true - requirementsFactory.UserFields = user - requirementsFactory.Organization = org - spaceRepo.FindByNameInOrgSpace = models.Space{} - spaceRepo.FindByNameInOrgSpace.Name = "some-space" - spaceRepo.FindByNameInOrgSpace.Guid = "some-space-guid" - - args := []string{"my-username", "my-org", "my-space", "SpaceManager"} - - ui, _ := callUnsetSpaceRole(args, spaceRepo, userRepo, requirementsFactory) - - Expect(spaceRepo.FindByNameInOrgName).To(Equal("my-space")) - Expect(spaceRepo.FindByNameInOrgOrgGuid).To(Equal("some-org-guid")) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"Removing role", "SpaceManager", "some-user", "some-org", "some-space", "my-user"}, - []string{"OK"}, - )) - Expect(userRepo.UnsetSpaceRoleRole).To(Equal(models.SPACE_MANAGER)) - Expect(userRepo.UnsetSpaceRoleUserGuid).To(Equal("some-user-guid")) - Expect(userRepo.UnsetSpaceRoleSpaceGuid).To(Equal("some-space-guid")) - }) -}) - -func getUnsetSpaceRoleDeps() (requirementsFactory *testreq.FakeReqFactory, spaceRepo *testapi.FakeSpaceRepository, userRepo *testapi.FakeUserRepository) { - requirementsFactory = &testreq.FakeReqFactory{} - spaceRepo = &testapi.FakeSpaceRepository{} - userRepo = &testapi.FakeUserRepository{} - return -} - -func callUnsetSpaceRole(args []string, spaceRepo *testapi.FakeSpaceRepository, userRepo *testapi.FakeUserRepository, requirementsFactory *testreq.FakeReqFactory) (*testterm.FakeUI, bool) { - ui := &testterm.FakeUI{} - config := testconfig.NewRepositoryWithDefaults() - cmd := NewUnsetSpaceRole(ui, config, spaceRepo, userRepo) - passed := testcmd.RunCommand(cmd, args, requirementsFactory) - return ui, passed -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/user_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/user_suite_test.go deleted file mode 100644 index 84c8109..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/commands/user/user_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package user_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestUser(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "User Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor.go deleted file mode 100644 index 7ab6755..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor.go +++ /dev/null @@ -1,87 +0,0 @@ -package configuration - -import ( - "io/ioutil" - "os" - "path/filepath" -) - -const ( - filePermissions = 0600 - dirPermissions = 0700 -) - -type Persistor interface { - Delete() - Exists() bool - Load(DataInterface) error - Save(DataInterface) error -} - -type DataInterface interface { - JsonMarshalV3() ([]byte, error) - JsonUnmarshalV3([]byte) error -} - -type DiskPersistor struct { - filePath string -} - -func NewDiskPersistor(path string) (dp DiskPersistor) { - return DiskPersistor{ - filePath: path, - } -} - -func (dp DiskPersistor) Exists() bool { - _, err := os.Stat(dp.filePath) - if err != nil && !os.IsExist(err) { - return false - } - return true -} - -func (dp DiskPersistor) Delete() { - os.Remove(dp.filePath) -} - -func (dp DiskPersistor) Load(data DataInterface) error { - err := dp.read(data) - if os.IsPermission(err) { - return err - } - - if err != nil { - err = dp.write(data) - } - return err -} - -func (dp DiskPersistor) Save(data DataInterface) (err error) { - return dp.write(data) -} - -func (dp DiskPersistor) read(data DataInterface) error { - err := os.MkdirAll(filepath.Dir(dp.filePath), dirPermissions) - if err != nil { - return err - } - - jsonBytes, err := ioutil.ReadFile(dp.filePath) - if err != nil { - return err - } - - err = data.JsonUnmarshalV3(jsonBytes) - return err -} - -func (dp DiskPersistor) write(data DataInterface) error { - bytes, err := data.JsonMarshalV3() - if err != nil { - return err - } - - err = ioutil.WriteFile(dp.filePath, bytes, filePermissions) - return err -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_test.go deleted file mode 100644 index 17d889d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package configuration_test - -import ( - "encoding/json" - "io/ioutil" - "os" - - . "github.com/cloudfoundry/cli/cf/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("DiskPersistor", func() { - var ( - tmpDir string - tmpFile *os.File - diskPersistor DiskPersistor - ) - - BeforeEach(func() { - var err error - - tmpDir = os.TempDir() - - tmpFile, err = ioutil.TempFile(tmpDir, "tmp_file") - Expect(err).ToNot(HaveOccurred()) - - diskPersistor = NewDiskPersistor(tmpFile.Name()) - }) - - AfterEach(func() { - os.Remove(tmpFile.Name()) - }) - - Describe(".Delete", func() { - It("Deletes the correct file", func() { - tmpFile.Close() - diskPersistor.Delete() - - file, err := os.Stat(tmpFile.Name()) - Expect(file).To(BeNil()) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe(".Save", func() { - It("Writes the json file to the correct filepath", func() { - d := &data{Info: "save test"} - - err := diskPersistor.Save(d) - Expect(err).ToNot(HaveOccurred()) - - dataBytes, err := ioutil.ReadFile(tmpFile.Name()) - Expect(err).ToNot(HaveOccurred()) - Expect(string(dataBytes)).To(ContainSubstring(d.Info)) - }) - }) - - Describe(".Load", func() { - It("Will load an empty json file", func() { - d := &data{} - - err := diskPersistor.Load(d) - Expect(err).ToNot(HaveOccurred()) - Expect(d.Info).To(Equal("")) - }) - - It("Will load a json file with specific keys", func() { - d := &data{} - - err := ioutil.WriteFile(tmpFile.Name(), []byte(`{"Info":"test string"}`), 0700) - Expect(err).ToNot(HaveOccurred()) - - err = diskPersistor.Load(d) - Expect(err).ToNot(HaveOccurred()) - Expect(d.Info).To(Equal("test string")) - }) - }) -}) - -type data struct { - Info string -} - -func (d *data) JsonMarshalV3() ([]byte, error) { - return json.MarshalIndent(d, "", " ") -} - -func (d *data) JsonUnmarshalV3(data []byte) error { - return json.Unmarshal(data, d) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_helpers/config_helpers.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_helpers/config_helpers.go deleted file mode 100644 index 901c4a1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/config_helpers/config_helpers.go +++ /dev/null @@ -1,43 +0,0 @@ -package config_helpers - -import ( - "os" - "path/filepath" - "runtime" -) - -func DefaultFilePath() string { - var configDir string - - if os.Getenv("CF_HOME") != "" { - cfHome := os.Getenv("CF_HOME") - configDir = filepath.Join(cfHome, ".cf") - } else { - configDir = filepath.Join(userHomeDir(), ".cf") - } - - return filepath.Join(configDir, "config.json") -} - -// See: http://stackoverflow.com/questions/7922270/obtain-users-home-directory -// we can't cross compile using cgo and use user.Current() -var userHomeDir = func() string { - - if runtime.GOOS == "windows" { - home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") - if home == "" { - home = os.Getenv("USERPROFILE") - } - return home - } - - return os.Getenv("HOME") -} - -var PluginRepoDir = func() string { - if os.Getenv("CF_PLUGIN_HOME") != "" { - return os.Getenv("CF_PLUGIN_HOME") - } - - return userHomeDir() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/configuration_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/configuration_suite_test.go deleted file mode 100644 index c983217..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/configuration_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package configuration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestConfiguration(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Configuration Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/access_token.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/access_token.go deleted file mode 100644 index 336f6b2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/access_token.go +++ /dev/null @@ -1,56 +0,0 @@ -package core_config - -import ( - "encoding/base64" - "encoding/json" - "strings" -) - -type TokenInfo struct { - Username string `json:"user_name"` - Email string `json:"email"` - UserGuid string `json:"user_id"` -} - -func NewTokenInfo(accessToken string) (info TokenInfo) { - tokenJson, err := DecodeAccessToken(accessToken) - - if err != nil { - return - } - info = TokenInfo{} - err = json.Unmarshal(tokenJson, &info) - return -} - -func DecodeAccessToken(accessToken string) (tokenJson []byte, err error) { - tokenParts := strings.Split(accessToken, " ") - - if len(tokenParts) < 2 { - return - } - - token := tokenParts[1] - encodedParts := strings.Split(token, ".") - - if len(encodedParts) < 3 { - return - } - - encodedTokenJson := encodedParts[1] - return base64Decode(encodedTokenJson) -} - -func base64Decode(encodedData string) ([]byte, error) { - return base64.StdEncoding.DecodeString(restorePadding(encodedData)) -} - -func restorePadding(seg string) string { - switch len(seg) % 4 { - case 2: - seg = seg + "==" - case 3: - seg = seg + "=" - } - return seg -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/access_token_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/access_token_test.go deleted file mode 100644 index f83c2d1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/access_token_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package core_config_test - -import ( - . "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("NewTokenInfo", func() { - It("decodes a string into TokenInfo when there is no padding present", func() { - accessToken := "bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJjNDE4OTllNS1kZTE1LTQ5NGQtYWFiNC04ZmNlYzUxN2UwMDUiLCJzdWIiOiI3NzJkZGEzZi02NjlmLTQyNzYtYjJiZC05MDQ4NmFiZTFmNmYiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiI3NzJkZGEzZi02NjlmLTQyNzYtYjJiZC05MDQ4NmFiZTFmNmYiLCJ1c2VyX25hbWUiOiJ1c2VyMUBleGFtcGxlLmNvbSIsImVtYWlsIjoidXNlcjFAZXhhbXBsZS5jb20iLCJpYXQiOjEzNzcwMjgzNTYsImV4cCI6MTM3NzAzNTU1NiwiaXNzIjoiaHR0cHM6Ly91YWEuYXJib3JnbGVuLmNmLWFwcC5jb20vb2F1dGgvdG9rZW4iLCJhdWQiOlsib3BlbmlkIiwiY2xvdWRfY29udHJvbGxlciIsInBhc3N3b3JkIl19.kjFJHi0Qir9kfqi2eyhHy6kdewhicAFu8hrPR1a5AxFvxGB45slKEjuP0_72cM_vEYICgZn3PcUUkHU9wghJO9wjZ6kiIKK1h5f2K9g-Iprv9BbTOWUODu1HoLIvg2TtGsINxcRYy_8LW1RtvQc1b4dBPoopaEH4no-BIzp0E5E" - decodedInfo, err := DecodeAccessToken(accessToken) - - Expect(err).NotTo(HaveOccurred()) - Expect(string(decodedInfo)).To(ContainSubstring("user1@example.com")) - }) - - It("decodes a string into TokenInfo when there is doubling padding present", func() { - accessToken := "bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiIwNTg2MjlkNC04NjEwLTQ3NTEtOTg3Ny0yOGMwNzE3YTE5ZTciLCJzdWIiOiIzNGFiMDhkOC04YmVmLTQ1MzQtOGYyOC0zODhhYWI1MjAwMmEiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIzNGFiMDhkOC04YmVmLTQ1MzQtOGYyOC0zODhhYWI1MjAwMmEiLCJ1c2VyX25hbWUiOiJ0bGFuZ0Bnb3Bpdm90YWwuY29tIiwiZW1haWwiOiJ0bGFuZ0Bnb3Bpdm90YWwuY29tIiwiaWF0IjoxMzc3MDk1ODM5LCJleHAiOjEzNzcxMzkwMzksImlzcyI6Imh0dHBzOi8vdWFhLnJ1bi5waXZvdGFsLmlvL29hdXRoL3Rva2VuIiwiYXVkIjpbIm9wZW5pZCIsImNsb3VkX2NvbnRyb2xsZXIiLCJwYXNzd29yZCJdfQ.dcgrGjPvTjYvg8dTSZY5ecZZTNt59IYd442VaEXXvLNB_WQCAdbVOxiJ14ogzQkkzDDw60Q2lbw4z6HrqM1a-BNpYfRmvaIP_79GpIZC6OzQy_PgA1whL27pO7_ABkSJT1CEgJQJMTQlYOiZNHvFTWen3G4O6ey680cxIN5VvbFjmmQHCuwANE9_GqnYYvoI9tS1nERku8DX2H9KH5NAgDa52-p0NhLnZRqYjGss6EyPYkwYN5w2OizfYUmEYVWo8K1Q45_TGMoE-LgZe2mGWwv0euLYBoFTkYhtBMj91dQagLrL1aGcmDKPc6ivkXtfpN4Zv7FJ9OXJ2DPQyHKRpw" - decodedInfo, err := DecodeAccessToken(accessToken) - - Expect(err).NotTo(HaveOccurred()) - Expect(string(decodedInfo)).To(ContainSubstring("tlang@gopivotal.com")) - }) - - It("decodes a string into TokenInfo when there is single padding present", func() { - accessToken := "bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiIwNTg2MjlkNC04NjEwLTQ3NTEtOTg3Ny0yOGMwNzE3YTE5ZTciLCJzdWIiOiIzNGFiMDhkOC04YmVmLTQ1MzQtOGYyOC0zODhhYWI1MjAwMmEiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIzNGFiMDhkOC04YmVmLTQ1MzQtOGYyOC0zODhhYWI1MjAwMmEiLCJ1c2VyX25hbWUiOiJ0bGFuZzFAZ29waXZvdGFsLmNvbSIsImVtYWlsIjoidGxhbmdAZ29waXZvdGFsLmNvbSIsImlhdCI6MTM3NzA5NTgzOSwiZXhwIjoxMzc3MTM5MDM5LCJpc3MiOiJodHRwczovL3VhYS5ydW4ucGl2b3RhbC5pby9vYXV0aC90b2tlbiIsImF1ZCI6WyJvcGVuaWQiLCJjbG91ZF9jb250cm9sbGVyIiwicGFzc3dvcmQiXX0.dcgrGjPvTjYvg8dTSZY5ecZZTNt59IYd442VaEXXvLNB_WQCAdbVOxiJ14ogzQkkzDDw60Q2lbw4z6HrqM1a-BNpYfRmvaIP_79GpIZC6OzQy_PgA1whL27pO7_ABkSJT1CEgJQJMTQlYOiZNHvFTWen3G4O6ey680cxIN5VvbFjmmQHCuwANE9_GqnYYvoI9tS1nERku8DX2H9KH5NAgDa52-p0NhLnZRqYjGss6EyPYkwYN5w2OizfYUmEYVWo8K1Q45_TGMoE-LgZe2mGWwv0euLYBoFTkYhtBMj91dQagLrL1aGcmDKPc6ivkXtfpN4Zv7FJ9OXJ2DPQyHKRpw" - decodedInfo, err := DecodeAccessToken(accessToken) - - Expect(err).NotTo(HaveOccurred()) - Expect(string(decodedInfo)).To(ContainSubstring("tlang1@gopivotal.com")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_data.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_data.go deleted file mode 100644 index 0ae3b18..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_data.go +++ /dev/null @@ -1,65 +0,0 @@ -package core_config - -import ( - "encoding/json" - - "github.com/cloudfoundry/cli/cf/models" -) - -type AuthPromptType string - -const ( - AuthPromptTypeText AuthPromptType = "TEXT" - AuthPromptTypePassword AuthPromptType = "PASSWORD" -) - -type AuthPrompt struct { - Type AuthPromptType - DisplayName string -} - -type Data struct { - ConfigVersion int - Target string - ApiVersion string - AuthorizationEndpoint string - LoggregatorEndPoint string - DopplerEndPoint string - UaaEndpoint string - AccessToken string - RefreshToken string - OrganizationFields models.OrganizationFields - SpaceFields models.SpaceFields - SSLDisabled bool - AsyncTimeout uint - Trace string - ColorEnabled string - Locale string - PluginRepos []models.PluginRepo - MinCliVersion string - MinRecommendedCliVersion string -} - -func NewData() (data *Data) { - data = new(Data) - return -} - -func (d *Data) JsonMarshalV3() (output []byte, err error) { - d.ConfigVersion = 3 - return json.MarshalIndent(d, "", " ") -} - -func (d *Data) JsonUnmarshalV3(input []byte) (err error) { - err = json.Unmarshal(input, d) - if err != nil { - return - } - - if d.ConfigVersion != 3 { - *d = Data{} - return - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_data_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_data_test.go deleted file mode 100644 index 457b7ce..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_data_test.go +++ /dev/null @@ -1,118 +0,0 @@ -package core_config_test - -import ( - "regexp" - - . "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var exampleJSON = ` -{ - "ConfigVersion": 3, - "Target": "api.example.com", - "ApiVersion": "3", - "AuthorizationEndpoint": "auth.example.com", - "LoggregatorEndPoint": "loggregator.example.com", - "DopplerEndPoint": "doppler.example.com", - "UaaEndpoint": "uaa.example.com", - "AccessToken": "the-access-token", - "RefreshToken": "the-refresh-token", - "OrganizationFields": { - "Guid": "the-org-guid", - "Name": "the-org", - "QuotaDefinition": { - "name":"", - "memory_limit":0, - "instance_memory_limit":0, - "total_routes":0, - "total_services":0, - "non_basic_services_allowed": false - } - }, - "SpaceFields": { - "Guid": "the-space-guid", - "Name": "the-space" - }, - "SSLDisabled": true, - "AsyncTimeout": 1000, - "Trace": "path/to/some/file", - "ColorEnabled": "true", - "Locale": "fr_FR", - "PluginRepos": [ - { - "Name": "repo1", - "Url": "http://repo.com" - } - ], - "MinCliVersion": "6.0.0", - "MinRecommendedCliVersion": "6.9.0" -}` - -var exampleData = &Data{ - Target: "api.example.com", - ApiVersion: "3", - AuthorizationEndpoint: "auth.example.com", - LoggregatorEndPoint: "loggregator.example.com", - DopplerEndPoint: "doppler.example.com", - UaaEndpoint: "uaa.example.com", - AccessToken: "the-access-token", - RefreshToken: "the-refresh-token", - MinCliVersion: "6.0.0", - MinRecommendedCliVersion: "6.9.0", - OrganizationFields: models.OrganizationFields{ - Guid: "the-org-guid", - Name: "the-org", - }, - SpaceFields: models.SpaceFields{ - Guid: "the-space-guid", - Name: "the-space", - }, - SSLDisabled: true, - Trace: "path/to/some/file", - AsyncTimeout: 1000, - ColorEnabled: "true", - Locale: "fr_FR", - PluginRepos: []models.PluginRepo{ - models.PluginRepo{ - Name: "repo1", - Url: "http://repo.com", - }, - }, -} - -var _ = Describe("V3 Config files", func() { - Describe("serialization", func() { - It("creates a JSON string from the config object", func() { - jsonData, err := exampleData.JsonMarshalV3() - - Expect(err).NotTo(HaveOccurred()) - Expect(stripWhitespace(string(jsonData))).To(ContainSubstring(stripWhitespace(exampleJSON))) - }) - }) - - Describe("parsing", func() { - It("returns an error when the JSON is invalid", func() { - configData := NewData() - err := configData.JsonUnmarshalV3([]byte(`{ "not_valid": ### }`)) - - Expect(err).To(HaveOccurred()) - }) - - It("creates a config object from valid JSON", func() { - configData := NewData() - err := configData.JsonUnmarshalV3([]byte(exampleJSON)) - - Expect(err).NotTo(HaveOccurred()) - Expect(configData).To(Equal(exampleData)) - }) - }) -}) - -var whiteSpaceRegex = regexp.MustCompile(`\s+`) - -func stripWhitespace(input string) string { - return whiteSpaceRegex.ReplaceAllString(input, "") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_repository.go deleted file mode 100644 index 2defc81..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_repository.go +++ /dev/null @@ -1,478 +0,0 @@ -package core_config - -import ( - "strings" - "sync" - - "github.com/cloudfoundry/cli/cf/configuration" - "github.com/cloudfoundry/cli/cf/models" -) - -type ConfigRepository struct { - data *Data - mutex *sync.RWMutex - initOnce *sync.Once - persistor configuration.Persistor - onError func(error) -} - -func NewRepositoryFromFilepath(filepath string, errorHandler func(error)) Repository { - if errorHandler == nil { - return nil - } - return NewRepositoryFromPersistor(configuration.NewDiskPersistor(filepath), errorHandler) -} - -func NewRepositoryFromPersistor(persistor configuration.Persistor, errorHandler func(error)) Repository { - data := NewData() - if !persistor.Exists() { - //set default plugin repo - data.PluginRepos = append(data.PluginRepos, models.PluginRepo{ - Name: "CF-Community", - Url: "http://plugins.cloudfoundry.org", - }) - } - - return &ConfigRepository{ - data: data, - mutex: new(sync.RWMutex), - initOnce: new(sync.Once), - persistor: persistor, - onError: errorHandler, - } -} - -type Reader interface { - ApiEndpoint() string - ApiVersion() string - HasAPIEndpoint() bool - - AuthenticationEndpoint() string - LoggregatorEndpoint() string - DopplerEndpoint() string - UaaEndpoint() string - AccessToken() string - RefreshToken() string - - OrganizationFields() models.OrganizationFields - HasOrganization() bool - - SpaceFields() models.SpaceFields - HasSpace() bool - - Username() string - UserGuid() string - UserEmail() string - IsLoggedIn() bool - IsSSLDisabled() bool - IsMinApiVersion(string) bool - IsMinCliVersion(string) bool - MinCliVersion() string - MinRecommendedCliVersion() string - - AsyncTimeout() uint - Trace() string - - ColorEnabled() string - - Locale() string - - PluginRepos() []models.PluginRepo -} - -type ReadWriter interface { - Reader - ClearSession() - SetApiEndpoint(string) - SetApiVersion(string) - SetMinCliVersion(string) - SetMinRecommendedCliVersion(string) - SetAuthenticationEndpoint(string) - SetLoggregatorEndpoint(string) - SetDopplerEndpoint(string) - SetUaaEndpoint(string) - SetAccessToken(string) - SetRefreshToken(string) - SetOrganizationFields(models.OrganizationFields) - SetSpaceFields(models.SpaceFields) - SetSSLDisabled(bool) - SetAsyncTimeout(uint) - SetTrace(string) - SetColorEnabled(string) - SetLocale(string) - SetPluginRepo(models.PluginRepo) - UnSetPluginRepo(int) -} - -type Repository interface { - ReadWriter - Close() -} - -// ACCESS CONTROL - -func (c *ConfigRepository) init() { - c.initOnce.Do(func() { - err := c.persistor.Load(c.data) - if err != nil { - c.onError(err) - } - }) -} - -func (c *ConfigRepository) read(cb func()) { - c.mutex.RLock() - defer c.mutex.RUnlock() - c.init() - - cb() -} - -func (c *ConfigRepository) write(cb func()) { - c.mutex.Lock() - defer c.mutex.Unlock() - c.init() - - cb() - - err := c.persistor.Save(c.data) - if err != nil { - c.onError(err) - } -} - -// CLOSERS - -func (c *ConfigRepository) Close() { - c.read(func() { - // perform a read to ensure write lock has been cleared - }) -} - -// GETTERS - -func (c *ConfigRepository) ApiVersion() (apiVersion string) { - c.read(func() { - apiVersion = c.data.ApiVersion - }) - return -} - -func (c *ConfigRepository) AuthenticationEndpoint() (authEndpoint string) { - c.read(func() { - authEndpoint = c.data.AuthorizationEndpoint - }) - return -} - -func (c *ConfigRepository) LoggregatorEndpoint() (logEndpoint string) { - c.read(func() { - logEndpoint = c.data.LoggregatorEndPoint - }) - return -} - -func (c *ConfigRepository) DopplerEndpoint() (logEndpoint string) { - //revert this in v7.0, once CC advertise doppler endpoint, and - //everyone has migrated from loggregator to doppler - - // c.read(func() { - // logEndpoint = c.data.DopplerEndPoint - // }) - c.read(func() { - logEndpoint = c.data.LoggregatorEndPoint - }) - - return strings.Replace(logEndpoint, "loggregator", "doppler", 1) -} - -func (c *ConfigRepository) UaaEndpoint() (uaaEndpoint string) { - c.read(func() { - uaaEndpoint = c.data.UaaEndpoint - }) - return -} - -func (c *ConfigRepository) ApiEndpoint() (apiEndpoint string) { - c.read(func() { - apiEndpoint = c.data.Target - }) - return -} - -func (c *ConfigRepository) HasAPIEndpoint() (hasEndpoint bool) { - c.read(func() { - hasEndpoint = c.data.ApiVersion != "" && c.data.Target != "" - }) - return -} - -func (c *ConfigRepository) AccessToken() (accessToken string) { - c.read(func() { - accessToken = c.data.AccessToken - }) - return -} - -func (c *ConfigRepository) RefreshToken() (refreshToken string) { - c.read(func() { - refreshToken = c.data.RefreshToken - }) - return -} - -func (c *ConfigRepository) OrganizationFields() (org models.OrganizationFields) { - c.read(func() { - org = c.data.OrganizationFields - }) - return -} - -func (c *ConfigRepository) SpaceFields() (space models.SpaceFields) { - c.read(func() { - space = c.data.SpaceFields - }) - return -} - -func (c *ConfigRepository) UserEmail() (email string) { - c.read(func() { - email = NewTokenInfo(c.data.AccessToken).Email - }) - return -} - -func (c *ConfigRepository) UserGuid() (guid string) { - c.read(func() { - guid = NewTokenInfo(c.data.AccessToken).UserGuid - }) - return -} - -func (c *ConfigRepository) Username() (name string) { - c.read(func() { - name = NewTokenInfo(c.data.AccessToken).Username - }) - return -} - -func (c *ConfigRepository) IsLoggedIn() (loggedIn bool) { - c.read(func() { - loggedIn = c.data.AccessToken != "" - }) - return -} - -func (c *ConfigRepository) HasOrganization() (hasOrg bool) { - c.read(func() { - hasOrg = c.data.OrganizationFields.Guid != "" && c.data.OrganizationFields.Name != "" - }) - return -} - -func (c *ConfigRepository) HasSpace() (hasSpace bool) { - c.read(func() { - hasSpace = c.data.SpaceFields.Guid != "" && c.data.SpaceFields.Name != "" - }) - return -} - -func (c *ConfigRepository) IsSSLDisabled() (isSSLDisabled bool) { - c.read(func() { - isSSLDisabled = c.data.SSLDisabled - }) - return -} - -func (c *ConfigRepository) IsMinApiVersion(v string) bool { - var apiVersion string - c.read(func() { - apiVersion = c.data.ApiVersion - }) - return apiVersion >= v -} - -func (c *ConfigRepository) IsMinCliVersion(version string) bool { - if version == "BUILT_FROM_SOURCE" { - return true - } - var minCliVersion string - c.read(func() { - minCliVersion = c.data.MinCliVersion - }) - return version >= minCliVersion -} - -func (c *ConfigRepository) MinCliVersion() (minCliVersion string) { - c.read(func() { - minCliVersion = c.data.MinCliVersion - }) - return -} - -func (c *ConfigRepository) MinRecommendedCliVersion() (minRecommendedCliVersion string) { - c.read(func() { - minRecommendedCliVersion = c.data.MinRecommendedCliVersion - }) - return -} - -func (c *ConfigRepository) AsyncTimeout() (timeout uint) { - c.read(func() { - timeout = c.data.AsyncTimeout - }) - return -} - -func (c *ConfigRepository) Trace() (trace string) { - c.read(func() { - trace = c.data.Trace - }) - return -} - -func (c *ConfigRepository) ColorEnabled() (enabled string) { - c.read(func() { - enabled = c.data.ColorEnabled - }) - return -} - -func (c *ConfigRepository) Locale() (locale string) { - c.read(func() { - locale = c.data.Locale - }) - return -} - -func (c *ConfigRepository) PluginRepos() (repos []models.PluginRepo) { - c.read(func() { - repos = c.data.PluginRepos - }) - return -} - -// SETTERS - -func (c *ConfigRepository) ClearSession() { - c.write(func() { - c.data.AccessToken = "" - c.data.RefreshToken = "" - c.data.OrganizationFields = models.OrganizationFields{} - c.data.SpaceFields = models.SpaceFields{} - }) -} - -func (c *ConfigRepository) SetApiEndpoint(endpoint string) { - c.write(func() { - c.data.Target = endpoint - }) -} - -func (c *ConfigRepository) SetApiVersion(version string) { - c.write(func() { - c.data.ApiVersion = version - }) -} - -func (c *ConfigRepository) SetMinCliVersion(version string) { - c.write(func() { - c.data.MinCliVersion = version - }) -} - -func (c *ConfigRepository) SetMinRecommendedCliVersion(version string) { - c.write(func() { - c.data.MinRecommendedCliVersion = version - }) -} - -func (c *ConfigRepository) SetAuthenticationEndpoint(endpoint string) { - c.write(func() { - c.data.AuthorizationEndpoint = endpoint - }) -} - -func (c *ConfigRepository) SetLoggregatorEndpoint(endpoint string) { - c.write(func() { - c.data.LoggregatorEndPoint = endpoint - }) -} - -func (c *ConfigRepository) SetDopplerEndpoint(endpoint string) { - c.write(func() { - c.data.DopplerEndPoint = endpoint - }) -} - -func (c *ConfigRepository) SetUaaEndpoint(uaaEndpoint string) { - c.write(func() { - c.data.UaaEndpoint = uaaEndpoint - }) -} - -func (c *ConfigRepository) SetAccessToken(token string) { - c.write(func() { - c.data.AccessToken = token - }) -} - -func (c *ConfigRepository) SetRefreshToken(token string) { - c.write(func() { - c.data.RefreshToken = token - }) -} - -func (c *ConfigRepository) SetOrganizationFields(org models.OrganizationFields) { - c.write(func() { - c.data.OrganizationFields = org - }) -} - -func (c *ConfigRepository) SetSpaceFields(space models.SpaceFields) { - c.write(func() { - c.data.SpaceFields = space - }) -} - -func (c *ConfigRepository) SetSSLDisabled(disabled bool) { - c.write(func() { - c.data.SSLDisabled = disabled - }) -} - -func (c *ConfigRepository) SetAsyncTimeout(timeout uint) { - c.write(func() { - c.data.AsyncTimeout = timeout - }) -} - -func (c *ConfigRepository) SetTrace(value string) { - c.write(func() { - c.data.Trace = value - }) -} - -func (c *ConfigRepository) SetColorEnabled(enabled string) { - c.write(func() { - c.data.ColorEnabled = enabled - }) -} - -func (c *ConfigRepository) SetLocale(locale string) { - c.write(func() { - c.data.Locale = locale - }) -} - -func (c *ConfigRepository) SetPluginRepo(repo models.PluginRepo) { - c.write(func() { - c.data.PluginRepos = append(c.data.PluginRepos, repo) - }) -} - -func (c *ConfigRepository) UnSetPluginRepo(index int) { - c.write(func() { - c.data.PluginRepos = append(c.data.PluginRepos[:index], c.data.PluginRepos[index+1:]...) - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_repository_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_repository_test.go deleted file mode 100644 index 045ec0b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/config_repository_test.go +++ /dev/null @@ -1,198 +0,0 @@ -package core_config_test - -import ( - "fmt" - "os" - "path/filepath" - "time" - - . "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/fileutils" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - "github.com/cloudfoundry/cli/testhelpers/maker" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Configuration Repository", func() { - var config Repository - var repo *testconfig.FakePersistor - - BeforeEach(func() { - repo = testconfig.NewFakePersistor() - repo.LoadReturns.Data = NewData() - config = testconfig.NewRepository() - }) - - It("is safe for concurrent reading and writing", func() { - swapValLoop := func(config Repository) { - for { - val := config.ApiEndpoint() - - switch val { - case "foo": - config.SetApiEndpoint("bar") - case "bar": - config.SetApiEndpoint("foo") - default: - panic(fmt.Sprintf("WAT: %s", val)) - } - } - } - - config.SetApiEndpoint("foo") - - go swapValLoop(config) - go swapValLoop(config) - go swapValLoop(config) - go swapValLoop(config) - - time.Sleep(10 * time.Millisecond) - }) - - It("returns nil repository if no error handler provided", func() { - config = NewRepositoryFromFilepath("this/shouldnt/matter", nil) - Expect(config).To(BeNil()) - }) - - // TODO - test ClearTokens et al - It("has acccessor methods for all config fields", func() { - config.SetApiEndpoint("http://api.the-endpoint") - Expect(config.ApiEndpoint()).To(Equal("http://api.the-endpoint")) - - config.SetApiVersion("3") - Expect(config.ApiVersion()).To(Equal("3")) - - config.SetAuthenticationEndpoint("http://auth.the-endpoint") - Expect(config.AuthenticationEndpoint()).To(Equal("http://auth.the-endpoint")) - - config.SetLoggregatorEndpoint("http://loggregator.the-endpoint") - Expect(config.LoggregatorEndpoint()).To(Equal("http://loggregator.the-endpoint")) - - config.SetDopplerEndpoint("http://doppler.the-endpoint") - Expect(config.DopplerEndpoint()).To(Equal("http://doppler.the-endpoint")) - - config.SetUaaEndpoint("http://uaa.the-endpoint") - Expect(config.UaaEndpoint()).To(Equal("http://uaa.the-endpoint")) - - config.SetAccessToken("the-token") - Expect(config.AccessToken()).To(Equal("the-token")) - - config.SetRefreshToken("the-token") - Expect(config.RefreshToken()).To(Equal("the-token")) - - organization := maker.NewOrgFields(maker.Overrides{"name": "the-org"}) - config.SetOrganizationFields(organization) - Expect(config.OrganizationFields()).To(Equal(organization)) - - space := maker.NewSpaceFields(maker.Overrides{"name": "the-space"}) - config.SetSpaceFields(space) - Expect(config.SpaceFields()).To(Equal(space)) - - config.SetSSLDisabled(false) - Expect(config.IsSSLDisabled()).To(BeFalse()) - - config.SetLocale("en_US") - Expect(config.Locale()).To(Equal("en_US")) - - config.SetPluginRepo(models.PluginRepo{Name: "repo", Url: "nowhere.com"}) - Expect(config.PluginRepos()[0].Name).To(Equal("repo")) - Expect(config.PluginRepos()[0].Url).To(Equal("nowhere.com")) - - Expect(config.IsMinApiVersion("3.1")).To(Equal(false)) - - config.SetMinCliVersion("6.0.0") - Expect(config.IsMinCliVersion("5.0.0")).To(Equal(false)) - Expect(config.MinCliVersion()).To(Equal("6.0.0")) - - config.SetMinRecommendedCliVersion("6.9.0") - Expect(config.MinRecommendedCliVersion()).To(Equal("6.9.0")) - }) - - Describe("HasAPIEndpoint", func() { - Context("when both endpoint and version are set", func() { - BeforeEach(func() { - config.SetApiEndpoint("http://example.org") - config.SetApiVersion("42.1.2.3") - }) - It("returns true", func() { - Expect(config.HasAPIEndpoint()).To(BeTrue()) - }) - }) - - Context("when endpoint is not set", func() { - BeforeEach(func() { - config.SetApiVersion("42.1.2.3") - }) - It("returns false", func() { - Expect(config.HasAPIEndpoint()).To(BeFalse()) - }) - }) - - Context("when version is not set", func() { - BeforeEach(func() { - config.SetApiEndpoint("http://example.org") - }) - It("returns false", func() { - Expect(config.HasAPIEndpoint()).To(BeFalse()) - }) - }) - }) - - It("User has a valid Access Token", func() { - config.SetAccessToken("bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJjNDE4OTllNS1kZTE1LTQ5NGQtYWFiNC04ZmNlYzUxN2UwMDUiLCJzdWIiOiI3NzJkZGEzZi02NjlmLTQyNzYtYjJiZC05MDQ4NmFiZTFmNmYiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiI3NzJkZGEzZi02NjlmLTQyNzYtYjJiZC05MDQ4NmFiZTFmNmYiLCJ1c2VyX25hbWUiOiJ1c2VyMUBleGFtcGxlLmNvbSIsImVtYWlsIjoidXNlcjFAZXhhbXBsZS5jb20iLCJpYXQiOjEzNzcwMjgzNTYsImV4cCI6MTM3NzAzNTU1NiwiaXNzIjoiaHR0cHM6Ly91YWEuYXJib3JnbGVuLmNmLWFwcC5jb20vb2F1dGgvdG9rZW4iLCJhdWQiOlsib3BlbmlkIiwiY2xvdWRfY29udHJvbGxlciIsInBhc3N3b3JkIl19.kjFJHi0Qir9kfqi2eyhHy6kdewhicAFu8hrPR1a5AxFvxGB45slKEjuP0_72cM_vEYICgZn3PcUUkHU9wghJO9wjZ6kiIKK1h5f2K9g-Iprv9BbTOWUODu1HoLIvg2TtGsINxcRYy_8LW1RtvQc1b4dBPoopaEH4no-BIzp0E5E") - Expect(config.UserGuid()).To(Equal("772dda3f-669f-4276-b2bd-90486abe1f6f")) - Expect(config.UserEmail()).To(Equal("user1@example.com")) - }) - - It("User has an invalid Access Token", func() { - config.SetAccessToken("bearer") - Expect(config.UserGuid()).To(BeEmpty()) - Expect(config.UserEmail()).To(BeEmpty()) - - config.SetAccessToken("bearer eyJhbGciOiJSUzI1NiJ9") - Expect(config.UserGuid()).To(BeEmpty()) - Expect(config.UserEmail()).To(BeEmpty()) - }) - - It("has sane defaults when there is no config to read", func() { - withFakeHome(func(configPath string) { - config = NewRepositoryFromFilepath(configPath, func(err error) { - panic(err) - }) - - Expect(config.ApiEndpoint()).To(Equal("")) - Expect(config.ApiVersion()).To(Equal("")) - Expect(config.AuthenticationEndpoint()).To(Equal("")) - Expect(config.AccessToken()).To(Equal("")) - }) - }) - - Context("when the configuration version is older than the current version", func() { - It("returns a new empty config", func() { - withConfigFixture("outdated-config", func(configPath string) { - config = NewRepositoryFromFilepath(configPath, func(err error) { - panic(err) - }) - - Expect(config.ApiEndpoint()).To(Equal("")) - }) - }) - }) -}) - -func withFakeHome(callback func(dirPath string)) { - fileutils.TempDir("test-config", func(dir string, err error) { - if err != nil { - Fail("Couldn't create tmp file") - } - callback(filepath.Join(dir, ".cf", "config.json")) - }) -} - -func withConfigFixture(name string, callback func(dirPath string)) { - cwd, err := os.Getwd() - Expect(err).NotTo(HaveOccurred()) - callback(filepath.Join(cwd, "..", "..", "..", "fixtures", "config", name, ".cf", "config.json")) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/core_config_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/core_config_suite_test.go deleted file mode 100644 index 1a13f05..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/core_config/core_config_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package core_config_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCoreConfig(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "CoreConfig Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/fakes/fake_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/fakes/fake_repository.go deleted file mode 100644 index dc0f766..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/fakes/fake_repository.go +++ /dev/null @@ -1,1139 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - "sync" -) - -type FakeRepository struct { - ApiEndpointStub func() string - apiEndpointMutex sync.RWMutex - apiEndpointArgsForCall []struct{} - apiEndpointReturns struct { - result1 string - } - ApiVersionStub func() string - apiVersionMutex sync.RWMutex - apiVersionArgsForCall []struct{} - apiVersionReturns struct { - result1 string - } - HasAPIEndpointStub func() bool - hasAPIEndpointMutex sync.RWMutex - hasAPIEndpointArgsForCall []struct{} - hasAPIEndpointReturns struct { - result1 bool - } - AuthenticationEndpointStub func() string - authenticationEndpointMutex sync.RWMutex - authenticationEndpointArgsForCall []struct{} - authenticationEndpointReturns struct { - result1 string - } - LoggregatorEndpointStub func() string - loggregatorEndpointMutex sync.RWMutex - loggregatorEndpointArgsForCall []struct{} - loggregatorEndpointReturns struct { - result1 string - } - UaaEndpointStub func() string - uaaEndpointMutex sync.RWMutex - uaaEndpointArgsForCall []struct{} - uaaEndpointReturns struct { - result1 string - } - AccessTokenStub func() string - accessTokenMutex sync.RWMutex - accessTokenArgsForCall []struct{} - accessTokenReturns struct { - result1 string - } - RefreshTokenStub func() string - refreshTokenMutex sync.RWMutex - refreshTokenArgsForCall []struct{} - refreshTokenReturns struct { - result1 string - } - OrganizationFieldsStub func() models.OrganizationFields - organizationFieldsMutex sync.RWMutex - organizationFieldsArgsForCall []struct{} - organizationFieldsReturns struct { - result1 models.OrganizationFields - } - HasOrganizationStub func() bool - hasOrganizationMutex sync.RWMutex - hasOrganizationArgsForCall []struct{} - hasOrganizationReturns struct { - result1 bool - } - SpaceFieldsStub func() models.SpaceFields - spaceFieldsMutex sync.RWMutex - spaceFieldsArgsForCall []struct{} - spaceFieldsReturns struct { - result1 models.SpaceFields - } - HasSpaceStub func() bool - hasSpaceMutex sync.RWMutex - hasSpaceArgsForCall []struct{} - hasSpaceReturns struct { - result1 bool - } - UsernameStub func() string - usernameMutex sync.RWMutex - usernameArgsForCall []struct{} - usernameReturns struct { - result1 string - } - UserGuidStub func() string - userGuidMutex sync.RWMutex - userGuidArgsForCall []struct{} - userGuidReturns struct { - result1 string - } - UserEmailStub func() string - userEmailMutex sync.RWMutex - userEmailArgsForCall []struct{} - userEmailReturns struct { - result1 string - } - IsLoggedInStub func() bool - isLoggedInMutex sync.RWMutex - isLoggedInArgsForCall []struct{} - isLoggedInReturns struct { - result1 bool - } - IsSSLDisabledStub func() bool - isSSLDisabledMutex sync.RWMutex - isSSLDisabledArgsForCall []struct{} - isSSLDisabledReturns struct { - result1 bool - } - AsyncTimeoutStub func() uint - asyncTimeoutMutex sync.RWMutex - asyncTimeoutArgsForCall []struct{} - asyncTimeoutReturns struct { - result1 uint - } - TraceStub func() string - traceMutex sync.RWMutex - traceArgsForCall []struct{} - traceReturns struct { - result1 string - } - ColorEnabledStub func() string - colorEnabledMutex sync.RWMutex - colorEnabledArgsForCall []struct{} - colorEnabledReturns struct { - result1 string - } - LocaleStub func() string - localeMutex sync.RWMutex - localeArgsForCall []struct{} - localeReturns struct { - result1 string - } - PluginsStub func() map[string]string - pluginsMutex sync.RWMutex - pluginsArgsForCall []struct{} - pluginsReturns struct { - result1 map[string]string - } - UserHomePathStub func() string - userHomePathMutex sync.RWMutex - userHomePathArgsForCall []struct{} - userHomePathReturns struct { - result1 string - } - ClearSessionStub func() - clearSessionMutex sync.RWMutex - clearSessionArgsForCall []struct{} - SetApiEndpointStub func(string) - setApiEndpointMutex sync.RWMutex - setApiEndpointArgsForCall []struct { - arg1 string - } - SetApiVersionStub func(string) - setApiVersionMutex sync.RWMutex - setApiVersionArgsForCall []struct { - arg1 string - } - SetAuthenticationEndpointStub func(string) - setAuthenticationEndpointMutex sync.RWMutex - setAuthenticationEndpointArgsForCall []struct { - arg1 string - } - SetLoggregatorEndpointStub func(string) - setLoggregatorEndpointMutex sync.RWMutex - setLoggregatorEndpointArgsForCall []struct { - arg1 string - } - SetUaaEndpointStub func(string) - setUaaEndpointMutex sync.RWMutex - setUaaEndpointArgsForCall []struct { - arg1 string - } - SetAccessTokenStub func(string) - setAccessTokenMutex sync.RWMutex - setAccessTokenArgsForCall []struct { - arg1 string - } - SetRefreshTokenStub func(string) - setRefreshTokenMutex sync.RWMutex - setRefreshTokenArgsForCall []struct { - arg1 string - } - SetOrganizationFieldsStub func(models.OrganizationFields) - setOrganizationFieldsMutex sync.RWMutex - setOrganizationFieldsArgsForCall []struct { - arg1 models.OrganizationFields - } - SetSpaceFieldsStub func(models.SpaceFields) - setSpaceFieldsMutex sync.RWMutex - setSpaceFieldsArgsForCall []struct { - arg1 models.SpaceFields - } - SetSSLDisabledStub func(bool) - setSSLDisabledMutex sync.RWMutex - setSSLDisabledArgsForCall []struct { - arg1 bool - } - SetAsyncTimeoutStub func(uint) - setAsyncTimeoutMutex sync.RWMutex - setAsyncTimeoutArgsForCall []struct { - arg1 uint - } - SetTraceStub func(string) - setTraceMutex sync.RWMutex - setTraceArgsForCall []struct { - arg1 string - } - SetColorEnabledStub func(string) - setColorEnabledMutex sync.RWMutex - setColorEnabledArgsForCall []struct { - arg1 string - } - SetLocaleStub func(string) - setLocaleMutex sync.RWMutex - setLocaleArgsForCall []struct { - arg1 string - } - SetPluginStub func(string, string) - setPluginMutex sync.RWMutex - setPluginArgsForCall []struct { - arg1 string - arg2 string - } - CloseStub func() - closeMutex sync.RWMutex - closeArgsForCall []struct{} -} - -func (fake *FakeRepository) ApiEndpoint() string { - fake.apiEndpointMutex.Lock() - defer fake.apiEndpointMutex.Unlock() - fake.apiEndpointArgsForCall = append(fake.apiEndpointArgsForCall, struct{}{}) - if fake.ApiEndpointStub != nil { - return fake.ApiEndpointStub() - } else { - return fake.apiEndpointReturns.result1 - } -} - -func (fake *FakeRepository) ApiEndpointCallCount() int { - fake.apiEndpointMutex.RLock() - defer fake.apiEndpointMutex.RUnlock() - return len(fake.apiEndpointArgsForCall) -} - -func (fake *FakeRepository) ApiEndpointReturns(result1 string) { - fake.apiEndpointReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) ApiVersion() string { - fake.apiVersionMutex.Lock() - defer fake.apiVersionMutex.Unlock() - fake.apiVersionArgsForCall = append(fake.apiVersionArgsForCall, struct{}{}) - if fake.ApiVersionStub != nil { - return fake.ApiVersionStub() - } else { - return fake.apiVersionReturns.result1 - } -} - -func (fake *FakeRepository) ApiVersionCallCount() int { - fake.apiVersionMutex.RLock() - defer fake.apiVersionMutex.RUnlock() - return len(fake.apiVersionArgsForCall) -} - -func (fake *FakeRepository) ApiVersionReturns(result1 string) { - fake.apiVersionReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) HasAPIEndpoint() bool { - fake.hasAPIEndpointMutex.Lock() - defer fake.hasAPIEndpointMutex.Unlock() - fake.hasAPIEndpointArgsForCall = append(fake.hasAPIEndpointArgsForCall, struct{}{}) - if fake.HasAPIEndpointStub != nil { - return fake.HasAPIEndpointStub() - } else { - return fake.hasAPIEndpointReturns.result1 - } -} - -func (fake *FakeRepository) HasAPIEndpointCallCount() int { - fake.hasAPIEndpointMutex.RLock() - defer fake.hasAPIEndpointMutex.RUnlock() - return len(fake.hasAPIEndpointArgsForCall) -} - -func (fake *FakeRepository) HasAPIEndpointReturns(result1 bool) { - fake.hasAPIEndpointReturns = struct { - result1 bool - }{result1} -} - -func (fake *FakeRepository) AuthenticationEndpoint() string { - fake.authenticationEndpointMutex.Lock() - defer fake.authenticationEndpointMutex.Unlock() - fake.authenticationEndpointArgsForCall = append(fake.authenticationEndpointArgsForCall, struct{}{}) - if fake.AuthenticationEndpointStub != nil { - return fake.AuthenticationEndpointStub() - } else { - return fake.authenticationEndpointReturns.result1 - } -} - -func (fake *FakeRepository) AuthenticationEndpointCallCount() int { - fake.authenticationEndpointMutex.RLock() - defer fake.authenticationEndpointMutex.RUnlock() - return len(fake.authenticationEndpointArgsForCall) -} - -func (fake *FakeRepository) AuthenticationEndpointReturns(result1 string) { - fake.authenticationEndpointReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) LoggregatorEndpoint() string { - fake.loggregatorEndpointMutex.Lock() - defer fake.loggregatorEndpointMutex.Unlock() - fake.loggregatorEndpointArgsForCall = append(fake.loggregatorEndpointArgsForCall, struct{}{}) - if fake.LoggregatorEndpointStub != nil { - return fake.LoggregatorEndpointStub() - } else { - return fake.loggregatorEndpointReturns.result1 - } -} - -func (fake *FakeRepository) LoggregatorEndpointCallCount() int { - fake.loggregatorEndpointMutex.RLock() - defer fake.loggregatorEndpointMutex.RUnlock() - return len(fake.loggregatorEndpointArgsForCall) -} - -func (fake *FakeRepository) LoggregatorEndpointReturns(result1 string) { - fake.loggregatorEndpointReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) UaaEndpoint() string { - fake.uaaEndpointMutex.Lock() - defer fake.uaaEndpointMutex.Unlock() - fake.uaaEndpointArgsForCall = append(fake.uaaEndpointArgsForCall, struct{}{}) - if fake.UaaEndpointStub != nil { - return fake.UaaEndpointStub() - } else { - return fake.uaaEndpointReturns.result1 - } -} - -func (fake *FakeRepository) UaaEndpointCallCount() int { - fake.uaaEndpointMutex.RLock() - defer fake.uaaEndpointMutex.RUnlock() - return len(fake.uaaEndpointArgsForCall) -} - -func (fake *FakeRepository) UaaEndpointReturns(result1 string) { - fake.uaaEndpointReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) AccessToken() string { - fake.accessTokenMutex.Lock() - defer fake.accessTokenMutex.Unlock() - fake.accessTokenArgsForCall = append(fake.accessTokenArgsForCall, struct{}{}) - if fake.AccessTokenStub != nil { - return fake.AccessTokenStub() - } else { - return fake.accessTokenReturns.result1 - } -} - -func (fake *FakeRepository) AccessTokenCallCount() int { - fake.accessTokenMutex.RLock() - defer fake.accessTokenMutex.RUnlock() - return len(fake.accessTokenArgsForCall) -} - -func (fake *FakeRepository) AccessTokenReturns(result1 string) { - fake.accessTokenReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) RefreshToken() string { - fake.refreshTokenMutex.Lock() - defer fake.refreshTokenMutex.Unlock() - fake.refreshTokenArgsForCall = append(fake.refreshTokenArgsForCall, struct{}{}) - if fake.RefreshTokenStub != nil { - return fake.RefreshTokenStub() - } else { - return fake.refreshTokenReturns.result1 - } -} - -func (fake *FakeRepository) RefreshTokenCallCount() int { - fake.refreshTokenMutex.RLock() - defer fake.refreshTokenMutex.RUnlock() - return len(fake.refreshTokenArgsForCall) -} - -func (fake *FakeRepository) RefreshTokenReturns(result1 string) { - fake.refreshTokenReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) OrganizationFields() models.OrganizationFields { - fake.organizationFieldsMutex.Lock() - defer fake.organizationFieldsMutex.Unlock() - fake.organizationFieldsArgsForCall = append(fake.organizationFieldsArgsForCall, struct{}{}) - if fake.OrganizationFieldsStub != nil { - return fake.OrganizationFieldsStub() - } else { - return fake.organizationFieldsReturns.result1 - } -} - -func (fake *FakeRepository) OrganizationFieldsCallCount() int { - fake.organizationFieldsMutex.RLock() - defer fake.organizationFieldsMutex.RUnlock() - return len(fake.organizationFieldsArgsForCall) -} - -func (fake *FakeRepository) OrganizationFieldsReturns(result1 models.OrganizationFields) { - fake.organizationFieldsReturns = struct { - result1 models.OrganizationFields - }{result1} -} - -func (fake *FakeRepository) HasOrganization() bool { - fake.hasOrganizationMutex.Lock() - defer fake.hasOrganizationMutex.Unlock() - fake.hasOrganizationArgsForCall = append(fake.hasOrganizationArgsForCall, struct{}{}) - if fake.HasOrganizationStub != nil { - return fake.HasOrganizationStub() - } else { - return fake.hasOrganizationReturns.result1 - } -} - -func (fake *FakeRepository) HasOrganizationCallCount() int { - fake.hasOrganizationMutex.RLock() - defer fake.hasOrganizationMutex.RUnlock() - return len(fake.hasOrganizationArgsForCall) -} - -func (fake *FakeRepository) HasOrganizationReturns(result1 bool) { - fake.hasOrganizationReturns = struct { - result1 bool - }{result1} -} - -func (fake *FakeRepository) SpaceFields() models.SpaceFields { - fake.spaceFieldsMutex.Lock() - defer fake.spaceFieldsMutex.Unlock() - fake.spaceFieldsArgsForCall = append(fake.spaceFieldsArgsForCall, struct{}{}) - if fake.SpaceFieldsStub != nil { - return fake.SpaceFieldsStub() - } else { - return fake.spaceFieldsReturns.result1 - } -} - -func (fake *FakeRepository) SpaceFieldsCallCount() int { - fake.spaceFieldsMutex.RLock() - defer fake.spaceFieldsMutex.RUnlock() - return len(fake.spaceFieldsArgsForCall) -} - -func (fake *FakeRepository) SpaceFieldsReturns(result1 models.SpaceFields) { - fake.spaceFieldsReturns = struct { - result1 models.SpaceFields - }{result1} -} - -func (fake *FakeRepository) HasSpace() bool { - fake.hasSpaceMutex.Lock() - defer fake.hasSpaceMutex.Unlock() - fake.hasSpaceArgsForCall = append(fake.hasSpaceArgsForCall, struct{}{}) - if fake.HasSpaceStub != nil { - return fake.HasSpaceStub() - } else { - return fake.hasSpaceReturns.result1 - } -} - -func (fake *FakeRepository) HasSpaceCallCount() int { - fake.hasSpaceMutex.RLock() - defer fake.hasSpaceMutex.RUnlock() - return len(fake.hasSpaceArgsForCall) -} - -func (fake *FakeRepository) HasSpaceReturns(result1 bool) { - fake.hasSpaceReturns = struct { - result1 bool - }{result1} -} - -func (fake *FakeRepository) Username() string { - fake.usernameMutex.Lock() - defer fake.usernameMutex.Unlock() - fake.usernameArgsForCall = append(fake.usernameArgsForCall, struct{}{}) - if fake.UsernameStub != nil { - return fake.UsernameStub() - } else { - return fake.usernameReturns.result1 - } -} - -func (fake *FakeRepository) UsernameCallCount() int { - fake.usernameMutex.RLock() - defer fake.usernameMutex.RUnlock() - return len(fake.usernameArgsForCall) -} - -func (fake *FakeRepository) UsernameReturns(result1 string) { - fake.usernameReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) UserGuid() string { - fake.userGuidMutex.Lock() - defer fake.userGuidMutex.Unlock() - fake.userGuidArgsForCall = append(fake.userGuidArgsForCall, struct{}{}) - if fake.UserGuidStub != nil { - return fake.UserGuidStub() - } else { - return fake.userGuidReturns.result1 - } -} - -func (fake *FakeRepository) UserGuidCallCount() int { - fake.userGuidMutex.RLock() - defer fake.userGuidMutex.RUnlock() - return len(fake.userGuidArgsForCall) -} - -func (fake *FakeRepository) UserGuidReturns(result1 string) { - fake.userGuidReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) UserEmail() string { - fake.userEmailMutex.Lock() - defer fake.userEmailMutex.Unlock() - fake.userEmailArgsForCall = append(fake.userEmailArgsForCall, struct{}{}) - if fake.UserEmailStub != nil { - return fake.UserEmailStub() - } else { - return fake.userEmailReturns.result1 - } -} - -func (fake *FakeRepository) UserEmailCallCount() int { - fake.userEmailMutex.RLock() - defer fake.userEmailMutex.RUnlock() - return len(fake.userEmailArgsForCall) -} - -func (fake *FakeRepository) UserEmailReturns(result1 string) { - fake.userEmailReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) IsLoggedIn() bool { - fake.isLoggedInMutex.Lock() - defer fake.isLoggedInMutex.Unlock() - fake.isLoggedInArgsForCall = append(fake.isLoggedInArgsForCall, struct{}{}) - if fake.IsLoggedInStub != nil { - return fake.IsLoggedInStub() - } else { - return fake.isLoggedInReturns.result1 - } -} - -func (fake *FakeRepository) IsLoggedInCallCount() int { - fake.isLoggedInMutex.RLock() - defer fake.isLoggedInMutex.RUnlock() - return len(fake.isLoggedInArgsForCall) -} - -func (fake *FakeRepository) IsLoggedInReturns(result1 bool) { - fake.isLoggedInReturns = struct { - result1 bool - }{result1} -} - -func (fake *FakeRepository) IsSSLDisabled() bool { - fake.isSSLDisabledMutex.Lock() - defer fake.isSSLDisabledMutex.Unlock() - fake.isSSLDisabledArgsForCall = append(fake.isSSLDisabledArgsForCall, struct{}{}) - if fake.IsSSLDisabledStub != nil { - return fake.IsSSLDisabledStub() - } else { - return fake.isSSLDisabledReturns.result1 - } -} - -func (fake *FakeRepository) IsSSLDisabledCallCount() int { - fake.isSSLDisabledMutex.RLock() - defer fake.isSSLDisabledMutex.RUnlock() - return len(fake.isSSLDisabledArgsForCall) -} - -func (fake *FakeRepository) IsSSLDisabledReturns(result1 bool) { - fake.isSSLDisabledReturns = struct { - result1 bool - }{result1} -} - -func (fake *FakeRepository) AsyncTimeout() uint { - fake.asyncTimeoutMutex.Lock() - defer fake.asyncTimeoutMutex.Unlock() - fake.asyncTimeoutArgsForCall = append(fake.asyncTimeoutArgsForCall, struct{}{}) - if fake.AsyncTimeoutStub != nil { - return fake.AsyncTimeoutStub() - } else { - return fake.asyncTimeoutReturns.result1 - } -} - -func (fake *FakeRepository) AsyncTimeoutCallCount() int { - fake.asyncTimeoutMutex.RLock() - defer fake.asyncTimeoutMutex.RUnlock() - return len(fake.asyncTimeoutArgsForCall) -} - -func (fake *FakeRepository) AsyncTimeoutReturns(result1 uint) { - fake.asyncTimeoutReturns = struct { - result1 uint - }{result1} -} - -func (fake *FakeRepository) Trace() string { - fake.traceMutex.Lock() - defer fake.traceMutex.Unlock() - fake.traceArgsForCall = append(fake.traceArgsForCall, struct{}{}) - if fake.TraceStub != nil { - return fake.TraceStub() - } else { - return fake.traceReturns.result1 - } -} - -func (fake *FakeRepository) TraceCallCount() int { - fake.traceMutex.RLock() - defer fake.traceMutex.RUnlock() - return len(fake.traceArgsForCall) -} - -func (fake *FakeRepository) TraceReturns(result1 string) { - fake.traceReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) ColorEnabled() string { - fake.colorEnabledMutex.Lock() - defer fake.colorEnabledMutex.Unlock() - fake.colorEnabledArgsForCall = append(fake.colorEnabledArgsForCall, struct{}{}) - if fake.ColorEnabledStub != nil { - return fake.ColorEnabledStub() - } else { - return fake.colorEnabledReturns.result1 - } -} - -func (fake *FakeRepository) ColorEnabledCallCount() int { - fake.colorEnabledMutex.RLock() - defer fake.colorEnabledMutex.RUnlock() - return len(fake.colorEnabledArgsForCall) -} - -func (fake *FakeRepository) ColorEnabledReturns(result1 string) { - fake.colorEnabledReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) Locale() string { - fake.localeMutex.Lock() - defer fake.localeMutex.Unlock() - fake.localeArgsForCall = append(fake.localeArgsForCall, struct{}{}) - if fake.LocaleStub != nil { - return fake.LocaleStub() - } else { - return fake.localeReturns.result1 - } -} - -func (fake *FakeRepository) LocaleCallCount() int { - fake.localeMutex.RLock() - defer fake.localeMutex.RUnlock() - return len(fake.localeArgsForCall) -} - -func (fake *FakeRepository) LocaleReturns(result1 string) { - fake.localeReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) Plugins() map[string]string { - fake.pluginsMutex.Lock() - defer fake.pluginsMutex.Unlock() - fake.pluginsArgsForCall = append(fake.pluginsArgsForCall, struct{}{}) - if fake.PluginsStub != nil { - return fake.PluginsStub() - } else { - return fake.pluginsReturns.result1 - } -} - -func (fake *FakeRepository) PluginsCallCount() int { - fake.pluginsMutex.RLock() - defer fake.pluginsMutex.RUnlock() - return len(fake.pluginsArgsForCall) -} - -func (fake *FakeRepository) PluginsReturns(result1 map[string]string) { - fake.pluginsReturns = struct { - result1 map[string]string - }{result1} -} - -func (fake *FakeRepository) UserHomePath() string { - fake.userHomePathMutex.Lock() - defer fake.userHomePathMutex.Unlock() - fake.userHomePathArgsForCall = append(fake.userHomePathArgsForCall, struct{}{}) - if fake.UserHomePathStub != nil { - return fake.UserHomePathStub() - } else { - return fake.userHomePathReturns.result1 - } -} - -func (fake *FakeRepository) UserHomePathCallCount() int { - fake.userHomePathMutex.RLock() - defer fake.userHomePathMutex.RUnlock() - return len(fake.userHomePathArgsForCall) -} - -func (fake *FakeRepository) UserHomePathReturns(result1 string) { - fake.userHomePathReturns = struct { - result1 string - }{result1} -} - -func (fake *FakeRepository) ClearSession() { - fake.clearSessionMutex.Lock() - defer fake.clearSessionMutex.Unlock() - fake.clearSessionArgsForCall = append(fake.clearSessionArgsForCall, struct{}{}) - if fake.ClearSessionStub != nil { - fake.ClearSessionStub() - } -} - -func (fake *FakeRepository) ClearSessionCallCount() int { - fake.clearSessionMutex.RLock() - defer fake.clearSessionMutex.RUnlock() - return len(fake.clearSessionArgsForCall) -} - -func (fake *FakeRepository) SetApiEndpoint(arg1 string) { - fake.setApiEndpointMutex.Lock() - defer fake.setApiEndpointMutex.Unlock() - fake.setApiEndpointArgsForCall = append(fake.setApiEndpointArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetApiEndpointStub != nil { - fake.SetApiEndpointStub(arg1) - } -} - -func (fake *FakeRepository) SetApiEndpointCallCount() int { - fake.setApiEndpointMutex.RLock() - defer fake.setApiEndpointMutex.RUnlock() - return len(fake.setApiEndpointArgsForCall) -} - -func (fake *FakeRepository) SetApiEndpointArgsForCall(i int) string { - fake.setApiEndpointMutex.RLock() - defer fake.setApiEndpointMutex.RUnlock() - return fake.setApiEndpointArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetApiVersion(arg1 string) { - fake.setApiVersionMutex.Lock() - defer fake.setApiVersionMutex.Unlock() - fake.setApiVersionArgsForCall = append(fake.setApiVersionArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetApiVersionStub != nil { - fake.SetApiVersionStub(arg1) - } -} - -func (fake *FakeRepository) SetApiVersionCallCount() int { - fake.setApiVersionMutex.RLock() - defer fake.setApiVersionMutex.RUnlock() - return len(fake.setApiVersionArgsForCall) -} - -func (fake *FakeRepository) SetApiVersionArgsForCall(i int) string { - fake.setApiVersionMutex.RLock() - defer fake.setApiVersionMutex.RUnlock() - return fake.setApiVersionArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetAuthenticationEndpoint(arg1 string) { - fake.setAuthenticationEndpointMutex.Lock() - defer fake.setAuthenticationEndpointMutex.Unlock() - fake.setAuthenticationEndpointArgsForCall = append(fake.setAuthenticationEndpointArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetAuthenticationEndpointStub != nil { - fake.SetAuthenticationEndpointStub(arg1) - } -} - -func (fake *FakeRepository) SetAuthenticationEndpointCallCount() int { - fake.setAuthenticationEndpointMutex.RLock() - defer fake.setAuthenticationEndpointMutex.RUnlock() - return len(fake.setAuthenticationEndpointArgsForCall) -} - -func (fake *FakeRepository) SetAuthenticationEndpointArgsForCall(i int) string { - fake.setAuthenticationEndpointMutex.RLock() - defer fake.setAuthenticationEndpointMutex.RUnlock() - return fake.setAuthenticationEndpointArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetLoggregatorEndpoint(arg1 string) { - fake.setLoggregatorEndpointMutex.Lock() - defer fake.setLoggregatorEndpointMutex.Unlock() - fake.setLoggregatorEndpointArgsForCall = append(fake.setLoggregatorEndpointArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetLoggregatorEndpointStub != nil { - fake.SetLoggregatorEndpointStub(arg1) - } -} - -func (fake *FakeRepository) SetLoggregatorEndpointCallCount() int { - fake.setLoggregatorEndpointMutex.RLock() - defer fake.setLoggregatorEndpointMutex.RUnlock() - return len(fake.setLoggregatorEndpointArgsForCall) -} - -func (fake *FakeRepository) SetLoggregatorEndpointArgsForCall(i int) string { - fake.setLoggregatorEndpointMutex.RLock() - defer fake.setLoggregatorEndpointMutex.RUnlock() - return fake.setLoggregatorEndpointArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetUaaEndpoint(arg1 string) { - fake.setUaaEndpointMutex.Lock() - defer fake.setUaaEndpointMutex.Unlock() - fake.setUaaEndpointArgsForCall = append(fake.setUaaEndpointArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetUaaEndpointStub != nil { - fake.SetUaaEndpointStub(arg1) - } -} - -func (fake *FakeRepository) SetUaaEndpointCallCount() int { - fake.setUaaEndpointMutex.RLock() - defer fake.setUaaEndpointMutex.RUnlock() - return len(fake.setUaaEndpointArgsForCall) -} - -func (fake *FakeRepository) SetUaaEndpointArgsForCall(i int) string { - fake.setUaaEndpointMutex.RLock() - defer fake.setUaaEndpointMutex.RUnlock() - return fake.setUaaEndpointArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetAccessToken(arg1 string) { - fake.setAccessTokenMutex.Lock() - defer fake.setAccessTokenMutex.Unlock() - fake.setAccessTokenArgsForCall = append(fake.setAccessTokenArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetAccessTokenStub != nil { - fake.SetAccessTokenStub(arg1) - } -} - -func (fake *FakeRepository) SetAccessTokenCallCount() int { - fake.setAccessTokenMutex.RLock() - defer fake.setAccessTokenMutex.RUnlock() - return len(fake.setAccessTokenArgsForCall) -} - -func (fake *FakeRepository) SetAccessTokenArgsForCall(i int) string { - fake.setAccessTokenMutex.RLock() - defer fake.setAccessTokenMutex.RUnlock() - return fake.setAccessTokenArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetRefreshToken(arg1 string) { - fake.setRefreshTokenMutex.Lock() - defer fake.setRefreshTokenMutex.Unlock() - fake.setRefreshTokenArgsForCall = append(fake.setRefreshTokenArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetRefreshTokenStub != nil { - fake.SetRefreshTokenStub(arg1) - } -} - -func (fake *FakeRepository) SetRefreshTokenCallCount() int { - fake.setRefreshTokenMutex.RLock() - defer fake.setRefreshTokenMutex.RUnlock() - return len(fake.setRefreshTokenArgsForCall) -} - -func (fake *FakeRepository) SetRefreshTokenArgsForCall(i int) string { - fake.setRefreshTokenMutex.RLock() - defer fake.setRefreshTokenMutex.RUnlock() - return fake.setRefreshTokenArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetOrganizationFields(arg1 models.OrganizationFields) { - fake.setOrganizationFieldsMutex.Lock() - defer fake.setOrganizationFieldsMutex.Unlock() - fake.setOrganizationFieldsArgsForCall = append(fake.setOrganizationFieldsArgsForCall, struct { - arg1 models.OrganizationFields - }{arg1}) - if fake.SetOrganizationFieldsStub != nil { - fake.SetOrganizationFieldsStub(arg1) - } -} - -func (fake *FakeRepository) SetOrganizationFieldsCallCount() int { - fake.setOrganizationFieldsMutex.RLock() - defer fake.setOrganizationFieldsMutex.RUnlock() - return len(fake.setOrganizationFieldsArgsForCall) -} - -func (fake *FakeRepository) SetOrganizationFieldsArgsForCall(i int) models.OrganizationFields { - fake.setOrganizationFieldsMutex.RLock() - defer fake.setOrganizationFieldsMutex.RUnlock() - return fake.setOrganizationFieldsArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetSpaceFields(arg1 models.SpaceFields) { - fake.setSpaceFieldsMutex.Lock() - defer fake.setSpaceFieldsMutex.Unlock() - fake.setSpaceFieldsArgsForCall = append(fake.setSpaceFieldsArgsForCall, struct { - arg1 models.SpaceFields - }{arg1}) - if fake.SetSpaceFieldsStub != nil { - fake.SetSpaceFieldsStub(arg1) - } -} - -func (fake *FakeRepository) SetSpaceFieldsCallCount() int { - fake.setSpaceFieldsMutex.RLock() - defer fake.setSpaceFieldsMutex.RUnlock() - return len(fake.setSpaceFieldsArgsForCall) -} - -func (fake *FakeRepository) SetSpaceFieldsArgsForCall(i int) models.SpaceFields { - fake.setSpaceFieldsMutex.RLock() - defer fake.setSpaceFieldsMutex.RUnlock() - return fake.setSpaceFieldsArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetSSLDisabled(arg1 bool) { - fake.setSSLDisabledMutex.Lock() - defer fake.setSSLDisabledMutex.Unlock() - fake.setSSLDisabledArgsForCall = append(fake.setSSLDisabledArgsForCall, struct { - arg1 bool - }{arg1}) - if fake.SetSSLDisabledStub != nil { - fake.SetSSLDisabledStub(arg1) - } -} - -func (fake *FakeRepository) SetSSLDisabledCallCount() int { - fake.setSSLDisabledMutex.RLock() - defer fake.setSSLDisabledMutex.RUnlock() - return len(fake.setSSLDisabledArgsForCall) -} - -func (fake *FakeRepository) SetSSLDisabledArgsForCall(i int) bool { - fake.setSSLDisabledMutex.RLock() - defer fake.setSSLDisabledMutex.RUnlock() - return fake.setSSLDisabledArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetAsyncTimeout(arg1 uint) { - fake.setAsyncTimeoutMutex.Lock() - defer fake.setAsyncTimeoutMutex.Unlock() - fake.setAsyncTimeoutArgsForCall = append(fake.setAsyncTimeoutArgsForCall, struct { - arg1 uint - }{arg1}) - if fake.SetAsyncTimeoutStub != nil { - fake.SetAsyncTimeoutStub(arg1) - } -} - -func (fake *FakeRepository) SetAsyncTimeoutCallCount() int { - fake.setAsyncTimeoutMutex.RLock() - defer fake.setAsyncTimeoutMutex.RUnlock() - return len(fake.setAsyncTimeoutArgsForCall) -} - -func (fake *FakeRepository) SetAsyncTimeoutArgsForCall(i int) uint { - fake.setAsyncTimeoutMutex.RLock() - defer fake.setAsyncTimeoutMutex.RUnlock() - return fake.setAsyncTimeoutArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetTrace(arg1 string) { - fake.setTraceMutex.Lock() - defer fake.setTraceMutex.Unlock() - fake.setTraceArgsForCall = append(fake.setTraceArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetTraceStub != nil { - fake.SetTraceStub(arg1) - } -} - -func (fake *FakeRepository) SetTraceCallCount() int { - fake.setTraceMutex.RLock() - defer fake.setTraceMutex.RUnlock() - return len(fake.setTraceArgsForCall) -} - -func (fake *FakeRepository) SetTraceArgsForCall(i int) string { - fake.setTraceMutex.RLock() - defer fake.setTraceMutex.RUnlock() - return fake.setTraceArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetColorEnabled(arg1 string) { - fake.setColorEnabledMutex.Lock() - defer fake.setColorEnabledMutex.Unlock() - fake.setColorEnabledArgsForCall = append(fake.setColorEnabledArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetColorEnabledStub != nil { - fake.SetColorEnabledStub(arg1) - } -} - -func (fake *FakeRepository) SetColorEnabledCallCount() int { - fake.setColorEnabledMutex.RLock() - defer fake.setColorEnabledMutex.RUnlock() - return len(fake.setColorEnabledArgsForCall) -} - -func (fake *FakeRepository) SetColorEnabledArgsForCall(i int) string { - fake.setColorEnabledMutex.RLock() - defer fake.setColorEnabledMutex.RUnlock() - return fake.setColorEnabledArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetLocale(arg1 string) { - fake.setLocaleMutex.Lock() - defer fake.setLocaleMutex.Unlock() - fake.setLocaleArgsForCall = append(fake.setLocaleArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetLocaleStub != nil { - fake.SetLocaleStub(arg1) - } -} - -func (fake *FakeRepository) SetLocaleCallCount() int { - fake.setLocaleMutex.RLock() - defer fake.setLocaleMutex.RUnlock() - return len(fake.setLocaleArgsForCall) -} - -func (fake *FakeRepository) SetLocaleArgsForCall(i int) string { - fake.setLocaleMutex.RLock() - defer fake.setLocaleMutex.RUnlock() - return fake.setLocaleArgsForCall[i].arg1 -} - -func (fake *FakeRepository) SetPlugin(arg1 string, arg2 string) { - fake.setPluginMutex.Lock() - defer fake.setPluginMutex.Unlock() - fake.setPluginArgsForCall = append(fake.setPluginArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - if fake.SetPluginStub != nil { - fake.SetPluginStub(arg1, arg2) - } -} - -func (fake *FakeRepository) SetPluginCallCount() int { - fake.setPluginMutex.RLock() - defer fake.setPluginMutex.RUnlock() - return len(fake.setPluginArgsForCall) -} - -func (fake *FakeRepository) SetPluginArgsForCall(i int) (string, string) { - fake.setPluginMutex.RLock() - defer fake.setPluginMutex.RUnlock() - return fake.setPluginArgsForCall[i].arg1, fake.setPluginArgsForCall[i].arg2 -} - -func (fake *FakeRepository) Close() { - fake.closeMutex.Lock() - defer fake.closeMutex.Unlock() - fake.closeArgsForCall = append(fake.closeArgsForCall, struct{}{}) - if fake.CloseStub != nil { - fake.CloseStub() - } -} - -func (fake *FakeRepository) CloseCallCount() int { - fake.closeMutex.RLock() - defer fake.closeMutex.RUnlock() - return len(fake.closeArgsForCall) -} - -var _ Repository = new(FakeRepository) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes/fake_plugin_configuration.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes/fake_plugin_configuration.go deleted file mode 100644 index 822ad26..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes/fake_plugin_configuration.go +++ /dev/null @@ -1,131 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" -) - -type FakePluginConfiguration struct { - PluginsStub func() map[string]plugin_config.PluginMetadata - pluginsMutex sync.RWMutex - pluginsArgsForCall []struct{} - pluginsReturns struct { - result1 map[string]plugin_config.PluginMetadata - } - SetPluginStub func(string, plugin_config.PluginMetadata) - setPluginMutex sync.RWMutex - setPluginArgsForCall []struct { - arg1 string - arg2 plugin_config.PluginMetadata - } - GetPluginPathStub func() string - getPluginPathMutex sync.RWMutex - getPluginPathArgsForCall []struct{} - getPluginPathReturns struct { - result1 string - } - RemovePluginStub func(string) - removePluginMutex sync.RWMutex - removePluginArgsForCall []struct { - arg1 string - } -} - -func (fake *FakePluginConfiguration) Plugins() map[string]plugin_config.PluginMetadata { - fake.pluginsMutex.Lock() - fake.pluginsArgsForCall = append(fake.pluginsArgsForCall, struct{}{}) - fake.pluginsMutex.Unlock() - if fake.PluginsStub != nil { - return fake.PluginsStub() - } else { - return fake.pluginsReturns.result1 - } -} - -func (fake *FakePluginConfiguration) PluginsCallCount() int { - fake.pluginsMutex.RLock() - defer fake.pluginsMutex.RUnlock() - return len(fake.pluginsArgsForCall) -} - -func (fake *FakePluginConfiguration) PluginsReturns(result1 map[string]plugin_config.PluginMetadata) { - fake.PluginsStub = nil - fake.pluginsReturns = struct { - result1 map[string]plugin_config.PluginMetadata - }{result1} -} - -func (fake *FakePluginConfiguration) SetPlugin(arg1 string, arg2 plugin_config.PluginMetadata) { - fake.setPluginMutex.Lock() - fake.setPluginArgsForCall = append(fake.setPluginArgsForCall, struct { - arg1 string - arg2 plugin_config.PluginMetadata - }{arg1, arg2}) - fake.setPluginMutex.Unlock() - if fake.SetPluginStub != nil { - fake.SetPluginStub(arg1, arg2) - } -} - -func (fake *FakePluginConfiguration) SetPluginCallCount() int { - fake.setPluginMutex.RLock() - defer fake.setPluginMutex.RUnlock() - return len(fake.setPluginArgsForCall) -} - -func (fake *FakePluginConfiguration) SetPluginArgsForCall(i int) (string, plugin_config.PluginMetadata) { - fake.setPluginMutex.RLock() - defer fake.setPluginMutex.RUnlock() - return fake.setPluginArgsForCall[i].arg1, fake.setPluginArgsForCall[i].arg2 -} - -func (fake *FakePluginConfiguration) GetPluginPath() string { - fake.getPluginPathMutex.Lock() - fake.getPluginPathArgsForCall = append(fake.getPluginPathArgsForCall, struct{}{}) - fake.getPluginPathMutex.Unlock() - if fake.GetPluginPathStub != nil { - return fake.GetPluginPathStub() - } else { - return fake.getPluginPathReturns.result1 - } -} - -func (fake *FakePluginConfiguration) GetPluginPathCallCount() int { - fake.getPluginPathMutex.RLock() - defer fake.getPluginPathMutex.RUnlock() - return len(fake.getPluginPathArgsForCall) -} - -func (fake *FakePluginConfiguration) GetPluginPathReturns(result1 string) { - fake.GetPluginPathStub = nil - fake.getPluginPathReturns = struct { - result1 string - }{result1} -} - -func (fake *FakePluginConfiguration) RemovePlugin(arg1 string) { - fake.removePluginMutex.Lock() - fake.removePluginArgsForCall = append(fake.removePluginArgsForCall, struct { - arg1 string - }{arg1}) - fake.removePluginMutex.Unlock() - if fake.RemovePluginStub != nil { - fake.RemovePluginStub(arg1) - } -} - -func (fake *FakePluginConfiguration) RemovePluginCallCount() int { - fake.removePluginMutex.RLock() - defer fake.removePluginMutex.RUnlock() - return len(fake.removePluginArgsForCall) -} - -func (fake *FakePluginConfiguration) RemovePluginArgsForCall(i int) string { - fake.removePluginMutex.RLock() - defer fake.removePluginMutex.RUnlock() - return fake.removePluginArgsForCall[i].arg1 -} - -var _ plugin_config.PluginConfiguration = new(FakePluginConfiguration) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_config_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_config_test.go deleted file mode 100644 index df144c3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_config_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package plugin_config_test - -import ( - "fmt" - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" - . "github.com/cloudfoundry/cli/cf/configuration/plugin_config" - "github.com/cloudfoundry/cli/plugin" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("PluginConfig", func() { - var ( - metadata PluginMetadata - commands1 []plugin.Command - commands2 []plugin.Command - ) - - BeforeEach(func() { - commands1 = []plugin.Command{ - { - Name: "test_1_cmd1", - HelpText: "help text for test1 cmd1", - }, - { - Name: "test_1_cmd2", - HelpText: "help text for test1 cmd2", - }, - } - - commands2 = []plugin.Command{ - { - Name: "test_2_cmd1", - HelpText: "help text for test2 cmd1", - }, - { - Name: "test_2_cmd2", - HelpText: "help text for test2 cmd2", - }, - } - - metadata = PluginMetadata{ - Location: "../../../fixtures/plugins/test_1.exe", - Commands: commands1, - } - }) - - Describe("Reading configuration data", func() { - BeforeEach(func() { - - config_helpers.PluginRepoDir = func() string { - return filepath.Join("..", "..", "..", "fixtures", "config", "plugin-config") - } - }) - - It("returns a list of plugin executables and their location", func() { - pluginConfig := NewPluginConfig(func(err error) { - if err != nil { - panic(fmt.Sprintf("Config error: %s", err)) - } - }) - plugins := pluginConfig.Plugins() - - Expect(plugins["Test1"].Location).To(Equal("../../../fixtures/plugins/test_1.exe")) - Expect(plugins["Test1"].Commands).To(Equal(commands1)) - Expect(plugins["Test2"].Location).To(Equal("../../../fixtures/plugins/test_2.exe")) - Expect(plugins["Test2"].Commands).To(Equal(commands2)) - }) - }) - - Describe("Writing configuration data", func() { - BeforeEach(func() { - config_helpers.PluginRepoDir = func() string { return os.TempDir() } - }) - - AfterEach(func() { - os.Remove(filepath.Join(os.TempDir(), ".cf", "plugins", "config.json")) - }) - - It("saves plugin location and executable information", func() { - pluginConfig := NewPluginConfig(func(err error) { - if err != nil { - panic(fmt.Sprintf("Config error: %s", err)) - } - }) - - pluginConfig.SetPlugin("foo", metadata) - plugins := pluginConfig.Plugins() - Expect(plugins["foo"].Commands).To(Equal(commands1)) - }) - }) - - Describe("Removing configuration data", func() { - var ( - pluginConfig *PluginConfig - ) - - BeforeEach(func() { - config_helpers.PluginRepoDir = func() string { return os.TempDir() } - pluginConfig = NewPluginConfig(func(err error) { - if err != nil { - panic(fmt.Sprintf("Config error: %s", err)) - } - }) - }) - - AfterEach(func() { - os.Remove(filepath.Join(os.TempDir())) - }) - - It("removes plugin location and executable information", func() { - pluginConfig.SetPlugin("foo", metadata) - - plugins := pluginConfig.Plugins() - Expect(plugins).To(HaveKey("foo")) - - pluginConfig.RemovePlugin("foo") - - plugins = pluginConfig.Plugins() - Expect(plugins).NotTo(HaveKey("foo")) - }) - - It("handles when the config is not yet initialized", func() { - pluginConfig.RemovePlugin("foo") - - plugins := pluginConfig.Plugins() - Expect(plugins).NotTo(HaveKey("foo")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_data.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_data.go deleted file mode 100644 index b171013..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_data.go +++ /dev/null @@ -1,31 +0,0 @@ -package plugin_config - -import ( - "encoding/json" - - "github.com/cloudfoundry/cli/plugin" -) - -type PluginData struct { - Plugins map[string]PluginMetadata -} - -type PluginMetadata struct { - Location string - Version plugin.VersionType - Commands []plugin.Command -} - -func NewData() *PluginData { - return &PluginData{ - Plugins: make(map[string]PluginMetadata), - } -} - -func (pd *PluginData) JsonMarshalV3() (output []byte, err error) { - return json.MarshalIndent(pd, "", " ") -} - -func (pd *PluginData) JsonUnmarshalV3(input []byte) (err error) { - return json.Unmarshal(input, pd) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_suite_test.go deleted file mode 100644 index 288f24d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package plugin_config_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPlugins(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Plugins Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/endpoints.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/endpoints.go deleted file mode 100644 index 19e56d8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/endpoints.go +++ /dev/null @@ -1,9 +0,0 @@ -package cf - -type EndpointType string - -const ( - UaaEndpointKey EndpointType = "uaa" - LoggregatorEndpointKey = "loggregator" - CloudControllerEndpointKey = "cloud_controller" -) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/error.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/error.go deleted file mode 100644 index c33fb57..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/error.go +++ /dev/null @@ -1,27 +0,0 @@ -package errors - -import ( - original "errors" - "fmt" -) - -func New(message string) error { - return original.New(message) -} - -func NewWithFmt(message string, args ...interface{}) error { - return original.New(fmt.Sprintf(message, args...)) -} - -func NewWithError(message string, err error) error { - return NewWithFmt("%s: %s", message, err.Error()) -} - -func NewWithSlice(errs []error) error { - message := "" - - for _, err := range errs { - message = fmt.Sprintf("%s%s\n", message, err.Error()) - } - return New(message) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/http_error.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/http_error.go deleted file mode 100644 index ab35e4d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/http_error.go +++ /dev/null @@ -1,53 +0,0 @@ -package errors - -import ( - "fmt" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -type HttpError interface { - error - StatusCode() int // actual HTTP status code - ErrorCode() string // error code returned in response body from CC or UAA -} - -type baseHttpError struct { - statusCode int - apiErrorCode string - description string -} - -type HttpNotFoundError struct { - baseHttpError -} - -func NewHttpError(statusCode int, code string, description string) error { - err := baseHttpError{ - statusCode: statusCode, - apiErrorCode: code, - description: description, - } - switch statusCode { - case 404: - return &HttpNotFoundError{err} - default: - return &err - } -} - -func (err *baseHttpError) StatusCode() int { - return err.statusCode -} - -func (err *baseHttpError) Error() string { - return fmt.Sprintf(T("Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - map[string]interface{}{"ErrStatusCode": err.statusCode, - "ErrApiErrorCode": err.apiErrorCode, - "ErrDescription": err.description}), - ) -} - -func (err *baseHttpError) ErrorCode() string { - return err.apiErrorCode -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/known_error_codes.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/known_error_codes.go deleted file mode 100644 index a088c6a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/known_error_codes.go +++ /dev/null @@ -1,20 +0,0 @@ -package errors - -const ( - PARSE_ERROR = "1001" - INVALID_RELATION = "1002" - BAD_QUERY_PARAM = "10005" - USER_EXISTS = "20002" - USER_NOT_FOUND = "20003" - ORG_EXISTS = "30002" - SPACE_EXISTS = "40002" - QUOTA_EXISTS = "240002" - SERVICE_INSTANCE_NAME_TAKEN = "60002" - SERVICE_KEY_NAME_TAKEN = "360001" - APP_NOT_STAGED = "170002" - APP_STOPPED = "220001" - BUILDPACK_EXISTS = "290001" - SECURITY_GROUP_EXISTS = "300005" - APP_ALREADY_BOUND = "90003" - UNBINDABLE_SERVICE = "90005" -) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/flag_helpers/cli_flags.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/flag_helpers/cli_flags.go deleted file mode 100644 index 4f1f555..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/flag_helpers/cli_flags.go +++ /dev/null @@ -1,61 +0,0 @@ -package flag_helpers - -import ( - "fmt" - "strings" - "unicode/utf8" - - "github.com/codegangsta/cli" -) - -func NewIntFlag(name, usage string) IntFlagWithNoDefault { - return IntFlagWithNoDefault{cli.IntFlag{Name: name, Usage: usage}} -} - -func NewIntFlagWithValue(name, usage string, value int) IntFlagWithNoDefault { - return IntFlagWithNoDefault{cli.IntFlag{Name: name, Value: value, Usage: usage}} -} - -func NewStringFlag(name, usage string) StringFlagWithNoDefault { - return StringFlagWithNoDefault{cli.StringFlag{Name: name, Usage: usage}} -} - -func NewStringSliceFlag(name, usage string) StringSliceFlagWithNoDefault { - return StringSliceFlagWithNoDefault{cli.StringSliceFlag{Name: name, Usage: usage, Value: &cli.StringSlice{}}} -} - -type IntFlagWithNoDefault struct { - cli.IntFlag -} - -type StringFlagWithNoDefault struct { - cli.StringFlag -} - -type StringSliceFlagWithNoDefault struct { - cli.StringSliceFlag -} - -func (f IntFlagWithNoDefault) String() string { - defaultVal := fmt.Sprintf("'%v'", f.Value) - return strings.Replace(f.IntFlag.String(), defaultVal, "", 1) -} - -func (f StringFlagWithNoDefault) String() string { - defaultVal := fmt.Sprintf("'%v'", f.Value) - return strings.Replace(f.StringFlag.String(), defaultVal, "", 1) -} - -func (f StringSliceFlagWithNoDefault) String() string { - return fmt.Sprintf("%s%s \t%s", prefixFor(f.Name), f.Name, f.Usage) -} - -func prefixFor(name string) (prefix string) { - if utf8.RuneCountInString(name) == 1 { - prefix = "-" - } else { - prefix = "--" - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bools.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bools.go deleted file mode 100644 index b4ce463..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bools.go +++ /dev/null @@ -1,13 +0,0 @@ -package formatters - -import ( - . "github.com/cloudfoundry/cli/cf/i18n" -) - -func Allowed(allowed bool) string { - if allowed { - return T("allowed") - } else { - return T("disallowed") - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bools_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bools_test.go deleted file mode 100644 index 0b5d2bb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bools_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package formatters_test - -import ( - . "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("bool formatting", func() { - Describe("Allowed", func() { - It("is 'allowed' when true", func() { - Expect(Allowed(true)).To(Equal("allowed")) - }) - - It("is 'disallowed' when false", func() { - Expect(Allowed(false)).To(Equal("disallowed")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bytes_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bytes_test.go deleted file mode 100644 index 1cd528c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bytes_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package formatters_test - -import ( - . "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("formatting bytes to / from strings", func() { - It("converts megabytes to a human readable description", func() { - Expect(ByteSize(100 * MEGABYTE)).To(Equal("100M")) - Expect(ByteSize(int64(100.5 * MEGABYTE))).To(Equal("100.5M")) - }) - - It("parses byte amounts with short units (e.g. M, G)", func() { - var ( - megabytes int64 - err error - ) - - megabytes, err = ToMegabytes("5M") - Expect(megabytes).To(Equal(int64(5))) - Expect(err).NotTo(HaveOccurred()) - - megabytes, err = ToMegabytes("5m") - Expect(megabytes).To(Equal(int64(5))) - Expect(err).NotTo(HaveOccurred()) - - megabytes, err = ToMegabytes("2G") - Expect(megabytes).To(Equal(int64(2 * 1024))) - Expect(err).NotTo(HaveOccurred()) - - megabytes, err = ToMegabytes("3T") - Expect(megabytes).To(Equal(int64(3 * 1024 * 1024))) - Expect(err).NotTo(HaveOccurred()) - }) - - It("parses byte amounts with long units (e.g MB, GB)", func() { - var ( - megabytes int64 - err error - ) - - megabytes, err = ToMegabytes("5MB") - Expect(megabytes).To(Equal(int64(5))) - Expect(err).NotTo(HaveOccurred()) - - megabytes, err = ToMegabytes("5mb") - Expect(megabytes).To(Equal(int64(5))) - Expect(err).NotTo(HaveOccurred()) - - megabytes, err = ToMegabytes("2GB") - Expect(megabytes).To(Equal(int64(2 * 1024))) - Expect(err).NotTo(HaveOccurred()) - - megabytes, err = ToMegabytes("3TB") - Expect(megabytes).To(Equal(int64(3 * 1024 * 1024))) - Expect(err).NotTo(HaveOccurred()) - }) - - It("returns an error when the unit is missing", func() { - _, err := ToMegabytes("5") - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("unit of measurement")) - }) - - It("returns an error when the unit is unrecognized", func() { - _, err := ToMegabytes("5MBB") - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("unit of measurement")) - }) - - It("allows whitespace before and after the value", func() { - megabytes, err := ToMegabytes("\t\n\r 5MB ") - Expect(megabytes).To(Equal(int64(5))) - Expect(err).NotTo(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/formatters_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/formatters_suite_test.go deleted file mode 100644 index 48242d3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/formatters_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package formatters_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFormatters(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Formatters Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/memoryLimit_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/memoryLimit_test.go deleted file mode 100644 index 8c85ae2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/memoryLimit_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package formatters_test - -import ( - . "github.com/cloudfoundry/cli/cf/formatters" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("memoryLimit formatting", func() { - It("returns 'Unlimited' when limit is -1", func() { - Expect(InstanceMemoryLimit(-1)).To(Equal("Unlimited")) - }) - - It("formats original value to M when limit is not -1", func() { - Expect(InstanceMemoryLimit(100)).To(Equal("100M")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/README-i18n.md b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/README-i18n.md deleted file mode 100644 index 0dd5069..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/README-i18n.md +++ /dev/null @@ -1,84 +0,0 @@ -# README for CF CLI Localization - -__td;lr The Cloud Foundry cli is ready to be translated to one of the supported languages. See "How you can contribute" to help in this effort.__ - -The CloudFoundry (CF) Command Line Interface (CLI) has been internationalized (i18n) and is now ready for localization (l10n). - -This README details what features are available, what are not, how you can contribute, when, as well as the overarching goals we had in mind as we entered this massive update of the CLI. - -## What? - -The CF CLI is perhaps the most user-facing component of any CF environment. Every user of CF at some point will use the CLI to interact with a specific CF PaaS that they are targeting, be it private or public. - -As CF is a global operating system for clouds, it only made sense for it to be accessible to the many countries all over the world, where English, may not be the best language of communication. - -The CF CLI i18n effort enabled the CLI so that all strings that are used to communicate with the end-user are ready to be translated in the user's native tongue or in some other language that is close to that native tongue. So a French Canadian user can use the CLI in French (fr_FR) and Portuguese user can use the CLI in Brazilian Portuguese (pt_BR). - -Note: Translations only affect messages generated by the CLI. Responses from server side components (Cloud Controller, etc.) will be internationalized seperately and are likely to be English only at the time of this writing. - -User locale is set using the cf config --locale option - -## When? - -Available today are: - -1. A version of the CLI that is enabled for translation. Going forward, all other versions of the CLI will maintain that i18n enablement. This means that any new strings added to the system will follow i18n enablement guideline, e.g., use Go-style templates and use `T()` functions call to load translated strings. - -2. Default language is English in the the en_US locale. This means that any user for any locale will either have strings for their locale loaded, if they exist, otherwise will default to English, specifically the en_US locale. So for instance, a Great Britain user with locale en_GB will default to en_US since there are no en_GB translations. - -3. Complete versions of French (fr_FR), Chinese-Simplified (zh_Hans), Spanish (es_ES), and Portugese-Brazil (pt_BR). Many thanks to all the hard work from the people that contributed! We welcome fixes to any of these translations. See next sections on how to contribute. - -4. Defaulting of language and territory when a specific translation for a territory does not exist. So for instance, a French Canadian speaker with fr_CA locale will have the fr_FR translation strings loaded instead of en_US since that is the closest translation strings to their language and locale. - -## How can you contribute? - -1. __Give it a test drive.__ Download the latest CLI and try it in your locale. You should always at least see no difference since English is the default locale if your current locale does not have any translations yet. If your locale is any of the translated locales, then you should see that the CLI strings are in that language. If you run into error, please submit an issue on Github. - -2. __Submit pull requests for languages files with translations/improvements.__ If you see typos, grammar errors, ambiguous strings or lingering English then please find the appropriate string in the `cf/i18n/resources/_.all.json` and submit a PR with the fix(es). It is much better to submit small pull requests as you complete translations, rather than submitting one giant pull request after you finish everything. This makes it much easier to rapidly merge your changes in. You can also report translations needing fixes as an issue in Github, but if you do understand the language, we would really appreciate the fix. - -### Note on contributing translations - -It is very important that you DO NOT change the `id` sections of the JSON files---simply said, do not change any of the `id` strings, but only the `translation` strings. See the French locale translations as examples. - -``` -[ - { - "id":"Create an org", - "translation":"Créez un org" - }, - ... -] -``` - -Finally, it is also important not to translate the argument names in templated strings. Templated strings are the ones which contain arguments, e.g., `{{.Name}}` or `{{.Username}}` and so on. The arguments can move to a different location on the translated string, however, the arguments cannot change, should not be translated, and should not be removed or new ones added. So for instance, the following string is translated in French as follows: - -``` -[ - ..., - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Créez quota {{.QuotaName}} étant {{.Username}}..." - }, - ... -] -``` - -## Goals - -Our goal is to have translations for the following languages first: - -| Language | Locale | Status | -|-----------------------|--------|-------------------------| -| English | en_US | Complete | -| French | fr_FR | Complete | -| Spanish | es_ES | Complete | -| German | de_DE | English files ready(*) | -| Italian | it_IT | English files ready | -| Japanese | ja_JA | English files ready | -| Portuguese (Brazil) | pt_BR | Complete | -| Chinese (simplified) | zh_Hans | Complete | -| Chinese (traditional) | zh_Hant | English files ready | - -If you are interested in submitting translations for another language/locale, then please communicate with us via VCAP-DEV mailing list first. - -(*) We note "English files ready" to mean that our github project contains English versions for the translation files. We are ready for PRs on these files with actual translated strings. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/detection.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/detection.go deleted file mode 100644 index 6d8e16f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/detection.go +++ /dev/null @@ -1,18 +0,0 @@ -package detection - -import "github.com/pivotal-cf-experimental/jibber_jabber" - -type Detector interface { - DetectIETF() (string, error) - DetectLanguage() (string, error) -} - -type JibberJabberDetector struct{} - -func (detector *JibberJabberDetector) DetectIETF() (string, error) { - return jibber_jabber.DetectIETF() -} - -func (detector *JibberJabberDetector) DetectLanguage() (string, error) { - return jibber_jabber.DetectLanguage() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/detection_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/detection_suite_test.go deleted file mode 100644 index e95d992..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/detection_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package detection_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestDetection(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Detection Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/fakes/fake_detector.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/fakes/fake_detector.go deleted file mode 100644 index 6ac0b37..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/detection/fakes/fake_detector.go +++ /dev/null @@ -1,75 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/i18n/detection" -) - -type FakeDetector struct { - DetectIETFStub func() (string, error) - detectIETFMutex sync.RWMutex - detectIETFArgsForCall []struct{} - detectIETFReturns struct { - result1 string - result2 error - } - DetectLanguageStub func() (string, error) - detectLanguageMutex sync.RWMutex - detectLanguageArgsForCall []struct{} - detectLanguageReturns struct { - result1 string - result2 error - } -} - -func (fake *FakeDetector) DetectIETF() (string, error) { - fake.detectIETFMutex.Lock() - defer fake.detectIETFMutex.Unlock() - fake.detectIETFArgsForCall = append(fake.detectIETFArgsForCall, struct{}{}) - if fake.DetectIETFStub != nil { - return fake.DetectIETFStub() - } else { - return fake.detectIETFReturns.result1, fake.detectIETFReturns.result2 - } -} - -func (fake *FakeDetector) DetectIETFCallCount() int { - fake.detectIETFMutex.RLock() - defer fake.detectIETFMutex.RUnlock() - return len(fake.detectIETFArgsForCall) -} - -func (fake *FakeDetector) DetectIETFReturns(result1 string, result2 error) { - fake.detectIETFReturns = struct { - result1 string - result2 error - }{result1, result2} -} - -func (fake *FakeDetector) DetectLanguage() (string, error) { - fake.detectLanguageMutex.Lock() - defer fake.detectLanguageMutex.Unlock() - fake.detectLanguageArgsForCall = append(fake.detectLanguageArgsForCall, struct{}{}) - if fake.DetectLanguageStub != nil { - return fake.DetectLanguageStub() - } else { - return fake.detectLanguageReturns.result1, fake.detectLanguageReturns.result2 - } -} - -func (fake *FakeDetector) DetectLanguageCallCount() int { - fake.detectLanguageMutex.RLock() - defer fake.detectLanguageMutex.RUnlock() - return len(fake.detectLanguageArgsForCall) -} - -func (fake *FakeDetector) DetectLanguageReturns(result1 string, result2 error) { - fake.detectLanguageReturns = struct { - result1 string - result2 error - }{result1, result2} -} - -var _ Detector = new(FakeDetector) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/i18n_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/i18n_suite_test.go deleted file mode 100644 index 758d8d7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/i18n_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package i18n_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestI18n(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "i18n Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init.go deleted file mode 100644 index 89fd531..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init.go +++ /dev/null @@ -1,167 +0,0 @@ -package i18n - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/i18n/detection" - resources "github.com/cloudfoundry/cli/cf/resources" - go_i18n "github.com/nicksnyder/go-i18n/i18n" -) - -const ( - DEFAULT_LOCALE = "en_US" - DEFAULT_LANGUAGE = "en" -) - -var T go_i18n.TranslateFunc - -var SUPPORTED_LOCALES = map[string]string{ - "de": "de_DE", - "en": "en_US", - "es": "es_ES", - "fr": "fr_FR", - "it": "it_IT", - "ja": "ja_JA", - //"ko": "ko_KO", - Will add support for Korean when nicksnyder/go-i18n supports Korean - "pt": "pt_BR", - //"ru": "ru_RU", - Will add support for Russian when nicksnyder/go-i18n supports Russian - "zh": "zh_Hans", -} -var Resources_path = filepath.Join("cf", "i18n", "resources") - -func GetResourcesPath() string { - return Resources_path -} - -func Init(config core_config.ReadWriter, detector detection.Detector) go_i18n.TranslateFunc { - var T go_i18n.TranslateFunc - var err error - - locale := config.Locale() - if locale != "" { - err = loadFromAsset(locale) - if err == nil { - T, err = go_i18n.Tfunc(config.Locale(), DEFAULT_LOCALE) - } - } else { - var userLocale string - userLocale, err = initWithUserLocale(detector) - if err != nil { - userLocale = mustLoadDefaultLocale() - } - - T, err = go_i18n.Tfunc(userLocale, DEFAULT_LOCALE) - } - - if err != nil { - panic(err) - } - - return T -} - -func initWithUserLocale(detector detection.Detector) (string, error) { - userLocale, err := detector.DetectIETF() - if err != nil { - userLocale = DEFAULT_LOCALE - } - - language, err := detector.DetectLanguage() - if err != nil { - language = DEFAULT_LANGUAGE - } - - userLocale = strings.Replace(userLocale, "-", "_", 1) - if strings.HasPrefix(userLocale, "zh_TW") || strings.HasPrefix(userLocale, "zh_HK") { - userLocale = "zh_Hant" - language = "zh" - } - - err = loadFromAsset(userLocale) - if err != nil { - locale := SUPPORTED_LOCALES[language] - if locale == "" { - userLocale = DEFAULT_LOCALE - } else { - userLocale = locale - } - err = loadFromAsset(userLocale) - } - - return userLocale, err -} - -func mustLoadDefaultLocale() string { - userLocale := DEFAULT_LOCALE - - err := loadFromAsset(DEFAULT_LOCALE) - if err != nil { - panic("Could not load en_US language files. God save the queen. \n" + err.Error() + "\n\n") - } - - return userLocale -} - -func loadFromAsset(locale string) error { - assetName := locale + ".all.json" - assetKey := filepath.Join(GetResourcesPath(), assetName) - - byteArray, err := resources.Asset(assetKey) - if err != nil { - return err - } - - if len(byteArray) == 0 { - return errors.New(fmt.Sprintf("Could not load i18n asset: %v", assetKey)) - } - - _, err = os.Stat(os.TempDir()) - if err != nil { - if !os.IsExist(err) { - return errors.New("Please make sure Temp dir exist - " + os.TempDir()) - } else { - return err - } - } - - tmpDir, err := ioutil.TempDir("", "cloudfoundry_cli_i18n_res") - if err != nil { - return err - } - defer func() { - os.RemoveAll(tmpDir) - }() - - fileName, err := saveLanguageFileToDisk(tmpDir, assetName, byteArray) - if err != nil { - return err - } - - go_i18n.MustLoadTranslationFile(fileName) - - os.RemoveAll(fileName) - - return nil -} - -func saveLanguageFileToDisk(tmpDir, assetName string, byteArray []byte) (fileName string, err error) { - fileName = filepath.Join(tmpDir, assetName) - file, err := os.Create(fileName) - if err != nil { - return - } - defer file.Close() - - _, err = file.Write(byteArray) - if err != nil { - return - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init_unix_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init_unix_test.go deleted file mode 100644 index 620cf7c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init_unix_test.go +++ /dev/null @@ -1,229 +0,0 @@ -// +build darwin freebsd linux netbsd openbsd - -package i18n_test - -import ( - "os" - "path/filepath" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - go_i18n "github.com/nicksnyder/go-i18n/i18n" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("i18n.Init() function", func() { - var ( - oldResourcesPath string - configRepo core_config.ReadWriter - detector detection.Detector - - T go_i18n.TranslateFunc - ) - - BeforeEach(func() { - configRepo = testconfig.NewRepositoryWithDefaults() - oldResourcesPath = i18n.GetResourcesPath() - i18n.Resources_path = filepath.Join("cf", "i18n", "test_fixtures") - detector = &detection.JibberJabberDetector{} - }) - - JustBeforeEach(func() { - T = i18n.Init(configRepo, detector) - }) - - Describe("When a user has a locale configuration set", func() { - It("panics when the translation files cannot be loaded", func() { - i18n.Resources_path = filepath.Join("should", "not", "be_valid") - configRepo.SetLocale("en_us") - - init := func() { i18n.Init(configRepo, detector) } - Ω(init).Should(Panic(), "loading translations from an invalid path should panic") - }) - - It("Panics if the locale is not valid", func() { - configRepo.SetLocale("abc_def") - - init := func() { i18n.Init(configRepo, detector) } - Ω(init).Should(Panic(), "loading translations from an invalid path should panic") - }) - - Context("when the locale is set to french", func() { - BeforeEach(func() { - configRepo.SetLocale("fr_FR") - }) - - It("translates into french correctly", func() { - translation := T("No buildpacks found") - Ω(translation).Should(Equal("Pas buildpacks trouvés")) - }) - }) - - Context("creates a valid T function", func() { - BeforeEach(func() { - configRepo.SetLocale("en_US") - }) - - It("returns a usable T function for simple strings", func() { - Ω(T).ShouldNot(BeNil()) - - translation := T("Hello world!") - Ω("Hello world!").Should(Equal(translation)) - }) - - It("returns a usable T function for complex strings (interpolated)", func() { - Ω(T).ShouldNot(BeNil()) - - translation := T("Deleting domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{"DomainName": "foo.com", "Username": "Anand"}) - Ω("Deleting domain foo.com as Anand...").Should(Equal(translation)) - }) - }) - }) - - Describe("When the user does not have a locale configuration set", func() { - AfterEach(func() { - i18n.Resources_path = oldResourcesPath - os.Setenv("LC_ALL", "") - os.Setenv("LANG", "en_US.UTF-8") - }) - - It("panics when the translation files cannot be loaded", func() { - os.Setenv("LANG", "en") - i18n.Resources_path = filepath.Join("should", "not", "be_valid") - - init := func() { i18n.Init(configRepo, detector) } - Ω(init).Should(Panic(), "loading translations from an invalid path should panic") - }) - - Context("loads correct locale", func() { - It("defaults to en_US when LC_ALL and LANG not set", func() { - os.Setenv("LC_ALL", "") - os.Setenv("LANG", "") - - translation := T("Hello world!") - Ω("Hello world!").Should(Equal(translation)) - }) - - Context("when there is no territory set", func() { - BeforeEach(func() { - os.Setenv("LANG", "en") - }) - - It("still loads the english translation", func() { - translation := T("Hello world!") - Ω("Hello world!").Should(Equal(translation)) - }) - }) - - Context("when the desired language is not supported", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "zz_FF.UTF-8") - }) - - It("defaults to en_US when langauge is not supported", func() { - translation := T("Hello world!") - Ω("Hello world!").Should(Equal(translation)) - - translation = T("No buildpacks found") - Ω("No buildpacks found").Should(Equal(translation)) - }) - - Context("because we don't have the territory", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "fr_CA.UTF-8") - }) - - It("defaults to same language in supported territory", func() { - translation := T("No buildpacks found") - Ω("Pas buildpacks trouvés").Should(Equal(translation)) - }) - }) - }) - - Context("translates correctly", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "fr_FR.UTF-8") - }) - - It("T function should return translation if string key exists", func() { - translation := T("No buildpacks found") - Ω("Pas buildpacks trouvés").Should(Equal(translation)) - }) - }) - - Context("matches zh_CN to simplified Chinese", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "zh_CN.UTF-8") - }) - - It("matches to zh_Hans", func() { - translation := T("No buildpacks found") - Ω("buildpack未找到").Should(Equal(translation)) - }) - }) - - Context("matches zh_TW locale to traditional Chinese", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "zh_TW.UTF-8") - }) - - It("matches to zh_Hant", func() { - translation := T("No buildpacks found") - Ω("(Hant)No buildpacks found").Should(Equal(translation)) - }) - }) - - Context("matches zh_HK locale to traditional Chinese", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "zh_HK.UTF-8") - }) - - It("matches to zh_Hant", func() { - translation := T("No buildpacks found") - Ω("(Hant)No buildpacks found").Should(Equal(translation)) - }) - }) - }) - - Context("creates a valid T function", func() { - BeforeEach(func() { - os.Setenv("LC_ALL", "en_US.UTF-8") - }) - - It("returns a usable T function for simple strings", func() { - Ω(T).ShouldNot(BeNil()) - - translation := T("Hello world!") - Ω("Hello world!").Should(Equal(translation)) - }) - - It("returns a usable T function for complex strings (interpolated)", func() { - Ω(T).ShouldNot(BeNil()) - - translation := T("Deleting domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{"DomainName": "foo.com", "Username": "Anand"}) - Ω("Deleting domain foo.com as Anand...").Should(Equal(translation)) - }) - }) - }) - - Describe("when the config is set to a non-english language and the LANG environamnt variable is en_US", func() { - BeforeEach(func() { - configRepo.SetLocale("fr_FR") - os.Setenv("LANG", "en_US") - }) - - AfterEach(func() { - i18n.Resources_path = oldResourcesPath - os.Setenv("LANG", "en_US.UTF-8") - }) - - It("ignores the english LANG enviornmant variable", func() { - translation := T("No buildpacks found") - Ω(translation).Should(Equal("Pas buildpacks trouvés")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init_windows_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init_windows_test.go deleted file mode 100644 index 15d603d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/init_windows_test.go +++ /dev/null @@ -1,107 +0,0 @@ -// +build windows - -package i18n_test - -import ( - "path/filepath" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection/fakes" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("i18n.Init() function", func() { - var ( - configRepo core_config.ReadWriter - detector *fakes.FakeDetector - ) - - BeforeEach(func() { - i18n.Resources_path = filepath.Join("cf", "i18n", "test_fixtures") - configRepo = testconfig.NewRepositoryWithDefaults() - detector = &fakes.FakeDetector{} - }) - - Describe("When a user has a locale configuration set", func() { - Context("creates a valid T function", func() { - BeforeEach(func() { - configRepo.SetLocale("en_US") - }) - - It("returns a usable T function for simple strings", func() { - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("Hello world!") - Ω("Hello world!").Should(Equal(translation)) - }) - - It("returns a usable T function for complex strings (interpolated)", func() { - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("Deleting domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{"DomainName": "foo.com", "Username": "Anand"}) - Ω("Deleting domain foo.com as Anand...").Should(Equal(translation)) - }) - }) - }) - - Describe("When a user does not have a locale configuration set", func() { - BeforeEach(func() { - detector.DetectIETFReturns("en-US", nil) - }) - - Context("creates a valid T function", func() { - It("returns a usable T function for simple strings", func() { - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("Change user password") - Ω("Change user password").Should(Equal(translation)) - }) - - It("returns a usable T function for complex strings (interpolated)", func() { - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("Deleting domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{"DomainName": "foo", "Username": "Anand"}) - Ω("Deleting domain foo as Anand...").Should(Equal(translation)) - }) - }) - - }) - - Describe("When locale is HK/TW", func() { - It("matches zh_CN to zh_Hans", func() { - detector.DetectIETFReturns("zh-CN.UTF-8", nil) - detector.DetectLanguageReturns("zh", nil) - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("No buildpacks found") - Ω("buildpack未找到").Should(Equal(translation)) - }) - - It("matches zh_TW to zh_Hant", func() { - detector.DetectIETFReturns("zh-TW.UTF-8", nil) - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("No buildpacks found") - Ω("(Hant)No buildpacks found").Should(Equal(translation)) - }) - - It("matches zh_HK to zh_Hant", func() { - detector.DetectIETFReturns("zh-HK.UTF-8", nil) - T := i18n.Init(configRepo, detector) - Ω(T).ShouldNot(BeNil()) - - translation := T("No buildpacks found") - Ω("(Hant)No buildpacks found").Should(Equal(translation)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/de_DE.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/de_DE.all.json deleted file mode 100644 index c54f025..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/de_DE.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nTIP:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\nApp started\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nTIP: Use '{{.Command}}' to target new org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Create and manage the billing account and payment info\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Read-only access to org info and reports\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Path should be a zip file, a url to a zip file, or a local directory. Position is an integer, sets priority, and is sorted from lowest to highest.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Push multiple apps with a manifest:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - View logs, reports, and settings on this space\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " View allowable quotas with 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " is already started", - "modified": false - }, - { - "id": " is already stopped", - "translation": " is already stopped", - "modified": false - }, - { - "id": " is empty", - "translation": " is empty", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " not found", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "A command line tool to interact with Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "ADVANCED", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API endpoint", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API endpoint (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "API endpoint:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API endpoint: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API endpoint: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Add a url route to an app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for the org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for the org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "Also delete any mapped routes", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "An org must be targeted before targeting a space", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "App name is a required field", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "App {{.AppName}} does not exist.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} is a worker, skipping route creation", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Append API request diagnostics to a log file", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Assign a quota to an org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Assign a space role to a user", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Assign an org role to a user", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Authenticate user non-interactively", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Authenticating...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "BILLING MANAGER", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "BUILD TIME:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Bind a service instance to an app", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Binding {{.URL}} to {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Buildpack {{.BuildpackName}} already exists", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Buildpack {{.BuildpackName}} does not exist.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "Byte quantity must be a positive integer with a unit of measurement like M, MB, G, or GB", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USERNAME PASSWORD\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USERNAME PASSWORD", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USERNAME [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [PATH]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename APP_NAME NEW_APP_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space SPACE NEW_SPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NAME VALUE", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space SPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s SPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP SERVICE_INSTANCE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NAME", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Can provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Cannot list marketplace services without a targeted space", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Cannot provision instances of paid service plans", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Cannot specify both lock and unlock options.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Cannot specify buildpack bits and lock/unlock.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Change or view the instance count, disk space limit, and memory limit for an app", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Change user password", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Changing password...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Command not found", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Could not determine the current working directory!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Could not find a default domain", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Could not find app named '{{.AppName}}' in manifest", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Could not find plan with name {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Could not parse version number: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Could not serialize information", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Could not serialize updates.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Could not target org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Couldn't create temp file for upload", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Couldn't open buildpack file", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Couldn't write zip file", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Create a buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Create a domain in an org for later use", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Create a domain that can be used by all orgs (admin-only)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Create a new user", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Create a random route for this app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Create a service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Create a service instance", - "modified": false - }, - { - "id": "Create a space", - "translation": "Create a space", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Create a url route in a space for later use", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Create an org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Creating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Creating org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Creating route {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creating user {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Credentials were rejected, please try again.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Current Password", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Current password did not match", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Custom headers to include in the request, flag can be specified multiple times", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMAINS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define a new resource quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Delete a buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Delete a domain", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Delete a quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Delete a route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Delete a service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Delete a service instance", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Delete a shared domain", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Delete a space", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Delete a user", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Delete an app", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Delete an org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Delete cancelled", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Deleting buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Deleting org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Deleting route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Deleting route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Description: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Disable the buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Disk limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Display health and status for app", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Do not colorize output", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Do not map a route to this app", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "Do not start an app after pushing", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Documentation url: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domain (e.g. example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Dump recent logs instead of tailing", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "ENVIRONMENT VARIABLES:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EXAMPLE:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Enable CF_TRACE output for all requests and responses", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Enable HTTP proxying for API requests", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Enable or disable color", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Enable the buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Env variable {{.VarName}} was not set.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Error building request", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Error creating request:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Error creating tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Error creating upload", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Error dumping request\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error dumping response\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Error finding available orgs\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Error finding available spaces\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Error finding command {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Error finding manifest", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Error finding org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Error finding space {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Error in requirement", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Error marshaling JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Error opening buildpack file", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Error parsing JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Error parsing headers", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Error performing request", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Error reading manifest file:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Error reading response", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolving route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Error updating buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Error uploading application.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Error writing to tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Error zipping application", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Error: No name found for app", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Error: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Executes a raw request, content-type set to application/json by default", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Expected applications to be a list", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "Expected {{.PropertyName}} to be a boolean.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "Expected {{.PropertyName}} to be a list of strings.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FAILED", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Failed fetching buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Failed fetching domains.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Failed fetching events.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Failed fetching orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Failed fetching routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Failed to create json for resource_match request", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Failed to marshal JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Failed to start oauth request", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Force deletion without confirmation", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Force migration without confirmation", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Force restart of app without prompt", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "GETTING STARTED", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "GLOBAL OPTIONS:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Getting all services from marketplace...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Getting buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Getting info for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Getting orgs as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Getting quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Getting routes as {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "HTTP data to include in the request body", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "HTTP method (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Hostname (e.g. my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignore manifest file", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Include response headers in the output", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Incorrect Usage", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Incorrect Usage.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Incorrect number of arguments", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Invalid JSON response from server", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Invalid Role {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Invalid async response from server", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Invalid auth token: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Invalid manifest. Expected a map", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Invalid usage", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Unexpected value for {{.PropertyName}} :\n{{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON is invalid: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "List all apps in the target space", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "List all buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "List all orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "List all service instances in the target space", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "List all spaces in an org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "List all users in the org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "List available offerings in the marketplace", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "List domains in the target org", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "List service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List service brokers", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Lock the buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Log user in", - "modified": false - }, - { - "id": "Log user out", - "translation": "Log user out", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Logging out...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Loggregator endpoint missing from config file", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Make a user-provided service instance available to cf apps", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Map the root domain to this app", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Max wait time for app instance startup, in minutes", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Max wait time for buildpack staging, in minutes", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Start timeout in seconds", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Memory limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrate service instances from one service plan to another", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NAME:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "New Password", - "modified": false - }, - { - "id": "New name", - "translation": "New name", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "No apps found", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No buildpacks found", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No domains found", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "No events for app {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "No flags specified. No changes were made.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "No org and space targeted, use '{{.Command}}' to target an org and space", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "No org or space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "No org targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "No org targeted, use '{{.Command}}' to target an org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "No orgs found", - "modified": false - }, - { - "id": "No routes found", - "translation": "No routes found", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "No service offerings found", - "modified": false - }, - { - "id": "No services found", - "translation": "No services found", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "No space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "No space targeted, use '{{.Command}}' to target a space", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "No system-provided env variables have been set", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "No user-defined env variables have been set", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Number of instances", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "ORG AUDITOR", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "ORG MANAGER", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Org {{.OrgName}} already exists", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Org {{.OrgName}} does not exist.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Override path to default config directory", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Paid service plans", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Password", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Password verification does not match", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Path to directory or zip file", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Path to manifest", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plan {{.ServicePlanName}} cannot be found", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan {{.ServicePlanName}} has no service instances to migrate", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Please don't", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Please log in again", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Print API request diagnostics to stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Print out a list of files in a directory or the contents of a specific file", - "modified": false - }, - { - "id": "Print the version", - "translation": "Print the version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provider", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purging service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Push a new app or sync changes to an existing app", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Push a single app (with or without a manifest):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} does not exist", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "REQUEST:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPONSE:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "ROLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Really delete orphaned routes?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Received invalid SSL certificate from ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remove a space role from a user", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remove a url route from an app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remove an env variable", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remove an org role from a user", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removing route {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Rename a buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Rename a service instance", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Rename a space", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Rename an app", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Rename an org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Restage an app", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Restart an app", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} already exists", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "SERVICE ADMIN", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "SPACE AUDITOR", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "SPACE DEVELOPER", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "SPACE MANAGER", - "modified": false - }, - { - "id": "SPACES", - "translation": "SPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Security Groups:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Select a space (or press enter to skip):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Select an org (or press enter to skip):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Service Instance is not user provided", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Service instance: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Service {{.ServiceName}} does not exist.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "Services:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Set an env variable for an app", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Set or view the targeted org or space", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Setting api endpoint to {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Show all env variables for an app", - "modified": false - }, - { - "id": "Show help", - "translation": "Show help", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Show org info", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Show org users by role", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Show quota info", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Show recent app events", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Show service instance info", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Show space info", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Show space users by role", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Space:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Start an app", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Startup command, set to null to reset to default start command", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Stop an app", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog Drain Url", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "System-Provided:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.CFCommand}}' to ensure your env variable changes take effect", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "TIP: To make these changes take effect, use '{{.CFUnbindCommand}}' to unbind the service, '{{.CFBindComand}}' to rebind, and then '{{.CFRestageCommand}}' to update the app with the new env variables", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Tail or show recent logs for an app", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Targeted org {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Targeted space {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "Buildpack position among other buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "There are no running instances of this app.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "There are too many options to display, please type in the name.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Timeout for async HTTP requests", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memory", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Total number of routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Total number of service instances", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Trace HTTP requests", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint missing from config file", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USAGE:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "USER ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "USERS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Unable to authenticate.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Unable to delete, route '{{.URL}}' does not exist.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Unbind a service instance from an app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Unlock the buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Update a buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Update a service broker", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Update an existing resource quota", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Update user-provided service instance name value pairs", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Updating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Updating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Uploading app files from: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Uploading buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Uploading {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Use '{{.Name}}' to view or set your target org and space", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Use a one-time password to login", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "User {{.TargetUser}} does not exist.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "User-Provided:", - "modified": false - }, - { - "id": "User:", - "translation": "User:", - "modified": false - }, - { - "id": "Username", - "translation": "Username", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Using manifest file {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Using route {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Using stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verify Password", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Warning: error tailing logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "Zip archive does not contain a buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[PRIVATE DATA HIDDEN]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[environment variables]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[global options] command [arguments...] [command options]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "actor", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "allowed", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "app crashed", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "auth request failed", - "modified": false - }, - { - "id": "bound apps", - "translation": "bound apps", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "crashing", - "modified": false - }, - { - "id": "description", - "translation": "description", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "disallowed", - "modified": false - }, - { - "id": "disk", - "translation": "disk", - "modified": false - }, - { - "id": "disk:", - "translation": "disk:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "domain", - "modified": false - }, - { - "id": "domains:", - "translation": "domains:", - "modified": true - }, - { - "id": "down", - "translation": "down", - "modified": false - }, - { - "id": "enabled", - "translation": "enabled", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "env var '{{.PropertyName}}' should not be null", - "modified": false - }, - { - "id": "event", - "translation": "event", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "filename", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "incorrect usage", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instances", - "modified": false - }, - { - "id": "instances:", - "translation": "instances:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "invalid inherit path in manifest", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "locked", - "modified": false - }, - { - "id": "memory", - "translation": "memory", - "modified": false - }, - { - "id": "memory:", - "translation": "memory:", - "modified": false - }, - { - "id": "name", - "translation": "name", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "not valid for the requested host", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organization", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "owned", - "modified": false - }, - { - "id": "paid service plans", - "translation": "paid service plans", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "plans", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "quota:", - "modified": true - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "requested state", - "modified": false - }, - { - "id": "requested state:", - "translation": "requested state:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "running", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "service instance", - "modified": false - }, - { - "id": "service instances", - "translation": "service instances", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "shared", - "modified": false - }, - { - "id": "since", - "translation": "since", - "modified": false - }, - { - "id": "space", - "translation": "space", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "spaces:", - "modified": true - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "starting", - "modified": false - }, - { - "id": "state", - "translation": "state", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "stopped", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "stopped after 1 redirect", - "modified": false - }, - { - "id": "time", - "translation": "time", - "modified": false - }, - { - "id": "total memory limit", - "translation": "memory limit", - "modified": true - }, - { - "id": "unknown authority", - "translation": "unknown authority", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "usage:", - "modified": false - }, - { - "id": "user", - "translation": "user", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "write default values to the config", - "modified": false - }, - { - "id": "yes", - "translation": "yes", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrated.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} of {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} down", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} failing", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} of {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} already exists", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} must be a string or null value", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} must be a string value", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} should not be null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} of {{.TotalCount}} instances running", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} starting", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/en_US.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/en_US.all.json deleted file mode 100644 index 3a0f835..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/en_US.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nTIP:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "modified": false - }, - { - "id": "\nApp started\n", - "translation": "\nApp started\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nTIP: Use '{{.Command}}' to target new org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Create and manage the billing account and payment info\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Read-only access to org info and reports\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "modified": false - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Push multiple apps with a manifest:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - View logs, reports, and settings on this space\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " View allowable quotas with 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " is already started", - "modified": false - }, - { - "id": " is already stopped", - "translation": " is already stopped", - "modified": false - }, - { - "id": " is empty", - "translation": " is empty", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " not found", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "A command line tool to interact with Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "ADD/REMOVE PLUGIN", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "ADVANCED", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API endpoint", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API endpoint (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "API endpoint:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API endpoint: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API endpoint: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Add a url route to an app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": false - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for this org", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for this org", - "modified": false - }, - { - "id": "Also delete any mapped routes", - "translation": "Also delete any mapped routes", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "An org must be targeted before targeting a space", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "App name is a required field", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "App {{.AppName}} does not exist.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} is a worker, skipping route creation", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Append API request diagnostics to a log file", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Assign a quota to an org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Assign a space role to a user", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Assign an org role to a user", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Authenticate user non-interactively", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Authenticating...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "BILLING MANAGER", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "BUILD TIME:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Bind a service instance to an app", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Binding {{.URL}} to {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Buildpack {{.BuildpackName}} already exists", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Buildpack {{.BuildpackName}} does not exist.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "modified": false - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP_NAME", - "modified": false - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USERNAME PASSWORD\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "modified": false - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": false - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "modified": false - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USERNAME PASSWORD", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "modified": false - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP_NAME [-f -r]", - "modified": false - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USERNAME [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP_NAME", - "modified": false - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "modified": false - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "modified": false - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repos", - "modified": false - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP_NAME", - "modified": false - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename APP_NAME NEW_APP_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space SPACE NEW_SPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "modified": false - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP_NAME", - "modified": false - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP_NAME", - "modified": false - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP_NAME INDEX", - "modified": false - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "CF_NAME running-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "modified": false - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "modified": false - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space SPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP_NAME", - "modified": false - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP_NAME", - "modified": false - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s SPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "modified": false - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": false - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Can provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Cannot list marketplace services without a targeted space", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Cannot provision instances of paid service plans", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Cannot specify both lock and unlock options.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Cannot specify buildpack bits and lock/unlock.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Change or view the instance count, disk space limit, and memory limit for an app", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Change user password", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Changing password...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": false - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command Name", - "modified": false - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": false - }, - { - "id": "Command not found", - "translation": "Command not found", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Could not determine the current working directory!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Could not find a default domain", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Could not find app named '{{.AppName}}' in manifest", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Could not find plan with name {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Could not parse version number: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Could not serialize information", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Could not serialize updates.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Could not target org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Couldn't create temp file for upload", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Couldn't open buildpack file", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Couldn't write zip file", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Create a buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Create a domain in an org for later use", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Create a domain that can be used by all orgs (admin-only)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Create a new user", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Create a random route for this app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Create a service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Create a service instance", - "modified": false - }, - { - "id": "Create a space", - "translation": "Create a space", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Create a url route in a space for later use", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Create an org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Creating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Creating org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Creating route {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creating user {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Credentials were rejected, please try again.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Current Password", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Current password did not match", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "modified": false - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Custom headers to include in the request, flag can be specified multiple times", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMAINS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define a new resource quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Delete a buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Delete a domain", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Delete a quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Delete a route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Delete a service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Delete a service instance", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Delete a shared domain", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Delete a space", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": "Delete a space quota definition and unassign the space quota from all spaces", - "modified": false - }, - { - "id": "Delete a user", - "translation": "Delete a user", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Delete an app", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Delete an org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Delete cancelled", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Deleting buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Deleting org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Deleting route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Deleting route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Description: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Disable the buildpack from being used for staging", - "modified": false - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Disk limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Display health and status for app", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Do not colorize output", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Do not map a route to this app and remove routes from previous pushes of this app.", - "modified": false - }, - { - "id": "Do not start an app after pushing", - "translation": "Do not start an app after pushing", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Documentation url: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domain (e.g. example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "modified": false - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Dump recent logs instead of tailing", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "ENVIRONMENT VARIABLES:", - "modified": false - }, - { - "id": "EXAMPLE:\n", - "translation": "EXAMPLE:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Enable CF_TRACE output for all requests and responses", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Enable HTTP proxying for API requests", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Enable or disable color", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Enable the buildpack to be used for staging", - "modified": false - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Env variable {{.VarName}} was not set.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Error building request", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Error creating request:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Error creating tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Error creating upload", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Error dumping request\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error dumping response\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Error finding available orgs\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Error finding available spaces\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Error finding command {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Error finding manifest", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Error finding org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Error finding space {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Error in requirement", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Error marshaling JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Error opening buildpack file", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Error parsing JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Error parsing headers", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Error performing request", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Error reading manifest file:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Error reading response", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolving route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Error updating buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Error uploading application.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Error writing to tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Error zipping application", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Error: No name found for app", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Error: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Executes a raw request, content-type set to application/json by default", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Expected applications to be a list", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "Expected {{.PropertyName}} to be a boolean.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "Expected {{.PropertyName}} to be a list of strings.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FAILED", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Failed fetching buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Failed fetching domains.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Failed fetching events.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Failed fetching orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Failed fetching routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Failed to create json for resource_match request", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Failed to marshal JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Failed to start oauth request", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Force deletion without confirmation", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Force migration without confirmation", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Force restart of app without prompt", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "GETTING STARTED", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "GLOBAL OPTIONS:", - "modified": false - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Getting all services from marketplace...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Getting buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Getting info for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Getting orgs as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repository '", - "modified": false - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Getting quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Getting routes as {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "Getting service access as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "Getting service access for service {{.Service}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "HTTP data to include in the request body", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "HTTP method (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Hostname (e.g. my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "INSTALLED PLUGIN COMMANDS", - "modified": false - }, - { - "id": "Ignore manifest file", - "translation": "Ignore manifest file", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Include response headers in the output", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Incorrect Usage", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Incorrect Usage.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Incorrect number of arguments", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "Install the plugin defined in command argument", - "modified": false - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Invalid JSON response from server", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Invalid Role {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Invalid async response from server", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Invalid auth token: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Invalid manifest. Expected a map", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Invalid usage", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "modified": false - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON is invalid: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "List all apps in the target space", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "List all buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "List all orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "List all service instances in the target space", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "List all spaces in an org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "List all users in the org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "List available offerings in the marketplace", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "List domains in the target org", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "List service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List service brokers", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Lock the buildpack to prevent updates", - "modified": false - }, - { - "id": "Log user in", - "translation": "Log user in", - "modified": false - }, - { - "id": "Log user out", - "translation": "Log user out", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Logging out...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Loggregator endpoint missing from config file", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Make a user-provided service instance available to cf apps", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Map the root domain to this app", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Max wait time for app instance startup, in minutes", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Max wait time for buildpack staging, in minutes", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": false - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "modified": false - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Memory limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrate service instances from one service plan to another", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NAME:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "New Password", - "modified": false - }, - { - "id": "New name", - "translation": "New name", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "modified": false - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "modified": false - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "modified": false - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "No apps found", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No buildpacks found", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No domains found", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "No events for app {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "No flags specified. No changes were made.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "No org and space targeted, use '{{.Command}}' to target an org and space", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "No org or space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "No org targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "No org targeted, use '{{.Command}}' to target an org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "No orgs found", - "modified": false - }, - { - "id": "No routes found", - "translation": "No routes found", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "No service offerings found", - "modified": false - }, - { - "id": "No services found", - "translation": "No services found", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "No space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "No space targeted, use '{{.Command}}' to target a space", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "No system-provided env variables have been set", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "No user-defined env variables have been set", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Number of instances", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "ORG AUDITOR", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "ORG MANAGER", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Org {{.OrgName}} already exists", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Org {{.OrgName}} does not exist.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Override path to default config directory", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Paid service plans", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Password", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Password verification does not match", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": false - }, - { - "id": "Path to directory or zip file", - "translation": "Path to directory or zip file", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Path to manifest", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plan {{.ServicePlanName}} cannot be found", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan {{.ServicePlanName}} has no service instances to migrate", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Please don't", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Please log in again", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin Name", - "modified": false - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": false - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin {{.PluginName}} successfully uninstalled.", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "modified": false - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Print API request diagnostics to stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Print out a list of files in a directory or the contents of a specific file", - "modified": false - }, - { - "id": "Print the version", - "translation": "Print the version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provider", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purging service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Push a new app or sync changes to an existing app", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Push a single app (with or without a manifest):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} does not exist", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "REQUEST:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPONSE:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "ROLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Really delete orphaned routes?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Received invalid SSL certificate from ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remove a space role from a user", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remove a url route from an app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remove an env variable", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remove an org role from a user", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removing route {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Rename a buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Rename a service instance", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Rename a space", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Rename an app", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Rename an org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Restage an app", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Restart an app", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} already exists", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "SERVICE ADMIN", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "SPACE AUDITOR", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "SPACE DEVELOPER", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "SPACE MANAGER", - "modified": false - }, - { - "id": "SPACES", - "translation": "SPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Security Groups:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Select a space (or press enter to skip):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Select an org (or press enter to skip):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Service Instance is not user provided", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Service instance: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Service {{.ServiceName}} does not exist.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "Services:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Set an env variable for an app", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Set or view the targeted org or space", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Setting api endpoint to {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Show all env variables for an app", - "modified": false - }, - { - "id": "Show help", - "translation": "Show help", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Show org info", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Show org users by role", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Show quota info", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Show recent app events", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Show service instance info", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Show space info", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Show space users by role", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Space:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "modified": false - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Start an app", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Startup command, set to null to reset to default start command", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Stop an app", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog Drain Url", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "System-Provided:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Tail or show recent logs for an app", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Targeted org {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Targeted space {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "The order in which the buildpacks are checked during buildpack auto-detection", - "modified": false - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan is already inaccessible for all orgs", - "modified": false - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan is already inaccessible for this org", - "modified": false - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "There are no running instances of this app.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "There are too many options to display, please type in the name.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}': ", - "modified": false - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Timeout for async HTTP requests", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Total Memory", - "modified": false - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total number of routes", - "translation": "Total number of routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Total number of service instances", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Trace HTTP requests", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint missing from config file", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USAGE:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "USER ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "USERS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Unable to authenticate.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Unable to delete, route '{{.URL}}' does not exist.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Unbind a service instance from an app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "Uninstall the plugin defined in command argument", - "modified": false - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Unlock the buildpack to enable updates", - "modified": false - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Update a buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Update a service broker", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Update an existing resource quota", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Update user-provided service instance name value pairs", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Updating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Updating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Uploading app files from: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Uploading buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Uploading {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Use '{{.Name}}' to view or set your target org and space", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Use a one-time password to login", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "User {{.TargetUser}} does not exist.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "User-Provided:", - "modified": false - }, - { - "id": "User:", - "translation": "User:", - "modified": false - }, - { - "id": "Username", - "translation": "Username", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Using manifest file {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Using route {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Using stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verify Password", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Warning: error tailing logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "Zip archive does not contain a buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[PRIVATE DATA HIDDEN]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[environment variables]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[global options] command [arguments...] [command options]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "access for plans of a particular broker", - "modified": false - }, - { - "id": "access for plans of a particular service offering", - "translation": "access for plans of a particular service offering", - "modified": false - }, - { - "id": "actor", - "translation": "actor", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "allowed", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "app crashed", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "auth request failed", - "modified": false - }, - { - "id": "bound apps", - "translation": "bound apps", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "crashing", - "modified": false - }, - { - "id": "description", - "translation": "description", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "disallowed", - "modified": false - }, - { - "id": "disk", - "translation": "disk", - "modified": false - }, - { - "id": "disk:", - "translation": "disk:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "domain", - "modified": false - }, - { - "id": "domains:", - "translation": "domains:", - "modified": false - }, - { - "id": "down", - "translation": "down", - "modified": false - }, - { - "id": "enabled", - "translation": "enabled", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "env var '{{.PropertyName}}' should not be null", - "modified": false - }, - { - "id": "event", - "translation": "event", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "filename", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "incorrect usage", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instances", - "modified": false - }, - { - "id": "instances:", - "translation": "instances:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "invalid inherit path in manifest", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "last uploaded:", - "modified": false - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "locked", - "modified": false - }, - { - "id": "memory", - "translation": "memory", - "modified": false - }, - { - "id": "memory:", - "translation": "memory:", - "modified": false - }, - { - "id": "name", - "translation": "name", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "not valid for the requested host", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organization", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "owned", - "modified": false - }, - { - "id": "paid service plans", - "translation": "paid service plans", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "plans", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "quota:", - "modified": false - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "requested state", - "modified": false - }, - { - "id": "requested state:", - "translation": "requested state:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "running", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "service instance", - "modified": false - }, - { - "id": "service instances", - "translation": "service instances", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "shared", - "modified": false - }, - { - "id": "since", - "translation": "since", - "modified": false - }, - { - "id": "space", - "translation": "space", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "spaces:", - "modified": false - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "starting", - "modified": false - }, - { - "id": "state", - "translation": "state", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "stopped", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "stopped after 1 redirect", - "modified": false - }, - { - "id": "time", - "translation": "time", - "modified": false - }, - { - "id": "total memory limit", - "translation": "total memory limit", - "modified": false - }, - { - "id": "unknown authority", - "translation": "unknown authority", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "usage:", - "modified": false - }, - { - "id": "user", - "translation": "user", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "write default values to the config", - "modified": false - }, - { - "id": "yes", - "translation": "yes", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrated.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} of {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} down", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} failing", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} of {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} already exists", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} must be a string or null value", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} must be a string value", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} should not be null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "modified": false - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} of {{.TotalCount}} instances running", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} starting", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/es_ES.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/es_ES.all.json deleted file mode 100644 index 244929a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/es_ES.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nTIP:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\nLa App empezo\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nTIP: Asignar rol con '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nTIP: Usar '{{.Command}}' para seleccionar una nueva org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nTIP: usar 'cf login -a API --skip-ssl-validation' o 'cf api API --skip-ssl-validation' para evitar este error", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Create and manage the billing account and payment info\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"password\\\"\" (Escapar comillas de ser usadas en la password)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (Usar comillas para passwords con espacios)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omitir nombre de usuario y clave para loguearse interactivamente -- CF_NAME preguntará por ambas)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME provee un password que se podrá usar una vez para el login)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (Escapar comillas de ser usadas en la clave)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (Usar comillas para claves con espacios)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (especifica nombre de usuario y password como argumentos)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Acceso de solo lectura a información y reportes de una org\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Invita y maneja usuarios, selecciona y cambia planes, y ajusta los límites de gasto\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " La ruta debe ser un archivo zip, una url a un archivo zip, o in directorio local. La posicion es un entero, setea prioridad, y es ordenado de menor a mayor.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Push multiple apps with a manifest:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - Examina logs, reportes, y ajustes en este space\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Crea y maneja apps y servicios, y examina logs y reportes\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Invita y manja usuarios, y habilita funcionalidades para un space dado\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " Muestra cuotas permitidas con 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NUMERO_DE_INSTANCIAS] [-k DISCO] [-m MEMORIA] [-n HOST] [-p RUTA] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " Ya ha comenzado", - "modified": false - }, - { - "id": " is already stopped", - "translation": " ya ha parado", - "modified": false - }, - { - "id": " is empty", - "translation": " esta vacio", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " no encontrado", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "Una aplicacion de línea de comando para interactuar con Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "ADVANCED", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API endpoint", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API endpoint (ej. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "Endpoint API:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API endpoint: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API endpoint: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Agrega una ruta url a la app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Agregando ruta {{.URL}} a app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for the org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for the org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "También borra cualquier ruta mapeada", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "una org debe estar seleccionada antes de seleccionar el space", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "El nombre de la App también es un campo requerido", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "La app {{.AppName}} no existe.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "La app {{.AppName}} es un worker, saltando la ruta de creación", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "La app {{.AppName}} ya esta ligada a {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Anade diagnósticos de solicitud API al archivo de log", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Asigna una cuota a una org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Asigna un rol al spaces para el usuario", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Asigna un rol a la org para el usuario", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Asignando rol {{.Role}} a usuario {{.TargetUser}} en org {{.TargetOrg}} / space {{.TargetSpace}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Asignando rol {{.Role}} a usuario {{.TargetUser}} en org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Auténtica usuario no interactivamente", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Autenticando...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "BILLING MANAGER", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "Tiempo de construcción:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Bind a service instance to an app", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Binding servicio {{.ServiceName}} a la app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Vinculando {{.URL}} a {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "El buildpack {{.BuildpackName}} ya existe", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "El buildpack {{.BuildpackName}} no existe.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "La cantidad de bytes debe ser un número entero positivo con la unidad medida en M, MB, G, o GB", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USUARIO CLAVE\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TIEMPO DE ESPERA EN MINUTOS] [--trace true | false | path/to/file] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMINIO", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME crea-cuota CUOTA [-m MEMORIA] [-r RUTAS] [-s INSTANCIAS_DE_SERVICIOS] [--permitir-planes-de-servicios-pagos]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMINIO [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USUARIO CLAVE URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMINIO", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USUARIO CLAVE", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METODO] [-H CABECERA] [-d DATA] [--output ARCHIVO]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMINIO [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME borrar-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME borra-cuota Cuota [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMINIO [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMINIO [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME borra-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USUARIO [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [PATH]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USUARIO] [-p CLAVE] [-o ORG] [-s SPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME salio", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMINIO [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME cuota CUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME cuotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename APP_NAME NEW_APP_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME renombrar-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space SPACE NEW_SPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i INSTANCIAS] [-k DISCO] [-m MEMORIA] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NOMBRE VALOR", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USUARIO ORG ROL\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME establecer-quota ORG CUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USUARIO ORG SPACE ROL\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space SPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s SPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP SERVICE_INSTANCE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMINIO [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NOMBRE", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USUARIO ORG ROL\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USUARIO ORG SPACE ROL\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USUARIO CLAVE URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERROR CREANDO ARCHIVO DE LOG {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Puede proveer instancias de planes de servicios pagos", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Cannot list marketplace services without a targeted space", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "no se puede proveer instancias de planes de servicios pagos", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "No se puede especificar ambos con la opción de lock y unlock", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "No se pueden especificar ambos {{.Enabled}} y {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "No se puede especificar los bits del buildpack y bloquear/desbloquear", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Cambia o muestra el contador de instancias, y límites de memoria de una app", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Cambia clave de usuario", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Cambiando clave...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Comando no encontrado", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Conectando, dumping logs recientes de la app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Conectando, tailing logs para la app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "No se pudo asociar el servicio {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "No se pudo determinar el directorio de trabajo actual!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "No se pudo encontrar el dominio por defecto", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "No se pudo encontrar la app llamada Could not find app named '{{.AppName}}' en el manifest", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Could not find plan with name {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "No se pudo encontrar el servicio {{.ServiceName}} para asociar a {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "No se pudo parsear el numero de version: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "No se pudo serializar la información", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "No se pudo serializar la actualización.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "No se pudo seleccionar la org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "No se pudo crear el archivo temporal de subida.", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "No se pudo abrir el archivo de buildpack", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "No se pudo escribir el archivo zip", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Crea un buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Crea un dominio en una org para usar posteriormente", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Crea un dominio que puede ser usado por todas las orgs(solo admin)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Crea un nuevo usuario", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Crea una ruta aleatoria para esta app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Crea un corredor de servicio", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Create a service instance", - "modified": false - }, - { - "id": "Create a space", - "translation": "Create a space", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Crea una ruta url en el space para su posterior uso", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Crea una org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creando app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Creando buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creando dominio {{.DomainName}} para la org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Creando org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creando cuota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creando ruta {{.Hostname}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Creando ruta {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creando servicio {{.ServiceName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "creando dominio compartido {{.DomainName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creando servicio provisto por el usuario {{.ServiceName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creando usuario {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "las credenciales fueron rechazadas, por favor intente nuevamente.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Clave Actual", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "La clave actual no coincide", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "buildpack personalizado por nombre (ej. my-buildpack) o por GIT URL (ej. https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Cabeceras personalizadas a ser incluidas en la solicitud, La bandera puede ser especificada múltiples veces", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMINIOS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define un nuevo recurso de cuota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Borra un buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Borra un dominio", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Borra una cuota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Borra una ruta", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Borra un corredor de servicio", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Delete a service instance", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Borra un dominio compartido", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Delete a space", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Borra un usuario", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Borra todas las rutas huérfanas (ej.: aquellas que no estan mapeadas a una app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Borra una app", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Borra una org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Borrado cancelado", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Borrando app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Borrando buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Borrando dominio{{.DomainName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Borrando org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Borrando cuota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Borrando ruta {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Borrando ruta {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token como {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} en la org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Borrando usuario {{.TargetUser}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Descripcion: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Desactiva el buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Limite de Disco (ej. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Muestra salud y estado de una app", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "No coloriza la salida", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Do mapea ruta a esta app", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "No empieza una app después de subirse", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Url de documentacion: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domain (ej. ejemplo.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Arroja logs recientes en vez de tailing", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "ENVIRONMENT VARIABLES:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EJEMPLO:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Habilita la salida de CF_TRACE para todas las solicitudes y respuestas", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Habilita HTTP proxying para solicitudes API", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Habilitar o desabilitar color", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Habilita el buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Variable de Env {{.VarName}} no fue establecido.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Error construyendo solicitud", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Error creando solicitud:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Error al crear el archivo temporal: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Error creando subida", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Error creando usuario {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Error borrando buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Error arrojando respuesta\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error arrojando respuesta\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Error encontrando orgs disponibles\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Error encontrando spaces disponibles\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Error al encontrar comando {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Error encontrando manifesto", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Error encontrando org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Error encontrando space {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Error en el requerimiento", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Error calculando las referencias del JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Error al abrir el archivo de buildpack", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Error analizando JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Error analizando las cabeceras", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Error realizando solicitud", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Error leyendo el archivo de manifiesto:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Error al leer la respuesta", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Error renombrando buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolviendo ruta:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Error actualizando buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Error subiendo aplicacion.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Error al subir el buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Error escribiendo el archivo temporal: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Error al comprimir la aplicacion", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Error: ningun nombre encontrado para la app", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Error: se acabo el tiempo de espera esperando el trabajo asincrono '{{.ErrURL}}' para terminar", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Error: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Ejecuta una solicitud cruda, el content-type está configurado por defecto a application/json", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Se espera que la aplicacion sea una lista de pares clave/valor\nHubo un error en el manifesto cerca de:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Se espera que las aplicaciones sean una lista", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "Se espera {{.Name}} que sea un set de clave =\u003e valor, pero fue un {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "Se espera {{.PropertyName}} que sea un booleano.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "Se espera {{.PropertyName}} que sea una lista de cadenas.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "Se espera que {{.PropertyName}} sea un número, pero fue un {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FALLO", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Fallo trayendo buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Fallo al obtener dominios.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Fallo al recuperar eventos.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Fallo trayendo usuarios-de-org para rol {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Fallo al obtener orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Fallo trayendo rutas.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Fallo trayendo usuarios-de-space para rol {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Error al crear json para la solicitud de resource_match", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Fallo en calcular las referencias del JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Fallo al comenzar la solicitud oauth", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Fuerza borrado sin confirmacion", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Forza migracion sin confirmacion", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Fuerza reinicio de la app sin sugerencias.", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "GETTING STARTED", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "OPCIONES GLOBALES:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Obteniendo todos los servicios del mercado...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obteniendo apps en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Obteniendo buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Obteniendo dominios en la org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obteniendo variables de env para app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Obteniendo eventos para app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obteniendo archivos para app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Obteniendo info para la org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Obteniendo info del space {{.TargetSpace}} en org {{.OrgName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Trayendo las orgs como {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Obteniendo info de cuota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Obteniendo cuotas como {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Obteniendo rutas como {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers como {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} como {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obteniendo stacks en org {{.OrganizationName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Obteniendo usuarios en la org {{.TargetOrg}} / space {{.TargetSpace}} como {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Obteniendo usuarios en la org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "Data HTTP a incluir en el cuerpo de la solicitud", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "Metodo HTTP (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Nombre de host (ej. my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignora archivo de manifesto", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Incluye las cabeceras de la respuesta en la salida", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Uso incorrecto", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Uso Incorrecto.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Uso incorrecto. Banderas de línea de comando (excepto -f) no pudieron ser aplicadas subiendo multiples apps de un archivo de manifiesto.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Numero incorrecto de argumentos", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Respuesta JSON invalida del servidor", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Rol Invalido {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Certificado SSL invalido para {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Respuesta asíncrona inválida del servidor", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Token de autenticacion inválido: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Cuota de disco invalida: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Cuota de disco invalida: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "cantidad de instancias invalido: {{.InstanceCount}}\nEl contador de instancias debe ser un integer positivo", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "cantidad de instancias invalido: {{.InstancesCount}}\nEl contador de instancias deber ser un integer positivo", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Manifesto invalido. Se espera un mapa", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Limite de memoria invalido: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Limite de memoria invalido: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Limite de memoria invalido: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Parametro de timeout invalido: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Uso invalido", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Valor inesperado para {{.PropertyName}} :\n{{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON is invalid: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "Lista todas las apps en el space seleccionado", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "Lista todos los buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "Lista todas las orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "List all service instances in the target space", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "List all spaces in an org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Lista todos los stacks(un stack es un sistema de archivos pre construid, Incluyendo un sistema operativo, que puede correr apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "Lista todos los usuarios en la org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "List available offerings in the marketplace", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "Lista uso de cuota disponible", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "Lista dominios en la org apuntada", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "Lista los tokens de autenticacion de servicios", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List los corredores de servicios", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Bloquea el buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Inicia sesión con usuario", - "modified": false - }, - { - "id": "Log user out", - "translation": "Cierra sesion con usuario", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Cerrando sesión...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "El endpoint de Loggregator no esta presente en el config file", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Hace que un servicio provisto por el usuario este disponible en las apps de cf", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Mapea el dominio raiz a esta app", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Tiempo máximo de espera para comienzo de instancia, en minutos", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Tiempo máximo de espera máximo para buildpack staging, en minutos", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Tiempo de espera en segundos", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Limite de memoria (ej. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migra instancias de servicios un plan a otro", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NOMBRE:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "Nueva Clave", - "modified": false - }, - { - "id": "New name", - "translation": "Nuevo nombre", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "No hay endpoint API seleccionado. usar '{{.LoginTip}}' o '{{.APITip}}' para seleccionar un endpoint.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No hay un edpoint para la api establecido. Usar '{{.Name}}' para establecer un endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "Apps no encontradas", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No se encontraron builpacks", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No se encontraron dominios", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "No hay eventos para la app {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "No flags specified. No changes were made.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "No hay org o space seleccionado, usar '{{.Command}}' para seleccionar una org y un space", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "No se ha seleccion org o space, usar '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "No se ha seleccionado una org, usar '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "No hay org seleccionada, usar '{{.Command}}' para seleccionar una org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "No se encontraron orgs", - "modified": false - }, - { - "id": "No routes found", - "translation": "No se encontraron rutas", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "No se encontraron ofertas de servicio", - "modified": false - }, - { - "id": "No services found", - "translation": "No services found", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "Sin space seleccionado, usar '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "no se ha seleccionado un space, usar '{{.Command}}' para seleccionar space", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "Ninguna variable de entorno provista por el sistema ha sido establecida", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "Ninguna variable de entorno provista por el usuario ha sido establecida", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "No hay session iniciada. Usar '{{.CFLoginCommand}}' Para iniciar sesion.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Numero de instancias", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "AUDITOR DE ORG", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "MANAGER DE ORG", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "La org {{.OrgName}} todavia existe", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "La org {{.OrgName}} no existe.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Sobreescribe la ruta al directorio de configuración por default", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Planes pagos de servicio", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Clave", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "La verificacion de la Clave no coincide", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Ruta al directorio o al archivo zip", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Ruta al manifesto", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "El plan {{.ServicePlanName}} no se pudo encontrar", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan {{.ServicePlanName}} has no service instances to migrate", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Por favor elegir entre permitir o denegar. Ambas banderas no no se pueden pasar al mismo comando.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Por favor no", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Por favor iniciar sesión nuevamente", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Imprime el diagnostico de solicitudes API a stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Imprime una lista de archivos en un directorio o los contenidos de un archivo específico.", - "modified": false - }, - { - "id": "Print the version", - "translation": "Imprime la version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Propiedad '{{.PropertyName}}' encontrada en el manifesto. Esta funcionalidad ya no es soportada. Por favor removerla e intentar nuevamente.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provider", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purging service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Sube una nueva app o sincroniza cambios a una existente", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Sube una unica app (con o sin un archivo de manifiesto):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "La definicion de quota {{.QuotaName}} todavia existe", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "La cuota {{.QuotaName}} no existe", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "SOLICITUD:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPUESTA:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "ROLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Realmente borrar rutas huerfanas?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Borrar realmente el {{.ModelType}} {{.ModelName}} y todo lo que esté asociado a él?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "En verdad quiere borrar el {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Purgar realmente la oferta del servicio {{.ServiceName}} de Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Recibio certificado SSL invalido de ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remueve un rik en space del usuario", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remueve una ruta url de una app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remueve una variable de entorno", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remueve un rol en org del usuario", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removiendo variable de entorno {{.VarName}} de la app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removiendo rol {{.Role}} del usuario {{.TargetUser}} en la org {{.TargetOrg}} / space {{.TargetSpace}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removiendo rol {{.Role}} del usuario {{.TargetUser}} en org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removiendo ruta {{.URL}} de app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removiendo ruta {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Renombrar un buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Rename a service instance", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Rename a space", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Renombrar una app", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Renombra una org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renombrando app {{.AppName}} a {{.NewName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renombrando buildpack {{.OldBuildpackName}} a {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renombrando la org {{.OrgName}} a {{.NewName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} como {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "re-stageing de una app", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "re-stagging de app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Reiniciar una app", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Routa {{.URL}} todavia existe", - "modified": false - }, - { - "id": "Routes", - "translation": "Rutas", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "GRUPO DE SEGURIDAD", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "SERVICE ADMIN", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "AUDITOR DEL SPACE", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "DEVELOPER DEL SPACE", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "MANAGER DEL SPACE", - "modified": false - }, - { - "id": "SPACES", - "translation": "SPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Escala app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Grupos de seguridad:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Elegir un space (o presionar enter para omitir):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Elegir una org(o presionar enter para omitir):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Error en servidor, codigo de estado: {{.ErrStatusCode}}, codigo de error: {{.ErrApiErrorCode}}, mensaje: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Service Instance is not user provided", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Service instance: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "El servicio {{.ServiceName}} no existe.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Servicios", - "modified": false - }, - { - "id": "Services:", - "translation": "Servicios:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Configura una variable de entorno para una app", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Configura o muestra la org y space seleccionada", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Configurando endpoint api a {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Estableciendo variable de entorno '{{.VarName}}' a '{{.VarValue}}' para app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Estableciendo cuota {{.QuotaName}} a la org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Muestra todas las variables de entorno para una app", - "modified": false - }, - { - "id": "Show help", - "translation": "Mostrar ayuda", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Muestra info de org", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Muestra los usuarios de una org por rol", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Muestra info de cuota", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Muestra eventos recientes de una app", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Show service instance info", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Show space info", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Muestra los usuarios de un space por rol", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Mostrando como escala la app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Mostrando saludo y estado de la app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Space:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack a usar(un stack es un sistema de archivos ya construido, incluyendo un sistema operativo, que puede correr las apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Inicia una app", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Tiempo de espera para comienzo de app\n\nTIP: usar '{{.Command}}' para mas informacion", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Comienzo fracasado\n\nTIP: usar '{{.Command}}' para mas informacion", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Comenzando app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Comando de inicio, establecer a null para resetear al comando por defecto de inicio", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Para una app", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Parando app {{.AppName}} en org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Url para drenar Syslog", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "Provisto-por-el-sistema:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "TIP: Usar '{{.ApiCommand}}' para continuar con un endpoint API inseguro", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Usar '{{.CFCommand}}' para asegurarse que los cambios en tus variables de entorno surtan efecto", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "TIP: To make these changes take effect, use '{{.CFUnbindCommand}}' to unbind the service, '{{.CFBindComand}}' to rebind, and then '{{.CFRestageCommand}}' to update the app with the new env variables", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Usar '{{.Command}}' para asegurar que los cambios en las variables de entorno hagan efecto", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: usar '{{.CfUpdateBuildpackCommand}}' para actualizar este buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Tail o muestra logs recientes de una app", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Org seleccionada {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Space seleccionado {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "La posicion entre otros buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "La ruta {{.URL}} todavia esta en uso.\nTIP: Cambiar el nombre de host con -n HOSTNAME o usar --random-route para generar una nueva ruta y luego subirla nuevamente.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "No hay instancias en marcha de esta app.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "Hay muchas opciones para mostrar, por favor ingrese el nombre.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "Este dominio es compartido entre todas las orgs.\nBorranlo removerá todas las rutas asociadas, y hará que cualquier app con este dominio no sea direcionable.\nEsta seguro que quiere borrar el dominio {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "Esto causará que la app reinicie. Esta seguro que quiere escalar {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Tiempo de espera para solicitudes HTTP asíncronas", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memoria", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Cantidad total de memoria (ej. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Numero total de rutas", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Numero total de instancias de servicios", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Reastea solicitudes HTTP", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint no esta presente en el config file", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USO:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "USER ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "USERS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "No se pudo acceder al space {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "No se pudo autenticar.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "no se puede borrar, la ruta '{{.URL}}' no existe.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Unbind a service instance from an app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Desbloquea el buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Actualiza buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Actualiza un corredor de serivicio", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Actualiza un recurso de cuota existente", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Update user-provided service instance name value pairs", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Actualizando app {{.AppName}} en la org {{.OrgName}} / space {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Subiendo buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Actualizando cuota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} como {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Subiendo archivos de la app desde: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Subiendo buildpack{{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Subiendo {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Subiendo {{.ZipFileBytes}}, {{.FileCount}} archivos", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Usar '{{.Name}}' para mostrar o establecer la org y space seleccionadas", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Usar un clave por única vez para iniciar sesión", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "El usuario {{.TargetUser}} no existe.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "Provisto-por-el-Usuario:", - "modified": false - }, - { - "id": "User:", - "translation": "Usuario:", - "modified": false - }, - { - "id": "Username", - "translation": "Usuario", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Usando archivo de manifest {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Usando ruta {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Usando stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verificar Clave", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "ADVERTENCIA:\n Proporcionar tu clave como una opción de línea de comando es desaconsejable\n Tu clave puede ser visible por otros y ser grabada de el historial del shell\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "ADVERTENCIA: Esta operacion asume que el corredor de servicio responsable de esta oferta ya no esta disponible, Y todas las instancias del servicio han sido borradas, dejando servicios huérfanos en los registros de la base de datos de Cloud Foundry. Todo los conocimientos del servicio van a ser removidos de Cloud Foundry, incluyendo instancias del servicio y asociaciones al mismo. No se intentará contactar al corredor de servicio; correr este comando sin destruir el corredor de servicio causará instancias del servicio huérfanas. Despues de correr este comando tal vez quiera correr o delete-service-auth-token o delete-service-broker para completar la limpieza.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Advertencia: endpoint inseguro de API http detectado: se recomienda usar https para API\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Advertencia: error al hacer tail a los logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "El archivo Zip no contiene un builpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[PRIVATE DATA HIDDEN]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[variables de entorno]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[opciones globales] comando [argumentos...] [opciones del comando]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "actor", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "permitido", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "La app rompio", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "la solicitud ouath fallo", - "modified": false - }, - { - "id": "bound apps", - "translation": "apps ligadas", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "rompio", - "modified": false - }, - { - "id": "description", - "translation": "descripcion", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "denegado", - "modified": false - }, - { - "id": "disk", - "translation": "disco", - "modified": false - }, - { - "id": "disk:", - "translation": "disco:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "dominio", - "modified": false - }, - { - "id": "domains:", - "translation": "dominios:", - "modified": false - }, - { - "id": "down", - "translation": "caida", - "modified": false - }, - { - "id": "enabled", - "translation": "habilitado", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "la variable de entorno '{{.PropertyName}}' no deberia ser null", - "modified": false - }, - { - "id": "event", - "translation": "evento", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "Fallo al apagar el eco de la consola para la entrada de clave:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "filename", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "uso incorrecto", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instancia: {{.InstanceIndex}}, razon: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instancias", - "modified": false - }, - { - "id": "instances:", - "translation": "instancias:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "la ruta al manifesto heredada es invalida", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "Valor invalido para la variable de entorno CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "Valor invalido para la variable de entorno CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "bloqueado", - "modified": false - }, - { - "id": "memory", - "translation": "memoria", - "modified": false - }, - { - "id": "memory:", - "translation": "memoria:", - "modified": false - }, - { - "id": "name", - "translation": "name", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "No valido para el host solicitado", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organización", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "adueneada", - "modified": false - }, - { - "id": "paid service plans", - "translation": "planes de servicios pagos", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "planes", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "quotas:", - "modified": true - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "Estado solicitado", - "modified": false - }, - { - "id": "requested state:", - "translation": "Estado solicitado:", - "modified": false - }, - { - "id": "routes", - "translation": "rutas", - "modified": false - }, - { - "id": "running", - "translation": "en marcha", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "service instance", - "modified": false - }, - { - "id": "service instances", - "translation": "instancias de servicio", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "compartida", - "modified": false - }, - { - "id": "since", - "translation": "desde", - "modified": false - }, - { - "id": "space", - "translation": "space", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "spaces:", - "modified": false - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "iniciando", - "modified": false - }, - { - "id": "state", - "translation": "estado", - "modified": false - }, - { - "id": "status", - "translation": "estado", - "modified": false - }, - { - "id": "stopped", - "translation": "paro", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "Paro despues de 1 redireccion", - "modified": false - }, - { - "id": "time", - "translation": "tiempo", - "modified": false - }, - { - "id": "total memory limit", - "translation": "limite de memoria", - "modified": true - }, - { - "id": "unknown authority", - "translation": "autoridad desconocida", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "uso:", - "modified": false - }, - { - "id": "user", - "translation": "usuario", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "escribe valores por defecto en la configuración", - "modified": false - }, - { - "id": "yes", - "translation": "si", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (version de API: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrated.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} de {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} caidas", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nTIP: usar '{{.Command}}' para mas informacion", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} fallando", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} de {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} ya existe", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} Debe ser una cadena o null como valor", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} Debe ser una cadena como valor", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} no deberia ser null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} de {{.TotalCount}} instancias en marcha", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} iniciando", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instancias", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/fr_FR.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/fr_FR.all.json deleted file mode 100644 index 427c754..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/fr_FR.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nCONSEIL:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nLa syntaxe JSON est invalide. Syntaxe correcte: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nLa syntaxe JSON est invalide. Syntaxe correcte: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* Les services annotés ont des coûts associés. Si une instance de ce type est créée, un coût sera associé.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "Application démarrée", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApplication {{.AppName}} a été démarrée avec la commande `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nAucun endpoint d'API configuré.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nLa route à désassigner n'est pas assignée à l'application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nCONSEIL: Utiliser 'cf marketplace -s SERVICE' pour voir les descriptions des formules disponibles pour un service donné.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nCONSEIL: Attribuer des rôles avec '{{.CurrentUser}} set-org-role' '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nCONSEIL: Utiliser '{{.CFTargetCommand}}' pour cibler un nouvel espace", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nCONSEIL: Utiliser '{{.Command}}' pour cibler nouvelle org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nCONSEIL: utiliser 'cf login -a API --skip-ssl-validation' ou 'cf api API --skip-ssl-validation' pour supprimer cette erreur", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": "BillingManager - Créer et gérer le compte de facturation et les informations de paiement\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": "CF_NAME auth name@example.com \"\\\"mot de passe\\\"\" (échapper les guillemets s'ils sont utilisés dans un mot de passe)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": "CF_NAME auth name@example.com \"mot de passe\" (utilisez des guillemets pour les mots de passe avec un espace)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": "CF_NAME login (omettre nom de l'utilisateur et mot de passe pour se connecter de manière interactive - CF_NAME vous demandera les deux)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": "CF_NAME login --sso (CF_NAME fournira une URL pour obtenir un mot de passe unique pour se connecter)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": "CF_NAME login -u name@example.com -p \"\\\"mot de passe\\\"\" (échapper les guillemets s'ils sont utilisés dans un mot de passe)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": "CF_NAME login -u name@example.com -p \"mot de passe\" (utilisez des guillemets pour les mots de passe avec un espace)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": "CF_NAME login -u name@example.com -p pa55woRD (préciser nom de l'utilisateur et mot de passe comme arguments)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b NOM_BUILDPACK] [-c COMMANDE] [-d DOMAINE] [-f CHEMIN_VERS_MANIFEST]", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f CHEMIN_VERS_MANIFEST]", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": "OrgAuditor - accès en lecture seule aux informations et rapports de l'org\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": "OrgManager - Inviter et gérer les utilisateurs, sélectionner et modifier les plans, et fixer des limites de dépenses\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Le chemin doit être un fichier zip, une URL vers un fichier zip, ou un répertoire local. Position est un nombre entier, définit la priorité, et est trié par ordre croissant.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Déployer plusieurs applications avec un manifest:", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": "SpaceAuditor - Voir les logs, les rapports et les paramètres pour cet espace\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": "SpaceDeveloper - Créer et gérer les applications et les services, et consulter les logs et les rapports\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": "SpaceManager - Inviter et gérer les utilisateurs, et activer des fonctionnalités pour un espace donné\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " Le chemin donné peut être un chemin absolu ou relatif vers un fichier.\n Celui-ci doit contenir un tableau d'objets JSON qui décrivent les règles.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " Le chemin donné peut être un chemin absolu ou relatif vers un fichier. Le fichier doit contenir\n un tableau d'objets JSON qui décrivent les règles. L'objet racine JSON est \n omis et seulement les crochets et objets enfants associés sont requis dans le fichier. \n\n Exemple de JSON valide:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": "Voir les quotas admissibles avec 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NOMBRES_INSTANCES] [-k DISC] [-m MEMOIRE] [-n HÔTE] [-p CHEMIN] [-s PILE] [-t TEMPS_EXPIRATION]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " est déjà démarré", - "modified": false - }, - { - "id": " is already stopped", - "translation": " est déjà arrêté", - "modified": false - }, - { - "id": " is empty", - "translation": " est vide", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " pas trouvé", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "Un outil de ligne de commande pour interagir avec Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "AVANCÉE", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "Endpoint de l'API", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "endpoint de l'API (par exemple https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "Endpoint de l'API:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "Endpoint de l'API: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "Endpoint de l'API : {{.ApiEndpoint}} (version de l'API: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "Endpoint de l'API: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Ajouter une route URL pour une application", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Ajout de la route {{.URL}} à l'application {{.AppName}} dans {{.OrgName}} / {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "L'alias `{{.Command}}` dans le plugin en cours d'installation est une commande/un alias CF natif. Renommez la commande `{{.Command}}` dans le plugin afin d'activer son installation.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "L'alias `{{.Command}}` est une commande/alias du plugin '{{.PluginName}}'. Vous pouvez tenter de désinstaller le plugin '{{.PluginName}}' puis installer ce plugin afin d'exécuter la commande `{{.Command}}`. Néanmoins, vous devriez d'abord comprendre l'impact de la désinstallation du plugin '{{.PluginName}}'.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "Tous les plans pour ce service sont déjà accessibles pour toutes les orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "Tous les plans pour ce service sont déjà accessibles pour cette org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "Tous les plans pour ce service sont déjà inaccessibles pour toutes les orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "Tous les plans pour ce service sont déjà inaccessibles pour cette org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "Supprimer également toutes les routes assignées", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "Un organisation doit être ciblée avant de cibler un espace", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "Nom de l'application est un champ obligatoire", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "App {{.AppName}} n'existe pas.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} est un worker, pas de création de routes", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} est déjà liée à {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Ajouter les diagnostiques de la requête d'API à un fichier de logs", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Attribuer un quota à une org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Attribuer une définition de quota d'espace à un espace", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Attribuer un rôle d'espace à un utilisateur", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Attribuer un rôle d'org à un utilisateur", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Valeur attribuée", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Affectation du rôle {{.Role}} à l'utilisateur {{.TargetUser}} de l'org {{.TargetOrg}} / espace {{.TargetSpace}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Affectation du rôle {{.Role}} à l'utilisateur {{.TargetUser}} de l'org {{.TargetOrg}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Affectation du groupe de sécurité {{.security_group}} à l'espace {{.space}} dans l'org {{.organization}} en tant que {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Affectation d'un quota d'espace {{.QuotaName}} à l'espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Tentative de migration {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: Le plan `{{.PlanName}}` du service `{{.ServiceName}}` n'est pas gratuit. L'instance `{{.ServiceInstanceName}}` occasionnera un coût. Contactez votre administrateur si vous pensez que c'est une erreur.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Authentifier l'utilisateur de manière non-interactive", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Authentification en cours ...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "L'authentication a expiré. Authentifiez vous à nouveau.\n\nCONSEIL: Utilisez `cf login -a \u003cendpoint\u003e -u \u003cutilisateur\u003e -o \u003corg\u003e -s \u003cespace\u003e` pour vous réauthentifier.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "RESPONSABLE DE FACTURATION", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "TEMPS DE COMPILATION:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Lier un groupe de sécurité à un espace", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Lier un groupe de sécurité à la liste des groupes de sécurité à utiliser pour exécuter des applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Lier un groupe de sécurité à la liste des groupes de sécurité à utiliser pour activer des applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Lier une instance de service à une application", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "La liaison entre {{.InstanceName}} et {{.AppName}} n'existait pas", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Liaison du groupe de sécurité {{.security_group}} aux préférences par défaut pour l'éxécution en tant que {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Liaison du groupe de sécurité {{.security_group}} pour l'activation en tant que {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Liaison du service {{.ServiceInstanceName}} à l'app {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Liaison du service {{.ServiceName}} à l'app {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Liaison de {{.URL}} à {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Le buildpack {{.BuildpackName}} existe déjà", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Le buildpack {{.BuildpackName}} n'existe pas.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "La quantité d'octets doit être un entier positif avec une unité de mesure comme M, MB, G ou B", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth NOM_UTILISATEUR MOT_DE_PASSE\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group GROUPE_SECURITE", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group GROUPE_SECURITE ORG ESPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group GROUPE_SECURITE", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOTE DOMAINE", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [- async-timeout TIMEOUT_EN_MINUTES] [- tracer true | false | chemin/vers/fichier] [-color true | false] [--locale (LOCALE | CLEAR)]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK CHEMIN POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAINE", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m MÉMOIRE_TOTALE] [-i MÉMOIRE_INSTANCE] [-r ROUTES] [-s INSTANCES_DE_SERVICES] [--allow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route ESPACE DOMAINE [-n HÔTE]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group GROUPE_SECURITE CHEMIN_VERS_FICHIER_REGLES_JSON", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER NOM_UTILISATEUR MOT_DE_PASSE URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAINE", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG] [-q QUOTA-ESPACE]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i MEMOIRE_INSTANCE] [-m MEMOIRE [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user NOM_UTILISATEUR MOT_DE_PASSE", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAINE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HÔTE] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nÉXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAINE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user NOM_UTILISATEUR [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [PATH]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin CHEMIN/VERS/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u UTILISATEUR] [-p MOT_DE_PASSE] [-o ORG] [-s ESPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMAIN [-n HÔTE]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename NOM_APP NOUVEAU_NOM_APP", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack NOM_BUILDPACK NOUVEAU_NOM_BUILDPACK", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NOUVELLE_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service INSTANCE_DE_SERVICE NOUVELLE_INSTANCE_DE_SERVICE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NOUVEAU_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space ESPACE NOUVEL_ESPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "CF_NAME running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i INSTANCES] [-k DISC] [-m MEMOIRE] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nÉXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nÉXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NOM VALEUR", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role NOM_UTILISATEUR ORG RÔLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-espace-role NOM_UTILISATEUR ORG ESPACE RÔLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space ESPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG ESPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s ESPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP INSTANCE_DE_SERVICE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMAIN [-n NOM_DE_HÔTE]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NOM", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role NOM_DE_LUTILISATEUR ORG RÔLE", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-espace-rôle NOM_DE_LUTILISATEUR ORG ESPACE RÔLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MÉMOIRE] [-n NOUVEAU_NOM] [-r ROUTES] [-s INSTANCE_DE_SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER PSEUDO MOT_DE_PASSE URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service INSTANCE_DE_SERVICE [-p CREDENTIALS] [-l syslog-vindage-URL]'\n\nExemple:\n CF_NAME update-user-provided-service oracle-db-mines -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service mon-service-de-vindage -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERREUR CREATION FICHIER LOG {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Impossible de provisionner des instances de services payants", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Peut provisionner des instances de services payants", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Peut provisionner des instances de services payants (Par défaut: non autorisé)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Impossible de supprimer instance de service , clés de service et fixations doivent d'abord être supprimées", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Ne peut pas lister des services du marketplace sans cibler un espace", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Ne peut pas lister les informations du plan pour {{.ServiceName}} sans cibler un espace", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Incapable de provisionner des instance de services payants", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Vous ne pouvez pas spécifier le verrouillage et le déverrouillage des options.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Vous ne pouvez pas spécifier à la fois {{.Enabled}} et {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Vous ne pouvez pas spécifier les bits de buildpack et verrouillage / déverrouillage.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Modifier ou afficher le nombre d'instance, la limite de l'espace disque, et la limite de la mémoire pour une application", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Changer de formule de service pour une instance de service", - "modified": false - }, - { - "id": "Change user password", - "translation": "Changer mot de passe de l'utilisateur", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Changement de mot de passe ...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Vérification de la route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Aide de Commande", - "modified": false - }, - { - "id": "Command Name", - "translation": "Nom de la Commande", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "La commande `{{.Command}}` dans le plugin en cours d'installation est une commande native CF. Renommez la commande `{{.Command}}` dans ce plugin pour activer son installation.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Commande introuvable", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connecté, dump des logs récents pour application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connecté, suivi des logs pour l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Impossible de lier au service {{.ServiceName}}\nErreur: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Impossible de copier le binaire du plugin: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Impossible de déterminer le répertoire de travail courant!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Impossible de trouver un domaine par défaut", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Impossible de trouver l'application nommée '{{.AppName}}' dans le manifeste", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Impossible de trouver un plan avec le nom {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Impossible de trouver le service {{.ServiceName}} pour le lier à {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Impossible de trouver l'espace {{.Space}} dans l'organisation {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Impossible de trouver la version dans: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Impossible de sérialiser l'information", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Impossible de sérialiser les mises à jour.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Impossible de cibler org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Impossible de créer le fichier temporaire pour le téléchargement", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Impossible d'ouvrir le fichier de buildpack", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Impossible d'écrire fichier zip", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Créer un buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Créer un domaine dans une org pour une utilisation ultérieure", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Créer un domaine qui peut être utilisé par toutes les orgs (admin uniquement)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Créer un nouvel utilisateur", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Créer une route aléatoire pour cette application", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Créer un groupe de sécurité", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Créer un jeton d'authentification de service", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Créer un service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Créer une instance de service", - "modified": false - }, - { - "id": "Create a space", - "translation": "Créer un espace", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Créer une route dans un espace pour une utilisation ultérieure", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Créer une org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Création de l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Création du buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Création du domaine {{.DomainName}} pour l'org {{.OrgName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Création de l'org {{.OrgName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Création du quota {{.QuotaName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Création de la route {{.Hostname}} pour l'org {{.OrgName}} / {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Création de la route {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Création du groupe de sécurité {{.security_group}} en tant que {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Création d'un service broker {{.Name}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Création d'un service {{.ServiceName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Création du domaine partagé {{.DomainName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Création d'un service fourni par l'utilisateur {{.ServiceName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Création de l'utilisateur {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Informations d'authentification ont été rejetées, s'il vous plaît essayez à nouveau.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Version de l'API CF {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Version du CLI CF {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Mot de passe actuel", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Mot de passe actuel ne correspond pas", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Buildpack personnalisé par nom (par exemple mon-buildpack) ou URL git (par exemple https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Headers personnalisés à inclure dans la requête, la fonction peut être spécifiée plusieurs fois", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMAINES", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Definir un nouvea quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Supprimer un buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Supprimer un domaine", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Suprimmer le quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Suppression d'une route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Supprimer un service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Supprimer un service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Supprimer une instance de service", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Suprimer une clef de service", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Supprimer un domaine partagé", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Supprimer un espace", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Supprimer un utilisateur", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Supprimer toutes les routes orphelines (par exemple: celles qui ne sont pas mappées à une application)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Supprimer une application", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Supprimer une org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Suppression annulée", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Supprime un groupe de sécurité", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Suppression de l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Suppression du buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Suppression du domaine {{.DomainName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Suprimer la clef {{.ServiceKeyName}} pour instance de service {{.ServiceInstanceName}} étant {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Suppression de l'org {{.OrgName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Sumprimmer le quota {{.QuotaName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Suppression de la route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Suppression de la route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Suppression du service broker {{.Name}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Suppression du service {{.ServiceName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Suppression de l'utilisateur {{.TargetUser}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Description: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Désactiver le buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Limites de disque (par exemple, 256M, 1024M, 1g)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Afficher la santé et l'état de l'application", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Ne pas coloriser sortie", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Ne pas mapper un itinéraire vers cette application", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "Ne pas démarrer une application après avoir appuyé", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Documentation url: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domaine (par exemple, example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Dump des logs récents au lieu d'un suivi en direct", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "VARIABLES D'ENVIRONNEMENT:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EXEMPLE:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Activer la sortie de CF_TRACE pour toutes les demandes et les réponses", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Activer le proxy HTTP pour les requêtes de l'API", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Activer ou désactiver la couleur", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Activer le buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "La variable env {{.VarName}} n'était pas réglée.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Erreur en créant la demande", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "demande Erreur de création:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Erreur de création de fichier temporaire: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Erreur de création de téléchargement", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Erreur en créant l'utilisateur {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Erreur de suppression buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Erreur domaine suppression {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Erreur dumping la demande\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error dumping response\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Erreur trouver orgs disponibles\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Erreur trouver des espaces disponibles\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Erreur trouver la commande {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "domaine d'erreur trouver {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Erreur trouver du manifeste", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "constatation d'erreur org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "espace de constatation d'erreur {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Erreur dans l'exigence", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Erreur sérialisation JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Erreur d'ouverture du fichier buildpack", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Erreur d'analyse JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Erreur d'analyse des headers", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Erreur en effectuent la requête", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Erreur de lecture du fichier manifeste:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Erreur d'analyse de la réponse", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Erreur renommage buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Erreur de résolution de route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Erreur lors de la mise à jour buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Erreur lors du téléchargement de l'application.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Erreur ajout buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Erreur d'écriture de fichier tmp: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Erreur lors de la compression de l'application", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Erreur: Aucun nom trouvé pour l'application", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Erreur: expiration en attendant la fin de la tâche asynchrone '{{.ErrURL}}'", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Erreur: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Exécute une requête, le content-type mis à application/json par défaut", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "L'application devrait être une liste de paires clé/valeur\nErreur s'est produite dans le fichier manifeste vers:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Applications devrait être une liste", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "{{.Name}} devrait être un ensemble de clé =\u003e valeur, mais c'était une {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "La valeur {{.PropertyName}} doit d'être un booléen.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "{{.PropertyName}} doit être une liste de string.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "{{.PropertyName}} doit être un nombre, mais c'était une {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "RATÉ", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Échec téléchargement buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Échec récupération de domaines.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Échec récupération des événements.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Échec en cherchant org-users pour rôle {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Échec aller chercher orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Échec aller chercher routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Échec en cherchant les space-users pour rôle {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Impossible de créer json de la demande de resource_match", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Impossible de marshal JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Impossible de démarrer demande oauth", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Forcer la suppression sans confirmation", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Forcer la migration sans confirmation", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Force de redémarrage de l'application sans invite", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "MISE EN ROUTE", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "OPTIONS GLOBALES:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Récupération de tous les services du marketplace...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Récupération des applications dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Récupération des buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Récupération des domaines dans l'org {{.OrgName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Récupération des variables d'environnement pour l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Récupération des événements de l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Récupération des fichiers de l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Récupération des infos sur l'org {{.OrgName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Récupération des infos sur l'espace {{.TargetSpace}} dans l'org {{.OrgName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "En train d'obtenir la clef {{.ServiceKeyName}} pour instance de service {{.ServiceInstanceName}} étant {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Récupération des orgs en tant que {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Récupération de l'information de quota {{.QuotaName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Récupération des quotas en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Récupération des routes en tant que {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Récupération des services brokers en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Récupération des services du marketplace dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Rapporter des services dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obtenir des stacks dans org {{.OrganizationName}} / {{.SpaceName}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Obtenir utilisateurs dans org {{.TargetOrg}} / espace {{.TargetSpace}} en tant que {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Obtenir utilisateurs dans org {{.TargetOrg}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "données HTTP pour inclure dans le corps de la demande", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "méthode HTTP (GET, POST, PUT, DELETE, etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Nom d'hôte", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Nom d'hôte (par exemple, mon-domaine)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignorer fichier manifeste", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "En-têtes de réponse dans la sortie", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Utilisation Incorrecte", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Utilisation incorrecte.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Utilisation incorrecte. Drapeaux de ligne de commande (sauf -f) ne peuvent pas être appliquées en poussant plusieurs applications à partir d'un fichier manifeste.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Nombre d'arguments incorrect", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Serveur JSON réponse invalide", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Rôle invalide {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Invalid Cert SSL pour {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Réponse asynchrone du serveur est invalide", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Jeton auth invalide: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Quota de disque non valide: {{.DiskQuota}} {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Quota de disque non valide: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Instance non valide compter: {{.InstanceCount}}\nCompte de l'instance doit être un entier positif", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Instance non valide compter: {{.InstancesCount}}\nCompte de l'instance doit être un entier positif", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Manifeste non valide. Prévue une dictionaire", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Limite de mémoire non valide: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Limite de mémoire invalid: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Limite de mémoire non valide: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Invalid délai param: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Utilisation non valide", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Valeur inattendue pour {{.PropertyName}} :\n {{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON est invalide: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "La Dernierre Opération", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "Liste de toutes les applications dans l'espace ciblé", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "Liste de toutes les buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "Liste de toutes les orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "Liste de toutes les instances de service dans l'espace ciblé", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "liste de tous les espaces dans un org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Liste de toutes les stacks (un stacl est un système de fichiers pré-construit, y compris un système d'exploitation, qui peuvent exécuter des applications)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "Lister toutes les routes pour tous les espaces de l'organization courrant", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "Liste tous les utilisateurs dans le org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "Liste des offres disponibles sur le marché", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "domaines de la liste dans la org ciblé", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "Lister les clefs pour un instance de service", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "Liste service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "Liste des courtiers de service", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Verrouiller le buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Connexion utilisateur", - "modified": false - }, - { - "id": "Log user out", - "translation": "Déconnexion utilisateur", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Déconnexion ...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Loggregator endpoint manquant de fichier de configuration", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Faire un instance de service fourni par l'utilisateur à la disposition des applications cf", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Plan du domaine racine de l'application", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Temps d'attente maximum pour le démarrage d'instance, en minutes", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Temps d'attente maximum pour le chargement de buildpack, en minutes", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Quantité maximum de mémoire pour une instance d'application (ex: 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Quantité maximum de mémoire pour une instance d'application (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Lancer attente en secondes", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Limitations de la mémoire (par exemple, 256M, 1024M, 1g)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Méssage: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrez les instances de service d'un plan de service à un autre", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NOM:", - "modified": false - }, - { - "id": "Name", - "translation": "Nom", - "modified": false - }, - { - "id": "New Password", - "translation": "Nouveau mot de passe", - "modified": false - }, - { - "id": "New name", - "translation": "Nouveau nom", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "Aucun API endpoint ciblé. Utiliser '{{.LoginTip}}' ou '{{.APITip}}' pour ciblé un endpoint.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "Pas api endpoint ensemble. Utilisez '{{.Name}}' pour définir un point de terminaison", - "modified": false - }, - { - "id": "No apps found", - "translation": "Aucune application trouvée", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "Pas buildpacks trouvés", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "Pas domaines trouvés", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "Aucun événement pour l'application {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "Pas de marques spécifiés. Pas de modifications ont été apportées.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "Aucune org ou espace ciblée, utiliser la '{{.Command}}' pour ciblé l'org et l'espace", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "Aucune org ou espace ciblée, utiliser '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "Aucune org ciblée, utiliser '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "Aucune org ciblée, utiliser la '{{.Command}}' pour ciblé l'org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "Aucune Org trouvée", - "modified": false - }, - { - "id": "No routes found", - "translation": "Pas de route trouvée", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "Pas de courtiers de services trouvés", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "Pas de clef pour instance de service {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "Pas de clef de service {{.ServiceKeyName}} trouver pour instance de service {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "Aucune offre de services trouvés", - "modified": false - }, - { - "id": "No services found", - "translation": "Pas de services trouvés", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "Aucun espace ciblé, utiliser '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "Aucun espace ciblé, utiliser la '{{.Command}}' pour ciblé l'espace", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "Pas de variables d'environnement fournies par le système", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "Variables d'environnement utilisateur non définis", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Pas connecté. Utiliser '{{.CFLoginCommand}}' pour vous connecter.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Nombre d'instances", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "ORG AUDITEUR", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "ORG GÉRANT", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Org {{.OrgName}} existe déjà", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Org {{.OrgName}} n'existe pas.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organisation", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Remplacer par défaut config chemin", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Plan de service payè", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Mot de passe", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Vérification de mot de passe ne correspond pas", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Chemin vers le répertoire de l'application ou à un fichier zip du contenu du répertoire de l'application", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Chemin d'accès au répertoire ou un fichier zip", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Chemin du fishier manifest", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plan '{{.ServicePlanName}}' ne peut être trouvé", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan de {{.ServicePlanName}} a aucun cas de services à migrer", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Régime: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Choississez allow ou disallow. Les deux options ne sons pas permise dans la même commande.", - "modified": false - }, - { - "id": "Please don't", - "translation": "S'il vous plaît ne pas", - "modified": false - }, - { - "id": "Please log in again", - "translation": "S'il vous plaît, connecter à nouveau", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "API d'impression de diagnostic sur stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Imprimer une liste de fichiers dans un répertoire ou le contenu d'un fichier spécifique", - "modified": false - }, - { - "id": "Print the version", - "translation": "Affiche la version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "La valeur '{{.PropertyName}}' trouvé dans le manifeste. Cette fonctionnalité n'est plus prise en charge. S'il vous plaît enlever et essayer à nouveau.", - "modified": false - }, - { - "id": "Provider", - "translation": "Fournisseur", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purgé le service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Appuyez une nouvelle application ou les modifications à synchroniser à une application existante", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Appuyez une seule application (avec ou sans un manifeste):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "La définition de quota {{.QuotaName}} existe déjà", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} n'éxiste plus", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "DEMANDE:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RÉPONSE:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "RÔLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Vraiment supprimer des routes orphelins?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Voulez-vous vraiment effacer cette {{.ModelType}} {{.ModelName}} et tout associé avec?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Voulez-vous vraiment effacer cette {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Vraiment migrer {{.ServiceInstanceDescription}} de régime {{.OldServicePlanName}} à {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Vraiment purger offre de service {{.ServiceName}} de Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Reçu certificat SSL invalide de ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Effacer de façon récursive un service et des objets enfants base de données Cloud Foundry sans faire des demandes à un courtier de service", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Retirer un espace de rôle d'un utilisateur", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Suppression d'un itinéraire de l'URL d'une application", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Supprimer une variable d'environement", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Retirer un org de rôle d'un utilisateur", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Retrait variable d'environnement {{.VarName}} de l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Retrait rôle {{.Role}} de l'utilisateur {{.TargetUser}} dans l'org {{.TargetOrg}} / espace {{.TargetSpace}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Retrait rôle {{.Role}} de l'utilisateur {{.TargetUser}} dans l'org {{.TargetOrg}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Retrait itinéraire {{.URL}} de l'application {{.AppName}} en {{.OrgName}} / espace {{.SpaceName}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Supprimer la route {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Renommer un buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Renommer un courtier de service", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Renommer une instance de service", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Renommer un espace", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Renommer une application", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Renommer une org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renommer application {{.AppName}} comme {{.NewName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renommer buildpack {{.OldBuildpackName}} pour {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renommer org {{.OrgName}} pour {{.NewName}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renommer courtier de service '{{.OldName}}' pour {{.NewName}} comme {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renommer service {{.ServiceName}} pour {{.NewServiceName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}} ...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Recharger une application", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Rechargement application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Redémarrer une application", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Récupérer et montrer le guid d'un clef the service. Tout autre information pour la clef de service a été suprimer.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} existe déjà", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Règlements", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "ADMIN DE SERVICE", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "ESPACE AUDITEUR", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "ESPACE DÉVELOPPEUR", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "SPACE GÉRANT", - "modified": false - }, - { - "id": "SPACES", - "translation": "ESPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Mise à l'échelle de l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Security Groups:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Sélectionnez un espace (ou appuyez sur Entrée pour sauter):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Sélectionner un org (ou appuyez sur Entrée pour sauter):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Erreur du serveur, code d'état: {{.ErrStatusCode}}, code erreur: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} n'existe pas.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Instance de service n'est pas fourni par l'utilisateur", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Instance de service {{.ServiceInstanceName}} n'existe pas.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Instance de service: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "La clef de service {{.ServiceKeyName}} n'existe pas pour l'instance de service {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Offre de service n'existe pas\nTIP: Si vous essayez de purger un offre service v1, vous devez définir l'option -p.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Service de {{.ServiceName}} n'existe pas.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "Services:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Définir une variable d'environnement pour une application", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Définir ou afficher l'org ou de l'espace ciblé", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Réglage api endpoint de {{.Endpoint}} ...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Réglage variable d'environnement '{{.VarName}}' à '{{.VarValue}}' pour l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Réglage quota {{.QuotaName}} de l'{{.OrgName}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Voir toutes les variables d'environnement pour une application", - "modified": false - }, - { - "id": "Show help", - "translation": "Afficher ce message", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Montrez information pour un stack (un stack est un system de fichier pré-construit qui inclus un system d'exploitation qui peut executer des logiciels)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Afficher les informations org", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Afficher les utilisateurs de l'org par rôle", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Montrez l'information de quota", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Afficher les événements d'applications récentes", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Afficher infos d'instances de service", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Montrer information pour la clef de service", - "modified": false - }, - { - "id": "Show space info", - "translation": "Indiquer info d'un espace", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Afficher les utilisateurs de l'espace par rôle", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Affichage actuel de l'échelle de l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Santé et état de l'application {{.AppName}} de l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Espace", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Espace:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Empilez à utiliser (une pile est un système de fichiers pré-construit, y compris un système d'exploitation, qui peuvent exécuter des applications)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Lancer une application", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Lancer l'application délai\n\nTIP: utiliser '{{.Command}}' pour plus d'informations", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Lancer échoué\n\nTIP: utiliser '{{.Command}}' pour plus d'informations", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "À partir de l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Commande de démarrage, utiliser la valeur null pour réinitialiser par défaut la commande de démarrage", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "État: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Arrêter une application", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Arrêt de l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog Vidange URL", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "Fournies par le système:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "CONSEIL: Utilisez '{{.ApiCommand}}' pour continuer avec une API critère insécurité", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Utilisez '{{.CFCommand}}' pour vous assurer que vos changements des variables d'environnement prennent effet", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "CONSEIL: Pour faire ces modifications prennent effet, utilizer '{{.CFUnbindCommand}}' pour dissocier le service, '{{.CFBindComand}}' pour relier, puis '{{.CFRestageCommand}}' pour mettre à jour l'application avec les nouvelles variables d'environnement", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Utilisez '{{.Command}}' pour vous assurer que vos variables d'environnement modifiées prennent effet", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: utiliser '{{.CfUpdateBuildpackCommand}}' Pour mettre à jour cette buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Suivi direct ou montrer les logs récents pour une application", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Org ciblée {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Espace ciblé {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "Buildpack position parmi d'autres buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "La route {{.URL}} est deja en utilisation.\nTIP: Changer le nom d'hôte avec -n HOSTNAME ou utiliser --random-route pour générer une nouvelle route et appuyez à nouveau.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "Il n'y a pas d'instance démarrée pour cette application.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "Il y a trop d'options à afficher, entrez un nom s'il vous plaît.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "Ce domaine est partagé par toutes les orgs.\nSuppression il va supprimer tous les itinéraires associés, et fera n'importe quelle application à ce domaine inaccessible.\nEtes-vous sûr de vouloir effacer le domaine {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "Ce service ne supporte pas la création de clefs.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "Cela entraînera l'application à redémarrer. Etes-vous sûr que vous voulez écheller {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Délai d'attente pour les demandes HTTP asynchrone", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memoire", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Quantité totale de mémoire (e.g. 1024Mo, 1Go, 10Go)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Quantité totale de routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Nombres total d'instance de services", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Trace des requêtes HTTP", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint manquant de fichier de configuration", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "UTILISATION:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "UTILISATEUR ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "UTILISATEURS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Impossible d'accéder à l'espace {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Impossible de vous authentifier.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Impossible de supprimer, route '{{.URL}}' n'existe pas.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Délier une instance de service d'une application", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Libération App {{.AppName}} du service {{.ServiceName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Déverrouillez le buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Mettre à jour un buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Mettre à jour un service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Mettre à jour un courtier de service", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Reactualize un quota éxistant", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Mettre à jour les noms et valeurs d'un instance de service fournie par l'utilisateur", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Mise à jour de l'application {{.AppName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Mise à jour buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Réactualisation quota {{.QuotaName}} étant {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Mise à jour courtier de {{.Name}} comme {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Mise à jour de l'utilisateur fournie service {{.ServiceName}} dans l'org {{.OrgName}} / espace {{.SpaceName}} en tant que {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Téléchargement de fichiers d'applications à partir de: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "L'ajout buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "L'ajout {{.AppName}} ...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Téléchargement de {{.ZipFileBytes}}, {{.FileCount}} fichiers", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Utilisez '{{.Name}}' pour afficher ou définir votre organisation cible et l'espace", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Utilisez un mot de passe unique pour se connecter", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "Utilisateur {{.TargetUser}} n'existe pas.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "Fournies par l'utilisateur:", - "modified": false - }, - { - "id": "User:", - "translation": "Utilisateur:", - "modified": false - }, - { - "id": "Username", - "translation": "Nom d'utilisateur", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "En utilisant le fichier manifeste {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Utilisant la route {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Utilisant de pile {{.StackName}} ...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Objet JSON valide contenant les paramètres de configuration spécifiques au service, fourni soit en ligne ou dans un fichier. Pour une liste des paramètres de configuration valide, voir la documentation de l'offre de service particulier.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Vérifiez Mot de passe", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "AVERTISSEMENT:\n Fournir votre mot de passe comme une option de ligne de commande est fortement déconseillée.\n Votre mot de passe peut être visible par les autres et peut être enregistré dans votre historique du shell\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "ATTENTION: Cette opération suppose que le courtier de service responsable de cette offre de service n'est plus disponible, et toutes les instances de services ont été supprimés, laissant les enregistrements orphelins dans la base de données Cloud Foundry. Toutes les connaissances du service seront supprimé de Cloud Foundry, y compris les instances de service et les liaisons de service. Aucune tentative ne sera faite pour communiquer avec le courtier de service; exécution de cette commande sans détruire le courtier de service fera instances de service orphelins. Après l'exécution de cette commande, vous pouvez exécuter delete-service-auth-token ou delete-service-auth-broker de terminer le nettoyage.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "ATTENTION: Cette opération est interne à Cloud Foundry; courtiers de services ne seront pas contactés et des ressources pour les instances de service ne seront pas modifiés. Le cas d'utilisation principal de cette opération est de remplacer un courtier de service qui implémente l'API de Service Broker v1 avec un courtier qui implémente l'API v2 par remappage instances de service de regime v1 à v2. Nous recommandons l'élaboration du plan de v1 privé ou arrêter le courtier de v1 à prévenir les cas supplémentaires d'être créé. Une fois les instances de service ont été migrés, les services de v1 et plans peuvent être retirés de Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Attention: l'insécurité API de point de terminaison HTTP détectée: sécurisés paramètres de l'API https sont recommandés\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Avertissement: erreur lors du suivi des logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "L'archive zip ne contient pas de buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[DONNÉES PRIVÉES CACHÉES]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[variables d'environnement]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[options globales] commande [arguments...] [options de commande]", - "modified": false - }, - { - "id": "access", - "translation": "accès", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "acteur", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "permis", - "modified": false - }, - { - "id": "already exists", - "translation": "existe déjà", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "appplication crashée", - "modified": false - }, - { - "id": "apps", - "translation": "applications", - "modified": false - }, - { - "id": "auth request failed", - "translation": "Echec de la requête d'authentification", - "modified": false - }, - { - "id": "bound apps", - "translation": "applications liées", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "en panne", - "modified": false - }, - { - "id": "description", - "translation": "description", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "refusé", - "modified": false - }, - { - "id": "disk", - "translation": "disque", - "modified": false - }, - { - "id": "disk:", - "translation": "disque:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "n'existe pas.", - "modified": false - }, - { - "id": "domain", - "translation": "domaine", - "modified": false - }, - { - "id": "domains:", - "translation": "domaines:", - "modified": true - }, - { - "id": "down", - "translation": "arrêté", - "modified": false - }, - { - "id": "enabled", - "translation": "activé", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "variable d'environnment '{{.PropertyName}}' ne doit pas être null", - "modified": false - }, - { - "id": "event", - "translation": "événement", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "la console écho d'entrée de mot de passe n'a pas pu être déconnectée:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "nom de fichier", - "modified": false - }, - { - "id": "free or paid", - "translation": "gratuit ou payant", - "modified": false - }, - { - "id": "host", - "translation": "hôte", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "utilisation incorrecte", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "limite de mémoire d'instance", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instance: {{.InstanceIndex}}, raison: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instances", - "modified": false - }, - { - "id": "instances:", - "translation": "instances:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "chemin hérité invalide dans le manifeste", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "valeur invalide pour variable d'environnement CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "valeur invalide pour variable d'environnement CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "la dernierre opération", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "dernier téléchargement:", - "modified": true - }, - { - "id": "limited", - "translation": "limité", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "fermé", - "modified": false - }, - { - "id": "memory", - "translation": "mémoire", - "modified": false - }, - { - "id": "memory:", - "translation": "mémoire:", - "modified": false - }, - { - "id": "name", - "translation": "nom", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "aucun", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "invalide pour l'hôte demandé", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organisation", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "en propriété", - "modified": false - }, - { - "id": "paid service plans", - "translation": "plans de services payants", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "plans", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "fournisseur", - "modified": false - }, - { - "id": "quota:", - "translation": "quota:", - "modified": false - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "État", - "modified": false - }, - { - "id": "requested state:", - "translation": "État:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "fonctionne", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "instance de service", - "modified": false - }, - { - "id": "service instances", - "translation": "instance de services", - "modified": false - }, - { - "id": "service key", - "translation": "clef de service", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "partagé", - "modified": false - }, - { - "id": "since", - "translation": "depuis", - "modified": false - }, - { - "id": "space", - "translation": "espace", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "espaces:", - "modified": false - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "commence", - "modified": false - }, - { - "id": "state", - "translation": "state", - "modified": false - }, - { - "id": "status", - "translation": "statut", - "modified": false - }, - { - "id": "stopped", - "translation": "arrêté", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "arrêté après une redirection", - "modified": false - }, - { - "id": "time", - "translation": "temps", - "modified": false - }, - { - "id": "total memory limit", - "translation": "limite de memoire", - "modified": true - }, - { - "id": "unknown authority", - "translation": "autorité inconnue", - "modified": false - }, - { - "id": "unlimited", - "translation": "illimité", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "URL", - "modified": false - }, - { - "id": "urls", - "translation": "URLs", - "modified": false - }, - { - "id": "urls:", - "translation": "URLs:", - "modified": false - }, - { - "id": "usage:", - "translation": "utilisation:", - "modified": false - }, - { - "id": "user", - "translation": "utilisateur", - "modified": false - }, - { - "id": "user-provided", - "translation": "fourni par l'utilisateur", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "écrire des valeurs par défaut pour la configuration", - "modified": false - }, - { - "id": "yes", - "translation": "oui", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (Version API: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMANDE]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migré.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} sur {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} arrêté", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Utilisez '{{.CFServicesCommand}}' pour afficher tous les services dans cette org et espace.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nCONSEIL: utilisation '{{.Command}}' pour plus d'informations", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} en défaut", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} de {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} existe déjà", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} erreur", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} en progrès", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succès", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} doit être une string ou une valeur null", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} doit être une valeur de string", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} ne doit pas être null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M de limite de mémoire, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, services payants {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} de {{.TotalCount}} d'instances en cours", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} démarrage", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} en progres. Utilizer '{{.ServicesCommand}}' ou '{{.ServiceCommand}}' pour vérifier le status courant.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/it_IT.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/it_IT.all.json deleted file mode 100644 index a4d1e68..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/it_IT.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nTIP:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\nApp started\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nTIP: Use '{{.Command}}' to target new org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Create and manage the billing account and payment info\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Read-only access to org info and reports\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Path should be a zip file, a url to a zip file, or a local directory. Position is an integer, sets priority, and is sorted from lowest to highest.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Push multiple apps with a manifest:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - View logs, reports, and settings on this space\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " View allowable quotas with 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " is already started", - "modified": false - }, - { - "id": " is already stopped", - "translation": " is already stopped", - "modified": false - }, - { - "id": " is empty", - "translation": " is empty", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " not found", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "A command line tool to interact with Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "ADVANCED", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API endpoint", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API endpoint (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "API endpoint:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API endpoint: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API endpoint: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Add a url route to an app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for the org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for the org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "Also delete any mapped routes", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "An org must be targeted before targeting a space", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "App name is a required field", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "App {{.AppName}} does not exist.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} is a worker, skipping route creation", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Append API request diagnostics to a log file", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Assign a quota to an org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Assign a space role to a user", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Assign an org role to a user", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Authenticate user non-interactively", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Authenticating...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "BILLING MANAGER", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "BUILD TIME:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Bind a service instance to an app", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Binding {{.URL}} to {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Buildpack {{.BuildpackName}} already exists", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Buildpack {{.BuildpackName}} does not exist.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "Byte quantity must be a positive integer with a unit of measurement like M, MB, G, or GB", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USERNAME PASSWORD\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USERNAME PASSWORD", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USERNAME [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [PATH]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename APP_NAME NEW_APP_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space SPACE NEW_SPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NAME VALUE", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space SPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s SPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP SERVICE_INSTANCE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NAME", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Can provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Cannot list marketplace services without a targeted space", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Cannot provision instances of paid service plans", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Cannot specify both lock and unlock options.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Cannot specify buildpack bits and lock/unlock.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Change or view the instance count, disk space limit, and memory limit for an app", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Change user password", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Changing password...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Command not found", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Could not determine the current working directory!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Could not find a default domain", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Could not find app named '{{.AppName}}' in manifest", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Could not find plan with name {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Could not parse version number: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Could not serialize information", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Could not serialize updates.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Could not target org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Couldn't create temp file for upload", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Couldn't open buildpack file", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Couldn't write zip file", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Create a buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Create a domain in an org for later use", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Create a domain that can be used by all orgs (admin-only)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Create a new user", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Create a random route for this app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Create a service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Create a service instance", - "modified": false - }, - { - "id": "Create a space", - "translation": "Create a space", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Create a url route in a space for later use", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Create an org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Creating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Creating org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Creating route {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creating user {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Credentials were rejected, please try again.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Current Password", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Current password did not match", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Custom headers to include in the request, flag can be specified multiple times", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMAINS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define a new resource quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Delete a buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Delete a domain", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Delete a quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Delete a route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Delete a service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Delete a service instance", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Delete a shared domain", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Delete a space", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Delete a user", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Delete an app", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Delete an org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Delete cancelled", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Deleting buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Deleting org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Deleting route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Deleting route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Description: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Disable the buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Disk limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Display health and status for app", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Do not colorize output", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Do not map a route to this app", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "Do not start an app after pushing", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Documentation url: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domain (e.g. example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Dump recent logs instead of tailing", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "ENVIRONMENT VARIABLES:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EXAMPLE:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Enable CF_TRACE output for all requests and responses", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Enable HTTP proxying for API requests", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Enable or disable color", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Enable the buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Env variable {{.VarName}} was not set.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Error building request", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Error creating request:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Error creating tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Error creating upload", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Error dumping request\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error dumping response\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Error finding available orgs\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Error finding available spaces\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Error finding command {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Error finding manifest", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Error finding org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Error finding space {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Error in requirement", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Error marshaling JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Error opening buildpack file", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Error parsing JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Error parsing headers", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Error performing request", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Error reading manifest file:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Error reading response", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolving route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Error updating buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Error uploading application.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Error writing to tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Error zipping application", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Error: No name found for app", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Error: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Executes a raw request, content-type set to application/json by default", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Expected applications to be a list", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "Expected {{.PropertyName}} to be a boolean.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "Expected {{.PropertyName}} to be a list of strings.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FAILED", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Failed fetching buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Failed fetching domains.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Failed fetching events.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Failed fetching orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Failed fetching routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Failed to create json for resource_match request", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Failed to marshal JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Failed to start oauth request", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Force deletion without confirmation", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Force migration without confirmation", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Force restart of app without prompt", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "GETTING STARTED", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "GLOBAL OPTIONS:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Getting all services from marketplace...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Getting buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Getting info for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Getting orgs as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Getting quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Getting routes as {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "HTTP data to include in the request body", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "HTTP method (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Hostname (e.g. my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignore manifest file", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Include response headers in the output", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Incorrect Usage", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Incorrect Usage.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Incorrect number of arguments", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Invalid JSON response from server", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Invalid Role {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Invalid async response from server", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Invalid auth token: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Invalid manifest. Expected a map", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Invalid usage", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Unexpected value for {{.PropertyName}} :\n{{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON is invalid: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "List all apps in the target space", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "List all buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "List all orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "List all service instances in the target space", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "List all spaces in an org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "List all users in the org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "List available offerings in the marketplace", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "List domains in the target org", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "List service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List service brokers", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Lock the buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Log user in", - "modified": false - }, - { - "id": "Log user out", - "translation": "Log user out", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Logging out...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Loggregator endpoint missing from config file", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Make a user-provided service instance available to cf apps", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Map the root domain to this app", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Max wait time for app instance startup, in minutes", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Max wait time for buildpack staging, in minutes", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Start timeout in seconds", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Memory limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrate service instances from one service plan to another", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NAME:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "New Password", - "modified": false - }, - { - "id": "New name", - "translation": "New name", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "No apps found", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No buildpacks found", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No domains found", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "No events for app {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "No flags specified. No changes were made.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "No org and space targeted, use '{{.Command}}' to target an org and space", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "No org or space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "No org targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "No org targeted, use '{{.Command}}' to target an org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "No orgs found", - "modified": false - }, - { - "id": "No routes found", - "translation": "No routes found", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "No service offerings found", - "modified": false - }, - { - "id": "No services found", - "translation": "No services found", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "No space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "No space targeted, use '{{.Command}}' to target a space", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "No system-provided env variables have been set", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "No user-defined env variables have been set", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Number of instances", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "ORG AUDITOR", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "ORG MANAGER", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Org {{.OrgName}} already exists", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Org {{.OrgName}} does not exist.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Override path to default config directory", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Paid service plans", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Password", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Password verification does not match", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Path to directory or zip file", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Path to manifest", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plan {{.ServicePlanName}} cannot be found", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan {{.ServicePlanName}} has no service instances to migrate", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Please don't", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Please log in again", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Print API request diagnostics to stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Print out a list of files in a directory or the contents of a specific file", - "modified": false - }, - { - "id": "Print the version", - "translation": "Print the version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provider", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purging service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Push a new app or sync changes to an existing app", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Push a single app (with or without a manifest):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} does not exist", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "REQUEST:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPONSE:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "ROLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Really delete orphaned routes?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Received invalid SSL certificate from ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remove a space role from a user", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remove a url route from an app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remove an env variable", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remove an org role from a user", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removing route {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Rename a buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Rename a service instance", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Rename a space", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Rename an app", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Rename an org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Restage an app", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Restart an app", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} already exists", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "SERVICE ADMIN", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "SPACE AUDITOR", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "SPACE DEVELOPER", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "SPACE MANAGER", - "modified": false - }, - { - "id": "SPACES", - "translation": "SPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Security Groups:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Select a space (or press enter to skip):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Select an org (or press enter to skip):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Service Instance is not user provided", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Service instance: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Service {{.ServiceName}} does not exist.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "Services:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Set an env variable for an app", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Set or view the targeted org or space", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Setting api endpoint to {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Show all env variables for an app", - "modified": false - }, - { - "id": "Show help", - "translation": "Show help", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Show org info", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Show org users by role", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Show quota info", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Show recent app events", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Show service instance info", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Show space info", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Show space users by role", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Space:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Start an app", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Startup command, set to null to reset to default start command", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Stop an app", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog Drain Url", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "System-Provided:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.CFCommand}}' to ensure your env variable changes take effect", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "TIP: To make these changes take effect, use '{{.CFUnbindCommand}}' to unbind the service, '{{.CFBindComand}}' to rebind, and then '{{.CFRestageCommand}}' to update the app with the new env variables", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Tail or show recent logs for an app", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Targeted org {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Targeted space {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "Buildpack position among other buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "There are no running instances of this app.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "There are too many options to display, please type in the name.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Timeout for async HTTP requests", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memory", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Total number of routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Total number of service instances", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Trace HTTP requests", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint missing from config file", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USAGE:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "USER ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "USERS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Unable to authenticate.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Unable to delete, route '{{.URL}}' does not exist.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Unbind a service instance from an app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Unlock the buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Update a buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Update a service broker", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Update an existing resource quota", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Update user-provided service instance name value pairs", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Updating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Updating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Uploading app files from: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Uploading buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Uploading {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Use '{{.Name}}' to view or set your target org and space", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Use a one-time password to login", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "User {{.TargetUser}} does not exist.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "User-Provided:", - "modified": false - }, - { - "id": "User:", - "translation": "User:", - "modified": false - }, - { - "id": "Username", - "translation": "Username", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Using manifest file {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Using route {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Using stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verify Password", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Warning: error tailing logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "Zip archive does not contain a buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[PRIVATE DATA HIDDEN]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[environment variables]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[global options] command [arguments...] [command options]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "actor", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "allowed", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "app crashed", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "auth request failed", - "modified": false - }, - { - "id": "bound apps", - "translation": "bound apps", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "crashing", - "modified": false - }, - { - "id": "description", - "translation": "description", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "disallowed", - "modified": false - }, - { - "id": "disk", - "translation": "disk", - "modified": false - }, - { - "id": "disk:", - "translation": "disk:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "domain", - "modified": false - }, - { - "id": "domains:", - "translation": "domains:", - "modified": false - }, - { - "id": "down", - "translation": "down", - "modified": false - }, - { - "id": "enabled", - "translation": "enabled", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "env var '{{.PropertyName}}' should not be null", - "modified": false - }, - { - "id": "event", - "translation": "event", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "filename", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "incorrect usage", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instances", - "modified": false - }, - { - "id": "instances:", - "translation": "instances:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "invalid inherit path in manifest", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "locked", - "modified": false - }, - { - "id": "memory", - "translation": "memory", - "modified": false - }, - { - "id": "memory:", - "translation": "memory:", - "modified": false - }, - { - "id": "name", - "translation": "name", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "not valid for the requested host", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organization", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "owned", - "modified": false - }, - { - "id": "paid service plans", - "translation": "paid service plans", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "plans", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "quota:", - "modified": false - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "requested state", - "modified": false - }, - { - "id": "requested state:", - "translation": "requested state:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "running", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "service instance", - "modified": false - }, - { - "id": "service instances", - "translation": "service instances", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "shared", - "modified": false - }, - { - "id": "since", - "translation": "since", - "modified": false - }, - { - "id": "space", - "translation": "space", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "spaces:", - "modified": true - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "starting", - "modified": false - }, - { - "id": "state", - "translation": "state", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "stopped", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "stopped after 1 redirect", - "modified": false - }, - { - "id": "time", - "translation": "time", - "modified": false - }, - { - "id": "total memory limit", - "translation": "memory limit", - "modified": true - }, - { - "id": "unknown authority", - "translation": "unknown authority", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "usage:", - "modified": false - }, - { - "id": "user", - "translation": "user", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "write default values to the config", - "modified": false - }, - { - "id": "yes", - "translation": "yes", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrated.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} of {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} down", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} failing", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} of {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} already exists", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} must be a string or null value", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} must be a string value", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} should not be null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} of {{.TotalCount}} instances running", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} starting", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/ja_JA.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/ja_JA.all.json deleted file mode 100644 index a4d1e68..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/ja_JA.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nTIP:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\nApp started\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nTIP: Use '{{.Command}}' to target new org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Create and manage the billing account and payment info\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Read-only access to org info and reports\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Path should be a zip file, a url to a zip file, or a local directory. Position is an integer, sets priority, and is sorted from lowest to highest.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Push multiple apps with a manifest:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - View logs, reports, and settings on this space\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " View allowable quotas with 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " is already started", - "modified": false - }, - { - "id": " is already stopped", - "translation": " is already stopped", - "modified": false - }, - { - "id": " is empty", - "translation": " is empty", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " not found", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "A command line tool to interact with Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "ADVANCED", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API endpoint", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API endpoint (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "API endpoint:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API endpoint: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API endpoint: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Add a url route to an app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for the org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for the org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "Also delete any mapped routes", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "An org must be targeted before targeting a space", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "App name is a required field", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "App {{.AppName}} does not exist.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} is a worker, skipping route creation", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Append API request diagnostics to a log file", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Assign a quota to an org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Assign a space role to a user", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Assign an org role to a user", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Authenticate user non-interactively", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Authenticating...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "BILLING MANAGER", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "BUILD TIME:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Bind a service instance to an app", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Binding {{.URL}} to {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Buildpack {{.BuildpackName}} already exists", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Buildpack {{.BuildpackName}} does not exist.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "Byte quantity must be a positive integer with a unit of measurement like M, MB, G, or GB", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USERNAME PASSWORD\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USERNAME PASSWORD", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USERNAME [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [PATH]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename APP_NAME NEW_APP_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space SPACE NEW_SPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NAME VALUE", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space SPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s SPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP SERVICE_INSTANCE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NAME", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Can provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Cannot list marketplace services without a targeted space", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Cannot provision instances of paid service plans", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Cannot specify both lock and unlock options.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Cannot specify buildpack bits and lock/unlock.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Change or view the instance count, disk space limit, and memory limit for an app", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Change user password", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Changing password...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Command not found", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Could not determine the current working directory!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Could not find a default domain", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Could not find app named '{{.AppName}}' in manifest", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Could not find plan with name {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Could not parse version number: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Could not serialize information", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Could not serialize updates.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Could not target org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Couldn't create temp file for upload", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Couldn't open buildpack file", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Couldn't write zip file", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Create a buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Create a domain in an org for later use", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Create a domain that can be used by all orgs (admin-only)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Create a new user", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Create a random route for this app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Create a service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Create a service instance", - "modified": false - }, - { - "id": "Create a space", - "translation": "Create a space", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Create a url route in a space for later use", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Create an org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Creating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Creating org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Creating route {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creating user {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Credentials were rejected, please try again.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Current Password", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Current password did not match", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Custom headers to include in the request, flag can be specified multiple times", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMAINS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define a new resource quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Delete a buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Delete a domain", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Delete a quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Delete a route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Delete a service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Delete a service instance", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Delete a shared domain", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Delete a space", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Delete a user", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Delete an app", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Delete an org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Delete cancelled", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Deleting buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Deleting org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Deleting route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Deleting route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Description: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Disable the buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Disk limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Display health and status for app", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Do not colorize output", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Do not map a route to this app", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "Do not start an app after pushing", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Documentation url: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domain (e.g. example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Dump recent logs instead of tailing", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "ENVIRONMENT VARIABLES:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EXAMPLE:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Enable CF_TRACE output for all requests and responses", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Enable HTTP proxying for API requests", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Enable or disable color", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Enable the buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Env variable {{.VarName}} was not set.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Error building request", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Error creating request:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Error creating tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Error creating upload", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Error dumping request\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error dumping response\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Error finding available orgs\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Error finding available spaces\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Error finding command {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Error finding manifest", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Error finding org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Error finding space {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Error in requirement", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Error marshaling JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Error opening buildpack file", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Error parsing JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Error parsing headers", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Error performing request", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Error reading manifest file:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Error reading response", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolving route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Error updating buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Error uploading application.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Error writing to tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Error zipping application", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Error: No name found for app", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Error: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Executes a raw request, content-type set to application/json by default", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Expected applications to be a list", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "Expected {{.PropertyName}} to be a boolean.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "Expected {{.PropertyName}} to be a list of strings.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FAILED", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Failed fetching buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Failed fetching domains.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Failed fetching events.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Failed fetching orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Failed fetching routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Failed to create json for resource_match request", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Failed to marshal JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Failed to start oauth request", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Force deletion without confirmation", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Force migration without confirmation", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Force restart of app without prompt", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "GETTING STARTED", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "GLOBAL OPTIONS:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Getting all services from marketplace...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Getting buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Getting info for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Getting orgs as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Getting quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Getting routes as {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "HTTP data to include in the request body", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "HTTP method (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Hostname (e.g. my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignore manifest file", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Include response headers in the output", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Incorrect Usage", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Incorrect Usage.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Incorrect number of arguments", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Invalid JSON response from server", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Invalid Role {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Invalid async response from server", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Invalid auth token: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Invalid manifest. Expected a map", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Invalid usage", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Unexpected value for {{.PropertyName}} :\n{{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON is invalid: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "List all apps in the target space", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "List all buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "List all orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "List all service instances in the target space", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "List all spaces in an org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "List all users in the org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "List available offerings in the marketplace", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "List domains in the target org", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "List service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List service brokers", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Lock the buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Log user in", - "modified": false - }, - { - "id": "Log user out", - "translation": "Log user out", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Logging out...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Loggregator endpoint missing from config file", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Make a user-provided service instance available to cf apps", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Map the root domain to this app", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Max wait time for app instance startup, in minutes", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Max wait time for buildpack staging, in minutes", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Start timeout in seconds", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Memory limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrate service instances from one service plan to another", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NAME:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "New Password", - "modified": false - }, - { - "id": "New name", - "translation": "New name", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "No apps found", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No buildpacks found", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No domains found", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "No events for app {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "No flags specified. No changes were made.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "No org and space targeted, use '{{.Command}}' to target an org and space", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "No org or space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "No org targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "No org targeted, use '{{.Command}}' to target an org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "No orgs found", - "modified": false - }, - { - "id": "No routes found", - "translation": "No routes found", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "No service offerings found", - "modified": false - }, - { - "id": "No services found", - "translation": "No services found", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "No space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "No space targeted, use '{{.Command}}' to target a space", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "No system-provided env variables have been set", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "No user-defined env variables have been set", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Number of instances", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "ORG AUDITOR", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "ORG MANAGER", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Org {{.OrgName}} already exists", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Org {{.OrgName}} does not exist.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Override path to default config directory", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Paid service plans", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Password", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Password verification does not match", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Path to directory or zip file", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Path to manifest", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plan {{.ServicePlanName}} cannot be found", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan {{.ServicePlanName}} has no service instances to migrate", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Please don't", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Please log in again", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Print API request diagnostics to stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Print out a list of files in a directory or the contents of a specific file", - "modified": false - }, - { - "id": "Print the version", - "translation": "Print the version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provider", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purging service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Push a new app or sync changes to an existing app", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Push a single app (with or without a manifest):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} does not exist", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "REQUEST:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPONSE:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "ROLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Really delete orphaned routes?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Received invalid SSL certificate from ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remove a space role from a user", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remove a url route from an app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remove an env variable", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remove an org role from a user", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removing route {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Rename a buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Rename a service instance", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Rename a space", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Rename an app", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Rename an org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Restage an app", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Restart an app", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} already exists", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "SERVICE ADMIN", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "SPACE AUDITOR", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "SPACE DEVELOPER", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "SPACE MANAGER", - "modified": false - }, - { - "id": "SPACES", - "translation": "SPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Security Groups:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Select a space (or press enter to skip):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Select an org (or press enter to skip):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Service Instance is not user provided", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Service instance: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Service {{.ServiceName}} does not exist.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "Services:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Set an env variable for an app", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Set or view the targeted org or space", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Setting api endpoint to {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Show all env variables for an app", - "modified": false - }, - { - "id": "Show help", - "translation": "Show help", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Show org info", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Show org users by role", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Show quota info", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Show recent app events", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Show service instance info", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Show space info", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Show space users by role", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Space:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Start an app", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Startup command, set to null to reset to default start command", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Stop an app", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog Drain Url", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "System-Provided:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.CFCommand}}' to ensure your env variable changes take effect", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "TIP: To make these changes take effect, use '{{.CFUnbindCommand}}' to unbind the service, '{{.CFBindComand}}' to rebind, and then '{{.CFRestageCommand}}' to update the app with the new env variables", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Tail or show recent logs for an app", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Targeted org {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Targeted space {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "Buildpack position among other buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "There are no running instances of this app.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "There are too many options to display, please type in the name.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Timeout for async HTTP requests", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memory", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Total number of routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Total number of service instances", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Trace HTTP requests", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint missing from config file", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USAGE:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "USER ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "USERS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Unable to authenticate.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Unable to delete, route '{{.URL}}' does not exist.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Unbind a service instance from an app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Unlock the buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Update a buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Update a service broker", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Update an existing resource quota", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Update user-provided service instance name value pairs", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Updating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Updating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Uploading app files from: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Uploading buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Uploading {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Use '{{.Name}}' to view or set your target org and space", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Use a one-time password to login", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "User {{.TargetUser}} does not exist.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "User-Provided:", - "modified": false - }, - { - "id": "User:", - "translation": "User:", - "modified": false - }, - { - "id": "Username", - "translation": "Username", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Using manifest file {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Using route {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Using stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verify Password", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Warning: error tailing logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "Zip archive does not contain a buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[PRIVATE DATA HIDDEN]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[environment variables]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[global options] command [arguments...] [command options]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "actor", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "allowed", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "app crashed", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "auth request failed", - "modified": false - }, - { - "id": "bound apps", - "translation": "bound apps", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "crashing", - "modified": false - }, - { - "id": "description", - "translation": "description", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "disallowed", - "modified": false - }, - { - "id": "disk", - "translation": "disk", - "modified": false - }, - { - "id": "disk:", - "translation": "disk:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "domain", - "modified": false - }, - { - "id": "domains:", - "translation": "domains:", - "modified": false - }, - { - "id": "down", - "translation": "down", - "modified": false - }, - { - "id": "enabled", - "translation": "enabled", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "env var '{{.PropertyName}}' should not be null", - "modified": false - }, - { - "id": "event", - "translation": "event", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "filename", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "incorrect usage", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instances", - "modified": false - }, - { - "id": "instances:", - "translation": "instances:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "invalid inherit path in manifest", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "locked", - "modified": false - }, - { - "id": "memory", - "translation": "memory", - "modified": false - }, - { - "id": "memory:", - "translation": "memory:", - "modified": false - }, - { - "id": "name", - "translation": "name", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "not valid for the requested host", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organization", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "owned", - "modified": false - }, - { - "id": "paid service plans", - "translation": "paid service plans", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "plans", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "quota:", - "modified": false - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "requested state", - "modified": false - }, - { - "id": "requested state:", - "translation": "requested state:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "running", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "service instance", - "modified": false - }, - { - "id": "service instances", - "translation": "service instances", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "shared", - "modified": false - }, - { - "id": "since", - "translation": "since", - "modified": false - }, - { - "id": "space", - "translation": "space", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "spaces:", - "modified": true - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "starting", - "modified": false - }, - { - "id": "state", - "translation": "state", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "stopped", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "stopped after 1 redirect", - "modified": false - }, - { - "id": "time", - "translation": "time", - "modified": false - }, - { - "id": "total memory limit", - "translation": "memory limit", - "modified": true - }, - { - "id": "unknown authority", - "translation": "unknown authority", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "usage:", - "modified": false - }, - { - "id": "user", - "translation": "user", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "write default values to the config", - "modified": false - }, - { - "id": "yes", - "translation": "yes", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrated.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} of {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} down", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} failing", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} of {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} already exists", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} must be a string or null value", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} must be a string value", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} should not be null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} of {{.TotalCount}} instances running", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} starting", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/pt_BR.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/pt_BR.all.json deleted file mode 100644 index c34129d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/pt_BR.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nDICA:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\nAplicativo iniciado\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nDICA: Assinale funções com '{{.CurrentUser}} set-org-role' e '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nDICA: Utilize '{{.CFTargetCommand}}' para definir espaço alvo", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nDICA: Use '{{.Command}}' para modificar a organização alvo", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nDICA: utilize 'cf login -a API --skip-ssl-validation' ou 'cf api API --skip-ssl-validation' para suprimir este erro", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Criar e gerenciar a conta de faturamento e informações de pagamento\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"senha\\\"\" (escapar aspas se usado na senha)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"minha senha\" (usar aspas para senhas com espaço)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omita usuário e senha para efetuar o login interativamente -- CF_NAME irá solicitá-los)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME irá fornecer uma URL onde você poderá obter uma senha de uso único)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"senha\\\"\" (escapar aspas se usado na senha)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"minha senha\" (usar aspas para senhas com espaço)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p 53nh4 (especificar usuário e senha como argumentos)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b BUILDPACK_NAME] [-c COMANDO] [-d DOMÍNIO] [-f CAMINHO-DO-MANIFESTO]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f CAMINHO-DO-MANIFESTO]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Acesso somente leitura à informações e relatórios da Organização\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Convidar e gerenciar usuários, selecionar e alterar planos e definir limites de gastos\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Caminho deverá ser um arquivo zip, uma url para um arquivo zip, ou um diretório local. Posição é um número inteiro que define prioridades e é classificada do menor para o maior valor.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Envie múltiplos aplicativos com um manifesto:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - Inspecionar logs, relatórios e configurações neste espaço\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Criar e gerenciar aplicativos e serviços, e inspecionar logs e relatórios\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Convidar e gerenciar usuários, e ativar recursos para um determinado espaço\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " O caminho especificado pode ser um caminho absoluto ou relativo para um arquivo.\n O arquivo deve conter uma única matriz com objetos JSON descrevendo as regras.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " Mostrar cotas disponíveis com o comando 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i QTD-DE-INSTÂNCIAS] [-k HDD] [-m MEMÓRIA] [-n HOSTNAME] [-p CAMINHO] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " já está iniciada", - "modified": false - }, - { - "id": " is already stopped", - "translation": " já está parada", - "modified": false - }, - { - "id": " is empty", - "translation": " está vazio", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " não encontrado", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "Uma ferramenta de linha de comando para interagir com Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "AVANÇADO", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "Terminal API", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "Terminal API (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "Terminal da API:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "Terminal API: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "Terminal API: {{.ApiEndpoint}} (Versão da API: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "Terminal API: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APLICATIVOS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Obtendo grupos de segurança para execução como '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Obtendo grupos de segurança para encenação como {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Adicionar uma rota URL para um aplicativo", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adicionando rota {{.URL}} para app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "Todos os planos deste serviço já estão acessíveis a todas as organizações", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "Todos os planos pertencentes à este serviço já está acessível para esta organização", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "Todos os planos deste serviço já estão inacessíveis para todas as organizações", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "Todos os planos pertencentes à este serviço já estão inacessíveis para esta organização", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "Também remova rotas mapeadas", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "Uma organização deverá estar definida como alvo antes de definir um espaço", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "Nome do aplicativo é um campo obrigatório", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "Aplicativo {{.AppName}} não existe.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} é um trabalhador, ignorando criação de rotas", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} já está vinculada com {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Anexar informações de diagnóstico para pedidos API em arquivo de log", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Assinalar cota para uma organização", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Assinale uma função do espaço para um usuário", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Assinale uma função da org para um usuário", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Assinalando função {{.Role}} para usuário {{.TargetUser}} na org {{.TargetOrg}} / espaço {{.TargetSpace}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Assinalando função {{.Role}} para usuário {{.TargetUser}} na org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assinalando grupo de segurança {{.security_group}} para espaço {{.space}} na org {{.organization}} como {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Tentando migrar {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Autenticar usuário não interativamente", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Autenticando...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "GERENTE DE FATURAMENTO", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "COMPILADO EM:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Vincular um grupo de segurança à um espaço", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Vincule um grupo de segurança à lista de grupos para serem usados durante execução de aplicativos", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Vincule um grupo de segurança à lista de grupos para serem usados durante encenação de aplicativos", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Vincular instância de serviço a um aplicativo", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Vínculo entre {{.InstanceName}} e {{.AppName}} não existe", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Vinculando grupo de segurança {{.security_group}} com padrões de execução como {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Vinculando grupo de segurança {{.security_group}} com padrões de encenação como {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Vinculando serviço {{.ServiceInstanceName}} com app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Vinculando serviço {{.ServiceName}} com app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Vinculando {{.URL}} com {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Buildpack {{.BuildpackName}} já existe", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Buildpack {{.BuildpackName}} não existe.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "modified": false - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USUÁRIO SENHA\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group GRUPO-DE-SEGURANÇA", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group GRUPO-DE-SEGURANÇA ORG ESPAÇO", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group GRUPO-DE-SEGURANÇA", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TEMPO-LIMITE-EM-MINUTOS] [--trace true | false | caminho/para/arquivo/log] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK CAMINHO POSIÇÃO [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMÍNIO", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route ESPAÇO DOMÍNIO [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group GRUPO-DE-SEGURANÇA ARQUIVO-DE-REGRAS-JSON", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LEGENDA PROVEDOR TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker CORRETOR-DE-SERVIÇO USUÁRIO SENHA URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMÍNIO", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space ESPAÇO [-o ORG]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USUÁRIO SENHA", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X MÉTODO] [-H CABEÇALHO] [-d DATA] [--output ARQUIVO]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMÍNIO [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota COTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMÍNIO [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group GRUPO-DE-SEGURANÇA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LEGENDA PROVEDOR [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker CORRETOR_DE_SERVIÇOS [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMÍNIO [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space ESPAÇO [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USUÁRIO [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [-i INSTÂNCIA] [CAMINHO]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USUÁRIO] [-p SENHA] [-o ORG] [-s ESPAÇO]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMÍNIO [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances SERVIÇO_v1 PROVEDOR_v1 PLANO_v1 SERVIÇO_v2 PLANO_v2\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVEDOR]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota COTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename NOME-DO-APP NOVO-NOME-DO-APP", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service NOME_DA_INSTÂNCIA_DE_SERVIÇO NOVO_NOME_DA_INSTÂNCIA_DE_SERVIÇO", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker NOME_DO_CORRETOR_DE_SERVIÇOS NOVO_NOME_DO_CORRETOR_DE_SERVIÇOS", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space ESPAÇO NOVO-ESPAÇO", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i QTD-DE-INSTÂNCIAS] [-k HDD] [-m MEMÓRIA] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group GRUPO-DE-SEGURANÇA", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service INSTÂNCIA_DE_SERVIÇO", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NOME VALOR", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USUÁRIO ORG FUNÇÃO\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG COTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USUÁRIO ORG ESPAÇO FUNÇÃO\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space ESPAÇO", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG ESPAÇO", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s ESPAÇO]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group GRUPO-DE-SEGURANÇA", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group GRUPO-DE-SEGURANÇA ORG ESPAÇO", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP SERVICE_INSTANCE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group GRUPO-DE-SEGURANÇA", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMÍNIO [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NOME", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USUÁRIO ORG FUNÇÃO\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USUÁRIO ORG ESPAÇO FUNÇÃO\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p CAMINHO] [-i POSIÇÃO] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group GRUPO-DE-SEGURANÇA ARQUIVO-DE-REGRAS-JSON", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LEGENDA PROVEDOR TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER [-u USERNAME] [-p PASSWORD] [--url URL]", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXEMPLO:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"usuário\":\"admin\",\"senha\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERRO CRIANDO ARQUIVO DE LOG {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Permitido criar instâncias de serviços pagos", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Não é possível exibir serviços disponíveis no mercado sem ter um espaço alvo definido", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Proibido subscrever à planos de serviços pagos", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Não é possível especificar as opções bloquear e desbloquear simultaneamente.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Não é possível especificar {{.Enabled}} e {{.Disabled}} simultaneamente.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Não é possível especificar bits do buildpack em conjunto com bloquear/desbloquear.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Alterar ou exibir a quantidade de instâncias, limite no disco rígido, e limite de memória para um aplicativo", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Modificar senha do usuário", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Modificando senha...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Comando não encontrado", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Conectado, mostrando logs recentes para app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Conectado, mostrando logs continuadamente para app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Não foi possível vincular ao serviço {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Não foi possível determinar o diretório de trabalho atual!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Não foi possível encontrar domínio padrão", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Não foi possível encontrar aplicativo com o nome '{{.AppName}}' no manifesto", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Não foi possível encontrar plano com nome {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Não foi possível encontrar serviço {{.ServiceName}} para vincular à {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Não foi possível analisar o número da versão: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Não foi possível serializar informações", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Não foi possível serializar atualizações.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Não foi possível definir organização como alvo.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Não foi possível criar arquivo temporário para upload", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Não foi possível abrir arquivo buildpack", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Não foi possível gravar arquivo zip", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Criar um buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Criar um domínio em uma organização para uso posterior", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Criar um domínio que pode ser utilizado por todas as organizações (somente admin)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Criar novo usuário", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Criar uma rota randômica para este app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Criar um grupo de segurança", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Criar um token de autenticação de serviço", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Criar um corretor de serviços", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Criar uma instância de serviço", - "modified": false - }, - { - "id": "Create a space", - "translation": "Criar um espaço", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Criar uma rota URL em um espaço para uso posterior", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Criar uma organização", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Criando app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Criando buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Criando domínio {{.DomainName}} para org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Criando org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Criando cota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Criando rota {{.Hostname}} para org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Criando rota {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Criando grupo de segurança {{.security_group}} como {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Criando tokens de autenticação de serviços como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Criando corretor de serviços {{.Name}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Criando serviço {{.ServiceName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Criando domínio compartilhado {{.DomainName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Criando espaço {{.SpaceName}} na org {{.OrgName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Criando serviço fornecido por usuário {{.ServiceName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Criando usuário {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Credenciais foram rejeitadas, por favor, tente novamente.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Senha atual", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Senha atual inválida", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Buildpack personalizado por nome (e.g. meu-buildpack) ou URL GIT (e.g. https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Cabeçalhos personalizados para incluir no pedido. Sinalizador pode ser utilizado múltiplas vezes.", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMÍNIOS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Definir uma nova cota de recursos", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Remover um buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Remover um domínio", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Remover uma cota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Remover uma rota", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Remover um token de autenticação de serviço", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Remover um corretor de serviços", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Remover instância de serviço", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Remover um domínio compartilhado", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Remover um espaço", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Remover um usuário", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Remover todas as rotas órfãs (e.g.: aquelas que não estão mapeadas a um app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Remover um aplicativo", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Remover uma organização", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Remoção cancelada", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Remove um grupo de segurança", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removendo app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Removendo buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Removendo domínio {{.DomainName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Removendo org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Removendo cota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Removendo rota {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Removendo rota {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Removendo grupo de segurança {{.security_group}} como {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Removendo token de autenticação de serviço como {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Removendo corretor de serviços {{.Name}} como {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removendo serviço {{.ServiceName}} em org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removendo espaço {{.TargetSpace}} na org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Removendo usuário {{.TargetUser}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Descrição: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Desabilitar acesso a um serviço ou plano de serviço para uma ou todas as organizações", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Desabilitar um buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Desabilitando acesso a plano {{.PlanName}} para serviço {{.ServiceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Desabilitando acesso a todos os planos do serviço {{.ServiceName}} para todas as organizações como {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Desabilitando acesso a todos os planos do serviço {{.ServiceName}} para a organização {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Desabilitando acesso a plano {{.PlanName}} do serviço {{.ServiceName}} para org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Limite de disco rígido (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Exibir status para um determinado aplicativo", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Não colorir saída", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Não mapeie uma rota para este app", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "Não inicialize este aplicativo após envio", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "URL de documentação: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domínio (e.g. example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domínios:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Exibir apenas logs recentes ao invés de continuamente", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "VARIÁVEIS DE AMBIENTE:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EXEMPLO:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Habilitar informações de diagnóstico CF_TRACE para todos os pedidos e respostas", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Habilitar proxy HTTP para pedidos API", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Habilitar acesso a um serviço ou plano de serviço para uma ou todas as organizações", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Habilitar ou desabilitar cores", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Habilitar o buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Habilitando acesso a plano {{.PlanName}} para serviço {{.ServiceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Habilitando acesso a todos os planos do serviço {{.ServiceName}} para todas as organizações como {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Variável de ambiente {{.VarName}} não foi definida.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Erro construindo pedido", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Erro criando pedido:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Erro criando arquivo temporário: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Erro criando upload", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Erro criando usuário {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Erro removendo buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Falha ao remover domínio {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Erro mostrando pedido\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Erro mostrando resposta\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Erro encontrando org disponível\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Erro encontrando espaço disponível\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Erro encontrando comando {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Domínio não encontrado {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Arquivo de manifesto não encontrado", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error encontrando org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Erro encontrando org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Erro encontrando espaço {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Erro no requerimento", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Erro ao realizar marshal do JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Erro abrindo arquivo buildpack", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Erro analisando JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Erro analisando cabeçalhos", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Erro durante pedido", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Erro ao ler arquivo de manifesto:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Erro ao ler resposta", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Erro renomenado buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Erro resolvendo rota:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Erro atualizando buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Erro enviando aplicativo.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Erro enviando buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Erro gravando em arquivo temporário: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Erro zipando aplicativo", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Erro: Nome do aplicativo não definido", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Erro: tempo de espera por trabalho assíncrono '{{.ErrURL}}' esgotado", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Erro: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Executar um pedido diretamente contra a API, o content-type é definido como application/json por padrão", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Aplicativos deverá ser uma lista de chave/valores\nErro encontrado no manifesto próximo a:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Aplicativos deverá ser uma lista", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "{{.Name}} deverá ser uma combinação de chave =\u003e valor, ao invés de {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "{{.PropertyName}} deverá ser booliano.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "{{.PropertyName}} deverá ser uma lista de strings.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "{{.PropertyName}} deverá ser um número, ao invés de {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FALHA", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Falha ao obter buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Falha obtendo domínios.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Falha ao obter eventos.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Falha obtendo usuários da org para função {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Falha ao obter organizações.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Falha ao obter rotas.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Falha obtendo usuários do espaço para função {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Falha obtendo espaços.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Falha ao criar JSON para pedido resource_match", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Falha ao realizar marshal do JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Falha ao iniciar pedido oauth", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Forçar remoção sem confirmação", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Forçar migração sem confirmação", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Forçar reinicialização do app sem confirmação", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "COMEÇANDO", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "OPÇÕES GLOBAIS:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Obtendo todos os serviços disponíveis no mercado...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obtendo apps na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Obtendo buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Obtendo domínios na organização {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obtendo variáveis de ambiente da app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Obtendo eventos da app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obtendo arquivos da app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Obtendo informações para organização {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Obtendo informações sobre grupo de segurança {{.security_group}} como {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Obtendo informações para espaço {{.TargetSpace}} na org {{.OrgName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Obtendo organizações como {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Obtendo informações da cota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Obtendo cotas como {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Obtendo rotas como {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Obtendo grupos de segurança como {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Obtendo tokens de autenticação de serviços como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Listando corretores de serviços como {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Obtendo serviços disponíveis no mercado para org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Obtendo serviços na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Obtendo espaços na org {{.TargetOrgName}} como {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Obtendo stacks na org {{.OrganizationName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Obtendo usuários na org {{.TargetOrg}} / espaço {{.TargetSpace}} como {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Obtendo usuários na org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "Dados HTTP para inclusão no corpo do pedido", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "Método HTTP (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Hostname (e.g. meu-subdomínio)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignorar arquivo de manifesto", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Incluir cabeçalhos de resposta na saída", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Utilização incorreta", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Utilização incorreta.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Utilização incorreta. Sinalizadores da linha de comando (com exceção de -f) não podem ser utilizados quando enviando multiplos apps através de um arquivo de manifesto.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Número de argumentos incorreto", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instância", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Resposta JSON do servidor inválida", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Função inválida {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Certificado SSL inválido para {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Resposta assíncrona do servidor inválida", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Token de autenticação inválido: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Cota de disco rígido inválida: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Cota de disco rígido inválida: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Quantidade de instâncias inválida: {{.InstanceCount}}\nA quantidade de instâncias deve ser um número inteiro positivo", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Quantidade de instâncias inválida: {{.InstancesCount}}\nA quantidade de instâncias deve ser um número inteiro positivo", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Instância inválida: {{.Instance}}\nO valor deverá ser um número inteiro positivo", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Instância inválida: {{.Instance}}\nO valor deverá ser menor que {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Arquivo de manifesto inválido. Deverá ser map", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Limite de memória inválido: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Limite de memória inválido: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Limite de memória inválido: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Parâmetro de tempo limite inválido: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Utilização inválida", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Valor para {{.PropertyName}} inesperado:\n{{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON inválido: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "Exibir todos os aplicativos num determinado espaço", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "Exibir todos os buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "Exibir todas as organizações", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "Exibir todos os grupos de segurança", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "Exibir todas as instâncias de servico no espaço alvo", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "Exibir todos os espaços em uma org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Exibir todas as stacks (uma stack é um container pré-contruído, incluindo um sistema de arquivos e operacional, capaz de executar apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "Exibir todos os usuários na org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "Exibir ofertas disponíveis no mercado", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "Exibir cotas de utilização disponíveis", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "Exibir domínios na organização alvo", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "Exibir grupos de segurança nos padões de execução", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "Exibir grupos de segurança nos padrões de encenação", - "modified": false - }, - { - "id": "List service access settings", - "translation": "Exibir configurações de acesso de serviços", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "Exibir tokens de autenticação de serviços", - "modified": false - }, - { - "id": "List service brokers", - "translation": "Exibir corretores de serviços", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Bloquear o buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Conectar usuário", - "modified": false - }, - { - "id": "Log user out", - "translation": "Desconectar usuário", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Desconectando...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Terminal loggregator ausente em arquivo de configuração", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Fazer com que um serviço fornecido pelo usuário esteja disponível para aplicativos", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Mapear o domínio raiz para este aplicativo", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Tempo de espera máximo para inicialização do aplicativo, em minutos", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Tempo de espera máximo para encenação do buildpack, em minutos", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Tempo de espera limite para inicialização em segundos", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Limite de memória (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrar instâncias de servicos de um plano de serviço a outro", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NOME:", - "modified": false - }, - { - "id": "Name", - "translation": "Nome", - "modified": false - }, - { - "id": "New Password", - "translation": "Nova Senha", - "modified": false - }, - { - "id": "New name", - "translation": "Novo nome", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "Nenhum terminal API definido. Utilize '{{.LoginTip}}' ou '{{.APITip}}' para definir.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Nenhuma ação efetuada. O acesso à todos os planos do serviço {{.ServiceName}} deverá ser removido e subsequentemente habilitado para todas as organizações com exceção da organização {{.OrgName}}.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Nenhuma ação efetuada. O acesso ao plano {{.PlaneName}} do serviço {{.ServiceName}} deverá ser removido e subsequentemente habilitado para todas as organizações com exceção da organização {{.OrgName}}.", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "Terminal de API nao definido. Utilize '{{.Name}}' para definir", - "modified": false - }, - { - "id": "No apps found", - "translation": "Nenhum aplicativo encontrado", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "Nenhum buildpack encontrado", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "Nenhum domínio encontrado", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "Nenhum evento para aplicativo {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "Nenhum sinalizador especificado. Nenhuma modificação foi feita.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "Nennhuma organização ou espaço alvo definido, utilize '{{.Command}}' para definir", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "Organização ou espaço inválido, utilize '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "Organização inválida, utilize '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "Nenhuma organização alvo definida, utilize '{{.Command}}' para definir.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "Nenhuma organização encontrada", - "modified": false - }, - { - "id": "No routes found", - "translation": "Nenhuma rota encontrada", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "Nenhum grupo de segurança de execução encontrado", - "modified": false - }, - { - "id": "No security groups", - "translation": "Nenhum grupo de segurança", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "Nenhum corretor de serviço encontrado", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "Nenhuma oferta de serviço encontrada", - "modified": false - }, - { - "id": "No services found", - "translation": "Nenhum serviço encontrado", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "Espaço inválido, utilize '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "Nenhum espaço alvo definido, utilize '{{.Command}}' para definir.", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "Nenhum espaço assinalado", - "modified": false - }, - { - "id": "No spaces found", - "translation": "Nenhum espaço encontrado", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "Nenhum grupo de segurança de encenação encontrado", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "Nenhuma variável de ambiente fornecida pelo sistema foram definidas", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "Nenhuma variável de ambiente fornecida pelo usuário foram definidas", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Não está conectado. Utilize '{{.CFLoginCommand}}' para efetuar o log in.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Quantidade de instâncias", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ADMINISTRAÇÃO DA ORG", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "OUVINTE DA ORG", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "GERENTE DA ORG", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Organização {{.OrgName}} já existe", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} não existe ou está inacessível", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Organização {{.OrgName}} não existe.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organização", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Substituir caminho para o diretório de configuração padrão", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Planos de serviços pagos", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Senha", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Verificação de senha nao corresponde", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Caminho para diretório ou arquivo zip", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Caminho para arquivo de manifesto", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plano {{.ServicePlanName}} não pode ser encontrado", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plano {{.ServicePlanName}} não contém instâncias de servicos a serem migradas", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plano: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Por favor escolha entre permitir ou não. Utilizar ambos os sinalizadores não é permitido no mesmo comando.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Tente evitar", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Por favor conecte novamente", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Exibir diagnósticos de pedidos API", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Exibir lista de arquivos em um diretório ou conteúdo de um arquivo específico", - "modified": false - }, - { - "id": "Print the version", - "translation": "Exibir versão", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Propriedade '{{.PropertyName}}' encontrada no manifesto. Esta função não é mais suportada. Por favor remova e tente novamente.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provedor", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Removendo serviço {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Enviar um novo aplicativo ou sincronizar modificações à um já existente", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Enviar um único app (com ou sem manifesto):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Definição de cota {{.QuotaName}} já existe", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Cota {{.QuotaName}} não existe", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "PEDIDO:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPOSTA:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "FUNÇÕES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROTAS", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Deseja realmente remover rotas órfãs?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Deseja realmente remover {{.ModelType}} {{.ModelName}} e tudo com o que estiver associado?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Deseja realmente remover {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Deseja realmente migrar {{.ServiceInstanceDescription}} do plano {{.OldServicePlanName}} para {{.NewServicePlanName}}?", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Deseja realmente remover oferta de serviço {{.ServiceName}} de Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Certificado SSL inválido recebido de ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Remover recursivamente um serviço e seus objetos filhos do banco de dados do Cloud Foundry, sem fazer contato com o corretor de serviços", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remover uma função do espaço de um usuário", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remover uma rota URL de um aplicativo", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remover uma variável de ambiente", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remover uma função da organização de um usuário", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removendo variável de ambiente {{.VarName}} do app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removendo função {{.Role}} do usuário {{.TargetUser}} na org {{.TargetOrg}} / espaço {{.TargetSpace}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removendo função {{.Role}} do usuário {{.TargetUser}} na org {{.TargetOrg}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removendo rota {{.URL}} do app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removendo rota {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Renomear o buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Renomear um corretor de serviços", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Renomear uma instância de serviço", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Renomear um espaço", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Renomear um aplicativo", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Renomear uma organização", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renomeando app {{.AppName}} para {{.NewName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renomeando buildpack {{.OldBuildpackName}} para {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renomenando org {{.OrgName}} para {{.NewName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renomenando corretor de serviço {{.OldName}} para {{.NewName}} como {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renomeando serviço {{.ServiceName}} para {{.NewServiceName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renomenado espaço {{.OldSpaceName}} para {{.NewSpaceName}} na org {{.OrgName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Re-encenar um aplicativo", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Re-encenando app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Reinicializar um aplicativo", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Rota {{.URL}} já existe", - "modified": false - }, - { - "id": "Routes", - "translation": "Rotas", - "modified": false - }, - { - "id": "Rules", - "translation": "Regras", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "GRUPOS DE SEGURANÇA", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "ADMINISTRAÇÃO DE SERVIÇOS", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVIÇOS", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "OUVINTE DO ESPAÇO", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "DEVELOPER DO ESPAÇO", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "GERENTE DO ESPAÇO", - "modified": false - }, - { - "id": "SPACES", - "translation": "ESPAÇOS", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Escalando app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Grupos de Segurança:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Grupo de segurança {{.security_group}} não existe", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Grupo de segurança {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Selecione um espaço (ou pressione enter para pular):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Selecione uma org (ou pressione enter para pular):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Erro no servidor, código de resposta: {{.ErrStatusCode}}, código de erro: {{.ErrApiErrorCode}}, mensagem: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Token de autenticação de serviço {{.Label}} {{.Provider}} não existe.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Corretor de serviços {{.Name}} não existe.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Instância de serviço não é fornecida pelo usuário", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Instância de serviço: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Oferta de serviço não existe\nDICA: Se você está tentando remover uma oferta de serviço v1, o sinalizador -p é obrigatório.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Serviço {{.ServiceName}} não existe.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Serviço: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Serviços", - "modified": false - }, - { - "id": "Services:", - "translation": "Serviços:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Definir uma variável de ambiente para um aplicativo", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Definir ou exibir organização e/ou espaço alvo", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Definindo terminal API como {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Definindo variável de ambiente '{{.VarName}}' como '{{.VarValue}}' para app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Assinalando cota {{.QuotaName}} para org {{.OrgName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Exibir um único grupo de segurança", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Exibir todas as variáveis de ambiente para um aplicativo", - "modified": false - }, - { - "id": "Show help", - "translation": "Exibir ajuda", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Exibir informações da organização", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Exibir usuários da org por função", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Exibir informações de cota", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Exibir eventos recentes para um determinado aplicativo", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Exibir informações da instância de serviço", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Exibir informações de espaço", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Exibir usuários do espaço por função", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Mostrando escala atual do app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Mostrando status da app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Espaço", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Espaço {{.SpaceName}} já existe", - "modified": false - }, - { - "id": "Space:", - "translation": "Espaço:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack a ser utilizada (uma stack é um container pré-contruído, incluindo um sistema de arquivos e operacional, capaz de executar apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Iniciar um aplicativo", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Tempo de inicialização limite para aplicativo\n\nDICA: utilize '{{.Command}}' para maiores informações", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Inicialização não sucedida\n\nDICA: utilize '{{.Command}}' para maiores informações", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Inicializando app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Comando de inicialização, defina como nulo para redefinir como padrão", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Parar um aplicativo", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Parando app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "URL para serviço Syslog", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "Fornecida pelo Sistema:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "DICA:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "DICA: Espaço alvo não definido, utilize '{{.CfTargetCommand}}' para definir.", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "DICA: Utilize '{{.ApiCommand}}' para continuar com um terminal API inseguro", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "DICA: Utilize '{{.CFCommand}}' para garantir que mudanças nas variáveis de ambiente entrem em vigor", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "DICA: Para fazer com que estas mudanças entrem em vigor, utilize '{{.CFUnbindCommand}}' para desvincular o serviço, '{{.CFBindComand}}' para re-vincular, e finalmente '{{.CFRestageCommand}}' para atualizar o app app com as novas variáveis de ambiente", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "DICA: Utilize '{{.Command}}' para garantir que modificações de ambiente entrem em vigor", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "DICA: utilize '{{.CfUpdateBuildpackCommand}}' para atualizar este buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Exibir logs recentes ou continuadamente para um aplicativo", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Organização alvo {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Espaço alvo {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "Posição do buildpack em relação à outros buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "O plano já está acessível a todas as organizações", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "O plano já está acessível a esta organização", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "O plano já está inacessível à todas as organizações", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "Este plano já está inacessível para esta organização", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "A rota {{.URL}} já esta em uso.\nDICA: Modifique o hostname usando -n HOSTNAME ou use --random-route para gerar uma nova rota e depois tente novamente.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "Não há instâncias deste aplicativo em execução.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "Existem muitas opções a serem exibidas, por favor digite um nome.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "Este domínio é compartilhado com todas as organizações.\nRemovendo-o irá remover todas as rotas associadas, e fará qualquer aplicativo inacessivle através deste domínio. Tem certeza que deseja remover domínio {{.DomainName}}?", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "Isto fará com que o aplicativo seja reiniciado. Tem certeza que deseja escalar app {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Tempo de espera limite para pedidos de HTTP assíncronos", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Total Memory", - "modified": false - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Quantidade total de memória (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Quantidade total de rotas", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Quantidade total de instâncias de serviços", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Traçar pedidos HTTP", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "Terminal UAA ausente em arquivo de configuração", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USO:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "ADMINISTRAÇÃO DE USUÁRIOS", - "modified": false - }, - { - "id": "USERS", - "translation": "USUÁRIOS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Não é possível acessar espaço {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Não foi possível autenticar.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Não foi possível remover, rota '{{.URL}}' não existe.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Desvincular grupo de segurança de um espaço", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Desvincular um grupo de segurança com a lista de grupos para serem usados durante execução de aplicativos", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Desvincular um grupo de segurança com a lista de grupos para serem usados durante encenação de aplicativos", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Desvincular instância de servico de uma app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Desvinculando app {{.AppName}} do serviço {{.ServiceName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Desvinculando grupo de segurança {{.security_group}} dos padrões de execução como {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Desvinculando grupo de segurança {{.security_group}} dos padrões de encenação como {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Desvinculando grupo de segurança {{.security_group}} da {{.organization}} / espaço {{.space}} como {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Desbloquear um buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Atualizar um buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Atualizar um grupo de segurança", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Atualizar token de autenticação do serviço", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Atualizar corretor de serviço", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Atualizar uma cota de recursos existente", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Atualizar par de valores de nome de instância de serviço fornecido pelo usuário", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Atualizando app {{.AppName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Atualizando buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Atualizando cota {{.QuotaName}} como {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Atualizando grupo de segurança {{.security_group}} como {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Atualizando token de autenticação de serviço como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Atualizando corretor de serviço {{.Name}} como {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Atualizando serviço fornecido pelo usuário {{.ServiceName}} na org {{.OrgName}} / espaço {{.SpaceName}} como {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Enviando app com arquivos do caminho: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Enviando buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Enviando {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Enviando {{.ZipFileBytes}}, {{.FileCount}} arquivos", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Utilize '{{.Name}}' para mostrar ou definir sua organização e espaco alvo", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Utilize uma senha de uso único para conectar", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "Usuário {{.TargetUser}} não existe.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "Fornecida pelo Usuário:", - "modified": false - }, - { - "id": "User:", - "translation": "Usuário:", - "modified": false - }, - { - "id": "Username", - "translation": "Usuário", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Utilizando arquivo de manifesto {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Usando rota {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Utilizando stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSÃO:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verifique Senha", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "ATENÇÃO:\n Fornecendo sua senha através da linha de comando é altamente desaconselhável\n Sua senha poderá ficar visível para outros usuários do sistema, e pode ser salva como parte do seu histórico de shell\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "ATENÇÃO: Esta operação pressupõe que o corretor de serviço responsável por esta oferta de serviço não está mais disponível, e todas as instâncias de serviços foram eliminadas, deixando registros órfãos no banco de dados do Cloud Foundry. Todo o conhecimento sobre o serviço será removido do banco de dados, incluindo instâncias de serviços e vínculos de serviço. Não será feita nenhuma tentativa de contato com o corretor de serviço; execução desse comando sem destruir o corretor de serviço fará com que as instâncias de serviço virem órfãs. Depois de executar este comando, você pode querer executar delete-service-auth-token ou delete-service-broker para completar a limpeza.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "ATENÇÃO: Esta é uma operação interna do Cloud Foundry; não haverá contato com os corretores de serviços e recursos para instâncias de serviços não serão alterados. O caso de utilização primário para esta operação é de substituir um corretor de serviços que implementa a API v1, com um corretor que implementa a API v2, por remapeamento de instâncias de serviços dos planos v1 para os planos v2. Recomendamos que os planos v1 sejam marcados como privados ou desligando o corretor de serviço v1 para evitar que instâncias de serviços adicionais sejam criadas. Uma vez que as instâncias de serviços forem migradas, os serviços e planos v1 podem ser removidos do Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Atenção: Terminal HTTP de API inseguro detectado: utilização de certificados SSL no terminal API é altamente recomendado\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Atenção: falha ao tentar exibir logs continuadamente", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Gravar corpo de resposta curl em arquivo ao invés de stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "Arquivo zip não contém um buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-CONTEÚDO ESCONDIDO]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[DADOS PRIVADOS ESCONDIDOS]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[variáveis de ambiente]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[opções globais] comando [argumentos...] [opções de comando]", - "modified": false - }, - { - "id": "access", - "translation": "accesso", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "configurações de planos específicas à um corretor", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "configurações de planos específicas à uma oferta de serviço", - "modified": true - }, - { - "id": "actor", - "translation": "ator", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "permitido", - "modified": false - }, - { - "id": "already exists", - "translation": "já existe", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "app falhou", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "falha em pedido de autenticação", - "modified": false - }, - { - "id": "bound apps", - "translation": "aplicativos vinculados", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "corretor: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "falhando", - "modified": false - }, - { - "id": "description", - "translation": "descrição", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "não permitido", - "modified": false - }, - { - "id": "disk", - "translation": "disco rígido", - "modified": false - }, - { - "id": "disk:", - "translation": "disco rígido:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "não existe.", - "modified": false - }, - { - "id": "domain", - "translation": "domínio", - "modified": false - }, - { - "id": "domains:", - "translation": "dominios:", - "modified": false - }, - { - "id": "down", - "translation": "indisponivel", - "modified": false - }, - { - "id": "enabled", - "translation": "habilitado", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "variável de ambiente '{{.PropertyName}}' não deve ser nula", - "modified": false - }, - { - "id": "event", - "translation": "evento", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "falha ao desabilitar echo durante entrada de senha:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "nome de arquivo", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "utilização incorreta", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instância: {{.InstanceIndex}}, motivo: {{.ExitDescription}}, código de saída: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instâncias", - "modified": false - }, - { - "id": "instances:", - "translation": "instâncias:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "Caminho de herança inválido no manifesto", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "valor inválido para variável de ambiente CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "valor inválido para variável de ambiente CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "legenda", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limitado", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "bloqueado", - "modified": false - }, - { - "id": "memory", - "translation": "memória", - "modified": false - }, - { - "id": "memory:", - "translation": "memória:", - "modified": false - }, - { - "id": "name", - "translation": "nome", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "inválido para o host solicitado", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organização", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "próprio", - "modified": false - }, - { - "id": "paid service plans", - "translation": "planos de serviços pagos", - "modified": false - }, - { - "id": "plan", - "translation": "plano", - "modified": false - }, - { - "id": "plans", - "translation": "planos", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "planos acessíveis a uma organização em particular", - "modified": false - }, - { - "id": "position", - "translation": "posição", - "modified": false - }, - { - "id": "provider", - "translation": "provedor", - "modified": false - }, - { - "id": "quota:", - "translation": "cota:", - "modified": false - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "estado requerido", - "modified": false - }, - { - "id": "requested state:", - "translation": "estado requerido:", - "modified": false - }, - { - "id": "routes", - "translation": "rotas", - "modified": false - }, - { - "id": "running", - "translation": "executando", - "modified": false - }, - { - "id": "security group", - "translation": "grupo de segurança", - "modified": false - }, - { - "id": "service", - "translation": "serviço", - "modified": false - }, - { - "id": "service auth token", - "translation": "token de autenticação de serviço", - "modified": false - }, - { - "id": "service instance", - "translation": "instância de serviço", - "modified": false - }, - { - "id": "service instances", - "translation": "instâncias de serviços", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "compartilhado", - "modified": false - }, - { - "id": "since", - "translation": "desde", - "modified": false - }, - { - "id": "space", - "translation": "espaço", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "espaços:", - "modified": false - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "iniciando", - "modified": false - }, - { - "id": "state", - "translation": "estado", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "parado", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "interrompido após um redirecionamento", - "modified": false - }, - { - "id": "time", - "translation": "tempo", - "modified": false - }, - { - "id": "total memory limit", - "translation": "total memory limit", - "modified": false - }, - { - "id": "unknown authority", - "translation": "autoridade desconhecida", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "uso:", - "modified": false - }, - { - "id": "user", - "translation": "usuário", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "Gravar valores padrão para configuração", - "modified": false - }, - { - "id": "yes", - "translation": "sim", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (Versão da API: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrado.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} de {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} indisponível", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nDICA: Utilize '{{.CFServicesCommand}}' para mostrar todos os serviços nesta org e espaço.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nDICA: utilize '{{.Command}}' para maiores informações", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} falhando", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} de {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} já existe", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} deverá ser uma string ou valor nulo", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} deverá ser uma string", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} não deve ser nula", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M limite de memória, {{.RoutesLimit}} rotas, {{.ServicesLimit}} serviços, serviços pagos {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} de {{.TotalCount}} instâncias em execução", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} iniciando", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instâncias", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/zh_Hans.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/zh_Hans.all.json deleted file mode 100644 index 3e31af6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/zh_Hans.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\n小贴士:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\n应用程序已启动\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\n小贴士: 为用户{{.CurrentUser}}分配 '组织权限'及'空间权限", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\n小贴士: 使用'{{.CFTargetCommand}}'指定新空间", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\n小贴士: 使用'{{.Command}}'选择新组织", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\n小贴士: 通过cf login或者cf api命令来忽略'--skip-ssl-validation'错误", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - 创建和管理计费账户和付款信息\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"密码\\\"\" (密码中若有引号,需采用转义引号)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (密码中若有空格,需要转义空格)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (不指定用户名和密码参数,CF_NAME将进一步提示你输入用户名和密码)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME 将提供一个可以获得一次性密码的链接)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (密码中若有引号,需采用转义引号)\n", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (密码中若有空格,需要转义空格)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (指定用户名和密码作为参数)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push 应用程序[-b 包名] [-c 命令] [-d 域名] [-f 部署描述文件路径]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push 应用程序 [-f 部署描述文件路径]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - 只能访问组织的信息和报告\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - 邀请和管理用户,选择和改变服务计划,设置配额限制\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " 路径应该是一个zip文件,一个URL到一个zip文件,或本地目录。位置是一个整数,设置优先级,并进行排序,从最低到最高", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " 使用部署描述文件部署多个应用程序:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - 查看此空间中的日志,报告和设置信息\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - 创建和管理应用程序和服务,查看日志和报告\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - 邀请和管理用户,针对一个指定的空间启用各项功能\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " 查看允许配额而'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i 实例数] [-k 磁盘配额] [-m 内存配额] [-n 主机] [-p 应用本地包所在路径] [-s 栈深度] [-t 超时时间]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " 已启动", - "modified": false - }, - { - "id": " is already stopped", - "translation": " 已停止", - "modified": false - }, - { - "id": " is empty", - "translation": " 是空的", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " 未找到", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "与Cloud Foundry交互的命令行工具", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "高级", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API 终端", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API 终端 (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "API 终端:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API 终端: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API 终端: {{.ApiEndpoint}} (API 版本: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API 终端: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "应用程序", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Add a url route to an app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for the org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for the org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "同时删除所有绑定的域名", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "在选择空间之前必须选择一个组织", - "modified": false - }, - { - "id": "App ", - "translation": "应用程序 ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "应用程序名称为必填字段", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "应用程序{{.AppName}}不存在", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "应用程序 {{.AppName}}是一个worker程序,跳过路由的创建", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "应用{{.AppName}}已经与服务{{.ServiceName}}绑定了.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "追加API请求诊断信息到日志文件", - "modified": false - }, - { - "id": "Apps:", - "translation": "应用程序:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "给组织分配配额", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "给用户分配空间角色", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "给用户分配组织角色", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "分配角色:{{.Role}}在组织{{.TargetOrg}}或空间{{.TargetSpace}}中分配权限给用户{{.TargetUser}} (作为用户{{.CurrentUser}}) ...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "分配角色:{{.Role}}在组织{{.TargetOrg}}中分配权限给用户{{.TargetUser}} (作为用户{{.CurrentUser}})...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "正尝试迁移{{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "非交互式用户身份验证", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "正在验证,请等待...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "计费管理", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "构建时间:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "绑定一个服务实例到应用程序", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "{{.InstanceName}}和{{.AppName}}之间没有绑定关系", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在绑定服务{{.ServiceInstanceName}}到属于组织{{.OrgName}}和空间{{.SpaceName}}中的应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "通过用户{{.Username}}给到组织{{.OrgName}}/空间{{.SpaceName}}下的应用 {{.AppName}} 绑定服务 {{.ServiceName}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "绑定{{.URL}}到{{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "buildpack {{.BuildpackName}} 已经存在", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "buildpack {{.BuildpackName}} 不存在", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "字节数量,必须是以M,MB,G或GB为单位的正整数", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app 应用程序名", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth 用户名 密码\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout 超时_以分钟为单位] [--trace true | false | 文件访问路径] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack \u003cBUILDPACK\u003e \u003c路径\u003e \u003c位置\u003e [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org 组织", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space 空间 [-o 组织]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user 用户名 密码", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service 服务实例 [-p 参数] [-l SYSLOG-syslog转发地址]\n\n 通过逗号分隔参数来使用交互模式:\n CF_NAME create-user-provided-service 服务实例 -p \"逗号,分隔的,参数,名称\"\n\n 传递JSON格式的参数来使用非交互方式创建服务:\n CF_NAME create-user-provided-service 服务实例 -p '{\"名称\":\"值\",\"名称\":\"值\"}'\n\n示例:\n CF_NAME create-user-provided-service oracle-db-mine -p \"主机, 端口, 数据库名, 用户名, 密码\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"用户名\":\"admin\",\"密码\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete 应用程序名 [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org 组织 [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service 服务实例 [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\n样例:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space 空间 [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user 用户名 [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env 应用程序名", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events 应用程序名", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files 应用程序名 [路径]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u 用户名] [-p 密码] [-o 组织] [-s 空间]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs 应用程序名", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_服务名称 v1_提供者 v1_服务计划 v2_服务名称 v2_服务计划\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org 组织", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users 组织", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering 服务 [-p 提供者]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename 应用程序名 新应用程序名", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack buildpack名称 新的buildpack名称", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org 组织 新组织", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service 原服务实例名称 新服务实例名称", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space 空间 新空间", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage 应用程序名", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart 应用程序名", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale 应用程序 [-i 实例数] [-k 磁盘] [-m 内存] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service 服务实例", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\n样例:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\n样例:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env 应用程序名 环境名 值", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role 用户名 组织 角色\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota 组织 配额\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role 用户名 组织 空间 角色\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space 空间", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users 组织 空间", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start 应用程序名", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop 应用程序", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o 组织] [-s 空间]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service 应用程序 服务实例", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env 应用程序 名称", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role 用户名 组织 角色\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role 用户名 组织 空间 角色\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p 路径] [-i 位置] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service 服务实例 [-p 参数] [-l SYSLOG-syslog转发地址]'\n\n示例:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"用户名\":\"admin\",\"密码\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE 创建日志文件错误 {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Can provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "无法删除服务实例,需要先删除服务密钥和绑定", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "在没有指定空间的情况下无法获取服务列表", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Cannot provision instances of paid service plans", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "不能同时指定锁定和解锁选项", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "不能同时指定{{.Enabled}}和{{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "无法指定buildpack以及对其加锁/解锁", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "更改或查看应用程序的实例个数,磁盘空间配额和内存配额", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "更改用户密码", - "modified": false - }, - { - "id": "Changing password...", - "translation": "正在更改密码...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "无效命令", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "已连接,用户{{.Username}}生成组织 {{.OrgName}} / 空间 {{.SpaceName}}下应用程序{{.AppName}} 的日志...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "已连接,用户{{.Username}}读取组织 {{.OrgName}} / 空间 {{.SpaceName}}下应用程序{{.AppName}} 的日志...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "无法绑定到服务{{.ServiceName}}\n错误为: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "无法确定当前的工作目录!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "找不到默认域名", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "无法在部署描述文件中找到名为'{{.AppName}}'的应用程序", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "无法找到名为{{.ServicePlanName}}的服务计划", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "无法找到可用服务{{.ServiceName}}绑定到{{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "无法解析版本号: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "无法序列化信息", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "无法序列化更新部分", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "无法选择组织.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "无法创建上传所需的临时文件", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "无法打开buildpack文件", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "无法写入zip文件", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "创建 buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Create a domain in an org for later use", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Create a domain that can be used by all orgs (admin-only)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "创建一个新用户", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "为当前应用程序创建随机路由", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Create a service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "创建服务实例", - "modified": false - }, - { - "id": "Create a space", - "translation": "创造空间", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Create a url route in a space for later use", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "创建组织", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "为服务实例创建密钥", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "用户{{.Username}}在组织{{.OrgName}}/空间{{.SpaceName}}中创建应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "创建buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "用户{{.Username}}创建组织{{.OrgName}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "创建路由 {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}在组织{{.OrgName}}/空间{{.SpaceName}}中创建服务{{.ServiceName}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在为服务实例{{.ServiceInstanceName}}创建名为{{.ServiceKeyName}}的密钥...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "创建空间中:用户{{.CurrentUser}}在组织{{.OrgName}}中创建空间{{.SpaceName}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}在组织{{.OrgName}}/空间{{.SpaceName}}中创建由用户提供的服务{{.ServiceName}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creating user {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "验证失败,请重试", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "当前密码", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "密码不匹配", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "使用名称(e.g. my-buildpack)或GIT网址(e.g. https://github.com/heroku/heroku-buildpack-play.git) 自定义buildpack", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "在请求中自定义HTTP报头, 可以多次使用", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "域", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define a new resource quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "删除buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Delete a domain", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Delete a quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Delete a route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Delete a service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "删除服务实例", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "删除服务密钥", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Delete a shared domain", - "modified": false - }, - { - "id": "Delete a space", - "translation": "删除空间", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "删除用户", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "删除一个应用程序", - "modified": false - }, - { - "id": "Delete an org", - "translation": "删除组织", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "撤销删除", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "作为用户{{.Username}}在组织{{.OrgName}}/空间{{.SpaceName}}中删除应用程序{{.AppName}} ...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "删除buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在删除服务实例{{.ServiceInstanceName}}的密钥{{.ServiceKeyName}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "用户{{.Username}}删除组织{{.OrgName}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Deleting route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Deleting route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "删除用户{{.CurrentUser}}在组织{{.OrgName}}/空间{{.ServiceName}}中的服务{{.SpaceName}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}删除组织{{.TargetOrg}}中的空间{{.TargetSpace}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "删除用户中:当前用户{{.CurrentUser}}正在删除用户{{.TargetUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "描述: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "禁用buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "磁盘限额(例如256M,1024M,1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "显示应用程序的健康状态", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "禁止彩色输出", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "不为这个应用映射一个路由", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "推送后不启动应用", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "文档URL: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "域名(例如example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "域名:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "生成最近的日志文件,而非读取日志内容", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "环境变量:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "例子:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "启动CF_TRACE输出所有请求和响应", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "为API请求启用HTTP代理", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "启用或禁用彩打输出", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "启用buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "环境变量{{.VarName}}未设置", - "modified": false - }, - { - "id": "Error building request", - "translation": "生成请求错误", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "创建请求错误:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "无法创建临时文件: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "创建上传任务错误", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "创建用户{{.TargetUser}}错误.\n错误: {{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "删除 buildpack {{.Name}},\n错误:{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "打印请求体错误\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "打印响应错误\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "无法找到可用的组织\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "无法找到可用的空间\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "未找到命令 {.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "无法找到 manifest", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "找不到组织{{.OrgName}}\n错误信息: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "无法找到组织 {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "无法找到空间 {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "请求错误", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "转换JSON格式错误", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "打开buildpack文件时出错", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "解析JSON错误", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "头域解析错误", - "modified": false - }, - { - "id": "Error performing request", - "translation": "执行请求错误", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "读取部署描述文件错误:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "读取响应错误", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "重命名buildpack {{.Name}}\n错误:{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolving route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "更新错误 buildpack {{.Name}}\n错误:{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "上传应用程序:\n{{.ApiErr}}错误", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "上传buildpack {{.Name}},\n错误:{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "临时文件写入错误: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "压缩应用程序错误", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "错误: 没有找到该应用程序名", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "错误: timed out waiting for async job '{{.ErrURL}}' to finish", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "错误: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "执行原始请求,content-type默认设置为application / json", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "预计申请成为键/值pairs\n错误列表发生在舱单附近:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "应用程序集应该是一个列表", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "预期令{{.Name}}为一组关键=\u003e 价值,但它是一{{.Type}}", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "{{.PropertyName}} 应为布尔变量", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "{{.PropertyName}} 应为字符串", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "{{.PropertyName}} 应为数字,不是{{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "失败", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "抓取buildpack失败\n错误:{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Failed fetching domains.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "提取事件失败\n错误: {{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "无法获取组织用户的角色{{.OrgRoleToDisplayName}}.\n错误: {{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "提取组织失败.\n错误: {{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Failed fetching routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "未能获取空间用户的角色{{.SpaceRoleToDisplayName}}.\n错误: {{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "获取不到空间.\n错误信息: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "无法创建JSON格式的resource_match请求", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "转换JSON格式错误", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "无法启动开放授权请求", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "不通过确认强制删除", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "强制迁移", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "无推送强制重启应用", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "入门", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "全局选项:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "从服务市场获取所有服务...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "作为用户{{.Username}}获取在组织 {{.OrgName}} / 空间 {{.SpaceName}} 中的应用列表...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "获取buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "作为用户{{.Username}}获取在组织{{.OrgName}} / 空间{{.SpaceName}} 中的应用{{.AppName}} 的环境变量 ...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "作为用户{{.Username}}获取在组织{{.OrgName}} / 空间{{.SpaceName}} 中的应用{{.AppName}} 的事件信息 ...", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "作为用户{{.Username}}获取在组织{{.OrgName}} / 空间{{.SpaceName}} 中的应用{{.AppName}} 的文件信息 ...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "用户{{.Username}}请求组织{{.OrgName}}的信息...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "获取空间信息中:用户{{.CurrentUser}}在组织{{.OrgName}}中的空间{{.TargetSpace}}信息...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在为服务实例{{.ServiceInstanceName}}获取密钥{{.ServiceKeyName}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在获取服务实例{{.ServiceInstanceName}}的密钥列表...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "用户{{.Username}}请求组织...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Getting quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Getting routes as {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "从服务市场获取用户{{.CurrentUser}}分配在组织{{.OrgName}}/空间{{.SpaceName}}中的服务...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "获取用户{{.CurrentUser}}在组织{{.OrgName}}/空间{{.SpaceName}}中的服务...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "获取空间:用户{{.CurrentUser}}在组织{{.TargetOrgName}}中获取空间...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "用户{{.Username}}请求分配组织{{.OrganizationName}}/空间{{.SpaceName}}中的stacks...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "用户{{.CurrentUser}}请求分配组织{{.TargetOrg}}/空间{{.TargetSpace}}中的用户", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}请求分配组织{{.TargetOrg}}中的用户...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "包含到请求语句中的HTTP数据", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "HTTP method (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "域名前缀 (例如: my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "忽略部署描述文件", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "输出包含HTTP响应头", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Incorrect Usage", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "不正确的使用\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "不正确使用方法。利用部署描述文件部署多个应用程序时,不能使用命令行标志(除了-f)", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "参数个数错误", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "无效的服务器JSON响应", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "无效的角色 {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "访问{{.URL}}的无效SSL证书\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "服务器无效的异步响应", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "无效的身份验证令牌: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "无效的磁盘配额: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "无效的磁盘配额: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "无效的实例数: {{.InstanceCount}}\n实例数必须是正整数", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "无效的实例数: {{.InstancesCount}}\n实例数量必须是个正整数", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "无效的配置", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "无效的内存配额: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "无效的内存配额: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "无效的超时参数设定: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "无效使用", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "非法{{.PropertyName}}值:\n错误: {{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "无效的JSON: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "列出目标空间中的所有应用程序", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "列出所有buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "列出所有组织", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "列出目标空间中的所有服务实例", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "列出组织中所有的空间", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "列出所有stacks (stack是预先建立好的文件系统, 包含可以运行应用程序的操作系统)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "列出组织中所有的机构", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "列出所有可用的服务", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "List domains in the target org", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "获取服务实例的密钥列表", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "List service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List service brokers", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "锁定该 buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "用户登录", - "modified": false - }, - { - "id": "Log user out", - "translation": "用户退出", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "正在退出...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "配置文件中没有loggregator地址信息", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "使这个由用户提供的服务实例对应用生效", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "映射根域名到此应用程序", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "应用实例启动的最长等待时间,以分钟为单位", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "buildpack打包的最长等待时间,以分钟为单位", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "在数秒内启动超时", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "内存配额(例如256M,1024M,1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "将服务实例从一个服务计划迁移到另一个", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "名称:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "新的密码", - "modified": false - }, - { - "id": "New name", - "translation": "New name", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "没有指定API终端。使用'{{.LoginTip}}'或'{{.APITip}}'选择终端", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "没有找到应用程序", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "buildpack未找到", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No domains found", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "没有找到应用程序{{.AppName}}的事件", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "没有指定的参数。未进行任何更改。", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "没有指定组织和空间,使用'{{.Command}}'选择组织和空间", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "没有指定组织或空间,使用'{{.CFTargetCommand}}'选择组织或空间", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "没有指定组织,使用'{{.CFTargetCommand}}'选择组织", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "没有指定组织,使用'{{.Command}}'选择组织.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "没有找到任何组织", - "modified": false - }, - { - "id": "No routes found", - "translation": "No routes found", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "服务实例{{.ServiceInstanceName}}没有密钥", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "未找到服务实例{{.ServiceInstanceName}}的密钥{{.ServiceKeyName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "没有找到服务", - "modified": false - }, - { - "id": "No services found", - "translation": "没有找到服务", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "没有指定空间,使用'{{.CFTargetCommand}}'指定空间", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "没有指定空间,使用'{{.Command}}'指定空间", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "没有找到空间", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "系统提供的环境变量未设置", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "用户定义的环境变量未设置", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "尚未登录,请使用'{{.CFLoginCommand}}'来登录", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "实例数", - "modified": false - }, - { - "id": "OK", - "translation": "通过", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "组织管理员", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "组织审计", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "组织管理", - "modified": false - }, - { - "id": "ORGS", - "translation": "组织", - "modified": false - }, - { - "id": "Org", - "translation": "组织", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "组织{{.OrgName}}已经存在", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "组织{{.OrgName}}不存在或无法访问", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "组织{{.OrgName}}不存在", - "modified": false - }, - { - "id": "Org:", - "translation": "组织:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "修改cf配置文件config.json的路径(该路径默认为~/.cf)", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Paid service plans", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "密码", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "密码验证不匹配", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "路径的应用程序目录或的应用程序目录中的内容的zip文件", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "目录或zip文件路径", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "部署描述文件的路径", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "无效的服务计划{{.ServicePlanName}}", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "服务计划{{.ServicePlanName}}没有服务实例可迁移", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "modified": false - }, - { - "id": "Please don't", - "translation": "请不要", - "modified": false - }, - { - "id": "Please log in again", - "translation": "请重新登录", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "打印API请求诊断信息到标准输出", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "打印目录下的文件清单,或者特定文件的内容", - "modified": false - }, - { - "id": "Print the version", - "translation": "打印版本号", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "清单中有'{{.PropertyName}}'。不再支持此功能。请删除它,再试一次", - "modified": false - }, - { - "id": "Provider", - "translation": "提供者", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "清理服务{{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "部署新的应用程序或同步更改已存在的应用程序", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "部署单一应用程序(带或不带部署描述文件):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} does not exist", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "请求:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "响应:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "角色:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "路由", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Really delete orphaned routes?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "确定删除{{.ModelType}} {{.ModelName}}以及所有相关数据和文件?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "确定删除{{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "您确定要将服务{{.ServiceInstanceDescription}}从服务计划{{.OldServicePlanName}}迁移到计划{{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "确定要从Cloud Foundry的清理服务{{.ServiceName}}吗?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "接收到无效的SSL证书, 从: ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "不经过请求服务令牌,递归地从Cloud Foundry的数据库中删除一个服务对象和子对象", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "删除用户在空间中的角色", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remove a url route from an app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "删除一个环境变量", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "删除用户在组织中的角色", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}删除组织{{.OrgName}}/空间{{.SpaceName}}中应用程序{{.AppName}}的环境变量{{.VarName}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "删除角色:用户{{.CurrentUser}}在组织{{.TargetOrg}}或者空间{{.TargetSpace}}中删除用户{{.TargetUser}}的角色{{.Role}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "删除角色:用户{{.CurrentUser}}在组织中{{.TargetOrg}}中删除用户{{.TargetUser}}的角色{{.Role}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "删除路由 {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "重命名buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "重命名服务实例", - "modified": false - }, - { - "id": "Rename a space", - "translation": "重命名空间", - "modified": false - }, - { - "id": "Rename an app", - "translation": "重命名一个应用程序", - "modified": false - }, - { - "id": "Rename an org", - "translation": "重命名一个组织", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "用户{{.Username}}将组织{{.OrgName}} /空间{{.SpaceName}}中的应用程序{{.AppName}}重命名为{{.NewName}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "重命名 buildpack {{.OldBuildpackName}} 到 {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "重命名组织{{.OrgName}}到{{.NewName}}为用户{{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "将服务{{.ServiceName}}重命名为{{.NewServiceName}},该服务属于组织{{.OrgName}} /空间{{.SpaceName}}的{{.CurrentUser}}用户...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "重命名空间:用户{{.CurrentUser}}在组织{{.OrgName}}中将{{.OldSpaceName}}重命名为{{.NewSpaceName}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "重新装载一个应用程序", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}},在组织{{.OrgName}}/空间{{.SpaceName}}中restaging 应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "重新启动一个应用程序", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "获取并显示服务密钥的guid。 不显示服务的其它全部信息。", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} already exists", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "服务管理员", - "modified": false - }, - { - "id": "SERVICES", - "translation": "服务", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "空间审计", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "空间开发者", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "空间管理者", - "modified": false - }, - { - "id": "SPACES", - "translation": "空间", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}伸缩组织{{.OrgName}}/空间{{.SpaceName}}中的应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "安全组:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "选择一个空间(或按回车继续):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "选择一个组织(或按回车继续):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "服务器错误,状态代码: {{.ErrStatusCode}}, 错误代码: {{.ErrApiErrorCode}}, 信息: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "不是用户定义的服务实例", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "服务实例{{.ServiceInstanceName}}不存在。", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "服务实例: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "服务实例{{.ServiceInstanceName}}的密钥{{.ServiceKeyName}}不存在。", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "服务不存在\n小贴士: 如果你想清理一个v1的服务,请设置-p参数。", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "服务{{.ServiceName}}不存在", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "服务描述: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "服务:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "为一个应用程序设置环境变量", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "设置或查看指定的组织或空间", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "将API终端设置为 {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "作为用户{{.CurrentUser}}设置组织{{.OrgName}}/空间{{.SpaceName}}中的应用程序{{.AppName}}的环境变量'{{.VarName}}'为'{{.VarValue}}'...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "用户{{.Username}}为组织{{.OrgName}}设置配额{{.QuotaName}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "显示应用程序所有环境变量", - "modified": false - }, - { - "id": "Show help", - "translation": "显示帮助", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "示信息为叠层(堆叠是一个预先建立的文件系统,包括一个操作系统,可以运行应用程序)", - "modified": false - }, - { - "id": "Show org info", - "translation": "展示组织信息", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "通过角色展现组织的用户", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Show quota info", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "显示应用程序最近的事件", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "显示服务实例的信息", - "modified": false - }, - { - "id": "Show service key info", - "translation": "显示服务密钥信息", - "modified": false - }, - { - "id": "Show space info", - "translation": "显示空间信息", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "通过角色展现空间的用户", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}显示组织{{.OrgName}}/空间{{.SpaceName}}中应用程序{{.AppName}}的实例数 ...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "作为用户{{.Username}}显示组织{{.OrgName}}/空间{{.SpaceName}}应用程序{{.AppName}}的健康状态...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "空间{{.SpaceName}}已经存在", - "modified": false - }, - { - "id": "Space:", - "translation": "空间:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "堆栈使用(堆栈是一个预先构建的文件系统,包括一个操作系统,可以用来运行应用程序)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "启动应用程序", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "启动应用程序超时\n\n小贴士: 使用'{{.Command}}'以获取更多信息", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "启动不成功\n\n小贴士: 使用'{{.Command}}'以获取更多信息", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "作为用户{{.CurrentUser}}启动组织{{.OrgName}}/空间{{.SpaceName}}中的应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "启动命令,设置为null可以重置为默认启动命令", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "停止一个应用程序", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "作为用户{{.CurrentUser}}停止组织{{.OrgName}}中/空间{{.SpaceName}}中的应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog转发地址", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "系统提供的:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "小贴士:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "小贴士: 没有指定空间,使用'{{.CfTargetCommand}}'指定空间", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "小贴士: 使用'{{.ApiCommand}}'继续非安全的API终端访问", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "小贴士: 使用'{{.CFCommand}}',来确保您的环境变量更改生效", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "小贴士: 为了使这些更改生效, 使用'{{.CFUnbindCommand}}解除绑定的服务,使用'{{.CFBindComand}}重新绑定服务,然后使用'{{.CFRestageCommand}}'更新应用使环境变量生效。", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "小贴士: 使用'{{.Command}}'来确保你的环境变量更改生效", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "小贴士: 使用'{{.CfUpdateBuildpackCommand}}' 来更新此buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "获取一个应用程序尾部信息或最近的日志", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "已选择组织 {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "已选择空间 {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "其中buildpack buildpacks位置", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "路由 {{.URL}} 已被占用\n小贴士: 请使用-n HOSTNAME 命令行改变主机名称,或使用--random-route命令生成一个新路由,然后重新使用push命令", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "这个程序没有正在运行的实例", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "内容太多,无法显示,请输入名称", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "此服务不支持创建密钥。", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "这将导致应用程序重新启动。您确定要伸缩{{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "异步HTTP请求超时", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memory", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Total number of routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Total number of service instances", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "跟踪HTTP请求", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "配置文件中没有UAA API地址信息", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "用法:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "用户管理员", - "modified": false - }, - { - "id": "USERS", - "translation": "用户", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "无法访问空间{{.SpaceName}},\n错误: {{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "无法验证.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Unable to delete, route '{{.URL}}' does not exist.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "从一个应用程序解绑一个服务实例", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在将应用程序{{.AppName}}从属于组织{{.OrgName}}/空间{{.SpaceName}}的服务{{.ServiceName}}上解绑...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "解锁buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "更新buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Update a service broker", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Update an existing resource quota", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "更新用户提供的服务实例名称值对", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "作为用户{{.Username}}更新组织{{.OrgName}}/空间{{.SpaceName}}中的应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "更新buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Updating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "用户{{.CurrentUser}}正在更新属于组织{{.OrgName}}/空间{{.SpaceName}}的由用户提供的服务{{.ServiceName}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "上传应用程序文件,从: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "上传buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "上传应用程序{{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "上传{{.ZipFileBytes}}, {{.FileCount}}文件", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "使用'{{.Name}}'来查看或设置你选择的组织和空间", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "使用一次性密码登录", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "用户{{.TargetUser}}不存在.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "用户提供的:", - "modified": false - }, - { - "id": "User:", - "translation": "用户:", - "modified": false - }, - { - "id": "Username", - "translation": "用户名", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "使用配置文件{{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "使用路由 {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "使用堆栈{{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "版本:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "校验密码", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "警告:\n 强烈建议不要在命令行参数里指定密码,\n 以防他人读取或通过命令历史记录查找到密码\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "警告: 此操作认为Service Broker所负责这项服务已经不再可用,所有服务实例已被删除,并且已经在Cloud Foundry的数据库中留下了孤儿记录。该操作执行后Cloud Foundry中所有有关该服务的信息都将被删除,包括服务实例和服务绑定。该操作不会尝试通知Service Brocker;所以在不删除Service Brocker的情况下运行此命令将会遗留孤儿服务实例。故运行此命令后,建议您执行delete-service-auth-token或者delete-service-broker来完成这次清理工作.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": " 警告:这是一个Cloud Foundry内部操作;Service Broker不会被通知,服务实例所分配的资源也不会被改变。此项操作的主要适用场景是通过将服务实例从v1服务计划映射到v2服务计划,来将对应的v1 API的Service Broker替换为v2版本。我们建议您关闭v1的Service Brocker并设置v1的服务计划为私有,以防止后续操作创建额外的实例。一旦服务已经迁移完成,就可以从Cloud Foundry中删除v1的服务和服务计划。", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "警告: 检测到不安全的HTTP APT终端,建议使用HTTP安全版 API终端\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "警告: 获取日志出错", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "压缩文档中没有buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA 数据内容隐藏]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[私有数据隐藏]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[环境变量]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[全局选项] 命令 [参数...] [命令选项]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "执行者", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "允许", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "应用程序", - "modified": false - }, - { - "id": "app crashed", - "translation": "应用程序崩溃", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "身份验证请求失败", - "modified": false - }, - { - "id": "bound apps", - "translation": "已绑定的应用", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "CPU内核", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "崩溃", - "modified": false - }, - { - "id": "description", - "translation": "描述", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "禁止", - "modified": false - }, - { - "id": "disk", - "translation": "磁盘", - "modified": false - }, - { - "id": "disk:", - "translation": "磁盘:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "domain", - "modified": false - }, - { - "id": "domains:", - "translation": "域:", - "modified": true - }, - { - "id": "down", - "translation": "没在运行", - "modified": false - }, - { - "id": "enabled", - "translation": "已启用", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "环境变量'{{.PropertyName}}'不能为空", - "modified": false - }, - { - "id": "event", - "translation": "事件", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "没有关闭输入显示,你的密码将被显示:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "文件名", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "不正确的使用", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "实例: {{.InstanceIndex}}, 原因: {{.ExitDescription}}, 退出状态/返回码: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "实例", - "modified": false - }, - { - "id": "instances:", - "translation": "实例:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "清单中无效继承路径", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "无效的环境变量值CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "无效的环境变量值CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "锁定", - "modified": false - }, - { - "id": "memory", - "translation": "内存", - "modified": false - }, - { - "id": "memory:", - "translation": "内存:", - "modified": false - }, - { - "id": "name", - "translation": "名称", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "请求的主机名无效", - "modified": false - }, - { - "id": "org", - "translation": "组织", - "modified": false - }, - { - "id": "organization", - "translation": "组织", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "owned", - "modified": false - }, - { - "id": "paid service plans", - "translation": "paid service plans", - "modified": false - }, - { - "id": "plan", - "translation": "服务计划", - "modified": false - }, - { - "id": "plans", - "translation": "服务计划", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "位置", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "配额:", - "modified": true - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "请求状态", - "modified": false - }, - { - "id": "requested state:", - "translation": "请求状态:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "运行", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "服务", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "服务实例", - "modified": false - }, - { - "id": "service instances", - "translation": "service instances", - "modified": false - }, - { - "id": "service key", - "translation": "服务密钥", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "shared", - "modified": false - }, - { - "id": "since", - "translation": "从", - "modified": false - }, - { - "id": "space", - "translation": "空间", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "空间:", - "modified": true - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "启动中", - "modified": false - }, - { - "id": "state", - "translation": "状态", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "已停止", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "一次重定位后停止", - "modified": false - }, - { - "id": "time", - "translation": "时间", - "modified": false - }, - { - "id": "total memory limit", - "translation": "memory limit", - "modified": true - }, - { - "id": "unknown authority", - "translation": "未知的认证", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "网址", - "modified": false - }, - { - "id": "urls:", - "translation": "网址:", - "modified": false - }, - { - "id": "usage:", - "translation": "用法:", - "modified": false - }, - { - "id": "user", - "translation": "用户", - "modified": false - }, - { - "id": "user-provided", - "translation": "由用户提供的", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "在配置文件中写入默认配置", - "modified": false - }, - { - "id": "yes", - "translation": "是的", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (API 版本: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [命令]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} 迁移.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskQuota}}中的{{.DiskUsage}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} 失效", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\n小贴士: 使用'{{.CFServicesCommand}}'来查看这个组织和空间里的所有服务。", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\n小贴士: 使用'{{.Command}}'的更多信息", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} 失败", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemQuota}}中的{{.MemUsage}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} 已存在", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} 必须是一个字符串或空值", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} 必须是一个字符串值", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} 不能为空", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M 内存限制, {{.RoutesLimit}} 路由, {{.ServicesLimit}} 服务, 有偿服务 {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.TotalCount}}中的{{.RunningCount}}个实例正在运行", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}}正在启动", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} 乘以 {{.InstanceCount}}实例数", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/zh_Hant.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/zh_Hant.all.json deleted file mode 100644 index c54f025..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/resources/zh_Hant.all.json +++ /dev/null @@ -1,5372 +0,0 @@ -[ - { - "id": "\n\nTIP:\n", - "translation": "\n\nTIP:\n", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "\n\nYour JSON string syntax is invalid. Proper syntax is this: cf set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "\n* These service plans have an associated cost. Creating a service instance will incur this cost.", - "translation": "* The denoted service plans have specific costs associated with them. If a service instance of this type is created, a cost will be incurred.", - "modified": true - }, - { - "id": "\nApp started\n", - "translation": "\nApp started\n", - "modified": false - }, - { - "id": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "translation": "\nApp {{.AppName}} was started using this command `{{.Command}}`\n", - "modified": false - }, - { - "id": "\nNo api endpoint set.", - "translation": "\nNo api endpoint set.", - "modified": false - }, - { - "id": "\nRoute to be unmapped is not currently mapped to the application.", - "translation": "\nRoute to be unmapped is not currently mapped to the application.", - "modified": false - }, - { - "id": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "translation": "\nTIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.", - "modified": false - }, - { - "id": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "translation": "\nTIP: Assign roles with '{{.CurrentUser}} set-org-role' and '{{.CurrentUser}} set-space-role'", - "modified": false - }, - { - "id": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "translation": "\nTIP: Use '{{.CFTargetCommand}}' to target new space", - "modified": false - }, - { - "id": "\nTIP: Use '{{.Command}}' to target new org", - "translation": "\nTIP: Use '{{.Command}}' to target new org", - "modified": false - }, - { - "id": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "translation": "\nTIP: use 'cf login -a API --skip-ssl-validation' or 'cf api API --skip-ssl-validation' to suppress this error", - "modified": false - }, - { - "id": " BillingManager - Create and manage the billing account and payment info\n", - "translation": " BillingManager - Create and manage the billing account and payment info\n", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "translation": " CF_NAME auth name@example.com \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": false - }, - { - "id": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME auth name@example.com \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "translation": " CF_NAME copy-source SOURCE-APP TARGET-APP [-o TARGET-ORG] [-s TARGET-SPACE] [--no-restart]\n", - "modified": false - }, - { - "id": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "translation": " CF_NAME login (omit username and password to login interactively -- CF_NAME will prompt for both)\n", - "modified": false - }, - { - "id": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "translation": " CF_NAME login --sso (CF_NAME will provide a url to obtain a one-time password to login)", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)\n", - "translation": " CF_NAME login -u name@example.com -p \"\\\"password\\\"\" (escape quotes if used in password)", - "modified": true - }, - { - "id": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "translation": " CF_NAME login -u name@example.com -p \"my password\" (use quotes for passwords with a space)\n", - "modified": false - }, - { - "id": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "translation": " CF_NAME login -u name@example.com -p pa55woRD (specify username and password as arguments)\n", - "modified": false - }, - { - "id": " CF_NAME push APP_NAME [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push APP [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFEST_PATH]\n", - "modified": true - }, - { - "id": " CF_NAME push [-f MANIFEST_PATH]\n", - "translation": " CF_NAME push [-f MANIFEST_PATH]\n", - "modified": false - }, - { - "id": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "translation": " Optionally provide a list of comma-delimited tags that will be written to the VCAP_SERVICES environment variable for any bound applications.", - "modified": false - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": "\u0009Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME update-service -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME update-service -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n\u0009 }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. \n The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME bind-service APP_NAME SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": true - }, - { - "id": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "translation": " Optionally provide service-specific configuration parameters in a valid JSON object in-line:\n\n CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object.\n The path to the parameters file can be an absolute or relative path to a file:\n\n CF_NAME create-service SERVICE_INSTANCE -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"cluster_nodes\": {\n \"count\": 5,\n \"memory_mb\": 1024\n }\n }", - "modified": false - }, - { - "id": " OrgAuditor - Read-only access to org info and reports\n", - "translation": " OrgAuditor - Read-only access to org info and reports\n", - "modified": false - }, - { - "id": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "translation": " OrgManager - Invite and manage users, select and change plans, and set spending limits\n", - "modified": false - }, - { - "id": " Path should be a zip file, a url to a zip file, or a local directory. Position is a positive integer, sets priority, and is sorted from lowest to highest.", - "translation": " Path should be a zip file, a url to a zip file, or a local directory. Position is an integer, sets priority, and is sorted from lowest to highest.", - "modified": true - }, - { - "id": " Push multiple apps with a manifest:\n", - "translation": " Push multiple apps with a manifest:\n", - "modified": false - }, - { - "id": " SpaceAuditor - View logs, reports, and settings on this space\n", - "translation": " SpaceAuditor - View logs, reports, and settings on this space\n", - "modified": false - }, - { - "id": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "translation": " SpaceDeveloper - Create and manage apps and services, and see logs and reports\n", - "modified": false - }, - { - "id": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "translation": " SpaceManager - Invite and manage users, and enable features for a given space\n", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "translation": " The provided path can be an absolute or relative path to a file.\n It should have a single array with JSON objects inside describing the rules.", - "modified": false - }, - { - "id": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "translation": " The provided path can be an absolute or relative path to a file. The file should have\n a single array with JSON objects inside describing the rules. The JSON Base Object is \n omitted and only the square brackets and associated child object are required in the file. \n\n Valid json file example:\n [\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n ]", - "modified": false - }, - { - "id": " View allowable quotas with 'CF_NAME quotas'", - "translation": " View allowable quotas with 'CF_NAME quotas'", - "modified": false - }, - { - "id": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "translation": " [-i NUM_INSTANCES] [-k DISK] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT]\n", - "modified": false - }, - { - "id": " added as '", - "translation": " added as '", - "modified": false - }, - { - "id": " does not exist as a repo", - "translation": " does not exist as a repo", - "modified": false - }, - { - "id": " is already started", - "translation": " is already started", - "modified": false - }, - { - "id": " is already stopped", - "translation": " is already stopped", - "modified": false - }, - { - "id": " is empty", - "translation": " is empty", - "modified": false - }, - { - "id": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "translation": " is not a valid url, please provide a url, e.g. http://your_repo.com", - "modified": false - }, - { - "id": " is not available in repo '", - "translation": " is not available in repo '", - "modified": false - }, - { - "id": " is not responding. Please make sure it is a valid plugin repo.", - "translation": " is not responding. Please make sure it is a valid plugin repo.", - "modified": false - }, - { - "id": " not found", - "translation": " not found", - "modified": false - }, - { - "id": " removed from list of repositories", - "translation": " removed from list of repositories", - "modified": false - }, - { - "id": "\"Plugins\" object not found in the responded data.", - "translation": "\"Plugins\" object not found in the responded data.", - "modified": false - }, - { - "id": ") already exists.", - "translation": ") already exists.", - "modified": false - }, - { - "id": "A command line tool to interact with Cloud Foundry", - "translation": "A command line tool to interact with Cloud Foundry", - "modified": false - }, - { - "id": "ADD/REMOVE PLUGIN", - "translation": "PLUGIN", - "modified": true - }, - { - "id": "ADD/REMOVE PLUGIN REPOSITORY", - "translation": "ADD/REMOVE PLUGIN REPOSITORY", - "modified": false - }, - { - "id": "ADVANCED", - "translation": "ADVANCED", - "modified": false - }, - { - "id": "ALIAS", - "translation": "ALIAS", - "modified": false - }, - { - "id": "API endpoint", - "translation": "API endpoint", - "modified": false - }, - { - "id": "API endpoint (e.g. https://api.example.com)", - "translation": "API endpoint (e.g. https://api.example.com)", - "modified": false - }, - { - "id": "API endpoint:", - "translation": "API endpoint:", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}}", - "translation": "API endpoint: {{.ApiEndpoint}}", - "modified": false - }, - { - "id": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "translation": "API endpoint: {{.ApiEndpoint}} (API version: {{.ApiVersion}})", - "modified": false - }, - { - "id": "API endpoint: {{.Endpoint}}", - "translation": "API endpoint: {{.Endpoint}}", - "modified": false - }, - { - "id": "APPS", - "translation": "APPS", - "modified": false - }, - { - "id": "Acquiring running security groups as '{{.username}}'", - "translation": "Acquiring running security groups as '{{.username}}'", - "modified": false - }, - { - "id": "Acquiring staging security group as {{.username}}", - "translation": "Acquiring staging security group as {{.username}}", - "modified": false - }, - { - "id": "Add a new plugin repository", - "translation": "Add a new plugin repository", - "modified": false - }, - { - "id": "Add a url route to an app", - "translation": "Add a url route to an app", - "modified": false - }, - { - "id": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Alias `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": false - }, - { - "id": "Alias `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`Alias {{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "All plans of the service are already accessible for all orgs", - "translation": "All plans of the service are already accessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already accessible for this org", - "translation": "All plans of the service are already accessible for the org", - "modified": true - }, - { - "id": "All plans of the service are already inaccessible for all orgs", - "translation": "All plans of the service are already inaccessible for all orgs", - "modified": false - }, - { - "id": "All plans of the service are already inaccessible for this org", - "translation": "All plans of the service are already inaccessible for the org", - "modified": true - }, - { - "id": "Also delete any mapped routes", - "translation": "Also delete any mapped routes", - "modified": false - }, - { - "id": "An org must be targeted before targeting a space", - "translation": "An org must be targeted before targeting a space", - "modified": false - }, - { - "id": "App ", - "translation": "App ", - "modified": false - }, - { - "id": "App name is a required field", - "translation": "App name is a required field", - "modified": false - }, - { - "id": "App {{.AppName}} does not exist.", - "translation": "App {{.AppName}} does not exist.", - "modified": false - }, - { - "id": "App {{.AppName}} is a worker, skipping route creation", - "translation": "App {{.AppName}} is a worker, skipping route creation", - "modified": false - }, - { - "id": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "translation": "App {{.AppName}} is already bound to {{.ServiceName}}.", - "modified": false - }, - { - "id": "Append API request diagnostics to a log file", - "translation": "Append API request diagnostics to a log file", - "modified": false - }, - { - "id": "Apps:", - "translation": "Apps:", - "modified": false - }, - { - "id": "Assign a quota to an org", - "translation": "Assign a quota to an org", - "modified": false - }, - { - "id": "Assign a space quota definition to a space", - "translation": "Assign a space quota definition to a space", - "modified": false - }, - { - "id": "Assign a space role to a user", - "translation": "Assign a space role to a user", - "modified": false - }, - { - "id": "Assign an org role to a user", - "translation": "Assign an org role to a user", - "modified": false - }, - { - "id": "Assigned Value", - "translation": "Assigned Value", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Assigning role {{.Role}} to user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "translation": "Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", - "modified": false - }, - { - "id": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "translation": "Assigning space quota {{.QuotaName}} to space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Attempting to download binary file from internet address...", - "translation": "Attempting to download binary file from internet address...", - "modified": false - }, - { - "id": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "translation": "Attempting to migrate {{.ServiceInstanceDescription}}...", - "modified": false - }, - { - "id": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "translation": "Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", - "modified": false - }, - { - "id": "Authenticate user non-interactively", - "translation": "Authenticate user non-interactively", - "modified": false - }, - { - "id": "Authenticating...", - "translation": "Authenticating...", - "modified": false - }, - { - "id": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "translation": "Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a \u003cendpoint\u003e -u \u003cuser\u003e -o \u003corg\u003e -s \u003cspace\u003e` to log back in and re-authenticate.", - "modified": false - }, - { - "id": "BILLING MANAGER", - "translation": "BILLING MANAGER", - "modified": false - }, - { - "id": "BUILD TIME:", - "translation": "BUILD TIME:", - "modified": false - }, - { - "id": "BUILDPACKS", - "translation": "BUILDPACKS", - "modified": false - }, - { - "id": "Bind a security group to a space", - "translation": "Bind a security group to a space", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for running applications", - "translation": "Bind a security group to the list of security groups to be used for running applications", - "modified": false - }, - { - "id": "Bind a security group to the list of security groups to be used for staging applications", - "translation": "Bind a security group to the list of security groups to be used for staging applications", - "modified": false - }, - { - "id": "Bind a service instance to an app", - "translation": "Bind a service instance to an app", - "modified": false - }, - { - "id": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "translation": "Binding between {{.InstanceName}} and {{.AppName}} did not exist", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "translation": "Binding security group {{.security_group}} to defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Binding security group {{.security_group}} to staging as {{.username}}", - "translation": "Binding security group {{.security_group}} to staging as {{.username}}", - "modified": false - }, - { - "id": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Binding service {{.ServiceInstanceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Binding service {{.ServiceName}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Binding {{.URL}} to {{.AppName}}...", - "translation": "Binding {{.URL}} to {{.AppName}}...", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} already exists", - "translation": "Buildpack {{.BuildpackName}} already exists", - "modified": false - }, - { - "id": "Buildpack {{.BuildpackName}} does not exist.", - "translation": "Buildpack {{.BuildpackName}} does not exist.", - "modified": false - }, - { - "id": "Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB", - "translation": "Byte quantity must be a positive integer with a unit of measurement like M, MB, G, or GB", - "modified": true - }, - { - "id": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "translation": "CF_NAME add-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf add-plugin-repo PrivateRepo http://myprivaterepo.com/repo/\n", - "modified": false - }, - { - "id": "CF_NAME api [URL]", - "translation": "CF_NAME api [URL]", - "modified": false - }, - { - "id": "CF_NAME app APP_NAME", - "translation": "CF_NAME app APP", - "modified": true - }, - { - "id": "CF_NAME auth USERNAME PASSWORD\n\n", - "translation": "CF_NAME auth USERNAME PASSWORD\n\n", - "modified": false - }, - { - "id": "CF_NAME bind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME bind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "translation": "CF_NAME bind-service APP_NAME SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]", - "modified": false - }, - { - "id": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME bind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME buildpacks", - "translation": "CF_NAME buildpacks", - "modified": false - }, - { - "id": "CF_NAME check-route HOST DOMAIN", - "translation": "CF_NAME check-route HOST DOMAIN", - "modified": false - }, - { - "id": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false] [--locale (LOCALE | CLEAR)]", - "translation": "CF_NAME config [--async-timeout TIMEOUT_IN_MINUTES] [--trace true | false | path/to/file] [--color true | false]", - "modified": true - }, - { - "id": "CF_NAME create-app-manifest APP [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "translation": "CF_NAME create-app-manifest [-p /path/to/\u003capp-name\u003e-manifest.yml ]", - "modified": true - }, - { - "id": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "translation": "CF_NAME create-buildpack BUILDPACK PATH POSITION [--enable|--disable]", - "modified": false - }, - { - "id": "CF_NAME create-domain ORG DOMAIN", - "translation": "CF_NAME create-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-org ORG", - "translation": "CF_NAME create-org ORG", - "modified": false - }, - { - "id": "CF_NAME create-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-quota QUOTA [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]", - "modified": false - }, - { - "id": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME create-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME create-service SERVICE PLAN SERVICE_INSTANCE [-c PARAMETERS_AS_JSON] [-t TAGS]", - "modified": false - }, - { - "id": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME create-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": false - }, - { - "id": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "translation": "CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]\n\n Optionally provide service-specific configuration parameters in a valid JSON object in-line.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{\"name\":\"value\",\"name\":\"value\"}'\n\n Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file.\n CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE\n\n Example of valid JSON object:\n {\n \"permissions\": \"read-only\"\n }\n\nEXAMPLE:\n CF_NAME create-service-key mydb mykey -c '{\"permissions\":\"read-only\"}'\n CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "CF_NAME create-shared-domain DOMAIN", - "translation": "CF_NAME create-shared-domain DOMAIN", - "modified": false - }, - { - "id": "CF_NAME create-space SPACE [-o ORG] [-q SPACE-QUOTA]", - "translation": "CF_NAME create-space SPACE [-o ORG]", - "modified": true - }, - { - "id": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "translation": "CF_NAME create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]", - "modified": false - }, - { - "id": "CF_NAME create-user USERNAME PASSWORD", - "translation": "CF_NAME create-user USERNAME PASSWORD", - "modified": false - }, - { - "id": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE \n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'\n", - "translation": "CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"name\":\"value\",\"name\":\"value\"}'\n\nEXAMPLE:\n CF_NAME create-user-provided-service oracle-db-mine -p \"username, password\"\n CF_NAME create-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n", - "modified": true - }, - { - "id": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "translation": "CF_NAME curl PATH [-iv] [-X METHOD] [-H HEADER] [-d DATA] [--output FILE]", - "modified": false - }, - { - "id": "CF_NAME delete APP_NAME [-f -r]", - "translation": "CF_NAME delete APP [-f -r]", - "modified": true - }, - { - "id": "CF_NAME delete-buildpack BUILDPACK [-f]", - "translation": "CF_NAME delete-buildpack BUILDPACK [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-domain DOMAIN [-f]", - "translation": "CF_NAME delete-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-org ORG [-f]", - "translation": "CF_NAME delete-org ORG [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-orphaned-routes [-f]", - "translation": "CF_NAME delete-orphaned-routes [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-quota QUOTA [-f]", - "translation": "CF_NAME delete-quota QUOTA [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "translation": "CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "translation": "CF_NAME delete-security-group SECURITY_GROUP [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "translation": "CF_NAME delete-service SERVICE_INSTANCE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "translation": "CF_NAME delete-service-auth-token LABEL PROVIDER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "translation": "CF_NAME delete-service-broker SERVICE_BROKER [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "translation": "CF_NAME delete-service-key SERVICE_INSTANCE SERVICE_KEY [-f]\n\nEXAMPLE:\n CF_NAME delete-service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME delete-shared-domain DOMAIN [-f]", - "translation": "CF_NAME delete-shared-domain DOMAIN [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space SPACE [-f]", - "translation": "CF_NAME delete-space SPACE [-f]", - "modified": false - }, - { - "id": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "translation": "CF_NAME delete-space-quota SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME delete-user USERNAME [-f]", - "translation": "CF_NAME delete-user USERNAME [-f]", - "modified": false - }, - { - "id": "CF_NAME disable-feature-flag FEATURE_NAME", - "translation": "CF_NAME disable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME enable-feature-flag FEATURE_NAME", - "translation": "CF_NAME enable-feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME env APP_NAME", - "translation": "CF_NAME env APP", - "modified": true - }, - { - "id": "CF_NAME events APP_NAME", - "translation": "CF_NAME events APP", - "modified": true - }, - { - "id": "CF_NAME feature-flag FEATURE_NAME", - "translation": "CF_NAME feature-flag FEATURE_NAME", - "modified": false - }, - { - "id": "CF_NAME feature-flags", - "translation": "CF_NAME feature-flags", - "modified": false - }, - { - "id": "CF_NAME files APP_NAME [PATH] [-i INSTANCE]", - "translation": "CF_NAME files APP [PATH]", - "modified": true - }, - { - "id": "CF_NAME install-plugin URL or LOCAL-PATH/TO/PLUGIN [-r REPO_NAME]\n\nThe command will download the plugin binary from repository if '-r' is provided\n\nEXAMPLE:\n cf install-plugin https://github.com/cf-experimental/plugin-foobar\n cf install-plugin ~/Downloads/plugin-foobar\n cf install-plugin plugin-echo -r My-Repo \n", - "translation": "CF_NAME install-plugin PATH/TO/PLUGIN", - "modified": true - }, - { - "id": "CF_NAME list-plugin-repos", - "translation": "CF_NAME list-plugin-repo", - "modified": true - }, - { - "id": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "translation": "CF_NAME login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]\n\n", - "modified": false - }, - { - "id": "CF_NAME logout", - "translation": "CF_NAME logout", - "modified": false - }, - { - "id": "CF_NAME logs APP_NAME", - "translation": "CF_NAME logs APP", - "modified": true - }, - { - "id": "CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME map-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "translation": "CF_NAME migrate-service-instances v1_SERVICE v1_PROVIDER v1_PLAN v2_SERVICE v2_PLAN\n\n", - "modified": false - }, - { - "id": "CF_NAME oauth-token", - "translation": "CF_NAME oauth-token", - "modified": false - }, - { - "id": "CF_NAME org ORG", - "translation": "CF_NAME org ORG", - "modified": false - }, - { - "id": "CF_NAME org-users ORG", - "translation": "CF_NAME org-users ORG", - "modified": false - }, - { - "id": "CF_NAME passwd", - "translation": "CF_NAME passwd", - "modified": false - }, - { - "id": "CF_NAME plugins", - "translation": "CF_NAME plugins", - "modified": false - }, - { - "id": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "translation": "CF_NAME purge-service-offering SERVICE [-p PROVIDER]", - "modified": false - }, - { - "id": "CF_NAME quota QUOTA", - "translation": "CF_NAME quota QUOTA", - "modified": false - }, - { - "id": "CF_NAME quotas", - "translation": "CF_NAME quotas", - "modified": false - }, - { - "id": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "translation": "CF_NAME remove-plugin-repo [REPO_NAME] [URL]\n\nEXAMPLE:\n cf remove-plugin-repo PrivateRepo\n", - "modified": false - }, - { - "id": "CF_NAME rename APP_NAME NEW_APP_NAME", - "translation": "CF_NAME rename APP_NAME NEW_APP_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "translation": "CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME", - "modified": false - }, - { - "id": "CF_NAME rename-org ORG NEW_ORG", - "translation": "CF_NAME rename-org ORG NEW_ORG", - "modified": false - }, - { - "id": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "translation": "CF_NAME rename-service SERVICE_INSTANCE NEW_SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "translation": "CF_NAME rename-service-broker SERVICE_BROKER NEW_SERVICE_BROKER", - "modified": false - }, - { - "id": "CF_NAME rename-space SPACE NEW_SPACE", - "translation": "CF_NAME rename-space SPACE NEW_SPACE", - "modified": false - }, - { - "id": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins [-r REPO_NAME]\n", - "translation": "CF_NAME repo-plugins\n\nEXAMPLE:\n cf repo-plugins\n", - "modified": true - }, - { - "id": "CF_NAME restage APP_NAME", - "translation": "CF_NAME restage APP", - "modified": true - }, - { - "id": "CF_NAME restart APP_NAME", - "translation": "CF_NAME restart APP", - "modified": true - }, - { - "id": "CF_NAME restart-app-instance APP_NAME INDEX", - "translation": "CF_NAME restart-app-instance APP INDEX", - "modified": true - }, - { - "id": "CF_NAME running-environment-variable-group", - "translation": "cf running-environment-variable-group", - "modified": true - }, - { - "id": "CF_NAME scale APP_NAME [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "translation": "CF_NAME scale APP [-i INSTANCES] [-k DISK] [-m MEMORY] [-f]", - "modified": true - }, - { - "id": "CF_NAME security-group SECURITY_GROUP", - "translation": "CF_NAME security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME service SERVICE_INSTANCE", - "translation": "CF_NAME service SERVICE_INSTANCE", - "modified": false - }, - { - "id": "CF_NAME service-auth-tokens", - "translation": "CF_NAME service-auth-tokens", - "modified": false - }, - { - "id": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "translation": "CF_NAME service-key SERVICE_INSTANCE SERVICE_KEY\n\nEXAMPLE:\n CF_NAME service-key mydb mykey", - "modified": false - }, - { - "id": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "translation": "CF_NAME service-keys SERVICE_INSTANCE\n\nEXAMPLE:\n CF_NAME service-keys mydb", - "modified": false - }, - { - "id": "CF_NAME set-env APP_NAME ENV_VAR_NAME ENV_VAR_VALUE", - "translation": "CF_NAME set-env APP NAME VALUE", - "modified": true - }, - { - "id": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME set-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-quota ORG QUOTA\n\n", - "translation": "CF_NAME set-quota ORG QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-running-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "translation": "CF_NAME set-space-quota SPACE-NAME SPACE-QUOTA-NAME", - "modified": false - }, - { - "id": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME set-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "translation": "CF_NAME set-staging-environment-variable-group '{\"name\":\"value\",\"name\":\"value\"}'", - "modified": false - }, - { - "id": "CF_NAME share-private-domain ORG DOMAIN", - "translation": "CF_NAME share-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME space SPACE", - "translation": "CF_NAME space SPACE", - "modified": false - }, - { - "id": "CF_NAME space-quota SPACE_QUOTA_NAME", - "translation": "CF_NAME space-quota SPACE_QUOTA_NAME", - "modified": false - }, - { - "id": "CF_NAME space-quotas", - "translation": "CF_NAME space-quotas", - "modified": false - }, - { - "id": "CF_NAME space-users ORG SPACE", - "translation": "CF_NAME space-users ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME spaces", - "translation": "CF_NAME spaces", - "modified": false - }, - { - "id": "CF_NAME stack STACK_NAME", - "translation": "CF_NAME stack STACK_NAME", - "modified": false - }, - { - "id": "CF_NAME stacks", - "translation": "CF_NAME stacks", - "modified": false - }, - { - "id": "CF_NAME staging-environment-variable-group", - "translation": "CF_NAME staging-environment-variable-group", - "modified": false - }, - { - "id": "CF_NAME start APP_NAME", - "translation": "CF_NAME start APP", - "modified": true - }, - { - "id": "CF_NAME stop APP_NAME", - "translation": "CF_NAME stop APP", - "modified": true - }, - { - "id": "CF_NAME target [-o ORG] [-s SPACE]", - "translation": "CF_NAME target [-o ORG] [-s SPACE]", - "modified": false - }, - { - "id": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-running-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "translation": "CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE", - "modified": false - }, - { - "id": "CF_NAME unbind-service APP_NAME SERVICE_INSTANCE", - "translation": "CF_NAME unbind-service APP SERVICE_INSTANCE", - "modified": true - }, - { - "id": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "translation": "CF_NAME unbind-staging-security-group SECURITY_GROUP", - "modified": false - }, - { - "id": "CF_NAME uninstall-plugin PLUGIN-NAME", - "translation": "CF_NAME uninstall-plugin PLUGIN-NAME", - "modified": false - }, - { - "id": "CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]", - "translation": "CF_NAME unmap-route APP DOMAIN [-n HOSTNAME]", - "modified": true - }, - { - "id": "CF_NAME unset-env APP_NAME ENV_VAR_NAME", - "translation": "CF_NAME unset-env APP NAME", - "modified": true - }, - { - "id": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "translation": "CF_NAME unset-org-role USERNAME ORG ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "translation": "CF_NAME unset-space-quota SPACE QUOTA\n\n", - "modified": false - }, - { - "id": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "translation": "CF_NAME unset-space-role USERNAME ORG SPACE ROLE\n\n", - "modified": false - }, - { - "id": "CF_NAME unshare-private-domain ORG DOMAIN", - "translation": "CF_NAME unshare-private-domain ORG DOMAIN", - "modified": false - }, - { - "id": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "translation": "CF_NAME update-buildpack BUILDPACK [-p PATH] [-i POSITION] [--enable|--disable] [--lock|--unlock]", - "modified": false - }, - { - "id": "CF_NAME update-quota QUOTA [-m TOTAL_MEMORY] [-i INSTANCE_MEMORY][-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-quota QUOTA [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "modified": true - }, - { - "id": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "translation": "CF_NAME update-security-group SECURITY_GROUP PATH_TO_JSON_RULES_FILE", - "modified": false - }, - { - "id": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS]", - "translation": "CF_NAME update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON]", - "modified": true - }, - { - "id": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "translation": "CF_NAME update-service-auth-token LABEL PROVIDER TOKEN", - "modified": false - }, - { - "id": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "translation": "CF_NAME update-service-broker SERVICE_BROKER USERNAME PASSWORD URL", - "modified": true - }, - { - "id": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-paid-service-plans | --disallow-paid-service-plans]", - "translation": "CF_NAME update-space-quota SPACE-QUOTA-NAME [-i MAX-INSTANCE-MEMORY] [-m MEMORY] [-n NEW_NAME] [-r ROUTES] [-s SERVICES] [--allow-non-basic-services | --disallow-non-basic-services]", - "modified": true - }, - { - "id": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "translation": "CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'\n\nEXAMPLE:\n CF_NAME update-user-provided-service oracle-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com", - "modified": true - }, - { - "id": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "translation": "CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - "modified": false - }, - { - "id": "Can not provision instances of paid service plans", - "translation": "Can not provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans", - "translation": "Can provision instances of paid service plans", - "modified": false - }, - { - "id": "Can provision instances of paid service plans (Default: disallowed)", - "translation": "Can provision instances of paid service plans (Default: disallowed)", - "modified": false - }, - { - "id": "Cannot delete service instance, service keys and bindings must first be deleted", - "translation": "Cannot delete service instance, service keys and bindings must first be deleted", - "modified": false - }, - { - "id": "Cannot list marketplace services without a targeted space", - "translation": "Cannot list marketplace services without a targeted space", - "modified": false - }, - { - "id": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "translation": "Cannot list plan information for {{.ServiceName}} without a targeted space", - "modified": false - }, - { - "id": "Cannot provision instances of paid service plans", - "translation": "Cannot provision instances of paid service plans", - "modified": false - }, - { - "id": "Cannot specify both lock and unlock options.", - "translation": "Cannot specify both lock and unlock options.", - "modified": false - }, - { - "id": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "translation": "Cannot specify both {{.Enabled}} and {{.Disabled}}.", - "modified": false - }, - { - "id": "Cannot specify buildpack bits and lock/unlock.", - "translation": "Cannot specify buildpack bits and lock/unlock.", - "modified": false - }, - { - "id": "Change or view the instance count, disk space limit, and memory limit for an app", - "translation": "Change or view the instance count, disk space limit, and memory limit for an app", - "modified": false - }, - { - "id": "Change service plan for a service instance", - "translation": "Change service plan for a service instance", - "modified": false - }, - { - "id": "Change user password", - "translation": "Change user password", - "modified": false - }, - { - "id": "Changing password...", - "translation": "Changing password...", - "modified": false - }, - { - "id": "Checking for route...", - "translation": "Checking for route...", - "modified": false - }, - { - "id": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "translation": "Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - "modified": true - }, - { - "id": "Command Help", - "translation": "Command Help", - "modified": false - }, - { - "id": "Command Name", - "translation": "Command name", - "modified": true - }, - { - "id": "Command `{{.Command}}` in the plugin being installed is a native CF command/alias. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "translation": "Command `{{.Command}}` in the plugin being installed is a native CF command. Rename the `{{.Command}}` command in the plugin being installed in order to enable its installation and use.", - "modified": true - }, - { - "id": "Command `{{.Command}}` is a command/alias in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "translation": "`{{.Command}}` is a command in plugin '{{.PluginName}}'. You could try uninstalling plugin '{{.PluginName}}' and then install this plugin in order to invoke the `{{.Command}}` command. However, you should first fully understand the impact of uninstalling the existing '{{.PluginName}}' plugin.", - "modified": true - }, - { - "id": "Command not found", - "translation": "Command not found", - "modified": false - }, - { - "id": "Compute and show the sha1 value of the plugin binary file", - "translation": "Compute and show the sha1 value of the plugin binary file", - "modified": false - }, - { - "id": "Computing sha1 for installed plugins, this may take a while ...", - "translation": "Computing sha1 for installed plugins, this may take a while ...", - "modified": false - }, - { - "id": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, dumping recent logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Connected, tailing logs for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Copying source from app {{.SourceApp}} to target app {{.TargetApp}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "translation": "Could not bind to service {{.ServiceName}}\nError: {{.Err}}", - "modified": false - }, - { - "id": "Could not copy plugin binary: \n{{.Error}}", - "translation": "Could not copy plugin binary: \n{{.Error}}", - "modified": false - }, - { - "id": "Could not determine the current working directory!", - "translation": "Could not determine the current working directory!", - "modified": false - }, - { - "id": "Could not find a default domain", - "translation": "Could not find a default domain", - "modified": false - }, - { - "id": "Could not find app named '{{.AppName}}' in manifest", - "translation": "Could not find app named '{{.AppName}}' in manifest", - "modified": false - }, - { - "id": "Could not find plan with name {{.ServicePlanName}}", - "translation": "Could not find plan with name {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "translation": "Could not find service {{.ServiceName}} to bind to {{.AppName}}", - "modified": false - }, - { - "id": "Could not find space {{.Space}} in organization {{.Org}}", - "translation": "Could not find space {{.Space}} in organization {{.Org}}", - "modified": false - }, - { - "id": "Could not parse version number: {{.Input}}", - "translation": "Could not parse version number: {{.Input}}", - "modified": false - }, - { - "id": "Could not serialize information", - "translation": "Could not serialize information", - "modified": false - }, - { - "id": "Could not serialize updates.", - "translation": "Could not serialize updates.", - "modified": false - }, - { - "id": "Could not target org.\n{{.ApiErr}}", - "translation": "Could not target org.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Couldn't create temp file for upload", - "translation": "Couldn't create temp file for upload", - "modified": false - }, - { - "id": "Couldn't open buildpack file", - "translation": "Couldn't open buildpack file", - "modified": false - }, - { - "id": "Couldn't write zip file", - "translation": "Couldn't write zip file", - "modified": false - }, - { - "id": "Create a buildpack", - "translation": "Create a buildpack", - "modified": false - }, - { - "id": "Create a domain in an org for later use", - "translation": "Create a domain in an org for later use", - "modified": false - }, - { - "id": "Create a domain that can be used by all orgs (admin-only)", - "translation": "Create a domain that can be used by all orgs (admin-only)", - "modified": false - }, - { - "id": "Create a new user", - "translation": "Create a new user", - "modified": false - }, - { - "id": "Create a random route for this app", - "translation": "Create a random route for this app", - "modified": false - }, - { - "id": "Create a security group", - "translation": "Create a security group", - "modified": false - }, - { - "id": "Create a service auth token", - "translation": "Create a service auth token", - "modified": false - }, - { - "id": "Create a service broker", - "translation": "Create a service broker", - "modified": false - }, - { - "id": "Create a service instance", - "translation": "Create a service instance", - "modified": false - }, - { - "id": "Create a space", - "translation": "Create a space", - "modified": false - }, - { - "id": "Create a url route in a space for later use", - "translation": "Create a url route in a space for later use", - "modified": false - }, - { - "id": "Create an app manifest for an app that has been pushed successfully.", - "translation": "Create an app manifest for an app that has been pushed successfully.", - "modified": false - }, - { - "id": "Create an org", - "translation": "Create an org", - "modified": false - }, - { - "id": "Create key for a service instance", - "translation": "Create key for a service instance", - "modified": false - }, - { - "id": "Creating an app manifest from current settings of app ", - "translation": "Creating an app manifest from current settings of app ", - "modified": false - }, - { - "id": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating buildpack {{.BuildpackName}}...", - "translation": "Creating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating domain {{.DomainName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating org {{.OrgName}} as {{.Username}}...", - "translation": "Creating org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating route {{.Hostname}}...", - "translation": "Creating route {{.Hostname}}...", - "modified": false - }, - { - "id": "Creating security group {{.security_group}} as {{.username}}", - "translation": "Creating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Creating service auth token as {{.CurrentUser}}...", - "translation": "Creating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service broker {{.Name}} as {{.Username}}...", - "translation": "Creating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "translation": "Creating shared domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Creating space quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Creating quota {{.QuotaName}} for org {{.OrgName}} as {{.Username}}...", - "modified": true - }, - { - "id": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Creating space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Creating user {{.TargetUser}}...", - "translation": "Creating user {{.TargetUser}}...", - "modified": false - }, - { - "id": "Credentials", - "translation": "Credentials", - "modified": false - }, - { - "id": "Credentials were rejected, please try again.", - "translation": "Credentials were rejected, please try again.", - "modified": false - }, - { - "id": "Current CF API version {{.ApiVersion}}", - "translation": "Current CF API version {{.ApiVersion}}", - "modified": false - }, - { - "id": "Current CF CLI version {{.Version}}", - "translation": "Current CF CLI version {{.Version}}", - "modified": false - }, - { - "id": "Current Password", - "translation": "Current Password", - "modified": false - }, - { - "id": "Current password did not match", - "translation": "Current password did not match", - "modified": false - }, - { - "id": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git') or GIT BRANCH URL (e.g. 'https://github.com/heroku/heroku-buildpack-play.git#develop' for 'develop' branch). Use built-in buildpacks only by setting value to 'null' or 'default'", - "translation": "Custom buildpack by name (e.g. my-buildpack) or GIT URL (e.g. https://github.com/heroku/heroku-buildpack-play.git)", - "modified": true - }, - { - "id": "Custom headers to include in the request, flag can be specified multiple times", - "translation": "Custom headers to include in the request, flag can be specified multiple times", - "modified": false - }, - { - "id": "DOMAINS", - "translation": "DOMAINS", - "modified": false - }, - { - "id": "Dashboard: {{.URL}}", - "translation": "Dashboard: {{.URL}}", - "modified": false - }, - { - "id": "Define a new resource quota", - "translation": "Define a new resource quota", - "modified": false - }, - { - "id": "Define a new space resource quota", - "translation": "Define a new space resource quota", - "modified": false - }, - { - "id": "Delete a buildpack", - "translation": "Delete a buildpack", - "modified": false - }, - { - "id": "Delete a domain", - "translation": "Delete a domain", - "modified": false - }, - { - "id": "Delete a quota", - "translation": "Delete a quota", - "modified": false - }, - { - "id": "Delete a route", - "translation": "Delete a route", - "modified": false - }, - { - "id": "Delete a service auth token", - "translation": "Delete a service auth token", - "modified": false - }, - { - "id": "Delete a service broker", - "translation": "Delete a service broker", - "modified": false - }, - { - "id": "Delete a service instance", - "translation": "Delete a service instance", - "modified": false - }, - { - "id": "Delete a service key", - "translation": "Delete a service key", - "modified": false - }, - { - "id": "Delete a shared domain", - "translation": "Delete a shared domain", - "modified": false - }, - { - "id": "Delete a space", - "translation": "Delete a space", - "modified": false - }, - { - "id": "Delete a space quota definition and unassign the space quota from all spaces", - "translation": " Delete a space quota definition and unassign the space quota from all spaces", - "modified": true - }, - { - "id": "Delete a user", - "translation": "Delete a user", - "modified": false - }, - { - "id": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "translation": "Delete all orphaned routes (e.g.: those that are not mapped to an app)", - "modified": false - }, - { - "id": "Delete an app", - "translation": "Delete an app", - "modified": false - }, - { - "id": "Delete an org", - "translation": "Delete an org", - "modified": false - }, - { - "id": "Delete cancelled", - "translation": "Delete cancelled", - "modified": false - }, - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting buildpack {{.BuildpackName}}...", - "translation": "Deleting buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Deleting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting org {{.OrgName}} as {{.Username}}...", - "translation": "Deleting org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting route {{.Route}}...", - "translation": "Deleting route {{.Route}}...", - "modified": false - }, - { - "id": "Deleting route {{.URL}}...", - "translation": "Deleting route {{.URL}}...", - "modified": false - }, - { - "id": "Deleting security group {{.security_group}} as {{.username}}", - "translation": "Deleting security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Deleting service auth token as {{.CurrentUser}}", - "translation": "Deleting service auth token as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Deleting service broker {{.Name}} as {{.Username}}...", - "translation": "Deleting service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Deleting service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "translation": "Deleting space quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "translation": "Deleting user {{.TargetUser}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Description: {{.ServiceDescription}}", - "translation": "Description: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Disable access for a specified organization", - "translation": "Disable access for a specified organization", - "modified": false - }, - { - "id": "Disable access to a service or service plan for one or all orgs", - "translation": "Disable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Disable access to a specified service plan", - "translation": "Disable access to a specified service plan", - "modified": false - }, - { - "id": "Disable the buildpack from being used for staging", - "translation": "Disable the buildpack", - "modified": true - }, - { - "id": "Disable the use of a feature so that users have access to and can use the feature.", - "translation": "Disable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Disabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for all orgs as {{.UserName}}...", - "modified": false - }, - { - "id": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Disabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Disk limit (e.g. 256M, 1024M, 1G)", - "translation": "Disk limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Display health and status for app", - "translation": "Display health and status for app", - "modified": false - }, - { - "id": "Do not colorize output", - "translation": "Do not colorize output", - "modified": false - }, - { - "id": "Do not map a route to this app and remove routes from previous pushes of this app.", - "translation": "Do not map a route to this app", - "modified": true - }, - { - "id": "Do not start an app after pushing", - "translation": "Do not start an app after pushing", - "modified": false - }, - { - "id": "Documentation url: {{.URL}}", - "translation": "Documentation url: {{.URL}}", - "modified": false - }, - { - "id": "Domain (e.g. example.com)", - "translation": "Domain (e.g. example.com)", - "modified": false - }, - { - "id": "Domains:", - "translation": "Domains:", - "modified": false - }, - { - "id": "Download attempt failed: {{.Error}}\n\nUnable to install, plugin is not available from the given url.", - "translation": "Download attempt failed: {{.Error}}\nUnable to install, plugin is not available from local/internet.", - "modified": true - }, - { - "id": "Downloaded plugin binary's checksum does not match repo metadata", - "translation": "Downloaded plugin binary's checksum does not match repo metadata", - "modified": false - }, - { - "id": "Dump recent logs instead of tailing", - "translation": "Dump recent logs instead of tailing", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLE GROUPS", - "translation": "ENVIRONMENT VARIABLE GROUPS", - "modified": false - }, - { - "id": "ENVIRONMENT VARIABLES:", - "translation": "ENVIRONMENT VARIABLES:", - "modified": true - }, - { - "id": "EXAMPLE:\n", - "translation": "EXAMPLE:\n", - "modified": false - }, - { - "id": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n CF_NAME update-service mydb -t \"list,of, tags\"", - "translation": "EXAMPLE:\n CF_NAME update-service mydb -p gold\n CF_NAME update-service mydb -c '{\"ram_gb\":4}'\n CF_NAME update-service mydb -c ~/workspace/tmp/instance_config.json\n\u0009 CF_NAME update-service mydb -t \"list,of, tags\"", - "modified": true - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME bind-service myapp mydb -c '{\"permissions\":\"read-only\"}'\n\n Windows Command Line:\n CF_NAME bind-service myapp mydb -c \"{\\\"permissions\\\":\\\"read-only\\\"}\"\n\n Windows PowerShell:\n CF_NAME bind-service myapp mydb -c '{\\\"permissions\\\":\\\"read-only\\\"}'\n\u0009\n CF_NAME bind-service myapp mydb -c ~/workspace/tmp/instance_config.json", - "modified": false - }, - { - "id": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "translation": "EXAMPLE:\n Linux/Mac:\n CF_NAME create-service db-service silver -c '{\"ram_gb\":4}'\n\n Windows Command Line:\n CF_NAME create-service db-service silver -c \"{\\\"ram_gb\\\":4}\"\n\n Windows PowerShell:\n CF_NAME create-service db-service silver -c '{\\\"ram_gb\\\":4}'\n\n CF_NAME create-service db-service silver mydb -c ~/workspace/tmp/instance_config.json\n\n CF_NAME create-service dbaas silver mydb -t \"list, of, tags\"", - "modified": false - }, - { - "id": "Enable CF_TRACE output for all requests and responses", - "translation": "Enable CF_TRACE output for all requests and responses", - "modified": false - }, - { - "id": "Enable HTTP proxying for API requests", - "translation": "Enable HTTP proxying for API requests", - "modified": false - }, - { - "id": "Enable access for a specified organization", - "translation": "Enable access for a specified organization", - "modified": false - }, - { - "id": "Enable access to a service or service plan for one or all orgs", - "translation": "Enable access to a service or service plan for one or all orgs", - "modified": false - }, - { - "id": "Enable access to a specified service plan", - "translation": "Enable access to a specified service plan", - "modified": false - }, - { - "id": "Enable or disable color", - "translation": "Enable or disable color", - "modified": false - }, - { - "id": "Enable the buildpack to be used for staging", - "translation": "Enable the buildpack", - "modified": true - }, - { - "id": "Enable the use of a feature so that users have access to and can use the feature.", - "translation": "Enable the use of a feature so that users have access to and can use the feature.", - "modified": false - }, - { - "id": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "translation": "Enabling access of plan {{.PlanName}} for service {{.ServiceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for all orgs as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to all plans of service {{.ServiceName}} for the org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "translation": "Enabling access to plan {{.PlanName}} of service {{.ServiceName}} for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Env variable {{.VarName}} was not set.", - "translation": "Env variable {{.VarName}} was not set.", - "modified": false - }, - { - "id": "Error building request", - "translation": "Error building request", - "modified": false - }, - { - "id": "Error creating manifest file: ", - "translation": "Error creating manifest file: ", - "modified": false - }, - { - "id": "Error creating request:\n{{.Err}}", - "translation": "Error creating request:\n{{.Err}}", - "modified": false - }, - { - "id": "Error creating tmp file: {{.Err}}", - "translation": "Error creating tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error creating upload", - "translation": "Error creating upload", - "modified": false - }, - { - "id": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "translation": "Error creating user {{.TargetUser}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "translation": "Error deleting buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error deleting domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error dumping request\n{{.Err}}\n", - "translation": "Error dumping request\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error dumping response\n{{.Err}}\n", - "translation": "Error dumping response\n{{.Err}}\n", - "modified": false - }, - { - "id": "Error finding available orgs\n{{.ApiErr}}", - "translation": "Error finding available orgs\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding available spaces\n{{.Err}}", - "translation": "Error finding available spaces\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding command {{.CmdName}}\n", - "translation": "Error finding command {{.CmdName}}\n", - "modified": false - }, - { - "id": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "translation": "Error finding domain {{.DomainName}}\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error finding manifest", - "translation": "Error finding manifest", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "translation": "Error finding org {{.OrgName}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Error finding org {{.OrgName}}\n{{.Err}}", - "translation": "Error finding org {{.OrgName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error finding space {{.SpaceName}}\n{{.Err}}", - "translation": "Error finding space {{.SpaceName}}\n{{.Err}}", - "modified": false - }, - { - "id": "Error getting application summary: ", - "translation": "Error getting application summary: ", - "modified": false - }, - { - "id": "Error getting command list from plugin {{.FilePath}}", - "translation": "Error getting command list from plugin {{.FilePath}}", - "modified": false - }, - { - "id": "Error getting file info", - "translation": "Error getting file info", - "modified": false - }, - { - "id": "Error getting plugin metadata from repo: ", - "translation": "Error getting plugin metadata from repo: ", - "modified": false - }, - { - "id": "Error in requirement", - "translation": "Error in requirement", - "modified": false - }, - { - "id": "Error marshaling JSON", - "translation": "Error marshaling JSON", - "modified": false - }, - { - "id": "Error opening buildpack file", - "translation": "Error opening buildpack file", - "modified": false - }, - { - "id": "Error parsing JSON", - "translation": "Error parsing JSON", - "modified": false - }, - { - "id": "Error parsing headers", - "translation": "Error parsing headers", - "modified": false - }, - { - "id": "Error performing request", - "translation": "Error performing request", - "modified": false - }, - { - "id": "Error processing data from server: ", - "translation": "Error processing data from server: ", - "modified": false - }, - { - "id": "Error reading manifest file:\n{{.Err}}", - "translation": "Error reading manifest file:\n{{.Err}}", - "modified": false - }, - { - "id": "Error reading response", - "translation": "Error reading response", - "modified": false - }, - { - "id": "Error reading response from", - "translation": "Error reading response from", - "modified": false - }, - { - "id": "Error reading response from server: ", - "translation": "Error reading response from server: ", - "modified": false - }, - { - "id": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "translation": "Error renaming buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error requesting from", - "translation": "Error requesting from", - "modified": false - }, - { - "id": "Error resolving route:\n{{.Err}}", - "translation": "Error resolving route:\n{{.Err}}", - "modified": false - }, - { - "id": "Error updating buildpack {{.Name}}\n{{.Error}}", - "translation": "Error updating buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error uploading application.\n{{.ApiErr}}", - "translation": "Error uploading application.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "translation": "Error uploading buildpack {{.Name}}\n{{.Error}}", - "modified": false - }, - { - "id": "Error writing to tmp file: {{.Err}}", - "translation": "Error writing to tmp file: {{.Err}}", - "modified": false - }, - { - "id": "Error zipping application", - "translation": "Error zipping application", - "modified": false - }, - { - "id": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "translation": "Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", - "modified": false - }, - { - "id": "Error: No name found for app", - "translation": "Error: No name found for app", - "modified": false - }, - { - "id": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "translation": "Error: timed out waiting for async job '{{.ErrURL}}' to finish", - "modified": false - }, - { - "id": "Error: {{.Err}}", - "translation": "Error: {{.Err}}", - "modified": false - }, - { - "id": "Executes a raw request, content-type set to application/json by default", - "translation": "Executes a raw request, content-type set to application/json by default", - "modified": false - }, - { - "id": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "translation": "Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - "modified": false - }, - { - "id": "Expected applications to be a list", - "translation": "Expected applications to be a list", - "modified": false - }, - { - "id": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "translation": "Expected {{.Name}} to be a set of key =\u003e value, but it was a {{.Type}}.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a boolean.", - "translation": "Expected {{.PropertyName}} to be a boolean.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a list of strings.", - "translation": "Expected {{.PropertyName}} to be a list of strings.", - "modified": false - }, - { - "id": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "translation": "Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - "modified": false - }, - { - "id": "FAILED", - "translation": "FAILED", - "modified": false - }, - { - "id": "FEATURE FLAGS", - "translation": "FEATURE FLAGS", - "modified": false - }, - { - "id": "Failed fetching buildpacks.\n{{.Error}}", - "translation": "Failed fetching buildpacks.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching domains.\n{{.ApiErr}}", - "translation": "Failed fetching domains.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching events.\n{{.ApiErr}}", - "translation": "Failed fetching events.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching org-users for role {{.OrgRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching orgs.\n{{.ApiErr}}", - "translation": "Failed fetching orgs.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Failed fetching routes.\n{{.Err}}", - "translation": "Failed fetching routes.\n{{.Err}}", - "modified": false - }, - { - "id": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "translation": "Failed fetching space-users for role {{.SpaceRoleToDisplayName}}.\n{{.Error}}", - "modified": false - }, - { - "id": "Failed fetching spaces.\n{{.ErrorDescription}}", - "translation": "Failed fetching spaces.\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Failed to create json for resource_match request", - "translation": "Failed to create json for resource_match request", - "modified": false - }, - { - "id": "Failed to create manifest, unable to parse environment variable: ", - "translation": "Failed to create manifest, unable to parse environment variable: ", - "modified": false - }, - { - "id": "Failed to marshal JSON", - "translation": "Failed to marshal JSON", - "modified": false - }, - { - "id": "Failed to start oauth request", - "translation": "Failed to start oauth request", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Disabled.", - "translation": "Feature {{.FeatureFlag}} Disabled.", - "modified": false - }, - { - "id": "Feature {{.FeatureFlag}} Enabled.", - "translation": "Feature {{.FeatureFlag}} Enabled.", - "modified": false - }, - { - "id": "Features", - "translation": "Features", - "modified": false - }, - { - "id": "File not found locally, make sure the file exists at given path {{.filepath}}", - "translation": "File not found locally, make sure the file exists at given path {{.filepath}}", - "modified": false - }, - { - "id": "Force delete (do not prompt for confirmation)", - "translation": "Force delete (do not prompt for confirmation)", - "modified": false - }, - { - "id": "Force deletion without confirmation", - "translation": "Force deletion without confirmation", - "modified": false - }, - { - "id": "Force migration without confirmation", - "translation": "Force migration without confirmation", - "modified": false - }, - { - "id": "Force restart of app without prompt", - "translation": "Force restart of app without prompt", - "modified": false - }, - { - "id": "GETTING STARTED", - "translation": "GETTING STARTED", - "modified": false - }, - { - "id": "GLOBAL OPTIONS:", - "translation": "GLOBAL OPTIONS:", - "modified": true - }, - { - "id": "Getting OAuth token...", - "translation": "Getting OAuth token...", - "modified": false - }, - { - "id": "Getting all services from marketplace...", - "translation": "Getting all services from marketplace...", - "modified": false - }, - { - "id": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting buildpacks...\n", - "translation": "Getting buildpacks...\n", - "modified": false - }, - { - "id": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "translation": "Getting domains in org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "translation": "Getting events for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for org {{.OrgName}} as {{.Username}}...", - "translation": "Getting info for org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting info for security group {{.security_group}} as {{.username}}", - "translation": "Getting info for security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "translation": "Getting keys for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting orgs as {{.Username}}...\n", - "translation": "Getting orgs as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting plugins from all repositories ... ", - "translation": "Getting plugins from all repositories ... ", - "modified": false - }, - { - "id": "Getting plugins from repository '", - "translation": "Getting plugins from repositories '", - "modified": true - }, - { - "id": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "translation": "Getting quota {{.QuotaName}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting quotas as {{.Username}}...", - "translation": "Getting quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting routes as {{.Username}} ...\n", - "translation": "Getting routes as {{.Username}} ...\n", - "modified": false - }, - { - "id": "Getting rules for the security group : {{.SecurityGroupName}}...", - "translation": "Getting rules for the security group : {{.SecurityGroupName}}...", - "modified": false - }, - { - "id": "Getting security groups as {{.username}}", - "translation": "Getting security groups as {{.username}}", - "modified": false - }, - { - "id": "Getting service access as {{.Username}}...", - "translation": "getting service access as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} and service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for broker {{.Broker}} as {{.Username}}...", - "translation": "getting service access for broker {{.Broker}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} and organization {{.Organization}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service access for service {{.Service}} as {{.Username}}...", - "translation": "getting service access for service {{.Service}} as {{.Username}}...", - "modified": true - }, - { - "id": "Getting service auth tokens as {{.CurrentUser}}...", - "translation": "Getting service auth tokens as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service brokers as {{.Username}}...\n", - "translation": "Getting service brokers as {{.Username}}...\n", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "translation": "Getting service plan information for service {{.ServiceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting service plan information for service {{.ServiceName}}...", - "translation": "Getting service plan information for service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services from marketplace in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Getting services in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Getting space quota {{.Quota}} info as {{.Username}}...", - "translation": "Getting space quota {{.Quota}} info as {{.Username}}...", - "modified": false - }, - { - "id": "Getting space quotas as {{.Username}}...", - "translation": "Getting space quotas as {{.Username}}...", - "modified": false - }, - { - "id": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "translation": "Getting spaces in org {{.TargetOrgName}} as {{.CurrentUser}}...\n", - "modified": false - }, - { - "id": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stack '{{.Stack}}' in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Getting stacks in org {{.OrganizationName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "translation": "Getting users in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}", - "modified": false - }, - { - "id": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Getting users in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "HTTP data to include in the request body", - "translation": "HTTP data to include in the request body", - "modified": false - }, - { - "id": "HTTP method (GET,POST,PUT,DELETE,etc)", - "translation": "HTTP method (GET,POST,PUT,DELETE,etc)", - "modified": false - }, - { - "id": "Hostname", - "translation": "Hostname", - "modified": false - }, - { - "id": "Hostname (e.g. my-subdomain)", - "translation": "Hostname (e.g. my-subdomain)", - "modified": false - }, - { - "id": "INSTALLED PLUGIN COMMANDS", - "translation": "PLUGIN COMMANDS", - "modified": true - }, - { - "id": "Ignore manifest file", - "translation": "Ignore manifest file", - "modified": false - }, - { - "id": "Include response headers in the output", - "translation": "Include response headers in the output", - "modified": false - }, - { - "id": "Incorrect Usage", - "translation": "Incorrect Usage", - "modified": false - }, - { - "id": "Incorrect Usage.\n", - "translation": "Incorrect Usage.\n", - "modified": false - }, - { - "id": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "translation": "Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.", - "modified": false - }, - { - "id": "Incorrect Usage. No argument required\n\n", - "translation": "Incorrect Usage. No argument required\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires an argument\n\n", - "translation": "Incorrect Usage. Requires an argument\n\n", - "modified": false - }, - { - "id": "Incorrect Usage. Requires arguments\n\n", - "translation": "Incorrect Usage. Requires arguments\n\n", - "modified": false - }, - { - "id": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "translation": "Incorrect json format: file: {{.JSONFile}}\n\u0009\u0009\nValid json file example:\n[\n {\n \"protocol\": \"tcp\",\n \"destination\": \"10.244.1.18\",\n \"ports\": \"3306\"\n }\n]", - "modified": false - }, - { - "id": "Incorrect number of arguments", - "translation": "Incorrect number of arguments", - "modified": false - }, - { - "id": "Install the plugin defined in command argument", - "translation": "install-plugin PATH/TO/PLUGIN-NAME - Install the plugin defined in command argument", - "modified": true - }, - { - "id": "Installing plugin {{.PluginPath}}...", - "translation": "Installing plugin {{.PluginPath}}...", - "modified": false - }, - { - "id": "Instance", - "translation": "Instance", - "modified": false - }, - { - "id": "Instance Memory", - "translation": "Instance Memory", - "modified": false - }, - { - "id": "Instance must be a non-negative integer", - "translation": "Instance must be a non-negative integer", - "modified": false - }, - { - "id": "Invalid JSON response from server", - "translation": "Invalid JSON response from server", - "modified": false - }, - { - "id": "Invalid Role {{.Role}}", - "translation": "Invalid Role {{.Role}}", - "modified": false - }, - { - "id": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "translation": "Invalid SSL Cert for {{.URL}}\n{{.TipMessage}}", - "modified": false - }, - { - "id": "Invalid async response from server", - "translation": "Invalid async response from server", - "modified": false - }, - { - "id": "Invalid auth token: ", - "translation": "Invalid auth token: ", - "modified": false - }, - { - "id": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "translation": "Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.", - "modified": false - }, - { - "id": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "translation": "Invalid data from '{{.repoName}}' - plugin data does not exist", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "translation": "Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstanceCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "translation": "Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "translation": "Invalid instance: {{.Instance}}\nInstance must be a positive integer", - "modified": false - }, - { - "id": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "translation": "Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", - "modified": false - }, - { - "id": "Invalid json data from", - "translation": "Invalid json data from", - "modified": false - }, - { - "id": "Invalid manifest. Expected a map", - "translation": "Invalid manifest. Expected a map", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "translation": "Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "translation": "Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "translation": "Invalid timeout param: {{.Timeout}}\n{{.Err}}", - "modified": false - }, - { - "id": "Invalid usage", - "translation": "Invalid usage", - "modified": false - }, - { - "id": "Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - "translation": "Unexpected value for {{.PropertyName}} :\n{{.Error}}", - "modified": true - }, - { - "id": "JSON is invalid: {{.ErrorDescription}}", - "translation": "JSON is invalid: {{.ErrorDescription}}", - "modified": false - }, - { - "id": "Last Operation", - "translation": "Last Operation", - "modified": false - }, - { - "id": "List all apps in the target space", - "translation": "List all apps in the target space", - "modified": false - }, - { - "id": "List all available plugins in all added repositories", - "translation": "List all available plugins in all added repositories", - "modified": false - }, - { - "id": "List all buildpacks", - "translation": "List all buildpacks", - "modified": false - }, - { - "id": "List all orgs", - "translation": "List all orgs", - "modified": false - }, - { - "id": "List all routes in the current space or the current organization", - "translation": "List all routes in the current space or the current organization", - "modified": false - }, - { - "id": "List all security groups", - "translation": "List all security groups", - "modified": false - }, - { - "id": "List all service instances in the target space", - "translation": "List all service instances in the target space", - "modified": false - }, - { - "id": "List all spaces in an org", - "translation": "List all spaces in an org", - "modified": false - }, - { - "id": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "List all stacks (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "List all the routes for all spaces of current organization", - "translation": "List all the routes for all spaces of current organization", - "modified": false - }, - { - "id": "List all users in the org", - "translation": "List all users in the org", - "modified": false - }, - { - "id": "List available offerings in the marketplace", - "translation": "List available offerings in the marketplace", - "modified": false - }, - { - "id": "List available space resource quotas", - "translation": "List available space resource quotas", - "modified": false - }, - { - "id": "List available usage quotas", - "translation": "List available usage quotas", - "modified": false - }, - { - "id": "List domains in the target org", - "translation": "List domains in the target org", - "modified": false - }, - { - "id": "List keys for a service instance", - "translation": "List keys for a service instance", - "modified": false - }, - { - "id": "List security groups in the set of security groups for running applications", - "translation": "List security groups in the set of security groups for running applications", - "modified": false - }, - { - "id": "List security groups in the staging set for applications", - "translation": "List security groups in the staging set for applications", - "modified": false - }, - { - "id": "List service access settings", - "translation": "List service access settings", - "modified": false - }, - { - "id": "List service auth tokens", - "translation": "List service auth tokens", - "modified": false - }, - { - "id": "List service brokers", - "translation": "List service brokers", - "modified": false - }, - { - "id": "Listing Installed Plugins...", - "translation": "Listing Installed Plugins...", - "modified": false - }, - { - "id": "Lock the buildpack to prevent updates", - "translation": "Lock the buildpack", - "modified": true - }, - { - "id": "Log user in", - "translation": "Log user in", - "modified": false - }, - { - "id": "Log user out", - "translation": "Log user out", - "modified": false - }, - { - "id": "Logged errors:", - "translation": "Logged errors:", - "modified": false - }, - { - "id": "Logging out...", - "translation": "Logging out...", - "modified": false - }, - { - "id": "Loggregator endpoint missing from config file", - "translation": "Loggregator endpoint missing from config file", - "modified": false - }, - { - "id": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "translation": "Looking up '{{.filePath}}' from repository '{{.repoName}}'", - "modified": false - }, - { - "id": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "translation": "Make a copy of app source code from one application to another. Unless overridden, the copy-source command will restart the application.", - "modified": false - }, - { - "id": "Make a user-provided service instance available to cf apps", - "translation": "Make a user-provided service instance available to cf apps", - "modified": false - }, - { - "id": "Manifest file created successfully at ", - "translation": "Manifest file created successfully at ", - "modified": false - }, - { - "id": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "translation": "Manifest file is not found in the current directory, please provide either an app name or manifest", - "modified": false - }, - { - "id": "Map the root domain to this app", - "translation": "Map the root domain to this app", - "modified": false - }, - { - "id": "Max wait time for app instance startup, in minutes", - "translation": "Max wait time for app instance startup, in minutes", - "modified": false - }, - { - "id": "Max wait time for buildpack staging, in minutes", - "translation": "Max wait time for buildpack staging, in minutes", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "translation": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount.", - "modified": false - }, - { - "id": "Maximum amount of memory an application instance can have (e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "translation": "Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)", - "modified": true - }, - { - "id": "Maximum time (in seconds) for CLI to wait for application start, other server side timeouts may apply", - "translation": "Start timeout in seconds", - "modified": true - }, - { - "id": "Memory limit (e.g. 256M, 1024M, 1G)", - "translation": "Memory limit (e.g. 256M, 1024M, 1G)", - "modified": false - }, - { - "id": "Message: {{.Message}}", - "translation": "Message: {{.Message}}", - "modified": false - }, - { - "id": "Migrate service instances from one service plan to another", - "translation": "Migrate service instances from one service plan to another", - "modified": false - }, - { - "id": "NAME", - "translation": "NAME", - "modified": false - }, - { - "id": "NAME:", - "translation": "NAME:", - "modified": false - }, - { - "id": "Name", - "translation": "Name", - "modified": false - }, - { - "id": "New Password", - "translation": "New Password", - "modified": false - }, - { - "id": "New name", - "translation": "New name", - "modified": false - }, - { - "id": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "translation": "No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - "modified": true - }, - { - "id": "No action taken. You must disable access to all plans of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "Plans are accessible for all orgs. Try removing access for all orgs, then enable access for select orgs.", - "modified": true - }, - { - "id": "No action taken. You must disable access to the {{.PlanName}} plan of {{.ServiceName}} service for all orgs and then grant access for all orgs except the {{.OrgName}} org.", - "translation": "The plan {{.PlaneName}} of service {{.ServiceName}} is already inaccessible for org {{.OrgName}}", - "modified": true - }, - { - "id": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "translation": "No api endpoint set. Use '{{.Name}}' to set an endpoint", - "modified": false - }, - { - "id": "No apps found", - "translation": "No apps found", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No buildpacks found", - "modified": false - }, - { - "id": "No changes were made", - "translation": "No changes were made", - "modified": false - }, - { - "id": "No domains found", - "translation": "No domains found", - "modified": false - }, - { - "id": "No events for app {{.AppName}}", - "translation": "No events for app {{.AppName}}", - "modified": false - }, - { - "id": "No flags specified. No changes were made.", - "translation": "No flags specified. No changes were made.", - "modified": false - }, - { - "id": "No org and space targeted, use '{{.Command}}' to target an org and space", - "translation": "No org and space targeted, use '{{.Command}}' to target an org and space", - "modified": false - }, - { - "id": "No org or space targeted, use '{{.CFTargetCommand}}'", - "translation": "No org or space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.CFTargetCommand}}'", - "translation": "No org targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No org targeted, use '{{.Command}}' to target an org.", - "translation": "No org targeted, use '{{.Command}}' to target an org.", - "modified": false - }, - { - "id": "No orgs found", - "translation": "No orgs found", - "modified": false - }, - { - "id": "No routes found", - "translation": "No routes found", - "modified": false - }, - { - "id": "No running env variables have been set", - "translation": "No running env variables have been set", - "modified": false - }, - { - "id": "No running security groups set", - "translation": "No running security groups set", - "modified": false - }, - { - "id": "No security groups", - "translation": "No security groups", - "modified": false - }, - { - "id": "No service brokers found", - "translation": "No service brokers found", - "modified": false - }, - { - "id": "No service key for service instance {{.ServiceInstanceName}}", - "translation": "No service key for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "translation": "No service key {{.ServiceKeyName}} found for service instance {{.ServiceInstanceName}}", - "modified": false - }, - { - "id": "No service offerings found", - "translation": "No service offerings found", - "modified": false - }, - { - "id": "No services found", - "translation": "No services found", - "modified": false - }, - { - "id": "No space targeted, use '{{.CFTargetCommand}}'", - "translation": "No space targeted, use '{{.CFTargetCommand}}'", - "modified": false - }, - { - "id": "No space targeted, use '{{.Command}}' to target a space", - "translation": "No space targeted, use '{{.Command}}' to target a space", - "modified": false - }, - { - "id": "No spaces assigned", - "translation": "No spaces assigned", - "modified": false - }, - { - "id": "No spaces found", - "translation": "No spaces found", - "modified": false - }, - { - "id": "No staging env variables have been set", - "translation": "No staging env variables have been set", - "modified": false - }, - { - "id": "No staging security group set", - "translation": "No staging security group set", - "modified": false - }, - { - "id": "No system-provided env variables have been set", - "translation": "No system-provided env variables have been set", - "modified": false - }, - { - "id": "No user-defined env variables have been set", - "translation": "No user-defined env variables have been set", - "modified": false - }, - { - "id": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "translation": "Not logged in. Use '{{.CFLoginCommand}}' to log in.", - "modified": false - }, - { - "id": "Note: this may take some time", - "translation": "Note: this may take some time", - "modified": false - }, - { - "id": "Number of instances", - "translation": "Number of instances", - "modified": false - }, - { - "id": "OK", - "translation": "OK", - "modified": false - }, - { - "id": "OPTIONS", - "translation": "OPTIONS", - "modified": false - }, - { - "id": "ORG ADMIN", - "translation": "ORG ADMIN", - "modified": false - }, - { - "id": "ORG AUDITOR", - "translation": "ORG AUDITOR", - "modified": false - }, - { - "id": "ORG MANAGER", - "translation": "ORG MANAGER", - "modified": false - }, - { - "id": "ORGS", - "translation": "ORGS", - "modified": false - }, - { - "id": "Org", - "translation": "Org", - "modified": false - }, - { - "id": "Org that contains the target application", - "translation": "Org that contains the target application", - "modified": false - }, - { - "id": "Org {{.OrgName}} already exists", - "translation": "Org {{.OrgName}} already exists", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist or is not accessible", - "translation": "Org {{.OrgName}} does not exist or is not accessible", - "modified": false - }, - { - "id": "Org {{.OrgName}} does not exist.", - "translation": "Org {{.OrgName}} does not exist.", - "modified": false - }, - { - "id": "Org:", - "translation": "Org:", - "modified": false - }, - { - "id": "Organization", - "translation": "Organization", - "modified": false - }, - { - "id": "Override path to default config directory", - "translation": "Override path to default config directory", - "modified": false - }, - { - "id": "Override path to default plugin config directory", - "translation": "Override path to default plugin config directory", - "modified": false - }, - { - "id": "Override restart of the application in target environment after copy-source completes", - "translation": "Override restart of the application in target environment after copy-source completes", - "modified": false - }, - { - "id": "Paid service plans", - "translation": "Paid service plans", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a running environment variable group", - "translation": "Pass parameters as JSON to create a running environment variable group", - "modified": false - }, - { - "id": "Pass parameters as JSON to create a staging environment variable group", - "translation": "Pass parameters as JSON to create a staging environment variable group", - "modified": false - }, - { - "id": "Password", - "translation": "Password", - "modified": false - }, - { - "id": "Password verification does not match", - "translation": "Password verification does not match", - "modified": false - }, - { - "id": "Path to app directory or to a zip file of the contents of the app directory", - "translation": "Path to app directory or to a zip file of the contents of the app directory", - "modified": true - }, - { - "id": "Path to directory or zip file", - "translation": "Path to directory or zip file", - "modified": false - }, - { - "id": "Path to manifest", - "translation": "Path to manifest", - "modified": false - }, - { - "id": "Perform a simple check to determine whether a route currently exists or not.", - "translation": "Perform a simple check to determine whether a route currently exists or not.", - "modified": false - }, - { - "id": "Plan does not exist for the {{.ServiceName}} service", - "translation": "Plan does not exist for the {{.ServiceName}} service", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} cannot be found", - "translation": "Plan {{.ServicePlanName}} cannot be found", - "modified": false - }, - { - "id": "Plan {{.ServicePlanName}} has no service instances to migrate", - "translation": "Plan {{.ServicePlanName}} has no service instances to migrate", - "modified": false - }, - { - "id": "Plan: {{.ServicePlanName}}", - "translation": "Plan: {{.ServicePlanName}}", - "modified": false - }, - { - "id": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "translation": "Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.", - "modified": false - }, - { - "id": "Please don't", - "translation": "Please don't", - "modified": false - }, - { - "id": "Please log in again", - "translation": "Please log in again", - "modified": false - }, - { - "id": "Please provide the space within the organization containing the target application", - "translation": "Please provide the space within the organization containing the target application", - "modified": false - }, - { - "id": "Plugin Name", - "translation": "Plugin name", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} does not exist", - "translation": "Plugin name {{.PluginName}} does not exist", - "modified": true - }, - { - "id": "Plugin name {{.PluginName}} is already taken", - "translation": "Plugin name {{.PluginName}} is already taken", - "modified": false - }, - { - "id": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "translation": "Plugin repo named \"{{.repoName}}\" already exists, please use another name.", - "modified": false - }, - { - "id": "Plugin requested has no binary available for your OS: ", - "translation": "Plugin requested has no binary available for your OS: ", - "modified": false - }, - { - "id": "Plugin {{.PluginName}} successfully uninstalled.", - "translation": "Plugin name {{.PluginName}} successfully uninstalled", - "modified": true - }, - { - "id": "Plugin {{.PluginName}} v{{.Version}} successfully installed.", - "translation": "Plugin {{.PluginName}} successfully installed.", - "modified": true - }, - { - "id": "Print API request diagnostics to stdout", - "translation": "Print API request diagnostics to stdout", - "modified": false - }, - { - "id": "Print out a list of files in a directory or the contents of a specific file", - "translation": "Print out a list of files in a directory or the contents of a specific file", - "modified": false - }, - { - "id": "Print the version", - "translation": "Print the version", - "modified": false - }, - { - "id": "Problem removing downloaded binary in temp directory: ", - "translation": "Problem removing downloaded binary in temp directory: ", - "modified": false - }, - { - "id": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "translation": "Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - "modified": false - }, - { - "id": "Provider", - "translation": "Provider", - "modified": false - }, - { - "id": "Purging service {{.ServiceName}}...", - "translation": "Purging service {{.ServiceName}}...", - "modified": false - }, - { - "id": "Push a new app or sync changes to an existing app", - "translation": "Push a new app or sync changes to an existing app", - "modified": false - }, - { - "id": "Push a single app (with or without a manifest):\n", - "translation": "Push a single app (with or without a manifest):\n", - "modified": false - }, - { - "id": "Quota Definition {{.QuotaName}} already exists", - "translation": "Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created org (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "translation": "Quota to assign to the newly created space (excluding this option results in assignment of default quota)", - "modified": false - }, - { - "id": "Quota {{.QuotaName}} does not exist", - "translation": "Quota {{.QuotaName}} does not exist", - "modified": false - }, - { - "id": "REQUEST:", - "translation": "REQUEST:", - "modified": false - }, - { - "id": "RESPONSE:", - "translation": "RESPONSE:", - "modified": false - }, - { - "id": "ROLES:\n", - "translation": "ROLES:\n", - "modified": false - }, - { - "id": "ROUTES", - "translation": "ROUTES", - "modified": false - }, - { - "id": "Really delete orphaned routes?{{.Prompt}}", - "translation": "Really delete orphaned routes?{{.Prompt}}", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - "modified": false - }, - { - "id": "Really delete the {{.ModelType}} {{.ModelName}}?", - "translation": "Really delete the {{.ModelType}} {{.ModelName}}?", - "modified": false - }, - { - "id": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "translation": "Really migrate {{.ServiceInstanceDescription}} from plan {{.OldServicePlanName}} to {{.NewServicePlanName}}?\u003e", - "modified": false - }, - { - "id": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "translation": "Really purge service offering {{.ServiceName}} from Cloud Foundry?", - "modified": false - }, - { - "id": "Received invalid SSL certificate from ", - "translation": "Received invalid SSL certificate from ", - "modified": false - }, - { - "id": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "translation": "Recursively remove a service and child objects from Cloud Foundry database without making requests to a service broker", - "modified": false - }, - { - "id": "Remove a plugin repository", - "translation": "Remove a plugin repository", - "modified": false - }, - { - "id": "Remove a space role from a user", - "translation": "Remove a space role from a user", - "modified": false - }, - { - "id": "Remove a url route from an app", - "translation": "Remove a url route from an app", - "modified": false - }, - { - "id": "Remove all api endpoint targeting", - "translation": "Remove all api endpoint targeting", - "modified": false - }, - { - "id": "Remove an env variable", - "translation": "Remove an env variable", - "modified": false - }, - { - "id": "Remove an org role from a user", - "translation": "Remove an org role from a user", - "modified": false - }, - { - "id": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Removing env variable {{.VarName}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} / space {{.TargetSpace}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "translation": "Removing role {{.Role}} from user {{.TargetUser}} in org {{.TargetOrg}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Removing route {{.URL}}...", - "translation": "Removing route {{.URL}}...", - "modified": false - }, - { - "id": "Rename a buildpack", - "translation": "Rename a buildpack", - "modified": false - }, - { - "id": "Rename a service broker", - "translation": "Rename a service broker", - "modified": false - }, - { - "id": "Rename a service instance", - "translation": "Rename a service instance", - "modified": false - }, - { - "id": "Rename a space", - "translation": "Rename a space", - "modified": false - }, - { - "id": "Rename an app", - "translation": "Rename an app", - "modified": false - }, - { - "id": "Rename an org", - "translation": "Rename an org", - "modified": false - }, - { - "id": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Renaming app {{.AppName}} to {{.NewName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "translation": "Renaming buildpack {{.OldBuildpackName}} to {{.NewBuildpackName}}...", - "modified": false - }, - { - "id": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "translation": "Renaming org {{.OrgName}} to {{.NewName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "translation": "Renaming service broker {{.OldName}} to {{.NewName}} as {{.Username}}", - "modified": false - }, - { - "id": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Renaming service {{.ServiceName}} to {{.NewServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "translation": "Renaming space {{.OldSpaceName}} to {{.NewSpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Repo Name", - "translation": "Repo Name", - "modified": false - }, - { - "id": "Repo Name - List plugins from just this repository", - "translation": "Repo Name - List plugins from just this repository", - "modified": false - }, - { - "id": "Repository: ", - "translation": "Repository: ", - "modified": false - }, - { - "id": "Restage an app", - "translation": "Restage an app", - "modified": false - }, - { - "id": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Restaging app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Restart an app", - "translation": "Restart an app", - "modified": false - }, - { - "id": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "translation": "Restarting instance {{.Instance}} of application {{.AppName}} as {{.Username}}", - "modified": false - }, - { - "id": "Retrieve an individual feature flag with status", - "translation": "Retrieve an individual feature flag with status", - "modified": false - }, - { - "id": "Retrieve and display the OAuth token for the current session", - "translation": "Retrieve and display the OAuth token for the current session", - "modified": false - }, - { - "id": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "translation": "Retrieve and display the given app's guid. All other health and status output for the app is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "translation": "Retrieve and display the given org's guid. All other output for the org is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "translation": "Retrieve and display the given service-key's guid. All other output for the service is suppressed.", - "modified": false - }, - { - "id": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "translation": "Retrieve and display the given stack's guid. All other output for the stack is suppressed.", - "modified": false - }, - { - "id": "Retrieve list of feature flags with status of each flag-able feature", - "translation": "Retrieve list of feature flags with status of each flag-able feature", - "modified": false - }, - { - "id": "Retrieve the contents of the running environment variable group", - "translation": "Retrieve the contents of the running environment variable group", - "modified": false - }, - { - "id": "Retrieve the contents of the staging environment variable group", - "translation": "Retrieve the contents of the staging environment variable group", - "modified": false - }, - { - "id": "Retrieving status of all flagged features as {{.Username}}...", - "translation": "Retrieving status of all flagged features as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Retrieving status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "translation": "Retrieving the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Retrive the rules for all the security groups associated with the space", - "translation": "Retrive the rules for all the security groups associated with the space", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does exist", - "modified": false - }, - { - "id": "Route {{.HostName}}.{{.DomainName}} does not exist", - "translation": "Route {{.HostName}}.{{.DomainName}} does not exist", - "modified": false - }, - { - "id": "Route {{.URL}} already exists", - "translation": "Route {{.URL}} already exists", - "modified": false - }, - { - "id": "Routes", - "translation": "Routes", - "modified": false - }, - { - "id": "Rules", - "translation": "Rules", - "modified": false - }, - { - "id": "Running Environment Variable Groups:", - "translation": "Running Environment Variable Groups:", - "modified": false - }, - { - "id": "SECURITY GROUP", - "translation": "SECURITY GROUP", - "modified": false - }, - { - "id": "SERVICE ADMIN", - "translation": "SERVICE ADMIN", - "modified": false - }, - { - "id": "SERVICES", - "translation": "SERVICES", - "modified": false - }, - { - "id": "SPACE ADMIN", - "translation": "SPACE ADMIN", - "modified": false - }, - { - "id": "SPACE AUDITOR", - "translation": "SPACE AUDITOR", - "modified": false - }, - { - "id": "SPACE DEVELOPER", - "translation": "SPACE DEVELOPER", - "modified": false - }, - { - "id": "SPACE MANAGER", - "translation": "SPACE MANAGER", - "modified": false - }, - { - "id": "SPACES", - "translation": "SPACES", - "modified": false - }, - { - "id": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Security Groups:", - "translation": "Security Groups:", - "modified": false - }, - { - "id": "Security group {{.security_group}} does not exist", - "translation": "Security group {{.security_group}} does not exist", - "modified": false - }, - { - "id": "Security group {{.security_group}} {{.error_message}}", - "translation": "Security group {{.security_group}} {{.error_message}}", - "modified": false - }, - { - "id": "Select a space (or press enter to skip):", - "translation": "Select a space (or press enter to skip):", - "modified": false - }, - { - "id": "Select an org (or press enter to skip):", - "translation": "Select an org (or press enter to skip):", - "modified": false - }, - { - "id": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "translation": "Server error, status code: 403: Access is denied. You do not have privileges to execute this command.", - "modified": false - }, - { - "id": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "translation": "Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrApiErrorCode}}, message: {{.ErrDescription}}", - "modified": false - }, - { - "id": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "translation": "Service Auth Token {{.Label}} {{.Provider}} does not exist.", - "modified": false - }, - { - "id": "Service Broker {{.Name}} does not exist.", - "translation": "Service Broker {{.Name}} does not exist.", - "modified": false - }, - { - "id": "Service Instance is not user provided", - "translation": "Service Instance is not user provided", - "modified": false - }, - { - "id": "Service instance {{.ServiceInstanceName}} does not exist.", - "translation": "Service instance {{.ServiceInstanceName}} does not exist.", - "modified": false - }, - { - "id": "Service instance: {{.ServiceName}}", - "translation": "Service instance: {{.ServiceName}}", - "modified": false - }, - { - "id": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "translation": "Service key {{.ServiceKeyName}} does not exist for service instance {{.ServiceInstanceName}}.", - "modified": false - }, - { - "id": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "translation": "Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.", - "modified": false - }, - { - "id": "Service offering not found", - "translation": "Service offering not found", - "modified": false - }, - { - "id": "Service {{.ServiceName}} does not exist.", - "translation": "Service {{.ServiceName}} does not exist.", - "modified": false - }, - { - "id": "Service: {{.ServiceDescription}}", - "translation": "Service: {{.ServiceDescription}}", - "modified": false - }, - { - "id": "Services", - "translation": "Services", - "modified": false - }, - { - "id": "Services:", - "translation": "Services:", - "modified": false - }, - { - "id": "Set an env variable for an app", - "translation": "Set an env variable for an app", - "modified": false - }, - { - "id": "Set or view target api url", - "translation": "Set or view target api url", - "modified": false - }, - { - "id": "Set or view the targeted org or space", - "translation": "Set or view the targeted org or space", - "modified": false - }, - { - "id": "Setting api endpoint to {{.Endpoint}}...", - "translation": "Setting api endpoint to {{.Endpoint}}...", - "modified": false - }, - { - "id": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Setting env variable '{{.VarName}}' to '{{.VarValue}}' for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "translation": "Setting quota {{.QuotaName}} to org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "translation": "Setting status of {{.FeatureFlag}} as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the running environment variable group as {{.Username}}...", - "translation": "Setting the contents of the running environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Setting the contents of the staging environment variable group as {{.Username}}...", - "translation": "Setting the contents of the staging environment variable group as {{.Username}}...", - "modified": false - }, - { - "id": "Share a private domain with an org", - "translation": "Share a private domain with an org", - "modified": false - }, - { - "id": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "translation": "Sharing domain {{.DomainName}} with org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Show a single security group", - "translation": "Show a single security group", - "modified": false - }, - { - "id": "Show all env variables for an app", - "translation": "Show all env variables for an app", - "modified": false - }, - { - "id": "Show help", - "translation": "Show help", - "modified": false - }, - { - "id": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Show information for a stack (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Show org info", - "translation": "Show org info", - "modified": false - }, - { - "id": "Show org users by role", - "translation": "Show org users by role", - "modified": false - }, - { - "id": "Show plan details for a particular service offering", - "translation": "Show plan details for a particular service offering", - "modified": false - }, - { - "id": "Show quota info", - "translation": "Show quota info", - "modified": false - }, - { - "id": "Show recent app events", - "translation": "Show recent app events", - "modified": false - }, - { - "id": "Show service instance info", - "translation": "Show service instance info", - "modified": false - }, - { - "id": "Show service key info", - "translation": "Show service key info", - "modified": false - }, - { - "id": "Show space info", - "translation": "Show space info", - "modified": false - }, - { - "id": "Show space quota info", - "translation": "Show space quota info", - "modified": false - }, - { - "id": "Show space users by role", - "translation": "Show space users by role", - "modified": false - }, - { - "id": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Space", - "translation": "Space", - "modified": false - }, - { - "id": "Space Quota Definition {{.QuotaName}} already exists", - "translation": "Space Quota Definition {{.QuotaName}} already exists", - "modified": false - }, - { - "id": "Space Quota:", - "translation": "Space Quota:", - "modified": false - }, - { - "id": "Space that contains the target application", - "translation": "Space that contains the target application", - "modified": false - }, - { - "id": "Space {{.SpaceName}} already exists", - "translation": "Space {{.SpaceName}} already exists", - "modified": false - }, - { - "id": "Space:", - "translation": "Space:", - "modified": false - }, - { - "id": "Specify a path for file creation. If path not specified, manifest file is created in current working directory.", - "translation": "Specify a path for file creation. If path not specified, file is create in root directory of the application source code.", - "modified": true - }, - { - "id": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "translation": "Stack to use (a stack is a pre-built file system, including an operating system, that can run apps)", - "modified": false - }, - { - "id": "Staging Environment Variable Groups:", - "translation": "Staging Environment Variable Groups:", - "modified": false - }, - { - "id": "Start an app", - "translation": "Start an app", - "modified": false - }, - { - "id": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start app timeout\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "translation": "Start unsuccessful\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "Started: {{.Started}}", - "translation": "Started: {{.Started}}", - "modified": false - }, - { - "id": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Startup command, set to null to reset to default start command", - "translation": "Startup command, set to null to reset to default start command", - "modified": false - }, - { - "id": "State", - "translation": "State", - "modified": false - }, - { - "id": "Status: {{.State}}", - "translation": "Status: {{.State}}", - "modified": false - }, - { - "id": "Stop an app", - "translation": "Stop an app", - "modified": false - }, - { - "id": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Syslog Drain Url", - "translation": "Syslog Drain Url", - "modified": false - }, - { - "id": "System-Provided:", - "translation": "System-Provided:", - "modified": false - }, - { - "id": "TIP:\n", - "translation": "TIP:\n", - "modified": false - }, - { - "id": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "translation": "TIP:\n Use 'CF_NAME create-user-provided-service' to make user-provided services available to cf apps", - "modified": false - }, - { - "id": "TIP: Changes will not apply to existing running applications until they are restarted.", - "translation": "TIP: Changes will not apply to existing running applications until they are restarted.", - "modified": false - }, - { - "id": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "translation": "TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space", - "modified": false - }, - { - "id": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "translation": "TIP: Use '{{.ApiCommand}}' to continue with an insecure API endpoint", - "modified": false - }, - { - "id": "TIP: Use '{{.CFCommand}} {{.AppName}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.CFCommand}}' to ensure your env variable changes take effect", - "modified": true - }, - { - "id": "TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", - "translation": "TIP: To make these changes take effect, use '{{.CFUnbindCommand}}' to unbind the service, '{{.CFBindComand}}' to rebind, and then '{{.CFRestageCommand}}' to update the app with the new env variables", - "modified": true - }, - { - "id": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "translation": "TIP: Use '{{.Command}}' to ensure your env variable changes take effect", - "modified": false - }, - { - "id": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "translation": "TIP: use '{{.CfUpdateBuildpackCommand}}' to update this buildpack", - "modified": false - }, - { - "id": "Tail or show recent logs for an app", - "translation": "Tail or show recent logs for an app", - "modified": false - }, - { - "id": "Targeted org {{.OrgName}}\n", - "translation": "Targeted org {{.OrgName}}\n", - "modified": false - }, - { - "id": "Targeted space {{.SpaceName}}\n", - "translation": "Targeted space {{.SpaceName}}\n", - "modified": false - }, - { - "id": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "translation": "Terminate the running application Instance at the given index and instantiate a new instance of the application with the same index", - "modified": false - }, - { - "id": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "translation": "The file {{.PluginExecutableName}} already exists under the plugin directory.\n", - "modified": false - }, - { - "id": "The order in which the buildpacks are checked during buildpack auto-detection", - "translation": "Buildpack position among other buildpacks", - "modified": true - }, - { - "id": "The plan is already accessible for all orgs", - "translation": "The plan is already accessible for all orgs", - "modified": false - }, - { - "id": "The plan is already accessible for this org", - "translation": "The plan is already accessible for this org", - "modified": false - }, - { - "id": "The plan is already inaccessible for all orgs", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already accessible for all orgs and no action has been taken at this time.", - "modified": true - }, - { - "id": "The plan is already inaccessible for this org", - "translation": "The plan {{.PlanName}} of service {{.ServiceName}} is already inaccessible for all orgs", - "modified": true - }, - { - "id": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "translation": "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", - "modified": false - }, - { - "id": "There are no running instances of this app.", - "translation": "There are no running instances of this app.", - "modified": false - }, - { - "id": "There are too many options to display, please type in the name.", - "translation": "There are too many options to display, please type in the name.", - "modified": false - }, - { - "id": "There is an error performing request on '{{.repoUrl}}': ", - "translation": "There is an error performing request on '{{.repoUrl}}':", - "modified": true - }, - { - "id": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "translation": "This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", - "modified": false - }, - { - "id": "This service doesn't support creation of keys.", - "translation": "This service doesn't support creation of keys.", - "modified": false - }, - { - "id": "This space already has an assigned space quota.", - "translation": "This space already has an assigned space quota.", - "modified": false - }, - { - "id": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "translation": "This will cause the app to restart. Are you sure you want to scale {{.AppName}}?", - "modified": false - }, - { - "id": "Timeout for async HTTP requests", - "translation": "Timeout for async HTTP requests", - "modified": false - }, - { - "id": "Tip: use 'add-plugin-repo' to register the repo", - "translation": "Tip: use 'add-plugin-repo' to register the repo", - "modified": false - }, - { - "id": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "translation": "To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - "modified": false - }, - { - "id": "Total Memory", - "translation": "Memory", - "modified": true - }, - { - "id": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory (e.g. 1024M, 1G, 10G)", - "modified": false - }, - { - "id": "Total amount of memory a space can have (e.g. 1024M, 1G, 10G)", - "translation": "Total amount of memory a space can have(e.g. 1024M, 1G, 10G)", - "modified": true - }, - { - "id": "Total number of routes", - "translation": "Total number of routes", - "modified": false - }, - { - "id": "Total number of service instances", - "translation": "Total number of service instances", - "modified": false - }, - { - "id": "Trace HTTP requests", - "translation": "Trace HTTP requests", - "modified": false - }, - { - "id": "UAA endpoint missing from config file", - "translation": "UAA endpoint missing from config file", - "modified": false - }, - { - "id": "USAGE", - "translation": "USAGE", - "modified": false - }, - { - "id": "USAGE:", - "translation": "USAGE:", - "modified": false - }, - { - "id": "USER ADMIN", - "translation": "USER ADMIN", - "modified": false - }, - { - "id": "USERS", - "translation": "USERS", - "modified": false - }, - { - "id": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "translation": "Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", - "modified": false - }, - { - "id": "Unable to authenticate.", - "translation": "Unable to authenticate.", - "modified": false - }, - { - "id": "Unable to delete, route '{{.URL}}' does not exist.", - "translation": "Unable to delete, route '{{.URL}}' does not exist.", - "modified": false - }, - { - "id": "Unable to obtain plugin name for executable {{.Executable}}", - "translation": "Unable to obtain plugin name for executable {{.Executable}}", - "modified": false - }, - { - "id": "Unassign a quota from a space", - "translation": "Unassign a quota from a space", - "modified": false - }, - { - "id": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "translation": "Unassigning space quota {{.QuotaName}} from space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Unbind a security group from a space", - "translation": "Unbind a security group from a space", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for running applications", - "translation": "Unbind a security group from the set of security groups for running applications", - "modified": false - }, - { - "id": "Unbind a security group from the set of security groups for staging applications", - "translation": "Unbind a security group from the set of security groups for staging applications", - "modified": false - }, - { - "id": "Unbind a service instance from an app", - "translation": "Unbind a service instance from an app", - "modified": false - }, - { - "id": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Unbinding app {{.AppName}} from service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for running as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from defaults for staging as {{.username}}", - "modified": false - }, - { - "id": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "translation": "Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", - "modified": false - }, - { - "id": "Unexpected error has occurred:\n{{.Error}}", - "translation": "Unexpected error has occurred:\n{{.Error}}", - "modified": false - }, - { - "id": "Uninstall the plugin defined in command argument", - "translation": "PLUGIN-NAME - Uninstall the plugin defined in command argument", - "modified": true - }, - { - "id": "Uninstalling plugin {{.PluginName}}...", - "translation": "Uninstalling plugin {{.PluginName}}...", - "modified": false - }, - { - "id": "Unknown flag", - "translation": "Unknown flag", - "modified": false - }, - { - "id": "Unknown flags:", - "translation": "Unknown flags:", - "modified": false - }, - { - "id": "Unlock the buildpack to enable updates", - "translation": "Unlock the buildpack", - "modified": true - }, - { - "id": "Unsetting api endpoint...", - "translation": "Unsetting api endpoint...", - "modified": false - }, - { - "id": "Unshare a private domain with an org", - "translation": "Unshare a private domain with an org", - "modified": false - }, - { - "id": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "translation": "Unsharing domain {{.DomainName}} from org {{.OrgName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Update a buildpack", - "translation": "Update a buildpack", - "modified": false - }, - { - "id": "Update a security group", - "translation": "Update a security group", - "modified": false - }, - { - "id": "Update a service auth token", - "translation": "Update a service auth token", - "modified": false - }, - { - "id": "Update a service broker", - "translation": "Update a service broker", - "modified": false - }, - { - "id": "Update a service instance", - "translation": "Update a service instance", - "modified": false - }, - { - "id": "Update an existing resource quota", - "translation": "Update an existing resource quota", - "modified": false - }, - { - "id": "Update user-provided service instance name value pairs", - "translation": "Update user-provided service instance name value pairs", - "modified": false - }, - { - "id": "Updated: {{.Updated}}", - "translation": "Updated: {{.Updated}}", - "modified": false - }, - { - "id": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "translation": "Updating a plan requires API v{{.RequiredCCAPIVersion}} or newer. Your current target is v{{.CurrentCCAPIVersion}}.", - "modified": false - }, - { - "id": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "translation": "Updating app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating buildpack {{.BuildpackName}}...", - "translation": "Updating buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Updating quota {{.QuotaName}} as {{.Username}}...", - "translation": "Updating quota {{.QuotaName}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating security group {{.security_group}} as {{.username}}", - "translation": "Updating security group {{.security_group}} as {{.username}}", - "modified": false - }, - { - "id": "Updating service auth token as {{.CurrentUser}}...", - "translation": "Updating service auth token as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Updating service broker {{.Name}} as {{.Username}}...", - "translation": "Updating service broker {{.Name}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "translation": "Updating service instance {{.ServiceName}} as {{.UserName}}...", - "modified": false - }, - { - "id": "Updating space quota {{.Quota}} as {{.Username}}...", - "translation": "Updating space quota {{.Quota}} as {{.Username}}...", - "modified": false - }, - { - "id": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "translation": "Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", - "modified": false - }, - { - "id": "Uploading app files from: {{.Path}}", - "translation": "Uploading app files from: {{.Path}}", - "modified": false - }, - { - "id": "Uploading buildpack {{.BuildpackName}}...", - "translation": "Uploading buildpack {{.BuildpackName}}...", - "modified": false - }, - { - "id": "Uploading {{.AppName}}...", - "translation": "Uploading {{.AppName}}...", - "modified": false - }, - { - "id": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "translation": "Uploading {{.ZipFileBytes}}, {{.FileCount}} files", - "modified": false - }, - { - "id": "Url", - "translation": "Url", - "modified": false - }, - { - "id": "Use '{{.Name}}' to view or set your target org and space", - "translation": "Use '{{.Name}}' to view or set your target org and space", - "modified": false - }, - { - "id": "Use a one-time password to login", - "translation": "Use a one-time password to login", - "modified": false - }, - { - "id": "User provided tags", - "translation": "User provided tags", - "modified": false - }, - { - "id": "User {{.TargetUser}} does not exist.", - "translation": "User {{.TargetUser}} does not exist.", - "modified": false - }, - { - "id": "User-Provided:", - "translation": "User-Provided:", - "modified": false - }, - { - "id": "User:", - "translation": "User:", - "modified": false - }, - { - "id": "Username", - "translation": "Username", - "modified": false - }, - { - "id": "Using manifest file {{.Path}}\n", - "translation": "Using manifest file {{.Path}}\n", - "modified": false - }, - { - "id": "Using route {{.RouteURL}}", - "translation": "Using route {{.RouteURL}}", - "modified": false - }, - { - "id": "Using stack {{.StackName}}...", - "translation": "Using stack {{.StackName}}...", - "modified": false - }, - { - "id": "VERSION:", - "translation": "VERSION:", - "modified": false - }, - { - "id": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "translation": "Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.", - "modified": false - }, - { - "id": "Variable Name", - "translation": "Variable Name", - "modified": false - }, - { - "id": "Verify Password", - "translation": "Verify Password", - "modified": false - }, - { - "id": "Version", - "translation": "Version", - "modified": false - }, - { - "id": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "translation": "WARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history\n\n", - "modified": false - }, - { - "id": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "translation": "WARNING: This operation assumes that the service broker responsible for this service offering is no longer available, and all service instances have been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service will be removed from Cloud Foundry, including service instances and service bindings. No attempt will be made to contact the service broker; running this command without destroying the service broker will cause orphan service instances. After running this command you may want to run either delete-service-auth-token or delete-service-broker to complete the cleanup.", - "modified": false - }, - { - "id": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "translation": "WARNING: This operation is internal to Cloud Foundry; service brokers will not be contacted and resources for service instances will not be altered. The primary use case for this operation is to replace a service broker which implements the v1 Service Broker API with a broker which implements the v2 API by remapping service instances from v1 plans to v2 plans. We recommend making the v1 plan private or shutting down the v1 broker to prevent additional instances from being created. Once service instances have been migrated, the v1 services and plans can be removed from Cloud Foundry.", - "modified": false - }, - { - "id": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "translation": "Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n", - "modified": false - }, - { - "id": "Warning: error tailing logs", - "translation": "Warning: error tailing logs", - "modified": false - }, - { - "id": "Write curl body to FILE instead of stdout", - "translation": "Write curl body to FILE instead of stdout", - "modified": false - }, - { - "id": "Zip archive does not contain a buildpack", - "translation": "Zip archive does not contain a buildpack", - "modified": false - }, - { - "id": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "translation": "[MULTIPART/FORM-DATA CONTENT HIDDEN]", - "modified": false - }, - { - "id": "[PRIVATE DATA HIDDEN]", - "translation": "[PRIVATE DATA HIDDEN]", - "modified": false - }, - { - "id": "[environment variables]", - "translation": "[environment variables]", - "modified": false - }, - { - "id": "[global options] command [arguments...] [command options]", - "translation": "[global options] command [arguments...] [command options]", - "modified": false - }, - { - "id": "access", - "translation": "access", - "modified": false - }, - { - "id": "access for plans of a particular broker", - "translation": "settings for a specific service", - "modified": true - }, - { - "id": "access for plans of a particular service offering", - "translation": "settings for a specific broker", - "modified": true - }, - { - "id": "actor", - "translation": "actor", - "modified": false - }, - { - "id": "all", - "translation": "all", - "modified": false - }, - { - "id": "allowed", - "translation": "allowed", - "modified": false - }, - { - "id": "already exists", - "translation": "already exists", - "modified": false - }, - { - "id": "app", - "translation": "app", - "modified": false - }, - { - "id": "app crashed", - "translation": "app crashed", - "modified": false - }, - { - "id": "apps", - "translation": "apps", - "modified": false - }, - { - "id": "auth request failed", - "translation": "auth request failed", - "modified": false - }, - { - "id": "bound apps", - "translation": "bound apps", - "modified": false - }, - { - "id": "broker: {{.Name}}", - "translation": "broker: {{.Name}}", - "modified": false - }, - { - "id": "buildpack:", - "translation": "buildpack:", - "modified": false - }, - { - "id": "bytes downloaded", - "translation": "bytes downloaded", - "modified": false - }, - { - "id": "cpu", - "translation": "cpu", - "modified": false - }, - { - "id": "crashed", - "translation": "crashed", - "modified": false - }, - { - "id": "crashing", - "translation": "crashing", - "modified": false - }, - { - "id": "description", - "translation": "description", - "modified": false - }, - { - "id": "details", - "translation": "details", - "modified": false - }, - { - "id": "disallowed", - "translation": "disallowed", - "modified": false - }, - { - "id": "disk", - "translation": "disk", - "modified": false - }, - { - "id": "disk:", - "translation": "disk:", - "modified": false - }, - { - "id": "does not exist.", - "translation": "does not exist.", - "modified": false - }, - { - "id": "domain", - "translation": "domain", - "modified": false - }, - { - "id": "domains:", - "translation": "domains:", - "modified": true - }, - { - "id": "down", - "translation": "down", - "modified": false - }, - { - "id": "enabled", - "translation": "enabled", - "modified": false - }, - { - "id": "env var '{{.PropertyName}}' should not be null", - "translation": "env var '{{.PropertyName}}' should not be null", - "modified": false - }, - { - "id": "event", - "translation": "event", - "modified": false - }, - { - "id": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "translation": "failed turning off console echo for password entry:\n{{.ErrorDescription}}", - "modified": false - }, - { - "id": "filename", - "translation": "filename", - "modified": false - }, - { - "id": "free or paid", - "translation": "free or paid", - "modified": false - }, - { - "id": "host", - "translation": "host", - "modified": false - }, - { - "id": "incorrect usage", - "translation": "incorrect usage", - "modified": false - }, - { - "id": "instance memory limit", - "translation": "instance memory limit", - "modified": false - }, - { - "id": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "translation": "instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", - "modified": false - }, - { - "id": "instances", - "translation": "instances", - "modified": false - }, - { - "id": "instances:", - "translation": "instances:", - "modified": false - }, - { - "id": "invalid inherit path in manifest", - "translation": "invalid inherit path in manifest", - "modified": false - }, - { - "id": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STAGING_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "translation": "invalid value for env var CF_STARTUP_TIMEOUT\n{{.Err}}", - "modified": false - }, - { - "id": "label", - "translation": "label", - "modified": false - }, - { - "id": "last operation", - "translation": "last operation", - "modified": false - }, - { - "id": "last uploaded:", - "translation": "package uploaded:", - "modified": true - }, - { - "id": "limited", - "translation": "limited", - "modified": false - }, - { - "id": "list all available plugin commands", - "translation": "list all available plugin commands", - "modified": false - }, - { - "id": "list all the added plugin repository", - "translation": "list all the added plugin repository", - "modified": false - }, - { - "id": "locked", - "translation": "locked", - "modified": false - }, - { - "id": "memory", - "translation": "memory", - "modified": false - }, - { - "id": "memory:", - "translation": "memory:", - "modified": false - }, - { - "id": "name", - "translation": "name", - "modified": false - }, - { - "id": "non basic services", - "translation": "non basic services", - "modified": false - }, - { - "id": "none", - "translation": "none", - "modified": false - }, - { - "id": "not valid for the requested host", - "translation": "not valid for the requested host", - "modified": false - }, - { - "id": "org", - "translation": "org", - "modified": false - }, - { - "id": "organization", - "translation": "organization", - "modified": false - }, - { - "id": "orgs", - "translation": "orgs", - "modified": false - }, - { - "id": "owned", - "translation": "owned", - "modified": false - }, - { - "id": "paid service plans", - "translation": "paid service plans", - "modified": false - }, - { - "id": "plan", - "translation": "plan", - "modified": false - }, - { - "id": "plans", - "translation": "plans", - "modified": false - }, - { - "id": "plans accessible by a particular organization", - "translation": "plans accessible by a particular organization", - "modified": false - }, - { - "id": "position", - "translation": "position", - "modified": false - }, - { - "id": "provider", - "translation": "provider", - "modified": false - }, - { - "id": "quota:", - "translation": "quota:", - "modified": true - }, - { - "id": "repo name where the plugin binary is located", - "translation": "repo name where the plugin binary is located", - "modified": false - }, - { - "id": "repo-plugins", - "translation": "repo-plugins", - "modified": false - }, - { - "id": "requested state", - "translation": "requested state", - "modified": false - }, - { - "id": "requested state:", - "translation": "requested state:", - "modified": false - }, - { - "id": "routes", - "translation": "routes", - "modified": false - }, - { - "id": "running", - "translation": "running", - "modified": false - }, - { - "id": "security group", - "translation": "security group", - "modified": false - }, - { - "id": "service", - "translation": "service", - "modified": false - }, - { - "id": "service auth token", - "translation": "service auth token", - "modified": false - }, - { - "id": "service instance", - "translation": "service instance", - "modified": false - }, - { - "id": "service instances", - "translation": "service instances", - "modified": false - }, - { - "id": "service key", - "translation": "service key", - "modified": false - }, - { - "id": "service plan", - "translation": "service plan", - "modified": false - }, - { - "id": "service-broker", - "translation": "service-broker", - "modified": false - }, - { - "id": "services", - "translation": "services", - "modified": false - }, - { - "id": "shared", - "translation": "shared", - "modified": false - }, - { - "id": "since", - "translation": "since", - "modified": false - }, - { - "id": "space", - "translation": "space", - "modified": false - }, - { - "id": "space quotas:", - "translation": "space quotas:", - "modified": false - }, - { - "id": "spaces:", - "translation": "spaces:", - "modified": true - }, - { - "id": "stack:", - "translation": "stack:", - "modified": false - }, - { - "id": "starting", - "translation": "starting", - "modified": false - }, - { - "id": "state", - "translation": "state", - "modified": false - }, - { - "id": "status", - "translation": "status", - "modified": false - }, - { - "id": "stopped", - "translation": "stopped", - "modified": false - }, - { - "id": "stopped after 1 redirect", - "translation": "stopped after 1 redirect", - "modified": false - }, - { - "id": "time", - "translation": "time", - "modified": false - }, - { - "id": "total memory limit", - "translation": "memory limit", - "modified": true - }, - { - "id": "unknown authority", - "translation": "unknown authority", - "modified": false - }, - { - "id": "unlimited", - "translation": "unlimited", - "modified": false - }, - { - "id": "update an existing space quota", - "translation": "update an existing space quota", - "modified": false - }, - { - "id": "url", - "translation": "url", - "modified": false - }, - { - "id": "urls", - "translation": "urls", - "modified": false - }, - { - "id": "urls:", - "translation": "urls:", - "modified": false - }, - { - "id": "usage:", - "translation": "usage:", - "modified": false - }, - { - "id": "user", - "translation": "user", - "modified": false - }, - { - "id": "user-provided", - "translation": "user-provided", - "modified": false - }, - { - "id": "version", - "translation": "version", - "modified": false - }, - { - "id": "write default values to the config", - "translation": "write default values to the config", - "modified": false - }, - { - "id": "yes", - "translation": "yes", - "modified": false - }, - { - "id": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "translation": "{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - "modified": false - }, - { - "id": "{{.CFName}} api", - "translation": "{{.CFName}} api", - "modified": false - }, - { - "id": "{{.CFName}} login", - "translation": "{{.CFName}} login", - "modified": false - }, - { - "id": "{{.Command}} help [COMMAND]", - "translation": "{{.Command}} help [COMMAND]", - "modified": false - }, - { - "id": "{{.CountOfServices}} migrated.", - "translation": "{{.CountOfServices}} migrated.", - "modified": false - }, - { - "id": "{{.CrashedCount}} crashed", - "translation": "{{.CrashedCount}} crashed", - "modified": false - }, - { - "id": "{{.DiskUsage}} of {{.DiskQuota}}", - "translation": "{{.DiskUsage}} of {{.DiskQuota}}", - "modified": false - }, - { - "id": "{{.DownCount}} down", - "translation": "{{.DownCount}} down", - "modified": false - }, - { - "id": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "translation": "{{.ErrorDescription}}\nTIP: Use '{{.CFServicesCommand}}' to view all services in this org and space.", - "modified": false - }, - { - "id": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "translation": "{{.Err}}\n\nTIP: use '{{.Command}}' for more information", - "modified": false - }, - { - "id": "{{.FlappingCount}} failing", - "translation": "{{.FlappingCount}} failing", - "modified": false - }, - { - "id": "{{.MemUsage}} of {{.MemQuota}}", - "translation": "{{.MemUsage}} of {{.MemQuota}}", - "modified": false - }, - { - "id": "{{.ModelType}} {{.ModelName}} already exists", - "translation": "{{.ModelType}} {{.ModelName}} already exists", - "modified": false - }, - { - "id": "{{.OperationType}} failed", - "translation": "{{.OperationType}} failed", - "modified": false - }, - { - "id": "{{.OperationType}} in progress", - "translation": "{{.OperationType}} in progress", - "modified": false - }, - { - "id": "{{.OperationType}} succeeded", - "translation": "{{.OperationType}} succeeded", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string or null value", - "translation": "{{.PropertyName}} must be a string or null value", - "modified": false - }, - { - "id": "{{.PropertyName}} must be a string value", - "translation": "{{.PropertyName}} must be a string value", - "modified": false - }, - { - "id": "{{.PropertyName}} should not be null", - "translation": "{{.PropertyName}} should not be null", - "modified": false - }, - { - "id": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "translation": "{{.QuotaName}} ({{.MemoryLimit}}M memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", - "modified": true - }, - { - "id": "{{.RunningCount}} of {{.TotalCount}} instances running", - "translation": "{{.RunningCount}} of {{.TotalCount}} instances running", - "modified": false - }, - { - "id": "{{.StartingCount}} starting", - "translation": "{{.StartingCount}} starting", - "modified": false - }, - { - "id": "{{.StartingCount}} starting ({{.Details}})", - "translation": "{{.StartingCount}} starting ({{.Details}})", - "modified": false - }, - { - "id": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "translation": "{{.State}} in progress. Use '{{.ServicesCommand}}' or '{{.ServiceCommand}}' to check operation status.", - "modified": false - }, - { - "id": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "translation": "{{.Usage}} {{.FormattedMemory}} x {{.InstanceCount}} instances", - "modified": false - } -] \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/en_US.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/en_US.all.json deleted file mode 100644 index 04f1fc9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/en_US.all.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "No buildpacks found", - "modified": false - }, - { - "id": "Change user password", - "translation": "Change user password", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - } -] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/fr_FR.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/fr_FR.all.json deleted file mode 100644 index f309d3a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/fr_FR.all.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "Pas buildpacks trouvés", - "modified": false - }, - { - "id": "Change user password", - "translation": "Changer mot de passe de l'utilisateur", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Suppression domaine {{.DomainName}} comme {{.Username}}...", - "modified": false - } -] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/zh_Hans.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/zh_Hans.all.json deleted file mode 100644 index 547d65b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/zh_Hans.all.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "id": "Deletes a security group", - "translation": "Deletes a security group", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "buildpack未找到", - "modified": false - }, - { - "id": "Change user password", - "translation": "更改用户密码", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - } -] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/zh_Hant.all.json b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/zh_Hant.all.json deleted file mode 100644 index a9d9290..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/test_fixtures/zh_Hant.all.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "id": "Deletes a security group", - "translation": "(Hant)Deletes a security group", - "modified": false - }, - { - "id": "No buildpacks found", - "translation": "(Hant)No buildpacks found", - "modified": false - }, - { - "id": "Change user password", - "translation": "(Hant)Change user password", - "modified": false - }, - { - "id": "Deleting domain {{.DomainName}} as {{.Username}}...", - "translation": "(Hant)Deleting domain {{.DomainName}} as {{.Username}}...", - "modified": false - } -] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/fakes/fake_app_manifest.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/fakes/fake_app_manifest.go deleted file mode 100644 index b8caee5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/fakes/fake_app_manifest.go +++ /dev/null @@ -1,346 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeAppManifest struct { - BuildpackUrlStub func(string, string) - buildpackUrlMutex sync.RWMutex - buildpackUrlArgsForCall []struct { - arg1 string - arg2 string - } - MemoryStub func(string, int64) - memoryMutex sync.RWMutex - memoryArgsForCall []struct { - arg1 string - arg2 int64 - } - ServiceStub func(string, string) - serviceMutex sync.RWMutex - serviceArgsForCall []struct { - arg1 string - arg2 string - } - StartCommandStub func(string, string) - startCommandMutex sync.RWMutex - startCommandArgsForCall []struct { - arg1 string - arg2 string - } - EnvironmentVarsStub func(string, string, string) - environmentVarsMutex sync.RWMutex - environmentVarsArgsForCall []struct { - arg1 string - arg2 string - arg3 string - } - HealthCheckTimeoutStub func(string, int) - healthCheckTimeoutMutex sync.RWMutex - healthCheckTimeoutArgsForCall []struct { - arg1 string - arg2 int - } - InstancesStub func(string, int) - instancesMutex sync.RWMutex - instancesArgsForCall []struct { - arg1 string - arg2 int - } - DomainStub func(string, string, string) - domainMutex sync.RWMutex - domainArgsForCall []struct { - arg1 string - arg2 string - arg3 string - } - GetContentsStub func() []models.Application - getContentsMutex sync.RWMutex - getContentsArgsForCall []struct{} - getContentsReturns struct { - result1 []models.Application - } - FileSavePathStub func(string) - fileSavePathMutex sync.RWMutex - fileSavePathArgsForCall []struct { - arg1 string - } - SaveStub func() error - saveMutex sync.RWMutex - saveArgsForCall []struct{} - saveReturns struct { - result1 error - } -} - -func (fake *FakeAppManifest) BuildpackUrl(arg1 string, arg2 string) { - fake.buildpackUrlMutex.Lock() - fake.buildpackUrlArgsForCall = append(fake.buildpackUrlArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - fake.buildpackUrlMutex.Unlock() - if fake.BuildpackUrlStub != nil { - fake.BuildpackUrlStub(arg1, arg2) - } -} - -func (fake *FakeAppManifest) BuildpackUrlCallCount() int { - fake.buildpackUrlMutex.RLock() - defer fake.buildpackUrlMutex.RUnlock() - return len(fake.buildpackUrlArgsForCall) -} - -func (fake *FakeAppManifest) BuildpackUrlArgsForCall(i int) (string, string) { - fake.buildpackUrlMutex.RLock() - defer fake.buildpackUrlMutex.RUnlock() - return fake.buildpackUrlArgsForCall[i].arg1, fake.buildpackUrlArgsForCall[i].arg2 -} - -func (fake *FakeAppManifest) Memory(arg1 string, arg2 int64) { - fake.memoryMutex.Lock() - fake.memoryArgsForCall = append(fake.memoryArgsForCall, struct { - arg1 string - arg2 int64 - }{arg1, arg2}) - fake.memoryMutex.Unlock() - if fake.MemoryStub != nil { - fake.MemoryStub(arg1, arg2) - } -} - -func (fake *FakeAppManifest) MemoryCallCount() int { - fake.memoryMutex.RLock() - defer fake.memoryMutex.RUnlock() - return len(fake.memoryArgsForCall) -} - -func (fake *FakeAppManifest) MemoryArgsForCall(i int) (string, int64) { - fake.memoryMutex.RLock() - defer fake.memoryMutex.RUnlock() - return fake.memoryArgsForCall[i].arg1, fake.memoryArgsForCall[i].arg2 -} - -func (fake *FakeAppManifest) Service(arg1 string, arg2 string) { - fake.serviceMutex.Lock() - fake.serviceArgsForCall = append(fake.serviceArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - fake.serviceMutex.Unlock() - if fake.ServiceStub != nil { - fake.ServiceStub(arg1, arg2) - } -} - -func (fake *FakeAppManifest) ServiceCallCount() int { - fake.serviceMutex.RLock() - defer fake.serviceMutex.RUnlock() - return len(fake.serviceArgsForCall) -} - -func (fake *FakeAppManifest) ServiceArgsForCall(i int) (string, string) { - fake.serviceMutex.RLock() - defer fake.serviceMutex.RUnlock() - return fake.serviceArgsForCall[i].arg1, fake.serviceArgsForCall[i].arg2 -} - -func (fake *FakeAppManifest) StartCommand(arg1 string, arg2 string) { - fake.startCommandMutex.Lock() - fake.startCommandArgsForCall = append(fake.startCommandArgsForCall, struct { - arg1 string - arg2 string - }{arg1, arg2}) - fake.startCommandMutex.Unlock() - if fake.StartCommandStub != nil { - fake.StartCommandStub(arg1, arg2) - } -} - -func (fake *FakeAppManifest) StartCommandCallCount() int { - fake.startCommandMutex.RLock() - defer fake.startCommandMutex.RUnlock() - return len(fake.startCommandArgsForCall) -} - -func (fake *FakeAppManifest) StartCommandArgsForCall(i int) (string, string) { - fake.startCommandMutex.RLock() - defer fake.startCommandMutex.RUnlock() - return fake.startCommandArgsForCall[i].arg1, fake.startCommandArgsForCall[i].arg2 -} - -func (fake *FakeAppManifest) EnvironmentVars(arg1 string, arg2 string, arg3 string) { - fake.environmentVarsMutex.Lock() - fake.environmentVarsArgsForCall = append(fake.environmentVarsArgsForCall, struct { - arg1 string - arg2 string - arg3 string - }{arg1, arg2, arg3}) - fake.environmentVarsMutex.Unlock() - if fake.EnvironmentVarsStub != nil { - fake.EnvironmentVarsStub(arg1, arg2, arg3) - } -} - -func (fake *FakeAppManifest) EnvironmentVarsCallCount() int { - fake.environmentVarsMutex.RLock() - defer fake.environmentVarsMutex.RUnlock() - return len(fake.environmentVarsArgsForCall) -} - -func (fake *FakeAppManifest) EnvironmentVarsArgsForCall(i int) (string, string, string) { - fake.environmentVarsMutex.RLock() - defer fake.environmentVarsMutex.RUnlock() - return fake.environmentVarsArgsForCall[i].arg1, fake.environmentVarsArgsForCall[i].arg2, fake.environmentVarsArgsForCall[i].arg3 -} - -func (fake *FakeAppManifest) HealthCheckTimeout(arg1 string, arg2 int) { - fake.healthCheckTimeoutMutex.Lock() - fake.healthCheckTimeoutArgsForCall = append(fake.healthCheckTimeoutArgsForCall, struct { - arg1 string - arg2 int - }{arg1, arg2}) - fake.healthCheckTimeoutMutex.Unlock() - if fake.HealthCheckTimeoutStub != nil { - fake.HealthCheckTimeoutStub(arg1, arg2) - } -} - -func (fake *FakeAppManifest) HealthCheckTimeoutCallCount() int { - fake.healthCheckTimeoutMutex.RLock() - defer fake.healthCheckTimeoutMutex.RUnlock() - return len(fake.healthCheckTimeoutArgsForCall) -} - -func (fake *FakeAppManifest) HealthCheckTimeoutArgsForCall(i int) (string, int) { - fake.healthCheckTimeoutMutex.RLock() - defer fake.healthCheckTimeoutMutex.RUnlock() - return fake.healthCheckTimeoutArgsForCall[i].arg1, fake.healthCheckTimeoutArgsForCall[i].arg2 -} - -func (fake *FakeAppManifest) Instances(arg1 string, arg2 int) { - fake.instancesMutex.Lock() - fake.instancesArgsForCall = append(fake.instancesArgsForCall, struct { - arg1 string - arg2 int - }{arg1, arg2}) - fake.instancesMutex.Unlock() - if fake.InstancesStub != nil { - fake.InstancesStub(arg1, arg2) - } -} - -func (fake *FakeAppManifest) InstancesCallCount() int { - fake.instancesMutex.RLock() - defer fake.instancesMutex.RUnlock() - return len(fake.instancesArgsForCall) -} - -func (fake *FakeAppManifest) InstancesArgsForCall(i int) (string, int) { - fake.instancesMutex.RLock() - defer fake.instancesMutex.RUnlock() - return fake.instancesArgsForCall[i].arg1, fake.instancesArgsForCall[i].arg2 -} - -func (fake *FakeAppManifest) Domain(arg1 string, arg2 string, arg3 string) { - fake.domainMutex.Lock() - fake.domainArgsForCall = append(fake.domainArgsForCall, struct { - arg1 string - arg2 string - arg3 string - }{arg1, arg2, arg3}) - fake.domainMutex.Unlock() - if fake.DomainStub != nil { - fake.DomainStub(arg1, arg2, arg3) - } -} - -func (fake *FakeAppManifest) DomainCallCount() int { - fake.domainMutex.RLock() - defer fake.domainMutex.RUnlock() - return len(fake.domainArgsForCall) -} - -func (fake *FakeAppManifest) DomainArgsForCall(i int) (string, string, string) { - fake.domainMutex.RLock() - defer fake.domainMutex.RUnlock() - return fake.domainArgsForCall[i].arg1, fake.domainArgsForCall[i].arg2, fake.domainArgsForCall[i].arg3 -} - -func (fake *FakeAppManifest) GetContents() []models.Application { - fake.getContentsMutex.Lock() - fake.getContentsArgsForCall = append(fake.getContentsArgsForCall, struct{}{}) - fake.getContentsMutex.Unlock() - if fake.GetContentsStub != nil { - return fake.GetContentsStub() - } else { - return fake.getContentsReturns.result1 - } -} - -func (fake *FakeAppManifest) GetContentsCallCount() int { - fake.getContentsMutex.RLock() - defer fake.getContentsMutex.RUnlock() - return len(fake.getContentsArgsForCall) -} - -func (fake *FakeAppManifest) GetContentsReturns(result1 []models.Application) { - fake.GetContentsStub = nil - fake.getContentsReturns = struct { - result1 []models.Application - }{result1} -} - -func (fake *FakeAppManifest) FileSavePath(arg1 string) { - fake.fileSavePathMutex.Lock() - fake.fileSavePathArgsForCall = append(fake.fileSavePathArgsForCall, struct { - arg1 string - }{arg1}) - fake.fileSavePathMutex.Unlock() - if fake.FileSavePathStub != nil { - fake.FileSavePathStub(arg1) - } -} - -func (fake *FakeAppManifest) FileSavePathCallCount() int { - fake.fileSavePathMutex.RLock() - defer fake.fileSavePathMutex.RUnlock() - return len(fake.fileSavePathArgsForCall) -} - -func (fake *FakeAppManifest) FileSavePathArgsForCall(i int) string { - fake.fileSavePathMutex.RLock() - defer fake.fileSavePathMutex.RUnlock() - return fake.fileSavePathArgsForCall[i].arg1 -} - -func (fake *FakeAppManifest) Save() error { - fake.saveMutex.Lock() - fake.saveArgsForCall = append(fake.saveArgsForCall, struct{}{}) - fake.saveMutex.Unlock() - if fake.SaveStub != nil { - return fake.SaveStub() - } else { - return fake.saveReturns.result1 - } -} - -func (fake *FakeAppManifest) SaveCallCount() int { - fake.saveMutex.RLock() - defer fake.saveMutex.RUnlock() - return len(fake.saveArgsForCall) -} - -func (fake *FakeAppManifest) SaveReturns(result1 error) { - fake.SaveStub = nil - fake.saveReturns = struct { - result1 error - }{result1} -} - -var _ manifest.AppManifest = new(FakeAppManifest) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/generate_manifest.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/generate_manifest.go deleted file mode 100644 index 71a7ec6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/generate_manifest.go +++ /dev/null @@ -1,205 +0,0 @@ -package manifest - -import ( - "fmt" - "os" - - "github.com/cloudfoundry/cli/cf/models" -) - -type AppManifest interface { - BuildpackUrl(string, string) - Memory(string, int64) - Service(string, string) - StartCommand(string, string) - EnvironmentVars(string, string, string) - HealthCheckTimeout(string, int) - Instances(string, int) - Domain(string, string, string) - GetContents() []models.Application - FileSavePath(string) - Save() error -} - -type appManifest struct { - savePath string - contents []models.Application -} - -func NewGenerator() AppManifest { - return &appManifest{} -} - -func (m *appManifest) FileSavePath(savePath string) { - m.savePath = savePath -} - -func (m *appManifest) Memory(appName string, memory int64) { - i := m.findOrCreateApplication(appName) - m.contents[i].Memory = memory -} - -func (m *appManifest) StartCommand(appName string, cmd string) { - i := m.findOrCreateApplication(appName) - m.contents[i].Command = cmd -} - -func (m *appManifest) BuildpackUrl(appName string, url string) { - i := m.findOrCreateApplication(appName) - m.contents[i].BuildpackUrl = url -} - -func (m *appManifest) HealthCheckTimeout(appName string, timeout int) { - i := m.findOrCreateApplication(appName) - m.contents[i].HealthCheckTimeout = timeout -} - -func (m *appManifest) Instances(appName string, instances int) { - i := m.findOrCreateApplication(appName) - m.contents[i].InstanceCount = instances -} - -func (m *appManifest) Service(appName string, name string) { - i := m.findOrCreateApplication(appName) - m.contents[i].Services = append(m.contents[i].Services, models.ServicePlanSummary{ - Guid: "", - Name: name, - }) -} - -func (m *appManifest) Domain(appName string, host string, domain string) { - i := m.findOrCreateApplication(appName) - m.contents[i].Routes = append(m.contents[i].Routes, models.RouteSummary{ - Host: host, - Domain: models.DomainFields{ - Name: domain, - }, - }) -} - -func (m *appManifest) EnvironmentVars(appName string, key, value string) { - i := m.findOrCreateApplication(appName) - m.contents[i].EnvironmentVars[key] = value -} - -func (m *appManifest) GetContents() []models.Application { - return m.contents -} - -func (m *appManifest) Save() error { - f, err := os.Create(m.savePath) - if err != nil { - return err - } - defer f.Close() - - _, err = fmt.Fprintln(f, "---\napplications:") - - for _, app := range m.contents { - if _, err := fmt.Fprintf(f, "- name: %s\n", app.Name); err != nil { - return err - } - - if _, err := fmt.Fprintf(f, " memory: %dM\n", app.Memory); err != nil { - return err - } - - if _, err := fmt.Fprintf(f, " instances: %d\n", app.InstanceCount); err != nil { - return err - } - - if app.BuildpackUrl != "" { - if _, err := fmt.Fprintf(f, " buildpack: %s\n", app.BuildpackUrl); err != nil { - return err - } - } - - if app.HealthCheckTimeout > 0 { - if _, err := fmt.Fprintf(f, " timeout: %d\n", app.HealthCheckTimeout); err != nil { - return err - } - } - - if app.Command != "" { - if _, err := fmt.Fprintf(f, " command: %s\n", app.Command); err != nil { - return err - } - } - - if len(app.Routes) > 0 { - if _, err := fmt.Fprintf(f, " host: %s\n", app.Routes[0].Host); err != nil { - return err - } - if _, err := fmt.Fprintf(f, " domain: %s\n", app.Routes[0].Domain.Name); err != nil { - return err - } - } else { - if _, err := fmt.Fprintf(f, " no-route: true\n"); err != nil { - return err - } - } - - if len(app.Services) > 0 { - if err := writeServicesToFile(f, app.Services); err != nil { - return err - } - } - - if len(app.EnvironmentVars) > 0 { - if err := writeEnvironmentVarToFile(f, app.EnvironmentVars); err != nil { - return err - } - } - - } - return nil -} - -func (m *appManifest) findOrCreateApplication(name string) int { - for i, app := range m.contents { - if app.Name == name { - return i - } - } - m.addApplication(name) - return len(m.contents) - 1 -} - -func (m *appManifest) addApplication(name string) { - m.contents = append(m.contents, models.Application{ - ApplicationFields: models.ApplicationFields{ - Name: name, - EnvironmentVars: make(map[string]interface{}), - }, - }) -} - -func writeServicesToFile(f *os.File, entries []models.ServicePlanSummary) error { - _, err := fmt.Fprintln(f, " services:") - if err != nil { - return err - } - for _, service := range entries { - _, err = fmt.Fprintf(f, " - %s\n", service.Name) - if err != nil { - return err - } - } - - return nil -} - -func writeEnvironmentVarToFile(f *os.File, envVars map[string]interface{}) error { - _, err := fmt.Fprintln(f, " env:") - if err != nil { - return err - } - for k, v := range envVars { - _, err = fmt.Fprintf(f, " %s: %s\n", k, v) - if err != nil { - return err - } - } - - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/generate_manifest_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/generate_manifest_test.go deleted file mode 100644 index f7243a9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/generate_manifest_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package manifest_test - -import ( - "io/ioutil" - "os" - "strings" - - . "github.com/cloudfoundry/cli/cf/manifest" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type outputs struct { - contents []string - cursor int -} - -var _ = Describe("generate_manifest", func() { - var ( - m AppManifest - err error - ) - - BeforeEach(func() { - _, err = os.Stat("./output.yml") - Ω(err).To(HaveOccurred()) - - m = NewGenerator() - m.FileSavePath("./output.yml") - }) - - AfterEach(func() { - err = os.Remove("./output.yml") - Ω(err).ToNot(HaveOccurred()) - }) - - It("creates a new file at a given path", func() { - m.Save() - - _, err = os.Stat("./output.yml") - Ω(err).ToNot(HaveOccurred()) - }) - - It("starts the manifest with 3 dashes (---), followed by 'applications'", func() { - m.Save() - - contents := getYamlContent("./output.yml") - - Ω(contents[0]).To(Equal("---")) - Ω(contents[1]).To(Equal("applications:")) - }) - - It("creates entry under the given app name", func() { - m.Memory("app1", 128) - m.Memory("app2", 64) - m.Save() - - //outputs.ContainSubstring assert orders - cmdOutput := &outputs{ - contents: getYamlContent("./output.yml"), - cursor: 0, - } - - Ω(cmdOutput.ContainsSubstring("- name: app1")).To(BeTrue()) - Ω(cmdOutput.ContainsSubstring(" memory: 128M")).To(BeTrue()) - - Ω(cmdOutput.ContainsSubstring("- name: app2")).To(BeTrue()) - Ω(cmdOutput.ContainsSubstring(" memory: 64M")).To(BeTrue()) - }) - - It("prefixes each service with '-'", func() { - m.Service("app1", "service1") - m.Service("app1", "service2") - m.Service("app1", "service3") - m.Save() - - contents := getYamlContent("./output.yml") - - Ω(contents).To(ContainSubstrings( - []string{" services:"}, - []string{"- service1"}, - []string{"- service2"}, - []string{"- service3"}, - )) - }) - - It("generates a manifest containing all the attributes", func() { - m.Memory("app1", 128) - m.StartCommand("app1", "run main.go") - m.Service("app1", "service1") - m.EnvironmentVars("app1", "foo", "boo") - m.HealthCheckTimeout("app1", 100) - m.Instances("app1", 3) - m.Domain("app1", "foo", "blahblahblah.com") - m.BuildpackUrl("app1", "ruby-buildpack") - err := m.Save() - Ω(err).NotTo(HaveOccurred()) - - Ω(getYamlContent("./output.yml")).To(ContainSubstrings( - []string{"- name: app1"}, - []string{" memory: 128M"}, - []string{" command: run main.go"}, - []string{" services:"}, - []string{" - service1"}, - []string{" env:"}, - []string{" foo: boo"}, - []string{" timeout: 100"}, - []string{" instances: 3"}, - []string{" host: foo"}, - []string{" domain: blahblahblah.com"}, - []string{" buildpack: ruby-buildpack"}, - )) - }) - -}) - -func getYamlContent(path string) []string { - b, err := ioutil.ReadFile(path) - Ω(err).ToNot(HaveOccurred()) - - return strings.Split(string(b), "\n") -} - -func (o *outputs) ContainsSubstring(str string) bool { - for i := o.cursor; i < len(o.contents)-1; i++ { - if strings.Contains(o.contents[i], str) { - o.cursor = i - return true - } - } - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest.go deleted file mode 100644 index 9b9b4cb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest.go +++ /dev/null @@ -1,380 +0,0 @@ -package manifest - -import ( - "fmt" - "path/filepath" - "regexp" - "strconv" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/generic" - "github.com/cloudfoundry/cli/words/generator" -) - -type Manifest struct { - Path string - Data generic.Map -} - -func NewEmptyManifest() (m *Manifest) { - return &Manifest{Data: generic.NewMap()} -} - -func (m Manifest) Applications() (apps []models.AppParams, err error) { - rawData, errs := expandProperties(m.Data, generator.NewWordGenerator()) - if len(errs) > 0 { - err = errors.NewWithSlice(errs) - return - } - - data := generic.NewMap(rawData) - appMaps, errs := m.getAppMaps(data) - if len(errs) > 0 { - err = errors.NewWithSlice(errs) - return - } - - for _, appMap := range appMaps { - app, errs := mapToAppParams(filepath.Dir(m.Path), appMap) - if len(errs) > 0 { - err = errors.NewWithSlice(errs) - continue - } - - apps = append(apps, app) - } - - return -} - -func (m Manifest) getAppMaps(data generic.Map) (apps []generic.Map, errs []error) { - globalProperties := data.Except([]interface{}{"applications"}) - - if data.Has("applications") { - appMaps, ok := data.Get("applications").([]interface{}) - if !ok { - errs = append(errs, errors.New(T("Expected applications to be a list"))) - return - } - - for _, appData := range appMaps { - if !generic.IsMappable(appData) { - errs = append(errs, errors.NewWithFmt(T("Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", - map[string]interface{}{"YmlSnippet": appData}))) - continue - } - - appMap := generic.DeepMerge(globalProperties, generic.NewMap(appData)) - apps = append(apps, appMap) - } - } else { - apps = append(apps, globalProperties) - } - - return -} - -var propertyRegex = regexp.MustCompile(`\${[\w-]+}`) - -func expandProperties(input interface{}, babbler generator.WordGenerator) (output interface{}, errs []error) { - switch input := input.(type) { - case string: - match := propertyRegex.FindStringSubmatch(input) - if match != nil { - if match[0] == "${random-word}" { - output = strings.Replace(input, "${random-word}", strings.ToLower(babbler.Babble()), -1) - } else { - err := errors.NewWithFmt(T("Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", - map[string]interface{}{"PropertyName": match[0]})) - errs = append(errs, err) - } - } else { - output = input - } - case []interface{}: - outputSlice := make([]interface{}, len(input)) - for index, item := range input { - itemOutput, itemErrs := expandProperties(item, babbler) - outputSlice[index] = itemOutput - errs = append(errs, itemErrs...) - } - output = outputSlice - case map[interface{}]interface{}: - outputMap := make(map[interface{}]interface{}) - for key, value := range input { - itemOutput, itemErrs := expandProperties(value, babbler) - outputMap[key] = itemOutput - errs = append(errs, itemErrs...) - } - output = outputMap - case generic.Map: - outputMap := generic.NewMap() - generic.Each(input, func(key, value interface{}) { - itemOutput, itemErrs := expandProperties(value, babbler) - outputMap.Set(key, itemOutput) - errs = append(errs, itemErrs...) - }) - output = outputMap - default: - output = input - } - - return -} - -func mapToAppParams(basePath string, yamlMap generic.Map) (appParams models.AppParams, errs []error) { - errs = checkForNulls(yamlMap) - if len(errs) > 0 { - return - } - - appParams.BuildpackUrl = stringValOrDefault(yamlMap, "buildpack", &errs) - appParams.DiskQuota = bytesVal(yamlMap, "disk_quota", &errs) - - domainAry := *sliceOrEmptyVal(yamlMap, "domains", &errs) - if domain := stringVal(yamlMap, "domain", &errs); domain != nil { - domainAry = append(domainAry, *domain) - } - appParams.Domains = removeDuplicatedValue(domainAry) - - hostsArr := *sliceOrEmptyVal(yamlMap, "hosts", &errs) - if host := stringVal(yamlMap, "host", &errs); host != nil { - hostsArr = append(hostsArr, *host) - } - appParams.Hosts = removeDuplicatedValue(hostsArr) - - appParams.Name = stringVal(yamlMap, "name", &errs) - appParams.Path = stringVal(yamlMap, "path", &errs) - appParams.StackName = stringVal(yamlMap, "stack", &errs) - appParams.Command = stringValOrDefault(yamlMap, "command", &errs) - appParams.Memory = bytesVal(yamlMap, "memory", &errs) - appParams.InstanceCount = intVal(yamlMap, "instances", &errs) - appParams.HealthCheckTimeout = intVal(yamlMap, "timeout", &errs) - appParams.NoRoute = boolVal(yamlMap, "no-route", &errs) - appParams.NoHostname = boolVal(yamlMap, "no-hostname", &errs) - appParams.UseRandomHostname = boolVal(yamlMap, "random-route", &errs) - appParams.ServicesToBind = sliceOrEmptyVal(yamlMap, "services", &errs) - appParams.EnvironmentVars = envVarOrEmptyMap(yamlMap, &errs) - - if appParams.Path != nil { - path := *appParams.Path - if filepath.IsAbs(path) { - path = filepath.Clean(path) - } else { - path = filepath.Join(basePath, path) - } - appParams.Path = &path - } - - return -} - -func removeDuplicatedValue(ary []string) *[]string { - if ary == nil { - return nil - } - - m := make(map[string]bool) - for _, v := range ary { - m[v] = true - } - - newAry := []string{} - for k, _ := range m { - newAry = append(newAry, k) - } - return &newAry -} - -func checkForNulls(yamlMap generic.Map) (errs []error) { - generic.Each(yamlMap, func(key interface{}, value interface{}) { - if key == "command" || key == "buildpack" { - return - } - if value == nil { - errs = append(errs, errors.NewWithFmt(T("{{.PropertyName}} should not be null", map[string]interface{}{"PropertyName": key}))) - } - }) - - return -} - -func stringVal(yamlMap generic.Map, key string, errs *[]error) *string { - val := yamlMap.Get(key) - if val == nil { - return nil - } - result, ok := val.(string) - if !ok { - *errs = append(*errs, errors.NewWithFmt(T("{{.PropertyName}} must be a string value", map[string]interface{}{"PropertyName": key}))) - return nil - } - return &result -} - -func stringValOrDefault(yamlMap generic.Map, key string, errs *[]error) *string { - if !yamlMap.Has(key) { - return nil - } - empty := "" - switch val := yamlMap.Get(key).(type) { - case string: - if val == "default" { - return &empty - } else { - return &val - } - case nil: - return &empty - default: - *errs = append(*errs, errors.NewWithFmt(T("{{.PropertyName}} must be a string or null value", map[string]interface{}{"PropertyName": key}))) - return nil - } -} - -func bytesVal(yamlMap generic.Map, key string, errs *[]error) *int64 { - yamlVal := yamlMap.Get(key) - if yamlVal == nil { - return nil - } - - stringVal := coerceToString(yamlVal) - value, err := formatters.ToMegabytes(stringVal) - if err != nil { - *errs = append(*errs, errors.NewWithFmt(T("Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", - map[string]interface{}{ - "PropertyName": key, - "Error": err.Error(), - "StringVal": stringVal, - }))) - return nil - } - return &value -} - -func intVal(yamlMap generic.Map, key string, errs *[]error) *int { - var ( - intVal int - err error - ) - - switch val := yamlMap.Get(key).(type) { - case string: - intVal, err = strconv.Atoi(val) - case int: - intVal = val - case int64: - intVal = int(val) - case nil: - return nil - default: - err = errors.NewWithFmt(T("Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", - map[string]interface{}{"PropertyName": key, "PropertyType": val})) - } - - if err != nil { - *errs = append(*errs, err) - return nil - } - - return &intVal -} - -func coerceToString(value interface{}) string { - return fmt.Sprintf("%v", value) -} - -func boolVal(yamlMap generic.Map, key string, errs *[]error) bool { - switch val := yamlMap.Get(key).(type) { - case nil: - return false - case bool: - return val - case string: - return val == "true" - default: - *errs = append(*errs, errors.NewWithFmt(T("Expected {{.PropertyName}} to be a boolean.", map[string]interface{}{"PropertyName": key}))) - return false - } -} - -func sliceOrEmptyVal(yamlMap generic.Map, key string, errs *[]error) *[]string { - if !yamlMap.Has(key) { - return new([]string) - } - - var ( - stringSlice []string - err error - ) - - sliceErr := errors.NewWithFmt(T("Expected {{.PropertyName}} to be a list of strings.", map[string]interface{}{"PropertyName": key})) - - switch input := yamlMap.Get(key).(type) { - case []interface{}: - for _, value := range input { - stringValue, ok := value.(string) - if !ok { - err = sliceErr - break - } - stringSlice = append(stringSlice, stringValue) - } - default: - err = sliceErr - } - - if err != nil { - *errs = append(*errs, err) - return &[]string{} - } - - return &stringSlice -} - -func envVarOrEmptyMap(yamlMap generic.Map, errs *[]error) *map[string]interface{} { - key := "env" - switch envVars := yamlMap.Get(key).(type) { - case nil: - aMap := make(map[string]interface{}, 0) - return &aMap - case map[string]interface{}: - yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) - return envVarOrEmptyMap(yamlMap, errs) - case map[interface{}]interface{}: - yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) - return envVarOrEmptyMap(yamlMap, errs) - case generic.Map: - merrs := validateEnvVars(envVars) - if merrs != nil { - *errs = append(*errs, merrs...) - return nil - } - - result := make(map[string]interface{}, envVars.Count()) - generic.Each(envVars, func(key, value interface{}) { - result[key.(string)] = value - }) - - return &result - default: - *errs = append(*errs, errors.NewWithFmt(T("Expected {{.Name}} to be a set of key => value, but it was a {{.Type}}.", - map[string]interface{}{"Name": key, "Type": envVars}))) - return nil - } -} - -func validateEnvVars(input generic.Map) (errs []error) { - generic.Each(input, func(key, value interface{}) { - if value == nil { - errs = append(errs, errors.New(fmt.Sprintf(T("env var '{{.PropertyName}}' should not be null", - map[string]interface{}{"PropertyName": key})))) - } - }) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_disk_repository.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_disk_repository.go deleted file mode 100644 index 90d5ee9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_disk_repository.go +++ /dev/null @@ -1,116 +0,0 @@ -package manifest - -import ( - "github.com/cloudfoundry-incubator/candiedyaml" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/generic" - "io" - "os" - "path/filepath" -) - -type ManifestRepository interface { - ReadManifest(string) (*Manifest, error) -} - -type ManifestDiskRepository struct{} - -func NewManifestDiskRepository() (repo ManifestRepository) { - return ManifestDiskRepository{} -} - -func (repo ManifestDiskRepository) ReadManifest(inputPath string) (*Manifest, error) { - m := NewEmptyManifest() - manifestPath, err := repo.manifestPath(inputPath) - - if err != nil { - return m, errors.NewWithError(T("Error finding manifest"), err) - } - - m.Path = manifestPath - - mapp, err := repo.readAllYAMLFiles(manifestPath) - if err != nil { - return m, err - } - - m.Data = mapp - - return m, nil -} - -func (repo ManifestDiskRepository) readAllYAMLFiles(path string) (mergedMap generic.Map, err error) { - file, err := os.Open(filepath.Clean(path)) - if err != nil { - return - } - defer file.Close() - - mapp, err := parseManifest(file) - if err != nil { - return - } - - if !mapp.Has("inherit") { - mergedMap = mapp - return - } - - inheritedPath, ok := mapp.Get("inherit").(string) - if !ok { - err = errors.New(T("invalid inherit path in manifest")) - return - } - - if !filepath.IsAbs(inheritedPath) { - inheritedPath = filepath.Join(filepath.Dir(path), inheritedPath) - } - - inheritedMap, err := repo.readAllYAMLFiles(inheritedPath) - if err != nil { - return - } - - mergedMap = generic.DeepMerge(inheritedMap, mapp) - return -} - -func parseManifest(file io.Reader) (yamlMap generic.Map, err error) { - decoder := candiedyaml.NewDecoder(file) - yamlMap = generic.NewMap() - err = decoder.Decode(yamlMap) - if err != nil { - return - } - - if !generic.IsMappable(yamlMap) { - err = errors.New(T("Invalid manifest. Expected a map")) - return - } - - return -} - -func (repo ManifestDiskRepository) manifestPath(userSpecifiedPath string) (string, error) { - fileInfo, err := os.Stat(userSpecifiedPath) - if err != nil { - return "", err - } - - if fileInfo.IsDir() { - manifestPaths := []string{ - filepath.Join(userSpecifiedPath, "manifest.yml"), - filepath.Join(userSpecifiedPath, "manifest.yaml"), - } - var err error - for _, manifestPath := range manifestPaths { - if _, err = os.Stat(manifestPath); err == nil { - return manifestPath, err - } - } - return "", err - } else { - return userSpecifiedPath, nil - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_disk_repository_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_disk_repository_test.go deleted file mode 100644 index 0520971..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_disk_repository_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package manifest_test - -import ( - "path/filepath" - - . "github.com/cloudfoundry/cli/cf/manifest" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ManifestDiskRepository", func() { - var repo ManifestRepository - - BeforeEach(func() { - repo = NewManifestDiskRepository() - }) - - Describe("given a directory containing a file called 'manifest.yml'", func() { - It("reads that file", func() { - m, err := repo.ReadManifest("../../fixtures/manifests") - - Expect(err).NotTo(HaveOccurred()) - Expect(m.Path).To(Equal(filepath.Clean("../../fixtures/manifests/manifest.yml"))) - - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*applications[0].Name).To(Equal("from-default-manifest")) - }) - }) - - Describe("given a directory that doesn't contain a file called 'manifest.y{a}ml'", func() { - It("returns an error", func() { - m, err := repo.ReadManifest("../../fixtures") - - Expect(err).To(HaveOccurred()) - Expect(m.Path).To(BeEmpty()) - }) - }) - - Describe("given a directory that contains a file called 'manifest.yaml'", func() { - It("reads that file", func() { - m, err := repo.ReadManifest("../../fixtures/manifests/only_yaml") - - Expect(err).NotTo(HaveOccurred()) - Expect(m.Path).To(Equal(filepath.Clean("../../fixtures/manifests/only_yaml/manifest.yaml"))) - - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*applications[0].Name).To(Equal("from-default-manifest")) - }) - }) - - Describe("given a directory contains files called 'manifest.yml' and 'manifest.yaml'", func() { - It("reads the file named 'manifest.yml'", func() { - m, err := repo.ReadManifest("../../fixtures/manifests/both_yaml_yml") - - Expect(err).NotTo(HaveOccurred()) - Expect(m.Path).To(Equal(filepath.Clean("../../fixtures/manifests/both_yaml_yml/manifest.yml"))) - - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*applications[0].Name).To(Equal("yml-extension")) - }) - }) - - Describe("given a path to a file", func() { - var ( - inputPath string - m *Manifest - err error - ) - - BeforeEach(func() { - inputPath = filepath.Clean("../../fixtures/manifests/different-manifest.yml") - m, err = repo.ReadManifest(inputPath) - }) - - It("reads the file at that path", func() { - Expect(err).NotTo(HaveOccurred()) - Expect(m.Path).To(Equal(inputPath)) - - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*applications[0].Name).To(Equal("from-different-manifest")) - }) - - It("passes the base directory to the manifest file", func() { - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(len(applications)).To(Equal(1)) - Expect(*applications[0].Name).To(Equal("from-different-manifest")) - - appPath := filepath.Clean("../../fixtures/manifests") - Expect(*applications[0].Path).To(Equal(appPath)) - }) - }) - - Describe("given a path to a file that doesn't exist", func() { - It("returns an error", func() { - _, err := repo.ReadManifest("some/path/that/doesnt/exist/manifest.yml") - Expect(err).To(HaveOccurred()) - }) - - It("returns empty string for the manifest path", func() { - m, _ := repo.ReadManifest("some/path/that/doesnt/exist/manifest.yml") - Expect(m.Path).To(Equal("")) - }) - }) - - Describe("when the manifest is not valid", func() { - It("returns an error", func() { - _, err := repo.ReadManifest("../../fixtures/manifests/empty-manifest.yml") - Expect(err).To(HaveOccurred()) - }) - - It("returns the path to the manifest", func() { - inputPath := filepath.Clean("../../fixtures/manifests/empty-manifest.yml") - m, _ := repo.ReadManifest(inputPath) - Expect(m.Path).To(Equal(inputPath)) - }) - }) - - It("converts nested maps to generic maps", func() { - m, err := repo.ReadManifest("../../fixtures/manifests/different-manifest.yml") - Expect(err).NotTo(HaveOccurred()) - - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*applications[0].EnvironmentVars).To(Equal(map[string]interface{}{ - "LD_LIBRARY_PATH": "/usr/lib/somewhere", - })) - }) - - It("merges manifests with their 'inherited' manifests", func() { - m, err := repo.ReadManifest("../../fixtures/manifests/inherited-manifest.yml") - Expect(err).NotTo(HaveOccurred()) - - applications, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*applications[0].Name).To(Equal("base-app")) - Expect(*applications[0].ServicesToBind).To(Equal([]string{"base-service"})) - Expect(*applications[0].EnvironmentVars).To(Equal(map[string]interface{}{ - "foo": "bar", - "will-be-overridden": "my-value", - })) - - Expect(*applications[1].Name).To(Equal("my-app")) - - env := *applications[1].EnvironmentVars - Expect(env["will-be-overridden"]).To(Equal("my-value")) - Expect(env["foo"]).To(Equal("bar")) - - services := *applications[1].ServicesToBind - Expect(services).To(Equal([]string{"base-service", "foo-service"})) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_suite_test.go deleted file mode 100644 index d880d7f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package manifest_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestManifest(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Manifest Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_test.go deleted file mode 100644 index 6c0206f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/manifest_test.go +++ /dev/null @@ -1,459 +0,0 @@ -package manifest_test - -import ( - "runtime" - "strings" - - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/generic" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -func NewManifest(path string, data generic.Map) (m *manifest.Manifest) { - return &manifest.Manifest{Path: path, Data: data} -} - -var _ = Describe("Manifests", func() { - It("merges global properties into each app's properties", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "instances": "3", - "memory": "512M", - "applications": []interface{}{ - map[interface{}]interface{}{ - "name": "bitcoin-miner", - "no-route": true, - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - - Expect(*apps[0].InstanceCount).To(Equal(3)) - Expect(*apps[0].Memory).To(Equal(int64(512))) - Expect(apps[0].NoRoute).To(BeTrue()) - }) - - Describe("when there is no applications block", func() { - It("returns a single application with the global properties", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "instances": "3", - "memory": "512M", - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - - Expect(len(apps)).To(Equal(1)) - Expect(*apps[0].InstanceCount).To(Equal(3)) - Expect(*apps[0].Memory).To(Equal(int64(512))) - }) - }) - - It("returns an error when the memory limit doesn't have a unit", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "instances": "3", - "memory": "512", - "applications": []interface{}{ - map[interface{}]interface{}{ - "name": "bitcoin-miner", - }, - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Invalid value for 'memory': 512")) - }) - - //candiedyaml returns an integer value when no unit is provided - It("returns an error when the memory limit is a non-string", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "instances": "3", - "memory": 128, - "applications": []interface{}{ - map[interface{}]interface{}{ - "name": "bitcoin-miner", - }, - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Invalid value for 'memory': 128")) - }) - - It("sets applications' health check timeouts", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "name": "bitcoin-miner", - "timeout": "360", - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*apps[0].HealthCheckTimeout).To(Equal(360)) - }) - - It("allows boolean env var values", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "env": generic.NewMap(map[interface{}]interface{}{ - "bar": true, - }), - })) - - _, err := m.Applications() - Expect(err).ToNot(HaveOccurred()) - }) - - It("does not allow nil values for environment variables", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "env": generic.NewMap(map[interface{}]interface{}{ - "bar": nil, - }), - "applications": []interface{}{ - map[interface{}]interface{}{ - "name": "bad app", - }, - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("env var 'bar' should not be null")) - }) - - It("returns an empty map when no env was present in the manifest", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{"name": "no-env-vars"}, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*apps[0].EnvironmentVars).NotTo(BeNil()) - }) - - It("allows applications to have absolute paths", func() { - if runtime.GOOS == "windows" { - m := NewManifest(`C:\some\path\manifest.yml`, generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "path": `C:\another\path`, - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*apps[0].Path).To(Equal(`C:\another\path`)) - } else { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "path": "/another/path-segment", - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*apps[0].Path).To(Equal("/another/path-segment")) - } - }) - - It("expands relative app paths based on the manifest's path", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "path": "../another/path-segment", - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - if runtime.GOOS == "windows" { - Expect(*apps[0].Path).To(Equal("\\some\\another\\path-segment")) - } else { - Expect(*apps[0].Path).To(Equal("/some/another/path-segment")) - } - }) - - It("returns errors when there are null values", func() { - m := NewManifest("/some/path", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "disk_quota": nil, - "domain": nil, - "host": nil, - "name": nil, - "path": nil, - "stack": nil, - "memory": nil, - "instances": nil, - "timeout": nil, - "no-route": nil, - "no-hostname": nil, - "services": nil, - "env": nil, - "random-route": nil, - }, - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - errorSlice := strings.Split(err.Error(), "\n") - manifestKeys := []string{"disk_quota", "domain", "host", "name", "path", "stack", - "memory", "instances", "timeout", "no-route", "no-hostname", "services", "env", "random-route"} - - for _, key := range manifestKeys { - Expect(errorSlice).To(ContainSubstrings([]string{key, "not be null"})) - } - }) - - It("returns errors when hosts/domains is not valid slice", func() { - m := NewManifest("/some/path", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "hosts": "bad-value", - "domains": []interface{}{"val1", "val2", false, true}, - }, - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - errorSlice := strings.Split(err.Error(), "\n") - - Expect(errorSlice).To(ContainSubstrings([]string{"hosts", "to be a list of strings"})) - Expect(errorSlice).To(ContainSubstrings([]string{"domains", "to be a list of strings"})) - }) - - It("parses known manifest keys", func() { - m := NewManifest("/some/path", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "buildpack": "my-buildpack", - "disk_quota": "512M", - "domain": "my-domain", - "domains": []interface{}{"domain1.test", "domain2.test"}, - "host": "my-hostname", - "hosts": []interface{}{"host-1", "host-2"}, - "name": "my-app-name", - "stack": "my-stack", - "memory": "256M", - "instances": 1, - "timeout": 11, - "no-route": true, - "no-hostname": true, - "random-route": true, - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(len(apps)).To(Equal(1)) - - Expect(*apps[0].BuildpackUrl).To(Equal("my-buildpack")) - Expect(*apps[0].DiskQuota).To(Equal(int64(512))) - Expect(*apps[0].Domains).To(ConsistOf([]string{"domain1.test", "domain2.test", "my-domain"})) - Expect(*apps[0].Hosts).To(ConsistOf([]string{"host-1", "host-2", "my-hostname"})) - Expect(*apps[0].Name).To(Equal("my-app-name")) - Expect(*apps[0].StackName).To(Equal("my-stack")) - Expect(*apps[0].Memory).To(Equal(int64(256))) - Expect(*apps[0].InstanceCount).To(Equal(1)) - Expect(*apps[0].HealthCheckTimeout).To(Equal(11)) - Expect(apps[0].NoRoute).To(BeTrue()) - Expect(apps[0].NoHostname).To(BeTrue()) - Expect(apps[0].UseRandomHostname).To(BeTrue()) - }) - - It("removes duplicated values in 'hosts' and 'domains'", func() { - m := NewManifest("/some/path", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{ - "domain": "my-domain", - "domains": []interface{}{"my-domain", "domain1.test", "domain1.test", "domain2.test"}, - "host": "my-hostname", - "hosts": []interface{}{"my-hostname", "host-1", "host-1", "host-2"}, - "name": "my-app-name", - }, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(len(apps)).To(Equal(1)) - - Expect(len(*apps[0].Domains)).To(Equal(3)) - Expect(*apps[0].Domains).To(ConsistOf([]string{"my-domain", "domain1.test", "domain2.test"})) - Expect(len(*apps[0].Hosts)).To(Equal(3)) - Expect(*apps[0].Hosts).To(ConsistOf([]string{"my-hostname", "host-1", "host-2"})) - }) - - Describe("old-style property syntax", func() { - It("returns an error when the manifest contains non-whitelist properties", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "env": generic.NewMap(map[interface{}]interface{}{ - "bar": "many-${some_property-name}-are-cool", - }), - }), - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("'${some_property-name}'")) - }) - - It("replaces the '${random-word} with a combination of 2 random words", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "env": generic.NewMap(map[interface{}]interface{}{ - "bar": "prefix_${random-word}_suffix", - "foo": "some-value", - }), - }), - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect((*apps[0].EnvironmentVars)["bar"]).To(MatchRegexp(`prefix_\w+-\w+_suffix`)) - Expect((*apps[0].EnvironmentVars)["foo"]).To(Equal("some-value")) - - apps2, _ := m.Applications() - Expect((*apps2[0].EnvironmentVars)["bar"]).To(MatchRegexp(`prefix_\w+-\w+_suffix`)) - Expect((*apps2[0].EnvironmentVars)["bar"]).NotTo(Equal((*apps[0].EnvironmentVars)["bar"])) - }) - }) - - It("sets the command and buildpack to blank when their values are null in the manifest", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "buildpack": nil, - "command": nil, - }), - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*apps[0].Command).To(Equal("")) - Expect(*apps[0].BuildpackUrl).To(Equal("")) - }) - - It("sets the command and buildpack to blank when their values are 'default' in the manifest", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "command": "default", - "buildpack": "default", - }), - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(*apps[0].Command).To(Equal("")) - Expect(*apps[0].BuildpackUrl).To(Equal("")) - }) - - It("does not set the start command when the manifest doesn't have the 'command' key", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - map[interface{}]interface{}{}, - }, - })) - - apps, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(apps[0].Command).To(BeNil()) - }) - - It("can build the applications multiple times", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "memory": "254m", - "applications": []interface{}{ - map[interface{}]interface{}{ - "name": "bitcoin-miner", - }, - map[interface{}]interface{}{ - "name": "bitcoin-miner", - }, - }, - })) - - apps1, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - - apps2, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - Expect(apps1).To(Equal(apps2)) - }) - - Describe("parsing env vars", func() { - It("handles values that are not strings", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "env": map[interface{}]interface{}{ - "string-key": "value", - "int-key": 1, - "float-key": 11.1, - }, - }), - }, - })) - - app, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - - Expect((*app[0].EnvironmentVars)["string-key"]).To(Equal("value")) - Expect((*app[0].EnvironmentVars)["int-key"]).To(Equal(1)) - Expect((*app[0].EnvironmentVars)["float-key"]).To(Equal(11.1)) - }) - - XIt("handles values that cannot be converted to strings", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "applications": []interface{}{ - generic.NewMap(map[interface{}]interface{}{ - "env": map[interface{}]interface{}{ - "bad-key": map[interface{}]interface{}{}, - }, - }), - }, - })) - - _, err := m.Applications() - Expect(err).To(HaveOccurred()) - }) - }) - - Describe("parsing services", func() { - It("can read a list of service instance names", func() { - m := NewManifest("/some/path/manifest.yml", generic.NewMap(map[interface{}]interface{}{ - "services": []interface{}{"service-1", "service-2"}, - })) - - app, err := m.Applications() - Expect(err).NotTo(HaveOccurred()) - - Expect(*app[0].ServicesToBind).To(Equal([]string{"service-1", "service-2"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/application.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/application.go deleted file mode 100644 index 3d23a76..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/application.go +++ /dev/null @@ -1,159 +0,0 @@ -package models - -import ( - "reflect" - "strings" - "time" -) - -type Application struct { - ApplicationFields - Stack *Stack - Routes []RouteSummary - Services []ServicePlanSummary -} - -func (model Application) HasRoute(route Route) bool { - for _, boundRoute := range model.Routes { - if boundRoute.Guid == route.Guid { - return true - } - } - return false -} - -func (model Application) ToParams() (params AppParams) { - state := strings.ToUpper(model.State) - params = AppParams{ - Guid: &model.Guid, - Name: &model.Name, - BuildpackUrl: &model.BuildpackUrl, - Command: &model.Command, - DiskQuota: &model.DiskQuota, - InstanceCount: &model.InstanceCount, - Memory: &model.Memory, - State: &state, - SpaceGuid: &model.SpaceGuid, - EnvironmentVars: &model.EnvironmentVars, - } - - if model.Stack != nil { - params.StackGuid = &model.Stack.Guid - } - - return -} - -type ApplicationFields struct { - Guid string - Name string - BuildpackUrl string - Command string - Diego bool - DetectedStartCommand string - DiskQuota int64 // in Megabytes - EnvironmentVars map[string]interface{} - InstanceCount int - Memory int64 // in Megabytes - RunningInstances int - HealthCheckTimeout int - State string - SpaceGuid string - PackageUpdatedAt *time.Time - PackageState string - StagingFailedReason string - Buildpack string - DetectedBuildpack string -} - -type AppParams struct { - BuildpackUrl *string - Command *string - DiskQuota *int64 - Domains *[]string - EnvironmentVars *map[string]interface{} - Guid *string - HealthCheckTimeout *int - Hosts *[]string - InstanceCount *int - Memory *int64 - Name *string - NoHostname bool - NoRoute bool - UseRandomHostname bool - Path *string - ServicesToBind *[]string - SpaceGuid *string - StackGuid *string - StackName *string - State *string -} - -func (app *AppParams) Merge(other *AppParams) { - if other.BuildpackUrl != nil { - app.BuildpackUrl = other.BuildpackUrl - } - if other.Command != nil { - app.Command = other.Command - } - if other.DiskQuota != nil { - app.DiskQuota = other.DiskQuota - } - if other.Domains != nil { - app.Domains = other.Domains - } - if other.EnvironmentVars != nil { - app.EnvironmentVars = other.EnvironmentVars - } - if other.Guid != nil { - app.Guid = other.Guid - } - if other.HealthCheckTimeout != nil { - app.HealthCheckTimeout = other.HealthCheckTimeout - } - if other.Hosts != nil { - app.Hosts = other.Hosts - } - if other.InstanceCount != nil { - app.InstanceCount = other.InstanceCount - } - if other.DiskQuota != nil { - app.DiskQuota = other.DiskQuota - } - if other.Memory != nil { - app.Memory = other.Memory - } - if other.Name != nil { - app.Name = other.Name - } - if other.Path != nil { - app.Path = other.Path - } - if other.ServicesToBind != nil { - app.ServicesToBind = other.ServicesToBind - } - if other.SpaceGuid != nil { - app.SpaceGuid = other.SpaceGuid - } - if other.StackGuid != nil { - app.StackGuid = other.StackGuid - } - if other.StackName != nil { - app.StackName = other.StackName - } - if other.State != nil { - app.State = other.State - } - - app.NoRoute = app.NoRoute || other.NoRoute - app.NoHostname = app.NoHostname || other.NoHostname - app.UseRandomHostname = app.UseRandomHostname || other.UseRandomHostname -} - -func (app *AppParams) IsEmpty() bool { - return reflect.DeepEqual(*app, AppParams{}) -} - -func (app *AppParams) IsHostEmpty() bool { - return app.Hosts == nil || len(*app.Hosts) == 0 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/buildpack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/buildpack.go deleted file mode 100644 index f53416b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/buildpack.go +++ /dev/null @@ -1,11 +0,0 @@ -package models - -type Buildpack struct { - Guid string - Name string - Position *int - Enabled *bool - Key string - Filename string - Locked *bool -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/domain.go deleted file mode 100644 index e7f6834..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/domain.go +++ /dev/null @@ -1,17 +0,0 @@ -package models - -import "fmt" - -type DomainFields struct { - Guid string - Name string - OwningOrganizationGuid string - Shared bool -} - -func (model DomainFields) UrlForHost(host string) string { - if host == "" { - return model.Name - } - return fmt.Sprintf("%s.%s", host, model.Name) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/domain_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/domain_test.go deleted file mode 100644 index 8d137eb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/domain_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package models_test - -import ( - . "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("DomainFields", func() { - var route Route - - BeforeEach(func() { - route = Route{} - - domain := DomainFields{} - domain.Name = "example.com" - route.Domain = domain - }) - - It("uses the hostname as part of the URL", func() { - route.Host = "foo" - Expect(route.URL()).To(Equal("foo.example.com")) - }) - - It("omits the hostname when none is given", func() { - Expect(route.URL()).To(Equal("example.com")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/environment_variable.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/environment_variable.go deleted file mode 100644 index 77b9f86..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/environment_variable.go +++ /dev/null @@ -1,12 +0,0 @@ -package models - -func NewEnvironmentVariable(name string, value string) (e EnvironmentVariable) { - e.Name = name - e.Value = value - return -} - -type EnvironmentVariable struct { - Name string - Value string -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/feature_flag.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/feature_flag.go deleted file mode 100644 index 71722ba..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/feature_flag.go +++ /dev/null @@ -1,14 +0,0 @@ -package models - -func NewFeatureFlag(name string, enabled bool, errorMessage string) (f FeatureFlag) { - f.Name = name - f.Enabled = enabled - f.ErrorMessage = errorMessage - return -} - -type FeatureFlag struct { - Name string `json:"name"` - Enabled bool `json:"enabled"` - ErrorMessage string `json:"error_message"` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/models_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/models_suite_test.go deleted file mode 100644 index 2d4c6de..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/models_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package models_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestModels(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Models Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/organization.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/organization.go deleted file mode 100644 index ac7d1e5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/organization.go +++ /dev/null @@ -1,14 +0,0 @@ -package models - -type OrganizationFields struct { - Guid string - Name string - QuotaDefinition QuotaFields -} - -type Organization struct { - OrganizationFields - Spaces []SpaceFields - Domains []DomainFields - SpaceQuotas []SpaceQuota -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/plugin_repo.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/plugin_repo.go deleted file mode 100644 index 25337df..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/plugin_repo.go +++ /dev/null @@ -1,6 +0,0 @@ -package models - -type PluginRepo struct { - Name string - Url string -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/quota.go deleted file mode 100644 index 751a03d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/quota.go +++ /dev/null @@ -1,21 +0,0 @@ -package models - -func NewQuotaFields(name string, memory int64, InstanceMemoryLimit int64, routes int, services int, nonbasicservices bool) (q QuotaFields) { - q.Name = name - q.MemoryLimit = memory - q.InstanceMemoryLimit = InstanceMemoryLimit - q.RoutesLimit = routes - q.ServicesLimit = services - q.NonBasicServicesAllowed = nonbasicservices - return -} - -type QuotaFields struct { - Guid string `json:"guid,omitempty"` - Name string `json:"name"` - MemoryLimit int64 `json:"memory_limit"` // in Megabytes - InstanceMemoryLimit int64 `json:"instance_memory_limit"` // in Megabytes - RoutesLimit int `json:"total_routes"` - ServicesLimit int `json:"total_services"` - NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/route.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/route.go deleted file mode 100644 index a34760e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/route.go +++ /dev/null @@ -1,32 +0,0 @@ -package models - -import "fmt" - -type Route struct { - Guid string - Host string - Domain DomainFields - - Space SpaceFields - Apps []ApplicationFields -} - -func (route Route) URL() string { - if route.Host == "" { - return route.Domain.Name - } - return fmt.Sprintf("%s.%s", route.Host, route.Domain.Name) -} - -type RouteSummary struct { - Guid string - Host string - Domain DomainFields -} - -func (model RouteSummary) URL() string { - if model.Host == "" { - return model.Domain.Name - } - return fmt.Sprintf("%s.%s", model.Host, model.Domain.Name) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/security_group.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/security_group.go deleted file mode 100644 index 3f8c10f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/security_group.go +++ /dev/null @@ -1,21 +0,0 @@ -package models - -// represents just the attributes for an security group -type SecurityGroupFields struct { - Name string - Guid string - Rules []map[string]interface{} -} - -// represents the JSON that we send up to CC when the user creates / updates a record -type SecurityGroupParams struct { - Name string `json:"name,omitempty"` - Guid string `json:"guid,omitempty"` - Rules []map[string]interface{} `json:"rules"` -} - -// represents a fully instantiated model returned by the CC (e.g.: with its attributes and the fields for its child objects) -type SecurityGroup struct { - SecurityGroupFields - Spaces []Space -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_binding.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_binding.go deleted file mode 100644 index 1acff82..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_binding.go +++ /dev/null @@ -1,13 +0,0 @@ -package models - -type ServiceBindingRequest struct { - AppGuid string `json:"app_guid"` - ServiceInstanceGuid string `json:"service_instance_guid"` - Params map[string]interface{} `json:"parameters,omitempty"` -} - -type ServiceBindingFields struct { - Guid string - Url string - AppGuid string -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_instance.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_instance.go deleted file mode 100644 index 9ba540e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_instance.go +++ /dev/null @@ -1,45 +0,0 @@ -package models - -type LastOperationFields struct { - Type string - State string - Description string - CreatedAt string - UpdatedAt string -} - -type ServiceInstanceCreateRequest struct { - Name string `json:"name"` - SpaceGuid string `json:"space_guid"` - PlanGuid string `json:"service_plan_guid,omitempty"` - Params map[string]interface{} `json:"parameters,omitempty"` - Tags []string `json:"tags,omitempty"` -} - -type ServiceInstanceUpdateRequest struct { - PlanGuid string `json:"service_plan_guid,omitempty"` - Params map[string]interface{} `json:"parameters,omitempty"` - Tags []string `json:"tags"` -} - -type ServiceInstanceFields struct { - Guid string - Name string - LastOperation LastOperationFields - SysLogDrainUrl string - ApplicationNames []string - Params map[string]interface{} - DashboardUrl string -} - -type ServiceInstance struct { - ServiceInstanceFields - ServiceBindings []ServiceBindingFields - ServiceKeys []ServiceKeyFields - ServicePlan ServicePlanFields - ServiceOffering ServiceOfferingFields -} - -func (inst ServiceInstance) IsUserProvided() bool { - return inst.ServicePlan.Guid == "" -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_key.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_key.go deleted file mode 100644 index f304cee..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_key.go +++ /dev/null @@ -1,20 +0,0 @@ -package models - -type ServiceKeyFields struct { - Name string - Guid string - Url string - ServiceInstanceGuid string - ServiceInstanceUrl string -} - -type ServiceKeyRequest struct { - Name string `json:"name"` - ServiceInstanceGuid string `json:"service_instance_guid"` - Params map[string]interface{} `json:"parameters,omitempty"` -} - -type ServiceKey struct { - Fields ServiceKeyFields - Credentials map[string]interface{} -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan.go deleted file mode 100644 index 8d16d2f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan.go +++ /dev/null @@ -1,34 +0,0 @@ -package models - -type ServicePlanFields struct { - Guid string - Name string - Free bool - Public bool - Description string - Active bool - ServiceOfferingGuid string - OrgNames []string -} - -type ServicePlan struct { - ServicePlanFields - ServiceOffering ServiceOfferingFields -} - -type ServicePlanSummary struct { - Guid string - Name string -} - -func (servicePlanFields ServicePlanFields) OrgHasVisibility(orgName string) bool { - if servicePlanFields.Public { - return true - } - for _, org := range servicePlanFields.OrgNames { - if org == orgName { - return true - } - } - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan_test.go deleted file mode 100644 index 64c047f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package models_test - -import ( - . "github.com/cloudfoundry/cli/cf/models" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServicePlanFields", func() { - var servicePlanFields ServicePlanFields - - BeforeEach(func() { - servicePlanFields = ServicePlanFields{ - Guid: "I-am-a-guid", - Name: "BestServicePlanEver", - Free: false, - Public: true, - Description: "A Plan For Service", - Active: true, - ServiceOfferingGuid: "service-offering-guid", - OrgNames: []string{"org1", "org2"}, - } - }) - - Describe(".OrgHasVisibility", func() { - Context("when the service plan is public", func() { - It("returns true", func() { - Expect(servicePlanFields.OrgHasVisibility("anyOrg")).To(BeTrue()) - }) - }) - - Context("when the service plan is not public", func() { - BeforeEach(func() { - servicePlanFields.Public = false - }) - - It("returns true if the orgname is in the list of orgs that have visibility", func() { - Expect(servicePlanFields.OrgHasVisibility("org1")).To(BeTrue()) - }) - - It("returns false if the orgname is not in the list of orgs that have visibility", func() { - Expect(servicePlanFields.OrgHasVisibility("org-that-has-no-visibility")).To(BeFalse()) - }) - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan_visibility.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan_visibility.go deleted file mode 100644 index 61417e3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_plan_visibility.go +++ /dev/null @@ -1,7 +0,0 @@ -package models - -type ServicePlanVisibilityFields struct { - Guid string `json:"guid"` - ServicePlanGuid string `json:"service_plan_guid"` - OrganizationGuid string `json:"organization_guid"` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/space.go deleted file mode 100644 index e52e621..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/space.go +++ /dev/null @@ -1,16 +0,0 @@ -package models - -type SpaceFields struct { - Guid string - Name string -} - -type Space struct { - SpaceFields - Organization OrganizationFields - Applications []ApplicationFields - ServiceInstances []ServiceInstanceFields - Domains []DomainFields - SecurityGroups []SecurityGroupFields - SpaceQuotaGuid string -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/space_quota.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/space_quota.go deleted file mode 100644 index 02f15ea..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/space_quota.go +++ /dev/null @@ -1,22 +0,0 @@ -package models - -func NewSpaceQuota(name string, memory int64, routes int, services int, nonbasicservices bool, orgGuid string) (q SpaceQuota) { - q.Name = name - q.MemoryLimit = memory - q.RoutesLimit = routes - q.ServicesLimit = services - q.NonBasicServicesAllowed = nonbasicservices - q.OrgGuid = orgGuid - return -} - -type SpaceQuota struct { - Guid string `json:"guid,omitempty"` - Name string `json:"name"` - MemoryLimit int64 `json:"memory_limit"` // in Megabytes - InstanceMemoryLimit int64 `json:"instance_memory_limit"` // in Megabytes - RoutesLimit int `json:"total_routes"` - ServicesLimit int `json:"total_services"` - NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` - OrgGuid string `json:"organization_guid"` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/stack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/stack.go deleted file mode 100644 index c3b08a0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/stack.go +++ /dev/null @@ -1,7 +0,0 @@ -package models - -type Stack struct { - Guid string - Name string - Description string -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user.go deleted file mode 100644 index 10ddaa0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -type UserFields struct { - Guid string - Username string - Password string - IsAdmin bool -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user_provided_service.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user_provided_service.go deleted file mode 100644 index 4c0d808..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user_provided_service.go +++ /dev/null @@ -1,17 +0,0 @@ -package models - -type UserProvidedServiceSummary struct { - Total int `json:"total_results"` - Resources []UserProvidedServiceEntity `json:"resources"` -} - -type UserProvidedService struct { - Name string `json:"name,omitempty"` - Credentials map[string]interface{} `json:"credentials"` - SpaceGuid string `json:"space_guid,omitempty"` - SysLogDrainUrl string `json:"syslog_drain_url"` -} - -type UserProvidedServiceEntity struct { - UserProvidedService `json:"entity"` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user_roles.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user_roles.go deleted file mode 100644 index 5413d28..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/user_roles.go +++ /dev/null @@ -1,29 +0,0 @@ -package models - -const ( - ORG_USER = "OrgUser" - ORG_MANAGER = "OrgManager" - BILLING_MANAGER = "BillingManager" - ORG_AUDITOR = "OrgAuditor" - SPACE_MANAGER = "SpaceManager" - SPACE_DEVELOPER = "SpaceDeveloper" - SPACE_AUDITOR = "SpaceAuditor" -) - -var UserInputToOrgRole = map[string]string{ - "OrgManager": ORG_MANAGER, - "BillingManager": BILLING_MANAGER, - "OrgAuditor": ORG_AUDITOR, -} - -var UserInputToSpaceRole = map[string]string{ - "SpaceManager": SPACE_MANAGER, - "SpaceDeveloper": SPACE_DEVELOPER, - "SpaceAuditor": SPACE_AUDITOR, -} - -var SpaceRoleToUserInput = map[string]string{ - SPACE_MANAGER: "SpaceManager", - SPACE_DEVELOPER: "SpaceDeveloper", - SPACE_AUDITOR: "SpaceAuditor", -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/cloud_controller_gateway.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/cloud_controller_gateway.go deleted file mode 100644 index d78ba97..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/cloud_controller_gateway.go +++ /dev/null @@ -1,34 +0,0 @@ -package net - -import ( - "encoding/json" - "strconv" - "time" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type ccErrorResponse struct { - Code int - Description string -} - -func cloudControllerErrorHandler(statusCode int, body []byte) error { - response := ccErrorResponse{} - json.Unmarshal(body, &response) - - if response.Code == 1000 { // MAGICKAL NUMBERS AHOY - return errors.NewInvalidTokenError(response.Description) - } else { - return errors.NewHttpError(statusCode, strconv.Itoa(response.Code), response.Description) - } -} - -func NewCloudControllerGateway(config core_config.Reader, clock func() time.Time, ui terminal.UI) Gateway { - gateway := newGateway(cloudControllerErrorHandler, config, ui) - gateway.Clock = clock - gateway.PollingEnabled = true - return gateway -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/cloud_controller_gateway_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/cloud_controller_gateway_test.go deleted file mode 100644 index d1f3626..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/cloud_controller_gateway_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package net_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - "time" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var failingCloudControllerRequest = func(writer http.ResponseWriter, request *http.Request) { - writer.WriteHeader(http.StatusBadRequest) - jsonResponse := `{ "code": 210003, "description": "The host is taken: test1" }` - fmt.Fprintln(writer, jsonResponse) -} - -var invalidTokenCloudControllerRequest = func(writer http.ResponseWriter, request *http.Request) { - writer.WriteHeader(http.StatusBadRequest) - jsonResponse := `{ "code": 1000, "description": "The token is invalid" }` - fmt.Fprintln(writer, jsonResponse) -} - -var _ = Describe("Cloud Controller Gateway", func() { - var gateway Gateway - var config core_config.Reader - - BeforeEach(func() { - config = testconfig.NewRepository() - gateway = NewCloudControllerGateway(config, time.Now, &testterm.FakeUI{}) - }) - - It("parses error responses", func() { - ts := httptest.NewTLSServer(http.HandlerFunc(failingCloudControllerRequest)) - defer ts.Close() - gateway.SetTrustedCerts(ts.TLS.Certificates) - - request, apiErr := gateway.NewRequest("GET", ts.URL, "TOKEN", nil) - _, apiErr = gateway.PerformRequest(request) - - Expect(apiErr).NotTo(BeNil()) - Expect(apiErr.Error()).To(ContainSubstring("The host is taken: test1")) - Expect(apiErr.(errors.HttpError).ErrorCode()).To(ContainSubstring("210003")) - }) - - It("parses invalid token responses", func() { - ts := httptest.NewTLSServer(http.HandlerFunc(invalidTokenCloudControllerRequest)) - defer ts.Close() - gateway.SetTrustedCerts(ts.TLS.Certificates) - - request, apiErr := gateway.NewRequest("GET", ts.URL, "TOKEN", nil) - _, apiErr = gateway.PerformRequest(request) - - Expect(apiErr).NotTo(BeNil()) - Expect(apiErr.Error()).To(ContainSubstring("The token is invalid")) - Expect(apiErr.(*errors.InvalidTokenError)).To(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/fakes/fake_http_client_interface.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/fakes/fake_http_client_interface.go deleted file mode 100644 index 7a1d68e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/fakes/fake_http_client_interface.go +++ /dev/null @@ -1,56 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "net/http" - "sync" - - "github.com/cloudfoundry/cli/cf/net" -) - -type FakeHttpClientInterface struct { - DoStub func(req *http.Request) (resp *http.Response, err error) - doMutex sync.RWMutex - doArgsForCall []struct { - req *http.Request - } - doReturns struct { - result1 *http.Response - result2 error - } -} - -func (fake *FakeHttpClientInterface) Do(req *http.Request) (resp *http.Response, err error) { - fake.doMutex.Lock() - fake.doArgsForCall = append(fake.doArgsForCall, struct { - req *http.Request - }{req}) - fake.doMutex.Unlock() - if fake.DoStub != nil { - return fake.DoStub(req) - } else { - return fake.doReturns.result1, fake.doReturns.result2 - } -} - -func (fake *FakeHttpClientInterface) DoCallCount() int { - fake.doMutex.RLock() - defer fake.doMutex.RUnlock() - return len(fake.doArgsForCall) -} - -func (fake *FakeHttpClientInterface) DoArgsForCall(i int) *http.Request { - fake.doMutex.RLock() - defer fake.doMutex.RUnlock() - return fake.doArgsForCall[i].req -} - -func (fake *FakeHttpClientInterface) DoReturns(result1 *http.Response, result2 error) { - fake.DoStub = nil - fake.doReturns = struct { - result1 *http.Response - result2 error - }{result1, result2} -} - -var _ net.HttpClientInterface = new(FakeHttpClientInterface) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/gateway.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/gateway.go deleted file mode 100644 index 51490b5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/gateway.go +++ /dev/null @@ -1,460 +0,0 @@ -package net - -import ( - "bytes" - "crypto/tls" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net" - "net/http" - "net/url" - "os" - "runtime" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" -) - -const ( - JOB_FINISHED = "finished" - JOB_FAILED = "failed" - DEFAULT_POLLING_THROTTLE = 5 * time.Second -) - -type JobResource struct { - Entity struct { - Status string - ErrorDetails struct { - Description string - } `json:"error_details"` - } -} - -type AsyncResource struct { - Metadata struct { - URL string - } -} - -type apiErrorHandler func(statusCode int, body []byte) error - -type tokenRefresher interface { - RefreshAuthToken() (string, error) -} - -type Request struct { - HttpReq *http.Request - SeekableBody io.ReadSeeker -} - -type Gateway struct { - authenticator tokenRefresher - errHandler apiErrorHandler - PollingEnabled bool - PollingThrottle time.Duration - trustedCerts []tls.Certificate - config core_config.Reader - warnings *[]string - Clock func() time.Time - transport *http.Transport - ui terminal.UI -} - -func newGateway(errHandler apiErrorHandler, config core_config.Reader, ui terminal.UI) (gateway Gateway) { - gateway.errHandler = errHandler - gateway.config = config - gateway.PollingThrottle = DEFAULT_POLLING_THROTTLE - gateway.warnings = &[]string{} - gateway.Clock = time.Now - gateway.ui = ui - - return -} - -func (gateway *Gateway) AsyncTimeout() time.Duration { - if gateway.config.AsyncTimeout() > 0 { - return time.Duration(gateway.config.AsyncTimeout()) * time.Minute - } - - return 0 -} - -func (gateway *Gateway) SetTokenRefresher(auth tokenRefresher) { - gateway.authenticator = auth -} - -func (gateway Gateway) GetResource(url string, resource interface{}) (err error) { - request, err := gateway.NewRequest("GET", url, gateway.config.AccessToken(), nil) - if err != nil { - return - } - - _, err = gateway.PerformRequestForJSONResponse(request, resource) - return -} - -func (gateway Gateway) CreateResourceFromStruct(endpoint, url string, resource interface{}) error { - bytes, err := json.Marshal(resource) - if err != nil { - return err - } - - return gateway.CreateResource(endpoint, url, strings.NewReader(string(bytes))) -} - -func (gateway Gateway) UpdateResourceFromStruct(endpoint, apiUrl string, resource interface{}) error { - bytes, err := json.Marshal(resource) - if err != nil { - return err - } - - return gateway.UpdateResource(endpoint, apiUrl, strings.NewReader(string(bytes))) -} - -func (gateway Gateway) CreateResource(endpoint, apiUrl string, body io.ReadSeeker, resource ...interface{}) (apiErr error) { - return gateway.createUpdateOrDeleteResource("POST", endpoint, apiUrl, body, false, resource...) -} - -func (gateway Gateway) UpdateResource(endpoint, apiUrl string, body io.ReadSeeker, resource ...interface{}) (apiErr error) { - return gateway.createUpdateOrDeleteResource("PUT", endpoint, apiUrl, body, false, resource...) -} - -func (gateway Gateway) UpdateResourceSync(endpoint, apiUrl string, body io.ReadSeeker, resource ...interface{}) (apiErr error) { - return gateway.createUpdateOrDeleteResource("PUT", endpoint, apiUrl, body, true, resource...) -} - -func (gateway Gateway) DeleteResourceSynchronously(endpoint, apiUrl string) (apiErr error) { - return gateway.createUpdateOrDeleteResource("DELETE", endpoint, apiUrl, nil, true, &AsyncResource{}) -} - -func (gateway Gateway) DeleteResource(endpoint, apiUrl string) (apiErr error) { - return gateway.createUpdateOrDeleteResource("DELETE", endpoint, apiUrl, nil, false, &AsyncResource{}) -} - -func (gateway Gateway) ListPaginatedResources(target string, - path string, - resource interface{}, - cb func(interface{}) bool) (apiErr error) { - for path != "" { - pagination := NewPaginatedResources(resource) - - apiErr = gateway.GetResource(fmt.Sprintf("%s%s", target, path), &pagination) - if apiErr != nil { - return - } - - resources, err := pagination.Resources() - if err != nil { - return errors.NewWithError(T("Error parsing JSON"), err) - } - - for _, resource := range resources { - if !cb(resource) { - return - } - } - - path = pagination.NextURL - } - - return -} - -func (gateway Gateway) createUpdateOrDeleteResource(verb, endpoint, apiUrl string, body io.ReadSeeker, sync bool, optionalResource ...interface{}) (apiErr error) { - var resource interface{} - if len(optionalResource) > 0 { - resource = optionalResource[0] - } - - request, apiErr := gateway.NewRequest(verb, endpoint+apiUrl, gateway.config.AccessToken(), body) - if apiErr != nil { - return - } - - if resource == nil { - _, apiErr = gateway.PerformRequest(request) - return - } - - if gateway.PollingEnabled && !sync { - _, apiErr = gateway.PerformPollingRequestForJSONResponse(endpoint, request, resource, gateway.AsyncTimeout()) - return - } else { - _, apiErr = gateway.PerformRequestForJSONResponse(request, resource) - return - } - -} - -func (gateway Gateway) newRequest(request *http.Request, accessToken string, body io.ReadSeeker) (*Request, error) { - if accessToken != "" { - request.Header.Set("Authorization", accessToken) - } - - request.Header.Set("accept", "application/json") - request.Header.Set("content-type", "application/json") - request.Header.Set("User-Agent", "go-cli "+cf.Version+" / "+runtime.GOOS) - return &Request{HttpReq: request, SeekableBody: body}, nil -} - -func (gateway Gateway) NewRequestForFile(method, fullUrl, accessToken string, body *os.File) (req *Request, apiErr error) { - progressReader := NewProgressReader(body, gateway.ui, 5*time.Second) - progressReader.Seek(0, 0) - fileStats, err := body.Stat() - - if err != nil { - apiErr = errors.NewWithError(T("Error getting file info"), err) - return - } - - request, err := http.NewRequest(method, fullUrl, progressReader) - if err != nil { - apiErr = errors.NewWithError(T("Error building request"), err) - return - } - - fileSize := fileStats.Size() - progressReader.SetTotalSize(fileSize) - request.ContentLength = fileSize - - if err != nil { - apiErr = errors.NewWithError(T("Error building request"), err) - return - } - - return gateway.newRequest(request, accessToken, progressReader) -} - -func (gateway Gateway) NewRequest(method, path, accessToken string, body io.ReadSeeker) (req *Request, apiErr error) { - request, err := http.NewRequest(method, path, body) - if err != nil { - apiErr = errors.NewWithError(T("Error building request"), err) - return - } - return gateway.newRequest(request, accessToken, body) -} - -func (gateway Gateway) PerformRequest(request *Request) (rawResponse *http.Response, apiErr error) { - return gateway.doRequestHandlingAuth(request) -} - -func (gateway Gateway) performRequestForResponseBytes(request *Request) (bytes []byte, headers http.Header, rawResponse *http.Response, apiErr error) { - rawResponse, apiErr = gateway.doRequestHandlingAuth(request) - if apiErr != nil { - return - } - defer rawResponse.Body.Close() - - bytes, err := ioutil.ReadAll(rawResponse.Body) - if err != nil { - apiErr = errors.NewWithError(T("Error reading response"), err) - } - - headers = rawResponse.Header - return -} - -func (gateway Gateway) PerformRequestForTextResponse(request *Request) (response string, headers http.Header, apiErr error) { - bytes, headers, _, apiErr := gateway.performRequestForResponseBytes(request) - response = string(bytes) - return -} - -func (gateway Gateway) PerformRequestForJSONResponse(request *Request, response interface{}) (headers http.Header, apiErr error) { - bytes, headers, rawResponse, apiErr := gateway.performRequestForResponseBytes(request) - if apiErr != nil { - return - } - - if rawResponse.StatusCode > 203 || strings.TrimSpace(string(bytes)) == "" { - return - } - - err := json.Unmarshal(bytes, &response) - if err != nil { - apiErr = errors.NewWithError(T("Invalid JSON response from server"), err) - } - return -} - -func (gateway Gateway) PerformPollingRequestForJSONResponse(endpoint string, request *Request, response interface{}, timeout time.Duration) (headers http.Header, apiErr error) { - query := request.HttpReq.URL.Query() - query.Add("async", "true") - request.HttpReq.URL.RawQuery = query.Encode() - - bytes, headers, rawResponse, apiErr := gateway.performRequestForResponseBytes(request) - if apiErr != nil { - return - } - defer rawResponse.Body.Close() - - if rawResponse.StatusCode > 203 || strings.TrimSpace(string(bytes)) == "" { - return - } - - err := json.Unmarshal(bytes, &response) - if err != nil { - apiErr = errors.NewWithError(T("Invalid JSON response from server"), err) - return - } - - asyncResource := &AsyncResource{} - err = json.Unmarshal(bytes, &asyncResource) - if err != nil { - apiErr = errors.NewWithError(T("Invalid async response from server"), err) - return - } - - jobUrl := asyncResource.Metadata.URL - if jobUrl == "" { - return - } - - if !strings.Contains(jobUrl, "/jobs/") { - return - } - - apiErr = gateway.waitForJob(endpoint+jobUrl, request.HttpReq.Header.Get("Authorization"), timeout) - - return -} - -func (gateway Gateway) Warnings() []string { - return *gateway.warnings -} - -func (gateway Gateway) waitForJob(jobUrl, accessToken string, timeout time.Duration) (err error) { - startTime := gateway.Clock() - for true { - if gateway.Clock().Sub(startTime) > timeout && timeout != 0 { - return errors.NewAsyncTimeoutError(jobUrl) - } - var request *Request - request, err = gateway.NewRequest("GET", jobUrl, accessToken, nil) - response := &JobResource{} - _, err = gateway.PerformRequestForJSONResponse(request, response) - if err != nil { - return - } - - switch response.Entity.Status { - case JOB_FINISHED: - return - case JOB_FAILED: - err = errors.New(response.Entity.ErrorDetails.Description) - return - } - - accessToken = request.HttpReq.Header.Get("Authorization") - - time.Sleep(gateway.PollingThrottle) - } - return -} - -func (gateway Gateway) doRequestHandlingAuth(request *Request) (rawResponse *http.Response, err error) { - httpReq := request.HttpReq - - if request.SeekableBody != nil { - httpReq.Body = ioutil.NopCloser(request.SeekableBody) - } - - // perform request - rawResponse, err = gateway.doRequestAndHandlerError(request) - if err == nil || gateway.authenticator == nil { - return - } - - switch err.(type) { - case *errors.InvalidTokenError: - // refresh the auth token - var newToken string - newToken, err = gateway.authenticator.RefreshAuthToken() - if err != nil { - return - } - - // reset the auth token and request body - httpReq.Header.Set("Authorization", newToken) - if request.SeekableBody != nil { - request.SeekableBody.Seek(0, 0) - httpReq.Body = ioutil.NopCloser(request.SeekableBody) - } - - // make the request again - rawResponse, err = gateway.doRequestAndHandlerError(request) - } - - return -} - -func (gateway Gateway) doRequestAndHandlerError(request *Request) (rawResponse *http.Response, err error) { - rawResponse, err = gateway.doRequest(request.HttpReq) - if err != nil { - err = WrapNetworkErrors(request.HttpReq.URL.Host, err) - return - } - - if rawResponse.StatusCode > 299 { - jsonBytes, _ := ioutil.ReadAll(rawResponse.Body) - rawResponse.Body.Close() - rawResponse.Body = ioutil.NopCloser(bytes.NewBuffer(jsonBytes)) - err = gateway.errHandler(rawResponse.StatusCode, jsonBytes) - } - - return -} - -func (gateway Gateway) doRequest(request *http.Request) (response *http.Response, err error) { - if gateway.transport == nil { - makeHttpTransport(&gateway) - } - - httpClient := NewHttpClient(gateway.transport) - - dumpRequest(request) - - for i := 0; i < 3; i++ { - response, err = httpClient.Do(request) - if response == nil && err != nil { - continue - } else { - break - } - } - - if err != nil { - return - } - - dumpResponse(response) - - header := http.CanonicalHeaderKey("X-Cf-Warnings") - raw_warnings := response.Header[header] - for _, raw_warning := range raw_warnings { - warning, _ := url.QueryUnescape(raw_warning) - *gateway.warnings = append(*gateway.warnings, warning) - } - - return -} - -func makeHttpTransport(gateway *Gateway) { - gateway.transport = &http.Transport{ - Dial: (&net.Dialer{Timeout: 5 * time.Second}).Dial, - TLSClientConfig: NewTLSConfig(gateway.trustedCerts, gateway.config.IsSSLDisabled()), - Proxy: http.ProxyFromEnvironment, - } -} - -func (gateway *Gateway) SetTrustedCerts(certificates []tls.Certificate) { - gateway.trustedCerts = certificates - makeHttpTransport(gateway) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/gateway_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/gateway_test.go deleted file mode 100644 index a5ab54b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/gateway_test.go +++ /dev/null @@ -1,633 +0,0 @@ -package net_test - -import ( - "crypto/tls" - "fmt" - "io/ioutil" - "net/http" - "net/http/httptest" - "net/url" - "os" - "reflect" - "runtime" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api/authentication" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/cf/net/fakes" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Gateway", func() { - var ( - ccGateway Gateway - uaaGateway Gateway - config core_config.ReadWriter - authRepo authentication.AuthenticationRepository - currentTime time.Time - clock func() time.Time - - client *fakes.FakeHttpClientInterface - ) - - BeforeEach(func() { - currentTime = time.Unix(0, 0) - clock = func() time.Time { return currentTime } - config = testconfig.NewRepository() - - ccGateway = NewCloudControllerGateway(config, clock, &testterm.FakeUI{}) - ccGateway.PollingThrottle = 3 * time.Millisecond - uaaGateway = NewUAAGateway(config, &testterm.FakeUI{}) - }) - - Describe("async timeout", func() { - Context("when the config has a positive async timeout", func() { - It("inherits the async timeout from the config", func() { - config.SetAsyncTimeout(9001) - ccGateway = NewCloudControllerGateway((config), time.Now, &testterm.FakeUI{}) - Expect(ccGateway.AsyncTimeout()).To(Equal(9001 * time.Minute)) - }) - }) - }) - - Describe("Connection errors", func() { - var oldNewHttpClient func(tr *http.Transport) HttpClientInterface - - BeforeEach(func() { - client = &fakes.FakeHttpClientInterface{} - - oldNewHttpClient = NewHttpClient - NewHttpClient = func(tr *http.Transport) HttpClientInterface { - return client - } - }) - - AfterEach(func() { - NewHttpClient = oldNewHttpClient - }) - - It("only retry when response body is nil and error occurred", func() { - client.DoReturns(&http.Response{Status: "internal error", StatusCode: 500}, errors.New("internal error")) - request, apiErr := ccGateway.NewRequest("GET", "https://example.com/v2/apps", "BEARER my-access-token", nil) - Expect(apiErr).ToNot(HaveOccurred()) - - _, apiErr = ccGateway.PerformRequest(request) - Expect(client.DoCallCount()).To(Equal(1)) - Expect(apiErr).To(HaveOccurred()) - }) - - It("Retries 3 times if we cannot contact the server", func() { - client.DoReturns(nil, errors.New("Connection refused")) - request, apiErr := ccGateway.NewRequest("GET", "https://example.com/v2/apps", "BEARER my-access-token", nil) - Expect(apiErr).ToNot(HaveOccurred()) - - _, apiErr = ccGateway.PerformRequest(request) - Expect(apiErr).To(HaveOccurred()) - Expect(client.DoCallCount()).To(Equal(3)) - }) - }) - - Describe("NewRequest", func() { - var ( - request *Request - apiErr error - ) - - Context("when the body is nil", func() { - BeforeEach(func() { - request, apiErr = ccGateway.NewRequest("GET", "https://example.com/v2/apps", "BEARER my-access-token", nil) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("does not use a ProgressReader as the SeekableBody", func() { - Expect(reflect.TypeOf(request.SeekableBody)).To(BeNil()) - }) - - It("sets the Authorization header", func() { - Expect(request.HttpReq.Header.Get("Authorization")).To(Equal("BEARER my-access-token")) - }) - - It("sets the accept header to application/json", func() { - Expect(request.HttpReq.Header.Get("accept")).To(Equal("application/json")) - }) - - It("sets the user agent header", func() { - Expect(request.HttpReq.Header.Get("User-Agent")).To(Equal("go-cli " + cf.Version + " / " + runtime.GOOS)) - }) - }) - - Context("when the body is a file", func() { - BeforeEach(func() { - f, _ := os.Open("../../fixtures/test.file") - request, apiErr = ccGateway.NewRequestForFile("PUT", "https://example.com/v2/apps", "BEARER my-access-token", f) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("Uses a ProgressReader as the SeekableBody", func() { - Expect(reflect.TypeOf(request.SeekableBody).String()).To(ContainSubstring("ProgressReader")) - }) - - }) - - }) - - Describe("CRUD methods", func() { - Describe("Delete", func() { - var apiServer *httptest.Server - - Describe("DeleteResourceSynchronously", func() { - var queryParams string - BeforeEach(func() { - apiServer = httptest.NewTLSServer(http.HandlerFunc(func(_ http.ResponseWriter, request *http.Request) { - queryParams = request.URL.RawQuery - })) - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - }) - - It("does not send the async=true flag", func() { - err := ccGateway.DeleteResourceSynchronously(apiServer.URL, "/v2/foobars/SOME_GUID") - Expect(err).NotTo(HaveOccurred()) - Expect(queryParams).ToNot(ContainSubstring("async=true")) - }) - - It("deletes a resource", func() { - err := ccGateway.DeleteResource(apiServer.URL, "/v2/foobars/SOME_GUID") - Expect(err).ToNot(HaveOccurred()) - }) - }) - - Context("when the config has an async timeout", func() { - BeforeEach(func() { - count := 0 - apiServer = httptest.NewTLSServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - switch request.URL.Path { - case "/v2/foobars/SOME_GUID": - writer.WriteHeader(http.StatusNoContent) - case "/v2/foobars/TIMEOUT": - currentTime = currentTime.Add(time.Minute * 31) - fmt.Fprintln(writer, ` -{ - "metadata": { - "guid": "8438916f-5c00-4d44-a19b-1df65abe9d52", - "created_at": "2014-05-15T19:15:01+00:00", - "url": "/v2/jobs/8438916f-5c00-4d44-a19b-1df65abe9d52" - }, - "entity": { - "guid": "8438916f-5c00-4d44-a19b-1df65abe9d52", - "status": "queued" - } -}`) - writer.WriteHeader(http.StatusAccepted) - case "/v2/jobs/8438916f-5c00-4d44-a19b-1df65abe9d52": - if count == 0 { - count++ - currentTime = currentTime.Add(time.Minute * 31) - - writer.WriteHeader(http.StatusOK) - fmt.Fprintln(writer, ` -{ - "entity": { - "guid": "8438916f-5c00-4d44-a19b-1df65abe9d52", - "status": "queued" - } -}`) - } else { - panic("FAIL") - } - default: - panic("shouldn't have made call to this URL: " + request.URL.Path) - } - })) - - config.SetAsyncTimeout(30) - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - }) - - AfterEach(func() { - apiServer.Close() - }) - - It("deletes a resource", func() { - err := ccGateway.DeleteResource(apiServer.URL, "/v2/foobars/SOME_GUID") - Expect(err).ToNot(HaveOccurred()) - }) - - Context("when the request would take longer than the async timeout", func() { - It("returns an error", func() { - apiErr := ccGateway.DeleteResource(apiServer.URL, "/v2/foobars/TIMEOUT") - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr).To(BeAssignableToTypeOf(errors.NewAsyncTimeoutError("http://some.url"))) - }) - }) - }) - }) - }) - - Describe("making an async request", func() { - var ( - jobStatus string - apiServer *httptest.Server - authServer *httptest.Server - statusChannel chan string - ) - - BeforeEach(func() { - jobStatus = "queued" - statusChannel = make(chan string, 10) - - apiServer = httptest.NewTLSServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - currentTime = currentTime.Add(time.Millisecond * 11) - - updateStatus, ok := <-statusChannel - if ok { - jobStatus = updateStatus - } - - switch request.URL.Path { - case "/v2/foo": - fmt.Fprintln(writer, `{ "metadata": { "url": "/v2/jobs/the-job-guid" } }`) - case "/v2/jobs/the-job-guid": - fmt.Fprintf(writer, ` - { - "entity": { - "status": "%s", - "error_details": { - "description": "he's dead, Jim" - } - } - }`, jobStatus) - default: - writer.WriteHeader(http.StatusInternalServerError) - fmt.Fprintf(writer, `"Unexpected request path '%s'"`, request.URL.Path) - } - })) - - authServer, _ = testnet.NewTLSServer([]testnet.TestRequest{}) - - config, authRepo = createAuthenticationRepository(apiServer, authServer) - ccGateway.SetTokenRefresher(authRepo) - - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - }) - - AfterEach(func() { - apiServer.Close() - authServer.Close() - }) - - It("returns the last response if the job completes before the timeout", func() { - go func() { - statusChannel <- "queued" - statusChannel <- "finished" - }() - - request, _ := ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), nil) - _, apiErr := ccGateway.PerformPollingRequestForJSONResponse(config.ApiEndpoint(), request, new(struct{}), 500*time.Millisecond) - Expect(apiErr).NotTo(HaveOccurred()) - }) - - It("returns an error with the right message when the job fails", func() { - go func() { - statusChannel <- "queued" - statusChannel <- "failed" - }() - - request, _ := ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), nil) - _, apiErr := ccGateway.PerformPollingRequestForJSONResponse(config.ApiEndpoint(), request, new(struct{}), 500*time.Millisecond) - Expect(apiErr.Error()).To(ContainSubstring("he's dead, Jim")) - }) - - It("returns an error if jobs takes longer than the timeout", func() { - go func() { - statusChannel <- "queued" - statusChannel <- "OHNOES" - }() - request, _ := ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), nil) - _, apiErr := ccGateway.PerformPollingRequestForJSONResponse(config.ApiEndpoint(), request, new(struct{}), 10*time.Millisecond) - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr).To(BeAssignableToTypeOf(errors.NewAsyncTimeoutError("http://some.url"))) - }) - }) - - Describe("when uploading a file", func() { - var ( - err error - request *Request - apiErr error - apiServer *httptest.Server - authServer *httptest.Server - fileToUpload *os.File - ) - - BeforeEach(func() { - apiServer = httptest.NewTLSServer(refreshTokenApiEndPoint( - `{ "code": 1000, "description": "Auth token is invalid" }`, - testnet.TestResponse{Status: http.StatusOK}, - )) - - authServer = httptest.NewTLSServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - fmt.Fprintln( - writer, - `{ "access_token": "new-access-token", "token_type": "bearer", "refresh_token": "new-refresh-token"}`) - })) - - fileToUpload, err = ioutil.TempFile("", "test-gateway") - strings.NewReader("expected body").WriteTo(fileToUpload) - - config, auth := createAuthenticationRepository(apiServer, authServer) - ccGateway.SetTokenRefresher(auth) - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - - request, apiErr = ccGateway.NewRequestForFile("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), fileToUpload) - }) - - AfterEach(func() { - apiServer.Close() - authServer.Close() - fileToUpload.Close() - os.Remove(fileToUpload.Name()) - }) - - It("sets the content length to the size of the file", func() { - Expect(err).NotTo(HaveOccurred()) - Expect(apiErr).NotTo(HaveOccurred()) - Expect(request.HttpReq.ContentLength).To(Equal(int64(13))) - }) - - Describe("when the access token expires during the upload", func() { - It("successfully re-sends the file on the second request", func() { - _, apiErr = ccGateway.PerformRequest(request) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("refreshing the auth token", func() { - var authServer *httptest.Server - - BeforeEach(func() { - authServer = httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{ - "access_token": "new-access-token", - "token_type": "bearer", - "refresh_token": "new-refresh-token" - }`) - })) - - uaaGateway.SetTrustedCerts(authServer.TLS.Certificates) - }) - - AfterEach(func() { - authServer.Close() - }) - - It("refreshes the token when UAA requests fail", func() { - apiServer := httptest.NewTLSServer(refreshTokenApiEndPoint( - `{ "error": "invalid_token", "error_description": "Auth token is invalid" }`, - testnet.TestResponse{Status: http.StatusOK}, - )) - defer apiServer.Close() - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - - config, auth := createAuthenticationRepository(apiServer, authServer) - uaaGateway.SetTokenRefresher(auth) - request, apiErr := uaaGateway.NewRequest("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), strings.NewReader("expected body")) - _, apiErr = uaaGateway.PerformRequest(request) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(config.AccessToken()).To(Equal("bearer new-access-token")) - Expect(config.RefreshToken()).To(Equal("new-refresh-token")) - }) - - It("refreshes the token when CC requests fail", func() { - apiServer := httptest.NewTLSServer(refreshTokenApiEndPoint( - `{ "code": 1000, "description": "Auth token is invalid" }`, - testnet.TestResponse{Status: http.StatusOK})) - defer apiServer.Close() - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - - config, auth := createAuthenticationRepository(apiServer, authServer) - ccGateway.SetTokenRefresher(auth) - request, apiErr := ccGateway.NewRequest("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), strings.NewReader("expected body")) - _, apiErr = ccGateway.PerformRequest(request) - - Expect(apiErr).NotTo(HaveOccurred()) - Expect(config.AccessToken()).To(Equal("bearer new-access-token")) - Expect(config.RefreshToken()).To(Equal("new-refresh-token")) - }) - - It("returns a failure response when token refresh fails after a UAA request", func() { - apiServer := httptest.NewTLSServer(refreshTokenApiEndPoint( - `{ "error": "invalid_token", "error_description": "Auth token is invalid" }`, - testnet.TestResponse{Status: http.StatusBadRequest, Body: `{ - "error": "333", "error_description": "bad request" - }`})) - defer apiServer.Close() - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - - config, auth := createAuthenticationRepository(apiServer, authServer) - uaaGateway.SetTokenRefresher(auth) - request, apiErr := uaaGateway.NewRequest("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), strings.NewReader("expected body")) - _, apiErr = uaaGateway.PerformRequest(request) - - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.(errors.HttpError).ErrorCode()).To(Equal("333")) - }) - - It("returns a failure response when token refresh fails after a CC request", func() { - apiServer := httptest.NewTLSServer(refreshTokenApiEndPoint( - `{ "code": 1000, "description": "Auth token is invalid" }`, - testnet.TestResponse{Status: http.StatusBadRequest, Body: `{ - "code": 333, "description": "bad request" - }`})) - defer apiServer.Close() - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - - config, auth := createAuthenticationRepository(apiServer, authServer) - ccGateway.SetTokenRefresher(auth) - request, apiErr := ccGateway.NewRequest("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), strings.NewReader("expected body")) - _, apiErr = ccGateway.PerformRequest(request) - - Expect(apiErr).To(HaveOccurred()) - Expect(apiErr.(errors.HttpError).ErrorCode()).To(Equal("333")) - }) - }) - - Describe("SSL certificate validation errors", func() { - var ( - request *Request - apiServer *httptest.Server - ) - - BeforeEach(func() { - apiServer = httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { - fmt.Fprintln(w, `{}`) - })) - request, _ = ccGateway.NewRequest("POST", apiServer.URL+"/v2/foo", "the-access-token", nil) - }) - - AfterEach(func() { - apiServer.Close() - }) - - Context("when SSL validation is enabled", func() { - It("returns an invalid cert error if the server's CA is unknown (e.g. cert is self-signed)", func() { - apiServer.TLS.Certificates = []tls.Certificate{testnet.MakeSelfSignedTLSCert()} - - _, apiErr := ccGateway.PerformRequest(request) - certErr, ok := apiErr.(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(certErr.URL).To(Equal(getHost(apiServer.URL))) - Expect(certErr.Reason).To(Equal("unknown authority")) - }) - - It("returns an invalid cert error if the server's cert doesn't match its host", func() { - apiServer.TLS.Certificates = []tls.Certificate{testnet.MakeTLSCertWithInvalidHost()} - - _, apiErr := ccGateway.PerformRequest(request) - certErr, ok := apiErr.(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(certErr.URL).To(Equal(getHost(apiServer.URL))) - if runtime.GOOS != "windows" { - Expect(certErr.Reason).To(Equal("not valid for the requested host")) - } - }) - - It("returns an invalid cert error if the server's cert has expired", func() { - apiServer.TLS.Certificates = []tls.Certificate{testnet.MakeExpiredTLSCert()} - - _, apiErr := ccGateway.PerformRequest(request) - certErr, ok := apiErr.(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(certErr.URL).To(Equal(getHost(apiServer.URL))) - if runtime.GOOS != "windows" { - Expect(certErr.Reason).To(Equal("")) - } - }) - }) - - Context("when SSL validation is disabled", func() { - BeforeEach(func() { - apiServer.TLS.Certificates = []tls.Certificate{testnet.MakeExpiredTLSCert()} - config.SetSSLDisabled(true) - }) - - It("succeeds", func() { - _, apiErr := ccGateway.PerformRequest(request) - Expect(apiErr).NotTo(HaveOccurred()) - }) - }) - - }) - - Describe("collecting warnings", func() { - var ( - apiServer *httptest.Server - authServer *httptest.Server - ) - - BeforeEach(func() { - apiServer = httptest.NewTLSServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - switch request.URL.Path { - case "/v2/happy": - fmt.Fprintln(writer, `{ "metadata": { "url": "/v2/jobs/the-job-guid" } }`) - case "/v2/warning1": - writer.Header().Add("X-Cf-Warnings", url.QueryEscape("Something not too awful has happened")) - fmt.Fprintln(writer, `{ "metadata": { "url": "/v2/jobs/the-job-guid" } }`) - case "/v2/warning2": - writer.Header().Add("X-Cf-Warnings", url.QueryEscape("Something a little awful")) - writer.Header().Add("X-Cf-Warnings", url.QueryEscape("Don't worry, but be careful")) - writer.WriteHeader(http.StatusInternalServerError) - fmt.Fprintf(writer, `{ "key": "value" }`) - } - })) - - authServer, _ = testnet.NewTLSServer([]testnet.TestRequest{}) - - config, authRepo = createAuthenticationRepository(apiServer, authServer) - ccGateway.SetTokenRefresher(authRepo) - - ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) - - config, authRepo = createAuthenticationRepository(apiServer, authServer) - }) - - AfterEach(func() { - apiServer.Close() - authServer.Close() - }) - - It("saves all X-Cf-Warnings headers and exposes them", func() { - request, _ := ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/happy", config.AccessToken(), nil) - ccGateway.PerformRequest(request) - request, _ = ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/warning1", config.AccessToken(), nil) - ccGateway.PerformRequest(request) - request, _ = ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/warning2", config.AccessToken(), nil) - ccGateway.PerformRequest(request) - - Expect(ccGateway.Warnings()).To(Equal( - []string{"Something not too awful has happened", "Something a little awful", "Don't worry, but be careful"}, - )) - }) - - It("defaults warnings to an empty slice", func() { - Expect(ccGateway.Warnings()).ToNot(BeNil()) - }) - }) -}) - -func getHost(urlString string) string { - url, err := url.Parse(urlString) - if err != nil { - panic(err) - } - return url.Host -} - -func refreshTokenApiEndPoint(unauthorizedBody string, secondReqResp testnet.TestResponse) http.HandlerFunc { - return func(writer http.ResponseWriter, request *http.Request) { - var jsonResponse string - - bodyBytes, err := ioutil.ReadAll(request.Body) - if err != nil || string(bodyBytes) != "expected body" { - writer.WriteHeader(http.StatusInternalServerError) - return - } - - switch request.Header.Get("Authorization") { - case "bearer initial-access-token": - writer.WriteHeader(http.StatusUnauthorized) - jsonResponse = unauthorizedBody - case "bearer new-access-token": - writer.WriteHeader(secondReqResp.Status) - jsonResponse = secondReqResp.Body - default: - writer.WriteHeader(http.StatusInternalServerError) - } - - fmt.Fprintln(writer, jsonResponse) - } -} - -func createAuthenticationRepository(apiServer *httptest.Server, authServer *httptest.Server) (core_config.ReadWriter, authentication.AuthenticationRepository) { - config := testconfig.NewRepository() - config.SetAuthenticationEndpoint(authServer.URL) - config.SetApiEndpoint(apiServer.URL) - config.SetAccessToken("bearer initial-access-token") - config.SetRefreshToken("initial-refresh-token") - - authGateway := NewUAAGateway(config, &testterm.FakeUI{}) - authGateway.SetTrustedCerts(authServer.TLS.Certificates) - - authenticator := authentication.NewUAAAuthenticationRepository(authGateway, config) - - return config, authenticator -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/http_client.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/http_client.go deleted file mode 100644 index dffe520..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/http_client.go +++ /dev/null @@ -1,95 +0,0 @@ -package net - -import ( - _ "crypto/sha512" - "crypto/x509" - "net/http" - "net/http/httputil" - "net/url" - "strings" - "time" - - "code.google.com/p/go.net/websocket" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/trace" -) - -type HttpClientInterface interface { - Do(req *http.Request) (resp *http.Response, err error) -} - -var NewHttpClient = func(tr *http.Transport) HttpClientInterface { - return &http.Client{ - Transport: tr, - CheckRedirect: PrepareRedirect, - } -} - -func PrepareRedirect(req *http.Request, via []*http.Request) error { - if len(via) > 1 { - return errors.New(T("stopped after 1 redirect")) - } - - prevReq := via[len(via)-1] - copyHeaders(prevReq, req) - dumpRequest(req) - - return nil -} - -func copyHeaders(from *http.Request, to *http.Request) { - for key, values := range from.Header { - // do not copy POST-specific headers - if key != "Content-Type" && key != "Content-Length" { - to.Header.Set(key, strings.Join(values, ",")) - } - } -} - -func dumpRequest(req *http.Request) { - shouldDisplayBody := !strings.Contains(req.Header.Get("Content-Type"), "multipart/form-data") - dumpedRequest, err := httputil.DumpRequest(req, shouldDisplayBody) - if err != nil { - trace.Logger.Printf(T("Error dumping request\n{{.Err}}\n", map[string]interface{}{"Err": err})) - } else { - trace.Logger.Printf("\n%s [%s]\n%s\n", terminal.HeaderColor(T("REQUEST:")), time.Now().Format(time.RFC3339), trace.Sanitize(string(dumpedRequest))) - if !shouldDisplayBody { - trace.Logger.Println(T("[MULTIPART/FORM-DATA CONTENT HIDDEN]")) - } - } -} - -func dumpResponse(res *http.Response) { - dumpedResponse, err := httputil.DumpResponse(res, true) - if err != nil { - trace.Logger.Printf(T("Error dumping response\n{{.Err}}\n", map[string]interface{}{"Err": err})) - } else { - trace.Logger.Printf("\n%s [%s]\n%s\n", terminal.HeaderColor(T("RESPONSE:")), time.Now().Format(time.RFC3339), trace.Sanitize(string(dumpedResponse))) - } -} - -func WrapNetworkErrors(host string, err error) error { - var innerErr error - switch typedErr := err.(type) { - case *url.Error: - innerErr = typedErr.Err - case *websocket.DialError: - innerErr = typedErr.Err - } - - if innerErr != nil { - switch innerErr.(type) { - case x509.UnknownAuthorityError: - return errors.NewInvalidSSLCert(host, T("unknown authority")) - case x509.HostnameError: - return errors.NewInvalidSSLCert(host, T("not valid for the requested host")) - case x509.CertificateInvalidError: - return errors.NewInvalidSSLCert(host, "") - } - } - - return errors.NewWithError(T("Error performing request"), err) - -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/http_client_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/http_client_test.go deleted file mode 100644 index 582f0b7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/http_client_test.go +++ /dev/null @@ -1,124 +0,0 @@ -package net_test - -import ( - "code.google.com/p/go.net/websocket" - "crypto/x509" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/net" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "net" - "net/http" - "net/url" - "syscall" -) - -var _ = Describe("HTTP Client", func() { - - Describe("PrepareRedirect", func() { - It("transfers original headers", func() { - originalReq, err := http.NewRequest("GET", "/foo", nil) - Expect(err).NotTo(HaveOccurred()) - originalReq.Header.Set("Authorization", "my-auth-token") - originalReq.Header.Set("Accept", "application/json") - - redirectReq, err := http.NewRequest("GET", "/bar", nil) - Expect(err).NotTo(HaveOccurred()) - - via := []*http.Request{originalReq} - - err = PrepareRedirect(redirectReq, via) - - Expect(err).NotTo(HaveOccurred()) - Expect(redirectReq.Header.Get("Authorization")).To(Equal("my-auth-token")) - Expect(redirectReq.Header.Get("Accept")).To(Equal("application/json")) - }) - - It("does not transfer POST-specific headers", func() { - originalReq, err := http.NewRequest("POST", "/foo", nil) - Expect(err).NotTo(HaveOccurred()) - originalReq.Header.Set("Content-Type", "application/json") - originalReq.Header.Set("Content-Length", "100") - - redirectReq, err := http.NewRequest("GET", "/bar", nil) - Expect(err).NotTo(HaveOccurred()) - - via := []*http.Request{originalReq} - - err = PrepareRedirect(redirectReq, via) - - Expect(err).NotTo(HaveOccurred()) - Expect(redirectReq.Header.Get("Content-Type")).To(Equal("")) - Expect(redirectReq.Header.Get("Content-Length")).To(Equal("")) - }) - - It("fails after one redirect", func() { - firstReq, err := http.NewRequest("GET", "/foo", nil) - Expect(err).NotTo(HaveOccurred()) - - secondReq, err := http.NewRequest("GET", "/manchu", nil) - Expect(err).NotTo(HaveOccurred()) - - redirectReq, err := http.NewRequest("GET", "/bar", nil) - Expect(err).NotTo(HaveOccurred()) - - via := []*http.Request{firstReq, secondReq} - - err = PrepareRedirect(redirectReq, via) - - Expect(err).To(HaveOccurred()) - }) - }) - - Describe("WrapNetworkErrors", func() { - It("replaces http unknown authority errors with InvalidSSLCert errors", func() { - err, ok := WrapNetworkErrors("example.com", &url.Error{Err: x509.UnknownAuthorityError{}}).(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(err).To(HaveOccurred()) - }) - - It("replaces http hostname errors with InvalidSSLCert errors", func() { - err, ok := WrapNetworkErrors("example.com", &url.Error{Err: x509.HostnameError{}}).(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(err).To(HaveOccurred()) - }) - - It("replaces http certificate invalid errors with InvalidSSLCert errors", func() { - err, ok := WrapNetworkErrors("example.com", &url.Error{Err: x509.CertificateInvalidError{}}).(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(err).To(HaveOccurred()) - }) - - It("replaces websocket unknown authority errors with InvalidSSLCert errors", func() { - err, ok := WrapNetworkErrors("example.com", &websocket.DialError{Err: x509.UnknownAuthorityError{}}).(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(err).To(HaveOccurred()) - }) - - It("replaces websocket hostname with InvalidSSLCert errors", func() { - err, ok := WrapNetworkErrors("example.com", &websocket.DialError{Err: x509.HostnameError{}}).(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(err).To(HaveOccurred()) - }) - - It("replaces http websocket certificate invalid errors with InvalidSSLCert errors", func() { - err, ok := WrapNetworkErrors("example.com", &websocket.DialError{Err: x509.CertificateInvalidError{}}).(*errors.InvalidSSLCert) - Expect(ok).To(BeTrue()) - Expect(err).To(HaveOccurred()) - }) - - It("provides a nice message for connection errors", func() { - underlyingErr := syscall.Errno(61) - err := WrapNetworkErrors("example.com", &url.Error{Err: &net.OpError{Err: underlyingErr}}) - Expect(err.Error()).To(ContainSubstring("Error performing request")) - }) - - It("wraps other errors in a generic error type", func() { - err := WrapNetworkErrors("example.com", errors.New("whatever")) - Expect(err).To(HaveOccurred()) - - _, ok := err.(*errors.InvalidSSLCert) - Expect(ok).To(BeFalse()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/net_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/net_suite_test.go deleted file mode 100644 index 85e9675..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/net_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package net_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestNet(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Net Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/paginated_resources.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/paginated_resources.go deleted file mode 100644 index 0611456..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/paginated_resources.go +++ /dev/null @@ -1,30 +0,0 @@ -package net - -import ( - "encoding/json" - "reflect" -) - -func NewPaginatedResources(exampleResource interface{}) PaginatedResources { - return PaginatedResources{ - resourceType: reflect.TypeOf(exampleResource), - } -} - -type PaginatedResources struct { - NextURL string `json:"next_url"` - ResourcesBytes json.RawMessage `json:"resources"` - resourceType reflect.Type -} - -func (this PaginatedResources) Resources() ([]interface{}, error) { - slicePtr := reflect.New(reflect.SliceOf(this.resourceType)) - err := json.Unmarshal([]byte(this.ResourcesBytes), slicePtr.Interface()) - slice := reflect.Indirect(slicePtr) - - contents := make([]interface{}, 0, slice.Len()) - for i := 0; i < slice.Len(); i++ { - contents = append(contents, slice.Index(i).Interface()) - } - return contents, err -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/progress_reader_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/progress_reader_test.go deleted file mode 100644 index b03e60e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/progress_reader_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package net_test - -import ( - "os" - "time" - - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/net" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ProgressReader", func() { - - var ( - testFile *os.File - err error - progressReader *ProgressReader - ui *testterm.FakeUI - b []byte - fileStat os.FileInfo - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - testFile, err = os.Open("../../fixtures/test.file") - Expect(err).ToNot(HaveOccurred()) - fileStat, err = testFile.Stat() - Expect(err).ToNot(HaveOccurred()) - - b = make([]byte, 1024) - progressReader = NewProgressReader(testFile, ui, 1*time.Millisecond) - progressReader.SetTotalSize(fileStat.Size()) - }) - - It("prints progress while content is being read", func() { - for { - time.Sleep(50 * time.Microsecond) - _, err := progressReader.Read(b) - if err != nil { - break - } - } - - Expect(ui.UncapturedOutput).To(ContainSubstrings([]string{"\r", "uploaded..."})) - Expect(ui.UncapturedOutput).To(ContainSubstrings([]string{"\r "})) - Expect(ui.Outputs).To(ContainSubstrings([]string{"\rDone "})) - }) - - It("reads the correct number of bytes", func() { - bytesRead := 0 - - for { - n, err := progressReader.Read(b) - if err != nil { - break - } - - bytesRead += n - } - - Expect(int64(bytesRead)).To(Equal(fileStat.Size())) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/uaa_gateway.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/uaa_gateway.go deleted file mode 100644 index 9076042..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/uaa_gateway.go +++ /dev/null @@ -1,29 +0,0 @@ -package net - -import ( - "encoding/json" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type uaaErrorResponse struct { - Code string `json:"error"` - Description string `json:"error_description"` -} - -var uaaErrorHandler = func(statusCode int, body []byte) error { - response := uaaErrorResponse{} - json.Unmarshal(body, &response) - - if response.Code == "invalid_token" { - return errors.NewInvalidTokenError(response.Description) - } else { - return errors.NewHttpError(statusCode, response.Code, response.Description) - } -} - -func NewUAAGateway(config core_config.Reader, ui terminal.UI) Gateway { - return newGateway(uaaErrorHandler, config, ui) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/uaa_gateway_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/uaa_gateway_test.go deleted file mode 100644 index c199ba5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/uaa_gateway_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package net_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - . "github.com/cloudfoundry/cli/cf/net" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var failingUAARequest = func(writer http.ResponseWriter, request *http.Request) { - writer.WriteHeader(http.StatusBadRequest) - jsonResponse := `{ "error": "foo", "error_description": "The foo is wrong..." }` - fmt.Fprintln(writer, jsonResponse) -} - -var _ = Describe("UAA Gateway", func() { - var gateway Gateway - var config core_config.Reader - - BeforeEach(func() { - config = testconfig.NewRepository() - gateway = NewUAAGateway(config, &testterm.FakeUI{}) - }) - - It("parses error responses", func() { - ts := httptest.NewTLSServer(http.HandlerFunc(failingUAARequest)) - defer ts.Close() - gateway.SetTrustedCerts(ts.TLS.Certificates) - - request, apiErr := gateway.NewRequest("GET", ts.URL, "TOKEN", nil) - _, apiErr = gateway.PerformRequest(request) - - Expect(apiErr).NotTo(BeNil()) - Expect(apiErr.Error()).To(ContainSubstring("The foo is wrong")) - Expect(apiErr.(errors.HttpError).ErrorCode()).To(ContainSubstring("foo")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/warnings_collector.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/warnings_collector.go deleted file mode 100644 index 1bb9034..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/warnings_collector.go +++ /dev/null @@ -1,59 +0,0 @@ -package net - -import ( - "os" - "strings" - - "github.com/cloudfoundry/cli/cf/terminal" -) - -type WarningsCollector struct { - ui terminal.UI - warning_producers []WarningProducer -} - -type WarningProducer interface { - Warnings() []string -} - -func NewWarningsCollector(ui terminal.UI, warning_producers ...WarningProducer) (warnings_collector WarningsCollector) { - warnings_collector.ui = ui - warnings_collector.warning_producers = warning_producers - return -} - -func (warnings_collector WarningsCollector) PrintWarnings() { - warnings := []string{} - for _, warning_producer := range warnings_collector.warning_producers { - for _, warning := range warning_producer.Warnings() { - warnings = append(warnings, warning) - } - } - - if os.Getenv("CF_RAISE_ERROR_ON_WARNINGS") != "" { - if len(warnings) > 0 { - panic(strings.Join(warnings, "\n")) - } - } - - warnings = warnings_collector.removeDuplicates(warnings) - - for _, warning := range warnings { - warnings_collector.ui.Warn(warning) - } -} - -func (warnings_collector WarningsCollector) removeDuplicates(stringArray []string) []string { - length := len(stringArray) - 1 - for i := 0; i < length; i++ { - for j := i + 1; j <= length; j++ { - if stringArray[i] == stringArray[j] { - stringArray[j] = stringArray[length] - stringArray = stringArray[0:length] - length-- - j-- - } - } - } - return stringArray -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/warnings_collector_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/warnings_collector_test.go deleted file mode 100644 index cfa487c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/warnings_collector_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package net_test - -import ( - "os" - - "github.com/cloudfoundry/cli/cf/net" - testnet "github.com/cloudfoundry/cli/testhelpers/net" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("WarningsCollector", func() { - var ( - ui *testterm.FakeUI - oldRaiseErrorValue string - warningsCollector net.WarningsCollector - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - }) - - Describe("PrintWarnings", func() { - BeforeEach(func() { - oldRaiseErrorValue = os.Getenv("CF_RAISE_ERROR_ON_WARNINGS") - }) - - AfterEach(func() { - os.Setenv("CF_RAISE_ERROR_ON_WARNINGS", oldRaiseErrorValue) - }) - - Context("when the CF_RAISE_ERROR_ON_WARNINGS environment variable is set", func() { - BeforeEach(func() { - os.Setenv("CF_RAISE_ERROR_ON_WARNINGS", "true") - }) - - Context("when there are warnings", func() { - BeforeEach(func() { - warning_producer_one := testnet.NewWarningProducer([]string{"Hello", "Darling"}) - warning_producer_two := testnet.NewWarningProducer([]string{"Goodbye", "Sweetie"}) - warning_producer_three := testnet.NewWarningProducer(nil) - warningsCollector = net.NewWarningsCollector(ui, warning_producer_one, warning_producer_two, warning_producer_three) - }) - - It("panics with an error that contains all the warnings", func() { - Expect(warningsCollector.PrintWarnings).To(Panic()) - }) - }) - - Context("when there are no warnings", func() { - BeforeEach(func() { - warningsCollector = net.NewWarningsCollector(ui) - }) - - It("does not panic", func() { - Expect(warningsCollector.PrintWarnings).NotTo(Panic()) - }) - - }) - }) - - Context("when the CF_RAISE_ERROR_ON_WARNINGS environment variable is not set", func() { - BeforeEach(func() { - os.Setenv("CF_RAISE_ERROR_ON_WARNINGS", "") - }) - - It("does not panic", func() { - warning_producer_one := testnet.NewWarningProducer([]string{"Hello", "Darling"}) - warning_producer_two := testnet.NewWarningProducer([]string{"Goodbye", "Sweetie"}) - warning_producer_three := testnet.NewWarningProducer(nil) - warningsCollector := net.NewWarningsCollector(ui, warning_producer_one, warning_producer_two, warning_producer_three) - - Expect(warningsCollector.PrintWarnings).NotTo(Panic()) - }) - - It("does not print out duplicate warnings", func() { - warning_producer_one := testnet.NewWarningProducer([]string{"Hello Darling"}) - warning_producer_two := testnet.NewWarningProducer([]string{"Hello Darling"}) - warningsCollector := net.NewWarningsCollector(ui, warning_producer_one, warning_producer_two) - - warningsCollector.PrintWarnings() - Expect(len(ui.Outputs)).To(Equal(1)) - Expect(ui.Outputs).To(ContainSubstrings([]string{"Hello Darling"})) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer.go deleted file mode 100644 index 2b076c9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer.go +++ /dev/null @@ -1,61 +0,0 @@ -package panic_printer - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/terminal" -) - -var UI terminal.UI - -func DisplayCrashDialog(err interface{}, commandArgs string, stackTrace string) { - if err != nil && err != terminal.QuietPanic { - switch err := err.(type) { - case errors.Exception: - if err.DisplayCrashDialog { - printCrashDialog(err.Message, commandArgs, stackTrace) - } else { - fmt.Println(err.Message) - } - case error: - printCrashDialog(err.Error(), commandArgs, stackTrace) - case string: - printCrashDialog(err, commandArgs, stackTrace) - default: - printCrashDialog("An unexpected type of error", commandArgs, stackTrace) - } - } -} - -func CrashDialog(errorMessage string, commandArgs string, stackTrace string) string { - formattedString := ` - - Aww shucks. - - Something completely unexpected happened. This is a bug in %s. - Please file this bug : https://github.com/cloudfoundry/cli/issues - Tell us that you ran this command: - - %s - - using this version of the CLI: - - %s - - and that this error occurred: - - %s - - and this stack trace: - - %s -` - - return fmt.Sprintf(formattedString, cf.Name(), commandArgs, cf.Version, errorMessage, stackTrace) -} - -func printCrashDialog(errorMessage string, commandArgs string, stackTrace string) { - UI.Say(CrashDialog(errorMessage, commandArgs, stackTrace)) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer_suite_test.go deleted file mode 100644 index 1c379e1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package panic_printer_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPanicHandler(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "PanicHandler Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer_test.go deleted file mode 100644 index 58c9cf8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/panic_printer/panic_printer_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package panic_printer_test - -import ( - "github.com/cloudfoundry/cli/cf" - . "github.com/cloudfoundry/cli/cf/panic_printer" - "github.com/cloudfoundry/cli/cf/terminal" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Panic Printer", func() { - var ui *testterm.FakeUI - - BeforeEach(func() { - UI = &testterm.FakeUI{} - ui = UI.(*testterm.FakeUI) - }) - - Describe("DisplayCrashDialog", func() { - Context("when given an err set to QuietPanic", func() { - It("should not print anything", func() { - err := terminal.QuietPanic - DisplayCrashDialog(err, "some command", "some trace") - Expect(len(ui.Outputs)).To(Equal(0)) - }) - }) - }) - - Describe("CrashDialog", func() { - var errMsg = "this is an error" - var commandArgs = "command line arguments" - var stackTrace = "1000 bottles of beer" - - It("should return a string containing the default error text", func() { - Expect(CrashDialog(errMsg, commandArgs, stackTrace)).To(ContainSubstring("Please file this bug : https://github.com/cloudfoundry/cli/issues")) - }) - - It("should return the command name", func() { - Expect(CrashDialog(errMsg, commandArgs, stackTrace)).To(ContainSubstring(cf.Name())) - }) - - It("should return the inputted arguments", func() { - Expect(CrashDialog(errMsg, commandArgs, stackTrace)).To(ContainSubstring("command line arguments")) - }) - - It("should return the specific error message", func() { - Expect(CrashDialog(errMsg, commandArgs, stackTrace)).To(ContainSubstring("this is an error")) - }) - - It("should return the stack trace", func() { - Expect(CrashDialog(errMsg, commandArgs, stackTrace)).To(ContainSubstring("1000 bottles of beer")) - }) - - It("should print the cli version", func() { - Expect(CrashDialog(errMsg, commandArgs, stackTrace)).To(ContainSubstring(cf.Version)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/api_endpoint.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/api_endpoint.go deleted file mode 100644 index 43df941..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/api_endpoint.go +++ /dev/null @@ -1,33 +0,0 @@ -package requirements - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type ApiEndpointRequirement struct { - ui terminal.UI - config core_config.Reader -} - -func NewApiEndpointRequirement(ui terminal.UI, config core_config.Reader) ApiEndpointRequirement { - return ApiEndpointRequirement{ui, config} -} - -func (req ApiEndpointRequirement) Execute() (success bool) { - if req.config.ApiEndpoint() == "" { - loginTip := terminal.CommandColor(fmt.Sprintf(T("{{.CFName}} login", map[string]interface{}{"CFName": cf.Name()}))) - apiTip := terminal.CommandColor(fmt.Sprintf(T("{{.CFName}} api", map[string]interface{}{"CFName": cf.Name()}))) - req.ui.Say(T("No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", - map[string]interface{}{ - "LoginTip": loginTip, - "APITip": apiTip, - })) - return false - } - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/api_endpoint_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/api_endpoint_test.go deleted file mode 100644 index f5f9d0b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/api_endpoint_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package requirements_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/requirements" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("ApiEndpointRequirement", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - config = testconfig.NewRepository() - }) - - It("succeeds when given a config with an API endpoint", func() { - config.SetApiEndpoint("api.example.com") - req := NewApiEndpointRequirement(ui, config) - success := req.Execute() - Expect(success).To(BeTrue()) - }) - - It("fails when given a config without an API endpoint", func() { - req := NewApiEndpointRequirement(ui, config) - success := req.Execute() - Expect(success).To(BeFalse()) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"No API endpoint"})) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/application.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/application.go deleted file mode 100644 index bf5f318..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/application.go +++ /dev/null @@ -1,48 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api/applications" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type ApplicationRequirement interface { - Requirement - SetApplicationName(string) - GetApplication() models.Application -} - -type applicationApiRequirement struct { - name string - ui terminal.UI - appRepo applications.ApplicationRepository - application models.Application -} - -func NewApplicationRequirement(name string, ui terminal.UI, aR applications.ApplicationRepository) *applicationApiRequirement { - req := &applicationApiRequirement{} - req.name = name - req.ui = ui - req.appRepo = aR - return req -} - -func (req *applicationApiRequirement) SetApplicationName(name string) { - req.name = name -} - -func (req *applicationApiRequirement) Execute() (success bool) { - var apiErr error - req.application, apiErr = req.appRepo.Read(req.name) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *applicationApiRequirement) GetApplication() models.Application { - return req.application -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/application_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/application_test.go deleted file mode 100644 index 14ae47a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/application_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package requirements_test - -import ( - testApplication "github.com/cloudfoundry/cli/cf/api/applications/fakes" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ApplicationRequirement", func() { - var ui *testterm.FakeUI - var appRepo *testApplication.FakeApplicationRepository - - BeforeEach(func() { - ui = new(testterm.FakeUI) - appRepo = &testApplication.FakeApplicationRepository{} - }) - - It("succeeds when an app with the given name exists", func() { - app := models.Application{} - app.Name = "my-app" - app.Guid = "my-app-guid" - appRepo.ReadReturns.App = app - - appReq := NewApplicationRequirement("foo", ui, appRepo) - - Expect(appReq.Execute()).To(BeTrue()) - Expect(appRepo.ReadArgs.Name).To(Equal("foo")) - Expect(appReq.GetApplication()).To(Equal(app)) - }) - - It("fails when an app with the given name cannot be found", func() { - appRepo.ReadReturns.Error = errors.NewModelNotFoundError("app", "foo") - - testassert.AssertPanic(testterm.QuietPanic, func() { - NewApplicationRequirement("foo", ui, appRepo).Execute() - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/buildpack.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/buildpack.go deleted file mode 100644 index c1a0d08..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/buildpack.go +++ /dev/null @@ -1,43 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type BuildpackRequirement interface { - Requirement - GetBuildpack() models.Buildpack -} - -type buildpackApiRequirement struct { - name string - ui terminal.UI - buildpackRepo api.BuildpackRepository - buildpack models.Buildpack -} - -func NewBuildpackRequirement(name string, ui terminal.UI, bR api.BuildpackRepository) (req *buildpackApiRequirement) { - req = new(buildpackApiRequirement) - req.name = name - req.ui = ui - req.buildpackRepo = bR - return -} - -func (req *buildpackApiRequirement) Execute() (success bool) { - var apiErr error - req.buildpack, apiErr = req.buildpackRepo.FindByName(req.name) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *buildpackApiRequirement) GetBuildpack() models.Buildpack { - return req.buildpack -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/buildpack_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/buildpack_test.go deleted file mode 100644 index df73586..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/buildpack_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package requirements_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BuildpackRequirement", func() { - var ( - ui *testterm.FakeUI - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - }) - - It("succeeds when a buildpack with the given name exists", func() { - buildpack := models.Buildpack{Name: "my-buildpack"} - buildpackRepo := &testapi.FakeBuildpackRepository{FindByNameBuildpack: buildpack} - - buildpackReq := NewBuildpackRequirement("my-buildpack", ui, buildpackRepo) - - Expect(buildpackReq.Execute()).To(BeTrue()) - Expect(buildpackRepo.FindByNameName).To(Equal("my-buildpack")) - Expect(buildpackReq.GetBuildpack()).To(Equal(buildpack)) - }) - - It("fails when the buildpack cannot be found", func() { - buildpackRepo := &testapi.FakeBuildpackRepository{FindByNameNotFound: true} - - testassert.AssertPanic(testterm.QuietPanic, func() { - NewBuildpackRequirement("foo", ui, buildpackRepo).Execute() - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/cc_api_version.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/cc_api_version.go deleted file mode 100644 index 8e0e67e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/cc_api_version.go +++ /dev/null @@ -1,79 +0,0 @@ -package requirements - -import ( - "strconv" - "strings" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type CCApiVersionRequirement struct { - ui terminal.UI - config core_config.Reader - commandName string - major int - minor int - patch int -} - -func NewCCApiVersionRequirement(ui terminal.UI, config core_config.Reader, commandName string, major, minor, patch int) CCApiVersionRequirement { - return CCApiVersionRequirement{ui, config, commandName, major, minor, patch} -} - -func (req CCApiVersionRequirement) Execute() bool { - versions := strings.Split(req.config.ApiVersion(), ".") - - if len(versions) != 3 { - return true - } - - majorStr := versions[0] - major, err := strconv.Atoi(majorStr) - if err != nil { - return true - } - - minorStr := versions[1] - minor, err := strconv.Atoi(minorStr) - if err != nil { - return true - } - - patchStr := versions[2] - patch, err := strconv.Atoi(patchStr) - if err != nil { - return true - } - - if major > req.major { - return true - } else if major < req.major { - return false - } - - if minor > req.minor { - return true - } else if minor < req.minor { - return false - } - - if patch >= req.patch { - return true - } - - req.ui.Say(terminal.FailureColor(T("FAILED"))) - req.ui.Say(T("Current CF CLI version {{.Version}}", map[string]interface{}{"Version": cf.Version})) - req.ui.Say(T("Current CF API version {{.ApiVersion}}", map[string]interface{}{"ApiVersion": req.config.ApiVersion()})) - req.ui.Say(T("To use the {{.CommandName}} feature, you need to upgrade the CF API to at least {{.MinApiVersionMajor}}.{{.MinApiVersionMinor}}.{{.MinApiVersionPatch}}", - map[string]interface{}{ - "CommandName": req.commandName, - "MinApiVersionMajor": req.major, - "MinApiVersionMinor": req.minor, - "MinApiVersionPatch": req.patch, - })) - - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/cc_api_version_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/cc_api_version_test.go deleted file mode 100644 index d9226d6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/cc_api_version_test.go +++ /dev/null @@ -1,214 +0,0 @@ -package requirements_test - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/requirements" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("CcApiVersion", func() { - var ( - ui *testterm.FakeUI - config core_config.Repository - req CCApiVersionRequirement - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - config = testconfig.NewRepository() - }) - - Describe("success", func() { - Describe("when the cc api version has only major version", func() { - BeforeEach(func() { - config.SetApiVersion("1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 0, 0) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc api version has only major and minor versions", func() { - BeforeEach(func() { - config.SetApiVersion("1.1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 1, 0) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc api version has three dots", func() { - BeforeEach(func() { - config.SetApiVersion("1.1.1.1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 1, 1) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc major version is trash", func() { - BeforeEach(func() { - config.SetApiVersion("garbage.1.1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 0, 1, 1) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc minor version is trash", func() { - BeforeEach(func() { - config.SetApiVersion("1.garbage.1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 0, 1) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc patch version is trash", func() { - BeforeEach(func() { - config.SetApiVersion("1.1.garbage") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 1, 0) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when cc major version is greater than the required major version", func() { - BeforeEach(func() { - config.SetApiVersion("2.0.0") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 0, 0) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when cc minor version is greater than the require minor version", func() { - BeforeEach(func() { - config.SetApiVersion("2.1.0") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 0, 0) - - }) - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when cc patch version is greater than the required patch version", func() { - BeforeEach(func() { - config.SetApiVersion("2.1.1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 1, 0) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc major, minor, and patch are equal to the required versions", func() { - BeforeEach(func() { - config.SetApiVersion("2.1.1") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 1, 1) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the cc major version is not higher than require and the minor and patch are", func() { - BeforeEach(func() { - config.SetApiVersion("9.2.2") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 9, 9) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Describe("when the major and minor versions are higher than required and the patch is not", func() { - BeforeEach(func() { - config.SetApiVersion("9.9.2") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 2, 9) - }) - - It("should pass", func() { - Expect(req.Execute()).To(BeTrue()) - }) - }) - }) - - Describe("failure", func() { - Describe("when cc major version is less than the required major version", func() { - BeforeEach(func() { - config.SetApiVersion("1.0.0") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 0, 0) - }) - - It("should fail", func() { - Expect(req.Execute()).To(BeFalse()) - }) - }) - - Describe("when cc minor version is less than the required minor version", func() { - BeforeEach(func() { - config.SetApiVersion("2.0.0") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 1, 0) - }) - - It("should fail", func() { - Expect(req.Execute()).To(BeFalse()) - }) - }) - - Describe("when cc patch version is less than the required patch version", func() { - BeforeEach(func() { - config.SetApiVersion("2.1.0") - req = NewCCApiVersionRequirement(ui, config, "command-name", 2, 1, 1) - }) - - It("should fail", func() { - Expect(req.Execute()).To(BeFalse()) - }) - }) - - Describe("output", func() { - BeforeEach(func() { - config.SetApiVersion("1.1.0") - req = NewCCApiVersionRequirement(ui, config, "command-name", 1, 1, 1) - req.Execute() - }) - - It("should write to the ui", func() { - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{fmt.Sprintf("Current CF CLI version %s", cf.Version)}, - []string{"Current CF API version 1.1.0"}, - []string{"To use the command-name feature, you need to upgrade the CF API to at least 1.1.1"}, - )) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/domain.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/domain.go deleted file mode 100644 index 9fd2600..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/domain.go +++ /dev/null @@ -1,46 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type DomainRequirement interface { - Requirement - GetDomain() models.DomainFields -} - -type domainApiRequirement struct { - name string - ui terminal.UI - config core_config.Reader - domainRepo api.DomainRepository - domain models.DomainFields -} - -func NewDomainRequirement(name string, ui terminal.UI, config core_config.Reader, domainRepo api.DomainRepository) (req *domainApiRequirement) { - req = new(domainApiRequirement) - req.name = name - req.ui = ui - req.config = config - req.domainRepo = domainRepo - return -} - -func (req *domainApiRequirement) Execute() bool { - var apiErr error - req.domain, apiErr = req.domainRepo.FindByNameInOrg(req.name, req.config.OrganizationFields().Guid) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *domainApiRequirement) GetDomain() models.DomainFields { - return req.domain -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/domain_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/domain_test.go deleted file mode 100644 index 8be53b2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/domain_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package requirements_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/errors" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("DomainRequirement", func() { - var config core_config.ReadWriter - var ui *testterm.FakeUI - - BeforeEach(func() { - ui = new(testterm.FakeUI) - config = testconfig.NewRepository() - config.SetOrganizationFields(models.OrganizationFields{Guid: "the-org-guid"}) - }) - - It("succeeds when the domain is found", func() { - domain := models.DomainFields{Name: "example.com", Guid: "domain-guid"} - domainRepo := &testapi.FakeDomainRepository{FindByNameInOrgDomain: []models.DomainFields{domain}} - domainReq := NewDomainRequirement("example.com", ui, config, domainRepo) - success := domainReq.Execute() - - Expect(success).To(BeTrue()) - Expect(domainRepo.FindByNameInOrgName).To(Equal("example.com")) - Expect(domainRepo.FindByNameInOrgGuid).To(Equal("the-org-guid")) - Expect(domainReq.GetDomain()).To(Equal(domain)) - }) - - It("fails when the domain is not found", func() { - domainRepo := &testapi.FakeDomainRepository{FindByNameInOrgApiResponse: errors.NewModelNotFoundError("Domain", "")} - domainReq := NewDomainRequirement("example.com", ui, config, domainRepo) - - testassert.AssertPanic(testterm.QuietPanic, func() { - domainReq.Execute() - }) - }) - - It("fails when an error occurs fetching the domain", func() { - domainRepo := &testapi.FakeDomainRepository{FindByNameInOrgApiResponse: errors.NewWithError("", errors.New(""))} - domainReq := NewDomainRequirement("example.com", ui, config, domainRepo) - - testassert.AssertPanic(testterm.QuietPanic, func() { - domainReq.Execute() - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/factory.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/factory.go deleted file mode 100644 index c0ded65..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/factory.go +++ /dev/null @@ -1,132 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type Requirement interface { - Execute() (success bool) -} - -type Factory interface { - NewApplicationRequirement(name string) ApplicationRequirement - NewServiceInstanceRequirement(name string) ServiceInstanceRequirement - NewLoginRequirement() Requirement - NewSpaceRequirement(name string) SpaceRequirement - NewTargetedSpaceRequirement() Requirement - NewTargetedOrgRequirement() TargetedOrgRequirement - NewOrganizationRequirement(name string) OrganizationRequirement - NewDomainRequirement(name string) DomainRequirement - NewUserRequirement(username string) UserRequirement - NewBuildpackRequirement(buildpack string) BuildpackRequirement - NewApiEndpointRequirement() Requirement - NewMinCCApiVersionRequirement(commandName string, major, minor, patch int) Requirement -} - -type apiRequirementFactory struct { - ui terminal.UI - config core_config.Reader - repoLocator api.RepositoryLocator -} - -func NewFactory(ui terminal.UI, config core_config.Reader, repoLocator api.RepositoryLocator) (factory apiRequirementFactory) { - return apiRequirementFactory{ui, config, repoLocator} -} - -func (f apiRequirementFactory) NewApplicationRequirement(name string) ApplicationRequirement { - return NewApplicationRequirement( - name, - f.ui, - f.repoLocator.GetApplicationRepository(), - ) -} - -func (f apiRequirementFactory) NewServiceInstanceRequirement(name string) ServiceInstanceRequirement { - return NewServiceInstanceRequirement( - name, - f.ui, - f.repoLocator.GetServiceRepository(), - ) -} - -func (f apiRequirementFactory) NewLoginRequirement() Requirement { - return NewLoginRequirement( - f.ui, - f.config, - ) -} - -func (f apiRequirementFactory) NewSpaceRequirement(name string) SpaceRequirement { - return NewSpaceRequirement( - name, - f.ui, - f.repoLocator.GetSpaceRepository(), - ) -} - -func (f apiRequirementFactory) NewTargetedSpaceRequirement() Requirement { - return NewTargetedSpaceRequirement( - f.ui, - f.config, - ) -} - -func (f apiRequirementFactory) NewTargetedOrgRequirement() TargetedOrgRequirement { - return NewTargetedOrgRequirement( - f.ui, - f.config, - ) -} - -func (f apiRequirementFactory) NewOrganizationRequirement(name string) OrganizationRequirement { - return NewOrganizationRequirement( - name, - f.ui, - f.repoLocator.GetOrganizationRepository(), - ) -} - -func (f apiRequirementFactory) NewDomainRequirement(name string) DomainRequirement { - return NewDomainRequirement( - name, - f.ui, - f.config, - f.repoLocator.GetDomainRepository(), - ) -} - -func (f apiRequirementFactory) NewUserRequirement(username string) UserRequirement { - return NewUserRequirement( - username, - f.ui, - f.repoLocator.GetUserRepository(), - ) -} - -func (f apiRequirementFactory) NewBuildpackRequirement(buildpack string) BuildpackRequirement { - return NewBuildpackRequirement( - buildpack, - f.ui, - f.repoLocator.GetBuildpackRepository(), - ) -} - -func (f apiRequirementFactory) NewApiEndpointRequirement() Requirement { - return NewApiEndpointRequirement( - f.ui, - f.config, - ) -} - -func (f apiRequirementFactory) NewMinCCApiVersionRequirement(commandName string, major, minor, patch int) Requirement { - return NewCCApiVersionRequirement( - f.ui, - f.config, - commandName, - major, - minor, - patch, - ) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/login.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/login.go deleted file mode 100644 index afb7dd6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/login.go +++ /dev/null @@ -1,29 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type LoginRequirement struct { - ui terminal.UI - config core_config.Reader - apiEndpointRequirement ApiEndpointRequirement -} - -func NewLoginRequirement(ui terminal.UI, config core_config.Reader) LoginRequirement { - return LoginRequirement{ui, config, ApiEndpointRequirement{ui, config}} -} - -func (req LoginRequirement) Execute() (success bool) { - if !req.apiEndpointRequirement.Execute() { - return false - } - - if !req.config.IsLoggedIn() { - req.ui.Say(terminal.NotLoggedInText()) - return false - } - - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/login_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/login_test.go deleted file mode 100644 index 349dbed..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/login_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package requirements_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/requirements" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("LoginRequirement", func() { - var ui *testterm.FakeUI - - BeforeEach(func() { - ui = new(testterm.FakeUI) - }) - - It("succeeds when given a config with an API endpoint and authentication", func() { - config := testconfig.NewRepositoryWithAccessToken(core_config.TokenInfo{Username: "my-user"}) - config.SetApiEndpoint("api.example.com") - req := NewLoginRequirement(ui, config) - success := req.Execute() - Expect(success).To(BeTrue()) - }) - - It("fails when given a config with only an API endpoint", func() { - config := testconfig.NewRepository() - config.SetApiEndpoint("api.example.com") - req := NewLoginRequirement(ui, config) - success := req.Execute() - Expect(success).To(BeFalse()) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"Not logged in."})) - }) - - It("fails when given a config with neither an API endpoint nor authentication", func() { - config := testconfig.NewRepository() - req := NewLoginRequirement(ui, config) - success := req.Execute() - Expect(success).To(BeFalse()) - - Expect(ui.Outputs).To(ContainSubstrings([]string{"No API endpoint"})) - Expect(ui.Outputs).ToNot(ContainSubstrings([]string{"Not logged in."})) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/organization.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/organization.go deleted file mode 100644 index b1112eb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/organization.go +++ /dev/null @@ -1,48 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api/organizations" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type OrganizationRequirement interface { - Requirement - SetOrganizationName(string) - GetOrganization() models.Organization -} - -type organizationApiRequirement struct { - name string - ui terminal.UI - orgRepo organizations.OrganizationRepository - org models.Organization -} - -func NewOrganizationRequirement(name string, ui terminal.UI, sR organizations.OrganizationRepository) *organizationApiRequirement { - req := &organizationApiRequirement{} - req.name = name - req.ui = ui - req.orgRepo = sR - return req -} - -func (req *organizationApiRequirement) Execute() (success bool) { - var apiErr error - req.org, apiErr = req.orgRepo.FindByName(req.name) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *organizationApiRequirement) SetOrganizationName(name string) { - req.name = name -} - -func (req *organizationApiRequirement) GetOrganization() models.Organization { - return req.org -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/organization_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/organization_test.go deleted file mode 100644 index e6b85e8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/organization_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package requirements_test - -import ( - "errors" - - test_org "github.com/cloudfoundry/cli/cf/api/organizations/fakes" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("OrganizationRequirement", func() { - var ( - ui *testterm.FakeUI - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - }) - - Context("when an org with the given name exists", func() { - It("succeeds", func() { - org := models.Organization{} - org.Name = "my-org-name" - org.Guid = "my-org-guid" - orgRepo := &test_org.FakeOrganizationRepository{} - orgReq := NewOrganizationRequirement("my-org-name", ui, orgRepo) - - orgRepo.ListOrgsReturns([]models.Organization{org}, nil) - orgRepo.FindByNameReturns(org, nil) - - Expect(orgReq.Execute()).To(BeTrue()) - Expect(orgRepo.FindByNameArgsForCall(0)).To(Equal("my-org-name")) - Expect(orgReq.GetOrganization()).To(Equal(org)) - }) - }) - - It("fails when the org with the given name does not exist", func() { - orgRepo := &test_org.FakeOrganizationRepository{} - - orgRepo.FindByNameReturns(models.Organization{}, errors.New("not found")) - - testassert.AssertPanic(testterm.QuietPanic, func() { - NewOrganizationRequirement("foo", ui, orgRepo).Execute() - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/requirements_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/requirements_suite_test.go deleted file mode 100644 index 082d466..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/requirements_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package requirements_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestRequirements(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Requirements Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/service_instance.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/service_instance.go deleted file mode 100644 index 8122b7c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/service_instance.go +++ /dev/null @@ -1,43 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type ServiceInstanceRequirement interface { - Requirement - GetServiceInstance() models.ServiceInstance -} - -type serviceInstanceApiRequirement struct { - name string - ui terminal.UI - serviceRepo api.ServiceRepository - serviceInstance models.ServiceInstance -} - -func NewServiceInstanceRequirement(name string, ui terminal.UI, sR api.ServiceRepository) (req *serviceInstanceApiRequirement) { - req = new(serviceInstanceApiRequirement) - req.name = name - req.ui = ui - req.serviceRepo = sR - return -} - -func (req *serviceInstanceApiRequirement) Execute() (success bool) { - var apiErr error - req.serviceInstance, apiErr = req.serviceRepo.FindInstanceByName(req.name) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *serviceInstanceApiRequirement) GetServiceInstance() models.ServiceInstance { - return req.serviceInstance -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/service_instance_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/service_instance_test.go deleted file mode 100644 index 478b1e9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/service_instance_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package requirements_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ServiceInstanceRequirement", func() { - var ( - ui *testterm.FakeUI - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - }) - - Context("when a service instance with the given name can be found", func() { - It("succeeds", func() { - instance := models.ServiceInstance{} - instance.Name = "my-service" - instance.Guid = "my-service-guid" - repo := &testapi.FakeServiceRepo{FindInstanceByNameServiceInstance: instance} - - req := NewServiceInstanceRequirement("my-service", ui, repo) - - Expect(req.Execute()).To(BeTrue()) - Expect(repo.FindInstanceByNameName).To(Equal("my-service")) - Expect(req.GetServiceInstance()).To(Equal(instance)) - }) - }) - - Context("when a service instance with the given name can't be found", func() { - It("fails", func() { - repo := &testapi.FakeServiceRepo{FindInstanceByNameNotFound: true} - testassert.AssertPanic(testterm.QuietPanic, func() { - NewServiceInstanceRequirement("foo", ui, repo).Execute() - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/space.go deleted file mode 100644 index 3d096bb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/space.go +++ /dev/null @@ -1,48 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api/spaces" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type SpaceRequirement interface { - Requirement - SetSpaceName(string) - GetSpace() models.Space -} - -type spaceApiRequirement struct { - name string - ui terminal.UI - spaceRepo spaces.SpaceRepository - space models.Space -} - -func NewSpaceRequirement(name string, ui terminal.UI, sR spaces.SpaceRepository) *spaceApiRequirement { - req := &spaceApiRequirement{} - req.name = name - req.ui = ui - req.spaceRepo = sR - return req -} - -func (req *spaceApiRequirement) SetSpaceName(name string) { - req.name = name -} - -func (req *spaceApiRequirement) Execute() (success bool) { - var apiErr error - req.space, apiErr = req.spaceRepo.FindByName(req.name) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *spaceApiRequirement) GetSpace() models.Space { - return req.space -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/space_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/space_test.go deleted file mode 100644 index 9fbb379..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/space_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package requirements_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("SpaceRequirement", func() { - var ( - ui *testterm.FakeUI - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - }) - - Context("when a space with the given name exists", func() { - It("succeeds", func() { - space := models.Space{} - space.Name = "awesome-sauce-space" - space.Guid = "my-space-guid" - spaceRepo := &testapi.FakeSpaceRepository{Spaces: []models.Space{space}} - - spaceReq := NewSpaceRequirement("awesome-sauce-space", ui, spaceRepo) - - Expect(spaceReq.Execute()).To(BeTrue()) - Expect(spaceRepo.FindByNameName).To(Equal("awesome-sauce-space")) - Expect(spaceReq.GetSpace()).To(Equal(space)) - }) - }) - - Context("when a space with the given name does not exist", func() { - It("fails", func() { - spaceRepo := &testapi.FakeSpaceRepository{FindByNameNotFound: true} - testassert.AssertPanic(testterm.QuietPanic, func() { - NewSpaceRequirement("foo", ui, spaceRepo).Execute() - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_organization.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_organization.go deleted file mode 100644 index 41aebd6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_organization.go +++ /dev/null @@ -1,38 +0,0 @@ -package requirements - -import ( - "fmt" - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type TargetedOrgRequirement interface { - Requirement - GetOrganizationFields() models.OrganizationFields -} - -type targetedOrgApiRequirement struct { - ui terminal.UI - config core_config.Reader -} - -func NewTargetedOrgRequirement(ui terminal.UI, config core_config.Reader) TargetedOrgRequirement { - return targetedOrgApiRequirement{ui, config} -} - -func (req targetedOrgApiRequirement) Execute() (success bool) { - if !req.config.HasOrganization() { - message := fmt.Sprintf(T("No org targeted, use '{{.Command}}' to target an org.", map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " target -o ORG")})) - req.ui.Failed(message) - return false - } - - return true -} - -func (req targetedOrgApiRequirement) GetOrganizationFields() (org models.OrganizationFields) { - return req.config.OrganizationFields() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_organization_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_organization_test.go deleted file mode 100644 index 1cbeebf..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_organization_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package requirements_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/cloudfoundry/cli/cf/requirements" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("TargetedOrganizationRequirement", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - config = testconfig.NewRepositoryWithDefaults() - }) - - Context("when the user has an org targeted", func() { - It("succeeds", func() { - req := NewTargetedOrgRequirement(ui, config) - success := req.Execute() - Expect(success).To(BeTrue()) - }) - }) - - Context("when the user does not have an org targeted", func() { - It("fails", func() { - config.SetOrganizationFields(models.OrganizationFields{}) - - testassert.AssertPanic(testterm.QuietPanic, func() { - NewTargetedOrgRequirement(ui, config).Execute() - }) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"No org targeted"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_space.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_space.go deleted file mode 100644 index 0de476a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_space.go +++ /dev/null @@ -1,34 +0,0 @@ -package requirements - -import ( - "fmt" - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type TargetedSpaceRequirement struct { - ui terminal.UI - config core_config.Reader -} - -func NewTargetedSpaceRequirement(ui terminal.UI, config core_config.Reader) TargetedSpaceRequirement { - return TargetedSpaceRequirement{ui, config} -} - -func (req TargetedSpaceRequirement) Execute() (success bool) { - if !req.config.HasOrganization() { - message := fmt.Sprintf(T("No org and space targeted, use '{{.Command}}' to target an org and space", map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " target -o ORG -s SPACE")})) - req.ui.Failed(message) - return false - } - - if !req.config.HasSpace() { - message := fmt.Sprintf(T("No space targeted, use '{{.Command}}' to target a space", map[string]interface{}{"Command": terminal.CommandColor("cf target -s")})) - req.ui.Failed(message) - return false - } - - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_space_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_space_test.go deleted file mode 100644 index 61b5307..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/targeted_space_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package requirements_test - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("TargetedSpaceRequirement", func() { - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - config = testconfig.NewRepositoryWithDefaults() - }) - - Context("when the user has targeted a space", func() { - It("succeeds", func() { - req := NewTargetedSpaceRequirement(ui, config) - Expect(req.Execute()).To(BeTrue()) - }) - }) - - Context("when the user does not have a space targeted", func() { - It("fails", func() { - config.SetSpaceFields(models.SpaceFields{}) - - testassert.AssertPanic(testterm.QuietPanic, func() { - NewTargetedSpaceRequirement(ui, config).Execute() - }) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"No space targeted"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/user.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/user.go deleted file mode 100644 index 89440cc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/user.go +++ /dev/null @@ -1,43 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -type UserRequirement interface { - Requirement - GetUser() models.UserFields -} - -type userApiRequirement struct { - username string - ui terminal.UI - userRepo api.UserRepository - user models.UserFields -} - -func NewUserRequirement(username string, ui terminal.UI, userRepo api.UserRepository) (req *userApiRequirement) { - req = new(userApiRequirement) - req.username = username - req.ui = ui - req.userRepo = userRepo - return -} - -func (req *userApiRequirement) Execute() (success bool) { - var apiErr error - req.user, apiErr = req.userRepo.FindByUsername(req.username) - - if apiErr != nil { - req.ui.Failed(apiErr.Error()) - return false - } - - return true -} - -func (req *userApiRequirement) GetUser() models.UserFields { - return req.user -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/user_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/user_test.go deleted file mode 100644 index 1a8db16..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/requirements/user_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package requirements_test - -import ( - testapi "github.com/cloudfoundry/cli/cf/api/fakes" - "github.com/cloudfoundry/cli/cf/models" - . "github.com/cloudfoundry/cli/cf/requirements" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("UserRequirement", func() { - Context("when a user with the given name can be found", func() { - It("returns the user model", func() { - user := models.UserFields{} - user.Username = "my-user" - user.Guid = "my-user-guid" - - userRepo := &testapi.FakeUserRepository{FindByUsernameUserFields: user} - ui := new(testterm.FakeUI) - - userReq := NewUserRequirement("foo", ui, userRepo) - success := userReq.Execute() - - Expect(success).To(BeTrue()) - Expect(userRepo.FindByUsernameUsername).To(Equal("foo")) - Expect(userReq.GetUser()).To(Equal(user)) - }) - }) - - Context("when a user with the given name cannot be found", func() { - It("panics and prints a failure message", func() { - userRepo := &testapi.FakeUserRepository{FindByUsernameNotFound: true} - ui := new(testterm.FakeUI) - - testassert.AssertPanic(testterm.QuietPanic, func() { - NewUserRequirement("foo", ui, userRepo).Execute() - }) - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"FAILED"}, - []string{"not found"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/resources/i18n_resources.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/resources/i18n_resources.go deleted file mode 100644 index 88210fd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/resources/i18n_resources.go +++ /dev/null @@ -1,512 +0,0 @@ -package resources - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "strings" - "os" - "time" - "io/ioutil" - "path" - "path/filepath" -) - -func bindata_read(data []byte, name string) ([]byte, error) { - gz, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - return buf.Bytes(), nil -} - -type asset struct { - bytes []byte - info os.FileInfo -} - -type bindata_file_info struct { - name string - size int64 - mode os.FileMode - modTime time.Time -} - -func (fi bindata_file_info) Name() string { - return fi.name -} -func (fi bindata_file_info) Size() int64 { - return fi.size -} -func (fi bindata_file_info) Mode() os.FileMode { - return fi.mode -} -func (fi bindata_file_info) ModTime() time.Time { - return fi.modTime -} -func (fi bindata_file_info) IsDir() bool { - return false -} -func (fi bindata_file_info) Sys() interface{} { - return nil -} - -var _cf_i18n_resources_de_de_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\xfd\x77\xdb\x38\x92\x2f\x8c\xff\x7e\xff\x0a\x7c\x73\x7f\x48\xfa\x7b\x2c\xa7\xd3\xd3\xb3\xe7\x5e\xdf\xf3\x9c\x7d\x14\x5b\x49\x7b\xc7\x6f\x6b\xcb\x99\xed\xdb\xee\x93\xa6\x45\x58\x62\x87\x22\x39\x7c\xb1\xa3\xc9\x66\xff\xf6\x07\x55\x00\x29\x52\x22\x40\x14\x48\xc9\x99\xd9\x9e\x73\xa6\x63\x91\x40\xd5\xa7\x40\xbc\x14\x80\x7a\xf9\xe5\x7f\x30\xc6\xbe\xc0\x7f\xc4\xff\x5e\x04\xfe\x8b\x23\xf6\xe2\x2e\xba\x8b\xa6\xa7\x57\x47\x77\xd1\x8b\x83\xf2\x4d\x9e\x7a\x51\x16\x7a\x79\x10\x47\xba\x22\xcb\xd8\x0f\x1e\x02\x0e\x24\x1e\xbc\x30\xe3\xf0\xfc\xeb\x81\x86\xfe\xcf\x71\x91\xb2\x7f\xbb\xb9\xbc\x60\x59\x9e\x06\xd1\x9c\x65\xab\x28\xf7\x3e\xb3\x20\x63\x41\xf4\xe8\x85\x81\x7f\xc8\xd8\x55\x1a\x27\x3c\xad\xbd\xca\x17\x41\x76\xc4\xd8\xec\x81\x65\x3c\x1f\xa5\x45\x14\x89\xaa\x23\x1e\x3d\x06\x69\x1c\x2d\x79\x94\x8f\x1e\xbd\x34\xf0\xee\x43\x3e\x9a\xa7\x71\x91\xb0\x97\x5f\xee\x5e\x44\xde\x92\xdf\xbd\x38\xba\x7b\x21\xc8\x16\xe2\xaf\x83\xed\x47\x5f\x5f\x1a\x25\xfd\x76\xc1\xee\xbd\xcd\xb3\xdc\x9b\xff\xc3\xb4\xf9\x6e\xc0\x12\xda\xfc\xff\xcf\xa6\x0b\x9e\x71\x01\x26\x7d\x0c\x66\x9c\x25\xa1\x90\x93\x2d\xbc\x47\xce\xbc\x88\x79\x59\x16\xcf\x02\x2f\xe7\x3e\x9b\xc5\x59\x7e\xc8\x8e\x53\x2e\xda\x40\xc8\xea\x55\x35\x82\x48\x08\x11\x89\x3f\x9e\x82\x30\x14\xbf\x66\xa2\x55\x40\x48\x59\x43\xdb\x82\xc8\x98\xf9\x3c\x8a\x81\x7a\x0b\xfb\x2c\xe1\x33\x21\xc5\x0c\xe9\x64\x75\x28\x4f\x41\xbe\x10\x2c\xf8\xf2\x90\x9d\x3e\xb4\x21\x89\x1f\x24\x82\x7c\x95\x70\x68\xf3\x19\xa0\xe6\xfe\x81\x28\x0b\xc4\x24\xd2\x7b\x2e\xc1\xa6\xdc\x3f\x6c\x6d\xba\x3c\x2d\x4c\x2d\x37\x4e\x12\xf1\xe1\xbd\x54\x10\x36\x4e\x43\x9a\x72\x84\x6f\x04\x14\xbe\x7c\x39\x14\xff\x5c\x88\x8f\xfe\xf5\x2b\x7b\xf2\xb2\x92\x24\x2b\x32\xf8\x1c\xaa\xc1\x97\x4b\x2f\xf2\xd9\x6f\xa2\xf0\xb1\xfc\xfb\xeb\xd7\xdf\x3a\xc1\x0d\x43\x9a\x20\xcf\x45\xcc\xbc\x24\x60\x3c\xf2\x93\x38\x88\x72\x18\x08\xfa\x7e\xd2\x55\x9c\xc0\xf7\x3a\x2e\x72\xce\xf2\x18\x3e\x7d\x11\x2d\xbd\x24\x11\x42\x0a\xe1\x44\x17\x64\xd8\x11\xa2\x3c\x5c\x31\xf5\x5c\x14\x13\x5d\x4c\x70\x4e\xc2\x60\x86\x68\x4c\x18\x87\x23\x4d\x90\x07\x96\x37\xc6\x6e\xc5\xe8\x7d\x29\xa6\x93\xa5\x97\x7e\xe2\xb9\x18\x40\x62\x00\x8c\x32\x76\x33\xb9\xfe\x70\x7a\x3c\x79\x09\xdc\x1e\x03\xfe\x24\x86\x5a\x36\x4b\x83\x04\xd8\x65\x30\x42\x82\xc8\x0f\x1e\x03\xbf\xf0\x42\x35\xea\x62\x18\x4b\xf3\xe0\x91\x47\xe5\x88\x32\x49\xbc\x4f\xe6\xd4\x36\x19\x67\x59\x30\x8f\x58\x1a\x87\x3c\x93\xb3\xc5\x4b\xe8\xb7\xf2\x3b\x08\xc8\xa9\xe8\xe8\x30\xfb\xc6\xe9\x7c\x04\x85\x5e\x32\xe8\xdb\xed\x65\xb2\x44\xc8\x24\x4b\x75\xb5\xc6\xce\xd9\x52\xdb\x01\xbf\x0e\x90\x7f\x37\xf5\xd2\x39\xcf\xab\x91\x8b\x1f\x26\xc7\x67\x2c\x12\x9f\x07\xb9\x75\x89\xe7\x4a\xcd\x19\xb5\x8e\xbe\x68\x3f\x6b\xac\x56\x34\xa8\x08\x0b\xd5\xeb\xc3\x58\x2c\xde\x6c\xe4\xb1\xf1\xd5\x29\x1b\x8d\xb2\x4f\x41\x32\xca\xb2\x70\x84\x8b\x3f\x42\x7a\x29\x18\x61\x51\x98\xc1\x0c\xa5\x04\xb8\xac\x48\x92\x94\x67\x52\x43\x60\x3c\x4d\xe3\xb4\x4b\xca\xfd\xe3\xb0\x6e\x29\xf1\xd7\x5b\xb1\xca\x8a\x05\xe4\xdc\x8b\xbc\xb9\x50\x81\x46\x52\x79\xe0\xd8\xe9\x97\xf8\x10\xa7\xc1\x7b\x59\x8c\x79\xb3\x59\x5c\x88\xe9\x1d\x5e\x27\xde\x0a\x54\x21\x31\x4d\x3c\xc4\x86\xf5\x6b\x37\x4c\x28\x32\x1e\xbf\xfb\x78\x31\x3e\x9f\x30\xaf\x10\xa3\x1d\x54\xb2\xff\x97\x7f\xf6\x96\x49\xc8\x0f\xc5\x8a\xc9\xee\x5e\xdc\xdd\xdd\xbd\x48\x84\xea\xf2\x14\xa7\x3e\xfc\x7d\xf7\x82\xbd\x12\x53\xa1\x27\xf4\x92\xbf\x15\x42\xf3\x11\xaa\xe2\x03\x7c\x46\xb1\x58\x44\xac\x2c\xf8\x9d\x49\xe0\x5d\x73\x1c\x52\xfa\xe5\xaa\xe2\x00\x30\xa0\xbb\x2a\x0c\x0f\xa2\x3b\x96\xaf\xd4\x5c\xe9\xc9\x79\xe3\x3b\xf3\xf7\xde\x39\x4b\x17\xf9\x67\x71\xb2\x1a\x65\x62\x3b\x20\x56\xbf\x9b\xcb\xdb\xeb\xe3\xc9\x68\x7c\x75\xc5\xa6\xe3\xeb\xf7\x93\x29\xfe\xf9\xcb\x28\x2e\x7f\x5e\x5e\xbf\xff\x55\xfc\xce\xca\xdf\x37\x57\xe3\xe3\x09\x3c\x19\x45\xf1\x48\x0c\x3c\x50\xbe\x7e\xb5\x6b\x84\xdd\xf2\x75\x69\x09\x39\x13\xbd\x8a\x97\x41\x0e\x9d\x2c\x85\x2f\xa4\x06\x9b\x6c\x79\x98\x61\x64\x21\xa1\xca\xf1\xd4\x9b\xe5\x62\xcd\x17\xaa\xd1\x68\x54\xd1\x40\xed\x3c\x49\xe3\x65\x92\xe3\x47\xbb\x8f\xf3\x85\x65\xaf\xd8\x0b\x7b\xf7\x76\x11\x93\x6e\x16\xb3\x57\x9b\x9c\x84\x22\x24\x50\xb2\x22\x0d\x01\x5e\x7c\x9f\x7b\xa2\xac\xc7\xe2\x88\x8f\xf2\x40\x08\xb0\x05\xde\x6a\x82\xd8\x19\xcb\x1e\xf2\x17\xdb\x43\x76\x94\x38\x4f\x5a\x94\x3e\x31\x30\x6b\xfa\x86\xd1\x1e\xd1\x0e\x67\xcd\x5d\x73\x1e\xbc\x6b\x24\xde\x9f\xff\xfc\x14\x5f\x9f\xb0\x57\xf2\x38\x60\xa5\x19\xd6\x62\xd7\x2a\x74\xbb\x02\xd6\xf3\x6c\x88\xb6\xe8\xcd\xd7\xa5\x25\x92\x22\x5b\x08\xe5\xec\x4a\xfe\xfa\x65\x74\xcf\xde\xde\x9e\x9e\x9d\x88\x79\xfa\x2f\xf8\x08\x26\xeb\x19\x3b\xbe\x3c\x3f\x1f\x5f\x9c\xc0\x0f\x9f\x9d\x5c\x9e\x8f\x4f\x2f\xe0\xef\x07\x26\x9e\x9e\xbe\x9b\xdc\x4c\x3f\x5e\x8d\xa7\x3f\x59\xae\x20\x25\xcb\x21\xb9\x39\x8c\x08\x84\xd1\x4b\x06\x6b\x48\x9d\x5f\xe3\x12\x77\xa9\x5e\x28\x56\x85\xf5\x44\x19\x06\x59\x0e\x7b\x54\x3c\x07\x19\xf9\x3c\x0c\xc4\x12\x03\x5b\x79\x6f\x0e\x8a\xb2\xb7\x3e\x53\x7a\x4a\x83\x3c\x17\xbb\x58\xb5\xc9\xff\x70\x3c\xbe\xfa\xa8\xb6\xc3\x37\xac\x76\xcc\xc7\xca\x63\x3e\x1c\x5b\x5e\xb4\x12\x0b\x4d\x21\xba\x56\xed\x54\x20\xd3\xef\xbf\xbf\x59\x9c\x3d\x5b\x5a\xed\xfd\x47\xb5\xc3\xbf\xe8\x21\x98\x17\x29\x32\x12\xe3\x2e\x15\x43\x50\x2c\xdc\x70\xc4\x2a\xc4\xc5\xad\x8b\x3c\x83\x8d\xef\x7f\xe7\x33\x50\xe6\x47\x42\xd1\xe7\x87\x77\x51\xad\x87\x14\x89\xd8\xdf\x08\xa2\xea\x9c\x50\x74\x6b\xeb\x43\x55\x38\xe8\xd5\x35\xf6\x43\x20\x5a\x45\x00\x84\xc5\x13\xcf\x7f\x7b\x82\x3f\x64\xc8\x0b\xce\x45\x13\x0f\x8e\x38\xe5\xa7\xa9\xd5\x93\x1c\xbd\x08\x3e\x20\x1c\xcf\xde\x67\x71\x08\x07\x4f\xe2\xcb\xa4\x1c\x7a\xc7\xe3\xba\xaa\xc4\xd7\xd5\x10\x30\x54\x3e\x4e\x2f\x3f\xbe\x3b\x3d\x9b\x28\x59\x27\x72\x2a\x84\x6e\xb4\x05\xf1\x08\x4b\x7c\xc1\xff\x8a\xff\xdd\xbd\x98\x85\x45\x26\xa0\x7d\x8c\x62\x9f\x67\xa2\xe9\xd6\xef\xe4\x6b\xd8\x6d\xc1\xe3\x3f\x1f\x34\x9e\x2f\xf9\x32\x4e\x57\x1f\x97\xf7\xf0\xee\xcd\xf7\x3f\xfc\x58\xbe\xfd\x8a\x7f\x7c\xd5\xef\x7c\x8b\xef\xbf\xff\xfe\x7f\xef\xba\xe7\x0c\xd6\x71\xf6\xd4\x6f\x86\xef\x32\x3b\xea\x31\xe6\x0e\xa3\xe9\x2f\xe6\xee\x22\x7b\x44\xbd\xcb\x10\x16\xa0\x1d\x76\xa4\x23\xd5\x38\x65\x4b\xde\x07\x91\x5f\xb5\x63\xb5\xca\xab\x29\xf7\xe3\xe9\xc5\xcd\x74\x7c\x71\x3c\xf9\x6f\x3c\x39\xd9\x37\x50\xdf\x49\x2b\xe1\xe9\x32\xc8\x32\x58\xba\xa0\x43\xdd\xbd\x48\xb9\xe7\x8f\xe2\x28\x5c\x09\xfd\xdf\x3c\xff\xfc\xd1\x67\xfe\x9b\xf6\x99\x9d\x2f\x74\xdf\xe6\xac\x25\xaf\x4e\xab\x26\x56\x2d\xcb\xae\xce\xc6\x17\xff\x40\xfd\x70\xf8\x6e\x68\xd7\x4e\xff\x58\x3d\xf0\x59\xa7\xba\x3f\x3a\xda\x7f\x9f\x8e\x46\xda\x24\xa6\xf3\x71\xe1\x07\x79\x0c\x97\x3b\xd7\xe5\x3a\x0d\x17\x39\x78\x47\x15\xc3\x4d\x1e\x5e\xe1\xe0\xc1\x4c\xca\x93\x38\xcd\x33\xf3\xc1\x41\x6f\x92\x44\xfc\xeb\xcb\xa9\x53\xb1\xaf\x6e\x5e\x4e\xc1\xb1\x52\x76\x20\x3a\x5e\x08\x63\x03\x5e\xcc\x16\x5e\x34\x57\x96\x30\x07\xf8\x24\xe3\x39\x58\xc3\x44\x3e\x74\x51\xdc\xd1\x77\x0b\xb8\x63\x9e\x94\x16\xb8\x82\xfe\x9c\x2d\xe2\x22\xf4\xb1\xdb\xb3\xbf\x07\x09\x76\xed\x83\xf5\x09\x74\xfd\x21\x1c\x33\xb0\x30\x9e\x79\x21\xf3\x83\x54\x40\x14\xbd\xea\x90\x5d\xc5\x59\x80\x83\x30\xc8\xc4\xeb\x04\x7f\x3d\x72\x3c\xc6\x17\x72\x82\x34\x79\x26\x46\x76\x10\xa7\x41\xbe\x92\x32\x88\x92\x59\x8c\x96\x2c\x0f\x69\xbc\x14\x24\x9f\x78\x96\x03\xb7\x45\x30\x5f\x70\x93\x71\xd2\x6e\x50\x47\x43\xa1\x25\xa8\x0a\x57\x70\x38\xb6\x2c\xc2\x3c\x80\xe1\xef\x25\x49\x75\x7a\x2b\x3a\x43\xf0\x20\xe8\x9a\x8c\x28\xe9\x04\x28\x1d\xe3\x06\xce\x8f\xd7\x23\xf1\x03\x18\x8a\x84\xf1\x5c\xf4\x40\x35\xe6\xaa\xae\x08\x26\x67\x19\x13\xcd\x88\x77\xd2\x78\xee\x6c\x46\x3d\x18\x69\xb2\x3c\x27\xfc\x91\x87\x68\xf3\xd7\x76\x17\x8d\xed\x27\x39\xe3\xfc\x5d\xe1\xe0\x08\xcf\x7e\x0e\xdb\x1d\x2f\xb2\xc4\x16\x53\x0d\x3c\xe1\x91\x3c\x45\x14\x30\x8b\x54\x5d\x29\x54\x26\x3f\x96\x5f\x74\x17\xac\x28\xf2\xe2\xca\x2e\xb5\x07\x5f\xae\xd3\x0e\x7b\x97\xd3\xbc\x9c\x57\xa4\x99\x25\x03\x33\x3b\x18\x5b\x69\xea\xad\xe4\xe0\xaa\xad\xce\xa0\x6a\x64\xa0\xad\x48\x13\xaa\x7b\x69\x92\xc7\x59\x5a\x84\xdc\x7c\x40\xfc\x0d\x83\xdd\x67\x9b\x4b\x0a\xa8\x78\xd5\x24\x41\xe1\x7a\x49\x23\xe9\x62\xf1\xb7\x5e\xc6\xd9\xa5\x52\x6f\x33\xb9\xe9\x85\x3b\x68\x98\xcc\xa1\x3f\xa2\x7a\x01\x35\xb3\xbf\x15\x5e\xca\xd9\x7d\xea\xcd\x3e\xc1\x0a\x00\x2f\xeb\x36\xb6\x8b\x40\xc0\x53\x7a\x32\x14\x4c\xf9\xdf\x0a\xb1\x98\xe0\xdd\x63\xae\xa4\x10\x8c\x95\x52\xf7\x01\x35\xb9\xdf\x33\x31\x79\xa1\x78\xea\x0e\x4b\xea\x73\xbf\x28\xed\x6b\xad\xbb\xdd\xbd\x10\xcd\x98\xc7\xb3\x38\x94\x87\x1e\xf9\x2c\x01\x95\x79\xfd\x5a\x88\x29\x66\x43\xec\x42\xb2\xc4\x9b\xef\x0f\x7f\xf8\xf1\xc7\xc3\x37\x87\x6f\xfe\x57\xb3\xa4\x9c\x34\xb0\xcc\x9f\xfe\xf4\xfd\xbf\xa8\x53\x93\x52\xd3\xfb\x75\x97\xbd\xf2\x8f\xcf\xf9\x8c\x9f\x93\x32\x6e\x71\xcd\x15\xfb\xad\xf8\x09\x27\x63\xb8\x48\xf6\x4a\xb3\xc8\x72\x33\x23\x1f\xea\x0d\x2b\x5d\xc9\x50\x70\xfe\x32\x0a\xd8\xc5\xed\x79\xb5\x83\xba\x81\xfb\xcd\x4f\xec\xe4\xf4\xe6\x2f\xf0\xd7\x92\x9d\x4f\xce\x2f\xaf\x7f\x86\xbf\x23\xf6\xd3\xe5\xcd\x14\xfe\x4a\x70\x93\x25\xed\x69\x44\xb5\x63\x2c\x9a\xb3\xe9\xe9\xf9\xe4\xf2\x76\xda\x71\x71\xb9\x6b\x8e\xf6\xd2\x7b\x3e\x8c\x42\xd1\x9e\x86\x4f\xd0\x56\xc6\x9e\x83\x1f\x73\x69\x05\xcd\x3f\xc3\xd5\x24\xdc\x97\xa3\xd2\xa1\xe7\xd7\x5d\xc3\x9e\x3b\x68\xdd\x21\x1c\xee\xae\x4a\xa3\x76\x3d\x5f\x53\x59\x47\x8e\x31\x98\x7b\x5b\x72\xdc\x28\x4b\xe2\xc8\x97\x49\xbe\x32\xf2\xd9\x28\x41\xa2\x0e\xdf\xa2\x3c\xeb\x10\x1b\x9f\x03\xb1\x4d\xe4\x30\x43\x36\xcc\x88\x0e\x18\x3f\x9c\x1f\xb2\x45\x9e\x27\x47\xaf\x5f\xaf\xe2\x22\xfd\x08\x1f\x0d\xec\x29\x8c\xc0\x86\x23\x4e\x97\xe9\xd1\x0b\x42\x9c\x54\xc4\x74\x0c\xf4\x4c\xa3\xc0\xa6\x0e\x19\x81\xd0\x4d\x93\x18\xb7\xd8\x62\xa7\x28\xe5\x5e\x7a\x9f\xc4\xba\x22\xb4\x56\x16\xe4\x72\xab\x2b\xdb\x26\x09\x8b\xb9\x62\x69\x50\xfa\x86\xa2\x6b\x2f\x09\xb0\x7b\x00\x83\x00\x3d\xa8\x96\x22\xf6\xf4\x53\xbe\x8c\x1f\xab\x3d\xb1\xb2\x6e\x00\xb4\x19\x6c\xed\x02\x9e\xe9\xf9\x12\xaa\xda\x1b\x80\xbf\xb8\xc2\x06\x13\xab\x65\xb9\xb0\x57\xe2\x95\xab\xba\x6a\x7d\xc1\xd9\xf7\x72\xcf\xe0\x43\xd1\x87\x96\x35\xe2\xef\xaa\x39\x06\xe7\x53\xc3\x96\xc1\x50\xd2\x9a\xdb\xb8\xf2\x14\x82\x33\x5e\xa1\xb6\xc5\x78\x50\x52\x1a\x5b\xca\x75\xfb\x38\x8c\x0b\x9f\xbd\x03\x39\x53\xfd\xb4\xd5\x87\x94\x3d\xde\x93\x93\xd7\xd7\x62\xb5\xfd\x00\x27\xcd\xb7\xef\x4f\x2f\xb4\x70\x36\x5f\xdb\x9e\xc1\x6c\x71\x60\xd7\x93\xab\xcb\x9b\xd3\xa9\x58\xe1\xf5\xb2\x5b\x55\x22\x48\xf9\x01\xf4\x8c\x13\x03\xbf\xcd\x02\xf6\xb4\xcf\x4e\xc7\x37\x7a\xc2\xcd\xb7\xf6\x54\xaf\x4e\x2b\x87\x2f\x3d\xf1\xd6\x42\x4e\x3c\xd8\xab\x6a\x85\xc9\xc4\x12\xe3\x25\xc1\x61\xcd\x22\x50\x6f\x6f\xeb\x44\xc3\x09\xe1\x91\x15\x86\xa3\xbe\x5c\xa4\x37\x60\x30\x51\xbf\xbf\xea\xaf\x87\x6c\xab\x0d\x84\x83\xbd\x82\xf7\x8f\x3c\x85\x6b\xfb\xf2\xf5\x07\xf9\xf3\xeb\x57\xbb\x2f\xd4\x83\xaa\xbb\x14\x2e\x4d\xd9\xb3\x1d\xaf\x0c\x03\xb2\xf1\xd2\x9e\xe6\x0c\x76\xae\xb0\x63\x56\x5e\xe2\x2c\xe3\xb3\x02\x0e\xaf\x19\x7a\x29\x67\xb8\x41\x10\xc8\x4b\x33\xd9\xaf\x06\xe7\xe9\x7e\xc4\x1c\x30\x2b\x2f\xeb\x0d\x36\xc0\xa5\xc1\xc4\x02\x30\x99\x92\x3d\x5a\x5f\x6c\xb2\xd0\x35\xad\xa6\x92\xa1\xa6\x62\x58\x22\x6d\xea\x10\x11\xc0\xd5\x46\x5a\x7a\xb3\xc2\x99\x4c\x92\x74\xf0\x37\xd6\xa0\x70\xc7\x1e\x81\x84\x44\x63\xde\x5e\x9f\x89\xe1\x09\x14\x37\x5d\x94\x85\x9c\x70\x41\x27\x9e\x5d\xa6\x73\xf5\xec\xb5\x3c\xd7\x85\x87\x78\x50\xac\x1e\xcb\xef\x72\x5b\x7d\x97\xc3\x43\xbd\xfa\xb3\x7f\x00\xf6\x6d\x13\x06\x82\x50\xd3\xf7\xba\xd4\x10\xd5\x97\xbf\xe7\x00\x1e\x3d\xe0\xc3\x50\xfa\x1e\x8b\x9e\x21\x4f\xd0\x8e\xdf\x95\xaa\xd4\x6b\x0f\x28\x1d\x32\x76\xcd\xd1\x96\x1d\x08\x6c\x90\x2d\x95\xae\x0e\xf2\xd0\x04\x3e\x4f\xa1\x7d\xd4\x69\x7b\x20\x0f\xd8\xa0\x80\xbc\x2d\x07\x2a\x62\x48\x18\x5a\xfc\x9f\x44\xac\x9e\xdf\x31\xc3\xb0\x04\x35\x41\xd0\xd3\x44\x02\x84\x59\x50\xee\x12\x64\x87\x7a\x29\x84\xfc\x39\x2e\x44\x79\x38\xf9\xcc\xd3\x15\x2b\x22\x85\x0e\x24\xd1\xd5\x42\xd0\x42\xee\xa8\x14\x45\xde\x76\xa9\xe2\x75\xa9\x83\xe8\x31\xfe\x64\x6a\x41\x01\xe0\xa7\xf8\x89\x3f\xc2\x2d\xa6\xd8\x89\x97\x87\xb0\x0f\x41\x2a\x36\x58\x0f\x05\xd8\x57\x08\x65\x5c\xac\xa0\xb9\xe2\xc9\x82\x65\x02\xfa\xba\xd8\x7c\x35\xb0\xc2\x2b\xdc\x68\xc0\x8f\x6d\xc4\x12\x9b\xbe\xf3\xfc\x26\x1b\xf3\x8f\xb6\x74\x69\x4b\xeb\xcd\x4b\x58\xf3\xcf\xc7\x13\x6f\x65\x76\x02\xa7\xd9\xe5\x6e\x51\xda\x4d\x04\x95\x8b\x80\xa8\x23\xa6\x47\xfd\xc6\x7c\x18\xa2\x84\x41\x47\x67\x87\x5f\xd4\xe4\x66\xee\x46\x94\x6b\xdd\xce\xfb\x7f\x85\x20\xda\xc9\x77\xb0\x20\x3b\xec\x97\xd8\x62\x38\xcc\xb7\x68\x21\xeb\xfc\x35\xb2\x98\xf9\x3c\xe4\x78\xfd\x5c\x05\xf5\x40\xbd\xc1\xd4\xd8\x56\xb5\xec\xdb\x52\xea\x20\xcb\x42\xcc\x14\xf7\x5c\x45\x36\xe0\x60\xaa\x22\x84\x2b\x7f\xab\x40\x3d\xc6\xe0\x0e\xee\x84\xec\xb1\x0a\x05\x4a\xcf\xbf\xf1\x92\x44\x13\xd7\xfa\x40\xde\x0f\xa8\x8b\x35\x51\x37\xd4\x1f\x45\xda\x55\x22\x61\x68\x28\x86\xcd\xab\x0b\x83\xe2\x63\x5d\xd1\x1d\x0b\x8a\xf8\x14\xa7\x9f\xd0\xdc\xe8\x53\x90\x24\x6b\xed\x16\x6d\x08\x01\x8b\x35\x40\x1a\xb5\x7e\xa8\xd5\x88\x95\x6e\x66\x62\x19\x05\x95\x5a\x8e\x68\x59\x88\xd0\xae\x44\x72\x14\xdc\x62\xbf\x8e\x81\x34\xa0\x17\x81\xa1\x96\x1f\x78\xf3\x28\x16\x2b\xf0\x2c\x93\xb7\xd5\x61\x3c\xc7\x7b\x5c\x13\x5a\x07\x22\x14\x8c\x99\xe1\xd0\xa8\xf9\xd6\x9e\xaa\x8c\x71\xe3\xc9\x3b\x57\xb5\xe3\x33\xce\xce\x9d\x15\xe8\xbc\xe5\x56\x4b\x12\xf4\xf9\x43\x10\x49\x1b\x3b\x6c\xb1\x8e\xd9\xce\x81\x84\x2b\x3e\x08\xde\x23\x09\xc2\xc1\x80\x2d\x24\x5d\x2d\x32\x0a\x39\xaf\x13\x41\x98\x2b\x11\x31\x88\xa9\xf5\x03\x58\x61\x77\x70\xdd\x2e\x46\xe4\x23\xa7\xa2\x10\x37\xdf\xd7\xe2\x5f\xb9\x6d\x07\xe8\xf0\x44\x06\x2b\x52\xa1\x95\xd6\x5b\x77\xf9\x58\x6c\xe0\x9b\x9b\x77\xf9\x18\xb7\xf0\xd5\xf6\xbd\x11\x9d\xc9\x78\x84\xf0\xcc\x70\xf6\xdd\x6e\xcf\xd3\x3c\x3b\x68\x85\x8d\xe3\x3c\x41\xbe\x7c\xf2\x11\x9f\x48\x8c\xd5\x57\xc9\xd4\xf7\x58\xe3\x13\xff\x78\x51\xf0\x77\x14\xb5\x82\x58\xd8\x9d\x3b\x3d\x0f\x0a\x97\x56\xaa\xcd\x99\x82\xf0\xbf\xc3\x1f\x6a\xa1\xad\xe3\x72\x3e\x80\xdb\x19\x23\x7b\x59\xf3\x1c\x2c\x25\x70\x4b\x2d\xd4\xf5\xf8\x29\x0a\x63\xcf\x07\x2f\x33\x2f\x5d\x49\xab\x2c\xbc\x4d\xc6\x4b\xc8\x88\xe7\x60\x1c\x03\xb1\xb2\x8c\x62\x0d\x41\xd3\x51\x82\x65\x30\x4f\x3d\x79\x9c\xa9\x74\x9e\x53\x15\x23\xf3\x64\x1d\x90\xaf\xe3\xab\xf4\x26\x48\xc2\x1e\xe5\x78\x11\x83\x56\x82\x62\x4f\x87\x07\x27\x57\xe2\x0f\xf9\x99\x7f\x83\x2d\x5e\xb9\xbd\xfb\x6d\x53\x93\xfb\xad\xb4\x7f\x78\x48\x79\x69\x28\x58\xc5\x04\xfd\x6d\x1b\x72\x59\xab\x16\xb8\xd4\x53\x71\x4e\xd9\x31\x38\x05\xcd\x72\x38\x96\x11\x4f\xfd\xa5\x50\x10\x32\xd1\x32\x60\x4e\x1e\x3c\xe0\x61\x8d\xd8\x97\x46\x9f\xe4\xee\x14\x23\xbe\xca\x50\x69\xe6\x86\xfc\x27\x92\xce\xfe\xab\x16\x70\x58\x96\x43\xac\x08\x69\xa4\x2d\x84\x88\x46\x8d\xf0\x4b\xfa\x36\xa3\xd4\x75\x41\x04\x26\x32\xa6\xce\xaf\x2f\xe9\xc4\x4d\x68\x98\x0b\x31\x53\xf1\xcf\x09\x6c\x3c\x21\x3c\xb0\xb4\xce\x01\x35\xff\xde\x9b\x7d\xc2\xe3\xe9\x58\x6c\x07\x46\x5e\x4d\xf2\xc3\x32\x96\x35\x86\x35\xfc\xad\x1e\xf0\x0f\x9c\xdf\xff\x34\x2b\xef\x0e\xf1\x17\x87\x98\x36\xf2\x39\xb4\x58\xf9\x2c\x56\xcf\xc4\x1a\x51\x3e\xca\xd4\x23\x69\x12\x8f\x0f\x7f\x53\x01\x9f\x2a\x34\xd2\x49\xa0\x09\xc7\xaa\xb9\xfe\xd9\x44\xb5\xfe\xde\x6f\x4f\xcf\xce\x4e\x2f\xde\x43\x34\x9a\xf1\xfb\xc9\xb5\xb6\xb1\xb4\xe5\xec\x39\x41\xbc\x1e\xb4\x00\xd5\xef\xf3\x5a\xcb\xd0\x38\x40\x44\x20\xfd\x85\x72\x5b\x11\x7b\xfa\x01\x58\x4c\x6f\x2a\x3e\x16\xfb\x38\xfb\x8a\xfd\xb1\xc0\x49\x61\x69\x3e\xb6\x79\x51\xad\x22\xfe\x42\x78\x30\x38\x54\x2c\xef\xb3\xeb\xc1\x71\xe8\x32\x0c\xc6\x70\xaf\xb2\x97\x57\xe3\x7b\x93\xdd\xcc\x90\x2e\xfb\x46\x10\xf1\xee\xeb\x6f\x42\x4d\x12\x1a\x10\xea\x9e\xe7\x4f\x9c\x47\xa0\x68\x35\x17\x74\x9c\xa6\x9a\x87\x87\x81\xbf\x3e\x3b\x34\x82\x1d\x86\x30\x59\x16\xbb\x7d\x8d\xcf\x1f\xbc\x22\xcc\xb3\x66\xbf\xb6\x35\xd1\xd8\x29\xaf\x1d\x49\x5c\x75\xe0\xdd\x08\xd9\x4d\xde\x41\x2e\xd9\xd5\x75\xda\xe6\x30\xe6\x12\xd6\x07\x0a\xdf\x0a\xac\x01\xda\x71\x48\xa0\x76\xdb\xed\x67\xc5\x42\x6e\xb1\xba\x41\x4e\x1d\x91\x8d\x84\x56\x75\xed\x11\x15\x41\xe8\x27\xa0\x33\x0a\x5a\xd5\x8f\x52\xe8\x86\x05\xb5\x1e\x99\x0b\x8d\x61\x10\xda\xde\x51\xb9\x11\xb1\xc7\xb8\xca\xe1\x84\xc7\x13\x8a\xb6\x98\xc7\xca\xdb\xc7\xb5\x8b\x7c\xe9\x64\x5e\x44\x01\xea\x02\x4b\xb1\x79\x28\x52\x8e\x11\x09\xc3\xe0\x13\x67\xe7\x07\xec\xfc\xed\x01\x7b\x8f\x9e\xf7\xef\xdf\xea\xe5\x68\x67\xb4\x15\x41\xc0\x9d\xa1\xed\xc5\x71\x15\xba\xda\xf7\x47\xd2\x22\x63\x84\x1e\x24\xbf\x80\x6d\x77\x19\x72\x53\x74\xd4\x5f\x61\x0f\x34\xf9\x8f\xf1\xf9\xd5\xd9\x44\x3a\xff\x41\xdc\xf6\x8d\x4a\x57\x69\xf0\x28\x36\x28\xd7\xf0\xb7\xf2\x8b\x59\xae\x12\xf9\xb0\xf4\x8d\x79\x0d\x7f\xbc\x36\xf8\xa2\x7d\x03\x88\xac\x3b\x4c\x85\x35\x09\x24\xa6\x6e\xa9\xb6\x4b\x3a\x70\x4b\xaa\xb0\x52\x16\x0c\xb1\x70\x8f\x9e\x01\x41\xcd\x6f\x6f\x26\xd7\xf8\xeb\x6a\x7c\x73\xf3\xd7\xcb\xeb\x13\x68\xfc\x6e\xde\x16\x55\xc9\xd2\x63\x74\xad\x32\x2d\x54\xa9\x62\xa8\xb4\x44\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\x1f\xdf\x5f\x5f\xde\x5e\x75\xe2\x73\x21\xe5\x86\xd7\x48\x9c\x5d\x5e\xbf\x67\x18\xf9\xdc\x0e\x31\x99\x98\x2b\xe6\xae\x08\x66\xbf\x60\x5c\x9f\x6b\xf1\x6e\x3a\xb9\xbe\xf9\x38\xbe\xf9\x08\xae\xca\xdd\x83\x60\x28\xf2\x8e\x72\xa9\xf4\x56\x03\xf4\x1d\x22\x29\x3a\xde\x72\x89\xd3\xaf\xda\xa6\xa2\x64\x7e\xb3\x05\x9f\x7d\x1a\x49\x0b\x0a\xf0\xf1\x55\xc1\x95\x3b\x99\x77\xd6\xa3\x23\xc1\x18\x57\x90\x08\xc0\xcb\x56\xd1\x0c\x03\xc0\x0b\xf2\xa5\x6b\xb1\xe8\x24\x1f\xcf\x4f\x2f\x6e\xa7\xd2\x4f\x79\x24\x70\xc1\x1e\x57\xcc\x67\xec\x3f\x25\x07\xf1\x2f\x38\xe9\xbf\xce\xe3\xd7\x70\x9d\x81\xa5\x66\x71\x08\x46\x56\xb5\x52\xf8\x18\x03\xe4\x70\xf6\xea\xec\xf2\x78\x7c\x36\x11\xaf\x8e\xcf\x26\xe3\xeb\xef\xba\xfb\xf1\xbe\x40\xba\x4f\xde\x2a\x30\x97\x58\x04\x46\x65\x64\x1c\x15\x59\x3b\x61\xaf\x4b\xd6\xf2\x14\x12\xca\x60\xa0\x32\x3c\x88\xac\x8a\x1f\xae\x96\xa1\x21\x78\x82\x89\x91\x3b\x13\x47\x31\xab\x31\xb0\x8e\x1a\x8e\x0e\xea\x0c\xdd\xd4\x4e\x2f\x2f\xa0\x7d\xa5\x09\xf5\x7f\x8e\x46\x7e\x90\xc1\x5f\xd6\xb2\xf5\xa5\x4e\x1f\x03\x92\xaf\x1f\x2f\x21\x11\x02\xcc\xeb\xb6\xc3\xb1\xb3\xa2\x2b\x16\xd8\x67\x09\x7a\xb6\x08\xb6\x8a\xbb\xf2\x95\xd7\xae\xff\x7e\x7b\x39\x1d\x63\x30\x82\xa9\xf8\xe3\xec\xe3\x3a\x24\x41\xc0\xca\x55\xa3\xf6\x30\x65\x62\xfa\x55\x83\x2f\xdb\x5a\x5e\xe4\x98\xc4\x20\x0e\xa3\xc4\x0b\xaa\x05\x69\x84\x66\x9b\xd6\xbd\x62\x13\xd9\xe0\xec\x1d\xc7\x82\x9c\x8c\x51\x11\x50\x5f\xbf\x8a\xdc\x80\x3a\xb4\xad\x7c\xf6\x74\x5c\xbf\xad\x59\x9d\x29\xe3\x06\xc2\xd2\xff\xf1\xfa\xf6\x6c\x72\x83\x21\x04\x6d\xe1\xf7\x24\xee\x2e\x93\x4d\xc4\x48\x8d\x82\x23\x63\x68\x8c\xdf\xdf\x58\x7f\xa4\xc1\xd9\xf5\x94\x1b\xef\xab\x46\x79\xfc\x89\x47\xec\x6c\xfc\x76\x72\xc6\xae\xae\x2f\x3f\x9c\x9e\x4c\xae\xc5\xc8\xfd\xcb\xc4\x7a\x06\x23\x93\xeb\x8b\xfb\x3e\x15\x4c\xd2\xaa\xe9\xde\x5e\x0b\xf2\xd7\xdb\x5b\x18\x26\x76\x70\x54\x19\x9c\x48\xf7\x95\xe7\x13\x5f\x6d\xf7\x83\xf2\xc1\x5f\x26\x3f\xeb\xfa\x84\x36\x50\xfc\x4e\x22\xda\x53\x41\xff\x37\x0c\x79\xef\xd0\x44\x3d\x63\xe2\x77\xc7\x23\xdf\x3a\x80\x31\x80\x5d\xae\xfc\x7b\xf1\x1f\xf8\x53\x7d\xbd\x26\xfd\x06\x79\xf8\x6a\x14\x72\xff\xf5\x1a\xac\xc0\xf1\xc0\xf7\x75\xbe\x4c\x5e\x97\x97\x5e\x1f\xe5\x07\x3c\x84\xf0\x55\xd4\xe1\xfa\xc7\xc8\xf9\x63\xe4\xfc\x31\x72\x9a\x23\xc7\x79\x35\x5a\x78\x29\xf7\xcb\xfd\x08\x6d\x13\x63\xae\xeb\x8c\x08\x2f\x87\xa4\x56\x0b\xe9\x08\x55\x1e\xc2\xbf\xc9\x47\x23\x54\xe7\xed\xb5\xaf\x16\x62\xbd\xf5\x77\x99\x6b\xb7\xb9\xbb\x68\xdd\xe5\xec\x60\xcb\x61\x21\xee\x33\x21\x73\xfd\xde\x68\xa6\xb7\xa5\x6b\xd9\x4a\xdc\x55\xbb\x0f\xaa\x51\x19\x77\x52\x1f\x3d\x1d\xce\x51\x8e\xaf\x27\x27\x93\x8b\xe9\xe9\xf8\x0c\xdb\x2a\x64\x37\x3f\xdf\x9c\x5d\xbe\x1f\x9d\x5c\x8b\xf1\x30\x2a\xaf\x43\x18\x84\x88\xce\x54\x66\x74\x31\x2b\xc3\x2c\x8a\x41\x1f\xc5\x10\x02\xf3\x31\xc8\x6c\x5d\x4e\xac\xe8\x74\x96\xd5\x9d\xca\xd7\x16\x8c\x4c\x48\xc4\x5b\x67\x26\x4b\xc8\x98\xb9\x0f\x51\x1c\xac\x61\x1c\xac\x99\x1f\x48\xee\x30\x1f\xd6\x50\xb7\xa0\xc4\xb0\x1b\x38\xd7\x0a\xa0\x33\x15\x4e\xb8\xba\x1e\xde\x32\xbc\xec\x89\x99\xb4\x36\xaa\x09\x9c\x95\x31\x2b\xad\xb8\x2e\x57\x23\xff\x7e\xb4\x84\xe0\x51\xd8\x46\xa5\x05\xc4\x41\x2d\xc9\x21\x99\x60\x2a\xa6\xc6\x75\x36\xa4\x90\x65\xab\x2c\x8c\xe7\x47\xaf\x5f\xd7\x42\xfd\xa8\x86\x3e\x0b\xa2\xe2\xf3\xeb\x73\x6f\x76\xd4\x03\x36\x34\x53\x09\x1c\xdb\x05\xad\x75\xb1\xa9\xd6\x52\x1c\xc1\x0f\x99\xb0\xb0\x96\xf1\xe0\xaf\x41\xe4\xc7\x4f\x19\x53\x7e\xe7\x80\x87\xf7\x6a\xc0\x2f\x90\x1f\xb3\x02\x73\x07\x7c\xef\x4a\x40\x77\x00\x69\x23\x95\xe6\x91\x7c\xa0\x80\x89\xbf\xbf\x56\x9d\xb0\xc4\x76\x15\x3f\xf1\xf4\x66\xc1\xc3\xb0\x5f\x1b\xf5\x05\xf6\xd2\xe2\x8a\xed\x8f\x99\xe4\x9f\x67\x26\x21\xb0\x8c\x05\xce\x90\x5b\x4e\x25\x8e\x14\xdd\x46\xf9\xf0\xf3\x56\x0f\x55\x0a\xa2\x00\xe1\x11\xbd\xd0\x50\x1e\xa1\xb7\xff\x87\x50\x49\xa6\x3f\x5d\x62\xea\xd0\x9f\xd8\x4f\x93\xf1\xc9\xe4\x5a\xa5\x11\x1d\x0b\x8d\x0f\xb4\x90\xb8\xc8\x93\x22\x67\xa0\xfb\x5b\xa8\x44\xc3\x71\x20\x2b\x11\xca\x71\xbf\x96\x9b\xf5\x81\x8d\xd2\x6e\xcc\xeb\x7a\xdb\x55\xa8\x2d\x2c\x69\xb5\x5e\x8d\x08\xda\xb6\x58\x2c\xea\x3b\xb6\x4e\x73\xdf\x40\xc2\x64\xaa\xe9\x8a\x46\xdd\x87\x90\x70\xb4\xd7\x71\x47\x90\x2c\xbc\x48\x8c\x43\x19\xe4\x81\x88\xc4\x54\xd7\x15\x51\x73\x23\x61\x8f\x46\x5f\xcf\x15\x89\xbc\xea\x68\xbb\xe4\x20\x01\xb3\x26\xe3\x8a\xd3\x7c\xa7\x41\x81\x4a\xa1\xe4\x8e\x56\xab\x8c\x50\x80\x5a\x11\xe9\x89\xd1\x70\xcf\xe0\x00\xd6\x9a\x5a\x5f\xd4\xed\x37\x0b\x2e\x88\x6d\x28\xf5\x45\x6b\x71\xb0\xfa\xb0\x6d\xdb\x67\x20\xb6\x3e\xd1\xa2\x8a\xbb\x17\x28\xce\xed\xd5\x72\xf0\x45\xfb\xa8\xdd\x04\x9c\xb1\x35\x4e\xbc\x08\x90\xb4\xf5\x7a\x21\x51\x6b\x41\xed\xec\x6e\x64\x65\x1b\x49\xa2\xe1\x8a\xb0\x79\x78\x44\x69\x2d\x53\x4d\x3a\x1a\x69\x8f\x32\x52\xf9\x87\x46\x0f\xa1\x37\x67\xef\x26\xe3\xe9\xed\xf5\xc4\xce\x92\x94\x40\x81\x8c\x4e\x6e\x1c\x7b\x80\xb3\x27\xe0\x80\xed\xd1\xde\xdc\x56\x15\x76\xd7\xa8\xf9\xa3\xd8\xb8\x66\x04\x86\x55\x79\x77\x9e\xee\xcd\xbe\x8b\xf6\xae\xd3\xec\xb6\x7b\xd4\x94\xa6\x73\x0d\x42\x9e\xd5\x36\x53\x65\x62\x93\xf5\xc9\x76\xf7\xb8\xad\x68\xa8\xea\xee\x5f\x44\x85\x51\x54\xb6\xec\x60\x13\x00\xd7\x5d\x68\xa0\x38\x02\xd2\xaf\xa7\x97\xaf\x55\x10\x76\x3c\x5b\xaf\x4c\xe3\xd1\x55\x79\xc1\xab\xd0\xa2\xe8\x68\x5f\xc5\x77\xa8\x47\x19\x55\xa1\x1e\x20\xca\xc3\x3a\x42\x2f\x78\xda\xbf\x1c\xa5\x2f\xc1\xbf\xbe\xdc\xb2\xb7\xd9\xd9\x6f\xe0\x2b\xc3\x8b\xcf\x83\x7c\x51\xdc\xa3\x51\xfd\xec\x61\xc4\x3f\x27\x3c\x0d\xc0\x59\xc1\x0b\x5f\x2b\xab\xfc\x87\x38\xbe\xf7\x52\x0d\x99\xff\x7a\x7d\xa2\x90\x66\x56\xe5\x55\x19\x3e\x5b\xc4\x62\x1b\xcb\xce\x57\x23\x34\xf4\xb7\x38\x36\xdb\x20\xd4\x6c\x52\xf7\xcf\x06\x4e\xa2\x75\xff\x83\xee\xee\xbb\x59\xa3\x07\x6f\xf4\x49\xff\x65\xe4\x41\xf0\xae\x8f\x70\x8e\x27\x7e\x14\xd5\xfa\x51\xa6\xeb\x91\x77\x17\xbf\xd6\x6f\xbd\x32\xb9\xea\xfd\x6a\x65\xd3\x3f\x34\x1b\xf2\x40\x15\x00\xc4\x06\xcb\x06\x67\xa3\x98\x0b\x1f\xc2\x34\x5c\x96\x76\xff\x7e\x4b\x2f\x51\x5b\xc7\x6a\x12\x72\xb2\xdb\x6b\xd0\xb1\x37\xd9\xb3\xc3\x28\x23\xad\x54\x3a\x6f\x79\x5d\x9c\xb1\xc7\x37\x1f\x4b\xe3\x33\xf1\x67\xb5\xd1\x81\xbf\xc1\x16\xed\xf1\x87\xf5\xeb\x1f\xf0\x91\x55\x67\xdb\x19\x3f\x72\x6f\x88\xd7\x9b\xb9\x4e\xd4\xad\x65\xe9\x1c\x2d\x4d\x6d\xfb\xdb\xd8\x0a\x0a\xa8\x6b\x66\xb6\xfc\xda\x4a\x93\xb9\xe2\x19\xb2\x3e\x2c\xa6\xae\x18\x9d\x8f\xcc\x67\xd3\xcd\x68\xb3\x1c\x9d\x53\x91\xce\xd7\x7d\x35\x7e\x78\xe0\x18\x9e\xbf\xec\x88\x38\x31\xaa\x8e\xda\x3d\x8c\xdd\x88\x91\x31\xd7\x4e\xd1\x3a\x21\xb5\x96\x75\xe3\xd8\xfd\x39\x36\x8b\x91\xf9\xc8\x4c\x4b\x74\x17\xc2\x96\x7a\x35\x2f\x42\x8b\x49\x6b\xf7\x8c\x1d\xda\x02\x23\xcc\x56\x0b\xcb\xc5\xe4\xaf\x1f\xad\x97\x36\xbb\xca\x8e\x98\xda\x8e\xfe\xd7\x6c\x9a\x8f\x2c\x91\xba\x91\x74\xc5\x5f\x1e\xcf\x03\x6d\x9b\xe9\xb3\xab\x9a\x2b\x0e\xed\x09\x29\x70\xd8\x7c\x68\x8b\xd2\x91\x68\x4f\x19\x34\xc7\x90\x75\x9e\xf2\x11\x51\x0c\x07\xba\xce\x92\xd4\x0e\xba\x90\xbe\x95\x77\xa7\x5d\x65\x07\x4c\x49\xac\xa6\x95\xac\x7d\xe2\x59\xbf\xdf\xda\x4e\x5a\x80\xb6\xa7\xde\xe7\x32\x37\xe5\xe0\x6d\xc9\xed\x55\xf2\x5a\x85\x9e\x5c\xd3\x9c\xc8\x55\x56\xe8\xcd\x15\xdd\xe9\xaa\x08\x3e\xd5\x04\x7c\x7a\x71\x32\xf9\x0f\x5b\x20\x5b\x34\x36\xab\x93\xb1\x29\x7f\x69\x1e\x3d\x06\x69\x1c\xc1\xf6\x7e\xf4\xe8\xa5\x01\x9e\xbf\xe1\x3d\x92\x16\x1a\xf4\x06\x42\x6d\x2a\xb2\x0c\xdd\x38\x6b\xf7\xe1\xeb\xb3\x1b\x43\x36\x5b\x8b\xf3\xd8\x8a\xb0\x0b\x4d\xb2\x14\xbd\xdc\x92\x77\xe5\x89\xac\x5b\x09\x2c\x00\x75\x55\x74\xc5\x52\xbb\x5f\xeb\x56\x27\x8d\x75\x9c\x11\x74\x5d\x20\x69\xef\x8e\x1c\xef\xaf\x76\xce\xb7\x4f\x4b\x6c\x9b\xf5\xda\xc0\xc8\x10\x07\x45\xf2\x61\xf8\x38\x48\x9a\x8f\xea\x57\x01\x6c\x72\xf1\xe1\xe3\x87\xf1\x75\xf3\xc7\x87\xf1\xd9\xad\xcd\xa0\xa8\x68\x31\x7c\xb0\x51\x8d\x3e\x67\xe4\xa0\x51\x8e\x30\x84\x75\x75\x63\x04\xfa\xe5\xf5\xa5\x74\x61\xb0\x82\x64\x4b\xc2\xa9\xed\xe4\xee\x11\x08\xe2\x0e\xd2\x1a\x94\xb1\x9e\x13\x92\xee\x35\xc8\xde\x7c\xcf\x4a\x84\xdd\x30\x74\x92\x7d\xfb\xae\x13\x5f\x91\xaf\x4e\x9d\x68\xf5\x40\xbc\xdd\x2d\xa5\x7e\x4c\xea\xdf\x54\x52\x6e\x78\x55\x4c\x90\xbd\xf5\xae\xdd\x30\xa4\xcb\x0e\xe6\x06\x23\x15\x5b\xc9\x21\x68\x81\x75\x7d\x3a\xb2\xf5\x7e\xaa\x1b\x45\x5b\x59\x37\x8e\xf5\x91\xf1\x11\x87\x83\xdd\x0e\xc2\xae\x72\x1f\x4c\x16\xea\x52\x6b\x61\x47\x9e\xd5\x69\x31\xe5\x1b\xe8\x6b\xb9\xa1\xb0\x94\xb9\x97\xb4\x39\x9c\x39\x09\x95\xc4\xf6\xbc\x4a\x5f\xc1\x8d\xb7\x85\x8c\x79\xcf\x08\x41\xdd\x93\x8d\x0d\x06\x6b\x12\x2e\xf8\x28\xbb\xf5\x01\xf6\xea\x59\x1e\x13\xc2\xb1\x95\xa5\xdd\xf9\xc9\xe4\x67\x6d\x17\xab\x9d\xcc\x6d\xaa\x92\x5b\xbc\x88\x06\x8c\xc8\xe6\x46\xcc\x15\xf3\x50\x51\xd9\x5c\xc9\xb9\xe3\xee\x08\x9d\x66\x8f\xb8\x22\x64\xb7\x41\xb7\xea\xa1\x25\xf1\x41\xe2\xac\xb9\x11\x73\x68\xd9\x4d\x93\x10\x34\x05\xb1\x53\x86\xed\x2a\x3b\x60\x1a\xca\x26\x60\x83\xd2\xc0\x56\x01\x45\x64\xdc\x1b\x5b\xa0\xdb\xdc\x0f\xf7\xc5\xd2\x73\x2f\x4c\x23\xe2\xf0\x5d\x5b\x77\x4f\x84\x7d\x31\x81\x42\x2f\x74\xbd\x77\x5d\x6e\xc4\x5c\x30\xf7\xdc\x7d\x10\x28\xd0\xd1\x25\xbe\x2e\x7e\x9c\x34\x96\x2a\x2d\x0d\xcb\x40\x72\xbf\xb6\x46\x92\x53\xa1\x0a\x3f\x89\x47\x45\x04\x7f\x58\x8c\xfb\xdd\x73\x76\x6d\x0d\x7a\x44\x37\x98\xad\xe0\x3a\x0c\x67\xab\x9e\x21\x05\xd8\x7f\x32\x29\x9e\x73\x30\x04\x8d\x18\x6b\x01\x9e\x05\x2c\x79\xba\x94\x52\xec\x26\x04\xdb\x30\xc4\x5d\x3b\x98\xd1\x09\x1a\x3e\x0d\x58\x85\xfd\x3a\x40\x0c\xb6\x41\xf8\x0d\xf0\x09\x87\x89\xbc\xe6\x4a\xae\xe7\x67\x1a\x34\xf2\xda\x10\xa4\x5d\x3f\x83\xc1\x97\x04\x67\xb5\xf3\xf1\x7f\x8c\xca\xae\x31\x6a\x8f\x95\x62\x31\x73\xec\x69\x76\x7b\x06\x69\xc0\x11\xff\xde\xcb\x82\x59\x09\x79\x43\x9a\xed\xf7\xfd\xc7\xce\xa0\xd1\x13\xf4\x1e\xfd\x46\x6e\x43\x44\xd8\xa0\xf0\xb2\xf1\xbd\xb7\xed\x26\xdf\x42\xfb\xed\x20\x7e\xc1\xc0\x6d\x48\xe8\x9c\xd3\x6b\x50\x8c\x27\xd7\xd7\x97\xd7\xd0\x62\xe3\x29\xe4\x64\x13\xcd\x84\x31\x03\x20\xf7\xc5\x95\x97\x2f\xbe\x7e\x15\xcd\x23\xfe\x9e\xa4\xa9\x21\x3d\x4f\x4f\x6a\xf6\xd3\xba\x17\x61\xf2\x0d\x6c\x28\x88\x4d\xc6\xd6\xc6\xda\xf1\x03\x83\x49\xa8\xb2\x05\xc0\x49\x48\x8f\xd8\x9d\x12\x09\xed\x30\x48\xbf\x19\x94\xec\xd5\x89\x4c\x20\x75\xc4\xca\xc9\x92\xfb\xdf\x0d\x83\xbd\x8b\x36\x45\x22\xf8\xb4\x2a\x04\x45\xb6\x91\xa4\xec\xa0\x7a\x82\x17\xf6\xe0\xbf\x74\x2f\xd3\xe5\x64\x32\x49\xca\x43\x90\xca\x54\x29\x92\x80\xc1\x7a\x7c\x57\x7c\xa8\x92\x62\xda\xb8\xa5\x97\x7e\xe2\xb9\x68\xc9\x59\x85\x25\xc3\xd4\x2e\x10\x2c\xde\x53\xc7\xb2\xdc\xef\x48\x2f\x38\x00\x45\x27\xf4\x98\x14\x36\x88\x1e\xe2\x74\x29\xc3\x39\x42\x7e\xb2\xad\xc4\x4c\xbd\xc4\x19\x8a\x05\x55\xbe\x41\xa6\x80\x3d\xcc\x55\xc0\x42\xc6\xd6\x5c\xb1\xfb\x38\x5f\x30\xd8\x84\x63\xbf\x95\xfb\x71\x16\x63\x94\xce\x4c\x9f\x39\xc9\x8d\x48\x2f\x8c\xb0\x98\xe0\x49\x82\xbf\xce\xe3\x77\x22\x4f\x14\xc4\x13\x1a\x54\x6b\x5a\xce\x88\xab\x23\x92\xfb\x20\x97\x53\x02\xb4\xc9\x6b\xd9\x34\xf6\x60\x6d\xc9\xd8\xe3\x5c\x78\xd1\x1c\x83\x9d\x3e\x06\xfc\x09\x3d\x38\x2b\x6b\xce\x59\x5c\x44\xf9\x01\x4c\xc9\x9f\xd4\xc5\x75\x18\x2c\x03\xf1\x04\xf8\x2e\xf9\x12\x1c\x3a\xf1\x09\x8e\xa7\x8e\xc4\x91\xbb\x63\x44\x95\xb5\x3e\x60\x24\xc1\xad\x19\xbc\x4b\x0a\x12\x09\x2a\x3e\xf4\xcb\x2f\x55\xc8\x2e\x24\x9a\xc2\x34\x9e\xe0\xf9\x53\xd2\x30\x25\x97\x33\x17\x26\xf0\xe4\xb3\x4f\x40\x06\x33\x51\xc2\xad\x81\x99\xa9\xb1\xb4\x3d\xd7\x30\x2e\x7c\xf6\x4e\x74\x35\x5f\x74\xa7\xf1\xd5\x29\x7b\xe4\x29\xce\xa9\x98\x1f\x2f\xf8\x00\x29\x0e\x59\xca\xff\x56\x04\xa9\x98\x5e\x8f\xcf\x1a\x05\x8e\xc3\xe0\x3c\x80\x2c\xef\x8c\xfd\x1c\x17\xcc\x4b\x39\x04\xe7\x82\xdc\x88\xe1\x8a\x89\x22\xcd\xa2\x48\xeb\x90\x4d\x63\xa1\xe4\xcf\x53\xcf\xe7\x32\xeb\xb8\xa0\x79\x20\xfa\x0c\xe6\x84\x86\xf9\x5c\xe8\x3b\x6d\xae\xcd\x00\xf4\x41\xe2\x14\x3f\x82\xff\x59\xfa\x57\x1b\x96\x89\xfd\xcb\xb6\x43\xe1\xac\x77\x32\xca\x09\xfd\x27\x1e\x1a\xe6\x9d\xd6\x42\xf6\xbd\x46\x55\x07\x1d\xa1\x93\x47\xd4\x28\x44\x15\x03\xf2\xd9\xab\xbf\x31\xf3\x7d\xd4\xf0\xa7\xe7\x30\x04\xd4\x3d\xa0\xd0\x4c\x02\x31\xfb\x0b\x7e\x18\x03\xf1\xf8\x5d\xe9\x8f\xff\xda\x0b\x03\x2f\x13\x1f\xe7\x5a\x3a\x55\x01\x81\x0d\xb2\xa5\xe7\x7e\x07\x79\xc8\x79\xe9\x8b\xa9\xa5\x16\x75\x31\xcf\xca\x02\x52\x89\xc2\xa5\x3d\x33\xa4\x46\x1f\x50\xb0\x67\x13\xa9\xef\x47\x04\x69\x1a\x1f\x87\x55\x81\x05\xd8\x4b\xd8\x1b\xe3\x9f\x52\x03\x7d\xa9\x06\xa0\x58\x0e\x43\x5f\xb0\x5b\xad\x6f\x7e\x71\xd2\xd5\xd4\x42\xd4\x90\xbf\xbd\x94\x45\xfc\x80\xf8\x0a\xb2\x78\x5d\xec\x20\x7a\x8c\x3f\x99\x9a\x50\x00\xf8\x49\xec\xbd\x1e\x21\xee\xa5\x18\xd4\x2c\x5b\x20\x14\xb9\x5f\x79\x28\x20\x4a\xbb\x18\xb9\x62\x3a\xc8\x15\x4f\x16\x2c\xc5\x7a\x8d\xc9\x23\x1b\x58\xe1\x15\xe6\xc9\x84\x1f\xdb\x88\x25\x36\x7d\xcf\x31\xb4\xe2\x1f\xed\xd7\xd6\x7e\xd4\x6e\x0a\x4a\x25\xce\xc2\xdd\x73\xda\x76\x49\xca\xe4\x99\x80\x4d\x00\xd0\x11\x4d\x21\xb5\xbe\x6c\xe1\xbd\x61\x68\x11\x0a\x52\xb7\x84\x0c\x09\x42\xe3\x4c\xdb\x97\x22\x11\x3d\xe6\x1f\x00\x06\xa0\x7e\xac\x67\x13\xe5\x71\x76\x20\xfb\xca\xd2\x5b\x89\x4d\xe3\x27\x88\xf8\xfa\xb4\x80\x7c\x02\x46\x85\x66\x28\xba\x04\x49\xa2\x88\xcf\x30\xb0\xad\x5f\x2c\x13\x60\x9d\xf2\x19\x66\x79\x85\xb8\x12\xa8\xc0\x0e\x9b\xf5\xd8\x74\x77\xff\xac\x60\x5c\xda\x2c\xf7\x02\x1c\x94\xcf\xdb\x58\xfb\x44\x41\x68\xa5\x64\x85\x3d\x59\x68\x80\x82\x0b\x86\xfb\x51\xb8\x6e\xf0\x91\x40\x27\x93\x50\x2b\xe3\x40\xf5\x72\x8a\xbf\xe4\xcb\x1d\xe5\xfa\xfe\x96\xa0\x11\xda\x13\xd6\x0b\x98\x73\xe1\xc4\x10\x33\xda\x6b\x52\x95\xdf\x45\x93\x34\x8d\xd3\x23\xd6\x7d\x44\x3f\x04\x4d\x07\x09\x66\xe2\x03\x34\x67\xe2\x23\x56\xde\x01\xc4\x76\x80\xed\x49\x38\xe0\xf3\x21\x6c\x37\xde\xe6\xc0\x92\xa1\x76\x3c\x0c\x12\x96\x40\xb7\xf1\xc5\x4e\x69\x06\x31\xab\xfe\x7f\x16\x38\xe9\xa4\x1c\xf0\x3e\xc0\xd7\xf3\x04\x2f\x3c\x2a\x67\xd2\x84\xc8\x02\x5c\x47\x3d\x67\x24\x62\xb8\x40\x57\xf7\x51\x3f\xa9\x66\xa1\x97\x30\x68\xca\xc4\x9b\xd6\xe8\x48\xb4\x5c\x11\xe3\x69\x0d\xa6\x3c\xc7\x9d\xc4\xba\xf7\x5f\x89\x17\x92\xa3\x2d\x60\x12\x29\x57\xbc\xba\x61\x0a\x43\xb8\x1c\xca\xf5\xe6\xb2\x05\xef\x4e\xd7\x59\x92\xc6\x8c\x59\x4d\xac\xe2\xcb\xfe\x5d\x6e\xbc\xe4\x0c\x4b\x10\x81\x4e\xd0\x01\x7b\xe2\xa5\x70\x98\xa1\x8e\x3f\xa2\x62\x79\xcf\xe5\xe4\x78\x1a\x09\x0d\xce\x0a\xad\x3d\x09\x07\x7c\xe2\x43\x06\x62\x53\xf9\x77\x5e\xbf\xdc\xb0\x00\xd5\x51\xaf\x17\x12\x79\xab\x6d\xba\x2a\xb0\xaa\xe4\x80\x41\x2d\xe3\xa2\x1b\x1c\xe2\x1a\x31\x4e\x02\xdb\x85\xb1\xbb\x2a\x0d\x4f\xf4\x32\x2f\x73\x40\xe4\x7c\x99\xc8\x1c\x63\xa0\xb3\x15\x09\x9c\x75\x99\x11\x59\x57\xa6\x63\x8a\x13\xb1\xcb\x5d\x5f\x22\x74\x6c\xb5\x6c\x2a\xd1\x31\x3c\xa5\x81\x90\xec\xef\x41\x62\xc9\x5e\x57\xde\x9e\x73\x99\x8c\xa3\x92\x41\xcf\xd4\x50\x94\xce\x4f\x19\xf9\x42\x4e\x3a\xa9\x47\xc2\x47\x14\xcc\x78\x0a\x87\x4c\xdd\x20\x6c\xeb\x3b\x23\xcb\x17\x5e\x5e\xa6\xbe\x13\x14\x7d\x76\xbf\x62\x70\xfe\x21\x78\x65\xec\x15\xda\xb3\x60\xe2\x37\xc3\x35\x7f\x7f\x8a\x74\xf4\x11\x7f\xc2\x7b\x8f\x6e\x54\xdb\x25\xe9\xdc\x04\x69\x1f\x82\x98\xa2\x77\x03\x7c\x01\xdc\x99\x1b\xaf\xba\x08\x55\xe9\x78\x4a\x7b\x57\xd6\xe1\x0e\xd7\x55\xde\x85\xb3\xd4\x1b\xc0\x68\x93\x75\xc4\x2a\xb4\xa9\xe3\x8e\x40\x9a\x5c\xda\x73\xdf\x2c\xef\xce\xb9\xfb\x86\xb0\xbb\x86\x03\x77\xb3\xa9\x83\xa6\x18\x9d\x0f\xa4\x9b\x91\xbd\x15\x13\x69\x4a\x2d\x8b\x38\x6b\x51\x68\x90\x11\xe2\xd5\x6f\xb5\x25\xa8\x5d\x07\xcb\x99\x67\x21\x76\xe1\xf7\x5c\x2c\x57\x49\x91\x2d\xc0\x7e\xa3\x98\xcd\x78\x96\xe1\xc9\xab\x41\x23\x19\x94\xb8\x83\x4c\x62\x76\xb4\x00\xd7\x28\x45\xe5\x02\x11\x59\xa8\x77\xdd\xf6\x35\x69\x68\x60\x4f\xbc\xd5\xd8\x70\x3c\x53\x6e\x9c\x33\x9e\xe7\x68\x2d\x15\x3f\x60\x29\x33\xc4\x1e\xe4\x1c\x70\x0f\x7b\xe8\x66\x21\xd9\xae\x18\xd2\x65\x5f\xeb\x80\x82\xea\xdb\xf2\xc7\x85\xbd\x2c\xd6\x04\xe8\xd8\x94\xfe\x01\x76\x3b\xf8\x97\x6a\x01\xe8\xb8\x5b\xad\xe5\xf4\x1d\x06\x63\x40\x97\x6d\x18\x01\x76\x8d\x52\x9a\xf1\x0b\x8a\xff\x0e\x7f\xf4\x41\x4a\xa7\x44\x47\x2b\x57\x28\x41\xf1\xa7\x38\xcb\x23\xc3\xb7\x1c\x72\x2c\xef\x94\xe9\x20\x6d\xe0\x2a\x46\x4f\x24\x4d\x1d\x15\x48\x97\x4f\x3e\xe2\x93\x4a\xf6\xa2\x92\xbd\x1b\x66\x2f\xa2\x2e\x32\x6c\x6a\xba\x8a\xfc\xb1\x5c\x86\xe0\xb3\x59\x36\xb0\x03\x29\x77\xbc\xca\x7d\x49\x50\xef\xd3\xb5\xdd\xa8\xb9\xa3\xae\x6c\x07\xb7\x0e\x31\xc9\xeb\xa3\xfb\xf7\xd9\x0b\x08\xf7\x36\x02\xcd\x6d\x8d\xec\x2f\x7c\x55\x5b\xb3\x0c\x22\x9c\xaa\x47\x03\x35\xd2\x7e\x50\x38\xb4\x12\xe6\xaf\xd2\xad\xeb\x6e\x83\xc0\x9d\xa4\x03\x7e\xec\x4c\xad\x6b\xe5\x70\x5a\xcf\x40\xe4\xad\xcd\x53\x9a\xc2\x6d\x8c\x94\xb6\x41\xe5\xdc\x3b\x87\x62\x40\xff\x70\xd2\x64\x57\x39\x7c\xe9\x2f\x63\xf6\x30\x8f\xed\x1f\x89\x63\x6b\x55\xd7\xf2\x54\xe1\x4c\x15\x29\x58\x54\xba\x67\x83\x05\x6e\x5b\x19\x17\x0e\xec\x89\xa7\x9c\xa5\xfc\x77\x65\xf6\xa1\x2c\x6a\xc1\x9a\xcd\x9b\x7b\x26\xa3\x39\x37\x22\xf6\x18\xd5\x6e\xfa\xf8\x5d\xbb\x81\x31\xfc\x32\xa9\x65\xc4\xea\x2e\xb8\x36\xec\x9a\x49\xa0\xba\xeb\x92\x11\x5d\x75\xda\xf0\x6b\x0b\x92\x79\x95\x16\xf9\xcc\x0f\xe4\x95\xd6\xd2\xcb\x67\x8b\x4e\xce\x5d\xd5\x08\x38\xb2\x3c\x5e\xd6\x1d\x54\x56\xf2\x6a\xfc\x15\x3f\x9c\x1f\x82\x3b\x6b\xf5\xea\x3b\x70\x02\x79\x7f\x3a\xc5\xb4\x63\xf2\xf5\xcb\x16\x4b\xf1\x05\x17\xaa\x64\xa1\xfe\x59\xd7\x06\x17\xf3\xd5\xa1\x28\xf7\xb2\xa2\xf3\xf6\x7a\x7c\x71\xfc\x53\x4f\x72\xff\xd3\xe7\x8f\x3c\x8c\x93\x97\xb8\xbc\xbd\xac\x7e\xdd\x8b\x86\x9b\x2d\xbe\x3b\x64\x62\x06\x41\xf1\xf2\x51\x50\xbb\x0e\xcb\x18\x5c\x67\x80\xb4\xea\x94\x49\x19\x22\xe6\x31\x7b\x19\x15\x61\xf8\x92\x49\x6a\x68\x7b\x61\x08\xb8\xd9\xab\xf9\x1c\xc4\x6d\xbf\x80\x31\x2f\xce\x12\xe3\x82\x7b\x60\xc1\x2a\xed\x61\x67\x61\xe1\xf3\xd2\xf0\x1a\xfc\x0b\x78\x96\x1f\x30\x4c\xd7\xa7\x6e\x81\xa4\xeb\x92\x20\xcf\x96\xa2\x05\x02\x31\x13\xb1\x3c\x58\x9a\xe2\x25\xee\x88\x8d\x75\x57\x96\x01\x79\x6e\xb4\x00\xb7\xde\xdb\x53\xf6\xb2\xc5\x7d\xec\xa5\x3e\x5a\x00\x88\xef\x67\x98\x9a\x8c\x65\xed\x39\xf2\x07\xb0\x4a\x92\x37\x61\x29\x57\xb6\x70\xa8\xd5\xe9\x39\xdb\xd4\x71\x43\x20\x75\x06\x17\x1c\xe6\x9a\x04\x34\xe8\xb1\x6b\x73\x17\x6c\x2a\x4a\xe7\xd7\x61\xad\xa5\x2d\x47\xe7\xd4\xd5\xa8\xed\xc5\xe8\x7c\xf0\x14\xa8\x9b\xcf\x46\x31\x3a\x1f\xc2\xad\xa3\x55\x1d\x77\x04\x1d\xb7\x8e\x9d\xe5\xdd\x39\x77\xde\xd5\x58\xd4\x70\xe7\x6e\x4a\x1d\x60\x2e\xec\xc0\xb3\xbe\x85\xb6\xe0\xda\x5e\xdc\x81\xaf\xf1\x86\x55\x57\xcc\x91\x8f\xda\x56\xfb\x30\xc1\x05\x6b\xc7\xa3\x48\x28\x63\xc1\x5c\x2e\x72\xf5\x72\xd2\x74\x39\x0c\xbb\x22\x0d\xb3\xdd\x70\xb1\xd5\x0f\x2a\xee\x46\xdb\x0c\x4d\x29\x72\x4b\xa2\x51\x49\xb2\xf0\x22\xf1\xf9\x71\x8e\xc9\xa4\x32\x24\x40\x2e\x62\xd8\xeb\xc0\x95\x2d\xb8\x32\x4a\xad\x36\x49\x38\xda\x35\xca\x8b\x42\xbd\x41\xcb\xd0\xe4\xc9\x72\x99\xbd\xa8\x35\xa5\x1c\xb8\x98\xee\x9c\x35\xa5\xa8\x5c\x66\x30\x01\x81\x57\x4b\x17\xa3\x96\x82\x44\x5e\x99\xbd\x61\x4c\x77\x05\x1a\xef\x7d\xde\x0a\xef\x9e\x21\x5d\x76\xd7\x5b\x61\x3a\x01\x3a\xb6\x01\x0e\x77\x7b\xd1\xa2\x23\x7e\x96\x33\xfb\x3d\x73\xa7\xb7\x4a\xaf\xc3\x6c\x47\x2a\x74\x94\xbd\x6f\xc0\x7b\x50\xa2\xa3\xad\x6e\x71\xaf\xe1\x0f\x4b\x60\xc6\x4a\x3d\x30\xe0\xfe\x96\x86\x60\xbb\x0a\x9d\xff\x90\xf7\xce\xc3\x10\x75\x91\xc1\xe6\xb2\xd8\x06\x36\x8d\x8e\x3b\xd2\x5e\x37\xce\x3d\xa9\xb9\xa3\xde\xe3\x05\xcd\x5e\x79\x3b\xb4\x88\xfe\xe6\xd1\xed\x4b\x3a\xd2\x73\x45\x5e\x5d\x0a\x35\x9d\x87\xd6\xcf\xd1\x73\xc8\xfd\xa3\x0d\xc9\x84\x2e\x63\xdb\xbd\x97\xb3\x2c\x4e\xc4\x08\x98\xb3\x59\x1a\x60\x58\xb0\xa3\x5a\x1f\xaf\x3d\x36\x4e\x5c\x94\xca\xf6\x98\x64\xd8\x2f\xe6\xa1\x71\x6f\x69\xf9\x5a\x9d\x2e\xd7\x9d\xcc\xf4\xd0\x5c\x68\xb8\x22\x84\x5d\x67\x35\x51\xd4\xf4\xb4\x2a\x36\x55\x1c\xe1\xf3\xd2\x0d\xc3\x16\xb5\x3b\xdd\x7e\x92\x54\xcd\x54\x67\x48\x03\xdd\x41\x82\x8c\x0f\x8e\x4a\x6a\x0e\x50\x70\x50\x22\xa3\xcb\xa0\x8b\x0b\x2a\xc7\x32\x7f\x48\x27\xcc\x06\x25\x87\x23\x96\x1a\x19\xc1\x1b\x0d\x9a\xd9\x03\xf7\xf2\x22\xe5\x2c\x8b\xe5\xa9\x84\xcc\x6c\xb5\xf0\x1e\x1b\xad\x12\xf9\x78\x55\x52\x64\xb2\xb6\xaa\x64\x98\x02\x76\xc8\x8a\xf8\x01\x70\xc3\x2b\xc9\x43\xd0\x43\xe8\x7f\x5f\x20\x22\x8a\x17\xb5\x6c\x4f\xb6\x96\x4a\xd2\x92\xb4\x6b\x7e\xee\x92\x43\xc3\x8a\x91\x26\xe3\xa5\x0a\x58\x5a\xfe\x0f\xb5\x31\x59\x03\x63\xb1\x21\xdf\x03\xcb\x3d\xc9\x0f\xdd\xae\xdf\x9e\x71\xcf\xec\x7b\xb5\x4b\x4b\x0f\xed\x42\x38\x78\xe3\xec\x1c\x03\xa5\x85\x3e\xa9\x68\x91\xf2\x76\xfc\x87\x3f\xff\xcb\xf9\x01\x7b\xf3\xfd\x0f\x3f\xc2\x3f\xef\x0d\x67\xbf\xf6\x35\x29\x68\xe0\xca\x1d\xae\xb3\x43\xb1\xaf\xc2\xb8\x45\xb9\x98\x0f\xab\x10\x2e\x26\x34\xb6\x35\xed\xd1\xc4\x2a\xac\x46\x18\xa7\xe0\x77\x2d\xf6\xd2\x49\xa1\x8f\xd2\xd0\x55\x9c\xca\x77\xe9\x25\xe5\x8d\x20\xc6\x5d\x51\xde\x90\x28\x5b\xca\x97\xb1\x58\x46\xd4\x59\x3b\xae\xb1\x49\xca\x1f\x83\x58\x08\x8c\x0e\x57\x99\x0c\xee\x24\xab\x18\x3a\xa7\x91\x95\xc3\x92\x2b\xe9\xc9\x4c\x7e\xca\xcd\xc8\x7b\x00\x4f\x36\x40\x65\x5c\xf3\xed\x6b\x12\x1a\x72\x56\x40\x46\x43\x64\x02\xae\x76\x36\x96\x04\x36\x75\x08\x08\xf0\x18\x54\x0e\x90\x5a\x20\x7a\xc3\xb0\xea\xae\x41\xe4\x9e\x1d\x75\x30\xab\x17\x20\xd0\x96\x91\x28\x99\x97\x83\xdf\x7d\x2e\x8a\x07\x21\xf7\xcb\x68\x38\x10\x6f\x06\x72\x07\xdc\xca\xd8\x81\x68\x97\x82\x51\xbb\x0e\xaa\x50\x71\x19\x7e\x70\xef\x51\xd4\xc3\x32\xd8\x8b\x61\x31\x98\x07\x8f\x1c\x9b\xde\xd4\x6f\x2d\xb8\x53\x79\x87\xf1\xcc\x0b\x5f\x07\x91\xe8\x74\x11\xcf\x1d\x0c\x72\x4b\x54\x55\x64\x32\x15\x86\xe7\x65\xc6\x66\x10\x97\x35\x2b\x96\xcc\x8f\x79\xb6\xb6\x1d\x13\x03\x39\x89\xd9\x92\xe7\x9e\xef\x99\xec\x10\x06\x23\x6c\xff\x7d\x8b\x65\xd2\x08\x35\x06\x6d\xc8\x45\x8b\xc3\xbc\x22\x83\x6b\xe9\xe1\x52\xea\x5a\x23\x9a\x5c\x7c\x38\xbd\xbe\xbc\x38\x9f\x5c\x4c\xd9\x87\xf1\xf5\xe9\xf8\xed\xd9\x84\x61\xde\x22\xbd\xf5\x91\x55\x9d\x5e\x08\x6e\xf4\xa3\xab\xab\xb8\x6d\xb7\x5a\xe7\xdf\xd0\xb3\x6a\x29\x62\x2f\x96\x21\xbf\x47\x56\x65\xd8\xf0\xef\x21\x8f\xc7\x3c\x0e\xfd\xee\x72\x33\xcc\xf7\x91\x7a\xcb\x8f\xf3\xfb\xbb\x17\x47\x3f\xb6\xe7\xf2\xd8\xac\xf3\x5f\xaf\x21\x06\x14\x1e\x08\xbd\xce\x97\xc9\xeb\xf2\xee\xe4\xe3\x2c\x8e\x1e\x82\xf9\xe1\xef\x59\x1c\x75\xd3\xc9\xd9\xdd\x0b\x88\x63\x7f\x10\x3f\x40\x18\xb8\x79\x76\xf7\xc2\xa2\xd9\xfe\x11\x24\xbf\x2b\xbe\xff\xfe\xfb\xff\xdd\x43\x7a\x7a\x87\x13\xcf\xce\x82\xa8\xf8\xfc\xfa\xdc\x9b\xc9\x9f\x35\x61\x1a\x59\x4b\x97\x2b\x74\x29\xae\x35\x42\x02\x41\xbe\x32\xb0\x0b\xce\x30\xb5\x4b\x2a\x66\x00\x0c\x67\x21\x73\xbb\x20\xb5\xbf\x0a\x12\xf1\x53\xc6\xca\xf8\x99\x82\x19\xa7\xf0\xb9\x7b\xf1\xe5\xee\xae\xc9\xea\x0e\x98\xdd\xd5\xd9\x89\x1f\x5f\xef\x5e\x6c\x70\xbc\x8a\x9f\x78\x7a\xb3\xe0\x61\x48\x94\xcb\x8a\xdd\xcb\xf2\x6b\x35\xbe\xbe\x81\xb0\x4d\x0f\xb0\xeb\xc6\x7f\x7c\xaf\x6f\xef\x7b\xb9\x4d\xc5\xfa\x2f\x29\x03\x1e\x55\xd0\xfc\xfb\xea\xcf\x2c\x08\x1f\x85\xce\xdc\x3a\x0f\xd9\x7f\x41\x1b\xfa\xea\x53\x2a\x16\x77\xc8\x84\xf2\xd5\x2c\x65\xd8\x64\x51\xca\x61\x4d\x86\x38\xc7\x1a\x69\x7b\x62\xd3\xdd\x20\x5b\x4d\xb7\x8c\xba\xda\xfc\xf1\x71\xff\xc1\x3f\xae\xfd\x98\x96\xdb\x90\x2a\xf7\x97\x3c\x17\xa8\x8e\x01\x95\x81\x7e\xa6\xf6\xf5\x59\x22\x66\x29\x83\xd9\x62\x4f\x6a\x54\xd4\x3f\x4d\xa7\x57\xe0\xf4\xf6\x79\x55\x26\x95\x00\x7f\xa4\x92\x4b\x17\x4a\xdb\xda\x54\x54\x7d\xae\x9b\x5c\x48\x38\xe2\x1b\xec\xb2\x69\x28\xb2\xbd\xe4\xa0\x5d\x35\x39\x50\xa0\xa2\x13\x22\xaa\xa4\xc8\xf2\xd0\xad\x0b\x8b\xbe\x3c\x95\x73\xf3\x8a\x0b\x02\x81\x72\xfb\xdb\xad\x36\x1a\x0e\x3a\x7a\xb4\xaf\xbb\xad\x1d\x72\xa2\xb5\xfb\xfe\x6e\xb6\x76\xcd\xce\x59\xee\xbe\x97\x4c\x74\xd1\x77\xc0\x71\x3f\xd2\xf7\xbe\xd5\xda\x33\xf7\x3e\xad\xb2\xef\x3b\xad\xe7\x80\x40\x68\x9f\x47\xf6\xe8\xa5\x01\xce\x5a\xe0\x9c\xec\xa9\xbb\x55\xf6\xe4\x65\x2a\x94\x6e\x6e\x92\x8d\x56\xdd\x1e\x17\x9c\x4b\xcb\x29\x5f\xa6\x71\x40\x2d\x48\x8f\xa3\xa3\x38\x91\xef\xac\xf4\xf4\x5f\x47\x7d\x0b\x42\x7e\xa4\x8f\x16\x67\x5b\xcd\x15\x87\x12\xc8\x26\x6d\x2e\xa1\xa6\x2b\x9a\x5c\x85\x0e\xb6\xc8\x10\x40\xa8\xe9\x8a\xa6\x23\xf0\x71\x47\x69\x67\xae\x2d\xe6\x6b\x87\x56\x39\x08\xdc\x09\x11\xb1\xfa\xad\x6e\x10\x72\x7c\x12\x90\xd2\xc9\xb8\xe2\x6c\xf7\x83\xb0\x8b\xb8\xdd\x87\x14\x15\x6f\x95\x5b\x06\x87\xd6\x7a\x64\x99\xee\x1c\xec\x6b\x3a\xa3\x91\xfb\x57\x27\x38\xa6\xaa\x44\x3c\x0f\x32\x1f\x71\xed\xbe\x10\x94\x1c\xca\x47\x24\x51\xe8\x8d\x4e\xfa\x24\x5a\x4f\xac\x14\x02\x8e\xd8\xca\x74\x64\x60\x09\xbb\xf4\xcb\x9e\x6b\x89\xab\xab\xb2\x23\xa6\xfe\x43\xd3\x89\x92\x23\xda\xce\x24\x21\x5d\xc5\x1d\xf9\x6e\x2a\x69\xeb\xe9\xd1\xce\xf0\xb8\x27\xb5\x81\x51\xf7\x06\x3a\x00\xb6\x36\xbf\x03\x32\x3e\x5b\x22\x44\x8c\x73\x15\x96\xc5\x4b\x92\x30\x98\x49\x1b\x98\xac\x10\xc3\x0f\x72\x09\x75\x40\xb3\xac\xeb\x88\xa8\x9c\x04\x30\x45\xb9\x34\x78\x92\x96\x10\x42\xe6\x77\x42\xfd\xba\xf2\xf2\x45\x67\xeb\xb9\x12\x73\xc4\x8c\xb9\x28\x20\x69\x88\x25\xac\x96\xf2\x8e\x9c\x95\x38\xa5\xfd\x87\x94\x11\x4c\x42\xac\xbf\xa2\x15\x05\x22\x3a\x41\x4f\x65\xd5\x05\x0b\xab\x0e\x20\xba\xc2\x44\x9e\xa2\xfb\x65\x0b\x0f\x37\xab\xff\x76\x73\x79\xd1\xc1\x54\x5b\x9a\xc8\x15\xb2\x80\x34\xf5\x4b\x63\xfa\x0e\xbb\x4a\x44\x0c\x90\x4c\xc7\x52\xec\xf6\xa2\x8e\xfc\x54\x2c\x22\x4b\x96\x5b\xa5\xa9\x5c\x79\x0a\x49\x79\xec\x77\xd4\xa6\x0a\x54\xde\x69\x0c\xc7\x1f\xa8\x02\x54\x63\x04\x8e\x3c\x20\x6b\x51\x17\x0c\xbb\xba\x44\x44\x70\xab\xbd\xbd\x5b\xb7\x5e\x5d\xec\xab\x3b\xe2\x2a\xd5\x72\x4b\x1c\xdb\xc5\x7b\xf2\xc5\x66\x26\x32\xdf\xa8\x33\x04\x02\xdb\x4e\x62\x5b\x99\x8c\x29\xf2\x96\xfd\x77\xd1\x74\x32\x64\x9c\x38\x3e\x71\x69\xb4\xf9\x6e\x9a\xd2\x64\xae\x59\x1c\x3e\x56\xde\xd3\x94\xd1\xd3\x5d\x91\x88\x05\x6d\xbc\xfa\x7f\x29\x3a\x19\x32\x4e\x38\x82\xda\xd0\xfe\x2c\x13\x8b\x39\x50\x70\x46\xd7\xb7\x19\xc9\x74\x88\x48\x21\x7d\x17\x1e\x2a\xc6\xf4\x13\x49\xcb\xba\x44\x44\x7f\x0f\x92\x64\xe3\xab\x74\xe0\x30\xd6\x20\x72\x6f\xdd\x1d\x82\xf9\xb6\xf4\x28\x84\x80\x9c\x32\x59\xbd\x97\xe1\x95\x8b\x97\xce\xd1\x7a\x5f\x86\xa5\xbc\x8a\x33\x0c\xe5\xf4\x52\x7c\xaf\xbc\xfe\x53\x29\x96\x60\x25\xc1\xc0\xde\x7b\xce\xd3\x43\xc6\xde\x81\x02\x18\xc3\xad\xe6\x2a\xca\xbd\xcf\x42\x35\x09\x93\x03\x31\xdb\x72\xf6\xdb\xec\xa1\xb4\x17\x59\x7f\xf9\xd1\xe2\x37\xc3\x2d\xc2\x3f\x18\x7c\xda\x77\x39\x62\x17\xb1\x8c\xb8\x89\xc9\xce\x3b\xbd\x73\xec\x2a\x51\x31\x40\xc8\x4a\x1f\x0c\x60\xd8\x93\x27\xbb\x3e\x92\x14\xe2\xcf\xd8\xef\xf1\x3d\x66\x47\x15\x45\xd1\x77\xe3\x25\x0c\x0b\x08\xed\x95\xe9\xc3\xbc\x0e\x45\x96\x2a\x87\xdd\xf8\xee\x37\x96\x3f\xf3\x59\x21\xe3\x38\xa5\xde\xd3\x3a\x28\xe8\x2c\x16\xdd\x27\xca\x47\xf9\x2a\xe1\x70\xaf\x85\x97\x9c\xeb\x71\xfb\x1a\xec\xa6\x20\xba\xaa\x0a\xc9\xaa\x47\x38\x34\x7d\x82\x64\x09\x86\x6d\x6e\x1c\x3b\x48\x8b\x0c\x4f\xee\xef\xe3\x07\x88\xd4\xf3\x5a\x46\x9a\x4d\xbc\x20\xcd\x54\xe6\x66\x16\xcf\x30\xe9\x91\x5f\x4f\x9c\xcb\x22\xee\xa5\x62\xe9\x86\xaf\xfc\xf3\x32\xbc\x89\xc4\x6c\xc6\x73\xf1\xa5\x0d\xb2\xef\x1d\x41\xaf\xd6\xc9\x1a\xe0\x48\x62\xe9\xaa\xd2\xf1\x54\xcb\x66\x45\x11\x7a\x87\x6c\x28\xf6\xff\x80\x2d\xee\x9f\xb8\x0c\x0e\x7c\x80\xb3\x5f\x90\xe3\xf5\x2b\x86\xbc\x98\x8a\xce\xf4\xf5\xab\x61\xee\xdd\x09\x13\x27\x19\xaf\x52\xb1\xa9\x4f\xf3\xd5\x06\x8c\xfb\x38\x0e\xb9\x67\x88\x4e\xee\x44\x63\x48\x84\x65\xbf\xcd\xf2\x54\xcc\x80\x86\x04\xb5\xbd\x68\x0d\x89\x58\x66\x0b\xde\xfe\x90\x65\x71\x4a\xaf\x19\x8a\x85\xb5\x7c\xef\xc6\xa7\x67\x93\x13\x2d\xb6\xcd\xd7\xf6\x74\x27\xe3\xe9\xed\xf5\x84\xbd\x3b\x1b\xbf\xd7\x7b\x49\x69\x4a\xd9\x73\x41\xe7\x3b\xf6\xc0\xf3\xd9\xa2\xa1\x1d\x67\x76\xd7\xc7\xe4\xfa\xce\xc8\xe4\x4d\x4d\x66\xb9\x33\x21\xd6\x76\x46\xc5\x1f\xc5\x1a\xe9\x0a\xca\x5c\xd9\x19\x53\x9c\xce\x47\xd2\xaa\x0f\xb4\x9f\x34\x96\xc6\x30\x97\xe9\xfc\x5a\xfc\x39\x8d\x95\xbf\xb5\x0a\x5a\xe0\xf4\x95\x07\xe0\xd0\x47\x3a\xd7\xf6\x36\x55\x75\xc6\x23\x1d\xb9\x0f\x2d\x8e\x1a\x08\x35\x9d\xd1\xe0\xe5\x52\xcb\xb7\xc1\xbb\xa6\xc1\xbe\xff\x40\x5c\xfa\x49\x59\x9f\x61\xec\x2e\x34\x5d\xc9\x50\x71\x8a\x45\x47\xe5\x35\x47\x25\xf9\x41\x1d\x30\x41\x40\xf7\x8f\xa5\x8b\xaf\xf9\xbc\xdb\x9d\x90\x3b\xd6\x52\x89\x3d\x80\xd0\xc9\xca\xfb\x5a\x66\xf5\xe7\xd1\x63\x90\xc6\x11\x6e\x6f\x4b\xfb\x3a\xc3\x01\xe8\x80\x94\x1d\xa4\x51\xf7\x40\xe6\xbb\x93\xae\xe2\x0e\x7c\x65\xf8\x83\x18\xa3\x0a\xda\x7f\x5e\x63\x2d\x7b\x14\xca\xa6\x1b\xee\x40\xe5\x9f\xef\x42\x0f\xa2\xae\xa9\xe0\x46\xbe\x5e\x77\xa2\x54\xed\x8f\x47\x1a\xa4\xbb\xc0\xd9\xae\x49\x45\xa3\xbf\xd6\xda\x2e\x60\x4f\x1b\xee\x7d\xc1\xb2\x54\x1e\x8c\x60\x1c\x82\x70\x75\x20\xba\xd5\x27\xb1\x6b\x06\x49\xd0\x7c\x1e\x4a\xf1\xcf\x01\x7a\xf7\xe4\x2a\x4a\x42\xe2\x89\x6f\x2e\xe4\x84\x97\x89\xf9\x0a\x7c\x47\x5c\xec\xa5\x8c\x21\x17\x85\x2f\x83\x58\xbf\xf2\x65\xbc\x8f\x24\x8d\x31\x7c\x03\x98\x0f\x82\xab\x56\xba\x44\xbc\xfa\xf8\x18\x8e\x54\x5c\x50\xc2\x3e\xfe\x29\xc8\x17\x70\x14\x54\x27\x6b\x83\xad\xbb\x2e\x11\xd1\x32\x98\xa7\x9e\x2b\x24\xdb\xca\x44\x4c\xa2\xb7\xcb\x99\x47\x66\x8a\x2e\x69\xcb\xaf\xd1\x01\xc9\xb2\xae\x35\xa2\xf7\x93\xe9\xf4\xf4\xe2\x3d\xbb\x99\x8e\xaf\xa7\x86\xad\x94\xb6\x9c\x3d\xa7\xb3\xcb\xb7\xe3\x33\x76\x79\x35\x3d\xbd\xbc\x30\x84\x7f\xd0\x96\xb3\x75\xf1\x79\xaf\x4c\x31\x2e\xc7\x55\x90\x59\x93\x51\x7e\x57\x71\x7b\x01\x4b\x43\x1e\x48\x6f\x20\xad\xf6\x55\x8c\x21\xb1\xce\x7d\xe2\xb9\x50\xc9\x66\xdc\x06\x89\x3d\x01\x3a\xb6\x24\xc9\x76\x15\x37\x7e\x27\x3c\xc8\x12\xd6\x36\xc1\x87\x87\x06\x5b\xc9\xce\xf2\x64\xce\x6a\x9b\x6b\x48\xf0\x48\x6b\x47\x67\x7a\x64\xe4\xbc\xe6\xbb\x51\x45\xfe\x62\x5f\xf6\x90\x6b\xe0\x19\x10\xd0\x5b\x07\x4f\x0a\x76\x01\xca\xa2\x7b\xee\x87\x39\xb9\x4d\x40\xa3\x79\x9e\x9e\xb2\x07\xce\xe4\xd6\x00\xdb\xc3\xfe\xde\x61\x3d\xa9\xb9\xa3\x1e\x32\x40\xfd\xb0\xc4\x7b\xc8\xd4\x15\x1f\xdb\x39\xbb\xef\x2e\x59\x91\xe5\x7d\x96\x4c\x1e\xfb\x65\xee\xd2\x26\xd9\xde\x1a\x60\x68\x4e\x64\x69\x75\x7e\xc3\x16\x6b\x8b\x4d\x55\x32\x1e\x69\x00\x9d\xad\x33\x7d\x81\xf1\x73\x16\xe4\x71\x1a\x88\x79\x5b\x50\xd7\x9f\x5d\xb9\x90\xe8\x87\xaf\x22\xbc\x62\xfa\x8b\x6a\x73\x4d\x80\xd4\x7e\xc5\x6c\xb5\x49\x69\x4d\x48\x80\x53\x8b\xcb\xd2\xe1\x48\x8d\xdc\x88\xc8\x87\xe6\x20\x4f\xa9\x4a\xc6\xa3\x02\xba\x6e\x12\x65\x76\xe3\xc0\xb2\x36\x1d\x55\x51\xaa\x2a\x98\x06\xaf\xb9\x10\x32\x95\x4f\x40\x3e\x7c\x0f\xcf\x2e\xac\x1b\x71\x00\xca\x64\x69\x9a\x5c\x32\xba\x4a\x60\x4f\xc0\x01\x9b\x4a\x2b\x23\xfd\xea\x29\xfd\x72\xee\x40\x82\x3a\xc8\x37\x68\xc3\x77\x5b\x27\x94\x79\x8b\x7f\xc1\xd2\x10\x35\xe3\xe8\x28\xd5\xa1\xfa\x4d\x54\x27\x35\x82\xed\x88\xf9\xee\x9a\x64\x3b\x16\xc2\xb7\xd0\x56\x3b\x41\xb5\xef\x46\x7c\x86\x16\x7a\x06\xf1\x77\x27\xe5\x8e\x85\xd9\x4f\x07\x7f\xe6\x0e\xfb\xcc\xc3\xfb\x5b\x1d\xc7\xbb\x1c\xb0\x7b\x1c\x99\xd5\x91\x7a\xe6\xba\xc7\x72\x21\xe5\xac\x3f\xc8\x41\xee\xba\x9f\x22\x52\x71\x46\x89\x31\x83\x40\xab\x57\x17\x51\x36\x11\xb5\x9c\xdb\x7d\x58\x66\xfb\x91\x79\x67\xf2\x0d\x22\xcb\xf6\x9d\xce\x0e\xb3\xfc\xed\x95\xb7\x7b\x8b\xec\xb1\x01\x9e\x55\xde\x96\x24\x84\x7d\xf6\xfb\xce\xf4\xfa\x20\x77\xdb\xf7\xdb\x13\x70\xc3\x96\xb5\xe5\x3e\x34\x7e\x47\x9b\x19\xbd\x3f\x65\xba\x34\x39\xb8\x19\x81\x17\xc3\x0d\xfc\x05\xce\x32\x8d\x2e\x5b\x69\x21\xc3\xdf\xad\xec\x83\xb5\x5b\x7b\x64\xfb\x6d\x83\x1d\xb0\x23\xcb\x2d\x2d\x3c\xdb\x13\x7a\xbe\xd6\x5d\x3a\x50\x92\xf2\xee\x8e\xd1\xa0\xb2\x3a\xce\xf7\x7d\x48\x5a\xe3\xc7\x40\xcd\x18\x87\x00\xb3\xe5\xcc\xc2\xc2\xc7\x05\x15\x4e\xe5\x94\x45\x21\xbb\x8f\xfd\x95\x16\x2d\x9d\x00\x0d\xdb\x92\xe7\x8b\xd8\x67\xaf\xde\x4f\xa6\x07\x57\x97\x37\xe2\x3f\xb7\xd3\x83\x93\xc9\xd9\x64\x3a\x39\xe0\xf9\x4c\x6f\x2f\x46\xac\x6d\x8f\x2a\xce\x72\x18\x1d\x7a\xc6\x5b\x05\xc8\xb4\x55\x16\xa8\xe5\x6a\x94\x15\xf7\xd2\x8a\xc2\x20\xa8\x55\x25\x6b\x0c\xa7\x17\x37\xd3\xf1\xd9\xd9\xe4\x84\x5d\x9d\xdd\xbe\x3f\xbd\x60\xc7\x97\xe7\xe7\xe3\x8b\x13\xbd\x17\x89\xb6\x9c\xed\xa6\xeb\x74\x1e\x81\xfb\x6a\x23\xf8\x84\x96\x9b\xb9\xb0\xbd\x98\xaa\xab\x56\x11\x16\x54\x3c\x92\xb2\xef\x76\xe4\x7c\xa3\x56\xa7\xe0\x8a\xc5\xa8\x9e\xe5\xec\x36\xf3\xe6\x86\x66\xd0\x95\x73\xe5\x64\xd2\x26\x4c\x45\x9d\xf9\x55\xc9\x0a\xc2\x20\xe2\xec\x21\xf4\xe6\x99\xe8\xc2\x9f\x67\x3c\xc9\xd9\xe8\xe1\x3b\x88\x20\x0d\x26\x9e\xe0\x80\x05\x8e\x88\xdc\x67\x4f\x0b\x30\x49\x95\x59\xe1\xd8\xb2\x08\xf3\x20\x09\xb9\xb4\xd6\x92\x37\x6d\xcd\x5e\xa1\x9f\x62\x9f\x13\x8a\x7b\x7b\x5d\xc4\x6b\x3f\x71\xe5\x09\xee\x43\x6e\x03\x7b\x31\xbb\x29\xb8\xa3\xbb\xae\xf9\xa6\x97\x4c\x68\xe8\xba\x29\x0c\x81\x4e\x11\xce\x5c\xb1\xb5\xd7\x77\x40\x56\x3a\x65\x88\x5d\xfb\xd1\x3a\x68\x03\x78\x12\x80\xc1\x36\x66\xd1\x93\x99\x69\x54\x7e\x9a\x0f\x5e\x18\xf8\xaa\x96\xb4\xd5\xc6\x1c\x81\x47\x77\xd1\x2f\x90\xdf\xe2\x8b\x4c\xc5\x71\xf7\x22\x49\xe3\x3c\x9e\xc5\xe1\x9d\x60\x77\xf7\x22\x9f\x25\x77\x2f\x0e\xca\x77\x3e\xc6\x49\x41\x31\xe5\xeb\x37\xdf\x1f\xfe\xf0\xe3\x8f\x87\x6f\x0e\xdf\xfc\xaf\x5a\xb1\x24\x4e\xf3\x4c\x16\xf8\xd3\x9f\xbe\xff\x17\x48\x00\x22\xc4\xb9\x8b\x7e\xb5\x68\xb0\x7f\x6c\xb1\x1c\xbe\xa3\x74\x0e\x45\x7b\xe6\xb2\x6f\x58\x34\x93\xb1\x16\x01\x05\xe6\x37\xc4\x25\x47\x05\x6e\xf3\xf9\x83\x98\xc4\xd0\xb1\xbc\x8c\x76\x57\x72\xd0\xc2\x52\x69\x12\x47\x8a\xc4\xd5\x78\xfa\xd3\xeb\xe9\xe5\x6b\xb9\xb0\x8f\x30\x6b\x0a\x1b\x31\x57\x66\xd6\x6a\x80\xa4\xbf\xb6\x54\x80\x8e\x73\x85\x7f\xc9\xb8\x7c\x26\xad\x99\x56\x99\xd6\xc0\xd1\xcc\xb4\x0e\x6f\x16\x20\xd3\x66\xe7\x7c\x19\xa7\x7a\x15\x5b\x5b\x8e\xce\x69\x59\x64\xb9\x72\x69\x8e\xa3\x51\xc4\xe7\x82\xc9\x23\x2f\x63\x89\x74\x23\xb0\xad\x4f\x40\xf6\x88\xe3\x1f\xe6\x87\xd6\x68\x57\x06\x4c\xd6\x35\xc9\x68\xae\x95\x47\x22\xfc\x6b\xd8\x7f\x76\x15\x27\xf3\xbd\xb9\x39\x63\xc7\x3c\x95\x0e\x2d\x5f\x54\xf6\x59\x74\x30\x9c\x06\xc9\x39\xcf\x60\x2d\xb2\xc0\x43\x25\x43\xc6\x29\x63\xa2\x38\x7d\x2e\x9b\xaa\x74\x3c\xd5\xd5\xca\x91\xde\x38\xcb\x5c\x98\xcc\x53\x26\x98\x2a\x94\x7b\x8d\x58\x9d\x1e\x03\x5f\x25\x82\x19\xcd\x50\x87\x3c\x64\x57\x21\xf7\x84\x90\xea\xa5\x18\x35\xb5\x2e\x1b\xdf\xff\x0e\xeb\x00\x46\x44\x44\x40\x90\x5d\x25\xc0\x14\x35\x51\x2e\xf6\x6e\xe8\x88\xb0\x5d\xc1\x34\x03\x7e\x2b\xc0\xc8\x6d\xb9\x0e\x84\x08\x47\x77\x60\x99\x26\x0f\xa4\x5e\x8a\x55\xa7\x5c\x69\xa0\x48\x95\xea\x16\xfd\xd4\x3a\x5b\xa2\x2f\x59\xba\x1c\x90\x1a\x1d\x4f\x88\x51\xe9\x81\x4c\xe9\xea\x44\x9b\xea\x6c\x3c\x00\xc5\x1d\xa0\x1f\x04\x70\x2f\x8c\x95\x7d\xea\x2c\x2e\xa2\x1c\x59\x94\x8b\xd3\x31\x3c\x01\x36\xa7\x8d\x32\xb5\x35\x0b\x0d\x1e\xed\xd6\xbb\x9d\x72\x1b\x52\xea\x6c\xbf\x62\xf7\x62\xe7\x2e\xf7\x12\x35\x1f\xb1\x3d\x5f\x06\x12\x8f\x54\x85\xce\xe0\x37\xa9\x7b\xf6\xa0\xe8\x8c\xbe\xd1\x80\x8d\xa6\x1b\xe0\x1b\xf5\x23\xbe\x43\x99\x42\xcc\x0f\xb4\x90\xc9\x81\x36\x46\xcd\x80\xd2\xd9\xb1\x21\xcb\x89\xfb\xd1\x6a\xfd\xe8\xc4\xab\x2b\x4e\xe6\x5b\x9e\x1a\x1d\xb2\x75\x18\x2e\xf1\x50\x1f\x61\xcf\xbe\x22\x1d\x4b\xcb\x10\xa1\x8f\x38\x22\x95\x41\x50\x3a\x4d\x0d\x7b\x98\x11\x34\x2c\xdc\xd5\x03\x77\x82\x64\xec\x10\x1d\x11\x1d\xb5\xbd\xd4\x5b\x22\xaf\xa9\x7c\x42\x6a\x64\x22\x15\x32\xca\xa2\xe3\xd0\xbc\xb5\x14\x99\x8b\x0c\xe8\x87\xb1\x3a\xbf\x6c\x06\x0d\x7b\x29\x8d\xd7\x31\xe4\xd9\x07\x2f\xb4\x8c\x33\x7b\x1b\xf1\x72\xd8\xae\x89\x6f\xd1\x66\x47\x9d\xa1\x70\x8c\x27\x2c\xa8\xae\x07\x70\x49\x81\x72\x94\x91\x25\x6d\x7b\x1d\xb5\xba\x75\xbb\x9e\x79\x62\x32\xbf\x14\x82\x9a\x63\x1a\xe8\x8a\xd9\xf3\x81\x80\x74\x70\x84\x55\x7a\x78\xc3\x51\x56\x8e\xf7\xaa\xf2\x9a\x58\xcf\xda\xbe\xa6\x03\x9a\x2a\xff\x4e\xe9\xa1\x03\x91\x61\xe1\x85\x0f\x3b\xb7\xba\xa7\x8e\x05\x40\x17\x62\x74\xcc\x6b\xaf\xf3\x6e\x48\x6d\x65\xe9\x1c\x8d\x89\x72\x35\xa5\xe8\x5c\x94\x2b\x8d\xfa\xc2\x33\x79\xc3\xae\x6c\x08\x94\xb7\x4a\xf9\xd0\x2a\xeb\xf0\x70\x84\xe9\xb2\x6c\xf8\xab\x74\x63\xd4\x56\x70\xe1\xdd\x74\x28\x74\x1c\x6e\x44\x32\x0e\x38\x2b\x03\x29\x0f\x2d\x2d\x2c\x20\x69\x6b\x38\x70\x97\xb6\x3a\xaf\x3c\x65\xb9\x14\x40\x60\xc9\x24\x95\xe1\x9a\xe5\xd5\x21\xcb\x56\x59\xce\x97\x07\xca\xb8\x02\x4f\x5f\x22\x48\x19\x02\xb3\x20\x98\xfb\xa8\xd7\x98\x8e\x17\xb2\xee\xa6\x45\x84\xb3\x94\xde\x62\x60\xdf\xec\xe9\xed\x82\xd6\x23\x72\xc0\x94\xe9\x65\x55\xb3\xc7\x0f\x8e\xe3\xaf\x07\x49\x3a\xfe\xca\x76\x47\xa5\x83\xed\x86\xa7\xaf\x41\xe4\xbe\x4e\x34\xf7\xf0\xc0\x31\xee\x6a\x49\xb5\x66\x33\xdb\x81\x87\x48\xc3\x15\xa1\x9c\xfc\xca\x98\x74\xca\xb4\xd2\x16\x5a\x47\x65\x57\x4c\xa8\x1a\x12\xa1\xb4\xd7\xa1\x21\xa8\xc5\x4a\xa9\x4d\x6f\x9d\x5d\xc7\xa2\x1a\x0d\x47\xe5\x11\xee\x6d\xcd\xbd\x66\x24\x56\x15\x69\x58\x36\xfd\x2d\x95\x90\x2a\x96\xf3\xe6\x5b\x8c\x6f\x58\x44\xd1\x46\x0a\x82\x8e\xaf\x38\x34\x8f\x61\x24\x94\x99\xe4\x11\x85\x0a\x14\xd2\x53\x1c\x2b\x82\x54\xec\x0d\xbf\x9c\x4c\x9a\x2d\x76\xe2\xeb\xa8\xe4\x88\x61\xed\x5b\x63\xc9\xbf\xad\x82\x1b\x6f\xe5\x2c\x63\xc7\x77\xab\x30\x89\x27\x7c\x42\x75\xd1\x2d\x54\x79\x79\xbb\x9d\x99\x6e\xc5\xed\x2a\xd9\x63\x88\x85\x92\x00\xfd\x69\x9d\x4d\x02\x82\x71\xa6\x18\xe3\x47\x26\x9b\x31\x6d\x51\xb6\x6a\xd3\x77\xb0\x67\xb1\xca\x32\x1c\x18\x96\xfc\xb6\x32\x04\x19\x55\xed\xd8\x60\xfe\xd7\x5e\x88\xc2\x63\x2e\xbe\x05\x87\xbd\x73\xa6\x0f\x24\xa7\x2b\x46\xe2\x83\x71\x32\x8a\xdc\xd8\x4b\x34\xc5\x48\x7c\x52\x30\x06\x10\x53\x0b\x8f\xfc\x24\x0e\xe0\x46\x20\x90\x59\xce\xf0\x02\x4e\x5e\x4a\x9a\x2d\x3b\x1d\xa9\x10\x50\xc6\x9f\xd0\xb0\x3a\xc1\x63\x9b\x87\x2a\xdf\xe3\xcb\xed\x58\x1a\xcd\xfb\x42\x03\xe4\xfe\x24\xad\xf1\x9f\x43\xbc\x4e\x4f\x34\x42\xb2\x2a\xa3\x27\x2a\xe5\x67\x16\xfb\xea\x2a\x3d\x8e\xf8\x66\x3a\x0a\x2f\x8a\xc5\xa0\x83\x44\x31\xb7\x11\x9e\x96\xc7\x8f\xa2\x47\x05\xbe\xcf\xa3\x03\xb9\xed\x14\x04\x47\x15\x25\x69\xc5\xf3\x14\x60\xd4\x12\x19\xaa\x11\x33\xd4\xd4\x92\x33\x69\x9b\xe3\x1b\x44\x48\x6d\x5d\x18\xd5\xa3\xea\xd2\x7c\x53\x93\xa9\x29\x7d\x10\xa0\x18\x45\xd4\x4f\x78\x43\x90\x24\xe0\xaf\xd9\x9b\xaa\xd8\xc9\x82\x5b\x81\x0b\xed\x43\x11\x86\x2b\x08\xeb\x6a\xc0\x4a\xab\xee\x88\x2b\xc8\x6a\x91\x68\x37\xce\x42\xfc\x00\x2c\xe3\xc4\x58\x39\x60\x49\xd3\x3e\x81\x07\xd0\x3f\xd0\x2e\x54\x74\x29\x34\x76\xc7\x9c\x9d\x1d\x99\x91\xf7\xc9\x9a\xd0\x1e\x89\xda\x8b\xc6\xa5\xfa\x8e\x99\xbb\x16\xb0\xf9\x36\xa4\x52\xb2\xae\x47\x40\xf2\x19\x33\x1d\xe1\xa1\x7c\x15\x90\xae\xea\x97\x38\xb2\x8a\xe4\x00\x53\xd4\x04\x51\x61\x5a\xda\xfb\x90\xea\x81\x77\xad\x86\x28\x05\xd7\x11\xac\x25\x1d\x0a\xd2\x60\x59\x2c\x99\xb7\xc4\xbb\x71\x31\x15\xaa\x8b\x1a\xd9\x8d\xaa\xb9\x6f\x7d\xd1\x2e\x5e\x2c\xbc\xc7\xd2\x87\xe3\xcd\xf7\x3f\xfc\x78\x7e\xc0\xde\xbc\x17\xff\xff\xfe\xbd\xfe\x20\x67\x67\x7c\x9e\x4b\xd2\x43\x36\x7a\x03\x8b\xa6\x98\xd7\x31\x6a\xa4\x28\x5c\x44\x78\xbb\x05\xf7\x99\xc8\xc3\xb4\xfa\x3c\x23\x96\x6f\xb9\xc5\xd8\xab\x13\x99\x66\xeb\x68\xfd\x6e\x07\x9d\x6a\x57\xf8\x6c\xf7\x06\x25\x70\x1c\xd6\xaf\xc4\x00\x16\x9b\xe1\x38\xf2\xb3\xef\x70\x8c\x1f\x9f\x9d\xc2\x7c\x89\x03\x7f\x63\x0b\x2c\xe7\xa7\x03\x86\x5a\x88\xb2\x46\x64\x19\xcc\xfe\xea\xba\x32\x13\x13\xfe\x0a\x6b\xe8\xad\x74\x6f\xa4\x22\xa2\xee\x37\xd7\xdc\x1d\xe4\xa8\x5d\xea\xaa\x8f\xfe\xc3\x9f\xff\x05\xda\xb4\x6c\x5a\xc3\xc7\xa3\xd4\xb5\xef\xb3\xd2\x66\x54\xdd\x30\x77\x99\xa1\x76\x94\xb6\xe7\x8a\xc1\xcb\x79\xcb\x1d\x40\xa5\x48\x36\x62\x20\xac\x35\x49\x3d\xb4\x01\x48\x5a\xe3\x07\xbb\x79\x2d\x92\xe6\x4b\x12\x4d\xfd\x86\x71\xe3\xad\x3d\x55\x93\x3f\xe3\x85\x9b\x2f\xe3\x05\x7f\x62\x57\x5e\x96\x3d\xc5\xa9\xaf\xa7\xdd\x5a\x88\xc4\xc3\xe8\x8b\xb9\x5d\xc0\x9e\x76\xcc\xc6\x57\xa7\xeb\x8d\x68\xc6\xc5\x44\x75\x2b\x34\x43\xd8\xc8\x89\xad\x6a\x10\x4d\x83\x04\x36\x7a\xca\x0a\x40\x14\x56\x0f\x40\x2b\x93\xe7\xb0\xa2\x07\x95\xf5\xf5\xcb\xd6\xee\x18\xd9\x4e\x38\xe0\x16\x36\x93\x9b\x31\x0f\x82\xc7\x33\xf6\x73\x5c\x48\x0b\x2b\x5f\xe6\xf1\x28\xcf\xeb\x60\x3c\x88\x6d\x17\x8c\x0d\xbc\x37\xd9\x0a\x9f\x52\x8e\x9e\xf2\x8a\x45\x46\xe8\x14\x0a\x77\x0e\x0e\x73\x62\xf0\x09\x01\x6b\x81\x7c\xaa\x22\xca\xd9\x0e\x14\xdc\x46\x5c\x0b\xf1\x52\xdf\x72\x57\x08\xc3\x4b\x4b\x78\x01\x20\xad\x93\x3d\x64\x53\x31\x19\xa6\x62\x4e\xc4\xec\xcc\x2d\x8c\x0f\x24\x30\x1e\xd5\xa5\x94\x01\x54\x42\x69\x05\xad\xcb\x5b\x37\x5c\x8b\x2a\xa1\x41\x1a\x25\x35\xce\x3d\xcf\xde\xbc\xd3\x85\x9a\x05\x15\xb8\x12\x04\x9e\x8b\x6b\xc2\xe7\xc0\x66\x24\x84\xec\xe5\x2b\x31\xb7\x6e\x7c\x95\xcd\xa0\x25\x6e\xcd\x9a\x04\x9a\xa1\x52\xda\x76\x43\x5e\x9c\xe6\x90\x30\x0d\xbd\x7e\xf4\x28\xb3\x89\x74\x0e\x85\xdd\xa7\x19\xcf\x76\x29\x0a\x97\xb5\xad\x45\x37\x2f\x7d\x59\x0a\xc7\xd9\xc2\x8b\xe6\x62\x05\x7d\xe2\xe8\x96\xed\x1b\x66\x63\x63\x61\x0a\xcf\xf2\xda\xab\x53\x44\x4d\x41\x0a\x2f\x43\x00\x7b\x13\x67\xab\x6a\x14\x1c\xd2\x2d\x39\x4b\xf8\x0c\xab\xa0\x37\xef\x56\x73\x1a\x97\x19\x2a\x05\x0a\x3a\x18\xdc\x18\x34\x11\xaf\x65\xe5\xb2\xc4\xfd\x03\x38\xfc\xc2\xd1\xa4\x3c\xac\xb7\x96\xad\x46\x3d\x13\xf8\x81\x19\x50\x65\xab\xc2\xa4\xb7\x70\x7e\x27\x43\x73\xac\x11\x74\xc9\xe1\x48\x8c\x8a\x79\x08\xa8\x7b\x47\xa8\xff\x8c\xc6\xbe\xdd\x87\x1a\x11\xb5\xc5\xb4\xd3\x56\x8a\xc2\xa5\x32\x54\xe9\xe0\xd3\x5e\x8e\xc4\x49\xdd\x66\x37\xf3\x97\xe0\x79\xc3\x3d\xe7\xb0\x8b\x35\x2e\x9f\xa4\xea\x2e\xb8\x36\x2f\xb4\x2d\xf1\x18\xab\x51\x70\xd8\xda\xd0\x99\x8a\xd2\xf8\x35\x43\x30\x76\x76\x81\x8e\x0a\x2e\xbc\x21\x2d\x02\x29\x29\x80\x0d\xbe\x1e\x44\x5d\x65\xf8\xd2\x9a\xda\x01\x8e\xff\x77\x22\xdd\xe0\xec\x5c\xe4\x5e\x5b\x6c\x59\xf7\x1c\x6d\x15\x07\xfe\xf6\x6c\xfb\x71\x1b\x64\x29\xde\xf5\x1a\x4c\x53\x55\xba\x55\xa0\x7e\xf4\xc8\xc8\x21\xca\x61\x16\xcc\x23\x6e\xfe\x9c\xba\xa2\x0e\xfc\xba\xfb\x4e\x6b\x39\x12\x27\x65\x09\xe5\xb8\xde\x91\xaa\xbb\xe0\xda\x48\x85\x60\x09\xc7\x54\x8b\x84\x02\xad\x79\xd7\x97\xd5\xae\xad\xe4\x42\x86\x82\x13\xaf\xd4\xcb\xe0\x23\x8e\x20\xe9\x34\x08\x08\x73\x16\x4a\xe3\x9d\x20\x5a\x9f\x28\x1c\xbf\xc3\xe3\xbc\xe6\x70\x15\xe5\xa0\x90\x01\x69\x0f\x5a\x14\xc4\xfc\x48\x5e\x26\xc3\x55\x47\x8e\xa9\x61\xe3\xa5\xbc\x01\x31\x61\xb3\xa9\x65\x8f\xa2\x0a\x8a\x53\x1d\xcc\xeb\x79\x9b\xca\x5a\x73\xbc\xfc\x8b\x96\x41\xfd\x95\x3d\x3d\x99\xf4\x53\x4f\x74\xf3\xbd\x3d\xe5\xeb\xf7\x6c\x7c\x72\x7e\xaa\x4f\x4b\xdd\x52\x82\x46\xfd\xf6\xe4\x74\x7a\x79\x6d\xa6\xbf\x59\x86\xc4\xe1\x7c\x7c\x31\x7e\x3f\x31\x73\xd8\x2a\x43\xe1\x60\x68\xf8\xc6\x4b\x7b\x9a\x06\x03\xec\x4b\x27\x2b\xeb\x4b\xd8\xa8\xa2\xb3\x84\x0c\xa7\x91\xd5\x0d\xb7\x6b\x97\x92\x26\xb6\x44\x02\x24\x6c\x8d\xf3\xe1\xf2\x2c\x57\xe6\x85\x36\x42\xb2\xaa\xe7\x8e\xa4\x19\xa3\x03\x4e\x50\x94\x3d\xcf\xfa\x90\xd9\x1e\x1e\x89\xd8\x50\x98\xf5\x53\xbc\x7d\x45\x0a\x16\xfd\x35\x61\xf3\x25\x85\x66\xb7\xbf\x4d\x7b\x21\x7b\x1e\xd2\xf2\x8f\x57\xb1\x67\x7c\x69\x19\x50\x9a\x7e\x56\x86\x5a\x7a\x00\x74\x0a\xfd\xd1\xa9\x68\x32\xfd\x41\x76\x12\xa2\x63\xad\x25\xdc\xde\x30\x93\x44\x2b\x38\x39\x6f\x08\xfd\x27\x48\xe3\x08\x23\x43\x7a\x0f\x39\x4f\x37\x6d\x2e\x13\xc8\xbb\x6e\x98\x01\x76\xcb\xcd\x5a\xea\x2b\x2f\xf0\x1b\x57\xf8\x7a\xc8\xa6\xa2\x04\x7e\x59\x26\x9d\xd9\x05\x60\x99\x31\x03\xbd\xa4\xc1\x94\x13\x6d\x28\xc5\x3e\xac\x76\x46\x56\x49\x5d\xea\x9a\x52\x61\x37\x60\x1c\x96\xfc\xa0\x72\xd5\xf6\x42\xbb\x90\x8b\x42\x9e\x24\x97\xd1\x22\xa1\x87\x35\x42\x59\x95\x89\xb1\x20\x6a\xa8\x5e\x5f\xcd\xe5\x4b\x2f\x9f\x2d\x3a\xf9\xda\x55\x26\x60\x52\x21\xbc\x92\x64\x3d\x9b\xa0\xbf\x31\x84\xf5\xfa\x7b\x90\x48\xdb\x58\x35\x5a\x41\xa3\xc0\x5b\xab\xf5\xe8\xb5\x98\xcc\x76\xc2\xc3\xf6\x4a\xb8\x64\xde\x60\x5c\xf2\xec\x84\xdc\x51\x8b\xdc\xcc\x9d\x26\xc9\xfa\x82\xf6\xbc\x78\x0a\xe1\x55\x61\x84\x04\x30\x51\xb2\xd9\x82\x4b\x47\x1c\x1f\x06\xd3\x12\x42\x18\x3f\x2d\xb8\x34\x5b\x96\x37\x04\xa5\x9d\x73\x58\x6a\x64\x20\xae\xe8\x56\x06\xd3\x8a\x9d\x30\xb1\x97\x11\xcc\x0e\x36\xb4\xb4\x32\x59\xa4\xce\x28\xc2\x68\x26\xe2\x4e\x8c\x86\x79\x4d\xaf\x66\xce\xb1\x0e\x1f\x6d\x3e\xe0\x72\xa0\x30\x00\xba\x85\x07\x0d\xd3\x62\x12\x07\xdd\x54\xda\xcb\x39\x20\x26\x51\x25\x49\x71\xd4\xca\xd0\x08\xb1\xab\x0a\x81\x3f\x3a\x07\xcc\x16\x71\x9c\xad\x7d\x03\xc2\x30\x7e\x82\xce\x0e\xa6\x3d\xf0\xf7\x21\x7b\x1b\x8b\x61\x2e\xaf\xdb\xc1\x3c\x09\xbe\x5d\x02\xa3\x26\x07\xab\x57\xd1\x02\xf7\xa0\xf9\x65\x19\xaf\x1c\x11\x32\x70\x2c\x50\xae\x2d\x26\x83\xa7\xfd\xb2\xa7\xb6\x8b\x1f\x47\x2f\x0d\x73\x5f\x6b\x21\x2a\x0f\x79\xc6\xc5\xbc\xb9\x67\x70\x01\x34\x96\xa5\x72\x2c\x5d\x41\xb0\xa1\xf0\x08\xfe\x49\xb4\xfc\xda\x55\x7f\x9d\x65\xaf\x16\x21\x93\xb8\xa9\xdf\x25\x2b\x82\xbc\xb8\xf9\x30\x5a\x83\xaa\x32\x5a\xa3\x4a\xf3\x62\xbd\xae\xbc\x0e\xcf\xdc\xba\xe7\xb5\xe1\x6f\x4d\x62\x08\x78\x35\xc3\x36\x34\xe9\x73\x02\xa8\x27\x42\xfd\x46\xe0\x49\x88\x3c\x7c\x76\xf7\xa2\xe1\x59\x78\xf7\x62\xe3\xf4\xa5\x72\x69\x82\xeb\x22\x65\xcd\x8c\x55\x4d\xf3\xcc\x2e\x98\xd0\x65\xc4\xf4\x31\x82\xbb\x5a\x4c\xee\x83\xc8\x03\x3f\x84\xca\x61\x0e\x56\xf1\x95\xd8\x34\xb2\xcb\x9b\x23\xbd\x6b\x5b\x5f\x72\x54\xdc\x9b\x5f\xbd\xe1\x44\x57\x44\x41\xe9\x8b\xdd\xd9\xfe\xad\x7d\x48\x47\xcd\xb9\xbb\x6f\x32\x78\x14\x0f\x3e\x88\x4d\x59\x80\x69\x42\x1b\xec\xec\xa1\x1b\x51\xb7\x91\xb1\x06\x9d\x82\xa1\x26\x18\x4c\x97\xd9\x85\xfc\xc0\x9b\x47\x71\x96\x07\x33\x54\x2e\xb2\xdc\x37\x79\x6e\x93\xeb\xdb\x7f\x7d\xa4\x0c\xce\x1f\x1e\x0b\xf1\x58\xf1\x01\xb7\x13\x32\x54\xd0\xc6\xce\x68\x63\x23\xe4\x95\x56\x79\xb3\x8e\x7d\xcb\x2e\x78\x10\x25\x04\xba\x8f\xb2\x7f\x74\xe0\x6c\x2d\x49\xe0\x16\x8b\x41\xb9\x5c\x9b\x6f\xfb\xf1\x53\x14\xc6\x1e\x5c\x28\xaa\xa1\x0b\x0b\x23\x5f\xd6\xf6\x8f\xa6\x59\xa0\x27\x39\x0a\x6e\x0c\xd9\xd7\x16\x1b\x70\xed\x7d\xba\x8e\xd7\x39\x85\xeb\xb3\x07\xee\xe5\x45\xaa\x9c\x54\x85\xde\x12\xcd\xc1\x05\xa9\x48\x20\x65\x05\x58\x6a\x2a\xfd\x00\xc1\x8b\x52\xb9\x34\xfa\x86\xd9\x0b\x74\x1b\xc3\x70\x7c\x56\x30\x94\x36\x03\xbd\x47\xef\xb8\xb3\x5d\xc0\x9e\x76\x91\xce\xeb\xf9\x52\x37\xb7\x7c\xa6\xc8\x08\xa4\xba\x04\x44\xd9\x02\x52\x28\xf0\x27\x3c\xfd\x00\xe3\x20\x08\x8a\x5f\x9a\xe2\xa2\xd3\x91\x5c\x57\x55\x9c\x19\x03\x3e\x67\x4a\x54\xb4\x10\x85\x41\xa6\x38\x62\xaf\x40\x29\x05\x66\xf0\xaf\x9c\x8c\xca\x1e\xf4\xdd\x91\x21\xab\x4e\x0f\x4a\xd6\x68\x31\xd8\x38\x3b\x81\x6b\xfd\x00\x15\xe5\x2f\x2a\xab\x28\xed\x46\xcb\x95\x0c\x11\x27\x7c\x20\x34\x9c\x29\xfd\x40\xc4\x97\x14\x0b\x64\xe9\x7e\x0f\x46\xad\x90\x87\x4a\x05\x5e\xc3\x8b\xf6\x18\xc3\x6c\xc2\x39\x7b\x11\xe6\x72\xde\x47\x0a\x78\x3e\x2a\xa6\xf9\xf2\x26\x01\xc3\x51\xe9\x1d\x05\xf7\xce\x7f\xd8\x96\x91\x9b\xa3\xe7\x6c\x9b\x61\x11\x10\x5b\x67\xa3\x37\x5a\xee\x9d\x48\x75\xad\x11\x5d\x4f\xfe\xfd\x76\x72\x33\xd5\x5f\x37\x6e\x17\x20\xd0\xbe\xb9\xba\xbc\xb8\x31\xb8\x3c\xb6\x94\xb0\xa7\x7e\x79\x36\xb9\x31\x4d\x58\xdb\x05\x08\xb4\x6f\xa7\x13\xbd\x39\xc2\xe6\x6b\x7b\xba\xdc\x03\x15\xda\xe7\x70\x43\x26\x06\x68\x22\xa6\x7a\x08\xeb\x8a\x86\xe0\xff\x2a\x17\xf9\x65\x62\x8a\xb1\xee\x40\xc1\x11\x9d\x3a\x60\x3d\x8f\xc5\xef\xe9\x2a\x81\xde\x56\xfe\x2c\xa7\x51\xa1\x38\x70\xa1\x22\xae\x72\x4c\xa4\x27\xc6\x4a\x3c\x0b\x70\x78\xe1\xc2\x10\xe4\xff\x6a\x29\xc6\xb0\xac\x76\x25\xef\x60\xd2\xf4\xc0\xaa\x0e\x5f\x5b\xcc\x8f\x1b\x51\x9c\xa5\x43\x74\xe9\xfe\x77\x19\xfa\xdb\x47\xbc\x62\x5a\x04\x37\x39\xfe\xb4\xf5\xea\x5f\x21\xb9\xdb\x9f\xf4\xdb\x98\xe7\x84\x42\x6d\xaf\x44\xa8\x80\x7c\xcb\x56\x7a\xfb\xe2\x00\x41\x1e\x87\x71\xe1\xb3\x77\xa0\x57\xa7\xab\xce\xaf\x3d\x08\x69\x82\x3c\x33\x1e\x3c\xe2\x99\xef\x3a\x4d\xd4\x4c\xec\x07\xe4\x75\xa3\x0a\xcf\x64\xc0\x4c\xab\x4e\xc1\x55\x88\x3d\xe2\x23\x0f\x57\xe5\x96\x62\x1d\x42\x12\x46\xed\x6c\x11\x84\xbe\xca\x32\x94\xb5\x34\x06\x26\x5e\xb8\x87\x1d\x49\xa9\x45\x2e\x3d\x8c\xca\xa5\x76\xf8\x52\x0f\xde\x70\x94\x30\xc9\xf9\xac\x70\x08\xed\xa6\xc0\x25\xeb\xd3\x3a\x19\x6b\xcc\x20\x5b\x77\x15\x3a\x7f\x15\x89\x15\x92\xa0\xa9\xdc\xa7\x60\x5a\xdb\x0d\xa2\xab\x1e\x1d\x49\x91\xaa\x38\xdb\x8a\x60\x64\xdc\x3c\xd9\x56\x23\xe3\xc0\x30\xf1\x35\xb7\x62\x79\x38\x2f\xba\x40\x27\x14\x8b\x9a\x64\x34\x51\xc3\xb8\xb9\x13\x82\xae\xb8\x03\x5f\xd8\x3e\x90\xbb\x45\x57\x35\x1a\x8e\x4d\x5b\x7d\x98\x5c\x3f\x78\x69\x7d\x62\xdd\xf4\xce\x6d\x66\xce\xb7\x49\x98\x6f\x9d\xda\xfd\x5b\x80\x44\x6f\xbf\xb4\x91\xde\x50\x22\xc4\xe0\x97\x5f\xca\xa4\xf4\x92\xcd\x00\x19\xf8\xad\x1a\xef\xb9\xf0\xec\xbd\xe5\x9e\xa9\x81\x76\xd1\x0e\x85\x54\xf3\x30\x13\xe5\x50\x7d\x1c\xa0\x45\x9d\x47\x78\xcf\x03\xa2\x6f\x1b\x39\x48\xe4\xca\x1f\x6f\x99\xbc\xb6\xa0\xbc\x5b\x7c\xf5\x45\xe9\xfc\xac\xd5\xb1\x8e\xf2\xee\x9c\x3b\xe3\x9a\x5b\xd4\x70\xe0\x6e\xf4\xf2\xd3\x15\x23\xf3\xe9\x52\x7d\x5a\x4b\x39\x70\x31\x45\xa8\xd7\x94\xa2\x71\x51\x07\xd7\xcd\x61\x5a\xed\xf7\x76\x3d\x77\xec\x1b\x00\xbd\x6d\xd6\xb1\x2b\xe5\xe6\xf8\x6d\xf9\x7b\x13\xe9\xc6\x0b\x2b\xb9\x07\x21\x4e\x97\x69\xab\x29\x37\x9b\xdb\xe9\x23\xf6\xa3\x4a\x97\xa2\x39\x63\xa9\x16\xb4\x64\xdd\x2d\xcd\x30\xd4\xdd\xa5\xda\x3a\xa5\xd8\x3c\x83\xd9\x83\x36\xfd\xfc\x90\x1c\xda\xaf\x64\x03\x07\x59\x35\x4e\x6b\xac\xb5\x87\x6d\x48\x9d\x5b\x69\xd7\x8c\x09\x6d\x91\xc4\x66\x2b\xb3\x96\x12\x74\xea\x6c\xc4\x30\xf7\x42\x99\x07\x0d\x35\xbe\xdf\x21\x06\x1b\x5e\xd5\x58\x9d\x97\xb8\x93\x22\xe1\x95\x95\x0d\xd6\x0b\xed\x85\x08\x3c\xc0\x9b\xc2\x42\x2d\x68\x2f\x46\xe4\xd3\xba\x62\xee\x72\x1e\xd8\x07\x53\x5a\x1b\xa4\xb9\x55\x5b\xb7\x14\xa3\xf2\x01\xb9\xeb\x31\x45\xd6\xd9\x72\x55\x08\xfe\xca\xff\xaa\xd1\x32\x84\x05\x67\x37\x6c\x08\x72\xe6\x69\xc0\xe5\xd1\x50\x10\xf9\xc1\x63\xe0\x17\x5e\x58\x19\xa9\x80\x99\xb3\xbc\xc2\x11\x80\xf2\x42\x7f\xa5\xef\x4c\xc7\x05\x29\x26\x42\x4f\x42\x70\x8a\x5f\x70\x76\x39\xae\xd2\xcd\x54\x9e\x07\x55\x06\x40\x70\x38\x35\x98\x52\x0d\x43\xb4\xbf\x0c\xf3\xe0\x91\x63\x57\x7d\x99\xb1\x79\x11\xf8\x87\x8c\x8d\x21\xbc\x24\x5a\x7a\x2e\xb8\x17\x0a\x30\x18\x67\x0d\x5b\x0f\x6c\xd4\x92\x62\xed\x67\x81\xe1\xe0\x33\x34\x22\x4a\x39\x58\x9e\x9b\x86\xf3\xde\x11\x0c\xd5\x3a\x62\xae\x69\xc3\xb6\x81\x04\x66\xa4\x61\xda\xa2\x3f\xbf\xa1\x24\x57\x2a\x98\x05\x9a\x6a\x2f\x3d\x48\x0b\x0c\xc7\x77\xe0\x96\x18\x7d\xe2\xab\xe7\x6a\x8d\x81\x78\x0f\xd6\x22\x90\x5b\xb2\xc2\xa3\x87\x53\xa6\xa0\x1c\xa2\x21\x86\x60\x49\x97\xbf\x32\xc9\xad\xad\x29\x59\x7d\x51\x81\x97\xdc\x9b\x49\xe7\x9c\x91\x34\x3a\x97\x65\xbb\x25\x1d\x84\x38\x5d\xa6\x36\x9f\xcd\x1e\x1e\xcd\x83\xd1\x1d\x46\x92\x1e\x3e\xcc\x83\xd1\xa5\x4a\x82\x9b\xb9\xea\x8b\xc3\x9d\x21\x7c\x70\x08\x10\xa4\x3e\x77\x46\x3c\x1f\x19\x84\x6a\x3f\x29\x04\xdd\x77\x92\xcd\x3b\xc1\x95\x7c\xc2\xd3\x9b\xa2\x0b\x7a\xb7\x1e\xec\x2a\xd9\x2e\xb8\x0d\x25\x75\x77\x6f\x1f\x52\xea\xbe\xdc\x68\x52\xab\x01\x9e\x16\x61\x2d\x73\xb0\x5c\x3e\x9b\x21\x46\x37\x2d\xca\x2a\x1f\x3e\xb3\x9c\x43\xd2\xb7\x97\xac\xbc\x39\xfa\x29\xce\x72\x75\x64\x2b\x7e\x9d\x60\xb4\xec\xba\x61\xa8\xd9\xa0\xd4\x95\xcc\xf0\x38\xbb\x8d\x5f\xfb\x90\xa2\xe3\x95\x77\x8c\x96\xc6\xe6\x96\xb5\x68\x28\x3a\xd8\x39\xd1\x85\x3e\xaa\x27\xdb\x7c\x4b\xa0\x2a\x27\xb1\x49\x6d\x38\x7f\x28\x87\xf3\x7b\xec\xfb\x06\xf3\x5f\x52\x65\x6b\x4c\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\xec\xfd\xf5\xe5\xed\x95\x96\xbb\xae\x18\x81\xcf\xf5\x87\xd3\xe3\x49\x47\x60\x37\x4d\x29\x2a\x17\xbd\x35\xf2\x76\x01\x7b\xda\x57\xe3\x6e\xfc\x6d\x65\xa8\x1c\x3a\x82\xd3\x69\x4a\x11\xb9\x9c\x4c\x3e\x4c\xce\x2e\xaf\x0c\x21\xea\xb4\xe5\x88\x9c\xba\x42\xe1\x69\x4a\xd1\xb8\x18\xbe\xf8\xc6\x6b\x7b\xba\x33\x2f\xdc\xf3\xf9\xee\x3e\x58\xda\xcb\x5f\xae\xca\x5d\x33\x93\xbe\x20\x9d\x97\x54\x6a\x84\x00\xa5\x4e\xf0\x11\x9f\xd8\x2f\x7e\x3d\x28\x0d\x89\x56\x3c\xc3\x64\xc6\x1f\x97\x9d\x49\xc4\x7a\x52\x23\xa0\xc6\x3c\x3f\xa5\x35\xea\x2b\xa1\x80\xe1\x49\x80\xd0\x2e\x21\x2e\x19\x38\x04\x7f\x0a\x92\xef\x4c\xdf\x99\x4a\x80\x8c\x4d\x76\x73\x77\x68\xd6\xf5\x09\xc8\x30\x47\x1e\x36\xff\x41\xb9\xe9\x82\x1c\xbf\x47\xec\xc7\xef\xff\x74\xc4\xc6\x32\x07\x51\x90\x31\x9f\x47\x01\xf8\x8c\x62\x02\x24\x3f\xc6\x1e\x86\xe1\x75\x13\xa1\xfa\x06\x21\x57\x6e\x8a\xfc\xb3\xf8\xba\xe8\xf9\x10\x64\xdd\x71\x50\xf6\xcd\x7e\x88\x76\x11\xbd\x75\x92\xa6\x37\xf8\xe8\x58\x3c\xf9\xfa\xf5\x40\x96\x6b\xbc\x1f\x27\xc1\x04\x1e\x96\x25\x96\xb5\x5c\x7a\xe2\x45\xc3\x2f\xc2\xa5\x79\x76\x89\x82\xd4\x4a\x70\xf0\x88\x17\x18\x53\xbc\xc0\x10\x84\xcf\xbc\x7b\x1e\xca\x61\x5d\x7a\xfb\x12\x62\x68\x0e\x42\x93\x2c\xc1\xdb\xca\xf8\xa2\x75\x07\xd1\x0d\xd7\x9e\x00\x19\x5b\x79\x43\x57\xc6\x36\x45\x0b\xd0\x32\x24\x77\x27\x30\xcb\xda\x64\x54\x9d\xe9\x0f\xc8\x4d\xd8\x83\xa2\x33\xfa\xa3\x2d\x5b\x13\x6b\x98\xa6\xaa\x64\x3c\xba\xb4\x13\x2d\xd1\xce\xac\xf3\x4f\x74\xb7\xf8\x8e\xb9\x92\x5b\xa1\xf2\x9c\x6a\x02\xb8\x8b\xa6\xa7\x57\x47\xec\xf4\x01\x82\xba\x60\x20\xac\x3c\x5d\xe1\xa1\x52\xac\x5c\xaf\x3c\xf6\xf8\x66\xcb\xff\xea\x00\x8b\x63\xae\x3e\xc8\xfb\x06\xc7\x2c\xa3\x04\x0f\x43\xbb\x5b\xe6\x19\x90\xb8\xb7\x56\x95\x0d\xdd\x5e\xac\x96\x2a\x64\xfe\x5b\x56\x5a\xd4\x01\x6f\x4f\x80\x8a\xad\x3e\x36\xed\x97\x5a\xbb\x8a\x54\x2c\xfa\x83\x96\xed\x02\x64\xda\x26\x9d\x71\xab\x04\x81\x7a\xbe\xe9\x3f\x24\x4f\x34\xcd\x96\x30\xb6\xd5\x48\x38\x44\xfd\xc7\x80\x3f\xad\x03\xa3\x05\xe0\xe6\x65\xc4\xd0\x55\xc5\x8d\xff\x62\x9d\xb1\xa5\x91\xfb\xcd\x0e\x4a\x77\x6d\x0a\x2a\x15\x05\xa4\xee\x60\x86\xc6\x7f\x13\xf5\xb3\x63\x1f\x4e\x26\x40\xc6\xd6\xe8\x03\x10\xb2\xa6\x72\x8c\xc2\xfc\x16\xea\xc9\x07\x2f\x2c\xb8\x0c\x60\xb3\x9d\x5c\x71\x97\x07\x11\xdf\x26\x4a\x72\x2b\xff\xad\x2d\x0e\x44\x1e\xeb\x2c\x3e\xed\x2e\x6d\x86\x25\x4e\x96\x69\xa0\xab\xc4\xbe\xe4\xc8\xb8\xf7\x70\x89\xb8\x4b\x56\x83\xc8\x3b\xf0\xf5\xe1\x2e\x59\xd9\xcb\xbb\xc0\xbc\xd4\x78\xce\x00\xde\xf1\x32\x11\xad\xbc\xb9\xeb\x70\x9b\xa1\x54\x25\xe1\x91\x8a\x29\x12\xdb\xbc\xf9\x52\x71\x98\xfa\x8c\xff\xc1\x19\x10\x64\x8b\x9f\xd6\x71\xa5\x9a\xf7\xa6\x06\xbc\x36\x95\x88\x18\xc2\x70\x23\x93\x94\x8d\xfa\x63\x5f\x93\x86\x66\xc1\xc3\x0e\xae\xcd\x12\x34\xea\x41\x04\x01\xc2\xa5\xc9\x2f\x62\x55\xd6\x54\xaf\xbc\xb5\x59\x15\xf4\x61\x3e\x02\x27\xa2\x5c\xc6\x80\x97\x89\xc1\x0e\x44\xe5\x32\x6a\x12\x74\xe8\x84\xa7\x9e\x9c\x75\xd5\x6b\x99\xde\x46\xbc\x12\xd3\x13\x66\xc4\xd6\xc7\x6a\x7a\x56\x2c\xb4\x16\x43\x3b\x4c\x81\xd4\x2c\xcb\x76\x29\x3a\x17\x38\xac\xc9\xd8\xfd\x0a\x3d\x81\xbb\xd9\x69\x8a\xd3\xf8\x62\x7c\x16\x9f\xe7\x5e\x10\xaa\xce\x0b\x09\x1e\xf2\x60\x56\x84\x5e\xba\xb5\xb5\x35\x83\x72\xa5\x45\x43\x2c\x35\x95\xee\x2f\xd2\x56\x8e\xc6\x29\xe5\x33\x4c\x75\x22\x94\x40\x99\x16\xdc\xcc\xd0\x50\x9c\xc6\x77\xeb\xf4\xa5\x5b\xd8\x8e\x2a\x6e\xfc\xe1\xc0\xc8\x9e\xf5\x76\x69\x22\x57\x54\xa2\x2d\xf8\xb5\x94\x73\xe1\x64\xdb\x8f\xf4\xa5\x5d\xb8\x12\xc6\xb8\xb1\x02\x89\x37\x4c\x8c\x95\x8f\xc1\xcc\x93\x59\x3d\xf6\xb9\x03\x7b\x0e\x0c\xe4\x16\xda\xf6\x45\x18\x66\x0b\x68\xab\x88\x3d\x0b\x0a\xfb\x56\x32\x9f\x7e\xb8\x9e\x6e\x20\xe0\x81\xa2\x7f\xf6\x23\xe6\x82\xd9\x70\x20\xd7\x5a\x88\xc8\xa3\x57\xc2\x41\x17\x12\x44\x7c\x9b\x1d\x8d\xf2\x99\x2c\xeb\xd2\x10\x75\x7c\x0f\xb7\x2f\x01\xd1\xb7\x57\xa8\xcb\x40\x7a\x0e\x31\x18\x51\x0f\xc5\x80\xa2\x82\xf8\x21\xdc\x0f\xe0\x2b\x38\xca\x56\xb1\xba\x21\xcd\x73\x19\x11\x57\x16\x87\x0b\x6a\x15\x82\x14\x12\xc5\xa9\x89\xf0\x29\x4e\x31\xc6\x58\x15\xba\xda\x30\x3f\x74\xe2\xd0\x01\x69\xf2\x07\xf6\x69\x1c\xe7\xf5\xa8\xe3\xdb\x49\xdf\xaa\x9c\x6e\xbe\x26\x15\x80\x31\xda\xfb\x0d\x6a\xef\x39\x26\xeb\xdd\xfb\xce\x62\x9f\xbc\xed\x7b\x91\x3a\xc0\x70\xb2\x96\xa4\x55\xa6\x60\xea\xf6\x77\x6d\x2f\x44\xe5\x21\x56\x2f\xc8\x2d\x1c\x17\xf9\x5d\xa4\x6e\xd5\x5a\xb2\xa0\x43\x9f\x5e\xc6\x29\xaf\x6f\x0c\xbb\x80\x0d\x41\x99\x28\x4d\x11\xad\xd3\x22\x0c\x2c\xce\x30\xa4\x69\xf2\x70\x5f\x5e\x83\xc9\xbf\x4d\x97\x66\xe6\xd2\x34\xae\xfb\x36\x46\xdc\x07\x4f\x5a\x0b\x14\x49\x69\xb2\x74\x20\xef\x89\x63\x16\x15\xe0\x44\x10\x43\x1c\x6a\xf9\xa0\x8c\x3b\x2d\x7d\xce\x55\x71\xb3\x90\x03\x90\xa5\xc8\x61\xc8\x32\xb6\xf1\x96\x44\xb5\xc8\xca\x6e\x96\x1b\xad\x34\x0c\x45\x09\xfc\xe2\xa4\x7b\x1a\x6c\x29\x43\xe2\x90\xec\xbd\xc7\xef\x81\xa7\x7d\x0b\xac\x32\xc8\xea\x75\x92\xc2\x21\xf3\xad\xe9\x46\x57\x5b\x90\xc2\x4b\x2c\xdc\x23\x65\x39\xe6\x1b\xd6\x55\x6d\x41\x6b\x5e\x30\x41\x1b\x22\x91\x6f\xbe\x26\xd2\x15\xbf\x6f\x61\xf2\x3f\x7e\xf7\xf1\x62\x7c\x3e\x51\x1a\xdc\x08\x8e\x04\x46\xa5\x51\xd7\xa8\xf4\xa5\x96\xf9\x29\x3f\xc9\x13\x83\xea\x75\x79\x3c\x93\xd5\x12\x26\x41\xba\x56\xdc\x7b\xeb\x75\xf4\xbd\xf3\x27\xb5\x0c\x3b\x56\x99\x32\x9e\x02\x31\xb3\x61\x06\x70\xa1\xbb\xae\xa4\x49\xa8\xca\x9a\x51\x5e\x91\xd5\xb4\xda\x4c\xac\xaf\x79\x80\x6e\x5a\x2b\x34\xe7\x51\x59\x8f\x4d\x1e\xcb\xbb\x66\x47\x93\xfb\x22\x56\xe3\xb4\xb4\x2e\x38\x58\x6b\x07\x0f\x32\x18\x64\x4d\x4b\x80\x04\x08\x6a\xb3\xd7\x61\xbc\x30\x2c\x71\x9a\x4c\xb7\x8a\xc7\x38\x09\x9a\xe4\x61\xd7\x1a\x44\x05\xaf\xae\xd0\xc4\x0e\x16\xee\x7b\x38\xe6\x81\x2a\x4d\x19\xcc\x32\x0d\x46\xdc\x4d\xa6\xe3\x77\x15\xd7\xc6\x1c\x8c\x10\xb8\x50\xf6\x04\x3f\x4c\x5d\xd6\xb0\x4d\xa8\xf2\xc0\xc0\x68\xe2\x0f\x0f\x62\x9b\x66\x27\x65\x8d\x5d\x0f\x0e\xb6\xbb\xbc\x0d\xd6\x2a\x0a\xd1\x86\x96\xea\x45\x2b\x76\x8f\x09\x8b\x60\xbc\x0f\x2b\xf6\x54\x4d\x38\x62\x80\x65\xad\xd5\x6b\x1d\xf8\xdd\x6d\x74\x1f\x44\x7e\xb3\x7d\x0a\x7c\x56\x8f\xaa\x70\xa0\x4a\xbf\x95\x65\xd7\x45\x53\x0e\x45\x0f\x64\xce\xa4\x05\x8f\xb4\x42\x03\xd9\xc4\xf7\x54\x3a\x00\x58\x7c\x2b\xb7\x4f\xc8\xf7\xd3\xb8\x2d\xec\xdb\xe6\x03\x7c\x6c\x63\x77\x1a\xb6\x33\x59\x8c\x9b\xf5\x7c\x73\x8b\x6d\x58\xc5\x27\xd4\x34\xb0\xd8\xd6\x77\x07\x40\x1d\x90\xb2\xbd\x34\x62\xad\x43\xab\xaf\xda\xc5\x90\xd0\x6b\xac\x6e\x96\x49\x75\x09\x88\x6a\xf6\x68\x75\xdd\xcf\xa4\xbe\xd8\xd4\xa1\x23\x68\x53\x35\x6d\x50\x74\xd5\xb3\x47\x82\xa9\xb0\xcb\x31\xda\xb2\x74\xaf\xed\xe8\xbd\xbc\x16\x9f\x44\xcc\x00\xfc\x33\x4e\x01\xf2\x9e\x2d\x0f\x64\xce\x7b\x18\xd8\xd5\xcd\x5b\xcb\x69\xda\xda\xf1\x1b\x82\xd2\x21\x15\xbd\xb4\xdf\x12\x36\xfb\x16\x15\x04\xf0\x50\xed\x4b\x99\x41\x72\x82\xbe\x39\x30\x41\xb4\x9e\xf0\x8a\xb9\xd7\xe7\x32\x9c\x8b\xca\x6a\xb0\x3e\x03\x35\xf5\x85\x5d\xf1\x21\x49\x1a\xa7\x40\x13\x8c\x7b\x16\xc1\x4c\xb6\x5e\x35\x59\xc8\xdc\xcd\x98\x77\x5d\x74\x59\xbf\x48\x9b\x01\x59\xbd\x22\x8f\x47\x90\x8c\x7d\x66\x3c\x0e\xaa\xa6\x27\x86\x01\x04\xe1\x43\x79\xcb\x18\xa2\xa1\x62\x40\x9c\x35\x37\x87\x25\x04\x9b\x02\x34\x9e\x75\x5a\x5b\x0f\x0f\x9d\x82\xca\x84\x17\x22\xef\xa4\x73\xc3\xf6\xc0\x85\x06\xa9\x89\x3b\xa8\xcb\xac\x5d\x06\x6b\x2c\x27\x1a\xbd\x10\x8a\x41\xeb\xda\x8a\xd8\x99\xab\xac\x38\x62\x90\x6a\x43\xa3\x76\xb7\x37\x4e\x01\x51\x2c\x5e\x63\xaf\x81\xa4\xb9\xf7\x5c\xcc\x0f\x98\xb9\x58\x4e\x19\x82\x08\x9c\x99\x3a\x1c\xec\x5b\xc9\x6d\xff\x6d\x9c\xe4\xb6\x68\x67\x8a\x38\x1b\xf1\xe5\x1b\x8c\x40\x6b\x38\x54\xa7\xb0\x72\x0f\x88\x63\x7d\x11\x67\x39\x5c\xa5\xca\xb9\x73\x14\xb1\x9f\x2e\x6f\xa6\xb8\x41\x16\x68\x40\xd1\x18\x8d\x84\xc0\x7e\xbc\x1c\x49\xe2\x42\xaf\x98\xf3\x88\xa7\xeb\x09\x59\x3e\xaf\x74\xc9\x04\x33\x2c\x9a\x53\x82\x7e\xd3\x58\x29\x03\x07\x8c\x24\x31\xbb\x7d\xb5\xb8\x95\xcb\x93\x32\xf7\x04\xb1\x92\xc4\xd8\x12\x74\x1a\x0e\x08\xf3\x18\xf6\x17\x62\xff\x22\xb3\x03\xe2\xe6\x45\xc5\x2c\xab\xf2\x66\xe7\xab\x84\x97\xd9\xf8\xa1\x99\x6d\x50\xf7\xa4\x4b\x94\x04\x5a\x22\x52\xce\xa2\x09\x4f\xe1\xba\xa0\x96\xd5\x88\xc5\x72\x27\x03\xa1\x70\x6f\xd3\x50\x68\xc1\x47\xfa\x68\xb6\x8e\x04\x5d\xc6\x25\xf8\x00\x4b\x8b\x54\x08\xf3\x06\x96\xb5\x62\x03\x39\x4b\xe3\x2c\xab\x86\xbb\xe8\xec\x27\x90\x77\x0d\xbf\x7e\x2e\xcf\x66\xd2\x5a\x42\x9e\x75\xdc\x1d\x99\x23\x4f\xee\xdd\xb0\x18\xee\x1a\xe1\x0b\xd4\xb6\x67\x6b\x8e\x45\x94\x42\x3c\x36\x50\x29\x04\x8f\xb1\xdc\xf3\xb0\x72\xf3\xc3\x9e\xbc\x48\x1d\xa2\x57\x49\xdf\xda\x8d\x67\xff\xd5\xd4\x92\xff\x6c\x02\x12\x7a\x25\x08\xac\xe6\x79\x70\x01\x8b\x5e\xe6\x65\x96\xe2\xea\x32\x1b\x06\xf1\x27\xbe\xca\x4c\xc3\xc9\x8d\x0c\x11\x27\xee\x38\xca\x49\x16\xd6\x52\xaf\x4c\x0d\x5a\xed\x47\xd0\x32\xac\x0b\xa8\x03\x1d\x1a\x52\xfc\xec\x33\x0f\x66\xf4\xf2\xdc\x41\xde\xf8\xc0\x89\xe3\x21\xd3\x7e\x64\x69\x8a\x55\x3f\x9b\xd2\xe7\xbf\xdb\x1d\x23\x7b\x59\xe5\x5d\xaf\x5c\xf7\x31\x69\xf2\x4f\xd3\xe9\x55\x95\xa3\x4d\x0f\xdd\xb6\x1e\x01\x49\xa2\x4e\x15\x3c\xdf\x1f\xc9\xbd\xc5\x08\x66\x3d\x75\x5c\x34\x17\xbb\x0f\xb5\xf1\x80\xa7\x06\x64\x8e\x74\xec\x91\x4a\x5b\x08\x95\x9d\x52\x9d\x77\x28\xbd\x4a\x05\x09\x94\x2e\xab\x11\x17\x9d\x11\x0f\x41\xe6\xa9\xe7\xcb\x1a\xc7\xef\xf0\x40\x14\x72\xdf\xe5\x0c\xd6\xa6\x1c\x88\x9c\x07\xd1\x38\x09\x3e\xc8\x24\xf1\xe7\xde\xef\x71\x2a\xc3\x72\x35\x9f\x07\x51\xeb\xf3\x2b\x2f\x9f\x2d\x0c\x97\x7a\xdf\x3c\x5e\x42\xcb\xe7\x5e\xc8\xce\xc5\x9c\x6d\x88\x56\xbf\xf9\xda\x7a\x91\x44\xe2\x62\x57\x58\xc8\x1c\xc5\x4b\xa4\xc3\x5e\xf1\xc3\xf9\x21\x7b\xf3\xfd\x0f\x3f\x9e\x1f\xb0\x37\xef\xc5\xff\xbf\x7f\xaf\xb7\x96\x71\x23\x42\x6c\x80\x2d\xf2\x65\xd4\x15\xb0\xaa\xc1\xb0\x1e\x83\x80\xde\xa4\x6a\x2f\x84\x45\x3b\x47\xc5\xf2\x1e\x22\xd1\x3e\xa8\xc5\xb6\x03\x9c\xbe\x38\xb1\xed\xd6\x84\x36\x4d\xbc\xed\x21\x18\x6a\xda\xa3\x49\xa1\x69\x2d\x27\x5b\x53\x59\x6b\x8e\xb7\xe3\xf1\xda\x5f\x75\x19\x64\xe0\xf2\x23\x33\x38\xcc\xe2\xe8\x21\x98\xe3\x39\x90\x16\x03\xb1\xb6\x3d\xaa\x9b\xf1\xfb\x89\x9e\x6b\xf3\x2d\x8d\xaa\xfe\xa2\x7a\xf3\x35\x81\xee\xe4\xba\x23\xca\x5b\x5b\x11\x12\x7d\x7d\xb4\xb2\x8d\xb7\xf6\x54\xa3\xf2\x9a\x58\xee\xf4\x5b\x0f\x7e\x85\xe6\x2a\xef\xf5\x26\x69\x6a\x58\x4c\x7a\xd1\x72\x41\x5c\xc0\x2e\x39\xc7\xdc\xba\x7a\xa5\xb0\xb3\xbc\x03\x67\xa9\xae\x1f\xa8\xfd\xfa\xcb\xf2\x94\xe0\xa5\x75\xa0\x86\x3e\xa4\x1c\xf0\xc6\xf7\x60\x93\x5c\x9e\xca\xe2\x19\x05\x68\x67\xbc\x3a\xcf\x45\x0f\xf5\xea\x97\xd5\x37\xee\x41\x93\x22\x01\x2a\xee\x62\xbd\x91\x4e\x21\x2a\xdf\xa9\xf9\x86\xdd\xb2\x16\x19\xc5\x3a\x45\x50\xab\x07\x37\x72\xe9\xed\x9b\xb0\x5b\x66\x04\x99\xf1\xba\xd6\xdb\x70\xfb\xb4\xfd\x00\x94\xca\xc3\x60\x92\x17\xcb\xb9\x5c\x83\x9b\x61\x81\xa1\x5b\xb6\xd9\x8c\xb8\xe1\xef\xc5\x68\x2f\xb2\xd6\x72\xfd\xec\x56\x56\x33\x23\x17\x59\x37\x3c\xeb\x6c\x72\x54\x13\x6b\x13\x51\xb5\x5a\xf5\xc9\xc1\xa7\x3d\x3f\xdf\x99\x9d\xe1\xb7\x00\xc9\xa1\xfd\xb2\xee\x40\x95\x08\x5f\x99\xca\x6e\x8c\x23\xc4\x53\x74\x67\x61\xda\x39\xbf\x7d\x49\x5e\x8d\xaa\x3d\x49\xde\xcd\x6f\x87\x92\x8b\x17\xa2\x67\x7a\x51\xf0\x77\x14\xe7\xeb\xd7\xd7\x50\xb4\x91\x6e\x7a\x27\x2d\xe0\xc8\x97\xd0\x12\xfc\x73\xc2\x67\x70\x62\x2c\x8f\xef\xe1\x20\x32\x9e\xa1\x33\x92\x7f\x84\x3a\x30\xc6\x8f\x34\x0a\x45\x27\x41\xc0\x87\xd3\xa4\x0a\xa4\x5f\x5e\xd7\x83\x23\x9f\xf2\x9a\x92\x47\x41\xcc\x4b\xe7\x05\x38\xc1\x68\x51\x5e\x9d\xdd\xbe\x3f\xbd\x18\xe1\x35\xd7\x88\xb9\x93\xb5\x3d\x22\xa8\x38\xc0\xd7\x56\x0c\x2a\x03\x85\x0b\x0b\xf5\x8a\x56\x9d\xd0\xa0\x9f\xa2\xf8\x29\xc2\xd8\x73\x06\xee\x6d\x85\x9c\x78\x18\x7c\x98\x74\xc5\x08\x7c\xc2\x18\x1c\xbb\xea\xb6\x16\xd2\x2c\x0d\xf5\x7a\x69\xb8\x65\x52\x29\xb6\xab\xbb\x7c\xe8\xac\x25\x9a\x96\xf9\xdb\x76\xd6\x20\x34\x41\xe6\x1e\x9e\x86\x56\x99\x88\xc9\x10\x41\x06\x67\xb6\x5e\x21\x6a\x76\xc1\xc2\x5e\x3e\x69\x10\x68\x93\x68\xdd\x54\x94\xce\xcf\x32\x1e\x4e\x67\x79\x17\xce\x52\x63\xf3\xaa\x44\x85\x36\xdc\xf5\x75\xdc\x11\x74\x24\x99\xef\x2c\xef\xce\xb9\x33\xc9\xbc\x45\x0d\x32\xf7\xa8\xe6\x4e\xc0\x95\x07\x2e\x6e\xb4\x3b\x51\x58\xd4\xa4\xa2\x69\xf5\xe2\x58\xef\x63\xf0\x6c\xe5\x11\x62\xe5\xb1\xc4\x0b\x52\xc3\xc4\xdb\x93\x1c\x11\xb7\x74\x4f\x54\x7f\x9b\x14\x19\x73\x69\x1a\x57\x9c\xde\xa5\x49\x13\x1c\x78\x07\x90\x75\x0b\x6e\xa1\x1e\x05\xf1\x6b\xf9\xc0\x3f\x3e\x16\x4f\xd4\x8d\x12\x18\x3b\xa5\x60\x5c\xc3\xd3\x43\x08\x71\x9e\x56\x0e\xe1\xca\xa5\x22\xc8\xb0\xae\xda\xf1\x34\xab\x1a\x26\xca\xe7\xc4\xe2\xd0\x62\x7b\x8a\xac\xb1\x7b\x86\x74\xd9\x1b\x19\xfa\x09\x29\xfe\xe9\x04\xe8\xd8\x5a\xcf\xf6\x9c\x1a\x9c\x4e\x89\x8e\xd6\x62\x73\x65\xbf\x65\x1b\x84\xa8\x8b\x0c\x9b\xab\x27\xf9\x14\xa6\x07\x29\x77\xbc\xf7\x9b\x61\xf0\x9d\x7a\x89\x1b\x35\x77\xd4\x2d\x41\xcd\xb7\x18\x12\x46\x62\x4f\xb2\x0e\x72\xb4\x9c\xc0\x3b\xb7\xbd\x03\x2d\x3a\xe2\x46\x16\x82\x67\x39\xa4\x7c\x3e\x24\x84\xd6\x0a\x63\xaf\x3a\x48\x85\xeb\xe9\x0c\x77\x36\xa8\xa2\x5c\x79\xb9\xc9\x64\x86\x54\xd7\x01\x91\xfb\x72\x45\xa6\xe0\x80\xae\xbe\xa6\xdb\xa1\xd1\xd6\x70\xe3\xfe\x7f\x83\xe4\x9d\x68\xf3\xb7\xab\x9c\x67\x90\x78\x45\x3c\x82\xdf\xc7\x60\xa0\x02\xfb\xd3\xc0\x94\x80\xaf\x07\x25\x7b\xb4\x06\x8f\x7b\x37\x27\xfb\xd2\x47\xb0\xe6\xcf\x8a\xa1\xcf\x31\x79\x44\x2e\xbd\x04\x95\x02\x09\x23\x09\xc3\x99\x99\xef\xe7\x7a\x13\x24\x61\xf7\x58\x1c\xf1\x11\xb8\x41\x88\x0d\x47\x96\x3d\xc5\x29\x9a\x92\x85\xf1\x3c\x30\x6c\x77\xad\x2b\x52\xb0\xd4\x26\xa4\xdc\x33\xb8\x8b\x98\x8a\xd2\xf8\x89\x66\x96\x4e\x75\x72\xbe\xb2\xb7\x10\x20\x55\x26\x61\xb2\x08\xd7\xa0\x2b\x46\xe2\x63\x26\xef\x4a\x15\x56\x49\x23\xe1\x66\x01\x02\x6d\x98\x17\x9a\x91\xc4\xaa\x19\xdd\xe0\x26\x67\x5d\x8f\x88\xa4\x72\x40\xc1\x64\xa4\x68\x14\xd2\x81\xc1\x58\x83\xc8\x5d\x86\xf2\xfa\x82\xb1\x5e\xac\x56\x1f\xbb\x5a\xd6\x28\x3e\x4c\xae\x6f\x4e\x2f\x2f\xf4\x5d\x68\xbb\x80\x3d\x6d\x2f\x0c\x7c\xf6\x6f\x37\x97\x17\x2c\xbe\xff\x1d\xf2\xbf\xa9\xa0\x7d\x35\x15\x73\xa4\x82\xba\xcd\x94\x0d\x5b\x91\x4a\x2b\xf7\xc4\x4b\x85\x54\xb9\xd8\x94\x1f\xac\xe7\x07\x1e\xa0\xa7\x60\x10\x8d\xc2\x20\x02\x97\x45\x50\x6a\x3c\xec\x0a\x87\xec\x1d\x06\xe7\x2d\x53\xd3\x2b\xb3\x79\x51\x49\x4f\x37\xe3\x70\x60\x3c\xc3\x0b\x12\xf9\xb6\xcc\xc6\x6f\x08\xf1\xab\xff\x34\xff\xec\xe2\x12\xbe\xbb\xf2\xa2\xbf\x30\x4d\x21\x9a\x52\xf6\x5c\x04\xbe\x87\x15\xbb\x52\x0b\x96\x9e\x8f\xae\x1c\x85\x53\x66\x72\x6c\xdd\x7a\x6f\x4d\xf9\xaf\xe3\xeb\x8b\xd3\x8b\xf7\x32\x2c\x8d\x5c\x06\xa0\xb3\xa0\x62\x50\xad\xc4\xe0\x59\x51\x5d\xe8\xc9\x9e\x80\x4e\x56\x70\x8a\xb5\x08\xe6\x8b\x70\x05\xae\x56\x33\x51\xc7\x9b\x73\x1f\x49\xfd\xdc\x20\xb0\xf4\x56\xec\x9e\x0b\xd5\x43\xfa\x17\x82\x4d\x19\x74\x2c\xe9\x56\xa9\x5e\xa6\x7c\x06\x1e\xc0\x78\x79\x88\xec\xb3\x05\x0f\x43\x41\x3f\x03\xb7\x62\x88\xdb\xa6\x15\xff\x1f\x53\x08\xf2\x37\x62\xe8\x2a\xa2\x62\x29\xc6\xe8\xea\x22\x86\x52\x26\x63\x29\xd6\xc2\x6d\x94\x7b\xfe\x94\x67\x49\x1c\x6d\xb8\x90\x6e\x0e\x2f\x99\xd3\x4e\x68\x5a\xd1\x5c\x54\xa9\xc2\x09\x49\xb7\x27\xb8\xde\xdd\xb2\x73\x96\xc6\xe5\xe8\xfe\x2a\x4d\x1a\xfd\x03\xf0\x09\xc0\x14\xf5\x71\x9a\x2c\xf0\x8c\x14\x9a\x21\x83\x56\x38\x0e\xe3\xc2\x17\x73\x45\x11\xf9\xe9\xea\x65\xc6\xc4\x96\xd1\xbb\xf7\x32\x31\x7f\x8c\x05\x71\xb8\xbe\x0c\xb9\x3f\xaf\x9c\xe8\x4b\x6e\xe8\x10\x83\x0d\x0a\xae\x59\xbe\xbc\x8d\x6a\xd0\xaa\x87\x98\xdc\xc6\x88\x9a\x6c\xd9\x1c\xd2\x62\x20\x3b\x84\x60\x3c\x5e\x9e\xf3\x65\x92\x57\x0c\x96\xe8\xe3\x20\x43\xd7\x78\xb3\xb6\x76\xfc\x3f\x95\xc5\x48\x3d\x23\x26\xde\xf0\x81\xf3\x8b\x2f\x74\x81\x34\x5e\x95\x49\x36\x36\xbe\x41\xcd\xb1\x47\xb5\xcd\x16\x56\xd1\x12\x0f\xe0\x8c\xd2\xca\x05\x93\x9e\x89\xbe\x55\x3a\xfc\x40\xb8\x4c\x35\x2b\xcb\xc6\x2f\x23\x45\x8d\xe0\x6c\x6a\x24\xcf\xa6\xe2\xad\x97\x0a\x0d\xca\xb9\x4c\x2a\x0f\xb4\x99\xf8\x6e\x51\x61\xf0\x0a\xfd\xa3\xeb\xfd\xd1\xf5\xf6\xd5\xf5\x7a\xcf\x87\x01\x7c\xf5\x1c\xb6\x05\x18\x98\xb1\xf1\xc9\xfe\xcf\x46\xeb\xd4\xc2\x8e\xdd\xf3\xf2\x0b\x80\xb7\xa8\x10\xbc\xbc\xec\xcb\x5a\xb3\x36\x36\x6b\x7a\xa1\x60\x08\x49\x75\xd1\xfd\x3e\x0d\x96\x5e\xba\x42\x47\xab\x19\x38\x1c\xaf\x1d\xf7\xeb\x20\xd1\x03\x2d\x09\xd1\x79\x71\xeb\xa3\x61\xec\x8b\x00\x1a\x6a\x89\xb9\x7a\xa0\xad\x1e\xdf\xb0\x9b\x66\x8e\x54\xb8\x7b\x92\x26\x06\xe6\x8a\x3f\x60\x49\x88\x73\xcf\x97\x9e\x8c\x5c\xb8\x2d\x0f\x76\x70\xc1\x03\xae\xb7\x10\x9d\xa8\x86\x7f\x1f\x32\xf6\x57\xb9\xa6\x2d\x05\x4d\x58\xe4\x3e\x95\x7d\x4d\x15\xaf\xcc\x1e\x30\xb2\x4e\x21\x6d\x32\x7c\x30\x49\x51\x85\xd6\x5f\x3f\x49\x31\x7f\x03\xf3\x7c\x1f\x43\x6f\x88\x8f\xb4\x01\xe1\x9e\x63\x38\x7b\x19\xd0\xf9\x90\x5d\xc2\xb1\xaf\x69\x0a\x58\x06\x73\xf0\xa8\xf7\x0f\x4a\x66\xeb\xa8\x78\x02\xac\x94\x06\xdc\x96\x8c\x63\x99\x3e\xf7\xfd\xd1\xcd\xfe\xe8\x66\x7d\xba\x99\xfd\x3c\xe7\xa5\x30\x2b\x1f\x41\x6c\x22\x19\x45\x6f\x91\xe7\x49\x23\x94\x1e\x93\x41\x6f\xe0\xca\xbd\x56\x24\x6b\x94\xc9\x54\x98\x44\xd5\xbc\xa0\xdb\xea\xfb\xfc\x1e\x58\xd2\xe5\x97\x46\x91\x90\x01\x07\xbe\x1c\x44\xed\xea\x16\xc0\x54\xc7\x1e\x41\x1a\x88\x4e\x27\x84\x14\xeb\x75\xec\x63\x6c\xca\x77\xa7\x67\x13\xec\x26\xdc\xf3\x71\xdf\x9b\xfb\x62\x29\xd6\xe3\xa1\x53\xb0\x46\xf7\x7f\x83\x44\xb4\xf3\x6c\x11\x3c\xf2\xf5\x79\xa1\xda\xf1\x5b\xd9\x56\xd1\x09\x58\x63\xfb\xe5\xfc\xf6\x6c\x7a\x7a\x35\xbe\x9e\xbe\x7e\x77\x79\x7d\x3e\x3a\x19\x4f\xc7\xec\xf8\xf2\x62\x3a\xb9\x98\xb2\x9f\x4e\x4f\x4e\x26\x17\xbf\x6a\x71\xd1\x2a\xdb\x63\xba\xba\x3e\xfd\x30\x9e\x4e\x18\xd2\xeb\x04\x61\x2e\x6d\xcf\xb5\x2d\xbd\x5e\x66\xe0\xdb\x55\xde\x9e\xf3\x3c\x8c\xef\xc5\xfc\xa7\x22\xa2\xfc\x5a\x69\x76\xbf\x94\x46\xb9\xd9\xe1\xe1\xe1\xaf\xec\x97\xf2\x79\x59\x50\x8f\xad\x3f\x45\x6b\xf4\xd2\xb3\x50\x0b\x65\xf3\x35\x91\x2e\xae\x99\x72\xee\x86\x8c\x39\xf5\x03\xa8\x0e\xfb\x38\x65\x79\x5a\xe6\xe2\xaa\x8e\xd3\xd4\xaa\x40\x37\x7f\xed\x04\xb4\xb9\x6f\x22\x43\x33\x58\xf0\x75\x20\xcb\x63\x7d\x43\x6c\xbc\xb5\xff\x00\xa1\xfe\xda\xac\xf1\x8e\x42\x31\x7e\xe2\xfa\x03\xb8\xad\xf7\x04\xca\x56\xc9\x57\x7a\xe7\x59\x31\xb9\x3d\xb9\x39\x35\xc1\x95\xf5\x2c\xf5\xb2\x85\xa9\x5d\xda\xca\x50\x38\x18\x5a\xc4\x2d\x0e\x35\x1a\xd8\x94\x41\x8f\x1e\xc4\xe2\x6d\x42\x6f\x2a\x6b\xcd\x71\x1d\x46\x57\xcb\xa8\xad\x88\x3d\x7d\x1c\x7b\x47\x6b\x03\x1c\x3d\x1b\x7d\x49\x7b\x6e\xe5\x92\xad\xbf\x4e\x69\x2b\x62\x4f\x1f\xae\xd0\x51\xf3\x86\xeb\x75\xc3\xc7\xd1\x17\xb4\xe6\x35\x4b\x0a\x2d\xf9\xc6\x3b\x7b\x8a\x1d\xe3\xc1\x7d\x2c\x60\x4d\xd3\xd4\xbc\x5d\xc0\x9a\xb6\xbf\xce\xa1\xaf\x25\xdf\x5a\x86\xc0\x01\xb3\x4b\x1a\xa8\x6f\xbc\xb7\xa7\x1c\x64\x5d\x93\x73\x5b\x11\x0a\x7d\xbd\x7a\xdb\x7c\x49\xa2\xa9\x1f\x3e\x1b\x6f\xed\xa9\x5a\x5a\x03\xf4\xbf\xf8\x97\xfe\x1c\x06\x06\xcd\xd7\x44\xba\x06\x6f\xa4\xed\x02\xb6\x8a\x06\xcc\x13\x06\xb2\x4f\x2e\x70\xa5\x0b\x93\xbe\xdf\x6d\xbd\x27\x50\xc6\x38\xdd\x68\x58\x73\x95\xc2\x99\x4b\xbe\x2a\x0d\x6c\xb2\x45\x5c\x84\x7e\x79\x6c\x03\x39\x62\x0c\x00\xdc\xc8\xd8\xe3\x7c\x34\xb9\xf3\x6d\xbc\xb5\xa6\x2a\x57\x5a\x96\x17\xb8\xd1\x06\xa5\x14\xb6\x8c\x59\x1c\x72\xc6\x67\x8b\x58\xea\xb1\xe5\x9d\x99\x60\x91\xae\x6a\x1e\x8c\x27\xeb\x79\xca\xb0\x12\xee\x82\x85\xbd\x7c\x82\xb7\xd1\xf2\x64\xbb\x80\x3d\xed\x94\xe3\x19\x56\xe2\x05\xfa\x8e\xd9\x5e\xc8\x9a\x07\xc4\x26\xd5\xd2\x6e\xbe\xb4\xa6\x19\x44\xb3\x38\x85\x00\xcf\xac\xc8\xbc\xb9\xbe\x69\xb4\xe5\x08\x9c\x94\xbd\xaf\x0a\x3f\x15\x06\xcb\x40\x2f\x4e\x47\x69\x32\x57\x54\xbe\xca\x48\xe0\xa7\x10\xb5\x1b\xcc\x05\x85\x6e\x9f\xc5\xd1\x91\x8c\x72\x12\xe4\x8d\x0e\x76\x00\xf3\x74\xfe\x31\x5b\xa7\x4c\x82\x22\x32\x83\x92\xa1\x87\xef\x9e\x21\x59\x76\xfd\xf2\xdf\x27\xc2\x55\x55\x57\xbf\x6c\xb4\x15\x21\xd0\x7f\x44\xa3\x97\x20\x5a\x88\xbd\x71\x2e\x53\x35\x06\x51\x65\xa5\x65\xe0\x6a\x5b\x91\x8c\x45\x7a\x5c\x61\x88\x1c\x35\xc5\x1f\xbf\xfb\x78\x33\x1d\xbf\x3f\xbd\x78\xff\x71\x7a\x7a\x3e\xb9\xbc\x9d\x96\xf3\x95\xb1\x8f\xf4\x23\x37\x18\xee\xeb\xe9\xed\xd5\x80\xb8\xbb\xc8\x59\xe3\x0e\xbd\x7b\xae\x5f\x5e\x37\xde\x12\xa8\x82\x41\x53\x79\x91\x62\x20\xdf\x5e\x8c\xc6\xa7\x48\xe4\xf6\x48\x3f\x3a\x60\xa7\x26\xa6\xd2\xb6\x92\xb6\xda\x15\xce\x8a\x06\x4d\x68\xeb\xbd\xbd\x0c\x60\xfc\x85\x61\x73\xab\x34\x54\xca\xd3\x5e\x1d\x00\xea\x27\x15\x4a\x55\x3a\x1e\x0c\xa2\xea\x83\x21\x8e\x22\x0a\x51\x3e\xb3\x20\x37\x85\x8c\xa4\x55\xb6\xc7\x14\x43\xce\x02\x3d\xd7\x8d\xd7\xd6\x74\x97\xe6\x00\x98\x9b\xaf\x89\x74\xf5\x1d\x72\xeb\xbd\x35\x65\xa3\x56\xe5\xa8\x51\x45\x71\xc4\xee\xbd\x6c\x7d\xfe\xaa\xef\x71\xa6\xa2\x14\x7e\x06\x19\x1a\x2f\x09\x34\xe1\xa0\x1f\xa6\xcc\xd2\x1c\x52\x9d\x6a\x89\x1e\x68\xd4\xe6\xec\x2b\x5a\x63\x31\x05\x3b\x70\x8b\x65\x50\x0f\xbe\x62\x22\xdd\x52\x88\xc2\x43\xff\xdd\x1d\xf3\x65\x88\x5d\xa7\x61\xd8\x6e\xbc\xb5\xa6\x0a\x4a\x7d\x75\xa0\x8f\xc7\xfd\x86\x99\x5f\x5f\xd4\x9e\x9f\xa8\xa7\xe7\xd0\x78\x49\xa2\x69\x80\xdd\x03\x69\x56\xcf\xbf\x71\xbf\x6a\x5e\x83\x58\x75\x24\x47\x2a\xf6\x28\x55\xe2\x18\x3d\x80\xad\x02\xf6\xb4\xa5\xd9\xb5\xfe\xc6\x65\xbb\x80\x35\xed\xbf\x99\x13\xeb\x6f\xbe\xb6\x55\x2d\x60\x65\x94\x61\x06\x9e\x30\x8d\x41\x2d\x16\xd0\x7d\x10\x81\x91\x4a\x90\x31\xb1\xc4\x79\x26\xfd\xc3\x8d\x88\xb5\xe8\x40\x5e\x85\x00\xd7\xf7\xda\xf6\x42\x04\x1e\xe5\xbc\x9b\x19\xb3\xf7\x6a\xcb\xb9\x72\xd2\x7f\x52\x7d\x41\x7b\x5e\xe6\xa0\xcc\xce\x41\x98\x95\xb9\xa1\x9e\xf0\xe6\x7b\x6b\xca\x96\xf1\x5d\x7a\x87\x75\xd9\xba\xec\xdd\x62\xa0\xbf\x0c\xb6\xa2\x6c\x13\x27\x66\x90\xf0\x30\xd6\xb1\x59\x06\x08\xc9\x62\x1f\x6c\x7b\x88\xe0\xda\x25\x8d\x4f\x5c\xaf\x25\xb7\x96\x21\x73\x30\x2e\xb2\xed\x85\xa8\x3c\x46\x9d\x56\x09\xed\xc5\xa8\x7c\x3a\x3f\x89\xd3\x97\xc0\x4c\x2c\x7a\xca\x1b\xaf\xed\xe9\x06\xc6\x0e\x1b\x38\xf6\x52\xa3\x47\xad\xab\x7b\x6c\x2d\x26\x80\xe1\x2c\x4c\x53\x8a\xc6\xa5\x8b\xbe\xcb\x0d\x0d\xfa\xfb\x19\xe8\xe6\x8e\x17\xca\x98\xe0\xc4\x68\xd3\xb2\x55\x80\x42\xdb\xb0\x14\xbb\x2e\xc0\xf2\xe4\xd5\x48\xb6\x70\x1a\x24\x90\x5a\xde\x34\x4a\x36\xdf\x53\x29\x33\x0f\x6d\xfd\xdf\x88\x4d\xa2\xcc\xd6\xd8\xc5\xca\x50\xc1\x9a\x37\xb8\x74\x6b\xf9\x34\x5f\xda\xd3\xc4\x4c\x0c\x56\x17\x04\x9d\xf7\x02\xc6\x4e\x5f\xa8\xf0\x8a\xb0\xc0\xc6\xa0\x2f\x68\xf9\x18\x4a\x5a\x8b\x55\x44\x5d\x07\x75\x2d\x25\xec\xa9\x6f\x07\x35\xab\x4d\x36\x7a\x96\x96\xd5\xec\x71\x18\x82\x26\x14\x4e\x41\x13\x44\x2d\xfd\x70\x6c\xbe\x24\xd1\xd4\xcf\x76\x1b\x6f\xed\xa9\xc2\xa5\x98\x81\xec\xc6\x6b\x02\x5d\x83\x66\xd0\x7c\x49\xa2\x59\x85\x96\x33\x12\x6f\x29\x65\xcd\xe5\xb1\xc3\xb1\x75\xeb\xbd\x35\xe5\x27\x34\xbc\x56\xe1\x8f\xe5\x5d\x04\x3a\x1d\xa0\xef\x11\x7a\x28\x6b\x99\x52\xaa\x5a\xe3\x59\x19\x54\xab\x95\x93\x56\xf5\x45\x26\xd7\x50\x26\xf7\x5f\xbf\xb2\x57\x18\x91\x4e\xb6\xd8\x91\x8c\xc6\x52\x66\x5b\xba\xc9\xc1\x70\xf4\xeb\x57\x7d\xfa\x9f\x9e\xd4\x28\xa8\x8f\xdf\x95\x51\x7e\x92\xc0\x84\xa7\xbd\x9c\x13\x27\x73\x04\x12\x43\x49\x12\xb7\x32\xe9\x39\x5b\xf0\x30\x61\xbf\x1c\x5f\x9e\x9f\x8f\x2f\x4e\xf4\xe6\xd4\x56\x75\x68\x08\x8a\x28\xbf\x7c\x50\x5e\x3c\x99\xa0\x5a\x3a\xaf\xe8\x0d\x8e\x6c\xab\x91\x70\x48\x43\xba\x32\xc0\x4e\x97\xdd\x9d\x45\x0d\x0a\xf7\x93\x20\xfb\x74\x0b\x73\xa9\x4c\x7f\xab\x9e\xa8\x28\x5c\x26\x10\x96\x15\x49\x58\x84\x56\x50\x0a\x65\xb4\x72\x32\x96\xa5\x70\xdc\x36\x82\x51\xf9\x6b\xcb\x58\x40\xc7\xef\xca\x0f\xdd\xcc\xd2\x8f\x81\x81\x6a\x6e\xb7\x99\x4c\x95\x2a\xd3\x0e\xaf\x43\x03\x19\x7b\xd2\x1e\x99\x13\xdb\x04\x90\x28\x2c\x45\x89\x65\x8d\x00\xee\x4f\x84\xa6\x08\x07\x0e\x90\x7a\xd5\x7c\xc6\xdc\x9f\x20\x05\xfb\xbb\x50\x7a\xd4\x55\xd1\xaa\xa4\x4b\x93\x09\x5d\x67\x15\x0a\xff\x73\xbe\x6c\x8e\x09\xf1\xc0\x62\x2c\x59\x55\x23\xe1\x88\x7d\x1e\x4e\x57\x09\x50\x2c\x7f\xb6\x26\xa7\x37\xa2\xa2\x13\xa1\x60\xbc\x2c\xed\x01\x14\x8b\x0e\x0b\x76\x8b\x1a\x7d\xb8\x43\xce\xa6\x34\x9e\xa7\x26\x37\x1a\xdb\x6a\x7d\x70\x64\xc5\x6c\xc6\xb9\x49\x8d\xb4\xab\x44\xc1\xd0\x34\xa8\x64\xcb\x22\x93\x7e\xb4\x2c\x43\xdd\x05\xa3\xf3\x16\x62\xba\x41\xed\xce\x84\xcb\x91\xd0\x90\x58\x7b\x63\x1c\x0e\x1b\xc1\xbc\x95\x56\x99\x82\xa9\x1e\xf7\xf6\x95\x9c\x59\xc4\x26\xff\x0c\xb6\xc6\x5f\xbf\x9e\x37\x0e\x06\x0e\xea\xf6\x75\x8d\x72\xac\xd5\x76\xf0\xa0\x0a\xaa\x95\x95\xe5\xca\x34\xd0\xeb\x70\x96\xd5\xab\x72\xad\x3a\x60\xf5\xbb\x5a\x0c\x5d\x79\x11\x47\x6f\xc1\xd6\xa0\xac\x32\x96\x26\xee\x1d\x1a\x38\x55\xb2\x7d\x21\xb5\x3d\x30\x01\x48\xf2\xee\xa6\x5c\x7a\xe4\xdc\x8f\xb9\x33\xcb\x47\x6b\x1f\xeb\xae\x7b\xa0\xbe\xe4\x28\x9d\xea\x46\x9d\x33\x96\x64\x3b\x0f\x26\xad\xea\x0c\x81\x00\x7b\xc2\x89\x74\xc1\xe8\xe8\x3f\x64\x12\x44\x7c\xf9\xc6\xfa\x70\x58\xe9\x75\x2d\x5a\x5d\x9c\xd6\xdf\x34\xd5\xbd\xd9\x82\xcf\x3e\xd5\xc2\x15\xc8\x53\x53\xa3\x6a\xb9\x57\xf6\x94\x76\x29\xd5\x1c\x50\xbc\x50\xd5\x13\xfb\x26\x39\x70\xc5\xc3\xcf\xf5\x09\x68\xab\xcb\x9a\xe4\x1d\x84\x6c\xab\x1c\xff\xe3\xd7\xff\x2f\x00\x00\xff\xff\x33\xdf\x8a\xa6\x2d\xf4\x02\x00") - -func cf_i18n_resources_de_de_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_de_de_all_json, - "cf/i18n/resources/de_DE.all.json", - ) -} - -func cf_i18n_resources_de_de_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_de_de_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/de_DE.all.json", size: 193581, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_en_us_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x7b\x73\xdc\x38\x92\x2f\xfa\xff\xf9\x14\xb8\x3e\x7f\xc8\x7d\x43\x25\xb7\x7b\x7a\x36\xce\xd5\x89\x1b\x7b\xcb\x52\xd9\xad\x1d\xbd\x56\x0f\xcf\xf6\x69\x75\xb8\xa9\x22\x54\xc5\x36\x8b\xe4\xf0\x21\xb9\xc6\xeb\xfd\xec\x17\x99\x00\x59\x64\x15\x01\x22\x41\x56\xc9\xdd\xeb\x89\x98\xb6\x8a\x04\x32\x7f\x09\xe2\x91\x00\xf2\xf1\xcb\xff\x60\x8c\x7d\x86\xff\x88\xff\xbd\x08\xfc\x17\x87\xec\xc5\x5d\x74\x17\xdd\x9c\x5c\x1e\xde\x45\x2f\xf6\xcb\x37\x79\xea\x45\x59\xe8\xe5\x41\x1c\xe9\x8a\x2c\x62\x3f\x78\x08\x38\x90\x78\xf0\xc2\x8c\xc3\xf3\x2f\xfb\x1a\xfa\x3f\xc7\x45\xca\xfe\xed\xfa\xe2\x9c\x65\x79\x1a\x44\x33\x96\x2d\xa3\xdc\xfb\xc4\x82\x8c\x05\xd1\xa3\x17\x06\xfe\x01\x63\x97\x69\x9c\xf0\xb4\xf6\x2a\x9f\x07\xd9\x21\x63\xd3\x07\x96\xf1\x7c\x94\x16\x51\x24\xaa\x8e\x78\xf4\x18\xa4\x71\xb4\xe0\x51\x3e\x7a\xf4\xd2\xc0\xbb\x0f\xf9\x68\x96\xc6\x45\xc2\xf6\x3e\xdf\xbd\x88\xbc\x05\xbf\x7b\x71\x78\xf7\x42\x90\x2d\xc4\x5f\xfb\x9b\x8f\xbe\xec\x19\x25\xfd\x7a\xc1\xee\xbc\xcd\xb3\xdc\x9b\xfd\x61\xda\x7c\x3b\x60\x09\x6d\xfe\x7f\xb3\x9b\x39\xcf\xb8\x00\x93\x3e\x06\x53\xce\x92\x50\xc8\xc9\xe6\xde\x23\x67\x5e\xc4\xbc\x2c\x8b\xa7\x81\x97\x73\x9f\x4d\xe3\x2c\x3f\x60\x47\x29\x17\x6d\x20\x64\xf5\xaa\x1a\x41\x24\x84\x88\xc4\x1f\x4f\x41\x18\x8a\x5f\x53\xd1\x2a\x20\xa4\xac\x61\x68\xc1\xdd\xb1\x26\xb4\xc7\x38\x49\xc4\xe7\xf4\x52\xc1\xd7\x38\xb9\x68\xca\x11\x39\x7d\xfe\x7c\x20\xfe\x39\x17\x9f\xf2\xcb\x17\xf6\xe4\x65\x25\x49\x56\x64\x20\xa9\x92\x65\xb1\xf0\x22\x9f\xfd\x26\x0a\x1f\xc9\xbf\xbf\x7c\xf9\xad\x13\xdc\x30\xa4\x09\xf2\x9c\xc7\xcc\x4b\x02\xc6\x23\x3f\x89\x83\x28\x87\xee\x6d\xfa\xfa\xe6\xe2\x04\xbe\x57\x71\x91\x73\x96\xc7\xec\x9e\xb3\x22\x5a\x78\x49\x22\x84\x14\xc2\x45\x71\xce\x44\x87\x48\xc5\x90\x0a\x97\x4c\x3d\x17\xc5\xf2\xb9\xe8\x5f\x49\x12\x06\x53\x44\x63\xc2\x38\x1c\x69\x82\x3c\xb0\x68\x31\x76\x2b\x06\xc6\x9e\x98\x24\x16\x5e\xfa\x91\xe7\x62\x68\x88\x5e\x3e\xca\xd8\xf5\xe4\xea\xfd\xc9\xd1\x64\x0f\xb8\x3d\x06\xfc\x89\xf9\x3c\x9b\xa6\x41\x02\xec\x32\x16\x3f\x88\x41\xe0\x07\x8f\x81\x5f\x78\xa1\x1a\x4f\xe2\x99\xc7\x66\xc1\x23\x8f\xca\x61\x63\x92\x78\x97\xcc\xa9\x6d\x32\xce\xb2\x60\x16\xb1\x34\x0e\x79\x26\x46\x7c\x3e\x17\x53\xa3\xe8\xb7\xf2\x3b\x08\xc8\xa9\xe8\xe8\x30\xa7\xc6\xe9\x6c\x04\x85\xf6\x18\xf4\xed\xf6\x32\x59\x22\x64\x92\xa5\xba\x5a\x63\xeb\x6c\xa9\xed\x80\x5f\x07\xc8\xbf\xbd\xf1\xd2\x19\xcf\xab\x91\x8b\x1f\x26\xc7\x67\x2c\x12\x9f\x07\xb9\x75\x89\xe7\x4a\xcd\x19\xb5\x8e\xbe\x68\x3f\x6b\xac\x56\x34\xa8\x08\x0b\xd5\xeb\xc3\x58\x2c\xc9\x6c\xe4\xb1\xf1\xe5\x09\x1b\x8d\xb2\x8f\x41\x32\xca\xb2\x70\x84\x4b\x3a\x42\xda\x13\x8c\xb0\x28\xcc\x60\x86\x52\x02\x5c\x56\x24\x49\xca\x33\xb9\xee\x33\x9e\xa6\x71\xda\x25\xe5\xee\x71\x58\xb7\x94\xf8\xeb\x8d\x58\x6a\xc5\x02\x72\xe6\x45\xde\x4c\x28\x36\x23\xb9\x2e\x73\xec\xf4\x0b\x7c\x88\xd3\xe0\xbd\x2c\xc6\xbc\xe9\x34\x2e\xc4\xf4\x0e\xaf\x13\x6f\x09\x0a\x8e\x98\x26\x1e\x62\xc3\xfa\xb5\x1d\x26\x14\x19\x8f\xde\x7e\x38\x1f\x9f\x4d\x98\x57\x88\xd1\x0e\x8a\xd6\xff\xc7\x3f\x79\x8b\x24\xe4\x07\x62\xc5\x64\x77\x2f\xee\xee\xee\x5e\x24\x42\x41\x79\x8a\x53\x1f\xfe\xbe\x7b\xc1\x5e\x8a\xa9\xd0\x4b\x38\xfb\x47\x11\xe7\x62\x9e\x08\x1e\xe0\x33\x8a\xc5\x22\x62\x65\xc1\xef\x4c\x02\x6f\x9b\xe3\x90\xd2\x2f\x96\x15\x07\x80\x01\xdd\x55\x61\x78\x10\xdd\xb1\x7c\xa5\xe6\x4a\x4f\xce\x1b\xdf\x99\xbf\xf7\xd6\x59\xba\xc8\x3f\x8d\x93\xe5\x28\x13\x4a\xbe\x58\xfd\xae\x2f\x6e\xaf\x8e\x26\xa3\xf1\xe5\x25\xbb\x19\x5f\xbd\x9b\xdc\xe0\x9f\xbf\x8c\xe2\xf2\xe7\xc5\xd5\xbb\x5f\xc5\xef\xac\xfc\x7d\x7d\x39\x3e\x9a\xc0\x93\x51\x14\x8f\xc4\xc0\x03\xe5\xeb\x57\xbb\x46\xd8\x2e\x5f\x97\x96\x90\x33\xd1\xcb\x78\x11\xe4\xd0\xc9\x52\xf8\x42\x6a\xb0\xc9\x96\x87\x19\x46\x16\x12\xaa\x1c\x4f\xbd\x69\x2e\xd6\x7c\xa1\x1a\x8d\x46\x15\x0d\x54\xd1\x93\x34\x5e\x24\x39\x7e\xb4\xfb\x38\x9f\x5b\xf6\x8a\x9d\xb0\x77\x6f\x17\x31\xe9\x66\x31\x7b\xb9\xce\x49\x28\x42\x02\x25\x2b\xd2\x10\xe0\xc5\xf7\xb9\x27\xca\x7a\x2c\x8e\xf8\x28\x0f\x84\x00\x1b\xe0\xad\x26\x88\xad\xb1\xec\x21\x7f\xb1\x39\x64\x47\x89\xf3\xa4\x45\xe9\x13\x5b\x64\xbd\x85\xf6\xd8\xe2\xc4\xb9\x6d\xce\x83\xb7\x46\xe2\xfd\xf5\xaf\x4f\xf1\xd5\x31\x7b\x99\x25\x7c\x1a\x3c\x2c\x35\x23\x5b\x6c\x5c\x85\x7a\x57\xc0\x92\x9e\x0d\xd1\x16\xbd\xf9\xba\xb4\x44\x52\x64\x73\xa1\x9f\x5d\xca\x5f\xbf\x8c\xee\xd9\x9b\xdb\x93\xd3\x63\x31\x55\xff\x0d\x1f\xc1\x7c\x3d\x65\x47\x17\x67\x67\xe3\xf3\x63\xf8\xe1\xb3\xe3\x8b\xb3\xf1\xc9\x39\xfc\xfd\xc0\xc4\xd3\x93\xb7\x93\xeb\x9b\x0f\x97\xe3\x9b\x9f\x2c\x17\x91\xad\xb1\x74\x96\xbf\x97\x24\xc3\x61\xba\xc0\xed\xaa\x17\x8a\xe5\x61\x35\x63\x86\x41\x96\xc3\x66\x15\x0f\x44\x46\x3e\x0f\x03\xb1\xd6\xc0\x9e\xde\x9b\x81\xc6\xec\xe5\x72\x8a\xbd\xe7\xec\x29\x0d\xf2\x5c\x6c\x67\xd5\x6e\xff\xfd\xd1\xf8\xf2\x83\xda\x17\x5f\xb3\xda\x29\x1e\x2b\x4f\xf1\x70\x84\x79\xd1\x52\xac\x38\x85\xe8\x60\xb5\xe3\x81\x4c\xbf\x11\xff\x6a\x71\xf6\x6c\x69\x75\x08\x30\x92\x63\x2f\x98\x0a\x41\xa2\x87\x60\x56\xa4\xc8\x48\x8c\xbe\x54\x0c\x44\xb1\x82\xc3\x09\xaa\x10\x17\xf7\x30\xf2\x88\x35\xbe\xff\x9d\x4f\x41\xab\x1f\x09\x8d\x9f\x1f\xdc\x45\xb5\x1e\x52\x24\x62\xa3\x23\x88\xaa\x53\x41\xd1\xaf\xad\xcf\x4c\xe1\x1c\x57\xd7\xd8\x0f\x81\x68\x15\x01\x10\x56\x51\x3c\xde\xed\x09\xfe\x80\x21\xaf\x9b\x39\x2c\xc4\x62\x9e\x55\x9f\xa6\x56\x4f\x72\xf4\x22\xf8\x80\x70\x04\x7a\x9f\xc5\x21\x9c\x40\x89\x2f\x93\x72\xe8\x1d\x8f\xab\xaa\x12\x5f\x57\x43\xc0\x50\xf9\x70\x73\xf1\xe1\xed\xc9\xe9\x44\xc9\x3a\x91\x13\x22\x74\xa3\x0d\x88\x87\x58\xe2\x33\xfe\x57\xfc\xef\xee\xc5\x34\x2c\x32\x01\xed\x43\x14\xfb\x3c\x13\x4d\xb7\x7a\x27\x5f\xc3\xb6\x0b\x1e\xff\x75\xbf\xf1\x7c\xc1\x17\x71\xba\xfc\xb0\xb8\x87\x77\xaf\xbf\xff\xe1\xc7\xf2\xed\x17\xfc\xe3\x0b\xb1\xe3\x7f\xeb\x36\xdf\xba\x4d\xb3\xdb\xd4\xe6\xa1\x3c\x2d\x9e\x6b\x1a\x3a\x54\x6d\x53\x36\xe4\x7d\x10\xf9\x55\x33\x56\x8b\xaf\x9a\x76\x3f\x9c\x9c\x5f\xdf\x8c\xcf\x8f\x26\xff\x8d\x7b\x9a\x7d\x03\xf5\xed\x81\x09\x4f\x17\x41\x96\xc1\xf2\x05\x9d\xe9\xee\x45\xca\x3d\x7f\x14\x47\xe1\x52\x6c\x06\x9e\x73\x0e\xfa\xd6\x67\xfe\x14\x7d\xe6\x2b\x51\x84\xd6\x7b\xd3\x14\xcf\x49\xab\xe6\x52\xad\xc4\x2e\x4f\xc7\xe7\x7f\xa0\x3e\x35\x7c\x97\xb2\x6b\xa7\x41\x7b\xd3\x9f\x4b\x75\xfa\xd6\xd1\xfe\xfb\x76\x34\xd2\x5c\x97\xce\xc6\x85\x1f\xe4\x31\xdc\xda\x5c\x95\xf3\x27\xdc\xd0\xe0\xe5\x53\x0c\x57\x74\x78\x37\x83\xc7\x2d\x29\x4f\xe2\x34\xcf\xcc\x07\x01\xbd\x49\x12\xf1\xaf\x6e\x9d\x4e\xc4\x3e\xb9\x79\xeb\x04\x87\x45\xd9\xbe\xe8\x78\x21\x8c\x0d\x78\x31\x9d\x7b\xd1\x4c\x19\xaf\xec\xe3\x93\x8c\xe7\x4c\xf4\xc8\xc8\x87\x2e\x8a\x3b\xf4\x6e\x01\xb7\xcc\x93\xd2\x02\x97\xd0\x9f\xb3\x79\x5c\x84\x3e\x76\x7b\xf6\xcf\x20\xc1\xae\xbd\xbf\x3a\x5a\xae\x3f\x84\x63\x03\x16\xc6\x53\x2f\x64\x7e\x90\x0a\x88\xa2\x57\x1d\xb0\xcb\x38\x0b\x70\x10\x06\x99\x78\x9d\xe0\xaf\x47\x8e\xe7\xf3\x42\x4e\x90\x26\xcf\xc4\xc8\x0e\xe2\x34\xc8\x97\x52\x06\x51\x32\x8b\xd1\x44\xe5\x21\x8d\x17\x82\xe4\x13\xcf\x72\xe0\x36\x0f\x66\x73\x6e\xb2\x25\xfa\x83\xa0\x26\x7d\x05\x38\xf5\x5a\x14\x61\x1e\xc0\x3c\xe0\x25\x49\x75\x38\x2b\x7a\x45\xf0\x20\x08\x9b\x8c\x1f\xe9\x04\x28\xd8\xae\xe1\x78\x78\x35\x24\xdf\x83\x29\x48\x18\xcf\x44\x57\x54\x83\xaf\xea\x93\x60\xaf\x95\x31\xd1\x9e\x78\xeb\x8c\xc7\xca\x66\xd4\x83\x91\x26\xcb\x73\xcc\x1f\x79\x88\xb6\x7a\x6d\xb7\xcd\xd8\x7e\x92\x33\x4e\xe4\x15\x0e\x8e\xf0\xec\x27\xb3\xed\xf1\x22\x4b\x6c\x31\xe7\xc0\x13\x1e\xc9\xe3\x41\x01\xb3\x48\xd5\x8d\x41\x65\xd4\x63\xf9\x45\xb7\xc1\x8a\x22\x2f\x2e\xf1\x52\x8d\xf0\xe5\x82\xed\xb0\x21\x39\xc9\xcb\x09\x46\xda\x28\x32\x30\xa4\x83\xb1\x95\xa6\xde\x52\x0e\xae\xda\x32\x0d\x3a\x47\x06\x6a\x8b\x34\x92\xba\x97\x46\x77\x9c\xa5\x45\xc8\xcd\x27\xbf\x5f\x31\xd8\x5d\xb6\xb9\xa4\x80\x1a\x58\x4d\x12\x14\xae\x97\x34\x92\x2e\x16\x7f\xe3\x65\x9c\x5d\x28\x3d\x37\x93\x3b\x59\xb8\x65\x86\xd9\x1c\xfa\x23\xea\x19\x50\x33\xfb\x47\xe1\xa5\x9c\xdd\xa7\xde\xf4\x23\x2c\x01\xf0\xb2\x6e\xa0\x3a\x0f\x04\x3c\xa5\x30\x43\xc1\x94\xff\xa3\x10\xab\x0a\xde\x2e\xe6\x4a\x0a\xc1\x58\x69\x77\xef\x51\xa5\xfb\x3d\x13\x93\x17\x8a\xa7\xae\xa8\xa4\x62\xf7\x8b\x52\xc3\x56\x4a\x9c\xd8\x98\xa6\x71\x1e\x4f\xe3\x50\xee\x4a\xf3\x69\x02\xba\xf3\xea\xb5\x10\x53\xcc\x86\xd8\x85\x64\x89\xd7\xdf\x1f\xfc\xf0\xe3\x8f\x07\xaf\x0f\x5e\xff\xaf\x66\x49\x39\x69\x60\x99\xbf\xfc\xe5\xfb\x7f\x51\xdb\xda\x52\xe5\xfb\x75\x9b\xbd\xf2\xdb\xe7\x7c\xc6\xcf\x49\x19\xb7\xb8\xe6\x8a\x8d\x57\xfc\x84\x93\x31\xdc\x13\x7b\xa5\xe1\x63\xb9\xab\x91\x0f\xf5\xa6\x93\xae\x64\x28\x38\x7f\x19\x05\xec\xfc\xf6\xac\xda\x4a\x5d\xc3\xcd\xe5\x47\x76\x7c\x72\xfd\x37\xf8\x6b\xc1\xce\x26\x67\x17\x57\x3f\xc3\xdf\x11\xfb\xe9\xe2\xfa\x06\xfe\x4a\x70\xb7\x25\x2d\x66\x44\xb5\x23\x2c\x9a\xb3\x9b\x93\xb3\xc9\xc5\xed\x4d\xc7\x8d\xe4\xb6\x39\xda\x4b\xef\xf9\x30\x0a\x45\x7b\x1a\x3e\x41\x5b\x19\x7b\x0e\x7e\xcc\xa5\x9d\x33\xff\x04\x77\x8e\x70\x1d\x8e\x4a\x87\x9e\x5f\x77\x0d\x7b\xee\xa0\x7e\x87\x70\xfa\xb6\x2c\xcd\xd6\xf5\x7c\x4d\x65\x1d\x39\xc6\x60\xd0\x6d\xc9\x71\xad\x2c\x89\x23\x5f\x24\xf9\xd2\xc8\x67\xad\x04\x89\x3a\x7c\x8b\xf2\xd0\x43\xec\x80\xf6\xc5\x7e\x91\xc3\x0c\xd9\x30\x14\xda\x67\xfc\x60\x76\xc0\xe6\x79\x9e\x1c\xbe\x7a\xb5\x8c\x8b\xf4\x03\x7c\x34\x30\x97\x30\x02\x1b\x8e\x38\x5d\xa6\x47\x2f\x08\x71\x52\x11\xd3\x31\xd0\x33\x8d\x02\x9b\x3a\x64\x04\x42\x37\x4d\x62\xdc\x6b\x8b\x2d\xa3\x94\x7b\xe1\x7d\x14\xeb\x8a\xd0\x5a\x59\x90\xcb\xdd\xa3\x6c\x9b\x24\x2c\x66\x8a\xa5\x41\xe9\x1b\x8a\xae\xbd\x24\xc0\xee\x01\x6e\xfa\xf5\xa0\x5a\x8a\xd8\xd3\x4f\xf9\x22\x7e\xac\x36\xc5\xca\x6c\x01\xd0\x66\xb0\xb5\x0b\x78\xa6\xe7\x4b\xa8\x6a\x6f\xe2\xfd\xe2\x12\x1b\x4c\xac\x96\xe5\xc2\x5e\x89\x57\xae\xea\xaa\xf5\x05\x67\xdf\xcb\x3d\x83\x97\x44\x1f\x5a\xd6\x88\xbf\xab\xe6\x18\x9c\x4f\x0d\x5b\x06\x43\x49\x6b\x6e\xe3\xca\x17\x08\x0e\x7b\x85\xda\x16\xe3\x89\x49\x69\x4e\x29\xd7\xed\xa3\x30\x2e\x7c\xf6\x16\xe4\x4c\xf5\xd3\x56\x1f\x52\xf6\x78\x8f\x8f\x5f\x5d\x89\xd5\xf6\x3d\x1c\x39\xdf\xbe\x3b\x39\xd7\xc3\xd1\x97\x74\xe7\xc6\xae\x26\x97\x17\xd7\x27\x37\x62\xb5\xb7\x67\xdc\x5a\x89\x80\xe1\x3d\xe8\x1c\xc7\x06\x7e\xeb\x05\xec\x69\x9f\x9e\x8c\xaf\xf5\x84\x9b\x6f\xed\xa9\x5e\x9e\x54\xee\x5d\x7a\xe2\xad\x85\x9c\x78\xb0\x97\xd5\x6a\x93\x89\xe5\xc6\x4b\x82\x83\x9a\xf1\x9f\xde\xba\xd6\x89\x86\x13\xc2\x43\x2b\x0c\x87\x7d\xb9\x48\xdf\xbf\x60\xa2\x7e\x7f\xd1\xdf\x19\xd9\x56\x1b\x08\x07\x7b\x09\xef\x1f\x79\x0a\x77\xac\xe5\xeb\xf7\xf2\xe7\x97\x2f\x76\x5f\xa8\x07\x55\x77\x29\x5c\x9a\xb2\x67\x3b\x5e\x1a\x06\x64\xe3\xa5\x3d\xcd\x29\xec\x62\x61\xf7\xac\x3c\xbd\x59\xc6\xa7\x05\x9c\x64\x33\xf4\x34\xce\x70\xb3\x20\x90\x97\x16\xb1\x5f\x0c\x0e\xd0\xfd\x88\x39\x60\x56\x9e\xd2\x6b\x6c\x80\x4b\x83\x89\x05\x60\x32\x25\x7b\xb4\xbe\xd8\x70\xa1\x23\x5a\x4d\x3d\x43\xad\xc5\xb0\x5c\xda\xd4\x21\x22\x80\xfb\x8e\xb4\xf4\x5d\x85\xf3\x99\x24\xe9\xe0\x6f\xac\x41\xe1\x8e\x3d\x02\x09\x89\xc6\xbc\xbd\x3a\x15\xc3\x13\x28\xae\x3b\x24\x0b\x39\xe1\xd6\x4e\x3c\xbb\x48\x67\xea\xd9\x2b\x79\xc6\x0b\x0f\xf1\xd0\x58\x3d\x96\xdf\xe5\xb6\xfa\x2e\x07\x07\x7a\x55\x68\xf7\x00\xec\xdb\x26\x0c\x04\xa1\xa6\xa7\x75\xa9\x2d\xaa\x2f\x7f\xcf\x01\x3c\x3a\xb5\x87\xa1\xf4\x34\x16\x3d\x43\x9e\xa6\x1d\xbd\x2d\xd5\xaa\x57\x1e\x50\x3a\x60\xec\x8a\xa3\xd9\x3a\x10\x58\x23\x5b\x2a\x60\x1d\xe4\xa1\x09\x7c\x9e\x42\xfb\xa8\x93\xf7\x40\x1e\xb6\x41\x01\x79\x85\x0e\x54\xc4\x90\x30\xb4\xf8\x9f\x44\xac\x9e\xdf\x11\x44\x6a\x08\x82\x7e\x25\x12\x20\xcc\x82\x72\xc7\x20\x3b\xd4\x9e\x10\xf2\xe7\xb8\x10\xe5\xe1\x14\x34\x4f\x97\xac\x88\x14\x3a\x90\x44\x57\x0b\x41\x0b\xb9\xa3\x52\x14\x79\xf3\xa5\x8a\xd7\xa5\x0e\xa2\xc7\xf8\xa3\xa9\x05\x05\x80\x9f\xe2\x27\xfe\x08\x57\x9a\x62\x57\x5e\x1e\xc8\x3e\x04\xa9\xd8\x6c\x3d\x14\x60\x74\x21\x14\x73\xb1\x82\xe6\x8a\x27\x0b\x16\x09\xe8\xee\x62\x23\xd6\xc0\x0a\xaf\x70\xd3\x01\x3f\x36\x11\x4b\x6c\xd4\xce\xf3\xad\x2d\xad\xda\x92\xd0\x63\x6b\xee\xf8\x78\xfc\xad\x8c\x51\xe0\x68\xbb\xdc\x3a\x4a\x6b\x8a\xa0\x72\x04\x10\x75\xc4\xfc\xa8\xdf\xa5\x0f\x43\x74\xab\x32\xe0\x27\x35\x79\x95\x0f\x43\x74\x58\x19\x82\x68\x2b\x5f\xc2\x82\xec\x96\xe5\x18\xe6\x6b\x58\x90\x25\xc8\x91\xc5\xcc\xe7\x21\xc7\xfb\xe8\x2a\x8e\x07\x2a\x0f\xa6\xe6\xb6\xaa\x65\x8f\x42\x2a\x22\x8b\x42\x4c\x17\xf7\x5c\x05\x33\xe0\x60\xc4\x22\xc4\x2b\x7f\xab\xb0\x37\xc6\x78\x0e\xee\x84\xec\xb1\x0a\x2d\x4a\xcf\xbf\xf1\x92\x44\x13\x17\xfc\x40\x5e\x18\xa8\x9b\x36\x51\x37\xd4\x9f\x4d\xda\x55\x22\x61\x68\x68\x87\xcd\xbb\x0c\xc3\x02\x66\x5d\xd1\x1d\x0b\x8a\xf8\x14\xa7\x1f\xd1\x00\xe9\x63\x90\x24\x2b\x15\x17\xad\x0b\x01\x8b\x35\x40\x1a\xb5\x7e\xa8\xd5\x98\x95\x0e\x65\x62\x2d\x05\xbd\x5a\x8e\x69\x59\x88\xd0\xae\x44\x72\x14\xdc\x62\xd3\x8e\xb1\x33\xa0\x17\x81\xe9\x96\x1f\x78\xb3\x28\x16\xcb\xf0\x34\x93\xd7\xd7\x61\x3c\xc3\x8b\x5d\x13\x5a\x07\x22\x14\x8c\x99\xe1\xe4\xa8\xf9\xd6\x9e\xaa\x0c\x6b\xe3\xc9\x4b\x58\xb5\xed\x33\xce\xcf\x9d\x15\xe8\xbc\xe5\x7e\x4b\x12\xf4\xf9\x43\x10\x49\xeb\x3b\x6c\xb1\x8e\xd9\xce\x81\x84\x2b\x3e\x88\xd7\x23\x09\xc2\xe9\x80\x2d\x24\x5d\x2d\x32\x0a\x39\xaf\x13\x41\x98\x2b\x11\x31\x88\xa9\xf5\x3d\xd8\x67\x77\x70\xdd\x2c\x46\xe4\x23\xa7\xa2\x10\x77\xe0\x57\xe2\x5f\xb9\x77\x07\xe8\xf0\x44\xc6\x27\x52\xd1\x94\x56\xfb\x77\xf9\x58\xec\xe2\x9b\x3b\x78\xf9\x18\xf7\xf1\xd5\x1e\xbe\x11\x90\xc9\x78\x8e\xf0\xcc\x70\x76\xdd\x6e\xcf\xd3\x3c\x5b\x68\x85\xb5\x33\x3d\x41\xbe\x7c\xf2\x01\x9f\x48\x8c\xd5\x57\xc9\xd4\xf7\x58\xe1\x13\xff\x78\x51\xf0\x4f\x14\xb5\x82\x58\xd8\x1d\x3e\x3d\x0f\x0a\x97\x56\xaa\xcd\x99\x82\xf0\xbf\xc3\x1f\x6a\xa1\xad\xe3\x72\x3e\x85\xdb\x1a\x23\x7b\x59\xf3\x1c\x4c\x27\x70\x5f\x2d\xd4\xf5\xf8\x29\x0a\x63\xcf\x07\x5f\x32\x2f\x5d\x4a\x33\x2d\xbc\x5e\xc6\x5b\xc9\x88\xe7\x60\x2d\x03\xe1\xb1\x8c\x62\x0d\x41\xd3\x51\x82\x45\x30\x4b\x3d\x79\xa6\xa9\x74\x9e\x13\x15\xfb\xf2\x78\x15\x83\xaf\xe3\xab\xf4\x26\x48\xc2\x1e\xe5\x78\x1b\x83\x66\x83\x62\x57\x87\xa7\x27\x97\xe2\x0f\xf9\x99\x7f\x83\x4d\x5e\xb9\xc1\xfb\x6d\x5d\x93\xfb\xad\x34\x88\x78\x48\x79\x69\x39\x58\xc5\xfa\xfc\x6d\x13\x72\x59\xab\x16\x06\xd4\x53\x51\x43\xd9\x11\xb8\x0b\x4d\x73\x38\x9b\x11\x4f\xfd\x85\x50\x10\x32\xd1\x32\x60\x5f\x1e\x3c\xe0\x89\x8d\xd8\x42\x46\x1f\xe5\x46\x12\x43\xb7\xca\xe8\x68\xe6\x86\xfc\x13\x49\x67\xff\x55\x0b\x38\x31\xcb\x21\x2a\x84\xb4\xda\x16\x42\x44\xa3\x46\xc4\x25\x7d\x9b\x51\xea\xba\x20\x02\x9b\x19\x53\xe7\xd7\x97\x74\xe2\x26\x34\xcc\xb9\x98\xa9\xf8\xa7\x04\x36\x9e\x10\xe7\x57\x9a\xeb\x80\x9a\x7f\xef\x4d\x3f\xe2\x19\x75\x2c\xb6\x03\x23\xaf\x26\xf9\x41\x19\x94\x1a\x23\x19\xfe\x56\x8f\xf1\x77\x57\x7c\xff\xfd\x5f\xa6\xe5\x05\x22\xfe\xe2\x10\xc3\x46\x3e\x87\x16\x2b\x9f\xc5\xea\x99\x58\x23\xca\x47\x99\x7a\x24\x6d\xe4\xf1\xe1\x6f\x2a\xc6\x53\x85\x46\x7a\x0d\x34\xe1\x58\x35\xd7\x9f\x4d\x54\xeb\xef\xfd\xe6\xe4\xf4\xf4\xe4\xfc\x1d\xc4\x9d\x19\xbf\x9b\x5c\x69\x1b\x4b\x5b\xce\x9e\x13\x84\xe6\x41\x93\x50\xfd\x3e\xaf\xb5\x0c\x8d\x03\x04\xff\xd1\xdf\x2a\xb7\x15\xb1\xa7\x1f\x80\x09\xf5\xba\xe2\x63\xb1\x8f\xb3\xaf\xd8\x1f\x0b\x1c\x2a\x96\xf6\x64\xeb\xb7\xd5\x2a\xc8\x2f\x44\x04\x83\x63\xc5\xf2\x52\xbb\x1e\x06\x87\x2e\xc3\x60\x0c\x77\x2a\x7b\x79\x3f\xbe\x33\xd9\xcd\x0c\xe9\xb2\xaf\x05\x07\xef\xbe\x03\x27\xd4\x24\xa1\x01\xa1\xee\x79\xfe\xc4\x79\x04\x8a\x56\x73\x41\xc7\x69\xaa\x79\x78\x18\xf8\xab\xb3\x43\x23\xd8\x61\x08\x93\x65\xb1\xdb\xd7\xf8\xfc\xc1\x2b\xc2\x3c\x6b\xf6\x6b\x5b\x3b\x8d\xad\xf2\xda\x92\xc4\x55\x07\xde\x8e\x90\xdd\xe4\x1d\xe4\x92\x5d\x5d\xa7\x6d\x0e\x63\x33\x61\x7d\xa0\xf0\xb5\xc0\x1a\xa0\x1d\x87\x04\x6a\xb7\xdd\x7e\x56\x2c\xe4\x16\xab\x5b\xe5\xd4\x11\xd9\x48\x68\x55\xd7\x1e\x51\x11\x84\x7e\x02\x3a\xa3\xa0\x55\xfd\x28\x85\x6e\x98\x54\xeb\x91\xb9\xd0\x18\x06\xa1\xed\x1d\x95\x1b\x11\x7b\x8c\xcb\x1c\x4e\x78\x3c\xa1\x68\x8b\x79\xac\xbc\x7d\xf4\xa2\xd2\x69\xbe\xf4\x3a\x2f\xa2\x00\x75\x81\x85\xd8\x3c\x14\x29\xc7\xd8\x83\x61\xf0\x91\xb3\xb3\x7d\x76\xf6\x66\x9f\xbd\x43\x9f\xfc\x77\x6f\xf4\x72\x6c\x8d\x91\xb5\xac\x55\x98\x6a\xdf\x1f\x49\x7b\x8c\x11\xfa\x92\xfc\x02\x96\xdd\x65\x58\x4d\xd1\x43\x7f\x85\xcd\xcf\xe4\x3f\xc6\x67\x97\xa7\x13\xe9\x06\x08\x31\xda\xd7\x2a\x5d\xa6\xc1\xa3\xd8\x99\x5c\xc1\xdf\xca\x43\x66\xb1\x4c\xe4\xc3\xd2\x4b\xe6\x15\xfc\xf1\xca\xe0\x95\xf6\x15\x20\xa2\xb7\x5e\x12\x48\x4c\xdd\x52\x6d\x96\x74\xe0\x96\x54\x51\xa3\x2c\x18\xb6\x15\xa6\xf3\x84\x30\xe6\xb7\xd7\x93\x2b\xfc\x75\x39\xbe\xbe\xfe\xfb\xc5\xd5\x31\x7c\x82\x6e\x04\x16\x55\xc9\x78\x30\x84\x56\x99\xde\xa9\xd4\x30\x54\x7a\xa1\xeb\xc9\xd1\xed\xd5\xc9\xcd\xcf\x1f\xde\x5d\x5d\xdc\x5e\x76\xe2\x73\x21\xe5\x86\xd7\x48\x9c\x5d\x5c\xbd\x63\x18\xeb\xdc\x0e\x31\x99\x98\x2b\xe6\xae\x30\x65\xbf\x60\xc0\x9f\x2b\xf1\xee\x66\x72\x75\xfd\x61\x7c\xfd\x01\x5c\x97\xbb\x87\xc2\x50\xe4\x1d\xe5\x52\x69\xaa\x06\xe8\x3b\x44\x52\x74\xbc\xe5\x0a\xa7\x5f\xb4\x4d\x45\xc9\xfc\xa6\x73\x3e\xfd\x38\x92\x06\x14\xe0\xf3\xab\xc2\x28\x77\x32\xef\xac\x47\x47\x82\xc1\xaf\x20\xf4\xbf\x97\x2d\xa3\x29\x86\x7c\x17\xe4\x4b\x57\x63\xd1\x49\x3e\x9c\x9d\x9c\xdf\xde\x48\xbf\xe5\x91\xc0\x05\x5b\xdc\xb4\xe0\xec\x3f\x25\x07\xf1\x2f\x38\xed\xbf\xca\xe3\x57\x70\x9b\x81\xa5\xa6\x71\x08\x56\x56\xb5\x52\xf8\x18\x23\xe7\x70\xf6\xf2\xf4\xe2\x68\x7c\x3a\x11\xaf\x8e\x4e\x27\xe3\xab\xef\xba\xfb\xf1\xd7\x05\x92\xde\xc6\x32\x9c\x97\x58\x27\x46\x65\x18\x1d\x26\x33\x32\x24\xec\x55\x89\x4b\x9e\x50\x42\x19\x0c\x6f\x86\x87\x94\x55\xf1\x83\xe5\x22\x34\x44\x5a\xd8\x1e\x23\x57\x59\xab\x51\xb2\x8a\x20\x8e\x2e\xed\x0c\x9d\xd9\x4e\x2e\xce\xa1\xa9\xa5\xa1\xf5\x7f\x8e\x46\x7e\x90\xc1\x5f\xd6\x02\xf6\xa5\xee\x2a\x95\x1f\x2f\x20\x39\x02\xcc\xfc\xb6\x03\xb6\xb3\xa2\x2b\x16\xd8\x88\x09\x7a\xb6\x08\x36\x8a\xbb\xf2\x95\xf7\xb2\xff\x7e\x7b\x71\x33\xc6\xf0\x05\x37\xe2\x8f\xd3\x0f\xab\x20\x06\x01\x2b\xd7\x95\xda\xc3\x94\x89\x09\x5a\x0d\xcf\x6c\x63\x01\x92\xa3\x16\xc3\x3e\x8c\x12\x2f\xa8\x96\xac\x11\x5a\x76\x5a\xf7\x8a\xe7\x44\xe6\xda\x9a\x72\x2a\x47\x35\x42\xf5\x8c\x2a\x0e\x04\xea\xe1\xb6\xb2\xdb\xd3\x71\x45\x6a\x56\x86\xca\x70\x84\xa0\x38\x7c\xb8\xba\x3d\x9d\x5c\x63\x64\x42\x5b\xf8\x3d\x89\xbb\xcb\x64\x13\x88\x52\xa3\x1e\xc9\x88\x1c\xe3\x77\xd7\xd6\x1f\x69\x70\x76\x3d\xe5\xc6\xcb\xae\x51\x1e\x7f\xe4\x11\x3b\x1d\xbf\x99\x9c\xb2\xcb\xab\x8b\xf7\x27\xc7\x93\x2b\x31\x76\xfe\x36\xb1\x9e\xdd\xc8\xe4\xfa\xe2\xbe\x4f\x05\x93\xb4\x6a\xba\x37\x57\x82\xfc\xd5\xe6\x06\x88\x89\x5d\x20\x55\x06\x27\xd2\x7d\xe5\xf9\xc8\x97\x9b\xfd\xa0\x7c\xf0\xb7\xc9\xcf\xba\x3e\x21\x63\x09\x6d\x3b\xf6\xbd\x2b\x68\x7a\x00\xd7\x1d\x05\x9f\x1e\x3e\xee\x74\x8f\x26\xea\x15\xc8\xd5\x26\xfc\xf4\xc6\x21\x8e\x01\xec\x62\xe9\xdf\x8b\xff\xc0\x9f\xea\xeb\x35\xe9\x37\xc8\xc3\x57\xa3\x90\xfb\xaf\x57\x60\x42\x8e\xa7\xc5\xaf\xf2\x45\xf2\xaa\xbc\x31\xfb\x20\x3f\xe0\x01\x04\xc3\xa2\x0e\xd7\x6f\x23\xe7\xdb\xc8\xf9\x36\x72\x9a\x23\xc7\x79\x35\x9a\x7b\x29\xf7\xcb\xbd\x0a\x6d\x83\x63\xae\xeb\x8c\x08\x6f\x96\xa4\x56\x0b\xe9\x0b\x55\xde\xc2\x7f\xc8\x47\x23\x54\xf5\xed\xb5\x2f\x1a\xb1\x5e\x98\xd7\xf6\x22\xad\x3b\x8f\x7a\xe4\xb7\x9d\xec\x8f\x9e\x13\x99\x6b\x6b\xa2\xd5\xdf\x86\xf6\x65\x2b\x71\x57\xed\x3e\xa8\x46\x65\x5c\x4b\x7d\x98\x76\x38\x76\x39\xba\x9a\x1c\x4f\xce\x6f\x4e\xc6\xa7\xd8\x56\x21\xbb\xfe\xf9\xfa\xf4\xe2\xdd\xe8\xf8\x4a\x8c\x90\x51\x79\xc9\xc2\x20\x16\x75\xa6\x72\xab\x8b\x79\x1a\xe6\x55\x0c\x2a\x29\x06\x15\x58\xa3\x41\x6e\xec\x72\xaa\x45\x1f\xb6\xac\xee\xa8\xbe\x32\x88\x64\x42\x22\xde\x3a\x57\x59\x42\xc6\xc4\x7f\x88\x62\x7f\x05\x63\x7f\xc5\x7c\x5f\x72\x87\x19\xb2\x86\xba\x05\x25\x86\xf2\xc0\xd9\x57\x00\x9d\xaa\x70\xc5\xd5\x6d\xf3\x86\x1d\x67\x4f\xcc\xa4\xd5\x52\x4d\xe9\xac\x8c\x89\x69\xc5\x75\xb1\x1c\xf9\xf7\xa3\x05\x04\xa7\xc2\x36\x2a\x0d\x2a\xf6\x6b\x39\x12\xc9\x04\x53\x31\x59\xae\x32\x28\x85\x2c\x5b\x66\x61\x3c\x3b\x7c\xf5\xaa\x16\x3e\x48\x35\xf4\x69\x10\x15\x9f\x5e\x9d\x79\xd3\xc3\x1e\xb0\xa1\x99\x4a\xe0\xd8\x2e\x68\xfc\x8b\x4d\xb5\x92\xe2\x10\x7e\xc8\x7c\x87\xb5\xd4\x0a\x7f\x0f\x22\x3f\x7e\xca\x98\xf2\x65\x07\x3c\xbc\x57\x03\x7e\x86\x0c\x9b\x15\x98\x3b\xe0\x7b\x57\x02\xba\x03\x48\x6b\xc9\x38\x0f\xe5\x03\x05\x4c\xfc\xfd\xa5\xea\x84\x25\xb6\xcb\xf8\x89\xa7\xd7\x73\x1e\x86\xfd\xda\xa8\x2f\xb0\x3d\x8b\x2b\xbb\x6f\x33\xc9\xb7\x99\xe4\xdb\x4c\xf2\x6d\x26\x21\xcc\x24\x74\x6d\x05\x02\x34\xe1\xbd\x88\x50\xf4\x1e\x61\xd2\xf8\x0f\xa1\xd9\xdd\xfc\x74\x81\xb9\x5b\x7f\x62\x3f\x4d\xc6\xc7\x93\x2b\x95\xc7\x75\x2c\xb4\x5f\x50\xe6\xe2\x22\x4f\x8a\x9c\xc1\xa6\xca\x42\xb3\x1c\x8e\x03\x59\x3a\x15\x4e\xa1\x96\xae\xf6\x81\x8d\xd2\x6e\xcc\x9d\xf5\x1c\x91\xb4\xde\x4a\x09\xe2\xb6\x88\x2c\xea\xbb\x22\x6b\x6c\xcb\x48\x98\x4c\x35\x5d\xd1\xa8\xab\x28\x12\x8e\xf6\x3a\xee\x08\x92\xb9\x17\x89\x81\x2b\x03\x70\x10\x91\x98\xea\xba\x22\x6a\xee\xca\xec\xd1\xe8\xeb\xb9\x22\x91\x37\x49\x6d\x77\x48\x24\x60\xd6\x64\x5c\x71\x9a\xaf\x8c\x28\x50\x29\x94\xdc\xd1\x6a\x35\x3b\x0a\x50\x2b\x22\x3d\x31\x1a\xae\x71\x1c\xc0\x5a\x53\xeb\x8b\xba\xfd\xe2\xc6\x05\xb1\x0d\xa5\xbe\x68\x2d\xce\xad\x1f\x36\xcd\x2f\x0d\xc4\x56\x07\x86\x54\x71\x77\x02\xc5\xb9\xbd\x5a\xce\x15\x69\x1f\xb5\x9b\x80\x33\xb6\xc6\x81\x22\x01\x92\xb6\x5e\x2f\x24\x6a\x2d\xa8\x9d\x66\x8e\xac\xcc\x57\x49\x34\x5c\x11\x36\x4f\xe2\x28\xad\x65\xaa\x49\x47\x23\x4d\x81\x46\x2a\x59\xd4\xe8\x21\xf4\x66\xec\xed\x64\x7c\x73\x7b\x35\xb1\x33\xf6\x25\x50\x20\xa3\x93\xbb\xf0\x1e\xe0\xec\x09\x38\x60\x7b\xb4\xb7\x88\x6e\x2f\x4c\xe7\xf9\xc8\xa3\x3c\x23\xb0\xd5\x95\x27\x73\x76\xff\x04\xdb\x68\xfb\x3a\xcd\x6e\x03\x55\x4d\x69\x3a\xd7\x20\xe4\x59\x6d\x9b\x54\x66\xa4\x59\x5d\x19\x74\x8f\x61\x12\x0d\x32\x42\x15\x07\x53\xb9\x23\x80\x49\x06\xdc\x36\xa2\xe1\xe6\x08\x38\xbd\xba\xb9\x78\xa5\xa2\xe8\xe3\x45\x46\xe5\xdd\x80\x6e\xe6\x73\x5e\xc5\x86\xc5\x20\x09\x55\x6c\x8e\x7a\x98\x58\x15\xa6\x03\x22\x74\xac\x42\x2c\x43\x94\x84\xbd\x51\xba\x07\xb1\x11\xca\x33\x80\x36\x57\x89\x35\x7c\x65\x7c\xf8\x59\x90\xcf\x8b\x7b\xf4\x8b\x98\x3e\x8c\xf8\xa7\x84\xa7\x01\x38\x9c\x78\xe1\x2b\xe5\x58\xf1\x10\xc7\xf7\x5e\xaa\x21\xf3\x5f\xaf\x8e\x15\xd2\xcc\xaa\xbc\x2a\xc3\xa7\xf3\x58\xec\x73\xd9\xd9\x72\x84\xbe\x1a\x16\x67\x94\xdf\xda\x77\xa0\xf6\x25\xf7\x6c\xf0\x81\xae\x7b\xd9\x74\x8f\x7a\x43\x0d\x3a\x77\x0c\xba\xf0\xcb\xc8\x83\xe8\x74\x1f\xe0\x64\x59\xfc\x28\xaa\x45\xb8\x4c\x50\x25\x6f\xd3\x7e\xad\x5f\xa6\x66\x52\x75\xf8\xd5\xca\x6b\x65\x68\x36\x2e\x72\x8a\x5d\xaa\x0d\xce\x46\x31\x17\x3e\x84\x55\x4c\x53\x9a\xcc\x75\xe1\x25\x6a\x17\x5e\xcd\xbf\x4e\x16\xa6\x64\x3a\x74\xa4\x32\xac\x50\xb5\x89\x28\xcd\x1b\x32\xf6\xf8\xfa\x43\x69\x2c\x29\xfe\xac\x76\x8e\xf0\x37\xd8\x4e\x3e\xfe\xb0\x7a\xfd\x03\x3e\xb2\xea\x78\x5b\xe3\x47\x96\x3c\x5e\xed\x8e\x3b\x51\xb7\x96\xa5\x73\xb4\x34\x1b\xef\x6f\x2f\x2e\x28\xa0\xf2\x9e\xd9\xf2\x6b\x2b\x4d\xe6\x8a\xe7\xe9\xfa\x18\xb0\xba\x62\x74\x3e\x32\x9b\x53\x37\xa3\xf5\x72\x74\x4e\x45\x3a\x5b\xf5\xd5\xf8\xe1\x81\x63\x42\x8a\xb2\x23\xe2\x24\xa9\x3a\x6a\xf7\x60\x76\x23\x46\xc6\x5c\x3b\x96\xec\x84\xd4\x5a\xd6\x8d\x63\xf7\xe7\x58\x2f\x46\xe6\x23\xf3\x8c\xd1\xdd\x66\x5b\xea\xd5\x3c\x67\x2d\x26\xad\xed\x33\x76\x68\x0b\x0c\xa7\x5c\x2d\x0b\xe7\x93\xbf\x7f\xb0\x5e\xe6\xec\x2a\x3b\x62\x6a\xbb\x4b\x59\xb1\x69\x3e\xb2\x44\xea\x46\xd2\x15\x7f\x79\xdf\x01\xb4\x6d\xa6\xcf\xae\x6a\xae\x38\xb4\x47\xce\xc0\x61\xfd\xa1\x2d\x4a\x47\xa2\x3d\x65\xd0\x9c\xeb\xd6\x79\xca\x47\x44\x31\x1c\xe8\x3a\x4b\x52\x3b\x39\x44\xfa\x56\xbe\xcc\x76\x95\x1d\x30\x25\xb1\x9a\x56\xb2\xf6\x89\x67\xf5\x7e\x63\x7f\x68\x01\x7a\x10\xea\x0e\x52\x81\xaf\x31\xb7\x57\xd7\xf5\x15\xdc\x78\xa7\x39\x91\x77\x6b\x05\x57\xde\xe8\x3b\x5a\x85\xb2\xaa\x26\xe7\x93\xf3\xe3\xc9\x7f\xd8\xc2\xb1\xa3\x41\x47\xa8\xe2\x07\xf0\xe8\x31\x48\xe3\x08\x76\xf4\xa3\x47\x2f\x0d\xf0\xc8\x13\xaf\xee\xba\x01\x12\x48\x90\xf1\x65\xe8\x37\x5c\x33\x2b\x58\x1d\x72\x19\x72\x3e\x5b\x1c\x84\xf7\x27\x4c\x97\xa5\x97\xcb\xfe\xb6\xbc\xf4\x75\xeb\x86\x05\xa0\xae\x8a\xae\x58\x6a\xd7\x9b\xdd\xca\xa7\xb1\x8e\x33\x82\xae\xfb\x3b\xed\xd5\x9d\xe3\xf5\xe1\xd6\xf9\xf6\x69\x89\x4d\x13\x75\x1b\x18\x19\xe2\xa0\x48\x3e\x0c\x1f\x07\x49\xf3\x51\xfd\x72\x85\x4d\xce\xdf\x7f\x78\x3f\xbe\x6a\xfe\x78\x3f\x3e\xbd\xb5\x19\x14\x0e\xb4\x9c\x10\xc3\xde\x1e\x63\xbe\x57\xd7\x78\xa0\xa3\x5e\x5d\x48\xb7\x1d\x2b\xa0\xb6\x24\x9c\xf0\xc9\x1d\x28\x10\xc4\x5d\xa8\x35\x28\x63\x3d\x27\x24\xdd\x0b\x94\xbd\x81\xaa\x95\x08\xdb\x61\xe8\x24\xfb\xe6\x05\x34\xbe\x22\xdf\x67\x3b\xd1\xea\x81\x78\xb3\x5b\x4a\x1d\x9b\xd4\xbf\xa9\xa4\xdc\xf0\xaa\x28\x3a\x3b\xeb\x5d\xdb\x61\x48\x97\x1d\x6c\x40\x46\x2a\x26\x99\x43\x10\x0f\xeb\xfa\x74\x64\xab\x3d\x59\x37\x8a\xb6\xb2\x6e\x1c\xeb\x23\xe3\x03\x0e\x07\xbb\xfd\x86\x5d\xe5\x3e\x98\x2c\x94\xa8\xd6\xc2\x8e\x3c\xab\x13\x67\xca\x37\xd0\xd7\x72\x43\x61\x29\x73\x2f\x69\x73\x38\xb7\x12\x8a\x8a\xed\x99\x97\xbe\x82\x1b\x6f\x0b\x19\xf3\x9e\x31\xb5\xba\x27\x1b\x1b\x0c\xd6\x24\x5c\xf0\x51\xf6\xf6\x83\xed\xec\xb3\x3c\x26\x04\x33\xd4\x94\x26\x73\x95\x99\x03\xdb\x2e\x6d\x3b\x21\xd8\x54\x25\xe3\x29\xa2\x01\xe3\x19\xba\x11\x73\xc5\x3c\x54\x4c\x43\x57\x72\xee\xb8\x3b\x02\x0f\xda\x23\xb6\x26\xe4\x8c\x75\x90\x58\x85\x6e\xc4\x1c\x30\xaf\x99\xa0\x48\x23\x1c\x3b\xf5\xd8\xae\xb2\x03\xa6\xa1\xec\x0d\x1c\x28\x39\xa0\x35\xee\x7e\x2d\x30\x5a\xd6\x77\x44\xd6\x73\xc7\x4c\x23\xe2\x88\x71\x43\x19\x24\xec\x9e\x09\x14\x7a\xa1\xeb\xbd\x37\x73\x23\xe6\x82\xb9\xe7\x1e\x85\x40\x81\x8e\x2e\xf1\x75\x51\x17\xa5\x89\x56\x69\xd4\x59\x86\x5f\xfc\xb5\x35\xfe\xa2\x8a\xae\xf9\x51\x3c\x2a\x22\xf8\xc3\x62\x2e\xd8\x3e\x67\xd7\xd6\xa0\x47\x1b\x84\xc9\x0b\x2e\xde\x70\xf2\xea\x19\x5a\x83\xfd\x27\x93\xe2\x39\x07\x05\xf9\xa3\x89\xe1\xfa\x9d\xb6\x13\xb7\x70\x18\xe2\xee\x32\x19\xe2\x04\xc0\xb7\x01\xd3\xb4\x5f\x07\x08\x5c\xb8\x35\x7e\x3d\x25\xef\x1d\xb9\xd0\x95\x5c\x5f\xdc\x43\x46\x2e\x1c\x82\xb4\xb3\x3c\x06\x6f\x21\x9c\x35\xce\xc6\xff\x31\x2a\xbb\xc9\xa8\x3d\xb4\x90\xc5\x34\xb2\xa3\x49\xf0\x8f\x26\x8d\xeb\x57\x1b\x34\xda\xc8\x9e\xf6\xc6\xcb\xc8\x6d\x88\x38\x12\x14\x5e\x36\x91\x31\x6c\xfb\xc9\xb7\xf6\xeb\x6a\x3f\x4a\xcf\xbc\xb9\x02\xed\x79\x72\x75\x75\x71\x05\xcd\x35\xbe\x81\x7c\x88\xa2\x8d\x30\x32\x04\xe4\x9d\xb9\xf4\xf2\xf9\x97\x2f\xa2\x6d\xc4\xdf\x93\x34\x35\xa4\xc6\xea\x49\xcd\x1e\xb5\x17\x61\xe2\x1b\x6c\x29\x08\xed\xc7\x56\xb6\xe3\xf1\x03\x83\x41\x5b\x19\x1b\xe0\xa0\xd5\x23\x76\xa7\x44\x42\x3b\x0c\xd2\xaf\x06\x25\x7b\x79\x2c\x93\xb7\x1d\xb2\x72\xaa\xe4\xfe\x77\xc3\x60\xef\xa2\x4d\x91\x08\x3e\xad\x0a\x34\x92\xad\x25\x08\xdc\xaf\x9e\xa0\x45\x00\xf8\x47\xdd\xcb\x54\x55\x99\x4c\x50\xf4\x10\xa4\x32\x4d\x91\x24\x60\x30\x66\xdf\x16\x1f\xaa\xa4\x98\xb2\x71\xe1\xa5\x1f\x79\x2e\x5a\x72\x5a\x61\xc9\x30\xbd\x12\x64\x6a\xf0\xd4\xa9\x2e\xf7\x3b\x52\x7b\x0e\x40\xd1\x09\x3d\x26\x64\x0e\xa2\x87\x38\x5d\xc8\x68\xa8\x90\x1b\x70\x23\x29\x5a\x2f\x71\x86\x62\x41\x95\x6f\x90\x29\x60\x07\x73\x15\xb0\x90\xa1\x69\x97\xec\x3e\xce\xe7\x0c\x76\xea\xd8\x6f\xe5\xa6\x9d\xc5\x18\xe4\x36\xd3\x67\x2d\x73\x23\xd2\x0b\x23\x2c\x26\x78\xdc\xe0\xaf\x72\x68\x1e\xcb\x63\x07\xf1\x84\x06\xd5\x9a\x96\x33\xe2\xea\x1c\xe5\x3e\xc8\xe5\x94\x00\x6d\xf2\x4a\x36\x8d\x3d\x58\x5b\x32\xf6\x38\xe7\x5e\x34\xc3\x58\xc1\x8f\x01\x7f\x42\x0f\xd1\xca\x80\x74\x1a\x17\x51\xbe\x0f\x53\xf2\x47\x75\x07\x1e\x06\x8b\x40\x3c\x01\xbe\x0b\xbe\x00\x87\x51\x7c\x82\xe3\xa9\x23\x69\xeb\xf6\x18\x51\x65\xad\x0f\x18\x49\x70\x63\x06\xef\x92\x82\x44\x82\x8a\x0f\xe3\x2e\x94\x3a\x64\x17\x12\x4d\x61\x1a\x4f\x70\x44\x2a\x69\x98\x12\x3b\x9a\x0b\x13\x78\xf2\xe9\x47\x20\x83\x59\x60\xe1\xba\xc1\xcc\xd4\x58\xda\x9e\x6b\x18\x17\x3e\x7b\x2b\xba\x9a\x2f\xba\xd3\xf8\xf2\x84\x3d\xf2\x14\xe7\x54\xcc\x4d\x19\xbc\x87\xf4\xa2\x2c\xe5\xff\x28\x82\x54\x4c\xaf\x47\xa7\x8d\x02\x47\x61\x70\x16\x44\x62\x2e\x60\xec\xe7\xb8\x60\x5e\xca\x21\x04\x1b\xe4\x25\x0d\x97\x4c\x14\x69\x16\x45\x5a\x07\xec\x26\x16\x5a\xfe\x2c\xf5\x7c\x2e\x33\xfe\x0b\x9a\xfb\xa2\xcf\x60\x3e\x76\x98\xcf\x85\xbe\xd3\xe6\x3a\x0d\x40\x1f\x24\x4e\xf1\x23\xf8\x9f\xa5\xff\xb6\x61\x99\xf8\x33\xc9\x66\xff\x45\x95\x93\xfb\x4f\x3c\x34\xcc\x3b\xad\x85\xc8\x3c\x40\x47\xe8\xe4\xd1\x2c\x44\xe6\xf1\x1b\x34\xb0\xfc\xfb\xcb\x97\xdf\x30\x51\x7f\xcd\x61\x9f\xc3\x18\x50\x37\x88\x42\x35\x09\xc4\xf4\xcf\x22\x19\xdd\xfd\xe8\x6d\xe9\xf0\xff\xca\x0b\x03\x2f\x13\x1f\xf2\x4a\x3a\x79\x01\x81\x35\xb2\x65\x68\x80\x0e\xf2\x90\x70\xd6\x17\x73\x4b\x2d\x46\x69\x9e\x95\x05\xa4\x16\x85\x6b\x7b\xc6\x0d\x43\xf7\x4f\x23\x58\xef\x6f\x09\x42\x35\x44\x61\x55\x00\x03\xb6\x07\x7b\x64\xfc\x53\x6a\xa2\x7b\x6a\x20\x8a\x65\x31\xf4\x59\x2e\x46\x74\x75\x75\x8c\x93\xaf\xa6\x16\xc2\x16\x92\x47\xa5\x30\xe2\x07\xc4\x71\x90\xc5\xeb\x72\x07\xd1\x63\xfc\xd1\xd4\x86\x02\xc0\x4f\x62\x0f\xf6\x08\xc1\x62\xc5\xe8\x66\xd9\x1c\xa1\xc8\x7d\xcb\x43\x01\xc9\x0e\xc4\x10\x16\xd3\x42\xae\x78\xb2\x60\x21\xd6\x6d\x4c\xe4\xda\xc0\x0a\xaf\x30\x57\x2d\xfc\xd8\x44\x2c\xb1\xd1\x3b\xd0\xb7\xd6\xb4\x6a\x4d\x72\xaf\x05\x5d\x13\x67\xe7\xce\x2f\xd2\x52\x92\xc2\x2d\x01\x1b\x03\xa0\x23\xda\x42\x2a\x83\xd9\xdc\x7b\xcd\xd0\xe6\x14\xc4\x6e\x89\x54\x12\x84\xc6\x09\xb8\x2f\x45\x22\x7a\xcc\xea\x01\x0c\x40\x2b\x59\xcd\x2e\xca\x2f\x6e\x5f\x76\x96\x85\xb7\x14\x7b\xc9\x8f\x10\x35\xf9\x69\x0e\x59\x3a\x8c\x7a\xce\x50\x74\x09\x92\x44\x11\x9f\x62\x70\x68\xbf\x58\x24\xc0\x3a\xe5\x53\x4c\xc0\x0c\x91\x30\x50\xaf\x1d\x36\x11\xb9\xe9\xde\xff\x59\xc1\xb8\xb4\x59\xee\x05\x38\x2a\x9f\xb7\xb1\x76\x89\x82\xd0\x4a\xc9\x12\x7b\xb2\xd0\x0c\x05\x17\x8c\x32\xa4\x70\x5d\xe3\x23\x81\x4e\xe6\x85\x57\x26\x87\xea\xe5\x0d\xfe\x92\x2f\xb7\x94\x7e\xff\x6b\x82\x46\x68\x4f\x58\x30\x60\xce\x85\x83\x44\x00\x57\x6e\x37\xd7\x4f\xb1\xee\xa2\x49\x9a\xc6\xe9\x21\xeb\x3e\xb9\x1f\x82\xa6\x83\x04\x53\xf1\x01\x9a\x33\xf1\x21\x2b\xaf\x06\x62\x3b\xc0\xf6\x24\x1c\xf0\xf9\x10\xfa\x1e\x6f\x79\x60\xc9\x50\x1b\x21\x06\x69\x80\xa0\xdb\xf8\x62\x03\x35\x85\x50\x59\xff\x97\x05\x4e\x3a\x29\x07\xbc\x0f\xf0\xf5\x3c\xc1\x0b\x4f\xd0\x99\x34\x3f\xb2\x00\xd7\x51\xcf\x19\x89\x18\x2e\xd0\xd5\x7d\x54\x50\xaa\x59\x68\x0f\x06\x4d\x99\xeb\xd6\x1a\x1d\x89\x96\x2b\x62\x3c\xc4\x81\xc3\x5f\xe4\x55\xeb\xfd\x97\xe2\x85\xe4\x68\x0b\x98\x44\xca\x15\xaf\x6e\x98\xc2\x10\x2e\x87\x72\xbd\xb9\x6c\xc1\xbb\xd3\x75\x96\xa4\x31\x63\x56\x13\xab\xf8\xb2\xff\x94\x1b\x31\x39\xc3\x12\x44\xa0\x13\x74\xc0\x9e\x78\x29\x1c\x72\xa8\x53\x91\xa8\x58\xdc\x73\x39\x39\x9e\x44\x42\x83\xb3\x42\x6b\x4f\xc2\x01\x9f\xf8\x90\x81\xd8\x15\xfd\x93\xd7\xef\x3c\x2c\x40\x75\xd4\xeb\x85\x44\xde\x76\x9b\x6e\x10\xac\x2a\x39\x60\x50\xcb\xb8\xe8\x06\x07\xb8\x46\x8c\x93\xc0\x76\x61\xec\xae\x4a\xc3\x13\xed\xe5\x65\x1e\x95\x9c\x2f\x12\x99\xb9\x0f\x74\xb6\x22\x81\x33\x30\x33\x22\xeb\xca\x74\x4c\x71\x22\xb6\xb9\xab\xbb\x85\x8e\xad\x96\x4d\x25\x3a\x86\xa7\x34\x10\x92\xfd\x33\x48\x2c\xd9\xeb\xca\xdb\x73\x2e\x13\xda\x54\x32\xe8\x99\x1a\x8a\xd2\xf9\x29\x03\x61\xc8\xf4\x28\xf5\x48\xf8\x88\x82\x19\x4f\xe1\xd0\xa9\x1b\x84\x6d\x7d\x67\x64\xf9\xdc\xcb\xcb\x84\x92\x82\xa2\xcf\xee\x97\x0c\x0e\x40\x04\xaf\x8c\xbd\x44\x3b\x17\x4c\xa7\x68\xb8\xfd\xef\x4f\x91\x8e\x3e\xe2\x4f\x78\x1d\xd2\x8d\x6a\xb3\x24\x9d\x9b\x20\xed\x43\xec\x54\xf4\x96\x80\x2f\x80\x3b\x73\xe3\x0d\x18\xa1\x2a\x1d\x4f\x69\x10\xcb\x3a\x1c\xee\xba\xca\xbb\x70\x96\x7a\x03\x98\x72\xb2\x8e\x88\x8a\x36\x75\xdc\x11\x48\x43\x4c\x7b\xee\xeb\xe5\xdd\x39\x77\x5f\x1c\x76\xd7\x70\xe0\x6e\xb6\x80\xd0\x14\xa3\xf3\x81\x5c\x43\xb2\xb7\x62\x7a\x5a\xa9\x65\x11\x67\x2d\x0a\x0d\x32\x42\xbc\x11\xae\xb6\x04\xb5\x5b\x62\x39\xf3\xcc\xc5\x2e\xfc\x9e\x8b\xe5\x2a\x29\xb2\x39\x98\x75\x14\xd3\x29\xcf\x32\x3c\x7a\x35\x68\x24\x83\x12\x77\x90\x49\xcc\x8e\x16\xe0\x1a\xa5\xa8\x5c\x20\x12\x0c\xf5\x0a\xdc\xbe\x26\x0d\x0d\xec\x89\x37\x1a\x1b\x8e\x67\xca\x8d\x73\xc6\xf3\x1c\x8d\xa8\xe2\x07\x2c\x65\x86\xd8\x83\x9c\x03\xee\x61\x0f\xdd\x2c\x24\xdb\x16\x43\xba\xec\x2b\x1d\x50\x50\x7d\x53\xfe\x38\xb7\x97\xc5\x9a\x00\x1d\x9b\xd2\x3f\xc0\x9c\x07\xff\x52\x2d\x00\x1d\x77\xa3\xb5\x9c\xbe\xc3\x60\x0c\xe8\xb2\x0d\x23\xc0\xb6\x51\x4a\xdb\x7e\x41\xf1\xdf\xe1\x8f\x3e\x48\xe9\x94\xe8\x68\xe5\x0a\x25\x28\xfe\x14\x67\x79\x64\xf8\x96\x43\x8e\xe5\xad\x32\x1d\xa4\x0d\x5c\xc5\xe8\x89\xa4\xa9\xa3\x02\xe9\xf2\xc9\x07\x7c\x52\xc9\x5e\x54\xb2\x77\xc3\xec\x45\xd4\x45\x86\x75\x4d\x57\x91\x3f\x92\xcb\x10\x7c\x36\xcb\x06\x76\x20\xe5\x8e\x57\x39\x35\x09\xea\x7d\xba\xb6\x1b\x35\x77\xd4\x95\x49\xe1\xc6\x21\x26\x79\x7d\x74\xff\x3e\x3b\x01\xe1\xde\x46\xa0\xb9\xad\x90\xfd\x8d\x2f\x6b\x6b\x96\x41\x84\x13\xf5\x68\xa0\x46\xda\x0d\x0a\x87\x56\xc2\xb4\x65\xba\x75\xdd\x6d\x10\xb8\x93\x74\xc0\x8f\x9d\xa9\x75\xad\x1c\x4e\xeb\x19\x94\x89\xab\x8c\x6b\x03\xa6\x6d\x6c\x39\x77\xd2\xa1\x18\xd0\x65\x93\x06\xbd\xca\x1f\x4c\x7f\x27\xb3\x83\xe9\x6c\xf7\x48\x1c\x5b\xab\xba\x9d\xa7\x0a\x67\xaa\x48\xc1\xa2\x32\xa7\x1b\xec\x73\xdb\xca\xb8\x70\x60\x4f\x3c\xe5\x2c\xe5\xbf\x2b\xeb\x0f\x65\x70\x0b\x56\x6d\xde\xcc\x33\x9a\xd2\x39\x11\xb1\xc7\xa8\x36\xd5\x47\x6f\xdb\xcd\x8f\xe1\x97\x49\x3b\x23\x56\x77\xc1\xb5\x66\xf5\x4c\x02\xd5\x5d\x97\x8c\xe8\xb2\xd3\xc2\x5f\x5b\x90\xcc\xab\xb4\xd7\x67\x7e\x20\x6f\xb6\x16\x5e\x3e\x9d\x77\x72\xee\xaa\x46\xc0\x91\xe5\xf1\xa2\xee\xbe\xb2\x94\x37\xe4\x2f\xf9\xc1\xec\x00\xbc\x5d\xab\x57\xdf\x81\x8b\xc8\xbb\x93\x1b\x4c\x7a\x26\x5f\xef\xb5\x18\x92\xcf\xb9\xd0\x28\x0b\xf5\xcf\xaa\x36\x38\x6c\x2f\x0f\x44\xb9\xbd\x8a\xce\x9b\xab\xf1\xf9\xd1\x4f\x3d\xc9\xfd\x4f\x9f\x3f\xf2\x30\x4e\xf6\x70\x7d\xdb\xab\x7e\xdd\x8b\x86\x9b\xce\xbf\x3b\x60\x62\x06\x41\xf1\xf2\x51\x50\xbb\x15\xcb\x18\xdc\x6a\x80\xb4\xea\xb0\x49\xd9\x23\xe6\x31\xdb\x8b\x8a\x30\xdc\x63\x92\x1a\x9a\x60\x18\x22\x7b\x7e\x6b\x3e\x52\xf3\x51\xfb\xe5\x9c\x7b\x60\x7e\x2b\x8d\x79\xa7\x61\xe1\xf3\xd2\x88\x1c\x5c\x26\x78\x96\xef\x33\xcc\x2a\xa9\x6e\xb0\xa4\x37\x96\xa0\xcf\x16\x82\x6f\x20\xa6\x4f\x96\x07\x0b\x53\x34\xc9\x2d\xb1\xb1\x96\x53\x06\x22\xba\xd6\x02\xdc\x78\x6f\x4f\xd9\xcb\xe6\xf7\xb1\x97\xfa\x68\xbd\x20\x7a\x89\x61\x3e\x35\x96\xb5\xe7\xc8\x1f\xc0\xa2\x4a\xde\xe2\xa5\x5c\xd9\xf1\xa1\x2e\xaa\xe7\x6c\x53\xc7\x0d\x81\x54\x74\x5c\x70\x98\x6b\x12\xd0\xa0\x13\xb2\xcd\x3d\xb6\xa9\x28\x9d\x5f\x87\xa5\x99\xb6\x1c\x9d\x53\x57\xa3\xb6\x17\xa3\xf3\xc1\x13\xac\x6e\x3e\x6b\xc5\xe8\x7c\x08\x37\xa6\x56\x75\xdc\x11\x74\xdc\x98\x76\x96\x77\xe7\xdc\x79\xcf\x64\x51\xc3\x9d\xbb\x29\xdd\x82\xb9\xb0\x03\xcf\xfa\xf6\xdf\x82\x6b\x7b\x71\x07\xbe\xc6\xdb\x61\x5d\x31\x47\x3e\xea\x30\xc0\x87\x09\x2e\x58\x39\x51\x45\x42\x83\x0c\x66\x72\x91\xab\x97\x93\x66\xd7\x61\xd8\x15\x87\x79\x3b\x4c\xe8\x32\x1a\xed\x4a\x34\xa5\xc8\x5c\xd0\x20\x26\x99\x7b\x91\xf8\xfc\x38\xc7\x64\x52\xe5\x3a\x14\x92\xc5\xb0\x41\x83\xeb\x66\xf0\xce\x94\xaa\x78\x92\x70\xb4\xc9\x94\x97\x9c\x7a\x63\x9c\xa1\xc9\x93\xe5\x32\x3b\x86\x6b\x4a\x39\x70\x31\xdd\x97\x6b\x4a\x51\xb9\x4c\x61\x02\x02\x8f\x9c\x2e\x46\x2d\x05\x89\xbc\x32\x7b\xa3\x9e\xee\x0a\x34\xde\xbb\xbc\xd1\xde\x3e\x43\xba\xec\xae\x37\xda\x74\x02\x74\x6c\x03\x1c\x4c\xf7\xa2\x45\x47\xfc\x2c\xf7\x0d\x3b\xe6\x4e\x6f\x95\x5e\x07\xf1\x8e\x54\xe8\x28\x7b\xdf\xde\xf7\xa0\x44\x47\x5b\xdd\x40\x5f\xc1\x1f\x96\xc0\x8c\x95\x7a\x60\xc0\xfd\x2d\x0d\xc1\x66\x15\x3a\xff\x21\xef\xcc\x87\x21\xea\x22\x83\xcd\x45\xb7\x0d\x6c\x1a\x1d\x77\xa4\xbd\x6e\xcb\x7b\x52\x73\x47\xbd\xc3\x5b\xa5\x9d\xf2\x76\x68\x11\xfd\x85\xa6\xdb\x97\x74\xa4\xe7\x8a\xbc\xba\xc9\x6a\x3a\x3e\xad\x9e\xa3\xd7\x93\xfb\x47\x1b\x92\x09\x5d\xc6\xb6\xcb\x3a\x67\x59\x9c\x88\x11\x30\x67\xd3\x34\xc0\x48\x67\x87\xb5\x3e\x5e\x7b\x6c\x9c\xb8\x28\x95\xed\x31\xc9\x48\x66\xcc\x43\xc3\xe4\xd2\x6a\xb7\x3a\x5d\xae\x3b\xc8\xe9\xa1\xb9\xd0\x70\x45\x08\xbb\xce\x6a\xa2\xa8\xe9\x69\x55\xb8\xad\x38\xc2\xe7\xa5\x0b\x89\x2d\x6a\x77\xba\xfd\x24\xa9\x9a\xa9\xce\x90\x06\xba\x83\x04\x19\x1f\x9c\x95\xd4\x9c\xb7\xe0\xa4\x44\x46\xca\x41\xf7\x1c\x54\x8e\x65\x2e\x95\x4e\x98\x0e\x94\x9c\xd0\x0a\x72\x68\xa9\xcd\x1e\xb8\x97\x17\x29\x67\x59\x2c\x8f\x2c\x64\x52\xb0\xb9\xf7\xd8\x68\xb2\xc8\xc7\x7b\x94\x22\x93\xb5\x55\x25\xc3\xfc\xb0\x45\x56\x44\x79\x71\x37\x2c\xc9\x43\x90\x47\xe8\x9c\x9f\x21\xd6\x8b\x17\xb5\xec\x5d\x36\xd6\x51\xd2\x7a\xb5\x6d\x7e\xee\x92\x43\xc3\x8a\x61\x28\xe3\xc3\x0a\x58\x5a\xfe\x0f\xb5\x01\x5b\x03\x63\xb1\x5b\xdf\x01\xcb\x1d\xc9\x0f\xdd\xae\xdf\x86\x72\xc7\xec\x7b\xb5\x4b\x4b\x0f\xed\x42\x38\x78\xe3\x6c\x1d\x03\xa5\x85\x3e\xaa\xe8\x98\xf2\x82\xfe\x87\xbf\xfe\xcb\xd9\x3e\x7b\xfd\xfd\x0f\x3f\xc2\x3f\xef\x0c\x07\xc3\xf6\x35\x29\x68\xe0\xd2\x1f\xee\xba\x43\xb1\xe9\xc2\x80\x4c\xb9\x98\x0f\xab\xd8\x34\x26\x34\xb6\x35\xed\xd1\xc4\x2a\x5e\x48\x18\xa7\xe0\x50\x2e\x36\xda\x49\xa1\x0f\x3f\xd1\x55\x9c\xca\x77\xe1\x25\xe5\x75\x21\x06\x94\x51\x6e\x9e\x28\x5b\xca\x17\xb1\x58\x46\xd4\x41\x3c\x2e\x9b\x49\xca\x1f\x83\x58\x08\x8c\x9e\x64\x99\x8c\x5a\x25\xab\x18\x3a\xe7\x16\x59\x51\xe5\x95\x99\x13\x95\xd3\x95\xf7\x00\x7e\x7d\x40\xdf\xa8\x45\xd8\xd7\x24\xa0\x99\x16\x90\x41\x12\x99\x80\xe3\xa1\x8d\x6d\x82\x4d\x1d\x02\x02\x3c\x58\x95\xa3\xaa\x16\xae\xdf\x30\x16\xbb\x6b\x10\xb9\x67\x87\x1d\xcc\xea\x05\x08\xb4\x65\xbc\x4e\xe6\xe5\x10\x85\x20\x17\xc5\x83\x90\xfb\x65\x6c\x20\x88\xbe\x03\xd9\x15\x6e\x65\x64\x45\xb4\x74\xc1\x18\x66\xfb\x55\xe4\xbc\x0c\x3f\xb8\xf7\x28\xea\x61\x19\xec\x8f\xb0\x82\xcc\x82\x47\x8e\x4d\x6f\xea\xec\x3b\xe5\x4e\x6e\x95\x2a\x52\x9b\x0a\x4b\xb4\x97\xb1\x29\x84\xaf\xcd\x8a\x05\xf3\x63\x9e\xad\x8c\xe8\xc4\xa0\x4c\x62\xb6\xe0\xb9\xe7\x7b\x26\xdb\x86\xc1\x08\xdb\xcb\x52\x2c\x92\x46\xe8\x35\x68\x43\x2e\xda\x1c\xe6\x08\x19\x6c\x4c\x0f\x97\x52\xd7\x1a\xd1\xe4\xfc\xfd\xc9\xd5\xc5\xf9\xd9\xe4\xfc\x86\xbd\x1f\x5f\x9d\x8c\xdf\x9c\x4e\x18\x26\x7a\xd2\x5b\x34\x59\xd5\xe9\x85\xe0\x5a\x3f\xbe\xba\x8a\xdb\xf3\xad\x92\x94\xe8\x79\xb5\x14\x71\xa0\xcf\x36\x12\x93\x64\x55\x2a\x12\xff\x1e\x12\x9e\xcc\xe2\xd0\xef\x2e\x37\xc5\xc4\x28\xa9\xb7\xf8\x30\xbb\xbf\x7b\x71\xf8\x63\x7b\xd2\x93\xf5\x3a\xff\xf5\x0a\x82\x62\xe1\x29\xd3\xab\x7c\x91\xbc\x2a\x2f\x64\x3e\x4c\xe3\xe8\x21\x98\x1d\xfc\x9e\xc5\x51\x37\x9d\x9c\xdd\xbd\x80\x78\xff\xfb\xf1\x03\xc4\xc5\x9b\x65\x77\x2f\x2c\x9a\xed\x4f\x2f\xb9\x5b\x6f\x38\x0d\xa2\xe2\xd3\xab\x33\x6f\x2a\x7f\xd6\x10\x34\x32\xc3\x2e\x96\xe8\x60\x5d\x6b\x81\x04\x42\x9e\x65\x60\x1e\x9d\x61\x02\x9c\x54\x8c\x7f\x0c\xee\x21\x33\xe0\x20\xb5\xbf\x0b\x12\xf1\x53\xc6\xca\x68\xa2\x82\x19\xa7\xf0\xb9\x7b\xf1\xf9\xee\xae\xc9\xea\x0e\x98\xdd\xd5\xd9\x89\x1f\x5f\xee\x5e\xac\x71\xbc\x8c\x9f\x78\x7a\x3d\xe7\x61\x48\x94\xcb\x8a\x1d\xc8\x57\x7c\xff\xfd\xf7\xff\x4f\xe3\x93\x19\x08\xdb\x7c\x7e\xbb\x3e\xfc\xed\x7b\x7d\x7d\xdf\x6b\xe8\x91\x27\xc3\x3f\x55\xd0\xfc\xfb\xea\xcf\x2c\x08\x1f\x85\xce\xdc\x3a\x09\xd9\x7f\x41\x1b\xfa\xea\x53\x2a\x16\x77\xc8\x84\xf2\xd5\x2c\x65\x58\x67\x51\xca\x61\x4d\x86\x36\xc1\x9a\x69\x7b\x62\xa7\xde\x20\x5b\xcd\xb7\x8c\xba\xd4\x7c\xfb\xb8\x7f\xf0\x8f\x6b\x3f\xa6\xe5\x26\xa4\x4a\x90\x26\x0f\x13\xaa\xb3\x43\x65\xf2\x9f\xa9\x1d\x7a\x96\x88\x59\xca\x60\x08\xd9\x93\x1a\x15\xf5\x4f\x37\x37\x97\xe0\xfb\xf7\x69\x59\x66\xde\x00\xb7\xac\x92\x4b\x17\x4a\xdb\xda\x54\x54\x7d\x2e\xb0\x5c\x48\x38\xe2\x1b\xec\xfa\x6a\x28\xb2\xbd\xe4\xa0\x5d\x5e\x39\x50\xa0\xa2\x13\x22\xaa\xf4\xd2\xf2\xa4\xae\x0b\x8b\xbe\x3c\x95\x73\xf3\xaa\x0b\xc2\xa2\x72\xfb\xfb\x32\x27\x1a\x2e\x08\xb7\x7c\x51\xb6\x45\x4e\x34\x69\x77\x77\x4d\xb6\x6d\x76\xce\x72\xf7\xbd\xb1\xa2\x8b\xbe\x05\x8e\xbb\x91\xbe\xf7\x15\xd9\x8e\xb9\xf7\x69\x95\x5d\x5f\x90\x3d\x07\x04\x42\xfb\x3c\xb2\x47\x2f\x0d\x70\xd6\x02\xdf\x6d\x4f\x5d\xd4\xb2\x27\x2f\x53\x01\x87\x73\x93\x6c\xb4\xea\xf6\xb8\xe0\xbc\x5a\x2e\x05\x32\xd9\x05\x6a\x47\x7a\x1c\x1d\xc5\x89\x7c\xa7\x65\x20\x84\x55\x6c\xbc\x20\xe4\x87\xfa\x98\x7a\xb6\xd5\x5c\x71\x28\x81\x6c\x72\x0e\x13\x6a\xba\xa2\xc9\x55\x80\x65\x8b\x3c\x0a\x84\x9a\xae\x68\x3a\xc2\x43\x77\x94\x76\xe6\xda\x62\x28\x77\x60\x95\xa9\xc1\x9d\x10\x11\xab\xdf\xea\x70\x21\xc7\x27\x01\x29\x9d\x8c\x2b\xce\x76\x8f\x0b\xbb\xb8\xe4\x7d\x48\x51\xf1\x56\x19\x78\x70\x68\xad\x46\x96\xe9\x22\xc2\xbe\xa6\x33\x1a\xb9\xaf\x75\x82\x63\xaa\x4a\xc4\xf3\x20\x93\x39\xd7\x6e\x11\x41\xc9\xa1\x7c\x44\x12\x85\xde\xe8\xa4\xfb\xa3\xf5\xc4\x4a\x21\xe0\x88\xad\x4c\xd5\x07\x36\xb7\x0b\xbf\xec\xb9\x96\xb8\xba\x2a\x3b\x62\xea\x3f\x34\x9d\x28\x39\xa2\xed\x4c\xa5\xd2\x55\xdc\x91\xef\xba\x92\xb6\x9a\x1e\xed\x4c\x9c\x7b\x52\x1b\x18\x75\x6f\xa0\x03\x60\x6b\xf3\x70\x20\xe3\xb3\x25\x42\xc4\x38\x53\x61\x57\xbc\x24\x09\x83\xa9\xb4\x8d\xc9\x0a\x31\xfc\x20\xe3\x52\x07\x34\xcb\xba\x8e\x88\xca\x49\x00\xf3\xbb\x4b\x93\x26\x69\x1f\x21\x64\x7e\x2b\xd4\xaf\x4b\x2f\x9f\x77\xb6\x9e\x2b\x31\x47\xcc\x98\xb1\x03\x52\xab\x58\xc2\x6a\x29\xef\xc8\x59\x89\x53\x5a\x85\x48\x19\xc1\x50\xc4\xfa\x2b\x5a\x51\x20\xa2\x13\xf4\x54\x4a\x62\xb0\xbc\xea\x00\xa2\x2b\x4c\xe4\x29\xba\x5f\x36\xf7\x70\xb3\xfa\x6f\xd7\x17\xe7\x1d\x4c\xb5\xa5\x89\x5c\x21\x57\x4a\x53\xbf\x34\x26\x39\xb1\xab\x44\xc4\x00\x29\x87\x2c\xc5\x6e\x2f\xea\xc8\x4f\x45\x3d\xb2\x64\xb9\x51\x9a\xca\x95\xa7\x90\xba\xc8\x7e\x47\x6d\xaa\x40\xe5\x9d\xc6\x70\xfc\x81\x2a\x40\x35\x46\xe0\xc8\x03\x72\x3b\x75\xc1\xb0\xab\x4b\x44\x04\xb7\xdd\x9b\xbb\x75\xeb\xd5\xc5\xbe\xba\x23\xae\x52\x2d\xb7\xc4\xb1\x59\xbc\x27\x5f\x6c\x66\x22\xf3\xb5\x3a\x43\x20\xb0\xed\x24\xb6\x95\xc9\x98\x22\x6f\xd1\x7f\x17\x4d\x27\x43\xc6\x89\xe3\x13\x97\x46\x9b\xef\xa6\x29\x4d\xe6\x9a\xc5\xe1\x63\xe5\xa7\x4d\x19\x3d\xdd\x15\x89\x58\xd0\xf8\xab\xff\x97\xa2\x93\x21\xe3\x84\x23\xa8\x35\xed\xcf\x32\xfd\x9a\x03\x05\x67\x74\x7d\x9b\x91\x4c\x87\x88\x14\x92\x9c\xe1\xa1\x62\x4c\x3f\x91\xb4\xac\x4b\x44\xf4\xcf\x20\x49\xd6\xbe\x4a\x07\x0e\x63\x0d\x22\xf7\xd6\xdd\x21\x18\x75\x4b\x8f\x43\x88\x57\x2a\x53\xfc\x7b\x19\x5e\xb9\x78\xe9\x0c\xad\xfa\x65\xd8\xc9\xcb\x38\xc3\xa8\x51\x7b\xe2\x7b\xe5\xf5\x9f\x4a\xb1\x04\xeb\x09\x51\x39\xe7\x33\x9e\x1e\x30\xf6\x16\x14\xc0\x18\x6e\x35\x97\x51\xee\x7d\x12\xaa\x49\x98\xec\x8b\xd9\x96\xb3\xdf\xa6\x0f\xa5\x1d\xc9\xea\xcb\x8f\xe6\xbf\x19\x6e\x11\xfe\x60\xf0\x69\xdf\xe5\x90\x9d\xc7\x32\x20\x29\xa6\x84\xef\x74\xf5\xb1\xab\x44\xc5\x00\xc1\x31\x7d\x30\x8c\x61\x4f\x9e\xec\xfa\x48\x52\x88\x3f\x65\xbf\xc7\xf7\x98\x43\x56\x14\x45\x9f\x8e\x3d\x18\x16\x10\x45\x2c\xd3\x47\xc1\x1d\x8a\x2c\x55\x0e\xbb\xf1\xdd\x6f\x2c\x7f\xe2\xd3\x42\x46\x8c\x4a\xbd\xa7\x55\xf8\xd1\x69\x2c\xba\x4f\x94\x8f\xf2\x65\xc2\xe1\x5e\x0b\x2f\x39\x57\xe3\xf6\x15\xd8\x53\x41\x38\x56\x15\x72\x55\x8f\x70\x68\xfa\x04\xc9\x12\x8c\x6a\xdd\x38\x76\x90\x56\x16\x9e\xdc\xdf\xc7\x0f\x10\x13\xe8\x95\x8c\x24\x9b\x78\x41\x9a\xa9\xfc\xd6\x2c\x9e\x62\x6a\x28\xbf\x9e\x5e\x98\x45\xdc\x4b\xc5\xd2\x0d\x5f\xf9\xe7\x45\x78\x1d\x89\xd9\x8c\xe7\xe2\x4b\x1b\x64\xdf\x39\x82\x5e\xad\x93\x35\xc0\x91\xc4\xd2\x55\xa5\xe3\xa9\x96\xcd\x8a\x22\xf4\x0e\xd9\x50\xec\xff\x05\x1b\xdd\xbf\x70\x19\xfc\x77\x1f\x67\xbf\x20\xc7\xeb\x57\x0c\xae\x71\x23\x3a\xd3\x97\x2f\x86\xb9\x77\x2b\x4c\x9c\x64\xbc\x4c\xc5\xa6\x3e\xcd\x97\x6b\x30\xee\xe3\x38\xe4\x9e\x21\x78\xbb\x13\x8d\x21\x11\x96\xfd\x36\xcb\x53\x31\x03\x1a\xd2\xf8\xf6\xa2\x35\x24\x62\x99\x53\x79\xf3\x43\x96\xc5\x29\xbd\x66\x28\x16\xd6\xf2\xbd\x1d\x9f\x9c\x4e\x8e\xb5\xd8\xd6\x5f\xdb\xd3\x9d\x8c\x6f\x6e\xaf\x26\xec\xed\xe9\xf8\x9d\xde\x77\x4a\x53\xca\x9e\x0b\x3a\xe5\xb1\x07\x9e\x4f\xe7\x0d\xed\x38\xb3\xbb\x3e\x26\xd7\x77\x46\x26\x6f\x6a\x32\xcb\x9d\x09\xb1\xb6\x33\x2a\xfe\x28\xd6\x48\x57\x50\xe6\xca\xce\x98\xe2\x74\x36\x92\x56\x7d\xa0\xfd\xa4\xb1\x34\x86\xb9\x48\x67\x57\xe2\xcf\x9b\x58\x39\x6f\xab\x08\x08\x4e\x5f\x79\x00\x0e\x7d\xa4\x73\x6d\x6f\x53\x55\x67\x3c\xd2\x55\xfb\xc0\xe2\xa8\x81\x50\xd3\x19\x0d\x5e\x2e\xb5\x7c\x1b\xbc\x6b\x1a\xec\xfb\x0f\xc4\xa5\x9f\x94\xf5\x19\xc6\xee\x42\xd3\x95\x0c\x15\xa7\x58\x74\x54\xf6\x77\x54\x92\x1f\xd4\x01\x13\x84\x8e\xff\x50\x3a\xfe\x9a\xcf\xbb\xdd\x09\xb9\x63\x2d\x95\xd8\x7d\x88\xd2\xac\x7c\xb2\xe1\xa8\x9f\x33\x1e\x3d\x06\x69\x1c\xe1\xf6\xb6\xb4\xaf\x33\x1c\x80\x0e\x48\xd9\x41\x1a\x75\x0f\x64\xbe\x3b\xe9\x2a\xee\xc0\x57\x86\x45\x88\x31\x7e\xa1\xfd\xe7\x35\xd6\xb2\x47\xa1\x6c\xba\xe1\x0e\x54\xfe\xf9\x36\xf4\x20\xbe\x9b\x8a\x94\xe4\xeb\x75\x27\x4a\xd5\xfe\x78\xa4\x41\xba\x0b\x9c\xcd\x9a\x54\x34\xfa\x6b\xad\xcd\x02\xf6\xb4\xe1\xde\x17\x2c\x4b\xe5\xc1\x48\x18\x4f\xbd\x30\x5c\xee\x8b\x6e\xf5\x51\xec\x9a\x41\x12\x34\x9f\x87\x52\xfc\x53\x80\x5e\x3f\xb9\x8a\x5f\x90\x78\xe2\x9b\x0b\x39\xe1\x65\x62\xbe\x02\xdf\x12\x17\x7b\x29\x63\xc8\x7a\xe1\xcb\x70\xd9\x2f\x7d\x19\x07\x24\x49\x63\x0c\xeb\x00\xe6\x83\xe0\xc2\x95\x2e\x10\xaf\x3e\x6e\x86\x23\x15\x17\x94\xb0\x8f\x7f\x0a\xf2\x39\x1c\x05\xd5\xc9\xda\x60\xeb\xae\x4b\x44\xb4\x08\x66\xa9\xe7\x0a\xc9\xb6\x32\x11\x93\xe8\xed\x72\xe6\x91\xf9\xb4\x4b\xda\xf2\x6b\x74\x40\xb2\xac\x6b\x8d\xe8\xdd\xe4\xe6\xe6\xe4\xfc\x1d\xbb\xbe\x19\x5f\xdd\x18\xb6\x52\xda\x72\xf6\x9c\x4e\x2f\xde\x8c\x4f\xd9\xc5\xe5\xcd\xc9\xc5\xb9\x21\x28\x84\xb6\x9c\x3d\x27\x65\x8b\x71\x31\xae\xe2\xd9\x9a\xac\xf2\xbb\x8a\x93\xf9\x62\x2a\x05\x69\xb6\xaf\xc2\x08\x89\x85\xee\x23\xcf\x85\x4e\x36\xe5\x36\x48\xec\x09\xd0\xb1\x25\x49\xb6\xad\x10\xf5\x5b\xe1\x41\x96\xb0\xb6\x0b\x3e\x38\x30\x18\x4b\x76\x96\x27\x73\x56\xfb\x5c\x43\x02\x4c\x5a\x3b\x3a\xd3\x23\x23\xe7\x35\xe7\x8d\x2a\x8e\x18\xfb\xbc\x83\xb4\x06\xcf\x80\x80\xde\x3a\x78\x54\xb0\x0d\x50\x16\xdd\x73\x37\xcc\xc9\x6d\x02\x2a\xcd\xf3\xf4\x94\x1d\x70\x26\xb7\x06\x18\x1f\xf6\x77\x0f\xeb\x49\xcd\x1d\xf5\x90\xb1\xf0\x87\x25\xde\x43\xa6\xae\x50\xdc\xce\xd9\x8f\xb7\xc9\x8a\x2c\xef\xb3\x24\x0d\xd9\x2d\x73\x97\x36\xc9\x76\xd6\x00\x43\x73\x22\x4b\xab\x73\x1c\xb6\x58\x5b\x6c\xaa\x92\xf1\x48\x0b\xe8\x6c\x95\x55\x0c\xac\x9f\xb3\x20\x8f\xd3\x40\xcc\xdb\x82\xba\xfe\xf0\xca\x85\x44\x3f\x7c\x15\xe1\x25\xd3\xdf\x54\x13\x6a\x92\xd1\xb4\xa6\x3e\xc0\x99\xc5\x65\xe5\x70\xa4\xe6\x86\x9a\xe6\x20\x4f\xa9\x4a\xc6\xa3\x42\xb6\xae\x13\x65\x76\xc3\xc0\xb2\x36\x1d\x55\x51\x6a\x2a\x98\x71\xaf\xb9\x0e\x32\x95\xb9\x40\x3e\x7c\x07\xcf\xce\xad\x1b\x71\x00\xca\x64\x69\x9a\x5c\x32\xba\x46\x60\x4f\xc0\x01\x9b\x4a\x60\x23\xfd\xea\x5d\xfa\x25\x85\x44\x5f\x7c\xf0\xe1\x56\xb9\x6b\xde\xe0\x5f\xb0\x34\x44\xcd\x00\x3b\x4a\x75\xa8\x7e\x3b\xaa\x93\xbb\x61\xbe\xc5\x36\xd9\x8c\x86\xf0\x35\x34\xd6\x56\x50\xed\xbc\x15\x9f\xa1\x89\x9e\x43\xfe\xed\x89\xb9\x6d\x69\x76\xd3\xc7\x9f\xbb\xcf\x3e\xf3\x10\xff\x6a\xc7\xf2\x36\x07\xed\x2e\x47\x67\x75\xb2\x9e\xb9\x6e\xb5\x5c\x48\x39\xe3\x95\x03\xdd\x75\x5b\x45\xa4\xe2\x8c\x12\x63\x07\x81\x76\xaf\x2e\xa4\x6c\x22\x6b\x39\xb7\xfb\xb0\xcc\x76\x23\xf3\xd6\xe4\x1b\x44\x96\xcd\xab\x9d\x2d\xe6\x15\xdc\x29\x6f\xf7\x16\xd9\x61\x03\x3c\xab\xbc\x2d\x69\x0f\xfb\xec\xfb\x9d\xe9\xf5\x41\xee\xb8\xcf\xb2\x26\xe0\x86\x2d\x6b\xcb\xb6\x68\xfc\x8e\x36\x33\x7a\x7f\xca\x74\x69\x72\x70\x37\x02\x6f\x86\x6b\xf8\x0b\x9c\x66\x1a\x5d\xb6\xd2\x43\x86\xbf\x62\xd9\x05\x6b\xb7\xf6\xc8\x76\xdb\x06\x5b\x60\x47\x96\x5b\x5a\x7a\xb6\xa7\x10\x7d\xa5\xbb\x7b\xa0\xa4\x01\xde\x1e\xa3\x41\x65\x75\x9c\xef\xfb\x90\xb4\xc6\x8f\x81\x9c\x31\x1e\x01\xe6\xd2\x99\x86\x85\x8f\x0b\x2a\x9c\xce\x29\xcb\x42\x76\x1f\xfb\x4b\x2d\x5a\x3a\x01\x1a\xb6\x05\xcf\xe7\xb1\xcf\x5e\xbe\x9b\xdc\xec\x5f\x5e\x5c\x8b\xff\xdc\xde\xec\x1f\x4f\x4e\x27\x37\x93\x7d\x9e\x4f\xf5\x76\x63\xc4\xda\xf6\xa8\xe2\x2c\x87\xd1\xa1\x67\xbc\x51\x80\x4c\x5b\x65\x89\x5a\x2c\x47\x59\x71\x2f\x8d\x29\x0c\x82\x5a\x55\xb2\xc6\x70\x72\x7e\x7d\x33\x3e\x3d\x9d\x1c\xb3\xcb\xd3\xdb\x77\x27\xe7\xec\xe8\xe2\xec\x6c\x7c\x7e\xac\xf7\x26\xb1\xa8\x61\xcf\x7d\x16\x81\x47\x6b\x23\x1e\x85\x9e\xb1\xb1\xb0\x3d\x4f\xd5\x6b\xab\xa0\x0b\x2a\x44\x49\xd9\x8d\x3b\x72\xca\x51\xab\x53\x70\xc5\x62\x80\x4f\x73\x76\x9b\x79\x33\x43\x33\xe8\xca\xb9\x72\x32\x29\x16\xa6\xa2\xce\xfc\xaa\xbc\x06\x61\x10\x71\xf6\x10\x7a\xb3\x4c\xf4\xe6\x4f\x53\x9e\xe4\x6c\xf4\xf0\x1d\x04\x95\x06\xab\x4f\xf0\xc9\x02\xdf\x44\xee\xb3\xa7\x39\x58\xa9\xca\x04\x72\x6c\x51\x84\x79\x90\x84\x5c\xda\x6f\xc9\xbb\xb7\x66\xaf\xd0\xcf\xb6\xcf\x09\xc5\xbd\xbd\xce\xe3\x95\xeb\xb8\x72\x0e\xf7\x21\x0d\x82\xbd\x98\xdd\x14\xdc\xd1\x5d\xd5\xdc\xd5\x4b\x26\x34\x74\xdd\x14\x86\x40\xa7\x08\x67\xae\xd8\xda\xeb\x3b\x20\x2b\xfd\x34\xc4\x06\xfe\x70\x15\xc7\x01\x9c\x0b\xc0\x86\x1b\x53\xde\xc9\x24\x36\x2a\x95\xcd\x7b\x2f\x0c\x7c\x55\x4b\x9a\x6f\x63\x3a\xc1\xc3\xbb\xe8\x17\x48\x85\xf1\x59\x66\xed\xb8\x7b\x91\xa4\x71\x1e\x4f\xe3\xf0\x4e\xb0\xbb\x7b\x91\x4f\x93\xbb\x17\xfb\xe5\x3b\x1f\x43\xa7\xa0\x98\xf2\xf5\xeb\xef\x0f\x7e\xf8\xf1\xc7\x83\xd7\x07\xaf\xff\x57\xad\x58\x12\xa7\x79\x26\x0b\xfc\xe5\x2f\xdf\xff\x0b\xe4\x0a\x11\xe2\xdc\x45\xbf\x5a\x34\xd8\x1f\x5b\x2c\x87\xef\x28\xfd\x45\xd1\xc4\xb9\xec\x1b\x16\xcd\x64\xac\x45\x40\x81\x89\x10\x71\xc9\x51\xb1\xdc\x7c\xfe\x20\x26\x31\xf4\x35\x2f\x03\xe0\x95\x1c\x0c\xb0\xdc\xc8\x50\x71\xae\xcc\x12\xa0\x4f\x5c\xe2\x5f\x32\x0a\x9f\x49\x37\xa6\x55\xa6\x61\x8a\xa6\xa6\x25\x76\xbd\x00\x99\x36\x3b\xe3\x8b\x38\xd5\x2b\xd2\xda\x72\x74\x4e\x8b\x22\xcb\x95\x03\x73\x1c\x8d\x22\x3e\x13\x4c\x1e\x79\x19\x39\xa4\x1b\x81\x6d\x7d\x02\xb2\x47\x1c\xda\x30\xf4\x5b\x63\x5b\x19\x30\x59\xd7\x24\xa3\xb9\x52\xfe\x87\xf0\xaf\x61\x97\xd9\x55\x9c\xcc\xf7\xfa\xfa\x94\x1d\xf1\x54\xba\xaf\x7c\x56\x39\x68\xd1\x9d\xf0\x26\x48\xce\x78\x06\xcb\x8c\x05\x1e\x2a\x19\x32\x4e\x19\x01\xc5\xe9\x73\xd9\x54\xa5\xe3\xa9\x2e\x50\x0e\xf5\x96\x58\xe6\xc2\x64\x9e\x32\xcd\x54\xa1\x9c\x69\xc4\xc2\xf3\x18\xf8\x2a\x95\xcb\x68\x8a\xea\xe1\x01\xbb\x0c\xb9\x27\x84\x54\x2f\xc5\xa8\xa9\x75\xd9\xf8\xfe\x77\x98\xe2\x31\xfe\x21\x02\x82\x5c\x2a\x01\x26\xaa\x89\x72\xb1\x43\x43\xaf\x83\xcd\x0a\xa6\x19\xf0\x6b\x01\x46\x6e\xcb\x55\xd8\x43\x38\xa0\x03\x33\x34\x79\xec\xb4\xc7\x46\xd5\x52\x03\x45\xaa\x74\xb7\xe8\x95\xd6\xd9\x12\x7d\xc9\xd2\xe5\x80\xac\xea\x78\x0e\x8c\xfa\x0c\x24\x59\x57\xe7\xd6\x54\xd7\xe2\x01\x28\x6e\x01\xfd\x20\x80\x7b\x61\xac\x8c\x51\xa7\x71\x11\xe5\xc8\xa2\x5c\x9c\x8e\xe0\x09\xb0\x39\x69\x94\xa9\xad\x59\x68\xdd\x68\xb7\xde\x6d\x95\xdb\x90\x52\x67\xbb\x15\xbb\x17\x3b\x77\xb9\x17\xa8\xf9\x88\x9d\xf7\x22\x90\x78\xa4\x2a\x74\x0a\xbf\x49\xdd\xb3\x07\x45\x67\xf4\x8d\x06\x6c\x34\xdd\x00\xdf\xa8\x1f\xf1\x2d\xca\x14\x62\x36\xa0\xb9\x4c\x05\xb4\x36\x6a\x06\x94\xce\x8e\x0d\x59\x4e\xdc\x6a\x56\xeb\x47\x27\x5e\x5d\x71\x32\xdf\xf2\x40\xe8\x80\xad\x82\x6e\x89\x87\xfa\x78\x7a\xf6\x15\xe9\x58\x5a\x86\x08\x7d\xc4\x11\xa9\x0c\x82\xd2\x69\x6a\xd8\xc1\x8c\xa0\x61\xe1\xae\x1e\xb8\x13\x24\x63\x87\x58\x88\xe8\x96\xed\xa5\xde\x02\x79\xdd\xc8\x27\xa4\x46\x26\x52\x21\xa3\x2c\x3a\xce\xc3\x5b\x4b\x91\xb9\xc8\xf0\x7d\x18\x99\xf3\xf3\x7a\x88\xb0\x3d\x69\xaa\x8e\x01\xce\xde\x7b\xa1\x65\x54\xd9\x01\x29\x5b\x4b\x83\xca\x7b\x00\xb7\x11\xc8\xbb\x8c\x2a\x69\xdb\x07\xa9\xd5\xad\x71\x9d\x7a\x62\x6a\xbf\x10\x82\x9b\xe3\x19\xe8\x8a\xd9\xf3\x81\x60\x74\x70\xa2\x55\x3a\x77\xc3\xc9\x56\x8e\x77\xa9\xf2\x6a\x58\xcf\xda\xbe\xa6\x03\x9a\x2a\xf7\x4e\xe9\x9c\x03\x51\x61\xe1\x85\x0f\xfb\xb8\xba\xdf\x90\x05\x40\x17\x62\x74\xcc\x2b\x87\xf3\x6e\x48\x6d\x65\xe9\x1c\x8d\xc9\x73\x35\xa5\xe8\x5c\x94\x1b\x8d\xfa\xc2\x53\x79\xab\xae\xec\x06\x94\xa7\x4a\xf9\xd0\x2a\x13\xf1\x70\x84\xe9\xb2\xac\xf9\xaa\x74\x63\xd4\x56\x70\xe1\xdd\xf4\x25\x74\x1c\x6e\x44\x32\x0e\x38\x2b\xa3\x28\x0f\xad\x2b\x2c\x20\x69\x6b\x38\x70\x97\xf6\x39\x2f\x3d\x65\xad\x14\x40\x50\xc9\x24\x95\xa1\x9a\xe5\x1d\x21\xcb\x96\x59\xce\x17\xfb\xca\xa0\x02\xcf\x62\x22\x48\x17\x02\xb3\x20\x98\xf8\xa8\xd7\x98\x8a\x17\x32\xee\xa6\x45\x84\xb3\x94\xde\x4a\x60\xd7\xec\xe9\xed\x82\x16\x23\x72\xc0\x94\xa9\x65\x55\xb3\xc7\x0f\x8e\xe3\xaf\x07\x49\x3a\xfe\xca\x5e\x47\xa5\x82\xed\x86\xa7\xaf\x41\xe4\xbe\x4a\x32\xf7\xf0\xc0\x31\xe6\x6a\x49\xb5\x66\x27\xdb\x81\x87\x48\xc3\x15\xa1\x9c\xfc\xca\x78\x74\xca\x9c\xd2\x16\x5a\x47\x65\x57\x4c\xa8\x28\x12\xa1\xb4\xd7\xa1\x21\xa8\x85\x49\xa9\x4d\x6f\x9d\x5d\xc7\xa2\x1a\x0d\x47\xe5\x0c\xee\x6d\xcc\xbd\x66\x24\x56\x15\x69\x58\xd6\x7d\x2d\x95\x90\x2a\x8e\xf3\xfa\x5b\x8c\x6d\x58\x44\xd1\x5a\xfa\x81\x8e\xaf\x38\x34\x8f\x61\x24\x94\x99\xe1\x11\x85\x8a\x11\xd2\x53\x1c\x2b\x82\x54\xec\x0d\x67\x9c\x4c\x9a\x2a\x76\xe2\xeb\xa8\xe4\x88\x61\xe5\x4f\x63\xc9\xbf\xad\x82\x1b\x6f\xe5\x20\x63\xc7\x77\xa3\x30\x89\x27\x7c\x42\x75\xed\x2d\x54\x79\x79\xd7\x9d\x99\xee\xc8\xed\x2a\xd9\x63\x88\x85\x92\x00\xfd\x69\x95\x49\x02\x02\x71\xa6\x18\xde\x47\x26\x9a\x31\x6d\x51\x68\xb5\x09\xa8\x54\xd6\xe1\xc0\xa0\x06\xb4\x95\xa1\x73\x88\x0d\xb6\x7f\xed\x85\x28\x3c\x66\xe2\xfb\x70\xd8\x4f\x67\xfa\xc0\x72\xba\x62\x24\x3e\x18\x36\xa3\xc8\x8d\x3d\x47\x53\x8c\xc4\x27\x05\x73\x01\x31\xdd\xf0\xc8\x4f\xe2\x00\xee\x0c\x02\x99\xf5\x0c\xaf\xe8\xe4\xb5\xa5\xd9\xac\xd3\x91\x0a\x01\x65\xfc\x11\x0d\xac\x13\x3c\x7e\x79\xa8\xf2\x3f\xee\x6d\x06\xc8\x68\xde\x28\x1a\x20\xf7\x27\x69\x8d\xff\x0c\xe2\x77\x7a\xa2\x11\x92\x65\x19\x4d\x51\x29\x44\xd3\xd8\x57\x97\xed\x71\xc4\xd7\xd3\x53\x78\x51\x2c\x06\x22\x24\x8e\xb9\x8d\xf0\x3c\x3d\x7e\x14\x3d\x2a\xf0\x7d\x1e\xed\xcb\xad\xa8\x20\x38\xaa\x28\x49\x43\x9f\xa7\x00\x83\x98\xc8\xd0\x8d\x98\xb1\xa6\x96\xac\x49\xdb\x1c\x5f\x21\x42\x6a\xeb\xc2\xa8\x1e\x55\xd7\xea\xeb\xda\x4d\x4d\x11\x84\x80\xc5\x28\xa2\x7e\x12\x1c\x82\x24\x01\x7f\xcd\xd8\x54\xc5\x52\x16\xdc\x0a\x5c\x7c\x1f\x8a\x30\x5c\x42\x98\x57\x03\x56\x5a\x75\x47\x5c\x41\x56\x8b\x4c\xbb\x76\x3e\xe2\x07\x60\x16\x27\xc6\xca\x3e\x4b\x9a\x16\x0c\x3c\x80\xfe\x81\x46\xa1\xa2\x4b\xa1\xd1\x3b\xe6\xf0\xec\xc8\x94\xbc\x4b\xd6\x84\xf6\x48\xd4\xfe\x34\x2e\x55\x7a\xcc\xe4\x35\x87\x0d\xb9\x21\xb5\x92\x75\x3d\x02\x92\x4f\x98\xf9\x08\x8f\xed\xab\xf8\x74\x55\xbf\xc4\x91\x55\x24\xfb\x98\xb2\x26\x88\x0a\xd3\x72\xdf\x87\x54\x0f\xbc\x2b\xe5\x42\x29\xbd\x8e\x60\x2d\xe9\x50\x90\x06\x8b\x62\xc1\xbc\x05\xde\x9e\x8b\xa9\x50\x5d\xe5\xc8\x6e\x54\xcd\x7d\xab\xab\x78\xf1\x62\xee\x3d\x96\xbe\x1c\xaf\xbf\xff\xe1\xc7\xb3\x7d\xf6\xfa\x9d\xf8\xff\xf7\xef\xf4\x87\x3b\x5b\xe3\xf3\x5c\x92\x1e\xb0\xd1\x6b\x58\x34\xc5\xbc\x8e\x41\x24\x45\xe1\x22\xc2\xfb\x2f\xb8\xf1\x44\x1e\xa6\xd5\xe7\x19\xb1\x7c\xcd\x2d\xc6\x5e\x1e\xcb\xb4\x5b\x87\xab\x77\x3b\xeb\x54\x03\x00\x24\xb7\x2d\x0e\xec\x97\x62\x08\x8b\x2d\x72\x1c\xf9\xd9\x77\x38\xca\x8f\x4e\x4f\x60\xc6\xc4\xa1\xbf\xb6\x31\x96\x33\xd4\x3e\x43\x3d\x44\x59\x2c\xb2\x0c\xe6\x7f\x75\xa5\x99\x89\x29\x7f\x89\x35\xf4\x96\xbc\x3b\xe6\x6e\xdf\x2a\xb5\x6b\x64\xf5\x8d\x7e\xf8\xeb\xbf\xc0\x27\x2a\xbf\x94\xa1\x33\x50\xea\x12\x10\xa1\x95\xaa\xba\xd3\xee\x32\x7c\xed\x28\x6d\xcf\x15\x83\xa3\xf3\x96\x7b\x86\x4a\x31\x6d\xc4\x56\x58\x69\xa6\x7a\x68\x03\x90\xb4\xc6\x7f\x3e\x3e\x9b\x68\x91\x34\x5f\x92\x68\xea\x37\xa0\x6b\x6f\xed\xa9\x9a\xfc\x24\xcf\xdd\x7c\x24\xcf\xf9\x13\xbb\xf4\xb2\xec\x29\x4e\x7d\x3d\xed\xd6\x42\x24\x1e\x46\x1f\xcf\xcd\x02\xf6\xb4\x63\x36\xbe\x3c\x59\x6d\x6c\x33\x2e\xe6\xbd\x5b\xa1\x69\xc2\xc6\x50\x6c\x7d\x83\xe8\x26\x48\x60\xe3\xa8\xac\x03\x44\x61\xf5\x00\xb4\x3c\x79\xd6\x2b\x7a\x50\x59\x5f\xbf\x0c\x6e\x8f\x11\x45\x56\x6f\x2a\x77\x77\x1e\x04\xa7\x67\xec\xe7\xb8\x90\x46\x5d\xbe\x4c\x14\x52\x1e\x0a\xc2\x80\x10\xfb\x38\x18\x1c\x78\x39\xb3\x11\x97\xa5\x1c\x3e\xe5\x3d\x8e\x8c\x00\x2a\x34\xf8\x1c\xdc\xef\xc4\xe8\x13\x12\xd6\x42\x04\x55\x45\x94\xeb\x1e\x68\xcc\x8d\x80\x19\xe2\xa5\xb1\xe9\xfe\x18\xb8\xb7\xf3\x25\x14\xd3\x4b\x21\x94\xe2\x8a\x93\xd6\x1f\xeb\xb3\x7c\x35\x42\x90\xbe\x51\x12\x68\x06\x6c\x69\xd3\x0e\xd9\x7f\x9a\x03\xd3\xd8\x5c\xbd\xe8\xd1\x90\xe3\x55\x89\xd8\x53\x9b\xf1\x6c\x96\xa2\x70\x59\x59\x95\x74\xf3\xd2\x97\xa5\x70\x9c\xce\xbd\x68\x26\xd6\xf1\x27\x8e\x9e\xe6\xbe\x61\x4d\x30\x16\xa6\xf0\x2c\x2f\xf8\x3a\x45\xd4\x14\xa4\xf0\x32\x44\xe9\x37\x71\xb6\xaa\x46\xc1\x21\x3d\xad\xb3\x84\x4f\xb1\x0a\x3a\x28\x6f\x34\xa7\x71\x6a\xa0\x52\xa0\xa0\x83\x10\x1c\x18\x17\x12\x2f\xa0\xe5\xe2\xc8\xfd\x7d\x38\xd2\xc3\xd1\xa4\x9c\xc6\x37\x16\xcf\x46\x3d\x13\xf8\x81\x19\x50\x65\xab\x62\xc1\xb7\x70\x7e\x2b\x03\x8f\xac\x10\x74\xc9\xe1\x48\x8c\x8a\x79\x08\xa8\x3b\x47\xa8\xff\x8c\xc6\xbe\xdd\x87\x1a\x11\xb5\xc5\xb4\xd3\x56\x8a\xc2\xa5\x32\xc9\xe9\xe0\xd3\x5e\x8e\xc4\x49\xdd\xdb\x37\x93\xb4\xe0\x21\xc5\x3d\xe7\xb0\x33\x37\x2e\x9f\xa4\xea\x2e\xb8\xd6\xaf\xee\x2d\xf1\x18\xab\x51\x70\xd8\x5a\x0b\x9a\x8a\xd2\xf8\x35\x03\x4c\x76\x76\x81\x8e\x0a\x2e\xbc\x21\xf7\x03\x29\xf3\x81\x0d\xbe\x1e\x44\x5d\x65\xf8\xdc\x9a\xbf\x02\x2e\x35\xb6\x22\xdd\xe0\xec\x5c\xe4\x5e\xd9\xa6\x59\xf7\x1c\x6d\x15\x07\xfe\xf6\x6c\xfb\x71\x1b\x64\x29\xde\xf6\x1a\x4c\x53\x55\xba\x55\xa0\x7e\xf4\xc8\xc8\x21\x86\x63\x16\xcc\x22\x6e\xfe\x9c\xba\xa2\x0e\xfc\xba\xfb\x4e\x6b\x39\x12\x27\x65\xf3\xe5\xb8\xde\x91\xaa\xbb\xe0\x5a\x4b\xf8\x60\x09\xc7\x54\x8b\x84\x02\xed\x96\x57\x57\xf0\xae\xad\xe4\x42\x86\x82\x13\x0d\x05\xca\xa8\x2b\x8e\x20\xe9\x34\x08\x08\x73\x16\x4a\x93\xa4\x20\x5a\x9d\x28\x1c\xbd\xc5\x43\xc5\xe6\x70\x15\xe5\xa0\x90\x01\x69\x0f\x5a\x14\xc4\xfc\x50\x5e\x91\xc3\x05\x4a\x8e\x09\x70\xe3\x85\xbc\x57\x31\x61\xb3\xa9\x65\x8f\xa2\x8a\xf3\x53\x5d\x0f\xe8\x79\x9b\xca\x5a\x73\xbc\xf8\x9b\x96\x41\xfd\x95\x3d\x3d\x99\xda\x54\x4f\x74\xfd\xbd\x3d\xe5\xab\x77\x6c\x7c\x7c\x76\xa2\x4f\xbe\xdd\x52\x82\x46\xfd\xf6\xf8\xe4\xe6\xe2\xca\x4c\x7f\xbd\x0c\x89\xc3\xd9\xf8\x7c\xfc\x6e\x62\xe6\xb0\x51\x86\xc2\xc1\xd0\xf0\x8d\x97\xf6\x34\x0d\xa6\xe6\x17\x4e\xf6\xe4\x17\xb0\x51\x45\xb7\x10\x19\x46\x24\xab\x9b\xa8\xd7\xae\x3a\x4d\x6c\x89\x04\x48\xd8\x1a\xe7\xb4\x5e\x98\x72\xcf\x5f\xaa\xec\xd7\x46\x48\x56\xf5\xdc\x91\x34\x63\x93\xc0\x09\x8a\xb2\x52\x92\xc7\xce\xc1\xbd\xc1\x5c\xb2\x1f\xb1\xa1\x30\xeb\xa7\x78\xfb\x8a\x14\x2c\xfa\xcb\xca\xe6\x4b\x0a\xcd\x6e\xcf\xa2\xf6\x42\xf6\x3c\xa4\x3d\x23\xaf\x62\xee\xf8\xd2\xdc\xa1\x34\x68\xad\xcc\xcf\xf4\x00\xe8\x14\xfa\xa3\x53\x51\x74\xfa\x83\xec\x24\x44\xc7\x5a\x4b\x2b\xbe\x66\xfc\x89\xb6\x7d\x72\xde\x10\xfa\x4f\x90\xc6\x11\x06\xbb\xf4\x1e\x72\x9e\xae\x5b\x92\x26\x90\x5d\xde\x30\x03\x6c\x97\x9b\xb5\xd4\x97\x5e\xe0\x37\x0c\x09\xf4\x90\x4d\x45\x09\xfc\xb2\x4c\x3a\xf1\x0b\xc0\x32\x1f\x08\xfa\x83\x83\x81\x2a\x5a\x86\x8a\x7d\x58\xed\x8c\xac\x92\xba\xd4\x35\xa5\xc2\x6e\xc0\x38\x2c\xf9\x41\xe5\xaa\xed\x85\xb6\x21\x17\x85\x3c\x49\x2e\xa3\x5d\x44\x0f\x9b\x88\xb2\x2a\x13\x63\x41\xd4\x50\xbd\xbe\x9a\xcb\x17\x5e\x3e\x9d\x77\xf2\xb5\xab\x4c\xc0\xa4\x42\x97\x25\xc9\x6a\x36\x41\xcf\x6a\x08\x67\xf6\xcf\x20\x91\x16\xbf\x6a\xb4\x82\x46\x81\xb7\x56\xab\xd1\x6b\x31\x99\x6d\x85\x07\x59\xc2\x06\xe7\x92\x69\x27\xe6\x8e\x5a\x64\x14\x9d\x96\xd6\xfa\x82\xf6\xbc\x78\x0a\x21\x63\x61\x88\x04\x30\x53\xb2\xe9\x9c\x4b\xaf\x21\x1f\x46\xd3\x02\xc2\x32\x3f\xcd\xb9\xb4\xc6\x96\x57\x04\xa5\xf9\x76\x58\xaa\x64\x20\xae\xe8\x57\x7a\x9d\x64\x3b\x4c\xec\x65\x04\x4b\x84\x35\x35\xad\xcc\x89\xa9\xb3\x4e\xd0\xcb\xd2\x8b\x18\x0d\xf3\x8a\x5e\xcd\xae\x62\x15\x12\xdb\x7c\xc2\xe5\x40\x61\x00\x74\x73\x0f\x1a\xa6\xc5\x32\x0f\xba\xa9\x34\xdb\x73\x40\x4c\xa2\x4a\x92\xe2\xb0\x95\xa1\x11\x62\x57\x15\x02\x7f\xf4\x79\x98\xce\xe3\x38\x5b\xb9\x3c\x84\x61\xfc\x04\x9d\x1d\x6c\x6c\xe0\xef\x03\xf6\x26\x16\xc3\x5c\xde\xb7\x7b\x29\xc7\x7e\x97\xc0\xa8\xc9\xc1\x96\x57\xb4\xc0\x3d\xa8\x7e\x59\xc6\x2b\xff\x8a\x0c\xfc\x25\x94\xc7\x8e\x61\x54\xee\x98\x3d\xb5\x5d\xfc\x38\xda\x33\xcc\x7d\xad\x85\xa8\x3c\xe4\x21\x17\xf3\x66\x9e\xc1\xb3\xd1\x58\x96\xca\xb1\xf4\x70\xc1\x86\xc2\x33\xf8\x27\xd1\xf2\xab\xa8\x04\xab\x34\x82\xb5\xd0\xa0\xc4\x5d\xfd\x36\x59\x11\xe4\xc5\xdd\x87\xd1\x28\xb5\xb5\x0c\x95\x03\x7a\x07\x55\x81\xa9\x5b\x77\xbd\x5d\x00\x48\x24\x06\xc1\x07\xee\x43\xea\x5c\x03\xad\xeb\x9c\x10\xea\x89\x50\x31\x82\x8b\x24\xf2\xf0\xd9\xdd\x8b\x86\xcb\xe4\xdd\x8b\xb5\x03\x98\xca\x57\x0b\x6e\x8c\x94\x59\x35\x56\x35\xcd\x34\xdb\x60\x42\x97\x11\xf3\xe3\x08\xee\x6a\x39\xb9\x0f\x22\x0f\x1c\x2c\x2a\x4f\x40\x58\xc7\x97\x62\xdf\xc8\x2e\xae\x0f\xf5\x3e\x7b\x7d\xc9\x51\x71\xaf\x7f\xf5\x86\x77\x60\x11\x05\xa5\xe3\x79\x67\xfb\x3b\x10\xea\x8b\xf5\x51\x3c\x78\x2f\x36\x65\x01\xa6\x41\x6d\x30\x74\xc7\x4d\x24\x6a\x2f\x43\x0a\x76\x9b\x60\xc5\x5d\xa6\x52\xf2\x03\x6f\x16\xc5\x59\x1e\x4c\x51\xd5\xc8\x72\xdf\xe4\x9e\x4e\xae\x4f\x44\x06\x31\xfe\x3c\x16\xe2\x29\xe3\x03\x6e\x2e\x64\x8c\xa4\xb5\x8d\xd2\xda\xbe\xc8\x2b\x8d\xf4\xa6\x1d\xbb\x98\x6d\xf0\x20\x4a\x08\x74\x1f\xe5\x97\xed\xc0\xd9\x5a\x92\xc0\x2d\x16\x03\x14\x1c\xc5\x17\x62\x89\x14\xab\x9e\x1f\x3f\x45\x61\xec\xc1\xfd\xa2\x1a\xc6\xb0\x4c\xf2\x45\x6d\x3b\x69\x9a\x11\x7a\x92\xa3\xe0\xc6\xd8\x85\x6d\x81\x0c\x57\x2e\xb6\xab\xb0\xa5\x37\x70\x9b\xf6\xc0\xbd\xbc\x48\x95\x27\xae\xd0\x62\xa2\x19\xf8\x39\x15\x09\x24\xe5\x00\xc3\x4d\xa5\x2d\x20\x78\x51\x2a\x97\xb6\xd8\x30\x93\x81\xa6\x63\x18\x9d\xcf\x0a\x86\xd2\x66\xa0\x05\xe9\xbd\x89\x36\x0b\xd8\xd3\x2e\xd2\x59\x3d\x39\xec\xfa\x06\xd0\x14\xfe\x81\x54\x97\x80\x28\x9b\x43\x26\x09\xfe\x84\x87\x21\x60\x2b\x04\xb9\x01\x4a\xcb\x5c\xf4\x84\x92\x6b\xac\x0a\xb0\x63\xc0\xe7\x4c\x89\x8a\x16\x42\x4d\xc8\x24\x4e\xec\x25\xa8\xa8\xc0\x0c\xfe\x95\x93\x51\xd9\x83\xbe\x3b\x34\xe4\x0d\xea\x41\xc9\x1a\x2d\xc6\x5c\x67\xc7\x70\xcb\x1f\xa0\xda\xfc\x59\xa5\x50\xa5\x5d\x70\xb9\x92\x21\xe2\x84\x0f\x84\x76\x34\xa5\x7b\x86\xf8\x92\x62\x85\x2c\x63\x0c\x80\x8d\x2b\x64\xda\x52\x11\xe7\xf0\xde\x3d\xc6\xf8\xa2\x70\xec\x5e\x84\xb9\x9c\xf7\x91\x02\x1e\x97\x8a\x69\xbe\xbc\x58\xc0\x38\x5c\x7a\xef\xc5\x9d\xf3\x1f\xb6\x65\xe4\x56\xe9\x39\xdb\x66\x58\x04\xc4\xd6\x59\xeb\x8d\x96\x1b\x29\x52\x5d\x6b\x44\x57\x93\x7f\xbf\x9d\x5c\xdf\xe8\x6f\x1f\x37\x0b\x10\x68\x5f\x5f\x5e\x9c\x5f\x1b\xfc\x30\x5b\x4a\xd8\x53\xbf\x38\x9d\x5c\x9b\x26\xac\xcd\x02\x04\xda\xb7\x37\x13\xbd\x75\xc2\xfa\x6b\x7b\xba\xdc\x03\x1d\xda\xe7\x70\x61\x26\x06\x68\x22\xa6\x7a\x88\x67\x8b\x76\xe1\xff\x2a\x17\xf9\x45\x62\x0a\x35\xef\x40\xc1\x11\x9d\x3a\x6e\x3d\x8b\xc5\xef\x9b\x65\x02\xbd\xad\xfc\x59\x4e\xa3\x42\x71\xe0\x42\x45\x5c\xe6\x98\x2a\x50\x8c\x95\x78\x1a\xe0\xf0\xc2\x85\x21\xc8\xff\xd5\x52\x8c\x61\x59\x6d\x4b\xde\xc1\xa4\xe9\x81\x55\x1d\xc5\xb6\x58\x23\x37\xc2\x57\x4b\x2f\xed\x44\x9d\xf6\x5e\x84\xfe\xe6\x81\xaf\x98\x16\xc1\x6b\x8e\x3f\x6d\xbc\xfa\x57\x48\x5f\xf7\x17\xfd\x36\xe6\x39\xa1\x50\xdb\x2b\x11\x2a\x20\xdf\x30\x9d\xde\xbc\x46\x40\x90\x47\x61\x5c\xf8\xec\x2d\xe8\xd5\xe9\xb2\xf3\x6b\x0f\x42\x9a\x20\xcf\x94\x07\x8f\x78\x02\xbc\xca\x96\x35\x15\xfb\x01\x79\xfb\xa8\x62\x50\x19\x30\xd3\xaa\x53\x70\x15\x62\x8f\xf8\xc8\x45\x8b\xa8\x2d\xc5\x2a\x76\x26\x8c\xda\xe9\x3c\x08\x7d\x95\x6c\x29\x6b\x69\x0c\xcc\x3f\x71\x0f\x3b\x92\x52\x8b\x5c\x78\x18\x7a\x4c\xed\xf0\xa5\x1e\xbc\xe6\x37\x61\x92\xf3\x59\xe1\x10\xda\x4d\x81\x4b\x56\x27\x77\x32\xa0\x9a\x41\xb6\xee\x2a\x74\xfe\x2a\x04\x2d\xe4\x82\x53\xd9\x5d\xc1\xd2\xb6\x1b\x44\x57\x3d\x3a\x92\x22\x55\x01\xc6\x15\xc1\xc8\xb8\x79\xb2\xad\x46\xc6\x81\xf1\xf1\x6b\x5e\xc6\xf2\xa8\x5e\x74\x81\x4e\x28\x16\x35\xc9\x68\xa2\x86\xad\x73\x27\x04\x5d\x71\x07\xbe\xb0\x7d\x20\x77\x8b\xae\x6a\x34\x1c\xeb\xa6\xfb\x30\xb9\xbe\xf7\xd2\xfa\xc4\xba\xee\xac\x5b\xcb\x2f\xbf\x32\xd0\xab\xe5\xcc\xc7\x6c\xf9\xa5\x52\x41\xcb\x63\xff\x35\x40\xa2\xb7\x5f\xda\xc8\xf2\x28\x11\x62\x84\xcf\xcf\x65\x06\x7e\xc9\x46\x93\x98\xbf\x86\x53\x3e\x46\xb4\x3d\x1a\xef\xb9\xf0\xec\xbc\xe5\x9e\xa9\x81\xb6\xd1\x0e\x85\x54\xf3\x30\x21\xe7\x50\x7d\x1c\xa0\x45\x9d\x47\x78\xcf\x03\xa2\x6f\x1b\x39\x48\xe4\xca\x1f\x6f\x2d\xbd\x55\x6c\x08\x03\x5f\x7d\x51\x3a\x3f\x6b\x75\xac\xa3\xbc\x3b\xe7\xce\x80\xee\x16\x35\x1c\xb8\x1b\x9d\xfe\x74\xc5\xc8\x7c\xba\x54\x9f\xd6\x52\x0e\x5c\x4c\xa1\xf9\x35\xa5\x68\x5c\xd4\xc1\x75\x73\x98\x56\xfb\xbd\x6d\xcf\x1d\xbb\x06\x40\x6f\x9b\x55\x80\x4e\xb9\x39\x7e\x53\xfe\x5e\x47\xba\xf6\xc2\x4a\xee\x41\x88\xd3\x65\xda\x68\xca\xf5\xe6\x76\xfa\x88\xfd\xa8\xd2\xa5\x68\xce\x58\xaa\x05\x2d\x59\x77\x4b\x33\x0c\x75\x77\xa9\x36\x4e\x29\xd6\xcf\x60\x76\xa0\x4d\x3f\x3f\x24\x87\xf6\x2b\xd9\xc0\x41\x56\x8d\xd3\x0a\x6b\xed\x61\x1b\x52\xe7\x56\xda\x36\x63\x42\x5b\x24\xb1\xd9\xe6\xac\xa5\x04\x9d\x3a\x1b\x31\x4c\x3a\x51\x26\x80\x43\x8d\xef\x77\x08\x8d\x86\x57\x35\x56\xe7\x25\xee\xa4\x48\x78\x65\x65\x83\xf5\x42\x7b\x21\x02\x0f\x70\xae\xb0\x50\x0b\xda\x8b\x11\xf9\xb4\xae\x98\xdb\x9c\x07\x76\xc1\x94\xd6\x06\x69\x6e\xd5\xd6\x2d\xc5\xa8\x7c\x40\xee\x7a\x88\x91\x55\xd2\x60\x95\x67\xa0\x72\xc7\x6a\xb4\x0c\x61\xc1\xd9\x0e\x1b\x82\x9c\x79\x1a\x70\x79\x34\x14\x44\x7e\xf0\x18\xf8\x85\x17\x56\x46\x2a\x60\xf4\x2c\xaf\x70\x04\xa0\xbc\xd0\x5f\xe9\x3b\xd3\x71\x41\x8a\xf9\xe0\x93\x10\x7c\xe4\xe7\x9c\x5d\x8c\xab\x3c\x3b\x95\x1f\x42\x95\xfa\x10\xfc\x4f\x0d\xa6\x54\xc3\x10\xed\x2f\xc3\x2c\x78\xe4\xd8\x55\xf7\x32\x36\x2b\x02\xff\x80\xb1\x31\x44\x7d\x44\xab\xcf\x39\xf7\x42\x01\x06\xc3\xae\x61\xeb\x81\x8d\x5a\x52\xac\xbc\x2e\x30\xe6\x7d\x86\x46\x44\x29\x07\x3b\x74\xd3\x70\xde\x39\x82\xa1\x5a\x47\xcc\x35\x6d\xd8\xd6\x90\xc0\x8c\x34\x4c\x5b\xf4\xe7\x37\x94\xe4\x4a\x05\xb3\x40\x53\xed\xa5\x07\x69\x81\xe1\xf8\x0e\xdc\x12\xa3\x8f\x7c\xf9\x5c\xad\x31\x10\xef\xc1\x5a\x04\x92\x6a\x56\x78\xf4\x70\xca\xdc\x9b\x43\x34\xc4\x10\x2c\xe9\xf2\x57\x26\xb9\xb5\x35\x25\xab\x2f\x2a\xf0\x92\x7b\x53\xe9\xaa\x33\x92\x06\xe8\xb2\x6c\xb7\xa4\x83\x10\xa7\xcb\xd4\xe6\xc2\xd9\xc3\xc1\x79\x30\xba\xc3\x48\xd2\xc3\xa5\x79\x30\xba\x54\x49\x70\x33\x57\x7d\x71\xb8\x33\x84\x0f\x0e\xf1\x82\xd4\xe7\xce\x88\xe7\x23\x83\x50\xed\x27\x85\xa0\xfb\x56\xb2\x79\x2b\xb8\x92\x4f\x78\x7a\x53\x74\x41\xef\xd6\x83\x5d\x25\xdb\x06\xb7\xa1\xa4\xee\xee\xed\x43\x4a\xdd\x97\x1b\x4d\x6a\x35\xc0\xd3\x22\xac\xa5\x4c\x96\xcb\x67\x33\xe2\xe8\xba\x45\x59\xe5\xd1\x67\x96\x73\x48\xfa\xf6\x92\x95\x37\x47\x3f\xc5\x59\xae\x8e\x6c\xc5\xaf\x63\x0c\x9e\x5d\x37\x0c\x35\x1b\x94\xba\x92\x19\x1e\x67\xb7\xf1\x6b\x1f\x52\x74\xbc\xf2\x8e\xd1\xd2\xd8\xdc\xb2\x16\x0d\x45\x07\x3b\x27\xba\xd0\x47\xf5\x64\x9b\x6f\x09\x54\xe5\x24\x36\xa9\x0d\xe7\xf7\xe5\x70\x7e\x87\x7d\xdf\x60\xfe\x4b\xaa\x6c\x8d\xe9\x7a\x72\x74\x7b\x75\x72\xf3\x33\x7b\x77\x75\x71\x7b\xa9\xe5\xae\x2b\x46\xe0\x73\xf5\xfe\xe4\x68\xd2\x11\xe7\x4d\x53\x8a\xca\x45\x6f\x8d\xbc\x59\xc0\x9e\xf6\xe5\xb8\x1b\x7f\x5b\x19\x2a\x87\x8e\x58\x75\x9a\x52\x44\x2e\xc7\x93\xf7\x93\xd3\x8b\x4b\x43\xc4\x3a\x6d\x39\x22\xa7\xae\xc8\x78\x9a\x52\x34\x2e\x86\x2f\xbe\xf6\xda\x9e\xee\xd4\x0b\x77\x7c\xbe\xbb\x0b\x96\xf6\xf2\x97\xab\x72\xd7\xcc\xa4\x2f\x48\xe7\x25\x95\x1a\x21\x40\xa9\x13\x7c\xc0\x27\xf6\x8b\x5f\x0f\x4a\x43\xa2\x15\xcf\x30\x63\xf3\x87\x45\x67\x66\xb3\x9e\xd4\x08\xa8\x43\x3e\xad\x82\x27\xb3\x97\x42\x01\xc3\x93\x00\xa1\x5d\x42\x98\x32\x70\x08\xfe\x18\x24\xdf\x99\xbe\x33\x95\x00\x19\x9b\xec\xe6\xee\xd0\xac\xeb\x13\x90\x61\x22\x3e\x6c\xfe\xfd\x72\xd3\x05\x89\x8c\x0f\xd9\x8f\xdf\xff\xe5\x90\x8d\x65\x6a\xa0\x20\x63\x3e\x8f\x02\xf0\x19\xc5\xbc\x44\x7e\x8c\x3d\x0c\xa3\xed\x26\x42\xf5\x0d\x42\xae\xdc\x14\xf9\x27\xf1\x75\xd1\xf3\x21\xc8\xba\xa3\xa2\xec\x9a\xfd\x10\xed\x22\x7a\xeb\x24\x4d\xaf\xf1\xd1\x91\x78\xf2\xe5\xcb\xbe\x2c\xd7\x78\x3f\x4e\x82\x09\x3c\x2c\x4b\x2c\x6a\x09\xfe\xc4\x8b\x86\x5f\x84\x4b\xf3\x6c\x13\x05\xa9\x95\xe0\xe0\x11\x2f\x30\x6e\xf0\x02\x43\x10\x3e\xf5\xee\x79\x28\x87\x75\xe9\xed\x4b\x08\xa9\x39\x08\x4d\xb2\x04\x6f\x2a\xe3\x8b\xd6\x1d\x44\x37\x5c\x7b\x02\x64\x6c\xe5\x0d\x5d\x19\xea\x14\x2d\x40\xcb\x08\xdd\x9d\xc0\x2c\x6b\x93\x51\x75\x66\x43\x20\x37\x61\x0f\x8a\xce\xe8\x0f\x37\x6c\x4d\xac\x61\x9a\xaa\x92\xf1\xe8\xb2\x50\xb4\xc4\x3e\xb3\x4e\x47\xd1\xdd\xe2\x5b\xe6\x4a\x6e\x85\xca\x73\xaa\x09\xe0\x2e\xba\x39\xb9\x3c\x64\x27\x0f\x10\xe0\x05\xc3\x62\xe5\xe9\x12\x0f\x95\x62\xe5\x7a\xe5\xb1\xc7\xd7\x1b\xfe\x57\xfb\x58\x1c\x53\xe8\x41\x1a\x38\x38\x66\x19\x25\x78\x18\xda\xdd\x32\xcf\x80\xc4\xbd\xb5\xaa\x94\xef\xf6\x62\xb5\x54\x21\xf3\xdf\xb0\xd2\xa2\x0e\x78\x7b\x02\x54\x6c\xf5\xb1\x69\xbf\xd4\xda\x55\xa4\x62\xd1\x1f\xb4\x6c\x16\x20\xd3\x36\xe9\x8c\x1b\x25\x08\xd4\xf3\x75\xff\x21\x79\xa2\x69\xb6\x84\xb1\xad\x46\xc2\x21\xea\x3f\x06\xfc\x69\x15\x26\x2d\x00\x37\x2f\x23\x86\xae\x2a\x6e\xfc\xe7\xab\x04\x2e\x8d\x54\x70\x76\x50\xba\x6b\x53\x50\xa9\x28\x20\x75\x07\x33\x34\xfe\x9b\xa8\x9f\x1d\xfb\x70\x32\x01\x32\xb6\x46\x1f\x80\x90\x35\x95\x63\x14\xa6\xbb\x50\x4f\xde\x7b\x61\xc1\x65\x00\x9b\xcd\x5c\x8b\xdb\x3c\x88\xf8\x3a\x51\x92\x5b\xf9\x1f\x6d\x71\x20\xf2\x58\x67\xf1\x69\x77\x69\x33\x2c\x71\xb2\x4c\x03\x5d\x25\xf6\x25\x47\xc6\xbd\x83\x4b\xc4\x6d\xb2\x1a\x44\xde\x81\xaf\x0f\xb7\xc9\xca\x5e\xde\x39\xa8\x79\x1e\x9e\x33\x80\x77\xbc\xcc\x4b\x2b\x6f\xee\x3a\xdc\x66\x28\x55\x49\x78\xa4\x62\x8a\xc4\xd6\x6f\xbe\x54\x1c\xa6\x3e\xe3\x7f\x70\x06\x04\xd9\xe2\xa7\x55\x5c\xa9\xe6\xbd\xa9\x01\xaf\x4d\x25\x22\x86\x30\x5c\x4b\x2c\x65\xa3\xfe\xd8\xd7\xa4\xa1\x99\xf3\xb0\x83\x6b\xb3\x04\x8d\x7a\x10\x41\xb8\x70\x69\xf2\x8b\x58\x95\x35\xd5\x4b\x6f\x65\x56\x05\x7d\x98\x8f\xc0\x89\x28\x97\x21\xe1\x65\x9e\xb0\x7d\x51\xb9\x8c\x9a\x04\x1d\x3a\xe1\xa9\x27\x67\x5d\xf5\x5a\x66\xbb\x11\xaf\xc4\xf4\x84\x09\xb2\xf5\xb1\x9a\x9e\x15\x0b\xad\xc5\xd0\x0e\x53\x20\x35\xcb\xb2\x59\x8a\xce\x05\x0e\x6b\x32\x76\xbf\x44\x4f\xe0\x6e\x76\x9a\xe2\x34\xbe\x18\x9f\xc5\xe7\xb9\x17\x84\xaa\xf3\x42\xbe\x87\x3c\x98\x16\xa1\x97\x6e\x6c\x6d\xcd\xa0\x5c\x69\xd1\x10\x4b\x4d\xa5\xfb\x8b\xb4\x95\xa3\x71\x4a\xf9\x14\x33\x9f\x08\x25\x50\x66\x09\x37\x33\x34\x14\xa7\xf1\xdd\x38\x7d\xe9\x16\xb6\xa3\x8a\x1b\x7f\x38\x30\xb2\x67\xbd\x59\x9a\xc8\x15\x95\x68\x0b\x7e\x2d\xe5\x5c\x38\xd9\xf6\x23\x7d\x69\x17\xae\x84\x31\x6e\xac\x40\xe2\x0d\x13\x63\xe5\x63\x30\xf5\x64\x92\x8f\x5d\xee\xc0\x9e\x03\x03\xb9\x85\x36\x7d\x11\x86\xd9\x02\xda\x2a\x62\xcf\x82\xc2\xbe\x95\xcc\xa7\x1f\xae\xa7\x1b\x08\x78\xa0\xe8\x9f\xfd\x88\xb9\x60\x36\x1c\xc8\xb5\x16\x22\xf2\xe8\x95\x7f\xd0\x85\x04\x11\xdf\x7a\x47\xa3\x7c\x26\xcb\xba\x34\x44\x1d\xdf\xc3\xed\x4b\x40\xf4\xed\x25\xea\x32\x90\xac\x43\x0c\x46\xd4\x43\x31\xa0\xa8\x20\x7e\x00\xf7\x03\xf8\x0a\x8e\xb2\x55\xac\x6e\xc8\xfa\x5c\x46\xc4\x95\xc5\xe1\x82\x5a\x85\x20\x85\xbc\x71\x6a\x22\x7c\x8a\x53\x8c\x31\x56\x85\xae\x36\xcc\x0f\xcf\x85\xc3\xbe\xa5\x50\x67\xcf\x31\x63\xef\xce\xf7\x13\xbb\xe4\x4d\x69\x91\x99\xb3\x8d\x24\xad\x32\x05\x53\xb7\x97\x6b\x7b\x21\x2a\x0f\xb1\x66\x41\x82\xe1\xb8\xc8\xef\x22\x75\x97\xd6\x92\x0a\x1d\x7a\xf2\x22\x4e\x79\x7d\x3b\xd8\x05\x6c\x08\xca\x44\x69\x8a\x68\x95\x0d\x61\x60\x71\x86\x21\x4d\x93\x87\xfb\xf2\xf2\x4b\xfe\x6d\xba\x2a\x33\x97\xa6\x71\xdd\xb5\x09\xe2\x2e\x78\xd2\x5a\xa0\x48\x4a\x43\xa5\x7d\x79\x3b\x1c\xb3\xa8\x00\xd7\x81\x18\xa2\x4f\xcb\x07\x65\xb4\x69\xe9\x69\xae\x8a\x9b\x85\x1c\x80\x2c\x45\x0e\x43\xa6\xb1\xb5\xb7\x24\xaa\x45\x56\x76\xb3\xdc\x68\x9b\x61\x28\x4a\xe0\x17\x27\xdd\xd3\x60\x4b\x19\x12\x87\x64\xe7\x3d\x7e\x07\x3c\xed\x5b\x60\x99\x41\x66\xaf\xe3\x14\x8e\x96\x6f\x4d\xf7\xb8\xda\x82\x14\x5e\x62\xe1\x1e\x29\x7b\x31\xdf\xb0\xae\x6a\x0b\x5a\xf3\x82\x09\xda\x10\x7f\x7c\xfd\x35\x91\xae\xf8\x7d\x0b\x93\xff\xd1\xdb\x0f\xe7\xe3\xb3\x89\xd2\xd7\x46\x70\x10\x30\x2a\x4d\xb9\x46\xa5\x07\xb5\xcc\x51\xf9\x51\x9e\x13\x54\xaf\xcb\x43\x99\xac\x96\x32\x09\x72\xb6\xe2\x8e\x5b\xaf\x99\xef\x9c\x3f\xa9\x65\xd8\x91\xca\x8f\xf1\x14\x88\x99\x0d\xd3\x80\x8b\x3d\xcc\x52\x1a\x82\xaa\x5c\x19\xe5\xc5\x58\x6d\x77\x93\x89\xf5\x35\x0f\xd0\x39\x6b\x89\x46\x3c\x2a\xf5\xb1\xc9\x4f\x79\xdb\xec\x68\x72\x9f\xc7\x6a\x9c\x96\x36\x05\xfb\x2b\xed\xe0\x41\x86\x80\xac\x69\x09\x90\xf6\x40\x6d\xf1\x3a\x4c\x16\x86\x25\x4e\x93\xe9\x56\xf1\x18\x27\x41\x93\x3c\xec\x55\x83\xa8\xe0\xd5\xc5\x99\xd8\xb7\xc2\x2d\x0f\xc7\xec\x4f\xa5\x01\x83\x59\xa6\xc1\x88\xbb\xc9\x74\xf4\xb6\xe2\xda\x98\x83\x11\x02\x17\xca\x9e\xe0\x87\xc9\xcb\x1a\x16\x09\x55\xf6\x17\x18\x4d\xfc\xe1\x41\x6c\xc4\xec\xa4\xdc\x02\x3b\x57\xb9\x55\x24\xa2\x35\x9d\xd5\x8b\x96\xec\x1e\x93\x16\xc1\xe8\xdf\x56\x23\x6c\x97\xb7\x63\x8b\x34\x7a\xdf\x16\xa4\x1e\x80\x3e\x4d\xb2\xd5\xdc\x70\x9b\xf8\x62\x59\xa8\x22\x08\x36\xa1\x14\xf8\x52\x1a\xe6\x77\x87\x28\x1d\x90\xb2\xbd\x34\x62\x5d\x42\xbb\xac\xda\xd5\x8d\xd0\x41\xac\xee\x7e\x49\x75\x09\x88\x6a\x16\x63\x75\x3d\xcd\xa4\x6a\xd8\xd4\xa1\x23\x68\x53\x0b\x6d\x50\x74\xd5\xb3\x47\x82\xa9\xab\xbd\x9c\x37\xcc\x5d\xea\xf1\xaa\x2a\x4b\x77\x2f\xaf\x45\x10\x09\x22\x9f\x7f\xc2\xc3\x73\x79\x13\x96\x07\x32\x49\x3d\xa4\xda\xaa\xee\xc6\x56\x19\xcd\x2b\x6a\x2b\xd7\x6c\x08\x1b\x87\x54\xf4\xd2\x7e\x4d\xd8\xec\x5b\x54\x10\xc0\x03\xb0\xcf\x65\xca\xc7\x09\x7a\xcf\xc0\x04\xd1\x7a\x06\x2b\xf4\x18\x9f\xcb\x80\x2b\x2a\xef\xc0\xea\x74\xd0\xd4\x17\xb6\xc5\x87\x24\x69\x9c\x02\x4d\x30\xbf\x99\x07\x53\xd9\x7a\xd5\x64\x21\x73\x2d\x63\x9e\x74\xd1\x65\xfd\x22\x6d\x86\x4c\xf5\x8a\x3c\x1e\x41\xf2\xf4\xa9\xf1\xe8\x66\x4b\x5c\x48\x52\xe2\x85\x7b\x2d\x53\xad\x87\xa7\x48\x41\x65\x89\x0b\x01\x74\xd2\x99\x41\xdf\x77\xa1\x31\x24\x42\x99\x7c\xcb\x60\x54\xe5\x44\xa3\x17\x42\x31\xb2\x07\x68\x45\x0b\x2a\xc3\xa2\x74\x6a\x49\x0b\x2a\x24\x94\x6b\xb1\xda\x1b\x9c\x60\x7d\x3f\x50\x67\x9b\x72\x67\x85\xe3\x65\x1e\x67\x39\x5c\x4b\xca\x59\x6e\x14\xb1\x9f\x2e\xae\x6f\x70\xdb\x29\xe0\x80\x4a\x30\x1a\x09\x39\xfc\x78\x31\x92\xc4\x85\x06\x30\xe3\x11\x4f\x57\x53\xa7\x7c\x8e\xb9\x2c\xe7\x62\x96\x4d\x30\x5b\xa1\x39\xbd\xe6\x57\x8d\x95\xd2\xe2\x60\x70\x88\x79\xe3\xab\x65\x68\x95\xbf\x1f\x57\x12\x10\x2b\x49\x8c\x2d\x41\xa7\xe1\x80\x30\x8f\xe1\x98\x40\xe8\xe2\x32\xd3\x1e\x2a\xe2\x2a\xfe\x57\x95\x8f\x3a\x5f\x26\xbc\xcc\x73\x0f\xcd\x6c\x83\xba\x27\x5d\xa2\x24\xd0\x12\x91\x72\xbc\x4c\x78\x0a\x87\xf0\xb5\x0c\x41\x4c\xac\xd5\xa0\xc0\x42\x58\xd9\xdb\x34\x14\xfa\xea\xa1\x3e\x32\x6c\x7f\x82\x04\xec\xe0\x51\x2b\xed\x3b\x21\x68\x1a\xd8\xa9\x8a\xed\xd0\x34\x8d\xb3\xac\x9a\x97\x44\x77\x3f\x86\x2c\x66\xf8\xfd\x73\x79\xe6\x91\xd6\xd2\xdb\xac\xa2\xd8\xc8\x8c\x73\xfb\xd8\x8b\xb1\x18\x1e\xff\xc0\x37\x80\x33\x47\xa5\xac\xac\x38\x16\x51\x0a\xd1\xcd\x60\xf9\x17\x3c\xc6\x72\x7f\xc2\xca\x8d\x0a\x7b\xf2\x22\x75\x38\x5d\xa5\x50\x6b\x37\x45\xfd\x57\x53\x5b\xfe\xd9\x04\xa4\x7d\xdb\xd2\x02\x0b\x1c\xaa\xa2\xbd\xbc\xcc\xf9\x5b\x5d\x0d\xc3\x30\xfe\xc8\x97\x99\x69\x40\xb9\x91\x21\xe2\xc4\xdd\x41\x39\xcd\x42\x6a\x77\xaf\x4c\xb4\x59\xed\x1d\xd0\xce\xaa\x0b\xa8\x03\x1d\x1a\x52\xfc\xec\x53\x0f\xe6\xf4\x32\x08\xa9\xbc\x49\x81\x93\xbc\x03\xa6\xfd\xc8\xd2\xb0\xa9\x7e\x08\xa3\xcf\x26\xb7\x3d\x46\xf6\xb2\xca\x3b\x54\xa9\xa0\x60\x0a\xe2\x9f\x6e\x6e\x2e\xab\x8c\x67\x7a\xe8\xb6\xf5\x08\x48\x12\x75\x02\xe0\xf9\xfe\x48\xee\x03\x46\x30\xef\xed\xc9\xf6\x98\x89\x9d\x82\xda\x24\xc0\x53\x03\x32\x47\x3a\xf6\x48\xa5\x8d\x81\xca\xf5\xa8\xce\x26\xd4\xc6\x46\x85\xdc\x93\x0e\xa0\x11\x17\x9d\x11\x0f\x2c\x66\xa9\xe7\xcb\x1a\x47\x6f\xf1\xa0\x11\x32\xc9\xe5\x0c\x56\xa7\x1c\x88\x9c\x05\xd1\x38\x09\x54\xda\xfd\x33\xef\xf7\x38\x95\x41\xae\x9a\xcf\x83\xa8\xf5\xf9\xa5\x97\x4f\xe7\x86\xcb\xb2\xaf\x1e\x2f\xa1\xe5\x73\x2f\x64\x67\x62\xce\x36\xc4\x7e\x6f\x2f\x44\xe4\xe1\x2d\xe2\x42\x26\xfe\x5d\x20\x21\xf6\x92\x1f\xcc\x0e\xd8\xeb\xef\x7f\xf8\xf1\x6c\x9f\xbd\x7e\x27\xfe\xff\xfd\x3b\xbd\x31\x8a\x1b\x91\xbe\x18\xcb\x50\x26\x60\xb4\x82\xb1\x32\x06\x01\x4d\xa5\x4a\x94\x22\x2a\x16\xf7\x10\xe0\xf5\x41\xad\xba\x1d\xf0\xf4\xc5\x9d\xf9\xae\x5b\x4e\xdb\x43\x30\xd4\xb4\x47\x93\x42\xe3\x5a\xce\xba\xa6\xb2\xd6\x1c\x6f\xc7\xe3\x95\x1b\xe8\x22\xc8\xc0\x93\x46\x26\x46\x98\xc6\xd1\x43\x30\xc3\xc3\x1b\x2d\x06\x62\x6d\x7b\x54\xd7\xe3\x77\x13\x3d\xd7\xe6\x5b\x1a\x55\xfd\x4d\xf0\xfa\x6b\x02\xdd\xc9\x55\x47\xf0\xb4\xb6\x22\x24\xfa\xfa\x20\x60\x6b\x6f\xed\xa9\x46\xe5\x3d\xac\xdc\xf5\xb7\x9e\xd6\x0a\x15\x56\x5e\x9c\x4d\xd2\xd4\xb0\xaa\xf4\xa2\xe5\x82\xb8\x80\x0d\x73\x8e\x29\x6b\xf5\xda\x61\x67\x79\x07\xce\x52\x6f\xdf\x57\x5b\xf7\xbd\xf2\xc0\x60\xcf\x3a\xfe\x41\x1f\x52\x0e\x78\xe3\x7b\x30\xf5\x2d\x8f\x52\xf1\xb8\x02\xd4\x34\x5e\x1d\xc2\xa2\xe3\x77\xf5\xcb\xea\x1b\xf7\xa0\x49\x91\x40\xa6\xed\xf7\x94\xaf\x85\x4a\x23\x6a\xbe\xc2\xb6\xac\x45\x46\xb1\xca\xbc\xd3\xea\x18\x8d\x5c\x7a\x9b\xfc\x6f\x97\x19\x41\xe6\xfb\x00\xee\x47\xd7\xbc\x29\x6d\x3f\x00\xa5\xf2\x30\x98\x64\x98\xdd\x5c\xae\xc1\xcd\x68\xbb\xd0\x2d\xdb\x8c\x32\xdc\xf0\xf7\x62\xb4\x13\x59\x6b\x29\x74\xb6\x2b\xab\x99\x91\x8b\xac\x6b\x0e\x6b\x36\xa9\x9f\x89\xb5\x89\xa8\x5a\xcd\xe6\xe4\xe0\xd3\x85\xb0\xd9\x9e\x21\xdf\xd7\x00\xc9\xa1\xfd\xb2\xee\xf8\x8f\x08\x5f\xd9\xa2\xae\x8d\x23\xc4\x53\x74\x27\x37\xda\x3a\xbf\x5d\x49\x5e\x8d\xaa\x1d\x49\xde\xcd\x6f\x8b\x92\x8b\x17\xa2\x67\x7a\x51\xf0\x4f\x14\xe7\xcb\x97\x57\x50\xb4\x91\xc5\x79\x2b\x2d\xe0\xc8\x97\xd0\x12\xfc\x53\xc2\xa7\x70\x74\x2c\x4f\xf2\xe1\x44\x32\x9e\xa2\x6f\x8d\x7f\x88\x3a\x30\x86\x65\x34\x0a\x45\x27\x41\xc0\x87\xd3\xa4\x8a\x4f\x5f\xde\xb1\x83\x7f\x9c\x72\x02\x92\x67\x42\xcc\x4b\x67\x05\x78\x99\x18\x50\xba\x12\xa2\x63\x85\x0f\xac\x38\x54\x86\x04\xe7\x16\x1a\x15\xad\x3a\x01\xd7\xc7\x28\x7e\x8a\x30\x8a\x9b\x81\x7b\x5b\x21\x27\x1e\x06\xbf\x20\x5d\x31\x02\x9f\x30\x06\x67\xa9\xba\xb5\x82\x34\x1f\x43\x55\x5e\x1a\x58\x99\xb4\x08\x5a\x75\x02\xae\xac\x25\x54\x95\xf9\x73\x77\xd6\xa0\x70\x77\x8f\xfd\x42\xab\x4c\xc4\x64\x08\xcf\x82\xf3\x5b\xaf\xf8\x2f\xdb\x60\x61\x2f\x9f\xb4\xe5\xb3\xc9\x62\x6e\x2a\x4a\xe7\x67\x19\x6c\xa6\xb3\xbc\x0b\x67\xa9\xb7\x79\x55\x16\x40\x1b\xee\xfa\x3a\xee\x08\x3a\x32\xb8\x77\x96\x77\xe7\xdc\x99\xc1\xdd\xa2\x06\x99\x7b\x54\xb3\xda\xe7\x59\x5c\xa4\xe5\x76\xbb\x13\x85\x45\x4d\x2a\x9a\x56\x67\x89\xd5\x6e\x06\x4f\x58\x1e\x21\x10\x1d\x4b\xbc\x20\x35\xcc\xc5\x3d\xc9\x11\x71\x4b\x2f\x40\xf5\xb7\x49\x9d\x31\x97\xa6\x71\xc5\xe9\x5d\x9a\x2e\xc1\xb1\x77\x00\x29\xad\xe0\x52\xea\x51\x10\xbf\x92\x0f\xfc\xa3\x23\xf1\x44\x5d\x30\x41\x6a\xd3\x14\xac\x6d\x78\x7a\x00\xf1\xc3\xd3\xca\xcb\x59\x79\x2e\x04\x19\xd6\x55\xfb\x9e\x66\x55\xc3\x44\xf9\x9c\x58\x1c\x5a\x6c\x47\x61\x2b\xb6\xcf\x90\x2e\x7b\x23\xfd\x3d\x21\x7f\x3e\x9d\x00\x1d\x5b\xeb\x09\x9f\x53\x83\xd3\x29\xd1\xd1\x5a\x6c\xb1\xec\x37\x6e\x83\x10\x75\x91\x61\x7d\xf5\x24\x9f\xc5\xf4\x20\xe5\x8e\xf7\x7e\x3d\xc6\xbc\x53\x2f\x71\xa3\xe6\x8e\xba\x25\x62\xf8\x06\x43\xc2\x48\xec\x49\xd6\x41\x8e\x96\x73\x78\xe7\xb6\x77\xa0\x45\x47\xdc\x08\xf1\xff\x2c\x47\x95\xcf\x87\x84\xd0\x5a\x61\xec\x55\xc7\xa9\x70\x49\x9d\xe1\xce\x06\x55\x94\x4b\x2f\x37\x59\xd0\x90\xea\x3a\x20\x72\x5f\xae\xc8\x14\x1c\xd0\xd5\xd7\x74\x3b\x34\xda\x1a\x6e\xdc\xff\x4f\x90\xbc\x15\x6d\xfe\x66\x99\xf3\x0c\xb2\x9a\x88\x47\xf0\xfb\x08\x0c\x55\x60\x7f\x1a\x98\xb2\xdb\xf5\xa0\x64\x8f\xd6\xe0\xd8\xee\xe6\xcb\x5e\xba\xf7\xd5\xfc\x38\x31\xae\x38\x66\x66\xc8\xa5\x83\x9f\x52\x20\x61\x24\x61\xac\x30\xf3\x2d\x5d\x6f\x82\x24\xec\x1e\x8b\x23\x3e\x82\x08\x2d\x62\xc3\x91\x65\x4f\x71\x8a\x96\x65\x61\x3c\x0b\x0c\xdb\x5d\xeb\x8a\x14\x2c\xb5\x09\x29\xf7\x0c\x4e\x1c\xa6\xa2\x34\x7e\xa2\x99\xa5\x3f\x9c\x9c\xaf\xec\xed\x04\x48\x95\x49\x98\x2c\xa2\x22\xe8\x8a\x91\xf8\x98\xc9\xbb\x52\x85\x55\xd2\x48\xb8\x59\x80\x40\x1b\xe6\x85\x66\x78\xac\x6a\x46\x37\x78\xb8\x59\xd7\x23\x22\xa9\x3c\x52\x30\xd3\x27\x9a\x86\x74\x60\x30\xd6\x20\x72\x97\x11\xb3\x3e\x63\x48\x15\xab\xd5\xc7\xae\x96\x35\x8a\xf7\x93\xab\xeb\x93\x8b\x73\x7d\x17\xda\x2c\x60\x4f\xdb\x0b\x03\x9f\xfd\xdb\xf5\xc5\x39\x8b\xef\x7f\x87\xe4\x6a\x2a\x22\x5e\x4d\xc5\x1c\xa9\x90\x69\x53\x65\xc9\x56\xa4\xd2\xe8\x3d\xf1\x52\x21\x55\x2e\x36\xe5\xfb\xab\xf9\x81\x07\x98\x97\x3e\x88\x46\x61\x10\x81\x1f\x20\x28\x35\x1e\x76\x85\x03\xf6\x16\x23\xdf\x96\x79\xdf\x95\x15\xbd\xa8\xa4\xa7\x9b\x71\x38\x30\x9e\xe2\xa5\x89\x7c\x5b\xa6\xba\x37\xc4\xcf\xd5\x7f\x9a\x3f\xbb\xb8\x84\xef\xae\x1c\xe0\xcf\x4d\x53\x88\xa6\x94\x3d\x17\x81\xef\x61\xc9\x2e\xd5\x82\xa5\xe7\xa3\x2b\x47\xe1\x94\x99\x7c\x52\x37\xde\x5b\x53\xfe\xfb\xf8\xea\xfc\xe4\xfc\x9d\x8c\xfe\x22\x97\x01\xe8\x2c\xa8\x18\x54\x2b\x31\x38\x5a\x54\x97\x7c\xb2\x27\xa0\xd7\x15\x9c\x62\xcd\x83\xd9\x3c\x5c\x82\xef\xd5\x54\xd4\xf1\x66\xdc\x47\x52\x3f\x37\x08\x2c\xbc\x25\xbb\xe7\x42\xf5\x90\x1e\x87\x60\x59\x06\x1d\x2b\x43\x85\x43\xbd\x4c\xf9\x14\xdc\x6a\xf1\x42\x11\xd9\x67\x73\x1e\x86\x82\x7e\x06\x1e\xc1\x10\x1e\x4d\x2b\xfe\x1f\x53\x08\xf2\x37\x62\xe8\x39\xa2\x42\x16\xc6\xe8\xf9\x22\x86\x52\x26\x43\x16\x4a\x33\x9e\xc6\x9e\x3f\xe5\x59\x12\x47\x6b\x4e\x9e\xeb\xc3\x4b\x26\x8c\x13\x9a\x56\x34\x13\x55\xaa\xa8\x3d\xd2\x0b\x0a\xae\x7c\x37\xac\x9d\xa5\x39\xf8\x3d\xe7\x91\x32\x6c\xf4\xf7\xc1\x45\x00\xf3\xbf\xc7\x69\x32\xc7\x33\x52\x68\x86\x0c\x5a\xe1\x28\x8c\x0b\x5f\xcc\x15\x45\xe4\xa7\xcb\xbd\x8c\x89\x2d\xa3\x77\xef\x65\x62\xfe\x18\x0b\xe2\x70\xa3\x19\x72\x7f\x56\xf9\xbf\x97\xdc\xd0\x3f\x06\x1b\x14\x3c\xb5\x7c\x79\x1b\xd5\xa0\x55\x8f\xe4\xb8\x89\x11\x35\xd9\xb2\x39\xa4\xdd\x40\x76\x00\x31\x6f\xbc\x3c\xe7\x8b\x24\xaf\x18\x2c\xd0\xe5\x41\x46\x88\xf1\xa6\x6d\xed\xf8\xbf\x2b\xbb\x91\x7a\xba\x49\xbc\xe1\x03\x5f\x18\x5f\xe8\x02\x69\xbc\x2c\x33\x58\xac\x7d\x83\x9a\x9f\x8f\x6a\x9b\x0d\xac\xa2\x25\x1e\xc0\x37\xa5\x95\x0b\x66\x14\x13\x7d\xab\xf4\xff\x81\xa8\x94\x6a\x56\x96\x8d\x5f\x06\x64\x1a\xc1\xd9\xd4\x48\x9e\x4d\xc5\x1b\x2f\x15\x1a\x94\x73\x91\x54\x0e\x69\x53\xf1\xdd\xa2\xc2\xe0\x26\xfa\xad\xeb\x7d\xeb\x7a\xbb\xea\x7a\xbd\xe7\xc3\x00\xbe\x7a\x0e\xdb\x02\x8c\x7f\xd8\xf8\x64\xff\x7b\xad\x75\x6a\xd1\xbd\xee\x79\xf9\x05\xc0\x79\x54\x08\x5e\x5e\xf6\x65\xad\x29\x11\x9b\x35\xbd\x50\x30\x84\x8c\xb5\xe8\x66\x9f\x06\x0b\x2f\x5d\xa2\xdf\xd5\x14\x3c\x90\x57\xae\xf5\x75\x90\xe8\x90\x96\x84\xe8\xcb\xb8\xf1\xd1\x30\xa0\x44\x00\x0d\xb5\xc0\x44\x38\xd0\x56\x8f\xaf\xd9\x75\x33\x01\x29\xdc\x3d\x49\x13\x03\x73\xc5\x1f\xb0\x24\x04\x91\xe7\x0b\x4f\x06\x08\xdc\x94\x07\x3b\xb8\xe0\x01\xd7\x5b\x88\x4e\x54\xc3\xbf\x0f\x18\xfb\xbb\x5c\xd3\x16\x82\x26\x2c\x72\x1f\xcb\xbe\xa6\x8a\x57\x66\x0f\x18\x14\xa7\x90\x36\x19\x3e\x58\xa9\xa8\x42\xab\xaf\x9f\xa4\x98\x1c\x81\x79\xbe\x8f\xe1\xb9\xc5\x47\x5a\x83\x70\xcf\x31\x56\xbc\x8c\x52\x7c\xc0\x2e\xe0\xd8\xd7\x34\x05\x2c\x82\x19\xb8\xd8\xfb\xfb\x25\xb3\x55\xf0\x39\x01\x56\x4a\x03\xee\x4b\xc6\xb1\x4c\x9f\xfb\xbe\x75\xb3\x6f\xdd\xac\x4f\x37\xb3\x9f\xe7\xbc\x14\x66\xe5\x43\x08\x2b\x24\x83\xd5\xcd\xf3\x3c\x69\x44\xac\x63\x32\x92\x0c\x5c\xb9\xd7\x8a\x64\x8d\x32\x99\x8a\x46\xa8\x9a\x17\x74\x5b\x7d\x9f\xdf\x01\x4b\xba\xfc\xd2\x34\x12\xd2\xcb\xc0\x97\x83\x80\x5b\xdd\x02\x98\xea\xd8\x23\x48\x03\xd1\xe9\x84\x90\x62\xbd\x8e\x7d\x0c\x01\xf9\xf6\xe4\x74\x82\xdd\x84\x7b\x3e\xee\x7b\x73\x5f\x2c\xc5\x7a\x3c\x74\x0a\xd6\xe8\xfe\x4f\x90\x88\x76\x9e\xce\x83\x47\xbe\x3a\x2f\x54\x3b\x7e\x2b\xdb\x2a\x3a\x01\x6b\x6c\xbf\x9c\xdd\x9e\xde\x9c\x5c\x8e\xaf\x6e\x5e\xbd\xbd\xb8\x3a\x1b\x1d\x8f\x6f\xc6\xec\xe8\xe2\xfc\x66\x72\x7e\xc3\x7e\x3a\x39\x3e\x9e\x9c\xff\xaa\xc5\x45\xab\x6c\x8f\xe9\xf2\xea\xe4\xfd\xf8\x66\xc2\x90\x5e\x27\x08\x73\x69\x7b\xae\x6d\xb9\xeb\x32\x03\xdf\xae\xf2\xf6\x9c\x67\x61\x7c\x2f\xe6\x3f\x15\x22\xe5\xd7\x4a\xb3\xfb\xa5\x34\xd4\xcd\x0e\x0e\x0e\x7e\x65\xbf\x94\xcf\xcb\x82\x7a\x6c\xfd\x29\x5a\xa3\x97\xfe\x85\x5a\x28\xeb\xaf\x89\x74\x71\xcd\x94\x73\x37\xa4\xa3\xa9\x1f\x40\x75\xd8\xc7\x91\xeb\x0f\x87\x6c\x7d\x03\xe5\x8e\x51\x4f\x89\x80\x36\x8f\x4d\xad\xd4\x78\x6b\x4f\x35\xd4\xdf\xa9\x35\xde\x51\x28\xc6\x4f\x5c\x7f\x3a\xb7\xf1\x9e\x40\xd9\x2a\xed\x49\xef\x0c\x27\x26\xcf\x28\x37\xbf\x27\xb8\xcf\x9e\xa6\x5e\x36\x37\xb5\x4b\x5b\x19\x0a\x07\x43\x8b\xb8\xc5\x82\x46\xeb\x9b\x32\x44\xd2\x83\x58\xd9\x4d\xe8\x4d\x65\xad\x39\xae\x02\xc8\x6a\x19\xb5\x15\xb1\xa7\x8f\x53\xc5\xe1\xca\x3a\x47\xcf\x46\x5f\xd2\x9e\x5b\xb9\x9e\xeb\xef\x5a\xda\x8a\xd8\xd3\x87\xfb\x75\x54\xcb\xe1\xee\xdd\xf0\x71\xf4\x05\xad\x79\x4d\x93\x42\x4b\xbe\xf1\xce\x9e\x62\xc7\x78\x70\x1f\x0b\x58\xd3\x34\x5d\x6f\x16\xb0\xa6\xed\xaf\xb2\xd7\x6b\xc9\xb7\x96\x21\x70\xc0\xbc\x8e\x06\xea\x6b\xef\xed\x29\x07\x59\xd7\xe4\xdc\x56\x84\x42\x5f\xaf\xfb\x36\x5f\x92\x68\xea\x87\xcf\xda\x5b\x7b\xaa\x96\xa6\x02\xfd\xad\x02\xa4\xb3\x87\x81\x41\xf3\x35\x91\xae\xc1\x7b\x69\xb3\x00\x81\xf6\x93\x09\xf1\x93\x0b\x5e\xe9\xb4\xa4\xef\x78\x1b\xef\x09\x94\x31\x00\x37\x9a\xdd\x5c\xa6\x70\x22\x93\x2f\x4b\xf3\x9b\x6c\x1e\x17\xa1\x5f\x1e\xea\x40\xa2\x16\x03\x00\x37\x32\xf6\x38\x1f\x4d\x2e\x7f\x6b\x6f\xad\xa9\xca\xa5\x96\xe5\x05\x6e\xc3\x41\xbf\x84\x0d\x65\x16\x87\x9c\xf1\xe9\x3c\x96\x2a\x69\x79\xa3\x26\x58\xa4\xcb\x9a\x97\xe3\xf1\x6a\xa2\x32\x2c\x85\xdb\x60\x61\x2f\x9f\xe0\x6d\xb4\x4b\xd9\x2c\x60\x4f\x3b\xe5\x78\xc2\x95\x78\x81\xbe\x63\xb6\x17\xb2\xe6\x01\xa1\x4c\xb5\xb4\x9b\x2f\xad\x69\x06\xd1\x34\x4e\x21\x72\x33\x2b\x32\x6f\xa6\x6f\x1a\x6d\x39\x02\x27\x65\x0d\xac\x82\x54\x85\xc1\x22\xd0\x8b\xd3\x51\x9a\xcc\x15\xb5\xaf\x32\xc4\xf7\x09\x84\xe3\x06\x63\x42\xa1\xdc\x67\x71\x74\x28\x23\xa1\x04\x79\xa3\x83\xed\xc3\x44\x9d\x7f\xc8\x56\x79\x8b\xa0\x88\x4c\x63\x64\xe8\xe1\xdb\x67\x48\x96\x5d\xbf\xfe\xf7\x89\x82\x55\xd5\xd5\xaf\x1b\x6d\x45\x08\xf4\x1f\xd1\x24\x26\x88\xe6\x62\x9b\x9b\xcb\x34\x89\x41\x54\xd9\x70\x19\xb8\xda\x56\x24\x63\x91\xfe\x58\x18\x46\x47\x4d\xf1\x47\x6f\x3f\x5c\xdf\x8c\xdf\x9d\x9c\xbf\xfb\x70\x73\x72\x36\xb9\xb8\xbd\x29\xe7\x2b\x63\x1f\xe9\x47\x6e\x30\xdc\x57\x37\xb7\x97\x03\xe2\xee\x22\x67\x8d\x3b\xf4\xee\xb9\x7e\x79\x5d\x7b\x4b\xa0\x0a\xe6\x4e\xe5\x35\x8b\x81\x7c\x7b\x31\x1a\x9f\x22\x91\xfb\x23\xfd\xe8\xd0\x15\xb3\xe7\x03\x73\xa2\x41\x0f\xda\x78\x4f\xa0\x2c\xa0\x61\x84\xdd\x2a\x13\x94\x72\xcc\x57\x87\x83\xfa\x29\x85\x52\x95\x8e\x07\xe3\xad\xfa\x60\xa4\xa3\x88\x42\x40\xd0\x2c\xc8\x4d\xd1\x25\x69\x95\xed\x31\xc5\x90\x24\x40\xcf\x75\xed\xb5\x35\xdd\x85\x39\x56\xe6\xfa\x6b\x22\x5d\x7d\x77\xdc\x78\x6f\x4d\xd9\xa8\x53\x39\xea\x53\x51\x1c\xb1\x7b\x2f\x0b\xa6\xd5\x8d\x9d\x9e\x83\xa1\x28\x85\x9f\x41\x86\xc6\x4b\x02\x4d\xb8\x04\x80\x09\xb3\x34\x95\x54\x87\x5a\xa2\x07\x1a\x75\x39\xfb\x8a\xd6\x58\x4c\x81\x10\xdc\xe2\x1c\xd4\xc3\xb3\x98\x48\xb7\x14\xa2\xf0\xd0\x7f\x77\xc7\xcc\x0c\x62\xcf\x69\x18\xb6\x6b\x6f\xad\xa9\x82\x4a\x5f\x9d\xcc\xe3\xb9\xbd\x96\x85\xa9\xa8\x3d\x3f\x51\x4f\xcf\xa1\xf1\x92\x44\xd3\x00\xbb\x07\xd2\xac\x9e\xff\xe3\x7e\xd9\xbc\xcf\xb0\xea\x48\x8e\x54\xec\x51\xc2\x42\x60\x04\xb0\x51\xc0\x9e\xb6\x34\xc9\xd6\x5f\xb8\x6c\x16\xb0\xa6\xfd\x0f\x73\x46\xfb\xf5\xd7\xd6\x74\x61\x69\x94\x31\x08\x9e\x30\xe9\x41\x2d\x78\xd0\x7d\x10\x81\x05\x4b\x90\x31\xb1\xc6\x79\x26\x05\xc4\x8d\x08\x09\xa3\x0a\x17\xae\xef\xb6\xed\x85\x08\x3c\xca\x89\x37\x33\x66\xd0\xd5\x96\x73\xe5\xa4\xff\xa6\xfa\x82\xf6\xbc\xcc\x71\x9b\x9d\xe3\x34\x2b\x5b\x44\x3d\xe1\xf5\xf7\xd6\x94\x2d\x83\xbf\xf4\x8e\xf9\xa2\xe6\x65\x03\x83\xb5\xf7\x54\xca\x36\x41\x64\x06\x89\x1d\x63\x1d\xb8\x65\x80\x78\x2d\xf6\xf1\xb8\x87\x88\xbf\x5d\xd2\xf8\xc8\xf5\x6a\x72\x6b\x19\x32\x07\xe3\x2a\xdb\x5e\x88\xca\x63\xd4\x61\xb2\xa0\x2b\x46\xe5\xd3\xf9\x49\x9c\xbe\x04\x66\x6d\xd1\x53\x5e\x7b\x6d\x4f\x37\x30\x76\xd8\xc0\xb1\x97\x1a\xdd\x6d\x5d\x7d\x67\x6b\x01\x03\x0c\x47\x61\x9a\x52\x34\x2e\x5d\xf4\xdd\x28\xe7\xc6\x5b\xe5\xf5\xd7\x14\xba\x98\xc7\xdf\x44\x79\xad\x00\x85\xb6\x61\x2d\x76\x5d\x81\xe5\xc9\xab\x91\x6c\xe1\x34\x4a\x20\xbf\xbb\x69\x98\xac\xbf\xa7\x52\x66\x1e\x7a\x02\xbc\x16\xdb\x44\x99\x86\xb1\x8b\x95\xa1\x82\x35\x6f\x70\xf8\xd6\xf2\x69\xbe\xb4\xa7\x89\xd9\x1a\xac\x2e\x08\x4c\x45\xad\xf9\x15\x2a\x2c\x23\x2c\xb4\x31\xe8\x0d\x5a\x76\x86\x92\x04\x6e\x5d\x27\x76\x2d\x25\xec\xa9\x6f\x46\x3e\xab\x4d\x3a\x7a\x96\x96\xd5\xec\x71\x18\x22\x2b\x14\x4e\x91\x15\x44\x2d\xfd\xa8\x6c\xbe\x24\xd1\xd4\x4f\x7a\x6b\x6f\xed\xa9\xc2\xdd\x98\x81\xec\xda\x6b\x02\x5d\x83\x86\xd0\x7c\x49\xa2\x59\xc5\x9f\x33\x12\x6f\x29\x65\xcd\xe5\xb1\xc3\xfb\x75\xe3\xbd\x35\xe5\x27\xb4\xce\x56\x91\x92\xe5\x95\x04\x7a\x26\xa0\x83\x12\xba\x31\x6b\x99\x52\xaa\x5a\xe3\x59\x1a\x54\xac\xa5\x93\x76\xf5\x59\xe6\xe1\x50\x76\xf9\x5f\xbe\xb0\x97\x18\xb6\x4e\xb6\xd8\xa1\x0c\xd9\x52\x66\x68\xba\xce\xc1\x14\xf4\xcb\x17\x7d\xae\xa0\x9e\xd4\x28\xa8\x8f\xde\x96\xa1\x80\x92\xc0\x84\xa7\xbd\x9c\x13\x27\x73\x98\x12\x43\x49\x12\xb7\x2a\x65\xff\x9c\x87\x09\xfb\xe5\xe8\xe2\xec\x6c\x7c\x7e\xac\xb7\xb9\xb6\xaa\x43\x43\x50\x44\xf9\xc5\x83\x72\xf5\xc9\x04\xd5\xd2\xc3\x45\x6f\x78\x64\x5b\x8d\x84\x43\x1a\xd4\x95\x51\x78\xba\xec\xef\x2c\x6a\x50\xb8\x1f\x07\xd9\xc7\x5b\x98\x4b\x21\x54\xe3\x03\x53\x4f\x54\xa8\x2e\x13\x08\xcb\x8a\x24\x2c\x42\x2b\x28\x85\x32\x1a\x3b\x19\xcb\x52\x38\x6e\xda\xc2\xa8\xac\xb7\x65\xc0\xa0\xa3\xb7\xe5\x87\x6e\x66\xe1\xc7\xe8\x41\x35\xdf\xdc\x4c\x26\x58\x95\xd9\x83\x57\xf1\x83\x8c\x3d\x69\x87\xcc\x89\x6d\x02\x48\x14\x96\xa2\xc4\xb2\x42\x00\x17\x29\x42\x55\x84\x83\x07\x48\xd8\x6a\x3e\x6c\xee\x4f\x90\x82\xfd\x6d\x28\xdd\xee\xaa\x90\x56\xd2\xef\xc9\x84\xae\xb3\x0a\x85\xff\x19\x5f\x34\xc7\x84\x78\x60\x31\x96\xac\xaa\x91\x70\xc4\x3e\x0f\x6f\x96\x09\x50\x2c\x7f\xb6\x26\x9f\x37\xa2\xa2\x13\xa1\x60\xbc\x28\xcd\x02\x14\x8b\x0e\x4b\x76\x8b\x1a\x7d\xb8\x43\x7a\xa7\x34\x9e\xa5\x26\x5f\x1b\xdb\x6a\x7d\x70\x64\xc5\x74\xca\xb9\x49\x8d\xb4\xab\x44\xc1\xd0\xb4\xab\x64\x8b\x22\x93\xce\xb6\x2c\x43\xdd\x05\x43\xf8\x16\x62\xba\x41\xed\xce\x84\xcb\x91\xd0\x90\x58\x7b\x63\x1c\x0e\x1b\xc1\xca\x95\x56\x99\x82\xa9\x1e\x1c\xf7\xa5\x9c\x59\xc4\x2e\xff\x14\xb6\xc6\x5f\xbe\x9c\x35\x36\xfd\xfb\x75\x33\xbb\x46\x39\xd6\x6a\x42\xb8\x5f\x45\xde\xca\xca\x72\x65\xea\xe8\x55\xcc\xcb\xea\x55\xb9\x56\xed\xb3\xfa\xa5\x2d\xc6\xb7\x3c\x8f\xa3\x37\x60\x74\x50\x56\x19\x4b\x53\xf7\x0e\x0d\xfc\xcf\x22\x19\xe5\x6b\x5e\xc9\x4b\x9f\x72\xad\x92\x8b\x05\xe6\xe5\x2c\x1f\xad\x3c\xb7\xbb\x2e\x90\xfa\x92\xa3\xe0\xbe\x56\xe7\x93\x25\xd9\xce\x03\x4d\xab\x3a\x43\x20\xc0\xae\x73\x2c\x7d\x37\x3a\x3a\x1c\x99\x04\x11\x5f\xbe\xb6\xa0\x1c\x54\x8a\x60\x8b\x1a\x18\xa7\xf5\x37\x4d\xfd\x70\x3a\xe7\xd3\x8f\xb5\x20\x08\xf2\xb4\xd5\xa8\x8b\xee\x94\x3d\xa5\x5d\x4a\xbd\x08\x34\x35\xd4\x0d\xc5\x46\x4b\x8e\x60\xf1\xf0\x53\x7d\x5c\x6f\x74\x59\x93\xbc\x83\x90\x6d\x95\xe3\x7f\xfc\xfa\xff\x07\x00\x00\xff\xff\x2f\xe7\xec\xda\x57\xf9\x02\x00") - -func cf_i18n_resources_en_us_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_en_us_all_json, - "cf/i18n/resources/en_US.all.json", - ) -} - -func cf_i18n_resources_en_us_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_en_us_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/en_US.all.json", size: 194903, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_es_es_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x4b\x97\x1b\x47\x72\x28\xbc\xbf\xbf\xa2\x2e\xef\x82\xd4\x77\x1a\x4d\x49\x33\xf6\xb9\x97\x3e\xdf\xf1\x07\x76\x83\x54\x7b\xfa\xe5\x7e\x70\xac\x2b\xea\x50\x09\x54\x36\x50\x62\xa1\xaa\x54\x8f\x6e\x81\x32\xfd\x5f\xbc\x9c\xc5\xac\xbc\xf3\x96\x7f\xec\x8b\x88\xcc\xac\x07\x50\x95\x95\x99\x55\x68\x72\x6c\xcd\x39\x23\xa2\x81\xcc\x88\xc8\xc8\x57\x64\x3c\x7f\xf8\x1f\x9e\xe7\xfd\x86\xff\x81\xff\x3d\x09\xfc\x27\x2f\xbc\x27\x6f\xa3\xb7\xd1\xcd\xc9\xe5\x8b\xb7\xd1\x93\x03\xf5\x4b\x9e\xb2\x28\x0b\x59\x1e\xc4\x51\x57\x93\x75\xec\x07\x77\x01\x47\x10\x77\x2c\xcc\x38\x7e\xff\xf1\xa0\x03\xfe\xf7\x71\x91\x7a\xff\x74\x7d\x71\xee\x65\x79\x1a\x44\x4b\x2f\xdb\x44\x39\xfb\xd5\x0b\x32\x2f\x88\xee\x59\x18\xf8\x87\x9e\x77\x99\xc6\x09\x4f\x6b\x3f\xe5\xab\x20\x7b\xe1\x79\x8b\x3b\x2f\xe3\xf9\x24\x2d\xa2\x08\xba\x4e\x78\x74\x1f\xa4\x71\xb4\xe6\x51\x3e\xb9\x67\x69\xc0\xe6\x21\x9f\x2c\xd3\xb8\x48\xbc\xa7\xbf\xbd\x7d\x12\xb1\x35\x7f\xfb\xe4\xc5\xdb\x27\x00\xb6\x80\x4f\x07\xbb\x5f\x7d\x7c\xaa\x1d\xe9\x97\x4b\xec\xa3\xf3\x3c\xcb\xd9\xf2\x6f\x86\xe7\xfb\x21\xd6\x82\xe7\xff\x8f\x77\xb3\xe2\x19\x07\x62\xd2\xfb\x60\xc1\xbd\x24\x84\x71\x7a\x2b\x76\xcf\x3d\x16\x79\x2c\xcb\xe2\x45\xc0\x72\xee\x7b\x8b\x38\xcb\x0f\xbd\xa3\x94\x03\x0f\x60\xac\xac\xec\x11\x44\x30\x88\x08\x3e\x3c\x04\x61\x08\x7f\x2d\x80\x2b\x38\x48\xd1\xa3\x93\x83\x84\xd8\xf3\x79\x14\x23\xf4\x16\xf4\x59\xc2\x17\x30\x8a\x05\xc1\xc9\xea\xa4\x3c\x04\xf9\x0a\x50\xf0\xf5\xa1\x77\x72\xd7\x46\x49\x7c\x27\x28\xc8\x37\x09\x47\x9e\x2f\x90\x6a\xee\x1f\x40\x5b\x04\x26\x28\x9d\x73\x41\x6c\xca\xfd\xc3\x56\xd6\xe5\x69\xa1\xe3\xdc\x34\x49\x60\xe2\x59\x0a\x80\xb5\xc7\xd0\x29\xf3\xb0\x29\x5f\x27\xfc\x43\xec\x78\x1a\x21\x80\xdf\x7e\x3b\x84\x7f\xce\x61\xda\x3f\x7e\xf4\x1e\x58\xa6\x90\x7b\x45\x86\x13\x22\x59\xbe\x5e\xb3\xc8\xf7\x7e\x82\xc6\x47\xe2\xf3\xc7\x8f\x3f\x69\xc9\x1b\x0f\xb4\xc5\x78\xce\x63\x8f\x25\x81\xc7\x23\x3f\x89\x83\x28\xc7\xad\xd0\xbd\x52\xfa\x9a\x5b\xe0\xbd\x8a\x8b\x9c\x7b\x79\x8c\x93\x5f\x44\x6b\x96\x24\x30\x48\x18\x1c\x2c\x42\x8f\x96\x42\x94\x87\x1b\x4f\x7e\x0f\xcd\x60\x91\x01\xe6\x24\x0c\x16\x44\x8d\x8e\xc6\xf1\x40\x5b\x8c\x07\x2f\x38\xcf\xbb\x85\xfd\xfb\x14\x0e\x94\x35\x4b\xdf\xf3\x1c\xb6\x10\x6c\x81\x49\xe6\x5d\xcf\xae\xde\x9c\x1c\xcd\x9e\x22\xb6\xfb\x80\x3f\xc0\x66\xcb\x16\x69\x90\x20\xba\x0c\xf7\x48\x10\xf9\xc1\x7d\xe0\x17\x2c\x94\xfb\x2e\xc6\xdd\xb4\x0c\xee\x79\xa4\xf6\x94\x6e\xc4\x8f\x89\xdc\x96\x27\xd3\x2c\x0b\x96\x91\x97\xc6\x21\xcf\xc4\x79\xf1\x14\xd7\xad\x98\x07\x20\x39\x85\x85\x8e\xe7\x6f\x9c\x2e\x27\xd8\xe8\xa9\x87\x6b\xbb\xbd\x4d\x96\xc0\x98\x44\xab\x3e\x6e\x4c\x11\x2b\x4b\x11\x2f\x6c\x98\x68\x6c\xa4\xb6\x5c\xa0\xb9\x41\xf0\xaf\x6e\x58\xba\xe4\x79\xb9\x6f\x69\x5a\x72\xfa\xce\x8b\x60\x72\x08\x5b\xdf\xe0\x5c\xa1\x39\x53\xdd\x05\x1f\xf8\xd7\x4f\x2b\xcc\xc2\x16\x90\x84\xa5\x78\x57\x84\x7c\xb1\x80\xc6\xf0\x7b\x11\x31\x2f\x2a\xf8\x3d\x6b\x42\xb4\xa5\xb7\x90\x3b\x20\x8c\xe1\x2a\xf7\x26\x70\xdc\x5f\x9e\x78\x93\x49\xf6\x3e\x48\x26\x59\x16\x4e\x48\x14\x20\x02\x9f\x02\x22\x6a\x8a\xa7\x99\xa6\x15\x0c\x37\x2b\x92\x24\xe5\x99\x90\x17\x3c\x9e\xa6\x71\xda\x37\xe6\x82\xc6\x6c\x4a\x88\x09\x1d\xc4\x31\x7e\x1f\x00\xef\x3d\x9e\xc1\xf1\xb6\x45\x87\x31\xa7\xe0\xd3\x4b\xb8\x73\xe1\x32\x39\x63\x11\x5b\x82\x40\x34\x11\xa2\x04\xa7\x2d\xb0\xa6\x2f\xe9\x48\x9c\x8b\x66\x1e\x5b\x2c\xe2\x02\x8e\x7a\xfc\x39\x61\x1b\x14\x8c\xe0\xc8\xb8\x8b\x35\x77\xd9\x7e\x90\xd8\x8c\xf1\xe8\xd5\xbb\xf3\xe9\xd9\xcc\x63\x05\x1c\x38\x28\xa0\xfd\x7f\xfc\x57\xb6\x4e\x42\x7e\x08\xb7\xa7\xf7\xf6\xc9\xdb\xb7\x6f\x9f\x24\x20\xc8\x3c\xc4\xa9\x8f\x9f\xdf\x3e\xf1\x9e\xc1\xb1\xc8\x40\x4a\xf9\xa5\x00\x39\x08\x04\xc7\x3b\x5c\x4e\x70\x71\x44\x9e\x6a\xf8\x95\x6e\xc0\x2e\x18\x67\x88\x11\x66\x14\x5a\x00\x1f\xe0\xb6\xf7\x49\xfc\xc3\xf5\xe3\xc3\x5f\x70\xfe\x86\xac\x0d\xfb\x98\x9c\x58\x6f\x4a\x0c\x48\x12\x6e\x21\xc9\x81\x3b\xd8\x22\xea\x27\x79\x74\x33\x71\xa2\x7c\xa5\x9f\x7b\x4b\x94\x74\x42\x94\x2c\xa0\x95\x5e\xa1\xc5\xb3\x9b\x23\xd2\x20\xce\xbe\x1a\xba\x1a\x16\x71\xb2\x99\x64\xf0\x58\x80\x9b\xf1\xfa\xe2\xf6\xea\x68\x36\x99\x5e\x5e\x7a\x37\xd3\xab\xd7\xb3\x1b\xfa\xf8\xc3\x24\x56\x7f\x5e\x5c\xbd\xfe\x11\xfe\xce\xd4\xdf\xd7\x97\xd3\xa3\x19\x7e\x33\x89\xe2\x09\x1c\x08\x28\x98\xfd\x68\xc6\x88\xfd\xe2\x75\xe1\x84\x38\x98\x9e\x01\xd3\x73\x5c\xe6\x29\xce\x92\xdc\x7c\x82\xf3\x78\xf2\x89\x46\x20\xe6\xf1\x94\x2d\x72\x90\x07\x40\x6c\x9a\x4c\x4a\x18\x24\xbb\x27\x69\xbc\x4e\x72\x5a\x2b\xf3\x38\x5f\x19\xae\x8c\x1a\xfa\x20\x05\xc1\x6c\x3d\x4f\xf1\x05\x02\xa4\x14\xf0\xe4\x8a\xbd\x8d\xb7\x08\xf1\xe5\x41\x8b\x01\x1a\x17\x9c\xa5\x19\xaf\x91\xc2\xf0\x84\xe0\x75\x6a\xe0\x8c\x5e\xc2\x09\xc2\xd2\x4f\xff\xee\x25\x40\x0d\x5b\xcf\xd9\xf0\x15\x23\x0f\x70\x38\x8f\x63\xef\xd9\xf6\xc0\x41\x68\x02\xa6\x79\x45\x1a\x22\xb7\xe2\x79\xce\xa0\x2d\x5c\x61\x11\x9f\xe4\xc1\x9a\xef\xf2\xd2\xe8\x00\x69\x45\x89\xd8\x38\x8a\xb3\x15\xd0\x5f\x0a\x3c\x2c\x60\xac\x3e\x0e\x99\xae\x1c\xbc\x46\xef\xf9\x07\x79\x5b\x84\x3b\x48\x07\x70\xa0\xd8\xdd\xc8\x93\xc4\xf9\x20\xb5\x59\x25\x56\xa8\x8d\x4e\x54\x5a\x5b\xed\x6c\xd1\xbe\x34\xcd\x49\xdb\xe3\xa1\x6a\x87\xb9\xe5\x6c\xa5\xd1\x8f\x7c\xb0\x6a\x89\x4a\xd8\xdf\xfd\xdd\x43\x7c\x75\xec\x3d\x13\x8a\x84\x4d\xc7\x89\x03\x04\x82\x64\x59\xe0\xce\xce\xc6\x60\x46\x85\x97\x2b\x0d\x06\x6b\x3d\x6b\x4a\x0a\xa0\x63\x5c\xd2\x30\x02\x5b\x92\x22\x5b\x81\x54\x77\x29\xfe\xfa\x61\x32\xf7\x5e\xde\x9e\x9c\x1e\xc3\x81\xfe\x27\xfa\x0a\x4f\xf5\x85\x77\x74\x71\x76\x36\x3d\x3f\xc6\x3f\x7c\xef\xf8\xe2\x6c\x7a\x72\x8e\x9f\xef\x3c\xf8\xf6\xe4\xd5\xec\xfa\xe6\xdd\xe5\xf4\xe6\x3b\xc3\xab\x46\xa1\x1c\x13\x9b\xc3\xfe\x20\x32\x06\x8d\xc1\x98\xa4\xde\xd9\xb8\xa0\xa7\x2e\x0b\xe1\xf6\xaa\x0e\xed\x30\xc8\x72\x7c\xe8\x92\x32\x65\xe2\xf3\x30\x80\xbb\x08\xf5\x01\x6c\x89\x92\x3e\xab\x54\x53\x0f\x69\x90\xe7\x70\x70\x48\x4d\xc1\x9b\xa3\xe9\xe5\x3b\xf9\xa6\xbe\xf6\x6a\xda\x42\x4f\x69\x0b\x69\x8f\xb3\x68\x03\x17\x62\x01\xeb\xbb\xa6\x5a\xc8\xba\x1f\xf1\x5f\x2c\x9d\x03\x39\x2d\x15\x08\x93\x9a\x0e\x31\xba\x0b\x96\x45\x4a\x88\xe8\x44\x5a\x73\xb8\xd5\x51\x53\x0b\xc3\xa5\x37\x8f\x50\xe5\xc6\xf3\x9f\xf9\x02\x5f\x01\x13\x78\x21\xf0\xc3\xb7\x51\x6d\x85\x14\x09\x3c\x8c\x00\xa8\x54\x37\xc2\xb2\x36\xd6\xcd\xa2\xbe\xb8\x8b\xd9\x77\x01\x70\x05\x08\xc4\x8b\x9c\xd4\xc8\x03\x89\x3f\xf4\x08\x17\xaa\x57\x13\x86\x9a\x52\x31\x35\xb5\x7e\x02\x23\x8b\x70\x02\x51\xcb\x3b\xcf\xe2\x10\xb5\x57\x30\x33\x29\xc7\xd5\x71\x5f\x75\x15\xf4\xf5\x31\x02\xb7\xca\xbb\x9b\x8b\x77\xaf\x4e\x4e\x67\x72\xac\x33\x71\x2e\xe2\x32\xda\x21\xf1\x05\xb5\xf8\x8d\xfe\x0b\xff\x7b\xfb\x64\x11\x16\xf0\xbe\x4c\xdf\x45\xb1\xcf\x33\x60\x5d\xf5\x9b\xf8\x19\x9f\x69\xf8\xf5\xdf\x1d\x34\xbe\x5f\xf3\x75\x9c\x6e\xde\xad\xe7\xf8\xdb\x37\x5f\x7f\xfb\x47\xf5\xeb\x47\xfa\xf0\xb1\xfb\xc9\x5c\x7c\xfd\xf5\xd7\xff\x67\xdf\x2b\x67\xb4\x85\xf3\x48\xeb\x66\xfc\x25\xb3\xa7\x15\xa3\x5f\x30\x1d\xeb\x45\xbf\x5c\xc4\x8a\xa8\x2f\x19\x8b\x0b\x68\x8f\x0b\xe9\x85\x64\x8e\xe2\xe4\x3c\x88\xfc\x92\x8f\xe5\x2d\x2f\x8f\xdc\x77\x27\xe7\xd7\x37\xd3\xf3\xa3\xd9\x7f\xe3\xc3\xc9\x9c\x41\x43\x0f\xad\x84\xa7\xeb\x20\xcb\xf0\xea\xc2\x05\xf5\xf6\x49\xca\x99\x3f\x89\xa3\x70\x03\xcf\x02\xfd\xf9\xf3\xfb\x9a\xf9\x6f\xba\x66\xf6\x7e\xd1\x7d\x99\xa7\x96\xb0\xc0\x96\x2c\x96\x9c\xf5\x2e\x4f\xa7\xe7\x7f\x43\xeb\x70\xfc\x65\x68\xc6\xa7\xbf\xad\x15\xf8\x59\x8f\xba\xdf\x17\xda\x7f\x9f\x85\x66\xf5\x48\x4c\x97\xd3\xc2\x0f\xf2\x18\xad\x42\x57\xea\x9e\x46\x0b\x10\x19\xd9\x62\x34\x01\x92\xed\x87\xb4\x43\x29\x4f\xe2\x34\xcf\xf4\x8a\x83\x06\xc8\x29\x02\x8a\x49\xf1\x17\x87\xb1\x17\x02\x43\x60\xba\x81\xf9\x08\x33\x5d\xb3\x45\xf0\xe9\x3f\x22\x6f\x23\x21\x73\x52\x11\xa2\xe2\x14\xd0\x3a\x6b\x18\xd2\x9a\xa1\xeb\x04\x9e\xda\x4d\x43\x17\xaa\xbb\xb2\x03\x61\xf0\x14\x26\xae\xc5\x8a\x45\x4b\xe9\x63\x73\x40\xdf\x64\x3c\x47\x3f\x9b\xc8\xc7\x55\x4b\x8f\xfc\xfe\x31\x6f\xe1\x64\x1e\x7a\x35\x44\xfc\x67\xa6\x74\x5b\x0a\x29\x59\x59\x51\xa9\xce\xd6\xf3\x80\x11\x5a\x0e\xbf\x01\xd3\x7f\x86\x85\x81\x1a\xf6\xcc\x0b\x3f\xfd\x15\x35\x0b\xc4\x8e\x25\xcb\x72\x67\xd3\xdb\x25\xae\xf6\x6c\x15\x17\xa1\x4f\x9b\xc2\xfb\x10\x24\xb4\xf0\x0f\x2a\x5d\x79\xfd\x4b\x54\x42\x00\x05\x0b\x16\x7a\x7e\x90\x02\x87\x60\xcd\x1d\x7a\x97\x71\x16\xd0\x16\x0d\x32\xf8\x39\xa1\xbf\xee\x85\x05\x00\x86\x8c\xe3\xca\x33\xd8\xf7\x41\x9c\x06\xf9\x46\xb0\x10\x5a\x66\x31\x39\xcb\xdc\xa5\xf1\x1a\x40\x3e\xf0\x2c\x47\x6c\xab\x60\xb9\xe2\x3a\x0f\x28\xf8\xea\x94\x79\x69\x01\xac\xf0\xf9\x5c\x6a\x8c\x61\x33\xa7\x8b\x55\x70\x1f\x23\xad\x07\xb4\x44\x90\x7a\xb6\xf3\x4b\x8c\x67\x87\x22\x3d\x88\xc5\x58\x0e\x11\x22\x92\x8d\xbc\xf7\x80\xad\xd0\x0b\x4d\x16\x69\x4c\xb4\x73\x26\x89\xf7\x99\x8f\x13\x01\x0d\xe2\xd4\xe7\x11\xf3\x69\xe5\xae\x79\x44\x6c\x59\xb3\x4d\x9c\x3a\xf8\x44\xe1\x34\xa0\x12\x6d\x5d\x84\x79\x80\xc7\x04\x4b\x92\x52\xdb\x0c\x6b\x24\xb8\x03\x7e\xe8\x7c\x36\xed\x01\xd8\x2c\x91\x6b\xd4\x77\x57\x3b\xf6\x0d\x7a\xa5\x84\xf1\x12\x96\xa4\xdc\xee\xe5\x9e\x40\x0f\x37\x60\x4d\x24\x8c\xef\xa4\x27\xd7\x53\xbd\x05\x1a\x8f\xc9\x20\x62\x0d\xe8\xb5\xa5\xcf\xc9\x24\x40\x06\xf5\x1d\xd8\xd6\x03\x3a\xe6\xf7\x3c\x24\x1f\xc3\x36\x6b\x37\x31\x50\x8c\x8a\x0e\xfa\x72\x8c\x9c\x88\x33\x3f\xec\x5a\x71\x55\x5b\x9f\xf0\x6c\x24\x16\x3a\x02\x60\x75\xd5\xb8\x50\x3b\xf9\x06\x8d\xd6\xe0\xc0\xc3\x6f\x60\x49\x93\xaa\x11\xd8\x51\xa4\xd2\xfe\x51\x3a\x17\x19\x4e\x67\xfb\x39\xd7\x38\xe6\x36\xde\x8a\xcd\x83\x10\x7f\xbc\x2b\x22\x3a\xef\xd0\x79\x02\xae\x3b\x61\xf4\x28\x24\x36\x0f\xbe\x73\x3e\xd9\x48\x0c\x10\xa2\x86\x2f\x2e\x75\x87\x87\xce\x49\xae\x0e\x47\xe1\xda\xe9\xa1\x63\x1f\x6e\xb0\x34\x65\x1b\xb1\xc3\x6a\x57\x39\xca\x25\x19\x8a\x36\xc2\x69\x6b\x2e\x9c\x00\x39\x9c\x55\x21\xd7\x6b\x93\xbf\x60\x62\x1f\x93\xe7\x02\x02\x49\x69\xb5\x91\xd0\xe0\x06\x8d\x46\xc0\xa5\xe6\x2f\x59\xc6\xbd\x0b\x29\x0b\x67\xe2\x85\x8c\x96\x6d\xbc\x89\x70\x0b\x90\x78\x83\x3d\xb3\x5f\x60\xb9\x72\x6f\x9e\xb2\xc5\x7b\xbc\xbe\xf0\xc7\xba\x5f\xef\x2a\x00\xf2\xa4\x50\x8d\x0d\x53\xfe\x4b\x01\xd7\x0a\x99\x4e\x73\x39\x0a\x40\x2c\x25\xc0\x37\x24\xf6\xfd\x9c\xc1\xe1\x48\xc3\x93\xd6\x2f\x21\xfc\xfd\x20\x45\xb5\x4a\xd0\x7b\xfb\x04\xd8\x98\xc7\x8b\x38\x14\x1a\x92\x7c\x91\xa0\x7c\x5d\xfd\x0c\xc3\x84\xd3\x96\x96\x90\x68\xf1\xcd\xd7\x87\xdf\xfe\xf1\x8f\x87\xdf\x1c\x7e\xf3\xbf\x9b\x2d\xc5\x21\x45\x6d\xfe\xf0\x87\xaf\xff\x5e\xaa\x58\x94\x58\xf8\xe3\x3e\x57\xe5\xef\xd3\xf9\x19\xa7\xd3\x66\xdf\xd2\x9d\x0e\x8f\xb3\xf8\x81\xce\x7f\xb4\x7e\x33\xe5\xff\xa9\x5e\x3e\xe2\xcb\x6e\x57\x4e\xf8\xea\xac\x80\x61\xa0\xd1\x5a\xf4\x27\x3d\x5f\x1e\xa0\x29\x9f\x9c\x3a\x3b\x21\xd9\x90\xfa\xc3\x24\xf0\xce\x6f\xcf\xca\x17\xd7\x35\xda\x43\xdf\x7b\xc7\x27\xd7\x7f\xc2\x4f\x6b\xef\x6c\x76\x76\x71\xf5\x3d\x7e\x8e\xbc\xef\x2e\xae\x6f\xf0\x53\x42\x8f\x32\xe1\xa8\x03\xdd\x8e\xa8\x69\xee\xdd\x9c\x9c\xcd\x2e\x6e\x6f\x7a\x0c\x9d\x12\xe3\xec\xea\xe2\xdd\x71\xf9\xd2\x3b\x99\x56\x88\x8f\x2e\x6a\x98\x4f\xa6\xdb\xa8\xaf\x6e\x6f\xa6\x46\xa8\xcd\xd9\xc0\x7c\xdc\x91\xc0\x57\xcd\x74\xb4\xb5\x31\xc7\xe0\xc7\x5c\xf8\x60\xf3\x5f\xd1\xa6\x89\xd6\x7e\x92\x44\xba\xf1\xf5\xf7\x30\xc7\x8e\xcf\x88\x10\xb5\xc2\x1b\xe5\x52\xdf\x8d\xf7\x7b\x06\xa7\x0a\x5a\x5c\x79\xf4\x01\xc4\x85\xc1\xe8\x62\xf4\x34\xef\x46\xb7\x21\x74\x28\xa6\x38\xe3\xe2\xeb\x24\xdf\x74\x63\x40\xa7\x31\xef\x1e\x5d\x3d\x1c\xe1\xe3\x24\x28\xed\x08\x3c\x82\x0e\xe0\x09\xc9\xf1\x98\x6c\x38\x41\x1d\x78\xfc\x70\x79\xe8\xad\xf2\x3c\x79\xf1\xfc\xf9\x26\x2e\xd2\x77\x38\x5b\xe8\x8e\xd1\x4d\xda\xa8\xc0\xed\xc7\x74\xcf\x82\x90\x0e\x28\x38\x93\x11\x9e\x6e\xf9\x9b\xf4\xb1\xa6\x00\x64\xe2\x24\xa6\x57\x3f\xbc\x79\xc5\xb8\xd7\xec\x3d\x5c\x2e\x20\x2d\x7b\x41\x2e\x9e\xbf\x82\x37\x49\x58\x2c\x25\x4a\x8d\xe4\x37\x16\x5c\xf3\x91\x20\xba\x3b\x74\x21\xe8\x26\x2a\x8a\xe1\x21\x80\x6a\x39\xd7\x35\x9e\xf2\x75\x7c\x5f\xbe\xec\xa5\x4f\x04\x52\x9c\xe1\x43\x2f\xe0\x59\x37\x6e\x8b\xae\xe6\xfe\xe6\x4f\x2e\x89\x69\x70\x6d\xaa\x1b\xbe\xe4\x82\xba\xde\xe5\x0c\x00\x66\x9f\xe5\x4c\x13\xbe\x31\x04\x96\x31\xc5\x5f\x95\xe7\x11\x1d\xa6\x9a\xb7\x83\xa6\xa5\x31\xb6\x69\x19\xa4\x84\x9a\x61\x90\xdf\x62\x52\xfb\x28\xff\x4d\x21\x07\x1c\x85\x71\xe1\x7b\xaf\x70\x9c\x69\xf7\xe1\x75\x1b\xe1\x9b\x16\x3d\x53\x48\x93\x02\xe7\x41\xf8\xe9\xaf\x11\x47\x4d\x0d\x22\x01\x1c\xb1\x78\xe2\x29\xe0\x05\x79\xbc\x45\x5d\xe0\xcd\xc7\x70\x7c\xfc\xfc\x0a\xee\xdf\x37\xa8\xb3\xbe\x7d\x7d\x72\xde\x49\xe2\xf6\xcf\xa6\x5a\x9a\x1d\x0c\xde\xd5\xec\xf2\xe2\xfa\xe4\x06\xa4\x8d\x4e\x64\x66\x9d\x2c\x46\xf9\x06\x65\x9e\x63\x0d\xbe\xed\x06\xe6\xb0\x4f\x41\xa6\xe9\x06\xdc\xfc\xd5\x1c\xea\xe5\x49\x19\x7f\xd6\x0d\xbc\xb5\x91\x13\x0e\xef\x59\x79\xf3\x64\x70\xf5\xb0\x24\x38\xac\x39\x1a\x76\xbb\xf4\x6e\xc1\xf8\xd9\x04\x84\x13\x81\x2f\x3a\x49\x98\x29\xf4\xd0\xfc\xc5\x50\x2c\x22\x36\x31\x50\x30\x3f\x76\xdb\x99\x4c\xbb\x8d\x44\x87\xf7\x0c\x7f\xbf\xe7\x29\xda\xff\xd5\xcf\x6f\xc4\x9f\x1f\x3f\x9a\x4d\xd0\x00\xa8\xee\xa3\x70\x61\xe5\x40\x3e\x5e\x6a\xf6\x63\xe3\x47\x73\x98\x0b\x7c\xd5\xe2\x6b\x5a\x46\xad\x7b\x19\x5f\x14\xa8\x95\xf7\x28\x6a\x3a\xa3\x07\x03\x50\xae\x9c\x7e\x3f\x6a\x82\xb9\x87\x01\x73\xa0\x59\x46\x7d\x6f\xa1\x41\x2c\x0d\x24\x06\x04\x5b\x43\x32\xa7\xd6\x87\x47\x17\x85\xdb\xd5\x24\x35\x12\x5e\xba\x6f\x4d\xa3\x3e\x96\x14\xa0\xf5\x23\x55\xb1\xb5\xa8\xaf\x49\x92\x6e\xfc\xcb\x94\x2f\x19\x19\x4d\xc8\xac\x22\x2c\x27\x21\x6b\x76\xb2\x21\x80\x16\x05\x61\x07\x7e\xde\x5e\x9d\xc2\x0e\x45\x32\xb6\x63\xa6\x61\xa8\x68\x3f\x84\xef\x2e\xd2\xa5\xfc\xee\xb9\xd4\xfd\xc2\x97\xa4\x4f\x96\x5f\x8b\xa9\xb9\x2d\xa7\xe6\xf0\xb0\x5b\x28\x12\xe3\x41\x59\x83\x86\x53\x92\xc0\x76\x29\xe0\xe6\x14\x90\xbf\x79\x37\x0d\xe6\xec\x09\x03\x18\x4c\x33\x1e\x5c\x89\x8e\x72\xfe\xe7\x1c\x19\x48\x71\xf9\x61\x28\xe2\xa1\x61\x7d\x08\x1d\xdb\xd1\x2b\x25\xae\x3d\x67\x08\xe9\xd0\xf3\xae\x38\xf9\xe7\x23\x80\x2d\xb0\x4a\xb0\xeb\x01\x1f\x91\x3d\x2b\xc5\x39\x92\x26\x80\x40\xa8\xe0\xb0\x81\x30\xbe\x23\x14\xd8\x18\x1a\xa6\xff\x17\x19\xd6\xc0\x79\xcc\x28\x59\x42\x6d\x20\x14\x4a\x23\x08\xc4\xb3\x50\x3c\x1f\xc4\x92\x7a\x0a\x83\xfc\x3e\x2e\xa0\x3d\xea\x46\xf3\x74\x03\x5b\x50\x52\x87\x23\xe9\xea\x45\x44\xc3\xb8\x23\x35\x14\x61\x6f\x93\xcd\xeb\xa3\x0e\xa2\xfb\xf8\xbd\x8e\x83\x40\xc0\x77\xf1\x03\xbf\x47\x23\x2d\x3c\xd3\x95\x9a\xf6\x2e\x48\xe1\xe5\x75\x57\xa0\xbb\x06\x48\xe4\x70\x8f\xe6\x12\xa7\x17\xac\x13\x7c\x13\xc0\xab\xac\x41\x2b\xfe\x44\x2f\x10\xfc\x63\x97\x62\x41\x5b\xf7\xe2\xf9\x49\x30\xf3\x77\x5e\xba\xf0\xd2\xf8\x05\x13\xd6\x72\x06\x90\x4e\x5c\x7a\xb1\xa0\xbe\x5b\x3d\x23\x85\x67\x47\x50\x46\x1c\x40\x1f\x38\x20\xbb\x5f\xec\xe3\x00\xb5\xd8\x74\xf6\xe8\x68\x46\x75\xc1\xef\x6e\x40\x79\x67\xf8\xfb\xf0\x59\x08\xa2\xbd\xcc\x83\x01\xd8\x71\x67\x62\x07\xe1\x38\x73\xd1\x02\xd6\x79\x36\xc8\xfb\x28\xe4\x64\x13\x2f\x13\x8d\x90\xec\xd2\xcd\xec\x1b\x74\xcd\xf9\xf4\x17\xb8\x72\xe2\x94\xec\x1d\x2c\x04\xc9\x12\xce\x09\x92\x37\x00\x06\x50\xc9\x5c\x78\x2a\xa4\x91\x75\x01\x27\xc6\x9c\xcb\xdc\x0d\x1c\x3d\x73\x60\x90\xea\x6f\x99\x46\x48\x9b\x7a\x42\xba\x48\x09\x07\x19\x8a\x42\xae\xf9\x16\xf9\x20\x07\x45\xd2\x79\xa8\x9e\xd7\x81\x87\xce\x29\x28\x30\x1b\x4e\xf7\x94\x36\x7e\xb4\x82\x49\x02\x40\x20\x4c\x09\xd2\x1e\x07\x7d\xc3\x6e\xe5\xe5\x2c\xac\x05\x0d\x86\x22\x85\x50\xae\x66\x4b\x38\xf6\x2c\xe0\x2d\x1f\x13\x3c\x9e\x06\x4e\x0a\xce\x9d\xdc\x3f\x4d\xdb\x47\xf7\x35\x77\xda\x22\x81\xa2\xb6\x15\x7b\xb9\xc9\x20\x3b\x12\x35\xf2\xea\x21\x4e\xdf\x93\xdb\xd5\xfb\x20\x49\x2a\x51\x9c\x7c\x17\x91\x12\x1b\xf2\x04\xcf\x4a\x88\x2c\xcc\x49\xb0\x0e\x4b\x0f\x2c\x02\x4b\x6e\x7a\x63\xd1\x2f\x37\xb9\x08\x74\xcb\x49\xe6\xbe\x16\x87\x80\x68\x64\xc7\xdf\x0d\x13\x16\x95\x30\x58\xd2\xca\xd7\x81\xb3\xa1\x1b\x1e\xfa\x94\x03\x84\x16\x12\xec\x57\x3f\x60\xcb\x28\x86\x4b\x7b\x91\x09\x13\x78\x18\x2f\xc9\x38\xdc\xbd\x2f\x60\x2b\x72\xd1\xef\xd3\x7f\x60\xc7\x38\x93\x8e\x90\xc1\x22\xc8\x0b\x01\x9e\x85\xa5\xff\x9a\x4f\xce\x47\x6e\xd4\x66\xdd\x7a\xa7\xad\x5f\xcd\xa1\x8a\x5c\x41\x4c\xd8\x73\xe5\x33\x53\x7b\xb4\x53\x96\x1f\x7a\x66\x92\x85\xd8\x63\xca\x95\x73\x08\x76\xf1\x56\x13\x34\xf8\xfc\x2e\x88\x84\x27\x22\x4d\x81\xfe\x90\x74\x01\xe1\x4a\x1f\x66\x24\x12\x00\x51\xbb\xd0\xcf\x22\x4a\x85\xc4\xe4\x81\x9c\x95\x39\x02\xa4\x0f\xd5\x00\x7a\xc4\x0d\xe3\x46\x0e\xee\x7a\xec\x3d\x16\x35\x70\x9a\xbf\x41\x3f\xf1\x9e\x19\xda\x6d\x66\x89\x47\x1c\x81\x21\xbd\xe8\xaf\xe0\x5f\xa1\x8d\xc0\x91\xe3\x37\x22\x2b\x93\xcc\x21\x55\x69\x24\xc4\xd7\x17\xe9\xb2\xa9\x11\x10\x5f\x93\x5e\xa0\xd4\x4a\x34\xd2\x50\x69\x15\x13\xc4\x4f\x52\x4c\x00\x3f\x2b\x6a\x4a\xe7\xb8\x1d\x7a\xb8\x1d\x3d\x4a\x47\xd1\x4d\xd1\x63\xb3\xee\x33\x71\x68\x2f\x8c\xd8\xd2\x16\x02\x78\xf5\xcd\x3b\xfa\x46\x30\xa7\x9c\x9a\x4c\x4e\x4a\xc5\x18\xf8\x87\x45\xc1\x07\x1a\x6d\xc9\x9b\xc2\x4c\xa7\xf5\x79\xa8\x70\xe1\x52\xed\x34\x05\xc0\xff\x8c\x1f\xe4\x5d\x5c\xa7\xcb\x59\xb9\xb7\x37\x44\xe6\x63\xcd\x73\xf4\xe1\xa0\xb7\x3a\x5c\xcb\xf1\x43\x14\xc6\xcc\xc7\x68\x38\x96\x6e\x84\x43\x18\xd9\xaf\xc9\xc8\x19\xf1\x1c\x7d\x71\x30\x29\x99\x76\x58\x63\xc0\x74\x1c\xc1\x3a\x58\xa6\x4c\xe8\x6a\xa5\x64\x74\x22\x53\x82\x1e\x57\xd9\x07\x7b\x66\x65\x30\x40\x2b\xda\xa3\x9c\xec\x3c\xe4\xa0\x08\x8f\x45\xd2\xc8\x5c\xc2\x07\x31\xcd\x3f\xe1\xdb\x51\xbd\x1b\x7f\xda\x96\xf7\x7e\x52\x5e\x17\x77\x29\x57\x3e\x8a\x65\x0a\xd4\x9f\x76\x49\x56\xbd\x6a\x79\x5a\x99\x4c\xeb\xea\x1d\x61\xf0\xd2\x22\x47\x7d\x0f\x7c\xeb\xaf\x41\x74\x40\x0f\x38\x74\x67\x0f\xee\x48\x0b\x04\x0f\xde\xe8\xbd\x78\xf6\x52\x82\x5b\x91\x0b\x4e\xcf\xc8\xff\x42\xa3\x33\x9f\xd5\x02\xb5\x70\x39\xe6\xb4\x10\x2e\xe9\x30\x88\x68\xd2\x48\x67\xd5\xcd\xb3\x22\x87\xe7\x1d\xf6\x2d\x6f\x89\x28\xde\xc9\x3f\x35\x8c\x28\xf4\xcd\xd1\xad\xff\x22\x17\x0d\xe1\xea\x72\x5c\xd6\x35\x5c\x20\x7c\xae\x30\x01\xd2\xaf\x09\x3e\x79\x31\x1d\xb2\x70\x0a\xc2\x27\xc5\x9c\x2d\xde\x93\xe2\x1b\xdf\xb0\x13\x56\x63\xdb\xa1\xca\xdd\x4d\xa9\x20\x7f\xaa\x67\x34\xc4\x28\xfd\x3f\x2c\x94\x6d\x92\xfe\xe2\x98\x89\x47\x7c\x8f\xec\x56\xdf\xc5\xf2\x3b\x0c\xb0\x92\x5f\x65\xf2\x2b\x11\x01\x40\x5f\xfe\x24\xb3\x64\x95\xd4\x88\x80\x88\x26\x39\x3a\x66\xfd\x97\x1d\xaa\xf1\x7c\xbf\x3c\x39\x3d\x3d\x39\x7f\x8d\x69\x73\xa6\xaf\x67\x57\x9d\xcc\xea\x6c\x67\x8e\x09\x13\x0b\x91\xc7\x69\xf7\x23\xf0\x26\xe0\xa8\x15\x21\x37\x1d\x38\x19\xd2\x62\x41\x4f\x7a\x97\x77\x61\x99\xc7\xa8\xdb\x7a\xdd\xd6\xc4\x1c\x7e\x80\xae\xdb\xdb\x62\x90\xc1\x7b\xcf\xbc\xe3\x70\x5a\x50\x21\xa9\xdc\xd7\xb6\xad\xe2\x32\xd9\x31\xa6\x59\x43\xdd\xa5\x32\x9e\xd7\x53\xfa\xd8\x8f\x61\x34\x84\x8f\x3a\x76\x65\x87\x7f\xb4\xb1\xeb\x11\xda\x8f\x7d\x2b\x83\x7a\xbf\xad\xdd\xa2\xa7\x15\x35\x38\xa8\x39\xcf\x1f\x38\xbc\x87\xe0\x96\x6f\x5e\xef\x74\x66\x35\x35\x96\x81\x5f\x29\x2c\xb5\xc4\x8e\x03\xd8\x7a\x2c\x66\xaf\x1c\x9f\xdf\xb1\x22\xcc\xb3\xe6\xba\x36\xf5\x07\xd9\x2b\xae\x3d\x8d\xb8\x5c\xc0\xfb\x19\x64\x3f\x78\x87\x71\x89\xa5\xde\x25\x7b\x8e\xe3\x19\x62\xac\x61\x78\x2c\xb2\x46\xd4\x40\x74\x93\x3c\x26\x07\xcd\x9e\xdf\x4d\x5a\x82\x5d\xed\x7c\xe9\x39\xb4\xe3\x68\x23\xb5\x87\x8f\xe9\x6b\xa3\xa8\xad\x7b\x21\xd5\xc9\xd2\x8d\xf4\x0d\xbe\x86\x42\xd2\x45\xd5\x3c\x88\x3a\x7b\x9b\xd3\x54\x04\xa1\x9f\xa0\x30\x09\xb0\xca\x3f\x14\xf3\x1a\xde\xdc\x3a\x33\xd7\x5c\x07\x06\x8d\x1e\x64\x54\x1a\x9b\x3e\x53\x4b\x57\x1f\x81\x83\xac\x5e\x2f\x37\x39\xea\x7d\x18\x48\xdf\x70\x9e\x29\x6b\x29\x8b\x54\xc2\x01\x15\xfa\x5e\x44\x01\xc9\x04\x6b\x78\x51\x14\x29\xa7\x7c\x8a\x61\xf0\x9e\x7b\x67\x07\xde\xd9\xcb\x03\xef\x35\xe5\x33\x78\xfd\x52\x67\x4f\x5a\x20\x16\x9f\xf9\x28\x1a\xcf\x37\xc2\x6a\x5a\x25\x1d\x88\x3e\xfd\xe7\x9a\xa7\xb1\x4c\x16\xa0\x32\x1f\xc4\xe4\xd2\x1e\x12\x01\xd8\x75\xcd\xe1\x56\x64\xb8\x05\x6a\x88\x1b\x78\x4d\xcd\xd5\x65\xb2\x6e\xdf\x9f\x08\x3f\x90\x09\x05\xb5\xfc\x80\x6e\xe5\x2a\x6f\x28\x2c\xd5\x1f\xf1\x7d\x34\xfb\x97\xe9\xd9\xe5\xe9\x4c\x04\x25\x62\xd6\xfa\xad\x4e\x97\x29\x3c\x8d\x73\x7e\x85\x9f\x65\xa8\xce\x7a\x93\x88\x2f\x55\xb8\xce\x73\xfc\xf0\x5c\x13\x20\xf7\x05\x50\x64\xbc\x6e\x4a\x5a\x93\x40\xd0\xd4\x3f\xaa\xdd\x96\x0e\xd8\x92\x32\x37\x96\x01\x42\x6a\x3c\x60\x65\x60\x1a\xf7\xdb\xeb\xd9\x15\xfd\x75\x39\xbd\xbe\xfe\xf3\xc5\xd5\x31\x32\xbf\x1f\xb7\xe8\x7a\x3b\xbd\x3a\xb9\xf0\x8e\x4e\xa7\x6f\x66\xcd\x6e\xd6\x23\xa7\xf4\x60\xaa\x3c\x96\x92\x36\x64\x79\xa6\xeb\xd9\xd1\xed\xd5\xc9\xcd\xf7\xef\x5e\x5f\x5d\xdc\x5e\xf6\xd2\xe6\x02\xca\x8d\x5e\x2d\x70\xef\xe2\xea\xb5\x47\x39\xde\xcd\x28\xb6\x06\xe6\x4a\x73\x5f\x0a\xb6\x1f\x28\x31\xd1\x15\xfc\x76\x33\xbb\xba\x7e\x37\xbd\x7e\x87\xe1\xd3\xfd\x1b\x60\x2c\xf0\x8e\xe3\x92\x65\xbe\x46\x58\x3b\x96\xa0\xec\xe9\x55\x17\x5c\xf7\xa5\xad\x6b\x6a\x8d\x6f\xb1\xe2\x8b\xf7\x13\xe1\xd8\x81\xb1\xc6\x32\x3b\x74\x2f\xf2\xde\x7e\xf6\x94\x50\x92\x2e\x2c\x79\xc0\xb2\x4d\xb4\xa0\x6c\xfa\x00\x5e\x85\x38\xc3\x22\x79\x77\x76\x72\x7e\x7b\x23\x42\xb5\x27\x40\x17\x3e\x77\xe1\x2c\xf3\xfe\x55\x60\x80\x7f\x31\x71\xc0\xf3\x3c\x7e\x8e\x76\x0e\x6a\xb5\x88\x43\x74\xeb\xaa\xb5\xa2\xaf\x29\x5b\x0f\xf7\x9e\x9d\x5e\x1c\x4d\x4f\x67\xf0\xd3\xd1\xe9\x6c\x7a\xf5\x55\xff\x3a\xee\x26\x72\x76\x76\x79\xe1\x1d\xcf\xbc\xd9\xf5\xe5\xec\x6a\xea\xcd\xce\x3d\xa2\xf6\x62\x20\xb5\xee\x27\xb8\x4c\x31\x06\x37\xc1\x44\xe5\xee\x91\x39\xc2\x13\xef\xb9\x42\x2d\xd4\x94\xd8\x86\x52\xae\x91\xa6\xb2\x6c\x7e\xb8\x59\x87\x9a\xcc\x0e\x3a\x44\xee\x48\x1c\x87\x59\x49\x89\xa5\x52\x90\x82\xf5\x3d\x0a\x93\x3b\xb9\x38\x47\xfe\x0a\xef\xed\x7f\x9d\x4c\xfc\x20\xc3\x4f\xc6\x63\x1b\x0a\xdd\x7e\x33\x08\xbc\x7e\xbc\xc6\xf2\x12\x78\xc0\x9b\xee\xcb\xb6\x8e\x27\xe7\x27\x17\xc3\x89\xc1\x47\x17\x00\x34\x25\x61\xa7\xb9\x2b\x5e\x61\x99\xfd\xe7\xdb\x8b\x9b\x29\xe5\x47\xb8\x81\x0f\xa7\xef\xaa\xfc\x0c\x81\xa7\xee\x8f\xda\x97\xa9\x07\x07\xb1\x3c\x2b\xb2\x9d\x8b\x46\x6c\x4a\xca\x54\x31\x49\x58\x50\x5e\x4d\x13\x72\x19\x35\x5b\x16\x13\xe1\x7c\x74\x54\xd2\x55\xcb\xdb\x90\x52\xb6\x06\x89\xbc\x4a\xf5\x80\x89\x1f\x04\x29\x27\xf2\x5c\x90\xb9\x2d\xd2\x89\x48\xcf\x36\xf1\x55\x4e\xc0\x20\xce\x80\xb2\x65\x9c\x0d\xdf\x1a\xe2\x90\x26\x01\x41\xae\xa2\x32\xb3\x04\xc9\xd5\xa6\x13\xba\x05\x07\x17\x55\x17\x20\xd7\xa9\xd6\xcb\x39\x2a\x23\x22\xca\x04\xef\xae\x6e\x4f\x67\xd7\x94\x1c\xd1\x94\xfe\x81\xc0\xdd\xc7\x64\x92\x0b\xb3\x43\xf2\x11\x49\x3e\xa6\xaf\xaf\x8d\x67\x69\x74\x74\x03\xc7\x4d\x06\xae\x49\x1e\xbf\x87\x67\xeb\xe9\xf4\xe5\xec\xd4\xbb\xbc\xba\x78\x73\x72\x3c\xbb\x82\x8d\xfc\xa7\x99\xf1\x89\x66\x0d\x6e\x28\xdd\xf3\x14\x90\xa4\x25\xeb\x5e\x5e\x01\xf8\xab\xdd\x27\x91\x07\xcf\x3a\xdb\x31\x74\x81\xae\x3d\x99\x9a\x60\x87\x8e\xe5\x3d\xdf\xec\xae\x01\xf5\xc5\x9f\x66\xdf\x77\xad\x87\xce\xf4\xf7\x7b\xc9\xd3\x6f\x4b\xf4\x7f\xc3\x44\xfe\x0e\x2c\x1a\x98\xe9\xbf\x3f\xcb\xfa\x8e\x46\x46\x43\xec\x7a\xe3\xcf\xe1\x3f\xf8\x51\xce\x5e\x13\x7e\x03\x3c\xce\x9a\x0d\xb8\x7f\x7b\x8e\xfe\xe5\xa4\x08\x7e\x9e\xaf\x93\xe7\xca\x28\xf6\x4e\x4c\xe0\x21\xe6\xd9\xb2\xdd\xaa\xbf\xef\x9c\xdf\x77\xce\xef\x3b\xa7\xb9\x73\x9c\x6f\xa3\x15\x4b\xb9\xaf\xde\x26\x76\x0f\x9a\x9d\xbe\xe3\xbc\x69\x84\xd5\x48\xc8\xb4\x58\x8e\x51\xd6\x61\xfc\x45\x7c\x35\xa1\x47\x87\xb9\xe8\xd5\x02\x6c\xb0\xf4\x2e\x2a\x11\x37\xdf\x40\xad\x2f\x9e\x7a\xca\xba\xfd\xbf\x7e\x3e\x33\x65\xae\xf3\x4d\x1e\x81\x3b\x32\x9c\xe9\x88\x65\xef\x9a\x98\x36\x0e\x45\x13\x95\x1d\xb3\x3b\x21\x3c\x2a\x54\x8e\xae\x66\xc7\xb3\xf3\x9b\x93\xe9\x29\xf1\x29\xf4\xae\xbf\xbf\x3e\xbd\x78\x3d\x39\xbe\x82\x8d\x34\x51\xc6\x11\x0f\xb3\x71\x67\xb2\x62\x3c\x1c\xc9\x78\x84\x52\x6a\x4a\xd8\x3f\xe8\x68\x86\x15\xbf\xd5\xa9\x4a\x81\x71\x59\x3d\xb0\xbd\x72\x94\xf4\x60\x44\xbc\xf5\x58\x32\x24\x99\x4a\x13\x12\x15\x07\x15\x19\x07\x15\xf2\x03\x81\x1d\x0f\xc3\x1a\xd5\x2d\x54\x52\x02\x10\x3a\x68\x81\xd0\x85\x4c\xb2\x5c\x5a\xb1\x77\xfc\x3b\x07\xd2\x6c\x75\x31\xca\xd3\xdb\x53\x99\x35\x8d\xb0\xae\x37\x13\x7f\x3e\x59\x63\x92\x2c\xe2\x91\x72\x8f\x38\xa8\x55\x71\xb4\x06\x98\xc2\xb9\x58\x15\x78\x0a\xbd\x6c\x93\x85\xf1\xf2\xc5\xf3\xe7\xb5\xa4\x43\x92\xd1\xa7\x41\x54\xfc\xfa\xfc\x8c\x2d\x5e\x0c\x20\x1b\xd9\xa4\x08\x27\xbe\x90\x63\x2f\xb1\xaa\x1a\xc5\x0b\xfc\x43\x14\x64\xac\x15\x71\xf8\x73\x10\xf9\xf1\x43\xe6\xc9\xd8\x77\xa4\x87\x0f\x62\xe0\x6f\x58\x09\xb4\x24\xe6\x2d\xe2\x7d\xab\x08\x7a\x8b\x24\x6d\x15\x0d\x7d\x21\xbe\x90\x84\xc1\xe7\x8f\xe5\x22\x54\xb4\x5d\xc6\x0f\x3c\xbd\x5e\xf1\x30\x1c\xc6\xa3\xa1\x84\x3d\x35\x30\xb8\xfd\x7e\x92\xfc\xd7\x39\x49\x2c\x50\xc6\x40\x67\xc8\x0d\x8f\x12\x47\x88\x6e\xbb\x7c\xfc\x73\x6b\x80\x18\x85\x59\x88\x48\x57\x0f\xd2\xc9\x3d\xae\xf6\x7f\x01\x71\xe4\xe6\xbb\x0b\xaa\x86\xfa\x9d\xf7\xdd\x6c\x7a\x3c\xbb\x92\x95\x51\xa7\x22\xc5\xee\x24\x2e\xf2\xa4\xc8\x3d\x14\xfc\x0d\xc4\xa1\x76\x0c\x17\xc7\x17\x02\xc3\xd1\xf4\xe5\xec\x68\x76\x35\x6d\xc7\x31\xbd\x3a\xfa\xee\xe4\xcd\xc5\x10\xd9\x46\xe6\x1d\xa8\xd5\x9c\xbd\xf3\x26\x69\x3f\xe1\x55\xbf\xdd\x2e\xb6\x6c\x16\xb0\x5a\x0d\x25\x00\xdb\x94\x16\x83\xfe\x8e\xdc\x69\xbe\x3a\xac\x68\x6a\xbe\x39\x46\x22\x47\x5a\x47\xcc\x08\xa1\xf4\x10\x69\x47\x1f\x77\x0a\x92\x15\x8b\x60\x37\x8a\x24\x15\x56\x2c\xd1\xf7\x75\xa5\xa8\xf9\x94\x30\xe5\x8b\xb2\xc3\xd0\x7f\xc7\x21\x44\x58\x3a\xda\x6c\x25\x56\x5c\x2a\xc1\xec\x9a\x4a\x46\x22\x54\x6f\xd2\xb0\xa1\xd5\x06\x92\x3b\xb5\x9d\x22\x89\x0d\xa1\x46\x40\x06\xd2\xa8\x31\x33\x38\x10\x6b\x0c\x6d\x28\xd5\xed\x86\x05\x17\x8a\x4d\x20\x0d\xa5\xd6\x40\xb7\x7a\xb7\xeb\xef\xa7\x01\x56\x29\xb5\x6c\x87\xfb\x28\xa4\x38\xf3\xab\x45\x6f\x66\x37\xa9\x6d\xca\xb3\xb1\x26\xb3\xa1\xf4\x32\x3e\xb4\xbb\xbb\x0d\x22\x44\xde\x21\x35\xed\xdd\xc4\xc8\x5f\xd2\x0a\x86\x2b\x85\x4d\xe5\x93\xcd\x04\x36\x14\x4f\x43\xd9\x25\xbc\x53\x26\xb2\x3a\xd3\xe4\x2e\x64\x4b\xef\xd5\x6c\x7a\x73\x7b\x35\x33\x73\x2e\xb5\x80\x60\x4d\x9d\x78\x3d\x0e\x20\xce\x1c\x80\x03\x6d\xf7\xe6\x1e\xb8\xb2\xb1\xbb\x44\xcd\xef\xe1\xf5\x9a\x59\x20\x2c\xdb\xbb\xe3\x74\x67\xfb\x3e\xf8\x5d\x87\xd9\xef\x0e\xd9\xd1\xda\x1e\x6b\x10\xf2\xac\xf6\x98\x52\x25\x5f\x2a\xd5\x76\xff\xb6\x2d\x61\xc8\xee\xee\x33\x22\xf3\x39\x4a\xf7\x76\xf4\x0a\x40\x83\x17\xf9\x2d\x4e\x10\xf4\xf3\x9b\x8b\xe7\x32\x25\x3c\x29\xd7\x4b\x6f\x79\x8a\x6c\x5e\xf1\x32\xc7\x29\x05\xe6\x97\xf9\x20\xea\xe9\x4e\x65\x6a\x08\xcc\x0a\x51\x25\x0c\xc6\xc8\xfc\xa7\x93\xf4\x29\xc6\xe3\xab\x77\x7b\x9b\xeb\xfd\x16\x7d\x2a\xdb\xf9\x32\xc8\x57\xc5\x9c\xfc\xec\x17\x77\x13\xfe\x6b\xc2\xd3\x00\xe3\x26\x58\xf8\x5c\x3a\xea\xdf\xc5\xf1\x9c\xa5\x1d\x60\xfe\xed\xf9\xb1\xa4\x34\x33\x6a\x2f\xdb\xf0\xc5\x2a\x86\x67\xac\x77\xb6\x99\x90\xef\xbf\x81\xee\x6c\x0b\x50\x93\xa5\xee\xd3\x86\x61\xa4\xf5\x90\x84\xfe\xe5\xbb\xdd\x63\x00\x6e\x0a\x61\xff\x61\xc2\x30\xf1\xd7\x3b\x54\xe6\xc1\x1f\x45\x79\xf1\xa8\x42\x46\xc2\xf4\xf1\x63\xdd\xec\x95\x89\x4b\xef\x47\x23\x37\xff\x4e\x34\x74\x4b\x09\x2c\x64\x23\x31\x40\x61\xbd\x49\x01\x39\x3c\xae\x7a\x69\xcc\x58\xe8\x94\x57\xaa\x86\xc6\xe2\x04\x56\xad\xdd\xa7\x6e\xcd\x12\xf9\x6a\x2c\xcf\x1f\x27\x8f\xbd\x06\x1c\x0b\x67\x3d\x33\x22\x45\x56\x96\x52\xdc\x55\xc6\xe2\xcc\xbb\xff\xe6\x9d\x72\x3b\x83\x8f\xe5\x1b\x07\x3f\xa3\x17\xda\xfd\xb7\xd5\xcf\xdf\xd2\x57\x46\x0b\x6d\x6f\xf8\xac\x97\x43\x5c\xbd\xe3\x7a\xa9\x6e\x6d\x6b\x8f\xd1\xd0\xe7\x76\xb8\xb3\x2d\x40\x20\x31\x33\x33\xc5\xd7\xd6\xda\x1a\x2b\x29\x91\xbb\xd3\x70\x76\x35\xb3\xc7\x23\xaa\xed\xf4\x23\xda\x6e\x67\x8f\xa9\x48\x97\xd5\x5a\x8d\xef\xee\x38\x55\x0a\x50\x0b\x91\xce\x5e\xb9\x50\xfb\xf7\xb1\x1b\x30\x6b\x9a\x6b\x8a\x37\x03\x6d\x77\xe9\xf5\x3c\x14\x63\xff\x74\x2c\xb6\x9a\x59\xe3\x11\x75\xa0\xec\x23\x0a\x5b\xfa\xd5\x82\x0a\x0d\x0e\xad\xfd\x23\x76\xe0\x05\xa5\xc1\x2d\x6f\x96\xf3\xd9\x9f\xdf\x19\xdf\x6d\x66\x9d\x1d\x69\x6a\x53\xfb\x57\x68\x9a\x5f\x19\x52\xea\x06\xd2\x95\x7e\xa5\x99\x47\xd8\x26\xc7\x27\x74\xc3\xec\xc2\x35\x9d\xfe\x4e\x4f\x57\x52\x3a\xf5\xa3\x88\x61\xfb\x4b\x53\x66\x3a\x02\x1d\x38\x86\x0e\x25\x64\x1d\xa7\xf8\xca\x72\x18\x0e\x70\x9d\x47\x52\x53\x73\x11\x7c\xa3\x98\x4f\xb3\xce\x0e\x34\x25\xb1\x3c\x59\xb2\xf6\xb3\xa7\xfa\x7d\xe7\x35\x69\x40\xb4\x39\xf4\x21\x06\xdd\x14\xd3\x30\x2f\xb9\xb9\x58\x5e\xeb\x30\x10\x6b\x9a\x5b\x62\x15\x1d\x06\x63\xa5\xd8\xba\x32\xc5\x4f\x79\x06\x9f\x9c\x1f\xcf\xfe\xc5\x94\x90\x1d\x18\xdb\xdd\xad\x69\x93\x51\xd4\x3c\xba\x0f\xd2\x38\xc2\xd7\xfd\xe4\x9e\xa5\x01\xa9\xdf\xc8\x8a\xd4\x49\x1a\xae\x06\x8b\xde\xb6\x94\x65\x14\xdc\x59\x33\x87\x57\xaa\x1b\x4d\x99\x5f\x03\x6d\x6c\x09\xb8\x0e\xb3\xa7\x84\x6f\x87\xae\xd6\x6c\x20\x83\xe2\x95\xf7\x15\xa2\xdc\x75\x19\x18\x10\xd4\xd7\xd1\x95\x96\x9a\x81\xad\x5f\xa8\xd4\xf6\x71\xa6\xa0\xcf\x82\xd4\x69\x3c\x72\x34\x60\xed\x1d\xef\x10\x4e\xec\x7a\xf6\x9a\x90\x91\x11\x1d\x36\x23\x1f\x07\x8f\xc3\x48\xf3\x49\xdd\x18\xe0\xcd\xce\xdf\xbc\x7b\x33\xbd\x6a\xfe\xf1\x66\x7a\x7a\x6b\xb2\x29\x4a\x58\xde\xf9\xc5\xd9\xcb\xab\x99\x07\x1d\x2f\xda\x65\x0f\xc3\x53\x23\x47\xb1\x72\x42\xf9\xb6\x4b\x73\x13\x0a\x99\x57\x17\xa7\x33\x23\x95\xcb\x16\x08\x61\x77\x92\x10\x06\xea\x50\x10\xb4\x78\x6f\x22\x3c\x7a\x73\x1a\x91\x84\xb7\x18\xdc\x0d\x0b\x9e\xd6\xba\x1f\xed\x76\x77\x22\xa8\xff\x36\x32\x77\xe6\x33\x62\xee\x7e\x10\x3a\x8d\x7d\xd7\xe6\x49\x3f\x59\x9b\x50\x9d\x60\x0d\xa0\x78\x77\x79\x0b\x49\xd9\x6a\x91\x37\x40\x55\xcb\xbc\x84\x34\xc2\xda\x52\x19\x43\x1e\x6d\x6d\xed\x07\xa1\xfd\xd8\xd1\xe9\x60\x22\xb3\x2e\x39\x64\x32\x30\xee\x6f\x4f\x59\xf5\xae\xea\xa7\xa2\xad\xad\x1b\xc6\xfa\xbe\x78\x47\x9b\xc1\xec\x25\x61\xd6\x79\x08\x4d\x06\x32\x53\x6b\x63\x47\x9c\xa5\xe2\xd8\x66\x0e\xba\x7b\xb9\x51\x61\x38\xe6\x41\xa3\xcd\x51\xfd\x04\x72\x89\xa9\xea\xaa\xbb\x83\x1b\x6e\x83\x31\xe6\x03\xf3\x07\xf5\x1f\x36\x26\x34\x18\x83\x70\xa1\xcf\xe6\xd5\x3e\xc2\x9b\x3d\xcb\x63\x8b\x44\x6d\xaa\xb5\x3b\x3e\x51\xcd\xad\xcd\xc6\xda\x8b\xdc\xa4\xab\x35\xc7\x8b\x68\xc4\x7c\x6d\x6e\xc0\x5c\x69\x1e\x2b\x67\x9b\x2b\x38\x77\xba\x7b\x12\xab\x99\x53\x5c\x02\x32\x7b\xa5\x1b\xad\x50\x05\x7c\x94\x2c\x6c\x6e\xc0\x1c\x38\xbb\xed\x19\x42\x1e\x21\x66\xa2\xb0\x59\x67\x07\x9a\xc6\xf2\x0f\xd8\x82\x34\xb6\x87\x40\x11\x69\x5f\xc8\x06\xe4\xed\xbe\x8a\x87\x52\x33\xf0\x45\xbc\x03\x64\xcc\x37\xb1\x00\xbe\x23\xe7\x59\xbc\x8e\x2d\x20\x0c\xa2\x6e\xf0\xa3\xab\x05\xd8\xf8\xcf\x2e\x40\x32\xf0\xf1\x61\x01\xc1\x9e\xba\xc4\xef\xca\x29\x27\x3c\xb3\x94\xbf\xa1\x4a\x2e\xf7\x63\x6b\x76\x39\x99\xc7\xf0\x3d\x7c\x55\x44\xf8\xc1\x60\xdb\xef\x1f\xb3\x2b\x37\xec\x93\xbc\xe1\x59\x85\x56\x31\x3a\xab\x06\x66\x16\xf0\xfe\xd5\x13\xc3\x73\xce\x89\xd0\x31\x8c\x6a\x00\x9f\x85\x58\xeb\xa3\x52\x8c\x62\x3f\x69\xd8\xc6\x01\xee\xba\xc0\xb4\xf1\xd0\x38\x35\xe8\x1f\xf6\xe3\x08\x79\xd8\x46\xc1\x37\xc2\x14\x8e\x93\x7d\xcd\x15\xdc\xc0\x69\x1a\x35\xfb\x9a\x21\x68\x93\xec\x6b\x56\x53\xa0\x09\x26\xa1\x13\xed\x6c\xfa\x2f\x13\xb5\x2c\x26\xed\xe9\x52\x0c\x4e\x8d\x47\x3a\xd9\x3e\xc3\x68\x30\x1e\x7f\xce\xb2\x60\xa1\x48\xde\x1a\xcd\xee\xef\xc3\xf7\xcd\xa8\x49\x14\xba\x03\xfb\xb5\xd8\xc6\x48\xb4\x61\x83\xcb\x24\x04\xdf\x74\x99\x7c\x09\xfc\xdb\x43\x1a\x83\x91\x79\x68\xb1\x38\x6f\xae\x50\x26\x9e\x5d\x5d\x5d\x5c\x21\xc7\xa6\x37\x58\xc4\x0d\xd8\x44\xc9\x09\xb0\x24\xc6\x25\xcb\x57\x1f\x3f\x02\x7b\xe0\xf3\x2c\x4d\x35\x25\x7c\x5a\xa0\x9d\x1f\x5f\xa8\x0c\x04\x98\xbc\x1a\xe1\xea\x41\x9a\x9f\xeb\x2c\xa2\x02\x1f\xc4\x2d\x4c\x52\xe6\x55\x7e\xdb\xf1\x9d\x87\x27\x51\xe9\x10\x40\x27\x51\x37\xd9\xee\x90\xac\xa8\x1d\x4e\xe9\x65\xc1\x7d\x4e\x70\x38\x5c\x30\x12\x4a\xc0\xa8\x1c\xbb\x48\xf0\xeb\x95\x19\x00\x83\x18\xcb\x71\x2f\xe3\xbd\x53\xeb\x3d\x3b\x16\x15\xa7\x5e\x78\xea\xe4\xe4\xfe\x57\x5a\x6e\x8f\x06\xdb\x66\x44\x38\xc5\x32\x23\x45\xb6\x55\xd5\xec\xa0\xfc\x86\xac\xf7\x18\xce\x34\x17\x15\x79\x32\x51\xb6\xe5\x2e\x48\x45\xf1\x16\x01\x40\xe3\x50\xbe\x2f\x3c\xb6\x23\xa5\x3a\x73\x6b\x96\xbe\xe7\x39\x70\x72\x51\xd2\x92\x51\xd1\x19\x4c\x29\xcf\xa4\x7a\x96\xfb\x3d\xf5\x08\x47\x80\xe8\x44\x3d\xd5\x94\x0d\xa2\xbb\x38\x5d\x8b\xfc\x8e\x58\xd0\x6c\xa7\x8c\xd3\xa0\xe1\x8c\x85\xc2\x76\x7c\xc3\x8f\x82\x28\x86\x86\x5e\xf2\x78\x07\x02\x92\x2d\xf2\x6e\x6e\xbc\x79\x9c\xaf\x3c\x7c\x98\xd3\x12\x16\x6f\x74\x2f\xa6\x0c\x9e\x59\x77\xad\xa5\xf3\x1a\xc9\x5c\xa5\xf0\x64\xa9\xc7\xd6\xf3\x38\x53\xa5\x88\xe2\x84\x0a\x7a\x22\xd9\x04\x75\x23\xc1\x8f\x44\x34\x5e\x38\xa4\x6e\xf0\xab\xa2\x80\xc7\x42\xed\x00\xdf\x18\xd1\x1e\xb5\x10\xdf\x00\xbb\xe9\x04\xea\x4c\x7a\xa9\x50\x99\x07\xb9\x38\x37\x90\x27\xcf\x05\x6b\xec\x39\x1e\x02\xc9\x04\x09\x8e\x99\x1a\x70\x40\x14\xc6\xbf\x14\x9c\xa5\xcf\x7d\x9e\xa9\xcf\x2e\xe4\xaf\x58\xb4\xa4\xcc\xa9\xf7\x01\x7f\xa0\x60\xd0\xd2\x33\x74\x11\x17\x51\x7e\x80\xc7\xf9\x7b\x69\xfc\x0e\x83\x75\x00\xdf\xe0\xa8\xd6\x7c\x8d\xb1\xa1\xf4\x0d\xed\xc5\x9e\x2a\x95\x47\xc0\xfe\x00\x16\x0d\x9c\x9e\x1c\x4b\x3e\x7b\x30\x1e\xca\x17\xeb\x43\x5f\x9f\xd7\x76\xc4\x01\x8c\x2e\xfc\xf4\x57\x80\x2b\xf6\x04\x61\x82\xae\xf0\xb1\x88\x98\x63\x41\x4b\x39\xce\xfa\x8e\x15\x54\xef\x9c\xfc\xdd\x23\x70\x00\x61\x4b\x1f\x45\xf7\x2b\x39\xb4\x8f\x97\x8b\x90\xdd\x73\x62\x8b\x28\x51\xed\x8a\x16\xe3\x88\x14\x4e\x5d\xf9\x3a\x81\x16\xab\xd7\x11\x66\xb7\x5a\x75\x47\x58\x2d\x06\x31\x52\xcd\x4b\x34\x3b\x68\x51\xea\x5b\x9b\x63\x0d\xe3\xc2\xf7\x5e\xc1\x82\xf6\x61\xd1\x4e\x2f\x4f\xbc\x7b\x9e\xd2\xa9\x4e\xd5\xf7\x82\x37\x58\x4a\xd1\x4b\xf9\x2f\x45\x90\xc2\xaa\x3b\x3a\x6d\x34\x38\x0a\x83\xb3\x00\xab\xcb\x7b\xde\xf7\x71\xe1\xb1\x94\x63\xa6\x2f\xac\xc1\x18\x6e\x3c\x68\xd2\x6c\x4a\xb0\x0e\xbd\x9b\x18\x9e\x0a\xcb\x94\xc1\xfc\x50\xb5\x73\x80\x79\x00\x8b\x86\x4a\x51\xe3\x8d\x02\x82\x52\x5b\x88\x34\x12\x7a\x27\xe8\x84\x3f\x82\xff\xa5\xe2\xb4\x35\x42\xf1\xe3\x8f\x6d\x8f\x83\x33\x7e\x0f\xc9\x60\xf6\xef\x78\xa8\x39\x74\x5a\x1b\x99\xaf\x1a\xd9\x1d\x85\x8b\x5e\x1c\x51\xa3\x91\xed\x30\xb0\x8e\xbe\xfc\x4c\x15\xf7\xa3\x46\x5c\x3e\xc7\x2d\x20\x0d\x89\x20\xd2\x04\x70\xb1\x00\x3e\x4a\xa8\x78\xf4\x4a\xc5\xf5\x3f\x67\x21\x9c\x9e\x30\x39\x57\x22\x40\x0b\x01\x6c\x81\x55\x19\x00\x7a\xc0\x63\x9d\x4f\x1f\x0e\xa2\x5a\x0a\xc7\x3c\x53\x0d\x84\xf4\x45\xd2\x44\xa6\xa9\xc8\x3e\xe2\xc0\x3e\xdb\x90\x86\x4e\x22\x8e\xa6\x31\x39\x5e\x99\xa0\xc0\x7b\x8a\x8f\x6b\xfa\x28\x44\xd7\xa7\x72\x03\xc2\xa5\x1b\xfa\x80\x6e\x53\x99\x8e\xe9\x7c\xee\xe8\x45\x54\x63\xd9\x78\x35\x16\xf8\x03\xf3\x34\x88\xe6\xf5\x61\x07\xd1\x7d\xfc\x5e\xc7\x42\x20\xe0\x3b\x78\xb4\xdd\x63\x12\x4d\xd8\xd4\x5e\xb6\x22\x52\xc4\x43\xe7\xae\xc0\x7c\xef\xb0\x73\xe1\x38\xc8\x25\x4e\x2f\x58\x83\x54\x40\xf5\x30\x1b\xb4\xe2\x4f\x54\x8a\x13\xff\xd8\xa5\x58\xd0\xd6\xbd\x72\x34\x5c\xfc\x9d\x7f\x6d\xfc\xb3\x5d\xa6\x28\xaf\xd2\x29\xac\xdb\xbc\x74\xcf\x63\x4d\xd5\x08\xa5\x34\x38\xe9\x9d\xc4\x8b\x78\x9d\xa0\x63\x01\x62\x05\x76\x08\xf9\x32\x5b\xb1\x6f\x3c\x72\x2b\xc5\x91\xb7\xa4\x1f\x09\x42\xed\x69\x3b\x14\xa2\x25\xf5\x54\xcd\x00\x11\xa0\x08\x52\x9d\x28\x32\x7c\xed\x40\xac\x97\x35\xdb\xc0\x8b\xf3\x3d\xa6\x90\x7d\x58\x61\x75\x02\xad\x50\x33\x16\x5c\x8b\x91\x44\x11\x5f\x50\xa6\x5c\xbf\x58\x27\x88\x3a\xe5\x0b\x2a\x5e\x8b\x89\x2a\x48\x8a\x1d\xb7\xda\xb3\xce\xfe\x1f\x23\x2d\xb8\xbe\x2a\x6a\x88\x0c\x20\x29\xc0\xb2\xb7\x24\xf5\xef\xa9\xe2\xb3\x9b\x33\x41\xc5\xbe\x9c\x05\x61\x49\xf0\xe7\xe3\x5b\x83\x0c\xcc\x69\xfc\x85\xf1\x2b\xd9\xd0\xf2\x06\xd1\x10\xf0\x50\x3e\x21\x49\xdc\x35\x7d\x05\x24\x8a\xca\xd9\xd2\xed\x50\xfe\x78\x43\x7f\x89\x1f\xf7\x54\x6c\xfc\x4b\x22\xcd\x82\x9f\x78\x91\xe0\xb1\x8d\x3a\x48\x2a\xaa\xdf\x51\xb7\xfd\x6d\x34\x4b\xd3\x38\x7d\xe1\xf5\x5a\x00\x94\xc2\x01\x4e\x79\x96\xc5\xf0\xee\x4e\xf1\x45\x9e\x75\xd5\x60\xd7\x00\x76\x18\xc6\x02\x66\xa1\x79\x46\xbf\xf0\x94\x89\x21\xd6\xda\x2d\x1c\x40\x38\xd0\xe7\x63\x86\x70\xb2\x18\xe1\x65\x22\xdf\x43\x1e\x16\x46\xc1\xb5\xe3\xc3\x3b\x6a\x81\x99\xb1\xfe\xa7\x09\x77\x15\x2c\xc1\x60\xd5\x37\xc0\x1f\xe0\xba\x66\x73\xf6\x33\xcc\xc0\x22\x2f\x58\xf8\x3f\x07\xd1\x7c\x87\x4b\x03\xb5\x24\xa4\x85\xf7\x84\x9b\x92\x09\x81\xea\x86\x17\xf4\xc5\x40\x6a\x80\x75\xc7\x51\x2b\x73\x87\xb4\x8e\x40\x15\xec\x21\x5c\xff\x3e\x49\x33\xe5\xf9\xf4\x14\x77\x92\x2a\xfe\x69\x47\xa9\x3c\xed\x40\x74\x5f\x33\x9f\x79\xa6\xf8\x50\x23\x18\xb6\xa0\x74\x1d\x18\xe9\x80\xa8\x34\x3c\x3d\x4f\xaa\x4d\x73\x09\x3f\x08\xa4\x06\x4b\xd9\x1e\x94\x2b\xbd\x5d\xc7\x06\x1e\x29\xea\x68\xa9\x73\xcc\x7a\xf9\x74\x9e\x1f\xe2\x92\x52\x27\x0d\xeb\xc0\xe2\x3c\xae\xc6\xd9\x5b\x1e\xd1\x30\xcf\x1f\xc4\xdb\x4e\x9c\xd5\xe6\xb3\xe1\x00\xd0\x81\x76\xe0\x09\xea\x4b\xa4\x86\x25\x2a\xd6\x73\x2e\x4e\xd8\x93\x08\x04\x44\x33\xf6\x13\x0c\xc1\x7c\x00\xc0\x53\x3a\x57\x24\xc8\x76\x58\x0e\x84\xc2\xb4\x06\xf0\x80\xfd\xc0\xeb\x16\x18\x13\xea\x54\x47\xb1\x65\x65\x67\x32\x1b\x8c\x44\x8f\xb0\xc6\x1b\x98\x32\x76\x88\x11\x67\x2e\xfc\x45\xe4\x0c\xbb\x96\xa5\xac\x00\x2b\xe4\x90\xee\xa0\x69\x12\x18\xdf\xbe\x19\x0f\xf9\x02\xb6\x4c\x24\xc8\xd2\xc0\xb0\x23\x2c\x7a\x9a\xab\xba\x16\x39\x5f\x27\xa2\x68\x1a\x4a\xac\x45\x82\x2a\x37\x13\xd2\xb0\x3b\xad\x2c\x96\x2e\x56\xc1\x7d\x4c\x80\xe2\x94\x85\x64\xaa\x2a\xe6\x81\xcf\x9c\xf9\x86\xe4\xc5\x09\x1c\xc8\x95\x51\x43\xfb\xf0\xab\xcb\x2b\xf3\x34\x68\x90\x05\xd4\x94\x50\x86\xd0\xf3\x90\x06\xc0\xad\x0f\x41\x62\x4c\x0a\xcf\x16\x69\x30\x6f\x52\x03\xfd\x5d\x88\x50\x25\x48\x5a\x46\xb2\x7d\x56\x41\x53\xaf\x88\x86\x8d\x59\xa1\x93\xee\xcc\x58\x85\x4f\x88\xb5\xb8\x44\x00\x17\x4f\x51\x19\xd6\x4b\x83\x92\x17\x60\x22\xd1\x38\x83\x00\xe8\xa4\x2f\x32\x58\x39\x49\x9c\x01\x9c\x00\xf6\x3c\x3e\xeb\x46\xa0\x32\x5f\xb1\x5c\x15\xfe\x03\xea\x7c\x6f\xbe\xf1\x50\x67\x03\x68\x33\xef\x19\x79\xf2\x50\xd9\x3b\x8d\x4f\xc3\x16\xdd\xbf\x14\xca\xea\x96\xd1\x88\x99\x2f\x64\x9f\x3c\xf6\x41\x76\x0f\xe1\xff\x08\xfb\x59\x16\x87\xb0\xee\x10\xbe\x93\x4b\x83\x1a\x46\xc4\x1f\xc8\xc4\xd3\x4b\x5e\x54\x70\x58\x49\x03\xec\x3a\x0a\x63\x8a\xef\xc5\xb5\x30\x9d\xd0\xd4\x92\x5a\x41\x6b\xa8\x13\x24\x40\xd7\x22\x87\x53\x32\x04\x40\x64\x7e\xa3\x69\xc5\xd0\x7b\x57\x0b\x5c\x55\x63\x47\x78\xfd\x7a\x3d\x31\x81\x7d\xed\x5d\x30\x0b\xf1\x07\x5d\x57\xbd\x9e\xdc\x8d\x26\x7d\xdc\x29\x10\x8e\xa7\xbd\xcb\x60\x11\xc3\xcb\x43\x1a\x48\x95\x68\x35\x06\xfa\x7e\x5b\x67\x7f\x0f\x07\xec\x7a\x67\x8f\x8e\x66\xf6\x78\xb0\x08\x8f\x58\xf0\x54\x5b\x54\xc8\x72\x56\xc7\x9a\x5c\xfc\x08\x48\x3c\x19\x04\x0c\xda\x02\x59\x51\x9d\x6b\x00\x6b\xc8\x7c\x90\xc5\xbc\x7c\x8e\xd4\xac\xe8\xe2\xa0\x5b\xc1\xe9\x33\xe7\x40\x40\x52\x64\x2b\xf4\x64\x29\x16\x0b\x9e\x65\xa4\x4a\xd6\x68\x38\x46\x05\xee\x30\x26\x38\x30\xfb\xf9\xdb\x68\x64\x8b\x04\xf3\xd4\xd8\x1a\xef\xcd\x7b\xda\x51\x83\x0a\x81\x1d\x5e\xa3\x56\x49\x69\x0d\x32\x9e\xe7\xe4\x36\x16\xdf\x51\x2b\x3d\x89\x03\xc0\x39\xd0\x3d\xae\xee\x52\x3b\x32\x34\x27\xb4\x29\x28\x07\x69\x27\x87\x0c\xbe\x92\x3b\x01\xea\x4b\xf5\xc7\xb9\xf1\x60\x8c\xfb\xdb\x93\x26\xa5\x1d\xf4\x4d\xa2\x4f\x92\x05\xb8\x70\x77\xd8\xe5\x32\x0f\x4a\xf8\xd9\x46\xa0\x14\xc9\x3b\x48\x46\x67\xfe\x28\xc3\xd8\x3f\x99\x22\xc6\x01\x20\xfe\x33\x7e\x18\x40\xea\xa2\x0d\xd0\xe8\xe4\x8a\x4b\x0f\x20\x7e\x07\x17\x54\xa4\x59\x34\x23\xee\x69\xba\x28\x9b\x28\x3f\xe7\xae\x6e\x61\x81\xdb\x28\x06\xd2\xd1\x14\x5a\x11\xb4\xfa\xe6\x1d\x7d\x53\x72\xbb\x28\x47\xde\x7f\x31\x0c\x02\xea\x32\x86\x6d\xd1\x57\x82\x3f\x12\x77\x11\x4e\x5a\x3f\x7b\xbb\x40\xa9\xa9\xef\x06\xe6\x4e\xb1\x8c\xeb\x02\xe8\x8e\x2b\x5b\x0f\x6d\xf4\x55\xbb\x2d\x8c\xec\xaa\x4f\xad\x6f\x66\xab\x39\x8a\xfc\x58\xa3\xba\x75\xd8\xcf\xfb\x98\x54\x94\xdd\x2a\xda\xfe\xc4\x37\xb5\x6b\x51\xc3\xc0\x13\xf9\x95\x3b\x77\x3e\x03\x15\x0e\x5c\xa2\xc2\x5e\x5d\xa2\x83\xcd\xfa\x5f\x6c\x49\x09\x30\xa7\x20\x18\xe4\x81\xbf\x2b\x30\x8c\xbf\x11\x68\x51\xb5\x5e\xbb\xa3\x48\x3f\xdd\xb7\xba\x3d\x78\x63\xb7\x9b\xe6\xe0\xb6\x76\x4c\xdb\xc6\x76\x5e\xa3\xa6\x08\xf6\xb1\x4d\x85\xeb\xb2\x0c\x88\xeb\xb6\x34\x3d\xe2\x41\x26\x42\x37\x72\xa1\xd0\x83\x47\xbc\x54\xa7\x7d\x71\x07\x1c\x71\xae\xf4\x31\x30\x1f\x68\x6d\x3c\x9d\x5d\x6d\xa8\x91\x35\xb2\x35\x9e\xc6\x6d\x6d\x5c\x30\x78\x0f\x3c\xe5\x5e\xca\x7f\x96\x5e\x35\xd2\x73\x18\xbd\xf6\xd8\x92\xe9\x9c\x03\x51\x23\x2b\xca\x79\x2f\x00\x10\xcf\xbc\xbb\x82\xa7\x71\x84\xbe\x43\x2b\xf6\x81\xf9\x18\x3e\x80\xd3\x7d\xc7\xee\xc9\xad\x2a\x47\xcd\x33\xa9\x53\x19\x29\xa1\x9d\x58\x23\x9f\xde\x47\xaf\xda\xbd\xab\xf1\x2f\x9d\xf8\x66\xd9\xdd\x85\xae\x2d\xa7\x6e\x2b\xa2\xfa\xfb\x5a\x53\x74\xd9\x1b\xc1\x40\xa1\x0b\x53\x32\xc1\x0d\xc0\xa3\xa2\x16\x3c\x3f\x10\x86\xb8\x35\xcb\x17\xab\x4e\xac\xa7\x2a\x66\x42\xd8\xfe\xd0\xbd\x71\x11\x07\xb0\x92\x7c\x27\xf5\x4f\x01\x67\xcb\xba\x1e\xf1\xb3\x11\xb6\xfb\x67\xfc\x70\x79\x88\xa1\xc0\xe5\x4f\x5f\x61\x80\xcd\xeb\x93\x1b\x2a\xda\x26\x7e\x7e\xda\xe2\x1f\xbf\x82\xa5\xfc\xbe\x90\xff\x54\xbd\x31\x3c\x7f\x73\x08\xed\x9e\x96\x70\x5e\x5e\x4d\xcf\x8f\xbe\x1b\x08\xee\x7f\xf9\xfc\x9e\x87\x71\xf2\x94\x2e\xbf\xa7\xe5\x5f\x73\xe0\xda\x62\xf5\xd5\xa1\x07\xe7\x09\x0d\x2f\x9f\x04\x35\x6b\x53\xe6\xa1\x89\x05\x47\x2b\x75\x51\xd2\xf5\x12\x0e\xda\xa7\x51\x11\x86\x4f\x3d\x01\x8d\xfc\x50\xba\xf3\x94\x56\x7c\x4b\x60\xc5\xc5\x11\xd9\x62\xa5\xf5\x85\x4a\x62\x20\x23\x7f\xde\xe1\x23\xfd\x5e\xb1\x12\x1a\x38\x8c\xbc\xdd\x88\xa3\xbf\xc5\xc5\x6c\xaf\x38\x43\x17\x5e\xe1\x10\xbc\x08\x0b\x8a\x5c\x22\x2f\x21\x0c\xb0\xe0\x59\x7e\xe0\x51\xdd\x43\x69\xa4\x92\x91\x5c\x70\x21\xae\x81\x19\x01\x9c\x73\x5e\x1e\xac\x75\x19\x27\xd9\x1c\x13\x1b\xc3\x29\x57\xe7\x0a\xcb\x84\xc6\x52\xe0\x0c\xf0\x6f\xe1\xdb\x97\xc5\x21\x5c\x75\x79\x01\x67\x28\x2c\xee\x39\x43\xff\x62\x56\x33\x68\x55\xa1\x64\x3e\xf3\xd6\x9f\xfe\x53\xd0\x90\xc1\x7e\x77\xcb\x67\x29\x32\x1e\x5d\x77\x92\x2f\xb3\x87\x5d\xbb\x80\x66\xd9\x6a\x1e\xb3\xd4\x27\xaf\x05\x98\x5d\xcd\xe9\xa5\x6d\x6b\x8e\x91\xdf\xa1\x8b\x97\x30\xcb\xa5\x5c\xba\x04\x92\x74\xd8\x8d\x59\xf4\x29\x4d\x74\x29\x3e\xc0\x33\x32\x41\x2f\x9a\x1d\xdd\xc8\x10\x42\x87\x1d\x31\x26\x3d\x2d\xa8\xa1\x78\x68\x13\x3b\xf4\x4b\x2c\xdf\x3b\xd4\x10\x5d\xe2\xeb\x71\x58\x2b\x91\xc9\x67\xc9\x10\x54\x7a\xae\x2a\x4c\x6c\xc0\x8c\x4a\x44\xa4\x8d\x32\x40\x84\xea\xa7\x21\x78\x2c\x0c\x9b\x46\x7d\xdc\x29\xe8\x31\x6c\x96\xb3\x38\x92\x65\x73\x07\x7f\xaf\x21\xc8\xa0\x87\x3b\x76\x5d\xb5\x06\x7d\x63\x07\x9c\xf5\x07\xbf\xf1\xb6\xa9\xbd\xe6\x07\x21\xd7\x9a\x72\xbb\x9a\x39\xe2\x91\x0f\x76\x1f\x4f\xbb\xa0\x0a\xd5\x8a\x40\xf8\x0b\x96\xe2\xf2\xad\xb7\x13\x3e\xdd\x61\xd8\x97\xdc\xd9\xdb\x0f\x16\x53\x81\xa2\xc4\xae\x75\x08\x29\xe7\xcf\xdd\x17\x44\x21\x22\x3f\x99\x64\xc5\x22\x58\x35\x74\x30\x65\x42\x76\x04\x3a\x57\x31\xbe\xbe\xd0\x2c\x8c\xf1\x9f\x42\x90\x4e\x12\x4e\xfe\xa0\xc2\x1a\xd9\xed\x51\x23\x28\xac\xfc\x65\xf0\x2c\xcb\xbc\x55\xf1\xe9\x2f\xe9\x1d\x03\xee\x91\x90\xf6\xc2\x63\x20\x1d\x85\xf8\x3b\x7a\xdc\x60\x5c\x11\xee\x3a\x44\xc3\xa5\x78\x23\x63\xbb\x5d\xfc\x6b\xd4\x08\xf5\x11\xe8\xd5\x71\xeb\xe6\xc0\x52\x61\xd1\x59\xb8\x2b\x2c\x6e\x26\x6e\x89\x65\x81\x47\x12\x06\x04\xe9\x11\xa1\x69\x89\x5a\xba\xc5\x67\x09\x64\x99\xb9\x53\x4e\x7f\x07\x3b\xdc\x8f\x69\x85\x26\x86\x7d\x29\x66\xe8\x72\xf4\xae\x66\xe8\x72\x34\xe3\xdb\xa1\x4b\xda\x46\x50\x26\x97\x64\xca\xfb\x67\x5f\x1a\xe4\x92\xe6\xcf\x62\x25\x78\x64\xec\xf6\x5c\x19\xa4\x38\x2f\xe7\x70\x6f\x06\xf7\x92\xce\xc1\x06\xf7\x92\xd6\xbd\x5a\xdc\x4b\x7a\x4b\x73\xf3\x15\x7e\x30\x24\x4d\x19\x9b\xdb\xfa\x0c\x20\x81\x9e\xc1\x56\x04\xec\xf6\xb0\x47\x3f\xa6\xa1\x7b\x1c\xa0\x2e\x63\x30\x31\x74\x9b\x90\x6d\x66\xe5\x1e\x83\xd6\x41\x26\xee\x7e\x68\xa3\xef\x94\xcf\x60\x10\x1a\x15\xf7\x88\x86\x9f\x8a\xae\x6e\x6b\xa7\xdb\x6c\x3a\xc2\x73\xa5\xbc\x34\x3c\x35\xa3\xa4\xaa\xef\x29\x44\xca\x7d\xda\xda\x91\x34\xa2\x9a\xeb\x78\xf6\x31\x45\x6d\xb6\x39\xdb\x01\x95\xe7\x6e\x87\xc1\x6e\x5c\xc2\x31\x22\x85\xf2\xbb\xbd\xa8\xad\xf7\xda\xd7\xda\x83\x8c\x5a\x2d\xcc\x3a\x9b\xd3\x24\x12\xac\x79\x8c\x3c\x8c\x95\xff\x6d\xa9\x19\xaf\xc7\xd5\x75\x93\xe6\x02\xc3\x95\x42\x7c\xf5\x96\x87\x46\x4d\x72\x2b\x53\x7e\xc5\x11\x7d\xaf\x42\x4f\x4c\xa9\x76\x87\x3b\x6c\x24\x25\x9b\xea\x08\xed\x88\xee\x01\x61\x4d\x1f\xaa\x53\x6a\x91\x5f\xa8\x4c\x11\x39\x7b\x28\xac\x87\xc4\x65\x51\xd6\x45\xb7\x58\xd9\x22\x0f\xee\x29\x93\x9c\x5e\x03\xad\xd7\xc3\xd4\x28\x02\xe4\xe4\x57\xed\xdd\x71\x96\x17\x29\xf7\xb2\x58\xa8\x45\x44\xc5\xb1\x95\xb0\x1d\x96\x6c\x89\x7c\xb2\xf3\x14\x99\xe8\x2d\x3b\x69\x4e\xb6\x3d\xa2\xb2\x9c\x01\x7a\x78\x0b\xf0\x98\xcd\x12\x17\xe0\x6f\x98\x68\x86\x45\x2d\x2f\x96\x9d\x7b\xd3\xea\x76\xda\x37\x3e\xf7\x91\x23\x63\x61\xab\x89\xfc\xb5\x40\x56\x27\xfe\xbb\xda\xa6\xac\x11\xd3\xff\x4a\x7f\x0c\x94\x8f\x34\x7e\x5c\x76\x83\x9e\x91\x8f\x8d\x7e\x10\x5f\x5a\x56\x68\x1f\x85\xa3\x33\x67\xef\x34\xd8\x70\xe8\xbd\x4c\xf5\x29\xdc\x0d\xbe\xfd\xbb\xbf\x3f\x3b\xf0\xbe\xf9\xfa\xdb\x3f\xe2\x3f\xaf\xbb\xb5\xc3\xa7\xd8\x89\x92\x54\x02\x8c\x45\x2c\x2c\xf6\xdd\xbd\x6d\x28\x42\x63\x3e\xda\xe3\x43\x78\x6c\x51\x3a\xa8\x1c\xce\xc4\x32\x29\x4f\x27\x45\x67\x32\xff\x68\xc6\xc2\xc2\xf7\x36\xa4\x88\xa6\x34\x1d\x43\x54\xc3\xb1\xcc\x49\x12\xc6\x29\x46\xa5\xc3\x93\x3c\x29\xb4\x29\x2d\x64\x53\x0a\xb7\x00\x4a\x02\xdf\xc9\xfe\x17\x2b\x5d\xbd\xb2\x35\x52\xe2\x1a\x19\xe1\x49\x4c\x49\xf9\x3a\x86\x9b\x44\xea\xfb\xe9\x9e\x4d\x52\x7e\x1f\xc4\xc0\x29\x8a\xfc\xca\x44\xca\x2c\xd1\x45\xb3\x3e\x63\xa1\xab\x97\x51\xa1\xfa\x40\x50\xfd\x7d\x2b\x88\x16\xe5\x15\x65\xa8\x13\xbb\xc3\xc0\x3c\xa4\x47\x77\xe3\x03\xdb\xf8\x3a\x09\xf8\x87\x52\x8b\x0f\xb3\x96\x25\xc5\xa7\xbf\x64\x2a\x20\x3d\xcd\x9c\xcc\x4d\xf1\xa2\x40\xef\x30\x91\xda\xa1\x48\x43\x03\x17\x84\xdb\x94\xa2\xe0\x7d\xd5\xb5\x14\x9a\x9d\xbd\x11\x84\xb2\x55\xec\xaf\x5a\xa9\x80\xee\xbd\x55\xf6\x80\x2d\xc5\x7f\x06\xd6\x84\xf1\x56\x07\x4b\xe4\xd9\x8b\x1e\x5c\xf5\x06\x16\xb0\x45\x92\x4f\x8f\xe5\x98\x3f\x20\x87\xe6\x41\xc8\x7d\x95\x4a\x08\x93\xf5\x60\x71\x87\x5b\x91\x96\x91\x1c\x6b\x28\x19\xda\x41\x99\x85\x2f\xa3\x15\xc3\xee\xa1\x1f\xb5\xa1\x65\x8c\x17\xc2\x32\xb8\xe7\x34\x61\xba\x85\x6b\x80\xdd\x16\x77\x18\x2f\x58\xf8\x1c\xbd\x0b\xd3\x88\xe7\x0e\x3e\xc1\x8a\xaa\x32\xe1\x9b\xcc\x61\xf4\x34\xf3\x16\x98\xf2\x36\x2b\xd6\xb0\xb4\x78\x56\x39\xb5\xc1\x4e\x4e\x60\x0f\x72\x38\xac\x98\xce\x25\x64\x34\xc0\xe6\xf3\x5b\xac\x93\x46\x3a\x39\xe4\x21\x07\x8e\xe3\xc1\x22\xf2\x94\x75\x92\x3b\x85\x19\xf8\x99\x6d\xa7\x7f\xe3\x98\x76\xf6\x03\x25\x48\xda\xee\x6f\x4c\xd5\xec\xfc\xcd\xc9\xd5\xc5\xf9\xd9\xec\xfc\xc6\x7b\x33\xbd\x3a\x99\xbe\x3c\x9d\x79\x54\x58\xaa\xdb\x7b\xc9\xa8\xcf\x20\x0a\xae\xbb\x77\x58\x5f\x73\xd3\xa5\x55\x15\x49\xe9\x46\xf5\x4f\x33\x68\x72\xf1\xc2\x29\xb9\x9b\xae\x08\x4b\x56\x96\x41\xf1\xe7\x58\x6c\x65\x19\x87\x7e\x7f\xbb\x05\x15\x65\x49\xd9\xfa\xdd\x72\xfe\xf6\xc9\x8b\x3f\xb6\x17\x5c\xd9\xee\xf3\x6f\xcf\x31\x1f\x17\xe9\x88\x9e\xe7\xeb\xe4\xb9\x32\xab\xbc\x5b\xc4\xd1\x5d\xb0\x3c\xfc\x39\x8b\xa3\x7e\x38\xb9\xf7\xf6\x09\xd6\x17\x38\x88\xef\x30\xab\xde\x32\x7b\xfb\xa4\x9b\x6d\x7f\x53\x23\x7f\x5b\x7c\xfd\xf5\xd7\xff\x67\xc0\xe8\xed\x17\x1c\x7c\x77\x1a\x44\xc5\xaf\xcf\xcf\xd8\x42\xfc\x59\x1b\x4c\xa3\xaa\xec\x7a\x43\x11\xce\x35\x26\x24\x98\x24\x2d\x43\xcf\xe3\x8c\xea\xef\xa4\x70\x82\x50\x2e\x0f\x51\x80\x87\xa0\xfd\x19\x40\xc4\x0f\x99\xa7\x12\x99\x02\x32\x6e\x83\xe7\xed\x93\xdf\xde\xbe\x6d\xa2\x7a\x8b\xc8\xde\xd6\xd1\xc1\x1f\x1f\xdf\x3e\xd9\xc2\x78\x19\x3f\xf0\xf4\x7a\xc5\xc3\xd0\x72\x5c\x46\xe8\x9e\xaa\xd9\x6a\xcc\xbe\x06\xb0\xc9\x0a\x30\x5b\xc6\xbf\xcf\xd7\x97\x37\x5f\x6e\x47\x71\xf7\x4c\x8a\x2c\x50\x25\x69\xfe\xbc\xfc\x98\x05\xe1\x3d\x08\xde\xad\xe7\x90\xf9\x0c\x9a\xc0\x97\x53\x29\x51\xbc\x25\x24\x36\xb3\x66\x38\x86\x6d\x14\x6a\x1c\xc6\x60\x2c\xcf\x58\x2d\x6c\x06\x8f\xef\x06\xd8\xf2\xb8\xf5\x6c\x6f\x9b\xdf\x27\xf7\x6f\x7c\x72\xcd\xf7\xb4\x78\x8a\x94\x05\xda\x84\x2a\xa1\x54\x07\xca\x28\x83\x4c\x3e\xee\xb3\x04\x4e\x29\x8d\x8f\xe3\x77\x6c\x0e\x02\x74\x5e\x53\x33\xa0\x54\x5d\x02\xa7\x84\x0f\x95\xeb\x5e\x19\x4d\x00\x32\xf8\x86\xa0\x23\x2e\xe6\x62\x87\x90\xc3\xf8\xee\xe6\xe6\x12\xe3\xf0\x7e\xdd\xa8\x22\x1e\x18\x02\xa5\x06\xd1\x4f\x76\xb3\xbf\xc8\xbf\x53\x23\x12\x80\xb9\xd3\x36\xc4\x1c\xe5\x02\xc2\x91\xbe\xd1\x8c\x51\x63\x81\x1d\x34\x0e\x3b\x53\x94\x03\x04\x5b\xea\xd0\x05\x5d\x9a\x65\x48\x27\xd7\xbb\x26\x81\x33\xa8\x76\x2a\xff\xda\xea\x65\x8b\xbf\x69\x08\xc3\x3c\xac\xdc\xdc\x06\x56\xee\x93\x61\x26\xb0\x1a\x29\x7b\xb6\x80\xed\x11\x93\x1d\xe3\x1f\xcf\xfe\xb5\x6f\x74\xce\xe3\x1e\x6a\x8a\xb2\x1f\xfa\x1e\x30\x3e\xce\xe8\x07\xdb\xbe\x1e\x19\xfb\x10\xae\x3c\xb6\xe5\xeb\x73\x90\x60\xc1\x9f\x7b\xef\x9e\xa5\x01\x9d\x5a\x18\x1c\xcd\xa4\x05\xd6\x7b\x60\x99\x4c\x45\x9c\x77\x8f\xed\x8d\xea\x0a\x42\x17\x82\x6a\x40\x88\x62\x0c\x5e\x27\x4b\x0a\x34\x59\x04\x7e\xec\x44\x21\xea\xb0\xc5\xe1\x2f\xca\x7a\x90\x68\xd5\xcd\x6d\x6a\x0e\x72\x6e\x06\x37\xc2\x86\x53\xbe\x04\x25\x50\x39\x63\x5f\xa8\x4c\x06\x55\xca\xba\x20\xe4\x2f\xba\x53\xdd\x99\x76\x73\xa5\x43\x72\xc1\xa4\x12\x72\xd5\xb3\xc1\x8b\x61\x15\x8f\xb7\xc8\xc9\x65\xfa\x65\x83\xb2\x0c\xa2\x27\x0b\xbb\x73\x2f\x0f\x2a\xc1\xb0\x45\x58\x4f\x2a\xe8\x2d\xde\x50\xc2\xe7\x11\x90\xb6\xb8\xd4\x1d\x1a\x55\x7f\x68\xd2\xd3\x95\xfe\x62\x60\x15\x08\x81\xc4\x6f\x8d\xcf\x10\x3b\xd7\x82\xd6\x79\x6b\x94\x86\x0e\x8c\x2b\x9d\xed\xb1\x1a\x66\xd9\xc8\x87\x80\xb2\xa5\xb7\x2c\x3f\x44\x3b\xb4\xda\x65\x3a\x73\x85\xd8\x13\x64\x2a\x22\xf7\x75\xf5\x30\x6d\xef\xed\x4c\x91\x78\x4c\x7f\x01\x24\xdd\x89\x4a\xd3\x35\xab\x23\x0a\x42\x36\x73\xa9\x8a\x32\xc8\xa8\x8d\x0c\xdf\x38\x30\xba\x00\x60\x75\xc1\x19\x4c\xa3\x08\x84\x34\x3e\x72\xeb\x24\x8a\xae\x3b\x44\x8e\x43\xa1\xaa\x1d\x87\x0e\xb6\x6b\x5f\x2d\xe6\xfe\x13\xb8\x2a\x6c\xb1\x90\xe5\xd0\xba\x20\x38\x12\x36\x7c\xcb\x3a\x41\x72\xa4\xb6\xb7\x50\xcb\xee\xb4\xaa\x2e\x2e\xa1\x89\x4d\xe4\xdb\xe2\x5d\x75\x76\x9a\x79\x36\x0f\x84\x36\x32\xd5\xb6\xdb\xb7\x17\x88\x23\x7d\x6d\x81\x0e\xee\xfb\xd7\x00\x90\x25\x9d\x4b\x99\x5f\x86\x25\x09\x88\x65\xc2\x3b\x27\x2b\x60\x37\x63\xb1\xa7\x1e\xf2\x0c\xfb\x3a\x52\xa4\xce\x14\x2a\x4d\x2f\xbc\xaa\x84\xb7\x05\x8c\xf9\x15\x48\x7a\x97\x2c\x5f\xf5\x72\xd0\x15\x98\x23\xcd\x54\x00\x04\x4b\xb0\x18\x92\xd5\xd2\xde\x11\xb3\x1c\x8e\xf2\x31\x11\x63\x44\xb7\x13\xe3\x59\x34\x82\x60\x49\x5d\x10\xa9\xa2\xc8\xe8\xc0\xd5\xbb\xda\x51\x16\x27\xa9\x25\x0d\xd6\xe8\xa7\xe2\xce\x16\x58\x83\xd9\x8a\xd1\x9b\xf7\x9f\xae\x2f\xce\xfb\xc4\x5d\x16\x2e\x8a\x90\xb6\x19\x85\xd7\xf3\x3b\x9e\x52\xf6\x33\x51\x13\xbe\x09\xc1\x92\x12\x2c\xc0\xd2\x14\x72\xb5\x85\x4f\xca\xab\x71\xec\x0a\x2c\x02\x30\x96\x32\x32\x64\x0a\x13\x89\x91\x90\x29\x83\x18\xa0\x50\xca\xb4\x4e\xe6\x58\x29\x0f\x9d\xca\xd5\xe4\x8e\x9e\xa7\x58\x11\xc9\xfc\xe1\x0e\x4f\x1f\x45\xc1\xf0\x67\x7b\x92\xc6\xa8\x71\x21\x01\xa2\xdc\x54\xa8\x65\xc1\x2a\x54\x3d\x84\x18\xf6\xb5\xa4\x08\xcd\xec\xbb\x0a\x01\xe3\x2b\x29\xe4\x42\xa3\xd1\x5c\x98\x04\x2c\x40\x31\x64\x8c\x47\xbd\x22\x51\x3d\x17\xfa\x37\x4b\xc8\x39\x55\x76\x2a\xdf\x08\xa3\xe1\x26\xae\xf7\xaf\x18\x5d\x9f\x31\x28\x30\x5d\x33\xa6\x9d\xad\x69\x8a\xd8\x7a\xf8\x53\x1d\xc0\x60\xd6\xb9\xbd\xbe\xd6\xe5\x26\xa7\xdb\xd5\x64\xea\x3a\x5a\x5b\x63\x85\xb3\xe2\xbe\x8c\x15\x37\xdf\x4f\xb2\x23\x57\x31\xe3\x63\xec\x1f\xf2\x43\x1b\x3e\x5b\x65\xf5\xb6\x7d\x4e\x97\x50\x8f\x6d\x49\x91\x86\x15\xde\x04\x04\xd4\x99\x71\x91\x73\x04\xfb\x2f\x34\xfd\x9d\x69\x1b\xc8\xc8\x50\x38\xce\x37\x4c\x88\x23\xf3\x11\xeb\xaa\x91\x1e\x34\xb6\x57\x85\xca\x0a\x6b\xdb\xe7\xfa\x88\xda\xd0\x0f\x41\x92\x6c\xcd\xb1\x81\x7a\x36\x5e\x27\x28\x08\xca\x52\xa4\x6a\x72\x9d\x89\x68\x7d\x80\xa2\xf7\xb9\x88\x8a\xc4\x44\xa7\x9c\xca\xdf\x83\xdc\x81\xf6\x20\x96\x2e\x29\xee\x40\xa4\xee\xbc\x8c\x33\x4a\x59\xf5\x14\xa6\x30\xaf\xff\x29\x05\x5c\x74\x17\xa1\x64\xb8\x4b\x9e\x1e\x7a\xde\x2b\x14\x42\x63\x34\xb9\x6e\xa2\x9c\xfd\x0a\xd2\x4f\x98\x1c\xc0\x41\xcc\xbd\x9f\x16\x77\xca\xd5\xa5\x5a\x0c\x93\xd5\x4f\x1a\xf3\xcd\xdf\x18\xf9\x76\xf3\xf2\xc2\x3b\x8f\x45\x52\x57\x2a\x98\xdf\x1b\x5c\x24\x3b\xa1\x50\x8d\x29\x22\x63\x4a\x63\x5a\x95\xd0\xaf\x97\xea\x76\x27\x09\x33\x88\xfa\xe8\x18\xe4\x3d\x30\xb1\xb1\x88\x2c\xe0\xc6\xc2\xfb\x39\x9e\x53\xd1\x5b\x68\x4a\x81\x28\x4f\x71\xd3\x61\x46\xb3\xac\x3b\x2d\xae\x04\x9b\xa1\xbd\x9d\xcd\x69\x9b\xe5\x01\xee\x2f\x94\x9e\x30\x83\x28\x15\x7e\xc3\x7f\xe4\x26\xcc\x55\xd9\x62\x90\xff\x16\x69\x1c\xc5\x5b\x28\x85\x5b\x91\xac\x7a\xec\x3e\x4e\xb3\x13\x62\xd8\x09\xf0\x2b\x5f\x14\x22\xa1\x55\xca\x1e\xaa\x1c\xae\x38\x61\xb0\x3c\x27\xf9\x26\xc1\xfc\x84\x39\x19\x6c\xab\xf3\xe1\x39\x7a\x88\x61\x06\x5c\x99\xe5\xb6\x9b\xc2\x9f\x11\xbe\x88\x57\x2a\x05\x76\x58\xa2\x85\xcf\x0e\x90\x93\x0d\x3c\x80\xf9\xd3\xbf\x7b\xc2\x07\xad\x48\x55\x2e\x5c\x59\x85\xd9\x63\x3b\x04\x38\x8d\x37\xa1\x94\xdb\x0d\xb5\x88\x70\x3a\x61\x42\xff\x10\xdf\x61\x12\xa3\xe7\x22\xa5\x6f\xc2\x82\x34\x93\xa5\xbf\xbd\x78\x41\x35\xa8\xfc\x7a\xd5\x66\x2f\xe2\x2c\x05\xb1\x00\xe7\xff\xfb\x75\x78\x1d\xc1\x59\xca\x73\x58\x03\x9d\x1c\xb9\x2e\x97\x14\x26\x82\x6b\x1c\x9e\xc0\x68\xc1\x29\x24\x84\x1c\xd5\x60\x21\xc1\xdc\x50\xce\x66\xa4\x28\x4e\xdf\x46\xdf\x15\xb0\x42\x61\x6f\xf1\xda\xb3\xbc\xd4\x33\x7a\xf0\x1c\x5b\x60\x4f\x3d\x49\x83\xd8\x95\x35\xf8\x65\x3c\xce\xac\x36\x50\x18\x13\x0c\x35\xaa\xc6\x3a\x84\xb4\xf2\xaa\x2e\xe9\xc2\xf5\x2a\xa6\xd1\xfb\x7f\xd1\x4f\xf9\x0f\x5c\x64\x68\x3e\xa0\xe3\x35\xc8\xc9\x76\x4d\x19\x42\x6e\x60\xd9\x7d\xfc\xd8\x7d\xb8\x57\x83\xa8\xb0\xe0\x70\xc4\x44\x11\x22\x4c\x7c\x4b\x39\xb5\x6b\xa8\xe2\xf4\x00\x9f\xb6\xc2\xbe\x5d\x44\xad\x98\x9c\x06\x7a\x99\xc6\x00\x37\xdf\x6c\x0d\x78\x1e\xc7\x21\xf0\xd3\x70\x1c\x5b\x40\x6a\xe3\x91\x70\xdc\xec\xf0\xfd\x64\xaa\xfd\x95\xe5\x29\x56\x70\x1b\x4a\x6e\x6d\x9f\x2c\x98\x0f\x8f\xa0\x6c\x4f\x74\x8b\xc2\xd4\xbb\xab\x47\x35\x37\x5f\x45\x48\xfc\x2e\x1e\xc9\xfd\xe8\xd3\x7f\x62\xfd\xea\x9d\xa5\xd3\x89\xc6\x78\x8c\xaf\xa6\x27\xa7\xb3\xe3\x4e\xfa\x5e\x4d\x4f\x4f\x2f\x5c\xc0\xce\xa6\x37\xb7\x57\x33\xef\xd5\xe9\xf4\x75\x77\x50\x59\x47\x2b\x73\x2c\x14\xaf\xe8\xdd\xf1\x7c\xb1\x6a\x88\xfb\x99\x99\xd1\xfc\x15\x0b\xc3\x18\xaf\x6c\xa1\x1b\xe9\xed\xee\x4c\x98\x30\x42\x65\x86\xef\x23\x41\x16\x48\xd2\xf1\x1c\x6e\x40\x9e\xaa\x04\x81\x9d\xfd\x9d\xe9\xe2\xf7\x70\xc3\x5a\x93\x85\x89\xbd\x71\xcd\xa6\xa2\xff\x1e\xe8\x8a\xd3\xe5\x44\xf8\x3a\xa2\xf8\x96\xc6\xc2\xc3\xe8\x22\x5d\x5e\xc1\xc7\x9b\x58\x46\xb8\xcb\x84\x0f\x2e\x53\x2d\x1d\x24\xb2\x89\xcf\x27\x65\x61\x66\xc0\x63\x8d\x66\xc8\x10\x9d\xd7\x83\xae\xaf\x33\x41\x22\x0e\xfe\xd0\x40\x03\xb2\xc5\x4b\xca\x6a\xdb\xda\xcf\x99\x16\x32\x9a\xb5\xac\x00\xb2\xa1\xed\x63\x0d\xd4\x8a\xd8\xca\x55\x60\x89\x6a\xd8\x50\xeb\x07\x8e\x99\xd5\xd6\x15\x8c\x2d\x9d\x79\xac\x2a\xe5\x93\x5c\x7f\x27\x55\x5f\x98\x47\xff\x9d\x8a\x91\x36\xd1\xce\x97\x6e\x5b\x04\x46\xbd\xf5\x2a\xb9\xdf\xe7\x5b\x70\xc7\x20\x59\x09\xbf\x07\x28\x12\xc8\x28\x76\x34\x6b\xe0\xbb\xf3\x3e\x80\xd7\x19\xbd\xb3\x95\x13\xa3\x46\x49\x3b\x22\x64\x87\xd1\x48\xa3\x98\xde\xf8\x23\x16\x37\xa6\x55\x14\x46\xb1\x74\x4c\x93\x58\x45\x8b\xc8\x4d\x11\x53\x1a\xc7\xbe\x99\x2f\xcf\xad\x45\x0c\xec\xf8\x40\x24\xd5\xa6\x9c\x80\xb8\x10\x23\x9d\xe2\xd1\x04\x2c\x3e\xbe\x0a\x19\x26\xb9\x93\x39\xa4\xfc\x6e\x71\xcb\xa6\xeb\x70\x7a\x84\x47\xbf\x0b\x39\xbb\x3d\x6d\xa9\xe9\xb6\xd7\xed\x36\x30\x87\x8d\x66\x6f\xf4\xec\x15\x1a\x1f\x4a\xf5\x10\x6e\x0e\x60\x81\xbe\xc7\x1c\x23\xa9\x8c\x3f\xc0\x56\xfc\xd7\x80\x42\xb1\x72\x99\x88\x22\x61\xb0\x60\x60\x9c\xf8\x63\xa2\xf7\x00\xd8\x13\x16\xf3\x51\xc6\x58\x24\xc4\x17\xc9\xc6\x9f\xf9\x22\x27\x4b\x92\xc6\x94\x21\x43\x78\x08\xdf\x05\xe9\x9a\xe8\xed\xce\x40\xe2\x08\xc5\x85\x4a\xd4\x0f\x3c\x04\xf9\x0a\xd5\x5e\x75\xb0\xdd\xb4\x15\x3c\xfd\xc0\x84\x07\x26\x9a\x4b\x83\xa8\xec\xe7\xa8\xa9\x15\xd4\xac\x83\x65\xca\x1c\xc8\x89\x91\x1a\xea\x2c\x74\x1d\x63\xd1\x93\x72\x79\x5c\x89\x7a\xe0\x8a\x28\x31\x0b\x7d\xdc\x49\x39\xc8\xdc\x58\x2b\xcf\x97\xba\x98\x84\x08\xcb\x8a\xa5\x3a\x51\x5d\xb6\xe7\xeb\xd9\xcd\xcd\xc9\xf9\x6b\xef\xfa\x66\x7a\x75\xa3\x79\x78\x75\xb6\x33\xc7\x74\x7a\xf1\x72\x7a\xea\x5d\x5c\xde\x9c\x5c\x9c\x6b\x92\x6b\x5c\x5c\x1e\x41\x83\xd9\xb5\x27\x3a\x38\x25\xd6\x78\x2d\x7d\x51\x2e\xa6\x65\x7a\x5f\x5d\x5c\x43\x5f\x73\xf3\x31\x2a\x4f\x26\x2c\x36\x21\x02\x1f\x64\x26\x27\xb8\x33\xdf\xf3\x1c\xc4\xb6\x05\xd7\x51\x72\x81\x12\xb5\xb0\xa0\xe4\xb1\x1f\x67\x70\xda\x64\x65\xd1\x15\x71\x65\xae\x51\x6f\xe6\xc7\x03\x09\x4c\x92\x6c\x5f\xc9\xfb\x6b\x63\x20\x34\x9f\x21\x65\xbf\x1a\x66\xed\x05\x7d\x78\xa8\x71\x24\xad\x91\xdc\xd9\xc5\x1a\xb9\x7c\x64\x6b\xca\x86\x5a\xf3\x53\x3d\xbc\x9b\x89\x75\xc7\x4f\xf2\xae\x86\xc0\x6b\x31\x35\x65\xba\x36\xef\xb7\x47\xa8\x00\x51\x1b\x74\x45\x80\x4f\xe2\xac\x90\xd6\xbf\x84\xca\x10\x25\x9b\x48\x6d\xb1\x0f\xfe\x98\xad\x59\xa9\xf6\xd8\x13\x63\x06\x6d\x02\x94\x7c\x3e\xdb\xca\x91\x16\xe8\x7d\x31\x66\x00\x5b\xd0\x57\x73\x78\x3c\x5e\x6d\xa8\x04\x50\x3d\x63\xf7\x7e\x2e\x94\xe4\x8f\x59\x52\x60\x5c\xe0\x03\xc6\xd4\x97\x30\xdd\xb9\xfa\xf3\xf6\x7c\xe1\x75\xde\x9d\x39\x7d\x9f\xa5\xa0\xd5\xa0\x3f\x4b\x09\x96\xc7\x45\xee\xc2\x93\xec\xd1\x18\x30\x36\x26\xeb\xd1\x76\xc5\x6d\x6b\x6e\x9e\x1b\xa5\xb1\x44\x8d\x0e\xf5\x1f\xff\xde\x10\x5e\xe4\x59\x55\xbb\x0d\x3d\xc8\xb3\x20\x8f\xd3\x00\xee\x13\x80\xde\xad\x1c\x73\x01\x31\x8c\xbe\x12\xf0\xc6\xeb\xb6\xa6\xeb\x7b\x22\x49\xed\x66\x6f\xa3\x87\x4e\x6b\x21\x09\x3a\x63\x86\xdc\x27\xaa\x52\xea\x36\xe0\xb1\xaf\x13\xa2\xde\x2e\x5f\x41\x8d\xd4\x85\xe8\x3d\x36\x51\x32\x0f\xef\x36\x51\x9e\xb1\x54\x26\xaa\xeb\xed\x92\xb5\x0d\xc1\x9e\xb2\x42\xc9\x54\x54\xe9\xb0\x79\x4b\x7a\xb2\x1c\x84\xf8\xf2\x35\x7e\x77\xde\xcb\xcd\x11\x21\x5b\x8f\xa6\x89\x25\xb3\x97\x17\xcc\x01\x38\xd0\x26\xab\x04\x89\x7c\x07\x36\x0b\x74\xe9\x00\xc2\x76\xd7\x6f\xc1\xc6\x79\xab\xaa\x03\xbd\xa4\x4f\x78\x65\x44\xcd\x34\x47\x52\xa8\x28\xff\xb6\x14\x3a\x3b\x06\xb6\x27\xe4\xfb\x63\xc9\x6e\x8e\x8a\x2f\x81\x57\x7b\xa1\xea\xb1\x99\xf8\x19\x38\xf4\x19\x86\xbf\xbf\x51\xee\x79\x30\x8f\xb3\xc0\x3f\xf3\x82\xfd\xcc\xdb\xfb\x4b\xdd\xc7\xfb\xdc\xb0\x8f\xb8\x33\x4b\x3d\x7d\xe6\xfa\xf6\x6a\x03\xb5\x87\x07\xb6\x42\x23\xb6\xb9\xed\x4b\xab\x0b\xca\xf8\xef\xad\xac\x9e\x53\x10\x85\x7f\x69\x24\x33\xc9\x76\xe6\xcc\xfb\x71\x91\x3d\xce\x98\xf7\x36\xbe\x51\xc6\xb2\x6b\x6d\xda\x63\xd1\xc6\x51\x71\xef\x6f\xef\x39\x18\xba\xdc\x59\xf0\x99\x47\xdc\x52\x55\xd2\x45\x11\x30\x18\xde\x10\xca\xed\xde\x59\xf6\x00\xdc\x68\xcb\xda\x2a\x66\x6a\x17\x8d\xc9\xb9\xde\x07\xb9\x6b\x8d\x0c\x3b\xeb\x73\x8c\xb5\xc2\xa0\x8b\x6b\xfc\x84\x61\x40\x8d\x65\x5b\xca\x23\xe3\x19\x65\x1e\x13\xb5\x1b\x3f\xb2\xbd\xf3\xa0\xa6\x1a\x92\x18\xb9\x03\xc6\xb1\xd5\x5c\xc2\xa9\xb5\xbd\x1a\xec\xf3\x2e\xeb\x84\x4d\xc9\xe5\xda\xb0\x95\x87\x6b\x77\x5d\xd8\x4e\x8c\x63\x15\x67\x36\x19\xb6\xbb\x55\xa7\x7f\x80\x23\x1e\xfa\x94\x70\x9b\x32\x3a\x50\x31\xa4\x45\x58\xf8\x74\xe3\xa2\xea\x4e\xba\x42\x7a\xf3\xd8\xdf\x74\x12\x7e\xcc\x54\xda\x6e\x26\xfa\x07\x2a\x4a\x6b\x51\xf0\x34\x51\x9e\x46\x43\xb2\x57\x10\xf4\x35\xcf\x57\xb1\xef\x3d\x7b\x3d\xbb\x39\xb8\xbc\xb8\x86\xff\xdc\xde\x1c\x1c\xcf\x4e\x67\x37\xb3\x03\x9e\x2f\xba\x7d\xd6\xce\x38\x3a\xc1\x08\x12\x0d\x7a\x9b\x53\x15\x67\x39\xee\x9d\x4e\xc4\xbb\x0d\xac\x61\xcb\xea\x60\xeb\xcd\x24\x2b\xe6\xc2\x15\xa4\x7b\xa0\xe7\x22\xfa\x14\xf8\xbd\x82\xee\xa2\x4c\x58\x47\x4f\x63\x42\x4e\xce\xaf\x6f\xa6\xa7\xa7\xb3\x63\xef\xf2\xf4\xf6\xf5\xc9\xb9\x77\x74\x71\x76\x36\x3d\x3f\xee\x0e\x7f\xe9\x6c\x67\xfa\x4c\x3b\x59\x46\x18\xeb\xdb\x48\x09\xd2\x89\x8d\x1a\xb3\x9d\xec\x1f\x8e\x39\xc8\x4e\xe4\xfa\x2f\x13\x56\xc8\x34\x31\x6a\x43\xf4\x94\xf9\xa3\xee\x1b\xde\xcc\x15\x23\xd7\x7f\x99\x0c\x44\xee\x6a\xe7\x1a\x80\x80\x24\x86\x5d\xbf\xc8\xbd\xdb\x8c\x2d\xbb\x39\x73\x9b\xd1\x7e\x16\x6d\x1d\x99\x51\x47\xa4\x93\x44\x10\x57\xd9\x3c\x76\x93\x2b\xb6\xd1\x95\x55\x2a\xc2\x20\xe2\xde\x5d\xc8\x96\x19\x2c\xe9\x5f\x17\x3c\xc9\xbd\xc9\xdd\x57\x98\x1c\x1c\x9d\x4f\x31\x60\x0d\x63\x35\xb9\xef\x3d\xac\xd0\x59\x56\xd4\x14\xf4\xd6\x45\x98\x07\x49\xc8\x85\xf7\x98\xb0\xde\x35\xd7\x54\xf7\x59\xdc\x64\xdd\xa1\xf7\x12\xc8\x28\xa7\xf2\xd3\x5f\x23\x2e\x62\xf0\x64\x92\x40\x49\x54\x4c\x54\x45\x31\x50\xe0\x07\x3c\xa5\xe8\xd6\x54\xc6\x80\x62\xbd\x85\x32\x33\x84\xa2\x2c\x13\xa4\x51\x1d\xca\xf6\xf4\x35\x2e\xe7\xf9\x0e\x1b\xcf\xe3\x2a\xf8\x5e\x86\xd7\xfb\x58\xeb\x42\xb7\x8a\x6d\x21\xb8\x53\x77\x55\x0b\xf8\x57\x48\xec\xa8\xeb\x87\x30\x06\x75\x12\x70\xe6\x4a\x5b\x7b\x7f\x07\xca\x54\xc0\xca\x9a\xe5\x2f\xaa\xc4\x1a\x18\x01\x81\x1e\xe6\x54\x59\x51\x54\x2a\x92\xf5\x8a\xde\xe0\x39\x23\x7b\x09\xe7\x72\x2a\x34\xf9\xe2\x6d\xf4\x03\xd6\x3b\xf9\x4d\x94\x66\x79\xfb\x24\x49\xe3\x3c\x5e\xc4\xe1\x5b\x40\xf7\xf6\x49\xbe\x48\xde\x3e\x39\x50\xbf\xf9\x94\x94\x86\x86\x29\x7e\xfe\xe6\xeb\xc3\x6f\xff\xf8\xc7\xc3\x6f\x0e\xbf\xf9\xdf\xb5\x66\x49\x9c\xe6\x99\x68\xf0\x87\x3f\x7c\xfd\xf7\x58\x10\x06\x86\xf3\x36\xfa\xd1\x80\x61\x7f\xdb\xc3\x72\x98\x47\x11\x63\x4b\x4e\xdc\x6a\x6d\x74\x5f\xec\x05\xc6\xc9\xd6\x8e\x24\x3c\x26\x54\xb7\xd8\x25\xe6\xe1\x44\x54\xbd\xa4\x4b\x4d\xa6\xda\xf3\xf9\x1d\x1c\xb4\x14\xec\xaf\xf2\x13\x2a\x14\x9d\x84\xc9\xe2\x99\x13\x09\xe2\x72\x7a\xf3\xdd\xf3\x9b\x8b\xe7\x42\x04\x98\x50\x1d\x1d\x6f\xe2\xb9\x22\x33\x16\x18\x04\xfc\x5a\xda\xc0\xdf\x30\x95\x3c\x7e\x12\x99\x14\x75\x72\xb7\x5d\x67\x3b\x06\x47\x0b\x8d\xe0\xb2\xd3\xc0\x1a\xb6\x77\xc6\xd7\x71\xda\x2d\x99\x77\xb6\xb3\xc7\xb4\x2e\xb2\x5c\xc6\x86\xc7\xd1\x24\xe2\x4b\x40\x72\xcf\x55\x8a\x96\x7e\x0a\x4c\xfb\x5b\x50\x76\x4f\x27\x00\x9e\x10\xad\xf9\xc5\x3a\x69\xba\x2a\x05\x31\xea\x1b\x08\x40\x4c\xb8\xd1\xa1\x02\xce\x77\xaa\xee\xa2\x08\xba\x92\x41\x9d\xf8\xaf\xe6\x3d\x0b\x3f\x7b\xb2\x4b\xdc\xd6\xdc\x1a\xef\xf5\xf5\xa9\x77\xc4\x53\x11\x86\xf3\x9b\xac\x4a\x4c\x81\x93\x37\x41\x72\xc6\x33\xbc\x90\x34\xf4\x60\x57\x40\x88\x31\x01\x04\x2a\x50\xb4\x91\x37\xa8\x01\x3c\x6b\x82\x45\xfa\x1a\xc7\xa9\x63\x19\x88\x61\x98\x89\x06\xdf\x9c\xf7\x9f\xfe\x7d\xcc\x19\xac\x6c\x39\x2f\xba\xdd\xc3\x6e\xf0\x77\x3a\x86\x0b\xcc\xe7\xa2\x12\x9a\x28\x62\xdc\xd2\x94\x2a\x0a\xca\x8c\x30\xa4\xee\x87\x2b\x0c\x86\x24\x0b\x04\x4d\x16\x24\x0a\x1f\x7a\x97\x21\x67\xc0\x36\xf9\x23\x6c\xac\xda\x7e\x88\xe7\x3f\xe3\x15\x43\xe9\x2e\x69\x2c\x58\x74\x27\xa0\x82\x47\x51\x0e\x0f\x41\x8a\xdd\xd8\xed\xa0\x3b\x24\xbf\x14\xc2\xac\x79\x59\x25\xab\x44\x7d\x21\x7a\xca\x09\x15\xd8\x53\xb8\x98\xd4\x65\x84\x4d\xca\x1a\xc9\x14\x7d\xd7\xcb\x89\xa1\x60\xed\xc7\x81\x15\xf9\x49\x31\x4d\x92\x11\x16\xe8\x97\x8a\x74\xdb\x20\xeb\x23\x52\xc4\x63\x29\x73\x2a\xd0\xaf\x0e\x40\x6b\xb0\x7b\x18\xc2\x78\x54\x0f\x22\xb4\x74\xa0\x5d\xc4\x45\x94\x13\x0a\x75\x93\x1d\xe1\x37\x88\xe6\xa4\xd1\xa6\x76\xc1\x91\x2b\xa6\xc9\xe5\x08\x0f\xd8\x1c\x46\x40\x51\xe2\x12\x23\x06\x34\xab\x93\xb7\x1d\xed\x4c\xa4\x90\x82\x63\x3a\xdd\xea\xe7\xf3\x39\xa7\x27\x67\x51\xa6\x4e\x53\xb4\xb8\xbd\xfe\x7b\x79\x91\x7d\x26\x66\x64\x86\xdc\x48\xf7\xc9\x8e\x35\xc9\x54\x5e\x18\xac\x03\xc1\x15\x21\x64\x9d\xe2\xdf\x46\x0b\x7a\x04\x88\xce\xd4\x37\xd8\xd9\x98\x40\x87\xa9\x1b\x17\xf8\x1e\xc7\x14\x52\xb5\xa9\x95\x28\x35\xb5\xb5\xb3\x46\x1c\x9d\x19\x1a\xeb\x71\xd2\x5b\xb7\xbc\x76\x7a\xe9\xed\x6a\x6e\x8d\x57\xe9\xcc\x0e\xbd\x2a\x39\x1a\x7c\xd9\x9d\x12\xf1\xac\x4c\xce\xa6\x76\xef\xa1\x57\x65\x84\x2a\x30\x97\x5c\xe2\xa6\xf8\x94\x04\xb5\xec\x13\xf3\x6d\x47\x2d\x49\x49\x4e\x70\x02\xd6\x3c\x63\xf4\xb0\x46\xa1\xd5\xea\x94\xe8\x27\x77\xe4\x23\xa2\x83\x62\x7b\x31\xc3\x88\xf2\x7d\x88\x19\x98\x2d\x93\x02\xe2\xe1\xe5\xb2\x26\x5c\x37\xe2\x1b\x23\x86\x5f\x62\x2f\x9e\xa7\xa4\x63\x51\xa0\x1a\x94\x6b\xa1\x59\x53\x5b\x18\x28\xf1\x05\xf2\x01\x48\x44\x72\x47\x4a\xbd\xfa\xdb\x76\x36\xb6\xa7\xc2\x21\x9f\x52\xd4\xbd\x61\xa1\x61\x2e\xe1\x37\x98\xf4\x0f\x48\x13\xbb\xba\xf6\x4e\xdc\x4a\xf5\xf6\xa2\x37\xb1\x90\x56\xb5\x23\x9e\xe8\xa5\x1c\xa0\x52\x7f\x9a\xae\x41\xdb\xee\xc6\x8c\x3d\x65\x70\xd6\x5f\xe0\xd0\xb5\x39\x20\xba\x9a\x99\xe3\xc1\x0c\x82\xa8\x3b\x53\xa1\xf6\xa8\x43\xcb\xc9\x12\x2c\x6c\xdc\x9a\xed\x97\xe5\xf5\x52\xcf\x2a\x88\xbe\x0c\x16\xcc\x78\xc8\x17\xf8\x68\x65\x4e\x4b\xab\xa2\xac\xac\x07\xa5\x62\x92\x30\xeb\x2f\xfe\xe0\xe3\xdb\xb0\x1e\x9b\xa4\x25\xd6\x1d\x98\x3d\xcd\x55\x78\x7e\x3f\xff\x64\xfa\x84\xb6\x2e\xf6\x88\xb5\xf5\x9a\xb7\xa7\xcc\xb1\x0a\x73\x89\x4c\xc6\x1e\xc9\x55\xb3\x10\xbe\x02\x72\xf6\x65\x70\x8e\xfa\xd2\xa8\x06\xf6\x78\x80\xed\xc7\xb2\x15\x9e\xd3\x4f\x63\x67\x07\x17\xdc\xcd\xb8\x4a\xfb\x8d\xe8\x02\xc6\x81\xce\xd2\x0f\x8c\x91\x47\x8a\x01\x49\x9d\x3d\x1c\xb0\x0b\x6f\xa4\x67\x4c\xba\x67\x05\x98\x34\x34\x49\x45\x62\x6e\x61\x71\xf5\xb2\x4d\x96\xf3\xf5\x81\xf4\x33\x21\x6d\x4f\x84\x35\x69\xf0\x7c\x44\x17\x2a\xf9\x33\x55\x85\xc6\xe2\xcf\x29\x5a\x46\xe1\xe0\xea\xf6\x79\xd8\xde\xa6\x82\x8a\x67\x98\xab\x96\xa8\x80\xd1\xe1\xe7\x00\x01\x33\x61\x36\x51\xd1\xfc\x29\x57\x65\x51\x03\xff\xc0\x93\xb6\x7b\xf2\xbf\xa9\x3a\x48\xda\xee\xe3\x03\x4a\x65\x9a\x14\x9c\x0c\xbf\xb0\xb6\xd3\x6d\xc2\xec\x39\x46\x2e\x36\x62\x2b\xa9\xfa\xc7\x72\x42\xe2\x3b\xc7\x9d\x39\x00\xa4\x3d\xfd\xa5\xf7\x93\xac\x57\x6c\x3c\x49\xbb\x0e\x4e\xce\x64\x54\x05\x13\xef\xee\x38\x65\xd9\x55\x04\xd5\x3c\x88\x7b\xf8\x66\x09\xc3\x95\x42\x71\x3e\xaa\x7c\x80\xd2\xc9\xd4\x94\xb4\x9e\xce\xae\x34\x91\xf4\x69\x42\x0a\x3c\xdc\xb2\x5a\x28\x6f\x55\xb8\xd1\x95\x86\x5a\x5e\x9b\xda\x19\xd8\xbf\x8a\x5a\x92\xd7\xb0\xa4\x40\x1d\x90\xcb\x9b\x92\x48\x29\x03\xe8\xd9\xce\x19\xad\x9f\x1e\xa3\x8e\x76\xb4\x6c\x87\xa1\x4a\xf6\xc8\x0c\xdf\xdb\xbf\x52\xe2\xca\x22\x8a\xb6\xaa\x59\xf4\xac\xaa\xb1\x71\x8c\x33\xc2\x9c\x2d\x85\x0f\x7c\xae\x12\xbd\x0c\x1c\x8e\x11\x40\x5b\xda\x1b\xe1\x4a\x99\x70\x03\xed\xa5\xaf\xa7\x93\x23\x0d\x55\xc8\x51\xcf\x96\xc1\x23\x57\xc6\x26\xed\x18\xac\x7c\x5e\x25\x06\x1b\x4a\x91\x8c\x2b\xd2\x73\x03\x89\xa1\x0b\xd4\x8f\x53\x91\x8c\x69\x28\x7e\x9c\x64\x69\xc5\x87\x27\x82\x30\xdd\x67\x3a\x93\xbf\x59\x27\x73\x1a\x62\x90\x33\x70\xc5\x55\x15\x48\x30\x6f\x6a\x4a\xf9\x94\x44\xf9\x23\xcd\xd3\xe7\x65\x18\x83\x64\xc1\x1a\xd5\x78\xec\xdf\xc9\xa7\xb1\x2c\xb3\x1d\xe8\xbc\x93\x80\xcb\x78\x52\x65\xc1\xa7\xff\xa0\x5c\x84\xea\x22\x76\x1a\xb4\x44\x18\x6b\xfc\x21\x8f\x02\x9e\xa6\x02\x63\x3c\x02\xc2\x25\xcc\x14\x55\x81\xc8\xba\xf3\xfe\x75\x35\xb3\xc2\x43\x19\x4d\x8a\x5c\xb7\x86\x8e\xb8\xac\xf3\x2d\xd9\xe9\xba\x74\x96\xcb\x14\x9d\x21\xa8\xb2\x85\x9f\xc4\x01\x5a\x4f\x02\x51\x66\x8f\xac\x8b\xc2\xe2\xda\x53\xa5\x31\xac\x3a\xc3\x7e\xaa\x03\x8d\x62\x8f\xec\xe5\xb0\x1a\x33\x58\x8d\x5c\x79\x66\xb7\x41\xb5\xa0\x3a\x7e\x4f\xde\xef\x09\xa9\x93\xee\xca\x8a\xa5\x4f\x77\x13\x99\x34\x8d\xa3\x9a\x69\x1b\x0e\xd2\x98\xfe\x33\x4c\xb9\xca\x80\x09\xc9\x46\x25\xd1\x94\x62\xd5\x22\xf6\xa5\x27\x42\x1c\xf1\xed\x92\x29\x2c\x8a\x61\x97\x63\x3d\xa2\xdb\x88\x74\xfc\xf1\x3d\x2c\x82\xc0\xf7\x79\x74\x20\xde\xbc\x00\x70\x52\x42\x12\x5e\x4d\x0f\x01\xa5\x8c\x11\x19\x3b\xa9\x10\x52\xad\xb0\x98\x46\x85\xfe\xc5\x51\x68\xcb\x5d\x3c\x1c\x26\xa5\x87\xc0\x4e\x6a\xa2\x4a\x04\xc5\xf4\xd3\x34\xc4\xee\x33\xf2\x3b\x11\x94\xc5\x45\x09\x12\x71\x5b\x08\x07\x03\xb4\x32\x60\xcd\x1c\x1e\xaa\xa3\x05\xd7\x3b\xaf\xc9\xa7\x42\x4e\xac\x7c\x6d\x17\x77\x4e\x63\xaa\xf9\x0d\xcb\x6c\xd9\x30\xa8\x82\x6e\xf4\xbb\x22\x0c\x37\x98\xad\xb7\xd7\x22\x62\xda\xdd\x91\xae\x20\xab\x25\x18\xde\x52\xce\xf8\x01\x39\x0e\xa6\x9b\x03\x2f\x69\x3a\x68\xf0\x00\xd7\x0c\x79\xcf\xc2\x32\xa3\xa0\x03\x2a\x59\xdb\x53\xfc\xfb\x31\x51\x5b\xf0\x23\x91\x4f\xe0\x58\xbd\x30\xa8\x06\xdd\x2a\xc8\xb4\x55\xbc\xa0\x9f\xb8\x82\xe5\xeb\xc2\x4b\x59\xf0\xc1\x63\xe2\xec\x74\x2b\xdd\x75\xc6\x7e\xa5\x6a\x5d\x64\x43\x28\x53\x17\x96\xeb\x9f\xb6\x5b\x91\x1c\x50\x6d\xa5\x20\x2a\x74\x22\xc2\x8d\xa8\xcd\xb5\xfe\xf4\xef\xbf\x06\xeb\x7a\x8d\x2e\xd2\xb9\xc3\x3e\x0e\x78\xf4\x21\x6e\x18\xc0\x0f\x70\xd9\x13\x5c\x27\xb1\x6a\x97\xf8\x4a\xb6\x91\x72\xf5\x30\xca\xd5\x37\x34\x82\x16\xd8\x43\xa9\x0f\xd6\xc5\xda\x63\x6b\xf2\x46\x80\x03\x54\x1a\xb5\xc4\x42\x2b\x4f\xcc\xca\xb5\x01\x7e\x58\x61\x49\x23\x11\x6d\xf3\xcd\xd7\xdf\xfe\xf1\xec\xc0\xfb\xe6\x35\xfc\xff\xeb\xd7\x9a\xc0\xa2\x7d\xe1\xf9\x5c\x23\x3d\xf4\x26\xdf\xe0\x55\x2b\x84\x05\xf2\xa8\x2f\x22\xb2\x04\xa2\xd1\x97\x70\xe8\xee\xac\xcf\x48\xcb\x97\xcc\x31\xef\xd9\xb1\x28\x1a\xf7\xa2\xfa\x6d\x0f\x8b\x6a\x5f\xf4\x99\x3e\x41\x14\xe1\x74\x64\x3c\xc3\x9c\xe2\x1c\xc4\x4c\x3f\xfb\x8a\xce\x8f\xa3\xd3\x13\x3c\x89\xe9\x50\xd9\x7a\x8d\x8b\xb3\xf0\xc0\x23\xd9\x45\xba\x80\x7a\x59\x50\x99\x5f\x33\xb8\x12\x36\xd4\xa3\xdb\xd7\xf9\x66\xa7\x7e\x21\x12\xb0\x84\xeb\xa8\xe3\x08\xd1\x8f\xa5\x66\x04\x97\x13\xff\xed\xdf\xfd\x3d\xf2\x55\xb1\x57\xa7\x91\xde\xb6\x7b\x53\x20\x5e\x77\x7f\xf3\xb5\x2b\xbc\x6e\xa5\xf9\xbc\xcf\xa3\xb7\xa7\xb5\x39\x56\x4a\x7f\xcf\x5b\xcc\x17\xa5\x18\xda\xc8\x54\x51\xc9\xa1\xdd\xa4\x21\xc8\xa6\xb7\x56\x2d\x3d\x39\x08\x79\x04\x88\xc1\x8a\x48\x5d\x9e\x8a\x18\x77\xd0\x89\xbb\xf9\xa3\x15\xcc\xee\x57\xe7\xf9\xc5\xd9\xcb\xab\x99\xcb\x73\xf3\x5c\x17\x40\x7a\xee\x16\x3c\x7a\xce\x1f\xbc\x4b\x96\x65\x0f\x71\xea\x77\xc3\x2e\xf8\x3d\xf3\x8e\xb0\x92\x9f\x23\x0a\x6d\xec\x2b\x82\x8f\x65\x3d\x54\x17\xf8\xb1\x37\xbd\x3c\xa9\x9e\xb5\x19\x87\x73\xea\x16\x44\x47\x7c\xfd\xc1\x03\x37\x88\x6e\x82\x04\x5f\x87\xd2\xa5\x01\x1a\xcb\x2f\x50\xdc\x13\xba\x64\x58\x42\xaa\x7f\xf7\xad\x05\x88\x56\x70\xb8\x94\x88\x10\x6b\xdd\x32\x7e\x88\x2a\xf2\x74\x17\xed\x16\x56\x92\x63\xaa\x7e\xe4\x75\xd8\x82\xdc\xf4\xfc\xc1\x88\xbb\x85\x78\xd5\x31\x2c\x23\xe0\x79\xdf\xc7\x85\x70\x30\xf3\x45\x4d\x17\xa5\x4d\xc4\xdd\x06\xef\x37\xdc\x30\x64\xe3\xd9\xc9\x77\xa3\xf6\xa6\x32\x07\x89\x4c\xad\x20\xa5\xe7\x18\x2d\x09\xfb\x10\x06\x5d\xcb\xbe\x54\x36\x91\x91\x96\x28\x4d\x37\xd2\x90\xc0\x8f\xdd\xdc\xbc\x24\x32\x58\xaa\xc8\xa3\x07\x58\x1d\xec\xa1\x77\x03\xe7\x6a\x0a\x07\x23\x95\x27\x6f\x41\x7c\x20\x08\xe3\x51\x7d\x94\x22\xe3\x4d\x28\x7c\xc7\x97\x1d\x25\x2a\xc6\xe3\xa8\x1c\x34\x8e\x46\x8e\x9a\x0e\xa4\xcf\xce\xde\x9b\x95\x3c\x63\x25\x71\x8a\x08\xd2\xda\x77\xe4\x3b\xc2\x97\x4f\x88\x85\xf8\x37\x70\xe0\x6e\xcd\xca\x76\x8e\x19\x37\xb6\x26\x41\xc7\x3e\x55\x1e\xf1\x58\x60\xa9\xb9\x1f\xfb\xb6\x23\xee\x1e\x09\xb1\x2a\xa0\x1c\xd0\x73\x0c\x68\x5f\x90\x4b\xe1\xad\xda\x97\x0a\x0d\xb5\x54\x4d\x78\x63\x0b\xba\x9d\x40\x22\x72\x18\x9f\xb4\x9d\xf4\x4e\xb1\x09\x2a\xd9\x54\xc5\x67\x27\xa3\xdc\x79\xbd\x60\x44\x0f\xc6\x73\x64\x66\x89\x0f\xc3\x8c\xb1\xab\xab\x63\x0a\x40\x5b\xac\x58\xb4\x84\xdb\xfc\x81\x53\xd0\xbd\xaf\x39\xd3\xb5\x8d\x6d\x70\x2a\xe3\x9f\xed\x50\x95\xf1\xcf\x0d\xab\xa6\xc0\x42\xef\xfd\x50\xaf\x8d\x10\xee\x56\x01\x70\x23\x48\x04\xb5\x83\xbc\xba\xa0\x2e\x14\x69\xbd\xc3\x61\xed\xdd\x65\x0b\xc1\x86\x3a\x32\xad\x62\xaa\x4c\x32\x3d\x8b\x4b\x95\xfb\x07\xa8\xd9\xa3\x7d\x27\xe3\xf3\x77\x2e\xdd\x46\xbf\x3e\xc6\x62\xe3\xb8\xc5\x23\xed\xa0\xba\x77\x6b\x78\x5a\xae\x59\x61\x02\xa6\x23\xc3\xd5\x81\x46\x8e\xb5\x4c\xda\xdf\x32\xd4\x57\x22\xfb\x4a\x45\x4a\xcf\xa2\x5d\xd5\xc8\xac\x8f\xb1\x3e\x2c\x0d\x4c\x5b\xd2\x47\xa6\x98\x91\x13\x0c\x71\xf6\xf1\x08\xee\x5e\x4d\xbd\xd2\x1b\x42\xac\x11\xcf\xec\x16\x8f\xfb\xf6\xb0\x3f\xc0\x1c\x5d\xfa\x00\x50\xe9\xd5\x63\x87\x90\xd2\x87\x3b\x62\x94\x46\xff\x66\xf9\x1e\xd2\x85\xcc\x39\x3d\xaf\xb5\xf7\xb8\x55\x77\x17\xba\xb6\xed\xfe\x86\xf4\x68\xbb\xd9\xd0\x61\xea\x92\xa8\x6b\x6a\x87\xaf\x99\xbe\xd3\x60\x29\x68\x3b\xb8\xe0\xc6\x62\x1b\x56\xa5\x26\x4c\xe8\x1b\x00\xd4\x75\x0c\xbf\xb5\x16\x0c\x41\xe3\xc5\x5e\x46\x37\x3a\x3a\x97\x71\x57\xde\x6d\xd6\xa7\x16\x74\xcc\x9b\x6a\x9a\x41\xa4\x98\xaf\xdd\x61\x8b\x76\xf8\x6d\x7e\x1d\x44\x3d\xc2\xc9\x48\x97\xa2\x9d\x90\xd5\x23\x5b\x45\x1d\x37\xfa\xae\x0c\xa2\xb9\x1d\x07\x48\x53\xd2\xe5\x94\xc1\x53\x73\x19\x71\xfd\x3c\x77\x35\x75\xc0\xd7\xbf\xa8\x5a\xdb\x59\x61\x92\x4e\x65\x8e\x77\xa2\x55\x77\x17\xba\xb6\x8a\x6d\x18\x92\xa3\xeb\x65\x45\x05\xf9\x6f\x57\x56\x7f\x27\x2e\x01\x41\x28\x98\xa9\x7e\xa2\x5c\x5f\x1e\xa7\x51\x69\xf2\x67\xca\xe4\xaf\xbc\xb4\x71\xa5\x63\xae\x8a\x4a\x3f\xe0\xe2\x0b\x7a\x1e\x0b\xa7\x05\x95\x9b\x66\xdf\xd4\x2b\x87\x85\xb1\xa8\x47\xdf\x3a\x72\x7e\x0a\xa2\x4a\x07\x73\xf4\x8a\xd4\x96\xcd\x63\x04\xda\x61\xa3\x3e\xb1\x3a\x43\x5d\x11\x99\x9a\xd0\x71\xcc\x67\x35\x9d\xcb\x2e\x58\x8c\x9b\x93\x2d\x53\xe9\xf1\xe5\x26\x58\xe7\xfc\x85\x30\xd8\xa3\xd1\x27\xa7\xea\xc8\xf1\x5a\xd8\x82\x34\x04\x1b\xf5\x32\xa7\xa2\x4c\xce\x54\x5a\x3b\x34\x9a\x6e\x4a\xce\xd4\x08\x3f\x77\x40\x79\xf1\xa7\x4e\x0c\xf5\x9f\xcc\xe1\x89\x0a\xb9\xdd\x40\xb7\x7f\x37\x87\x7c\xf5\xda\x9b\x1e\x9f\x9d\x74\x57\x6d\x6f\x69\x61\x07\xfd\xf6\xf8\xe4\xe6\xe2\xaa\x5b\xeb\x26\x7e\xf7\x8e\x67\x1e\x34\x77\x44\x72\x36\x3d\x9f\xbe\x9e\x75\x23\x91\xbf\x0f\x42\xa2\x61\x7f\xe3\x47\x73\x98\x1a\xff\xf8\x0b\xa7\x30\x8a\x0b\x7c\x8d\x53\xbc\x8d\x48\xc1\x92\xd5\xdd\xf1\x6b\x56\x5a\x1d\x5a\x4b\x00\x56\xb4\x35\xb4\xe3\x4a\x93\x2d\x2a\xa4\x77\x9b\x60\x5b\x8a\x57\x62\x58\xdd\x7d\xc0\x44\x57\x97\x33\x61\x87\x98\x66\x6a\x17\x54\x1f\x49\x2f\xa8\x4a\xcb\xae\x65\x9a\x3b\xb0\xb1\x68\xd6\xb8\x48\xb7\x70\x10\xd5\xdc\xc4\x3c\x97\x73\x1d\xc0\x68\x8a\x75\x37\x7e\xb4\x81\xd9\x1f\x1a\xd5\xde\xc8\x1c\x87\xf0\xa0\xe4\x65\xc2\x22\x5f\xf8\x4a\x28\x17\xda\xd2\xb9\xad\xfb\x09\x11\xcf\x53\x4e\xe1\xc6\x73\x91\x08\xb6\x40\x9f\xb2\xb0\xec\x29\x6a\xb1\x97\x99\x95\x16\xe4\x9c\x9d\x50\x42\x13\xc2\x34\x26\xd1\x32\x33\x91\x31\xed\xee\x80\xec\x69\xad\x95\xb5\xdf\xf2\x42\x25\x87\x42\x71\x9e\x80\x4c\x16\xc0\x8b\x94\x52\x91\xb2\xbb\x1c\xee\xe8\x2d\x97\xd6\x24\xe4\x3a\x87\xb4\x3d\x63\x33\x1e\xf5\x25\x0b\xfc\x86\xdb\x44\x37\xc9\x64\xe8\x43\xcb\xc3\x32\x1e\xfa\x02\x47\xa7\x00\x91\x16\x01\xc8\x16\x65\x64\x28\x42\x1e\x5d\x70\xc9\x29\xd5\x63\x75\xb5\x5d\x39\xf6\x52\x9a\xa5\xf7\x41\x37\xa5\x23\x83\x1f\x75\x5c\xb5\xa7\xd7\x3e\xc6\x65\x03\xde\x6a\x5c\x5a\x27\x0e\x57\xf7\x0d\x05\xd8\x83\xed\x40\x59\xff\x68\xe1\x97\x97\xc3\x9a\xe5\x8b\x95\xee\x6e\x50\xdd\x54\x08\x51\x28\x3d\x49\xf0\x8e\x58\xc4\x01\xc8\xc0\x4e\x96\xc1\x4b\x95\x14\x2e\x49\xaa\x33\x85\x22\xca\x31\x51\xdc\x87\x20\x11\xce\xc6\x72\xcf\xa2\xbc\x41\x06\xbd\x6a\x0f\x1b\x1c\x69\x7b\xc1\x61\x6a\x2e\x57\xc8\x1b\x88\x15\xce\x4e\x92\xaf\x76\x6f\x0c\xf4\xfa\x28\x73\x46\x03\x80\x01\xcc\xee\xf5\xf4\x56\xe8\x87\x24\x56\xbf\xe4\x29\x26\xf7\xc5\x8d\x12\xe0\xa9\xe9\x2d\x56\x5c\xc4\x49\xf9\xb8\xa7\xd6\x98\xe2\xfb\x61\xc5\x85\x3b\xb8\xb0\x75\x28\xff\xf1\x50\x89\x7b\x1e\xc5\xb3\x68\x84\x96\xfd\x20\x31\x1f\x23\x7a\x66\x6c\xc9\x71\xaa\x08\x6a\x97\xdf\x88\xf6\xd4\x77\x07\x66\x47\x73\x05\xaf\xe6\xf1\x52\xa5\x57\xd7\xab\xd5\x66\x61\xe9\x92\xb2\x0b\x44\x28\x22\x93\xc2\xaf\x3c\x24\x5c\x52\x7d\x75\x53\xb9\x62\x99\x40\xb2\xed\x9b\x88\x0b\x5b\x38\x2e\xea\x59\x3c\x1c\xaa\xd5\x28\x5e\xb4\x22\xd4\x92\xd8\xd7\xc5\x02\x3f\x05\x5f\x2c\x56\x71\x9c\x55\xb1\x17\x61\x18\x3f\xe0\xa2\x47\x2f\x28\xfc\x7c\xe8\xbd\x8c\xe1\x60\x10\x8e\x05\xe8\xc9\x85\xab\x20\xc1\xdd\x93\xa3\xcf\x30\x70\x60\x8e\xe2\x60\x96\xf1\x32\xd0\x23\xc3\xc0\x0d\x19\x4e\xa4\xd9\x9d\x80\xe4\x8e\xdd\x93\xee\x8b\x2f\xa9\x48\x48\x0e\xe0\x05\x68\xf8\x13\x77\x29\x26\x06\x4e\x0f\xbd\xe9\x7a\x0e\x33\x30\x57\x59\xf7\xa3\xb8\x5c\x48\xdc\xc7\x14\xff\x0c\xd5\x50\x78\x22\x05\xd9\x3a\x56\x79\xf8\xdd\xb6\x2c\xb1\xc4\x8f\xa3\xa7\xdd\xe7\x5f\x45\x78\xe4\x74\xf4\x09\x1c\x42\xe7\xe6\xb1\x25\xd3\x84\x68\x56\xa8\xea\x9a\x34\x7c\x10\x44\xe8\xae\x89\x52\x85\xdb\xca\x6b\x84\xdd\xd0\x9c\x91\xbd\xe1\x01\x16\x41\x95\xbf\xa1\xaa\x28\x59\x4b\xc7\x6a\xa9\x0d\xd8\x27\x2a\x8b\xf1\xd2\xeb\x44\xeb\x5b\x2b\xdb\x74\xd6\x67\xd1\xdf\xe3\x55\xe7\x2a\x5d\x78\xeb\x13\xdb\x04\xbf\x31\x88\x31\xc8\xab\xf9\x03\x92\x27\xa4\x13\x81\xdd\x40\x6c\xe7\x08\x23\x39\x09\x87\xef\xbd\x7d\xd2\x88\xec\x7c\xfb\x64\x4b\xdd\x53\x86\x8f\xa1\x6d\x4c\xba\x98\x53\x57\x9d\x3f\xea\x3e\x90\xd8\x8f\x91\xca\x28\x01\x76\x79\xb1\xcc\x83\x88\x61\x44\x47\x19\x03\x89\x37\xfb\x06\x5e\x95\xde\xc5\xf5\x8b\xee\x30\xc2\xa1\xe0\x6c\xe9\xde\x9e\xf5\x46\xc0\x62\x11\x05\x2a\x7c\xbe\x97\xff\xad\x6b\xa8\x0b\x9a\xf3\x72\xdf\x46\x70\x0f\x5f\xbc\x81\xf7\x5a\x40\x25\x71\x1b\xe8\xcc\x49\xd7\x52\xdd\x06\xc6\x98\xe8\x54\xb9\x9b\xab\x2a\x5b\x7e\xc0\x96\x51\x9c\xe5\xc1\x82\x04\x8d\x2c\xf7\x75\xb1\xf5\x27\xeb\x24\xc5\x48\x1b\x0c\x5a\x2c\x3b\x92\x2a\xa9\xac\xb4\x05\x87\x08\xc2\x67\x3b\xa0\xcc\x17\x02\x11\x89\x19\x10\x99\x17\x92\x5e\xf2\x8e\x9e\x2a\x22\x65\xd4\xd6\xfb\x69\xeb\xb9\xc4\x94\x5b\xe2\xa2\xa7\x82\x93\x1c\x08\x9a\xcd\x42\x91\xe2\xa5\x96\xa5\x89\x63\xc0\x52\xf3\xe5\x23\x32\x48\x20\xa2\xc0\x8f\xb7\xeb\xe7\x60\xf4\xcf\xe2\xd3\x5f\x01\xab\x9b\x40\x40\x03\xc6\xa1\xdc\x8b\x95\xd3\x4b\x76\xc8\x76\x9b\x5a\xa0\x8b\x61\xbf\xae\x2b\x87\x78\x3f\x7e\x88\xc2\x98\xa1\xf1\x54\xee\x6a\xbc\x33\xf9\xba\xf6\xea\xd4\x1d\x10\x03\xc1\xd9\xd0\x4d\x49\x1e\xdb\xd2\x49\x56\x41\xc0\x55\xe6\xd8\x1b\xb4\xcc\xdd\x71\x96\x17\xa9\x8c\x15\x86\x59\x8c\x30\x25\x73\x56\x24\x58\x5f\x05\x5d\x57\xa5\xe8\x40\xc4\x43\xab\x5c\xb8\xd1\xe3\xc1\x86\x32\x93\x66\xa7\x02\x7e\x20\x9a\xf9\xad\xd4\x54\x9e\xd9\x32\xf7\x41\xf9\x8c\x3d\xf4\x66\xb8\xda\xee\x8a\x88\x3c\x1e\x42\x4a\x3f\xbd\x61\x22\x67\x02\xec\x22\xa4\x8b\xac\x9e\x95\x54\x26\x68\x4b\x61\xce\x45\xe6\x62\x10\x5d\xd2\x9a\x68\xe6\xb6\xe2\x48\x52\xea\x0e\x96\xda\x6d\x60\x0e\xbb\x48\x97\xf5\x4a\xc2\xdb\x0f\x47\x5d\x82\x0b\xab\xbe\x16\x14\x65\x2b\x2c\x02\xc2\x1f\x48\x95\x82\xce\x4f\x58\x05\x42\xb9\x2c\x53\xec\x98\xb8\x89\x65\xba\xa1\x6e\xb5\x7a\x31\x17\x67\x06\xb1\x5f\x40\x83\x77\x3f\x15\x85\x00\xd9\x12\xde\xaf\xeb\x39\x46\x93\x31\x6a\x24\x0c\x17\x8e\xd2\xb3\xa0\x19\x73\x72\x88\x72\x62\xde\x33\x14\x66\x91\x78\xfc\x57\x9c\x8e\x6a\x55\x7d\xf5\x42\x53\x1f\xaa\xa4\x19\xae\xbb\x85\xa0\xf9\x19\x66\x45\x21\xc2\x3b\xab\x80\x35\x41\x1a\x93\x4d\x09\xf1\xbd\x63\x74\x66\x08\x48\xd2\xfe\x4d\x96\xde\xb5\xb6\xa5\x91\x43\x44\xa0\x74\x7d\xcd\x3a\xbe\x63\x59\xd7\x04\xb5\x38\xff\xe4\x09\xa4\xa2\x70\x60\xa1\xc0\x3d\xab\x32\x26\xa0\x49\x0a\xab\xad\xc9\xdc\x81\x64\xef\x8f\x29\x89\x2b\xea\xf3\x8b\x30\x17\xf7\x12\x41\x20\x0d\x2c\x5c\x43\xca\x62\x41\x64\x77\x47\x6d\x3e\x3a\xfe\x71\x39\x23\xde\x58\x9f\x93\x37\xe3\x52\x60\xc9\x9d\xad\xd5\x68\xf8\x04\x83\xa5\xbd\x68\xeb\x5e\x1a\x3a\x1d\xe8\xb9\x9a\xfd\xf3\xed\xec\xfa\xa6\xdb\xd6\x79\x7d\x71\x7a\x72\x74\x72\x73\x7b\xec\x62\xf1\xbc\x9a\x5d\x5f\x5e\x9c\x5f\x6b\x22\x51\xb1\x05\x12\x30\x75\x02\x7f\x71\x3a\xbb\xd6\x1d\x60\xbb\x0d\x2c\x60\xdf\xde\xcc\xba\xfd\x21\xb6\x7f\x36\x87\xcb\x19\x8a\xe2\x3e\x47\x53\x1c\xec\xd0\x04\xae\x12\xcc\x14\x4c\xee\xf2\xff\x28\x04\x82\x75\xa2\xcb\xf0\x8f\x10\xe8\xfa\xf6\xe6\x71\x9a\xb2\x54\xf8\xcc\x7b\xab\x82\xa7\x77\x2c\x62\x1d\x40\x1c\x09\x94\xfa\xdb\xb3\x18\xfe\xbe\xd9\x24\xb8\xdc\xd4\x9f\xea\x5c\x06\xa9\x87\x83\x90\xb1\xc9\xa9\x8e\x25\xec\x97\x78\x11\xd0\x16\xa3\x5b\x27\xc8\xff\xb1\x73\x24\x2f\x25\xfd\xe5\x80\x40\xdc\xd1\x23\xdb\x50\x56\x4e\x10\xc6\x28\xbd\x0e\xdc\x36\x9f\xfe\x02\x18\x11\xa1\x8f\xe6\x90\x4f\x7f\x09\xff\x71\xff\x43\xee\x1e\xd0\x2c\x42\xe1\x1a\xe5\xb2\x5f\x8a\x00\xc3\x99\xe4\x0c\xf5\x8d\x6b\x00\xd1\x52\xbf\xdb\xe2\x83\xdd\xc8\x19\x2e\x82\xdf\x95\xe6\xfb\x22\xf4\x77\xb5\xc8\x39\x15\xf6\x3a\xe7\x0f\x3b\x3f\xfd\x23\x56\x31\xfc\x83\xc6\xe0\xf3\x19\x49\xb1\xe5\x57\x02\x72\x22\xdf\xf1\x31\xdf\xb5\x51\x10\x91\x47\x61\x5c\xf8\xde\x2b\x7c\x20\xa4\x9b\xee\x69\x47\xd9\xb3\xb1\x8e\x31\xd1\x27\xf9\xa0\x57\x35\xbe\x30\x05\xd4\x0e\x12\x10\x4f\xba\x50\x58\x8c\x6b\xc1\x83\x7b\xd2\x6e\x57\x95\xd5\x16\xaa\x3c\x5a\x2e\xb3\x6f\x69\xe6\x6e\x11\x80\xe0\x59\xf5\xd8\x2e\xa8\x06\x34\xba\x51\x55\xc0\x2b\xf3\x9e\x87\x1b\xf5\x42\xaa\x92\x8e\xe2\x91\x01\x82\x63\xe8\xcb\x7a\x59\x59\x0b\xb7\xa9\x16\xc8\x1c\x1f\x58\x4a\x68\x5d\x33\x4a\xb9\x26\xd5\x0f\x42\xf8\xde\x8a\x19\xd1\x8d\xf2\xb3\x92\x63\xc1\x37\x49\x5c\x52\xa9\x02\x45\x22\x39\xcd\xd8\xfa\xbb\xd8\xe3\x97\x09\x7c\xb1\x3a\xa0\x2c\x46\x8c\xce\xc6\x3a\x22\xe0\x5d\x43\xaa\x8d\x34\x78\x4f\xd9\x4c\x08\x80\x5f\x39\x0e\x0f\xa1\xa6\x48\x65\x16\x77\x49\x4c\xa4\x7d\x6b\x55\xc4\x48\xf7\x25\xec\xee\x8b\xbf\xdd\xb2\x63\x29\x42\xa8\xb2\x41\x2d\x7e\x5c\xa8\xff\x61\x1d\xf4\xce\x8e\x41\x4f\x6b\x6a\xa2\x86\xcf\xb7\x11\x3b\x5a\x1c\xbd\x07\x11\x80\x4f\x0c\xa7\x45\x12\x63\x12\x48\xea\x3e\xc2\x12\xd9\x8e\x51\xc0\x93\xf6\x0d\x4b\xeb\x47\xf9\x76\x04\x34\xca\xf6\x3b\x2e\x83\xcf\xe5\xaa\xc5\x83\x1a\x3f\x28\x11\x27\xc3\x6f\x8e\x84\xe9\xfd\x16\x46\xa8\x57\x45\x08\x92\x28\x35\x7b\x9b\x5f\x7d\x83\x36\xe1\x8c\xb2\x43\x1c\x37\x27\x6e\x11\xaf\x63\x3d\x79\xf6\xbc\x4c\x1b\x45\x41\x05\x03\x29\x7b\x2a\x96\x93\xa1\x85\x2b\xd0\xd4\x98\x28\xbe\x06\x6a\x9b\x94\x8a\xaf\x89\xde\x41\x8c\xc4\xf5\x52\x11\x54\x5b\x32\x3b\x24\x55\x79\xb6\x4d\xa9\xfa\x02\x39\xf8\x48\x8c\x6a\xc1\xbc\x1f\x66\x14\x42\x2c\xa4\xa2\xac\x63\xed\x47\x24\x2d\xea\xd5\x0b\xd6\x59\x53\xe4\x55\x69\x58\xd2\xda\x8f\xb0\xed\x3a\xa8\x18\xca\x24\x97\x21\xb9\x12\x40\xe6\x2e\xd6\x96\xce\x79\x07\x31\x25\x48\x12\xe9\x82\xf4\xd9\x9f\x0d\x71\x1a\x8b\x6f\x3d\xed\xdd\x31\xf7\x66\xce\x37\xe8\xe1\x80\x5d\x1b\x0f\xd9\xd5\xcc\x1a\x4f\x9f\x98\x54\x4d\xa7\xbb\x60\xa4\x30\xe9\x4a\x21\x28\x4c\x2a\x85\x81\x2b\x22\xa9\x64\x6f\x6e\xda\xf2\xb1\xb8\xef\x83\x44\x8c\x01\xb7\xdd\x0e\x0d\xac\x49\x42\xe3\x0e\x7a\xc4\xa3\x44\xb2\xa8\x4a\x50\x2a\x1e\xd8\x2f\xd5\xdf\xdb\x1c\xdb\xfa\xc1\x74\xf8\x7d\xf0\x99\x01\x78\xfb\x51\xb5\x84\xc8\x34\xb9\xee\x3a\x9b\x6d\x53\xb5\x35\xa1\xa3\x4f\x51\xf3\x20\x93\x7c\x34\x1c\x97\xfe\xdc\xb0\x85\xbe\x3b\xb4\x31\xc6\xb5\xa3\xea\xd8\x56\xe9\x3c\x82\x14\xbe\x7f\x92\x46\x15\x96\x14\xb9\x0a\x11\x6a\xc6\x6a\xb8\x2a\x6a\x6b\x5f\xb6\xd1\xea\xcc\xa7\xa1\x88\x47\xe5\x46\x12\xeb\xfd\xe1\x5a\x5a\xd8\x43\xf7\x26\x1e\x15\xf9\x50\xc5\xfb\x48\x32\xfd\x19\x93\xec\x91\x35\xc8\x48\xf9\xe2\x0e\xca\x8a\x5e\xd1\x59\xe3\x4c\xd1\xde\xc8\x02\x07\x86\x84\xf4\xca\x0c\x29\x9f\x50\x3b\xf2\xd6\x18\xa6\x51\x51\x21\x28\x8f\xf8\x32\x97\xd4\x2f\x25\xf5\x6d\xf2\xbf\xc3\xbd\x3d\xca\x7a\x17\xe1\x5d\xbd\x12\x9b\xf2\xb3\x1d\xc8\xf8\x94\xfc\x15\xea\x09\x5c\xaa\x12\xd1\xb2\x82\x43\x19\x5f\xd6\x14\x74\xcc\xef\xa2\xfd\xa0\xb1\x18\x67\x9e\x06\x5c\x68\xa9\x82\xc8\x0f\xee\x03\xbf\x60\x61\xe9\xd5\x83\x0e\xe3\xc2\x42\x05\x04\xe5\x45\xb7\x43\x81\x33\x1c\x17\x4a\x7d\xaa\x04\x11\x62\x4e\x80\x15\xf7\x2e\xa6\x65\xcd\xa4\x32\x98\xa2\xac\x5e\x29\x92\x1d\x98\x90\x3d\x00\xe8\xf0\x31\x2c\x83\x7b\x4e\x8b\xfa\x69\xe6\x2d\x8b\xc0\x3f\xf4\xbc\x29\x26\x15\x25\x47\xd5\x15\x67\x21\x10\x43\xd9\xf7\x88\x7b\xe8\xbb\x97\x14\x55\xe8\x08\xd5\x20\xc8\xc8\xeb\x2a\xe5\xe8\xc3\xaf\xbb\xc7\x1e\x9d\x82\xb1\xb8\x03\x07\x4e\x1b\x6d\x5b\x94\xe0\xb1\x34\x0e\x2f\x86\xe3\x1b\x6b\xe4\x52\x36\x33\xa0\xa6\x7c\x7d\x8f\xc2\x81\xf1\xf0\x8e\xcc\x89\xc9\x7b\xbe\xf9\x5c\xdc\x18\x09\xf7\x68\x1c\xc1\x82\xa8\x25\x3d\xdd\xe4\xa8\xea\xad\x63\x30\x62\x0c\x94\xf6\xe3\x2f\x5d\x95\x6b\x77\x4a\x56\xbf\x54\xf0\x47\xce\x16\x22\xcc\x69\x22\x7c\xe6\x45\xdb\xfe\x91\x8e\x02\xdc\x7e\x4c\x6d\xd1\xa8\x03\x62\xb5\x47\x83\x3b\xce\x48\x06\x44\x67\x8f\x06\xd7\x76\x24\xf4\xc6\x2b\x67\x1c\x0d\x92\x38\xe1\x98\x80\x49\x4e\x77\x66\xa9\x41\x19\x05\xea\xb0\x51\x00\xdc\x57\x02\xcd\x2b\xc0\x6a\xad\x03\x1a\x0c\xd1\x85\x7a\xb7\x15\xec\x3a\xb2\x7d\x60\x1b\x6b\xd4\xfd\xab\x7d\xcc\x51\x0f\xc5\x66\x37\x6a\xb9\xc1\xd3\x22\xac\xd5\xb6\x16\xd7\x67\x33\x9f\xeb\xb6\xc3\x5c\x19\x82\xa8\x1f\xe7\x98\xf0\xcd\x47\xa6\x6c\x54\xdf\xc5\x59\x2e\x95\xba\xf0\xd7\x31\xa5\x47\xaf\x3b\xb3\xea\x1d\x59\x5d\xc1\x8c\x4f\x67\xbf\xd3\xed\x10\x50\xf6\xf4\x0a\xd3\xa4\xa1\xab\x3b\xf6\xaa\x19\x34\x07\xfb\xb4\x13\x15\x1a\x74\x8e\xa9\x99\xaf\x70\x89\x6a\xa0\x86\x4e\x19\x69\xae\xe4\x19\x36\xab\xed\xe6\x37\x6a\x37\xbf\xa6\xa5\xaf\xf1\x3a\xb6\xea\x6c\x4c\xd3\xf5\xec\xe8\xf6\xea\xe4\xe6\x7b\xef\xf5\xd5\xc5\xed\x65\x27\xf6\xd7\x57\xb7\x97\x17\x98\xa7\xed\x7a\xf6\x1a\xda\x1f\x4f\x8f\x9d\x70\x5d\xbd\x39\x39\x9a\xf5\x64\xb6\xeb\x68\x65\x8b\xa5\xdb\x0f\x7a\xb7\x81\x39\xec\xcb\x69\x3f\xfd\x6d\x6d\x6c\x31\x18\x67\xe7\x3b\xf5\xa8\x87\x33\xa6\xe3\xd9\x9b\xd9\xe9\xc5\xa5\x26\x49\x5f\xd9\x62\x04\x6c\xe6\x09\x01\x07\x62\xd2\xcc\xfe\xd6\xcf\xe6\x70\x17\x2c\x7c\x64\xdd\xef\x2c\x03\x9c\xed\xae\x56\x9f\x47\xe7\x7b\xad\x2e\xea\xbe\xd3\xea\x75\x5a\x24\x2a\x97\xd6\x12\xba\xf8\xcc\x77\x3a\x9d\x9a\x59\x73\x61\x10\x4a\x54\x78\x47\xdf\x98\xdf\x89\x03\x20\x8d\x49\x2d\x7c\x47\x75\xb3\xdf\xad\x7b\x8b\xcb\x0d\x84\x66\x41\x35\x15\x7d\x52\xee\xb3\xcf\x40\x2e\x23\x05\x01\x3a\xff\x71\xca\xd9\x94\xbd\x0f\x92\xaf\xba\xe7\x7a\x26\x72\x8d\xa8\xdc\xd7\x00\x81\x00\x04\x94\xe2\x5a\x00\xa1\xcc\xd7\x31\x25\x21\xf9\xca\x6d\x1d\x08\x1a\xc5\x4e\x1b\x40\x22\xed\x9a\xbd\x10\x48\x25\x15\x69\x36\x0e\xd4\xd3\x0c\x0b\x49\xbf\xf0\xfe\xf8\xf5\x1f\x5e\x78\x53\x51\x9f\x2a\xc0\x2d\x11\x05\x18\x8a\x4b\xc5\xb1\xfc\x98\x16\x1c\x25\x3e\x4e\x40\x40\x0e\x80\x4e\x11\xa3\xc9\x7f\x85\xc9\xa6\xc8\x8e\x20\xeb\x4f\xfc\xf2\xd8\xe8\xc7\xe0\x0b\x2c\xde\x59\x9a\x5e\xd3\x57\x47\xf0\xcd\xc7\x8f\x07\xa2\x5d\xe3\xf7\x69\x12\xcc\xf0\x4b\xd5\x62\x5d\x2b\xb9\x08\x3f\x34\xa2\x34\xba\xa7\x9f\xc0\x2a\xad\xa1\x8f\xa4\x00\x8e\x60\x29\x8b\x59\xe6\xcc\x8f\xdb\xe9\xa9\xb5\x42\x10\xdd\x44\x45\x19\xfb\xb9\x8f\x28\x2b\xa6\xa1\xb6\x92\xac\x1e\x37\x64\xf5\x00\xc0\xa7\x6c\xce\x43\xb1\xe9\x55\xbc\xb2\x45\xb6\xd1\x51\x60\x5a\x8f\xe0\x65\xe9\xcc\xd1\xfa\xec\xe8\x27\xd7\x1c\x80\x35\x6d\xca\xac\xa7\xb2\xc0\x92\xab\xab\xca\xab\xde\x4b\x98\x61\x6f\x6b\xaa\x7a\x0b\x54\x58\xb3\x70\x00\x44\x67\xea\x5f\xec\x78\xae\x18\x93\xa9\xeb\x6a\x4d\x4f\x57\x61\x90\x96\xac\x6f\xc6\x15\x42\xfa\x39\xbe\x67\xac\xd6\x5c\x28\x23\xc6\x9a\x04\xbc\x8d\x6e\x4e\x2e\x5f\x78\x27\x77\x98\xc8\x86\xf2\x90\xe5\xe9\x86\x34\x51\xb1\x0c\x39\x63\xde\xfd\x37\x3b\x71\x67\x07\xd4\x9c\xca\x3a\x62\xc9\x41\xd4\xcd\x4c\x12\xd2\xa0\xf6\x73\xe6\x33\x50\xe2\xce\xad\xb2\xda\xbe\xf9\xb0\x5a\xba\x58\xe3\xdf\xf1\xf9\x32\xdd\xf0\x33\x5d\xd8\xde\xa0\xcc\xd2\x12\x54\x7d\x6b\x9a\x5d\xbc\xe6\x1d\x6d\x69\xe9\xd6\xce\x5c\xab\x2a\xc7\x03\x80\x6b\x62\xcb\x15\x74\x37\x29\x31\xdf\x8e\x80\x12\x7a\x50\xbd\x0b\xcd\x91\x4a\x5c\xdd\x15\x0e\x25\xc4\x57\x77\xff\x1a\xa4\x0b\xc8\xb8\x0f\xf8\x43\x95\x1d\x2e\xc0\x10\x34\x0d\x1f\xfa\xbb\xb8\xe1\x5f\x55\x35\x7a\x1a\x35\x03\x0d\xd8\x13\xc3\x61\x00\xe2\x9c\xa8\x1f\x29\x6a\x16\xee\x54\x16\x72\x29\xfc\x01\xf4\xc9\x64\x29\xf5\x68\x38\xda\x65\x33\xf9\xa7\xfe\x21\x5f\x92\x18\x51\x9a\x4e\x09\x01\xc1\x31\x0d\x10\x6b\xfa\x1a\x0b\x0b\x33\xf5\x94\x41\x5b\x54\x93\x44\x7e\xf3\x86\x85\x05\x17\x59\x84\x76\xab\x74\xee\x55\x9b\x21\x8b\xaf\x74\x86\x99\x6d\x91\xcc\x76\x28\xa6\x75\xfe\x25\xa9\x43\x04\xdf\x3b\xf2\xb5\x74\xf9\xb9\x9a\x99\x86\x9a\xec\x6a\xcd\xa2\xc1\x5a\xc7\x3d\x96\xe3\xb7\x1a\xdd\x48\xa6\xcb\xa1\xe0\xac\xe9\x7e\x04\xa3\xe5\x3e\x51\x8d\x32\xde\x91\xcd\x95\xfb\x44\x65\x3e\xde\x15\x55\x3f\x27\x8d\x05\x26\x0b\x10\x95\x8e\x85\xa5\xb0\x27\xa8\xc7\xa6\xab\x15\x3d\x42\xa6\x25\x60\xdb\x96\x36\x99\xc8\x6a\xc0\x49\x30\x3e\x02\x8b\xb1\xc5\x0f\x55\x62\xae\xa6\x9d\x56\x43\xaf\x49\x27\x4b\x1a\xc2\x70\xab\x5a\x98\x81\xe0\x74\x26\xa5\x01\x34\x33\x66\x70\x56\x66\xb5\xee\x23\x4a\x4f\x48\xdf\x8a\x87\x1a\x3a\x62\x24\x03\xc8\xdd\x14\x6e\xf2\x07\x62\x08\x22\xcc\xbc\x2e\x1c\x8f\x69\xec\xd2\xa7\xeb\x19\xab\x9c\xbb\x70\x65\xf3\x09\xc6\x3a\xe5\x22\xc7\xbe\x28\x17\x77\x00\x9d\x55\xce\x28\x5c\xe6\x09\x4f\x99\x38\x8b\xe5\xcf\xa2\xb8\x10\xc3\x5a\xb6\xc4\xd1\xac\x3b\x53\xd5\x67\xa5\xc5\x8e\x63\xe4\x0d\x0a\x94\xf6\xae\x0f\x6c\x84\x0b\xc2\x75\xff\x4b\x5c\xa8\x03\xca\xbc\xf9\x86\x22\xa9\x7b\x91\x62\x8e\x4d\x19\xe7\x9c\xa9\xb8\x04\x84\x82\x75\x69\x00\x80\x2b\x21\x94\xa4\xc6\xe7\x39\x0b\x42\xb9\x47\x70\x7d\xe7\xc1\xa2\x08\x59\xba\xf3\x84\xd6\x4f\xb3\x2b\x2c\x3b\x8a\x85\xf4\x64\x35\x51\x24\x0d\xb9\xe2\x4b\xf9\x82\xaa\xcd\x80\x18\x29\xca\xd5\xf7\xa2\x55\xa5\xe9\x53\x92\xc6\x72\x9e\x0d\x8b\x23\x21\x2a\x76\x34\x3f\x5a\x06\x98\x74\x71\xc3\x8f\xca\x2a\x73\xd4\xbb\xad\x2d\xb1\x92\x44\x6e\x80\xaf\xa5\x9d\x0b\x26\x83\xb5\xd5\xd3\xda\x05\xeb\xd0\x83\x40\x82\x19\x76\x12\xe0\x99\x5a\x06\x49\x2c\x98\x28\xb8\xf2\x88\xcf\x3d\x71\xe9\xd1\xdb\x05\x1f\x24\x5c\xd8\xb2\xbf\x2c\x73\xb6\x64\xd3\x6e\x44\xc5\x38\x4f\x63\x33\xf1\xae\x62\x54\x06\xef\x5c\xf8\x67\x23\x6d\x52\x9a\x4c\x2b\x9f\x21\x54\xfb\x5a\xab\x84\xb9\x76\x74\xcf\xa3\x7e\xde\x48\x89\x54\x87\x01\x73\xa1\x59\xa3\x28\x6c\x6d\x64\x89\x63\x50\xd5\x48\x17\x10\x96\xf4\x6d\xaf\x7a\x9b\x69\x32\xec\x6b\x47\x51\xcf\x7c\xb8\xcd\x04\xa6\x58\xdf\x90\xec\x83\x55\x5b\x30\x53\x35\x8a\xb3\x94\x95\x15\x80\x1f\xa2\xdd\x82\x7e\x42\x1d\xbd\x4c\xc8\x8e\xf5\xc5\x55\xbe\x62\xd1\x1c\xed\xe8\x32\x8f\x2b\x56\xf5\x93\x07\xf3\x43\x9c\x52\x4a\xb6\x32\x57\xb8\xe6\x15\xd8\x4b\x47\x17\x21\x4d\xfc\x88\x3e\x8d\xe3\xbc\x9e\x5a\x7e\xb7\x42\x5f\x59\x80\xcf\xef\xb0\x18\x68\x33\xef\x5f\xd3\x23\x20\xa7\x6a\xcf\x8f\xfe\x40\x21\x5c\x8c\x2a\xb0\x3f\x2b\x64\x80\x0c\xa6\x1b\xc7\xcf\xb2\x9a\x75\x3d\xfd\xfd\x86\xe1\xf6\x80\x23\xb8\x08\xb0\xec\x3c\x11\xb2\x21\x9d\x5b\xad\x83\xa4\xe8\x1e\x1a\x60\x16\x4f\xaa\x92\x03\xdd\x60\x12\x53\x7a\x57\x3a\xbf\x53\xa4\xd2\xc4\xc9\x25\xd4\xae\xb3\x0d\x4d\xfd\x61\xbd\x27\x14\xd4\x3b\x44\x08\x16\x58\xe0\x6e\xc3\x02\xd2\x71\x91\xbf\x8d\xa4\x19\xb0\xa5\x2e\x3f\x2e\xf6\x75\x9c\xf2\xfa\xc3\xb3\x93\xb4\x9b\x80\xaf\x13\xe9\xda\x81\xd3\x26\xde\xf7\x70\x0d\x82\xec\xfe\x21\x96\x41\xd4\x35\x6c\x1d\x85\xfa\xd7\x2c\x53\xe8\x16\x8e\x67\x24\x0d\xb1\x88\xaa\x82\x16\xa3\x8d\xf1\x48\x8d\xe6\x2e\x65\x0b\x96\x81\xb0\xf0\x68\x03\xe2\xbe\x30\xe7\x89\xcf\x3a\xe3\x9f\xbe\xb5\x1d\xd6\x47\xf6\xbc\x04\xde\x01\x7b\xdb\x13\xe7\x7c\x3e\x71\x15\x19\x51\x24\xca\x1f\xeb\x40\x58\xbd\x63\x2f\x2a\x30\x8e\x22\xc6\x14\xe0\xe2\x0b\x95\xf2\x5b\x04\xe8\xcb\xe6\xba\xb1\xd2\x40\xa9\xbc\x3a\xda\x36\x0f\xca\x3a\xf9\x54\xc5\x8f\xc0\xd3\x0a\x22\x04\x5c\x14\x06\x93\x25\xc1\x54\x19\x5d\xbc\x49\x2a\x08\x6e\x83\xd3\x14\x92\xdb\xfa\xd5\x0a\x6a\x91\xa9\x25\x98\x6b\x1d\x51\x34\x4d\x2d\xf0\xc5\x49\xdf\xd1\x79\x39\x50\xdd\x08\x28\x92\x47\xde\x0e\x48\x72\xd7\x5e\xf8\x1c\x1b\x61\x93\x61\xad\xb7\xe3\x14\xd5\xe1\xb7\x1a\x2b\x35\xfc\x26\x56\xae\x0f\x28\x61\xdd\x8a\x8e\x6e\x18\x41\x0e\x98\x48\x27\x39\xbf\xfb\x4e\xa6\x16\x59\x1e\x4f\x60\x5f\x4c\x78\x38\x91\x02\x84\xcb\x3d\x8c\xa7\xb9\x26\x51\xfc\xf6\xcf\x96\x70\xe1\xef\x5b\xbc\x84\x8e\x5e\xbd\x3b\x9f\x9e\xcd\xa4\x70\x38\x41\xd5\xc5\x44\xf9\xb1\x4d\x54\xcc\xb9\x28\x62\xfa\x5e\x68\x36\xca\x9f\x95\x56\x28\xab\xd5\xc5\xc2\x82\xbd\xa4\x66\xe8\x16\xff\x1f\x1d\xbf\x15\x67\xbc\x23\x59\x28\xe5\x21\x80\x63\x8f\xca\xc3\x83\x58\xbc\x11\x4e\xb1\xb2\x68\x8a\x32\xed\xd5\x04\x66\x14\x2f\xf3\x80\xc2\xd9\x36\xe4\xc1\x24\xab\x5f\xeb\x22\xbb\xf7\x8d\xce\x6e\xdc\xe7\xb1\xdc\xb7\xca\xfb\xe2\xa0\x92\x52\xee\x44\xba\xcd\x9a\x44\x81\x05\x2a\xe4\x3b\xb2\xc7\x3d\x63\x5c\xe0\x76\x63\xba\x95\x38\xa6\x49\xd0\x04\x8f\x0f\xe2\x20\x2a\x78\x69\xfa\x83\xc7\x31\xda\xa9\x38\x95\xf3\x52\x1e\x1a\xfa\x31\xdd\x2a\x41\xab\x09\x5d\x4a\x9b\x04\x9f\xa1\x33\x33\x95\x9d\x29\x9d\x3e\x10\x3e\x22\x5b\x16\xa9\xcb\x35\xd9\x18\xd6\xd1\xab\x12\x6f\xe3\x58\xa6\x21\x72\x90\x3b\x61\x3c\x54\xa4\xae\xe1\x18\x52\x56\x02\xc2\x0d\xc5\xef\xf0\xea\x36\x1c\x68\x0d\x9f\xf2\xc5\xa0\x81\xb0\x34\xe3\xf4\x2e\xa2\xba\x61\xb2\x2a\x10\x5c\x0d\xa8\x49\x6b\xb5\xb8\x01\x65\x39\x3a\x42\x91\xd8\x60\xff\xbc\xdc\x62\x82\xcc\x03\xb5\x25\x4b\xb3\x68\xe3\xcd\xa9\x4e\x16\x9e\x06\xe3\x72\xe4\x46\x1e\x47\xb0\xfd\xb2\xd6\xee\xb5\xe5\xfd\xea\x36\x9a\x07\x91\xdf\x5c\x7f\x05\x7d\x57\xcf\x4d\x71\x20\x5b\xbf\x14\x6d\xab\xa6\x29\xc7\xa6\x07\xa2\x54\xd7\x0a\xb8\xda\x35\x68\x04\x9b\xf8\x4c\x96\x83\xc0\xab\xba\x0c\x9e\xc5\x62\x50\x0d\xeb\xe9\x50\x9e\x37\xb0\xee\x63\xa5\x75\xac\xb3\xb6\x55\xd6\x69\xd7\x5d\xb1\xa5\x7e\x91\x19\x6c\xb5\xea\x94\xba\x25\xde\x96\xf9\x21\x3b\x18\x1f\x64\x06\x49\x69\xb7\xde\x69\x1a\xd0\x62\xf0\x8b\xbc\x60\x61\xf0\x01\xa3\x55\x32\xac\xa1\x32\x20\x8d\xed\x0d\x5c\x94\xe4\x52\x57\xb3\x84\x81\x48\x64\x64\x4e\x17\x7d\x2b\x1f\x3b\xec\x36\x92\x49\xec\xa6\xee\xf1\x57\x97\x26\x35\x02\x10\xb4\x69\x38\xf6\x75\xf6\xb3\xa7\xa2\x4d\x80\xd5\x15\x1d\xdb\x76\x32\x8c\x35\x7d\xcd\xa9\xa1\x7a\xea\x6a\x3f\xb7\x08\x01\x55\x10\x02\xcb\x6b\x19\x61\xe0\xb4\xe0\xbf\xd2\x71\x21\x0c\x85\x39\x46\xd2\xcb\x8a\x70\xa5\xe9\xb0\x45\xe5\x57\x85\xda\x63\x6e\x40\x82\xd2\xbd\x14\xbe\x24\xda\xcc\x39\x0a\x00\x48\xeb\xf8\x9b\x2a\x39\x3a\xa3\x38\x27\x3c\x39\x5a\xd5\xd0\xb0\xa2\x7d\x2e\x12\xe8\xc8\x4a\x15\x95\xa2\x56\x27\x9a\xef\x0b\x8f\xd5\x48\xe3\x14\x61\xa2\x7b\xd3\x2a\x58\x08\xee\x95\x27\x87\xa8\x3b\x4e\xc5\xfb\x61\xb9\xfb\x45\xda\xcc\xc1\xcb\x0a\x78\xc1\x60\x45\xff\x85\x56\x0b\x75\xca\x3c\x4c\xe0\x48\x65\xeb\x44\xa9\xf1\x38\x4f\xe3\xda\x09\xe8\x72\xcf\x10\x0f\x50\x22\xab\x0a\x20\x33\xd2\x9f\x05\xa5\xbb\x34\x26\x39\x4a\x97\x9a\x17\x86\x0b\x0c\x2b\xde\xf6\x40\x17\x85\xd9\x34\x8e\x68\x4e\x30\x06\x51\x08\xbb\xd5\x95\x8b\xb4\x8a\xcb\x42\x47\xb0\x3b\x3b\xd3\xd3\xf6\xf3\x9b\xf6\x3e\xdc\xcd\x8c\x56\x16\x95\x57\x9e\x73\x14\x15\xb1\xc6\xb5\x38\x2b\x00\x08\xaa\x84\x1d\xcc\x0e\x46\xe3\x36\x9f\x1b\xa7\x71\x1b\xf0\xd9\x66\x38\x5b\x75\x08\x1a\x88\x50\x38\x39\x94\x5a\x5f\xf1\x8c\xa4\x4d\xbe\x8a\xb3\x1c\x0d\xbd\xe2\xd0\x9c\x44\xde\x77\x17\xd7\x37\xf4\xc6\x06\x6a\x50\x9e\x99\x4c\x48\x9b\xb3\x9e\x08\xe0\x20\xbe\x2c\x79\xc4\xd3\xea\x24\x16\xdf\x97\x02\x67\x42\xd5\x39\xf5\x15\x62\x4f\xd9\x56\xad\x82\x32\xb5\x07\x16\x80\xc5\x12\xc3\x59\x5c\xd2\x8a\xb2\x9b\x28\x31\x46\x19\xad\xc9\x07\x1c\xa9\xa6\xc7\x52\x83\x60\x21\x25\x6d\x11\x4c\x42\x91\x20\x39\xad\xd5\x27\x25\xfc\x1b\x2f\x2c\xf8\x12\x5f\x18\xf3\x00\x8b\xc8\x0e\xab\x1c\x0b\x33\x80\xfe\xa2\xf0\xff\x28\x2e\x6f\x39\x75\x4f\x49\xcf\xd7\x80\xac\x3f\xdd\x9c\x39\x47\x41\x74\xa3\x7a\x05\x8c\x64\xd6\x35\x9a\x9f\x98\x0a\x3f\xdd\x02\xe0\x40\x5e\x1e\xe3\x8b\x04\x5e\x3c\xa2\x1a\x24\x3d\x77\x64\xae\xb8\xb2\xdc\x7a\xbe\x49\xc8\xf8\x47\x0f\x02\xa6\xab\xe9\xfe\x1d\xd0\xbb\x2e\x16\xb8\x39\xe3\x04\x4f\x77\x18\xab\x30\x21\x08\x47\xc6\x03\xd2\xfa\x8a\x7a\xbd\xc0\x11\x54\x0b\x57\x93\xe9\x3e\x10\xe4\x64\x24\x63\x80\x13\x9e\xa2\xa5\xa2\x56\xae\xca\x8b\xc5\xd3\x07\xd3\x12\xdf\xa6\x21\x48\xc7\x2f\xba\x33\x0b\x3b\x02\x74\xd9\xa3\x18\x54\x2d\x1c\x73\x31\xbb\x1e\x3a\x18\xc3\x8b\x73\x01\xd7\x60\x56\x6e\x7d\x58\xf8\xc7\x58\xa8\x8f\x56\x4f\x2e\x54\x3d\x69\xad\xc8\x52\x95\xee\x48\xd4\x54\x14\x8f\x3d\x6a\x46\xcf\x4c\x9c\xd8\xda\x7b\xae\xc2\x58\x44\x29\xa6\xc1\x43\xb9\x02\x70\x4c\xc5\x23\xcc\x53\xaf\x31\xef\x81\x45\xd2\x1e\x50\x56\x09\x6c\xf7\x21\xfe\xc7\x6e\x4e\xce\x32\xe1\x27\x1d\x44\x01\x15\x6d\x5e\xc4\x6b\xf2\x01\xa4\x40\x96\x9c\x96\x9e\x72\xae\x95\x43\xa5\x12\x89\x51\x18\xab\x52\xce\x9f\xfe\xbd\xd6\x46\x14\x7e\x94\xf5\x0f\x19\x8c\x74\x03\xbb\x03\x9b\xe0\xc3\x6e\x01\xcf\x1c\xaa\x42\x48\xa3\xc5\xc3\x80\xd7\xb1\xa3\xe2\x80\xcb\x92\xe8\x28\x66\x8b\x51\x53\x85\x69\xa1\x4f\x21\x20\x3b\x65\x0c\x55\x77\xcd\x98\x2d\x16\x2a\x4e\xb2\xbc\x06\x30\x30\x2f\x7a\x9a\xab\x02\xdb\xa5\x25\x1e\xcf\x85\xf7\x7c\x93\x69\x34\x7f\x8e\x60\x2c\xe9\xa4\x67\x89\xba\x2f\x70\x37\x33\x55\x1c\xb6\x7c\xe3\x90\xcb\x5b\x1f\xa1\x0e\x70\xec\x28\xa5\xa5\xbe\x60\x78\x39\x29\xdd\x85\xb0\x67\xa1\x4e\xf3\xd0\xeb\x5c\xd8\xc2\xaf\xad\xae\xfa\xd2\x14\xba\xcc\x50\xef\xc7\xf0\x42\x91\xcb\x4d\xfa\x56\xa5\x22\x43\x35\x97\xc5\xca\x77\x97\x92\x70\x5d\x4b\xbb\xf0\x98\x0f\x55\x18\xba\x85\x54\x40\x45\xb9\xbf\xbb\xb9\xb9\x2c\xcb\xf1\x59\x1a\xb4\xb3\x18\x5e\x47\x41\x5e\xf8\xb0\x29\x09\x0e\xcb\x3e\xfd\x95\x6a\x73\x3b\xa5\xbc\xba\x09\x12\xa9\xed\x60\xbe\x3f\x11\xaf\x90\x09\x1e\x8d\x52\x09\xb5\x44\x43\x86\x78\xa2\xe0\xb7\x1a\x62\x1d\xe1\x98\x53\x2a\xdc\x4a\x64\xcd\x53\xa9\x2c\x91\x82\x98\x4c\xe0\x28\x22\x83\x23\x0e\xcb\x93\x94\x33\xcb\x94\xf9\xa2\xc7\xd1\x2b\xd2\xc0\x62\xe5\xc3\xdc\xc3\x7b\x31\x47\x20\x67\x41\x34\x4d\x82\x37\x3c\xc5\xa4\x20\x67\xec\xe7\x38\x15\x29\xd3\x9a\xdf\x07\x51\xeb\xf7\x97\x2c\x5f\xac\x34\x86\xc5\x2f\x9e\x5e\x0b\xce\xe7\x2c\xf4\xce\xe0\x58\xd7\x94\x17\xa0\x9f\x83\x76\xef\x6c\xfd\x55\x4a\xd0\xd9\x3a\x2e\x44\xe1\xea\x35\xe1\xf1\x9e\xf1\xc3\xe5\xa1\xf7\xcd\xd7\xdf\xfe\xf1\xec\xc0\xfb\xe6\x35\xfc\xff\xeb\xd7\xdd\xde\x3f\x47\xa8\x53\xc0\x6a\xb6\x39\x41\xc3\x2a\xef\x82\x1e\x80\xf3\xb3\x06\x8c\x25\x0f\x76\xa8\x54\xe9\x73\xd0\x47\x89\xf2\xa9\xd8\x91\x6d\x08\xb5\x07\xa8\x1d\xa7\xa3\x62\x3d\xc7\x44\xc1\x77\x52\xea\xe8\x96\x60\x8b\x35\x87\x13\xb1\xe4\x68\xea\x98\x55\x6f\x1b\xed\xb6\x3f\xbb\x39\x05\x35\x61\xda\xe7\x65\xd4\xbb\x13\x4d\x29\xf2\xd7\xec\x1c\xbe\xc2\xed\xc7\x77\x4f\x5e\x07\xb4\xb7\xd3\x69\x65\x12\x5a\x07\x19\xc6\x4a\x89\xfa\x1b\x0b\x0a\x15\x26\xf5\x51\xb7\x59\xbb\xde\x1b\x23\xfb\xf1\xde\xc2\x94\x46\xa2\x22\x75\x84\x52\x4f\x2b\x1c\x73\xfa\xae\xa7\xaf\x67\xdd\xf8\x9b\xbf\xda\x41\xed\xb6\x9d\xdf\x5e\x5f\xb8\xd8\xc9\x6f\xaf\x67\x57\x3d\x39\xf9\xda\x9a\x58\xc1\xef\xce\x27\xb7\xf5\xab\x39\xd4\x48\xd9\xab\x85\xbe\xa0\x55\xe7\x0c\xe2\xad\xb0\x2f\xce\xd2\x54\x73\xc3\xa0\x75\x15\x9d\x12\x7d\x01\x0c\xd5\x7e\xb0\x4f\x6c\x00\xba\x90\x5d\xa0\x72\x20\xa7\x82\xcd\xda\xd7\x6f\x49\x5a\x91\x8b\xf6\xa9\x8b\x9c\x58\x21\x16\xaf\x99\x03\xa9\xa5\x78\xaa\x34\x0e\x4f\x8d\x13\x65\x44\x92\x26\xf4\xe1\x14\xcf\x84\x03\x94\x05\x49\x7f\x50\x03\x37\x28\x65\x46\x45\x6e\x3c\x47\xd7\x6b\xa5\xd7\x25\xc5\x0c\x0a\x80\xbc\xd4\x08\x53\x06\x80\xf2\x2f\xcd\x34\x8f\x02\xd3\x66\x04\x24\xe2\xc3\x25\x24\xe2\x62\x64\xb9\x5c\xbd\xb5\xdf\xb0\x97\x35\x15\x55\xb5\xa7\xd6\x60\x7b\xc2\x32\x38\x12\x63\xbf\xc8\x2c\xc6\x4c\xc6\x61\xb6\x15\x3a\x6b\x3a\x01\x36\x9d\xc7\xa1\x49\x98\xb1\x73\x71\xa7\x37\x53\x39\xe3\xb2\x6c\xf3\x5f\x71\xa3\x7f\x10\xa2\x47\x19\x6b\xad\x42\xd4\x7e\xc7\xaa\x47\xe4\x32\xd6\xad\xe0\x42\x93\xaa\xe5\x96\xbd\x2d\xa9\x6a\x75\x72\x14\x9b\xaf\x53\x11\xbf\x37\x17\xc8\xc7\x20\x69\x44\x17\xc9\x8a\xdc\xac\x3f\x8f\x28\x0d\x40\x3a\x0d\x6f\xed\x24\x62\x52\xd1\x5f\x3b\x6b\xef\xf8\x1e\x6b\xe4\xe5\xbe\x7a\xa4\x91\xf7\xe3\xdb\xe3\xc8\xe1\x07\x58\x9b\x2c\x0a\x3e\xd0\x70\x3e\x7e\x7c\x8e\x4d\x1b\x95\xcf\xf7\xc2\x01\x47\xbc\x16\x9c\xe0\xbf\x26\x7c\x81\x1a\x75\xa1\xfd\x27\x53\xc6\x82\xa2\xae\xfc\x17\x24\x03\x53\x02\x4f\xed\xa0\xec\x41\x58\xd0\x47\x07\xa5\x2c\x7f\xa0\x4c\xfe\x18\xb1\x28\xc3\xc3\x84\x92\xc8\x63\xe9\xb2\x40\xe3\x55\xb7\xbb\xf1\xe9\xed\xeb\x93\xf3\x09\x19\xcb\x26\x9e\x3b\x58\x53\xcd\x41\x89\x01\x67\x5b\x22\x28\x9d\x1c\xce\x0d\x04\x2c\xbb\xee\x16\x0c\x7d\x1f\xc5\x0f\x11\x25\xff\xd3\x60\x6f\x6b\xe4\x84\x43\x13\x95\xd5\xd5\xcc\x02\x4f\x18\x63\xf4\x5c\xdd\x5f\x43\xb8\xd9\x91\x64\x2f\x5c\xcd\xba\x85\x8a\x63\x9e\xcd\xc3\xf8\x97\x82\x33\x54\x03\xe8\x7d\xc5\x7a\xe6\x3a\x6b\xc9\x7b\xa6\x9f\xde\xde\x1e\x16\x5c\xc8\xdc\xf3\xfc\xd8\x75\xb6\xa4\x49\x93\x8a\x87\x0e\xb7\x41\xb9\x7e\xf6\x81\xc2\x7c\x7c\xc2\x8b\xd1\xa4\xae\xfe\x54\xf9\x24\x0e\xf2\x46\x2c\x11\x1a\x66\x16\xea\x6d\xef\x82\x59\xc8\x6d\xac\x2c\x31\x69\x82\xbd\xbb\x8f\x3b\x05\xa2\xf2\xb5\x01\xc7\x8b\x48\x84\x9e\xfa\x14\x7a\x85\xfd\x83\x7b\xc7\xa8\xab\x1d\x22\x94\x00\x6f\xce\x84\xdd\x1e\xd6\xd8\xa3\x5a\xac\x03\x97\x91\xc7\xbf\x34\x53\xbc\xe8\x98\x91\xe2\x62\xc8\xaa\xc4\x30\x52\x6d\x13\x39\x45\x8c\x49\x9a\x5a\x03\x4d\xaa\xe7\x0d\xa9\x5c\xee\x31\x2d\xa1\x97\xb0\x20\xd5\x3c\xf1\x06\x82\xb3\xa4\x5b\x44\x5b\xca\xcf\x3a\xe9\x46\xdf\xda\x0e\x2b\x1d\xf8\xc2\x65\x0a\x75\xe8\x01\x16\x50\x43\xa3\xd5\x3d\x00\xbf\x12\x5f\xf8\x47\x47\xf0\x8d\x34\x40\xa1\x33\x55\x8a\x8e\x46\x3c\x3d\xc4\x3c\xf4\x69\x19\x0e\x2f\xa3\x3e\x82\x8c\xfa\xca\x67\x50\xb3\xab\xe6\xe8\xfc\x9c\xb4\x38\x70\xec\x91\xd2\x8b\x94\x5b\x65\xc4\x60\xd6\x51\x2e\x9a\xa6\xcb\x29\x40\x2d\x1d\xe0\xfb\x05\xc9\xeb\x62\x2e\xf2\x62\x1a\x03\xb0\xa7\xad\x55\xf7\xe7\xcc\xf9\xd6\x04\x9e\xa3\xf3\xd3\xe0\x01\x66\xfe\xac\x1b\x05\xa8\xcb\x18\xb6\x6f\x57\x6b\x5d\x8d\x06\xd4\x98\x3a\x96\x6d\x34\xf3\xed\x6a\x05\x56\x92\x5f\x2f\xb4\x3d\xac\x96\xce\xec\xf3\x3b\x03\x30\x78\xdc\x8d\x04\xd6\x61\x1c\x2d\xba\x7a\x67\xee\x3b\xc0\xb2\xa7\xb8\x51\x2e\xe2\xb3\xa8\x33\xf7\x47\xc9\xa8\x3b\x2c\x8c\x59\xa9\x74\x45\x5b\x76\x46\x0f\x20\x92\x5b\x2e\x59\xae\x73\xbb\x29\xaf\x88\x32\xd3\x4b\x95\x4e\xcb\xe7\x99\x2c\x31\xb3\x0d\xc4\x81\xb4\xf1\xee\xb0\xf1\xae\x30\x45\x5b\xfd\xae\x37\xa2\xa5\xb3\x83\x1b\xf2\xff\x1b\x24\xaf\x60\xd6\x5e\x6e\x72\x9e\x61\xa5\x1c\xf8\x0a\xff\x3e\x42\x3f\x17\x7c\xcc\x06\xba\x3a\x8b\x75\xa2\x7a\x00\xa9\x39\x76\xa1\x57\x9f\x3f\xc0\x05\xa2\x8c\x19\xac\x05\xe3\x52\x6a\x7b\xaa\xf7\x91\x8b\x38\x49\x29\x5d\xe2\x9e\xa2\xb4\x73\x7a\x9b\x9e\x0a\x15\x54\x10\xeb\xce\xd8\x5e\x5c\x4f\xd7\xa1\x49\x7c\xef\xc4\x9c\x0c\x9f\x7a\x71\xc4\x27\x18\x92\x01\x78\xb3\xec\x21\x4e\xc9\x4b\x2d\x8c\x97\x81\xe6\xad\x9c\x91\x6f\xbe\xb7\x08\xa9\xb8\x14\x0c\xfd\xd3\x7f\x46\xc1\x82\x79\xf7\xfc\x83\x20\x9f\x9c\x2e\x29\x8d\x68\x16\x7c\xfa\x0f\xa7\x17\x74\xe3\xe8\xca\x99\x26\x96\x45\xd7\xd4\x0e\x1f\xcc\x82\x08\x13\x14\xe7\x9a\x4d\x75\x0e\x99\xe4\x71\x07\xc4\x30\x47\x03\x7c\x59\xda\xe7\xa5\xb8\x15\xb4\x38\xe9\x27\x01\xa3\x46\xfd\x39\x0c\x30\xde\xae\x7d\xb0\x9d\x40\xe3\x81\xd4\xcc\xc8\x56\x9e\xfe\x9a\x48\x3e\x58\xc6\xb5\x2b\x84\xdc\x09\x15\x8c\xd6\xee\x96\x04\x95\xd1\x3d\x54\xc7\x96\xfc\x4e\xfa\x48\x51\x51\x36\x6d\x3d\x2c\xb1\x8b\xcc\x68\xbf\x51\xbe\x1b\x93\x0b\x4b\x52\xd0\xdb\xcd\x98\x8c\x37\xb3\xab\xeb\x93\x8b\xf3\xee\xc5\xb4\xdb\xc0\x1c\x36\xbc\xbc\x7c\xef\x9f\xae\x2f\xce\xbd\x78\xfe\x33\x56\x0f\x94\x49\x10\x6b\x12\xea\x44\x26\xc9\x5b\x48\x6f\xb9\x22\x15\x8e\xf7\x78\x3e\xad\x79\x0e\xcf\xfc\x83\xea\xd0\xe0\x41\xbe\xa2\x78\xca\x49\x18\x44\x18\x5d\x89\x32\x11\xa3\xa5\x74\xe8\xbd\xa2\xe4\xc8\x21\x96\x75\x42\x7b\xbd\xf0\xe4\x87\x4e\xdd\x70\x33\x8e\x4a\xe9\x05\xd9\x61\xc4\xaf\x22\x38\x8d\xeb\x52\x2c\x77\xcf\xcd\x7f\xf5\xe1\x5a\xcc\xbb\x4c\x3e\x70\xae\x3b\x49\x3a\x5a\x99\x63\x01\xfa\xee\x36\xde\xa5\xbc\x0f\xbb\xf1\x60\x3b\x74\x79\xf3\x8e\xf0\x22\x74\xc3\x94\xe9\x62\x70\x77\x7e\x37\x86\xfc\xe7\xe9\xd5\xf9\xc9\xf9\x6b\x91\x8b\x47\xdc\x20\xb8\x58\x48\x3c\x29\x2f\x7a\x0c\xf6\x28\xed\x86\x62\x25\x50\x84\x19\xea\xc5\x56\xc1\x72\x15\x6e\x30\xce\x6c\x01\x7d\xd8\x92\xfb\x04\xea\xfb\x06\x80\x35\xdb\x78\x73\x0e\x02\x90\x88\x88\x44\xe7\x35\x5c\x58\x22\x10\x54\xfe\x98\xf2\x05\x06\x2b\x93\x8d\x92\xd0\x67\x2b\x1e\x86\x00\x3f\xc3\x08\x68\xcc\x6c\xd7\xad\x63\x39\x86\x33\xe2\x66\x76\x7e\x74\x32\x2d\x07\x02\x8b\x91\x44\x1e\x58\x5f\x85\x14\x40\xe8\x4d\x42\x19\xd6\x93\x05\x4a\x1b\xf4\x16\xf8\xf4\xd7\x88\x53\x0c\x9e\xca\x65\x46\x59\x0c\x32\x86\xe9\x20\xf9\xcf\xb8\x3c\x08\xe2\x8d\x02\x22\x3c\x06\x51\x08\x50\xa3\x41\xb9\x46\x84\x3c\x6f\xe8\xfb\x65\xca\xe6\x98\x89\xc0\xa7\x78\x38\x41\x7f\x40\x2e\xcb\xa1\x18\x53\x73\x2c\xd6\x53\xe5\x51\xb4\x8c\x4c\x46\x19\x53\x10\x0e\xec\xa8\x4c\xa4\xc7\xac\x25\x13\x51\xba\x83\x94\x67\x09\x0c\xa6\x19\xfb\xba\xbd\xcb\x44\x09\x43\x90\xe7\xa2\x25\x3a\x8e\xaa\x54\x4a\x22\x08\x0d\x8d\xc9\x3b\x7e\xda\xc2\xc3\x9d\xe2\x76\x85\x33\xa6\x7f\x80\xb1\x09\xf7\x08\x2c\x4e\x93\x15\x29\x5f\x71\x4a\x31\xe1\x20\xac\xfc\xb8\xf0\xe1\xc8\x28\x22\x3f\xdd\x3c\x05\x16\x33\x90\x56\x59\x06\xc7\xc8\x14\x80\xa3\xb1\x34\xe4\xfe\xb2\x0c\xfb\x57\xd8\x28\x26\x88\x16\x07\x46\x91\xf9\xc2\xf0\xd5\x80\x55\xcf\x1a\xba\x4b\x23\x89\xd5\x8a\x1d\xc2\x3f\x21\x3b\xc4\x44\x44\x2c\xcf\xf9\x3a\xc9\x4b\x04\x6b\x8a\xb5\x10\x39\x81\xd8\xa2\x8d\x8f\xff\x50\xfa\xa7\xd4\xeb\xa1\x92\x31\x11\xe3\x79\x7c\xcc\x87\x11\x6f\x54\x61\x94\xad\x39\xa8\xc5\x36\x49\xde\xec\xd0\x0a\x9c\xb8\xc3\xa0\x98\x56\x2c\x54\xe3\x0e\xf6\x89\x8a\x79\xc2\x0c\xa8\xf2\x70\x16\xcc\x57\x59\xb2\x26\xa8\xe5\x9a\x08\x2d\x57\xbc\xf3\xa3\xa4\x86\xc6\xb9\x4e\xca\x78\xc0\x05\xcc\x5b\x54\x68\xc2\x57\xeb\x1b\x4c\x04\x48\xd1\xf2\x5b\x88\xe5\x07\xab\x8f\x22\xa5\xc8\xe1\xbc\x61\x92\x12\x75\xe8\xe4\x02\x2c\x0b\x3d\x51\x7f\x58\x76\x18\xa9\xcb\x4a\xd7\x75\x8c\x54\x8d\xa3\x80\x16\xdd\xf7\xb5\x60\xc1\x86\x9b\x7f\xad\xba\x1d\x31\x11\x23\x10\xc9\x7b\x97\xc2\x08\x7d\xd8\xb0\x24\x9c\xa8\x58\x00\x6f\x55\x7c\xfa\x4b\x7a\xc7\x22\x99\x24\x86\xd2\xf7\x63\xf0\x51\x5a\x6a\x02\x70\x11\xe2\x47\x58\x90\xe2\xbb\xc6\xea\x3a\xf4\x6e\x62\x3f\x16\xc9\x66\xe2\x28\x5e\x04\x98\x71\x53\x34\xac\x91\x72\x8f\x3e\x6e\xb4\xf7\x69\x9d\x02\x51\xbb\x90\x1a\x49\x65\xbb\xc6\xb4\x91\x41\x91\x32\xdc\x16\x0e\x8d\x75\x90\xad\x63\x5a\xb1\x19\xae\x15\x34\x68\x51\xe8\x9a\x5c\xa7\x2a\x0d\xe3\x2e\xd7\xff\x41\x65\xa6\xa5\xe8\x49\x75\xb8\x65\xe4\x0b\x42\x79\x6e\xd3\xce\xf9\x2a\xe3\xe3\x3a\x59\x2f\xb9\xca\x60\xd1\x1e\xc3\xe4\x16\x22\xf3\x4b\x1b\x42\x8c\xd5\xc0\xd7\x1e\x45\xd1\x31\xd5\x24\xd6\xad\xda\x8e\x45\xab\x12\xb8\xe2\xb2\x65\xf4\xc6\x0d\x83\x75\x12\xf0\x0f\x4e\x11\x87\x5d\x87\x69\x90\x11\x97\xe1\x09\x42\xd9\x34\x1b\x53\xf8\x0f\x5b\xbb\xba\x96\xaf\x6d\xce\xd5\x8c\x60\xe0\x2f\x6c\x58\x65\xc2\xcc\x5a\x2b\x7c\x36\x7b\xb2\x10\x10\x62\x3d\x66\x4a\x3a\x90\x06\x6b\x96\x6e\x28\x5a\x6c\x81\x6b\xb3\x4a\x57\x50\x27\x92\xc2\xe8\x92\x90\x62\x32\x77\x0e\x1b\x4a\xf5\x11\x20\xa7\xd6\x54\x9c\x09\xf7\xf8\xfd\x37\xde\x75\xb3\x9e\x2e\x5a\xc4\x84\x2b\x84\xbe\xe3\xb7\xd4\x12\x0b\x19\xf0\x35\x13\x59\x27\x77\xc7\x43\x07\x33\xe0\x40\xa3\x1b\x51\x07\xdd\xe8\xf3\xa1\xe7\xfd\x59\x5c\xee\x6b\x80\x89\xb7\xfd\x7b\x75\x46\xca\xe6\xa5\x7b\x06\x65\x24\x2a\x84\xef\x88\x8f\xde\x33\xb2\x51\x75\x6a\x25\x29\x55\xe1\xf0\x98\xef\x53\x56\x77\x98\xa4\x2d\x12\xe6\x9c\x4a\x1e\x88\x24\xdb\x87\xde\x45\xb4\xe0\xda\xab\x6b\x1d\x2c\x31\xe7\x81\x7f\xa0\x90\x55\xe9\x04\x81\x58\x31\x1a\x0c\xbc\xd2\xde\x41\xdd\x07\xe7\xef\xcb\xec\xf7\x65\xb6\x8f\x65\x66\x7e\xce\xb1\x14\xa5\x89\x17\x98\x8a\x49\xe4\x36\x5c\xe5\x79\xd2\x48\x70\xe8\x89\x1c\x3f\xe8\x08\x50\x6b\x92\x35\xda\x64\x32\xbf\xa4\x64\x2f\x0a\xf9\xdd\xc2\x82\x7f\x0f\x77\x3b\xc7\x7b\xe3\x45\x85\x44\xa5\x3b\xc4\x8b\x02\x21\x13\x19\x02\x33\x55\x5e\xcf\x24\x78\x54\xf6\x8a\xbc\xed\x92\x0c\x3a\xf7\xa1\x87\x9b\xcc\xac\x86\x2f\xdc\x37\xb1\x88\x11\x4e\x1c\x66\x2d\x33\xa4\x9f\xfa\xc1\x02\x58\x31\xd4\xac\x22\x00\x4f\x54\x6b\x69\xc2\x30\xa7\x28\x0d\xf0\x7a\x2c\x52\x10\x3b\x63\x9f\x72\x7c\xbe\x3a\x39\x9d\xd1\xaa\xe1\xcc\xa7\xa7\x74\xee\x83\x44\xd9\x7d\xa6\xd8\x43\x30\xa6\xee\xff\x06\x89\xd4\x73\xf1\x4a\xa9\x29\x95\x08\x46\x2e\x61\xb3\xb0\xd4\x93\x21\xac\x48\x66\xd9\xe4\x11\x95\xb4\xc1\xfe\x8e\x5e\x62\x3f\x9c\xdd\x9e\xde\x9c\x5c\x4e\xaf\x6e\x9e\xbf\xba\xb8\x3a\x9b\x1c\x4f\x6f\xa6\xde\xd1\xc5\x39\x48\xa5\x37\xde\x77\x27\xc7\xc7\xb3\xf3\x1f\x3b\xa9\xb2\xeb\x6c\x4e\xd3\xe5\xd5\xc9\x9b\xe9\xcd\xcc\x23\x78\xbd\x44\xe8\x5b\x9b\x63\x6d\x2b\xae\x98\x69\xf0\xb6\xe5\x45\x74\x42\xbc\x0c\xe3\x39\x6c\x05\x99\x5e\xe6\xc7\xf2\x75\xf2\x83\xf2\x25\xce\x0e\x0f\x0f\x7f\xf4\x7e\x50\xdf\xab\x86\xdd\xa4\x95\x99\x65\x04\x68\x2e\x80\x92\xe4\x58\x02\x8d\x25\xd4\xb2\xad\xcf\xcb\xcc\xe3\x2e\xc3\x10\xa1\x96\x9d\x34\x6d\xff\x6c\x09\x97\x2e\x52\x71\xa0\x63\xa9\xa5\xba\x66\xab\xc7\xb7\x4f\xba\xcd\xaa\x22\x6b\xa5\x9e\x4e\x5e\x15\xf6\xbe\xbb\xbd\x04\x6d\x2b\x01\xac\x49\xdb\x1e\x91\x39\x65\xb0\x08\x35\x33\xd0\xf8\xd5\x7c\x02\xc2\x6e\x23\x5e\xe3\x37\x1b\x88\xf1\x03\xef\xd6\xec\x25\x98\x01\x11\xd3\xe0\x38\xc1\x36\xaa\x93\x33\xb8\x24\x8e\x2e\x74\xcb\x2d\x30\x8b\xf2\xf2\xa4\x2c\x5b\x69\x38\x73\x2a\xd3\xaa\xc0\x7b\xcd\xc9\x56\xa3\x4d\x1e\xee\x98\xd9\x9b\x1c\x80\x54\xde\xa7\x3b\xb8\xc9\x35\xf4\x87\xb5\x08\x7f\x2f\x2e\xa8\xd8\x0e\xae\x06\x07\xb4\x55\xfe\x61\xed\x80\xe0\x39\xbb\x74\x34\xd0\x8a\x6d\xf8\xa2\xf2\x12\xea\x44\xa4\x69\x69\x8e\x4d\x09\x01\xdd\x26\x9b\xb6\x26\xe6\xf0\x37\x94\x49\x16\x24\x73\xf4\x21\xd0\xcc\x51\x77\x43\x63\x5c\x8b\xa4\xe8\x04\xdf\xf8\xcd\x1c\x62\xcf\xc6\xd8\xf9\xdd\x0e\xb2\xee\x94\x76\xde\x6c\x3e\xcf\x16\x69\x40\x97\x75\x27\x70\xd9\xc6\xb1\x68\x8c\xac\x1f\xaa\x81\xbe\xf5\xbb\x39\xe4\x20\xeb\x3b\xa5\x7d\x90\x3e\x61\x6b\x39\x71\x26\xc8\xba\x65\x5d\xb2\x79\x38\x02\xed\xde\x3b\x04\xd5\x65\xdf\x98\x3a\x21\x74\xb6\xb3\xc0\x84\xb1\x28\x1a\x04\x94\x6b\xcd\x19\xb0\x26\xae\x4a\x82\x76\x0a\xa9\xc2\x83\xa2\x7b\x5b\xb2\xc0\xa9\x2a\xb3\x88\xc7\xea\x5e\x7b\x2b\x36\x87\x27\x67\xee\xb6\xfa\x64\x1e\x75\xf2\xfa\x41\x93\x16\x3c\x4b\x37\xca\xfb\x27\x5b\xc5\x45\xe8\x2b\xdd\x0e\x96\xe7\xd1\xdd\x65\x65\x36\xf6\x5a\x66\xf4\x36\xa8\x11\xbe\xcf\xe7\x1c\x53\x25\xa1\x3a\xbb\x09\xd6\x9c\xee\x7b\x5d\xb8\xa2\x28\xa4\xeb\x00\x56\x5c\xd9\x5e\x5e\xd0\x9b\x1e\xa5\x56\x2a\xda\x16\xc3\xb0\xf8\x62\x15\x0b\x41\x57\x99\x1c\x31\x2f\xe1\xa6\x16\xa2\x79\x5c\x9d\x71\x9a\xfb\xf1\x15\x9e\x25\xf8\xdc\x67\x09\x5b\x8a\xcc\x81\x7c\xa1\x6a\x70\x0a\x64\x32\xf3\x5a\xc8\x08\x85\x34\xf4\x91\x6d\xb0\x1f\x9b\xf9\x50\x61\xa4\x5a\x2f\x98\xdd\x06\xe6\xb0\x53\x4e\x4a\xb0\x04\x96\x7c\x37\xfc\xd6\x46\xc6\x38\x30\x91\x6b\xf7\x9e\x68\xfc\x68\x0c\x33\x88\xc8\x7a\xb0\xc8\x51\x3b\xb4\xec\x66\x4d\x91\xa1\x81\x45\xb6\x75\x59\x67\xa5\xcb\xb2\x4c\xc0\x15\x06\x20\xe4\x77\xa2\xeb\x69\x6d\x8d\x95\x84\x33\x95\x38\xfd\x04\x93\x9c\xa3\xab\x23\x3c\x02\xb2\x38\x7a\x21\x52\xba\x04\x79\x63\x7d\x1d\xe0\x49\x9e\xbf\xcb\xaa\xda\x55\xd8\x44\x94\xb2\xd2\xac\xf5\xd2\xba\xd3\x81\x91\x7d\x18\x8a\xd0\x7a\xec\xdd\x02\x42\x65\x8a\x1a\x02\xbe\xfb\x62\xa9\xe0\xbb\x5c\x2d\x41\x74\x4f\xae\x37\x41\xb4\x82\xb3\x33\x17\x05\x38\x83\xa8\xf4\x13\xd3\x1d\xcd\xe4\xcb\x85\x96\x3e\xd9\x36\xf6\x30\x6d\xad\x8f\x07\x0b\x47\x2b\x01\x41\x76\xb9\x9a\x14\x51\x22\xa4\x8c\x52\x03\xc9\xfb\xe4\xe8\xd5\xbb\xeb\x9b\xe9\xeb\x93\xf3\xd7\xef\x6e\x4e\xce\x66\x17\xb7\x37\xea\xe4\xd2\x2c\x97\x37\x2c\x24\xff\x1f\x02\x1a\x97\x87\x60\xdb\xcd\x62\x06\x7f\xb4\x81\x5c\xdd\xdc\x5e\xee\x73\x20\x7d\xf0\x8d\x07\x12\xb2\x39\xd7\x5d\xd3\x8d\x5f\x2d\xa0\xa2\x07\x96\xb2\xda\x68\xc0\xb7\x37\xb3\xc3\x53\x24\xe2\xad\xd5\xbd\x93\xf0\xd9\x07\xc7\x73\x5b\x4b\x53\xf5\x10\x1d\xa1\xba\xc7\xf9\xf6\xef\xe6\x63\x40\x6f\x35\x4a\xb7\x5c\x16\x0b\x93\x19\x08\xa4\xce\xb2\xfb\x04\xb2\xe9\x6a\x4f\x0f\x65\xbc\xf5\xd1\xfd\x49\x02\xc5\xbc\xa8\x59\x90\xeb\x92\x6c\xda\x75\x36\xa7\x29\xc6\x7a\x10\xdd\xaf\x6e\x91\x57\xc0\x49\xa0\x5d\xeb\xb3\x86\xae\x35\x59\x43\x4d\x00\x77\x2f\x4a\x09\xd9\xe5\x6c\xd7\x8a\x61\x8e\x22\x58\x14\x47\xe8\x78\x52\x29\x77\xbb\x97\x9d\xae\xa9\x0d\x3e\xcd\x18\x1a\x3f\x5a\xc0\x44\xeb\x03\x9e\xcb\xca\x89\x53\xaa\xd6\x60\x19\x6a\xc5\xbf\xf3\xd8\xab\x1f\xbd\xe8\x23\x87\x69\xff\xa5\xba\xcd\x6d\x61\xe9\xf2\x40\xb8\xa5\x79\xa8\xa7\xa6\xd1\x81\xa6\x46\x0b\xc7\xe0\x05\x6d\xe9\x0d\xc7\xca\x24\xf0\xca\xd5\xec\x5e\xe6\x17\x3c\x82\xdd\xeb\xb2\xc9\xf0\x2d\x50\xda\x0c\xc8\xa2\xd0\x7d\x09\xc0\xaf\xbc\x99\x97\x15\x66\x7b\xe9\x14\x9b\x83\xb0\xb4\x88\x1c\x61\xf6\x51\xef\x0a\xb6\x5e\xf5\x64\xbe\x69\x5a\x5c\x8c\x56\x95\x23\x14\x73\x2a\xf1\x6e\xd0\x12\xb0\xd3\xc0\x1c\xb6\x70\x1d\xef\x36\xee\xec\x36\x30\x86\x4d\xf1\x98\xdd\x67\x3c\xfd\xdc\x21\xbe\x6b\xc5\x0d\xbc\x2d\x45\xf6\x85\x07\xaa\x18\x51\xcb\x9b\x34\x0f\x22\xf4\x92\x09\xd0\xdc\x8f\x39\x4e\xbb\x37\x96\x1b\x10\xe3\xb1\x23\x78\x99\x48\xbd\x7b\xdd\xb6\x37\xb2\xc0\xa1\xce\xef\x4c\x5b\x87\x19\x1d\x40\xd1\x97\x70\xc8\x81\xbd\x85\xab\x7b\x56\x77\x90\xb9\xdc\xe1\x3d\xb9\xad\x5d\x73\x59\x4b\x57\xdd\x6e\x4d\x97\xaa\xf1\xe2\x00\xdb\x30\x19\xce\xe0\x1c\x38\x3b\xd6\xe5\x1d\x04\xdd\xd6\x67\x23\xc8\x26\x49\x75\x46\xc9\xa5\x63\x9c\xbd\x66\x84\xa4\x35\xe6\x59\xcb\xdb\xb3\x94\x0f\x40\xf9\x9e\x77\x0b\xd0\xad\x6d\xac\x31\x68\x2f\xdc\xf6\x46\xb6\x38\x26\xbd\xbe\x10\xed\xcd\x6c\xf1\x74\xcf\xcb\x00\x69\x5a\xd4\xf7\xe9\x36\x25\xa8\xe2\x38\x4e\xdb\x3e\xd0\xad\x5c\x0a\x59\x77\x81\xaa\x8d\x2c\x76\x4d\x07\x5c\xcb\x92\xa0\xd1\xac\x75\xb4\xb2\xc3\xd2\x07\xdf\x0d\x72\xae\x35\x62\x6f\xff\x6c\x03\x37\xcd\x75\xf7\x82\x88\x7a\x8e\x9c\x2e\x4e\xfd\xd5\xcc\x33\xc7\xfb\x58\xe8\x72\xf7\x01\x37\x4e\x12\x9d\x07\x0d\x73\xaa\x80\x2d\xc1\x7a\x8c\x42\x66\xbe\x81\xa7\xa7\xa8\x95\xd9\x89\xe7\x92\x91\xeb\x69\x19\xab\x50\x76\x71\x34\x68\x63\x24\x7c\x27\xb2\x9c\x6a\xf5\xb8\x40\xa5\xda\x16\x46\x66\x07\xa1\x03\xab\xd5\x36\xb1\x97\x7b\x0b\x99\xa4\x12\x6f\xdd\x18\x85\x88\xee\x57\x63\x81\x31\x6c\x58\x51\x05\xdd\x00\x28\x10\xc6\xe9\x74\x2b\xa2\x3e\xd5\x5e\x4b\x0b\x73\xe8\xbb\x99\xe4\x6a\x87\x4f\x37\x4a\xc3\x6e\xe6\x74\x68\x92\x49\x14\x4e\xc9\x24\xa0\x57\xf7\xde\x6c\xfe\x68\x05\xb3\xfb\xf0\xdb\xfa\xd5\x1c\x2a\x9a\xe6\x34\x60\x33\x27\xf9\x1d\xf3\xd3\x68\x60\xba\x26\x04\x68\x24\xe4\xd3\xc0\x6f\x6d\x65\x8c\xe5\xbe\x27\x78\x77\xe7\x77\x63\xc8\x0f\xa9\x38\x02\x28\x93\xb4\x30\x8f\x50\x50\x04\xc5\xf4\x51\x14\xb6\xe6\x40\x5f\xa4\xc1\x9c\xf2\x0d\xc6\x98\x1e\x2f\xa1\x18\x30\xaa\x92\x2e\xd3\xc1\x95\x61\xdc\xae\xca\xad\x8d\x4e\xfa\x0a\x1c\x00\xfe\x26\x8a\x96\xc8\x88\x82\x8f\x1f\xbd\x67\x94\xd4\x4f\xb0\xef\x85\xc8\x5a\xa3\xea\x5b\x5d\xe7\xe8\xd0\xfa\xf1\x63\x77\xb5\xa5\x5d\x68\x12\x92\x8c\x50\xe8\x07\x68\x43\xf8\xd1\x2b\x95\xa2\x29\x09\x74\x24\xb5\xb7\x73\xc2\xa4\xcf\xcd\xa2\x69\x69\x85\x4d\x95\xa9\xf7\x56\x3c\x4c\xbc\x1f\x8e\x2e\xce\xce\xa6\xe7\xc7\xdd\x2e\xdf\x46\x7d\xec\x28\x28\xa2\xfc\xe2\x4e\x46\x1d\x65\x00\x55\x05\xdb\x74\xbb\x40\x99\x76\xb3\xa2\x43\x38\xf6\xa9\x64\x44\x7d\x7e\x80\x06\x3d\x6c\xb0\x1f\x07\xd9\xfb\x5b\x3c\x7b\x45\x91\x62\xf9\x8d\x4c\x5c\xa6\x23\xa2\xde\xd1\xe7\x9d\x1d\xad\x68\x01\xa1\x42\x0d\x4a\xeb\x74\xb5\xd5\x96\x7c\xb0\x5c\xae\xb2\x56\xaf\x1b\x59\x67\x58\xe5\x61\x3a\x7a\xa5\xa6\xba\x5c\x7e\x55\x52\xa6\x5a\x80\x7b\x26\xaa\xe3\x8a\xf2\xd0\x55\x5a\x26\xed\x5a\x7a\x44\xe4\x96\x3c\x41\x4a\x24\x2d\x85\xa2\xa5\xa2\x00\x0d\x37\x20\x3b\xa2\x1a\x03\xcb\xe2\xea\xb5\xd2\x2d\x00\xa5\x6b\x5a\x0d\xa2\xc8\x49\x45\x51\xdb\x04\xd1\x51\xba\xc6\xc4\x5e\xa1\x08\x02\x2c\xb3\x84\x89\xd0\x2d\x1d\x79\xbb\x5d\xc2\xd0\xf1\x95\x05\xd0\xce\xf8\xba\xb9\xa1\xe0\x0b\x83\xfd\x54\xeb\x26\xb6\x53\x5b\x37\x2b\x3a\x62\x9f\x87\x37\x9b\x04\x21\xaa\x3f\xd5\x1d\x61\x16\x42\xa0\x07\xb2\x51\xa9\x92\xdd\xc8\xbb\x50\x1e\x05\x12\x7a\x8f\x5f\xbd\x41\x8f\x21\xd8\xb1\x1e\x56\x1a\x63\x31\x6a\x2d\x3b\x8c\xba\x0d\xa1\x23\x2b\x16\x0b\xce\x75\x52\xa5\x59\x27\x1b\x1a\x9a\xbe\x9c\xde\xba\xc8\x44\xd8\xaf\x97\x91\xe8\x42\x29\x8e\x0b\x38\x6b\x48\x4e\xd4\xd1\xb5\x05\xe8\x98\xcf\x45\xc2\x13\x4c\x9d\xb2\x60\x3e\xc7\x0c\x2a\x02\x14\x65\x54\x21\x11\x72\x3f\x24\x8f\x41\xea\xc8\x34\x5a\xf8\xdd\xee\x76\x1e\xc7\xbd\x76\x2b\x7f\xf0\x33\x71\xc8\xc4\xe9\xe6\x14\x9f\xce\x1f\x3f\x9e\x35\x34\x08\x07\x75\xef\xbe\x46\x3b\xaf\xd5\x75\xf1\xa0\x4c\x2c\x96\xa9\x76\xaa\x20\x79\x95\x10\xb4\xfc\x49\x5d\x5c\x07\x5e\xdd\x3a\x4c\x69\x48\xcf\xe3\xe8\x25\x3a\x2e\xa8\x2e\x53\xe1\xa6\xdf\x23\x93\xdb\x8e\xec\xb1\x28\x35\x55\xaa\x20\x49\xc2\x2c\xa4\xae\x21\x71\x7b\x50\xdd\x53\xf5\x55\x15\x22\xde\x67\x42\xda\x05\x27\x6e\x95\x36\x70\x68\x63\x18\x62\x72\x12\xd9\xdc\x48\x75\xa9\x20\xf7\xaa\x32\x5b\xfa\x0c\xd1\x6e\x6a\x48\xa0\xd5\x70\x2c\xe2\x44\x7a\xd6\x90\x35\x08\x4b\xfa\xf2\xad\x3b\xe3\xb0\x14\xf4\x5a\xc4\xbc\x38\xad\xff\xd2\x94\xff\x16\x2b\xbe\x78\x5f\xcb\xb8\x20\xb4\xb0\x5a\x59\xf3\x51\xd1\xdb\xf0\x45\x49\x3d\x28\x88\x91\x30\x09\x4f\x29\xb1\x79\xe1\xcb\x5f\xeb\x87\xd0\xce\x2e\xd0\x8d\xd7\x19\x6c\xbf\xab\xf0\xff\xf8\xf1\xff\x0f\x00\x00\xff\xff\x4a\x46\x69\xc5\x79\xff\x02\x00") - -func cf_i18n_resources_es_es_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_es_es_all_json, - "cf/i18n/resources/es_ES.all.json", - ) -} - -func cf_i18n_resources_es_es_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_es_es_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/es_ES.all.json", size: 196473, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_fr_fr_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xcb\x72\x1c\x49\x92\x20\x78\xdf\xaf\xf0\xe1\x1c\xc0\x1c\x41\x80\x99\x59\xd5\x2d\x33\x1c\x59\xe9\x05\x81\x20\x13\xdd\x78\x35\x10\x60\x55\x4e\x32\x85\xe9\x08\xb7\x88\xf0\xa4\x87\xbb\xa7\x3f\x40\x82\xd9\x6c\xd9\x6b\xdd\xfb\x03\x4a\xf6\x32\x89\x3a\xcc\xa9\x6f\x73\xdb\xf8\xb1\xd5\x87\x99\xbf\xc2\x5f\x66\xee\x01\xb2\xb6\xab\xa5\x2b\x19\x88\x30\x53\x55\x53\x33\x53\x53\x53\xd3\xc7\x0f\xff\x87\x65\x59\xbf\xe2\x7f\xe0\xff\x9e\xb8\xce\x93\xe7\xd6\x93\x37\xfe\x1b\x7f\x76\x72\xf9\xfc\x8d\xff\x64\x5f\xfd\x92\x44\xb6\x1f\x7b\x76\xe2\x06\xbe\x6a\x72\x74\x71\x7e\x3d\x3d\x39\x2d\x35\x5b\x07\x8e\xbb\x70\x05\x82\x59\xd8\x5e\x2c\xf0\xfb\x4f\xfb\x0d\x38\xbe\x0f\xd2\xc8\xfa\xc7\xeb\x8b\x73\x2b\x4e\x22\xd7\x5f\x5a\xf1\xbd\x9f\xd8\x1f\x2c\x37\xb6\x5c\xff\xce\xf6\x5c\xe7\xc0\xb2\x2e\xa3\x20\x14\x51\xe1\xa7\x64\xe5\xc6\xcf\x2d\x6b\xbe\xb0\x62\x91\x4c\xa2\xd4\xf7\xa1\xeb\x44\xf8\x77\x6e\x14\xf8\x6b\xe1\x27\x93\x3b\x3b\x72\xed\x5b\x4f\x4c\x96\x51\x90\x86\xd6\xde\xaf\x6f\x9e\xf8\xf6\x5a\xbc\x79\xf2\xfc\xcd\x13\x00\x9b\xc2\xa7\xfd\xed\xaf\x3e\xed\xb5\x8e\xf6\xd4\x96\x34\x08\x26\x59\xc4\x89\xa2\x52\x00\x99\xd7\xf2\xb7\x79\x10\x45\x62\x9e\x88\x5d\x53\xf8\xe8\x8c\x8e\x13\x7b\xf9\x65\x33\x7a\x37\x14\x6a\x30\xfa\xbf\x58\xb3\x95\x88\x05\x10\x13\xdd\xb9\x73\x61\x85\x1e\x0c\xce\x5a\xd9\x77\xc2\xb2\x7d\xcb\x8e\xe3\x60\xee\xda\x89\x70\x80\xf6\x38\x39\xb0\x8e\x22\x01\x03\x87\xd9\xb0\xb3\x1e\xae\x0f\x83\xf0\xe1\xc3\x7b\xd7\xf3\xe0\xaf\x39\xcc\x1b\x4e\x03\xf7\x68\x64\xdb\x7f\xb1\x4e\x45\xac\x80\xc4\x80\xcc\x0f\x92\xcd\x43\x6c\x05\x7e\x62\x39\x02\x7b\x6f\xfe\x77\x12\x4b\x0a\xe0\x87\x03\xeb\xda\xb5\x52\xbf\x80\xcf\x01\x86\x0a\x2b\xb9\x0f\x05\xf1\x7b\x1e\x6d\x1e\x36\x0f\x62\x1f\x1a\x71\x67\x04\x6e\x67\x00\x0e\x6a\xd9\x93\x44\x69\x1b\x77\x0e\xc3\x10\x96\x9f\x1d\x01\x03\x5a\x04\x0b\xb4\xf2\xdc\x39\xfd\x69\x39\x9b\x87\xb5\x1d\x01\x29\xc2\x68\x3a\x10\xe1\xaf\xbf\x1e\xc0\x3f\xe7\x30\xbf\x9f\x3e\x59\xef\xed\x58\x51\x60\xa5\x31\x72\x5e\xf2\x76\xbd\xb6\x7d\xc7\xfa\x09\x1a\x1f\xf1\xe7\x4f\x9f\x7e\x6a\x15\x7e\x45\x2a\x4b\x28\x6c\x6b\xf3\x00\xac\x2f\x90\x6e\xc1\xf4\xcf\x2d\xcf\x56\x68\x44\x0b\x1e\x8d\xc1\x9d\x07\x96\x1d\xba\x96\xf0\x9d\x30\x70\x7d\x9c\x9f\x96\xf5\x01\x04\xa7\x73\x98\xca\xac\xb5\xb3\x77\x78\x79\x02\x14\xf9\x0b\x77\x99\x46\x4d\x13\xda\x45\xc3\x55\x90\x26\xb0\x68\x02\xeb\x56\xc0\x42\x59\xdb\x61\x08\x8c\x05\x86\xc2\xea\xb3\x60\xe5\x46\xb0\x01\xbd\x7b\x4b\x7e\x0f\xcd\x92\x15\x70\x23\xe7\x5c\x1b\xbd\x20\x04\x22\x82\xbe\xf9\x33\xf2\x32\x86\x95\xe7\x2e\x7d\x10\x4f\xfe\x1e\xae\xcf\xd0\xa6\xd5\x0c\x5f\x21\x87\xa1\x8d\xb7\x57\x0f\x58\x63\x34\x78\xe2\x59\xd6\x0d\xec\xdf\x3d\x10\x28\x30\x7b\xef\x44\x02\x3b\x18\xb6\xc5\x24\xb6\xae\xa7\x57\xaf\x4f\x8e\xa6\x7b\x38\x8c\x3b\x57\xbc\xc7\x6d\x35\x8f\xdc\x10\xd1\xc1\x3e\x5b\xc0\x4e\x72\xdc\x3b\xd7\x49\x6d\x4f\x6e\x7b\xf8\xce\xb6\x96\xee\x9d\xf0\xd5\xc6\x6c\x1b\xaf\x3a\x4b\x81\x80\xc4\xf5\x5c\xe8\xd1\x4a\x45\x88\x02\xfd\x2e\x70\x23\xcb\x83\xed\x5d\xa2\x05\xf7\xfb\x22\x88\xd6\x29\xfd\xe2\xc6\x61\xe0\xbb\xb7\xf8\x99\xfa\xa4\x19\x35\x96\x13\xf8\xbe\xe9\xcc\x13\xaf\x0e\x69\x02\x60\x9e\x10\xfa\x7b\x37\x59\x81\x78\x85\x95\xcd\x13\x0f\x7c\x8c\x60\x3f\xa0\x5c\x0e\xa2\xe5\x04\x1b\xed\x59\xb8\xcb\xea\xdb\xc4\x21\x0c\x91\x5b\xf5\xe1\xd2\x61\x02\xe7\xd8\x6d\x0a\x5c\xc2\xe1\x46\x9b\x7f\x47\x12\x68\xa3\x75\x91\xa0\x81\x5e\x97\x1f\xb4\x74\x10\xfc\xcb\x99\x1d\x2d\x45\x92\xed\x71\x5a\x35\x09\x7d\x67\xf9\xb0\x76\x08\x5b\x9f\x61\xe6\x6b\xa1\x1e\x2c\x4d\xe9\x1c\xa7\x97\x66\xd6\x0f\xd2\x3b\xe1\x81\x00\x2f\xc3\x37\x1e\x47\x13\xfd\xc0\x4d\x7d\xea\xeb\xa9\x66\x92\x3d\x51\x86\xa9\x4b\x71\x2a\x37\xad\x17\x80\x02\x60\x4d\x6c\x0b\xa5\xdb\x64\x12\xbf\x73\xc3\x49\x1c\x7b\x13\x52\x1e\x88\xc4\x3d\x40\x44\x4d\x51\x78\xb6\xb4\x82\x01\xc7\x69\x18\x46\x22\x66\x3d\xc8\x12\x51\x14\x44\x7d\x46\x9d\x16\xf7\x6f\x2f\x82\xd2\x3e\x04\x11\xd3\x88\x24\x77\x0d\xc0\xe7\x22\x01\xe1\x08\x44\x89\x34\x32\xe0\x1b\x7c\x7a\x01\x1a\x06\x1c\x81\x67\xb6\x6f\x2f\x01\xe0\x84\xd5\x11\x41\x7b\x74\x4d\x5f\x92\xbc\xbe\xe5\x66\x96\x3d\x9f\x07\x29\x9c\x1c\xf8\x73\x68\xdf\xa3\x72\x05\x32\x6f\x11\xb4\x1c\x93\x35\x18\x40\x5a\x47\x16\xac\xa2\xe5\xe6\x21\x12\x28\xbc\xf0\x54\x0c\x13\xd2\x3f\x16\xf6\x3c\x49\x23\x3e\x53\xa1\x09\xee\x68\x44\x10\xad\x6d\x25\xd8\x00\xb1\x2b\x10\xb3\xd1\x99\x09\x9f\x8e\x5e\xbe\x3d\x3f\x3c\x9b\x5a\x76\x0a\xc2\x0a\x95\xbe\xff\x4b\x7c\xb0\xd7\xa1\x27\x0e\x80\x0c\xeb\xcd\x93\x37\x6f\xde\x3c\x81\xa3\x25\x7e\x1f\x44\x0e\x7e\x7e\xf3\xc4\x7a\x0a\xb2\xd5\x06\xad\xe8\x97\x34\x48\x90\xa2\x05\x2e\x36\x38\xe5\x7c\x4b\x35\xfc\xaa\x91\x01\x7d\xd0\xad\x83\x84\x47\x16\xc7\x42\xa1\xdc\x3c\xcc\x57\x78\x68\xb2\x74\x5f\xa6\xc0\x47\x18\x36\x28\x70\xf1\x9e\xeb\xc1\x7f\x51\xad\xe3\x65\x86\x4a\x9e\x83\xa7\x0d\xec\xfe\x22\xa4\xaf\x76\xc3\x9f\xf5\x7d\x36\x6a\xa4\x13\xb7\x9d\xe4\x0b\xcc\x53\xf6\x93\x3c\x0c\x6c\x96\x73\x5f\xb5\xac\x90\x4e\x7c\x45\xe6\x20\x42\xde\x5b\x1f\x49\xea\x17\xf8\x42\x9b\x03\x79\x05\x1d\xe2\xac\x07\x1f\x08\xa8\xf6\x6c\x13\x62\xc2\x95\x79\x10\xde\x4f\x62\x40\x05\x87\xe7\xf5\xc5\xcd\xd5\xd1\x74\x72\x78\x79\x69\xcd\x0e\xaf\x5e\x4d\x67\xf4\xf1\x87\x49\xa0\xfe\xbc\xb8\x7a\xf5\x23\xfc\x1d\xab\xbf\xaf\x2f\x0f\x8f\xa6\xf8\xcd\xc4\x0f\x26\x20\x56\x50\x0d\xfd\xb1\x85\x35\x8f\x86\xd7\x84\x13\x2c\xd6\x9e\x06\x6b\x37\xc1\xed\x10\xe1\xd4\x49\xc9\xc0\x4b\x00\xe5\x27\x37\x02\x6d\x13\x6e\x0e\xf3\x04\x14\x21\xd0\x05\x27\x93\x0c\x06\xdd\x70\xc2\x08\xb7\x3f\xad\x9e\xdb\x20\x59\xf5\x59\x2b\x19\x6e\x90\x80\x91\x80\x03\x64\x8d\x13\xee\xed\xf1\xda\x00\x09\x96\x92\x84\x29\x2e\x1d\x29\x3c\x51\xd8\xf8\x3e\xde\x19\x51\x6d\x40\x21\xe7\x6e\x7e\x8b\x44\x91\x44\x2b\xa7\xef\x2e\x48\x71\x29\x91\xca\x0e\x57\x1f\xd6\xb3\xd2\x0f\x83\x57\x91\x3c\x12\x40\xc0\x07\xd6\xd3\x2a\x33\x40\x83\x04\x46\x5a\x69\xe4\x21\x07\x83\xdb\xc4\x86\xb6\x36\xdc\xe3\xc4\x24\x01\xb9\xbf\xcd\xdf\x6e\xe1\x53\x8b\x6f\x01\x0c\xf1\x5d\x18\x16\x5e\x02\x6f\xae\x4e\x99\x43\x80\x4f\xc0\xb7\x55\x61\x02\x7f\xbb\xbf\xa4\x35\x5c\x1c\x28\x65\x24\x65\xe9\xf6\xce\x9f\x84\xc6\xc2\xb8\xf7\x0a\x6a\xc5\xfb\x98\x52\xb9\xf5\xda\xdc\x9f\x5d\xbb\x92\xcd\x5d\x68\xbf\x28\x11\xdd\x4a\x6c\x68\xff\xdd\xdf\xbd\x0f\xae\x8e\xad\xa7\x71\x28\xe6\xee\xe2\xbe\x41\x76\xe1\xdd\x32\x5a\xa6\xa8\x68\xc4\x83\x39\x94\x23\x0d\x41\xfb\x99\x93\x66\xd8\x4b\x66\xa1\xb9\x40\x34\x10\x62\xc2\x9a\x30\x8d\x57\xa0\x60\x5e\xf2\x5f\x3f\x4c\x6e\xad\x17\x37\x27\xa7\xc7\x70\x3c\xfc\x13\x7d\x85\x67\xc4\xdc\x3a\xba\x38\x3b\x3b\x3c\x3f\xc6\x3f\x1c\xeb\xf8\xe2\xec\xf0\xe4\x1c\x3f\x2f\x2c\xf8\xf6\xe4\xe5\xf4\x7a\xf6\xf6\xf2\x70\xf6\x5d\xfb\xc1\x55\xc5\x48\xc8\xce\x2f\xce\xde\x66\x08\x4b\xb8\xa6\x45\x64\x53\xc6\x76\xf4\xdd\xf4\xec\xe4\xfc\xed\xeb\xe9\xd5\xf5\x5b\x85\xf9\xc7\x41\xbb\x87\x88\xd1\x1c\xc8\x76\xe7\xfe\x74\x75\xce\xcb\x05\xdd\xd7\x6d\x0f\x4e\xc5\x5c\xf0\xc3\x6a\x48\xd0\x72\x40\xb6\xa2\x89\x23\x3c\x17\x8e\x58\x34\x9e\xd8\x4b\xbc\x87\xd8\x09\x9f\x14\xb7\xc2\x7a\x1f\xb9\x70\x03\xf0\x95\x59\xe5\xf5\xd1\xe1\xe5\x5b\x69\x1e\xb8\xb6\x0a\x16\x50\x4b\x59\x40\x49\x0c\xd8\xfe\x3d\x1c\xb4\x29\xac\xf6\x82\xb9\x24\x6e\x36\x4c\x7c\xb1\x74\x0e\xe4\xb4\xb4\x81\x4c\x58\x10\xb8\xf3\xcc\x14\xc6\xd7\x8f\xd0\x8e\x60\x2b\xc3\x09\x87\x57\x10\x18\x2e\x5d\xc4\xd8\x1a\x1d\xdc\xfe\x0c\x67\x1f\x7c\x3d\x81\xbb\x8d\x38\x78\xe3\x17\x96\x49\x1a\xc2\x6d\x0d\x80\x4a\x03\xcb\x64\xde\xdf\xde\x8c\x86\xef\x26\x66\x2f\x5c\xba\x27\xf9\xa8\x0c\x90\xf1\x7e\x20\xf1\x07\x16\xe1\x9a\xad\x50\xd4\xc0\x61\x20\xa7\xa6\xd0\x8f\x31\xda\x3e\x4e\x20\x5a\xae\x6f\xe3\xc0\x43\x63\x1c\xcc\x4c\x24\x70\x75\xdc\xe5\x5d\x99\xbe\x2e\x46\xe0\x66\x7b\x3b\xbb\x78\xfb\xf2\xe4\x74\x2a\xc7\x3a\x65\x41\x89\xcb\x68\x8b\xc4\xe7\xd4\xe2\x57\xfa\x2f\xfc\xdf\x9b\x27\x73\x2f\x8d\x81\xb4\xb7\x7e\x00\xe7\x0a\xb0\x2e\xff\x8d\x7f\xc6\xbb\x29\x7e\xfd\x77\xfb\xa5\xef\xd7\x62\x1d\x44\xf7\x6f\xd7\xb7\xf8\xdb\x37\x5f\x7f\xfb\x7b\xf5\xeb\x27\xfa\xf0\xa9\xf9\x42\x9f\x7e\xfd\xf5\xd7\xff\x6d\xd7\x2b\x67\xb4\x85\xf3\x48\xeb\x66\xfc\x25\xb3\xa3\x15\xd3\xbe\x60\x1a\xd6\x4b\xfb\x72\xe1\x15\x51\x5c\x32\x1a\xa7\xd0\x0e\x17\xd2\x73\xc9\x1c\xc5\xc9\x5b\xd7\x77\x32\x3e\x66\xe7\xbd\x14\xb9\x6f\x4f\xce\xaf\x67\x87\xe7\x47\xd3\xff\xc0\xc2\xa9\x3f\x83\x86\x0a\x2d\xb8\x2b\xac\xdd\x38\xc6\xa3\x0b\x17\xd4\x9b\x27\x91\xb0\x9d\x49\xe0\x7b\xf7\x70\xa3\x68\x97\x3f\x7f\x5b\x33\xff\x41\xd7\xcc\xce\x0f\xba\x2f\x53\x6a\xcd\xc9\xf8\x9c\xb1\x58\x72\xd6\xba\x3c\x3d\x3c\xff\x2b\x5a\x87\xe3\x2f\xc3\x7e\x7c\xfa\xeb\x5a\x81\x9f\x55\xd4\xfd\x6d\xa1\xfd\xc7\x59\x68\x5a\x97\xc4\x68\x79\x98\x3a\x6e\x12\xe0\x43\xd5\x95\x3a\xa7\xf1\xd9\x8b\x9e\x00\x03\x7c\xa0\xa4\xf7\x28\xb2\x15\x45\x22\x0c\xa2\x24\x6e\xb1\x1e\x94\xe0\x01\x94\xcd\x6f\x31\x5c\x77\x2d\x4f\xe0\x23\x17\x2e\xef\x14\xd8\x64\xa7\x1f\xca\x6f\x5c\x22\xb1\x22\xb8\xf1\x22\x6c\xb6\x10\x01\x56\x53\xc3\x0f\x50\x90\x3f\xbd\x9d\xc0\x4d\xbb\xfc\xb8\x87\xb6\xaf\x78\x1f\x08\x41\x92\xe8\x87\xf9\xca\xf6\x97\xd2\x6b\x69\x9f\xbe\x89\x81\x1e\x58\xa3\xbe\x83\x8b\x96\xee\xf8\x1d\x43\xae\x22\x2c\x3f\xf6\xc5\x56\xc1\xe0\x85\xb8\x37\x0f\x88\xdc\x45\x7b\xb2\x34\x80\xd1\xf0\xb8\xad\xa4\x03\xbe\x5e\xb8\x1f\xe4\x4b\x3f\xdb\x19\x88\x37\xce\xe6\x01\x28\x8b\x45\x6c\xca\x9f\x4b\x5c\xff\xf1\x2a\x48\x3d\x87\xb6\x89\xf5\xd1\x0d\x69\x2b\xec\xe7\x16\xf8\xe2\x97\x68\x96\xb0\xbc\x60\x6e\x7b\x96\xe3\xa2\xeb\x19\xac\xc2\x03\xeb\x32\x88\x5d\xda\xb4\x6e\x0c\x3f\x87\xf4\xd7\x1d\xbf\x29\x00\x23\x90\xbf\x68\xfc\x8c\xdc\x20\x72\x93\x7b\xe6\xaa\x8b\xc6\x62\x72\x42\x5a\x44\xc1\x1a\x40\xbe\x47\x97\x16\xc0\xb6\x72\x97\x2b\xd1\xe6\xe7\x05\x5f\x9d\xc2\xbe\x5e\x89\x35\xc8\x05\x27\x70\x13\x6b\xf3\x17\x7c\x04\x49\x7d\xa0\x71\xbe\x42\xce\x01\xbd\xfb\x99\x55\xff\x0e\x65\x41\xf5\xc7\x20\xc5\xaf\x22\x64\x5f\x94\x04\x30\x12\x1e\x54\x61\x28\x48\x0e\xb9\x13\xac\x6f\xe1\x57\xe1\x27\x2e\x8e\x04\x18\xbe\x00\xf1\x95\xa0\x2f\x93\x1c\xd0\xe6\x81\xe6\x87\xc8\x8f\xdc\xcd\x03\x8a\x20\xe0\x93\x03\xbd\xe6\x51\x00\xaa\xaf\xed\x27\x06\xbe\x62\x38\x39\x68\x71\x5b\xa7\x5e\xe2\xa2\x38\x81\x2d\x91\x19\xae\xf1\xd9\x66\x01\x18\xdb\xbc\x53\xe1\xab\x63\x18\x9f\x17\xdc\xc3\xa0\x43\x10\x33\x2e\x2e\xb8\x92\x2d\x29\xb3\x3c\x67\xf0\xcc\x56\xd1\x35\xda\xad\xf3\x9d\xfe\x1a\x7d\x83\xbc\x60\x09\x0b\x57\xca\x88\x6c\x27\xa1\xab\x1f\xba\xe4\xb1\x3f\x01\xd9\xbb\x5b\x86\x50\x85\xab\x7c\x7d\x18\x36\x7e\xca\x04\x85\x7c\x2c\x27\xf1\xbf\xf9\x0d\xd6\x83\xb4\xb6\xcf\x69\x6a\xaa\x78\xb4\x07\x77\x2c\xee\x84\x47\xae\xa1\x75\x3e\x02\x34\x35\x3c\x42\xf6\x3e\x54\xe3\x15\x44\x6a\x4f\x69\x59\x83\x68\xcb\x55\xa0\x32\x7f\x72\xd4\x39\x5a\xf8\x02\x8e\xd1\x18\xd6\x8c\xc8\x59\xa5\x9a\x29\x66\x0d\xe2\x44\x0f\x71\x8a\xdf\x08\x9f\xed\x98\xc0\xaa\x34\x92\xef\x2f\x99\x2b\x58\x9f\x69\xd7\x93\xa2\xf0\x1b\x3f\x5e\x46\xd2\xf7\xcb\x67\x91\x0a\xe7\x2f\x39\x81\x2a\xbf\x2f\x5e\x0a\xd2\xed\xcb\x94\x0f\xa4\x73\xb0\x5e\xe3\xb0\x06\x61\x70\xab\x3a\x49\x94\xdc\x65\xdf\x58\x0b\x7d\x31\x71\x9b\x47\x91\x7d\xcf\xfb\xbc\xa0\x37\xa0\x12\x14\xa3\x1e\xc5\x6e\x6e\xb7\xec\xb7\x29\xac\x08\x3d\xdc\x7a\xcb\x4a\x1c\xb4\x15\x8a\xb4\x20\x32\xe5\x6f\x4c\x36\x8a\x45\x26\x7a\x51\x15\x9b\xf2\x2a\x28\xbc\xd4\x9d\xcc\x5d\x96\xbb\xa8\xcc\xa9\xb7\xd2\x04\xa7\xdb\x4e\x2d\x67\x0f\x09\x06\x7a\x89\xf8\x5f\x52\x17\x45\x26\x50\x7c\x87\xe6\x6d\x5a\x84\x9b\xdf\x96\x65\x9a\x1f\x93\xf5\x0c\x81\x34\xc3\x02\xf7\x69\x6c\x83\x66\x80\xe1\x52\xf3\x17\x76\x2c\xac\x0b\xa9\x7f\xc7\x7c\x2b\x47\x27\x01\x3c\xeb\x70\x67\x90\x4a\x85\x3d\xe3\x5f\x52\x1b\x26\xe1\x36\xb2\xe7\xef\x90\x63\xf8\x63\xd1\x3f\x7a\xe5\x02\x79\x52\x91\xc7\x86\x91\x00\x76\x46\xfc\xd4\x9b\xc8\x51\x00\x62\xa9\x75\xbe\x26\x55\xf3\xe7\x38\xf0\x79\x78\xf2\x09\x8e\x15\xce\x1f\xa4\x7a\x98\x2b\x97\x6f\x9e\x00\x1b\x93\x60\x1e\x78\x6c\x95\x49\xe6\x21\xea\xf4\xf9\xcf\x30\x4c\x10\xd6\xb4\x92\xb8\xc5\x37\x5f\x1f\x7c\xfb\xfb\xdf\x1f\x7c\x73\xf0\xcd\x7f\x2d\xb7\x64\x99\x42\x6d\x7e\xf7\xbb\xaf\xff\x5e\x9a\x75\x94\x2a\xfa\xe3\x63\x2c\x4e\x82\xa4\x0e\xf8\xd2\xda\x24\x1a\x4c\xd6\x27\x80\xe4\xa6\x20\x36\xe7\x70\x87\xca\xfd\xf0\xd5\x8c\x92\x5c\x25\x1d\x76\xad\x3a\xc3\x81\x0f\x34\xf3\x71\x24\xf1\x08\x7f\x01\x0a\x40\xc1\xef\x9c\x1f\xc9\x69\x32\xe5\x0b\xb9\x27\x0a\x03\xc9\x2e\x11\x82\x2e\x11\x8e\x44\xcc\xae\xff\x5f\xd2\x6c\xea\x6c\x5b\xd2\x08\xe0\x3e\x18\xbc\xa7\x53\x01\xdf\xe4\x6d\xe5\x2e\xab\x2e\x5b\xfc\x65\xb3\xe7\x6b\x76\xfa\xcb\xde\xb6\x43\x76\xc5\xdb\xdc\xeb\xb5\x11\x92\x0e\xa9\x3f\x4c\x5c\xeb\xfc\xe6\x2c\xbb\xe4\x5d\xe3\x63\xec\x3b\xeb\xf8\xe4\x9a\x5e\x6c\xd7\xd6\xd9\xf4\xec\xe2\xea\x7b\xfc\xec\x5b\xdf\x5d\x5c\xcf\xf0\x53\x48\xf7\x40\xf6\x39\x82\x6e\xfc\xb8\x9b\x58\xb3\x93\xb3\xe9\xc5\xcd\xac\xe3\x81\x95\x30\x5e\x9c\xbd\xb8\x9a\x5e\xd7\x60\x3d\xca\xb1\x9e\x5c\x4d\x25\xda\xcd\xbf\xcd\xa6\x8c\x97\x1f\x63\x19\xf3\x25\xdc\x41\x25\xe2\xe9\xd9\xe5\xf5\xdb\xe9\x1f\x2f\x4f\xae\x0e\x67\x27\x17\xe7\x86\xce\x4e\xb6\x83\x62\x16\x78\xdd\x3c\x2b\xb5\x6d\xfa\x63\x70\x02\xc1\xae\xf2\xe2\x03\xbe\xa6\xe2\xb4\x92\xa6\xd4\x8c\xaf\xbb\x47\x7f\xec\x78\x5d\xf1\xd0\x1e\x7d\xaf\x42\x22\x9a\xf1\xe2\xce\x07\x51\xf1\x33\xfb\xe2\x73\x5c\xc3\x60\x9c\x01\x46\x05\xf4\xc2\x89\xf8\xfe\x92\x18\xa3\x04\x61\x92\xdc\xb7\x23\xc2\x33\xd5\x10\x3a\x4e\x87\xb2\xd0\xc0\xa5\x71\x1f\xae\x1b\x02\x4f\xc1\x92\x33\x17\x28\x69\x07\xcb\x03\x6b\x95\x24\xe1\xf3\x67\xcf\xee\x41\x21\x7b\x8b\xf3\x86\x3e\x22\xcd\x84\x8d\x0a\x5c\x7f\x4c\x77\xb6\xeb\x91\xc4\x82\x53\x08\xe1\xb5\x6d\x84\x3e\x7d\xb4\x29\x00\xd5\x39\x0c\xc8\xf4\x00\x57\x53\x1e\xf7\xda\x7e\x07\xba\x03\xda\x4f\xdc\x84\x2f\xdc\xcc\x1b\xb8\xe2\x2d\x25\xca\x16\x85\x70\x2c\xb8\xfd\x47\x82\xe8\x16\xe8\xc6\xd0\x4c\x14\x46\xb2\x24\x51\x90\xde\x99\xad\xef\x48\xac\x83\xbb\xcc\x92\x20\xbd\x32\x90\xde\x18\x2f\x8e\xae\x88\x9b\x31\x6b\x74\xed\xef\x8f\xff\xe4\x92\x58\x06\xa7\xa8\x52\xdf\x32\x1e\x28\xdd\x4d\xf2\x1f\x30\x3b\x76\x62\xb7\x04\xc5\x0c\x81\xd5\x9b\xe2\xaf\x32\x91\x44\x42\xb5\xe5\x42\xd1\xd2\xb2\x37\xb6\xc3\x2c\xd8\x0c\x6d\xd3\xa0\x9c\x07\x64\x66\x52\x1e\xa8\xac\x16\x1c\x79\x41\xea\x58\x2f\x71\x9c\x51\xb3\xe0\xba\xf1\x41\x2b\x84\x8b\x20\xd9\x09\x31\x36\x8a\x62\xf8\x54\x8c\x19\x5d\xfa\x18\xec\x12\x74\x07\x52\x12\x1a\xe0\xf6\x27\xfe\xf8\xf8\xd9\x15\x9c\xc5\xaf\xd1\x5c\x7e\xf3\xea\xe4\xbc\x91\xb6\xea\xcf\x7d\x0d\x3f\x5b\x18\xac\xab\xe9\xe5\xc5\xf5\xc9\x0c\xb4\x8e\xe6\x88\xc1\x5e\x9d\x34\x46\xf9\x1a\xb5\x90\xe3\x66\x7c\xf8\xfb\xe6\x4f\x53\x13\xd8\xa7\x27\x87\xd7\xcd\x80\xcb\xbf\xf6\x87\x7a\x79\x92\x45\xf6\x35\x02\x9f\x66\xa1\x7f\x68\x56\x86\x2e\x03\x11\x59\x4f\xb3\x53\x27\x86\x63\xc7\x0e\xdd\x83\x82\xe7\x63\xb3\x5b\xb2\xa8\xd2\x61\x3d\x45\xa3\xa1\x90\x3a\x7f\x37\x3c\x23\x6a\x9f\xf7\xe7\x8b\x89\x1d\xb0\x84\x8a\x03\x42\x5d\x05\xf8\x53\xf3\xcb\xd7\x36\xee\x96\xbe\x23\x11\x63\x3d\xc5\xdf\xf1\x12\x09\x44\xa8\x9f\x5f\xf3\x9f\x9f\x3e\x35\xcf\xdb\x16\xad\x56\x1d\x6c\x09\x77\x6b\x40\x75\x08\xcc\x07\x64\xcc\xda\x81\x7c\xbd\x6c\xd9\xbb\xa5\x1f\xfb\xc3\x9c\xa3\x5d\x03\xed\x29\x32\x4b\x00\x5c\xaa\xe7\x29\x3e\x15\x58\x14\xb0\x1e\xd3\xed\x02\x28\x57\x9e\xca\x9f\x5a\x82\xe7\x87\x01\x33\xa0\x59\x06\xdc\x57\xd0\x20\x96\x12\x92\x1e\x04\x6b\x43\xea\x4f\xad\x03\x37\x34\x8a\x5a\x2c\x28\x73\xa4\xe1\x34\x1f\xad\xbd\xfa\x68\x52\x80\x0f\x4a\x91\x8a\x97\x46\x8b\x5d\x18\x36\xe3\xff\x19\x1b\x46\xf4\x8c\xc3\x7d\xb2\x10\x0d\xfc\xaa\x60\x06\x37\x23\x87\x96\x08\xc1\x05\xee\x02\x68\xd8\xb9\x48\x54\x35\x5c\x1e\x06\x8e\x8f\x9e\xf0\xdd\x45\xb4\x94\xdf\x3d\x63\x0b\x36\x7e\x49\xa6\x6a\x15\xf6\x4e\x13\x75\x93\x4d\xd4\xc1\x41\xb3\x1e\x45\xa3\xa3\x7d\x69\x57\xa9\xa8\x06\x72\x97\xe9\x21\x83\x51\x85\x9a\x0a\x1d\xe8\x68\x6c\xc3\xae\xc7\x70\x95\x66\x82\xfa\xf3\xca\x73\x61\x64\xe5\x78\x7d\xa5\x7a\xca\xa5\x71\x2b\x90\x9b\x94\x47\xc1\xf3\x38\xfc\x1d\x96\x0e\x1b\x60\x8f\x5e\x2a\x85\xec\x99\x8d\x90\x0e\x2c\xeb\x4a\x50\xbc\x01\x02\xa8\x80\x55\x8a\x61\x07\x78\x9c\x13\x07\xd6\x06\x4c\x98\x7c\x67\x70\xd9\x3e\x8b\x0d\x98\x69\x08\x05\xf6\x4c\xf3\x0c\x9c\xee\xd9\x75\x03\x53\x06\x39\x89\x5a\x60\xea\x07\x7c\x36\x73\xf6\x4a\xe0\xf9\x75\x30\xd7\x35\x9f\xa5\x80\x92\xe0\xc1\x78\x71\xe4\x0b\x1e\x27\xc6\x2f\x7c\x6c\x49\x7c\x50\xc5\x67\x2f\xd0\x16\xba\xa7\xde\x32\xd0\x9a\x5b\xc4\x3b\xde\xfc\xe1\x0c\x95\xe6\x85\x02\x88\x98\x08\x14\x8f\x7c\xed\xe0\x15\xb5\x07\x63\xf9\x3e\x48\x91\x13\x9e\x03\xca\xeb\x3d\x06\x43\x31\x55\x38\x31\x4d\xbd\x68\x0e\x60\x1a\xb3\x21\xf0\xa3\x9f\x6c\x5e\x9c\x44\xd7\xbf\x0b\xde\xb5\x2d\x08\x20\xe0\xbb\xe0\xbd\xb8\xc3\x27\x58\xb8\xdc\x2b\xdb\xfd\xc2\x8d\x60\x1e\x16\x29\x3a\x9a\xa4\x18\xa2\x86\x89\x3c\x08\xa7\xe5\xae\x43\xbc\x4b\xc0\x6d\xae\x44\x2b\xfe\x44\x37\x17\xfc\x63\x9b\x62\xa6\x4d\x7b\xd1\x6c\xad\x06\x6e\xe5\xa4\x6d\x1c\x7d\x8d\xb1\x75\x21\x86\x7e\x7f\xb4\x12\xe1\xcb\x80\x3c\xcc\xf3\xa0\x56\x7a\x54\x58\x18\x35\xb4\xa6\x6e\xb6\xe6\x29\x18\xba\xb2\x86\xc4\x87\xcd\xc3\x9c\x44\x68\xf3\xf2\x03\x32\xce\x37\x0f\xb6\xbf\x06\x85\x20\xde\x57\xe1\x7e\x77\x70\xf1\xfd\x88\xab\xf0\x16\x23\x81\x30\x38\x39\x02\xd5\x03\xdf\xc8\xf7\x24\x5b\x59\x70\x15\x68\x95\xb9\x4a\x5a\x06\x6c\x70\x11\xf2\x0a\x69\x24\xe8\xc1\x44\xfa\xe1\xe0\x63\x88\xba\x86\xb2\x6f\x8a\x9b\xc5\x4c\x40\x1f\x90\xd7\xcd\x37\xfe\x19\x0e\x31\xf3\xac\x50\x6f\xc4\x19\x68\xb2\xcd\x2b\x93\x5b\x06\x5a\xb6\x4b\x50\x50\x73\xef\x32\x0e\x8d\xbd\xa8\x3f\x24\xda\x34\x6d\xd9\x06\x86\x0c\x89\x43\xe8\x9b\xf2\x0e\x0c\x9f\x1e\xd7\xdf\xe1\x04\x15\x81\x3f\xee\x14\x6d\x0d\x6b\xcc\x49\xaa\x19\xd6\xa0\x69\x8a\x03\xd8\xaf\x9e\xa0\xa7\xfa\x2c\x13\x0d\x29\x1d\xcd\xb3\x70\x9d\x25\x59\xd8\x3c\x2c\x6d\xf9\xc2\x55\x60\x2e\x77\xcf\xd3\xcf\x18\x71\x9a\x55\xab\x75\x0a\xd2\xf3\x56\xc8\xdc\x1a\x02\xfd\x90\x80\xa3\xea\x6f\x99\x1a\xaa\x35\x59\xc8\x0d\x01\xb2\x7d\x74\x07\x20\x31\x94\x3b\x05\x61\x86\x0d\xce\x3f\x64\xf3\x3d\x28\x4f\x14\x62\x9c\x21\x04\x53\x2a\x35\x2b\x76\xa5\x1f\xb5\x60\x92\x52\xe4\xf2\x7b\x86\x7c\xe9\x85\xbe\x5e\xb3\xdd\xf4\x5c\x85\x50\x16\xb5\x45\xe9\xb7\x34\x5f\xd9\xeb\xd0\x0a\x6e\x3d\x77\x69\x93\x83\x93\x21\x51\x65\xe5\xb3\xf4\xf6\xd2\xa2\xdd\x56\x3b\xfa\x7b\xd4\x83\xc2\x3a\x8d\x74\x98\x2d\xb5\x1c\xd9\xf4\x3e\x88\xde\x91\x7b\xd9\x3b\x37\x0c\x73\x7d\x9e\xbc\x36\x4b\xf7\x82\x2e\xf2\x24\xcf\x14\x3c\x34\x47\xe3\x52\x89\xe0\x68\x4c\xe4\x4d\xbe\xba\x5f\x86\x91\x2e\xc5\x08\x47\xf7\x81\x02\x84\x1a\x3c\x4b\x02\x6e\xa4\xc1\xda\xc2\x1b\x91\xe7\xca\x44\x50\x2d\xe0\x74\xe8\x86\x43\x9f\xb2\xb1\xe0\x72\x24\x34\xae\xbd\xf4\x03\xd0\x9d\xe6\x31\xbb\x54\x78\xc1\x92\x9c\x0d\x3a\x2f\x71\x9c\x86\x49\xf6\x46\x60\xea\xea\x03\x90\x61\xa3\x0a\x99\x8b\x0b\x48\x2f\x38\xea\x39\xec\x3d\x65\x46\x7b\xdc\x6c\xed\xaa\xfc\xda\x1f\x2a\xa7\x7a\xb2\xf9\x7d\x59\x5e\x61\xdb\x64\x7e\x9e\xa0\x09\x46\xc5\x9d\x68\x84\xa6\x89\x7e\x32\x02\xf8\xfa\xc9\x10\x1d\x41\x0e\x89\xb8\x4c\x69\x4e\xda\x45\x65\x91\x24\x91\x79\x33\xca\x35\x2e\x01\xee\x49\x27\x29\x9e\x0d\x73\x31\x59\xa6\x16\xf3\x4a\x31\x85\x68\xca\xe8\xc7\x33\xca\x69\x55\x25\xa8\xe0\xf8\x35\x80\x2a\x3e\x7b\x86\x10\x85\xfd\xc7\xa3\x08\x84\xfd\x6b\xf4\xa2\x6f\x76\x7f\x80\x53\x18\x34\x01\x9b\x49\x31\x4b\x07\xc8\xa8\x58\x52\x7a\x64\x1c\xb8\x82\x7f\xd9\xf2\x81\x0c\xc0\x6f\x38\xbf\x96\x4c\x0b\x96\x5b\x3f\xf8\xeb\x8b\x68\x59\xb6\x7f\xf0\xd7\x64\x7d\xc8\x2c\x20\xa5\xcc\x62\xad\x46\x90\xc5\x42\xcc\x93\xec\xea\xc0\x8c\xcd\x89\x22\x43\x48\x31\x3b\x40\x95\x3a\xe5\x1c\xbe\x4d\x9f\x68\x20\xb0\x62\x1a\x69\xa6\xf4\xb1\x59\xfa\x85\x70\x6e\x97\xfc\xa9\x98\x35\x01\xbc\xfa\xe6\x2d\x7d\xc3\x3c\xcb\x26\x2e\x96\x53\x96\xf3\x8b\x75\xbc\x8f\x34\xea\x8c\x65\x69\x3f\x73\x5b\x99\x5f\x84\x8f\xde\x0a\x63\xbc\x23\x93\x13\x77\x2d\x41\xc4\x48\xb1\x45\x13\x1b\x6d\xf6\xea\xe9\xaa\xf0\xb0\x81\x40\x13\x06\x16\xa4\x3e\x00\xfe\x67\xfc\x20\x95\x80\x22\xe3\x8c\x4d\x92\x45\x1e\xed\x65\x27\x96\x53\x18\x7f\x11\x65\x85\x35\xbb\x34\x40\xc2\xdd\x67\x1d\xd2\x4d\x00\xc6\xe9\x04\xef\x7d\x2f\xb0\x1d\x0c\x47\xb4\xa3\x7b\x76\x76\xa4\xe7\x7b\x7a\xe9\xf5\xd1\x13\xd8\x71\x30\x67\x5d\xeb\x60\xc7\x80\x69\x38\x82\xb5\xbb\x8c\x6c\xb6\xf8\x4a\x2d\xed\x44\x66\xa0\x3d\xce\x73\x58\xb6\xcf\xd5\x0c\x76\x25\x9b\x57\x31\x87\x13\xc1\x93\x96\xe2\xde\x10\xb5\x88\xf7\x13\x7a\x28\x23\xef\x5b\xb8\xbf\x92\x15\xe9\x12\x3e\xf0\x84\xff\x84\x57\x65\x75\x93\xfd\xa9\xaa\x7c\xfe\xa4\x7c\x4e\x16\x91\x50\x0e\xb8\x59\xca\xdd\x9f\xb6\x49\x56\xbd\x0a\xd9\x7f\x6d\x99\x2c\xd8\x3a\xc2\xf0\xb1\x79\x82\x36\xc0\x88\x1c\x00\xe1\xce\x07\xac\xc1\xf0\x00\x77\x41\x96\x41\xb8\x88\xfb\xef\xf8\x3a\x4e\xe6\x31\xce\x59\xd8\xbe\x10\xe4\xe8\x4e\x1b\x06\x07\x02\xa3\x65\x70\x79\x2e\x56\x9c\x85\xd4\x4d\xc8\x73\xb4\xcf\x00\x83\xf9\xdc\x8e\x39\xee\xc7\xce\x72\x0c\xe7\x83\x14\x1f\xad\xbb\x00\xef\xb0\x85\x71\xa2\x2c\x8f\x5d\xb6\xd3\x51\xe0\xcf\x47\xda\x64\xf3\x3d\x65\x81\xe4\x64\x88\x46\xd3\x9c\xa2\xa9\x36\xc1\x6b\x24\x3b\xf2\xc3\x9c\xf9\x93\x52\xe6\xb2\x66\x26\xca\xbe\x1c\xb6\x54\x3a\x79\x8a\x39\xc6\x2a\x00\x87\x11\x89\xae\x4b\x6d\x1b\x3c\x23\x49\xdd\x8b\x95\x25\xdf\x70\x17\x14\x30\x03\xb4\x15\xcc\xb7\xf8\x10\xe2\x25\x1d\xb3\x86\xb3\x07\x15\x5e\x87\x6e\xed\xf9\x3b\x7a\xbe\x08\xe0\x72\x33\xb1\x0b\x4c\x3d\x50\x19\xe5\x29\xb7\xe8\x4f\xc5\xc4\x98\x98\x56\xe1\x77\x73\xf5\xbc\x4b\x7f\x09\xcc\xa5\xc4\xdf\xe3\x64\xa8\xef\x02\xf9\x1d\x86\xc4\xc9\xaf\x62\xf9\x15\x47\x55\xd0\x97\x3f\xc9\xd4\x68\x19\x35\x1c\x80\x52\x26\xa7\xcd\xc8\x5d\x1e\xac\xcd\x43\xdd\x3c\xc0\x50\x0b\x53\xfd\x91\xd7\x21\x1c\x04\x94\xc0\xd4\x4e\x0f\x8a\x09\xf1\x55\xe6\xd3\x8f\x5a\x43\xcd\x57\x4e\x8f\x11\x8b\xd2\x90\x65\x3a\xe0\x14\x5d\xb8\x1f\xec\xc2\x8a\x34\x99\xee\x17\x27\xa7\xa7\x27\xe7\xaf\x30\x51\xd2\xe1\xab\xe9\x55\x23\xaf\xae\xa6\xd7\x97\x30\xe0\xc3\x17\xa7\x53\xeb\x78\x6a\xbd\x3c\x3c\x9a\xdd\xb0\xcb\xad\x09\x52\x4c\x0d\x45\x4e\xc3\xcd\x97\x57\xf2\xec\x45\x54\x47\x17\x67\x97\x27\xa7\x84\xca\xe4\x32\x9b\xa5\xa1\x6a\x7e\xce\xaf\x6b\xd2\x1f\xbe\x8b\xd1\x0c\x55\xa5\xaf\xc7\x0d\xf5\xd4\xe5\x6b\x56\xad\x8e\x36\xf0\x4a\xda\x48\x14\xda\x79\x95\xf7\x5f\xd5\x5f\x40\xa6\xf6\xc6\x1c\x7b\x68\xe9\x55\x6e\x05\xc5\x38\x2c\xe3\xc1\x78\x9c\x45\x4a\x70\xa2\x38\x6a\x14\xd7\x0c\x59\x65\xd3\xa5\x25\x9e\xbf\xeb\x38\x95\x70\xb0\xcf\xc4\x11\xe5\xb7\xf0\xd9\x38\x52\x8c\xfc\x1a\x8b\x1f\x95\x52\x04\xdd\xfe\x0a\x72\x60\xe5\x72\x02\x0a\x8e\x34\xfb\x0c\x73\x5a\x40\xda\x90\xcf\xb7\x22\x79\x2f\x04\x69\x7b\x65\x95\x82\xc4\x7c\xd9\x60\xeb\x3a\xb9\xbd\xb6\x99\x74\xe4\xb9\xed\xc6\x74\x4a\xa2\xc6\xb1\x0d\x19\x34\xe0\x3a\x83\xae\xed\x92\xea\x33\x60\x30\xfd\x6e\x85\x8e\x58\xd8\xa9\x97\xc4\xe5\x1d\xd8\xd7\xc5\xe6\x54\x0e\x4e\xe7\xe6\x87\x51\xe9\x98\xac\x70\x81\x11\x87\xfe\x9c\x43\x4b\xc9\x60\x06\x47\x8b\x4c\xe4\xb8\xb7\x79\xe0\xbd\x28\xf5\x8b\xfa\x6b\xdf\xce\x99\x93\xed\xbf\x5d\xf2\x43\x8e\x98\xb6\x9a\xbd\xc3\x01\xf3\x7e\x69\x52\x9a\xc7\x71\xd1\xe9\x6d\x66\x29\x30\xaa\x93\x32\xe5\xb6\x53\xd9\x80\x05\x43\x4b\x91\xba\x5e\x17\xe7\x11\xcc\x2f\xcd\x8c\x1d\x93\xa1\xfd\x0c\x0c\xad\xdc\xdc\x1d\x17\x87\x9a\x1f\x14\x0b\x8b\x6e\x62\x45\xea\x7a\x0d\xb9\xec\xdf\xd5\xd8\xbd\x3f\x51\xa9\xeb\x39\x21\x6a\xf7\x00\x2b\xfb\x43\x4d\x4a\xc9\x45\xbf\x99\x38\x61\xdd\xb6\x81\x91\x4f\x76\xfc\xb8\x34\x36\x8d\x7d\x9f\x12\xbb\x88\x1c\xfa\xb2\xf8\xe2\x3e\x41\x9b\x1a\xac\x17\x94\xb3\xea\x2d\xda\xf6\x55\xf2\x0a\x95\x71\x21\xc5\xa4\x0f\xa0\x0b\xad\xe1\xa6\x97\x46\x32\xe2\xd3\x7d\x27\xac\xb3\x7d\xeb\xec\xc5\xbe\xf5\x8a\x72\x63\xbc\x7a\xd1\x76\xc8\x4a\x34\x58\x19\x67\x2f\x80\x0b\x3e\xe6\x37\x29\xe5\xaf\xe0\x2c\x13\x32\x81\xc6\x42\x65\x67\xa0\xdc\xd3\xd4\x0b\xee\xd2\x82\x22\x74\x38\x2f\xae\x42\x8d\x91\xb1\x2f\xf4\x3d\x03\xb2\xc4\xf3\x8e\x33\x61\xb7\x9d\x09\xc5\x2b\xfd\x80\xa1\x03\x2a\x1d\x2e\xac\xd9\x1f\xf1\x5a\x37\xfd\xe3\xe1\xd9\xe5\xe9\x94\x03\x50\xb1\x52\x43\xa5\xd3\x65\x84\xe7\x82\xb8\xc2\xcf\x32\x0a\x6b\x7d\x1f\xf2\x97\x2a\x12\xeb\x19\x7e\x78\xd6\x27\x15\xfe\xe7\xa3\xa8\xf7\xc2\xc9\x68\x0d\x5d\xa6\xa9\x7b\x54\xdb\x2d\x0d\xb0\x85\x59\xea\xb5\x1e\x08\xa9\xf1\x80\x95\x81\x25\x09\x6e\xae\xa7\x57\xf4\xd7\xe5\xe1\xf5\xf5\x1f\x2e\xae\x8e\x91\xf9\xdd\xb8\xb1\x2b\xe6\x3b\xbe\x99\x9d\x9c\x9e\x5c\x1f\xce\xa6\x37\x57\xd6\xd9\xc5\xec\xed\xf1\xf4\x2d\x02\x9a\x96\xa1\x68\x33\x82\x92\xd1\xa9\xaa\x72\x4a\x5b\x91\x05\xce\xae\xa7\x47\x37\x57\x27\xb3\xef\xdf\xbe\xba\xba\xb8\xb9\xec\x24\xb5\x0d\x14\x41\x98\xbe\x95\x10\x4d\xc2\x5d\x2a\xd9\xf3\x5a\x08\xb5\x2e\xae\x5e\x59\x54\xaa\xa0\x1f\xc9\xed\xa4\x12\xb4\x69\x05\x9c\x29\xd5\x5d\x39\xff\x7e\xa0\x4c\x58\x57\xf0\xdb\x0c\xb3\x42\x1f\x5e\xbf\xc5\xa0\xf5\xee\x2d\x31\x16\x78\xc3\x71\xc9\x5a\x79\x23\x2c\x9f\x06\x50\x23\x2e\x1f\x75\xee\x35\x9f\xe7\x6d\x4d\xb5\xf1\xcd\x57\x62\xfe\x6e\xc2\x0e\x35\x18\xe5\x2e\x53\x93\x77\x22\x2f\xf7\x83\x65\x28\x53\x9a\x0f\x21\x85\xf2\xc2\x61\xf5\x0e\x3b\xbe\xf7\xe7\x54\x04\x02\xbd\xe7\x65\x74\x3d\x2c\x93\xb7\x67\x27\xe7\x37\x33\x0e\x9a\x9f\x00\x61\x78\x61\x07\xf9\x66\xfd\x0b\x63\x80\x7f\x31\x0d\xc8\xb3\x24\x78\x86\x2f\x3b\xd4\x6a\x1e\x78\xe8\xb6\x57\x68\x45\x5f\x53\x16\x28\x61\x3d\x3d\xbd\x38\x3a\x3c\x9d\xc2\x4f\x47\xa7\xd3\xc3\xab\xaf\xba\x57\x72\x46\xa4\x55\x4f\xe4\xb4\x44\xa4\x45\x44\x46\x55\x2a\x39\xdf\xc5\x33\x0c\x20\x7a\x26\xbd\x60\x28\x4b\xbc\x29\xad\xba\xf2\x5e\xe6\xbb\x83\x73\x63\xa2\x32\x42\xc9\xdc\xf5\xa1\xf5\x4c\xb1\x90\x6d\xaf\xd8\x86\xf2\xff\x91\xf5\x35\x6b\x7e\x70\xbf\xf6\x5a\x52\x7e\xb4\x21\x32\x47\x62\x38\xcc\x5c\xaf\xcc\x2c\x9d\x94\xc6\xc1\xa2\xc0\xc9\x93\x8b\x73\x64\x32\xc7\x17\xfc\xcb\x64\xe2\xb8\x31\x7e\xea\x3d\xb6\x3a\xe8\x9c\xac\xa1\x2f\x7c\xfd\x8d\xc2\x98\x9d\x60\x8d\x15\x53\x50\xfe\xf7\xdd\xb4\x0d\x1d\x07\xed\x5a\x86\x89\xb7\x36\x00\xd8\x97\x84\xad\xe6\xa6\x78\xf9\xf1\xfa\x9f\x6f\x2e\x66\x87\x94\x3f\x63\x06\x1f\x4e\xdf\xe6\xb9\x3b\x5c\x4b\x9d\x2e\x85\x2f\x23\x0b\xe4\xb5\xdc\xa2\xf1\xd6\x31\xc4\xe2\x85\xb2\x98\x4c\x42\xdb\xcd\x0e\xae\x09\xb9\xf4\xf6\x5e\x18\x55\xca\xce\x36\x7f\xa2\xd4\x1e\x6f\x89\xc4\x29\x13\x97\x7d\xa9\x90\x6f\x93\x97\x91\x85\x2a\x95\xaa\x26\xd0\x97\x44\xc3\x2d\xc3\x72\x9d\x94\x0a\xb9\x44\xb2\x34\x28\xa4\x9d\xf7\xe5\x01\xc3\x99\x16\x01\x4d\x0b\x99\x4d\x86\x4f\x7f\xbb\xa2\xa5\x92\x76\xa2\x16\xf1\xf6\xea\xe6\x14\x78\x88\xf9\x3b\xfb\x52\xdf\xa1\x78\x15\xeb\x63\xbc\x3c\x39\xfa\xee\x64\x7a\xf5\xf6\x6a\xfa\x0a\xb1\x20\xc2\x31\x06\xd7\x27\x6f\x6b\x83\xd2\xc4\xf9\x61\x0e\x5f\x5d\xf7\x9e\xac\xd1\xd1\x0d\x1c\x37\x3d\x63\x4e\x92\xe0\x9d\xf0\xad\xd3\xc3\x17\xd3\x53\xeb\xf2\xea\xe2\xf5\xc9\xf1\xf4\x0a\x76\xf9\x3f\x4d\x7b\x8b\x3b\x6d\x70\x43\xe9\xbe\x8d\x00\x49\x94\xb1\xee\xc5\x15\x80\xbf\xda\xbe\x5f\x61\xa0\xa3\xee\x18\xea\x41\xb7\xdd\xbf\xca\x58\x86\x0e\xed\x9d\xb8\xdf\x5e\x12\xea\x8b\x7f\x9a\x7e\xdf\xb4\x3c\x1a\x2b\x37\xec\xa4\xc4\x84\x2e\xd1\xff\x01\x6b\x50\x18\xb0\x68\x60\x91\x8a\xee\x02\x01\x5b\xd6\x9e\x16\x62\xd7\xf7\xce\x2d\xfc\x07\x3f\xca\xd9\x2b\xc3\x2f\x81\xc7\x59\xd3\x01\xf7\xaf\xcf\x30\x44\x80\x8c\xce\xcf\x92\x75\xf8\x4c\x3d\xf5\xbd\xe5\x09\x3c\xc0\xec\x7b\xba\x3b\xf7\x6f\x3b\xe7\x6f\x3b\xe7\x6f\x3b\xa7\xbc\x73\x8c\x4f\xa3\x95\x1d\x09\x47\xdd\x63\xf4\x2e\x3f\x75\x7d\x47\xb8\xff\xf0\x0b\x15\x2b\xba\x58\xa1\x54\x96\x26\xfd\x85\xbf\x9a\xd0\x35\xa0\xbf\x26\xd6\x04\x8c\xc0\x4c\x58\x9f\x1e\xae\xe5\x73\x21\xf0\xf2\x3d\xa5\xf6\xbe\x54\x4c\x86\xf8\x28\x77\xa7\x7a\xca\x64\x6e\xc4\xd2\x5d\x29\xcb\x98\x38\x1e\x69\xa6\x4b\x80\x9c\x29\xb7\xb4\xbc\xbe\x43\xa6\xde\x6d\x8a\xdc\x38\x04\x4e\x54\x56\xdd\xe6\x6a\x07\x94\x6e\xf2\x6a\x7a\x3c\x3d\x9f\x9d\x1c\x9e\x12\xdb\x3c\xeb\xfa\xfb\xeb\xd3\x8b\x57\x93\xe3\x2b\xd8\x2e\x13\xf5\x34\x63\x61\x62\xf9\x38\xe6\xa8\x73\x10\xda\x28\x64\x29\xa5\x2d\xec\x30\x7c\xe3\xb2\xbd\x5c\xee\x52\xd8\x63\x5c\x4c\xe5\x50\xa8\x44\x0b\x23\x12\xb5\x82\xab\x27\xc9\x54\x9d\x93\xa8\xd8\xcf\xc9\xd8\xcf\x91\xef\x33\x76\x14\x97\x05\xaa\x6b\xa8\xa4\xb4\x31\x24\x8a\x81\xd0\xb9\x4c\x00\x9e\x3d\x63\x6f\x79\xca\x0e\xa4\x59\xeb\xe8\x94\xf2\xdd\x52\x39\x5c\x7b\x61\x5d\xdf\x4f\x9c\xdb\xc9\x1a\xf3\xaf\x11\x8f\x94\xf7\xc6\x7e\xa1\x7e\xaa\x36\xc0\x08\x24\x67\x5e\xbd\xcc\xb3\xe2\xfb\xd8\x0b\x96\xcf\x9f\x3d\x2b\x24\xb1\x92\x8c\x3e\x75\xfd\xf4\xc3\xb3\x33\x7b\xfe\x7c\x00\xd9\xc8\x26\x45\x38\xf1\x85\x3c\xa5\x89\x55\xf9\x28\x9e\xe3\x1f\x5c\x7e\xb4\x50\xa1\xe4\x0f\xae\xef\x04\xef\x63\x4b\xa6\x42\x40\x7a\xc4\x20\x06\xfe\x8a\x15\x72\x33\x62\xde\x20\xde\x37\x8a\xa0\x37\x48\x52\xa5\x90\xef\x73\xfe\x42\x12\x06\x9f\x3f\x65\x8b\x50\xd1\x76\x19\xbc\x17\xd1\xf5\x4a\x78\xde\x30\x1e\x0d\x25\x6c\xaf\xc7\x73\xdf\xdf\x24\xc9\xff\x7f\x24\x89\x06\xca\x00\xe8\xf4\x44\x4f\x51\x62\x08\xd1\x6c\x97\x8f\x2f\xb7\x06\xa8\x55\x98\xf7\x8a\x5e\x16\x40\x5b\xb9\xc3\xd5\xfe\x47\xd0\x4e\x66\xdf\x5d\x50\x89\xe1\xef\xac\xef\xa6\x87\xc7\xd3\x2b\x59\x01\xf8\x10\xf4\x41\x54\x48\x82\x34\x09\xd3\xc4\xc2\xab\x41\x0f\xf5\x68\x3c\x0c\xda\x4a\x84\xcc\x2d\x51\xa8\xaa\xbc\xb0\x26\x51\x37\xcd\x79\xbf\xed\x2e\xba\x1c\x66\x58\xb5\x6f\x2e\x00\xbb\x2f\x2d\x3d\xfa\x1b\x72\xa7\x7c\xad\xd0\xa2\xa9\x7c\x21\x19\x89\x1c\xf9\xcc\xa2\x45\x48\x7d\x1f\x73\x0a\xc2\x95\xed\xc3\x46\x94\x99\x44\xf4\x28\x69\xeb\x6b\x4a\x51\xf9\x56\xd1\x9f\x9a\xe6\x7e\xa6\x94\xf0\xeb\x48\xdd\xfb\x8a\x16\x61\xdb\x60\x54\xda\xf8\x31\x88\x6c\x7f\x61\xd1\xa1\x53\x07\x92\x39\xb5\x8d\xaa\x88\x0e\xa1\xbd\x80\x0c\xa4\xb1\xe5\x3d\xc2\x80\xd8\xde\xd0\x86\x52\x5d\xff\x02\x61\x42\x71\x1f\x48\x43\xa9\xed\x61\x75\x5d\x6c\x7b\x19\xb6\x00\xcb\xcd\x5d\xba\xc3\xed\x4d\xca\xe6\x4f\x03\x68\x31\x66\x58\x8d\x59\x4c\x6f\x56\xeb\xec\x6a\x63\xcd\x66\xc9\x1e\xa6\x41\x53\x63\xbf\x41\x94\xc8\xa3\xa0\x60\xd9\x9b\xf4\xf2\xd3\xd4\x82\x61\x4a\x61\xd9\x0a\xa5\xc3\xad\x5a\x0b\xd4\x50\xb6\xb1\xb7\xcb\x44\xd6\x07\x9b\x2c\x3c\x7b\x69\xbd\x9c\x1e\xce\x6e\xae\xa6\xfd\x9c\x5b\x35\x20\x68\x53\xc7\xf7\xc7\x01\xc4\xf5\x07\x60\x40\xdb\x5d\x7f\x0f\x60\xd9\xd8\x5c\xb1\x16\x58\x17\x29\xd6\x40\x98\xb5\x37\xc7\x69\xce\xf6\x5d\xf0\xbb\x08\xb3\xdb\xf7\xb2\xa1\xb5\x3e\x56\x17\x53\x66\xe5\x77\x2a\x55\x5e\x28\x37\xc3\x77\x6f\xdf\x0c\x86\xec\x6e\x3e\x23\x32\xc9\xa7\x74\xaf\xa7\x44\xcc\x41\x64\x91\xdf\xe1\x04\x41\x3f\x9b\x5d\x3c\x93\x65\x07\xc8\xda\x9e\x79\xeb\x53\xc8\xfb\x2a\x4b\x8c\xca\x39\x1d\xb2\x6c\x1b\xc5\x14\xbf\x32\xf1\x06\xe6\xdc\xc8\x13\x4d\x63\x52\x87\xbd\x49\xb4\x87\xa9\x1c\xd4\xcd\xbd\xce\xf5\xbf\x42\x9f\xca\x9f\xbf\x74\x93\x55\x7a\x4b\x7e\xfe\xf3\xc5\x44\x7c\x08\x05\xa6\x34\xf4\xa1\xe9\x33\x19\x28\xb0\x08\x82\x5b\x3b\x6a\x00\xf3\xaf\xcf\x8e\x25\xa5\x71\xaf\xf6\xb2\x8d\x98\xaf\x02\xb8\xcd\x5a\x67\xf7\x13\x8a\x3d\xe8\x61\x3d\xab\x00\x62\x07\xa2\x67\xe8\x40\xf4\xcc\xb4\x8a\x84\x02\x8d\xc1\xb4\xc5\xb0\x88\xee\x25\x5c\xed\x31\x00\x37\x05\xfd\xff\x30\xb1\x31\x8b\xdc\x5b\x34\xe9\xc1\x1f\x69\x76\x08\xa9\xc2\x59\xfc\x1e\xf2\x63\xf1\x45\x2b\xe6\x03\xf0\xc7\x5e\xa1\x06\x4d\x68\xf2\xd3\x8a\x31\x15\x1f\x4d\x2a\xd8\xa6\x75\xe8\xb4\x37\x2d\x10\x02\x57\xae\x3e\xf4\x96\x9a\x99\xe0\xd1\x10\xc9\xaa\xb5\xf9\x3c\xae\xed\x50\x5e\x26\x33\x81\x64\xe4\xfc\x57\x82\xb3\x7d\x31\x1d\x40\x20\x67\xd4\xc9\x94\x60\xf5\xba\x1c\x5b\x77\xdf\x28\xd7\x48\xfc\x98\x5d\x7d\xf0\x33\x7a\xb1\xdd\x7d\x9b\xff\xfc\x2d\x7d\xd5\x6b\xc5\xed\x0c\x9f\xf6\x52\x08\xf2\xeb\x5d\x27\xd5\xb5\x6d\xf5\x31\xf6\x74\xe8\x1d\xee\xc9\x0b\x10\x48\xf7\x8c\xfb\xe2\xab\x6b\xad\x8d\x95\x6c\xca\xcd\x39\x57\x9b\x9a\xe9\xe3\xe1\xba\x4e\xdd\x88\xaa\xed\xf4\x31\xa5\xd1\x32\x5f\xab\xc1\x62\x21\xa8\xdc\x84\x5a\x88\x24\x84\xe5\x42\xed\xde\xc3\x66\xc0\xb4\x69\x2e\x18\xd5\x3a\x49\xaa\x6d\x6b\x86\xb1\x7b\x3a\xaa\xcd\xb4\xf1\x70\xc5\x31\xfd\xf0\xc6\x9a\x7e\x85\x08\xc7\x1e\x42\x6b\xf7\x88\x0d\x78\x41\x39\x8f\xb3\x53\xe5\x7c\xfa\x87\xb7\xbd\xcf\x35\xd9\x19\x2f\xa6\x78\x9c\x9c\x5f\xdc\xbc\x9e\x1e\xde\xbc\x95\x7f\x0f\xa6\xaa\xee\x31\x20\xa7\xb2\xfc\x55\x4f\x5a\x0b\x20\x91\xca\xfc\x8d\xa1\x48\x7b\xf6\xed\xf0\x11\x28\x8b\x3d\x12\xdc\x47\x84\x56\xbb\x21\x55\xa7\xa7\xd3\xb7\xc3\x04\xaa\x84\xda\x68\x3c\x45\xea\xaa\x5f\xf6\x25\x55\x01\xcd\x7c\x93\xf2\x50\x88\x9c\xfc\x9a\x1f\x47\x1b\x4e\x93\xe3\x75\x61\x4c\xfc\x95\xe6\x88\x1a\x1d\xba\x79\xa1\x34\xc1\x36\x1e\x4d\xc1\x20\x46\xb4\xf7\x8a\x42\x2d\x75\x96\xc1\x1c\xcc\xf5\xb7\x83\x03\x4f\x51\xce\x48\x99\x13\xd7\x4b\xa5\xfc\xf7\xad\x4b\x67\x0f\xca\xfb\x43\x1f\xf2\xf2\x1b\x09\x0c\x0c\x15\xfd\x95\xf5\x42\x87\x81\x58\xa3\x44\x13\x2b\x77\x18\x8c\x95\x82\xfa\xb2\x1c\x48\x99\x68\x3f\x39\x3f\x9e\xfe\xb1\x2f\x21\x5b\x30\xaa\xdd\xb5\x69\x93\xd1\xdd\xc2\xbf\x73\xa3\xc0\x47\x23\xc0\xe4\xce\x8e\x5c\xb2\xd2\xd1\xb3\x53\x37\x69\x1a\x20\x74\xc9\x8b\x29\x90\xb3\xf0\x82\x9e\x9b\x79\x5a\xca\x4f\xf7\xb0\xe0\x66\x80\x1b\x60\x6e\x17\x97\x6e\xb0\xea\xf6\x1b\xc6\xa0\x38\xea\x9e\xbd\xb5\x25\x49\xd3\xc1\xd3\x83\xa0\xae\x8e\xa6\xb4\x14\x1e\xe5\xba\x35\xce\xd6\x3e\xc6\x14\x74\xbd\x3a\x35\xbe\x7d\x19\x3e\x7a\xe9\xe0\xad\x7f\xe8\x1a\xfd\x85\xab\x00\x70\xdb\x2b\xb8\xcf\xf8\x63\xa2\x43\x67\xe8\xf5\x78\x3a\xc7\x5b\x45\x64\x30\xd4\x64\x52\x7c\x38\xb0\xa6\xe7\xaf\xdf\xbe\x3e\xbc\x2a\xff\xf1\xfa\xf0\xf4\xa6\xcf\xb6\xc8\x60\xa1\x1a\x6b\x41\xaf\xe9\x4d\xbd\x0e\xd2\x53\x6a\x24\xa8\x72\x4e\x28\x7f\x7a\xf6\x40\x85\x0a\xe8\xd5\xc5\xe9\xb4\x97\x3d\xa6\x04\xa2\xfa\x52\x45\x90\x36\xff\x56\x05\x65\xc4\x43\xbe\x6a\x22\x44\xba\x6e\xf6\x26\xae\xb5\x9f\x11\x25\xdd\xc7\x51\x7f\xdf\xbf\x5e\x43\xd8\x0d\x42\xa3\xb1\x6f\x3f\x94\xd2\x4f\xda\xef\xae\x46\xb0\x06\x50\xbc\xbd\xc2\x59\x67\xd6\x5a\xe7\xa2\x00\xab\x6e\xa9\x4b\x3d\x7c\xac\x15\xaf\x12\x9b\x3c\xda\x3a\xdb\x0d\x42\xfd\xb1\xa3\xdb\xc2\x44\xa6\x8b\x32\x48\xa9\xd0\xbb\xbf\x3e\x65\xf9\x5d\xad\x9b\x8a\xc2\xd5\x6c\x28\xca\xe2\x26\x79\x4b\x3b\xa3\xdf\xe5\xa2\x5f\xe7\x21\x34\xf5\xd0\xa1\x6a\x1b\x1b\xe2\xcc\xac\xcc\x3a\x93\x50\xe8\x35\xce\x74\xf4\x1c\xf4\xa0\xe1\x26\x68\xaa\x02\x3d\xa5\xaf\x99\xab\xb9\x83\x19\xee\x1e\x63\x4c\x06\xe6\x39\xea\x16\x37\x7d\x68\xe8\x0d\xc2\x84\x3e\x9d\x9b\xfc\x08\xf7\xf8\x38\x09\x34\x72\xcc\xa9\xd6\xe6\xf8\xb8\xce\x5f\xdd\xeb\x6f\x27\xf2\xba\xae\x6d\x41\x90\xfd\x58\x9e\xfa\x23\x26\x97\x33\x03\x66\x4a\xf3\x58\xf9\xe5\x4c\xc1\x99\xd3\xdd\x91\x02\xae\x3f\xc5\x19\xa0\x3a\xa3\xb0\xf9\x2a\x55\xf0\x47\x49\x19\x67\x06\xcc\x80\xb9\x15\xc7\x12\x76\x26\xe9\xa7\x1c\xf7\xeb\x6c\x40\xd3\x58\xde\x04\x15\x48\x45\x20\xa8\x17\xc3\xa4\x0f\x75\x2b\x48\xfd\xd6\x7b\x73\x0f\x0a\x2b\x77\xe5\xa1\xa4\x0c\xbc\x26\x57\x80\x48\x2e\x9d\xd6\x5e\x96\x07\x4d\x71\xed\xc5\x4a\xe3\xca\xac\x01\x61\x10\x75\x83\x2f\x64\x72\x86\x25\x34\xaa\xc2\xd6\xc4\xd5\x11\xef\x65\x80\x75\xe0\xed\x44\x03\x82\x3e\x75\xa1\xd3\x94\xff\x8e\xfd\xbd\x94\x27\xa3\x4a\x83\xf7\x63\x6d\x1e\x3c\x99\xe1\xf0\x1d\x7c\x95\xfa\xf8\xa1\x87\x44\xd8\x3d\x66\x53\x6e\xe8\xa7\xa3\x23\x39\x36\xfd\x83\x7a\x9d\x1f\x94\xc4\xc0\xfa\x17\x8b\x87\x67\x9c\x7f\xa1\x61\x18\x2a\x4d\xdd\x8f\x52\xec\x66\xcf\xd8\xcd\xe9\xea\x7a\x67\xab\xd3\x20\x5a\x5b\x9a\xf2\x68\x76\x93\x24\x6e\x1c\xe0\xa6\x0b\xad\x35\xe6\x1a\xd7\x13\x3a\x9d\xfd\x38\x42\x72\xb8\x51\xf0\x8d\x30\x85\xe3\xa4\x84\x33\x05\x37\x70\x9a\x46\x4d\x09\xd7\x0b\xf4\xe5\xf5\xf4\xe6\xf8\xa2\x5f\x26\x38\xad\x89\x68\x09\x5e\xe1\x24\x2d\x87\x7f\x9c\xa8\xc5\x31\xa9\x4f\x21\xd3\x43\xe0\x3d\x92\x9c\xfb\x0c\xa3\xc1\xc8\xff\x5b\x3b\x76\xe7\x8a\xe4\xca\x68\xb6\x7f\x1f\xbe\x7b\x46\x4d\xd7\xd0\x9c\x42\xa0\x15\xdb\x18\x29\x3d\x74\x70\xf5\x09\xf6\xef\xbb\x4c\xea\xb1\xd4\x39\x23\xd5\xb2\x90\x51\x4f\xee\xe0\x2e\x68\x2f\x45\x81\x89\x1f\x04\x52\xa2\xc1\xc4\x72\xd6\x84\xf8\x11\x38\x19\x64\x4c\x9c\x38\x42\x0d\x01\xf9\xd9\xc1\x50\x8d\x95\x3a\xbb\x42\x85\x79\x7a\x75\x75\x71\x85\xbc\x3b\x9c\x61\x41\x3e\x58\x73\x94\xb1\x00\x6b\x81\x5c\xda\xc9\xea\xd3\x27\x60\x13\x7c\x9e\x46\x51\x4b\xc5\xa3\x22\x34\x54\xc8\x19\xdc\xc5\xb9\x25\xf3\xb3\x12\xd8\x76\x88\xfd\x25\xbd\xed\x53\x61\x13\xe2\x19\x26\x4f\xb3\x72\xf7\xf0\x60\x61\xa1\x54\xca\x5c\x0b\x48\x2a\x35\x52\x7d\xb2\x0e\x83\x38\x76\x31\x95\x89\x23\x72\x78\xbe\x2c\x75\x96\x83\xcd\xb3\xfe\x61\x99\xaa\x7b\xdb\x4f\x8c\x4c\xa2\x40\xf8\x70\xa2\x2f\x45\x9a\x7c\x61\xb4\x5a\x4f\x8f\xb9\x7e\xd8\x73\x4b\x89\x53\xe1\x7c\x35\xe6\x08\xac\xa7\x97\x79\x75\xb0\xe7\x98\xc5\x05\x0b\x60\x04\x91\x1b\x6f\x1e\xbe\x32\x1b\x1e\x2e\x21\x99\x22\x23\xae\x54\xa3\xdb\xcf\xbe\x21\xdf\x00\x0c\xac\xba\xe5\x22\x45\x31\x57\xb0\x59\xb8\x11\xd7\xb1\x61\x00\xcd\xde\xec\xe5\x15\x16\xa7\x61\x88\x11\x52\x51\x6d\x0d\xbb\x7d\x6b\xee\x6d\x1e\x8a\xc3\xc7\xaa\x70\x0b\xf7\x03\x41\xa3\x52\x36\x18\xfc\x67\x39\x7b\xf6\x2d\x08\x17\x59\xd5\x46\xc2\xdc\x3c\x98\xbd\x44\x30\x1f\xa8\x10\xe1\xda\x8e\xde\x89\x04\x26\x74\x5e\xe0\x3f\x56\xe7\xc1\x34\xfb\xb6\xb4\x05\x0b\xa7\xa3\xbc\xe4\x39\xac\x09\x9a\x5f\x3b\xe6\x42\x83\x3c\xbb\x19\x40\x27\x2d\x23\xc2\xe5\x33\x47\x06\x45\x83\x2a\x4f\x16\x07\x42\x45\x86\x5d\x7f\x11\x44\x6b\x4e\x5b\x89\x45\xed\xb6\x2a\x61\x8d\x31\x32\x8f\xd6\x6d\x86\x88\x46\x47\xd8\xa9\x9a\xdb\x16\xca\x91\x07\x3b\x82\x00\xf4\xe7\x76\x68\x77\xc9\xbf\xf1\x44\x0a\x52\xcd\xa9\x45\xef\xad\xdb\x20\x59\x59\x78\xfb\xa7\xfd\xc5\x86\x00\x2b\xa0\x24\xa5\x71\x73\xb9\xaa\xd7\x58\x7f\x16\x54\x99\x10\x2b\xe2\x7e\xa4\xb9\x88\xc3\xcd\x03\x26\x2b\xa5\xf9\xb0\xee\xb0\x1e\x75\xea\x7a\x1e\x1e\x97\xb0\x7f\x3c\x2a\xb0\x55\xfa\x16\xc7\xb6\x8d\x68\xd0\x38\xf0\x38\x23\x33\x87\x93\x57\x89\x3c\x66\x73\x07\x7c\x63\x3a\x1c\x2e\xd7\xb9\x08\xdc\xb8\x8c\x80\x8b\x45\xd6\xc2\x37\x1e\x45\x66\xd3\xb9\x75\x13\x16\x79\x38\x21\xcf\x78\x5e\xcc\xe7\x23\x66\x78\x4e\xb1\xca\x18\x90\x5f\x9a\x8f\x67\xd5\x19\x32\x1a\xcf\xca\xf6\x97\x94\x4b\xf6\xce\x15\xef\x29\xf4\x35\x5b\xbf\xf3\x20\xf5\x93\x7d\x3c\x9b\xde\xc9\x17\x7b\xcf\x5d\xbb\xf0\x0d\x0e\x73\x2d\xd6\x18\x09\x4b\xdf\x90\xa4\xe8\xa8\x43\x7a\xc6\x14\x45\x58\x14\xcc\x5e\x60\x15\x11\x5e\x78\x7e\xb0\xbe\x05\x79\xec\xec\xe5\xa7\x08\xd5\x5a\x05\xb0\x82\x0b\xec\xc9\x6a\x7a\x40\xc6\x2f\x29\xfc\x8a\x8b\xb3\xd4\xc0\xb6\x40\x8c\xaf\x03\x37\x12\x2c\x3f\x86\x57\x34\x95\x4c\x29\x0a\x03\x1e\xe2\xd6\x91\xd7\xac\xd9\x11\x08\xaa\x33\x8e\x72\x2e\xf5\x4a\x67\x56\x46\x67\x8d\xac\x30\xa7\x97\x12\x22\x28\x25\xba\x93\xb2\x35\x1d\xe4\xd4\x5e\x32\xba\x50\xe5\xda\x94\x08\x8c\xb9\x52\x14\xb4\x15\x20\x64\x22\xa8\x5a\x1d\x56\x8f\x2b\x92\x62\x56\x78\xf0\x08\xeb\xfb\x20\x76\xaa\xc4\x8a\x8f\x2f\x6d\xe8\x5f\x6f\x1e\x22\x37\x2b\xc1\xce\x8b\x68\xbb\x53\x7f\xe4\x5e\x90\x3a\xd6\x4b\xd8\x2e\x0e\x6c\x89\xc3\xcb\x13\xdc\xa8\x74\xc2\x50\x45\x45\xf7\x35\x16\xca\xb4\x22\xf1\x4b\x0a\x8b\x34\xb6\x8e\x4e\x4b\x0d\x8e\x3c\xf7\xcc\xf5\x41\x1c\x59\xd6\xf7\xb8\x39\xb0\x8e\x1e\x57\xd8\xf4\xee\x2d\x68\x52\x6e\x4a\xb0\x0e\xac\x59\x00\x17\xa1\x65\x64\x03\xed\xf7\xb8\x98\x00\xe6\x3e\x2c\x54\xaa\xf7\x8e\xc7\x11\x68\x7b\x75\xe1\xe6\x48\xe8\x82\xe9\x84\x3f\xdc\xff\xac\x62\xde\x5b\x3c\x1a\x1e\x7f\x6c\x3b\x1c\x5c\xef\x6b\x9e\x4c\x0c\xf0\x9d\xf0\x9a\x45\xda\x21\x26\x03\x87\xff\x97\x8d\x8d\x76\xae\xc4\x83\x9a\x4e\xb3\x06\x15\xac\xe5\x1a\x6d\xc5\xd4\x6b\x40\x3f\x21\xa7\xf9\xf3\xa7\x4f\x3f\x61\x3a\xf2\x62\xb6\x03\x81\x3b\x48\xbe\xaf\x82\x62\x07\x07\xa8\x6d\xf9\x9c\x61\xfc\xe8\xa5\xca\x96\xf0\xcc\xf6\x5c\x3b\x86\x69\xba\xe2\x48\x37\x04\x50\x01\xab\xf2\x2a\x74\x80\xc7\x7a\xae\x0e\x96\x9b\xca\x53\x63\x26\xb1\x6a\xc0\x7b\x93\x94\x9c\x58\xb4\x14\xe2\xb4\x15\xb6\x2d\x2a\x1c\xd4\x1b\xbd\x0c\xbd\xf0\xf1\x44\x8b\x62\x75\xd6\x28\x14\x58\xe4\x09\x65\x71\x06\x26\x1b\x31\x8f\x11\x6b\x5a\x7e\x44\xee\xb7\xe2\x99\x67\x78\x4a\xb5\xbf\x63\xa5\x66\x4a\x6c\xf5\xe2\xc5\x68\xea\x70\x72\x4a\x53\x62\x65\xc9\x1e\xac\x3d\x34\x1a\xd0\x47\xd6\xa1\xf7\xe4\x06\x04\x06\x78\x0e\xa0\xbb\xcf\xdf\xd1\x49\x64\x37\xf4\x22\xf6\xc3\x0c\x66\x63\x80\x3f\x30\xe7\x05\x37\x2f\xce\x9f\xeb\xdf\x05\xef\xda\xd6\x02\x10\xf0\x1d\xdc\x6f\xef\x30\x25\x29\x6c\x6a\x2b\x5e\x11\x29\x7c\x25\x5c\xa4\x98\x5f\x1f\x76\x2e\x88\x83\x44\xe2\xb4\xdc\x35\x9c\xfb\x54\xdc\xb4\x44\x2b\xfe\x44\xb5\x55\xf1\x8f\x6d\x8a\x99\xb6\xe6\xf5\xd2\xc2\xc5\xbf\xf1\xaf\x8e\x7f\xba\xcb\x14\xd5\x63\x92\xc2\xcd\x47\x8a\xda\x47\xae\x9f\xc0\xa9\x7b\x87\x3b\xdf\x4c\x76\x86\xe8\x64\x81\x48\x81\x1b\xac\xbc\xc6\x2b\xfb\x1b\x8b\x1c\x6d\x71\xe0\x35\x99\x5c\x5c\xaf\x45\x69\x1b\x0e\x51\x93\x7a\x2a\x1e\x81\x08\x50\x6d\xc9\x25\xa3\x0c\xf1\xdb\xe7\xe5\xb2\xb6\xef\xe1\xb2\xfd\x0e\xf3\xf1\xbe\x5f\x61\x31\x88\x56\xcd\x6a\x2c\xb8\x1a\x23\x81\xab\xef\x9c\xd2\x0e\x3b\xe9\x3a\x44\xd4\x91\x98\x53\x21\x62\x4c\xf1\x41\x8a\xf3\xb8\xa5\xbc\xdb\x3c\x20\x98\x98\xcd\x03\x13\x43\x97\x56\x22\x23\x82\xdb\x15\xe5\x80\x62\xf1\x9c\xdf\x0f\x76\x55\xd2\xdb\xcc\x95\x22\xe7\x65\x62\xbb\xb4\x5f\x3f\x2f\x13\xe3\xd4\xbd\x73\x73\x2e\xaa\x72\xfb\x5f\x2c\xfb\xc2\x7b\x5a\xfa\x40\x26\xa0\xa3\xb4\x4d\x92\x6d\xd7\xf4\x15\x50\xca\x95\xd2\xa5\x8b\xa6\xfc\x71\x46\x7f\xf1\x8f\x3b\xaa\x32\xff\x25\x91\xa6\xc1\x4f\x3c\x63\x50\xa2\xa3\x21\x17\x89\x8b\x1b\x2a\xe4\xbf\xf1\xa7\x51\x14\x44\xcf\xad\xce\x37\x8f\xb2\x6d\xd7\x43\x93\x80\xdd\x5c\x79\x9f\xe0\xc2\x85\xb4\x0e\xb0\xc1\x30\xe6\x30\x0b\x65\xf9\xfd\xdc\x52\xaf\x2a\x41\x7f\xaa\x01\x8c\xb4\x9b\x21\x10\xb4\x3c\x90\x05\x13\xc1\x36\xc1\x33\x20\xd6\xc1\xbc\xec\xf4\x02\x89\xa7\x8e\xbc\x37\x59\x58\xb0\x06\x17\x92\x03\x68\xe7\x98\x8d\xec\x3f\xf5\x24\xda\xd9\x3c\x48\x78\x44\x39\x08\xc4\x50\x44\x09\xd9\x4d\x1c\x2c\x4c\x6b\xdf\x81\xc4\x21\x15\x19\xf6\xe4\x7f\x1a\x44\xf9\x02\x57\x8b\x0d\x60\xe9\x79\xc3\x62\x37\xae\x9e\x64\x92\x4a\xc0\x96\x5e\xee\x47\xc5\x90\xd4\x23\xc6\x08\x64\xc1\xbe\xc2\x3d\xe1\x90\xf2\x93\x89\xae\x3d\xdc\x5d\xaa\x92\xab\x26\xa9\x65\x81\x88\x17\x86\xcd\x83\xa8\x82\x57\xb7\x11\x85\xc3\x4c\x69\x28\x0d\x85\x0c\x53\x68\x90\xa7\x01\x15\xf6\xce\x25\xfc\xc0\x78\xf5\x99\x4e\x40\xa9\xc4\x3f\x5b\xe7\x3a\xc0\x9a\xd2\xde\xb4\xe1\x51\xc8\x28\x61\x53\x64\xa0\xee\x94\x88\x66\x0c\x7c\x88\x49\xd9\xb3\xf9\x73\x03\x1a\xe3\x81\x95\xc4\x71\x26\xb5\x61\xd6\x3f\x66\x07\x26\x88\x6f\xfd\x11\xed\x89\x2d\xd0\xbc\xa6\xf6\x18\x7c\xdc\x04\xde\x60\x24\xb0\xe3\x62\x91\x59\x67\xfc\x74\x7d\x2b\x58\x04\x9f\xf8\xa0\x5d\xea\xd3\x6e\x67\xb0\x90\xe4\x7a\x48\x06\x64\xc2\x14\xbb\x70\xf5\xfd\x28\x8a\xcf\x49\x7d\x5f\x15\xd1\x06\x08\x9d\x63\xe2\x6d\x6d\xff\x41\x14\xb1\x9f\x42\xcb\x9b\x4c\x0b\x39\xa0\x6e\xad\xe1\x53\x8c\xab\xf3\x67\x58\xad\xc3\xce\x6e\xa9\x50\xc0\x2a\x39\xa0\xb3\xe9\x30\x74\x75\x8e\x68\xf9\xf2\xd6\xd2\x5d\x8f\x26\x7f\x2f\x51\x05\x46\x12\x01\x2a\x3a\xd5\xb7\x43\x05\x37\x0d\xd1\x5a\xd7\x97\x2a\x38\xbf\x78\x9f\xcb\x8a\xe4\x04\x2c\x88\xec\xec\x1d\x00\x7e\x02\x15\xd6\x03\xbd\x7f\x85\x0c\x40\x63\xf3\x10\x92\x83\x10\xd4\xd5\xfc\x35\xa6\xf5\x22\x59\x24\x75\x0f\xb6\x40\xe4\x96\x28\x2d\x3e\xeb\x0c\x21\xe9\x7d\x84\x6f\x20\x1f\xdd\x50\x83\x1a\x60\x47\x84\x2c\x52\xb4\x40\x6f\x13\x12\x54\x81\x98\x9a\x71\x54\x15\x5f\x9e\xa8\xd4\x1f\x36\x66\x85\x50\xba\x84\x63\x1d\x45\xd6\x86\x71\xe5\x00\x36\x44\x11\xb7\x5c\xed\x33\x2a\x94\x52\x41\xb2\x13\xed\x7e\x08\x24\x7b\x90\x51\x6f\x20\x28\xaa\x40\x75\xc1\x4d\x09\xda\xa7\xd1\x59\x5d\xa1\x38\x59\xd9\x89\x2a\xe3\x08\x94\x3a\xd6\xed\xbd\x85\x16\x21\x40\x1f\x5b\x4f\xc9\x0b\x8a\x8a\x18\x36\x3b\x80\x6c\x8f\xe1\x97\xd4\xe5\xc7\x75\x76\x6a\x60\xe2\x37\x0f\xa4\x30\x25\x5c\x84\x02\x65\x49\x01\x05\xda\x82\xe0\xba\x85\x9b\xc1\xc8\x01\x44\x0d\xca\x17\xef\xe9\xbd\xa9\x07\xb1\x3e\x9e\x01\x9e\x35\xf0\x75\x49\x21\x06\x2c\x0e\x26\xe3\xa5\xf8\x1a\x9c\x7b\x32\x65\xb4\xbd\x3c\x66\x94\x08\xd9\xcb\x06\x99\x60\x27\xf9\x83\xe1\x5c\x24\xc9\xe0\x27\xc3\xbc\x62\x12\xfb\x57\x5b\x1d\x41\x9a\x19\x7b\xa8\x9d\x3a\x02\xa8\xef\xe6\x61\x18\x01\xac\xf6\xa0\xaf\xb0\xd5\x91\x81\x33\x23\xe2\x67\x91\xe0\xd9\xbc\x87\x9d\xb0\x32\x54\xf1\x6d\x6c\xc0\xbb\x64\x95\x26\xf6\xfd\xed\x41\x4f\x53\x07\x73\xd4\xdd\x2f\xb6\xf9\x32\x19\xe9\x55\x36\x23\xa1\xd5\x3f\x26\x1f\xb4\xb9\x63\x8b\xc2\x84\xe5\x96\x78\x8d\x53\x9d\x59\xd6\x17\x35\x05\xa4\xda\x25\x52\x3e\x2a\xd3\xcd\x0e\x25\x24\x39\x0e\x64\xf7\xa2\x82\x33\x01\xcb\xcc\x95\x1d\x83\xcc\x84\xc3\x37\x4c\xe3\x15\xba\x1b\xa5\xf3\xb9\x88\x63\xb2\x79\xb7\xd8\x5b\x46\x05\x6e\x30\x26\x10\xba\x7d\x98\x5d\x6a\xa6\x8b\x06\x73\x0e\xe9\x3a\x26\xf4\xef\xa9\x47\x0d\xda\x24\xb6\xb8\x8d\x56\x2e\x65\xb8\x88\x41\xcc\x92\x2f\x60\xb0\xa0\x56\xed\x24\x0e\x00\x67\x40\xf7\xb8\xa6\xd5\xd6\x79\xcf\x7d\x0e\x1e\xc3\x8c\x3a\x84\x2b\xb9\xb2\x0b\x50\x5f\xa8\x3f\xce\x75\x46\x99\xf6\x07\xa2\x4f\x9f\x54\xac\xd0\xa7\x8b\x3e\x49\x76\xe0\xb2\xde\xe2\x9d\xe1\x2c\xa5\x99\xaa\x55\xc5\x22\x2d\xe1\x5b\x88\x76\x35\x19\x63\x8d\xa8\x76\x65\xed\x8a\x68\x8e\x54\x01\x88\xff\x8c\x1f\x86\x4e\x45\x2d\xb4\x5d\x91\xce\x87\x20\x40\xfc\x2e\x88\x13\xbf\x65\x65\x8d\x2e\x16\xec\x5a\xdc\x4d\xeb\xed\xd9\x63\x49\x83\x1a\xa2\x06\x8e\x69\x20\x41\x65\x4d\x1b\x41\xab\x6f\xde\xd2\x37\xd9\x24\xa4\x19\x0b\xfa\xad\xb3\x3a\x8d\xbc\x16\x7c\x85\xd5\x75\x78\x4c\x86\x55\xd5\xdf\xe5\x30\x8e\xf8\xe0\xc3\x09\xed\x62\xbd\x39\x28\x73\x7a\x65\x5c\x1f\x40\x1f\xb6\x03\xf6\xb6\xd4\xff\x02\xcc\x5d\x2d\xee\xaa\x12\xb4\x6d\x34\xd6\xd6\x08\x34\xa6\xab\x76\xec\x5b\x14\xe4\xc6\x5e\x23\xb5\x60\x17\x73\x8e\x5a\x64\x4e\xe7\x3f\x89\xfb\xc2\x11\xdc\xc2\xd2\x13\xf9\x95\x29\xbf\x3e\x0b\x15\x06\x5c\xa2\x12\x73\x4d\x6a\xca\x60\x8d\x24\xb4\xa3\xc4\x5e\xb2\x68\x2a\x41\xde\xd9\x26\xa1\x55\x56\x7b\x0a\x8f\xa0\x73\xb5\xa9\x0c\xfa\xe0\x7b\x7b\x2d\x95\x07\x57\xd9\x42\x75\x9b\xde\x78\xb5\x8e\x85\x40\x7f\xe2\xd8\x31\x5c\xc6\x4a\x36\x0b\x98\x47\x17\x71\x0b\xd0\x69\x7c\x97\xac\x95\x25\xef\xf3\x2f\x5a\xf6\x11\x33\x33\xc7\x0c\xad\xb1\x8b\xed\x61\x36\x42\xd1\x21\x4c\x16\x73\x6f\x71\xe2\xae\x6b\x63\x82\xc1\x7a\x2f\x22\x61\x45\xe2\x67\xe9\xa4\x24\x9d\xb2\xd1\x21\xd2\x5e\xda\x6d\x7e\x97\x27\xa5\x78\xaf\x6d\x43\x63\x00\xb3\xb5\x79\x40\x4d\x0b\xa1\x27\x18\x98\xb7\x6f\xc5\x7b\xae\x67\xdd\x61\xac\x4c\xe8\xd9\x9b\xff\x95\xc0\x6c\xc7\xf6\xbd\xf8\x88\xef\x62\x64\x56\xb6\x53\x23\x96\x49\x13\xc2\xd1\xcb\x7a\x87\x76\xfc\xab\x45\x59\x7c\xad\x9e\x32\x71\x3e\x11\x00\xc0\x69\xec\x6b\x42\x54\xc5\x89\x5e\x83\xa2\x94\xfa\x32\x3d\x63\x10\x73\xd9\x15\x4d\x72\x56\x0c\xdd\xb0\xe7\x49\x2a\xbc\x01\xe8\x54\xe8\x88\xe5\xb8\xfc\x74\x09\x0b\x66\xbe\xd2\x41\x6e\x91\x23\x37\x40\x8b\xc3\x00\x3d\x24\xcc\xf2\x6a\xa6\x71\x12\xac\x8b\xc1\x5d\xf7\xec\x61\xf1\x54\x1c\x2c\x0f\x30\x5c\x3f\xfb\xe9\x2b\x0c\x9d\x7a\x75\x32\xa3\xe2\x83\xfc\xf3\x5e\x4d\x6c\xc2\x4a\x80\x26\x9b\xca\x7f\xf2\xde\x98\xfe\xe1\xfe\x00\xda\xed\x65\x70\x5e\x5c\x1d\x9e\x1f\x7d\x37\x10\xdc\x7f\x76\xc4\x9d\xf0\x82\x70\x8f\x4e\xce\xbd\xec\xaf\x5b\xe0\xdf\x7c\xf5\xd5\x81\x05\x02\x87\x86\x97\x4c\xdc\xc2\xbb\x5c\x6c\xe1\x03\x14\x8e\x56\x1a\xd7\xa4\xdf\x6b\x12\x58\x7b\x7e\xea\x79\x7b\x16\x43\x23\xaf\x9e\xe6\xb4\xb9\x99\x95\xc7\x0a\x61\x09\x06\xbe\x6f\xe7\xaf\x52\xe8\x50\xf2\x14\x3f\x08\x4e\x26\x40\x11\xfb\x45\x6e\xa6\x34\x74\x18\x43\xb9\x99\x01\x13\xea\xdf\xb7\xda\xb5\x01\x9e\xf8\x95\xb0\xd1\x93\x9a\xfd\xb2\xe7\x5e\x4a\xae\xca\xe4\x84\x85\x71\x2e\x22\x4e\xf6\x2d\x2a\xe5\x29\x5f\xf3\x38\x18\x10\xc0\x5b\x6b\xe0\x8b\x8b\xe4\x26\xee\xba\x25\x13\xea\x77\x12\x7e\x89\x3d\xf4\xd8\x4f\xe8\x22\x69\x7c\xc7\x5b\x33\xe0\xdb\xfc\x25\xe1\xa0\xb8\x45\xe0\xcf\x49\x56\x16\x9e\xfc\x54\xd4\x20\x3a\x1c\x85\x5e\x1a\xa3\x2d\x3e\xa6\xd8\x47\x83\x75\xcf\x39\xb6\xae\x1b\xe9\x96\x55\x92\xaf\x4d\x40\xdb\xf1\xea\x36\xb0\x23\x87\x7c\x3f\x60\x8a\x5b\xa4\x59\x6b\xdb\xfe\x18\xc5\x02\xb5\x64\x7e\xaa\x04\x79\xc0\x7e\x97\xa4\x5e\x36\x63\xc6\x3e\x6e\xfe\x6a\x69\x57\xdb\x9b\x61\x67\x15\x45\x87\x86\x7e\x3d\x35\xa8\xa1\x80\xfd\x3e\xcf\xf5\xd7\x59\xb0\xfd\xc0\x17\xfb\x0c\x67\x87\xf7\x5f\x09\xa1\xbc\xdb\x0c\x41\xd7\xce\x5d\xc0\x06\xc8\xd6\xec\x39\x32\x98\x9d\x64\xd4\x6a\x1f\x19\x68\x2c\x4a\xef\x15\xd5\xf6\xfa\x08\x35\x1e\x77\x4b\x7c\x6d\xeb\x67\x4e\x45\xc7\x73\x6e\x2d\x05\xc6\x2f\xba\x5b\xd8\x3b\x9f\xba\x8a\xf8\xc7\x7a\xd4\xdd\xa2\xa2\xad\xc8\x08\x2f\x36\x89\x7f\xee\x89\xc5\x58\xb8\x8b\x86\x05\xad\x8d\x95\x19\x0d\x06\xa1\x6f\x7d\xcf\x2e\xa1\x35\x7e\xd2\x2e\x23\x93\x56\x01\x87\xc4\x73\x1e\x17\xe8\x83\xe2\xe7\x2e\xf9\x64\x2e\xb6\x63\xe7\x7a\xcf\xeb\xca\x48\x6e\xed\x06\x4b\x5f\x6d\x23\xc3\xde\xea\x48\x53\xe2\xe7\x30\x27\x1a\x85\x90\xbc\x8e\xc2\x95\xed\xc3\x22\x8a\xd8\x4d\x88\x74\x4d\xa0\x77\x15\xe0\x75\x0e\x5f\xc6\x31\x56\x97\x55\xf0\x30\x14\xe4\x8e\xcb\xcf\xb1\xcd\xfe\x49\x39\xa5\x05\xdf\x23\x09\x1f\xf1\x09\x8f\x92\x40\x15\xf5\xba\xe7\xd6\x5c\x78\xd8\x0c\x3d\x99\x60\x79\xc6\x01\xdf\x02\x08\x2b\xde\x01\x51\x29\xaa\x04\xf4\x9b\xf8\x2d\xa9\x91\xb7\xe7\x28\x28\x0b\x8c\x61\x0e\x41\x39\xc6\x36\x47\x80\x32\x46\x33\x5f\x00\x89\x69\x8e\xc2\x0d\xa3\xbc\x7a\x9d\x47\xb6\x0f\x0a\x3d\x30\xd8\x18\x5f\xdc\xdf\xd7\x49\x0d\x72\x44\x6f\x27\xa2\xe1\x31\x5f\xee\x4b\x67\xf9\x97\xfb\x76\x9f\xf1\xc5\xf4\xed\xbe\x34\xce\x5d\xbc\xde\x67\x14\x8e\x60\x16\xaf\x10\xdb\xf4\x54\xbf\x2b\x1e\x7f\x96\xd7\x8f\x4c\xa7\xc0\x80\x74\x54\x29\xea\x28\xa0\xc7\xe2\xba\x64\x59\x8d\x54\x6c\x1e\x88\x45\xe3\xd8\x4a\x33\x0e\x0d\x7a\x12\xd8\xda\x72\xbb\x76\x5b\xc8\xc8\x1e\xec\xb6\x70\x9d\xae\xab\xd7\x8c\x1d\xfb\x2d\x64\xb4\x67\xef\xec\x57\xf8\x41\x8f\xc3\x76\x7b\xef\x01\xc4\xd0\x25\xde\x90\x94\xed\xbe\xfa\x84\x8c\xe9\x2b\x30\x0e\x50\x93\x31\xf4\x79\xcd\xef\x43\xb6\x1e\x1c\x73\x4a\x07\xb9\x04\x54\x84\xfb\x63\xb9\x04\x6c\x0d\xe2\x11\x9f\xc9\x1a\x86\xbc\xfd\x1a\x36\x44\xc5\x18\x53\xbe\xb7\xbc\x08\xeb\x4c\xf5\x60\x78\xa6\x94\x67\x0f\x70\xe5\x58\xbd\xfc\x7b\x8a\xa4\xd3\x9d\xc6\xdd\x20\xd1\x1f\x63\xdd\x4b\xe5\xa0\x25\xd9\xf1\x7e\xb9\x93\x95\x16\xcf\x23\x97\x92\x0e\x3e\x2f\xec\x83\xc2\xd7\xad\x12\x4f\xa7\x73\x7f\x9a\x38\x81\xa0\x65\x93\xa7\xb8\xf2\xa2\xce\xde\x00\x8a\xb1\x9e\xcd\xa4\x99\xc0\x30\xa5\x10\xaf\xee\x99\x30\x29\xe8\xa6\x59\x5e\xbb\x80\xee\x9e\x59\x34\x52\x5f\xaa\xcd\xe1\x0e\x1b\x49\xc6\xa6\x22\x42\x3d\xa2\x3b\x40\x68\xd3\x87\xb6\xa1\x42\x6c\x20\x5a\x86\x38\xdb\x15\x45\x7a\xd1\x85\x80\x8b\x2a\x35\x93\xb9\x79\x88\x55\xd2\x28\xaf\x2b\x3e\xb0\xdd\xac\x54\xa0\x09\xd0\x93\x7f\xbc\xb5\x10\x76\x82\x0f\x4b\x71\xc0\xd6\x1d\x2e\xfb\xb7\xb2\xef\x4a\x8c\xf1\x1d\x7a\xd3\x4a\x63\xee\x2d\x3b\xb5\x48\xba\x1d\xa2\xd2\x9c\x03\x32\x06\x30\x78\x4c\xe6\x8a\x4b\xf0\x57\xcc\x6d\x64\xfb\x35\xb7\xb2\xad\x13\x55\xeb\xb4\xda\x35\x3e\xf3\x91\x23\x63\x61\xb3\x71\x76\x69\x20\xab\x11\xff\xa2\xb0\x2d\x0b\xc4\x74\xdb\x07\x1e\x03\xe5\x23\x8d\x1f\x97\xdd\xa0\x0b\xea\x63\xa3\x1f\xc4\x97\x9a\x15\xda\x45\xe1\xe8\xcc\xd9\x39\x0d\x3a\x1c\x7a\x27\x73\xd7\xb2\x97\xc5\xb7\x7f\xf7\xf7\x67\xfb\xd6\x37\x5f\x7f\xfb\x7b\xfc\xe7\x55\xb3\x91\xfb\x94\x12\xcf\x52\x6a\x5e\xce\x48\x5b\xb2\x67\xef\x57\x00\x2d\x8d\x8c\xd5\x6e\x8c\x3e\x0c\xe8\x86\xe0\xc1\x15\x8d\xb2\x91\x25\x20\x1e\xb3\x34\x50\x8d\xc4\x1d\x66\x89\x75\x6d\xcc\x9a\x8d\xde\x54\x98\x2e\x77\x0f\xad\x3b\xc9\x96\xdd\xd2\x84\xb4\x40\xa6\xd1\xf1\x82\x08\x93\x1c\xc0\x1d\x3d\x4c\x9b\xd3\xa5\x9c\x93\x73\x8e\x6c\x1e\x53\x3a\xc4\x28\x71\x8d\x8c\xce\x81\x7a\x8c\x50\xcf\xae\x94\x2a\x49\xc6\xfe\x12\x8f\x22\xb1\x0e\xee\x84\x7a\x70\xa0\x33\x18\x54\xd7\x3b\x97\xdc\xc7\x30\xba\x2f\xe6\x04\x6e\xdc\xa5\x79\xe5\x4a\xa2\xe9\xdd\x83\x1e\x5d\x5c\xd0\xa6\x37\x0f\x9c\x59\x00\xdd\xb2\x7a\x06\x0c\xb7\x1f\xd2\x3c\x1e\xae\x8b\x2a\xe3\xdc\xec\x05\x06\x69\x22\xa9\x6d\x8a\x82\x24\xcf\xd9\x3c\xac\x6d\xd0\xaf\xb7\xde\x2a\xe0\x73\xb4\xf9\x0d\xc6\x78\x17\xb8\xb4\x5a\xd2\x7b\x33\x13\x7b\x30\x4f\x31\x4c\x5c\x46\x7a\x46\x5e\x1f\xcf\x8d\x3e\x7d\x34\x28\x20\x0b\x31\x6f\xd0\x42\xd5\x8e\xe6\xcd\x79\x2c\x2d\xc0\xe5\x2d\x59\xdf\x55\x93\x8c\xf8\x79\x07\xd6\x62\x03\x0d\xd8\x9c\xa2\xd6\xb2\x13\x4c\x5f\x91\x40\x73\xd7\x13\x8e\xca\x76\x85\x29\xa4\xb0\xf2\xca\x0d\x67\x47\x25\x7f\x24\xca\xe5\xb7\x9f\xe5\x90\x8c\x69\x1d\x51\xee\x26\x6a\x43\xeb\x1e\xcf\x96\x25\x96\x3d\xc0\x39\x68\x91\xd1\x7d\xb0\xeb\xe2\xf6\x82\xb9\xed\x3d\x73\x7d\x58\xcb\xbe\x48\x0c\x5c\xb2\x15\x55\x59\xbe\x42\x99\xa9\x6b\x0f\x36\x1e\x66\x79\x8e\xd3\xb5\xe5\x04\x22\xce\x1d\x04\x61\xeb\x87\x81\xb5\x16\x89\xed\xd8\x6d\x9e\x35\xa3\x01\xee\x3f\xbf\x98\x83\xb0\x98\x0d\x11\x79\x28\x80\xe3\x28\x89\x38\xc1\x5f\x33\xb9\xf5\xf9\x0b\xed\x14\x13\x17\xa5\xd2\x93\x9a\xd2\xf3\xc1\x3c\x73\x36\x30\x03\x0a\xa7\xe7\xaf\x4f\xae\x2e\xce\xcf\xa6\xe7\x33\xeb\xf5\xe1\xd5\xc9\xe1\x8b\xd3\xa9\x45\xc5\xe0\x9a\xfd\xc0\x7a\xf5\x19\x44\xc1\x75\xf3\x6e\xcb\x9a\x58\xc7\x7b\xb2\xeb\xf9\x14\x3b\xd7\xef\xbf\xd6\xa5\x96\x97\x85\x6a\x1e\xeb\x1f\xa7\x5b\x4d\xfa\x0f\xad\xa5\xec\x54\x9c\x15\x7f\x72\x6e\xb1\x30\xd2\x32\xf0\x9c\xee\x76\x73\x2a\xa0\x14\xd9\xeb\xb7\xcb\xdb\x37\x4f\x9e\xff\xbe\xbe\x38\x52\xb5\xcf\xbf\x3e\xc3\xac\x71\x64\x8e\x7a\x96\xac\xc3\x67\xea\x69\xe8\xed\x3c\xf0\x17\xee\xf2\xe0\xe7\x38\xf0\xbb\xe1\x24\xd6\x9b\x27\x58\xc1\x63\x3f\x58\x60\x7a\xca\x65\xfc\xe6\x49\x0b\xdb\xfe\x9a\x46\xfe\x26\xfd\xfa\xeb\xaf\xff\xdb\x80\xd1\xeb\x2f\x38\xf8\xee\xd4\xf5\xd3\x0f\xcf\xce\xec\x39\xff\x59\x18\x4c\xa9\x66\xf4\xfa\x9e\x82\xe0\x0b\x4c\x08\x31\x8d\x1f\xd9\xe4\x62\xaa\x95\x15\x81\x44\xa1\xdc\x31\x5c\x2c\x8b\xa0\xfd\x01\x40\x04\xef\x63\x95\x32\x1c\x91\x09\x1d\x3c\x6f\x9e\xfc\xfa\xe6\x4d\x19\xd5\x1b\x44\xf6\xa6\x88\x0e\xfe\xf8\xf4\xe6\x49\x05\xe3\x65\xf0\x5e\x44\xd7\x2b\xe1\x79\x9a\xe3\xea\x85\x6e\x4f\xcd\x56\x69\xf6\x5b\x00\xf7\x59\x01\xfd\x96\xf1\xdf\xe6\xeb\xcb\x9b\x2f\x33\x51\xdc\x3c\x93\x9c\x98\x2c\x23\xcd\xb9\xcd\x3e\xc6\xae\x87\xb6\xb9\x5a\x39\xd4\x7f\x06\xfb\xc0\x97\x53\x29\x51\xbc\x21\x24\x3a\xb3\xd6\x73\x0c\x55\x14\x6a\x1c\xbd\xc1\x68\xca\xd8\x56\xd8\x36\x56\xc0\x29\x82\xcd\xc4\xad\xa5\x7b\xda\xfc\x6d\x72\xff\xca\x27\xb7\xff\x9e\xe6\xab\x49\x56\x45\x91\xad\x11\x99\xa5\x51\x06\x6b\xc4\xd2\x3a\x80\x11\x41\x71\x8b\x37\xe8\xa1\xb2\xbe\xdb\xd2\x4c\x41\xb5\x3d\x14\x6c\x72\xa9\x29\xf8\x35\x3a\x82\x72\xd8\xc7\x5c\x2c\x8b\xf4\xf3\x2a\x7c\xdd\x71\x7c\x37\x9b\x5d\x62\x98\xe6\x87\x7b\x55\xc8\x06\x83\xcb\xd4\x28\xba\xe9\x16\xdc\x59\xc2\xe1\x14\x88\x71\x16\x42\x12\x67\xf1\x6a\xe6\x14\x0e\x79\xf2\x32\x01\x61\x48\xdf\x68\x0f\x5e\x63\x81\x1d\x34\x0e\xbd\xe7\x2e\x03\x08\xba\xd4\xc1\x10\x65\x4d\x7a\xb6\xec\x75\xae\xcc\x20\x45\x73\x55\xfe\xbc\x65\x53\x1d\x0d\x33\x1f\x66\x49\x43\xf9\xc1\x0d\x73\x06\x8b\xfe\x6f\x6d\x87\xa3\xbc\xb3\x15\x28\xd9\xf1\x33\xdb\x0e\x31\xe9\xf1\xfd\xf1\x1e\xd9\x76\x8d\xce\x78\xdc\x43\xdf\xbb\xf4\x87\xbe\x03\x8c\x8f\x33\xfa\xc1\x0f\x6c\x8f\x8c\x7d\x08\x57\x1e\xfb\x79\xed\x73\x90\xa0\xc1\x9f\x3b\xeb\xce\x8e\x5c\x92\x5a\x18\x89\x6e\xcb\x67\x5e\xeb\xbd\x1d\xcb\x34\xd9\x49\x6b\x49\xaf\xac\xb7\x00\x50\x25\x08\x3e\x3d\x66\xb9\x1c\x25\x02\x4a\xd7\x12\xa3\x18\x8c\x88\x44\x03\x37\xcb\x7f\x2e\x59\x43\x6a\x56\x33\xc3\xa9\x0c\x05\x15\x11\xc3\x84\x0e\x3e\x55\xa1\x94\x4a\xa0\x31\xf6\xb9\x4a\x2a\x91\xa7\x38\x74\x31\x28\xa6\x8d\x8a\x5e\xdd\x4c\xe9\x90\x5c\xe8\x53\xbb\x5c\x8e\xdd\x92\x8c\x91\x29\xb9\xe9\xe7\x61\x85\xca\x2b\x24\x25\x32\x45\x78\x8f\xd2\x22\x35\xa4\x50\x01\xce\xad\x04\xe1\x83\xaa\x89\x54\xe8\xeb\xc8\x5a\xde\x40\xd3\x08\x99\xc9\xab\x74\xd4\x78\xfb\x1d\xf4\xaa\x6d\x52\xb3\xb4\x5b\xd3\x94\x0c\x2c\x70\xc2\x74\x3b\xb5\x91\x2a\xbc\xc9\x75\xa8\x56\xf5\xc1\xa5\x8f\x62\x6f\x68\xa6\xe4\xd6\x87\xad\xf4\xcb\xab\xaf\x48\x96\xaf\x94\x45\xba\xfb\xc1\xd3\x25\x3a\x2b\xc7\x45\xbb\x3a\xdf\x95\x6d\xef\x1d\x92\x46\xd9\x35\x17\x72\xf5\xbd\x8d\x29\xe2\xdb\x78\x5f\x92\x7a\x77\xd5\xa4\x67\xc1\xf5\xe9\x0b\x6f\x98\xa8\x3c\x69\xcd\xa6\xaa\x71\x41\x5a\x17\xdc\x8b\x80\x38\x4c\xb5\xdf\x04\x64\x30\x81\x1c\x6d\xda\x43\x40\x57\xe8\x23\x5b\x05\x77\xde\x22\x73\x1c\x1a\x55\x19\x45\x74\xfd\x5d\x3b\x6a\x21\xf7\xa5\xaf\x58\x60\xb3\x09\x82\x21\x61\x43\xf6\x6c\x56\x2e\x60\x4f\x94\xe9\xdd\xc9\x8e\x55\x14\x77\x16\x22\xaa\x4e\x6e\x3a\xa8\xae\x50\x19\x79\x55\x2b\xcc\x05\x68\x3f\xbf\xeb\x81\xd0\x46\xa6\xba\x85\xd0\x79\x80\xc6\xcc\x44\x65\x26\x93\x13\xdc\x07\x90\x21\x8d\x75\xf1\x19\x3d\xe8\x54\x15\xd0\xd1\xde\x52\x47\x71\x37\x40\x4d\x7a\x97\x32\xfd\x4f\xd1\xad\x28\x4e\x61\x73\x62\xbd\xb4\x8e\x79\xef\xd9\xd7\x90\x22\x25\x63\xd0\x7a\x2c\x7d\xbc\xd8\x95\x03\xc6\xfc\x12\xb4\xc4\x4b\x3b\x59\x75\x2e\x4d\x53\x60\x86\x34\x53\x81\x1b\x2c\x30\xd4\x93\xac\x9a\xf6\x86\x98\xe5\x70\x94\x03\x0b\x8f\x11\x7d\x5a\x7a\xcf\x62\x2f\x08\x9a\xd4\x01\x3c\x59\x2f\xbc\xac\xf9\x36\x68\x22\x9c\xfa\x4f\x7c\x70\x97\xc2\x2c\x3d\x3d\x63\x85\x05\x18\xaf\x6c\xba\x33\xff\xe3\xf5\xc5\x79\x17\xda\xac\x1e\x13\xaf\xe0\x72\x17\x4d\xd4\x58\x3a\xa8\xac\xea\xb6\xd6\xeb\x51\x03\xdf\x23\xd9\x4e\x56\x3e\x90\xef\xea\x16\x33\x24\x27\x0f\x93\x83\xc5\xbd\xfa\xb2\xc1\xd9\xb3\x7d\xdb\xbb\x8f\xc5\x30\x0e\x28\x94\x32\xb3\x56\x7f\xac\xa8\xb5\x6c\x75\xd2\x45\x2e\x22\xcc\x3d\xa8\x77\xcb\x17\x8b\x85\xc0\x8c\x72\x7c\xd1\x57\x8f\x28\xe6\x34\x44\x01\xda\x69\x48\x1b\xc9\xf6\x11\xda\x66\xb0\xae\x5a\xc7\x5e\xec\xd9\x57\x93\x22\x7c\xa6\xdf\xb6\x21\xf4\xd7\x2b\xf1\x35\x09\x39\x54\x5e\x9d\x99\x16\x32\x86\x0d\x40\x91\xa8\x54\x7e\x9d\x65\x43\xb3\x26\xdf\xe4\x46\x23\x80\x58\xdf\x31\x5b\x1d\x7d\xc6\xa0\xa0\xef\xc2\xe9\xdb\x59\x9b\x26\xdf\x5e\x8f\x70\x75\x8f\xa8\xb6\xbe\xbd\x14\x3b\xbb\xb5\xcb\xed\x4e\x87\x6a\x9f\x99\x6b\x68\xad\x8d\x35\x0e\xbc\xbb\x2c\xfe\x5d\x6f\x4f\xc1\x9a\x85\xde\xa9\xb2\x13\x35\x43\xd0\x24\x8a\x7c\xda\x46\x98\x34\x2f\x88\x62\xb9\xbd\xb0\x44\xa1\xaa\x50\xb8\xb3\x29\x64\xf3\x5a\x45\xa1\xec\x59\xc7\xb0\x44\x72\xba\x65\x73\xdb\x0a\x88\x18\x5c\xdf\xb0\x4a\xf2\x40\x5e\xdb\xc0\xd9\x64\x67\x9c\xc5\xea\x81\x64\x60\x0d\x4c\x6c\xac\x5c\x48\x90\xc5\x7f\xc1\xc4\xba\x0e\x47\xb0\xad\x7e\x74\xc3\xb0\x32\xe3\x1a\xcb\x12\xb4\xfa\xc6\x54\x3d\xc6\x24\xd5\xde\x59\xd1\x03\x9e\xc3\x3c\x29\x05\xad\x43\x55\xb7\x62\x7a\x79\x82\x35\x46\x91\x10\x9c\x80\xf5\x32\x88\x29\xa1\xd8\x1e\x4c\x66\x52\xfc\x53\xea\xc1\xe8\xa2\x62\xa1\xcb\xfc\x52\x44\x07\x96\xf5\x12\xd5\xd5\x00\x1f\x77\xef\xfd\xc4\xfe\x00\x0a\x90\x17\xee\x83\xdc\x16\xd6\x4f\xf3\x85\x72\xaf\xc9\x97\xc5\x64\xf5\x53\xcb\x43\xd1\x5f\x19\xf9\x7a\xf3\xf2\xdc\x3a\x0f\x38\x35\xef\x22\x48\x7d\xa7\x33\x40\x6a\x2a\x8b\x89\x1f\xa6\x73\xca\xf1\xb9\x66\x0b\x0a\x26\xa7\xdd\xaa\x6c\x6f\x4e\x13\x66\x7f\x75\xd0\x1b\xc9\x7a\x6f\xf3\x1e\x23\xba\x80\x1d\x73\x10\x96\xb7\x54\x19\x1a\x9a\x52\x5c\xcc\x1e\xee\x3f\x4c\x38\x17\x37\xe7\x39\x56\x54\x8b\x0f\xa1\x1b\xf1\x7d\x04\x93\x76\x24\x89\xf0\x1d\xf9\x12\x05\x10\xe4\xf2\x4f\x36\xff\xcf\x1c\x67\x10\xb1\xad\x22\x74\x49\x29\xa1\x33\x1f\x55\x4f\xd1\x30\x6c\xff\x7f\x10\xf3\x94\x93\x8b\x45\xf6\xfb\x3c\xdd\xee\x3c\x80\xd5\xe5\x27\x93\xe4\x3e\xc4\x64\x46\x09\x3d\x05\xe7\x53\xf5\x0c\xbd\xd0\x30\x6f\xb1\xcc\x4d\xdc\x4c\xe2\x07\xcc\x3a\x96\x08\xae\x73\x97\x27\xd7\x15\x65\x0c\x70\xb2\xe1\xc1\xb6\x85\x61\x58\x21\xf2\xe9\x87\x90\xd2\xa6\x97\x4c\x23\xec\xba\x62\xb3\x0d\x22\x58\x60\x52\xa9\x67\x9c\x75\x39\xb4\xdd\x28\x96\x75\xf5\xad\x60\x4e\x75\xcf\x9c\x62\x95\x72\xcb\x17\x76\x04\xba\x01\xce\xef\xf7\x6b\xef\xda\x07\xb1\x29\x92\xd2\x1c\x57\x5f\x56\x4b\x69\xcb\x1c\x71\x17\xe1\x4b\xaa\x2c\x1e\xea\x0b\x22\x42\x70\x4a\x6d\xda\xd6\x73\x38\x2f\x91\x1a\x98\x56\x55\x88\xdf\x8a\xf7\x10\x35\xdc\x49\x9c\xd4\x55\x65\x02\x0b\xb5\x6d\xb3\x0b\x00\x85\xca\xb5\x53\x37\x88\x73\x71\x89\x75\xcd\xbe\x3e\xc5\x1e\x0d\x23\x1e\x42\x51\x76\x26\x67\xe4\xe0\xf2\xe4\x89\xb4\xfe\x4f\x74\x7d\xfe\x9d\xe0\x34\xda\xfb\x24\x3d\xdd\x84\x1e\xc1\x29\xbf\xc9\x0c\xd6\xda\xa7\x4f\xcd\xb2\x3b\x87\x5d\x25\x1c\xf6\x7f\x2c\xd6\xaa\x14\x32\xcc\x52\x11\x15\xcc\xd2\x3e\xcc\x03\xac\xe1\xb9\x7a\x2c\x4f\x39\x2d\xda\x16\x42\xa3\xf1\x5e\x46\x01\x5c\xa9\x93\xfb\xca\xb8\x6f\x83\xc0\x13\x76\x4b\x09\x00\x7a\xd7\xf7\xa4\xc1\xb2\x02\xc4\x09\x80\x4a\x50\x2a\xd4\xf8\x10\xd8\xe6\x41\xf8\x3b\xa2\x55\xed\xb6\x38\x89\xb0\x86\x60\xeb\x14\xd4\x51\x5a\xb3\x65\x18\xd4\x8e\xe8\xe5\x0a\xec\xdb\x2b\x48\x35\xef\xb1\x92\xda\x86\x81\x27\xe1\x6d\x24\x1a\x56\x4d\x23\x92\xde\x23\x7c\x79\x78\x72\x3a\x3d\x6e\xa4\xee\xea\x70\xb6\xf9\x93\x09\xd8\xe9\xe1\xec\xe6\x6a\x6a\xbd\x3c\x3d\x7c\xd5\x1c\xad\xd6\xd0\xaa\x3f\x16\x0a\x8a\xb4\x16\x22\x99\xaf\x4a\x4a\x7d\xdc\xef\x79\x7d\xf3\x27\x8c\x2e\xdc\xbe\x7d\x74\xc2\x31\xa6\x90\xdf\xac\xe2\x9e\xb7\x24\x49\x1f\x06\x18\xa6\x21\xc6\x39\xab\xbb\xa7\x7c\xfa\x6a\x84\x63\x4c\x9f\xb8\xc3\x48\xc6\x81\xe4\xc1\x09\xfd\x00\x8a\x9b\x4f\xcc\x1c\x9f\xc6\x20\x5a\x4e\xd8\xa7\x12\x75\xb7\x28\x60\x4f\xa6\x8b\x68\x79\x05\x1f\x67\x81\x8c\xd1\x97\xd9\x2b\x74\xd6\x01\xba\x59\xac\x44\x04\x0b\xc1\x4f\x0a\x58\x48\xff\x8c\x36\xff\x6e\x80\x67\xc8\x18\x35\x67\xc1\xf6\x3c\x38\xe3\x99\x7e\xf9\xe6\x3d\x3a\xe7\x39\x80\xff\xa0\x87\xd5\xa4\x9e\xa8\x96\xfe\xc6\x34\xd1\x03\x5c\xcd\x7a\xa0\x67\xb7\x51\x57\x04\xba\xec\x17\xb1\x95\xd7\x85\x26\xbe\x61\xe3\x2d\xca\xa5\x7e\x2f\xbf\xa6\x60\x74\xe9\x84\x63\x91\xaf\x91\x16\xa9\xe5\x0b\x69\x74\xc3\x1a\x09\x6f\x55\xe0\x76\xbb\xa1\xff\x64\x1d\x06\x71\xec\x2a\x0d\x8a\xeb\x31\x13\x30\xbe\x45\x29\xef\x36\x47\x54\x20\x8f\x41\xb4\xd2\x91\xf7\x31\xb9\xb8\x0c\xae\xc7\x17\x12\x72\x77\x74\xe1\xce\x46\xe7\x83\xf2\x81\x6c\x31\xf3\x8e\x08\xd9\x60\x34\xf2\x45\xad\xfd\x1d\xa9\xcc\xe8\xfa\x2e\x06\xb8\x39\x71\x46\x40\x39\x2c\xf5\xe6\x3a\x4f\x9c\xa1\xe6\x98\xa0\x98\x50\x23\x5d\xf0\xf1\xb5\x98\x3f\xbe\xf4\x6c\x4c\xe5\x27\xd3\x62\x39\xcd\xfa\x98\x4e\xd7\xe1\xf4\x70\xfc\x80\x09\x39\xdb\x3d\x75\xa9\x69\x7e\xeb\xdb\x6e\xd0\x1f\x36\xbe\x90\xa3\x1f\x31\x5b\x7d\x28\xe5\x84\x77\x8f\xea\xeb\x3b\x74\xab\x8b\x64\xb4\x03\xb6\x12\x1f\x5c\x0a\x01\x4b\x64\x42\x8c\xd0\x86\x15\x03\xe3\xc4\x1f\xc3\x76\x67\x81\x1d\x61\xe9\x3f\xca\x20\x22\xaf\x0f\x4a\xef\xfe\xd4\xe1\x8c\x31\x70\xf1\xa6\x4c\x1d\xe8\xfa\x89\x11\x78\xb2\xa6\x5a\x73\x4e\x14\x43\x28\x26\x54\xa2\x62\xf6\xde\x4d\x56\x68\xf9\x2a\x82\x6d\xa7\x8d\x23\xee\x0a\xbe\x90\x31\x9a\x14\xea\xfb\x6b\x52\xb5\x76\x97\x52\x5f\x34\x24\x2b\x07\x30\x1e\x51\x30\x4c\x16\x5e\x5c\xb7\x5e\x51\xc6\x53\xd2\x39\x8d\xd0\x5d\x4a\x30\x7c\x38\xdb\x4a\x45\x4f\x64\xba\x20\xeb\x8d\xac\x1a\xaf\xa6\xb3\xd9\xc9\xf9\x2b\xeb\x7a\x76\x78\x35\x6b\xb9\xb0\x9d\x9d\x5c\x4f\xad\xe9\xb9\x75\x75\x71\x33\x9b\x9a\xe0\x39\xbd\x78\x71\x78\x6a\x5d\x5c\xce\x4e\x2e\xce\x5b\x72\x7d\xc8\x06\x16\xb7\x2f\x65\x05\xe9\x1b\xa5\xf5\x4a\x3a\xb2\x5c\x1c\x66\xe9\x8e\xdb\xe2\x2a\xba\x9a\xf7\x1f\xa2\x72\x83\xc2\x02\x21\x1c\x78\x21\x93\x52\xc1\xdc\xbd\x13\x09\xe8\x6e\x73\xd1\x46\xc9\xd5\xd6\x7d\x2c\xc1\x4c\x56\xa4\x1f\x2a\x78\xe4\xf6\x57\x0f\x4d\x9f\xd0\x30\x8c\x77\x55\x3d\x61\x6b\x2c\x71\xd9\x92\x37\xb0\xbc\xe7\xd0\x78\x15\xc5\x82\xc2\x8d\xfc\xe0\xa0\xc5\x73\xb5\x66\x38\x8d\x5d\xb5\x89\x90\x97\xf7\x96\xd2\xb0\xc6\x3c\x57\x17\xfa\x46\x7e\xef\x88\xaf\xa2\x10\x0f\x94\x25\xb1\xb3\x7e\x7d\x84\xb2\x1d\x35\x4c\xc8\x09\x71\xf6\xa4\x52\xcc\x36\x84\x9a\x27\xa0\x32\x8d\x9f\xb5\xb2\x47\xc6\x4b\xb2\x9d\xec\x82\x89\x7a\x0b\xbe\x68\x7c\xf9\x92\x2b\xa2\xbc\x2a\x38\x55\x7e\xf6\xb5\x27\x1f\x49\xfe\x2a\x18\x86\x0e\xa8\xc3\xe3\x14\x6b\x98\x80\x80\x63\xd4\x9f\x1f\x51\x02\x65\x83\x19\xb3\x10\xc4\xb8\xc0\x07\x8c\xa9\x2b\xcd\xbc\x71\xf1\xf2\x8e\xd9\x13\x0d\x98\x7b\x1e\x2f\x23\xe4\x87\x57\xbc\xf8\x2c\xa5\x78\xa6\x30\x9c\x08\x03\x4b\x9c\xbd\xe0\x36\x11\x58\x38\xf4\x0b\x2e\xca\x53\x60\x55\xbc\x5b\xbe\xec\x10\x93\xf6\x68\x9b\x62\xe1\xf5\x0e\x3b\x82\xd2\x26\x9a\x06\x69\x7c\xec\x63\x1f\xe7\x05\x05\xd1\xbf\x3e\x76\x93\x20\x72\x01\x37\x40\x6f\x36\x00\x9a\x80\x18\x46\x5f\x06\xf8\xde\x6a\xf6\x33\x68\xef\x89\x24\xd5\x7b\x01\xf4\xba\xc9\xd5\x96\x07\x21\x61\x38\xe8\x60\x02\x81\xe5\xe6\x35\xea\xf1\x8b\xc7\xa8\xdb\x54\x1a\x94\x5e\x9e\x88\x9a\x75\x2a\xa1\xec\x88\x46\x99\x59\xb9\x4a\xa3\xa5\xbd\x9d\x24\xa0\x46\x32\xab\x10\xf5\x29\x4d\x95\xb2\x47\x45\x3b\xcb\xc7\xb2\x25\x8b\x81\xf0\x97\xaf\xf0\xbb\xf3\x4e\x66\x8f\x08\x59\x7b\x34\x65\x2c\xb1\xbe\x82\xd2\x1f\x80\x01\x6d\xb2\x98\x14\xa7\xa1\xd0\x59\xbf\x4b\x03\x10\xba\xb2\xa2\x02\x1b\xe7\x2d\x2f\x20\xf5\x82\x3e\xe1\xa9\xe3\x97\x13\x50\x49\xad\x25\xfb\x5b\x53\xe7\x6d\x18\xd8\x8e\x90\xef\x8e\x25\xdb\xfa\xc9\x97\xc0\xab\x9d\x50\xf5\xd8\x4c\xfc\x0c\x1c\xfa\x0c\xc3\xdf\xdd\x28\x77\x3c\x98\xc7\x59\xe0\x9f\x79\xc1\x7e\xe6\xed\xfd\xa5\xee\xe3\x5d\x6e\xd8\x47\xdc\x99\xd9\xf3\x45\x6c\x7a\x7d\x33\x01\x65\xac\x3f\xf0\x26\x1f\xe1\xaa\x96\xbd\x8d\x28\x88\x3b\x52\x86\xe3\x62\xf2\xc7\xe2\xc5\xa1\x47\x4e\x3a\xe3\xa9\x18\x17\xd9\xe3\x8c\x79\x67\xe3\x1b\x65\x2c\xdb\x6f\x72\x3b\xac\xef\xd9\xb6\x5c\xcb\x4f\x79\x43\x5f\xc4\xc6\x9f\x74\x83\xb7\xc1\xfe\x7c\xb1\xc3\x30\x88\x12\x99\xa4\x26\x67\xc9\x97\xc3\x83\x9a\xba\xa4\x26\x46\x87\xc1\xf0\x86\x50\xae\x77\x3b\xd3\x07\x60\x46\x5b\x5c\x57\x0e\xb5\x75\x19\xb5\x9c\x07\x23\x42\xd6\x1f\x4d\x82\xc1\x6c\x18\xed\x72\x8d\x9f\x30\xb2\xab\xb4\x63\x32\x1d\x66\xbc\x17\xa6\xc7\x44\x6d\xc6\x8f\x78\xe7\x3c\xb8\x90\x96\x77\x92\x1c\x8c\x92\xe4\x46\x1b\xd2\x0a\x3a\x4c\x03\x33\xaa\x6e\xc0\x9e\xbb\xf5\x65\x7e\x9f\x35\x3d\xd7\xe8\xd4\xf2\x56\x83\x2e\x64\xe9\x2b\x0f\xbb\x8c\xb1\xe9\x9d\xa6\x4d\x60\xee\x68\xf8\x9a\x27\x83\xd6\x40\xc7\x97\xff\x94\x49\x9d\x72\x6e\x50\xf9\xab\xb9\x97\x3a\xa4\x1f\xa0\xed\x4f\x7a\x9d\x5a\xb7\x81\x73\xdf\x48\xbf\x13\xf8\xfe\xe6\x01\x96\x66\x9e\x93\x9d\xc0\x44\x79\xe0\xdc\x3c\x88\xc2\xb8\xec\x75\x6c\x4a\xe9\x5a\x24\xab\xc0\xb1\x9e\xbe\x9a\xce\xf6\x2f\x2f\xae\xe1\x3f\x37\xb3\xfd\xe3\xe9\xe9\x74\x36\xdd\x17\xc9\xbc\xd9\x47\x70\xbd\x79\xc0\x9e\x32\x05\x3d\xf5\xb7\x08\x80\x85\x10\x2c\x09\xc2\x2a\xc3\xe8\x4f\x5b\x10\x27\xb8\xad\x1a\xd1\x9f\x83\x06\xe6\xec\xad\x36\xff\x6e\xe4\xb4\xa6\xc0\xcb\x42\x71\xeb\xfb\x49\x9c\xde\xb2\xab\x4b\xf3\x88\x0b\x28\x2b\xd5\xe2\xd6\x81\x3f\x91\x8e\x32\x26\x83\x3d\x39\xbf\x9e\x1d\x9e\x9e\x4e\x8f\xad\xcb\xd3\x9b\x57\x27\xe7\xd6\xd1\xc5\xd9\xd9\xe1\xf9\x71\x73\x7c\x52\x63\xbb\xbe\x77\xbf\x93\xa5\x8f\xd1\xd6\xa5\x44\x2e\xcd\xce\xd0\xd4\x38\xda\x8e\xd7\x34\x19\xab\xdc\x11\x59\x7e\x11\x99\xa9\x47\x6d\x91\x8e\xea\x90\x53\x7f\x92\x64\x95\x09\x54\xae\x16\xb9\x2f\x6c\xf3\x52\x91\x40\x55\x10\x61\x35\x34\xeb\x26\xb6\x97\xcd\x9c\xb8\x91\x32\x05\x55\xf1\xac\xcf\x08\x08\xdb\x14\x94\x22\x4e\x37\xc3\x69\xa6\x78\x54\xd1\x66\xb5\x49\x3c\xcc\x57\xb8\xf0\xec\x65\x0c\x5b\xe2\xc3\x5c\x84\x89\x35\x59\x7c\x85\x89\xe0\xd1\xf5\xf7\x56\x56\x8b\x14\x8e\xf5\x7e\x85\xae\xca\x5c\x6f\xd2\x5a\xa7\x5e\xe2\x86\x9e\x60\x47\x40\x7e\x48\x2c\xaf\xa9\x66\x31\xdd\x30\x2c\xeb\x38\xb2\x43\x61\xa7\x1f\x48\xbc\xb9\x4b\x5f\xe6\xb0\x93\x59\x1e\x9f\xc6\x76\xba\x20\xd2\xe0\x87\x50\xa4\x77\xe4\x84\x05\x27\x04\x87\x25\x12\x95\xbf\xa4\x24\x3e\x91\xce\x20\x8d\xb1\xa6\x29\x3e\x2a\xc6\x2e\x1d\x04\x25\x1f\xc2\xcd\x9f\x31\xd2\x21\x41\x55\x00\x2b\xe3\x6d\xad\x6f\x13\xf9\xbf\xc5\xe2\xf3\x20\x4f\x8d\x20\x93\x1f\x38\x58\xfd\xa4\x79\xbb\xe9\x43\x30\xa7\xee\xaa\x90\x8e\x41\x21\xd1\xa3\xae\x1b\xc2\x18\xd4\x49\xc0\xb1\x29\x6d\xf5\xfd\x0d\x28\x53\xd1\x43\x6b\x3b\x79\x9e\x27\x40\xc1\xe0\x14\xf4\xfd\xa7\xda\x9b\x5c\xbb\x4a\x56\xb0\x7a\x6d\x7b\xae\x23\x7b\xb1\xdb\x3f\x55\x16\x7d\xfe\xc6\xff\x01\x2b\xe0\xfc\xca\xc5\x7a\xde\x3c\x09\xa3\x20\x09\xe6\x81\xf7\x06\xd0\xbd\x79\x92\xcc\xc3\x37\x4f\xf6\xd5\x6f\x0e\xa5\x18\xa2\x61\xf2\xcf\xdf\x7c\x7d\xf0\xed\xef\x7f\x7f\xf0\xcd\xc1\x37\xff\xb5\xd0\x0c\x2f\xc4\x31\x37\xf8\xdd\xef\xbe\xfe\x7b\x2c\x11\x04\xc3\x79\xe3\xff\xd8\x83\x61\x7f\xdd\xc3\x32\x98\x47\x0e\x8f\x26\x8f\x7a\xb5\x36\xda\x4e\xfe\x5b\x54\xbf\xf6\xb2\xa6\xb9\xc8\x32\x22\x82\x8a\xa2\xd2\x79\x27\x93\x25\x3a\x62\x01\x12\x98\x52\x35\xa8\x0c\x93\x0a\x57\x23\x55\xb2\xb6\xea\x44\x82\xb8\x3c\x9c\x7d\xf7\x6c\x76\xf1\x8c\x75\x83\x09\x95\x55\xb2\x26\x96\x29\xb2\xde\x9a\x04\xc3\x2f\x24\x7e\xfc\x15\xeb\x09\xe0\x27\xce\x85\xd9\xa6\xab\xeb\x75\xd6\x63\x70\x29\xf1\x63\x1d\x5e\xb3\xcc\x90\xaa\xab\x75\x26\xd6\x41\xd4\xac\xc6\x37\xb6\xd3\xc7\xb4\x4e\xe3\x44\xc6\xf4\x83\xa2\xe9\x8b\xa5\x8d\xb5\x68\x54\xf6\x9c\x6e\x0a\xfa\xf6\xd7\xa0\xec\x8e\xb6\x3f\x8a\x87\xda\x4c\x71\x8d\x34\xa1\x35\x16\xb3\x39\x70\x4f\xa5\xbf\xb9\x0c\xcf\x6c\x3a\x98\x94\x2b\x19\x5d\x8b\xff\xb6\xdc\x82\xaf\x28\x2a\x56\xe1\xab\xeb\xa0\x8d\xf9\xfa\xfa\xd4\x3a\x12\x11\x47\x46\xfd\x2a\x4b\x57\x53\xf8\xea\xcc\x0d\xcf\x44\x8c\x27\x51\x0b\x45\x0a\x0c\x81\x40\x58\x74\xe3\xeb\x01\x47\x9b\x50\x4e\x26\xa4\x35\x5d\x57\x6a\x86\x0a\xa9\x81\x9c\x94\x7b\x61\xce\x4b\x58\x57\x23\xcc\x5d\xfe\x5a\xf4\xbc\xd9\x6d\xed\x1f\x45\x82\x85\xca\xb1\xa9\x42\xf9\xdc\xc4\x43\x4d\x21\xe5\x5a\x74\xa9\xb4\xab\xc3\x31\x75\xe7\x3a\xb2\x16\xd4\x64\x4e\xaa\xf0\x81\x75\xe9\x09\x3b\x16\xea\x47\x8b\x72\x91\xa8\x65\x1f\xdc\xfe\x8c\xc7\x08\x25\x2a\x25\xf2\xb1\xc0\x92\x2b\xb3\x02\xc1\x4d\x90\xe2\x63\xb6\x3b\xb4\xc9\xc2\x2f\x85\x30\x6d\x5e\xe6\x29\x46\xd1\xa0\x88\x4e\x7b\x6c\x26\xdb\x83\xf3\x47\x9d\x39\xd8\x24\xab\x94\x4d\xb1\x8f\x9d\x9c\x18\x0a\x56\x7f\x1c\x6e\xfc\x8e\xed\xd6\xa4\xfd\x1c\xc3\x9f\xd2\xce\xae\x1b\xd5\x4e\xdd\x28\x74\xd8\x8d\xd1\xb6\x04\x82\xd7\x52\x8b\xb6\x0c\xd9\xea\x00\xbc\x83\x41\x8c\x42\xf7\xa0\x5c\x09\x8a\xd6\xcc\xbb\x77\x1e\xa4\x7e\x42\x28\xd4\xa9\x75\x84\xdf\x20\x9a\x93\x52\x9b\xc2\x61\x46\xae\xa1\x5a\x07\x61\x3e\x1a\xca\xf8\x97\x88\xa8\x1e\xe5\x11\xfd\xa8\x1c\x3c\x95\xf7\x75\x50\x4e\xa6\x94\xe0\x55\x91\x69\x58\xec\x86\x05\xf1\x67\xe0\x41\xfc\x79\x99\xb0\x26\x65\x09\x2e\xfe\x6b\x97\x79\xc1\xda\xd3\x29\xfe\xdd\x6b\x01\x8f\x00\xd1\x98\xfa\x12\x23\x4b\xd3\x66\x34\x61\x63\x02\xdf\xe1\x98\x3c\xaa\x25\xb6\xe2\x42\x62\x95\xad\x34\xe2\xe8\xfa\xa1\xd1\x1e\x27\xe7\xef\x50\x07\x4d\x27\xbd\x4d\xcd\xb5\xf1\x2a\x1b\xd3\x81\x95\x27\xaa\x83\x2f\x9b\xd3\x50\x9e\x65\x49\xf2\xf2\x1d\x0c\x8a\x00\xe8\xd0\x77\x29\xa7\x15\x73\xdc\x39\x36\xc6\x34\x7c\x43\x08\xab\xd9\x2f\xfd\xb7\x1f\xb5\xe4\xb4\x1d\x9b\x87\x75\x00\xa4\x54\x8f\x90\x76\x70\xa3\x90\xab\x25\x30\x6a\x28\x96\xfa\xe5\x8e\xa4\x45\x03\xc5\xfa\x3a\x46\x2f\x5e\xf7\x83\xac\x3d\x08\x4c\x57\x4a\x19\x08\xec\xc8\x5e\x13\xae\x19\x7f\xa3\x25\xa4\x9d\xcd\x83\x67\xbb\x7d\x81\x68\x13\x99\xf6\xb6\xe5\xe7\x7c\x1b\x80\x8e\x53\x70\x52\xf6\xdb\x5f\xab\xb9\xf3\xf6\xd8\xcd\x9f\xf2\xfd\xbd\xb6\xbd\x9e\x39\x9d\x5f\x73\xea\x43\xb4\x91\x61\xde\x56\x4c\xf0\x19\xd4\xa6\x42\xc4\x92\xdf\x75\xf0\xfa\x1a\x71\xe8\x1e\xe0\xc6\xa5\x95\xaf\xb1\x12\xa9\x7b\xf1\x32\xd8\x09\xa0\x37\x73\x4f\x6d\x00\x7b\x01\x63\x65\x64\x8d\x7b\xc1\xb6\x8e\x45\xe4\xbb\x58\xdd\x06\x9a\x2b\x7f\x29\x13\x84\x98\xe6\x11\x0d\x66\x2a\xb9\x01\x1a\xce\x12\x7a\x32\xe6\x67\xf8\x96\xfd\x28\xd3\x3a\x16\x4a\x7e\xd7\xa5\x2c\x90\x4f\xeb\x73\xf7\xd6\xdb\x3c\x0c\xa2\x30\x2b\xf0\xa5\x82\xa6\x30\x1b\x33\xfe\xe0\xe0\x8d\xb1\x18\x3c\xd5\x4a\xb4\x39\x30\x7d\x9a\xf3\xa4\x07\x5a\x7c\xac\xeb\xa6\x8f\xbc\xb5\x70\x77\x1d\x5a\xc3\x92\xdc\x19\x42\x19\xb5\x24\x57\xd1\x9c\xbd\x0b\xa4\x37\x87\x8c\x07\x52\x5f\xf6\x2a\x88\x3e\x1e\x60\xfd\xb1\x54\x22\x82\xba\x69\x6c\xec\x60\x82\xbb\x1c\x0d\x3a\x7c\x63\xe6\x90\x0a\x51\xb5\x63\x6f\xd0\xdc\xa7\xcc\x26\xcf\x96\x46\x0a\xbd\x02\x85\x4c\x5f\x56\x76\x0f\x49\x4a\x2b\xbd\x0d\x28\x61\x37\xa7\xa7\xb6\x74\xfc\x72\x31\x19\x6c\x18\x71\x4e\x75\x7e\xaa\xb5\xe2\x7b\x20\x62\xbd\x2f\x9d\x56\xc8\x4c\xe4\x63\x1d\x22\x14\xa5\xe8\x9c\x25\x7f\xa6\xd2\xe1\x58\x21\x3c\x02\xb2\x50\x48\x36\x7b\x4c\xd4\x31\x5e\x51\x02\x9d\xf1\xa3\x47\xe7\x06\xfe\x01\xe0\x37\xbf\xad\x8b\xa5\x01\x62\xa0\x70\xf3\x30\xa1\x02\x66\x51\xea\x26\xfb\xd6\x3d\x67\xea\x77\xe3\x72\x8f\x3d\xf1\x21\xf4\xe0\x66\x4a\x88\xf7\xad\x5f\x52\x37\x7b\x1b\x16\x32\x7b\x77\xb4\x95\x41\xc6\xc4\x53\x23\xe3\x27\x79\xf3\xf0\xa0\x54\x09\x6d\x39\x61\xc1\x42\x7f\x4b\x63\x15\x84\x9c\x43\x12\x2e\x1d\xf5\xdb\xeb\x41\xe6\x79\xc8\xc3\x1d\xe6\xd0\x0e\x40\x9a\xd8\xbd\xb2\xe1\x64\xee\x57\xb2\x02\x76\xc7\x8c\x66\x54\x6d\xfb\x58\x79\x62\xd0\x52\xcd\x6b\x6a\x2e\x16\x82\xf2\x2c\x2b\xaa\x0a\x9e\xce\x9d\xeb\x0d\x67\x61\x11\x95\x8b\x56\x72\xfe\x01\x82\x33\x5f\x0d\xd8\xd6\xe5\xa2\x9a\x59\xa6\x47\xe9\xee\xda\x21\x15\xfb\x76\x36\xa5\x89\x34\x5e\x4d\x52\xea\xfb\xe8\x51\x50\x48\x40\x54\x90\xca\x6d\x0b\x29\xcf\x2b\x44\x5e\x6c\x52\x00\x4a\x3f\x1e\x74\xd4\x1b\x26\x7d\xb3\x3c\x02\xf6\xd6\xd9\xd1\xb5\x13\x3d\x4a\x62\x2f\x16\x72\x07\xa6\x7e\x5d\x02\x06\x53\xba\xaa\x61\xb5\x92\x61\x32\xff\x7b\xf5\x57\x4a\x52\x9a\xfa\x7e\xa5\xb0\x49\xc7\xd4\x8e\x8d\x63\x9c\x11\x26\xf6\x92\x43\x03\x12\x95\x51\x67\xe0\x70\x7a\x01\xd4\xa5\xbd\x14\x7e\x15\xb3\x73\x6a\x27\x7d\x1d\x9d\x0c\x69\xc8\x43\xa8\x3a\xe4\x5d\x6b\x0f\x33\xe4\x32\x10\xaa\x87\xa0\xc5\xd3\x27\x51\xf9\x89\x86\x6d\x0e\x9c\x4d\xe9\x10\x00\x17\x0e\xf6\x02\x88\xdb\xbc\x07\xfa\x75\xea\x4f\x43\x00\x8a\x11\x2e\xad\xbc\xce\x0c\xa6\xc2\x8d\x28\x7d\x16\x17\xc3\x6a\xb9\x48\xbd\x86\xab\x67\x00\x1d\x3d\x12\x21\x1d\x25\x17\x5b\x2f\xe3\xa7\x81\xac\xcc\xee\x36\x6b\x0d\x47\x98\x81\xec\x03\x1e\xff\x85\x23\xd8\x68\xcc\x12\x57\xd0\xe2\x74\x79\x0c\x2a\xd4\x78\xf8\x96\x30\x4f\xc8\xab\x28\x6e\x4e\xe2\xd8\xd4\x4c\x0b\x0f\xe5\x72\x49\x93\xb6\x15\x54\x1a\x99\xe9\xaa\x59\x2e\x23\x74\xa9\x08\xb0\x06\xa4\x13\x06\x2e\x3e\xd0\xb8\x5c\x7b\x91\x1e\x2f\xf9\x41\xb7\xdd\xc5\xb6\x1e\x8a\xed\xff\x92\xda\x5c\x74\x4c\xf9\x26\x72\x41\xdf\xfc\x81\xd8\x88\xe2\xe0\x1d\xf9\xdc\x87\x64\xa8\x5a\x64\x55\x6b\xf7\xb6\xd3\xb5\x94\xdf\x5d\x5b\xc8\x1f\x0e\xb2\x37\xfd\x67\x98\x4b\x17\x6b\x76\x85\xf7\x2a\x21\xaa\x54\xa3\xe6\xe8\x8f\x4e\x08\xd1\x51\xa1\x52\x32\xc7\xf6\x03\xd8\xdc\x58\x6c\xea\xc6\xa7\xc7\x84\xe0\x0e\xd6\x97\xeb\x38\xc2\xdf\xe7\x0b\x33\x00\x9c\x64\x90\xd8\x2f\xea\xbd\x4b\x89\x71\x38\xfb\x2a\x55\xb9\x2a\x94\x7e\x6b\xb1\xd5\x7f\x71\x14\xea\x72\x17\x85\xc2\x24\x73\x3e\xd8\xca\xc6\x94\xab\x8f\x98\x48\x9c\x86\xd8\x92\xb5\x19\x9f\x24\x1a\x14\x29\x4c\x94\x1c\xf9\x64\x03\x86\x8b\x4d\x41\xb8\xa0\x73\x2e\x86\x37\xa0\x06\xcf\xb5\xc3\xb6\x73\x80\xce\x4d\xde\x1c\xcf\x8a\xfe\xc9\x32\x09\x3a\x8c\x30\xa5\xe3\x7b\x91\x7a\xde\x3d\xe6\x64\xee\x7c\x87\xe9\xdb\xdd\x90\x2e\x37\x2e\xa4\x91\xae\x98\x79\x1c\x17\x1d\x0f\x61\x33\xed\x5b\x61\xd9\x11\x44\xb8\xb8\x80\xc8\x13\x17\xd6\x1c\x45\x38\x04\x51\x77\x65\xf8\xc7\x44\xad\xc1\x8f\x50\x5e\xb3\x03\x75\xc1\xa0\xba\x83\x2b\x37\x6e\xad\xd7\x76\x89\x01\xc1\x4e\xaa\x32\x97\x5a\x91\x3d\x77\xfd\xed\xb4\xc7\x46\x14\x7d\xa0\xea\x6c\xf4\xfa\x91\xe5\x85\xcc\x16\x35\x6d\xc1\x34\xdc\xa7\x7a\x5b\xae\x9f\xb6\x69\x0b\x33\xb1\xc6\x08\x9e\x3d\x32\xec\x53\x12\xfe\x0f\xee\x3a\x5d\xcb\x7c\xa2\x59\xc6\x79\xca\xd7\x9c\xbd\xbe\xef\xa3\x4f\xfb\x16\xe4\x01\xe4\xe7\x8a\x8e\xd4\xa6\x47\xa1\xbd\x5c\x2d\x33\xc3\x31\x9c\x7a\xc2\x62\xaf\xc9\x05\x02\xc4\xaa\x7c\x48\xe3\x15\x97\xc9\xd1\xdc\x9f\x02\x7e\x58\xd9\x77\x2a\xc6\xe7\x9b\xaf\xbf\xfd\xfd\xd9\xbe\xf5\xcd\x2b\xf8\xdf\xd7\xaf\x9a\x6d\x56\xff\x8c\x27\xae\x9b\x6c\x1e\xb2\x71\x15\x1f\xd8\xe4\x95\xb0\x20\x09\x9d\x52\x4e\xce\xa7\xe2\xc3\xf3\x66\x54\x9f\x6b\xb0\x07\xd6\xe4\x1b\x3c\x83\xe1\x98\x20\xe7\x65\x68\x9c\xfa\xf4\x00\x89\xcf\xce\x84\xa3\xf9\x30\x1b\xca\x90\xc1\xf4\x7c\xc9\x5c\xb3\x9e\x1e\x73\xf9\xc0\xe7\xf9\x6f\xcd\x6b\xcb\x98\xc0\x5d\xd1\xd7\xf7\x4a\xa2\x08\x27\xc9\xf1\x14\x64\x04\x5c\xca\x03\xdf\x89\xbf\x22\x31\x72\x74\x7a\x82\x92\x99\x64\x4b\xe5\x2a\xce\x42\x71\xdf\x22\xc5\x46\x7a\x9b\x5a\x31\x9e\x17\xf2\x05\x39\x86\x55\x75\x4f\x3d\x9a\x5d\xa9\x4f\x91\x17\x91\xa5\xe4\x8d\x50\xe8\x1b\xe4\x48\xfb\x48\x0a\xaf\xef\x72\xda\xbf\xfd\xbb\xbf\x47\xae\x2a\xe6\xb6\x99\xb3\xd7\xd2\xc6\x9c\x95\x33\x56\xdb\xa0\x1c\x0f\x58\x86\xb8\x34\x92\x00\xec\xf0\x2b\x9f\xf1\xbb\x9c\x88\xcf\x36\x0f\xad\xcd\xfb\xa3\xa5\xe2\x05\xa2\xe6\xc1\x25\x53\x5a\x4b\x89\x37\x72\xad\xb5\x99\x36\x00\x29\x3e\xb6\x3c\xba\x60\xe8\x15\x01\x2b\x7c\x09\xca\x5f\x4a\xde\xbe\x46\xbe\x2c\x18\xfb\xd0\x48\x4f\xf9\x47\x2d\x98\xcd\x17\xd6\xf3\x8b\x33\x93\x6b\xea\x79\x47\x88\xab\x09\x48\xf1\xde\xba\xb4\xe3\xf8\x7d\x10\x39\x2d\xa0\xd3\x3b\x61\xa7\xd6\x3a\x48\xb8\x74\x67\x6c\x54\xf1\x1e\x71\x75\x44\xe9\x32\x1e\xdf\x6c\x28\x81\x75\x78\x79\x92\xdf\x87\x63\x01\x02\xed\x26\xe6\xea\xb4\x70\x63\x76\xfd\x99\x1b\xe2\x1d\x53\xba\x5c\x40\x63\xf9\x05\xea\x89\x6c\x83\xb6\xfd\xac\x7f\xf3\x11\xc7\xa5\x7d\x4b\xb8\xd8\xfc\x0c\xe8\xe8\x46\x22\xa2\x6d\x9c\x69\x05\x27\x9d\x84\xdc\x8d\x7d\x23\xb7\xb0\xf6\x95\x51\x18\xef\x37\xe7\x4b\xa1\x8d\xc5\x24\x2c\xeb\x7b\xc0\x46\x8e\x70\x0e\xd7\xfa\x51\xc6\x46\xdc\x7e\x70\xfd\xc3\xdd\x43\x2f\x4f\x5b\xf9\x7c\xf2\x5b\x56\x94\xbd\x80\x53\xc6\xac\x04\xe3\x38\x97\xf8\x6e\x54\x4c\x36\x95\x35\x91\x31\xa0\xa8\x7f\x97\xf2\xa8\xc0\x8f\xcd\x6c\xbc\x24\x32\xec\x48\x91\x47\xe5\x93\x8a\x60\x0f\xac\x19\xc8\xde\x08\x44\x30\x95\xba\xaf\x41\xbc\xcf\x84\x09\xbf\x38\x4a\xce\xe8\xe3\xb1\x57\x7b\xa9\xf2\xe6\x4e\x38\x2a\x07\x8d\xa3\x51\x69\x98\x51\x3a\x7d\x76\xf6\xce\x56\x52\xe8\x4a\xe2\x14\x11\x64\xd4\x6f\xc8\xe7\x84\x77\x25\x0f\xee\xa8\xce\x3d\x7a\x11\x95\x67\xa5\x9a\x24\xc7\x8c\xad\xa1\xdb\xb0\x41\x95\xaf\x3e\x56\xde\x2a\x6f\xc4\xe6\x05\x84\xf9\x62\x8a\x00\x55\xc9\xda\x6c\x1f\x7e\x2c\x81\xa6\x2d\x87\xc5\x95\x5d\x4a\xf8\x80\x01\xbf\x2e\xdf\x3a\x12\x11\xc1\x55\xc3\x76\x63\xa3\x8b\x1e\x8d\x8b\xde\x46\xe0\x0a\xdc\x2e\x35\x2a\x46\x1c\xae\x0c\x6e\x24\x4b\x83\x82\x93\x4b\x07\x66\xe4\x53\xa1\xb1\xc4\x6a\x72\xab\x02\xac\x58\x43\x70\x09\x47\xf2\x7b\x41\x09\x01\x9c\x36\x69\xde\xd6\x58\x07\xa7\x7a\x2f\xec\x1e\x66\xf6\x4e\x38\x6c\x90\x2d\x25\x30\x3a\x4e\x85\x42\xd1\x8a\xae\x6a\x1f\x66\xa4\x71\xd4\x7d\x1c\x8a\x39\x75\xa1\x70\xef\x2d\x36\xb7\x08\x5d\x3b\x96\x55\xf2\x30\xb7\x08\xc0\xd9\x3c\x20\x20\xe0\xd4\x81\xa5\x7e\x23\x6a\x94\xd1\x2c\x80\x81\x6c\x1e\xf0\x3e\xc7\x29\xb4\x30\x58\xde\xe4\xb6\x05\x64\xa2\x04\xa1\xec\xa1\xf4\x9a\xcd\x27\xae\x70\xf6\xd1\x78\x48\xfb\x54\x66\x17\xd8\x3a\x91\x4b\xfd\xba\xf6\x17\x36\x06\x61\x5d\x72\xca\x01\x1d\x3b\x55\x07\x33\xa8\xe1\x15\x5c\xc5\x93\x98\x73\x81\x01\x5a\xe5\xd6\x63\x3e\xd2\xac\x6c\x42\xcd\x40\x5f\x72\x52\x99\x9c\x88\xa1\xa3\xea\x82\xaa\x4b\xfc\x58\x34\x7f\x16\x4a\x9b\x97\x51\x87\x4e\xd7\x44\x73\x8f\x35\x63\xbe\x25\x7a\x9e\x1b\x17\x38\xd6\x41\xe7\x45\xe6\x80\xd4\x29\x44\xa5\xb3\xd2\x50\x7c\xd2\x4d\xa0\x5c\x9b\x89\x0c\x28\xb7\x82\x6e\xe5\xcd\x47\xbb\x6e\x77\x13\xba\xaa\x9e\x02\x3d\xe9\x69\xed\xa6\x43\x47\x5f\x0f\xc9\xb6\xa6\x7a\xf8\xca\x89\x50\x7b\x2d\x84\xba\x07\xfb\xa1\xa7\xab\x22\x04\x4b\xaa\x68\x15\xef\xe8\x24\x16\x0b\xa3\x68\x17\x41\x19\x3e\x88\x5f\x6b\xeb\xc2\xe0\x7b\xc8\xf8\xc3\xab\x1d\x50\x8e\x96\x66\x86\x82\xec\x1e\x95\x0b\xb9\xff\x5d\x2f\x61\x46\xfe\x76\xe3\xaf\xa8\x9e\x6b\x7a\x2c\xa4\x23\x9d\xee\xe5\x53\x7d\x47\x47\xa5\x9e\xce\xd5\x47\xd5\x6a\x24\xbb\xeb\xb4\x1c\xa2\x58\x49\xb7\x56\x1b\xee\xa5\x4b\x5f\xb4\x59\xac\x9a\x9b\x1a\xe0\x6b\x5f\x56\x8d\xed\xb4\x30\x49\x07\x35\xc3\xd3\x52\xab\xbb\x09\x5d\x95\x42\x24\x3d\xc9\x69\xeb\xa5\x45\x05\x79\x93\xe7\x1e\x06\x26\x5c\x92\xbb\xbf\xb9\x3a\x23\xfb\x16\xa0\x2f\xb5\x4d\x2f\x93\xca\x63\xdc\x8c\x64\x72\x89\x50\xb9\x73\x4c\xe8\x7d\xdd\x48\x68\xd1\xef\x01\x63\xd1\xa4\x4d\xc3\x4c\x8e\xc1\x5d\x87\xdd\xa7\x5c\x3f\xb7\xc6\x1c\xbd\x24\xe3\x65\x59\x3a\x40\x3b\x6c\xd4\xca\x60\xf2\x8f\x9a\x27\x5b\xb6\xd0\x6d\x80\x24\x14\xee\xd0\x35\x5c\xf6\x11\x91\x99\x12\x9d\x88\xe7\xfc\xcc\x8f\x4f\x43\x09\x55\xce\x0e\xd6\xfc\x62\xd4\xb2\x44\x7b\xf5\xea\x4f\x45\x96\x1e\x2a\x7b\xb4\x68\x33\xd4\x73\x7a\xa8\x9a\xa6\xbd\x11\x5e\xfc\x53\x23\xfc\xe2\x4f\xfd\xe1\x71\x1d\xe4\x66\xa0\xd5\xdf\xfb\x43\xbe\x7a\x65\x1d\x1e\x9f\x9d\x34\x17\xf0\xaf\x69\xa1\x07\xfd\xe6\xf8\x64\x76\x71\xd5\x0e\x1f\xdb\x4c\x6f\xae\x0c\x51\x9c\x1d\x9e\x1f\xbe\x9a\xb6\xa3\x78\xb5\xf9\xd3\xd5\xe1\xf9\xcc\x0c\x43\x0b\xe7\x4b\x3f\xf6\x87\xd9\xe2\x4d\x7f\x61\x14\x72\x41\x37\x50\x8a\xe6\xe1\xcc\x30\x71\xd1\x79\xbf\xd6\x55\x66\x1b\xad\x26\x00\x2d\xda\x4a\xa6\x71\x65\xc6\xe6\xb2\xf9\xad\x24\x95\xfa\x51\x7b\x72\xa8\xf9\x79\xf3\xe7\x31\x08\x29\x67\x9b\x41\xab\x90\x74\x98\xca\xcd\xeb\xfd\xa9\xd3\x02\x36\x16\xcd\x2d\xb9\x93\xab\x1d\xfd\x3d\xc9\xbf\xd0\x36\x32\x12\x02\xa4\x96\x52\xed\xa5\x1f\x75\x60\x76\x87\x55\x71\xa3\xd8\x78\xf9\xb1\xe7\xa5\xc8\x72\x28\x39\xec\x46\xa1\x9c\x79\x33\x3f\xb8\x46\x02\xae\xd0\x17\xc0\x46\xbf\x05\x54\x3e\xf0\x40\xb7\xd3\xac\xfb\x7c\x25\xd6\xee\xa8\x74\xc9\x7c\x48\xbd\xc9\x33\x07\xa4\x4f\xab\xf2\x4e\x85\xc3\xb4\xe2\xa0\x4a\xee\x85\x2c\x2e\xa4\x42\x44\xea\x90\xbd\xc0\x40\x9c\x8a\xb7\x6b\xe8\x89\x36\xaf\xb4\x1d\x63\xeb\x3d\xea\x4b\xdb\x75\x4a\x3e\x12\xcd\x24\x5f\x56\x9c\x1e\x42\xfb\x7e\xf3\x9b\x11\xca\x38\xe6\x24\x0a\x40\x33\x17\xc4\xa1\x88\x7c\x74\xcd\x25\xff\x54\xb8\xff\x15\x8c\x6f\xd9\xc0\x95\xfe\xca\xba\x7c\x9b\x16\x38\x2a\xf8\x51\xc7\x55\xb8\x26\xed\x62\x5c\x3a\xe0\xb5\xc6\xd5\xea\x9e\x71\x36\xcc\x2d\x43\xc1\xb7\x60\x4b\x64\x0f\x3f\xf9\x19\xb0\xb6\x93\xf9\xaa\xf9\x92\xb2\x79\x28\x76\x12\x25\x1f\x11\xcc\xba\x4c\x79\x4f\x31\xac\xd2\xc1\xef\x8c\xc8\x93\x69\xe9\xc2\x30\x97\x2f\x14\xb5\x8e\xa9\xea\x3e\xba\x21\xbb\x21\xcb\xfd\x8b\xaa\x05\xbd\xdd\xe5\xfb\xb9\x87\x78\x3b\x22\x01\x8b\x0c\xa0\x90\x54\xcc\x34\x29\xa2\x84\x5c\xb5\xb6\xea\xa8\x07\xa9\x74\x37\x52\x31\x16\x48\x82\x93\x4a\xcc\x29\x7e\x6c\xeb\xaf\xff\x6c\xae\x18\x50\x1a\xbc\x1a\x77\xd7\x90\x9c\x3d\x50\x0d\x36\xbf\xc1\x72\x2d\x93\x05\xa3\x28\x0f\x61\xc0\xcc\x74\x3a\x8c\x2b\x5a\x52\x40\x18\x97\x72\x66\x9b\x60\x15\x11\x26\x1e\xc6\xdd\xe6\xa2\xdc\xc5\xd3\x91\x63\xaf\x1c\xc1\xef\xf8\x02\xd3\x8e\xb3\x7b\xb9\x7c\xc8\x90\xfe\xe8\x9e\xd2\x07\x91\x83\xb0\xb6\x5b\xae\xb2\x3b\x41\xd2\x7f\x8c\x24\xea\xcb\xca\x9e\xaa\x08\xdb\xe4\x55\xd2\x71\x6e\x98\x02\xd3\xa3\x39\x87\x57\xf0\x87\xc9\xd3\xc2\x77\x98\x67\x11\xc2\x5e\x1d\x88\x3d\x99\xbf\x5d\x25\x93\x93\x86\xdb\x51\xa9\x5c\xd9\xc8\xa0\x1a\x57\x46\x5c\xe1\xec\xe7\xd8\x79\x34\xd7\x02\xb6\x61\xef\xa1\xbd\x74\x5e\xb1\x3e\x83\x14\x41\xb8\x46\x79\xd7\x10\xfc\xf3\x5a\x74\xcd\x1a\xe6\xe6\x61\xe9\xae\x45\x57\x2f\x0d\x12\x28\xa0\x63\xbe\x0a\x82\x38\x8f\xe7\xf0\xbc\xe0\x3d\x2e\x7c\xf4\x93\xc2\xcf\x07\xd6\x8b\x00\xa4\x04\x7b\x2d\xd8\x94\x73\x0a\x94\x46\xdc\x41\x09\xfa\x1d\x03\x6f\x6f\xe5\x61\x91\x05\x8f\xc4\x18\x0c\x22\xe3\x95\x9a\x77\xe8\xd1\x2a\xc0\xa8\xb9\x18\x9d\x7c\x24\xd6\xb4\x80\xf5\x94\xbc\x46\xd3\x0f\x56\x10\xb2\x1f\x03\xba\xa2\xe2\xbf\x98\xfd\x9f\xf0\x17\x0a\x41\xac\x37\x7f\xc9\x51\x1a\xa5\xf1\x97\xcc\x70\x02\x7f\xaf\x59\x0c\x5e\xef\xb9\x1e\x5b\xbc\x40\xd1\xdb\xfc\xaf\x84\x16\xb5\xd9\x99\xc8\xe8\xd8\x20\x67\xd9\x4b\xbb\x25\xf6\xb3\x8a\x75\x3f\xb7\xb7\xe1\x12\xf4\xd9\xe7\xd2\x9c\x08\x15\xd1\x43\x53\x47\x2f\x02\xef\x61\x2d\xe4\xc9\x21\x8a\xa9\x27\xb2\x8c\xb2\x9a\x96\x83\x5d\xa2\xd2\x18\x2f\x5d\x75\x5a\x9d\x70\x65\x9b\xb2\x97\x6b\xef\x83\x3e\xef\x9c\x27\x36\xaf\xbd\x92\xf7\xc1\xdf\x1b\xc4\x18\xe4\x15\x1c\x07\xc9\x65\xd2\x88\xc0\x66\x20\xba\x73\x84\x11\xa3\x84\xc3\xb1\xde\x3c\x29\x45\x90\xbe\x79\x52\x31\x0d\x65\x91\x69\xf8\x22\x26\x9d\xd3\xa9\x6b\x9b\xe3\xea\x2e\x90\xe8\x8f\x91\xaa\x43\x01\x76\x79\x72\xdd\xba\xbe\x8d\xc1\x21\x59\xac\x25\x1e\xf2\xf7\x68\x65\xbf\xb8\x7e\xde\x1c\xa1\x38\x14\x9c\x2e\xdd\xd5\x59\x2f\xc5\x42\xa6\xbe\xab\xa2\xf3\x3b\xf9\x5f\xbb\x86\x9a\xa0\x19\x2f\xf7\x2a\x82\x3b\xf8\xe2\x35\xdc\x13\x5c\x2a\x15\x5c\x42\xd7\x9f\xf4\x56\xaa\xeb\xc0\xf4\x26\x3a\x42\x8f\x56\x74\x4d\x57\xc5\xc3\x1c\xd7\x5e\xfa\x41\x9c\xb8\x73\xd2\x64\xe2\xc4\x69\x8b\xdd\xc7\x9e\xce\x1e\xa8\xbc\x11\x9a\x13\xf9\x46\x97\x43\xa0\xa4\x38\x55\x08\xfd\xe7\x9f\x68\xc3\x34\x90\x9c\xc0\x05\xaf\x68\x78\x85\xe1\x8c\x57\x95\xbb\x5d\xe5\x2a\x67\x2b\x8f\xc7\x79\x47\xed\x29\x4c\xf7\xb4\x16\x1c\x63\x96\xa5\xc9\xca\x12\x44\xa9\xf4\x58\x95\x9b\x90\x27\xf2\xdb\x5b\xb1\xb2\x8f\xf2\x8e\x04\x4e\x1a\x8f\x17\x47\x72\xc7\xeb\xa5\x99\xeb\x0b\xc4\x48\x21\x42\x5b\x4d\x35\xd0\x05\xb0\x4b\xd7\xb9\xbf\xbc\x13\xbc\xf7\xbd\xc0\xc6\xe7\x52\xb9\x97\xf1\xa4\x14\xeb\xc2\x85\xb8\x4d\x2c\x0c\x04\xa7\x43\x37\xe5\xa6\xac\x4b\x83\x99\x47\x15\xe7\x09\x70\x67\xf8\x68\xb7\x10\x76\x82\x25\xee\xc8\xfc\x0d\x7a\x90\xbf\xc4\xe9\x4a\xb9\xc8\xab\x93\x65\xbc\x27\xe2\xa1\x55\xc2\x5e\xf6\x28\xce\x50\x57\x6a\xc9\x11\x42\xa9\xee\xf1\x5d\xb5\x8e\x1a\x79\xed\xc8\x52\x57\xe5\x95\x9f\xac\x23\x01\xfa\x2c\x90\xeb\x53\xdc\x80\x6f\x7b\x14\x02\xe9\xef\xe1\x16\xc4\x72\x52\x16\xa6\x21\xa3\x60\x34\x8e\x77\x3d\xb0\xb6\xb4\x41\xe1\x7b\x02\x5d\x77\xd0\xde\x18\xc7\xf6\x7d\x49\x3f\x33\x3a\x28\x58\x5d\x6a\x8e\xb5\x7a\x49\x0f\xde\xa0\x42\x1b\x25\xe7\xb8\x4c\xa3\x65\xb1\xb4\x72\xf5\x2e\xd9\x96\x49\x03\xfb\xa2\x33\x48\x9d\x5f\xd2\x90\xda\xcb\x97\x69\xbc\xc2\xc2\x25\xe2\x3d\x59\x7e\xd0\xfb\x0a\xab\x58\x28\x07\x69\x8a\x3f\xe3\x33\x59\x26\x30\x6a\xde\x93\x61\x98\xde\xc3\xdd\x02\x05\x09\xcd\x81\xe7\x95\xad\xc3\x24\x37\xe2\x8a\xb7\x34\x4c\x98\x2a\x7d\x41\x4f\xdf\x64\x29\x2a\xf7\x23\xec\xb6\x6f\x54\x07\x4e\x0e\x0f\x93\x85\x30\x35\xd6\x53\xd4\x80\x71\x9c\xf8\x2f\xcb\x56\xb5\x2a\xbf\x7a\xde\x52\xfb\xaa\x38\x3c\x98\xff\xca\xd8\x9e\xda\x77\x62\x8e\x23\x8c\xa5\xc0\xcc\x56\x7a\x19\x68\x6f\xc2\xb9\x50\xc0\x31\x7a\x43\xb8\xca\x11\x9e\xbe\xd3\x7b\xae\x83\xed\x29\x7d\x1d\x94\xb9\xb1\x5c\xe1\x78\xa4\x47\x3c\xa6\x16\x17\x0b\x39\x0f\xa9\x28\x1f\x58\x55\x70\x3c\xab\x1c\x0e\xe8\x2a\x8c\xc5\xef\x64\xf2\x43\xf2\x25\xe0\xcb\x26\xbe\x29\xa4\x5e\xc2\xe7\x1a\x41\x20\x43\x70\xb0\xc8\x5e\x4d\x88\xea\xb6\xa0\xf2\x47\xc6\x3f\x2e\x67\xf8\x6a\xf6\x39\x79\x33\x2e\x05\x9a\xdc\xa9\x2c\xc6\x9e\x37\xb7\xda\xbe\xfe\xde\xe6\x41\x3e\xa8\xc2\x19\x62\x40\xd1\xd5\xf4\x9f\x6f\xa6\xd7\xb3\xe6\x47\xd5\xe3\x29\x96\x04\x9d\x9a\x3c\xac\x5e\x4d\xaf\x2f\x2f\xce\xaf\x5b\xc2\x5c\xaf\x36\x7f\xaa\xb6\xe8\x0f\xfd\xe2\x74\x7a\xdd\x26\xc1\xae\x36\xff\x56\x6d\xa1\x01\xfc\x66\x36\x6d\x76\xb9\xa8\xfe\xdc\x1f\xae\xb0\x51\x83\x77\x04\x3e\x07\xc2\x0e\x0d\xe1\xdc\xc1\x6c\xc8\xe4\x79\xff\x0f\xac\x51\xac\xc3\xb6\x4a\x07\xaf\x23\xdb\xa5\xf5\x88\xca\x0c\xab\xb2\x4e\x9e\xe4\x13\x21\x0a\x0f\x2e\x08\xf5\xb0\x0c\xe9\x94\x86\xe0\xb3\x00\xfe\x9e\xdd\x87\x82\xab\xcc\xd0\x9f\x4a\x3c\x83\xf6\x84\xba\xc9\x7d\x42\x85\x3c\x61\xdb\x04\x73\x97\x76\x1a\x1d\x3f\x6e\xf2\x0f\xcd\x03\x0a\xe0\x70\xf9\x38\x21\x45\xe7\x4e\x0d\x4e\x2c\x16\xf4\xd6\x3d\x27\xad\xa9\x1d\x37\xa8\x43\x09\x1d\x6c\x84\x14\xe3\x90\xe0\x6c\xfa\x87\xdd\x0f\x7a\x77\x43\x1a\x40\xbc\x34\x44\xd7\x78\x71\x97\x32\xa7\x73\xf8\xbd\x8a\xfe\xbc\xf0\x9c\x6d\xab\x34\xc8\x4d\x0c\x8d\x14\xef\xb7\x7e\xfa\x07\x2c\xda\xf8\xbb\xe6\x3b\x56\xb6\x44\xd9\x7a\xdd\x49\x0b\x97\xde\x45\xdb\x73\x23\x31\xa0\x26\xf5\x25\x46\x97\x63\x21\x68\x9a\x62\xcb\x4f\x7d\xfb\xe1\x83\x38\x76\xe4\x05\xa9\x63\xbd\xc4\x4b\x47\x74\xdf\xb2\x00\x14\x07\x08\x78\xb4\xe5\xce\xbe\x0d\x1d\x7e\x6b\x82\xad\x31\xa0\xb9\x70\xef\xc8\x4e\x9e\x97\x92\x83\x25\x97\xb0\xfe\x29\x13\x85\xb5\x78\x98\x6c\xfe\x67\x5a\x68\x4f\xdd\xb3\xd2\x76\xf0\xff\x66\x24\xa5\x70\x5f\x05\xe5\xf8\x5e\xdd\xb5\xf2\x0c\xaa\x28\x34\xe0\x1e\xed\x39\xb2\x64\x58\x5c\xc3\x63\x2a\x8e\x72\x8b\x57\x35\xa5\xbf\xae\x6d\x4a\x0d\x27\xcd\x17\xac\xb2\x57\x42\x57\x1a\x87\x38\x95\x7b\x10\xaf\xfc\xf6\xe6\x7f\x06\x74\xd1\x97\x14\x52\x0a\x68\x09\x46\x24\x9c\xf5\x17\xc8\x4a\xb0\xf2\xef\xc2\x46\x33\x03\x91\xe1\x90\x11\x9f\x2b\xaa\x97\x29\x25\x55\x78\x61\xf3\x9b\x6e\xac\x0a\xa9\xc7\xf2\x31\x58\xc5\xc9\x0c\xcb\x6b\x79\xa5\x78\x18\xe6\x26\x46\x4e\x84\xd7\xe6\x38\xd4\xd9\x45\x1f\xbf\x4c\x38\x8c\x55\x12\x65\x9d\x66\x74\x67\x6e\x21\x22\x71\x23\xb2\xba\xa8\xa8\x00\xda\xf4\x58\x3c\x91\x0c\x2a\xc3\xb2\x40\x66\x54\xa5\x91\x4c\x65\x2f\x89\xf2\x5b\x6f\x70\xd7\x78\x82\x2a\x33\x16\x52\x01\x97\x06\x1f\x4b\x3d\x64\xcf\xf2\x37\x57\xa7\xf4\x8b\x18\xf8\x32\xa0\x08\xa4\x32\x10\x85\x78\x74\x7e\x76\x80\xe5\xdc\x39\x7b\x3d\x7a\x6a\x53\xe3\x97\xbc\xce\xdb\xd9\x94\xd9\xcc\x32\x6f\x95\xcc\xe7\x5c\x34\x16\x7a\xed\x4b\x06\xde\x54\x4c\x96\x12\xf6\x1b\x7d\x1d\x55\x83\x24\x50\x56\xbf\xb6\xa3\xe2\x29\x50\x0d\xf9\xc6\x9b\x42\x35\xfb\x81\xf5\x4c\xee\x11\x14\xf5\xf8\x41\x69\x4a\x31\x7e\x73\xc4\xae\x00\x37\x30\xd0\x76\x3b\x08\x8c\x36\xc2\x3c\x48\xdb\x6c\x97\xae\xfe\x25\xea\xb6\x7c\x51\x4a\x54\xca\x72\x04\x35\x94\x8a\x5a\x52\x05\xba\xb7\xf9\x78\xdd\x11\xed\x34\xeb\x33\x38\x2a\x95\x57\x65\xae\x52\xde\x58\x2c\xda\x43\x4b\x9b\xd1\x14\x38\xcb\x5f\x03\xd5\x65\xde\xf2\xd7\x44\xb6\x39\x77\x79\x05\xe5\xf4\x10\x1f\x8b\x41\x14\x55\xb2\xca\xac\x2c\x93\x26\x1a\x68\xfb\x72\xd9\xf9\xf9\xb9\xb6\x53\xde\xa4\xac\x0f\x53\x01\xdc\xb1\x36\x30\x92\xe6\x77\x5a\x31\x15\xa7\x8a\x07\x4b\x46\x49\xfb\x66\x15\x7e\xbf\x4d\x8a\x4e\x09\xa2\x85\xa2\xa1\x0c\x6b\x1b\x5e\x7e\x32\x78\x76\x5b\x37\x0d\x1a\xe8\xcd\xce\xae\x4b\x77\xbd\xc5\x5a\x1f\x47\x4e\xe7\x40\x7b\x72\xec\x9e\x28\x7b\xaa\x90\x45\xbc\x63\xe9\x74\x15\x0a\x3a\x2b\x0b\x14\x68\x10\x23\x55\x13\xc8\x89\x68\x0d\xec\x2c\x8e\xde\x38\x4c\x53\xe1\x6a\xd7\xce\x4a\x83\x1c\xaa\x7e\x29\x84\x6d\x25\x24\x4a\x08\xcd\x8a\x8e\x10\x22\xf9\x70\x50\xde\xce\xd9\x6d\x7a\xd7\x02\x47\x8e\xa1\x51\xae\x64\xf2\x22\xa7\x45\x57\x2f\x18\x51\xe4\x48\x76\xe5\x89\x63\xd9\x00\xf0\x42\xfd\x5d\xe5\x5e\xe5\x87\x5e\xac\xe8\x02\xae\x6a\xe0\x75\x80\xd7\x1f\xd5\x16\x43\xab\x8b\xc0\x68\x66\xb7\xa0\x16\xe8\xdf\xd9\x04\x95\x85\xa3\x64\x64\xcf\x51\x75\x0f\xa9\x46\x8e\xd2\xf3\x6a\x86\x63\xaf\xdf\x20\xc7\x18\xe1\x96\x65\xa6\x6a\x07\x7b\x04\x95\x5f\xb2\xa5\x91\xa4\x02\x33\x2a\x56\xa4\x11\x35\x7c\xc3\xfa\x05\x39\x43\x15\x42\x34\xe8\x15\x70\xe6\xfc\x2c\x7c\x59\xc7\x4d\x7d\xb6\x3d\x12\x62\x0d\x5e\x84\x41\xbb\x3b\x60\x4d\x0b\x7d\xe8\xd6\xc4\xa2\x6a\x2b\xaa\xd0\x22\xa9\xb8\x3f\x63\x32\x42\x7a\xd5\xea\x65\x23\x32\x07\xa5\x45\x2f\x77\x6e\xf1\x2a\xa9\x6f\xa4\x81\x03\x23\x6c\x7a\xe8\x16\xec\x64\x31\x8e\x72\xa1\x82\x7a\x1e\xd5\x2c\x50\xc8\x8a\xfe\x45\x5f\xf8\x39\x78\xae\x73\x3e\x64\x82\xfa\xf1\x66\x24\x22\x07\x8e\x62\x4a\x9d\xbc\x1c\xb8\x2c\xa2\x51\xcf\x34\x8d\xe3\x6b\x37\x68\x34\xc6\x99\x44\xae\x60\x13\x9a\xeb\x3b\xee\x9d\xeb\xa4\xb6\x97\xb9\x3e\xa1\x4b\x3d\x3f\xbf\x01\x41\x49\xda\xec\x34\x61\x0c\xc7\x84\x52\x87\x4a\x70\x78\x98\x53\x61\x25\xac\x8b\xc3\xac\xc8\x54\x16\x72\x92\x55\x1f\x65\xd3\x6c\x1f\xb2\x07\x00\x1d\x3e\x86\xa5\x7b\x27\x68\x79\xef\xc5\xd6\x32\x75\x9d\x03\xcb\x3a\xc4\xc4\xac\xe4\xc3\xbb\x12\xb6\x07\xc4\x50\x76\x42\xe2\x1e\xfa\x37\x86\x69\x1e\x60\x43\x25\x1f\x62\x7e\xcd\x15\x18\xe5\xd0\x6e\x4d\x78\x64\x0a\xc6\xe2\x0e\x88\xa0\x3a\xda\x2a\x94\xa0\xa0\x1a\x87\x17\xc3\xf1\x8d\x35\x72\xa9\xc4\xf5\xa0\x26\xbb\xfe\x8f\xc2\x81\xf1\xf0\x8e\xcc\x89\xc9\x3b\x71\xbf\x03\x6e\xe0\x3b\x1e\xd6\xe9\x66\xff\xc8\x75\xe0\x27\x11\x57\x4e\x43\x44\xfc\x38\x40\xe9\xd1\x0a\xb0\x01\xfd\x8c\x1c\x07\x30\x2d\x3c\x48\x3e\x0c\xe8\x63\x49\xcd\x89\x59\xed\xad\x84\x6a\xb6\xcc\x74\x0a\x14\x91\xdd\x6b\x17\x5c\xc2\x7a\xb6\x19\x7f\x9a\xd9\xa3\xca\xee\x8e\xb1\x54\xc6\x40\xa9\x3f\xfe\xcc\xc5\xbb\x70\xce\xc4\xc5\x83\x06\x7f\x14\xf6\x9c\x83\xc3\x26\x1c\x62\xc0\x6d\xbb\x47\x3a\x0a\x70\xfd\x31\xd5\x45\x18\x0f\x08\x95\x1f\x0d\xee\x38\x23\x19\x10\x1c\x3f\x1a\x5c\xdd\x91\xd0\x8d\x30\x9b\x71\x7c\x47\xc5\x09\xc7\x74\x56\x72\xba\x63\x6d\x8b\xfe\x08\x50\x87\x8d\x02\xe0\xbe\x64\x34\x2f\x01\xab\xc1\x9b\xc4\x40\x88\x26\xd4\x9b\xad\x60\xd3\x91\xed\x02\xdb\x58\xa3\xee\x5e\xed\x63\x8e\x7a\x28\x36\xbd\x51\xcb\x0d\x1e\xa5\x5e\xa1\x92\x39\x1f\xb9\xe5\xa4\xb8\x55\x0f\xc1\x2c\x62\xb3\x7d\x9c\x63\xc2\xef\x3f\x32\xf5\xb2\xf5\x5d\x10\x27\xd2\x32\x0c\x7f\x1d\x53\x2a\xf9\xa2\x13\x6f\xbb\x03\xaf\x29\x98\xf1\xe9\xec\x76\x36\x1e\x02\x4a\x9f\x5e\x7e\x0f\xed\xe9\xe2\x5f\xe9\x35\xd4\x95\x9f\xc0\x75\x60\x33\xba\xf2\xe2\x12\x6d\x51\x57\x7f\x5b\x7a\x64\xbd\x31\x83\xcd\x92\x6c\x5a\xd8\xd3\x2a\x19\xa4\xf5\x8a\x36\x40\x8b\xcf\xb5\x56\xe7\xde\x34\x5d\x4f\x8f\x6e\xae\x4e\x66\xdf\x5b\xaf\xae\x2e\x6e\x2e\x9b\x9f\x8c\x1b\x9a\x69\xe0\xb9\x7a\x7d\x72\x34\xed\xc8\x18\x48\xbf\x5a\xc7\x53\x4b\x36\x37\x47\xd4\xec\x04\xbe\xdd\xa0\x3f\xec\xcb\xc3\xce\x21\xd4\xb6\xd1\xc5\xd0\x91\xf8\x70\x5a\x68\x66\x96\xfb\x90\x01\x1c\x4f\x5f\x4f\x4f\x2f\x2e\x5b\xf2\x1f\x4a\x4c\xc7\x9b\x3f\x51\xcb\xcb\x21\xd8\xba\x72\x2d\x72\x2b\xf3\x6c\x8b\xd4\xbf\x79\xde\xa7\xd5\xdf\xfb\x03\x9e\xdb\xde\x23\x1b\x8a\xcf\x30\xa8\x10\x4b\xdf\xee\xc1\x05\x79\x45\x31\x6a\x5f\xba\x93\xd8\xb5\x3a\xca\xbb\x24\x59\x73\x43\x7d\x5c\xac\x09\xc1\x00\x94\x22\xf1\x96\xbe\xe9\x7f\x62\x0e\x80\x34\x26\xb5\xf0\x1d\x55\x39\x7f\xbb\xee\x2c\xf2\x37\x10\x9a\x06\xd5\x54\x6a\x4b\xf9\x0c\x3f\x05\xad\x8d\xcc\x07\x16\x56\x5f\xa4\x2c\x5d\xf1\x3b\x37\xfc\xaa\x65\x9e\x37\x0f\x08\x01\xc3\x66\x29\x20\x51\xad\xc4\xa7\x41\x8a\x5b\x89\xc2\x14\x31\xf0\x7c\xea\x27\xd1\xe6\x41\xd6\x10\x8d\x6d\x38\xb8\xa3\xaf\xcc\x16\x05\x13\xcc\x9b\x72\x18\xbd\x99\x9f\xea\xee\x88\xa5\x1a\x98\x34\x4d\xfb\xea\x46\x87\x65\xc1\x9f\x5b\xbf\xff\xfa\x77\xcf\xad\x43\x2e\x17\xe6\xa2\x43\xba\xef\x62\xe8\x33\xd5\x2a\x73\x02\x5a\x89\x94\x68\x3a\x04\xbd\xda\xf5\x84\x8c\x7f\x15\x1f\x60\x15\x50\xfc\x8b\x1b\x77\x67\xd9\x79\x6c\xf4\x63\xf0\x05\x56\xf5\x34\x8a\xae\xe9\xab\x23\xf8\xe6\xd3\xa7\x7d\x6e\x57\xfa\xfd\x30\x74\xa7\xf8\xa5\x6a\xb1\x2e\x54\xd0\x84\x1f\x4a\x21\x2c\xcd\x67\x05\x48\x43\xac\x29\x96\x72\xad\xd2\x34\xda\xe7\x92\xed\x0e\x88\x63\xc0\x5f\x4f\x0b\xb5\x10\xd4\x73\x18\x31\x5a\xcc\x42\xfb\x26\x3d\x9c\xcc\xe8\xe1\x04\x00\x9f\xda\xb7\xc2\x63\x29\xa0\x22\xc5\x35\x72\xbf\x8e\x02\x53\x7b\x04\x2f\x32\x07\x95\xda\x5b\x4a\x37\xb9\x5b\x00\x86\xa6\xac\x55\x80\xd5\xbb\xa0\xca\xc8\x4b\xfe\xb9\x2a\x5f\x7d\x23\x59\x27\x35\x15\x3a\x64\xd2\x00\x3b\x6e\x2c\x76\x3f\x80\xcc\xce\x22\x24\xbd\x39\x5a\x47\x7a\x23\xd0\xb1\xb8\xac\xc8\x7f\xbe\xe5\x35\xa3\x43\x67\x5b\x6f\x6d\x92\x9a\x0a\xc0\xd4\x64\xdc\xeb\x5d\x09\xa6\x35\x41\x85\x7c\xb5\xf8\x7f\xff\xdc\x56\x07\xa6\xc8\x70\x55\x88\x4e\xa7\x1c\xcc\x90\x49\xca\x82\xec\xca\x2c\x78\xe3\xcf\x4e\x2e\x9f\x5b\x27\x0b\xcc\x22\x44\xb9\xe0\x92\xe8\x9e\xec\x5a\x81\x8c\xd2\xb3\xad\xbb\x6f\xb6\x42\xf5\xf6\xa9\x39\x15\xdf\xc4\xc2\x90\x68\xe9\x99\x84\x64\x8f\x6d\x49\x4c\x5d\x0d\xc8\x2b\xb2\x43\xd2\x71\xed\x72\xf6\x0d\xce\xb5\xf1\x91\x92\x96\xa6\xd2\x69\x44\x46\xf4\xa9\xde\x77\xdf\xec\x73\x5b\x47\xdc\x61\x4b\x4e\x41\x80\x2c\x95\x21\xe5\x93\x70\x14\x7e\x21\xab\xda\x53\x24\xf6\xe9\xa2\x8d\x7f\xcb\x01\x4d\x57\xa8\x3a\x35\x30\x46\xda\xf1\xc5\xad\xda\xef\x4c\xee\xdf\x51\x97\x96\x66\x7b\xcf\x76\x03\x6d\xd8\x6d\xf7\xa0\xad\x16\x1a\xd0\x93\x6a\x20\x18\xdb\x55\xdb\x1d\x76\x8e\xd5\x0a\xaf\x0f\x09\x2b\xd6\xb7\x1c\xee\xcf\x83\x34\x02\x49\x77\xae\x78\x9f\x27\xea\x73\x31\xd8\xaf\x85\x25\xdd\x5d\xcc\xf0\xaf\xf2\x22\x49\xa5\x2a\x8e\xdd\xac\x42\x99\xc6\x79\x9c\x22\x79\xc1\x46\x45\x58\x64\x05\x8f\x64\x01\x24\x33\x02\x65\xba\x9a\x62\x84\x20\xb9\x3b\x4e\xe5\x9f\x1d\x6f\x08\x9b\x87\xa5\x47\x7e\x73\x45\x08\xbc\x6b\x73\x08\x86\x1e\xa1\x8a\xba\xd2\x1a\x43\xf7\xde\x2c\x6e\x8d\x8a\xc7\xc8\x6f\x5e\xdb\x5e\x2a\x38\xb3\xd3\x76\x6d\xd5\x5d\x7a\xd4\x29\x16\x34\xae\xe6\x0a\xc9\x9b\x3f\x6f\x91\xdc\x51\xcf\xf5\x8b\xb0\xad\xf0\x5c\xd4\x66\xc5\x49\x82\x26\x5f\xd8\x9e\x2f\x51\x8a\x85\xb5\xd0\x69\xa5\x97\x60\x8f\xe6\xa6\xae\x46\x35\xd2\x0b\xe9\x50\x70\xda\x74\x3f\xc2\xdb\xe8\x2e\x51\x8d\x32\xde\x91\x5f\x45\x77\x89\xaa\xff\x78\x57\x54\xbc\x9e\x2c\x1c\x98\x7f\x81\x8b\x4f\xf3\x83\x64\x47\x30\x92\x4e\x57\x2d\x7a\x58\xed\x26\x60\xd5\x07\x3d\x99\x29\x6c\x80\x04\x18\x1f\x81\xc6\xd8\x82\xf7\x79\xe6\xb3\xf2\x73\x70\x0b\xbd\x7d\x3a\x69\xd2\xe0\x79\x95\x6a\x6e\x3d\xf4\xa9\xd7\x81\x1b\x51\x16\x1b\x11\x53\xd2\xb8\xe6\x1a\x74\x63\xe9\x54\x48\xea\x4a\x78\x2d\xf9\xed\x94\xae\x02\xe7\x92\x34\x37\x99\xe2\x29\xba\xd6\x11\x33\xa4\x2f\xd9\x53\x3b\x77\x2a\xc3\xa5\x2e\x26\x18\xab\x95\x70\xbd\x06\xae\xe8\xb7\x0f\x9d\x55\x8e\x2e\x5c\xf7\xa1\x88\x6c\x16\xce\xf2\x67\xae\x17\x05\x3f\x81\x14\xa3\x2a\xfb\xcd\x99\xc1\xce\xc8\x29\xf0\xe3\xb6\xa7\x5f\xea\x2b\x82\xb2\x4f\x68\x61\xc1\x3f\x08\x4b\x21\x45\x28\x50\xb9\x79\x98\x80\x44\x89\x93\x28\x75\xf1\x68\x76\x99\xc2\xb8\xd8\x1c\xae\x36\xa1\x17\xb8\x09\xe3\xc0\x36\x94\x9b\x5e\xda\x36\x39\x63\x93\x17\x2c\xdd\xb9\x2b\xbc\xd8\x24\x91\x18\xb1\x95\xdc\x57\x61\x2c\xdd\x53\xc8\x39\x54\xb3\x51\xc7\xc6\xf2\x43\x62\x45\xdb\x55\x6c\xdd\xde\x53\xe0\x79\x3f\xf4\x05\xeb\x54\xcc\xba\x00\x02\x42\xcb\x15\x85\x91\x9b\x52\x13\x72\x62\xfd\xc4\x76\x3d\xb9\xd1\x10\x66\xe2\xce\x53\xcf\x8e\xb6\x4c\x05\xed\x82\xc0\x14\x96\x1e\xc5\xac\x1c\xb5\xce\x9b\x5a\xa8\x68\x91\xc9\x97\xaa\x4a\x66\x68\x8a\x38\x12\x73\x19\x2d\x82\xa9\xba\xfc\x16\x17\x8b\xd2\xc4\x6d\x1e\xee\x36\x0f\x2c\x7c\x50\x1a\x15\xc4\x4e\x4c\xd9\x73\xf0\x55\xc4\xe8\x5e\x8b\x34\x6d\x19\xbc\xfa\xad\x67\x6c\x15\x17\x0b\x24\x0e\x0b\x7e\x2e\x91\x82\xe6\xba\x1e\xb3\x13\xf5\x71\x18\x36\xa6\x85\x6e\x03\xad\x54\x9c\xf8\x0e\xa6\x1d\x66\x32\xd8\xbf\xd9\x38\x20\xbb\x80\xb3\xc7\xea\xec\x68\x6d\x82\x75\x14\x79\x22\xef\x50\x43\x45\x0a\x1e\x2e\x59\xb4\xc8\xdc\xe6\xca\x41\x8f\x78\x11\xe5\x51\xd2\x65\x7c\x9e\xa4\xc2\xe3\xc1\xfd\xf5\xbc\xde\x4b\x16\x6e\x87\x9d\x8c\x73\xa1\xef\xa9\x88\xc2\xa0\x36\x0f\x18\x09\x40\xef\x6c\x5d\x5c\x13\x03\x78\x36\x58\x71\x6d\xb5\x1e\x4d\x8d\xf7\x34\x91\x3e\x52\x5a\xdd\x61\xc0\x4c\x68\x6e\xb1\x76\xd6\x36\xd2\xc4\x31\xa8\x4c\xa9\x09\x08\x4d\xfa\xaa\x4b\x5f\x67\x9a\x7a\xf6\xd5\xa3\xa8\x79\x3e\x78\x85\x9a\x4d\x05\x66\xec\xbf\x27\x35\x0b\x4b\x00\x81\x7c\x20\xcd\x9f\x92\xf4\x02\xf4\x03\x7c\x0a\xa2\x9f\xf0\xa9\x41\xe6\xf7\xc7\xda\xf4\x2a\xd9\x34\x37\x47\x3f\x01\x99\xd6\x17\x0b\x4d\x4a\xd1\xfd\x3e\x88\x28\x4f\x60\x96\x7b\xbe\x45\x58\x74\xd2\xd1\x44\x48\x19\x3f\xa2\x8f\x02\x2c\x6f\x97\x57\x2a\xd8\x2e\x1a\x99\xd5\x84\x6c\x2a\x24\xd4\x5a\xbf\xe1\x9a\x6e\x27\x09\x55\x0f\x7f\xec\xfb\xd3\x74\x1d\x02\xe0\x8f\x94\xd0\x50\x95\xee\x7e\x8a\x57\x51\xfc\xba\x78\x63\xc2\x9a\xe8\xa5\xb2\x0a\xe5\x4b\xd3\xbe\x75\x4f\x25\x31\x23\x37\x2e\xf7\x28\x5d\x9b\xf6\xd5\xbd\xe9\x8e\xb2\xa7\x7e\xc0\x00\x2f\x75\x77\x2a\x2a\xa1\x46\xd7\x27\x69\x01\x32\x72\xa0\xd5\xeb\xac\x43\x53\x77\xa0\xf4\x29\x6a\xbb\xa3\xdc\xff\x19\x1b\x1c\xc7\x58\xd0\x3c\x48\x93\x37\xbe\x7c\xf6\x4c\x55\x85\xf7\xbc\x12\x3b\xee\x88\x75\x50\x8e\x91\xeb\x22\xb1\x7c\xdc\x3a\x9b\x07\xcf\x76\x73\x1c\xa5\xca\xef\x95\x92\xef\x54\x0d\xc1\x29\x5e\x7d\x8c\xa4\x16\x0d\x30\xf5\xf3\xca\x29\x63\x8f\x10\x55\xb2\x20\xdd\x3c\x3c\xfa\xa8\x84\xc3\x6f\x97\xfc\xb9\xed\xa5\xb3\xbd\xb5\x1e\xd6\x47\x76\x5c\xdd\xfc\xdf\x7c\xf9\x8e\xbe\x7c\x8d\x17\xb9\x93\x86\xca\x59\x6d\x9f\xbd\x10\x02\xcb\x4f\x31\x36\x25\xc0\x74\xf2\xfc\x85\x4a\x1f\xcf\x29\x11\x64\xf3\x46\x06\xc8\x05\xc4\x19\x67\x39\x3b\x02\x5c\x0a\xf6\xf3\x55\xe6\x65\xa5\x48\x08\x13\xad\x32\x90\xb3\xa4\x9c\xd9\xdc\xa4\x58\x2a\x1a\x6f\xa7\xb5\x20\xcd\x86\xdc\x52\xec\xb0\xf2\xab\x16\xd4\x34\x56\xab\x35\x69\xf3\xd9\xd9\xfc\x49\x79\xcf\x6d\xb5\xd4\x40\x17\x84\x5d\xf2\xf6\x30\x8a\x36\x7f\x49\x46\x92\xb8\x41\x18\x3e\xf2\x26\x62\xf2\xbf\xfc\x1d\x74\x1f\x63\xa5\xc2\xe3\x08\x1f\x0d\x6e\xda\x9e\xf5\xb9\xe1\x6b\xd7\xc1\x72\x2d\xd6\xcd\xd5\xa9\x19\x36\xd0\x7c\x26\xd2\xfd\xd0\x69\x3e\xe8\xb9\xfa\x8d\x88\xd9\xbf\x4e\x64\x8a\x8a\xc9\xe9\x8e\x07\x44\x4b\xad\x82\xea\xcf\x9a\x70\xe1\xef\x1b\x3c\xd4\x8e\x5e\xbe\x3d\x3f\x3c\x9b\x4a\x7d\x74\x82\x66\x95\x89\x72\x31\x9c\xa8\x8c\x00\x5c\x91\xf7\x1d\x5b\x5d\xb2\x9f\xf3\xb2\xa3\x79\x41\x37\xac\x5c\x4d\xb6\x8f\xe6\x2b\xc7\xa3\xe3\xd7\xe2\x8c\x75\x24\xeb\xfa\xbc\x77\x41\x42\xa2\xf2\x8e\xbb\xe0\x9e\xfd\x8c\x65\x8d\x1f\xf5\xfa\x59\x32\x6c\xa6\x3e\x48\x59\x54\xdd\xef\xc9\x0f\x4d\xd6\x80\x6f\x8b\xb1\xdf\x35\x3a\xbd\x71\x9f\x07\x52\x7e\x28\x5f\x95\xfd\x5c\xeb\x59\x70\xe2\xd5\x82\x82\x82\x25\x52\xe4\xdd\xb5\xc3\x99\x65\x5c\xe0\x7a\x63\xba\x91\x38\x0e\x43\xb7\x0c\x1e\x2f\xe1\xae\x9f\x8a\xec\x75\x14\x2e\xe4\xf8\x94\x27\xa8\xce\x9d\x72\x67\x69\x3e\x68\xb1\x02\xc9\xc9\x29\x20\xe0\x93\xf5\x63\x0d\x16\x3a\x5c\x15\x9e\x88\x2a\x4c\xd0\x91\x80\x08\xe6\x91\x0b\x62\x81\x74\xc7\x98\xb2\xc9\x63\x65\xaf\xa1\x83\x3c\x7a\x99\x61\x2f\x49\x6b\x1a\xb0\x00\xad\x16\xf0\x51\xad\xc5\x92\x57\x4d\x56\xc6\x0a\xb7\x97\x58\x2c\xe0\x16\xda\x3e\x95\xa5\x21\x17\x70\xca\x11\x93\x4f\xa3\x1d\x23\xb6\x88\xe4\xfd\x5d\x10\x4b\x24\xf2\x3d\xa0\xfd\xad\x12\x0e\x06\x5f\xd6\xbe\x10\x06\x05\x45\x2b\x1c\x91\xc9\xbd\x2a\x6a\xbb\xed\xdf\x5b\xb7\x54\x05\x0e\x05\xc5\x68\xec\xc9\x56\xc5\x25\x82\xe1\xb4\xfe\xf3\xad\x72\x5e\xe5\x11\x4a\xe5\xec\xa3\xba\x02\xbc\xbc\xf1\x6f\x5d\xdf\xa9\x72\xd5\x71\x29\x38\x99\xd3\x93\x48\xb1\xb7\x2f\x7b\xbc\xe0\xf6\xc5\xe6\x91\xf0\xa0\xed\xbe\x15\xa6\x70\x5f\x6e\xe2\x04\xb5\x5c\x8b\x04\x33\x99\xc0\xfd\xfc\xe7\x6d\x4f\x24\x5a\xb3\x1e\xf9\x6d\x72\xb1\xb2\x96\x99\x1b\x3a\x55\xa5\xed\xb9\xab\xd5\xda\x67\xad\x36\xaf\x4d\x1e\x18\x95\x71\xe8\xb1\x4c\x7b\xec\xdc\x5c\x04\xde\x84\x0e\x9c\x7e\x59\x2e\xd1\x32\x37\x52\xfa\x91\xc3\x5b\xba\xb3\x1c\xd7\xdc\x2b\x5b\xc0\x5f\xd6\x2c\x02\x2e\x37\x33\x24\x43\xf2\x0c\x8e\x63\x72\x73\x2c\x3c\x22\x82\x16\xd6\xcb\xaf\xe1\x3a\x75\xef\x5c\x69\x0f\x43\x77\xc7\x3c\x2f\x4f\xcc\x30\xe4\x0b\x62\x3c\x96\x5f\xc3\xac\xe8\x9b\x59\x54\x67\x5b\x94\x2f\x68\x23\x7d\x2f\x45\x63\x17\x7d\x02\xea\x74\xe7\x16\x22\xa6\x45\x1f\xd0\x96\x6e\xfd\x09\xc1\x1a\xe6\xbe\x9d\x88\x92\x8f\x57\x51\x22\x64\x81\x0f\x76\x52\xc8\x06\x04\x02\x48\x7c\xa0\x77\x1b\x7e\x5d\x4d\x30\x8b\x82\x2c\x99\x98\x3d\xd3\xd6\xd8\x35\xf3\x34\x0b\x98\x47\x92\xa0\x34\x2f\xeb\x2f\x89\xb6\xfe\x1c\x5d\x09\x36\xad\xfe\xaa\xaa\xf3\x4e\xc9\xa1\x03\x05\x4c\xad\xb1\x1d\xd6\xb3\x23\x38\x79\x92\x2c\xbe\x92\x5b\xa3\xdb\x2e\x03\xbb\xc2\xa3\x35\xd2\x20\x72\xe8\x75\xd9\x7a\xbf\x72\xe7\xcc\xbd\x4c\x8a\x70\xa5\xfe\xf9\x4a\xcc\xdf\xc1\x4a\x77\xd2\xa8\x9c\xc4\xd9\x4e\x93\x60\xe2\xc0\x2e\x98\xb7\xda\xd1\x32\x11\x66\x51\xce\x4f\x7a\x47\xb7\x61\x61\xa0\x97\x01\xa6\xe4\x2a\x08\xc8\xfa\x0b\x40\xfb\x89\x44\xdc\x40\x6d\x30\xaf\x1a\x6e\x93\x2d\xd0\xcd\x9c\xdc\x31\xd5\x55\xb4\x6c\xb9\xdd\x98\xc0\xd0\xe2\x72\x07\x74\x2e\x4b\xd8\xe2\x27\x68\x04\x63\x10\x85\xb0\x6f\x4d\xb9\x48\xeb\x39\xab\xe9\x05\xfb\xb4\x31\xc3\x71\x37\xbf\x49\x0a\xf8\x01\x3e\x92\xe3\xc2\xc1\x9a\xe4\xb7\x82\x4c\x13\x18\x69\x68\xcb\x84\xb5\x68\xdc\x36\x78\x65\xe9\x35\xee\xfe\x73\x63\x34\xee\x1e\x7c\xd6\x19\x4e\xa5\x0c\x46\x09\x11\xea\x2e\x07\xd2\x88\xcd\x57\x58\xda\xee\xab\x20\x4e\xf0\x65\x9b\xc5\xe7\xc4\xb7\xbe\xbb\xb8\x9e\xd1\xfd\x1e\xa8\x41\x75\x67\x32\x81\x01\x3b\xc1\x7a\xc2\xc0\x41\xbb\x59\x0a\x5f\x44\xb9\x4c\xe6\xef\xa9\xb4\xf2\x0a\x66\x25\xa4\xea\xb4\x9d\x05\x96\x2b\xa4\x52\x91\x72\xf1\xb3\x8d\x86\x27\xe5\xf5\x81\xaf\x72\x25\x82\x49\x97\xf6\x03\xf4\xbd\x5b\x6d\xfe\x1d\x91\xa2\xba\x5b\xa2\x39\xcd\x15\xa9\x0a\xe1\xa4\x7b\x2c\x37\x0f\x3e\xe7\x0f\x2c\x55\xf4\xe5\x16\xfc\xac\x4b\xc1\xdb\xc3\x4a\x2e\xc3\x54\xa0\x5f\x6f\x84\x18\xb2\x83\x2f\x77\x63\xa2\xb3\xcb\xa5\x07\xae\x96\xc0\x4a\xcf\xf2\xf7\xf8\xb9\xb2\xe8\x04\xa5\x4c\xba\x59\x54\x39\xab\x7e\x85\x73\x70\x18\xc1\x49\x80\x76\x1b\xb8\x6d\x71\x4c\x1b\x5d\xb5\x64\x32\x41\xb8\x9c\x70\x3d\xed\xe4\x3e\xa4\x67\x50\xaa\xb8\x6a\x97\xf6\xde\xf6\x20\x70\x08\x49\x14\x84\x30\x06\x05\x12\x98\xab\x62\x64\xf6\x31\xde\x3e\xe2\x80\x7f\x9c\xd8\xb8\x52\x0e\xdb\x7c\x30\xc8\x5f\x5f\x46\x7c\x87\x22\xc2\x07\x99\x42\x45\x39\x0b\xa4\x09\x2a\xda\x98\xeb\xfa\x26\xf2\x40\xaf\x7e\xde\x9c\xae\xda\x10\xa0\xc9\x16\xc6\x10\x7a\x76\xab\xc6\x14\x8c\xe8\x1e\x0e\x37\xde\x79\x14\xc4\x71\x26\x19\x60\x4b\x1c\x63\xf1\x4a\x5a\x53\x09\x5b\xa1\xa2\x42\x01\xb1\x3c\x27\x16\x97\x0b\xdd\xa7\xad\x49\xcd\xc8\x20\x87\x93\x8b\xd6\x69\xa9\x2e\xe5\x18\x53\x3f\xc2\x5c\x89\xa8\x80\x00\x8e\x43\xbe\xcd\x59\xea\x5a\x67\xbd\xb7\x7d\xf9\xc0\x91\x55\xce\xac\xf7\x00\xff\x87\x66\x4e\x1e\xa9\x3e\xfc\x92\x8c\x6f\x3f\x36\x56\x00\x47\xdb\x6b\xc1\x31\x5a\x0e\xb3\x58\xba\x0d\x97\x85\x5d\x28\x87\x9a\xe0\x1a\x21\x8f\xd7\xbc\xea\x4e\x9c\x55\x07\x85\x41\xc3\x66\x5e\x80\x94\x82\x4d\xe4\xae\xa9\x1e\x3c\x5e\x17\xab\xd5\xbb\x61\x25\xce\x73\x92\x8a\xc2\x18\xd0\x4f\x81\x1c\x2e\xef\x19\x6f\xfe\x37\xbd\x50\xc1\x1f\x1e\xfa\x70\xab\x2a\x9f\x5e\xde\xb7\x85\x07\x1a\x0b\x17\x27\x5d\x45\x53\x06\x22\xf6\xf7\x12\x55\xce\x3e\xf3\x53\x40\xe9\xf1\x4e\xdc\xc7\xcd\x9b\xee\xa8\x10\xf0\x2a\xb2\x72\xf8\x24\x47\xf0\x79\x08\x44\x47\xe6\x6a\x8a\x9e\x8c\x46\x71\x99\x4c\x2a\x5d\x66\xd4\x09\x83\x87\xb3\xad\x8a\x29\x67\x57\x23\x72\x1e\x6c\x31\xa8\x9a\xc2\xd1\xa3\x94\x56\xff\xdc\xc6\xe3\x4c\x25\x43\xe6\x37\x3b\xb4\xc0\x1e\x58\x8d\x6b\x9d\x5d\x03\x8b\xa6\xb9\xe6\x72\xa0\x47\xc2\xb3\x49\x9a\x81\xdc\xc2\xf3\xb1\x62\x99\x81\xa5\x16\xe5\x09\xd0\x0f\xac\xca\xea\x62\x5b\x06\x96\x92\xa5\xb2\xb2\x96\x72\x05\x8c\x9a\xb0\xf7\x67\x00\x3f\xfd\xb3\x76\x41\x75\xf0\xbf\x9b\xcd\x2e\xb3\xd2\x9a\x8d\xe3\x39\xa6\xd7\x7c\x54\xd3\x13\x0c\xac\x91\xc7\x8d\x57\x2c\x7a\x49\x80\x6c\x55\xea\xde\xc8\xe6\xeb\x86\xd2\xa8\x62\x3b\xce\x84\xef\x35\x13\x94\xa1\x7b\x3c\x41\x4b\x0c\x1e\xe6\x4b\x0f\x7e\xdb\xbc\x8e\x4c\xe1\xf4\xa7\x94\xbd\x71\x64\xc1\x60\x69\x8f\x91\x0a\x9d\x4c\x07\xca\x31\xea\xbe\x80\x45\x4b\x36\xa0\x65\x64\x3b\xdc\xe3\xe8\x25\x19\x91\xb1\x8a\x69\x62\xe1\x21\x4a\x25\xfd\xce\x5c\xff\x30\x74\x5f\x8b\x08\x25\xdc\x99\xfd\x73\x10\x71\x02\xbe\xf2\xf7\xae\x5f\xfb\xfd\xa5\x9d\xcc\x57\x2d\x8f\xa7\x5f\x3c\xbd\x1a\x9c\x4f\x6c\xcf\x3a\x83\x23\xae\xa5\xb8\x05\xfe\xec\x36\xa4\xf5\x6d\x3f\x73\x09\xba\xbd\x0e\x52\x2e\xff\xbe\x26\x3c\xd6\x53\x71\xb0\x3c\xb0\xbe\xf9\xfa\xdb\xdf\x9f\xed\x5b\xdf\xbc\x82\xff\x7d\xfd\xaa\xad\x1c\x3d\x9a\x29\xd0\x19\x35\x41\x70\xf4\xf6\xbe\x86\xbd\x8e\x24\x15\x41\x05\x08\x2b\x20\x60\x81\x89\x4b\x53\x03\xb1\x2a\xeb\x12\x7a\x78\x51\xb6\x1d\x3d\xea\x7b\x42\xed\x00\xaa\xc7\x70\x3f\x5d\xdf\x52\xcd\x64\xa9\xa5\x68\xb1\xb6\xda\x45\x93\x7f\x39\xee\x6a\x64\x42\x33\x19\xe7\xc1\xfa\x36\xa2\xe4\x45\x08\xc1\xa9\xcb\xa2\x61\x44\x50\x84\x1c\xee\x27\x90\xb9\x2d\xd5\x81\x87\xa6\xe8\xb1\xc0\x12\xd8\x00\xed\xcd\xe1\x61\x1e\x01\xbe\x76\x63\x8c\x8d\xe3\x32\x30\xf3\xc0\x5f\xb8\x4b\xb2\x4c\x35\x12\x52\xee\x6d\xfb\xbf\xe0\x14\x15\xc3\xa7\x1c\x21\xe1\xa4\x91\xa9\x89\xf7\xe6\xfa\xf0\xd5\xb4\x99\x82\xf2\xaf\x7a\x50\x9b\x7d\x01\x6e\x66\x27\xa7\x27\xd7\x87\xb3\x93\x8b\x73\x93\xe7\xff\x9b\xeb\xe9\x55\x47\xbe\x47\x85\x61\x7a\xb3\xd5\x52\x0b\x4d\x73\xe2\xc2\x02\x06\x93\xec\x85\x37\xbe\x7a\x94\x67\x5d\xb8\xd6\xc2\x0d\xca\x31\x3f\x9e\x4e\xa3\xa8\x2d\xe7\x0e\x28\xde\xd2\xb4\x01\x5a\xc4\x7c\xbe\x79\x40\x63\x23\xe5\x29\xac\x75\x3a\x69\x02\x6b\x42\x7c\x8a\xb6\x88\x84\x2a\xa2\xb7\x5c\x4f\x0b\x04\x4a\xf5\x4b\x75\x04\x7c\x46\x89\xff\x73\x12\xf8\x9e\xb4\x2f\x6d\x0b\x7b\xca\xd2\xb1\xd7\x3f\xb5\x52\x89\xba\xec\xea\x53\x03\x71\x68\x96\x95\x9c\xe8\xe0\x16\x3d\xdd\x95\x81\x99\xec\x42\xa8\x37\x8a\xcc\x34\x4d\xc9\x22\xb2\xbf\x5a\x26\x7f\x14\x98\x3a\x23\xa0\xfb\x02\x1c\x5a\x1c\xae\x24\x8b\x4c\xb7\x3b\x3a\xf4\xec\xa5\x4d\x45\x5e\xa0\xac\x36\x49\x02\x61\x19\x1c\xfd\xb2\x5b\x64\x1a\x63\xc6\xd7\x6f\x2a\x6c\x5a\xca\x34\xd9\x73\x02\x74\x3a\x8f\x43\x13\x27\x12\x4f\xf8\xf8\x2f\xe7\x13\xc7\x65\x59\xe7\xba\x63\x46\xff\x20\x44\x8f\x32\xd6\x42\x4d\xb3\xdd\x8e\xb5\x1d\x91\xc9\x58\x2b\x11\xa5\xbc\x60\x3a\xd3\x19\xa1\x8f\x45\x53\x3d\x5d\x0a\xaf\x1c\xfa\x32\xcd\x14\xd6\x3a\x80\xf2\x46\x6c\x7c\x13\xd8\x99\x7b\xe8\xa9\x7b\x8b\xf6\x31\x32\x42\x1c\x56\x89\x92\x39\x2b\xeb\xf3\x7f\x7d\x76\x97\xd1\x9c\x9b\x71\x77\x1a\x5b\xe2\xaf\xf4\xbe\xae\xec\x30\x62\x58\xda\x5d\xec\x6d\xe7\xf8\x1e\x6b\xe4\xd9\x7e\x7b\xa4\x91\x77\xe3\xdb\xe1\xc8\xe1\x07\x58\xa3\xb6\xef\x7e\xa4\xe1\x7c\xfa\xf4\x0c\x9b\xca\x7a\xfc\x3b\xe4\x80\x21\x5e\x0d\x4e\x88\x0f\xa1\x98\xa3\x25\x9f\x5f\x1d\xd0\x32\x1a\xcc\x29\xf6\xcd\x79\x4e\xba\x32\xa5\x8b\x6d\x1d\x94\x3e\x08\x0d\xfa\x48\x8a\xca\xda\x1c\xca\x27\x01\x03\x47\x65\x90\x1e\xdb\x9c\x2c\x3b\x5a\xa6\x65\x7f\xb3\x0a\x95\x97\xa7\x37\xaf\x4e\xce\x27\xf4\x80\x37\xb1\xcc\xc1\xf6\xb5\x40\x64\x18\x70\xb6\x25\x82\xcc\x0b\xe3\xbc\x87\xe2\xa5\xd7\x5d\x83\xa1\xef\xfc\xe0\xbd\x4f\x59\x2d\x5b\xb0\xd7\x35\x32\xc2\xd1\x12\xfe\xd6\xd4\x4c\x03\x8f\x17\x60\x0c\x63\xd1\xa1\x84\xfd\x04\x49\xe3\x67\x07\xb9\x56\xe3\xf3\x1d\xae\x58\xe8\x8a\xd6\x70\xaf\xcb\xb9\xad\x63\xbe\xe3\x9a\xdc\x79\xed\x53\xdc\xd9\x43\x83\x13\xb1\x79\x86\x28\xbd\xce\x9a\x34\xb5\x24\x71\x22\x01\x37\x28\x4b\xd4\x2e\x50\xf4\x1f\x1f\xfb\x5f\xda\x3d\x9c\x2f\xcf\xca\x9e\x94\xa9\x3f\xc8\x8d\x32\x43\xdc\x33\x37\x55\x67\x7b\x13\xcc\xb2\x8c\x61\x56\x1f\x55\x63\xec\x6d\x9d\xcd\x49\xe1\x82\xf2\x1a\x64\xd4\xd4\x8a\x1f\x83\x0e\xa5\xf5\xf7\x99\x8e\xa6\x1e\xda\xd8\xfd\x42\x58\x88\x90\x71\xe1\x95\x14\x3f\xd5\x14\x8b\x02\x93\x82\xd8\xe8\x63\x8e\xcc\xe0\x6b\xfd\xe6\x01\xa1\xd8\x0d\xe7\x5d\x2f\x52\x6a\x43\x71\xf2\xab\x10\x59\x66\xee\x30\xcd\xa5\x15\xda\x6e\xd4\x2c\x9c\x2b\xf3\xc5\xee\xe6\xeb\x18\x9f\xdc\x39\x56\x31\xe6\x54\x35\x75\x97\x2c\x4e\x66\x2e\x46\xc9\x66\xce\xc3\xe2\xc8\x57\xf9\xb9\x4d\x17\x6a\x6f\xad\x87\x95\x8e\x06\xf6\xfb\x42\x63\x3c\x39\x1f\xe0\x8b\xd9\x1d\x00\xbf\xe2\x2f\x9c\xa3\x23\xf8\x46\xbe\x7e\xa1\x47\x58\x84\xde\x52\xf8\xf4\xfb\x3d\xf9\xed\xc8\x14\x06\x32\x6c\xc6\x8d\xa9\xaf\xbc\x34\x95\xbb\xb6\x08\xd9\xcf\x49\x8b\x01\xc7\x1e\x29\x31\x8c\xaa\x87\x43\xcb\x73\xdc\xb8\xc8\xd1\xd2\x99\x66\x4c\xc9\xd5\x23\x80\x9a\x79\xcb\x76\xab\xa1\xa5\x41\xf6\x06\xa2\x4f\x5f\xad\x55\x51\x33\x63\xac\x94\x67\xec\xd3\x57\x0f\x11\x53\xf8\xf8\xc9\xa8\x9c\xed\x71\x91\xeb\x7f\x3d\x1c\x05\xa8\xc9\x18\xaa\x07\xb2\xae\xfd\x67\x08\x28\x73\x7a\x6f\xab\x15\x36\x8c\xf7\x6f\x51\x17\xc8\xc1\x8d\xbf\x0f\x5b\xca\x32\x6c\x0d\xa1\xc7\x25\x71\x24\xb0\x06\xe3\xa8\x79\x0b\xd0\xd5\xdd\x87\xc0\xd2\xa7\xb8\x54\x24\xe5\x73\x98\x48\xb7\xcf\x8b\x82\x62\x92\xa9\x2c\x5f\xb2\xa1\x34\xf4\x02\x3b\x33\x3b\xe3\xe3\x7d\x4c\xf7\x2b\x52\x76\x2e\xed\xa4\xd5\x51\x68\xf3\xe0\xa1\xb7\x19\x9e\xfd\x14\x34\x57\xcc\xe9\x53\x49\x05\x09\x3c\xca\xf2\x75\xd4\xc2\x36\xa0\xd8\xf4\xfc\x3b\xdd\xb3\x7f\x46\xbf\xb6\x5d\x1c\x7d\x8a\xb6\xa2\xaa\xd0\x87\x96\x92\x6a\x31\x02\xf2\xff\xe1\x86\x2f\x61\x32\x5f\xdc\x27\x22\xc6\x8a\x50\xf0\x15\xfe\x7d\x84\x9e\x3a\x78\x85\x76\xdb\xca\x8f\xd6\x4d\x6c\x1f\x98\x3c\xf5\x26\xa4\xb7\x24\x75\xb8\x31\x2a\xca\xa0\x62\x4d\x0b\x61\xd1\x54\xa0\x81\xaa\xe8\x24\x1c\x6d\x2a\x95\x56\xdc\x7d\x94\x87\xb0\xfd\xc1\xb1\x18\x5c\xaa\xa0\x92\x63\x63\x56\xb5\x01\xeb\x35\x6c\x1e\xb8\x9a\xc3\x5d\x80\x17\x1d\xb6\xf2\x4a\xe5\x65\x4e\x0f\xf2\x80\x50\x39\x31\x18\x0e\xcb\xb6\x02\x5f\x4c\x30\x74\x05\x5f\xed\xe3\xf7\x41\x44\x5e\x78\x98\x30\xb8\xf9\xc2\x9e\x91\x0f\xb7\xab\x75\x40\x33\x8a\x9d\xf1\x9a\x88\x79\x42\x65\x9d\x39\xf2\xbe\xf1\xd1\xec\x6b\x74\xab\x2a\x49\xe3\xc4\x6e\x89\xf9\x69\x6b\xaa\x87\x0f\x66\x83\x63\x2a\x59\x0a\xf6\xf6\x91\xb8\x29\xc8\xe9\x2a\x8c\xc1\x5e\x11\x78\x5d\xd6\x4d\x20\x52\x3c\x39\x8c\xec\xa6\x80\xb4\xc5\x2c\x3b\x1c\x38\x9e\xd8\x6d\x5e\x6e\x78\x75\x1f\x76\x2b\x27\x67\xb2\x72\xf6\xbe\xec\xa4\x68\x8b\x8d\xcd\x02\x7f\x30\xf4\x38\x77\x26\x53\x90\x1a\xa0\x68\xd2\x95\x85\x1d\x51\xcd\x67\xf2\x9f\xe9\xe2\xb6\x4f\x69\x95\x5a\x3b\x6a\x12\xc1\xf9\xfc\x7e\xa5\xbc\x46\x7d\x8e\xba\x9c\x10\x47\xe6\xe1\x2b\xf7\x35\x3c\x6a\x5e\x4f\xaf\xae\xcb\xae\x6e\x15\xbc\xdb\x0d\xfa\xc3\x86\xeb\x9e\x63\xfd\xe3\xf5\xc5\xb9\x15\xdc\xfe\x8c\x81\xe1\x32\x8b\x66\x41\x27\x9e\xc8\x24\x8b\xf3\xb2\xb7\x20\x6e\x24\x18\x16\x48\xaf\x78\x3f\x97\x2e\xc2\x4d\x38\x29\xf4\xc4\xc3\x78\x8b\x80\xa2\x56\x6d\x5a\x5e\x07\xd6\x4b\xca\xe3\xed\x61\x85\x35\xf4\x40\x90\x21\x0f\x4e\x0b\xdc\x58\xa0\x29\x7d\x4e\x2f\x48\xfc\x2b\x47\xfb\x89\xb6\x6c\xe0\x2d\xa5\xc6\x60\x8c\x09\x0f\xf7\x0e\x47\xae\xea\x51\xf0\x5a\x8e\x19\xf5\xe6\x37\x8a\x77\xad\x7a\x47\xc2\x91\x05\xc7\x34\xf0\x01\xfd\x3f\xe1\x76\x96\x67\x8b\x90\x95\xff\xe2\xc0\x4d\x50\x69\xf4\x30\x20\x82\xce\x27\x9b\xd2\xc9\xa8\x2d\x72\xc0\x39\x01\xd0\x7b\xc1\xe3\x3a\xe9\x5d\x18\x99\x46\x2c\x67\xe6\x52\x8a\xb1\x32\x27\x38\x53\x6e\xb5\x78\x9a\xe2\x8b\xa1\x63\x5c\x96\x3c\xf1\xbc\x4d\x00\x35\xb4\xea\x8f\x05\xe6\x69\x71\x6f\x5d\xca\x13\xb5\x19\xcf\xe6\x21\x42\x88\x1f\xad\xb3\xc2\x31\x6a\x86\x30\x6e\x0b\x7f\xde\xfa\xbd\x37\xe4\x3f\x1c\x5e\x9d\x9f\x9c\xbf\xe2\xc4\x4b\x7c\x0c\xe1\xde\x21\x9d\x27\xd3\x18\x30\x56\x26\x7b\x11\xe5\x8d\xc1\xb5\xe8\xdc\xd8\x5a\xb9\xcb\x95\x77\x8f\xd1\x7b\x78\x85\xb6\x97\xc2\x21\x50\xdf\x97\x00\xac\xed\x7b\xeb\x56\x80\x56\xc5\x8e\x86\xe8\xae\x87\xfb\x8c\x23\x6f\xe5\x8f\x91\x98\x63\x9c\x38\xbd\xbe\x12\xfa\x18\x43\x53\x00\x7e\x8c\xc1\xe7\x98\x19\xb1\x71\xf8\x87\x20\x42\x66\x27\xd7\xd7\xd3\xb3\xe9\xf9\x8c\x87\xc2\xe7\xa5\xd2\xad\x4a\x5a\x0c\x5f\xea\xd3\x7c\x14\xb8\x12\x69\xd1\x3b\x22\xcf\x6b\x27\xb8\x8e\x62\x22\x95\x5a\xd8\x3b\x70\x35\x11\xae\x87\xa9\x1d\x0e\x08\xc5\xeb\x6d\xd0\x54\x9a\x61\xf3\x17\xfc\x5e\x8d\x95\x13\x7e\x91\xcb\x27\x6e\x12\xd8\xbf\x85\x46\xc2\xe7\xa0\x91\x68\xf3\xc0\xdb\x8d\xc9\xe5\x31\x93\xae\x85\xae\x33\xc8\x87\xf2\xf8\xb5\xa7\xd7\xa2\x00\x25\x99\xb2\x35\xa0\xb8\x27\xd8\x8a\x31\xa7\x6c\x65\xb7\xaa\x92\x45\x05\x48\x0d\x61\xbc\xe5\x00\xe5\xaa\xa0\xe2\xf2\xa3\xa0\x4c\x52\xd0\x6c\x96\x6b\x8b\x43\x01\xf1\x69\x7d\xcb\xf1\x9d\xe3\x06\x28\xb8\x9a\x1d\x57\x9d\x7d\x0c\xfc\xb8\x43\x60\x41\x14\xae\xc8\xb8\x8c\xcb\x00\x6b\x4c\x58\x47\x5e\x90\x3a\x38\x93\xbe\x13\xdd\xef\x81\x80\xb1\x13\xfb\xd6\x8e\x41\x12\x1f\x02\x70\x7c\x3a\xf6\x84\xb3\xcc\xb2\x34\x28\x6c\x14\x86\x45\x0b\x0a\xc3\x15\x1d\x7e\x02\x2c\xc1\x2a\x66\xb2\xdd\xa6\x91\xf4\x7b\xc5\x0e\xf6\xd6\x88\x0f\x30\x53\x15\x86\x28\xad\xc3\x24\x43\xb0\xa6\x40\x16\x4e\x1a\x65\xcf\xeb\xf8\xf8\xdf\x33\x6f\x9d\x62\x0d\x62\x7a\x56\xc5\x8b\x1c\x48\xd0\x24\x0a\xee\x55\x71\xa1\xca\x1c\x14\xc2\xc9\x24\x6f\xb6\x68\x05\x4e\x2c\x30\xe2\xa8\x16\x0b\x95\xb2\x84\xbd\xa5\xc2\xcc\x30\x2b\xaf\x3c\xdf\x98\xf9\x2a\x8d\xda\x04\x6d\x75\x13\xb6\xd5\x05\x5b\x3f\x4a\x6a\x68\x9c\xeb\x30\x8b\xca\x9c\xc3\xbc\xf9\x69\x4b\x68\xf1\xe1\x6c\x06\xbb\x11\x0f\x76\xeb\x88\xa2\x87\x83\x30\xf3\x10\xa3\xb3\x33\xa6\x60\x49\x54\xc2\x6a\x1e\xe2\xd4\x0a\xb4\xa5\x63\x32\x07\x20\x6f\x1d\x17\xb2\x7e\x2d\x25\x44\x75\xb1\x83\x4b\x0b\x90\x92\x64\x66\x81\x9e\x75\xa5\x1d\x60\x33\xf8\x94\xd1\x1d\x76\x9e\x74\x7a\xa6\x80\x4e\xcf\x76\xe3\x58\x9d\xa7\xd9\xf6\x94\x29\xaa\x70\x1a\x84\x87\x39\xba\xd9\x18\x63\x5b\xb8\x1c\x29\x05\x26\x5c\x85\x28\x01\x50\x69\x9d\x1d\x58\xb3\x9c\x0a\xbc\x2d\x31\x70\xa2\x24\x77\x89\x83\x7f\x91\x96\x8c\x0a\x84\x57\x59\xae\x79\x92\xe3\xa6\xf1\xd0\x5d\x11\x31\xb9\x80\x03\x8d\x28\xf9\x4f\xb0\x48\xd2\x39\x8a\xbb\x84\xcf\xde\x3b\x8e\xd8\xc4\xe0\xc1\x85\xed\xaa\x90\x3b\x5c\x35\x7c\xbf\x8b\x54\x7e\xa7\xba\x79\xf9\xef\x2a\x7d\xb2\x8a\xed\xa4\x79\xc9\xa4\x66\x8c\x7c\x01\x61\x89\xc9\x99\xa3\xc6\xb9\xa5\x90\xd9\xda\x51\x64\x1c\x06\xa2\xc3\x68\xf3\x1b\x5a\xbc\xda\x10\xca\x5a\xa9\x21\x46\xd1\x7f\x2c\x65\x76\x6e\x5c\xe0\x69\xed\x8f\x72\x95\xe3\x86\xa6\x84\x32\x32\x0b\x00\x20\x0b\xee\xe1\x50\x33\xd1\x45\x9a\x64\xaf\x8b\x33\x98\xe0\x1d\x89\x72\xba\x96\xa6\xfa\xbf\x57\x84\x40\x21\xff\xdf\xad\x50\x82\x06\xa3\xb5\x61\x7f\xab\x77\xde\xb8\xb6\xde\x6f\xb9\xa7\xed\x01\x42\x2c\x99\x4e\x89\x24\x60\x99\xd9\xd1\x3d\x45\xee\xcd\x71\x01\xe7\x29\x28\x8a\x44\x52\x48\x63\xe8\x51\xd4\xec\x96\x6c\xa2\x44\x2e\x2e\xca\x03\xde\x1a\x28\x12\xee\xbe\xb1\xae\xcb\xa5\xaf\xf1\x81\x90\x7d\x48\xda\x3b\x7e\x4b\x2d\xb1\x68\x87\x58\xdb\x9c\xda\x74\x7b\x3c\x24\xc7\x01\x07\xbe\x41\x12\x75\xd0\x8d\x3e\x1f\x58\xd6\x1f\x58\x7f\x80\x83\x9d\x14\x8a\x77\x4a\xa4\xca\xe6\x99\x5f\x0b\xe5\x9e\x4a\xd9\xe9\xc6\x41\xd7\x23\xd9\x28\x17\x72\x61\x44\x15\x6d\x2c\xdb\x71\x28\x8f\x0c\x4c\x52\x85\x84\x5b\x41\x75\x3d\x38\x4f\xfc\x81\x75\xe1\xcf\x45\xeb\x49\xb7\x76\x97\x98\xc7\xc2\xd9\x57\xc8\xf2\xf4\x94\x40\x2c\x8f\x06\xa3\xdf\x5a\x8f\x2c\x33\x39\x8b\xc2\x91\xd7\x1a\x59\x9e\x2b\x4b\x4d\x6d\xcd\xb2\x5c\xf4\x33\x89\x84\xb1\xdc\x72\xc9\x81\x6c\x44\x09\xc3\x61\x61\xb1\x5a\x77\x59\xac\x6e\xed\x5e\x2e\x03\x52\x49\xd2\x60\xb6\x4e\x69\xd9\x15\x4c\x00\x74\x6d\x02\x8d\x62\xee\x86\xb6\x57\x90\xf6\xe5\x81\x38\xc4\x1f\x5a\x90\x4d\xee\x1b\x5c\x43\x0b\xda\x6c\x1e\xd6\x14\x4d\xec\xed\xe1\xc2\x82\x06\x95\x85\x09\xb3\x20\x13\x2f\xe6\x60\xea\xfb\xe2\x22\xc3\x32\x30\xb4\x30\xb1\x94\x4a\xed\x58\x89\xb6\x25\x9a\xd9\x00\x32\x70\xfa\xee\x5b\xd4\x18\xd2\x58\xae\x4a\xcc\x10\x42\xd6\x7b\x8c\x76\xbe\x0d\xe4\xa0\xe0\x0c\x90\x75\xa2\x68\x9d\xc2\x12\x05\xe1\x4f\xe5\xaa\x65\xa6\xe0\x8a\xf8\x64\xd0\x98\x00\x1f\x56\xa8\xcb\x9c\x47\x46\xe2\xc9\x21\xa9\xe6\x04\x05\xce\x1e\xab\x97\x18\x85\xbf\x79\x38\xb0\x6e\x7c\xdc\xe3\x6d\xa7\x47\x7e\x18\xe2\x6a\xe5\x93\x50\xc4\xf9\xa2\x60\xec\xa8\xbc\xd2\x72\x55\xa9\xf4\x19\x4d\x24\x12\x17\xfb\x6c\x1d\x5c\x46\x52\xd3\x8e\x50\x95\x79\x8e\x69\xbb\x38\xf3\xe6\x2a\x49\xc2\x52\xfa\x4d\x8b\xf3\x41\xa1\x97\x45\xa1\x49\x5c\x6a\x13\xcb\xec\xa7\x52\x26\xe0\xad\xa4\x79\x07\x51\xe8\x39\xfc\xf1\x9c\x0b\x97\x67\x99\x37\x2d\xb9\x78\xb2\x1a\xb6\x7c\x36\xd0\x09\xcb\xe1\x94\x78\xd4\x09\xdc\x1e\x02\x68\xe1\x7e\x31\x72\xa2\x72\x2f\xe6\xa5\xc4\x54\xc6\xc8\xeb\x6c\x59\x40\x63\x33\xc5\x5e\xb1\x89\x3d\x6e\xb1\xd0\x18\x4a\x25\x4c\x84\xd7\x3c\xce\x3b\x01\x6b\x09\xee\x29\xb8\x52\xa8\x27\x1a\x34\xbd\x20\x62\x75\x84\xf3\xeb\xc9\x6c\x7a\x26\x24\x45\xa8\x4c\x00\x0b\x40\x39\x0e\x1c\x4a\x55\xfb\xf2\xe4\x74\x4a\x0b\x4e\xd8\x0e\xd9\x4c\x12\x07\x14\xa2\x46\x02\x0d\x20\xf4\xa6\xee\x7f\xb8\x21\x2c\x89\xf9\x0a\xd5\x9f\xcc\xee\x2b\xad\x45\xbd\x5c\xf8\x4e\xf7\x54\xf7\x8f\x00\xca\xe7\xd3\xd8\x15\x52\xbc\x39\xc3\x12\x23\xfe\x70\x76\x73\x3a\x3b\xb9\x3c\xbc\x9a\x3d\x7b\x79\x71\x75\x36\x39\x3e\x9c\x1d\x5a\x47\x17\xe7\x28\xda\xad\xef\x4e\x8e\x8f\xa7\xe7\x3f\x36\x52\xa6\xd7\xb9\x3f\x4d\x97\x57\x27\xaf\x0f\x67\x53\x8b\xe0\x75\x12\x71\x7c\x71\x7e\xbe\xf9\xd3\xf4\xda\xc2\x6e\xf4\xe1\xe8\xf0\xe8\x3b\xfc\x60\x84\xbc\xae\xa2\x6a\xdc\x82\xbe\x31\x3d\xa7\x11\xf6\xa5\x17\xdc\xc2\x51\x24\x73\x09\xfd\x98\xdd\xa9\x7e\x50\xfe\xe0\xf1\xc1\xc1\xc1\x8f\xd6\x0f\xea\x7b\xd5\xb0\x99\x3e\x95\x96\x88\x21\x8b\x1c\xa6\xd8\x02\xaa\x9a\x16\xcc\x11\x26\x83\xe0\xd0\xda\x46\x8a\x30\x54\xf6\x37\x93\x7d\x2e\x43\x76\x51\x69\xe4\xd3\x00\x8b\x9a\x15\x0d\x9a\x1d\x8e\x98\xd2\xe9\x59\xd5\x45\xcc\xcc\xb3\x6d\x2e\x98\xad\x9e\xd7\x9d\x04\x55\x0d\x17\xda\xa4\x55\x47\xd4\x9f\xb2\x24\x68\x66\x04\xaa\xf2\x46\x8f\x1f\xb6\xd7\xfc\x04\x5a\xfa\x4d\x07\x62\xf0\x5e\x34\x5b\x32\x43\x3c\xf8\x8c\x16\x4b\xbf\x72\x53\xf2\x0d\x0d\x8e\xc3\x9f\x37\x7f\x36\x41\xd3\x12\x91\x57\xfa\x4d\x07\x22\xe8\x4f\x76\xbc\x6a\xe1\x0a\xb4\xc9\x1d\xfe\xa8\x31\x28\x02\x66\xb8\x5a\xf6\xe9\xb0\x68\x46\xf2\xc3\x52\xe9\xc3\xe0\xbe\xef\xb5\x8c\x67\x8a\x69\x38\x49\x5f\xb1\xb3\xec\x0f\x9c\x41\x53\x46\xab\x1b\x47\x2c\xe6\x59\xb5\x7b\x8d\xd3\xf2\x28\x9d\xb2\x09\x22\xda\xa9\xcf\x73\x1f\xae\x46\x7c\x2d\x2d\xfb\x63\x53\x47\x7e\xf3\xeb\x56\x5d\x93\xfe\xf0\xd1\x7d\x82\x2e\xaa\xe8\xae\xd1\x32\x73\xcd\x0d\x7b\xe3\x9a\x87\x69\x23\xf8\xd2\x6f\xfd\x21\x76\x6c\x9f\xad\xdf\xf5\x20\xb7\x09\x72\xcc\x10\x69\xfb\x46\xc9\xa2\x40\x03\x9e\x47\x6e\x98\xb4\xbd\xb7\xd4\xb6\xd1\xc0\x40\x75\x81\x5b\xa0\x57\x7e\xef\x0f\x19\x6e\xd3\x1d\x92\x3c\x12\x8b\x34\x36\x2a\x2a\x00\xc0\x9b\xb5\x63\xf8\x11\x44\x8c\x21\xd4\xe6\xdd\xc3\x60\x4d\xb6\x4e\x5f\xdf\x8e\xa1\xfe\x1b\x1c\x77\xd4\x3c\x00\xce\xdc\x67\x0c\xb8\x25\x7a\x4e\x82\x6e\x08\x9c\x6b\xd5\x4b\x50\x50\x34\x0b\x62\x32\x3f\x18\x2d\x11\x8e\xbb\x6b\x39\x30\xe7\x09\x1a\x39\x8c\x20\x53\xb6\x7f\xf2\xa8\xba\x8c\xd0\x4e\x99\xdc\x2b\xcf\xaa\x78\x15\xa4\x9e\xa3\x4c\x9d\x58\xc1\xaa\x91\x80\xac\x60\x40\x7e\x49\xa0\x1b\x46\x1d\x58\x7c\x10\xc4\x37\x71\xbc\xde\xb1\xa1\xa3\x0c\xba\x3f\xed\x77\x6d\x71\xa9\x85\xa2\xd8\x06\xb0\xf9\x44\xb7\x92\x94\xcc\x01\xa8\xe1\xe2\xbd\x34\x0e\xd0\x7b\x6c\xbe\x0a\x58\x29\x56\xcf\xb0\x98\x37\xf0\xbe\x10\x90\x7b\x9c\x8b\xb1\x96\x83\x92\xaa\x7d\x31\x48\xaa\x53\x47\xbc\x4b\x28\x37\xac\x53\x79\xff\xf4\xf7\x38\x93\x6c\x98\x4a\x8e\xf1\xbb\xa9\x2f\x4d\x24\x9d\x98\xfb\x0f\x1b\x46\xdd\xea\x63\x44\xf9\x7b\x33\xf7\x1e\x13\x0c\x91\x20\x73\x71\x68\xbb\xcd\xeb\x19\x0d\xbb\x58\xba\x3f\x48\xa1\xdd\xbd\x59\xd8\x14\xa6\x46\x6e\x44\x40\x09\x88\x0d\x80\xba\xfe\x3c\x88\xa8\x52\x42\x1a\x97\xea\xb2\x55\xe0\x17\x2d\xb0\x59\x1f\x33\x84\xd2\xf1\x5c\xa6\x75\xf3\xdc\xb5\xdb\x3c\x2c\xfa\xb5\x9c\xbf\x2e\x4f\x76\x36\x00\x3b\x69\x73\x2a\xdf\xff\x09\xe6\xe6\x47\xdf\x53\xb8\x81\xc4\x68\xdc\xa3\x04\x40\x6e\x52\x5a\x7b\xfb\x78\x3e\x24\x6f\xe3\xbc\x5e\x1c\x36\xe1\xf2\x71\x2d\x7b\xa2\x03\x21\x59\x08\x87\x21\xd4\x1e\x7b\xb3\x3e\x51\xd3\x42\x1f\x7a\xf3\x39\x54\xd7\x44\x03\x3e\x79\x09\xc1\xe2\x5b\xc1\xd5\x3c\xe1\xd2\xb8\xae\x9f\xf9\xe3\x35\x2b\x8f\x2b\xb1\x86\x76\x2b\x74\xb1\x41\x53\xad\x04\x24\xe4\xd3\xac\xc8\x3d\xfa\x06\x50\xc5\x71\x8a\x94\x47\x4a\x9e\x3f\x47\x2f\xdf\x5e\xcf\x0e\x5f\x9d\x9c\xbf\x7a\x3b\x3b\x39\x9b\x5e\xdc\xcc\x94\x50\x6b\x59\x2d\xb2\xb6\x62\x46\x22\x17\x99\xd9\x3e\x8a\xd8\xd7\xa4\x1f\x8a\xd1\xc6\x72\x35\xbb\xb9\xdc\xf1\x58\xba\x50\xf4\x1e\x8b\x67\xdf\x8a\xe6\xc3\xbd\xf2\xab\x06\x54\xf4\xe8\x53\x4f\x9f\x6d\xe7\xa0\x23\xd0\x09\x37\x8a\x8a\x6f\x53\xa6\x08\xd3\x90\xaf\x6a\x2d\x0a\x1e\x63\xb3\x92\x8a\x8b\xbd\x81\xc2\xc7\x02\xb7\xf9\x20\xa3\xdf\x8d\x14\x33\x72\x87\xa4\x94\xe0\x59\xad\x3d\x99\xad\x42\xda\x2e\x9b\xe5\x92\x4e\x57\x7d\x7a\x28\x05\xb3\x83\x0e\x65\x12\x28\xa6\xe4\x8d\xdd\xa4\x2d\xbf\xab\x5e\xe7\xfe\x34\x05\x58\xdc\xa4\x11\xeb\x42\x44\x6b\x23\xde\xaf\xdb\xb3\xd5\xaa\xb3\xd5\x18\x72\xf3\xd2\x54\xa0\x4d\x44\x7e\x97\xde\x66\x02\x12\xd4\x97\x5b\x3b\xce\x8d\xc8\xcd\x8b\xae\xad\xa9\x0e\xbe\xe6\x21\xd8\xe8\x6d\x63\x04\x34\x61\x97\xd9\xcc\x49\x58\x9a\xed\x60\x15\xb6\x2a\x89\x65\x59\xec\xc9\xaa\x15\x9c\x3f\xdb\x68\x5d\xb5\xe5\x0a\x31\x4b\x05\x52\x4c\x61\xd4\x06\x3a\x8b\x80\x31\xc3\xd1\x3c\xed\x86\x75\x75\xe0\x9e\xdc\xb2\x71\xd1\xca\x04\x97\xc6\xc8\xa5\xa7\x73\x03\xf0\x78\xb9\xf8\xff\x58\xbb\x96\xdc\xb6\x79\x20\xbc\xff\x4f\xa1\xdd\x9f\x45\x1a\xa0\xdb\xec\x52\x27\x01\x0a\xd8\x09\x90\xb4\xab\xa2\x8b\x3c\xd4\xd6\x88\x63\x19\x7a\x34\x75\x0b\xdf\xa5\xdb\x5c\xa3\xbd\x58\x39\x33\xa4\x44\x49\xe4\x90\x1c\x69\x69\x8b\xfc\x66\x64\x53\xe4\x68\x1e\xdf\x74\xa9\xcf\x10\xbb\xf0\x7b\xe0\x31\xb2\x61\x27\x6a\xd0\x1b\x87\xe4\xae\x00\x8b\x15\x24\xc4\x0c\x68\x2f\x45\xb5\xfb\xf6\xdc\xef\xfb\xa1\x9d\xa8\x85\x25\x44\x89\xd7\x52\xf7\x9c\xf2\x2b\x30\x1a\x10\x8f\x4d\xa5\x09\xfe\x28\x12\xa5\xef\xab\xb7\x6f\x51\x28\x09\xab\x6e\xfd\xfb\xfc\xf0\x72\x34\x2e\x9c\x97\xc4\xf5\xf1\x82\x7d\x4d\x2c\x96\xad\xfb\xf5\x16\xb2\xcf\x20\x1d\xa5\x00\xe6\x5c\xce\x57\x29\x01\x49\xd2\x51\xb3\xf8\xfb\x57\xae\x7b\x50\x82\x0c\xb3\x85\x57\x6c\xa3\x73\xec\x42\x3e\x1d\xdf\xff\x4f\x52\x9b\x73\x89\x04\x9e\x39\x5d\xcc\x92\xae\x73\x96\x99\x75\xbd\xc5\x7e\x5c\x22\xe7\x69\x24\x31\xd2\x64\x3e\xa4\x51\xcc\x7a\x24\x40\x4a\x2b\x94\x40\xb0\x34\x0b\x9d\x52\x34\x7b\x91\x83\x6f\x67\x06\x71\x61\xef\xc5\x44\x0e\x7c\x23\xf0\x29\xf7\x1b\xcc\xd0\xa8\x46\x89\xf9\xf3\x7b\xfa\x7d\xb1\x47\xac\x7b\x50\xaa\x8c\x37\xc1\x3c\x0b\xf7\xb0\x54\x39\xfe\xbf\x66\xca\xdf\x81\x5d\xa7\xfc\x07\xa6\xee\xd9\x24\x41\x5e\x73\xab\xf7\x31\x87\xde\xc7\x12\x58\xb6\xe2\x5b\x5c\xa4\x6d\x71\x5f\x30\x2e\x36\xcf\xa8\x34\x29\x0c\x7e\x3e\x1a\x10\x0f\x5d\xb3\xe1\xef\xe1\xe5\x14\xdc\xb2\xe6\xce\x07\xca\xec\x94\xfd\xe8\xec\x51\x3c\xb8\x9a\x84\xda\x30\x0f\x0b\x5c\x96\x1c\xf1\x55\x5d\xec\x76\x5c\x50\x4d\x1e\xaf\xd3\xd0\xd9\x1d\x56\x11\xbd\x85\xde\x51\xd8\xed\x35\x28\x2b\xbb\xa3\xea\x0c\x28\x2b\x31\x93\x64\xf6\x2d\x70\x13\x78\xc5\x41\xbd\x95\xe4\x61\xa5\xfe\x29\xa9\xa1\x08\x69\x73\x9f\x46\xd3\x98\xc2\xf9\x5b\x80\x39\xc1\xb8\x06\xa0\xae\x8f\xdc\xd5\x10\x17\x13\x45\xcc\x9b\x6d\xc8\x9b\xb7\xde\xc8\xfd\x79\xcd\x98\x50\xd0\xda\x7d\xfc\x81\xa4\xc8\x69\xf1\x7a\x70\x34\x1f\x37\x4b\x19\x22\x43\x32\x71\xb3\x94\x2c\x34\xc0\x64\x88\x14\x14\xa8\x64\xef\xc3\x98\x9d\x1f\xd6\x0a\xda\xc9\xd0\x19\xa3\x61\x1a\x2b\x43\x8f\xfb\x31\xf0\xc6\x3a\x0b\x39\xe3\xf7\x40\x61\xf4\xe8\x7a\x34\xf2\x4b\x49\xdb\x02\xf2\x8f\x53\xf0\x04\x8b\x8e\xb0\xf6\x11\xcb\xdc\xfd\xaf\x5a\xaf\x0f\x25\x86\x34\xd5\x0c\x43\x55\x09\x37\x0b\x84\x2f\x6a\x07\xd0\x6e\xba\xbb\xc9\xdd\x8b\xf6\x8c\x69\x56\x34\x6b\x01\xe2\x2f\x6a\x8c\xa3\x6b\x28\x0e\x87\xec\x08\x4b\x60\xe8\x47\x3c\x25\xe2\x21\xd3\x6a\xed\xb6\x86\x54\xda\xc3\xc1\xdf\xf1\x6b\x8c\xa6\xa7\x42\x5d\x45\x18\x2d\x45\xeb\xc5\xa5\xe1\xe4\xda\xad\x39\x7d\xdc\xe3\x44\x92\x78\x0e\x1d\x66\x64\x92\x34\x0a\x84\x28\x90\x6f\xf9\x66\x97\x7d\x5a\x5c\xaf\x56\x67\x57\xe7\xfe\x3c\x73\xff\x9c\x0b\x49\x0e\x39\xc2\x35\xdb\xfa\xfa\x8b\x2e\xa0\xaa\x14\xac\x29\x68\xf3\x27\x55\x79\xa7\xfd\x7d\x95\xe4\x58\x01\x1c\xe5\x0a\x1a\xfe\xa8\x50\x6a\x61\xc4\x8c\x14\xe9\xe7\xeb\xea\xe9\x23\x6c\xca\xd4\x73\x5b\x7f\xa3\x89\xea\x38\x25\xec\x89\x15\xb1\x07\x39\x67\x26\x29\xa3\x6c\x0d\x73\x57\x6c\x22\xd7\x60\xec\x04\x3b\xd1\x99\xb6\xa3\x9b\x66\x1b\xf6\xac\xc5\xa5\xf9\xaf\xdb\x05\xd8\x51\x69\x59\x6c\x00\x15\x35\x75\xa6\x86\xe7\x1d\x99\x16\xbb\x98\xfc\xc2\x6d\xa6\x2d\xa7\x06\x7d\xda\xad\xb6\xa1\x6f\x57\xd9\x06\xae\x61\x5d\x6f\xa8\xf4\xc9\x6b\x4d\xa7\x27\x5c\xa7\x18\xd9\x06\xb2\x06\x54\xaf\x31\xbf\x4d\xa7\x0f\xc4\x76\x94\x59\x0a\x9e\x0f\x68\xee\xcc\x3b\xae\x6d\xc0\xc5\xf5\xd5\xed\xc5\xfb\xe5\xa9\xdd\xb8\x7c\x08\x8e\x37\x4b\xd5\xf0\xff\x5b\xf8\x12\xcb\x06\x08\xdb\x36\x54\x8b\xdb\x92\xb6\x51\x91\x19\xa7\xed\x70\x0a\x10\x3d\xd0\xa9\x27\x53\x61\x95\x3f\xf7\x9f\x3b\xf5\x45\xc4\x63\x67\x4d\x23\x3a\x3a\xd7\xb4\x24\x3d\x8a\xc7\x7c\xf3\x61\xbf\x03\x44\xf3\xd1\x9c\x24\x71\x15\x0e\x3c\xc8\xd4\xfa\x07\x60\x84\x34\x09\x0c\x5a\x42\x20\xd7\xdf\x31\x83\x0a\x02\xe7\x91\xbe\xc6\xd0\xd8\xd7\x92\xab\x40\x72\xa9\xa0\xa7\xc9\x2a\x93\x1c\x80\x55\xf3\xf0\x90\xe7\x9c\x35\xea\x99\x24\xd6\xa0\x9f\x46\x9a\x3d\x37\x15\x55\xe0\x67\x15\x9a\x38\xc8\x8a\xdd\x6c\x36\x64\x52\x72\x5a\x0d\x80\x30\x17\x95\xb2\x2a\xe1\xad\xdb\xa0\x35\xf8\x49\x67\xe5\x08\x13\x54\x23\xb4\x9e\xa8\xad\xd6\xef\xd1\xe8\x3d\x8b\x92\x09\x79\xbf\xe3\xc9\xb3\x65\xf7\x0e\x18\xa6\x8f\x68\xb7\x29\xca\xfd\x12\xde\xc1\x0f\x87\x55\xcf\x0f\x71\x6c\x27\x0c\xf6\xc6\x65\xce\x14\xca\xe3\x96\x0c\xae\x32\xe3\x4c\xc3\xfd\x8e\x21\xb6\xbd\x64\x4e\xb5\xe3\xcc\x8e\x2c\x23\x4d\xed\x55\xb1\x7d\x07\x69\x0f\x66\xca\x19\xd5\x09\x04\xec\xf7\xc0\x9d\x21\x73\xd2\x30\x95\x53\xaa\xf2\x30\xb0\x1d\xab\x75\xac\x9b\x06\xb4\xa2\x98\x93\x39\x9d\xe8\x48\xc1\x76\xbd\xe6\xab\xae\x3a\x3e\x14\x9f\x1a\xc3\xd1\x51\xd3\x83\xeb\xb2\x5a\x81\x4d\x06\xab\xf9\x85\xdb\xca\xad\xf6\x87\x1a\xe4\xa0\x7f\xd4\x31\x47\x37\x86\xef\x25\x04\xcf\xa1\x03\x2e\x8d\x73\xaa\x5a\x09\x2c\xa8\x64\x88\x44\xfd\xea\xc1\xe1\x73\xd2\xda\xa7\x0e\xdb\xb0\x28\xed\x2b\x7d\xb3\x15\x4a\xe1\x9e\x2c\x42\x14\xf2\xee\xb2\x56\xaa\x11\x9f\xb7\xe2\x4f\xc8\x40\xfd\x99\x97\x5e\x15\x1a\x8f\x0a\x94\x57\xa9\x09\xe4\x90\x0a\x82\x34\xc0\x35\xa4\x1e\x0f\xa1\x7d\x6a\xcc\x22\xb0\xd5\xd0\x3c\x54\xef\x71\xf4\x50\xab\x2f\x7f\xd8\x9b\xd3\xe8\x89\xe0\x6e\x7d\x16\x58\xe7\x7d\xfc\xf7\xf9\x5f\x00\x00\x00\xff\xff\xaa\xad\x7d\xcd\x38\x10\x03\x00") - -func cf_i18n_resources_fr_fr_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_fr_fr_all_json, - "cf/i18n/resources/fr_FR.all.json", - ) -} - -func cf_i18n_resources_fr_fr_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_fr_fr_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/fr_FR.all.json", size: 200760, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_it_it_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\xfd\x77\xdb\x38\x92\x2f\x8c\xff\x7e\xff\x0a\x7c\x73\x7f\x48\xfa\x7b\x2c\xa7\xd3\xd3\xb3\xe7\x5e\xdf\xf3\x9c\x7d\x14\x5b\x49\x7b\xc7\x6f\x6b\xcb\x99\xed\xdb\xee\x93\xa6\x45\x58\x62\x87\x22\x39\x7c\xb1\xa3\xc9\x66\xff\xf6\x07\x55\x00\x29\x52\x22\x40\x14\x48\xc9\x99\xd9\x9e\x73\xa6\x63\x91\x40\xd5\xa7\x40\xbc\x14\x80\x7a\xf9\xe5\x7f\x30\xc6\xbe\xc0\x7f\xc4\xff\x5e\x04\xfe\x8b\x23\xf6\xe2\x2e\xba\x8b\xa6\xa7\x57\x47\x77\xd1\x8b\x83\xf2\x4d\x9e\x7a\x51\x16\x7a\x79\x10\x47\xba\x22\xcb\xd8\x0f\x1e\x02\x0e\x24\x1e\xbc\x30\xe3\xf0\xfc\xeb\x81\x86\xfe\xcf\x71\x91\xb2\x7f\xbb\xb9\xbc\x60\x59\x9e\x06\xd1\x9c\x65\xab\x28\xf7\x3e\xb3\x20\x63\x41\xf4\xe8\x85\x81\x7f\xc8\xd8\x55\x1a\x27\x3c\xad\xbd\xca\x17\x41\x76\xc4\xd8\xec\x81\x65\x3c\x1f\xa5\x45\x14\x89\xaa\x23\x1e\x3d\x06\x69\x1c\x2d\x79\x94\x8f\x1e\xbd\x34\xf0\xee\x43\x3e\x9a\xa7\x71\x91\xb0\x97\x5f\xee\x5e\x44\xde\x92\xdf\xbd\x38\xba\x7b\x21\xc8\x16\xe2\xaf\x83\xed\x47\x5f\x5f\x1a\x25\xfd\x76\xc1\xee\xbd\xcd\xb3\xdc\x9b\xff\xc3\xb4\xf9\x6e\xc0\x12\xda\xfc\xff\xcf\xa6\x0b\x9e\x71\x01\x26\x7d\x0c\x66\x9c\x25\xa1\x90\x93\x2d\xbc\x47\xce\xbc\x88\x79\x59\x16\xcf\x02\x2f\xe7\x3e\x9b\xc5\x59\x7e\xc8\x8e\x53\x2e\xda\x40\xc8\xea\x55\x35\x82\x48\x08\x11\x89\x3f\x9e\x82\x30\x14\xbf\x66\xa2\x55\x40\x48\x59\x43\xdb\x82\xc8\x98\xf9\x3c\x8a\x81\x7a\x0b\xfb\x2c\xe1\x33\x21\xc5\x0c\xe9\x64\x75\x28\x4f\x41\xbe\x10\x2c\xf8\xf2\x90\x9d\x3e\xb4\x21\x89\x1f\x24\x82\x7c\x95\x70\x68\xf3\x19\xa0\xe6\xfe\x81\x28\x0b\xc4\x24\xd2\x7b\x2e\xc1\xa6\xdc\x3f\x6c\x6d\xba\x3c\x2d\x4c\x2d\x37\x4e\x12\xf1\xe1\xbd\x54\x10\x36\x4e\x43\x9a\x72\x84\x6f\x04\x14\xbe\x7c\x39\x14\xff\x5c\x88\x8f\xfe\xf5\x2b\x7b\xf2\xb2\x92\x24\x2b\x32\xf8\x1c\xaa\xc1\x97\x4b\x2f\xf2\xd9\x6f\xa2\xf0\xb1\xfc\xfb\xeb\xd7\xdf\x3a\xc1\x0d\x43\x9a\x20\xcf\x45\xcc\xbc\x24\x60\x3c\xf2\x93\x38\x88\x72\x18\x08\xfa\x7e\xd2\x55\x9c\xc0\xf7\x3a\x2e\x72\xce\xf2\x18\x3e\x7d\x11\x2d\xbd\x24\x11\x42\x0a\xe1\x44\x17\x64\xd8\x11\xa2\x3c\x5c\x31\xf5\x5c\x14\x13\x5d\x4c\x70\x4e\xc2\x60\x86\x68\x4c\x18\x87\x23\x4d\x90\x07\x96\x37\xc6\x6e\xc5\xe8\x7d\x29\xa6\x93\xa5\x97\x7e\xe2\xb9\x18\x40\x62\x00\x8c\x32\x76\x33\xb9\xfe\x70\x7a\x3c\x79\x09\xdc\x1e\x03\xfe\x24\x86\x5a\x36\x4b\x83\x04\xd8\x65\x30\x42\x82\xc8\x0f\x1e\x03\xbf\xf0\x42\x35\xea\x62\x18\x4b\xf3\xe0\x91\x47\xe5\x88\x32\x49\xbc\x4f\xe6\xd4\x36\x19\x67\x59\x30\x8f\x58\x1a\x87\x3c\x93\xb3\xc5\x4b\xe8\xb7\xf2\x3b\x08\xc8\xa9\xe8\xe8\x30\xfb\xc6\xe9\x7c\x04\x85\x5e\x32\xe8\xdb\xed\x65\xb2\x44\xc8\x24\x4b\x75\xb5\xc6\xce\xd9\x52\xdb\x01\xbf\x0e\x90\x7f\x37\xf5\xd2\x39\xcf\xab\x91\x8b\x1f\x26\xc7\x67\x2c\x12\x9f\x07\xb9\x75\x89\xe7\x4a\xcd\x19\xb5\x8e\xbe\x68\x3f\x6b\xac\x56\x34\xa8\x08\x0b\xd5\xeb\xc3\x58\x2c\xde\x6c\xe4\xb1\xf1\xd5\x29\x1b\x8d\xb2\x4f\x41\x32\xca\xb2\x70\x84\x8b\x3f\x42\x7a\x29\x18\x61\x51\x98\xc1\x0c\xa5\x04\xb8\xac\x48\x92\x94\x67\x52\x43\x60\x3c\x4d\xe3\xb4\x4b\xca\xfd\xe3\xb0\x6e\x29\xf1\xd7\x5b\xb1\xca\x8a\x05\xe4\xdc\x8b\xbc\xb9\x50\x81\x46\x52\x79\xe0\xd8\xe9\x97\xf8\x10\xa7\xc1\x7b\x59\x8c\x79\xb3\x59\x5c\x88\xe9\x1d\x5e\x27\xde\x0a\x54\x21\x31\x4d\x3c\xc4\x86\xf5\x6b\x37\x4c\x28\x32\x1e\xbf\xfb\x78\x31\x3e\x9f\x30\xaf\x10\xa3\x1d\x54\xb2\xff\x97\x7f\xf6\x96\x49\xc8\x0f\xc5\x8a\xc9\xee\x5e\xdc\xdd\xdd\xbd\x48\x84\xea\xf2\x14\xa7\x3e\xfc\x7d\xf7\x82\xbd\x12\x53\xa1\x27\xf4\x92\xbf\x15\x42\xf3\x11\xaa\xe2\x03\x7c\x46\xb1\x58\x44\xac\x2c\xf8\x9d\x49\xe0\x5d\x73\x1c\x52\xfa\xe5\xaa\xe2\x00\x30\xa0\xbb\x2a\x0c\x0f\xa2\x3b\x96\xaf\xd4\x5c\xe9\xc9\x79\xe3\x3b\xf3\xf7\xde\x39\x4b\x17\xf9\x67\x71\xb2\x1a\x65\x62\x3b\x20\x56\xbf\x9b\xcb\xdb\xeb\xe3\xc9\x68\x7c\x75\xc5\xa6\xe3\xeb\xf7\x93\x29\xfe\xf9\xcb\x28\x2e\x7f\x5e\x5e\xbf\xff\x55\xfc\xce\xca\xdf\x37\x57\xe3\xe3\x09\x3c\x19\x45\xf1\x48\x0c\x3c\x50\xbe\x7e\xb5\x6b\x84\xdd\xf2\x75\x69\x09\x39\x13\xbd\x8a\x97\x41\x0e\x9d\x2c\x85\x2f\xa4\x06\x9b\x6c\x79\x98\x61\x64\x21\xa1\xca\xf1\xd4\x9b\xe5\x62\xcd\x17\xaa\xd1\x68\x54\xd1\x40\xed\x3c\x49\xe3\x65\x92\xe3\x47\xbb\x8f\xf3\x85\x65\xaf\xd8\x0b\x7b\xf7\x76\x11\x93\x6e\x16\xb3\x57\x9b\x9c\x84\x22\x24\x50\xb2\x22\x0d\x01\x5e\x7c\x9f\x7b\xa2\xac\xc7\xe2\x88\x8f\xf2\x40\x08\xb0\x05\xde\x6a\x82\xd8\x19\xcb\x1e\xf2\x17\xdb\x43\x76\x94\x38\x4f\x5a\x94\x3e\x31\x30\x6b\xfa\x86\xd1\x1e\xd1\x0e\x67\xcd\x5d\x73\x1e\xbc\x6b\x24\xde\x9f\xff\xfc\x14\x5f\x9f\xb0\x57\xf2\x38\x60\xa5\x19\xd6\x62\xd7\x2a\x74\xbb\x02\xd6\xf3\x6c\x88\xb6\xe8\xcd\xd7\xa5\x25\x92\x22\x5b\x08\xe5\xec\x4a\xfe\xfa\x65\x74\xcf\xde\xde\x9e\x9e\x9d\x88\x79\xfa\x2f\xf8\x08\x26\xeb\x19\x3b\xbe\x3c\x3f\x1f\x5f\x9c\xc0\x0f\x9f\x9d\x5c\x9e\x8f\x4f\x2f\xe0\xef\x07\x26\x9e\x9e\xbe\x9b\xdc\x4c\x3f\x5e\x8d\xa7\x3f\x59\xae\x20\x25\xcb\x21\xb9\x39\x8c\x08\x84\xd1\x4b\x06\x6b\x48\x9d\x5f\xe3\x12\x77\xa9\x5e\x28\x56\x85\xf5\x44\x19\x06\x59\x0e\x7b\x54\x3c\x07\x19\xf9\x3c\x0c\xc4\x12\x03\x5b\x79\x6f\x0e\x8a\xb2\xb7\x3e\x53\x7a\x4a\x83\x3c\x17\xbb\x58\xb5\xc9\xff\x70\x3c\xbe\xfa\xa8\xb6\xc3\x37\xac\x76\xcc\xc7\xca\x63\x3e\x1c\x5b\x5e\xb4\x12\x0b\x4d\x21\xba\x56\xed\x54\x20\xd3\xef\xbf\xbf\x59\x9c\x3d\x5b\x5a\xed\xfd\x47\xb5\xc3\xbf\xe8\x21\x98\x17\x29\x32\x12\xe3\x2e\x15\x43\x50\x2c\xdc\x70\xc4\x2a\xc4\xc5\xad\x8b\x3c\x83\x8d\xef\x7f\xe7\x33\x50\xe6\x47\x42\xd1\xe7\x87\x77\x51\xad\x87\x14\x89\xd8\xdf\x08\xa2\xea\x9c\x50\x74\x6b\xeb\x43\x55\x38\xe8\xd5\x35\xf6\x43\x20\x5a\x45\x00\x84\xc5\x13\xcf\x7f\x7b\x82\x3f\x64\xc8\x0b\xce\x45\x13\x0f\x8e\x38\xe5\xa7\xa9\xd5\x93\x1c\xbd\x08\x3e\x20\x1c\xcf\xde\x67\x71\x08\x07\x4f\xe2\xcb\xa4\x1c\x7a\xc7\xe3\xba\xaa\xc4\xd7\xd5\x10\x30\x54\x3e\x4e\x2f\x3f\xbe\x3b\x3d\x9b\x28\x59\x27\x72\x2a\x84\x6e\xb4\x05\xf1\x08\x4b\x7c\xc1\xff\x8a\xff\xdd\xbd\x98\x85\x45\x26\xa0\x7d\x8c\x62\x9f\x67\xa2\xe9\xd6\xef\xe4\x6b\xd8\x6d\xc1\xe3\x3f\x1f\x34\x9e\x2f\xf9\x32\x4e\x57\x1f\x97\xf7\xf0\xee\xcd\xf7\x3f\xfc\x58\xbe\xfd\x8a\x7f\x7c\xd5\xef\x7c\x8b\xef\xbf\xff\xfe\x7f\xef\xba\xe7\x0c\xd6\x71\xf6\xd4\x6f\x86\xef\x32\x3b\xea\x31\xe6\x0e\xa3\xe9\x2f\xe6\xee\x22\x7b\x44\xbd\xcb\x10\x16\xa0\x1d\x76\xa4\x23\xd5\x38\x65\x4b\xde\x07\x91\x5f\xb5\x63\xb5\xca\xab\x29\xf7\xe3\xe9\xc5\xcd\x74\x7c\x71\x3c\xf9\x6f\x3c\x39\xd9\x37\x50\xdf\x49\x2b\xe1\xe9\x32\xc8\x32\x58\xba\xa0\x43\xdd\xbd\x48\xb9\xe7\x8f\xe2\x28\x5c\x09\xfd\xdf\x3c\xff\xfc\xd1\x67\xfe\x9b\xf6\x99\x9d\x2f\x74\xdf\xe6\xac\x25\xaf\x4e\xab\x26\x56\x2d\xcb\xae\xce\xc6\x17\xff\x40\xfd\x70\xf8\x6e\x68\xd7\x4e\xff\x58\x3d\xf0\x59\xa7\xba\x3f\x3a\xda\x7f\x9f\x8e\x46\xda\x24\xa6\xf3\x71\xe1\x07\x79\x0c\x97\x3b\xd7\xe5\x3a\x0d\x17\x39\x78\x47\x15\xc3\x4d\x1e\x5e\xe1\xe0\xc1\x4c\xca\x93\x38\xcd\x33\xf3\xc1\x41\x6f\x92\x44\xfc\xeb\xcb\xa9\x53\xb1\xaf\x6e\x5e\x4e\xc1\xb1\x52\x76\x20\x3a\x5e\x08\x63\x03\x5e\xcc\x16\x5e\x34\x57\x96\x30\x07\xf8\x24\xe3\x39\x58\xc3\x44\x3e\x74\x51\xdc\xd1\x77\x0b\xb8\x63\x9e\x94\x16\xb8\x82\xfe\x9c\x2d\xe2\x22\xf4\xb1\xdb\xb3\xbf\x07\x09\x76\xed\x83\xf5\x09\x74\xfd\x21\x1c\x33\xb0\x30\x9e\x79\x21\xf3\x83\x54\x40\x14\xbd\xea\x90\x5d\xc5\x59\x80\x83\x30\xc8\xc4\xeb\x04\x7f\x3d\x72\x3c\xc6\x17\x72\x82\x34\x79\x26\x46\x76\x10\xa7\x41\xbe\x92\x32\x88\x92\x59\x8c\x96\x2c\x0f\x69\xbc\x14\x24\x9f\x78\x96\x03\xb7\x45\x30\x5f\x70\x93\x71\xd2\x6e\x50\x47\x43\xa1\x25\xa8\x0a\x57\x70\x38\xb6\x2c\xc2\x3c\x80\xe1\xef\x25\x49\x75\x7a\x2b\x3a\x43\xf0\x20\xe8\x9a\x8c\x28\xe9\x04\x28\x1d\xe3\x06\xce\x8f\xd7\x23\xf1\x03\x18\x8a\x84\xf1\x5c\xf4\x40\x35\xe6\xaa\xae\x08\x26\x67\x19\x13\xcd\x88\x77\xd2\x78\xee\x6c\x46\x3d\x18\x69\xb2\x3c\x27\xfc\x91\x87\x68\xf3\xd7\x76\x17\x8d\xed\x27\x39\xe3\xfc\x5d\xe1\xe0\x08\xcf\x7e\x0e\xdb\x1d\x2f\xb2\xc4\x16\x53\x0d\x3c\xe1\x91\x3c\x45\x14\x30\x8b\x54\x5d\x29\x54\x26\x3f\x96\x5f\x74\x17\xac\x28\xf2\xe2\xca\x2e\xb5\x07\x5f\xae\xd3\x0e\x7b\x97\xd3\xbc\x9c\x57\xa4\x99\x25\x03\x33\x3b\x18\x5b\x69\xea\xad\xe4\xe0\xaa\xad\xce\xa0\x6a\x64\xa0\xad\x48\x13\xaa\x7b\x69\x92\xc7\x59\x5a\x84\xdc\x7c\x40\xfc\x0d\x83\xdd\x67\x9b\x4b\x0a\xa8\x78\xd5\x24\x41\xe1\x7a\x49\x23\xe9\x62\xf1\xb7\x5e\xc6\xd9\xa5\x52\x6f\x33\xb9\xe9\x85\x3b\x68\x98\xcc\xa1\x3f\xa2\x7a\x01\x35\xb3\xbf\x15\x5e\xca\xd9\x7d\xea\xcd\x3e\xc1\x0a\x00\x2f\xeb\x36\xb6\x8b\x40\xc0\x53\x7a\x32\x14\x4c\xf9\xdf\x0a\xb1\x98\xe0\xdd\x63\xae\xa4\x10\x8c\x95\x52\xf7\x01\x35\xb9\xdf\x33\x31\x79\xa1\x78\xea\x0e\x4b\xea\x73\xbf\x28\xed\x6b\xad\xbb\xdd\xbd\x10\xcd\x98\xc7\xb3\x38\x94\x87\x1e\xf9\x2c\x01\x95\x79\xfd\x5a\x88\x29\x66\x43\xec\x42\xb2\xc4\x9b\xef\x0f\x7f\xf8\xf1\xc7\xc3\x37\x87\x6f\xfe\x57\xb3\xa4\x9c\x34\xb0\xcc\x9f\xfe\xf4\xfd\xbf\xa8\x53\x93\x52\xd3\xfb\x75\x97\xbd\xf2\x8f\xcf\xf9\x8c\x9f\x93\x32\x6e\x71\xcd\x15\xfb\xad\xf8\x09\x27\x63\xb8\x48\xf6\x4a\xb3\xc8\x72\x33\x23\x1f\xea\x0d\x2b\x5d\xc9\x50\x70\xfe\x32\x0a\xd8\xc5\xed\x79\xb5\x83\xba\x81\xfb\xcd\x4f\xec\xe4\xf4\xe6\x2f\xf0\xd7\x92\x9d\x4f\xce\x2f\xaf\x7f\x86\xbf\x23\xf6\xd3\xe5\xcd\x14\xfe\x4a\x70\x93\x25\xed\x69\x44\xb5\x63\x2c\x9a\xb3\xe9\xe9\xf9\xe4\xf2\x76\xda\x71\x71\xb9\x6b\x8e\xf6\xd2\x7b\x3e\x8c\x42\xd1\x9e\x86\x4f\xd0\x56\xc6\x9e\x83\x1f\x73\x69\x05\xcd\x3f\xc3\xd5\x24\xdc\x97\xa3\xd2\xa1\xe7\xd7\x5d\xc3\x9e\x3b\x68\xdd\x21\x1c\xee\xae\x4a\xa3\x76\x3d\x5f\x53\x59\x47\x8e\x31\x98\x7b\x5b\x72\xdc\x28\x4b\xe2\xc8\x97\x49\xbe\x32\xf2\xd9\x28\x41\xa2\x0e\xdf\xa2\x3c\xeb\x10\x1b\x9f\x03\xb1\x4d\xe4\x30\x43\x36\xcc\x88\x0e\x18\x3f\x9c\x1f\xb2\x45\x9e\x27\x47\xaf\x5f\xaf\xe2\x22\xfd\x08\x1f\x0d\xec\x29\x8c\xc0\x86\x23\x4e\x97\xe9\xd1\x0b\x42\x9c\x54\xc4\x74\x0c\xf4\x4c\xa3\xc0\xa6\x0e\x19\x81\xd0\x4d\x93\x18\xb7\xd8\x62\xa7\x28\xe5\x5e\x7a\x9f\xc4\xba\x22\xb4\x56\x16\xe4\x72\xab\x2b\xdb\x26\x09\x8b\xb9\x62\x69\x50\xfa\x86\xa2\x6b\x2f\x09\xb0\x7b\x00\x83\x00\x3d\xa8\x96\x22\xf6\xf4\x53\xbe\x8c\x1f\xab\x3d\xb1\xb2\x6e\x00\xb4\x19\x6c\xed\x02\x9e\xe9\xf9\x12\xaa\xda\x1b\x80\xbf\xb8\xc2\x06\x13\xab\x65\xb9\xb0\x57\xe2\x95\xab\xba\x6a\x7d\xc1\xd9\xf7\x72\xcf\xe0\x43\xd1\x87\x96\x35\xe2\xef\xaa\x39\x06\xe7\x53\xc3\x96\xc1\x50\xd2\x9a\xdb\xb8\xf2\x14\x82\x33\x5e\xa1\xb6\xc5\x78\x50\x52\x1a\x5b\xca\x75\xfb\x38\x8c\x0b\x9f\xbd\x03\x39\x53\xfd\xb4\xd5\x87\x94\x3d\xde\x93\x93\xd7\xd7\x62\xb5\xfd\x00\x27\xcd\xb7\xef\x4f\x2f\xb4\x70\x36\x5f\xdb\x9e\xc1\x6c\x71\x60\xd7\x93\xab\xcb\x9b\xd3\xa9\x58\xe1\xf5\xb2\x5b\x55\x22\x48\xf9\x01\xf4\x8c\x13\x03\xbf\xcd\x02\xf6\xb4\xcf\x4e\xc7\x37\x7a\xc2\xcd\xb7\xf6\x54\xaf\x4e\x2b\x87\x2f\x3d\xf1\xd6\x42\x4e\x3c\xd8\xab\x6a\x85\xc9\xc4\x12\xe3\x25\xc1\x61\xcd\x22\x50\x6f\x6f\xeb\x44\xc3\x09\xe1\x91\x15\x86\xa3\xbe\x5c\xa4\x37\x60\x30\x51\xbf\xbf\xea\xaf\x87\x6c\xab\x0d\x84\x83\xbd\x82\xf7\x8f\x3c\x85\x6b\xfb\xf2\xf5\x07\xf9\xf3\xeb\x57\xbb\x2f\xd4\x83\xaa\xbb\x14\x2e\x4d\xd9\xb3\x1d\xaf\x0c\x03\xb2\xf1\xd2\x9e\xe6\x0c\x76\xae\xb0\x63\x56\x5e\xe2\x2c\xe3\xb3\x02\x0e\xaf\x19\x7a\x29\x67\xb8\x41\x10\xc8\x4b\x33\xd9\xaf\x06\xe7\xe9\x7e\xc4\x1c\x30\x2b\x2f\xeb\x0d\x36\xc0\xa5\xc1\xc4\x02\x30\x99\x92\x3d\x5a\x5f\x6c\xb2\xd0\x35\xad\xa6\x92\xa1\xa6\x62\x58\x22\x6d\xea\x10\x11\xc0\xd5\x46\x5a\x7a\xb3\xc2\x99\x4c\x92\x74\xf0\x37\xd6\xa0\x70\xc7\x1e\x81\x84\x44\x63\xde\x5e\x9f\x89\xe1\x09\x14\x37\x5d\x94\x85\x9c\x70\x41\x27\x9e\x5d\xa6\x73\xf5\xec\xb5\x3c\xd7\x85\x87\x78\x50\xac\x1e\xcb\xef\x72\x5b\x7d\x97\xc3\x43\xbd\xfa\xb3\x7f\x00\xf6\x6d\x13\x06\x82\x50\xd3\xf7\xba\xd4\x10\xd5\x97\xbf\xe7\x00\x1e\x3d\xe0\xc3\x50\xfa\x1e\x8b\x9e\x21\x4f\xd0\x8e\xdf\x95\xaa\xd4\x6b\x0f\x28\x1d\x32\x76\xcd\xd1\x96\x1d\x08\x6c\x90\x2d\x95\xae\x0e\xf2\xd0\x04\x3e\x4f\xa1\x7d\xd4\x69\x7b\x20\x0f\xd8\xa0\x80\xbc\x2d\x07\x2a\x62\x48\x18\x5a\xfc\x9f\x44\xac\x9e\xdf\x31\xc3\xb0\x04\x35\x41\xd0\xd3\x44\x02\x84\x59\x50\xee\x12\x64\x87\x7a\x29\x84\xfc\x39\x2e\x44\x79\x38\xf9\xcc\xd3\x15\x2b\x22\x85\x0e\x24\xd1\xd5\x42\xd0\x42\xee\xa8\x14\x45\xde\x76\xa9\xe2\x75\xa9\x83\xe8\x31\xfe\x64\x6a\x41\x01\xe0\xa7\xf8\x89\x3f\xc2\x2d\xa6\xd8\x89\x97\x87\xb0\x0f\x41\x2a\x36\x58\x0f\x05\xd8\x57\x08\x65\x5c\xac\xa0\xb9\xe2\xc9\x82\x65\x02\xfa\xba\xd8\x7c\x35\xb0\xc2\x2b\xdc\x68\xc0\x8f\x6d\xc4\x12\x9b\xbe\xf3\xfc\x26\x1b\xf3\x8f\xb6\x74\x69\x4b\xeb\xcd\x4b\x58\xf3\xcf\xc7\x13\x6f\x65\x76\x02\xa7\xd9\xe5\x6e\x51\xda\x4d\x04\x95\x8b\x80\xa8\x23\xa6\x47\xfd\xc6\x7c\x18\xa2\x84\x41\x47\x67\x87\x5f\xd4\xe4\x66\xee\x46\x94\x6b\xdd\xce\xfb\x7f\x85\x20\xda\xc9\x77\xb0\x20\x3b\xec\x97\xd8\x62\x38\xcc\xb7\x68\x21\xeb\xfc\x35\xb2\x98\xf9\x3c\xe4\x78\xfd\x5c\x05\xf5\x40\xbd\xc1\xd4\xd8\x56\xb5\xec\xdb\x52\xea\x20\xcb\x42\xcc\x14\xf7\x5c\x45\x36\xe0\x60\xaa\x22\x84\x2b\x7f\xab\x40\x3d\xc6\xe0\x0e\xee\x84\xec\xb1\x0a\x05\x4a\xcf\xbf\xf1\x92\x44\x13\xd7\xfa\x40\xde\x0f\xa8\x8b\x35\x51\x37\xd4\x1f\x45\xda\x55\x22\x61\x68\x28\x86\xcd\xab\x0b\x83\xe2\x63\x5d\xd1\x1d\x0b\x8a\xf8\x14\xa7\x9f\xd0\xdc\xe8\x53\x90\x24\x6b\xed\x16\x6d\x08\x01\x8b\x35\x40\x1a\xb5\x7e\xa8\xd5\x88\x95\x6e\x66\x62\x19\x05\x95\x5a\x8e\x68\x59\x88\xd0\xae\x44\x72\x14\xdc\x62\xbf\x8e\x81\x34\xa0\x17\x81\xa1\x96\x1f\x78\xf3\x28\x16\x2b\xf0\x2c\x93\xb7\xd5\x61\x3c\xc7\x7b\x5c\x13\x5a\x07\x22\x14\x8c\x99\xe1\xd0\xa8\xf9\xd6\x9e\xaa\x8c\x71\xe3\xc9\x3b\x57\xb5\xe3\x33\xce\xce\x9d\x15\xe8\xbc\xe5\x56\x4b\x12\xf4\xf9\x43\x10\x49\x1b\x3b\x6c\xb1\x8e\xd9\xce\x81\x84\x2b\x3e\x08\xde\x23\x09\xc2\xc1\x80\x2d\x24\x5d\x2d\x32\x0a\x39\xaf\x13\x41\x98\x2b\x11\x31\x88\xa9\xf5\x03\x58\x61\x77\x70\xdd\x2e\x46\xe4\x23\xa7\xa2\x10\x37\xdf\xd7\xe2\x5f\xb9\x6d\x07\xe8\xf0\x44\x06\x2b\x52\xa1\x95\xd6\x5b\x77\xf9\x58\x6c\xe0\x9b\x9b\x77\xf9\x18\xb7\xf0\xd5\xf6\xbd\x11\x9d\xc9\x78\x84\xf0\xcc\x70\xf6\xdd\x6e\xcf\xd3\x3c\x3b\x68\x85\x8d\xe3\x3c\x41\xbe\x7c\xf2\x11\x9f\x48\x8c\xd5\x57\xc9\xd4\xf7\x58\xe3\x13\xff\x78\x51\xf0\x77\x14\xb5\x82\x58\xd8\x9d\x3b\x3d\x0f\x0a\x97\x56\xaa\xcd\x99\x82\xf0\xbf\xc3\x1f\x6a\xa1\xad\xe3\x72\x3e\x80\xdb\x19\x23\x7b\x59\xf3\x1c\x2c\x25\x70\x4b\x2d\xd4\xf5\xf8\x29\x0a\x63\xcf\x07\x2f\x33\x2f\x5d\x49\xab\x2c\xbc\x4d\xc6\x4b\xc8\x88\xe7\x60\x1c\x03\xb1\xb2\x8c\x62\x0d\x41\xd3\x51\x82\x65\x30\x4f\x3d\x79\x9c\xa9\x74\x9e\x53\x15\x23\xf3\x64\x1d\x90\xaf\xe3\xab\xf4\x26\x48\xc2\x1e\xe5\x78\x11\x83\x56\x82\x62\x4f\x87\x07\x27\x57\xe2\x0f\xf9\x99\x7f\x83\x2d\x5e\xb9\xbd\xfb\x6d\x53\x93\xfb\xad\xb4\x7f\x78\x48\x79\x69\x28\x58\xc5\x04\xfd\x6d\x1b\x72\x59\xab\x16\xb8\xd4\x53\x71\x4e\xd9\x31\x38\x05\xcd\x72\x38\x96\x11\x4f\xfd\xa5\x50\x10\x32\xd1\x32\x60\x4e\x1e\x3c\xe0\x61\x8d\xd8\x97\x46\x9f\xe4\xee\x14\x23\xbe\xca\x50\x69\xe6\x86\xfc\x27\x92\xce\xfe\xab\x16\x70\x58\x96\x43\xac\x08\x69\xa4\x2d\x84\x88\x46\x8d\xf0\x4b\xfa\x36\xa3\xd4\x75\x41\x04\x26\x32\xa6\xce\xaf\x2f\xe9\xc4\x4d\x68\x98\x0b\x31\x53\xf1\xcf\x09\x6c\x3c\x21\x3c\xb0\xb4\xce\x01\x35\xff\xde\x9b\x7d\xc2\xe3\xe9\x58\x6c\x07\x46\x5e\x4d\xf2\xc3\x32\x96\x35\x86\x35\xfc\xad\x1e\xf0\x0f\x9c\xdf\xff\x34\x2b\xef\x0e\xf1\x17\x87\x98\x36\xf2\x39\xb4\x58\xf9\x2c\x56\xcf\xc4\x1a\x51\x3e\xca\xd4\x23\x69\x12\x8f\x0f\x7f\x53\x01\x9f\x2a\x34\xd2\x49\xa0\x09\xc7\xaa\xb9\xfe\xd9\x44\xb5\xfe\xde\x6f\x4f\xcf\xce\x4e\x2f\xde\x43\x34\x9a\xf1\xfb\xc9\xb5\xb6\xb1\xb4\xe5\xec\x39\x41\xbc\x1e\xb4\x00\xd5\xef\xf3\x5a\xcb\xd0\x38\x40\x44\x20\xfd\x85\x72\x5b\x11\x7b\xfa\x01\x58\x4c\x6f\x2a\x3e\x16\xfb\x38\xfb\x8a\xfd\xb1\xc0\x49\x61\x69\x3e\xb6\x79\x51\xad\x22\xfe\x42\x78\x30\x38\x54\x2c\xef\xb3\xeb\xc1\x71\xe8\x32\x0c\xc6\x70\xaf\xb2\x97\x57\xe3\x7b\x93\xdd\xcc\x90\x2e\xfb\x46\x10\xf1\xee\xeb\x6f\x42\x4d\x12\x1a\x10\xea\x9e\xe7\x4f\x9c\x47\xa0\x68\x35\x17\x74\x9c\xa6\x9a\x87\x87\x81\xbf\x3e\x3b\x34\x82\x1d\x86\x30\x59\x16\xbb\x7d\x8d\xcf\x1f\xbc\x22\xcc\xb3\x66\xbf\xb6\x35\xd1\xd8\x29\xaf\x1d\x49\x5c\x75\xe0\xdd\x08\xd9\x4d\xde\x41\x2e\xd9\xd5\x75\xda\xe6\x30\xe6\x12\xd6\x07\x0a\xdf\x0a\xac\x01\xda\x71\x48\xa0\x76\xdb\xed\x67\xc5\x42\x6e\xb1\xba\x41\x4e\x1d\x91\x8d\x84\x56\x75\xed\x11\x15\x41\xe8\x27\xa0\x33\x0a\x5a\xd5\x8f\x52\xe8\x86\x05\xb5\x1e\x99\x0b\x8d\x61\x10\xda\xde\x51\xb9\x11\xb1\xc7\xb8\xca\xe1\x84\xc7\x13\x8a\xb6\x98\xc7\xca\xdb\xc7\xb5\x8b\x7c\xe9\x64\x5e\x44\x01\xea\x02\x4b\xb1\x79\x28\x52\x8e\x11\x09\xc3\xe0\x13\x67\xe7\x07\xec\xfc\xed\x01\x7b\x8f\x9e\xf7\xef\xdf\xea\xe5\x68\x67\xb4\x15\x41\xc0\x9d\xa1\xed\xc5\x71\x15\xba\xda\xf7\x47\xd2\x22\x63\x84\x1e\x24\xbf\x80\x6d\x77\x19\x72\x53\x74\xd4\x5f\x61\x0f\x34\xf9\x8f\xf1\xf9\xd5\xd9\x44\x3a\xff\x41\xdc\xf6\x8d\x4a\x57\x69\xf0\x28\x36\x28\xd7\xf0\xb7\xf2\x8b\x59\xae\x12\xf9\xb0\xf4\x8d\x79\x0d\x7f\xbc\x36\xf8\xa2\x7d\x03\x88\xac\x3b\x4c\x85\x35\x09\x24\xa6\x6e\xa9\xb6\x4b\x3a\x70\x4b\xaa\xb0\x52\x16\x0c\xb1\x70\x8f\x9e\x01\x41\xcd\x6f\x6f\x26\xd7\xf8\xeb\x6a\x7c\x73\xf3\xd7\xcb\xeb\x13\x68\xfc\x6e\xde\x16\x55\xc9\xd2\x63\x74\xad\x32\x2d\x54\xa9\x62\xa8\xb4\x44\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\x1f\xdf\x5f\x5f\xde\x5e\x75\xe2\x73\x21\xe5\x86\xd7\x48\x9c\x5d\x5e\xbf\x67\x18\xf9\xdc\x0e\x31\x99\x98\x2b\xe6\xae\x08\x66\xbf\x60\x5c\x9f\x6b\xf1\x6e\x3a\xb9\xbe\xf9\x38\xbe\xf9\x08\xae\xca\xdd\x83\x60\x28\xf2\x8e\x72\xa9\xf4\x56\x03\xf4\x1d\x22\x29\x3a\xde\x72\x89\xd3\xaf\xda\xa6\xa2\x64\x7e\xb3\x05\x9f\x7d\x1a\x49\x0b\x0a\xf0\xf1\x55\xc1\x95\x3b\x99\x77\xd6\xa3\x23\xc1\x18\x57\x90\x08\xc0\xcb\x56\xd1\x0c\x03\xc0\x0b\xf2\xa5\x6b\xb1\xe8\x24\x1f\xcf\x4f\x2f\x6e\xa7\xd2\x4f\x79\x24\x70\xc1\x1e\x57\xcc\x67\xec\x3f\x25\x07\xf1\x2f\x38\xe9\xbf\xce\xe3\xd7\x70\x9d\x81\xa5\x66\x71\x08\x46\x56\xb5\x52\xf8\x18\x03\xe4\x70\xf6\xea\xec\xf2\x78\x7c\x36\x11\xaf\x8e\xcf\x26\xe3\xeb\xef\xba\xfb\xf1\xbe\x40\xba\x4f\xde\x2a\x30\x97\x58\x04\x46\x65\x64\x1c\x15\x59\x3b\x61\xaf\x4b\xd6\xf2\x14\x12\xca\x60\xa0\x32\x3c\x88\xac\x8a\x1f\xae\x96\xa1\x21\x78\x82\x89\x91\x3b\x13\x47\x31\xab\x31\xb0\x8e\x1a\x8e\x0e\xea\x0c\xdd\xd4\x4e\x2f\x2f\xa0\x7d\xa5\x09\xf5\x7f\x8e\x46\x7e\x90\xc1\x5f\xd6\xb2\xf5\xa5\x4e\x1f\x03\x92\xaf\x1f\x2f\x21\x11\x02\xcc\xeb\xb6\xc3\xb1\xb3\xa2\x2b\x16\xd8\x67\x09\x7a\xb6\x08\xb6\x8a\xbb\xf2\x95\xd7\xae\xff\x7e\x7b\x39\x1d\x63\x30\x82\xa9\xf8\xe3\xec\xe3\x3a\x24\x41\xc0\xca\x55\xa3\xf6\x30\x65\x62\xfa\x55\x83\x2f\xdb\x5a\x5e\xe4\x98\xc4\x20\x0e\xa3\xc4\x0b\xaa\x05\x69\x84\x66\x9b\xd6\xbd\x62\x13\xd9\xe0\xec\x1d\xc7\x82\x9c\x8c\x51\x11\x50\x5f\xbf\x8a\xdc\x80\x3a\xb4\xad\x7c\xf6\x74\x5c\xbf\xad\x59\x9d\x29\xe3\x06\xc2\xd2\xff\xf1\xfa\xf6\x6c\x72\x83\x21\x04\x6d\xe1\xf7\x24\xee\x2e\x93\x4d\xc4\x48\x8d\x82\x23\x63\x68\x8c\xdf\xdf\x58\x7f\xa4\xc1\xd9\xf5\x94\x1b\xef\xab\x46\x79\xfc\x89\x47\xec\x6c\xfc\x76\x72\xc6\xae\xae\x2f\x3f\x9c\x9e\x4c\xae\xc5\xc8\xfd\xcb\xc4\x7a\x06\x23\x93\xeb\x8b\xfb\x3e\x15\x4c\xd2\xaa\xe9\xde\x5e\x0b\xf2\xd7\xdb\x5b\x18\x26\x76\x70\x54\x19\x9c\x48\xf7\x95\xe7\x13\x5f\x6d\xf7\x83\xf2\xc1\x5f\x26\x3f\xeb\xfa\x84\x36\x50\xfc\x4e\x22\xda\x53\x41\xff\x37\x0c\x79\xef\xd0\x44\x3d\x63\xe2\x77\xc7\x23\xdf\x3a\x80\x31\x80\x5d\xae\xfc\x7b\xf1\x1f\xf8\x53\x7d\xbd\x26\xfd\x06\x79\xf8\x6a\x14\x72\xff\xf5\x1a\xac\xc0\xf1\xc0\xf7\x75\xbe\x4c\x5e\x97\x97\x5e\x1f\xe5\x07\x3c\x84\xf0\x55\xd4\xe1\xfa\xc7\xc8\xf9\x63\xe4\xfc\x31\x72\x9a\x23\xc7\x79\x35\x5a\x78\x29\xf7\xcb\xfd\x08\x6d\x13\x63\xae\xeb\x8c\x08\x2f\x87\xa4\x56\x0b\xe9\x08\x55\x1e\xc2\xbf\xc9\x47\x23\x54\xe7\xed\xb5\xaf\x16\x62\xbd\xf5\x77\x99\x6b\xb7\xb9\xbb\x68\xdd\xe5\xec\x60\xcb\x61\x21\xee\x33\x21\x73\xfd\xde\x68\xa6\xb7\xa5\x6b\xd9\x4a\xdc\x55\xbb\x0f\xaa\x51\x19\x77\x52\x1f\x3d\x1d\xce\x51\x8e\xaf\x27\x27\x93\x8b\xe9\xe9\xf8\x0c\xdb\x2a\x64\x37\x3f\xdf\x9c\x5d\xbe\x1f\x9d\x5c\x8b\xf1\x30\x2a\xaf\x43\x18\x84\x88\xce\x54\x66\x74\x31\x2b\xc3\x2c\x8a\x41\x1f\xc5\x10\x02\xf3\x31\xc8\x6c\x5d\x4e\xac\xe8\x74\x96\xd5\x9d\xca\xd7\x16\x8c\x4c\x48\xc4\x5b\x67\x26\x4b\xc8\x98\xb9\x0f\x51\x1c\xac\x61\x1c\xac\x99\x1f\x48\xee\x30\x1f\xd6\x50\xb7\xa0\xc4\xb0\x1b\x38\xd7\x0a\xa0\x33\x15\x4e\xb8\xba\x1e\xde\x32\xbc\xec\x89\x99\xb4\x36\xaa\x09\x9c\x95\x31\x2b\xad\xb8\x2e\x57\x23\xff\x7e\xb4\x84\xe0\x51\xd8\x46\xa5\x05\xc4\x41\x2d\xc9\x21\x99\x60\x2a\xa6\xc6\x75\x36\xa4\x90\x65\xab\x2c\x8c\xe7\x47\xaf\x5f\xd7\x42\xfd\xa8\x86\x3e\x0b\xa2\xe2\xf3\xeb\x73\x6f\x76\xd4\x03\x36\x34\x53\x09\x1c\xdb\x05\xad\x75\xb1\xa9\xd6\x52\x1c\xc1\x0f\x99\xb0\xb0\x96\xf1\xe0\xaf\x41\xe4\xc7\x4f\x19\x53\x7e\xe7\x80\x87\xf7\x6a\xc0\x2f\x90\x1f\xb3\x02\x73\x07\x7c\xef\x4a\x40\x77\x00\x69\x23\x95\xe6\x91\x7c\xa0\x80\x89\xbf\xbf\x56\x9d\xb0\xc4\x76\x15\x3f\xf1\xf4\x66\xc1\xc3\xb0\x5f\x1b\xf5\x05\xf6\xd2\xe2\x8a\xed\x8f\x99\xe4\x9f\x67\x26\x21\xb0\x8c\x05\xce\x90\x5b\x4e\x25\x8e\x14\xdd\x46\xf9\xf0\xf3\x56\x0f\x55\x0a\xa2\x00\xe1\x11\xbd\xd0\x50\x1e\xa1\xb7\xff\x87\x50\x49\xa6\x3f\x5d\x62\xea\xd0\x9f\xd8\x4f\x93\xf1\xc9\xe4\x5a\xa5\x11\x1d\x0b\x8d\x0f\xb4\x90\xb8\xc8\x93\x22\x67\xa0\xfb\x5b\xa8\x44\xc3\x71\x20\x2b\x11\xca\x71\xbf\x96\x9b\xf5\x81\x8d\xd2\x6e\xcc\xeb\x7a\xdb\x55\xa8\x2d\x2c\x69\xb5\x5e\x8d\x08\xda\xb6\x58\x2c\xea\x3b\xb6\x4e\x73\xdf\x40\xc2\x64\xaa\xe9\x8a\x46\xdd\x87\x90\x70\xb4\xd7\x71\x47\x90\x2c\xbc\x48\x8c\x43\x19\xe4\x81\x88\xc4\x54\xd7\x15\x51\x73\x23\x61\x8f\x46\x5f\xcf\x15\x89\xbc\xea\x68\xbb\xe4\x20\x01\xb3\x26\xe3\x8a\xd3\x7c\xa7\x41\x81\x4a\xa1\xe4\x8e\x56\xab\x8c\x50\x80\x5a\x11\xe9\x89\xd1\x70\xcf\xe0\x00\xd6\x9a\x5a\x5f\xd4\xed\x37\x0b\x2e\x88\x6d\x28\xf5\x45\x6b\x71\xb0\xfa\xb0\x6d\xdb\x67\x20\xb6\x3e\xd1\xa2\x8a\xbb\x17\x28\xce\xed\xd5\x72\xf0\x45\xfb\xa8\xdd\x04\x9c\xb1\x35\x4e\xbc\x08\x90\xb4\xf5\x7a\x21\x51\x6b\x41\xed\xec\x6e\x64\x65\x1b\x49\xa2\xe1\x8a\xb0\x79\x78\x44\x69\x2d\x53\x4d\x3a\x1a\x69\x8f\x32\x52\xf9\x87\x46\x0f\xa1\x37\x67\xef\x26\xe3\xe9\xed\xf5\xc4\xce\x92\x94\x40\x81\x8c\x4e\x6e\x1c\x7b\x80\xb3\x27\xe0\x80\xed\xd1\xde\xdc\x56\x15\x76\xd7\xa8\xf9\xa3\xd8\xb8\x66\x04\x86\x55\x79\x77\x9e\xee\xcd\xbe\x8b\xf6\xae\xd3\xec\xb6\x7b\xd4\x94\xa6\x73\x0d\x42\x9e\xd5\x36\x53\x65\x62\x93\xf5\xc9\x76\xf7\xb8\xad\x68\xa8\xea\xee\x5f\x44\x85\x51\x54\xb6\xec\x60\x13\x00\xd7\x5d\x68\xa0\x38\x02\xd2\xaf\xa7\x97\xaf\x55\x10\x76\x3c\x5b\xaf\x4c\xe3\xd1\x55\x79\xc1\xab\xd0\xa2\xe8\x68\x5f\xc5\x77\xa8\x47\x19\x55\xa1\x1e\x20\xca\xc3\x3a\x42\x2f\x78\xda\xbf\x1c\xa5\x2f\xc1\xbf\xbe\xdc\xb2\xb7\xd9\xd9\x6f\xe0\x2b\xc3\x8b\xcf\x83\x7c\x51\xdc\xa3\x51\xfd\xec\x61\xc4\x3f\x27\x3c\x0d\xc0\x59\xc1\x0b\x5f\x2b\xab\xfc\x87\x38\xbe\xf7\x52\x0d\x99\xff\x7a\x7d\xa2\x90\x66\x56\xe5\x55\x19\x3e\x5b\xc4\x62\x1b\xcb\xce\x57\x23\x34\xf4\xb7\x38\x36\xdb\x20\xd4\x6c\x52\xf7\xcf\x06\x4e\xa2\x75\xff\x83\xee\xee\xbb\x59\xa3\x07\x6f\xf4\x49\xff\x65\xe4\x41\xf0\xae\x8f\x70\x8e\x27\x7e\x14\xd5\xfa\x51\xa6\xeb\x91\x77\x17\xbf\xd6\x6f\xbd\x32\xb9\xea\xfd\x6a\x65\xd3\x3f\x34\x1b\xf2\x40\x15\x00\xc4\x06\xcb\x06\x67\xa3\x98\x0b\x1f\xc2\x34\x5c\x96\x76\xff\x7e\x4b\x2f\x51\x5b\xc7\x6a\x12\x72\xb2\xdb\x6b\xd0\xb1\x37\xd9\xb3\xc3\x28\x23\xad\x54\x3a\x6f\x79\x5d\x9c\xb1\xc7\x37\x1f\x4b\xe3\x33\xf1\x67\xb5\xd1\x81\xbf\xc1\x16\xed\xf1\x87\xf5\xeb\x1f\xf0\x91\x55\x67\xdb\x19\x3f\x72\x6f\x88\xd7\x9b\xb9\x4e\xd4\xad\x65\xe9\x1c\x2d\x4d\x6d\xfb\xdb\xd8\x0a\x0a\xa8\x6b\x66\xb6\xfc\xda\x4a\x93\xb9\xe2\x19\xb2\x3e\x2c\xa6\xae\x18\x9d\x8f\xcc\x67\xd3\xcd\x68\xb3\x1c\x9d\x53\x91\xce\xd7\x7d\x35\x7e\x78\xe0\x18\x9e\xbf\xec\x88\x38\x31\xaa\x8e\xda\x3d\x8c\xdd\x88\x91\x31\xd7\x4e\xd1\x3a\x21\xb5\x96\x75\xe3\xd8\xfd\x39\x36\x8b\x91\xf9\xc8\x4c\x4b\x74\x17\xc2\x96\x7a\x35\x2f\x42\x8b\x49\x6b\xf7\x8c\x1d\xda\x02\x23\xcc\x56\x0b\xcb\xc5\xe4\xaf\x1f\xad\x97\x36\xbb\xca\x8e\x98\xda\x8e\xfe\xd7\x6c\x9a\x8f\x2c\x91\xba\x91\x74\xc5\x5f\x1e\xcf\x03\x6d\x9b\xe9\xb3\xab\x9a\x2b\x0e\xed\x09\x29\x70\xd8\x7c\x68\x8b\xd2\x91\x68\x4f\x19\x34\xc7\x90\x75\x9e\xf2\x11\x51\x0c\x07\xba\xce\x92\xd4\x0e\xba\x90\xbe\x95\x77\xa7\x5d\x65\x07\x4c\x49\xac\xa6\x95\xac\x7d\xe2\x59\xbf\xdf\xda\x4e\x5a\x80\xb6\xa7\xde\xe7\x32\x37\xe5\xe0\x6d\xc9\xed\x55\xf2\x5a\x85\x9e\x5c\xd3\x9c\xc8\x55\x56\xe8\xcd\x15\xdd\xe9\xaa\x08\x3e\xd5\x04\x7c\x7a\x71\x32\xf9\x0f\x5b\x20\x5b\x34\x36\xab\x93\xb1\x29\x7f\x69\x1e\x3d\x06\x69\x1c\xc1\xf6\x7e\xf4\xe8\xa5\x01\x9e\xbf\xe1\x3d\x92\x16\x1a\xf4\x06\x42\x6d\x2a\xb2\x0c\xdd\x38\x6b\xf7\xe1\xeb\xb3\x1b\x43\x36\x5b\x8b\xf3\xd8\x8a\xb0\x0b\x4d\xb2\x14\xbd\xdc\x92\x77\xe5\x89\xac\x5b\x09\x2c\x00\x75\x55\x74\xc5\x52\xbb\x5f\xeb\x56\x27\x8d\x75\x9c\x11\x74\x5d\x20\x69\xef\x8e\x1c\xef\xaf\x76\xce\xb7\x4f\x4b\x6c\x9b\xf5\xda\xc0\xc8\x10\x07\x45\xf2\x61\xf8\x38\x48\x9a\x8f\xea\x57\x01\x6c\x72\xf1\xe1\xe3\x87\xf1\x75\xf3\xc7\x87\xf1\xd9\xad\xcd\xa0\xa8\x68\x31\x7c\xb0\x51\x8d\x3e\x67\xe4\xa0\x51\x8e\x30\x84\x75\x75\x63\x04\xfa\xe5\xf5\xa5\x74\x61\xb0\x82\x64\x4b\xc2\xa9\xed\xe4\xee\x11\x08\xe2\x0e\xd2\x1a\x94\xb1\x9e\x13\x92\xee\x35\xc8\xde\x7c\xcf\x4a\x84\xdd\x30\x74\x92\x7d\xfb\xae\x13\x5f\x91\xaf\x4e\x9d\x68\xf5\x40\xbc\xdd\x2d\xa5\x7e\x4c\xea\xdf\x54\x52\x6e\x78\x55\x4c\x90\xbd\xf5\xae\xdd\x30\xa4\xcb\x0e\xe6\x06\x23\x15\x5b\xc9\x21\x68\x81\x75\x7d\x3a\xb2\xf5\x7e\xaa\x1b\x45\x5b\x59\x37\x8e\xf5\x91\xf1\x11\x87\x83\xdd\x0e\xc2\xae\x72\x1f\x4c\x16\xea\x52\x6b\x61\x47\x9e\xd5\x69\x31\xe5\x1b\xe8\x6b\xb9\xa1\xb0\x94\xb9\x97\xb4\x39\x9c\x39\x09\x95\xc4\xf6\xbc\x4a\x5f\xc1\x8d\xb7\x85\x8c\x79\xcf\x08\x41\xdd\x93\x8d\x0d\x06\x6b\x12\x2e\xf8\x28\xbb\xf5\x01\xf6\xea\x59\x1e\x13\xc2\xb1\x95\xa5\xdd\xf9\xc9\xe4\x67\x6d\x17\xab\x9d\xcc\x6d\xaa\x92\x5b\xbc\x88\x06\x8c\xc8\xe6\x46\xcc\x15\xf3\x50\x51\xd9\x5c\xc9\xb9\xe3\xee\x08\x9d\x66\x8f\xb8\x22\x64\xb7\x41\xb7\xea\xa1\x25\xf1\x41\xe2\xac\xb9\x11\x73\x68\xd9\x4d\x93\x10\x34\x05\xb1\x53\x86\xed\x2a\x3b\x60\x1a\xca\x26\x60\x83\xd2\xc0\x56\x01\x45\x64\xdc\x1b\x5b\xa0\xdb\xdc\x0f\xf7\xc5\xd2\x73\x2f\x4c\x23\xe2\xf0\x5d\x5b\x77\x4f\x84\x7d\x31\x81\x42\x2f\x74\xbd\x77\x5d\x6e\xc4\x5c\x30\xf7\xdc\x7d\x10\x28\xd0\xd1\x25\xbe\x2e\x7e\x9c\x34\x96\x2a\x2d\x0d\xcb\x40\x72\xbf\xb6\x46\x92\x53\xa1\x0a\x3f\x89\x47\x45\x04\x7f\x58\x8c\xfb\xdd\x73\x76\x6d\x0d\x7a\x44\x37\x98\xad\xe0\x3a\x0c\x67\xab\x9e\x21\x05\xd8\x7f\x32\x29\x9e\x73\x30\x04\x8d\x18\x6b\x01\x9e\x05\x2c\x79\xba\x94\x52\xec\x26\x04\xdb\x30\xc4\x5d\x3b\x98\xd1\x09\x1a\x3e\x0d\x58\x85\xfd\x3a\x40\x0c\xb6\x41\xf8\x0d\xf0\x09\x87\x89\xbc\xe6\x4a\xae\xe7\x67\x1a\x34\xf2\xda\x10\xa4\x5d\x3f\x83\xc1\x97\x04\x67\xb5\xf3\xf1\x7f\x8c\xca\xae\x31\x6a\x8f\x95\x62\x31\x73\xec\x69\x76\x7b\x06\x69\xc0\x11\xff\xde\xcb\x82\x59\x09\x79\x43\x9a\xed\xf7\xfd\xc7\xce\xa0\xd1\x13\xf4\x1e\xfd\x46\x6e\x43\x44\xd8\xa0\xf0\xb2\xf1\xbd\xb7\xed\x26\xdf\x42\xfb\xed\x20\x7e\xc1\xc0\x6d\x48\xe8\x9c\xd3\x6b\x50\x8c\x27\xd7\xd7\x97\xd7\xd0\x62\xe3\x29\xe4\x64\x13\xcd\x84\x31\x03\x20\xf7\xc5\x95\x97\x2f\xbe\x7e\x15\xcd\x23\xfe\x9e\xa4\xa9\x21\x3d\x4f\x4f\x6a\xf6\xd3\xba\x17\x61\xf2\x0d\x6c\x28\x88\x4d\xc6\xd6\xc6\xda\xf1\x03\x83\x49\xa8\xb2\x05\xc0\x49\x48\x8f\xd8\x9d\x12\x09\xed\x30\x48\xbf\x19\x94\xec\xd5\x89\x4c\x20\x75\xc4\xca\xc9\x92\xfb\xdf\x0d\x83\xbd\x8b\x36\x45\x22\xf8\xb4\x2a\x04\x45\xb6\x91\xa4\xec\xa0\x7a\x82\x17\xf6\xe0\xbf\x74\x2f\xd3\xe5\x64\x32\x49\xca\x43\x90\xca\x54\x29\x92\x80\xc1\x7a\x7c\x57\x7c\xa8\x92\x62\xda\xb8\xa5\x97\x7e\xe2\xb9\x68\xc9\x59\x85\x25\xc3\xd4\x2e\x10\x2c\xde\x53\xc7\xb2\xdc\xef\x48\x2f\x38\x00\x45\x27\xf4\x98\x14\x36\x88\x1e\xe2\x74\x29\xc3\x39\x42\x7e\xb2\xad\xc4\x4c\xbd\xc4\x19\x8a\x05\x55\xbe\x41\xa6\x80\x3d\xcc\x55\xc0\x42\xc6\xd6\x5c\xb1\xfb\x38\x5f\x30\xd8\x84\x63\xbf\x95\xfb\x71\x16\x63\x94\xce\x4c\x9f\x39\xc9\x8d\x48\x2f\x8c\xb0\x98\xe0\x49\x82\xbf\xce\xe3\x77\x22\x4f\x14\xc4\x13\x1a\x54\x6b\x5a\xce\x88\xab\x23\x92\xfb\x20\x97\x53\x02\xb4\xc9\x6b\xd9\x34\xf6\x60\x6d\xc9\xd8\xe3\x5c\x78\xd1\x1c\x83\x9d\x3e\x06\xfc\x09\x3d\x38\x2b\x6b\xce\x59\x5c\x44\xf9\x01\x4c\xc9\x9f\xd4\xc5\x75\x18\x2c\x03\xf1\x04\xf8\x2e\xf9\x12\x1c\x3a\xf1\x09\x8e\xa7\x8e\xc4\x91\xbb\x63\x44\x95\xb5\x3e\x60\x24\xc1\xad\x19\xbc\x4b\x0a\x12\x09\x2a\x3e\xf4\xcb\x2f\x55\xc8\x2e\x24\x9a\xc2\x34\x9e\xe0\xf9\x53\xd2\x30\x25\x97\x33\x17\x26\xf0\xe4\xb3\x4f\x40\x06\x33\x51\xc2\xad\x81\x99\xa9\xb1\xb4\x3d\xd7\x30\x2e\x7c\xf6\x4e\x74\x35\x5f\x74\xa7\xf1\xd5\x29\x7b\xe4\x29\xce\xa9\x98\x1f\x2f\xf8\x00\x29\x0e\x59\xca\xff\x56\x04\xa9\x98\x5e\x8f\xcf\x1a\x05\x8e\xc3\xe0\x3c\x80\x2c\xef\x8c\xfd\x1c\x17\xcc\x4b\x39\x04\xe7\x82\xdc\x88\xe1\x8a\x89\x22\xcd\xa2\x48\xeb\x90\x4d\x63\xa1\xe4\xcf\x53\xcf\xe7\x32\xeb\xb8\xa0\x79\x20\xfa\x0c\xe6\x84\x86\xf9\x5c\xe8\x3b\x6d\xae\xcd\x00\xf4\x41\xe2\x14\x3f\x82\xff\x59\xfa\x57\x1b\x96\x89\xfd\xcb\xb6\x43\xe1\xac\x77\x32\xca\x09\xfd\x27\x1e\x1a\xe6\x9d\xd6\x42\xf6\xbd\x46\x55\x07\x1d\xa1\x93\x47\xd4\x28\x44\x15\x03\xf2\xd9\xab\xbf\x31\xf3\x7d\xd4\xf0\xa7\xe7\x30\x04\xd4\x3d\xa0\xd0\x4c\x02\x31\xfb\x0b\x7e\x18\x03\xf1\xf8\x5d\xe9\x8f\xff\xda\x0b\x03\x2f\x13\x1f\xe7\x5a\x3a\x55\x01\x81\x0d\xb2\xa5\xe7\x7e\x07\x79\xc8\x79\xe9\x8b\xa9\xa5\x16\x75\x31\xcf\xca\x02\x52\x89\xc2\xa5\x3d\x33\xa4\x46\x1f\x50\xb0\x67\x13\xa9\xef\x47\x04\x69\x1a\x1f\x87\x55\x81\x05\xd8\x4b\xd8\x1b\xe3\x9f\x52\x03\x7d\xa9\x06\xa0\x58\x0e\x43\x5f\xb0\x5b\xad\x6f\x7e\x71\xd2\xd5\xd4\x42\xd4\x90\xbf\xbd\x94\x45\xfc\x80\xf8\x0a\xb2\x78\x5d\xec\x20\x7a\x8c\x3f\x99\x9a\x50\x00\xf8\x49\xec\xbd\x1e\x21\xee\xa5\x18\xd4\x2c\x5b\x20\x14\xb9\x5f\x79\x28\x20\x4a\xbb\x18\xb9\x62\x3a\xc8\x15\x4f\x16\x2c\xc5\x7a\x8d\xc9\x23\x1b\x58\xe1\x15\xe6\xc9\x84\x1f\xdb\x88\x25\x36\x7d\xcf\x31\xb4\xe2\x1f\xed\xd7\xd6\x7e\xd4\x6e\x0a\x4a\x25\xce\xc2\xdd\x73\xda\x76\x49\xca\xe4\x99\x80\x4d\x00\xd0\x11\x4d\x21\xb5\xbe\x6c\xe1\xbd\x61\x68\x11\x0a\x52\xb7\x84\x0c\x09\x42\xe3\x4c\xdb\x97\x22\x11\x3d\xe6\x1f\x00\x06\xa0\x7e\xac\x67\x13\xe5\x71\x76\x20\xfb\xca\xd2\x5b\x89\x4d\xe3\x27\x88\xf8\xfa\xb4\x80\x7c\x02\x46\x85\x66\x28\xba\x04\x49\xa2\x88\xcf\x30\xb0\xad\x5f\x2c\x13\x60\x9d\xf2\x19\x66\x79\x85\xb8\x12\xa8\xc0\x0e\x9b\xf5\xd8\x74\x77\xff\xac\x60\x5c\xda\x2c\xf7\x02\x1c\x94\xcf\xdb\x58\xfb\x44\x41\x68\xa5\x64\x85\x3d\x59\x68\x80\x82\x0b\x86\xfb\x51\xb8\x6e\xf0\x91\x40\x27\x93\x50\x2b\xe3\x40\xf5\x72\x8a\xbf\xe4\xcb\x1d\xe5\xfa\xfe\x96\xa0\x11\xda\x13\xd6\x0b\x98\x73\xe1\xc4\x10\x33\xda\x6b\x52\x95\xdf\x45\x93\x34\x8d\xd3\x23\xd6\x7d\x44\x3f\x04\x4d\x07\x09\x66\xe2\x03\x34\x67\xe2\x23\x56\xde\x01\xc4\x76\x80\xed\x49\x38\xe0\xf3\x21\x6c\x37\xde\xe6\xc0\x92\xa1\x76\x3c\x0c\x12\x96\x40\xb7\xf1\xc5\x4e\x69\x06\x31\xab\xfe\x7f\x16\x38\xe9\xa4\x1c\xf0\x3e\xc0\xd7\xf3\x04\x2f\x3c\x2a\x67\xd2\x84\xc8\x02\x5c\x47\x3d\x67\x24\x62\xb8\x40\x57\xf7\x51\x3f\xa9\x66\xa1\x97\x30\x68\xca\xc4\x9b\xd6\xe8\x48\xb4\x5c\x11\xe3\x69\x0d\xa6\x3c\xc7\x9d\xc4\xba\xf7\x5f\x89\x17\x92\xa3\x2d\x60\x12\x29\x57\xbc\xba\x61\x0a\x43\xb8\x1c\xca\xf5\xe6\xb2\x05\xef\x4e\xd7\x59\x92\xc6\x8c\x59\x4d\xac\xe2\xcb\xfe\x5d\x6e\xbc\xe4\x0c\x4b\x10\x81\x4e\xd0\x01\x7b\xe2\xa5\x70\x98\xa1\x8e\x3f\xa2\x62\x79\xcf\xe5\xe4\x78\x1a\x09\x0d\xce\x0a\xad\x3d\x09\x07\x7c\xe2\x43\x06\x62\x53\xf9\x77\x5e\xbf\xdc\xb0\x00\xd5\x51\xaf\x17\x12\x79\xab\x6d\xba\x2a\xb0\xaa\xe4\x80\x41\x2d\xe3\xa2\x1b\x1c\xe2\x1a\x31\x4e\x02\xdb\x85\xb1\xbb\x2a\x0d\x4f\xf4\x32\x2f\x73\x40\xe4\x7c\x99\xc8\x1c\x63\xa0\xb3\x15\x09\x9c\x75\x99\x11\x59\x57\xa6\x63\x8a\x13\xb1\xcb\x5d\x5f\x22\x74\x6c\xb5\x6c\x2a\xd1\x31\x3c\xa5\x81\x90\xec\xef\x41\x62\xc9\x5e\x57\xde\x9e\x73\x99\x8c\xa3\x92\x41\xcf\xd4\x50\x94\xce\x4f\x19\xf9\x42\x4e\x3a\xa9\x47\xc2\x47\x14\xcc\x78\x0a\x87\x4c\xdd\x20\x6c\xeb\x3b\x23\xcb\x17\x5e\x5e\xa6\xbe\x13\x14\x7d\x76\xbf\x62\x70\xfe\x21\x78\x65\xec\x15\xda\xb3\x60\xe2\x37\xc3\x35\x7f\x7f\x8a\x74\xf4\x11\x7f\xc2\x7b\x8f\x6e\x54\xdb\x25\xe9\xdc\x04\x69\x1f\x82\x98\xa2\x77\x03\x7c\x01\xdc\x99\x1b\xaf\xba\x08\x55\xe9\x78\x4a\x7b\x57\xd6\xe1\x0e\xd7\x55\xde\x85\xb3\xd4\x1b\xc0\x68\x93\x75\xc4\x2a\xb4\xa9\xe3\x8e\x40\x9a\x5c\xda\x73\xdf\x2c\xef\xce\xb9\xfb\x86\xb0\xbb\x86\x03\x77\xb3\xa9\x83\xa6\x18\x9d\x0f\xa4\x9b\x91\xbd\x15\x13\x69\x4a\x2d\x8b\x38\x6b\x51\x68\x90\x11\xe2\xd5\x6f\xb5\x25\xa8\x5d\x07\xcb\x99\x67\x21\x76\xe1\xf7\x5c\x2c\x57\x49\x91\x2d\xc0\x7e\xa3\x98\xcd\x78\x96\xe1\xc9\xab\x41\x23\x19\x94\xb8\x83\x4c\x62\x76\xb4\x00\xd7\x28\x45\xe5\x02\x11\x59\xa8\x77\xdd\xf6\x35\x69\x68\x60\x4f\xbc\xd5\xd8\x70\x3c\x53\x6e\x9c\x33\x9e\xe7\x68\x2d\x15\x3f\x60\x29\x33\xc4\x1e\xe4\x1c\x70\x0f\x7b\xe8\x66\x21\xd9\xae\x18\xd2\x65\x5f\xeb\x80\x82\xea\xdb\xf2\xc7\x85\xbd\x2c\xd6\x04\xe8\xd8\x94\xfe\x01\x76\x3b\xf8\x97\x6a\x01\xe8\xb8\x5b\xad\xe5\xf4\x1d\x06\x63\x40\x97\x6d\x18\x01\x76\x8d\x52\x9a\xf1\x0b\x8a\xff\x0e\x7f\xf4\x41\x4a\xa7\x44\x47\x2b\x57\x28\x41\xf1\xa7\x38\xcb\x23\xc3\xb7\x1c\x72\x2c\xef\x94\xe9\x20\x6d\xe0\x2a\x46\x4f\x24\x4d\x1d\x15\x48\x97\x4f\x3e\xe2\x93\x4a\xf6\xa2\x92\xbd\x1b\x66\x2f\xa2\x2e\x32\x6c\x6a\xba\x8a\xfc\xb1\x5c\x86\xe0\xb3\x59\x36\xb0\x03\x29\x77\xbc\xca\x7d\x49\x50\xef\xd3\xb5\xdd\xa8\xb9\xa3\xae\x6c\x07\xb7\x0e\x31\xc9\xeb\xa3\xfb\xf7\xd9\x0b\x08\xf7\x36\x02\xcd\x6d\x8d\xec\x2f\x7c\x55\x5b\xb3\x0c\x22\x9c\xaa\x47\x03\x35\xd2\x7e\x50\x38\xb4\x12\xe6\xaf\xd2\xad\xeb\x6e\x83\xc0\x9d\xa4\x03\x7e\xec\x4c\xad\x6b\xe5\x70\x5a\xcf\x40\xe4\xad\xcd\x53\x9a\xc2\x6d\x8c\x94\xb6\x41\xe5\xdc\x3b\x87\x62\x40\xff\x70\xd2\x64\x57\x39\x7c\xe9\x2f\x63\xf6\x30\x8f\xed\x1f\x89\x63\x6b\x55\xd7\xf2\x54\xe1\x4c\x15\x29\x58\x54\xba\x67\x83\x05\x6e\x5b\x19\x17\x0e\xec\x89\xa7\x9c\xa5\xfc\x77\x65\xf6\xa1\x2c\x6a\xc1\x9a\xcd\x9b\x7b\x26\xa3\x39\x37\x22\xf6\x18\xd5\x6e\xfa\xf8\x5d\xbb\x81\x31\xfc\x32\xa9\x65\xc4\xea\x2e\xb8\x36\xec\x9a\x49\xa0\xba\xeb\x92\x11\x5d\x75\xda\xf0\x6b\x0b\x92\x79\x95\x16\xf9\xcc\x0f\xe4\x95\xd6\xd2\xcb\x67\x8b\x4e\xce\x5d\xd5\x08\x38\xb2\x3c\x5e\xd6\x1d\x54\x56\xf2\x6a\xfc\x15\x3f\x9c\x1f\x82\x3b\x6b\xf5\xea\x3b\x70\x02\x79\x7f\x3a\xc5\xb4\x63\xf2\xf5\xcb\x16\x4b\xf1\x05\x17\xaa\x64\xa1\xfe\x59\xd7\x06\x17\xf3\xd5\xa1\x28\xf7\xb2\xa2\xf3\xf6\x7a\x7c\x71\xfc\x53\x4f\x72\xff\xd3\xe7\x8f\x3c\x8c\x93\x97\xb8\xbc\xbd\xac\x7e\xdd\x8b\x86\x9b\x2d\xbe\x3b\x64\x62\x06\x41\xf1\xf2\x51\x50\xbb\x0e\xcb\x18\x5c\x67\x80\xb4\xea\x94\x49\x19\x22\xe6\x31\x7b\x19\x15\x61\xf8\x92\x49\x6a\x68\x7b\x61\x08\xb8\xd9\xab\xf9\x1c\xc4\x6d\xbf\x80\x31\x2f\xce\x12\xe3\x82\x7b\x60\xc1\x2a\xed\x61\x67\x61\xe1\xf3\xd2\xf0\x1a\xfc\x0b\x78\x96\x1f\x30\x4c\xd7\xa7\x6e\x81\xa4\xeb\x92\x20\xcf\x96\xa2\x05\x02\x31\x13\xb1\x3c\x58\x9a\xe2\x25\xee\x88\x8d\x75\x57\x96\x01\x79\x6e\xb4\x00\xb7\xde\xdb\x53\xf6\xb2\xc5\x7d\xec\xa5\x3e\x5a\x00\x88\xef\x67\x98\x9a\x8c\x65\xed\x39\xf2\x07\xb0\x4a\x92\x37\x61\x29\x57\xb6\x70\xa8\xd5\xe9\x39\xdb\xd4\x71\x43\x20\x75\x06\x17\x1c\xe6\x9a\x04\x34\xe8\xb1\x6b\x73\x17\x6c\x2a\x4a\xe7\xd7\x61\xad\xa5\x2d\x47\xe7\xd4\xd5\xa8\xed\xc5\xe8\x7c\xf0\x14\xa8\x9b\xcf\x46\x31\x3a\x1f\xc2\xad\xa3\x55\x1d\x77\x04\x1d\xb7\x8e\x9d\xe5\xdd\x39\x77\xde\xd5\x58\xd4\x70\xe7\x6e\x4a\x1d\x60\x2e\xec\xc0\xb3\xbe\x85\xb6\xe0\xda\x5e\xdc\x81\xaf\xf1\x86\x55\x57\xcc\x91\x8f\xda\x56\xfb\x30\xc1\x05\x6b\xc7\xa3\x48\x28\x63\xc1\x5c\x2e\x72\xf5\x72\xd2\x74\x39\x0c\xbb\x22\x0d\xb3\xdd\x70\xb1\xd5\x0f\x2a\xee\x46\xdb\x0c\x4d\x29\x72\x4b\xa2\x51\x49\xb2\xf0\x22\xf1\xf9\x71\x8e\xc9\xa4\x32\x24\x40\x2e\x62\xd8\xeb\xc0\x95\x2d\xb8\x32\x4a\xad\x36\x49\x38\xda\x35\xca\x8b\x42\xbd\x41\xcb\xd0\xe4\xc9\x72\x99\xbd\xa8\x35\xa5\x1c\xb8\x98\xee\x9c\x35\xa5\xa8\x5c\x66\x30\x01\x81\x57\x4b\x17\xa3\x96\x82\x44\x5e\x99\xbd\x61\x4c\x77\x05\x1a\xef\x7d\xde\x0a\xef\x9e\x21\x5d\x76\xd7\x5b\x61\x3a\x01\x3a\xb6\x01\x0e\x77\x7b\xd1\xa2\x23\x7e\x96\x33\xfb\x3d\x73\xa7\xb7\x4a\xaf\xc3\x6c\x47\x2a\x74\x94\xbd\x6f\xc0\x7b\x50\xa2\xa3\xad\x6e\x71\xaf\xe1\x0f\x4b\x60\xc6\x4a\x3d\x30\xe0\xfe\x96\x86\x60\xbb\x0a\x9d\xff\x90\xf7\xce\xc3\x10\x75\x91\xc1\xe6\xb2\xd8\x06\x36\x8d\x8e\x3b\xd2\x5e\x37\xce\x3d\xa9\xb9\xa3\xde\xe3\x05\xcd\x5e\x79\x3b\xb4\x88\xfe\xe6\xd1\xed\x4b\x3a\xd2\x73\x45\x5e\x5d\x0a\x35\x9d\x87\xd6\xcf\xd1\x73\xc8\xfd\xa3\x0d\xc9\x84\x2e\x63\xdb\xbd\x97\xb3\x2c\x4e\xc4\x08\x98\xb3\x59\x1a\x60\x58\xb0\xa3\x5a\x1f\xaf\x3d\x36\x4e\x5c\x94\xca\xf6\x98\x64\xd8\x2f\xe6\xa1\x71\x6f\x69\xf9\x5a\x9d\x2e\xd7\x9d\xcc\xf4\xd0\x5c\x68\xb8\x22\x84\x5d\x67\x35\x51\xd4\xf4\xb4\x2a\x36\x55\x1c\xe1\xf3\xd2\x0d\xc3\x16\xb5\x3b\xdd\x7e\x92\x54\xcd\x54\x67\x48\x03\xdd\x41\x82\x8c\x0f\x8e\x4a\x6a\x0e\x50\x70\x50\x22\xa3\xcb\xa0\x8b\x0b\x2a\xc7\x32\x7f\x48\x27\xcc\x06\x25\x87\x23\x96\x1a\x19\xc1\x1b\x0d\x9a\xd9\x03\xf7\xf2\x22\xe5\x2c\x8b\xe5\xa9\x84\xcc\x6c\xb5\xf0\x1e\x1b\xad\x12\xf9\x78\x55\x52\x64\xb2\xb6\xaa\x64\x98\x02\x76\xc8\x8a\xf8\x01\x70\xc3\x2b\xc9\x43\xd0\x43\xe8\x7f\x5f\x20\x22\x8a\x17\xb5\x6c\x4f\xb6\x96\x4a\xd2\x92\xb4\x6b\x7e\xee\x92\x43\xc3\x8a\x91\x26\xe3\xa5\x0a\x58\x5a\xfe\x0f\xb5\x31\x59\x03\x63\xb1\x21\xdf\x03\xcb\x3d\xc9\x0f\xdd\xae\xdf\x9e\x71\xcf\xec\x7b\xb5\x4b\x4b\x0f\xed\x42\x38\x78\xe3\xec\x1c\x03\xa5\x85\x3e\xa9\x68\x91\xf2\x76\xfc\x87\x3f\xff\xcb\xf9\x01\x7b\xf3\xfd\x0f\x3f\xc2\x3f\xef\x0d\x67\xbf\xf6\x35\x29\x68\xe0\xca\x1d\xae\xb3\x43\xb1\xaf\xc2\xb8\x45\xb9\x98\x0f\xab\x10\x2e\x26\x34\xb6\x35\xed\xd1\xc4\x2a\xac\x46\x18\xa7\xe0\x77\x2d\xf6\xd2\x49\xa1\x8f\xd2\xd0\x55\x9c\xca\x77\xe9\x25\xe5\x8d\x20\xc6\x5d\x51\xde\x90\x28\x5b\xca\x97\xb1\x58\x46\xd4\x59\x3b\xae\xb1\x49\xca\x1f\x83\x58\x08\x8c\x0e\x57\x99\x0c\xee\x24\xab\x18\x3a\xa7\x91\x95\xc3\x92\x2b\xe9\xc9\x4c\x7e\xca\xcd\xc8\x7b\x00\x4f\x36\x40\x65\x5c\xf3\xed\x6b\x12\x1a\x72\x56\x40\x46\x43\x64\x02\xae\x76\x36\x96\x04\x36\x75\x08\x08\xf0\x18\x54\x0e\x90\x5a\x20\x7a\xc3\xb0\xea\xae\x41\xe4\x9e\x1d\x75\x30\xab\x17\x20\xd0\x96\x91\x28\x99\x97\x83\xdf\x7d\x2e\x8a\x07\x21\xf7\xcb\x68\x38\x10\x6f\x06\x72\x07\xdc\xca\xd8\x81\x68\x97\x82\x51\xbb\x0e\xaa\x50\x71\x19\x7e\x70\xef\x51\xd4\xc3\x32\xd8\x8b\x61\x31\x98\x07\x8f\x1c\x9b\xde\xd4\x6f\x2d\xb8\x53\x79\x87\xf1\xcc\x0b\x5f\x07\x91\xe8\x74\x11\xcf\x1d\x0c\x72\x4b\x54\x55\x64\x32\x15\x86\xe7\x65\xc6\x66\x10\x97\x35\x2b\x96\xcc\x8f\x79\xb6\xb6\x1d\x13\x03\x39\x89\xd9\x92\xe7\x9e\xef\x99\xec\x10\x06\x23\x6c\xff\x7d\x8b\x65\xd2\x08\x35\x06\x6d\xc8\x45\x8b\xc3\xbc\x22\x83\x6b\xe9\xe1\x52\xea\x5a\x23\x9a\x5c\x7c\x38\xbd\xbe\xbc\x38\x9f\x5c\x4c\xd9\x87\xf1\xf5\xe9\xf8\xed\xd9\x84\x61\xde\x22\xbd\xf5\x91\x55\x9d\x5e\x08\x6e\xf4\xa3\xab\xab\xb8\x6d\xb7\x5a\xe7\xdf\xd0\xb3\x6a\x29\x62\x2f\x96\x21\xbf\x47\x56\x65\xd8\xf0\xef\x21\x8f\xc7\x3c\x0e\xfd\xee\x72\x33\xcc\xf7\x91\x7a\xcb\x8f\xf3\xfb\xbb\x17\x47\x3f\xb6\xe7\xf2\xd8\xac\xf3\x5f\xaf\x21\x06\x14\x1e\x08\xbd\xce\x97\xc9\xeb\xf2\xee\xe4\xe3\x2c\x8e\x1e\x82\xf9\xe1\xef\x59\x1c\x75\xd3\xc9\xd9\xdd\x0b\x88\x63\x7f\x10\x3f\x40\x18\xb8\x79\x76\xf7\xc2\xa2\xd9\xfe\x11\x24\xbf\x2b\xbe\xff\xfe\xfb\xff\xdd\x43\x7a\x7a\x87\x13\xcf\xce\x82\xa8\xf8\xfc\xfa\xdc\x9b\xc9\x9f\x35\x61\x1a\x59\x4b\x97\x2b\x74\x29\xae\x35\x42\x02\x41\xbe\x32\xb0\x0b\xce\x30\xb5\x4b\x2a\x66\x00\x0c\x67\x21\x73\xbb\x20\xb5\xbf\x0a\x12\xf1\x53\xc6\xca\xf8\x99\x82\x19\xa7\xf0\xb9\x7b\xf1\xe5\xee\xae\xc9\xea\x0e\x98\xdd\xd5\xd9\x89\x1f\x5f\xef\x5e\x6c\x70\xbc\x8a\x9f\x78\x7a\xb3\xe0\x61\x48\x94\xcb\x8a\xdd\xcb\xf2\x6b\x35\xbe\xbe\x81\xb0\x4d\x0f\xb0\xeb\xc6\x7f\x7c\xaf\x6f\xef\x7b\xb9\x4d\xc5\xfa\x2f\x29\x03\x1e\x55\xd0\xfc\xfb\xea\xcf\x2c\x08\x1f\x85\xce\xdc\x3a\x0f\xd9\x7f\x41\x1b\xfa\xea\x53\x2a\x16\x77\xc8\x84\xf2\xd5\x2c\x65\xd8\x64\x51\xca\x61\x4d\x86\x38\xc7\x1a\x69\x7b\x62\xd3\xdd\x20\x5b\x4d\xb7\x8c\xba\xda\xfc\xf1\x71\xff\xc1\x3f\xae\xfd\x98\x96\xdb\x90\x2a\xf7\x97\x3c\x17\xa8\x8e\x01\x95\x81\x7e\xa6\xf6\xf5\x59\x22\x66\x29\x83\xd9\x62\x4f\x6a\x54\xd4\x3f\x4d\xa7\x57\xe0\xf4\xf6\x79\x55\x26\x95\x00\x7f\xa4\x92\x4b\x17\x4a\xdb\xda\x54\x54\x7d\xae\x9b\x5c\x48\x38\xe2\x1b\xec\xb2\x69\x28\xb2\xbd\xe4\xa0\x5d\x35\x39\x50\xa0\xa2\x13\x22\xaa\xa4\xc8\xf2\xd0\xad\x0b\x8b\xbe\x3c\x95\x73\xf3\x8a\x0b\x02\x81\x72\xfb\xdb\xad\x36\x1a\x0e\x3a\x7a\xb4\xaf\xbb\xad\x1d\x72\xa2\xb5\xfb\xfe\x6e\xb6\x76\xcd\xce\x59\xee\xbe\x97\x4c\x74\xd1\x77\xc0\x71\x3f\xd2\xf7\xbe\xd5\xda\x33\xf7\x3e\xad\xb2\xef\x3b\xad\xe7\x80\x40\x68\x9f\x47\xf6\xe8\xa5\x01\xce\x5a\xe0\x9c\xec\xa9\xbb\x55\xf6\xe4\x65\x2a\x94\x6e\x6e\x92\x8d\x56\xdd\x1e\x17\x9c\x4b\xcb\x29\x5f\xa6\x71\x40\x2d\x48\x8f\xa3\xa3\x38\x91\xef\xac\xf4\xf4\x5f\x47\x7d\x0b\x42\x7e\xa4\x8f\x16\x67\x5b\xcd\x15\x87\x12\xc8\x26\x6d\x2e\xa1\xa6\x2b\x9a\x5c\x85\x0e\xb6\xc8\x10\x40\xa8\xe9\x8a\xa6\x23\xf0\x71\x47\x69\x67\xae\x2d\xe6\x6b\x87\x56\x39\x08\xdc\x09\x11\xb1\xfa\xad\x6e\x10\x72\x7c\x12\x90\xd2\xc9\xb8\xe2\x6c\xf7\x83\xb0\x8b\xb8\xdd\x87\x14\x15\x6f\x95\x5b\x06\x87\xd6\x7a\x64\x99\xee\x1c\xec\x6b\x3a\xa3\x91\xfb\x57\x27\x38\xa6\xaa\x44\x3c\x0f\x32\x1f\x71\xed\xbe\x10\x94\x1c\xca\x47\x24\x51\xe8\x8d\x4e\xfa\x24\x5a\x4f\xac\x14\x02\x8e\xd8\xca\x74\x64\x60\x09\xbb\xf4\xcb\x9e\x6b\x89\xab\xab\xb2\x23\xa6\xfe\x43\xd3\x89\x92\x23\xda\xce\x24\x21\x5d\xc5\x1d\xf9\x6e\x2a\x69\xeb\xe9\xd1\xce\xf0\xb8\x27\xb5\x81\x51\xf7\x06\x3a\x00\xb6\x36\xbf\x03\x32\x3e\x5b\x22\x44\x8c\x73\x15\x96\xc5\x4b\x92\x30\x98\x49\x1b\x98\xac\x10\xc3\x0f\x72\x09\x75\x40\xb3\xac\xeb\x88\xa8\x9c\x04\x30\x45\xb9\x34\x78\x92\x96\x10\x42\xe6\x77\x42\xfd\xba\xf2\xf2\x45\x67\xeb\xb9\x12\x73\xc4\x8c\xb9\x28\x20\x69\x88\x25\xac\x96\xf2\x8e\x9c\x95\x38\xa5\xfd\x87\x94\x11\x4c\x42\xac\xbf\xa2\x15\x05\x22\x3a\x41\x4f\x65\xd5\x05\x0b\xab\x0e\x20\xba\xc2\x44\x9e\xa2\xfb\x65\x0b\x0f\x37\xab\xff\x76\x73\x79\xd1\xc1\x54\x5b\x9a\xc8\x15\xb2\x80\x34\xf5\x4b\x63\xfa\x0e\xbb\x4a\x44\x0c\x90\x4c\xc7\x52\xec\xf6\xa2\x8e\xfc\x54\x2c\x22\x4b\x96\x5b\xa5\xa9\x5c\x79\x0a\x49\x79\xec\x77\xd4\xa6\x0a\x54\xde\x69\x0c\xc7\x1f\xa8\x02\x54\x63\x04\x8e\x3c\x20\x6b\x51\x17\x0c\xbb\xba\x44\x44\x70\xab\xbd\xbd\x5b\xb7\x5e\x5d\xec\xab\x3b\xe2\x2a\xd5\x72\x4b\x1c\xdb\xc5\x7b\xf2\xc5\x66\x26\x32\xdf\xa8\x33\x04\x02\xdb\x4e\x62\x5b\x99\x8c\x29\xf2\x96\xfd\x77\xd1\x74\x32\x64\x9c\x38\x3e\x71\x69\xb4\xf9\x6e\x9a\xd2\x64\xae\x59\x1c\x3e\x56\xde\xd3\x94\xd1\xd3\x5d\x91\x88\x05\x6d\xbc\xfa\x7f\x29\x3a\x19\x32\x4e\x38\x82\xda\xd0\xfe\x2c\x13\x8b\x39\x50\x70\x46\xd7\xb7\x19\xc9\x74\x88\x48\x21\x7d\x17\x1e\x2a\xc6\xf4\x13\x49\xcb\xba\x44\x44\x7f\x0f\x92\x64\xe3\xab\x74\xe0\x30\xd6\x20\x72\x6f\xdd\x1d\x82\xf9\xb6\xf4\x28\x84\x80\x9c\x32\x59\xbd\x97\xe1\x95\x8b\x97\xce\xd1\x7a\x5f\x86\xa5\xbc\x8a\x33\x0c\xe5\xf4\x52\x7c\xaf\xbc\xfe\x53\x29\x96\x60\x25\xc1\xc0\xde\x7b\xce\xd3\x43\xc6\xde\x81\x02\x18\xc3\xad\xe6\x2a\xca\xbd\xcf\x42\x35\x09\x93\x03\x31\xdb\x72\xf6\xdb\xec\xa1\xb4\x17\x59\x7f\xf9\xd1\xe2\x37\xc3\x2d\xc2\x3f\x18\x7c\xda\x77\x39\x62\x17\xb1\x8c\xb8\x89\xc9\xce\x3b\xbd\x73\xec\x2a\x51\x31\x40\xc8\x4a\x1f\x0c\x60\xd8\x93\x27\xbb\x3e\x92\x14\xe2\xcf\xd8\xef\xf1\x3d\x66\x47\x15\x45\xd1\x77\xe3\x25\x0c\x0b\x08\xed\x95\xe9\xc3\xbc\x0e\x45\x96\x2a\x87\xdd\xf8\xee\x37\x96\x3f\xf3\x59\x21\xe3\x38\xa5\xde\xd3\x3a\x28\xe8\x2c\x16\xdd\x27\xca\x47\xf9\x2a\xe1\x70\xaf\x85\x97\x9c\xeb\x71\xfb\x1a\xec\xa6\x20\xba\xaa\x0a\xc9\xaa\x47\x38\x34\x7d\x82\x64\x09\x86\x6d\x6e\x1c\x3b\x48\x8b\x0c\x4f\xee\xef\xe3\x07\x88\xd4\xf3\x5a\x46\x9a\x4d\xbc\x20\xcd\x54\xe6\x66\x16\xcf\x30\xe9\x91\x5f\x4f\x9c\xcb\x22\xee\xa5\x62\xe9\x86\xaf\xfc\xf3\x32\xbc\x89\xc4\x6c\xc6\x73\xf1\xa5\x0d\xb2\xef\x1d\x41\xaf\xd6\xc9\x1a\xe0\x48\x62\xe9\xaa\xd2\xf1\x54\xcb\x66\x45\x11\x7a\x87\x6c\x28\xf6\xff\x80\x2d\xee\x9f\xb8\x0c\x0e\x7c\x80\xb3\x5f\x90\xe3\xf5\x2b\x86\xbc\x98\x8a\xce\xf4\xf5\xab\x61\xee\xdd\x09\x13\x27\x19\xaf\x52\xb1\xa9\x4f\xf3\xd5\x06\x8c\xfb\x38\x0e\xb9\x67\x88\x4e\xee\x44\x63\x48\x84\x65\xbf\xcd\xf2\x54\xcc\x80\x86\x04\xb5\xbd\x68\x0d\x89\x58\x66\x0b\xde\xfe\x90\x65\x71\x4a\xaf\x19\x8a\x85\xb5\x7c\xef\xc6\xa7\x67\x93\x13\x2d\xb6\xcd\xd7\xf6\x74\x27\xe3\xe9\xed\xf5\x84\xbd\x3b\x1b\xbf\xd7\x7b\x49\x69\x4a\xd9\x73\x41\xe7\x3b\xf6\xc0\xf3\xd9\xa2\xa1\x1d\x67\x76\xd7\xc7\xe4\xfa\xce\xc8\xe4\x4d\x4d\x66\xb9\x33\x21\xd6\x76\x46\xc5\x1f\xc5\x1a\xe9\x0a\xca\x5c\xd9\x19\x53\x9c\xce\x47\xd2\xaa\x0f\xb4\x9f\x34\x96\xc6\x30\x97\xe9\xfc\x5a\xfc\x39\x8d\x95\xbf\xb5\x0a\x5a\xe0\xf4\x95\x07\xe0\xd0\x47\x3a\xd7\xf6\x36\x55\x75\xc6\x23\x1d\xb9\x0f\x2d\x8e\x1a\x08\x35\x9d\xd1\xe0\xe5\x52\xcb\xb7\xc1\xbb\xa6\xc1\xbe\xff\x40\x5c\xfa\x49\x59\x9f\x61\xec\x2e\x34\x5d\xc9\x50\x71\x8a\x45\x47\xe5\x35\x47\x25\xf9\x41\x1d\x30\x41\x40\xf7\x8f\xa5\x8b\xaf\xf9\xbc\xdb\x9d\x90\x3b\xd6\x52\x89\x3d\x80\xd0\xc9\xca\xfb\x5a\x66\xf5\xe7\xd1\x63\x90\xc6\x11\x6e\x6f\x4b\xfb\x3a\xc3\x01\xe8\x80\x94\x1d\xa4\x51\xf7\x40\xe6\xbb\x93\xae\xe2\x0e\x7c\x65\xf8\x83\x18\xa3\x0a\xda\x7f\x5e\x63\x2d\x7b\x14\xca\xa6\x1b\xee\x40\xe5\x9f\xef\x42\x0f\xa2\xae\xa9\xe0\x46\xbe\x5e\x77\xa2\x54\xed\x8f\x47\x1a\xa4\xbb\xc0\xd9\xae\x49\x45\xa3\xbf\xd6\xda\x2e\x60\x4f\x1b\xee\x7d\xc1\xb2\x54\x1e\x8c\x60\x1c\x82\x70\x75\x20\xba\xd5\x27\xb1\x6b\x06\x49\xd0\x7c\x1e\x4a\xf1\xcf\x01\x7a\xf7\xe4\x2a\x4a\x42\xe2\x89\x6f\x2e\xe4\x84\x97\x89\xf9\x0a\x7c\x47\x5c\xec\xa5\x8c\x21\x17\x85\x2f\x83\x58\xbf\xf2\x65\xbc\x8f\x24\x8d\x31\x7c\x03\x98\x0f\x82\xab\x56\xba\x44\xbc\xfa\xf8\x18\x8e\x54\x5c\x50\xc2\x3e\xfe\x29\xc8\x17\x70\x14\x54\x27\x6b\x83\xad\xbb\x2e\x11\xd1\x32\x98\xa7\x9e\x2b\x24\xdb\xca\x44\x4c\xa2\xb7\xcb\x99\x47\x66\x8a\x2e\x69\xcb\xaf\xd1\x01\xc9\xb2\xae\x35\xa2\xf7\x93\xe9\xf4\xf4\xe2\x3d\xbb\x99\x8e\xaf\xa7\x86\xad\x94\xb6\x9c\x3d\xa7\xb3\xcb\xb7\xe3\x33\x76\x79\x35\x3d\xbd\xbc\x30\x84\x7f\xd0\x96\xb3\x75\xf1\x79\xaf\x4c\x31\x2e\xc7\x55\x90\x59\x93\x51\x7e\x57\x71\x7b\x01\x4b\x43\x1e\x48\x6f\x20\xad\xf6\x55\x8c\x21\xb1\xce\x7d\xe2\xb9\x50\xc9\x66\xdc\x06\x89\x3d\x01\x3a\xb6\x24\xc9\x76\x15\x37\x7e\x27\x3c\xc8\x12\xd6\x36\xc1\x87\x87\x06\x5b\xc9\xce\xf2\x64\xce\x6a\x9b\x6b\x48\xf0\x48\x6b\x47\x67\x7a\x64\xe4\xbc\xe6\xbb\x51\x45\xfe\x62\x5f\xf6\x90\x6b\xe0\x19\x10\xd0\x5b\x07\x4f\x0a\x76\x01\xca\xa2\x7b\xee\x87\x39\xb9\x4d\x40\xa3\x79\x9e\x9e\xb2\x07\xce\xe4\xd6\x00\xdb\xc3\xfe\xde\x61\x3d\xa9\xb9\xa3\x1e\x32\x40\xfd\xb0\xc4\x7b\xc8\xd4\x15\x1f\xdb\x39\xbb\xef\x2e\x59\x91\xe5\x7d\x96\x4c\x1e\xfb\x65\xee\xd2\x26\xd9\xde\x1a\x60\x68\x4e\x64\x69\x75\x7e\xc3\x16\x6b\x8b\x4d\x55\x32\x1e\x69\x00\x9d\xad\x33\x7d\x81\xf1\x73\x16\xe4\x71\x1a\x88\x79\x5b\x50\xd7\x9f\x5d\xb9\x90\xe8\x87\xaf\x22\xbc\x62\xfa\x8b\x6a\x73\x4d\x80\xd4\x7e\xc5\x6c\xb5\x49\x69\x4d\x48\x80\x53\x8b\xcb\xd2\xe1\x48\x8d\xdc\x88\xc8\x87\xe6\x20\x4f\xa9\x4a\xc6\xa3\x02\xba\x6e\x12\x65\x76\xe3\xc0\xb2\x36\x1d\x55\x51\xaa\x2a\x98\x06\xaf\xb9\x10\x32\x95\x4f\x40\x3e\x7c\x0f\xcf\x2e\xac\x1b\x71\x00\xca\x64\x69\x9a\x5c\x32\xba\x4a\x60\x4f\xc0\x01\x9b\x4a\x2b\x23\xfd\xea\x29\xfd\x72\xee\x40\x82\x3a\xc8\x37\x68\xc3\x77\x5b\x27\x94\x79\x8b\x7f\xc1\xd2\x10\x35\xe3\xe8\x28\xd5\xa1\xfa\x4d\x54\x27\x35\x82\xed\x88\xf9\xee\x9a\x64\x3b\x16\xc2\xb7\xd0\x56\x3b\x41\xb5\xef\x46\x7c\x86\x16\x7a\x06\xf1\x77\x27\xe5\x8e\x85\xd9\x4f\x07\x7f\xe6\x0e\xfb\xcc\xc3\xfb\x5b\x1d\xc7\xbb\x1c\xb0\x7b\x1c\x99\xd5\x91\x7a\xe6\xba\xc7\x72\x21\xe5\xac\x3f\xc8\x41\xee\xba\x9f\x22\x52\x71\x46\x89\x31\x83\x40\xab\x57\x17\x51\x36\x11\xb5\x9c\xdb\x7d\x58\x66\xfb\x91\x79\x67\xf2\x0d\x22\xcb\xf6\x9d\xce\x0e\xb3\xfc\xed\x95\xb7\x7b\x8b\xec\xb1\x01\x9e\x55\xde\x96\x24\x84\x7d\xf6\xfb\xce\xf4\xfa\x20\x77\xdb\xf7\xdb\x13\x70\xc3\x96\xb5\xe5\x3e\x34\x7e\x47\x9b\x19\xbd\x3f\x65\xba\x34\x39\xb8\x19\x81\x17\xc3\x0d\xfc\x05\xce\x32\x8d\x2e\x5b\x69\x21\xc3\xdf\xad\xec\x83\xb5\x5b\x7b\x64\xfb\x6d\x83\x1d\xb0\x23\xcb\x2d\x2d\x3c\xdb\x13\x7a\xbe\xd6\x5d\x3a\x50\x92\xf2\xee\x8e\xd1\xa0\xb2\x3a\xce\xf7\x7d\x48\x5a\xe3\xc7\x40\xcd\x18\x87\x00\xb3\xe5\xcc\xc2\xc2\xc7\x05\x15\x4e\xe5\x94\x45\x21\xbb\x8f\xfd\x95\x16\x2d\x9d\x00\x0d\xdb\x92\xe7\x8b\xd8\x67\xaf\xde\x4f\xa6\x07\x57\x97\x37\xe2\x3f\xb7\xd3\x83\x93\xc9\xd9\x64\x3a\x39\xe0\xf9\x4c\x6f\x2f\x46\xac\x6d\x8f\x2a\xce\x72\x18\x1d\x7a\xc6\x5b\x05\xc8\xb4\x55\x16\xa8\xe5\x6a\x94\x15\xf7\xd2\x8a\xc2\x20\xa8\x55\x25\x6b\x0c\xa7\x17\x37\xd3\xf1\xd9\xd9\xe4\x84\x5d\x9d\xdd\xbe\x3f\xbd\x60\xc7\x97\xe7\xe7\xe3\x8b\x13\xbd\x17\x89\xb6\x9c\xed\xa6\xeb\x74\x1e\x81\xfb\x6a\x23\xf8\x84\x96\x9b\xb9\xb0\xbd\x98\xaa\xab\x56\x11\x16\x54\x3c\x92\xb2\xef\x76\xe4\x7c\xa3\x56\xa7\xe0\x8a\xc5\xa8\x9e\xe5\xec\x36\xf3\xe6\x86\x66\xd0\x95\x73\xe5\x64\xd2\x26\x4c\x45\x9d\xf9\x55\xc9\x0a\xc2\x20\xe2\xec\x21\xf4\xe6\x99\xe8\xc2\x9f\x67\x3c\xc9\xd9\xe8\xe1\x3b\x88\x20\x0d\x26\x9e\xe0\x80\x05\x8e\x88\xdc\x67\x4f\x0b\x30\x49\x95\x59\xe1\xd8\xb2\x08\xf3\x20\x09\xb9\xb4\xd6\x92\x37\x6d\xcd\x5e\xa1\x9f\x62\x9f\x13\x8a\x7b\x7b\x5d\xc4\x6b\x3f\x71\xe5\x09\xee\x43\x6e\x03\x7b\x31\xbb\x29\xb8\xa3\xbb\xae\xf9\xa6\x97\x4c\x68\xe8\xba\x29\x0c\x81\x4e\x11\xce\x5c\xb1\xb5\xd7\x77\x40\x56\x3a\x65\x88\x5d\xfb\xd1\x3a\x68\x03\x78\x12\x80\xc1\x36\x66\xd1\x93\x99\x69\x54\x7e\x9a\x0f\x5e\x18\xf8\xaa\x96\xb4\xd5\xc6\x1c\x81\x47\x77\xd1\x2f\x90\xdf\xe2\x8b\x4c\xc5\x71\xf7\x22\x49\xe3\x3c\x9e\xc5\xe1\x9d\x60\x77\xf7\x22\x9f\x25\x77\x2f\x0e\xca\x77\x3e\xc6\x49\x41\x31\xe5\xeb\x37\xdf\x1f\xfe\xf0\xe3\x8f\x87\x6f\x0e\xdf\xfc\xaf\x5a\xb1\x24\x4e\xf3\x4c\x16\xf8\xd3\x9f\xbe\xff\x17\x48\x00\x22\xc4\xb9\x8b\x7e\xb5\x68\xb0\x7f\x6c\xb1\x1c\xbe\xa3\x74\x0e\x45\x7b\xe6\xb2\x6f\x58\x34\x93\xb1\x16\x01\x05\xe6\x37\xc4\x25\x47\x05\x6e\xf3\xf9\x83\x98\xc4\xd0\xb1\xbc\x8c\x76\x57\x72\xd0\xc2\x52\x69\x12\x47\x8a\xc4\xd5\x78\xfa\xd3\xeb\xe9\xe5\x6b\xb9\xb0\x8f\x30\x6b\x0a\x1b\x31\x57\x66\xd6\x6a\x80\xa4\xbf\xb6\x54\x80\x8e\x73\x85\x7f\xc9\xb8\x7c\x26\xad\x99\x56\x99\xd6\xc0\xd1\xcc\xb4\x0e\x6f\x16\x20\xd3\x66\xe7\x7c\x19\xa7\x7a\x15\x5b\x5b\x8e\xce\x69\x59\x64\xb9\x72\x69\x8e\xa3\x51\xc4\xe7\x82\xc9\x23\x2f\x63\x89\x74\x23\xb0\xad\x4f\x40\xf6\x88\xe3\x1f\xe6\x87\xd6\x68\x57\x06\x4c\xd6\x35\xc9\x68\xae\x95\x47\x22\xfc\x6b\xd8\x7f\x76\x15\x27\xf3\xbd\xb9\x39\x63\xc7\x3c\x95\x0e\x2d\x5f\x54\xf6\x59\x74\x30\x9c\x06\xc9\x39\xcf\x60\x2d\xb2\xc0\x43\x25\x43\xc6\x29\x63\xa2\x38\x7d\x2e\x9b\xaa\x74\x3c\xd5\xd5\xca\x91\xde\x38\xcb\x5c\x98\xcc\x53\x26\x98\x2a\x94\x7b\x8d\x58\x9d\x1e\x03\x5f\x25\x82\x19\xcd\x50\x87\x3c\x64\x57\x21\xf7\x84\x90\xea\xa5\x18\x35\xb5\x2e\x1b\xdf\xff\x0e\xeb\x00\x46\x44\x44\x40\x90\x5d\x25\xc0\x14\x35\x51\x2e\xf6\x6e\xe8\x88\xb0\x5d\xc1\x34\x03\x7e\x2b\xc0\xc8\x6d\xb9\x0e\x84\x08\x47\x77\x60\x99\x26\x0f\xa4\x5e\x8a\x55\xa7\x5c\x69\xa0\x48\x95\xea\x16\xfd\xd4\x3a\x5b\xa2\x2f\x59\xba\x1c\x90\x1a\x1d\x4f\x88\x51\xe9\x81\x4c\xe9\xea\x44\x9b\xea\x6c\x3c\x00\xc5\x1d\xa0\x1f\x04\x70\x2f\x8c\x95\x7d\xea\x2c\x2e\xa2\x1c\x59\x94\x8b\xd3\x31\x3c\x01\x36\xa7\x8d\x32\xb5\x35\x0b\x0d\x1e\xed\xd6\xbb\x9d\x72\x1b\x52\xea\x6c\xbf\x62\xf7\x62\xe7\x2e\xf7\x12\x35\x1f\xb1\x3d\x5f\x06\x12\x8f\x54\x85\xce\xe0\x37\xa9\x7b\xf6\xa0\xe8\x8c\xbe\xd1\x80\x8d\xa6\x1b\xe0\x1b\xf5\x23\xbe\x43\x99\x42\xcc\x0f\xb4\x90\xc9\x81\x36\x46\xcd\x80\xd2\xd9\xb1\x21\xcb\x89\xfb\xd1\x6a\xfd\xe8\xc4\xab\x2b\x4e\xe6\x5b\x9e\x1a\x1d\xb2\x75\x18\x2e\xf1\x50\x1f\x61\xcf\xbe\x22\x1d\x4b\xcb\x10\xa1\x8f\x38\x22\x95\x41\x50\x3a\x4d\x0d\x7b\x98\x11\x34\x2c\xdc\xd5\x03\x77\x82\x64\xec\x10\x1d\x11\x1d\xb5\xbd\xd4\x5b\x22\xaf\xa9\x7c\x42\x6a\x64\x22\x15\x32\xca\xa2\xe3\xd0\xbc\xb5\x14\x99\x8b\x0c\xe8\x87\xb1\x3a\xbf\x6c\x06\x0d\x7b\x29\x8d\xd7\x31\xe4\xd9\x07\x2f\xb4\x8c\x33\x7b\x1b\xf1\x72\xd8\xae\x89\x6f\xd1\x66\x47\x9d\xa1\x70\x8c\x27\x2c\xa8\xae\x07\x70\x49\x81\x72\x94\x91\x25\x6d\x7b\x1d\xb5\xba\x75\xbb\x9e\x79\x62\x32\xbf\x14\x82\x9a\x63\x1a\xe8\x8a\xd9\xf3\x81\x80\x74\x70\x84\x55\x7a\x78\xc3\x51\x56\x8e\xf7\xaa\xf2\x9a\x58\xcf\xda\xbe\xa6\x03\x9a\x2a\xff\x4e\xe9\xa1\x03\x91\x61\xe1\x85\x0f\x3b\xb7\xba\xa7\x8e\x05\x40\x17\x62\x74\xcc\x6b\xaf\xf3\x6e\x48\x6d\x65\xe9\x1c\x8d\x89\x72\x35\xa5\xe8\x5c\x94\x2b\x8d\xfa\xc2\x33\x79\xc3\xae\x6c\x08\x94\xb7\x4a\xf9\xd0\x2a\xeb\xf0\x70\x84\xe9\xb2\x6c\xf8\xab\x74\x63\xd4\x56\x70\xe1\xdd\x74\x28\x74\x1c\x6e\x44\x32\x0e\x38\x2b\x03\x29\x0f\x2d\x2d\x2c\x20\x69\x6b\x38\x70\x97\xb6\x3a\xaf\x3c\x65\xb9\x14\x40\x60\xc9\x24\x95\xe1\x9a\xe5\xd5\x21\xcb\x56\x59\xce\x97\x07\xca\xb8\x02\x4f\x5f\x22\x48\x19\x02\xb3\x20\x98\xfb\xa8\xd7\x98\x8e\x17\xb2\xee\xa6\x45\x84\xb3\x94\xde\x62\x60\xdf\xec\xe9\xed\x82\xd6\x23\x72\xc0\x94\xe9\x65\x55\xb3\xc7\x0f\x8e\xe3\xaf\x07\x49\x3a\xfe\xca\x76\x47\xa5\x83\xed\x86\xa7\xaf\x41\xe4\xbe\x4e\x34\xf7\xf0\xc0\x31\xee\x6a\x49\xb5\x66\x33\xdb\x81\x87\x48\xc3\x15\xa1\x9c\xfc\xca\x98\x74\xca\xb4\xd2\x16\x5a\x47\x65\x57\x4c\xa8\x1a\x12\xa1\xb4\xd7\xa1\x21\xa8\xc5\x4a\xa9\x4d\x6f\x9d\x5d\xc7\xa2\x1a\x0d\x47\xe5\x11\xee\x6d\xcd\xbd\x66\x24\x56\x15\x69\x58\x36\xfd\x2d\x95\x90\x2a\x96\xf3\xe6\x5b\x8c\x6f\x58\x44\xd1\x46\x0a\x82\x8e\xaf\x38\x34\x8f\x61\x24\x94\x99\xe4\x11\x85\x0a\x14\xd2\x53\x1c\x2b\x82\x54\xec\x0d\xbf\x9c\x4c\x9a\x2d\x76\xe2\xeb\xa8\xe4\x88\x61\xed\x5b\x63\xc9\xbf\xad\x82\x1b\x6f\xe5\x2c\x63\xc7\x77\xab\x30\x89\x27\x7c\x42\x75\xd1\x2d\x54\x79\x79\xbb\x9d\x99\x6e\xc5\xed\x2a\xd9\x63\x88\x85\x92\x00\xfd\x69\x9d\x4d\x02\x82\x71\xa6\x18\xe3\x47\x26\x9b\x31\x6d\x51\xb6\x6a\xd3\x77\xb0\x67\xb1\xca\x32\x1c\x18\x96\xfc\xb6\x32\x04\x19\x55\xed\xd8\x60\xfe\xd7\x5e\x88\xc2\x63\x2e\xbe\x05\x87\xbd\x73\xa6\x0f\x24\xa7\x2b\x46\xe2\x83\x71\x32\x8a\xdc\xd8\x4b\x34\xc5\x48\x7c\x52\x30\x06\x10\x53\x0b\x8f\xfc\x24\x0e\xe0\x46\x20\x90\x59\xce\xf0\x02\x4e\x5e\x4a\x9a\x2d\x3b\x1d\xa9\x10\x50\xc6\x9f\xd0\xb0\x3a\xc1\x63\x9b\x87\x2a\xdf\xe3\xcb\xed\x58\x1a\xcd\xfb\x42\x03\xe4\xfe\x24\xad\xf1\x9f\x43\xbc\x4e\x4f\x34\x42\xb2\x2a\xa3\x27\x2a\xe5\x67\x16\xfb\xea\x2a\x3d\x8e\xf8\x66\x3a\x0a\x2f\x8a\xc5\xa0\x83\x44\x31\xb7\x11\x9e\x96\xc7\x8f\xa2\x47\x05\xbe\xcf\xa3\x03\xb9\xed\x14\x04\x47\x15\x25\x69\xc5\xf3\x14\x60\xd4\x12\x19\xaa\x11\x33\xd4\xd4\x92\x33\x69\x9b\xe3\x1b\x44\x48\x6d\x5d\x18\xd5\xa3\xea\xd2\x7c\x53\x93\xa9\x29\x7d\x10\xa0\x18\x45\xd4\x4f\x78\x43\x90\x24\xe0\xaf\xd9\x9b\xaa\xd8\xc9\x82\x5b\x81\x0b\xed\x43\x11\x86\x2b\x08\xeb\x6a\xc0\x4a\xab\xee\x88\x2b\xc8\x6a\x91\x68\x37\xce\x42\xfc\x00\x2c\xe3\xc4\x58\x39\x60\x49\xd3\x3e\x81\x07\xd0\x3f\xd0\x2e\x54\x74\x29\x34\x76\xc7\x9c\x9d\x1d\x99\x91\xf7\xc9\x9a\xd0\x1e\x89\xda\x8b\xc6\xa5\xfa\x8e\x99\xbb\x16\xb0\xf9\x36\xa4\x52\xb2\xae\x47\x40\xf2\x19\x33\x1d\xe1\xa1\x7c\x15\x90\xae\xea\x97\x38\xb2\x8a\xe4\x00\x53\xd4\x04\x51\x61\x5a\xda\xfb\x90\xea\x81\x77\xad\x86\x28\x05\xd7\x11\xac\x25\x1d\x0a\xd2\x60\x59\x2c\x99\xb7\xc4\xbb\x71\x31\x15\xaa\x8b\x1a\xd9\x8d\xaa\xb9\x6f\x7d\xd1\x2e\x5e\x2c\xbc\xc7\xd2\x87\xe3\xcd\xf7\x3f\xfc\x78\x7e\xc0\xde\xbc\x17\xff\xff\xfe\xbd\xfe\x20\x67\x67\x7c\x9e\x4b\xd2\x43\x36\x7a\x03\x8b\xa6\x98\xd7\x31\x6a\xa4\x28\x5c\x44\x78\xbb\x05\xf7\x99\xc8\xc3\xb4\xfa\x3c\x23\x96\x6f\xb9\xc5\xd8\xab\x13\x99\x66\xeb\x68\xfd\x6e\x07\x9d\x6a\x57\xf8\x6c\xf7\x06\x25\x70\x1c\xd6\xaf\xc4\x00\x16\x9b\xe1\x38\xf2\xb3\xef\x70\x8c\x1f\x9f\x9d\xc2\x7c\x89\x03\x7f\x63\x0b\x2c\xe7\xa7\x03\x86\x5a\x88\xb2\x46\x64\x19\xcc\xfe\xea\xba\x32\x13\x13\xfe\x0a\x6b\xe8\xad\x74\x6f\xa4\x22\xa2\xee\x37\xd7\xdc\x1d\xe4\xa8\x5d\xea\xaa\x8f\xfe\xc3\x9f\xff\x05\xda\xb4\x6c\x5a\xc3\xc7\xa3\xd4\xb5\xef\xb3\xd2\x66\x54\xdd\x30\x77\x99\xa1\x76\x94\xb6\xe7\x8a\xc1\xcb\x79\xcb\x1d\x40\xa5\x48\x36\x62\x20\xac\x35\x49\x3d\xb4\x01\x48\x5a\xe3\x07\xbb\x79\x2d\x92\xe6\x4b\x12\x4d\xfd\x86\x71\xe3\xad\x3d\x55\x93\x3f\xe3\x85\x9b\x2f\xe3\x05\x7f\x62\x57\x5e\x96\x3d\xc5\xa9\xaf\xa7\xdd\x5a\x88\xc4\xc3\xe8\x8b\xb9\x5d\xc0\x9e\x76\xcc\xc6\x57\xa7\xeb\x8d\x68\xc6\xc5\x44\x75\x2b\x34\x43\xd8\xc8\x89\xad\x6a\x10\x4d\x83\x04\x36\x7a\xca\x0a\x40\x14\x56\x0f\x40\x2b\x93\xe7\xb0\xa2\x07\x95\xf5\xf5\xcb\xd6\xee\x18\xd9\x4e\x38\xe0\x16\x36\x93\x9b\x31\x0f\x82\xc7\x33\xf6\x73\x5c\x48\x0b\x2b\x5f\xe6\xf1\x28\xcf\xeb\x60\x3c\x88\x6d\x17\x8c\x0d\xbc\x37\xd9\x0a\x9f\x52\x8e\x9e\xf2\x8a\x45\x46\xe8\x14\x0a\x77\x0e\x0e\x73\x62\xf0\x09\x01\x6b\x81\x7c\xaa\x22\xca\xd9\x0e\x14\xdc\x46\x5c\x0b\xf1\x52\xdf\x72\x57\x08\xc3\x4b\x4b\x78\x01\x20\xad\x93\x3d\x64\x53\x31\x19\xa6\x62\x4e\xc4\xec\xcc\x2d\x8c\x0f\x24\x30\x1e\xd5\xa5\x94\x01\x54\x42\x69\x05\xad\xcb\x5b\x37\x5c\x8b\x2a\xa1\x41\x1a\x25\x35\xce\x3d\xcf\xde\xbc\xd3\x85\x9a\x05\x15\xb8\x12\x04\x9e\x8b\x6b\xc2\xe7\xc0\x66\x24\x84\xec\xe5\x2b\x31\xb7\x6e\x7c\x95\xcd\xa0\x25\x6e\xcd\x9a\x04\x9a\xa1\x52\xda\x76\x43\x5e\x9c\xe6\x90\x30\x0d\xbd\x7e\xf4\x28\xb3\x89\x74\x0e\x85\xdd\xa7\x19\xcf\x76\x29\x0a\x97\xb5\xad\x45\x37\x2f\x7d\x59\x0a\xc7\xd9\xc2\x8b\xe6\x62\x05\x7d\xe2\xe8\x96\xed\x1b\x66\x63\x63\x61\x0a\xcf\xf2\xda\xab\x53\x44\x4d\x41\x0a\x2f\x43\x00\x7b\x13\x67\xab\x6a\x14\x1c\xd2\x2d\x39\x4b\xf8\x0c\xab\xa0\x37\xef\x56\x73\x1a\x97\x19\x2a\x05\x0a\x3a\x18\xdc\x18\x34\x11\xaf\x65\xe5\xb2\xc4\xfd\x03\x38\xfc\xc2\xd1\xa4\x3c\xac\xb7\x96\xad\x46\x3d\x13\xf8\x81\x19\x50\x65\xab\xc2\xa4\xb7\x70\x7e\x27\x43\x73\xac\x11\x74\xc9\xe1\x48\x8c\x8a\x79\x08\xa8\x7b\x47\xa8\xff\x8c\xc6\xbe\xdd\x87\x1a\x11\xb5\xc5\xb4\xd3\x56\x8a\xc2\xa5\x32\x54\xe9\xe0\xd3\x5e\x8e\xc4\x49\xdd\x66\x37\xf3\x97\xe0\x79\xc3\x3d\xe7\xb0\x8b\x35\x2e\x9f\xa4\xea\x2e\xb8\x36\x2f\xb4\x2d\xf1\x18\xab\x51\x70\xd8\xda\xd0\x99\x8a\xd2\xf8\x35\x43\x30\x76\x76\x81\x8e\x0a\x2e\xbc\x21\x2d\x02\x29\x29\x80\x0d\xbe\x1e\x44\x5d\x65\xf8\xd2\x9a\xda\x01\x8e\xff\x77\x22\xdd\xe0\xec\x5c\xe4\x5e\x5b\x6c\x59\xf7\x1c\x6d\x15\x07\xfe\xf6\x6c\xfb\x71\x1b\x64\x29\xde\xf5\x1a\x4c\x53\x55\xba\x55\xa0\x7e\xf4\xc8\xc8\x21\xca\x61\x16\xcc\x23\x6e\xfe\x9c\xba\xa2\x0e\xfc\xba\xfb\x4e\x6b\x39\x12\x27\x65\x09\xe5\xb8\xde\x91\xaa\xbb\xe0\xda\x48\x85\x60\x09\xc7\x54\x8b\x84\x02\xad\x79\xd7\x97\xd5\xae\xad\xe4\x42\x86\x82\x13\xaf\xd4\xcb\xe0\x23\x8e\x20\xe9\x34\x08\x08\x73\x16\x4a\xe3\x9d\x20\x5a\x9f\x28\x1c\xbf\xc3\xe3\xbc\xe6\x70\x15\xe5\xa0\x90\x01\x69\x0f\x5a\x14\xc4\xfc\x48\x5e\x26\xc3\x55\x47\x8e\xa9\x61\xe3\xa5\xbc\x01\x31\x61\xb3\xa9\x65\x8f\xa2\x0a\x8a\x53\x1d\xcc\xeb\x79\x9b\xca\x5a\x73\xbc\xfc\x8b\x96\x41\xfd\x95\x3d\x3d\x99\xf4\x53\x4f\x74\xf3\xbd\x3d\xe5\xeb\xf7\x6c\x7c\x72\x7e\xaa\x4f\x4b\xdd\x52\x82\x46\xfd\xf6\xe4\x74\x7a\x79\x6d\xa6\xbf\x59\x86\xc4\xe1\x7c\x7c\x31\x7e\x3f\x31\x73\xd8\x2a\x43\xe1\x60\x68\xf8\xc6\x4b\x7b\x9a\x06\x03\xec\x4b\x27\x2b\xeb\x4b\xd8\xa8\xa2\xb3\x84\x0c\xa7\x91\xd5\x0d\xb7\x6b\x97\x92\x26\xb6\x44\x02\x24\x6c\x8d\xf3\xe1\xf2\x2c\x57\xe6\x85\x36\x42\xb2\xaa\xe7\x8e\xa4\x19\xa3\x03\x4e\x50\x94\x3d\xcf\xfa\x90\xd9\x1e\x1e\x89\xd8\x50\x98\xf5\x53\xbc\x7d\x45\x0a\x16\xfd\x35\x61\xf3\x25\x85\x66\xb7\xbf\x4d\x7b\x21\x7b\x1e\xd2\xf2\x8f\x57\xb1\x67\x7c\x69\x19\x50\x9a\x7e\x56\x86\x5a\x7a\x00\x74\x0a\xfd\xd1\xa9\x68\x32\xfd\x41\x76\x12\xa2\x63\xad\x25\xdc\xde\x30\x93\x44\x2b\x38\x39\x6f\x08\xfd\x27\x48\xe3\x08\x23\x43\x7a\x0f\x39\x4f\x37\x6d\x2e\x13\xc8\xbb\x6e\x98\x01\x76\xcb\xcd\x5a\xea\x2b\x2f\xf0\x1b\x57\xf8\x7a\xc8\xa6\xa2\x04\x7e\x59\x26\x9d\xd9\x05\x60\x99\x31\x03\xbd\xa4\xc1\x94\x13\x6d\x28\xc5\x3e\xac\x76\x46\x56\x49\x5d\xea\x9a\x52\x61\x37\x60\x1c\x96\xfc\xa0\x72\xd5\xf6\x42\xbb\x90\x8b\x42\x9e\x24\x97\xd1\x22\xa1\x87\x35\x42\x59\x95\x89\xb1\x20\x6a\xa8\x5e\x5f\xcd\xe5\x4b\x2f\x9f\x2d\x3a\xf9\xda\x55\x26\x60\x52\x21\xbc\x92\x64\x3d\x9b\xa0\xbf\x31\x84\xf5\xfa\x7b\x90\x48\xdb\x58\x35\x5a\x41\xa3\xc0\x5b\xab\xf5\xe8\xb5\x98\xcc\x76\xc2\xc3\xf6\x4a\xb8\x64\xde\x60\x5c\xf2\xec\x84\xdc\x51\x8b\xdc\xcc\x9d\x26\xc9\xfa\x82\xf6\xbc\x78\x0a\xe1\x55\x61\x84\x04\x30\x51\xb2\xd9\x82\x4b\x47\x1c\x1f\x06\xd3\x12\x42\x18\x3f\x2d\xb8\x34\x5b\x96\x37\x04\xa5\x9d\x73\x58\x6a\x64\x20\xae\xe8\x56\x06\xd3\x8a\x9d\x30\xb1\x97\x11\xcc\x0e\x36\xb4\xb4\x32\x59\xa4\xce\x28\xc2\x68\x26\xe2\x4e\x8c\x86\x79\x4d\xaf\x66\xce\xb1\x0e\x1f\x6d\x3e\xe0\x72\xa0\x30\x00\xba\x85\x07\x0d\xd3\x62\x12\x07\xdd\x54\xda\xcb\x39\x20\x26\x51\x25\x49\x71\xd4\xca\xd0\x08\xb1\xab\x0a\x81\x3f\x3a\x07\xcc\x16\x71\x9c\xad\x7d\x03\xc2\x30\x7e\x82\xce\x0e\xa6\x3d\xf0\xf7\x21\x7b\x1b\x8b\x61\x2e\xaf\xdb\xc1\x3c\x09\xbe\x5d\x02\xa3\x26\x07\xab\x57\xd1\x02\xf7\xa0\xf9\x65\x19\xaf\x1c\x11\x32\x70\x2c\x50\xae\x2d\x26\x83\xa7\xfd\xb2\xa7\xb6\x8b\x1f\x47\x2f\x0d\x73\x5f\x6b\x21\x2a\x0f\x79\xc6\xc5\xbc\xb9\x67\x70\x01\x34\x96\xa5\x72\x2c\x5d\x41\xb0\xa1\xf0\x08\xfe\x49\xb4\xfc\xda\x55\x7f\x9d\x65\xaf\x16\x21\x93\xb8\xa9\xdf\x25\x2b\x82\xbc\xb8\xf9\x30\x5a\x83\xaa\x32\x5a\xa3\x4a\xf3\x62\xbd\xae\xbc\x0e\xcf\xdc\xba\xe7\xb5\xe1\x6f\x4d\x62\x08\x78\x35\xc3\x36\x34\xe9\x73\x02\xa8\x27\x42\xfd\x46\xe0\x49\x88\x3c\x7c\x76\xf7\xa2\xe1\x59\x78\xf7\x62\xe3\xf4\xa5\x72\x69\x82\xeb\x22\x65\xcd\x8c\x55\x4d\xf3\xcc\x2e\x98\xd0\x65\xc4\xf4\x31\x82\xbb\x5a\x4c\xee\x83\xc8\x03\x3f\x84\xca\x61\x0e\x56\xf1\x95\xd8\x34\xb2\xcb\x9b\x23\xbd\x6b\x5b\x5f\x72\x54\xdc\x9b\x5f\xbd\xe1\x44\x57\x44\x41\xe9\x8b\xdd\xd9\xfe\xad\x7d\x48\x47\xcd\xb9\xbb\x6f\x32\x78\x14\x0f\x3e\x88\x4d\x59\x80\x69\x42\x1b\xec\xec\xa1\x1b\x51\xb7\x91\xb1\x06\x9d\x82\xa1\x26\x18\x4c\x97\xd9\x85\xfc\xc0\x9b\x47\x71\x96\x07\x33\x54\x2e\xb2\xdc\x37\x79\x6e\x93\xeb\xdb\x7f\x7d\xa4\x0c\xce\x1f\x1e\x0b\xf1\x58\xf1\x01\xb7\x13\x32\x54\xd0\xc6\xce\x68\x63\x23\xe4\x95\x56\x79\xb3\x8e\x7d\xcb\x2e\x78\x10\x25\x04\xba\x8f\xb2\x7f\x74\xe0\x6c\x2d\x49\xe0\x16\x8b\x41\xb9\x5c\x9b\x6f\xfb\xf1\x53\x14\xc6\x1e\x5c\x28\xaa\xa1\x0b\x0b\x23\x5f\xd6\xf6\x8f\xa6\x59\xa0\x27\x39\x0a\x6e\x0c\xd9\xd7\x16\x1b\x70\xed\x7d\xba\x8e\xd7\x39\x85\xeb\xb3\x07\xee\xe5\x45\xaa\x9c\x54\x85\xde\x12\xcd\xc1\x05\xa9\x48\x20\x65\x05\x58\x6a\x2a\xfd\x00\xc1\x8b\x52\xb9\x34\xfa\x86\xd9\x0b\x74\x1b\xc3\x70\x7c\x56\x30\x94\x36\x03\xbd\x47\xef\xb8\xb3\x5d\xc0\x9e\x76\x91\xce\xeb\xf9\x52\x37\xb7\x7c\xa6\xc8\x08\xa4\xba\x04\x44\xd9\x02\x52\x28\xf0\x27\x3c\xfd\x00\xe3\x20\x08\x8a\x5f\x9a\xe2\xa2\xd3\x91\x5c\x57\x55\x9c\x19\x03\x3e\x67\x4a\x54\xb4\x10\x85\x41\xa6\x38\x62\xaf\x40\x29\x05\x66\xf0\xaf\x9c\x8c\xca\x1e\xf4\xdd\x91\x21\xab\x4e\x0f\x4a\xd6\x68\x31\xd8\x38\x3b\x81\x6b\xfd\x00\x15\xe5\x2f\x2a\xab\x28\xed\x46\xcb\x95\x0c\x11\x27\x7c\x20\x34\x9c\x29\xfd\x40\xc4\x97\x14\x0b\x64\xe9\x7e\x0f\x46\xad\x90\x87\x4a\x05\x5e\xc3\x8b\xf6\x18\xc3\x6c\xc2\x39\x7b\x11\xe6\x72\xde\x47\x0a\x78\x3e\x2a\xa6\xf9\xf2\x26\x01\xc3\x51\xe9\x1d\x05\xf7\xce\x7f\xd8\x96\x91\x9b\xa3\xe7\x6c\x9b\x61\x11\x10\x5b\x67\xa3\x37\x5a\xee\x9d\x48\x75\xad\x11\x5d\x4f\xfe\xfd\x76\x72\x33\xd5\x5f\x37\x6e\x17\x20\xd0\xbe\xb9\xba\xbc\xb8\x31\xb8\x3c\xb6\x94\xb0\xa7\x7e\x79\x36\xb9\x31\x4d\x58\xdb\x05\x08\xb4\x6f\xa7\x13\xbd\x39\xc2\xe6\x6b\x7b\xba\xdc\x03\x15\xda\xe7\x70\x43\x26\x06\x68\x22\xa6\x7a\x08\xeb\x8a\x86\xe0\xff\x2a\x17\xf9\x65\x62\x8a\xb1\xee\x40\xc1\x11\x9d\x3a\x60\x3d\x8f\xc5\xef\xe9\x2a\x81\xde\x56\xfe\x2c\xa7\x51\xa1\x38\x70\xa1\x22\xae\x72\x4c\xa4\x27\xc6\x4a\x3c\x0b\x70\x78\xe1\xc2\x10\xe4\xff\x6a\x29\xc6\xb0\xac\x76\x25\xef\x60\xd2\xf4\xc0\xaa\x0e\x5f\x5b\xcc\x8f\x1b\x51\x9c\xa5\x43\x74\xe9\xfe\x77\x19\xfa\xdb\x47\xbc\x62\x5a\x04\x37\x39\xfe\xb4\xf5\xea\x5f\x21\xb9\xdb\x9f\xf4\xdb\x98\xe7\x84\x42\x6d\xaf\x44\xa8\x80\x7c\xcb\x56\x7a\xfb\xe2\x00\x41\x1e\x87\x71\xe1\xb3\x77\xa0\x57\xa7\xab\xce\xaf\x3d\x08\x69\x82\x3c\x33\x1e\x3c\xe2\x99\xef\x3a\x4d\xd4\x4c\xec\x07\xe4\x75\xa3\x0a\xcf\x64\xc0\x4c\xab\x4e\xc1\x55\x88\x3d\xe2\x23\x0f\x57\xe5\x96\x62\x1d\x42\x12\x46\xed\x6c\x11\x84\xbe\xca\x32\x94\xb5\x34\x06\x26\x5e\xb8\x87\x1d\x49\xa9\x45\x2e\x3d\x8c\xca\xa5\x76\xf8\x52\x0f\xde\x70\x94\x30\xc9\xf9\xac\x70\x08\xed\xa6\xc0\x25\xeb\xd3\x3a\x19\x6b\xcc\x20\x5b\x77\x15\x3a\x7f\x15\x89\x15\x92\xa0\xa9\xdc\xa7\x60\x5a\xdb\x0d\xa2\xab\x1e\x1d\x49\x91\xaa\x38\xdb\x8a\x60\x64\xdc\x3c\xd9\x56\x23\xe3\xc0\x30\xf1\x35\xb7\x62\x79\x38\x2f\xba\x40\x27\x14\x8b\x9a\x64\x34\x51\xc3\xb8\xb9\x13\x82\xae\xb8\x03\x5f\xd8\x3e\x90\xbb\x45\x57\x35\x1a\x8e\x4d\x5b\x7d\x98\x5c\x3f\x78\x69\x7d\x62\xdd\xf4\xce\x6d\x66\xce\xb7\x49\x98\x6f\x9d\xda\xfd\x5b\x80\x44\x6f\xbf\xb4\x91\xde\x50\x22\xc4\xe0\x97\x5f\xca\xa4\xf4\x92\xcd\x00\x19\xf8\xad\x1a\xef\xb9\xf0\xec\xbd\xe5\x9e\xa9\x81\x76\xd1\x0e\x85\x54\xf3\x30\x13\xe5\x50\x7d\x1c\xa0\x45\x9d\x47\x78\xcf\x03\xa2\x6f\x1b\x39\x48\xe4\xca\x1f\x6f\x99\xbc\xb6\xa0\xbc\x5b\x7c\xf5\x45\xe9\xfc\xac\xd5\xb1\x8e\xf2\xee\x9c\x3b\xe3\x9a\x5b\xd4\x70\xe0\x6e\xf4\xf2\xd3\x15\x23\xf3\xe9\x52\x7d\x5a\x4b\x39\x70\x31\x45\xa8\xd7\x94\xa2\x71\x51\x07\xd7\xcd\x61\x5a\xed\xf7\x76\x3d\x77\xec\x1b\x00\xbd\x6d\xd6\xb1\x2b\xe5\xe6\xf8\x6d\xf9\x7b\x13\xe9\xc6\x0b\x2b\xb9\x07\x21\x4e\x97\x69\xab\x29\x37\x9b\xdb\xe9\x23\xf6\xa3\x4a\x97\xa2\x39\x63\xa9\x16\xb4\x64\xdd\x2d\xcd\x30\xd4\xdd\xa5\xda\x3a\xa5\xd8\x3c\x83\xd9\x83\x36\xfd\xfc\x90\x1c\xda\xaf\x64\x03\x07\x59\x35\x4e\x6b\xac\xb5\x87\x6d\x48\x9d\x5b\x69\xd7\x8c\x09\x6d\x91\xc4\x66\x2b\xb3\x96\x12\x74\xea\x6c\xc4\x30\xf7\x42\x99\x07\x0d\x35\xbe\xdf\x21\x06\x1b\x5e\xd5\x58\x9d\x97\xb8\x93\x22\xe1\x95\x95\x0d\xd6\x0b\xed\x85\x08\x3c\xc0\x9b\xc2\x42\x2d\x68\x2f\x46\xe4\xd3\xba\x62\xee\x72\x1e\xd8\x07\x53\x5a\x1b\xa4\xb9\x55\x5b\xb7\x14\xa3\xf2\x01\xb9\xeb\x31\x45\xd6\xd9\x72\x55\x08\xfe\xca\xff\xaa\xd1\x32\x84\x05\x67\x37\x6c\x08\x72\xe6\x69\xc0\xe5\xd1\x50\x10\xf9\xc1\x63\xe0\x17\x5e\x58\x19\xa9\x80\x99\xb3\xbc\xc2\x11\x80\xf2\x42\x7f\xa5\xef\x4c\xc7\x05\x29\x26\x42\x4f\x42\x70\x8a\x5f\x70\x76\x39\xae\xd2\xcd\x54\x9e\x07\x55\x06\x40\x70\x38\x35\x98\x52\x0d\x43\xb4\xbf\x0c\xf3\xe0\x91\x63\x57\x7d\x99\xb1\x79\x11\xf8\x87\x8c\x8d\x21\xbc\x24\x5a\x7a\x2e\xb8\x17\x0a\x30\x18\x67\x0d\x5b\x0f\x6c\xd4\x92\x62\xed\x67\x81\xe1\xe0\x33\x34\x22\x4a\x39\x58\x9e\x9b\x86\xf3\xde\x11\x0c\xd5\x3a\x62\xae\x69\xc3\xb6\x81\x04\x66\xa4\x61\xda\xa2\x3f\xbf\xa1\x24\x57\x2a\x98\x05\x9a\x6a\x2f\x3d\x48\x0b\x0c\xc7\x77\xe0\x96\x18\x7d\xe2\xab\xe7\x6a\x8d\x81\x78\x0f\xd6\x22\x90\x5b\xb2\xc2\xa3\x87\x53\xa6\xa0\x1c\xa2\x21\x86\x60\x49\x97\xbf\x32\xc9\xad\xad\x29\x59\x7d\x51\x81\x97\xdc\x9b\x49\xe7\x9c\x91\x34\x3a\x97\x65\xbb\x25\x1d\x84\x38\x5d\xa6\x36\x9f\xcd\x1e\x1e\xcd\x83\xd1\x1d\x46\x92\x1e\x3e\xcc\x83\xd1\xa5\x4a\x82\x9b\xb9\xea\x8b\xc3\x9d\x21\x7c\x70\x08\x10\xa4\x3e\x77\x46\x3c\x1f\x19\x84\x6a\x3f\x29\x04\xdd\x77\x92\xcd\x3b\xc1\x95\x7c\xc2\xd3\x9b\xa2\x0b\x7a\xb7\x1e\xec\x2a\xd9\x2e\xb8\x0d\x25\x75\x77\x6f\x1f\x52\xea\xbe\xdc\x68\x52\xab\x01\x9e\x16\x61\x2d\x73\xb0\x5c\x3e\x9b\x21\x46\x37\x2d\xca\x2a\x1f\x3e\xb3\x9c\x43\xd2\xb7\x97\xac\xbc\x39\xfa\x29\xce\x72\x75\x64\x2b\x7e\x9d\x60\xb4\xec\xba\x61\xa8\xd9\xa0\xd4\x95\xcc\xf0\x38\xbb\x8d\x5f\xfb\x90\xa2\xe3\x95\x77\x8c\x96\xc6\xe6\x96\xb5\x68\x28\x3a\xd8\x39\xd1\x85\x3e\xaa\x27\xdb\x7c\x4b\xa0\x2a\x27\xb1\x49\x6d\x38\x7f\x28\x87\xf3\x7b\xec\xfb\x06\xf3\x5f\x52\x65\x6b\x4c\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\xec\xfd\xf5\xe5\xed\x95\x96\xbb\xae\x18\x81\xcf\xf5\x87\xd3\xe3\x49\x47\x60\x37\x4d\x29\x2a\x17\xbd\x35\xf2\x76\x01\x7b\xda\x57\xe3\x6e\xfc\x6d\x65\xa8\x1c\x3a\x82\xd3\x69\x4a\x11\xb9\x9c\x4c\x3e\x4c\xce\x2e\xaf\x0c\x21\xea\xb4\xe5\x88\x9c\xba\x42\xe1\x69\x4a\xd1\xb8\x18\xbe\xf8\xc6\x6b\x7b\xba\x33\x2f\xdc\xf3\xf9\xee\x3e\x58\xda\xcb\x5f\xae\xca\x5d\x33\x93\xbe\x20\x9d\x97\x54\x6a\x84\x00\xa5\x4e\xf0\x11\x9f\xd8\x2f\x7e\x3d\x28\x0d\x89\x56\x3c\xc3\x64\xc6\x1f\x97\x9d\x49\xc4\x7a\x52\x23\xa0\xc6\x3c\x3f\xa5\x35\xea\x2b\xa1\x80\xe1\x49\x80\xd0\x2e\x21\x2e\x19\x38\x04\x7f\x0a\x92\xef\x4c\xdf\x99\x4a\x80\x8c\x4d\x76\x73\x77\x68\xd6\xf5\x09\xc8\x30\x47\x1e\x36\xff\x41\xb9\xe9\x82\x1c\xbf\x47\xec\xc7\xef\xff\x74\xc4\xc6\x32\x07\x51\x90\x31\x9f\x47\x01\xf8\x8c\x62\x02\x24\x3f\xc6\x1e\x86\xe1\x75\x13\xa1\xfa\x06\x21\x57\x6e\x8a\xfc\xb3\xf8\xba\xe8\xf9\x10\x64\xdd\x71\x50\xf6\xcd\x7e\x88\x76\x11\xbd\x75\x92\xa6\x37\xf8\xe8\x58\x3c\xf9\xfa\xf5\x40\x96\x6b\xbc\x1f\x27\xc1\x04\x1e\x96\x25\x96\xb5\x5c\x7a\xe2\x45\xc3\x2f\xc2\xa5\x79\x76\x89\x82\xd4\x4a\x70\xf0\x88\x17\x18\x53\xbc\xc0\x10\x84\xcf\xbc\x7b\x1e\xca\x61\x5d\x7a\xfb\x12\x62\x68\x0e\x42\x93\x2c\xc1\xdb\xca\xf8\xa2\x75\x07\xd1\x0d\xd7\x9e\x00\x19\x5b\x79\x43\x57\xc6\x36\x45\x0b\xd0\x32\x24\x77\x27\x30\xcb\xda\x64\x54\x9d\xe9\x0f\xc8\x4d\xd8\x83\xa2\x33\xfa\xa3\x2d\x5b\x13\x6b\x98\xa6\xaa\x64\x3c\xba\xb4\x13\x2d\xd1\xce\xac\xf3\x4f\x74\xb7\xf8\x8e\xb9\x92\x5b\xa1\xf2\x9c\x6a\x02\xb8\x8b\xa6\xa7\x57\x47\xec\xf4\x01\x82\xba\x60\x20\xac\x3c\x5d\xe1\xa1\x52\xac\x5c\xaf\x3c\xf6\xf8\x66\xcb\xff\xea\x00\x8b\x63\xae\x3e\xc8\xfb\x06\xc7\x2c\xa3\x04\x0f\x43\xbb\x5b\xe6\x19\x90\xb8\xb7\x56\x95\x0d\xdd\x5e\xac\x96\x2a\x64\xfe\x5b\x56\x5a\xd4\x01\x6f\x4f\x80\x8a\xad\x3e\x36\xed\x97\x5a\xbb\x8a\x54\x2c\xfa\x83\x96\xed\x02\x64\xda\x26\x9d\x71\xab\x04\x81\x7a\xbe\xe9\x3f\x24\x4f\x34\xcd\x96\x30\xb6\xd5\x48\x38\x44\xfd\xc7\x80\x3f\xad\x03\xa3\x05\xe0\xe6\x65\xc4\xd0\x55\xc5\x8d\xff\x62\x9d\xb1\xa5\x91\xfb\xcd\x0e\x4a\x77\x6d\x0a\x2a\x15\x05\xa4\xee\x60\x86\xc6\x7f\x13\xf5\xb3\x63\x1f\x4e\x26\x40\xc6\xd6\xe8\x03\x10\xb2\xa6\x72\x8c\xc2\xfc\x16\xea\xc9\x07\x2f\x2c\xb8\x0c\x60\xb3\x9d\x5c\x71\x97\x07\x11\xdf\x26\x4a\x72\x2b\xff\xad\x2d\x0e\x44\x1e\xeb\x2c\x3e\xed\x2e\x6d\x86\x25\x4e\x96\x69\xa0\xab\xc4\xbe\xe4\xc8\xb8\xf7\x70\x89\xb8\x4b\x56\x83\xc8\x3b\xf0\xf5\xe1\x2e\x59\xd9\xcb\xbb\xc0\xbc\xd4\x78\xce\x00\xde\xf1\x32\x11\xad\xbc\xb9\xeb\x70\x9b\xa1\x54\x25\xe1\x91\x8a\x29\x12\xdb\xbc\xf9\x52\x71\x98\xfa\x8c\xff\xc1\x19\x10\x64\x8b\x9f\xd6\x71\xa5\x9a\xf7\xa6\x06\xbc\x36\x95\x88\x18\xc2\x70\x23\x93\x94\x8d\xfa\x63\x5f\x93\x86\x66\xc1\xc3\x0e\xae\xcd\x12\x34\xea\x41\x04\x01\xc2\xa5\xc9\x2f\x62\x55\xd6\x54\xaf\xbc\xb5\x59\x15\xf4\x61\x3e\x02\x27\xa2\x5c\xc6\x80\x97\x89\xc1\x0e\x44\xe5\x32\x6a\x12\x74\xe8\x84\xa7\x9e\x9c\x75\xd5\x6b\x99\xde\x46\xbc\x12\xd3\x13\x66\xc4\xd6\xc7\x6a\x7a\x56\x2c\xb4\x16\x43\x3b\x4c\x81\xd4\x2c\xcb\x76\x29\x3a\x17\x38\xac\xc9\xd8\xfd\x0a\x3d\x81\xbb\xd9\x69\x8a\xd3\xf8\x62\x7c\x16\x9f\xe7\x5e\x10\xaa\xce\x0b\x09\x1e\xf2\x60\x56\x84\x5e\xba\xb5\xb5\x35\x83\x72\xa5\x45\x43\x2c\x35\x95\xee\x2f\xd2\x56\x8e\xc6\x29\xe5\x33\x4c\x75\x22\x94\x40\x99\x16\xdc\xcc\xd0\x50\x9c\xc6\x77\xeb\xf4\xa5\x5b\xd8\x8e\x2a\x6e\xfc\xe1\xc0\xc8\x9e\xf5\x76\x69\x22\x57\x54\xa2\x2d\xf8\xb5\x94\x73\xe1\x64\xdb\x8f\xf4\xa5\x5d\xb8\x12\xc6\xb8\xb1\x02\x89\x37\x4c\x8c\x95\x8f\xc1\xcc\x93\x59\x3d\xf6\xb9\x03\x7b\x0e\x0c\xe4\x16\xda\xf6\x45\x18\x66\x0b\x68\xab\x88\x3d\x0b\x0a\xfb\x56\x32\x9f\x7e\xb8\x9e\x6e\x20\xe0\x81\xa2\x7f\xf6\x23\xe6\x82\xd9\x70\x20\xd7\x5a\x88\xc8\xa3\x57\xc2\x41\x17\x12\x44\x7c\x9b\x1d\x8d\xf2\x99\x2c\xeb\xd2\x10\x75\x7c\x0f\xb7\x2f\x01\xd1\xb7\x57\xa8\xcb\x40\x7a\x0e\x31\x18\x51\x0f\xc5\x80\xa2\x82\xf8\x21\xdc\x0f\xe0\x2b\x38\xca\x56\xb1\xba\x21\xcd\x73\x19\x11\x57\x16\x87\x0b\x6a\x15\x82\x14\x12\xc5\xa9\x89\xf0\x29\x4e\x31\xc6\x58\x15\xba\xda\x30\x3f\x74\xe2\xd0\x01\x69\xf2\x07\xf6\x69\x1c\xe7\xf5\xa8\xe3\xdb\x49\xdf\xaa\x9c\x6e\xbe\x26\x15\x80\x31\xda\xfb\x0d\x6a\xef\x39\x26\xeb\xdd\xfb\xce\x62\x9f\xbc\xed\x7b\x91\x3a\xc0\x70\xb2\x96\xa4\x55\xa6\x60\xea\xf6\x77\x6d\x2f\x44\xe5\x21\x56\x2f\xc8\x2d\x1c\x17\xf9\x5d\xa4\x6e\xd5\x5a\xb2\xa0\x43\x9f\x5e\xc6\x29\xaf\x6f\x0c\xbb\x80\x0d\x41\x99\x28\x4d\x11\xad\xd3\x22\x0c\x2c\xce\x30\xa4\x69\xf2\x70\x5f\x5e\x83\xc9\xbf\x4d\x97\x66\xe6\xd2\x34\xae\xfb\x36\x46\xdc\x07\x4f\x5a\x0b\x14\x49\x69\xb2\x74\x20\xef\x89\x63\x16\x15\xe0\x44\x10\x43\x1c\x6a\xf9\xa0\x8c\x3b\x2d\x7d\xce\x55\x71\xb3\x90\x03\x90\xa5\xc8\x61\xc8\x32\xb6\xf1\x96\x44\xb5\xc8\xca\x6e\x96\x1b\xad\x34\x0c\x45\x09\xfc\xe2\xa4\x7b\x1a\x6c\x29\x43\xe2\x90\xec\xbd\xc7\xef\x81\xa7\x7d\x0b\xac\x32\xc8\xea\x75\x92\xc2\x21\xf3\xad\xe9\x46\x57\x5b\x90\xc2\x4b\x2c\xdc\x23\x65\x39\xe6\x1b\xd6\x55\x6d\x41\x6b\x5e\x30\x41\x1b\x22\x91\x6f\xbe\x26\xd2\x15\xbf\x6f\x61\xf2\x3f\x7e\xf7\xf1\x62\x7c\x3e\x51\x1a\xdc\x08\x8e\x04\x46\xa5\x51\xd7\xa8\xf4\xa5\x96\xf9\x29\x3f\xc9\x13\x83\xea\x75\x79\x3c\x93\xd5\x12\x26\x41\xba\x56\xdc\x7b\xeb\x75\xf4\xbd\xf3\x27\xb5\x0c\x3b\x56\x99\x32\x9e\x02\x31\xb3\x61\x06\x70\xa1\xbb\xae\xa4\x49\xa8\xca\x9a\x51\x5e\x91\xd5\xb4\xda\x4c\xac\xaf\x79\x80\x6e\x5a\x2b\x34\xe7\x51\x59\x8f\x4d\x1e\xcb\xbb\x66\x47\x93\xfb\x22\x56\xe3\xb4\xb4\x2e\x38\x58\x6b\x07\x0f\x32\x18\x64\x4d\x4b\x80\x04\x08\x6a\xb3\xd7\x61\xbc\x30\x2c\x71\x9a\x4c\xb7\x8a\xc7\x38\x09\x9a\xe4\x61\xd7\x1a\x44\x05\xaf\xae\xd0\xc4\x0e\x16\xee\x7b\x38\xe6\x81\x2a\x4d\x19\xcc\x32\x0d\x46\xdc\x4d\xa6\xe3\x77\x15\xd7\xc6\x1c\x8c\x10\xb8\x50\xf6\x04\x3f\x4c\x5d\xd6\xb0\x4d\xa8\xf2\xc0\xc0\x68\xe2\x0f\x0f\x62\x9b\x66\x27\x65\x8d\x5d\x0f\x0e\xb6\xbb\xbc\x0d\xd6\x2a\x0a\xd1\x86\x96\xea\x45\x2b\x76\x8f\x09\x8b\x60\xbc\x0f\x2b\xf6\x54\x4d\x38\x62\x80\x65\xad\xd5\x6b\x1d\xf8\xdd\x6d\x74\x1f\x44\x7e\xb3\x7d\x0a\x7c\x56\x8f\xaa\x70\xa0\x4a\xbf\x95\x65\xd7\x45\x53\x0e\x45\x0f\x64\xce\xa4\x05\x8f\xb4\x42\x03\xd9\xc4\xf7\x54\x3a\x00\x58\x7c\x2b\xb7\x4f\xc8\xf7\xd3\xb8\x2d\xec\xdb\xe6\x03\x7c\x6c\x63\x77\x1a\xb6\x33\x59\x8c\x9b\xf5\x7c\x73\x8b\x6d\x58\xc5\x27\xd4\x34\xb0\xd8\xd6\x77\x07\x40\x1d\x90\xb2\xbd\x34\x62\xad\x43\xab\xaf\xda\xc5\x90\xd0\x6b\xac\x6e\x96\x49\x75\x09\x88\x6a\xf6\x68\x75\xdd\xcf\xa4\xbe\xd8\xd4\xa1\x23\x68\x53\x35\x6d\x50\x74\xd5\xb3\x47\x82\xa9\xb0\xcb\x31\xda\xb2\x74\xaf\xed\xe8\xbd\xbc\x16\x9f\x44\xcc\x00\xfc\x33\x4e\x01\xf2\x9e\x2d\x0f\x64\xce\x7b\x18\xd8\xd5\xcd\x5b\xcb\x69\xda\xda\xf1\x1b\x82\xd2\x21\x15\xbd\xb4\xdf\x12\x36\xfb\x16\x15\x04\xf0\x50\xed\x4b\x99\x41\x72\x82\xbe\x39\x30\x41\xb4\x9e\xf0\x8a\xb9\xd7\xe7\x32\x9c\x8b\xca\x6a\xb0\x3e\x03\x35\xf5\x85\x5d\xf1\x21\x49\x1a\xa7\x40\x13\x8c\x7b\x16\xc1\x4c\xb6\x5e\x35\x59\xc8\xdc\xcd\x98\x77\x5d\x74\x59\xbf\x48\x9b\x01\x59\xbd\x22\x8f\x47\x90\x8c\x7d\x66\x3c\x0e\xaa\xa6\x27\x86\x01\x04\xe1\x43\x79\xcb\x18\xa2\xa1\x62\x40\x9c\x35\x37\x87\x25\x04\x9b\x02\x34\x9e\x75\x5a\x5b\x0f\x0f\x9d\x82\xca\x84\x17\x22\xef\xa4\x73\xc3\xf6\xc0\x85\x06\xa9\x89\x3b\xa8\xcb\xac\x5d\x06\x6b\x2c\x27\x1a\xbd\x10\x8a\x41\xeb\xda\x8a\xd8\x99\xab\xac\x38\x62\x90\x6a\x43\xa3\x76\xb7\x37\x4e\x01\x51\x2c\x5e\x63\xaf\x81\xa4\xb9\xf7\x5c\xcc\x0f\x98\xb9\x58\x4e\x19\x82\x08\x9c\x99\x3a\x1c\xec\x5b\xc9\x6d\xff\x6d\x9c\xe4\xb6\x68\x67\x8a\x38\x1b\xf1\xe5\x1b\x8c\x40\x6b\x38\x54\xa7\xb0\x72\x0f\x88\x63\x7d\x11\x67\x39\x5c\xa5\xca\xb9\x73\x14\xb1\x9f\x2e\x6f\xa6\xb8\x41\x16\x68\x40\xd1\x18\x8d\x84\xc0\x7e\xbc\x1c\x49\xe2\x42\xaf\x98\xf3\x88\xa7\xeb\x09\x59\x3e\xaf\x74\xc9\x04\x33\x2c\x9a\x53\x82\x7e\xd3\x58\x29\x03\x07\x8c\x24\x31\xbb\x7d\xb5\xb8\x95\xcb\x93\x32\xf7\x04\xb1\x92\xc4\xd8\x12\x74\x1a\x0e\x08\xf3\x18\xf6\x17\x62\xff\x22\xb3\x03\xe2\xe6\x45\xc5\x2c\xab\xf2\x66\xe7\xab\x84\x97\xd9\xf8\xa1\x99\x6d\x50\xf7\xa4\x4b\x94\x04\x5a\x22\x52\xce\xa2\x09\x4f\xe1\xba\xa0\x96\xd5\x88\xc5\x72\x27\x03\xa1\x70\x6f\xd3\x50\x68\xc1\x47\xfa\x68\xb6\x8e\x04\x5d\xc6\x25\xf8\x00\x4b\x8b\x54\x08\xf3\x06\x96\xb5\x62\x03\x39\x4b\xe3\x2c\xab\x86\xbb\xe8\xec\x27\x90\x77\x0d\xbf\x7e\x2e\xcf\x66\xd2\x5a\x42\x9e\x75\xdc\x1d\x99\x23\x4f\xee\xdd\xb0\x18\xee\x1a\xe1\x0b\xd4\xb6\x67\x6b\x8e\x45\x94\x42\x3c\x36\x50\x29\x04\x8f\xb1\xdc\xf3\xb0\x72\xf3\xc3\x9e\xbc\x48\x1d\xa2\x57\x49\xdf\xda\x8d\x67\xff\xd5\xd4\x92\xff\x6c\x02\x12\x7a\x25\x08\xac\xe6\x79\x70\x01\x8b\x5e\xe6\x65\x96\xe2\xea\x32\x1b\x06\xf1\x27\xbe\xca\x4c\xc3\xc9\x8d\x0c\x11\x27\xee\x38\xca\x49\x16\xd6\x52\xaf\x4c\x0d\x5a\xed\x47\xd0\x32\xac\x0b\xa8\x03\x1d\x1a\x52\xfc\xec\x33\x0f\x66\xf4\xf2\xdc\x41\xde\xf8\xc0\x89\xe3\x21\xd3\x7e\x64\x69\x8a\x55\x3f\x9b\xd2\xe7\xbf\xdb\x1d\x23\x7b\x59\xe5\x5d\xaf\x5c\xf7\x31\x69\xf2\x4f\xd3\xe9\x55\x95\xa3\x4d\x0f\xdd\xb6\x1e\x01\x49\xa2\x4e\x15\x3c\xdf\x1f\xc9\xbd\xc5\x08\x66\x3d\x75\x5c\x34\x17\xbb\x0f\xb5\xf1\x80\xa7\x06\x64\x8e\x74\xec\x91\x4a\x5b\x08\x95\x9d\x52\x9d\x77\x28\xbd\x4a\x05\x09\x94\x2e\xab\x11\x17\x9d\x11\x0f\x41\xe6\xa9\xe7\xcb\x1a\xc7\xef\xf0\x40\x14\x72\xdf\xe5\x0c\xd6\xa6\x1c\x88\x9c\x07\xd1\x38\x09\x3e\xc8\x24\xf1\xe7\xde\xef\x71\x2a\xc3\x72\x35\x9f\x07\x51\xeb\xf3\x2b\x2f\x9f\x2d\x0c\x97\x7a\xdf\x3c\x5e\x42\xcb\xe7\x5e\xc8\xce\xc5\x9c\x6d\x88\x56\xbf\xf9\xda\x7a\x91\x44\xe2\x62\x57\x58\xc8\x1c\xc5\x4b\xa4\xc3\x5e\xf1\xc3\xf9\x21\x7b\xf3\xfd\x0f\x3f\x9e\x1f\xb0\x37\xef\xc5\xff\xbf\x7f\xaf\xb7\x96\x71\x23\x42\x6c\x80\x2d\xf2\x65\xd4\x15\xb0\xaa\xc1\xb0\x1e\x83\x80\xde\xa4\x6a\x2f\x84\x45\x3b\x47\xc5\xf2\x1e\x22\xd1\x3e\xa8\xc5\xb6\x03\x9c\xbe\x38\xb1\xed\xd6\x84\x36\x4d\xbc\xed\x21\x18\x6a\xda\xa3\x49\xa1\x69\x2d\x27\x5b\x53\x59\x6b\x8e\xb7\xe3\xf1\xda\x5f\x75\x19\x64\xe0\xf2\x23\x33\x38\xcc\xe2\xe8\x21\x98\xe3\x39\x90\x16\x03\xb1\xb6\x3d\xaa\x9b\xf1\xfb\x89\x9e\x6b\xf3\x2d\x8d\xaa\xfe\xa2\x7a\xf3\x35\x81\xee\xe4\xba\x23\xca\x5b\x5b\x11\x12\x7d\x7d\xb4\xb2\x8d\xb7\xf6\x54\xa3\xf2\x9a\x58\xee\xf4\x5b\x0f\x7e\x85\xe6\x2a\xef\xf5\x26\x69\x6a\x58\x4c\x7a\xd1\x72\x41\x5c\xc0\x2e\x39\xc7\xdc\xba\x7a\xa5\xb0\xb3\xbc\x03\x67\xa9\xae\x1f\xa8\xfd\xfa\xcb\xf2\x94\xe0\xa5\x75\xa0\x86\x3e\xa4\x1c\xf0\xc6\xf7\x60\x93\x5c\x9e\xca\xe2\x19\x05\x68\x67\xbc\x3a\xcf\x45\x0f\xf5\xea\x97\xd5\x37\xee\x41\x93\x22\x01\x2a\xee\x62\xbd\x91\x4e\x21\x2a\xdf\xa9\xf9\x86\xdd\xb2\x16\x19\xc5\x3a\x45\x50\xab\x07\x37\x72\xe9\xed\x9b\xb0\x5b\x66\x04\x99\xf1\xba\xd6\xdb\x70\xfb\xb4\xfd\x00\x94\xca\xc3\x60\x92\x17\xcb\xb9\x5c\x83\x9b\x61\x81\xa1\x5b\xb6\xd9\x8c\xb8\xe1\xef\xc5\x68\x2f\xb2\xd6\x72\xfd\xec\x56\x56\x33\x23\x17\x59\x37\x3c\xeb\x6c\x72\x54\x13\x6b\x13\x51\xb5\x5a\xf5\xc9\xc1\xa7\x3d\x3f\xdf\x99\x9d\xe1\xb7\x00\xc9\xa1\xfd\xb2\xee\x40\x95\x08\x5f\x99\xca\x6e\x8c\x23\xc4\x53\x74\x67\x61\xda\x39\xbf\x7d\x49\x5e\x8d\xaa\x3d\x49\xde\xcd\x6f\x87\x92\x8b\x17\xa2\x67\x7a\x51\xf0\x77\x14\xe7\xeb\xd7\xd7\x50\xb4\x91\x6e\x7a\x27\x2d\xe0\xc8\x97\xd0\x12\xfc\x73\xc2\x67\x70\x62\x2c\x8f\xef\xe1\x20\x32\x9e\xa1\x33\x92\x7f\x84\x3a\x30\xc6\x8f\x34\x0a\x45\x27\x41\xc0\x87\xd3\xa4\x0a\xa4\x5f\x5e\xd7\x83\x23\x9f\xf2\x9a\x92\x47\x41\xcc\x4b\xe7\x05\x38\xc1\x68\x51\x5e\x9d\xdd\xbe\x3f\xbd\x18\xe1\x35\xd7\x88\xb9\x93\xb5\x3d\x22\xa8\x38\xc0\xd7\x56\x0c\x2a\x03\x85\x0b\x0b\xf5\x8a\x56\x9d\xd0\xa0\x9f\xa2\xf8\x29\xc2\xd8\x73\x06\xee\x6d\x85\x9c\x78\x18\x7c\x98\x74\xc5\x08\x7c\xc2\x18\x1c\xbb\xea\xb6\x16\xd2\x2c\x0d\xf5\x7a\x69\xb8\x65\x52\x29\xb6\xab\xbb\x7c\xe8\xac\x25\x9a\x96\xf9\xdb\x76\xd6\x20\x34\x41\xe6\x1e\x9e\x86\x56\x99\x88\xc9\x10\x41\x06\x67\xb6\x5e\x21\x6a\x76\xc1\xc2\x5e\x3e\x69\x10\x68\x93\x68\xdd\x54\x94\xce\xcf\x32\x1e\x4e\x67\x79\x17\xce\x52\x63\xf3\xaa\x44\x85\x36\xdc\xf5\x75\xdc\x11\x74\x24\x99\xef\x2c\xef\xce\xb9\x33\xc9\xbc\x45\x0d\x32\xf7\xa8\xe6\x4e\xc0\x95\x07\x2e\x6e\xb4\x3b\x51\x58\xd4\xa4\xa2\x69\xf5\xe2\x58\xef\x63\xf0\x6c\xe5\x11\x62\xe5\xb1\xc4\x0b\x52\xc3\xc4\xdb\x93\x1c\x11\xb7\x74\x4f\x54\x7f\x9b\x14\x19\x73\x69\x1a\x57\x9c\xde\xa5\x49\x13\x1c\x78\x07\x90\x75\x0b\x6e\xa1\x1e\x05\xf1\x6b\xf9\xc0\x3f\x3e\x16\x4f\xd4\x8d\x12\x18\x3b\xa5\x60\x5c\xc3\xd3\x43\x08\x71\x9e\x56\x0e\xe1\xca\xa5\x22\xc8\xb0\xae\xda\xf1\x34\xab\x1a\x26\xca\xe7\xc4\xe2\xd0\x62\x7b\x8a\xac\xb1\x7b\x86\x74\xd9\x1b\x19\xfa\x09\x29\xfe\xe9\x04\xe8\xd8\x5a\xcf\xf6\x9c\x1a\x9c\x4e\x89\x8e\xd6\x62\x73\x65\xbf\x65\x1b\x84\xa8\x8b\x0c\x9b\xab\x27\xf9\x14\xa6\x07\x29\x77\xbc\xf7\x9b\x61\xf0\x9d\x7a\x89\x1b\x35\x77\xd4\x2d\x41\xcd\xb7\x18\x12\x46\x62\x4f\xb2\x0e\x72\xb4\x9c\xc0\x3b\xb7\xbd\x03\x2d\x3a\xe2\x46\x16\x82\x67\x39\xa4\x7c\x3e\x24\x84\xd6\x0a\x63\xaf\x3a\x48\x85\xeb\xe9\x0c\x77\x36\xa8\xa2\x5c\x79\xb9\xc9\x64\x86\x54\xd7\x01\x91\xfb\x72\x45\xa6\xe0\x80\xae\xbe\xa6\xdb\xa1\xd1\xd6\x70\xe3\xfe\x7f\x83\xe4\x9d\x68\xf3\xb7\xab\x9c\x67\x90\x78\x45\x3c\x82\xdf\xc7\x60\xa0\x02\xfb\xd3\xc0\x94\x80\xaf\x07\x25\x7b\xb4\x06\x8f\x7b\x37\x27\xfb\xd2\x47\xb0\xe6\xcf\x8a\xa1\xcf\x31\x79\x44\x2e\xbd\x04\x95\x02\x09\x23\x09\xc3\x99\x99\xef\xe7\x7a\x13\x24\x61\xf7\x58\x1c\xf1\x11\xb8\x41\x88\x0d\x47\x96\x3d\xc5\x29\x9a\x92\x85\xf1\x3c\x30\x6c\x77\xad\x2b\x52\xb0\xd4\x26\xa4\xdc\x33\xb8\x8b\x98\x8a\xd2\xf8\x89\x66\x96\x4e\x75\x72\xbe\xb2\xb7\x10\x20\x55\x26\x61\xb2\x08\xd7\xa0\x2b\x46\xe2\x63\x26\xef\x4a\x15\x56\x49\x23\xe1\x66\x01\x02\x6d\x98\x17\x9a\x91\xc4\xaa\x19\xdd\xe0\x26\x67\x5d\x8f\x88\xa4\x72\x40\xc1\x64\xa4\x68\x14\xd2\x81\xc1\x58\x83\xc8\x5d\x86\xf2\xfa\x82\xb1\x5e\xac\x56\x1f\xbb\x5a\xd6\x28\x3e\x4c\xae\x6f\x4e\x2f\x2f\xf4\x5d\x68\xbb\x80\x3d\x6d\x2f\x0c\x7c\xf6\x6f\x37\x97\x17\x2c\xbe\xff\x1d\xf2\xbf\xa9\xa0\x7d\x35\x15\x73\xa4\x82\xba\xcd\x94\x0d\x5b\x91\x4a\x2b\xf7\xc4\x4b\x85\x54\xb9\xd8\x94\x1f\xac\xe7\x07\x1e\xa0\xa7\x60\x10\x8d\xc2\x20\x02\x97\x45\x50\x6a\x3c\xec\x0a\x87\xec\x1d\x06\xe7\x2d\x53\xd3\x2b\xb3\x79\x51\x49\x4f\x37\xe3\x70\x60\x3c\xc3\x0b\x12\xf9\xb6\xcc\xc6\x6f\x08\xf1\xab\xff\x34\xff\xec\xe2\x12\xbe\xbb\xf2\xa2\xbf\x30\x4d\x21\x9a\x52\xf6\x5c\x04\xbe\x87\x15\xbb\x52\x0b\x96\x9e\x8f\xae\x1c\x85\x53\x66\x72\x6c\xdd\x7a\x6f\x4d\xf9\xaf\xe3\xeb\x8b\xd3\x8b\xf7\x32\x2c\x8d\x5c\x06\xa0\xb3\xa0\x62\x50\xad\xc4\xe0\x59\x51\x5d\xe8\xc9\x9e\x80\x4e\x56\x70\x8a\xb5\x08\xe6\x8b\x70\x05\xae\x56\x33\x51\xc7\x9b\x73\x1f\x49\xfd\xdc\x20\xb0\xf4\x56\xec\x9e\x0b\xd5\x43\xfa\x17\x82\x4d\x19\x74\x2c\xe9\x56\xa9\x5e\xa6\x7c\x06\x1e\xc0\x78\x79\x88\xec\xb3\x05\x0f\x43\x41\x3f\x03\xb7\x62\x88\xdb\xa6\x15\xff\x1f\x53\x08\xf2\x37\x62\xe8\x2a\xa2\x62\x29\xc6\xe8\xea\x22\x86\x52\x26\x63\x29\xd6\xc2\x6d\x94\x7b\xfe\x94\x67\x49\x1c\x6d\xb8\x90\x6e\x0e\x2f\x99\xd3\x4e\x68\x5a\xd1\x5c\x54\xa9\xc2\x09\x49\xb7\x27\xb8\xde\xdd\xb2\x73\x96\xc6\xe5\xe8\xfe\x2a\x4d\x1a\xfd\x03\xf0\x09\xc0\x14\xf5\x71\x9a\x2c\xf0\x8c\x14\x9a\x21\x83\x56\x38\x0e\xe3\xc2\x17\x73\x45\x11\xf9\xe9\xea\x65\xc6\xc4\x96\xd1\xbb\xf7\x32\x31\x7f\x8c\x05\x71\xb8\xbe\x0c\xb9\x3f\xaf\x9c\xe8\x4b\x6e\xe8\x10\x83\x0d\x0a\xae\x59\xbe\xbc\x8d\x6a\xd0\xaa\x87\x98\xdc\xc6\x88\x9a\x6c\xd9\x1c\xd2\x62\x20\x3b\x84\x60\x3c\x5e\x9e\xf3\x65\x92\x57\x0c\x96\xe8\xe3\x20\x43\xd7\x78\xb3\xb6\x76\xfc\x3f\x95\xc5\x48\x3d\x23\x26\xde\xf0\x81\xf3\x8b\x2f\x74\x81\x34\x5e\x95\x49\x36\x36\xbe\x41\xcd\xb1\x47\xb5\xcd\x16\x56\xd1\x12\x0f\xe0\x8c\xd2\xca\x05\x93\x9e\x89\xbe\x55\x3a\xfc\x40\xb8\x4c\x35\x2b\xcb\xc6\x2f\x23\x45\x8d\xe0\x6c\x6a\x24\xcf\xa6\xe2\xad\x97\x0a\x0d\xca\xb9\x4c\x2a\x0f\xb4\x99\xf8\x6e\x51\x61\xf0\x0a\xfd\xa3\xeb\xfd\xd1\xf5\xf6\xd5\xf5\x7a\xcf\x87\x01\x7c\xf5\x1c\xb6\x05\x18\x98\xb1\xf1\xc9\xfe\xcf\x46\xeb\xd4\xc2\x8e\xdd\xf3\xf2\x0b\x80\xb7\xa8\x10\xbc\xbc\xec\xcb\x5a\xb3\x36\x36\x6b\x7a\xa1\x60\x08\x49\x75\xd1\xfd\x3e\x0d\x96\x5e\xba\x42\x47\xab\x19\x38\x1c\xaf\x1d\xf7\xeb\x20\xd1\x03\x2d\x09\xd1\x79\x71\xeb\xa3\x61\xec\x8b\x00\x1a\x6a\x89\xb9\x7a\xa0\xad\x1e\xdf\xb0\x9b\x66\x8e\x54\xb8\x7b\x92\x26\x06\xe6\x8a\x3f\x60\x49\x88\x73\xcf\x97\x9e\x8c\x5c\xb8\x2d\x0f\x76\x70\xc1\x03\xae\xb7\x10\x9d\xa8\x86\x7f\x1f\x32\xf6\x57\xb9\xa6\x2d\x05\x4d\x58\xe4\x3e\x95\x7d\x4d\x15\xaf\xcc\x1e\x30\xb2\x4e\x21\x6d\x32\x7c\x30\x49\x51\x85\xd6\x5f\x3f\x49\x31\x7f\x03\xf3\x7c\x1f\x43\x6f\x88\x8f\xb4\x01\xe1\x9e\x63\x38\x7b\x19\xd0\xf9\x90\x5d\xc2\xb1\xaf\x69\x0a\x58\x06\x73\xf0\xa8\xf7\x0f\x4a\x66\xeb\xa8\x78\x02\xac\x94\x06\xdc\x96\x8c\x63\x99\x3e\xf7\xfd\xd1\xcd\xfe\xe8\x66\x7d\xba\x99\xfd\x3c\xe7\xa5\x30\x2b\x1f\x41\x6c\x22\x19\x45\x6f\x91\xe7\x49\x23\x94\x1e\x93\x41\x6f\xe0\xca\xbd\x56\x24\x6b\x94\xc9\x54\x98\x44\xd5\xbc\xa0\xdb\xea\xfb\xfc\x1e\x58\xd2\xe5\x97\x46\x91\x90\x01\x07\xbe\x1c\x44\xed\xea\x16\xc0\x54\xc7\x1e\x41\x1a\x88\x4e\x27\x84\x14\xeb\x75\xec\x63\x6c\xca\x77\xa7\x67\x13\xec\x26\xdc\xf3\x71\xdf\x9b\xfb\x62\x29\xd6\xe3\xa1\x53\xb0\x46\xf7\x7f\x83\x44\xb4\xf3\x6c\x11\x3c\xf2\xf5\x79\xa1\xda\xf1\x5b\xd9\x56\xd1\x09\x58\x63\xfb\xe5\xfc\xf6\x6c\x7a\x7a\x35\xbe\x9e\xbe\x7e\x77\x79\x7d\x3e\x3a\x19\x4f\xc7\xec\xf8\xf2\x62\x3a\xb9\x98\xb2\x9f\x4e\x4f\x4e\x26\x17\xbf\x6a\x71\xd1\x2a\xdb\x63\xba\xba\x3e\xfd\x30\x9e\x4e\x18\xd2\xeb\x04\x61\x2e\x6d\xcf\xb5\x2d\xbd\x5e\x66\xe0\xdb\x55\xde\x9e\xf3\x3c\x8c\xef\xc5\xfc\xa7\x22\xa2\xfc\x5a\x69\x76\xbf\x94\x46\xb9\xd9\xe1\xe1\xe1\xaf\xec\x97\xf2\x79\x59\x50\x8f\xad\x3f\x45\x6b\xf4\xd2\xb3\x50\x0b\x65\xf3\x35\x91\x2e\xae\x99\x72\xee\x86\x8c\x39\xf5\x03\xa8\x0e\xfb\x38\x65\x79\x5a\xe6\xe2\xaa\x8e\xd3\xd4\xaa\x40\x37\x7f\xed\x04\xb4\xb9\x6f\x22\x43\x33\x58\xf0\x75\x20\xcb\x63\x7d\x43\x6c\xbc\xb5\xff\x00\xa1\xfe\xda\xac\xf1\x8e\x42\x31\x7e\xe2\xfa\x03\xb8\xad\xf7\x04\xca\x56\xc9\x57\x7a\xe7\x59\x31\xb9\x3d\xb9\x39\x35\xc1\x95\xf5\x2c\xf5\xb2\x85\xa9\x5d\xda\xca\x50\x38\x18\x5a\xc4\x2d\x0e\x35\x1a\xd8\x94\x41\x8f\x1e\xc4\xe2\x6d\x42\x6f\x2a\x6b\xcd\x71\x1d\x46\x57\xcb\xa8\xad\x88\x3d\x7d\x1c\x7b\x47\x6b\x03\x1c\x3d\x1b\x7d\x49\x7b\x6e\xe5\x92\xad\xbf\x4e\x69\x2b\x62\x4f\x1f\xae\xd0\x51\xf3\x86\xeb\x75\xc3\xc7\xd1\x17\xb4\xe6\x35\x4b\x0a\x2d\xf9\xc6\x3b\x7b\x8a\x1d\xe3\xc1\x7d\x2c\x60\x4d\xd3\xd4\xbc\x5d\xc0\x9a\xb6\xbf\xce\xa1\xaf\x25\xdf\x5a\x86\xc0\x01\xb3\x4b\x1a\xa8\x6f\xbc\xb7\xa7\x1c\x64\x5d\x93\x73\x5b\x11\x0a\x7d\xbd\x7a\xdb\x7c\x49\xa2\xa9\x1f\x3e\x1b\x6f\xed\xa9\x5a\x5a\x03\xf4\xbf\xf8\x97\xfe\x1c\x06\x06\xcd\xd7\x44\xba\x06\x6f\xa4\xed\x02\x04\xda\x4f\x26\xc4\x4f\x2e\x78\xa5\x0f\x93\xbe\xe3\x6d\xbd\x27\x50\xc6\x40\xdd\x68\x59\x73\x95\xc2\xa1\x4b\xbe\x2a\x2d\x6c\xb2\x45\x5c\x84\x7e\x79\x6e\x03\x49\x62\x0c\x00\xdc\xc8\xd8\xe3\x7c\x34\xf9\xf3\x6d\xbc\xb5\xa6\x2a\x97\x5a\x96\x17\xb8\xd3\x06\xad\x14\xf6\x8c\x59\x1c\x72\xc6\x67\x8b\x58\x2a\xb2\xe5\xa5\x99\x60\x91\xae\x6a\x2e\x8c\x27\xeb\x89\xca\xb0\x14\xee\x82\x85\xbd\x7c\x82\xb7\xd1\xf4\x64\xbb\x80\x3d\xed\x94\xe3\x21\x56\xe2\x05\xfa\x8e\xd9\x5e\xc8\x9a\x07\x04\x27\xd5\xd2\x6e\xbe\xb4\xa6\x19\x44\xb3\x38\x85\x08\xcf\xac\xc8\xbc\xb9\xbe\x69\xb4\xe5\x08\x9c\x94\xc1\xaf\x8a\x3f\x15\x06\xcb\x40\x2f\x4e\x47\x69\x32\x57\xd4\xbe\xca\x50\xe0\xa7\x10\xb6\x1b\xec\x05\x85\x72\x9f\xc5\xd1\x91\x0c\x73\x12\xe4\x8d\x0e\x76\x00\x13\x75\xfe\x31\x5b\xe7\x4c\x82\x22\x32\x85\x92\xa1\x87\xef\x9e\x21\x59\x76\xfd\xfa\xdf\x27\xc4\x55\x55\x57\xbf\x6e\xb4\x15\x21\xd0\x7f\x44\xab\x97\x20\x5a\x88\xcd\x71\x2e\x73\x35\x06\x51\x65\xa6\x65\xe0\x6a\x5b\x91\x8c\x45\xba\x5c\x61\x8c\x1c\x35\xc5\x1f\xbf\xfb\x78\x33\x1d\xbf\x3f\xbd\x78\xff\x71\x7a\x7a\x3e\xb9\xbc\x9d\x96\xf3\x95\xb1\x8f\xf4\x23\x37\x18\xee\xeb\xe9\xed\xd5\x80\xb8\xbb\xc8\x59\xe3\x0e\xbd\x7b\xae\x5f\x5e\x37\xde\x12\xa8\x82\x45\x53\x79\x93\x62\x20\xdf\x5e\x8c\xc6\xa7\x48\xe4\xfe\x48\x3f\x3a\x60\xab\x26\xa6\xd2\xb6\x92\xb6\xe7\x38\x38\x2b\x1a\x34\xa1\xad\xf7\xf6\x32\x80\xf5\x17\xc6\xcd\xad\xf2\x50\x29\x57\x7b\x75\x02\xa8\x9f\x54\x28\x55\xe9\x78\x30\x8a\xaa\x0f\x96\x38\x8a\x28\x84\xf9\xcc\x82\xdc\x14\x33\x92\x56\xd9\x1e\x53\x0c\x49\x0b\xf4\x5c\x37\x5e\x5b\xd3\x5d\x9a\x23\x60\x6e\xbe\x26\xd2\xd5\x77\xc8\xad\xf7\xd6\x94\x8d\x5a\x95\xa3\x46\x15\xc5\x11\xbb\xf7\xb2\xf5\x01\xac\xbe\xc7\x99\x8a\x52\xf8\x19\x64\x68\xbc\x24\xd0\x84\x93\x7e\x98\x32\x4b\x7b\x48\x75\xac\x25\x7a\xa0\x51\x9b\xb3\xaf\x68\x8d\xc5\x14\xed\xc0\x2d\x98\x41\x3d\xfa\x8a\x89\x74\x4b\x21\x0a\x0f\xfd\x77\x77\x4c\x98\x21\x76\x9d\x86\x61\xbb\xf1\xd6\x9a\x2a\x28\xf5\xd5\x89\x3e\x9e\xf7\x1b\x66\x7e\x7d\x51\x7b\x7e\xa2\x9e\x9e\x43\xe3\x25\x89\xa6\x01\x76\x0f\xa4\x59\x3d\x01\xc7\xfd\xaa\x79\x0f\x62\xd5\x91\x1c\xa9\xd8\xa3\x54\x99\x63\xf4\x00\xb6\x0a\xd8\xd3\x96\x76\xd7\xfa\x2b\x97\xed\x02\xd6\xb4\xff\x66\xce\xac\xbf\xf9\xda\x9a\x2e\x2c\x8d\x32\xd0\xc0\x13\x26\x32\xa8\x45\x03\xba\x0f\x22\x30\x53\x09\x32\x26\xd6\x38\xcf\xa4\x80\xb8\x11\x21\x61\x54\x41\xc0\xf5\xdd\xb6\xbd\x10\x81\x47\x39\xf1\x66\xc6\xfc\xbd\xda\x72\xae\x9c\xf4\xdf\x54\x5f\xd0\x9e\x97\x39\x2c\xb3\x73\x18\x66\x65\x70\xa8\x27\xbc\xf9\xde\x9a\xb2\x65\x84\x97\xde\x81\x5d\xb6\xae\x7b\xb7\x18\xe8\xaf\x83\xad\x28\xdb\x44\x8a\x19\x24\x40\x8c\x75\x74\x96\x01\x82\xb2\xd8\x87\xdb\x1e\x22\xbc\x76\x49\xe3\x13\xd7\xab\xc9\xad\x65\xc8\x1c\x8c\xab\x6c\x7b\x21\x2a\x8f\x51\xa7\x5d\x42\x7b\x31\x2a\x9f\xce\x4f\xe2\xf4\x25\x30\x17\x8b\x9e\xf2\xc6\x6b\x7b\xba\x81\xb1\xc3\x06\x8e\xbd\xd4\xe8\x53\xeb\xea\x20\x5b\x8b\x0a\x60\x38\x0c\xd3\x94\xa2\x71\xe9\xa2\xaf\xa1\x6c\x3c\x44\x40\x8f\x3f\x03\xdd\xdc\xf1\x4a\x19\x53\x9c\x18\xad\x5a\xb6\x0a\x50\x68\x1b\x96\x62\xd7\x05\x58\x1e\xbd\x1a\xc9\x16\x4e\x83\x04\x92\xcb\x9b\x46\xc9\xe6\x7b\x2a\x65\xe6\xa1\xb5\xff\x1b\xb1\x4b\x94\xf9\x1a\xbb\x58\x19\x2a\x58\xf3\x06\xa7\x6e\x2d\x9f\xe6\x4b\x7b\x9a\x98\x8b\xc1\xea\x86\xa0\xf3\x62\xc0\xd8\xe9\x0b\x15\x60\x11\x16\xd8\x18\xf4\x05\x2d\x1f\x43\x49\x6b\xb1\x8a\xa8\xeb\xa4\xae\xa5\x84\x3d\xf5\xed\xb0\x66\xb5\xc9\x46\xcf\xd2\xb2\x9a\x3d\x0e\x43\xd8\x84\xc2\x29\x6c\x82\xa8\xa5\x1f\x8e\xcd\x97\x24\x9a\xfa\xd9\x6e\xe3\xad\x3d\x55\xb8\x15\x33\x90\xdd\x78\x4d\xa0\x6b\xd0\x0c\x9a\x2f\x49\x34\xab\xe0\x72\x46\xe2\x2d\xa5\xac\xb9\x3c\x76\xb8\xb6\x6e\xbd\xb7\xa6\xfc\x84\xa6\xd7\x2a\x00\xb2\xbc\x8c\x40\xb7\x03\xf4\x3e\x42\x1f\x65\x2d\x53\x4a\x55\x6b\x3c\x2b\x83\x6a\xb5\x72\xd2\xaa\xbe\xc8\xf4\x1a\xca\xe8\xfe\xeb\x57\xf6\x0a\x63\xd2\xc9\x16\x3b\x92\xf1\x58\xca\x7c\x4b\x37\x39\x98\x8e\x7e\xfd\xaa\x4f\x00\xd4\x93\x1a\x05\xf5\xf1\xbb\x32\xce\x4f\x12\x98\xf0\xb4\x97\x73\xe2\x64\x8e\x41\x62\x28\x49\xe2\x56\xa6\x3d\x67\x0b\x1e\x26\xec\x97\xe3\xcb\xf3\xf3\xf1\xc5\x89\xde\xa0\xda\xaa\x0e\x0d\x41\x11\xe5\x97\x0f\xca\x8f\x27\x13\x54\x4b\xf7\x15\xbd\xc9\x91\x6d\x35\x12\x0e\x69\x4a\x57\x86\xd8\xe9\xb2\xbc\xb3\xa8\x41\xe1\x7e\x12\x64\x9f\x6e\x61\x2e\x95\x09\x70\xd5\x13\x15\x87\xcb\x04\xc2\xb2\x22\x09\x8b\xd0\x0a\x4a\xa1\x8c\x66\x4e\xc6\xb2\x14\x8e\xdb\x56\x30\x2a\x83\x6d\x19\x0d\xe8\xf8\x5d\xf9\xa1\x9b\x79\xfa\x31\x34\x50\xcd\xf1\x36\x93\xc9\x52\x65\xe2\xe1\x75\x70\x20\x63\x4f\xda\x23\x73\x62\x9b\x00\x12\x85\xa5\x28\xb1\xac\x11\xc0\x05\x8a\xd0\x14\xe1\xc0\x01\x92\xaf\x9a\x0f\x99\xfb\x13\xa4\x60\x7f\x17\x4a\x9f\xba\x2a\x5e\x95\x74\x6a\x32\xa1\xeb\xac\x42\xe1\x7f\xce\x97\xcd\x31\x21\x1e\x58\x8c\x25\xab\x6a\x24\x1c\xb1\xcf\xc3\xe9\x2a\x01\x8a\xe5\xcf\xd6\xf4\xf4\x46\x54\x74\x22\x14\x8c\x97\xa5\x41\x80\x62\xd1\x61\xc3\x6e\x51\xa3\x0f\x77\xc8\xda\x94\xc6\xf3\xd4\xe4\x48\x63\x5b\xad\x0f\x8e\xac\x98\xcd\x38\x37\xa9\x91\x76\x95\x28\x18\x9a\x16\x95\x6c\x59\x64\xd2\x93\x96\x65\xa8\xbb\x60\x7c\xde\x42\x4c\x37\xa8\xdd\x99\x70\x39\x12\x1a\x12\x6b\x6f\x8c\xc3\x61\x23\xd8\xb7\xd2\x2a\x53\x30\xd5\x23\xdf\xbe\x92\x33\x8b\xd8\xe4\x9f\xc1\xd6\xf8\xeb\xd7\xf3\xc6\xc1\xc0\x41\xdd\xc0\xae\x51\x8e\xb5\x1a\x0f\x1e\x54\x61\xb5\xb2\xb2\x5c\x99\x08\x7a\x1d\xd0\xb2\x7a\x55\xae\x55\x07\xac\x7e\x59\x8b\xc1\x2b\x2f\xe2\xe8\x2d\x18\x1b\x94\x55\xc6\xd2\xc8\xbd\x43\x03\xa7\x4a\xb6\x2f\xa4\xb6\x07\x26\x00\x49\xde\xdd\x94\x4b\x8f\x9c\xfb\x31\x7b\x66\xf9\x68\xed\x65\xdd\x75\x0f\xd4\x97\x1c\xa5\x53\xdd\xa8\x73\xc6\x92\x6c\xe7\xc1\xa4\x55\x9d\x21\x10\x60\x4f\x38\x91\x4e\x18\x1d\xfd\x87\x4c\x82\x88\x2f\xdf\x58\x1f\x0e\x2b\xbd\xae\x45\xab\x8b\xd3\xfa\x9b\xa6\xba\x37\x5b\xf0\xd9\xa7\x5a\xc0\x02\x79\x6a\x6a\x54\x2d\xf7\xca\x9e\xd2\x2e\xa5\x9a\x03\x8a\x17\xaa\x7a\x62\xdf\x24\x07\xae\x78\xf8\xb9\x3e\x01\x6d\x75\x59\x93\xbc\x83\x90\x6d\x95\xe3\x7f\xfc\xfa\xff\x05\x00\x00\xff\xff\x7f\x3f\x25\xcb\x2f\xf4\x02\x00") - -func cf_i18n_resources_it_it_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_it_it_all_json, - "cf/i18n/resources/it_IT.all.json", - ) -} - -func cf_i18n_resources_it_it_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_it_it_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/it_IT.all.json", size: 193583, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_ja_ja_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\xfd\x77\xdb\x38\x92\x2f\x8c\xff\x7e\xff\x0a\x7c\x73\x7f\x48\xfa\x7b\x2c\xa7\xd3\xd3\xb3\xe7\x5e\xdf\xf3\x9c\x7d\x14\x5b\x49\x7b\xc7\x6f\x6b\xcb\x99\xed\xdb\xee\x93\xa6\x45\x58\x62\x87\x22\x39\x7c\xb1\xa3\xc9\x66\xff\xf6\x07\x55\x00\x29\x52\x22\x40\x14\x48\xc9\x99\xd9\x9e\x73\xa6\x63\x91\x40\xd5\xa7\x40\xbc\x14\x80\x7a\xf9\xe5\x7f\x30\xc6\xbe\xc0\x7f\xc4\xff\x5e\x04\xfe\x8b\x23\xf6\xe2\x2e\xba\x8b\xa6\xa7\x57\x47\x77\xd1\x8b\x83\xf2\x4d\x9e\x7a\x51\x16\x7a\x79\x10\x47\xba\x22\xcb\xd8\x0f\x1e\x02\x0e\x24\x1e\xbc\x30\xe3\xf0\xfc\xeb\x81\x86\xfe\xcf\x71\x91\xb2\x7f\xbb\xb9\xbc\x60\x59\x9e\x06\xd1\x9c\x65\xab\x28\xf7\x3e\xb3\x20\x63\x41\xf4\xe8\x85\x81\x7f\xc8\xd8\x55\x1a\x27\x3c\xad\xbd\xca\x17\x41\x76\xc4\xd8\xec\x81\x65\x3c\x1f\xa5\x45\x14\x89\xaa\x23\x1e\x3d\x06\x69\x1c\x2d\x79\x94\x8f\x1e\xbd\x34\xf0\xee\x43\x3e\x9a\xa7\x71\x91\xb0\x97\x5f\xee\x5e\x44\xde\x92\xdf\xbd\x38\xba\x7b\x21\xc8\x16\xe2\xaf\x83\xed\x47\x5f\x5f\x1a\x25\xfd\x76\xc1\xee\xbd\xcd\xb3\xdc\x9b\xff\xc3\xb4\xf9\x6e\xc0\x12\xda\xfc\xff\xcf\xa6\x0b\x9e\x71\x01\x26\x7d\x0c\x66\x9c\x25\xa1\x90\x93\x2d\xbc\x47\xce\xbc\x88\x79\x59\x16\xcf\x02\x2f\xe7\x3e\x9b\xc5\x59\x7e\xc8\x8e\x53\x2e\xda\x40\xc8\xea\x55\x35\x82\x48\x08\x11\x89\x3f\x9e\x82\x30\x14\xbf\x66\xa2\x55\x40\x48\x59\x43\xdb\x82\xc8\x98\xf9\x3c\x8a\x81\x7a\x0b\xfb\x2c\xe1\x33\x21\xc5\x0c\xe9\x64\x75\x28\x4f\x41\xbe\x10\x2c\xf8\xf2\x90\x9d\x3e\xb4\x21\x89\x1f\x24\x82\x7c\x95\x70\x68\xf3\x19\xa0\xe6\xfe\x81\x28\x0b\xc4\x24\xd2\x7b\x2e\xc1\xa6\xdc\x3f\x6c\x6d\xba\x3c\x2d\x4c\x2d\x37\x4e\x12\xf1\xe1\xbd\x54\x10\x36\x4e\x43\x9a\x72\x84\x6f\x04\x14\xbe\x7c\x39\x14\xff\x5c\x88\x8f\xfe\xf5\x2b\x7b\xf2\xb2\x92\x24\x2b\x32\xf8\x1c\xaa\xc1\x97\x4b\x2f\xf2\xd9\x6f\xa2\xf0\xb1\xfc\xfb\xeb\xd7\xdf\x3a\xc1\x0d\x43\x9a\x20\xcf\x45\xcc\xbc\x24\x60\x3c\xf2\x93\x38\x88\x72\x18\x08\xfa\x7e\xd2\x55\x9c\xc0\xf7\x3a\x2e\x72\xce\xf2\x18\x3e\x7d\x11\x2d\xbd\x24\x11\x42\x0a\xe1\x44\x17\x64\xd8\x11\xa2\x3c\x5c\x31\xf5\x5c\x14\x13\x5d\x4c\x70\x4e\xc2\x60\x86\x68\x4c\x18\x87\x23\x4d\x90\x07\x96\x37\xc6\x6e\xc5\xe8\x7d\x29\xa6\x93\xa5\x97\x7e\xe2\xb9\x18\x40\x62\x00\x8c\x32\x76\x33\xb9\xfe\x70\x7a\x3c\x79\x09\xdc\x1e\x03\xfe\x24\x86\x5a\x36\x4b\x83\x04\xd8\x65\x30\x42\x82\xc8\x0f\x1e\x03\xbf\xf0\x42\x35\xea\x62\x18\x4b\xf3\xe0\x91\x47\xe5\x88\x32\x49\xbc\x4f\xe6\xd4\x36\x19\x67\x59\x30\x8f\x58\x1a\x87\x3c\x93\xb3\xc5\x4b\xe8\xb7\xf2\x3b\x08\xc8\xa9\xe8\xe8\x30\xfb\xc6\xe9\x7c\x04\x85\x5e\x32\xe8\xdb\xed\x65\xb2\x44\xc8\x24\x4b\x75\xb5\xc6\xce\xd9\x52\xdb\x01\xbf\x0e\x90\x7f\x37\xf5\xd2\x39\xcf\xab\x91\x8b\x1f\x26\xc7\x67\x2c\x12\x9f\x07\xb9\x75\x89\xe7\x4a\xcd\x19\xb5\x8e\xbe\x68\x3f\x6b\xac\x56\x34\xa8\x08\x0b\xd5\xeb\xc3\x58\x2c\xde\x6c\xe4\xb1\xf1\xd5\x29\x1b\x8d\xb2\x4f\x41\x32\xca\xb2\x70\x84\x8b\x3f\x42\x7a\x29\x18\x61\x51\x98\xc1\x0c\xa5\x04\xb8\xac\x48\x92\x94\x67\x52\x43\x60\x3c\x4d\xe3\xb4\x4b\xca\xfd\xe3\xb0\x6e\x29\xf1\xd7\x5b\xb1\xca\x8a\x05\xe4\xdc\x8b\xbc\xb9\x50\x81\x46\x52\x79\xe0\xd8\xe9\x97\xf8\x10\xa7\xc1\x7b\x59\x8c\x79\xb3\x59\x5c\x88\xe9\x1d\x5e\x27\xde\x0a\x54\x21\x31\x4d\x3c\xc4\x86\xf5\x6b\x37\x4c\x28\x32\x1e\xbf\xfb\x78\x31\x3e\x9f\x30\xaf\x10\xa3\x1d\x54\xb2\xff\x97\x7f\xf6\x96\x49\xc8\x0f\xc5\x8a\xc9\xee\x5e\xdc\xdd\xdd\xbd\x48\x84\xea\xf2\x14\xa7\x3e\xfc\x7d\xf7\x82\xbd\x12\x53\xa1\x27\xf4\x92\xbf\x15\x42\xf3\x11\xaa\xe2\x03\x7c\x46\xb1\x58\x44\xac\x2c\xf8\x9d\x49\xe0\x5d\x73\x1c\x52\xfa\xe5\xaa\xe2\x00\x30\xa0\xbb\x2a\x0c\x0f\xa2\x3b\x96\xaf\xd4\x5c\xe9\xc9\x79\xe3\x3b\xf3\xf7\xde\x39\x4b\x17\xf9\x67\x71\xb2\x1a\x65\x62\x3b\x20\x56\xbf\x9b\xcb\xdb\xeb\xe3\xc9\x68\x7c\x75\xc5\xa6\xe3\xeb\xf7\x93\x29\xfe\xf9\xcb\x28\x2e\x7f\x5e\x5e\xbf\xff\x55\xfc\xce\xca\xdf\x37\x57\xe3\xe3\x09\x3c\x19\x45\xf1\x48\x0c\x3c\x50\xbe\x7e\xb5\x6b\x84\xdd\xf2\x75\x69\x09\x39\x13\xbd\x8a\x97\x41\x0e\x9d\x2c\x85\x2f\xa4\x06\x9b\x6c\x79\x98\x61\x64\x21\xa1\xca\xf1\xd4\x9b\xe5\x62\xcd\x17\xaa\xd1\x68\x54\xd1\x40\xed\x3c\x49\xe3\x65\x92\xe3\x47\xbb\x8f\xf3\x85\x65\xaf\xd8\x0b\x7b\xf7\x76\x11\x93\x6e\x16\xb3\x57\x9b\x9c\x84\x22\x24\x50\xb2\x22\x0d\x01\x5e\x7c\x9f\x7b\xa2\xac\xc7\xe2\x88\x8f\xf2\x40\x08\xb0\x05\xde\x6a\x82\xd8\x19\xcb\x1e\xf2\x17\xdb\x43\x76\x94\x38\x4f\x5a\x94\x3e\x31\x30\x6b\xfa\x86\xd1\x1e\xd1\x0e\x67\xcd\x5d\x73\x1e\xbc\x6b\x24\xde\x9f\xff\xfc\x14\x5f\x9f\xb0\x57\xf2\x38\x60\xa5\x19\xd6\x62\xd7\x2a\x74\xbb\x02\xd6\xf3\x6c\x88\xb6\xe8\xcd\xd7\xa5\x25\x92\x22\x5b\x08\xe5\xec\x4a\xfe\xfa\x65\x74\xcf\xde\xde\x9e\x9e\x9d\x88\x79\xfa\x2f\xf8\x08\x26\xeb\x19\x3b\xbe\x3c\x3f\x1f\x5f\x9c\xc0\x0f\x9f\x9d\x5c\x9e\x8f\x4f\x2f\xe0\xef\x07\x26\x9e\x9e\xbe\x9b\xdc\x4c\x3f\x5e\x8d\xa7\x3f\x59\xae\x20\x25\xcb\x21\xb9\x39\x8c\x08\x84\xd1\x4b\x06\x6b\x48\x9d\x5f\xe3\x12\x77\xa9\x5e\x28\x56\x85\xf5\x44\x19\x06\x59\x0e\x7b\x54\x3c\x07\x19\xf9\x3c\x0c\xc4\x12\x03\x5b\x79\x6f\x0e\x8a\xb2\xb7\x3e\x53\x7a\x4a\x83\x3c\x17\xbb\x58\xb5\xc9\xff\x70\x3c\xbe\xfa\xa8\xb6\xc3\x37\xac\x76\xcc\xc7\xca\x63\x3e\x1c\x5b\x5e\xb4\x12\x0b\x4d\x21\xba\x56\xed\x54\x20\xd3\xef\xbf\xbf\x59\x9c\x3d\x5b\x5a\xed\xfd\x47\xb5\xc3\xbf\xe8\x21\x98\x17\x29\x32\x12\xe3\x2e\x15\x43\x50\x2c\xdc\x70\xc4\x2a\xc4\xc5\xad\x8b\x3c\x83\x8d\xef\x7f\xe7\x33\x50\xe6\x47\x42\xd1\xe7\x87\x77\x51\xad\x87\x14\x89\xd8\xdf\x08\xa2\xea\x9c\x50\x74\x6b\xeb\x43\x55\x38\xe8\xd5\x35\xf6\x43\x20\x5a\x45\x00\x84\xc5\x13\xcf\x7f\x7b\x82\x3f\x64\xc8\x0b\xce\x45\x13\x0f\x8e\x38\xe5\xa7\xa9\xd5\x93\x1c\xbd\x08\x3e\x20\x1c\xcf\xde\x67\x71\x08\x07\x4f\xe2\xcb\xa4\x1c\x7a\xc7\xe3\xba\xaa\xc4\xd7\xd5\x10\x30\x54\x3e\x4e\x2f\x3f\xbe\x3b\x3d\x9b\x28\x59\x27\x72\x2a\x84\x6e\xb4\x05\xf1\x08\x4b\x7c\xc1\xff\x8a\xff\xdd\xbd\x98\x85\x45\x26\xa0\x7d\x8c\x62\x9f\x67\xa2\xe9\xd6\xef\xe4\x6b\xd8\x6d\xc1\xe3\x3f\x1f\x34\x9e\x2f\xf9\x32\x4e\x57\x1f\x97\xf7\xf0\xee\xcd\xf7\x3f\xfc\x58\xbe\xfd\x8a\x7f\x7c\xd5\xef\x7c\x8b\xef\xbf\xff\xfe\x7f\xef\xba\xe7\x0c\xd6\x71\xf6\xd4\x6f\x86\xef\x32\x3b\xea\x31\xe6\x0e\xa3\xe9\x2f\xe6\xee\x22\x7b\x44\xbd\xcb\x10\x16\xa0\x1d\x76\xa4\x23\xd5\x38\x65\x4b\xde\x07\x91\x5f\xb5\x63\xb5\xca\xab\x29\xf7\xe3\xe9\xc5\xcd\x74\x7c\x71\x3c\xf9\x6f\x3c\x39\xd9\x37\x50\xdf\x49\x2b\xe1\xe9\x32\xc8\x32\x58\xba\xa0\x43\xdd\xbd\x48\xb9\xe7\x8f\xe2\x28\x5c\x09\xfd\xdf\x3c\xff\xfc\xd1\x67\xfe\x9b\xf6\x99\x9d\x2f\x74\xdf\xe6\xac\x25\xaf\x4e\xab\x26\x56\x2d\xcb\xae\xce\xc6\x17\xff\x40\xfd\x70\xf8\x6e\x68\xd7\x4e\xff\x58\x3d\xf0\x59\xa7\xba\x3f\x3a\xda\x7f\x9f\x8e\x46\xda\x24\xa6\xf3\x71\xe1\x07\x79\x0c\x97\x3b\xd7\xe5\x3a\x0d\x17\x39\x78\x47\x15\xc3\x4d\x1e\x5e\xe1\xe0\xc1\x4c\xca\x93\x38\xcd\x33\xf3\xc1\x41\x6f\x92\x44\xfc\xeb\xcb\xa9\x53\xb1\xaf\x6e\x5e\x4e\xc1\xb1\x52\x76\x20\x3a\x5e\x08\x63\x03\x5e\xcc\x16\x5e\x34\x57\x96\x30\x07\xf8\x24\xe3\x39\x58\xc3\x44\x3e\x74\x51\xdc\xd1\x77\x0b\xb8\x63\x9e\x94\x16\xb8\x82\xfe\x9c\x2d\xe2\x22\xf4\xb1\xdb\xb3\xbf\x07\x09\x76\xed\x83\xf5\x09\x74\xfd\x21\x1c\x33\xb0\x30\x9e\x79\x21\xf3\x83\x54\x40\x14\xbd\xea\x90\x5d\xc5\x59\x80\x83\x30\xc8\xc4\xeb\x04\x7f\x3d\x72\x3c\xc6\x17\x72\x82\x34\x79\x26\x46\x76\x10\xa7\x41\xbe\x92\x32\x88\x92\x59\x8c\x96\x2c\x0f\x69\xbc\x14\x24\x9f\x78\x96\x03\xb7\x45\x30\x5f\x70\x93\x71\xd2\x6e\x50\x47\x43\xa1\x25\xa8\x0a\x57\x70\x38\xb6\x2c\xc2\x3c\x80\xe1\xef\x25\x49\x75\x7a\x2b\x3a\x43\xf0\x20\xe8\x9a\x8c\x28\xe9\x04\x28\x1d\xe3\x06\xce\x8f\xd7\x23\xf1\x03\x18\x8a\x84\xf1\x5c\xf4\x40\x35\xe6\xaa\xae\x08\x26\x67\x19\x13\xcd\x88\x77\xd2\x78\xee\x6c\x46\x3d\x18\x69\xb2\x3c\x27\xfc\x91\x87\x68\xf3\xd7\x76\x17\x8d\xed\x27\x39\xe3\xfc\x5d\xe1\xe0\x08\xcf\x7e\x0e\xdb\x1d\x2f\xb2\xc4\x16\x53\x0d\x3c\xe1\x91\x3c\x45\x14\x30\x8b\x54\x5d\x29\x54\x26\x3f\x96\x5f\x74\x17\xac\x28\xf2\xe2\xca\x2e\xb5\x07\x5f\xae\xd3\x0e\x7b\x97\xd3\xbc\x9c\x57\xa4\x99\x25\x03\x33\x3b\x18\x5b\x69\xea\xad\xe4\xe0\xaa\xad\xce\xa0\x6a\x64\xa0\xad\x48\x13\xaa\x7b\x69\x92\xc7\x59\x5a\x84\xdc\x7c\x40\xfc\x0d\x83\xdd\x67\x9b\x4b\x0a\xa8\x78\xd5\x24\x41\xe1\x7a\x49\x23\xe9\x62\xf1\xb7\x5e\xc6\xd9\xa5\x52\x6f\x33\xb9\xe9\x85\x3b\x68\x98\xcc\xa1\x3f\xa2\x7a\x01\x35\xb3\xbf\x15\x5e\xca\xd9\x7d\xea\xcd\x3e\xc1\x0a\x00\x2f\xeb\x36\xb6\x8b\x40\xc0\x53\x7a\x32\x14\x4c\xf9\xdf\x0a\xb1\x98\xe0\xdd\x63\xae\xa4\x10\x8c\x95\x52\xf7\x01\x35\xb9\xdf\x33\x31\x79\xa1\x78\xea\x0e\x4b\xea\x73\xbf\x28\xed\x6b\xad\xbb\xdd\xbd\x10\xcd\x98\xc7\xb3\x38\x94\x87\x1e\xf9\x2c\x01\x95\x79\xfd\x5a\x88\x29\x66\x43\xec\x42\xb2\xc4\x9b\xef\x0f\x7f\xf8\xf1\xc7\xc3\x37\x87\x6f\xfe\x57\xb3\xa4\x9c\x34\xb0\xcc\x9f\xfe\xf4\xfd\xbf\xa8\x53\x93\x52\xd3\xfb\x75\x97\xbd\xf2\x8f\xcf\xf9\x8c\x9f\x93\x32\x6e\x71\xcd\x15\xfb\xad\xf8\x09\x27\x63\xb8\x48\xf6\x4a\xb3\xc8\x72\x33\x23\x1f\xea\x0d\x2b\x5d\xc9\x50\x70\xfe\x32\x0a\xd8\xc5\xed\x79\xb5\x83\xba\x81\xfb\xcd\x4f\xec\xe4\xf4\xe6\x2f\xf0\xd7\x92\x9d\x4f\xce\x2f\xaf\x7f\x86\xbf\x23\xf6\xd3\xe5\xcd\x14\xfe\x4a\x70\x93\x25\xed\x69\x44\xb5\x63\x2c\x9a\xb3\xe9\xe9\xf9\xe4\xf2\x76\xda\x71\x71\xb9\x6b\x8e\xf6\xd2\x7b\x3e\x8c\x42\xd1\x9e\x86\x4f\xd0\x56\xc6\x9e\x83\x1f\x73\x69\x05\xcd\x3f\xc3\xd5\x24\xdc\x97\xa3\xd2\xa1\xe7\xd7\x5d\xc3\x9e\x3b\x68\xdd\x21\x1c\xee\xae\x4a\xa3\x76\x3d\x5f\x53\x59\x47\x8e\x31\x98\x7b\x5b\x72\xdc\x28\x4b\xe2\xc8\x97\x49\xbe\x32\xf2\xd9\x28\x41\xa2\x0e\xdf\xa2\x3c\xeb\x10\x1b\x9f\x03\xb1\x4d\xe4\x30\x43\x36\xcc\x88\x0e\x18\x3f\x9c\x1f\xb2\x45\x9e\x27\x47\xaf\x5f\xaf\xe2\x22\xfd\x08\x1f\x0d\xec\x29\x8c\xc0\x86\x23\x4e\x97\xe9\xd1\x0b\x42\x9c\x54\xc4\x74\x0c\xf4\x4c\xa3\xc0\xa6\x0e\x19\x81\xd0\x4d\x93\x18\xb7\xd8\x62\xa7\x28\xe5\x5e\x7a\x9f\xc4\xba\x22\xb4\x56\x16\xe4\x72\xab\x2b\xdb\x26\x09\x8b\xb9\x62\x69\x50\xfa\x86\xa2\x6b\x2f\x09\xb0\x7b\x00\x83\x00\x3d\xa8\x96\x22\xf6\xf4\x53\xbe\x8c\x1f\xab\x3d\xb1\xb2\x6e\x00\xb4\x19\x6c\xed\x02\x9e\xe9\xf9\x12\xaa\xda\x1b\x80\xbf\xb8\xc2\x06\x13\xab\x65\xb9\xb0\x57\xe2\x95\xab\xba\x6a\x7d\xc1\xd9\xf7\x72\xcf\xe0\x43\xd1\x87\x96\x35\xe2\xef\xaa\x39\x06\xe7\x53\xc3\x96\xc1\x50\xd2\x9a\xdb\xb8\xf2\x14\x82\x33\x5e\xa1\xb6\xc5\x78\x50\x52\x1a\x5b\xca\x75\xfb\x38\x8c\x0b\x9f\xbd\x03\x39\x53\xfd\xb4\xd5\x87\x94\x3d\xde\x93\x93\xd7\xd7\x62\xb5\xfd\x00\x27\xcd\xb7\xef\x4f\x2f\xb4\x70\x36\x5f\xdb\x9e\xc1\x6c\x71\x60\xd7\x93\xab\xcb\x9b\xd3\xa9\x58\xe1\xf5\xb2\x5b\x55\x22\x48\xf9\x01\xf4\x8c\x13\x03\xbf\xcd\x02\xf6\xb4\xcf\x4e\xc7\x37\x7a\xc2\xcd\xb7\xf6\x54\xaf\x4e\x2b\x87\x2f\x3d\xf1\xd6\x42\x4e\x3c\xd8\xab\x6a\x85\xc9\xc4\x12\xe3\x25\xc1\x61\xcd\x22\x50\x6f\x6f\xeb\x44\xc3\x09\xe1\x91\x15\x86\xa3\xbe\x5c\xa4\x37\x60\x30\x51\xbf\xbf\xea\xaf\x87\x6c\xab\x0d\x84\x83\xbd\x82\xf7\x8f\x3c\x85\x6b\xfb\xf2\xf5\x07\xf9\xf3\xeb\x57\xbb\x2f\xd4\x83\xaa\xbb\x14\x2e\x4d\xd9\xb3\x1d\xaf\x0c\x03\xb2\xf1\xd2\x9e\xe6\x0c\x76\xae\xb0\x63\x56\x5e\xe2\x2c\xe3\xb3\x02\x0e\xaf\x19\x7a\x29\x67\xb8\x41\x10\xc8\x4b\x33\xd9\xaf\x06\xe7\xe9\x7e\xc4\x1c\x30\x2b\x2f\xeb\x0d\x36\xc0\xa5\xc1\xc4\x02\x30\x99\x92\x3d\x5a\x5f\x6c\xb2\xd0\x35\xad\xa6\x92\xa1\xa6\x62\x58\x22\x6d\xea\x10\x11\xc0\xd5\x46\x5a\x7a\xb3\xc2\x99\x4c\x92\x74\xf0\x37\xd6\xa0\x70\xc7\x1e\x81\x84\x44\x63\xde\x5e\x9f\x89\xe1\x09\x14\x37\x5d\x94\x85\x9c\x70\x41\x27\x9e\x5d\xa6\x73\xf5\xec\xb5\x3c\xd7\x85\x87\x78\x50\xac\x1e\xcb\xef\x72\x5b\x7d\x97\xc3\x43\xbd\xfa\xb3\x7f\x00\xf6\x6d\x13\x06\x82\x50\xd3\xf7\xba\xd4\x10\xd5\x97\xbf\xe7\x00\x1e\x3d\xe0\xc3\x50\xfa\x1e\x8b\x9e\x21\x4f\xd0\x8e\xdf\x95\xaa\xd4\x6b\x0f\x28\x1d\x32\x76\xcd\xd1\x96\x1d\x08\x6c\x90\x2d\x95\xae\x0e\xf2\xd0\x04\x3e\x4f\xa1\x7d\xd4\x69\x7b\x20\x0f\xd8\xa0\x80\xbc\x2d\x07\x2a\x62\x48\x18\x5a\xfc\x9f\x44\xac\x9e\xdf\x31\xc3\xb0\x04\x35\x41\xd0\xd3\x44\x02\x84\x59\x50\xee\x12\x64\x87\x7a\x29\x84\xfc\x39\x2e\x44\x79\x38\xf9\xcc\xd3\x15\x2b\x22\x85\x0e\x24\xd1\xd5\x42\xd0\x42\xee\xa8\x14\x45\xde\x76\xa9\xe2\x75\xa9\x83\xe8\x31\xfe\x64\x6a\x41\x01\xe0\xa7\xf8\x89\x3f\xc2\x2d\xa6\xd8\x89\x97\x87\xb0\x0f\x41\x2a\x36\x58\x0f\x05\xd8\x57\x08\x65\x5c\xac\xa0\xb9\xe2\xc9\x82\x65\x02\xfa\xba\xd8\x7c\x35\xb0\xc2\x2b\xdc\x68\xc0\x8f\x6d\xc4\x12\x9b\xbe\xf3\xfc\x26\x1b\xf3\x8f\xb6\x74\x69\x4b\xeb\xcd\x4b\x58\xf3\xcf\xc7\x13\x6f\x65\x76\x02\xa7\xd9\xe5\x6e\x51\xda\x4d\x04\x95\x8b\x80\xa8\x23\xa6\x47\xfd\xc6\x7c\x18\xa2\x84\x41\x47\x67\x87\x5f\xd4\xe4\x66\xee\x46\x94\x6b\xdd\xce\xfb\x7f\x85\x20\xda\xc9\x77\xb0\x20\x3b\xec\x97\xd8\x62\x38\xcc\xb7\x68\x21\xeb\xfc\x35\xb2\x98\xf9\x3c\xe4\x78\xfd\x5c\x05\xf5\x40\xbd\xc1\xd4\xd8\x56\xb5\xec\xdb\x52\xea\x20\xcb\x42\xcc\x14\xf7\x5c\x45\x36\xe0\x60\xaa\x22\x84\x2b\x7f\xab\x40\x3d\xc6\xe0\x0e\xee\x84\xec\xb1\x0a\x05\x4a\xcf\xbf\xf1\x92\x44\x13\xd7\xfa\x40\xde\x0f\xa8\x8b\x35\x51\x37\xd4\x1f\x45\xda\x55\x22\x61\x68\x28\x86\xcd\xab\x0b\x83\xe2\x63\x5d\xd1\x1d\x0b\x8a\xf8\x14\xa7\x9f\xd0\xdc\xe8\x53\x90\x24\x6b\xed\x16\x6d\x08\x01\x8b\x35\x40\x1a\xb5\x7e\xa8\xd5\x88\x95\x6e\x66\x62\x19\x05\x95\x5a\x8e\x68\x59\x88\xd0\xae\x44\x72\x14\xdc\x62\xbf\x8e\x81\x34\xa0\x17\x81\xa1\x96\x1f\x78\xf3\x28\x16\x2b\xf0\x2c\x93\xb7\xd5\x61\x3c\xc7\x7b\x5c\x13\x5a\x07\x22\x14\x8c\x99\xe1\xd0\xa8\xf9\xd6\x9e\xaa\x8c\x71\xe3\xc9\x3b\x57\xb5\xe3\x33\xce\xce\x9d\x15\xe8\xbc\xe5\x56\x4b\x12\xf4\xf9\x43\x10\x49\x1b\x3b\x6c\xb1\x8e\xd9\xce\x81\x84\x2b\x3e\x08\xde\x23\x09\xc2\xc1\x80\x2d\x24\x5d\x2d\x32\x0a\x39\xaf\x13\x41\x98\x2b\x11\x31\x88\xa9\xf5\x03\x58\x61\x77\x70\xdd\x2e\x46\xe4\x23\xa7\xa2\x10\x37\xdf\xd7\xe2\x5f\xb9\x6d\x07\xe8\xf0\x44\x06\x2b\x52\xa1\x95\xd6\x5b\x77\xf9\x58\x6c\xe0\x9b\x9b\x77\xf9\x18\xb7\xf0\xd5\xf6\xbd\x11\x9d\xc9\x78\x84\xf0\xcc\x70\xf6\xdd\x6e\xcf\xd3\x3c\x3b\x68\x85\x8d\xe3\x3c\x41\xbe\x7c\xf2\x11\x9f\x48\x8c\xd5\x57\xc9\xd4\xf7\x58\xe3\x13\xff\x78\x51\xf0\x77\x14\xb5\x82\x58\xd8\x9d\x3b\x3d\x0f\x0a\x97\x56\xaa\xcd\x99\x82\xf0\xbf\xc3\x1f\x6a\xa1\xad\xe3\x72\x3e\x80\xdb\x19\x23\x7b\x59\xf3\x1c\x2c\x25\x70\x4b\x2d\xd4\xf5\xf8\x29\x0a\x63\xcf\x07\x2f\x33\x2f\x5d\x49\xab\x2c\xbc\x4d\xc6\x4b\xc8\x88\xe7\x60\x1c\x03\xb1\xb2\x8c\x62\x0d\x41\xd3\x51\x82\x65\x30\x4f\x3d\x79\x9c\xa9\x74\x9e\x53\x15\x23\xf3\x64\x1d\x90\xaf\xe3\xab\xf4\x26\x48\xc2\x1e\xe5\x78\x11\x83\x56\x82\x62\x4f\x87\x07\x27\x57\xe2\x0f\xf9\x99\x7f\x83\x2d\x5e\xb9\xbd\xfb\x6d\x53\x93\xfb\xad\xb4\x7f\x78\x48\x79\x69\x28\x58\xc5\x04\xfd\x6d\x1b\x72\x59\xab\x16\xb8\xd4\x53\x71\x4e\xd9\x31\x38\x05\xcd\x72\x38\x96\x11\x4f\xfd\xa5\x50\x10\x32\xd1\x32\x60\x4e\x1e\x3c\xe0\x61\x8d\xd8\x97\x46\x9f\xe4\xee\x14\x23\xbe\xca\x50\x69\xe6\x86\xfc\x27\x92\xce\xfe\xab\x16\x70\x58\x96\x43\xac\x08\x69\xa4\x2d\x84\x88\x46\x8d\xf0\x4b\xfa\x36\xa3\xd4\x75\x41\x04\x26\x32\xa6\xce\xaf\x2f\xe9\xc4\x4d\x68\x98\x0b\x31\x53\xf1\xcf\x09\x6c\x3c\x21\x3c\xb0\xb4\xce\x01\x35\xff\xde\x9b\x7d\xc2\xe3\xe9\x58\x6c\x07\x46\x5e\x4d\xf2\xc3\x32\x96\x35\x86\x35\xfc\xad\x1e\xf0\x0f\x9c\xdf\xff\x34\x2b\xef\x0e\xf1\x17\x87\x98\x36\xf2\x39\xb4\x58\xf9\x2c\x56\xcf\xc4\x1a\x51\x3e\xca\xd4\x23\x69\x12\x8f\x0f\x7f\x53\x01\x9f\x2a\x34\xd2\x49\xa0\x09\xc7\xaa\xb9\xfe\xd9\x44\xb5\xfe\xde\x6f\x4f\xcf\xce\x4e\x2f\xde\x43\x34\x9a\xf1\xfb\xc9\xb5\xb6\xb1\xb4\xe5\xec\x39\x41\xbc\x1e\xb4\x00\xd5\xef\xf3\x5a\xcb\xd0\x38\x40\x44\x20\xfd\x85\x72\x5b\x11\x7b\xfa\x01\x58\x4c\x6f\x2a\x3e\x16\xfb\x38\xfb\x8a\xfd\xb1\xc0\x49\x61\x69\x3e\xb6\x79\x51\xad\x22\xfe\x42\x78\x30\x38\x54\x2c\xef\xb3\xeb\xc1\x71\xe8\x32\x0c\xc6\x70\xaf\xb2\x97\x57\xe3\x7b\x93\xdd\xcc\x90\x2e\xfb\x46\x10\xf1\xee\xeb\x6f\x42\x4d\x12\x1a\x10\xea\x9e\xe7\x4f\x9c\x47\xa0\x68\x35\x17\x74\x9c\xa6\x9a\x87\x87\x81\xbf\x3e\x3b\x34\x82\x1d\x86\x30\x59\x16\xbb\x7d\x8d\xcf\x1f\xbc\x22\xcc\xb3\x66\xbf\xb6\x35\xd1\xd8\x29\xaf\x1d\x49\x5c\x75\xe0\xdd\x08\xd9\x4d\xde\x41\x2e\xd9\xd5\x75\xda\xe6\x30\xe6\x12\xd6\x07\x0a\xdf\x0a\xac\x01\xda\x71\x48\xa0\x76\xdb\xed\x67\xc5\x42\x6e\xb1\xba\x41\x4e\x1d\x91\x8d\x84\x56\x75\xed\x11\x15\x41\xe8\x27\xa0\x33\x0a\x5a\xd5\x8f\x52\xe8\x86\x05\xb5\x1e\x99\x0b\x8d\x61\x10\xda\xde\x51\xb9\x11\xb1\xc7\xb8\xca\xe1\x84\xc7\x13\x8a\xb6\x98\xc7\xca\xdb\xc7\xb5\x8b\x7c\xe9\x64\x5e\x44\x01\xea\x02\x4b\xb1\x79\x28\x52\x8e\x11\x09\xc3\xe0\x13\x67\xe7\x07\xec\xfc\xed\x01\x7b\x8f\x9e\xf7\xef\xdf\xea\xe5\x68\x67\xb4\x15\x41\xc0\x9d\xa1\xed\xc5\x71\x15\xba\xda\xf7\x47\xd2\x22\x63\x84\x1e\x24\xbf\x80\x6d\x77\x19\x72\x53\x74\xd4\x5f\x61\x0f\x34\xf9\x8f\xf1\xf9\xd5\xd9\x44\x3a\xff\x41\xdc\xf6\x8d\x4a\x57\x69\xf0\x28\x36\x28\xd7\xf0\xb7\xf2\x8b\x59\xae\x12\xf9\xb0\xf4\x8d\x79\x0d\x7f\xbc\x36\xf8\xa2\x7d\x03\x88\xac\x3b\x4c\x85\x35\x09\x24\xa6\x6e\xa9\xb6\x4b\x3a\x70\x4b\xaa\xb0\x52\x16\x0c\xb1\x70\x8f\x9e\x01\x41\xcd\x6f\x6f\x26\xd7\xf8\xeb\x6a\x7c\x73\xf3\xd7\xcb\xeb\x13\x68\xfc\x6e\xde\x16\x55\xc9\xd2\x63\x74\xad\x32\x2d\x54\xa9\x62\xa8\xb4\x44\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\x1f\xdf\x5f\x5f\xde\x5e\x75\xe2\x73\x21\xe5\x86\xd7\x48\x9c\x5d\x5e\xbf\x67\x18\xf9\xdc\x0e\x31\x99\x98\x2b\xe6\xae\x08\x66\xbf\x60\x5c\x9f\x6b\xf1\x6e\x3a\xb9\xbe\xf9\x38\xbe\xf9\x08\xae\xca\xdd\x83\x60\x28\xf2\x8e\x72\xa9\xf4\x56\x03\xf4\x1d\x22\x29\x3a\xde\x72\x89\xd3\xaf\xda\xa6\xa2\x64\x7e\xb3\x05\x9f\x7d\x1a\x49\x0b\x0a\xf0\xf1\x55\xc1\x95\x3b\x99\x77\xd6\xa3\x23\xc1\x18\x57\x90\x08\xc0\xcb\x56\xd1\x0c\x03\xc0\x0b\xf2\xa5\x6b\xb1\xe8\x24\x1f\xcf\x4f\x2f\x6e\xa7\xd2\x4f\x79\x24\x70\xc1\x1e\x57\xcc\x67\xec\x3f\x25\x07\xf1\x2f\x38\xe9\xbf\xce\xe3\xd7\x70\x9d\x81\xa5\x66\x71\x08\x46\x56\xb5\x52\xf8\x18\x03\xe4\x70\xf6\xea\xec\xf2\x78\x7c\x36\x11\xaf\x8e\xcf\x26\xe3\xeb\xef\xba\xfb\xf1\xbe\x40\xba\x4f\xde\x2a\x30\x97\x58\x04\x46\x65\x64\x1c\x15\x59\x3b\x61\xaf\x4b\xd6\xf2\x14\x12\xca\x60\xa0\x32\x3c\x88\xac\x8a\x1f\xae\x96\xa1\x21\x78\x82\x89\x91\x3b\x13\x47\x31\xab\x31\xb0\x8e\x1a\x8e\x0e\xea\x0c\xdd\xd4\x4e\x2f\x2f\xa0\x7d\xa5\x09\xf5\x7f\x8e\x46\x7e\x90\xc1\x5f\xd6\xb2\xf5\xa5\x4e\x1f\x03\x92\xaf\x1f\x2f\x21\x11\x02\xcc\xeb\xb6\xc3\xb1\xb3\xa2\x2b\x16\xd8\x67\x09\x7a\xb6\x08\xb6\x8a\xbb\xf2\x95\xd7\xae\xff\x7e\x7b\x39\x1d\x63\x30\x82\xa9\xf8\xe3\xec\xe3\x3a\x24\x41\xc0\xca\x55\xa3\xf6\x30\x65\x62\xfa\x55\x83\x2f\xdb\x5a\x5e\xe4\x98\xc4\x20\x0e\xa3\xc4\x0b\xaa\x05\x69\x84\x66\x9b\xd6\xbd\x62\x13\xd9\xe0\xec\x1d\xc7\x82\x9c\x8c\x51\x11\x50\x5f\xbf\x8a\xdc\x80\x3a\xb4\xad\x7c\xf6\x74\x5c\xbf\xad\x59\x9d\x29\xe3\x06\xc2\xd2\xff\xf1\xfa\xf6\x6c\x72\x83\x21\x04\x6d\xe1\xf7\x24\xee\x2e\x93\x4d\xc4\x48\x8d\x82\x23\x63\x68\x8c\xdf\xdf\x58\x7f\xa4\xc1\xd9\xf5\x94\x1b\xef\xab\x46\x79\xfc\x89\x47\xec\x6c\xfc\x76\x72\xc6\xae\xae\x2f\x3f\x9c\x9e\x4c\xae\xc5\xc8\xfd\xcb\xc4\x7a\x06\x23\x93\xeb\x8b\xfb\x3e\x15\x4c\xd2\xaa\xe9\xde\x5e\x0b\xf2\xd7\xdb\x5b\x18\x26\x76\x70\x54\x19\x9c\x48\xf7\x95\xe7\x13\x5f\x6d\xf7\x83\xf2\xc1\x5f\x26\x3f\xeb\xfa\x84\x36\x50\xfc\x4e\x22\xda\x53\x41\xff\x37\x0c\x79\xef\xd0\x44\x3d\x63\xe2\x77\xc7\x23\xdf\x3a\x80\x31\x80\x5d\xae\xfc\x7b\xf1\x1f\xf8\x53\x7d\xbd\x26\xfd\x06\x79\xf8\x6a\x14\x72\xff\xf5\x1a\xac\xc0\xf1\xc0\xf7\x75\xbe\x4c\x5e\x97\x97\x5e\x1f\xe5\x07\x3c\x84\xf0\x55\xd4\xe1\xfa\xc7\xc8\xf9\x63\xe4\xfc\x31\x72\x9a\x23\xc7\x79\x35\x5a\x78\x29\xf7\xcb\xfd\x08\x6d\x13\x63\xae\xeb\x8c\x08\x2f\x87\xa4\x56\x0b\xe9\x08\x55\x1e\xc2\xbf\xc9\x47\x23\x54\xe7\xed\xb5\xaf\x16\x62\xbd\xf5\x77\x99\x6b\xb7\xb9\xbb\x68\xdd\xe5\xec\x60\xcb\x61\x21\xee\x33\x21\x73\xfd\xde\x68\xa6\xb7\xa5\x6b\xd9\x4a\xdc\x55\xbb\x0f\xaa\x51\x19\x77\x52\x1f\x3d\x1d\xce\x51\x8e\xaf\x27\x27\x93\x8b\xe9\xe9\xf8\x0c\xdb\x2a\x64\x37\x3f\xdf\x9c\x5d\xbe\x1f\x9d\x5c\x8b\xf1\x30\x2a\xaf\x43\x18\x84\x88\xce\x54\x66\x74\x31\x2b\xc3\x2c\x8a\x41\x1f\xc5\x10\x02\xf3\x31\xc8\x6c\x5d\x4e\xac\xe8\x74\x96\xd5\x9d\xca\xd7\x16\x8c\x4c\x48\xc4\x5b\x67\x26\x4b\xc8\x98\xb9\x0f\x51\x1c\xac\x61\x1c\xac\x99\x1f\x48\xee\x30\x1f\xd6\x50\xb7\xa0\xc4\xb0\x1b\x38\xd7\x0a\xa0\x33\x15\x4e\xb8\xba\x1e\xde\x32\xbc\xec\x89\x99\xb4\x36\xaa\x09\x9c\x95\x31\x2b\xad\xb8\x2e\x57\x23\xff\x7e\xb4\x84\xe0\x51\xd8\x46\xa5\x05\xc4\x41\x2d\xc9\x21\x99\x60\x2a\xa6\xc6\x75\x36\xa4\x90\x65\xab\x2c\x8c\xe7\x47\xaf\x5f\xd7\x42\xfd\xa8\x86\x3e\x0b\xa2\xe2\xf3\xeb\x73\x6f\x76\xd4\x03\x36\x34\x53\x09\x1c\xdb\x05\xad\x75\xb1\xa9\xd6\x52\x1c\xc1\x0f\x99\xb0\xb0\x96\xf1\xe0\xaf\x41\xe4\xc7\x4f\x19\x53\x7e\xe7\x80\x87\xf7\x6a\xc0\x2f\x90\x1f\xb3\x02\x73\x07\x7c\xef\x4a\x40\x77\x00\x69\x23\x95\xe6\x91\x7c\xa0\x80\x89\xbf\xbf\x56\x9d\xb0\xc4\x76\x15\x3f\xf1\xf4\x66\xc1\xc3\xb0\x5f\x1b\xf5\x05\xf6\xd2\xe2\x8a\xed\x8f\x99\xe4\x9f\x67\x26\x21\xb0\x8c\x05\xce\x90\x5b\x4e\x25\x8e\x14\xdd\x46\xf9\xf0\xf3\x56\x0f\x55\x0a\xa2\x00\xe1\x11\xbd\xd0\x50\x1e\xa1\xb7\xff\x87\x50\x49\xa6\x3f\x5d\x62\xea\xd0\x9f\xd8\x4f\x93\xf1\xc9\xe4\x5a\xa5\x11\x1d\x0b\x8d\x0f\xb4\x90\xb8\xc8\x93\x22\x67\xa0\xfb\x5b\xa8\x44\xc3\x71\x20\x2b\x11\xca\x71\xbf\x96\x9b\xf5\x81\x8d\xd2\x6e\xcc\xeb\x7a\xdb\x55\xa8\x2d\x2c\x69\xb5\x5e\x8d\x08\xda\xb6\x58\x2c\xea\x3b\xb6\x4e\x73\xdf\x40\xc2\x64\xaa\xe9\x8a\x46\xdd\x87\x90\x70\xb4\xd7\x71\x47\x90\x2c\xbc\x48\x8c\x43\x19\xe4\x81\x88\xc4\x54\xd7\x15\x51\x73\x23\x61\x8f\x46\x5f\xcf\x15\x89\xbc\xea\x68\xbb\xe4\x20\x01\xb3\x26\xe3\x8a\xd3\x7c\xa7\x41\x81\x4a\xa1\xe4\x8e\x56\xab\x8c\x50\x80\x5a\x11\xe9\x89\xd1\x70\xcf\xe0\x00\xd6\x9a\x5a\x5f\xd4\xed\x37\x0b\x2e\x88\x6d\x28\xf5\x45\x6b\x71\xb0\xfa\xb0\x6d\xdb\x67\x20\xb6\x3e\xd1\xa2\x8a\xbb\x17\x28\xce\xed\xd5\x72\xf0\x45\xfb\xa8\xdd\x04\x9c\xb1\x35\x4e\xbc\x08\x90\xb4\xf5\x7a\x21\x51\x6b\x41\xed\xec\x6e\x64\x65\x1b\x49\xa2\xe1\x8a\xb0\x79\x78\x44\x69\x2d\x53\x4d\x3a\x1a\x69\x8f\x32\x52\xf9\x87\x46\x0f\xa1\x37\x67\xef\x26\xe3\xe9\xed\xf5\xc4\xce\x92\x94\x40\x81\x8c\x4e\x6e\x1c\x7b\x80\xb3\x27\xe0\x80\xed\xd1\xde\xdc\x56\x15\x76\xd7\xa8\xf9\xa3\xd8\xb8\x66\x04\x86\x55\x79\x77\x9e\xee\xcd\xbe\x8b\xf6\xae\xd3\xec\xb6\x7b\xd4\x94\xa6\x73\x0d\x42\x9e\xd5\x36\x53\x65\x62\x93\xf5\xc9\x76\xf7\xb8\xad\x68\xa8\xea\xee\x5f\x44\x85\x51\x54\xb6\xec\x60\x13\x00\xd7\x5d\x68\xa0\x38\x02\xd2\xaf\xa7\x97\xaf\x55\x10\x76\x3c\x5b\xaf\x4c\xe3\xd1\x55\x79\xc1\xab\xd0\xa2\xe8\x68\x5f\xc5\x77\xa8\x47\x19\x55\xa1\x1e\x20\xca\xc3\x3a\x42\x2f\x78\xda\xbf\x1c\xa5\x2f\xc1\xbf\xbe\xdc\xb2\xb7\xd9\xd9\x6f\xe0\x2b\xc3\x8b\xcf\x83\x7c\x51\xdc\xa3\x51\xfd\xec\x61\xc4\x3f\x27\x3c\x0d\xc0\x59\xc1\x0b\x5f\x2b\xab\xfc\x87\x38\xbe\xf7\x52\x0d\x99\xff\x7a\x7d\xa2\x90\x66\x56\xe5\x55\x19\x3e\x5b\xc4\x62\x1b\xcb\xce\x57\x23\x34\xf4\xb7\x38\x36\xdb\x20\xd4\x6c\x52\xf7\xcf\x06\x4e\xa2\x75\xff\x83\xee\xee\xbb\x59\xa3\x07\x6f\xf4\x49\xff\x65\xe4\x41\xf0\xae\x8f\x70\x8e\x27\x7e\x14\xd5\xfa\x51\xa6\xeb\x91\x77\x17\xbf\xd6\x6f\xbd\x32\xb9\xea\xfd\x6a\x65\xd3\x3f\x34\x1b\xf2\x40\x15\x00\xc4\x06\xcb\x06\x67\xa3\x98\x0b\x1f\xc2\x34\x5c\x96\x76\xff\x7e\x4b\x2f\x51\x5b\xc7\x6a\x12\x72\xb2\xdb\x6b\xd0\xb1\x37\xd9\xb3\xc3\x28\x23\xad\x54\x3a\x6f\x79\x5d\x9c\xb1\xc7\x37\x1f\x4b\xe3\x33\xf1\x67\xb5\xd1\x81\xbf\xc1\x16\xed\xf1\x87\xf5\xeb\x1f\xf0\x91\x55\x67\xdb\x19\x3f\x72\x6f\x88\xd7\x9b\xb9\x4e\xd4\xad\x65\xe9\x1c\x2d\x4d\x6d\xfb\xdb\xd8\x0a\x0a\xa8\x6b\x66\xb6\xfc\xda\x4a\x93\xb9\xe2\x19\xb2\x3e\x2c\xa6\xae\x18\x9d\x8f\xcc\x67\xd3\xcd\x68\xb3\x1c\x9d\x53\x91\xce\xd7\x7d\x35\x7e\x78\xe0\x18\x9e\xbf\xec\x88\x38\x31\xaa\x8e\xda\x3d\x8c\xdd\x88\x91\x31\xd7\x4e\xd1\x3a\x21\xb5\x96\x75\xe3\xd8\xfd\x39\x36\x8b\x91\xf9\xc8\x4c\x4b\x74\x17\xc2\x96\x7a\x35\x2f\x42\x8b\x49\x6b\xf7\x8c\x1d\xda\x02\x23\xcc\x56\x0b\xcb\xc5\xe4\xaf\x1f\xad\x97\x36\xbb\xca\x8e\x98\xda\x8e\xfe\xd7\x6c\x9a\x8f\x2c\x91\xba\x91\x74\xc5\x5f\x1e\xcf\x03\x6d\x9b\xe9\xb3\xab\x9a\x2b\x0e\xed\x09\x29\x70\xd8\x7c\x68\x8b\xd2\x91\x68\x4f\x19\x34\xc7\x90\x75\x9e\xf2\x11\x51\x0c\x07\xba\xce\x92\xd4\x0e\xba\x90\xbe\x95\x77\xa7\x5d\x65\x07\x4c\x49\xac\xa6\x95\xac\x7d\xe2\x59\xbf\xdf\xda\x4e\x5a\x80\xb6\xa7\xde\xe7\x32\x37\xe5\xe0\x6d\xc9\xed\x55\xf2\x5a\x85\x9e\x5c\xd3\x9c\xc8\x55\x56\xe8\xcd\x15\xdd\xe9\xaa\x08\x3e\xd5\x04\x7c\x7a\x71\x32\xf9\x0f\x5b\x20\x5b\x34\x36\xab\x93\xb1\x29\x7f\x69\x1e\x3d\x06\x69\x1c\xc1\xf6\x7e\xf4\xe8\xa5\x01\x9e\xbf\xe1\x3d\x92\x16\x1a\xf4\x06\x42\x6d\x2a\xb2\x0c\xdd\x38\x6b\xf7\xe1\xeb\xb3\x1b\x43\x36\x5b\x8b\xf3\xd8\x8a\xb0\x0b\x4d\xb2\x14\xbd\xdc\x92\x77\xe5\x89\xac\x5b\x09\x2c\x00\x75\x55\x74\xc5\x52\xbb\x5f\xeb\x56\x27\x8d\x75\x9c\x11\x74\x5d\x20\x69\xef\x8e\x1c\xef\xaf\x76\xce\xb7\x4f\x4b\x6c\x9b\xf5\xda\xc0\xc8\x10\x07\x45\xf2\x61\xf8\x38\x48\x9a\x8f\xea\x57\x01\x6c\x72\xf1\xe1\xe3\x87\xf1\x75\xf3\xc7\x87\xf1\xd9\xad\xcd\xa0\xa8\x68\x31\x7c\xb0\x51\x8d\x3e\x67\xe4\xa0\x51\x8e\x30\x84\x75\x75\x63\x04\xfa\xe5\xf5\xa5\x74\x61\xb0\x82\x64\x4b\xc2\xa9\xed\xe4\xee\x11\x08\xe2\x0e\xd2\x1a\x94\xb1\x9e\x13\x92\xee\x35\xc8\xde\x7c\xcf\x4a\x84\xdd\x30\x74\x92\x7d\xfb\xae\x13\x5f\x91\xaf\x4e\x9d\x68\xf5\x40\xbc\xdd\x2d\xa5\x7e\x4c\xea\xdf\x54\x52\x6e\x78\x55\x4c\x90\xbd\xf5\xae\xdd\x30\xa4\xcb\x0e\xe6\x06\x23\x15\x5b\xc9\x21\x68\x81\x75\x7d\x3a\xb2\xf5\x7e\xaa\x1b\x45\x5b\x59\x37\x8e\xf5\x91\xf1\x11\x87\x83\xdd\x0e\xc2\xae\x72\x1f\x4c\x16\xea\x52\x6b\x61\x47\x9e\xd5\x69\x31\xe5\x1b\xe8\x6b\xb9\xa1\xb0\x94\xb9\x97\xb4\x39\x9c\x39\x09\x95\xc4\xf6\xbc\x4a\x5f\xc1\x8d\xb7\x85\x8c\x79\xcf\x08\x41\xdd\x93\x8d\x0d\x06\x6b\x12\x2e\xf8\x28\xbb\xf5\x01\xf6\xea\x59\x1e\x13\xc2\xb1\x95\xa5\xdd\xf9\xc9\xe4\x67\x6d\x17\xab\x9d\xcc\x6d\xaa\x92\x5b\xbc\x88\x06\x8c\xc8\xe6\x46\xcc\x15\xf3\x50\x51\xd9\x5c\xc9\xb9\xe3\xee\x08\x9d\x66\x8f\xb8\x22\x64\xb7\x41\xb7\xea\xa1\x25\xf1\x41\xe2\xac\xb9\x11\x73\x68\xd9\x4d\x93\x10\x34\x05\xb1\x53\x86\xed\x2a\x3b\x60\x1a\xca\x26\x60\x83\xd2\xc0\x56\x01\x45\x64\xdc\x1b\x5b\xa0\xdb\xdc\x0f\xf7\xc5\xd2\x73\x2f\x4c\x23\xe2\xf0\x5d\x5b\x77\x4f\x84\x7d\x31\x81\x42\x2f\x74\xbd\x77\x5d\x6e\xc4\x5c\x30\xf7\xdc\x7d\x10\x28\xd0\xd1\x25\xbe\x2e\x7e\x9c\x34\x96\x2a\x2d\x0d\xcb\x40\x72\xbf\xb6\x46\x92\x53\xa1\x0a\x3f\x89\x47\x45\x04\x7f\x58\x8c\xfb\xdd\x73\x76\x6d\x0d\x7a\x44\x37\x98\xad\xe0\x3a\x0c\x67\xab\x9e\x21\x05\xd8\x7f\x32\x29\x9e\x73\x30\x04\x8d\x18\x6b\x01\x9e\x05\x2c\x79\xba\x94\x52\xec\x26\x04\xdb\x30\xc4\x5d\x3b\x98\xd1\x09\x1a\x3e\x0d\x58\x85\xfd\x3a\x40\x0c\xb6\x41\xf8\x0d\xf0\x09\x87\x89\xbc\xe6\x4a\xae\xe7\x67\x1a\x34\xf2\xda\x10\xa4\x5d\x3f\x83\xc1\x97\x04\x67\xb5\xf3\xf1\x7f\x8c\xca\xae\x31\x6a\x8f\x95\x62\x31\x73\xec\x69\x76\x7b\x06\x69\xc0\x11\xff\xde\xcb\x82\x59\x09\x79\x43\x9a\xed\xf7\xfd\xc7\xce\xa0\xd1\x13\xf4\x1e\xfd\x46\x6e\x43\x44\xd8\xa0\xf0\xb2\xf1\xbd\xb7\xed\x26\xdf\x42\xfb\xed\x20\x7e\xc1\xc0\x6d\x48\xe8\x9c\xd3\x6b\x50\x8c\x27\xd7\xd7\x97\xd7\xd0\x62\xe3\x29\xe4\x64\x13\xcd\x84\x31\x03\x20\xf7\xc5\x95\x97\x2f\xbe\x7e\x15\xcd\x23\xfe\x9e\xa4\xa9\x21\x3d\x4f\x4f\x6a\xf6\xd3\xba\x17\x61\xf2\x0d\x6c\x28\x88\x4d\xc6\xd6\xc6\xda\xf1\x03\x83\x49\xa8\xb2\x05\xc0\x49\x48\x8f\xd8\x9d\x12\x09\xed\x30\x48\xbf\x19\x94\xec\xd5\x89\x4c\x20\x75\xc4\xca\xc9\x92\xfb\xdf\x0d\x83\xbd\x8b\x36\x45\x22\xf8\xb4\x2a\x04\x45\xb6\x91\xa4\xec\xa0\x7a\x82\x17\xf6\xe0\xbf\x74\x2f\xd3\xe5\x64\x32\x49\xca\x43\x90\xca\x54\x29\x92\x80\xc1\x7a\x7c\x57\x7c\xa8\x92\x62\xda\xb8\xa5\x97\x7e\xe2\xb9\x68\xc9\x59\x85\x25\xc3\xd4\x2e\x10\x2c\xde\x53\xc7\xb2\xdc\xef\x48\x2f\x38\x00\x45\x27\xf4\x98\x14\x36\x88\x1e\xe2\x74\x29\xc3\x39\x42\x7e\xb2\xad\xc4\x4c\xbd\xc4\x19\x8a\x05\x55\xbe\x41\xa6\x80\x3d\xcc\x55\xc0\x42\xc6\xd6\x5c\xb1\xfb\x38\x5f\x30\xd8\x84\x63\xbf\x95\xfb\x71\x16\x63\x94\xce\x4c\x9f\x39\xc9\x8d\x48\x2f\x8c\xb0\x98\xe0\x49\x82\xbf\xce\xe3\x77\x22\x4f\x14\xc4\x13\x1a\x54\x6b\x5a\xce\x88\xab\x23\x92\xfb\x20\x97\x53\x02\xb4\xc9\x6b\xd9\x34\xf6\x60\x6d\xc9\xd8\xe3\x5c\x78\xd1\x1c\x83\x9d\x3e\x06\xfc\x09\x3d\x38\x2b\x6b\xce\x59\x5c\x44\xf9\x01\x4c\xc9\x9f\xd4\xc5\x75\x18\x2c\x03\xf1\x04\xf8\x2e\xf9\x12\x1c\x3a\xf1\x09\x8e\xa7\x8e\xc4\x91\xbb\x63\x44\x95\xb5\x3e\x60\x24\xc1\xad\x19\xbc\x4b\x0a\x12\x09\x2a\x3e\xf4\xcb\x2f\x55\xc8\x2e\x24\x9a\xc2\x34\x9e\xe0\xf9\x53\xd2\x30\x25\x97\x33\x17\x26\xf0\xe4\xb3\x4f\x40\x06\x33\x51\xc2\xad\x81\x99\xa9\xb1\xb4\x3d\xd7\x30\x2e\x7c\xf6\x4e\x74\x35\x5f\x74\xa7\xf1\xd5\x29\x7b\xe4\x29\xce\xa9\x98\x1f\x2f\xf8\x00\x29\x0e\x59\xca\xff\x56\x04\xa9\x98\x5e\x8f\xcf\x1a\x05\x8e\xc3\xe0\x3c\x80\x2c\xef\x8c\xfd\x1c\x17\xcc\x4b\x39\x04\xe7\x82\xdc\x88\xe1\x8a\x89\x22\xcd\xa2\x48\xeb\x90\x4d\x63\xa1\xe4\xcf\x53\xcf\xe7\x32\xeb\xb8\xa0\x79\x20\xfa\x0c\xe6\x84\x86\xf9\x5c\xe8\x3b\x6d\xae\xcd\x00\xf4\x41\xe2\x14\x3f\x82\xff\x59\xfa\x57\x1b\x96\x89\xfd\xcb\xb6\x43\xe1\xac\x77\x32\xca\x09\xfd\x27\x1e\x1a\xe6\x9d\xd6\x42\xf6\xbd\x46\x55\x07\x1d\xa1\x93\x47\xd4\x28\x44\x15\x03\xf2\xd9\xab\xbf\x31\xf3\x7d\xd4\xf0\xa7\xe7\x30\x04\xd4\x3d\xa0\xd0\x4c\x02\x31\xfb\x0b\x7e\x18\x03\xf1\xf8\x5d\xe9\x8f\xff\xda\x0b\x03\x2f\x13\x1f\xe7\x5a\x3a\x55\x01\x81\x0d\xb2\xa5\xe7\x7e\x07\x79\xc8\x79\xe9\x8b\xa9\xa5\x16\x75\x31\xcf\xca\x02\x52\x89\xc2\xa5\x3d\x33\xa4\x46\x1f\x50\xb0\x67\x13\xa9\xef\x47\x04\x69\x1a\x1f\x87\x55\x81\x05\xd8\x4b\xd8\x1b\xe3\x9f\x52\x03\x7d\xa9\x06\xa0\x58\x0e\x43\x5f\xb0\x5b\xad\x6f\x7e\x71\xd2\xd5\xd4\x42\xd4\x90\xbf\xbd\x94\x45\xfc\x80\xf8\x0a\xb2\x78\x5d\xec\x20\x7a\x8c\x3f\x99\x9a\x50\x00\xf8\x49\xec\xbd\x1e\x21\xee\xa5\x18\xd4\x2c\x5b\x20\x14\xb9\x5f\x79\x28\x20\x4a\xbb\x18\xb9\x62\x3a\xc8\x15\x4f\x16\x2c\xc5\x7a\x8d\xc9\x23\x1b\x58\xe1\x15\xe6\xc9\x84\x1f\xdb\x88\x25\x36\x7d\xcf\x31\xb4\xe2\x1f\xed\xd7\xd6\x7e\xd4\x6e\x0a\x4a\x25\xce\xc2\xdd\x73\xda\x76\x49\xca\xe4\x99\x80\x4d\x00\xd0\x11\x4d\x21\xb5\xbe\x6c\xe1\xbd\x61\x68\x11\x0a\x52\xb7\x84\x0c\x09\x42\xe3\x4c\xdb\x97\x22\x11\x3d\xe6\x1f\x00\x06\xa0\x7e\xac\x67\x13\xe5\x71\x76\x20\xfb\xca\xd2\x5b\x89\x4d\xe3\x27\x88\xf8\xfa\xb4\x80\x7c\x02\x46\x85\x66\x28\xba\x04\x49\xa2\x88\xcf\x30\xb0\xad\x5f\x2c\x13\x60\x9d\xf2\x19\x66\x79\x85\xb8\x12\xa8\xc0\x0e\x9b\xf5\xd8\x74\x77\xff\xac\x60\x5c\xda\x2c\xf7\x02\x1c\x94\xcf\xdb\x58\xfb\x44\x41\x68\xa5\x64\x85\x3d\x59\x68\x80\x82\x0b\x86\xfb\x51\xb8\x6e\xf0\x91\x40\x27\x93\x50\x2b\xe3\x40\xf5\x72\x8a\xbf\xe4\xcb\x1d\xe5\xfa\xfe\x96\xa0\x11\xda\x13\xd6\x0b\x98\x73\xe1\xc4\x10\x33\xda\x6b\x52\x95\xdf\x45\x93\x34\x8d\xd3\x23\xd6\x7d\x44\x3f\x04\x4d\x07\x09\x66\xe2\x03\x34\x67\xe2\x23\x56\xde\x01\xc4\x76\x80\xed\x49\x38\xe0\xf3\x21\x6c\x37\xde\xe6\xc0\x92\xa1\x76\x3c\x0c\x12\x96\x40\xb7\xf1\xc5\x4e\x69\x06\x31\xab\xfe\x7f\x16\x38\xe9\xa4\x1c\xf0\x3e\xc0\xd7\xf3\x04\x2f\x3c\x2a\x67\xd2\x84\xc8\x02\x5c\x47\x3d\x67\x24\x62\xb8\x40\x57\xf7\x51\x3f\xa9\x66\xa1\x97\x30\x68\xca\xc4\x9b\xd6\xe8\x48\xb4\x5c\x11\xe3\x69\x0d\xa6\x3c\xc7\x9d\xc4\xba\xf7\x5f\x89\x17\x92\xa3\x2d\x60\x12\x29\x57\xbc\xba\x61\x0a\x43\xb8\x1c\xca\xf5\xe6\xb2\x05\xef\x4e\xd7\x59\x92\xc6\x8c\x59\x4d\xac\xe2\xcb\xfe\x5d\x6e\xbc\xe4\x0c\x4b\x10\x81\x4e\xd0\x01\x7b\xe2\xa5\x70\x98\xa1\x8e\x3f\xa2\x62\x79\xcf\xe5\xe4\x78\x1a\x09\x0d\xce\x0a\xad\x3d\x09\x07\x7c\xe2\x43\x06\x62\x53\xf9\x77\x5e\xbf\xdc\xb0\x00\xd5\x51\xaf\x17\x12\x79\xab\x6d\xba\x2a\xb0\xaa\xe4\x80\x41\x2d\xe3\xa2\x1b\x1c\xe2\x1a\x31\x4e\x02\xdb\x85\xb1\xbb\x2a\x0d\x4f\xf4\x32\x2f\x73\x40\xe4\x7c\x99\xc8\x1c\x63\xa0\xb3\x15\x09\x9c\x75\x99\x11\x59\x57\xa6\x63\x8a\x13\xb1\xcb\x5d\x5f\x22\x74\x6c\xb5\x6c\x2a\xd1\x31\x3c\xa5\x81\x90\xec\xef\x41\x62\xc9\x5e\x57\xde\x9e\x73\x99\x8c\xa3\x92\x41\xcf\xd4\x50\x94\xce\x4f\x19\xf9\x42\x4e\x3a\xa9\x47\xc2\x47\x14\xcc\x78\x0a\x87\x4c\xdd\x20\x6c\xeb\x3b\x23\xcb\x17\x5e\x5e\xa6\xbe\x13\x14\x7d\x76\xbf\x62\x70\xfe\x21\x78\x65\xec\x15\xda\xb3\x60\xe2\x37\xc3\x35\x7f\x7f\x8a\x74\xf4\x11\x7f\xc2\x7b\x8f\x6e\x54\xdb\x25\xe9\xdc\x04\x69\x1f\x82\x98\xa2\x77\x03\x7c\x01\xdc\x99\x1b\xaf\xba\x08\x55\xe9\x78\x4a\x7b\x57\xd6\xe1\x0e\xd7\x55\xde\x85\xb3\xd4\x1b\xc0\x68\x93\x75\xc4\x2a\xb4\xa9\xe3\x8e\x40\x9a\x5c\xda\x73\xdf\x2c\xef\xce\xb9\xfb\x86\xb0\xbb\x86\x03\x77\xb3\xa9\x83\xa6\x18\x9d\x0f\xa4\x9b\x91\xbd\x15\x13\x69\x4a\x2d\x8b\x38\x6b\x51\x68\x90\x11\xe2\xd5\x6f\xb5\x25\xa8\x5d\x07\xcb\x99\x67\x21\x76\xe1\xf7\x5c\x2c\x57\x49\x91\x2d\xc0\x7e\xa3\x98\xcd\x78\x96\xe1\xc9\xab\x41\x23\x19\x94\xb8\x83\x4c\x62\x76\xb4\x00\xd7\x28\x45\xe5\x02\x11\x59\xa8\x77\xdd\xf6\x35\x69\x68\x60\x4f\xbc\xd5\xd8\x70\x3c\x53\x6e\x9c\x33\x9e\xe7\x68\x2d\x15\x3f\x60\x29\x33\xc4\x1e\xe4\x1c\x70\x0f\x7b\xe8\x66\x21\xd9\xae\x18\xd2\x65\x5f\xeb\x80\x82\xea\xdb\xf2\xc7\x85\xbd\x2c\xd6\x04\xe8\xd8\x94\xfe\x01\x76\x3b\xf8\x97\x6a\x01\xe8\xb8\x5b\xad\xe5\xf4\x1d\x06\x63\x40\x97\x6d\x18\x01\x76\x8d\x52\x9a\xf1\x0b\x8a\xff\x0e\x7f\xf4\x41\x4a\xa7\x44\x47\x2b\x57\x28\x41\xf1\xa7\x38\xcb\x23\xc3\xb7\x1c\x72\x2c\xef\x94\xe9\x20\x6d\xe0\x2a\x46\x4f\x24\x4d\x1d\x15\x48\x97\x4f\x3e\xe2\x93\x4a\xf6\xa2\x92\xbd\x1b\x66\x2f\xa2\x2e\x32\x6c\x6a\xba\x8a\xfc\xb1\x5c\x86\xe0\xb3\x59\x36\xb0\x03\x29\x77\xbc\xca\x7d\x49\x50\xef\xd3\xb5\xdd\xa8\xb9\xa3\xae\x6c\x07\xb7\x0e\x31\xc9\xeb\xa3\xfb\xf7\xd9\x0b\x08\xf7\x36\x02\xcd\x6d\x8d\xec\x2f\x7c\x55\x5b\xb3\x0c\x22\x9c\xaa\x47\x03\x35\xd2\x7e\x50\x38\xb4\x12\xe6\xaf\xd2\xad\xeb\x6e\x83\xc0\x9d\xa4\x03\x7e\xec\x4c\xad\x6b\xe5\x70\x5a\xcf\x40\xe4\xad\xcd\x53\x9a\xc2\x6d\x8c\x94\xb6\x41\xe5\xdc\x3b\x87\x62\x40\xff\x70\xd2\x64\x57\x39\x7c\xe9\x2f\x63\xf6\x30\x8f\xed\x1f\x89\x63\x6b\x55\xd7\xf2\x54\xe1\x4c\x15\x29\x58\x54\xba\x67\x83\x05\x6e\x5b\x19\x17\x0e\xec\x89\xa7\x9c\xa5\xfc\x77\x65\xf6\xa1\x2c\x6a\xc1\x9a\xcd\x9b\x7b\x26\xa3\x39\x37\x22\xf6\x18\xd5\x6e\xfa\xf8\x5d\xbb\x81\x31\xfc\x32\xa9\x65\xc4\xea\x2e\xb8\x36\xec\x9a\x49\xa0\xba\xeb\x92\x11\x5d\x75\xda\xf0\x6b\x0b\x92\x79\x95\x16\xf9\xcc\x0f\xe4\x95\xd6\xd2\xcb\x67\x8b\x4e\xce\x5d\xd5\x08\x38\xb2\x3c\x5e\xd6\x1d\x54\x56\xf2\x6a\xfc\x15\x3f\x9c\x1f\x82\x3b\x6b\xf5\xea\x3b\x70\x02\x79\x7f\x3a\xc5\xb4\x63\xf2\xf5\xcb\x16\x4b\xf1\x05\x17\xaa\x64\xa1\xfe\x59\xd7\x06\x17\xf3\xd5\xa1\x28\xf7\xb2\xa2\xf3\xf6\x7a\x7c\x71\xfc\x53\x4f\x72\xff\xd3\xe7\x8f\x3c\x8c\x93\x97\xb8\xbc\xbd\xac\x7e\xdd\x8b\x86\x9b\x2d\xbe\x3b\x64\x62\x06\x41\xf1\xf2\x51\x50\xbb\x0e\xcb\x18\x5c\x67\x80\xb4\xea\x94\x49\x19\x22\xe6\x31\x7b\x19\x15\x61\xf8\x92\x49\x6a\x68\x7b\x61\x08\xb8\xd9\xab\xf9\x1c\xc4\x6d\xbf\x80\x31\x2f\xce\x12\xe3\x82\x7b\x60\xc1\x2a\xed\x61\x67\x61\xe1\xf3\xd2\xf0\x1a\xfc\x0b\x78\x96\x1f\x30\x4c\xd7\xa7\x6e\x81\xa4\xeb\x92\x20\xcf\x96\xa2\x05\x02\x31\x13\xb1\x3c\x58\x9a\xe2\x25\xee\x88\x8d\x75\x57\x96\x01\x79\x6e\xb4\x00\xb7\xde\xdb\x53\xf6\xb2\xc5\x7d\xec\xa5\x3e\x5a\x00\x88\xef\x67\x98\x9a\x8c\x65\xed\x39\xf2\x07\xb0\x4a\x92\x37\x61\x29\x57\xb6\x70\xa8\xd5\xe9\x39\xdb\xd4\x71\x43\x20\x75\x06\x17\x1c\xe6\x9a\x04\x34\xe8\xb1\x6b\x73\x17\x6c\x2a\x4a\xe7\xd7\x61\xad\xa5\x2d\x47\xe7\xd4\xd5\xa8\xed\xc5\xe8\x7c\xf0\x14\xa8\x9b\xcf\x46\x31\x3a\x1f\xc2\xad\xa3\x55\x1d\x77\x04\x1d\xb7\x8e\x9d\xe5\xdd\x39\x77\xde\xd5\x58\xd4\x70\xe7\x6e\x4a\x1d\x60\x2e\xec\xc0\xb3\xbe\x85\xb6\xe0\xda\x5e\xdc\x81\xaf\xf1\x86\x55\x57\xcc\x91\x8f\xda\x56\xfb\x30\xc1\x05\x6b\xc7\xa3\x48\x28\x63\xc1\x5c\x2e\x72\xf5\x72\xd2\x74\x39\x0c\xbb\x22\x0d\xb3\xdd\x70\xb1\xd5\x0f\x2a\xee\x46\xdb\x0c\x4d\x29\x72\x4b\xa2\x51\x49\xb2\xf0\x22\xf1\xf9\x71\x8e\xc9\xa4\x32\x24\x40\x2e\x62\xd8\xeb\xc0\x95\x2d\xb8\x32\x4a\xad\x36\x49\x38\xda\x35\xca\x8b\x42\xbd\x41\xcb\xd0\xe4\xc9\x72\x99\xbd\xa8\x35\xa5\x1c\xb8\x98\xee\x9c\x35\xa5\xa8\x5c\x66\x30\x01\x81\x57\x4b\x17\xa3\x96\x82\x44\x5e\x99\xbd\x61\x4c\x77\x05\x1a\xef\x7d\xde\x0a\xef\x9e\x21\x5d\x76\xd7\x5b\x61\x3a\x01\x3a\xb6\x01\x0e\x77\x7b\xd1\xa2\x23\x7e\x96\x33\xfb\x3d\x73\xa7\xb7\x4a\xaf\xc3\x6c\x47\x2a\x74\x94\xbd\x6f\xc0\x7b\x50\xa2\xa3\xad\x6e\x71\xaf\xe1\x0f\x4b\x60\xc6\x4a\x3d\x30\xe0\xfe\x96\x86\x60\xbb\x0a\x9d\xff\x90\xf7\xce\xc3\x10\x75\x91\xc1\xe6\xb2\xd8\x06\x36\x8d\x8e\x3b\xd2\x5e\x37\xce\x3d\xa9\xb9\xa3\xde\xe3\x05\xcd\x5e\x79\x3b\xb4\x88\xfe\xe6\xd1\xed\x4b\x3a\xd2\x73\x45\x5e\x5d\x0a\x35\x9d\x87\xd6\xcf\xd1\x73\xc8\xfd\xa3\x0d\xc9\x84\x2e\x63\xdb\xbd\x97\xb3\x2c\x4e\xc4\x08\x98\xb3\x59\x1a\x60\x58\xb0\xa3\x5a\x1f\xaf\x3d\x36\x4e\x5c\x94\xca\xf6\x98\x64\xd8\x2f\xe6\xa1\x71\x6f\x69\xf9\x5a\x9d\x2e\xd7\x9d\xcc\xf4\xd0\x5c\x68\xb8\x22\x84\x5d\x67\x35\x51\xd4\xf4\xb4\x2a\x36\x55\x1c\xe1\xf3\xd2\x0d\xc3\x16\xb5\x3b\xdd\x7e\x92\x54\xcd\x54\x67\x48\x03\xdd\x41\x82\x8c\x0f\x8e\x4a\x6a\x0e\x50\x70\x50\x22\xa3\xcb\xa0\x8b\x0b\x2a\xc7\x32\x7f\x48\x27\xcc\x06\x25\x87\x23\x96\x1a\x19\xc1\x1b\x0d\x9a\xd9\x03\xf7\xf2\x22\xe5\x2c\x8b\xe5\xa9\x84\xcc\x6c\xb5\xf0\x1e\x1b\xad\x12\xf9\x78\x55\x52\x64\xb2\xb6\xaa\x64\x98\x02\x76\xc8\x8a\xf8\x01\x70\xc3\x2b\xc9\x43\xd0\x43\xe8\x7f\x5f\x20\x22\x8a\x17\xb5\x6c\x4f\xb6\x96\x4a\xd2\x92\xb4\x6b\x7e\xee\x92\x43\xc3\x8a\x91\x26\xe3\xa5\x0a\x58\x5a\xfe\x0f\xb5\x31\x59\x03\x63\xb1\x21\xdf\x03\xcb\x3d\xc9\x0f\xdd\xae\xdf\x9e\x71\xcf\xec\x7b\xb5\x4b\x4b\x0f\xed\x42\x38\x78\xe3\xec\x1c\x03\xa5\x85\x3e\xa9\x68\x91\xf2\x76\xfc\x87\x3f\xff\xcb\xf9\x01\x7b\xf3\xfd\x0f\x3f\xc2\x3f\xef\x0d\x67\xbf\xf6\x35\x29\x68\xe0\xca\x1d\xae\xb3\x43\xb1\xaf\xc2\xb8\x45\xb9\x98\x0f\xab\x10\x2e\x26\x34\xb6\x35\xed\xd1\xc4\x2a\xac\x46\x18\xa7\xe0\x77\x2d\xf6\xd2\x49\xa1\x8f\xd2\xd0\x55\x9c\xca\x77\xe9\x25\xe5\x8d\x20\xc6\x5d\x51\xde\x90\x28\x5b\xca\x97\xb1\x58\x46\xd4\x59\x3b\xae\xb1\x49\xca\x1f\x83\x58\x08\x8c\x0e\x57\x99\x0c\xee\x24\xab\x18\x3a\xa7\x91\x95\xc3\x92\x2b\xe9\xc9\x4c\x7e\xca\xcd\xc8\x7b\x00\x4f\x36\x40\x65\x5c\xf3\xed\x6b\x12\x1a\x72\x56\x40\x46\x43\x64\x02\xae\x76\x36\x96\x04\x36\x75\x08\x08\xf0\x18\x54\x0e\x90\x5a\x20\x7a\xc3\xb0\xea\xae\x41\xe4\x9e\x1d\x75\x30\xab\x17\x20\xd0\x96\x91\x28\x99\x97\x83\xdf\x7d\x2e\x8a\x07\x21\xf7\xcb\x68\x38\x10\x6f\x06\x72\x07\xdc\xca\xd8\x81\x68\x97\x82\x51\xbb\x0e\xaa\x50\x71\x19\x7e\x70\xef\x51\xd4\xc3\x32\xd8\x8b\x61\x31\x98\x07\x8f\x1c\x9b\xde\xd4\x6f\x2d\xb8\x53\x79\x87\xf1\xcc\x0b\x5f\x07\x91\xe8\x74\x11\xcf\x1d\x0c\x72\x4b\x54\x55\x64\x32\x15\x86\xe7\x65\xc6\x66\x10\x97\x35\x2b\x96\xcc\x8f\x79\xb6\xb6\x1d\x13\x03\x39\x89\xd9\x92\xe7\x9e\xef\x99\xec\x10\x06\x23\x6c\xff\x7d\x8b\x65\xd2\x08\x35\x06\x6d\xc8\x45\x8b\xc3\xbc\x22\x83\x6b\xe9\xe1\x52\xea\x5a\x23\x9a\x5c\x7c\x38\xbd\xbe\xbc\x38\x9f\x5c\x4c\xd9\x87\xf1\xf5\xe9\xf8\xed\xd9\x84\x61\xde\x22\xbd\xf5\x91\x55\x9d\x5e\x08\x6e\xf4\xa3\xab\xab\xb8\x6d\xb7\x5a\xe7\xdf\xd0\xb3\x6a\x29\x62\x2f\x96\x21\xbf\x47\x56\x65\xd8\xf0\xef\x21\x8f\xc7\x3c\x0e\xfd\xee\x72\x33\xcc\xf7\x91\x7a\xcb\x8f\xf3\xfb\xbb\x17\x47\x3f\xb6\xe7\xf2\xd8\xac\xf3\x5f\xaf\x21\x06\x14\x1e\x08\xbd\xce\x97\xc9\xeb\xf2\xee\xe4\xe3\x2c\x8e\x1e\x82\xf9\xe1\xef\x59\x1c\x75\xd3\xc9\xd9\xdd\x0b\x88\x63\x7f\x10\x3f\x40\x18\xb8\x79\x76\xf7\xc2\xa2\xd9\xfe\x11\x24\xbf\x2b\xbe\xff\xfe\xfb\xff\xdd\x43\x7a\x7a\x87\x13\xcf\xce\x82\xa8\xf8\xfc\xfa\xdc\x9b\xc9\x9f\x35\x61\x1a\x59\x4b\x97\x2b\x74\x29\xae\x35\x42\x02\x41\xbe\x32\xb0\x0b\xce\x30\xb5\x4b\x2a\x66\x00\x0c\x67\x21\x73\xbb\x20\xb5\xbf\x0a\x12\xf1\x53\xc6\xca\xf8\x99\x82\x19\xa7\xf0\xb9\x7b\xf1\xe5\xee\xae\xc9\xea\x0e\x98\xdd\xd5\xd9\x89\x1f\x5f\xef\x5e\x6c\x70\xbc\x8a\x9f\x78\x7a\xb3\xe0\x61\x48\x94\xcb\x8a\xdd\xcb\xf2\x6b\x35\xbe\xbe\x81\xb0\x4d\x0f\xb0\xeb\xc6\x7f\x7c\xaf\x6f\xef\x7b\xb9\x4d\xc5\xfa\x2f\x29\x03\x1e\x55\xd0\xfc\xfb\xea\xcf\x2c\x08\x1f\x85\xce\xdc\x3a\x0f\xd9\x7f\x41\x1b\xfa\xea\x53\x2a\x16\x77\xc8\x84\xf2\xd5\x2c\x65\xd8\x64\x51\xca\x61\x4d\x86\x38\xc7\x1a\x69\x7b\x62\xd3\xdd\x20\x5b\x4d\xb7\x8c\xba\xda\xfc\xf1\x71\xff\xc1\x3f\xae\xfd\x98\x96\xdb\x90\x2a\xf7\x97\x3c\x17\xa8\x8e\x01\x95\x81\x7e\xa6\xf6\xf5\x59\x22\x66\x29\x83\xd9\x62\x4f\x6a\x54\xd4\x3f\x4d\xa7\x57\xe0\xf4\xf6\x79\x55\x26\x95\x00\x7f\xa4\x92\x4b\x17\x4a\xdb\xda\x54\x54\x7d\xae\x9b\x5c\x48\x38\xe2\x1b\xec\xb2\x69\x28\xb2\xbd\xe4\xa0\x5d\x35\x39\x50\xa0\xa2\x13\x22\xaa\xa4\xc8\xf2\xd0\xad\x0b\x8b\xbe\x3c\x95\x73\xf3\x8a\x0b\x02\x81\x72\xfb\xdb\xad\x36\x1a\x0e\x3a\x7a\xb4\xaf\xbb\xad\x1d\x72\xa2\xb5\xfb\xfe\x6e\xb6\x76\xcd\xce\x59\xee\xbe\x97\x4c\x74\xd1\x77\xc0\x71\x3f\xd2\xf7\xbe\xd5\xda\x33\xf7\x3e\xad\xb2\xef\x3b\xad\xe7\x80\x40\x68\x9f\x47\xf6\xe8\xa5\x01\xce\x5a\xe0\x9c\xec\xa9\xbb\x55\xf6\xe4\x65\x2a\x94\x6e\x6e\x92\x8d\x56\xdd\x1e\x17\x9c\x4b\xcb\x29\x5f\xa6\x71\x40\x2d\x48\x8f\xa3\xa3\x38\x91\xef\xac\xf4\xf4\x5f\x47\x7d\x0b\x42\x7e\xa4\x8f\x16\x67\x5b\xcd\x15\x87\x12\xc8\x26\x6d\x2e\xa1\xa6\x2b\x9a\x5c\x85\x0e\xb6\xc8\x10\x40\xa8\xe9\x8a\xa6\x23\xf0\x71\x47\x69\x67\xae\x2d\xe6\x6b\x87\x56\x39\x08\xdc\x09\x11\xb1\xfa\xad\x6e\x10\x72\x7c\x12\x90\xd2\xc9\xb8\xe2\x6c\xf7\x83\xb0\x8b\xb8\xdd\x87\x14\x15\x6f\x95\x5b\x06\x87\xd6\x7a\x64\x99\xee\x1c\xec\x6b\x3a\xa3\x91\xfb\x57\x27\x38\xa6\xaa\x44\x3c\x0f\x32\x1f\x71\xed\xbe\x10\x94\x1c\xca\x47\x24\x51\xe8\x8d\x4e\xfa\x24\x5a\x4f\xac\x14\x02\x8e\xd8\xca\x74\x64\x60\x09\xbb\xf4\xcb\x9e\x6b\x89\xab\xab\xb2\x23\xa6\xfe\x43\xd3\x89\x92\x23\xda\xce\x24\x21\x5d\xc5\x1d\xf9\x6e\x2a\x69\xeb\xe9\xd1\xce\xf0\xb8\x27\xb5\x81\x51\xf7\x06\x3a\x00\xb6\x36\xbf\x03\x32\x3e\x5b\x22\x44\x8c\x73\x15\x96\xc5\x4b\x92\x30\x98\x49\x1b\x98\xac\x10\xc3\x0f\x72\x09\x75\x40\xb3\xac\xeb\x88\xa8\x9c\x04\x30\x45\xb9\x34\x78\x92\x96\x10\x42\xe6\x77\x42\xfd\xba\xf2\xf2\x45\x67\xeb\xb9\x12\x73\xc4\x8c\xb9\x28\x20\x69\x88\x25\xac\x96\xf2\x8e\x9c\x95\x38\xa5\xfd\x87\x94\x11\x4c\x42\xac\xbf\xa2\x15\x05\x22\x3a\x41\x4f\x65\xd5\x05\x0b\xab\x0e\x20\xba\xc2\x44\x9e\xa2\xfb\x65\x0b\x0f\x37\xab\xff\x76\x73\x79\xd1\xc1\x54\x5b\x9a\xc8\x15\xb2\x80\x34\xf5\x4b\x63\xfa\x0e\xbb\x4a\x44\x0c\x90\x4c\xc7\x52\xec\xf6\xa2\x8e\xfc\x54\x2c\x22\x4b\x96\x5b\xa5\xa9\x5c\x79\x0a\x49\x79\xec\x77\xd4\xa6\x0a\x54\xde\x69\x0c\xc7\x1f\xa8\x02\x54\x63\x04\x8e\x3c\x20\x6b\x51\x17\x0c\xbb\xba\x44\x44\x70\xab\xbd\xbd\x5b\xb7\x5e\x5d\xec\xab\x3b\xe2\x2a\xd5\x72\x4b\x1c\xdb\xc5\x7b\xf2\xc5\x66\x26\x32\xdf\xa8\x33\x04\x02\xdb\x4e\x62\x5b\x99\x8c\x29\xf2\x96\xfd\x77\xd1\x74\x32\x64\x9c\x38\x3e\x71\x69\xb4\xf9\x6e\x9a\xd2\x64\xae\x59\x1c\x3e\x56\xde\xd3\x94\xd1\xd3\x5d\x91\x88\x05\x6d\xbc\xfa\x7f\x29\x3a\x19\x32\x4e\x38\x82\xda\xd0\xfe\x2c\x13\x8b\x39\x50\x70\x46\xd7\xb7\x19\xc9\x74\x88\x48\x21\x7d\x17\x1e\x2a\xc6\xf4\x13\x49\xcb\xba\x44\x44\x7f\x0f\x92\x64\xe3\xab\x74\xe0\x30\xd6\x20\x72\x6f\xdd\x1d\x82\xf9\xb6\xf4\x28\x84\x80\x9c\x32\x59\xbd\x97\xe1\x95\x8b\x97\xce\xd1\x7a\x5f\x86\xa5\xbc\x8a\x33\x0c\xe5\xf4\x52\x7c\xaf\xbc\xfe\x53\x29\x96\x60\x25\xc1\xc0\xde\x7b\xce\xd3\x43\xc6\xde\x81\x02\x18\xc3\xad\xe6\x2a\xca\xbd\xcf\x42\x35\x09\x93\x03\x31\xdb\x72\xf6\xdb\xec\xa1\xb4\x17\x59\x7f\xf9\xd1\xe2\x37\xc3\x2d\xc2\x3f\x18\x7c\xda\x77\x39\x62\x17\xb1\x8c\xb8\x89\xc9\xce\x3b\xbd\x73\xec\x2a\x51\x31\x40\xc8\x4a\x1f\x0c\x60\xd8\x93\x27\xbb\x3e\x92\x14\xe2\xcf\xd8\xef\xf1\x3d\x66\x47\x15\x45\xd1\x77\xe3\x25\x0c\x0b\x08\xed\x95\xe9\xc3\xbc\x0e\x45\x96\x2a\x87\xdd\xf8\xee\x37\x96\x3f\xf3\x59\x21\xe3\x38\xa5\xde\xd3\x3a\x28\xe8\x2c\x16\xdd\x27\xca\x47\xf9\x2a\xe1\x70\xaf\x85\x97\x9c\xeb\x71\xfb\x1a\xec\xa6\x20\xba\xaa\x0a\xc9\xaa\x47\x38\x34\x7d\x82\x64\x09\x86\x6d\x6e\x1c\x3b\x48\x8b\x0c\x4f\xee\xef\xe3\x07\x88\xd4\xf3\x5a\x46\x9a\x4d\xbc\x20\xcd\x54\xe6\x66\x16\xcf\x30\xe9\x91\x5f\x4f\x9c\xcb\x22\xee\xa5\x62\xe9\x86\xaf\xfc\xf3\x32\xbc\x89\xc4\x6c\xc6\x73\xf1\xa5\x0d\xb2\xef\x1d\x41\xaf\xd6\xc9\x1a\xe0\x48\x62\xe9\xaa\xd2\xf1\x54\xcb\x66\x45\x11\x7a\x87\x6c\x28\xf6\xff\x80\x2d\xee\x9f\xb8\x0c\x0e\x7c\x80\xb3\x5f\x90\xe3\xf5\x2b\x86\xbc\x98\x8a\xce\xf4\xf5\xab\x61\xee\xdd\x09\x13\x27\x19\xaf\x52\xb1\xa9\x4f\xf3\xd5\x06\x8c\xfb\x38\x0e\xb9\x67\x88\x4e\xee\x44\x63\x48\x84\x65\xbf\xcd\xf2\x54\xcc\x80\x86\x04\xb5\xbd\x68\x0d\x89\x58\x66\x0b\xde\xfe\x90\x65\x71\x4a\xaf\x19\x8a\x85\xb5\x7c\xef\xc6\xa7\x67\x93\x13\x2d\xb6\xcd\xd7\xf6\x74\x27\xe3\xe9\xed\xf5\x84\xbd\x3b\x1b\xbf\xd7\x7b\x49\x69\x4a\xd9\x73\x41\xe7\x3b\xf6\xc0\xf3\xd9\xa2\xa1\x1d\x67\x76\xd7\xc7\xe4\xfa\xce\xc8\xe4\x4d\x4d\x66\xb9\x33\x21\xd6\x76\x46\xc5\x1f\xc5\x1a\xe9\x0a\xca\x5c\xd9\x19\x53\x9c\xce\x47\xd2\xaa\x0f\xb4\x9f\x34\x96\xc6\x30\x97\xe9\xfc\x5a\xfc\x39\x8d\x95\xbf\xb5\x0a\x5a\xe0\xf4\x95\x07\xe0\xd0\x47\x3a\xd7\xf6\x36\x55\x75\xc6\x23\x1d\xb9\x0f\x2d\x8e\x1a\x08\x35\x9d\xd1\xe0\xe5\x52\xcb\xb7\xc1\xbb\xa6\xc1\xbe\xff\x40\x5c\xfa\x49\x59\x9f\x61\xec\x2e\x34\x5d\xc9\x50\x71\x8a\x45\x47\xe5\x35\x47\x25\xf9\x41\x1d\x30\x41\x40\xf7\x8f\xa5\x8b\xaf\xf9\xbc\xdb\x9d\x90\x3b\xd6\x52\x89\x3d\x80\xd0\xc9\xca\xfb\x5a\x66\xf5\xe7\xd1\x63\x90\xc6\x11\x6e\x6f\x4b\xfb\x3a\xc3\x01\xe8\x80\x94\x1d\xa4\x51\xf7\x40\xe6\xbb\x93\xae\xe2\x0e\x7c\x65\xf8\x83\x18\xa3\x0a\xda\x7f\x5e\x63\x2d\x7b\x14\xca\xa6\x1b\xee\x40\xe5\x9f\xef\x42\x0f\xa2\xae\xa9\xe0\x46\xbe\x5e\x77\xa2\x54\xed\x8f\x47\x1a\xa4\xbb\xc0\xd9\xae\x49\x45\xa3\xbf\xd6\xda\x2e\x60\x4f\x1b\xee\x7d\xc1\xb2\x54\x1e\x8c\x60\x1c\x82\x70\x75\x20\xba\xd5\x27\xb1\x6b\x06\x49\xd0\x7c\x1e\x4a\xf1\xcf\x01\x7a\xf7\xe4\x2a\x4a\x42\xe2\x89\x6f\x2e\xe4\x84\x97\x89\xf9\x0a\x7c\x47\x5c\xec\xa5\x8c\x21\x17\x85\x2f\x83\x58\xbf\xf2\x65\xbc\x8f\x24\x8d\x31\x7c\x03\x98\x0f\x82\xab\x56\xba\x44\xbc\xfa\xf8\x18\x8e\x54\x5c\x50\xc2\x3e\xfe\x29\xc8\x17\x70\x14\x54\x27\x6b\x83\xad\xbb\x2e\x11\xd1\x32\x98\xa7\x9e\x2b\x24\xdb\xca\x44\x4c\xa2\xb7\xcb\x99\x47\x66\x8a\x2e\x69\xcb\xaf\xd1\x01\xc9\xb2\xae\x35\xa2\xf7\x93\xe9\xf4\xf4\xe2\x3d\xbb\x99\x8e\xaf\xa7\x86\xad\x94\xb6\x9c\x3d\xa7\xb3\xcb\xb7\xe3\x33\x76\x79\x35\x3d\xbd\xbc\x30\x84\x7f\xd0\x96\xb3\x75\xf1\x79\xaf\x4c\x31\x2e\xc7\x55\x90\x59\x93\x51\x7e\x57\x71\x7b\x01\x4b\x43\x1e\x48\x6f\x20\xad\xf6\x55\x8c\x21\xb1\xce\x7d\xe2\xb9\x50\xc9\x66\xdc\x06\x89\x3d\x01\x3a\xb6\x24\xc9\x76\x15\x37\x7e\x27\x3c\xc8\x12\xd6\x36\xc1\x87\x87\x06\x5b\xc9\xce\xf2\x64\xce\x6a\x9b\x6b\x48\xf0\x48\x6b\x47\x67\x7a\x64\xe4\xbc\xe6\xbb\x51\x45\xfe\x62\x5f\xf6\x90\x6b\xe0\x19\x10\xd0\x5b\x07\x4f\x0a\x76\x01\xca\xa2\x7b\xee\x87\x39\xb9\x4d\x40\xa3\x79\x9e\x9e\xb2\x07\xce\xe4\xd6\x00\xdb\xc3\xfe\xde\x61\x3d\xa9\xb9\xa3\x1e\x32\x40\xfd\xb0\xc4\x7b\xc8\xd4\x15\x1f\xdb\x39\xbb\xef\x2e\x59\x91\xe5\x7d\x96\x4c\x1e\xfb\x65\xee\xd2\x26\xd9\xde\x1a\x60\x68\x4e\x64\x69\x75\x7e\xc3\x16\x6b\x8b\x4d\x55\x32\x1e\x69\x00\x9d\xad\x33\x7d\x81\xf1\x73\x16\xe4\x71\x1a\x88\x79\x5b\x50\xd7\x9f\x5d\xb9\x90\xe8\x87\xaf\x22\xbc\x62\xfa\x8b\x6a\x73\x4d\x80\xd4\x7e\xc5\x6c\xb5\x49\x69\x4d\x48\x80\x53\x8b\xcb\xd2\xe1\x48\x8d\xdc\x88\xc8\x87\xe6\x20\x4f\xa9\x4a\xc6\xa3\x02\xba\x6e\x12\x65\x76\xe3\xc0\xb2\x36\x1d\x55\x51\xaa\x2a\x98\x06\xaf\xb9\x10\x32\x95\x4f\x40\x3e\x7c\x0f\xcf\x2e\xac\x1b\x71\x00\xca\x64\x69\x9a\x5c\x32\xba\x4a\x60\x4f\xc0\x01\x9b\x4a\x2b\x23\xfd\xea\x29\xfd\x72\xee\x40\x82\x3a\xc8\x37\x68\xc3\x77\x5b\x27\x94\x79\x8b\x7f\xc1\xd2\x10\x35\xe3\xe8\x28\xd5\xa1\xfa\x4d\x54\x27\x35\x82\xed\x88\xf9\xee\x9a\x64\x3b\x16\xc2\xb7\xd0\x56\x3b\x41\xb5\xef\x46\x7c\x86\x16\x7a\x06\xf1\x77\x27\xe5\x8e\x85\xd9\x4f\x07\x7f\xe6\x0e\xfb\xcc\xc3\xfb\x5b\x1d\xc7\xbb\x1c\xb0\x7b\x1c\x99\xd5\x91\x7a\xe6\xba\xc7\x72\x21\xe5\xac\x3f\xc8\x41\xee\xba\x9f\x22\x52\x71\x46\x89\x31\x83\x40\xab\x57\x17\x51\x36\x11\xb5\x9c\xdb\x7d\x58\x66\xfb\x91\x79\x67\xf2\x0d\x22\xcb\xf6\x9d\xce\x0e\xb3\xfc\xed\x95\xb7\x7b\x8b\xec\xb1\x01\x9e\x55\xde\x96\x24\x84\x7d\xf6\xfb\xce\xf4\xfa\x20\x77\xdb\xf7\xdb\x13\x70\xc3\x96\xb5\xe5\x3e\x34\x7e\x47\x9b\x19\xbd\x3f\x65\xba\x34\x39\xb8\x19\x81\x17\xc3\x0d\xfc\x05\xce\x32\x8d\x2e\x5b\x69\x21\xc3\xdf\xad\xec\x83\xb5\x5b\x7b\x64\xfb\x6d\x83\x1d\xb0\x23\xcb\x2d\x2d\x3c\xdb\x13\x7a\xbe\xd6\x5d\x3a\x50\x92\xf2\xee\x8e\xd1\xa0\xb2\x3a\xce\xf7\x7d\x48\x5a\xe3\xc7\x40\xcd\x18\x87\x00\xb3\xe5\xcc\xc2\xc2\xc7\x05\x15\x4e\xe5\x94\x45\x21\xbb\x8f\xfd\x95\x16\x2d\x9d\x00\x0d\xdb\x92\xe7\x8b\xd8\x67\xaf\xde\x4f\xa6\x07\x57\x97\x37\xe2\x3f\xb7\xd3\x83\x93\xc9\xd9\x64\x3a\x39\xe0\xf9\x4c\x6f\x2f\x46\xac\x6d\x8f\x2a\xce\x72\x18\x1d\x7a\xc6\x5b\x05\xc8\xb4\x55\x16\xa8\xe5\x6a\x94\x15\xf7\xd2\x8a\xc2\x20\xa8\x55\x25\x6b\x0c\xa7\x17\x37\xd3\xf1\xd9\xd9\xe4\x84\x5d\x9d\xdd\xbe\x3f\xbd\x60\xc7\x97\xe7\xe7\xe3\x8b\x13\xbd\x17\x89\xb6\x9c\xed\xa6\xeb\x74\x1e\x81\xfb\x6a\x23\xf8\x84\x96\x9b\xb9\xb0\xbd\x98\xaa\xab\x56\x11\x16\x54\x3c\x92\xb2\xef\x76\xe4\x7c\xa3\x56\xa7\xe0\x8a\xc5\xa8\x9e\xe5\xec\x36\xf3\xe6\x86\x66\xd0\x95\x73\xe5\x64\xd2\x26\x4c\x45\x9d\xf9\x55\xc9\x0a\xc2\x20\xe2\xec\x21\xf4\xe6\x99\xe8\xc2\x9f\x67\x3c\xc9\xd9\xe8\xe1\x3b\x88\x20\x0d\x26\x9e\xe0\x80\x05\x8e\x88\xdc\x67\x4f\x0b\x30\x49\x95\x59\xe1\xd8\xb2\x08\xf3\x20\x09\xb9\xb4\xd6\x92\x37\x6d\xcd\x5e\xa1\x9f\x62\x9f\x13\x8a\x7b\x7b\x5d\xc4\x6b\x3f\x71\xe5\x09\xee\x43\x6e\x03\x7b\x31\xbb\x29\xb8\xa3\xbb\xae\xf9\xa6\x97\x4c\x68\xe8\xba\x29\x0c\x81\x4e\x11\xce\x5c\xb1\xb5\xd7\x77\x40\x56\x3a\x65\x88\x5d\xfb\xd1\x3a\x68\x03\x78\x12\x80\xc1\x36\x66\xd1\x93\x99\x69\x54\x7e\x9a\x0f\x5e\x18\xf8\xaa\x96\xb4\xd5\xc6\x1c\x81\x47\x77\xd1\x2f\x90\xdf\xe2\x8b\x4c\xc5\x71\xf7\x22\x49\xe3\x3c\x9e\xc5\xe1\x9d\x60\x77\xf7\x22\x9f\x25\x77\x2f\x0e\xca\x77\x3e\xc6\x49\x41\x31\xe5\xeb\x37\xdf\x1f\xfe\xf0\xe3\x8f\x87\x6f\x0e\xdf\xfc\xaf\x5a\xb1\x24\x4e\xf3\x4c\x16\xf8\xd3\x9f\xbe\xff\x17\x48\x00\x22\xc4\xb9\x8b\x7e\xb5\x68\xb0\x7f\x6c\xb1\x1c\xbe\xa3\x74\x0e\x45\x7b\xe6\xb2\x6f\x58\x34\x93\xb1\x16\x01\x05\xe6\x37\xc4\x25\x47\x05\x6e\xf3\xf9\x83\x98\xc4\xd0\xb1\xbc\x8c\x76\x57\x72\xd0\xc2\x52\x69\x12\x47\x8a\xc4\xd5\x78\xfa\xd3\xeb\xe9\xe5\x6b\xb9\xb0\x8f\x30\x6b\x0a\x1b\x31\x57\x66\xd6\x6a\x80\xa4\xbf\xb6\x54\x80\x8e\x73\x85\x7f\xc9\xb8\x7c\x26\xad\x99\x56\x99\xd6\xc0\xd1\xcc\xb4\x0e\x6f\x16\x20\xd3\x66\xe7\x7c\x19\xa7\x7a\x15\x5b\x5b\x8e\xce\x69\x59\x64\xb9\x72\x69\x8e\xa3\x51\xc4\xe7\x82\xc9\x23\x2f\x63\x89\x74\x23\xb0\xad\x4f\x40\xf6\x88\xe3\x1f\xe6\x87\xd6\x68\x57\x06\x4c\xd6\x35\xc9\x68\xae\x95\x47\x22\xfc\x6b\xd8\x7f\x76\x15\x27\xf3\xbd\xb9\x39\x63\xc7\x3c\x95\x0e\x2d\x5f\x54\xf6\x59\x74\x30\x9c\x06\xc9\x39\xcf\x60\x2d\xb2\xc0\x43\x25\x43\xc6\x29\x63\xa2\x38\x7d\x2e\x9b\xaa\x74\x3c\xd5\xd5\xca\x91\xde\x38\xcb\x5c\x98\xcc\x53\x26\x98\x2a\x94\x7b\x8d\x58\x9d\x1e\x03\x5f\x25\x82\x19\xcd\x50\x87\x3c\x64\x57\x21\xf7\x84\x90\xea\xa5\x18\x35\xb5\x2e\x1b\xdf\xff\x0e\xeb\x00\x46\x44\x44\x40\x90\x5d\x25\xc0\x14\x35\x51\x2e\xf6\x6e\xe8\x88\xb0\x5d\xc1\x34\x03\x7e\x2b\xc0\xc8\x6d\xb9\x0e\x84\x08\x47\x77\x60\x99\x26\x0f\xa4\x5e\x8a\x55\xa7\x5c\x69\xa0\x48\x95\xea\x16\xfd\xd4\x3a\x5b\xa2\x2f\x59\xba\x1c\x90\x1a\x1d\x4f\x88\x51\xe9\x81\x4c\xe9\xea\x44\x9b\xea\x6c\x3c\x00\xc5\x1d\xa0\x1f\x04\x70\x2f\x8c\x95\x7d\xea\x2c\x2e\xa2\x1c\x59\x94\x8b\xd3\x31\x3c\x01\x36\xa7\x8d\x32\xb5\x35\x0b\x0d\x1e\xed\xd6\xbb\x9d\x72\x1b\x52\xea\x6c\xbf\x62\xf7\x62\xe7\x2e\xf7\x12\x35\x1f\xb1\x3d\x5f\x06\x12\x8f\x54\x85\xce\xe0\x37\xa9\x7b\xf6\xa0\xe8\x8c\xbe\xd1\x80\x8d\xa6\x1b\xe0\x1b\xf5\x23\xbe\x43\x99\x42\xcc\x0f\xb4\x90\xc9\x81\x36\x46\xcd\x80\xd2\xd9\xb1\x21\xcb\x89\xfb\xd1\x6a\xfd\xe8\xc4\xab\x2b\x4e\xe6\x5b\x9e\x1a\x1d\xb2\x75\x18\x2e\xf1\x50\x1f\x61\xcf\xbe\x22\x1d\x4b\xcb\x10\xa1\x8f\x38\x22\x95\x41\x50\x3a\x4d\x0d\x7b\x98\x11\x34\x2c\xdc\xd5\x03\x77\x82\x64\xec\x10\x1d\x11\x1d\xb5\xbd\xd4\x5b\x22\xaf\xa9\x7c\x42\x6a\x64\x22\x15\x32\xca\xa2\xe3\xd0\xbc\xb5\x14\x99\x8b\x0c\xe8\x87\xb1\x3a\xbf\x6c\x06\x0d\x7b\x29\x8d\xd7\x31\xe4\xd9\x07\x2f\xb4\x8c\x33\x7b\x1b\xf1\x72\xd8\xae\x89\x6f\xd1\x66\x47\x9d\xa1\x70\x8c\x27\x2c\xa8\xae\x07\x70\x49\x81\x72\x94\x91\x25\x6d\x7b\x1d\xb5\xba\x75\xbb\x9e\x79\x62\x32\xbf\x14\x82\x9a\x63\x1a\xe8\x8a\xd9\xf3\x81\x80\x74\x70\x84\x55\x7a\x78\xc3\x51\x56\x8e\xf7\xaa\xf2\x9a\x58\xcf\xda\xbe\xa6\x03\x9a\x2a\xff\x4e\xe9\xa1\x03\x91\x61\xe1\x85\x0f\x3b\xb7\xba\xa7\x8e\x05\x40\x17\x62\x74\xcc\x6b\xaf\xf3\x6e\x48\x6d\x65\xe9\x1c\x8d\x89\x72\x35\xa5\xe8\x5c\x94\x2b\x8d\xfa\xc2\x33\x79\xc3\xae\x6c\x08\x94\xb7\x4a\xf9\xd0\x2a\xeb\xf0\x70\x84\xe9\xb2\x6c\xf8\xab\x74\x63\xd4\x56\x70\xe1\xdd\x74\x28\x74\x1c\x6e\x44\x32\x0e\x38\x2b\x03\x29\x0f\x2d\x2d\x2c\x20\x69\x6b\x38\x70\x97\xb6\x3a\xaf\x3c\x65\xb9\x14\x40\x60\xc9\x24\x95\xe1\x9a\xe5\xd5\x21\xcb\x56\x59\xce\x97\x07\xca\xb8\x02\x4f\x5f\x22\x48\x19\x02\xb3\x20\x98\xfb\xa8\xd7\x98\x8e\x17\xb2\xee\xa6\x45\x84\xb3\x94\xde\x62\x60\xdf\xec\xe9\xed\x82\xd6\x23\x72\xc0\x94\xe9\x65\x55\xb3\xc7\x0f\x8e\xe3\xaf\x07\x49\x3a\xfe\xca\x76\x47\xa5\x83\xed\x86\xa7\xaf\x41\xe4\xbe\x4e\x34\xf7\xf0\xc0\x31\xee\x6a\x49\xb5\x66\x33\xdb\x81\x87\x48\xc3\x15\xa1\x9c\xfc\xca\x98\x74\xca\xb4\xd2\x16\x5a\x47\x65\x57\x4c\xa8\x1a\x12\xa1\xb4\xd7\xa1\x21\xa8\xc5\x4a\xa9\x4d\x6f\x9d\x5d\xc7\xa2\x1a\x0d\x47\xe5\x11\xee\x6d\xcd\xbd\x66\x24\x56\x15\x69\x58\x36\xfd\x2d\x95\x90\x2a\x96\xf3\xe6\x5b\x8c\x6f\x58\x44\xd1\x46\x0a\x82\x8e\xaf\x38\x34\x8f\x61\x24\x94\x99\xe4\x11\x85\x0a\x14\xd2\x53\x1c\x2b\x82\x54\xec\x0d\xbf\x9c\x4c\x9a\x2d\x76\xe2\xeb\xa8\xe4\x88\x61\xed\x5b\x63\xc9\xbf\xad\x82\x1b\x6f\xe5\x2c\x63\xc7\x77\xab\x30\x89\x27\x7c\x42\x75\xd1\x2d\x54\x79\x79\xbb\x9d\x99\x6e\xc5\xed\x2a\xd9\x63\x88\x85\x92\x00\xfd\x69\x9d\x4d\x02\x82\x71\xa6\x18\xe3\x47\x26\x9b\x31\x6d\x51\xb6\x6a\xd3\x77\xb0\x67\xb1\xca\x32\x1c\x18\x96\xfc\xb6\x32\x04\x19\x55\xed\xd8\x60\xfe\xd7\x5e\x88\xc2\x63\x2e\xbe\x05\x87\xbd\x73\xa6\x0f\x24\xa7\x2b\x46\xe2\x83\x71\x32\x8a\xdc\xd8\x4b\x34\xc5\x48\x7c\x52\x30\x06\x10\x53\x0b\x8f\xfc\x24\x0e\xe0\x46\x20\x90\x59\xce\xf0\x02\x4e\x5e\x4a\x9a\x2d\x3b\x1d\xa9\x10\x50\xc6\x9f\xd0\xb0\x3a\xc1\x63\x9b\x87\x2a\xdf\xe3\xcb\xed\x58\x1a\xcd\xfb\x42\x03\xe4\xfe\x24\xad\xf1\x9f\x43\xbc\x4e\x4f\x34\x42\xb2\x2a\xa3\x27\x2a\xe5\x67\x16\xfb\xea\x2a\x3d\x8e\xf8\x66\x3a\x0a\x2f\x8a\xc5\xa0\x83\x44\x31\xb7\x11\x9e\x96\xc7\x8f\xa2\x47\x05\xbe\xcf\xa3\x03\xb9\xed\x14\x04\x47\x15\x25\x69\xc5\xf3\x14\x60\xd4\x12\x19\xaa\x11\x33\xd4\xd4\x92\x33\x69\x9b\xe3\x1b\x44\x48\x6d\x5d\x18\xd5\xa3\xea\xd2\x7c\x53\x93\xa9\x29\x7d\x10\xa0\x18\x45\xd4\x4f\x78\x43\x90\x24\xe0\xaf\xd9\x9b\xaa\xd8\xc9\x82\x5b\x81\x0b\xed\x43\x11\x86\x2b\x08\xeb\x6a\xc0\x4a\xab\xee\x88\x2b\xc8\x6a\x91\x68\x37\xce\x42\xfc\x00\x2c\xe3\xc4\x58\x39\x60\x49\xd3\x3e\x81\x07\xd0\x3f\xd0\x2e\x54\x74\x29\x34\x76\xc7\x9c\x9d\x1d\x99\x91\xf7\xc9\x9a\xd0\x1e\x89\xda\x8b\xc6\xa5\xfa\x8e\x99\xbb\x16\xb0\xf9\x36\xa4\x52\xb2\xae\x47\x40\xf2\x19\x33\x1d\xe1\xa1\x7c\x15\x90\xae\xea\x97\x38\xb2\x8a\xe4\x00\x53\xd4\x04\x51\x61\x5a\xda\xfb\x90\xea\x81\x77\xad\x86\x28\x05\xd7\x11\xac\x25\x1d\x0a\xd2\x60\x59\x2c\x99\xb7\xc4\xbb\x71\x31\x15\xaa\x8b\x1a\xd9\x8d\xaa\xb9\x6f\x7d\xd1\x2e\x5e\x2c\xbc\xc7\xd2\x87\xe3\xcd\xf7\x3f\xfc\x78\x7e\xc0\xde\xbc\x17\xff\xff\xfe\xbd\xfe\x20\x67\x67\x7c\x9e\x4b\xd2\x43\x36\x7a\x03\x8b\xa6\x98\xd7\x31\x6a\xa4\x28\x5c\x44\x78\xbb\x05\xf7\x99\xc8\xc3\xb4\xfa\x3c\x23\x96\x6f\xb9\xc5\xd8\xab\x13\x99\x66\xeb\x68\xfd\x6e\x07\x9d\x6a\x57\xf8\x6c\xf7\x06\x25\x70\x1c\xd6\xaf\xc4\x00\x16\x9b\xe1\x38\xf2\xb3\xef\x70\x8c\x1f\x9f\x9d\xc2\x7c\x89\x03\x7f\x63\x0b\x2c\xe7\xa7\x03\x86\x5a\x88\xb2\x46\x64\x19\xcc\xfe\xea\xba\x32\x13\x13\xfe\x0a\x6b\xe8\xad\x74\x6f\xa4\x22\xa2\xee\x37\xd7\xdc\x1d\xe4\xa8\x5d\xea\xaa\x8f\xfe\xc3\x9f\xff\x05\xda\xb4\x6c\x5a\xc3\xc7\xa3\xd4\xb5\xef\xb3\xd2\x66\x54\xdd\x30\x77\x99\xa1\x76\x94\xb6\xe7\x8a\xc1\xcb\x79\xcb\x1d\x40\xa5\x48\x36\x62\x20\xac\x35\x49\x3d\xb4\x01\x48\x5a\xe3\x07\xbb\x79\x2d\x92\xe6\x4b\x12\x4d\xfd\x86\x71\xe3\xad\x3d\x55\x93\x3f\xe3\x85\x9b\x2f\xe3\x05\x7f\x62\x57\x5e\x96\x3d\xc5\xa9\xaf\xa7\xdd\x5a\x88\xc4\xc3\xe8\x8b\xb9\x5d\xc0\x9e\x76\xcc\xc6\x57\xa7\xeb\x8d\x68\xc6\xc5\x44\x75\x2b\x34\x43\xd8\xc8\x89\xad\x6a\x10\x4d\x83\x04\x36\x7a\xca\x0a\x40\x14\x56\x0f\x40\x2b\x93\xe7\xb0\xa2\x07\x95\xf5\xf5\xcb\xd6\xee\x18\xd9\x4e\x38\xe0\x16\x36\x93\x9b\x31\x0f\x82\xc7\x33\xf6\x73\x5c\x48\x0b\x2b\x5f\xe6\xf1\x28\xcf\xeb\x60\x3c\x88\x6d\x17\x8c\x0d\xbc\x37\xd9\x0a\x9f\x52\x8e\x9e\xf2\x8a\x45\x46\xe8\x14\x0a\x77\x0e\x0e\x73\x62\xf0\x09\x01\x6b\x81\x7c\xaa\x22\xca\xd9\x0e\x14\xdc\x46\x5c\x0b\xf1\x52\xdf\x72\x57\x08\xc3\x4b\x4b\x78\x01\x20\xad\x93\x3d\x64\x53\x31\x19\xa6\x62\x4e\xc4\xec\xcc\x2d\x8c\x0f\x24\x30\x1e\xd5\xa5\x94\x01\x54\x42\x69\x05\xad\xcb\x5b\x37\x5c\x8b\x2a\xa1\x41\x1a\x25\x35\xce\x3d\xcf\xde\xbc\xd3\x85\x9a\x05\x15\xb8\x12\x04\x9e\x8b\x6b\xc2\xe7\xc0\x66\x24\x84\xec\xe5\x2b\x31\xb7\x6e\x7c\x95\xcd\xa0\x25\x6e\xcd\x9a\x04\x9a\xa1\x52\xda\x76\x43\x5e\x9c\xe6\x90\x30\x0d\xbd\x7e\xf4\x28\xb3\x89\x74\x0e\x85\xdd\xa7\x19\xcf\x76\x29\x0a\x97\xb5\xad\x45\x37\x2f\x7d\x59\x0a\xc7\xd9\xc2\x8b\xe6\x62\x05\x7d\xe2\xe8\x96\xed\x1b\x66\x63\x63\x61\x0a\xcf\xf2\xda\xab\x53\x44\x4d\x41\x0a\x2f\x43\x00\x7b\x13\x67\xab\x6a\x14\x1c\xd2\x2d\x39\x4b\xf8\x0c\xab\xa0\x37\xef\x56\x73\x1a\x97\x19\x2a\x05\x0a\x3a\x18\xdc\x18\x34\x11\xaf\x65\xe5\xb2\xc4\xfd\x03\x38\xfc\xc2\xd1\xa4\x3c\xac\xb7\x96\xad\x46\x3d\x13\xf8\x81\x19\x50\x65\xab\xc2\xa4\xb7\x70\x7e\x27\x43\x73\xac\x11\x74\xc9\xe1\x48\x8c\x8a\x79\x08\xa8\x7b\x47\xa8\xff\x8c\xc6\xbe\xdd\x87\x1a\x11\xb5\xc5\xb4\xd3\x56\x8a\xc2\xa5\x32\x54\xe9\xe0\xd3\x5e\x8e\xc4\x49\xdd\x66\x37\xf3\x97\xe0\x79\xc3\x3d\xe7\xb0\x8b\x35\x2e\x9f\xa4\xea\x2e\xb8\x36\x2f\xb4\x2d\xf1\x18\xab\x51\x70\xd8\xda\xd0\x99\x8a\xd2\xf8\x35\x43\x30\x76\x76\x81\x8e\x0a\x2e\xbc\x21\x2d\x02\x29\x29\x80\x0d\xbe\x1e\x44\x5d\x65\xf8\xd2\x9a\xda\x01\x8e\xff\x77\x22\xdd\xe0\xec\x5c\xe4\x5e\x5b\x6c\x59\xf7\x1c\x6d\x15\x07\xfe\xf6\x6c\xfb\x71\x1b\x64\x29\xde\xf5\x1a\x4c\x53\x55\xba\x55\xa0\x7e\xf4\xc8\xc8\x21\xca\x61\x16\xcc\x23\x6e\xfe\x9c\xba\xa2\x0e\xfc\xba\xfb\x4e\x6b\x39\x12\x27\x65\x09\xe5\xb8\xde\x91\xaa\xbb\xe0\xda\x48\x85\x60\x09\xc7\x54\x8b\x84\x02\xad\x79\xd7\x97\xd5\xae\xad\xe4\x42\x86\x82\x13\xaf\xd4\xcb\xe0\x23\x8e\x20\xe9\x34\x08\x08\x73\x16\x4a\xe3\x9d\x20\x5a\x9f\x28\x1c\xbf\xc3\xe3\xbc\xe6\x70\x15\xe5\xa0\x90\x01\x69\x0f\x5a\x14\xc4\xfc\x48\x5e\x26\xc3\x55\x47\x8e\xa9\x61\xe3\xa5\xbc\x01\x31\x61\xb3\xa9\x65\x8f\xa2\x0a\x8a\x53\x1d\xcc\xeb\x79\x9b\xca\x5a\x73\xbc\xfc\x8b\x96\x41\xfd\x95\x3d\x3d\x99\xf4\x53\x4f\x74\xf3\xbd\x3d\xe5\xeb\xf7\x6c\x7c\x72\x7e\xaa\x4f\x4b\xdd\x52\x82\x46\xfd\xf6\xe4\x74\x7a\x79\x6d\xa6\xbf\x59\x86\xc4\xe1\x7c\x7c\x31\x7e\x3f\x31\x73\xd8\x2a\x43\xe1\x60\x68\xf8\xc6\x4b\x7b\x9a\x06\x03\xec\x4b\x27\x2b\xeb\x4b\xd8\xa8\xa2\xb3\x84\x0c\xa7\x91\xd5\x0d\xb7\x6b\x97\x92\x26\xb6\x44\x02\x24\x6c\x8d\xf3\xe1\xf2\x2c\x57\xe6\x85\x36\x42\xb2\xaa\xe7\x8e\xa4\x19\xa3\x03\x4e\x50\x94\x3d\xcf\xfa\x90\xd9\x1e\x1e\x89\xd8\x50\x98\xf5\x53\xbc\x7d\x45\x0a\x16\xfd\x35\x61\xf3\x25\x85\x66\xb7\xbf\x4d\x7b\x21\x7b\x1e\xd2\xf2\x8f\x57\xb1\x67\x7c\x69\x19\x50\x9a\x7e\x56\x86\x5a\x7a\x00\x74\x0a\xfd\xd1\xa9\x68\x32\xfd\x41\x76\x12\xa2\x63\xad\x25\xdc\xde\x30\x93\x44\x2b\x38\x39\x6f\x08\xfd\x27\x48\xe3\x08\x23\x43\x7a\x0f\x39\x4f\x37\x6d\x2e\x13\xc8\xbb\x6e\x98\x01\x76\xcb\xcd\x5a\xea\x2b\x2f\xf0\x1b\x57\xf8\x7a\xc8\xa6\xa2\x04\x7e\x59\x26\x9d\xd9\x05\x60\x99\x31\x03\xbd\xa4\xc1\x94\x13\x6d\x28\xc5\x3e\xac\x76\x46\x56\x49\x5d\xea\x9a\x52\x61\x37\x60\x1c\x96\xfc\xa0\x72\xd5\xf6\x42\xbb\x90\x8b\x42\x9e\x24\x97\xd1\x22\xa1\x87\x35\x42\x59\x95\x89\xb1\x20\x6a\xa8\x5e\x5f\xcd\xe5\x4b\x2f\x9f\x2d\x3a\xf9\xda\x55\x26\x60\x52\x21\xbc\x92\x64\x3d\x9b\xa0\xbf\x31\x84\xf5\xfa\x7b\x90\x48\xdb\x58\x35\x5a\x41\xa3\xc0\x5b\xab\xf5\xe8\xb5\x98\xcc\x76\xc2\xc3\xf6\x4a\xb8\x64\xde\x60\x5c\xf2\xec\x84\xdc\x51\x8b\xdc\xcc\x9d\x26\xc9\xfa\x82\xf6\xbc\x78\x0a\xe1\x55\x61\x84\x04\x30\x51\xb2\xd9\x82\x4b\x47\x1c\x1f\x06\xd3\x12\x42\x18\x3f\x2d\xb8\x34\x5b\x96\x37\x04\xa5\x9d\x73\x58\x6a\x64\x20\xae\xe8\x56\x06\xd3\x8a\x9d\x30\xb1\x97\x11\xcc\x0e\x36\xb4\xb4\x32\x59\xa4\xce\x28\xc2\x68\x26\xe2\x4e\x8c\x86\x79\x4d\xaf\x66\xce\xb1\x0e\x1f\x6d\x3e\xe0\x72\xa0\x30\x00\xba\x85\x07\x0d\xd3\x62\x12\x07\xdd\x54\xda\xcb\x39\x20\x26\x51\x25\x49\x71\xd4\xca\xd0\x08\xb1\xab\x0a\x81\x3f\x3a\x07\xcc\x16\x71\x9c\xad\x7d\x03\xc2\x30\x7e\x82\xce\x0e\xa6\x3d\xf0\xf7\x21\x7b\x1b\x8b\x61\x2e\xaf\xdb\xc1\x3c\x09\xbe\x5d\x02\xa3\x26\x07\xab\x57\xd1\x02\xf7\xa0\xf9\x65\x19\xaf\x1c\x11\x32\x70\x2c\x50\xae\x2d\x26\x83\xa7\xfd\xb2\xa7\xb6\x8b\x1f\x47\x2f\x0d\x73\x5f\x6b\x21\x2a\x0f\x79\xc6\xc5\xbc\xb9\x67\x70\x01\x34\x96\xa5\x72\x2c\x5d\x41\xb0\xa1\xf0\x08\xfe\x49\xb4\xfc\xda\x55\x7f\x9d\x65\xaf\x16\x21\x93\xb8\xa9\xdf\x25\x2b\x82\xbc\xb8\xf9\x30\x5a\x83\xaa\x32\x5a\xa3\x4a\xf3\x62\xbd\xae\xbc\x0e\xcf\xdc\xba\xe7\xb5\xe1\x6f\x4d\x62\x08\x78\x35\xc3\x36\x34\xe9\x73\x02\xa8\x27\x42\xfd\x46\xe0\x49\x88\x3c\x7c\x76\xf7\xa2\xe1\x59\x78\xf7\x62\xe3\xf4\xa5\x72\x69\x82\xeb\x22\x65\xcd\x8c\x55\x4d\xf3\xcc\x2e\x98\xd0\x65\xc4\xf4\x31\x82\xbb\x5a\x4c\xee\x83\xc8\x03\x3f\x84\xca\x61\x0e\x56\xf1\x95\xd8\x34\xb2\xcb\x9b\x23\xbd\x6b\x5b\x5f\x72\x54\xdc\x9b\x5f\xbd\xe1\x44\x57\x44\x41\xe9\x8b\xdd\xd9\xfe\xad\x7d\x48\x47\xcd\xb9\xbb\x6f\x32\x78\x14\x0f\x3e\x88\x4d\x59\x80\x69\x42\x1b\xec\xec\xa1\x1b\x51\xb7\x91\xb1\x06\x9d\x82\xa1\x26\x18\x4c\x97\xd9\x85\xfc\xc0\x9b\x47\x71\x96\x07\x33\x54\x2e\xb2\xdc\x37\x79\x6e\x93\xeb\xdb\x7f\x7d\xa4\x0c\xce\x1f\x1e\x0b\xf1\x58\xf1\x01\xb7\x13\x32\x54\xd0\xc6\xce\x68\x63\x23\xe4\x95\x56\x79\xb3\x8e\x7d\xcb\x2e\x78\x10\x25\x04\xba\x8f\xb2\x7f\x74\xe0\x6c\x2d\x49\xe0\x16\x8b\x41\xb9\x5c\x9b\x6f\xfb\xf1\x53\x14\xc6\x1e\x5c\x28\xaa\xa1\x0b\x0b\x23\x5f\xd6\xf6\x8f\xa6\x59\xa0\x27\x39\x0a\x6e\x0c\xd9\xd7\x16\x1b\x70\xed\x7d\xba\x8e\xd7\x39\x85\xeb\xb3\x07\xee\xe5\x45\xaa\x9c\x54\x85\xde\x12\xcd\xc1\x05\xa9\x48\x20\x65\x05\x58\x6a\x2a\xfd\x00\xc1\x8b\x52\xb9\x34\xfa\x86\xd9\x0b\x74\x1b\xc3\x70\x7c\x56\x30\x94\x36\x03\xbd\x47\xef\xb8\xb3\x5d\xc0\x9e\x76\x91\xce\xeb\xf9\x52\x37\xb7\x7c\xa6\xc8\x08\xa4\xba\x04\x44\xd9\x02\x52\x28\xf0\x27\x3c\xfd\x00\xe3\x20\x08\x8a\x5f\x9a\xe2\xa2\xd3\x91\x5c\x57\x55\x9c\x19\x03\x3e\x67\x4a\x54\xb4\x10\x85\x41\xa6\x38\x62\xaf\x40\x29\x05\x66\xf0\xaf\x9c\x8c\xca\x1e\xf4\xdd\x91\x21\xab\x4e\x0f\x4a\xd6\x68\x31\xd8\x38\x3b\x81\x6b\xfd\x00\x15\xe5\x2f\x2a\xab\x28\xed\x46\xcb\x95\x0c\x11\x27\x7c\x20\x34\x9c\x29\xfd\x40\xc4\x97\x14\x0b\x64\xe9\x7e\x0f\x46\xad\x90\x87\x4a\x05\x5e\xc3\x8b\xf6\x18\xc3\x6c\xc2\x39\x7b\x11\xe6\x72\xde\x47\x0a\x78\x3e\x2a\xa6\xf9\xf2\x26\x01\xc3\x51\xe9\x1d\x05\xf7\xce\x7f\xd8\x96\x91\x9b\xa3\xe7\x6c\x9b\x61\x11\x10\x5b\x67\xa3\x37\x5a\xee\x9d\x48\x75\xad\x11\x5d\x4f\xfe\xfd\x76\x72\x33\xd5\x5f\x37\x6e\x17\x20\xd0\xbe\xb9\xba\xbc\xb8\x31\xb8\x3c\xb6\x94\xb0\xa7\x7e\x79\x36\xb9\x31\x4d\x58\xdb\x05\x08\xb4\x6f\xa7\x13\xbd\x39\xc2\xe6\x6b\x7b\xba\xdc\x03\x15\xda\xe7\x70\x43\x26\x06\x68\x22\xa6\x7a\x08\xeb\x8a\x86\xe0\xff\x2a\x17\xf9\x65\x62\x8a\xb1\xee\x40\xc1\x11\x9d\x3a\x60\x3d\x8f\xc5\xef\xe9\x2a\x81\xde\x56\xfe\x2c\xa7\x51\xa1\x38\x70\xa1\x22\xae\x72\x4c\xa4\x27\xc6\x4a\x3c\x0b\x70\x78\xe1\xc2\x10\xe4\xff\x6a\x29\xc6\xb0\xac\x76\x25\xef\x60\xd2\xf4\xc0\xaa\x0e\x5f\x5b\xcc\x8f\x1b\x51\x9c\xa5\x43\x74\xe9\xfe\x77\x19\xfa\xdb\x47\xbc\x62\x5a\x04\x37\x39\xfe\xb4\xf5\xea\x5f\x21\xb9\xdb\x9f\xf4\xdb\x98\xe7\x84\x42\x6d\xaf\x44\xa8\x80\x7c\xcb\x56\x7a\xfb\xe2\x00\x41\x1e\x87\x71\xe1\xb3\x77\xa0\x57\xa7\xab\xce\xaf\x3d\x08\x69\x82\x3c\x33\x1e\x3c\xe2\x99\xef\x3a\x4d\xd4\x4c\xec\x07\xe4\x75\xa3\x0a\xcf\x64\xc0\x4c\xab\x4e\xc1\x55\x88\x3d\xe2\x23\x0f\x57\xe5\x96\x62\x1d\x42\x12\x46\xed\x6c\x11\x84\xbe\xca\x32\x94\xb5\x34\x06\x26\x5e\xb8\x87\x1d\x49\xa9\x45\x2e\x3d\x8c\xca\xa5\x76\xf8\x52\x0f\xde\x70\x94\x30\xc9\xf9\xac\x70\x08\xed\xa6\xc0\x25\xeb\xd3\x3a\x19\x6b\xcc\x20\x5b\x77\x15\x3a\x7f\x15\x89\x15\x92\xa0\xa9\xdc\xa7\x60\x5a\xdb\x0d\xa2\xab\x1e\x1d\x49\x91\xaa\x38\xdb\x8a\x60\x64\xdc\x3c\xd9\x56\x23\xe3\xc0\x30\xf1\x35\xb7\x62\x79\x38\x2f\xba\x40\x27\x14\x8b\x9a\x64\x34\x51\xc3\xb8\xb9\x13\x82\xae\xb8\x03\x5f\xd8\x3e\x90\xbb\x45\x57\x35\x1a\x8e\x4d\x5b\x7d\x98\x5c\x3f\x78\x69\x7d\x62\xdd\xf4\xce\x6d\x66\xce\xb7\x49\x98\x6f\x9d\xda\xfd\x5b\x80\x44\x6f\xbf\xb4\x91\xde\x50\x22\xc4\xe0\x97\x5f\xca\xa4\xf4\x92\xcd\x00\x19\xf8\xad\x1a\xef\xb9\xf0\xec\xbd\xe5\x9e\xa9\x81\x76\xd1\x0e\x85\x54\xf3\x30\x13\xe5\x50\x7d\x1c\xa0\x45\x9d\x47\x78\xcf\x03\xa2\x6f\x1b\x39\x48\xe4\xca\x1f\x6f\x99\xbc\xb6\xa0\xbc\x5b\x7c\xf5\x45\xe9\xfc\xac\xd5\xb1\x8e\xf2\xee\x9c\x3b\xe3\x9a\x5b\xd4\x70\xe0\x6e\xf4\xf2\xd3\x15\x23\xf3\xe9\x52\x7d\x5a\x4b\x39\x70\x31\x45\xa8\xd7\x94\xa2\x71\x51\x07\xd7\xcd\x61\x5a\xed\xf7\x76\x3d\x77\xec\x1b\x00\xbd\x6d\xd6\xb1\x2b\xe5\xe6\xf8\x6d\xf9\x7b\x13\xe9\xc6\x0b\x2b\xb9\x07\x21\x4e\x97\x69\xab\x29\x37\x9b\xdb\xe9\x23\xf6\xa3\x4a\x97\xa2\x39\x63\xa9\x16\xb4\x64\xdd\x2d\xcd\x30\xd4\xdd\xa5\xda\x3a\xa5\xd8\x3c\x83\xd9\x83\x36\xfd\xfc\x90\x1c\xda\xaf\x64\x03\x07\x59\x35\x4e\x6b\xac\xb5\x87\x6d\x48\x9d\x5b\x69\xd7\x8c\x09\x6d\x91\xc4\x66\x2b\xb3\x96\x12\x74\xea\x6c\xc4\x30\xf7\x42\x99\x07\x0d\x35\xbe\xdf\x21\x06\x1b\x5e\xd5\x58\x9d\x97\xb8\x93\x22\xe1\x95\x95\x0d\xd6\x0b\xed\x85\x08\x3c\xc0\x9b\xc2\x42\x2d\x68\x2f\x46\xe4\xd3\xba\x62\xee\x72\x1e\xd8\x07\x53\x5a\x1b\xa4\xb9\x55\x5b\xb7\x14\xa3\xf2\x01\xb9\xeb\x31\x45\xd6\xd9\x72\x55\x08\xfe\xca\xff\xaa\xd1\x32\x84\x05\x67\x37\x6c\x08\x72\xe6\x69\xc0\xe5\xd1\x50\x10\xf9\xc1\x63\xe0\x17\x5e\x58\x19\xa9\x80\x99\xb3\xbc\xc2\x11\x80\xf2\x42\x7f\xa5\xef\x4c\xc7\x05\x29\x26\x42\x4f\x42\x70\x8a\x5f\x70\x76\x39\xae\xd2\xcd\x54\x9e\x07\x55\x06\x40\x70\x38\x35\x98\x52\x0d\x43\xb4\xbf\x0c\xf3\xe0\x91\x63\x57\x7d\x99\xb1\x79\x11\xf8\x87\x8c\x8d\x21\xbc\x24\x5a\x7a\x2e\xb8\x17\x0a\x30\x18\x67\x0d\x5b\x0f\x6c\xd4\x92\x62\xed\x67\x81\xe1\xe0\x33\x34\x22\x4a\x39\x58\x9e\x9b\x86\xf3\xde\x11\x0c\xd5\x3a\x62\xae\x69\xc3\xb6\x81\x04\x66\xa4\x61\xda\xa2\x3f\xbf\xa1\x24\x57\x2a\x98\x05\x9a\x6a\x2f\x3d\x48\x0b\x0c\xc7\x77\xe0\x96\x18\x7d\xe2\xab\xe7\x6a\x8d\x81\x78\x0f\xd6\x22\x90\x5b\xb2\xc2\xa3\x87\x53\xa6\xa0\x1c\xa2\x21\x86\x60\x49\x97\xbf\x32\xc9\xad\xad\x29\x59\x7d\x51\x81\x97\xdc\x9b\x49\xe7\x9c\x91\x34\x3a\x97\x65\xbb\x25\x1d\x84\x38\x5d\xa6\x36\x9f\xcd\x1e\x1e\xcd\x83\xd1\x1d\x46\x92\x1e\x3e\xcc\x83\xd1\xa5\x4a\x82\x9b\xb9\xea\x8b\xc3\x9d\x21\x7c\x70\x08\x10\xa4\x3e\x77\x46\x3c\x1f\x19\x84\x6a\x3f\x29\x04\xdd\x77\x92\xcd\x3b\xc1\x95\x7c\xc2\xd3\x9b\xa2\x0b\x7a\xb7\x1e\xec\x2a\xd9\x2e\xb8\x0d\x25\x75\x77\x6f\x1f\x52\xea\xbe\xdc\x68\x52\xab\x01\x9e\x16\x61\x2d\x73\xb0\x5c\x3e\x9b\x21\x46\x37\x2d\xca\x2a\x1f\x3e\xb3\x9c\x43\xd2\xb7\x97\xac\xbc\x39\xfa\x29\xce\x72\x75\x64\x2b\x7e\x9d\x60\xb4\xec\xba\x61\xa8\xd9\xa0\xd4\x95\xcc\xf0\x38\xbb\x8d\x5f\xfb\x90\xa2\xe3\x95\x77\x8c\x96\xc6\xe6\x96\xb5\x68\x28\x3a\xd8\x39\xd1\x85\x3e\xaa\x27\xdb\x7c\x4b\xa0\x2a\x27\xb1\x49\x6d\x38\x7f\x28\x87\xf3\x7b\xec\xfb\x06\xf3\x5f\x52\x65\x6b\x4c\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\xec\xfd\xf5\xe5\xed\x95\x96\xbb\xae\x18\x81\xcf\xf5\x87\xd3\xe3\x49\x47\x60\x37\x4d\x29\x2a\x17\xbd\x35\xf2\x76\x01\x7b\xda\x57\xe3\x6e\xfc\x6d\x65\xa8\x1c\x3a\x82\xd3\x69\x4a\x11\xb9\x9c\x4c\x3e\x4c\xce\x2e\xaf\x0c\x21\xea\xb4\xe5\x88\x9c\xba\x42\xe1\x69\x4a\xd1\xb8\x18\xbe\xf8\xc6\x6b\x7b\xba\x33\x2f\xdc\xf3\xf9\xee\x3e\x58\xda\xcb\x5f\xae\xca\x5d\x33\x93\xbe\x20\x9d\x97\x54\x6a\x84\x00\xa5\x4e\xf0\x11\x9f\xd8\x2f\x7e\x3d\x28\x0d\x89\x56\x3c\xc3\x64\xc6\x1f\x97\x9d\x49\xc4\x7a\x52\x23\xa0\xc6\x3c\x3f\xa5\x35\xea\x2b\xa1\x80\xe1\x49\x80\xd0\x2e\x21\x2e\x19\x38\x04\x7f\x0a\x92\xef\x4c\xdf\x99\x4a\x80\x8c\x4d\x76\x73\x77\x68\xd6\xf5\x09\xc8\x30\x47\x1e\x36\xff\x41\xb9\xe9\x82\x1c\xbf\x47\xec\xc7\xef\xff\x74\xc4\xc6\x32\x07\x51\x90\x31\x9f\x47\x01\xf8\x8c\x62\x02\x24\x3f\xc6\x1e\x86\xe1\x75\x13\xa1\xfa\x06\x21\x57\x6e\x8a\xfc\xb3\xf8\xba\xe8\xf9\x10\x64\xdd\x71\x50\xf6\xcd\x7e\x88\x76\x11\xbd\x75\x92\xa6\x37\xf8\xe8\x58\x3c\xf9\xfa\xf5\x40\x96\x6b\xbc\x1f\x27\xc1\x04\x1e\x96\x25\x96\xb5\x5c\x7a\xe2\x45\xc3\x2f\xc2\xa5\x79\x76\x89\x82\xd4\x4a\x70\xf0\x88\x17\x18\x53\xbc\xc0\x10\x84\xcf\xbc\x7b\x1e\xca\x61\x5d\x7a\xfb\x12\x62\x68\x0e\x42\x93\x2c\xc1\xdb\xca\xf8\xa2\x75\x07\xd1\x0d\xd7\x9e\x00\x19\x5b\x79\x43\x57\xc6\x36\x45\x0b\xd0\x32\x24\x77\x27\x30\xcb\xda\x64\x54\x9d\xe9\x0f\xc8\x4d\xd8\x83\xa2\x33\xfa\xa3\x2d\x5b\x13\x6b\x98\xa6\xaa\x64\x3c\xba\xb4\x13\x2d\xd1\xce\xac\xf3\x4f\x74\xb7\xf8\x8e\xb9\x92\x5b\xa1\xf2\x9c\x6a\x02\xb8\x8b\xa6\xa7\x57\x47\xec\xf4\x01\x82\xba\x60\x20\xac\x3c\x5d\xe1\xa1\x52\xac\x5c\xaf\x3c\xf6\xf8\x66\xcb\xff\xea\x00\x8b\x63\xae\x3e\xc8\xfb\x06\xc7\x2c\xa3\x04\x0f\x43\xbb\x5b\xe6\x19\x90\xb8\xb7\x56\x95\x0d\xdd\x5e\xac\x96\x2a\x64\xfe\x5b\x56\x5a\xd4\x01\x6f\x4f\x80\x8a\xad\x3e\x36\xed\x97\x5a\xbb\x8a\x54\x2c\xfa\x83\x96\xed\x02\x64\xda\x26\x9d\x71\xab\x04\x81\x7a\xbe\xe9\x3f\x24\x4f\x34\xcd\x96\x30\xb6\xd5\x48\x38\x44\xfd\xc7\x80\x3f\xad\x03\xa3\x05\xe0\xe6\x65\xc4\xd0\x55\xc5\x8d\xff\x62\x9d\xb1\xa5\x91\xfb\xcd\x0e\x4a\x77\x6d\x0a\x2a\x15\x05\xa4\xee\x60\x86\xc6\x7f\x13\xf5\xb3\x63\x1f\x4e\x26\x40\xc6\xd6\xe8\x03\x10\xb2\xa6\x72\x8c\xc2\xfc\x16\xea\xc9\x07\x2f\x2c\xb8\x0c\x60\xb3\x9d\x5c\x71\x97\x07\x11\xdf\x26\x4a\x72\x2b\xff\xad\x2d\x0e\x44\x1e\xeb\x2c\x3e\xed\x2e\x6d\x86\x25\x4e\x96\x69\xa0\xab\xc4\xbe\xe4\xc8\xb8\xf7\x70\x89\xb8\x4b\x56\x83\xc8\x3b\xf0\xf5\xe1\x2e\x59\xd9\xcb\xbb\xc0\xbc\xd4\x78\xce\x00\xde\xf1\x32\x11\xad\xbc\xb9\xeb\x70\x9b\xa1\x54\x25\xe1\x91\x8a\x29\x12\xdb\xbc\xf9\x52\x71\x98\xfa\x8c\xff\xc1\x19\x10\x64\x8b\x9f\xd6\x71\xa5\x9a\xf7\xa6\x06\xbc\x36\x95\x88\x18\xc2\x70\x23\x93\x94\x8d\xfa\x63\x5f\x93\x86\x66\xc1\xc3\x0e\xae\xcd\x12\x34\xea\x41\x04\x01\xc2\xa5\xc9\x2f\x62\x55\xd6\x54\xaf\xbc\xb5\x59\x15\xf4\x61\x3e\x02\x27\xa2\x5c\xc6\x80\x97\x89\xc1\x0e\x44\xe5\x32\x6a\x12\x74\xe8\x84\xa7\x9e\x9c\x75\xd5\x6b\x99\xde\x46\xbc\x12\xd3\x13\x66\xc4\xd6\xc7\x6a\x7a\x56\x2c\xb4\x16\x43\x3b\x4c\x81\xd4\x2c\xcb\x76\x29\x3a\x17\x38\xac\xc9\xd8\xfd\x0a\x3d\x81\xbb\xd9\x69\x8a\xd3\xf8\x62\x7c\x16\x9f\xe7\x5e\x10\xaa\xce\x0b\x09\x1e\xf2\x60\x56\x84\x5e\xba\xb5\xb5\x35\x83\x72\xa5\x45\x43\x2c\x35\x95\xee\x2f\xd2\x56\x8e\xc6\x29\xe5\x33\x4c\x75\x22\x94\x40\x99\x16\xdc\xcc\xd0\x50\x9c\xc6\x77\xeb\xf4\xa5\x5b\xd8\x8e\x2a\x6e\xfc\xe1\xc0\xc8\x9e\xf5\x76\x69\x22\x57\x54\xa2\x2d\xf8\xb5\x94\x73\xe1\x64\xdb\x8f\xf4\xa5\x5d\xb8\x12\xc6\xb8\xb1\x02\x89\x37\x4c\x8c\x95\x8f\xc1\xcc\x93\x59\x3d\xf6\xb9\x03\x7b\x0e\x0c\xe4\x16\xda\xf6\x45\x18\x66\x0b\x68\xab\x88\x3d\x0b\x0a\xfb\x56\x32\x9f\x7e\xb8\x9e\x6e\x20\xe0\x81\xa2\x7f\xf6\x23\xe6\x82\xd9\x70\x20\xd7\x5a\x88\xc8\xa3\x57\xc2\x41\x17\x12\x44\x7c\x9b\x1d\x8d\xf2\x99\x2c\xeb\xd2\x10\x75\x7c\x0f\xb7\x2f\x01\xd1\xb7\x57\xa8\xcb\x40\x7a\x0e\x31\x18\x51\x0f\xc5\x80\xa2\x82\xf8\x21\xdc\x0f\xe0\x2b\x38\xca\x56\xb1\xba\x21\xcd\x73\x19\x11\x57\x16\x87\x0b\x6a\x15\x82\x14\x12\xc5\xa9\x89\xf0\x29\x4e\x31\xc6\x58\x15\xba\xda\x30\x3f\x74\xe2\xd0\x01\x69\xf2\x07\xf6\x69\x1c\xe7\xf5\xa8\xe3\xdb\x49\xdf\xaa\x9c\x6e\xbe\x26\x15\x80\x31\xda\xfb\x0d\x6a\xef\x39\x26\xeb\xdd\xfb\xce\x62\x9f\xbc\xed\x7b\x91\x3a\xc0\x70\xb2\x96\xa4\x55\xa6\x60\xea\xf6\x77\x6d\x2f\x44\xe5\x21\x56\x2f\xc8\x2d\x1c\x17\xf9\x5d\xa4\x6e\xd5\x5a\xb2\xa0\x43\x9f\x5e\xc6\x29\xaf\x6f\x0c\xbb\x80\x0d\x41\x99\x28\x4d\x11\xad\xd3\x22\x0c\x2c\xce\x30\xa4\x69\xf2\x70\x5f\x5e\x83\xc9\xbf\x4d\x97\x66\xe6\xd2\x34\xae\xfb\x36\x46\xdc\x07\x4f\x5a\x0b\x14\x49\x69\xb2\x74\x20\xef\x89\x63\x16\x15\xe0\x44\x10\x43\x1c\x6a\xf9\xa0\x8c\x3b\x2d\x7d\xce\x55\x71\xb3\x90\x03\x90\xa5\xc8\x61\xc8\x32\xb6\xf1\x96\x44\xb5\xc8\xca\x6e\x96\x1b\xad\x34\x0c\x45\x09\xfc\xe2\xa4\x7b\x1a\x6c\x29\x43\xe2\x90\xec\xbd\xc7\xef\x81\xa7\x7d\x0b\xac\x32\xc8\xea\x75\x92\xc2\x21\xf3\xad\xe9\x46\x57\x5b\x90\xc2\x4b\x2c\xdc\x23\x65\x39\xe6\x1b\xd6\x55\x6d\x41\x6b\x5e\x30\x41\x1b\x22\x91\x6f\xbe\x26\xd2\x15\xbf\x6f\x61\xf2\x3f\x7e\xf7\xf1\x62\x7c\x3e\x51\x1a\xdc\x08\x8e\x04\x46\xa5\x51\xd7\xa8\xf4\xa5\x96\xf9\x29\x3f\xc9\x13\x83\xea\x75\x79\x3c\x93\xd5\x12\x26\x41\xba\x56\xdc\x7b\xeb\x75\xf4\xbd\xf3\x27\xb5\x0c\x3b\x56\x99\x32\x9e\x02\x31\xb3\x61\x06\x70\xa1\xbb\xae\xa4\x49\xa8\xca\x9a\x51\x5e\x91\xd5\xb4\xda\x4c\xac\xaf\x79\x80\x6e\x5a\x2b\x34\xe7\x51\x59\x8f\x4d\x1e\xcb\xbb\x66\x47\x93\xfb\x22\x56\xe3\xb4\xb4\x2e\x38\x58\x6b\x07\x0f\x32\x18\x64\x4d\x4b\x80\x04\x08\x6a\xb3\xd7\x61\xbc\x30\x2c\x71\x9a\x4c\xb7\x8a\xc7\x38\x09\x9a\xe4\x61\xd7\x1a\x44\x05\xaf\xae\xd0\xc4\x0e\x16\xee\x7b\x38\xe6\x81\x2a\x4d\x19\xcc\x32\x0d\x46\xdc\x4d\xa6\xe3\x77\x15\xd7\xc6\x1c\x8c\x10\xb8\x50\xf6\x04\x3f\x4c\x5d\xd6\xb0\x4d\xa8\xf2\xc0\xc0\x68\xe2\x0f\x0f\x62\x9b\x66\x27\x65\x8d\x5d\x0f\x0e\xb6\xbb\xbc\x0d\xd6\x2a\x0a\xd1\x86\x96\xea\x45\x2b\x76\x8f\x09\x8b\x60\xbc\x0f\x2b\xf6\x54\x4d\x38\x62\x80\x65\xad\xd5\x6b\x1d\xf8\xdd\x6d\x74\x1f\x44\x7e\xb3\x7d\x0a\x7c\x56\x8f\xaa\x70\xa0\x4a\xbf\x95\x65\xd7\x45\x53\x0e\x45\x0f\x64\xce\xa4\x05\x8f\xb4\x42\x03\xd9\xc4\xf7\x54\x3a\x00\x58\x7c\x2b\xb7\x4f\xc8\xf7\xd3\xb8\x2d\xec\xdb\xe6\x03\x7c\x6c\x63\x77\x1a\xb6\x33\x59\x8c\x9b\xf5\x7c\x73\x8b\x6d\x58\xc5\x27\xd4\x34\xb0\xd8\xd6\x77\x07\x40\x1d\x90\xb2\xbd\x34\x62\xad\x43\xab\xaf\xda\xc5\x90\xd0\x6b\xac\x6e\x96\x49\x75\x09\x88\x6a\xf6\x68\x75\xdd\xcf\xa4\xbe\xd8\xd4\xa1\x23\x68\x53\x35\x6d\x50\x74\xd5\xb3\x47\x82\xa9\xb0\xcb\x31\xda\xb2\x74\xaf\xed\xe8\xbd\xbc\x16\x9f\x44\xcc\x00\xfc\x33\x4e\x01\xf2\x9e\x2d\x0f\x64\xce\x7b\x18\xd8\xd5\xcd\x5b\xcb\x69\xda\xda\xf1\x1b\x82\xd2\x21\x15\xbd\xb4\xdf\x12\x36\xfb\x16\x15\x04\xf0\x50\xed\x4b\x99\x41\x72\x82\xbe\x39\x30\x41\xb4\x9e\xf0\x8a\xb9\xd7\xe7\x32\x9c\x8b\xca\x6a\xb0\x3e\x03\x35\xf5\x85\x5d\xf1\x21\x49\x1a\xa7\x40\x13\x8c\x7b\x16\xc1\x4c\xb6\x5e\x35\x59\xc8\xdc\xcd\x98\x77\x5d\x74\x59\xbf\x48\x9b\x01\x59\xbd\x22\x8f\x47\x90\x8c\x7d\x66\x3c\x0e\xaa\xa6\x27\x86\x01\x04\xe1\x43\x79\xcb\x18\xa2\xa1\x62\x40\x9c\x35\x37\x87\x25\x04\x9b\x02\x34\x9e\x75\x5a\x5b\x0f\x0f\x9d\x82\xca\x84\x17\x22\xef\xa4\x73\xc3\xf6\xc0\x85\x06\xa9\x89\x3b\xa8\xcb\xac\x5d\x06\x6b\x2c\x27\x1a\xbd\x10\x8a\x41\xeb\xda\x8a\xd8\x99\xab\xac\x38\x62\x90\x6a\x43\xa3\x76\xb7\x37\x4e\x01\x51\x2c\x5e\x63\xaf\x81\xa4\xb9\xf7\x5c\xcc\x0f\x98\xb9\x58\x4e\x19\x82\x08\x9c\x99\x3a\x1c\xec\x5b\xc9\x6d\xff\x6d\x9c\xe4\xb6\x68\x67\x8a\x38\x1b\xf1\xe5\x1b\x8c\x40\x6b\x38\x54\xa7\xb0\x72\x0f\x88\x63\x7d\x11\x67\x39\x5c\xa5\xca\xb9\x73\x14\xb1\x9f\x2e\x6f\xa6\xb8\x41\x16\x68\x40\xd1\x18\x8d\x84\xc0\x7e\xbc\x1c\x49\xe2\x42\xaf\x98\xf3\x88\xa7\xeb\x09\x59\x3e\xaf\x74\xc9\x04\x33\x2c\x9a\x53\x82\x7e\xd3\x58\x29\x03\x07\x8c\x24\x31\xbb\x7d\xb5\xb8\x95\xcb\x93\x32\xf7\x04\xb1\x92\xc4\xd8\x12\x74\x1a\x0e\x08\xf3\x18\xf6\x17\x62\xff\x22\xb3\x03\xe2\xe6\x45\xc5\x2c\xab\xf2\x66\xe7\xab\x84\x97\xd9\xf8\xa1\x99\x6d\x50\xf7\xa4\x4b\x94\x04\x5a\x22\x52\xce\xa2\x09\x4f\xe1\xba\xa0\x96\xd5\x88\xc5\x72\x27\x03\xa1\x70\x6f\xd3\x50\x68\xc1\x47\xfa\x68\xb6\x8e\x04\x5d\xc6\x25\xf8\x00\x4b\x8b\x54\x08\xf3\x06\x96\xb5\x62\x03\x39\x4b\xe3\x2c\xab\x86\xbb\xe8\xec\x27\x90\x77\x0d\xbf\x7e\x2e\xcf\x66\xd2\x5a\x42\x9e\x75\xdc\x1d\x99\x23\x4f\xee\xdd\xb0\x18\xee\x1a\xe1\x0b\xd4\xb6\x67\x6b\x8e\x45\x94\x42\x3c\x36\x50\x29\x04\x8f\xb1\xdc\xf3\xb0\x72\xf3\xc3\x9e\xbc\x48\x1d\xa2\x57\x49\xdf\xda\x8d\x67\xff\xd5\xd4\x92\xff\x6c\x02\x12\x7a\x25\x08\xac\xe6\x79\x70\x01\x8b\x5e\xe6\x65\x96\xe2\xea\x32\x1b\x06\xf1\x27\xbe\xca\x4c\xc3\xc9\x8d\x0c\x11\x27\xee\x38\xca\x49\x16\xd6\x52\xaf\x4c\x0d\x5a\xed\x47\xd0\x32\xac\x0b\xa8\x03\x1d\x1a\x52\xfc\xec\x33\x0f\x66\xf4\xf2\xdc\x41\xde\xf8\xc0\x89\xe3\x21\xd3\x7e\x64\x69\x8a\x55\x3f\x9b\xd2\xe7\xbf\xdb\x1d\x23\x7b\x59\xe5\x5d\xaf\x5c\xf7\x31\x69\xf2\x4f\xd3\xe9\x55\x95\xa3\x4d\x0f\xdd\xb6\x1e\x01\x49\xa2\x4e\x15\x3c\xdf\x1f\xc9\xbd\xc5\x08\x66\x3d\x75\x5c\x34\x17\xbb\x0f\xb5\xf1\x80\xa7\x06\x64\x8e\x74\xec\x91\x4a\x5b\x08\x95\x9d\x52\x9d\x77\x28\xbd\x4a\x05\x09\x94\x2e\xab\x11\x17\x9d\x11\x0f\x41\xe6\xa9\xe7\xcb\x1a\xc7\xef\xf0\x40\x14\x72\xdf\xe5\x0c\xd6\xa6\x1c\x88\x9c\x07\xd1\x38\x09\x3e\xc8\x24\xf1\xe7\xde\xef\x71\x2a\xc3\x72\x35\x9f\x07\x51\xeb\xf3\x2b\x2f\x9f\x2d\x0c\x97\x7a\xdf\x3c\x5e\x42\xcb\xe7\x5e\xc8\xce\xc5\x9c\x6d\x88\x56\xbf\xf9\xda\x7a\x91\x44\xe2\x62\x57\x58\xc8\x1c\xc5\x4b\xa4\xc3\x5e\xf1\xc3\xf9\x21\x7b\xf3\xfd\x0f\x3f\x9e\x1f\xb0\x37\xef\xc5\xff\xbf\x7f\xaf\xb7\x96\x71\x23\x42\x6c\x80\x2d\xf2\x65\xd4\x15\xb0\xaa\xc1\xb0\x1e\x83\x80\xde\xa4\x6a\x2f\x84\x45\x3b\x47\xc5\xf2\x1e\x22\xd1\x3e\xa8\xc5\xb6\x03\x9c\xbe\x38\xb1\xed\xd6\x84\x36\x4d\xbc\xed\x21\x18\x6a\xda\xa3\x49\xa1\x69\x2d\x27\x5b\x53\x59\x6b\x8e\xb7\xe3\xf1\xda\x5f\x75\x19\x64\xe0\xf2\x23\x33\x38\xcc\xe2\xe8\x21\x98\xe3\x39\x90\x16\x03\xb1\xb6\x3d\xaa\x9b\xf1\xfb\x89\x9e\x6b\xf3\x2d\x8d\xaa\xfe\xa2\x7a\xf3\x35\x81\xee\xe4\xba\x23\xca\x5b\x5b\x11\x12\x7d\x7d\xb4\xb2\x8d\xb7\xf6\x54\xa3\xf2\x9a\x58\xee\xf4\x5b\x0f\x7e\x85\xe6\x2a\xef\xf5\x26\x69\x6a\x58\x4c\x7a\xd1\x72\x41\x5c\xc0\x2e\x39\xc7\xdc\xba\x7a\xa5\xb0\xb3\xbc\x03\x67\xa9\xae\x1f\xa8\xfd\xfa\xcb\xf2\x94\xe0\xa5\x75\xa0\x86\x3e\xa4\x1c\xf0\xc6\xf7\x60\x93\x5c\x9e\xca\xe2\x19\x05\x68\x67\xbc\x3a\xcf\x45\x0f\xf5\xea\x97\xd5\x37\xee\x41\x93\x22\x01\x2a\xee\x62\xbd\x91\x4e\x21\x2a\xdf\xa9\xf9\x86\xdd\xb2\x16\x19\xc5\x3a\x45\x50\xab\x07\x37\x72\xe9\xed\x9b\xb0\x5b\x66\x04\x99\xf1\xba\xd6\xdb\x70\xfb\xb4\xfd\x00\x94\xca\xc3\x60\x92\x17\xcb\xb9\x5c\x83\x9b\x61\x81\xa1\x5b\xb6\xd9\x8c\xb8\xe1\xef\xc5\x68\x2f\xb2\xd6\x72\xfd\xec\x56\x56\x33\x23\x17\x59\x37\x3c\xeb\x6c\x72\x54\x13\x6b\x13\x51\xb5\x5a\xf5\xc9\xc1\xa7\x3d\x3f\xdf\x99\x9d\xe1\xb7\x00\xc9\xa1\xfd\xb2\xee\x40\x95\x08\x5f\x99\xca\x6e\x8c\x23\xc4\x53\x74\x67\x61\xda\x39\xbf\x7d\x49\x5e\x8d\xaa\x3d\x49\xde\xcd\x6f\x87\x92\x8b\x17\xa2\x67\x7a\x51\xf0\x77\x14\xe7\xeb\xd7\xd7\x50\xb4\x91\x6e\x7a\x27\x2d\xe0\xc8\x97\xd0\x12\xfc\x73\xc2\x67\x70\x62\x2c\x8f\xef\xe1\x20\x32\x9e\xa1\x33\x92\x7f\x84\x3a\x30\xc6\x8f\x34\x0a\x45\x27\x41\xc0\x87\xd3\xa4\x0a\xa4\x5f\x5e\xd7\x83\x23\x9f\xf2\x9a\x92\x47\x41\xcc\x4b\xe7\x05\x38\xc1\x68\x51\x5e\x9d\xdd\xbe\x3f\xbd\x18\xe1\x35\xd7\x88\xb9\x93\xb5\x3d\x22\xa8\x38\xc0\xd7\x56\x0c\x2a\x03\x85\x0b\x0b\xf5\x8a\x56\x9d\xd0\xa0\x9f\xa2\xf8\x29\xc2\xd8\x73\x06\xee\x6d\x85\x9c\x78\x18\x7c\x98\x74\xc5\x08\x7c\xc2\x18\x1c\xbb\xea\xb6\x16\xd2\x2c\x0d\xf5\x7a\x69\xb8\x65\x52\x29\xb6\xab\xbb\x7c\xe8\xac\x25\x9a\x96\xf9\xdb\x76\xd6\x20\x34\x41\xe6\x1e\x9e\x86\x56\x99\x88\xc9\x10\x41\x06\x67\xb6\x5e\x21\x6a\x76\xc1\xc2\x5e\x3e\x69\x10\x68\x93\x68\xdd\x54\x94\xce\xcf\x32\x1e\x4e\x67\x79\x17\xce\x52\x63\xf3\xaa\x44\x85\x36\xdc\xf5\x75\xdc\x11\x74\x24\x99\xef\x2c\xef\xce\xb9\x33\xc9\xbc\x45\x0d\x32\xf7\xa8\xe6\x4e\xc0\x95\x07\x2e\x6e\xb4\x3b\x51\x58\xd4\xa4\xa2\x69\xf5\xe2\x58\xef\x63\xf0\x6c\xe5\x11\x62\xe5\xb1\xc4\x0b\x52\xc3\xc4\xdb\x93\x1c\x11\xb7\x74\x4f\x54\x7f\x9b\x14\x19\x73\x69\x1a\x57\x9c\xde\xa5\x49\x13\x1c\x78\x07\x90\x75\x0b\x6e\xa1\x1e\x05\xf1\x6b\xf9\xc0\x3f\x3e\x16\x4f\xd4\x8d\x12\x18\x3b\xa5\x60\x5c\xc3\xd3\x43\x08\x71\x9e\x56\x0e\xe1\xca\xa5\x22\xc8\xb0\xae\xda\xf1\x34\xab\x1a\x26\xca\xe7\xc4\xe2\xd0\x62\x7b\x8a\xac\xb1\x7b\x86\x74\xd9\x1b\x19\xfa\x09\x29\xfe\xe9\x04\xe8\xd8\x5a\xcf\xf6\x9c\x1a\x9c\x4e\x89\x8e\xd6\x62\x73\x65\xbf\x65\x1b\x84\xa8\x8b\x0c\x9b\xab\x27\xf9\x14\xa6\x07\x29\x77\xbc\xf7\x9b\x61\xf0\x9d\x7a\x89\x1b\x35\x77\xd4\x2d\x41\xcd\xb7\x18\x12\x46\x62\x4f\xb2\x0e\x72\xb4\x9c\xc0\x3b\xb7\xbd\x03\x2d\x3a\xe2\x46\x16\x82\x67\x39\xa4\x7c\x3e\x24\x84\xd6\x0a\x63\xaf\x3a\x48\x85\xeb\xe9\x0c\x77\x36\xa8\xa2\x5c\x79\xb9\xc9\x64\x86\x54\xd7\x01\x91\xfb\x72\x45\xa6\xe0\x80\xae\xbe\xa6\xdb\xa1\xd1\xd6\x70\xe3\xfe\x7f\x83\xe4\x9d\x68\xf3\xb7\xab\x9c\x67\x90\x78\x45\x3c\x82\xdf\xc7\x60\xa0\x02\xfb\xd3\xc0\x94\x80\xaf\x07\x25\x7b\xb4\x06\x8f\x7b\x37\x27\xfb\xd2\x47\xb0\xe6\xcf\x8a\xa1\xcf\x31\x79\x44\x2e\xbd\x04\x95\x02\x09\x23\x09\xc3\x99\x99\xef\xe7\x7a\x13\x24\x61\xf7\x58\x1c\xf1\x11\xb8\x41\x88\x0d\x47\x96\x3d\xc5\x29\x9a\x92\x85\xf1\x3c\x30\x6c\x77\xad\x2b\x52\xb0\xd4\x26\xa4\xdc\x33\xb8\x8b\x98\x8a\xd2\xf8\x89\x66\x96\x4e\x75\x72\xbe\xb2\xb7\x10\x20\x55\x26\x61\xb2\x08\xd7\xa0\x2b\x46\xe2\x63\x26\xef\x4a\x15\x56\x49\x23\xe1\x66\x01\x02\x6d\x98\x17\x9a\x91\xc4\xaa\x19\xdd\xe0\x26\x67\x5d\x8f\x88\xa4\x72\x40\xc1\x64\xa4\x68\x14\xd2\x81\xc1\x58\x83\xc8\x5d\x86\xf2\xfa\x82\xb1\x5e\xac\x56\x1f\xbb\x5a\xd6\x28\x3e\x4c\xae\x6f\x4e\x2f\x2f\xf4\x5d\x68\xbb\x80\x3d\x6d\x2f\x0c\x7c\xf6\x6f\x37\x97\x17\x2c\xbe\xff\x1d\xf2\xbf\xa9\xa0\x7d\x35\x15\x73\xa4\x82\xba\xcd\x94\x0d\x5b\x91\x4a\x2b\xf7\xc4\x4b\x85\x54\xb9\xd8\x94\x1f\xac\xe7\x07\x1e\xa0\xa7\x60\x10\x8d\xc2\x20\x02\x97\x45\x50\x6a\x3c\xec\x0a\x87\xec\x1d\x06\xe7\x2d\x53\xd3\x2b\xb3\x79\x51\x49\x4f\x37\xe3\x70\x60\x3c\xc3\x0b\x12\xf9\xb6\xcc\xc6\x6f\x08\xf1\xab\xff\x34\xff\xec\xe2\x12\xbe\xbb\xf2\xa2\xbf\x30\x4d\x21\x9a\x52\xf6\x5c\x04\xbe\x87\x15\xbb\x52\x0b\x96\x9e\x8f\xae\x1c\x85\x53\x66\x72\x6c\xdd\x7a\x6f\x4d\xf9\xaf\xe3\xeb\x8b\xd3\x8b\xf7\x32\x2c\x8d\x5c\x06\xa0\xb3\xa0\x62\x50\xad\xc4\xe0\x59\x51\x5d\xe8\xc9\x9e\x80\x4e\x56\x70\x8a\xb5\x08\xe6\x8b\x70\x05\xae\x56\x33\x51\xc7\x9b\x73\x1f\x49\xfd\xdc\x20\xb0\xf4\x56\xec\x9e\x0b\xd5\x43\xfa\x17\x82\x4d\x19\x74\x2c\xe9\x56\xa9\x5e\xa6\x7c\x06\x1e\xc0\x78\x79\x88\xec\xb3\x05\x0f\x43\x41\x3f\x03\xb7\x62\x88\xdb\xa6\x15\xff\x1f\x53\x08\xf2\x37\x62\xe8\x2a\xa2\x62\x29\xc6\xe8\xea\x22\x86\x52\x26\x63\x29\xd6\xc2\x6d\x94\x7b\xfe\x94\x67\x49\x1c\x6d\xb8\x90\x6e\x0e\x2f\x99\xd3\x4e\x68\x5a\xd1\x5c\x54\xa9\xc2\x09\x49\xb7\x27\xb8\xde\xdd\xb2\x73\x96\xc6\xe5\xe8\xfe\x2a\x4d\x1a\xfd\x03\xf0\x09\xc0\x14\xf5\x71\x9a\x2c\xf0\x8c\x14\x9a\x21\x83\x56\x38\x0e\xe3\xc2\x17\x73\x45\x11\xf9\xe9\xea\x65\xc6\xc4\x96\xd1\xbb\xf7\x32\x31\x7f\x8c\x05\x71\xb8\xbe\x0c\xb9\x3f\xaf\x9c\xe8\x4b\x6e\xe8\x10\x83\x0d\x0a\xae\x59\xbe\xbc\x8d\x6a\xd0\xaa\x87\x98\xdc\xc6\x88\x9a\x6c\xd9\x1c\xd2\x62\x20\x3b\x84\x60\x3c\x5e\x9e\xf3\x65\x92\x57\x0c\x96\xe8\xe3\x20\x43\xd7\x78\xb3\xb6\x76\xfc\x3f\x95\xc5\x48\x3d\x23\x26\xde\xf0\x81\xf3\x8b\x2f\x74\x81\x34\x5e\x95\x49\x36\x36\xbe\x41\xcd\xb1\x47\xb5\xcd\x16\x56\xd1\x12\x0f\xe0\x8c\xd2\xca\x05\x93\x9e\x89\xbe\x55\x3a\xfc\x40\xb8\x4c\x35\x2b\xcb\xc6\x2f\x23\x45\x8d\xe0\x6c\x6a\x24\xcf\xa6\xe2\xad\x97\x0a\x0d\xca\xb9\x4c\x2a\x0f\xb4\x99\xf8\x6e\x51\x61\xf0\x0a\xfd\xa3\xeb\xfd\xd1\xf5\xf6\xd5\xf5\x7a\xcf\x87\x01\x7c\xf5\x1c\xb6\x05\x18\x98\xb1\xf1\xc9\xfe\xcf\x46\xeb\xd4\xc2\x8e\xdd\xf3\xf2\x0b\x80\xb7\xa8\x10\xbc\xbc\xec\xcb\x5a\xb3\x36\x36\x6b\x7a\xa1\x60\x08\x49\x75\xd1\xfd\x3e\x0d\x96\x5e\xba\x42\x47\xab\x19\x38\x1c\xaf\x1d\xf7\xeb\x20\xd1\x03\x2d\x09\xd1\x79\x71\xeb\xa3\x61\xec\x8b\x00\x1a\x6a\x89\xb9\x7a\xa0\xad\x1e\xdf\xb0\x9b\x66\x8e\x54\xb8\x7b\x92\x26\x06\xe6\x8a\x3f\x60\x49\x88\x73\xcf\x97\x9e\x8c\x5c\xb8\x2d\x0f\x76\x70\xc1\x03\xae\xb7\x10\x9d\xa8\x86\x7f\x1f\x32\xf6\x57\xb9\xa6\x2d\x05\x4d\x58\xe4\x3e\x95\x7d\x4d\x15\xaf\xcc\x1e\x30\xb2\x4e\x21\x6d\x32\x7c\x30\x49\x51\x85\xd6\x5f\x3f\x49\x31\x7f\x03\xf3\x7c\x1f\x43\x6f\x88\x8f\xb4\x01\xe1\x9e\x63\x38\x7b\x19\xd0\xf9\x90\x5d\xc2\xb1\xaf\x69\x0a\x58\x06\x73\xf0\xa8\xf7\x0f\x4a\x66\xeb\xa8\x78\x02\xac\x94\x06\xdc\x96\x8c\x63\x99\x3e\xf7\xfd\xd1\xcd\xfe\xe8\x66\x7d\xba\x99\xfd\x3c\xe7\xa5\x30\x2b\x1f\x41\x6c\x22\x19\x45\x6f\x91\xe7\x49\x23\x94\x1e\x93\x41\x6f\xe0\xca\xbd\x56\x24\x6b\x94\xc9\x54\x98\x44\xd5\xbc\xa0\xdb\xea\xfb\xfc\x1e\x58\xd2\xe5\x97\x46\x91\x90\x01\x07\xbe\x1c\x44\xed\xea\x16\xc0\x54\xc7\x1e\x41\x1a\x88\x4e\x27\x84\x14\xeb\x75\xec\x63\x6c\xca\x77\xa7\x67\x13\xec\x26\xdc\xf3\x71\xdf\x9b\xfb\x62\x29\xd6\xe3\xa1\x53\xb0\x46\xf7\x7f\x83\x44\xb4\xf3\x6c\x11\x3c\xf2\xf5\x79\xa1\xda\xf1\x5b\xd9\x56\xd1\x09\x58\x63\xfb\xe5\xfc\xf6\x6c\x7a\x7a\x35\xbe\x9e\xbe\x7e\x77\x79\x7d\x3e\x3a\x19\x4f\xc7\xec\xf8\xf2\x62\x3a\xb9\x98\xb2\x9f\x4e\x4f\x4e\x26\x17\xbf\x6a\x71\xd1\x2a\xdb\x63\xba\xba\x3e\xfd\x30\x9e\x4e\x18\xd2\xeb\x04\x61\x2e\x6d\xcf\xb5\x2d\xbd\x5e\x66\xe0\xdb\x55\xde\x9e\xf3\x3c\x8c\xef\xc5\xfc\xa7\x22\xa2\xfc\x5a\x69\x76\xbf\x94\x46\xb9\xd9\xe1\xe1\xe1\xaf\xec\x97\xf2\x79\x59\x50\x8f\xad\x3f\x45\x6b\xf4\xd2\xb3\x50\x0b\x65\xf3\x35\x91\x2e\xae\x99\x72\xee\x86\x8c\x39\xf5\x03\xa8\x0e\xfb\x38\x65\x79\x5a\xe6\xe2\xaa\x8e\xd3\xd4\xaa\x40\x37\x7f\xed\x04\xb4\xb9\x6f\x22\x43\x33\x58\xf0\x75\x20\xcb\x63\x7d\x43\x6c\xbc\xb5\xff\x00\xa1\xfe\xda\xac\xf1\x8e\x42\x31\x7e\xe2\xfa\x03\xb8\xad\xf7\x04\xca\x56\xc9\x57\x7a\xe7\x59\x31\xb9\x3d\xb9\x39\x35\xc1\x95\xf5\x2c\xf5\xb2\x85\xa9\x5d\xda\xca\x50\x38\x18\x5a\xc4\x2d\x0e\x35\x1a\xd8\x94\x41\x8f\x1e\xc4\xe2\x6d\x42\x6f\x2a\x6b\xcd\x71\x1d\x46\x57\xcb\xa8\xad\x88\x3d\x7d\x1c\x7b\x47\x6b\x03\x1c\x3d\x1b\x7d\x49\x7b\x6e\xe5\x92\xad\xbf\x4e\x69\x2b\x62\x4f\x1f\xae\xd0\x51\xf3\x86\xeb\x75\xc3\xc7\xd1\x17\xb4\xe6\x35\x4b\x0a\x2d\xf9\xc6\x3b\x7b\x8a\x1d\xe3\xc1\x7d\x2c\x60\x4d\xd3\xd4\xbc\x5d\xc0\x9a\xb6\xbf\xce\xa1\xaf\x25\xdf\x5a\x86\xc0\x01\xb3\x4b\x1a\xa8\x6f\xbc\xb7\xa7\x1c\x64\x5d\x93\x73\x5b\x11\x0a\x7d\xbd\x7a\xdb\x7c\x49\xa2\xa9\x1f\x3e\x1b\x6f\xed\xa9\x5a\x5a\x03\xf4\xbf\xf8\x97\xfe\x1c\x06\x06\xcd\xd7\x44\xba\x06\x6f\xa4\xed\x02\x04\xda\x4f\x26\xc4\x4f\x2e\x78\xa5\x0f\x93\xbe\xe3\x6d\xbd\x27\x50\xc6\x40\xdd\x68\x59\x73\x95\xc2\xa1\x4b\xbe\x2a\x2d\x6c\xb2\x45\x5c\x84\x7e\x79\x6e\x03\x49\x62\x0c\x00\xdc\xc8\xd8\xe3\x7c\x34\xf9\xf3\x6d\xbc\xb5\xa6\x2a\x97\x5a\x96\x17\xb8\xd3\x06\xad\x14\xf6\x8c\x59\x1c\x72\xc6\x67\x8b\x58\x2a\xb2\xe5\xa5\x99\x60\x91\xae\x6a\x2e\x8c\x27\xeb\x89\xca\xb0\x14\xee\x82\x85\xbd\x7c\x82\xb7\xd1\xf4\x64\xbb\x80\x3d\xed\x94\xe3\x21\x56\xe2\x05\xfa\x8e\xd9\x5e\xc8\x9a\x07\x04\x27\xd5\xd2\x6e\xbe\xb4\xa6\x19\x44\xb3\x38\x85\x08\xcf\xac\xc8\xbc\xb9\xbe\x69\xb4\xe5\x08\x9c\x94\xc1\xaf\x8a\x3f\x15\x06\xcb\x40\x2f\x4e\x47\x69\x32\x57\xd4\xbe\xca\x50\xe0\xa7\x10\xb6\x1b\xec\x05\x85\x72\x9f\xc5\xd1\x91\x0c\x73\x12\xe4\x8d\x0e\x76\x00\x13\x75\xfe\x31\x5b\xe7\x4c\x82\x22\x32\x85\x92\xa1\x87\xef\x9e\x21\x59\x76\xfd\xfa\xdf\x27\xc4\x55\x55\x57\xbf\x6e\xb4\x15\x21\xd0\x7f\x44\xab\x97\x20\x5a\x88\xcd\x71\x2e\x73\x35\x06\x51\x65\xa6\x65\xe0\x6a\x5b\x91\x8c\x45\xba\x5c\x61\x8c\x1c\x35\xc5\x1f\xbf\xfb\x78\x33\x1d\xbf\x3f\xbd\x78\xff\x71\x7a\x7a\x3e\xb9\xbc\x9d\x96\xf3\x95\xb1\x8f\xf4\x23\x37\x18\xee\xeb\xe9\xed\xd5\x80\xb8\xbb\xc8\x59\xe3\x0e\xbd\x7b\xae\x5f\x5e\x37\xde\x12\xa8\x82\x45\x53\x79\x93\x62\x20\xdf\x5e\x8c\xc6\xa7\x48\xe4\xfe\x48\x3f\x3a\x60\xab\x26\xa6\xd2\xb6\x92\xb6\xe7\x38\x38\x2b\x1a\x34\xa1\xad\xf7\xf6\x32\x80\xf5\x17\xc6\xcd\xad\xf2\x50\x29\x57\x7b\x75\x02\xa8\x9f\x54\x28\x55\xe9\x78\x30\x8a\xaa\x0f\x96\x38\x8a\x28\x84\xf9\xcc\x82\xdc\x14\x33\x92\x56\xd9\x1e\x53\x0c\x49\x0b\xf4\x5c\x37\x5e\x5b\xd3\x5d\x9a\x23\x60\x6e\xbe\x26\xd2\xd5\x77\xc8\xad\xf7\xd6\x94\x8d\x5a\x95\xa3\x46\x15\xc5\x11\xbb\xf7\xb2\xf5\x01\xac\xbe\xc7\x99\x8a\x52\xf8\x19\x64\x68\xbc\x24\xd0\x84\x93\x7e\x98\x32\x4b\x7b\x48\x75\xac\x25\x7a\xa0\x51\x9b\xb3\xaf\x68\x8d\xc5\x14\xed\xc0\x2d\x98\x41\x3d\xfa\x8a\x89\x74\x4b\x21\x0a\x0f\xfd\x77\x77\x4c\x98\x21\x76\x9d\x86\x61\xbb\xf1\xd6\x9a\x2a\x28\xf5\xd5\x89\x3e\x9e\xf7\x1b\x66\x7e\x7d\x51\x7b\x7e\xa2\x9e\x9e\x43\xe3\x25\x89\xa6\x01\x76\x0f\xa4\x59\x3d\x01\xc7\xfd\xaa\x79\x0f\x62\xd5\x91\x1c\xa9\xd8\xa3\x54\x99\x63\xf4\x00\xb6\x0a\xd8\xd3\x96\x76\xd7\xfa\x2b\x97\xed\x02\xd6\xb4\xff\x66\xce\xac\xbf\xf9\xda\x9a\x2e\x2c\x8d\x32\xd0\xc0\x13\x26\x32\xa8\x45\x03\xba\x0f\x22\x30\x53\x09\x32\x26\xd6\x38\xcf\xa4\x80\xb8\x11\x21\x61\x54\x41\xc0\xf5\xdd\xb6\xbd\x10\x81\x47\x39\xf1\x66\xc6\xfc\xbd\xda\x72\xae\x9c\xf4\xdf\x54\x5f\xd0\x9e\x97\x39\x2c\xb3\x73\x18\x66\x65\x70\xa8\x27\xbc\xf9\xde\x9a\xb2\x65\x84\x97\xde\x81\x5d\xb6\xae\x7b\xb7\x18\xe8\xaf\x83\xad\x28\xdb\x44\x8a\x19\x24\x40\x8c\x75\x74\x96\x01\x82\xb2\xd8\x87\xdb\x1e\x22\xbc\x76\x49\xe3\x13\xd7\xab\xc9\xad\x65\xc8\x1c\x8c\xab\x6c\x7b\x21\x2a\x8f\x51\xa7\x5d\x42\x7b\x31\x2a\x9f\xce\x4f\xe2\xf4\x25\x30\x17\x8b\x9e\xf2\xc6\x6b\x7b\xba\x81\xb1\xc3\x06\x8e\xbd\xd4\xe8\x53\xeb\xea\x20\x5b\x8b\x0a\x60\x38\x0c\xd3\x94\xa2\x71\xe9\xa2\xaf\xa1\x6c\x3c\x44\x40\x8f\x3f\x03\xdd\xdc\xf1\x4a\x19\x53\x9c\x18\xad\x5a\xb6\x0a\x50\x68\x1b\x96\x62\xd7\x05\x58\x1e\xbd\x1a\xc9\x16\x4e\x83\x04\x92\xcb\x9b\x46\xc9\xe6\x7b\x2a\x65\xe6\xa1\xb5\xff\x1b\xb1\x4b\x94\xf9\x1a\xbb\x58\x19\x2a\x58\xf3\x06\xa7\x6e\x2d\x9f\xe6\x4b\x7b\x9a\x98\x8b\xc1\xea\x86\xa0\xf3\x62\xc0\xd8\xe9\x0b\x15\x60\x11\x16\xd8\x18\xf4\x05\x2d\x1f\x43\x49\x6b\xb1\x8a\xa8\xeb\xa4\xae\xa5\x84\x3d\xf5\xed\xb0\x66\xb5\xc9\x46\xcf\xd2\xb2\x9a\x3d\x0e\x43\xd8\x84\xc2\x29\x6c\x82\xa8\xa5\x1f\x8e\xcd\x97\x24\x9a\xfa\xd9\x6e\xe3\xad\x3d\x55\xb8\x15\x33\x90\xdd\x78\x4d\xa0\x6b\xd0\x0c\x9a\x2f\x49\x34\xab\xe0\x72\x46\xe2\x2d\xa5\xac\xb9\x3c\x76\xb8\xb6\x6e\xbd\xb7\xa6\xfc\x84\xa6\xd7\x2a\x00\xb2\xbc\x8c\x40\xb7\x03\xf4\x3e\x42\x1f\x65\x2d\x53\x4a\x55\x6b\x3c\x2b\x83\x6a\xb5\x72\xd2\xaa\xbe\xc8\xf4\x1a\xca\xe8\xfe\xeb\x57\xf6\x0a\x63\xd2\xc9\x16\x3b\x92\xf1\x58\xca\x7c\x4b\x37\x39\x98\x8e\x7e\xfd\xaa\x4f\x00\xd4\x93\x1a\x05\xf5\xf1\xbb\x32\xce\x4f\x12\x98\xf0\xb4\x97\x73\xe2\x64\x8e\x41\x62\x28\x49\xe2\x56\xa6\x3d\x67\x0b\x1e\x26\xec\x97\xe3\xcb\xf3\xf3\xf1\xc5\x89\xde\xa0\xda\xaa\x0e\x0d\x41\x11\xe5\x97\x0f\xca\x8f\x27\x13\x54\x4b\xf7\x15\xbd\xc9\x91\x6d\x35\x12\x0e\x69\x4a\x57\x86\xd8\xe9\xb2\xbc\xb3\xa8\x41\xe1\x7e\x12\x64\x9f\x6e\x61\x2e\x95\x09\x70\xd5\x13\x15\x87\xcb\x04\xc2\xb2\x22\x09\x8b\xd0\x0a\x4a\xa1\x8c\x66\x4e\xc6\xb2\x14\x8e\xdb\x56\x30\x2a\x83\x6d\x19\x0d\xe8\xf8\x5d\xf9\xa1\x9b\x79\xfa\x31\x34\x50\xcd\xf1\x36\x93\xc9\x52\x65\xe2\xe1\x75\x70\x20\x63\x4f\xda\x23\x73\x62\x9b\x00\x12\x85\xa5\x28\xb1\xac\x11\xc0\x05\x8a\xd0\x14\xe1\xc0\x01\x92\xaf\x9a\x0f\x99\xfb\x13\xa4\x60\x7f\x17\x4a\x9f\xba\x2a\x5e\x95\x74\x6a\x32\xa1\xeb\xac\x42\xe1\x7f\xce\x97\xcd\x31\x21\x1e\x58\x8c\x25\xab\x6a\x24\x1c\xb1\xcf\xc3\xe9\x2a\x01\x8a\xe5\xcf\xd6\xf4\xf4\x46\x54\x74\x22\x14\x8c\x97\xa5\x41\x80\x62\xd1\x61\xc3\x6e\x51\xa3\x0f\x77\xc8\xda\x94\xc6\xf3\xd4\xe4\x48\x63\x5b\xad\x0f\x8e\xac\x98\xcd\x38\x37\xa9\x91\x76\x95\x28\x18\x9a\x16\x95\x6c\x59\x64\xd2\x93\x96\x65\xa8\xbb\x60\x7c\xde\x42\x4c\x37\xa8\xdd\x99\x70\x39\x12\x1a\x12\x6b\x6f\x8c\xc3\x61\x23\xd8\xb7\xd2\x2a\x53\x30\xd5\x23\xdf\xbe\x92\x33\x8b\xd8\xe4\x9f\xc1\xd6\xf8\xeb\xd7\xf3\xc6\xc1\xc0\x41\xdd\xc0\xae\x51\x8e\xb5\x1a\x0f\x1e\x54\x61\xb5\xb2\xb2\x5c\x99\x08\x7a\x1d\xd0\xb2\x7a\x55\xae\x55\x07\xac\x7e\x59\x8b\xc1\x2b\x2f\xe2\xe8\x2d\x18\x1b\x94\x55\xc6\xd2\xc8\xbd\x43\x03\xa7\x4a\xb6\x2f\xa4\xb6\x07\x26\x00\x49\xde\xdd\x94\x4b\x8f\x9c\xfb\x31\x7b\x66\xf9\x68\xed\x65\xdd\x75\x0f\xd4\x97\x1c\xa5\x53\xdd\xa8\x73\xc6\x92\x6c\xe7\xc1\xa4\x55\x9d\x21\x10\x60\x4f\x38\x91\x4e\x18\x1d\xfd\x87\x4c\x82\x88\x2f\xdf\x58\x1f\x0e\x2b\xbd\xae\x45\xab\x8b\xd3\xfa\x9b\xa6\xba\x37\x5b\xf0\xd9\xa7\x5a\xc0\x02\x79\x6a\x6a\x54\x2d\xf7\xca\x9e\xd2\x2e\xa5\x9a\x03\x8a\x17\xaa\x7a\x62\xdf\x24\x07\xae\x78\xf8\xb9\x3e\x01\x6d\x75\x59\x93\xbc\x83\x90\x6d\x95\xe3\x7f\xfc\xfa\xff\x05\x00\x00\xff\xff\x7f\x3f\x25\xcb\x2f\xf4\x02\x00") - -func cf_i18n_resources_ja_ja_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_ja_ja_all_json, - "cf/i18n/resources/ja_JA.all.json", - ) -} - -func cf_i18n_resources_ja_ja_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_ja_ja_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/ja_JA.all.json", size: 193583, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_pt_br_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\x4b\x93\xe4\xc6\x95\x28\x08\xef\xbf\x5f\x81\x5b\x77\x51\xc5\xcf\x32\xb2\x48\x4a\x6a\xbb\xb7\xda\xc6\x7a\xa2\x32\xa3\xaa\xb2\x95\x99\x91\xca\x47\xa9\x75\x59\xb4\x22\x32\x80\x8c\x00\x0b\x01\x80\x78\x64\x32\xc9\xae\x36\xeb\xe9\x85\x6c\x16\xb3\x1a\xbb\x9b\x59\x49\xad\x85\x8c\xd7\x8c\x2b\x4e\x6f\xb4\x8d\x3f\x36\xe7\xe1\x8e\x57\x00\x0e\x87\x03\x91\x55\x52\x53\x66\x62\x45\x46\x00\xe7\x1c\x3f\xee\x7e\xfc\xf8\x79\x7e\xf1\xff\xb3\x2c\xeb\x7b\xfc\x0f\xfc\xef\x91\xe7\x3c\x7a\x66\x3d\x7a\x13\xbc\x09\x2e\x8f\xce\x9e\xbd\x09\x1e\xed\xc9\x5f\xd2\xd8\x0e\x12\xdf\x4e\xbd\x30\x90\x8f\x1c\x1e\x1d\x4c\x2b\xcf\xac\x43\xc7\xbb\xf1\x5c\x84\x71\x63\xfb\x89\x8b\xdf\xbf\xdf\x6b\x41\xf0\xbb\x30\x8b\xad\x7f\xbc\x98\x9f\x5a\x49\x1a\x7b\xc1\xd2\x4a\xee\x83\xd4\xfe\xd6\xf2\x12\xcb\x0b\x6e\x6d\xdf\x73\xf6\x2d\xeb\x2c\x0e\x23\x37\x2e\xfd\x94\xae\xbc\xe4\x99\x65\x2d\x6e\xac\xc4\x4d\x27\x71\x16\x04\xf0\xea\xc4\x0d\x6e\xbd\x38\x0c\xd6\x6e\x90\x4e\x6e\xed\xd8\xb3\xaf\x7d\x77\xb2\x8c\xc3\x2c\xb2\x1e\x7f\xff\xe6\x51\x60\xaf\xdd\x37\x8f\x9e\xbd\x79\x04\x60\x33\xf8\xb4\xb7\xfd\xd5\xfb\xc7\xca\xa1\x7e\xbc\xc4\x3e\x38\xcf\x93\xd4\x5e\xfe\xd5\xf0\x7c\x37\xc4\xf6\xe0\xf9\xff\xdf\xba\x5c\xb9\x89\x0b\xc4\xc4\xb7\xde\xc2\xb5\x22\x1f\xc6\x69\xad\xec\x5b\xd7\xb2\x03\xcb\x4e\x92\x70\xe1\xd9\xa9\xeb\x58\x8b\x30\x49\xf7\xad\x83\xd8\x05\x1e\xc0\x58\xed\xfc\x0d\x2f\x80\x41\x04\xf0\xe1\xce\xf3\x7d\xf8\x6b\x01\x5c\xc1\x41\xf2\x1b\xad\x1c\x24\xc4\x96\xe3\x06\x21\x42\x6f\x40\x9f\x44\xee\x02\x46\xb1\x20\x38\x49\x99\x94\x3b\x2f\x5d\x01\x0a\x77\xbd\x6f\x1d\xdd\x34\x51\x12\xde\x30\x05\xe9\x7d\xe4\x22\xcf\x17\x48\xb5\xeb\xec\xc1\xb3\x08\x8c\x29\xbd\x76\x99\xd8\xd8\x75\xf6\x1b\x59\x97\xc6\x99\x8a\x73\xd3\x28\x82\x89\xb7\x63\x00\xac\x94\x43\xd3\xc8\xf7\x16\xf0\xf7\x6d\x08\xf8\x3c\x18\x82\x13\x1a\xca\x24\xc4\xf8\xfd\xf7\xfb\xf0\xcf\x29\x4c\xfe\xfb\xf7\xd6\x9d\x9d\x48\x12\xac\x2c\xc1\x69\x11\x8c\x5f\xaf\xed\xc0\xb1\xbe\x82\x87\x0f\xf8\xf3\xfb\xf7\x5f\x75\x10\x39\x16\xe8\x1e\xe3\x39\x0d\x2d\x3b\xf2\x2c\x37\x70\xa2\xd0\x0b\x52\xdc\x10\xed\xeb\xa5\xeb\xf1\x1e\x78\xcf\xc3\x2c\x75\xad\x34\xc4\x25\x90\x05\x6b\x3b\x8a\x60\x90\x30\x38\x58\x8a\x16\x2d\x88\x20\xf5\xef\x2d\xf1\x3d\x3c\x06\x4b\x0d\x30\x8b\x69\x0c\x03\x15\x8d\xe3\x81\xee\x31\x1e\x3c\x0a\x2d\xeb\x0a\x76\xf1\x63\x10\x2b\x6b\x3b\x7e\xe7\xa6\xb0\x91\x60\x23\x4c\x12\xeb\x62\x76\xfe\xfa\xe8\x60\xf6\x18\xb1\xdd\x7a\xee\x1d\x6c\xb9\x64\x11\x7b\x11\xa2\x4b\x70\xa7\x78\x81\xe3\xdd\x7a\x4e\x66\xfb\x62\xf7\x85\xb8\xa7\x96\xde\xad\x1b\xc8\x9d\xa5\x1a\xf1\x43\x22\xef\xcb\x93\x69\x92\x78\xcb\xc0\x8a\x43\xdf\x4d\x58\x6a\x3c\xc6\x75\xcb\xf3\x00\x24\xc7\xb0\xd0\x51\x0a\x87\xf1\x72\x82\x0f\x3d\xb6\x70\x6d\x37\x3f\x93\x44\x30\x26\x7e\x4a\xc1\x0d\x52\x39\x08\x6f\x60\xfb\xae\x75\x93\x05\x9b\x3f\x6f\xfe\xc3\xa5\x8d\xd3\x89\xdc\xed\x83\xba\x2f\x2f\x68\x86\x10\xfc\x8b\x4b\x3b\x5e\xba\x69\xbe\x7b\x69\x72\x52\xfa\xce\x0a\x60\x8a\x08\x5b\xe7\x10\xaf\x52\xcf\xf7\xbe\x6b\x05\x19\xd9\xb1\x0d\x93\x7d\x03\x12\x2f\xb6\x5c\x00\xb9\xf9\x33\xec\x5e\xff\x36\x1c\x61\x00\x6d\x84\x03\x23\xbb\xc9\xde\x06\x42\xa4\x32\x31\x0b\x3b\x86\xd5\x07\x70\xec\xc0\xfb\x0e\x48\xde\xfc\x69\x28\xd1\x99\xd8\x17\x7e\x08\xc7\xbc\x35\xb1\xad\xe9\xd9\x91\x35\x99\x24\xef\xbc\x68\x92\x24\xfe\x84\xd4\x04\xa2\xf2\x31\xe0\xa5\x47\x51\xc6\x29\x9e\x82\x31\x27\x59\x14\xc5\x6e\xc2\xba\x84\xe5\xc6\x71\x18\x77\x0e\x3c\x93\xf3\xa5\x4b\x4c\xa6\x43\x0c\xf1\x0e\xc8\x89\xbd\x35\xcd\x33\xc8\x3e\x24\xc7\x80\x5f\xf0\xe9\x39\x9c\xca\x70\xd0\x9c\xd8\x81\xbd\x04\x95\x69\xc2\xca\x86\x4b\x7b\x72\x4d\x5f\x92\xb8\xbc\xe6\xc7\x2c\x7b\xb1\x08\x33\x38\x06\xf0\xe7\xc8\xbe\x47\xd5\x09\xc4\xc9\x4d\xa8\x38\xe7\x9a\x91\x78\x30\xeb\xae\x05\x7f\xb9\xc1\xc2\xa3\x15\xb0\x08\x41\x5b\x83\xe5\x0b\x34\xa7\x59\x6c\x23\xe8\xd0\x72\x09\x7a\xbc\xb6\xc5\x8e\x86\x9f\x23\x7b\xc9\x3f\x1a\x1d\x80\xf0\xe9\xe0\xc5\xdb\xd3\xe9\xc9\xcc\xb2\x33\x90\x4d\xa8\xd1\xfd\xef\xee\xb7\xf6\x3a\xf2\xdd\x7d\x94\x17\x6f\x1e\xbd\x79\xf3\xe6\x51\x04\x9a\xcf\x5d\x18\x3b\xf8\xf9\xcd\x23\xeb\x09\x48\x50\x1b\xd4\x9a\x6f\x32\x50\x9c\x40\xd3\xbc\xc1\x35\x06\x67\x4c\x60\xc9\x07\x3f\x51\x8d\x5f\x07\x63\xe2\x06\x2b\xbb\x82\x0e\xb9\x02\x9b\x18\x54\x02\x38\xd6\x12\xd0\x60\xe0\x55\x8b\x1e\xfb\x64\x37\x03\x5f\xdf\xe7\xc3\x41\x22\x70\x1b\x89\x01\xc3\x14\xe4\x3f\x09\xa1\x6e\xb3\xcc\xfa\x44\x3d\xf3\x9d\x28\x3d\x18\x0e\x0f\x8a\x51\xe6\x83\xe6\x55\x8e\x3f\xb0\x1c\x17\xf2\xec\x93\xa1\xb3\xbe\x08\xa3\xfb\x49\x02\xb7\x08\x38\x2c\x2f\xe6\x57\xe7\x07\xb3\xc9\xf4\xec\xcc\xba\x9c\x9e\xbf\x9c\x5d\xd2\xc7\x2f\x26\xa1\xfc\x73\x7e\xfe\xf2\x4b\xf8\x3b\x91\x7f\x5f\x9c\x4d\x0f\x66\xf8\xcd\x24\x08\x27\x20\x0d\x50\x57\xfb\x52\x8f\x03\xbb\xc5\x6b\xc2\x09\x96\x48\x4f\xc2\xb5\x97\xe2\x72\x8e\x71\x7a\xc4\xc6\xe6\x99\x46\xb1\xc7\x0f\x81\xe6\xe7\xc6\xf6\x02\xf4\x69\x17\x34\xa9\xc9\x24\x87\x41\x4a\x7d\x14\x87\xeb\x28\xa5\x45\x72\x1d\xa6\x2b\xcd\x25\x51\x42\x6f\x03\xfe\x6c\xf3\xc7\xd8\xc3\x0d\x4f\x73\xce\xd3\xef\xde\xb8\x69\x06\x2b\xa2\x4a\x06\x50\x41\x02\xc0\x2d\x13\xe2\xc5\x9b\x3f\x5a\x49\x08\x3a\x9d\x97\x6e\xfe\x38\xf1\xc3\x64\xf0\x4a\x11\x12\x1b\xe4\x6f\x68\x3d\xa9\x0f\x18\xf4\x27\x60\x96\x95\xc5\x3e\x72\x29\xbc\x4e\x6d\x78\x16\x8e\xb1\xc0\x9d\xa4\xde\xda\xdd\xe6\xa1\x96\x80\x68\x44\x49\x43\x03\xe6\x06\xee\x02\x84\x67\xb6\xb6\xad\xab\xf3\x63\xc0\x04\x04\xdc\x86\x8b\xcd\xff\xb2\xa2\xd0\x71\xf1\x19\xa0\x42\x3c\xc0\x3c\x74\x50\x6e\x84\xd6\xe6\x2f\x70\x03\x0a\x07\xca\x0c\x41\x59\xb6\xbd\x89\x27\x91\xb1\xcc\xec\xb3\x50\x94\xa8\x87\x0b\x4f\xe5\xbd\x53\x9f\x98\x1d\x8a\xd0\x2e\xcc\x0f\x2e\x49\x95\x04\x45\xf6\xaf\x7e\x75\x17\x9e\x1f\x5a\x4f\xd8\xa4\x70\xdf\x22\x62\x80\x26\x50\x26\x33\xdc\xcf\xc9\x18\x8c\xf8\xd5\x2f\x82\xd5\x2f\x71\x0d\x08\x43\x06\x70\x61\x4b\xb6\xc0\xa3\x61\x8e\x75\x04\x41\x11\x65\xc9\x0a\x14\xb6\x33\xfe\xeb\x8b\xc9\xb5\xf5\xfc\xea\xe8\xf8\x10\x64\xf6\xaf\xe9\x2b\x14\xdc\x0b\xeb\x60\x7e\x72\x32\x3d\x3d\xc4\x3f\x1c\xeb\x70\x7e\x32\x3d\x3a\xc5\xcf\x37\x16\x7c\x7b\xf4\x62\x76\x71\xf9\xf6\x6c\x7a\xf9\x4a\xf3\x34\x91\x28\x55\xd8\x00\xd9\x3c\xc7\xb6\xf9\xbf\x4e\x8f\xe6\x8c\xef\x60\x7a\x72\x74\xfa\x6a\x3e\x39\x9c\x4f\x24\xea\x79\xdb\x61\xa2\xbb\x2d\x88\x9e\x41\x83\xe9\x4b\x59\xe7\xec\xcc\xe9\xc2\x6b\xfb\x70\x60\x15\xf2\xda\xf7\x92\x14\xaf\xbb\x64\x52\x99\x38\xae\x0f\x3a\x34\x5a\x5b\x52\x7b\x89\x9a\xbd\x5d\x98\xa9\xee\x62\x2f\x4d\xe1\x42\x2c\xec\x05\xaf\x0f\xa6\x67\x6f\xc5\xcd\xfa\xc2\x2a\x59\x0e\x2d\x69\x39\xa4\x1d\x6e\x07\xf7\x70\x06\x66\xb0\xc2\x4b\x06\x86\xa4\xfd\x2a\xff\xd1\xd2\x39\x90\xd3\xc2\x8c\x30\x29\xd9\x13\x83\x1b\x6f\x99\xc5\x84\x88\x44\xd2\xda\x85\xd3\x0a\xad\xb6\x30\x5c\xba\xde\xb0\x59\x37\xbc\xfe\xda\x5d\xe0\xa5\x62\x02\x57\x06\x77\xff\x4d\x50\x5a\x28\x59\x04\x77\x20\x00\x2a\x4c\x8f\xb0\xcc\xb5\xed\xb4\x68\x3b\x6e\x63\xf6\x8d\x07\x5c\xa1\xeb\x87\x17\x90\x49\x79\x20\xf1\xfb\x16\xe1\x42\x53\x6b\x64\xa3\xd5\x94\xa7\xa6\xf4\x1e\x63\xb4\x03\x9c\x40\xb4\xf8\x5e\x83\xe6\x82\x36\x2c\x98\x99\xd8\xc5\xd5\x71\x5b\xbc\xca\xf4\x75\x31\x02\xb7\xdb\xdb\xcb\xf9\xdb\x17\x47\xc7\x33\x31\xd6\x19\x4b\x46\x5c\x46\x5b\x24\x3e\xa3\x27\xbe\xa7\xff\xc2\xff\xde\x3c\x5a\xf8\x19\x5c\x24\xe3\xb7\x01\xe8\x12\x09\xb0\xae\xf8\x8d\x7f\xc6\x5b\x1f\x7e\xfd\xab\xbd\xca\xf7\x6b\x77\x1d\xc6\xf7\x6f\xd7\xd7\xf8\xdb\x67\x9f\x7e\xfe\x4b\xf9\xeb\x7b\xfa\xf0\xbe\xfd\x8a\x9c\x7d\xfa\xe9\xa7\xff\x7d\xd7\x2b\x67\xb4\x85\xf3\x40\xeb\x66\xfc\x25\xb3\xa3\x15\xa3\x5e\x30\x2d\xeb\x45\xbd\x5c\x78\x45\x94\x97\x4c\x8f\x73\x68\x87\x0b\xe9\x99\x60\x8e\xe4\xe4\xb5\x17\x38\x39\x1f\xf3\x53\x5f\x88\xdc\xb7\x47\xa7\x17\x97\xd3\xd3\x83\xd9\x7f\x62\xe1\xa4\xcf\xa0\xa1\x42\x2b\x72\xe3\xb5\x97\x24\x78\x74\xe1\x82\x7a\xf3\x28\x76\x6d\x67\x12\x06\xfe\x3d\xdc\x04\xd4\xf2\xe7\xe7\x35\xf3\x9f\x74\xcd\xec\xfc\xa0\xfb\x38\xa5\x16\x7b\x63\x73\x16\x0b\xce\x5a\x67\xc7\xd3\xd3\xbf\xa2\x75\x38\xfe\x32\xd4\xe3\xd3\x5f\xd7\x0a\xfc\xa0\xa2\xee\xe7\x85\xf6\x9f\x67\xa1\xf5\xba\x24\xc6\xcb\x69\xe6\x78\x69\x88\xfe\x9f\x73\x79\x4e\xa3\x43\x89\x9c\x6a\x21\x7a\x00\xc9\xd9\x43\xf6\xa1\xd8\x8d\xc2\x38\x4d\xd4\xf6\x83\x0a\xc8\x29\xc2\x09\xad\x24\x64\xd3\xb0\xef\x7a\xe8\x45\xb2\x36\x7f\xa8\x79\x90\x5c\x9e\xa0\xcd\x4f\xb1\x17\x26\x96\x63\x23\x94\xc2\xf3\x68\x6c\x6c\x88\x4b\xde\xad\x23\xb8\x75\x57\x5d\x68\x68\xfb\x4a\xf6\x60\x59\xfa\xb8\x73\xf0\x87\xc5\xca\x0e\x96\x22\xf4\x66\x8f\xbe\x49\xdc\x14\xc3\x6f\x02\x07\x17\x30\xdd\xf7\xbb\x87\x5f\xf2\xa8\x85\x80\xd4\xa9\x39\xd5\xa4\xe5\x4b\xa2\xc6\x8d\x83\x4f\xd8\x3e\xda\xd1\x63\xc2\x1e\x22\x4b\xa4\xd3\x98\xcd\x0c\xe4\x66\x5b\xda\x49\x1a\x26\xa6\xfc\x38\xc3\xb5\x9f\xac\xc2\xcc\x77\x68\x8b\x58\xdf\x79\x11\x6d\x83\xbd\xc2\x68\x5e\xfe\x12\x4d\x12\x96\x1f\x2e\x6c\xdf\x72\xbc\x18\x98\x04\x2b\x70\xdf\x3a\x0b\x13\x8f\x36\xac\x97\xc0\xcf\x11\xfd\x75\xeb\x92\x1b\x00\x06\x89\x83\x4a\x13\x90\x02\x5e\x18\x7b\xe9\x3d\x73\x11\x9e\x4c\x42\x0a\xa0\xb9\x89\xc3\x35\x80\xbc\x73\x93\x14\xb1\xad\xbc\xe5\xca\x55\xc5\x46\xe1\xde\xb4\xd1\x8a\x1a\xc2\xf0\x6f\xc9\xa0\x9e\x90\x39\xdd\xb2\xe3\x6f\x32\x8c\x24\x02\x72\xf7\xc8\xbc\x8e\x03\x20\xab\x6a\xfd\xc7\x30\xc3\xaf\x70\x04\xbc\xc0\x78\x48\x3c\x10\xf6\x6c\x6f\x7e\xc0\x27\x82\xcd\x5f\xd6\x6e\x1c\xd2\x48\x3c\xf8\xf7\x9b\x4c\xcc\x81\x2b\x86\xe3\xd8\x0e\xad\x55\x78\x7c\xe1\xdb\xa0\xe2\xa2\x29\x13\x16\xab\x13\x5a\xb0\xbe\xc9\x94\x0c\xe8\xe1\x0f\x1b\x9e\x46\x51\x10\xc6\x06\xf1\x54\x38\x51\x68\x7b\x5b\x67\x7e\xea\xa1\x58\xb1\xa3\x28\xb7\x4d\xc3\xd2\xf5\x6e\x80\x63\xaa\x80\x4f\x94\x48\xb0\xee\x5c\x6b\xbd\xf9\x0b\x81\x80\xd5\x64\xe7\xa1\x57\x6c\x6e\x86\xe1\x4a\x50\xa1\x59\x60\x28\x7c\xba\x40\x43\x79\xb1\xd9\x5f\x63\x58\x8b\x1f\x2e\x61\x61\x0b\x49\x91\xef\x21\x0c\x94\x4b\x2c\x58\x33\xe4\xa7\x27\x03\xbb\x7a\x00\x35\xd0\x47\x01\x1d\x1a\xb4\x53\x24\x86\x42\x5e\xb8\xc5\x49\x22\xe4\x49\xc0\x0e\x78\xb6\xa9\x0f\x1a\xde\x21\xac\x3a\x9f\x02\x17\x9b\xbc\xf0\x34\x35\x3c\x46\x3a\x31\xf2\x11\xbb\x44\xa6\xbe\xd4\x6c\xc0\xb5\xe5\x8c\x2f\x4d\xa1\xd0\x14\x60\x70\x80\x91\xc2\xfd\x2a\xec\xa9\xca\xd3\x41\xe3\xd7\x10\xa0\xf8\x8d\x1b\xb0\x15\xd3\xc5\x30\x01\xe1\x58\xc9\xa3\x97\x34\xa7\x5b\x5f\x6e\x02\x15\xe8\x6f\xc4\x63\x7d\x91\xc5\x49\x98\xe4\x1b\xdf\x41\x4d\x00\xe4\x05\xfa\x96\x06\x4e\x3f\x29\x1a\xac\xcc\x38\xac\x36\x18\x5c\xa5\x8e\x52\x29\x70\x39\x90\xd4\xc2\x00\x42\xdc\xd3\x71\x6c\xdf\xf3\xa6\x2e\x29\x0b\xa8\xf9\x24\xa8\x3c\x71\x70\xd8\x35\x07\x1b\xc2\x64\x66\xbe\xdb\x61\xaf\x06\xe2\x58\x4c\x16\x4e\x16\x60\x01\x3a\x21\xa5\xc0\x94\x0f\x08\xda\x43\x94\x8b\x82\xf6\xb0\x2e\x38\x99\xf8\x79\x2e\x47\x51\xf6\x92\x2a\x27\x5c\x99\xe4\xbd\x44\x69\x94\xc6\xde\x77\x24\x50\x70\x00\x70\x34\xf1\x68\x88\x7c\x78\x25\x00\x12\xec\x04\xb0\x2c\x63\xdb\xd4\x8e\x3d\x74\x1a\x18\x02\xa9\x86\xa5\x99\xa0\xf1\x0d\x9a\x0d\x86\x4b\x8f\x3f\xb7\x13\xd7\x9a\x0b\x05\x3c\xe1\x6b\x39\x7a\xd0\xf1\xc0\xc3\xcd\x41\x3a\x15\xbe\x99\x7c\x93\xd9\xb1\x6b\x5d\xc7\xf6\xe2\x1d\x9e\x92\xf8\x63\x39\xb0\x78\xe5\x01\x79\x42\x93\xc7\x07\x63\x17\xd8\x1f\xb3\x7f\x36\x15\xa3\x00\xc4\x42\xed\x7c\x4d\xba\xe6\xd7\x09\x88\x55\x1a\x9e\x70\xba\xb1\xc6\xf9\x85\xd0\x0f\x0b\xed\xf2\xcd\x23\x60\x63\x1a\x2e\x42\x9f\xcd\x32\xe9\x22\x42\xa5\xbe\xf8\x19\x86\x09\x72\x9a\x56\x15\x3f\xf1\xd9\xa7\xfb\x9f\xff\xf2\x97\xfb\x9f\xed\x7f\xf6\xdf\xaa\x4f\xb2\x40\xa3\x67\x7e\xf1\x8b\x4f\xff\x4e\xd8\x75\xa4\x2e\xfa\xa5\x6a\xa1\xfe\x3c\x9d\x7f\xc5\xd3\xd9\x67\xdf\x92\x36\x00\x37\xc2\xf0\x8e\x4e\x06\x74\xb8\xdb\x32\xf4\x54\x5e\xb7\xf8\xcb\xf6\x28\x52\xf8\xea\x24\x4c\x52\xd4\x8a\x17\xf4\xba\xe3\x25\x51\x18\x6c\x7e\xbc\x75\x39\x02\x1b\x94\x2d\xf8\xaf\x8d\x72\xa6\x1d\x68\x1f\xaa\xbf\x98\x78\xd6\xe9\xd5\x49\x7e\xe3\xbb\x40\xef\xec\x3b\xeb\xf0\xe8\xe2\xd7\xf8\x69\x6d\x9d\xcc\x4e\xe6\xe7\xbf\xc3\xcf\x81\xf5\x6a\x7e\x71\x89\x9f\x22\xba\x14\x72\x6c\x10\xbc\x76\x40\x8f\xa6\xd6\xe5\xd1\xc9\x6c\x7e\x75\xd9\xe1\x6f\x45\x8c\xbf\xb9\x3c\x9c\x1c\xce\x26\x88\x74\xf3\x7f\x9c\x1e\x1c\x4d\x05\xda\x57\x87\x87\x39\xd6\xcd\xff\x7d\x7e\x34\x2d\xf0\x4a\xa7\x72\x24\xfd\xb3\x5a\xe8\xf5\x59\x61\x3b\xb8\x41\x81\xe5\x8a\xd9\x69\x7a\x46\x1f\x83\x13\xba\x1c\x0d\xee\x7e\x8b\x7e\x55\x8c\x39\x20\x5d\xa9\x1d\x5f\xf7\x1b\xfa\xd8\xf1\xf2\xe2\xa3\x65\xfa\x5e\x06\xf7\xb7\xe3\xfd\x1a\x6e\x1d\xb0\x99\xe0\xbf\x22\x6d\xc1\x1e\x8c\x31\xc4\xb0\x77\x1d\x8c\x78\x30\x1b\xe3\x73\xd7\x51\x7a\xdf\x8e\x85\x31\xdc\xda\xdf\x79\xa6\x2c\xc4\xc9\x90\x96\x1a\xb8\x7f\xed\xc1\xe5\xd5\x45\xe9\x59\x89\xc5\x02\x7d\x6d\x7f\xb9\x6f\xad\xd2\x34\x7a\xf6\xf4\xe9\x7d\x98\xc5\x6f\x71\xd6\x30\x38\xa4\x9d\xb6\x51\x81\xf7\x1f\xd3\xad\xed\xf9\x24\xb7\x40\x54\x23\x3c\xd5\x36\xd0\x79\xa7\x37\x05\xa0\x44\x83\xa4\x43\xb3\x03\x5c\x54\x79\xdc\x6b\xfb\x1d\x9c\x39\xa0\x5e\x5b\x5e\xca\x97\x6f\xe6\x4d\xe4\x67\x4b\x81\x52\xa1\x23\x8e\x05\x57\x7f\x24\x88\xee\x06\xc3\x19\xda\x89\x0a\xf0\xf6\x0d\xfa\x3d\x68\x96\xb0\xcc\x8d\x56\x61\xec\xae\xc3\xdb\xdc\xb2\x20\x22\x34\x90\xe6\x04\xef\x8e\x9e\x9b\xb4\x63\xef\xf1\xaa\x7e\xb4\xfb\xa3\x33\x62\x1b\x9c\xa7\xf2\xe8\xcf\xf9\x20\xcf\x7d\x31\x07\x80\xd9\xb1\x53\x5b\x91\x52\x32\x04\x96\x36\xc5\x9f\xe4\x62\x89\xc4\xaa\xe2\x9e\xa1\x78\x52\x1b\xdb\x34\x4f\x9c\x42\x3b\x35\x28\x76\x21\x99\x9d\x64\x2c\x2b\x2b\x08\x07\x7e\x98\x39\xd6\x0b\x1c\x67\xdc\x2e\xbf\xae\xe0\x22\x72\xe3\xc6\x1c\x95\x4e\x81\x95\xbe\x27\x22\x2c\xa5\x52\x40\xd7\x1a\x86\xbd\xf4\x62\xd2\x18\x5a\x60\xeb\x0f\xe0\xf0\xf0\xe9\x39\x28\x01\xaf\xd1\x7c\x7e\xf5\xf2\xe8\xb4\x95\xbe\xfa\xcf\xba\x06\xa0\x2d\x0c\xd6\xf9\xec\x6c\x7e\x71\x74\x09\x8a\x47\x2b\x32\xbd\x97\x7a\x8c\xf2\x35\xaa\x3f\x87\xed\xf8\xe0\xf7\xcd\xef\xa7\x87\x73\x13\xe0\xc7\xa0\xe1\xb4\x43\xae\xfe\xaa\x0f\xf5\xec\x28\xcf\x88\x6b\x05\x7e\xc9\xd6\x01\x1f\x53\x39\x06\xe2\xb0\x9e\xe4\x27\x4f\x02\x47\x8f\x1d\x79\xfb\xa5\xb0\xc7\xf6\xc8\xe2\x32\x09\xda\x30\x8c\x28\x7c\xd6\x4d\x83\x43\xa9\x2f\xcf\x86\x22\xe2\x8c\x49\x6f\x26\xfe\x7e\xdf\xee\xf7\x2a\x8f\x5e\xf5\xda\x48\x74\x58\x4f\xf0\xf7\x5b\x37\xc6\x78\x04\xf9\xf3\x6b\xfe\xf3\xfd\x7b\xbd\x49\x6a\x82\x8a\x20\xf0\xec\x12\xfc\x53\x00\x36\x1f\x88\x09\x37\x07\xb2\xf2\x4c\xb1\x2d\xcf\x8e\x8f\x0e\xa6\x97\x47\xaf\xe7\x46\x9b\x73\x81\x57\x5f\xbc\x72\x8b\xdc\x7a\x2b\x41\xd3\x9d\x97\xde\x5b\x94\xdb\x9d\xd0\x35\x02\x06\x20\x03\x92\xdf\x2b\x52\xce\xe7\xd7\x29\x99\x96\x96\x71\x16\x85\xe4\x17\x49\x5c\x34\xfe\x06\x9b\x3f\xcb\x1c\x85\x6f\x01\x3a\xdb\xf6\x29\xae\xb8\x15\xb2\xc1\x00\x44\xa2\x7a\x6d\x00\x48\x7f\x05\xc9\x10\xea\x83\x85\x1b\xd8\x25\xf2\x5b\x00\xeb\x13\xef\xc0\x35\x8d\x32\x03\x4b\x3a\x1d\x29\x39\xed\xa7\xab\xd6\x3b\x3d\x29\x40\x17\x4d\x2c\xf3\x82\xd1\xe0\x13\x45\x0a\xfc\x9e\xb0\x68\xa3\xc1\x31\x86\x3b\x3d\x65\x58\xe4\x86\xca\xdc\x1a\x6e\x46\x0d\x2d\x45\x22\x05\x98\x0b\x80\x61\x53\x23\x4d\xf5\xe4\x6f\x18\x37\xba\x40\xe1\xbb\x79\xbc\x14\xdf\x3d\x65\x8b\x36\x7e\x49\x76\x6b\xf1\x35\x2f\x80\xab\x7c\x9e\xf6\xf7\xdb\x35\x29\x39\x38\x5c\x07\x34\xb4\x9c\x08\x1a\xdf\x16\x19\x81\xdd\x44\x86\xcc\x26\xad\x11\x22\x97\x4c\x0b\x29\xfa\x5c\xf2\x3d\x18\x53\x35\xbf\x5d\xaa\x9d\x62\x4d\x5c\xbb\xc8\x47\xaa\x36\xe0\xfb\x9c\xdf\x0d\x6b\x86\x0d\x77\x07\x2f\xa4\xaa\xf7\xd4\x46\x48\xfb\x96\x75\xee\x52\xae\x01\x02\xa8\x81\x95\x4a\x61\x07\x78\x9c\x0d\xc7\x8d\x71\xaa\x84\xc7\xc1\x63\xbb\x1e\x3e\xc0\x61\x04\x08\x05\x36\x8b\x82\xf7\x7f\x23\xc3\x1a\x38\x8f\x09\x65\x77\x96\x06\x42\x49\x40\x4c\x20\x8a\x4b\xbe\x7a\xf0\x92\x7a\x0c\x83\xfc\x5d\x98\xc1\xf3\x68\x70\x4d\xe3\x7b\x2b\x0b\x04\x75\x38\x92\xb6\xb7\x88\x68\x18\x77\x20\x87\xc2\xee\x3f\xf1\x78\x79\xd4\x5e\x70\x1b\xbe\x53\x71\x10\x08\x78\x15\xde\xa1\x07\x78\xcf\x82\x4b\xbe\xb4\xfd\xde\x78\x31\xdc\xda\x6e\x32\x0c\x3c\x01\x85\x1e\x8e\xdf\x54\xe0\xb4\xbc\x75\x84\xf7\x09\xb8\xd1\x55\x68\xc5\x9f\xe8\xf6\x82\x7f\x6c\x53\xcc\xb4\xb5\x2f\x9e\xaf\x98\x99\x3f\xf3\xd2\x84\x97\xda\x17\x20\xbf\x54\x03\x81\x0c\xed\x22\x1e\x07\x8d\xe8\xf2\x0a\xca\x31\x2a\x5e\x9e\x3b\x01\xef\x80\x88\x6c\xbf\xed\x5f\x86\x0e\x9c\xb6\xe8\x2a\xe4\xf8\x0a\x87\x5c\xc4\xd2\x8d\x9a\x5b\xdc\x30\xcf\x1d\x01\x0b\x1b\xb3\x0d\x1c\x75\x6c\xd2\x4e\x4a\xc9\xf0\xff\x61\x64\x1a\x30\x19\x16\x4d\xb2\x2a\x9d\xbf\x3e\xac\xc8\x8d\x53\xd2\x1f\x30\x62\x64\xf3\x07\xab\x79\x94\x7f\x2c\x06\x29\x82\x26\x30\x7d\xb5\x9a\xef\xbf\xa3\x79\x03\x75\x75\x67\x33\x87\xb0\x8b\xb9\xa3\x71\x3d\xf0\xf4\x6d\x8d\x6e\x47\x13\xd8\x3c\xd8\x71\x26\x31\x41\x7f\xaf\xef\x92\xaf\x3f\xaf\xd0\x42\xba\x92\x62\x8e\xec\xf5\xf5\xe6\x87\x35\x9b\xd4\x58\x5d\x4b\xf0\x55\x60\x8a\x6d\xc4\x6c\xd6\xbb\xd6\x19\x88\xa4\x6b\x57\xd4\xb6\x70\x31\x6c\x09\x98\x2a\xff\x16\xd5\x97\x94\x55\x3a\xd0\x48\x54\x2d\x63\x21\xe3\x88\x28\x61\x5b\x04\x59\x39\x32\xff\xd0\xbf\x45\xc5\x54\x44\x5b\xc9\x00\xac\x2c\x4f\xcf\x34\x19\x09\xe8\x72\xed\xba\x48\xe5\xc7\x5e\x30\x49\xe5\xf0\xd8\x05\x22\xdc\x8a\xf0\xae\xdf\x6e\x6c\x3d\x0d\xe1\x05\x74\xc8\x17\x55\x98\x38\xee\x69\x61\xaf\x23\xcc\x96\x8e\xbd\xa5\x08\x19\x31\x24\xa9\xa2\xb2\x56\x9d\x35\x0a\x75\xac\x20\xa7\xaa\xf2\x92\x69\x18\xdf\x35\x53\x7a\xb6\x34\x79\x64\xd5\x5d\x18\xbf\xa3\x18\xb5\x77\x5e\x14\x15\x57\x00\x0a\xfb\x44\x7a\x54\xf3\x54\x81\xc6\x9c\x83\xa7\xae\x6d\x7f\x65\x3b\x21\xc0\xf4\x96\x41\x18\x93\x46\xbf\x88\xbd\x7c\xad\xf1\x56\x18\x6b\x00\x42\xca\x70\x92\x60\xca\x9a\x3f\x4b\x21\x7e\x48\xc5\xe6\x1a\xb8\xe2\x28\xb8\xc5\xe2\x5f\xbe\xcd\x7b\x40\x05\xb2\x0f\xed\x70\xc5\x25\x03\x17\x2e\x4e\x0c\xf6\x73\x3c\x1b\xf8\x03\xaa\xc2\x22\x61\x6f\xbe\x1f\x2e\xc9\xcf\xdd\x4e\x71\xe0\x7e\x0b\x1b\x74\xab\xd4\x08\x41\xda\xfc\x84\xa0\x84\x81\x17\xe4\x93\x87\x42\x94\x2c\x28\xeb\x52\xd0\x0a\x22\x31\x23\x3f\x69\xb7\x9d\xd5\x7e\xd5\x87\xca\x25\x98\x6c\x76\x50\x8b\x1b\xb0\xea\x64\x10\xb5\x93\x84\xf3\x5b\xde\x7c\x75\x04\xbc\x26\x21\x7c\x8d\x65\x72\x58\xd6\xd1\x55\x83\xa6\x47\x2d\x55\x4d\x40\x98\xd2\x87\xd5\x9e\x18\x20\xda\x40\xba\xb8\xe5\x12\x8b\xb8\xda\x14\x6e\xc0\x3c\x0c\x2c\xb7\x1c\xc8\x38\xb2\x01\x94\xf1\xe1\x34\x8c\x30\xbe\xd1\x8f\x46\x14\x88\xff\xd7\x18\x94\xdf\x31\x65\xdb\x8f\xf5\xc4\xc3\x42\xd3\x27\xeb\xc7\x39\xfc\xcb\x76\x13\x64\x00\x7e\xc3\xd5\xaf\x44\xc1\xae\xc2\x76\xc2\x5f\xcf\xe3\x65\xd5\x7a\xc2\x5f\x93\xe9\x22\xb7\x9f\x54\x6a\x7e\x29\x4d\x28\x62\x77\xa0\xc0\xcd\xb9\x5a\x10\xc5\x8c\x95\x45\x06\xea\xa4\x15\xf6\x94\x2a\x69\x25\x8b\x4a\x95\x38\x69\x53\x69\x27\xef\xa1\xf9\xf8\xe1\xd9\xb5\x13\x9e\xd4\xac\xaa\x00\x5e\x7e\xf3\x96\xbe\x61\x3e\xe5\x4b\x28\x11\xf3\x53\xf0\x48\x4a\xc7\x94\x0c\xf1\x5b\x66\x59\x5d\x1e\x91\x75\xb6\x66\x9c\x6d\x22\x46\xe8\xdd\xf9\xb2\x91\x04\x15\x2c\xab\x11\xb4\x6d\xd0\x1d\xcc\xb2\x92\x0c\x06\xc0\xbf\xc1\x0f\xe2\x90\x2f\xb3\xca\xd8\x56\xb9\x33\x44\xfa\x63\x4d\x53\x0c\x65\x21\x9b\x03\xca\xf4\xbb\xc0\x0f\x6d\x07\xf3\x13\xed\xf8\x9e\xa3\xe5\xc8\x87\x4f\x9e\xde\xc0\x4d\x31\x32\x09\xcb\xc2\x29\x87\x35\x06\x4c\xc3\x11\xac\xbd\x65\x6c\xb3\xe9\x59\xe8\x5a\x47\xa2\x60\xeb\x61\x51\x15\x52\x3d\x2b\x97\xe8\xf3\xc6\x85\x4a\xb0\xe2\x5e\xa0\x7a\x51\x1d\xa4\xe4\x39\xa3\xb8\x4d\xd8\x1a\x64\x53\x3a\x83\x0f\x3c\xc1\x5f\xe1\x65\x58\x5e\x84\xbf\xaa\xeb\x8e\x5f\xc9\xa8\x93\x9b\xd8\x95\xa1\x9b\x79\x69\xda\xaf\xb6\x49\x96\x6f\x95\xea\xe7\xda\xa2\xdc\x2e\xc6\x84\xa7\x68\x84\xc2\x10\x1f\x98\x8b\x35\xa8\x1a\x18\x19\x88\xf9\x01\xde\x0d\xd9\xb1\xe0\xaa\x1d\xbc\xe3\x0b\x37\x15\x1e\xe6\x7a\x80\xea\x15\xf0\x37\x34\x3a\xfd\x59\xcd\xd0\x8e\x98\xe2\xad\x8b\x63\xf8\x61\x10\xc1\xa4\x52\x4d\xac\x9d\x67\x59\xca\xaf\x96\x2a\xf8\x04\x6c\x8d\xa8\x54\x01\x1b\x46\x16\x46\x27\xa9\xb6\xae\x24\x02\xd6\xbf\xe1\xc2\x2e\xe1\x02\x75\x15\x8b\x30\xb9\xdf\x46\x78\x89\xc6\x42\xd5\x1c\x16\x85\x17\x94\x6b\x7b\xf1\x8e\x8c\xf7\x21\x5c\x64\x26\x76\x89\x71\xfb\xb2\xf2\x3a\x15\xd2\xfc\xaa\x5c\x4b\x12\x6b\x26\xfc\x62\x21\x5d\xb9\xf4\x97\x8b\x95\x91\xf8\x7b\x64\xb8\xfc\x2e\x14\xdf\xc1\x11\x21\xbf\x4a\xc4\x57\x9c\x34\x41\x5f\x7e\x25\xca\x95\xe5\xd4\x70\x56\x49\x95\x1c\x15\xb3\xfe\x66\x87\xaa\x3d\xdf\xcf\x8f\x8e\x8f\x8f\x4e\x5f\x62\x21\xa4\xe9\xcb\xd9\x79\x2b\xb3\xe0\xb7\xd9\xe9\xe5\xcc\x3a\x9c\x59\x2f\xa6\x97\x57\xe7\xd3\x13\xf8\xd3\x24\xc4\x85\xaa\x3f\x51\x08\x6e\xfb\x45\xf2\x60\x7e\x72\x76\x74\x3c\x3d\x9c\x5b\xb3\x13\x93\x0b\x65\x5e\x61\xaa\xdd\x69\xdf\xf4\x88\x3e\x7c\x0f\xe3\xd9\xeb\x1a\x99\xc6\xed\xf0\x35\x1b\x14\xc8\x70\xd6\xa4\x47\x6d\xfe\x30\xcc\xa4\xd6\x4a\x18\x5a\x65\x65\x1c\x5f\x3d\xbe\x40\x54\xa2\xc6\x6a\x77\x68\x97\x95\x61\x08\xe5\x4a\x4b\x1d\x03\x72\x15\xe3\x41\xac\x14\x79\x26\xbc\xfa\xa2\xbc\x5b\xec\xae\xb9\xd0\x5d\x62\x39\xf8\x34\x26\xa5\x15\xa1\x09\x18\xc3\x5a\x24\x75\x7d\x20\x46\xc8\x70\x86\x87\x67\x44\x29\xca\x61\x3c\x4e\xd4\xea\xdf\x77\xc7\x19\xe4\x8b\x15\xdf\xd9\xfc\x3b\xe6\x9a\x59\x4e\xc9\xe2\x3e\x3c\xda\x00\x69\x43\x0e\x5f\xbb\xe9\x9d\xeb\x06\xa8\xaa\x55\x55\x02\x92\x72\x55\xe3\xa9\xe7\x14\xb6\xd3\x76\xd2\x37\x3f\x22\xed\xe8\x34\x4e\x63\xb7\x01\xae\xdb\x6a\x52\x1d\x30\x0c\xbd\x1b\x9a\xe3\xde\xd8\x99\x9f\x26\xd5\xcd\xa6\x1b\x23\x23\x26\xa5\xcf\x45\x0c\x6d\x97\x91\xed\xc4\xd2\x4c\x58\x0f\x01\x1a\x1a\x43\xd3\x6f\xf8\xf9\xae\x7a\xc8\x11\x8f\x1d\x36\x54\x0c\x99\x77\x55\x9b\x4a\x3b\x4e\xe4\x8c\xb6\x29\xa3\xc4\xaa\x7c\x97\xb6\x92\x86\x4c\x1a\x27\x9c\x66\x04\x33\x47\x3b\x43\xc7\x64\xa4\xde\xb5\x5e\xcd\xc5\xd1\xb9\x37\xd4\x04\x20\x59\x57\x8e\xd6\x2a\x53\xa5\x39\xd4\xfc\x75\xe1\xea\x68\x7e\x5f\x9f\xaa\xcc\xf3\x9d\x08\x75\x55\x80\x95\xff\x21\x67\xa3\x12\x2c\xdf\xae\xa3\xa9\x60\x90\x97\xc6\x58\x62\xab\x20\xeb\xfa\xe7\x94\x40\x06\x3a\xe9\x9e\xdf\xa7\x68\x4f\x02\x75\x00\x05\xaa\x74\xf6\xda\x81\x2c\x26\x21\xab\x1e\x64\x81\x47\xaa\xcc\x1a\x6e\x2b\x19\xa8\x12\x58\x39\xd3\xf7\xde\xb9\xd6\xc9\x9e\x75\xf2\x7c\xcf\x7a\x49\xb5\x2a\x5e\x3e\x6f\x1f\xc4\xce\x10\x69\x8f\x35\x2f\xba\xee\x38\x13\x8e\x8c\x99\x50\x92\xd0\x17\x18\xa7\x2f\x6b\xc4\xc2\xda\xfc\x12\x6f\x5b\xb3\x7f\x9a\x9e\x9c\x1d\xcf\x38\xf7\x13\x9b\x0f\xd4\x5e\x3a\x8b\xe1\xa2\x9d\xba\xe7\xf8\x59\xa4\x3e\xad\xef\x23\xfe\x52\xa6\x3f\x3d\xc5\x0f\x4f\x15\xc9\x87\x1f\x01\x45\xfd\xb9\x17\x79\x4c\x53\xf7\xa8\xb6\x9f\x34\xc0\x16\xe5\x75\xcf\x34\x10\xd2\xc3\xfd\x23\x2e\x2a\xe5\xf8\xaf\x2e\x66\xe7\xf4\xd7\xd9\xf4\xe2\xe2\xb7\xf3\xf3\x43\x64\x7e\x37\x6e\x7e\xf5\x6a\xf3\xaf\xe7\x47\x73\xeb\x62\x76\xfa\x6a\x5a\x7d\xaf\xf7\xd0\xa9\xf6\x9b\xec\x83\x26\x55\x0f\xd1\x87\xeb\x62\x76\x70\x75\x7e\x74\xf9\xbb\xb7\x2f\xcf\xe7\x57\x67\x9d\xc4\xa9\x40\xbd\x3c\xbf\x3a\x9b\x63\xee\xeb\xc5\xec\x25\x5c\xb7\x31\xa5\x64\x28\xd1\x4a\x62\xad\xf9\xf9\x4b\x8b\x0a\xf7\xeb\x91\xdd\x4d\x2e\x41\x9c\x01\xc8\xcd\xef\x4d\x0c\x05\x3d\x6b\xed\x7d\x41\x15\xa8\xd0\x2e\x71\x39\x3b\xbf\x78\x3b\xbd\x78\x8b\x29\xeb\xdd\xbb\x61\x2c\xf0\x86\xe3\x12\xbd\xdd\x46\x58\x47\x2d\xa0\x46\x5e\x47\xf2\x98\x6b\x3f\xb5\x55\x8f\xf6\xc6\xb7\x58\xb9\x8b\x77\x13\x8e\x45\xc1\xe4\x6e\x51\x89\xbc\x13\x79\xe7\x7b\xfd\x29\xa1\x42\x3a\xd8\xd3\xc2\x4e\xee\x83\x05\xb5\x4d\x00\xf0\x32\x99\x1c\x56\xca\xdb\x93\xa3\xd3\xab\x4b\x4e\x8c\x9f\x00\x5d\x78\xc9\x06\xe9\x66\xfd\x33\x63\x80\x7f\xb1\x62\xc3\xd3\x34\x7c\x8a\x3e\x14\x7a\x6a\x11\xfa\x18\x09\x57\x7a\x8a\xbe\xa6\x32\x4c\xae\xf5\xe4\x78\x7e\x30\x3d\x9e\xc1\x4f\x07\xc7\xb3\xe9\xf9\x27\xdd\x8b\xb9\x95\xc8\xd9\x09\x2c\x82\xe3\xa3\x93\xa3\xcb\xd9\x64\x76\x32\x21\x4a\xe7\x0a\x4a\x45\x49\x94\xa7\x68\xa4\x78\x2a\xc2\x46\x9e\xfa\xe1\xb2\x8d\x6a\x73\xd9\x2e\x0a\xcb\xc1\x19\x31\x91\x75\x97\x44\xa5\xf8\xc8\x7a\x2a\x19\xc6\xe6\x50\x7c\x86\x0a\xed\x91\x45\x34\x7f\x7c\xff\x7e\xed\x2b\x4a\x6b\xa8\x10\x99\x23\x31\x1c\x66\xbe\x29\x8a\x2a\xf8\x54\x22\xc1\xa2\x8c\xc4\xa3\xf9\x29\xf2\x97\x23\xdd\xff\x79\x32\x71\xbc\x04\x3f\x69\x8f\xad\x09\xba\x28\x82\x40\x08\x36\xbf\xdf\xfc\xdb\xbc\x03\x43\xff\x8d\xc1\xb8\x9d\x70\x8d\x3d\x45\x50\xe6\xeb\xee\xd1\xa6\x17\xa9\xf0\xff\x70\x6a\xf0\x1a\x06\x10\x75\x69\xd8\x7a\xdc\x14\x2f\xbb\x80\x7f\x73\x35\xbf\x9c\x52\x79\x8a\x4b\xf8\x70\xfc\xb6\x28\x8d\xe1\x59\xf2\x44\x29\x7d\x19\x5b\x20\xe5\x85\xe0\x48\xb6\x8e\x1e\xde\xa5\x54\x2f\x64\x12\xd9\x5e\x7e\x58\x4d\x28\xe4\x56\x7b\x6d\x7c\x48\xca\x4c\xb9\xc9\xf2\x9b\x94\x12\xb1\xa8\xaa\x55\x3e\x74\xc7\xce\x70\x84\x2a\x92\xaf\xb2\x36\x58\xa6\xd4\xaa\xd5\x2b\x59\x1d\x13\xd5\x86\xb7\xe7\x57\xc7\xb3\x0b\x2a\x94\xa9\x3b\x04\x0d\x75\x6b\x7a\xfe\x9b\xab\xa3\xd7\xf4\xed\xf9\xec\xe5\xf9\xf4\x62\x82\xb8\xc6\x18\x97\x4e\x6d\xd4\x16\x05\x89\x0b\xae\x4c\x5f\x5e\x68\x4f\xd6\xe8\xe8\x06\x8e\x9b\x5c\x6c\x93\x34\x7c\xe7\x06\xd6\xf1\xf4\xf9\xec\xd8\x3a\x3b\x9f\xbf\x3e\x3a\x9c\x9d\xc3\x1e\xfa\xf5\x4c\x5b\xce\x35\x81\x9b\xbd\x9c\x9d\x1e\x4e\x09\xe0\xec\x70\xbe\x05\x70\x28\xe5\xd7\x31\xa0\x89\x73\xe6\x3d\x3f\x07\xf0\xe7\xdb\x17\x29\x4c\x1f\xec\x3b\x0a\x01\xfa\x60\x7e\x7e\x3e\xbb\x9c\x9f\xf3\x52\x04\x34\xb8\xc1\xaa\xd7\xad\x2a\xf4\xa1\x43\x7a\xe7\xde\x6f\x2f\x06\xf9\xc5\xaf\x67\xbf\x6b\x5b\x18\xad\x7d\x11\x76\xd2\xc0\xa1\x2f\xd1\xff\x09\x3b\x3c\x18\xb0\x68\x60\x0b\x88\xee\xf2\xfb\x5b\xe6\x1c\x05\xb1\xeb\x7b\xe7\x1a\xfe\x83\x1f\xc5\xec\x55\xe1\x57\xc0\xe3\xac\xf5\x01\xf7\x2f\x4f\x31\x1e\x9f\x2c\xd9\x4f\xd3\x75\xf4\x54\x7a\xed\xde\xf2\x04\xee\x63\x2d\xb4\xbe\x3b\xf6\xe7\x9d\xf3\xf3\xce\xf9\x79\xe7\x54\x77\x8e\xf1\x69\xb4\xb2\x63\xd7\x91\x57\x97\x7e\xf7\x9d\xad\x77\x47\xba\xf2\xb0\xdf\x8b\x95\x65\xec\xcd\x29\x9a\x72\x7e\xc3\x5f\x4d\x48\xf3\xd7\x57\xc2\x08\x98\xd4\x98\x25\xb8\xc1\xd7\x5f\xee\x52\x5d\xbd\x8a\x34\x5e\x3c\xca\xe5\x04\x1f\xe4\x7a\xf4\x21\x29\x33\x9d\x71\x8a\x50\xdc\xd2\xe6\x74\x47\x2c\xde\x2e\xab\x6a\xe3\x90\x34\x91\x55\x4c\xdb\xbb\x05\x50\x75\xc6\xf3\xd9\xe1\xec\xf4\xf2\x68\x7a\x4c\x8c\xf2\xad\x8b\xdf\x5d\x1c\xcf\x5f\x4e\x0e\xcf\x61\x33\x4d\xa4\x77\xc5\xc2\xe2\xec\x49\xc2\x19\xda\x20\x96\x51\x8c\x52\x09\x51\xd8\x43\x18\xf7\x66\xfb\x85\x64\xa5\xcc\xbf\xa4\x5c\x2b\xa0\x88\xdc\xc4\xee\xdd\x6e\xa3\x68\xd2\x24\x99\xba\x56\x12\x15\x7b\x05\x19\x7b\x05\xf2\x3d\xc6\x8e\x02\xb1\x44\x75\x03\x95\x94\x73\x4b\xc2\x36\x0d\x05\x0d\xa5\xf8\x9c\xad\x80\xd3\x81\x34\xf7\x3a\x1c\x85\x04\xb7\x64\x05\x54\x2d\xac\xeb\xfb\x89\x73\x3d\x59\x63\xcd\x32\xe2\x91\x0c\xac\xd8\x2b\xb5\x16\xed\x0d\x30\x06\xd9\x58\x74\xff\xf2\xad\xe4\x3e\xf1\xc3\xe5\xb3\xa7\x4f\x4b\x45\xa0\x04\xa3\x8f\xbd\x20\xfb\xf6\xe9\x89\xbd\x78\x36\x80\x6c\x64\x93\x24\x9c\xf8\x42\x91\xc6\xc4\xaa\x62\x14\xcf\xf0\x0f\xee\x13\x5a\xea\xf0\xf1\x5b\x2f\x70\xc2\xbb\xc4\x12\xe5\x04\x90\x1e\x77\x10\x03\xbf\xc7\xce\xb0\x39\x31\x6f\x10\xef\x1b\x49\xd0\x1b\x24\xa9\xd6\xbc\xf6\x19\x7f\x21\x08\x83\xcf\xef\xf3\x45\x28\x69\x3b\x0b\xef\xdc\xf8\x62\xe5\xfa\xfe\x30\x1e\x0d\x25\xec\xb1\x86\xc7\xee\x67\x49\xf2\xb7\x23\x49\x7a\xa0\x0c\x81\x4e\xdf\xd5\x14\x25\x86\x10\xcd\x76\xf9\xf8\x72\x6b\x80\x1e\x85\x85\xa2\xc8\x61\x00\xea\xc9\x2d\xae\xf6\x7f\x02\x7d\xe4\xf2\xd5\x9c\xca\x21\xbf\xb2\x5e\xcd\xa6\x87\xb3\x73\xd1\x46\x77\x7a\x49\x65\x91\x27\x61\x96\x46\x59\x6a\xa1\xf2\xaf\xa1\x0f\x35\x61\xd8\xfc\x9f\x97\x73\xee\xce\xfb\xca\x3a\x98\x3e\x9f\x6d\x7e\x3f\x3d\x7e\x35\x6f\x46\x23\xcc\x90\x43\xf4\x1b\x51\x64\xa1\xd4\xa3\xf8\xc6\x9a\xc4\xdd\xb4\x17\xef\x6d\xbf\xd2\x97\xd3\x0c\xab\xd1\xa5\x02\xb0\x75\x69\xd1\x78\xdf\x90\x3b\xd5\xcb\x47\x2f\x9a\x6a\x57\x8f\x91\xe8\x11\x3e\x94\x5e\x94\x34\xbf\x63\x4e\x41\xb4\xb2\x03\xd8\x91\x5c\x92\xa3\x27\x25\xaa\x77\x4d\x29\xaa\xde\x27\xf4\xa9\xe1\xf7\x0e\xb6\x5f\x33\x25\x84\x3d\x20\x4d\x3e\x94\x5e\x74\xe5\x60\x1a\x1c\x28\x23\x51\xaa\xf6\xa2\xf4\x21\x56\xc3\x65\x32\x16\xc9\xad\xca\x49\x1f\x6a\xb5\x80\x0c\xa4\x51\xe1\xcc\x30\x20\x56\xe9\xcb\x18\x97\xee\x66\x57\x86\x09\xcd\x35\xcf\xc5\xdb\xc3\xd9\x5b\xe9\xb9\xb8\x18\x99\x68\x0d\x93\xeb\xcd\x76\x0c\xa1\x02\x58\x61\xeb\xea\x3b\xea\x07\x21\xc5\x98\x5f\x0d\xe6\xb4\x7e\x73\xdb\x68\x53\x1b\x6b\x36\x2b\x86\xb5\x1e\x44\xd5\x6c\x68\xa3\xd1\x22\x8e\x87\x92\x5d\x6f\xa2\x15\x87\xd9\x0b\x86\x29\x85\x55\xa3\x54\x1f\x7e\x55\x0d\x52\x43\xf9\xc5\x81\x2d\x13\xd1\x77\x6b\x72\xe3\xdb\x4b\xeb\xc5\x0c\x53\x17\x67\x7a\x51\xab\x3d\x20\xf4\xa6\x8e\x6f\x95\x03\x88\xd3\x07\x60\x40\xdb\xad\x7e\x68\xaf\x78\xd8\x5c\xcd\xc6\x5e\x58\x69\xd2\x03\x61\xfe\xbc\x39\x4e\x73\xb6\xef\x82\xdf\x65\x98\xdd\x51\x95\x2d\x4f\xf7\xc7\xea\xf9\x6e\x52\xba\x61\xc9\x3e\x3d\x85\xcd\xbb\x7b\xdf\xe6\x30\xf2\xf7\xb8\x47\x0f\xc0\x91\xad\x77\xcc\x27\x49\x54\xd3\x14\xa1\xf4\x54\xe1\x38\x8c\x2d\x8a\x88\x9c\x20\xb1\x4f\x2f\xe7\x4f\x45\x3d\x7f\x32\xc4\xe7\x91\xf9\x94\x93\xbd\x72\xf3\x0a\xb3\x54\x54\x20\xaf\x62\x51\x2e\x36\x2b\x0a\x5a\x60\x2d\x8b\xa2\x84\x33\x56\x15\x78\x3c\x89\x1f\x63\x2d\x01\x79\xc5\x6f\x0a\xf3\xaf\xd1\x27\x0b\xd5\x2f\xbd\x74\x95\x5d\x53\x4c\xff\xe2\x66\xe2\x7e\x1b\xb9\xb1\x47\x5d\x18\xfc\xa7\x22\x29\xe0\x26\x0c\xaf\xed\xb8\x05\xcc\xbf\x3c\x3d\x14\x94\x26\x5a\xcf\x8b\x67\xdc\xc5\x2a\x84\xeb\xae\x75\x72\x3f\xa1\x3c\x03\x0d\x33\x5b\x0d\x50\x95\xa5\xe6\xd3\x86\x59\xae\xe5\xf4\x87\xee\x15\x5d\x7f\x63\x00\x6e\x4a\xbe\xff\x62\x42\x95\xe7\xdf\xa2\xdd\x0f\xfe\xc8\xf2\xc3\x48\x36\xa4\x62\x37\xc9\x97\x65\x27\x59\xc2\x07\xe1\x97\x5a\x29\x05\xad\x68\xf8\xe4\x62\x34\xe4\x4f\xa9\xe1\x10\xaa\xc0\x97\x03\x13\x10\x00\x3f\x5c\xc3\x74\xc8\xac\x3c\x66\x82\xa7\x87\x60\x96\x4f\x9b\x4f\xdf\xda\x8e\xc4\x05\x33\x17\x4b\x46\x41\x7f\x15\x38\x7d\xa2\xfd\xf4\xa8\xe4\x0a\x35\xb9\x2e\x2c\x1d\xcc\x89\x75\xfb\xd9\x5b\x19\xb3\x06\x1f\xf3\x7b\x15\x7e\xc6\x10\xb6\xdb\xcf\x8b\x9f\x3f\xa7\xaf\xb4\x56\x5b\x3b\x3e\x79\x6b\x79\x7b\xfb\x59\x7e\xeb\xa2\xcf\x00\x9a\xbe\x2c\x1e\xf8\x5c\x7e\xf9\xf9\xc0\xb5\x17\x16\x37\xbe\x4e\xca\x1b\x9f\xed\x8f\x51\x33\x92\x77\x78\x08\x2f\x40\x20\x1d\x34\xd1\xc5\xd7\xf4\x74\x6f\xac\x64\x78\x6e\xaf\x4d\xda\xf6\x58\x7f\x3c\xdc\x30\xa9\x1b\x51\xfd\xb9\xfe\x98\xb2\x78\x59\xac\xd7\xf0\xe6\xc6\xa5\xee\x10\x72\xf1\x93\x10\x16\x9b\xa3\x7b\x33\x6b\x02\xc3\xb5\x3f\xe4\xba\x50\x32\xd4\x75\x92\x54\x18\xe7\x86\x22\xec\x9e\x8d\xfa\x63\xbd\xf1\x70\x27\xaf\xfe\x59\x8c\x0d\xef\x95\x12\x19\x35\xe4\xd6\xee\x11\x1b\xf0\x82\x4a\x03\xe7\xa7\xcb\xe9\xec\xb7\x6f\xb5\xcf\x37\xf1\xf2\xe9\xfc\x64\x36\x39\x9c\x4f\xf0\x68\x39\x9d\xbf\x9e\x4f\x4a\x5f\x0c\x26\xad\xc9\x5b\x50\x90\x5a\xfd\x4a\x93\x60\x33\x90\xa6\xf4\x4b\x7b\x3e\xc2\xd6\x11\xa2\x5d\xaf\x99\xd2\xd1\x6a\x4c\x45\x0c\xf5\x2f\x75\xa9\x94\x40\x71\xc6\xdf\x1e\x4e\xdf\x16\x17\x9e\xb2\x0d\x91\x56\xc5\x5b\xf5\x33\xa3\x0d\xb0\xc5\x2c\x5a\x1e\x25\x7f\xd5\x73\x8c\x12\x2e\x0f\x63\xfe\xb6\xd9\x58\x5a\x1a\x69\xcb\x23\x23\x0c\xb4\x64\x7c\xa3\x61\x69\x65\xa8\x56\x5e\x96\x16\x38\xda\xae\xc3\xf3\x51\x51\x24\x09\xf1\x94\x34\x0b\xb0\xe2\xf7\xad\xab\xa9\x06\xe5\xfa\xd0\x87\x38\x92\x63\x2c\xf2\xbe\x74\xf5\xf5\xfb\xd2\x0b\x03\xb1\xc6\x69\x4f\xac\xfc\xc2\x60\xac\x94\xfa\x97\xd7\x3f\xca\x4f\x81\xa3\xd3\xc3\xd9\x3f\xe9\x12\xb2\x05\xa3\xfe\x7a\x6f\xda\x44\xf6\xb7\x1b\xdc\x7a\x71\x18\xa0\xa9\x60\x72\x6b\xc7\x1e\x99\xf7\xc8\x71\xd5\x4a\x1a\xae\x86\x1e\x6f\xf7\xa5\x2c\xa1\x1c\xd4\x92\x0f\xbe\x30\x0d\x29\x7a\x3f\x6b\x98\x7b\x73\xc0\xfd\x3b\x3c\xb7\x98\x84\xf5\xc6\x33\x28\xc5\x7a\xa7\x59\xd5\x6d\xc7\x95\x06\x55\xfc\xe2\xe8\xc7\xcc\xb6\x83\xaf\x5b\x57\x55\xbe\x63\x4c\x41\x97\xe3\xaa\xd5\x67\x65\xe8\x37\xdb\x39\xde\x21\x9c\xd8\x0e\x32\xd6\x21\x23\x21\x3a\xfa\x8c\x7c\x1c\x3c\x06\x23\x4d\x27\x65\xf7\x83\x35\x3b\x7d\xfd\xf6\xf5\xf4\xbc\xfa\xc7\xeb\xe9\xf1\x95\xce\xd6\xc8\x61\x91\x1a\x63\xc1\x6b\xf3\xf3\x21\xe2\x23\x45\x3d\x75\x42\xa5\xc9\x73\xff\x16\x6a\xad\xe7\x73\x4e\xaa\xd0\x22\xa9\x04\x42\x38\xba\x10\xc4\x8b\xab\x53\xca\xcd\x1e\x68\x9d\x41\x04\x7c\x3b\x45\xa0\x74\x9b\xd5\x26\xac\x78\xef\x60\xeb\x35\x23\x42\xba\xcf\x26\xfd\x90\x42\xad\x11\xec\x06\xa1\xd1\xd8\xb7\x5d\xac\xf4\x53\x6f\x8f\xad\x11\xac\x01\x14\x6f\x2f\x6e\xd6\xbc\x7b\x2d\xf1\x0a\xa8\xd2\x22\x97\x7a\xf8\x88\x8b\x5d\xd6\x3c\x79\xb0\x35\xb6\x1b\x84\xfd\xc7\x8e\xf1\x0e\x13\x51\x44\xca\xa0\xf4\x82\xf6\xfb\xfd\x29\x2b\xee\x6b\xdd\x54\x94\xaf\x67\x43\x71\x96\x77\xc8\x5b\xda\x16\x7a\x37\x0c\xbd\x97\x87\xd0\xa4\xa1\x39\x35\x3e\x6c\x88\x33\x37\x4a\xf7\x99\x85\xd2\x5b\x23\xcd\x87\xe6\xa8\x07\x8d\x37\x45\xb3\x16\xe8\x27\xba\x26\xb1\xf6\x17\xcc\x70\x6b\x8c\x31\x1d\x58\x00\xa9\x5b\xe0\xe8\xd0\xa0\x0d\xc2\x84\xbe\x3e\xf7\xf9\x11\x6e\xf3\x49\x1a\xf6\xa8\x3d\x27\x9f\x36\xc7\xc7\x1d\xf5\x9a\xbc\xc5\x9d\xc8\x9b\x5e\x95\x4e\xe0\x01\x3c\xcf\x82\x11\x6b\xd0\xa9\x81\x8d\x7b\xcf\x15\xb8\xc6\xaa\x43\xd7\x0c\x6e\x77\x95\xe8\x72\x7c\x1d\xc5\xe2\xf4\x09\xcf\x01\x29\x60\xf4\x5d\xaf\x12\xf8\x28\x95\xe5\xd4\xc0\xc6\x5e\x1d\xf5\x98\x14\x8a\x45\xd1\xd3\x94\xf5\x5e\x36\xa0\x69\xac\xa8\x84\x1a\xa4\xd1\xe3\x12\xb2\x40\x79\x7b\xd6\xa0\xaf\x7e\x63\x1e\x4a\xcb\xc0\xdb\xf2\x16\x90\xf1\xef\xcb\x8c\x62\x4b\x03\xec\x71\x73\xee\x01\x61\x10\x75\x83\x2f\x66\x0d\xc0\x76\x77\x35\x03\x64\x03\x2f\x28\x3d\x20\xf4\xa7\x2e\x72\xda\x8a\xe5\x71\x80\x98\x8c\x84\x94\x35\xf9\xbe\x6c\x2c\x99\x27\x0a\x35\xbe\x83\xaf\xb2\x00\x3f\x68\xc8\x00\x35\x66\x19\x34\x99\x23\xa7\xb9\xe8\x8f\xdd\x94\x23\xfd\x4b\xc4\xa1\xec\x42\xaf\x1c\xc9\xae\x81\x05\x11\xac\x7f\xb6\x78\x78\xc6\xa5\x1c\xfe\xda\x86\x61\x3a\x4f\xbb\x29\x34\xd7\x0c\xfc\x41\x0a\xcd\xe5\xa8\x15\x49\xde\x38\x3f\x18\xc4\xf6\xe5\x08\x95\xe6\x46\xc1\x37\xe0\x78\xac\xa0\x1f\x5c\x5f\x4e\x01\x6e\xec\xfa\x72\x35\x54\x63\xd6\x97\xd3\x02\xad\x0e\xe7\x9d\x60\xea\x72\x6b\x61\xf3\x5e\x53\xa3\x48\x91\x21\x09\x72\x32\xfd\xa7\x89\x5c\x2e\x93\xe6\xe2\x30\x1a\x22\xe5\x81\x04\xe2\x07\x18\x0d\x16\x1f\xb8\xb6\x13\x6f\x21\x49\xae\x8d\x66\xfb\xf7\xe1\x93\x36\x6a\xc5\x88\xf6\x2a\x06\x4a\x6c\x63\x54\x15\xe9\x83\x4b\xa7\xde\x80\xee\x32\xd9\x05\xff\x66\xc0\xbf\x79\x0f\xfe\xb5\xd5\x6c\xe0\x86\x8a\x35\x1e\x26\x6e\xb0\xb2\x1f\x94\x81\x3d\x56\xe6\xe5\x39\xea\xe7\xb3\xf3\x73\x10\xbb\xc0\xae\xe9\x25\x76\xd9\x03\x1e\x51\x19\x06\xec\x18\x72\x66\xa7\xab\xf7\xef\x81\x37\xf0\x79\x16\xc7\x8a\x0e\x48\x15\x68\x00\xec\x68\x7a\x7a\x38\x97\xa7\x30\x76\xe4\x43\xb0\x6a\x88\xfa\x92\xde\x0e\xa8\xf7\x09\x31\x0b\x2b\xb2\x59\x45\xc0\x79\x78\x63\xa1\x14\xca\xa3\x0e\x48\x0a\xb5\x53\x6d\x0e\xa9\x17\xb5\xc3\x29\x3d\xc3\xf2\x73\xa9\xe7\x60\x11\x15\xaf\xd2\xef\x2c\x29\x37\x3c\xc3\x96\x6d\x4b\xa3\x1e\x6c\xbd\xc8\xb4\x9e\x1c\x72\x87\xb0\x67\x96\x14\x97\xae\xf3\x89\x92\xcd\xa3\xc1\xee\x33\x22\x9c\x5b\x51\x70\x23\xa9\x35\x97\xdb\xcb\xbf\xa1\xa8\x00\xcc\xc2\xba\xe6\x2e\x45\x09\xb7\x98\xb9\xf1\x62\x6e\x34\xc3\x00\x14\xe1\xef\xbb\xc2\xd3\x77\xa4\xd4\x33\x70\x6d\xc7\xef\xdc\x14\x38\xb9\xc8\x69\x49\xa8\x41\x0e\xd6\xd8\xb7\x85\xb9\xd7\x75\x3a\x9a\x40\x9e\x62\x6b\xa0\xcd\x0f\x56\x14\x26\xc9\xe6\xc7\x5b\xd7\xc7\x3e\x41\xd7\x5e\x5c\x5a\x68\x30\x39\x51\x18\xe0\x8f\xd4\x48\xd7\x5a\xbb\xf1\xc2\xa6\x7e\x54\x6b\x0b\xcb\x13\x15\x4d\x22\x2d\xdb\xbf\xa5\x9e\x72\x5e\x00\x0b\x78\xe0\xf8\xa8\xd1\xaf\x17\xdc\x84\xf1\x9a\xeb\x5c\x62\x8b\xba\xad\xd6\x57\xbd\x07\xbc\x0b\x14\x7d\xc7\x37\x82\x94\x88\x43\x98\x25\x9c\x84\xec\x3a\x59\xc4\xee\x2d\xcc\xc3\xe6\x0f\xf4\x52\x38\x9e\x9c\x40\x5a\xb9\xe8\xe8\xbd\x75\x1d\xa6\x2b\x0b\xef\xf6\xb4\xb2\xf9\x9a\x6f\x85\x54\xbe\x34\x69\x6f\x4b\xd5\xb0\xbc\x64\x15\x53\x90\x6d\x20\xd2\xc2\x68\xf3\x67\xea\x8c\x77\xed\x87\xdf\x64\x2e\x7c\x89\xfb\x23\xc9\xff\x4a\xbc\x35\x48\x08\x3b\x70\xb9\x61\xb1\x49\xfb\xaa\xa6\x81\xe0\xa1\x44\x56\x0c\xa7\xe8\xeb\x78\xc8\xd6\x0c\xf8\xc6\x74\x3c\x15\xa8\x6e\x15\xe6\x2e\x46\x92\x9b\x6e\xae\xbd\x94\x25\x0e\xce\xca\x53\x9e\x1c\xd3\x41\x10\x2c\x58\x59\x05\x74\xd8\xe7\x8b\x30\xf8\x3a\x0b\x52\xea\x58\x98\x4f\xd5\xd3\xd2\x44\x19\x0d\x67\x65\x07\x4b\xaa\x34\x7b\xeb\xb9\x77\x94\x0d\x9b\x47\xb3\x2e\x42\x40\xb7\x87\xb2\xe7\x9d\x70\xcd\xfb\x1e\x9c\x8b\x7b\x34\xca\xb5\xbb\xc6\xe4\x58\xfa\x86\xf6\x6c\x47\xf3\xd0\xa9\x8f\x95\xc7\x62\x2b\xcc\xa4\x74\xb3\x45\x9b\x31\xc7\x76\x70\xbd\x95\x4f\xd9\x3d\x86\x8b\x35\xcb\x10\xfd\x22\xb4\xe2\xcd\x8f\x4b\xd8\x6b\x7b\x96\x2b\x7f\x82\x37\x80\x86\xcd\x4f\x70\x42\x73\xeb\xd4\xa1\xcd\x47\x05\x2b\xca\x9b\x9f\x07\xb6\x75\xcc\xb4\x0b\x36\x03\x10\x7d\xe9\xa3\xaa\x08\xf2\xb6\xd0\x4a\xc9\x09\x41\xc5\xb5\x44\x4a\x31\x2e\x26\xa9\x34\x9b\xa2\xc6\x34\x2b\x89\x57\xd5\x43\x50\xa2\xe6\x7e\x89\x80\xdc\xac\x61\xe0\x01\x76\xec\x41\x9c\xd4\x16\x15\xdd\x24\x2a\xa4\x1d\x4f\xeb\x63\xf5\xc3\xcc\xb1\x5e\xc0\xca\x77\x60\x75\x4f\xcf\x8e\x2c\x10\xeb\x74\x4c\x50\x0b\x44\xef\x35\xb6\xb4\xb4\x62\xf7\x9b\xcc\x8b\x41\x62\x1e\x1c\x57\x1e\x38\xf0\xbd\x13\x2f\x00\xe1\x65\x59\xbf\x83\x85\x6e\xc7\x2e\x96\x4f\xc3\x5e\x98\xfe\xbd\x05\x8f\x54\x1f\x25\x58\xfb\xd6\x25\x4c\x4d\xb4\x8c\x71\x17\x50\x4f\x7b\x80\xb9\x07\x4b\x87\xda\x8d\xe3\x11\x05\xba\x59\x53\x32\x39\x12\x7a\xc3\x74\xc2\x1f\xde\x7f\x95\x19\xed\x0a\x05\xfc\xe1\xc7\xb6\xc3\xc1\x69\x5f\xbd\x44\xda\xff\x2b\xd7\x57\x84\x46\x34\x3e\xa4\xbf\x6a\xc4\xeb\xa8\xad\x74\xe2\x08\x2a\x0f\xf5\x1d\xc6\x57\xc8\x5f\xfe\xfc\xfe\xfd\x57\xd4\x86\xbe\x54\xc1\xc0\xc5\x2d\x20\x1c\x9f\xa0\x23\x81\xb2\x68\x03\x3e\xaa\x52\x79\xf0\x42\x56\x40\x78\x6a\xfb\x20\x63\x61\x72\xce\x39\x85\x0d\x01\xd4\xc0\xca\x5a\x09\x1d\xe0\xb1\xdf\xaa\x03\xe2\xa8\x54\x17\x33\x4d\xe4\x03\xac\xce\x91\xa6\x92\x28\xba\xee\x8f\x38\xb0\x0f\x36\xa4\xa1\x93\x88\xa3\xa9\x4c\x8e\x95\x97\x72\xb0\x1e\xe3\x45\x9e\x3e\xb2\x2e\xfc\x58\x6c\x40\x38\x9d\x7d\x07\xd0\xdd\x17\xae\x6e\x92\xd0\x2d\x6f\x11\xd5\x30\xf0\x40\x8e\x05\xfe\xc0\x8a\x16\xfc\x78\x79\xd8\x5e\x70\x1b\xbe\x53\xb1\x10\x08\x78\x05\xf7\xc4\x5b\xac\x4c\x0a\x9b\xda\x4a\x56\x44\x0a\xdf\xad\x6e\x32\x2c\xa4\x0f\x3b\x17\xc4\x41\x2a\x70\x5a\xde\x1a\xd4\x07\x6a\x17\x5a\xa1\x15\x7f\xa2\x96\xa8\xf8\xc7\x36\xc5\x4c\x5b\xfb\xca\x51\x70\xf1\x67\xfe\x35\xf1\xaf\xef\x32\x45\x45\x97\xa4\xb0\x6a\xf3\xd2\x39\xcf\xdd\x6d\x03\x6c\x98\x00\xb2\xde\x48\xc5\x08\xd7\x11\x86\x42\x20\x5e\x60\x08\xab\xa2\xc9\xca\xfe\xcc\xa2\xf8\x58\x1c\x7b\x43\xa9\x16\xcf\x57\xca\xdb\xa1\x10\x7b\x52\x4f\x8d\x22\x10\x01\x2a\x21\x85\x4c\x11\xd9\x79\x7b\xbc\x62\xd6\xf6\x3d\x5c\x62\xdf\x61\x65\xde\xbb\x15\x36\x7e\x50\xaa\x35\x63\xc1\xed\x31\x92\x20\x70\x17\x54\x80\xd8\xc9\xd6\x11\xa2\x8e\xdd\x05\x75\xf7\xc5\x82\x1e\xa4\xcd\x8e\xdb\x77\x5b\x15\xac\x10\x22\x2d\x36\xea\xfd\xeb\x30\xc1\x1f\x61\xad\x11\x1d\x4c\x93\x9b\xb0\xea\xbf\x83\xc6\xdb\x66\xf1\x0e\x05\xf3\x52\xdb\xa3\x3d\xfa\x51\x71\x0d\xf7\xa7\x17\x64\xb6\xc3\xf7\xdf\x8f\x8d\x79\xd1\x3d\xad\x74\xd0\x13\x81\x05\x54\x86\x49\xd0\x76\x41\x5f\x01\x85\xdc\xcd\x5c\x84\x51\x8a\x1f\x2f\xe9\x2f\xfe\x71\x47\x1d\xe0\x3f\x26\xd2\x7a\xf0\x13\x4f\x15\x94\xe1\x68\x03\x45\xe2\x92\x96\x66\xfa\x6f\x82\x59\x1c\x87\xf1\x33\xab\xd3\xf3\x40\x66\x8b\x9b\xd0\x2b\xd9\x2d\x6e\xb9\x65\x3c\x2c\x70\x45\x7b\x7c\x05\x06\x83\xf1\x2c\x60\x3a\xaa\x72\xfb\x99\x25\x9d\x1c\xa1\xd2\x71\x62\x00\xc2\x80\x3e\x07\x8b\xb1\x93\xbf\x0a\x0f\x18\x71\x4b\xb2\xb0\x0f\x0d\x2e\x22\x07\x6e\x57\x0b\xac\x2c\xf6\x5f\xfa\xb0\x59\xc2\x44\x13\x0a\x81\x48\xd1\xf4\x81\x96\x5e\x38\xcb\xed\x6b\xdb\x5f\x85\x96\x9d\x66\xb6\xff\x5f\x06\x91\x7e\x83\x4b\xc5\x46\xfb\x31\x7a\x05\x2c\x0e\xb3\xea\x43\xa7\x54\x02\x62\x7c\x77\xf3\x63\x00\x24\x46\xb6\x13\xc3\x83\x23\xd0\x05\xbb\x0a\x77\x84\x43\xca\x4e\x2e\xb0\x1e\xe3\xde\x92\x7d\x59\xcd\x68\x2d\x0c\x47\x64\x5d\x03\x85\x26\x84\x5b\x44\x0d\x0b\xda\xdd\x05\x96\x11\x06\x43\xc6\x21\x6a\xa6\x4f\x37\x96\x62\xc7\x9c\xc1\x0f\x8c\xd2\x6c\x2c\x64\x80\xa6\x61\xd0\x20\xd4\x80\x4d\xa9\x6f\x13\x25\x28\x66\xa4\xb8\x29\x73\xcf\x6c\x28\xad\xf2\x84\x4f\xae\x5c\xf4\x6c\xfe\xd0\x82\xcc\x78\x78\x15\xb1\x9c\x4b\x6f\x98\xfd\xef\xf8\x0e\xc8\x62\x5c\x4b\xd4\x98\x02\x34\xa0\x1d\xb8\x82\x76\x15\x61\x89\x09\xb2\xf5\xb5\xcb\x32\xf7\x28\x00\x35\xb2\xdf\x2c\xd8\x01\xdc\x44\x13\x12\x37\xc1\xe6\x2f\x6b\x37\x06\x59\x63\x13\x6c\x78\xb6\x19\xa8\x01\xc5\x30\xc3\x1e\xe0\xf9\xce\x2d\xfb\x80\xfa\x90\x29\x01\x90\x9b\x96\x20\xb0\x33\x63\x24\xaa\x38\x5e\xa0\xcb\xbb\xd2\x4a\x12\x49\x64\xf8\xc4\x34\x0d\x3b\xc5\x85\x6a\x01\xab\x66\x9f\x4e\xaa\x69\xe4\xf5\x3e\xac\xd9\x2f\x18\xe7\x4b\x0f\xe8\xfa\x53\xc8\x3a\x1c\xfa\x0d\xdb\x00\xf7\xa3\x36\x78\x9c\xca\xee\x23\xa9\xbb\x8e\xb8\xbd\x1d\xaa\xc0\x59\x84\x36\xbc\x3e\xf4\xb2\xff\x5d\xf4\x1b\x27\x68\x61\x4c\x46\x6c\x61\xf2\xaf\x01\xec\x4f\x67\x18\xc1\x8d\xbe\x70\xb3\x28\x2f\x94\x4d\x9b\xe4\x3a\xf6\x0a\xfa\x72\x38\x43\x28\xba\x8b\xd1\xbb\xf1\x9d\x17\xf5\x26\x66\x19\xdb\xb7\x25\x6e\x01\x08\x13\x3a\x64\xdb\x98\x86\xc1\xd4\x45\x1c\x4d\x4e\xb6\x1e\x36\x6e\x89\x4f\x44\x74\x63\xfb\x44\xd6\x94\x71\xc5\x00\x32\xf4\x6e\x27\x8a\x5b\xbe\x24\x22\x57\x37\xdc\x35\xfc\x69\xd7\x96\x38\x2f\x97\x24\x44\x76\x01\x48\x2f\x8c\x47\xa0\x35\x5d\xd9\xa9\xec\xdb\x08\x34\x3a\xd6\xf5\xbd\x85\x96\x21\x40\x9d\x58\x4f\x28\x2e\x89\xba\x16\x2a\x82\x35\xb6\xa8\xff\x26\x83\x6b\x59\xc8\xde\x63\x0b\xae\xfe\x28\x3d\x1c\x24\x1b\x6d\x4b\x8e\x4d\x2d\x7e\x4a\x43\x43\xb7\xed\x93\x24\xe4\xeb\x1c\x61\x34\x8a\xde\x90\x03\x0b\xdc\x3b\x72\x30\x75\x10\x1c\x84\xb7\xc3\xfc\x49\x12\x1f\xdd\x4d\xd7\xec\xb0\xa1\x09\x27\x53\x86\xca\x8f\x28\x39\x06\xef\x62\xf8\x22\x02\xd8\xfc\xbf\x6b\x50\xde\x78\x8a\x41\x37\x73\xab\xef\xf7\x27\x4a\x46\x3c\x5b\x1d\xe9\x94\x72\xee\x96\x71\x16\x85\xec\xf0\xc7\x86\xa0\xc1\xe6\xcf\xf6\x30\xf4\xac\x5a\x61\xdc\xae\xd5\x51\x59\x53\x92\xc0\xe1\xbd\x0e\xbd\x84\x5d\xa1\x16\x62\xd9\x97\xa2\x10\xc6\x20\x89\x83\x70\xbb\xc9\x59\x84\x70\xe5\x81\x2b\x4e\x25\x0a\x62\x0c\x02\xba\x3d\xb0\xf9\xf2\x28\xdc\xc9\xa3\x71\x41\x1d\xd4\x22\x07\x2f\x0c\x25\x43\x30\x61\xdc\x32\xef\x09\xea\x26\xcb\xca\x63\x3f\x79\x28\xf6\x07\x96\xc9\x26\x81\x98\xdb\x6f\x46\x95\x84\xe4\xf3\xcf\x6f\x45\xa5\x38\x00\x96\x8d\x2b\x10\x56\xd7\x2e\xac\xcc\x28\x4b\x56\x18\xb3\x93\x2d\x16\x6e\x92\x90\x8d\x5b\x61\x6d\x19\x15\xb8\xc1\x98\x40\xbe\x6a\xf0\xb7\x72\xc0\x98\xe3\xc3\xb2\x40\x7d\xc3\x0c\xf4\xdf\xec\x47\x0d\x9a\x27\xb6\xd8\x8e\xc6\x2e\x69\xc3\x48\xdc\x34\xa5\x68\xba\xf0\x86\x9e\x52\x93\x38\x00\x9c\x01\xdd\xe3\xda\x57\x95\x0b\x00\x0d\xaa\x3b\x30\x9b\x0e\x19\x7e\xa1\xc3\x02\xd4\xe7\xf2\x8f\x53\xed\xe1\x68\xbf\xdf\x9f\x34\xa1\x2d\x61\x28\x16\x7d\x12\x2c\xc0\xa5\xbb\xc5\x30\x93\x99\xc8\x75\xa7\x3a\x06\x12\x75\x5b\x28\x46\x67\xfd\x28\x83\xd8\x3d\x99\x9c\xef\x01\x10\x7f\x83\x1f\x06\x90\xba\x68\x80\x33\x3a\xb5\x7c\xfc\x01\xc4\x57\x70\x4c\x05\x8a\x15\x33\xe2\x96\x8e\xc5\xc0\x4a\x28\x9b\x97\xd0\xc3\x6d\xeb\x06\x36\x98\x8d\x64\x20\x1d\x55\x9d\x18\x41\xcb\x6f\xde\xd2\x37\x39\xc7\xb3\x7c\xe4\x9d\x44\x36\xe8\xcd\x8d\x80\x25\x53\x9b\x40\x9b\x8c\xa4\xae\x5e\x0b\xca\x0f\xf8\x50\xc2\xa9\xd3\x63\x32\x97\x34\x54\x6b\xdd\x49\x4e\x7d\x3b\x78\xf3\x31\x88\xa4\x38\x80\x3e\x68\x3b\x37\x28\xeb\x25\x98\xa3\xaf\xe9\xba\xb6\xb2\x6d\xdd\xed\x7d\x74\xf7\x9e\xbb\x76\xcb\xb2\xd1\x31\xbe\x8b\xc9\x45\xf5\xae\xa0\xee\xd7\xee\x7d\xe9\xdc\x54\xb0\xf0\x48\x7c\x65\xca\x9f\x0f\x42\x85\x01\x97\xa8\xc3\x5b\x9b\x6e\x31\x48\x8d\x80\x49\x05\xb1\x9f\x7a\xfe\x0a\x2d\x2f\x75\xd0\xe3\x6f\x07\x5a\xd6\x8d\xa7\xf3\x08\x2a\x92\xea\xf0\xef\x0f\x5e\x3b\x82\xa8\x3a\xb8\xda\xae\x69\xda\xde\x86\xfb\xb8\x65\x5f\x36\x6d\xe2\x5d\xec\x55\x0e\xc6\x16\x79\x84\xed\x4e\xb1\x07\x94\x67\x30\xa7\x81\xbb\xf0\x84\xc9\x50\xda\xe8\x3e\x42\x31\x47\xac\xcb\x63\x24\xf4\x47\x5a\x1e\x52\xeb\xbb\x7d\xc8\x11\x6d\xd4\x15\x71\xd3\x4d\xcf\x98\x60\xb0\xee\xdc\xd8\xb5\x62\xf7\x6b\x11\x23\x24\xe2\xa0\x31\x06\xd1\x5e\xda\xaa\x50\x47\x06\xb2\xf0\x6c\x8f\x82\x89\xec\x35\x41\xf1\x52\xdb\xc1\x64\x09\x9c\xe9\x1b\xfb\x36\x8c\xf7\xac\x94\x0c\xc1\x41\x78\x3b\x20\xc3\x45\x5c\xce\x0f\x5e\x34\xc7\x88\xe3\x5f\x2a\xed\xae\xe7\xeb\x26\x74\xd5\x42\xd3\x7b\x11\xd5\xfd\x6e\x6f\x8a\xce\xba\xb2\x31\x2e\x28\x07\x83\x9c\x81\x03\xd0\xc8\xe4\x0b\xcb\xf1\xd8\x23\xb8\xb6\xd3\xc5\x4a\x07\x29\xc6\xa4\x6e\xfe\xe8\x7b\x8e\x91\x61\x3a\x4b\xd2\x70\x5d\xce\x74\xba\xe7\x90\x85\x27\xee\xfe\x72\x1f\x93\xa6\xf3\x9f\x3e\xc1\x44\xa2\x97\x47\x97\x64\x76\xe4\x9f\x1f\x37\x84\xf7\xaf\x5c\xd0\x5b\x33\xf1\x4f\xf1\x36\x56\x31\xb8\xdf\x87\xe7\x1e\xe7\x70\x9e\x9f\x4f\x4f\x0f\x5e\x0d\x04\xf7\x5f\x1d\xf7\xd6\xf5\xc3\xe8\x31\x1d\x78\x8f\xf3\xbf\xae\x81\x5f\x8b\xd5\x27\xfb\x16\x08\x10\x1a\x5e\x3a\xf1\x4a\xce\xc0\xc4\x42\xdf\x0d\x8e\x56\x98\xa9\x44\xdc\x68\x1a\x5a\x8f\x83\xcc\xf7\x1f\x5b\x0c\x8d\x22\x65\xda\xab\xc5\xe6\xb6\x14\x2b\x82\xa5\x16\x06\x76\xc9\xa3\x43\x01\x1a\x82\x8d\x6e\x56\xe1\x63\x46\x83\x46\x1e\xf0\xef\x06\xe3\x6e\xf6\x04\xa9\xcf\x6d\x9e\xeb\x95\x6b\x63\xfc\x31\x47\x33\x2f\xfc\x8c\xb2\xb3\x28\x98\x09\xb3\x43\xdc\x24\xdd\xb3\xa8\xe3\xa5\xf0\x7d\x89\xcc\x35\x38\x01\x31\xbd\xce\x03\xb1\x66\xa5\xde\x5a\x55\xf1\xd3\xbe\x76\xe1\xb6\xe7\xaf\x30\x37\xb2\xcc\x15\x11\xcf\x49\x48\x3d\xe4\x0f\xfc\x0c\xab\x3d\xdc\xb7\x2e\x3c\xf9\x4c\xdc\xe4\x1f\x5b\x6f\xfe\x42\x98\xe1\xf8\xbc\x75\xbf\x33\x73\xb5\x73\x21\xa9\x8b\x56\xaa\x65\x85\x36\x93\x2e\x26\x87\x76\xb2\xba\x0e\xed\xd8\xa1\xc8\x09\x98\x5a\x85\xb0\x52\x3e\xab\x8f\x11\x5d\xfd\xd2\xa7\x17\xbb\x22\x74\x91\xf4\xc0\x76\xcc\x22\x3c\x00\xcd\xdb\x78\x86\xb0\xa9\xc7\xc1\x69\x87\x3b\x79\x62\xe4\xc3\xa9\xd0\xc1\x2a\x4f\x1f\x6a\xf4\xde\xec\x41\x0d\x25\x8e\xeb\xb8\xb7\xcf\xa9\xf1\xd4\x60\x07\x77\x8e\xb1\x23\x96\xae\x84\x4e\xde\x44\x86\x60\x53\xb3\xb6\x40\xc6\x73\x3c\x04\x13\x99\xa8\xb4\x30\xc5\x03\x31\xf5\xf0\x8c\x96\xb8\xb9\x1b\xdf\xe8\x16\x51\x1d\xbe\xd1\x12\x41\x63\x79\x47\xb7\x48\xe8\x74\x1c\x49\x22\x46\xf3\x8d\x6e\x91\xa0\xea\xa8\xa1\x7e\xd8\x00\x67\xd9\x04\xd0\x67\x5f\x55\x6f\xf8\x83\x48\x50\xba\x84\x4b\xa8\xcd\x9d\xc2\x55\x5c\xe2\x22\xcf\x71\x5c\x45\x36\x5a\x00\xaa\xa1\xb7\xe4\x23\xba\xfc\x1c\x47\xaa\xfb\x7e\x57\x09\x6e\x6b\x37\x58\x74\xd5\x8e\x1c\xbb\x32\xf6\xa4\xc4\xce\x01\xb1\x27\x12\x17\xc5\xe9\x44\x2b\x3b\x80\x25\x44\x22\x2c\x61\x4d\x0b\x48\x05\xb5\xc4\x65\x1f\x33\x66\xb9\xb2\xa6\x1d\x81\x22\x82\xfa\x10\xfb\x33\xdb\x23\x7a\x24\x91\x79\xb0\x0e\x0a\xbd\xc4\xda\xfc\x14\xdf\x6c\xfe\x94\xa3\xb0\x41\x8b\x42\x5d\x05\xa3\x7d\x38\x77\x0a\x36\xe4\x9f\x30\xbe\x38\x72\x6d\x7a\x91\xd3\xd9\x23\x93\x68\x1e\x39\x42\x75\x42\x7e\x89\x9b\x83\xd2\xe6\x0b\x6c\x2a\xb7\x79\xf9\x18\x18\xea\x38\x17\x18\x17\x28\xea\x30\x11\x4a\x89\x54\x44\x38\xd2\xb3\xb6\xd1\xfd\x87\xd1\x25\xfa\x81\x41\x3c\xd6\xf1\x22\x83\x88\x80\x87\x74\x71\xf3\x00\x3e\x1e\x27\x77\xce\x00\x53\x27\x77\x31\xa0\xf1\xdd\xdc\x39\x71\x23\x98\xa2\x0b\x3a\x5b\x7d\xda\xa3\xf3\xf4\x83\xb8\x19\x1e\x18\x7b\x7f\xae\x0c\xb2\xba\x17\xd3\xb8\x33\xaf\x7e\x4e\xe8\x60\xaf\x7e\x41\xec\x2e\xfd\xfa\x39\xbd\xb9\x43\xfb\x1c\x3f\xe8\x92\x26\xfd\xd9\x4d\x2f\x0d\xa0\x81\xee\xd6\xfd\x28\xd8\x7e\xa5\x3f\xfe\x31\x9d\xe9\x05\x85\x0f\xea\x4e\x2f\x8d\x45\xc7\x9d\xae\x41\xbe\xc6\x35\xad\xd9\x0f\x31\x06\xf5\x83\x1c\xe9\xe5\x1d\xf4\x30\xae\xf4\x2d\xfa\x1f\xd0\xe3\x54\x8c\xb6\xdd\x87\xee\xae\x3f\x8c\x73\xa9\xe0\x4b\xbb\x4f\xb5\xcf\xcc\x0e\x86\x67\x4a\x79\xee\xdb\xaa\xa6\x8b\x15\xdf\x53\xae\x98\xf9\xd4\x95\xa6\xa2\x8a\xa7\xd0\xef\xca\x78\x76\x31\x45\x4d\xfe\x3f\xf3\x01\xb5\x79\x05\xc7\x25\x3d\x59\xc4\x1e\x95\xdb\x7b\x56\x5a\xf3\xa5\xaf\x55\x46\x5d\x7a\x8a\x44\x9a\xc6\xcb\xfa\x34\x71\x71\x3b\xcb\xa6\xd8\x67\x19\x0e\x9c\xdb\xe3\xcb\x29\x86\xed\xa4\x99\xc0\x30\xa5\x10\xaf\xd0\xb9\xd8\x2a\x29\x79\x79\xad\xb4\x30\xa0\xef\x65\x1e\x8d\x8a\xa1\xf6\xb5\xe7\x7b\x29\xa6\x3c\x21\xe8\x90\x2f\xcd\xb9\x54\x0a\x33\x91\x0a\x5b\x3e\x41\x44\xa5\x38\x1b\x7f\x6d\xc9\xa7\x19\x6b\x8c\x39\x03\xcb\x43\xd4\x9d\x04\x2d\x10\xbd\xe9\x43\xc3\x4d\x29\xd9\x0d\xcd\x36\x5c\x00\x89\xb2\x97\x48\xe7\xe6\xc6\x3e\x5a\x5c\xef\x34\x8c\xab\x6d\x3e\x25\x9a\x00\x3d\x85\x80\x5b\x37\xae\x9d\x66\x31\xcc\x57\xc8\xf6\x17\xee\x42\xb7\xb2\x6f\x2b\x8c\x09\x1c\xf2\x3c\x65\x09\xbf\x2d\x5e\x52\x88\xf1\x1d\xa2\xea\x39\x07\x74\x8d\x67\xf0\x58\x6d\x14\x17\xfd\xf7\x58\xb7\xc7\x0e\x1a\x2e\x3e\x5b\xe7\x6a\xbf\xb3\x4b\xce\x14\x5d\xe4\xe5\x0e\xe1\x2d\x51\xc5\x49\x9b\xa2\xfd\x34\x1f\x4d\x6b\xa9\x73\x00\x19\x0c\xdb\x9c\x2b\x11\x03\x3b\x5a\xc7\x7d\x53\x12\x08\x25\x26\x74\x5f\xfc\x5b\x98\x00\x3b\x1f\xf4\x32\xf4\x36\x8a\x62\xad\x2a\x65\x86\xb8\xd3\x96\x7b\x57\xe6\xcd\x20\x2b\xc2\x20\xde\xe0\xd2\x1c\x74\x63\x1d\x8d\x4f\xf5\xbc\xcb\xdd\x5c\x7e\x1b\x98\xd5\xb0\x95\xba\xb8\xb6\x0b\x8e\x35\x6d\xaf\x6e\xae\xed\xce\x4c\x80\xb5\x5b\xb9\x46\x2b\x87\x11\x7c\xfe\xab\xbf\x3b\xd9\xb3\x3e\xfb\xf4\xf3\x5f\xe2\x3f\x2f\xdb\xed\xd8\xc7\x79\x95\xd5\x4a\x01\xd6\x4e\x30\x7d\x48\xc3\x40\x05\x8c\x35\xf0\xe1\xea\x48\x55\xba\x52\x90\xae\x79\xb5\xa4\x56\xd2\x66\xa2\x3a\x36\x3f\x2d\x6b\xbf\xe6\x05\x52\xc8\x6c\x39\xc4\xa0\x1d\x8a\x0a\x31\x7e\x18\x63\x09\x80\x30\x4b\xa3\xac\xa3\xae\x08\x3f\x0c\x34\xd9\x9b\x1f\xcd\x8c\xcc\xa1\xf4\x33\x48\x8f\x2a\x55\x13\x12\xd9\xb0\xc4\x9d\x98\xcd\xca\xc2\x57\x41\x87\x77\x14\xbb\xb7\x5e\x88\x4c\xc0\x14\xb8\x84\x4b\x9a\xf1\x2b\x1d\x15\x0b\xd0\xd1\xe0\xb9\x45\x9e\x60\x77\xf2\xac\xfa\x30\x67\xf2\xb9\x9b\xa7\x48\xf9\xb2\x6f\x30\x57\x11\x29\x53\x29\x14\x44\x8d\x17\x78\x0b\x51\x70\x41\xd0\x90\x97\x63\xb1\xa3\xcd\x4f\x89\x85\xad\x4a\xcd\xe6\x72\x91\x61\x20\x1c\xd7\xd8\xc8\x62\x5f\x23\xfc\x02\xe3\x6e\x70\xd9\xcb\x57\x0b\x9d\xdd\x38\x14\x83\x2d\xc3\xbc\x75\x4a\x7d\x24\xda\x77\xdf\xa1\x34\xff\xaa\xde\xe9\x89\x3f\x79\xd6\x89\xae\xfc\x48\x0f\xe8\x5c\x9b\xd5\xb2\x53\x2c\xd0\x90\xc2\xe3\x9e\xef\x3a\xb2\xd6\x13\x56\x53\xc2\xde\x1f\x57\x5c\x4d\x93\x42\x8a\xa8\x82\xdd\x5e\x5e\x3c\x31\xa1\xc5\x63\xdf\xc2\x7b\xf4\x0c\xad\x6d\x3c\xd3\x96\x1e\xdc\xee\x70\xda\x14\x72\x58\x07\x7b\x5f\xdc\x7e\xb8\xb0\xfd\xa7\x5e\x00\x0b\x38\x70\x53\x83\xf8\x67\x49\x55\x5e\xa5\x4f\x14\x99\x7a\x0c\x1a\x03\x56\x2a\x4e\xc8\x1b\xed\x26\x45\x18\x1f\x6c\xef\x08\xeb\xfa\x63\x48\xa7\x2a\x26\x66\x34\xc0\xfa\xf3\x9b\xad\xa3\x4a\x0d\x40\xe4\xa1\x0b\x1c\x47\x69\xc3\x55\xee\xba\x44\x35\x08\x9b\x00\x0e\xd7\x6a\xe5\x3e\x9b\x4a\x65\x6e\x7e\xa0\x0c\x1a\x59\x99\x8e\xa2\x56\x0d\x88\x9c\x9d\xbe\x3e\x3a\x9f\x9f\x9e\xcc\x4e\x2f\xad\xd7\xd3\xf3\xa3\xe9\xf3\xe3\x99\x45\xfd\xcf\xda\xe3\xb9\xb4\xde\x19\x44\xc1\x45\xfb\x96\xc3\x47\x36\xff\xfa\x7a\x76\x74\x81\x0d\x5b\xa6\x27\xcf\x8f\xe0\xc5\x59\xf3\xfe\x53\x2e\xb5\xa2\x27\x51\xfb\x40\xf3\xb6\x3b\x26\xe3\x52\xf4\x3c\x4a\xf2\xc6\x39\xce\x35\xf6\xe6\x59\x86\xbe\xd3\xfd\xdc\x82\x7a\xf8\xc4\xf6\xfa\xed\xf2\xfa\xcd\xa3\x67\xbf\x6c\x6e\xd1\x53\x7f\xe7\x5f\x9e\x62\x01\x35\x32\x8f\x3d\x4d\xd7\xd1\x53\xe9\x15\x7a\x0b\x4b\xe7\xc6\x5b\xee\x7f\x9d\x84\x41\x37\x9c\xd4\x7a\xf3\x08\xfb\x4e\xec\x85\x37\x58\xa3\x71\x99\xbc\x79\xa4\x60\xdb\x5f\xd3\xc8\xdf\x64\x9f\x7e\xfa\xe9\x7f\x1f\x30\xfa\xfe\x0b\x0e\xbe\x3b\x86\x4d\xfb\xed\xd3\x13\x7b\xc1\x7f\x96\x06\x53\xe9\x68\xbc\xbe\xa7\x24\xf0\x12\x13\x22\x54\xd6\x12\x0c\xbd\x4e\xa8\x63\x53\x0c\x12\x85\x8a\xa5\x70\xcb\x26\x82\xf6\x5b\x00\x11\xde\x25\x96\xac\x47\x0b\xc8\xdc\x3e\x78\xde\x3c\xfa\xfe\xcd\x9b\x2a\xaa\x37\x88\xec\x4d\x19\x1d\xfc\xf1\xfe\xcd\xa3\x1a\xc6\xb3\xf0\xce\x8d\x2f\x56\xae\xef\xf7\x1c\x97\x16\xba\xc7\x72\xb6\x2a\xb3\xaf\x00\xac\xb3\x02\xf4\x96\xf1\xcf\xf3\xf5\xf1\xcd\x97\x99\x28\x6e\x9f\x49\xae\xbd\x95\x93\xe6\x5c\xe7\x1f\x13\xcf\xc7\x20\x9c\x46\x39\xa4\x3f\x83\x3a\xf0\xc5\x54\x0a\x14\x6f\x08\x49\x9f\x59\xd3\x1c\x43\x1d\x85\x1c\x87\x36\x98\x9e\x32\x56\x09\xdb\x06\x15\xa7\x02\x36\x17\xb7\x56\xdf\xd3\xe6\xe7\xc9\xfd\x2b\x9f\x5c\xfd\x3d\xcd\x57\x93\xbc\xa5\x1f\x5b\x1b\x72\x8b\xa7\xc8\xb7\x48\x84\x05\x00\xbb\x80\x25\x8a\x38\xce\x57\xb9\x71\xbe\x52\x0c\x91\xcd\x38\xf6\x32\x80\xbb\x74\xea\x2d\xc2\x02\x9d\x34\x6e\x0a\x33\x1f\x25\x5b\xc0\x75\x9b\x51\x01\x97\x4c\xbc\x21\x62\x48\xaf\x2e\x2f\xcf\x30\x37\xf2\xdb\x7b\xd9\x97\x05\xf3\xc1\xe4\x80\x34\x86\x40\xef\x0a\x30\x48\xa6\xa4\x0e\xc0\x98\x53\x35\xc4\x51\x66\x02\xc2\x90\xbe\xd1\xdc\x64\xaf\x3e\x1a\x27\x59\xd3\x00\xfb\xf9\xc8\x0c\x20\xf4\xa5\x0e\x63\x37\x84\xb7\x88\x6c\x7a\x1a\x7c\x05\x26\x39\x25\xaf\xd8\x22\x8c\x87\xb0\xa7\xea\xa2\xc3\x6a\xba\xae\xbe\x77\xae\x44\xd4\x10\xd7\x5c\x89\x94\x1d\x7b\xe6\x76\x88\xa9\x1f\xe3\x1f\xce\x2f\xf7\xea\x23\xf3\xca\xd5\x87\x3f\xd4\x29\x67\xc8\x81\xdd\xb8\xe4\x3e\x18\x63\x06\x7b\xe4\x1e\x18\xfb\x10\xae\x3c\xb4\xeb\xed\x43\x90\xd0\x83\x3f\xb7\xd6\xad\x1d\x7b\x24\xd7\x30\xbf\xdc\x16\x7e\x61\xeb\xce\x4e\x44\x71\xe9\xb4\x7d\x6c\xf0\xb8\xb7\xf9\x23\x97\x6a\xb6\xec\xf5\xb5\x47\xf9\xfc\x15\x38\x81\xac\xfc\x2b\x9a\xbc\xda\x46\x64\xa2\x69\x9c\xcf\x08\x6e\xf1\x42\x5a\x59\x3b\xcb\xe1\x71\xb4\xd1\x26\x70\x6e\xa0\x7e\x2f\x74\x31\x63\xc4\x0b\x59\x05\xa2\xa8\x0b\xe8\xf9\xee\xb3\xf6\x7a\x82\xba\xaf\x99\xd2\x21\x18\xa0\xd3\x7d\x9b\x79\x21\xaa\x51\x30\x1f\x86\xb5\xd8\xae\x91\x92\x8a\x92\xd9\x1a\xed\x38\x2a\xa4\x34\x54\xc9\x1e\xd4\x6f\xa3\x46\x56\x47\xf1\xee\x0a\x29\xc6\x75\xb9\xeb\x38\x1b\x62\x04\xf7\xb5\x3a\x7d\x54\xc9\x69\x2b\x19\x32\xb0\xe3\x07\x53\xeb\x34\x66\xa7\xf0\x66\xd5\xa7\x35\x6e\x4e\x51\x51\x81\x31\xa5\xb3\x39\x51\x45\xaf\xa6\xfc\x0b\xdb\xc7\xa2\x12\x92\xde\xb8\x35\x51\x65\x68\x25\x79\x41\x73\xde\x82\x8a\xb6\x67\xb1\xcd\x54\xde\x0e\x64\x67\xd1\xf8\x88\x77\x68\xf3\x9b\xc6\xd4\xf0\x3d\xdc\x84\x1c\x79\xb1\x1e\x85\xa0\x1b\x6e\x6e\x5e\x72\x5f\xa2\x32\xa6\x37\x93\x44\x97\x6c\xb5\x21\x73\x55\x8a\x3e\xe3\xfe\x38\x13\xb8\x4d\x21\xe7\x88\xea\xca\xd9\x32\x81\x32\x68\xb9\x4e\xe4\x38\x14\xca\xce\x81\x18\x2b\xbc\x76\xe4\x22\xd6\xa7\x6e\x21\x5a\xe1\xb5\xbd\x6f\x48\xd6\x90\xcd\x9a\x47\x11\xd4\xda\xf3\xed\x66\xaf\x4a\x8a\x3b\x3b\xf1\x4c\xc5\x41\x85\x1d\x9c\x65\x3f\x9d\x11\x3a\x08\x56\xa9\xa8\xab\x77\x85\x08\xd5\x8b\xd7\x66\x68\xf5\xfd\xd1\x0b\xe2\xc8\x94\xf7\xdd\xcb\x5d\x30\x0c\xc9\x6b\xca\x21\x19\xb2\x9b\xbb\x21\xf5\x24\x74\x29\xaa\xf5\xd8\x91\x88\x22\x0a\x03\x2b\xc9\x60\x73\x63\x8f\xaf\x8e\xf9\xd6\x7c\xd7\x90\x22\x29\x62\xd0\x6c\x2c\x02\xb8\x38\x86\x03\xc6\xfc\x02\x34\xbe\x33\x3b\x5d\x75\x2e\x49\x53\x60\x86\x34\x53\xf3\x16\x34\x26\x6b\x92\xd5\xf0\xbc\x21\x66\x31\x1c\x19\xb9\xc2\x63\xc4\x60\x16\xed\x59\xd4\x82\xd0\x93\x3a\x80\x27\x3a\x64\x63\xa8\x8a\x7a\xb9\x07\x21\x2b\x2e\xb1\x87\xcf\x9a\x73\x04\x96\x5f\xb2\xb2\xe9\xca\xfb\x8f\x17\xf3\x53\x35\x52\xd2\xcd\x44\xfb\x21\xf1\x22\x1a\x53\xaa\x2f\xf6\x24\x00\xbb\xe4\x54\x35\x5c\x65\x6f\x1a\xa6\xe3\x3a\xf6\xca\xd7\x92\x21\x35\x74\x98\x0a\xec\x6e\xa5\xc9\x03\xee\x5d\x15\x0c\x1d\xb7\xc4\x28\xea\x61\x69\x23\x5d\x14\xf5\xad\xcc\x71\xbb\x31\x7a\x70\xb4\x6f\xe7\x0e\xe6\x7c\x62\x4f\xcf\x61\x37\xf3\x28\x0e\xd1\xa8\x42\xaa\x47\xbe\x67\xd0\x90\x82\x9d\xc4\x3a\xf6\x9d\xe6\xbb\x3d\x29\x42\x5f\xfc\xf6\x9d\x5f\xf7\xc8\x81\xed\xe0\xbb\x45\x53\xa4\xb2\xce\x31\xc6\xad\x5d\x12\x27\xaf\x04\x5a\xc4\xc8\x3b\xc0\x68\x58\x89\xd3\x1d\x93\xd3\xf1\xce\x18\x14\xe8\xae\x13\xdd\x97\x7b\xd3\x14\xd8\xeb\x11\x2e\xe2\x58\x95\x8f\xc2\xc8\x77\x75\x13\x17\xfb\x99\x8e\x4b\x9d\x89\x6b\x79\xba\x37\xd6\x24\xf4\x6f\xf3\xfc\x77\xed\x1d\xc4\xef\xe5\x49\xf0\x63\xec\x1a\x0a\x4e\x1b\x3c\x53\xb2\xb9\xde\x2e\x8d\x26\x6c\xc9\xaa\xa9\x84\x9a\xfd\xf7\x84\xca\x7b\x2b\xfb\x85\xc8\x98\xf6\xc1\x5d\xf6\xea\xa4\x0d\xe2\x62\x4e\xe0\xae\x58\x88\x0d\xed\xc8\xae\x19\xf6\x36\x6d\x52\x47\x3b\xba\x2c\xac\x77\x64\xde\xfc\xce\x8b\xa2\xda\xec\xaa\x49\x82\x17\x6a\xd3\x69\x8c\xbb\xf1\xfa\x88\x11\xe9\x9c\x93\x89\xe5\x5e\x5d\x87\x3a\x40\x25\xe4\xd1\xb1\xe3\x25\x65\x24\x70\x19\xd3\xb3\x30\xa1\xd2\x5c\x8f\x61\xe2\xd2\xf2\x9f\x42\x3d\xc5\x90\x11\x0b\x43\xd8\x97\x6e\xbc\x6f\x59\x2f\x50\x8f\x0c\xd1\xad\x7a\x1f\xa4\xf6\xb7\xa0\xd2\xf8\xd1\x1e\xc8\x5c\xd7\xfa\x6a\x71\x23\xc3\x5d\x8a\x25\x30\x59\x7d\xa5\x70\xc0\xfc\x95\x91\xdf\x6f\x5e\x9e\x59\xa7\x21\x17\xb8\xbd\x09\xb3\xc0\xe9\x4e\x47\x82\x97\xf0\x9d\x35\xe6\x8c\x94\x53\x57\x02\x2e\x5f\x41\x4e\x1a\xe3\x55\xf2\x8c\x4a\xa9\x3a\x18\x17\x64\xdd\xd9\xbc\x93\x88\x22\x60\xc4\xc2\xfa\x3a\xbc\xa6\x2e\xc5\xf0\x28\x25\xa7\x3c\xc6\x5d\x86\x08\x93\xf6\xba\xc0\x4c\x2f\x6d\x23\x54\x87\xe0\x0c\x76\x31\xb8\x06\xdd\x86\x79\x23\x69\x6c\x29\x19\x2c\xe2\x10\x6e\x30\x55\xf0\x6e\xb2\x0c\xd3\x01\xf6\x19\xcd\x9d\x3f\x6c\x67\x7f\xeb\x2e\x32\xae\xd8\x15\xdb\x77\x45\xc9\x5a\xb4\x3d\xc0\xfa\x9b\xa4\xf7\x11\x06\xbb\xa4\xe4\x53\x2d\xf6\xfd\x53\x0c\x03\xc3\x72\xbf\xa2\xa4\x6f\x3b\x81\x04\x9f\x13\xa0\x59\xdb\xe6\x86\xdc\x9c\xbc\x60\xb1\x89\x03\x90\x4f\xcf\x8e\xf6\xac\xb0\x8a\x76\xf3\x43\xbe\x22\x44\xdb\xd5\x3a\x01\x11\xdd\x3b\x4c\x3b\x66\xcf\xbe\x8d\xa8\xb8\x78\xc5\x82\xc1\x51\x24\x36\x9b\x0a\xc2\x1b\x2c\xba\xf4\x94\x6b\x19\x47\xb6\x17\x27\xa2\x39\xbb\x15\x2e\xa8\x2f\x97\x53\x6e\xa7\x6d\x05\xae\x1d\xc3\x91\x8f\xab\xe0\x77\x6b\xff\x22\x00\x79\xe9\xa6\xb0\x12\xda\xad\x7b\xf9\x06\xc0\xb0\x33\xd0\xe8\x36\x7f\xe4\x5a\xbd\x6b\x26\x80\x4a\x4e\x2e\x30\x9c\x03\x69\xc0\x60\x19\xc6\x5f\xb6\x4f\x96\x3b\x6d\xc3\xad\x62\xf3\xd3\xb7\x1e\xb2\x4a\x4d\xc7\x20\x1e\x25\x15\x26\x99\x0f\x6e\x08\x39\xf9\xb1\x9b\xd3\x82\x8b\x94\xe7\xcb\xfa\xdf\x30\x02\xf9\x17\x2e\xd7\xa0\xde\x23\xa1\xe9\xa5\xe4\x53\xa6\x8a\x24\x97\xb0\xb8\xde\xbf\x6f\x17\xd9\x05\xec\x3a\xd9\xb0\x0a\x31\x85\x28\x2f\xb6\x43\x53\x53\x46\x87\x65\xe5\x2b\xb9\x3a\x4d\xe8\x8c\x46\x7b\x16\x87\x20\x7b\xd2\xfb\xda\xa8\xaf\xc3\xd0\x77\x6d\x45\x35\xfc\xed\x57\xcb\x83\xc2\xd7\x41\xa3\x09\x77\x44\x9d\xdc\x44\x49\x1a\x63\xeb\x3a\x53\x2a\x2b\xdb\x61\x1b\xd6\x98\x14\x73\x1f\xf0\xed\x35\x23\x1f\xd7\x58\x3b\xca\x81\xc8\xfe\xe0\xdb\xcb\xa4\x15\x83\xf6\xf0\x5e\x4c\x8f\x8e\x67\x87\xed\xee\xc8\xe9\xf1\xab\xa9\x09\xd8\xd9\xf4\xf2\xea\x7c\x66\xbd\x38\x9e\xbe\x6c\x4f\x10\x6b\x79\x4a\x1f\x0b\xa5\x22\x5a\x37\x6e\xba\x58\x55\xf4\xf4\x44\xcf\x89\x9d\x3b\x5b\xc3\x6b\x4c\xa5\xed\x7c\xdd\x98\x30\x76\x32\x25\x9a\xf7\x1a\x26\x0b\x69\x2a\x57\x2a\x6c\x7d\xdb\x98\x2a\x58\x64\x41\xda\x8f\xa8\x9c\x57\xf4\xee\x0e\x68\x0a\xe3\xe5\x84\x03\x12\x51\x09\x8b\x43\x0e\xf2\x99\xc7\xcb\x73\xf8\x78\x19\x8a\xa4\x76\x51\x09\xa2\xc7\x24\x4b\x6e\xca\x50\x85\x04\x9b\xed\xa3\x17\x87\x42\xdd\x6e\xb2\xa0\x5c\x4e\x41\x1f\xd7\x90\x71\x1a\x72\xbe\x1a\x8d\x37\xfa\x04\x70\xfa\xfb\xbe\x86\xf1\xa2\x46\x17\xd5\xe1\x6d\x7c\xcf\x98\x16\x72\x85\x35\x2c\x07\xf2\x67\x8d\xbf\x20\xc2\x6a\x0f\xdf\xf2\xa2\xe8\x89\x71\xd8\x88\xcb\xe2\x47\xcf\x99\x5a\x1d\x92\x18\x85\x06\x98\xbe\x74\xa6\xa1\xb8\x0a\x5a\xa4\x4a\xdf\x08\xab\x17\x76\x0c\x78\x2b\x93\xa1\xd5\xa6\xf4\x7c\xd1\x2c\xa8\xcf\x2f\x7a\x0f\xca\xc9\x07\x35\x70\x63\x50\x2a\x15\xdd\x3d\xac\xaf\x2d\xb2\xd4\xd1\xef\xe0\x92\x65\x06\xae\x60\x74\x67\x96\x21\x85\x0a\xdb\xea\x88\x90\x0d\x46\x23\x5d\x4d\x4a\xe7\x4c\x29\x7a\x68\x34\x0f\x55\x41\x02\x57\x9f\x08\xa9\x12\xa5\xf6\x3c\x73\xe9\x89\x58\xce\x2f\xbd\x6d\x42\x85\x08\x5a\x47\xe7\x2b\x7f\x7c\xe1\xdb\x58\x3a\x4f\xd4\x9e\x72\xda\xd5\xab\x3e\xaf\x0e\xa7\x87\x23\xee\x4d\xc8\xd9\x7e\xb3\x2f\x35\xed\x0e\xb4\xed\x07\xf4\x61\xa3\xc3\x19\xe3\x6a\xd9\x5a\x43\xa5\x1b\xfc\xfb\x3d\x58\x59\xef\x40\xb1\xc6\x91\x50\x7e\x00\x3e\xe5\x7e\xeb\x51\x2a\x55\x2a\x0a\x4b\x44\x36\xac\x14\x18\x27\xfe\x18\xa9\x7d\xef\x3b\xc2\xa2\x3f\xca\x10\xbb\x9e\x38\x5c\xf9\xfc\x89\xc3\xe5\x56\xa2\x38\xa4\x8a\x17\x18\x32\x89\x99\x6c\xf1\x9a\xe8\x6d\x2f\x2b\x62\x08\xc5\x84\x4a\xb4\x3b\xdc\x79\xe9\x0a\xed\x56\x65\xb0\x2a\xda\x36\x7f\xb6\x63\x0a\x2c\xe4\x73\x2d\x71\xd7\xf9\xab\xa6\xb5\xe2\x99\xa2\xb5\xb7\x8c\x6d\x73\x92\xe8\xf5\xb1\x69\x82\xd5\xce\xf2\x8a\x5b\x9f\x4b\xc2\x78\x36\x34\xb8\x94\xd7\xcc\x91\x57\x77\xae\xd6\x3e\x06\x81\x2f\x67\x97\x97\x47\xa7\x2f\xad\x8b\xcb\xe9\xf9\xa5\xe2\xf6\x75\x30\x3f\x99\x6d\x7e\x3f\x3d\x3d\x9c\x9b\x20\x39\x9e\x3f\x9f\x1e\x5b\xf3\xb3\xcb\xa3\xf9\xa9\xa2\x50\xc6\xfc\x6c\xf3\xfb\xcd\xff\x9c\x5d\x58\xf4\xc2\xd1\x85\x41\x89\x8c\x97\x22\x1e\x64\x3e\xcd\x8b\x14\xab\xf2\x0b\xba\x1e\xd7\x1f\xa2\x8c\x26\xc2\xd6\x18\x9c\x80\x20\x0a\x37\xc1\xb1\xf7\xce\x4d\x41\x4f\x5b\xb8\x2a\x4a\xe6\x42\x63\xca\x93\x63\x92\xbc\xa8\x70\x11\x04\x49\x25\x6c\x2c\xb8\x80\x2f\x6c\x27\x1c\x48\x68\x14\x25\xbb\x6a\x2a\x20\xc7\x42\x38\x3e\x48\x1b\x01\x39\xca\xd2\x3d\x7a\x7f\x5f\x11\xe2\x29\x29\x6e\x7d\xbe\x37\x66\x71\xcf\x56\x34\x40\xed\xc7\xcb\xfc\xee\x2d\x18\xba\xeb\xc2\x7b\x72\x1c\x6e\x29\xc9\x25\xaf\xd7\x66\x7d\xff\x00\xad\x29\xe4\xc8\x6f\x45\x9e\x8c\x97\x54\x12\x65\xe0\xd2\xfc\x71\xb4\xac\xc8\x39\x45\x36\x8c\x5d\xb0\x48\x63\xe1\x0a\x23\xc8\x8e\xb8\x32\x68\x27\xa0\x32\xf4\x61\x56\x8e\xf0\x23\xef\x8a\x2b\x03\x78\x82\x51\x93\xc3\xb3\xe3\xe4\x38\xab\x05\x00\x64\x99\xc9\x87\x92\x10\xf9\x58\xc6\xec\x75\xd0\x3c\xb4\x24\xbc\x06\xf5\xfb\x41\xbb\x1f\x6c\x8f\xb2\xab\x6a\xbb\x71\xa3\x6b\xc5\x74\x6a\x14\x71\xdf\x49\xf7\x6b\x39\xfa\x0f\xd2\x39\xe6\x61\x91\x9b\xf0\x24\x79\x30\x06\x8c\x8d\xa9\xf7\x68\xdb\x52\xbf\x35\xce\x26\x9d\xa4\xed\x41\x27\x0c\x07\x7f\x27\x45\x73\x3a\x0c\xfc\x4e\xbc\x34\x8c\x3d\xc0\x07\xd0\xdb\x2d\x69\x26\x20\x86\xd1\x97\x03\xbe\xb7\xda\x3d\xeb\xea\x37\x91\xa4\x66\x6f\xb8\xd6\xdd\xa8\xb1\xb7\x05\xc9\xb7\xe1\x87\x8f\x63\xef\xb4\xb7\x50\x65\x08\xfd\x4a\x11\x48\x7a\x17\xf4\xe6\xd8\x04\x89\x52\xbd\x75\x82\x2c\xbd\x1d\x12\xb7\xd0\x54\x7f\xbd\x3f\x59\x99\xd4\xbd\xa8\x91\x63\xf5\x80\xb6\x44\x77\x0a\xfe\xf2\x25\x7e\x77\xda\xc9\xc6\x11\x21\xf7\x1e\x4d\x15\x4b\xd2\x5f\x9b\x20\xcd\x21\xa9\xa9\x0e\xa3\xaa\x09\x52\x42\x8b\x7a\x05\x7d\x16\xe8\xd2\x00\x44\xdf\xad\x5f\x83\x8d\xd3\x57\xf4\x43\x7a\x4e\x9f\xf0\xf0\x08\xaa\x25\x8e\x84\x7a\x91\xff\xdd\x53\x4d\x6d\x19\xd8\x8e\x90\xef\x8e\x25\xdb\x35\x26\x3e\x06\x5e\xed\x84\xaa\x87\x66\xe2\x07\xe0\xd0\x07\x18\xfe\xee\x46\xb9\xe3\xc1\x3c\xcc\x02\xff\xc0\x0b\xf6\x03\x6f\xef\x8f\x75\x1f\xef\x72\xc3\x3e\xe0\xce\xcc\xed\xfb\x89\xe9\xb5\x5c\xbc\xad\x6c\x5b\x98\xec\xe2\xf2\x2d\xc7\xc0\x1b\xbf\xef\x2d\xec\x18\x23\x0f\xcb\x1d\x0b\xdd\xa4\x99\xe2\xf1\xee\x63\x49\xb9\x82\xa1\xb8\x1f\xd0\xea\xd5\xa8\xac\xd6\xfb\x72\xbc\x1b\x64\x0f\x33\xe6\x9d\x8d\x6f\x94\xb1\x6c\x3b\xb0\x76\xd8\x6b\x52\xee\xb2\x4e\xb7\x57\x4b\x1b\x9d\x87\xe8\x39\xb9\xc5\x9f\x87\x64\x87\x91\xbd\x7a\xcc\x41\x37\xf4\xc5\x34\xb1\x1b\x0c\x86\x37\x84\xf2\x7e\x37\xb2\xfe\x00\xcc\x68\x4b\x9a\x7a\x7e\x2a\xd7\x8d\x8e\x47\x48\x84\xde\x35\xf5\xf9\xec\x58\x25\xc3\x84\x7f\x8a\x59\x59\x98\xbc\x71\x81\x9f\x30\x93\xa8\xb2\x4d\x72\xdd\x65\x3c\x7f\xcf\x43\xa2\x36\xe3\x47\xb2\x73\x1e\xe4\x02\x83\xd1\x55\xa4\xc5\x36\xba\x07\x72\x73\x71\xbc\x6c\x73\x43\xdb\xa7\x6d\x9e\x94\x3e\x3d\xa5\xe7\x5b\xa1\xb3\xcd\x5d\x6d\x9f\xb6\x7b\x50\xc6\x6a\x34\xad\x33\x66\xc3\x43\xa0\x6b\x74\x23\x4a\x7b\x2a\xc1\x4d\x15\x1d\xa8\x83\xd2\xc2\xcf\x1c\x3a\xf5\xd1\xc8\x27\x02\x2d\xad\xeb\xd0\xb9\x6f\xa5\xf9\xd0\xc6\xf8\x95\xa2\x92\x37\xc1\x48\x50\x4d\x0e\x48\x05\x8d\x28\x7c\xc9\xb8\x72\x05\x01\x5e\xbb\xe9\x2a\x74\xac\x27\x2f\x67\x97\x7b\x67\xf3\x0b\xf8\xcf\xd5\xe5\xde\xe1\xec\x78\x76\x39\xdb\x73\xd3\x45\x7b\x50\xdc\xc9\xe6\x07\x8c\xaf\x61\xf2\x34\x5e\xd7\x27\x2b\x4c\x52\xdc\x30\xad\x98\xb7\x1f\xe8\x0d\x5b\x34\x08\x5b\xdf\x4f\x92\xec\x9a\xc3\x4b\xda\x47\x5a\x7f\xc9\xcd\xc4\x5b\x14\x44\x62\x32\xc4\xa3\xd3\x8b\xcb\xe9\xf1\xf1\xec\xd0\x3a\x3b\xbe\x7a\x79\x74\x6a\x1d\xcc\x4f\x4e\xa6\xa7\x87\xed\x39\x35\xad\xcf\xe9\x5e\xe2\x8e\x96\x01\xe6\x01\x57\xaa\x81\xb4\x62\xa3\x87\xed\xe6\xf2\x1f\x26\xc3\x15\x6b\x3f\x2f\x5c\x21\x0a\xc3\xc8\xcd\xd0\xd1\x2a\x90\x5e\xf7\xe2\x72\x79\x18\xcb\x29\x6a\xed\xe3\x46\x36\x6e\x20\x08\xb0\xf1\x2a\xb7\x48\xad\xab\xc4\x5e\xb6\x73\xe4\x2a\xf5\x8a\x98\x41\x8f\x5f\x32\x4a\x5b\xac\x21\x54\x69\x1f\xcd\x38\xcd\x34\x8a\x3a\xda\xbc\x9b\x85\xef\x05\xae\x75\xe3\xdb\xcb\x04\x96\xf7\xb7\x0b\x37\x4a\xad\xc9\xcd\x27\x58\x24\x1c\x83\x5c\xaf\x5d\xce\xf6\x74\x1d\xeb\x6e\x85\x41\xb9\xdc\x96\xd0\x5a\x67\x7e\xea\x45\xbe\xcb\x61\x69\xec\xe8\xab\xae\xad\x76\x49\xdc\x32\x2c\xeb\xc2\x0b\x28\x2e\xd3\xe1\x6b\x35\xe6\xf9\x05\x2b\x4e\x7b\x15\x35\x02\x9f\xc0\x07\x0b\x89\xcc\x6d\x05\x48\x2a\xe5\x8b\x47\xa1\xe3\xae\x39\xb1\x8e\xc1\xa3\xe4\xfc\x26\xe3\x2a\x08\xb2\x54\x83\xa0\x3a\x4c\x98\x6c\x1b\x08\x93\x59\x77\xd9\xba\x71\xb1\x9b\x88\xfd\x2d\x56\x9f\x86\x45\x12\xbf\x48\xd3\x77\xb0\x6f\x86\x6a\xc1\xf7\x85\x60\x4e\xdd\x79\xa9\x70\x80\x44\xd2\x8f\xba\x6e\x08\x63\x50\x27\x00\x27\xa6\xb4\x35\xbf\x6f\x40\x99\xcc\x91\x59\xdb\xe9\xb3\xa2\x2c\x07\xa6\x61\x60\xb4\x3b\x75\x6d\xe4\xae\x47\xa2\xf7\xd1\x6b\x58\xd5\x8e\x78\x8b\x03\xdd\xa9\x2b\xe5\xb3\x37\xc1\x17\xd8\x3b\xe5\x7b\x6e\xf3\xf2\xe6\x51\x14\x87\x69\xb8\x08\xfd\x37\x80\xee\xcd\xa3\x74\x11\xbd\x79\xb4\x27\x7f\x73\xa8\x92\x0d\x0d\x93\x7f\xfe\xec\xd3\xfd\xcf\x7f\xf9\xcb\xfd\xcf\xf6\x3f\xfb\x6f\xa5\xc7\xa2\x30\x4e\x13\x7e\xe0\x17\xbf\xf8\xf4\xef\xb0\xb9\x0c\x0c\xe7\x4d\xf0\xa5\x06\xc3\xfe\xba\x87\x65\x30\x8f\x9c\xdf\x4b\x81\xe4\x72\x6d\xb4\xb2\xe9\x94\x53\x75\xc9\x60\x29\x1e\x0e\x93\x5c\x78\x99\x9d\x89\xd4\x51\x93\xce\x3f\x51\x70\x8f\x2a\x1c\x70\x1d\x01\x59\xa5\x50\x22\x6b\x25\x4c\x34\xe6\x9c\x08\x10\x67\xd3\xcb\x57\x4f\x2f\xe7\x4f\x59\x5d\x98\x50\x4f\x1e\x6b\x62\x99\x22\xd3\x56\x2e\x18\x7e\xa9\x78\xe0\xf7\x58\x54\x1e\x3f\x71\x3d\x45\x95\x66\xde\xef\xe5\x7e\x0c\x0e\x16\x0a\x25\x07\x1e\xd8\xfc\x7b\xb0\xf0\xcc\x8e\x71\x11\x35\x74\xe2\xae\xc3\xb8\x5d\x85\x6f\x7d\xae\x3f\xa6\x75\x96\xa4\x22\x33\x3d\x0c\x26\x81\xbb\xc4\x82\x0a\xae\x2c\xf6\xd2\x4d\x81\xee\xfb\x3d\x28\xbb\x25\x19\x40\xd9\x7e\x4d\x45\xc9\x5a\x69\x3a\x97\xaa\x1b\xbd\x2a\x4d\x73\x0e\xd5\x89\xbc\xdd\xfc\x11\x80\x9a\xcd\x09\xd3\x73\x2e\xf2\x49\xf1\x5f\x55\x6e\x92\x4c\x04\xcd\x71\x36\xbd\xd4\x1b\xfb\xc5\xc5\xb1\x75\xe0\xc6\x9c\x19\xf4\xbd\xe8\x7e\x4c\x29\x9b\x97\x5e\x74\xe2\x26\x78\x2e\x29\xa8\xc2\x57\x01\x21\x59\x67\x11\x94\x24\x4e\xd8\x6a\x35\x00\xf6\xa6\x98\x6b\xe2\x98\x4d\x60\x51\xf2\xc6\x1e\x7d\x1e\x0b\x3f\xd3\xb3\xf6\xa0\xb3\x4b\xfc\xbd\xc1\x91\x94\xf3\xed\x99\x49\xb4\x99\x24\x81\x3b\x9d\x65\x22\x0b\x0a\x8e\x32\x18\x9d\x68\x2a\x34\x59\x90\xda\xbc\x6f\x9d\xf9\xae\x0d\x6c\x13\x3f\xc2\xf6\x2a\xed\x8a\xf0\xfa\x6b\x3c\x6a\xa8\x36\x0d\x0d\x06\x1b\xf5\x78\x3e\x57\xbb\x81\x4b\x27\x65\x8f\x6c\xbf\xa0\x12\x96\x1f\x0b\x61\xbd\x79\x59\xd4\xb6\x44\xab\x22\x06\xe0\xb1\xa5\xec\x31\x1c\x50\xf2\x50\xc2\x47\xf2\x3e\xcc\x94\x11\xd8\xc9\x89\xa1\x60\xfb\x8f\xc3\x4b\xde\xb1\x01\x9b\x34\xa4\x43\xf8\x53\x18\xdc\xfb\xe6\x77\x1f\x84\x5c\xc7\x04\x20\x2e\x42\x2b\xde\xfc\xb8\xf4\x9c\x92\x38\xea\x0d\x7e\x07\x43\x19\x9f\xfa\x41\x04\xe7\xc1\xba\x8b\x30\x0b\x52\x42\x21\xcf\xb7\x03\xfc\x06\xd1\x1c\x55\x9e\x29\x1d\x7b\x14\xf1\xa9\x73\x64\xfe\x06\xee\x8d\x29\x0c\x01\x07\xc7\x01\xc2\xac\x27\x24\xb5\xd1\x6d\xa1\x9e\xd2\x95\xb3\xf9\x55\x2c\xfe\x52\xab\xfc\x42\x84\x78\x71\x28\x29\x33\xd3\x23\x3b\x39\x93\x7c\x40\xd6\x24\x1f\x15\x6f\xd6\xa4\x84\x59\xbe\xb7\xf6\x98\x45\xac\x95\x1d\xe3\xdf\x5a\x6b\x7e\x04\x88\xc6\xd4\x57\xf8\x5a\x99\x4d\x83\x79\x2c\x94\xdf\x96\x89\x43\x04\x73\xae\x63\xd5\x52\xb7\x68\x17\x33\xd4\x3d\x46\x9f\x5a\x57\xad\xb8\x6f\x55\x6d\x03\x8e\x3f\x5a\xb8\x0e\xc1\x37\xdf\x64\xae\x12\x5b\xef\xe1\xd2\xad\x39\x3f\xb8\x3a\x57\x5b\xdb\xe3\xbd\xf1\x4a\xbb\xd6\xbe\x55\x14\x73\x83\x2f\xdb\x8b\x34\x36\xf6\x9c\xc8\x55\xab\x7d\xeb\xb0\xcc\xab\x32\x9c\xfe\xa4\x35\x6c\x24\xfd\x7d\x49\x4f\x92\x58\x01\x38\x9b\x9f\xe2\xd2\x44\x87\x1a\xd0\x46\xa1\xb6\x97\x20\xd1\x21\x78\x64\x39\xd2\x42\x73\x7f\xb5\x45\x93\xf6\x5d\x28\x2c\x58\xd4\x93\xd2\xfd\xe1\x2e\xb4\x26\x5c\x97\xfc\x8d\x16\xd3\xcf\xec\x78\xf3\xef\x6b\x37\x65\x43\x0e\x97\xf2\xf4\x79\x30\xd5\x01\x28\x81\xf6\x26\x3a\xeb\xe3\x59\x18\x7e\x6d\xe2\x12\x95\x54\x2d\xf6\xfb\x7a\x09\xba\xc7\x9c\x4c\x40\x75\xf3\x5e\xdb\xbe\x66\xc1\xe3\xd7\x24\x17\xe5\xfd\xb3\x56\xd4\xce\x0b\xb8\x14\x6a\xa9\x9d\x5b\x6b\xd5\x24\xa5\x11\x89\xae\x19\x1e\x29\x12\x38\x0e\x59\xcb\x54\x77\x55\xf2\xeb\x95\x69\x1c\x65\xe9\x1d\xdb\x70\xf0\xcc\x71\x84\xca\xa2\x17\x6d\x8f\xe9\xe3\xc1\x02\x89\x68\xa4\x93\xd5\x04\xd0\x58\x97\x92\x67\x9a\xbd\xfb\xad\xa8\x67\xdf\x7a\xd7\x5e\x5c\x54\x3b\xb0\x4b\xd5\x36\x03\x38\xaf\x1d\x37\xc5\x5e\xfd\x54\x9b\x5d\xb8\xee\x07\xd1\x97\xf7\xa4\x92\x19\x55\x58\xac\x18\x7f\x70\xf0\x0a\x5a\xce\xac\x52\x06\x52\x9a\x03\xeb\x4f\x73\x51\x8b\x40\x9b\x8b\x4d\xaf\xf4\x47\xac\x6c\x32\x5d\xa0\x1c\xa9\x57\x74\x8e\x56\xa4\x50\x89\x55\xb4\xe0\x58\x06\x11\x24\x22\xd2\x8c\xe4\x97\x5a\x2d\xbc\xc7\x03\xdc\x7f\x2c\xb5\x4c\x25\xed\x09\x6c\x4a\x50\x1a\x46\x47\x35\x61\xd4\x74\x93\xf2\x5c\x57\xaf\x3f\x02\x38\x05\x76\xc8\xe8\x1a\xdb\x37\x52\xa9\x0b\x7a\xf3\x70\x38\x9b\x02\x68\xb4\x19\x97\x47\xbb\xb9\x6b\x6e\x67\x5e\x7e\xd7\x80\x0e\x8e\xa2\x7a\x62\x8b\x98\x32\x0f\xeb\xa8\x46\x31\xd7\x1d\x67\x67\xb1\x95\xdc\x27\x70\x1c\xef\x89\x28\x19\x32\x3e\x05\xd8\x3e\x07\xa5\x29\xc6\x7d\x89\x9f\xa9\xb1\x35\xf6\xaf\x8e\xb3\x80\xe4\x64\x7b\xd0\x46\x9d\xdf\x92\x0a\x1c\x10\xd3\xb1\xf9\x01\x2f\x33\xc2\xde\xe5\x62\x1b\x96\xcd\x0f\x13\xaa\xa5\x9c\x6d\x7e\x74\x42\x41\x0c\x35\xe3\xc1\xd6\xef\x1e\x92\x60\xb3\x07\x48\x94\x42\x70\x99\xc4\x05\xa0\xb4\xfd\x3d\x20\x2c\xb2\xbf\xa3\xda\xe0\xb2\xd2\x75\x8d\xc4\xfe\xbc\xa3\x50\x21\xde\x72\xb2\x6f\xb4\x98\xd6\xf0\xc6\x70\x07\x0f\x00\xd9\x9f\xfe\x3c\x80\x4b\xb4\x56\xd6\x5e\x83\xf5\x30\x2d\x63\x22\x8a\x16\x8f\x37\x37\x2e\x95\x0b\x96\xe4\x94\x62\xb1\xbb\xc8\x0a\xe1\x55\x8c\x57\x6d\x09\xa3\x1e\x4e\x1c\x0b\x50\x59\x25\x51\x84\xc7\x76\xcc\xa5\xee\xcb\xa6\x34\x91\xda\xda\x45\x8a\x60\x10\x27\x02\x63\x1c\x45\x59\x9b\x2d\xb3\xcb\x94\x9e\x52\xed\x9f\x92\xac\xd5\x58\x4a\x8a\x22\x3f\x43\x24\x6b\x5e\x3f\xc0\xde\x3a\x10\xd4\xf3\xa5\xf5\x62\x3f\x5a\xea\x39\xbc\x82\x47\xa2\xfc\x79\xfd\x57\x2a\xeb\x99\x05\x41\xad\x6f\x47\xe7\xdc\x36\x26\xfa\x62\xaf\xf9\xc8\x76\x38\x4f\x5d\x48\x3c\xd3\xba\x69\xca\xb1\xa4\xf6\x92\xd3\x04\x52\x59\xf6\x66\x14\xc2\xe3\x9c\x72\xe0\x7f\x60\x5c\xf2\x4d\x90\x5e\x49\xc6\x4a\x38\x78\x55\x63\xcf\x08\x17\x8e\x4c\xf7\x77\x65\x5b\xff\x72\x4a\xd1\x60\xa2\x8a\x64\xad\x6e\xe1\xab\x91\x94\x35\x94\x1e\x91\x78\xd5\xcd\x9c\xc6\x04\x2b\x43\xec\xb8\x82\x44\x98\x01\x5c\x2a\x38\xb6\x20\x51\xc5\x24\xe8\xbd\xa4\x4f\x43\x08\xfa\x06\x2e\xe7\xa2\xd5\x0a\x75\x68\xa0\x4a\x53\xdc\xd6\x49\x71\x59\x7a\xee\x87\xdf\x64\x2e\xa8\x13\x5d\xdd\x00\x95\xd7\xeb\xe3\x50\x34\x06\xf7\xda\x95\x84\x83\x30\x70\x17\xd4\xa2\x43\x1c\xbf\x46\x63\x15\x78\x42\x45\x48\x27\x5e\xca\xc7\xc1\xb5\x84\xb9\x71\xf1\x9e\x9f\xb4\xd7\x42\x6c\x7b\xac\x17\x1e\x2a\xdc\x92\xa5\xaa\x55\x53\x8c\x2a\x30\x2d\x29\x88\x98\x62\x0c\xcd\xa0\x2e\xba\x4e\x14\x7a\xe8\xa7\xf1\xb8\x3b\x20\x79\x39\x59\x6c\xa8\xe3\x77\x2f\xf9\xbe\xef\x5b\x7e\x09\x9c\x0d\xb3\x82\xc5\xde\xdc\x4a\xa8\x63\x59\x0a\x99\x89\xc0\x30\x7c\x47\xb1\xfa\x11\xd9\x9b\x6e\xf2\x1e\xaa\x8f\xb7\x6b\xb4\x54\x1d\xb4\x8a\xf9\x1a\x0e\x52\x9b\xfe\x13\x2c\x45\x8b\x95\x2b\xa2\x7b\x59\x54\x54\x28\x52\x8b\xd0\x11\xd1\x10\x30\xa9\xf5\xce\x30\x76\x10\xc2\x86\xc6\x1e\x4b\x57\x01\xf9\x24\xb0\xad\x7b\xec\x39\x8e\x1b\xec\xf1\x35\x18\x00\x4e\x72\x48\x1c\x61\x75\xe7\x51\x35\x1c\xae\x60\x4a\xcd\x9d\x4a\xdd\xd1\x5a\xd9\xf1\x11\x52\xd8\x97\xbb\x28\x10\x26\x79\x94\x42\x5d\xff\x29\x29\x9d\x58\x86\x9b\x86\xa8\x28\x7a\x6c\x7f\xe7\xe2\x01\xb1\x26\xbf\x4c\xb6\xce\x4f\x07\x54\x10\x60\xf7\x51\xac\x8c\xeb\x17\xa9\x1e\x70\xa1\x4d\xdd\xaf\xed\x72\x03\x74\x36\x66\x96\x0c\x65\x46\x43\x2b\x85\x3b\x8b\xe2\xe1\x30\xb6\x8c\xb4\x80\x9b\xcc\xf7\xef\xb1\x98\xb1\x62\x56\xfb\xbd\x6e\x48\x97\x97\x94\xea\x2f\xd7\xcc\x36\xd8\x7e\x69\x81\xdb\x68\xcf\x8a\xaa\xb1\x22\xae\x87\x4b\x87\x02\x7a\x61\xb5\x51\xf2\x03\x35\xd4\xed\x68\x51\xfe\x90\xa8\x7b\xf0\x23\x12\x97\xde\x50\x5e\x27\xa8\xa9\xde\xca\x4b\x94\x0d\xca\xe0\x3d\x3e\x74\xe5\x4d\xc2\x8a\x6d\xef\x3b\x59\x43\x2e\x75\x87\xf5\xb2\x3b\xb1\xbf\xa5\xc6\x64\xe4\xd2\xc8\x2b\x3a\xe6\x3b\x82\x36\x60\x16\xed\x51\x53\x29\x2f\xc8\x54\xfa\xc1\x65\xad\x27\xd9\x7a\xf3\x47\x6a\xfc\x24\x72\x86\x1a\xea\x1d\x4b\xba\xf7\xf0\x30\x20\xf0\x86\x3b\xa0\x3e\x86\x42\xbf\x11\x8a\xfb\xf0\x01\x94\x14\x74\xab\x5c\x55\x76\x38\xed\xde\x1a\xa3\xfe\xd7\x14\x0a\x01\x72\x55\xf8\xc7\x78\xe1\xe5\x82\xb4\x88\xab\x80\x1f\xa8\xc7\x13\x67\x01\x7d\xf6\xe9\xe7\xbf\x3c\xd9\xb3\x3e\x7b\x09\xff\xff\xf4\xa5\x22\x4d\x6a\x57\x78\x3e\xd4\x48\xf7\xad\xc9\x67\x78\x02\xc3\x21\x41\x35\x5a\xe1\xe1\x2c\x60\x2f\x9a\x23\x70\xa8\x8e\xb2\x0f\x48\xcb\xc7\xcc\x31\xeb\xc9\x21\xb7\xcf\x7b\x56\xfc\xb6\x83\x45\xb5\x2b\xfa\x74\x2f\x21\x92\x70\x12\x18\x4f\x40\x34\xc0\xb5\x3f\x0c\x9c\xe4\x13\x92\x1e\x07\xc7\x47\x28\x99\x49\xa4\xd4\x2e\xfb\x2c\x10\xf7\x2c\x52\x69\x44\x74\xaa\x95\xe0\x79\x21\x5c\xc2\x09\x1c\x11\xf7\xf4\x46\x7b\x30\x76\x5d\xce\x08\xdf\x6f\xa3\x9c\xa4\x6c\xa2\x25\x9c\x5c\x2d\xd2\x45\x3d\xcc\x92\xab\x5d\xac\x89\xcf\x7f\xf5\x77\xc8\x72\xc9\xf9\xf6\xb9\x6d\xf0\xae\x77\x41\xd0\x5f\xd8\x1c\x2d\x2c\x9c\xf4\x5d\xa1\xc8\x1d\x4f\xeb\x63\xa5\x36\x02\x6e\x83\x03\x25\x57\x5d\x2b\x85\x39\x0a\xdd\xb5\x9d\x34\x04\x19\xb7\x38\x51\x64\x42\x17\x02\xab\x18\x2f\x40\x11\x85\x95\x12\x9b\x1c\xd7\x98\x49\xd1\x4a\x4d\xf5\xc7\x5e\x30\xdb\x2f\xad\xa7\xf3\xca\xaf\xfa\x50\x55\xa9\xb3\xd8\x6e\xd5\x04\xa6\x7b\x67\x9d\xd9\x49\x72\x17\xc6\x8e\x02\xf6\xad\x6d\x5d\xb8\xc1\xca\xc4\xcb\x86\x18\x94\x49\xbf\x00\x1d\xbd\x63\x66\xe4\x87\xd8\x54\xb4\xb8\x4f\x27\x2e\x08\xb4\x2b\xd0\x39\xf1\xf6\x08\x37\x6e\x2f\xb8\xf4\x22\xbc\x5d\x8a\x98\x09\x78\x58\x7c\x81\x7a\x22\x5b\x9c\x61\x5d\xca\xf7\xdb\x8f\xb7\x53\x18\x3d\x4a\x37\x79\xfd\x46\xac\xb2\x6f\x29\x60\x24\xdb\x78\x03\xd6\xac\x86\x95\x04\x12\xbf\x17\x1b\xd4\x6b\xc2\x6c\xc1\x05\xdf\x02\x6d\x6c\xc2\x60\x59\xbf\x03\x14\x14\x40\xe7\x70\x6f\x1c\x69\xaa\xc4\x9d\x06\xf7\x3d\xdc\x28\xe4\xfe\xd9\x2a\xed\x23\xf7\xa5\xf4\x14\x71\xe5\x5a\x50\xe7\x53\xcc\x06\x85\x3d\x08\xdc\x2c\xd5\xa0\xca\x1f\x11\x99\xa4\xa8\x76\x57\x8a\xac\xc0\x8f\x5d\xdc\x83\x6b\x99\x90\xc0\x37\x6e\x9a\xd9\x8e\xbd\x6f\xcd\xa5\x61\x74\xf3\x87\xc2\x43\x44\xbb\x3b\xb1\x4a\x75\x5d\xb6\xc9\x2f\x87\xf2\x61\x83\x14\xcc\x4d\xb0\xb0\xf1\xcc\x75\x82\xf9\xf7\x41\xea\x72\xef\xd9\x95\x7d\x0d\x53\x93\xe6\x15\x71\x5a\x3c\xf2\x56\x2d\xff\x54\x55\x1a\x7c\xd7\xf3\x26\x58\x7b\x06\x5c\x10\x83\x25\xd9\xf9\x57\x30\x89\x76\x28\x24\xb3\x20\x3f\x9f\xac\xbf\xad\x99\x8c\xbc\x16\x81\x23\xd3\x13\xb0\xf5\x56\x55\xb0\x74\xdb\xf3\xe0\x30\x43\x99\x12\xd8\x61\x8b\x5c\x91\xc0\xcb\x22\xc4\x4c\x62\x72\x66\x37\xde\xdd\xbb\xc4\x5d\xa9\x77\x77\xd1\x8c\xd8\x0c\x69\x11\x74\xa3\x87\xba\xb8\x6f\x0e\xc5\xbc\x58\xd9\xc1\x12\x16\xc6\x9d\x4b\x55\x12\x1c\xd5\x49\xa4\x7a\xb8\x0f\x4e\xe9\xdb\xd4\x1a\x6a\x6e\x85\x18\x3a\x52\x45\x6f\x8d\x2e\x1a\xb8\x33\x46\xdd\x78\xd6\x02\xa2\x0f\x4d\x5c\x80\x00\xb4\xf2\x05\xbd\x42\x19\xef\x5b\x4c\xee\x3c\x77\x93\xa2\x82\x00\xa9\xf8\x0b\x91\x48\x07\xe0\x84\x54\x62\x9a\xa4\x5f\xeb\x26\xf4\xac\x1b\x17\xa4\x85\xc9\x25\xf1\x94\x8a\xb1\x73\x51\x54\x72\xc0\xb3\xa2\xe0\x3a\x7b\x68\xed\xa4\xcd\x28\x6a\x2c\x6c\x29\x12\x95\xf7\x54\x83\x62\xa2\xab\xa2\x09\x8e\x84\x72\x84\x50\x2e\x07\xf6\x84\xef\x7d\x0b\xf5\x70\x51\x80\xf4\xe6\xdd\x1a\x1a\x86\xf9\x82\x0b\xe8\x14\x38\x5b\xc7\x34\x6f\x1b\x4a\x1e\xb8\x59\x1b\x86\x02\x74\xdf\x11\x8c\x48\x78\x1e\xa6\xfb\xa0\xd4\xb6\xaf\xa6\xee\xe3\x78\x3b\x00\x42\x2e\x9c\xfa\x18\x9a\x17\x8e\xf9\x0e\xd1\x13\x6f\x75\x0a\x73\x21\x67\x74\x99\x08\x8b\x08\x27\x1d\xd4\x58\x32\x7e\x38\x46\x11\x5a\x51\x6d\xf2\x44\x56\xa1\x6b\xd7\x45\x4b\x47\xfb\xf9\xde\xf7\x75\x13\xba\xea\x01\x16\x4a\x7a\x58\x9e\x36\x35\x87\xa9\x04\x7b\x0c\x3e\x8b\x74\x63\x3b\xdb\x09\x32\xc5\x5b\x2d\x03\xab\x75\x02\xcb\x98\x84\x8a\x49\x61\x38\x07\x98\x12\x6c\xcc\xd2\xab\x2d\x89\x6a\x31\x8d\x00\xd4\x74\x0c\xdf\x37\x36\x97\x41\x0f\xd0\x4e\x46\x37\x3a\x3a\x93\x71\x17\xa1\x85\x9a\xa2\x8e\xc2\x09\x9b\x97\xd1\xb0\x05\xad\xb9\x92\xc7\x5b\xbd\xc3\x55\x82\xd9\xc3\x68\x00\xfd\x74\xb4\x6e\xd5\x8c\xd4\x61\x63\x3d\xcc\xf0\x38\x15\x81\xba\x76\x92\x78\xcb\xc0\xed\x9c\xe6\x9c\xbe\x84\x34\xe3\x61\xb3\xac\xb9\xb4\x24\xce\xc1\x2b\x4b\x04\xfe\x19\x1e\xa7\xbd\x5e\x37\xa1\xab\xd6\xa5\x65\xc0\x69\x5a\xf2\x6f\x0e\x66\x1a\xc5\xc9\x17\x81\x16\x46\xcc\x13\x42\x4a\xb6\x8a\xf4\x2b\x9d\x22\x65\x88\x85\xcd\x21\x16\x32\x2a\x1e\xbe\xb6\xd7\xb9\x46\x69\xe2\x8f\x3d\x0d\x39\x48\x44\xd6\x25\xda\x39\xe9\x79\x74\xc8\x18\xb4\xa7\x14\x69\x45\xe5\x94\x0a\x43\xcf\xc1\x0b\xb2\xf2\x56\x25\x0c\x3c\x87\x0f\xb5\x8f\x81\xd6\x41\x92\x6e\xfe\x68\x89\x58\xb2\xba\x89\x67\x1b\x2c\xfb\xc9\xc9\xd2\x86\xf1\x0a\x5b\x28\xfa\x0c\xc4\x7d\xc6\x91\x11\xe8\x4d\x4b\xa9\x4b\x77\xb8\x66\x27\x9b\x62\xbb\x69\xbd\xa5\x4f\x45\x5e\x98\x2b\xf7\x14\xb5\xe2\x6e\xad\x47\x60\x80\x77\xfe\xeb\xf6\xeb\xdf\xaf\x4d\xe0\x71\x8f\xe6\x76\xa0\xf5\xdf\xf5\x21\x9f\xbf\xb4\xa6\x87\x27\x47\xa7\xad\xb0\xe9\xd7\xa3\x8b\xcb\xf3\xe9\xe6\xf7\x9b\x7f\x9b\x5b\x87\x53\x0b\x5e\x32\x45\x75\x75\x78\x74\x39\x3f\x6f\x1f\xc8\xd5\xeb\xa3\xd3\xcb\xd9\x30\x24\x27\xd3\xd3\xe9\xcb\x59\x3b\x12\xf8\x6d\x36\x14\x89\x62\x2e\x2a\x3f\xea\xc3\x54\xe4\x21\xcc\x8d\xb2\x56\xe6\x78\xf7\xa7\x34\x27\x4e\x4c\x4a\xca\x69\x0f\x25\x87\xb8\x0a\x6d\x4f\x00\xbd\x68\xab\x78\x02\x6c\x3f\x76\x6d\xe7\x5e\xf4\xee\xd7\x34\x9e\x54\x20\x7c\x0d\x72\x8e\xde\x36\x11\x14\x5b\xf4\x54\x6b\xfc\xa0\xcd\x4a\xc4\xa0\xb1\x7b\xc3\xbb\x56\xc4\xcc\x6e\x01\xa3\xba\xa2\x4c\x1b\x5b\xaa\x50\x26\x83\x1e\x85\x90\x28\x88\x70\x7c\x8a\x15\xe5\xab\xdb\x59\x58\xa2\xd3\x44\xe6\x03\x20\x45\x17\xf9\xca\x8f\x7d\x60\x76\x67\xa4\x55\x86\x64\x82\x84\xc3\x59\xdd\xbc\x82\x95\xc3\x11\x2a\x32\x42\x3a\x0f\x31\x6c\xa5\xe0\x22\xbb\x4e\x52\x2f\xe5\xda\xc2\x6b\x2f\x58\xc9\x86\x18\xf4\x6e\x8a\xc1\x17\x0d\x31\xd2\x9c\x3e\x32\x2e\xc9\xa2\x50\x95\x36\xe5\xe6\x80\xfa\xd3\x2a\xa3\x81\xe1\x3c\xae\x05\x04\x53\x50\x27\x0b\x16\xac\xb1\x1b\x87\x01\x55\xa8\xb5\x6f\x52\x0a\xd0\xad\x44\x17\x47\xbe\xab\x0a\x01\xdc\x31\x36\xed\x51\x9f\xd9\x9e\x53\x89\x46\x69\x27\xf9\x4c\x38\xa0\xcb\xfd\x7f\x22\x7b\x69\x14\x8d\x88\xc1\x15\x5c\xd4\x02\x73\xf5\xc9\x61\x49\xf5\x0c\x30\x1c\x9a\x22\x83\xe1\x4a\x5a\xb2\x10\xe6\x83\x97\x1a\x32\xdf\x42\xda\x49\x1d\x19\xfc\xa8\xe3\x2a\x5d\xd5\x76\x31\xae\x3e\xe0\x7b\x8d\x4b\x19\x0c\x63\x1a\x07\x23\x01\x5b\xb0\x1f\xc8\x53\x45\x2b\x3f\x3f\x25\xd6\x76\xba\x58\xb5\x22\x7d\x2d\xde\x29\x65\x6d\x61\x05\x6d\xf4\x16\x93\xed\x12\xc3\xdf\x8d\x7c\x95\x67\xb2\x46\x60\x14\x15\x32\x85\xf2\xfd\x31\xa6\xea\x3b\x2f\xe2\x80\x6f\xb1\x67\x51\xf1\x20\x17\x63\xb1\x87\x35\x44\xda\x4e\x70\xe8\x3a\xec\x25\xf2\x0a\x62\x89\xb3\x95\xe4\x83\xf2\xa1\x51\x3a\x32\x40\x5b\x90\x19\x36\x00\x63\x00\xbf\x3b\x03\xee\x2b\x14\x8c\x54\xad\xff\xcc\x8d\xb1\x0c\x34\x6e\x1d\x0f\x05\xa9\xb5\x58\xb9\x9c\xb0\x26\x0b\x89\xb8\x58\x0c\x9e\xa3\xf4\xd9\xd1\x22\xc3\xfa\x7d\xa9\x0a\x22\xfb\x60\xbd\xb6\xeb\x33\xbb\x41\xa2\x3f\x46\x8c\x95\xa9\x69\x8b\xb2\xff\x6e\x5b\xfc\x8c\xf2\x20\x30\x07\xd6\x8f\xe6\x02\x5e\x29\xf2\xa7\x28\xd6\xaf\x36\xd1\x9d\xc9\xb0\x9b\x6d\x10\x79\x11\x7d\x8a\xb0\x19\x64\x87\x6a\xa7\x73\x65\x53\xd6\xfc\x76\x1c\x28\x2e\x75\x0e\x12\x35\xa6\x1d\x09\xde\xfc\xb0\x6e\x0d\x09\xa5\xac\x6b\xca\x18\x58\xa2\x95\xdd\xe8\x90\x06\x94\xcf\x1a\x49\x50\x53\xdd\xf5\x4e\x0f\x02\x28\x53\x66\xb1\x0a\xc3\xa4\x48\x94\xf1\xfd\xf0\x0e\xb7\x02\xc6\x88\xe1\xe7\x7d\xeb\x79\x08\xe2\x83\x43\x2a\xec\xd8\xa5\x55\x19\xe1\x9e\x4a\x31\xa0\x1b\x78\x7d\x8d\x7a\x63\x92\xb8\x79\x56\x4e\x82\x59\x36\x22\x05\x4c\xb1\x67\x01\xc9\x8d\x7d\x4b\xc1\x15\x8b\xd0\x5f\xa1\xcf\x34\x05\xf8\x0c\x1b\xcb\x24\x64\x34\x17\xd2\x5c\x85\x05\x30\xd6\xd7\x1c\xad\x97\x54\x9a\x3b\xd0\x8c\x6d\x7e\x90\x6f\x3a\x21\x17\x53\x48\xd6\xa1\xec\xf5\x60\xb6\xa9\x89\x3d\x4e\x18\x3c\x56\x85\x52\x51\x0e\xe4\xad\x07\xaa\xa4\x39\x0e\x36\xb1\x59\xf6\xd2\x56\x64\xd3\x16\xfc\x62\x4b\x1e\xce\xc4\xad\x4d\x71\x6a\xe6\x98\x65\x9a\x14\x4d\x1b\xf9\x34\xee\x60\x1d\x14\x15\x36\x8a\xf6\xa6\xa5\x4a\xbe\x3d\x4d\x08\xbb\x44\xd5\x63\xbc\x74\x93\x51\x86\x33\x8b\x67\x5a\x9b\x01\xa9\xcf\xfc\xe2\xe5\xa2\xe2\x7c\xe3\xb5\x5c\x07\xbf\x36\x88\x31\xc8\xc3\xcc\x35\x61\x7a\xa1\x50\x51\x23\x02\xdb\x81\xf4\x9d\x23\x4c\xc0\x25\x1c\x8e\xf5\xe6\x51\x25\x21\xf7\xcd\xa3\x9a\x8d\x28\x4f\xf7\x43\xff\x9b\x88\xf2\xa7\x57\x15\x62\x67\x27\x48\xfa\x8f\x91\x1a\x76\x01\x76\x71\x8a\x5d\x83\x44\xc3\x8c\x9b\x3c\x75\x15\x8f\xfc\x7b\xb8\x81\x5a\xf3\x8b\x67\xed\x69\x9f\x43\xc1\xf5\xa5\xbb\x3e\xeb\x95\x04\xd3\x2c\xf0\x64\x81\x83\x4e\xfe\x37\xae\xa1\x36\x68\xc6\xcb\xbd\x8e\xe0\x16\xbe\x80\x6b\x4d\xe2\x51\x7f\xe6\x0a\x3a\x7d\xd2\x95\x54\x37\x81\xd1\x26\x3a\xc6\xe8\x5e\x8c\xc8\x95\xfd\xdc\x1c\xcf\x5e\x06\x61\x92\x7a\x0b\xd2\x6a\x92\xd4\x51\x95\x41\x90\xa5\x6a\xf0\xa5\xcd\x4f\xf8\x16\x1b\x14\xb8\xa5\x5b\x82\x90\x4d\x66\x9e\xa8\xc2\x32\x99\x98\xe2\x94\x90\x2d\x05\xef\x31\x5c\x0b\xac\x76\xb9\xaa\xdd\xa5\x6c\x19\x84\xb9\x50\x5f\x7d\x04\xe5\x08\xbe\x56\x13\x0b\x6b\x86\xd5\x2e\x43\x84\x60\xf3\x17\x27\xac\x75\x5a\xa2\x18\xcd\xcd\x8f\x80\xcc\x48\xcf\xa4\x61\xe2\x00\x6e\x79\x81\x74\x11\x8b\x8f\x99\xd9\xed\xce\xe2\x10\xb6\xe4\x5a\x44\x9e\xc3\x29\xe7\x84\x77\x81\x1f\xda\xe8\x63\x15\x1b\x17\x8f\x45\x77\x5d\xba\x84\xaa\x64\xc0\x40\x70\x7d\xe8\xa6\x52\x9d\x4d\x95\x40\x8b\xbc\xec\xa2\x2a\xf0\x25\xfa\xf0\x6e\x5c\x3b\xcd\x62\x91\xbe\x0d\x9a\x4e\xb0\xc4\x54\xbb\x2c\xc2\x2e\x3c\x18\x9a\x2b\xb4\x03\x22\x1e\x9e\x4a\x39\x95\x00\x65\x17\x6a\x43\x8a\xcd\x08\xf8\x63\xa0\x1a\x7d\x75\x4d\xf4\x14\x21\x30\xa4\x0d\xe6\x2d\xb8\xac\x19\xae\xb1\x1b\xd9\xad\x43\xea\x8e\x6b\x1b\x08\x04\xb2\x80\x2a\xca\x2f\x28\xb4\x2d\xa2\x0c\x94\x53\x2b\x25\x5d\x2f\x57\xba\x8c\xa4\x3f\xeb\x40\xed\x99\x68\xf8\x80\x0b\x5a\xad\x09\xec\x2c\x5e\x96\xbb\x52\xd7\xef\x8a\xaa\x52\x23\xe7\xc4\xfd\x40\x95\x33\x61\x56\x80\xe4\x2c\x4b\x56\xd8\x22\xc6\xbd\x23\x9b\x0a\x06\x51\x61\x77\x10\x19\x8c\x4d\xb9\x79\x7c\xcc\x8a\x3a\x52\xed\xbb\x0e\xdb\xae\x71\xc1\x70\xcc\xdd\x2a\xc5\x8b\x83\x48\x80\xfb\x00\x36\x0d\xa1\x4b\x42\x29\x28\x1b\x53\x33\x36\x7f\xc0\x77\x0a\xc7\x90\xa1\xba\xcc\xe3\xc0\xba\x29\xdc\xa6\xce\x7a\x82\xda\x2b\x0e\x08\xff\x65\xe9\x28\x17\xd9\x27\xcf\x14\x3d\xc5\x8a\x71\x6c\xfe\x12\x60\x8d\x46\x02\x86\x09\x24\x38\x0e\xbc\x52\xca\xa5\x5a\x05\xa3\x4d\x2a\x35\x48\xb0\x0e\x29\x00\x81\xd4\xe9\xef\x45\x0b\xe7\x7e\x5e\x36\x06\x90\xdb\xfe\x16\xe5\x66\xd0\x63\x78\xdb\x98\xcc\x34\x14\xe1\x47\x32\x09\x09\x56\x0a\x9c\xa2\xb2\x7e\x05\x86\x2e\x63\x1f\x41\x51\xc5\x91\x82\x02\x42\x2a\xbe\x8b\x96\xfd\xcc\x4f\xf9\x10\x22\x08\x64\x8a\x85\x33\x47\xfa\x2e\xa8\xd4\x5c\x7b\x62\xec\x83\xe3\x1f\x97\x33\x7c\x83\xfa\x90\xbc\x19\x97\x82\x9e\xdc\xa9\xad\x44\xcd\x0b\xd6\x41\xc3\xab\x25\x7f\xa7\x01\x35\xe7\xb3\xdf\x5c\xcd\x2e\x2e\xdb\x5d\x9e\x67\xb3\xc3\xa3\xc3\xb9\x89\xd7\xf3\x7c\x76\x71\x36\x3f\xbd\x50\xe4\xf4\xd2\x13\x17\x97\x53\x23\xe8\xf3\xe3\xd9\x85\x4a\x4e\xbd\xb8\x3a\xdd\xfc\x7e\xf3\x3f\x6b\x0f\xf5\x80\x7f\x75\x39\x6b\x0f\x90\x38\x9f\x5f\x4e\x4d\x22\x24\xce\x5d\x1b\xb5\x6c\xc7\x45\x8f\x1c\x6c\xcf\x08\x0e\x12\x2c\xec\x4c\xf1\xf9\xff\xc0\x6a\xc0\x3a\x52\x35\x6f\x38\x74\x13\xac\xde\x03\x8b\xd8\xe7\x1c\x3f\xd6\x3c\x62\x0a\xdb\x87\xe3\xe2\xa7\xf8\x66\xf3\xa7\x16\x50\x86\x64\x0a\xcb\xed\x49\x08\x7f\x5f\xde\x47\xb8\xea\xe4\x9f\x52\x26\x83\xce\x83\x29\x89\xf7\x29\xf5\x43\x85\x2d\x13\x2e\x3c\xda\x65\x74\xca\x78\xe9\x3f\xf4\x1f\x8f\x1a\x23\x50\x95\x39\x64\x1f\xb3\x42\xaa\x7c\x84\xbd\x13\xf1\x35\x81\xdb\x09\xff\x61\xf7\xe3\x1e\x7b\x54\x03\x48\x16\x06\xe3\x86\x90\xee\x4a\xc5\x77\xae\x31\x10\x09\x9b\xf4\xdc\x77\xb6\xed\xc7\x29\xe9\x4e\xa7\xee\xdd\xd6\x4f\xff\x80\xcd\x2e\x7f\xd1\x7e\x0b\xda\x1a\xf4\x9a\xeb\x12\x74\xd1\xe4\x94\x52\x60\x1b\x49\x92\xb5\xf6\x1b\x89\x32\xe7\x59\x04\x1a\xa7\xbb\x15\xb6\xbe\xed\xa4\x20\x9e\x1d\xf8\x61\xe6\x58\x2f\xf0\x96\x10\xdf\x1b\x4c\x7c\x43\x94\x7b\x43\x5a\x6f\x2b\x9a\x1e\x63\x5b\xb8\xb0\x11\x1c\xd9\x38\x80\xda\xe6\x2d\x64\x1b\xbd\x54\x14\x48\x6b\x3f\x62\x5a\x1b\xee\xc1\xcd\xcb\xbd\xf6\xf8\xd6\x6a\x46\x57\x06\xf7\xd2\x5b\x17\x18\x2f\x2e\x4b\x45\xe9\x57\x94\x1f\x8b\x95\xe7\x3b\xa2\xb1\x5a\xd2\xc0\x73\x6a\xf9\x72\x8d\x77\x2d\xa9\xb1\xae\x6d\xaa\x8b\x27\x8c\x0d\xac\x8d\xd7\x72\x59\x3a\x6e\x0c\x78\x3b\x62\xb2\xf8\x4e\x54\xa9\x9f\x86\x33\x95\x25\x44\x11\xb6\x37\xbd\xf1\xb8\xd5\x76\x68\x5d\xc3\x12\x26\x36\x38\xd4\x57\x19\xbe\xa9\x10\xba\x47\x6a\xf0\x8d\xa8\xcb\x16\xa4\x76\x2a\xe5\x54\x53\xca\x8c\x89\xeb\xe5\x5c\xf2\x2f\x2a\x8c\x81\x5c\x01\xb0\x63\xbc\xea\x57\xfa\xe3\x17\xb5\x96\xb1\xc3\xa4\xe8\x7a\x8d\x51\xcb\x9d\x4c\xc7\xa8\xe4\xfc\x06\x5b\xb4\x61\x10\xf6\x90\x01\x15\x30\x73\xc2\xb2\x58\x14\xe7\x17\x74\x05\xca\xbb\x59\x99\x2e\xca\x7e\xbb\x3a\x3f\x96\xc6\x99\x21\x55\xcd\x24\x39\xd4\xc6\xa2\x94\x00\xcf\x1e\x01\x58\xbb\x9d\xd3\xa5\xf1\x66\x6f\x6a\x82\x4a\x34\xb9\x16\x53\x1a\x43\xc8\x07\x91\x80\x37\x93\x81\xeb\xa6\x9e\x24\x39\xce\xea\xa9\xa7\x49\xa0\x94\x7e\x6d\xc7\xe5\xa3\xa0\x9e\x27\x8e\xb7\x84\xb0\x1e\xca\xf8\x54\x6c\x0e\x14\xf2\xf8\x41\x6a\x4a\x09\x7e\x73\xc0\xbe\xfb\x2b\x18\xb4\xae\x61\xa3\x39\x8a\xbf\x42\x9c\x13\x6e\x93\xc6\xd5\xbe\xeb\xa4\xc9\x0d\x57\x23\x0e\xa4\x54\xa8\x26\xaf\x3f\x2f\xe3\x4a\xfb\x59\x66\x20\x15\xc4\xc5\xc6\x42\xb4\x9a\x19\x4d\x89\x89\xfc\x35\xd0\x5b\x65\x23\x7f\x4d\xf4\x0e\x61\x64\xbe\x80\x0a\xa2\x9c\x52\xfe\x43\x9d\xac\x82\x81\x55\xb2\x4a\x2c\xac\x12\xf6\x11\x32\xf1\xc3\xf2\x6a\x37\x0c\xc9\x78\xf5\x53\xfb\xdf\xb1\xb6\x25\x92\x16\xf4\x30\x36\xc6\xe2\x3e\xce\x44\x8c\xb6\xfd\x5a\xc8\x18\xca\x25\x83\x31\x99\xe2\x27\xef\x98\xdd\x54\x9f\x7b\x0b\x2f\x16\xb1\xd2\x28\xe6\xad\x89\x51\x5b\xfb\x13\x68\x5b\xf2\x98\xcd\x94\xb2\x1a\x0d\x9d\x8d\x10\x4a\x54\xd8\xa5\x48\x9d\x32\x21\x83\xe8\x50\x26\x6d\x96\x59\x60\xde\x06\x4b\x22\xeb\xd2\xaf\x0a\x5c\x03\x15\x2a\x89\x4e\xd5\xf2\xa2\xc2\xd7\x70\x60\x5c\x3d\xa1\x14\xc6\xfd\xea\xde\xce\x2f\xca\xbb\x16\x37\x34\x9a\xa0\x49\xbc\x94\x2e\xc6\x1f\x56\xe0\x08\x1e\x15\x05\x88\xf8\x2a\xff\x5c\xfe\x5d\x67\x59\xed\x07\xcd\xf1\x77\x81\x2f\xb1\x43\x85\xa0\xff\xb8\xb6\x58\x5a\x9f\xfb\xfe\x13\x1a\xd0\x88\xb6\x00\x6f\xcf\xe8\xe8\x93\x54\x95\x91\x82\x95\x9a\xe3\xd2\x1a\x54\x63\x65\x88\x0a\x1a\x9d\x51\x8e\x31\xc4\x2d\x0b\x4b\xdd\xb8\xf5\x00\x0a\x7c\xbe\x7a\xdb\xed\x3e\xdb\xf6\xad\x0f\xae\xbd\x4b\x46\x4a\x16\xa0\x5d\xae\x84\xab\xe0\x63\xe9\xcb\x26\x2e\x1a\xb1\xab\xdc\x9b\xb1\x01\x79\x99\x5d\xa5\xaf\x9b\x98\x35\x2a\x4f\xa2\x50\x1d\x7f\xd7\xf0\x44\x7f\xe8\xd6\xc4\xa2\x0e\x31\xb2\x01\x24\xa9\xb6\x5f\x63\xd5\x43\xf2\x4f\x69\x99\x7a\xcc\x41\xf5\xa2\x97\x5f\x56\x44\x76\x34\x3f\xd4\x03\x07\x66\xab\x68\x68\x17\x13\xae\x1a\x30\x86\x7e\x21\xf3\x63\x1e\xf4\x8e\x2f\xe8\x6f\x3c\xe2\x3f\x9c\x08\xe0\xcc\xb3\x4e\xe6\x17\xa5\xa2\x47\xe2\x7f\x4c\xb1\x14\xe5\x22\x35\x45\x5f\x72\xd1\xf1\x23\x4f\x82\xab\xb0\xaa\xc7\x61\xb5\x1b\x34\x3d\xc6\x99\xc6\x9e\xcb\x96\x30\x2f\x70\xbc\x5b\xcf\xc9\x6c\x3f\x8f\x35\xc2\x60\x75\xf6\x9c\x01\x41\x69\xd6\x1e\xe4\x60\x0c\xc7\x84\x52\x87\x5a\x86\xf8\x58\xd3\x60\xe5\x5a\xf3\x69\xde\x4a\x2b\x4f\xef\xc8\x1b\xa0\x62\x76\xb1\x22\x02\x6d\x1c\xa0\xc3\xc7\xb0\xf4\xe0\xce\x8b\x13\xfd\x38\xb1\x96\x99\xe7\xec\x5b\xd6\x14\xcb\xbd\x52\x84\xec\xca\xb5\x7d\x20\x86\x2a\x13\x12\xf7\x30\x86\x30\xca\x8a\x64\x16\xea\x50\x41\x41\x57\x58\x2b\x3e\x51\x45\x5e\x7e\x00\x0a\xc6\xe2\x0e\x08\x9f\x26\xda\x6a\x94\xa0\x88\x1a\x87\x17\xc3\xf1\x8d\x35\x72\xa1\x44\x6a\x50\x93\xdf\xf8\x47\xe1\xc0\x78\x78\x47\xe6\xc4\xe4\x9d\x7b\xff\xa1\xb8\x31\x12\xee\xd1\x38\x82\x3d\x73\x73\x7a\xda\xc9\x91\x2d\x7e\xc7\x60\xc4\x18\x28\xfb\x8f\x3f\x0f\x99\x2e\x9d\x29\x49\xf9\x50\xc1\x1f\x5d\x7b\xc1\x29\x56\x13\x0e\xd6\xe7\x67\xbb\x47\x3a\x0a\xf0\xfe\x63\x6a\x4a\x99\x1d\x90\x4f\x3e\x1a\xdc\x71\x46\x32\x20\x83\x7c\x34\xb8\x7d\x47\x42\x77\xcd\x7c\xc6\xd1\xed\x89\x13\x8e\x25\xa4\xc4\x74\x27\x3d\x4d\x2c\xa3\x40\x1d\x36\x0a\x80\xfb\x82\xd1\xbc\x00\xac\xbd\x8d\x44\x83\x21\x9a\x50\x6f\xb6\x82\x4d\x47\xb6\x0b\x6c\x63\x8d\xba\x7b\xb5\x8f\x39\xea\xa1\xd8\xfa\x8d\x5a\x6c\xf0\x38\xf3\x4b\x6d\xcf\xf9\xf8\xac\x56\xc5\xad\x07\xf2\xe5\xb9\x8f\xea\x71\x8e\x09\x5f\x7f\x64\xd2\xd9\xf5\x2a\x4c\x52\x61\xf5\x85\xbf\x0e\xa9\xaa\x7c\x39\xce\x56\x1d\x63\x6b\x0a\x66\x7c\x3a\xbb\xe3\x81\x87\x80\xea\x4f\x2f\x7b\x39\x35\xc3\xef\xcf\x2b\xae\xd1\x41\x91\xf6\x44\x80\x1a\x93\xd1\xcd\x16\x57\xa7\x62\x1d\x2f\x63\x43\xb0\x2c\xbf\x66\xa5\x9d\xfc\x5a\xee\xe4\x97\xb4\xec\x15\x11\xd1\xbd\x5e\xd6\xa6\xe9\x62\x76\x70\x75\x7e\x74\xf9\x3b\xeb\xe5\xf9\xfc\xea\xac\x15\xfb\xcb\xf3\xab\xb3\xf9\x85\x75\x38\xb3\x2e\x66\x2f\xaf\xce\xa7\xa7\x9b\xdf\x4f\x8d\xb0\x9d\xbf\x3e\x3a\x98\xf5\x2d\xc9\x87\x58\xe1\xc5\xcd\xef\xe7\x26\x81\xd5\x02\x69\x7b\xc4\xf6\x20\xe0\x67\xd3\xce\xf1\x34\x3e\xd3\x17\x83\x6e\x65\xc1\xb9\x35\x83\x37\x60\x34\xc6\xa8\x0e\x67\xaf\x67\xc7\xf3\x33\x45\x85\xc1\xfc\x89\x31\xd0\x69\x97\x33\x1c\x8c\xaa\x7d\x05\x08\xc0\x46\x0b\x60\x61\xfb\x0f\x6c\x15\x9e\x25\x80\xf3\xe3\x32\x09\x5f\xc8\xd3\xbb\x4b\x8c\xbd\xc4\xda\xbe\x94\xba\x7b\x91\x17\xf7\x35\x92\x5b\xd5\xaa\xc2\x30\x0a\xa9\x40\xbc\xa5\x6f\xf4\x4f\xca\x97\x0d\xd5\x86\x9b\xc0\x0d\xcb\xa6\xd1\xa0\x17\xbe\xa3\xc6\xeb\x6f\xd7\x9d\x0d\x07\x75\x69\x56\x81\xec\x41\xba\xef\x2e\xf2\x52\xdf\xd6\x13\x50\xda\xc8\x7a\x80\x45\x4d\x5c\xaa\x3a\x95\xbc\xf3\xa2\x4f\xda\xe7\x9c\x00\x78\xd8\xbd\xb0\x54\xf6\xfa\x49\x98\x31\x18\xfa\x81\x41\x91\xf7\x2e\xca\x7c\x3b\xfe\xc4\x6c\x4d\x30\xa1\xbc\xf1\x86\xd1\x69\x0b\x18\x3b\x20\x92\x3a\x72\xd2\xb4\xec\xc9\x0b\x1c\xb6\x27\x7f\x66\xfd\xf2\xd3\x5f\x3c\xb3\xa6\xdc\x5f\xcc\xc3\x3d\x12\x78\x98\x46\x4c\xcd\xcd\xa8\xf2\x4b\xca\xe5\x9d\x23\x50\xa3\x3d\xdf\x15\x59\xa6\xd4\x64\x82\x52\x52\xbc\xa4\xbb\x34\xcd\x43\xa3\x1f\x83\x2f\xb0\x8a\x67\x71\x7c\x41\x5f\x1d\xc0\x37\xef\xdf\xef\xf1\x73\x95\xdf\xa7\x91\x37\xc3\x2f\xe5\x13\xeb\x52\x53\x4e\xf8\xa1\x92\x57\xd2\x2e\x5a\x01\x42\x5e\x79\xc9\x41\x4a\x16\x9b\x9f\x1c\x6f\x49\x9b\x8d\xea\xc2\x01\x65\xcd\x14\x95\x1e\x44\xe2\xda\xc9\x0a\x90\xac\x75\x07\x5d\xbd\xf8\x86\x66\x4d\x72\x8f\x5c\x92\x7b\x04\x00\x1f\xdb\xd7\xae\xcf\x02\x40\x26\x66\xf7\xa8\xa1\xca\x60\x30\x98\x38\xc3\xab\x68\xb5\x50\x5e\x11\xa9\xd0\x8c\x64\x60\x95\x55\x39\x9e\xe7\x79\x08\x4a\xe3\x6d\xa5\x9d\xf8\x83\xa6\xa0\xbd\x12\x9c\x91\xe8\x93\x1e\x41\x59\x38\x97\x62\x6e\x65\x3d\xf9\x56\xe2\x8e\x1a\x43\xf9\xf2\x54\xfd\x96\xca\xeb\x03\xc8\xec\x6c\xe8\xa1\xcd\xd7\x11\x20\x1a\x53\xff\x6c\x2b\x30\xa6\x27\x87\x55\x00\x7a\x53\xd5\xd6\x4e\xa5\xa1\xb2\x9d\x76\x5f\x95\x6e\xbe\xef\x18\x6b\x6f\x2e\xe4\x49\x71\x55\x02\xde\x04\x97\x47\x67\xcf\xac\xa3\x1b\xac\xc9\x43\x55\xd5\xd2\xf8\x9e\x6c\x5b\xa1\xc8\xaa\xb3\xad\xdb\xcf\xb6\x52\xeb\xf6\xe8\x71\x6a\xe1\x89\xbd\x1e\xd1\xda\x33\x89\xc8\x26\xab\x28\xf5\xbc\x9d\x37\x57\xda\xdc\x6f\x82\xc3\xa3\x83\xe9\x33\xd0\x33\xad\xdb\x70\xb1\xf9\x5f\xa2\x2e\x35\x0a\x34\xd2\x9d\xe3\x52\xe6\x48\x43\x06\xde\xed\x67\x7b\x56\x58\x69\x94\x07\xf4\xc0\x16\x0d\xaf\x63\x6f\x69\x73\xc9\x96\x51\xd8\x87\x9c\x53\x57\x23\xd4\x79\xa5\x37\xfe\xad\x48\xb3\x5e\x72\xa0\x31\x56\x6d\x1c\xc9\x5a\xde\xaa\x7a\x87\xf6\x45\xc3\x26\x1f\xe9\x58\x6d\xb7\x02\x5d\x0c\x88\x07\x97\xc0\x55\xaa\xa8\x80\x6e\xa6\x62\xa6\xf5\x54\x2e\x36\xb5\xaa\xe3\x75\xb8\x2c\x86\x22\xab\x8b\x55\xdf\xa1\x81\x3c\x48\x1d\x10\x73\xeb\xb9\x77\x45\xfd\x3b\x0f\xd3\xf2\x14\xdc\xe8\x7e\xc5\x0c\xff\xaa\xe8\x74\x54\x69\xde\xd8\xc9\x24\xac\x73\xcf\xc5\x92\x6a\xed\xf8\x9e\xd6\xda\x4e\x9a\x51\x28\x6a\xc6\x94\xd3\xfb\x68\xc3\xcd\xc4\x9f\x6a\x03\x01\x13\x89\x42\xae\xd2\x60\x5b\xde\xf7\x5b\x80\xf4\xa6\xaf\xb2\xc0\xb0\x50\x51\x9e\x6f\x46\x0d\x5c\xc4\x37\xaf\x6d\x3f\x73\xb9\x8c\xd2\x76\x1f\xd5\x1d\x5a\x49\x0a\x26\x34\x2f\xe6\x1a\xc1\xc4\x9c\x3a\xc9\xa2\x7f\xeb\x47\x63\x64\x61\xbe\x7f\xd3\x54\x27\x24\x6d\x88\x18\xef\xe3\x85\x9a\x8a\xd6\x57\x1c\xa5\xbd\x0d\x9f\xeb\xfd\xb7\x05\xd1\x0e\xf5\x3d\xc9\xa1\x8d\xe4\x22\x1d\x0a\xae\x37\xdd\x0f\xe0\x1c\xdd\x25\xaa\x51\xc6\x3b\xb2\x5b\x74\x97\xa8\xf4\xc7\xbb\x42\x0d\xd6\x26\x9b\x07\x56\x48\xe0\x46\xd4\xec\x91\xec\x48\x35\xea\xf3\x6a\x2f\x7a\x58\xe7\x26\x60\x75\x8f\x9e\x28\xdc\x35\x40\x0c\x8c\x8f\xa0\xc7\xd8\xc2\xbb\xa2\x10\x59\xd5\x1f\xdc\x6e\xb0\xe1\x43\xb8\xa8\x39\x36\x4e\xe7\x53\xa6\xc5\xf7\x6b\xdd\xd5\x34\xb4\x28\x41\x50\xde\x4e\x5f\x1e\x3e\x64\x51\x1b\x5b\x95\x42\x2a\x57\xae\xdf\x49\x8d\xfd\x75\x66\xd4\x2f\x93\x10\x78\x01\x16\xa0\xe7\x68\x67\x62\x80\x08\x24\x7b\x62\x17\x11\x65\xb8\xcc\xdd\x09\x26\x61\xa5\xdc\x7d\x80\x1b\xec\xed\xc1\xcb\xb2\x86\x16\xae\xf9\xc8\x8d\x6d\x16\xcc\xe2\x67\xee\xbf\x04\x3f\x81\x04\xa3\x46\xfa\xed\x95\xbb\x3e\x28\x2d\xfd\x38\x46\x21\xa8\x40\x69\xd7\xb4\x88\xd1\x88\x72\x7e\xf5\xaa\x05\x43\xb0\xa3\x35\x2a\xb1\xae\xef\x29\x3d\xbc\x73\xf3\x08\x33\x93\x24\xc1\x8a\xb0\x42\xa4\xc8\xef\x36\xa5\x82\x0a\x09\x39\x6e\x6a\x7b\xbe\xd8\x37\xb8\xe6\x53\x6f\x81\x96\xf3\xad\xeb\xbf\x7a\xd6\x4d\x61\xf5\xa3\x98\xd5\x2a\x83\x79\xe3\x12\x82\xa6\x68\xb1\x78\x4e\x40\x35\xc0\xb1\x4e\x56\xa0\x08\x9c\x10\xd8\xe9\xa9\x30\x11\x2f\xba\x49\x2e\x4b\x64\x43\x08\xdb\x09\x47\x90\x2b\x5b\x46\x24\xa3\x15\x3d\x5a\xee\x72\x85\x26\xb4\x85\x29\xc9\xe9\x78\xba\x27\x56\xba\x8d\x18\x2d\x0c\xf3\xf4\xe9\x12\x66\x8d\x85\xd9\xf1\xb4\x09\x56\x53\x11\x52\xa4\xe7\x8d\x20\x46\x50\x3e\xe7\x59\x1e\x0b\x9b\xdb\xda\x3c\xe0\x25\xf2\x24\x4c\xf0\x1b\x1a\x14\x3a\xdd\x2d\xb8\x42\xc0\x6d\xfa\xa3\x72\xbd\x0b\x36\x6d\xa7\x84\x8c\x73\xe1\xd6\xd3\x1b\x0b\x46\x09\xe4\xce\x58\x17\xe7\xc1\x6a\xa5\xd2\x9e\x33\x33\xdf\xa0\xc4\xb2\x91\x4a\xd2\x0e\x03\x66\x42\xb3\xc2\xf6\xd8\xf8\x50\x4f\x1c\x83\x3a\x73\x9a\x80\xe8\x49\x5f\x7d\xa9\xeb\x4d\xd3\xac\x79\xa9\x0e\x8a\x61\x24\x40\xed\xb3\x21\x50\x9a\xcd\x04\x16\xa8\xbf\x27\x6d\x09\xfb\xdc\xa0\x38\x46\x7d\x98\xca\xdc\x02\xf8\x7d\xf4\xd2\xd0\x4f\x68\xf6\x17\xe5\xec\xb1\xe5\xbb\xac\xd3\xcc\x8f\xa3\x5f\x5f\x14\xc6\xc5\x86\x89\x42\x1a\xdf\x85\x31\x95\xd8\xcb\xeb\xae\x2b\xee\x94\x9d\x74\xb4\x11\x52\xc5\x8f\xe8\xe3\x30\x4c\xcb\x85\xf9\xb7\x9b\x1f\xe6\xbd\x0d\x9d\x16\x2f\x84\xb2\x51\xc1\x05\xdd\x22\x52\xea\xb1\xfd\xe0\x37\x1c\xc2\x45\x55\x62\x44\x6b\x7c\x2c\xf1\xfe\x04\xed\xf1\x4c\xc6\xe6\x07\xae\x4a\x43\x5b\x82\xdc\xcd\x9b\x1f\x26\x54\x0b\x3e\xdb\xfc\x88\x0d\xf5\x89\x16\xb2\x79\x62\xb5\x42\xd1\x72\xbc\xd2\x74\x80\x29\xc4\x28\x17\xdb\xdf\x03\xba\x22\xfb\x3b\xd2\x53\x28\x8a\xc3\x8e\xcd\xef\x3d\xc2\x22\x63\x14\xdb\xda\xef\xe5\x3e\x34\x75\x67\x29\x1f\x51\x8e\xf2\xf0\xfc\x64\x81\x0c\x8e\x3c\x6c\xe6\x1d\x66\xe9\x9b\x40\xb8\x42\x33\xd9\xe5\xbc\xe8\x43\x8e\x5b\x60\x1d\xc6\x6e\xf9\x3e\xdb\x1e\x8d\xe1\xae\xd9\xa2\x51\xa4\x53\xb3\xaf\xc1\xf7\xd6\x9e\x34\x25\x14\xb4\x23\x5e\xf6\x7c\x66\xe5\x5e\xe8\xb5\x26\xe8\x6b\xdb\xa3\x06\x53\x15\x8d\xd5\x78\xd8\x59\x50\x74\x0a\x19\x6d\xdc\x47\xb5\xe1\x92\x7b\x11\xf0\x60\xcb\x0f\xfb\x03\x8c\xd2\x75\xd8\xc1\xc8\x9f\x55\xfe\x48\xf5\xd3\xfd\xb0\x3e\x70\x6c\x69\xc1\xf4\x8f\x2b\xbe\x14\x59\x91\x45\x32\xc0\x6c\x8f\x83\x04\x60\x4d\x64\x98\x3e\x82\xce\x7c\xf1\x85\x2c\xc2\xce\x15\x0a\xc4\xe3\x8a\x58\x21\xea\xa1\xd6\xb0\xb9\xf6\x10\x12\x5c\xa5\x79\x10\x80\x46\xb4\x8e\x8c\x5d\x47\x78\x00\xe9\x07\xf3\x0e\xc7\x18\x3c\xd6\xae\x96\xd6\x7e\xed\x05\x35\x4b\xe4\xca\x4b\x55\x81\x32\xaa\x47\x7b\xe0\x0b\xa3\x2e\x09\x7b\x66\xc7\xa3\xc8\xd7\x30\x8a\x1e\x78\x33\x20\xe5\x1f\xd7\x36\xb8\x4f\xb0\xa1\xde\x61\x8c\xb6\xf9\x2b\x85\xc7\x1c\xab\xd4\xd2\x7a\xcd\xe3\x59\xf8\x55\x33\x9c\xa0\x46\x4c\x44\x84\x9f\xd3\x7e\x8a\xbf\xa8\x06\xaf\x5d\xb0\xfa\x61\x72\x70\xe3\xf1\xa1\xa8\xdf\x4f\x72\xdf\xa8\x74\x3f\x03\x86\xbf\xaf\xf0\x6c\x3a\x78\xf1\xf6\x74\x7a\x32\x13\xda\xe5\x04\x0d\x1e\x13\x19\xc1\x37\x91\xa9\xf6\xdc\x5d\xf6\x1d\xdb\x43\xf2\x9f\xa5\x6d\x29\x29\xf5\x21\xc3\x5a\xce\x64\x9c\x68\xbf\x3f\x3c\x38\xfe\x5e\x9c\xb1\x0e\x44\xef\x9a\x3b\x0f\xa4\x2a\xaa\xe2\xa8\x57\xdf\x73\x94\xaf\xe8\x63\x23\x3d\x8d\x25\x8d\x3b\x81\xe3\x1f\xce\x60\x54\xc4\xef\x29\xe0\x4b\x74\x26\x57\x25\xb4\xef\x1a\x5d\xbf\x71\x9f\x86\x42\x5c\xc8\x58\x90\xbd\x42\x79\xb9\xe1\x7a\xa5\x25\xcd\x02\x5b\x86\x88\x8b\x68\x57\xb0\x08\x29\x28\xb3\x52\x34\x08\x2b\x31\x7c\x84\xa0\xc2\x5e\x51\x5e\xb6\x51\x71\xbf\x64\x3e\x70\x8c\x47\x77\x25\x86\x32\x8d\xbc\xea\x28\xf0\xe6\xe0\x05\x99\x9b\xfb\x24\xe1\x9e\x8d\x5e\x37\x97\xa2\x45\x64\xe4\x49\xc7\xe8\xae\x4a\x23\xa8\x62\x20\xe2\x05\x0e\x9b\xce\x4b\x3c\x04\x2a\x11\x29\x88\x70\x99\xc5\x26\xe7\x41\x65\x68\x07\x2f\x72\xbc\x15\x41\x4d\xc3\x74\x41\x39\x85\x31\x51\x8b\xc0\x4a\xc8\x4a\xde\xaa\x09\xb7\x97\x7b\x73\x03\x77\xca\x1e\x83\x2d\xe1\x14\x63\x5d\xe2\x71\x81\xed\x5d\xb1\xe9\xc4\x3a\x73\xc8\xf9\x98\xc0\x61\xd1\xea\x05\xa4\xb6\xb0\x6b\x6c\x05\x77\xeb\x2d\x5b\x5a\x63\x29\xaf\xab\x35\x2e\x88\xb2\x58\x35\x8d\xdb\x0e\xee\xad\x6b\xea\x61\x86\xc2\x61\x64\x96\xe0\x19\x69\xc9\x8a\xf6\x6b\xd9\x6f\x03\x86\x5c\x30\xa0\x36\xca\xda\xaa\x7f\x71\x15\x5c\xc3\x95\x75\x7b\xd5\x27\xb7\x70\x9d\x25\x0f\x4f\x51\x20\x6f\x4f\xbc\xf3\x9c\xdf\x28\xbf\x00\xb7\x73\xf9\xc2\x1e\xdc\x73\x51\x79\x13\x7d\x16\xda\x78\xc3\x17\x27\x34\xe8\x52\x85\x2a\x3e\xe7\xf1\xff\x38\x10\x6a\x36\x79\xdb\x3a\x75\x43\xa7\xaa\xb2\x11\x77\xb5\x42\x95\xeb\x93\xc8\x5e\x94\x7c\x15\xbd\x56\xa5\xc6\xe6\x2c\x44\xe8\x55\xe4\xc0\x01\x97\xd7\xdd\xac\x0e\x3e\xa3\x1f\x39\x7f\xa4\xbb\x2a\x70\xc3\x9d\x4f\x01\xbe\x36\xc3\xd8\x47\x74\x50\x31\xe1\x4b\x38\x6b\x29\x46\xb0\xe4\xb8\x03\xad\xaa\x4f\x60\x00\x3d\x9e\xbb\xee\x44\xcf\x47\x94\x90\x8e\xbd\x1e\x2f\x32\xe0\xb2\x1c\xd4\x58\x56\x53\x15\x6a\xd5\xbc\x12\xc8\x48\xa7\x55\xdb\x9b\xfd\xe9\x68\x52\xc7\x55\xad\xe4\xca\x67\x66\xfb\x5b\xfa\x74\xf0\xa9\x93\xba\x95\x70\xa9\xb2\xd9\x30\xcf\xe7\xb0\xd3\x52\x65\x1d\x10\x33\xee\xb7\xe4\x53\x61\x37\x68\x8a\x15\x09\x44\xd7\xbf\xdc\x31\xda\x60\x84\x2c\x4a\x16\x60\xb1\x45\x82\xa2\xb0\xef\x7c\x44\xb4\xe9\x73\x74\xe5\xb2\x1d\xf4\x7b\xd9\x33\x76\xc6\x36\x44\x90\x5b\x8d\x46\x75\x50\xdb\x1c\x97\x0b\x11\x89\x46\x23\x85\xe9\x58\xb1\x12\x76\x86\xa7\xd7\x48\xc3\x18\x61\x62\xf8\xd6\xca\x5b\x30\xf7\x72\x39\xc2\xbd\xe3\x17\x2b\x77\xf1\x0e\x16\xba\x93\xc5\xd5\x72\xc7\x76\x96\x86\x13\x74\xcd\x2f\x94\xd6\xae\xb3\x30\xf1\xf2\xae\x27\xc5\xdb\xd4\xfc\xd4\x17\x7b\x72\xf3\x07\x2c\xe9\x14\x87\x25\x41\xd9\xac\xeb\xab\x0f\x22\xe2\x0c\xaa\x7b\x45\x5f\x6b\x9b\xac\x77\x5e\x1e\x29\x8e\x25\xa4\xe2\x65\xfb\x45\x66\x2e\xda\x32\x91\xe7\x83\xf2\x2a\x6c\x04\xb0\xf9\x11\xa3\x6c\xed\x22\xfa\xa9\x14\xd0\x62\x66\x79\xd3\x20\x96\x9b\xf3\x29\x22\xf1\x3a\x88\x45\xbd\x60\x70\xe4\x4d\x13\x9d\xb0\xa9\x07\xb3\x15\x61\xe4\xb4\xc2\xfc\xf7\xe1\x6c\xef\x55\xb0\x45\x70\x27\x6b\x67\x78\xa2\x2a\x69\xa6\xe3\x4c\x93\xc5\x9d\x04\xd7\x7a\x3b\x54\x48\x47\x7d\x63\x5f\x98\x9e\xf9\x66\x49\xdb\x74\x15\x26\x29\xba\x8f\x59\xec\x4d\x02\xeb\xd5\xfc\xe2\x92\xae\xdd\x61\x4c\x2a\xca\x64\x42\x46\x9e\xf5\x84\x81\x83\x46\xb2\x74\x03\x37\x2e\x64\x29\x7f\x4f\xbd\x7b\x57\x20\x76\x23\xea\x97\xaa\xee\xe0\x3b\xad\xf5\x7f\x10\xbc\xb1\xa9\xe9\x73\x12\xee\x4b\xdb\xf5\x09\x8d\x1d\xd5\xb1\xb0\x20\x34\x4b\xc8\xe8\x54\x21\x35\x6b\x22\x95\x95\x3a\x37\x16\xe5\xec\x51\x5d\x65\xbc\x2e\xa8\x73\x70\x77\x4b\xc6\xe8\xeb\x0b\x6c\xc7\x30\xd6\x18\xc1\xe4\x87\x93\x3c\x5e\x44\x40\x2e\xce\x43\x14\xb5\xb3\xe3\x14\x85\xd7\x8a\x56\x86\x8c\x06\x42\x8d\x13\xd7\x4e\xa9\xd9\x2d\xaa\x9c\x28\xda\x69\x7d\x0c\x23\x35\x0d\xa9\x2f\xf2\xbd\xe8\xd9\x49\x77\x1e\x51\x36\x2f\x6f\x79\x9f\xde\x47\xe4\x51\xa4\xf6\x9f\xb6\xaa\xaf\xfe\x8c\x5c\xbb\x6b\xb8\xd1\x78\x78\xb1\x09\x23\xa1\x33\x93\x75\x8d\xa8\x06\xcd\x0e\xb6\xe5\x1e\x47\xbc\x50\x6b\x65\xc7\x5b\x7a\xdc\x34\x0c\xab\x56\x9b\x8f\x06\x59\x1b\x88\x6c\xe7\xc8\x8d\xd1\x8d\x51\x6a\x6c\x66\xc1\x71\x8e\x3a\x30\xd6\x6b\xbe\x8a\x7d\x50\x79\x9f\xb5\x97\x5c\x36\x04\x68\xb2\x53\xf1\xae\xc4\x01\xc4\x58\x6d\x10\x03\xa1\xe1\xee\xb9\x80\x83\x2b\xc9\x65\x20\xee\x01\xec\xa5\x48\xcb\x29\x65\x1b\x50\x5c\x6a\x6d\x55\x94\x7f\xe2\x0e\x98\x7b\xb4\x03\xe9\x31\x32\x87\xe1\xec\xe2\x5d\x4d\x68\x33\x05\xc6\x2c\x88\xb1\x2c\x20\xea\x07\x80\x63\xca\xf7\x2a\x4b\x5e\xb0\xac\x3b\x3b\x10\x8e\x82\xbc\x91\x63\x73\xac\xf3\x3f\xb4\x73\x92\xa4\x1e\xbc\xb5\xf9\x31\xf0\x28\x6f\x17\x2e\x8c\x14\x90\xe8\xaf\x6c\xd1\x79\xb2\x45\x4e\x03\x45\x79\x3f\x95\x49\x68\x79\x31\x6c\x0a\x99\x88\x98\xbf\xc2\xed\x3a\x65\xb7\x4a\x5c\x57\x20\x8d\x6d\x7c\xf4\x1b\xb8\xc9\xc0\x3c\xc5\xe5\x6d\x23\xa4\xad\x77\x8b\xdd\x9b\x81\xd0\xdb\xcd\x0f\x72\x73\x49\x12\xf7\xad\x4b\x58\xa6\xd8\xe9\xcf\xfd\xce\xa6\xdb\x9f\x23\x7b\x11\x32\xea\x7c\x2c\x75\x1e\x18\xad\x5b\x9c\x73\x11\x7a\x87\x49\x85\xc1\xe3\x54\x76\x45\xcf\x5d\xfe\x28\x37\xde\xb9\xf7\x89\xc2\x42\x68\x08\xa6\x27\x9d\x74\x2d\x91\x87\xc8\xca\xa6\xcd\xc1\x6d\x7d\xf3\x4b\x0b\x05\xd4\x75\x11\x6a\x00\xa7\x1f\xa5\xb4\xf2\x17\x36\x1e\x03\xb2\xbe\x2f\xfb\xbd\xd0\xf6\xb9\x6f\xb5\xae\x73\x8e\x9a\x2b\x1b\xc5\xda\x3b\x54\x1e\x25\xf0\x02\xaf\x34\x69\xcb\xa9\xb4\x23\x17\x6b\x86\x5d\x65\x4e\xfb\xb2\xe2\x58\xb9\xed\xe0\x33\xa3\xe5\xc4\xde\x74\xd6\x9f\xa8\xc3\xfa\xab\xcb\xcb\xb3\xbc\xb3\x63\xb7\xd7\xdc\x4d\x30\xe2\xa1\xe2\x2c\x8f\xd0\x85\xcc\x55\x68\x08\x98\x8d\xca\x0a\xb5\x59\x37\x4a\xe7\xbc\xf4\x22\x61\xed\xb0\x1d\x67\xc2\x97\x8e\x09\x4a\xd0\xc7\x3c\x45\x4b\x3c\x3e\xf8\x46\x82\xdf\xb6\x93\x6c\x0a\x47\x9f\x52\x8e\x6b\x11\xdd\x6b\x85\xa1\x44\xdc\xa2\x44\xdd\x4b\x4e\xc4\x0e\x5c\x58\xb6\x64\x9c\x59\xc6\xb6\xc3\x6f\x1c\xbc\x20\x9b\x2d\xb6\xd2\x4c\x2d\x3c\x43\x53\x04\x72\xe2\x05\xd3\xc8\x7b\xed\xc6\x58\x23\xe5\xc4\xfe\x3a\x8c\xb9\xd2\x5c\xf5\x7b\x2f\x68\xfc\xfe\xcc\x4e\x17\x2b\x85\x8f\xf2\xa3\xa7\xb7\x07\xe7\x53\xdb\xb7\x4e\x40\xde\x2a\xda\x33\x34\x3f\xd4\x13\x87\xbd\x0e\x33\x6e\x48\xbe\x26\x40\xd6\x13\x77\x7f\xb9\x6f\x7d\xf6\xe9\xe7\xbf\x3c\xd9\xb3\x3e\x7b\x09\xff\xff\xf4\xa5\xaa\x41\x3a\x5a\x12\x1c\x62\x22\xc1\x83\x0f\x00\x08\xf3\xdd\xed\x2e\x50\x43\x29\x95\x25\x86\x30\x5c\x8a\x4a\xcd\xf4\x23\x5d\x13\xaa\xfe\x20\xd4\x5a\x0e\x61\x0b\xb2\xf5\x35\xb5\xf0\x15\x6a\x4a\x2f\xbe\xc6\x86\xf5\x09\xeb\xa8\xeb\xa1\xfa\xfd\xa8\xa8\x2a\xe5\x83\x1a\x9d\x5d\xc6\xc8\x68\x4d\x01\x1d\x83\x4e\x64\xc7\xb9\x30\xc6\xb7\x0c\x50\x5e\x4d\xa7\x45\x92\xf4\xda\xc3\x2c\xd6\x25\xb7\x33\x59\x84\xc1\x8d\xb7\x24\xe3\x51\x97\xed\xcd\xb7\x10\x0c\x1e\xae\x64\xff\x5e\xcb\x80\x39\xce\xed\x40\x30\x59\x6c\x6c\x1a\xb8\xba\x98\xbe\x9c\xb5\x7b\xea\xab\xbf\xf6\x83\xda\xee\x8c\xbf\xba\x30\xea\xcc\x7f\x75\x31\x3b\xef\x5f\x9d\xf1\xea\xe2\x6a\xf3\xaf\xe7\x47\x46\xf5\xf3\x10\x63\x7b\x61\xbe\x41\x90\x03\xe9\x16\x67\xab\x46\xa3\x0d\x1a\x14\x72\x76\x5c\xce\xe2\x58\x71\x10\x9d\x8a\x02\x3d\x51\x98\xdb\x8d\x10\x24\xf9\x14\x9a\x82\x3e\xda\xc0\x9a\x10\x9f\xa1\xd9\x21\xa5\x0e\xdd\x1d\x57\xec\x9b\xd0\x2b\x53\x28\x8b\x37\x19\xb9\x8e\x0b\x02\xf8\xa6\xb4\x27\xec\x20\x8f\xa5\x51\xe3\xb1\x76\xc5\x90\x06\xda\xc4\xc5\x63\x8f\xed\x15\x25\x98\x03\x6b\x88\x14\x54\x87\xd7\x18\x24\x2b\x4d\xc0\x64\x58\x41\x15\xd2\xcd\x8d\xc7\x54\x09\x21\xff\x4b\x31\xf7\xa3\xc0\xec\x33\x02\xba\x36\x58\xb6\xc8\xe4\x11\x5d\x90\xd5\x91\x06\x9a\x6f\xf5\xa6\xa2\x68\xf4\xd5\x58\x74\x80\xb0\x0c\xce\x1d\xd9\x2d\xb2\x1e\x63\x46\x3f\x34\x59\x75\x2a\xb5\x1a\xb5\x26\xe0\xb0\xe4\xae\x6e\x48\x41\x16\x1d\xa8\xcd\xd3\xc1\x94\xc4\x71\xfd\xec\x94\x55\x81\x6a\x19\x6d\x5c\x9f\x4d\x41\x34\x5a\x03\x01\x8a\x9b\xc6\x42\xee\x71\x6a\xd0\x40\xe3\x5a\x72\x49\x4f\x19\x6e\x46\x26\x4e\xee\x7e\x8f\x2f\xa4\x6e\xc9\xaa\x47\x6e\xe6\xfc\x3e\x69\xa2\x61\x0c\xe1\x43\xa9\x81\xd7\x87\xe1\x03\xb5\xf2\x1a\x9f\x11\xb5\x3c\x4d\x9d\xb6\xf6\xe5\xd1\x35\xa4\x68\x2e\x44\xcb\x74\xbb\x0a\xa4\x27\x71\x8d\xd1\x9a\xbc\x8b\xdb\x8a\x50\xed\xb2\x1c\x8c\x1c\x71\x63\x44\xa7\xb2\x09\xe3\x87\x0a\xf7\x2c\xd8\x98\x74\x97\x8f\x25\xc6\x8a\xf0\xe7\xda\xbe\x27\x4e\x65\xdd\xcd\xcf\xaa\x3c\x6a\x5a\xf2\x4d\x88\x1d\x5a\xf4\x4e\x9c\xe7\xbc\x16\xdb\x5d\xf2\xa2\x09\xf7\x43\x71\x21\xdf\xf5\x0f\xcc\x85\xd2\x66\xff\x40\x6c\x80\x1f\xa4\xf5\x99\xeb\xa0\x3d\xc5\x47\x2b\x4d\xf2\x77\xc7\x0e\x7b\x1b\x7d\x75\xcf\x24\xb5\xa6\xf8\x03\x99\xe3\x7e\x1b\xb9\x0b\x74\x17\xb0\x6b\x03\x4d\xb0\xe1\x82\x92\xd5\x9c\x67\xa4\x8c\x53\x15\x56\xa5\x9a\xd7\x1f\x44\x0f\xfa\x48\x3c\x8b\x5e\x17\x32\x2e\x01\x03\x3b\x45\x56\x1d\x9b\xb6\xe0\xde\xb9\xcc\xd0\x55\xd7\x1e\x26\x70\x7c\xf5\xf2\xe8\x74\x42\x5e\xc1\x89\x65\x0e\x56\xd7\xca\x91\x63\xc0\x85\x27\x10\xe4\x91\x18\xa7\x1a\xaa\x5d\xbf\xd7\x7b\x30\xf4\x5d\x10\xde\x05\x54\x21\x52\x81\xbd\xe9\x21\x23\x1c\x8a\xec\xb5\xb6\xc7\x7a\xe0\xf1\x43\x4c\x3a\x2c\x07\x95\x70\x58\x20\xdd\x29\x38\x40\x4e\xa9\xa9\x5c\xfb\xe1\x37\x99\xe8\xa2\xae\x8e\x6f\xeb\x98\xec\xa4\xa1\xf4\x9c\x7a\x7e\x3b\xdf\xe8\xc1\x86\xc4\xbc\xda\x52\xbf\x97\x7b\xd2\xa4\x28\x88\x44\x82\x76\x50\xc5\xa5\x5d\xa0\xd0\x1f\x1f\x07\x5f\xda\x1a\x91\x97\xd3\x3c\x8c\xb2\x73\x91\x69\xe2\xd4\x2c\xf1\x54\x41\x3c\x4e\x79\xa7\x12\x09\xac\x88\xda\x79\x73\x51\x0d\x32\xd2\xb6\xf2\xd8\xe1\x90\x02\x27\x5b\x34\x71\x13\x76\x0d\x7a\x9a\x9a\xaa\x8f\x41\x80\xbc\x51\xb4\x2f\xdd\xee\x37\x7a\x63\x0f\x4a\xc9\x1f\xae\xc8\xe5\x26\x73\x80\xd6\xfa\xb0\xb9\x76\x21\x15\x6b\x87\xc5\x95\x84\xa2\x19\x53\x6b\xc8\xb6\x16\x51\x8d\xa9\x37\xc5\x85\x8b\x0c\x41\xb7\x58\x33\x12\x34\x40\x2f\x6e\x97\xd4\x05\xa5\x70\x49\x44\x22\xe1\x25\xca\x4f\x75\x5c\x0a\x13\xa9\x5a\xe3\x2b\xe5\x88\x65\x65\xf0\x70\x70\x65\x70\x1e\x13\x67\xa7\x8a\xcf\x2a\xad\x48\xfd\x74\x3f\xac\x74\x4e\x70\xd4\x19\xba\x07\x3c\x1c\x3a\xba\xe8\x6e\x01\xf8\x39\x7f\xe1\x1c\x1c\xc0\x37\xc2\xdd\x86\xdd\x96\x63\x8c\xc1\x72\xe3\x7d\x6c\x43\x10\xe7\xd5\x07\x44\x02\x8e\x97\xd0\xbb\xe2\xaa\x55\x7d\x55\x21\x71\x3f\x24\x2d\x06\x1c\x7b\xa0\x12\x2e\x72\x75\x8e\x97\xf1\x38\xca\xe9\x54\x8d\xa6\x05\xa8\x79\xa0\x7f\xb7\xfa\x59\x1e\x92\x36\x8c\xfe\xe4\x35\x9a\x2b\x4d\x59\xdf\x54\x7c\x75\x74\x86\x6a\x5c\x21\xb5\x2f\x88\x65\xe2\x75\xaf\x87\xe3\x5c\xfa\x8a\xd1\xd4\x4f\xf1\xbe\xd6\xa1\xf2\x18\x5a\x8f\xf7\x92\x38\x1e\xd3\xc8\x53\x1f\xc5\x75\xbd\xf3\x85\xf9\x4a\xda\xd6\x0b\x4a\x60\x77\xb0\xa8\x5a\xdb\x0e\x6c\x8d\x44\xe3\xea\x38\x12\x58\x83\x71\x34\xf8\x20\xfa\x2a\xf5\x43\x60\xf5\xa7\xb8\xd2\x7c\xe4\x43\x58\x57\xcb\xcb\xae\x4b\x67\xf9\x88\xec\xab\x91\x1f\xda\xb9\x99\x1a\x03\x05\x12\xba\x6d\x91\xb6\x73\x66\xa7\xaa\xd0\x24\xac\x55\x93\x1f\x95\xe4\x09\x90\x35\x76\x70\xe7\xd9\x6b\x2f\x58\x85\x8d\x70\x0c\xa8\x33\x3d\xfe\x72\x1a\x77\x71\xf6\x49\xe2\xca\x6a\x82\x16\x31\xad\x2f\x98\x21\xff\x1f\x5e\xf4\x02\x66\xee\xf9\x7d\xea\x26\xd8\x60\x09\xbe\xc2\xbf\x0f\x30\x0a\x08\x6f\xcf\x9e\xaa\x97\x67\x99\xa8\x0e\x40\x72\x7e\x4d\xe8\x55\x55\x6a\x30\x6a\x62\x20\xf3\x48\x4b\x69\xce\xd4\xd0\x80\x9a\xbf\xa4\x9c\x49\x2a\xf4\x52\xdc\x59\x54\x14\x50\xed\x40\x2e\x65\x54\x4a\xa0\x5c\x42\x87\x0a\xfb\x51\xc3\x03\x59\xf9\x24\xc9\xec\x7a\xd7\x03\xda\xac\x0b\xe3\x8e\x07\x38\x1c\x80\x19\xb8\x13\x2c\x9e\x04\x88\x93\xe4\x2e\x8c\x29\xa2\xcf\x0f\x97\x5e\xfb\xa5\x5c\x92\x4d\x35\xb2\xdc\x60\xc5\x8e\xd6\x24\x94\xd5\xa0\x65\x0e\xba\xbb\x00\x6e\x98\x11\x56\x12\xac\xa9\xad\xc8\xdd\x51\x3d\xda\x0f\x1f\x4c\x01\xe7\x4d\xb2\x6c\xd3\x8e\xb3\xb8\x2a\x09\xd8\x0a\x80\xa1\x41\x15\x78\xfd\xed\x5d\xff\x43\x52\x63\x64\x11\x05\x8c\x0a\x83\xeb\x40\xc8\x78\xe4\x76\x02\x37\x82\x8d\x22\xa9\x5a\x3c\x2f\x3f\x00\x14\x29\x8e\xbc\x88\xf9\x30\x29\xe2\xce\x24\x9c\xb0\x19\x46\x4f\xaa\xf2\xcc\x29\x6a\x99\x4c\xc1\x36\x0a\x16\x70\x83\x24\xa1\xb3\x34\xbd\xd1\x13\x3b\x97\xaf\xfb\x9e\x2a\x0d\xe9\x1c\x5c\x25\x8e\x74\xbe\xaa\x4d\xca\xeb\xd9\xf9\xc5\xd1\xfc\xb4\x7d\x5d\xe1\x03\x9b\x7f\x33\x8a\x9b\x7b\x0d\xda\x8f\x63\xfd\xe3\xc5\xfc\xd4\x0a\xaf\xbf\xc6\x2e\x94\xa2\x4a\x5f\x49\x81\x9d\x88\xc2\x86\x8b\x22\xa4\x90\x72\x18\x50\x46\xad\xb1\x74\x33\x26\x10\x49\xf9\xe1\x7a\xe9\x8a\x32\x4e\x27\xbe\x17\x60\xfe\x29\x2a\x6f\x36\xad\xa9\x7d\xeb\x05\x95\xc0\xc6\xc0\x03\x0a\x75\xe0\xa4\x08\x78\xa9\x1d\x6e\xe2\xa2\x41\x7c\x41\x4e\x20\xfe\x95\xd3\xfb\x5c\x55\x21\xed\xf6\xf9\xf9\x5b\x1f\x6e\x8f\x79\x17\x95\x1a\x4e\x55\x32\xa5\xe5\x29\x7d\x2c\x40\xdf\xcd\xbd\x75\x26\x8e\xc5\x76\x3c\xf8\x1c\xa5\x13\x5e\xe0\x59\x68\x86\x29\x51\x65\x29\x6f\xfd\xae\x0d\xf9\xb7\xd3\xf3\xd3\xa3\xd3\x97\x5c\xfe\x88\x0f\x13\x5c\x2c\xa4\xa9\xe4\xe7\x3d\xe6\xcd\xe4\x4e\x4b\x5e\x09\x94\xc0\x87\xc6\xb5\x95\xb7\x5c\xf9\xf7\x98\xc6\xb7\x80\x77\xec\xa5\xeb\x10\xa8\xdf\x55\x00\xac\xed\x7b\xeb\xda\x05\x5d\x88\x73\x58\x31\x66\x0f\x17\x56\x42\x1a\x90\xf8\x31\x76\x17\x98\xce\x4d\x0e\x52\x42\x9f\xac\x5c\xdf\x07\xf8\x09\xe6\x88\x63\x61\xc1\xf6\x6b\xce\xe5\xec\x94\xa2\x5e\x79\x18\x7c\xe2\xb9\x24\xa6\x32\xa9\x80\x14\x39\x58\xb8\x66\x85\x4a\xb2\x10\x85\xe6\x36\x3f\x80\x8a\x94\x8a\x4a\x0f\x8e\x9b\x80\xce\x14\x24\xae\xbf\xa2\xf6\x44\x04\xf3\x22\x07\x14\x85\x8e\x8b\xa9\x38\x58\xa5\x03\xfb\x55\x95\x13\x6a\x45\x1a\x78\xa5\xec\xb6\xa8\xf7\x89\xd9\x62\xf8\x2a\x95\x11\x4d\x40\x21\xb3\x65\xa9\xba\x98\xbc\x62\xf0\x7d\x46\x83\xc5\x90\x7e\x0e\xf4\x21\x06\x54\x07\xde\x7b\x5e\x2d\xca\x52\x12\xf5\x4f\x43\x4a\x7e\x82\xed\x97\x70\xfd\x53\x0e\xcc\xaa\x98\x37\xa8\x99\x6a\x50\x4b\x35\xae\x6f\x49\x6e\xae\x09\x3a\x60\xb0\xc4\xa4\x37\x59\xea\x8a\x73\x01\xd1\xed\xbd\x15\xf9\xce\x79\x03\xd7\x2e\x59\x70\x7c\xae\xe5\xe4\xbb\xf6\x2d\x02\x0b\xe3\x68\x45\xe6\x5e\x9c\x7f\x2c\x0a\x69\x1d\xf8\x61\xe6\xc0\x34\x66\x81\x13\xdf\x3f\xc6\x29\x4b\xed\x6b\x3b\x01\x99\x33\x05\xe0\xe8\xd6\xf5\x5d\x67\x99\x57\x51\x90\xd8\x28\x17\x8b\x56\x12\x46\xb1\x3a\xec\xa1\xab\xc0\x2a\x97\x85\xdd\xa6\x91\xd4\x71\xc9\x0e\x0e\xea\x48\xf6\xb1\x0a\x95\x9d\xc2\x0c\x46\x69\x8e\x60\xcd\x81\xfa\x2c\x5d\x17\x4d\x7c\xfc\xfb\x3c\xca\xa7\xdc\x80\x97\xbc\x9e\x98\x35\x85\x79\x80\x71\x78\x2f\xfb\xe8\xd4\xe6\xa0\x94\x53\x26\x78\xb3\x45\x2b\x70\xe2\x06\x93\x8e\x1a\xb1\x50\xcb\x46\xd8\x54\x32\xd7\x0c\x4b\xdc\x0a\x49\xce\xcc\x97\x55\xcc\x26\x68\x99\x9b\xb0\x61\x2d\xdc\xfa\x51\x50\x43\xe3\x5c\x47\x79\x5a\xe6\x02\xe6\x2d\xc8\x14\x69\xc5\xc5\x6e\xb4\x66\x94\x60\x8e\x8b\x8f\x2f\x24\xd4\xb4\x39\x8b\x36\xff\xe1\x8a\x2c\xb6\x46\x5b\x98\x58\x83\xdc\x1b\x0c\x73\x77\x39\x4f\xbd\xad\xad\x24\x25\xb7\xaf\x6d\x4c\x35\xf5\xf0\x45\xda\x8f\xb8\xdd\xf2\xcc\xcd\xb6\x54\x0a\x5c\xe1\xf6\xda\x72\x31\x09\x2d\xe0\x94\x4e\xc7\xf5\xbe\x15\x7d\x28\x31\xaf\x0b\x77\x33\x6c\xc8\x1b\x40\x44\x4b\xfe\x1a\xb8\x4f\x7b\xd3\xe1\x10\xc2\xb0\xba\xbe\xf6\xad\xcb\x10\xbe\xa3\x95\xb1\x82\x63\x16\x05\x0a\xec\xec\xf0\x3a\x76\x4b\xd5\x92\xf0\x83\x4c\x30\x45\x33\x8c\x53\x87\x5b\xae\x18\xdc\x4a\x3b\x88\x53\xcc\x8e\xcb\xfc\xb0\xf2\x03\x2c\x58\x2a\xc8\xca\x32\x0a\xa6\x1d\xb3\xe5\x83\x15\xde\xc4\x52\x3e\x76\x6f\x85\xe8\xc3\x3f\x38\x2b\xb6\x79\x1e\xfe\xbe\x1a\x21\x9a\x24\x85\xbc\x4c\xdc\x35\xaf\xe1\x0c\x3b\xed\x35\xcf\x62\x35\x61\xb1\x7d\x16\x40\x84\x62\x50\x26\x73\x19\x16\xf6\x21\xe7\xc8\x97\xab\x1f\x53\xd6\xac\xc0\xbd\x27\xda\x86\x92\x2c\xc5\xa4\x5b\x37\x2e\x1e\x54\x2c\xef\xac\x65\x79\x8b\xab\x28\x2d\x70\x9b\x15\x9a\x75\xe4\x7e\x67\x94\x11\xda\x26\x74\x3d\x1c\x7c\x8a\x37\x1c\xaa\x8a\x5a\x59\x32\x7f\x5f\xdb\xfd\xa5\xba\x7b\xd7\xae\x94\x30\x98\xa7\x0d\x1b\x5b\x7a\x5e\x93\xc6\x76\xb2\xd5\x37\xe1\x3c\x03\xde\x38\xb0\x22\x57\xd4\x1b\x7c\x6d\xc7\xf7\x94\xb5\xb7\xc0\x2c\xfb\xa2\x8a\x44\x99\x48\x4a\x67\x8c\x7c\xca\x99\xdd\x12\x4a\x54\x61\xc5\x43\x3e\xad\xa9\xe7\x17\xca\x82\xdb\xcf\xac\x8b\x6a\x63\x68\xf4\xd5\x71\x6c\x87\xfa\xc5\xcf\xe9\x49\x6c\x63\x01\x67\x23\x57\x10\xdd\x1e\x0f\x09\x70\xc0\x81\xee\x40\xa2\x0e\x5e\xa3\xcf\xfb\x96\xf5\x5b\xd6\x18\xd6\x00\x13\x55\x88\x77\x52\x96\x8a\xc7\xf3\x78\x13\x2a\x0b\x95\x71\x30\x8c\x83\xf1\x40\xe2\xa1\x42\xba\x81\x50\xba\xa5\x56\x2f\x8e\x43\xe5\xfd\x61\x92\x6a\x24\x5c\xbb\xd4\xf0\x82\xab\xad\xef\x5b\x73\xb4\x76\xab\x8e\xb8\xb5\xb7\xc4\x42\x15\xce\x9e\x44\x56\x94\x85\x04\x62\x79\x34\x98\xf6\xa6\x3c\xab\xf4\x05\x2c\xd5\x1f\xaf\xc8\x59\xb1\xda\xb6\xe4\xd3\xdf\xb3\xc8\x44\x4a\x79\x73\x96\x64\x40\x92\x6f\x63\x77\x4b\xd2\xe4\x5e\x7b\xda\x2d\xad\x22\x29\x90\x92\x87\x0a\x55\x01\x09\x28\xcc\x80\x5f\xb8\xe6\x38\x74\x99\x2f\x90\xf2\x30\xf0\xd6\x6c\x18\x29\x15\x23\x29\xc6\x00\xa3\x42\xe0\xd9\x75\x92\x7a\x69\xc6\xcd\xc4\x9a\x04\x4d\x42\xf2\x25\x5f\x5f\xa0\xe9\xb1\xc3\xf8\xb3\x3d\x59\xdb\x30\x7f\xab\xf9\xc1\xcf\xb9\x40\x04\x2d\x44\xd7\x66\x91\xad\xc8\xbf\xe3\x90\x52\xac\xad\x92\xd0\x62\x23\xbd\xaf\xf8\xe6\xf3\x7d\xeb\x1c\xd7\x25\x2c\x4b\x7b\x2d\x88\xab\xbc\x80\xa9\xd8\x6b\x58\xb1\xf1\x82\x8e\x10\x56\x02\x71\xb1\xe2\x5f\x24\xa6\x12\xdf\x5b\x92\x98\x6d\x91\xac\x12\xab\x7b\xeb\xa1\xc8\xa2\x51\xb5\x11\x6b\x3b\x1e\x55\x95\x27\x2d\x0e\x11\x2f\x62\x2a\x5e\xb0\x6f\x5d\x61\x3f\x59\xf7\xbb\x0e\xe9\x4c\xa2\x06\x8b\x6c\xe0\x92\xa6\x13\x32\x4c\x2a\x4b\xa3\xc4\x09\x90\xc8\x14\x43\x9e\x9f\x6c\x0d\x07\xa4\x89\x54\xb5\x63\xd4\x71\x9e\x61\xbd\x2d\xae\x83\xb9\x4a\xd3\xa8\x52\x0c\xd3\xe2\x42\x4e\x18\x10\x51\x7a\x24\xa9\x3c\x93\x88\xaa\xa4\x42\x66\xe0\x3d\x45\xe1\x37\x71\xb9\x3f\x0e\x88\x72\x99\x8a\x48\xe9\x93\x8e\x5b\x29\x90\x29\xf0\xc2\xd4\x3d\xab\xae\x6d\x3c\x60\x41\x5d\xa1\x52\x7e\xc8\x87\x8b\x8b\x63\x54\x1f\x2a\x55\x36\x2b\x97\x8e\x58\xae\x19\x27\x34\xd3\xf7\x25\x93\x38\x48\x16\x7b\x72\xa1\xcc\xc2\xb2\x76\x3a\xa3\x04\xe0\x78\x47\x0a\x59\x47\x88\x65\x13\x5d\xaa\x8a\x57\xab\x84\x67\x42\x5c\x8c\x39\xfe\x30\x2f\xa0\x3d\x87\x0e\x95\x92\x7d\x71\x74\x3c\xa3\x35\xe7\xda\x0e\x99\x0f\x52\x07\x14\xe3\x56\x52\x5f\xc2\xe5\x8d\x43\xaa\xd8\x8f\x4d\x2a\x22\x0a\x0c\x02\x5a\xca\x0c\xb5\x51\xf8\x89\x5a\x1b\x5b\x40\xb5\x09\xfe\x1f\x5e\x04\x10\x17\x2b\xef\xd6\x2d\xcc\xbc\xc2\x96\xa2\x17\x95\x27\xc8\xf9\x0e\x00\x05\x1c\x6b\x1e\xa4\x9b\x1f\xd6\x43\x83\xf4\xbe\x38\xb9\x3a\xbe\x3c\x3a\x9b\x9e\x5f\x3e\x7d\x31\x3f\x3f\x99\x1c\x4e\x2f\xa7\xd6\xc1\xfc\x14\x4e\x84\x4b\xeb\xd5\xd1\xe1\xe1\xec\xf4\xcb\x56\xa2\xea\x2f\xd3\x7b\x9b\xff\xe7\x70\x6e\xcd\x2e\xe0\xf3\xe1\xd1\xe1\xfc\x4b\x13\x9a\xce\xce\x8f\x5e\xc3\x99\x64\x11\x31\x9d\x44\x1c\x4e\x0f\xe7\x17\x16\xbd\x83\x1f\x72\xd4\x17\x46\xb8\x9b\x5a\x8d\x26\x0a\xec\xcd\x65\x43\x8d\x50\x2f\xfd\xf0\x1a\xb6\xb2\xa8\x65\xf4\x65\x7e\xfd\xfa\x42\x86\x75\x27\xfb\xfb\xfb\x5f\x5a\x5f\xc8\xef\xe5\x83\xed\xc4\xe5\x25\x8c\x08\xb4\xc7\x30\xe9\x24\xc8\x61\x86\x02\x68\xfe\x68\x61\xc5\x30\x19\x04\xa7\xe0\xb6\x52\xc4\x3f\x9b\x18\xdd\x45\x6e\x2f\xea\x99\xac\xef\x60\x83\xb0\xb2\x99\xaf\x23\x8c\xb2\x9c\xde\x2d\x86\x29\x4e\x1a\x2c\x1c\xb2\xd8\xfc\x88\x92\x35\xc1\xd2\x6b\xa5\x03\xbe\x7f\x68\x75\x27\x99\x75\xd3\xc7\x28\x04\x37\x5d\x66\x4d\x68\xaf\x0c\xb9\x3e\x75\x6d\xfc\xe8\x98\x37\xbf\xdd\x27\x5a\xf9\xad\x0f\xc4\xf0\xce\x6d\xb7\x8e\x46\x78\x26\xa6\xa0\x2d\x18\xc1\xd6\xea\x0f\x35\xa8\x11\x94\x2a\x5f\xcf\x2c\x0d\x8f\x42\x13\x62\x3b\x59\x29\xb8\x42\x91\x0f\x70\x28\x87\x99\x19\x02\xc5\x9e\x36\xab\x44\x4f\x41\x5c\xb2\x1c\xd9\x0d\xa8\x17\x0a\xe2\x59\x9b\x80\x53\x99\x8b\x48\x6c\x07\x6d\x19\xe0\x2f\x2a\x65\x2b\x46\x96\x67\x6e\x5a\x22\x37\xca\x31\x0a\x0c\x60\xd9\xf4\xac\x08\xca\x52\xec\x7a\x96\x3c\x8d\xcf\xea\xe3\x93\x1a\x41\xbb\x13\xac\xe9\x11\x7d\xf8\x18\x3b\x41\xb7\x5f\x0c\xd0\x50\x4c\x5c\xfb\x83\xda\xb8\x16\x51\xd6\xce\xad\xc8\x64\x35\x77\x6d\x95\xad\xdf\xfb\x41\x56\x09\x75\x5a\xc8\x81\x91\x68\x82\x6b\x1c\x5c\xb5\xe8\xc8\x6f\x05\xcf\xcf\x98\xee\x08\xd1\x79\x57\x01\xbd\xf6\xbb\x3e\x64\x2f\xe9\x92\xda\xa4\xd4\x0e\x11\xdd\x80\xa3\x5d\x7d\x26\x6f\x92\x15\x6f\x7e\x5c\x9a\x03\x6f\xdf\x4b\x15\xe8\x26\xfb\x49\x37\xf2\x63\x60\x80\x07\x27\x1e\xb5\x0f\x43\x54\x07\x34\x86\xac\x48\x9e\x83\x07\x3c\x00\x6d\x94\x37\x87\xe2\xa3\x15\x30\xba\x55\xd0\x48\x0f\x37\x2b\x13\x65\x82\x73\xef\xda\x97\xe5\xca\xbe\x86\x8b\x2f\x5e\xc8\x8d\x80\x53\x8d\x7f\x0a\xb6\x3a\x8b\xd1\x14\x95\xde\xcb\xa0\xab\x04\x4e\x62\xdf\x91\xc6\x55\xec\x6f\xd5\x4a\x83\xbc\x62\xf8\x95\xea\xfd\x4d\x40\x45\xd7\x91\x5b\x76\x0a\x02\x50\x13\xdf\x30\x19\x2f\x5b\x89\xe1\xae\xd4\x06\x60\xf9\x88\xb7\xd2\x8c\xec\x0a\xa8\xff\xe2\x1d\x36\x09\x7d\xd7\x72\x17\xab\x90\x55\x66\xe9\xdf\xc5\xd6\x04\xf7\xa5\x64\xdc\xc3\x42\xf8\x29\x0e\xcf\xdc\xe8\x80\x1e\x57\x9e\xb7\x98\x81\x17\xa5\x19\x52\xb4\x3a\xb1\x9e\x1c\xac\xec\x6e\x14\xfa\xe3\x83\xe1\x29\x23\x8e\x64\xe6\x8f\xb0\x2c\x98\xa0\x88\x5d\xb2\x3f\x47\xb6\xa7\xd0\x95\x1a\x1f\xd2\xc6\x81\xe5\x89\xdb\x77\x43\xe5\x47\x6d\x98\xa0\x3a\xa1\x5a\xb3\x48\xb1\x52\xc6\xb2\x9d\x43\x15\x8b\x97\x78\xc9\xa8\xe1\x7a\x1e\x42\x2e\x4a\xc3\x51\x51\x48\x85\x08\x51\x3e\xdd\x1b\x2b\xe9\x6e\xb2\x96\xff\x11\xd6\xdd\xc7\x30\x53\xb8\x58\x24\x61\xf0\x8c\x4b\x07\x79\x69\x65\xb9\xed\xa1\x50\x4f\xdf\x26\x45\xab\x36\x7c\x84\x3b\xb7\x29\xd6\x7b\x61\x62\x6d\x46\xb9\x0e\x51\x77\x6d\x43\xb9\xd8\xfc\xe4\x78\x4b\x0e\x0c\xb0\x37\x3f\x3a\xb6\x02\x71\x6f\x1e\xb4\x6b\x11\x25\xbb\xf0\x10\xf8\xed\x47\x4d\x09\x81\xc9\x69\xe3\x05\xb7\x14\xf5\xe4\x05\x2b\xb8\xa0\xa7\xdc\xaf\xd6\x0b\xf2\x38\xbd\x56\xbc\x07\x1c\x0c\x8e\xfc\x84\x37\x39\x27\x06\x4d\x87\x7f\xf4\xf1\xca\x12\x84\x45\xa4\xdf\x00\xaa\x38\xfd\x90\xaa\x51\x89\xc3\xe5\xe0\xc5\xdb\x8b\xcb\xe9\xcb\xa3\xd3\x97\x6f\x2f\x8f\x4e\x66\xf3\xab\x4b\x29\xd3\x14\x2b\x87\x12\x12\x4b\xd4\x91\xf9\xbf\xf9\x9c\xd1\x83\x3f\xda\x40\xce\x2f\xaf\xce\x76\x39\x90\x2e\xf8\xda\x03\xf1\xed\x6b\xb7\xfd\xcc\xf6\xdd\x25\x1a\xdf\x8d\xe0\x62\xfc\x9b\xf4\xa2\xb6\x23\x68\x79\xac\x1f\x9e\x2c\xe2\x7b\x59\xfb\x6e\xc2\x2b\x22\xc8\xec\xa6\x27\x75\xed\x4a\x5c\x92\xb7\xfd\xc4\xa2\xdf\xcd\x34\x2c\x0a\x16\xa4\x3a\xe2\x79\x7b\x3c\x51\x7d\x42\x18\x49\xdb\xe5\x50\x9f\x57\xfb\xd3\x43\xb5\x9b\x1d\x8c\x3e\x13\x40\xb1\x92\x6f\xe2\xa5\xaa\xb2\xb0\xfd\x5e\xd6\xa7\x29\xc4\x86\x25\xed\x57\x74\xae\x29\x61\xc4\xfe\xb5\xba\xce\xad\xac\x27\x6b\x0c\xb9\x7d\x59\x4a\xd0\x26\x12\xbe\x53\x4b\x33\x81\x19\x06\xd6\xb5\x9d\x78\x8b\xdc\x35\xaf\xc0\xd0\xfe\x68\x1f\x7c\xaa\x31\x04\x66\x63\x40\x97\x07\x0a\x67\x19\x45\x2b\xcc\x73\xb0\x10\x95\x6a\x61\x4d\xfc\x72\x8f\x0b\x0b\x54\x7b\x6f\x61\xba\xb1\x55\x35\x40\xcc\x4a\x7c\x94\x6b\x14\xa9\x40\x0f\x6a\x0f\xa3\xec\xfa\x52\xfd\x51\x1f\xe6\x5d\xa0\xb2\x76\xc7\x9b\x9f\x22\xb3\x3c\x06\xbc\x21\xe4\xfe\x08\xf2\x56\xb4\x63\x61\xcf\x43\xc5\x8f\x1f\xd9\x4b\x23\x63\x28\xc2\x52\x23\x32\x04\xda\x45\xbe\x29\xd8\x72\x23\xa2\xeb\xfb\xaa\x3b\x47\x6b\x55\x09\xee\xe5\xdd\x72\xb0\x37\x07\x7b\x6d\xaa\xd9\x55\xeb\x12\x64\x13\x62\xf1\x8c\x50\xd2\x21\x7b\x4f\x99\x00\xe7\x10\xfe\x76\xff\x10\x3e\xe0\x3a\x46\x3e\x22\x4a\x9b\x6d\x97\xf5\x8b\xea\xaf\xda\x60\xf1\xd4\xe4\xa2\x1d\x77\xd4\x12\xa5\x54\x3b\xeb\xda\x0b\x30\x7c\x0d\x26\x02\x4e\x47\x5b\xa5\x9c\x98\x01\xe9\x45\xa3\x68\x01\xd0\xbe\x7c\x9b\x1f\xea\x81\x43\x4a\xf1\x44\xd9\x8c\x1c\x03\xa6\x28\x50\x15\xa3\x20\xcd\xec\xa4\x35\x54\xed\x73\x5a\xc7\x65\x34\xbf\xea\x4a\xec\xa6\x55\xd7\x45\x08\x74\x3b\xe9\x1c\x1c\x6a\x66\xc5\xd7\xac\x85\x34\x4e\xf9\x23\x21\xdb\x5b\xb1\x0c\x28\x22\xd4\xa3\xa0\x92\x46\x9d\x85\x01\x04\x74\x16\x2f\x6a\x2e\xb4\x33\x02\x46\x2d\x13\xc7\xd0\x4a\xfb\x12\xe9\x3b\xb7\x5d\xcd\x6e\x7c\xa6\x37\x06\xe5\xb1\xdc\xfc\x50\x5f\x1c\x93\x8e\x18\x8d\xb6\xc7\xfa\xe2\x69\x9f\x99\x01\x1a\x37\xb7\xb7\x52\x1c\x52\xa5\xd6\x50\x26\xe0\x3d\xd5\x22\x76\xdc\xc4\x31\x51\xe9\xd5\xc9\xe0\xe6\x65\xaa\x4b\xe5\x2e\x14\x96\xb8\x96\xa7\xfa\x61\x51\xc0\x17\xf4\x9b\xc1\x4e\x95\xee\xf1\xfa\xcf\x7d\xe0\xc6\xa9\xea\xf8\xe0\xae\x4a\x86\xa7\x87\xc6\xf9\x6d\x08\x36\x53\x6c\x9a\xda\xcf\x3d\xe0\x86\x51\xa4\xba\xbb\xd8\xb1\x29\xc1\x04\xd8\xb2\x29\x67\xe9\x33\x50\x23\xb8\xf7\xab\x82\xe9\x29\xc6\xb1\xae\x23\x8f\x2a\x79\x6c\x7e\x4a\x30\xcc\x4b\xbc\x86\xe1\xcc\x6b\x43\xaf\x16\xd6\x31\x68\x3f\xf9\xb0\x37\x95\x09\x50\x6a\xd9\xa2\xe5\xbb\x50\x3d\xaa\x8d\x2f\x13\x95\x4d\xf1\x30\x0f\x51\x3b\x69\x45\x87\x4d\x6e\x63\xee\x2b\x83\xb1\x06\x9c\x94\x64\x64\xe6\xcc\x82\x2e\xb3\x60\xc3\x13\xfa\xd0\xb7\xab\x0c\x96\x84\x51\x3b\x4a\xcd\xd7\xf4\xe9\x50\x54\x04\xc9\x8c\x2a\x82\xc0\x5b\xed\x3b\xb5\xfa\x63\x2f\x98\xed\xa2\xb0\xf6\xab\x3e\x54\xf4\xf5\x29\xc0\x26\x46\x4a\x3f\x96\x40\x52\xc0\x34\x2e\xea\x50\xa9\xfd\xa8\x40\xd0\xf8\x94\x36\x96\xdb\x8e\xbc\xeb\xad\xdf\xb5\x21\xdf\x51\x48\xbc\xa8\x88\xce\xde\x15\xca\x70\xa2\x0c\x4b\x0a\x25\x6d\x45\x2a\x62\xe1\x65\x91\x4a\xaa\x6e\xfe\xa7\xa2\xa6\xca\xb0\xae\x48\xf7\x2a\x6d\xcc\x5b\x1b\x40\xfc\x9e\x1b\xee\x88\x2c\x8c\xf7\xef\xad\x27\x94\x75\xc3\x9c\x7b\xc6\x65\x87\x64\x23\xb7\x8b\x14\x63\x6c\xdf\xbf\x6f\x6f\x26\xb6\x0d\x0d\x5f\xa5\xfb\x09\xa5\xf3\x74\x03\xec\x43\xf8\xc1\x0b\x59\x77\x2b\xf2\x54\x24\x35\x3f\x67\x84\x49\x5d\x58\x47\xf1\x64\x2f\x6c\xec\x32\x01\x20\x2b\xd7\x8f\xac\x2f\x0e\xe6\x27\x27\xd3\xd3\xc3\xf6\xd0\x74\xad\x77\xfa\x51\x90\x05\xe9\xfc\x46\x64\x0f\x26\x00\x55\x26\xcd\xb5\x87\x53\xb5\xbf\xe6\x18\x35\x26\x46\x78\x1c\x3b\x28\x8b\x49\x75\x85\x1a\x6a\xbc\xd1\x07\xfb\xa1\x97\xbc\xbb\x42\xb1\x8b\x55\x4c\x6f\x2c\xf1\x8d\x28\x46\xa7\x22\xa2\xfc\xa2\xe3\xb6\xbe\xd8\x8b\x16\xd0\x28\xe4\xa0\x94\x11\x5c\xb5\x67\x65\x40\x17\x65\x5d\x9b\xa1\xde\x8e\xe7\x11\xfd\xc2\x65\x39\xad\x83\x17\x72\xc2\xf3\x45\x58\xd4\xd6\x2a\xd5\x1b\x48\xb8\x71\x34\x37\x47\x2f\xaa\x6b\x29\x57\x54\x13\x72\xee\x02\x5e\xae\xbd\xd5\x48\x41\xa5\x10\x57\x1a\x52\xfe\x5e\x39\x39\x2e\x90\xfd\xd5\x45\x21\x2e\xcc\xce\x36\xe6\x10\xd2\x25\xd8\x92\x49\xb6\x14\xa4\xa0\x07\x08\x74\x4a\xb4\x76\x60\xeb\x68\xb5\x7d\xbb\x0c\x90\x87\x9a\x95\x87\x5a\x1f\xa0\xed\xd1\x39\x23\x20\x2b\x1a\xdb\x77\x0e\xe3\x85\xcf\xa9\xbe\x79\x11\x38\xce\x52\x53\x11\xba\xfd\x8a\x71\x44\x2e\x40\x3b\x71\xd7\xd5\xfd\x06\x5f\x68\x6c\xb7\xd2\x6b\xbc\xdb\x9a\x5e\xeb\x45\x47\xe8\xb8\xfe\xe5\x7d\x84\x10\xe5\x9f\xf2\x04\xd1\x4b\x69\x50\x03\x19\x94\xf0\x80\xf5\x1e\x65\xa0\x82\x00\xdf\x11\xef\xaf\xf1\xc6\x10\xec\xd8\xdb\x2d\x0e\x97\xb1\x2a\x53\x49\xf7\xb5\x21\x74\x24\xd9\x62\xe1\xba\x2a\x7d\x53\xef\xa5\x3e\x34\x54\x43\x46\xad\x75\x96\x70\x76\xbf\x95\x90\x66\x43\xc5\xaf\x33\x90\x80\xa4\x41\xaa\xe8\xaa\x01\xc2\xa8\x53\x4c\x01\xc7\xc0\x53\xaa\xd2\x27\xc0\x65\xac\x57\x22\x50\xc3\x3d\xd6\x45\xf1\x38\x94\x8e\x42\x5b\x8f\xa0\xde\xed\x97\x47\x09\xde\xad\x15\x94\x7e\xc2\xb2\x25\x8c\xef\x8f\xf1\x2e\xfd\xfe\xfd\x49\xc5\x56\xb0\x57\x0e\x1b\xac\x3c\x67\x35\x06\x45\xee\xe5\x75\xe2\x12\xf9\x9c\xec\xda\x5f\x14\x7b\xcd\x7f\x92\x87\xe8\x9e\x55\xf6\x34\x53\xc1\xd9\xd3\x30\x78\x8e\x21\x10\xf2\x95\x29\x67\x07\x74\x28\xea\x1d\x23\x13\xad\xbf\xff\x3f\x21\x5d\x64\x8c\xd5\xbd\x25\x89\x78\x9c\x0b\xaa\x67\x75\xd0\x27\xb9\x89\x75\x31\xb1\x0b\xa2\x40\x8e\x82\x4c\x32\xc1\x6a\x21\x48\xe5\x01\xbe\xef\x17\xd1\x0e\x82\x9d\x03\x41\x68\x42\x0a\xd3\x38\x48\xa5\x82\x61\x1c\x6c\x4e\x22\x35\x17\xe9\x24\x16\xf2\x12\x59\x30\x74\x98\x13\x66\x3c\xc1\x61\x4f\x2c\x7a\x28\x19\x09\xc5\xe3\x04\x70\xd2\x70\x81\xec\x55\x21\x90\xa0\x48\x36\x82\x44\xf7\x95\xa0\x55\x1b\x7a\xf0\x16\x28\x96\xd6\x5f\x7e\x11\xb2\x0c\x6a\xc3\x34\x39\x23\x35\x39\x1b\xe9\x6c\x15\xc8\x90\x2c\xde\x76\x28\x5d\xad\x27\x25\x5c\x60\x2d\x1f\x50\x63\x0c\xdc\xb4\x04\xf6\xd1\x20\x39\x19\x28\x58\x81\x5c\x22\x61\x64\x05\x7c\xfe\x25\xcf\x58\xe2\x56\x22\x73\xc5\x02\x02\x00\x00\xff\xff\x7b\x22\x06\xbf\x0a\x0c\x03\x00") - -func cf_i18n_resources_pt_br_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_pt_br_all_json, - "cf/i18n/resources/pt_BR.all.json", - ) -} - -func cf_i18n_resources_pt_br_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_pt_br_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/pt_BR.all.json", size: 199690, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_zh_hans_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x6b\x77\xd4\xd6\x96\x28\xfa\xfd\xfe\x0a\x5d\xce\x07\x92\x3b\x5c\x26\xc9\xde\xdd\xe3\x1c\xce\xb8\xa3\xaf\x03\x86\xf8\x34\x60\xb7\x6d\xd8\xbd\x4f\xc8\x60\xcb\x55\xb2\xad\x4d\x55\xa9\x5a\x52\x99\x78\xe7\xa4\x87\x49\x30\x18\x02\x98\x24\x3c\x02\x71\x02\x24\x90\x90\x07\xb6\xf3\xe8\x60\xfc\x80\x1f\xd3\xa5\xaa\xf2\xa7\xfc\x85\xbb\xe6\x9c\x4b\x2a\xa9\x4a\xaf\xb5\x24\x9b\xec\xdd\xbb\x47\xef\x50\x96\xb4\xe6\x63\x3d\xe7\x9a\xcf\x37\xff\x2f\x45\x51\xde\x81\xff\xb0\xff\xdb\xa3\x97\xf6\xec\x57\xf6\x9c\xac\x9e\xac\x8e\x0f\x8d\xec\x3f\x59\xdd\xd3\xe7\xbe\xb1\x4d\xb5\x6a\x95\x55\x5b\x37\xaa\xee\x27\xce\xea\x62\xfb\xe7\x9f\x9d\x2f\xbf\x0b\x7c\x58\x31\x4a\xfa\xa4\xae\x01\xa0\x49\xb5\x6c\x69\xf0\xfc\xdd\xbe\x08\x2c\x7f\x34\xea\xa6\xf2\xbf\xc6\x86\x8f\x29\x96\x6d\xea\xd5\x29\xc5\x9a\xad\xda\xea\xdb\x8a\x6e\x29\x7a\x75\x46\x2d\xeb\xa5\x7e\x45\x19\x31\x8d\x9a\x66\xfa\x5e\xd9\xd3\xba\xb5\x5f\x51\x8a\x93\x8a\xa5\xd9\x05\xb3\x5e\xad\xb2\xa6\x05\xad\x3a\xa3\x9b\x46\xb5\xa2\x55\xed\xc2\x8c\x6a\xea\xea\x44\x59\x2b\x4c\x99\x46\xbd\xa6\xec\x7d\xe7\xe4\x9e\xaa\x5a\xd1\x4e\xee\xd9\x7f\x72\x0f\x03\x5b\x67\xbf\xfa\x7a\x1f\xbd\xbb\x37\x96\xdf\xdf\x2e\xb1\xbb\xde\xe7\x96\xad\x4e\xfd\xd5\xf4\xf9\xce\x10\x2b\xd0\xe7\xff\x8f\x32\x3e\xad\x59\x1a\x23\xc6\x9c\xd1\x8b\x9a\x52\x2b\x33\x3e\x95\x69\x75\x46\x53\xd4\xaa\xa2\x5a\x96\x51\xd4\x55\x5b\x2b\x29\x45\xc3\xb2\xfb\x95\x03\xa6\xc6\xfa\x80\xf1\xaa\x7a\x2d\xf4\x2a\x63\xa2\xca\x7e\x9c\xd1\xcb\x65\xf6\x57\x91\xf5\x0a\x30\x49\x2d\x22\x7b\x10\x11\x2b\x25\xad\x6a\x00\xf4\x10\xf4\x56\x4d\x2b\x32\x2e\x8a\x08\xc7\xf2\x93\x72\x46\xb7\xa7\x19\x0a\xad\xd2\xaf\x0c\x4d\x86\x51\x62\x4c\x12\x05\xf6\x6c\x4d\x83\x3e\x2f\x02\xd5\x5a\xa9\x8f\x7d\x0b\xc0\x88\xd2\x09\x8d\x88\x35\xb5\x52\x7f\x68\xd7\xd9\x66\x3d\xae\xe7\x06\x6a\x35\x36\xf0\xaa\xc9\x00\xc7\x6e\x46\xce\xfa\xf5\xd6\xf5\x47\xad\x47\x1f\x38\xeb\x8b\xce\x93\x1f\x9d\x6b\x2b\xce\xa5\x47\x92\xbb\x12\xe0\x7c\xe7\x9d\x7e\xf6\xcf\x31\x36\xfc\xef\xbe\xab\x9c\x51\x2d\x97\x08\xa5\x6e\xc1\xc0\xf0\xae\xaf\x54\xd4\x6a\x49\xf9\x13\xfb\xf8\x00\xfd\x7e\xf7\xdd\x3f\xc5\x92\x99\x1f\x68\x01\x7e\x8e\x19\x8a\x5a\xd3\x15\xad\x5a\xaa\x19\x7a\xd5\x86\x25\x11\x3d\x63\x92\x3e\x17\xc0\x3b\x6a\xd4\x6d\x4d\xb1\x0d\x98\x04\xf5\x6a\x45\xad\xd5\x18\x93\x8c\x39\x36\x19\x15\x9c\x12\x55\xbb\x3c\xab\xf0\xe7\xec\x33\x36\xd9\x18\xe6\x5a\x59\x2f\x22\x35\x71\x34\xe6\x07\x5a\x80\x1f\x38\x11\x15\xe5\x38\x5b\xc7\x7b\xd9\xc6\x52\x51\xcd\xd3\x9a\xcd\x96\x12\x5b\x0a\x05\x4b\x19\x1b\x1c\x3d\x31\x74\x60\x70\x2f\x60\x9b\xd1\xb5\x33\x6c\xd1\x59\x45\x53\xaf\x01\x3a\x0b\xd6\x8a\x5e\x2d\xe9\x33\x7a\xa9\xae\x96\xf9\xfa\x33\x60\x55\x4d\xe9\x33\x5a\xd5\x5d\x5b\x71\x1c\xef\x26\x72\xd1\x3e\x19\xb0\x2c\x7d\xaa\xaa\x98\x46\x59\xb3\x68\xdf\xd8\x0b\xf3\x96\xc6\x81\x91\x6c\xb2\x89\x0e\xfb\xb0\x61\x4e\x15\xe0\xa3\xbd\x0a\xcc\xed\xf0\x6f\xac\x1a\xe3\x89\xbe\x8a\x5b\xee\x9e\xe4\xa1\x34\xd6\xd6\xd9\xca\x6f\x2e\x3c\xe9\x06\xe7\x2c\x9c\xdf\x9e\xbf\xa2\xec\x6d\x6d\x9c\x6b\x6d\x5c\x68\x7e\xf6\xfe\xf6\xed\x6b\x7b\x9d\xc5\x4b\x7b\x5b\xdf\xac\x6f\xdf\xfa\x99\x1e\xc8\x33\x8d\x43\x01\x38\x0f\x8d\xab\xe6\x94\x66\x7b\xcb\x14\x47\xc1\xc6\x67\x4a\x95\x8d\x05\x72\x94\x92\x97\xad\xe7\x8c\x97\x70\xa8\xcd\xcb\x17\x9c\xe5\x3b\xcd\x9b\xab\x44\x7e\x0e\x84\x47\x11\xcc\x86\x49\x98\x5c\x0f\xd6\xf6\xdc\xc5\xe6\x07\xdf\x00\x99\xd8\xed\xf2\x64\xd6\xf9\x54\x2f\x1b\xec\xec\x56\x0a\xaa\x32\x30\x32\xa4\x14\x0a\xd6\x69\xbd\x56\xb0\xac\x72\x01\xcf\x7e\xa4\x6b\x2f\xa3\x18\x3f\x85\x6d\x2b\xe6\x2b\xc6\xa5\x55\xaf\xd5\x4c\xcd\x22\x01\x41\xd1\x4c\xd3\x30\xd3\xb1\xba\x3d\x77\xa7\xfd\xfc\x82\x4b\x4e\x73\xe1\x66\x7b\x6e\x9e\x30\x3a\x1f\x6e\x35\x36\x1e\x34\x3f\x7b\xe8\x3c\xdf\x6a\xdd\x78\xb8\x37\x1c\xf9\xf6\xf5\xdb\xed\x95\x15\x89\xde\x60\xbf\x5e\x67\x07\x29\x3b\x19\x8e\xaa\x55\x75\x8a\x49\x39\x05\x92\x0f\x34\x5c\x44\x15\x7c\x88\xfb\xdb\x04\x7d\xa6\xa8\xc5\xa2\x51\x67\xfb\x36\xbc\xae\xa9\xb3\x20\xed\xb0\xf5\x3f\x69\xc4\x1c\x4c\x61\x48\x9c\x85\x4f\x9d\x8d\x75\xe7\xa3\xcb\xad\xe5\xfb\xad\x6b\xe7\xdb\xcb\xf7\xdb\x3f\x3f\x6d\xff\xfc\x15\x5b\x69\xec\x61\x63\xe3\x93\xe6\xf7\xcf\x1a\xcf\xef\x37\xcf\xae\x48\x1d\x4b\xec\xd7\x81\x43\xa7\x8e\x0d\x1c\x1d\x54\xd4\x3a\xdb\x31\x40\xd2\xfa\xff\xb4\xb7\xd5\x4a\xad\xac\xf5\xb3\xe3\x4f\x39\xb9\xe7\xe4\xc9\x93\x7b\x6a\x4c\x22\x39\x63\x98\x25\xf8\x7d\x72\x8f\xf2\x12\xdb\xd7\x54\x26\x6e\xfc\x5b\x9d\x09\x34\x4c\x02\x9c\x84\x69\xc2\x76\xfe\xaa\xe2\x7e\xf8\x72\x1c\x93\x69\x30\x3a\x2b\xe7\x5b\xf7\xce\xba\xf8\xe8\xaf\xc6\xda\xe3\xf6\x07\x0f\x9b\x4b\x17\x9d\xcd\x1b\xce\xe2\x93\x5f\x37\x2f\x6f\x2f\xcd\x6d\x5f\xb8\xc0\x66\x7f\x7b\xeb\xfb\xc6\x53\xfe\xfc\xe5\x9d\xe9\x87\xca\xac\xc7\x1d\x90\x04\x0b\x83\xf3\x3f\xc9\x26\xbe\xfb\x8a\xef\xbc\x2a\xed\x37\x2f\xc7\x8f\xb6\x20\xca\xae\x5e\x60\x3b\x50\xf3\xde\x26\xf5\x42\xfb\xab\xb3\xd4\x05\xf4\xf0\xe5\xac\x93\xa1\x68\xd4\x66\x0b\x16\x13\xfa\xd9\xc9\x36\x36\x7c\x7c\xf4\xc0\x60\x61\x60\x64\x44\x19\x1f\x18\x3d\x3c\x38\x8e\x3f\xdf\x2c\x18\xee\x9f\xc3\xa3\x87\xdf\x62\x7f\x5b\xee\xdf\x63\x23\x03\x07\x06\xe1\x49\xa1\x6a\x14\xd8\x3a\x07\xc1\xea\xad\x74\x3d\xb1\xb3\x78\x65\x7a\x82\x36\xbe\x97\x8c\x8a\x6e\xc3\x2c\x37\x61\x98\xf8\xa2\xa6\x91\x81\x0d\x8d\x3e\x62\x62\x9a\x66\xaa\x45\x9b\x9d\xe7\x4c\xec\x29\x14\x3c\x18\x28\x83\xd7\x4c\xa3\x52\xb3\x71\xb2\x4c\x18\xf6\x74\xca\xa9\xc1\xd1\x37\xd6\xae\xd0\xc9\x43\x87\xac\x73\xed\x0a\x5b\xfd\x34\x1f\x9c\xc5\xf7\x9a\x37\x56\xd9\x34\xe0\x4d\x9c\xd5\xf3\xed\xe7\x9f\x36\xd6\xe6\x9a\x8f\x1f\x36\x17\xaf\xb5\x1e\xac\x37\xb6\xee\xb5\x9f\x7d\xec\xcc\x3f\xec\x6d\x9c\x79\xa2\xf0\x73\x81\x6d\xb4\x86\xf2\x52\x37\xbf\x4c\xd6\x61\x7d\xa5\xd4\xcd\x32\x74\x92\x31\x61\xab\xec\x5b\x55\x31\xaa\x5a\xc1\xd6\x59\x37\xf6\x74\x61\xaa\x6d\x23\x14\x25\xe3\x9a\x31\xdb\x78\x06\x8c\x37\xd6\xbe\x75\x16\x57\x1a\x1b\x0f\xdb\x57\x9f\x38\xcf\x6e\x41\x57\x7c\x7f\xbf\x39\xf7\x35\xb1\xdc\xba\x73\x6e\xfb\xe3\x67\xcd\xab\x0f\xf3\xe2\xbd\xde\xbb\x74\x0b\x35\xe9\x8d\x53\x64\x5a\x08\xa1\x16\xdb\x43\x23\xfa\x26\xf6\x9e\x98\x9e\xbe\x1d\xdc\x4b\xc5\x30\xef\xe2\x96\x1a\x4b\x58\x4d\xfd\x87\x7f\x38\x63\x8c\x1e\x54\x5e\x22\x55\xc0\x6c\xc4\x5e\xc3\xee\xa9\x4c\x42\xac\x83\x34\x61\xe5\xd1\x21\x1d\xbc\x51\xdb\x4b\x63\x6b\x89\xc9\xf6\xb4\xc9\x64\xee\x83\x5a\xdd\x9a\x66\xb2\xe1\x08\xfd\xf5\x66\x61\x42\x79\xfd\xf8\xd0\x91\x83\x6c\xdf\xfe\x67\x7c\x04\x9b\x77\x51\x39\x30\x7c\xf4\xe8\xc0\xb1\x83\xf0\x47\x49\x39\x38\x7c\x74\x60\xe8\x18\xfc\x9e\x54\xd8\xd3\xa1\x43\x83\x63\xe3\xa7\x46\x06\xc6\xdf\x48\x79\xa2\x20\x4a\xbf\x5e\x02\xb0\x3a\x97\xe7\x19\x8f\x84\x8d\x24\x47\x42\xe6\xdc\xbd\xcb\x9f\x4f\x2a\xdb\xef\x3f\x6a\x6d\xfd\xd8\x5c\x5c\x6c\x3f\x5f\x6d\xde\xbc\xd0\xd8\xf8\xa5\xfd\x64\xc5\x79\x76\x2e\xea\x44\x49\xbb\x34\x90\xa0\xdc\xb8\x91\x22\x35\x71\xbc\x86\xf1\xce\xaa\x96\xd9\x31\xd6\xd9\xc6\xcb\xba\x65\xc3\x8d\x15\xb5\x22\x85\x92\x56\xd6\xd9\x99\x08\x17\x7b\x75\x0a\x24\x79\xb5\xa3\x6b\x3a\x63\xea\xb6\xcd\xee\xb4\xfc\xca\x7f\xe2\xc0\xc0\xc8\x29\x7e\x39\x1e\x53\x7c\xea\x3f\xc5\x55\xff\xe1\xb2\x57\xab\xb3\xec\x64\xac\xb3\xe9\xee\xd3\x11\x58\xd1\xb7\xf1\xdf\x2c\x9d\x19\x7b\x9a\x6b\x02\x0a\x3e\xa5\x60\x75\x52\x9f\xaa\x9b\x88\x88\x2d\x59\x93\x2d\x64\x26\x69\x80\xea\x95\xb1\x8b\xd7\x1b\xd2\xcd\x1a\x13\x7f\xd6\x8a\x70\xcd\x28\xb0\x4b\x84\xd6\x7f\xb2\xea\x9b\x39\xf5\x1a\xbb\x03\x31\xa0\x5c\x7f\xc8\x26\x7e\x6a\x65\x2b\x28\x80\xa3\x3a\x7b\x52\x67\xbd\xc2\x08\x84\xa3\x1d\xf5\xc2\x19\x89\xef\x57\x10\x17\xe8\x4b\x6b\x2a\xa8\x3e\x69\x68\x7c\xed\x08\xa3\x5a\x85\x01\x04\xb5\xed\x84\x65\x94\x41\x0d\xc5\x46\xc6\xd4\x60\x76\xcc\x74\x9a\x12\x7d\x49\x1d\x01\xeb\xef\xd4\xf8\xf0\xa9\x43\x43\x47\x06\x39\xaf\x83\xb4\x4d\xc2\x34\xea\x21\x71\x3f\x7e\xf1\x0e\xfe\x97\xfd\xdf\xc9\x3d\xc5\x72\xdd\x62\xa4\x9d\xaa\x1a\x25\xcd\x62\x5d\xd7\x79\x47\xaf\xe1\x1e\x08\x8f\xff\xa1\x2f\xf0\xbc\xa2\x55\x0c\x73\xf6\x54\x65\x02\xde\xbd\xfa\xca\x6b\xbf\x77\xdf\xbe\x8b\x3f\xde\x8d\xbe\x12\xd7\x5f\x79\xe5\x95\xff\xb1\xd3\x33\x27\xb7\x89\xb3\x4b\xf3\x26\xff\x29\xb3\x43\x33\x26\x7e\xc2\x44\xcc\x97\xf8\xe9\x42\x33\xc2\x3f\x65\x04\x0e\xa6\x1d\x9c\x48\xfb\x79\xe7\xb8\x3d\x39\xa1\x57\x4b\x5e\x3f\x7a\x72\x00\xdf\x72\x4f\x0d\x1d\x1b\x1b\x1f\x38\x76\x60\xf0\xbf\xf0\xe6\x94\xbe\x83\xb2\x6e\x5a\x35\xcd\xac\xe8\x96\x05\x47\x17\x4c\xa8\x93\x7b\x4c\x4d\x2d\x15\x8c\x6a\x79\x96\x5d\x17\xe2\xf7\x9f\xbf\xcf\x99\xff\xa2\x73\x66\xc7\x0f\xba\xdf\xe6\xae\x45\x26\x55\xaf\x8b\x79\xcf\x2a\x23\x47\x06\x8e\xfd\x15\xcd\xc3\xfc\xa7\x61\xba\x7e\xfa\xeb\x9a\x81\x2f\x74\xab\xfb\xfb\x44\xfb\xaf\x33\xd1\x84\x2e\x89\xe6\xd4\x40\xbd\xa4\xdb\x06\x58\x84\x46\xdd\x73\x1a\x4c\x4c\x68\x44\x33\xc0\x56\x88\xc6\x25\x54\x16\x99\x5a\xcd\x30\x6d\x2b\x5e\xa1\x10\x00\xe9\x2c\x7e\xdb\x7e\x7f\xab\xbd\xfc\x7c\xfb\xd6\x32\x19\x0c\x5b\x77\xce\x91\x55\xc9\xf9\xe8\x72\xf3\xd2\x43\xe7\xc3\x4b\xd2\xaa\x04\xd3\x67\xcd\x1a\x62\x77\xea\xa0\xc9\x0c\xd4\x5c\x56\x1f\x9b\x74\x65\x58\x17\xf0\xa2\x38\xad\x56\xa7\xb8\x77\x4c\x1f\x3e\xb1\x34\x1b\x3c\x64\xaa\x25\x98\x9e\x78\x9b\x4f\x66\xae\x83\x73\xfb\xbd\xb9\xf6\xca\x13\xcf\x82\x46\x1a\x2e\x50\xf1\xa1\x89\x14\xf8\xbb\xfe\xd4\x59\xfc\xa4\xb9\x74\xc5\xb9\x74\xbf\xbd\x7c\xdf\x59\xf8\x88\xbd\x6d\x2f\x3f\x6b\x6d\x2d\x6f\xcf\x5f\xd9\xfe\xe2\xb3\xed\xdb\xd7\x9c\x85\x5f\x64\x3b\x60\x04\xa6\xb2\x35\x6d\xd4\xcb\x25\x9c\xf1\xca\x5f\xf4\x1a\xce\xea\xbe\x8e\x6a\xdc\xff\x10\x34\x0c\x4a\xd9\x28\xaa\x65\xa5\xa4\x9b\xac\x57\xd8\x84\xea\x57\x46\x0c\x4b\xc7\xf5\xa7\x5b\xec\x75\x0d\xff\x9a\xd1\xd0\xe4\xc0\xd8\x84\x0e\xb4\x2d\xb6\xa8\x75\xc3\xd4\xed\x59\xea\x36\xf6\xa5\x65\xa0\x4b\xcb\xa4\x69\x54\x18\xc8\x33\x9a\x65\x03\xb6\x69\x7d\x6a\x5a\x8b\xf3\x57\x62\x8f\x48\x81\xe4\xac\x5f\x6f\xaf\x3c\x6c\x7e\xb2\x42\x5a\x75\x46\x24\xa9\x97\x58\x07\xd1\x93\xe3\xa3\x47\x9c\x85\xd5\xde\xb7\xcd\x85\x9b\xcd\xa5\xef\x9d\xa5\xd5\xd6\xa7\xcb\xce\xd6\x8d\xff\x9c\x7b\xaf\xb1\x75\x85\x75\xa8\x07\xaa\x79\xe3\x67\xb2\x5a\x50\x47\x37\x36\x3f\x71\xe6\x17\x5a\xeb\x5f\xb3\x27\xce\xd3\x5f\xda\xcf\x3f\x6d\xdf\xbf\xdc\xbc\xfa\x91\xb3\xbe\x08\xb8\x36\xae\x36\x97\xe6\x1a\x5b\x57\x19\x2e\xf6\x63\xfb\xbb\x4f\xa4\x44\x86\x11\x50\x9e\x55\xea\x65\x5b\x87\x6d\x40\xad\xd5\x3c\x05\x33\x9b\x8c\xfa\x24\xeb\x92\x38\x57\x4b\xf6\x88\x2c\xed\xbd\xda\x36\x7a\xe2\x3c\xb8\x03\x96\x07\x9f\x72\x4e\xce\x21\x93\xfd\x1a\x03\x85\x77\x67\x7d\x9e\x00\x67\x92\xb2\x31\xc5\xd6\x03\x5f\xdc\xde\xc2\x00\x07\x35\x4b\x61\xf3\x02\x4d\xe9\xa8\x28\x8f\xe7\xa1\x0b\x74\xf3\xee\xc3\xd6\xd2\x07\xcd\xc7\x0f\xc8\x9f\xa1\xb1\xf6\x98\x2d\xfd\xe6\xad\x87\xce\xf3\x5b\x30\x8c\xb8\xf4\xd9\x1a\xe1\xa3\x94\xc9\xd0\x8c\x98\x0f\x6a\x33\x5a\x19\xdd\x04\xc3\x0c\xe8\x38\x26\xc4\x19\x6e\xed\x1e\x9f\x1a\xb2\x9f\x7e\x7b\xeb\xc1\xd5\x65\x47\x0f\x38\xaa\xb1\x2d\x00\x17\x3f\x30\x4c\xdd\x81\xfc\x67\xde\xfa\x90\x88\x14\x9b\x1f\x3c\xd1\xaa\xa4\x5f\x64\x3d\x52\x37\xb9\x1d\xc4\x73\x0d\x4a\x39\xaa\x29\xf6\xbc\x8f\x16\x9c\x95\xa7\x7c\x05\x92\xc2\xff\xce\x39\x1a\x79\xe7\xda\x0a\xfb\xcc\xb9\x76\x6e\xfb\xfe\x53\xe7\xd2\x5d\x76\x1e\xc8\xb2\x8d\x47\x3f\x89\x17\x25\x3a\xc8\x25\x2e\x37\x43\xb6\xbb\x67\x92\x7f\xa6\x02\x5e\x79\xb0\x6a\x4d\x53\x9d\xa5\x65\xeb\x3b\xbe\x41\x16\xb1\x40\x9c\x21\x8f\xab\x09\xf2\xe0\xd3\x14\xb3\x5e\xd6\xe2\x35\xc8\xbf\x61\x62\x77\xb3\xcf\x09\x02\x4a\x66\x3e\x4e\x90\xb9\x4c\xdc\x10\x5c\xfc\xfc\x75\xd5\xd2\x94\x61\x2e\xff\x5a\x74\x2b\x06\xab\x3a\x1c\x50\xb0\x02\x50\xa4\x81\x96\xd6\xbf\xd5\x55\x53\x53\x26\x4c\xb5\x78\x1a\x4e\x35\x78\xe9\x77\xce\x9d\xd6\x19\x79\x5c\x90\x86\x0f\x4d\xed\xdf\xea\xec\xa0\x44\x33\xaa\xcd\xb9\x60\x88\xb9\xd4\x77\x02\x45\xbd\x3f\x5b\x6c\x8b\x44\xf6\xb8\x01\x8c\x04\xbe\x37\xb9\x78\xd6\x11\xee\x4e\xee\x61\xdd\x68\x1b\x45\xa3\x4c\x5a\x11\xbb\x58\x03\x99\xba\xf3\x9a\xb1\xc9\xf6\x5c\x9c\x42\xf4\xc5\xab\xaf\xf4\xbf\xf6\xfb\xdf\xf7\xbf\xda\xff\xea\x7f\x0f\x7e\x49\xdb\x14\x7e\xf3\xbb\xdf\xbd\xf2\x8f\x5c\xad\xe2\x8a\x82\x6f\xed\xe4\xac\xfc\xfb\x70\xbe\xc0\xe1\x14\x59\xb7\x78\xb2\xb3\x0b\x99\x71\x06\xb7\x7f\x30\x82\xab\xae\xf3\xa6\x7b\xdb\xa1\x87\xd1\x7e\x98\xec\x11\x1d\x5b\xce\xfc\xd9\xf6\xf2\x1a\xc9\xac\xed\xb9\xcb\xd1\x00\x44\x28\x7c\xb3\xa0\x2b\xc7\x8e\x1f\xf5\x2e\x57\x63\x60\x1d\x3d\xad\x1c\x1c\x1a\xfb\x67\xf8\x55\x51\x8e\x0e\x1e\x1d\x1e\xfd\x23\xfc\xae\x2a\x6f\x0c\x8f\x8d\xc3\xaf\x1a\xde\xbf\xc8\x39\x87\x35\x3b\x80\x9f\xda\xca\xf8\xd0\xd1\xc1\xe1\xe3\xe3\x09\xb6\x4e\xc0\xe8\x2c\x7f\xde\x78\xf6\x01\x93\x10\x09\x5b\xeb\xcb\xb3\xad\x4f\x3f\x21\xce\x08\xab\x73\x7e\xde\x79\xec\x7b\x52\x55\x1a\x6b\x1b\xcd\xa5\x75\xc2\x4e\xc7\x3b\x49\xa0\xce\xe5\xf9\xe6\xc5\x39\x67\xe9\x11\xb7\x89\x22\x51\xcd\x7b\x0b\xcd\x27\x3f\x38\xeb\x5f\x11\x61\xed\x5f\xe6\x9b\xb7\x7e\x61\xff\xcf\x0e\x42\x49\xa3\xa9\x5a\x82\xb5\xca\x06\x2f\x66\xa0\xc2\xbe\x49\x8f\xa1\x64\x68\xe4\x5a\xad\xbd\x0d\x16\x4e\x70\x05\x40\x61\x28\x1a\x5f\x72\x8b\xf4\xd8\xe1\xde\x51\x06\x1d\xf1\xac\xeb\x29\x1f\x8d\xd7\x73\xfd\xcf\x8c\xc8\x00\xd7\xf1\x78\x44\x67\x97\x9a\x8f\xbf\x90\x44\xa4\x55\x6a\xf6\x6c\x34\x78\x76\x5b\x61\xc2\x11\x13\x91\x24\xc1\x43\xd7\xbb\x1a\x12\x76\xd3\xeb\x63\x97\x5a\x0d\xb6\xcd\x80\x6b\x54\x9f\xa2\xf5\x4f\xf5\x2b\xd3\xb6\x5d\xdb\xbf\x6f\xdf\xac\x51\x37\x4f\xc1\x18\x81\x87\x46\x34\x65\xb9\x02\x17\xe7\x69\x46\xd5\xcb\xb8\x61\xb1\x3d\x1a\xe0\xc5\x4d\xfa\x34\x6d\x84\x29\x60\x22\x72\xcd\x40\x85\x00\xbb\x1a\x13\xdf\x15\xf5\x34\x3b\x6c\x98\xf0\xac\xe8\x36\xdd\x92\xa9\x6f\x6a\xe5\xfa\x14\x47\x19\x23\x09\xe6\x05\x37\x3d\x27\x80\x6e\x12\xdc\x08\x62\xe6\xdf\xd2\xb7\xcd\x8b\xcf\xd8\xa5\x57\x06\xbe\xa9\x55\x8c\x19\xef\xf2\xcf\x7d\x22\x80\x5a\x0b\xae\x7e\xba\x66\x45\xe3\x15\x68\x9a\xde\x9f\x7c\xcf\x08\x76\x18\x3b\x42\xdd\xd3\xde\xeb\x01\xf7\xa8\xe7\xbd\xcf\x30\x97\x54\x5b\x8d\x89\xc3\xc8\x02\x2b\x35\xc5\x2f\x7b\xfb\x10\x6e\x9f\x31\xf7\x88\x98\x2f\x53\x63\x1b\xf0\xa2\x8d\x40\x33\xcc\x64\x39\x03\x35\x43\xae\x4f\x29\xc9\x04\x07\xca\x46\xbd\xa4\x1c\x02\x3e\xcd\xe8\x7d\xab\xb1\x76\x35\xf0\x61\x63\xfd\x41\x63\xfd\x23\xb6\x8d\x91\xab\x53\xfb\xfe\x65\xe7\xc9\x43\x67\xfe\x89\x0c\x95\x07\x0f\xee\x1b\x65\x07\xfe\x09\xd0\x4a\x1f\x3f\x3c\x74\x2c\x92\x88\xee\xd7\x69\xf5\x34\x3d\x18\x94\xd1\xc1\x91\xe1\xb1\xa1\x71\x26\x64\x44\x22\x4b\xd7\x48\x80\xcb\x13\x20\xea\x1c\x8c\xc4\xb7\xfd\xdd\x27\xad\xf5\xaf\x65\x20\x1f\x19\x1a\x18\x8b\x66\x23\xf8\x36\x3d\xd4\x91\x21\x2f\x50\x2c\x1a\x38\xfb\xa8\xb5\xb1\xd0\xfa\x4e\x26\xfe\xc1\x8f\x41\x79\xc9\x3b\x53\x2c\x76\xa8\xa8\x35\xbd\xdf\xe7\x55\x18\xed\xc2\xdb\x21\x20\x35\x04\x29\xfa\xf6\xa7\xa0\x60\x7f\x56\x1c\x14\x3f\xa8\x0f\xf2\xbf\xdf\x8d\x36\x21\xf9\x90\xc6\x34\xca\x89\x0a\xe5\x25\x78\x3f\xa3\x99\x60\xd8\x77\x5f\x9f\xa0\x3f\xdf\x7d\x37\xcd\xd8\x44\xc1\x6c\x5d\x5c\x60\xf2\x74\x1c\x48\x79\x16\xc4\x7b\x31\x63\x17\x8e\x44\xaf\x41\xbf\x66\x50\x06\x76\x11\x6e\xaf\x70\x6b\xe6\x21\xe6\x8a\xa5\x15\xeb\xa0\x94\x57\x30\xc4\xd9\x42\xf1\x9f\x71\xe0\xfa\xf7\xbe\x1b\x13\x79\x9d\x0d\x98\x04\xcd\x3c\x44\xbb\x0b\x0d\x60\x09\x20\x49\x41\xb0\x30\xa4\xf4\xd4\x96\xd8\x15\x0a\x23\xe4\x7c\x12\x18\x0a\x26\xd1\x27\x62\xaa\x36\x82\x14\x80\xe9\xc6\x74\x03\x60\x41\x2f\x53\xab\x25\xe0\x8f\x6d\x21\x82\x1d\x67\x04\x02\x62\x9d\x79\x7c\xf4\x08\x5b\xa3\x00\xb1\x3b\xaa\x99\xf1\x09\x86\x41\xf6\x6c\xd8\x9c\xe2\xcf\xf6\x91\x36\x19\x1e\xa2\xce\x98\x3f\xa6\x71\x39\xee\x8d\x4b\x7f\x7f\xb4\xb4\xb3\xfb\x04\xa4\xef\x9b\xb2\xce\x00\x05\xc3\xb5\x5d\x81\x90\x8f\xfc\x84\x06\xc4\x63\xf8\x7c\xb9\x4c\xe1\xca\x6c\x66\x90\x16\xed\xc0\x21\x57\x08\xdb\xa7\x02\xa4\x7e\x45\x19\xd5\xd0\x09\x1f\x00\x74\x81\x75\xc5\xb5\x04\xf0\xd0\x05\x25\xcd\x84\xfe\xe1\x3a\x7e\x9d\x94\x6c\xf0\x01\x99\xd4\x01\x0a\x5b\x12\x31\x3d\xfe\x37\xc2\x56\xc6\x71\xb4\x30\xa7\x81\x8f\x11\x0c\x9c\x21\x02\x61\x17\xa4\x4b\x01\x4d\xa8\xbd\x8c\xc9\x3f\x1a\x75\xf6\x3d\x68\x3f\x6d\x73\x56\xa9\x57\x39\x75\xc0\x49\x54\x2b\x24\x9a\xf1\x5d\x75\x59\x21\xbb\x1a\xff\xdc\xcf\xb5\x5e\x9d\x31\x4e\xc7\xf5\x20\x23\xe0\x0d\xe3\x8c\x36\x03\xd6\x59\x76\xf1\x76\x15\xb1\x93\xba\xc9\xee\x53\x93\x75\x70\xc2\x60\xd2\x39\x3b\x47\x6d\x8e\x53\xd1\x2b\x35\x90\xf4\xd9\x5d\x2b\x40\x2b\xbc\xc2\x7b\x05\xfc\xd1\x4b\x31\xd1\x16\x3d\x79\xfe\x44\x9d\xf9\xf7\xbe\x94\xe9\xcb\xd4\xb7\x96\xb2\x2f\xa4\x1f\xb5\xde\xdc\x37\x05\x34\xda\xee\xe5\x90\xfc\x35\x74\x2f\x8e\x80\xb5\x61\xdb\x63\xf4\x3d\x3c\x1f\xa0\x02\x8b\x4e\x1c\x1d\x8e\x68\x5c\xa4\xba\x1c\x50\x2d\x08\x33\xd7\x51\xd0\xab\x3b\x32\x0e\x29\xc0\xe6\x3b\x12\x3d\x08\xf3\x19\x8b\x10\xb0\xd2\xa3\x61\x19\x4a\x49\x2b\x6b\x68\xf4\xf6\xf2\x80\xa0\xdc\x10\xdd\xd9\xce\xb5\xcb\xcd\x5b\xbf\x38\x0b\xf7\xb6\x6f\x3f\x68\x5e\x9c\x83\xa0\xbc\x8d\x0f\xc9\x50\x4d\xd1\x59\x32\xfd\x49\x72\x48\xa5\xce\x76\x8b\x09\x8d\x27\x59\xd0\xc0\x1d\x87\x31\xe8\xfe\xcd\x33\xfd\xc4\xa6\x89\x70\x96\x1e\x91\xdb\x10\xf7\x96\x78\xfa\x81\x73\xf1\x8a\xf3\x7c\x7e\xfb\xfe\x06\x3d\x27\xd3\xba\x74\xd2\x05\x48\x4c\x93\xea\x66\xa2\x48\x02\xc7\x53\x5f\x27\x3b\x00\x37\xb3\xb1\xb6\xe5\x68\x1d\x64\xc0\x51\xe2\xda\x95\xd6\xd7\xab\x10\x0d\xf8\x7c\xde\xb9\xff\x9d\xf3\xf8\x56\x73\xf9\x3f\x24\x09\x09\xc8\x89\x41\x3b\x45\xf4\x51\xe6\x27\xc6\x0f\xa0\xb1\x76\xc5\x79\xfc\x09\x1b\x9c\x3c\x88\xc1\xde\x39\x63\x98\xa7\xd1\xad\xea\xb4\x5e\xab\x75\xa4\x5d\x74\x3c\x04\x62\x52\x8d\x91\x1f\xac\xe7\xf8\x44\x90\xe9\x0b\x70\x7f\x7a\xf2\x53\xfb\xf9\x85\xf6\x93\x95\xd6\xf5\x1f\x60\x8a\xa3\x9b\x4a\x5e\x6c\xf0\x25\x4d\xc1\x6a\xec\x9c\x05\x99\x9b\x96\x3c\x7d\x94\xd4\xd3\x7e\x80\xce\x93\x1f\x5b\x1b\x8b\x8d\xb5\xab\xe4\x2b\xd3\x0d\x8a\x16\x69\x63\xfd\xbc\x94\xb8\x57\x03\xef\x3e\x4c\x1a\x02\xd3\x12\xdc\xd4\x4a\xba\x3a\x55\x35\xd8\x39\x5d\xb4\xc8\xae\x5d\x36\xa6\xd0\xe2\x1b\x49\x72\xfb\xf9\x96\x73\xe9\x1e\x83\xd1\x5e\x79\xd2\xfc\xe1\xbd\xf6\xca\xa5\xe6\xcd\xc7\xdc\x89\x71\x61\x95\x5c\x7a\xc8\x5d\x4b\x8e\x42\x2b\x5a\xaf\x14\xf0\xf9\x92\x81\x4e\x99\x7b\x54\xb2\xd4\xf2\xdb\x61\xdc\x4e\xde\xda\xb8\x4d\x7b\x0c\x65\xd7\x21\x33\x68\x16\xc4\x74\x27\x23\xf4\x25\x6d\x52\xaf\x92\xb3\x21\xf6\x7c\xfc\x96\x28\x03\x42\x96\x3e\xc8\x47\x44\x00\x41\x83\x10\xdb\x3b\x14\xc7\x8c\xbd\x43\x7b\x75\xfb\xeb\x8f\xda\x17\x7f\xcc\x40\x03\x9d\x21\x92\x24\xe0\x60\x65\x24\x81\xed\xd5\x27\xc0\xa1\x3b\x61\x28\x7a\x3f\x13\xc4\x43\xdb\x5d\x19\xaf\xe8\xa3\xec\x5f\xba\xdc\x03\xbb\xf0\x84\x12\x22\xf1\x54\x51\x9d\x0b\x3e\x3d\x66\xd7\xfc\xe0\x15\x9f\x1e\xe3\x45\xdf\xbb\xe4\x07\xd2\x43\xc5\x29\x1a\xa8\xef\xa8\xd7\xf6\x7b\xc4\xb0\x6d\x9e\xba\x33\x88\xb5\xb9\x70\x93\x06\xba\x1b\x6b\x63\xed\x31\x01\xa2\x54\x53\xde\xc8\x74\xf3\xf2\x12\x45\xba\x87\x67\xb1\x7a\x59\x91\x54\x48\xe4\xd3\xa3\x3b\xd9\x71\xf9\xf4\x4f\xd6\xee\xe9\xd2\x13\x32\xf8\xee\x93\x53\xf8\x84\xba\xcc\x9b\x57\x16\x9f\x51\x9d\xee\x62\xff\xa8\x55\xfd\x2f\xd8\x07\x5e\x8f\xd5\xd3\x29\xb4\x5e\x0c\x15\x32\xbd\xe4\xdb\x63\x19\xe0\x7f\x81\x1f\xfc\xbc\xf7\xd3\x25\xad\xd9\xdb\x31\x44\xe9\x79\xb5\x6d\x70\xca\xc0\xbb\x3a\xbb\x3d\x18\x67\xaa\x65\x43\x2d\x41\x8c\x9b\x6a\xce\x92\xcb\x17\x5a\xa5\xd1\x2e\x5a\xd5\x6c\xf0\xa9\x81\x54\x62\xb1\x6c\xe5\x01\x53\x92\x83\x8a\x3e\x65\xaa\xa4\x27\xe5\xf2\xd2\x10\xcf\xdc\x79\xb0\x93\x1c\x30\x7e\x54\x9a\x8f\xbf\x74\x56\x3f\x6b\xaf\xdc\x68\x3f\x3f\xdb\xfa\x7a\x43\x04\x92\x10\xd1\x55\x1b\x6d\x46\xe8\x7b\xc8\x6e\x89\xa8\x8a\x19\x61\x3f\x68\x7c\xff\x04\x97\x46\xf7\xc2\xf8\xa7\x6e\xf1\xef\x4f\xae\x03\xc5\xa4\xa9\xb9\xee\x87\x5e\x8a\xd2\x3f\xf5\x92\xec\xb6\xf2\xe5\x51\x55\x79\xda\x55\xe5\x00\xc4\x22\x15\x6d\x50\xf4\xb0\xa7\xa5\x0a\x93\x24\x2c\xd6\x25\xe0\xaf\xae\x4f\xa2\xfa\x87\xdd\x74\xab\xa7\xe9\xbe\x8b\x09\x68\x29\x85\x5c\xfc\x04\xf8\x1b\xe2\x2e\xfd\xa8\xd6\x41\xfd\x66\x43\x8a\x0a\x72\x36\x67\x4c\x54\x0b\x81\x34\x55\xd1\x26\xee\xcf\x3e\x27\xbf\x01\x67\x73\x91\xf6\xfc\xf6\xfa\x77\x8d\x8d\xad\xed\x6f\x2f\xb7\x57\xce\x66\x23\x06\xdc\x6b\x12\x26\x3c\xbb\x68\x23\x22\xb8\x22\xad\x3c\x69\x3d\xbe\xe8\x3c\x9b\x97\x9c\xda\x3e\xbc\x4c\x1e\x9d\x66\xfb\x94\xf6\x76\x0d\xae\xbe\x90\xb2\x98\x7c\x7c\xe0\x72\x31\xa1\x16\x4f\xa3\xd6\xdb\x60\x97\x90\x82\xea\xeb\xba\x7e\x37\x11\x37\x26\x6d\xfc\x93\x3f\x1b\x22\x04\xde\xff\xae\xe8\x1a\x33\xf1\x2f\x0d\x72\xed\xd0\x73\xe8\x72\xf7\x99\xc1\x9f\xb1\x13\xc2\x7d\x64\xf1\x47\xe4\xdf\x8f\x0f\xff\xc4\x53\x61\x79\xd4\x50\xc4\x43\x90\x9c\xe8\x79\xfe\x37\xcc\x6a\xea\xf1\x7e\x7d\xe8\xc8\x91\xa1\x63\x87\x21\xbd\xce\xc0\xe1\xc1\xd1\xe8\xfb\x22\xa6\x52\xa4\x00\x09\x19\x34\x90\xb8\x08\x3d\x5a\xa3\xef\x85\xcd\xcf\xcf\xb1\xdb\x3c\xb9\x95\xca\xdc\x0b\xbd\xe4\x48\xd1\xe6\xea\xb0\x4f\xd2\xc3\xd7\xc1\x17\xbb\x5b\xea\x49\x71\xe9\x4b\xdf\x30\x3b\x2d\xa0\x7f\x74\x7d\xd0\xba\xcd\xdf\x3c\xf5\x30\xe4\x50\x03\x55\xa5\x6b\x25\xf7\xe7\xe5\x11\xe7\x21\x37\x84\xbb\xca\xbb\x6b\x70\xdf\x35\xde\xe3\x11\x8a\xf3\xde\x95\xd7\x3c\xd9\xa8\xce\x55\x4e\x14\xcc\x84\x4a\x29\xf2\x1a\x77\x16\x56\x33\x3a\x71\x00\x4d\xc0\xda\x84\x66\x9f\xd1\xb4\x2a\x08\x6f\xc1\xa3\x1d\xf7\xaa\xa0\x0a\x53\x2f\x75\x34\x98\x91\x24\xf7\x00\x72\x3e\xba\x1c\x50\x64\x3e\xfd\x00\x72\x22\xff\x78\xdf\x53\x7b\x3b\xf3\x3f\xb5\x7e\xda\xc8\xc0\x43\xba\x2b\x4d\x49\x9b\x54\xeb\x65\xdb\x0a\xce\xea\xb4\x6e\x1f\x3b\x8a\x6b\x87\x38\xf6\xa6\xef\xce\x30\x99\x0c\x5e\x82\x2f\x5a\x22\x51\xf2\x66\x3e\x2e\x18\xa9\x95\x0c\xe1\x8a\x00\x92\xdd\x68\xee\x76\x6b\x8a\xbb\xa6\x3e\x5b\xa6\x3f\x30\x19\xf3\xaa\xa7\x94\xf0\x28\x84\xc0\x45\x57\x97\xe3\xa3\x90\x82\x53\xa3\x8c\x00\x72\xd2\x61\x74\xe7\xe6\xd9\xa9\xe9\xae\xdf\x94\xdd\xda\xeb\xd7\x4e\xa3\xd6\xc6\x6d\xd6\x5b\xbd\xfd\xb4\x2f\xbc\x97\x3e\xf0\x7a\x29\x48\xb6\x7f\x54\x7a\x6d\x01\x99\xba\xcf\xef\x06\x14\x39\x28\xa1\xfb\xb7\xdb\x92\x31\x98\xc3\x68\xd6\xf5\x72\xa9\x06\xf2\x24\x83\xe5\xfd\xe1\x0e\x45\xc0\x47\x3b\x92\xac\x89\x38\x18\x64\x05\x91\x36\x36\xc5\xd2\x97\xd6\x0a\x16\x4b\x60\x16\x53\xd8\xeb\xb3\x36\xe8\x7c\x54\x26\x7c\xb3\xed\xcd\xb5\x96\xaa\x55\x37\xcb\x80\x1b\x2d\x5f\xaf\xea\x28\x20\x54\xd8\x85\xa2\x6e\x6a\x98\x21\xb1\xac\x9f\xd6\x94\xa3\x7d\xca\xd1\xd7\xfb\x94\xc3\x98\xc4\xe0\xf0\xeb\xd1\xfa\xc9\xc7\xb7\xda\x97\x20\xa1\xe8\xf6\x05\xb0\x81\x91\x01\x15\x2c\x64\x1b\x0f\x8f\xb2\xbf\x8f\xbe\xce\xfe\x73\xb8\xb9\x70\xf3\xf0\xeb\x60\x6c\xbc\x72\x03\x72\x07\xdc\x39\xc7\xb6\x16\xca\x1a\x20\x6e\x8a\xf6\x12\x6d\x97\x4a\x05\xf2\xf1\x28\x60\x08\xca\x9b\xe0\x26\xee\x66\x1e\x65\xd3\xf0\x2d\xb8\xfe\x0c\xfe\xeb\xc0\xd1\x91\x23\x83\x14\x52\x08\xd9\xe5\xbb\x1a\x8d\x98\xfa\x0c\xbb\x9b\x8c\xc2\x6f\x1e\x58\x53\x99\xad\xd1\x43\x37\xb8\x66\x1f\xfc\xd8\x17\x13\xe7\xf6\x1b\xa0\x28\xf5\xbc\xf0\x68\xad\xe9\x44\x53\x32\x57\xbd\x5f\x4a\x60\xab\x79\xd9\xac\x52\x20\xac\x29\x5d\xa6\xea\x0c\xb3\x04\xd2\xb1\x1f\x1f\x1b\x1c\xc5\xbf\x46\x06\xc6\xc6\xfe\x30\x3c\x7a\x10\x06\x22\x99\x0e\x68\xea\x25\xd1\x55\x78\x16\xfb\x6a\xa6\x6e\xc7\xfc\x5e\x6e\xc1\x2a\x57\xd6\xe0\x05\x93\xc6\x06\x0f\x1c\x1f\x1d\x1a\xff\xe3\xa9\xc3\xa3\xc3\xc7\x47\x12\xc9\x93\x01\x25\x47\x6f\x2c\x70\x65\x78\xf4\xb0\x82\xd9\xda\xd3\x51\x2c\x0c\x4c\x96\xe6\xa4\x1c\x6a\x6f\x62\x66\xa1\x51\xf6\x6e\x7c\x70\x74\xec\xd4\xc0\xd8\x29\x88\x85\x4e\x5e\x0f\x79\x81\x97\xe4\x8b\x17\xde\xca\x61\xee\x08\x82\x12\xa7\xd7\x3d\xce\xa2\xcf\xe7\xb8\x4f\x85\xf1\x15\xa7\xb5\xe2\xe9\x02\x39\x77\x40\xf0\x32\x4f\x37\x9d\x88\x3c\xb1\x9d\x38\x25\x98\x65\x0b\x8a\x17\xa8\xd6\x6c\xb5\x88\x09\xf2\x19\x78\x37\x66\x9a\x4d\x92\x53\x47\x87\x8e\x1d\x1f\xa7\x00\xec\x02\xa3\x0b\x2e\xc9\x6c\x3b\x53\xfe\x0f\x61\x60\xff\x42\x16\x80\x7d\xb6\xb1\x0f\x4c\x1a\xf8\x55\xd1\x28\x83\x07\x97\xef\x2b\x7c\x8c\xd9\x85\x34\xe5\xa5\x23\xc3\x07\x06\x8e\x0c\xb2\x57\x07\x8e\x0c\x0e\x8c\xbe\x9c\x3c\x8f\xa3\x88\xa4\xf8\xe9\x53\xec\xfc\x06\x53\xe2\x47\x77\xbd\x63\x3b\x9a\x56\x9e\xa7\x1a\x73\x4e\x75\x22\xb3\xc3\x28\x96\xdf\xc8\x79\x9e\x30\x76\x38\x14\xdc\x0c\x3f\x0a\xd5\x90\xa8\x29\xfb\xdc\xce\x22\xc5\x24\x7c\x83\x79\xd3\x50\x37\xe9\x7d\xde\x3f\x5b\x29\xc7\xa4\x6a\x88\x43\x24\x8f\x44\x92\xcd\x8e\x5c\xe8\x29\x05\x31\x0c\x5f\xc1\x48\xb8\xa1\xe1\x63\xd0\xbf\xe4\xac\xfd\x7f\x0a\x85\x92\x6e\xc1\xaf\xd4\xbc\x75\xa0\x13\x2f\x1e\x0e\xae\xe2\xa5\xa7\x34\x92\x81\x47\x94\xf8\x89\x3f\x8a\xa7\x40\x7c\xd1\x10\x6d\x25\xa3\x02\x95\x25\xe0\x20\x48\xbb\x7e\x13\x1b\xca\xd2\x02\x17\x43\x06\x2f\x2d\x05\xf0\xb9\xb4\xbb\x60\x17\x2c\x32\xd7\xfe\xcb\xf1\xe1\xf1\x01\xcc\x91\x30\xce\x7e\x1c\x39\xd5\xc9\xcf\xa0\x2b\xee\x49\xe3\x7b\x68\x2a\x6c\xcb\xe6\xbb\x8a\xd5\x73\x24\xd1\x66\x83\x09\x2a\x0a\x35\x55\xf7\x0e\xb1\x02\xfa\x91\xa6\x9e\x3c\xdd\x94\xe5\x8e\x5e\x72\xc9\xd0\x06\x8e\xc2\x03\x9f\x00\x5e\x1a\x0b\x14\xc1\xd3\xf2\x97\x1e\x8e\xec\xd8\xc6\x8b\x40\x6e\xb6\x43\x10\x17\x4e\x8d\x1e\x3f\x32\x38\x86\x89\x0f\xd3\x92\x9f\x11\xb8\x3c\x4f\x69\xf2\x5c\x46\x08\x45\x94\x50\x64\xe0\xf0\x58\xea\x41\xca\x1d\x5d\x46\xbe\xd1\xd2\x55\xb0\x8d\xd3\x5a\x55\x39\x32\xf0\xfa\xe0\x11\x65\x64\x74\xf8\xc4\xd0\xc1\xc1\x51\xb6\x72\xff\x79\x30\xf5\x26\x26\x0c\x2e\x2b\xdd\x13\x26\x43\x62\x7a\x5d\xf7\xfa\x28\x03\x3f\xda\x7b\x61\x52\xd8\x05\x50\x94\x07\x29\xd0\x59\xf9\x39\xad\xcd\xf6\xce\x03\xf7\xc1\x3f\x0f\xfe\x31\x6a\x4e\x44\xa6\xb7\xdf\x91\x3c\xfc\xa2\x44\xff\x17\x4c\xd4\x2f\xd1\x45\x19\x33\xf9\x27\x67\x51\xef\xd1\xdf\xc4\x10\x5b\x99\x2d\x4d\xb0\xff\xc0\x4f\x3e\x7a\x41\xf8\x01\xf0\x30\x6a\x22\xe0\xfe\x7d\x1f\xb8\x9e\xa3\x92\x7a\x9f\x5d\xa9\xed\x73\x2d\x6d\xa7\x68\x00\xfb\x21\xa7\x96\xe8\x72\xfd\xfb\xca\xf9\xfb\xca\xf9\xfb\xca\x09\xae\x1c\xe9\xd3\x68\x5a\x35\xb5\x92\x7b\x25\x11\xbb\xc7\xc4\xb7\x95\xa6\x08\x0d\x5a\x24\xd5\x42\xd9\x45\x5e\x6f\xf1\xdf\xe8\x51\x01\xc5\xf9\xf4\xd2\x17\x02\x23\x83\x15\x42\xa3\x5b\x4f\x76\x19\x9e\x4a\x15\x07\x6f\x18\xa1\x37\x9d\x1d\xb8\x76\xa4\x60\xf9\x05\x51\x26\x3b\xe6\xe8\x25\xd8\x23\x6f\xa5\xe5\x18\x5b\x77\xab\xbf\xf3\x21\xaa\xe0\xe6\xc3\x8c\x4e\xfb\x0e\x1a\x97\x03\xa3\x83\x07\x07\x8f\x8d\x0f\x0d\x1c\xc1\xae\x2a\x2b\x63\x7f\x1c\x3b\x32\x7c\xb8\x70\x70\x94\x2d\x89\x82\x6b\x50\x51\x20\x2d\xb7\xc5\x0b\xbc\xb3\x8d\x19\x36\x52\x4c\x46\xc9\x56\x11\xf8\x9e\x41\x81\x6e\x77\x6f\xc5\x98\x39\xcb\x1f\xe8\xde\xf1\x9f\x54\x18\x47\x5a\xe8\xe6\x94\x92\x64\xac\x49\x88\x54\xf4\x75\xc8\xe8\xeb\x20\xef\x23\xec\xb0\x25\xfa\xa8\x0e\xa1\x12\x53\x81\xe0\x76\xcb\x08\x2d\xf2\xc4\xca\x9e\x55\xbb\xc7\xed\x33\x23\xcd\x42\xc7\x23\xdf\xc3\x15\x37\x97\x66\x2a\xac\x95\xd9\x42\x69\xa2\x50\x81\x54\x58\xd8\x47\xae\x07\x45\x9f\xaf\x7c\xa3\x30\x40\x93\xed\x8e\x9d\x32\x4e\x65\xc5\x9a\xb5\xca\xc6\xd4\xfe\x7d\xfb\x7c\xd9\x87\x78\x47\x1f\xd1\xab\xf5\xb7\xf7\x1d\x55\x8b\xfb\x33\x90\x0d\xdd\xe4\x12\x8e\xfd\x82\xfe\xbe\xd8\x55\x1d\x2e\xf6\xc3\x1f\x54\x85\xd1\x57\xaa\xe1\x0f\x7a\xb5\x64\x9c\xb1\x14\x1e\x0b\x0f\xf4\x68\x99\x3a\xf0\x1d\xa8\x03\xea\x11\x73\x12\xf0\x9e\x74\x09\x3a\x09\x24\x75\x95\x0c\xdd\x4f\x0f\x38\x61\xec\xf7\xbb\xde\x24\x74\x69\x1b\x31\xce\x68\xe6\xd8\xb4\x56\x2e\x67\xeb\xa3\xac\x84\xed\x4d\x61\x98\x8b\xa5\xc8\xef\x3d\x46\xf9\x43\xb1\xdc\x65\x60\x03\xa1\xb9\xd2\xde\xfa\xde\x59\xfc\x10\xb2\x8a\x7e\x36\xe7\xee\x24\xe4\xb6\xb1\x3d\x77\xcb\x59\xc4\x70\xaf\x3b\xd7\xa9\x79\xf3\xb3\x87\x94\x30\x9e\xfc\xa8\x9b\x8f\xee\x3b\x9b\x8b\x02\x0b\x2f\x40\x15\x8e\x21\xe1\x00\x8b\x39\xa2\x69\xdd\x39\x07\xbf\xdd\xfa\xbf\x14\x9e\xeb\x8d\x52\x63\xf3\xde\xf6\xdc\x47\xb0\x25\x34\xef\x6d\x82\x13\xf7\x9d\x73\x5d\x74\x79\x2e\xde\xcd\x9b\x4f\xd9\x07\x14\x7b\x4a\x58\x33\x90\x09\x93\xde\x25\x85\xcd\x6d\x67\x6e\x13\x27\x7c\xf7\x23\x9a\xe9\x50\x9d\xf8\xd9\x07\x02\xd8\x0c\xb6\x85\x95\xb5\xe0\xd4\xa6\xcc\xaf\x7d\x4a\xeb\xbb\x15\x67\xf1\xcb\x3e\x05\x78\xbc\xb2\xec\xac\x7f\xcc\x70\xf6\x75\x8e\xa3\x3e\xd7\x1c\xbb\x27\x0b\x3a\x60\xcf\x03\xd9\xb5\xa8\x5d\xf8\x3d\x4b\x3a\xff\x4d\x2a\x83\xd8\x04\x69\x88\xd0\x2e\xc0\xa4\x91\x19\x98\xe3\xff\xca\xc4\x8f\xf1\x37\x86\xb1\xe0\xea\x1b\xca\x1b\x83\x03\x07\x07\x47\x79\xf1\xd5\x01\x26\xe1\x81\xc4\x61\xd4\xed\x5a\xdd\x56\x40\xd6\x4f\x21\xfe\xe4\x87\x41\x58\x62\xe0\xf9\x06\x7c\x35\x66\x27\x95\x82\x99\x4c\x33\x6f\xd7\xe5\x43\xd0\xdb\x5c\xb4\xb7\x09\x6e\xa8\x6d\x86\xc1\x4e\x4b\x57\x8a\xf6\x92\x3d\x15\xbc\x33\x08\xd1\x14\xd7\x52\x96\x1a\x6e\x3d\x11\xa2\xa3\x63\x42\xc9\x8d\x88\xda\xb4\x5a\x65\xcb\x92\x52\x55\x08\x12\x13\xd7\x56\x96\xa2\xe0\x1d\x22\x3d\x35\xd1\xed\x64\x29\x21\x4b\x47\x98\x8d\x43\x88\xb0\xd4\x60\x64\xe9\x8c\x37\x69\x88\x90\x2a\x02\x49\x9e\xda\xc8\x2b\x8d\x08\xa1\xa1\xd2\x4c\x8e\xf4\xc5\x98\x18\x24\x08\x4d\x0d\x2d\x2b\xd5\xe1\x46\x05\x19\x8a\xd3\x40\xca\x4a\x6d\x0a\x9d\xea\x64\xaf\x57\x60\x0c\xb0\x8e\x32\x4b\x94\xdd\xd4\xa4\x34\xef\x3d\x61\x93\xed\xd7\xcd\x3b\x32\xb4\x48\x77\x58\x88\xd2\x4b\x6c\x54\x93\x01\x48\xd3\x16\x50\x9d\x09\x90\x14\xd4\x92\xe5\x46\x0a\x3f\x09\x7c\x8a\xbb\x42\x2a\xbf\x4a\x21\x18\xb2\x14\x06\x75\x4e\x22\xdd\xd5\xa5\x6f\xca\xda\x61\xe4\x90\x52\xe0\x45\x98\x0a\x93\x65\x75\x4a\x39\x34\x38\x30\x7e\x7c\x74\x30\x9d\x1b\xaa\x00\x04\x61\xea\x48\xfb\x94\x81\xb8\xf4\x00\x24\x68\x9b\x49\xef\xab\x0b\x1f\xe7\xe6\xab\xab\xcd\x68\x55\xdb\x12\x40\x4e\xdf\xe7\x86\x5f\x7e\x38\x76\x62\x1c\xfc\x30\x93\x3d\x28\x23\xbe\x16\xc7\xaa\x97\x35\xcb\x77\xe5\x72\x6b\xbf\x74\x74\xdd\xc9\x0b\x9a\x60\xf4\x5c\xbf\xb8\x67\xa0\xfc\xf8\xf0\xdc\x8f\xdc\x5d\x1e\xfc\x06\xc0\x24\x86\x8e\x8f\x05\xa0\x73\xdf\xf8\xf0\x3e\x9e\x32\x1e\x75\xef\x9e\xf7\x3d\x06\x42\x4f\x6b\x5e\x3e\x54\x8c\xe5\xf7\x72\x47\xf8\x53\xa3\xf2\x34\x12\x90\x41\xa2\x93\x56\x18\x82\xf9\xf7\x16\xcc\xbd\x10\xc2\xef\x5e\xf3\xc3\x5c\xf9\xbb\xe8\x73\x53\xa2\x4f\xe9\xf6\x74\x7d\x02\xfd\xf6\x8b\x93\x05\xed\xed\x9a\x66\xea\x10\x67\xa1\x96\xf7\x71\xc7\xff\x49\xc3\x98\x50\xcd\x08\x30\xff\xbe\xef\x20\xa7\xd4\x4a\xf5\x3d\xff\x46\x2b\x4e\x1b\xec\xba\xab\x1c\x9d\x2d\x60\x2c\x41\x0a\xbd\x5a\x17\xa0\x60\x97\xca\x0f\x1b\xc4\xa0\xfa\x43\x1c\x92\x27\x73\x77\x8b\x0c\xb8\x31\xe2\xfd\xcd\x82\x0a\x09\xc9\x4e\x81\xc9\x80\xfd\x51\xf7\x0e\x28\xb7\xbe\x11\x59\x46\xde\xf2\x5b\xc6\x2c\x3a\x1c\xdf\x4a\x15\x2a\x10\x81\xc6\x3b\xcd\x78\x25\x23\x54\x29\xbd\xe5\xb7\x98\x21\x22\x12\x11\xde\xca\x18\x5a\xc0\x68\x60\x17\xb1\x34\xa4\x06\x3e\x93\xc1\x23\xb0\x47\xe3\xd7\xb9\xed\xd0\x15\xb5\xc6\xaf\x9b\xde\x0e\x25\xe5\xea\x17\x80\x93\xde\xcb\x2f\x1d\x8d\x94\x25\xc6\x13\x95\x5d\x0b\xb3\xa5\xcc\xbc\x7a\xca\xf5\x57\x63\x3f\xbd\x0b\x12\xfc\x06\xf7\xb5\x99\xd7\x3a\xaf\x5f\xc3\x47\xa9\xe6\x5e\x2c\x3e\x7e\x7f\x44\x7d\x2d\xfe\xbd\x78\xad\xf1\xec\xd3\xf6\xdc\x7c\xe7\x25\x95\xc9\x05\x94\xc1\x8f\x5f\x0b\xbc\xcf\x38\x39\x8d\xce\xfd\x30\x91\xa1\xd0\x6f\xc5\x31\xa6\xf4\xdd\xcd\xc5\x69\x97\x01\x41\xf9\xd5\x4a\x8b\x92\x7f\x9d\x19\x31\x1a\x53\xa2\x33\x7e\x46\x7d\x26\x8e\x87\x6a\xf4\x24\x23\xea\xfe\x4e\x1c\x53\xdd\x9c\xea\x4c\x66\x63\x72\x52\xc3\x1a\x04\xee\xca\xc0\xfd\x9a\xaf\x9c\xe4\x75\x1e\x01\x8c\x87\xcd\x02\x2c\x6f\x41\x64\xb9\x6c\xf8\x54\x73\x89\x24\x85\x7e\x2b\x87\x31\x79\x38\xba\x3f\x13\xc6\x43\xd5\xa3\xc4\xa3\x1a\x43\xda\xf9\x02\x1b\x53\xec\x6a\x3b\x8f\x58\xa2\x2f\x30\xe3\xae\x77\xf2\x1c\x1b\xfc\xc3\xa9\xd4\xe7\x20\x6f\xdc\x2d\x14\x37\x6f\xae\xa6\x39\x1c\x45\x08\x0c\xb3\x2f\x74\x08\x0e\x3e\x4a\x49\xb6\x0f\xa4\xf7\x8b\x1f\x13\x8c\x81\xd6\x9d\x73\x5d\x4f\xb3\xf3\xe0\xda\x0e\x80\xe4\x34\x5b\xaa\xaf\x19\x37\x1f\x00\x61\x59\x77\x57\x0e\x35\x52\xa3\x0b\xd4\x75\x3f\x4c\x4b\xaa\x0b\xd4\xb9\x7a\x37\x90\xf0\xc4\xeb\xd6\xde\xa7\xb9\x71\x12\xa1\xfb\xf4\xb3\x43\x8f\x04\x99\x91\x80\x2b\xcd\x89\x4f\x29\x87\xf0\x53\x45\xa0\x06\x1a\x73\xcd\x1c\x4c\x14\xfc\x95\x89\xa8\x9a\xc1\xf7\x1c\x2b\x7c\x57\xea\xbc\xef\xb9\x9b\xa6\xa0\x3a\x3d\xf4\x2c\xd6\x64\x53\x83\x90\x50\x2d\xbd\x70\xef\x36\xc8\x4d\xbe\x47\x80\xa6\x2d\x48\x01\x6b\x90\x37\x05\x18\xfe\xe7\xe5\x2f\xf2\xb6\xfc\xa1\x63\x07\x07\xff\x35\x2d\x51\x3d\x30\xba\x9b\x0b\xd3\xc6\x83\xbd\xb5\xea\x8c\x6e\x1a\x55\xd0\x21\x14\x66\x54\x53\x47\x55\x20\x5a\xb4\x22\x49\x83\x59\x22\xd0\x5a\x94\x32\x0b\x63\x50\x7d\x86\xfa\x8e\xba\x28\xa6\xc6\x70\x0a\xdd\x30\x01\x0e\x64\x62\x8f\x2c\x29\xec\x2f\x26\x1c\x63\x7a\x4c\xc7\x50\xa6\xf0\xea\x9d\x8a\xa8\x8e\x3a\x88\x52\x10\xd4\x6b\x4e\xcc\x4e\x87\xcf\xe8\x97\x2c\x8a\xc6\xb6\x91\xa6\x20\xc9\xaa\x15\x69\x5b\x93\x34\xaa\x89\xe0\x0d\x37\xa4\xe5\x6e\x41\xf3\x01\xec\xf5\x31\x4e\xc3\xbf\x85\x74\x88\xb0\x1e\x8e\x27\x91\xdf\x6e\x44\x12\xac\xda\x05\xbf\x79\x42\x19\x3c\x76\xe2\xd4\x89\x81\xd1\xe0\x1f\x27\x06\x8e\x1c\x4f\xb3\x24\x08\x56\xb7\x44\xde\xba\xba\xe2\x7c\xf1\x3e\x7a\x3c\xcf\x6d\x66\xd9\x40\x6c\x90\x46\x0b\x98\x2a\xdc\xb3\x87\x81\x48\x3b\x3a\x4c\x31\x16\xa9\x28\xf4\x40\x74\x0c\x63\x5c\xbe\xa5\x8c\xe0\x19\xd5\x32\x80\x82\x2e\xa4\x40\x19\x5e\x4a\x53\x93\x46\xed\x38\x35\x54\xb5\x20\x07\x6a\x92\x4f\xa9\xf4\x0e\xcb\xa9\xd8\xd8\x19\x84\x52\xbc\xf7\x5a\x66\xf1\x95\xb0\xa1\x57\x0a\x56\x06\x8a\x7b\xe7\x38\xc9\xe5\x42\x33\xdd\x07\xaa\x67\xae\x73\x49\x3d\xb7\x29\xef\x66\x3e\xd9\xb5\x49\xb6\x33\x08\xc5\x79\x07\x27\x89\x02\x4f\x26\x25\x91\x69\x21\x75\x7b\x71\xca\x3a\xd7\xb9\x64\x2a\x7c\xb7\xb7\xac\x28\xfd\x2b\xe4\x14\x2e\x8b\x74\xf7\x8e\x74\x8d\xb3\xd0\x94\x42\xa2\x0a\xfd\x58\x12\xa7\xa7\xbd\x16\x19\x84\x80\x16\x3b\xa7\x11\x49\xc9\x77\x26\x8e\x6d\xd0\x64\x31\xc1\x25\xad\x16\x2c\xba\x81\x1c\xee\x14\x3c\xda\x19\x93\x21\x25\xef\x38\x69\x68\x48\x0d\x42\x86\x3e\x91\x7b\x7e\xce\xb7\x7c\xcb\x36\x04\x12\xd2\xe1\xd7\x89\x69\x88\x53\x21\xa6\xf2\x74\x61\x76\xe6\x44\x2a\x7c\x4d\x43\x8c\xc7\x19\x86\xa2\x5e\xcd\x31\x2b\x9d\x1c\x30\x59\x9a\xf3\xca\x4c\x27\x0b\x4e\x9e\xee\x84\xf4\x71\xe9\x29\xe6\x5a\x64\xbf\x86\x24\xf1\x96\x9f\x6a\xaa\xba\x18\x72\x49\x38\x27\x07\x4c\xa2\x7b\xbb\x7d\x58\xd0\x77\x25\x9d\xd8\x9c\xae\xb1\x04\x4d\x79\x79\x2d\x74\x41\xca\xd9\x6f\xa1\x5e\x8d\xbd\x5e\xa7\xa0\x2e\xec\x4a\xad\xc4\x98\x2e\x04\xc8\xca\x78\x95\xee\x02\xb2\x33\x97\x69\x42\xd2\x23\x19\x0a\x5c\xab\x05\x20\x64\xa2\x2e\xf3\x85\xad\x07\xd8\x8e\x5e\xd9\x18\xb6\x8c\x17\x17\x01\x08\xe2\xd4\xd5\x4a\x51\x19\xfb\xc8\xb9\xcc\x75\xa0\x74\x53\xf7\xbd\x15\x9a\x39\x8f\xe7\x72\x3c\xcd\x1e\xd5\xab\xf0\x23\xc5\x7e\x10\x8f\xb9\x93\x89\x51\x57\x28\x71\x9f\x38\x66\xd9\xde\x10\x4f\x5f\x07\xbb\x18\x18\xf2\x70\x17\xcb\x98\x3b\x41\xf9\x3f\x0a\xb1\x27\x9d\xf5\x21\x82\x8d\x0e\x03\x2f\x84\x58\xe1\xbd\x93\xb8\xd8\x99\x7c\x73\xf9\x00\x97\x9d\x60\xb1\x89\x23\x60\x68\xc0\x7f\xee\xad\x1c\x12\xce\xe5\x82\x2f\x87\x21\xcc\x27\xcd\x9c\x2c\xb8\x8c\xc3\x94\x6b\x9a\xb9\x3c\x40\xcb\x0e\x43\x4c\xec\x0c\xee\x6a\x47\x07\xfe\xb5\xe0\x4e\x8d\x42\x78\x52\x98\x14\x3b\xc7\x2e\xed\x6e\x2f\x80\x1b\x48\x5e\x32\xa1\x5a\x7a\xd1\x25\xb9\x8b\x9b\xde\xf7\xd9\xd7\x4e\xae\x19\x67\xf6\x46\x5a\xd4\x62\xb1\xe5\x91\x4b\x44\x04\x57\x9a\xc4\x03\x69\xa7\x49\xae\x79\x36\x22\x33\x45\xc4\x22\xcb\x3f\x75\x43\xce\x3d\x28\x30\x35\xc7\x47\x41\xd4\x1e\x1c\x1d\x1d\x1e\x85\xf9\x36\x30\x0e\x05\xee\x58\x6f\x61\xba\x04\x28\x03\x32\xa2\xda\xd3\xef\xbe\xcb\x7a\x87\xfd\x1e\x34\xcd\x98\x32\x46\x1e\x34\x9e\xee\xc3\x57\x17\x7d\xfb\xfa\xed\xf6\xca\x4a\x02\xb8\xf4\xbb\xba\x5a\xc5\x6a\x26\xd8\x53\x90\x87\x4d\xe9\x78\x99\x1b\x93\x0a\xec\x41\x9e\x8f\x01\xee\x41\xd1\x24\xcb\x43\x12\xa2\x36\x1f\x4a\x7f\x33\x54\x2a\x2f\x1d\xa4\x4a\x5b\xfb\x15\x77\xaf\xd4\x4a\x2f\xe7\x43\x7b\x12\x6c\x11\x8e\x60\x68\x79\xfa\x0d\xab\xab\x0a\x5c\x9f\xf7\x04\x5d\x01\x20\x0e\x6b\x82\x2a\x0e\x59\x54\x9f\x66\x52\x37\xa9\x4a\x0d\x01\x88\xf6\x6a\x6f\xde\xba\xd7\xfc\xe9\x86\xb3\x70\x6f\xfb\xf6\x03\xff\x36\xf4\xeb\xe6\xe5\xed\xa5\xb9\xf6\x57\x67\x9d\xf9\x85\xc0\xdb\x95\xf3\xdb\x1f\x3d\x84\x42\x54\x58\xa5\x48\x9e\x33\xac\xa6\x57\x51\xcd\xd3\x9a\xcd\x7a\xae\xe8\xf1\x68\x61\x35\x1d\x48\x9e\xaf\x72\x35\xad\x56\x4a\xa8\xba\xe8\x2c\x3d\xa2\xd2\x70\xcd\xcb\x17\x18\x4d\x74\x5d\x86\xc2\x38\xef\xcf\x3b\xe7\xff\xa3\xb1\xf6\x01\x31\xd9\xbe\xfa\xc4\x59\xbc\xc9\xd9\x58\xb8\xd5\xbe\x2f\x53\x0b\xc8\x4f\x3d\xd6\xcb\xd5\xab\x93\x86\x59\xa1\x54\x95\x50\xb8\xad\xa7\x50\x96\x30\x3b\x3b\x81\x42\x94\xbf\x5c\x96\xfc\x2e\xec\x4d\x80\x82\xf2\x86\xce\x2a\x13\x86\x3d\xad\xc0\x9d\x1b\xd7\x03\x5d\xbf\x15\x03\x33\x90\x5a\xd1\x55\xa3\x1a\x6b\x57\xda\xef\x6f\x39\xd7\x2e\x37\x6f\xfd\x42\xf3\x67\xfb\xfa\x59\x28\x30\xf8\xd1\xe5\xf6\xd7\x5f\xb2\xdf\xdb\x73\x17\xb7\xef\x3f\xcd\x89\x3c\x38\x37\x50\x67\x50\xea\x14\x4b\x3c\x48\xba\x03\xf6\x44\x84\x4a\x3f\x24\xaa\x96\x18\x0a\x47\x9a\xda\x8e\x97\xba\x6e\xd3\x0e\x03\xfd\xb9\x8f\xba\x35\xa6\x46\x31\x2e\x35\x22\xd1\x83\x01\xf5\x2f\x16\x2f\x39\x2b\x4f\x9d\xf9\x5f\x9c\x4b\xf7\x58\xa7\xee\xa3\xbe\x95\xa1\x73\x5a\xad\x4e\x61\xfe\xd6\x19\x5d\x3b\x83\x01\xa7\x9e\x5f\x68\xd1\xa8\x57\xed\x3e\xd8\x79\x4f\x73\xcb\x76\x59\xaf\xe8\xec\x09\x90\x5f\xd1\x2a\x10\x7f\x8a\x4f\x70\x19\x25\x94\xd1\x6c\x7e\xfa\x73\xf3\xfa\xd3\xe6\xc2\xcd\xe6\xdd\x87\xad\xa5\x0f\xfc\x8a\x58\x48\x19\x86\xbb\x24\x54\xd8\xc4\x1c\x63\xe4\x35\x49\x3b\x0f\xf9\xef\xb0\x31\x21\xf7\x49\xfa\x53\x9e\x53\xff\x2a\x21\xba\x7b\x8e\x83\xe8\x45\x28\x01\x42\x94\x3e\xcc\x35\xe0\x8a\xda\x09\xbd\xc9\xa5\x4c\xe9\xf4\x97\x80\x11\x82\x8e\x5c\x74\xc9\xd5\xb2\x09\x2f\x61\x94\xab\x9d\x77\x00\x4a\xda\x00\x52\x2c\xcb\x09\x06\x83\x38\xac\x09\x5f\xa7\xc7\x5a\x36\xea\x25\xe5\x10\x9b\xd0\x25\x36\x69\x07\x46\x86\x94\x19\xcd\xc4\x7d\x14\xab\x01\xea\x27\xa0\xa8\xa4\x62\x6a\xff\x56\xd7\x4d\xb6\xa5\x1e\x38\x12\xf8\xe0\x40\x59\x3f\xaa\x43\xd1\x7b\x45\xf9\xa3\x51\x57\x54\x53\x83\xe4\x63\x50\x8d\xb2\x3c\xab\xb0\x4f\x82\x9f\x22\xac\x7e\x65\xdc\x60\x92\xfc\x94\xa9\x96\x34\x2a\xc2\xce\x60\xf6\xb1\x29\x83\xd5\xb1\x61\x0f\x67\x32\x4d\x58\x18\x36\x10\x3a\x49\x74\xb2\x3f\xf4\xff\xe6\xc6\x82\xc7\x1c\x0d\xbb\xcf\xdb\x0e\x32\x97\xfa\xba\xc2\x03\xe6\xdf\xd0\xca\x31\xfe\x02\xa1\x1f\xa5\x9f\x35\xbc\x39\xc8\x05\x89\x38\xaa\x81\x8f\x44\xd9\x80\xf2\xfe\xfc\x37\x94\xf4\x87\xaa\xe9\xbe\xd8\x7f\x0d\x96\x00\x37\x01\x32\x69\x44\x67\x27\x08\xc3\x87\xa9\x61\x0f\x1c\x72\x73\x07\xec\x53\xcb\xba\x6a\xb1\xc1\x19\xa5\x80\x2e\x00\xd0\x05\xd6\xcd\x32\x90\x00\x1e\xea\x8e\x96\xd8\x36\xe4\x4b\x46\x6b\x5b\xee\x07\x24\x38\xa1\x4c\x60\xc5\x14\x89\xcf\x91\xb1\x17\xc6\x52\xd6\x41\x04\x6e\x02\x83\xa3\x78\x49\x10\x94\xbd\x70\xff\xc5\x9f\x24\x75\xee\xe5\x0b\x90\x1d\xba\xe5\x12\x43\x37\xdb\x31\xfa\xe2\x16\x1d\xd1\x0a\xa9\x86\x4a\xf6\x2e\x2f\xec\x0f\xc8\x05\x41\x9f\xfb\xd9\xd6\xab\x33\xc6\xe9\xb8\x2e\x64\x04\xbc\xc1\xee\x57\x33\x90\x0e\x98\x2d\x6a\xc5\x9a\x46\x52\xe8\xee\x33\x59\x87\xac\xf3\x6c\xe5\xb2\xed\xc0\xe6\x38\x15\xbd\xc2\xa4\x02\xac\xd1\x19\xa0\x15\x5e\x61\x71\x51\xf8\xa3\x97\x62\xa2\x2d\x7a\xe6\xc4\xf4\xe2\xdf\xfb\x2f\xac\xff\x44\xa7\x29\x08\xa6\xb8\x0b\xc7\x8a\x9d\x37\x16\x9c\x0f\xb7\x1a\x1b\x0f\xe4\xf6\xcd\x1a\x78\x02\x00\x32\xd6\x0b\x24\x56\x5a\xd3\xea\xab\x0a\xba\x8a\x02\xc3\x21\x99\x4d\xf4\x72\xec\x26\x9b\x15\xa2\x20\xf5\x58\x4a\x01\x10\x80\xe4\xd1\xd9\x48\x78\x2c\x5b\x1f\x4d\x93\x8a\x3a\xcb\xee\x88\xa7\x21\x07\xf6\x99\x69\x28\x8d\x10\x2b\xcb\xe4\x05\x57\x80\x93\x6a\x55\x2b\x62\xaa\xef\x52\xbd\x52\x03\xd4\xa6\x56\xc4\x3a\xba\x90\xfb\x02\x45\xd7\x7c\x8b\x4e\xc7\x18\xe8\x9d\x27\x3f\xb6\x9f\x7f\xde\xbc\xfa\x10\xe4\xfb\x90\xe2\xd3\xd7\xef\x36\x17\xae\x71\x13\x7d\x17\x76\x6e\xb1\xef\x29\x40\x1d\x55\xa3\x5b\x01\x6d\x05\x6a\x1c\xbb\x48\x92\xe9\x39\x5b\xd5\x71\x55\xfe\xf6\xba\xac\xbd\xb2\xe1\x2c\xde\xfc\xed\x74\x59\x6d\x16\x27\x37\x93\x07\x19\xe3\x98\xa8\x88\x77\xd5\x18\x3e\x62\xb8\xa8\x72\x37\x77\x17\xe4\x2f\xc7\xf1\x2f\x7a\xb9\x43\x15\xcf\x7f\x4b\xa4\x09\xf4\x27\x9c\x1e\xb0\x57\x83\x2e\x12\x8b\xfd\x47\x14\x8f\x3f\x59\x1d\x34\x4d\xc3\xdc\xaf\x24\x6a\xe5\x49\x9d\x40\xba\x46\x67\x61\xb5\xbb\x72\xbe\x0b\x8e\x34\xf4\x8d\xb5\xf5\x30\x90\x12\x0c\x14\x59\xff\x07\xf7\xe6\xfd\x8a\xab\xf4\x37\x62\xad\x08\x12\x20\x24\xe8\x2b\x41\x69\x03\x34\xdf\xc0\x21\xc2\xaf\x3f\x0a\x54\x63\x81\x59\x53\x62\xd7\xa6\x22\x24\xdb\xfa\xbf\x93\xfa\xf5\xfe\x32\xf4\xeb\xd6\xc7\xce\x45\x28\x24\xee\x3c\x79\xd8\xd8\x5a\x6a\x7d\xba\xec\x6c\xdd\xf8\x75\x53\xea\x82\xee\x51\x38\x09\x53\x40\x65\x84\xa2\x36\x5c\x21\x27\xa1\x68\x72\x2e\x3e\x83\x02\xed\x0b\xab\xdb\x1b\x9f\xb4\x97\x1f\x38\x77\xef\x4a\x66\x6f\xe8\xc2\xcf\x56\x05\xcc\xe8\x12\x0a\x25\xde\xd6\xb1\x17\xd6\x86\x5b\x64\x34\x49\x33\xbe\xf4\x68\xfb\xfd\x47\xad\xad\x1f\x9b\x8b\x8b\xed\xe7\xab\x64\x10\x6a\xac\x3d\x66\x14\x33\x72\x19\x95\x6c\xd2\x05\x81\x43\x47\x26\xf9\x37\x0b\x71\x81\x5a\x1b\x2c\x31\x8f\x57\x8a\xce\xec\x1f\x61\x2f\x08\x69\x92\x3a\xce\x47\x6c\x58\x73\xd8\x4a\x7d\xf9\x89\xb2\x93\x1c\xb5\xf0\x61\x53\x70\x37\x07\x7f\xa7\xa5\xa3\x7f\x71\x05\xce\x94\xd0\x2d\xc0\xdb\x21\xc2\xa1\x4a\xf3\x11\xd8\x2d\xbd\x4d\x95\x4d\x9d\xbf\xd0\x15\x8c\x76\xd7\x54\x1b\x82\x2c\x40\x09\xda\x6b\xaa\x09\x6a\x0d\xae\x08\xa9\xd6\x2b\x13\x1a\x6d\xb6\x43\x55\x26\xd0\x25\x76\x77\xfb\xeb\x2f\x9b\x9f\x5f\x6b\x5d\x5c\x68\x2e\x7d\xef\x2c\x3e\x09\x6f\x29\x41\x16\x9b\x15\x3a\xbb\x55\xfe\x45\xf3\x5b\x34\x92\xd6\xdf\xfa\xa2\xb3\x70\xcb\xb9\x7c\xb3\xf1\xfc\x7e\xf3\xec\x4a\x4e\xf8\xc9\x62\x1d\x63\x15\xe8\x42\x0e\x5a\xc4\x9b\xab\x6c\x23\x70\x16\xce\x67\x22\x81\x1f\xd7\x6c\xc8\xfb\xf1\x30\x18\xa8\xe9\x69\x0e\xc0\xed\xb9\x8b\xcd\x0f\xbe\x21\xc1\x29\xaa\xa1\x18\x35\xd5\xbd\xb6\x5b\x0e\xc7\xd6\x2a\x35\xaa\x93\x06\xc2\x62\xbd\x06\xfa\xad\x44\x7b\x21\xd8\xc8\x1b\x6b\x97\x1a\x9b\xf7\x9a\x17\xe7\xb6\x97\xe6\xd8\x16\xd2\x58\xfb\x19\xac\x13\xb8\x43\x66\x21\xcb\xa8\xb1\xcb\x6d\xc7\xfe\x10\x7b\xcd\x72\xf7\x87\x8f\x9d\xcd\x39\xaf\x49\x76\x12\xce\x98\x3a\xeb\x98\xbf\xe8\xb5\x34\xd8\x9d\xf3\xb7\x9d\xf9\x87\xec\x63\x79\xbc\x6e\x5d\x22\x8f\x85\x68\x09\x1b\x7b\x3e\xec\x43\x71\x6c\xdc\x73\x17\xaa\xea\x91\xac\x08\xe3\xcf\x50\x69\x26\xa8\x95\xa2\xb7\x34\xd1\xf6\xd2\x94\xd9\xd3\xaa\xed\x16\xef\x63\x10\x4b\xca\xc4\xac\x02\x1a\x0f\x86\xcb\x52\x5e\x42\x27\x15\x2c\x5d\x17\x63\xbc\xcf\x0e\x51\x9c\xfa\xaa\x76\x06\xad\x22\x09\x83\xd8\x58\x9b\x03\xfb\xd1\xcd\x55\xba\x29\x65\xc1\xc8\xc0\x97\x20\xcd\x2a\x86\x33\xc0\x28\xe0\xa5\x3c\xce\xba\x05\x95\xe8\x51\xee\x0b\xc4\x81\x21\x5d\xdb\x77\x16\x9b\x4b\xeb\xed\x27\xec\xb4\xfd\x21\x0b\x51\xae\x37\xab\x92\x10\x22\x97\xf4\xbd\x0c\x66\x12\x3f\xc0\x25\x53\x49\x48\x94\x98\xa6\x8d\x3c\x05\xe4\x50\x99\x1e\x7b\xf7\xf7\xf2\x98\x13\x6d\x83\xfe\xb2\x46\xf2\x59\x4c\x3c\xb4\xf1\x1e\x1a\x0b\x9f\x6e\xcf\xdd\x93\x0f\x6a\x75\xb1\x40\x01\x1d\x9a\xe4\x58\x0a\x94\xa4\x29\xc1\x5d\x4b\x04\x86\x30\x85\x68\x52\xf6\xee\x16\x3e\x33\x33\xed\x3c\xd3\xec\xa6\x3d\xa1\xb1\xe3\xad\x56\xb7\xa6\xc1\x4b\xa3\x5e\x2c\x6a\x96\x85\xba\xd6\x18\x6d\x40\xae\xc0\x25\x78\x62\xbb\x63\xc2\x34\x92\x4f\x0f\x47\x48\x20\x83\x8b\xa0\x6d\x9b\xed\x60\x81\xb4\x6e\x48\x07\xb9\x27\xc9\xd2\x01\x97\xe7\x9e\x5e\x06\xdd\x8b\x7b\xc3\xb6\x34\xdb\x46\x27\x2b\x63\x12\xbf\x8a\x1f\xb2\x0c\xe0\x24\xe8\xce\x57\xc9\x17\xc9\x59\x88\x5a\x8f\xdd\x91\x69\xfc\xfd\xb8\xf6\xd1\x6a\xef\xd6\xe7\x3d\xe6\xe3\x14\xa1\xd5\x93\xd4\x3c\xb9\x9d\xd0\x91\x1a\x19\xd0\xd7\xdd\x3f\x42\x40\x87\x4e\xe2\xd4\xad\xc5\x09\xe3\xe2\x07\x78\xe9\xe0\x2f\xde\xf1\x30\xe5\x7b\x06\x49\x48\x51\x98\x3b\x02\x71\xde\x32\x31\x10\x36\x9d\x7c\x3b\x8a\x1f\x6e\x46\x32\xc9\x37\x9f\x01\xfc\x17\xf8\x91\xa5\xaf\xc5\x21\x89\x53\x4b\x27\x14\x83\xf8\x86\x61\xd9\xd5\x98\xc1\xcc\x43\xdb\xbc\x2b\x48\x73\xe9\x83\xe4\x45\x4c\x72\x6b\x4c\x2b\x71\x3a\x82\x82\x29\x80\x76\x9f\x9c\xc2\x27\x1e\xe7\x75\x8f\xf3\xe4\xbe\xce\x04\x54\x86\x87\x6e\xf1\x96\x83\x3f\x40\x67\x11\x0c\x5a\xca\x59\x22\x01\x4a\x9e\x5e\x1e\x91\xc4\xa0\x67\x99\xd8\x72\xd0\xe4\xa9\xf6\x3c\x12\x7b\x14\xa0\xc2\xa7\x72\xea\xf1\xf1\x76\xd2\x40\x0b\x89\xb3\x39\x5c\xc3\x9a\x53\xcf\x80\xa0\xd7\x01\xfd\xcf\xda\xac\xef\xa0\x8a\xe9\xbd\x21\xfe\x28\xcf\xae\x21\x07\xc1\x2e\x31\x32\x0a\x25\x17\x5b\xba\x54\xe8\x1e\xfd\xa0\xf4\x47\xd1\x33\x6b\x37\x61\xe9\xad\xa8\xd3\x5c\x6e\xee\xcb\x83\x94\xa0\x1f\x27\x72\xe8\x01\x99\x9f\xac\x93\x13\xf8\xd4\x5e\x28\x41\xe6\xba\x56\x69\xd8\x82\x16\x9c\x9e\x5c\xe0\xc1\x35\xc9\x56\xe1\x7e\x81\x95\xec\x2d\xda\xb0\x15\x9d\x71\x2c\xc9\xb1\x97\xc7\x73\x45\x9b\x74\xfe\x0a\x76\x34\x26\x10\x10\x2c\xaa\x50\xe0\x99\xbb\x72\xde\xe3\xb0\xc3\x3c\x2b\xbc\xc0\x89\x9a\xd8\x50\x84\x16\x5e\x02\x3f\xc6\xfd\x36\xec\x1b\x19\x0c\xca\x19\xcd\xd4\x14\x53\xfb\x33\x77\x3c\xe1\xee\xb4\xe0\xca\xa6\x4e\xa9\x71\x1e\x73\xdb\xdf\x5e\x6e\xaf\x9c\x75\x1e\xfc\xd0\xfe\x19\x5c\x45\xda\x2b\x4f\xb6\x2f\x5c\x69\xaf\xdc\x90\xa1\x87\xdf\xa5\x0f\x1c\x0a\xf7\x24\x86\xbf\xe2\xe4\x31\xc1\xe6\x32\x74\x75\x39\x30\x0b\x11\x95\xdc\x56\x98\xa2\x91\x24\x5f\x7d\xae\x18\x96\xf6\xd2\xe7\x78\x5c\x27\x7d\xa5\xa4\x93\xf1\xab\xa2\xda\xc5\xe9\x68\xac\x88\x0f\xdc\x00\x2e\x3f\xdd\x9e\x97\xb2\xfe\xd7\x2d\xdb\xa8\xf8\x43\x57\x66\xc9\x64\xfe\x92\xd6\x3f\xd5\x0f\x91\xa8\xde\xab\x97\x21\x80\xe4\xf0\xd0\x38\x16\x3e\xa3\xd7\x7b\x43\xfc\xbf\xa7\x35\x26\x30\xd6\xf9\x3f\x9d\xd6\x10\x1b\x3e\xdb\xcf\xbe\xdb\xeb\xc1\x79\x7d\x74\xe0\xd8\x81\x37\x32\x82\xfb\x6f\x25\x6d\x46\x2b\x1b\xb5\xbd\x78\x9a\xed\xf5\xfe\x9a\x60\x3d\x55\x9c\x7e\xb9\x5f\x61\x5b\x03\xb2\x67\x17\x74\x9f\x89\xcc\x52\xc0\x64\x01\xdc\x72\x85\x12\xf7\x31\xb4\x0d\x65\x6f\xb5\x5e\x2e\xef\x55\x08\x1a\xba\x62\x44\x27\xd9\xa4\xe2\xf7\x94\x63\x28\xa4\xc7\x9a\x0b\x37\x19\xa3\xad\xad\x0f\x9d\xcf\xe6\xe8\xb5\x04\x87\x2f\x2b\xed\x0b\xdf\x3a\xcb\x77\x1a\x4f\x2f\xc6\x9b\xb0\xe2\x4f\x64\x1a\xe8\x69\x4d\x05\xef\x54\xf2\x75\x2d\x96\xeb\x25\xcd\x75\xaa\x86\xd8\x01\xcd\xb2\xfb\x14\x2c\x22\xc8\xed\x3d\x14\xda\xc4\xc0\x2b\x15\xd6\x0f\x3a\xdb\xad\x14\x5b\xaf\xc4\x24\x49\x64\x27\x0d\xdb\x99\x9a\x3f\xbc\xc7\x0e\x12\x8f\xec\x37\xc6\xc7\x47\x9a\x97\x1e\x3a\x0f\x7e\x66\x1b\x97\xe2\x2c\xae\x40\x70\xd3\x83\x3b\xcd\xef\xef\x53\xff\x49\xcc\x5b\x4a\x9b\x33\x16\x4d\xc7\xdd\xbb\x32\x50\x55\x6b\x7a\xc2\x50\xcd\x12\xda\xef\xd9\xc4\x8c\xd9\x70\x62\xbf\x4d\x8f\x51\x9b\x04\x97\x24\x32\x80\x99\x1a\x77\x5e\x43\x69\x2d\x1a\x73\x9a\x36\x72\x14\x90\x08\x22\x43\x47\x7c\x4b\x01\x6a\x30\x78\x37\x9d\x59\x17\x42\x6c\xb3\x58\x75\x3d\x64\x09\xae\x56\x91\xdf\x89\x63\x4a\xea\xd1\xf0\xcf\xc4\xf1\xa0\x1e\x28\x19\x4f\xd7\x67\xe2\x78\x04\xcc\x86\xa9\xda\xc8\x53\x90\x60\x36\x4c\xfc\x5e\x1e\x73\x0a\xb3\x61\x77\xa8\x78\x1e\x68\xe3\xea\x05\xf4\x86\x9f\x67\xc2\xe8\xbf\x0e\xa7\xe8\xe1\xf0\xcf\x25\xf0\x26\x18\x48\x81\x47\x69\x03\x69\x10\x0b\xbf\x20\x97\x60\x4b\xd3\x3b\x91\x42\x55\x26\x8f\xe9\x53\x74\x40\xfa\xbf\x23\xef\xe2\x72\x39\x29\x67\xb0\xb2\x33\x58\xd2\x1e\xfa\x1e\xf6\x04\xd7\x0a\xec\x48\x59\x8f\x0a\x17\x09\xba\x84\xd4\xa6\xd5\x2a\x1b\x7b\xdc\x57\x2c\x12\xeb\x18\x8d\xd3\x06\xdc\x71\xc0\xe0\x0a\xa1\x87\x24\xd7\xd6\x6a\x1a\xfa\x34\x92\xb5\x2f\xda\x1d\x25\x6f\xf0\xc2\x7c\xc5\x87\x3c\x53\xe7\x91\x5f\x4a\x46\x1f\xd6\x0e\xc2\x78\xe3\x31\x8e\x96\xac\xf1\x98\x23\x29\xc2\x86\x05\x41\x29\xd1\x8e\x5a\x1f\x3d\xd8\xbe\x3e\x47\xd8\xa4\xf1\x58\xe9\x7d\x5a\x92\x1b\x88\xe1\xde\x4d\x03\x6f\x63\x6b\xa9\xb1\xb6\x9e\xdd\xcc\x0b\x7d\x1d\x19\xbc\x21\xa7\xdd\xf0\xfa\x42\xde\xce\x1b\x10\xb3\x72\xb3\xf3\x7a\x84\xe5\xa0\xb8\xcd\x04\x4b\x9c\xe2\xdf\x9c\x42\xbe\x57\xc0\x88\xc2\xea\x29\xdd\x43\xe8\xcf\xd8\x2b\xf9\xdb\xb4\x3b\x1b\x5d\x76\x9b\xb6\x47\x66\x66\x9b\x76\x06\x48\xe2\xd4\x7a\xf6\xdc\x51\xf8\x91\x92\xb0\xd8\x46\x19\x68\xc0\x4b\xae\x18\x05\xbd\x4d\xc4\xf1\xe7\x69\x4b\xce\x07\xa8\x0c\x0f\x69\x0c\xc0\x69\xc8\x16\x83\x23\x4f\x69\x26\x2b\x72\x46\x68\xf2\x54\xef\xa2\xa9\xc5\x2f\x36\x8b\x1a\x5c\xfc\x24\xb2\x93\x3f\x60\x5d\xc9\x6a\x8c\xea\xf4\x49\xb4\x61\x51\x6e\x2c\x25\xe1\xc9\x52\xee\x59\x77\x82\x81\x3f\x9d\xe7\x18\xf5\x93\x93\x85\x2c\x78\xd8\xf8\xe0\xd3\xf0\x78\x43\x17\xa0\x28\x23\x9b\x61\x36\xac\x2c\xb3\x10\x0c\xa1\x3c\x32\x31\x51\x58\xf0\xbe\xc8\x6e\x40\x3b\xa8\x59\x45\x53\xc7\xa4\x61\xfb\x7d\x0b\xd0\xf7\x38\x2e\x58\x07\x63\x04\x53\xb4\x4b\x4f\x0e\xe5\xf4\x52\x54\x74\xe5\x75\x5d\x64\x3d\x45\xb6\x3f\x74\x2c\x7a\xce\xcb\xc0\x90\xa5\x10\x6e\xa9\xde\x06\xe6\x13\x21\xbd\xd4\x53\x46\x15\x9f\xbb\x41\x17\x69\xa9\x96\x87\x9b\x8d\x13\xaf\x9b\xfc\x08\xc5\x88\x4e\x00\x21\x4c\x1f\x68\x56\x7c\xe1\x51\xa0\x57\xa1\xec\x31\x18\xd0\x82\x72\x3b\x95\x06\x89\xde\x36\xbe\x3a\xcb\x96\x4c\x06\x03\x8c\x9f\x14\x86\x15\xfd\x97\x95\x49\x4d\xb5\xeb\xa6\xa6\x58\x06\xe9\x2f\xa8\xa0\xd5\xb4\x3a\x13\xe8\x8f\x6a\x09\xed\x31\x75\x8b\x5a\xf3\x46\x31\x3b\xf6\x0e\xa2\x12\xec\x7a\xbc\x85\x13\x78\x48\x61\x08\x33\xef\x1d\xc8\x75\xa2\x56\x43\xee\x4c\x3d\x87\xb7\xd0\x31\xb5\xd3\xf8\xe4\x39\x87\x8e\x65\x6b\x8c\xb2\x9d\x32\xb2\x22\xf1\x4f\xfa\x56\xa3\x8f\x98\xe4\x4b\xfa\x6e\xa0\xdc\x25\xfe\x61\xda\x65\xba\x4a\xee\x36\xfa\x4c\xfd\x12\x32\x43\x93\x28\xcc\xbd\x73\x76\x9c\x06\x91\x1e\x3a\xcd\xb3\x4d\x92\xb9\xfc\xb5\x7f\xf8\xc7\xa3\x7d\xca\xab\xaf\xbc\xf6\x7b\xf8\xe7\x70\xb4\x96\x98\x92\x49\x6e\xdf\xbe\xb6\xfd\xc5\x67\xbf\x6e\x2e\x40\x70\xcb\x57\xef\x41\xeb\x5f\x37\x2f\x63\x73\xf8\xf7\xf0\xaf\x9b\x17\xe5\xa8\x02\x5b\x3c\xd8\xce\xcb\xec\xd6\x85\xe9\x89\x6c\xb6\x2f\x7a\x99\x62\xa2\x85\x9b\x4f\x9e\xb5\x1e\xac\x77\xa7\xc1\x3c\xfb\xd0\x59\x7f\xd2\xba\xf4\x4b\x73\x4e\xc6\x55\xe4\xa0\xc1\x73\x65\x94\x0d\x13\xe2\xb2\xd9\x4d\xbb\x56\x8f\x4e\xc9\xc0\xce\xad\xe6\xe3\x2f\x9c\xad\x6f\xda\x17\x7f\x6c\x3f\xfb\xd8\xb9\xb0\x2e\x8f\xb3\xa2\xd6\x5c\x9b\x21\xe6\x51\xe1\x01\x93\xd8\x23\xa6\x56\x31\xd8\x51\xc2\x35\xf3\x78\xc2\xd6\x4c\x6d\x46\x37\x58\x37\x61\x70\x95\x45\xf9\x9b\xa8\x49\x6c\xd6\xd6\xc6\xda\x7a\xfb\xf9\x6d\x4f\x9f\xde\xfc\xe4\x9e\xb3\x7a\x8e\x34\xec\x31\x11\x96\xf1\x87\x2f\x31\x40\x65\xfc\x78\x7c\x91\x3a\x09\xb1\x6b\x40\x5b\xdc\xb9\xdf\xbc\xfa\x68\x7b\xee\xac\x73\xed\x2a\x78\xd9\x5c\x5b\x71\x2e\x3d\x22\xaa\xa4\x7a\xb1\x58\x87\x2a\x86\x08\x1b\x62\xea\x52\x78\x19\x34\x6f\x5e\x68\xde\xff\x92\x7d\x93\xcd\xcb\x80\xd4\xa2\xb4\xa6\x7c\x09\xe4\xa3\xd7\x13\xa5\x13\xf1\x56\x92\xaf\x8d\xe4\x1a\x42\x0a\xac\xfd\x09\x08\xf7\x4b\x81\xa6\xfc\x92\x8a\x6a\x43\x58\xbe\xcd\x3e\xd7\xcb\x5a\xc9\x4d\x6b\x03\x89\x63\x20\xe9\xff\x71\xca\x08\x88\x8e\x2f\x98\x90\xab\xcf\x4b\x00\x67\xe1\xe4\x50\x67\x58\x3b\xfc\x06\x67\x2f\x1c\x04\x53\xfa\x8c\x86\x23\x15\xb3\xa1\xa6\xc1\x2e\x8a\xbb\x6c\x14\xd5\xf2\x3e\xbd\xca\x26\x68\x55\xb3\x25\xfc\x6f\x5d\xaa\xbc\xa4\x63\x3c\x9f\xce\x5e\x4b\x29\x42\xb6\x55\xab\x5e\x51\x4a\x86\x66\x75\x7c\xcc\xd8\x02\xae\x19\x4a\x45\xb3\xd5\x92\x1a\xe7\xa1\x90\x1b\xe0\xf4\xe3\x5b\xaf\xd4\x02\x29\xcd\xa0\x0f\x35\xd6\xe3\xb0\x9f\x50\xde\xae\x98\xcb\x3e\x24\x1c\x6b\x2e\xcd\xb5\x9f\x7f\xe8\x25\xbf\xa2\x9c\x03\xe0\x43\x39\x77\x79\xfb\xb3\xcf\x29\xc3\x16\xbd\x82\xf4\xc3\xcb\x32\x89\xab\x07\x8f\x9d\x18\x1a\x1d\x3e\x76\x74\xf0\xd8\xb8\x72\x62\x60\x74\x68\xe0\xf5\x23\x83\x0a\xd6\x20\x8a\xf6\x51\x4a\xd5\x26\x13\x05\x63\xd1\xeb\x8d\xd7\x99\x5f\xfc\x64\xfb\xc2\x62\xf8\xaa\x8b\x9d\x60\x9d\x12\x24\xd1\x3b\x39\xdb\x39\x1e\x5f\xdb\x2f\x95\x67\x2c\xae\xc2\x89\xe5\x55\xc9\x28\x4d\x40\x29\x8e\x29\xa3\x5c\x4a\xfe\xae\x88\x25\x3b\x4c\xb5\x72\x6a\x6a\xe2\xe4\x9e\xfd\xbf\x0f\xaf\xc7\xd1\xdd\xe6\xdf\xf7\x41\x82\x28\x54\x47\xed\xb3\x2b\xb5\x7d\xae\x55\xe7\x54\xd1\xa8\x4e\xea\x53\xfd\x7f\xb6\x8c\x6a\x32\x1c\x5b\x39\xb9\x07\x52\xd3\xf7\x19\x93\x90\x6a\x6e\xca\x3a\xb9\x27\x7a\x52\xfc\x55\x71\x7e\xb2\xfe\xca\x2b\xaf\xfc\x8f\x0c\xdc\x8b\xcf\x37\xf6\xec\x88\x5e\xad\xbf\xbd\xef\xa8\x5a\xa4\x3f\x7d\xcc\x04\x8a\x92\x56\x66\x31\x8c\xd8\xd7\x09\x35\xc8\x00\x66\x81\x37\xb0\x85\xe5\x59\x4c\xb6\x8d\x60\xee\x0a\xaa\xcf\x82\xd0\xfe\xc0\x40\x18\x67\x2c\xc5\x4d\xa4\xc9\x90\x69\x22\x78\x4e\xee\x79\xe7\xe4\xc9\x20\xaa\x93\x80\xec\xa4\x1f\x1d\xfb\xe3\xdd\x93\x7b\xba\x30\x8e\x18\x67\x34\x73\x6c\x5a\x2b\x97\x05\xf9\x4a\x85\x6e\xaf\x3b\x5a\x81\xd1\x8f\x01\x9c\x66\x06\xa4\x9b\xc6\x7f\x1f\xaf\xdf\xde\x78\xc9\x6d\xc5\xd1\x23\x49\x89\x91\x3c\xd2\x4a\x13\xde\x4f\x4b\x2f\xcf\x30\x41\x3b\x74\x1f\x4a\x3f\x82\x69\xe0\xf3\xa1\xe4\x28\x4e\x22\x12\x91\x51\x4b\xc9\x43\x37\x0a\x97\x8f\xd4\x60\x04\xf7\xd8\x58\xd8\x2a\xbb\x79\x07\xc0\x7a\xdb\xad\x22\x7a\xda\xfc\x7d\x70\xff\xca\x07\x37\xfd\x9a\xa6\xfb\x88\x57\xbf\x8b\x74\x08\x9e\x2e\x90\x87\x02\x58\xfc\x62\x6f\xd5\xd8\x2e\x15\xe7\xf3\x8f\xd7\x62\x17\x18\x29\x19\x9a\x17\xe7\x9a\x4b\x17\x29\x14\x00\xca\x7a\x7c\x0c\x49\x93\xe4\x29\x85\x08\x02\x88\xab\x7b\x7b\xd6\xad\x13\x01\x91\x47\x2e\x9d\x31\xca\x84\x75\xf6\x1d\xa7\xe2\x1a\xa4\x42\x04\x40\x8d\x8d\x2f\x5b\xd7\x64\x72\xd2\x71\x62\xb2\x18\x96\x64\x40\x48\xd2\x97\x9b\x59\x29\x2f\xb0\x99\xf8\x10\x33\x2a\x49\x40\x10\xa5\x8e\xb1\xc8\x2b\x18\x93\x2e\x2e\x6e\x79\xa0\xb1\xf5\x26\x99\x90\x9c\xad\x6f\x9a\x17\x3f\x96\x56\xc5\x71\xec\x41\x83\x16\xa4\x08\xd5\xd2\xdb\xb2\x88\xa2\x0c\xb6\x2c\x1f\x11\x3b\x6c\xca\xda\x41\x4c\x62\x5d\xbe\x7b\x86\xac\x9d\x46\x27\xcd\x77\x56\x9b\x92\x38\xeb\x3b\x80\x71\x77\xb8\xcf\x6c\xc4\xda\x65\xec\x59\x7a\x65\xb7\x4d\x58\x2f\x82\x04\x81\xfe\x99\x51\x66\x54\x53\xc7\x5d\x0b\x82\x8f\x55\x6e\x4a\x55\xce\xa8\x16\xcf\xa8\x6b\xc7\x38\x27\xf9\xb4\x72\xfe\xd6\xcd\xa5\x6f\xdb\xcb\xcf\x5a\x5b\xcb\x32\x24\x81\x16\x9a\x0e\x0b\x2a\x0e\x81\x42\x53\x82\xca\x94\x64\x26\xca\x11\x2f\x8d\xb3\xe8\x06\xeb\x77\x52\xb9\xe9\x65\x6d\x7f\x74\x0a\xb8\xb4\xcd\x64\xe9\xe0\xbc\xa7\xa9\x6d\xcb\x33\x23\xf9\xba\x21\x5b\x09\xdb\x2e\x4a\x6c\x9e\x3f\x38\x75\x3e\x7f\x37\xff\x69\x27\x5f\x70\xa6\xbc\xfd\x5d\xe4\x24\x64\x30\xf6\xe7\x2e\x6e\x6c\x6c\x38\x97\xee\xe7\x35\x33\x42\xd3\x38\xa4\x2a\x1b\xe0\xa6\xa9\x08\x71\x63\x23\xe2\xfa\xdd\x1a\x07\x7e\x5b\x8c\x34\xc5\xa5\xd0\x38\x0a\x5a\x9d\x29\xe9\x05\xb7\xbb\xb0\xe6\x7d\x2e\xa1\xbf\x6e\xde\xc9\x93\xd2\xf0\x60\x88\x74\x39\xb4\xb3\x80\x12\xa5\xd7\xab\x5a\x83\x8b\xb3\xb3\xca\x62\x6c\x0b\x90\xbd\xfa\xca\x2a\x8f\x34\xdf\xfa\x98\xba\x2f\xbc\xa5\x34\x35\x74\xed\x15\x20\x87\x2e\xb9\x39\xd2\x32\x49\xf5\x89\x7d\xd6\x41\x90\x6f\x44\x92\xa0\xfb\xab\x00\x80\x17\x2b\xfa\xb7\xe6\x33\x6c\xbd\xc4\x51\x94\x62\x8a\xbd\x35\x9c\x36\xf4\xb0\xcd\x61\x8f\x75\x09\x73\xcb\x89\x81\x17\x6c\xa5\xe4\xce\xd8\x68\xa2\x96\xbe\xe5\x14\x61\x45\x2c\x25\xa2\x95\x24\x31\xd9\xd7\xa2\x14\x24\x49\x6a\x53\x16\xfa\xa0\xfe\x0a\xf9\x5a\x12\x6d\xb7\x4c\xd6\xd9\x57\x53\xfa\x12\xbb\x25\x51\x7a\x7d\xef\xbd\x7a\x37\x58\x12\xa1\x73\x22\x64\x75\x36\x4e\xc7\x40\xca\xb5\x10\x52\xe5\x29\xc7\xf5\x10\x16\xf3\x20\x4a\x60\x58\xc1\xa9\x1c\x48\x9c\xe2\x39\x58\xd4\x5a\xad\xac\x17\xc9\x3f\xc6\xaa\xb3\xe5\x0b\x15\x80\x12\xd6\x45\xca\xb6\x92\x14\xb9\x9b\x08\x56\x16\x27\xaf\x26\x72\x7b\x60\x3c\x1f\x62\xf2\xdb\x88\x6a\x4f\x27\x2e\x5d\x59\x60\x92\x34\x63\x5d\x0a\x28\x17\x92\x92\xac\x90\xef\x25\x31\x73\x76\x5c\x67\x0f\xe2\x11\xfc\x3f\x52\x8f\x62\x2a\x08\x82\xd4\x31\x78\xbc\x30\x2e\x78\x5f\x45\x12\x92\xcb\x95\x87\x4d\x3b\x6b\x5a\xc5\xeb\xe9\xff\x1a\x1b\x3e\x16\x8d\x6c\xeb\xfb\xe6\x95\x2f\xe0\x93\xe6\xbd\x4d\x67\x73\x31\x23\x5a\xa8\xff\x11\x14\x4e\xe3\x8b\x70\x84\x15\xff\x60\x17\x0b\xe7\xc2\x3a\x23\x44\x9a\x0a\xa8\xa1\x93\xcc\x39\x56\xca\x81\x4f\x32\xf2\xec\x62\xe3\x29\x8d\xa2\x05\xef\x07\x3f\x3b\x77\xef\x12\xda\xac\x28\x35\x13\x8a\xf0\xa4\xb9\x46\x37\x2f\x7e\xdd\xbe\x7f\x39\x97\x39\x55\x33\x0d\x50\x74\xe0\xe1\xef\xad\x09\x50\x6e\x40\x85\xa2\x84\x75\x95\xb2\xad\x20\x45\x60\xa9\xee\xbd\xa0\xa7\x38\x4c\xc8\xd7\xaa\xb7\x3a\x58\x7e\x37\x6c\x97\x34\x57\x7e\x4f\x20\xc5\x2f\xb3\xe7\x86\x13\x7b\x39\x61\x60\x12\xda\xe4\x41\x41\xda\x39\x92\xb6\xb1\x30\x4d\x55\xb5\x92\xe5\xc6\xbc\x7d\xe1\x0a\x93\xc5\x9d\x6b\x57\x42\x01\xe4\x79\x65\xe6\x8b\x19\x0f\xc3\x34\x43\x17\xf1\xb5\x30\x56\xcb\x28\xcf\x78\xe1\xd2\x69\xd6\x4f\xfa\x86\x82\xb4\xa0\xe7\x56\x96\xc1\xe2\xe5\xbe\x70\x50\xc2\x81\xe4\x39\x60\xa4\xaf\xea\x12\xfb\x52\x96\x07\x23\x35\x96\xdf\x29\x7f\x7f\xa0\x61\xc6\xcd\xa0\x43\x9a\x6c\x57\x12\x81\x3b\xaf\x28\x82\x8a\x5d\xa8\x8b\x34\x44\xd4\x91\x7e\x15\x24\x95\xf1\x0a\x6a\xd9\x32\x10\xf4\x17\xbd\x56\xeb\x1a\xd3\xe8\x53\xfd\xea\x07\xad\xcd\x6f\xfc\xa3\x98\x71\xdc\x42\x6f\x84\xe0\x9f\x4d\x81\x82\x90\x99\x93\x6a\xcc\xab\x16\x1a\x58\x54\x73\x0a\xbd\xf9\x29\xef\xe4\x88\x61\x61\x42\xa7\xbd\x6c\xd4\x6d\xff\x9f\x5c\xf2\x04\x5f\x0a\x05\x1c\xba\xa7\x34\xb3\x5f\x51\x0e\x81\xa8\x68\x80\x0d\x73\xb6\x6a\xab\x6f\x33\x19\xa6\x5c\xeb\x63\x5b\xae\xa6\xfc\xa9\x38\xe9\xfa\x81\x74\x66\x40\x61\xfa\x4f\x31\xf6\x90\xbf\x32\xf2\xc5\xc6\x65\xbf\x72\xcc\xa0\x8c\xa4\x58\xcd\x3c\x31\xe4\xc6\x9d\x8c\xcd\x1f\xef\x37\x97\x2e\xd2\xb5\xb5\xbd\xf2\x30\x50\xb2\x4b\xaa\x4e\x2a\xa7\x06\xd2\x5f\x96\xc0\x61\x46\x39\xa3\xd2\xf2\x41\x8a\x58\x47\x14\x95\x3f\x1b\x13\x58\x35\x95\x7d\x8a\x91\x1a\x7b\x61\x69\x41\xaa\x2f\x2b\x3a\x85\xab\x4b\x6f\x66\xb8\xa2\x8c\x24\x2e\xf4\x3c\x96\xf5\xdb\x5a\xb1\x4e\x49\x9d\x4c\xf5\x4c\x27\xc5\x68\xd1\x60\x53\xa9\x6a\x17\xec\xd9\x9a\x06\x06\x31\x34\x6f\x76\x16\xfd\x3e\xf0\x8d\x82\xdc\xac\x3c\xff\x6a\x82\x90\xed\x5c\xbd\xeb\x7c\xfd\x01\x89\xda\xbf\x6e\x5e\xf6\x03\xa7\xda\xb8\x64\x3a\x6b\xac\xad\xfb\x75\x04\xfb\x14\x59\x87\xc8\xb7\x6b\x98\xbc\x39\xa0\x71\x20\x0f\x0c\x95\xae\xf6\xc6\x24\xa4\x08\xda\x47\x19\x65\x6b\xaa\x6e\x5a\xbc\x7a\xb3\x62\x14\xb1\x8e\x51\xc9\x5f\x4d\x57\xa9\x6a\xaa\xc9\x8e\x20\x18\xe1\x3f\x56\xca\x63\x55\xb6\x0b\x6a\x36\x1b\xe5\xe8\x91\xf9\xe2\x5c\x7b\xf9\x7e\xeb\xfa\x4f\xc0\xf3\xc2\x35\xc6\xd8\xf6\xf5\xe5\x7d\xce\xdc\x26\xc7\x45\x23\xe7\x2c\xdc\x6a\xdf\x7f\xe4\x2c\x7e\xd8\xba\x7e\x17\xd2\xb2\x2e\xfc\xe0\x5c\xb9\xb1\x7d\xfb\x5c\xfb\xf9\x87\xf1\xd8\x32\xf5\x84\x15\xe8\x8a\xe8\xed\xdb\xbf\x71\x7f\x7a\x9e\xfd\xc9\x16\x69\xf3\x93\x15\x9e\x48\x0d\x49\xcf\x42\x91\x77\x66\x7a\xe4\xc0\x34\xa3\x81\x51\xfe\x5f\x70\xac\xfd\x9d\x46\x29\x7f\xfb\x70\xcb\xd3\x6d\x34\xd0\x62\x62\x8b\x71\x36\x71\xde\x7d\x37\x26\x13\xf7\x17\xe7\x9a\x4b\x77\x1b\x1b\x0f\x3c\x24\x6c\x04\x18\xe1\xad\x8d\x73\xce\xfc\x4f\x6c\x28\x5c\xf8\x8d\x8d\x27\x6c\x50\xd8\x94\x6c\x6c\x9d\x77\x96\xdf\x27\xf6\x3c\x04\x19\xd9\x1b\x31\xd9\xa5\xdf\xb4\x67\xbb\xd8\x9c\x30\x8c\xb2\xa6\xc6\xe4\x11\xef\x6d\xca\x3a\x1f\x4a\x1b\xae\xbd\xef\xac\x5e\x27\xd3\xf3\xce\x90\xe6\xae\x0d\xcb\x36\xd9\xfe\x16\x53\x49\x36\x92\xc4\xc7\xb7\x5a\xdf\x7f\xd5\x58\xfb\x71\x67\xe8\xa3\xa2\xbf\xbd\xf3\xc1\xfd\x3c\x69\x5e\x44\x91\xdd\xbc\xb1\xca\x28\x87\x69\xb0\x76\x85\xcd\x81\x38\x88\xa9\xd9\x39\x34\x30\x74\x64\xf0\x60\x8c\xce\x03\xd2\xc4\xcb\xc0\x1d\x1c\x18\x3f\x3e\x3a\xa8\x1c\x3a\x32\x70\x38\x3a\x72\x29\xe2\xab\xf4\x58\x30\x46\x4e\x99\xd4\xec\xe2\x74\x40\x52\xb6\xd2\xd9\x7e\x9b\x97\x3e\x66\x77\x77\xaf\x15\x71\x9b\x97\x70\xdc\x4d\x1c\x19\x5c\xac\x94\xb7\x0b\xc1\xd6\xd2\x54\x69\x33\xec\x8c\x4b\x4b\x54\x73\xf1\x1a\xeb\xaf\xc6\xfa\x07\x20\xb3\x07\x3a\x0b\x8f\xf7\x1c\xc9\x32\xcc\xa9\x02\xf9\xe3\x81\xf8\x62\x1a\xe4\x05\x33\x6c\x4e\x8d\xb2\x9f\xe3\x06\x0f\xa5\xe6\xd9\x05\xd2\x8d\x35\xd5\xd7\xbe\xfa\x84\x71\x40\x06\x12\xb2\xf9\xb7\xee\x9c\x6b\x7f\xfd\x51\xfb\xe2\x8f\x71\xf0\x73\x71\x00\x08\xe1\x51\xac\xe3\x89\x6c\xea\xf8\xfe\x9d\xea\x79\x8a\xbc\xee\x4f\xa1\x44\x10\x68\x29\x4d\x0d\x1a\x9b\x42\x66\x02\xda\x8d\xe4\xe7\xc2\xd2\xb7\xed\xf7\xb7\xf8\x5c\x40\x5b\x54\xef\x5c\x88\xc1\xb0\x23\xb3\x81\xac\xde\xfd\xa2\xb6\x4a\x62\x82\x9b\x2b\x91\x95\xfe\x9d\xb2\x51\x72\x8a\xd9\x31\xc7\xab\x97\xa3\x78\x3d\xc9\x15\x49\x90\xae\xfd\x94\x1b\xa9\x9b\xa0\xd3\xf6\x79\x22\x75\x4c\x17\xac\xf3\x83\x70\x48\x12\xcf\x83\x50\x57\x44\xee\x83\x1c\xc9\x3c\x82\x9a\x0a\xf5\x6b\xd5\x19\xdd\x34\xaa\x78\x83\x75\xfd\xed\x62\x14\x9d\x39\x42\x96\xe0\x86\x1b\x85\x76\xc9\x22\xd4\xc1\x4b\xe9\x0e\x0c\xcc\x15\x98\x72\x6c\x29\xc3\xc1\xe6\x5c\xf3\xfa\xb3\xe6\xd5\x85\xe6\x67\xef\xcb\x0f\x26\xf7\xd2\x06\xdb\x26\xfd\x3c\x54\x56\x21\x5f\x1b\xcf\x4e\x54\x8a\x16\xa4\x44\x9a\x66\xa7\x87\x5c\xcc\x65\xc8\xe9\x6d\x29\x4a\x4d\xb4\xd5\xaa\xf7\x83\xf4\xb0\xc1\x9e\x0b\xae\xa6\xa4\x31\xc1\x64\x02\xe5\xd9\x3e\x36\x0d\x4f\xb3\xdb\x36\x70\x82\x0e\xf1\xf0\x95\xf6\xb6\x8e\x71\x3e\x36\x4f\x75\x50\x53\xd9\x54\x61\x7c\xc2\xcb\x5a\xbc\x69\x7b\x87\xb0\xa4\xe7\xd2\x80\x3a\x13\x25\x4a\x67\xfd\x52\x89\x12\x7c\xd4\x4c\x03\x73\x30\x80\x8b\x21\x84\x59\x99\x15\xa4\x37\x3a\xcf\x85\x24\x14\x19\x2a\x41\x4d\x70\x46\xb7\xa7\x41\xc7\xe3\x07\x1b\xa3\x69\xbd\xb2\x3d\x77\xa7\xfd\xfc\x42\xeb\xfe\x72\x7b\xf9\x81\xb3\xb9\xee\x2c\xfc\x22\x9d\x90\x9b\x28\xa9\xe8\x53\xa6\x2a\x4e\x0a\xe1\x6e\x3f\x3f\xdb\xfa\x7a\x43\x1a\x37\x9b\xcd\xb4\x21\x51\xe5\x66\x97\x00\xea\xed\xd8\x8d\x89\x72\xb0\x20\x0d\x60\x14\x62\x9b\x94\x6c\x0e\x96\xc3\x83\xe3\xe3\x43\xc7\x0e\x2b\x63\xe3\x03\xa3\xe3\x71\x17\xa8\xf9\x87\xdb\xb7\xa4\x10\x1c\x19\x7e\x7d\xe0\x88\x32\x3c\x32\x3e\x34\x7c\x2c\x26\xff\x82\x33\xff\xc8\xf9\x61\x6e\x7b\xee\xe2\xf6\xfd\xa7\x12\xf9\x17\x0e\x73\x7f\x89\xe1\x01\x2f\x11\x6c\x9c\xcf\x7c\xd2\xe7\xe9\xd9\x73\xbd\x6d\xa0\x2a\x01\x39\xd5\xf3\x6c\x3f\xec\x90\x3b\xad\xd9\x4c\xde\x2a\x6a\xb1\xa9\xd2\x37\xae\xf2\x3c\xd5\x6b\xef\x39\x4b\xeb\x24\x06\x51\xb4\x20\x3d\xcf\x48\x57\xad\x66\xed\x7a\x96\x77\x62\xc2\xcb\xf9\xda\x8d\x38\xd4\x6b\x4a\xa1\xbc\xa2\x34\x91\x49\xdf\x95\x8d\x73\xdf\x1d\xba\xbf\x3f\xc6\xcf\x91\x88\x8d\xfc\x5a\x18\x2f\xbf\xe0\xc6\x14\x75\x4c\xd7\xbb\x99\xe1\x09\x53\xae\xf9\x62\x35\xbc\x5c\x5e\x74\x2b\x7b\x51\xf5\x02\xba\x66\x52\xe8\x44\x8a\x99\x47\x01\xda\xc1\xa7\xd6\x17\x4e\x22\x59\x3f\xc0\xeb\x2c\xd4\x37\xec\x44\x2f\xc5\xa5\x90\xd9\xa5\x7e\x22\xcd\x08\xdd\xbb\x32\xf6\x13\xc8\x34\x7f\x9b\x93\x89\x4c\xbe\xb9\x74\x12\x38\x1b\x66\x0f\x04\x0b\x63\x19\x6f\x2b\xbd\xfc\xc2\x18\x23\xe1\x39\xd1\x9d\x67\x4a\xfa\x7c\x81\x67\xe0\x29\x29\xe9\xb6\x74\xb1\x5e\xbf\xc2\x86\x86\x41\xbc\x64\x6f\x64\x0e\xee\x3c\xc6\xf5\x37\x57\xd0\x23\x65\x85\x6d\xbe\xc2\xf3\x2d\xe8\xe1\xeb\x14\xeb\xc5\xf5\x00\x17\x0c\x45\x4a\x9a\xe4\x21\x45\x45\x05\x10\xc7\x1c\x52\x09\xdb\x50\x56\xf9\x8a\x3c\xa2\xad\x4e\x31\x30\xf0\x86\xb6\x74\xdb\x30\x75\x76\xd0\x30\xe8\xd1\x5a\x2f\x19\x10\xd9\xe8\xf3\x00\xcf\x2a\xd1\xe6\xeb\xf8\x96\x40\x52\xb8\x31\x3a\xd5\x85\x28\xb4\x3c\x01\xee\x71\x32\xc2\xa8\x24\x34\xe1\x4e\x44\x3c\x62\xb1\xf2\x22\x4d\x85\xe9\xe1\x69\x5c\xbb\x81\x2a\xf1\x2b\x41\xb0\xb5\x38\x55\x75\x57\xb6\xc2\x4a\x79\xc1\x63\x52\xe1\x35\x04\xe8\xe1\x61\x78\x16\xb2\x0b\x46\x51\x9c\x1d\xb2\x30\x37\x41\x2c\x96\xb8\xc0\x90\x1e\x80\x04\x6d\xbc\xcc\x0c\x85\xd8\x8b\xcc\xcb\x29\x09\x10\xa2\x8b\xbc\x0b\x36\x8c\x5b\xa7\xc0\xcc\xeb\xf8\x0b\x4e\xa3\x6a\x30\xa3\x0e\x97\x61\xbc\xbf\x05\xc5\xcd\x08\xc6\x76\x08\xf9\xce\x75\x49\x6f\x5a\x84\xdf\x42\x5f\xed\x08\x55\xbb\xdd\x89\x2f\xa0\x87\x5e\x00\xfb\x3b\xc7\xe5\x0e\x33\xb3\x3b\x13\xfc\x05\x4f\xd8\x17\xbc\xbc\x7f\xab\xeb\x78\x27\x17\xec\x2e\xae\x4c\x4f\x7d\x6f\x89\x5e\xb6\xb2\x80\x92\x96\x1f\x68\x91\x8b\xde\xa8\x24\xa1\x48\x53\x89\xe9\x83\x40\xaa\xe7\x66\xb0\x34\xc9\xb5\xa4\xfb\x3d\x5f\x64\xbb\xc3\xf3\x8e\xf1\x97\x0b\x2f\xbd\x06\xa8\x1d\xac\xfa\x17\x6a\xbf\x8a\xaa\x29\x77\x7e\x7b\xfe\x8a\x50\x09\x60\xaf\x10\x60\x4e\x1d\xb3\x73\xfd\x10\xcb\xf8\x8b\x60\x39\xa4\x38\x61\x96\x9b\xbf\x34\xbc\x2c\x94\xcb\x69\x00\xd2\x03\x90\xa3\xcd\x0a\x2b\xbc\x18\x3b\x6b\x12\xcd\x8f\x34\x17\x52\xa8\x80\xbb\xf0\xb1\xf9\xe2\x07\x90\xf9\x00\xb0\x21\x3c\x09\x42\x21\xc6\xe0\x17\x44\xd6\x04\x56\x8c\x27\xa0\xe4\x67\xad\xd9\x4d\xd4\x72\xfd\x61\xed\x78\x1f\x44\x6a\x4c\x69\xc7\xf4\xef\x1d\x5d\xd8\x63\x36\x11\xa2\x3d\x1b\xff\xe4\xaf\x1a\x5e\x66\x74\x5f\x94\x81\x44\xa4\x8e\x6f\xf8\x84\x0f\x65\xde\x87\x7b\x5f\x84\xe5\x83\xac\x22\x08\x72\x87\x98\xce\x45\xa1\x9f\xc4\x9e\x9f\x0f\xb9\xf1\xc3\xf4\xd0\x98\xdf\x00\x4b\xec\x14\xcb\xf5\x12\xca\x00\xa0\xcc\xe3\x8e\x8f\xca\x84\x51\x9a\x8d\xf6\xc6\xb9\x3c\xef\x5c\xfb\x0e\x43\x05\x81\xd6\xf6\xca\x63\x67\xf1\x21\xd1\x05\xb0\x9b\x37\x56\x9b\x57\x64\x72\x2f\x22\x61\x15\xcd\x9e\x36\x4a\xca\x4b\x87\x07\xc7\xfb\x46\x86\xc7\xd8\x7f\x8e\x8f\xf7\x1d\x1c\x3c\x32\x38\x3e\xd8\xa7\xd9\xc5\x68\xe7\x34\xc1\xd6\xe9\xa9\x32\x2c\x1b\x96\x5d\x34\xe2\x9e\x0f\x84\x61\xf3\x62\x53\x95\xd9\x82\x55\x9f\x20\x9f\x8e\xa4\x6a\x53\x50\xb7\x76\x73\x4e\x79\x89\x4a\x4e\xfd\xba\x79\x27\xaa\x75\x6a\x62\x86\x8e\x8d\x8d\x0f\x1c\x39\x32\x78\x50\x19\x39\x72\xfc\xf0\xd0\x31\xe5\xc0\xf0\xd1\xa3\x03\xc7\x0e\x46\x47\xb6\x44\x7e\x97\xf6\xc6\x36\x34\x55\x85\xc0\xd8\x40\x66\x8c\x68\xbe\x9f\x6f\xb5\x6e\x3c\xec\x4d\x87\x21\xc3\x2a\x9f\xf5\x5e\x12\x07\x9e\x16\xc5\x5d\x06\x09\x65\xe2\x28\x1f\x35\x2d\x03\x98\x76\x94\x17\xc3\x79\xf0\xb3\x1c\x29\x06\x5b\xfe\x45\x5b\x39\x6e\xa9\x53\xd1\xdc\x47\x7e\x27\x8b\x29\xd6\x95\x64\xed\x4a\xf3\xf1\x97\xad\xfb\xcb\xe0\x0a\xb0\xf5\x9c\xed\x36\x52\x92\x43\x37\x46\xaf\xae\x41\x59\xaf\x6a\xca\x64\x59\x9d\xb2\xd8\xcc\x7f\xbb\xa8\xd5\x6c\xa5\x30\xf9\x32\xa4\xa0\x06\x8f\x52\x88\x2f\x83\x18\x49\xad\xa4\x9c\x99\x06\x0f\x58\xaa\x3a\xa7\x54\xea\x65\x5b\xaf\x95\x35\xf2\x5b\x23\xfb\x5c\x70\xee\xc4\x56\xca\x23\x8e\x88\x9d\xe6\xcd\xa7\xcd\x9f\x6e\xfc\xe7\x1c\xdb\x68\xbf\x61\x7f\x86\xe4\x58\xc1\x27\xce\x83\x3b\x5e\x65\x3d\x0a\xbf\x6c\xde\xfa\x85\x62\xd3\xda\xef\x6f\x11\x28\xca\x80\xd7\xbe\x7f\xb9\x79\xef\x82\xf3\xfc\xd6\xaf\x9b\x0b\xdb\xb7\x1f\x34\xd6\xcf\x17\x26\xe5\x8a\xbf\xf5\x74\xda\x31\xa3\x13\x7f\xce\x23\xcc\x4b\x50\x0b\x21\xed\x54\x49\x03\x41\x9e\xba\x51\x5f\xcc\xbb\x8b\x44\x8c\xba\x64\x08\x79\x50\xc7\x01\x5b\xb2\xb4\x85\xb7\x97\xa0\xcc\x8d\x27\x61\x17\xfe\xfd\x9d\x34\x12\x10\xca\x00\x4e\xe2\x58\x7e\x8f\x2a\xd9\xf0\x7a\x36\x27\xd4\xb2\x5e\xe2\xad\xc8\x3f\x1c\xab\x0b\xee\x3f\x59\x7d\x13\xea\x61\xbc\x43\xa5\x3b\x4e\xee\xa9\x99\x86\x6d\x14\x8d\xf2\x49\x86\xee\xe4\x1e\xbb\x58\x3b\xb9\xa7\xcf\x7d\x57\xc2\x0c\x2c\xc8\x26\xbd\x7e\xf5\x95\xfe\xd7\x7e\xff\xfb\xfe\x57\xfb\x5f\xfd\xef\xbe\xcf\x6a\x86\x69\x5b\xf4\xc1\xef\x7e\xf7\xca\x3f\x42\xc1\x10\xc6\xce\xc9\xea\x5b\x29\x3a\xec\xaf\x9b\x2d\x89\x71\xa4\x00\x58\xf4\xcf\x76\xe7\x46\xf4\xd1\xb5\xf8\x1e\x93\x8a\xd8\x56\xc2\xfe\x2b\x1d\xaa\x32\x44\xd5\x10\xf1\x80\xe2\x99\xdf\x4a\xda\x24\xdb\x49\x31\x40\xde\x4d\x97\xe7\x12\x13\x49\x0b\x2f\xaa\x58\xe0\x20\x46\x06\xc6\xdf\xd8\x37\x3e\xbc\x8f\xce\xf2\x02\x96\x56\x51\x0a\x8a\x2c\xb2\xd4\x27\x3f\xc1\xf7\x65\xb1\x7b\x07\x32\x92\xc3\x2f\x4a\xec\x17\x27\x39\x8b\x35\x16\xeb\xe0\x6a\x31\xee\x0c\xee\xfe\x40\x18\xb6\x72\x54\xab\x18\x66\xb4\x6c\x1d\xf9\x9d\x38\xa6\x4a\xdd\xb2\x79\xac\xb6\x51\x2d\x54\xb5\x29\x86\x64\x46\x73\x13\x93\x24\x53\x90\xb6\xbd\x00\x65\x33\xb8\xe8\x61\x53\x08\xcd\x9f\x15\x49\x13\x84\x35\xdc\x58\xf0\x94\x5f\xce\xed\x47\x00\x43\xba\x4e\x8e\x4b\xc8\x28\x8f\xb3\x84\x7f\x13\x82\x6a\x11\x3b\x85\x4d\x86\xb5\x10\x46\x3d\x36\x76\x44\x39\xa0\x99\x14\x37\xf3\x0e\x2f\x56\x8b\x61\x91\xe3\x7a\xed\xa8\x66\xc1\xf1\x13\x17\x10\xb9\xfc\x7c\xfb\xd6\xb2\xdb\x0e\x8b\x75\x02\x8d\x0c\x6a\x7b\xe5\x6c\xe3\xe9\x57\x31\x90\x84\x49\xa5\xb4\x2a\x62\xe3\xe5\x0e\x93\xd7\x75\xce\xe6\x7b\xcd\xc7\x0f\x33\x8f\x58\xc7\x0e\xb3\x3f\xda\x93\xab\x33\x5e\xeb\xdf\x35\x36\xb6\xb6\xbf\xbd\x0c\x9d\xb2\xf1\xa0\x75\xf1\xf2\x7e\x19\xe7\x2d\x17\x39\xd5\xa2\xaa\xf3\x90\x20\x76\x30\xcd\xe8\x25\x5e\x44\xa6\x50\x44\x71\xb6\x5f\x19\x29\x6b\x2a\xeb\x24\xfe\x92\xad\x1d\xdf\x94\x37\x26\xfe\x0c\x07\x07\x66\x63\x44\x36\xa0\x3c\x8b\x8e\x25\x71\xaa\x36\xbb\xb4\x61\x48\x46\x6f\x83\xb8\x7d\xf0\xb7\x42\x98\x70\x5f\x76\xf2\x2b\x82\x56\x0f\xfc\xd9\x48\x3d\xb5\x97\x9d\x3d\xee\x79\x03\x9f\x78\xe5\x71\x31\x2c\x2e\xb1\x27\xb2\x82\x15\xe7\x03\x8a\xb0\xa3\x36\x19\xe5\x1d\xa8\xc9\xce\xb5\xdf\xc2\xf9\x98\xdd\x59\xcb\xab\xb3\xcf\x5f\xd9\xfe\xe2\x33\x61\xa0\x3b\xc0\x40\x5e\x34\x67\x22\xd3\x73\xa7\x2d\x1a\xf5\xaa\x8d\x28\xdc\x83\xea\x00\x3c\x01\x34\x43\x81\x6f\x7c\xe7\x17\x3a\x4b\xa6\x39\xfb\x3a\xdb\x15\x3a\xd1\x32\x69\x2d\x1c\x93\xf7\xda\x79\x3e\xbf\x7d\x7f\xa3\xf9\xc9\x0a\xbb\x5c\x36\x6f\xfc\xcc\x9e\xec\x0c\x8f\xd6\xee\x31\x69\xf5\x72\xb9\x7d\x61\xd1\x63\x14\x84\xd8\x3c\x79\xad\xa0\x9c\xa3\x94\xf5\x8a\x4e\x2c\x93\xe0\x73\x04\xfe\x4e\x35\x07\x73\x80\x28\x4d\x7d\xa0\xe3\x02\xa3\x23\x31\x2e\xf9\x02\xdf\x41\x9e\xca\x58\x48\x68\x9a\xaa\x08\x75\xad\x8d\x1c\xb9\x4b\x87\x46\x98\x4f\xbc\x72\x7a\xe7\x44\x22\xbd\x51\x9f\x0b\xe3\x75\x15\x55\xfd\x4a\x27\x13\x18\x7b\x18\x9d\x9c\xcf\x5b\xa7\x60\x09\x90\x2a\x66\xe4\xa1\x0e\x59\x11\xe9\x17\x58\x67\xbf\x38\x3f\xef\x3c\xf6\x6f\xf2\xf1\x60\x72\x21\x53\x6a\x2b\xd8\x85\x1d\x20\x02\x45\x86\x63\x3f\xac\x77\xd3\x41\x14\x26\x1e\xd2\x27\x62\x30\xb9\x6a\xaa\x15\xc4\x35\x4e\x4f\xc4\xe6\x43\xfb\x97\x79\x48\x83\x8e\xba\x8d\xf6\xf2\x33\x67\xf9\x4e\x32\x2c\x61\x5a\xeb\xb1\x5a\x71\xa2\x85\x14\xb1\x19\x90\x50\xf2\x41\x4c\xee\xf9\x4e\x77\x5e\xb2\xbd\xe4\xd0\x8e\x69\xd8\x4e\xa8\xe5\xb4\xe9\x98\x3f\xfb\xbc\xf9\xd3\x8d\x1e\x60\xce\xdc\xe6\xfe\xd4\xa9\x75\x62\x15\x28\x28\x87\xeb\x60\xb1\x40\x16\x12\x13\xe0\x44\x0d\x22\xc0\xc9\x2f\x7b\xce\x11\x95\xed\xdd\xc3\x8c\xe1\xf8\x0c\x09\x51\x9f\xa5\xc7\x03\xd9\xf1\x40\x3f\xe5\x86\xb0\x83\x9e\xca\x46\x2b\x29\x59\x9e\xa3\x55\x71\x0b\xb7\x9c\x0b\xeb\xad\x4f\x97\x9b\xf7\x2e\xf0\x20\x3b\x72\xab\xc1\xa8\x7a\xbf\xaa\x3f\x13\x59\x5e\x9d\x1f\x37\x6e\x07\x92\xc9\xc2\x8b\x12\xdc\xcc\xfc\xf1\x3b\xd1\x9d\x94\x09\x98\x38\xcd\x9d\x28\xf7\x84\xce\xa3\xae\x0a\xfb\x5c\x1c\x69\x6c\x2d\x5d\x3f\x3a\xb2\x85\x67\x41\xc5\x03\x6d\xf8\x64\x29\x92\xd1\x9d\xfb\x29\xf0\x58\x16\xf7\x61\xaa\xea\xc4\xf9\x01\x16\xe7\xa5\x2b\x9a\x25\x99\xc6\xc8\x06\x32\xb8\x83\x11\x8e\x79\xae\x3f\x7f\x08\x63\x26\x1a\x3d\x57\x2c\x15\x5d\x35\x92\xc8\xc1\xc9\xc5\x08\xe1\x73\xcd\x0d\x9f\xcd\x44\x02\xb9\x07\xbd\xa4\x72\xef\x25\x1d\x12\x64\xd6\x4c\x4a\xf5\x4c\xe6\x4a\xc5\x9a\xb5\x6c\xad\xd2\xc7\xbd\x30\x50\xcd\x52\x85\xf2\x24\xb0\x2f\x82\x87\x11\x7f\x8d\x85\x7b\xa1\x3e\xaf\x59\xaf\xe2\x8e\x17\xe3\x1c\xe0\x5b\x32\x2e\x05\xf8\x2f\xbb\xba\x6d\x7f\x71\xce\x99\x5f\x80\x3a\x80\xdf\x7d\xe0\x3c\xdc\xf2\xa2\xd4\x5b\x3f\x6d\xb4\x36\xee\xfe\xba\x79\x59\xe1\x9e\x1d\x8b\x2b\x8d\x8d\x87\xed\xe7\xd7\x20\x5d\xb0\x6f\x43\x84\x06\x1f\x5f\x69\x6c\x2d\x51\x03\x19\x1f\x03\xaf\x77\xd0\xd9\x84\xd6\x8d\x5b\x8e\x96\x8f\x99\x31\x29\xb9\x0c\x33\x80\x14\xa7\xdf\xf3\x03\xe2\xe5\x63\x85\x27\x58\x73\x69\xbd\xf9\xf9\x39\x69\x12\x3a\x45\xee\x26\x27\x35\xcc\x10\xeb\x12\xe3\xf3\xec\x4d\x35\x4b\xbc\x9a\x72\xb4\xf6\xb2\x53\x44\x1b\x9f\x9b\xe5\x8e\xbb\x5a\x26\x0c\x5f\xda\xc6\xb2\x34\xa1\x14\x29\x48\x4a\x78\x1b\x31\x0a\x7c\xf9\x59\x7c\x3b\x64\xdc\x7c\x49\xdb\x4c\x8c\x0e\x2f\x3c\x5d\xed\xd9\xbe\x13\x9c\x4f\xfd\x3b\x72\x57\xf0\xb8\x2c\x31\xdd\xa1\x98\x9c\x4b\x9e\x73\xba\xfb\x2d\xa6\x5e\xac\x57\xab\x5d\xb5\x0e\x12\x86\x31\x6f\x1c\xf9\x70\x48\xa5\xe6\x91\x0a\x9e\xf4\x24\x23\x3b\xa9\x00\x8a\xd2\x1e\x08\xd9\xb1\xc8\xf1\x31\x91\xbe\x84\x46\x92\x34\x74\xc2\x6e\x52\xe2\x0f\x6b\x20\x87\x9b\xc7\xd1\xa4\xc3\xdb\xf3\xb1\x10\x4e\x18\x42\x6e\xd3\x66\xf2\x3c\x19\xb2\xad\x38\x03\x78\xba\x46\xe9\x69\x30\x98\x7c\x02\xf3\xa9\x53\x85\x02\x32\x7c\x9a\x98\xc6\x88\xaa\xdd\xc4\xdc\x53\xb6\xaf\x9f\x65\x57\xff\xf6\xca\xc3\x4e\x73\xf1\xeb\xec\x11\x83\x97\x37\xd6\x93\x72\x47\xb4\x6e\x6f\x38\x5b\x37\xa4\xb8\xe4\x28\x8c\x18\xd7\x3e\xc2\xb1\x3d\x37\xc7\xce\x47\x39\x1c\x53\x6c\x34\x34\xb8\x4b\x5b\xd1\xf9\xec\xa2\x3e\x13\xc2\x83\x19\x38\xea\x76\xdc\x3c\xa1\xec\x20\xc4\x8d\xec\xd4\x98\x9a\x32\xc1\xf4\xcf\x76\x17\xad\x5a\xaa\x19\x3a\x18\x1d\x74\x2a\x92\x86\x86\x36\x32\x3e\xc6\xbb\x6e\x92\x06\x93\xe7\x44\x62\x42\x10\x96\x1b\x29\x77\x40\x3b\x4b\xab\xce\x67\x73\x94\x9c\x46\x8a\x48\xe3\x34\x3a\x67\xd7\x50\x7f\x33\xe9\x55\x87\xdc\xdb\x9b\x68\x23\x68\x16\x8c\x19\xa1\xec\x20\x53\xd3\x7f\x14\xb2\x80\xaa\xac\x27\x6b\xb3\x6e\xbe\x47\x2e\xff\x14\x8d\x12\xb7\xb8\x1b\x55\xad\xbb\x86\x86\x5a\x35\xd8\xa2\x85\x12\x33\xc7\xab\xa8\x2c\x37\x66\xd8\x8c\xd2\x4b\x25\xad\xda\x47\xb7\x4e\x06\xb0\xe0\x41\x22\x97\x9d\x33\x3a\xa6\x34\xa1\xe4\x92\x58\xdb\xc6\x57\x13\x2a\xb2\x3b\x7e\x83\x14\x8a\xf6\x2e\x2c\xfd\x82\x67\x1b\xef\x49\xd3\xd3\x91\xfb\x20\xef\x31\xb2\x18\xbd\xe5\x35\xb6\x9e\xb7\x9f\xdf\x6e\xac\x7d\xdb\xba\xfe\x03\xed\x18\xcd\xc5\x6b\x8d\x67\x9f\x76\x3c\x54\x50\x5e\x72\x56\x9e\xf2\xfb\xd3\xf5\xbb\xcd\x1b\x0b\x52\xb4\xfb\xbc\x5b\x79\x3a\x66\x46\x7c\x1d\x8f\xd9\xc9\x7a\xb9\x3c\x0b\x89\x62\x63\x86\x4d\xac\xb9\x24\x5d\xba\xe5\xcb\x6d\xdb\xa5\x06\x29\xe9\xe0\x2d\xc7\xd6\x49\x9f\x52\x0b\xba\x20\x68\x3a\xcc\x0d\xf4\xfa\x64\xd3\x09\xdd\xe0\xb1\x26\x68\x42\x35\xe5\xdd\x44\x2d\xd0\x1f\x35\x7e\xff\x34\x5c\xe9\x1d\x2b\x85\x4d\xc3\xad\x3f\xa6\x00\x53\xf3\x93\x7b\xce\xea\xb9\xe6\xbd\xa7\xdc\xa9\x7f\x61\xb5\xf9\xf8\x41\x46\x25\xe4\x51\xf5\x6d\x2c\x8b\x84\x6a\x7e\x2f\xb9\x9e\x37\xd1\x71\x5d\xd5\x6b\x7d\x58\x55\x47\xaf\xd6\xe3\x8e\x76\x9e\x70\x93\x26\x33\x66\xbb\xc6\x19\x3e\xb7\x7d\xe3\x79\xeb\xf1\x45\xe7\x19\xe8\xff\xb7\x6f\xfd\x0c\x1e\xd1\x1b\x0f\x21\x66\xe5\xa3\xbb\x50\x79\xe4\xca\x8d\xc6\x96\x4c\xd5\xa8\x5e\xca\x3b\x02\x09\x17\x75\x53\x91\xdd\xa9\xd5\x7a\xf1\x63\xe7\xf2\xfc\x4e\xd3\xac\x57\xea\x15\x45\xad\xa0\x3d\x9e\x6d\x8e\xdc\x34\x44\x93\xcb\xdb\x0d\x3b\xc6\x7d\xf6\x62\x5a\x9d\x71\x63\x3e\x5e\x7d\xe5\xb5\xdf\x1f\xed\x53\x5e\x3d\xcc\xfe\xf7\xca\xe1\x68\xc5\xce\x8e\xe1\x79\x51\x9c\xf6\x2b\x85\x57\xe1\x18\x65\x3b\x3d\x26\xcb\x64\x1f\xd7\xab\x68\x4f\x03\xcb\x28\xe2\x88\x3b\x8f\x5e\x20\x2d\xbf\xe5\x1e\x53\x5e\x3a\x48\x65\xc0\xf6\x77\xde\xed\xc0\xa4\xda\x29\xfa\xd2\x5e\x17\x5c\xc2\x71\xa3\x78\x89\x6d\x09\xec\x82\x6c\x54\x4b\xd6\xcb\xb8\x6b\x1c\x38\x32\x04\xbb\x2f\x6e\x25\x5d\xd7\x62\xda\xfe\xfa\x14\x94\x4b\xb8\x1b\xa3\x62\xc1\x99\xc0\x8d\xa2\x16\x3b\x06\x66\xb1\x45\x4c\x00\xdc\xd2\xa3\xe6\x8d\xd5\xd6\xd7\x1f\x81\xcd\x16\xb7\x45\x32\x85\x4a\xf0\xe1\x33\x23\xf3\x41\x7f\xed\x1f\xfe\x11\xfa\xd4\xed\xda\x18\x55\xaf\xcf\x60\xfc\xeb\xe6\x02\x05\x82\x41\x6b\xb6\xb5\x61\x73\xf8\xf7\xb0\x5c\x10\x0a\xf7\x1b\xe5\x76\xe8\x24\x6f\xd4\x84\xaf\xd3\x63\xc5\x7c\xeb\x5a\x88\x85\xc1\x13\x30\x03\x89\x13\x3a\x12\x66\x74\x27\xad\x9e\xf7\x4b\x64\x8d\x8d\xab\x54\x34\x8d\x1e\xb6\x97\xef\x3b\x0b\x1f\x51\xa6\x76\x76\xf6\x3a\x8b\x5f\xd1\x5b\x09\xda\xc1\x71\x3e\x92\x8a\xe0\x4b\x21\x98\x31\x49\xd1\xaf\x5d\x69\x7d\xbd\x2a\x73\x7b\x3c\x16\x17\xce\x78\x4c\x2e\x94\xf1\x98\x76\x46\x19\x51\x2d\xeb\x8c\x61\x96\xa2\xc5\x9d\x9b\xab\xa4\x43\x6c\xdd\x3b\x2b\x89\x23\x36\x14\xb3\xf7\x83\xf4\xb0\x0d\x65\x60\x64\xa8\x73\xc7\xb5\x34\xb6\x59\x1d\x67\x32\x23\x5c\xef\xd8\x2d\x58\xaf\x8e\xeb\x35\xb8\xfe\x71\x27\x01\xf6\x31\x7f\x00\x72\x1e\x29\x68\xd9\x94\x74\xdb\xc7\xdc\xc9\xa9\xd6\xe6\xe5\x0b\xce\xf2\x1d\x06\xa4\xb5\xb1\xd0\xfa\x6e\xe5\x3f\xe7\xde\x23\x27\x86\x2e\x6c\xcd\x85\x9b\x01\x64\xdb\x73\x17\x9b\x1f\x7c\x43\x6d\xc4\x77\x1b\x88\x03\x2b\xd2\xdd\x4c\x85\xa4\xf6\x8a\xf2\x47\xa3\x4e\xfe\x56\x25\x2a\x16\xe2\x2a\xf0\x60\x65\xb1\x5b\x18\xac\x32\x34\x9f\xf4\xa4\x5a\x71\xd7\xa1\x6b\x69\xa1\x54\xa0\x4c\x06\xb7\x21\x62\x8f\x2d\x63\xd6\x85\xbe\xa4\x3f\xde\x27\x3c\xda\x0f\x64\xe5\x40\x9e\x0d\xf6\x32\xba\xcb\x46\x90\x0c\xd5\x74\xc9\xd3\x81\x52\x3f\xd8\x7e\x65\x9c\xed\xa2\x26\xdb\x4c\xb1\xd0\x73\x08\xe2\x3e\x22\x4c\xab\xfa\xb9\xa4\x64\x2b\x65\xf2\x7d\x0e\xd4\xd8\xdb\x91\x1e\xe5\x4c\x03\x37\x9c\x6b\xdc\xc5\x5e\x78\xf7\x8e\x4f\xf3\xfd\x94\x13\xe7\x12\x81\x8a\xf2\x88\x54\x3b\x70\xaf\x29\x43\x2d\xf4\x59\xb6\x4b\x77\x8d\x4a\x77\x12\x15\xb9\x6e\xad\xe9\x11\x8b\xd1\xf5\xe8\x86\x9a\x3d\xc1\x45\x17\xbd\x2f\x64\x85\x27\xb2\x8d\x50\x74\x2a\x5c\x48\x93\xf6\x00\xac\xb7\x9b\xf1\xb6\xc7\x10\x76\x3c\x31\x12\xd0\x76\xee\x45\x4b\xdf\x12\x72\x39\x84\xc5\x69\xb5\x3a\xc5\x4e\xe5\x33\x1a\x06\x6f\x97\x62\x36\xe4\xd8\x8f\x45\x70\xba\x26\xb1\x78\x0e\xa3\x3f\x14\xc1\x15\x93\xbe\x5f\x78\x48\xfd\x8d\xbd\xe4\xf9\x72\x64\x51\xc0\xb4\x55\xd3\x8a\xd8\x04\xe3\x7a\x7b\x7a\x37\xdd\xc1\x03\xa7\x30\xfa\xed\xb1\x83\x07\xea\xc4\x3d\xff\xb4\x7d\x9f\xdd\x87\x37\x1a\x5b\x37\xa0\x36\xfd\xf5\xa7\xec\xb9\x1c\x91\xb0\xf8\x31\x01\x23\x1a\x72\xe9\x60\xd4\x4a\x7d\xa0\x7e\xc3\xd5\xc6\x43\xc0\x7b\x0e\xce\x40\xbb\x74\x3c\x50\xa1\xc0\x8f\x2e\x93\xaf\x06\x56\x8e\x75\x8f\xd0\x0e\x16\xf7\xc4\x0c\x7c\x2b\xcf\x9a\x97\xfa\x3d\x84\xb3\x43\x94\xa6\xa3\x83\x5b\x80\x0d\x76\xd0\x87\xb1\xd1\x03\xd2\xcf\x8e\xd7\x46\x9e\x9d\x9c\xb9\x10\x20\x3e\x57\x9a\xa3\xe7\x54\xca\xe5\x10\x42\x7d\x28\xd5\x32\x5a\x00\x22\x5b\xe4\x48\xa0\x85\x98\xa5\x9f\x3c\x3f\x98\x84\xcd\x32\xfc\x3b\x21\x4c\xdc\x6c\x1e\xac\x0f\x83\x4a\x8c\x09\x4d\x83\x8b\x79\xec\xb1\x2c\xd4\x5c\x86\xae\x6e\xcb\x79\x4a\x7a\x62\x9b\x89\xd0\x91\xd6\x53\x2f\xee\x53\x31\x7c\xc1\x34\x90\x89\x53\x20\xa1\x81\x0c\x6e\xa8\x10\x21\x54\x0b\x21\x7a\x55\xa4\x28\x69\x40\x2b\x87\x1c\x53\xb2\xd3\xfd\x4e\x68\x65\x0b\xb0\x2e\xe4\xc5\x11\x17\xbd\x84\xaa\x35\x84\x50\x95\x8d\xd5\x8e\xdb\x58\xfa\x6d\x49\xda\x41\xac\x83\x77\xd7\xd0\xe5\x7c\x46\xa7\x39\x9a\xfd\x9f\xe6\x4c\x75\xe8\xf9\x26\x22\x2a\xc5\x49\x48\x39\xd1\x0d\xd9\x14\x2d\x7d\xaa\xaa\xc5\xef\x36\x51\x9f\x4a\xe0\x4b\x3f\x95\x32\x31\xc7\x7d\xac\x24\x0f\x38\xa1\xe6\x32\x74\x75\xd5\x5f\x48\x49\x4e\x5c\x2b\x21\x2a\xd0\x45\xb9\x63\x57\x97\xe9\x25\x72\x27\xf6\x2c\xe8\xfe\x3a\x6c\x70\x37\x59\x7e\x26\x17\xfd\xc6\xa8\x43\x9b\xbf\x9b\xb7\x44\x8a\x34\x34\xee\xb3\xe5\xd1\x78\x7a\x31\x57\xd2\x6c\xa5\x4c\x3e\x40\x7a\xb5\xa3\x89\x38\x70\x08\x55\x7f\xc1\xe5\xce\xbe\x83\x8f\x62\x34\xdc\x77\x18\x29\xe4\x15\xc5\x56\x78\x7b\xe5\x89\x7f\x93\xea\x02\xd8\xfc\xec\xa1\xb4\xff\x14\x23\x5a\xdb\x4f\x26\x6d\x30\x91\xd8\x58\xba\xd6\xa8\x90\xe5\x24\x66\xce\xa5\x6a\x95\x9e\x0a\x2f\xed\x8e\x67\x1d\x88\xee\x1a\x37\x80\x59\x02\xcf\xf0\x3f\x47\x7b\x33\x61\x9d\x59\x19\x98\x54\xe7\x34\x12\x70\xcf\xfb\xf4\x90\x47\x0f\x2b\x03\x07\x8f\x0e\x45\x57\xcc\xa6\xdb\x44\x6b\xf9\x7e\xeb\xda\x79\xe7\xc3\x4f\x64\x71\x1c\x3f\x38\x34\x3e\x3c\x9a\x80\xc5\x59\x06\xcb\x8a\x24\x8a\xa3\x03\xc7\x06\x0e\x0f\x26\xa1\x20\x46\xe4\x50\x44\x0f\x80\xf4\x95\x6b\x38\xc6\xa3\x3b\x0b\x50\x1e\xfa\x41\x69\x38\x2c\xbf\x33\xb8\xcf\xa6\x19\x3d\x9f\x84\x01\x08\xd1\x16\xd0\x30\xbb\xda\x60\x2a\x5f\x9d\xd0\x19\xfe\x96\xce\x93\x1f\x5b\x1b\x8b\xce\xe3\x4f\x9c\x25\x19\x8f\xf2\x1e\x42\x82\xa9\x3d\x40\x61\xc3\x7d\x84\x3a\x5a\x6a\x01\xea\x1a\x6b\x57\x88\xb4\xe6\xc2\x4d\xaa\xfa\x4e\xa9\x77\xf2\xa7\x34\x26\x51\x6c\x34\x55\x72\x64\x44\xdb\x14\x09\x95\x8c\x4d\x71\x38\x4d\xac\x4e\xf8\x47\xe9\x71\x90\xf7\xa0\xe6\xa5\xa9\x29\x91\x2f\x81\xeb\x83\xea\x39\x7c\x45\x12\xd0\x78\xbe\xdc\xbc\xfe\xb4\x38\xe9\x77\x48\xa5\xc6\xfd\x10\xe8\x0f\x41\xcd\x4f\x56\x9c\x67\xe7\x7e\xdd\x5c\x68\xaf\x3c\xa4\xdf\xdb\x1b\x9f\xb4\x97\x1f\x34\xd6\xd6\x7f\xdd\xfa\x7c\x5f\x7f\x51\x32\xad\x63\x24\xed\x3c\x2d\x4d\x6a\x16\xe4\x01\x89\xd3\xea\x2b\x42\xde\xe5\x88\x89\xbe\x76\xb4\x91\x30\xb9\x4a\x37\x8d\x2a\x66\x97\x54\x27\x6d\xcd\xec\xf6\xea\xac\x41\xbd\xf8\xe8\x2d\x61\x87\xb1\xa5\xe6\x7a\x44\xd5\x4b\x01\xff\x82\x68\x92\xe3\x3e\x15\xc0\x67\x59\x14\x82\xcf\x08\xa6\x82\x1d\x18\xd4\x0d\xfe\xa7\xe8\xa9\xc9\xae\x78\x3e\xf5\x98\xc7\xb5\x2b\xc3\x92\xe8\x1e\x43\x63\xbe\xe0\x73\xe5\xcb\x77\x2b\xda\x09\xbe\x44\xc0\x0b\xf1\x15\xeb\xdd\x20\xed\xd7\xe0\x42\x56\xd8\x4a\x60\x2d\xf8\x9c\xf7\x8e\x87\x8a\x6a\x17\xa7\x13\xb0\xf2\x24\x67\xec\x5c\xb8\xfc\x94\x6d\x6e\x52\x44\xf0\xd4\x5f\xb5\x5a\x67\xf3\xc0\xf8\x65\x48\x07\xf6\x17\xbd\x46\x0e\xb7\x7c\x71\x82\x44\x81\x46\xb2\xce\x62\x4d\xb1\x77\xd1\x86\xea\x15\x4d\xe6\x61\xa5\x9f\x2e\xb3\x0b\x09\x18\x33\xc2\x9e\xf3\x22\xcb\xe7\xe7\x9d\xe5\xa7\xec\x07\xa3\x23\x26\xeb\x73\xac\x51\xd9\x65\x30\xc0\x9c\xcb\x57\xf4\x89\xe8\x52\xe7\x61\x26\x26\x32\xf4\x70\xa2\x8b\x73\x6f\x3a\x62\xef\x60\x92\x41\xab\x99\x90\x97\x15\x96\x85\x0e\xbb\xa3\x52\x9c\xd6\x28\xc2\xa7\x04\x2b\xa8\x02\xb9\x98\xcf\x4c\x6b\xe4\x11\x4d\x16\x01\xd7\x85\xba\xec\xca\x73\xd0\x55\x6c\x2a\xc6\xb8\x68\xec\x08\x92\xf4\x3c\x82\xfb\x42\x97\xe4\xe7\x16\xa8\x8c\x72\xae\x88\x75\x37\x91\x07\x26\x46\x73\x07\x9e\xcf\x2d\xa4\x93\x07\x3b\x41\xc5\x15\x4c\x8b\x49\xde\x6c\x61\x10\x73\xa5\x6e\x5a\x85\x8e\x09\x71\xd2\x83\xa9\x4d\x1e\x7c\x09\xfa\xfc\x68\x42\xb9\xd2\xce\x1f\x43\xb1\xb8\x42\xfe\x79\x92\x3c\xec\x0f\x65\x22\x76\xec\x93\x9a\x08\xe0\xc7\xa8\x83\xe2\xb4\x61\x58\x9d\xa0\x83\x72\xd9\x38\x03\x53\x1d\x1c\x84\xe0\x77\xbf\xf2\xba\xc1\x36\x06\xb2\xee\x83\x93\x13\x8c\x7d\x0d\xd6\x8c\x0d\x8e\xb3\xac\x57\x27\x40\xd8\xb3\x2c\xcd\x8b\x70\xb0\x20\x62\x81\xc7\xcb\xc4\xb9\x4d\xed\x2e\x7a\xd1\x7e\x29\x19\xd5\xbd\x31\x49\xf6\x57\x9e\x40\x9a\xf5\xaf\xa4\x0e\x54\x42\x40\xaa\x33\x45\x9d\x52\x63\xa2\x0a\x19\x9e\xed\x0b\x57\xc0\x33\x51\x56\x31\xd6\x95\x5a\x13\x7b\x08\x35\xf9\x67\x58\x97\x77\x52\x04\x74\x0a\xfa\xf9\xd2\x6a\x0a\xde\xe8\x77\x12\x95\x00\xbf\x78\xd1\x88\xf5\x22\xe5\xdf\x44\x3a\x63\xc6\x9f\xd4\x9d\xc6\x9d\xcc\xce\xa1\x97\xe6\x34\xf8\x53\x83\xc8\x83\x3c\x9f\x5f\x1c\x7a\x04\x4a\x11\x18\x0d\x44\x74\x8c\x20\x2e\x11\x71\x94\x94\x93\x7b\x02\x71\x8a\x27\xf7\x74\xa9\x6c\xbc\x20\x29\xb0\x3a\x71\xb7\x6a\x6c\x1a\xb7\xc1\xec\x04\x12\x71\x1e\xb1\x66\x0d\xc3\xce\x4f\xa6\x09\xbd\xaa\x42\x0c\x83\x17\xd1\x07\x87\xf7\x2c\xbb\x20\x2a\xc3\x63\xfb\xa3\x83\xe5\xb2\x82\x13\xa5\xbb\x7b\xd4\x03\x61\x79\xf5\xaa\xee\xc6\x76\x27\xf6\x7f\xe8\x1c\x8a\x82\x26\x3d\xdd\xbb\x11\xcc\xb0\x07\x27\xd8\x05\x4c\xc7\x8a\xa4\x01\x74\xe9\x49\x8f\xa5\x3a\x0c\x4c\x6a\xa2\x4d\xf0\xf3\x04\x8f\x6e\xb7\xa4\x51\x49\x57\xa7\xaa\x86\x65\xeb\x45\x94\x54\x2c\xbb\x14\x17\x07\x0e\x91\x63\x57\x56\x59\x7b\xb7\xc6\xd1\xa5\xe6\xcd\xc7\x14\xa0\x0c\xa6\xe9\x7b\x17\x9c\x0b\xe7\xa9\x0c\x8c\xcc\x04\x40\xe2\x20\x03\x9f\xaa\x94\x51\x49\x39\x89\x97\x10\x4a\x58\xd4\x75\xfb\xea\xba\x6c\xa9\xae\x03\x60\x31\xfe\xde\x42\x0c\xb8\x77\xa8\x0f\xbc\x64\x3f\xcd\xb5\x79\xe7\x0a\x18\x8a\xd8\x95\xa6\x3d\x37\xdf\xba\xf8\xd4\x59\xbe\xe3\x5d\x32\xe8\x9e\x25\xcd\x12\x10\x3b\x43\x73\x22\x89\xb0\x8b\x0b\xcd\xa5\xef\x9d\x45\x99\x5a\x5c\x23\xa6\xc1\x96\x61\xa5\xe3\xef\x5d\x32\xce\x54\xcb\x86\x0a\xf6\x47\xbe\x58\xe1\x28\xd4\x2a\xbe\x2b\x69\xdc\xba\xcf\x08\x4e\x84\x6e\x4c\x05\x18\x96\x64\xb0\x13\xc1\xda\xc9\x13\x3a\x0e\x46\xb3\x49\x4d\xb5\xeb\x26\x0f\x74\x65\x12\x4d\x75\x0a\x02\x96\xea\x35\x28\x6a\x01\x3e\xa0\x5c\x22\x40\xe2\xd9\x57\x36\x79\x89\xc3\x7e\x05\x52\x4f\x8c\xfb\x1b\xce\x03\x08\xc6\x5f\xba\x18\x42\x0f\x04\x24\xac\x5d\x71\xce\x5f\x69\x5e\x5f\x69\x5e\x3e\x0b\x51\xa9\x97\xee\xb6\xdf\xdf\x62\xcf\xd9\x8a\x70\x16\xee\x6d\xdf\x7e\xe0\x2c\xbf\xcf\xe6\x11\xfb\xa6\xbd\xc2\x00\xcd\x35\xbf\x97\x31\xf9\x8c\x90\x28\x13\x93\xae\x18\xed\xc2\x6c\xaa\xca\x00\xaf\x9b\x53\xfe\x72\xab\xdd\xb7\xb7\xd8\xdc\x09\x6b\xf3\xad\x6b\x3c\x78\x28\xb6\x9d\x00\x35\xd6\x34\x54\x53\xd0\xce\xa0\xba\x04\xdc\x89\x20\xb3\xbe\xeb\xc2\x8b\xd1\x4c\x74\x4e\xf2\x3c\x34\x49\x0a\x02\x8a\xa6\xf1\x57\x27\x5a\xb8\xe9\x5c\xbb\xdc\x7c\xfc\x90\x9c\x78\x9d\x27\x3f\x92\x99\xa0\xeb\x33\x79\xda\x21\xed\x03\x15\x60\x52\x5e\x02\x91\x13\x98\x80\x7f\x69\x2f\x73\xa7\xee\xcb\xfb\x63\x6a\xec\xf0\xca\x4a\x30\xf7\xe6\xfc\x44\xfd\xba\xb9\xe0\xac\x7d\xc5\x38\x80\x79\xb7\xf6\x55\xaf\x0e\xe4\xd7\xcd\x8b\xfb\xa5\x6a\xef\x60\x1e\x72\xe5\x20\xb8\x01\xe8\x28\x14\xbf\xc3\x4b\x94\x8a\x99\xae\x64\xc1\x08\xd2\x09\xd3\x00\xbd\x63\xdc\x90\x11\x36\x5f\xd8\x61\xe8\x06\xef\x83\x07\x2c\xd4\xcc\xe2\xf9\xe2\xd0\xb0\x6e\x60\xc2\x4e\xd0\x9f\xd7\xcb\x36\x1d\x22\x08\x01\xf5\x9e\xec\xcc\x70\x2d\x04\x98\xcb\x2a\x3a\xa0\x70\xd7\xf1\xe7\xdb\x33\x74\x11\x7a\x91\x7d\x93\x2f\x05\x82\xbd\xd3\x35\x1b\x53\xde\x93\x84\xda\xa6\xa6\x68\x74\xf0\x5f\x8e\x0f\x8e\x8d\x47\xdb\x19\x49\xaa\x92\xb1\x33\x8e\x0e\x8e\x8d\x0c\x1f\x1b\x8b\x8b\x8b\xc4\x22\x23\x52\xb0\x87\x8f\x0c\x8e\xc5\xed\x5d\x54\x00\x46\x6e\x17\x1a\x1d\x3e\x3e\x3e\x18\xed\x7a\xd0\x7e\xb2\xd2\xba\xfe\x83\x0c\x5c\x4d\x05\x61\xb9\xa4\x81\xdd\x8b\x2d\xcf\x1a\x3b\x4e\x20\x2b\x2c\x7a\x76\xff\x13\x9d\xec\x95\x5a\x5c\x6a\x76\x09\x08\x92\xd4\x71\x0d\xea\x51\x83\xfd\x3d\x3e\x5b\x83\xb9\xe6\xfe\xe9\x6e\xa2\x4c\x7a\xd1\x98\x08\x39\x6b\x63\xc9\x3f\xb6\x52\x8c\xa2\x8e\x8b\x0b\x8f\x1b\xdd\xfe\xa7\x68\x4d\xfd\xfd\x65\x26\xca\x92\x68\x12\x8b\x04\xf2\x3e\x2c\x5e\xe2\x99\x18\x3f\x5d\x73\xe6\x7f\xa2\x92\xa5\xce\x47\x97\xdd\x93\xe6\xee\xce\xb3\x9a\x03\x23\x99\xe8\xe4\xaa\xda\x10\x0f\xe6\x40\x12\x68\x0a\xbd\x76\xc3\x03\x87\xcb\xa5\x5e\x85\x30\xdb\x0b\x21\x8c\x4e\x3b\xd3\xf3\xea\x9f\xa0\xda\xdb\xef\x62\x2e\x29\xef\x3d\x22\x66\xdb\x5f\x9d\xf5\x22\xb5\x13\x08\xf2\x6a\xca\x7b\x5a\xe4\x30\xa2\xbc\x98\x6e\xef\xab\x30\xfa\x58\x07\x76\x53\x28\xda\x8d\x35\x26\x62\x6a\x3d\x6e\xd5\xbd\x76\x02\xec\xc6\x03\x65\xa3\x5e\x52\x0e\x81\xa8\x6f\xce\x26\x4d\x00\xd6\x27\x8c\xd7\x40\x13\xb8\xc5\xc5\x88\xa5\xce\xb5\x5b\xff\x24\xc5\x49\x51\xd3\x67\x50\xbd\xdb\x29\x4e\x55\x64\x97\x01\xb2\x45\xf2\xf4\x4e\xd1\x83\x78\xf5\x61\xf3\xfa\x2f\x70\x2b\x76\xcd\x11\x5e\x19\xaa\x3e\x85\x71\x20\x75\x57\x1a\x05\xff\x54\x8b\x51\x55\x9e\x75\xef\x36\x9d\xd4\x95\xb0\x49\x14\xa7\xf5\x72\x89\x17\x22\xb2\x42\x7a\x17\x6b\x36\x4c\xc0\xd5\xc8\x95\x4f\x2b\x2a\x66\xf4\xe2\xfa\x00\x92\xb7\xbb\xa2\x1f\xa2\xfd\x46\xd6\xae\xb4\x36\x98\x28\x7a\x81\x0e\x2e\xea\x7e\x2a\x29\xc5\xae\x40\xdb\x73\x1f\x39\x5b\x1f\x39\x4b\xab\x61\xe3\x45\x5b\xcb\xfa\xc7\xec\xaa\x45\x4b\xda\x9f\x80\xc0\x59\x79\xda\xfe\xe1\x3e\xdb\x78\x9c\xc7\xd7\xe8\xb7\x54\x5f\xf1\xfe\xa9\x75\xf4\x71\x94\x9b\x2c\x66\xcb\x4f\x6e\x22\x8e\x9f\x27\x6f\x85\xaa\x6a\xbc\x3a\x2b\x38\xe0\x46\x1f\xd4\xd8\x1d\xdc\xc5\x96\x5d\x52\x7c\xd9\xa0\xe9\xa0\xcd\x42\x4b\xdd\xe4\x89\xb9\x39\x29\xd5\xd8\x0b\x55\xda\x66\xc2\x74\x60\x8a\x7a\x5f\xe4\x31\x29\xe0\xd9\x3c\x4c\x24\x25\x45\x4b\x61\x6a\xaa\x01\x27\xe8\x84\x81\xa1\x79\xea\x77\x79\xce\x84\x19\x2e\x0e\xd2\x53\xc3\x4d\x9f\x9c\x79\x6a\x74\xbb\xe2\xc3\x46\x7d\x42\x35\xfd\x9b\x74\x77\xc8\x6f\xb0\xc2\x7f\x9a\xc2\xfe\x19\x4b\xc0\x73\xe6\x7b\xbc\xfe\xa2\xea\xf9\xc7\x84\x1b\xfb\x47\xcf\xcf\xa9\x9c\x02\xc3\xeb\x41\x33\x50\x38\x91\xba\x0d\x53\x6b\xbe\xe3\xd6\xaa\x27\x4e\x22\x0a\xe5\xfb\x3a\x2f\x50\xa3\x5f\xb4\xfb\xa8\xa3\xb8\x50\x1e\xd1\x97\xee\xe4\x09\x92\xc0\x95\x9f\x6e\x7f\x06\xa8\xf0\x36\x6a\x0f\xa2\x9f\x25\x6f\x06\x7a\xec\xbf\xd8\xbe\xdc\xc1\x2e\x63\x1d\x11\x44\xb6\xeb\x3d\x53\x27\xf9\x14\x8b\x5c\xe6\xb5\x38\x81\xd8\x6a\xa2\xf6\xef\xc5\x10\x91\xb5\x8f\x52\x8c\x3c\x5e\x33\xc3\x1b\x08\x60\x47\x93\x93\x1a\x96\xf0\xb7\x5b\xdb\x77\xe1\x8a\xf3\xe1\x96\x73\xed\x4a\x7c\x6e\xe0\x94\xf8\x52\x4a\x6b\x89\xdf\xcb\x63\x4e\xcc\x9a\xee\x31\x9c\xb1\x94\x45\x07\x73\x6c\x94\x9f\x87\x4e\x3a\xc4\xcd\x45\x14\x2f\x20\x79\x78\x48\x2a\xc8\xa8\x4d\xee\xe0\x8c\x4b\x85\xdf\x85\x53\x3a\x8e\x02\xb1\x71\x95\x7a\x70\xdd\x7a\x37\xd7\x9d\xdd\x4c\xbc\xed\xb2\xf3\x39\xbb\xed\xf6\x1e\xf0\x4a\xd4\x09\xdf\xa5\xbf\xf7\xf3\xe0\xeb\xa4\x75\x3f\x2f\x19\x56\x36\x74\x55\x27\xf1\x26\x5d\xb0\x5f\x77\xff\xee\xee\xb9\xae\x17\x71\xdd\xe0\x91\x9a\x08\x9d\x5d\x26\x53\x80\x17\xe7\xaa\x67\x70\xbb\x27\x80\xc8\xa8\x76\x96\x5e\x6f\x4c\xcb\xc2\xaa\x1f\x2c\x1b\x9a\x90\x29\x90\x91\x97\xe0\xde\xc6\x3b\x32\x25\x5b\xf1\x3b\x67\x7e\xd0\xe5\xb9\xea\xd1\x9f\x74\x2b\x99\x76\x5c\x36\x0f\xd1\x47\x45\xad\xb8\xc0\x6b\x8c\xc1\x7c\xc8\x77\xff\x1f\x3e\x6f\xac\x5f\x4d\xbb\xd0\xd9\x2a\xef\x26\x90\xa6\x4d\xd6\x99\xe2\xf6\x06\x28\xca\x7c\x1d\xd2\xe9\x52\xdf\xc3\xb0\x0e\x15\xec\xb9\xae\x33\x29\x85\x64\xee\x0b\x6c\x7a\xcc\xfa\xbd\x87\xd4\x90\x2e\xef\xbc\x94\xed\x9d\x9a\x11\xef\xc2\x16\xf2\x85\x38\x74\xa5\xa0\x60\xa1\x08\xb7\x72\x1b\xca\x8f\x7f\x86\xfc\x70\x68\x1b\x4a\xa5\xaa\x91\x07\x25\x44\x2f\x35\x8e\x71\x94\x08\xff\x48\x00\x07\x84\x65\xa4\x91\x34\x9a\x37\x57\xdb\x5f\xce\xb7\xb7\xb6\x72\x12\x36\xdc\x70\x90\x17\x7e\xb3\x07\x77\x89\xb0\x69\x1f\x75\xee\x9b\x1e\xe9\x51\xc7\xbf\xec\xe4\xa7\x48\xab\x54\x43\x41\x19\x6e\xf3\x1b\x0a\x13\xdd\x1b\xfc\x19\x54\x3a\x65\x80\x79\x71\x01\x2f\xee\x2b\x30\x5a\x02\xa7\xd8\xce\xa0\x11\xe0\xd3\x36\x75\x8d\xf4\x5e\x7a\xb5\xa4\xcf\xe8\xa5\xba\x5a\xf6\x7c\x79\xc0\xd7\x9a\xec\x59\x8c\x20\xbb\x1e\xed\x72\x20\x0d\x47\x86\x52\xac\x05\x5f\x2b\x43\x90\xfe\xb4\xa6\x0c\x0f\x78\xa5\x74\xbc\xe0\x07\xaf\xb4\x21\xc4\xd1\xc6\xb8\x78\xe5\x03\x34\x3b\x0f\x53\xfa\x8c\x86\x33\x7c\xaf\xa5\x4c\xd5\xf5\x52\xbf\xa2\x0c\x40\xa6\x4c\xf4\x3a\x9d\xd6\xd4\x32\x23\x06\x73\xce\x61\xef\x81\x43\x5e\xad\xde\x09\xf5\xc0\xac\xf9\x16\xfa\x5a\xb1\x75\x68\xc5\x79\x33\xbe\x00\x0a\xf2\xea\x1d\xb6\xff\x85\xd1\xd6\x45\x09\xec\x92\xf9\xf4\x45\x76\x7c\x79\x71\xce\x45\xcd\x14\xd4\x78\x97\xff\x5c\x7a\x20\x3f\xbc\x39\xf7\x44\xe1\xb4\x36\x9b\x7f\x6f\x50\x19\x39\xe7\xe9\x2f\xcd\x4f\x9e\xb5\x1e\xac\xbb\x76\x2f\xc8\x6a\xc5\x04\x5e\x40\xf6\x9f\x73\xef\x29\x8d\xb5\x2b\xfe\xf7\x70\xe1\x9d\xff\xc5\x59\x7e\xdf\x99\x7f\xb4\xfd\xfe\x23\x72\xbc\x95\xcb\x49\x99\xc4\x3b\x14\xc7\xf4\xb8\x8e\x66\xda\xad\xe1\x99\xc7\x04\xc8\x03\xa5\x38\xff\x9e\xa7\xb1\xef\xf4\xb0\xfc\xc7\x07\xbc\xd4\xd4\x22\xc5\x02\x15\xc8\xd5\x9d\xbe\x4d\xe6\x34\x17\xe0\xe2\x3c\x85\x85\xa2\x66\x88\x99\xce\x0d\x6e\x3e\x9c\x64\x88\x92\xce\x0d\xae\x28\x27\x78\xe1\xf4\x46\x1c\xac\x98\x30\xe0\x90\xe9\x88\x0f\xb7\x25\xa8\x87\xcf\x05\x6a\x36\x2e\x18\xdc\x43\x84\xe6\x10\xc3\x2a\x6c\x49\xc8\x0c\x51\x86\x7a\xb9\x19\x2c\xcb\xd9\x4e\x60\xcb\x8b\xeb\xe4\xd9\x9e\x27\xd7\x59\xb1\x89\x71\xcd\x17\xb8\x59\x2f\xfb\xaa\x1e\xd3\x21\x1d\xcc\x5f\xda\xed\x48\xe7\x45\x0e\xc6\xf3\x99\x27\xfc\xf4\x9c\xb9\x36\xad\x37\x0c\xcb\xe6\xd7\x5c\xf6\xd7\x41\x4c\xec\xed\x77\x51\x8d\x77\x6d\x95\x05\x93\x3f\x9d\xc9\x6e\xb8\x59\x40\x89\xd3\x4b\xa6\xcc\x94\x6e\xef\x29\x5b\x89\x51\x91\x80\x4e\x0a\x2e\xcc\xd1\x68\xb0\xc1\xb7\x02\x50\x69\x13\x1b\xf4\x2d\xe7\x13\xee\x72\x3e\x8c\x73\x3f\xda\x13\x59\xac\x71\x6a\x9a\xc6\x06\x0f\x1c\x1f\x1d\x1a\xff\xa3\x72\x78\x74\xf8\xf8\x48\x24\xf6\xa8\xcf\x04\xf0\x8c\x9e\x18\x3a\x30\x98\x90\x58\x8e\x0b\xec\x19\x12\xcb\x71\x3c\xd1\xbe\xd1\xd2\x99\x60\xc7\x46\x06\x12\xe9\x0f\xfd\x46\x14\x43\x52\x5a\x3c\x54\xef\x49\xa7\xc5\x23\x24\x07\x07\x4f\x0c\x1e\x19\x1e\x89\x4b\x8d\x47\x68\x36\xe7\x9c\xc5\x0f\xe5\x02\xa6\x08\x53\x62\x0a\x3e\xc4\x43\x43\x9e\x01\x4f\x4c\x1e\x3e\x59\x63\xf6\x58\x51\x2d\xff\x26\x34\xbd\x8d\xcd\xb5\xd6\xe6\x37\xe9\x35\xbd\x31\x16\x5e\x39\xf1\x60\xcc\x3d\xa0\x93\x36\x29\x67\xf9\x22\xbb\x64\x33\x4a\xa5\xb6\xa2\x60\x1a\x59\x46\xb6\x2b\x18\x9c\xc2\x27\xe9\x4f\xc0\x0c\x90\xf2\xa4\x96\x3d\xc3\xaa\xcc\xa7\x2a\x89\x55\xcf\x32\x42\x13\xa0\x1a\x2b\x14\xb9\xee\xb5\x2f\x31\x29\x0c\xd5\x01\x4c\xc4\x84\xf4\x67\x10\xcb\x7c\x5a\xaf\xbd\x1c\x3d\xc2\x54\xc0\x80\x3b\x51\xf0\x4c\xd0\x0b\x90\xcf\xf0\xf2\x45\xe7\xd3\xcf\xdb\x5b\x5f\xb5\x36\xbe\x6e\x6d\x3c\x86\xf8\xba\x0c\xe4\xd1\x02\xcb\x48\x1d\xaf\xc3\x90\x27\x75\x58\xe1\x0f\x47\xa1\xcf\xbd\x80\x41\xcd\xe2\xfd\xca\xef\x5f\xf9\xdd\x7e\x65\x80\x8a\x28\xe9\x96\x52\xd2\xaa\x3a\x04\xd4\x62\x05\xa7\x92\x81\x13\x0d\x93\x04\xd7\x98\x18\xac\x97\x35\x1e\xa2\xa9\xbd\xcd\x06\x19\xe3\x3b\x74\x2b\x39\x05\xcb\x6e\xa3\xcf\xa3\x5f\xd8\xa4\x1d\x34\xcd\x31\x7c\x74\x80\x3d\x79\xf7\xdd\x3e\xfa\x2e\xf0\x7e\xa0\xa6\x0f\xc2\x43\xf7\x8b\x8a\xaf\x06\x20\x7b\x11\x08\xd9\x48\x38\xd8\x9d\xdb\x8f\xb6\xaf\xdf\x6e\xaf\xac\xfc\xba\x79\xb9\x75\xe9\x97\xe6\xdc\xd9\xc6\xc6\x97\xad\x7b\x67\xc3\x49\xa1\x4f\x83\x5f\x74\x13\x43\xfa\xc2\x04\x5a\x84\xfa\x0a\x14\x9e\x68\xbc\x18\x47\xe3\x05\x03\x7c\x44\x9d\xd0\xca\xb4\xc6\xdd\x18\x66\x81\x9c\x9e\xb9\xc0\x14\xe6\xe0\x75\xcf\x9b\x23\xf4\x4e\x91\x4c\x6e\x7a\x00\xc2\xb4\xb9\xd6\x39\x37\x5d\x2b\xfa\xc0\xba\x79\xc5\x23\x09\x43\xbd\xf1\x4a\x57\x9a\xee\x8c\xae\x77\x63\x69\x8b\x3c\xa4\xee\xbe\x34\xb5\x1e\xbc\x9c\xae\x72\x6a\xee\x6e\xa2\xf7\xf7\xb8\xd0\xa4\xa2\x2e\xae\x99\x30\x2d\x51\xf5\x34\x42\x72\xab\xa5\x2e\xac\x91\xad\x93\xe3\x0a\x6a\xe4\x34\x00\x5e\x08\x58\x90\xcb\x93\xd5\xf1\xa1\x91\xfd\xca\xd0\x24\xa4\x8e\xc1\x3c\x5b\xb6\x39\x8b\x4a\x24\x83\xc7\x90\xa9\xca\xcc\xab\x3d\x81\x64\x7d\xf8\x39\x16\x14\x84\xe2\x74\xa0\x56\x29\xd4\x50\xf9\x99\xd4\x11\x1e\x3b\x27\xab\xce\xea\x62\xfb\xe7\x9f\x9d\x2f\xbf\xdb\xaf\x38\x5f\xbd\xd7\xfc\x7c\xa9\xb1\x75\xaf\xf9\xfe\x4f\x14\x4a\x46\x27\xef\xcc\xab\xde\xba\xa1\x24\xf2\x94\xdb\xbe\x50\xf3\xca\x84\xe5\xd1\x25\x5e\xa9\xf6\xc4\x8d\x26\xae\x89\x30\xfe\x1e\x67\x32\xb1\x75\xdb\xdd\x3c\x4b\xf6\x65\x0e\xc8\xbf\xcc\x44\x8e\x4a\xca\x87\x90\xa2\xb5\x28\x41\xd1\x9a\x93\xde\x0f\x84\x61\x47\x0b\x7f\xc4\x95\x9c\x60\x67\x77\xc7\x33\x91\x82\x32\xde\xa5\xa5\xb1\xb6\xde\xeb\xc9\x42\x73\x3d\x63\xa4\x13\x10\xc4\xf0\xcf\xe8\xda\x99\x4e\x9a\x35\x1d\x02\xca\x62\xba\x36\xb9\x89\x1c\xfe\xe9\x4e\x19\x99\x40\xd9\xba\x68\x2b\x2d\x76\x01\x88\xdd\x77\x1f\xb6\x96\x3e\xf0\xaa\x04\x66\xaf\x34\xc7\xe8\xe2\xf9\x4c\xfc\xc1\x6c\xe8\x7a\x38\xc8\xff\x4c\x74\xc4\xf4\xea\xe4\x12\x99\x6c\x10\x63\x9a\x0b\x53\x16\x98\x43\x90\x0b\xc7\x0b\x93\xc2\x02\x1c\xfc\xc9\x09\xb5\x5c\xd7\x28\x53\x4f\x6f\x59\xc8\x1d\xd4\x2f\x34\xb6\x96\xfc\xfe\xc3\x81\x76\x7c\xe2\xe6\xa1\x65\xe8\x0a\x16\x0b\x76\x03\x23\xa0\xab\x17\xb2\xf5\xf8\xbf\x85\x65\x9d\xb0\x8d\x28\xcf\x53\x69\x2f\x7b\xe8\xb8\x9e\xce\xa1\x4e\xa3\xba\xe9\x41\x12\xb2\x31\x95\x93\xbd\x30\x2b\x38\x61\xba\x77\xc1\x52\xb8\x93\xa8\x72\xe1\x37\x67\x1b\xe1\x4e\xa2\x4a\xcf\xef\x34\x56\xcc\x46\x05\x02\x44\xf1\x53\x61\x5c\x32\xcf\x25\x44\xde\x88\x34\x15\xa2\x87\xe4\x62\x04\xd6\x6d\xde\xe2\xe9\xa4\x32\x6c\x00\xf9\x23\x10\xe0\xcd\x38\xd3\x49\x8f\x15\x34\x8e\xc6\xd0\x9b\xa6\x91\x20\x0d\xe5\x72\x57\xa1\xab\x14\x42\x11\x79\x5e\x05\x12\x89\x51\x72\x94\x8c\x12\x11\x10\x34\xad\x95\x13\x11\xaf\x2d\x3b\x97\xbe\x91\x45\xa0\x57\x21\xf1\x38\xf9\xf1\x22\xaf\xdc\x71\xea\x25\xb5\xe3\x41\x05\x33\x59\x2b\x40\xd4\x91\x4d\x59\xec\xa9\x6c\x59\x1f\x6b\xec\xa6\x6a\x82\x69\x5d\xd3\x4c\x95\xf6\x5e\xfe\x9a\x8a\xe7\xb0\x57\x6c\x93\xc2\xba\xde\xd1\x09\xa2\x18\x1f\xa4\x75\x62\x67\x8e\xb3\x78\xcf\xf9\xe1\x3d\x48\x68\x76\xef\x3c\xfb\xdd\xfc\x64\x85\x64\xce\xed\x2f\xce\x39\xf3\x0b\xce\xc6\x7a\xeb\xbb\x4e\x42\x46\xaa\x7e\x06\x9e\xe1\x97\xe7\x9b\x1f\x7c\xcf\xb3\x43\x7c\x7c\x85\x9d\xfb\x9d\x57\x8b\x2b\x8d\x8d\x87\xed\xe7\xd7\xda\xf7\x2f\x07\x73\xa6\xc9\x94\x22\xc1\x6e\x43\x0f\x4b\xd6\x75\xd1\x62\xd7\x0f\x37\x18\x4f\x3c\x12\x18\x39\xcb\x82\x0a\xb4\x39\x96\x32\x31\x8b\xe1\xce\x31\xba\x60\xa8\xac\x45\x51\xc4\x80\xff\xea\x2a\xaf\xf6\xc4\x84\x13\x3c\xdd\x65\x49\xc0\xfc\x35\x25\xcd\x56\xf5\x32\x5f\x11\x50\x42\xc2\xd6\x8b\xf5\xb2\x6a\xf6\x5c\xba\xe3\x57\xac\x2c\x2c\x31\x8a\x49\x44\x8a\x1d\xa1\xc8\xef\xc4\x30\x99\x5a\x11\x8b\xa9\x30\x91\x96\x0a\x9f\x8b\xec\x13\x4b\x73\xed\xe7\x1f\x66\xa9\x6b\x8e\x24\xf4\x68\x7f\x62\xf9\x0e\x38\x92\xa2\xba\x07\x08\xc8\x34\x45\x2d\x9f\xc6\x2a\x3d\x6e\xd4\x24\x65\x44\x8c\x37\x84\x14\x28\x79\x76\x94\x1c\x90\xa5\x9d\x59\xd1\x5f\xcb\x60\x95\xde\x00\xc8\xd6\x9c\x71\x03\x80\x4d\xdd\x0b\x34\x28\xaa\x54\xc7\xe4\x85\x1b\x89\xf9\xc8\xe6\x91\xe8\xc3\x2b\x75\xa8\xc8\x0b\x30\xd0\x49\xbd\x31\x09\xf9\x5c\x77\xd3\x49\x70\x5d\x77\xdd\x4e\x23\xa1\x9e\x8a\xeb\xa6\xb3\x0f\x9d\xf5\x27\x64\x64\x92\xec\xa8\x58\x35\xca\x98\xa4\xcb\x1b\xb6\x53\x72\x4a\x54\x9a\x0d\x98\x0c\xcd\xd1\x0a\xbe\xf0\x8f\x04\x71\x64\x2a\x82\x28\x03\x42\x90\xbe\xee\x19\x9f\xb2\x14\x62\xd8\xd4\xcd\x56\x0c\x11\x21\xc5\x54\xf7\xa3\x78\x5c\x29\xc0\x90\x73\x7c\x16\x45\x1d\x28\x16\xc2\xf6\x04\x94\xa3\x31\xf3\x29\x83\xde\x0f\x86\x0d\x7c\x05\x5a\x75\x9e\xa1\x1c\x4a\x58\xbb\x29\x81\xe9\x73\xb0\x59\xf3\x5c\xa9\x50\xa9\x8e\x6f\xc8\x67\x0c\x13\x33\xb3\x79\xd9\xb5\x63\xae\x78\x89\x74\x44\x11\x12\xc4\x0f\xe8\x4d\xc3\xb0\xfd\xb9\xd6\x7b\xab\xce\x79\x45\xe5\x4a\x11\xf5\x09\x62\x53\xd0\x8f\xe1\xed\xc3\xc6\x2a\xc4\xbb\x7d\x1b\x61\x17\x8f\xe6\xbd\x05\x2a\x04\x4c\xf7\x10\xf6\x67\xd7\x3d\xa4\xf9\xf9\x39\xb8\x8a\x88\xdf\x43\x60\x7f\xfe\x2c\xbf\xdb\x08\xd7\x87\x48\x79\x58\x8a\x35\x16\xa1\x29\x39\x3a\x96\xe2\x62\x33\x46\xc4\x72\x4c\xec\x7c\x85\x7a\xc8\x46\xdd\x3e\x59\xe5\x96\xc2\x90\xe2\xef\x30\xdd\x2b\x86\xa9\xf9\xef\xbc\x02\xe4\xb5\x7f\x99\x6f\xde\xfa\x05\x10\xf8\x0c\x82\x61\x15\xe1\xe1\xae\x89\x51\x5b\xcd\x4f\x7f\x76\x1e\xdc\x91\x17\x3a\x91\xb9\x7a\xb5\x53\xd5\x21\x67\xee\xc0\xfa\xbf\x70\xcd\xb9\x74\x77\xb7\x99\xd2\x4a\x64\x83\xa3\xdf\x71\x4e\x62\xf1\x5f\x8b\x61\xdd\x65\xcf\xc6\x38\xcb\x03\xf5\xff\x8b\xf4\x6f\x84\x0e\xa9\xd7\x5c\x1f\xa8\x3e\x32\x8f\x1b\x4a\xb5\x0e\x11\x0a\x06\xa4\xdb\xa6\x07\x6e\x7a\x6d\x8a\x78\xe7\x9f\x27\xad\x9a\x0f\xb7\x1a\x1b\x0f\xc0\x10\xee\xda\x9b\x00\x2c\xed\x7e\xdb\x17\xae\xd0\x23\xaa\x0b\xeb\x6f\x20\xc7\x46\x4c\xb9\xb4\xae\xb7\x42\x50\xeb\x96\x3b\xe9\xec\x58\x2f\xc6\x98\x4f\x05\xf0\x19\xb5\xc4\xed\xf2\xec\x52\xf3\xf1\x17\xb9\xa4\x11\x00\x74\xb5\xdf\xd2\x62\x40\xd6\x42\xb3\x99\xec\xde\x7a\x98\xb5\xa0\xdc\xd9\x41\x13\x54\xdf\xc7\xe3\x8c\xce\xf8\x61\x7b\xeb\x7b\x67\xf1\x43\x67\x69\xd5\xf9\x6c\x4e\x0e\x1b\x13\x49\x0a\xdc\x49\xad\x14\x23\x72\xa2\xe8\x40\x35\x3c\x18\xcf\x32\x87\x31\x9c\x17\x31\x39\xd9\x3b\xdb\xbe\x54\x5a\x76\x82\xce\xfe\x3e\x0e\x27\xd2\x81\x43\xa7\x8e\x0d\x1c\x1d\xe4\x52\x62\x01\x94\x16\x05\xd7\x07\xad\xe0\x06\x6e\x53\x0d\xcf\xd3\xa4\xd3\xf0\x5e\xbb\x3a\x24\xcb\x57\x29\x0a\x6a\xd2\xa2\x9e\x21\xfa\x16\xb0\xeb\xf8\x85\x7a\x46\x39\xc0\x8b\x93\x9c\xd1\xd9\xb6\x8a\x55\xd4\x99\x7c\x3c\x4b\x9e\xa8\xbc\x50\x89\x6b\xc0\xf3\x49\xce\x16\x3b\xf4\x6d\x1d\x23\xc5\x66\xd1\xd7\x89\x97\x76\x8e\x0b\x9a\xde\x69\x74\x62\x7c\x1f\x33\xf8\xae\xe1\xba\x51\xf4\x75\x44\x96\x49\xca\x7a\xe9\x13\x5d\xa0\x1a\x04\xbf\x4e\x26\xf8\x59\xf8\x84\x14\x5e\xeb\x92\x3c\x2d\xb8\x5b\xf6\x65\x9f\xe4\xd2\x83\xc6\xff\xa9\x2c\x5f\xc7\x39\x13\x03\x35\x3d\x48\x3f\xdc\x8d\xf5\x6a\x5d\xf3\x8c\x7c\xec\x9e\x0c\x16\x29\x0d\x8b\x68\xb9\x8e\x1b\x69\xf8\xea\xb0\x10\x40\x42\x6e\xdc\xdb\x9f\x7d\xce\x03\x0e\xee\x9c\xf3\x79\x75\x48\x96\xd4\x0f\xb0\x74\xe0\x90\x87\x2c\x70\x28\x20\x7b\x1a\x13\x42\x19\x2f\x58\xb6\x2d\xe0\xef\xe1\x55\xdf\x81\x05\xa5\x4d\x4e\xb2\xdb\xa0\x18\x93\x3e\xb4\x7b\xa1\xac\xd6\x67\x0f\x5b\xf7\x97\x1b\xcf\x3f\x83\xdc\xf6\x41\x9f\x0a\x2a\xca\xd3\xba\x7e\xb7\x79\x63\x41\xfc\x3a\xd9\xc5\x2b\xcf\xa6\xd4\x25\x3f\xab\xd5\x59\x65\x02\x2b\x49\xc1\xa2\xdf\x11\xc6\xd7\xd6\x1b\xeb\xe7\x19\xfb\xed\xe7\xb7\x1b\xeb\x9f\xfa\x79\x62\xdc\x07\xfa\xe5\x78\x75\x42\xaf\x96\x3c\x0a\xdb\x5f\x7f\x89\x69\x8d\x3f\x24\xcf\x22\xcf\xd9\xd0\xdf\xe4\x75\x6a\x80\xdf\xf3\xaa\x9c\xf8\xbd\xf7\x71\xeb\xdc\x2f\xce\xb5\xab\xfe\x26\x3d\x1d\x01\x24\xdd\x5c\xa5\xd3\x15\x3e\xf4\x8d\x00\xd1\x19\xe5\xcc\x28\xd0\xfd\x81\xa5\xb3\x83\x73\xab\xc3\x94\x3b\xad\x1a\x5b\xf7\x44\xa7\x55\x8a\x35\xd4\xd9\xdb\x8e\xd7\x4a\xec\xe4\xf1\xd2\x2e\x06\x39\xad\xe3\x4b\x0a\x3e\x48\xce\xfd\x1a\xce\x52\x0c\x06\xc6\x24\x0d\x5e\xf3\xf1\x83\x2c\xf9\x62\xc7\xd9\xf9\x87\x2e\x6f\x3e\xf3\x16\x93\x79\x52\xd9\xc2\xe9\x8e\xd8\x2b\xa6\x3a\xab\xcf\xbc\x44\x24\xe0\x26\xe7\x1a\xbe\x9a\xb7\x1e\x3a\xcf\x6f\x49\x11\xe9\xf3\xcf\xf3\x4b\x8d\x71\xb2\xce\x93\x1f\x29\x5c\x86\x64\xcd\xc8\x66\xe2\x44\x84\x89\xc8\xa9\x08\xc1\xd3\x28\xa6\x61\x7a\x52\xb0\x4a\xb8\x6a\x6b\x01\xaf\x20\xbf\x3a\xce\x8b\x10\x50\x6d\x5f\x36\x15\xb6\x63\x68\x6f\xa3\xc1\x82\xac\x87\x36\x44\xa1\xf3\x32\x6b\x9e\x3d\x31\x44\xb9\xd7\x09\x53\x87\xdc\x7a\x08\x25\x5a\x36\xf9\x2d\xd1\x96\xbe\x47\x19\x00\xd4\x2f\xbe\xe3\x56\xd9\x1c\xc4\xe8\x21\xd8\x9b\x42\x55\xd5\x4c\x8c\x2a\x69\x94\x7c\x86\xd7\x85\xe8\xa8\x64\x63\x26\xc3\x8e\xe1\x11\xe2\xd4\x30\x01\x26\x78\x29\x4d\xeb\x45\xea\x3d\x6f\x0f\xa1\xc2\xd6\x58\x92\x9e\xcd\xf5\x52\xdd\x0c\xa6\xb8\x55\xeb\xb6\x51\x80\x3a\xf5\xc5\x78\x9d\xd3\xfc\x2f\xec\xe6\xd6\x69\xd6\x01\xdf\xd8\x02\x9d\x80\xc4\xa1\x82\x3d\x00\xc2\x56\xa7\xe2\xaf\x8a\xba\x32\xdd\xf3\x67\x86\xf4\x40\xe6\x54\xcc\x05\x42\x06\x86\x50\xcf\x26\x40\xa7\x22\x67\x31\xde\x64\x52\x30\x32\x51\xc8\xd6\xaa\x6c\x2f\xe2\x1c\xf6\x4a\x1b\xb1\xb5\x19\x99\x91\x36\xb9\xbf\x71\xe5\x57\x0d\xf6\x1a\x57\x35\xd4\x13\x9e\xd0\xd8\xb6\x80\x45\x9d\x69\xa7\x60\x40\x40\xf1\x2b\x61\x5e\x48\xc5\x77\xfa\xb1\x91\xe2\x3b\x45\x3f\x8b\xb0\xd3\x95\x6b\x3f\x80\x08\x44\x94\x7e\xae\x3c\xa6\x5b\x22\x2e\xf1\x69\xc3\xb2\xc1\x44\x4c\x5b\x66\xa1\xaa\xbc\x31\x3c\x36\x8e\x57\x68\x46\x0d\x48\x35\x85\x02\x63\xb8\x64\x54\x0a\x04\x9c\x09\x31\x53\x5a\x55\x33\x3b\xfb\x30\x3d\xc7\xaa\xa9\xd3\x6c\x54\x6a\x58\xe8\x32\xbe\x76\x6a\x57\x12\x7d\x85\x9d\x86\xed\x2f\xbe\x73\xae\xdc\x63\xd2\x42\x40\x0f\x0d\x35\xec\x51\xf2\xf1\x13\x46\xba\xc2\xf6\xfd\xcb\x50\xa1\x73\xf1\x93\xc6\xda\x46\x73\x69\x1d\xb2\xe5\x7e\xbd\x4a\x65\x79\x79\x93\x00\xe1\xd4\x08\x84\xbc\x85\x6b\xdc\x34\x73\x73\x95\xe8\xf0\xa4\x62\x12\x98\xa9\x35\xb0\x21\xad\x94\x64\x63\x01\xee\x9f\xec\x7f\x6c\xf2\xba\xa7\x9d\x7b\x5e\x71\x47\x56\x18\x9c\x5a\x2d\xa6\x8f\xd8\xf5\x60\xed\x5b\xee\x25\x44\x37\xdd\xc7\x5f\x3a\x4b\x8f\xc8\x6c\xe4\x79\x2c\x64\xa2\xce\x36\x40\x11\xc2\xae\x3c\x54\x62\x11\xef\x3b\x3c\xdd\x9a\x57\x68\xdc\x9e\xad\xa1\xb5\x0f\xab\x35\xaa\x71\xd5\xcc\xa9\xf6\xb1\xf3\xe0\x5b\xe7\xc1\x1d\x18\x88\x5b\xf7\x9a\x3f\xdd\x20\xc7\x03\x1e\x12\xf5\xec\x63\x67\xfe\x21\x8d\x94\x34\xdd\xd0\x6f\x55\x1e\x4f\x5b\xd3\x4c\xb0\x74\xf8\xaa\x52\x29\x6c\x9b\x00\x29\x19\x92\xf9\x1e\x37\xcb\x4c\x28\xde\x1f\x9d\x8f\x57\x12\xa0\xcc\xda\x84\x00\x65\xf2\xaa\x85\x7c\x74\xe0\x1d\xcc\x6e\x98\x45\xd3\xb0\x2c\x6f\xc9\xb3\xc5\x79\x10\x4a\xdf\xe1\x5c\xb1\x49\x83\x63\xfa\x6a\x19\x75\x12\x04\x51\x61\xc1\x3e\x5c\x73\xf8\x19\x2a\xb3\x60\x1c\x41\x9f\xcb\x65\x9f\x0e\xc6\x7a\xd5\x84\xc4\x71\x20\x4d\x30\x1c\x03\x74\xd3\x52\xdc\x2b\x97\x72\x46\xad\x72\x3d\xbf\x57\x77\x2f\xdc\x01\xf8\x9f\xe2\x7a\xf2\x6f\x8d\x41\x81\x59\x09\x0c\xf3\xbd\x1e\xe2\xe2\xaa\x7b\x6d\xb7\xbe\xb4\x67\x56\x87\x25\x7f\x5a\x9b\xb5\x62\x22\xe5\x1e\x3f\xf0\xc2\x0e\xa9\x64\xb4\xb3\xf0\xa9\xb3\xb1\x4e\x3e\x72\x72\xe1\x83\x44\x1a\x5e\x4c\xdc\x73\x00\x8e\x50\xd5\x2d\xa0\xea\x5d\x5b\xd0\x47\x2d\x46\xb3\x28\x0b\x47\x8c\x52\x1c\xe9\xa2\x0a\x87\x8e\x9b\xbc\x95\xec\x50\xa0\x8a\xec\x57\x22\xc7\x95\xfc\xd1\xfc\x1a\xab\xe8\xca\x80\x6c\x57\x75\x56\xcf\x3b\x2b\x9b\xed\x0b\x3f\xfb\x6f\xa7\xfe\x4c\xcd\xac\xb3\xfd\x75\x15\x29\x13\x89\x1f\xbc\x5c\xd9\xc8\x71\xb2\x4f\xd3\x31\x8f\x85\xab\xdf\x18\x1f\x1f\xf1\xca\xe9\x45\x6f\xab\x9b\xef\x35\x1f\x3f\x84\x6f\x79\x29\x7d\xb4\x42\x4b\x11\x50\xe3\x8a\x0a\xb5\x54\x2a\xd0\xc5\xa1\x00\xfb\xda\x5e\xea\xe7\x29\x76\xb5\xe0\xb7\x0a\x78\x1a\x3d\x1d\x64\xe1\xa4\xa7\x94\x7c\x3e\x78\x09\x50\xae\xe0\xe0\xd2\x13\xcf\x57\x48\x71\xbd\x55\x8d\xcd\x3d\xd4\xab\x4c\x99\x6a\x89\x5a\x1c\x38\x84\x1a\x57\xa8\x4e\x68\x2b\x70\x86\xd9\x00\xe4\xa8\x5e\x1d\xa8\xe9\x27\xa8\xb6\xfe\x51\xf5\xcf\x86\x49\x19\xc2\x82\xcf\xf5\x6a\xe8\xf3\x11\xd5\x2e\x4e\xc7\xd8\x00\x7f\xf3\xf4\x0a\xf4\xbc\xad\x96\x95\xa3\x6c\x57\x8e\xc9\xa8\xdf\xfd\x3a\xf5\x31\x88\xc0\xd5\x8a\x51\xa7\xc2\xcd\x15\x84\xa3\xbc\xa4\xf5\x4f\xf5\x2b\xaf\xbe\xf2\xda\xef\x8f\xf6\x29\xaf\x1e\x66\xff\x7b\xe5\x70\xb4\x67\x8e\x1c\x10\xc1\x0e\xe8\x01\xef\x26\x8f\x01\xef\x21\xcc\x2a\x92\x0b\xd1\xdd\x50\xd3\x33\x91\xa2\x9f\xab\xf5\xca\x04\x24\xc5\x9d\xe4\xc7\x69\x02\x71\xd1\x9f\x0b\xf6\x5d\x07\x50\xb7\x57\x7a\x7a\x12\x62\x5a\xa6\xa7\xc6\x84\xae\x4d\xb7\xc7\xb6\x9f\xdc\x6d\xaf\x7d\xdb\xd9\x63\x25\xd0\x1d\x1f\x18\xe8\x84\xe7\x56\x74\x0b\xa2\x92\xa8\xc4\x44\xd1\xa8\x4e\xea\x53\xa8\xe1\x89\xf6\xdb\x9e\x07\x05\x08\x39\x92\x35\xd6\x1e\x93\xc0\x0f\x20\xd9\xd6\x40\x46\x66\x69\x7f\x9b\xe3\x63\x03\x87\x07\x23\x11\x77\xbd\x15\x83\x1a\x63\xb6\xbe\xfe\x88\x09\xff\x32\xd6\xea\xe3\x63\x83\xa3\x09\x19\xe7\xc8\x89\x20\x4b\xc6\x3c\x40\x12\x93\x3d\x4d\xd6\x53\xfe\x78\xd5\xb5\x1a\xd3\xb5\x3e\x54\x2b\xcc\x44\x54\x32\xed\x0d\x9a\x66\x5c\xbe\x02\xbc\x3e\x91\x65\x2f\xcc\x07\x82\x5d\xa9\x4e\x56\x29\x97\xcf\x7e\x25\x14\xa0\x0c\xd9\x75\xb8\xc3\xdb\x58\xb5\x38\x46\x56\x45\xd2\xb6\xbf\x65\x77\xba\xb3\x32\xd2\x5e\x07\x1f\x89\xe4\x7d\x5c\x87\xb0\xd7\x55\x08\xec\x4d\x9d\x60\x22\x0b\x28\x09\x7a\x8d\x09\xf0\x7f\x76\x95\xae\xa8\x37\x01\x71\x4e\xf3\xd4\xb5\x18\x56\xef\xfd\x15\x33\xbc\xb9\xc0\x14\xe1\x00\x25\x75\x76\xe2\x50\x3c\x0a\xaf\x21\x1b\x6f\x6b\x4f\xd9\x4a\x98\x8a\x4e\x4d\xa5\xd0\x38\x76\xc4\x92\x39\x14\x62\x67\x91\x09\xf0\x0c\x36\x5c\x2c\x80\x18\xc8\x76\x97\x72\x00\x44\x1a\xe7\x43\x13\x25\x27\xb6\xe9\x14\x0e\xe6\x28\x86\x69\x19\xe6\x3d\x22\x47\x7f\x26\x44\xbb\xc2\xab\xaf\xec\xd1\xce\xf2\x1a\x8f\x48\x86\xd7\xae\x70\xc0\x34\x25\xbc\x1b\x1b\x57\x43\x32\xbb\x7c\xfd\x65\x6b\xe3\xc3\x40\xc5\x75\x59\xb5\x23\x51\x17\xea\x75\x48\x8b\x30\x52\x5f\xbe\xdb\x51\x65\xa8\x67\x05\x35\x41\x84\x83\x21\xeb\xa9\xa8\xc2\x74\x51\x75\xe9\xa2\x12\x21\x5d\xa2\x0e\xce\xb2\xb7\x50\xd5\xbf\xc4\x54\x9a\xd8\xc7\xdc\x97\xb7\x6b\x85\x61\xa7\xd5\x93\xcb\x42\xed\x38\xbe\xdd\xe2\xdc\x5b\x6f\xbb\xc4\x79\x32\xbe\x1d\xe4\x9c\xbd\x60\xcb\x47\xad\xea\x7f\x41\x76\xd8\x1c\x85\x4f\x03\x05\xc3\x77\xa4\x07\x24\xf1\x0a\xf4\x84\xf6\x76\x4d\x2b\x82\xbe\x98\x94\xf7\xa0\x93\x34\x8a\x18\x14\x55\xda\x8f\x42\x36\xe6\xb4\x8c\x65\x4a\x1c\x84\x00\x7d\xb8\xfd\xf2\x7c\xff\xae\x9d\x1e\xc2\x09\x79\xf4\x16\xa9\x89\x14\xd5\x9c\xaa\x43\xdc\x4d\x24\x95\x23\x47\x8e\x1f\x1e\x3a\x56\x40\xdb\x57\x41\x91\x07\x9b\x56\x7d\xe0\x61\x80\xd1\xe6\x08\x3c\xcf\x84\x10\x17\xeb\x9e\x4e\x15\x6b\x2e\xd0\xa1\xa7\xab\xc6\x99\x2a\x26\xef\x8b\xc1\x1e\xf6\x91\x14\x8e\x98\xb0\xa9\xa8\xcf\x04\xf0\x94\x0d\x08\x6e\xf3\x3b\x59\x90\x2b\x1c\x4a\xfc\xe4\x27\x16\xa3\xaf\xf8\xfa\xcb\xed\xeb\x67\xe3\x5d\xbc\x12\xc6\xd8\x0a\x49\x2b\x16\x3f\xac\x89\x2d\x04\xb8\xb7\xe4\x73\xeb\x88\x35\x16\xa4\x29\x26\xfd\x0d\x6e\x6a\x99\xf2\xeb\xec\x04\x8a\xf4\xfc\x91\xeb\x61\x9a\x9a\xf3\xe4\x43\x98\xc5\x81\xd0\x43\x96\x32\x93\x4f\xe2\xf7\x32\x98\x49\x9c\x54\xbd\x8a\x89\x69\xb0\x47\xb7\x91\xa7\x20\xa1\xd8\x7e\xe2\xf7\xf2\x98\x13\x8b\xed\xa7\x68\x21\x8c\xbd\xea\x0b\x35\xd0\x78\x04\x30\x5e\xbd\x13\xa9\x48\xd1\x52\x94\x9a\xd0\x08\x8f\xce\xbd\x08\xb5\x2d\x33\x90\x92\x4f\xa9\xa9\xba\x19\x93\xb9\x05\x97\x04\xdd\x17\xbc\x60\x1c\xff\x85\x88\xbc\x1a\x9c\xb9\x4d\x67\xe5\xa9\x34\xb9\x14\xe6\xc8\x7f\xc7\xc9\x2d\xf1\x5f\x8b\x61\xc5\x2d\x9d\x7c\x98\x40\x4f\xae\x43\x2d\x30\x30\x48\xcd\x30\xe0\xa3\xf4\xa0\x74\xe0\x00\x7b\xc2\x8d\x4b\xe0\xdd\x64\x82\xe7\x8f\x66\xf6\x43\xb2\x75\xd3\x8b\x43\xe7\x21\x1c\xba\x85\x6d\xf9\x9d\x2a\xd8\x34\x66\x73\x7c\x91\xb4\x48\xf4\xd8\x0b\xcf\xe8\x41\x33\xf2\xc5\x05\x90\x7a\x5d\xd1\x11\x60\x18\x50\xcf\x2d\x3d\x59\x50\xec\x3a\x66\x92\x5a\x8b\x13\x16\xaa\xf0\x13\x3a\xb0\xe5\x21\x89\x53\x9b\xe2\x5e\x95\xfe\xb6\x96\x0b\x50\x19\x1e\xba\x0f\x50\x51\x95\x4c\x16\x50\xf2\xf4\x4e\x74\xa7\xe5\x97\x9a\x25\x72\xd0\xe4\xa9\x0e\xc9\xf5\xde\x83\x30\xc5\x7d\x2d\x27\xb0\x12\x7c\x84\xa8\xe5\xa5\xfb\x5e\x02\x96\x38\xc5\x81\x9a\x0a\xbf\x35\x8d\x25\x8f\xdb\x12\xd4\x4c\xb6\xae\xff\x10\x2a\xd6\x74\x33\x25\xdb\x73\x65\x43\xf5\x94\xbe\x60\x02\xb7\xf0\x96\x83\xa2\xcb\x88\x6a\xc7\x79\xd5\x34\xd6\x2e\x35\x36\xef\x05\xb2\xe5\xa1\x7d\xbc\xaf\xb1\x71\x35\xb4\xbd\x04\x55\xb2\x67\x17\xd1\xb6\x13\x67\x97\x4b\x59\xe4\x01\x9d\xd8\x4b\x79\x1c\xed\x3e\x2a\xfe\xb7\x5e\x3b\xc4\xc6\xed\xf5\x59\x5b\xb3\xa0\x36\x0c\x7b\x04\x7f\x1f\x00\x5f\x16\xb8\xb3\xea\x71\x65\x03\x89\xba\x44\x28\x34\xb0\x32\x94\xc6\x04\xea\x1f\x97\x4a\x03\xef\x86\x28\xfa\x62\x5f\x31\x25\x3c\xd6\xd8\xb0\x29\x48\x91\x0b\x97\xb0\xc6\x31\xd1\x5b\xac\x11\xaf\x13\xba\xc7\x41\x42\x94\x1e\x25\x89\x5f\xb8\xc9\xf3\x63\x6c\xdd\xe3\xd1\x60\x6e\xc2\x78\xe7\xa3\xcb\xd2\x71\xca\xc0\x81\xaa\x18\x55\xad\x00\x91\x11\xec\x62\x63\x59\x67\x0c\x13\xfd\xce\xca\xc6\x94\x1e\x7d\x0f\x26\x4a\x1b\x6b\x73\xcd\xef\xef\x37\xe7\xbe\x76\x56\xce\xb7\xee\x9d\x6d\xdd\xde\x70\xb6\x6e\xc8\x91\xe1\xdb\x2b\x6d\x35\x26\x78\x24\xee\x53\x31\x7c\xac\x97\x29\x24\x8f\x36\xc6\xd4\x7e\x04\xde\xbe\xea\x6f\xed\xd5\xa9\x90\x5a\x43\x70\xf3\x4c\x91\xdf\x21\xb8\xf7\x4a\xe9\x12\x19\xa6\x24\x04\xb2\x70\xe1\xd4\x4c\x00\xcd\x6e\xbe\x52\xc0\x61\x7b\x09\x66\x37\xf3\xb6\xf4\x98\x58\x39\x9a\xa3\x7e\x77\xa9\xd0\x56\x82\x74\x78\x81\x33\x58\x3d\x15\x1d\x47\x12\x28\xe8\x84\xb0\x84\x35\x11\x44\x4f\x99\xcd\xde\xc1\x0c\x32\xa9\x4e\x1f\x24\x81\x92\x92\xc5\xb4\x4a\x4d\xc5\x89\xc1\xd1\xb1\xa1\xe1\x63\x31\x93\xe8\xe2\x42\x73\xe9\x7b\x99\x49\x74\x42\x2d\xeb\x25\xe5\x7f\x8d\x0d\x1f\x53\x8c\x89\x3f\x43\xa1\x3b\x9e\x44\xd0\x27\x71\x16\x78\x9a\xb9\x22\x77\x95\xab\x9b\xe4\x34\x5f\x53\x4d\xc6\x94\xcd\xee\xeb\x7d\x9d\xdd\x41\xd3\xb1\xd6\xbf\x5e\x2d\x94\xf5\x2a\x44\x2d\x82\xb4\xa5\xe2\x04\xea\x57\x0e\x61\x36\x61\xb7\x96\x3e\xf7\xc2\x67\x8d\xa2\xe1\x5a\x1a\xe8\x8f\x8b\x68\x2a\xa1\xb7\x14\xf6\xa5\xc5\xe5\x24\x8e\x1e\x99\xbf\x75\x76\x05\xc6\x9d\xc7\xf0\x1f\x8b\xdb\x41\x22\xbe\x4a\x8f\x85\xd1\x37\x39\xab\x8c\xf0\x23\x2e\x5a\xd5\x70\xef\xfe\xf6\xb7\x97\xe9\x40\x93\x43\x63\xc5\x05\xb6\xf6\xbc\x4f\x0d\xf9\x0f\x03\xa3\xc7\x86\x8e\x1d\xa6\x0c\x36\x74\x5a\xc0\x4c\x41\x29\xc3\x3b\xb8\x21\xd6\xc2\xb3\xeb\xd1\x34\xc0\x78\x2d\xd0\x6e\x4d\xeb\x53\xd3\xe5\x59\x88\xda\x2a\xb2\x36\xea\x94\x56\x42\x50\x7f\x0c\x00\xa8\xa8\xb3\xca\x84\xc6\xe4\x18\x0a\x34\x04\xa7\x33\x98\x55\x14\x5f\xc9\x5f\x9a\x5a\x11\x22\x80\xd1\x86\x88\xe8\xad\x69\xad\x5c\x66\xf0\x2d\x08\x2b\x86\xfc\x70\xd1\xd6\xa8\xc7\x5f\x39\x1f\x5e\x22\x1e\x9c\xcd\xf5\xd6\xfb\x90\xa2\xbd\xbd\xbc\xcc\xce\xcf\xf6\x57\x67\xc1\x97\xc2\x8d\xd8\xa3\x62\x58\xdb\x17\x2e\x53\x2a\x16\x1a\x10\xf4\x64\x64\x4d\x21\x37\xd8\x27\x3f\x36\x36\x6e\x36\xd6\xd7\xdb\x2b\x1b\x90\x69\x6e\xe1\x26\x25\x34\x26\x00\xce\xd5\xf3\xce\xe2\x8f\xed\xe5\x55\x26\x90\x30\x09\xaa\x79\xf1\x99\xb3\xb0\x4a\x30\x82\xf4\x09\x77\xbf\x82\x01\x28\x3c\x63\xa4\x81\x71\x2d\x6c\x89\x58\x94\x31\x92\x9c\x77\x02\x57\x7b\x53\xb3\x6a\x46\xb5\x2b\x4c\xb4\x7b\xd9\x50\x21\x3e\x26\x73\x55\xa7\x58\x13\x2f\xa9\x10\x85\x35\x81\x01\xb7\xc7\xcb\x99\x5c\xcb\x31\xc4\x95\xdc\x19\x4b\x7d\x10\x11\x80\xb5\xf2\x0d\xb3\x36\x8d\x6a\x51\x18\x26\x0b\x46\xe9\x40\xd9\xa8\x97\xd8\x1e\x50\xaf\x96\xcc\xd9\xbd\x96\xc2\xee\xa8\xea\x84\x6a\xb1\x7d\x61\x80\x01\x07\x03\x65\x59\x2b\x4d\x79\xf1\xf1\x2e\x36\x0c\xb3\xc1\x01\x87\xd0\xab\x12\x19\x9d\x02\xb0\xfc\x89\x34\x7b\x69\x44\x89\xd7\xed\x0e\xf2\x09\xb0\xfa\x21\xdf\x8f\x6a\xdb\x5a\xa5\x66\x7b\x08\x2a\x18\xe1\x40\x99\x71\xd4\x62\x58\x3f\xfe\x4f\xcf\x27\xc4\x5f\x8e\x13\x0d\x79\x10\x29\x53\x62\x92\x81\x69\xcc\xba\x85\x40\xba\xc6\xc0\x17\x2e\xc4\xfb\xa6\x87\x56\xd6\x13\x93\x10\x8a\x12\x8a\x05\xeb\xc2\xb1\xb9\xef\x86\x11\x41\x52\x50\xbe\xdb\x52\xe7\xbb\xf9\xa2\x0a\xa0\x82\x2a\x90\x0a\xca\xe8\x79\xc9\xa9\x41\x3e\x2b\x35\x2f\xc2\xac\xc8\xc6\xad\x5a\x8f\x8b\xef\xa4\x45\xa3\x40\xe0\x17\x26\x09\x6d\x2f\x3f\x68\xac\xad\x8f\x05\x0a\x45\x36\x2f\xce\xb5\x7f\xbe\xdb\xfe\xf9\xcb\xf6\xf3\xdb\xdb\xf7\x9f\x72\x83\x03\xe6\xb8\x05\xe1\xf4\xfc\x15\x67\x71\x05\x33\x94\x5e\xa6\x82\x13\x01\x8b\x04\x05\xd5\x2e\xdc\xdb\xbe\x0d\x99\xf8\x9c\xa7\xbf\x34\xd6\xae\xf3\xfc\xb8\x4b\x8f\x02\x03\x0e\x97\xfe\x1b\xab\xcd\x2b\xcb\xce\xfa\xc7\xa0\x2a\xbe\x71\xbb\xb1\xf6\x41\x63\xfd\xbc\xf3\xf8\x81\x73\xee\x39\x2d\xb8\xff\x9c\x7b\xaf\xbd\xf2\x90\x48\x6d\x5e\xfc\x1a\x16\xf3\xb5\xab\x01\x28\xe0\xb7\xce\xa9\xb8\xe8\xcc\xff\x04\x5f\x53\x69\x73\x37\xb9\xfc\xf6\xfb\x5b\xce\xea\xf9\x00\x51\x98\x2a\x35\x40\xf5\x47\x97\x79\x2b\xcc\x5b\xe3\xc7\xca\x38\x6e\x6c\xde\x71\x56\x3f\x6b\xaf\xdc\x60\xdb\x42\xeb\xee\x43\x5f\x67\x15\x61\x3a\x31\xf4\x6c\x13\x61\xdc\x41\xe7\x20\x8e\xae\x2f\x80\xd1\xf7\xe7\x9d\xf3\xff\xc1\xf8\xa3\x40\x5a\xd6\xfd\x7c\x73\x59\x3d\xcf\xa0\x6f\x9f\xbd\xc5\xb8\x27\xbe\xfd\x64\x41\x4c\xd8\x8d\xf9\xee\x26\xd7\xae\x02\x0f\xb8\xd7\x35\xdf\x7b\x44\xbd\x12\x39\x77\xe0\xb6\x37\x37\x1f\x3a\x7b\xd8\x8d\xd0\x59\xbe\xdc\x5c\xb8\xc6\x86\x19\xee\x5e\x58\x57\xd0\x79\xf2\x90\x31\x2d\x73\xf6\x46\xed\x6a\x3a\x6c\x1b\x36\x08\xf5\x98\xe1\x31\x30\x78\xff\xb3\x6b\x79\xf9\x52\x88\x4d\x68\xee\x12\x86\x98\x4e\xb6\x72\x5c\xe3\x9c\x15\x5a\x79\x32\xd8\x52\x2d\x33\x84\x50\x97\x17\x03\xe5\x4d\xbd\xa2\x9a\xb3\x18\x2c\x55\x84\xe0\xe2\x4e\x88\xbd\x9f\x48\x8c\x22\xab\x95\x31\xde\xb0\x67\xd5\x63\x72\x0a\x1d\x56\x5a\x05\xab\x02\xc1\x62\x9b\x79\x55\x09\xae\x1b\x34\x1a\x91\x3f\x40\x7c\xc3\xd7\xf0\x4b\xc8\xaa\xaf\x55\x54\xca\x89\xd8\xcb\x0f\xee\x90\x0c\x07\xd8\xa5\x90\x3a\xd6\x0c\x7f\xf7\x2b\xca\x1f\xe8\xe4\xac\x30\x98\x70\x94\x9e\x76\x37\x2b\xfe\xb9\xe7\xa3\x80\xd9\x74\xea\xe4\x40\x51\x02\xd7\x11\xfe\x51\x67\xfb\xa8\x99\x58\x3d\x42\x51\x4b\x25\xcc\x37\xce\x06\xa9\x8b\x84\x09\x0d\xd3\xf0\x53\x02\xe8\x7e\x65\x18\x74\xb4\x71\x67\x48\x45\x9f\x82\x38\xfd\x52\x9f\x8b\xac\x93\xe1\x8e\x11\x4b\xdc\x40\xe8\x51\xec\x61\x10\xbd\x83\x29\x7c\x0b\x83\x49\xeb\x66\x46\x0e\x34\x75\xce\xcf\x6f\xbf\xff\x88\x16\xef\xff\x0c\x0e\x10\xad\x65\xb6\x15\xd0\x42\x86\x0d\xcc\xb7\xda\xd8\x3a\x76\x16\xce\xc3\x25\xef\xce\xb9\xf6\x7f\x9c\x6b\xae\x5f\x6b\x3c\xbd\xeb\x35\xa1\xb0\x7f\x58\x91\x8f\x1f\xc0\xa6\x48\x29\x96\xd9\x26\xb3\xb6\xc1\xc4\x8d\xed\xb9\xf7\xe0\x6e\xb4\xb4\xde\xbc\xbd\xc2\xc8\xe2\xf2\xc3\xea\x79\x3f\xfc\xc6\xc6\xd5\x99\x57\xe9\x41\x7b\xf9\xbe\xb3\xf0\x51\xf3\x93\x7b\xce\xea\x39\x26\x4d\xcc\xbc\xe6\x7f\x4c\xe9\xc8\x30\x60\xf4\x29\x68\xd8\xee\x9c\x63\x9d\x08\x59\xd7\xee\x9c\xeb\xda\xa7\x3f\x7d\xde\xbc\xf2\x05\xdb\xbe\x67\x5e\xa3\xab\x12\x50\xb7\xf0\x61\x63\xe3\x7b\x6f\x77\x60\x3b\xe2\xf6\xad\xc7\x58\x26\xb4\x6b\x53\x62\x3b\x33\xa9\x81\x7c\x35\x44\x09\x3f\x58\xfe\xbe\x3e\xcb\xb6\x53\xc8\xf2\x85\xd2\x51\xf3\xf1\x17\x6c\xd7\x69\x6d\x3c\x26\xae\x29\x46\x78\xfb\x8b\xcf\x9c\x07\x37\xbd\x94\x00\x0c\x37\xe8\x70\x6e\x7d\xe5\x3f\x2e\xda\xcf\xcf\xb6\xbe\xde\xa0\x5d\x06\x36\xad\xd5\x1f\x28\x1b\x2b\xeb\x8a\xee\x4d\x9c\x76\x4e\x1f\x31\xde\x9e\x4c\x54\xc9\x05\x23\xff\x41\x35\xe1\x0c\xde\x0f\x99\x7e\x28\x2f\xde\xb4\x6d\xd7\x02\xc9\xf1\x14\x4a\x21\x03\x86\x6d\xdf\x27\x56\xe0\x1b\x8b\xe7\x27\xe4\x4b\x0e\xc4\xdd\xe4\x23\xf6\xcb\xb9\xe6\x7f\x7c\xc0\x46\x17\x8e\x05\x37\x79\x1e\x06\x86\x0d\x8c\x8c\x53\x06\x3d\x6f\x1f\xa7\xab\x35\xbc\xe4\x5f\x5e\x5c\x50\xbc\x3c\x7b\x72\x32\xa6\xcb\x38\xb9\x18\x42\xd9\x1b\x58\xc6\x90\x4f\x2b\x91\x72\x9e\x70\x19\x53\x64\x39\x17\xd6\xb7\xaf\xdf\x96\x21\xc0\xd4\xd9\x06\xc4\xfa\x93\x49\x65\x46\x09\x93\x41\x1e\x1a\x3a\x32\x88\x5b\x86\xa6\x96\xf0\xea\x68\x97\x98\xc0\x15\x49\x8e\x04\x84\xd4\xd4\xfd\x6f\xbd\xc6\x86\xb4\x38\xad\xcf\x68\x1d\x6d\x1d\xbf\x34\xa7\xf2\x56\x72\xae\x7e\xd0\xda\xfc\xa6\x79\xf3\x42\xf3\xfe\x97\x5e\xe8\x5c\x16\xe7\xa5\x37\x8f\x1e\x3f\x32\x3e\x34\x32\x30\x3a\xbe\xef\xd0\xf0\xe8\xd1\xc2\xc1\x81\xf1\x01\xe5\xc0\xf0\xb1\xf1\xc1\x63\xe3\xca\x1b\x43\x07\x0f\x0e\x1e\x7b\x2b\x92\x9a\xd0\xc6\x5c\xb8\xc2\xfc\x18\xdb\x77\xae\xb5\x6f\x2d\xbe\x25\x43\xd7\xc8\xe8\xd0\x89\x81\xf1\x41\x05\x61\x26\x12\x42\x3b\x07\xa1\xce\x80\x34\xac\xcc\x9e\x15\x87\xd6\x97\x59\x4f\x0a\xe1\x54\xd9\x98\x60\x67\x1f\x4f\x49\xf2\x96\x27\xaf\xbf\xe9\x7a\xb4\x5a\xfd\xfd\xfd\x6f\x29\x6f\xba\xcf\xdd\x0f\xa3\x49\x62\xcb\xd8\xf9\x61\x6e\x7b\xee\x22\x3b\x2d\xde\xe2\xe9\x63\x94\x37\xe9\x2e\x4a\xb0\xe8\x19\xff\x42\x82\x68\x0a\xf7\x8b\xa4\xa0\xfb\xb5\x20\x5c\x14\x93\xe8\xb8\x86\xaa\x3b\x7e\x55\x4d\x82\x6f\x19\x77\xd9\x74\xcb\x6c\x79\x8a\x27\x2e\x08\x88\xfb\x8d\x26\x12\x94\xba\x14\x58\x14\x69\x31\xde\x6f\x09\x94\xd9\x46\x74\x47\x90\x6c\xce\xe4\x6f\x99\x41\x28\x47\xdb\x98\x02\xef\x44\x20\x1a\x67\xb4\x98\x24\xea\xf3\x67\xdb\xcb\x6b\x52\x80\x53\x55\x4e\xc9\x5c\xba\x26\x36\x4f\x79\xb6\xdc\xe4\x60\x27\x2e\x9a\xaa\x35\x1d\xd7\x3f\xfe\xbc\x92\x3f\x7f\xd3\x5c\x7f\x5f\x0e\x51\x4c\x0f\xc9\xa5\x7c\x46\x67\x15\x37\x73\xd0\x24\x3b\xe9\x63\x98\x68\xaf\x7f\xd7\xd8\xd8\xa2\x28\x5a\x8a\x3a\x77\x1e\xfc\xd0\xfe\xf9\xa1\x04\xda\x4e\xc6\xda\xe8\x2e\x03\x29\x90\x67\x8e\xa5\xee\x93\xc1\x83\x6b\x73\x7f\xc7\xb3\x25\x12\x5d\xcc\x97\xe9\xb1\xb9\x67\x78\xb4\x5d\x22\xec\x93\xf4\xf0\xc1\x16\x8d\x97\x31\xb0\x76\xc7\x8c\x54\xf4\x87\xa9\x71\x15\x6b\xf5\x48\xf0\x07\x46\x8e\x33\xd1\xa0\x79\x4f\x66\xc1\x27\xad\x94\x9e\xf7\x62\x90\xe3\x36\x70\xe9\x85\x57\xea\x54\xdc\x8f\xde\xaf\xb1\x4e\xbf\x14\x70\xac\x2b\x19\x09\xb8\xe7\x7d\x7a\xc8\xba\x95\xb4\x6f\xb7\xbe\x3a\xcb\x2e\x68\x72\xb0\xa3\x05\xdc\xd6\x97\x67\x5b\x9f\xca\x64\x39\x00\xa8\x31\x36\x3d\x04\x2b\xb3\x70\xd2\x1a\xd5\xb3\x47\xde\x53\x9c\x44\x0c\x82\xe0\x6b\x41\xb8\x31\x01\x3e\xce\xdd\xbb\x12\x79\xde\x60\x8b\x88\x9e\xd2\x3f\xde\xf7\xd2\xf7\x49\x90\x4c\x91\x41\x31\x67\xe2\x93\x1f\x9d\x6b\x2b\x72\xfb\x3a\x4f\xba\x8d\x7e\x2f\x23\x26\xe8\xe2\xec\x59\xd7\xff\xc5\x9a\x36\xea\xe5\x92\xab\xce\x83\x32\x2e\xd1\x33\xaa\xab\xfe\x7d\x17\x28\x30\x07\xbd\xbf\x05\x3a\x8d\x6f\xd6\x65\x88\x9c\x89\x0b\x92\x93\xae\x9f\x4a\xa7\xb4\x62\xd7\xf1\x96\x0e\x72\x2b\xdc\x3e\x2d\xa3\xac\x29\x5a\x71\xda\x20\x51\xd7\x35\xa4\x31\x0a\xcc\x59\x5f\x60\xe0\xc1\xce\x56\x16\x97\xca\x03\xaf\xa4\xa4\x00\xa2\x1c\x88\x5e\x56\x44\xca\x46\x4e\x36\x2c\xd2\x8d\xd3\xab\x64\x1c\xe9\x19\x64\xfc\xc5\xba\x71\x90\x1b\x85\x9c\x1b\xc7\xa4\xa9\xa1\x6e\xb3\xa6\xea\xd1\x53\x33\xfc\xa3\xd4\x38\x20\x45\x69\x24\xec\xe0\xcb\xd4\x30\xf5\x6a\xd1\x30\x21\x65\xb2\x52\xb7\xd4\xa9\x18\xe7\xad\xb5\x2b\xcd\xc7\x5f\xb6\xee\x2f\x83\x7e\x11\x55\x43\x52\xc8\xb8\x43\x2d\x4f\xfb\x54\xd6\x2b\x7a\x34\x47\x09\x5f\x0b\x63\x45\x21\xcc\x4d\xaf\x3d\x04\xa9\xb0\xc1\xff\x8e\x5d\x00\x2c\xa3\xba\x9f\x72\x8b\xe8\x76\x60\x92\xf5\xc1\x86\x6d\x9f\xb2\x3a\x95\x8d\xe0\x13\x2a\x74\x14\x33\xcd\x49\xfb\x18\x8e\xce\xb9\x7a\xd7\xf9\xf4\x5e\x14\xba\xed\xb9\x39\xe7\xc2\x3a\x55\x15\xdd\xd7\x7e\x7e\xdd\xf9\xf4\x73\xb6\x1e\x62\x30\x0b\x77\x42\x8c\x60\x2c\x9b\xcf\xc0\x03\x1d\x73\x8a\x50\x8f\x48\x01\x9f\x41\x4f\x12\xbd\x3a\xcd\xae\xd1\x36\x55\x64\xd4\xab\x9e\xc3\x54\xf4\x62\x5e\x9b\x77\xae\xdc\x00\x3d\xd8\xad\x7b\xcd\x1b\x0b\xad\x8d\xaf\x9b\x17\x9f\xb7\x9f\xac\x38\xcf\xce\x65\x20\x83\x42\xa4\x30\x2d\x0d\x3f\x2a\x0e\x1c\x3a\x35\x36\x3e\x70\x78\xe8\xd8\xe1\x53\xe3\x43\x47\x07\x87\x8f\x8f\xbb\x3b\x56\x42\x4e\x23\x46\x53\xb0\xfc\x82\x33\xb7\x99\x0e\x58\x6e\x54\x8f\x8e\x1f\x1f\xc9\x8d\xea\x24\x60\xa9\xa9\x2e\xab\x13\x5a\xf4\xd9\xda\xf5\x56\x00\x2a\x38\x07\xb9\xd6\xb5\x18\xf0\xe1\x9f\x89\xe1\xa9\xd7\xe8\x82\x14\xbd\x22\xe0\xae\xc6\xf6\xdb\xb0\x2f\xd3\x0a\x59\xb8\x1f\xc6\x08\x42\x3d\xef\xd3\xf3\x00\x8e\x54\x98\x8a\xd6\x2b\x00\xc5\xe3\xd7\xb9\xae\x31\x7a\x17\x11\x69\x2a\x4e\x0f\xa6\x43\x2d\x81\x73\x0e\x07\x0a\x79\x35\x2d\xdd\x8e\x4b\xd2\x28\xd6\x38\x3d\x4d\x60\xb2\x8a\xee\xfc\xed\xeb\x67\x9d\xe5\x3b\x12\x70\x2b\xf1\x29\x27\x41\x77\xfe\x58\xe6\x0e\x44\x70\x63\xb6\x68\x04\x2c\xb3\x45\xc7\xca\x54\xd2\x49\xae\xff\x7f\xde\xae\xaf\xa7\x95\x22\x8a\xbf\xfb\x29\xf6\x91\x87\x6a\xe2\x47\x40\x08\x4f\x16\x1e\xd0\x27\xe3\x03\xd4\x2a\x0d\xd0\xad\xdd\xae\xd8\x98\x26\xf8\x80\xf0\x02\xc1\x07\x15\x50\x62\x34\x60\x8c\x11\x88\xc6\x10\x4c\xef\xcd\xfd\x32\x5d\xb8\xfd\x16\x77\xce\x9c\x99\xed\xec\x76\xe6\xcc\xec\x69\xb9\x8f\xed\xce\xfc\xe6\xec\xee\xfc\x39\x7b\xfe\xfc\x4e\x3b\x6e\x47\x9b\x1b\xc9\xc4\x46\xeb\x9e\x73\x54\xd3\x2a\xe3\xb9\xef\xa2\x78\xb1\x02\x26\xb8\x0a\x60\x07\xd6\xc1\x85\xca\x24\x26\xe6\x20\xa9\xcc\xa1\x19\x0c\x5d\xb9\xc8\xe9\x8e\x7b\x2f\x43\x06\x8a\x41\x00\x43\xec\x79\xa0\x39\x9f\xc9\xb3\xa0\xbb\x5f\x36\xb3\xfc\x84\xf8\x20\x25\x56\x6b\xe9\x6a\x30\x2a\x28\xf2\xb9\xa5\x5f\xfa\x01\x88\x0d\xdf\xdd\x34\x7c\x3c\xd1\xcf\x7d\x3c\x1b\xae\x69\x26\x36\x91\xf7\x3d\x07\x70\xb3\xba\xc5\x66\xbf\xe8\x2e\x09\x9a\x51\x4c\x94\x70\x29\xe1\x38\xa0\x04\x20\xca\xb3\x78\x90\x31\x8c\xd9\xed\x97\x99\x6e\x10\x8c\xfd\x25\x5d\x38\x7f\x7c\x70\x3c\xfe\xfd\x92\xa1\x5f\xc0\xf1\x88\xc4\x00\x7b\xb2\x3e\x80\x41\xb3\xb3\xd9\x6a\x43\xf8\x52\x2b\x89\xc4\x31\xb8\x41\x29\x21\x3c\x90\xe0\x7b\x07\x78\xc5\xbc\xed\x9e\xbb\xf6\x46\x15\xc6\xd0\x7b\x76\x42\xd6\xd8\x55\x9b\xb6\xfc\x78\x9b\x7d\x18\xf7\x0b\x35\xc7\xe1\x9c\xd7\x1e\x16\x64\x36\xeb\xb1\x0a\x2e\x75\xcb\xcd\xb5\xf8\x05\x72\xa7\xcc\x4c\x99\x32\xe5\x0c\xb6\xee\x81\x7c\xe0\x10\x0a\x96\xb9\x30\xaf\x04\xd3\x9e\xcc\xc8\x64\x18\xce\x6b\x3d\x0f\x1e\x6b\x8d\xb1\xdd\x74\xab\xc7\xea\x86\x64\xad\x88\x19\x86\x20\xcf\x59\x7b\xa3\xaa\x63\xbc\xeb\x8d\x58\xb0\x37\xab\x3a\x8e\xf7\x9d\xb0\x5e\x85\xac\x6b\xe2\x46\x2e\x5d\x0e\xc7\x6d\x51\xb3\x75\x34\x3c\xe1\x60\x92\x49\xa9\xec\xe4\x52\x23\xcf\x9e\x30\x7c\x39\x5a\x55\x1b\x85\xc0\x47\xf1\x19\x87\xbb\xcc\xb4\x23\xe4\xee\x31\x7d\xc9\xb2\x46\x09\xe9\x2d\x95\xa5\x45\x46\x0f\x37\x3c\x70\xe2\xfc\x65\x9f\xbc\x68\xdf\xa5\x9e\x45\xe1\x72\x05\xdc\xb8\xd3\xf1\x78\xaa\x64\xc1\x77\x3e\x76\xb4\x21\xf3\x3a\xde\x17\x1f\x96\x58\xf9\x90\x30\xe0\x43\x36\xf3\xf8\xf0\x38\xbb\xbd\x10\x6a\x6c\x76\x7a\xc2\x1e\x1b\xb2\xa9\x09\x23\xe1\x3d\x6f\x41\xf5\x64\xe9\x83\x20\xcf\x80\xd7\x21\x40\x4e\xfd\x54\x71\x16\xc2\x11\x1b\x83\xc2\x40\x9c\x26\x7f\x3d\xfd\x7a\x0d\xb1\xd7\xb7\x57\xaf\xef\x38\x53\x2b\x6d\xfb\xac\x74\x96\x16\xe1\xe8\xd3\x7c\x61\xc6\x86\xe3\x1e\x32\xb0\x5b\xb8\x1c\x04\xf9\x40\xca\x22\x1f\x10\xbd\xdc\x0b\xf2\xe9\xe5\xf7\xd9\xe5\x3e\x13\x95\xd8\x4b\x25\x2c\x67\xd3\x93\xae\xb3\xe7\xa8\x01\x01\x34\x2b\x24\x2c\xab\x3a\x43\x81\x0b\x8e\x80\x2f\xf3\xa1\x30\x86\xfa\xca\x93\x30\x3a\x75\x3d\x18\x79\x4f\x86\x62\x2b\x76\x61\xf4\x70\xc8\x94\x14\x99\x73\x26\xd3\x7e\xdd\xfb\xee\x2f\x7f\x96\xca\x8c\x64\xdf\x9d\x67\x07\xd7\xe3\xe1\x99\x58\xe8\x78\x89\x21\x51\x9f\xd0\xb5\x1e\xcf\xee\x78\x0f\xf0\x1b\x2c\x68\xa1\x82\xfe\x07\x83\x68\x41\xd2\xc0\xe1\x63\xd3\xf5\x2e\x54\xda\xed\x7a\x0f\x02\x4d\x07\x03\x77\xf9\x1d\x3b\x9a\x4a\x6a\xf7\x82\x55\x11\x7a\x69\x45\xf3\xfa\x74\x5a\x94\x38\xf6\x76\xac\x91\x68\x4e\x0f\xa2\x65\xa5\xd1\x74\x91\xf1\x68\xab\xb9\xd3\x89\x3e\x59\x5a\xab\xd7\x17\x57\x97\xdd\x41\xd7\x96\x3e\x18\x64\xcd\x09\xaf\x96\x60\x69\xbb\xb7\xf6\xb9\x4a\x9d\x49\x04\xa8\xce\x6e\x72\xc7\x1f\x59\xbb\x61\x22\x0c\x27\x18\x09\xe0\x30\x9c\x4e\x73\xdf\xf8\xa2\xef\x02\x7a\x54\x19\x7d\xb9\x95\x6c\x7f\x0c\x7b\x2e\x16\x98\x55\xff\x28\xaa\x2b\x4a\x08\xa3\x19\x32\x01\x16\xc1\x98\xd2\x08\x65\x42\xdf\x16\x19\xf8\x54\x6a\x9b\x5d\xfd\xc3\x33\xe9\x5b\x03\x62\x54\x45\x5b\xcd\xda\xb3\xb4\xa2\x5f\x75\xb1\xf0\xbe\xa4\xf0\x31\x72\xae\x13\x2c\x69\x8a\xc5\x7d\x27\x24\x3e\xe4\x5c\xb2\x0d\x6e\x2f\xd1\x6f\x11\x22\x27\xfd\x51\x75\x5d\x8b\x2c\x3f\xe3\x43\xa8\xe8\x6a\xe6\xf0\xf2\x92\xac\xb4\xfb\x19\xd2\xe1\xe5\x73\x49\xf5\x73\x99\x3c\x0d\xf0\xc9\x08\x3d\x12\x8c\x12\x50\xeb\x94\x36\x3d\x9b\x80\xf6\x7b\xcd\x81\xe1\x06\x7e\xfe\x2f\xbb\xba\x60\x57\xaa\x02\x4e\xa8\x1d\xcc\xc2\xcc\xd9\xa5\x30\x5b\x8a\x92\xaf\xdc\x85\x1d\x45\x2d\xb0\xea\xcd\xdd\xe2\x02\x13\x7f\x04\xac\xaf\x49\xab\x7c\x79\x4d\x90\x98\x92\xc4\x9f\x35\x77\x3e\xea\x77\x40\x14\xfd\xd3\x5a\x0b\x9e\x94\xcb\x0d\x02\x1f\x61\x92\xdb\x88\x27\xde\x9a\x0e\x15\x50\xe8\x9e\x58\xf7\x80\x1e\xb3\x8c\x0e\xe5\x93\xba\xf1\x17\x5d\x2a\x07\x27\xb4\xdb\x2c\x72\x24\x69\xa3\xd1\x6c\x52\xda\x65\x58\xa7\x2a\x32\x14\x83\x2c\xa3\xdd\x34\xc1\xbc\xeb\x28\x91\x9a\x8c\xe4\xc7\x4d\xc5\xc6\x27\x55\x45\x4a\xae\x12\x50\xf6\xea\x60\xfc\xdb\x30\x4f\xec\xcd\x6e\x7e\x7a\xfa\xfb\x8f\xd1\xc3\xbf\x8f\x47\x3f\x8a\x3d\x2b\xdb\x7f\xf1\x3c\xe2\xce\x4b\xcc\x79\x09\x58\x21\xfc\x75\xba\xf3\x8c\x11\xaf\x25\xbe\xd9\x05\xdc\x56\xe2\x6e\xff\x43\xf8\x74\x1e\x0c\xea\x05\xb3\x41\xcd\x0c\xbc\x2b\xb4\x8b\xac\x21\x85\xb5\x9c\xbc\x2a\xd1\xed\x74\xdd\xe5\x09\xf7\x63\x7e\x49\x9f\x9b\xb5\xc8\xf4\xe8\x4a\xf2\xca\xd5\xb8\xfd\x01\x84\x21\xe8\x2e\x8b\x18\x25\xef\x51\xc8\x3d\x77\x86\x71\x19\xe3\xf3\xd3\xec\xe8\xde\x22\x29\xd2\x6f\x59\x25\xc5\xf3\xb3\x16\x41\xc8\xed\xb7\x8a\xc4\x21\x54\xcc\x50\x5b\x0a\xc8\x83\x6e\x1f\x7d\xea\xe0\x71\x21\xeb\x58\xea\xbf\x26\x29\xf9\x3e\x17\x51\xa9\x67\x7e\x88\x14\xc7\x80\xe9\x8d\xe9\xf1\x46\x21\x78\xde\xb4\x5a\x57\xe6\x4a\x2d\xaa\xd7\x7c\x39\xdd\x47\x55\x49\x92\x66\xcd\xf9\x0a\x21\xa7\xc3\x32\xe6\x69\x78\x26\x51\x65\x88\x8a\xf2\xf5\x4a\xc7\xc4\x7b\xb9\xa2\x69\x51\x33\xe3\xae\x79\xa5\xa8\x7f\x36\xb6\x9a\x8d\x6d\x83\xe5\x02\x8d\xab\xa4\xba\xf9\x56\x87\xaf\xf2\x5c\xb4\x86\x04\xba\x97\x54\x20\xc5\x47\x18\xae\x5e\xf1\xe7\xd7\xe6\x2e\x34\xb5\x12\xa8\xfb\x25\x61\x47\xff\x9f\x8d\x86\xd7\x16\x6c\xb5\x22\x7e\xf0\xc5\x5a\xbd\xf3\xe9\x9b\x00\x00\x00\xff\xff\x7c\x99\xef\x3f\xa9\xf6\x02\x00") - -func cf_i18n_resources_zh_hans_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_zh_hans_all_json, - "cf/i18n/resources/zh_Hans.all.json", - ) -} - -func cf_i18n_resources_zh_hans_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_zh_hans_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/zh_Hans.all.json", size: 194217, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_resources_zh_hant_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\xfd\x77\xdb\x38\x92\x2f\x8c\xff\x7e\xff\x0a\x7c\x73\x7f\x48\xfa\x7b\x2c\xa7\xd3\xd3\xb3\xe7\x5e\xdf\xf3\x9c\x7d\x14\x5b\x49\x7b\xc7\x6f\x6b\xcb\x99\xed\xdb\xee\x93\xa6\x45\x58\x62\x87\x22\x39\x7c\xb1\xa3\xc9\x66\xff\xf6\x07\x55\x00\x29\x52\x22\x40\x14\x48\xc9\x99\xd9\x9e\x73\xa6\x63\x91\x40\xd5\xa7\x40\xbc\x14\x80\x7a\xf9\xe5\x7f\x30\xc6\xbe\xc0\x7f\xc4\xff\x5e\x04\xfe\x8b\x23\xf6\xe2\x2e\xba\x8b\xa6\xa7\x57\x47\x77\xd1\x8b\x83\xf2\x4d\x9e\x7a\x51\x16\x7a\x79\x10\x47\xba\x22\xcb\xd8\x0f\x1e\x02\x0e\x24\x1e\xbc\x30\xe3\xf0\xfc\xeb\x81\x86\xfe\xcf\x71\x91\xb2\x7f\xbb\xb9\xbc\x60\x59\x9e\x06\xd1\x9c\x65\xab\x28\xf7\x3e\xb3\x20\x63\x41\xf4\xe8\x85\x81\x7f\xc8\xd8\x55\x1a\x27\x3c\xad\xbd\xca\x17\x41\x76\xc4\xd8\xec\x81\x65\x3c\x1f\xa5\x45\x14\x89\xaa\x23\x1e\x3d\x06\x69\x1c\x2d\x79\x94\x8f\x1e\xbd\x34\xf0\xee\x43\x3e\x9a\xa7\x71\x91\xb0\x97\x5f\xee\x5e\x44\xde\x92\xdf\xbd\x38\xba\x7b\x21\xc8\x16\xe2\xaf\x83\xed\x47\x5f\x5f\x1a\x25\xfd\x76\xc1\xee\xbd\xcd\xb3\xdc\x9b\xff\xc3\xb4\xf9\x6e\xc0\x12\xda\xfc\xff\xcf\xa6\x0b\x9e\x71\x01\x26\x7d\x0c\x66\x9c\x25\xa1\x90\x93\x2d\xbc\x47\xce\xbc\x88\x79\x59\x16\xcf\x02\x2f\xe7\x3e\x9b\xc5\x59\x7e\xc8\x8e\x53\x2e\xda\x40\xc8\xea\x55\x35\x82\x48\x08\x11\x89\x3f\x9e\x82\x30\x14\xbf\x66\xa2\x55\x40\x48\x59\x43\xdb\x82\xc8\x98\xf9\x3c\x8a\x81\x7a\x0b\xfb\x2c\xe1\x33\x21\xc5\x0c\xe9\x64\x75\x28\x4f\x41\xbe\x10\x2c\xf8\xf2\x90\x9d\x3e\xb4\x21\x89\x1f\x24\x82\x7c\x95\x70\x68\xf3\x19\xa0\xe6\xfe\x81\x28\x0b\xc4\x24\xd2\x7b\x2e\xc1\xa6\xdc\x3f\x6c\x6d\xba\x3c\x2d\x4c\x2d\x37\x4e\x12\xf1\xe1\xbd\x54\x10\x36\x4e\x43\x9a\x72\x84\x6f\x04\x14\xbe\x7c\x39\x14\xff\x5c\x88\x8f\xfe\xf5\x2b\x7b\xf2\xb2\x92\x24\x2b\x32\xf8\x1c\xaa\xc1\x97\x4b\x2f\xf2\xd9\x6f\xa2\xf0\xb1\xfc\xfb\xeb\xd7\xdf\x3a\xc1\x0d\x43\x9a\x20\xcf\x45\xcc\xbc\x24\x60\x3c\xf2\x93\x38\x88\x72\x18\x08\xfa\x7e\xd2\x55\x9c\xc0\xf7\x3a\x2e\x72\xce\xf2\x18\x3e\x7d\x11\x2d\xbd\x24\x11\x42\x0a\xe1\x44\x17\x64\xd8\x11\xa2\x3c\x5c\x31\xf5\x5c\x14\x13\x5d\x4c\x70\x4e\xc2\x60\x86\x68\x4c\x18\x87\x23\x4d\x90\x07\x96\x37\xc6\x6e\xc5\xe8\x7d\x29\xa6\x93\xa5\x97\x7e\xe2\xb9\x18\x40\x62\x00\x8c\x32\x76\x33\xb9\xfe\x70\x7a\x3c\x79\x09\xdc\x1e\x03\xfe\x24\x86\x5a\x36\x4b\x83\x04\xd8\x65\x30\x42\x82\xc8\x0f\x1e\x03\xbf\xf0\x42\x35\xea\x62\x18\x4b\xf3\xe0\x91\x47\xe5\x88\x32\x49\xbc\x4f\xe6\xd4\x36\x19\x67\x59\x30\x8f\x58\x1a\x87\x3c\x93\xb3\xc5\x4b\xe8\xb7\xf2\x3b\x08\xc8\xa9\xe8\xe8\x30\xfb\xc6\xe9\x7c\x04\x85\x5e\x32\xe8\xdb\xed\x65\xb2\x44\xc8\x24\x4b\x75\xb5\xc6\xce\xd9\x52\xdb\x01\xbf\x0e\x90\x7f\x37\xf5\xd2\x39\xcf\xab\x91\x8b\x1f\x26\xc7\x67\x2c\x12\x9f\x07\xb9\x75\x89\xe7\x4a\xcd\x19\xb5\x8e\xbe\x68\x3f\x6b\xac\x56\x34\xa8\x08\x0b\xd5\xeb\xc3\x58\x2c\xde\x6c\xe4\xb1\xf1\xd5\x29\x1b\x8d\xb2\x4f\x41\x32\xca\xb2\x70\x84\x8b\x3f\x42\x7a\x29\x18\x61\x51\x98\xc1\x0c\xa5\x04\xb8\xac\x48\x92\x94\x67\x52\x43\x60\x3c\x4d\xe3\xb4\x4b\xca\xfd\xe3\xb0\x6e\x29\xf1\xd7\x5b\xb1\xca\x8a\x05\xe4\xdc\x8b\xbc\xb9\x50\x81\x46\x52\x79\xe0\xd8\xe9\x97\xf8\x10\xa7\xc1\x7b\x59\x8c\x79\xb3\x59\x5c\x88\xe9\x1d\x5e\x27\xde\x0a\x54\x21\x31\x4d\x3c\xc4\x86\xf5\x6b\x37\x4c\x28\x32\x1e\xbf\xfb\x78\x31\x3e\x9f\x30\xaf\x10\xa3\x1d\x54\xb2\xff\x97\x7f\xf6\x96\x49\xc8\x0f\xc5\x8a\xc9\xee\x5e\xdc\xdd\xdd\xbd\x48\x84\xea\xf2\x14\xa7\x3e\xfc\x7d\xf7\x82\xbd\x12\x53\xa1\x27\xf4\x92\xbf\x15\x42\xf3\x11\xaa\xe2\x03\x7c\x46\xb1\x58\x44\xac\x2c\xf8\x9d\x49\xe0\x5d\x73\x1c\x52\xfa\xe5\xaa\xe2\x00\x30\xa0\xbb\x2a\x0c\x0f\xa2\x3b\x96\xaf\xd4\x5c\xe9\xc9\x79\xe3\x3b\xf3\xf7\xde\x39\x4b\x17\xf9\x67\x71\xb2\x1a\x65\x62\x3b\x20\x56\xbf\x9b\xcb\xdb\xeb\xe3\xc9\x68\x7c\x75\xc5\xa6\xe3\xeb\xf7\x93\x29\xfe\xf9\xcb\x28\x2e\x7f\x5e\x5e\xbf\xff\x55\xfc\xce\xca\xdf\x37\x57\xe3\xe3\x09\x3c\x19\x45\xf1\x48\x0c\x3c\x50\xbe\x7e\xb5\x6b\x84\xdd\xf2\x75\x69\x09\x39\x13\xbd\x8a\x97\x41\x0e\x9d\x2c\x85\x2f\xa4\x06\x9b\x6c\x79\x98\x61\x64\x21\xa1\xca\xf1\xd4\x9b\xe5\x62\xcd\x17\xaa\xd1\x68\x54\xd1\x40\xed\x3c\x49\xe3\x65\x92\xe3\x47\xbb\x8f\xf3\x85\x65\xaf\xd8\x0b\x7b\xf7\x76\x11\x93\x6e\x16\xb3\x57\x9b\x9c\x84\x22\x24\x50\xb2\x22\x0d\x01\x5e\x7c\x9f\x7b\xa2\xac\xc7\xe2\x88\x8f\xf2\x40\x08\xb0\x05\xde\x6a\x82\xd8\x19\xcb\x1e\xf2\x17\xdb\x43\x76\x94\x38\x4f\x5a\x94\x3e\x31\x30\x6b\xfa\x86\xd1\x1e\xd1\x0e\x67\xcd\x5d\x73\x1e\xbc\x6b\x24\xde\x9f\xff\xfc\x14\x5f\x9f\xb0\x57\xf2\x38\x60\xa5\x19\xd6\x62\xd7\x2a\x74\xbb\x02\xd6\xf3\x6c\x88\xb6\xe8\xcd\xd7\xa5\x25\x92\x22\x5b\x08\xe5\xec\x4a\xfe\xfa\x65\x74\xcf\xde\xde\x9e\x9e\x9d\x88\x79\xfa\x2f\xf8\x08\x26\xeb\x19\x3b\xbe\x3c\x3f\x1f\x5f\x9c\xc0\x0f\x9f\x9d\x5c\x9e\x8f\x4f\x2f\xe0\xef\x07\x26\x9e\x9e\xbe\x9b\xdc\x4c\x3f\x5e\x8d\xa7\x3f\x59\xae\x20\x25\xcb\x21\xb9\x39\x8c\x08\x84\xd1\x4b\x06\x6b\x48\x9d\x5f\xe3\x12\x77\xa9\x5e\x28\x56\x85\xf5\x44\x19\x06\x59\x0e\x7b\x54\x3c\x07\x19\xf9\x3c\x0c\xc4\x12\x03\x5b\x79\x6f\x0e\x8a\xb2\xb7\x3e\x53\x7a\x4a\x83\x3c\x17\xbb\x58\xb5\xc9\xff\x70\x3c\xbe\xfa\xa8\xb6\xc3\x37\xac\x76\xcc\xc7\xca\x63\x3e\x1c\x5b\x5e\xb4\x12\x0b\x4d\x21\xba\x56\xed\x54\x20\xd3\xef\xbf\xbf\x59\x9c\x3d\x5b\x5a\xed\xfd\x47\xb5\xc3\xbf\xe8\x21\x98\x17\x29\x32\x12\xe3\x2e\x15\x43\x50\x2c\xdc\x70\xc4\x2a\xc4\xc5\xad\x8b\x3c\x83\x8d\xef\x7f\xe7\x33\x50\xe6\x47\x42\xd1\xe7\x87\x77\x51\xad\x87\x14\x89\xd8\xdf\x08\xa2\xea\x9c\x50\x74\x6b\xeb\x43\x55\x38\xe8\xd5\x35\xf6\x43\x20\x5a\x45\x00\x84\xc5\x13\xcf\x7f\x7b\x82\x3f\x64\xc8\x0b\xce\x45\x13\x0f\x8e\x38\xe5\xa7\xa9\xd5\x93\x1c\xbd\x08\x3e\x20\x1c\xcf\xde\x67\x71\x08\x07\x4f\xe2\xcb\xa4\x1c\x7a\xc7\xe3\xba\xaa\xc4\xd7\xd5\x10\x30\x54\x3e\x4e\x2f\x3f\xbe\x3b\x3d\x9b\x28\x59\x27\x72\x2a\x84\x6e\xb4\x05\xf1\x08\x4b\x7c\xc1\xff\x8a\xff\xdd\xbd\x98\x85\x45\x26\xa0\x7d\x8c\x62\x9f\x67\xa2\xe9\xd6\xef\xe4\x6b\xd8\x6d\xc1\xe3\x3f\x1f\x34\x9e\x2f\xf9\x32\x4e\x57\x1f\x97\xf7\xf0\xee\xcd\xf7\x3f\xfc\x58\xbe\xfd\x8a\x7f\x7c\xd5\xef\x7c\x8b\xef\xbf\xff\xfe\x7f\xef\xba\xe7\x0c\xd6\x71\xf6\xd4\x6f\x86\xef\x32\x3b\xea\x31\xe6\x0e\xa3\xe9\x2f\xe6\xee\x22\x7b\x44\xbd\xcb\x10\x16\xa0\x1d\x76\xa4\x23\xd5\x38\x65\x4b\xde\x07\x91\x5f\xb5\x63\xb5\xca\xab\x29\xf7\xe3\xe9\xc5\xcd\x74\x7c\x71\x3c\xf9\x6f\x3c\x39\xd9\x37\x50\xdf\x49\x2b\xe1\xe9\x32\xc8\x32\x58\xba\xa0\x43\xdd\xbd\x48\xb9\xe7\x8f\xe2\x28\x5c\x09\xfd\xdf\x3c\xff\xfc\xd1\x67\xfe\x9b\xf6\x99\x9d\x2f\x74\xdf\xe6\xac\x25\xaf\x4e\xab\x26\x56\x2d\xcb\xae\xce\xc6\x17\xff\x40\xfd\x70\xf8\x6e\x68\xd7\x4e\xff\x58\x3d\xf0\x59\xa7\xba\x3f\x3a\xda\x7f\x9f\x8e\x46\xda\x24\xa6\xf3\x71\xe1\x07\x79\x0c\x97\x3b\xd7\xe5\x3a\x0d\x17\x39\x78\x47\x15\xc3\x4d\x1e\x5e\xe1\xe0\xc1\x4c\xca\x93\x38\xcd\x33\xf3\xc1\x41\x6f\x92\x44\xfc\xeb\xcb\xa9\x53\xb1\xaf\x6e\x5e\x4e\xc1\xb1\x52\x76\x20\x3a\x5e\x08\x63\x03\x5e\xcc\x16\x5e\x34\x57\x96\x30\x07\xf8\x24\xe3\x39\x58\xc3\x44\x3e\x74\x51\xdc\xd1\x77\x0b\xb8\x63\x9e\x94\x16\xb8\x82\xfe\x9c\x2d\xe2\x22\xf4\xb1\xdb\xb3\xbf\x07\x09\x76\xed\x83\xf5\x09\x74\xfd\x21\x1c\x33\xb0\x30\x9e\x79\x21\xf3\x83\x54\x40\x14\xbd\xea\x90\x5d\xc5\x59\x80\x83\x30\xc8\xc4\xeb\x04\x7f\x3d\x72\x3c\xc6\x17\x72\x82\x34\x79\x26\x46\x76\x10\xa7\x41\xbe\x92\x32\x88\x92\x59\x8c\x96\x2c\x0f\x69\xbc\x14\x24\x9f\x78\x96\x03\xb7\x45\x30\x5f\x70\x93\x71\xd2\x6e\x50\x47\x43\xa1\x25\xa8\x0a\x57\x70\x38\xb6\x2c\xc2\x3c\x80\xe1\xef\x25\x49\x75\x7a\x2b\x3a\x43\xf0\x20\xe8\x9a\x8c\x28\xe9\x04\x28\x1d\xe3\x06\xce\x8f\xd7\x23\xf1\x03\x18\x8a\x84\xf1\x5c\xf4\x40\x35\xe6\xaa\xae\x08\x26\x67\x19\x13\xcd\x88\x77\xd2\x78\xee\x6c\x46\x3d\x18\x69\xb2\x3c\x27\xfc\x91\x87\x68\xf3\xd7\x76\x17\x8d\xed\x27\x39\xe3\xfc\x5d\xe1\xe0\x08\xcf\x7e\x0e\xdb\x1d\x2f\xb2\xc4\x16\x53\x0d\x3c\xe1\x91\x3c\x45\x14\x30\x8b\x54\x5d\x29\x54\x26\x3f\x96\x5f\x74\x17\xac\x28\xf2\xe2\xca\x2e\xb5\x07\x5f\xae\xd3\x0e\x7b\x97\xd3\xbc\x9c\x57\xa4\x99\x25\x03\x33\x3b\x18\x5b\x69\xea\xad\xe4\xe0\xaa\xad\xce\xa0\x6a\x64\xa0\xad\x48\x13\xaa\x7b\x69\x92\xc7\x59\x5a\x84\xdc\x7c\x40\xfc\x0d\x83\xdd\x67\x9b\x4b\x0a\xa8\x78\xd5\x24\x41\xe1\x7a\x49\x23\xe9\x62\xf1\xb7\x5e\xc6\xd9\xa5\x52\x6f\x33\xb9\xe9\x85\x3b\x68\x98\xcc\xa1\x3f\xa2\x7a\x01\x35\xb3\xbf\x15\x5e\xca\xd9\x7d\xea\xcd\x3e\xc1\x0a\x00\x2f\xeb\x36\xb6\x8b\x40\xc0\x53\x7a\x32\x14\x4c\xf9\xdf\x0a\xb1\x98\xe0\xdd\x63\xae\xa4\x10\x8c\x95\x52\xf7\x01\x35\xb9\xdf\x33\x31\x79\xa1\x78\xea\x0e\x4b\xea\x73\xbf\x28\xed\x6b\xad\xbb\xdd\xbd\x10\xcd\x98\xc7\xb3\x38\x94\x87\x1e\xf9\x2c\x01\x95\x79\xfd\x5a\x88\x29\x66\x43\xec\x42\xb2\xc4\x9b\xef\x0f\x7f\xf8\xf1\xc7\xc3\x37\x87\x6f\xfe\x57\xb3\xa4\x9c\x34\xb0\xcc\x9f\xfe\xf4\xfd\xbf\xa8\x53\x93\x52\xd3\xfb\x75\x97\xbd\xf2\x8f\xcf\xf9\x8c\x9f\x93\x32\x6e\x71\xcd\x15\xfb\xad\xf8\x09\x27\x63\xb8\x48\xf6\x4a\xb3\xc8\x72\x33\x23\x1f\xea\x0d\x2b\x5d\xc9\x50\x70\xfe\x32\x0a\xd8\xc5\xed\x79\xb5\x83\xba\x81\xfb\xcd\x4f\xec\xe4\xf4\xe6\x2f\xf0\xd7\x92\x9d\x4f\xce\x2f\xaf\x7f\x86\xbf\x23\xf6\xd3\xe5\xcd\x14\xfe\x4a\x70\x93\x25\xed\x69\x44\xb5\x63\x2c\x9a\xb3\xe9\xe9\xf9\xe4\xf2\x76\xda\x71\x71\xb9\x6b\x8e\xf6\xd2\x7b\x3e\x8c\x42\xd1\x9e\x86\x4f\xd0\x56\xc6\x9e\x83\x1f\x73\x69\x05\xcd\x3f\xc3\xd5\x24\xdc\x97\xa3\xd2\xa1\xe7\xd7\x5d\xc3\x9e\x3b\x68\xdd\x21\x1c\xee\xae\x4a\xa3\x76\x3d\x5f\x53\x59\x47\x8e\x31\x98\x7b\x5b\x72\xdc\x28\x4b\xe2\xc8\x97\x49\xbe\x32\xf2\xd9\x28\x41\xa2\x0e\xdf\xa2\x3c\xeb\x10\x1b\x9f\x03\xb1\x4d\xe4\x30\x43\x36\xcc\x88\x0e\x18\x3f\x9c\x1f\xb2\x45\x9e\x27\x47\xaf\x5f\xaf\xe2\x22\xfd\x08\x1f\x0d\xec\x29\x8c\xc0\x86\x23\x4e\x97\xe9\xd1\x0b\x42\x9c\x54\xc4\x74\x0c\xf4\x4c\xa3\xc0\xa6\x0e\x19\x81\xd0\x4d\x93\x18\xb7\xd8\x62\xa7\x28\xe5\x5e\x7a\x9f\xc4\xba\x22\xb4\x56\x16\xe4\x72\xab\x2b\xdb\x26\x09\x8b\xb9\x62\x69\x50\xfa\x86\xa2\x6b\x2f\x09\xb0\x7b\x00\x83\x00\x3d\xa8\x96\x22\xf6\xf4\x53\xbe\x8c\x1f\xab\x3d\xb1\xb2\x6e\x00\xb4\x19\x6c\xed\x02\x9e\xe9\xf9\x12\xaa\xda\x1b\x80\xbf\xb8\xc2\x06\x13\xab\x65\xb9\xb0\x57\xe2\x95\xab\xba\x6a\x7d\xc1\xd9\xf7\x72\xcf\xe0\x43\xd1\x87\x96\x35\xe2\xef\xaa\x39\x06\xe7\x53\xc3\x96\xc1\x50\xd2\x9a\xdb\xb8\xf2\x14\x82\x33\x5e\xa1\xb6\xc5\x78\x50\x52\x1a\x5b\xca\x75\xfb\x38\x8c\x0b\x9f\xbd\x03\x39\x53\xfd\xb4\xd5\x87\x94\x3d\xde\x93\x93\xd7\xd7\x62\xb5\xfd\x00\x27\xcd\xb7\xef\x4f\x2f\xb4\x70\x36\x5f\xdb\x9e\xc1\x6c\x71\x60\xd7\x93\xab\xcb\x9b\xd3\xa9\x58\xe1\xf5\xb2\x5b\x55\x22\x48\xf9\x01\xf4\x8c\x13\x03\xbf\xcd\x02\xf6\xb4\xcf\x4e\xc7\x37\x7a\xc2\xcd\xb7\xf6\x54\xaf\x4e\x2b\x87\x2f\x3d\xf1\xd6\x42\x4e\x3c\xd8\xab\x6a\x85\xc9\xc4\x12\xe3\x25\xc1\x61\xcd\x22\x50\x6f\x6f\xeb\x44\xc3\x09\xe1\x91\x15\x86\xa3\xbe\x5c\xa4\x37\x60\x30\x51\xbf\xbf\xea\xaf\x87\x6c\xab\x0d\x84\x83\xbd\x82\xf7\x8f\x3c\x85\x6b\xfb\xf2\xf5\x07\xf9\xf3\xeb\x57\xbb\x2f\xd4\x83\xaa\xbb\x14\x2e\x4d\xd9\xb3\x1d\xaf\x0c\x03\xb2\xf1\xd2\x9e\xe6\x0c\x76\xae\xb0\x63\x56\x5e\xe2\x2c\xe3\xb3\x02\x0e\xaf\x19\x7a\x29\x67\xb8\x41\x10\xc8\x4b\x33\xd9\xaf\x06\xe7\xe9\x7e\xc4\x1c\x30\x2b\x2f\xeb\x0d\x36\xc0\xa5\xc1\xc4\x02\x30\x99\x92\x3d\x5a\x5f\x6c\xb2\xd0\x35\xad\xa6\x92\xa1\xa6\x62\x58\x22\x6d\xea\x10\x11\xc0\xd5\x46\x5a\x7a\xb3\xc2\x99\x4c\x92\x74\xf0\x37\xd6\xa0\x70\xc7\x1e\x81\x84\x44\x63\xde\x5e\x9f\x89\xe1\x09\x14\x37\x5d\x94\x85\x9c\x70\x41\x27\x9e\x5d\xa6\x73\xf5\xec\xb5\x3c\xd7\x85\x87\x78\x50\xac\x1e\xcb\xef\x72\x5b\x7d\x97\xc3\x43\xbd\xfa\xb3\x7f\x00\xf6\x6d\x13\x06\x82\x50\xd3\xf7\xba\xd4\x10\xd5\x97\xbf\xe7\x00\x1e\x3d\xe0\xc3\x50\xfa\x1e\x8b\x9e\x21\x4f\xd0\x8e\xdf\x95\xaa\xd4\x6b\x0f\x28\x1d\x32\x76\xcd\xd1\x96\x1d\x08\x6c\x90\x2d\x95\xae\x0e\xf2\xd0\x04\x3e\x4f\xa1\x7d\xd4\x69\x7b\x20\x0f\xd8\xa0\x80\xbc\x2d\x07\x2a\x62\x48\x18\x5a\xfc\x9f\x44\xac\x9e\xdf\x31\xc3\xb0\x04\x35\x41\xd0\xd3\x44\x02\x84\x59\x50\xee\x12\x64\x87\x7a\x29\x84\xfc\x39\x2e\x44\x79\x38\xf9\xcc\xd3\x15\x2b\x22\x85\x0e\x24\xd1\xd5\x42\xd0\x42\xee\xa8\x14\x45\xde\x76\xa9\xe2\x75\xa9\x83\xe8\x31\xfe\x64\x6a\x41\x01\xe0\xa7\xf8\x89\x3f\xc2\x2d\xa6\xd8\x89\x97\x87\xb0\x0f\x41\x2a\x36\x58\x0f\x05\xd8\x57\x08\x65\x5c\xac\xa0\xb9\xe2\xc9\x82\x65\x02\xfa\xba\xd8\x7c\x35\xb0\xc2\x2b\xdc\x68\xc0\x8f\x6d\xc4\x12\x9b\xbe\xf3\xfc\x26\x1b\xf3\x8f\xb6\x74\x69\x4b\xeb\xcd\x4b\x58\xf3\xcf\xc7\x13\x6f\x65\x76\x02\xa7\xd9\xe5\x6e\x51\xda\x4d\x04\x95\x8b\x80\xa8\x23\xa6\x47\xfd\xc6\x7c\x18\xa2\x84\x41\x47\x67\x87\x5f\xd4\xe4\x66\xee\x46\x94\x6b\xdd\xce\xfb\x7f\x85\x20\xda\xc9\x77\xb0\x20\x3b\xec\x97\xd8\x62\x38\xcc\xb7\x68\x21\xeb\xfc\x35\xb2\x98\xf9\x3c\xe4\x78\xfd\x5c\x05\xf5\x40\xbd\xc1\xd4\xd8\x56\xb5\xec\xdb\x52\xea\x20\xcb\x42\xcc\x14\xf7\x5c\x45\x36\xe0\x60\xaa\x22\x84\x2b\x7f\xab\x40\x3d\xc6\xe0\x0e\xee\x84\xec\xb1\x0a\x05\x4a\xcf\xbf\xf1\x92\x44\x13\xd7\xfa\x40\xde\x0f\xa8\x8b\x35\x51\x37\xd4\x1f\x45\xda\x55\x22\x61\x68\x28\x86\xcd\xab\x0b\x83\xe2\x63\x5d\xd1\x1d\x0b\x8a\xf8\x14\xa7\x9f\xd0\xdc\xe8\x53\x90\x24\x6b\xed\x16\x6d\x08\x01\x8b\x35\x40\x1a\xb5\x7e\xa8\xd5\x88\x95\x6e\x66\x62\x19\x05\x95\x5a\x8e\x68\x59\x88\xd0\xae\x44\x72\x14\xdc\x62\xbf\x8e\x81\x34\xa0\x17\x81\xa1\x96\x1f\x78\xf3\x28\x16\x2b\xf0\x2c\x93\xb7\xd5\x61\x3c\xc7\x7b\x5c\x13\x5a\x07\x22\x14\x8c\x99\xe1\xd0\xa8\xf9\xd6\x9e\xaa\x8c\x71\xe3\xc9\x3b\x57\xb5\xe3\x33\xce\xce\x9d\x15\xe8\xbc\xe5\x56\x4b\x12\xf4\xf9\x43\x10\x49\x1b\x3b\x6c\xb1\x8e\xd9\xce\x81\x84\x2b\x3e\x08\xde\x23\x09\xc2\xc1\x80\x2d\x24\x5d\x2d\x32\x0a\x39\xaf\x13\x41\x98\x2b\x11\x31\x88\xa9\xf5\x03\x58\x61\x77\x70\xdd\x2e\x46\xe4\x23\xa7\xa2\x10\x37\xdf\xd7\xe2\x5f\xb9\x6d\x07\xe8\xf0\x44\x06\x2b\x52\xa1\x95\xd6\x5b\x77\xf9\x58\x6c\xe0\x9b\x9b\x77\xf9\x18\xb7\xf0\xd5\xf6\xbd\x11\x9d\xc9\x78\x84\xf0\xcc\x70\xf6\xdd\x6e\xcf\xd3\x3c\x3b\x68\x85\x8d\xe3\x3c\x41\xbe\x7c\xf2\x11\x9f\x48\x8c\xd5\x57\xc9\xd4\xf7\x58\xe3\x13\xff\x78\x51\xf0\x77\x14\xb5\x82\x58\xd8\x9d\x3b\x3d\x0f\x0a\x97\x56\xaa\xcd\x99\x82\xf0\xbf\xc3\x1f\x6a\xa1\xad\xe3\x72\x3e\x80\xdb\x19\x23\x7b\x59\xf3\x1c\x2c\x25\x70\x4b\x2d\xd4\xf5\xf8\x29\x0a\x63\xcf\x07\x2f\x33\x2f\x5d\x49\xab\x2c\xbc\x4d\xc6\x4b\xc8\x88\xe7\x60\x1c\x03\xb1\xb2\x8c\x62\x0d\x41\xd3\x51\x82\x65\x30\x4f\x3d\x79\x9c\xa9\x74\x9e\x53\x15\x23\xf3\x64\x1d\x90\xaf\xe3\xab\xf4\x26\x48\xc2\x1e\xe5\x78\x11\x83\x56\x82\x62\x4f\x87\x07\x27\x57\xe2\x0f\xf9\x99\x7f\x83\x2d\x5e\xb9\xbd\xfb\x6d\x53\x93\xfb\xad\xb4\x7f\x78\x48\x79\x69\x28\x58\xc5\x04\xfd\x6d\x1b\x72\x59\xab\x16\xb8\xd4\x53\x71\x4e\xd9\x31\x38\x05\xcd\x72\x38\x96\x11\x4f\xfd\xa5\x50\x10\x32\xd1\x32\x60\x4e\x1e\x3c\xe0\x61\x8d\xd8\x97\x46\x9f\xe4\xee\x14\x23\xbe\xca\x50\x69\xe6\x86\xfc\x27\x92\xce\xfe\xab\x16\x70\x58\x96\x43\xac\x08\x69\xa4\x2d\x84\x88\x46\x8d\xf0\x4b\xfa\x36\xa3\xd4\x75\x41\x04\x26\x32\xa6\xce\xaf\x2f\xe9\xc4\x4d\x68\x98\x0b\x31\x53\xf1\xcf\x09\x6c\x3c\x21\x3c\xb0\xb4\xce\x01\x35\xff\xde\x9b\x7d\xc2\xe3\xe9\x58\x6c\x07\x46\x5e\x4d\xf2\xc3\x32\x96\x35\x86\x35\xfc\xad\x1e\xf0\x0f\x9c\xdf\xff\x34\x2b\xef\x0e\xf1\x17\x87\x98\x36\xf2\x39\xb4\x58\xf9\x2c\x56\xcf\xc4\x1a\x51\x3e\xca\xd4\x23\x69\x12\x8f\x0f\x7f\x53\x01\x9f\x2a\x34\xd2\x49\xa0\x09\xc7\xaa\xb9\xfe\xd9\x44\xb5\xfe\xde\x6f\x4f\xcf\xce\x4e\x2f\xde\x43\x34\x9a\xf1\xfb\xc9\xb5\xb6\xb1\xb4\xe5\xec\x39\x41\xbc\x1e\xb4\x00\xd5\xef\xf3\x5a\xcb\xd0\x38\x40\x44\x20\xfd\x85\x72\x5b\x11\x7b\xfa\x01\x58\x4c\x6f\x2a\x3e\x16\xfb\x38\xfb\x8a\xfd\xb1\xc0\x49\x61\x69\x3e\xb6\x79\x51\xad\x22\xfe\x42\x78\x30\x38\x54\x2c\xef\xb3\xeb\xc1\x71\xe8\x32\x0c\xc6\x70\xaf\xb2\x97\x57\xe3\x7b\x93\xdd\xcc\x90\x2e\xfb\x46\x10\xf1\xee\xeb\x6f\x42\x4d\x12\x1a\x10\xea\x9e\xe7\x4f\x9c\x47\xa0\x68\x35\x17\x74\x9c\xa6\x9a\x87\x87\x81\xbf\x3e\x3b\x34\x82\x1d\x86\x30\x59\x16\xbb\x7d\x8d\xcf\x1f\xbc\x22\xcc\xb3\x66\xbf\xb6\x35\xd1\xd8\x29\xaf\x1d\x49\x5c\x75\xe0\xdd\x08\xd9\x4d\xde\x41\x2e\xd9\xd5\x75\xda\xe6\x30\xe6\x12\xd6\x07\x0a\xdf\x0a\xac\x01\xda\x71\x48\xa0\x76\xdb\xed\x67\xc5\x42\x6e\xb1\xba\x41\x4e\x1d\x91\x8d\x84\x56\x75\xed\x11\x15\x41\xe8\x27\xa0\x33\x0a\x5a\xd5\x8f\x52\xe8\x86\x05\xb5\x1e\x99\x0b\x8d\x61\x10\xda\xde\x51\xb9\x11\xb1\xc7\xb8\xca\xe1\x84\xc7\x13\x8a\xb6\x98\xc7\xca\xdb\xc7\xb5\x8b\x7c\xe9\x64\x5e\x44\x01\xea\x02\x4b\xb1\x79\x28\x52\x8e\x11\x09\xc3\xe0\x13\x67\xe7\x07\xec\xfc\xed\x01\x7b\x8f\x9e\xf7\xef\xdf\xea\xe5\x68\x67\xb4\x15\x41\xc0\x9d\xa1\xed\xc5\x71\x15\xba\xda\xf7\x47\xd2\x22\x63\x84\x1e\x24\xbf\x80\x6d\x77\x19\x72\x53\x74\xd4\x5f\x61\x0f\x34\xf9\x8f\xf1\xf9\xd5\xd9\x44\x3a\xff\x41\xdc\xf6\x8d\x4a\x57\x69\xf0\x28\x36\x28\xd7\xf0\xb7\xf2\x8b\x59\xae\x12\xf9\xb0\xf4\x8d\x79\x0d\x7f\xbc\x36\xf8\xa2\x7d\x03\x88\xac\x3b\x4c\x85\x35\x09\x24\xa6\x6e\xa9\xb6\x4b\x3a\x70\x4b\xaa\xb0\x52\x16\x0c\xb1\x70\x8f\x9e\x01\x41\xcd\x6f\x6f\x26\xd7\xf8\xeb\x6a\x7c\x73\xf3\xd7\xcb\xeb\x13\x68\xfc\x6e\xde\x16\x55\xc9\xd2\x63\x74\xad\x32\x2d\x54\xa9\x62\xa8\xb4\x44\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\x1f\xdf\x5f\x5f\xde\x5e\x75\xe2\x73\x21\xe5\x86\xd7\x48\x9c\x5d\x5e\xbf\x67\x18\xf9\xdc\x0e\x31\x99\x98\x2b\xe6\xae\x08\x66\xbf\x60\x5c\x9f\x6b\xf1\x6e\x3a\xb9\xbe\xf9\x38\xbe\xf9\x08\xae\xca\xdd\x83\x60\x28\xf2\x8e\x72\xa9\xf4\x56\x03\xf4\x1d\x22\x29\x3a\xde\x72\x89\xd3\xaf\xda\xa6\xa2\x64\x7e\xb3\x05\x9f\x7d\x1a\x49\x0b\x0a\xf0\xf1\x55\xc1\x95\x3b\x99\x77\xd6\xa3\x23\xc1\x18\x57\x90\x08\xc0\xcb\x56\xd1\x0c\x03\xc0\x0b\xf2\xa5\x6b\xb1\xe8\x24\x1f\xcf\x4f\x2f\x6e\xa7\xd2\x4f\x79\x24\x70\xc1\x1e\x57\xcc\x67\xec\x3f\x25\x07\xf1\x2f\x38\xe9\xbf\xce\xe3\xd7\x70\x9d\x81\xa5\x66\x71\x08\x46\x56\xb5\x52\xf8\x18\x03\xe4\x70\xf6\xea\xec\xf2\x78\x7c\x36\x11\xaf\x8e\xcf\x26\xe3\xeb\xef\xba\xfb\xf1\xbe\x40\xba\x4f\xde\x2a\x30\x97\x58\x04\x46\x65\x64\x1c\x15\x59\x3b\x61\xaf\x4b\xd6\xf2\x14\x12\xca\x60\xa0\x32\x3c\x88\xac\x8a\x1f\xae\x96\xa1\x21\x78\x82\x89\x91\x3b\x13\x47\x31\xab\x31\xb0\x8e\x1a\x8e\x0e\xea\x0c\xdd\xd4\x4e\x2f\x2f\xa0\x7d\xa5\x09\xf5\x7f\x8e\x46\x7e\x90\xc1\x5f\xd6\xb2\xf5\xa5\x4e\x1f\x03\x92\xaf\x1f\x2f\x21\x11\x02\xcc\xeb\xb6\xc3\xb1\xb3\xa2\x2b\x16\xd8\x67\x09\x7a\xb6\x08\xb6\x8a\xbb\xf2\x95\xd7\xae\xff\x7e\x7b\x39\x1d\x63\x30\x82\xa9\xf8\xe3\xec\xe3\x3a\x24\x41\xc0\xca\x55\xa3\xf6\x30\x65\x62\xfa\x55\x83\x2f\xdb\x5a\x5e\xe4\x98\xc4\x20\x0e\xa3\xc4\x0b\xaa\x05\x69\x84\x66\x9b\xd6\xbd\x62\x13\xd9\xe0\xec\x1d\xc7\x82\x9c\x8c\x51\x11\x50\x5f\xbf\x8a\xdc\x80\x3a\xb4\xad\x7c\xf6\x74\x5c\xbf\xad\x59\x9d\x29\xe3\x06\xc2\xd2\xff\xf1\xfa\xf6\x6c\x72\x83\x21\x04\x6d\xe1\xf7\x24\xee\x2e\x93\x4d\xc4\x48\x8d\x82\x23\x63\x68\x8c\xdf\xdf\x58\x7f\xa4\xc1\xd9\xf5\x94\x1b\xef\xab\x46\x79\xfc\x89\x47\xec\x6c\xfc\x76\x72\xc6\xae\xae\x2f\x3f\x9c\x9e\x4c\xae\xc5\xc8\xfd\xcb\xc4\x7a\x06\x23\x93\xeb\x8b\xfb\x3e\x15\x4c\xd2\xaa\xe9\xde\x5e\x0b\xf2\xd7\xdb\x5b\x18\x26\x76\x70\x54\x19\x9c\x48\xf7\x95\xe7\x13\x5f\x6d\xf7\x83\xf2\xc1\x5f\x26\x3f\xeb\xfa\x84\x36\x50\xfc\x4e\x22\xda\x53\x41\xff\x37\x0c\x79\xef\xd0\x44\x3d\x63\xe2\x77\xc7\x23\xdf\x3a\x80\x31\x80\x5d\xae\xfc\x7b\xf1\x1f\xf8\x53\x7d\xbd\x26\xfd\x06\x79\xf8\x6a\x14\x72\xff\xf5\x1a\xac\xc0\xf1\xc0\xf7\x75\xbe\x4c\x5e\x97\x97\x5e\x1f\xe5\x07\x3c\x84\xf0\x55\xd4\xe1\xfa\xc7\xc8\xf9\x63\xe4\xfc\x31\x72\x9a\x23\xc7\x79\x35\x5a\x78\x29\xf7\xcb\xfd\x08\x6d\x13\x63\xae\xeb\x8c\x08\x2f\x87\xa4\x56\x0b\xe9\x08\x55\x1e\xc2\xbf\xc9\x47\x23\x54\xe7\xed\xb5\xaf\x16\x62\xbd\xf5\x77\x99\x6b\xb7\xb9\xbb\x68\xdd\xe5\xec\x60\xcb\x61\x21\xee\x33\x21\x73\xfd\xde\x68\xa6\xb7\xa5\x6b\xd9\x4a\xdc\x55\xbb\x0f\xaa\x51\x19\x77\x52\x1f\x3d\x1d\xce\x51\x8e\xaf\x27\x27\x93\x8b\xe9\xe9\xf8\x0c\xdb\x2a\x64\x37\x3f\xdf\x9c\x5d\xbe\x1f\x9d\x5c\x8b\xf1\x30\x2a\xaf\x43\x18\x84\x88\xce\x54\x66\x74\x31\x2b\xc3\x2c\x8a\x41\x1f\xc5\x10\x02\xf3\x31\xc8\x6c\x5d\x4e\xac\xe8\x74\x96\xd5\x9d\xca\xd7\x16\x8c\x4c\x48\xc4\x5b\x67\x26\x4b\xc8\x98\xb9\x0f\x51\x1c\xac\x61\x1c\xac\x99\x1f\x48\xee\x30\x1f\xd6\x50\xb7\xa0\xc4\xb0\x1b\x38\xd7\x0a\xa0\x33\x15\x4e\xb8\xba\x1e\xde\x32\xbc\xec\x89\x99\xb4\x36\xaa\x09\x9c\x95\x31\x2b\xad\xb8\x2e\x57\x23\xff\x7e\xb4\x84\xe0\x51\xd8\x46\xa5\x05\xc4\x41\x2d\xc9\x21\x99\x60\x2a\xa6\xc6\x75\x36\xa4\x90\x65\xab\x2c\x8c\xe7\x47\xaf\x5f\xd7\x42\xfd\xa8\x86\x3e\x0b\xa2\xe2\xf3\xeb\x73\x6f\x76\xd4\x03\x36\x34\x53\x09\x1c\xdb\x05\xad\x75\xb1\xa9\xd6\x52\x1c\xc1\x0f\x99\xb0\xb0\x96\xf1\xe0\xaf\x41\xe4\xc7\x4f\x19\x53\x7e\xe7\x80\x87\xf7\x6a\xc0\x2f\x90\x1f\xb3\x02\x73\x07\x7c\xef\x4a\x40\x77\x00\x69\x23\x95\xe6\x91\x7c\xa0\x80\x89\xbf\xbf\x56\x9d\xb0\xc4\x76\x15\x3f\xf1\xf4\x66\xc1\xc3\xb0\x5f\x1b\xf5\x05\xf6\xd2\xe2\x8a\xed\x8f\x99\xe4\x9f\x67\x26\x21\xb0\x8c\x05\xce\x90\x5b\x4e\x25\x8e\x14\xdd\x46\xf9\xf0\xf3\x56\x0f\x55\x0a\xa2\x00\xe1\x11\xbd\xd0\x50\x1e\xa1\xb7\xff\x87\x50\x49\xa6\x3f\x5d\x62\xea\xd0\x9f\xd8\x4f\x93\xf1\xc9\xe4\x5a\xa5\x11\x1d\x0b\x8d\x0f\xb4\x90\xb8\xc8\x93\x22\x67\xa0\xfb\x5b\xa8\x44\xc3\x71\x20\x2b\x11\xca\x71\xbf\x96\x9b\xf5\x81\x8d\xd2\x6e\xcc\xeb\x7a\xdb\x55\xa8\x2d\x2c\x69\xb5\x5e\x8d\x08\xda\xb6\x58\x2c\xea\x3b\xb6\x4e\x73\xdf\x40\xc2\x64\xaa\xe9\x8a\x46\xdd\x87\x90\x70\xb4\xd7\x71\x47\x90\x2c\xbc\x48\x8c\x43\x19\xe4\x81\x88\xc4\x54\xd7\x15\x51\x73\x23\x61\x8f\x46\x5f\xcf\x15\x89\xbc\xea\x68\xbb\xe4\x20\x01\xb3\x26\xe3\x8a\xd3\x7c\xa7\x41\x81\x4a\xa1\xe4\x8e\x56\xab\x8c\x50\x80\x5a\x11\xe9\x89\xd1\x70\xcf\xe0\x00\xd6\x9a\x5a\x5f\xd4\xed\x37\x0b\x2e\x88\x6d\x28\xf5\x45\x6b\x71\xb0\xfa\xb0\x6d\xdb\x67\x20\xb6\x3e\xd1\xa2\x8a\xbb\x17\x28\xce\xed\xd5\x72\xf0\x45\xfb\xa8\xdd\x04\x9c\xb1\x35\x4e\xbc\x08\x90\xb4\xf5\x7a\x21\x51\x6b\x41\xed\xec\x6e\x64\x65\x1b\x49\xa2\xe1\x8a\xb0\x79\x78\x44\x69\x2d\x53\x4d\x3a\x1a\x69\x8f\x32\x52\xf9\x87\x46\x0f\xa1\x37\x67\xef\x26\xe3\xe9\xed\xf5\xc4\xce\x92\x94\x40\x81\x8c\x4e\x6e\x1c\x7b\x80\xb3\x27\xe0\x80\xed\xd1\xde\xdc\x56\x15\x76\xd7\xa8\xf9\xa3\xd8\xb8\x66\x04\x86\x55\x79\x77\x9e\xee\xcd\xbe\x8b\xf6\xae\xd3\xec\xb6\x7b\xd4\x94\xa6\x73\x0d\x42\x9e\xd5\x36\x53\x65\x62\x93\xf5\xc9\x76\xf7\xb8\xad\x68\xa8\xea\xee\x5f\x44\x85\x51\x54\xb6\xec\x60\x13\x00\xd7\x5d\x68\xa0\x38\x02\xd2\xaf\xa7\x97\xaf\x55\x10\x76\x3c\x5b\xaf\x4c\xe3\xd1\x55\x79\xc1\xab\xd0\xa2\xe8\x68\x5f\xc5\x77\xa8\x47\x19\x55\xa1\x1e\x20\xca\xc3\x3a\x42\x2f\x78\xda\xbf\x1c\xa5\x2f\xc1\xbf\xbe\xdc\xb2\xb7\xd9\xd9\x6f\xe0\x2b\xc3\x8b\xcf\x83\x7c\x51\xdc\xa3\x51\xfd\xec\x61\xc4\x3f\x27\x3c\x0d\xc0\x59\xc1\x0b\x5f\x2b\xab\xfc\x87\x38\xbe\xf7\x52\x0d\x99\xff\x7a\x7d\xa2\x90\x66\x56\xe5\x55\x19\x3e\x5b\xc4\x62\x1b\xcb\xce\x57\x23\x34\xf4\xb7\x38\x36\xdb\x20\xd4\x6c\x52\xf7\xcf\x06\x4e\xa2\x75\xff\x83\xee\xee\xbb\x59\xa3\x07\x6f\xf4\x49\xff\x65\xe4\x41\xf0\xae\x8f\x70\x8e\x27\x7e\x14\xd5\xfa\x51\xa6\xeb\x91\x77\x17\xbf\xd6\x6f\xbd\x32\xb9\xea\xfd\x6a\x65\xd3\x3f\x34\x1b\xf2\x40\x15\x00\xc4\x06\xcb\x06\x67\xa3\x98\x0b\x1f\xc2\x34\x5c\x96\x76\xff\x7e\x4b\x2f\x51\x5b\xc7\x6a\x12\x72\xb2\xdb\x6b\xd0\xb1\x37\xd9\xb3\xc3\x28\x23\xad\x54\x3a\x6f\x79\x5d\x9c\xb1\xc7\x37\x1f\x4b\xe3\x33\xf1\x67\xb5\xd1\x81\xbf\xc1\x16\xed\xf1\x87\xf5\xeb\x1f\xf0\x91\x55\x67\xdb\x19\x3f\x72\x6f\x88\xd7\x9b\xb9\x4e\xd4\xad\x65\xe9\x1c\x2d\x4d\x6d\xfb\xdb\xd8\x0a\x0a\xa8\x6b\x66\xb6\xfc\xda\x4a\x93\xb9\xe2\x19\xb2\x3e\x2c\xa6\xae\x18\x9d\x8f\xcc\x67\xd3\xcd\x68\xb3\x1c\x9d\x53\x91\xce\xd7\x7d\x35\x7e\x78\xe0\x18\x9e\xbf\xec\x88\x38\x31\xaa\x8e\xda\x3d\x8c\xdd\x88\x91\x31\xd7\x4e\xd1\x3a\x21\xb5\x96\x75\xe3\xd8\xfd\x39\x36\x8b\x91\xf9\xc8\x4c\x4b\x74\x17\xc2\x96\x7a\x35\x2f\x42\x8b\x49\x6b\xf7\x8c\x1d\xda\x02\x23\xcc\x56\x0b\xcb\xc5\xe4\xaf\x1f\xad\x97\x36\xbb\xca\x8e\x98\xda\x8e\xfe\xd7\x6c\x9a\x8f\x2c\x91\xba\x91\x74\xc5\x5f\x1e\xcf\x03\x6d\x9b\xe9\xb3\xab\x9a\x2b\x0e\xed\x09\x29\x70\xd8\x7c\x68\x8b\xd2\x91\x68\x4f\x19\x34\xc7\x90\x75\x9e\xf2\x11\x51\x0c\x07\xba\xce\x92\xd4\x0e\xba\x90\xbe\x95\x77\xa7\x5d\x65\x07\x4c\x49\xac\xa6\x95\xac\x7d\xe2\x59\xbf\xdf\xda\x4e\x5a\x80\xb6\xa7\xde\xe7\x32\x37\xe5\xe0\x6d\xc9\xed\x55\xf2\x5a\x85\x9e\x5c\xd3\x9c\xc8\x55\x56\xe8\xcd\x15\xdd\xe9\xaa\x08\x3e\xd5\x04\x7c\x7a\x71\x32\xf9\x0f\x5b\x20\x5b\x34\x36\xab\x93\xb1\x29\x7f\x69\x1e\x3d\x06\x69\x1c\xc1\xf6\x7e\xf4\xe8\xa5\x01\x9e\xbf\xe1\x3d\x92\x16\x1a\xf4\x06\x42\x6d\x2a\xb2\x0c\xdd\x38\x6b\xf7\xe1\xeb\xb3\x1b\x43\x36\x5b\x8b\xf3\xd8\x8a\xb0\x0b\x4d\xb2\x14\xbd\xdc\x92\x77\xe5\x89\xac\x5b\x09\x2c\x00\x75\x55\x74\xc5\x52\xbb\x5f\xeb\x56\x27\x8d\x75\x9c\x11\x74\x5d\x20\x69\xef\x8e\x1c\xef\xaf\x76\xce\xb7\x4f\x4b\x6c\x9b\xf5\xda\xc0\xc8\x10\x07\x45\xf2\x61\xf8\x38\x48\x9a\x8f\xea\x57\x01\x6c\x72\xf1\xe1\xe3\x87\xf1\x75\xf3\xc7\x87\xf1\xd9\xad\xcd\xa0\xa8\x68\x31\x7c\xb0\x51\x8d\x3e\x67\xe4\xa0\x51\x8e\x30\x84\x75\x75\x63\x04\xfa\xe5\xf5\xa5\x74\x61\xb0\x82\x64\x4b\xc2\xa9\xed\xe4\xee\x11\x08\xe2\x0e\xd2\x1a\x94\xb1\x9e\x13\x92\xee\x35\xc8\xde\x7c\xcf\x4a\x84\xdd\x30\x74\x92\x7d\xfb\xae\x13\x5f\x91\xaf\x4e\x9d\x68\xf5\x40\xbc\xdd\x2d\xa5\x7e\x4c\xea\xdf\x54\x52\x6e\x78\x55\x4c\x90\xbd\xf5\xae\xdd\x30\xa4\xcb\x0e\xe6\x06\x23\x15\x5b\xc9\x21\x68\x81\x75\x7d\x3a\xb2\xf5\x7e\xaa\x1b\x45\x5b\x59\x37\x8e\xf5\x91\xf1\x11\x87\x83\xdd\x0e\xc2\xae\x72\x1f\x4c\x16\xea\x52\x6b\x61\x47\x9e\xd5\x69\x31\xe5\x1b\xe8\x6b\xb9\xa1\xb0\x94\xb9\x97\xb4\x39\x9c\x39\x09\x95\xc4\xf6\xbc\x4a\x5f\xc1\x8d\xb7\x85\x8c\x79\xcf\x08\x41\xdd\x93\x8d\x0d\x06\x6b\x12\x2e\xf8\x28\xbb\xf5\x01\xf6\xea\x59\x1e\x13\xc2\xb1\x95\xa5\xdd\xf9\xc9\xe4\x67\x6d\x17\xab\x9d\xcc\x6d\xaa\x92\x5b\xbc\x88\x06\x8c\xc8\xe6\x46\xcc\x15\xf3\x50\x51\xd9\x5c\xc9\xb9\xe3\xee\x08\x9d\x66\x8f\xb8\x22\x64\xb7\x41\xb7\xea\xa1\x25\xf1\x41\xe2\xac\xb9\x11\x73\x68\xd9\x4d\x93\x10\x34\x05\xb1\x53\x86\xed\x2a\x3b\x60\x1a\xca\x26\x60\x83\xd2\xc0\x56\x01\x45\x64\xdc\x1b\x5b\xa0\xdb\xdc\x0f\xf7\xc5\xd2\x73\x2f\x4c\x23\xe2\xf0\x5d\x5b\x77\x4f\x84\x7d\x31\x81\x42\x2f\x74\xbd\x77\x5d\x6e\xc4\x5c\x30\xf7\xdc\x7d\x10\x28\xd0\xd1\x25\xbe\x2e\x7e\x9c\x34\x96\x2a\x2d\x0d\xcb\x40\x72\xbf\xb6\x46\x92\x53\xa1\x0a\x3f\x89\x47\x45\x04\x7f\x58\x8c\xfb\xdd\x73\x76\x6d\x0d\x7a\x44\x37\x98\xad\xe0\x3a\x0c\x67\xab\x9e\x21\x05\xd8\x7f\x32\x29\x9e\x73\x30\x04\x8d\x18\x6b\x01\x9e\x05\x2c\x79\xba\x94\x52\xec\x26\x04\xdb\x30\xc4\x5d\x3b\x98\xd1\x09\x1a\x3e\x0d\x58\x85\xfd\x3a\x40\x0c\xb6\x41\xf8\x0d\xf0\x09\x87\x89\xbc\xe6\x4a\xae\xe7\x67\x1a\x34\xf2\xda\x10\xa4\x5d\x3f\x83\xc1\x97\x04\x67\xb5\xf3\xf1\x7f\x8c\xca\xae\x31\x6a\x8f\x95\x62\x31\x73\xec\x69\x76\x7b\x06\x69\xc0\x11\xff\xde\xcb\x82\x59\x09\x79\x43\x9a\xed\xf7\xfd\xc7\xce\xa0\xd1\x13\xf4\x1e\xfd\x46\x6e\x43\x44\xd8\xa0\xf0\xb2\xf1\xbd\xb7\xed\x26\xdf\x42\xfb\xed\x20\x7e\xc1\xc0\x6d\x48\xe8\x9c\xd3\x6b\x50\x8c\x27\xd7\xd7\x97\xd7\xd0\x62\xe3\x29\xe4\x64\x13\xcd\x84\x31\x03\x20\xf7\xc5\x95\x97\x2f\xbe\x7e\x15\xcd\x23\xfe\x9e\xa4\xa9\x21\x3d\x4f\x4f\x6a\xf6\xd3\xba\x17\x61\xf2\x0d\x6c\x28\x88\x4d\xc6\xd6\xc6\xda\xf1\x03\x83\x49\xa8\xb2\x05\xc0\x49\x48\x8f\xd8\x9d\x12\x09\xed\x30\x48\xbf\x19\x94\xec\xd5\x89\x4c\x20\x75\xc4\xca\xc9\x92\xfb\xdf\x0d\x83\xbd\x8b\x36\x45\x22\xf8\xb4\x2a\x04\x45\xb6\x91\xa4\xec\xa0\x7a\x82\x17\xf6\xe0\xbf\x74\x2f\xd3\xe5\x64\x32\x49\xca\x43\x90\xca\x54\x29\x92\x80\xc1\x7a\x7c\x57\x7c\xa8\x92\x62\xda\xb8\xa5\x97\x7e\xe2\xb9\x68\xc9\x59\x85\x25\xc3\xd4\x2e\x10\x2c\xde\x53\xc7\xb2\xdc\xef\x48\x2f\x38\x00\x45\x27\xf4\x98\x14\x36\x88\x1e\xe2\x74\x29\xc3\x39\x42\x7e\xb2\xad\xc4\x4c\xbd\xc4\x19\x8a\x05\x55\xbe\x41\xa6\x80\x3d\xcc\x55\xc0\x42\xc6\xd6\x5c\xb1\xfb\x38\x5f\x30\xd8\x84\x63\xbf\x95\xfb\x71\x16\x63\x94\xce\x4c\x9f\x39\xc9\x8d\x48\x2f\x8c\xb0\x98\xe0\x49\x82\xbf\xce\xe3\x77\x22\x4f\x14\xc4\x13\x1a\x54\x6b\x5a\xce\x88\xab\x23\x92\xfb\x20\x97\x53\x02\xb4\xc9\x6b\xd9\x34\xf6\x60\x6d\xc9\xd8\xe3\x5c\x78\xd1\x1c\x83\x9d\x3e\x06\xfc\x09\x3d\x38\x2b\x6b\xce\x59\x5c\x44\xf9\x01\x4c\xc9\x9f\xd4\xc5\x75\x18\x2c\x03\xf1\x04\xf8\x2e\xf9\x12\x1c\x3a\xf1\x09\x8e\xa7\x8e\xc4\x91\xbb\x63\x44\x95\xb5\x3e\x60\x24\xc1\xad\x19\xbc\x4b\x0a\x12\x09\x2a\x3e\xf4\xcb\x2f\x55\xc8\x2e\x24\x9a\xc2\x34\x9e\xe0\xf9\x53\xd2\x30\x25\x97\x33\x17\x26\xf0\xe4\xb3\x4f\x40\x06\x33\x51\xc2\xad\x81\x99\xa9\xb1\xb4\x3d\xd7\x30\x2e\x7c\xf6\x4e\x74\x35\x5f\x74\xa7\xf1\xd5\x29\x7b\xe4\x29\xce\xa9\x98\x1f\x2f\xf8\x00\x29\x0e\x59\xca\xff\x56\x04\xa9\x98\x5e\x8f\xcf\x1a\x05\x8e\xc3\xe0\x3c\x80\x2c\xef\x8c\xfd\x1c\x17\xcc\x4b\x39\x04\xe7\x82\xdc\x88\xe1\x8a\x89\x22\xcd\xa2\x48\xeb\x90\x4d\x63\xa1\xe4\xcf\x53\xcf\xe7\x32\xeb\xb8\xa0\x79\x20\xfa\x0c\xe6\x84\x86\xf9\x5c\xe8\x3b\x6d\xae\xcd\x00\xf4\x41\xe2\x14\x3f\x82\xff\x59\xfa\x57\x1b\x96\x89\xfd\xcb\xb6\x43\xe1\xac\x77\x32\xca\x09\xfd\x27\x1e\x1a\xe6\x9d\xd6\x42\xf6\xbd\x46\x55\x07\x1d\xa1\x93\x47\xd4\x28\x44\x15\x03\xf2\xd9\xab\xbf\x31\xf3\x7d\xd4\xf0\xa7\xe7\x30\x04\xd4\x3d\xa0\xd0\x4c\x02\x31\xfb\x0b\x7e\x18\x03\xf1\xf8\x5d\xe9\x8f\xff\xda\x0b\x03\x2f\x13\x1f\xe7\x5a\x3a\x55\x01\x81\x0d\xb2\xa5\xe7\x7e\x07\x79\xc8\x79\xe9\x8b\xa9\xa5\x16\x75\x31\xcf\xca\x02\x52\x89\xc2\xa5\x3d\x33\xa4\x46\x1f\x50\xb0\x67\x13\xa9\xef\x47\x04\x69\x1a\x1f\x87\x55\x81\x05\xd8\x4b\xd8\x1b\xe3\x9f\x52\x03\x7d\xa9\x06\xa0\x58\x0e\x43\x5f\xb0\x5b\xad\x6f\x7e\x71\xd2\xd5\xd4\x42\xd4\x90\xbf\xbd\x94\x45\xfc\x80\xf8\x0a\xb2\x78\x5d\xec\x20\x7a\x8c\x3f\x99\x9a\x50\x00\xf8\x49\xec\xbd\x1e\x21\xee\xa5\x18\xd4\x2c\x5b\x20\x14\xb9\x5f\x79\x28\x20\x4a\xbb\x18\xb9\x62\x3a\xc8\x15\x4f\x16\x2c\xc5\x7a\x8d\xc9\x23\x1b\x58\xe1\x15\xe6\xc9\x84\x1f\xdb\x88\x25\x36\x7d\xcf\x31\xb4\xe2\x1f\xed\xd7\xd6\x7e\xd4\x6e\x0a\x4a\x25\xce\xc2\xdd\x73\xda\x76\x49\xca\xe4\x99\x80\x4d\x00\xd0\x11\x4d\x21\xb5\xbe\x6c\xe1\xbd\x61\x68\x11\x0a\x52\xb7\x84\x0c\x09\x42\xe3\x4c\xdb\x97\x22\x11\x3d\xe6\x1f\x00\x06\xa0\x7e\xac\x67\x13\xe5\x71\x76\x20\xfb\xca\xd2\x5b\x89\x4d\xe3\x27\x88\xf8\xfa\xb4\x80\x7c\x02\x46\x85\x66\x28\xba\x04\x49\xa2\x88\xcf\x30\xb0\xad\x5f\x2c\x13\x60\x9d\xf2\x19\x66\x79\x85\xb8\x12\xa8\xc0\x0e\x9b\xf5\xd8\x74\x77\xff\xac\x60\x5c\xda\x2c\xf7\x02\x1c\x94\xcf\xdb\x58\xfb\x44\x41\x68\xa5\x64\x85\x3d\x59\x68\x80\x82\x0b\x86\xfb\x51\xb8\x6e\xf0\x91\x40\x27\x93\x50\x2b\xe3\x40\xf5\x72\x8a\xbf\xe4\xcb\x1d\xe5\xfa\xfe\x96\xa0\x11\xda\x13\xd6\x0b\x98\x73\xe1\xc4\x10\x33\xda\x6b\x52\x95\xdf\x45\x93\x34\x8d\xd3\x23\xd6\x7d\x44\x3f\x04\x4d\x07\x09\x66\xe2\x03\x34\x67\xe2\x23\x56\xde\x01\xc4\x76\x80\xed\x49\x38\xe0\xf3\x21\x6c\x37\xde\xe6\xc0\x92\xa1\x76\x3c\x0c\x12\x96\x40\xb7\xf1\xc5\x4e\x69\x06\x31\xab\xfe\x7f\x16\x38\xe9\xa4\x1c\xf0\x3e\xc0\xd7\xf3\x04\x2f\x3c\x2a\x67\xd2\x84\xc8\x02\x5c\x47\x3d\x67\x24\x62\xb8\x40\x57\xf7\x51\x3f\xa9\x66\xa1\x97\x30\x68\xca\xc4\x9b\xd6\xe8\x48\xb4\x5c\x11\xe3\x69\x0d\xa6\x3c\xc7\x9d\xc4\xba\xf7\x5f\x89\x17\x92\xa3\x2d\x60\x12\x29\x57\xbc\xba\x61\x0a\x43\xb8\x1c\xca\xf5\xe6\xb2\x05\xef\x4e\xd7\x59\x92\xc6\x8c\x59\x4d\xac\xe2\xcb\xfe\x5d\x6e\xbc\xe4\x0c\x4b\x10\x81\x4e\xd0\x01\x7b\xe2\xa5\x70\x98\xa1\x8e\x3f\xa2\x62\x79\xcf\xe5\xe4\x78\x1a\x09\x0d\xce\x0a\xad\x3d\x09\x07\x7c\xe2\x43\x06\x62\x53\xf9\x77\x5e\xbf\xdc\xb0\x00\xd5\x51\xaf\x17\x12\x79\xab\x6d\xba\x2a\xb0\xaa\xe4\x80\x41\x2d\xe3\xa2\x1b\x1c\xe2\x1a\x31\x4e\x02\xdb\x85\xb1\xbb\x2a\x0d\x4f\xf4\x32\x2f\x73\x40\xe4\x7c\x99\xc8\x1c\x63\xa0\xb3\x15\x09\x9c\x75\x99\x11\x59\x57\xa6\x63\x8a\x13\xb1\xcb\x5d\x5f\x22\x74\x6c\xb5\x6c\x2a\xd1\x31\x3c\xa5\x81\x90\xec\xef\x41\x62\xc9\x5e\x57\xde\x9e\x73\x99\x8c\xa3\x92\x41\xcf\xd4\x50\x94\xce\x4f\x19\xf9\x42\x4e\x3a\xa9\x47\xc2\x47\x14\xcc\x78\x0a\x87\x4c\xdd\x20\x6c\xeb\x3b\x23\xcb\x17\x5e\x5e\xa6\xbe\x13\x14\x7d\x76\xbf\x62\x70\xfe\x21\x78\x65\xec\x15\xda\xb3\x60\xe2\x37\xc3\x35\x7f\x7f\x8a\x74\xf4\x11\x7f\xc2\x7b\x8f\x6e\x54\xdb\x25\xe9\xdc\x04\x69\x1f\x82\x98\xa2\x77\x03\x7c\x01\xdc\x99\x1b\xaf\xba\x08\x55\xe9\x78\x4a\x7b\x57\xd6\xe1\x0e\xd7\x55\xde\x85\xb3\xd4\x1b\xc0\x68\x93\x75\xc4\x2a\xb4\xa9\xe3\x8e\x40\x9a\x5c\xda\x73\xdf\x2c\xef\xce\xb9\xfb\x86\xb0\xbb\x86\x03\x77\xb3\xa9\x83\xa6\x18\x9d\x0f\xa4\x9b\x91\xbd\x15\x13\x69\x4a\x2d\x8b\x38\x6b\x51\x68\x90\x11\xe2\xd5\x6f\xb5\x25\xa8\x5d\x07\xcb\x99\x67\x21\x76\xe1\xf7\x5c\x2c\x57\x49\x91\x2d\xc0\x7e\xa3\x98\xcd\x78\x96\xe1\xc9\xab\x41\x23\x19\x94\xb8\x83\x4c\x62\x76\xb4\x00\xd7\x28\x45\xe5\x02\x11\x59\xa8\x77\xdd\xf6\x35\x69\x68\x60\x4f\xbc\xd5\xd8\x70\x3c\x53\x6e\x9c\x33\x9e\xe7\x68\x2d\x15\x3f\x60\x29\x33\xc4\x1e\xe4\x1c\x70\x0f\x7b\xe8\x66\x21\xd9\xae\x18\xd2\x65\x5f\xeb\x80\x82\xea\xdb\xf2\xc7\x85\xbd\x2c\xd6\x04\xe8\xd8\x94\xfe\x01\x76\x3b\xf8\x97\x6a\x01\xe8\xb8\x5b\xad\xe5\xf4\x1d\x06\x63\x40\x97\x6d\x18\x01\x76\x8d\x52\x9a\xf1\x0b\x8a\xff\x0e\x7f\xf4\x41\x4a\xa7\x44\x47\x2b\x57\x28\x41\xf1\xa7\x38\xcb\x23\xc3\xb7\x1c\x72\x2c\xef\x94\xe9\x20\x6d\xe0\x2a\x46\x4f\x24\x4d\x1d\x15\x48\x97\x4f\x3e\xe2\x93\x4a\xf6\xa2\x92\xbd\x1b\x66\x2f\xa2\x2e\x32\x6c\x6a\xba\x8a\xfc\xb1\x5c\x86\xe0\xb3\x59\x36\xb0\x03\x29\x77\xbc\xca\x7d\x49\x50\xef\xd3\xb5\xdd\xa8\xb9\xa3\xae\x6c\x07\xb7\x0e\x31\xc9\xeb\xa3\xfb\xf7\xd9\x0b\x08\xf7\x36\x02\xcd\x6d\x8d\xec\x2f\x7c\x55\x5b\xb3\x0c\x22\x9c\xaa\x47\x03\x35\xd2\x7e\x50\x38\xb4\x12\xe6\xaf\xd2\xad\xeb\x6e\x83\xc0\x9d\xa4\x03\x7e\xec\x4c\xad\x6b\xe5\x70\x5a\xcf\x40\xe4\xad\xcd\x53\x9a\xc2\x6d\x8c\x94\xb6\x41\xe5\xdc\x3b\x87\x62\x40\xff\x70\xd2\x64\x57\x39\x7c\xe9\x2f\x63\xf6\x30\x8f\xed\x1f\x89\x63\x6b\x55\xd7\xf2\x54\xe1\x4c\x15\x29\x58\x54\xba\x67\x83\x05\x6e\x5b\x19\x17\x0e\xec\x89\xa7\x9c\xa5\xfc\x77\x65\xf6\xa1\x2c\x6a\xc1\x9a\xcd\x9b\x7b\x26\xa3\x39\x37\x22\xf6\x18\xd5\x6e\xfa\xf8\x5d\xbb\x81\x31\xfc\x32\xa9\x65\xc4\xea\x2e\xb8\x36\xec\x9a\x49\xa0\xba\xeb\x92\x11\x5d\x75\xda\xf0\x6b\x0b\x92\x79\x95\x16\xf9\xcc\x0f\xe4\x95\xd6\xd2\xcb\x67\x8b\x4e\xce\x5d\xd5\x08\x38\xb2\x3c\x5e\xd6\x1d\x54\x56\xf2\x6a\xfc\x15\x3f\x9c\x1f\x82\x3b\x6b\xf5\xea\x3b\x70\x02\x79\x7f\x3a\xc5\xb4\x63\xf2\xf5\xcb\x16\x4b\xf1\x05\x17\xaa\x64\xa1\xfe\x59\xd7\x06\x17\xf3\xd5\xa1\x28\xf7\xb2\xa2\xf3\xf6\x7a\x7c\x71\xfc\x53\x4f\x72\xff\xd3\xe7\x8f\x3c\x8c\x93\x97\xb8\xbc\xbd\xac\x7e\xdd\x8b\x86\x9b\x2d\xbe\x3b\x64\x62\x06\x41\xf1\xf2\x51\x50\xbb\x0e\xcb\x18\x5c\x67\x80\xb4\xea\x94\x49\x19\x22\xe6\x31\x7b\x19\x15\x61\xf8\x92\x49\x6a\x68\x7b\x61\x08\xb8\xd9\xab\xf9\x1c\xc4\x6d\xbf\x80\x31\x2f\xce\x12\xe3\x82\x7b\x60\xc1\x2a\xed\x61\x67\x61\xe1\xf3\xd2\xf0\x1a\xfc\x0b\x78\x96\x1f\x30\x4c\xd7\xa7\x6e\x81\xa4\xeb\x92\x20\xcf\x96\xa2\x05\x02\x31\x13\xb1\x3c\x58\x9a\xe2\x25\xee\x88\x8d\x75\x57\x96\x01\x79\x6e\xb4\x00\xb7\xde\xdb\x53\xf6\xb2\xc5\x7d\xec\xa5\x3e\x5a\x00\x88\xef\x67\x98\x9a\x8c\x65\xed\x39\xf2\x07\xb0\x4a\x92\x37\x61\x29\x57\xb6\x70\xa8\xd5\xe9\x39\xdb\xd4\x71\x43\x20\x75\x06\x17\x1c\xe6\x9a\x04\x34\xe8\xb1\x6b\x73\x17\x6c\x2a\x4a\xe7\xd7\x61\xad\xa5\x2d\x47\xe7\xd4\xd5\xa8\xed\xc5\xe8\x7c\xf0\x14\xa8\x9b\xcf\x46\x31\x3a\x1f\xc2\xad\xa3\x55\x1d\x77\x04\x1d\xb7\x8e\x9d\xe5\xdd\x39\x77\xde\xd5\x58\xd4\x70\xe7\x6e\x4a\x1d\x60\x2e\xec\xc0\xb3\xbe\x85\xb6\xe0\xda\x5e\xdc\x81\xaf\xf1\x86\x55\x57\xcc\x91\x8f\xda\x56\xfb\x30\xc1\x05\x6b\xc7\xa3\x48\x28\x63\xc1\x5c\x2e\x72\xf5\x72\xd2\x74\x39\x0c\xbb\x22\x0d\xb3\xdd\x70\xb1\xd5\x0f\x2a\xee\x46\xdb\x0c\x4d\x29\x72\x4b\xa2\x51\x49\xb2\xf0\x22\xf1\xf9\x71\x8e\xc9\xa4\x32\x24\x40\x2e\x62\xd8\xeb\xc0\x95\x2d\xb8\x32\x4a\xad\x36\x49\x38\xda\x35\xca\x8b\x42\xbd\x41\xcb\xd0\xe4\xc9\x72\x99\xbd\xa8\x35\xa5\x1c\xb8\x98\xee\x9c\x35\xa5\xa8\x5c\x66\x30\x01\x81\x57\x4b\x17\xa3\x96\x82\x44\x5e\x99\xbd\x61\x4c\x77\x05\x1a\xef\x7d\xde\x0a\xef\x9e\x21\x5d\x76\xd7\x5b\x61\x3a\x01\x3a\xb6\x01\x0e\x77\x7b\xd1\xa2\x23\x7e\x96\x33\xfb\x3d\x73\xa7\xb7\x4a\xaf\xc3\x6c\x47\x2a\x74\x94\xbd\x6f\xc0\x7b\x50\xa2\xa3\xad\x6e\x71\xaf\xe1\x0f\x4b\x60\xc6\x4a\x3d\x30\xe0\xfe\x96\x86\x60\xbb\x0a\x9d\xff\x90\xf7\xce\xc3\x10\x75\x91\xc1\xe6\xb2\xd8\x06\x36\x8d\x8e\x3b\xd2\x5e\x37\xce\x3d\xa9\xb9\xa3\xde\xe3\x05\xcd\x5e\x79\x3b\xb4\x88\xfe\xe6\xd1\xed\x4b\x3a\xd2\x73\x45\x5e\x5d\x0a\x35\x9d\x87\xd6\xcf\xd1\x73\xc8\xfd\xa3\x0d\xc9\x84\x2e\x63\xdb\xbd\x97\xb3\x2c\x4e\xc4\x08\x98\xb3\x59\x1a\x60\x58\xb0\xa3\x5a\x1f\xaf\x3d\x36\x4e\x5c\x94\xca\xf6\x98\x64\xd8\x2f\xe6\xa1\x71\x6f\x69\xf9\x5a\x9d\x2e\xd7\x9d\xcc\xf4\xd0\x5c\x68\xb8\x22\x84\x5d\x67\x35\x51\xd4\xf4\xb4\x2a\x36\x55\x1c\xe1\xf3\xd2\x0d\xc3\x16\xb5\x3b\xdd\x7e\x92\x54\xcd\x54\x67\x48\x03\xdd\x41\x82\x8c\x0f\x8e\x4a\x6a\x0e\x50\x70\x50\x22\xa3\xcb\xa0\x8b\x0b\x2a\xc7\x32\x7f\x48\x27\xcc\x06\x25\x87\x23\x96\x1a\x19\xc1\x1b\x0d\x9a\xd9\x03\xf7\xf2\x22\xe5\x2c\x8b\xe5\xa9\x84\xcc\x6c\xb5\xf0\x1e\x1b\xad\x12\xf9\x78\x55\x52\x64\xb2\xb6\xaa\x64\x98\x02\x76\xc8\x8a\xf8\x01\x70\xc3\x2b\xc9\x43\xd0\x43\xe8\x7f\x5f\x20\x22\x8a\x17\xb5\x6c\x4f\xb6\x96\x4a\xd2\x92\xb4\x6b\x7e\xee\x92\x43\xc3\x8a\x91\x26\xe3\xa5\x0a\x58\x5a\xfe\x0f\xb5\x31\x59\x03\x63\xb1\x21\xdf\x03\xcb\x3d\xc9\x0f\xdd\xae\xdf\x9e\x71\xcf\xec\x7b\xb5\x4b\x4b\x0f\xed\x42\x38\x78\xe3\xec\x1c\x03\xa5\x85\x3e\xa9\x68\x91\xf2\x76\xfc\x87\x3f\xff\xcb\xf9\x01\x7b\xf3\xfd\x0f\x3f\xc2\x3f\xef\x0d\x67\xbf\xf6\x35\x29\x68\xe0\xca\x1d\xae\xb3\x43\xb1\xaf\xc2\xb8\x45\xb9\x98\x0f\xab\x10\x2e\x26\x34\xb6\x35\xed\xd1\xc4\x2a\xac\x46\x18\xa7\xe0\x77\x2d\xf6\xd2\x49\xa1\x8f\xd2\xd0\x55\x9c\xca\x77\xe9\x25\xe5\x8d\x20\xc6\x5d\x51\xde\x90\x28\x5b\xca\x97\xb1\x58\x46\xd4\x59\x3b\xae\xb1\x49\xca\x1f\x83\x58\x08\x8c\x0e\x57\x99\x0c\xee\x24\xab\x18\x3a\xa7\x91\x95\xc3\x92\x2b\xe9\xc9\x4c\x7e\xca\xcd\xc8\x7b\x00\x4f\x36\x40\x65\x5c\xf3\xed\x6b\x12\x1a\x72\x56\x40\x46\x43\x64\x02\xae\x76\x36\x96\x04\x36\x75\x08\x08\xf0\x18\x54\x0e\x90\x5a\x20\x7a\xc3\xb0\xea\xae\x41\xe4\x9e\x1d\x75\x30\xab\x17\x20\xd0\x96\x91\x28\x99\x97\x83\xdf\x7d\x2e\x8a\x07\x21\xf7\xcb\x68\x38\x10\x6f\x06\x72\x07\xdc\xca\xd8\x81\x68\x97\x82\x51\xbb\x0e\xaa\x50\x71\x19\x7e\x70\xef\x51\xd4\xc3\x32\xd8\x8b\x61\x31\x98\x07\x8f\x1c\x9b\xde\xd4\x6f\x2d\xb8\x53\x79\x87\xf1\xcc\x0b\x5f\x07\x91\xe8\x74\x11\xcf\x1d\x0c\x72\x4b\x54\x55\x64\x32\x15\x86\xe7\x65\xc6\x66\x10\x97\x35\x2b\x96\xcc\x8f\x79\xb6\xb6\x1d\x13\x03\x39\x89\xd9\x92\xe7\x9e\xef\x99\xec\x10\x06\x23\x6c\xff\x7d\x8b\x65\xd2\x08\x35\x06\x6d\xc8\x45\x8b\xc3\xbc\x22\x83\x6b\xe9\xe1\x52\xea\x5a\x23\x9a\x5c\x7c\x38\xbd\xbe\xbc\x38\x9f\x5c\x4c\xd9\x87\xf1\xf5\xe9\xf8\xed\xd9\x84\x61\xde\x22\xbd\xf5\x91\x55\x9d\x5e\x08\x6e\xf4\xa3\xab\xab\xb8\x6d\xb7\x5a\xe7\xdf\xd0\xb3\x6a\x29\x62\x2f\x96\x21\xbf\x47\x56\x65\xd8\xf0\xef\x21\x8f\xc7\x3c\x0e\xfd\xee\x72\x33\xcc\xf7\x91\x7a\xcb\x8f\xf3\xfb\xbb\x17\x47\x3f\xb6\xe7\xf2\xd8\xac\xf3\x5f\xaf\x21\x06\x14\x1e\x08\xbd\xce\x97\xc9\xeb\xf2\xee\xe4\xe3\x2c\x8e\x1e\x82\xf9\xe1\xef\x59\x1c\x75\xd3\xc9\xd9\xdd\x0b\x88\x63\x7f\x10\x3f\x40\x18\xb8\x79\x76\xf7\xc2\xa2\xd9\xfe\x11\x24\xbf\x2b\xbe\xff\xfe\xfb\xff\xdd\x43\x7a\x7a\x87\x13\xcf\xce\x82\xa8\xf8\xfc\xfa\xdc\x9b\xc9\x9f\x35\x61\x1a\x59\x4b\x97\x2b\x74\x29\xae\x35\x42\x02\x41\xbe\x32\xb0\x0b\xce\x30\xb5\x4b\x2a\x66\x00\x0c\x67\x21\x73\xbb\x20\xb5\xbf\x0a\x12\xf1\x53\xc6\xca\xf8\x99\x82\x19\xa7\xf0\xb9\x7b\xf1\xe5\xee\xae\xc9\xea\x0e\x98\xdd\xd5\xd9\x89\x1f\x5f\xef\x5e\x6c\x70\xbc\x8a\x9f\x78\x7a\xb3\xe0\x61\x48\x94\xcb\x8a\xdd\xcb\xf2\x6b\x35\xbe\xbe\x81\xb0\x4d\x0f\xb0\xeb\xc6\x7f\x7c\xaf\x6f\xef\x7b\xb9\x4d\xc5\xfa\x2f\x29\x03\x1e\x55\xd0\xfc\xfb\xea\xcf\x2c\x08\x1f\x85\xce\xdc\x3a\x0f\xd9\x7f\x41\x1b\xfa\xea\x53\x2a\x16\x77\xc8\x84\xf2\xd5\x2c\x65\xd8\x64\x51\xca\x61\x4d\x86\x38\xc7\x1a\x69\x7b\x62\xd3\xdd\x20\x5b\x4d\xb7\x8c\xba\xda\xfc\xf1\x71\xff\xc1\x3f\xae\xfd\x98\x96\xdb\x90\x2a\xf7\x97\x3c\x17\xa8\x8e\x01\x95\x81\x7e\xa6\xf6\xf5\x59\x22\x66\x29\x83\xd9\x62\x4f\x6a\x54\xd4\x3f\x4d\xa7\x57\xe0\xf4\xf6\x79\x55\x26\x95\x00\x7f\xa4\x92\x4b\x17\x4a\xdb\xda\x54\x54\x7d\xae\x9b\x5c\x48\x38\xe2\x1b\xec\xb2\x69\x28\xb2\xbd\xe4\xa0\x5d\x35\x39\x50\xa0\xa2\x13\x22\xaa\xa4\xc8\xf2\xd0\xad\x0b\x8b\xbe\x3c\x95\x73\xf3\x8a\x0b\x02\x81\x72\xfb\xdb\xad\x36\x1a\x0e\x3a\x7a\xb4\xaf\xbb\xad\x1d\x72\xa2\xb5\xfb\xfe\x6e\xb6\x76\xcd\xce\x59\xee\xbe\x97\x4c\x74\xd1\x77\xc0\x71\x3f\xd2\xf7\xbe\xd5\xda\x33\xf7\x3e\xad\xb2\xef\x3b\xad\xe7\x80\x40\x68\x9f\x47\xf6\xe8\xa5\x01\xce\x5a\xe0\x9c\xec\xa9\xbb\x55\xf6\xe4\x65\x2a\x94\x6e\x6e\x92\x8d\x56\xdd\x1e\x17\x9c\x4b\xcb\x29\x5f\xa6\x71\x40\x2d\x48\x8f\xa3\xa3\x38\x91\xef\xac\xf4\xf4\x5f\x47\x7d\x0b\x42\x7e\xa4\x8f\x16\x67\x5b\xcd\x15\x87\x12\xc8\x26\x6d\x2e\xa1\xa6\x2b\x9a\x5c\x85\x0e\xb6\xc8\x10\x40\xa8\xe9\x8a\xa6\x23\xf0\x71\x47\x69\x67\xae\x2d\xe6\x6b\x87\x56\x39\x08\xdc\x09\x11\xb1\xfa\xad\x6e\x10\x72\x7c\x12\x90\xd2\xc9\xb8\xe2\x6c\xf7\x83\xb0\x8b\xb8\xdd\x87\x14\x15\x6f\x95\x5b\x06\x87\xd6\x7a\x64\x99\xee\x1c\xec\x6b\x3a\xa3\x91\xfb\x57\x27\x38\xa6\xaa\x44\x3c\x0f\x32\x1f\x71\xed\xbe\x10\x94\x1c\xca\x47\x24\x51\xe8\x8d\x4e\xfa\x24\x5a\x4f\xac\x14\x02\x8e\xd8\xca\x74\x64\x60\x09\xbb\xf4\xcb\x9e\x6b\x89\xab\xab\xb2\x23\xa6\xfe\x43\xd3\x89\x92\x23\xda\xce\x24\x21\x5d\xc5\x1d\xf9\x6e\x2a\x69\xeb\xe9\xd1\xce\xf0\xb8\x27\xb5\x81\x51\xf7\x06\x3a\x00\xb6\x36\xbf\x03\x32\x3e\x5b\x22\x44\x8c\x73\x15\x96\xc5\x4b\x92\x30\x98\x49\x1b\x98\xac\x10\xc3\x0f\x72\x09\x75\x40\xb3\xac\xeb\x88\xa8\x9c\x04\x30\x45\xb9\x34\x78\x92\x96\x10\x42\xe6\x77\x42\xfd\xba\xf2\xf2\x45\x67\xeb\xb9\x12\x73\xc4\x8c\xb9\x28\x20\x69\x88\x25\xac\x96\xf2\x8e\x9c\x95\x38\xa5\xfd\x87\x94\x11\x4c\x42\xac\xbf\xa2\x15\x05\x22\x3a\x41\x4f\x65\xd5\x05\x0b\xab\x0e\x20\xba\xc2\x44\x9e\xa2\xfb\x65\x0b\x0f\x37\xab\xff\x76\x73\x79\xd1\xc1\x54\x5b\x9a\xc8\x15\xb2\x80\x34\xf5\x4b\x63\xfa\x0e\xbb\x4a\x44\x0c\x90\x4c\xc7\x52\xec\xf6\xa2\x8e\xfc\x54\x2c\x22\x4b\x96\x5b\xa5\xa9\x5c\x79\x0a\x49\x79\xec\x77\xd4\xa6\x0a\x54\xde\x69\x0c\xc7\x1f\xa8\x02\x54\x63\x04\x8e\x3c\x20\x6b\x51\x17\x0c\xbb\xba\x44\x44\x70\xab\xbd\xbd\x5b\xb7\x5e\x5d\xec\xab\x3b\xe2\x2a\xd5\x72\x4b\x1c\xdb\xc5\x7b\xf2\xc5\x66\x26\x32\xdf\xa8\x33\x04\x02\xdb\x4e\x62\x5b\x99\x8c\x29\xf2\x96\xfd\x77\xd1\x74\x32\x64\x9c\x38\x3e\x71\x69\xb4\xf9\x6e\x9a\xd2\x64\xae\x59\x1c\x3e\x56\xde\xd3\x94\xd1\xd3\x5d\x91\x88\x05\x6d\xbc\xfa\x7f\x29\x3a\x19\x32\x4e\x38\x82\xda\xd0\xfe\x2c\x13\x8b\x39\x50\x70\x46\xd7\xb7\x19\xc9\x74\x88\x48\x21\x7d\x17\x1e\x2a\xc6\xf4\x13\x49\xcb\xba\x44\x44\x7f\x0f\x92\x64\xe3\xab\x74\xe0\x30\xd6\x20\x72\x6f\xdd\x1d\x82\xf9\xb6\xf4\x28\x84\x80\x9c\x32\x59\xbd\x97\xe1\x95\x8b\x97\xce\xd1\x7a\x5f\x86\xa5\xbc\x8a\x33\x0c\xe5\xf4\x52\x7c\xaf\xbc\xfe\x53\x29\x96\x60\x25\xc1\xc0\xde\x7b\xce\xd3\x43\xc6\xde\x81\x02\x18\xc3\xad\xe6\x2a\xca\xbd\xcf\x42\x35\x09\x93\x03\x31\xdb\x72\xf6\xdb\xec\xa1\xb4\x17\x59\x7f\xf9\xd1\xe2\x37\xc3\x2d\xc2\x3f\x18\x7c\xda\x77\x39\x62\x17\xb1\x8c\xb8\x89\xc9\xce\x3b\xbd\x73\xec\x2a\x51\x31\x40\xc8\x4a\x1f\x0c\x60\xd8\x93\x27\xbb\x3e\x92\x14\xe2\xcf\xd8\xef\xf1\x3d\x66\x47\x15\x45\xd1\x77\xe3\x25\x0c\x0b\x08\xed\x95\xe9\xc3\xbc\x0e\x45\x96\x2a\x87\xdd\xf8\xee\x37\x96\x3f\xf3\x59\x21\xe3\x38\xa5\xde\xd3\x3a\x28\xe8\x2c\x16\xdd\x27\xca\x47\xf9\x2a\xe1\x70\xaf\x85\x97\x9c\xeb\x71\xfb\x1a\xec\xa6\x20\xba\xaa\x0a\xc9\xaa\x47\x38\x34\x7d\x82\x64\x09\x86\x6d\x6e\x1c\x3b\x48\x8b\x0c\x4f\xee\xef\xe3\x07\x88\xd4\xf3\x5a\x46\x9a\x4d\xbc\x20\xcd\x54\xe6\x66\x16\xcf\x30\xe9\x91\x5f\x4f\x9c\xcb\x22\xee\xa5\x62\xe9\x86\xaf\xfc\xf3\x32\xbc\x89\xc4\x6c\xc6\x73\xf1\xa5\x0d\xb2\xef\x1d\x41\xaf\xd6\xc9\x1a\xe0\x48\x62\xe9\xaa\xd2\xf1\x54\xcb\x66\x45\x11\x7a\x87\x6c\x28\xf6\xff\x80\x2d\xee\x9f\xb8\x0c\x0e\x7c\x80\xb3\x5f\x90\xe3\xf5\x2b\x86\xbc\x98\x8a\xce\xf4\xf5\xab\x61\xee\xdd\x09\x13\x27\x19\xaf\x52\xb1\xa9\x4f\xf3\xd5\x06\x8c\xfb\x38\x0e\xb9\x67\x88\x4e\xee\x44\x63\x48\x84\x65\xbf\xcd\xf2\x54\xcc\x80\x86\x04\xb5\xbd\x68\x0d\x89\x58\x66\x0b\xde\xfe\x90\x65\x71\x4a\xaf\x19\x8a\x85\xb5\x7c\xef\xc6\xa7\x67\x93\x13\x2d\xb6\xcd\xd7\xf6\x74\x27\xe3\xe9\xed\xf5\x84\xbd\x3b\x1b\xbf\xd7\x7b\x49\x69\x4a\xd9\x73\x41\xe7\x3b\xf6\xc0\xf3\xd9\xa2\xa1\x1d\x67\x76\xd7\xc7\xe4\xfa\xce\xc8\xe4\x4d\x4d\x66\xb9\x33\x21\xd6\x76\x46\xc5\x1f\xc5\x1a\xe9\x0a\xca\x5c\xd9\x19\x53\x9c\xce\x47\xd2\xaa\x0f\xb4\x9f\x34\x96\xc6\x30\x97\xe9\xfc\x5a\xfc\x39\x8d\x95\xbf\xb5\x0a\x5a\xe0\xf4\x95\x07\xe0\xd0\x47\x3a\xd7\xf6\x36\x55\x75\xc6\x23\x1d\xb9\x0f\x2d\x8e\x1a\x08\x35\x9d\xd1\xe0\xe5\x52\xcb\xb7\xc1\xbb\xa6\xc1\xbe\xff\x40\x5c\xfa\x49\x59\x9f\x61\xec\x2e\x34\x5d\xc9\x50\x71\x8a\x45\x47\xe5\x35\x47\x25\xf9\x41\x1d\x30\x41\x40\xf7\x8f\xa5\x8b\xaf\xf9\xbc\xdb\x9d\x90\x3b\xd6\x52\x89\x3d\x80\xd0\xc9\xca\xfb\x5a\x66\xf5\xe7\xd1\x63\x90\xc6\x11\x6e\x6f\x4b\xfb\x3a\xc3\x01\xe8\x80\x94\x1d\xa4\x51\xf7\x40\xe6\xbb\x93\xae\xe2\x0e\x7c\x65\xf8\x83\x18\xa3\x0a\xda\x7f\x5e\x63\x2d\x7b\x14\xca\xa6\x1b\xee\x40\xe5\x9f\xef\x42\x0f\xa2\xae\xa9\xe0\x46\xbe\x5e\x77\xa2\x54\xed\x8f\x47\x1a\xa4\xbb\xc0\xd9\xae\x49\x45\xa3\xbf\xd6\xda\x2e\x60\x4f\x1b\xee\x7d\xc1\xb2\x54\x1e\x8c\x60\x1c\x82\x70\x75\x20\xba\xd5\x27\xb1\x6b\x06\x49\xd0\x7c\x1e\x4a\xf1\xcf\x01\x7a\xf7\xe4\x2a\x4a\x42\xe2\x89\x6f\x2e\xe4\x84\x97\x89\xf9\x0a\x7c\x47\x5c\xec\xa5\x8c\x21\x17\x85\x2f\x83\x58\xbf\xf2\x65\xbc\x8f\x24\x8d\x31\x7c\x03\x98\x0f\x82\xab\x56\xba\x44\xbc\xfa\xf8\x18\x8e\x54\x5c\x50\xc2\x3e\xfe\x29\xc8\x17\x70\x14\x54\x27\x6b\x83\xad\xbb\x2e\x11\xd1\x32\x98\xa7\x9e\x2b\x24\xdb\xca\x44\x4c\xa2\xb7\xcb\x99\x47\x66\x8a\x2e\x69\xcb\xaf\xd1\x01\xc9\xb2\xae\x35\xa2\xf7\x93\xe9\xf4\xf4\xe2\x3d\xbb\x99\x8e\xaf\xa7\x86\xad\x94\xb6\x9c\x3d\xa7\xb3\xcb\xb7\xe3\x33\x76\x79\x35\x3d\xbd\xbc\x30\x84\x7f\xd0\x96\xb3\x75\xf1\x79\xaf\x4c\x31\x2e\xc7\x55\x90\x59\x93\x51\x7e\x57\x71\x7b\x01\x4b\x43\x1e\x48\x6f\x20\xad\xf6\x55\x8c\x21\xb1\xce\x7d\xe2\xb9\x50\xc9\x66\xdc\x06\x89\x3d\x01\x3a\xb6\x24\xc9\x76\x15\x37\x7e\x27\x3c\xc8\x12\xd6\x36\xc1\x87\x87\x06\x5b\xc9\xce\xf2\x64\xce\x6a\x9b\x6b\x48\xf0\x48\x6b\x47\x67\x7a\x64\xe4\xbc\xe6\xbb\x51\x45\xfe\x62\x5f\xf6\x90\x6b\xe0\x19\x10\xd0\x5b\x07\x4f\x0a\x76\x01\xca\xa2\x7b\xee\x87\x39\xb9\x4d\x40\xa3\x79\x9e\x9e\xb2\x07\xce\xe4\xd6\x00\xdb\xc3\xfe\xde\x61\x3d\xa9\xb9\xa3\x1e\x32\x40\xfd\xb0\xc4\x7b\xc8\xd4\x15\x1f\xdb\x39\xbb\xef\x2e\x59\x91\xe5\x7d\x96\x4c\x1e\xfb\x65\xee\xd2\x26\xd9\xde\x1a\x60\x68\x4e\x64\x69\x75\x7e\xc3\x16\x6b\x8b\x4d\x55\x32\x1e\x69\x00\x9d\xad\x33\x7d\x81\xf1\x73\x16\xe4\x71\x1a\x88\x79\x5b\x50\xd7\x9f\x5d\xb9\x90\xe8\x87\xaf\x22\xbc\x62\xfa\x8b\x6a\x73\x4d\x80\xd4\x7e\xc5\x6c\xb5\x49\x69\x4d\x48\x80\x53\x8b\xcb\xd2\xe1\x48\x8d\xdc\x88\xc8\x87\xe6\x20\x4f\xa9\x4a\xc6\xa3\x02\xba\x6e\x12\x65\x76\xe3\xc0\xb2\x36\x1d\x55\x51\xaa\x2a\x98\x06\xaf\xb9\x10\x32\x95\x4f\x40\x3e\x7c\x0f\xcf\x2e\xac\x1b\x71\x00\xca\x64\x69\x9a\x5c\x32\xba\x4a\x60\x4f\xc0\x01\x9b\x4a\x2b\x23\xfd\xea\x29\xfd\x72\xee\x40\x82\x3a\xc8\x37\x68\xc3\x77\x5b\x27\x94\x79\x8b\x7f\xc1\xd2\x10\x35\xe3\xe8\x28\xd5\xa1\xfa\x4d\x54\x27\x35\x82\xed\x88\xf9\xee\x9a\x64\x3b\x16\xc2\xb7\xd0\x56\x3b\x41\xb5\xef\x46\x7c\x86\x16\x7a\x06\xf1\x77\x27\xe5\x8e\x85\xd9\x4f\x07\x7f\xe6\x0e\xfb\xcc\xc3\xfb\x5b\x1d\xc7\xbb\x1c\xb0\x7b\x1c\x99\xd5\x91\x7a\xe6\xba\xc7\x72\x21\xe5\xac\x3f\xc8\x41\xee\xba\x9f\x22\x52\x71\x46\x89\x31\x83\x40\xab\x57\x17\x51\x36\x11\xb5\x9c\xdb\x7d\x58\x66\xfb\x91\x79\x67\xf2\x0d\x22\xcb\xf6\x9d\xce\x0e\xb3\xfc\xed\x95\xb7\x7b\x8b\xec\xb1\x01\x9e\x55\xde\x96\x24\x84\x7d\xf6\xfb\xce\xf4\xfa\x20\x77\xdb\xf7\xdb\x13\x70\xc3\x96\xb5\xe5\x3e\x34\x7e\x47\x9b\x19\xbd\x3f\x65\xba\x34\x39\xb8\x19\x81\x17\xc3\x0d\xfc\x05\xce\x32\x8d\x2e\x5b\x69\x21\xc3\xdf\xad\xec\x83\xb5\x5b\x7b\x64\xfb\x6d\x83\x1d\xb0\x23\xcb\x2d\x2d\x3c\xdb\x13\x7a\xbe\xd6\x5d\x3a\x50\x92\xf2\xee\x8e\xd1\xa0\xb2\x3a\xce\xf7\x7d\x48\x5a\xe3\xc7\x40\xcd\x18\x87\x00\xb3\xe5\xcc\xc2\xc2\xc7\x05\x15\x4e\xe5\x94\x45\x21\xbb\x8f\xfd\x95\x16\x2d\x9d\x00\x0d\xdb\x92\xe7\x8b\xd8\x67\xaf\xde\x4f\xa6\x07\x57\x97\x37\xe2\x3f\xb7\xd3\x83\x93\xc9\xd9\x64\x3a\x39\xe0\xf9\x4c\x6f\x2f\x46\xac\x6d\x8f\x2a\xce\x72\x18\x1d\x7a\xc6\x5b\x05\xc8\xb4\x55\x16\xa8\xe5\x6a\x94\x15\xf7\xd2\x8a\xc2\x20\xa8\x55\x25\x6b\x0c\xa7\x17\x37\xd3\xf1\xd9\xd9\xe4\x84\x5d\x9d\xdd\xbe\x3f\xbd\x60\xc7\x97\xe7\xe7\xe3\x8b\x13\xbd\x17\x89\xb6\x9c\xed\xa6\xeb\x74\x1e\x81\xfb\x6a\x23\xf8\x84\x96\x9b\xb9\xb0\xbd\x98\xaa\xab\x56\x11\x16\x54\x3c\x92\xb2\xef\x76\xe4\x7c\xa3\x56\xa7\xe0\x8a\xc5\xa8\x9e\xe5\xec\x36\xf3\xe6\x86\x66\xd0\x95\x73\xe5\x64\xd2\x26\x4c\x45\x9d\xf9\x55\xc9\x0a\xc2\x20\xe2\xec\x21\xf4\xe6\x99\xe8\xc2\x9f\x67\x3c\xc9\xd9\xe8\xe1\x3b\x88\x20\x0d\x26\x9e\xe0\x80\x05\x8e\x88\xdc\x67\x4f\x0b\x30\x49\x95\x59\xe1\xd8\xb2\x08\xf3\x20\x09\xb9\xb4\xd6\x92\x37\x6d\xcd\x5e\xa1\x9f\x62\x9f\x13\x8a\x7b\x7b\x5d\xc4\x6b\x3f\x71\xe5\x09\xee\x43\x6e\x03\x7b\x31\xbb\x29\xb8\xa3\xbb\xae\xf9\xa6\x97\x4c\x68\xe8\xba\x29\x0c\x81\x4e\x11\xce\x5c\xb1\xb5\xd7\x77\x40\x56\x3a\x65\x88\x5d\xfb\xd1\x3a\x68\x03\x78\x12\x80\xc1\x36\x66\xd1\x93\x99\x69\x54\x7e\x9a\x0f\x5e\x18\xf8\xaa\x96\xb4\xd5\xc6\x1c\x81\x47\x77\xd1\x2f\x90\xdf\xe2\x8b\x4c\xc5\x71\xf7\x22\x49\xe3\x3c\x9e\xc5\xe1\x9d\x60\x77\xf7\x22\x9f\x25\x77\x2f\x0e\xca\x77\x3e\xc6\x49\x41\x31\xe5\xeb\x37\xdf\x1f\xfe\xf0\xe3\x8f\x87\x6f\x0e\xdf\xfc\xaf\x5a\xb1\x24\x4e\xf3\x4c\x16\xf8\xd3\x9f\xbe\xff\x17\x48\x00\x22\xc4\xb9\x8b\x7e\xb5\x68\xb0\x7f\x6c\xb1\x1c\xbe\xa3\x74\x0e\x45\x7b\xe6\xb2\x6f\x58\x34\x93\xb1\x16\x01\x05\xe6\x37\xc4\x25\x47\x05\x6e\xf3\xf9\x83\x98\xc4\xd0\xb1\xbc\x8c\x76\x57\x72\xd0\xc2\x52\x69\x12\x47\x8a\xc4\xd5\x78\xfa\xd3\xeb\xe9\xe5\x6b\xb9\xb0\x8f\x30\x6b\x0a\x1b\x31\x57\x66\xd6\x6a\x80\xa4\xbf\xb6\x54\x80\x8e\x73\x85\x7f\xc9\xb8\x7c\x26\xad\x99\x56\x99\xd6\xc0\xd1\xcc\xb4\x0e\x6f\x16\x20\xd3\x66\xe7\x7c\x19\xa7\x7a\x15\x5b\x5b\x8e\xce\x69\x59\x64\xb9\x72\x69\x8e\xa3\x51\xc4\xe7\x82\xc9\x23\x2f\x63\x89\x74\x23\xb0\xad\x4f\x40\xf6\x88\xe3\x1f\xe6\x87\xd6\x68\x57\x06\x4c\xd6\x35\xc9\x68\xae\x95\x47\x22\xfc\x6b\xd8\x7f\x76\x15\x27\xf3\xbd\xb9\x39\x63\xc7\x3c\x95\x0e\x2d\x5f\x54\xf6\x59\x74\x30\x9c\x06\xc9\x39\xcf\x60\x2d\xb2\xc0\x43\x25\x43\xc6\x29\x63\xa2\x38\x7d\x2e\x9b\xaa\x74\x3c\xd5\xd5\xca\x91\xde\x38\xcb\x5c\x98\xcc\x53\x26\x98\x2a\x94\x7b\x8d\x58\x9d\x1e\x03\x5f\x25\x82\x19\xcd\x50\x87\x3c\x64\x57\x21\xf7\x84\x90\xea\xa5\x18\x35\xb5\x2e\x1b\xdf\xff\x0e\xeb\x00\x46\x44\x44\x40\x90\x5d\x25\xc0\x14\x35\x51\x2e\xf6\x6e\xe8\x88\xb0\x5d\xc1\x34\x03\x7e\x2b\xc0\xc8\x6d\xb9\x0e\x84\x08\x47\x77\x60\x99\x26\x0f\xa4\x5e\x8a\x55\xa7\x5c\x69\xa0\x48\x95\xea\x16\xfd\xd4\x3a\x5b\xa2\x2f\x59\xba\x1c\x90\x1a\x1d\x4f\x88\x51\xe9\x81\x4c\xe9\xea\x44\x9b\xea\x6c\x3c\x00\xc5\x1d\xa0\x1f\x04\x70\x2f\x8c\x95\x7d\xea\x2c\x2e\xa2\x1c\x59\x94\x8b\xd3\x31\x3c\x01\x36\xa7\x8d\x32\xb5\x35\x0b\x0d\x1e\xed\xd6\xbb\x9d\x72\x1b\x52\xea\x6c\xbf\x62\xf7\x62\xe7\x2e\xf7\x12\x35\x1f\xb1\x3d\x5f\x06\x12\x8f\x54\x85\xce\xe0\x37\xa9\x7b\xf6\xa0\xe8\x8c\xbe\xd1\x80\x8d\xa6\x1b\xe0\x1b\xf5\x23\xbe\x43\x99\x42\xcc\x0f\xb4\x90\xc9\x81\x36\x46\xcd\x80\xd2\xd9\xb1\x21\xcb\x89\xfb\xd1\x6a\xfd\xe8\xc4\xab\x2b\x4e\xe6\x5b\x9e\x1a\x1d\xb2\x75\x18\x2e\xf1\x50\x1f\x61\xcf\xbe\x22\x1d\x4b\xcb\x10\xa1\x8f\x38\x22\x95\x41\x50\x3a\x4d\x0d\x7b\x98\x11\x34\x2c\xdc\xd5\x03\x77\x82\x64\xec\x10\x1d\x11\x1d\xb5\xbd\xd4\x5b\x22\xaf\xa9\x7c\x42\x6a\x64\x22\x15\x32\xca\xa2\xe3\xd0\xbc\xb5\x14\x99\x8b\x0c\xe8\x87\xb1\x3a\xbf\x6c\x06\x0d\x7b\x29\x8d\xd7\x31\xe4\xd9\x07\x2f\xb4\x8c\x33\x7b\x1b\xf1\x72\xd8\xae\x89\x6f\xd1\x66\x47\x9d\xa1\x70\x8c\x27\x2c\xa8\xae\x07\x70\x49\x81\x72\x94\x91\x25\x6d\x7b\x1d\xb5\xba\x75\xbb\x9e\x79\x62\x32\xbf\x14\x82\x9a\x63\x1a\xe8\x8a\xd9\xf3\x81\x80\x74\x70\x84\x55\x7a\x78\xc3\x51\x56\x8e\xf7\xaa\xf2\x9a\x58\xcf\xda\xbe\xa6\x03\x9a\x2a\xff\x4e\xe9\xa1\x03\x91\x61\xe1\x85\x0f\x3b\xb7\xba\xa7\x8e\x05\x40\x17\x62\x74\xcc\x6b\xaf\xf3\x6e\x48\x6d\x65\xe9\x1c\x8d\x89\x72\x35\xa5\xe8\x5c\x94\x2b\x8d\xfa\xc2\x33\x79\xc3\xae\x6c\x08\x94\xb7\x4a\xf9\xd0\x2a\xeb\xf0\x70\x84\xe9\xb2\x6c\xf8\xab\x74\x63\xd4\x56\x70\xe1\xdd\x74\x28\x74\x1c\x6e\x44\x32\x0e\x38\x2b\x03\x29\x0f\x2d\x2d\x2c\x20\x69\x6b\x38\x70\x97\xb6\x3a\xaf\x3c\x65\xb9\x14\x40\x60\xc9\x24\x95\xe1\x9a\xe5\xd5\x21\xcb\x56\x59\xce\x97\x07\xca\xb8\x02\x4f\x5f\x22\x48\x19\x02\xb3\x20\x98\xfb\xa8\xd7\x98\x8e\x17\xb2\xee\xa6\x45\x84\xb3\x94\xde\x62\x60\xdf\xec\xe9\xed\x82\xd6\x23\x72\xc0\x94\xe9\x65\x55\xb3\xc7\x0f\x8e\xe3\xaf\x07\x49\x3a\xfe\xca\x76\x47\xa5\x83\xed\x86\xa7\xaf\x41\xe4\xbe\x4e\x34\xf7\xf0\xc0\x31\xee\x6a\x49\xb5\x66\x33\xdb\x81\x87\x48\xc3\x15\xa1\x9c\xfc\xca\x98\x74\xca\xb4\xd2\x16\x5a\x47\x65\x57\x4c\xa8\x1a\x12\xa1\xb4\xd7\xa1\x21\xa8\xc5\x4a\xa9\x4d\x6f\x9d\x5d\xc7\xa2\x1a\x0d\x47\xe5\x11\xee\x6d\xcd\xbd\x66\x24\x56\x15\x69\x58\x36\xfd\x2d\x95\x90\x2a\x96\xf3\xe6\x5b\x8c\x6f\x58\x44\xd1\x46\x0a\x82\x8e\xaf\x38\x34\x8f\x61\x24\x94\x99\xe4\x11\x85\x0a\x14\xd2\x53\x1c\x2b\x82\x54\xec\x0d\xbf\x9c\x4c\x9a\x2d\x76\xe2\xeb\xa8\xe4\x88\x61\xed\x5b\x63\xc9\xbf\xad\x82\x1b\x6f\xe5\x2c\x63\xc7\x77\xab\x30\x89\x27\x7c\x42\x75\xd1\x2d\x54\x79\x79\xbb\x9d\x99\x6e\xc5\xed\x2a\xd9\x63\x88\x85\x92\x00\xfd\x69\x9d\x4d\x02\x82\x71\xa6\x18\xe3\x47\x26\x9b\x31\x6d\x51\xb6\x6a\xd3\x77\xb0\x67\xb1\xca\x32\x1c\x18\x96\xfc\xb6\x32\x04\x19\x55\xed\xd8\x60\xfe\xd7\x5e\x88\xc2\x63\x2e\xbe\x05\x87\xbd\x73\xa6\x0f\x24\xa7\x2b\x46\xe2\x83\x71\x32\x8a\xdc\xd8\x4b\x34\xc5\x48\x7c\x52\x30\x06\x10\x53\x0b\x8f\xfc\x24\x0e\xe0\x46\x20\x90\x59\xce\xf0\x02\x4e\x5e\x4a\x9a\x2d\x3b\x1d\xa9\x10\x50\xc6\x9f\xd0\xb0\x3a\xc1\x63\x9b\x87\x2a\xdf\xe3\xcb\xed\x58\x1a\xcd\xfb\x42\x03\xe4\xfe\x24\xad\xf1\x9f\x43\xbc\x4e\x4f\x34\x42\xb2\x2a\xa3\x27\x2a\xe5\x67\x16\xfb\xea\x2a\x3d\x8e\xf8\x66\x3a\x0a\x2f\x8a\xc5\xa0\x83\x44\x31\xb7\x11\x9e\x96\xc7\x8f\xa2\x47\x05\xbe\xcf\xa3\x03\xb9\xed\x14\x04\x47\x15\x25\x69\xc5\xf3\x14\x60\xd4\x12\x19\xaa\x11\x33\xd4\xd4\x92\x33\x69\x9b\xe3\x1b\x44\x48\x6d\x5d\x18\xd5\xa3\xea\xd2\x7c\x53\x93\xa9\x29\x7d\x10\xa0\x18\x45\xd4\x4f\x78\x43\x90\x24\xe0\xaf\xd9\x9b\xaa\xd8\xc9\x82\x5b\x81\x0b\xed\x43\x11\x86\x2b\x08\xeb\x6a\xc0\x4a\xab\xee\x88\x2b\xc8\x6a\x91\x68\x37\xce\x42\xfc\x00\x2c\xe3\xc4\x58\x39\x60\x49\xd3\x3e\x81\x07\xd0\x3f\xd0\x2e\x54\x74\x29\x34\x76\xc7\x9c\x9d\x1d\x99\x91\xf7\xc9\x9a\xd0\x1e\x89\xda\x8b\xc6\xa5\xfa\x8e\x99\xbb\x16\xb0\xf9\x36\xa4\x52\xb2\xae\x47\x40\xf2\x19\x33\x1d\xe1\xa1\x7c\x15\x90\xae\xea\x97\x38\xb2\x8a\xe4\x00\x53\xd4\x04\x51\x61\x5a\xda\xfb\x90\xea\x81\x77\xad\x86\x28\x05\xd7\x11\xac\x25\x1d\x0a\xd2\x60\x59\x2c\x99\xb7\xc4\xbb\x71\x31\x15\xaa\x8b\x1a\xd9\x8d\xaa\xb9\x6f\x7d\xd1\x2e\x5e\x2c\xbc\xc7\xd2\x87\xe3\xcd\xf7\x3f\xfc\x78\x7e\xc0\xde\xbc\x17\xff\xff\xfe\xbd\xfe\x20\x67\x67\x7c\x9e\x4b\xd2\x43\x36\x7a\x03\x8b\xa6\x98\xd7\x31\x6a\xa4\x28\x5c\x44\x78\xbb\x05\xf7\x99\xc8\xc3\xb4\xfa\x3c\x23\x96\x6f\xb9\xc5\xd8\xab\x13\x99\x66\xeb\x68\xfd\x6e\x07\x9d\x6a\x57\xf8\x6c\xf7\x06\x25\x70\x1c\xd6\xaf\xc4\x00\x16\x9b\xe1\x38\xf2\xb3\xef\x70\x8c\x1f\x9f\x9d\xc2\x7c\x89\x03\x7f\x63\x0b\x2c\xe7\xa7\x03\x86\x5a\x88\xb2\x46\x64\x19\xcc\xfe\xea\xba\x32\x13\x13\xfe\x0a\x6b\xe8\xad\x74\x6f\xa4\x22\xa2\xee\x37\xd7\xdc\x1d\xe4\xa8\x5d\xea\xaa\x8f\xfe\xc3\x9f\xff\x05\xda\xb4\x6c\x5a\xc3\xc7\xa3\xd4\xb5\xef\xb3\xd2\x66\x54\xdd\x30\x77\x99\xa1\x76\x94\xb6\xe7\x8a\xc1\xcb\x79\xcb\x1d\x40\xa5\x48\x36\x62\x20\xac\x35\x49\x3d\xb4\x01\x48\x5a\xe3\x07\xbb\x79\x2d\x92\xe6\x4b\x12\x4d\xfd\x86\x71\xe3\xad\x3d\x55\x93\x3f\xe3\x85\x9b\x2f\xe3\x05\x7f\x62\x57\x5e\x96\x3d\xc5\xa9\xaf\xa7\xdd\x5a\x88\xc4\xc3\xe8\x8b\xb9\x5d\xc0\x9e\x76\xcc\xc6\x57\xa7\xeb\x8d\x68\xc6\xc5\x44\x75\x2b\x34\x43\xd8\xc8\x89\xad\x6a\x10\x4d\x83\x04\x36\x7a\xca\x0a\x40\x14\x56\x0f\x40\x2b\x93\xe7\xb0\xa2\x07\x95\xf5\xf5\xcb\xd6\xee\x18\xd9\x4e\x38\xe0\x16\x36\x93\x9b\x31\x0f\x82\xc7\x33\xf6\x73\x5c\x48\x0b\x2b\x5f\xe6\xf1\x28\xcf\xeb\x60\x3c\x88\x6d\x17\x8c\x0d\xbc\x37\xd9\x0a\x9f\x52\x8e\x9e\xf2\x8a\x45\x46\xe8\x14\x0a\x77\x0e\x0e\x73\x62\xf0\x09\x01\x6b\x81\x7c\xaa\x22\xca\xd9\x0e\x14\xdc\x46\x5c\x0b\xf1\x52\xdf\x72\x57\x08\xc3\x4b\x4b\x78\x01\x20\xad\x93\x3d\x64\x53\x31\x19\xa6\x62\x4e\xc4\xec\xcc\x2d\x8c\x0f\x24\x30\x1e\xd5\xa5\x94\x01\x54\x42\x69\x05\xad\xcb\x5b\x37\x5c\x8b\x2a\xa1\x41\x1a\x25\x35\xce\x3d\xcf\xde\xbc\xd3\x85\x9a\x05\x15\xb8\x12\x04\x9e\x8b\x6b\xc2\xe7\xc0\x66\x24\x84\xec\xe5\x2b\x31\xb7\x6e\x7c\x95\xcd\xa0\x25\x6e\xcd\x9a\x04\x9a\xa1\x52\xda\x76\x43\x5e\x9c\xe6\x90\x30\x0d\xbd\x7e\xf4\x28\xb3\x89\x74\x0e\x85\xdd\xa7\x19\xcf\x76\x29\x0a\x97\xb5\xad\x45\x37\x2f\x7d\x59\x0a\xc7\xd9\xc2\x8b\xe6\x62\x05\x7d\xe2\xe8\x96\xed\x1b\x66\x63\x63\x61\x0a\xcf\xf2\xda\xab\x53\x44\x4d\x41\x0a\x2f\x43\x00\x7b\x13\x67\xab\x6a\x14\x1c\xd2\x2d\x39\x4b\xf8\x0c\xab\xa0\x37\xef\x56\x73\x1a\x97\x19\x2a\x05\x0a\x3a\x18\xdc\x18\x34\x11\xaf\x65\xe5\xb2\xc4\xfd\x03\x38\xfc\xc2\xd1\xa4\x3c\xac\xb7\x96\xad\x46\x3d\x13\xf8\x81\x19\x50\x65\xab\xc2\xa4\xb7\x70\x7e\x27\x43\x73\xac\x11\x74\xc9\xe1\x48\x8c\x8a\x79\x08\xa8\x7b\x47\xa8\xff\x8c\xc6\xbe\xdd\x87\x1a\x11\xb5\xc5\xb4\xd3\x56\x8a\xc2\xa5\x32\x54\xe9\xe0\xd3\x5e\x8e\xc4\x49\xdd\x66\x37\xf3\x97\xe0\x79\xc3\x3d\xe7\xb0\x8b\x35\x2e\x9f\xa4\xea\x2e\xb8\x36\x2f\xb4\x2d\xf1\x18\xab\x51\x70\xd8\xda\xd0\x99\x8a\xd2\xf8\x35\x43\x30\x76\x76\x81\x8e\x0a\x2e\xbc\x21\x2d\x02\x29\x29\x80\x0d\xbe\x1e\x44\x5d\x65\xf8\xd2\x9a\xda\x01\x8e\xff\x77\x22\xdd\xe0\xec\x5c\xe4\x5e\x5b\x6c\x59\xf7\x1c\x6d\x15\x07\xfe\xf6\x6c\xfb\x71\x1b\x64\x29\xde\xf5\x1a\x4c\x53\x55\xba\x55\xa0\x7e\xf4\xc8\xc8\x21\xca\x61\x16\xcc\x23\x6e\xfe\x9c\xba\xa2\x0e\xfc\xba\xfb\x4e\x6b\x39\x12\x27\x65\x09\xe5\xb8\xde\x91\xaa\xbb\xe0\xda\x48\x85\x60\x09\xc7\x54\x8b\x84\x02\xad\x79\xd7\x97\xd5\xae\xad\xe4\x42\x86\x82\x13\xaf\xd4\xcb\xe0\x23\x8e\x20\xe9\x34\x08\x08\x73\x16\x4a\xe3\x9d\x20\x5a\x9f\x28\x1c\xbf\xc3\xe3\xbc\xe6\x70\x15\xe5\xa0\x90\x01\x69\x0f\x5a\x14\xc4\xfc\x48\x5e\x26\xc3\x55\x47\x8e\xa9\x61\xe3\xa5\xbc\x01\x31\x61\xb3\xa9\x65\x8f\xa2\x0a\x8a\x53\x1d\xcc\xeb\x79\x9b\xca\x5a\x73\xbc\xfc\x8b\x96\x41\xfd\x95\x3d\x3d\x99\xf4\x53\x4f\x74\xf3\xbd\x3d\xe5\xeb\xf7\x6c\x7c\x72\x7e\xaa\x4f\x4b\xdd\x52\x82\x46\xfd\xf6\xe4\x74\x7a\x79\x6d\xa6\xbf\x59\x86\xc4\xe1\x7c\x7c\x31\x7e\x3f\x31\x73\xd8\x2a\x43\xe1\x60\x68\xf8\xc6\x4b\x7b\x9a\x06\x03\xec\x4b\x27\x2b\xeb\x4b\xd8\xa8\xa2\xb3\x84\x0c\xa7\x91\xd5\x0d\xb7\x6b\x97\x92\x26\xb6\x44\x02\x24\x6c\x8d\xf3\xe1\xf2\x2c\x57\xe6\x85\x36\x42\xb2\xaa\xe7\x8e\xa4\x19\xa3\x03\x4e\x50\x94\x3d\xcf\xfa\x90\xd9\x1e\x1e\x89\xd8\x50\x98\xf5\x53\xbc\x7d\x45\x0a\x16\xfd\x35\x61\xf3\x25\x85\x66\xb7\xbf\x4d\x7b\x21\x7b\x1e\xd2\xf2\x8f\x57\xb1\x67\x7c\x69\x19\x50\x9a\x7e\x56\x86\x5a\x7a\x00\x74\x0a\xfd\xd1\xa9\x68\x32\xfd\x41\x76\x12\xa2\x63\xad\x25\xdc\xde\x30\x93\x44\x2b\x38\x39\x6f\x08\xfd\x27\x48\xe3\x08\x23\x43\x7a\x0f\x39\x4f\x37\x6d\x2e\x13\xc8\xbb\x6e\x98\x01\x76\xcb\xcd\x5a\xea\x2b\x2f\xf0\x1b\x57\xf8\x7a\xc8\xa6\xa2\x04\x7e\x59\x26\x9d\xd9\x05\x60\x99\x31\x03\xbd\xa4\xc1\x94\x13\x6d\x28\xc5\x3e\xac\x76\x46\x56\x49\x5d\xea\x9a\x52\x61\x37\x60\x1c\x96\xfc\xa0\x72\xd5\xf6\x42\xbb\x90\x8b\x42\x9e\x24\x97\xd1\x22\xa1\x87\x35\x42\x59\x95\x89\xb1\x20\x6a\xa8\x5e\x5f\xcd\xe5\x4b\x2f\x9f\x2d\x3a\xf9\xda\x55\x26\x60\x52\x21\xbc\x92\x64\x3d\x9b\xa0\xbf\x31\x84\xf5\xfa\x7b\x90\x48\xdb\x58\x35\x5a\x41\xa3\xc0\x5b\xab\xf5\xe8\xb5\x98\xcc\x76\xc2\xc3\xf6\x4a\xb8\x64\xde\x60\x5c\xf2\xec\x84\xdc\x51\x8b\xdc\xcc\x9d\x26\xc9\xfa\x82\xf6\xbc\x78\x0a\xe1\x55\x61\x84\x04\x30\x51\xb2\xd9\x82\x4b\x47\x1c\x1f\x06\xd3\x12\x42\x18\x3f\x2d\xb8\x34\x5b\x96\x37\x04\xa5\x9d\x73\x58\x6a\x64\x20\xae\xe8\x56\x06\xd3\x8a\x9d\x30\xb1\x97\x11\xcc\x0e\x36\xb4\xb4\x32\x59\xa4\xce\x28\xc2\x68\x26\xe2\x4e\x8c\x86\x79\x4d\xaf\x66\xce\xb1\x0e\x1f\x6d\x3e\xe0\x72\xa0\x30\x00\xba\x85\x07\x0d\xd3\x62\x12\x07\xdd\x54\xda\xcb\x39\x20\x26\x51\x25\x49\x71\xd4\xca\xd0\x08\xb1\xab\x0a\x81\x3f\x3a\x07\xcc\x16\x71\x9c\xad\x7d\x03\xc2\x30\x7e\x82\xce\x0e\xa6\x3d\xf0\xf7\x21\x7b\x1b\x8b\x61\x2e\xaf\xdb\xc1\x3c\x09\xbe\x5d\x02\xa3\x26\x07\xab\x57\xd1\x02\xf7\xa0\xf9\x65\x19\xaf\x1c\x11\x32\x70\x2c\x50\xae\x2d\x26\x83\xa7\xfd\xb2\xa7\xb6\x8b\x1f\x47\x2f\x0d\x73\x5f\x6b\x21\x2a\x0f\x79\xc6\xc5\xbc\xb9\x67\x70\x01\x34\x96\xa5\x72\x2c\x5d\x41\xb0\xa1\xf0\x08\xfe\x49\xb4\xfc\xda\x55\x7f\x9d\x65\xaf\x16\x21\x93\xb8\xa9\xdf\x25\x2b\x82\xbc\xb8\xf9\x30\x5a\x83\xaa\x32\x5a\xa3\x4a\xf3\x62\xbd\xae\xbc\x0e\xcf\xdc\xba\xe7\xb5\xe1\x6f\x4d\x62\x08\x78\x35\xc3\x36\x34\xe9\x73\x02\xa8\x27\x42\xfd\x46\xe0\x49\x88\x3c\x7c\x76\xf7\xa2\xe1\x59\x78\xf7\x62\xe3\xf4\xa5\x72\x69\x82\xeb\x22\x65\xcd\x8c\x55\x4d\xf3\xcc\x2e\x98\xd0\x65\xc4\xf4\x31\x82\xbb\x5a\x4c\xee\x83\xc8\x03\x3f\x84\xca\x61\x0e\x56\xf1\x95\xd8\x34\xb2\xcb\x9b\x23\xbd\x6b\x5b\x5f\x72\x54\xdc\x9b\x5f\xbd\xe1\x44\x57\x44\x41\xe9\x8b\xdd\xd9\xfe\xad\x7d\x48\x47\xcd\xb9\xbb\x6f\x32\x78\x14\x0f\x3e\x88\x4d\x59\x80\x69\x42\x1b\xec\xec\xa1\x1b\x51\xb7\x91\xb1\x06\x9d\x82\xa1\x26\x18\x4c\x97\xd9\x85\xfc\xc0\x9b\x47\x71\x96\x07\x33\x54\x2e\xb2\xdc\x37\x79\x6e\x93\xeb\xdb\x7f\x7d\xa4\x0c\xce\x1f\x1e\x0b\xf1\x58\xf1\x01\xb7\x13\x32\x54\xd0\xc6\xce\x68\x63\x23\xe4\x95\x56\x79\xb3\x8e\x7d\xcb\x2e\x78\x10\x25\x04\xba\x8f\xb2\x7f\x74\xe0\x6c\x2d\x49\xe0\x16\x8b\x41\xb9\x5c\x9b\x6f\xfb\xf1\x53\x14\xc6\x1e\x5c\x28\xaa\xa1\x0b\x0b\x23\x5f\xd6\xf6\x8f\xa6\x59\xa0\x27\x39\x0a\x6e\x0c\xd9\xd7\x16\x1b\x70\xed\x7d\xba\x8e\xd7\x39\x85\xeb\xb3\x07\xee\xe5\x45\xaa\x9c\x54\x85\xde\x12\xcd\xc1\x05\xa9\x48\x20\x65\x05\x58\x6a\x2a\xfd\x00\xc1\x8b\x52\xb9\x34\xfa\x86\xd9\x0b\x74\x1b\xc3\x70\x7c\x56\x30\x94\x36\x03\xbd\x47\xef\xb8\xb3\x5d\xc0\x9e\x76\x91\xce\xeb\xf9\x52\x37\xb7\x7c\xa6\xc8\x08\xa4\xba\x04\x44\xd9\x02\x52\x28\xf0\x27\x3c\xfd\x00\xe3\x20\x08\x8a\x5f\x9a\xe2\xa2\xd3\x91\x5c\x57\x55\x9c\x19\x03\x3e\x67\x4a\x54\xb4\x10\x85\x41\xa6\x38\x62\xaf\x40\x29\x05\x66\xf0\xaf\x9c\x8c\xca\x1e\xf4\xdd\x91\x21\xab\x4e\x0f\x4a\xd6\x68\x31\xd8\x38\x3b\x81\x6b\xfd\x00\x15\xe5\x2f\x2a\xab\x28\xed\x46\xcb\x95\x0c\x11\x27\x7c\x20\x34\x9c\x29\xfd\x40\xc4\x97\x14\x0b\x64\xe9\x7e\x0f\x46\xad\x90\x87\x4a\x05\x5e\xc3\x8b\xf6\x18\xc3\x6c\xc2\x39\x7b\x11\xe6\x72\xde\x47\x0a\x78\x3e\x2a\xa6\xf9\xf2\x26\x01\xc3\x51\xe9\x1d\x05\xf7\xce\x7f\xd8\x96\x91\x9b\xa3\xe7\x6c\x9b\x61\x11\x10\x5b\x67\xa3\x37\x5a\xee\x9d\x48\x75\xad\x11\x5d\x4f\xfe\xfd\x76\x72\x33\xd5\x5f\x37\x6e\x17\x20\xd0\xbe\xb9\xba\xbc\xb8\x31\xb8\x3c\xb6\x94\xb0\xa7\x7e\x79\x36\xb9\x31\x4d\x58\xdb\x05\x08\xb4\x6f\xa7\x13\xbd\x39\xc2\xe6\x6b\x7b\xba\xdc\x03\x15\xda\xe7\x70\x43\x26\x06\x68\x22\xa6\x7a\x08\xeb\x8a\x86\xe0\xff\x2a\x17\xf9\x65\x62\x8a\xb1\xee\x40\xc1\x11\x9d\x3a\x60\x3d\x8f\xc5\xef\xe9\x2a\x81\xde\x56\xfe\x2c\xa7\x51\xa1\x38\x70\xa1\x22\xae\x72\x4c\xa4\x27\xc6\x4a\x3c\x0b\x70\x78\xe1\xc2\x10\xe4\xff\x6a\x29\xc6\xb0\xac\x76\x25\xef\x60\xd2\xf4\xc0\xaa\x0e\x5f\x5b\xcc\x8f\x1b\x51\x9c\xa5\x43\x74\xe9\xfe\x77\x19\xfa\xdb\x47\xbc\x62\x5a\x04\x37\x39\xfe\xb4\xf5\xea\x5f\x21\xb9\xdb\x9f\xf4\xdb\x98\xe7\x84\x42\x6d\xaf\x44\xa8\x80\x7c\xcb\x56\x7a\xfb\xe2\x00\x41\x1e\x87\x71\xe1\xb3\x77\xa0\x57\xa7\xab\xce\xaf\x3d\x08\x69\x82\x3c\x33\x1e\x3c\xe2\x99\xef\x3a\x4d\xd4\x4c\xec\x07\xe4\x75\xa3\x0a\xcf\x64\xc0\x4c\xab\x4e\xc1\x55\x88\x3d\xe2\x23\x0f\x57\xe5\x96\x62\x1d\x42\x12\x46\xed\x6c\x11\x84\xbe\xca\x32\x94\xb5\x34\x06\x26\x5e\xb8\x87\x1d\x49\xa9\x45\x2e\x3d\x8c\xca\xa5\x76\xf8\x52\x0f\xde\x70\x94\x30\xc9\xf9\xac\x70\x08\xed\xa6\xc0\x25\xeb\xd3\x3a\x19\x6b\xcc\x20\x5b\x77\x15\x3a\x7f\x15\x89\x15\x92\xa0\xa9\xdc\xa7\x60\x5a\xdb\x0d\xa2\xab\x1e\x1d\x49\x91\xaa\x38\xdb\x8a\x60\x64\xdc\x3c\xd9\x56\x23\xe3\xc0\x30\xf1\x35\xb7\x62\x79\x38\x2f\xba\x40\x27\x14\x8b\x9a\x64\x34\x51\xc3\xb8\xb9\x13\x82\xae\xb8\x03\x5f\xd8\x3e\x90\xbb\x45\x57\x35\x1a\x8e\x4d\x5b\x7d\x98\x5c\x3f\x78\x69\x7d\x62\xdd\xf4\xce\x6d\x66\xce\xb7\x49\x98\x6f\x9d\xda\xfd\x5b\x80\x44\x6f\xbf\xb4\x91\xde\x50\x22\xc4\xe0\x97\x5f\xca\xa4\xf4\x92\xcd\x00\x19\xf8\xad\x1a\xef\xb9\xf0\xec\xbd\xe5\x9e\xa9\x81\x76\xd1\x0e\x85\x54\xf3\x30\x13\xe5\x50\x7d\x1c\xa0\x45\x9d\x47\x78\xcf\x03\xa2\x6f\x1b\x39\x48\xe4\xca\x1f\x6f\x99\xbc\xb6\xa0\xbc\x5b\x7c\xf5\x45\xe9\xfc\xac\xd5\xb1\x8e\xf2\xee\x9c\x3b\xe3\x9a\x5b\xd4\x70\xe0\x6e\xf4\xf2\xd3\x15\x23\xf3\xe9\x52\x7d\x5a\x4b\x39\x70\x31\x45\xa8\xd7\x94\xa2\x71\x51\x07\xd7\xcd\x61\x5a\xed\xf7\x76\x3d\x77\xec\x1b\x00\xbd\x6d\xd6\xb1\x2b\xe5\xe6\xf8\x6d\xf9\x7b\x13\xe9\xc6\x0b\x2b\xb9\x07\x21\x4e\x97\x69\xab\x29\x37\x9b\xdb\xe9\x23\xf6\xa3\x4a\x97\xa2\x39\x63\xa9\x16\xb4\x64\xdd\x2d\xcd\x30\xd4\xdd\xa5\xda\x3a\xa5\xd8\x3c\x83\xd9\x83\x36\xfd\xfc\x90\x1c\xda\xaf\x64\x03\x07\x59\x35\x4e\x6b\xac\xb5\x87\x6d\x48\x9d\x5b\x69\xd7\x8c\x09\x6d\x91\xc4\x66\x2b\xb3\x96\x12\x74\xea\x6c\xc4\x30\xf7\x42\x99\x07\x0d\x35\xbe\xdf\x21\x06\x1b\x5e\xd5\x58\x9d\x97\xb8\x93\x22\xe1\x95\x95\x0d\xd6\x0b\xed\x85\x08\x3c\xc0\x9b\xc2\x42\x2d\x68\x2f\x46\xe4\xd3\xba\x62\xee\x72\x1e\xd8\x07\x53\x5a\x1b\xa4\xb9\x55\x5b\xb7\x14\xa3\xf2\x01\xb9\xeb\x31\x45\xd6\xd9\x72\x55\x08\xfe\xca\xff\xaa\xd1\x32\x84\x05\x67\x37\x6c\x08\x72\xe6\x69\xc0\xe5\xd1\x50\x10\xf9\xc1\x63\xe0\x17\x5e\x58\x19\xa9\x80\x99\xb3\xbc\xc2\x11\x80\xf2\x42\x7f\xa5\xef\x4c\xc7\x05\x29\x26\x42\x4f\x42\x70\x8a\x5f\x70\x76\x39\xae\xd2\xcd\x54\x9e\x07\x55\x06\x40\x70\x38\x35\x98\x52\x0d\x43\xb4\xbf\x0c\xf3\xe0\x91\x63\x57\x7d\x99\xb1\x79\x11\xf8\x87\x8c\x8d\x21\xbc\x24\x5a\x7a\x2e\xb8\x17\x0a\x30\x18\x67\x0d\x5b\x0f\x6c\xd4\x92\x62\xed\x67\x81\xe1\xe0\x33\x34\x22\x4a\x39\x58\x9e\x9b\x86\xf3\xde\x11\x0c\xd5\x3a\x62\xae\x69\xc3\xb6\x81\x04\x66\xa4\x61\xda\xa2\x3f\xbf\xa1\x24\x57\x2a\x98\x05\x9a\x6a\x2f\x3d\x48\x0b\x0c\xc7\x77\xe0\x96\x18\x7d\xe2\xab\xe7\x6a\x8d\x81\x78\x0f\xd6\x22\x90\x5b\xb2\xc2\xa3\x87\x53\xa6\xa0\x1c\xa2\x21\x86\x60\x49\x97\xbf\x32\xc9\xad\xad\x29\x59\x7d\x51\x81\x97\xdc\x9b\x49\xe7\x9c\x91\x34\x3a\x97\x65\xbb\x25\x1d\x84\x38\x5d\xa6\x36\x9f\xcd\x1e\x1e\xcd\x83\xd1\x1d\x46\x92\x1e\x3e\xcc\x83\xd1\xa5\x4a\x82\x9b\xb9\xea\x8b\xc3\x9d\x21\x7c\x70\x08\x10\xa4\x3e\x77\x46\x3c\x1f\x19\x84\x6a\x3f\x29\x04\xdd\x77\x92\xcd\x3b\xc1\x95\x7c\xc2\xd3\x9b\xa2\x0b\x7a\xb7\x1e\xec\x2a\xd9\x2e\xb8\x0d\x25\x75\x77\x6f\x1f\x52\xea\xbe\xdc\x68\x52\xab\x01\x9e\x16\x61\x2d\x73\xb0\x5c\x3e\x9b\x21\x46\x37\x2d\xca\x2a\x1f\x3e\xb3\x9c\x43\xd2\xb7\x97\xac\xbc\x39\xfa\x29\xce\x72\x75\x64\x2b\x7e\x9d\x60\xb4\xec\xba\x61\xa8\xd9\xa0\xd4\x95\xcc\xf0\x38\xbb\x8d\x5f\xfb\x90\xa2\xe3\x95\x77\x8c\x96\xc6\xe6\x96\xb5\x68\x28\x3a\xd8\x39\xd1\x85\x3e\xaa\x27\xdb\x7c\x4b\xa0\x2a\x27\xb1\x49\x6d\x38\x7f\x28\x87\xf3\x7b\xec\xfb\x06\xf3\x5f\x52\x65\x6b\x4c\x37\x93\xe3\xdb\xeb\xd3\xe9\xcf\xec\xfd\xf5\xe5\xed\x95\x96\xbb\xae\x18\x81\xcf\xf5\x87\xd3\xe3\x49\x47\x60\x37\x4d\x29\x2a\x17\xbd\x35\xf2\x76\x01\x7b\xda\x57\xe3\x6e\xfc\x6d\x65\xa8\x1c\x3a\x82\xd3\x69\x4a\x11\xb9\x9c\x4c\x3e\x4c\xce\x2e\xaf\x0c\x21\xea\xb4\xe5\x88\x9c\xba\x42\xe1\x69\x4a\xd1\xb8\x18\xbe\xf8\xc6\x6b\x7b\xba\x33\x2f\xdc\xf3\xf9\xee\x3e\x58\xda\xcb\x5f\xae\xca\x5d\x33\x93\xbe\x20\x9d\x97\x54\x6a\x84\x00\xa5\x4e\xf0\x11\x9f\xd8\x2f\x7e\x3d\x28\x0d\x89\x56\x3c\xc3\x64\xc6\x1f\x97\x9d\x49\xc4\x7a\x52\x23\xa0\xc6\x3c\x3f\xa5\x35\xea\x2b\xa1\x80\xe1\x49\x80\xd0\x2e\x21\x2e\x19\x38\x04\x7f\x0a\x92\xef\x4c\xdf\x99\x4a\x80\x8c\x4d\x76\x73\x77\x68\xd6\xf5\x09\xc8\x30\x47\x1e\x36\xff\x41\xb9\xe9\x82\x1c\xbf\x47\xec\xc7\xef\xff\x74\xc4\xc6\x32\x07\x51\x90\x31\x9f\x47\x01\xf8\x8c\x62\x02\x24\x3f\xc6\x1e\x86\xe1\x75\x13\xa1\xfa\x06\x21\x57\x6e\x8a\xfc\xb3\xf8\xba\xe8\xf9\x10\x64\xdd\x71\x50\xf6\xcd\x7e\x88\x76\x11\xbd\x75\x92\xa6\x37\xf8\xe8\x58\x3c\xf9\xfa\xf5\x40\x96\x6b\xbc\x1f\x27\xc1\x04\x1e\x96\x25\x96\xb5\x5c\x7a\xe2\x45\xc3\x2f\xc2\xa5\x79\x76\x89\x82\xd4\x4a\x70\xf0\x88\x17\x18\x53\xbc\xc0\x10\x84\xcf\xbc\x7b\x1e\xca\x61\x5d\x7a\xfb\x12\x62\x68\x0e\x42\x93\x2c\xc1\xdb\xca\xf8\xa2\x75\x07\xd1\x0d\xd7\x9e\x00\x19\x5b\x79\x43\x57\xc6\x36\x45\x0b\xd0\x32\x24\x77\x27\x30\xcb\xda\x64\x54\x9d\xe9\x0f\xc8\x4d\xd8\x83\xa2\x33\xfa\xa3\x2d\x5b\x13\x6b\x98\xa6\xaa\x64\x3c\xba\xb4\x13\x2d\xd1\xce\xac\xf3\x4f\x74\xb7\xf8\x8e\xb9\x92\x5b\xa1\xf2\x9c\x6a\x02\xb8\x8b\xa6\xa7\x57\x47\xec\xf4\x01\x82\xba\x60\x20\xac\x3c\x5d\xe1\xa1\x52\xac\x5c\xaf\x3c\xf6\xf8\x66\xcb\xff\xea\x00\x8b\x63\xae\x3e\xc8\xfb\x06\xc7\x2c\xa3\x04\x0f\x43\xbb\x5b\xe6\x19\x90\xb8\xb7\x56\x95\x0d\xdd\x5e\xac\x96\x2a\x64\xfe\x5b\x56\x5a\xd4\x01\x6f\x4f\x80\x8a\xad\x3e\x36\xed\x97\x5a\xbb\x8a\x54\x2c\xfa\x83\x96\xed\x02\x64\xda\x26\x9d\x71\xab\x04\x81\x7a\xbe\xe9\x3f\x24\x4f\x34\xcd\x96\x30\xb6\xd5\x48\x38\x44\xfd\xc7\x80\x3f\xad\x03\xa3\x05\xe0\xe6\x65\xc4\xd0\x55\xc5\x8d\xff\x62\x9d\xb1\xa5\x91\xfb\xcd\x0e\x4a\x77\x6d\x0a\x2a\x15\x05\xa4\xee\x60\x86\xc6\x7f\x13\xf5\xb3\x63\x1f\x4e\x26\x40\xc6\xd6\xe8\x03\x10\xb2\xa6\x72\x8c\xc2\xfc\x16\xea\xc9\x07\x2f\x2c\xb8\x0c\x60\xb3\x9d\x5c\x71\x97\x07\x11\xdf\x26\x4a\x72\x2b\xff\xad\x2d\x0e\x44\x1e\xeb\x2c\x3e\xed\x2e\x6d\x86\x25\x4e\x96\x69\xa0\xab\xc4\xbe\xe4\xc8\xb8\xf7\x70\x89\xb8\x4b\x56\x83\xc8\x3b\xf0\xf5\xe1\x2e\x59\xd9\xcb\xbb\xc0\xbc\xd4\x78\xce\x00\xde\xf1\x32\x11\xad\xbc\xb9\xeb\x70\x9b\xa1\x54\x25\xe1\x91\x8a\x29\x12\xdb\xbc\xf9\x52\x71\x98\xfa\x8c\xff\xc1\x19\x10\x64\x8b\x9f\xd6\x71\xa5\x9a\xf7\xa6\x06\xbc\x36\x95\x88\x18\xc2\x70\x23\x93\x94\x8d\xfa\x63\x5f\x93\x86\x66\xc1\xc3\x0e\xae\xcd\x12\x34\xea\x41\x04\x01\xc2\xa5\xc9\x2f\x62\x55\xd6\x54\xaf\xbc\xb5\x59\x15\xf4\x61\x3e\x02\x27\xa2\x5c\xc6\x80\x97\x89\xc1\x0e\x44\xe5\x32\x6a\x12\x74\xe8\x84\xa7\x9e\x9c\x75\xd5\x6b\x99\xde\x46\xbc\x12\xd3\x13\x66\xc4\xd6\xc7\x6a\x7a\x56\x2c\xb4\x16\x43\x3b\x4c\x81\xd4\x2c\xcb\x76\x29\x3a\x17\x38\xac\xc9\xd8\xfd\x0a\x3d\x81\xbb\xd9\x69\x8a\xd3\xf8\x62\x7c\x16\x9f\xe7\x5e\x10\xaa\xce\x0b\x09\x1e\xf2\x60\x56\x84\x5e\xba\xb5\xb5\x35\x83\x72\xa5\x45\x43\x2c\x35\x95\xee\x2f\xd2\x56\x8e\xc6\x29\xe5\x33\x4c\x75\x22\x94\x40\x99\x16\xdc\xcc\xd0\x50\x9c\xc6\x77\xeb\xf4\xa5\x5b\xd8\x8e\x2a\x6e\xfc\xe1\xc0\xc8\x9e\xf5\x76\x69\x22\x57\x54\xa2\x2d\xf8\xb5\x94\x73\xe1\x64\xdb\x8f\xf4\xa5\x5d\xb8\x12\xc6\xb8\xb1\x02\x89\x37\x4c\x8c\x95\x8f\xc1\xcc\x93\x59\x3d\xf6\xb9\x03\x7b\x0e\x0c\xe4\x16\xda\xf6\x45\x18\x66\x0b\x68\xab\x88\x3d\x0b\x0a\xfb\x56\x32\x9f\x7e\xb8\x9e\x6e\x20\xe0\x81\xa2\x7f\xf6\x23\xe6\x82\xd9\x70\x20\xd7\x5a\x88\xc8\xa3\x57\xc2\x41\x17\x12\x44\x7c\x9b\x1d\x8d\xf2\x99\x2c\xeb\xd2\x10\x75\x7c\x0f\xb7\x2f\x01\xd1\xb7\x57\xa8\xcb\x40\x7a\x0e\x31\x18\x51\x0f\xc5\x80\xa2\x82\xf8\x21\xdc\x0f\xe0\x2b\x38\xca\x56\xb1\xba\x21\xcd\x73\x19\x11\x57\x16\x87\x0b\x6a\x15\x82\x14\x12\xc5\xa9\x89\xf0\x29\x4e\x31\xc6\x58\x15\xba\xda\x30\x3f\x74\xe2\xd0\x01\x69\xf2\x07\xf6\x69\x1c\xe7\xf5\xa8\xe3\xdb\x49\xdf\xaa\x9c\x6e\xbe\x26\x15\x80\x31\xda\xfb\x0d\x6a\xef\x39\x26\xeb\xdd\xfb\xce\x62\x9f\xbc\xed\x7b\x91\x3a\xc0\x70\xb2\x96\xa4\x55\xa6\x60\xea\xf6\x77\x6d\x2f\x44\xe5\x21\x56\x2f\xc8\x2d\x1c\x17\xf9\x5d\xa4\x6e\xd5\x5a\xb2\xa0\x43\x9f\x5e\xc6\x29\xaf\x6f\x0c\xbb\x80\x0d\x41\x99\x28\x4d\x11\xad\xd3\x22\x0c\x2c\xce\x30\xa4\x69\xf2\x70\x5f\x5e\x83\xc9\xbf\x4d\x97\x66\xe6\xd2\x34\xae\xfb\x36\x46\xdc\x07\x4f\x5a\x0b\x14\x49\x69\xb2\x74\x20\xef\x89\x63\x16\x15\xe0\x44\x10\x43\x1c\x6a\xf9\xa0\x8c\x3b\x2d\x7d\xce\x55\x71\xb3\x90\x03\x90\xa5\xc8\x61\xc8\x32\xb6\xf1\x96\x44\xb5\xc8\xca\x6e\x96\x1b\xad\x34\x0c\x45\x09\xfc\xe2\xa4\x7b\x1a\x6c\x29\x43\xe2\x90\xec\xbd\xc7\xef\x81\xa7\x7d\x0b\xac\x32\xc8\xea\x75\x92\xc2\x21\xf3\xad\xe9\x46\x57\x5b\x90\xc2\x4b\x2c\xdc\x23\x65\x39\xe6\x1b\xd6\x55\x6d\x41\x6b\x5e\x30\x41\x1b\x22\x91\x6f\xbe\x26\xd2\x15\xbf\x6f\x61\xf2\x3f\x7e\xf7\xf1\x62\x7c\x3e\x51\x1a\xdc\x08\x8e\x04\x46\xa5\x51\xd7\xa8\xf4\xa5\x96\xf9\x29\x3f\xc9\x13\x83\xea\x75\x79\x3c\x93\xd5\x12\x26\x41\xba\x56\xdc\x7b\xeb\x75\xf4\xbd\xf3\x27\xb5\x0c\x3b\x56\x99\x32\x9e\x02\x31\xb3\x61\x06\x70\xa1\xbb\xae\xa4\x49\xa8\xca\x9a\x51\x5e\x91\xd5\xb4\xda\x4c\xac\xaf\x79\x80\x6e\x5a\x2b\x34\xe7\x51\x59\x8f\x4d\x1e\xcb\xbb\x66\x47\x93\xfb\x22\x56\xe3\xb4\xb4\x2e\x38\x58\x6b\x07\x0f\x32\x18\x64\x4d\x4b\x80\x04\x08\x6a\xb3\xd7\x61\xbc\x30\x2c\x71\x9a\x4c\xb7\x8a\xc7\x38\x09\x9a\xe4\x61\xd7\x1a\x44\x05\xaf\xae\xd0\xc4\x0e\x16\xee\x7b\x38\xe6\x81\x2a\x4d\x19\xcc\x32\x0d\x46\xdc\x4d\xa6\xe3\x77\x15\xd7\xc6\x1c\x8c\x10\xb8\x50\xf6\x04\x3f\x4c\x5d\xd6\xb0\x4d\xa8\xf2\xc0\xc0\x68\xe2\x0f\x0f\x62\x9b\x66\x27\x65\x8d\x5d\x0f\x0e\xb6\xbb\xbc\x0d\xd6\x2a\x0a\xd1\x86\x96\xea\x45\x2b\x76\x8f\x09\x8b\x60\xbc\x0f\x2b\xf6\x54\x4d\x38\x62\x80\x65\xad\xd5\x6b\x1d\xf8\xdd\x6d\x74\x1f\x44\x7e\xb3\x7d\x0a\x7c\x56\x8f\xaa\x70\xa0\x4a\xbf\x95\x65\xd7\x45\x53\x0e\x45\x0f\x64\xce\xa4\x05\x8f\xb4\x42\x03\xd9\xc4\xf7\x54\x3a\x00\x58\x7c\x2b\xb7\x4f\xc8\xf7\xd3\xb8\x2d\xec\xdb\xe6\x03\x7c\x6c\x63\x77\x1a\xb6\x33\x59\x8c\x9b\xf5\x7c\x73\x8b\x6d\x58\xc5\x27\xd4\x34\xb0\xd8\xd6\x77\x07\x40\x1d\x90\xb2\xbd\x34\x62\xad\x43\xab\xaf\xda\xc5\x90\xd0\x6b\xac\x6e\x96\x49\x75\x09\x88\x6a\xf6\x68\x75\xdd\xcf\xa4\xbe\xd8\xd4\xa1\x23\x68\x53\x35\x6d\x50\x74\xd5\xb3\x47\x82\xa9\xb0\xcb\x31\xda\xb2\x74\xaf\xed\xe8\xbd\xbc\x16\x9f\x44\xcc\x00\xfc\x33\x4e\x01\xf2\x9e\x2d\x0f\x64\xce\x7b\x18\xd8\xd5\xcd\x5b\xcb\x69\xda\xda\xf1\x1b\x82\xd2\x21\x15\xbd\xb4\xdf\x12\x36\xfb\x16\x15\x04\xf0\x50\xed\x4b\x99\x41\x72\x82\xbe\x39\x30\x41\xb4\x9e\xf0\x8a\xb9\xd7\xe7\x32\x9c\x8b\xca\x6a\xb0\x3e\x03\x35\xf5\x85\x5d\xf1\x21\x49\x1a\xa7\x40\x13\x8c\x7b\x16\xc1\x4c\xb6\x5e\x35\x59\xc8\xdc\xcd\x98\x77\x5d\x74\x59\xbf\x48\x9b\x01\x59\xbd\x22\x8f\x47\x90\x8c\x7d\x66\x3c\x0e\xaa\xa6\x27\x86\x01\x04\xe1\x43\x79\xcb\x18\xa2\xa1\x62\x40\x9c\x35\x37\x87\x25\x04\x9b\x02\x34\x9e\x75\x5a\x5b\x0f\x0f\x9d\x82\xca\x84\x17\x22\xef\xa4\x73\xc3\xf6\xc0\x85\x06\xa9\x89\x3b\xa8\xcb\xac\x5d\x06\x6b\x2c\x27\x1a\xbd\x10\x8a\x41\xeb\xda\x8a\xd8\x99\xab\xac\x38\x62\x90\x6a\x43\xa3\x76\xb7\x37\x4e\x01\x51\x2c\x5e\x63\xaf\x81\xa4\xb9\xf7\x5c\xcc\x0f\x98\xb9\x58\x4e\x19\x82\x08\x9c\x99\x3a\x1c\xec\x5b\xc9\x6d\xff\x6d\x9c\xe4\xb6\x68\x67\x8a\x38\x1b\xf1\xe5\x1b\x8c\x40\x6b\x38\x54\xa7\xb0\x72\x0f\x88\x63\x7d\x11\x67\x39\x5c\xa5\xca\xb9\x73\x14\xb1\x9f\x2e\x6f\xa6\xb8\x41\x16\x68\x40\xd1\x18\x8d\x84\xc0\x7e\xbc\x1c\x49\xe2\x42\xaf\x98\xf3\x88\xa7\xeb\x09\x59\x3e\xaf\x74\xc9\x04\x33\x2c\x9a\x53\x82\x7e\xd3\x58\x29\x03\x07\x8c\x24\x31\xbb\x7d\xb5\xb8\x95\xcb\x93\x32\xf7\x04\xb1\x92\xc4\xd8\x12\x74\x1a\x0e\x08\xf3\x18\xf6\x17\x62\xff\x22\xb3\x03\xe2\xe6\x45\xc5\x2c\xab\xf2\x66\xe7\xab\x84\x97\xd9\xf8\xa1\x99\x6d\x50\xf7\xa4\x4b\x94\x04\x5a\x22\x52\xce\xa2\x09\x4f\xe1\xba\xa0\x96\xd5\x88\xc5\x72\x27\x03\xa1\x70\x6f\xd3\x50\x68\xc1\x47\xfa\x68\xb6\x8e\x04\x5d\xc6\x25\xf8\x00\x4b\x8b\x54\x08\xf3\x06\x96\xb5\x62\x03\x39\x4b\xe3\x2c\xab\x86\xbb\xe8\xec\x27\x90\x77\x0d\xbf\x7e\x2e\xcf\x66\xd2\x5a\x42\x9e\x75\xdc\x1d\x99\x23\x4f\xee\xdd\xb0\x18\xee\x1a\xe1\x0b\xd4\xb6\x67\x6b\x8e\x45\x94\x42\x3c\x36\x50\x29\x04\x8f\xb1\xdc\xf3\xb0\x72\xf3\xc3\x9e\xbc\x48\x1d\xa2\x57\x49\xdf\xda\x8d\x67\xff\xd5\xd4\x92\xff\x6c\x02\x12\x7a\x25\x08\xac\xe6\x79\x70\x01\x8b\x5e\xe6\x65\x96\xe2\xea\x32\x1b\x06\xf1\x27\xbe\xca\x4c\xc3\xc9\x8d\x0c\x11\x27\xee\x38\xca\x49\x16\xd6\x52\xaf\x4c\x0d\x5a\xed\x47\xd0\x32\xac\x0b\xa8\x03\x1d\x1a\x52\xfc\xec\x33\x0f\x66\xf4\xf2\xdc\x41\xde\xf8\xc0\x89\xe3\x21\xd3\x7e\x64\x69\x8a\x55\x3f\x9b\xd2\xe7\xbf\xdb\x1d\x23\x7b\x59\xe5\x5d\xaf\x5c\xf7\x31\x69\xf2\x4f\xd3\xe9\x55\x95\xa3\x4d\x0f\xdd\xb6\x1e\x01\x49\xa2\x4e\x15\x3c\xdf\x1f\xc9\xbd\xc5\x08\x66\x3d\x75\x5c\x34\x17\xbb\x0f\xb5\xf1\x80\xa7\x06\x64\x8e\x74\xec\x91\x4a\x5b\x08\x95\x9d\x52\x9d\x77\x28\xbd\x4a\x05\x09\x94\x2e\xab\x11\x17\x9d\x11\x0f\x41\xe6\xa9\xe7\xcb\x1a\xc7\xef\xf0\x40\x14\x72\xdf\xe5\x0c\xd6\xa6\x1c\x88\x9c\x07\xd1\x38\x09\x3e\xc8\x24\xf1\xe7\xde\xef\x71\x2a\xc3\x72\x35\x9f\x07\x51\xeb\xf3\x2b\x2f\x9f\x2d\x0c\x97\x7a\xdf\x3c\x5e\x42\xcb\xe7\x5e\xc8\xce\xc5\x9c\x6d\x88\x56\xbf\xf9\xda\x7a\x91\x44\xe2\x62\x57\x58\xc8\x1c\xc5\x4b\xa4\xc3\x5e\xf1\xc3\xf9\x21\x7b\xf3\xfd\x0f\x3f\x9e\x1f\xb0\x37\xef\xc5\xff\xbf\x7f\xaf\xb7\x96\x71\x23\x42\x6c\x80\x2d\xf2\x65\xd4\x15\xb0\xaa\xc1\xb0\x1e\x83\x80\xde\xa4\x6a\x2f\x84\x45\x3b\x47\xc5\xf2\x1e\x22\xd1\x3e\xa8\xc5\xb6\x03\x9c\xbe\x38\xb1\xed\xd6\x84\x36\x4d\xbc\xed\x21\x18\x6a\xda\xa3\x49\xa1\x69\x2d\x27\x5b\x53\x59\x6b\x8e\xb7\xe3\xf1\xda\x5f\x75\x19\x64\xe0\xf2\x23\x33\x38\xcc\xe2\xe8\x21\x98\xe3\x39\x90\x16\x03\xb1\xb6\x3d\xaa\x9b\xf1\xfb\x89\x9e\x6b\xf3\x2d\x8d\xaa\xfe\xa2\x7a\xf3\x35\x81\xee\xe4\xba\x23\xca\x5b\x5b\x11\x12\x7d\x7d\xb4\xb2\x8d\xb7\xf6\x54\xa3\xf2\x9a\x58\xee\xf4\x5b\x0f\x7e\x85\xe6\x2a\xef\xf5\x26\x69\x6a\x58\x4c\x7a\xd1\x72\x41\x5c\xc0\x2e\x39\xc7\xdc\xba\x7a\xa5\xb0\xb3\xbc\x03\x67\xa9\xae\x1f\xa8\xfd\xfa\xcb\xf2\x94\xe0\xa5\x75\xa0\x86\x3e\xa4\x1c\xf0\xc6\xf7\x60\x93\x5c\x9e\xca\xe2\x19\x05\x68\x67\xbc\x3a\xcf\x45\x0f\xf5\xea\x97\xd5\x37\xee\x41\x93\x22\x01\x2a\xee\x62\xbd\x91\x4e\x21\x2a\xdf\xa9\xf9\x86\xdd\xb2\x16\x19\xc5\x3a\x45\x50\xab\x07\x37\x72\xe9\xed\x9b\xb0\x5b\x66\x04\x99\xf1\xba\xd6\xdb\x70\xfb\xb4\xfd\x00\x94\xca\xc3\x60\x92\x17\xcb\xb9\x5c\x83\x9b\x61\x81\xa1\x5b\xb6\xd9\x8c\xb8\xe1\xef\xc5\x68\x2f\xb2\xd6\x72\xfd\xec\x56\x56\x33\x23\x17\x59\x37\x3c\xeb\x6c\x72\x54\x13\x6b\x13\x51\xb5\x5a\xf5\xc9\xc1\xa7\x3d\x3f\xdf\x99\x9d\xe1\xb7\x00\xc9\xa1\xfd\xb2\xee\x40\x95\x08\x5f\x99\xca\x6e\x8c\x23\xc4\x53\x74\x67\x61\xda\x39\xbf\x7d\x49\x5e\x8d\xaa\x3d\x49\xde\xcd\x6f\x87\x92\x8b\x17\xa2\x67\x7a\x51\xf0\x77\x14\xe7\xeb\xd7\xd7\x50\xb4\x91\x6e\x7a\x27\x2d\xe0\xc8\x97\xd0\x12\xfc\x73\xc2\x67\x70\x62\x2c\x8f\xef\xe1\x20\x32\x9e\xa1\x33\x92\x7f\x84\x3a\x30\xc6\x8f\x34\x0a\x45\x27\x41\xc0\x87\xd3\xa4\x0a\xa4\x5f\x5e\xd7\x83\x23\x9f\xf2\x9a\x92\x47\x41\xcc\x4b\xe7\x05\x38\xc1\x68\x51\x5e\x9d\xdd\xbe\x3f\xbd\x18\xe1\x35\xd7\x88\xb9\x93\xb5\x3d\x22\xa8\x38\xc0\xd7\x56\x0c\x2a\x03\x85\x0b\x0b\xf5\x8a\x56\x9d\xd0\xa0\x9f\xa2\xf8\x29\xc2\xd8\x73\x06\xee\x6d\x85\x9c\x78\x18\x7c\x98\x74\xc5\x08\x7c\xc2\x18\x1c\xbb\xea\xb6\x16\xd2\x2c\x0d\xf5\x7a\x69\xb8\x65\x52\x29\xb6\xab\xbb\x7c\xe8\xac\x25\x9a\x96\xf9\xdb\x76\xd6\x20\x34\x41\xe6\x1e\x9e\x86\x56\x99\x88\xc9\x10\x41\x06\x67\xb6\x5e\x21\x6a\x76\xc1\xc2\x5e\x3e\x69\x10\x68\x93\x68\xdd\x54\x94\xce\xcf\x32\x1e\x4e\x67\x79\x17\xce\x52\x63\xf3\xaa\x44\x85\x36\xdc\xf5\x75\xdc\x11\x74\x24\x99\xef\x2c\xef\xce\xb9\x33\xc9\xbc\x45\x0d\x32\xf7\xa8\xe6\x4e\xc0\x95\x07\x2e\x6e\xb4\x3b\x51\x58\xd4\xa4\xa2\x69\xf5\xe2\x58\xef\x63\xf0\x6c\xe5\x11\x62\xe5\xb1\xc4\x0b\x52\xc3\xc4\xdb\x93\x1c\x11\xb7\x74\x4f\x54\x7f\x9b\x14\x19\x73\x69\x1a\x57\x9c\xde\xa5\x49\x13\x1c\x78\x07\x90\x75\x0b\x6e\xa1\x1e\x05\xf1\x6b\xf9\xc0\x3f\x3e\x16\x4f\xd4\x8d\x12\x18\x3b\xa5\x60\x5c\xc3\xd3\x43\x08\x71\x9e\x56\x0e\xe1\xca\xa5\x22\xc8\xb0\xae\xda\xf1\x34\xab\x1a\x26\xca\xe7\xc4\xe2\xd0\x62\x7b\x8a\xac\xb1\x7b\x86\x74\xd9\x1b\x19\xfa\x09\x29\xfe\xe9\x04\xe8\xd8\x5a\xcf\xf6\x9c\x1a\x9c\x4e\x89\x8e\xd6\x62\x73\x65\xbf\x65\x1b\x84\xa8\x8b\x0c\x9b\xab\x27\xf9\x14\xa6\x07\x29\x77\xbc\xf7\x9b\x61\xf0\x9d\x7a\x89\x1b\x35\x77\xd4\x2d\x41\xcd\xb7\x18\x12\x46\x62\x4f\xb2\x0e\x72\xb4\x9c\xc0\x3b\xb7\xbd\x03\x2d\x3a\xe2\x46\x16\x82\x67\x39\xa4\x7c\x3e\x24\x84\xd6\x0a\x63\xaf\x3a\x48\x85\xeb\xe9\x0c\x77\x36\xa8\xa2\x5c\x79\xb9\xc9\x64\x86\x54\xd7\x01\x91\xfb\x72\x45\xa6\xe0\x80\xae\xbe\xa6\xdb\xa1\xd1\xd6\x70\xe3\xfe\x7f\x83\xe4\x9d\x68\xf3\xb7\xab\x9c\x67\x90\x78\x45\x3c\x82\xdf\xc7\x60\xa0\x02\xfb\xd3\xc0\x94\x80\xaf\x07\x25\x7b\xb4\x06\x8f\x7b\x37\x27\xfb\xd2\x47\xb0\xe6\xcf\x8a\xa1\xcf\x31\x79\x44\x2e\xbd\x04\x95\x02\x09\x23\x09\xc3\x99\x99\xef\xe7\x7a\x13\x24\x61\xf7\x58\x1c\xf1\x11\xb8\x41\x88\x0d\x47\x96\x3d\xc5\x29\x9a\x92\x85\xf1\x3c\x30\x6c\x77\xad\x2b\x52\xb0\xd4\x26\xa4\xdc\x33\xb8\x8b\x98\x8a\xd2\xf8\x89\x66\x96\x4e\x75\x72\xbe\xb2\xb7\x10\x20\x55\x26\x61\xb2\x08\xd7\xa0\x2b\x46\xe2\x63\x26\xef\x4a\x15\x56\x49\x23\xe1\x66\x01\x02\x6d\x98\x17\x9a\x91\xc4\xaa\x19\xdd\xe0\x26\x67\x5d\x8f\x88\xa4\x72\x40\xc1\x64\xa4\x68\x14\xd2\x81\xc1\x58\x83\xc8\x5d\x86\xf2\xfa\x82\xb1\x5e\xac\x56\x1f\xbb\x5a\xd6\x28\x3e\x4c\xae\x6f\x4e\x2f\x2f\xf4\x5d\x68\xbb\x80\x3d\x6d\x2f\x0c\x7c\xf6\x6f\x37\x97\x17\x2c\xbe\xff\x1d\xf2\xbf\xa9\xa0\x7d\x35\x15\x73\xa4\x82\xba\xcd\x94\x0d\x5b\x91\x4a\x2b\xf7\xc4\x4b\x85\x54\xb9\xd8\x94\x1f\xac\xe7\x07\x1e\xa0\xa7\x60\x10\x8d\xc2\x20\x02\x97\x45\x50\x6a\x3c\xec\x0a\x87\xec\x1d\x06\xe7\x2d\x53\xd3\x2b\xb3\x79\x51\x49\x4f\x37\xe3\x70\x60\x3c\xc3\x0b\x12\xf9\xb6\xcc\xc6\x6f\x08\xf1\xab\xff\x34\xff\xec\xe2\x12\xbe\xbb\xf2\xa2\xbf\x30\x4d\x21\x9a\x52\xf6\x5c\x04\xbe\x87\x15\xbb\x52\x0b\x96\x9e\x8f\xae\x1c\x85\x53\x66\x72\x6c\xdd\x7a\x6f\x4d\xf9\xaf\xe3\xeb\x8b\xd3\x8b\xf7\x32\x2c\x8d\x5c\x06\xa0\xb3\xa0\x62\x50\xad\xc4\xe0\x59\x51\x5d\xe8\xc9\x9e\x80\x4e\x56\x70\x8a\xb5\x08\xe6\x8b\x70\x05\xae\x56\x33\x51\xc7\x9b\x73\x1f\x49\xfd\xdc\x20\xb0\xf4\x56\xec\x9e\x0b\xd5\x43\xfa\x17\x82\x4d\x19\x74\x2c\xe9\x56\xa9\x5e\xa6\x7c\x06\x1e\xc0\x78\x79\x88\xec\xb3\x05\x0f\x43\x41\x3f\x03\xb7\x62\x88\xdb\xa6\x15\xff\x1f\x53\x08\xf2\x37\x62\xe8\x2a\xa2\x62\x29\xc6\xe8\xea\x22\x86\x52\x26\x63\x29\xd6\xc2\x6d\x94\x7b\xfe\x94\x67\x49\x1c\x6d\xb8\x90\x6e\x0e\x2f\x99\xd3\x4e\x68\x5a\xd1\x5c\x54\xa9\xc2\x09\x49\xb7\x27\xb8\xde\xdd\xb2\x73\x96\xc6\xe5\xe8\xfe\x2a\x4d\x1a\xfd\x03\xf0\x09\xc0\x14\xf5\x71\x9a\x2c\xf0\x8c\x14\x9a\x21\x83\x56\x38\x0e\xe3\xc2\x17\x73\x45\x11\xf9\xe9\xea\x65\xc6\xc4\x96\xd1\xbb\xf7\x32\x31\x7f\x8c\x05\x71\xb8\xbe\x0c\xb9\x3f\xaf\x9c\xe8\x4b\x6e\xe8\x10\x83\x0d\x0a\xae\x59\xbe\xbc\x8d\x6a\xd0\xaa\x87\x98\xdc\xc6\x88\x9a\x6c\xd9\x1c\xd2\x62\x20\x3b\x84\x60\x3c\x5e\x9e\xf3\x65\x92\x57\x0c\x96\xe8\xe3\x20\x43\xd7\x78\xb3\xb6\x76\xfc\x3f\x95\xc5\x48\x3d\x23\x26\xde\xf0\x81\xf3\x8b\x2f\x74\x81\x34\x5e\x95\x49\x36\x36\xbe\x41\xcd\xb1\x47\xb5\xcd\x16\x56\xd1\x12\x0f\xe0\x8c\xd2\xca\x05\x93\x9e\x89\xbe\x55\x3a\xfc\x40\xb8\x4c\x35\x2b\xcb\xc6\x2f\x23\x45\x8d\xe0\x6c\x6a\x24\xcf\xa6\xe2\xad\x97\x0a\x0d\xca\xb9\x4c\x2a\x0f\xb4\x99\xf8\x6e\x51\x61\xf0\x0a\xfd\xa3\xeb\xfd\xd1\xf5\xf6\xd5\xf5\x7a\xcf\x87\x01\x7c\xf5\x1c\xb6\x05\x18\x98\xb1\xf1\xc9\xfe\xcf\x46\xeb\xd4\xc2\x8e\xdd\xf3\xf2\x0b\x80\xb7\xa8\x10\xbc\xbc\xec\xcb\x5a\xb3\x36\x36\x6b\x7a\xa1\x60\x08\x49\x75\xd1\xfd\x3e\x0d\x96\x5e\xba\x42\x47\xab\x19\x38\x1c\xaf\x1d\xf7\xeb\x20\xd1\x03\x2d\x09\xd1\x79\x71\xeb\xa3\x61\xec\x8b\x00\x1a\x6a\x89\xb9\x7a\xa0\xad\x1e\xdf\xb0\x9b\x66\x8e\x54\xb8\x7b\x92\x26\x06\xe6\x8a\x3f\x60\x49\x88\x73\xcf\x97\x9e\x8c\x5c\xb8\x2d\x0f\x76\x70\xc1\x03\xae\xb7\x10\x9d\xa8\x86\x7f\x1f\x32\xf6\x57\xb9\xa6\x2d\x05\x4d\x58\xe4\x3e\x95\x7d\x4d\x15\xaf\xcc\x1e\x30\xb2\x4e\x21\x6d\x32\x7c\x30\x49\x51\x85\xd6\x5f\x3f\x49\x31\x7f\x03\xf3\x7c\x1f\x43\x6f\x88\x8f\xb4\x01\xe1\x9e\x63\x38\x7b\x19\xd0\xf9\x90\x5d\xc2\xb1\xaf\x69\x0a\x58\x06\x73\xf0\xa8\xf7\x0f\x4a\x66\xeb\xa8\x78\x02\xac\x94\x06\xdc\x96\x8c\x63\x99\x3e\xf7\xfd\xd1\xcd\xfe\xe8\x66\x7d\xba\x99\xfd\x3c\xe7\xa5\x30\x2b\x1f\x41\x6c\x22\x19\x45\x6f\x91\xe7\x49\x23\x94\x1e\x93\x41\x6f\xe0\xca\xbd\x56\x24\x6b\x94\xc9\x54\x98\x44\xd5\xbc\xa0\xdb\xea\xfb\xfc\x1e\x58\xd2\xe5\x97\x46\x91\x90\x01\x07\xbe\x1c\x44\xed\xea\x16\xc0\x54\xc7\x1e\x41\x1a\x88\x4e\x27\x84\x14\xeb\x75\xec\x63\x6c\xca\x77\xa7\x67\x13\xec\x26\xdc\xf3\x71\xdf\x9b\xfb\x62\x29\xd6\xe3\xa1\x53\xb0\x46\xf7\x7f\x83\x44\xb4\xf3\x6c\x11\x3c\xf2\xf5\x79\xa1\xda\xf1\x5b\xd9\x56\xd1\x09\x58\x63\xfb\xe5\xfc\xf6\x6c\x7a\x7a\x35\xbe\x9e\xbe\x7e\x77\x79\x7d\x3e\x3a\x19\x4f\xc7\xec\xf8\xf2\x62\x3a\xb9\x98\xb2\x9f\x4e\x4f\x4e\x26\x17\xbf\x6a\x71\xd1\x2a\xdb\x63\xba\xba\x3e\xfd\x30\x9e\x4e\x18\xd2\xeb\x04\x61\x2e\x6d\xcf\xb5\x2d\xbd\x5e\x66\xe0\xdb\x55\xde\x9e\xf3\x3c\x8c\xef\xc5\xfc\xa7\x22\xa2\xfc\x5a\x69\x76\xbf\x94\x46\xb9\xd9\xe1\xe1\xe1\xaf\xec\x97\xf2\x79\x59\x50\x8f\xad\x3f\x45\x6b\xf4\xd2\xb3\x50\x0b\x65\xf3\x35\x91\x2e\xae\x99\x72\xee\x86\x8c\x39\xf5\x03\xa8\x0e\xfb\x38\x65\x79\x5a\xe6\xe2\xaa\x8e\xd3\xd4\xaa\x40\x37\x7f\xed\x04\xb4\xb9\x6f\x22\x43\x33\x58\xf0\x75\x20\xcb\x63\x7d\x43\x6c\xbc\xb5\xff\x00\xa1\xfe\xda\xac\xf1\x8e\x42\x31\x7e\xe2\xfa\x03\xb8\xad\xf7\x04\xca\x56\xc9\x57\x7a\xe7\x59\x31\xb9\x3d\xb9\x39\x35\xc1\x95\xf5\x2c\xf5\xb2\x85\xa9\x5d\xda\xca\x50\x38\x18\x5a\xc4\x2d\x0e\x35\x1a\xd8\x94\x41\x8f\x1e\xc4\xe2\x6d\x42\x6f\x2a\x6b\xcd\x71\x1d\x46\x57\xcb\xa8\xad\x88\x3d\x7d\x1c\x7b\x47\x6b\x03\x1c\x3d\x1b\x7d\x49\x7b\x6e\xe5\x92\xad\xbf\x4e\x69\x2b\x62\x4f\x1f\xae\xd0\x51\xf3\x86\xeb\x75\xc3\xc7\xd1\x17\xb4\xe6\x35\x4b\x0a\x2d\xf9\xc6\x3b\x7b\x8a\x1d\xe3\xc1\x7d\x2c\x60\x4d\xd3\xd4\xbc\x5d\xc0\x9a\xb6\xbf\xce\xa1\xaf\x25\xdf\x5a\x86\xc0\x01\xb3\x4b\x1a\xa8\x6f\xbc\xb7\xa7\x1c\x64\x5d\x93\x73\x5b\x11\x0a\x7d\xbd\x7a\xdb\x7c\x49\xa2\xa9\x1f\x3e\x1b\x6f\xed\xa9\x5a\x5a\x03\xf4\xbf\xf8\x97\xfe\x1c\x06\x06\xcd\xd7\x44\xba\x06\x6f\xa4\xed\x02\xb6\x8a\x06\xcc\x13\x06\xb2\x4f\x2e\x70\xa5\x0b\x93\xbe\xdf\x6d\xbd\x27\x50\xc6\x38\xdd\x68\x58\x73\x95\xc2\x99\x4b\xbe\x2a\x0d\x6c\xb2\x45\x5c\x84\x7e\x79\x6c\x03\x39\x62\x0c\x00\xdc\xc8\xd8\xe3\x7c\x34\xb9\xf3\x6d\xbc\xb5\xa6\x2a\x57\x5a\x96\x17\xb8\xd1\x06\xa5\x14\xb6\x8c\x59\x1c\x72\xc6\x67\x8b\x58\xea\xb1\xe5\x9d\x99\x60\x91\xae\x6a\x1e\x8c\x27\xeb\x79\xca\xb0\x12\xee\x82\x85\xbd\x7c\x82\xb7\xd1\xf2\x64\xbb\x80\x3d\xed\x94\xe3\x19\x56\xe2\x05\xfa\x8e\xd9\x5e\xc8\x9a\x07\xc4\x26\xd5\xd2\x6e\xbe\xb4\xa6\x19\x44\xb3\x38\x85\x00\xcf\xac\xc8\xbc\xb9\xbe\x69\xb4\xe5\x08\x9c\x94\xbd\xaf\x0a\x3f\x15\x06\xcb\x40\x2f\x4e\x47\x69\x32\x57\x54\xbe\xca\x48\xe0\xa7\x10\xb5\x1b\xcc\x05\x85\x6e\x9f\xc5\xd1\x91\x8c\x72\x12\xe4\x8d\x0e\x76\x00\xf3\x74\xfe\x31\x5b\xa7\x4c\x82\x22\x32\x83\x92\xa1\x87\xef\x9e\x21\x59\x76\xfd\xf2\xdf\x27\xc2\x55\x55\x57\xbf\x6c\xb4\x15\x21\xd0\x7f\x44\xa3\x97\x20\x5a\x88\xbd\x71\x2e\x53\x35\x06\x51\x65\xa5\x65\xe0\x6a\x5b\x91\x8c\x45\x7a\x5c\x61\x88\x1c\x35\xc5\x1f\xbf\xfb\x78\x33\x1d\xbf\x3f\xbd\x78\xff\x71\x7a\x7a\x3e\xb9\xbc\x9d\x96\xf3\x95\xb1\x8f\xf4\x23\x37\x18\xee\xeb\xe9\xed\xd5\x80\xb8\xbb\xc8\x59\xe3\x0e\xbd\x7b\xae\x5f\x5e\x37\xde\x12\xa8\x82\x41\x53\x79\x91\x62\x20\xdf\x5e\x8c\xc6\xa7\x48\xe4\xf6\x48\x3f\x3a\x60\xa7\x26\xa6\xd2\xb6\x92\xb6\xda\x15\xce\x8a\x06\x4d\x68\xeb\xbd\xbd\x0c\x60\xfc\x85\x61\x73\xab\x34\x54\xca\xd3\x5e\x1d\x00\xea\x27\x15\x4a\x55\x3a\x1e\x0c\xa2\xea\x83\x21\x8e\x22\x0a\x51\x3e\xb3\x20\x37\x85\x8c\xa4\x55\xb6\xc7\x14\x43\xce\x02\x3d\xd7\x8d\xd7\xd6\x74\x97\xe6\x00\x98\x9b\xaf\x89\x74\xf5\x1d\x72\xeb\xbd\x35\x65\xa3\x56\xe5\xa8\x51\x45\x71\xc4\xee\xbd\x6c\x7d\xfe\xaa\xef\x71\xa6\xa2\x14\x7e\x06\x19\x1a\x2f\x09\x34\xe1\xa0\x1f\xa6\xcc\xd2\x1c\x52\x9d\x6a\x89\x1e\x68\xd4\xe6\xec\x2b\x5a\x63\x31\x05\x3b\x70\x8b\x65\x50\x0f\xbe\x62\x22\xdd\x52\x88\xc2\x43\xff\xdd\x1d\xf3\x65\x88\x5d\xa7\x61\xd8\x6e\xbc\xb5\xa6\x0a\x4a\x7d\x75\xa0\x8f\xc7\xfd\x86\x99\x5f\x5f\xd4\x9e\x9f\xa8\xa7\xe7\xd0\x78\x49\xa2\x69\x80\xdd\x03\x69\x56\xcf\xbf\x71\xbf\x6a\x5e\x83\x58\x75\x24\x47\x2a\xf6\x28\x55\xe2\x18\x3d\x80\xad\x02\xf6\xb4\xa5\xd9\xb5\xfe\xc6\x65\xbb\x80\x35\xed\xbf\x99\x13\xeb\x6f\xbe\xb6\x55\x2d\x60\x65\x94\x61\x06\x9e\x30\x8d\x41\x2d\x16\xd0\x7d\x10\x81\x91\x4a\x90\x31\xb1\xc4\x79\x26\xfd\xc3\x8d\x88\xb5\xe8\x40\x5e\x85\x00\xd7\xf7\xda\xf6\x42\x04\x1e\xe5\xbc\x9b\x19\xb3\xf7\x6a\xcb\xb9\x72\xd2\x7f\x52\x7d\x41\x7b\x5e\xe6\xa0\xcc\xce\x41\x98\x95\xb9\xa1\x9e\xf0\xe6\x7b\x6b\xca\x96\xf1\x5d\x7a\x87\x75\xd9\xba\xec\xdd\x62\xa0\xbf\x0c\xb6\xa2\x6c\x13\x27\x66\x90\xf0\x30\xd6\xb1\x59\x06\x08\xc9\x62\x1f\x6c\x7b\x88\xe0\xda\x25\x8d\x4f\x5c\xaf\x25\xb7\x96\x21\x73\x30\x2e\xb2\xed\x85\xa8\x3c\x46\x9d\x56\x09\xed\xc5\xa8\x7c\x3a\x3f\x89\xd3\x97\xc0\x4c\x2c\x7a\xca\x1b\xaf\xed\xe9\x06\xc6\x0e\x1b\x38\xf6\x52\xa3\x47\xad\xab\x7b\x6c\x2d\x26\x80\xe1\x2c\x4c\x53\x8a\xc6\xa5\x8b\xbe\xcb\x0d\x0d\xfa\xfb\x19\xe8\xe6\x8e\x17\xca\x98\xe0\xc4\x68\xd3\xb2\x55\x80\x42\xdb\xb0\x14\xbb\x2e\xc0\xf2\xe4\xd5\x48\xb6\x70\x1a\x24\x90\x5a\xde\x34\x4a\x36\xdf\x53\x29\x33\x0f\x6d\xfd\xdf\x88\x4d\xa2\xcc\xd6\xd8\xc5\xca\x50\xc1\x9a\x37\xb8\x74\x6b\xf9\x34\x5f\xda\xd3\xc4\x4c\x0c\x56\x17\x04\x9d\xf7\x02\xc6\x4e\x5f\xa8\xf0\x8a\xb0\xc0\xc6\xa0\x2f\x68\xf9\x18\x4a\x5a\x8b\x55\x44\x5d\x07\x75\x2d\x25\xec\xa9\x6f\x07\x35\xab\x4d\x36\x7a\x96\x96\xd5\xec\x71\x18\x82\x26\x14\x4e\x41\x13\x44\x2d\xfd\x70\x6c\xbe\x24\xd1\xd4\xcf\x76\x1b\x6f\xed\xa9\xc2\xa5\x98\x81\xec\xc6\x6b\x02\x5d\x83\x66\xd0\x7c\x49\xa2\x59\x85\x96\x33\x12\x6f\x29\x65\xcd\xe5\xb1\xc3\xb1\x75\xeb\xbd\x35\xe5\x27\x34\xbc\x56\xe1\x8f\xe5\x5d\x04\x3a\x1d\xa0\xef\x11\x7a\x28\x6b\x99\x52\xaa\x5a\xe3\x59\x19\x54\xab\x95\x93\x56\xf5\x45\x26\xd7\x50\x26\xf7\x5f\xbf\xb2\x57\x18\x91\x4e\xb6\xd8\x91\x8c\xc6\x52\x66\x5b\xba\xc9\xc1\x70\xf4\xeb\x57\x7d\xfa\x9f\x9e\xd4\x28\xa8\x8f\xdf\x95\x51\x7e\x92\xc0\x84\xa7\xbd\x9c\x13\x27\x73\x04\x12\x43\x49\x12\xb7\x32\xe9\x39\x5b\xf0\x30\x61\xbf\x1c\x5f\x9e\x9f\x8f\x2f\x4e\xf4\xe6\xd4\x56\x75\x68\x08\x8a\x28\xbf\x7c\x50\x5e\x3c\x99\xa0\x5a\x3a\xaf\xe8\x0d\x8e\x6c\xab\x91\x70\x48\x43\xba\x32\xc0\x4e\x97\xdd\x9d\x45\x0d\x0a\xf7\x93\x20\xfb\x74\x0b\x73\xa9\x4c\x7f\xab\x9e\xa8\x28\x5c\x26\x10\x96\x15\x49\x58\x84\x56\x50\x0a\x65\xb4\x72\x32\x96\xa5\x70\xdc\x36\x82\x51\xf9\x6b\xcb\x58\x40\xc7\xef\xca\x0f\xdd\xcc\xd2\x8f\x81\x81\x6a\x6e\xb7\x99\x4c\x95\x2a\xd3\x0e\xaf\x43\x03\x19\x7b\xd2\x1e\x99\x13\xdb\x04\x90\x28\x2c\x45\x89\x65\x8d\x00\xee\x4f\x84\xa6\x08\x07\x0e\x90\x7a\xd5\x7c\xc6\xdc\x9f\x20\x05\xfb\xbb\x50\x7a\xd4\x55\xd1\xaa\xa4\x4b\x93\x09\x5d\x67\x15\x0a\xff\x73\xbe\x6c\x8e\x09\xf1\xc0\x62\x2c\x59\x55\x23\xe1\x88\x7d\x1e\x4e\x57\x09\x50\x2c\x7f\xb6\x26\xa7\x37\xa2\xa2\x13\xa1\x60\xbc\x2c\xed\x01\x14\x8b\x0e\x0b\x76\x8b\x1a\x7d\xb8\x43\xce\xa6\x34\x9e\xa7\x26\x37\x1a\xdb\x6a\x7d\x70\x64\xc5\x6c\xc6\xb9\x49\x8d\xb4\xab\x44\xc1\xd0\x34\xa8\x64\xcb\x22\x93\x7e\xb4\x2c\x43\xdd\x05\xa3\xf3\x16\x62\xba\x41\xed\xce\x84\xcb\x91\xd0\x90\x58\x7b\x63\x1c\x0e\x1b\xc1\xbc\x95\x56\x99\x82\xa9\x1e\xf7\xf6\x95\x9c\x59\xc4\x26\xff\x0c\xb6\xc6\x5f\xbf\x9e\x37\x0e\x06\x0e\xea\xf6\x75\x8d\x72\xac\xd5\x76\xf0\xa0\x0a\xaa\x95\x95\xe5\xca\x34\xd0\xeb\x70\x96\xd5\xab\x72\xad\x3a\x60\xf5\xbb\x5a\x0c\x5d\x79\x11\x47\x6f\xc1\xd6\xa0\xac\x32\x96\x26\xee\x1d\x1a\x38\x55\xb2\x7d\x21\xb5\x3d\x30\x01\x48\xf2\xee\xa6\x5c\x7a\xe4\xdc\x8f\xb9\x33\xcb\x47\x6b\x1f\xeb\xae\x7b\xa0\xbe\xe4\x28\x9d\xea\x46\x9d\x33\x96\x64\x3b\x0f\x26\xad\xea\x0c\x81\x00\x7b\xc2\x89\x74\xc1\xe8\xe8\x3f\x64\x12\x44\x7c\xf9\xc6\xfa\x70\x58\xe9\x75\x2d\x5a\x5d\x9c\xd6\xdf\x34\xd5\xbd\xd9\x82\xcf\x3e\xd5\xc2\x15\xc8\x53\x53\xa3\x6a\xb9\x57\xf6\x94\x76\x29\xd5\x1c\x50\xbc\x50\xd5\x13\xfb\x26\x39\x70\xc5\xc3\xcf\xf5\x09\x68\xab\xcb\x9a\xe4\x1d\x84\x6c\xab\x1c\xff\xe3\xd7\xff\x2f\x00\x00\xff\xff\x33\xdf\x8a\xa6\x2d\xf4\x02\x00") - -func cf_i18n_resources_zh_hant_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_resources_zh_hant_all_json, - "cf/i18n/resources/zh_Hant.all.json", - ) -} - -func cf_i18n_resources_zh_hant_all_json() (*asset, error) { - bytes, err := cf_i18n_resources_zh_hant_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/resources/zh_Hant.all.json", size: 193581, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_test_fixtures_en_us_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x9c\x90\x31\x8b\x84\x30\x10\x85\x7b\x7f\xc5\x90\x5a\xf2\x03\xae\x3d\x6b\xbb\xab\x8e\x2b\xe6\xcc\xe8\x0e\x1b\x33\x92\x49\x58\x16\xf1\xbf\xaf\x11\xb6\x53\x91\x4d\x11\x86\xc7\x9b\xf7\x0d\xef\xb7\x02\x80\xb9\x7c\xeb\x33\xec\xcc\x17\x98\x86\x3c\x25\x52\x40\x50\xea\x72\xe4\xf4\x84\x21\x4a\x9e\x4c\xfd\xf6\xa5\x88\x41\x3d\x26\x96\x70\x6d\x61\x14\xc7\x3d\x53\x89\xef\xd1\x2b\x15\x7d\xa9\x77\xd8\xad\xc0\x7f\x66\xef\x26\xec\xee\x0a\xbd\xe4\xe0\x0e\xb1\xa7\xde\xcb\xc4\xef\x1b\x86\x81\x20\x2b\x45\x98\x50\xf5\x21\xf1\x18\x79\x6e\xbe\xcc\xdc\x0a\xe3\x30\x80\x93\x11\x39\xc0\x3c\xdb\x66\x9b\x5a\x1c\x69\x59\x00\xb5\x48\x3f\x2b\x25\x6c\x82\xb5\xf6\xbc\xfc\x4f\xb3\x76\x2f\xae\xfe\xaa\x57\x00\x00\x00\xff\xff\x6c\x31\x2e\x76\x17\x02\x00\x00") - -func cf_i18n_test_fixtures_en_us_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_test_fixtures_en_us_all_json, - "cf/i18n/test_fixtures/en_US.all.json", - ) -} - -func cf_i18n_test_fixtures_en_us_all_json() (*asset, error) { - bytes, err := cf_i18n_test_fixtures_en_us_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/test_fixtures/en_US.all.json", size: 535, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_test_fixtures_fr_fr_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x9c\x90\x41\x4a\xc5\x30\x10\x86\xf7\x3d\xc5\xd0\x8d\x9b\x47\x0f\xe0\xd6\xb7\x7e\x08\xe2\x4a\x5c\x8c\xcd\xb4\x0e\x26\x99\x90\xc9\x28\x52\x7a\x20\xcf\xe1\xc5\x4c\xab\x82\xe0\xab\x48\xb3\x08\x93\x9f\x3f\xff\xf7\x27\x77\x0d\x00\x4c\xcb\x56\x57\xcb\xae\xbd\x84\xf6\x48\x9e\x0a\x29\x20\x28\xf5\x96\xb9\xbc\xc2\x98\xc5\x52\x7b\xf8\xf6\x95\x8c\x51\x3d\x16\x96\xf8\xbf\x0b\x41\x1c\x0f\x4c\x4b\xfc\x80\x5e\x69\xd1\xe7\xc3\x19\xf6\x49\xe0\xc1\xd8\xbb\x84\xfd\x93\xc2\x20\x16\xdd\x26\xf6\x1a\xf5\xa7\xb9\x54\xe4\xf3\xfb\x9b\xee\xa0\x5e\x3d\x62\x1c\x09\x4c\x29\x43\x42\xd5\x17\xc9\xdb\xd8\x4f\x73\x86\x20\x05\x1c\xad\x7e\x5a\x06\x7f\x61\x85\x3d\x2b\x16\xb2\xbc\xa3\xc4\xfa\x8b\x1c\x47\x70\x12\x90\x23\x4c\x53\x77\x5c\xa7\x13\x06\x9a\x67\xa8\xaf\xad\xd2\x6d\xed\x18\x57\xa1\xeb\xba\xcd\x8e\x37\x96\x52\x26\xd5\x7a\xfc\x8a\xa3\x5f\x79\xbd\x84\x40\x7f\x44\x9e\x2d\xde\xdc\x37\x1f\x01\x00\x00\xff\xff\xe0\x1a\x25\x24\x33\x02\x00\x00") - -func cf_i18n_test_fixtures_fr_fr_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_test_fixtures_fr_fr_all_json, - "cf/i18n/test_fixtures/fr_FR.all.json", - ) -} - -func cf_i18n_test_fixtures_fr_fr_all_json() (*asset, error) { - bytes, err := cf_i18n_test_fixtures_fr_fr_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/test_fixtures/fr_FR.all.json", size: 563, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_test_fixtures_zh_hans_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x8a\xe6\x52\x50\x50\xa8\x06\x11\x40\xa0\x94\x99\xa2\x64\xa5\xa0\xe4\x92\x9a\x93\x5a\x92\x5a\xac\x90\xa8\x50\x9c\x9a\x5c\x5a\x94\x59\x52\xa9\x90\x5e\x94\x5f\x5a\xa0\xa4\x03\x53\x57\x52\x94\x98\x57\x9c\x93\x58\x92\x99\x9f\x47\x9c\x86\xdc\xfc\x94\xcc\xb4\xcc\x54\x90\xf1\x69\x89\x39\xc5\xa9\x20\xf1\x5a\x1d\x2c\x76\xfb\xe5\x2b\x24\x95\x66\xe6\xa4\x14\x24\x26\x67\x17\x2b\xa4\xe5\x97\xe6\xa5\xe0\xb4\x16\xae\xf0\xd9\x9c\x55\xcf\x3a\xf7\x3d\xed\xd8\x40\x86\x85\xce\x19\x89\x79\xe9\xa9\x0a\xa5\xc5\xa9\x45\x0a\x05\x89\xc5\xc5\xe5\xf9\x45\xb8\x6d\x7c\x36\x7b\xcb\xb3\x29\x3b\x9f\x4f\x59\xf1\xac\x63\xfb\xd3\xf5\x6d\xcf\x17\x34\x92\x61\x23\x38\xb4\x32\xf3\xd2\x15\x52\xf2\x73\x13\x33\xf3\x14\xaa\xab\xf5\x5c\xc0\x2c\xbf\xc4\xdc\xd4\xda\x5a\x85\xc4\x62\x90\x50\x28\xd0\x41\x79\x60\x01\x3d\x3d\x3d\xfc\x21\x4f\xae\x59\x58\x5d\xcc\x15\xcb\x05\x08\x00\x00\xff\xff\xc4\x6e\xce\xf7\x14\x02\x00\x00") - -func cf_i18n_test_fixtures_zh_hans_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_test_fixtures_zh_hans_all_json, - "cf/i18n/test_fixtures/zh_Hans.all.json", - ) -} - -func cf_i18n_test_fixtures_zh_hans_all_json() (*asset, error) { - bytes, err := cf_i18n_test_fixtures_zh_hans_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/test_fixtures/zh_Hans.all.json", size: 532, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _cf_i18n_test_fixtures_zh_hant_all_json = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x9c\x91\xc1\x6a\x84\x30\x10\x86\xef\x3e\xc5\x90\x53\x0b\x92\x07\xe8\xb5\x1e\x7a\xf2\xd6\x53\xe9\x61\x6a\x46\x3b\x34\x4e\x24\x93\x50\x16\xf1\xdd\xd7\x08\x7b\x13\x95\xcd\x21\x84\x9f\x7c\xf9\x7e\x32\x5f\x15\x00\xcc\x65\x5b\x97\x61\x67\xde\xc0\x34\xe4\x29\x91\x02\x82\x52\x97\x23\xa7\x1b\x0c\x31\xe4\xc9\xd4\x8f\x7b\x29\xa2\xa8\xc7\xc4\x41\x0a\xf0\xf2\x81\x92\x5e\xcf\xb1\x31\x38\xee\x99\x8a\xa4\x47\xaf\x54\xf2\xa5\xde\x69\xd0\x06\xf8\xc9\xec\xdd\x84\xdd\x9f\x42\x1f\xb2\xb8\x13\xf9\x21\x71\xd9\xfb\xfe\x8b\x32\x10\x64\xa5\x08\x13\xaa\xfe\x87\x78\x26\x3e\x46\x2e\x9b\xb7\xcf\x63\x19\xc0\x85\x11\x59\x60\x9e\x6d\xb3\x9d\x5a\x1c\x69\x59\x00\xb5\x44\x9f\xab\x45\xb6\xc0\x5a\x7b\x65\x1c\xcf\xbe\xb8\xdb\xbb\xfa\xae\xee\x01\x00\x00\xff\xff\x09\x9e\xcb\x1f\x2f\x02\x00\x00") - -func cf_i18n_test_fixtures_zh_hant_all_json_bytes() ([]byte, error) { - return bindata_read( - _cf_i18n_test_fixtures_zh_hant_all_json, - "cf/i18n/test_fixtures/zh_Hant.all.json", - ) -} - -func cf_i18n_test_fixtures_zh_hant_all_json() (*asset, error) { - bytes, err := cf_i18n_test_fixtures_zh_hant_all_json_bytes() - if err != nil { - return nil, err - } - - info := bindata_file_info{name: "cf/i18n/test_fixtures/zh_Hant.all.json", size: 559, mode: os.FileMode(420), modTime: time.Unix(1435599879, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -// Asset loads and returns the asset for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func Asset(name string) ([]byte, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - a, err := f() - if err != nil { - return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) - } - return a.bytes, nil - } - return nil, fmt.Errorf("Asset %s not found", name) -} - -// MustAsset is like Asset but panics when Asset would return an error. -// It simplifies safe initialization of global variables. -func MustAsset(name string) []byte { - a, err := Asset(name) - if (err != nil) { - panic("asset: Asset(" + name + "): " + err.Error()) - } - - return a -} - -// AssetInfo loads and returns the asset info for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func AssetInfo(name string) (os.FileInfo, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - a, err := f() - if err != nil { - return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) - } - return a.info, nil - } - return nil, fmt.Errorf("AssetInfo %s not found", name) -} - -// AssetNames returns the names of the assets. -func AssetNames() []string { - names := make([]string, 0, len(_bindata)) - for name := range _bindata { - names = append(names, name) - } - return names -} - -// _bindata is a table, holding each asset generator, mapped to its name. -var _bindata = map[string]func() (*asset, error){ - "cf/i18n/resources/de_DE.all.json": cf_i18n_resources_de_de_all_json, - "cf/i18n/resources/en_US.all.json": cf_i18n_resources_en_us_all_json, - "cf/i18n/resources/es_ES.all.json": cf_i18n_resources_es_es_all_json, - "cf/i18n/resources/fr_FR.all.json": cf_i18n_resources_fr_fr_all_json, - "cf/i18n/resources/it_IT.all.json": cf_i18n_resources_it_it_all_json, - "cf/i18n/resources/ja_JA.all.json": cf_i18n_resources_ja_ja_all_json, - "cf/i18n/resources/pt_BR.all.json": cf_i18n_resources_pt_br_all_json, - "cf/i18n/resources/zh_Hans.all.json": cf_i18n_resources_zh_hans_all_json, - "cf/i18n/resources/zh_Hant.all.json": cf_i18n_resources_zh_hant_all_json, - "cf/i18n/test_fixtures/en_US.all.json": cf_i18n_test_fixtures_en_us_all_json, - "cf/i18n/test_fixtures/fr_FR.all.json": cf_i18n_test_fixtures_fr_fr_all_json, - "cf/i18n/test_fixtures/zh_Hans.all.json": cf_i18n_test_fixtures_zh_hans_all_json, - "cf/i18n/test_fixtures/zh_Hant.all.json": cf_i18n_test_fixtures_zh_hant_all_json, -} - -// AssetDir returns the file names below a certain -// directory embedded in the file by go-bindata. -// For example if you run go-bindata on data/... and data contains the -// following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png -// then AssetDir("data") would return []string{"foo.txt", "img"} -// AssetDir("data/img") would return []string{"a.png", "b.png"} -// AssetDir("foo.txt") and AssetDir("notexist") would return an error -// AssetDir("") will return []string{"data"}. -func AssetDir(name string) ([]string, error) { - node := _bintree - if len(name) != 0 { - cannonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(cannonicalName, "/") - for _, p := range pathList { - node = node.Children[p] - if node == nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - } - } - if node.Func != nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - rv := make([]string, 0, len(node.Children)) - for name := range node.Children { - rv = append(rv, name) - } - return rv, nil -} - -type _bintree_t struct { - Func func() (*asset, error) - Children map[string]*_bintree_t -} -var _bintree = &_bintree_t{nil, map[string]*_bintree_t{ - "cf": &_bintree_t{nil, map[string]*_bintree_t{ - "i18n": &_bintree_t{nil, map[string]*_bintree_t{ - "resources": &_bintree_t{nil, map[string]*_bintree_t{ - "de_DE.all.json": &_bintree_t{cf_i18n_resources_de_de_all_json, map[string]*_bintree_t{ - }}, - "en_US.all.json": &_bintree_t{cf_i18n_resources_en_us_all_json, map[string]*_bintree_t{ - }}, - "es_ES.all.json": &_bintree_t{cf_i18n_resources_es_es_all_json, map[string]*_bintree_t{ - }}, - "fr_FR.all.json": &_bintree_t{cf_i18n_resources_fr_fr_all_json, map[string]*_bintree_t{ - }}, - "it_IT.all.json": &_bintree_t{cf_i18n_resources_it_it_all_json, map[string]*_bintree_t{ - }}, - "ja_JA.all.json": &_bintree_t{cf_i18n_resources_ja_ja_all_json, map[string]*_bintree_t{ - }}, - "pt_BR.all.json": &_bintree_t{cf_i18n_resources_pt_br_all_json, map[string]*_bintree_t{ - }}, - "zh_Hans.all.json": &_bintree_t{cf_i18n_resources_zh_hans_all_json, map[string]*_bintree_t{ - }}, - "zh_Hant.all.json": &_bintree_t{cf_i18n_resources_zh_hant_all_json, map[string]*_bintree_t{ - }}, - }}, - "test_fixtures": &_bintree_t{nil, map[string]*_bintree_t{ - "en_US.all.json": &_bintree_t{cf_i18n_test_fixtures_en_us_all_json, map[string]*_bintree_t{ - }}, - "fr_FR.all.json": &_bintree_t{cf_i18n_test_fixtures_fr_fr_all_json, map[string]*_bintree_t{ - }}, - "zh_Hans.all.json": &_bintree_t{cf_i18n_test_fixtures_zh_hans_all_json, map[string]*_bintree_t{ - }}, - "zh_Hant.all.json": &_bintree_t{cf_i18n_test_fixtures_zh_hant_all_json, map[string]*_bintree_t{ - }}, - }}, - }}, - }}, -}} - -// Restore an asset under the given directory -func RestoreAsset(dir, name string) error { - data, err := Asset(name) - if err != nil { - return err - } - info, err := AssetInfo(name) - if err != nil { - return err - } - err = os.MkdirAll(_filePath(dir, path.Dir(name)), os.FileMode(0755)) - if err != nil { - return err - } - err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) - if err != nil { - return err - } - err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) - if err != nil { - return err - } - return nil -} - -// Restore assets under the given directory recursively -func RestoreAssets(dir, name string) error { - children, err := AssetDir(name) - if err != nil { // File - return RestoreAsset(dir, name) - } else { // Dir - for _, child := range children { - err = RestoreAssets(dir, path.Join(name, child)) - if err != nil { - return err - } - } - } - return nil -} - -func _filePath(dir, name string) string { - cannonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) -} - diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/color.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/color.go deleted file mode 100644 index 37aff56..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/color.go +++ /dev/null @@ -1,141 +0,0 @@ -package terminal - -import ( - "fmt" - "os" - "regexp" - "runtime" - - "code.google.com/p/go.crypto/ssh/terminal" -) - -type Color uint - -const ( - red Color = 31 - green = 32 - yellow = 33 - // blue = 34 - magenta = 35 - cyan = 36 - grey = 37 - white = 38 -) - -var ( - colorize func(message string, color Color, bold int) string - OsSupportsColors = runtime.GOOS != "windows" - TerminalSupportsColors = isTerminal() - UserAskedForColors = "" -) - -func init() { - InitColorSupport() -} - -func InitColorSupport() { - if colorsEnabled() { - colorize = func(message string, color Color, bold int) string { - return fmt.Sprintf("\033[%d;%dm%s\033[0m", bold, color, message) - } - } else { - colorize = func(message string, _ Color, _ int) string { - return message - } - } -} - -func colorsEnabled() bool { - return userDidNotDisableColor() && - (userEnabledColors() || (TerminalSupportsColors && OsSupportsColors)) -} - -func userEnabledColors() bool { - return UserAskedForColors == "true" || os.Getenv("CF_COLOR") == "true" -} - -func userDidNotDisableColor() bool { - return os.Getenv("CF_COLOR") != "false" && (UserAskedForColors != "false" || os.Getenv("CF_COLOR") == "true") -} - -func Colorize(message string, color Color) string { - return colorize(message, color, 0) -} - -func ColorizeBold(message string, color Color) string { - return colorize(message, color, 1) -} - -var decolorizerRegex = regexp.MustCompile(`\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]`) - -func Decolorize(message string) string { - return string(decolorizerRegex.ReplaceAll([]byte(message), []byte(""))) -} - -func HeaderColor(message string) string { - return ColorizeBold(message, white) -} - -func CommandColor(message string) string { - return ColorizeBold(message, yellow) -} - -func StoppedColor(message string) string { - return ColorizeBold(message, grey) -} - -func AdvisoryColor(message string) string { - return ColorizeBold(message, yellow) -} - -func CrashedColor(message string) string { - return ColorizeBold(message, red) -} - -func FailureColor(message string) string { - return ColorizeBold(message, red) -} - -func SuccessColor(message string) string { - return ColorizeBold(message, green) -} - -func EntityNameColor(message string) string { - return ColorizeBold(message, cyan) -} - -func PromptColor(message string) string { - return ColorizeBold(message, cyan) -} - -func TableContentHeaderColor(message string) string { - return ColorizeBold(message, cyan) -} - -func WarningColor(message string) string { - return ColorizeBold(message, magenta) -} - -func LogStdoutColor(message string) string { - return Colorize(message, white) -} - -func LogStderrColor(message string) string { - return Colorize(message, red) -} - -func LogHealthHeaderColor(message string) string { - return Colorize(message, grey) -} - -func LogAppHeaderColor(message string) string { - return ColorizeBold(message, yellow) -} - -func LogSysHeaderColor(message string) string { - return ColorizeBold(message, cyan) -} - -func isTerminal() bool { - return terminal.IsTerminal(1) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/color_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/color_test.go deleted file mode 100644 index ea0332f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/color_test.go +++ /dev/null @@ -1,153 +0,0 @@ -package terminal_test - -import ( - . "github.com/cloudfoundry/cli/cf/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "os" - "runtime" -) - -var _ = Describe("Terminal colors", func() { - BeforeEach(func() { - UserAskedForColors = "" - }) - - JustBeforeEach(func() { - InitColorSupport() - }) - - Describe("CF_COLOR", func() { - Context("On OSes that don't support colors", func() { - BeforeEach(func() { OsSupportsColors = false }) - - Context("When the CF_COLOR env variable is specified", func() { - BeforeEach(func() { os.Setenv("CF_COLOR", "true") }) - itColorizes() - }) - - Context("When the CF_COLOR env variable is not specified", func() { - BeforeEach(func() { os.Setenv("CF_COLOR", "") }) - itDoesntColorize() - - Context("when the user DOES ask for colors", func() { - BeforeEach(func() { UserAskedForColors = "true" }) - itColorizes() - }) - }) - }) - - Context("On OSes that support colors", func() { - BeforeEach(func() { OsSupportsColors = true }) - - Context("When the CF_COLOR env variable is not specified", func() { - BeforeEach(func() { os.Setenv("CF_COLOR", "") }) - - Context("And the terminal supports colors", func() { - BeforeEach(func() { TerminalSupportsColors = true }) - itColorizes() - - Context("And user does not ask for color", func() { - BeforeEach(func() { UserAskedForColors = "false" }) - itDoesntColorize() - }) - - Context("And user does ask for color", func() { - BeforeEach(func() { UserAskedForColors = "true" }) - itColorizes() - }) - }) - - Context("And the terminal doesn't support colors", func() { - BeforeEach(func() { TerminalSupportsColors = false }) - itDoesntColorize() - - Context("And user asked for color", func() { - BeforeEach(func() { UserAskedForColors = "true" }) - itColorizes() - }) - }) - }) - - Context("When the CF_COLOR env variable is set to 'true'", func() { - BeforeEach(func() { os.Setenv("CF_COLOR", "true") }) - - Context("And the terminal supports colors", func() { - BeforeEach(func() { TerminalSupportsColors = true }) - itColorizes() - - Context("and the user asked for colors", func() { - BeforeEach(func() { UserAskedForColors = "true" }) - itColorizes() - }) - - Context("and the user did not ask for colors", func() { - BeforeEach(func() { UserAskedForColors = "false" }) - itColorizes() - }) - }) - - Context("Even if the terminal doesn't support colors", func() { - BeforeEach(func() { TerminalSupportsColors = false }) - itColorizes() - }) - }) - - Context("When the CF_COLOR env variable is set to 'false', even if the terminal supports colors", func() { - BeforeEach(func() { - os.Setenv("CF_COLOR", "false") - TerminalSupportsColors = true - }) - - itDoesntColorize() - - Context("and the user asked for colors", func() { - BeforeEach(func() { UserAskedForColors = "true" }) - itDoesntColorize() - }) - }) - }) - }) - - Describe("OsSupportsColors", func() { - It("Returns false on windows, and true otherwise", func() { - if runtime.GOOS == "windows" { - Expect(OsSupportsColors).To(BeFalse()) - } else { - Expect(OsSupportsColors).To(BeTrue()) - } - }) - }) - - var ( - originalOsSupportsColors bool - originalTerminalSupportsColors bool - ) - - BeforeEach(func() { - originalOsSupportsColors = OsSupportsColors - originalTerminalSupportsColors = TerminalSupportsColors - }) - - AfterEach(func() { - OsSupportsColors = originalOsSupportsColors - TerminalSupportsColors = originalTerminalSupportsColors - os.Setenv("CF_COLOR", "false") - }) -}) - -func itColorizes() { - It("colorizes", func() { - text := "Hello World" - colorizedText := ColorizeBold(text, 31) - Expect(colorizedText).To(Equal("\033[1;31mHello World\033[0m")) - }) -} - -func itDoesntColorize() { - It("doesn't colorize", func() { - text := "Hello World" - colorizedText := ColorizeBold(text, 31) - Expect(colorizedText).To(Equal("Hello World")) - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/debug_printer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/debug_printer.go deleted file mode 100644 index 371892b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/debug_printer.go +++ /dev/null @@ -1,13 +0,0 @@ -package terminal - -import ( - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/trace" - "time" -) - -type DebugPrinter struct{} - -func (DebugPrinter) Print(title, dump string) { - trace.Logger.Printf("\n%s [%s]\n%s\n", HeaderColor(T(title)), time.Now().Format(time.RFC3339), trace.Sanitize(dump)) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_output_capture.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_output_capture.go deleted file mode 100644 index f60538a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_output_capture.go +++ /dev/null @@ -1,41 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/terminal" -) - -type FakeOutputCapture struct { - SetOutputBucketStub func(*[]string) - setOutputBucketMutex sync.RWMutex - setOutputBucketArgsForCall []struct { - arg1 *[]string - } -} - -func (fake *FakeOutputCapture) SetOutputBucket(arg1 *[]string) { - fake.setOutputBucketMutex.Lock() - fake.setOutputBucketArgsForCall = append(fake.setOutputBucketArgsForCall, struct { - arg1 *[]string - }{arg1}) - fake.setOutputBucketMutex.Unlock() - if fake.SetOutputBucketStub != nil { - fake.SetOutputBucketStub(arg1) - } -} - -func (fake *FakeOutputCapture) SetOutputBucketCallCount() int { - fake.setOutputBucketMutex.RLock() - defer fake.setOutputBucketMutex.RUnlock() - return len(fake.setOutputBucketArgsForCall) -} - -func (fake *FakeOutputCapture) SetOutputBucketArgsForCall(i int) *[]string { - fake.setOutputBucketMutex.RLock() - defer fake.setOutputBucketMutex.RUnlock() - return fake.setOutputBucketArgsForCall[i].arg1 -} - -var _ terminal.OutputCapture = new(FakeOutputCapture) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_printer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_printer.go deleted file mode 100644 index e09a769..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_printer.go +++ /dev/null @@ -1,263 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/terminal" -) - -type FakePrinter struct { - PrintStub func(a ...interface{}) (n int, err error) - printMutex sync.RWMutex - printArgsForCall []struct { - a []interface{} - } - printReturns struct { - result1 int - result2 error - } - PrintfStub func(format string, a ...interface{}) (n int, err error) - printfMutex sync.RWMutex - printfArgsForCall []struct { - format string - a []interface{} - } - printfReturns struct { - result1 int - result2 error - } - PrintlnStub func(a ...interface{}) (n int, err error) - printlnMutex sync.RWMutex - printlnArgsForCall []struct { - a []interface{} - } - printlnReturns struct { - result1 int - result2 error - } - ForcePrintStub func(a ...interface{}) (n int, err error) - forcePrintMutex sync.RWMutex - forcePrintArgsForCall []struct { - a []interface{} - } - forcePrintReturns struct { - result1 int - result2 error - } - ForcePrintfStub func(format string, a ...interface{}) (n int, err error) - forcePrintfMutex sync.RWMutex - forcePrintfArgsForCall []struct { - format string - a []interface{} - } - forcePrintfReturns struct { - result1 int - result2 error - } - ForcePrintlnStub func(a ...interface{}) (n int, err error) - forcePrintlnMutex sync.RWMutex - forcePrintlnArgsForCall []struct { - a []interface{} - } - forcePrintlnReturns struct { - result1 int - result2 error - } -} - -func (fake *FakePrinter) Print(a ...interface{}) (n int, err error) { - fake.printMutex.Lock() - defer fake.printMutex.Unlock() - fake.printArgsForCall = append(fake.printArgsForCall, struct { - a []interface{} - }{a}) - if fake.PrintStub != nil { - return fake.PrintStub(a) - } else { - return fake.printReturns.result1, fake.printReturns.result2 - } -} - -func (fake *FakePrinter) PrintCallCount() int { - fake.printMutex.RLock() - defer fake.printMutex.RUnlock() - return len(fake.printArgsForCall) -} - -func (fake *FakePrinter) PrintArgsForCall(i int) []interface{} { - fake.printMutex.RLock() - defer fake.printMutex.RUnlock() - return fake.printArgsForCall[i].a -} - -func (fake *FakePrinter) PrintReturns(result1 int, result2 error) { - fake.printReturns = struct { - result1 int - result2 error - }{result1, result2} -} - -func (fake *FakePrinter) Printf(format string, a ...interface{}) (n int, err error) { - fake.printfMutex.Lock() - defer fake.printfMutex.Unlock() - fake.printfArgsForCall = append(fake.printfArgsForCall, struct { - format string - a []interface{} - }{format, a}) - if fake.PrintfStub != nil { - return fake.PrintfStub(format, a...) - } else { - return fake.printfReturns.result1, fake.printfReturns.result2 - } -} - -func (fake *FakePrinter) PrintfCallCount() int { - fake.printfMutex.RLock() - defer fake.printfMutex.RUnlock() - return len(fake.printfArgsForCall) -} - -func (fake *FakePrinter) PrintfArgsForCall(i int) (string, []interface{}) { - fake.printfMutex.RLock() - defer fake.printfMutex.RUnlock() - return fake.printfArgsForCall[i].format, fake.printfArgsForCall[i].a -} - -func (fake *FakePrinter) PrintfReturns(result1 int, result2 error) { - fake.printfReturns = struct { - result1 int - result2 error - }{result1, result2} -} - -func (fake *FakePrinter) Println(a ...interface{}) (n int, err error) { - fake.printlnMutex.Lock() - defer fake.printlnMutex.Unlock() - fake.printlnArgsForCall = append(fake.printlnArgsForCall, struct { - a []interface{} - }{a}) - if fake.PrintlnStub != nil { - return fake.PrintlnStub(a) - } else { - return fake.printlnReturns.result1, fake.printlnReturns.result2 - } -} - -func (fake *FakePrinter) PrintlnCallCount() int { - fake.printlnMutex.RLock() - defer fake.printlnMutex.RUnlock() - return len(fake.printlnArgsForCall) -} - -func (fake *FakePrinter) PrintlnArgsForCall(i int) []interface{} { - fake.printlnMutex.RLock() - defer fake.printlnMutex.RUnlock() - return fake.printlnArgsForCall[i].a -} - -func (fake *FakePrinter) PrintlnReturns(result1 int, result2 error) { - fake.printlnReturns = struct { - result1 int - result2 error - }{result1, result2} -} - -func (fake *FakePrinter) ForcePrint(a ...interface{}) (n int, err error) { - fake.forcePrintMutex.Lock() - defer fake.forcePrintMutex.Unlock() - fake.forcePrintArgsForCall = append(fake.forcePrintArgsForCall, struct { - a []interface{} - }{a}) - if fake.ForcePrintStub != nil { - return fake.ForcePrintStub(a) - } else { - return fake.forcePrintReturns.result1, fake.forcePrintReturns.result2 - } -} - -func (fake *FakePrinter) ForcePrintCallCount() int { - fake.forcePrintMutex.RLock() - defer fake.forcePrintMutex.RUnlock() - return len(fake.forcePrintArgsForCall) -} - -func (fake *FakePrinter) ForcePrintArgsForCall(i int) []interface{} { - fake.forcePrintMutex.RLock() - defer fake.forcePrintMutex.RUnlock() - return fake.forcePrintArgsForCall[i].a -} - -func (fake *FakePrinter) ForcePrintReturns(result1 int, result2 error) { - fake.forcePrintReturns = struct { - result1 int - result2 error - }{result1, result2} -} - -func (fake *FakePrinter) ForcePrintf(format string, a ...interface{}) (n int, err error) { - fake.forcePrintfMutex.Lock() - defer fake.forcePrintfMutex.Unlock() - fake.forcePrintfArgsForCall = append(fake.forcePrintfArgsForCall, struct { - format string - a []interface{} - }{format, a}) - if fake.ForcePrintfStub != nil { - return fake.ForcePrintfStub(format, a...) - } else { - return fake.forcePrintfReturns.result1, fake.forcePrintfReturns.result2 - } -} - -func (fake *FakePrinter) ForcePrintfCallCount() int { - fake.forcePrintfMutex.RLock() - defer fake.forcePrintfMutex.RUnlock() - return len(fake.forcePrintfArgsForCall) -} - -func (fake *FakePrinter) ForcePrintfArgsForCall(i int) (string, []interface{}) { - fake.forcePrintfMutex.RLock() - defer fake.forcePrintfMutex.RUnlock() - return fake.forcePrintfArgsForCall[i].format, fake.forcePrintfArgsForCall[i].a -} - -func (fake *FakePrinter) ForcePrintfReturns(result1 int, result2 error) { - fake.forcePrintfReturns = struct { - result1 int - result2 error - }{result1, result2} -} - -func (fake *FakePrinter) ForcePrintln(a ...interface{}) (n int, err error) { - fake.forcePrintlnMutex.Lock() - defer fake.forcePrintlnMutex.Unlock() - fake.forcePrintlnArgsForCall = append(fake.forcePrintlnArgsForCall, struct { - a []interface{} - }{a}) - if fake.ForcePrintlnStub != nil { - return fake.ForcePrintlnStub(a) - } else { - return fake.forcePrintlnReturns.result1, fake.forcePrintlnReturns.result2 - } -} - -func (fake *FakePrinter) ForcePrintlnCallCount() int { - fake.forcePrintlnMutex.RLock() - defer fake.forcePrintlnMutex.RUnlock() - return len(fake.forcePrintlnArgsForCall) -} - -func (fake *FakePrinter) ForcePrintlnArgsForCall(i int) []interface{} { - fake.forcePrintlnMutex.RLock() - defer fake.forcePrintlnMutex.RUnlock() - return fake.forcePrintlnArgsForCall[i].a -} - -func (fake *FakePrinter) ForcePrintlnReturns(result1 int, result2 error) { - fake.forcePrintlnReturns = struct { - result1 int - result2 error - }{result1, result2} -} - -var _ Printer = new(FakePrinter) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_terminal_output_switch.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_terminal_output_switch.go deleted file mode 100644 index 3463379..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/fakes/fake_terminal_output_switch.go +++ /dev/null @@ -1,40 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - . "github.com/cloudfoundry/cli/cf/terminal" - "sync" -) - -type FakeTerminalOutputSwitch struct { - DisableTerminalOutputStub func(bool) - disableTerminalOutputMutex sync.RWMutex - disableTerminalOutputArgsForCall []struct { - arg1 bool - } -} - -func (fake *FakeTerminalOutputSwitch) DisableTerminalOutput(arg1 bool) { - fake.disableTerminalOutputMutex.Lock() - defer fake.disableTerminalOutputMutex.Unlock() - fake.disableTerminalOutputArgsForCall = append(fake.disableTerminalOutputArgsForCall, struct { - arg1 bool - }{arg1}) - if fake.DisableTerminalOutputStub != nil { - fake.DisableTerminalOutputStub(arg1) - } -} - -func (fake *FakeTerminalOutputSwitch) DisableTerminalOutputCallCount() int { - fake.disableTerminalOutputMutex.RLock() - defer fake.disableTerminalOutputMutex.RUnlock() - return len(fake.disableTerminalOutputArgsForCall) -} - -func (fake *FakeTerminalOutputSwitch) DisableTerminalOutputArgsForCall(i int) bool { - fake.disableTerminalOutputMutex.RLock() - defer fake.disableTerminalOutputMutex.RUnlock() - return fake.disableTerminalOutputArgsForCall[i].arg1 -} - -var _ TerminalOutputSwitch = new(FakeTerminalOutputSwitch) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/table.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/table.go deleted file mode 100644 index 42d8c5a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/table.go +++ /dev/null @@ -1,86 +0,0 @@ -package terminal - -import ( - "fmt" - "strings" - "unicode/utf8" -) - -type Table interface { - Add(row ...string) - Print() -} - -type PrintableTable struct { - ui UI - headers []string - headerPrinted bool - maxSizes []int - rows [][]string -} - -func NewTable(ui UI, headers []string) Table { - return &PrintableTable{ - ui: ui, - headers: headers, - maxSizes: make([]int, len(headers)), - } -} - -func (t *PrintableTable) Add(row ...string) { - t.rows = append(t.rows, row) -} - -func (t *PrintableTable) Print() { - for _, row := range append(t.rows, t.headers) { - t.calculateMaxSize(row) - } - - if t.headerPrinted == false { - t.printHeader() - t.headerPrinted = true - } - - for _, line := range t.rows { - t.printRow(line) - } - - t.rows = [][]string{} -} - -func (t *PrintableTable) calculateMaxSize(row []string) { - for index, value := range row { - cellLength := utf8.RuneCountInString(Decolorize(value)) - if t.maxSizes[index] < cellLength { - t.maxSizes[index] = cellLength - } - } -} - -func (t *PrintableTable) printHeader() { - output := "" - for col, value := range t.headers { - output = output + t.cellValue(col, HeaderColor(value)) - } - t.ui.Say(output) -} - -func (t *PrintableTable) printRow(row []string) { - output := "" - for columnIndex, value := range row { - if columnIndex == 0 { - value = TableContentHeaderColor(value) - } - - output = output + t.cellValue(columnIndex, value) - } - t.ui.Say("%s", output) -} - -func (t *PrintableTable) cellValue(col int, value string) string { - padding := "" - if col < len(t.headers)-1 { - padding = strings.Repeat(" ", t.maxSizes[col]-utf8.RuneCountInString(Decolorize(value))) - } - return fmt.Sprintf("%s%s ", value, padding) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/table_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/table_test.go deleted file mode 100644 index 10561d9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/table_test.go +++ /dev/null @@ -1,115 +0,0 @@ -package terminal_test - -import ( - . "github.com/cloudfoundry/cli/cf/terminal" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Table", func() { - var ( - ui *testterm.FakeUI - table Table - ) - - BeforeEach(func() { - ui = &testterm.FakeUI{} - table = NewTable(ui, []string{"watashi", "no", "atama!"}) - }) - - It("prints the header", func() { - table.Print() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"watashi", "no", "atama!"}, - )) - }) - - It("prints format string literals as strings", func() { - table.Add("cloak %s", "and", "dagger") - table.Print() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"cloak %s", "and", "dagger"}, - )) - }) - - It("prints all the rows you give it", func() { - table.Add("something", "and", "nothing") - table.Print() - Expect(ui.Outputs).To(ContainSubstrings( - []string{"something", "and", "nothing"}, - )) - }) - - Describe("adding rows to be printed later", func() { - It("prints them when you call Print()", func() { - table.Add("a", "b", "c") - table.Add("passed", "to", "print") - table.Print() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"a", "b", "c"}, - )) - }) - - It("flushes previously added rows and then outputs passed rows", func() { - table.Add("a", "b", "c") - table.Add("passed", "to", "print") - table.Print() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"watashi", "no", "atama!"}, - []string{"a", "b", "c"}, - []string{"passed", "to", "print"}, - )) - }) - - It("flushes the buffer of rows when you call print", func() { - table.Add("a", "b", "c") - table.Add("passed", "to", "print") - table.Print() - ui.ClearOutputs() - - table.Print() - Expect(ui.Outputs).To(BeEmpty()) - }) - }) - - Describe("aligning columns", func() { - It("aligns rows to the header when the header is longest", func() { - table.Add("a", "b", "c") - table.Print() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"watashi no atama!"}, - []string{"a b c"}, - )) - }) - - It("aligns rows to the longest row provided", func() { - table.Add("x", "y", "z") - table.Add("something", "something", "darkside") - table.Print() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"watashi no atama!"}, - []string{"x y z"}, - []string{"something something darkside"}, - )) - }) - - It("aligns rows to the longest row provided when there are multibyte characters present", func() { - table.Add("x", "ÿ", "z") - table.Add("something", "something", "darkside") - table.Print() - - Expect(ui.Outputs).To(ContainSubstrings( - []string{"watashi no atama!"}, - []string{"x ÿ z"}, - []string{"something something darkside"}, - )) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/tee_printer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/tee_printer.go deleted file mode 100644 index a9e3add..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/tee_printer.go +++ /dev/null @@ -1,92 +0,0 @@ -package terminal - -import ( - "fmt" -) - -type Printer interface { - Print(a ...interface{}) (n int, err error) - Printf(format string, a ...interface{}) (n int, err error) - Println(a ...interface{}) (n int, err error) - ForcePrint(a ...interface{}) (n int, err error) - ForcePrintf(format string, a ...interface{}) (n int, err error) - ForcePrintln(a ...interface{}) (n int, err error) -} - -type OutputCapture interface { - SetOutputBucket(*[]string) -} - -type TerminalOutputSwitch interface { - DisableTerminalOutput(bool) -} - -type TeePrinter struct { - disableTerminalOutput bool - outputBucket *[]string -} - -func NewTeePrinter() *TeePrinter { - return &TeePrinter{} -} - -func (t *TeePrinter) SetOutputBucket(bucket *[]string) { - t.outputBucket = bucket -} - -func (t *TeePrinter) Print(values ...interface{}) (n int, err error) { - str := fmt.Sprint(values...) - t.saveOutputToBucket(str) - if !t.disableTerminalOutput { - return fmt.Print(str) - } - return -} - -func (t *TeePrinter) Printf(format string, a ...interface{}) (n int, err error) { - str := fmt.Sprintf(format, a...) - t.saveOutputToBucket(str) - if !t.disableTerminalOutput { - return fmt.Print(str) - } - return -} - -func (t *TeePrinter) Println(values ...interface{}) (n int, err error) { - str := fmt.Sprint(values...) - t.saveOutputToBucket(str) - if !t.disableTerminalOutput { - return fmt.Println(str) - } - return -} - -func (t *TeePrinter) ForcePrint(values ...interface{}) (n int, err error) { - str := fmt.Sprint(values...) - t.saveOutputToBucket(str) - return fmt.Print(str) -} - -func (t *TeePrinter) ForcePrintf(format string, a ...interface{}) (n int, err error) { - str := fmt.Sprintf(format, a...) - t.saveOutputToBucket(str) - return fmt.Print(str) -} - -func (t *TeePrinter) ForcePrintln(values ...interface{}) (n int, err error) { - str := fmt.Sprint(values...) - t.saveOutputToBucket(str) - return fmt.Println(str) -} - -func (t *TeePrinter) DisableTerminalOutput(disable bool) { - t.disableTerminalOutput = disable -} - -func (t *TeePrinter) saveOutputToBucket(output string) { - if t.outputBucket == nil { - return - } - - *t.outputBucket = append(*t.outputBucket, Decolorize(output)) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/tee_printer_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/tee_printer_test.go deleted file mode 100644 index 6b6ee39..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/tee_printer_test.go +++ /dev/null @@ -1,257 +0,0 @@ -package terminal_test - -import ( - . "github.com/cloudfoundry/cli/cf/terminal" - - io_helpers "github.com/cloudfoundry/cli/testhelpers/io" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("TeePrinter", func() { - var ( - output []string - printer *TeePrinter - ) - - Describe(".Print", func() { - var bucket *[]string - - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Print("Hello ") - printer.Print("Mom!") - }) - }) - - It("should delegate to fmt.Print", func() { - Expect(output[0]).To(Equal("Hello Mom!")) - }) - - It("should save the output to the slice", func() { - Expect((*bucket)[0]).To(Equal("Hello ")) - Expect((*bucket)[1]).To(Equal("Mom!")) - }) - - It("should decolorize text", func() { - bucket = &[]string{} - io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Print("hi " + EntityNameColor("foo")) - }) - - Expect((*bucket)[0]).To(Equal("hi foo")) - }) - }) - - Describe(".Printf", func() { - var bucket *[]string - - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Printf("Hello %s", "everybody") - }) - }) - - It("should delegate to fmt.Printf", func() { - Expect(output[0]).To(Equal("Hello everybody")) - }) - - It("should save the output to the slice", func() { - Expect((*bucket)[0]).To(Equal("Hello everybody")) - }) - - It("should decolorize text", func() { - bucket = &[]string{} - io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Printf("hi %s", EntityNameColor("foo")) - }) - - Expect((*bucket)[0]).To(Equal("hi foo")) - }) - }) - - Describe(".Println", func() { - var bucket *[]string - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Println("Hello ", "everybody") - }) - }) - - It("should delegate to fmt.Printf", func() { - Expect(output[0]).To(Equal("Hello everybody")) - }) - - It("should save the output to the slice", func() { - Expect((*bucket)[0]).To(Equal("Hello everybody")) - }) - - It("should decolorize text", func() { - bucket = &[]string{} - io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Println("hi " + EntityNameColor("foo")) - }) - - Expect((*bucket)[0]).To(Equal("hi foo")) - }) - }) - - Describe(".ForcePrintf", func() { - var bucket *[]string - - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.ForcePrintf("Hello %s", "everybody") - }) - }) - - It("should delegate to fmt.Printf", func() { - Expect(output[0]).To(Equal("Hello everybody")) - }) - - It("should save the output to the slice", func() { - Expect((*bucket)[0]).To(Equal("Hello everybody")) - }) - - It("should decolorize text", func() { - bucket = &[]string{} - io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Printf("hi %s", EntityNameColor("foo")) - }) - - Expect((*bucket)[0]).To(Equal("hi foo")) - }) - }) - - Describe(".ForcePrintln", func() { - var bucket *[]string - - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.ForcePrintln("Hello ", "everybody") - }) - }) - - It("should delegate to fmt.Printf", func() { - Expect(output[0]).To(Equal("Hello everybody")) - }) - - It("should save the output to the slice", func() { - Expect((*bucket)[0]).To(Equal("Hello everybody")) - }) - - It("should decolorize text", func() { - bucket = &[]string{} - io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.Println("hi " + EntityNameColor("foo")) - }) - - Expect((*bucket)[0]).To(Equal("hi foo")) - }) - }) - - Describe(".SetOutputBucket", func() { - var bucket *[]string - - output = io_helpers.CaptureOutput(func() { - bucket = &[]string{} - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.ForcePrintf("Hello %s", "everybody") - }) - - It("sets the []string used to save the output", func() { - Expect((*bucket)[0]).To(Equal("Hello everybody")) - }) - - It("disables the output saving when set to nil", func() { - printer.SetOutputBucket(nil) - Expect((*bucket)[0]).To(Equal("Hello everybody")) - }) - }) - - Describe("Pausing Output", func() { - var bucket *[]string - - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer = NewTeePrinter() - printer.SetOutputBucket(bucket) - printer.DisableTerminalOutput(true) - printer.Print("Hello") - printer.Println("Mom!") - printer.Printf("Dad!") - printer.ForcePrint("Forced Hello") - printer.ForcePrintln("Forced Mom") - printer.ForcePrintf("Forced Dad") - }) - }) - - It("should print only forced terminal output", func() { - Expect(output).To(Equal([]string{"Forced HelloForced Mom", "Forced Dad"})) - }) - - It("should still capture all output", func() { - Expect(*bucket).To(Equal([]string{"Hello", "Mom!", "Dad!", "Forced Hello", "Forced Mom", "Forced Dad"})) - }) - - Describe(".ResumeOutput", func() { - var bucket *[]string - BeforeEach(func() { - bucket = &[]string{} - - output = io_helpers.CaptureOutput(func() { - printer.SetOutputBucket(bucket) - printer.DisableTerminalOutput(false) - printer.Print("Hello") - printer.Println("Mom!") - printer.Printf("Dad!") - printer.Println("Grandpa!") - printer.ForcePrint("ForcePrint") - printer.ForcePrintln("ForcePrintln") - printer.ForcePrintf("ForcePrintf") - }) - }) - - It("should print all output", func() { - Expect(output).To(Equal([]string{"HelloMom!", "Dad!Grandpa!", "ForcePrintForcePrintln", "ForcePrintf"})) - }) - - It("should capture all output", func() { - Expect(*bucket).To(Equal([]string{"Hello", "Mom!", "Dad!", "Grandpa!", "ForcePrint", "ForcePrintln", "ForcePrintf"})) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/terminal_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/terminal_suite_test.go deleted file mode 100644 index b4039a1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/terminal_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package terminal_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestTerminal(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Terminal Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui.go deleted file mode 100644 index c6d1c17..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui.go +++ /dev/null @@ -1,252 +0,0 @@ -package terminal - -import ( - "bufio" - "fmt" - "io" - "os" - "strings" - "time" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/trace" - "github.com/codegangsta/cli" -) - -type ColoringFunction func(value string, row int, col int) string - -func NotLoggedInText() string { - return fmt.Sprintf(T("Not logged in. Use '{{.CFLoginCommand}}' to log in.", map[string]interface{}{"CFLoginCommand": CommandColor(cf.Name() + " " + "login")})) -} - -type UI interface { - PrintPaginator(rows []string, err error) - Say(message string, args ...interface{}) - PrintCapturingNoOutput(message string, args ...interface{}) - Warn(message string, args ...interface{}) - Ask(prompt string, args ...interface{}) (answer string) - AskForPassword(prompt string, args ...interface{}) (answer string) - Confirm(message string, args ...interface{}) bool - ConfirmDelete(modelType, modelName string) bool - ConfirmDeleteWithAssociations(modelType, modelName string) bool - Ok() - Failed(message string, args ...interface{}) - FailWithUsage(context *cli.Context) - PanicQuietly() - ShowConfiguration(core_config.Reader) - LoadingIndication() - Wait(duration time.Duration) - Table(headers []string) Table -} - -type terminalUI struct { - stdin io.Reader - printer Printer -} - -func NewUI(r io.Reader, printer Printer) UI { - return &terminalUI{ - stdin: r, - printer: printer, - } -} - -func (c *terminalUI) PrintPaginator(rows []string, err error) { - if err != nil { - c.Failed(err.Error()) - return - } - - for _, row := range rows { - c.Say(row) - } -} - -func (c *terminalUI) PrintCapturingNoOutput(message string, args ...interface{}) { - if len(args) == 0 { - fmt.Printf("%s", message) - } else { - fmt.Printf(message, args...) - } -} - -func (c *terminalUI) Say(message string, args ...interface{}) { - if len(args) == 0 { - c.printer.Printf("%s\n", message) - } else { - c.printer.Printf(message+"\n", args...) - } -} - -func (c *terminalUI) Warn(message string, args ...interface{}) { - message = fmt.Sprintf(message, args...) - c.Say(WarningColor(message)) - return -} - -func (c *terminalUI) ConfirmDeleteWithAssociations(modelType, modelName string) bool { - return c.confirmDelete(T("Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", - map[string]interface{}{ - "ModelType": modelType, - "ModelName": EntityNameColor(modelName), - })) -} - -func (c *terminalUI) ConfirmDelete(modelType, modelName string) bool { - return c.confirmDelete(T("Really delete the {{.ModelType}} {{.ModelName}}?", - map[string]interface{}{ - "ModelType": modelType, - "ModelName": EntityNameColor(modelName), - })) -} - -func (c *terminalUI) confirmDelete(message string) bool { - result := c.Confirm(message) - - if !result { - c.Warn(T("Delete cancelled")) - } - - return result -} - -func (c *terminalUI) Confirm(message string, args ...interface{}) bool { - response := c.Ask(message, args...) - switch strings.ToLower(response) { - case "y", "yes", T("yes"): - return true - } - return false -} - -func (c *terminalUI) Ask(prompt string, args ...interface{}) (answer string) { - fmt.Println("") - fmt.Printf(prompt+PromptColor(">")+" ", args...) - - rd := bufio.NewReader(c.stdin) - line, err := rd.ReadString('\n') - if err == nil { - return strings.TrimSpace(line) - } - return "" -} - -func (c *terminalUI) Ok() { - c.Say(SuccessColor(T("OK"))) -} - -const QuietPanic = "This shouldn't print anything" - -func (c *terminalUI) Failed(message string, args ...interface{}) { - message = fmt.Sprintf(message, args...) - - if T == nil { - c.Say(FailureColor("FAILED")) - c.Say(message) - - trace.Logger.Print("FAILED") - trace.Logger.Print(message) - c.PanicQuietly() - } else { - c.Say(FailureColor(T("FAILED"))) - c.Say(message) - - trace.Logger.Print(T("FAILED")) - trace.Logger.Print(message) - c.PanicQuietly() - } -} - -func (c *terminalUI) PanicQuietly() { - panic(QuietPanic) -} - -func (c *terminalUI) FailWithUsage(context *cli.Context) { - c.Say(FailureColor(T("FAILED"))) - c.Say(T("Incorrect Usage.\n")) - cli.ShowCommandHelp(context, context.Command.Name) - c.Say("") - os.Exit(1) -} - -func (ui *terminalUI) ShowConfiguration(config core_config.Reader) { - table := NewTable(ui, []string{"", ""}) - - if config.HasAPIEndpoint() { - table.Add( - T("API endpoint:"), - T("{{.ApiEndpoint}} (API version: {{.ApiVersionString}})", - map[string]interface{}{ - "ApiEndpoint": EntityNameColor(config.ApiEndpoint()), - "ApiVersionString": EntityNameColor(config.ApiVersion()), - }), - ) - } - - if !config.IsLoggedIn() { - table.Print() - ui.Say(NotLoggedInText()) - return - } else { - table.Add( - T("User:"), - EntityNameColor(config.UserEmail()), - ) - } - - if !config.HasOrganization() && !config.HasSpace() { - table.Print() - command := fmt.Sprintf("%s target -o ORG -s SPACE", cf.Name()) - ui.Say(T("No org or space targeted, use '{{.CFTargetCommand}}'", - map[string]interface{}{ - "CFTargetCommand": CommandColor(command), - })) - return - } - - if config.HasOrganization() { - table.Add( - T("Org:"), - EntityNameColor(config.OrganizationFields().Name), - ) - } else { - command := fmt.Sprintf("%s target -o Org", cf.Name()) - table.Add( - T("Org:"), - T("No org targeted, use '{{.CFTargetCommand}}'", - map[string]interface{}{ - "CFTargetCommand": CommandColor(command), - }), - ) - } - - if config.HasSpace() { - table.Add( - T("Space:"), - EntityNameColor(config.SpaceFields().Name), - ) - } else { - command := fmt.Sprintf("%s target -s SPACE", cf.Name()) - table.Add( - T("Space:"), - T("No space targeted, use '{{.CFTargetCommand}}'", map[string]interface{}{"CFTargetCommand": CommandColor(command)}), - ) - } - - table.Print() -} - -func (c *terminalUI) LoadingIndication() { - c.printer.Print(".") -} - -func (c *terminalUI) Wait(duration time.Duration) { - time.Sleep(duration) -} - -func (ui *terminalUI) Table(headers []string) Table { - return NewTable(ui, headers) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_test.go deleted file mode 100644 index 2b0a0fe..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_test.go +++ /dev/null @@ -1,358 +0,0 @@ -package terminal_test - -import ( - "io" - "os" - "strings" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/cf/models" - testassert "github.com/cloudfoundry/cli/testhelpers/assert" - "github.com/cloudfoundry/cli/testhelpers/configuration" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - io_helpers "github.com/cloudfoundry/cli/testhelpers/io" - - . "github.com/cloudfoundry/cli/cf/terminal" - . "github.com/cloudfoundry/cli/testhelpers/matchers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("UI", func() { - - Describe("Printing message to stdout with PrintCapturingNoOutput", func() { - It("prints strings without using the TeePrinter", func() { - bucket := &[]string{} - - printer := NewTeePrinter() - printer.SetOutputBucket(bucket) - - io_helpers.SimulateStdin("", func(reader io.Reader) { - output := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, printer) - ui.PrintCapturingNoOutput("Hello") - }) - - Expect("Hello").To(Equal(strings.Join(output, ""))) - Expect(len(*bucket)).To(Equal(0)) - }) - }) - }) - - Describe("Printing message to stdout with Say", func() { - It("prints strings", func() { - io_helpers.SimulateStdin("", func(reader io.Reader) { - output := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - ui.Say("Hello") - }) - - Expect("Hello").To(Equal(strings.Join(output, ""))) - }) - }) - - It("prints formatted strings", func() { - io_helpers.SimulateStdin("", func(reader io.Reader) { - output := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - ui.Say("Hello %s", "World!") - }) - - Expect("Hello World!").To(Equal(strings.Join(output, ""))) - }) - }) - - It("does not format strings when provided no args", func() { - output := io_helpers.CaptureOutput(func() { - ui := NewUI(os.Stdin, NewTeePrinter()) - ui.Say("Hello %s World!") // whoops - }) - - Expect(strings.Join(output, "")).To(Equal("Hello %s World!")) - }) - }) - - Describe("Asking user for input", func() { - It("allows string with whitespaces", func() { - io_helpers.CaptureOutput(func() { - io_helpers.SimulateStdin("foo bar\n", func(reader io.Reader) { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.Ask("?")).To(Equal("foo bar")) - }) - }) - }) - - It("returns empty string if an error occured while reading string", func() { - io_helpers.CaptureOutput(func() { - io_helpers.SimulateStdin("string without expected delimiter", func(reader io.Reader) { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.Ask("?")).To(Equal("")) - }) - }) - }) - - It("always outputs the prompt, even when output is disabled", func() { - output := io_helpers.CaptureOutput(func() { - io_helpers.SimulateStdin("things are great\n", func(reader io.Reader) { - printer := NewTeePrinter() - printer.DisableTerminalOutput(true) - ui := NewUI(reader, printer) - ui.Ask("You like things?") - }) - }) - Expect(strings.Join(output, "")).To(ContainSubstring("You like things?")) - }) - }) - - Describe("Confirming user input", func() { - It("treats 'y' as an affirmative confirmation", func() { - io_helpers.SimulateStdin("y\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.Confirm("Hello %s", "World?")).To(BeTrue()) - }) - - Expect(out).To(ContainSubstrings([]string{"Hello World?"})) - }) - }) - - It("treats 'yes' as an affirmative confirmation when default language is not en_US", func() { - oldLang := os.Getenv("LC_ALL") - defer os.Setenv("LC_ALL", oldLang) - - oldT := i18n.T - defer func() { - i18n.T = oldT - }() - - os.Setenv("LC_ALL", "fr_FR") - - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - io_helpers.SimulateStdin("yes\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.Confirm("Hello %s", "World?")).To(BeTrue()) - }) - Expect(out).To(ContainSubstrings([]string{"Hello World?"})) - }) - }) - - It("treats 'yes' as an affirmative confirmation", func() { - io_helpers.SimulateStdin("yes\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.Confirm("Hello %s", "World?")).To(BeTrue()) - }) - - Expect(out).To(ContainSubstrings([]string{"Hello World?"})) - }) - }) - - It("treats other input as a negative confirmation", func() { - io_helpers.SimulateStdin("wat\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.Confirm("Hello %s", "World?")).To(BeFalse()) - }) - - Expect(out).To(ContainSubstrings([]string{"Hello World?"})) - }) - }) - }) - - Describe("Confirming deletion", func() { - It("formats a nice output string with exactly one prompt", func() { - io_helpers.SimulateStdin("y\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.ConfirmDelete("fizzbuzz", "bizzbump")).To(BeTrue()) - }) - - Expect(out).To(ContainSubstrings([]string{ - "Really delete the fizzbuzz", - "bizzbump", - "?> ", - })) - }) - }) - - It("treats 'yes' as an affirmative confirmation", func() { - io_helpers.SimulateStdin("yes\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.ConfirmDelete("modelType", "modelName")).To(BeTrue()) - }) - - Expect(out).To(ContainSubstrings([]string{"modelType modelName"})) - }) - }) - - It("treats other input as a negative confirmation and warns the user", func() { - io_helpers.SimulateStdin("wat\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.ConfirmDelete("modelType", "modelName")).To(BeFalse()) - }) - - Expect(out).To(ContainSubstrings([]string{"Delete cancelled"})) - }) - }) - }) - - Describe("Confirming deletion with associations", func() { - It("warns the user that associated objects will also be deleted", func() { - io_helpers.SimulateStdin("wat\n", func(reader io.Reader) { - out := io_helpers.CaptureOutput(func() { - ui := NewUI(reader, NewTeePrinter()) - Expect(ui.ConfirmDeleteWithAssociations("modelType", "modelName")).To(BeFalse()) - }) - - Expect(out).To(ContainSubstrings([]string{"Delete cancelled"})) - }) - }) - }) - - Context("when user is not logged in", func() { - var config core_config.Reader - - BeforeEach(func() { - config = testconfig.NewRepository() - }) - - It("prompts the user to login", func() { - output := io_helpers.CaptureOutput(func() { - ui := NewUI(os.Stdin, NewTeePrinter()) - ui.ShowConfiguration(config) - }) - - Expect(output).ToNot(ContainSubstrings([]string{"API endpoint:"})) - Expect(output).To(ContainSubstrings([]string{"Not logged in", "Use", "log in"})) - }) - }) - - Context("when an api endpoint is set and the user logged in", func() { - var config core_config.ReadWriter - - BeforeEach(func() { - accessToken := core_config.TokenInfo{ - UserGuid: "my-user-guid", - Username: "my-user", - Email: "my-user-email", - } - config = testconfig.NewRepositoryWithAccessToken(accessToken) - config.SetApiEndpoint("https://test.example.org") - config.SetApiVersion("☃☃☃") - }) - - Describe("tells the user what is set in the config", func() { - var output []string - - JustBeforeEach(func() { - output = io_helpers.CaptureOutput(func() { - ui := NewUI(os.Stdin, NewTeePrinter()) - ui.ShowConfiguration(config) - }) - }) - - It("tells the user which api endpoint is set", func() { - Expect(output).To(ContainSubstrings([]string{"API endpoint:", "https://test.example.org"})) - }) - - It("tells the user the api version", func() { - Expect(output).To(ContainSubstrings([]string{"API version:", "☃☃☃"})) - }) - - It("tells the user which user is logged in", func() { - Expect(output).To(ContainSubstrings([]string{"User:", "my-user-email"})) - }) - - Context("when an org is targeted", func() { - BeforeEach(func() { - config.SetOrganizationFields(models.OrganizationFields{ - Name: "org-name", - Guid: "org-guid", - }) - }) - - It("tells the user which org is targeted", func() { - Expect(output).To(ContainSubstrings([]string{"Org:", "org-name"})) - }) - }) - - Context("when a space is targeted", func() { - BeforeEach(func() { - config.SetSpaceFields(models.SpaceFields{ - Name: "my-space", - Guid: "space-guid", - }) - }) - - It("tells the user which space is targeted", func() { - Expect(output).To(ContainSubstrings([]string{"Space:", "my-space"})) - }) - }) - }) - - It("prompts the user to target an org and space when no org or space is targeted", func() { - output := io_helpers.CaptureOutput(func() { - ui := NewUI(os.Stdin, NewTeePrinter()) - ui.ShowConfiguration(config) - }) - - Expect(output).To(ContainSubstrings([]string{"No", "org", "space", "targeted", "-o ORG", "-s SPACE"})) - }) - - It("prompts the user to target an org when no org is targeted", func() { - sf := models.SpaceFields{} - sf.Guid = "guid" - sf.Name = "name" - - output := io_helpers.CaptureOutput(func() { - ui := NewUI(os.Stdin, NewTeePrinter()) - ui.ShowConfiguration(config) - }) - - Expect(output).To(ContainSubstrings([]string{"No", "org", "targeted", "-o ORG"})) - }) - - It("prompts the user to target a space when no space is targeted", func() { - of := models.OrganizationFields{} - of.Guid = "of-guid" - of.Name = "of-name" - - output := io_helpers.CaptureOutput(func() { - ui := NewUI(os.Stdin, NewTeePrinter()) - ui.ShowConfiguration(config) - }) - - Expect(output).To(ContainSubstrings([]string{"No", "space", "targeted", "-s SPACE"})) - }) - }) - - Describe("failing", func() { - It("panics with a specific string", func() { - io_helpers.CaptureOutput(func() { - testassert.AssertPanic(QuietPanic, func() { - NewUI(os.Stdin, NewTeePrinter()).Failed("uh oh") - }) - }) - }) - - It("does not use 'T' func to translate when it is not initialized", func() { - t := i18n.T - i18n.T = nil - - io_helpers.CaptureOutput(func() { - testassert.AssertPanic(QuietPanic, func() { - NewUI(os.Stdin, NewTeePrinter()).Failed("uh oh") - }) - }) - - i18n.T = t - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace.go deleted file mode 100644 index ac2a92d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace.go +++ /dev/null @@ -1,98 +0,0 @@ -package trace - -import ( - "fmt" - "io" - "log" - "os" - "regexp" - - . "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/gofileutils/fileutils" -) - -const CF_TRACE = "CF_TRACE" - -type Printer interface { - Print(v ...interface{}) - Printf(format string, v ...interface{}) - Println(v ...interface{}) -} - -type nullLogger struct{} - -func (*nullLogger) Print(v ...interface{}) {} -func (*nullLogger) Printf(format string, v ...interface{}) {} -func (*nullLogger) Println(v ...interface{}) {} - -var stdOut io.Writer = os.Stdout -var Logger Printer - -func init() { - Logger = NewLogger("") -} - -func EnableTrace() { - Logger = newStdoutLogger() -} - -func DisableTrace() { - Logger = new(nullLogger) -} - -func SetStdout(s io.Writer) { - stdOut = s -} - -func NewLogger(cf_trace string) Printer { - switch cf_trace { - case "", "false": - Logger = new(nullLogger) - case "true": - Logger = newStdoutLogger() - default: - Logger = newFileLogger(cf_trace) - } - - return Logger -} - -func newStdoutLogger() Printer { - return log.New(stdOut, "", 0) -} - -func newFileLogger(path string) Printer { - file, err := fileutils.Open(path) - if err != nil { - logger := newStdoutLogger() - logger.Printf(T("CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", - map[string]interface{}{"Path": path, "Err": err})) - return logger - } - - return log.New(file, "", 0) -} - -func Sanitize(input string) (sanitized string) { - var sanitizeJson = func(propertyName string, json string) string { - regex := regexp.MustCompile(fmt.Sprintf(`"%s":\s*"[^"]*"`, propertyName)) - return regex.ReplaceAllString(json, fmt.Sprintf(`"%s":"%s"`, propertyName, PRIVATE_DATA_PLACEHOLDER())) - } - - re := regexp.MustCompile(`(?m)^Authorization: .*`) - sanitized = re.ReplaceAllString(input, "Authorization: "+PRIVATE_DATA_PLACEHOLDER()) - re = regexp.MustCompile(`password=[^&]*&`) - sanitized = re.ReplaceAllString(sanitized, "password="+PRIVATE_DATA_PLACEHOLDER()+"&") - - sanitized = sanitizeJson("access_token", sanitized) - sanitized = sanitizeJson("refresh_token", sanitized) - sanitized = sanitizeJson("token", sanitized) - sanitized = sanitizeJson("password", sanitized) - sanitized = sanitizeJson("oldPassword", sanitized) - - return -} - -func PRIVATE_DATA_PLACEHOLDER() string { - return T("[PRIVATE DATA HIDDEN]") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace_suite_test.go deleted file mode 100644 index b6fa5ef..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package trace_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestTrace(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Trace Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace_test.go deleted file mode 100644 index f45579d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/trace/trace_test.go +++ /dev/null @@ -1,247 +0,0 @@ -package trace_test - -import ( - "bytes" - "github.com/cloudfoundry/gofileutils/fileutils" - "io/ioutil" - "os" - "runtime" - - . "github.com/cloudfoundry/cli/cf/trace" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("trace logger", func() { - Describe("a new, better API", func() { - var ( - stdout *bytes.Buffer - ) - - BeforeEach(func() { - stdout = bytes.NewBuffer([]byte{}) - SetStdout(stdout) - }) - - It("assumes it should write to stdout", func() { - logger := NewLogger("true") - logger.Print("hello whirled") - - result, err := ioutil.ReadAll(stdout) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(ContainSubstring("hello whirled")) - }) - - It("prints to nothing when given false", func() { - logger := NewLogger("false") - logger.Print("hello whirled") - - result, err := ioutil.ReadAll(stdout) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(BeEmpty()) - }) - - It("prints to a file when given a string", func() { - fileutils.TempFile("trace_test", func(file *os.File, err error) { - Expect(err).NotTo(HaveOccurred()) - file.Write([]byte("pre-existing content")) - - logger := NewLogger(file.Name()) - logger.Print("hello world") - - file.Seek(0, os.SEEK_SET) - result, err := ioutil.ReadAll(file) - Expect(err).NotTo(HaveOccurred()) - - byteString := string(result) - Expect(byteString).To(ContainSubstring("pre-existing content")) - Expect(byteString).To(ContainSubstring("hello world")) - - result, _ = ioutil.ReadAll(stdout) - Expect(string(result)).To(BeEmpty()) - }) - }) - - Context("when CF_TRACE is set to a file path that cannot be opened", func() { - It("defaults to printing to its out pipe", func() { - if runtime.GOOS != "windows" { - stdOut := bytes.NewBuffer([]byte{}) - SetStdout(stdOut) - - logger := NewLogger("/dev/null/whoops") - logger.Print("hello world") - - result, _ := ioutil.ReadAll(stdOut) - Expect(string(result)).To(ContainSubstring("hello world")) - } - }) - }) - }) - - Describe("Sanitize", func() { - It("hides the authorization token header", func() { - request := ` -REQUEST: -GET /v2/organizations HTTP/1.1 -Host: api.run.pivotal.io -Accept: application/json -Authorization: bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI3NDRkNWQ1My0xODkxLTQzZjktYjNiMy1mMTQxNDZkYzQ4ZmUiLCJzdWIiOiIzM2U3ZmVkNy1iMWMyLTRjMjAtOTU0My0yMTBiMjc2ODM1MDgiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIzM2U3ZmVkNy1iMWMyLTRjMjAtOTU0My0yMTBiMjc2ODM1MDgiLCJ1c2VyX25hbWUiOiJtZ2VoYXJkK2NsaUBwaXZvdGFsbGFicy5jb20iLCJlbWFpbCI6Im1nZWhhcmQrY2xpQHBpdm90YWxsYWJzLmNvbSIsImlhdCI6MTM3ODI0NzgxNiwiZXhwIjoxMzc4MjkxMDE2LCJpc3MiOiJodHRwczovL3VhYS5ydW4ucGl2b3RhbC5pby9vYXV0aC90b2tlbiIsImF1ZCI6WyJvcGVuaWQiLCJjbG91ZF9jb250cm9sbGVyIiwicGFzc3dvcmQiXX0.LL_QLO0SztGRENmU-9KA2WouOyPkKVENGQoUtjqrGR-UIekXMClH6fmKELzHtB69z3n9x7_jYJbvv32D-dX1J7p1CMWIDLOzXUnIUDK7cU5Q2yuYszf4v5anKiJtrKWU0_Pg87cQTZ_lWXAhdsi-bhLVR_pITxehfz7DKChjC8gh-FiuDvH5qHxxPqYHUl9jPso5OQ0y0fqZpLt8Yq23DKWaFAZehLnrhFltdQ_jSLy1QAYYZVD_HpQDf9NozKXruIvXhyIuwGj99QmUs3LSyNWecy822VqOoBtPYS6CLegMuWWlO64TJNrnZuh5YsOuW8SudJONx2wwEqARysJIHw -This is the body. Please don't get rid of me even though I contain Authorization: and some other text - ` - - expected := ` -REQUEST: -GET /v2/organizations HTTP/1.1 -Host: api.run.pivotal.io -Accept: application/json -Authorization: [PRIVATE DATA HIDDEN] -This is the body. Please don't get rid of me even though I contain Authorization: and some other text - ` - - Expect(Sanitize(request)).To(Equal(expected)) - }) - - Describe("hiding passwords in the body of requests", func() { - It("hides passwords in query args", func() { - request := ` -POST /oauth/token HTTP/1.1 -Host: login.run.pivotal.io -Accept: application/json -Authorization: [PRIVATE DATA HIDDEN] -Content-Type: application/x-www-form-urlencoded - -grant_type=password&password=password&scope=&username=mgehard%2Bcli%40pivotallabs.com -` - - expected := ` -POST /oauth/token HTTP/1.1 -Host: login.run.pivotal.io -Accept: application/json -Authorization: [PRIVATE DATA HIDDEN] -Content-Type: application/x-www-form-urlencoded - -grant_type=password&password=[PRIVATE DATA HIDDEN]&scope=&username=mgehard%2Bcli%40pivotallabs.com -` - Expect(Sanitize(request)).To(Equal(expected)) - }) - - It("hides paswords in the JSON-formatted request body", func() { - request := ` -REQUEST: [2014-03-07T10:53:36-08:00] -PUT /Users/user-guid-goes-here/password HTTP/1.1 - -{"password":"stanleysPasswordIsCool","oldPassword":"stanleypassword!"} -` - - expected := ` -REQUEST: [2014-03-07T10:53:36-08:00] -PUT /Users/user-guid-goes-here/password HTTP/1.1 - -{"password":"[PRIVATE DATA HIDDEN]","oldPassword":"[PRIVATE DATA HIDDEN]"} -` - - Expect(Sanitize(request)).To(Equal(expected)) - }) - - It("hides create-user passwords", func() { - request := ` -REQUEST: [2014-03-07T12:15:08-08:00] -POST /Users HTTP/1.1 -{ - "userName": "jiro", - "emails": [{"value":"jiro"}], - "password": "leansushi", - "name": {"givenName":"jiro", "familyName":"jiro"} -} -` - expected := ` -REQUEST: [2014-03-07T12:15:08-08:00] -POST /Users HTTP/1.1 -{ - "userName": "jiro", - "emails": [{"value":"jiro"}], - "password":"[PRIVATE DATA HIDDEN]", - "name": {"givenName":"jiro", "familyName":"jiro"} -} -` - Expect(Sanitize(request)).To(Equal(expected)) - }) - }) - - It("hides oauth tokens in the body of requests", func() { - response := ` -HTTP/1.1 200 OK -Content-Length: 2132 -Cache-Control: no-cache -Cache-Control: no-store -Cache-Control: no-store -Connection: keep-alive -Content-Type: application/json;charset=UTF-8 -Date: Thu, 05 Sep 2013 16:31:43 GMT -Expires: Thu, 01 Jan 1970 00:00:00 GMT -Pragma: no-cache -Pragma: no-cache -Server: Apache-Coyote/1.1 - -{"access_token":"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJjNmE3YzEzNi02NDk3LTRmYWYtODc5OS00YzQyZTFmM2M2ZjUiLCJzdWIiOiIzM2U3ZmVkNy1iMWMyLTRjMjAtOTU0My0yMTBiMjc2ODM1MDgiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIzM2U3ZmVkNy1iMWMyLTRjMjAtOTU0My0yMTBiMjc2ODM1MDgiLCJ1c2VyX25hbWUiOiJtZ2VoYXJkK2NsaUBwaXZvdGFsbGFicy5jb20iLCJlbWFpbCI6Im1nZWhhcmQrY2xpQHBpdm90YWxsYWJzLmNvbSIsImlhdCI6MTM3ODM5ODcwMywiZXhwIjoxMzc4NDQxOTAzLCJpc3MiOiJodHRwczovL3VhYS5ydW4ucGl2b3RhbC5pby9vYXV0aC90b2tlbiIsImF1ZCI6WyJvcGVuaWQiLCJjbG91ZF9jb250cm9sbGVyIiwicGFzc3dvcmQiXX0.VZErs4AnXgAzEirSY1A0yV0xQItXiPqaMfpO__MBwCihEpMEtMKemvlUPn3HEKyOGINk9YzhPV30ILrBb0oPt9plCD42BLEtyr_cbeo-1zap6QuhN8YjAAKQgjNYKORSvgi9x13JrXtCGByviHVEBP39Zeum2ZoehZfClWS7YP9lUfqaIBWUDLLBQtT6AZRlbzLwH-MJ5GkH1DOkIXzuWBk0OXp4VNm38kxzLQMnOJ3aJTcWv3YBxJeIgasoQLadTPaEPLxDGeC7V6SqhGJdyyZVnGTOKLt5ict-fxDoX6CxFnT_ZuMvseSocPfS2Or0HR_FICHAv2_C_6yv_4aI7w","token_type":"bearer","refresh_token":"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJjMjM2M2E3Yi04M2MwLTRiN2ItYjg0Zi1mNTM3MTA4ZGExZmEiLCJzdWIiOiIzM2U3ZmVkNy1iMWMyLTRjMjAtOTU0My0yMTBiMjc2ODM1MDgiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiXSwiaWF0IjoxMzc4Mzk4NzAzLCJleHAiOjEzODA5OTA3MDMsImNpZCI6ImNmIiwiaXNzIjoiaHR0cHM6Ly91YWEucnVuLnBpdm90YWwuaW8vb2F1dGgvdG9rZW4iLCJncmFudF90eXBlIjoicGFzc3dvcmQiLCJ1c2VyX25hbWUiOiJtZ2VoYXJkK2NsaUBwaXZvdGFsbGFicy5jb20iLCJhdWQiOlsiY2xvdWRfY29udHJvbGxlci5yZWFkIiwiY2xvdWRfY29udHJvbGxlci53cml0ZSIsIm9wZW5pZCIsInBhc3N3b3JkLndyaXRlIl19.G8K9hVy2TGvxWEHMmVT86iQ5szMjnN0pWog2ASawpDiV8A4QODn9lJQq0G08LjjElV6wKQywAxM6eU8p32byW6RU9Tu-0iz9lW96aWSppTjsb4itbPLxsdMXLSRKOow0vuuGhwaTYx9OZIMpzNbXJVwbRRyWlhty6LVrEZp3hG37HO-N7g2oJdFZwxATaE63iL5ZnikcvKrPkBTKUGZ8OIAvsAlHQiEnbB8mfaw6Bh74ciTjOl0DYbHlZoEMQazXkLnY3INgCyErRcjtNkjRQGe6fOV4v1Wx3PAZ05gaBsAOaThgifz4Rmaf--hnrhtYI5F3g17tDmht6udZv1_C6A","expires_in":43199,"scope":"cloud_controller.read cloud_controller.write openid password.write","jti":"c6a7c136-6497-4faf-8799-4c42e1f3c6f5"} -` - - expected := ` -HTTP/1.1 200 OK -Content-Length: 2132 -Cache-Control: no-cache -Cache-Control: no-store -Cache-Control: no-store -Connection: keep-alive -Content-Type: application/json;charset=UTF-8 -Date: Thu, 05 Sep 2013 16:31:43 GMT -Expires: Thu, 01 Jan 1970 00:00:00 GMT -Pragma: no-cache -Pragma: no-cache -Server: Apache-Coyote/1.1 - -{"access_token":"[PRIVATE DATA HIDDEN]","token_type":"bearer","refresh_token":"[PRIVATE DATA HIDDEN]","expires_in":43199,"scope":"cloud_controller.read cloud_controller.write openid password.write","jti":"c6a7c136-6497-4faf-8799-4c42e1f3c6f5"} -` - - Expect(Sanitize(response)).To(Equal(expected)) - }) - - It("hides service auth tokens in the request body", func() { - response := ` -HTTP/1.1 200 OK -Content-Length: 2132 -Cache-Control: no-cache -Cache-Control: no-store -Cache-Control: no-store -Connection: keep-alive -Content-Type: application/json;charset=UTF-8 -Date: Thu, 05 Sep 2013 16:31:43 GMT -Expires: Thu, 01 Jan 1970 00:00:00 GMT -Pragma: no-cache -Pragma: no-cache -Server: Apache-Coyote/1.1 - -{"label":"some label","provider":"some provider","token":"some-token-with-stuff-in-it"} -` - - expected := ` -HTTP/1.1 200 OK -Content-Length: 2132 -Cache-Control: no-cache -Cache-Control: no-store -Cache-Control: no-store -Connection: keep-alive -Content-Type: application/json;charset=UTF-8 -Date: Thu, 05 Sep 2013 16:31:43 GMT -Expires: Thu, 01 Jan 1970 00:00:00 GMT -Pragma: no-cache -Pragma: no-cache -Server: Apache-Coyote/1.1 - -{"label":"some label","provider":"some provider","token":"[PRIVATE DATA HIDDEN]"} -` - - Expect(Sanitize(response)).To(Equal(expected)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/logs.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/logs.go deleted file mode 100644 index c252112..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/logs.go +++ /dev/null @@ -1,122 +0,0 @@ -package ui_helpers - -import ( - "fmt" - "regexp" - "strings" - "time" - "unicode/utf8" - - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/sonde-go/events" -) - -func max(a, b int) int { - if a > b { - return a - } - return b -} - -func ExtractLogHeader(msg *logmessage.LogMessage, loc *time.Location) (logHeader, coloredLogHeader string) { - logMsg := msg - sourceName := logMsg.GetSourceName() - sourceID := logMsg.GetSourceId() - t := time.Unix(0, logMsg.GetTimestamp()) - timeFormat := "2006-01-02T15:04:05.00-0700" - timeString := t.In(loc).Format(timeFormat) - - if sourceID == "" { - logHeader = fmt.Sprintf("%s [%s]", timeString, sourceName) - } else { - logHeader = fmt.Sprintf("%s [%s/%s]", timeString, sourceName, sourceID) - } - - coloredLogHeader = terminal.LogSysHeaderColor(logHeader) - - // Calculate padding - longestHeader := fmt.Sprintf("%s [HEALTH/10] ", timeFormat) - expectedHeaderLength := utf8.RuneCountInString(longestHeader) - padding := strings.Repeat(" ", max(0, expectedHeaderLength-utf8.RuneCountInString(logHeader))) - - logHeader = logHeader + padding - coloredLogHeader = coloredLogHeader + padding - - return -} - -func ExtractNoaaLogHeader(msg *events.LogMessage, loc *time.Location) (logHeader, coloredLogHeader string) { - logMsg := msg - sourceName := logMsg.GetSourceType() - sourceID := logMsg.GetSourceInstance() - t := time.Unix(0, logMsg.GetTimestamp()) - timeFormat := "2006-01-02T15:04:05.00-0700" - timeString := t.In(loc).Format(timeFormat) - - if sourceID == "" { - logHeader = fmt.Sprintf("%s [%s]", timeString, sourceName) - } else { - logHeader = fmt.Sprintf("%s [%s/%s]", timeString, sourceName, sourceID) - } - - coloredLogHeader = terminal.LogSysHeaderColor(logHeader) - - // Calculate padding - longestHeader := fmt.Sprintf("%s [HEALTH/10] ", timeFormat) - expectedHeaderLength := utf8.RuneCountInString(longestHeader) - padding := strings.Repeat(" ", max(0, expectedHeaderLength-utf8.RuneCountInString(logHeader))) - - logHeader = logHeader + padding - coloredLogHeader = coloredLogHeader + padding - - return -} - -var newLinesPattern = regexp.MustCompile("[\n\r]+$") - -func ExtractNoaaLogContent(logMsg *events.LogMessage, logHeader string) (logContent string) { - msgText := string(logMsg.GetMessage()) - msgText = newLinesPattern.ReplaceAllString(msgText, "") - - msgLines := strings.Split(msgText, "\n") - padding := strings.Repeat(" ", utf8.RuneCountInString(logHeader)) - coloringFunc := terminal.LogStdoutColor - logType := "OUT" - - if logMsg.GetMessageType() == events.LogMessage_ERR { - coloringFunc = terminal.LogStderrColor - logType = "ERR" - } - - logContent = fmt.Sprintf("%s %s", logType, msgLines[0]) - for _, msgLine := range msgLines[1:] { - logContent = fmt.Sprintf("%s\n%s%s", logContent, padding, msgLine) - } - logContent = coloringFunc(logContent) - - return -} - -func ExtractLogContent(logMsg *logmessage.LogMessage, logHeader string) (logContent string) { - msgText := string(logMsg.GetMessage()) - msgText = newLinesPattern.ReplaceAllString(msgText, "") - - msgLines := strings.Split(msgText, "\n") - padding := strings.Repeat(" ", utf8.RuneCountInString(logHeader)) - coloringFunc := terminal.LogStdoutColor - logType := "OUT" - - if logMsg.GetMessageType() == logmessage.LogMessage_ERR { - coloringFunc = terminal.LogStderrColor - logType = "ERR" - } - - logContent = fmt.Sprintf("%s %s", logType, msgLines[0]) - for _, msgLine := range msgLines[1:] { - logContent = fmt.Sprintf("%s\n%s%s", logContent, padding, msgLine) - } - logContent = coloringFunc(logContent) - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/tags_parser.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/tags_parser.go deleted file mode 100644 index 7635fde..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/tags_parser.go +++ /dev/null @@ -1,16 +0,0 @@ -package ui_helpers - -import "strings" - -func ParseTags(tags string) []string { - tags = strings.Trim(tags, `"`) - tagsList := strings.Split(tags, ",") - finalTagsList := []string{} - for _, tag := range tagsList { - trimmed := strings.Trim(tag, " ") - if trimmed != "" { - finalTagsList = append(finalTagsList, trimmed) - } - } - return finalTagsList -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/tags_parser_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/tags_parser_test.go deleted file mode 100644 index f7cb08f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/tags_parser_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package ui_helpers_test - -import ( - . "github.com/cloudfoundry/cli/cf/ui_helpers" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("tags parser", func() { - - It("parses an empty string", func() { - rawTag := "" - - Expect(ParseTags(rawTag)).To(Equal([]string{})) - }) - - It("parses a single tag string", func() { - rawTag := "a, b, c, d" - - Expect(ParseTags(rawTag)).To(Equal([]string{"a", "b", "c", "d"})) - }) - - Context("and the formatting isn't a perfect comma-delimited list", func() { - - It("parses a single tag string", func() { - rawTag := "a,b, c,d" - - Expect(ParseTags(rawTag)).To(Equal([]string{"a", "b", "c", "d"})) - }) - - It("parses a single tag string", func() { - rawTag := " a, b, c, d " - - Expect(ParseTags(rawTag)).To(Equal([]string{"a", "b", "c", "d"})) - }) - - It("parses a single tag string", func() { - rawTag := "a" - - Expect(ParseTags(rawTag)).To(Equal([]string{"a"})) - }) - - It("parses a single tag string", func() { - rawTag := ",,,,,a,,,,,b" - - Expect(ParseTags(rawTag)).To(Equal([]string{"a", "b"})) - }) - - It("parses a single tag string", func() { - rawTag := "a, , , b" - - Expect(ParseTags(rawTag)).To(Equal([]string{"a", "b"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/ui.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/ui.go deleted file mode 100644 index 1c2d81f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/ui.go +++ /dev/null @@ -1,73 +0,0 @@ -package ui_helpers - -import ( - "fmt" - "strings" - - . "github.com/cloudfoundry/cli/cf/i18n" - - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" -) - -func ColoredAppState(app models.ApplicationFields) string { - appState := strings.ToLower(app.State) - - if app.RunningInstances == 0 { - if appState == "stopped" { - return appState - } else { - return terminal.CrashedColor(appState) - } - } - - if app.RunningInstances < app.InstanceCount { - return terminal.WarningColor(appState) - } - - return appState -} - -func ColoredAppInstances(app models.ApplicationFields) string { - healthString := fmt.Sprintf("%d/%d", app.RunningInstances, app.InstanceCount) - - if app.RunningInstances < 0 { - healthString = fmt.Sprintf("?/%d", app.InstanceCount) - } - - if app.RunningInstances == 0 { - if strings.ToLower(app.State) == "stopped" { - return healthString - } else { - return terminal.CrashedColor(healthString) - } - } - - if app.RunningInstances < app.InstanceCount { - return terminal.WarningColor(healthString) - } - - return healthString -} - -func ColoredInstanceState(instance models.AppInstanceFields) (colored string) { - state := string(instance.State) - switch state { - case "started", "running": - colored = T("running") - case "stopped": - colored = terminal.StoppedColor(T("stopped")) - case "crashed": - colored = terminal.CrashedColor(T("crashed")) - case "flapping": - colored = terminal.CrashedColor(T("crashing")) - case "down": - colored = terminal.CrashedColor(T("down")) - case "starting": - colored = terminal.AdvisoryColor(T("starting")) - default: - colored = terminal.WarningColor(state) - } - - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/ui_helpers_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/ui_helpers_suite_test.go deleted file mode 100644 index f848ad8..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/ui_helpers/ui_helpers_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package ui_helpers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestUiHelpers(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "UiHelpers Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_download.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_download.go deleted file mode 100644 index ad1254a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_download.go +++ /dev/null @@ -1,124 +0,0 @@ -package fileutils - -import ( - "fmt" - "io" - "net/http" - "os" - "path/filepath" - "strings" -) - -type Downloader interface { - DownloadFile(string) (int64, string, error) - RemoveFile() error - SavePath() string -} - -type downloader struct { - saveDir string - filename string - downloaded bool -} - -func NewDownloader(saveDir string) Downloader { - return &downloader{ - saveDir: saveDir, - downloaded: false, - } -} - -//this func returns byte written, filename and error -func (d *downloader) DownloadFile(url string) (int64, string, error) { - c := http.Client{ - CheckRedirect: func(r *http.Request, via []*http.Request) error { - r.URL.Opaque = r.URL.Path - - //some redirect return '/' as url - if strings.Trim(r.URL.Opaque, "/") != "" { - url = r.URL.Opaque - } - - return nil - }, - } - - r, err := c.Get(url) - - if err != nil { - return 0, "", err - } - defer r.Body.Close() - - if r.StatusCode == 200 { - d.filename = get_filename_from_header(r.Header.Get("Content-Disposition")) - - if d.filename == "" { - d.filename = get_filename_from_url(url) - } - - f, err := os.Create(filepath.Join(d.saveDir, d.filename)) - if err != nil { - return 0, "", err - } - defer f.Close() - - size, err := io.Copy(f, r.Body) - if err != nil { - return 0, "", err - } - - d.downloaded = true - return size, d.filename, nil - - } else { - return 0, "", fmt.Errorf("Error downloading file from %s", url) - } -} - -func (d *downloader) RemoveFile() error { - if !d.downloaded { - return nil - } - d.downloaded = false - return os.Remove(filepath.Join(d.saveDir, d.filename)) -} - -func get_filename_from_header(h string) string { - if h == "" { - return "" - } - - contents := strings.Split(h, ";") - for _, content := range contents { - if strings.Contains(content, "filename=") { - name := strings.TrimLeft(content, "filename=") - return strings.Trim(name, `"`) - } - } - - return "" -} - -func get_filename_from_url(url string) string { - tmp := strings.Split(url, "/") - token := tmp[len(tmp)-1] - - if i := strings.LastIndex(token, "?"); i != -1 { - token = token[i+1:] - } - - if i := strings.LastIndex(token, "&"); i != -1 { - token = token[i+1:] - } - - if i := strings.LastIndex(token, "="); i != -1 { - return token[i+1:] - } - - return token -} - -func (d *downloader) SavePath() string { - return d.saveDir -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_download_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_download_test.go deleted file mode 100644 index 2a86e7c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_download_test.go +++ /dev/null @@ -1,157 +0,0 @@ -package fileutils_test - -import ( - "fmt" - "net/http" - "net/http/httptest" - "os" - "strings" - - . "github.com/cloudfoundry/cli/fileutils" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Downloader", func() { - var ( - ts *httptest.Server - downloader Downloader - ) - - Describe("DownloadFile", func() { - Context("URL contains filename", func() { - BeforeEach(func() { - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "abc123") - })) - downloader = NewDownloader("./") - }) - - AfterEach(func() { - ts.Close() - - err := downloader.RemoveFile() - Ω(err).ToNot(HaveOccurred()) - }) - - It("saves file with name found in URL in provided dir", func() { - _, name, err := downloader.DownloadFile(ts.URL + "/abc.zip") - Ω(err).ToNot(HaveOccurred()) - Ω(name).To(Equal("abc.zip")) - - _, err = os.Stat("./abc.zip") - Ω(err).ToNot(HaveOccurred()) - }) - - It("returns the number of bytes written to the file", func() { - n, _, err := downloader.DownloadFile(ts.URL + "/abc.zip") - Ω(err).ToNot(HaveOccurred()) - Ω(n).To(Equal(int64(len("abc123") + 1))) - }) - }) - - Context("header contains filename", func() { - BeforeEach(func() { - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Disposition", "attachment;filename=header.zip") - fmt.Fprintln(w, "abc123") - })) - - downloader = NewDownloader("./") - }) - - AfterEach(func() { - ts.Close() - - err := downloader.RemoveFile() - Ω(err).ToNot(HaveOccurred()) - }) - - It("saves file with name found in header, ignore filename in url", func() { - _, name, err := downloader.DownloadFile(ts.URL + "/abc.zip") - Ω(err).ToNot(HaveOccurred()) - Ω(name).To(Equal("header.zip")) - - _, err = os.Stat("./abc.zip") - Ω(err).To(HaveOccurred()) - - _, err = os.Stat("./header.zip") - Ω(err).ToNot(HaveOccurred()) - }) - - }) - - Context("When URL redirects", func() { - BeforeEach(func() { - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - - if !strings.Contains(r.URL.String(), "redirect.zip") { - http.Redirect(w, r, ts.URL+"/redirect.zip", http.StatusMovedPermanently) - } else { - fmt.Fprintln(w, "abc123") - } - })) - - downloader = NewDownloader("./") - }) - - AfterEach(func() { - ts.Close() - - err := downloader.RemoveFile() - Ω(err).ToNot(HaveOccurred()) - }) - - It("follows redirects and download file", func() { - downloader = NewDownloader("./") - - _, _, err := downloader.DownloadFile(ts.URL) - Ω(err).ToNot(HaveOccurred()) - - _, err = os.Stat("./redirect.zip") - Ω(err).ToNot(HaveOccurred()) - }) - - }) - - Context("When URL is invalid", func() { - It("returns an error message", func() { - downloader = NewDownloader("./") - - _, name, err := downloader.DownloadFile("http://going.nowwhere/abc.zip") - - Ω(err).To(HaveOccurred()) - Ω(name).To(Equal("")) - }) - }) - - }) - - Describe("RemoveFile", func() { - BeforeEach(func() { - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "abc123") - })) - }) - - AfterEach(func() { - ts.Close() - }) - - It("removes the downloaded file", func() { - _, _, err := downloader.DownloadFile(ts.URL + "/abc.zip") - Ω(err).ToNot(HaveOccurred()) - - _, err = os.Stat("./abc.zip") - Ω(err).ToNot(HaveOccurred()) - - err = downloader.RemoveFile() - Ω(err).ToNot(HaveOccurred()) - - _, err = os.Stat("./abc.zip") - Ω(err).To(HaveOccurred()) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_utils_notwin.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_utils_notwin.go deleted file mode 100644 index 13bd3ab..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_utils_notwin.go +++ /dev/null @@ -1,13 +0,0 @@ -// - -// +build !windows - -package fileutils - -import ( - "os" -) - -func IsRegular(f os.FileInfo) bool { - return f.Mode().IsRegular() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_utils_windows.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_utils_windows.go deleted file mode 100644 index 118f286..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/file_utils_windows.go +++ /dev/null @@ -1,19 +0,0 @@ -package fileutils - -import ( - "os" - "syscall" -) - -const ( - FILE_ATTRIBUTE_REPARSE_POINT = 0x0400 -) - -func IsRegular(f os.FileInfo) bool { - if fileattrs, ok := f.Sys().(*syscall.Win32FileAttributeData); ok { - if fileattrs.FileAttributes&FILE_ATTRIBUTE_REPARSE_POINT != 0 { - return false - } - } - return f.Mode().IsRegular() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/fileutils_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/fileutils_suite_test.go deleted file mode 100644 index 71fd2a4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/fileutils_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package fileutils_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFileutils(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Fileutils Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/iocopy.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/iocopy.go deleted file mode 100644 index f329686..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/iocopy.go +++ /dev/null @@ -1,44 +0,0 @@ -package fileutils - -import ( - "io" - "os" - "runtime" -) - -func CopyFile(dst, src string) error { - in, err := os.Open(src) - if err != nil { - return err - } - defer in.Close() - - out, err := os.Create(dst) - if err != nil { - return err - } - - _, err = io.Copy(out, in) - if err != nil { - return err - } - - err = out.Close() - if err != nil { - return err - } - - fileInfo, err := os.Stat(src) - if err != nil { - return err - } - - if runtime.GOOS != "windows" { - err = os.Chmod(dst, fileInfo.Mode()) - if err != nil { - return err - } - } - - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/iocopy_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/iocopy_test.go deleted file mode 100644 index 79f592e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/iocopy_test.go +++ /dev/null @@ -1,31 +0,0 @@ -// +build darwin freebsd linux netbsd openbsd - -package fileutils_test - -import ( - . "github.com/cloudfoundry/cli/fileutils" - "io/ioutil" - "os" - "path/filepath" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Iocopy", func() { - Describe(".CopyFile", func() { - It("copies a file with correct permisions", func() { - someFile, err := ioutil.TempFile("", "blarg") - err = os.Chmod(someFile.Name(), 0731) - Expect(err).ToNot(HaveOccurred()) - - newDir, _ := ioutil.TempDir("", "") - - err = CopyFile(filepath.Join(newDir, "baz"), someFile.Name()) - Expect(err).ToNot(HaveOccurred()) - - fileStat, _ := os.Stat(filepath.Join(newDir, "baz")) - Expect(int(fileStat.Mode())).To(Equal(0731)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/bool.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/bool.go deleted file mode 100644 index faa86e1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/bool.go +++ /dev/null @@ -1,26 +0,0 @@ -package cliFlags - -import "strconv" - -type BoolFlag struct { - Name string - Value bool - Usage string -} - -func (f *BoolFlag) Set(v string) { - b, _ := strconv.ParseBool(v) - f.Value = b -} - -func (f *BoolFlag) String() string { - return f.Usage -} - -func (f *BoolFlag) GetName() string { - return f.Name -} - -func (f *BoolFlag) GetValue() interface{} { - return f.Value -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/int.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/int.go deleted file mode 100644 index 853cd58..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/int.go +++ /dev/null @@ -1,26 +0,0 @@ -package cliFlags - -import "strconv" - -type IntFlag struct { - Name string - Value int - Usage string -} - -func (f *IntFlag) Set(v string) { - i, _ := strconv.ParseInt(v, 10, 32) - f.Value = int(i) -} - -func (f *IntFlag) String() string { - return f.Usage -} - -func (f *IntFlag) GetName() string { - return f.Name -} - -func (f *IntFlag) GetValue() interface{} { - return f.Value -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/string.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/string.go deleted file mode 100644 index a713342..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flag/string.go +++ /dev/null @@ -1,23 +0,0 @@ -package cliFlags - -type StringFlag struct { - Name string - Value string - Usage string -} - -func (f *StringFlag) Set(v string) { - f.Value = v -} - -func (f *StringFlag) String() string { - return f.Usage -} - -func (f *StringFlag) GetName() string { - return f.Name -} - -func (f *StringFlag) GetValue() interface{} { - return f.Value -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags.go deleted file mode 100644 index 2633533..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags.go +++ /dev/null @@ -1,167 +0,0 @@ -package flags - -import ( - "errors" - "fmt" - "strconv" - "strings" - - "github.com/cloudfoundry/cli/flags/flag" -) - -/** - * In main: - * - get os args - * - new cmdContext obj - * - range over os.Args, look for '-'/'--', call flags.Parse() on each of them - * - cmdContext obj populated with flags, cmd now has c.Bool(),c.Int(),c.String() etc... - * - now populate cmdContext with args, anything w/o '-'/'--', now cmd has c.Args() - * - * now run cmd, pass Context obj over - * **/ - -type FlagSet interface { - fmt.Stringer - GetName() string - GetValue() interface{} - Set(string) -} - -type FlagContext interface { - Parse(...string) error - Args() []string - Int(string) int - Bool(string) bool - String(string) string - IsSet(string) bool -} - -type flagContext struct { - flagsets map[string]FlagSet - args []string - cmdFlags map[string]FlagSet //valid flags for command - cursor int -} - -func NewFlagContext(cmdFlags map[string]FlagSet) FlagContext { - return &flagContext{ - flagsets: make(map[string]FlagSet), - cmdFlags: cmdFlags, - cursor: 0, - } -} - -func (c *flagContext) Parse(args ...string) error { - var flagset FlagSet - var ok bool - var v string - var err error - - for c.cursor <= len(args)-1 { - arg := args[c.cursor] - - if strings.HasPrefix(arg, "-") || strings.HasPrefix(arg, "--") { - flg := strings.TrimLeft(strings.TrimLeft(arg, "-"), "-") - - if strings.Contains(flg, "=") { - tmpAry := strings.SplitN(flg, "=", 2) - flg = tmpAry[0] - tmpArg := append(args[:c.cursor], tmpAry[1]) - args = append(tmpArg, args[c.cursor:]...) - } - - if flagset, ok = c.cmdFlags[flg]; !ok { - return errors.New("Invalid flag: " + arg) - } - - switch flagset.GetValue().(type) { - case bool: - c.flagsets[flg] = &cliFlags.BoolFlag{Name: flg, Value: c.getBoolFlagValue(args)} - case int: - if v, err = c.getFlagValue(args); err != nil { - return err - } - i, err := strconv.ParseInt(v, 10, 32) - if err != nil { - return errors.New("Value for flag '" + flg + "' must be integer") - } - c.flagsets[flg] = &cliFlags.IntFlag{Name: flg, Value: int(i)} - case string: - if v, err = c.getFlagValue(args); err != nil { - return err - } - c.flagsets[flg] = &cliFlags.StringFlag{Name: flg, Value: v} - } - } else { - c.args = append(c.args, args[c.cursor]) - } - c.cursor++ - } - return nil -} - -func (c *flagContext) getFlagValue(args []string) (string, error) { - if c.cursor >= len(args)-1 { - return "", errors.New("No value provided for flag: " + args[c.cursor]) - } - - c.cursor++ - return args[c.cursor], nil -} - -func (c *flagContext) getBoolFlagValue(args []string) bool { - if c.cursor >= len(args)-1 { - return true - } - - b, err := strconv.ParseBool(args[c.cursor+1]) - if err == nil { - c.cursor++ - return b - } - return true -} - -func (c *flagContext) Args() []string { - return c.args -} - -func (c *flagContext) IsSet(k string) bool { - if _, ok := c.flagsets[k]; ok { - return true - } - return false -} - -func (c *flagContext) Int(k string) int { - if _, ok := c.flagsets[k]; ok { - v := c.flagsets[k].GetValue() - switch v.(type) { - case int: - return v.(int) - } - } - return 0 -} - -func (c *flagContext) String(k string) string { - if _, ok := c.flagsets[k]; ok { - v := c.flagsets[k].GetValue() - switch v.(type) { - case string: - return v.(string) - } - } - return "" -} - -func (c *flagContext) Bool(k string) bool { - if _, ok := c.flagsets[k]; ok { - v := c.flagsets[k].GetValue() - switch v.(type) { - case bool: - return v.(bool) - } - } - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags_suite_test.go deleted file mode 100644 index 0b3071f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package flags_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFlags(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Flags Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags_test.go deleted file mode 100644 index 968b4ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/flags/flags_test.go +++ /dev/null @@ -1,132 +0,0 @@ -package flags_test - -import ( - . "github.com/cloudfoundry/cli/flags" - "github.com/cloudfoundry/cli/flags/flag" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Flags", func() { - - Describe("FlagContext", func() { - - Describe("Parsing and retriving values", func() { - - var ( - fCtx FlagContext - cmdFlagMap map[string]FlagSet - ) - - BeforeEach(func() { - cmdFlagMap = make(map[string]FlagSet) - cmdFlagMap["name"] = &cliFlags.StringFlag{Name: "name", Value: "", Usage: "test string flag"} - cmdFlagMap["skip"] = &cliFlags.BoolFlag{Name: "skip", Value: false, Usage: "test bool flag"} - cmdFlagMap["instance"] = &cliFlags.IntFlag{Name: "instance", Value: 0, Usage: "test int flag"} - cmdFlagMap["skip2"] = &cliFlags.BoolFlag{Name: "skip2", Value: false, Usage: "test bool flag"} - - fCtx = NewFlagContext(cmdFlagMap) - }) - - It("accepts flags with either single '-' or double '-' ", func() { - err := fCtx.Parse("--name", "blue") - Ω(err).ToNot(HaveOccurred()) - - err = fCtx.Parse("-name", "") - Ω(err).ToNot(HaveOccurred()) - }) - - It("checks if a flag is defined in the FlagContext", func() { - err := fCtx.Parse("-not_defined", "") - Ω(err).To(HaveOccurred()) - - err = fCtx.Parse("-name", "blue") - Ω(err).ToNot(HaveOccurred()) - - err = fCtx.Parse("--skip", "") - Ω(err).ToNot(HaveOccurred()) - }) - - It("sets Bool() to return value if bool flag is provided with value true/false", func() { - err := fCtx.Parse("--skip=false", "-skip2", "true", "-name", "johndoe") - Ω(err).ToNot(HaveOccurred()) - - Ω(fCtx.Bool("skip")).To(Equal(false), "skip should be false") - Ω(fCtx.Bool("skip2")).To(Equal(true), "skip2 should be true") - Ω(fCtx.Bool("name")).To(Equal(false), "name should be false") - Ω(fCtx.Bool("non-exisit-flag")).To(Equal(false)) - }) - - It("sets Bool() to return true if bool flag is provided with invalid value", func() { - err := fCtx.Parse("--skip=Not_Valid", "skip2", "FALSE", "-name", "johndoe") - Ω(err).ToNot(HaveOccurred()) - - Ω(fCtx.Bool("skip")).To(Equal(true), "skip should be true") - Ω(fCtx.Bool("skip2")).To(Equal(false), "skip2 should be false") - }) - - It("sets Bool() to return true when a bool flag is provided without value", func() { - err := fCtx.Parse("--skip", "-name", "johndoe") - Ω(err).ToNot(HaveOccurred()) - - Ω(fCtx.Bool("skip")).To(Equal(true), "skip should be true") - Ω(fCtx.Bool("name")).To(Equal(false), "name should be false") - Ω(fCtx.Bool("non-exisit-flag")).To(Equal(false)) - }) - - It("sets String() to return provided value when a string flag is provided", func() { - err := fCtx.Parse("--skip", "-name", "doe") - Ω(err).ToNot(HaveOccurred()) - - Ω(fCtx.String("name")).To(Equal("doe")) - Ω(fCtx.Bool("skip")).To(Equal(true), "skip should be true") - }) - - It("errors when a non-boolean flag is provided without a value", func() { - err := fCtx.Parse("-name") - Ω(err).To(HaveOccurred()) - Ω(err.Error()).To(ContainSubstring("No value provided for flag")) - Ω(fCtx.String("name")).To(Equal("")) - }) - - It("sets Int() to return provided value when a int flag is provided", func() { - err := fCtx.Parse("--instance", "10") - Ω(err).ToNot(HaveOccurred()) - - Ω(fCtx.Int("instance")).To(Equal(10)) - Ω(fCtx.IsSet("instance")).To(Equal(true)) - - Ω(fCtx.Int("non-exist-flag")).To(Equal(0)) - Ω(fCtx.IsSet("non-exist-flag")).To(Equal(false)) - }) - - It("returns any non-flag arguments in Args()", func() { - err := fCtx.Parse("Arg-1", "--instance", "10", "--skip", "Arg-2") - Ω(err).ToNot(HaveOccurred()) - - Ω(len(fCtx.Args())).To(Equal(2)) - Ω(fCtx.Args()[0]).To(Equal("Arg-1")) - Ω(fCtx.Args()[1]).To(Equal("Arg-2")) - }) - - It("accepts flag/value in the forms of '-flag=value' and '-flag value'", func() { - err := fCtx.Parse("-instance", "10", "--name=foo", "--skip", "Arg-1") - Ω(err).ToNot(HaveOccurred()) - - Ω(fCtx.IsSet("instance")).To(Equal(true)) - Ω(fCtx.Int("instance")).To(Equal(10)) - - Ω(fCtx.IsSet("name")).To(Equal(true)) - Ω(fCtx.String("name")).To(Equal("foo")) - - Ω(fCtx.IsSet("skip")).To(Equal(true)) - - Ω(len(fCtx.Args())).To(Equal(1)) - Ω(fCtx.Args()[0]).To(Equal("Arg-1")) - }) - - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/generic_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/generic_suite_test.go deleted file mode 100644 index da96eda..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/generic_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package generic_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGeneric(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Generic Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/map_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/map_test.go deleted file mode 100644 index bfa83cd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/map_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package generic_test - -import ( - . "github.com/cloudfoundry/cli/generic" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func init() { - Describe("generic maps", func() { - It("deep merges, with the last map taking precedence in conflicts", func() { - map1 := NewMap(map[interface{}]interface{}{ - "key1": "val1", - "key2": "val2", - "nest1": map[interface{}]interface{}{ - "nestKey1": "nest1Val1", - "nestKey2": "nest1Val2", - }, - "nest2": []interface{}{ - "nest2Val1", - }, - }) - - map2 := NewMap(map[interface{}]interface{}{ - "key1": "newVal1", - "nest1": map[interface{}]interface{}{ - "nestKey1": "newNest1Val1", - }, - "nest2": []interface{}{ - "something", - }, - }) - - expectedMap := NewMap(map[interface{}]interface{}{ - "key1": "newVal1", - "key2": "val2", - "nest1": NewMap(map[interface{}]interface{}{ - "nestKey1": "newNest1Val1", - "nestKey2": "nest1Val2", - }), - "nest2": []interface{}{ - "nest2Val1", - "something", - }, - }) - - mergedMap := DeepMerge(map1, map2) - Expect(mergedMap).To(Equal(expectedMap)) - }) - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/slice.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/slice.go deleted file mode 100644 index c142d88..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/slice.go +++ /dev/null @@ -1,12 +0,0 @@ -package generic - -func IsSliceable(value interface{}) bool { - switch value.(type) { - case []string: - return true - case []interface{}: - return true - default: - return false - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/slice_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/slice_test.go deleted file mode 100644 index aa184c4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/slice_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package generic_test - -import ( - "github.com/cloudfoundry/cli/generic" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func init() { - Describe("IsSliceable", func() { - It("should return false when the type cannot be sliced", func() { - Expect(generic.IsSliceable("bad slicing")).To(BeFalse()) - }) - - It("should return true if the type can be sliced", func() { - Expect(generic.IsSliceable([]string{"a string"})).To(BeTrue()) - }) - - It("should return true if the type can be sliced", func() { - Expect(generic.IsSliceable([]interface{}{1, 2, 3})).To(BeTrue()) - }) - }) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/glob/glob_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/glob/glob_test.go deleted file mode 100644 index 57be158..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/glob/glob_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package glob - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "testing" -) - -var globs = [][]string{ - {"/", `^/$`}, - {"/a", `^/a$`}, - {"/a.b", `^/a\.b$`}, - {"/a-b", `^/a\-b$`}, - {"/a?", `^/a[^/]$`}, - {"/a/b", `^/a/b$`}, - {"/*", `^/[^/]*$`}, - {"/*/a", `^/[^/]*/a$`}, - {"/*a/b", `^/[^/]*a/b$`}, - {"/a*/b", `^/a[^/]*/b$`}, - {"/a*a/b", `^/a[^/]*a/b$`}, - {"/*a*/b", `^/[^/]*a[^/]*/b$`}, - {"/**", `^/.*$`}, - {"/**/a", `^/.*/a$`}, -} - -var matches = [][]string{ - {"/a/b", "/a/b"}, - {"/a?", "/ab", "/ac"}, - {"/a*", "/a", "/ab", "/abc"}, - {"/a**", "/a", "/ab", "/abc", "/a/", "/a/b", "/ab/c"}, - {`c:\a\b\.d`, `c:\a\b\.d`}, - {`c:\**\.d`, `c:\a\b\.d`}, -} - -var nonMatches = [][]string{ - {"/a/b", "/a/c", "/a/", "/a/b/", "/a/bc"}, - {"/a?", "/", "/abc", "/a", "/a/"}, - {"/a*", "/", "/a/", "/ba"}, - {"/a**", "/", "/ba"}, -} - -var _ = Describe("Glob", func() { - It("translates globs to regexes", func() { - for _, parts := range globs { - pat, exp := parts[0], parts[1] - got, err := translateGlob(pat) - - Expect(err).NotTo(HaveOccurred()) - Expect(exp).To(Equal(got), "expected %q, but got %q from %q", exp, got, pat) - } - }) - - It("creates regexes that match correct file paths", func() { - for _, parts := range matches { - pat, paths := parts[0], parts[1:] - glob, err := CompileGlob(pat) - - Expect(err).NotTo(HaveOccurred()) - for _, path := range paths { - Expect(glob.Match(path)).To(BeTrue(), "path %q should match %q", pat, path) - } - } - }) - - It("creates regexes that do not match file incorrect file paths", func() { - for _, parts := range nonMatches { - pat, paths := parts[0], parts[1:] - glob, err := CompileGlob(pat) - - Expect(err).NotTo(HaveOccurred()) - for _, path := range paths { - Expect(glob.Match(path)).To(BeFalse(), "path %q should match %q", pat, path) - } - } - }) -}) - -func TestGlobSuite(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Glob Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_parser.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_parser.go deleted file mode 100644 index a1e1de1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_parser.go +++ /dev/null @@ -1,84 +0,0 @@ -package json - -import ( - "encoding/json" - "io/ioutil" - "os" - - "github.com/cloudfoundry/cli/cf/errors" -) - -func ParseJsonArray(path string) ([]map[string]interface{}, error) { - if path == "" { - return nil, nil - } - - bytes, err := readJsonFile(path) - if err != nil { - return nil, err - } - - stringMaps := []map[string]interface{}{} - err = json.Unmarshal(bytes, &stringMaps) - if err != nil { - return nil, errors.NewWithFmt("Incorrect json format: %s", err.Error()) - } - - return stringMaps, nil -} - -func ParseJsonFromFileOrString(fileOrJson string) (map[string]interface{}, error) { - var jsonMap map[string]interface{} - var err error - var bytes []byte - - if fileOrJson == "" { - return nil, nil - } - - if fileExists(fileOrJson) { - bytes, err = readJsonFile(fileOrJson) - if err != nil { - return nil, err - } - } else { - bytes = []byte(fileOrJson) - } - - jsonMap, err = parseJson(bytes) - - if err != nil { - return nil, err - } - - return jsonMap, nil -} - -func fileExists(path string) bool { - _, err := os.Stat(path) - return err == nil -} - -func readJsonFile(path string) ([]byte, error) { - file, err := os.Open(path) - if err != nil { - return nil, err - } - - bytes, err := ioutil.ReadAll(file) - if err != nil { - return nil, err - } - - return bytes, nil -} - -func parseJson(bytes []byte) (map[string]interface{}, error) { - stringMap := map[string]interface{}{} - err := json.Unmarshal(bytes, &stringMap) - if err != nil { - return nil, errors.NewWithFmt("Incorrect json format: %s", err.Error()) - } - - return stringMap, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_parser_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_parser_test.go deleted file mode 100644 index 6050bb3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_parser_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package json_test - -import ( - "io/ioutil" - "os" - - "github.com/cloudfoundry/cli/json" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("JSON Parser", func() { - Describe("ParseJsonArray", func() { - var filename string - var tmpFile *os.File - - Context("when everything is proper", func() { - BeforeEach(func() { - tmpFile, _ = ioutil.TempFile("", "WONDERFULFILEWHOSENAMEISHARDTOREADBUTCONTAINSVALIDJSON") - filename = tmpFile.Name() - ioutil.WriteFile(filename, []byte("[{\"akey\": \"avalue\"}]"), 0644) - }) - - AfterEach(func() { - tmpFile.Close() - os.Remove(tmpFile.Name()) - }) - - It("converts a json file into an unmarshalled slice of string->string map objects", func() { - stringMaps, err := json.ParseJsonArray(filename) - Expect(err).To(BeNil()) - Expect(stringMaps[0]["akey"]).To(Equal("avalue")) - }) - }) - - Context("when the JSON is invalid", func() { - BeforeEach(func() { - tmpFile, _ = ioutil.TempFile("", "TERRIBLEFILECONTAININGINVALIDJSONWHICHMAKESEVERYTHINGTERRIBLEANDSTILLHASANAMETHATSHARDTOREAD") - filename = tmpFile.Name() - ioutil.WriteFile(filename, []byte("SCARY NOISES}"), 0644) - }) - - AfterEach(func() { - tmpFile.Close() - os.Remove(tmpFile.Name()) - }) - - It("tries to convert the json file but fails because it was given something it didn't like", func() { - _, err := json.ParseJsonArray(filename) - Expect(err).To(MatchError("Incorrect json format: invalid character 'S' looking for beginning of value")) - }) - }) - }) - - Describe("ParseJsonFromFileOrString", func() { - Context("when the input is empty", func() { - It("returns nil", func() { - result, err := json.ParseJsonFromFileOrString("") - - Expect(result).To(BeNil()) - Expect(err).To(BeNil()) - }) - }) - - Context("when the input is a file", func() { - var jsonFile *os.File - var fileContent string - - AfterEach(func() { - if jsonFile != nil { - jsonFile.Close() - os.Remove(jsonFile.Name()) - } - }) - - BeforeEach(func() { - fileContent = `{"foo": "bar"}` - }) - - JustBeforeEach(func() { - var err error - jsonFile, err = ioutil.TempFile("", "") - Expect(err).ToNot(HaveOccurred()) - - err = ioutil.WriteFile(jsonFile.Name(), []byte(fileContent), os.ModePerm) - Expect(err).NotTo(HaveOccurred()) - }) - - It("returns the parsed json from the file", func() { - result, err := json.ParseJsonFromFileOrString(jsonFile.Name()) - Expect(err).NotTo(HaveOccurred()) - - Expect(result).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("when the file contains invalid json", func() { - BeforeEach(func() { - fileContent = `badtimes` - }) - - It("returns an error", func() { - _, err := json.ParseJsonFromFileOrString(jsonFile.Name()) - Expect(err).To(MatchError("Incorrect json format: invalid character 'b' looking for beginning of value")) - }) - }) - }) - - Context("when the input is considered a json string (when it is not a file path)", func() { - var jsonString string - - BeforeEach(func() { - jsonString = `{"foo": "bar"}` - }) - - It("returns the parsed json", func() { - result, err := json.ParseJsonFromFileOrString(jsonString) - Expect(err).NotTo(HaveOccurred()) - - Expect(result).To(Equal(map[string]interface{}{"foo": "bar"})) - }) - - Context("when the JSON is invalid", func() { - BeforeEach(func() { - jsonString = "SOMETHING IS WRONG" - }) - - It("returns a json parse error", func() { - _, err := json.ParseJsonFromFileOrString(jsonString) - Expect(err).To(MatchError("Incorrect json format: invalid character 'S' looking for beginning of value")) - }) - }) - }) - - Context("when the input is neither a file nor a json string", func() { - var invalidInput string - - BeforeEach(func() { - invalidInput = "boo" - }) - - It("returns an error", func() { - _, err := json.ParseJsonFromFileOrString(invalidInput) - Expect(err).To(HaveOccurred()) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_suite_test.go deleted file mode 100644 index fa471d3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/json/json_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package json_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestJson(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Json Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/cli_connection.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/cli_connection.go deleted file mode 100644 index 20c7f82..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/cli_connection.go +++ /dev/null @@ -1,422 +0,0 @@ -package plugin - -import ( - "errors" - "fmt" - "net" - "net/rpc" - "os" - "time" - - "github.com/cloudfoundry/cli/plugin/models" -) - -type cliConnection struct { - cliServerPort string -} - -func NewCliConnection(cliServerPort string) *cliConnection { - return &cliConnection{ - cliServerPort: cliServerPort, - } -} - -func (cliConnection *cliConnection) sendPluginMetadataToCliServer(metadata PluginMetadata) { - cliServerConn, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - defer cliServerConn.Close() - - var success bool - - err = cliServerConn.Call("CliRpcCmd.SetPluginMetadata", metadata, &success) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - if !success { - os.Exit(1) - } - - os.Exit(0) -} - -func (cliConnection *cliConnection) isMinCliVersion(version string) bool { - cliServerConn, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - defer cliServerConn.Close() - - var result bool - - err = cliServerConn.Call("CliRpcCmd.IsMinCliVersion", version, &result) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - return result -} - -func (cliConnection *cliConnection) CliCommandWithoutTerminalOutput(args ...string) ([]string, error) { - return cliConnection.callCliCommand(true, args...) -} - -func (cliConnection *cliConnection) CliCommand(args ...string) ([]string, error) { - return cliConnection.callCliCommand(false, args...) -} - -func (cliConnection *cliConnection) callCliCommand(silently bool, args ...string) ([]string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []string{}, err - } - defer client.Close() - - var success bool - - client.Call("CliRpcCmd.DisableTerminalOutput", silently, &success) - err = client.Call("CliRpcCmd.CallCoreCommand", args, &success) - - var cmdOutput []string - outputErr := client.Call("CliRpcCmd.GetOutputAndReset", success, &cmdOutput) - - if err != nil { - return cmdOutput, err - } else if !success { - return cmdOutput, errors.New("Error executing cli core command") - } - - if outputErr != nil { - return cmdOutput, errors.New("something completely unexpected happened") - } - return cmdOutput, nil -} - -func (cliConnection *cliConnection) pingCLI() { - //call back to cf saying we have been setup - var connErr error - var conn net.Conn - for i := 0; i < 5; i++ { - conn, connErr = net.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if connErr != nil { - time.Sleep(200 * time.Millisecond) - } else { - conn.Close() - break - } - } - if connErr != nil { - fmt.Println(connErr) - os.Exit(1) - } -} - -func (cliConnection *cliConnection) GetCurrentOrg() (plugin_models.Organization, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return plugin_models.Organization{}, err - } - - var result plugin_models.Organization - - err = client.Call("CliRpcCmd.GetCurrentOrg", "", &result) - return result, err -} - -func (cliConnection *cliConnection) GetCurrentSpace() (plugin_models.Space, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return plugin_models.Space{}, err - } - - var result plugin_models.Space - - err = client.Call("CliRpcCmd.GetCurrentSpace", "", &result) - return result, err -} - -func (cliConnection *cliConnection) Username() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.Username", "", &result) - return result, err -} - -func (cliConnection *cliConnection) UserGuid() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.UserGuid", "", &result) - return result, err -} - -func (cliConnection *cliConnection) UserEmail() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.UserEmail", "", &result) - return result, err -} - -func (cliConnection *cliConnection) IsSSLDisabled() (bool, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return false, err - } - - var result bool - - err = client.Call("CliRpcCmd.IsSSLDisabled", "", &result) - return result, err -} - -func (cliConnection *cliConnection) IsLoggedIn() (bool, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return false, err - } - - var result bool - - err = client.Call("CliRpcCmd.IsLoggedIn", "", &result) - return result, err -} - -func (cliConnection *cliConnection) HasOrganization() (bool, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return false, err - } - - var result bool - - err = client.Call("CliRpcCmd.HasOrganization", "", &result) - return result, err -} - -func (cliConnection *cliConnection) HasSpace() (bool, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return false, err - } - - var result bool - - err = client.Call("CliRpcCmd.HasSpace", "", &result) - return result, err -} - -func (cliConnection *cliConnection) ApiEndpoint() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.ApiEndpoint", "", &result) - return result, err -} - -func (cliConnection *cliConnection) HasAPIEndpoint() (bool, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return false, err - } - - var result bool - - err = client.Call("CliRpcCmd.HasApiEndpoint", "", &result) - return result, err -} - -func (cliConnection *cliConnection) ApiVersion() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.ApiVersion", "", &result) - return result, err -} - -func (cliConnection *cliConnection) LoggregatorEndpoint() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.LoggregatorEndpoint", "", &result) - return result, err -} - -func (cliConnection *cliConnection) DopplerEndpoint() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.DopplerEndpoint", "", &result) - return result, err -} - -func (cliConnection *cliConnection) AccessToken() (string, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return "", err - } - - var result string - - err = client.Call("CliRpcCmd.AccessToken", "", &result) - return result, err -} - -func (cliConnection *cliConnection) GetApp(appName string) (plugin_models.GetAppModel, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return plugin_models.GetAppModel{}, err - } - - var result plugin_models.GetAppModel - - err = client.Call("CliRpcCmd.GetApp", appName, &result) - return result, err -} - -func (cliConnection *cliConnection) GetApps() ([]plugin_models.GetAppsModel, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []plugin_models.GetAppsModel{}, err - } - - var result []plugin_models.GetAppsModel - - err = client.Call("CliRpcCmd.GetApps", "", &result) - return result, err -} - -func (cliConnection *cliConnection) GetOrgs() ([]plugin_models.GetOrgs_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []plugin_models.GetOrgs_Model{}, err - } - - var result []plugin_models.GetOrgs_Model - - err = client.Call("CliRpcCmd.GetOrgs", "", &result) - return result, err -} - -func (cliConnection *cliConnection) GetSpaces() ([]plugin_models.GetSpaces_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []plugin_models.GetSpaces_Model{}, err - } - - var result []plugin_models.GetSpaces_Model - - err = client.Call("CliRpcCmd.GetSpaces", "", &result) - return result, err -} - -func (cliConnection *cliConnection) GetServices() ([]plugin_models.GetServices_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []plugin_models.GetServices_Model{}, err - } - - var result []plugin_models.GetServices_Model - - err = client.Call("CliRpcCmd.GetServices", "", &result) - return result, err -} - -func (cliConnection *cliConnection) GetOrgUsers(orgName string, args ...string) ([]plugin_models.GetOrgUsers_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []plugin_models.GetOrgUsers_Model{}, err - } - - var result []plugin_models.GetOrgUsers_Model - - cmdArgs := append([]string{orgName}, args...) - - err = client.Call("CliRpcCmd.GetOrgUsers", cmdArgs, &result) - return result, err -} - -func (cliConnection *cliConnection) GetSpaceUsers(orgName string, spaceName string) ([]plugin_models.GetSpaceUsers_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return []plugin_models.GetSpaceUsers_Model{}, err - } - - var result []plugin_models.GetSpaceUsers_Model - - cmdArgs := []string{orgName, spaceName} - - err = client.Call("CliRpcCmd.GetSpaceUsers", cmdArgs, &result) - return result, err -} - -func (cliConnection *cliConnection) GetOrg(orgName string) (plugin_models.GetOrg_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return plugin_models.GetOrg_Model{}, err - } - - var result plugin_models.GetOrg_Model - - err = client.Call("CliRpcCmd.GetOrg", orgName, &result) - return result, err -} - -func (cliConnection *cliConnection) GetSpace(spaceName string) (plugin_models.GetSpace_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return plugin_models.GetSpace_Model{}, err - } - - var result plugin_models.GetSpace_Model - - err = client.Call("CliRpcCmd.GetSpace", spaceName, &result) - return result, err -} - -func (cliConnection *cliConnection) GetService(serviceInstance string) (plugin_models.GetService_Model, error) { - client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort) - if err != nil { - return plugin_models.GetService_Model{}, err - } - - var result plugin_models.GetService_Model - - err = client.Call("CliRpcCmd.GetService", serviceInstance, &result) - return result, err -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin.go deleted file mode 100644 index 29b0f4e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin.go +++ /dev/null @@ -1,69 +0,0 @@ -package plugin - -import "github.com/cloudfoundry/cli/plugin/models" - -/** - Command interface needs to be implemented for a runnable plugin of `cf` -**/ -type Plugin interface { - Run(cliConnection CliConnection, args []string) - GetMetadata() PluginMetadata -} - -/** - List of commands avaiable to CliConnection variable passed into run -**/ -type CliConnection interface { - CliCommandWithoutTerminalOutput(args ...string) ([]string, error) - CliCommand(args ...string) ([]string, error) - GetCurrentOrg() (plugin_models.Organization, error) - GetCurrentSpace() (plugin_models.Space, error) - Username() (string, error) - UserGuid() (string, error) - UserEmail() (string, error) - IsLoggedIn() (bool, error) - IsSSLDisabled() (bool, error) - HasOrganization() (bool, error) - HasSpace() (bool, error) - ApiEndpoint() (string, error) - ApiVersion() (string, error) - HasAPIEndpoint() (bool, error) - LoggregatorEndpoint() (string, error) - DopplerEndpoint() (string, error) - AccessToken() (string, error) - GetApp(string) (plugin_models.GetAppModel, error) - GetApps() ([]plugin_models.GetAppsModel, error) - GetOrgs() ([]plugin_models.GetOrgs_Model, error) - GetSpaces() ([]plugin_models.GetSpaces_Model, error) - GetOrgUsers(string, ...string) ([]plugin_models.GetOrgUsers_Model, error) - GetSpaceUsers(string, string) ([]plugin_models.GetSpaceUsers_Model, error) - GetServices() ([]plugin_models.GetServices_Model, error) - GetService(string) (plugin_models.GetService_Model, error) - GetOrg(string) (plugin_models.GetOrg_Model, error) - GetSpace(string) (plugin_models.GetSpace_Model, error) -} - -type VersionType struct { - Major int - Minor int - Build int -} - -type PluginMetadata struct { - Name string - Version VersionType - MinCliVersion VersionType - Commands []Command -} - -type Usage struct { - Usage string - Options map[string]string -} - -type Command struct { - Name string - Alias string - HelpText string - UsageDetails Usage //Detail usage to be displayed in `cf help ` -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_shim.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_shim.go deleted file mode 100644 index 1fcf746..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_shim.go +++ /dev/null @@ -1,44 +0,0 @@ -package plugin - -import ( - "fmt" - "os" - "strconv" -) - -/** - * This function is called by the plugin to setup their server. This allows us to call Run on the plugin - * os.Args[1] port CF_CLI rpc server is running on - * os.Args[2] **OPTIONAL** - * SendMetadata - used to fetch the plugin metadata -**/ -func Start(cmd Plugin) { - cliConnection := NewCliConnection(os.Args[1]) - - cliConnection.pingCLI() - if isMetadataRequest(os.Args) { - cliConnection.sendPluginMetadataToCliServer(cmd.GetMetadata()) - } else { - if version := MinCliVersionStr(cmd.GetMetadata().MinCliVersion); version != "" { - ok := cliConnection.isMinCliVersion(version) - if !ok { - fmt.Printf("Minimum CLI version %s is required to run this plugin command\n\n", version) - os.Exit(0) - } - } - - cmd.Run(cliConnection, os.Args[2:]) - } -} - -func isMetadataRequest(args []string) bool { - return len(args) == 3 && args[2] == "SendMetadata" -} - -func MinCliVersionStr(version VersionType) string { - if version.Major == 0 && version.Minor == 0 && version.Build == 0 { - return "" - } - - return strconv.FormatInt(int64(version.Major), 10) + "." + strconv.FormatInt(int64(version.Minor), 10) + "." + strconv.FormatInt(int64(version.Build), 10) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_shim_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_shim_test.go deleted file mode 100644 index 8aec877..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_shim_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package plugin_test - -import ( - "os/exec" - "path/filepath" - - "github.com/cloudfoundry/cli/plugin" - "github.com/cloudfoundry/cli/testhelpers/rpc_server" - fake_rpc_handlers "github.com/cloudfoundry/cli/testhelpers/rpc_server/fakes" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - . "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Command", func() { - var ( - validPluginPath = filepath.Join("..", "fixtures", "plugins", "test_1.exe") - ) - - Describe(".Start", func() { - It("Exits with status 1 if it cannot ping the host port passed as an argument", func() { - args := []string{"0", "0"} - session, err := Start(exec.Command(validPluginPath, args...), GinkgoWriter, GinkgoWriter) - Expect(err).ToNot(HaveOccurred()) - Eventually(session, 2).Should(Exit(1)) - }) - - Context("Executing plugins with '.Start()'", func() { - var ( - rpcHandlers *fake_rpc_handlers.FakeHandlers - ts *test_rpc_server.TestServer - err error - ) - - BeforeEach(func() { - rpcHandlers = &fake_rpc_handlers.FakeHandlers{} - ts, err = test_rpc_server.NewTestRpcServer(rpcHandlers) - Expect(err).NotTo(HaveOccurred()) - - err = ts.Start() - Expect(err).NotTo(HaveOccurred()) - }) - - AfterEach(func() { - ts.Stop() - }) - - Context("checking MinCliVersion", func() { - It("it calls rpc cmd 'IsMinCliVersion' if plugin metadata 'MinCliVersion' is set", func() { - args := []string{ts.Port(), "0"} - session, err := Start(exec.Command(validPluginPath, args...), GinkgoWriter, GinkgoWriter) - Expect(err).ToNot(HaveOccurred()) - - session.Wait() - - Expect(rpcHandlers.IsMinCliVersionCallCount()).To(Equal(1)) - }) - - It("notifies the user 'min cli version is not met'", func() { - rpcHandlers.IsMinCliVersionStub = func(_ string, result *bool) error { - *result = false - return nil - } - - args := []string{ts.Port(), "0"} - session, err := Start(exec.Command(validPluginPath, args...), GinkgoWriter, GinkgoWriter) - Expect(err).ToNot(HaveOccurred()) - - session.Wait() - - Expect(session).To(gbytes.Say("Minimum CLI version 5.0.0 is required to run this plugin command")) - }) - }) - }) - }) - - Describe("MinCliVersionStr", func() { - It("returns a string representation of VersionType{}", func() { - version := plugin.VersionType{ - Major: 1, - Minor: 2, - Build: 3, - } - - str := plugin.MinCliVersionStr(version) - Expect(str).To(Equal("1.2.3")) - }) - - It("returns a empty string if no field in VersionType is set", func() { - version := plugin.VersionType{} - - str := plugin.MinCliVersionStr(version) - Expect(str).To(Equal("")) - }) - - It("uses '0' as return value for field that is not set", func() { - version := plugin.VersionType{ - Build: 5, - } - - str := plugin.MinCliVersionStr(version) - Expect(str).To(Equal("0.0.5")) - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_suite_test.go deleted file mode 100644 index 3a799a4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/plugin_suite_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package plugin_test - -import ( - "path/filepath" - - "github.com/cloudfoundry/cli/testhelpers/plugin_builder" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestPlugin(t *testing.T) { - RegisterFailHandler(Fail) - plugin_builder.BuildTestBinary(filepath.Join("..", "fixtures", "plugins"), "test_1") - RunSpecs(t, "Plugin Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/call_command_registry.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/call_command_registry.go deleted file mode 100644 index 58431fd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/call_command_registry.go +++ /dev/null @@ -1,51 +0,0 @@ -package rpc - -import ( - "errors" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/flags" -) - -type NonCodegangstaRunner interface { - Command([]string, command_registry.Dependency, bool) error -} - -type nonCodegangstaRunner struct{} - -func NewNonCodegangstaRunner() NonCodegangstaRunner { - return &nonCodegangstaRunner{} -} - -func (c *nonCodegangstaRunner) Command(args []string, deps command_registry.Dependency, pluginApiCall bool) error { - var err error - - cmdRegistry := command_registry.Commands - if cmdRegistry.CommandExists(args[0]) { - - fc := flags.NewFlagContext(cmdRegistry.FindCommand(args[0]).MetaData().Flags) - err = fc.Parse(args[1:]...) - if err != nil { - return err - } - - cfCmd := cmdRegistry.FindCommand(args[0]) - cfCmd = cfCmd.SetDependency(deps, pluginApiCall) - - reqs, err := cfCmd.Requirements(requirements.NewFactory(deps.Ui, deps.Config, deps.RepoLocator), fc) - if err != nil { - return err - } - - for _, r := range reqs { - if !r.Execute() { - return errors.New("Error in requirement") - } - } - - cfCmd.Execute(fc) - } - - return nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/call_command_registry_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/call_command_registry_test.go deleted file mode 100644 index 2c5bff3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/call_command_registry_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package rpc_test - -import ( - "github.com/cloudfoundry/cli/cf/command_registry" - . "github.com/cloudfoundry/cli/plugin/rpc" - . "github.com/cloudfoundry/cli/plugin/rpc/fake_command" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("calling commands in command_registry", func() { - - _ = FakeCommand1{} //make sure fake_command is imported and self-registered with init() - - var ( - ui *testterm.FakeUI - deps command_registry.Dependency - ) - - BeforeEach(func() { - deps = command_registry.NewDependency() - ui = &testterm.FakeUI{} - deps.Ui = ui - - cmd := command_registry.Commands.FindCommand("fake-non-codegangsta-command") - command_registry.Commands.SetCommand(cmd.SetDependency(deps, true)) - - cmd2 := command_registry.Commands.FindCommand("fake-non-codegangsta-command2") - command_registry.Commands.SetCommand(cmd2.SetDependency(deps, true)) - }) - - It("runs the command requirements", func() { - NewNonCodegangstaRunner().Command([]string{"fake-non-codegangsta-command"}, deps, false) - Expect(ui.Outputs).To(ContainSubstrings([]string{"Requirement executed"})) - }) - - It("calls the command Execute() func", func() { - NewNonCodegangstaRunner().Command([]string{"fake-non-codegangsta-command"}, deps, false) - Expect(ui.Outputs).To(ContainSubstrings([]string{"Command Executed"})) - }) - - It("sets the dependency of the command", func() { - NewNonCodegangstaRunner().Command([]string{"fake-non-codegangsta-command"}, deps, false) - Expect(ui.Outputs).To(ContainSubstrings([]string{"SetDependency() called, pluginCall true"})) - }) - - It("returns an error if any of the requirements fail", func() { - err := NewNonCodegangstaRunner().Command([]string{"fake-non-codegangsta-command2"}, deps, false) - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Error in requirement")) - }) - - It("returns an error if invalid flag is provided", func() { - err := NewNonCodegangstaRunner().Command([]string{"fake-non-codegangsta-command", "-badFlag"}, deps, false) - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Invalid flag: -badFlag")) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/cli_rpc_server.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/cli_rpc_server.go deleted file mode 100644 index 4f51a57..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/cli_rpc_server.go +++ /dev/null @@ -1,428 +0,0 @@ -package rpc - -import ( - "os" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/plugin" - "github.com/cloudfoundry/cli/plugin/models" - "github.com/codegangsta/cli" - - "fmt" - "net" - "net/rpc" - "strconv" -) - -type CliRpcService struct { - listener net.Listener - stopCh chan struct{} - Pinged bool - RpcCmd *CliRpcCmd -} - -type CliRpcCmd struct { - PluginMetadata *plugin.PluginMetadata - coreCommandRunner *cli.App - outputCapture terminal.OutputCapture - terminalOutputSwitch terminal.TerminalOutputSwitch - cliConfig core_config.Repository - repoLocator api.RepositoryLocator - newCmdRunner NonCodegangstaRunner - outputBucket *[]string -} - -func NewRpcService(commandRunner *cli.App, outputCapture terminal.OutputCapture, terminalOutputSwitch terminal.TerminalOutputSwitch, cliConfig core_config.Repository, repoLocator api.RepositoryLocator, newCmdRunner NonCodegangstaRunner) (*CliRpcService, error) { - rpcService := &CliRpcService{ - RpcCmd: &CliRpcCmd{ - PluginMetadata: &plugin.PluginMetadata{}, - coreCommandRunner: commandRunner, - outputCapture: outputCapture, - terminalOutputSwitch: terminalOutputSwitch, - cliConfig: cliConfig, - repoLocator: repoLocator, - newCmdRunner: newCmdRunner, - }, - } - - err := rpc.Register(rpcService.RpcCmd) - if err != nil { - return nil, err - } - - return rpcService, nil -} - -func (cli *CliRpcService) Stop() { - close(cli.stopCh) - cli.listener.Close() -} - -func (cli *CliRpcService) Port() string { - return strconv.Itoa(cli.listener.Addr().(*net.TCPAddr).Port) -} - -func (cli *CliRpcService) Start() error { - var err error - - cli.stopCh = make(chan struct{}) - - cli.listener, err = net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return err - } - - go func() { - for { - conn, err := cli.listener.Accept() - if err != nil { - select { - case <-cli.stopCh: - return - default: - fmt.Println(err) - } - } else { - go rpc.ServeConn(conn) - } - } - }() - - return nil -} - -func (cmd *CliRpcService) SetTheApp(app *cli.App) { - cmd.RpcCmd.coreCommandRunner = app -} - -func (cmd *CliRpcCmd) IsMinCliVersion(version string, retVal *bool) error { - *retVal = cf.Version >= version - return nil -} - -func (cmd *CliRpcCmd) SetPluginMetadata(pluginMetadata plugin.PluginMetadata, retVal *bool) error { - cmd.PluginMetadata = &pluginMetadata - *retVal = true - return nil -} - -func (cmd *CliRpcCmd) DisableTerminalOutput(disable bool, retVal *bool) error { - cmd.terminalOutputSwitch.DisableTerminalOutput(disable) - *retVal = true - return nil -} - -func (cmd *CliRpcCmd) CallCoreCommand(args []string, retVal *bool) error { - defer func() { - recover() - }() - - var err error - cmdRegistry := command_registry.Commands - - cmd.outputBucket = &[]string{} - cmd.outputCapture.SetOutputBucket(cmd.outputBucket) - - if cmdRegistry.CommandExists(args[0]) { - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.Ui = terminal.NewUI(os.Stdin, cmd.outputCapture.(*terminal.TeePrinter)) - - err = cmd.newCmdRunner.Command(args, deps, false) - } else { - //call codegangsta command - err = cmd.coreCommandRunner.Run(append([]string{"CF_NAME"}, args...)) - } - - if err != nil { - *retVal = false - return err - } - - *retVal = true - return nil -} - -func (cmd *CliRpcCmd) GetOutputAndReset(args bool, retVal *[]string) error { - *retVal = *cmd.outputBucket - return nil -} - -func (cmd *CliRpcCmd) GetCurrentOrg(args string, retVal *plugin_models.Organization) error { - retVal.Name = cmd.cliConfig.OrganizationFields().Name - retVal.Guid = cmd.cliConfig.OrganizationFields().Guid - return nil -} - -func (cmd *CliRpcCmd) GetCurrentSpace(args string, retVal *plugin_models.Space) error { - retVal.Name = cmd.cliConfig.SpaceFields().Name - retVal.Guid = cmd.cliConfig.SpaceFields().Guid - - return nil -} - -func (cmd *CliRpcCmd) Username(args string, retVal *string) error { - *retVal = cmd.cliConfig.Username() - - return nil -} - -func (cmd *CliRpcCmd) UserGuid(args string, retVal *string) error { - *retVal = cmd.cliConfig.UserGuid() - - return nil -} - -func (cmd *CliRpcCmd) UserEmail(args string, retVal *string) error { - *retVal = cmd.cliConfig.UserEmail() - - return nil -} - -func (cmd *CliRpcCmd) IsLoggedIn(args string, retVal *bool) error { - *retVal = cmd.cliConfig.IsLoggedIn() - - return nil -} - -func (cmd *CliRpcCmd) IsSSLDisabled(args string, retVal *bool) error { - *retVal = cmd.cliConfig.IsSSLDisabled() - - return nil -} - -func (cmd *CliRpcCmd) HasOrganization(args string, retVal *bool) error { - *retVal = cmd.cliConfig.HasOrganization() - - return nil -} - -func (cmd *CliRpcCmd) HasSpace(args string, retVal *bool) error { - *retVal = cmd.cliConfig.HasSpace() - - return nil -} - -func (cmd *CliRpcCmd) ApiEndpoint(args string, retVal *string) error { - *retVal = cmd.cliConfig.ApiEndpoint() - - return nil -} - -func (cmd *CliRpcCmd) HasAPIEndpoint(args string, retVal *bool) error { - *retVal = cmd.cliConfig.HasAPIEndpoint() - - return nil -} - -func (cmd *CliRpcCmd) ApiVersion(args string, retVal *string) error { - *retVal = cmd.cliConfig.ApiVersion() - - return nil -} - -func (cmd *CliRpcCmd) LoggregatorEndpoint(args string, retVal *string) error { - *retVal = cmd.cliConfig.LoggregatorEndpoint() - - return nil -} - -func (cmd *CliRpcCmd) DopplerEndpoint(args string, retVal *string) error { - *retVal = cmd.cliConfig.DopplerEndpoint() - - return nil -} - -func (cmd *CliRpcCmd) AccessToken(args string, retVal *string) error { - *retVal = cmd.cliConfig.AccessToken() - - return nil -} - -func (cmd *CliRpcCmd) GetApp(appName string, retVal *plugin_models.GetAppModel) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Application = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"app", appName}, deps, true) -} - -func (cmd *CliRpcCmd) GetApps(_ string, retVal *[]plugin_models.GetAppsModel) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.AppsSummary = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"apps"}, deps, true) -} - -func (cmd *CliRpcCmd) GetOrgs(_ string, retVal *[]plugin_models.GetOrgs_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Organizations = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"orgs"}, deps, true) -} - -func (cmd *CliRpcCmd) GetSpaces(_ string, retVal *[]plugin_models.GetSpaces_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Spaces = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"spaces"}, deps, true) -} - -func (cmd *CliRpcCmd) GetServices(_ string, retVal *[]plugin_models.GetServices_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Services = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"services"}, deps, true) -} - -func (cmd *CliRpcCmd) GetOrgUsers(args []string, retVal *[]plugin_models.GetOrgUsers_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.OrgUsers = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command(append([]string{"org-users"}, args...), deps, true) -} - -func (cmd *CliRpcCmd) GetSpaceUsers(args []string, retVal *[]plugin_models.GetSpaceUsers_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.SpaceUsers = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command(append([]string{"space-users"}, args...), deps, true) -} - -func (cmd *CliRpcCmd) GetOrg(orgName string, retVal *plugin_models.GetOrg_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Organization = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"org", orgName}, deps, true) -} - -func (cmd *CliRpcCmd) GetSpace(spaceName string, retVal *plugin_models.GetSpace_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Space = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"space", spaceName}, deps, true) -} - -func (cmd *CliRpcCmd) GetService(serviceInstance string, retVal *plugin_models.GetService_Model) error { - defer func() { - recover() - }() - - deps := command_registry.NewDependency() - - //set deps objs to be the one used by all other codegangsta commands - //once all commands are converted, we can make fresh deps for each command run - deps.Config = cmd.cliConfig - deps.RepoLocator = cmd.repoLocator - deps.PluginModels.Service = retVal - cmd.terminalOutputSwitch.DisableTerminalOutput(true) - deps.Ui = terminal.NewUI(os.Stdin, cmd.terminalOutputSwitch.(*terminal.TeePrinter)) - - return cmd.newCmdRunner.Command([]string{"service", serviceInstance}, deps, true) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/cli_rpc_server_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/cli_rpc_server_test.go deleted file mode 100644 index 1bca7ff..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/cli_rpc_server_test.go +++ /dev/null @@ -1,810 +0,0 @@ -package rpc_test - -import ( - "net" - "net/rpc" - "os" - "time" - - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/cf/terminal/fakes" - "github.com/cloudfoundry/cli/plugin" - "github.com/cloudfoundry/cli/plugin/models" - . "github.com/cloudfoundry/cli/plugin/rpc" - cmdRunner "github.com/cloudfoundry/cli/plugin/rpc" - . "github.com/cloudfoundry/cli/plugin/rpc/fake_command" - fakeRunner "github.com/cloudfoundry/cli/plugin/rpc/fakes" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - io_helpers "github.com/cloudfoundry/cli/testhelpers/io" - "github.com/codegangsta/cli" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Server", func() { - - _ = FakeCommand1{} //make sure fake_command is imported and self-registered with init() - - var ( - err error - client *rpc.Client - rpcService *CliRpcService - ) - - AfterEach(func() { - if client != nil { - client.Close() - } - }) - - BeforeEach(func() { - rpc.DefaultServer = rpc.NewServer() - }) - - Describe(".NewRpcService", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - }) - - It("returns an err of another Rpc process is already registered", func() { - _, err := NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe(".Stop", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("shuts down the rpc server", func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).To(HaveOccurred()) - }) - }) - - Describe(".Start", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - It("Start an Rpc server for communication", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - }) - }) - - Describe(".IsMinCliVersion()", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - It("returns true if cli version is >= to required version", func() { - cf.Version = "2.0.0" - - var result bool - err = client.Call("CliRpcCmd.IsMinCliVersion", "1.0.0", &result) - Expect(err).ToNot(HaveOccurred()) - - Expect(result).To(BeTrue()) - }) - - It("returns true if cli version is >= to required version", func() { - cf.Version = "2.0.0" - - var result bool - err = client.Call("CliRpcCmd.IsMinCliVersion", "2.0.6", &result) - Expect(err).ToNot(HaveOccurred()) - - Expect(result).To(BeFalse()) - }) - - It("returns true if cli version is 'BUILT_FROM_SOURCE'", func() { - cf.Version = "BUILT_FROM_SOURCE" - - var result bool - err = client.Call("CliRpcCmd.IsMinCliVersion", "12.0.6", &result) - Expect(err).ToNot(HaveOccurred()) - - Expect(result).To(BeTrue()) - }) - }) - - Describe(".SetPluginMetadata", func() { - var ( - metadata *plugin.PluginMetadata - ) - - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - metadata = &plugin.PluginMetadata{ - Name: "foo", - Commands: []plugin.Command{ - {Name: "cmd_1", HelpText: "cm 1 help text"}, - {Name: "cmd_2", HelpText: "cmd 2 help text"}, - }, - } - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - It("set the rpc command's Return Data", func() { - var success bool - err = client.Call("CliRpcCmd.SetPluginMetadata", metadata, &success) - - Expect(err).ToNot(HaveOccurred()) - Expect(success).To(BeTrue()) - Expect(rpcService.RpcCmd.PluginMetadata).To(Equal(metadata)) - }) - }) - - Describe(".GetOutputAndReset", func() { - Context("success", func() { - BeforeEach(func() { - outputCapture := terminal.NewTeePrinter() - rpcService, err = NewRpcService(nil, outputCapture, nil, nil, api.RepositoryLocator{}, cmdRunner.NewNonCodegangstaRunner()) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - It("should return the logs from the output capture", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - success := false - - oldStd := os.Stdout - os.Stdout = nil - client.Call("CliRpcCmd.CallCoreCommand", []string{"fake-non-codegangsta-command"}, &success) - Expect(success).To(BeTrue()) - os.Stdout = oldStd - - var output []string - client.Call("CliRpcCmd.GetOutputAndReset", false, &output) - - Expect(output).To(Equal([]string{"Requirement executed\n", "Command Executed\n"})) - }) - }) - }) - - Describe("disabling terminal output", func() { - var terminalOutputSwitch *fakes.FakeTerminalOutputSwitch - - BeforeEach(func() { - terminalOutputSwitch = &fakes.FakeTerminalOutputSwitch{} - rpcService, err = NewRpcService(nil, nil, terminalOutputSwitch, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("should disable the terminal output switch", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var success bool - err = client.Call("CliRpcCmd.DisableTerminalOutput", true, &success) - - Expect(err).ToNot(HaveOccurred()) - Expect(success).To(BeTrue()) - Expect(terminalOutputSwitch.DisableTerminalOutputCallCount()).To(Equal(1)) - Expect(terminalOutputSwitch.DisableTerminalOutputArgsForCall(0)).To(Equal(true)) - }) - }) - - Describe("Plugin API", func() { - - var runner *fakeRunner.FakeNonCodegangstaRunner - - BeforeEach(func() { - outputCapture := terminal.NewTeePrinter() - terminalOutputSwitch := terminal.NewTeePrinter() - - runner = &fakeRunner.FakeNonCodegangstaRunner{} - rpcService, err = NewRpcService(nil, outputCapture, terminalOutputSwitch, nil, api.RepositoryLocator{}, runner) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - It("calls GetApp() with 'app' as argument", func() { - result := plugin_models.GetAppModel{} - err = client.Call("CliRpcCmd.GetApp", "fake-app", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("app")) - Expect(arg1[1]).To(Equal("fake-app")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetOrg() with 'my-org' as argument", func() { - result := plugin_models.GetOrg_Model{} - err = client.Call("CliRpcCmd.GetOrg", "my-org", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("org")) - Expect(arg1[1]).To(Equal("my-org")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetSpace() with 'my-space' as argument", func() { - result := plugin_models.GetSpace_Model{} - err = client.Call("CliRpcCmd.GetSpace", "my-space", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("space")) - Expect(arg1[1]).To(Equal("my-space")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetApps() ", func() { - result := []plugin_models.GetAppsModel{} - err = client.Call("CliRpcCmd.GetApps", "", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("apps")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetOrgs() ", func() { - result := []plugin_models.GetOrgs_Model{} - err = client.Call("CliRpcCmd.GetOrgs", "", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("orgs")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetServices() ", func() { - result := []plugin_models.GetServices_Model{} - err = client.Call("CliRpcCmd.GetServices", "", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("services")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetSpaces() ", func() { - result := []plugin_models.GetSpaces_Model{} - err = client.Call("CliRpcCmd.GetSpaces", "", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("spaces")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetOrgUsers() ", func() { - result := []plugin_models.GetOrgUsers_Model{} - args := []string{"orgName1", "-a"} - err = client.Call("CliRpcCmd.GetOrgUsers", args, &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("org-users")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetSpaceUsers() ", func() { - result := []plugin_models.GetSpaceUsers_Model{} - args := []string{"orgName1", "spaceName1"} - err = client.Call("CliRpcCmd.GetSpaceUsers", args, &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("space-users")) - Expect(pluginApiCall).To(BeTrue()) - }) - - It("calls GetService() with 'serviceInstance' as argument", func() { - result := plugin_models.GetService_Model{} - err = client.Call("CliRpcCmd.GetService", "fake-service-instance", &result) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - arg1, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(arg1[0]).To(Equal("service")) - Expect(arg1[1]).To(Equal("fake-service-instance")) - Expect(pluginApiCall).To(BeTrue()) - }) - - }) - - Describe(".CallCoreCommand", func() { - var runner *fakeRunner.FakeNonCodegangstaRunner - - Context("success", func() { - BeforeEach(func() { - app := &cli.App{ - Commands: []cli.Command{ - { - Name: "test_cmd", - Description: "test_cmd description", - Usage: "test_cmd usage", - Action: func(context *cli.Context) { - return - }, - }, - }, - } - - outputCapture := terminal.NewTeePrinter() - runner = &fakeRunner.FakeNonCodegangstaRunner{} - - rpcService, err = NewRpcService(app, outputCapture, nil, nil, api.RepositoryLocator{}, runner) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - It("is able to call a non-codegangsta command", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var success bool - err = client.Call("CliRpcCmd.CallCoreCommand", []string{"fake-non-codegangsta-command3"}, &success) - - Expect(err).ToNot(HaveOccurred()) - Expect(runner.CommandCallCount()).To(Equal(1)) - - _, _, pluginApiCall := runner.CommandArgsForCall(0) - Expect(pluginApiCall).To(BeFalse()) - }) - - It("calls the code gangsta cli App command", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var success bool - err = client.Call("CliRpcCmd.CallCoreCommand", []string{"test_cmd"}, &success) - - Expect(err).ToNot(HaveOccurred()) - Expect(success).To(BeTrue()) - }) - }) - - Describe("CLI Config object methods", func() { - var ( - config core_config.Repository - ) - - BeforeEach(func() { - config = testconfig.NewRepositoryWithDefaults() - }) - - AfterEach(func() { - rpcService.Stop() - - //give time for server to stop - time.Sleep(50 * time.Millisecond) - }) - - Context(".GetCurrentOrg", func() { - BeforeEach(func() { - config.SetOrganizationFields(models.OrganizationFields{ - Guid: "test-guid", - Name: "test-org", - QuotaDefinition: models.QuotaFields{ - Guid: "guid123", - Name: "quota123", - MemoryLimit: 128, - InstanceMemoryLimit: 16, - RoutesLimit: 5, - ServicesLimit: 6, - NonBasicServicesAllowed: true, - }, - }) - - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("populates the plugin Organization object with the current org settings in config", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var org plugin_models.Organization - err = client.Call("CliRpcCmd.GetCurrentOrg", "", &org) - - Expect(err).ToNot(HaveOccurred()) - Expect(org.Name).To(Equal("test-org")) - Expect(org.Guid).To(Equal("test-guid")) - }) - }) - - Context(".GetCurrentSpace", func() { - BeforeEach(func() { - config.SetSpaceFields(models.SpaceFields{ - Guid: "space-guid", - Name: "space-name", - }) - - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("populates the plugin Space object with the current space settings in config", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var space plugin_models.Space - err = client.Call("CliRpcCmd.GetCurrentSpace", "", &space) - - Expect(err).ToNot(HaveOccurred()) - Expect(space.Name).To(Equal("space-name")) - Expect(space.Guid).To(Equal("space-guid")) - }) - }) - - Context(".Username, .UserGuid, .UserEmail", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns username, user guid and user email", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result string - err = client.Call("CliRpcCmd.Username", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("my-user")) - - err = client.Call("CliRpcCmd.UserGuid", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("my-user-guid")) - - err = client.Call("CliRpcCmd.UserEmail", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("my-user-email")) - }) - }) - - Context(".IsSSLDisabled", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns the IsSSLDisabled setting in config", func() { - config.SetSSLDisabled(true) - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result bool - err = client.Call("CliRpcCmd.IsSSLDisabled", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(BeTrue()) - }) - }) - - Context(".IsLoggedIn", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns the IsLoggedIn setting in config", func() { - config.SetAccessToken("Logged-In-Token") - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result bool - err = client.Call("CliRpcCmd.IsLoggedIn", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(BeTrue()) - }) - }) - - Context(".HasOrganization and .HasSpace ", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns the HasOrganization() and HasSpace() setting in config", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result bool - err = client.Call("CliRpcCmd.HasOrganization", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(BeTrue()) - - err = client.Call("CliRpcCmd.HasSpace", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(BeTrue()) - }) - }) - - Context(".LoggregatorEndpoint and .DopplerEndpoint ", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns the LoggregatorEndpoint() and DopplerEndpoint() setting in config", func() { - config.SetLoggregatorEndpoint("loggregator-endpoint-sample") - config.SetDopplerEndpoint("doppler-endpoint-sample") - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result string - err = client.Call("CliRpcCmd.LoggregatorEndpoint", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("loggregator-endpoint-sample")) - - err = client.Call("CliRpcCmd.DopplerEndpoint", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("doppler-endpoint-sample")) - }) - }) - - Context(".ApiEndpoint, .ApiVersion and .HasAPIEndpoint", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns the ApiEndpoint(), ApiVersion() and HasAPIEndpoint() setting in config", func() { - config.SetApiVersion("v1.1.1") - config.SetApiEndpoint("www.fake-domain.com") - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result string - err = client.Call("CliRpcCmd.ApiEndpoint", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("www.fake-domain.com")) - - err = client.Call("CliRpcCmd.ApiVersion", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("v1.1.1")) - - var exists bool - err = client.Call("CliRpcCmd.HasAPIEndpoint", "", &exists) - Expect(err).ToNot(HaveOccurred()) - Expect(exists).To(BeTrue()) - - }) - }) - - Context(".AccessToken", func() { - BeforeEach(func() { - rpcService, err = NewRpcService(nil, nil, nil, config, api.RepositoryLocator{}, nil) - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns the LoggregatorEndpoint() and DopplerEndpoint() setting in config", func() { - config.SetAccessToken("fake-access-token") - - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var result string - err = client.Call("CliRpcCmd.AccessToken", "", &result) - Expect(err).ToNot(HaveOccurred()) - Expect(result).To(Equal("fake-access-token")) - }) - }) - - }) - - Context("fail", func() { - BeforeEach(func() { - app := &cli.App{ - Commands: []cli.Command{ - { - Name: "test_cmd", - Description: "test_cmd description", - Usage: "test_cmd usage", - Action: func(context *cli.Context) { - panic("ERROR") - }, - }, - }, - } - outputCapture := &fakes.FakeOutputCapture{} - rpcService, err = NewRpcService(app, outputCapture, nil, nil, api.RepositoryLocator{}, nil) - Expect(err).ToNot(HaveOccurred()) - - err := rpcService.Start() - Expect(err).ToNot(HaveOccurred()) - - pingCli(rpcService.Port()) - }) - - It("returns false in success if the command cannot be found", func() { - io_helpers.CaptureOutput(func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var success bool - err = client.Call("CliRpcCmd.CallCoreCommand", []string{"not_a_cmd"}, &success) - Expect(success).To(BeFalse()) - Expect(err).ToNot(HaveOccurred()) - }) - }) - - It("returns an error if a command cannot parse provided flags", func() { - io_helpers.CaptureOutput(func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var success bool - err = client.Call("CliRpcCmd.CallCoreCommand", []string{"test_cmd", "-invalid_flag"}, &success) - - Expect(err).To(HaveOccurred()) - Expect(success).To(BeFalse()) - }) - }) - - It("recovers from a panic from any core command", func() { - client, err = rpc.Dial("tcp", "127.0.0.1:"+rpcService.Port()) - Expect(err).ToNot(HaveOccurred()) - - var success bool - err = client.Call("CliRpcCmd.CallCoreCommand", []string{"test_cmd"}, &success) - - Expect(success).To(BeFalse()) - }) - }) - }) -}) - -func pingCli(port string) { - var connErr error - var conn net.Conn - for i := 0; i < 5; i++ { - conn, connErr = net.Dial("tcp", "127.0.0.1:"+port) - if connErr != nil { - time.Sleep(200 * time.Millisecond) - } else { - conn.Close() - break - } - } - Expect(connErr).ToNot(HaveOccurred()) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command1.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command1.go deleted file mode 100644 index 6421f6f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command1.go +++ /dev/null @@ -1,56 +0,0 @@ -package fake_command - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" -) - -type FakeCommand1 struct { - Data string - req fakeReq - ui terminal.UI -} - -func init() { - command_registry.Register(FakeCommand1{Data: "FakeCommand1 data", req: fakeReq{ui: nil}}) -} - -func (cmd FakeCommand1) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "fake-non-codegangsta-command", - Description: "Description for fake-command", - Usage: "Usage of fake-command", - } -} - -func (cmd FakeCommand1) Requirements(_ requirements.Factory, _ flags.FlagContext) (reqs []requirements.Requirement, err error) { - return []requirements.Requirement{cmd.req}, nil -} - -func (cmd FakeCommand1) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - if cmd.ui != nil { - cmd.ui.Say("SetDependency() called, pluginCall " + fmt.Sprintf("%t", pluginCall)) - } - - cmd.req.ui = deps.Ui - cmd.ui = deps.Ui - - return cmd -} - -func (cmd FakeCommand1) Execute(c flags.FlagContext) { - cmd.ui.Say("Command Executed") -} - -type fakeReq struct { - ui terminal.UI -} - -func (f fakeReq) Execute() bool { - f.ui.Say("Requirement executed") - return true -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command2.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command2.go deleted file mode 100644 index e38fb0e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command2.go +++ /dev/null @@ -1,53 +0,0 @@ -package fake_command - -import ( - "fmt" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/cf/terminal" - "github.com/cloudfoundry/cli/flags" -) - -type FakeCommand2 struct { - Data string - req fakeReq2 - ui terminal.UI -} - -func init() { - command_registry.Register(FakeCommand2{Data: "FakeCommand2 data", req: fakeReq2{}}) -} - -func (cmd FakeCommand2) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "fake-non-codegangsta-command2", - Description: "Description for fake-command2 with bad requirement", - Usage: "Usage of fake-command", - } -} - -func (cmd FakeCommand2) Requirements(_ requirements.Factory, _ flags.FlagContext) (reqs []requirements.Requirement, err error) { - return []requirements.Requirement{cmd.req}, nil -} - -func (cmd FakeCommand2) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - cmd.req.ui = deps.Ui - cmd.ui = deps.Ui - cmd.ui.Say("SetDependency() called, pluginCall " + fmt.Sprintf("%t", pluginCall)) - - return cmd -} - -func (cmd FakeCommand2) Execute(c flags.FlagContext) { - cmd.ui.Say("Command Executed") -} - -type fakeReq2 struct { - ui terminal.UI -} - -func (f fakeReq2) Execute() bool { - f.ui.Say("Requirement executed and failed") - return false -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command3.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command3.go deleted file mode 100644 index 7164aa7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fake_command/fake_command3.go +++ /dev/null @@ -1,34 +0,0 @@ -package fake_command - -import ( - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/cf/requirements" - "github.com/cloudfoundry/cli/flags" -) - -type FakeCommand3 struct { - Data string -} - -func init() { - command_registry.Register(FakeCommand3{Data: "FakeCommand3 data"}) -} - -func (cmd FakeCommand3) MetaData() command_registry.CommandMetadata { - return command_registry.CommandMetadata{ - Name: "fake-non-codegangsta-command3", - Description: "Description for fake-command3", - Usage: "Usage of fake-command3", - } -} - -func (cmd FakeCommand3) Requirements(_ requirements.Factory, _ flags.FlagContext) (reqs []requirements.Requirement, err error) { - return []requirements.Requirement{}, nil -} - -func (cmd FakeCommand3) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { - return cmd -} - -func (cmd FakeCommand3) Execute(c flags.FlagContext) { -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fakes/fake_non_codegangsta_runner.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fakes/fake_non_codegangsta_runner.go deleted file mode 100644 index 7aa9c0c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/fakes/fake_non_codegangsta_runner.go +++ /dev/null @@ -1,58 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/plugin/rpc" -) - -type FakeNonCodegangstaRunner struct { - CommandStub func([]string, command_registry.Dependency, bool) error - commandMutex sync.RWMutex - commandArgsForCall []struct { - arg1 []string - arg2 command_registry.Dependency - arg3 bool - } - commandReturns struct { - result1 error - } -} - -func (fake *FakeNonCodegangstaRunner) Command(arg1 []string, arg2 command_registry.Dependency, arg3 bool) error { - fake.commandMutex.Lock() - fake.commandArgsForCall = append(fake.commandArgsForCall, struct { - arg1 []string - arg2 command_registry.Dependency - arg3 bool - }{arg1, arg2, arg3}) - fake.commandMutex.Unlock() - if fake.CommandStub != nil { - return fake.CommandStub(arg1, arg2, arg3) - } else { - return fake.commandReturns.result1 - } -} - -func (fake *FakeNonCodegangstaRunner) CommandCallCount() int { - fake.commandMutex.RLock() - defer fake.commandMutex.RUnlock() - return len(fake.commandArgsForCall) -} - -func (fake *FakeNonCodegangstaRunner) CommandArgsForCall(i int) ([]string, command_registry.Dependency, bool) { - fake.commandMutex.RLock() - defer fake.commandMutex.RUnlock() - return fake.commandArgsForCall[i].arg1, fake.commandArgsForCall[i].arg2, fake.commandArgsForCall[i].arg3 -} - -func (fake *FakeNonCodegangstaRunner) CommandReturns(result1 error) { - fake.CommandStub = nil - fake.commandReturns = struct { - result1 error - }{result1} -} - -var _ rpc.NonCodegangstaRunner = new(FakeNonCodegangstaRunner) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/rpc_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/rpc_suite_test.go deleted file mode 100644 index 094a948..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/rpc_suite_test.go +++ /dev/null @@ -1,16 +0,0 @@ -package rpc_test - -import ( - "github.com/cloudfoundry/cli/plugin/rpc" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -var rpcService *rpc.CliRpcService - -func TestRpc(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Rpc Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/run_plugin.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/run_plugin.go deleted file mode 100644 index 9d89784..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/rpc/run_plugin.go +++ /dev/null @@ -1,40 +0,0 @@ -package rpc - -import ( - "os" - "os/exec" - - "github.com/cloudfoundry/cli/cf/configuration/plugin_config" -) - -func RunMethodIfExists(rpcService *CliRpcService, args []string, pluginList map[string]plugin_config.PluginMetadata) bool { - for _, metadata := range pluginList { - for _, command := range metadata.Commands { - if command.Name == args[0] || command.Alias == args[0] { - args[0] = command.Name - - rpcService.Start() - defer rpcService.Stop() - - pluginArgs := append([]string{rpcService.Port()}, args...) - - cmd := exec.Command(metadata.Location, pluginArgs...) - cmd.Stdout = os.Stdout - cmd.Stdin = os.Stdin - - defer stopPlugin(cmd) - err := cmd.Run() - if err != nil { - os.Exit(1) - } - return true - } - } - } - return false -} - -func stopPlugin(plugin *exec.Cmd) { - plugin.Process.Kill() - plugin.Wait() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/context.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/context.go deleted file mode 100644 index 7bf8b1d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/context.go +++ /dev/null @@ -1,78 +0,0 @@ -package commands - -import ( - "flag" - "fmt" - "strings" - "time" - - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/app" - "github.com/cloudfoundry/cli/cf/command_factory" - "github.com/cloudfoundry/cli/cf/command_runner" - testPluginConfig "github.com/cloudfoundry/cli/cf/configuration/plugin_config/fakes" - "github.com/cloudfoundry/cli/cf/manifest" - "github.com/cloudfoundry/cli/cf/net" - "github.com/cloudfoundry/cli/plugin/rpc" - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - "github.com/codegangsta/cli" -) - -func NewContext(cmdName string, args []string) *cli.Context { - targetCommand := findCommand(cmdName) - - flagSet := new(flag.FlagSet) - for i, _ := range targetCommand.Flags { - targetCommand.Flags[i].Apply(flagSet) - } - - // move all flag args to the beginning of the list, go requires them all upfront - if targetCommand.SkipFlagParsing == false { - firstFlagIndex := -1 - for index, arg := range args { - if strings.HasPrefix(arg, "-") { - firstFlagIndex = index - break - } - } - if firstFlagIndex > 0 { - flags := args[firstFlagIndex:] - args := args[0:firstFlagIndex] - flagSet.Parse(append(flags, args...)) - } else { - flagSet.Parse(args[0:]) - } - } else { - flagSet.Parse(args[0:]) - } - - return cli.NewContext(cli.NewApp(), flagSet, new(flag.FlagSet)) -} - -func findCommand(cmdName string) (cmd cli.Command) { - fakeUI := &testterm.FakeUI{} - configRepo := testconfig.NewRepository() - pluginConfig := &testPluginConfig.FakePluginConfiguration{} - manifestRepo := manifest.NewManifestDiskRepository() - apiRepoLocator := api.NewRepositoryLocator(configRepo, map[string]net.Gateway{ - "auth": net.NewUAAGateway(configRepo, fakeUI), - "cloud-controller": net.NewCloudControllerGateway(configRepo, time.Now, fakeUI), - "uaa": net.NewUAAGateway(configRepo, fakeUI), - }) - - rpcService, _ := rpc.NewRpcService(nil, nil, nil, nil, api.RepositoryLocator{}, nil) - cmdFactory := command_factory.NewFactory(fakeUI, configRepo, manifestRepo, apiRepoLocator, pluginConfig, rpcService) - requirementsFactory := &testreq.FakeReqFactory{} - cmdRunner := command_runner.NewRunner(cmdFactory, requirementsFactory, fakeUI) - myApp := app.NewApp(cmdRunner, cmdFactory.CommandMetadatas()...) - - for _, cmd := range myApp.Commands { - if cmd.Name == cmdName { - return cmd - } - } - panic(fmt.Sprintf("command %s does not exist", cmdName)) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_api_endpoint_setter.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_api_endpoint_setter.go deleted file mode 100644 index 13f80f7..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_api_endpoint_setter.go +++ /dev/null @@ -1,10 +0,0 @@ -package commands - -type FakeApiEndpointSetter struct { - SetEndpoint string -} - -func (setter *FakeApiEndpointSetter) SetApiEndpoint(endpoint string) { - setter.SetEndpoint = endpoint - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_app_binder.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_app_binder.go deleted file mode 100644 index b05c02d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_app_binder.go +++ /dev/null @@ -1,21 +0,0 @@ -package commands - -import "github.com/cloudfoundry/cli/cf/models" - -type FakeAppBinder struct { - AppsToBind []models.Application - InstancesToBindTo []models.ServiceInstance - Params map[string]interface{} - - BindApplicationReturns struct { - Error error - } -} - -func (binder *FakeAppBinder) BindApplication(app models.Application, service models.ServiceInstance, paramsMap map[string]interface{}) error { - binder.AppsToBind = append(binder.AppsToBind, app) - binder.InstancesToBindTo = append(binder.InstancesToBindTo, service) - binder.Params = paramsMap - - return binder.BindApplicationReturns.Error -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_app_displayer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_app_displayer.go deleted file mode 100644 index bcdc7ea..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_app_displayer.go +++ /dev/null @@ -1,15 +0,0 @@ -package commands - -import ( - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeAppDisplayer struct { - AppToDisplay models.Application - OrgName string - SpaceName string -} - -func (displayer *FakeAppDisplayer) ShowApp(app models.Application, orgName, spaceName string) { - displayer.AppToDisplay = app -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_restarter.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_restarter.go deleted file mode 100644 index bc801ce..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_restarter.go +++ /dev/null @@ -1,46 +0,0 @@ -// This file was generated by counterfeiter -package commands - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeApplicationRestarter struct { - ApplicationRestartStub func(app models.Application, orgName string, spaceName string) - applicationRestartMutex sync.RWMutex - applicationRestartArgsForCall []struct { - arg1 models.Application - arg2 string - arg3 string - } -} - -func (fake *FakeApplicationRestarter) ApplicationRestart(arg1 models.Application, arg2 string, arg3 string) { - fake.applicationRestartMutex.Lock() - defer fake.applicationRestartMutex.Unlock() - fake.applicationRestartArgsForCall = append(fake.applicationRestartArgsForCall, struct { - arg1 models.Application - arg2 string - arg3 string - }{arg1, arg2, arg3}) - if fake.ApplicationRestartStub != nil { - fake.ApplicationRestartStub(arg1, arg2, arg3) - } -} - -func (fake *FakeApplicationRestarter) ApplicationRestartCallCount() int { - fake.applicationRestartMutex.RLock() - defer fake.applicationRestartMutex.RUnlock() - return len(fake.applicationRestartArgsForCall) -} - -func (fake *FakeApplicationRestarter) ApplicationRestartArgsForCall(i int) (models.Application, string, string) { - fake.applicationRestartMutex.RLock() - defer fake.applicationRestartMutex.RUnlock() - return fake.applicationRestartArgsForCall[i].arg1, fake.applicationRestartArgsForCall[i].arg2, fake.applicationRestartArgsForCall[i].arg3 -} - -var _ ApplicationRestarter = new(FakeApplicationRestarter) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_starter.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_starter.go deleted file mode 100644 index b57172f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_starter.go +++ /dev/null @@ -1,88 +0,0 @@ -// This file was generated by counterfeiter -package commands - -import ( - "sync" - - "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeApplicationStarter struct { - SetStartTimeoutInSecondsStub func(timeout int) - setStartTimeoutInSecondsMutex sync.RWMutex - setStartTimeoutInSecondsArgsForCall []struct { - timeout int - } - ApplicationStartStub func(app models.Application, orgName string, spaceName string) (updatedApp models.Application, err error) - applicationStartMutex sync.RWMutex - applicationStartArgsForCall []struct { - app models.Application - orgName string - spaceName string - } - applicationStartReturns struct { - result1 models.Application - result2 error - } -} - -func (fake *FakeApplicationStarter) SetStartTimeoutInSeconds(timeout int) { - fake.setStartTimeoutInSecondsMutex.Lock() - fake.setStartTimeoutInSecondsArgsForCall = append(fake.setStartTimeoutInSecondsArgsForCall, struct { - timeout int - }{timeout}) - fake.setStartTimeoutInSecondsMutex.Unlock() - if fake.SetStartTimeoutInSecondsStub != nil { - fake.SetStartTimeoutInSecondsStub(timeout) - } -} - -func (fake *FakeApplicationStarter) SetStartTimeoutInSecondsCallCount() int { - fake.setStartTimeoutInSecondsMutex.RLock() - defer fake.setStartTimeoutInSecondsMutex.RUnlock() - return len(fake.setStartTimeoutInSecondsArgsForCall) -} - -func (fake *FakeApplicationStarter) SetStartTimeoutInSecondsArgsForCall(i int) int { - fake.setStartTimeoutInSecondsMutex.RLock() - defer fake.setStartTimeoutInSecondsMutex.RUnlock() - return fake.setStartTimeoutInSecondsArgsForCall[i].timeout -} - -func (fake *FakeApplicationStarter) ApplicationStart(app models.Application, orgName string, spaceName string) (updatedApp models.Application, err error) { - fake.applicationStartMutex.Lock() - fake.applicationStartArgsForCall = append(fake.applicationStartArgsForCall, struct { - app models.Application - orgName string - spaceName string - }{app, orgName, spaceName}) - fake.applicationStartMutex.Unlock() - if fake.ApplicationStartStub != nil { - return fake.ApplicationStartStub(app, orgName, spaceName) - } else { - return fake.applicationStartReturns.result1, fake.applicationStartReturns.result2 - } -} - -func (fake *FakeApplicationStarter) ApplicationStartCallCount() int { - fake.applicationStartMutex.RLock() - defer fake.applicationStartMutex.RUnlock() - return len(fake.applicationStartArgsForCall) -} - -func (fake *FakeApplicationStarter) ApplicationStartArgsForCall(i int) (models.Application, string, string) { - fake.applicationStartMutex.RLock() - defer fake.applicationStartMutex.RUnlock() - return fake.applicationStartArgsForCall[i].app, fake.applicationStartArgsForCall[i].orgName, fake.applicationStartArgsForCall[i].spaceName -} - -func (fake *FakeApplicationStarter) ApplicationStartReturns(result1 models.Application, result2 error) { - fake.ApplicationStartStub = nil - fake.applicationStartReturns = struct { - result1 models.Application - result2 error - }{result1, result2} -} - -var _ application.ApplicationStarter = new(FakeApplicationStarter) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_stopper.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_stopper.go deleted file mode 100644 index 85dfd2f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_application_stopper.go +++ /dev/null @@ -1,59 +0,0 @@ -// This file was generated by counterfeiter -package commands - -import ( - "sync" - - . "github.com/cloudfoundry/cli/cf/commands/application" - "github.com/cloudfoundry/cli/cf/models" -) - -type FakeApplicationStopper struct { - ApplicationStopStub func(app models.Application, orgName string, spaceName string) (updatedApp models.Application, err error) - applicationStopMutex sync.RWMutex - applicationStopArgsForCall []struct { - arg1 models.Application - arg2 string - arg3 string - } - applicationStopReturns struct { - result1 models.Application - result2 error - } -} - -func (fake *FakeApplicationStopper) ApplicationStop(arg1 models.Application, arg2 string, arg3 string) (updatedApp models.Application, err error) { - fake.applicationStopMutex.Lock() - defer fake.applicationStopMutex.Unlock() - fake.applicationStopArgsForCall = append(fake.applicationStopArgsForCall, struct { - arg1 models.Application - arg2 string - arg3 string - }{arg1, arg2, arg3}) - if fake.ApplicationStopStub != nil { - return fake.ApplicationStopStub(arg1, arg2, arg3) - } else { - return fake.applicationStopReturns.result1, fake.applicationStopReturns.result2 - } -} - -func (fake *FakeApplicationStopper) ApplicationStopCallCount() int { - fake.applicationStopMutex.RLock() - defer fake.applicationStopMutex.RUnlock() - return len(fake.applicationStopArgsForCall) -} - -func (fake *FakeApplicationStopper) ApplicationStopArgsForCall(i int) (models.Application, string, string) { - fake.applicationStopMutex.RLock() - defer fake.applicationStopMutex.RUnlock() - return fake.applicationStopArgsForCall[i].arg1, fake.applicationStopArgsForCall[i].arg2, fake.applicationStopArgsForCall[i].arg3 -} - -func (fake *FakeApplicationStopper) ApplicationStopReturns(result1 models.Application, result2 error) { - fake.applicationStopReturns = struct { - result1 models.Application - result2 error - }{result1, result2} -} - -var _ ApplicationStopper = new(FakeApplicationStopper) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_route_creator.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_route_creator.go deleted file mode 100644 index 69adaa5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/fake_route_creator.go +++ /dev/null @@ -1,18 +0,0 @@ -package commands - -import "github.com/cloudfoundry/cli/cf/models" - -type FakeRouteCreator struct { - CreateRouteHostname string - CreateRouteDomainFields models.DomainFields - CreateRouteSpaceFields models.SpaceFields - ReservedRoute models.Route -} - -func (cmd *FakeRouteCreator) CreateRoute(hostName string, domain models.DomainFields, space models.SpaceFields) (reservedRoute models.Route, apiErr error) { - cmd.CreateRouteHostname = hostName - cmd.CreateRouteDomainFields = domain - cmd.CreateRouteSpaceFields = space - reservedRoute = cmd.ReservedRoute - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/runner.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/runner.go deleted file mode 100644 index 1c72008..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/commands/runner.go +++ /dev/null @@ -1,112 +0,0 @@ -package commands - -import ( - "fmt" - "os" - - "github.com/cloudfoundry/cli/cf/command" - "github.com/cloudfoundry/cli/cf/command_registry" - "github.com/cloudfoundry/cli/flags" - testreq "github.com/cloudfoundry/cli/testhelpers/requirements" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" -) - -type RunCommandResult int - -const ( - RunCommandResultSuccess = iota - RunCommandResultFailed = iota - RunCommandResultRequirementsFailed = iota -) - -func RunCommand(cmd command.Command, args []string, requirementsFactory *testreq.FakeReqFactory) (passedRequirements bool) { - context := NewContext(cmd.Metadata().Name, args) - - defer func() { - errMsg := recover() - - if errMsg != nil && errMsg != testterm.QuietPanic { - panic(errMsg) - } - }() - - requirements, err := cmd.GetRequirements(requirementsFactory, context) - if err != nil { - return - } - - for _, requirement := range requirements { - success := requirement.Execute() - if !success { - return - } - } - - passedRequirements = true - cmd.Run(context) - - return -} - -func RunCliCommand(cmd command_registry.Command, args []string, requirementsFactory *testreq.FakeReqFactory) bool { - context := flags.NewFlagContext(cmd.MetaData().Flags) - err := context.Parse(args...) - if err != nil { - fmt.Println("ERROR:", err) - os.Exit(1) - } - - defer func() { - errMsg := recover() - - if errMsg != nil && errMsg != testterm.QuietPanic { - panic(errMsg) - } - }() - requirements, err := cmd.Requirements(requirementsFactory, context) - if err != nil { - return false - } - - for _, requirement := range requirements { - if !requirement.Execute() { - return false - } - } - - cmd.Execute(context) - - return true -} - -func RunCommandMoreBetter(cmd command.Command, requirementsFactory *testreq.FakeReqFactory, args ...string) (result RunCommandResult) { - defer func() { - errMsg := recover() - if errMsg == nil { - return - } - - if errMsg != nil && errMsg != testterm.QuietPanic { - panic(errMsg) - } - - result = RunCommandResultFailed - }() - - context := NewContext(cmd.Metadata().Name, args) - requirements, err := cmd.GetRequirements(requirementsFactory, context) - if err != nil { - return RunCommandResultRequirementsFailed - } - - for _, requirement := range requirements { - success := requirement.Execute() - if !success { - return RunCommandResultRequirementsFailed - } - } - - cmd.Run(context) - - return RunCommandResultSuccess -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/access_token.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/access_token.go deleted file mode 100644 index 2d57b7b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/access_token.go +++ /dev/null @@ -1,19 +0,0 @@ -package configuration - -import ( - "encoding/base64" - "encoding/json" - "fmt" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" -) - -func EncodeAccessToken(tokenInfo core_config.TokenInfo) (accessToken string, err error) { - tokenInfoBytes, err := json.Marshal(tokenInfo) - if err != nil { - return - } - encodedTokenInfo := base64.StdEncoding.EncodeToString(tokenInfoBytes) - accessToken = fmt.Sprintf("BEARER my_access_token.%s.baz", encodedTokenInfo) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/fake_config_persistance.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/fake_config_persistance.go deleted file mode 100644 index 81d091b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/fake_config_persistance.go +++ /dev/null @@ -1,45 +0,0 @@ -package configuration - -import ( - "github.com/cloudfoundry/cli/cf/configuration" - "github.com/cloudfoundry/cli/cf/configuration/core_config" -) - -type FakePersistor struct { - LoadReturns struct { - Data *core_config.Data - Err error - } - - SaveArgs struct { - Data *core_config.Data - } - SaveReturns struct { - Err error - } -} - -func NewFakePersistor() *FakePersistor { - return &FakePersistor{} -} - -func (fp *FakePersistor) Load(data configuration.DataInterface) (err error) { - if fp.LoadReturns.Data == nil { - fp.LoadReturns.Data = core_config.NewData() - } - data = fp.LoadReturns.Data - err = fp.LoadReturns.Err - return -} - -func (fp *FakePersistor) Delete() {} - -func (fp *FakePersistor) Exists() bool { - return true -} - -func (fp *FakePersistor) Save(data configuration.DataInterface) (err error) { - fp.SaveArgs.Data = data.(*core_config.Data) - err = fp.SaveReturns.Err - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/test_config.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/test_config.go deleted file mode 100644 index 165761a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/configuration/test_config.go +++ /dev/null @@ -1,42 +0,0 @@ -package configuration - -import ( - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/models" -) - -func NewRepository() core_config.Repository { - return core_config.NewRepositoryFromPersistor(NewFakePersistor(), func(err error) { - panic(err) - }) -} - -func NewRepositoryWithAccessToken(tokenInfo core_config.TokenInfo) core_config.Repository { - accessToken, err := EncodeAccessToken(tokenInfo) - if err != nil { - panic(err) - } - - config := NewRepository() - config.SetAccessToken(accessToken) - return config -} - -func NewRepositoryWithDefaults() core_config.Repository { - configRepo := NewRepositoryWithAccessToken(core_config.TokenInfo{ - UserGuid: "my-user-guid", - Username: "my-user", - Email: "my-user-email", - }) - - configRepo.SetSpaceFields(models.SpaceFields{ - Name: "my-space", - Guid: "my-space-guid", - }) - configRepo.SetOrganizationFields(models.OrganizationFields{ - Name: "my-org", - Guid: "my-org-guid", - }) - - return configRepo -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/io.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/io.go deleted file mode 100644 index 614deb6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/io.go +++ /dev/null @@ -1,71 +0,0 @@ -package io - -import ( - "bytes" - "io" - "os" - "strings" -) - -func SimulateStdin(input string, block func(r io.Reader)) { - reader, writer := io.Pipe() - - go func() { - writer.Write([]byte(input)) - defer writer.Close() - }() - - block(reader) -} - -func CaptureOutput(block func()) []string { - oldSTDOUT := os.Stdout - r, w, err := os.Pipe() - if err != nil { - panic(err) - } - - os.Stdout = w - defer func() { - os.Stdout = oldSTDOUT - }() - - doneWriting := make(chan bool) - result := make(chan []string) - - go captureOutputAsyncronously(doneWriting, result, r) - - block() - w.Close() - doneWriting <- true - return <-result -} - -/* - The reason we're doing is that you can't write an infinite amount of bytes into a pipe. - On some platforms, the limit is fairly high; on other platforms, the limit is infuriatingly small - (looking at you, Windows). To counteract this, we need to read in a goroutine from one end of - the pipe and return the result across a channel. -*/ -func captureOutputAsyncronously(doneWriting <-chan bool, result chan<- []string, reader io.Reader) { - var readingString string - - for { - var buf bytes.Buffer - io.Copy(&buf, reader) - readingString += buf.String() - - _, ok := <-doneWriting - if ok { - // there is no guarantee that the writer did not - // write more in between the read above and reading from this channel - // so we absolute must read once more if we want all the bytes - var buf bytes.Buffer - io.Copy(&buf, reader) - readingString += buf.String() - break - } - } - - result <- strings.Split(readingString, "\n") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/io_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/io_test.go deleted file mode 100644 index d3e590e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/io_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package io_test - -import ( - "os" - "strings" - - . "github.com/cloudfoundry/cli/testhelpers/io" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("io helpers", func() { - It("will never overflow the pipe", func() { - str := strings.Repeat("z", 75000) - output := CaptureOutput(func() { - os.Stdout.Write([]byte(str)) - }) - - Expect(output).To(Equal([]string{str})) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/suite_test.go deleted file mode 100644 index e7f78b3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/io/suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package io_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestIOHelpers(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "IO Helpers Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/all_requests_called_matcher.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/all_requests_called_matcher.go deleted file mode 100644 index 78791d1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/all_requests_called_matcher.go +++ /dev/null @@ -1,45 +0,0 @@ -package matchers - -import ( - "errors" - "fmt" - - "github.com/cloudfoundry/cli/testhelpers/net" - "github.com/onsi/gomega" -) - -func HaveAllRequestsCalled() gomega.OmegaMatcher { - return &allRequestsCalledMatcher{} -} - -type allRequestsCalledMatcher struct { - failureMessage string -} - -func (matcher *allRequestsCalledMatcher) Match(actual interface{}) (bool, error) { - testHandler, ok := actual.(*net.TestHandler) - if !ok { - return false, errors.New(fmt.Sprintf("Expected a test handler, got %T", actual)) - } - - if testHandler.AllRequestsCalled() { - matcher.failureMessage = "Expected all requests to not be called, but they were all called" - return true, nil - } else { - message := fmt.Sprint("Failed to call requests:\n") - for i := testHandler.CallCount; i < len(testHandler.Requests); i++ { - message += fmt.Sprintf("%#v\n", testHandler.Requests[i]) - } - message += "\n" - matcher.failureMessage = message - return false, nil - } -} - -func (matcher *allRequestsCalledMatcher) FailureMessage(actual interface{}) string { - return matcher.failureMessage -} - -func (matcher *allRequestsCalledMatcher) NegatedFailureMessage(actual interface{}) string { - return matcher.failureMessage -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/be_in_display_order_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/be_in_display_order_test.go deleted file mode 100644 index a59a840..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/be_in_display_order_test.go +++ /dev/null @@ -1,116 +0,0 @@ -package matchers_test - -import ( - "strings" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeInDisplayOrder()", func() { - var ( - matcher OmegaMatcher - actual []string - ) - - actual = []string{ - "1st line 1", - "2nd line 2", - "3rd line 3", - "4th line 4", - } - - It("asserts actual is in same display order with expected", func() { - matcher = BeInDisplayOrder( - []string{"1st"}, - []string{"2nd"}, - []string{"3rd"}, - []string{"4th"}, - ) - - success, err := matcher.Match(actual) - Ω(success).To(Equal(true)) - Ω(err).To(BeNil()) - - matcher = BeInDisplayOrder( - []string{"1st"}, - []string{"3rd"}, - []string{"2nd"}, - []string{"4th"}, - ) - - success, err = matcher.Match(actual) - Ω(success).To(Equal(false)) - Ω(err).To(BeNil()) - msg := matcher.FailureMessage([]string{}) - Ω(strings.Contains(msg, "2nd")).To(Equal(true)) - }) - - It("asserts actual contains the expected string", func() { - matcher = BeInDisplayOrder( - []string{"Not in the actual"}, - ) - - success, err := matcher.Match(actual) - Ω(success).To(Equal(false)) - Ω(err).To(BeNil()) - - msg := matcher.FailureMessage([]string{}) - Ω(strings.Contains(msg, "Not in the actual")).To(Equal(true)) - }) - - It("asserts actual contains 2 substrings in the same display line ", func() { - matcher = BeInDisplayOrder( - []string{"1st", "line"}, - []string{"4th", "line"}, - ) - - success, err := matcher.Match(actual) - Ω(success).To(Equal(true)) - Ω(err).To(BeNil()) - - matcher = BeInDisplayOrder( - []string{"1st", "line 2"}, - ) - - success, err = matcher.Match(actual) - Ω(success).To(Equal(false)) - - msg := matcher.FailureMessage([]string{}) - Ω(strings.Contains(msg, "line 2")).To(Equal(true)) - - matcher = BeInDisplayOrder( - []string{"1st"}, - []string{"line 1"}, - ) - - success, err = matcher.Match(actual) - Ω(success).To(Equal(false)) - - msg = matcher.FailureMessage([]string{}) - Ω(strings.Contains(msg, "line 1")).To(Equal(true)) - }) - - It("asserts actual contains 2 substrings displaying in order on a single line ", func() { - matcher = BeInDisplayOrder( - []string{"1st", "line 1"}, - ) - - success, err := matcher.Match(actual) - Ω(success).To(Equal(true)) - Ω(err).To(BeNil()) - - matcher = BeInDisplayOrder( - []string{"line 1", "1st"}, - ) - - success, err = matcher.Match(actual) - Ω(success).To(Equal(false)) - - msg := matcher.FailureMessage([]string{}) - Ω(strings.Contains(msg, "1st")).To(Equal(true)) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/matchers_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/matchers_suite_test.go deleted file mode 100644 index 4d11b6a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/matchers_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestMatchers(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Matchers Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/server.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/server.go deleted file mode 100644 index 2a5c1ec..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/server.go +++ /dev/null @@ -1,148 +0,0 @@ -package net - -import ( - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "strings" - - "github.com/onsi/ginkgo" -) - -type TestRequest struct { - Method string - Path string - Header http.Header - Matcher RequestMatcher - Response TestResponse -} - -type RequestMatcher func(*http.Request) - -type TestResponse struct { - Body string - Status int - Header http.Header -} - -type TestHandler struct { - Requests []TestRequest - CallCount int -} - -func (h *TestHandler) AllRequestsCalled() bool { - return h.CallCount == len(h.Requests) -} - -func urlQueryContains(container, containee url.Values) bool { - //Cloud Controller often uses "q" as a container for search queries, which may be semantically - //equivalent to CC but be actually different strings. - - //Example: "foo:bar;baz:qux" is semantically the same as "baz:qux;foo:bar". CC doesn't care about order. - - //Therefore, we crack apart "q" params on their seperator (a colon) and compare the resulting - //substrings. No other params seem to use semicolon separators AND are order-dependent, so we just - //run all params through the same process. - for key, _ := range containee { - - containerValues := strings.Split(container.Get(key), ";") - containeeValues := strings.Split(containee.Get(key), ";") - - allValuesFound := make([]bool, len(containeeValues)) - - for index, expected := range containeeValues { - for _, actual := range containerValues { - if expected == actual { - allValuesFound[index] = true - break - } - } - } - for _, ok := range allValuesFound { - if !ok { - return false - } - } - } - - return true -} - -func (h *TestHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - defer ginkgo.GinkgoRecover() - - if len(h.Requests) <= h.CallCount { - h.logError("Index out of range! Test server called too many times. Final Request:", r.Method, r.RequestURI) - return - } - - tester := h.Requests[h.CallCount] - h.CallCount++ - - // match method - if tester.Method != r.Method { - h.logError("Method does not match.\nExpected: %s\nActual: %s", tester.Method, r.Method) - } - - // match path - paths := strings.Split(tester.Path, "?") - if paths[0] != r.URL.Path { - h.logError("Path does not match.\nExpected: %s\nActual: %s", paths[0], r.URL.Path) - } - // match query string - if len(paths) > 1 { - actualValues, _ := url.ParseQuery(r.URL.RawQuery) - expectedValues, _ := url.ParseQuery(paths[1]) - - if !urlQueryContains(actualValues, expectedValues) { - h.logError("Query string does not match.\nExpected: %s\nActual: %s", paths[1], r.URL.RawQuery) - } - } - - for key, values := range tester.Header { - key = http.CanonicalHeaderKey(key) - actualValues := strings.Join(r.Header[key], ";") - expectedValues := strings.Join(values, ";") - - if key == "Authorization" && !strings.Contains(actualValues, expectedValues) { - h.logError("%s header is not contained in actual value.\nExpected: %s\nActual: %s", key, expectedValues, actualValues) - } - if key != "Authorization" && actualValues != expectedValues { - h.logError("%s header did not match.\nExpected: %s\nActual: %s", key, expectedValues, actualValues) - } - } - - // match custom request matcher - if tester.Matcher != nil { - tester.Matcher(r) - } - - // set response headers - header := w.Header() - for name, values := range tester.Response.Header { - if len(values) < 1 { - continue - } - header.Set(name, values[0]) - } - - // write response - w.WriteHeader(tester.Response.Status) - fmt.Fprintln(w, tester.Response.Body) -} - -func NewTLSServer(requests []TestRequest) (*httptest.Server, *TestHandler) { - handler := &TestHandler{Requests: requests} - return httptest.NewTLSServer(handler), handler -} - -func NewServer(requests []TestRequest) (*httptest.Server, *TestHandler) { - handler := &TestHandler{Requests: requests} - return httptest.NewServer(handler), handler -} - -func (h *TestHandler) logError(msg string, args ...interface{}) { - println(fmt.Sprintf(msg, args...)) - ginkgo.Fail("failed") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/warning_producer.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/warning_producer.go deleted file mode 100644 index d2b0366..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/warning_producer.go +++ /dev/null @@ -1,14 +0,0 @@ -package net - -type warningProducer struct { - warnings []string -} - -func NewWarningProducer(warnings []string) (warning_producer warningProducer) { - warning_producer.warnings = warnings - return -} - -func (warning_producer warningProducer) Warnings() []string { - return warning_producer.warnings -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/requirements/fake_req_factory.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/requirements/fake_req_factory.go deleted file mode 100644 index 7744cd0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/requirements/fake_req_factory.go +++ /dev/null @@ -1,160 +0,0 @@ -package requirements - -import ( - "github.com/cloudfoundry/cli/cf/models" - "github.com/cloudfoundry/cli/cf/requirements" -) - -type FakeReqFactory struct { - ApplicationName string - Application models.Application - - ServiceInstanceName string - ServiceInstance models.ServiceInstance - - LoginSuccess bool - ApiEndpointSuccess bool - ValidAccessTokenSuccess bool - TargetedSpaceSuccess bool - TargetedOrgSuccess bool - BuildpackSuccess bool - - ServiceInstanceNotFound bool - - SpaceName string - Space models.Space - - OrganizationName string - Organization models.Organization - OrganizationFields models.OrganizationFields - - RouteHost string - RouteDomain string - Route models.Route - - DomainName string - Domain models.DomainFields - - UserUsername string - UserFields models.UserFields - - Buildpack models.Buildpack - - MinCCApiVersionCommandName string - MinCCApiVersionMajor int - MinCCApiVersionMinor int - MinCCApiVersionPatch int -} - -func (f *FakeReqFactory) NewApplicationRequirement(name string) requirements.ApplicationRequirement { - f.ApplicationName = name - return FakeRequirement{f, true} -} - -func (f *FakeReqFactory) NewServiceInstanceRequirement(name string) requirements.ServiceInstanceRequirement { - f.ServiceInstanceName = name - return FakeRequirement{f, !f.ServiceInstanceNotFound} -} - -func (f *FakeReqFactory) NewLoginRequirement() requirements.Requirement { - return FakeRequirement{f, f.LoginSuccess} -} - -func (f *FakeReqFactory) NewTargetedSpaceRequirement() requirements.Requirement { - return FakeRequirement{f, f.TargetedSpaceSuccess} -} - -func (f *FakeReqFactory) NewTargetedOrgRequirement() requirements.TargetedOrgRequirement { - return FakeRequirement{f, f.TargetedOrgSuccess} -} - -func (f *FakeReqFactory) NewSpaceRequirement(name string) requirements.SpaceRequirement { - f.SpaceName = name - return FakeRequirement{f, true} -} - -func (f *FakeReqFactory) NewOrganizationRequirement(name string) requirements.OrganizationRequirement { - f.OrganizationName = name - return FakeRequirement{f, true} -} - -func (f *FakeReqFactory) NewDomainRequirement(name string) requirements.DomainRequirement { - f.DomainName = name - return FakeRequirement{f, true} -} - -func (f *FakeReqFactory) NewUserRequirement(username string) requirements.UserRequirement { - f.UserUsername = username - return FakeRequirement{f, true} -} - -func (f *FakeReqFactory) NewBuildpackRequirement(buildpack string) requirements.BuildpackRequirement { - f.Buildpack.Name = buildpack - return FakeRequirement{f, f.BuildpackSuccess} -} - -func (f *FakeReqFactory) NewApiEndpointRequirement() requirements.Requirement { - return FakeRequirement{f, f.ApiEndpointSuccess} -} - -func (f *FakeReqFactory) NewMinCCApiVersionRequirement(commandName string, major, minor, patch int) requirements.Requirement { - f.MinCCApiVersionCommandName = commandName - f.MinCCApiVersionMajor = major - f.MinCCApiVersionMinor = minor - f.MinCCApiVersionPatch = patch - return FakeRequirement{f, true} -} - -type FakeRequirement struct { - factory *FakeReqFactory - success bool -} - -func (r FakeRequirement) Execute() (success bool) { - return r.success -} - -func (r FakeRequirement) SetApplicationName(name string) { -} - -func (r FakeRequirement) GetApplication() models.Application { - return r.factory.Application -} - -func (r FakeRequirement) GetServiceInstance() models.ServiceInstance { - return r.factory.ServiceInstance -} - -func (r FakeRequirement) SetSpaceName(name string) { -} - -func (r FakeRequirement) GetSpace() models.Space { - return r.factory.Space -} - -func (r FakeRequirement) SetOrganizationName(name string) { -} - -func (r FakeRequirement) GetOrganization() models.Organization { - return r.factory.Organization -} - -func (r FakeRequirement) GetOrganizationFields() models.OrganizationFields { - return r.factory.OrganizationFields -} - -func (r FakeRequirement) GetRoute() models.Route { - return r.factory.Route -} - -func (r FakeRequirement) GetDomain() models.DomainFields { - return r.factory.Domain -} - -func (r FakeRequirement) GetUser() models.UserFields { - return r.factory.UserFields -} - -func (r FakeRequirement) GetBuildpack() models.Buildpack { - return r.factory.Buildpack -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/terminal/ui.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/terminal/ui.go deleted file mode 100644 index ad2749c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/terminal/ui.go +++ /dev/null @@ -1,165 +0,0 @@ -package terminal - -import ( - "fmt" - "strings" - "sync" - "time" - - "github.com/cloudfoundry/cli/cf/configuration/core_config" - term "github.com/cloudfoundry/cli/cf/terminal" - "github.com/codegangsta/cli" -) - -const QuietPanic = "I should not print anything" - -type FakeUI struct { - Outputs []string - UncapturedOutput []string - WarnOutputs []string - Prompts []string - PasswordPrompts []string - Inputs []string - FailedWithUsage bool - FailedWithUsageCommandName string - PanickedQuietly bool - ShowConfigurationCalled bool - - sayMutex sync.Mutex -} - -func (ui *FakeUI) PrintPaginator(rows []string, err error) { - if err != nil { - ui.Failed(err.Error()) - return - } - - for _, row := range rows { - ui.Say(row) - } -} - -func (ui *FakeUI) PrintCapturingNoOutput(message string, args ...interface{}) { - ui.sayMutex.Lock() - defer ui.sayMutex.Unlock() - - message = fmt.Sprintf(message, args...) - ui.UncapturedOutput = append(ui.UncapturedOutput, strings.Split(message, "\n")...) - return -} - -func (ui *FakeUI) Say(message string, args ...interface{}) { - ui.sayMutex.Lock() - defer ui.sayMutex.Unlock() - - message = fmt.Sprintf(message, args...) - ui.Outputs = append(ui.Outputs, strings.Split(message, "\n")...) - return -} - -func (ui *FakeUI) Warn(message string, args ...interface{}) { - message = fmt.Sprintf(message, args...) - ui.WarnOutputs = append(ui.WarnOutputs, strings.Split(message, "\n")...) - ui.Say(message, args...) - return -} - -func (ui *FakeUI) Ask(prompt string, args ...interface{}) (answer string) { - ui.Prompts = append(ui.Prompts, fmt.Sprintf(prompt, args...)) - if len(ui.Inputs) == 0 { - panic("No input provided to Fake UI for prompt: " + fmt.Sprintf(prompt, args...)) - } - - answer = ui.Inputs[0] - ui.Inputs = ui.Inputs[1:] - return -} - -func (ui *FakeUI) ConfirmDelete(modelType, modelName string) bool { - return ui.Confirm( - "Really delete the %s %s?%s", - modelType, - term.EntityNameColor(modelName), - term.PromptColor(">")) -} - -func (ui *FakeUI) ConfirmDeleteWithAssociations(modelType, modelName string) bool { - return ui.ConfirmDelete(modelType, modelName) -} - -func (ui *FakeUI) Confirm(prompt string, args ...interface{}) bool { - response := ui.Ask(prompt, args...) - switch strings.ToLower(response) { - case "y", "yes": - return true - } - return false -} - -func (ui *FakeUI) AskForPassword(prompt string, args ...interface{}) (answer string) { - ui.PasswordPrompts = append(ui.PasswordPrompts, fmt.Sprintf(prompt, args...)) - if len(ui.Inputs) == 0 { - println("__________________PANIC__________________") - println(ui.DumpOutputs()) - println(ui.DumpPrompts()) - println("_________________________________________") - panic("No input provided to Fake UI for prompt: " + fmt.Sprintf(prompt, args...)) - } - - answer = ui.Inputs[0] - ui.Inputs = ui.Inputs[1:] - return -} - -func (ui *FakeUI) Ok() { - ui.Say("OK") -} - -func (ui *FakeUI) Failed(message string, args ...interface{}) { - ui.Say("FAILED") - ui.Say(message, args...) - panic(QuietPanic) - return -} - -func (ui *FakeUI) FailWithUsage(context *cli.Context) { - ui.FailedWithUsage = true - ui.FailedWithUsageCommandName = context.Command.Name - ui.Failed("Incorrect Usage.") - ui.PanickedQuietly = true -} - -func (ui *FakeUI) PanicQuietly() { - ui.PanickedQuietly = true -} - -func (ui *FakeUI) DumpWarnOutputs() string { - return "****************************\n" + strings.Join(ui.WarnOutputs, "\n") -} - -func (ui *FakeUI) DumpOutputs() string { - return "****************************\n" + strings.Join(ui.Outputs, "\n") -} - -func (ui *FakeUI) DumpPrompts() string { - return "****************************\n" + strings.Join(ui.Prompts, "\n") -} - -func (ui *FakeUI) ClearOutputs() { - ui.Outputs = []string{} -} - -func (ui *FakeUI) ShowConfiguration(config core_config.Reader) { - ui.ShowConfigurationCalled = true -} - -func (ui FakeUI) LoadingIndication() { -} - -func (c FakeUI) Wait(duration time.Duration) { - time.Sleep(duration) -} - -func (ui *FakeUI) Table(headers []string) term.Table { - return term.NewTable(ui, headers) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/checksum_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/checksum_test.go deleted file mode 100644 index 10b1b63..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/checksum_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package utils_test - -import ( - "fmt" - "io/ioutil" - "os" - - . "github.com/cloudfoundry/cli/utils" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Sha1Checksum", func() { - - var ( - checksum Sha1Checksum - ) - - Describe("ComputeFileSha1", func() { - Context("If file does not exist", func() { - It("returns error", func() { - checksum = NewSha1Checksum("file/path/to/no/where") - - sha1, err := checksum.ComputeFileSha1() - Ω(len(sha1)).To(Equal(0)) - Ω(err).To(HaveOccurred()) - }) - }) - - Context("If file does exist", func() { - var ( - f *os.File - err error - ) - - BeforeEach(func() { - f, err = ioutil.TempFile("", "sha1_test_") - Ω(err).ToNot(HaveOccurred()) - defer f.Close() - f.Write([]byte("abc")) - }) - - AfterEach(func() { - os.RemoveAll(f.Name()) - }) - - It("returns the sha1 of a file", func() { - checksum = NewSha1Checksum(f.Name()) - - sha1, err := checksum.ComputeFileSha1() - Ω(err).ToNot(HaveOccurred()) - Ω(len(sha1)).To(Equal(20)) - Ω(fmt.Sprintf("%x", sha1)).To(Equal("a9993e364706816aba3e25717850c26c9cd0d89d")) - }) - }) - - }) - - Describe("CheckSha1", func() { - Context("file doesn't exist", func() { - It("returns false", func() { - checksum = NewSha1Checksum("file/path/to/no/where") - - sha1, err := checksum.ComputeFileSha1() - Ω(len(sha1)).To(Equal(0)) - Ω(err).To(HaveOccurred()) - }) - }) - - Context("If file does exist", func() { - var ( - f *os.File - err error - ) - - BeforeEach(func() { - f, err = ioutil.TempFile("", "sha1_test_") - Ω(err).ToNot(HaveOccurred()) - defer f.Close() - f.Write([]byte("abc")) - }) - - AfterEach(func() { - os.RemoveAll(f.Name()) - }) - - It("returns false if sha1 doesn't match", func() { - checksum = NewSha1Checksum(f.Name()) - - Ω(checksum.CheckSha1("skj33933dabs2292391223aa393fjs92")).To(BeFalse()) - }) - - It("returns true if sha1 matches", func() { - checksum = NewSha1Checksum(f.Name()) - - Ω(checksum.CheckSha1("a9993e364706816aba3e25717850c26c9cd0d89d")).To(BeTrue()) - }) - }) - - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/fakes/fake_sha1checksum.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/fakes/fake_sha1checksum.go deleted file mode 100644 index 96b49c2..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/fakes/fake_sha1checksum.go +++ /dev/null @@ -1,112 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "github.com/cloudfoundry/cli/utils" - "sync" -) - -type FakeSha1Checksum struct { - ComputeFileSha1Stub func() ([]byte, error) - computeFileSha1Mutex sync.RWMutex - computeFileSha1ArgsForCall []struct{} - computeFileSha1Returns struct { - result1 []byte - result2 error - } - CheckSha1Stub func(string) bool - checkSha1Mutex sync.RWMutex - checkSha1ArgsForCall []struct { - arg1 string - } - checkSha1Returns struct { - result1 bool - } - SetFilePathStub func(string) - setFilePathMutex sync.RWMutex - setFilePathArgsForCall []struct { - arg1 string - } -} - -func (fake *FakeSha1Checksum) ComputeFileSha1() ([]byte, error) { - fake.computeFileSha1Mutex.Lock() - defer fake.computeFileSha1Mutex.Unlock() - fake.computeFileSha1ArgsForCall = append(fake.computeFileSha1ArgsForCall, struct{}{}) - if fake.ComputeFileSha1Stub != nil { - return fake.ComputeFileSha1Stub() - } else { - return fake.computeFileSha1Returns.result1, fake.computeFileSha1Returns.result2 - } -} - -func (fake *FakeSha1Checksum) ComputeFileSha1CallCount() int { - fake.computeFileSha1Mutex.RLock() - defer fake.computeFileSha1Mutex.RUnlock() - return len(fake.computeFileSha1ArgsForCall) -} - -func (fake *FakeSha1Checksum) ComputeFileSha1Returns(result1 []byte, result2 error) { - fake.ComputeFileSha1Stub = nil - fake.computeFileSha1Returns = struct { - result1 []byte - result2 error - }{result1, result2} -} - -func (fake *FakeSha1Checksum) CheckSha1(arg1 string) bool { - fake.checkSha1Mutex.Lock() - defer fake.checkSha1Mutex.Unlock() - fake.checkSha1ArgsForCall = append(fake.checkSha1ArgsForCall, struct { - arg1 string - }{arg1}) - if fake.CheckSha1Stub != nil { - return fake.CheckSha1Stub(arg1) - } else { - return fake.checkSha1Returns.result1 - } -} - -func (fake *FakeSha1Checksum) CheckSha1CallCount() int { - fake.checkSha1Mutex.RLock() - defer fake.checkSha1Mutex.RUnlock() - return len(fake.checkSha1ArgsForCall) -} - -func (fake *FakeSha1Checksum) CheckSha1ArgsForCall(i int) string { - fake.checkSha1Mutex.RLock() - defer fake.checkSha1Mutex.RUnlock() - return fake.checkSha1ArgsForCall[i].arg1 -} - -func (fake *FakeSha1Checksum) CheckSha1Returns(result1 bool) { - fake.CheckSha1Stub = nil - fake.checkSha1Returns = struct { - result1 bool - }{result1} -} - -func (fake *FakeSha1Checksum) SetFilePath(arg1 string) { - fake.setFilePathMutex.Lock() - defer fake.setFilePathMutex.Unlock() - fake.setFilePathArgsForCall = append(fake.setFilePathArgsForCall, struct { - arg1 string - }{arg1}) - if fake.SetFilePathStub != nil { - fake.SetFilePathStub(arg1) - } -} - -func (fake *FakeSha1Checksum) SetFilePathCallCount() int { - fake.setFilePathMutex.RLock() - defer fake.setFilePathMutex.RUnlock() - return len(fake.setFilePathArgsForCall) -} - -func (fake *FakeSha1Checksum) SetFilePathArgsForCall(i int) string { - fake.setFilePathMutex.RLock() - defer fake.setFilePathMutex.RUnlock() - return fake.setFilePathArgsForCall[i].arg1 -} - -var _ utils.Sha1Checksum = new(FakeSha1Checksum) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/utils_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/utils_suite_test.go deleted file mode 100644 index 7368c59..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/utils_suite_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils_test - -import ( - "github.com/cloudfoundry/cli/cf/i18n" - "github.com/cloudfoundry/cli/cf/i18n/detection" - "github.com/cloudfoundry/cli/testhelpers/configuration" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestUtils(t *testing.T) { - config := configuration.NewRepositoryWithDefaults() - i18n.T = i18n.Init(config, &detection.JibberJabberDetector{}) - - RegisterFailHandler(Fail) - RunSpecs(t, "Utils Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/version_check.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/version_check.go deleted file mode 100644 index a147cbe..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/version_check.go +++ /dev/null @@ -1,21 +0,0 @@ -package utils - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - "github.com/cloudfoundry/cli/cf/terminal" - - . "github.com/cloudfoundry/cli/cf/i18n" -) - -func NotifyUpdateIfNeeded(ui terminal.UI, config core_config.Reader) { - if !config.IsMinCliVersion(cf.Version) { - ui.Say("") - ui.Say(T("Cloud Foundry API version {{.ApiVer}} requires CLI version {{.CliMin}}. You are currently on version {{.CliVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - map[string]interface{}{ - "ApiVer": config.ApiVersion(), - "CliMin": config.MinCliVersion(), - "CliVer": cf.Version, - })) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/version_check_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/version_check_test.go deleted file mode 100644 index 4b277e0..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/version_check_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package utils_test - -import ( - "github.com/cloudfoundry/cli/cf" - "github.com/cloudfoundry/cli/cf/configuration/core_config" - . "github.com/cloudfoundry/cli/utils" - - testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" - testterm "github.com/cloudfoundry/cli/testhelpers/terminal" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/cloudfoundry/cli/testhelpers/matchers" -) - -var _ = Describe("NotifyUpdateIfNeeded", func() { - - var ( - ui *testterm.FakeUI - config core_config.ReadWriter - ) - - BeforeEach(func() { - ui = new(testterm.FakeUI) - config = testconfig.NewRepository() - }) - - It("Prints a notification to user if current version < min cli version", func() { - config.SetMinCliVersion("6.0.0") - config.SetMinRecommendedCliVersion("6.5.0") - config.SetApiVersion("2.15.1") - cf.Version = "5.0.0" - NotifyUpdateIfNeeded(ui, config) - - Ω(ui.Outputs).To(ContainSubstrings([]string{"Cloud Foundry API version", - "requires CLI version 6.0.0", - "You are currently on version 5.0.0", - "To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", - })) - }) - - It("Doesn't print a notification to user if current version >= min cli version", func() { - config.SetMinCliVersion("6.0.0") - config.SetMinRecommendedCliVersion("6.5.0") - config.SetApiVersion("2.15.1") - cf.Version = "6.0.0" - NotifyUpdateIfNeeded(ui, config) - - Ω(ui.Outputs).To(BeNil()) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/dict/adjectives.txt b/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/dict/adjectives.txt deleted file mode 100644 index f319945..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/dict/adjectives.txt +++ /dev/null @@ -1,40618 +0,0 @@ -abactinal -abaised -abandonable -abandoned -abased -abasic -abatable -abaxial -abbatial -abdicable -abdicant -abdicative -abdominal -abdominous -abducent -aberrant -aberrational -abessive -abeyant -abhominable -abhorrent -abiding -abient -abiogenetic -abiotic -abiotrophic -abirritant -abirritative -abject -abjective -abjuratory -ablatival -ablative -able -ablepharous -ableptical -abler -ablest -abluent -ablush -ablutionary -abnormal -abolishable -abolitionary -abominable -aboral -aboriginal -abortifacient -abortional -abortive -aboulic -aboveground -abox -abradant -abranchiate -abridgable -abridgeable -abridged -abrogable -abrogative -abrupt -abscessed -absent -absinthial -absinthian -absolute -absolutistic -absolutory -absolvable -absolvent -absonant -absorbable -absorbed -absorbent -absorbing -absorptiometric -absorptive -abstemious -abstentious -abstergent -abstersive -abstinent -abstract -abstracted -abstractional -abstractive -abstruse -absurd -abulic -abundant -abusable -abusive -abutting -abuzz -abysmal -abyssal -academic -academical -acanthaceous -acanthine -acanthocarpous -acanthocladous -acanthoid -acanthopterygian -acanthotic -acanthous -acapnial -acardiac -acaricidal -acaridan -acaroid -acarpellous -acarpelous -acarpous -acatalectic -acaudal -acaulescent -accelerable -accelerando -accelerative -accentless -accentuable -accentual -acceptable -acceptant -accepted -accessible -accessional -accessorial -accidental -accipitral -accipitrine -acclamatory -acclimatable -acclimatisable -acclimatizable -acclivitous -acclivous -accoladed -accolated -accommodable -accommodating -accommodational -accommodative -accomplishable -accomplished -accordable -accordant -according -accostable -accosted -accountable -accrescent -accretionary -accretive -acculturational -acculturative -accumbent -accumulable -accumulative -accurate -accursed -accusable -accusatival -accusative -accusatorial -accusatory -accustomed -acellular -acentric -acephalous -acerate -acerb -acerbic -acerose -acerous -acervate -acescent -acesodyne -acesodynous -acetabular -acetabuliform -acetated -acetic -acetimetric -acetometrical -acetonic -acetous -acetylenic -acetylic -acheilary -achenial -achievable -achilary -achlamydate -achlamydeous -achlorhydric -achlorophyllous -acholic -acholuric -achondritic -achondroplastic -achromatic -achromatophil -achromatous -achromic -achronychous -acicular -aciculate -acidic -acidifiable -acidimetric -acidimetrical -acidogenic -acidophil -acidophilic -acidotic -acidulous -aciduric -acidy -aciform -acinaceous -acinacifolious -acinaciform -acinarious -acinic -aciniform -acinous -acknowledgeable -acmic -acnodal -acockbill -acoelomate -acoelous -acold -aconitic -acorned -acosmistic -acotyledonous -acoustic -acquainted -acquiescent -acquirable -acquisitive -acred -acrid -acrimonious -acritical -acrobatic -acrocarpous -acrocephalic -acrocephalous -acrodont -acrodrome -acrogenic -acrogynous -acrolithic -acrologic -acromegalic -acronal -acronical -acronychal -acronychous -acronymic -acronymous -acropetal -acrophonic -acropolitan -acrosporous -acroteral -acroterial -acrotic -acrylic -actable -actinal -acting -actinian -actinic -actiniform -actinobacillotic -actinochemical -actinodrome -actinographic -actinoid -actinolitic -actinometric -actinometrical -actinomorphic -actinomycetous -actinomycotic -actinopterygian -actionable -actionless -active -actual -actualistic -actuarial -actuarian -acuate -aculeate -acuminate -acuminous -acute -acutilingual -acyclic -adactylous -adagial -adagietto -adagio -adamant -adamantine -adaptable -adaptational -adaptive -adaxial -addable -addible -addicted -addictive -additamentary -additional -additive -additory -addlebrained -addlepated -addorsed -adduceable -adducent -adducible -adductive -adenocarcinomatous -adenoid -adenoidal -adenological -adenomatous -adenophyllous -adept -adequate -adessive -adhesional -adhesive -adiabatic -adiactinic -adiaphoretic -adiaphoristic -adiaphorous -adient -adipocerous -adipopectic -adipopexic -adipose -adjacent -adjectival -adjoining -adjudicative -adjunctive -adjuratory -adjustable -adjustmental -adjuvant -adminicular -administrable -administrant -administrational -administrative -admirable -admirative -admissible -admissive -admittable -admittible -admonitorial -admonitory -adnate -adolescent -adoptable -adopted -adoptional -adoptive -adorable -adorsed -adrenal -adrenergic -adrenocorticotropic -adroit -adscititious -adscript -adsorbable -adsorbent -adsorptive -adularescent -adulatory -adult -adulterine -adulterous -adumbral -adumbrative -adunc -adust -advanced -advantageous -advective -adventitial -adventitious -adventive -adventureful -adventuresome -adventurous -adverbless -adversative -adverse -advertent -advertisable -advertizable -advisable -advised -advisory -advocatory -adynamic -ae -aecial -aedeagal -aedilitian -aeneous -aeolotropic -aeonian -aerarian -aerial -aeriferous -aeriform -aerobacteriological -aeroballistic -aerobatic -aerobic -aerobiologic -aerobiological -aerobiotic -aerodonetic -aerodynamic -aerodynamical -aeroelastic -aerogenic -aerographic -aerographical -aerolitic -aerologic -aerological -aeromantic -aeromarine -aeromechanical -aeromedical -aerometric -aeronautic -aeronautical -aerophilatelic -aerophobic -aeroscopic -aerostatic -aerothermodynamic -aerotropic -aeruginous -aery -aesthetical -aestival -aetiological -afeard -afebrile -affable -affected -affecting -affectional -affectionate -afferent -affettuoso -affianced -affiliable -affinal -affine -affined -affinitive -affirmable -affirmative -affirmatory -affixal -afflated -afflictionless -afflictive -affluent -affordable -affronta -affrontive -afocal -aforementioned -aforesaid -aforethought -afraid -aftermost -aftershafted -aftmost -agamic -agamogenetic -agaricaceous -agatelike -agatoid -agaze -aged -agee -ageless -agelong -agenetic -agential -agentival -agentive -ageusic -aggadic -agglomerative -agglutinable -agglutinant -agglutinative -agglutinogenic -aggradational -aggravative -aggregable -aggregate -aggregately -aggregative -aggregatory -aggressive -aghast -agile -agitable -agitational -agitative -agitato -agitatorial -agleam -agley -aglimmer -aglint -aglisten -aglitter -aglow -agminate -agnate -agnathous -agnatic -agnatical -agnominal -agog -agonal -agonic -agonistic -agonizing -agraphic -agrarian -agravic -agreeable -agreed -agrestal -agrestic -agricultural -agriological -agrobiologic -agrobiological -agrologic -agrological -agronomic -agronomical -agrostographic -agrostographical -agrostologic -agrostological -agrypnotic -aguelike -aguish -ahistoric -ahistorical -ahorse -ahull -ahungered -aidful -aidless -aiguilletted -ailanthic -ailing -ailurophilic -ailurophobic -aimful -aimless -airborne -airier -airiest -airless -airlike -airproof -airsick -airtight -airworthy -airy -aisled -akin -akinetic -alacritous -alar -alarmable -alary -alate -albescent -albinic -albinistic -albitic -albuminoid -albuminoidal -albuminous -albuminuric -alburnous -alchemic -alchemistical -alcid -alcidine -alclad -alcoholometric -alcoholometrical -alcoholytic -aldehydic -aldermanic -aleatory -alecithal -alembicated -alert -alethic -alethiologic -alethiological -aleuronic -alexinic -alexipharmic -alfresco -algal -algebraic -algesic -algetic -algid -algoid -algolagnic -algological -algometric -algometrical -algophagous -algorismic -algorithmic -algraphic -alible -alicyclic -alienable -aliform -alimental -alimentary -alimentative -alimonied -aliped -aliphatic -aliquant -aliquot -alist -aliturgical -alive -alkahestic -alkahestical -alkalescent -alkalic -alkalifiable -alkalimetric -alkalimetrical -alkaline -alkalisable -alkalizable -alkaloidal -alkylic -allanitic -allantoic -allantoid -allargando -allative -allegeable -alleged -allegiant -allegorical -allegoristic -allegretto -allegro -allelic -allelomorphic -alleluiatic -allergenic -allergic -alleviative -alleviatory -alliable -alliaceous -allied -alliterative -allobaric -allocable -allochthonous -allodial -allogamous -allogenic -allomerous -allometric -allomorphic -allonga -allonymous -allopathic -allopatric -allopelagic -allophonic -allophylian -alloplasmatic -alloplasmic -allopolyploid -allotriomorphic -allotropic -allottable -allotypic -allover -allowable -allowed -alluring -allusive -alluvial -allylic -almighty -almondlike -almondy -alodial -aloetic -alongships -aloof -alopecic -alpestrine -alphabetic -alphabetical -alphameric -alphanumeric -alpine -alsinaceous -alt -alterable -alterant -alterative -altern -alternant -altimetrical -altissimo -altitudinal -altricial -altruistic -alular -aluminic -aluminiferous -aluminographic -aluminous -alutaceous -alveated -alveolar -alveolate -alvine -alwite -amalgamable -amalgamative -amandine -amaranthaceous -amaranthine -amaryllidaceous -amassable -amateurish -amative -amatory -amaurotic -amazed -amazing -ambagious -ambassadorial -amberlike -amberous -ambery -ambidexter -ambidextral -ambidextrous -ambient -ambiguous -ambilateral -ambisexual -ambisinister -ambisyllabic -ambitionless -ambitious -ambivalent -amblyopic -ambrosiaceous -ambrosial -ambulacral -ambulant -ambulatory -ambushlike -amebic -ameboid -ameiotic -ameliorable -ameliorative -ameloblastic -amenable -amendable -amendatory -amenorrheal -amenorrheic -amenorrhoeal -amenorrhoeic -amentaceous -amental -amentiferous -amentiform -amerceable -ameristic -ametabolic -amethystine -amethystlike -ametropic -amiable -amianthine -amianthoid -amianthoidal -amic -amicable -amidic -aminic -amitotic -ammiaceous -ammoniac -ammoniacal -ammonic -ammonitic -ammonitoid -ammono -ammonolitic -ammophilous -amnestic -amniotic -amoebaean -amoebalike -amoebic -amoeboid -amoral -amoristic -amoroso -amorous -amorphous -amort -amortisable -amortizable -ampelitic -amperometric -ampherotokous -amphiarthrodial -amphibiotic -amphibious -amphibolic -amphibolitic -amphibological -amphibolous -amphibrachic -amphicarpous -amphichroic -amphicoelous -amphictyonic -amphigenous -amphigoric -amphikaryotic -amphipneustic -amphiprostylar -amphiprostyle -amphiprotic -amphisbaenian -amphisbaenic -amphisbaenoid -amphisbaenous -amphistylar -amphitheatric -amphitheatrical -amphithecial -amphitokal -amphitokous -amphitrichate -amphitropous -amphogenic -ampholytic -amphoral -amphoric -amphoteric -ample -amplectant -ampler -amplest -amplexicaul -amplexifoliate -ampliate -amplifiable -amplificatory -ampullaceous -amputative -amusable -amused -amusing -amusive -amyatonic -amyelic -amygdalaceous -amygdalate -amygdalic -amygdaliform -amygdaline -amygdaloidal -amylaceous -amylic -amylolytic -anabatic -anabiotic -anabolic -anacanthous -anacardiaceous -anachronic -anachronistic -anachronous -anaclastic -anaclinal -anaclitic -anacoluthic -anacoustic -anacrogynous -anacrustic -anacusic -anadromous -anaemic -anaerobic -anaerobiotic -anagenetic -anagenetical -anaglyphic -anaglyphical -anaglyptic -anaglyptical -anagogic -anagrammatic -anagrammatical -analectic -analemmatic -analeptic -analgesic -analogical -analogistic -analogous -analphabetic -analysable -analytic -analyzable -anamnestic -anamorphic -anandrous -ananthous -anapaestic -anapestic -anaphoral -anaphrodisiac -anaphylactic -anaplastic -anapophysial -anaptotic -anaptyctic -anaptyctical -anarchic -anarchistic -anarthric -anarthrous -anasarcous -anastigmatic -anastomotic -anathematic -anatine -anatomical -anatomicopathological -anatomisable -anatomizable -anatropous -ancestral -anchorable -anchoretic -anchoritic -anchorless -anchorlike -anchory -anchylotic -ancient -ancillary -ancipital -anconal -anconoid -ancra -andante -andantino -andesitic -androcentric -androcratic -androdioecious -androecial -androgenic -androgenous -androgynous -andromonoecious -andropetalous -anecdotal -anecdotic -anechoic -anelastic -anelectric -anemic -anemochorous -anemographic -anemometric -anemometrical -anemophilous -anemotropic -anencephalic -anepigraphic -anergic -aneroid -aneuch -aneuploid -aneuric -aneurismal -aneurysmal -anfractuous -angelic -anginal -angioblastic -angiocardiographic -angiocarpous -angiomatous -angiospermous -angrier -angriest -angry -anguilliform -anguine -anguished -angular -angulate -angulous -anharmonic -anhedonic -anhemitonic -anhidrotic -anhydremic -anhydrotic -anhydrous -aniconic -anile -anilidic -animadversional -animalcular -animalculous -animalic -animalistic -animated -animatistic -animato -animist -animistic -anionic -aniseikonic -anisic -anisocarpic -anisodactyl -anisodactylous -anisodont -anisogametic -anisogamous -anisomerous -anisometric -anisometropic -anisophyllous -anisopteran -anisotropic -ankylotic -annalistic -annectent -annexable -annexational -annihilable -annihilationistic -annihilationistical -annihilative -annotative -annotatory -annotinous -announceable -annoying -annual -annular -annulate -annullable -annulose -annunciable -annunciative -annunciatory -anodic -anoetic -anomalistic -anomalous -anomic -anonymous -anopisthographic -anorectal -anorectic -anorthic -anorthitic -anosmatic -anosmic -anourous -anoxaemic -anoxemic -anoxic -ansate -anserine -answerable -answerless -antagonisable -antagonistic -antagonizable -antalkaline -antarctic -antarthritic -antasthmatic -antatrophic -antebellum -antecedental -antediluvian -antefixal -antelopian -antelopine -antemeridian -antemundane -antenatal -antennal -antennary -antennate -antenniform -antennular -antenuptial -anteorbital -antepenultimate -anteprandial -anteprohibition -anterior -anteroparietal -antheral -antheridial -antherless -anthocarpous -anthological -anthophyllitic -anthracitic -anthracoid -anthracotic -anthropocentric -anthropogenetic -anthropogenic -anthropogeographic -anthropogeographical -anthropographic -anthropoid -anthropoidal -anthropolatric -anthropologic -anthropological -anthropometric -anthropometrical -anthropomorphic -anthropomorphous -anthroponomical -anthropopathic -anthropophagic -anthroposophic -anthroposophical -anti -antiagglutinant -antiagglutination -antiagglutinative -antiaggression -antiaggressive -antiaircraft -antialcoholic -antiannexation -antiaphrodisiac -antiaristocracy -antiaristocratic -antiaristocratical -antiatheism -antiatheistic -antiatheistical -antibacchic -antibacterial -antiballistic -antibilious -antiblastic -anticapitalistic -anticarious -anticaste -anticatalytic -anticatarrhal -anticensorial -anticensorious -anticentralization -anticeremonial -anticeremonious -antichloristic -anticholinergic -anticipant -anticipatable -anticipative -anticipatory -anticivic -anticivil -anticivilian -anticlassical -anticlastic -anticlergy -anticlerical -anticlimactic -anticlinal -anticlogging -anticoagulant -anticoagulating -anticommercial -anticommercialistic -anticommunistic -anticommunistical -anticommutative -anticonfederative -anticonservative -anticonstitution -anticonstitutional -anticonstitutionalist -anticontagious -anticonvention -anticonventional -anticorrosion -anticosmetics -anticreation -anticreational -anticreative -anticritical -anticryptic -anticyclic -anticyclical -anticyclonic -anticynical -antidancing -antidemocratic -antidemocratical -antidiphtheritic -antidiuretic -antidivorce -antidogmatic -antidogmatical -antidomestic -antidotal -antidotical -antidraft -antidromic -antidynastic -antidynastical -antidynasty -antiecclesiastical -antieducation -antieducational -antiegoistic -antiegoistical -antiegotistic -antiegotistical -antiempirical -antienergistic -antienthusiastic -antienzymatic -antierosion -antierosive -antievolution -antievolutional -antievolutionary -antievolutionistic -antiexpansion -antiexpressionistic -antiexpressive -antifebrile -antifeministic -antiferromagnetic -antifeudal -antifeudalistic -antifeudalization -antifoaming -antifouling -antifrictional -antifungal -antigambling -antigenic -antignostic -antignostical -antigovernment -antigovernmental -antigraft -antigrammatical -antigravitation -antigravitational -antihierarchal -antihierarchic -antihierarchical -antihistaminic -antihuman -antihumanistic -antihygienic -antihypnotic -antiketogenic -antilabor -antileague -antileveling -antilevelling -antiliberal -antiliberalistic -antiliquor -antiliturgic -antiliturgical -antiliturgy -antilogarithmic -antilogistic -antilottery -antimachination -antimachine -antimachinery -antimagnetic -antimalarial -antimaterialistic -antimechanistic -antimechanization -antimediaeval -antimedical -antimedication -antimedicative -antimedicine -antimedieval -antimerger -antimerging -antimeric -antimethod -antimethodic -antimethodical -antimicrobial -antimilitaristic -antimilitary -antiministerial -antimissile -antimodern -antimodernistic -antimodernization -antimonarch -antimonarchal -antimonarchial -antimonarchic -antimonarchical -antimonarchistic -antimonarchy -antimonial -antimonic -antimonopolistic -antimonopolization -antimonopoly -antimonous -antimoral -antimoralistic -antimorality -antimusical -antimystic -antimystical -antinarcotic -antinational -antinationalistic -antinationalization -antinatural -antinaturalistic -antineuralgic -antineuritic -antineutral -antinihilistic -antinodal -antinoise -antinomian -antinomic -antinomical -antinormal -antiodontalgic -antioptimistic -antioptimistical -antiorthodox -antioxidizing -antioxygenating -antipacifistic -antipapacy -antipapal -antipapistic -antipapistical -antiparallel -antiparasitic -antiparasitical -antiparliament -antiparliamentary -antipathetic -antipathogenic -antipatriarchal -antipatriotic -antipedal -antiperiodic -antiperistaltic -antipersonnel -antipestilence -antipestilent -antipestilential -antipetalous -antiphilosophic -antiphilosophical -antiphilosophy -antiphlogistic -antiphonal -antiphonic -antiphrastic -antiphrastical -antiphysical -antiplastic -antipodal -antipodean -antipoetic -antipoetical -antipolar -antipolitical -antipolitics -antipollution -antipopularization -antipoverty -antipragmatic -antipragmatical -antipriest -antipriesthood -antiproductive -antiproductivity -antiprohibition -antipruritic -antipyretic -antipyrotic -antiquarian -antiquated -antirachitic -antiracial -antiradiant -antiradiating -antiradiation -antirational -antirationalistic -antireacting -antireaction -antireactive -antirealistic -antireality -antired -antireducing -antireduction -antireductive -antireflexive -antireform -antireforming -antireligion -antireligious -antirent -antirepublican -antirestoration -antirevolution -antirheumatic -antiritual -antiritualistic -antiromance -antiromantic -antiroyal -antirust -antisceptical -antischolastic -antischool -antiscience -antiscientific -antiscorbutic -antiscriptural -antisensitizing -antisensuous -antisepalous -antiseptic -antisiccative -antiskeptical -antiskid -antiskidding -antislavery -antislip -antismoking -antisocial -antisolar -antisophistic -antisoporific -antispasmodic -antispiritual -antispiritualistic -antisplitting -antispreading -antistalling -antistate -antistatic -antistimulant -antistrike -antistrophal -antistrophic -antisubmarine -antisuffrage -antisupernatural -antisupernaturalistic -antisymmetric -antisymmetrical -antisymmetry -antisyndication -antisynod -antisyphilitic -antitank -antitarnish -antitarnishing -antitartaric -antitax -antitaxation -antitemperance -antitheological -antitheologizing -antitheology -antithetic -antithetical -antitonic -antitoxic -antitradition -antitraditional -antituberculous -antitussive -antitypic -antitypical -antiunion -antiutilitarian -antivaccination -antiviral -antivirus -antiwar -antlered -antlerless -antliate -antlike -antodontalgic -antonomastic -antonomastical -antonymous -antral -antrorse -anucleate -anuretic -anuric -anurous -anxious -aona -aoristic -aortal -aortic -apartmental -apatetic -apathetic -apelike -aperient -aperiodic -aperitive -apertural -apertured -apetalous -aphacic -aphaeretic -aphakial -aphakic -aphanitic -aphasic -aphelian -apheliotropic -apheretic -aphetic -aphidian -aphidious -aphonic -aphorismatic -aphorismic -aphoristic -aphotic -aphyllous -apiaceous -apian -apiarian -apical -apiculate -apicultural -apish -apivorous -aplacental -aplanatic -aplastic -aplitic -apneal -apneic -apneustic -apnoeal -apnoeic -apocalyptic -apocarpous -apocatastatic -apocentric -apochromatic -apocopic -apocrine -apocryphal -apocynaceous -apodal -apodemal -apodictic -apodous -apogamic -apogamous -apogeal -apogeotropic -apographic -apographical -apokatastatic -apolitical -apologal -apologetic -apomictic -aponeurotic -apopemptic -apophonic -apophthegmatic -apophthegmatical -apophysate -apophyseal -apophysial -apoplectic -apoplectiform -apoplectoid -aposematic -aposiopetic -aposporic -apostolic -apostrophic -apothecial -apothegmatic -apothegmatical -apotropaic -appalling -apparent -apparitional -appassionato -appauma -appealable -appealing -appeasable -appellate -appendaged -appendant -appendiceal -appendicular -appendiculate -apperceptive -appetitive -appetizing -applaudable -applausive -appliable -applicable -applicative -applicatory -applied -appliqua -appointable -appointed -appointive -apportionable -apposable -apposite -appositely -appositional -appositive -appositively -appraisable -appraisive -appreciable -appreciational -appreciative -appreciatory -apprehensible -apprehensive -appressed -approachable -approachless -approbative -appropriable -appropriate -appropriative -approvable -approximal -approximate -appulsive -appurtenant -apraxic -aprioristic -apronlike -apropos -aprowl -apsidal -apt -apteral -apterial -apterous -apterygial -apterygote -aptitudinal -apyretic -aquarial -aquarian -aquatic -aqueous -aquicultural -aquiline -aquiver -arabinosic -arable -araceous -arachidic -arachnidan -araeostyle -araeosystyle -araliaceous -araneiform -araneose -araucarian -arbitrable -arbitral -arbitrary -arbitrational -arbitrative -arboraceous -arboreal -arbored -arboreous -arborescent -arboresque -arboricultural -arborous -arcane -arcform -archaeological -archaic -archaistic -archangelic -archangelical -archdiocesan -archducal -arched -archegonial -archegoniate -archenteric -archeologic -archeological -archesporial -archetypal -archetypic -archiblastic -archidiaconal -archiepiscopal -archipelagic -archiplasmic -architectonic -architectural -architraval -architraved -archival -archoplasmic -arcifinious -arciform -arctic -arcuate -ardeid -ardent -arduous -areal -arenaceous -arenicolous -arenose -areocentric -areolar -areolate -areologic -areological -areostyle -areosystyle -argental -argenteous -argentic -argentiferous -argentine -argentous -argillaceous -argilliferous -argillitic -argotic -arguable -argumentatious -argumentative -argyle -arhythmic -arhythmical -arid -arillate -arilloid -ariose -aristate -aristocratic -aristolochiaceous -arkosic -armed -armigeral -armigerous -armillary -armipotent -armless -armlike -armored -armorial -armorplated -armoured -aroid -aroideous -aromatic -arousable -arpeggiated -arpeggioed -arrangeable -arrant -arrased -arrenotokous -arrestable -arresting -arrestive -arrhenotokous -arrhythmic -arrhythmical -arrogant -arrowless -arrowlike -arrowy -arrythmic -arrythmical -arsenical -arsenious -arseniuretted -arseno -arsenous -arsino -arterial -arteriosclerotic -arteriovenous -artesian -artful -arthralgic -arthritic -arthritical -arthrodial -arthrodic -arthrodiran -arthrodirous -arthromeric -arthrosporic -arthrosporous -articulable -articular -articulate -articulated -articulating -articulative -articulatory -artier -artiest -artifactitious -artificial -artiodactylous -artisanal -artistic -artless -arty -arumlike -arundinaceous -aryballoid -aryepiglottic -arytenoepiglottic -arytenoid -arytenoidal -arythmic -arythmical -asbestine -asbestoid -asbestoidal -asbestous -ascendable -ascendant -ascendible -ascending -ascensional -ascensive -ascertainable -ascetical -ascitic -ascitical -asclepiadaceous -ascocarpous -ascogenous -ascogonial -ascomycetous -asconoid -ascosporic -ascribable -asemic -asepalous -aseptic -asexual -ashake -ashamed -ashen -ashier -ashiest -ashless -ashy -asinine -asocial -asomatous -asparaginous -aspectant -aspectual -aspersive -asphaltic -asphaltlike -aspherical -asphyxial -asphyxiant -aspiratory -aspish -assailable -assassinative -assaultable -assayable -assentient -assentive -asserted -assertible -assertional -assertive -assertory -assessable -assessorial -asseverative -assiduous -assignable -assimilable -assimilative -assistive -asslike -associable -associational -associationist -associationistic -associative -assonant -assonantal -assonantic -assortative -assorted -assortive -assuasive -assumable -assumed -assuming -assumptive -assured -assurgent -astable -astatic -astay -asteraceous -asteriated -asterismal -asternal -asteroidal -asthenic -asthenopic -asthmatic -asthmatoid -astigmatic -astigmic -astir -astomatous -astonied -astonishing -astounding -astragalar -astral -astrictive -astringent -astrographic -astrolabical -astrological -astromantic -astrometric -astrometrical -astronautic -astronomical -astrophotographic -astrophysical -astucious -astute -astylar -aswarm -asyllabic -asymmetric -asymptomatic -asymptotic -asynchronous -asyndetic -asyntactic -atactic -ataractic -ataraxic -atavic -atavistic -ataxic -atelectatic -atelic -ateliotic -atheistic -athematic -atherine -athermanous -atherosclerotic -athetoid -athetosic -athirst -athletic -athonite -athrill -atingle -atlantal -atmophile -atmosphereless -atmospheric -atomic -atomistic -atomistical -atonable -atonal -atonalistic -atoneable -atonic -atrabilious -atresic -atrial -atrioventricular -atrip -atrocious -atrophic -atrophied -atry -attachable -attached -attackable -attainable -attemptable -attending -attent -attentional -attentive -attenuant -attestable -attestative -attested -attestive -attingent -attired -attitudinal -attractable -attractive -attrahent -attributable -attributive -attrite -attritional -attritive -atwitter -atypical -auctionary -auctorial -audacious -audible -audient -audiogenic -audiometric -audiovisual -auditive -auditory -augitic -augmentable -augmentative -augmented -augural -august -auld -aulic -aummbulatory -auntlike -aural -aureate -aureoline -auric -auricled -auricular -auriculate -auriculoventricular -auriferous -aurific -auriform -auriscopic -auroral -aurorean -aurous -auscultative -auspicial -auspicious -austenitic -austere -austral -autacoidal -autarchic -autarchical -autarkic -autarkical -autecious -autecologic -autecological -authentic -authentical -authigenic -authorial -authorisable -authorised -authoritarian -authoritative -authorizable -authorized -authorless -autistic -autobiographical -autocatalytic -autocephalous -autochthonous -autocratic -autodidactic -autoecious -autogamic -autogamous -autogenetic -autogenous -autographic -autographical -autohypnotic -autoicous -autoimmune -autokinetic -autoloading -autolytic -automatic -automatous -automorphic -automotive -autonomic -autonomous -autophytic -autoplastic -autopolyploid -autopotamic -autopsic -autopsical -autosuggestible -autosuggestive -autotelic -autotomic -autotoxic -autotrophic -autotypic -autumnal -auxetic -auxiliary -auxilytic -auxochromic -available -avaricious -avellan -avenaceous -avengeful -averse -aversive -avertable -avertible -avian -aviatic -avicularian -avid -avifaunal -avirulent -avitaminotic -avocatory -avoidable -avowable -avowed -avulsed -avuncular -aw -awakeable -awakenable -awakening -aware -awed -aweigh -aweless -awesome -awful -awhirl -awkward -awless -awned -awninged -awnless -axenic -axial -axile -axillary -axiological -axiomatic -axised -axled -axlike -axonal -axonometric -azeotropic -azido -azimuthal -azo -azoic -azonal -azonic -azoted -azotic -azygous -baboonish -babyish -babylike -baccate -bacchanalian -bacchantic -bacciferous -bacciform -baccivorous -bachelorlike -bachelorly -bacillary -backboned -backboneless -backbreaking -backdoor -backed -backgeared -backhanded -backless -backmost -backstrapped -backswept -backward -bacterial -bactericidal -bacteriologic -bacteriological -bacteriophagic -bacterioscopic -bacterioscopical -bacteriostatic -bacteroid -baculiform -baculine -baculitic -bad -baddish -badgeless -badgerly -baetylic -baffling -baggier -baggiest -baggy -bagwigged -bailable -bairnish -bairnly -baith -bakerlike -balanceable -balaustine -balconied -bald -baldachined -baldheaded -balding -baldish -baldpated -baldricked -baleful -baleless -balkier -balkiest -balky -balladic -balladlike -ballastic -balletic -ballistic -ballistocardiographic -balloonlike -bally -balmier -balmiest -balmlike -balmy -balneal -balneologic -balneological -balsamaceous -balsamic -balsamiferous -balsaminaceous -balsamy -balustered -balustraded -banal -bananas -banausic -bandanaed -bandannaed -bandboxical -bandboxy -banded -bandless -bandoleered -bandoliered -bandy -baneful -bangled -bangup -bankable -bannered -bannerless -bannerlike -baptismal -baptizable -barbaric -barbarous -barbate -barbed -barbellate -barbituric -barbless -bardic -bardier -bardiest -bardish -bardlike -bardy -bare -bared -barefaced -barefisted -barefoot -barefooted -bareheaded -bareknuckle -barelegged -barer -barest -baric -baring -barish -barkier -barkiest -barkless -barky -barless -barmier -barmiest -barmy -barnacled -barnlike -barographic -barometric -barometrical -baronetical -baronial -baroscopic -baroscopical -barotropic -barrable -barratrous -barred -barren -barristerial -barruly -barry -bartizaned -barwise -barytic -basal -basaltic -basaltine -baseborn -basehearted -baseless -baser -basest -bashful -basic -basidial -basidiomycetous -basidiosporous -basifixed -basilar -basilic -basiliscan -basiliscine -basined -basinlike -basipetal -basketlike -basophil -basophilic -bassy -bastardly -bastionary -bastioned -bathetic -bathless -batholithic -batholitic -bathyal -bathymetric -bathypelagic -batlike -bats -battailous -battier -battiest -battled -battlemented -battlesome -battological -batty -batwing -baulky -bausond -bawdier -bawdiest -bawdy -beachless -beachy -beaconless -beaded -beadflush -beadier -beadiest -beadlike -beady -beaked -beakless -beaklike -beaky -beamier -beamiest -beaming -beamish -beamless -beamlike -beamy -beanlike -bearable -bearded -beardless -beardlike -bearish -bearlike -beastlier -beastliest -beastlike -beastly -beatable -beaten -beatific -beauish -beauteous -beautiful -beaverish -beaverlike -becalmed -becoming -beddable -bedfast -bedless -bedlike -bedrid -bedridden -beechen -beechy -beefier -beefiest -beefless -beefy -beelike -beerier -beeriest -beery -beetleheaded -beetlike -begabled -beggarly -behavioral -behavioristic -behenic -beholdable -beholden -belated -beld -believable -belletristic -bellicose -belligerent -bellowslike -bellylike -beloid -belonoid -beloved -belowground -belted -beltless -bemazed -bemused -benchless -bendable -bendwise -bendy -beneaped -benedictional -benedictory -benefic -beneficeless -beneficent -beneficial -benevolent -benighted -benign -benignant -benmost -bent -benthal -benthic -benthonic -benzal -benzoic -benzylic -benzylidene -bequeathable -berberidaceous -bereft -beribboned -beriberic -berryless -berrylike -berserk -beryline -besetting -besotted -bespectacled -bespoke -besprent -best -bestial -betrothed -better -betulaceous -bevilled -bewhiskered -bezanty -biangular -biannual -biannulate -biarticulate -biased -biauricular -biauriculate -biaxial -bibasic -bibless -biblical -biblike -bibliographic -bibliographical -bibliolatrous -bibliological -bibliomaniacal -bibliopegic -bibliopegistic -bibliopegistical -bibliophagous -bibliophilic -bibliophilistic -bibliopolar -bibliopolic -bibliopolical -bibliopolistic -bibliotaphic -bibliothecal -bibliotherapeutic -bibliotic -bibulous -bicameral -bicapsular -bicentenary -bicentennial -bicentric -bicephalous -bicipital -bicollateral -bicolor -bicompact -biconcave -biconical -biconvex -bicorn -bicorporal -bicuspid -bicyclic -biddable -bidentate -bidenticulate -bidirectional -biennial -bienvenu -bienvenue -bifacial -bifarious -bifid -bifilar -biflagellate -biflex -bifocal -bifoliate -bifoliolate -biforate -biforked -biform -bifunctional -big -bigamistic -bigamous -bigeneric -bigger -biggest -biggish -bigheaded -bignoniaceous -bigoted -bigwigged -bihourly -bijugate -bilabial -bilabiate -bilateral -bilgier -bilgiest -bilgy -biliary -bilinear -bilineate -bilingual -bilious -biliteral -billable -billety -billionth -billowier -billowiest -billowy -bilobate -bilocular -bimaculate -bimanous -bimanual -bimensal -bimestrial -bimetallic -bimetallistic -bimillenary -bimodal -bimolecular -bimonthly -bimotored -binal -binary -binate -binaural -bindable -binocular -binominal -binucleate -biobibliographic -biobibliographical -biocellate -biocentric -biochemic -biochemical -bioclimatic -bioclimatological -biodegradable -biodynamic -biodynamical -bioecologic -bioecological -bioelectric -bioelectrogenetic -biogenetic -biogenic -biogeochemical -biogeographic -biogeographical -biographical -biological -bioluminescent -biolytic -biomagnetic -biomedical -biometric -biometrical -biomorphic -bionic -bionomic -bionomical -biophysical -bioplasmic -biopsychic -bioptic -bioscopic -biosocial -biostatic -biostatical -biotechnological -biotic -biotitic -biotypic -biparietal -biparous -bipartisan -bipartite -biparty -bipectinate -bipedal -bipetalous -bipinnate -bipolar -bipyramidal -biquadratic -biquarterly -biracial -biradial -biramous -birchen -birdbrained -birdless -birdlike -birectangular -birefringent -biscuitlike -bisectional -biserial -biserrate -bisexual -bishopless -bishoplike -bismuthal -bismuthic -bismuthous -bissextile -bistable -bistered -bistred -bisulcate -bisymmetric -bisymmetrical -bitable -bitchier -bitchiest -bitchy -biteable -biting -bitless -bitonal -bitter -bitterish -bitty -bituminoid -bituminous -biunique -bivalent -bivalvular -bivariate -bivoltine -biweekly -biyearly -bizarre -bizonal -black -blackberrylike -blackguardly -blackish -bladdery -bladeless -blae -blamable -blameable -blamed -blameful -blameless -blameworthy -blanchi -bland -blank -blanketless -blanketlike -blankety -blas -blasa -blasphemous -blasted -blastemal -blastematic -blastocoelic -blastodermatic -blastodermic -blastomeric -blastomycotic -blastoporic -blastostylar -blastular -blasty -blatant -blate -bleachable -bleak -bleakish -blearier -bleariest -bleary -blebby -bleeding -blennioid -blepharitic -blessed -blier -blightingly -blind -blinking -blissful -blissless -blistery -blithe -blitheful -blithering -blithesome -blizzardly -blizzardy -bloated -blocked -blockheaded -blockier -blockiest -blockish -blocky -blond -blondish -bloodcurdling -blooded -bloodguilty -bloodier -bloodless -bloodlike -bloodshot -bloodstained -bloodsucking -bloodthirsty -bloody -bloodying -bloomed -bloomier -bloomiest -bloomless -bloomy -blossomless -blossomy -blotchier -blotchiest -blotchy -blotless -blotto -blotty -blouselike -blousier -blousiest -blousy -blowier -blowiest -blowsier -blowsiest -blowsy -blowy -blowzed -blowzier -blowziest -blowzy -blubbery -bluebelled -bluecoated -blueish -bluffable -bluish -blunderful -blunt -blurry -blushful -blushless -blusterous -blustery -boardable -boardlike -boarish -boastful -boastless -boatable -boatless -bodger -bodiless -bodily -boggish -boggy -bogus -boilable -boiled -boilerless -boiling -boisterous -bolar -bold -boldhearted -bolectioned -bolographic -bolometric -bolshie -boltless -boltlike -bomb -bomba -bombable -bombacaceous -bombastic -bombous -bombproof -bonded -bondholding -bondless -boned -boneheaded -boneless -bonelike -bonhomous -bonier -boniest -bonkers -bonnetless -bonnetlike -bonnier -bonniest -bonny -bony -bonzer -bookish -bookless -booklike -boolean -boomless -boonless -boorish -booted -bootless -bootyless -boozier -booziest -boozy -borable -boracic -boraginaceous -bordered -borderless -boreable -boreal -boresome -boric -bornitic -boronic -borty -bosker -boskier -boskiest -bosky -bosomed -bosomy -bosseyed -bossier -bossiest -bossy -botanical -botchier -botchiest -botchy -bothersome -botryoidal -botryomycotic -botryose -bottlelike -bottomless -bottommost -bouffant -boughless -boughten -bouilli -boulle -bounceable -bouncing -bouncy -boundable -bounded -bounden -boundless -bounteous -bountiful -bountyless -bournless -boustrophedon -bousy -bovaristic -bovid -bovine -bowelless -bowerlike -bowery -bowlegged -bowless -bowlike -bowllike -boxlike -boyish -braceleted -brachial -brachiate -brachistochronic -brachycephalic -brachycerous -brachycranic -brachydactylic -brachydactylous -brachypterous -brachystomatous -brachyurous -bracing -brackened -brackish -bracteal -bracteate -bracted -bracteolate -bractless -bradyauxetic -bradycardic -bradykinetic -bradytelic -braggadocian -bragless -braided -brainier -brainiest -brainless -brainlike -brainsick -brainy -brakeless -bramblier -brambliest -brambly -branchial -branchiate -branchiform -branchiopneustic -branchiostegous -branchless -branchlike -brandless -brankie -brankier -brankiest -branky -brannier -branniest -branny -brash -brashier -brashiest -brashy -brassbound -brassicaceous -brassier -brassiest -brassish -brassy -brattier -brattiest -brattish -bratty -brave -braver -braving -braw -brawny -brazen -breadless -breadthless -breakable -breakfastless -breakfront -breakless -breakneck -breastless -breathable -breathed -breathier -breathiest -breathless -breathtaking -breathy -breccial -breechless -breechloading -breedable -breezeless -breezelike -breezier -breeziest -breezy -bregmatic -brevicaudate -brevipennate -brevirostrate -briary -bribable -bribeable -brickier -brickiest -brickish -brickle -bricklike -brickred -bricky -bridal -brideless -bridelike -bridgeable -bridgeless -bridgelike -bridleless -bridlewise -brief -briefless -briery -brigandish -bright -brightish -brilliant -brilliantined -brimful -brimless -brimstony -brindled -brineless -brinier -briniest -brinish -brinkless -briny -brisant -brisk -bristleless -bristlelike -bristly -brittle -broad -broadband -broadish -broch -brocha -broguish -brokenhearted -bromeliaceous -bromic -bromidic -bronchial -bronchiectatic -bronchiolar -bronchitic -bronchopneumonic -bronchoscopic -bronzelike -bronzy -broodier -broodiest -broodless -broody -brookable -brookless -brooklike -broomy -brosy -brothellike -brotherless -brotherlike -brotherly -brothy -brouilla -browless -brownish -browny -brumal -brummagem -brumous -brunet -brushable -brushed -brushless -brushlike -brushy -brusque -brut -brutal -brutalitarian -brutelike -brutish -bryological -bryophytic -bubaline -bubbleless -bubblelike -bubblier -bubbliest -bubbly -buboed -bubonic -buccal -buccaneerish -buccinatory -buccolingual -bucked -buckish -buckleless -buckshee -bucktoothed -buckwheatlike -bucolic -budgetary -budless -budlike -buffable -buffleheaded -buffoonish -bugbearish -buggier -buggiest -bugs -buhl -buildable -buildingless -buirdly -bulbar -bulbiferous -bulbless -bulbourethral -bulbous -bulgy -bulimiac -bulimic -bulkheaded -bulkier -bulkiest -bulky -bullate -bulletheaded -bulletless -bulletlike -bulletproof -bullheaded -bullionless -bullish -bulllike -bullous -bullyable -bumbling -bumpier -bumpiest -bumpkinish -bumpkinly -bumptious -bumpy -bunchier -bunchiest -bunchy -bungaloid -bunglesome -bunodont -bunted -buoyant -burdened -burdenless -burdensome -bureaucratic -burghal -burglarious -burglarproof -burlier -burliest -burly -burnable -burned -burning -burnishable -burnoosed -burnoused -burrier -burriest -burry -bursal -bursarial -bursate -burseraceous -bursiform -burthensome -bushed -bushier -bushiest -bushless -bushlike -bushy -busied -busier -busiest -businesslike -busked -buskined -bustier -bustiest -bustled -busy -busying -butch -butcherly -buteonine -butlerlike -butterfingered -butterflylike -butterless -butterlike -buttery -buttocked -buttonless -buttonlike -buttony -buttressless -buttresslike -butyraceous -butyric -butyryl -buxom -buyable -buzzardlike -buzzardly -bygone -byssaceous -byssal -byssoid -cabalistic -cabbagelike -cabbagy -cabbalistic -cabbalistical -cablelaid -cablelike -caboched -caboshed -cacciatore -cachectic -cachectical -cachexic -cachinnatory -cacodaemonic -cacodemonic -cacodylic -cacoethic -cacogenic -cacographic -cacographical -cacophonic -cacophonous -cactaceous -cactoid -cactuslike -cacuminal -cadastral -cadaveric -cadaverous -caddiced -caddised -caddish -cadent -cadential -cadgy -cadmic -caducean -caducous -caecal -caenogenetic -caesalpiniaceous -caespitose -caesural -caesuric -caffeinic -caftaned -cageless -cagelike -cagey -cagier -cagiest -cagmag -cagy -cairny -caissoned -calamitean -calamitoid -calamitous -calathiform -calcaneal -calcanean -calcarate -calcareous -calcariferous -calced -calceiform -calceolate -calcic -calcicolous -calciferous -calcific -calcifugous -calcinable -calcinatory -calciphilic -calciphobic -calciphobous -calcitic -calculable -calculated -calculating -calculational -calculative -calculatory -calculous -calefacient -calefactive -calefactory -calendrical -calentural -calenturish -calescent -calfless -calflike -calibered -calibred -calicoed -caliginous -caliphal -calisthenic -calisthenical -callable -calligraphic -calligraphical -calliopean -callipygian -callisthenic -callithumpian -callosal -callose -callous -callow -calm -calmative -calmier -calmiest -calmy -calorescent -caloric -calorifacient -calorific -calorimetric -calorimetrical -calpacked -calumnious -calvous -calvus -calycate -calyciform -calycine -calyptrate -camailed -cambial -camellike -cameral -cameralistic -campanological -campanulaceous -campanulate -campestral -camphoric -campimetrical -campodeiform -campy -campylotropous -canalicular -canaliculate -canaliculated -cancelable -cancellate -cancered -cancerous -cancrine -cancrizans -cancroid -candent -candescent -candid -candied -candylike -canelike -canescent -canicular -canine -cankered -cankerous -cannabic -canned -cannibalistic -cannier -canniest -cannular -canny -canonical -canonistic -canonistical -canonlike -canorous -cantabile -cantankerous -canthal -cantharidal -cantharidean -cantharidian -cantic -cantish -cantonal -cantoral -cantorial -cantoris -cantorous -canty -canular -canvaslike -cany -capable -capacious -capacitive -caped -capillaceous -capillary -capillatus -capitalisable -capitalistic -capitalizable -capitate -capitative -capiteaux -capitular -capitulatory -capless -capparidaceous -capreolate -capricious -caprifoliaceous -caprine -caprylic -capsizable -capsular -capsulate -captionless -captious -captivative -capturable -capuched -carangoid -carapaced -carapacial -caravanserial -carbamic -carbolated -carbolic -carbonaceous -carbonic -carboniferous -carbonisable -carbonizable -carbonless -carbonous -carbonylic -carboxyl -carboxylic -carboyed -carbuncled -carbuncular -carcaneted -carcanetted -carcassless -carcinogenic -carcinomatoid -cardiac -cardiographic -cardiologic -cardiological -cardiotonic -cardiovascular -carditic -carduaceous -cardueline -carefree -careful -careless -caressive -careworn -caricaturable -carinal -carinate -carinulate -cariogenic -carious -caritative -caritive -carking -carless -carlish -carminative -carnal -carnassial -carneous -carniferous -carnivalesque -carnivallike -carnivoral -carnivorous -carnose -carnous -carotidal -carpellary -carpellate -carpetless -carping -carpogonial -carpological -carpometacarpal -carpophagous -carposporic -carriable -carroty -carryable -carsick -cartable -cartilaginous -cartographic -cartographical -carucated -caruncular -carunculate -carunculous -caryatidal -caryophyllaceous -casebound -caseless -casemated -casemented -caseous -cashable -casketlike -casklike -casqued -castable -casteless -castellanus -castellated -castellatus -casterless -castigative -castigatory -castled -castlelike -castoff -casual -casuistic -catabatic -catabolic -catacaustic -catachrestic -catachrestical -cataclinal -cataclysmic -catacumbal -catadioptric -catadromous -catagenetic -catalectic -cataleptic -catalogic -catalytic -catalytical -catamenial -catamnestic -cataphoretic -cataphracted -cataphractic -cataphyllary -cataplastic -catapultic -cataractal -cataracted -cataractous -catarrhal -catarrhed -catarrhine -catarrhous -catastrophal -catastrophic -catastrophical -catatonic -catchable -catchier -catchiest -catching -catchpenny -catchweight -catchy -catechetical -catechisable -catechismal -catechistic -catechistical -catechizable -catechumenal -catechumenical -categorical -catenulate -caterpillarlike -catfaced -catfooted -cathartic -cathectic -cathedrallike -catheptic -cathodic -cathodoluminescent -catholic -cationic -catkinate -catlike -catoptric -catoptrical -catrigged -cattish -cattleless -catty -caudal -caudate -cauld -caulescent -caulicolous -cauliflorous -cauliform -cauline -caulocarpous -caulomic -causable -causal -causational -causative -causeless -caustic -caustical -cauterant -cautionary -cautious -cavalier -cavate -cavelike -cavernous -cavicorn -cavitied -cayenned -ceaseless -cecal -cedarn -ceilinged -celebrated -celebrative -celebratory -celestial -celiac -celibatic -cellarless -cellular -cellulate -cellulolytic -cellulosic -cellulous -cementitious -cementless -cemeterial -cenobitic -cenogenetic -cenotaphic -censerless -censorable -censorial -censorian -censorious -censual -censurable -censureless -centaurial -centaurian -centauric -centenary -centennial -centerable -centered -centerless -centigrade -centillionth -centipedal -centonical -central -centralistic -centreless -centric -centrifugal -centripetal -centrobaric -centroclinal -centrodorsal -centroidal -centrolecithal -centrosomic -centrosymmetric -centum -centuple -centurial -centuried -ceorlish -cephalalgic -cephalate -cephalic -cephalometric -cephalothoracic -cephalous -ceraceous -cerated -ceratoid -cercal -cercarial -cercarian -cercelae -cerebellar -cerebral -cerebrational -cerebric -cerebroid -cerebrospinal -cerebrotonic -cerebrovascular -cerebrovisceral -cered -cereless -ceremonial -ceremonious -cereous -ceric -ceriferous -cernuous -cerographic -cerographical -ceroplastic -cerotic -cerous -certifiable -certificatory -certified -ceruminous -cervical -cervine -cespitose -cessative -cestoid -cesural -cetacean -cetological -chadless -chaetophorous -chaetotactic -chaffier -chaffiest -chaffless -chafflike -chaffy -chainless -chainlike -chairborne -chairless -chalazal -chalazian -chalcedonic -chalcedonous -chalcographic -chalcographical -chalcolithic -chalcophile -chaliced -chalkier -chalkiest -chalklike -chalkstony -chalky -challengeable -challenging -chalybeate -chameleonic -chameleonlike -champertous -championless -championlike -champlev -champleva -champy -chanceful -chanceled -chanceless -chancelled -chancier -chanciest -chancroidal -chancrous -chancy -changable -changeable -changeful -changeless -chantable -chaotic -chapeless -chaperonless -chapfallen -chapleted -chapteral -characterful -characterisable -characterizable -characterless -charcoaly -chargable -chargeable -charged -chargeful -chargeless -charier -chariest -chariotlike -charismatic -charitable -charityless -charlatanic -charlatanical -charlatanish -charlatanistic -charming -charmless -charnu -charquid -charrier -charriest -charry -chartable -chartaceous -charterable -charterless -chartless -chartographic -chartographical -chary -chaseable -chasmal -chasmed -chasmic -chasmogamic -chasmogamous -chasmy -chaste -chaster -chastest -chastisable -chasubled -chatoyant -chattable -chattery -chattier -chattiest -chatty -chauvinistic -cheap -cheatable -checkable -checked -checkered -checkless -checky -cheekier -cheekiest -cheekless -cheeky -cheerful -cheerier -cheeriest -cheerless -cheerly -cheery -cheesed -cheeseparing -cheesy -cheliceral -chelicerate -cheliferous -cheliform -chemic -chemigraphic -chemiluminescent -chemokinetic -chemoreceptive -chemosmotic -chemosynthetic -chemotactic -chemotherapeutic -chemotrophic -chemotropic -chemurgic -chemurgical -chenopodiaceous -chequered -chequy -cherishable -cherrylike -cherty -cherubic -cherubical -chestier -chestiest -chestnutty -chesty -chevroned -chevronny -chevronwise -chewable -chewier -chewiest -chewy -chiasmal -chiasmatype -chiasmic -chiastic -chic -chichi -chiefless -chiffonade -chignoned -chilblained -childing -childish -childless -childlike -childly -chiliadal -chiliadic -chiliastic -chillier -chilliest -chilly -chilopodous -chimerical -chimneyless -chimneylike -chin -chinchier -chinchiest -chinchy -chinless -chintzier -chintziest -chintzy -chippable -chipper -chipproof -chirographic -chirographical -chiromantic -chiromantical -chiropodial -chiropodical -chiropteran -chirpier -chirpiest -chirpy -chirrupy -chirurgic -chirurgical -chiselled -chisellike -chitchatty -chitinoid -chitinous -chivalric -chivalrous -chlamydate -chlamydeous -chlorellaceous -chloric -chlorinous -chloritic -chloroacetic -chloroformic -chlorophylloid -chlorophyllous -chloroplastic -chloroplatinic -chlorotic -chlorous -choanocytal -chocker -chocolaty -choiceless -choicer -choicest -choirlike -chokeable -chokey -chokier -chokiest -choking -choky -cholagogue -choleraic -choleric -cholinergic -chololithic -chondral -chondriosomal -chondritic -chondromatous -chondrosarcomatous -choosable -choosey -choosier -choosiest -choosy -chopfallen -choppier -choppiest -chopping -choppy -choragic -choral -chordal -chordamesodermal -chordamesodermic -chorded -chordotonal -choreal -choreatic -choreic -choreographic -choreoid -chorial -choriambic -choric -chorioallantoic -chorioid -chorionic -choripetalous -chorographic -chorographical -choroid -chrematistic -chrestomathic -chrismal -chromatic -chromatinic -chromatographic -chromatoid -chromatolytic -chromatophil -chromatophoric -chromic -chromogenic -chromolithographic -chromophil -chromophobe -chromophoric -chromophotographic -chromoplasmic -chromosomal -chromospheric -chromous -chronic -chronogrammatic -chronogrammatical -chronographic -chronological -chronometric -chronometrical -chronoscopic -chryselephantine -chrysocarpous -chrysolitic -chthonian -chubbier -chubbiest -chubby -chuckleheaded -chuffier -chuffiest -chuffy -chummier -chummiest -chummy -chumpish -chunderous -chunkier -chunkiest -chunky -churchier -churchiest -churchless -churchlike -churchly -churchmanly -churchy -churlish -churnable -churrigueresque -chylaceous -chylocaulous -chylophyllous -chylous -chymic -chymous -cibarial -cibarian -cibarious -cicatricial -cicatricose -cicatrisant -cicatrizant -cichoriaceous -ciderish -ciderlike -cigarless -ciliary -ciliate -ciliolate -cinchonic -cinderlike -cinderous -cindery -cinematic -cinematographic -cinerary -cinereous -cingular -cingulate -cingulated -cinnabarine -cinnamic -cinnamoned -cinnamonic -cinnamoyl -cinnamyl -cipherable -cir -circadian -circinate -circuital -circuitous -circulable -circular -circulative -circulatory -circumambient -circumambulatory -circumbasal -circumcolumnar -circumferential -circumfluent -circumfluous -circumgyratory -circumjacent -circumlocutional -circumlocutionary -circumlocutory -circumlunar -circumnavigable -circumnavigatory -circumnutatory -circumocular -circumpolar -circumrotatory -circumscissile -circumscribable -circumscriptive -circumsolar -circumspect -circumspective -circumstantial -circumvascular -circumventive -circumvolutory -cirrate -cirrhosed -cirrhotic -cirriform -cirrocumular -cirrocumulative -cirrocumulous -cirrose -cirrostrative -cirsoid -cisalpine -cisatlantic -cisela -cislunar -cismontane -cispadane -cissoidal -cistaceous -cisted -cisternal -cistic -cistophoric -citable -citatory -citeable -citied -citified -citizenly -citreous -citric -cityfied -cityless -citylike -civetlike -civic -civil -civilisable -civilisational -civilisatory -civilizable -civilizational -civilizatory -civilized -cladanthous -cladocarpous -claimable -claimless -clairvoyant -clamant -clamatorial -clamlike -clammy -clamorous -clandestine -clangorous -clankless -clanless -clannish -clarino -clasping -classable -classic -classical -classicistic -classier -classiest -classifiable -classificational -classificatory -classified -classless -classy -clastic -clathrate -clattery -claudicant -clausal -claustral -claustrophobic -clausular -claval -clavate -clavicular -claviculate -claviform -clawhammer -clawless -clayey -clayish -claylike -clean -cleanable -cleanlier -cleanliest -cleansable -clear -clearable -clearheaded -clearstoried -cleavable -clecha -cleidoic -cleistocarpous -cleistogamic -cleistogamous -clement -cleptobiotic -clerestoried -clergylike -clerical -clerkish -clerklier -clerkliest -clerklike -clerkly -cleruchial -cleruchic -clever -cleverish -clickless -cliental -clientless -cliffier -cliffiest -cliffless -cliffy -climactic -climant -climatic -climatologic -climatological -climbable -clinal -clingier -clingiest -clingy -clinical -clinographic -clinometric -clinquant -clippable -clipped -cliqueless -cliquey -cliquish -cliquy -clistocarpous -clithral -clitic -clitoral -clitoridean -cloacal -cloakless -clocklike -cloddish -cloddy -clodhopping -clodlike -cloggy -cloistered -cloisterless -cloisterlike -cloistral -clonic -cloque -closed -closefisted -clostridial -clostridian -clothbound -clothlike -clotty -clouded -cloudier -cloudiest -cloudless -cloudlike -cloudy -clovered -clovery -clownish -cloying -clubbable -clubbier -clubbiest -clubby -clubfooted -clucky -clueless -clumpish -clumplike -clumpy -clumsier -clumsiest -clumsy -clupeoid -clustered -clustery -clutchy -clypeal -clypeate -cnemial -cnemic -cnidogenous -cnidophorous -coachable -coactive -coadjutant -coadunate -coagulable -coagulatory -coalescent -coalier -coaliest -coalitional -coalless -coaly -coarctate -coarse -coarser -coarsest -coastal -coated -coatless -coaxial -cobaltic -cobaltous -cobwebby -coccal -coccic -cocciferous -coccoid -coccous -coccygeal -cochlear -cochleate -cockaded -cockeyed -cockier -cockiest -cockish -cocklike -cockneyish -cockneylike -cocksure -cocky -coconscious -codeless -codicillary -coeducational -coelanaglyphic -coeliac -coelomate -coenobitic -coenobitical -coenosarcal -coenosarcous -coequal -coercible -coercionary -coercive -coessential -coetaneous -coeternal -coeval -coexistent -coextensive -coffered -cofferlike -coffinless -cofinal -cogent -cogitable -cogitative -cognate -cognatic -cognisable -cognisant -cognitional -cognitive -cognizable -cognizant -cognominal -cognoscible -cognoscitive -coherent -cohesive -cohortative -coinable -coincident -coincidental -coinstantaneous -coinsurable -coital -cokelike -coky -colacobiotic -cold -coldish -coldturkey -coleopterous -colicky -coliform -colitic -collaborative -collapsable -collapsible -collarless -collatable -collative -collectable -collected -collectible -collectional -collective -collectivistic -collegiate -collenchymatous -collielike -colligative -collinear -collisional -collocative -colloidal -colloquial -collotypic -collusive -colonial -colonic -colonisable -colonizable -colonnaded -colorable -colorado -colorational -colored -colorfast -colorful -colorific -colorimetric -colorimetrical -coloristic -colorless -colory -colossal -colostral -colourable -colourational -coloured -colourful -colouristic -colourless -coltish -colubrine -columbic -columbous -columellar -columellate -columelliform -columnar -columnarized -columned -comate -comatic -comatose -combatable -combative -combinable -combinational -combinative -combinatorial -combless -combust -combustible -combustive -comeatable -comedial -comedic -comelier -comeliest -comely -cometary -comether -cometical -cometlike -comfier -comfiest -comfortable -comfortless -comfy -comic -comical -coming -comitative -comitial -commandable -commanding -commandless -commeasurable -commemorable -commemorational -commemorative -commemoratory -commenceable -commendable -commendatory -commensal -commensurable -commensurate -commentable -commentarial -commentative -commentatorial -commercial -commercialistic -comminative -comminatory -commiserable -commiserative -commissarial -commissional -commissive -commissural -committable -commodious -common -commonable -commonplace -commonsense -commonsensible -commonsensical -commorant -commotional -commotive -communal -communalistic -communicable -communicative -communicatory -communionable -communional -communistic -communistical -communital -commutable -commutative -commutual -comose -compact -compactible -companionable -companionate -companionless -companyless -comparable -comparative -compartmental -compassable -compassionate -compassionless -compassless -compatible -compatriotic -compellable -compellent -compendious -compensable -compensational -compensatory -competent -competitive -compilatory -complacent -complainable -complaisant -complanate -compleat -complected -complemental -complementary -complemented -completable -complete -completive -complex -complexional -complexioned -complexionless -compliable -compliant -complicated -complicative -complicitous -complimentable -complimentary -componental -componented -componential -compony -composable -composed -composite -compositional -compositive -compositorial -compossible -compotatory -compoundable -comprehensible -comprehensive -compressed -compressible -compressional -compressive -comprisable -comprizable -compromissary -compulsive -compulsory -compunctionless -compunctious -compurgatorial -compurgatory -computable -computational -computative -conative -concave -concealable -conceited -conceivable -concentrative -concentric -conceptacular -conceptional -conceptive -conceptual -conceptualistic -concerned -concertante -concertato -concerted -concessible -concessionary -concessive -conchal -conchate -conched -conchiferous -conchoidal -conchological -conciliable -conciliar -conciliatory -concinnous -concise -concludable -concludible -conclusional -conclusive -concoctive -concomitant -concordal -concordant -concordatory -concretionary -concretive -concubinary -concupiscent -concupiscible -concurrent -concussant -concussional -concussive -concyclic -condemnable -condemnatory -condensable -condensational -condensative -condensed -condensible -condescending -condescensive -condign -condimental -condimentary -conditional -conditioned -condolatory -condolent -condonable -conducible -conducive -conductible -conductional -conductive -conductorial -conductorless -conduplicate -condylar -condyloid -condylomatous -confabulatory -confarreate -confarreated -confederative -conferential -conferrable -conferval -confervalike -confervoid -confervous -confessable -confessional -confessionalian -confessionary -confident -confidential -confiding -configurational -configurative -confinable -confineable -confined -confineless -confirmable -confirmatory -confirmed -confiscable -confiscatory -conflagrant -conflagrative -conflictive -conflictory -confluent -confocal -conformable -conformal -confoundable -confounded -confraternal -confusable -confusional -confutable -confutative -congealable -congeneric -congenial -congenital -congestible -congestive -congestus -conglomeratic -conglutinant -conglutinative -congratulant -congratulational -congratulatory -congregational -congregative -congressional -congruent -congruous -conic -conical -conidial -conidian -conidiophorous -coniferous -conirostral -conjecturable -conjectural -conjoined -conjoint -conjugable -conjugal -conjugated -conjugational -conjugative -conjunct -conjunctional -conjunctival -conjunctive -conjunctural -connate -connatural -connectable -connected -connectible -connectional -connective -connexional -connivant -connivent -connotative -connotive -connubial -conoscopic -conquerable -consanguineous -consarned -conscienceless -conscientious -conscionable -conscious -conscriptional -consecrative -consecratory -consecutive -consensual -consentaneous -consentient -consequent -consequential -conservable -conservant -conservational -conservative -considerable -considerate -considered -consignable -consistent -consistorial -consistorian -consolable -consolatory -consolidative -consolingly -consolute -consonantal -consortable -consortial -conspecific -conspicuous -conspirative -conspiratorial -constant -constellatory -constituent -constitutional -constitutive -constrainable -constrained -constrictive -constringent -construable -constructible -constructional -constructive -consubstantial -consuetudinary -consular -consultable -consultative -consulting -consultive -consumable -consummative -consummatory -consumptive -contactual -contagioned -contagious -containable -contained -contaminable -contaminative -contaminous -contemnible -contemplable -contemplative -contemporaneous -contemporary -contemptible -contemptuous -contentable -contented -contentional -contentious -conterminous -contestable -contextual -contextural -contextured -contiguous -continental -contingent -continuable -continual -continuate -continuative -continuous -contoid -contorted -contortional -contortioned -contortionistic -contortive -contraceptive -contraclockwise -contracted -contractible -contractile -contractional -contractive -contractual -contractured -contradictable -contradictious -contradictive -contradictory -contradistinctive -contraorbital -contrapletal -contrapositive -contraptious -contrapuntal -contrarious -contrary -contrastable -contrastive -contrasty -contrasuggestible -contrate -contributable -contributional -contributive -contributorial -contributory -contrite -contrivable -contrived -controllable -controlless -controversial -controvertible -contumacious -contumelious -contusioned -contusive -convalescent -convallariaceous -convectional -convective -convenable -convenient -conventicular -conventional -conventual -conventually -convergent -conversable -conversant -conversational -converted -convertible -convertive -convex -conveyable -convictable -convictible -convictional -convictive -convincible -convincing -convivial -convocational -convocative -convoluted -convolutedly -convolutional -convolutionary -convolvulaceous -convulsant -convulsible -convulsionary -convulsive -cookable -cookless -cool -coolish -cooperative -coordinal -coordinative -copacetic -copasetic -copesetic -copious -coplanar -coppery -coppiced -copraemic -copremic -coprolaliac -coprolitic -coprophagous -coprophilic -coprophilous -coprophobic -copular -copulative -copyrightable -coquettish -coraciiform -coralliferous -corallike -coralline -coralloid -corbiculate -cordate -corded -cordial -cordiform -cordilleran -cordis -cordless -cordlike -corelative -coreless -coriaceous -corked -corkier -corkiest -corking -corklike -corky -cormlike -cormoid -cormophytic -cormous -cornaceous -corneal -corned -corneous -cornered -cornfed -corniculate -cornier -corniest -cornmeal -cornual -cornucopian -cornucopiate -cornute -corny -corolitic -corollaceous -corollate -coronagraphic -coronaled -coronalled -coronary -coronate -coroneted -coronetlike -coronographic -coroplastic -corporal -corporate -corporational -corporatist -corporative -corporeal -corpulent -corpuscular -corpusculous -corrasive -correctable -correctible -correctional -corrective -correlatable -correlational -correlative -corresponsive -corridored -corrigible -corroborant -corroborative -corrodible -corrosional -corrosive -corrupt -corruptful -corruptible -corruptive -corsetless -cortical -corticate -corticolous -coruscant -corvine -corybantic -corymbed -corymblike -corymbose -corynebacterial -coseismal -cosey -coseys -cosie -cosier -cosies -cosiest -cosmetological -cosmic -cosmogonal -cosmogonic -cosmogonical -cosmographic -cosmographical -cosmoid -cosmologic -cosmological -cosmonautic -cosmoramic -costate -costive -costless -costlier -costliest -costly -costoclavicular -costoscapular -cosy -cotangential -cotemporaneous -cotemporary -coterminous -cothurnal -cotidal -cottaged -cottonless -cottony -cotyledonal -cotyledonary -cotyledonoid -cotyledonous -cotyloid -coua -coucha -couchant -coud -councilmanic -counselable -counsellable -countable -counteractive -counterattractive -counterchanged -countercolored -counterfactual -counterfeit -countermandable -counterpaned -counterproductive -counterrotating -countersalient -counterweighted -countless -countrified -countryfied -couped -couponless -couptative -courageous -courant -courdinative -coursed -courteous -courtlier -courtliest -courtly -cousinly -couth -couthie -couthily -covalent -covariant -covenantal -coverable -coverless -covert -covetable -covetous -covinous -cowardly -cowled -cowlike -cowslipped -coxal -coxalgic -coxcombic -coxcombical -coy -coyish -cozey -cozeys -cozier -cozies -coziest -cozy -crabbed -crabbier -crabbiest -crabby -crablike -crabwise -crackable -crackbrained -cracked -crackerjack -cracking -crackjaw -crackless -cracklier -crackliest -crackly -craftier -craftiest -craftless -crafty -craggier -craggiest -craggy -craglike -cramoisy -cramped -cramponnae -cranelike -cranely -cranial -craniate -craniological -craniometric -craniometrical -cranioscopical -crankier -crankiest -crankless -crankous -cranky -crannied -crapelike -crashing -crass -crassulaceous -crateral -craterless -craterlike -craterous -craven -crawlier -crawliest -crawly -crazed -crazier -craziest -crazy -creakier -creakiest -creaky -creamier -creamiest -creamlaid -creamless -creamlike -creamy -creaseless -creasy -creatable -creational -creationary -creationistic -creative -creatural -creaturely -credent -credentialed -credible -creditable -creditless -credulous -creedal -creeded -creedless -creepier -creepiest -creepy -cremasterial -crematory -crenate -crenelated -crenella -crenulate -creolized -creophagous -creosotic -crepitant -crepuscular -crescentic -crescentlike -crescentoid -crescive -cressier -cressiest -cressy -crested -crestfallen -crestless -cresyl -cresylic -cretaceous -cretinoid -cretinous -creviced -crewless -crewneck -cribla -cribriform -cricketlike -cricoid -cricopharyngeal -crimeless -criminative -criminologic -criminological -crimpier -crimpiest -crimpy -crinal -crinated -crined -crinite -crinklier -crinkliest -crinkly -crinogenic -crinose -crippling -crisic -crisp -crispate -crispier -crispiest -crispy -crissal -cristate -criterional -critical -criticisable -criticizable -croakier -croakiest -croaky -crocked -crocodiloid -crocused -cronish -cronk -crooked -cropless -crosiered -crossable -crossbanded -crossbolted -crossbred -crosscurrented -crossed -crossfertilizable -crossleted -crosslighted -crosstied -crosstown -crosswise -crotched -crotchety -croupiest -croupous -croupy -crouse -crowded -crowncapping -crowned -crowning -crownless -crucial -cruciate -cruciferous -crucificial -cruciform -crude -cruder -crudest -cruel -cruelhearted -crumbable -crumbier -crumbiest -crumblier -crumbliest -crumbly -crumby -crummier -crummies -crummiest -crummy -crumply -crunchable -crunchier -crunchiest -crunchy -crunodal -crural -crushable -crushing -crusily -crustaceous -crustal -crusted -crustier -crustiest -crustless -crusty -crutched -crutchlike -crying -cryogenic -cryohydric -cryophilic -cryoscopic -cryptal -cryptanalytic -cryptic -cryptoanalytic -cryptoclastic -cryptocrystalline -cryptogamic -cryptogamical -cryptogamous -cryptogenic -cryptogrammatic -cryptogrammatical -cryptogrammic -cryptographal -cryptographic -cryptographical -cryptonymous -cryptophytic -cryptorchid -cryptovolcanic -cryptozoic -cryptozygous -crystalliferous -crystallike -crystalline -crystallisable -crystallitic -crystallizable -crystallographic -crystalloid -crystalloidal -ctenidial -ctenoid -cubbish -cubic -cubical -cubiform -cubistic -cubital -cuboid -cuculiform -cucullate -cucumiform -cucurbitaceous -cuddlesome -cuddly -culinary -culmicolous -culmiferous -culminant -culpable -cultic -cultish -cultivable -cultivated -cultrate -cultual -cultural -cultured -cultureless -cumberless -cumbersome -cumbrous -cumulative -cumuliform -cumulous -cunctatious -cunctatory -cuneal -cuneate -cuneatic -cuneiform -cunicular -cuniform -cunning -cupidinous -cuplike -cupolated -cupped -cuppy -cupreous -cupric -cupriferous -cuprous -cupulate -curable -curatic -curatical -curative -curatorial -curbable -curbless -curblike -curdier -curdiest -curdy -cureless -curial -curious -curlier -curliest -curlike -curly -curmudgeonly -current -curricular -currish -cursed -cursive -cursorial -cursory -curt -curtainless -curtal -curtate -curule -curvaceous -curvier -curviest -curvilinear -curvy -cushier -cushiest -cushionless -cushionlike -cushiony -cushy -cuspal -cusped -cuspidal -cuspidate -cussed -custodial -customable -customary -cutaneous -cutcha -cute -cuter -cutest -cuticolor -cuticular -cutover -cuttable -cutty -cyaneous -cyanic -cyanitic -cyano -cyanogenic -cyanopathic -cyanotic -cyanuric -cyathiform -cybernetic -cycadaceous -cycadlike -cyclic -cycloid -cycloidal -cyclonal -cyclonic -cyclonical -cyclopedic -cycloplegic -cyclostomatous -cyclostrophic -cyclostylar -cyclothymic -cyclotomic -cyetic -cylinderlike -cylindraceous -cylindrical -cylindromatous -cymballike -cymbiform -cymbocephalic -cymbocephalous -cymographic -cymoid -cymose -cymotrichous -cynical -cynosural -cyperaceous -cyphellate -cyprinoid -cysteinic -cystic -cystocarpic -cystoid -cystolithic -cystomatous -cystoscopic -cytoarchitectural -cytochemical -cytoclastic -cytogenetic -cytogenetical -cytoid -cytologic -cytological -cytolytic -cytopathogenic -cytopathologic -cytopathological -cytophagic -cytophagous -cytoplasmic -cytoplastic -cytostomal -cytotactic -cytotoxic -cytotrophoblastic -cytotropic -cytozoic -czarist -daclassa -dacolleta -dacryagogue -dactylic -dactylographic -daedal -daemonic -daffier -daffiest -daffy -daft -dagaga -daguerreotypic -daily -daimen -daimonic -daintier -dainties -daintiest -dainty -daisied -daltonic -damageable -damnatory -damning -damoda -damp -dampish -dampproof -danceable -dancetta -dandiacal -dandriffy -dandruffy -dandyish -danged -dangerless -dangerous -dank -dapper -dappled -daring -dark -darkish -darksome -dashed -dashier -dashiest -dashing -dashy -dastardly -dasyphyllous -dasyurine -dasyuroid -datable -dateable -dated -dateless -datival -dative -datolitic -daturic -dauby -daughterless -daughterlike -daughterly -dauntless -dawnlike -daydreamy -daylong -dclass -dcollet -dead -deadlier -deadliest -deadly -deadpan -deaf -dealate -deanthropomorphic -dear -deathful -deathless -deathlike -deathly -deathy -debatable -debauched -debentured -debilitative -debonair -debtless -decadal -decadent -decagonal -decahedral -decahydrated -decalescent -decamerous -decanal -decani -decanormal -decapodous -decasyllabic -decayable -decayedness -decayless -deceased -deceitful -decem -decemviral -decenary -decennial -decent -deceptive -decidable -decided -decidual -deciduate -deciduous -decillionth -decimus -decinormal -decipherable -decisional -decisive -declamatory -declarable -declarative -declaratory -declared -declensional -declinable -declinate -declinational -declinatory -declive -declivitous -declivous -decoctive -decolorant -decomposable -decomposed -decompound -decompressive -decongestant -decongestive -decontaminative -decorative -decorous -decrepit -decrescent -decretive -decretory -decubital -decuman -decumbent -decurrent -decurved -dedal -dedicated -dedicational -dedicatory -deducible -deductible -deductive -deedless -deep -deepwater -defaceable -defamatory -defeasible -defectible -defective -defectless -defenceable -defenceless -defendable -defenseless -defensible -defensive -deferable -deferent -deferential -deferrable -deferred -defervescent -defiable -defiant -deficient -defilable -definable -definite -definitive -deflagrable -deflationary -deflectable -deflected -deflective -deflexed -deformable -deformational -deformative -deformed -defrayable -deft -defunct -defunctive -degenerative -deglutitious -degradable -degradational -degradative -degraded -degrading -degreeless -degressive -dehiscent -dehortative -dehortatory -deicidal -deictic -deific -deiform -deistic -deistical -dejected -delative -delayable -delectable -delegable -deleterious -deliberate -deliberative -delicate -delicious -delighted -delightful -delightless -delightsome -delineable -delineative -deliquescent -delirious -delitescent -deliverable -deltaic -deltoidal -delusional -delusive -deluxe -demagnetisable -demagnetizable -demagogic -demandable -demanding -demented -demeritorious -demersal -demesnial -demibastioned -demisable -demiurgeous -demiurgic -demiurgical -democratic -demoded -demographic -demographical -demoniac -demonian -demonic -demonolatrous -demonologic -demonological -demonstrable -demonstrational -demonstrative -demotic -demountable -demulcent -demure -demurer -demurest -demurrable -denary -dendric -dendriform -dendritic -dendrochronological -dendroid -dendrological -dendrophagous -dendrophilous -deniable -denominational -denominative -denotable -denotative -denotive -dense -denser -densest -densimetric -densitometric -densus -dental -dentate -denticulate -dentiform -dentilabial -dentiled -dentilingual -dentinal -dentirostral -dentoid -denudative -denumerable -denunciable -denunciatory -deontic -deontological -departed -departmental -depauperate -dependable -dependent -depictive -depilatory -depletive -depletory -deplorable -deponent -depopulative -deportable -deposable -depositional -depraved -deprecative -deprecatory -depreciable -depreciatory -depredatory -depressant -depressed -depressible -depressive -depressomotor -deprivable -deprivative -deprived -depurative -deputable -derangeable -deranged -dere -dereistic -derelict -derisible -derisive -derivable -derivational -derivative -dermal -dermatic -dermatographic -dermatoid -dermatological -dermatomic -dermatophytic -dermatoplastic -dermatropic -dermic -dermographic -dermoid -dern -dernier -derogative -derogatory -dervishlike -descendent -descendible -describable -descriptive -deserted -desertic -deserticolous -desertlike -deserved -deserving -desiccant -desiccated -desiccative -desiderative -designative -designatory -designed -designing -desinent -desinential -desirable -desired -desireless -desirous -deskbound -desmidian -desmoid -desmotropic -desolate -despairful -despairing -desperate -despicable -despisable -despiteful -despiteous -despondent -despotic -destined -destitute -destroyable -destructible -destructive -desultory -detachable -detached -detailed -detainable -detectable -detectible -deteriorative -determinable -determinant -determinate -determinately -determinative -determined -deterministic -detersive -detestable -detonable -detonative -detoxicant -detractive -detrimental -detrital -detritivorous -detrusive -deuced -deuteranomalous -deuteranopic -deutoplasmic -devastative -developable -deviable -deviant -deviative -deviatory -deviceful -deviled -devilish -devious -devisable -devoid -devoted -devotional -devout -dewclawed -dewlapped -dewless -dewy -dexter -dexterous -dextral -dextro -dextrocardial -dextrocular -dextrogyrate -dextrorotatory -dextrorse -dextrosinistral -dextrous -dgag -diabasic -diabetic -diabolic -diabolical -diacaustic -diachronic -diacid -diacidic -diaconal -diacritical -diactinic -diadelphous -diadochic -diadromous -diaeretic -diagenetic -diageotropic -diagnosable -diagnostic -diagonal -diagrammatic -dialectal -dialectical -dialectologic -dialectological -dialogic -dialogistic -dialysable -dialytic -dialyzable -diamagnetic -diamant -diamantiferous -diamantine -diametral -diametric -diametrical -diamondlike -diandrous -dianoetic -diapasonal -diapedetic -diaphanometric -diaphanous -diaphoretic -diaphragmatic -diaphysial -diapophysial -diarch -diarchial -diarchic -diaristic -diarrheal -diarrheic -diarrhetic -diarrhoeal -diarrhoeic -diarrhoetic -diarthrodial -diastatic -diastolic -diastral -diastrophic -diastyle -diathermic -diathetic -diatomaceous -diatomic -diatonic -diatropic -diazo -diazoamino -diazotizable -dibasic -dibranchiate -dicastic -dicephalous -dicey -dichasial -dichlamydeous -dichogamous -dichotomic -dichotomistic -dichotomous -dichroic -dichroiscopic -dichromatic -dichromic -dichroscopic -diclinous -dicotyledonous -dicrotic -dictational -dictatorial -didactic -didymous -didynamous -diecious -diencephalic -dieretic -dietary -dietetic -different -differentiable -differential -difficile -difficult -diffident -diffluent -diffractive -diffusible -diffusive -digammated -digamous -digastric -digenetic -digestible -digestional -digestive -digital -digitate -digitiform -digitigrade -digitinervate -digitipinnate -diglot -diglottic -dignified -dignitarial -digraphic -digressional -digressive -dihedral -dihydrated -dihydric -dihydroxy -dilapidated -dilatable -dilatant -dilatate -dilative -dilatometric -dilatory -dilemmatic -dilemmatical -dilemmic -dilettanteish -dilettantish -diligent -diluent -diluvial -dim -dimensional -dimensionless -dimerous -dimetric -dimidiate -diminishable -diminished -diminutive -dimissory -dimmed -dimmest -dimming -dimorphous -dimply -dineric -dingier -dingiest -dingy -dink -dinkier -dinkies -dinkiest -dinkum -dinky -dinnerless -dinosaurian -dintless -diocesan -dioecious -dioestrous -dioicous -dioptral -dioptric -dioramic -dioritic -diorthotic -diotic -dipetalous -diphase -diphtheritic -diphtheroid -diphthongal -diphthongic -diphthongous -diphycercal -diphyletic -diphyllous -diphyodont -diplegic -diplex -diploblastic -diplocardiac -diplococcal -diplococcic -diploic -diploid -diploidic -diplomatic -diplophonic -diplopic -diplostemonous -dipnoan -dipodic -dipolar -dippier -dippiest -dippy -diprotic -dipsacaceous -dipsomaniacal -dipteral -dipterocarpaceous -dipterous -dipyramidal -dire -directable -directed -directional -directionless -directorial -direful -direr -direst -dirgeful -dirgelike -dirhinous -dirigible -diriment -dirtier -dirtiest -dirty -disadvantaged -disadvantageous -disagreeable -disallowable -disappointed -disarming -disastrous -disbursable -discalced -discarnate -discernible -discerning -discerptible -dischargeable -discifloral -disciplelike -disciplinable -disciplinal -disciplinary -disclamatory -discographical -discoid -discomfortable -discommodious -disconcerted -disconnected -disconnective -disconsolate -discontented -discontinuous -discordant -discountable -discourageable -discourseless -discourteous -discoverable -discovert -discreditable -discreet -discrepant -discrete -discretional -discretionary -discriminantal -discriminating -discriminational -discriminative -discriminatory -discursive -discussable -discussible -discussional -disdainful -diseased -disembodied -disepalous -disgraceful -disguisable -disgustful -disgusting -disgustingly -disharmonious -dished -dishevelled -dishonest -dishonorable -dishy -disillusive -disimpassioned -disinclined -disinfective -disingenuous -disintegrable -disintegrative -disintegratory -disinterested -disjasked -disjoinable -disjoined -disjointed -disjunct -disjunctive -disklike -dislikable -disloyal -dismal -dismissible -dismissive -dismountable -disobedient -disordered -disorderly -disparate -dispassionate -dispellable -dispensable -dispensational -dispensible -dispermic -dispermous -dispersible -dispersive -dispirited -dispiteous -displaceable -displayed -displeasureable -displuviate -disposable -disposed -dispositional -dispossessed -dispossessory -disproportionable -disproportional -disproportionate -disprovable -disputable -disputatious -disputeless -disqualifiable -disquieting -disquisitional -disregardful -disreputable -disrespectable -disrespectful -disruptive -dissatisfactory -dissatisfied -dissected -dissectible -disseminative -dissentient -dissentious -dissepimental -dissertational -dissident -dissilient -dissimilar -dissimilative -dissimilatory -dissimulative -dissipated -dissipative -dissociable -dissocial -dissociative -dissoluble -dissolute -dissolvable -dissonant -dissuadable -dissuasive -dissyllabic -dissymmetric -dissymmetrical -distal -distanceless -distant -distasteful -distended -distensible -distensile -distent -distichal -distichous -distillable -distillatory -distilled -distinct -distinctionless -distinctive -distingu -distingua -distinguishable -distinguished -distinguishing -distorted -distortional -distortive -distracted -distractible -distractive -distrainable -distrait -distraught -distressed -distressful -distributable -distributional -distributive -distrustful -disturbed -disturbing -distyle -disubstituted -disulfuric -disused -disyllabic -ditchless -ditheistic -ditheistical -dithionic -dithionous -dithyrambic -ditriglyphic -dittographic -diuretic -diurnal -divalent -divergent -diverse -diversifiable -diversiform -diversional -diversionary -divertible -diverticular -diverting -divertive -divestible -dividable -divided -dividendus -dividual -divinable -divinatory -divine -divisi -divisible -divisional -divisionary -divisive -divorceable -divorcive -divulgatory -divulsive -dizygotic -dizzied -dizzier -dizziest -dizzy -dizzying -dmod -doable -docile -docosanoic -doctoral -doctorial -doctorless -doctrinaire -doctrinal -documentary -doddered -doddering -dodecagonal -dodecahedral -dodecaphonic -dodecastyle -dodecasyllabic -dodgy -dogged -doggier -doggiest -doggish -doggoned -dogless -doglike -dogmatic -doiled -doited -dolabriform -dolce -doleful -doleritic -dolesome -dolichocephalic -dolichocranic -dollfaced -dollish -dolmenic -dolomitic -dolorimetric -doloroso -dolorous -doltish -domanial -domed -domelike -domestic -domesticable -domesticative -domical -domiciliary -dominant -dominative -domineering -dominical -donnard -donnered -donnish -donsie -doorless -dopey -dopier -dopiest -dopy -dormant -dormered -dormie -dormient -dorsad -dorsal -dorsalis -dorsiferous -dorsigrade -dorsispinal -dorsiventral -dorsolateral -dorsolumbar -dorsoventral -dorty -dosimetric -dotal -dotier -dotiest -doting -dotlike -dotted -dottier -dottiest -dotty -doty -double -doubled -doubling -doubtable -doubtful -douce -doughier -doughiest -doughtier -doughtiest -doughty -doughy -dour -doux -dovelike -dovetailed -dovish -dowable -dowdy -dowdyish -dowerless -dowf -dowie -downcast -downfallen -downhearted -downhill -downier -downiest -downless -downlike -downrange -downright -downstate -downtrodden -downward -downy -dowy -doxastic -doxological -dozenth -dozier -doziest -dozy -drab -drachmal -draconic -draffy -draftable -draftier -draftiest -drafty -dragging -draggletailed -draggy -dragomanic -dragomanish -dragonish -dragonlike -drainable -drainless -dramatic -dramatisable -dramatizable -dramaturgic -dramaturgical -drapable -drapeable -draperied -drastic -dratted -draughtier -draughtiest -draughty -drawable -drawly -drawn -dreadable -dreadful -dreamful -dreamier -dreamiest -dreamless -dreamlike -dreamy -drear -drearier -drearies -dreariest -drearisome -dreary -dreggy -dreich -dreigh -dressier -dressiest -dressy -driech -driegh -drier -driest -driftier -driftiest -driftless -drifty -drillable -drinkable -drinking -drippy -drivable -driveable -driverless -driving -droitural -droll -dronish -droolier -drooliest -drooly -droopier -droopiest -droopy -droplike -dropsical -dropsied -drossier -drossiest -drossy -droughtier -droughtiest -droughty -drouthier -drouthiest -drouthy -drowsier -drowsiest -drowsy -druffen -drugless -druidic -druidical -drumlier -drumliest -drumly -drunk -drunken -drupaceous -dry -dryable -dryadic -drying -drys -dual -dualistic -dubious -dubitable -dubitative -ducal -duchesslike -duckie -duckier -duckiest -ductile -ductless -duddy -dudish -duelistic -duellistic -dulcet -dull -dullish -dulotic -dumb -dumbstruck -dumpier -dumpiest -dumpish -dumpy -duncical -duncish -dunderheaded -dungy -duodecastyle -duodecimal -duodenal -duodenary -dupable -duple -duplicable -duplicate -duplicative -duplicatus -dur -durable -dural -durational -durative -dure -duskier -duskiest -duskish -dusky -dustier -dustiest -dustless -dustproof -dusty -duteous -dutiable -dutiful -dwarfish -dyable -dyadic -dyarchic -dyarchical -dyeable -dyeline -dynamic -dynamistic -dynamitic -dynamoelectric -dynamogenic -dynamogenous -dynamometric -dynamometrical -dynastic -dynastical -dyostyle -dysaesthetic -dysarthric -dyscrasial -dyscrasic -dyscratic -dysenteric -dysesthetic -dysgenic -dysgonic -dyskinetic -dyslogistic -dysmenorrheal -dysmenorrhoeal -dyspathetic -dyspeptic -dysphagic -dysphasic -dysphonic -dysphoric -dysplastic -dyspneal -dyspneic -dyspnoeal -dyspnoeic -dyspnoic -dysteleological -dysthymic -dystonic -dystrophic -dysuric -eared -earless -earliest -earlike -early -earnest -earringed -earsplitting -earthborn -earthbound -earthen -earthier -earthiest -earthlier -earthliest -earthly -earthquaked -earthquaken -earthquaking -earthshaking -earthward -earthy -earwiggy -easeful -easeled -easier -easiest -eastbound -easterly -eastern -easternmost -eastmost -eastward -eastwardly -easy -easygoing -easylike -eatable -eaved -ebon -ebracteate -ebullient -ecalcarate -ecarinate -ecaudate -ecbolic -eccentric -eccentrical -ecchymotic -ecclesiastical -ecclesiologic -ecclesiological -eccrine -ecdemic -ecdysial -ecesic -echinate -echinodermatous -echoic -echolalic -echoless -echopractic -echt -eclamptic -eclectic -ecologic -ecological -econometric -econometrical -economic -economical -ecospecific -ecotonal -ecotypic -ecstatic -ectal -ectatic -ecthymatous -ectoblastic -ectocranial -ectodermal -ectodermic -ectodermoidal -ectogenetic -ectogenous -ectomeric -ectomorphic -ectoparasitic -ectophytic -ectopic -ectoplasmatic -ectoplasmic -ectosarcous -ectosteal -ectotrophic -ectozoan -ectozoic -ectrodactylous -ectromelic -ectypal -ecumenical -eczematoid -eczematous -edacious -edaphic -edematous -edentulous -edgeless -edgier -edgiest -edgy -edible -edictal -edificatory -edificial -editorial -educable -educated -educational -educative -educatory -educible -eductive -edulcorative -eelier -eeliest -eellike -eely -eerie -eerier -eeriest -eery -effable -effaceable -effectible -effective -effectless -effectual -effeminate -efferent -effervescent -effervescible -effete -efficacious -efficient -effigial -efflorescent -effluvial -effortful -effortless -effulgent -effusive -efractory -egal -egalitarian -egestive -eggless -egocentric -egoistic -egomaniacal -egotistic -egregious -eidetic -eighteenth -eightfold -eighth -eightieth -eightpenny -eild -eirenic -eisegetic -eisegetical -eisteddfodic -ejaculatory -ejective -elaborate -elaborative -elastic -elastomeric -elated -elative -elder -elderly -eldest -eldritch -elective -electoral -electric -electrical -electroacoustic -electroanalytic -electroanalytical -electroballistic -electrobiological -electrocardiographic -electrochemical -electrocratic -electrodiagnostic -electrodialitic -electrodynamic -electroencephalographic -electroencephalographical -electrographic -electrokinetic -electroluminescent -electrolytic -electromagnetic -electromechanical -electrometallurgical -electrometric -electrometrical -electromotive -electromyographic -electronegative -electroneutral -electronic -electroosmotic -electrophilic -electrophonic -electrophoretic -electrophotographic -electrophysiologic -electrophysiological -electropositive -electroscopic -electrosensitive -electrostatic -electrostrictive -electrosurgical -electrosynthetic -electrotactic -electrotechnic -electrotechnical -electrotherapeutic -electrotherapeutical -electrothermal -electrotonic -electrotropic -electrotypic -electrovalent -eleemosynary -elegant -elegiac -elemental -elementary -elenctic -elephantiasic -elephantine -elephantoid -elevated -eleventh -elfin -elfish -elflike -elhi -elicitable -elidible -eligible -eliminable -eliminative -eliminatory -ellipsoidal -elliptic -elliptical -elmier -elmiest -elmy -elocutionary -elongative -eloquent -elritch -elucidative -elusive -eluvial -elvish -elytroid -elytrous -emaciated -emanant -emanational -emanative -emanatory -emancipative -emancipatory -emarginate -emasculative -emasculatory -embattled -emblematic -embolic -embolismic -embowed -embraceable -embracive -embrasured -embryogenic -embryoid -embryologic -embryological -embryonic -embryotrophic -emendable -emendatory -emergent -emeritus -emersed -emetic -emigrational -emigrative -emigratory -eminent -emissive -emmetropic -emollient -emotionable -emotional -emotionalistic -emotionless -emotive -empaistic -empathic -empestic -emphatic -emphysematous -empirical -empiristic -employable -emptiable -emptied -empties -emptiest -empty -emptying -empyemic -empyreal -emulative -emulous -emulsible -emulsifiable -emulsive -emulsoidal -emunctory -enabling -enactable -enactive -enactory -enantiomorphic -enantiomorphous -enantiotropic -enarched -enarthrodial -enate -encastra -encaustic -enceinte -encephalic -encephalitic -encephalographic -encephalomyelitic -enchanting -enchondromatous -enchorial -encinal -enclitic -encomiastic -encrustant -enculturative -encyclopedic -endamebic -endamoebic -endarch -endarterial -endemic -endergonic -endermic -endless -endmost -endoblastic -endocardial -endocarditic -endocarpoid -endocentric -endocranial -endocrine -endocrinologic -endocrinological -endocrinopathic -endocrinous -endodermal -endodermic -endoergic -endogamic -endogamous -endogenous -endolithic -endolymphatic -endometrial -endomorphic -endoparasitic -endoperidial -endophytic -endophytous -endoplasmic -endopoditic -endopterygote -endorsable -endorsed -endosarcous -endoscopic -endoskeletal -endosmotic -endosporous -endothecial -endothelial -endothelioid -endothermic -endotoxic -endotrophic -endurable -endurant -enduring -energetic -energetistic -energistic -enervated -enervative -enforceable -enforcive -engaga -engaged -engaging -engineless -enginous -englacial -engrailed -engrained -engrammic -engrossing -enhanced -enhancive -enharmonic -enigmatic -enjambed -enjoyable -enlargeable -enneadic -enneahedral -enneastyle -enneasyllabic -ennuya -ennuyae -ennuyant -ennuyante -enolic -enolizable -enorm -enormous -enow -enphytotic -enrapt -ensiform -enstatitic -entangleable -entelechial -enterable -enteral -enteric -enterologic -enterological -enterozoan -enterpriseless -enterprising -entertaining -enthetic -enthusiastic -enthymematic -entire -entitative -entoblastic -entodermal -entodermic -entomic -entomogenous -entomologic -entomological -entomophagous -entomophilous -entomostracous -entophytic -entopic -entozoan -entozoic -entrepreneurial -enumerable -enumerative -enunciable -enunciative -enunciatory -enuretic -enviable -envious -environmental -enwrought -enzootic -enzygotic -enzymatic -enzymolytic -eolithic -eonian -eosinic -eosinlike -eosinophilic -epagogic -eparchial -epaxial -epeiric -epeirogenic -epencephalic -ependymal -ependymary -epenthetic -epexegetic -ephebic -ephemeral -ephippial -ephoral -epiblastic -epibolic -epicanthic -epicardiac -epicardial -epicedial -epicedian -epicene -epicentral -epiclike -epicondylian -epicontinental -epicritic -epicurean -epicyclic -epicycloidal -epideictic -epidemic -epidemiological -epidermal -epidermic -epidermoid -epidictic -epididymal -epidotic -epidural -epifocal -epigamic -epigastric -epigeal -epigene -epigenetic -epigenous -epigeous -epiglottal -epiglottic -epiglottidean -epigonic -epigrammatic -epigraphic -epigynous -epileptic -epileptoid -epilimnetic -epilimnial -epilithic -epimeric -epimorphic -epimyocardial -epinastic -epineurial -epipastic -epipetalous -epiphanic -epiphenomenal -epiphloedal -epiphragmal -epiphylline -epiphyllous -epiphyseal -epiphysial -epiphytic -epiphytical -epiphytotic -epiploic -epirogenic -episcopal -episcopalian -episcopally -episematic -episepalous -episodic -epispastic -epistatic -epistemic -epistemological -epistolary -epistolic -epistylar -epitaphic -epitaphless -epitaxial -epitaxic -epithalamic -epithecial -epithelial -epithelioid -epitheliomatous -epitheliomuscular -epithetic -epithetical -epitomic -epitomical -epixylous -epizoic -epizootic -epochal -eponymic -eponymous -epoxy -equable -equal -equalitarian -equanimous -equatable -equational -equatorial -equestrian -equiangular -equicontinuous -equidistant -equiform -equilateral -equilibratory -equilibrious -equilibristic -equimolecular -equine -equinoctial -equipollent -equiponderant -equipotent -equipotential -equiprobable -equirotal -equisetic -equitable -equitant -equivalent -equivalve -equivocal -eradicable -eradicant -eradicative -erasable -erased -erect -erectable -erectile -erective -eremitic -eremophilous -erethismic -erethistic -ergative -ergodic -ergographic -ergonomic -ericaceous -ericeticolous -ericoid -erinaceous -eriophyllous -eristic -ermined -erodable -erodent -erodible -erogenous -erose -erosible -erosional -erosive -erotogenic -errable -errant -erratic -errhine -erring -erroneous -errorless -ersatz -erstwhile -erubescent -eruciform -eructative -erudite -eruditional -erumpent -eruptible -eruptional -eruptive -erysipelatous -erythemal -erythematic -erythemic -erythrismal -erythroblastic -erythroblastotic -erythrocytic -erythropoietic -escapable -escapeless -escapist -escartelly -escharotic -eschatological -escheatable -escutcheoned -esemplastic -esophageal -esoteric -especial -espiagle -esquamate -essayistic -essential -essive -establishable -establishmentarian -esterifiable -esthetic -esthetical -estimable -estimative -estipulate -estival -estrildine -estrogenic -estrous -estrual -estuarial -estuarine -esurient -eternal -eterne -etesian -ethereal -ethereous -ethical -ethmoid -ethnic -ethnocentric -ethnogenic -ethnographic -ethnographical -ethnohistoric -ethnohistorical -ethnolinguistic -ethnologic -ethnological -ethnomusicological -ethological -ethylenic -ethylic -ethynyl -etiological -etymologic -etymological -etymologisable -etymologizable -eucalyptic -eucarpic -euchromatic -eudaemonistic -eudaemonistical -eudemonic -eudemonistic -eudemonistical -eudiometric -eudiometrical -eugenic -eugonic -euhedral -euhemeristic -eulogistic -eunuchoid -eupeptic -euphemious -euphemistic -euphemistical -euphonic -euphonious -euphorbiaceous -euphoriant -euphoric -euphotic -euphuistic -euphuistical -euplastic -euploid -euplotid -eupneic -eupotamic -eurhythmic -eurithermophilic -eurychoric -euryhaline -euryphagous -eurythermal -eurythmic -eurythmical -eurytopic -eurytropic -eusporangiate -eustatic -eustyle -eutectic -eutectoid -euthanasic -eutherian -euthermic -eutrophic -evacuant -evacuative -evadable -evadible -evaginable -evaluable -evaluative -evanescent -evanescible -evangelical -evangelistic -evaporable -evaporative -evasional -evasive -evectional -even -evens -eventful -eventless -eventual -everbearing -evergreen -everlasting -eversible -everyday -evident -evidential -evidentiary -evil -evincible -evincive -evitable -evocable -evocative -evolutional -evolutionary -evolutive -evolvable -exact -exactable -exacting -exaggerated -exaggerative -exalted -examinable -examinational -examinatorial -exanimate -exanthematic -exarate -exarchal -excaudate -exceedable -exceeding -excellent -excentric -excepable -exceptionable -exceptional -exceptionless -exceptive -excerptible -excessive -exchangeable -excisable -excitable -excitant -excitative -excited -exciting -excitomotor -exclamational -exclamatory -excludable -excludible -exclusionary -exclusionist -exclusive -exclusivistic -exclusory -excogitable -excogitative -excommunicable -excommunicative -excommunicatory -excrementitious -excrementous -excrescent -excretal -excretive -excretory -excruciating -exculpable -exculpatory -excurrent -excursional -excursionary -excursive -excurvate -excurved -excusable -excusatory -excuseless -excusive -execrable -execrative -execratory -executable -executional -executorial -executory -exedral -exegetic -exemplary -exemplifiable -exemplificative -exemptible -exemptive -exequial -exercisable -exergonic -exergual -exertive -exfoliative -exhalant -exhaustible -exhaustive -exhaustless -exhibitable -exhibitionistic -exhibitive -exhibitory -exhilarant -exhilarative -exhortative -exigeant -exigent -exigible -exiguous -exilable -exilic -eximious -existent -existential -existentialist -existentialistic -exocentric -exocrine -exodermal -exoergic -exogamous -exogenous -exonerative -exopathic -exophthalmic -exopoditic -exopterygote -exorable -exorbitant -exorcismal -exorcistic -exorcistical -exordial -exoskeletal -exosmotic -exospherical -exosporal -exosporous -exostosed -exostotic -exoteric -exothermic -exotic -exotoxic -expandable -expanded -expandible -expansible -expansile -expansional -expansionary -expansionistic -expansive -expatriate -expectable -expectant -expectative -expecting -expectorant -expedient -expediential -expeditionary -expeditious -expellable -expellant -expendable -expenseless -expensive -experienceable -experienced -experienceless -experiential -experientialistic -experimental -experimentative -expiable -expiational -expiatory -expiratory -expiscatory -explainable -explanate -explanatory -explemental -explicable -explicative -explicit -exploitable -exploitative -exploitatory -exploitive -explorable -exploratory -explosible -explosive -exponential -exponible -exportable -exposable -exposed -expositional -expositorial -expository -expostulatory -expressable -expressible -expressional -expressionless -expressive -expressless -expropriable -expugnable -expulsive -expurgatorial -expurgatory -exquisite -exsanguine -exsectile -exserted -exsertile -exsiccative -exstipulate -exsufflicate -extant -extemporal -extemporaneous -extemporary -extendable -extended -extendible -extensible -extensile -extensional -extensionless -extensive -extenuating -extenuative -extenuatory -exterminable -exterminatory -external -exteroceptive -exterritorial -extinct -extinctive -extinguishable -extirpative -extorsive -extortionary -extortionate -extortive -extra -extracanonical -extracapsular -extracellular -extracorporeal -extractable -extractible -extractive -extracurricular -extraditable -extradosed -extraembryonic -extrafloral -extragalactic -extrajudicial -extralegal -extramarital -extrametrical -extramundane -extramural -extraneous -extranuclear -extraordinary -extraphysical -extrapolative -extrapolatory -extraprofessional -extrapunitive -extrasensorial -extrasensory -extrasystolic -extraterrestrial -extraterritorial -extrauterine -extravagant -extravaginal -extravascular -extravehicular -extraversive -extravertish -extravertive -extremal -extreme -extremer -extremest -extrinsic -extrorse -extrospective -extroversive -extrovertish -extrovertive -extrusible -extrusile -extrusive -exuberant -exudative -exultant -exuvial -eyeable -eyed -eyeless -eyelike -eyesome -fab -fabaceous -fabled -fabricative -fabulous -faceable -faceless -facete -facetious -facial -facile -facilitative -facinorous -faconne -factful -factional -factious -factitious -factitive -factorable -factorylike -factual -factualistic -facular -facultative -fadable -faddier -faddiest -faddish -faddy -fadeless -fadlike -faecal -fagaceous -fainaant -faint -fainthearted -faintish -fair -fairish -fairylike -faithful -faithless -falcate -falcial -falciform -falconiform -falconine -falconnoid -fallacious -fallible -fallow -false -falser -falsest -falsifiable -famed -fameless -familial -familiar -familistic -familyish -famished -famous -fanatical -fanback -fancied -fanciful -fanciless -fancy -fanged -fangled -fangless -fanglike -fanlike -fantasmagoric -fantastic -faradic -farand -faraway -farci -farcical -farinaceous -farinose -farmable -farmerlike -farouche -farraginous -farseeing -farsighted -farthermost -fascial -fasciate -fascicular -fasciculate -fascinating -fascinative -fashionable -fashionless -fast -fastidious -fastigiate -fastuous -fatal -fatalistic -fated -fateful -fatherless -fatherlike -fatherly -fathomable -fathomless -fatidic -fatigable -fatigate -fatigued -fatigueless -fatless -fatlike -fattenable -fatter -fattier -fattiest -fattish -fatty -fatuitous -fatuous -faucal -faucial -faultier -faultiest -faultless -faulty -faunal -faunlike -fauntleroy -faveolate -favonian -favorable -favored -favorless -favourable -favoured -favourite -favourless -fawnlike -feal -fearful -fearless -fearsome -feasible -feastful -feastless -featherbrained -feathered -featheredged -featherheaded -featherless -featherlight -featherlike -feathery -featureless -featurish -febrifacient -febriferous -febrific -febrifugal -febrile -feckless -feculent -fecund -fecundatory -federal -federative -feeble -feebler -feeblest -feeblish -feedable -feeless -feelingful -feelingless -feetless -feigned -feirie -feisty -feldspathic -feldspathoid -felicific -felicitous -feline -fellable -felonious -felsic -felsitic -felspathic -female -feminine -feministic -femoral -fencelike -fencible -fendered -fenestral -fenestrated -fenny -feodal -feracious -feral -ferial -ferine -fermentable -fermentative -fernier -ferniest -fernless -fernlike -ferny -ferocious -ferreous -ferrety -ferric -ferriferous -ferroelectric -ferromagnesian -ferromagnetic -ferrous -ferruginous -fertile -fertilisable -fertilisational -fertilizable -fertilizational -ferulaceous -fervent -fervid -fesswise -festal -festive -fetal -fetching -fetichistic -fetichlike -feticidal -fetid -fetiparous -fetishistic -fetishlike -fetterless -feudal -feudalistic -feuilletonistic -feverish -feverless -feverous -fewer -fey -fezzed -fezzy -fibered -fiberless -fibratus -fibreless -fibriform -fibrillar -fibrilliform -fibrillose -fibrinogenic -fibrinolytic -fibrinous -fibroblastic -fibrocartilaginous -fibroid -fibromatous -fibroplastic -fibrotic -fibrous -fibrovascular -fibular -fickle -fictile -fictional -fictitious -fictive -fiddling -fiddly -fidgety -fiducial -fiendish -fiendlier -fiendliest -fiendlike -fiendly -fierce -fiercer -fiercest -fierier -fieriest -fiery -fifteenth -fifth -fiftieth -fiftypenny -figgier -figgiest -figgy -fightable -figuline -figurable -figural -figurate -figurative -figured -figureless -filaceous -filamentary -filamented -filamentous -filar -filarial -filariid -filate -filial -filibusterous -filicidal -filiform -filigreed -fillable -filmable -filmier -filmiest -filmlike -filmy -filose -filosus -filterable -filthier -filthiest -filthy -filtrable -filtratable -filtre -fimbrial -fimbrillate -finable -final -financial -financiare -findable -fineable -finer -finespun -fingered -fingerless -fingery -finialed -finical -finicky -finished -finite -finless -finlike -finned -finnicky -finnier -finniest -finny -firearmed -fireless -fireproof -firm -firmamental -firry -first -firstness -fiscal -fishable -fishier -fishiest -fishless -fishy -fissile -fissionable -fissipalmate -fissiparous -fissiped -fissirostral -fissural -fissureless -fistic -fistulous -fitchy -fitful -fittable -fitted -fitten -fitting -fivefold -fivepenny -fixable -fixative -fixed -fixtureless -fizzier -fizziest -fizzy -flabbier -flabbiest -flabby -flabellate -flaccid -flagellatory -flagelliform -flaggier -flaggiest -flaggy -flagitious -flagless -flagrant -flakeless -flakier -flakiest -flaky -flamb -flamba -flamboyant -flamelike -flameproof -flamier -flamiest -flaming -flamless -flammable -flamy -flangeless -flannelly -flannelmouthed -flapless -flapperish -flappier -flappiest -flappy -flaring -flashier -flashiest -flashy -flat -flatfooted -flatterable -flattish -flatulent -flaunched -flauntier -flauntiest -flaunty -flavescent -flavorful -flavorless -flavorous -flavorsome -flavory -flavourful -flavourless -flavoursome -flavoury -flawed -flawier -flawiest -flawless -flawy -flaxen -fleckless -flecky -flectional -flectionless -fledged -fledgeless -fledgier -fledgiest -fledgy -fleeceable -fleeceless -fleecelike -fleecier -fleeciest -fleecy -fleeting -fleshier -fleshiest -fleshless -fleshlier -fleshliest -fleshly -fleshy -fleury -flexed -flexible -flexile -flexional -flexionless -flexographic -flexuous -flexural -fleysome -flickery -flightier -flightiest -flightless -flighty -flimsier -flimsies -flimsy -flintier -flintiest -flintlike -flinty -flippant -flippest -flipping -flirtational -flirtationless -flirtatious -flitting -floatable -floatier -floatiest -floating -floaty -floccose -flocculable -flocculent -flockier -flockiest -flockless -flocky -floggable -floodable -flooded -floodless -floodlike -floorless -floppier -floppiest -floppy -floral -floreated -florescent -floretty -floriated -floricultural -florid -floriferous -floristic -flory -flossy -flourishing -flourless -floury -flowable -flowered -flowering -flowerless -flowerlike -flowery -flowing -fluctuant -flued -fluent -fluffier -fluffiest -fluffy -fluidal -fluidic -flukeless -flukey -flukier -flukiest -fluky -fluoboric -fluorescent -fluoric -fluorometric -fluoroscopic -flurried -flustrated -fluted -flutelike -flutey -flutier -flutiest -fluttery -fluty -fluvial -fluviatile -fluviomarine -fluxional -fluxionary -flyable -flyaway -flyblown -flying -flyless -foamier -foamiest -foamless -foamlike -foamy -focal -focusable -fodgel -foetal -foeticidal -foetid -foetiparous -fogbound -fogged -foggier -foggiest -foggy -fogless -fogyish -foilable -foiled -foldable -foldaway -foliaceous -foliaged -foliar -foliate -foliated -folic -foliicolous -foliiferous -foliolate -foliose -folkish -folkloric -folkloristic -folksier -folksiest -folksy -follicular -followable -following -fondu -fontal -foodless -foolhardier -foolhardiest -foolhardy -foolish -foolproof -footed -footier -footiest -footless -footling -footloose -footsore -footworn -foppish -foraminal -foraminate -foraminiferal -foraminiferous -forbidden -forbidding -forceable -forced -forceful -forceless -forcepslike -forcible -forcipate -forcipial -fordable -fordless -fore -forecited -foreclosable -forefatherly -foregoing -foregone -forehand -forehanded -foreign -foreknowable -foremost -forenamed -forensic -forepassed -foresaid -foreseeable -foresighted -forespent -forestal -forestial -forestless -forestlike -forethoughtful -foreworn -forfeitable -forficate -forgeable -forgetful -forgetive -forgettable -forgivable -forgiving -forked -forkier -forkiest -forkless -forklike -forky -forlorn -formable -formae -formal -formalistic -formational -formative -former -formfitting -formic -formidable -formless -formulable -formulaic -formulistic -fornical -fornicatory -forniciform -forspent -forthcoming -forthright -fortieth -fortifiable -fortis -fortissimo -fortitudinous -fortnightly -fortuitous -fortunate -fortuneless -fortyish -fortypenny -forward -forworn -forzando -fossiliferous -fossilisable -fossilizable -fossillike -fossorial -fou -foudroyant -foughten -foul -foulmouthed -foundational -foundationary -founderous -foundrous -fountained -fountainless -fountainlike -fourcha -fourfold -fourpenny -fourteenth -fourth -foveal -foveate -foveolar -foveolate -foxier -foxiest -foxlike -foxy -fozier -foziest -fozy -fractional -fractious -fracturable -fractural -fractus -fragile -fragmental -fragmentary -fragmented -fragmentized -fragrant -frail -framable -frameable -frameless -frangible -frank -frankable -frantic -fratchy -fraternal -fratricidal -fraudful -fraudulent -fraught -frazzled -freakier -freakiest -freakish -freaky -frecklier -freckliest -freckly -free -freeborn -freehand -freeing -freemasonic -freer -freest -freestanding -freethinking -freewheeling -freewill -freezable -freezing -freightless -fremd -frenetic -frenular -frenzied -frequent -frequentable -frequentative -fresh -freshmanic -fretful -fretless -fretted -frettier -frettiest -fretty -friable -frictional -frictionless -friended -friendless -friendlier -friendliest -friendly -frigging -frightenable -frightened -frightful -frigid -frigorific -frilly -fringeless -fringelike -fringillid -fringilline -friskier -friskiest -frisky -frivolous -frizzier -frizziest -frizzlier -frizzliest -frizzly -frizzy -frockless -frogeyed -frogged -froggier -froggiest -froggy -froglike -frolicsome -fronded -frondescent -frondless -frontal -frontierless -frontierlike -frontless -frontoparietal -frore -frostbitten -frosted -frostier -frostiest -frostless -frostlike -frosty -frothier -frothiest -frothy -frousier -frousiest -frousy -frouzier -frouziest -frouzy -froward -frowsier -frowsiest -frowsty -frowsy -frowzier -frowziest -frowzy -fructed -fructiferous -fructificative -fructuous -frugal -frugivorous -fruited -fruitful -fruitier -fruitiest -fruitive -fruitless -fruitlike -fruity -frumentaceous -frumpier -frumpiest -frumpish -frumpy -frustrative -frutescent -fruticose -fsiest -fubsier -fubsiest -fubsy -fucoid -fugacious -fugal -fuguelike -fulgent -fulgid -fulgorous -fulgourous -fulgurant -fulgurating -fulgurous -fuliginous -full -fulminant -fulminatory -fulminic -fulminous -fulsome -fulvous -fuma -fumaric -fumarolic -fumatory -fumed -fumeless -fumelike -fumier -fumiest -fumigatory -fumy -functional -functionless -fundamental -fundic -funerary -funereal -funest -fungal -fungic -fungicidal -fungiform -fungistatic -fungitoxic -fungivorous -fungoid -fungous -funguslike -funiculate -funked -funkier -funkiest -funky -funnelform -funnellike -funnier -funniest -funny -furcular -furfuraceous -furibund -furioso -furious -furlable -furless -furnacelike -furnitureless -furred -furriest -furrowless -furrowlike -furrowy -furry -furthermost -furtive -furuncular -furunculous -furzy -fuscous -fuseless -fuselike -fusible -fusiform -fusile -fusilly -fussbudgety -fussier -fussiest -fussy -fustier -fustiest -fustigatory -fusty -futile -futilitarian -futuramic -futureless -futuristic -fuzzier -fuzziest -fuzzy -gabbroic -gabbroid -gabbroitic -gabby -gabelled -gabled -gableended -gablelike -gablewindowed -gadgety -gadoid -gadolinic -gadrooned -gaga -gainable -gainful -gainless -gainly -gaited -gaiterless -galactagogue -galactic -galactoid -galactophorous -galactopoietic -galeate -galeiform -galenic -gallant -galleried -gallerylike -galleylike -galliambic -gallic -gallinaceous -galling -gallinulelike -gallooned -galloping -gallous -gallused -galvanic -galvanometric -galvanometrical -galvanoplastic -galvanoscopic -galvanotactic -galvanotropic -gambogian -gamboised -gameless -gamelike -gamesome -gametic -gametogenic -gametogenous -gametophoric -gamic -gamier -gamiest -gammy -gamogenetic -gamogenetical -gamopetalous -gamophyllous -gamosepalous -gamy -ganglial -gangliar -gangliate -ganglier -gangliest -gangliform -gangling -ganglioid -ganglionate -ganglionic -gangly -gangrenous -gangwayed -ganoid -gantleted -gapless -gapy -garbleable -garbless -gardant -gardenable -gardenless -gardenlike -gargantuan -gargety -gargoyled -garish -garlandless -garlandlike -garlicky -garmentless -garnetlike -garni -garnishable -garreted -garrulous -garterless -gaseous -gasifiable -gasiform -gasless -gaslighted -gaslit -gasmetophytic -gasolineless -gasolinic -gasometric -gasometrical -gassier -gassiest -gassy -gastight -gastralgic -gastric -gastritic -gastrocnemial -gastrocnemian -gastrocolic -gastrodermal -gastroenteric -gastroenteritic -gastroenterologic -gastroenterological -gastrohepatic -gastrointestinal -gastronomic -gastronomical -gastroscopic -gastrotomic -gastrovascular -gastrular -gated -gateless -gatelike -gatherable -gauche -gaudy -gaugeable -gaumless -gaunt -gauntleted -gauzelike -gauzier -gauziest -gauzy -gavialoid -gawkier -gawkiest -gawky -gawsy -gay -gazeless -gazellelike -geanticlinal -gearless -geitonogamous -gelatinoid -gelatinous -gelid -gemeled -gemftlich -geminate -geminiflorous -gemless -gemlich -gemlike -gemmaceous -gemmate -gemmier -gemmiest -gemmiferous -gemmiform -gemmiparous -gemmological -gemmuliferous -gemmy -gemological -genal -genealogic -genealogical -generable -general -generalisable -generalizable -generative -generic -generous -genethliac -genethliacally -genethlialogic -genethlialogical -genetic -genial -genic -geniculate -genital -genitalic -genitival -genitive -genitourinary -genocidal -genomic -genotypic -genotypical -genteel -gentianaceous -gentil -gentile -gentle -gentled -gentlemanlike -gentlemanly -gentler -gentlest -gentlewomanly -gentling -genty -genual -genuine -genupectoral -geocentric -geochemical -geochronologic -geochronological -geodesic -geodetic -geodic -geodynamic -geodynamical -geognostic -geognostical -geographical -geoidal -geologic -geomagnetic -geomantic -geomantical -geomedical -geometric -geomorphic -geomorphologic -geomorphological -geophagous -geophilous -geophysical -geophytic -geopolitic -geopolitical -geoponic -georgic -geostatic -geostrophic -geosynclinal -geotactic -geotectonic -geothermal -geotropic -geraniaceous -geratologic -geriatric -germane -germanic -germanous -germfree -germicidal -germinable -germinal -germinant -germinative -germless -germlike -germproof -gerodontic -gerontogeous -gerundial -gerundival -gestational -gestative -gestic -gesticular -gesticulative -gesticulatory -gestural -gestureless -getable -getatable -gethsemanic -gettable -gewgawed -geyseral -geyseric -ghast -ghastful -ghastlier -ghastliest -ghastly -ghostlier -ghostliest -ghostlike -ghostly -ghoulish -gibbed -gibbous -giddied -giddier -giddiest -giddy -giddying -gifted -giftless -gigantean -gigantesque -gigantic -gigglier -giggliest -giggly -gildable -gilded -gimcrack -gimlety -gimmicky -gimpy -gingery -gingival -ginglymoid -ginned -giocoso -gipseian -gipsyesque -gipsyish -gipsylike -girderless -girdlelike -girlish -girly -gironny -giveable -glabellar -glabrate -glabrescent -glabrous -glaca -glace -glacial -glaciered -glaciologic -glaciological -glad -gladelike -gladiate -gladiatorial -gladiolar -gladsome -glaikit -glairier -glairiest -glairy -glaived -glamorous -glandered -glanderous -glandless -glandlike -glandular -glandulous -glareless -glarier -glariest -glaring -glary -glassier -glassiest -glassless -glasslike -glassy -glaucescent -glaucomatous -glauconitic -glaucous -glazed -gleamless -gleanable -glebal -glebeless -gleeful -gleesome -gleetier -gleetiest -gleety -gleg -glenlike -glenoid -glial -glib -glibber -glibbest -gliddery -gliomatous -glisky -glittery -global -globate -globelike -globoid -globose -globular -globuliferous -glochidial -glochidiate -glomerate -glomerular -gloomful -gloomier -gloomiest -gloomless -gloomy -glorifiable -glorious -glossarial -glossatorial -glossematic -glossemic -glossier -glossies -glossiest -glossitic -glossless -glossographical -glossological -glossopharyngeal -glossy -glottal -glottic -glottidean -glottogonic -glottologic -glottological -gloveless -glovelike -glowing -glucidic -glucinic -glucogenic -gluconeogenic -glucosic -glucosidal -glucosidic -glucosuric -gluelike -gluey -gluier -gluiest -glum -glumaceous -glumelike -glummer -glummest -glumpier -glumpiest -glumpy -gluteal -glutenous -glutinous -gluttonous -glycaemic -glycemic -glyceric -glycogenetic -glycogenic -glycogenolytic -glycolic -glycolytic -glyconeogenetic -glycosidic -glycosuric -glykopectic -glykopexic -glyphic -glyphographic -glyptic -glyptographic -gnarled -gnarlier -gnarliest -gnarly -gnathic -gnathonic -gnatlike -gnattier -gnattiest -gnatty -gnawable -gneissic -gneissoid -gnomic -gnomish -gnomologic -gnomological -gnomonic -gnostic -gnotobiotic -goadlike -goalless -goateed -goatish -goatlike -gobioid -gobony -godsent -gogetting -goitrous -golden -goliardic -gonadal -gonadial -gonadotropic -gonangial -gonglike -goniac -gonial -gonidial -gonidic -gonidioid -goniometric -goniometrical -gonococcal -gonococcic -gonococcoid -gonophoric -gonopodial -gonorrheal -gonorrheic -gonorrhoeal -gonorrhoeic -gonothecal -gonydeal -gonydial -good -goodish -goodlier -goodliest -goodly -gooey -goofier -goofiest -goofy -gooier -gooiest -gooselike -goosenecked -goosepimply -goosewinged -goosy -gorbellied -gorgeable -gorged -gorgeous -gorgeted -gorier -goriest -gorillalike -gorillian -gorilline -gorilloid -gormless -gorsy -gory -gossipy -gourdlike -goutier -goutiest -goutish -goutta -gouty -governable -governessy -governmental -gowaned -gowany -goyish -grabbable -graceful -graceless -gracelike -gracile -gracious -gradable -gradational -gradely -gradual -gradualistic -graduated -grained -grainier -grainiest -grainless -grainy -grallatorial -gramineous -graminivorous -grammarless -grammatical -gramophonic -gramophonical -grand -grandfatherly -grandiloquent -grandiose -grandioso -grandmotherly -grandparental -graniferous -granitelike -granitic -granitoid -granivorous -granolithic -granophyric -grantable -granular -granulative -granulitic -granuloblastic -granulocytic -granulomatous -granulose -grapelike -grapey -graphic -graphitic -graphologic -graphological -graphomotor -graphophonic -graphotypic -grapier -grapiest -graptolitic -grapy -graspable -grasping -graspless -grassier -grassiest -grassless -grasslike -grassy -grateful -grateless -gratelike -gratifiable -gratifying -gratuitous -gratulant -gratulatory -graveless -gravelike -gravelish -gravelly -gravest -gravid -gravimetric -gravitational -gravitative -gray -graybearded -grayish -grazeable -greaseless -greaseproof -greasier -greasiest -greasy -great -greatcoated -greatest -greathearted -greaved -greedier -greediest -greedless -greedsome -greedy -greenish -greensick -greenswarded -greetingless -gregarious -greige -grenadierial -gressorial -grewsome -grey -greyish -griefless -grievous -griffinesque -griffinish -grilla -grilled -grim -grimier -grimiest -grimmer -grimmest -grimy -grindable -gripeful -gripey -gripier -gripiest -gripless -grippal -grippelike -grippier -grippiest -gripple -grippy -gripy -griseous -grisettish -grislier -grisliest -grisly -gristlier -gristliest -gristly -gritless -grittier -grittiest -gritty -grizzled -grizzlier -grizzlies -grizzliest -grizzly -groggier -groggiest -groggy -groomish -grooveless -groovelike -groovier -grooviest -groovy -groping -grosgrained -gross -grotesque -grottoed -grottolike -grotty -grouchier -grouchiest -grouchy -groundable -groundless -grouseless -grouselike -groutier -groutiest -grouty -groved -groveless -growable -growing -grown -grubbier -grubbiest -grubby -grubstreet -grudgeless -grudging -grueling -gruelling -gruesome -gruff -gruffier -gruffiest -gruffish -gruffy -grum -grumbly -grummer -grummest -grumous -grumpier -grumpiest -grumpy -gruntled -grushie -guardable -guardant -guarded -guardianless -guardless -guardlike -gubernacular -gubernatorial -gude -guerdonless -guessable -guestless -guidable -guidebookish -guidebooky -guided -guideless -guileful -guileless -guiltier -guiltiest -guiltless -guilty -guitarlike -gular -gules -gulflike -gulfy -gullable -gullible -gulllike -gulpy -gumless -gumlike -gumly -gummatous -gummed -gummier -gummiest -gummous -gummy -gumptionless -gumptious -gunless -gunned -gunpowdery -gushier -gushiest -gushy -gustable -gustative -gustatory -gustier -gustiest -gustless -gustoish -gusty -gutless -gutlike -gutsier -gutsiest -gutsy -guttate -gutterlike -guttersnipish -guttiform -guttural -gutturalized -gutturonasal -gymnanthous -gymnasial -gymnastic -gymnocarpous -gymnogenous -gymnogynous -gymnorhinal -gymnospermal -gymnospermic -gymnospermous -gymnosporous -gynaecic -gynaecocratic -gynaecoid -gynaecologic -gynaecological -gynaecomorphous -gynandromorphic -gynandromorphous -gynandrous -gynantherous -gynarchic -gynecic -gynecocratic -gynecoid -gynecologic -gynecological -gynecomorphous -gynecopathic -gynobasic -gynodioecious -gynomonoecious -gynophoric -gypseian -gypseous -gypsiferous -gypsyesque -gypsyish -gypsylike -gyral -gyrational -gyratory -gyroidal -gyromagnetic -gyronny -gyroscopic -gyrose -gyrostabilized -gyrostatic -habenular -habile -habilimental -habilimentary -habilimented -habitable -habitational -habited -habitual -habitudinal -hacking -hackly -hackneyed -hadal -haec -haemagglutinative -haemagogue -haemal -haematal -haematic -haematitic -haematocryal -haematogenous -haematoid -haematoidin -haematologic -haematological -haematopoiesis -haematopoietic -haematothermal -haematoxylic -haematozoal -haematozoic -haemic -haemocytoblastic -haemodynamic -haemoglobic -haemoglobinous -haemoid -haemolysis -haemolytic -haemophilic -haemorrhagic -haemorrhoidal -haemostatic -haemotoxic -hagborn -haggadic -haggadical -haggadistic -haggard -haggish -hagiographic -hagiographical -hagiolatrous -hagiologic -hagiological -hagioscopic -haglike -hagridden -hailstoned -hairbrained -hairier -hairiest -hairless -hairlike -hairy -halcyon -hale -halest -halfhearted -halfhourly -halfpaced -halituous -hallowed -hallucal -hallucinational -hallucinative -hallucinatory -hallucinogenic -halogenoid -halogenous -haloid -halolike -halophilous -halterlike -halting -haltless -hamamelidaceous -hamate -hammerable -hammered -hammerheaded -hammerless -hammerlike -hammier -hammiest -hammocklike -hammy -hamular -hamulate -hamulous -handbound -handcrafted -handed -handicapped -handier -handiest -handleable -handleless -handless -handlike -handloomed -handmade -handsewn -handsome -handsomeish -handsomer -handsomest -handworked -handwoven -handwritten -handwrought -handy -hangable -hangdog -hapless -haplitic -haploid -haplologic -happier -happiest -happy -haptic -haptical -harangueful -harassable -harassed -harborless -harborous -harbourless -harbourous -hard -hardbound -hardcovered -hardenable -hardened -hardheaded -hardhearted -hardier -hardiest -hardscrabble -hardy -harebrained -harelike -harelipped -harlequinesque -harmful -harmless -harmonic -harmonious -harmonisable -harmonistic -harmonizable -harmotomic -harnessless -harnesslike -harpless -harplike -harpoonlike -harpylike -harsh -haruspical -harvestless -hask -hastate -hasteful -hasteless -hastier -hastiest -hasty -hatable -hatchable -hatcheck -hatchetfaced -hatchetlike -hateable -hateful -hatless -hatlike -haughtier -haughtiest -haughty -haunched -haunchless -haunted -haunting -hauriant -haustellate -haustorial -havenless -hawkish -hawklike -hawknosed -hawthorny -hayey -hazardable -hazardless -hazardous -hazeless -hazelly -hazier -haziest -hazy -headachy -headed -headfirst -headier -headiest -headless -headlike -headmasterly -headmost -headstrong -headward -heady -healable -healing -healthful -healthier -healthiest -healthward -healthy -heaping -heapy -hearable -hearingless -hearselike -heartaching -heartbreaking -heartbroken -hearted -heartfelt -hearthless -heartier -hearties -heartiest -heartless -heartrending -heartsick -heartsickening -heartsome -heartsore -heartwarming -hearty -heatable -heated -heatful -heathenish -heathered -heathery -heathier -heathiest -heathless -heathlike -heathy -heatless -heatlike -heaveless -heavenless -heavenly -heavenward -heavier -heavies -heaviest -heavy -heavyset -hebdomadal -hebephrenic -hebetate -hebetative -hebetic -hebetudinous -hecht -hectic -hectographic -hedgehoggy -hedgeless -hedgier -hedgiest -hedgy -hedonic -hedonistic -heedful -heedless -heeled -heelless -heftier -heftiest -hefty -hegemonic -hegemonical -heigh -heimish -heinous -heirless -heliacal -heliaean -helianthaceous -heliastic -helical -heliced -helicoid -helicoidal -heliocentric -heliochromic -heliographic -heliographical -heliolatrous -heliolithic -heliometric -heliometrical -helioscopic -heliostatic -heliotactic -heliotropic -heliotypic -hellbent -hellish -helmed -helmeted -helmetlike -helminthic -helminthoid -helminthologic -helminthological -helmless -helpable -helpful -helpless -hemagglutinative -hemagogue -hemal -hematal -hemathermal -hematic -hematitic -hematocryal -hematogenous -hematoid -hematologic -hematological -hematopoietic -hematothermal -hematoxylic -hematozoal -hematozoic -hematuric -hemelytral -hemeralopic -hemic -hemicranic -hemicyclic -hemielytral -hemihedral -hemihydrated -hemikaryotic -hemimetabolous -hemimorphic -hemiopic -hemiparetic -hemiplegic -hemipodan -hemipterous -hemispheric -hemispherical -hemispheroidal -hemistichal -hemitropic -hemizygous -hemochromatotic -hemocytoblastic -hemodynamic -hemoglobic -hemoglobinous -hemoglobinuric -hemoid -hemolytic -hemophilic -hemophilioid -hemorrhagic -hemorrhoidal -hemosiderotic -hemostatic -hemotoxic -hemotrophic -hempen -hemplike -hempy -hendecagonal -hendecahedral -hendecasyllabic -henlike -hennish -henotheistic -heortological -hep -heparinoid -hepatic -hepatotoxic -heptagonal -heptahedral -heptahedrical -heptahydrated -heptamerous -heptametrical -heptangular -heptarchal -heptarchic -heptarchical -heptastyle -heptasyllabic -heptavalent -heraldic -herbaceous -herbaged -herbal -herbarial -herbicidal -herbier -herbiest -herbivorous -herbless -herblike -herby -herculean -hereditable -hereditary -heretical -heritable -hermaean -hermaphroditic -hermeneutic -hermetic -hermitic -hermitical -hermitish -hermitlike -hernial -herniated -heroic -herolike -herpetic -herpetologic -herpetological -herringlike -hesitant -hesitative -hesperidate -hesperideous -hetaeric -hetaeristic -hetairic -hetero -heterocercal -heterochromatic -heterochrome -heterochromous -heterochthonous -heteroclite -heterocyclic -heterodactyl -heterodactylous -heterodont -heterodox -heteroecious -heterofermentative -heterogamous -heterogeneous -heterogenetic -heterogenous -heterogonous -heterographic -heterographical -heterogynous -heterolecithal -heterologous -heterolytic -heteromerous -heteromorphic -heteronomous -heteronymous -heterophil -heterophonic -heterophoric -heterophyllous -heteroplastic -heteropolar -heteropterous -heterosporous -heterostyled -heterotactic -heterotelic -heterothallic -heterotopic -heterotrichous -heterotrophic -heterotypic -heterozygotic -heterozygous -heuristic -hewable -hexabasic -hexadic -hexaemeric -hexagonal -hexagrammoid -hexahedral -hexahemeric -hexahydrated -hexahydric -hexahydroxy -hexameral -hexamerous -hexametral -hexametric -hexametrical -hexangular -hexapartite -hexaplar -hexaplaric -hexapodic -hexapodous -hexastichic -hexasyllabic -hexavalent -hexylic -hibernal -hidable -hidebound -hideless -hideous -hidropoietic -hidrotic -hieland -hiemal -hierarchal -hierarchical -hieratic -hierocratic -hierocratical -hierodulic -hieroglyphic -hierogrammatic -hierogrammatical -hierologic -hierological -hierophantic -hierurgical -hifalutin -high -highborn -highbred -highfalutin -highflying -highhanded -hilarious -hillier -hilliest -hillocked -hillocky -hilly -hiltless -hind -hindermost -hindmost -hingeless -hingelike -hiplength -hipless -hiplike -hipped -hipper -hippest -hippiatric -hippiatrical -hippier -hippiest -hippocampal -hippodromic -hippological -hippophagous -hippopotamic -hippy -hipshot -hirable -hircine -hireable -hirstie -hirsute -hirtellous -hirudinoid -hirundine -hispid -hispidulous -histaminic -histie -histiocytic -histioid -histochemical -histogenetic -histographic -histoid -histologic -histological -histolytic -histomorphological -histopathologic -histopathological -histophysiological -historiated -historic -historical -historied -historiographic -historiographical -histrionic -hit -hitchier -hitchiest -hitchy -hithermost -hitless -hittable -hiveless -hivelike -hoarier -hoariest -hoarse -hoary -hoatching -hobbyless -hoblike -hobnailed -hoc -hoelike -hogged -hoggish -hoglike -hoidenish -hokey -holdable -holeless -holeproof -holey -holier -holies -holiest -holistic -hollow -hollowhearted -holmic -holoblastic -holocarpic -holocrine -holohedral -holometabolous -holomorphic -holophrastic -holophytic -holopneustic -holosericeous -holotypic -holozoic -holstered -holy -homalographic -homebound -homebred -homebrewed -homeless -homelier -homeliest -homelike -homely -homemade -homeomorphic -homeomorphous -homeopathic -homeoplastic -homeostatic -homeothermal -homeotypic -homesick -homespun -homeward -homey -homicidal -homier -homiest -homiletic -hominine -hominoid -homocentric -homocercal -homochromatic -homochrome -homochromous -homochronous -homocyclic -homodont -homodyne -homoeomorphic -homoeomorphous -homoeopathic -homoerotic -homofermentative -homogamous -homogeneous -homogenetic -homogenous -homogonous -homographic -homoiothermal -homoiothermic -homolecithal -homological -homolographic -homomorphic -homomorphous -homonymic -homonymous -homophonic -homophonous -homoplastic -homopolar -homopterous -homorganic -homosporous -homostyled -homotaxial -homotaxic -homothallic -homothermal -homothetic -homotypic -homotypical -homozygous -homuncular -homy -honest -honeydewed -honeyed -honeyful -honeyless -honeylike -honeysuckled -honied -honorable -honorary -honorific -honorless -honourable -honourless -hooded -hoodless -hoodlike -hoodlumish -hoodwinkable -hoofbound -hoofed -hoofless -hooflike -hooked -hookier -hookiest -hookless -hooklike -hookwormy -hoopless -hooplike -hopeful -hopeless -hoplitic -horal -horary -horizonless -horizontal -hormic -hormonal -hormonic -hornblendic -horned -hornier -horniest -hornish -hornless -hornlike -horny -horologic -horopteric -horoscopic -horotelic -horrendous -horrent -horrible -horrid -horrific -horsehaired -horselike -horseplayful -horsey -horsier -horsiest -horsy -hortatory -horticultural -hoseless -hoselike -hospitable -hostile -hostless -hostly -hot -hotelless -hotfoot -hotheaded -hotshot -hotspurred -hotter -hotting -hottish -houndish -houndlike -houndy -hourless -hourlong -hourly -housebound -housekeeperlike -houseless -housemaidy -housemotherly -housewifely -hoven -howling -hoydenish -hubbly -hudibrastic -hued -hueless -huffier -huffiest -huffish -huffy -huge -huger -hugest -huggable -hulkier -hulkiest -hulking -hulky -huly -human -humane -humanistic -humanitarian -humanlike -humanoid -humble -humbled -humbler -humblest -humbling -humdrum -humectant -humeral -humic -humid -humiliatory -humilis -hummel -humming -hummocky -humoral -humorful -humoristic -humoristical -humorless -humorous -humourful -humourless -humoursome -humpbacked -humpier -humpiest -humpless -humpy -humuslike -hunchbacked -hundredfold -hundredth -hungerless -hungerly -hungry -hunky -huntable -hunted -hunterlike -hurried -hurtable -hurtful -hurtless -hurtling -husbandless -hushful -huskier -huskiest -husklike -husky -hutlike -hyacinthine -hyaenic -hyaline -hyaloid -hyaloplasmic -hybridisable -hybridizable -hybristic -hydraemic -hydragogue -hydrarch -hydrargyric -hydrated -hydraulic -hydrazo -hydrazoic -hydremic -hydric -hydriodic -hydrobromic -hydrocarbonaceous -hydrocephalic -hydrocephaloid -hydrochloric -hydrocinnamoyl -hydrocinnamyl -hydrocyanic -hydrodynamic -hydroelectric -hydrofluoric -hydrogenous -hydrogeologic -hydrogeological -hydrographic -hydrographical -hydroid -hydrokinetic -hydrologic -hydrological -hydrolysable -hydrolytic -hydrolyzable -hydromantic -hydromechanical -hydromedusan -hydrometallurgical -hydrometeorological -hydrometric -hydrometrical -hydropathic -hydropathical -hydrophanous -hydrophilic -hydrophilous -hydrophobic -hydrophyllaceous -hydrophytic -hydropic -hydroponic -hydroptic -hydrorhizal -hydroscopic -hydroscopical -hydrostatic -hydrosulfurous -hydrotactic -hydrothecal -hydrotherapeutic -hydrothermal -hydrothoracic -hydrotropic -hydrous -hydroxy -hydroxylic -hyenic -hyenine -hyenoid -hyetal -hyetographic -hyetographical -hyetological -hygienic -hygrometric -hygrophilous -hygrophytic -hygroscopic -hylomorphic -hylophagous -hylotheistic -hylotheistical -hylotropic -hylozoic -hylozoistic -hymeneal -hymenial -hymenopterous -hymnless -hymnlike -hymnodical -hymnologic -hymnological -hyoid -hypabyssal -hypaesthesic -hypaethral -hypalgesic -hypanthial -hyperaccurate -hyperacid -hyperactive -hyperacute -hyperadipose -hyperaemic -hyperaesthetic -hyperalgesic -hyperaltruistic -hyperanabolic -hyperanarchic -hyperangelic -hyperangelical -hyperaphic -hyperarchaeological -hyperbarbarous -hyperbaric -hyperbatic -hyperbolic -hyperboloidal -hyperbrachycephalic -hyperbranchial -hyperbrutal -hypercarbureted -hypercarnal -hypercatalectic -hypercathartic -hypercivilized -hyperclassical -hypercoagulable -hypercomposite -hyperconfident -hyperconscientious -hyperconscious -hyperconservative -hyperconstitutional -hypercorrect -hypercritical -hypercyanotic -hyperdelicate -hyperdelicious -hyperdemocratic -hyperdiabolical -hyperdiastolic -hyperdicrotic -hyperdolichocephalic -hyperdulic -hyperdulical -hyperelegant -hyperemetic -hyperemic -hyperemotional -hyperemotive -hyperenergetic -hyperenthusiastic -hyperesthetic -hyperethical -hypereutectic -hypereutectoid -hyperexcitable -hyperexcursive -hyperfastidious -hyperfine -hyperflexible -hyperfunctional -hypergamous -hypergenetic -hypergenetical -hyperglycaemic -hyperglycemic -hypergolic -hypergrammatical -hyperhidrotic -hyperhilarious -hyperidealistic -hyperimmune -hyperintellectual -hyperintelligent -hyperirritable -hyperkalemic -hyperkeratotic -hyperkinetic -hyperlethal -hyperleucocytotic -hyperlipaemic -hyperlipemic -hyperlogical -hyperlustrous -hypermagical -hypermetamorphic -hypermetaphoric -hypermetaphorical -hypermetaphysical -hypermetric -hypermetrical -hypermetropic -hypermiraculous -hypermodest -hypermoral -hypermotile -hypermystical -hypernatural -hyperneurotic -hypernitrogenous -hypernormal -hypernutritive -hyperobtrusive -hyperopic -hyperorganic -hyperorthodox -hyperorthognathous -hyperosmic -hyperostotic -hyperparasitic -hyperpathetic -hyperpathetical -hyperpatriotic -hyperperistaltic -hyperpersonal -hyperphysical -hyperpietic -hyperpigmented -hyperplastic -hyperploid -hyperpolysyllabic -hyperpotassemic -hyperprognathous -hyperprophetic -hyperprophetical -hyperpure -hyperpyretic -hyperpyrexial -hyperrational -hyperreactive -hyperresonant -hyperrhythmical -hyperridiculous -hyperritualistic -hyperromantic -hypersaintly -hypersceptical -hyperscholastic -hyperscrupulous -hypersensitive -hypersensual -hypersensuous -hypersentimental -hypersonic -hypersophisticated -hyperspatial -hyperspeculative -hyperspherical -hyperstatic -hypersthenic -hyperstoical -hypersubtle -hypersuggestible -hypersusceptible -hypersystolic -hypertechnical -hypertelic -hypertense -hypertensive -hyperthermal -hyperthyroid -hypertonic -hypertorrid -hypertoxic -hypertragic -hypertragical -hypertrophic -hypertropical -hypervascular -hypervigilant -hyperviscous -hypervoluminous -hypesthesic -hypethral -hyphal -hyphenated -hyphenic -hypnagogic -hypnoanalytic -hypnogenetic -hypnoid -hypnoidal -hypnologic -hypnological -hypnopompic -hypnosporic -hypnotic -hypnotisable -hypnotistic -hypnotizable -hypoacid -hypobaric -hypoblastic -hypobranchial -hypochloremic -hypochlorous -hypochromic -hypocoristic -hypocotylous -hypocrateriform -hypocritical -hypocycloidal -hypodermal -hypodermic -hypodynamic -hypoeutectic -hypoeutectoid -hypogastric -hypogeal -hypogene -hypogenetic -hypogenic -hypogenous -hypogeous -hypoglossal -hypoglycemic -hypognathous -hypogynous -hypokalemic -hypokinetic -hypolimnetic -hypolimnial -hypolithic -hypomanic -hyponastic -hyponitrous -hypophloeodal -hypophosphoric -hypophosphorous -hypophyllous -hypophyseal -hypoplastic -hypoploid -hypopotassemic -hyporchematic -hyporight -hypostatic -hyposthenic -hypostomial -hypostyle -hyposulfurous -hypotactic -hypotensive -hypothalamic -hypothecary -hypothecial -hypothermal -hypothetical -hypothyroid -hypotonic -hypotrichous -hypoxanthic -hypoxic -hypsicephalic -hypsicephalous -hypsographic -hypsographical -hypsometric -hypsometrical -hyracoid -hyracoidian -hysteretic -hysterical -hysterogenic -hysteroid -hystricomorphic -hyte -iambic -iatric -iatrochemical -iatrogenic -icebound -iced -iceless -icelike -ichnographic -ichnographical -ichnological -ichorous -ichthyic -ichthyographic -ichthyoid -ichthyolitic -ichthyologic -ichthyological -ichthyophagous -ichthyosaurian -ichthyosauroid -ichthyotic -icicled -icier -iciest -ickier -ickiest -icky -iconic -iconoclastic -iconodulic -iconographic -iconolatrous -iconological -iconomatic -icosahedral -icteric -ictic -icy -ideaful -ideaistic -idealess -idealistic -ideational -ideative -idempotent -identic -identical -identifiable -ideographic -ideographical -ideologic -ideomotor -idioblastic -idiochromatic -idiocratic -idiocratical -idiodynamic -idioglottic -idiographic -idiomatic -idiomorphic -idiopathic -idiophonic -idioplasmatic -idioplasmic -idiorrhythmic -idiosyncratic -idiotic -idiotropic -idle -idled -idlest -idling -idolatrous -idoneous -idyllic -iffy -igneous -ignescent -ignitable -ignitible -ignoble -ignominious -ignorable -ignorant -ileac -ileocecal -iliac -ilka -ill -illative -illaudable -illegal -illegible -illegitimate -illhumored -illiberal -illicit -illimitable -illiquid -illiterate -illogical -illtempered -illuminable -illuminating -illuminational -illuminative -illusionary -illusioned -illusionistic -illusive -illusory -illustratable -illustrational -illustrative -illustrious -illuvial -imageable -imagerial -imaginable -imaginal -imaginary -imaginational -imaginative -imagistic -imbecilic -imbibitional -imbricate -imbricative -imidic -imido -imino -imitable -imitational -imitative -immaculate -immane -immanent -immaterial -immature -immeasurable -immediate -immedicable -immemorial -immense -immensurable -immersed -immersible -immethodical -immigrational -immigratory -imminent -immiscible -immitigable -immobile -immoderate -immodest -immoral -immortal -immortalisable -immortalizable -immotile -immovable -immune -immunogenetic -immunogenetical -immunogenic -immunologic -immunological -immusical -immutable -impacted -impactful -impactive -impairable -impalpable -impar -imparipinnate -imparisyllabic -impartable -impartial -impartible -impassable -impassible -impassionate -impassioned -impassive -impatient -impavid -impeachable -impeccable -impeccant -impeccunious -impecunious -impedible -impedient -impedimental -impedimentary -impeditive -impellent -impendent -impending -impenetrable -impenitent -impennate -imperatival -imperative -imperatorial -imperceptible -imperceptive -impercipient -imperfect -imperfectible -imperfective -imperforate -imperial -imperialistic -imperious -imperishable -impermanent -impermeable -impermissible -imperscriptible -impersonal -impertinent -imperturbable -impervious -impetiginous -impetrative -impetratory -impetuous -impingent -impious -impish -implacable -implacental -implausible -impleadable -implemental -implicational -implicative -implicatory -implicit -implied -implorable -imploratory -implosive -impolite -impolitic -imponderable -importable -important -importunate -imposable -imposing -impossible -impostrous -imposturous -impotent -impoundable -impoverished -impracticable -impractical -imprecatory -imprecise -impregnable -impregnatory -imprescriptible -impressible -impressionable -impressional -impressionistic -impressionless -impressive -imprisonable -improbable -impromptu -improper -improvable -improvident -improvisational -improvisatory -imprudent -impudent -impugnable -impuissant -impulsive -impunitive -impure -imputable -imputative -imputrescible -inaccessible -inaccurate -inactive -inadaptable -inadequate -inadmissible -inadvertent -inadvisable -inalienable -inalterable -inane -inanimate -inappeasable -inappellable -inappetent -inapplicable -inapposite -inappreciable -inappreciative -inapprehensible -inapprehensive -inapproachable -inappropriate -inapt -inarguable -inarticulate -inartificial -inartistic -inattentive -inaudible -inaugural -inauspicious -inboard -inbond -inborn -inbound -inbred -incalculable -incalescent -incandescent -incantational -incantatory -incapable -incapacious -incarcerative -incarnate -incarnational -incautious -incendiary -inceptive -incessant -incestuous -inchoate -inchoative -incidental -incidentless -incipient -incised -incisive -incisory -incisural -incitant -incivil -inclement -inclinable -inclinational -inclinatory -includable -included -includible -inclusive -incoercible -incog -incogitable -incogitant -incognita -incognizant -incoherent -incombustible -incomeless -incoming -incommensurable -incommensurate -incommodious -incommunicable -incommunicative -incommutable -incompact -incomparable -incompatible -incompetent -incomplete -incompliant -incomprehensible -incomprehensive -incompressible -incomputable -inconceivable -inconclusive -incondensable -incondite -incongruent -incongruous -inconsecutive -inconsecutively -inconsequent -inconsequential -inconsiderable -inconsiderate -inconsistent -inconsolable -inconsonant -inconspicuous -inconstant -inconsumable -incontestable -incontinent -incontinuous -incontrollable -incontrovertible -inconvenient -inconvertible -inconvincible -incoordinate -incorporable -incorporated -incorporating -incorporative -incorporeal -incorrect -incorrigible -incorrupt -incorruptible -incrassate -incrassative -increasable -increasing -increate -incredible -incredulous -incremental -increscent -incretionary -incretory -incriminatory -incrustant -incubational -incubative -incubatory -incubous -incudate -inculcative -inculpable -inculpatory -incult -incumbent -incunabular -incurable -incurious -incurrable -incurrent -incursive -indagative -indebted -indecent -indeciduate -indeciduous -indecipherable -indecisive -indeclinable -indecomposable -indecorous -indefatigable -indefeasible -indefectible -indefective -indefensible -indefinable -indefinite -indehiscent -indeliberate -indelible -indelicate -indemnificatory -indemonstrable -indented -independent -indescribable -indestructible -indeterminable -indeterminate -indeterministic -indevout -indexical -indexless -indicatable -indicative -indicatory -indicial -indictable -indictional -indifferent -indigenous -indigent -indigested -indigestible -indigestive -indign -indignant -indigoid -indirect -indiscernible -indiscerptible -indiscoverable -indiscreet -indiscrete -indiscretionary -indiscriminate -indiscriminating -indiscriminative -indispensable -indisposed -indisputable -indissoluble -indistinct -indistinctive -indistinguishable -indivertible -individual -individualistic -indivisible -indocile -indolent -indologenous -indomitable -indoor -indorsable -indrawn -indubitable -inducible -inductile -inductionless -inductive -indulgent -induplicate -indurative -indusial -indusiate -industrial -industrious -inebriant -inedible -inedited -ineducable -ineffable -ineffaceable -ineffective -ineffectual -inefficacious -inefficient -inelastic -inelegant -ineligible -ineloquent -ineluctable -ineludible -inenarrable -inept -inequable -inequilateral -inequitable -inequivalve -ineradicable -inerasable -inerrant -inerratic -inert -inertial -inescapable -inessential -inessive -inestimable -inevasible -inevitable -inexact -inexcusable -inexhaustible -inexistent -inexorable -inexpedient -inexpensive -inexperienced -inexpert -inexpiable -inexpiate -inexplainable -inexplicable -inexplicit -inexplosive -inexpressible -inexpressive -inexpugnable -inexpungible -inextensible -inextinguishable -inextirpable -inextricable -infallible -infamous -infanticidal -infantile -infantine -infantlike -infarcted -infatuated -infeasible -infectant -infectious -infective -infecund -infelicitous -infelt -inferable -inferential -inferible -inferior -infernal -inferoanterior -inferrible -infertile -infiltrative -infinite -infinitesimal -infinitival -infirm -inflammable -inflammatory -inflated -inflationary -inflectional -inflectionless -inflective -inflexed -inflexible -inflexional -inflexionless -inflictable -inflictive -inflorescent -influenceable -influent -influential -influenzal -influenzalike -informable -informal -informational -informative -informed -infortunate -infracostal -infrahuman -inframarginal -infrangible -infrasonic -infrequent -infundibular -infundibulate -infundibuliform -infuscate -infusible -infusive -infusorial -ingenerate -ingenious -ingenuous -ingestible -ingestive -inglorious -ingoing -ingrained -ingratiating -ingratiatory -ingravescent -ingressive -ingrowing -ingrown -inguinal -inhabitable -inhabited -inhalant -inharmonic -inharmonious -inherent -inheritable -inherited -inhibitable -inhibitory -inhomogeneous -inhospitable -inhuman -inhumane -inimical -inimitable -iniquitous -initial -initiatory -injectable -injudicious -injunctive -injurable -injured -injurious -inkier -inkiest -inkless -inklike -inky -inlaid -inland -inlying -inmigrant -inmost -innate -inner -innermost -innerspring -innervational -innless -innocent -innocuous -innominate -innovational -innovative -innovatory -innoxious -innumerable -innumerate -innutritious -inobservant -inoculable -inoculative -inodorous -inoffensive -inofficious -inoperable -inoperative -inopportune -inordinate -inorganic -inotropic -inoxidizable -inphase -inquilinous -inquirable -inquiring -inquisitional -inquisitive -inquisitorial -insalubrious -insane -insanitary -insatiable -insatiate -inscribable -inscriptional -inscriptionless -inscriptive -inscrutable -insectan -insectean -insecticidal -insectile -insectival -insectivorous -insectlike -insecure -insensate -insensible -insensitive -insentient -inseparable -insertable -inserted -insertional -insessorial -inseverable -inshore -insides -insidious -insightful -insignificant -insincere -insinuating -insinuative -insipid -insipient -insistent -insociable -insolent -insoluble -insolvable -insolvent -insomniac -insomnious -insomnolent -insouciant -inspectable -inspectional -inspective -inspectoral -inspectorial -inspirable -inspirational -inspirative -inspiratory -instable -instantaneous -instigative -instinctive -institutional -institutionary -institutive -instructible -instructional -instructive -instructorial -instructorless -instrumental -insubordinate -insubstantial -insufferable -insufficient -insular -insultable -insulting -insuperable -insupportable -insuppressible -insurable -insured -insurgent -insurmountable -insurrectional -insurrectionary -insusceptible -inswept -intact -intangible -intarsiate -integrable -integral -integrant -integrative -integumentary -intellective -intellectual -intellectualistic -intelligent -intelligential -intelligible -intemerate -intemperate -intended -intense -intensional -intensive -intentional -intentioned -intentionless -interacademic -interaccessory -interacinous -interactional -interactive -interadditive -interalar -interalveolar -interangular -interannular -interapophysal -interapophyseal -interarticular -interartistic -interarytenoid -interasteroidal -interastral -interatomic -interatrial -interaulic -interaural -interauricular -interavailable -interaxial -interaxillary -interbanded -interbank -interbedded -interbelligerent -interborough -interbrachial -interbranch -interbranchial -interbreath -interbrigade -interbronchial -intercalary -intercalative -intercapillary -intercardinal -intercarotid -intercarpal -intercarpellary -intercartilaginous -intercaste -intercatenated -intercausative -intercavernous -intercellular -intercentral -interceptive -intercerebral -intercessional -intercessorial -intercessory -interchangeable -interchondral -interchurch -interciliary -intercity -intercivic -interclass -interclavicular -interclerical -interclub -intercoccygeal -intercollege -intercollegiate -intercolonial -intercolumnal -intercolumnar -intercommissural -intercommunal -intercommunicable -intercommunicative -intercompany -intercomparable -intercomplimentary -interconciliary -intercondylar -intercondylic -intercondyloid -interconfessional -interconsonantal -intercontinental -intercontorted -intercontradictory -interconvertible -intercoracoid -intercorporate -intercorpuscular -intercortical -intercosmic -intercostal -intercotylar -intercounty -intercranial -intercrinal -intercrural -intercrystalline -intercurrent -intercuspidal -intercystic -interdenominational -interdental -interdepartmental -interdependable -interdependent -interdestructive -interdictory -interdiffusive -interdigital -interdisciplinary -interdistrict -interdorsal -interempire -interepidemic -interepithelial -interequinoctial -interested -interesting -interestuarine -interfacial -interfactional -interfaith -interfamily -interfascicular -interfemoral -interfenestral -interferential -interferometric -interfertile -interfibrillar -interfibrous -interfilamentary -interfilamentous -interfilar -interfluent -interfluvial -interfoliaceous -interfraternal -interfrontal -interfulgent -intergalactic -interganglionic -intergenerating -intergenerative -intergilt -interglacial -interglandular -interglobular -intergonial -intergovernmental -intergradational -intergranular -intergroup -intergular -intergyral -interhaemal -interhemal -interhemispheric -interhostile -interhuman -interim -interimperial -interindividual -interinhibitive -interinsular -interionic -interisland -interjacent -interjaculatory -interjectional -interjectory -interjectural -interjugal -interjugular -interkinetic -interlabial -interlaboratory -interlacustrine -interlamellar -interlaminar -interlatitudinal -interlibrary -interligamentary -interligamentous -interlineal -interlinear -interloan -interlobar -interlobate -interlobular -interlocal -interlocular -interlocutory -interlucent -interludial -interlunar -intermalar -intermalleolar -intermammary -intermammillary -intermandibular -intermanorial -intermarginal -intermarine -intermastoid -intermaxillary -intermeasurable -intermediate -intermediatory -intermembral -intermembranous -intermeningeal -intermenstrual -intermesenteric -intermetacarpal -intermetallic -intermetameric -intermetatarsal -interminable -interministerial -intermissive -intermittent -intermixable -intermolar -intermolecular -intermomentary -intermontane -intermundane -intermunicipal -intermural -intermuscular -internal -internarial -internasal -internation -international -internecine -internetted -interneural -interneuronic -internidal -internodal -internuclear -internuncial -interoceanic -interoceptive -interocular -interoffice -interolivary -interoptic -interorbital -interosseous -interpalatine -interpalpebral -interpapillary -interparenchymal -interparental -interparenthetic -interparenthetical -interparietal -interparliament -interparliamentary -interparoxysmal -interparty -interpectoral -interpeduncular -interpellant -interpenetrable -interpenetrant -interpenetrative -interpersonal -interpervasive -interpetaloid -interpetalous -interpetiolar -interphalangeal -interplacental -interplanetary -interpleural -interpolable -interpolar -interpolative -interportal -interposable -interpressure -interpretable -interpretational -interpretative -interpretive -interprismatic -interprofessional -interproglottidal -interproportional -interprotoplasmic -interprovincial -interproximal -interpterygoid -interpubic -interpulmonary -interpupillary -interrace -interracial -interradial -interrailway -interramal -interregimental -interregional -interregnal -interrelated -interreligious -interrenal -interrepellent -interresponsible -interreticular -interroad -interrogable -interrogational -interrogative -interrogatory -interrupted -interruptible -interruptive -interscapular -interscholastic -interscience -interseaboard -intersectant -intersectional -intersegmental -interseminal -intersentimental -interseptal -intersesamoid -intersexual -intershifting -intershop -intersidereal -intersocial -intersocietal -intersociety -intersoluble -intersonant -interspatial -interspecial -interspheral -interspicular -interspinal -interspinous -intersporal -interstadial -interstaminal -interstate -interstation -interstellar -intersticed -interstitial -interstream -interstreet -interstrial -intersubjective -intersystem -intersystematic -intersystematical -intertarsal -interteam -intertentacular -intertergal -interterminal -interterritorial -interthreaded -interthronging -intertidal -intertissued -intertown -intertrabecular -intertransformable -intertransversal -intertribal -intertropical -intertuberal -intertubercular -intertubular -interungular -interungulate -interuniversity -interurban -intervaginal -intervalic -intervalvular -intervarietal -intervarsity -intervascular -interveinal -interveinous -intervenient -interventional -interventionist -interventral -interventricular -intervenular -interverbal -intervertebral -intervesicular -interviewable -intervillous -intervocalic -intervolute -interword -interwrought -interxylary -interzonal -interzooecial -intestable -intestate -intestinal -intimal -intimate -intime -intimidatory -intimist -intimiste -intoed -intolerable -intolerant -intonational -intortus -intown -intoxicable -intoxicated -intoxicative -intraabdominal -intracardiac -intracellular -intracranial -intractable -intracutaneous -intradermal -intramarginal -intramolecular -intramundane -intramural -intramuscular -intranational -intransigent -intransitive -intranuclear -intrapsychic -intraspinal -intrastate -intratelluric -intrauterine -intravascular -intravenous -intravital -intrepid -intricate -intrinsic -introducible -introductory -intromissible -intromissive -intromittent -intropunitive -introrse -introspectable -introspectible -introspectional -introspective -introversive -intrusional -intrusive -intuitable -intuitional -intuitionless -intuitive -intumescent -inturned -intussusceptive -inundant -inundatory -inurbane -inutile -invadable -invaginable -invaluable -invariable -invasive -invected -inventable -inventible -inventional -inventionless -inventive -inventoriable -inventorial -inverse -inversive -invertible -investable -investible -investigable -investigational -investigative -investigatory -investitive -inveterate -inviable -invidious -invigorative -invincible -inviolable -inviolate -invisible -invitational -invitatory -inviting -invocable -invocative -invocatory -involucelate -involucral -involucrate -involuntary -involute -involutional -involved -invulnerable -inward -inwrought -iodic -iodimetric -iodometric -iodous -ionic -ionisable -ionizable -ionogenic -ionospheric -ipsilateral -iracund -irascible -irate -ireless -irenic -iridaceous -iridescent -iridic -iridopupillary -iridous -iritic -irksome -ironbound -ironclad -ironfisted -ironhanded -ironic -ironical -ironless -ironlike -irradiant -irradiative -irrational -irrationalist -irrationalistic -irrebuttable -irreclaimable -irreconcilable -irrecoverable -irrecusable -irredeemable -irreducible -irreformable -irrefragable -irrefrangible -irrefutable -irregardless -irregular -irrelative -irrelevant -irrelievable -irreligious -irremeable -irremediable -irremissible -irremovable -irreparable -irrepealable -irreplaceable -irrepleviable -irreplevisable -irrepressible -irreproachable -irresistible -irresoluble -irresolute -irresolvable -irrespective -irrespirable -irresponsible -irresponsive -irretentive -irretraceable -irretrievable -irreverent -irreversible -irrevocable -irrigable -irrigational -irrigative -irriguous -irritable -irritant -irritative -irrorate -irrotational -irruptive -isacoustic -isagogic -isandrous -isanomalous -isanthous -isauxetic -ischaemic -ischemic -ischiadic -isenthalpic -isentropic -isidioid -islandish -islandless -islandlike -isleless -isleted -isoagglutinative -isoamyl -isobaric -isobathic -isobathythermal -isobathythermic -isocarpic -isocephalic -isoceraunic -isochasmic -isocheimal -isocheimenal -isocheimic -isochimal -isochoric -isochromatic -isochronal -isochronous -isochroous -isoclinal -isocratic -isocyano -isodiametric -isodimorphic -isodimorphous -isodomic -isodose -isodynamic -isoelastic -isoelectric -isoelectronic -isogamous -isogenous -isogeothermal -isogeothermic -isoglossal -isogonal -isogonic -isographic -isographical -isohyetal -isokeraunic -isolable -isolatable -isolating -isolative -isolecithal -isologous -isomagnetic -isomeric -isomerous -isometric -isomorphic -isomorphous -isonephelic -isonomic -isonomous -isopachous -isopentyl -isoperimetric -isoperimetrical -isopetalous -isopiestic -isopodan -isopodous -isopolitical -isoporic -isopycnic -isorhythmic -isosceles -isoseismal -isoseismic -isosmotic -isospondylous -isostatic -isostemonous -isosteric -isostructural -isotactic -isotheral -isothermal -isothermobathic -isothiocyano -isotimic -isotonic -isotopic -isotropic -isotypic -issuable -issuant -issueless -isthmian -isthmoid -italic -itchier -itchiest -itching -itchy -iterant -iterative -ithyphallic -itinerant -ivied -ivorylike -ivylike -jackbooted -jacketed -jacketless -jacketlike -jackleg -jaculatory -jaculiferous -jaded -jadelike -jadish -jagged -jaggier -jaggiest -jaggy -jagless -jailless -jaillike -jake -jalapic -jalousied -jamlike -jammy -jangly -janiform -janitorial -jannock -jargonal -jargonesque -jargonish -jargonistic -jarless -jaseyed -jasmined -jasminelike -jasp -jaspa -jasperated -jaspered -jasperoid -jaspery -jauntier -jauntiest -jaunty -jawbreaking -jawless -jawlike -jazzier -jazziest -jazzy -jealous -jejunal -jejune -jellied -jellylike -jeopardous -jerkier -jerkiest -jerkwater -jerky -jerseyed -jessant -jestful -jesting -jettisonable -jewellike -jiggered -jiggish -jiggly -jiglike -jimp -jingly -jingoish -jingoistic -jittery -jobless -jockeyish -jockeylike -jocose -jocular -jocund -joinable -jointed -jointless -jointured -jointureless -joistless -jokeless -jollier -jolliest -jolly -joltier -joltiest -joltless -jolty -jonnick -jonnock -jotty -journalary -journalish -journalistic -jovial -jowled -jowlier -jowliest -jowly -joyful -joyless -joyous -jubate -jubilant -jubilatory -judaistic -judgeable -judgeless -judgelike -judgemental -judgmatic -judgmental -judicable -judicative -judicatorial -judicatory -judiciable -judicial -judiciary -judicious -jugal -jugate -juglandaceous -jugular -juiceless -juicier -juiciest -juicy -julienne -jumpable -jumpier -jumpiest -jumpy -juncaceous -junctional -jungled -jungly -junior -jural -jurant -juratory -juridical -jurisdictive -jurisprudent -jurisprudential -juristic -juryless -juryrigged -jussive -just -justiceless -justicelike -justiciable -justiciary -justifiable -justificatory -jutelike -juvenal -juvenescent -juvenile -juxtapositional -kacha -kakistocratical -kaleidoscopic -kalendarial -kangaroolike -kaolinic -karmic -karstic -karyogamic -karyokinetic -karyolitic -karyoplasmatic -karyoplasmic -karyotypic -karyotypical -katabatic -katabolic -katamorphic -katatonic -kathartic -kathodic -keelless -keen -keepable -keeperless -keloidal -kempt -kempy -kenogenetic -kenotic -kenspeckle -keramic -keratinous -keratogenous -keratoid -keratometric -keratoplastic -keratose -keratosic -keratotic -kerchiefed -kerchieft -kernelless -kernelly -kerygmatic -keto -ketogenetic -ketolytic -ketonic -keyed -keyless -khakilike -khedival -khedivial -kickable -kickless -kidlike -kidneylike -killable -killing -kilometric -kilometrical -kilted -kiltlike -kimonoed -kinaesthetic -kind -kindhearted -kindless -kindlier -kindliest -kindly -kindred -kindredless -kinematic -kinematical -kinematographic -kinematographical -kinesic -kinesthetic -kinetic -kinetographic -kinetoscopic -kingdomless -kingless -kinglier -kingliest -kinglike -kingly -kinkier -kinkiest -kinkled -kinkly -kinless -kirklike -kirtled -kissable -kitchenless -kitcheny -kitelike -kittenish -kittenlike -kittle -klephtic -klutzy -knaggier -knaggiest -knaggy -knapsacked -knarred -knarry -knavish -kneadable -knickerbockered -knickered -knickknacked -knickknacky -knifeless -knifelike -knightless -knightly -knittable -knitted -knobbier -knobbiest -knobby -knoblike -knockdown -knockless -knolly -knotless -knotlike -knotted -knottier -knottiest -knotty -knowable -knowing -knowledgeable -knowledgeless -knuckleheaded -knuckly -knurled -knurlier -knurliest -knurly -kokobeh -kookier -kookiest -kooky -kosher -kraurotic -kutcha -kymographic -kyphoscoliotic -kyphotic -labelloid -labial -labialized -labile -labiodental -labionasal -labiovelar -laboratorial -labored -laborious -laboristic -laborless -laboured -labourless -labradoritic -labyrinthine -laccolithic -laceless -lacelike -lacerable -lacerant -lacerated -lacerative -lacertilian -lachrymal -lachrymose -lacier -laciest -laciniate -lackadaisical -lackluster -lacklustre -laconic -laconical -lacrimal -lacrimatory -lactary -lactational -lacteal -lacteous -lactescent -lactic -lactiferous -lactogenic -lactonic -lacunal -lacunaris -lacunose -lacunosis -lacustrine -lacy -ladderless -ladderlike -laddery -laddish -laden -ladyish -ladyless -ladylike -laevo -laevogyrate -laevorotatory -lageniform -lagomorphic -lagomorphous -lagoonal -laic -laigh -lairdly -lairy -lakier -lakiest -laky -lambdoid -lambent -lamblike -lame -lamellar -lamellate -lamelliform -lamellirostral -lamellose -lamentable -lamented -lamer -lamest -lamiaceous -laminable -laminar -laminariaceous -laming -laminose -laminous -lampless -lamprophonic -lamprophyric -lanate -lancelike -lanceolate -lanceted -lanciform -lancinate -landed -landholding -landless -landlike -landlocked -landlordly -landlubberish -landlubberly -landlubbing -landward -lang -langued -languid -languishing -languorous -laniary -laniferous -lank -lanky -lanolated -lanose -lanuginose -laodicean -lapactic -lapelled -lapidific -lapidifical -lappeted -lapsable -lapsible -lapstrake -larcenous -larcher -lardaceous -lardier -lardiest -lardlike -lardy -largando -large -larger -largest -larghetto -largish -largo -larine -larithmic -larkish -larksome -larky -larval -larvicidal -larviparous -larvivorous -laryngeal -laryngitic -laryngologic -laryngological -laryngopharyngeal -laryngoscopic -laryngoscopical -laryngotracheal -lascivious -lashed -lashless -last -lasting -late -lated -lateen -lateenrigged -latent -later -lateral -laterigrade -lateritic -lateritious -latest -lathery -lathier -lathiest -lathlike -lathy -laticiferous -latish -latitudinal -latitudinarian -latitudinous -latreutic -latter -lattermost -latticed -latticelike -laudable -laudatory -laughable -laughterless -launchable -launderable -lauraceous -laureate -lauric -lauroyl -lavational -lavish -lawful -lawless -lawlike -lawny -lawyerlike -lawyerly -lax -lazarlike -lazier -laziest -lazuline -lazulitic -lazy -lazyish -leachable -leachier -leachiest -leachy -leaden -leaderless -leadier -leadiest -leading -leadless -leady -leafed -leafier -leafiest -leafless -leaflike -leafy -leakless -leaky -leal -learnable -learned -leary -leasable -leaseless -leathern -leathery -leaved -leavenless -lecherous -lecithal -lecithoid -lecythoid -ledgeless -ledgier -ledgiest -ledgy -leechlike -leerier -leeriest -leery -leeward -left -leftist -leftward -legal -legalistic -legatine -legationary -legatorial -legendary -legged -leggier -leggiest -legginged -leggy -legible -legionary -legislative -legislatorial -legit -legitimate -legitimated -legitimating -legless -leglike -leguminous -leiomyomatous -leishmanial -leishmanic -leishmanioid -leisurable -leisured -leisureless -leisurely -lekker -lemonish -lemonlike -lemony -lemurlike -lemuroid -lendable -lengthier -lengthiest -lengthy -lenient -lenis -lenitic -lenitive -lensless -lenslike -lentando -lenten -lentic -lenticellate -lenticular -lenticularis -lentiginous -lentissimo -lento -lentoid -leonine -lepidopterological -lepidopterous -lepidote -leporid -leporine -leprose -leprotic -leprous -leptodactylous -leptokurtic -leptophyllous -leptoprosopic -leptorrhine -leptosomatic -leptosomic -leptospiral -lesser -lestobiotic -lethal -lethargic -lethiferous -lettered -letterless -leucemic -leucitic -leucocratic -leucocythaemic -leucocythemic -leucocytic -leucocytotic -leuconoid -leucopoietic -leucorrheal -leucorrhoeal -leucotic -leukaemic -leukemic -leukemoid -leukoblastic -leukocytic -leukocytotic -leukopenic -leukopoietic -leukorrheal -leukorrhoeal -level -leverlike -leviable -leviratic -leviratical -levitational -levitative -levo -levogyrate -levorotatory -lewd -lexical -lexicographic -lexicographical -lexicologic -lexicological -lexicostatistic -lexicostatistical -liable -lianoid -libational -libationary -libelous -liberal -liberalistic -liberative -liberatory -liberticidal -libidinal -libidinous -librational -libratory -libriform -licenceable -licenseless -licentious -lichenlike -lichenoid -lichenologic -lichenological -lichenous -licit -lickerish -lictorian -lidded -lidless -liege -lienable -lienal -lienteric -lifeful -lifeless -lifelike -lifelong -lifesaving -liftable -ligamentous -ligative -lightfast -lightful -lightish -lightless -lightsome -lightweight -ligneous -lignicolous -ligniform -lignitic -lignivorous -lignocellulosic -ligular -ligulate -liguloid -likable -like -likeable -likelier -likeliest -likely -lilaceous -liliaceous -lilied -lilylike -limacine -limbate -limbed -limber -limbic -limbless -limeless -limelike -limicoline -limicolous -limier -limiest -liminal -limitable -limitary -limitative -limited -limiting -limitless -limitrophe -limnetic -limnologic -limnological -limonitic -limpid -limpsy -limuloid -limy -linable -lineable -lineal -lineamental -linear -lineate -linebred -lineless -linelike -lineny -lineolate -liney -lingual -linguiform -linguistic -linguistical -lingulate -linier -liniest -linked -linoleic -lintier -lintiest -lintless -linty -liny -lionesque -lionhearted -lionlike -lionly -lipaemic -lipemic -lipless -liplike -lipochromic -lipogrammatic -lipographic -lipoid -lipolitic -lipomatous -lipopectic -lipophilic -lipotropic -lipped -lippy -liquefactive -liquefiable -liquescent -liquorish -liquory -lirellate -lissom -lissome -lissotrichous -listed -listless -literal -literalistic -literary -literate -lithaemic -lithe -lithemic -lither -lithesome -lithest -lithic -lithographic -lithographical -lithoid -lithologic -lithological -lithophile -lithophytic -lithotomic -lithotomical -lithy -litigable -litigious -litoral -litten -littery -littlish -littoral -liturgical -liturgiological -liturgistic -livable -liveable -lived -livelier -liveliest -livelong -lively -liveried -liverish -liverless -livest -livid -living -loaded -loadless -loaferish -loamless -loamy -loanable -loath -loathful -loathsome -lobar -lobate -lobed -lobeliaceous -lobose -lobular -lobulate -local -localisable -localistic -localizable -locatable -locative -lochial -lockable -lockless -locomobile -locomotor -locular -loculate -loculicidal -locustal -locustlike -lodgeable -lodged -loessal -loessial -loftier -loftiest -loftless -lofty -loganiaceous -logaoedic -logarithmic -loggerheaded -loggish -logical -logicless -logier -logiest -logogrammatic -logographic -logogriphic -logomachic -logomachical -logopedic -logorrheic -logy -lomentaceous -lomentlike -lone -lonelier -loneliest -lonely -lonesome -long -longanamous -longevous -longicaudal -longish -longitudinal -longshore -longsome -longstanding -longtime -longwall -longwise -looney -loonier -loonies -looniest -loony -looped -loopy -loose -looser -lophobranchiate -lophodont -lophophoral -loppy -lopsided -loquacious -loral -lordless -lordlier -lordliest -lordlike -lordly -lordotic -loreless -loricate -lorn -losable -losing -lossy -lost -loth -lothsome -lotic -louche -loud -loudish -lounging -loungy -louring -loury -lousier -lousiest -lousy -loutish -louvered -louvred -lovable -loveable -loveless -lovelier -loveliest -lovelorn -lovely -loverless -loverlike -lovesick -lovesome -loving -low -lowborn -lowbred -lower -lowerable -lowering -lowermost -lowery -lowish -lowlier -lowliest -lowly -lown -lowse -lowser -lowsest -loxodont -loxodromic -loyal -lozenged -lozengy -lubberly -lubric -lubricational -lubricative -lubricatory -lubricious -lubricous -lucent -lucid -luciferous -luckier -luckiest -luckless -lucky -lucrative -lucubratory -luculent -ludicrous -luetic -luggageless -lugubrious -lukewarm -lumbar -lumberless -lumbosacral -lumbricoid -luminescent -luminiferous -luminous -lumpen -lumpier -lumpiest -lumpish -lumpy -lunar -lunate -lunatic -luncheonless -lunchless -lungeous -lunier -lunies -luniest -lunisolar -lunitidal -lunkheaded -lunular -lunulate -luny -lupine -lupous -lurid -luscious -lush -lushier -lushiest -lushy -lustered -lusterless -lustful -lustier -lustiest -lustral -lustrative -lustred -lustreless -lustrous -lusty -luteal -luteotropic -luteous -lutose -luxuriant -luxurious -lyard -lycanthropic -lychnoscopic -lymphangial -lymphangiomatous -lymphatic -lymphatolytic -lymphoblastic -lymphocytic -lymphocytotic -lymphoid -lymphomatoid -lyncean -lynxlike -lyocratic -lyolytic -lyonnaise -lyophilic -lyophobic -lyotropic -lyrate -lyric -lyrical -lyriform -lythraceous -lytic -macabre -macaronic -macerative -machinable -machineless -machinelike -mackinawed -mackintoshed -macled -macrobiotic -macroclimatic -macrocytic -macrodont -macrographic -macrolecithal -macrolinguistic -macrometeorological -macromolecular -macronuclear -macronucleate -macropodous -macropterous -macroptic -macroscopic -macrosporic -macrostomatous -macrostylous -macrurous -macular -mad -madcap -maddening -maddest -madding -maddish -madrigalesque -madrigalian -maduro -maenadic -maestoso -magazinish -magaziny -maggoty -magical -magisterial -magistral -magmatic -magnanimous -magnesial -magnesian -magnesic -magnetic -magnetographic -magnetohydrodynamic -magnetometric -magnetomotive -magnetooptic -magnetostrictive -magnific -magnificent -magniloquent -magnipotence -magnipotent -magnisonant -magnitudinous -magnoliaceous -maidenish -maidenly -maieutic -maigre -mailable -mailed -mailless -main -maintainable -mair -majestic -majuscular -makable -makeless -makeshift -malaceous -malacoid -malacological -malacophilous -malacophyllous -malacopterygian -malacotic -maladapted -maladaptive -maladjusted -maladroit -malapert -malapportioned -malapropos -malar -malarial -malarian -malarious -malcontent -male -maledictive -maledictory -maleficent -malevolent -malicious -malign -malignant -malimprinted -malleable -malnourished -malodorous -malonic -malonyl -malpighiaceous -malty -malvaceous -malvasian -mammalogical -mammary -mammiferous -mammillary -mammillate -mammonistic -manageable -managemental -managerial -managing -manasic -manatoid -mandatory -mandibular -mandibulate -manducable -manducatory -maned -maneless -maneuverable -manful -manganic -manganous -mangey -mangier -mangiest -mangy -maniacal -manic -manifest -manifestative -manifold -maniform -manipulable -manipular -manipulatable -manistic -manky -manless -manlier -manliest -manlike -manly -manned -mannered -manneristic -mannerless -mannerly -mannish -manometric -manometrical -manorial -manqua -mantic -mantric -manual -manubrial -manufacturable -manufactural -manuscriptal -maplelike -mappable -marauding -marcescent -mardy -margaric -margaritaceous -marginal -margravial -marigraphic -marine -marish -marital -maritime -marked -marketable -marketwise -marlacious -marled -marlitic -marly -marmoreal -marriageable -married -marrowish -marshier -marshiest -marshlike -marshy -martela -martensitic -martial -martyrish -martyrologic -martyrological -marvellous -marvelous -masculine -masked -masklike -masochistic -masonic -massier -massiest -massive -massless -massy -masterful -masterless -masterly -masticable -masticatory -mastitic -mastless -mastlike -mastoid -mastoparietal -masturbatic -masturbational -masturbatory -matchable -matchless -matelass -maternal -maternalistic -matey -mathematical -matin -matless -matriarchal -matriarchic -matrilateral -matrilineal -matrilocal -matrimonial -matripotestal -matroclinous -matronal -matronly -matronymic -matt -matted -matterful -matterless -mattery -maturative -mature -matutinal -maudlin -maungy -mausolean -mawger -mawkish -maxi -maxillary -maxillipedary -maximal -mayan -mayoral -mazelike -mazier -maziest -mazy -meadowless -meager -meagre -mealier -mealiest -mealless -mealy -meandrous -meaningful -meaningless -meanspirited -measled -measlier -measliest -measly -measurable -measured -measureless -meatal -meatier -meatiest -meaty -mechanical -mechanismic -mechanistic -mechanomorphic -medallic -meddlesome -mediaeval -medial -median -mediastinal -mediative -mediatorial -medicable -medical -medicamental -medicamentous -medicinable -medicinal -medicochirurgical -medicolegal -medieval -mediocre -mediocris -medium -medullary -medullated -medusoid -meek -megacephalic -megadont -megalecithal -megalithic -megalomaniacal -megalopolitan -megaphonic -megascopic -megasporic -megathermal -megathermic -meiotic -melancholic -melanic -melaniferous -melanistic -melanitic -melanoid -melanospermous -melanous -meliaceous -melic -meliorable -meliorative -melioristic -melismatic -melliferous -mellifluent -mellifluous -mellow -melodic -melodious -melodramatic -melodyless -meltable -memberless -membraneless -membranophonic -membranous -memorable -memorial -memoried -memorizable -menadic -menarcheal -menarchial -mendable -mendicant -menial -meningeal -meningitic -meningococcal -meningococcic -meniscoid -menispermaceous -menopausal -menopausic -menorrhagic -mensal -menseful -menseless -menshevist -menstrual -mensurable -mensural -mental -mentalistic -menthaceous -mentholated -mentionable -mephitic -mercantile -mercapto -mercenary -merchantable -merchantlike -merciful -merciless -mercurial -mercuric -merdivorous -mere -merest -meretricious -meridional -meristematic -meristic -merited -meritless -meritorious -meroblastic -merocrine -merrier -merriest -merry -mesarch -mesencephalic -mesenteric -mesenteronic -meshuga -mesial -mesic -mesne -mesoappendiceal -mesoblastic -mesocephalic -mesocranic -mesocratic -mesodermal -mesodermic -mesodont -mesogastric -mesogleal -mesogloeal -mesognathous -mesolecithal -mesometeorological -mesomorphic -mesonephric -mesophile -mesophilic -mesophytic -mesorrhine -mesothelial -mesothoracic -messianic -messier -messiest -messy -meta -metabiotic -metabolic -metabolous -metacarpal -metachromatic -metachronal -metagalactic -metagenic -metagnathous -metainfective -metaleptic -metaleptical -metalinguistic -metalled -metallic -metalliferous -metalline -metallographic -metallographical -metamathematical -metameric -metamorphic -metamorphous -metaphoric -metaphorical -metaphrastic -metaphrastical -metaphysical -metaphytic -metapneustic -metapsychological -metastable -metastatic -metatarsal -metatherian -metathetic -metathetical -metathoracic -metatrophic -metazoal -metazoic -metempirical -metempsychic -metempsychosic -metempsychosical -metencephalic -meteoric -meteoritic -meteorlike -meteorographic -meteorological -meteoropathologic -methenyl -methodical -methoxy -methylic -methylidyne -meticulous -metonymical -metopic -metric -metrical -metrizable -metrological -metronomical -metronymic -metropolitan -metrorrhagic -mettled -mettlesome -meuni -meuniare -miasmal -miasmatic -miasmatical -miasmic -micellar -mickle -microanalytic -microanalytical -microbeless -microbial -microbian -microbic -microbicidal -microbiologic -microbiological -microchemical -microclimatic -microclimatologic -microclimatological -micrococcal -micrococcic -microcosmic -microcosmical -microcrystalline -microdont -microelectronic -microelectrophoretic -microenvironmental -microglial -micrographic -microlecithal -micrologic -micrological -micrometric -micrometrical -microminiature -micronemous -micronucleate -micropaleontologic -micropaleontological -microparasitic -microphotographic -microphysical -microphytic -microporous -microptic -microscopic -microseismic -microseismical -microspectrophotometric -microsporic -microstomatous -microstylous -microthermic -microtonal -mid -middle -middlemost -middling -midi -midmost -midnightly -midrashic -midship -midsummery -midway -midweekly -midwinterly -midwintry -miffed -miffier -miffiest -miffy -mightier -mightiest -mighty -mignon -migrainoid -migrainous -migrational -migrative -migratory -milanaise -mild -mildewproof -mildewy -miliary -militant -military -milkier -milkiest -milkless -milksopping -milksoppy -milky -milled -millefleur -millenarian -millennial -millesimal -milliary -millifold -mim -mimetic -mimical -mimosaceous -minable -minacious -minareted -minatory -mincing -minded -mindful -mindless -mineable -mineralogic -mineralogical -mingy -minhagic -mini -minimal -minimus -miniskirted -ministerial -ministrant -ministrative -minor -minuscular -minutial -minxish -miotic -miracidial -miraculous -mirier -miriest -mirkier -mirkiest -mirky -mirrorlike -mirthful -mirthless -miry -misaccused -misadjudicated -misadjusted -misanalyzed -misappended -misapplied -misapprehensive -misbegotten -misbuttoned -miscegenetic -miscellaneous -mischievous -miscible -miscreated -miscreative -miscultivated -misdiagrammed -misdictated -miserable -miserly -misexplained -misfashioned -misfeatured -misfocused -misformed -misguided -misinformative -misinterpretable -misitemized -misleading -misogamic -misogynic -misogynistic -misogynous -mispackaged -mispacked -misprincipled -misproud -mispublicized -mispublished -misrepresentative -misrhymed -misshapen -missing -mistakable -mistaken -mistier -mistiest -mistilled -mistrustful -misty -mistyped -misunderstood -mitered -mithridatic -mitigable -mitigative -mitigatory -mitochondrial -mitotic -mitrailleur -mitral -mittenlike -mixable -mixed -mixible -mixolydian -mnemic -mnemonic -moanful -mobbish -mobile -mobilisable -mobilizable -mobocratic -mobocratical -mod -modal -moderate -moderatorial -modern -moderne -modernistic -modest -modifiable -modiolar -modish -modular -moier -moiest -moir -moira -moist -moistful -moistless -moitier -moitiest -moity -molal -moldable -moldy -molecular -moline -mollescent -mollifiable -molluscoid -molluscous -mollusklike -molten -molybdenous -molybdic -molybdous -momentary -momentous -monachal -monachist -monacid -monacidic -monadelphous -monadistic -monandrous -monanthous -monarchal -monarchical -monarchistic -monasterial -monastic -monatomic -monaural -monaxial -mondial -monecious -monetary -moneyed -moneyless -mongolian -mongoloid -monic -monied -monilial -moniliform -monistic -monistical -monitorial -monitory -monkeyish -monkish -mono -monoacid -monoatomic -monobasic -monoblastic -monocable -monocarpellary -monocarpic -monocarpous -monochasial -monochromatic -monochromic -monochromical -monocled -monoclinal -monoclinic -monoclinous -monocotyledonous -monocular -monocultural -monocyclic -monodic -monodimetric -monodomous -monodramatic -monoecious -monogamic -monogamistic -monogamous -monogenetic -monogenic -monogenistic -monogenous -monogrammatic -monogrammatical -monogrammic -monographic -monographical -monogynoecial -monohydrated -monohydric -monohydroxy -monoicous -monolatrous -monolingual -monolithic -monologic -monological -monomaniacal -monomeric -monomerous -monometallic -monometric -monometrical -monomolecular -monomorphic -mononuclear -monopetalous -monophagous -monophonic -monophthongal -monophyletic -monophyllous -monoplegic -monoploid -monopodial -monopodic -monopolistic -monopoloid -monoprotic -monorhinous -monosepalous -monosodium -monosomic -monospermous -monostichic -monostichous -monostome -monostrophic -monostylous -monosyllabic -monosymmetric -monotheistic -monotheistical -monotonal -monotonic -monotonous -monotrichate -monotrichous -monotriglyphic -monotropic -monotypic -monovalent -monozygotic -monsoonal -monstrous -montane -monthly -monticulate -monticulous -montmorillonitic -monumental -monumentless -mony -monzonitic -moodier -moodiest -moody -mooned -moonish -moonless -moonlit -moonshiny -moonstruck -moony -moory -moot -mopey -mopier -mopiest -mopy -moraceous -morainal -morainic -moral -moralistic -moralless -morbid -morbific -mordacious -mordant -moreish -morganatic -morganic -moribund -morish -mornay -moronic -morose -morphemic -morphogenetic -morphogenic -morphologic -morphological -morphonemic -morphotic -morphotonemic -mortal -mortarless -mortary -mortiferous -moschate -mossier -mossiest -mossy -motey -motherless -motherly -mothier -mothiest -mothproof -mothy -motile -motional -motionless -motivational -motivative -motiveless -motley -motorable -mottled -mouill -mouilla -mouldier -mouldiest -mouldy -mountainless -mountainous -mounted -mournful -mouselike -mousey -mousier -mousiest -mousy -mouthier -mouthiest -mouthless -mouthwatering -mouthy -moutonnae -movable -moveable -moveless -moving -mowburnt -mucic -mucid -muciferous -mucigenous -mucilaginous -mucilaginously -muciparous -muckerish -muckier -muckiest -mucking -muckle -mucky -mucoid -mucopurulent -mucosal -mucous -mucronate -muddier -muddiest -muddleheaded -muddy -mudfat -muggier -muggiest -muggy -mugwumpian -mugwumpish -muley -mulish -mulley -mullocky -multangular -multiangular -multiareolate -multiarticular -multiarticulate -multiarticulated -multiaxial -multibladed -multibranched -multibranchiate -multicapitate -multicapsular -multicarinate -multicarinated -multicellular -multicentral -multicentric -multichanneled -multichannelled -multiciliate -multiciliated -multicircuited -multicoil -multicolored -multiconductor -multicordate -multicorneal -multicostate -multicrystalline -multicuspidate -multicuspidated -multidentate -multidenticulate -multidenticulated -multidigitate -multidimensional -multidirectional -multidisciplinary -multiengined -multifaced -multifaceted -multifactorial -multifamilial -multifarious -multifibered -multifibrous -multifid -multifistular -multifistulous -multiflagellate -multiflagellated -multiflorous -multifocal -multifold -multifoliate -multiform -multifurcate -multiganglionic -multigranular -multigranulated -multigyrate -multihued -multijugate -multilaciniate -multilamellar -multilamellate -multilaminar -multilaminate -multilaminated -multilateral -multilayer -multilighted -multilineal -multilinear -multilingual -multilobar -multilobate -multilobed -multilobular -multimacular -multimedial -multimetallic -multimolecular -multimotored -multinational -multinervate -multinodal -multinodous -multinodular -multinominal -multinuclear -multinucleate -multinucleolar -multinucleolate -multinucleolated -multiovular -multiovulate -multiovulated -multiparous -multipartite -multiped -multiperforate -multiperforated -multipersonal -multiphase -multiphasic -multipinnate -multiplated -multiple -multiplicate -multiplicational -multiplicative -multipointed -multipolar -multiported -multipurpose -multiracial -multiradial -multiradiate -multiradiated -multiradical -multiramified -multiramose -multiramous -multirole -multirooted -multisaccate -multisacculate -multisacculated -multiscreen -multisegmental -multisegmented -multiseptate -multiseriate -multisonic -multisonorous -multisonous -multispeed -multispermous -multispicular -multispiculate -multispindled -multispinous -multispiral -multispired -multistage -multistaminate -multistorey -multistory -multistratified -multistriate -multisulcate -multisulcated -multitentacled -multitentaculate -multithreaded -multititular -multitoed -multitoned -multitube -multituberculate -multitubular -multitudinous -multivalent -multivalued -multivalve -multivalvular -multivane -multivariate -multiview -multiviewing -multivocal -multivoiced -multivoltine -multivolume -mumchance -mundane -municipal -munificent -murderous -muriatic -muricate -murine -murky -murmurless -murmurous -murrey -murrhine -musaceous -muscicolous -musclebound -muscleless -muscly -muscular -museful -mushier -mushiest -mushroomlike -mushroomy -mushy -musical -musicianly -musicological -muskier -muskiest -musky -mussier -mussiest -mustached -mustachioed -musteline -mustier -mustiest -musty -mutable -mutagenetic -mutagenic -mutational -mute -muticous -mutilative -mutilatory -mutinous -muttonheaded -muttony -mutual -mutular -muzzleloading -muzzy -myalgic -myasthenic -mycelial -mycologic -mycological -mycostatic -mydriatic -myelinated -myelinic -myelographic -myeloid -mylohyoid -myocardial -myoclonic -myogenic -myographic -myologic -myological -myologisral -myopathic -myopic -myotic -myriad -myrmecological -myrmecophagous -myrmecophilous -myrtaceous -mystagogic -mystagogical -mysterious -mystical -mythical -mythoclastic -mythological -mythopoeic -myxoid -nabobical -nabobish -nacred -nacreous -nadiral -naevoid -naggier -naggiest -nagging -naggish -naggy -naiant -naif -nailless -naillike -naissant -naive -naked -nameless -nanoid -naphthalic -naphthous -napiform -napless -nappier -nappiest -narcissistic -narcistic -narcoleptic -narcomaniacal -narcomatous -narcose -nardine -narial -narratable -narrow -narthecal -nasal -nascent -nasial -nasofrontal -nasolacrimal -nasological -nasopalatine -nasopharyngeal -nastier -nastiest -nasty -natal -natant -natational -natatorial -natatory -national -nationwide -native -nativistic -nattier -nattiest -natty -natural -naturalistic -naturelike -naturopathic -naughtier -naughtiest -naughty -nauplial -naupliform -nauplioid -nauseating -nauseous -nautical -naval -navicular -navigable -navigational -neap -neaped -nearby -neat -nebulated -nebule -nebulose -nebulosus -nebulous -nebuly -necessary -necessitative -necessitous -neckless -necklike -necktieless -necrologic -necrological -necromantic -necromantical -necrophiliac -necrophilic -necrophobic -necropolitan -necrotic -necrotomic -nectareous -nectariferous -nectarous -nee -needful -needier -neediest -needlelike -needless -needy -nefarious -negational -negative -neglectful -negligent -negligible -negotiable -neighborless -neighborly -neighbourless -neighbourly -nektonic -nelumbian -nemathecial -nematic -nematocystic -nematological -nemoricole -neoanthropic -neocolonial -neoformative -neologic -neological -neologistic -neologistical -neonatal -neoorthodox -neophytic -neoplastic -neotenous -neoteric -neourthodox -nepenthean -nephelinitic -nephological -nephralgic -nephric -nephridial -nephritic -nephrogenous -nephrolithic -nephropathic -nephrostomial -nephrostomous -nephrotic -nephrotoxic -nepotic -nepotistic -nepotistical -neritic -nerval -nervate -nerveless -nervine -nervous -nervy -nescient -nesh -nestable -nested -nestlike -nesty -nether -netherward -netlike -nett -nettable -nettlelike -nettlesome -nettly -neumatic -neumic -neural -neurasthenic -neurilemmal -neurilemmatic -neuritic -neuroanatomic -neuroanatomical -neuroblastic -neurocelian -neurocoelian -neurogenic -neurogliac -neuroglial -neurogliar -neuroglic -neurogrammic -neurolytic -neuromastic -neuromatous -neuromuscular -neuronic -neuropathic -neurophysiologic -neurophysiological -neuroplasmatic -neuroplasmic -neuropsychiatric -neuropterous -neurosurgical -neurotic -neurotrophic -neurotropic -neurovascular -neustic -neustonic -neuter -neutral -nevoid -new -newborn -newfangled -newish -newsier -newsiest -newsless -newspaperish -newsworthy -newsy -next -niblike -nice -nicer -nicest -nickelic -nickeliferous -nickelous -nicotined -nicotineless -nicotinic -nictitant -nidicolous -nidificational -nidifugous -niftier -nifties -niftiest -nifty -niggardly -niggling -nigh -nightcapped -nightless -nightlong -nightly -nightmarish -nightwalking -nigrescent -nigritudinous -nihilistic -nimble -nimbused -nincompoopish -ninefold -nineteenth -ninetieth -ninnyish -ninth -niobic -niobous -nipping -nippleless -nippy -nirvanic -nisi -nitid -nitramino -nitric -nitrifiable -nitro -nitrocellulosic -nitrogenous -nitrolic -nitrosylsulfuric -nitrous -nittier -nittiest -nitty -nival -niveous -nobbier -nobbiest -nobby -nobiliary -noble -nobler -noblest -nocent -nociceptive -noctambulous -noctilucan -noctilucent -noctis -nocturnal -nocuous -nodal -nodical -nodose -nodous -nodular -noegenetic -noetic -noily -noir -noiseless -noisette -noisier -noisiest -noisome -noisy -nomadic -nomenclatorial -nomenclatural -nominal -nominalistic -nominative -nomistic -nomographic -nomographical -nomological -nomothetic -nonabdicative -nonabiding -nonabjuratory -nonabortive -nonabrasive -nonabridgable -nonabrogable -nonabsolute -nonabsolutistic -nonabsorbable -nonabsorbent -nonabsorbing -nonabsorptive -nonabstaining -nonabstemious -nonabstract -nonabstracted -nonabusive -nonacademic -nonacademical -nonacceding -nonaccelerative -nonacceleratory -nonaccented -nonaccenting -nonaccentual -nonacceptant -nonaccessory -nonaccidental -nonaccommodable -nonaccommodating -nonaccompanying -nonaccordant -nonaccredited -nonaccretive -nonaccrued -nonaccruing -nonacculturated -nonaccumulating -nonaccumulative -nonaccusing -nonacidic -nonacoustic -nonacoustical -nonacquiescent -nonacquiescing -nonacquisitive -nonactinic -nonactionable -nonactive -nonactual -nonaculeate -nonaculeated -nonacute -nonadaptable -nonadaptational -nonadapting -nonadaptive -nonaddicted -nonaddicting -nonaddictive -nonadept -nonadherent -nonadhering -nonadhesive -nonadjacent -nonadjectival -nonadjoining -nonadjudicated -nonadjudicative -nonadjunctive -nonadjustable -nonadministrable -nonadministrant -nonadministrative -nonadmissible -nonadmissive -nonadmitted -nonadoptable -nonadorning -nonadult -nonadvantageous -nonadventitious -nonadventurous -nonadverbial -nonaerated -nonaerating -nonaesthetic -nonaesthetical -nonaffecting -nonaffective -nonaffiliated -nonaffiliating -nonaffinitive -nonagglomerative -nonagglutinant -nonagglutinating -nonagglutinative -nonaggressive -nonagrarian -nonagricultural -nonalcoholic -nonalgebraic -nonalgebraical -nonalienating -nonalignable -nonaligned -nonalined -nonalkaloidal -nonallegiance -nonallegoric -nonallegorical -nonallelic -nonallergenic -nonalliterated -nonalliterative -nonalluvial -nonalphabetic -nonalphabetical -nonalternating -nonaltruistic -nonambitious -nonambulatory -nonamenable -nonamendable -nonamorous -nonamphibian -nonamphibious -nonanachronistic -nonanachronous -nonanaemic -nonanalogic -nonanalogical -nonanalogous -nonanalytic -nonanalytical -nonanalyzable -nonanalyzed -nonanarchic -nonanarchical -nonanarchistic -nonanatomic -nonanatomical -nonancestral -nonanemic -nonanesthetic -nonanesthetized -nonangelic -nonangling -nonanguished -nonanimate -nonanimated -nonanimating -nonannexable -nonannihilable -nonantagonistic -nonanticipative -nonanticipatory -nonaphasic -nonaphetic -nonaphoristic -nonapologetic -nonapologetical -nonapostolic -nonapostolical -nonapparent -nonapparitional -nonappealable -nonappealing -nonappeasable -nonappeasing -nonappellate -nonappendant -nonappendent -nonappendicular -nonapplicable -nonapplicative -nonapplicatory -nonappointive -nonapportionable -nonapposable -nonappreciative -nonapprehensible -nonapprehensive -nonapproachable -nonappropriable -nonappropriative -nonaquatic -nonaqueous -nonarbitrable -nonarbitrary -nonarchitectonic -nonarchitectural -nonargentiferous -nonarguable -nonargumentative -nonaristocratic -nonaristocratical -nonarithmetic -nonarithmetical -nonarmigerous -nonaromatic -nonarresting -nonarsenic -nonarsenical -nonarterial -nonarticulate -nonarticulative -nonartistic -nonartistical -nonary -nonasbestine -nonascendant -nonascendent -nonascertainable -nonascetical -nonaseptic -nonaspirated -nonaspirating -nonaspiratory -nonaspiring -nonassenting -nonassertive -nonassignable -nonassigned -nonassimilable -nonassimilating -nonassimilative -nonassimilatory -nonassociable -nonassociational -nonassociative -nonassonant -nonassumed -nonassumptive -nonasthmatic -nonastral -nonastringent -nonastronomic -nonastronomical -nonatheistic -nonatheistical -nonathletic -nonatmospheric -nonatmospherical -nonatomic -nonatomical -nonatrophic -nonatrophied -nonattacking -nonattainable -nonattributive -nonaudible -nonaugmentative -nonauricular -nonauriferous -nonauthentic -nonauthentical -nonauthenticated -nonauthoritative -nonautobiographical -nonautomated -nonautomatic -nonautomotive -nonautonomous -nonavoidable -nonaxiomatic -nonaxiomatical -nonbacterial -nonbailable -nonbankable -nonbarbarian -nonbarbaric -nonbarbarous -nonbaronial -nonbasic -nonbathing -nonbearded -nonbearing -nonbeatific -nonbelieving -nonbelligerent -nonbending -nonbeneficed -nonbeneficent -nonbeneficial -nonbenevolent -nonbiased -nonbibulous -nonbigoted -nonbilabiate -nonbilious -nonbillable -nonbinding -nonbiographical -nonbiological -nonbiting -nonbitter -nonbituminous -nonblack -nonblamable -nonblameful -nonblasphemous -nonbleeding -nonblended -nonblending -nonblinding -nonblockaded -nonblocking -nonblooming -nonblundering -nonboasting -nonbodily -nonboding -nonboiling -nonbookish -nonborrowing -nonbotanic -nonbotanical -nonbranded -nonbreaching -nonbreakable -nonbreeding -nonbristled -nonbromidic -nonbrooding -nonbrowsing -nonbrutal -nonbudding -nonbulbaceous -nonbulbar -nonbulbiferous -nonbulbous -nonbuoyant -nonburdensome -nonbureaucratic -nonburnable -nonburning -nonbursting -nonbusiness -nonbusy -nonbuttressed -nonbuying -noncadenced -noncadent -noncaffeinic -noncaking -noncalcareous -noncalcified -noncalculable -noncalculating -noncalculative -noncaloric -noncalumniating -noncalumnious -noncancelable -noncancerous -noncandescent -noncannibalistic -noncapillary -noncapital -noncapitalistic -noncapitalized -noncapricious -noncapsizable -noncaptious -noncarbolic -noncarbonated -noncarnivorous -noncartelized -noncash -noncastigating -noncasuistic -noncasuistical -noncataclysmal -noncataclysmic -noncatalytic -noncatarrhal -noncatastrophic -noncatechistic -noncatechistical -noncategorical -noncathartic -noncathartical -noncausable -noncausal -noncausative -noncaustic -noncelestial -noncellular -noncellulous -noncensored -noncensorious -noncensurable -noncentral -noncereal -noncerebral -nonceremonial -nonceremonious -noncertified -nonchafing -nonchalant -nonchalky -nonchallenging -nonchangeable -nonchanneled -nonchannelized -nonchaotic -noncharacteristic -noncharacterized -nonchargeable -noncharismatic -noncharitable -nonchemical -nonchimeric -nonchimerical -nonchivalric -nonchivalrous -noncholeric -nonchromatic -nonchromosomal -nonchronic -nonchronical -nonchurched -nonchurchgoing -nonciliate -nonciliated -noncircuited -noncircuitous -noncircular -noncirculating -noncirculatory -noncircumscribed -noncircumscriptive -noncircumspect -noncircumstantial -noncircumvallated -noncitable -nonciteable -noncivilizable -noncivilized -nonclaimable -nonclamorous -nonclarifiable -nonclarified -nonclassic -nonclassical -nonclassifiable -nonclassified -nonclastic -noncleistogamic -noncleistogamous -nonclerical -nonclimactic -nonclimactical -nonclimbable -nonclimbing -nonclinging -nonclinical -noncloistered -nonclose -nonclotting -noncoagulable -noncoagulating -noncoagulative -noncoalescent -noncoalescing -noncodified -noncoercible -noncoercive -noncogent -noncognate -noncognitive -noncognizable -noncognizant -noncoherent -noncohesive -noncoincident -noncoincidental -noncollapsable -noncollapsible -noncollectable -noncollectible -noncollective -noncollectivistic -noncollinear -noncolloidal -noncollusive -noncolonial -noncolorable -noncoloring -noncombat -noncombinative -noncombining -noncombustible -noncombustive -noncomic -noncomical -noncommemorational -noncommemorative -noncommemoratory -noncommendable -noncommendatory -noncommercial -noncommiserative -noncommissioned -noncommittal -noncommodious -noncommunal -noncommunicating -noncommunicative -noncommunistic -noncommunistical -noncommutative -noncompensating -noncompensative -noncompensatory -noncompetent -noncompeting -noncompetitive -noncomplacent -noncomplaisant -noncomplying -noncomposite -noncompoundable -noncomprehendible -noncomprehending -noncomprehensible -noncomprehensive -noncompressible -noncompressive -noncompromised -noncompromising -noncompulsive -noncompulsory -nonconcentrated -nonconcentrative -nonconcentric -nonconcentrical -nonconceptual -nonconcessive -nonconciliating -nonconciliatory -nonconcluding -nonconclusive -nonconcurrent -noncondensable -noncondensed -noncondensible -noncondensing -noncondescending -noncondimental -nonconditional -nonconditioned -nonconducive -nonconductible -nonconducting -nonconductive -nonconfederate -nonconferrable -nonconfident -nonconfidential -nonconfiding -nonconfined -nonconfining -nonconfirmative -nonconfirmatory -nonconfirming -nonconfiscable -nonconflicting -nonconflictive -noncongealing -noncongenital -noncongestive -noncongratulatory -noncongregative -noncongruent -noncongruous -nonconjecturable -nonconjugal -nonconjugate -nonconjunctive -nonconnective -nonconnotative -nonconnubial -nonconscientious -nonconscious -nonconscriptable -nonconsecutive -nonconsenting -nonconsequent -nonconsequential -nonconservational -nonconservative -nonconserving -nonconsistorial -nonconsolable -nonconsoling -nonconsorting -nonconspiratorial -nonconspiring -nonconstituent -nonconstituted -nonconstitutional -nonconstraining -nonconstricted -nonconstricting -nonconstrictive -nonconstruable -nonconstructive -nonconsular -nonconsultative -nonconsultatory -nonconsumable -nonconsuming -nonconsumptive -noncontagious -noncontaminable -noncontaminative -noncontemplative -noncontemporaneous -noncontemporary -noncontemptible -noncontemptuous -noncontending -noncontentious -nonconterminal -nonconterminous -noncontextual -noncontiguous -noncontinental -noncontingent -noncontinuable -noncontinuous -noncontradictory -noncontrastive -noncontributable -noncontributing -noncontributive -noncontributory -noncontrollable -noncontrolled -noncontrolling -noncontroversial -noncontumacious -nonconvective -nonconventional -nonconvergent -nonconverging -nonconversable -nonconversant -nonconversational -nonconvertible -nonconvivial -noncooperative -noncoordinating -noncoplanar -noncorporate -noncorporative -noncorporeal -noncorpuscular -noncorrective -noncorrelating -noncorrelative -noncorrelatively -noncorrespondent -noncorresponding -noncorroborating -noncorroborative -noncorroboratory -noncorrodible -noncorroding -noncorrosive -noncorrupt -noncorruptible -noncorruptive -noncortical -noncosmic -noncosmopolitan -noncotyledonal -noncotyledonary -noncotyledonous -noncounteractive -noncounterfeit -noncouperative -noncovetous -noncranking -noncreative -noncredent -noncredible -noncreditable -noncredulous -noncreeping -noncrenate -noncrenated -noncretaceous -noncriminal -noncrinoid -noncritical -noncriticizing -noncrucial -noncruciform -noncrusading -noncrustaceous -noncryptic -noncryptical -noncrystalline -noncrystallizable -noncrystallized -noncrystallizing -nonculminating -nonculpable -noncultivable -noncultivatable -noncultivated -noncultural -noncultured -noncumbrous -noncumulative -noncurative -noncurdling -noncurious -noncurrent -noncursive -noncurtailing -noncuspidate -noncuspidated -noncustodial -noncustomary -noncutting -noncyclic -noncyclical -nondamageable -nondamaging -nondangerous -nondark -nondatival -nondeadly -nondeaf -nondeafened -nondeafening -nondebatable -nondebating -nondebilitating -nondebilitative -nondecadent -nondecalcified -nondecasyllabic -nondecayed -nondecaying -nondeceivable -nondeceiving -nondeceptive -nondeciduous -nondecisive -nondeclamatory -nondeclarative -nondeclaratory -nondeclivitous -nondecorated -nondecorative -nondecorous -nondedicative -nondedicatory -nondeducible -nondeductible -nondeductive -nondeep -nondefamatory -nondefaulting -nondefeasible -nondefecting -nondefective -nondefensible -nondefensive -nondeferable -nondeferent -nondeferential -nondeferrable -nondefiant -nondeficient -nondefiling -nondefinable -nondefined -nondefining -nondefinite -nondefinitive -nondeflationary -nondeflected -nondeflective -nondeformed -nondefunct -nondegenerate -nondegenerative -nondegrading -nondehiscent -nondeistic -nondeistical -nondeleterious -nondeliberate -nondelicate -nondelineative -nondelinquent -nondeliquescent -nondelirious -nondeluded -nondeluding -nondelusive -nondemanding -nondemocratic -nondemocratical -nondemonstrable -nondemonstrative -nondendroid -nondendroidal -nondenominational -nondenotative -nondenunciating -nondenunciative -nondenunciatory -nondeodorizing -nondepartmental -nondependable -nondepletive -nondepletory -nondeported -nondepraved -nondeprecating -nondeprecative -nondeprecatory -nondepreciating -nondepreciative -nondepreciatory -nondepressed -nondepressing -nondepressive -nondeprivable -nonderelict -nonderisible -nonderisive -nonderivable -nonderivative -nonderogative -nonderogatory -nondescribable -nondescript -nondescriptive -nondesignate -nondesignative -nondesigned -nondesirous -nondesisting -nondespotic -nondestructive -nondesulfurized -nondetachable -nondetailed -nondeterminable -nondeterminative -nondeterministic -nondeterrent -nondetonating -nondetractive -nondetractory -nondetrimental -nondevelopable -nondeveloping -nondevelopmental -nondeviant -nondeviating -nondevious -nondevotional -nondevout -nondexterous -nondextrous -nondiabetic -nondiabolic -nondiabolical -nondiagonal -nondiagrammatic -nondiagrammatical -nondialectal -nondialectic -nondialectical -nondialyzing -nondiametral -nondiaphanous -nondiastasic -nondiastatic -nondiathermanous -nondichogamic -nondichogamous -nondichotomous -nondictatorial -nondidactic -nondietetic -nondieting -nondifferentiable -nondifficult -nondiffident -nondiffractive -nondiffuse -nondiffused -nondiffusible -nondiffusing -nondigestible -nondigesting -nondigestive -nondilapidated -nondilatable -nondiligent -nondimensioned -nondiminishing -nondiocesan -nondiphtherial -nondiphtheric -nondiphtheritic -nondiphthongal -nondiplomatic -nondipterous -nondirectional -nondirective -nondirigible -nondisappearing -nondisastrous -nondisbursable -nondisbursed -nondiscerning -nondischarging -nondisciplinable -nondisciplinary -nondisciplined -nondisciplining -nondiscordant -nondiscountable -nondiscoverable -nondiscretionary -nondiscriminating -nondiscriminative -nondiscriminatory -nondiscursive -nondiseased -nondisfranchised -nondisguised -nondisingenuous -nondisintegrating -nondisinterested -nondisjunctive -nondisparaging -nondisparate -nondispensable -nondispensational -nondispensible -nondispersive -nondisposable -nondisposed -nondisputatious -nondisqualifying -nondisrupting -nondisruptive -nondissenting -nondissident -nondissipated -nondissipative -nondissolving -nondistillable -nondistinctive -nondistinguishable -nondistinguished -nondistinguishing -nondistorted -nondistorting -nondistortive -nondistracted -nondistracting -nondistractive -nondistributional -nondistributive -nondisturbing -nondivergent -nondiverging -nondivisible -nondivisional -nondivisive -nondivorced -nondivulging -nondoctrinaire -nondoctrinal -nondocumental -nondocumentary -nondogmatic -nondogmatical -nondomestic -nondomesticated -nondomesticating -nondominant -nondominating -nondomineering -nondormant -nondoubtable -nondoubting -nondramatic -nondrinkable -nondrinking -nondropsical -nondruidic -nondruidical -nondrying -nondualistic -nonductile -nonduplicating -nonduplicative -nondurable -nondutiable -nondynamic -nondynamical -nondynastic -nondynastical -nondyspeptic -nondyspeptical -noneager -nonearning -noneastern -noneatable -nonebullient -noneccentric -nonecclesiastic -nonecclesiastical -nonechoic -noneclectic -noneclipsed -noneclipsing -nonecliptic -nonecliptical -noneconomic -noneconomical -nonecstatic -nonecumenic -nonecumenical -nonedible -nonedified -noneditorial -noneducable -noneducated -noneducational -noneducative -noneducatory -noneffective -noneffervescent -noneffete -nonefficacious -nonefficient -noneffusive -nonegocentric -nonegoistic -nonegoistical -nonegotistic -nonegotistical -nonegregious -noneidetic -nonejaculatory -nonejecting -nonejective -nonelaborate -nonelaborating -nonelaborative -nonelastic -nonelective -nonelectric -nonelectrical -nonelectrified -nonelectrized -nonelectrolytic -noneleemosynary -nonelemental -nonelementary -nonelevating -nonelicited -noneligible -noneliminative -noneliminatory -nonelliptic -nonelliptical -noneloquent -nonelucidating -nonelucidative -nonelusive -nonemanant -nonemanating -nonemancipative -nonembellished -nonembellishing -nonembryonal -nonembryonic -nonemendable -nonemergent -nonemotional -nonemotive -nonempathic -nonempirical -nonemploying -nonempty -nonemulative -nonemulous -nonencyclopaedic -nonencyclopedic -nonencyclopedical -nonendemic -nonendurable -nonenduring -nonenergetic -nonenervating -nonenforceable -nonenforced -nonenforcing -nonengrossing -nonenigmatic -nonenigmatical -nonenlightened -nonenlightening -nonenrolled -nonentailed -nonenteric -nonenterprising -nonentertaining -nonenthusiastic -nonenticing -nonentomologic -nonentomological -nonentreating -nonenumerated -nonenumerative -nonenunciative -nonenunciatory -nonenviable -nonenvious -nonenvironmental -nonephemeral -nonepic -nonepical -nonepicurean -nonepigrammatic -nonepileptic -nonepiscopal -nonepiscopalian -nonepisodic -nonepisodical -nonepithelial -nonepochal -nonequable -nonequal -nonequalized -nonequalizing -nonequatorial -nonequestrian -nonequilateral -nonequitable -nonequivalent -nonequivocal -nonequivocating -noneradicable -noneradicative -nonerecting -noneroded -nonerodent -noneroding -nonerosive -nonerotic -nonerrant -nonerratic -nonerroneous -nonerudite -noneruptive -nonesoteric -nonessential -nonesthetic -nonesthetical -nonestimable -nonesurient -noneternal -nonethereal -nonethic -nonethical -nonethnic -nonethnical -nonethnologic -nonethnological -noneugenic -noneugenical -noneuphonious -nonevadable -nonevadible -nonevading -nonevanescent -nonevangelic -nonevangelical -nonevaporable -nonevaporating -nonevaporative -nonevasive -nonevident -nonevidential -nonevil -nonevincible -nonevincive -nonevocative -nonevolutional -nonevolutionary -nonevolving -nonexactable -nonexacting -nonexaggerated -nonexaggerating -nonexaggerative -nonexaggeratory -nonexcepted -nonexcepting -nonexceptional -nonexcessive -nonexchangeable -nonexcitable -nonexcitative -nonexcitatory -nonexciting -nonexclamatory -nonexclusive -nonexculpatory -nonexcusable -nonexecutable -nonexecutive -nonexemplary -nonexempt -nonexercisable -nonexertive -nonexhausted -nonexhaustible -nonexhaustive -nonexhibitionistic -nonexhibitive -nonexhortative -nonexhortatory -nonexigent -nonexistent -nonexistential -nonexisting -nonexotic -nonexpanded -nonexpanding -nonexpansible -nonexpansile -nonexpansive -nonexpectant -nonexpedient -nonexpediential -nonexpeditious -nonexpendable -nonexperienced -nonexperiential -nonexperimental -nonexpert -nonexpiable -nonexpiatory -nonexpiring -nonexplainable -nonexplanative -nonexplanatory -nonexplicable -nonexplicative -nonexplorative -nonexploratory -nonexplosive -nonexponential -nonexponible -nonexportable -nonexpressionistic -nonexpressive -nonexpulsive -nonextant -nonextended -nonextendible -nonextensible -nonextensile -nonextensional -nonextensive -nonextenuating -nonextenuative -nonexterminative -nonexterminatory -nonexternal -nonexternalized -nonextinct -nonextinguishable -nonextinguished -nonextortive -nonextractable -nonextracted -nonextractible -nonextractive -nonextraditable -nonextraneous -nonextricable -nonextrinsic -nonextrinsical -nonextrusive -nonexuding -nonexultant -nonfacetious -nonfactious -nonfactitious -nonfactual -nonfacultative -nonfallacious -nonfaltering -nonfamilial -nonfamiliar -nonfanatical -nonfarcical -nonfarm -nonfashionable -nonfastidious -nonfat -nonfatal -nonfatalistic -nonfatigable -nonfaulty -nonfavorable -nonfavored -nonfeasible -nonfeatured -nonfebrile -nonfecund -nonfederal -nonfederated -nonfeeble -nonfeeding -nonfeeling -nonfeldspathic -nonfelicitous -nonfelonious -nonfenestrated -nonfermentable -nonfermentative -nonfermented -nonfermenting -nonferocious -nonferrous -nonfertile -nonfervent -nonfervid -nonfestive -nonfeudal -nonfeverish -nonfeverous -nonfibrous -nonfictitious -nonfictive -nonfiduciary -nonfigurative -nonfilamentous -nonfilial -nonfilterable -nonfimbriate -nonfimbriated -nonfinancial -nonfinishing -nonfinite -nonfireproof -nonfiscal -nonfissile -nonfissionable -nonflagellate -nonflagellated -nonflagitious -nonflagrance -nonflagrant -nonflaky -nonflammable -nonflatulent -nonflawed -nonflexible -nonflirtatious -nonfloating -nonfloriferous -nonflowering -nonfluctuating -nonfluent -nonfluidic -nonfluorescent -nonflyable -nonflying -nonfollowing -nonforbearing -nonforeclosing -nonforeign -nonforensic -nonforested -nonforfeitable -nonforfeiting -nonforgiving -nonformal -nonformalistic -nonformative -nonformidable -nonforming -nonfortifiable -nonfortifying -nonfortuitous -nonfossiliferous -nonfouling -nonfragile -nonfragmented -nonfragrant -nonfrangible -nonfraternal -nonfraudulent -nonfreezable -nonfreezing -nonfrenetic -nonfrequent -nonfricative -nonfrigid -nonfrosted -nonfrosting -nonfrugal -nonfugitive -nonfulminating -nonfunctional -nonfunctioning -nonfundamental -nonfunded -nonfungible -nonfused -nonfusible -nonfutile -nonfuturistic -nongalactic -nongalvanized -nonganglionic -nongangrenous -nongarrulous -nongaseous -nongassy -nongelatinizing -nongelatinous -nongelling -nongenealogic -nongenealogical -nongeneralized -nongenerating -nongenerative -nongeneric -nongenerical -nongenetic -nongenetical -nongentile -nongenuine -nongeographic -nongeographical -nongeologic -nongeological -nongeometric -nongeometrical -nongermane -nongerminal -nongerminating -nongerminative -nongerundial -nongerundive -nongestic -nongestical -nongilded -nongilled -nonglacial -nonglandered -nonglandular -nonglandulous -nonglazed -nonglobular -nonglutenous -nongospel -nongovernmental -nongraceful -nongracious -nongraduated -nongrained -nongrammatical -nongranular -nongranulated -nongraphic -nongraphical -nongraphitic -nongratifying -nongratuitous -nongraven -nongravitational -nongravitative -nongreasy -nongreen -nongregarious -nongremial -nongrieved -nongrieving -nongrievous -nongrooming -nongrounded -nongrounding -nonguidable -nonguttural -nonhabitable -nonhabitual -nonhackneyed -nonhallucinated -nonhallucinatory -nonharmonic -nonharmonious -nonhazardous -nonhectic -nonhedonic -nonhedonistic -nonheinous -nonhematic -nonhemophilic -nonhepatic -nonhereditable -nonhereditary -nonheretical -nonheritable -nonheroic -nonheroical -nonhesitant -nonheuristic -nonhierarchic -nonhierarchical -nonhieratic -nonhieratical -nonhistoric -nonhistorical -nonhistrionic -nonhistrionical -nonhomiletic -nonhomogeneous -nonhomogenous -nonhomologous -nonhostile -nonhubristic -nonhuman -nonhumanistic -nonhumanized -nonhumorous -nonhunting -nonhydrated -nonhydraulic -nonhydrogenous -nonhydrophobic -nonhygrometric -nonhygroscopic -nonhyperbolic -nonhyperbolical -nonhypnotic -nonhypostatic -nonhypostatical -noniconoclastic -nonideal -nonidealistic -nonideational -nonidentical -nonideologic -nonideological -nonidiomatic -nonidiomatical -nonidolatrous -nonidyllic -nonigneous -nonignitable -nonignitible -nonignominious -nonignorant -nonillative -nonilluminating -nonilluminative -nonillusional -nonillusive -nonillustrative -nonimaginary -nonimaginational -nonimbricate -nonimbricated -nonimbricating -nonimbricative -nonimitable -nonimitating -nonimitational -nonimitative -nonimmanent -nonimmune -nonimmunized -nonimpacted -nonimpeachable -nonimpedimental -nonimpedimentary -nonimperative -nonimperial -nonimperialistic -nonimperious -nonimplemental -nonimplicative -nonimpregnated -nonimpressionable -nonimpressionistic -nonimpulsive -nonimputable -nonimputative -nonincandescent -nonincarnate -nonincarnated -nonincestuous -nonincidental -noninclinable -noninclinational -noninclinatory -noninclusive -nonincorporated -nonincorporative -nonincreasable -nonincreasing -nonincriminating -nonincriminatory -nonincrusting -nonindependent -nonindexed -nonindictable -nonindigenous -nonindividual -nonindividualistic -noninduced -noninducible -noninductive -nonindulgent -nonindurated -nonindurative -nonindustrial -nonindustrious -noninert -noninertial -noninfallible -noninfected -noninfecting -noninfectious -noninferable -noninferential -noninfinite -noninflammable -noninflammatory -noninflationary -noninflected -noninflectional -noninfluential -noninformational -noninformative -noninfusible -noninhabitable -noninherent -noninheritable -noninherited -noninhibitive -noninhibitory -noninitial -noninjurious -noninoculative -noninquiring -noninsistent -noninspissating -noninstinctive -noninstinctual -noninstitutional -noninstructional -noninstructive -noninstrumental -noninstrumentalistic -nonintegrable -nonintellectual -nonintelligent -noninteractive -nonintercepting -noninterceptive -noninterchangeable -noninterdependent -noninterfering -nonintermittent -noninternational -noninterpolating -noninterpolative -noninterpretable -noninterpretational -noninterpretative -noninterpretive -noninterrupted -noninterruptive -nonintersecting -nonintersectional -noninterventional -nonintoxicant -nonintoxicating -nonintoxicative -nonintrospective -nonintroversive -nonintroverted -nonintuitive -noninverted -noninvidious -noninvincible -noniodized -nonionic -nonionized -nonionizing -nonirate -nonirenic -nonirenical -noniridescent -nonironic -nonironical -nonirradiated -nonirrational -nonirrevocable -nonirrigable -nonirrigated -nonirrigating -nonirritable -nonirritant -nonirritating -nonisoelastic -nonisolable -nonisotropic -nonisotropous -nonissuable -nonjournalistic -nonjudicable -nonjudicative -nonjudicatory -nonjudiciable -nonjudicial -nonjuridic -nonjuridical -nonjuristic -nonjuristical -nonkinetic -nonknowledgeable -nonkosher -nonlabeling -nonlabelling -nonlacteal -nonlacteous -nonlactescent -nonlactic -nonlaminable -nonlaminated -nonlaminating -nonlaminative -nonlarcenous -nonlayered -nonlaying -nonleaded -nonleaking -nonlegal -nonlegato -nonlegislative -nonlegitimate -nonleguminous -nonlepidopteral -nonlepidopteran -nonlepidopterous -nonleprous -nonlethal -nonlethargic -nonlethargical -nonlevel -nonlevulose -nonliable -nonlibelous -nonliberal -nonlibidinous -nonlicensable -nonlicensed -nonlicentious -nonlicking -nonlimitative -nonlimiting -nonlineal -nonlinear -nonlinguistic -nonlinkage -nonliquefiable -nonliquefying -nonliquid -nonliquidating -nonlisting -nonliteral -nonliterary -nonlitigious -nonliturgic -nonliturgical -nonlive -nonliving -nonlixiviated -nonlocal -nonlocalizable -nonlocalized -nonlogical -nonlogistic -nonlogistical -nonlosable -nonloving -nonloxodromic -nonloxodromical -nonloyal -nonlubricating -nonlubricious -nonlucid -nonlucrative -nonlugubrious -nonlugubriously -nonluminescent -nonluminous -nonlustrous -nonlymphatic -nonlyric -nonlyrical -nonmagnetic -nonmagnetical -nonmagnetized -nonmakeup -nonmalarial -nonmalarian -nonmalarious -nonmalicious -nonmalignant -nonmalleable -nonmandatory -nonmanifest -nonmanipulative -nonmanipulatory -nonmannered -nonmanneristic -nonmanual -nonmanufactured -nonmarine -nonmarital -nonmaritime -nonmarketable -nonmarriageable -nonmarrying -nonmartial -nonmasculine -nonmaterialistic -nonmaternal -nonmathematic -nonmathematical -nonmatrimonial -nonmaturative -nonmature -nonmeasurable -nonmechanical -nonmechanistic -nonmediative -nonmedicable -nonmedical -nonmedicative -nonmedicinal -nonmeditative -nonmedullated -nonmelodic -nonmelodious -nonmelodramatic -nonmelting -nonmenacing -nonmendicant -nonmenial -nonmental -nonmercantile -nonmercenary -nonmetallic -nonmetalliferous -nonmetallurgic -nonmetallurgical -nonmetamorphic -nonmetamorphous -nonmetaphoric -nonmetaphorical -nonmetaphysical -nonmeteoric -nonmeteorologic -nonmeteorological -nonmethodic -nonmethodical -nonmetric -nonmetrical -nonmetropolitan -nonmicrobic -nonmicroscopic -nonmicroscopical -nonmigrant -nonmigrating -nonmigratory -nonmilitant -nonmimetic -nonmineralogical -nonminimal -nonministerial -nonmiraculous -nonmischievous -nonmiscible -nonmissionary -nonmitigative -nonmitigatory -nonmobile -nonmodal -nonmoderate -nonmodern -nonmodernistic -nonmodificative -nonmodificatory -nonmodifying -nonmolar -nonmolecular -nonmomentary -nonmonarchal -nonmonarchial -nonmonarchic -nonmonarchistic -nonmonastic -nonmonistic -nonmonogamous -nonmonopolistic -nonmoral -nonmortal -nonmotile -nonmotivated -nonmotivational -nonmotoring -nonmountainous -nonmoveable -nonmucilaginous -nonmucous -nonmulched -nonmultiple -nonmultiplicational -nonmultiplicative -nonmunicipal -nonmuscular -nonmusical -nonmutable -nonmutational -nonmutative -nonmutinous -nonmutual -nonmyopic -nonmystic -nonmystical -nonmythical -nonmythologic -nonmythological -nonnarcissistic -nonnarcotic -nonnarrative -nonnational -nonnationalistic -nonnative -nonnatty -nonnatural -nonnaturalistic -nonnautical -nonnaval -nonnavigable -nonnebular -nonnebulous -nonnecessitous -nonnegative -nonnegativistic -nonnegligent -nonnegligible -nonnegotiable -nonnephritic -nonnervous -nonnescient -nonneural -nonneurotic -nonneutral -nonnicotinic -nonnihilistic -nonnitric -nonnitrogenized -nonnitrogenous -nonnitrous -nonnocturnal -nonnomadic -nonnominalistic -nonnormal -nonnotable -nonnotational -nonnotional -nonnoumenal -nonnourishing -nonnutrient -nonnutritious -nonnutritive -nonobedient -nonobjective -nonobjectivistic -nonobligated -nonobligatory -nonobservable -nonobservant -nonobservational -nonobserving -nonobsessional -nonobsessive -nonobstetric -nonobstetrical -nonobstructive -nonobvious -nonoccidental -nonocclusive -nonoccult -nonocculting -nonoccupational -nonoccurrence -nonodoriferous -nonodorous -nonoecumenic -nonoecumenical -nonoffensive -nonofficial -nonofficinal -nonoily -nonolfactory -nonoligarchic -nonoligarchical -nonomissible -nononerous -nonoperable -nonoperatic -nonoperating -nonoperational -nonoperative -nonopinionated -nonopinionative -nonopposable -nonopposing -nonoppressive -nonopprobrious -nonoptic -nonoptical -nonoptimistic -nonoptimistical -nonoptional -nonoral -nonorchestral -nonordered -nonorganic -nonorientable -nonoriental -nonoriginal -nonornamental -nonorthodox -nonorthographic -nonorthographical -nonoscine -nonosmotic -nonostensible -nonostensive -nonoverlapping -nonowning -nonoxidating -nonoxidative -nonoxidizable -nonoxidizing -nonoxygenated -nonpacifiable -nonpacific -nonpacifical -nonpacificatory -nonpacifistic -nonpaganish -nonpaid -nonpalatable -nonpalatal -nonpalliative -nonpalpable -nonpantheistic -nonpantheistical -nonpapal -nonpapistic -nonpapistical -nonparabolic -nonparabolical -nonparadoxical -nonparallel -nonparalytic -nonparasitic -nonparasitical -nonpardoning -nonparental -nonparliamentary -nonparochial -nonparous -nonpartial -nonpartible -nonparticipating -nonpartisan -nonparty -nonpasserine -nonpassible -nonpassionate -nonpastoral -nonpatentable -nonpatented -nonpaternal -nonpathogenic -nonpathologic -nonpathological -nonpatriotic -nonpatterned -nonpaying -nonpeaked -nonpecuniary -nonpedagogic -nonpedagogical -nonpedigreed -nonpejorative -nonpelagic -nonpenal -nonpenalized -nonpendant -nonpendent -nonpending -nonpenetrable -nonpenetrating -nonpenitent -nonpensionable -nonperceivable -nonperceiving -nonperceptible -nonperceptional -nonperceptive -nonperceptual -nonpercipient -nonpercussive -nonperfected -nonperfectible -nonperforated -nonperforating -nonperforming -nonperilous -nonperiodic -nonperiodical -nonperishable -nonperishing -nonperjured -nonpermanent -nonpermeable -nonpermeative -nonpermissible -nonpermissive -nonpermitted -nonperpendicular -nonperpetual -nonpersecuting -nonpersecutive -nonpersecutory -nonperseverant -nonpersevering -nonpersistent -nonpersisting -nonpersonal -nonpersuadable -nonpersuasible -nonpersuasive -nonpertinent -nonperturbable -nonperturbing -nonperverse -nonperversive -nonperverted -nonpervertible -nonpessimistic -nonpestilent -nonpestilential -nonphagocytic -nonpharmaceutic -nonpharmaceutical -nonphenolic -nonphenomenal -nonphilanthropic -nonphilanthropical -nonphilologic -nonphilological -nonphilosophic -nonphilosophical -nonphobic -nonphonemic -nonphonetic -nonphonetical -nonphosphatic -nonphosphorous -nonphotographic -nonphotographical -nonphrenetic -nonphysical -nonphysiologic -nonphysiological -nonpictorial -nonpigmented -nonpinaceous -nonplacental -nonplanetary -nonplastic -nonplated -nonplatitudinous -nonplausible -nonpleadable -nonpleading -nonpliable -nonpliant -nonpluralistic -nonplutocratical -nonpneumatic -nonpoetic -nonpoisonous -nonpolarizable -nonpolarizing -nonpolemical -nonpolitical -nonponderable -nonponderous -nonpopular -nonpopulous -nonpornographic -nonporous -nonporphyritic -nonportable -nonportentous -nonportrayable -nonpositive -nonpositivistic -nonpossessed -nonpossessive -nonpossible -nonposthumous -nonpotable -nonpotential -nonpracticable -nonpractical -nonpracticed -nonpragmatic -nonpragmatical -nonpreaching -nonprecedent -nonprecedential -nonprecious -nonprecipitative -nonpredatory -nonpredicative -nonpredictable -nonpredictive -nonpreferable -nonpreferential -nonpreformed -nonpregnant -nonprehensile -nonprejudiced -nonprejudicial -nonprelatic -nonpreparative -nonpreparatory -nonprepositional -nonprescient -nonprescribed -nonprescriptive -nonpresentable -nonpresentational -nonpreservable -nonpreservative -nonpresidential -nonpressing -nonpresumptive -nonprevalent -nonpreventable -nonpreventible -nonpreventive -nonpriestly -nonprimitive -nonprincipled -nonprintable -nonprinting -nonprivileged -nonprobable -nonprobative -nonprobatory -nonproblematic -nonproblematical -nonprocessional -nonprocreative -nonprocurable -nonproducible -nonproducing -nonproductive -nonprofane -nonprofessed -nonprofessional -nonprofessorial -nonproficient -nonprofit -nonprofitable -nonprognosticative -nonprogressive -nonprohibitive -nonprohibitory -nonprojecting -nonprojective -nonproletarian -nonproliferous -nonprolific -nonprolix -nonprominent -nonpromiscuous -nonpromissory -nonpromotive -nonpropagable -nonpropagative -nonpropellent -nonprophetic -nonprophetical -nonpropitiable -nonpropitiative -nonproportionable -nonproportional -nonproportionate -nonproportioned -nonproprietary -nonprosaic -nonproscriptive -nonprosperous -nonprotecting -nonprotective -nonprotesting -nonprotractile -nonprotrusive -nonprotuberant -nonprovable -nonprovided -nonprovident -nonprovidential -nonprovincial -nonprovisional -nonprovisionary -nonprovocative -nonprudent -nonprudential -nonpsychiatric -nonpsychic -nonpsychical -nonpsychoanalytic -nonpsychoanalytical -nonpsychologic -nonpsychological -nonpsychopathic -nonpsychotic -nonpublic -nonpublishable -nonpuerile -nonpulmonary -nonpulsating -nonpulsative -nonpunctual -nonpunctuating -nonpuncturable -nonpungent -nonpunishable -nonpunishing -nonpunitive -nonpunitory -nonpurchasable -nonpurgative -nonpurgatorial -nonpurifying -nonpuristic -nonpurposive -nonpursuant -nonpurulent -nonputrescent -nonputrescible -nonpyogenic -nonqualifying -nonqualitative -nonquantitative -nonrabbinical -nonracial -nonradiant -nonradiating -nonradiative -nonradical -nonradioactive -nonraisable -nonraiseable -nonraised -nonrandom -nonranging -nonratable -nonrateable -nonrated -nonratifying -nonrational -nonrationalistic -nonrationalistical -nonrationalized -nonreactionary -nonreactive -nonreadable -nonrealistic -nonrealizable -nonrealizing -nonreasonable -nonreasoning -nonrebellious -nonrecalcitrant -nonreceivable -nonreceiving -nonreceptive -nonrecessive -nonrecipient -nonreciprocal -nonreciprocating -nonrecitative -nonreclaimable -nonreclusive -nonrecognized -nonrecoiling -nonrecollective -nonreconcilable -nonrecoverable -nonrectangular -nonrectifiable -nonrectified -nonrecuperative -nonrecuperatory -nonrecurent -nonrecurring -nonredeemable -nonredemptible -nonredemptive -nonredressing -nonreduced -nonreducible -nonreducing -nonreductional -nonreductive -nonrefillable -nonrefined -nonreflected -nonreflecting -nonreflective -nonreformational -nonrefracting -nonrefractional -nonrefractive -nonrefrigerant -nonrefueling -nonrefuelling -nonregenerate -nonregenerating -nonregenerative -nonregimental -nonregimented -nonregistered -nonregistrable -nonregressive -nonregulative -nonregulatory -nonreigning -nonrelated -nonrelational -nonrelativistic -nonrelenting -nonreliable -nonrelieving -nonreligious -nonremediable -nonremedial -nonremissible -nonremittable -nonremonstrant -nonremovable -nonremunerative -nonrenewable -nonrenouncing -nonrepairable -nonreparable -nonrepatriable -nonrepayable -nonrepaying -nonrepealable -nonrepeated -nonrepellent -nonrepentant -nonrepetitious -nonrepetitive -nonreplaceable -nonreplicate -nonreplicated -nonreportable -nonreprehensible -nonrepresentable -nonrepresentational -nonrepressed -nonrepressible -nonrepressive -nonreproducible -nonreproductive -nonrepublican -nonrepudiable -nonrepudiative -nonreputable -nonrequirable -nonrequisite -nonrescissible -nonrescissory -nonreservable -nonresidential -nonresidual -nonresilient -nonresistant -nonresistible -nonresisting -nonresistive -nonresolvable -nonresonant -nonrespectable -nonrespirable -nonresponsible -nonresponsive -nonrestorative -nonrestrained -nonrestricted -nonrestricting -nonrestrictive -nonresurrectional -nonresuscitable -nonresuscitative -nonretail -nonretainable -nonretardative -nonretardatory -nonretarded -nonretentive -nonreticent -nonretinal -nonretired -nonretiring -nonretraceable -nonretractile -nonretroactive -nonreturn -nonreturnable -nonrevealing -nonrevenue -nonreverent -nonreverential -nonreverse -nonreversed -nonreversible -nonreversing -nonrevertible -nonrevertive -nonreviewable -nonrevocable -nonrevokable -nonrevolting -nonrevolutionary -nonrevolving -nonrhetorical -nonrheumatic -nonrhymed -nonrhyming -nonrhythmic -nonrhythmical -nonriding -nonrigid -nonrioting -nonriparian -nonritualistic -nonromantic -nonrotatable -nonrotating -nonrotational -nonrotative -nonround -nonrousing -nonroutine -nonroyal -nonrudimental -nonrudimentary -nonruinable -nonruinous -nonruminating -nonruminative -nonrun -nonrupturable -nonrural -nonrustable -nonrustic -nonsaccharin -nonsaccharine -nonsacerdotal -nonsacramental -nonsacred -nonsacrificial -nonsacrificing -nonsacrilegious -nonsalable -nonsalaried -nonsaleable -nonsaline -nonsalubrious -nonsalutary -nonsalvageable -nonsanative -nonsanctimonious -nonsane -nonsanguine -nonsaponifiable -nonsaporific -nonsatiable -nonsatiric -nonsatirical -nonsatirizing -nonsatisfying -nonsaturated -nonsaving -nonsawing -nonscalding -nonscaling -nonscandalous -nonscented -nonscheduled -nonschematic -nonschematized -nonschismatic -nonschismatical -nonschizophrenic -nonscholarly -nonscholastic -nonscholastical -nonsciatic -nonscientific -nonscoring -nonscraping -nonscriptural -nonsculptural -nonsculptured -nonseasonable -nonseasonal -nonseasoned -nonsecessional -nonsecluded -nonseclusive -nonsecret -nonsecretarial -nonsecretionary -nonsecretive -nonsecretory -nonsectarian -nonsectional -nonsectorial -nonsecular -nonsedentary -nonseditious -nonsegmental -nonsegmentary -nonsegmented -nonsegregable -nonsegregated -nonsegregative -nonseismic -nonselected -nonselective -nonselling -nonsemantic -nonsenatorial -nonsensate -nonsensationalistic -nonsensible -nonsensical -nonsensitive -nonsensitized -nonsensitizing -nonsensorial -nonsensory -nonsensual -nonsensualistic -nonsensuous -nonsententious -nonsentient -nonseparable -nonseparating -nonseparative -nonseptate -nonseptic -nonsequacious -nonsequent -nonsequential -nonsequestered -nonseraphic -nonseraphical -nonseriate -nonserious -nonserous -nonserviceable -nonservile -nonsetting -nonseverable -nonsexlinked -nonsexual -nonsharing -nonshattering -nonshedding -nonshipping -nonshredding -nonshrinkable -nonshrinking -nonsibilant -nonsiccative -nonsidereal -nonsignable -nonsignatory -nonsignificant -nonsignificative -nonsiliceous -nonsilicious -nonsimilar -nonsimulate -nonsimulative -nonsingular -nonsinkable -nonskeletal -nonskeptic -nonskeptical -nonskilled -nonskipping -nonslanderous -nonslaveholding -nonslip -nonslippery -nonslipping -nonsmoking -nonsober -nonsobering -nonsociable -nonsocial -nonsocialistic -nonsocietal -nonsociological -nonsolar -nonsolicitous -nonsolid -nonsolidified -nonsolidifying -nonsoluble -nonsolvable -nonsonant -nonsophistic -nonsophistical -nonsoporific -nonspacious -nonspalling -nonsparing -nonsparking -nonsparkling -nonspatial -nonspeaking -nonspecial -nonspecialized -nonspecializing -nonspecifiable -nonspecific -nonspecified -nonspecious -nonspectacular -nonspectral -nonspeculative -nonspeculatory -nonspheral -nonspheric -nonspherical -nonspill -nonspillable -nonspinal -nonspinose -nonspiny -nonspiral -nonspirited -nonspiritous -nonspiritual -nonspirituous -nonspontaneous -nonsporting -nonspottable -nonsprouting -nonspurious -nonstabile -nonstable -nonstainable -nonstaining -nonstampable -nonstandard -nonstandardized -nonstanzaic -nonstarting -nonstatic -nonstationary -nonstatistic -nonstatistical -nonstative -nonstatutable -nonstatutory -nonstellar -nonstereotyped -nonstereotypic -nonstereotypical -nonsterile -nonstick -nonsticky -nonstimulable -nonstimulating -nonstimulative -nonstoical -nonstooping -nonstop -nonstorable -nonstrategic -nonstrategical -nonstratified -nonstretchable -nonstriated -nonstrictured -nonstriking -nonstringent -nonstriped -nonstrophic -nonstructural -nonstructured -nonstudied -nonstudious -nonstylized -nonstyptic -nonstyptical -nonsubconscious -nonsubjected -nonsubjective -nonsubjugable -nonsubliminal -nonsubmerged -nonsubmergible -nonsubmersible -nonsubmissible -nonsubmissive -nonsubordinate -nonsubordinating -nonsubscribing -nonsubsidiary -nonsubsiding -nonsubsistent -nonsubstantial -nonsubstantival -nonsubstantive -nonsubstituted -nonsubstitutional -nonsubstitutionary -nonsubstitutive -nonsubtile -nonsubtle -nonsubtractive -nonsuburban -nonsubversive -nonsuccessful -nonsuccessional -nonsuccessive -nonsuctorial -nonsudsing -nonsufferable -nonsuggestible -nonsuggestive -nonsulfurous -nonsulphurous -nonsupplemental -nonsupplementary -nonsupplicating -nonsupportable -nonsupporting -nonsupposed -nonsupposing -nonsuppositional -nonsuppositive -nonsuppressed -nonsuppressive -nonsuppurative -nonsurgical -nonsurrealistic -nonsusceptible -nonsusceptive -nonsuspended -nonsuspensive -nonsustainable -nonsustained -nonsustaining -nonsweating -nonswimming -nonsyllogistical -nonsyllogizing -nonsymbiotic -nonsymbiotical -nonsymbolic -nonsymbolical -nonsympathetic -nonsympathizing -nonsymphonic -nonsymphonious -nonsymptomatic -nonsynchronal -nonsynchronic -nonsynchronical -nonsynchronous -nonsyndicated -nonsynesthetic -nonsynodic -nonsynodical -nonsynonymous -nonsynoptic -nonsynoptical -nonsyntactic -nonsyntactical -nonsynthesized -nonsynthetic -nonsynthetical -nonsyntonic -nonsyntonical -nonsystematic -nonsystematical -nontabular -nontabulated -nontactical -nontactile -nontalented -nontalkative -nontan -nontangental -nontangential -nontangible -nontannic -nontanning -nontarnishable -nontarnished -nontarnishing -nontarred -nontautological -nontautomeric -nontautomerizable -nontaxable -nontaxonomic -nontaxonomical -nonteachable -nonteaching -nontechnical -nontechnologic -nontechnological -nontelegraphic -nontelegraphical -nonteleological -nontelepathic -nontelephonic -nontelescopic -nontelescoping -nontelic -nontemperable -nontemperamental -nontemperate -nontempered -nontemporal -nontemporary -nontemporizing -nontenable -nontenantable -nontensile -nontentative -nontenurial -nonterminable -nonterminal -nonterminative -nonterrestrial -nonterritorial -nontestable -nontestamentary -nontesting -nontextual -nontextural -nontheatric -nontheatrical -nontheistic -nontheistical -nonthematic -nontheocratic -nontheocratical -nontheologic -nontheological -nontheoretic -nontheoretical -nontheosophic -nontheosophical -nontherapeutic -nontherapeutical -nonthermal -nonthermoplastic -nonthinking -nonthoracic -nonthreaded -nonthreatening -nontidal -nontillable -nontimbered -nontinted -nontitaniferous -nontitled -nontitular -nontolerable -nontolerant -nontolerated -nontolerative -nontoned -nontonic -nontopographical -nontortuous -nontotalitarian -nontoxic -nontraceable -nontractable -nontrading -nontraditional -nontraditionalistic -nontraditionary -nontragic -nontragical -nontrailing -nontrained -nontraining -nontraitorous -nontranscribing -nontranscriptive -nontransferable -nontransferential -nontransforming -nontransgressive -nontransient -nontransitional -nontransitive -nontransmittal -nontransmittible -nontransparent -nontransportable -nontransposable -nontransposing -nontraveling -nontravelling -nontraversable -nontreasonable -nontreatable -nontreated -nontribal -nontributary -nontrigonometric -nontrigonometrical -nontrivial -nontropic -nontropical -nontroubling -nontrunked -nontrusting -nontubercular -nontuberculous -nontubular -nontumorous -nontumultuous -nontuned -nonturbinate -nonturbinated -nontutorial -nontyphoidal -nontypical -nontypographic -nontypographical -nontyrannic -nontyrannical -nontyrannous -nonubiquitary -nonubiquitous -nonulcerous -nonumbilical -nonunanimous -nonunderstandable -nonunderstanding -nonunderstood -nonundulant -nonundulate -nonundulating -nonundulatory -nonunified -nonuniform -nonunion -nonunique -nonunitable -nonuniteable -nonunited -nonuniting -nonuniversal -nonupright -nonurban -nonurgent -nonusable -nonuseable -nonusing -nonusurious -nonusurping -nonuterine -nonutilitarian -nonutilized -nonvacant -nonvacillating -nonvacuous -nonvaginal -nonvagrant -nonvalid -nonvalorous -nonvaluable -nonvalued -nonvanishing -nonvaporous -nonvariable -nonvariant -nonvaried -nonvarious -nonvascular -nonvasculose -nonvasculous -nonvegetative -nonvegetive -nonvehement -nonvenal -nonvendible -nonvenereal -nonvenomous -nonvenous -nonventilative -nonveracious -nonverbal -nonverbalized -nonverifiable -nonveritable -nonverminous -nonvernacular -nonvertebral -nonvertebrate -nonvertical -nonvesicular -nonvesting -nonvexatious -nonviable -nonvibratile -nonvibrating -nonvibratory -nonvicarious -nonvigilant -nonvillainous -nonvindicable -nonvinous -nonvintage -nonviolable -nonviolative -nonvirginal -nonvirile -nonvirtuous -nonvirulent -nonvisceral -nonviscid -nonviscous -nonvisible -nonvisional -nonvisionary -nonvisiting -nonvisual -nonvisualized -nonvital -nonvitalized -nonvitrified -nonvitriolic -nonvituperative -nonviviparous -nonvocable -nonvocal -nonvocalic -nonvocational -nonvoid -nonvoidable -nonvolant -nonvolatile -nonvolatilizable -nonvolatilized -nonvolcanic -nonvolitional -nonvoluble -nonvoluntary -nonvoting -nonvulcanized -nonvulval -nonvulvar -nonwalking -nonwarrantable -nonwarranted -nonwashable -nonwasting -nonwatertight -nonwavering -nonwaxing -nonwestern -nonwetted -nonwinged -nonwithering -nonwoody -nonworking -nonwoven -nonyielding -nonzealous -nonzero -nonzodiacal -nonzonal -nonzonate -nonzonated -nonzoologic -nonzoological -nooklike -noritic -normal -normative -normocytic -normotensive -northbound -northeasterly -northeastern -northeastward -northerly -northern -northernmost -northmost -northward -northwesterly -northwestward -nosebanded -nosier -nosiest -nosogenetic -nosogeographic -nosogeographical -nosographic -nosographical -nosological -nostologic -nosy -notable -notal -notarial -notational -notchy -noted -noteless -noteworthy -nothus -noticeable -notifiable -notional -notionate -notionless -notochordal -notorious -notour -noumenal -nourishable -novelettish -novelistic -novemdecillionth -novercal -nowed -noxious -nth -nubblier -nubbliest -nubbly -nubile -nubilous -nuciform -nuclear -nucleate -nucleolar -nucleolated -nucleoloid -nucleophilic -nucleoplasmatic -nucleoplasmic -nudicaul -nugatory -nuggety -null -nulliparous -nulliporous -numb -numberable -numberless -numbing -numerable -numerary -numerate -numeric -numerical -numerous -numinous -nummary -nummular -nummulitic -nuncupative -nunlike -nunnated -nuptial -nurturable -nurtureless -nutant -nutational -nutbrown -nutlike -nutmegged -nutrimental -nutritious -nutritive -nuts -nutty -nyctaginaceous -nyctitropic -nymphaeaceous -nymphal -nymphean -nymphomaniac -nymphomaniacal -nystagmic -oafish -oaken -oared -oarless -oarlike -oasitic -oaten -obbligato -obclavate -obconic -obconical -obcordate -obcuneate -obdurate -obedient -obeisant -obeliscal -obeliskoid -obese -obeyable -objectionable -objective -objectivistic -objurgative -objurgatory -oblanceolate -oblate -oblatory -obligable -obligato -obligatory -obliging -oblique -obliterable -obliterative -oblivious -oblong -oblongish -obnoxious -obovate -obovoid -obreptitious -obscene -obscure -obsequent -obsequious -observable -observant -obsessional -obsessive -obsolescent -obsolete -obstetric -obstinate -obstreperous -obstructionistic -obstructive -obstruent -obtect -obtrusive -obtundent -obtuse -obumbrant -obverse -obvious -obvolute -obvolutive -occasional -occasionalistic -occipital -occludent -occlusal -occlusive -occult -occupational -occupationless -occupative -occupiable -occurrent -oceanic -oceanlike -oceanographic -oceanographical -ocellar -ocellated -oceloid -ocherous -ochery -ochlocratic -ochlocratical -ochreous -ocreate -octachordal -octadic -octagonal -octahedral -octal -octamerous -octan -octangular -octantal -octastyle -octaval -octavalent -octennial -octennially -octodecillionth -octonary -octupled -octupling -ocular -oculistic -oculomotor -odd -odious -odometrical -odontalgic -odontoblastic -odontographic -odontoid -odontological -odontophorous -odorful -odoriferous -odorless -odorous -odourful -odourless -odylic -oecumenical -oedipal -oenochoe -oesophageal -oestrous -offcast -offendable -offendible -offenseless -offensive -offerable -offertorial -offhand -officeless -official -officinal -officious -offish -offscreen -offshore -offside -offstage -ogreish -ohmic -oidioid -oilfired -oilier -oiliest -oilless -oillike -oiltight -oily -okay -old -olden -older -oldest -oldfangled -oleaceous -oleaginous -olefinic -oleic -oleographic -oleomargaric -oleoyl -olericultural -olfactory -olid -oligarchic -oligocarpous -oligochaetous -oligophagous -oligophrenic -oligopolistic -oligopsonistic -oligotrophic -oliguretic -olivaceous -olivary -omental -ominous -omissible -omissive -ommateal -ommatidial -ommatophorous -omnicompetent -omnidirectional -omnifarious -omnific -omnificent -omnipotent -omnipresent -omniscient -omnivorous -omophagic -onagraceous -onanistic -oncogenic -oncologic -oncological -oncoming -oncotic -oneiric -oneirocritical -onerous -ongoing -onionlike -oniony -only -onomastic -onomatologic -onomatological -onrushing -onshore -onside -ontogenetic -ontogenetical -ontogenic -ontological -onward -onymous -oogamous -oogenetic -ookinetic -oolitic -oological -oophoric -oophytic -oory -oosporic -oozier -ooziest -oozy -opacus -opalescent -opaline -opaque -open -openairish -openchain -opencircuit -operable -operant -operatable -operatic -operational -operative -operculate -operose -ophicleidean -ophidian -ophiolatrous -ophiologic -ophiological -ophitic -ophthalmic -ophthalmitic -ophthalmologic -ophthalmological -ophthalmometric -ophthalmometrical -ophthalmoscopic -ophthalmoscopical -opinionated -opinionative -opisthognathous -oppidan -opportune -opportunistic -opposable -opposite -oppositional -oppositionary -oppositionless -oppressible -oppressive -opprobrious -oppugnant -opsonic -opsonoid -optative -optic -optical -optimal -optimistic -optional -optometrical -opulent -opuscular -oracular -oral -orangy -oratorical -oratorlike -orbicular -orbiculate -orchestral -orchestraless -orchidaceous -orchitic -ordainable -orderly -ordinaire -ordinal -ordinary -ordurous -orectic -organic -organicismal -organicistic -organisable -organisational -organismal -organismic -organizable -organizational -organographic -organographical -organoleptic -organologic -organological -organomagnesium -organometallic -orgasmic -orgastic -orgulous -oriental -orientative -original -originative -orinasal -ornamental -ornamented -ornate -ornery -ornithic -ornithischian -ornithoid -ornithologic -ornithological -orobanchaceous -orogenetic -orogenic -orological -orometric -oronasal -oropharyngeal -orotund -orphreyed -orrow -ortho -orthocephalic -orthochromatic -orthodontic -orthodox -orthogenetic -orthogenic -orthognathous -orthogonal -orthographic -orthomorphic -orthopedic -orthophosphoric -orthophyric -orthopneic -orthopnoeic -orthopterous -orthoptic -orthorhombic -orthoscopic -orthostichous -orthostyle -orthotone -orthotropic -orthotropous -oscillatory -oscillometric -oscine -oscitant -osculant -oscular -osculatory -osiered -osmic -osmious -osmometric -osmous -osseous -ossicular -ossiferous -ossified -osteal -osteitic -ostensible -ostensive -osteoblastic -osteogenetic -osteoid -osteologic -osteological -osteometric -osteometrical -osteopathic -osteophytic -osteoplastic -ostiolar -ostracizable -ostracodan -ostracodous -ostrichlike -otalgic -otherguess -otherworldly -otic -otiose -otocystic -otolaryngological -otological -otoplastic -otoscopic -ougenetic -oukinetic -oulitic -oulogical -ouphoric -ouphytic -ousporic -outasight -outboard -outbound -outdated -outdoor -outdoorsy -outer -outermost -outeyed -outgoing -outland -outlandish -outlying -outmoded -outmost -outr -outra -outrageous -outremer -outright -outsize -outspoken -outstanding -outward -outweaponed -outworn -oval -ovarian -ovate -ovational -ovenlike -overable -overabstemious -overabundant -overabusive -overactive -overacute -overadorned -overaffected -overaffirmative -overage -overaggressive -overall -overambitioned -overambitious -overanalytical -overanalyzed -overangry -overanimated -overanxious -overappareled -overappreciative -overapprehensive -overapt -overargumentative -overarm -overartificial -overassertive -overassumptive -overassured -overattached -overattentive -overbashful -overbearing -overbig -overbitter -overblithe -overblown -overboastful -overbold -overbookish -overbooming -overbounteous -overbrave -overbright -overbrilliant -overbrutal -overbulky -overbumptious -overburdensome -overbusy -overcanny -overcapable -overcaptious -overcareful -overcareless -overcast -overcasual -overcasuistical -overcaustic -overcautious -overcensorious -overcerebral -overcharitable -overcheap -overcherished -overchildish -overchill -overcircumspect -overcivil -overclean -overclement -overclever -overclinical -overclose -overcold -overcommon -overcommunicative -overcompetitive -overcomplacent -overcomplex -overcompliant -overconscientious -overconscious -overconservative -overconsiderate -overconstant -overcontented -overcontentious -overcontrite -overcool -overcopious -overcorrect -overcostly -overcourteous -overcovetous -overcoy -overcredulous -overcritical -overcultured -overcunning -overcured -overcurious -overdainty -overdear -overdecadent -overdecorative -overdeep -overdefensive -overdeferential -overdefiant -overdeliberate -overdelicate -overdelicious -overdependent -overdepressive -overderisive -overdescriptive -overdesirous -overdestructive -overdetailed -overdevoted -overdiffuse -overdiligent -overdiscreet -overdiscriminating -overdistant -overdistrait -overdistraught -overdiverse -overdoctrinaire -overdogmatic -overdogmatical -overdoor -overdramatic -overdry -overdue -overeager -overearnest -overeasy -overeducative -overeffusive -overelaborate -overelegant -overelliptical -overemotional -overemphatic -overemphatical -overempirical -overempty -overenthusiastic -overenvious -overexacting -overexcitable -overexpansive -overexpectant -overexplicit -overexpressive -overexquisite -overextreme -overexuberant -overfacile -overfactious -overfactitious -overfaint -overfaithful -overfamed -overfamiliar -overfamous -overfanciful -overfast -overfastidious -overfat -overfavorable -overfearful -overfeminine -overfertile -overfervent -overfew -overfierce -overfit -overflat -overfleshed -overflorid -overflowable -overfluent -overfond -overfoolish -overforged -overformed -overforward -overfoul -overfragile -overfragmented -overfrail -overfranchised -overfrank -overfraught -overfree -overfrequent -overfrugal -overfruitful -overfunctioning -overgenerous -overgenial -overgentle -overgesticulative -overgifted -overglad -overglaze -overgloomy -overgracious -overgraduated -overgrasping -overgrateful -overgreasy -overgreat -overgreedy -overgrievous -overgross -overground -overguilty -overhand -overhappily -overhappy -overhard -overhardy -overharsh -overhasty -overhatted -overhaughty -overhead -overheady -overhearty -overheavy -overhelpful -overhigh -overhomely -overhonest -overhostile -overhot -overhuge -overhuman -overhumane -overhumble -overhurried -overhysterical -overidealistic -overidle -overidolatrous -overillustrative -overimaginative -overimitative -overimpressible -overimpressionable -overinclinable -overindividualistic -overindulgent -overinflationary -overinfluential -overinhibited -overinsistent -overinsolent -overinstructive -overintellectual -overintense -overinterested -overinventoried -overjealous -overjocular -overjoyful -overjoyous -overjudicious -overkeen -overkind -overland -overlarge -overlascivious -overlate -overlaudatory -overlavish -overlax -overlearned -overlewd -overliberal -overlicentious -overlight -overliterary -overlively -overloath -overlofty -overlogical -overlong -overloose -overloud -overloyal -overluscious -overlush -overluxuriant -overluxurious -overmagnetic -overmany -overmasterful -overmature -overmean -overmeek -overmellow -overmelodious -overmerciful -overmerry -overmettled -overmighty -overmild -overmilitaristic -overminute -overmodest -overmoist -overmoral -overmoralistic -overmournful -overnarrow -overnear -overneat -overneglectful -overnegligent -overnervous -overnice -overnoble -overnormal -overnumerous -overobedient -overobese -overobsequious -overoffensive -overofficious -overoptimistic -overornamental -overpained -overpainful -overpartial -overparticular -overpassionate -overpatient -overpatriotic -overpensive -overperemptory -overpessimistic -overpiteous -overplain -overplausible -overplenteous -overplentiful -overplump -overpolemical -overpolitic -overpolitical -overponderous -overpopular -overpopulous -overpositive -overpotent -overpowerful -overpowering -overprecise -overpresumptive -overpresumptuous -overproficient -overprolific -overprolix -overprominent -overprompt -overprone -overproof -overproportionate -overprosperous -overprovident -overpuissant -overquiet -overrash -overrational -overreactive -overready -overrealistic -overreflective -overreliant -overreligious -overremiss -overrepresentative -overreserved -overresolute -overrestraint -overrich -overriding -overrife -overrigged -overrighteous -overrigid -overrigorous -overripe -overrough -overrude -oversacrificial -oversad -oversalty -oversanguine -oversaucy -overscented -oversceptical -overscrupulous -oversecure -oversecured -oversensible -oversentimental -overserene -overserious -overservile -oversevere -oversexed -overshort -overshot -oversilent -oversimple -oversize -overskeptical -overslack -overslavish -overslight -overslow -oversmooth -oversocial -oversoft -oversolemn -oversolicitous -oversoothing -oversophisticated -oversorrowful -oversour -overspacious -oversparing -overspeculative -overspeedy -oversqueamish -overstale -overstayed -oversteadfast -oversteady -overstiff -overstimulative -overstout -overstowed -overstraight -overstrict -overstrident -overstrong -overstrung -overstudious -overstuffed -oversubtle -oversufficient -oversuperstitious -oversure -oversusceptible -oversuspicious -oversweet -oversystematic -overt -overtalkative -overtame -overtart -overtechnical -overtedious -overtenacious -overtender -overtense -overtheatrical -overthick -overthin -overthoughtful -overthrifty -overtight -overtimbered -overtimid -overtimorous -overtolerant -overtrue -overtrustful -overtruthful -overturnable -overvaliant -overvaluable -overvehement -overventuresome -overventurous -overvigorous -overviolent -overwarmed -overwary -overweak -overwealthy -overweary -overweening -overweight -overwet -overwhelming -overwide -overwild -overwilling -overwily -overwithered -overwrought -overzealous -oviferous -oviform -ovine -oviparous -ovisaclike -ovoid -ovoviviparous -ovular -owing -owlish -owlishly -owllike -oxalic -oxblood -oxidable -oxidasic -oxidational -oxidative -oxidic -oxidimetric -oxidizable -oximetric -oxlike -oxycephalic -oxychloric -oxydasic -oxygenic -oxygenizable -oxytocic -ozonic -ozoniferous -ozonous -paced -pachydermal -pachydermatous -pachydermic -pachydermoid -pachydermous -pacific -pacifical -pacificistic -pacifistic -packable -packthreaded -pactional -paederastic -paederastically -paediatric -paganist -paganistic -paginal -pagodalike -pained -painful -painless -painstaking -painted -painterly -pajamaed -palaced -palacelike -palaeanthropic -palaeobiologic -palaeobiological -palaeobotanic -palaeobotanical -palaeoclimatologic -palaeoclimatological -palaeoecologic -palaeoecological -palaeoentomologic -palaeoentomological -palaeological -palaeontographic -palaeontologic -palaeontological -palaeotropical -palaeozoologic -palaeozoological -palaestral -palaestrian -palaestric -palatable -palatal -palatalized -palateless -palatelike -palatial -palatine -palaverous -pale -paleaceous -paled -paleethnologic -paleethnological -paleobiologic -paleobiological -paleoclimatologic -paleoclimatological -paleoecologic -paleoecological -paleoentomologic -paleoentomological -paleogenetic -paleogeologic -paleographic -paleographical -paleological -paleomagnetic -paleontographic -paleontographical -paleopathologic -paleopsychic -paleopsychological -paleozoologic -paleozoological -paleozoulogic -paleozoulogical -paler -palest -palettelike -palindromic -palindromical -palingenesian -palish -palladic -palladous -pallial -palliative -pallid -pally -palmaceous -palmar -palmary -palmate -palmier -palmiest -palmitic -palmy -palpable -palpebral -palpebrate -palpitant -palsylike -paltrier -paltriest -paltry -paludal -paly -palynological -pampean -pamphletary -pan -pana -panatrophic -panchromatic -pancratic -pancreatic -pandanaceous -pandemic -pandemoniac -pandemoniacal -pandemonian -pandurate -paned -paneless -pangenetic -panheaded -panicky -panicled -paniculate -panlogical -panlogist -panlogistic -panlogistical -pannicular -panniered -panoptic -panoramic -panpsychic -panpsychistic -pansophic -pansophical -pantaletted -pantheistic -pantheistical -pantheonic -pantographic -pantographical -pantomimic -pantomimical -pantonal -pantropical -panurgic -papal -papalonna -papaveraceous -papayan -papercutting -papery -papilionaceous -papillar -papillary -papillomatous -papillose -papistical -papistlike -paplike -pappose -pappy -papular -papulose -papyraceous -papyral -papyrological -parablastic -parabolic -parachronistic -parachutic -paracusic -paradeful -paradeless -paradelike -paradigmatic -paradigmatical -paradisaical -paradisiacal -paradoxal -paradoxical -paraesthetic -paraffinic -paraffinoid -paragenetic -parageusic -paraglossate -paragogic -paragogical -paragonitic -paragonless -paragraphic -paragraphistical -paralexic -parallactic -parallel -parallelable -parallelepipedic -parallelepipedonal -parallelepipedous -parallelless -paralytic -paralyzant -paramagnetic -paramedical -parametric -paramilitary -paramorphic -paramorphous -paramount -paranasal -paranoiac -paranoid -paranormal -parapeted -parapetless -paraphrasable -paraphrastic -paraphysate -paraplegic -parapodial -parapsychological -paraselenic -parasitic -parasiticidal -parasitological -parasoled -parasympathetic -parasynaptic -parasynthetic -paratactic -paratactical -parathyroid -paratroop -paratrophic -paratyphoid -paravail -paraxial -parchable -pardine -pardonable -pardonless -parecious -parenchymatous -parental -parenteral -parenthetic -parentless -parentlike -paresthetic -pareve -parheliacal -parietal -paripinnate -parisonic -parisyllabic -parkinsonian -parklike -parky -parlando -parliamentary -parlourish -parlous -parmigiana -parochial -parodiable -parodic -parodistic -paroicous -parolable -paronomastic -paronymic -paronymous -parotic -parotid -parotidean -parotitic -paroxysmal -paroxysmic -paroxytone -paroxytonic -parricidal -parsable -parsleylike -parsonic -parsonical -parsonish -parsonlike -partakable -parted -parterred -parthenocarpic -partial -partible -participial -particular -particularistic -particulate -partis -partite -partitive -partnerless -partridgelike -parturient -parturifacient -partyless -parve -paschal -pasquilic -pasquillic -pass -passa -passable -passant -passed -passeriform -passerine -passible -passifloraceous -passing -passional -passionate -passionless -passive -passless -passportless -past -pastier -pasties -pastiest -pastoral -pastose -pastural -pastureless -pasty -patchable -patchier -patchiest -patchless -patchworky -patchy -patellar -patellate -patelliform -patentable -paterfamiliar -paternal -pathetic -pathless -pathobiological -pathoformic -pathogenetic -pathogenic -pathognomonic -pathographic -pathological -pathologicoanatomic -pathwayed -patient -patientless -patriarchal -patriarchic -patriarchical -patricidal -patrilateral -patrilineage -patrilineal -patrilocal -patrimonial -patriotic -patripotestal -patristic -patrologic -patrological -patronal -patronisable -patronising -patronizable -patronly -patronymic -patt -pattae -patternable -patternless -patternlike -patterny -patulous -paty -paunchy -pausal -pauseful -pauseless -pavid -pavonine -pawky -pawnable -payable -peaceable -peaceful -peaceless -peacelike -peachier -peachiest -peachlike -peachy -peacockish -peacocky -peaked -peakish -peakless -peaklike -peaky -pealike -pearleyed -pearlier -pearliest -pearlized -pearly -peart -peaselike -peatier -peatiest -peaty -pebbly -peccable -peccant -peckier -peckiest -peckish -pecky -pectic -pectinaceous -pectinate -pectizable -pectoral -pectous -peculiar -pecuniary -pedagogic -pedagogish -pedagoguish -pedantesque -pedantic -pedantical -pedate -pedatifid -peddling -pederastic -pediatric -pedicellar -pedicellate -pedicular -pediculate -pediculicide -pediculous -pediform -pedigreed -pedimental -pedimented -pedipalpal -pedipalpate -pedodontic -pedological -pedophilic -pedunculate -peelable -peerless -peeved -peevedly -peevish -peewee -peglegged -pegless -peglike -pegmatitic -pejorative -pelagial -pelagic -pelargonic -pelitic -pellagrose -pelletlike -pellicular -pellucid -peloric -peltate -pelting -pelvic -pemphigous -penal -penalisable -penalizable -penanceless -penannular -penceless -penciliform -pencillike -pendanted -pendantlike -pendent -pendragonish -pendulous -pendulumlike -penecontemporaneous -penetralian -penetrant -penetrating -penetrative -penicillate -penile -peninsular -penitent -penitential -pennate -pennied -penniless -pennoned -penological -pensile -pensionable -pensionary -pensionless -pensive -pentadactyl -pentagonal -pentagonoid -pentagrammatic -pentagrid -pentahydrated -pentahydric -pentahydroxy -pentamerous -pentangular -pentapodic -pentarchical -pentastyle -pentasyllabic -pentatomic -pentavalent -pentomic -penultimate -penurious -peopleless -peperine -peplosed -peppercornish -peppercorny -pepperish -peppery -peppier -peppiest -peppy -pepsinogenic -peptic -peptidolytic -peptonelike -peptonic -perambulatory -perceivable -percental -perceptible -perceptional -perceptive -perceptual -perchable -perchloric -perchromic -percipient -percoid -percolable -percolative -percurrent -percussional -percussive -percutaneous -perdurable -peregrine -peremptory -perennial -perfect -perfectible -perfectionistic -perfective -perfervid -perfidious -perfoliate -perforable -perforated -perforative -performable -performative -performing -perfumeless -perfumy -perfunctory -perfusive -periastral -pericardial -pericarditic -pericarpial -pericarpic -pericarpoidal -pericemental -pericentral -pericentric -perichaetial -periclinal -pericranial -peridental -peridermal -peridermic -peridial -peridiiform -peridotic -peridotitic -perigeal -perigean -periglacial -perigonal -perigonial -perigynous -perihelial -perihelian -perilless -perilous -perilymphatic -perimorphic -perimorphous -perinatal -perineal -perinephral -perinephrial -perinephric -perineurical -periodic -periodontal -periodontic -perioecic -perioecid -periosteal -periosteous -periostitic -periostracal -periotic -peripatetic -peripheral -periphrastic -periproctal -periproctic -periproctous -peripteral -perisarcal -perisarcous -periscopic -perishable -perished -perishing -perishless -perispheric -perispherical -perispomenon -perissodactylous -peristaltic -peristomal -peristomatic -peristomial -peritectic -perithecial -perithelial -peritonital -peritonitic -peritrichate -perivisceral -periwinkled -perjured -perk -perkier -perkiest -perkish -perky -perlitic -perlucidus -permanent -permanganic -permeable -permeant -permissible -permissive -permutable -permutational -pernicious -pernickety -peroneal -perorational -perorative -peroratorical -perotic -peroxidic -peroxy -perpendicular -perpetuable -perpetual -perplexed -perse -persecutional -perseverant -persevering -persistent -persnickety -personable -personal -personalistic -personative -personifiable -personifiant -persons -perspectival -perspectived -perspectiveless -perspicacious -perspicuous -perspirable -perspiratory -perspiry -persuadable -persuasive -pert -perthitic -pertinacious -pertinent -perturbable -perturbational -perturbatious -pertussal -perusable -pervasive -perverse -perversive -perverted -pervertible -pervious -peskier -peskiest -pesky -pestersome -pesticidal -pestiferous -pestilent -pestilential -petaled -petaliferous -petaline -petalled -petalless -petallike -petalodic -petaloid -petalous -petechial -petechiate -petiolar -petiolate -petiolular -petit -petite -petitionable -petitionary -petitory -petrifiable -petrificant -petrogenetic -petrogenic -petrographic -petrographical -petroleous -petrolic -petrologic -petrological -petrosal -petrous -petticoated -petticoatless -pettier -pettiest -pettifogging -pettish -petty -petulant -phagedaenic -phagedenic -phagocytolytic -phagolytic -phalangeal -phalansterian -phallic -phanerocrystalline -phanerogamic -phanerogamous -phantasmagorial -phantasmagorian -phantasmagoric -phantasmagorical -phantasmal -phantastic -phantastical -phantomlike -pharmaceutical -pharmacodynamic -pharmacodynamical -pharmacognostic -pharmacologic -pharmacological -pharmacopoeial -pharmacopoeic -pharyngeal -phaseal -phaseless -phasic -phatic -phellogenetic -phenetic -phenolated -phenolic -phenological -phenomenal -phenomenalistic -phenotypic -phenotypical -phenylene -phialine -philanthropic -philanthropistic -philatelic -philatelical -philharmonic -philhellenic -philologic -philological -philoprogenitive -philosophical -phimotic -phleboid -phlebotomic -phlebotomical -phlegmatic -phlegmatized -phlegmier -phlegmiest -phlegmless -phlegmy -phlogistic -phlogotic -phocine -phonal -phonatory -phonematic -phonemic -phonesthemic -phonetic -phoney -phoniatric -phonic -phonier -phonies -phoniest -phonogramic -phonogrammic -phonographic -phonolitic -phonologic -phonological -phonometric -phonophoric -phonotypic -phonotypical -phony -phosphaturic -phosphorescent -phosphoreted -phosphoric -phosphorous -photic -photoactinic -photoactive -photoautotrophic -photobathic -photobiotic -photochemic -photochemical -photoconductive -photodramatic -photodynamic -photodynamical -photoelastic -photoelectric -photoemissive -photoflight -photogenic -photographable -photographic -photoheliographic -photokinetic -photolithographic -photoluminescent -photolytic -photomechanical -photometric -photometrical -photonuclear -photopathic -photoperiodic -photophilous -photopic -photoreceptive -photosensitive -photospectroscopic -photospectroscopical -photospheric -photostatic -phototactic -phototelegraphic -photothermic -phototonic -phototopographic -phototopographical -phototropic -phototypic -phototypographic -photovoltaic -phrasal -phraseologic -phraseological -phreatic -phreatophytic -phrenetic -phrenic -phrenitic -phrenogastric -phrenogrady -phrenologic -phrenological -phrenoward -phthalic -phthisic -phthisical -phugoid -phycological -phylacteric -phylacterical -phylacteried -phylactic -phylar -phyletic -phylic -phyllocladioid -phyllocladous -phyllodial -phyllogenetic -phylloid -phyllomic -phyllotactic -phyllotactical -phyllotaxic -phylogenetic -phymatic -physiatric -physiatrical -physical -physicianly -physicochemical -physiocratic -physiognomic -physiognomonical -physiological -physiopathologic -physiopathological -physoclistous -physostomous -phytocidal -phytoclimatologic -phytoclimatological -phytogenic -phytogeographic -phytogeographical -phytographic -phytographical -phytologic -phytological -phytophagous -phytosociologic -phytosociological -phytosuccivorous -phytotoxic -piacular -pial -pianic -pianissimo -piazzaed -piazzian -picaresque -picayune -piceous -picked -pickier -pickiest -pickled -picky -picolinic -picrated -picric -picrotoxic -pictorial -picturesque -piddling -piebald -pied -piedmont -pielike -pierceable -piercing -pieridine -pietistic -pietistical -piezometric -piezometrical -piggish -pikelike -pilar -pileate -pileated -piled -pileous -pilgarlicky -pilgrimatic -pilgrimatical -piliferous -piliform -pillared -pillarlike -pillowless -pillowlike -pillowy -pilonidal -pilose -pilotless -pilpulistic -pily -pinaceous -pinacoidal -pinchable -pinchpenny -pindling -pineal -pinelike -piney -pinfire -pinguid -pinheaded -pinier -piniest -pinkish -pinnal -pinnate -pinnatifid -pinnatilobate -pinnatipartite -pinnatiped -pinnatisect -pinniped -pinnipedian -pinnular -pinnulate -pinto -piny -pious -pipeless -pipelike -piperaceous -pipier -pipiest -pipy -piquant -piratelike -piratic -piratical -piscatorial -piscatory -piscicultural -pisciform -piscine -piscivorous -pisiform -pisolitic -pissed -pistillate -pistollike -pistonlike -pitchable -pitcherlike -pitchier -pitchiest -pitchlike -pitchy -piteous -pithecanthropoid -pithecoid -pithy -pitiable -pitiful -pitiless -pivotal -pixilated -pixyish -pizzicato -placable -placative -placatory -placeable -placeless -placental -placentary -placentate -placid -placoid -plagal -plagiaristic -plagihedral -plagiocephalic -plagiocephalous -plaguy -plaided -plain -plaintive -planar -planetary -planetoidal -plangent -planiform -planimetric -planimetrical -planispherical -plankless -planklike -planktonic -planoblastic -plantable -plantar -plantationlike -plantigrade -plantless -plantlike -planular -planulate -plashier -plashiest -plashy -plasmodial -plastered -plasterlike -plastery -plastics -plastometric -plated -platier -platiest -platinic -platiniferous -platinocyanic -platinoid -platinous -platitudinous -platy -platycephalic -platyhelminthic -platykurtic -platypod -platyrrhine -plausible -plausive -playable -playful -pleadable -pleasable -pleasant -pleasing -pleasurable -pleasureful -pleasureless -plebby -plebeian -plectognathic -plectognathous -pledgeable -pledgeless -pleiomerous -pleiophyllous -plenary -plenipotent -plenipotentiary -plenteous -plentiful -pleochroic -pleochroitic -pleomorphic -pleonal -pleonic -plesiosauroid -plethoric -pleural -pleuritic -pleurocarpous -pleurodont -pleuropneumonic -plexiform -pleximetric -pliable -pliant -plical -plicate -plinthless -plinthlike -plosive -plotful -plotless -plowable -pluckier -pluckiest -pluckless -plucky -pluggable -plugless -pluglike -plumaged -plumate -plumbable -plumbaginaceous -plumbaginous -plumbeous -plumbic -plumbiferous -plumbless -plumbous -plumier -plumiest -plumlike -plummier -plummiest -plummy -plumose -plump -plumular -plumulose -plumy -plunderable -pluperfect -plural -pluriliteral -plushed -plusher -plushest -plushlike -pluteal -plutean -plutonic -pluvial -pluviometric -pluviometrical -pluvious -pneudraulic -pneumatic -pneumatologic -pneumatological -pneumatophorous -pneumococcal -pneumogastric -pneumographic -pneumonic -poaceous -poachable -poachier -poachiest -poachy -pocked -pockier -pockiest -pockmarked -pocky -poco -poculiform -podgier -podgiest -podgy -poditic -podophyllic -podsolic -podzolic -poetastric -poetastrical -poetic -poetless -poetlike -poignant -poikilitic -poikiloblastic -poikilothermic -pointed -pointilla -pointless -poised -poisonous -pokable -pokey -pokier -pokies -pokiest -poky -polar -polarisable -polarographic -polemic -polemoniaceous -poliomyelitic -polished -polite -politic -political -pollable -polled -pollened -pollenless -pollenlike -pollinic -pollinical -polliniferous -polluted -polyacid -polyadelphous -polyandrous -polyangular -polyarchic -polyarchical -polyarticular -polyatomic -polybasic -polycarpellary -polycarpic -polycarpous -polychasial -polychromatic -polychrome -polychromous -polyconic -polycrystalline -polycyclic -polycythaemic -polycythemic -polydactyl -polydemic -polydisperse -polydomous -polyethnic -polyfoil -polygalaceous -polygamistic -polygamous -polygenistic -polyglot -polygonaceous -polygonal -polygraphic -polygynous -polyhistoric -polyhydric -polyhydroxy -polymeric -polymerous -polymorphistic -polymorphonuclear -polymorphous -polyneuritic -polynomial -polynuclear -polyonymous -polyparian -polypetalous -polyphase -polyphonic -polyphonous -polyphyletic -polyphyodont -polyploid -polyploidic -polypod -polypoid -polypous -polyprotic -polysemous -polysepalous -polysomic -polyspermia -polysyllabic -polysyllogistic -polysynthetic -polytheistic -polytheistical -polytomous -polytonal -polytrophic -polytypic -polyunsaturated -polyvalent -polyvinylidene -polyzoarial -polyzoic -pomaceous -pomiferous -pommae -pomological -pompous -ponchoed -ponderable -ponderous -pontific -pontifical -pontine -poor -popeless -popelike -popeyed -popish -poplared -popliteal -poppied -poppycockish -poppylike -pops -popular -populational -populationless -populous -porchless -porchlike -porcine -porelike -poriferous -poriform -porkier -porkiest -porky -poromeric -porous -porphyritic -porphyroid -porpoiselike -porrect -portable -portaled -portalled -portative -portentous -porticoed -portiered -portionable -portionless -portless -portlier -portliest -portly -portraitlike -portrayable -portulacaceous -posh -positional -positionless -positive -positivist -positivistic -posologic -posological -possessed -possessive -possessory -possible -postabdominal -postacetabular -postal -postallantoic -postamniotic -postanal -postanesthetic -postantennal -postaortic -postapoplectic -postapostolic -postapostolical -postappendicular -postarterial -postarthritic -postarticular -postarytenoid -postasthmatic -postauditory -postauricular -postaxial -postaxillary -postbaptismal -postbrachial -postbreakfast -postbronchial -postbuccal -postbulbar -postbursal -postcaecal -postcanonical -postcardiac -postcardinal -postcarotid -postcartilaginous -postcatarrhal -postcaudal -postcentral -postcephalic -postcerebellar -postcerebral -postcolon -postcolumellar -postcommunicant -postcondylar -postconnubial -postconquest -postconsonantal -postconvalescent -postconvulsive -postcostal -postcoxal -postcretaceous -postcritical -postcruciate -postcrural -postcubital -postdental -postdepressive -postdetermined -postdevelopmental -postdiagnostic -postdiaphragmatic -postdiastolic -postdigestive -postdigital -postdiluvian -postdiphtherial -postdiphtheric -postdiphtheritic -postdisapproved -postdiscoidal -postdoctoral -postdural -postdysenteric -postelection -postelemental -postelementary -postencephalitic -postepileptic -posterior -posteruptive -postesophageal -postethmoid -postexilian -postfebrile -postfemoral -postfetal -postfoetal -postfoveal -postganglionic -postgastric -postgenial -postgenital -postglacial -postgrippal -posthemiplegic -posthemorrhagic -posthepatic -posthexaplar -posthippocampal -posthumeral -posthumous -posthyoid -posthypnotic -posthysterical -postiche -posticous -posticteric -postilioned -postillioned -postincarnation -postinfective -postinfluenzal -postintestinal -postjugular -postlabial -postlachrymal -postlarval -postlaryngal -postlaryngeal -postlegal -postlenticular -postlicentiate -postlike -postmalarial -postmammary -postmammillary -postmandibular -postmaniacal -postmarital -postmastoid -postmaxillary -postmaximal -postmediaeval -postmedial -postmedian -postmedieval -postmedullary -postmeiotic -postmeningeal -postmenopausal -postmenstrual -postmeridian -postmesenteric -postmillennial -postmortem -postmundane -postmuscular -postmycotic -postmyxedematous -postmyxedemic -postnasal -postnecrotic -postnephritic -postneural -postneuralgic -postneuritic -postneurotic -postnodal -postnodular -postnuptial -postolivary -postomental -postoperative -postoptic -postoral -postorbital -postordination -postorgastic -postosseous -postpalpebral -postpaludal -postparalytic -postparotid -postparotitic -postparoxysmal -postpartum -postparturient -postpatellar -postpathologic -postpathological -postpectoral -postpeduncular -postperforated -postpericardial -postpharyngal -postpharyngeal -postphlogistic -postphrenic -postphthistic -postpituitary -postpneumonic -postpositional -postpositive -postprandial -postprophetic -postprophetical -postprostate -postpuberty -postpubescent -postpuerperal -postpulmonary -postpupillary -postpyloric -postpyramidal -postpyretic -postrachitic -postrectal -postrenal -postresurrectional -postretinal -postrheumatic -postrhinal -postrorse -postrostral -postrubeolar -postsaccular -postscarlatinoid -postscholastic -postscorbutic -postseason -postsigmoid -postsigmoidal -postspasmodic -postsphenoid -postsphygmic -postspinous -postsplenic -poststernal -poststertorous -postsuppurative -postsurgical -postsymphysial -postsynaptic -postsyphilitic -postsystolic -posttabetic -posttarsal -posttemporal -posttetanic -postthalamic -postthoracic -postthyroidal -posttibial -posttoxic -posttracheal -posttrapezoid -posttraumatic -posttubercular -posttussive -posttympanic -postulational -postulnar -postumbilical -postumbonal -postural -postureteral -postureteric -postuterine -postvaccinal -postvarioloid -postvenereal -postvenous -postventral -postvertebral -postvesical -postvocalic -postxiphoid -postzygapophyseal -postzygapophysial -potable -potamic -potassic -potatory -potbellied -potent -potentae -potential -potentiometric -potenty -potlike -potted -pottier -pottiest -potty -pouched -pourable -poutful -powdery -powered -powerful -powerless -pozzolanic -practic -practicable -practical -practised -praedial -praenominal -praepostorial -praetorian -pragmatic -praiseworthy -prandial -pratincolous -prayerful -prayerless -preabsorbent -preabstract -preabundant -preaccessible -preaccidental -preacetabular -preachier -preachiest -preachieved -preachy -preacid -preacquisitive -preactive -preadamic -preadaptable -preadditional -preadequate -preadherent -preadjectival -preadjective -preadjustable -preadministrative -preadult -preadvisable -preadvisory -preaestival -preaexistent -preaffirmative -preaggressive -preagricultural -prealcoholic -prealgebraic -preallied -preallowable -prealphabet -prealphabetical -prealtar -preambassadorial -preambitious -preanal -preanaphoral -preantepenult -preantepenultimate -preantiseptic -preaortic -prearticulate -preartistic -preascetic -preaseptic -preassigned -preataxic -preauditory -preauricular -preaxial -prebachelor -prebarbaric -prebarbarous -prebasal -prebasilar -prebeloved -prebendal -prebetrothal -preblooming -preboding -preborn -prebrachial -prebranchial -prebridal -prebroadcasting -prebromidic -prebronchial -prebronze -prebrute -prebuccal -prebudgetary -preburlesque -precalculable -precancerous -precapitalistic -precapturing -precardiac -precarious -precarnival -precartilaginous -precast -precatory -precaudal -precautionary -precautious -precedented -precedential -precedentless -preceding -precentennial -precentorial -preceptive -precerebellar -precerebral -precerebroid -preceremonial -precessional -prechampioned -precharted -prechemical -prechloric -prechordal -prechoroid -precious -precipiced -precipitant -precipitative -precipitous -precise -precisive -preclassic -preclassical -preclerical -preclinical -precloacal -precoccygeal -precocial -precocious -precognizable -precognizant -precoincident -precollapsable -precollapsible -precollectable -precollegiate -precollusive -precolorable -precolourable -precommercial -precompliant -precomprehensive -preconceptional -preconcessive -preconcurrent -precondylar -precondyloid -precongenial -precongested -precongestive -precongressional -preconnective -preconnubial -preconscious -preconsonantal -precontemporaneous -precontinental -precontractive -precontractual -precontributive -precontroversial -preconversational -precoracoid -precordial -precorneal -precorrespondent -precorruptive -precosmic -precosmical -precostal -precranial -precritical -precrucial -precrural -precrystalline -precultural -precurrent -precurricular -precursory -precyclonic -precystic -predacious -predark -predatory -predeathly -predecisive -predefective -predeficient -predefrayal -predegenerate -predeliberate -predelinquent -predemocratic -predemonstrative -predenial -predepartmental -predependable -predependent -predesirous -predespondent -predestitute -predeterminate -predeterminative -predetrimental -prediagnostic -predial -prediastolic -predicable -predicant -predicational -predicative -predicatory -predicrotic -predictable -predictory -predietary -predigital -prediligent -prediluvial -prediphtheritic -prediplomatic -predisastrous -prediscontented -prediscountable -predisordered -predispositional -predistrustful -predivinable -predocumentary -predomestic -predominant -predorsal -predoubtful -predramatic -preearthly -preearthquake -preeconomic -preeconomical -preeditorial -preeducational -preeffective -preeffectual -preelective -preelectric -preelectrical -preelemental -preelementary -preeligible -preemergency -preeminent -preemotional -preemptive -preengineering -preenjoyable -preenvironmental -preepochal -preeruptive -preesophageal -preestival -preeternal -preevident -preevolutional -preevolutionary -preexact -preexceptional -preexclusive -preexistent -preexpeditionary -preexperimental -preexplanatory -preexpressive -preextensive -prefamiliar -prefamous -prefashioned -prefatory -prefavorable -prefearful -prefectorial -prefectural -preferable -preferential -preferrous -prefertile -prefeudal -prefigurative -prefinancial -prefixable -prefixal -preflagellate -preflagellated -preflood -preflowering -preforbidden -preformationary -prefraternal -prefriendly -prefrontal -prefunctional -prefuneral -pregame -preganglionic -pregastrular -pregenital -pregeological -preggers -preglacial -pregnable -pregnant -pregranitic -preharmonious -prehazard -prehemiplegic -prehensible -prehensile -prehexameral -prehistoric -preholiday -prehostile -prehuman -preimaginary -preimitative -preimperial -preimportant -preimpressive -preinaugural -preindebted -preindependent -preinductive -preindulgent -preindustrial -preinflectional -preinjurious -preinsinuative -preinstructional -preinstructive -preintellectual -preintelligent -preinterpretative -preintimate -preinvasive -preinventive -preirrigational -prejournalistic -prejudiceless -prejudiciable -prejudicial -prejunior -prejuvenile -prelabial -prelacteal -prelanguage -prelaryngoscopic -prelatic -prelawful -prelegal -prelegendary -prelegislative -prelexical -preliable -preliberal -preliminary -prelingual -preliterary -preliterate -prelithic -preludial -preludious -prelumbar -preluxurious -premandibular -premaniacal -premarital -prematerial -prematrimonial -premature -premaxillary -premed -premedical -premedieval -premeditative -premegalithic -premenstrual -premethodical -premilitary -premillennial -premodern -premolar -premonarchal -premonarchial -premonarchical -premonetary -premonitory -premonumental -premoral -premorbid -premorning -premorse -premortal -premortuary -premorula -premosaic -premundane -premunicipal -premusical -premycotic -premythical -prenarcotic -prenarial -prenasal -prenatal -prenational -prenatural -prenaval -prenebular -preneglectful -prenegligent -preneolithic -prenephritic -preneural -preneuralgic -prenominal -prenominate -prenuptial -prenursery -preobedient -preobjective -preobservational -preobtainable -preobtrusive -preobvious -preoccasioned -preoccipital -preoccupied -preoceanic -preocular -preodorous -preoesophageal -preoffensive -preofficial -preopposed -preoptic -preoptimistic -preoral -preorbital -preorganic -preoriginal -preornamental -preotic -prepalaeolithic -prepalatal -prepalatine -prepaleolithic -preparative -preparatory -prepared -preparliamentary -preparoxysmal -prepartisan -prepatrician -prepectoral -prepense -preperitoneal -prepersuasive -preperusal -prephthisical -prepigmental -prepineal -prepious -prepituitary -preplacental -prepoetic -prepoetical -prepolice -prepolitic -prepolitical -preponderant -prepositional -prepositive -prepossessing -prepossessionary -preposterous -prepotent -prepractical -preprandial -prepreference -preprimary -preprimitive -preprophetic -preprostatic -preprudent -prepsychological -prepueblo -prepunctual -prepurposive -preputial -prepyloric -preracing -preradio -prerailroad -prerailway -prerational -preready -prerebellion -prerectal -prereform -prereformation -prereformatory -preregal -prereligious -prerenal -prerepublican -prerequisite -prerespectable -preresponsible -prerestoration -prerevolutionary -prerheumatic -prerighteous -preromantic -preroyal -presacral -presacrificial -presageful -presanguine -presanitary -presartorial -presatisfactory -presavage -presbyteral -presbyterial -presbyterian -prescholastic -preschool -prescient -prescientific -prescout -prescribable -prescriptible -prescriptive -preseasonal -presecular -presedentary -presemilunar -preseminal -preseminary -present -presentable -presentational -presentative -presentient -presentimental -presentive -preseptal -preservable -preshown -preshrunk -presidial -presidiary -preslavery -presocial -presolar -presophomore -prespecific -presphenoid -prespinal -prespiracular -pressable -pressing -pressor -pressureless -prest -prestatistical -presteam -prestidigitatory -prestigious -prestricken -prestubborn -prestudious -presubsistent -presubstantial -presuccessful -presufficient -presuggestive -presuitable -presumable -presumptive -presumptuous -presupplemental -presupplementary -presuppurative -presurgery -presurgical -presusceptible -presuspicious -presutural -presymphonic -presymphysial -presymptomatic -presynsacral -presystematic -presystolic -pretangible -pretechnical -pretelegraph -pretelegraphic -pretelephone -pretelephonic -pretemperate -pretenceful -pretenceless -pretended -pretenseful -pretenseless -pretensive -pretentative -pretentious -preterhuman -preteritive -preterlegal -preterminal -preternatural -preterrestrial -preterritorial -pretheological -prethoracic -prethyroid -pretibial -pretimely -pretonic -pretorial -pretorian -pretracheal -pretraditional -pretribal -pretrochal -prettied -prettier -prettiest -pretty -prettying -prettyish -pretympanic -pretyphoid -pretypographical -pretyrannical -preumbonal -preunion -preutilizable -prevailing -prevalent -prevalid -prevenient -preventive -preventral -preverbal -prevertebral -previctorious -previgilant -previous -previsible -previsional -prevocalic -prevocational -prevolitional -prewar -prewilling -prewireless -preworldly -preworthy -preyouthful -prezygomatic -priapic -priapismic -priceable -priceless -pricey -pricklier -prickliest -prickly -prideful -prideless -priestless -priestlier -priestliest -priestlike -priestly -prim -primaeval -primal -primary -primatal -primatial -prime -primeval -primigenial -primitive -primitivistic -primogenial -primogenital -primogenitary -primordial -primsie -primulaceous -princeless -princelier -princeliest -princely -princesslike -principal -principled -printable -printanier -printerlike -printless -prior -prismatic -prisonlike -prissy -pristine -prius -private -privative -privier -privies -priviest -privileged -privy -proabolition -proabsolutism -proabsolutist -proabstinence -proacademic -proacceptance -proacquisition -proacquittal -proacting -proaction -proadjournment -proadministration -proadmission -proadoption -proadvertising -proadvertizing -proagitation -proagrarian -proagreement -proairplane -proalien -proalliance -proallotment -proalteration -proamateur -proamendment -proanarchic -proanarchy -proannexation -proapostolic -proappointment -proapportionment -proappropriation -proapproval -proarbitration -proaristocracy -proaristocratic -proarmy -proart -proassessment -proassociation -proatheism -proattack -proattendance -proauction -proaudience -proauthor -proautomation -probable -probanishment -probankruptcy -probargaining -probaseball -probasketball -probative -probeable -problematic -problockade -proboscidean -proboscidiform -proboxing -proboycott -probusiness -procambial -procapitalism -proceleusmatic -procellous -procensorship -procensure -procentralization -procephalic -processional -procharity -prochurch -procity -procivic -procivilian -proclassical -proclergy -proclerical -proclitic -procoercion -procollectivist -procollectivistic -procollegiate -procolonial -procomedy -procommercial -procommunist -procommunity -procommutation -procompensation -procompetition -procompromise -proconcession -proconciliation -proconfiscation -proconscription -proconservation -proconservationist -proconsolidation -proconstitutional -proconsultation -procontinuation -proconvention -proconviction -procrastinative -procrastinatory -procreative -procryptic -proctodaeal -proctodeal -proctologic -proctological -proctoscopic -procumbent -procurable -procuratorial -prodemocracy -prodemocrat -prodemocratic -prodeportation -prodigal -prodigious -prodisarmament -prodissolution -prodistribution -prodivision -prodivorce -prodromal -productile -productional -productive -proeducation -proelectrification -proelimination -proemial -proempire -proemployee -proemployer -proemployment -proenforcement -proenlargement -proequality -proevolution -proevolutionary -proevolutionist -proexecutive -proexperiment -proexperimentation -proexpert -proextension -profaculty -profanatory -profane -profarmer -profascist -profederation -professed -professional -proficient -profiction -profitable -profligate -profluent -proforeign -profound -profuse -profusive -progambling -progenitive -progenitorial -progestational -proglottic -proglottidean -prognathous -prognostic -prognosticable -programmable -programmatic -progravid -progressional -progressive -prohibitionary -prohibitive -prohibitory -proimmigration -proincrease -proindustrial -proindustrialisation -proindustrialization -proindustry -proinsurance -prointegration -prointervention -proinvestment -proirrigation -projectable -projectional -projective -prolabor -prolate -proleptic -proleptical -proletarian -proletary -proliferative -proliferous -prolific -prolificacy -prolix -prologlike -prologuelike -promarriage -promerger -promilitarism -promilitarist -promilitary -prominent -prominority -promisable -promiscuous -promiseful -promising -promissory -promoderation -promoderationist -promodern -promodernist -promodernistic -promonarchy -promonopolistic -promonopoly -promotional -promotive -prompt -promycelial -pronational -pronationalist -pronationalistic -pronative -pronaval -pronavy -prone -pronegotiation -pronephric -pronominal -pronounceable -pronounced -pronunciational -pronunciative -pronunciatory -propagable -propagational -propagative -propagatory -propanedioic -proparoxytone -proparoxytonic -propatriotic -propatronage -propayment -propellent -propenyl -propenylic -proper -propertied -prophesiable -prophetic -prophylactic -propionic -propitiable -propitiative -propitiatory -propitious -propless -propolitics -proportionable -proportional -proportionate -proportioned -proportionless -proposable -propositional -propraetorial -propraetorian -propretorial -propretorian -proprietary -proprietorial -proprivilege -proprofit -proptosed -propublication -propublicity -propunishment -propylic -proracing -prorailroad -prorealist -prorealistic -prorebel -proreconciliation -proreduction -proreform -prorefugee -prorepublican -proresearch -proresignation -prorestoration -prorestriction -prorevision -prorevolution -prorevolutionary -prorevolutionist -proritual -proromantic -prosaic -proscholastic -proscience -proscientific -proscribable -prosecrecy -prosecutable -proselike -prosely -proselytical -proselytistic -prosenchymatous -proslave -prosodemic -prosodic -prosodical -prospective -prospectless -prosperous -prossy -prosternal -prosthionic -prostomial -prostomiate -prostrate -prostrative -prostyle -prosubscription -prosubstitution -prosuffrage -prosupervision -prosupport -prosurgical -prosurrender -prosy -protandrous -protanomalous -protanopic -protariff -protax -protaxation -protean -protecting -protectional -protective -protectoral -protectorless -proteiform -proteinaceous -proteinic -proteinous -proteolytic -proterandrous -proterogynous -protestable -protestive -prothallium -prothalloid -prothetic -prothoracic -protistan -protistic -protogynous -protolithic -protomorphic -protonemal -protonematal -protonematoid -protonic -protopathic -protoplasmal -protoplasmatic -protoplasmic -protopoditic -protostelic -prototherian -prototrophic -prototypal -prototypic -prototypical -protozoal -protozoological -protozoonal -protozoulogical -protractible -protractile -protractive -protrade -protradition -protraditional -protragedy -protrudable -protrudent -protrusible -protrusile -protrusive -protuberant -protuberantial -proud -prouniformity -prounion -prounionist -prouniversity -provable -provaccination -provaccine -proventricular -proverbial -proverblike -providable -provident -providential -provincial -provisional -provisionless -provisory -provocational -provocative -prowar -prowed -prowessed -proximal -proximate -prudent -prudential -prudish -pruinose -prunable -prunted -prurient -pruriginous -pruritic -prying -psalmic -psalterial -psammead -psammophytic -psephological -pseudisodomic -pseudo -pseudoacademic -pseudoaccidental -pseudoaesthetic -pseudoaffectionate -pseudoaggressive -pseudoallegoristic -pseudoalveolar -pseudoamateurish -pseudoamatorial -pseudoamatory -pseudoambidextrous -pseudoameboid -pseudoanachronistic -pseudoanachronistical -pseudoanaphylactic -pseudoanarchistic -pseudoanatomic -pseudoanatomical -pseudoancestral -pseudoanemic -pseudoangelic -pseudoangelical -pseudoangular -pseudoanthropoid -pseudoanthropological -pseudoantique -pseudoapologetic -pseudoapoplectic -pseudoapoplectical -pseudoapplicative -pseudoapprehensive -pseudoaquatic -pseudoarchaic -pseudoaristocratic -pseudoaristocratical -pseudoarticulate -pseudoartistic -pseudoascetic -pseudoascetical -pseudoassertive -pseudoassociational -pseudoasymmetric -pseudoasymmetrical -pseudobankrupt -pseudobaptismal -pseudobenefactory -pseudobenevolent -pseudobiographic -pseudobiographical -pseudobiological -pseudobrachial -pseudocandid -pseudocaptive -pseudocarpous -pseudocartilaginous -pseudocentric -pseudocharitable -pseudochemical -pseudochylous -pseudoclerical -pseudocoelomate -pseudocollegiate -pseudocolumellar -pseudocommissural -pseudocompetitive -pseudoconfessional -pseudoconglomerate -pseudoconservative -pseudocorneous -pseudocotyledonal -pseudocotyledonary -pseudocourteous -pseudocritical -pseudocrystalline -pseudocubic -pseudocubical -pseudocultivated -pseudocultural -pseudodemocratic -pseudodiastolic -pseudodiphtherial -pseudodiphtheric -pseudodiphtheritic -pseudodivine -pseudodramatic -pseudoeconomical -pseudoeditorial -pseudoeducational -pseudoelectoral -pseudoembryonic -pseudoemotional -pseudoencephalitic -pseudoenthusiastic -pseudoepiscopal -pseudoequalitarian -pseudoerotic -pseudoerysipelatous -pseudoethical -pseudoetymological -pseudoevangelic -pseudoevangelical -pseudoexperimental -pseudofaithful -pseudofamous -pseudofeminine -pseudofeverish -pseudofinal -pseudogaseous -pseudogeneral -pseudogeneric -pseudogenerical -pseudogenteel -pseudogyrate -pseudohemal -pseudohermaphroditic -pseudoheroic -pseudoheroical -pseudohexagonal -pseudohistoric -pseudohistorical -pseudohuman -pseudohumanistic -pseudohypertrophic -pseudoidentical -pseudoimpartial -pseudoindependent -pseudoinsane -pseudoinspirational -pseudoinspiring -pseudointernational -pseudointernationalistic -pseudoinvalid -pseudoisometric -pseudolabial -pseudolaminated -pseudolateral -pseudolegal -pseudolegendary -pseudolegislative -pseudoliberal -pseudolinguistic -pseudoliterary -pseudolobar -pseudomasculine -pseudomedical -pseudomedieval -pseudomilitaristic -pseudomilitary -pseudoministerial -pseudomiraculous -pseudomodern -pseudomodest -pseudomonastic -pseudomonastical -pseudomonoclinic -pseudomonocyclic -pseudomoral -pseudomoralistic -pseudomorular -pseudomultilocular -pseudomultiseptate -pseudomythical -pseudonarcotic -pseudonational -pseudonoble -pseudonymous -pseudooccidental -pseudoofficial -pseudoorganic -pseudooriental -pseudoorthorhombic -pseudooval -pseudopagan -pseudopapal -pseudoparallel -pseudoparalytic -pseudoparasitic -pseudopatriotic -pseudopediform -pseudoperipteral -pseudopermanent -pseudophallic -pseudophilanthropic -pseudophilanthropical -pseudophilosophical -pseudopious -pseudopodal -pseudopoetic -pseudopoetical -pseudopolitic -pseudopolitical -pseudopopular -pseudoporphyritic -pseudopregnant -pseudopriestly -pseudoprimitive -pseudoprofessional -pseudoprofessorial -pseudoprophetic -pseudoprophetical -pseudoprosperous -pseudoprostyle -pseudopsychological -pseudopyriform -pseudorealistic -pseudoreformatory -pseudoreformed -pseudoregal -pseudoreligious -pseudorepublican -pseudoresident -pseudoresidential -pseudorheumatic -pseudorhombohedral -pseudoromantic -pseudoroyal -pseudosacred -pseudosacrilegious -pseudosatirical -pseudoscalar -pseudoscholarly -pseudoscholastic -pseudoscientific -pseudosemantic -pseudosensational -pseudoservile -pseudosessile -pseudosiphonal -pseudosiphonic -pseudoskeletal -pseudosocial -pseudosocialistic -pseudospectral -pseudospherical -pseudospiritual -pseudosquamate -pseudostalactitic -pseudostalagmitic -pseudostigmatic -pseudostudious -pseudosubtle -pseudosuicidal -pseudosymptomatic -pseudosyphilitic -pseudotetragonal -pseudotribal -pseudotripteral -pseudovarian -pseudovelar -pseudoviperine -pseudoviperous -pseudoviscous -pseudozealous -pseudozoogloeal -pseudozoological -psilanthropic -psilotic -psittacine -psittacistic -psoatic -psoriatic -psychasthenic -psychedelic -psychiatric -psychiatrical -psychic -psychoactive -psychoanalytic -psychoanalytical -psychobiologic -psychobiological -psychodelic -psychodiagnostic -psychogalvanic -psychogenetic -psychogenic -psychographic -psycholinguistic -psychological -psychometric -psychometrical -psychomotor -psychoneurotic -psychopathologic -psychopathological -psychopharmacologic -psychopharmacological -psychoprophylactic -psychosexual -psychosocial -psychosomatic -psychotherapeutic -psychotic -psychotomimetic -psychotropic -psychrometric -psychrometrical -psychrophilic -pteridological -pterocarpous -pterodactylic -pterodactylid -pterodactyloid -pterodactylous -pterygial -pterygoid -pterylographic -pterylographical -pterylological -ptomainic -ptotic -puberulent -pubescent -pubic -public -pucka -puckery -puddinglike -puddly -pudgy -puerile -puerperal -puffier -puffiest -puffy -puggish -puggy -pugilistic -pugilistical -pugnacious -puir -puisne -puissant -pukka -puling -pulleyless -pulmonary -pulmonate -pulmonic -pulpier -pulpiest -pulpital -pulpitless -pulpless -pulplike -pulpy -pulsatile -pulsatory -pulverable -pulverisable -pulverizable -pulverulent -pulverulently -pulvinate -punchable -punchier -punchiest -punchy -punctate -punctilious -punctual -punctuative -punditic -pungent -punier -puniest -punishable -punitive -puny -pupal -pupillary -pupilless -pupiparous -puppyish -puppylike -purblind -purchasable -pure -purebred -purehearted -purer -purest -purgatorial -purgeable -puriform -puristic -puristical -puritanical -purplish -purposeful -purposeless -purposive -purpuric -purseless -purselike -pursier -pursiest -pursuable -pursuant -pursy -purulent -puruloid -pushed -pushier -pushiest -pushing -pushy -pusillanimous -puslike -pusslike -pustulant -pustular -pustuled -pustulous -putaminous -putative -putrefiable -putrescent -putrescible -putrid -putrilaginous -pyaemic -pycnidial -pycnostyle -pyelitic -pyelographic -pyelonephritic -pyemic -pygmoid -pygmyish -pygostyled -pygostylous -pyic -pyknic -pyloric -pyogenic -pyoid -pyorrheal -pyorrheic -pyorrhoeal -pyorrhoeic -pyosepticemic -pyramidal -pyramidical -pyramidlike -pyrenocarpic -pyrenocarpous -pyretic -pyrheliometric -pyridic -pyriform -pyritic -pyrochemical -pyroclastic -pyrocrystalline -pyroelectric -pyrogallic -pyrogenic -pyrogenous -pyrographic -pyroligneous -pyrological -pyrolytic -pyromagnetic -pyromaniacal -pyromantic -pyrophoric -pyrosulfuric -pyrotechnic -pyroxenic -pyrrolic -pyruvic -pythogenic -quadrangled -quadrantal -quadrantlike -quadrennial -quadric -quadricipital -quadrifid -quadrilateral -quadrilingual -quadripartite -quadrivalent -quadrivial -quadrophonics -quadrumanous -quadrupedal -quadruplex -quadruplicate -quadruplication -quadruplicature -quaggier -quaggiest -quaggy -quaillike -quaint -quakier -quakiest -quaky -qualifiable -qualificatory -qualified -qualitative -qualityless -qualmish -quantal -quantifiable -quantitative -quantummechanical -quaquaversal -quarantinable -quare -quarrelsome -quarriable -quarryable -quartan -quartered -quarterly -quartermasterlike -quartic -quartus -quartziferous -quartzitic -quaternary -quaternate -quatrefoiled -quattuordecillionth -quaverous -quavery -queanish -queanlike -queasier -queasiest -queasy -queenless -queenlier -queenliest -queenlike -queenly -quellable -quenchable -quenchless -quercetic -quercine -querulous -questionable -questioning -questionless -questorial -quibbling -quick -quicksilvery -quiescent -quiet -quietistic -quilleted -quilted -quinary -quinate -quincuncial -quindecennial -quindecillionth -quinoidal -quinonoid -quinquefid -quinquefoliate -quinquennial -quinquepartite -quinquevalent -quinsied -quintan -quintessential -quintic -quintuplicate -quippish -quittable -quivery -quixotic -quizzable -quizzical -quodlibetic -quodlibetical -quondam -quotable -quotidian -rabbinical -rabbinistic -rabbinistical -rabbinitic -rabic -rabid -racemed -racemic -racemose -racemous -rachidial -rachidian -rachiform -rachitic -racial -racialistic -racier -raciest -racing -racketlike -rackety -rackle -racy -raddled -radiable -radial -radiant -radiational -radiative -radiatus -radical -radicant -radiculose -radioactive -radiobiologic -radiobiological -radiochemical -radiogenic -radiographic -radiographical -radioisotopic -radiological -radiolucent -radioluminescent -radiometric -radiopaque -radiophonic -radioscopic -radioscopical -radiosensitive -radiosymmetrical -radiotelegraphic -radiotelephonic -radiotoxic -radishlike -radular -raffish -rafflesiaceous -ragged -raggedy -ragtimey -railwayed -railwayless -rainbowlike -rainbowy -rainier -rainiest -rainless -rainproof -rainy -raisable -raiseable -raised -raisiny -rajasic -raked -rakish -rallentando -ralliform -ralline -ramal -rambunctious -ramentaceous -ramiform -ramlike -rammish -ramose -rampageous -rampant -ramshackle -ramstam -ramulose -ranchless -ranchlike -rancid -rancorous -randie -random -randy -ranged -rangier -rangiest -rangy -ranking -rankish -rankless -ranular -ranunculaceous -rapacious -rapid -rapiered -rapt -raptorial -raptureless -rapturous -rare -rarefactional -rarefactive -rarefiable -rarefied -rarer -rareripe -rarest -raring -rascallike -rascally -rash -rashlike -rasorial -raspier -raspiest -rasping -raspy -ratable -rateable -ratepaying -rath -rathe -rational -ratite -ratlike -rattier -rattiest -rattish -rattlebrained -rattleheaded -rattly -ratty -raucous -raunchy -ravelly -ravening -ravenous -raviney -raving -ravishing -raw -rawboned -rawish -rayless -razorless -reachable -reactionary -reactive -readable -readaptable -readaptive -readier -readjustable -readorning -ready -readying -real -realestate -realisable -realistic -realizable -realizing -realterable -reanalyzable -reanalyzed -reapable -reapproachable -rearmost -rearrangeable -rearward -reasonable -reasoned -reattachable -rebarbative -rebellike -rebellious -rebiddable -reblown -reboant -reborn -rebuffable -rebuttable -recalcitrant -recallable -recapitulative -recapitulatory -recappable -receivable -recent -receptive -receptual -recercelae -recessional -recessive -rechargeable -recherch -recidivistic -recidivous -reciprocal -reciprocative -reciprocatory -recitable -reckless -reckonable -reclaimable -reclinable -reclinate -reclivate -reclosable -recloseable -reclusive -recognisable -recognizable -recollected -recollective -recommendable -recommendatory -recompensable -recompensatory -reconcilable -reconciliatory -recondite -reconstituted -reconstructed -reconstructible -reconstructional -reconstructionary -reconstructive -recordable -recordless -recoupable -recoverable -recreant -recreational -recreative -recreatory -recriminative -recriminatory -recrudescent -recruitable -rectal -rectangular -rectilinear -rectricial -recumbent -recuperative -recurrent -recursive -recurvate -redactional -redder -reddest -reddish -redeemable -redeeming -redemandable -redemptional -redemptionless -redemptory -redhibitory -redintegrative -redissoluble -redistillable -redivivus -redolent -redoubtable -redoubted -redressable -redressible -reduced -reductional -reductive -redundant -reduplicative -reduplicatively -reedier -reediest -reedy -reeky -reeligible -reeligibly -reemergent -reentrant -refertilizable -refillable -refined -reflectible -reflective -reflexional -reflexive -refluent -reforgeable -reformable -reformative -reformed -refractable -refractional -refractive -refractometric -refractory -refracturable -refrangible -refreshful -refreshing -refrigerative -refrigeratory -refringent -refulgent -refundable -refusable -refutable -refutative -regainable -regal -regardable -regardant -regardful -regardless -regenerable -regenerative -regerminative -regicidal -regimental -regional -regionalistic -registerable -registered -registrable -registrational -regnal -regnant -regressive -regretable -regretful -regrettable -regulable -regular -regulative -reguline -rehabilitative -rehearsable -reincorporate -reinflatable -reissuable -reissuably -reiterant -reiterative -rejectable -rejective -rejoiceful -relapsable -relatable -related -relational -relationless -relative -relativistic -relaxative -relaxatory -relaxer -releasable -releasible -relegable -relentless -relevant -reliable -reliant -reliefless -relievable -religionistic -religiose -religious -relishable -relivable -relucent -reluctant -remanent -remarkable -remediable -remedial -remediless -remiform -remigial -remillable -remindful -reminiscent -remiss -remissible -remittable -remittent -remonstrative -remontant -remorseful -remorseless -remote -remoter -remotest -removable -removed -remunerable -remunerative -renal -renascent -renderable -rendible -renegotiable -reniform -renitent -renounceable -renovative -renowned -renownless -rentable -renunciable -renunciative -renunciatory -renversa -reobtainable -repairable -repand -reparable -reparative -repayable -repealable -repeatable -repeated -repellent -repentant -repetitious -repetitive -replete -repletive -reportable -reportorial -reposeful -repouss -repoussa -reprehendable -reprehensible -representational -representationalistic -repressible -repressive -reproachable -reproachful -reproachless -reprobate -reprobationary -reprobative -reprocessed -reproducible -reproductive -reproofless -reprovable -reptant -reptilelike -reptilian -reptiloid -republican -republishable -repudiatory -repugnant -repulsive -repunishable -repurchase -reputable -reputationless -reputed -requisite -requisitionary -requitable -resalable -rescissible -rescissory -resealable -resectional -resedaceous -resemblant -resentful -reservable -reserved -reserveless -residential -residentiary -residual -residuary -resigned -resilient -resiniferous -resinoid -resinous -resistant -resistible -resistive -resistless -resoluble -resolute -resolutive -resolvable -resolved -resolvent -resonant -resorbent -resorptive -resourceful -respectable -respectful -respective -respirable -respirational -resplendent -responseless -responsible -responsive -restful -restiform -resting -restitutive -restitutory -restive -restless -restorable -restorative -restrainable -restricted -restrictive -resultant -resumable -resummonable -resumptive -resupinate -resupine -resurgent -resurrectional -resurrectionary -resurrective -resuscitable -resuscitative -retaliative -retaliatory -retardative -retarded -retentive -retial -retiary -reticent -reticular -reticulate -reticuloendothelial -retiform -retinued -retiring -retouchable -retractable -retractible -retractile -retral -retreatal -retreative -retributive -retrievable -retroactive -retrobulbar -retrocessive -retrodirective -retroflex -retrogradatory -retrograde -retrogressive -retrolental -retrorse -retroserrate -retroserrulate -retrospective -retrouss -retroussa -retrusive -returnable -retuse -reunionistic -reunitable -reusable -reuseable -revealable -revelational -revelative -revelatory -revengeful -revengeless -revenual -revenued -reverable -reverberative -reverberatory -reverend -reverent -reverential -reversible -revertible -revertive -reveverberatory -revibrant -reviewable -reviewless -revisional -revisionary -revisitable -revisory -revivable -revivalistic -reviviscent -revocable -revocative -revolting -revolute -revolving -revulsionary -revulsive -rewarding -rewirable -rhagonoid -rhamnaceous -rhapsodic -rhapsodistic -rhematic -rheologic -rheological -rheometric -rheoscopic -rheostatic -rheotactic -rheotropic -rhetorical -rheumatic -rheumatoid -rheumic -rheumy -rhinal -rhinencephalic -rhinencephalous -rhinocerotic -rhinologic -rhinological -rhinoplastic -rhizocarpous -rhizocephalous -rhizogenic -rhizomatous -rhizomorphous -rhizophagous -rhizopodan -rhizopodous -rhodic -rhombic -rhombohedral -rhonchial -rhotacistic -rhotic -rhynchocephalian -rhythmic -rhythmical -riant -ribald -ribbonlike -ribbony -ribless -riblike -rich -rickettsial -rickety -ridable -rident -ridgelike -ridgepoled -ridgier -ridgiest -ridgy -ridiculous -rife -riftless -right -rightable -righteous -rightful -rightish -rightist -rightward -rigid -rigoristic -rigorous -rigouristic -riley -rimfire -rimless -rimose -rimy -rindless -rindy -ringed -ringent -ringless -ringleted -ringlike -riotistic -riotous -riparian -ripe -ripping -ripply -risible -riskier -riskiest -riskless -risky -risqu -rissola -ritardando -riteless -ritenuto -ritualistic -ritzier -ritziest -ritzy -riverine -riverless -riverlike -rivetless -roadless -roadworthy -roan -roaring -roastable -roasting -robeless -roborant -robotlike -robust -robustious -rockable -rockered -rockier -rockiest -rocky -rodded -rodless -rodlike -roentgenographic -roentgenologic -roentgenological -roentgenopaque -roentgenoscopic -rogatory -roguish -roilier -roiliest -roily -rollable -rollicking -rollicksome -rolling -rollneck -rolltop -roman -romantic -romanticistic -rompish -roofless -rooflike -rookier -rookiest -rooky -roomier -roomiest -roomy -rooted -rootless -rootlike -ropable -ropeable -ropier -ropiest -ropy -rosaceous -roseate -roseless -roselike -roseolar -rosiny -rostral -rosy -rotary -rotatable -rotational -rotative -rotatory -rotiferal -rotiferous -rotproof -rotten -rotund -rough -roughish -roughshod -round -rounded -roundheaded -rounding -roundish -roupet -roupy -rousing -rowable -rowdy -rowdyish -royal -royalistic -rubbery -rubbisy -rubblier -rubbliest -rubbly -rubeolar -rubescent -rubiaceous -rubicund -rubidic -rubied -rubify -rubiginous -rubious -rubricated -rudaceous -rudderless -rudderlike -ruddier -ruddiest -ruddy -rude -rudimentary -rudish -rueful -rufescent -ruffed -ruffled -rufflike -rufous -rugged -rugose -rugulose -ruinable -ruinous -rumbly -rumbustious -rumless -rumpless -runcinate -runed -runelike -runic -runnier -runniest -running -runny -runtgenographic -runtgenologic -runtgenological -runtgenoscopic -runtier -runtiest -runtish -runty -rupturable -rural -rushier -rushiest -rushy -russetish -russetlike -russety -rustic -rustier -rustiest -rustproof -rustred -rusty -rutaceous -ruthenic -ruthenious -ruthful -ruthless -rutilant -rutilated -ruttier -ruttiest -ruttish -rutty -sabbatical -saberlike -saboted -sabulous -saccharic -sacchariferous -saccharine -saccharofarinaceous -saccharoid -saccharolytic -saccharometric -saccharometrical -saccular -sacculate -sacerdotal -sachemic -sackclothed -sacklike -saclike -sacral -sacramental -sacrarial -sacred -sacrificeable -sacrificial -sacrilegious -sacroiliac -sacrosanct -sacrosciatic -sad -sadistic -safe -sagacious -sagittal -sagittate -said -sailorlike -sailorly -sainted -saintless -saintlier -saintliest -saintly -salaamlike -salable -salacious -salamanderlike -salamandrine -salaried -salaryless -saleable -salebrous -salic -salicaceous -salicylic -salient -saliferous -saline -sallow -sallowish -sallowy -salmonlike -salmonoid -salpiform -salpingian -salpingitic -saltant -saltato -saltatorial -saltatory -salted -saltier -saltigrade -saltish -saltless -saltwater -salty -salubrious -salutary -salutational -salutationless -salutatory -salvable -salvageable -salvational -salverform -samariform -same -sanative -sanatory -sanctified -sanctimonious -sanctionable -sanctionative -sanctionless -sanctuaried -sanded -sandier -sandiest -sandless -sandlike -sandpapery -sandy -sane -saner -sanest -sanguiferous -sanguinary -sanguine -sanguineous -sanguinolent -sanguivorous -sanidinic -sanious -sanitarian -sanitary -santalaceous -sapheaded -saphenous -sapid -sapient -sapiential -sapindaceous -saponaceous -saporific -saporous -sapotaceous -sappier -sappiest -sappy -sapremic -saprogenic -sapropelic -saprophagous -saprophytic -saprozoic -sarcastic -sarcoid -sarcolemmic -sarcolemmous -sarcological -sarcophagous -sarcous -sardonic -sarkless -sarky -sarmentose -saronic -sarraceniaceous -sartorial -sassier -sassy -satanic -satem -satiable -satinlike -satiny -satirical -satirisable -satisfactionless -satisfactory -satisfiable -satisfied -sattvic -saturable -saturated -saturnine -satyric -satyrical -satyrlike -sauceless -saucier -sauciest -saucy -sauncier -saunciest -sauncy -saurian -saurischian -sausagelike -saussuritic -sauta -savable -savage -saveable -saving -savorier -savoriest -savorless -savorous -savourier -savouriest -savourless -savourous -savoury -sawdustish -sawdusty -sawlike -saxicoline -saxicolous -saxifragaceous -saxophonic -sayable -scabbardless -scabbier -scabbiest -scabby -scabicide -scabietic -scabious -scablike -scabrous -scalable -scalariform -scalawaggy -scaldic -scaled -scalelike -scalene -scalenohedral -scalier -scaliest -scallawaggy -scalled -scalpless -scaly -scampish -scandent -scandic -scannable -scansorial -scant -scantier -scantiest -scanty -scaphocephalic -scaphocephalous -scaphoid -scapiform -scapose -scapular -scapulary -scapulohumeral -scarabaeiform -scarabaeoid -scarce -scarcer -scarcest -scarecrowish -scarecrowy -scarfless -scarflike -scarious -scarlatinoid -scarless -scary -scatheless -scathing -scatologic -scatological -scatophagous -scatterable -scatterbrained -scattershot -scatty -scenic -scenographic -scenographical -scentless -scepterless -sceptical -sceptral -schedular -schematic -schemeful -schemeless -scheming -scherzando -schismatic -schismless -schistose -schizo -schizocarpic -schizocarpous -schizogenetic -schizogenous -schizogonous -schizoid -schizomycetic -schizomycetous -schizophrenic -schizophyceous -schizophytic -schizothymic -schmaltzy -schmalzier -schmalziest -schmalzy -scholarless -scholastic -scholiastic -schoolboyish -schoolgirlish -schorlaceous -sciaenid -sciaenoid -sciatic -sciential -scientific -scientistic -scimitared -scincoid -scintillant -scirrhoid -scirrhous -scissile -scissorlike -sciurine -sciuroid -sclerenchymatous -scleritic -scleroblastic -sclerodermatous -scleroid -sclerometric -sclerophyllous -sclerosal -sclerosed -sclerotial -sclerotic -sclerotized -sclerotomic -sclerous -scoldable -scolopendrine -scombroid -scopate -scopeless -scopophilic -scoptophilic -scorbutic -scoreless -scoriaceous -scornful -scorpaenoid -scorpioid -scorpionic -scotomatous -scotopic -scoundrelly -scowlful -scraggly -scraggy -scrannel -scrapable -scrappier -scrappiest -scrappy -scratchable -scratchier -scratchiest -scratchless -scratchlike -scratchy -scrawlier -scrawliest -scrawly -scrawnier -scrawniest -scrawny -screaky -screeching -screwable -screwed -screwless -screwlike -screwy -scribal -scrimpier -scrimpiest -scrimpy -scripless -scriptural -scrobiculate -scroddled -scrofulous -scroggy -scrophulariaceous -scrotal -scrubbable -scrubbed -scrubbier -scrubbiest -scrubby -scruffier -scruffiest -scruffy -scrumptious -scrupleless -scrupulous -scrutable -sculpturesque -scumless -scumlike -scummier -scummiest -scummy -scungy -scurrile -scurrilous -scutate -scutcheonless -scutcheonlike -scutellate -scutelliform -scutiform -scyphate -scyphiform -scytheless -scythelike -seaborne -seafaring -seagirt -seagoing -sealable -seallike -seamanlike -seamier -seamiest -seamless -seamy -searchable -searching -searoving -seasick -seasonable -seasonal -seasonless -seatless -seaworthy -sebaceous -sebacic -sebiferous -seborrheal -seborrheic -sec -secernent -secessional -secluded -seclusive -second -secondary -secondsighted -secret -secretarial -secretionary -secretive -secretory -sectarian -sectile -sectional -sectoral -sectorial -secular -secularistic -secund -secundus -securable -secure -sedate -sedative -sedentary -sedged -sedimentary -sedimentologic -sedimentological -seditious -seduceable -seducible -seducive -seductive -sedulous -seeable -seedier -seediest -seedless -seedlike -seedy -seely -seeming -seemlier -seemliest -seemly -segmental -segmentary -segmentate -segreant -segregable -segregational -seigneurial -seignorial -seisable -seismic -seismographic -seismographical -seismologic -seismological -seismoscopic -seizable -sejant -selachian -selectable -selective -selenic -selenious -selenitic -selenitical -selenodont -selenographic -selenographical -selenotropic -selenous -selfish -selfishness -selfless -selfrestrained -selfsame -semantic -semaphoric -semaphorical -sematic -semblable -semeiologic -semeiological -semeiotic -semestral -semestrial -semiabsorbent -semiacademic -semiacademical -semiacetic -semiacid -semiacidic -semiacidified -semiacidulated -semiacrobatic -semiactive -semiadhesive -semiagricultural -semialcoholic -semiallegoric -semiallegorical -semialuminous -semianaesthetic -semianalytic -semianalytical -semianarchistic -semianatomic -semianatomical -semiandrogenous -semianesthetic -semiangular -semianimate -semianimated -semiannual -semianthropologic -semianthropological -semiaquatic -semiarchitectural -semiarid -semiarticulate -semiautomatic -semiautonomous -semibald -semibelted -semibiographic -semibiographical -semibiologic -semibiological -semiblasphemous -semibleached -semiboiled -semibold -semibouffant -semibourgeois -semibureaucratic -semicabalistic -semicabalistical -semicalcined -semicapitalistic -semicarbonate -semicaricatural -semicarved -semicatalytic -semicathartic -semicellulous -semicentenary -semicentennial -semichaotic -semichemical -semicircular -semicivilized -semiclassical -semiclerical -semiclinical -semiclosed -semicolloidal -semicolloquial -semicolonial -semicomatose -semicombined -semicomic -semicomical -semicommercial -semicommunicative -semiconcealed -semiconditioned -semiconical -semiconscious -semiconservative -semicontinuous -semiconventional -semiconvergence -semiconvergent -semicordate -semicrystalline -semicultivated -semicultured -semicured -semicylindric -semicylindrical -semicynical -semidaily -semidangerous -semideaf -semidecadent -semidecayed -semidefensive -semidefined -semidefinite -semidemented -semidependent -semidestructive -semidetached -semideterministic -semidiaphanous -semidictatorial -semidigested -semidirect -semidisabled -semidiurnal -semidivided -semidivine -semidivisive -semidomed -semidomestic -semidomesticated -semidormant -semidramatic -semidramatical -semidry -semiductile -semielastic -semielevated -semielliptic -semielliptical -semiemotional -semiempirical -semiepic -semiepical -semierect -semiexclusive -semiexecutive -semiexpanded -semiexpansible -semiexperimental -semiexposed -semiexpositive -semiexpository -semiexpressionistic -semiexternal -semiexternalized -semifictional -semifictionalized -semifigurative -semifine -semifinished -semifitted -semifixed -semifloating -semifluid -semiformal -semiformed -semifossilized -semifunctional -semifurnished -semifused -semifuturistic -semigeometric -semigeometrical -semiglazed -semiglobular -semigovernmental -semihard -semihardened -semiherbaceous -semiheretic -semiheretical -semihistoric -semihistorical -semihostile -semihumanistic -semihumanitarian -semihumanized -semihyperbolic -semihysterical -semiintoxicated -semijocular -semijudicial -semijuridic -semijuridical -semilegendary -semilegislative -semiliberal -semiliquid -semiliterate -semilucent -semiluminous -semilunar -semilunate -semilunated -semilyric -semilyrical -semimagical -semimagnetic -semimagnetical -semimalicious -semimalignant -semimanagerial -semimanneristic -semimanufactured -semimarine -semimat -semimaterialistic -semimathematical -semimature -semimechanical -semimechanistic -semimedicinal -semimembranous -semimetallic -semimetaphoric -semimetaphorical -semimild -semimineral -semimineralized -semiministerial -semimobile -semimoderate -semimonarchic -semimonarchical -semimonopolistic -semimonthly -semimoralistic -semimountainous -semimountainously -semimystic -semimystical -semimythic -semimythical -seminaked -seminal -seminarcotic -seminarial -seminarrative -seminasal -seminationalistic -seminationalized -seminervous -semineurotic -semineutral -seminiferous -seminivorous -seminocturnal -seminomadic -seminormal -seminude -semiobjective -semioblivious -semiofficial -semiopen -semioptimistic -semioratorical -semiorganic -semioriental -semiorthodox -semiotic -semioval -semiovate -semioviparous -semioxygenized -semipacifist -semipacifistic -semipaganish -semipalmate -semiparalysis -semiparalyzed -semiparasitic -semiparochial -semipassive -semipastoral -semipathologic -semipathological -semipatriotic -semipatterned -semipeaceful -semipedantic -semipedantical -semipendent -semipendulous -semiperceptive -semipermanent -semipermeable -semipervious -semipetrified -semiphenomenal -semiphilosophic -semiphilosophical -semiphosphorescent -semiphrenetic -semipictorial -semipious -semiplastic -semipneumatic -semipneumatical -semipoisonous -semipolitical -semipopular -semipopularized -semipostal -semipractical -semiprecious -semipreserved -semiprimitive -semiprivate -semipro -semiproductive -semiprofane -semiprofessional -semiprogressive -semiprone -semipropagandist -semiprotected -semiprotective -semiproven -semiprovincial -semipsychologic -semipsychological -semipsychotic -semipublic -semipunitive -semipunitory -semipurposive -semiradical -semirare -semirationalized -semiraw -semireactionary -semirealistic -semirebellious -semirefined -semireflexive -semireligious -semirepublican -semiresinous -semiresiny -semiresolute -semirespectable -semiretired -semireverberatory -semirevolutionary -semirhythmic -semirhythmical -semirigid -semirigorous -semiromantic -semiround -semirural -semisacred -semisaline -semisatiric -semisatirical -semisavage -semischolastic -semisecret -semisentimental -semisentimentalized -semiserious -semiskilled -semisocialistic -semisolemn -semisolid -semisomnambulistic -semisomnolent -semispeculative -semispheric -semispontaneous -semistiff -semistimulating -semistratified -semisubterranean -semisuburban -semisuccess -semisuccessful -semisupernatural -semisweet -semisynthetic -semitailored -semitextural -semitheatric -semitheatrical -semitheological -semitonic -semitraditional -semitrained -semitropical -semitruthful -semituberous -semiundressed -semiurban -semivitreous -semivocal -semivolatile -semivolcanic -semivoluntary -semivulcanized -semiweekly -semiwild -semiyearly -sempiternal -semplice -senary -senatorial -sendable -senescent -senile -senior -sensate -sensational -sensationistic -sensationless -senseless -sensible -sensitive -sensitometric -sensorimotor -sensory -sensual -sensualistic -sensuous -sententious -sentient -sentimental -sentimentless -sentinellike -sepaled -sepalled -sepaloid -separable -separative -separatory -septal -septarian -septariate -septate -septavalent -septempartite -septemviral -septenary -septendecillionth -septennial -septentrional -septic -septicaemic -septicemic -septicidal -septifragal -septilateral -septimal -septivalent -septuagenary -septuple -sepulchral -sequacious -sequent -sequential -sequestered -sequestrable -sequestral -sequined -seral -seraphic -seraphlike -sere -serene -serfish -serflike -seriate -sericate -sericeous -sericitic -sericultural -seriocomic -serious -serologic -serological -seromucous -seroresistant -serotinal -serotine -serous -serpentiform -serpentine -serpiginous -serrate -serried -serriform -serrulate -serumal -servable -servantless -servantlike -serviceable -servile -servo -servomechanical -sesamoid -sesquicentennial -sesquipedalian -sessile -sessional -setaceous -setal -setiform -setigerous -setose -settleable -setulose -sevenfold -seventeenth -seventh -seventieth -severable -severe -severer -severest -sewable -sewerless -sewerlike -sexagenary -sexagesimal -sexangular -sexavalent -sexcentenary -sexennial -sexier -sexiest -sexivalent -sexological -sexpartite -sextan -sextern -sextic -sextillionth -sextus -sexual -sexy -sforzando -shabbier -shabbiest -shabby -shadeful -shadeless -shadowed -shadowgraphic -shadowless -shadowlike -shadowy -shady -shaftless -shaftlike -shaggier -shaggiest -shaggy -shaglike -shakable -shakeable -shakier -shakiest -shaky -shalelike -shallow -shamanic -shamanistic -shamefaced -shameful -shameless -shantylike -shapable -shapeable -shaped -shapeless -shapelier -shapeliest -shapely -sharable -shareable -sharklike -sharp -shastraik -shastrik -shatterproof -shavable -shaven -shawlless -shawllike -sheaflike -sheared -shearless -sheathier -sheathiest -sheathlike -sheathy -shedable -sheddable -shedlike -sheenier -sheeniest -sheenless -sheepish -sheepless -sheeplike -sheer -sheetless -sheetlike -sheiklike -shelled -shellier -shelliest -shellproof -shellshocked -shelly -shelterless -shickered -shieldless -shieldlike -shier -shiest -shiftable -shiftier -shiftiest -shiftless -shifty -shill -shimmery -shingly -shinier -shiniest -shiny -shipless -shippable -shipshape -shirtless -shirty -shivery -shockheaded -shocking -shockproof -shoddy -shoeless -shogunal -shopsoiled -shopworn -shoreless -shoreward -short -shortheaded -shortish -shotten -showerless -showerlike -showerproof -showery -showier -showiest -showy -shredless -shredlike -shrewd -shrewish -shrewlike -shrieky -shrieval -shrill -shrimplike -shrineless -shrinelike -shrinkable -shroudless -shroudlike -shrubbier -shrubbiest -shrubby -shuddering -shunnable -shuttlelike -shy -shyer -shyest -sialagogic -sialoid -sibilant -sibilation -sibylic -sibyllic -sick -sickening -sicker -sicklemic -sicklied -sicklier -sickliest -sickly -sicklying -sideless -sidelong -sidereal -siderographic -siderostatic -siderotic -sidesplitting -sideward -siegeable -siest -sievelike -sighful -sighless -sighlike -sightable -sighted -sightless -sightlier -sightliest -sightly -sigilistic -sigillary -sigillate -sigmate -sigmoid -signatureless -significant -significative -silent -siliceous -silicic -silicious -silicotic -siliculose -silken -silkier -silkiest -silklike -silky -silly -siltier -siltiest -silty -silvan -silverish -silverless -silverlike -silvern -silvery -silvicolous -silvicultural -simaroubaceous -simian -similar -simious -simoniacal -simpatico -simple -simplex -simplicidentate -simplistic -simulacral -simulant -simulated -simulative -simulatory -simultaneous -sinal -sincere -sincipital -sinewless -sinewy -sinful -singable -single -singled -singling -singular -singultous -sinister -sinistral -sinistrocular -sinistrodextral -sinistrogyric -sinistrorse -sinistrous -sinkerless -sinless -sinlike -sinorespiratory -sinuate -sinuous -sinuslike -sinusoidal -siphonal -siphonic -siphonless -siphonlike -siphonophorous -sireless -sirenian -sirenic -sirenlike -sirupy -sissified -sissyish -sisterless -sisterlike -sisterly -sistroid -situational -sixfold -sixpenny -sixteenpenny -sixteenth -sixth -sixtieth -sixtypenny -sizable -sizeable -sized -sizier -siziest -sizy -skaldic -skateable -skeighish -skeletonless -skeletonlike -skeptical -sketchable -sketchlike -sketchy -skew -skewbald -skiable -skiagraphic -skiagraphical -skidproof -skiech -skiffless -skilful -skilled -skillful -skimpy -skinflinty -skinking -skinless -skinlike -skinned -skinnier -skinniest -skinny -skint -skintight -skirtless -skirtlike -skittish -skookum -skyborne -skyless -skylike -skyscraping -skyward -slabbery -slack -slaggier -slaggiest -slaggy -slakable -slakeable -slakeless -slangier -slangiest -slangy -slaphappy -slashing -slatier -slatiest -slatternly -slaty -slavish -slavocratic -sleazier -sleaziest -sleazy -sledlike -sleek -sleekier -sleekiest -sleekit -sleeky -sleepful -sleepier -sleepiest -sleepless -sleeplike -sleepy -sleetier -sleetiest -sleety -sleeveless -sleevelike -slender -sleuthlike -sliceable -slick -slickered -slickpaper -slidable -sliding -slier -sliest -slight -slighting -slim -slimier -slimiest -slimline -slimmer -slimming -slimsy -slimy -slinkier -slinkiest -slinky -slipless -slipover -slipperier -slipperiest -slipperlike -slippery -slippier -slippiest -slippy -slipshod -slithery -slitless -slitlike -sliverlike -slobbery -sloppier -sloppiest -sloppy -sloshed -sloshier -sloshiest -sloshy -slothful -slouchier -slouchiest -slouchy -sloughy -slovenlier -slovenliest -slovenly -slow -sludgier -sludgiest -sludgy -sluggish -sluglike -sluicelike -slumberless -slumberous -slummier -slummiest -slummy -slung -slurvian -slushier -slushiest -slushy -sluttish -slutty -sly -smacking -small -smallish -smaragdine -smarmy -smart -smartish -smarty -smashable -smashed -smashing -smearier -smeariest -smeary -smectic -smeeky -smellable -smellier -smelliest -smelly -smilacaceous -smileless -smirchless -smocklike -smokeless -smokelike -smokeproof -smokier -smokiest -smoky -smooth -smoothable -smorzando -smotherable -smothery -smudgeless -smug -smugger -smuggest -smutchier -smutchiest -smutchless -smutchy -smuttier -smuttiest -smutty -snaggy -snaglike -snaillike -snakelike -snakier -snakiest -snaky -snapless -snappable -snappier -snappiest -snappy -snareless -snarly -snatchable -snatchier -snatchiest -snatchy -snazzier -snazziest -snazzy -sneakier -sneakiest -sneaking -sneaky -snecked -sneerful -sneerless -snide -snider -snidest -sniffier -sniffiest -sniffish -sniffy -snipelike -snippier -snippiest -snippy -snitchier -snitchiest -snitchy -snively -snobbish -snod -snoopier -snoopiest -snoopy -snootier -snootiest -snooty -snoozy -snotty -snouted -snoutless -snoutlike -snowbound -snowcapped -snowier -snowiest -snowless -snowlike -snowy -snubbier -snubbiest -snubby -snuffier -snuffiest -snuffly -snuffy -snug -snugger -snugging -soapier -soapiest -soapless -soaplike -soapsudsy -soapy -soarable -soaring -sober -sobersided -sobriquetical -sociable -social -socialistic -societal -socioeconomic -sociogenetic -sociogenic -sociologistic -sociopathic -sociopolitical -sociopsychological -socketless -sockless -socko -sodaless -sodden -sodless -soft -softhearted -softish -soggy -soign -soigna -sola -solanaceous -solar -soldierly -sole -soleless -solemn -solenoidal -solfataric -soli -solicitous -solid -solidary -solidifiable -solidillu -solidungulate -solitary -solitudinous -soloistic -solstitial -soluble -solus -solutional -solutus -solvable -solvent -solvolytic -somatic -somatogenic -somatologic -somatological -somatopleural -somatopleuric -somatotonic -somber -sombre -sombrous -somnambulant -somnambulistic -somnifacient -somniferous -somnific -somniloquous -somnolent -sonant -sonantal -songful -songless -songlike -sonic -soniferous -sonless -sonlike -sonorous -sonsy -soony -soothfast -sooty -sophistic -sophisticated -sophomoric -soporiferous -soporific -soppier -soppiest -sopping -soppy -sorbefacient -sorbic -sorcerous -sordid -sore -sorediate -sorer -sorest -soricine -soritic -soritical -sorrier -sorriest -sorrowless -sorry -sortable -sortilegic -sostenuto -sotted -sottish -sottishness -soubrettish -souffla -soughless -soulful -soulless -soullike -soundable -sounding -soundless -soundproof -soupier -soupiest -soupless -souplike -soupy -sour -sourceful -sourceless -sourdough -sourish -soutenu -southbound -southeasterly -southeastern -southeastward -southeastwardly -southerly -southern -southernly -southernmost -southmost -southward -southwesterly -southwestern -southwestward -southwestwardly -sowlike -sozzled -spaceless -spacial -spacious -spadelike -spadiceous -spagyric -spanaemic -spanemic -spangly -spareable -sparing -sparkish -sparkless -sparklike -sparlike -sparoid -sparrowless -sparrowlike -sparry -sparse -sparser -sparsest -spasmodic -spasmolytic -spasmophilic -spastic -spathaceous -spathic -spathose -spathulate -spatial -spatiotemporal -spatterdashed -spatulate -spaviet -spavined -speakable -speaking -special -specialistic -specifiable -specific -specificative -specious -speckless -spectacled -spectacleless -spectaclelike -spectacular -spectatorial -spectral -spectrochemical -spectrographic -spectroheliographic -spectrohelioscopic -spectrological -spectrometric -spectrophotometric -spectroscopic -spectroscopical -specular -speculative -speechless -speedful -speedier -speediest -speedless -speedy -spelaean -spellable -spellbound -spendable -spermacetilike -spermatic -spermatocytal -spermatogonial -spermatoid -spermatophoral -spermatozoal -spermatozoan -spermatozoic -spermic -spermophytic -spermous -sphagnous -sphenic -sphenographic -sphenoid -spheral -sphereless -spherelike -spherical -spheroidal -spherular -spherulate -spherulitic -sphery -sphincteral -sphincterial -sphingine -sphinxian -sphinxlike -sphygmic -sphygmographic -sphygmoid -sphygmomanometric -spicate -spiceable -spiceless -spicelike -spicey -spicier -spiciest -spiculate -spicy -spidery -spiffier -spiffiest -spiffing -spiffy -spiflicated -spikelike -spikier -spikiest -spiky -spinaceous -spinachlike -spinal -spindlelike -spindlier -spindliest -spindling -spindly -spined -spineless -spinelike -spinescent -spinier -spiniest -spiniferous -spinnable -spinose -spinous -spinproof -spinulose -spiny -spiracular -spiral -spirant -spirantal -spired -spireless -spiriferous -spirillar -spirited -spiritistic -spiritless -spiritlike -spiritous -spiritual -spiritualistic -spirituel -spirituous -spirochaetotic -spirochetotic -spirographic -spiroid -spirometric -spirometrical -spiry -spissatus -spissus -spiteful -spiteless -splanchnic -splanchnologic -splashier -splashiest -splashy -splay -spleenful -spleenier -spleeniest -spleenish -spleeny -splendent -splendid -splendiferous -splendorous -splendrous -splenetic -splenial -splenic -spliceable -splinterless -splintery -splittable -splitting -splurgy -spoilable -spoilless -spokeless -spondaic -spondylitic -spongeless -spongelike -spongier -spongiest -spongioblastic -spongy -spontaneous -spookier -spookiest -spooky -spoollike -spoonier -spooniest -spoonless -spoonlike -spoony -sporadic -sporal -sporangial -sporocystic -sporogenous -sporogonial -sporoid -sporophoric -sporophyllary -sporophytic -sporotrichotic -sportful -sportier -sportiest -sporting -sportive -sportless -sportsmanlike -sportsmanly -sporty -sporular -spotless -spotlike -spottable -spotted -spotty -spouseless -spouted -spoutless -spoutlike -sprayful -sprayless -spraylike -spreathed -sprier -spriest -spriggier -spriggiest -spriggy -sprightful -sprightlier -sprightliest -sprightly -springier -springiest -springless -springlike -springy -spriteless -spritelike -sprucer -sprucing -spry -spryer -spryest -spumescent -spunkier -spunkiest -spunkless -spunky -spurious -spurless -spurlike -spurred -spurtive -squabbier -squabbiest -squabby -squalid -squallier -squalliest -squally -squamate -squamous -squamulose -squarable -squarelike -squaretoed -squarish -squarrose -squashier -squashiest -squashy -squeakier -squeakiest -squeaky -squeamish -squiffy -squiggly -squinty -squirarchal -squirarchical -squirearchal -squirearchical -squireless -squirelike -squirmier -squirmiest -squirmy -squirrelish -squirrellike -squirrelly -squishier -squishiest -squishy -squshier -squshiest -squshy -staccato -stacked -stackless -stageable -staged -stagey -stagier -stagiest -staglike -stagnant -stagnatory -stagy -staid -stainable -stainful -stainless -stairless -stairlike -stalactiform -stalagmitic -stalagmitical -stalagmometric -stale -stalkable -stalked -stalkless -stalky -stalwart -stalworth -staminal -staminate -staminiferous -stampedable -stanchable -standardizable -standoffish -stannic -stanniferous -stannous -stanzaed -stapedial -staphylomatic -staphyloplastic -staphylorrhaphic -starchless -starchlike -starchy -stark -starless -starlike -starred -starrier -starriest -starry -stasimetric -statable -statant -stateable -stated -stateless -statelier -stateliest -stately -stateside -statesmanlike -statesmanly -statewide -static -stational -stationary -statistical -stative -statolithic -statued -statueless -statuelike -statuesque -statutable -statutory -staumrel -staunch -staurolitic -stavable -staveable -stayable -steadfast -steadier -steadiest -steady -stealable -stealthful -stealthier -stealthiest -stealthless -stealthy -steamerless -steamier -steamiest -steamless -steamtight -steamy -stearic -steatitic -steatopygic -stedfast -steedless -steedlike -steelless -steellike -steep -steepled -steepleless -steeplelike -stelar -stellar -stellate -stelliferous -stelliform -stellular -stemless -stemlike -stemmed -stenchful -stenochoric -stenographic -stenographical -stenohaline -stenopeic -stenopetalous -stenophagous -stenophyllous -stenosed -stenothermal -stenothermophilic -stenotopic -stenotropic -stenotypic -stentorian -stepless -steplike -stepwise -stercoraceous -stercoricolous -sterculiaceous -stereo -stereobatic -stereochromatic -stereochromic -stereognostic -stereographic -stereographical -stereoisomeric -stereophonic -stereoptican -stereoscopic -stereospecific -stereotactic -stereotomic -stereotomical -stereotyped -steric -sterigmatic -sterile -sterilisable -sterilizable -stern -sternal -sternitic -sternmost -sternocleidomastoid -sternutatory -stertorous -stethoscoped -stethoscopic -stewed -stey -sthenic -stibial -stichometric -stichometrical -stichomythic -stickable -sticket -stickier -stickiest -stickit -stickless -sticklike -sticky -stiff -stiffish -stifling -stigmatic -still -stillborn -stilliform -stilted -stimulable -stimulative -stingless -stingy -stinking -stinko -stintless -stipellate -stipendiary -stipendless -stipitate -stipitiform -stipular -stipulatory -stipuliform -stirless -stirpicultural -stirrable -stirring -stirrupless -stirruplike -stitchlike -stochastic -stockier -stockiest -stockinged -stockingless -stockish -stockless -stocklike -stocky -stodgier -stodgiest -stodgy -stoical -stoichiometric -stolid -stolidity -stolonate -stoloniferous -stomachic -stomachy -stomatal -stomatic -stomatitic -stomatologic -stomatological -stomatous -stomodaeal -stonable -stoneable -stoned -stoneground -stoneless -stonelike -stoney -stonier -stoniest -stonkered -stony -stopless -stoppable -stopped -stopperless -storable -storeyed -storiated -storied -storklike -stormbound -stormier -stormiest -stormless -stormlike -stormproof -stormy -stoss -stotious -stout -stouthearted -stoutish -straight -straightforward -strained -strainless -straked -strange -strangerlike -strangest -strangulable -strangulative -strangulatory -strapless -straplike -strappable -strapped -strapping -stratagemical -stratal -strategic -straticulate -stratiform -stratiformis -stratocratic -stratospheric -stratospherical -stratous -straucht -strawhat -strawless -strawlike -streakier -streakiest -streaklike -streaky -streamier -streamiest -streamless -streamlike -streamlined -streamy -streetless -streetlike -strenuous -strepitous -streptococcal -stressful -stretchable -stretchier -stretchiest -stretchy -striate -stricken -strict -strident -stridulatory -stridulous -strifeful -strifeless -strigiform -strigilate -strigose -strikebound -striking -stringed -stringendo -stringent -stringhalted -stringhalty -stringless -stringlike -stringy -striped -stripeless -stripier -stripiest -stripy -strobic -strobilaceous -strobiloid -stroboscopic -stroboscopical -stromal -stromateoid -stromatic -stromatous -strong -strongish -strophic -stroppy -structural -structureless -strumpetlike -struthious -strutting -strychnic -stubbled -stubbly -stubborn -stubby -studentless -studentlike -studiable -studied -studious -stuffed -stuffy -stumpier -stumpiest -stumpless -stumplike -stumpy -stunning -stunty -stupefactive -stupendous -stupid -stuporous -sturdied -sturdier -sturdiest -sturdy -sturty -stylar -styleless -styliform -stylish -stylistic -stylitic -stylographic -stylohyoid -styloid -stylolitic -styptic -styracaceous -suable -suasory -suave -subabsolute -subacademic -subacademical -subacetabular -subacid -subacidulous -subacrid -subacrodrome -subacrodromous -subacromial -subacuminate -subacute -subadditive -subadjacent -subadministrative -subadult -subaerial -subaffluent -subaggregate -subaggregative -subalary -subalate -subalated -subalgebraic -subalgebraical -subalpine -subalternate -subanal -subanconeal -subangular -subangulate -subangulated -subantarctic -subantique -subapostolic -subapparent -subappressed -subapprobative -subapprobatory -subaqua -subaquatic -subaqueous -subarachnoid -subarboreal -subarboreous -subarborescent -subarchesporial -subarctic -subarcuate -subarcuated -subareal -subarid -subartesian -subarticulate -subarticulative -subarytenoid -subarytenoidal -subascending -subassociational -subassociative -subastragalar -subastral -subastringent -subatomic -subattenuate -subattenuated -subaudible -subaural -subauricular -subauriculate -subautomatic -subaverage -subaxial -subaxile -subaxillary -subbasal -subbasaltic -subbranchial -subbronchial -subcaecal -subcalcareous -subcaliber -subcalibre -subcallosal -subcampanulate -subcancellate -subcancellous -subcandid -subcapsular -subcarbonaceous -subcardinal -subcarinate -subcarinated -subcartilaginous -subcelestial -subcerebellar -subcerebral -subcheliform -subchondral -subchorioid -subchorioidal -subchorionic -subchoroid -subchoroidal -subchronic -subchronical -subcircular -subcircularity -subcivilized -subclausal -subclavate -subclavian -subclavicular -subclimatic -subclinical -subcollegial -subcollegiate -subcolumnar -subcommendatory -subcommended -subcommissarial -subcompensational -subcompensative -subcompensatory -subcomplete -subcompressed -subconcave -subconcealed -subconcessionary -subconchoidal -subconferential -subconformable -subconic -subconical -subconjunctival -subconjunctive -subconnate -subconnivent -subconscious -subconsular -subcontained -subcontiguous -subcontinental -subcontrary -subconvex -subconvolute -subcoracoid -subcordate -subcordiform -subcoriaceous -subcorneous -subcornual -subcortical -subcorymbose -subcostal -subcranial -subcreative -subcrenate -subcrenated -subcrescentic -subcriminal -subcritical -subcruciform -subcrystalline -subcubic -subcubical -subcuboid -subcuboidal -subcultrate -subcultrated -subcultural -subcuneus -subcuratorial -subcutaneous -subcuticular -subcyaneous -subcylindric -subcylindrical -subdeducible -subdeltaic -subdeltoid -subdeltoidal -subdendroid -subdendroidal -subdentate -subdentated -subdenticulate -subdenticulated -subdepartmental -subdepressed -subdermal -subdermic -subdiaconal -subdialectal -subdiapasonic -subdiaphragmatic -subdilated -subdiscoid -subdiscoidal -subdistichous -subdistinctive -subdivine -subdolichocephalic -subdolichocephalous -subdorsal -subduable -subdued -subectodermal -subectodermic -subeffective -subelemental -subelliptic -subelliptical -subelongate -subelongated -subemarginate -subemarginated -subendocardial -subendothelial -subentire -subepiglottal -subepiglottic -subepithelial -subequal -subequatorial -subequilateral -suberect -subereous -suberic -subesophageal -subessential -subestuarine -subevergreen -subextensible -subexternal -subfalcate -subfalcial -subfalciform -subfascial -subfastigiate -subfastigiated -subfebrile -subfestive -subfibrous -subflexuose -subflexuous -subfoliar -subfoliate -subformative -subfossorial -subfractional -subfractionary -subfreezing -subfrontal -subfulgent -subfunctional -subfusc -subfusiform -subganoid -subgelatinoid -subgelatinous -subgeneric -subgeniculate -subgenital -subgeometric -subgeometrical -subgerminal -subglabrous -subglacial -subglenoid -subgloboid -subglobose -subglobous -subglobular -subglossal -subglottal -subglottic -subglumaceous -subgranular -subgular -subhedral -subhemispheric -subhemispherical -subhepatic -subhexagonal -subhirsute -subhooked -subhorizontal -subhuman -subhumeral -subhumid -subhyalin -subhyaline -subhyaloid -subhymenial -subhyoid -subhyoidean -subicteric -subicterical -subimbricate -subimbricated -subimbricative -subimposed -subimpressed -subincandescent -subincomplete -subinferior -subinflammatory -subintegumental -subintegumentary -subintentional -subinternal -subintestinal -subintimal -subintroductive -subintroductory -subinvolute -subinvoluted -subjacent -subjectional -subjective -subjudicial -subjudiciary -subjugable -subjugal -subjugular -subjunctive -subjunior -sublabial -sublaciniate -sublacunose -sublacustrine -sublanate -sublanceolate -sublaryngal -sublaryngeal -sublenticular -sublenticulate -sublethal -sublighted -sublimable -sublimational -sublime -subliminal -sublinear -sublingual -sublittoral -sublobular -sublong -subloral -sublumbar -sublunary -sublunate -sublunated -sublustrous -submammary -submaniacal -submanic -submarginal -submaxillary -submaximal -submedial -submedian -submediocre -submembranaceous -submembranous -submeningeal -submental -submerged -submergible -submersible -submetallic -submetaphoric -submetaphorical -submicroscopic -submiliary -subminiature -subminimal -subministrant -submiss -submissive -submolecular -submontane -submountain -submucous -submucronate -submucronated -submundane -submuscular -subnacreous -subnarcotic -subnasal -subnatural -subneural -subnitrated -subnodulose -subnodulous -subnormal -subnotational -subnotochordal -subnude -subnutritious -suboblique -subobscure -subobsolete -subobtuse -subocean -suboceanic -subocular -suboesophageal -subolive -subopaque -subopposite -suboptic -suboptical -suboral -suborbicular -suborbiculate -suborbiculated -suborbital -subordinal -subordinate -subordinative -suborganic -subornative -subovarian -subovate -subovoid -subpallial -subpalmate -subpalmated -subpar -subparallel -subparalytic -subparietal -subpartitioned -subpatellar -subpatronal -subpectinate -subpectinated -subpectoral -subpeduncled -subpeduncular -subpedunculate -subpedunculated -subpellucid -subpeltate -subpeltated -subpentagonal -subpericardiac -subpericardial -subpericranial -subperiosteal -subperitoneal -subpermanent -subpetiolate -subpetiolated -subpetrosal -subpharyngal -subpharyngeal -subphrenic -subphylar -subpial -subpilose -subplacental -subplantigrade -subpleural -subplexal -subpolar -subpolygonal -subpopular -subporphyritic -subpreceptoral -subpreceptorial -subpredicative -subprefectorial -subprehensile -subpreputial -subprimary -subproctorial -subprofessional -subprofitable -subproportional -subprostatic -subprovincial -subpubescent -subpubic -subpulmonary -subpyramidal -subpyramidic -subpyramidical -subpyriform -subquadrangular -subquadrate -subquinquefid -subradiate -subradiative -subradical -subradular -subramose -subramous -subrectal -subrectangular -subregular -subreniform -subrepand -subrepent -subreptitious -subreputable -subretinal -subretractile -subrhombic -subrhombical -subrhomboid -subrhomboidal -subrictal -subrigid -subrostral -subrotund -subsacral -subsaline -subsatiric -subsatirical -subsaturated -subscapular -subscleral -subsclerotic -subscribable -subscript -subsecretarial -subsensual -subsensuous -subseptate -subsequent -subserous -subserrate -subserrated -subservient -subsessile -subsibilant -subsidiary -subsidizable -subsimian -subsimious -subsimple -subsinuous -subsistent -subsocial -subsolar -subsonic -subspatulate -subsphenoid -subsphenoidal -subspheric -subspherical -subspinose -subspinous -subspiral -subsplenial -subspontaneous -substandard -substantial -substantiative -substantival -substernal -substitutional -substitutionary -substitutive -substratospheric -substriate -substriated -substructional -substructural -subsumable -subsuperficial -subsynodal -subsynodic -subsynodical -subsynovial -subtarsal -subtegminal -subtegumental -subtegumentary -subtemperate -subtemporal -subtentacular -subtepid -subterete -subterminal -subternatural -subterranean -subterraqueous -subterrestrial -subterritorial -subtertian -subtetanic -subtetanical -subthalamic -subthoracal -subthoracic -subtile -subtilis -subtitular -subtle -subtorrid -subtotemic -subtractive -subtranslucent -subtransparent -subtransversal -subtransverse -subtrapezoid -subtrapezoidal -subtriangular -subtriangulate -subtribal -subtrifid -subtrigonal -subtrihedral -subtriplicate -subtriplicated -subtriquetrous -subtrochanteric -subtrochlear -subtrochleariform -subtropical -subtruncate -subtruncated -subtubiform -subturriculate -subturriculated -subtwined -subtympanitic -subtypical -subulate -subultimate -subumbellar -subumbellate -subumbellated -subumbelliferous -subumbilical -subumbonal -subumbonate -subuncinal -subuncinate -subuncinated -subunequal -subungual -subuniversal -suburban -suburbicarian -suburethral -subursine -subvaginal -subventionary -subventral -subventricous -subventricular -subvermiform -subversive -subvertebral -subvertical -subverticilate -subverticilated -subvesicular -subvirile -subvisible -subvitalised -subvitalized -subvitreous -subvocal -subwealthy -subzero -subzonal -subzonary -subzygomatic -succedaneous -succeedable -successful -successive -successless -successoral -succinct -succinic -succubous -succulent -succursal -suchlike -sucking -suctional -suctorial -sudatory -sudden -sudoriferous -sudorific -sudoriparous -suety -sufferable -sufficient -suffixal -suffragan -suffruticose -suffusive -sugared -sugarless -sugarlike -sugary -suggestible -suggestive -suicidal -suitable -suited -sulcate -sulfa -sulfinyl -sulfitic -sulfonyl -sulfureous -sulfuric -sulfurous -sulfuryl -sulkier -sulkies -sulkiest -sulky -sullen -sulliable -sulpha -sulphonic -sulphuric -sulphurous -sulphydryl -sultanic -sultanlike -sultrier -sultriest -sultry -summarisable -summarizable -summational -summerly -summerweight -summital -summitless -summonable -sumption -sumptuary -sumptuous -sunback -sunbaked -sunbeamed -sunbeamy -sunbonneted -sunfast -sunless -sunlike -sunlit -sunnier -sunniest -sunny -sunproof -sunshineless -sunshiny -sunspotted -sunward -super -superable -superabnormal -superabominable -superabstract -superabsurd -superaccommodating -superaccomplished -superaccurate -superacidulated -superacromial -superactive -superacute -superadaptable -superadditional -superadequate -superadjacent -superadmirable -superadorn -superaerial -superaesthetical -superaffluent -superagrarian -superambitious -superangelic -superanimal -superannuated -superaqual -superaqueous -superarctic -superarduous -superarrogant -superartificial -superattainable -superattractive -superaverage -superaxillary -superb -superbelievable -superbeloved -superbenevolent -superbenign -superblessed -superbold -superbrave -superbusy -supercandid -supercanine -supercanonical -supercapable -supercarpal -supercatastrophic -supercatholic -supercatholically -supercausal -supercelestial -supercerebellar -supercerebral -superceremonious -superchemical -superchivalrous -superciliary -supercilious -supercivil -supercivilized -superclassified -supercoincident -supercolossal -supercolumnar -supercommercial -supercomplex -superconducting -superconductive -superconfident -superconformable -superconfused -supercongested -superconsecrated -superconservative -superconstitutional -supercordial -supercretaceous -supercriminal -supercritical -supercrowned -supercultivated -supercurious -supercynical -superdainty -superdeclamatory -superdecorated -superdelicate -superdemocratic -superdemonic -superdesirous -superdevilish -superdiabolical -superdifficult -superdivine -superdomineering -superdubious -superdural -superearthly -supereducated -supereffective -supereffluent -superelaborate -superelastic -superelated -superelegant -superelementary -superelevated -supereligible -supereloquent -supereminent -superenergetic -superepic -superequivalent -supererogatory -superethical -superevangelical -superevident -superexacting -superexcellent -superexceptional -superexcited -superexcrescent -superexplicit -superexpressive -superexquisite -superextreme -superfantastic -superfeminine -superfervent -superfetate -superficial -superfine -superfinical -superfinite -superfluous -superfoliaceous -superformal -superformidable -superfortunate -superfructified -superfunctional -supergalactic -supergallant -supergene -supergeneric -supergenerous -supergenual -superglacial -superglorious -superglottal -superglottic -superhandsome -superhearty -superheroic -superheterodyne -superhistoric -superhistorical -superhuman -superideal -superignorant -superimpersonal -superimportant -superimposed -superimprobable -superimproved -superinclusive -superincomprehensible -superincumbent -superindependent -superindifferent -superindignant -superindividual -superindulgent -superindustrious -superinfinite -superinformal -superingenious -superinnocent -superinquisitive -superinsistent -superintellectual -superintense -superintolerable -superior -superjacent -superjudicial -superlaborious -superlaryngeal -superlative -superlenient -superlocal -superlogical -superloyal -superlucky -superlunar -superlunary -superluxurious -supermagnificent -supermarginal -supermarine -supermarvelous -supermasculine -supermathematical -supermechanical -supermedial -supermediocre -supermental -supermetropolitan -supermilitary -supermodest -supermolten -supermoral -supermorose -supermundane -supermunicipal -supernal -supernatant -supernational -supernatural -supernaturalistic -supernegligent -supernormal -supernotable -supernumerary -supernumerous -superobedient -superobese -superobjectionable -superobstinate -superoccipital -superocular -superoffensive -superofficious -superoptimal -superoratorical -superorbital -superordinary -superordinate -superorganic -superornamental -superparamount -superparasitic -superparliamentary -superpatient -superpatriotic -superperfect -superpersonal -superpetrosal -superpetrous -superphysical -superpious -superplausible -superpolite -superpopulated -superposable -superpositive -superpowered -superprecarious -superprecise -superprepared -superprosperous -superpure -superradical -superrational -superrefined -superregal -superregenerative -superrenal -superrespectable -superresponsible -superrighteous -superromantic -supersacerdotal -supersacral -supersacred -supersafe -supersagacious -supersanguine -supersarcastic -supersaturated -superscandalous -superscholarly -superscientific -superscript -supersecretive -supersecular -supersecure -supersedable -supersensible -supersensitive -supersensual -supersensualistic -supersensuous -supersentimental -superseptal -superseraphic -superseraphical -superserious -superserviceable -supersevere -supersignificant -supersilent -supersingular -supersmart -supersolar -supersolemn -supersonic -supersovereign -supersphenoid -supersphenoidal -superspiritual -supersquamosal -superstitious -superstoical -superstrenuous -superstrict -superstrong -superstructural -superstylish -supersublimated -supersubstantial -supersubtilized -supersubtle -supersufficient -supersulfureted -supersulphureted -supersuspicious -supersweet -supersympathetic -supertemporal -superterrestrial -superthankful -superthorough -supertragic -supertranscendent -supertrivial -supertutelary -superugly -superuniversal -superurgent -supervast -supervenient -supervictorious -supervigilant -supervigorous -supervirulent -supervisory -supervisual -supervital -supervoluminous -superwealthy -superwise -superworldly -superwrought -superzealous -supine -supperless -supple -suppled -supplemental -supplementary -suppler -supplest -suppletive -suppletory -suppliable -suppliant -supplicatory -suppling -supportable -supporting -supportless -supposed -suppositional -suppositionless -suppositious -supposititious -suppositive -suppressive -suppurative -supraglottal -suprahepatic -supraliminal -supramolecular -supranational -supranatural -supranaturalistic -supraorbital -suprarational -suprarenal -suprasegmental -supratemporal -supravaginal -supreme -sural -surbased -surculose -sure -surer -surest -surfable -surfaceless -surflike -surfy -surgeless -surgeonless -surgical -surgy -surly -surmisable -surmountable -surpassable -surpassing -surpliced -surprising -surreal -surreptitious -surveillant -surveyable -survivable -susceptible -susceptive -suspectible -suspectless -suspenderless -suspendible -suspensible -suspensive -suspicionful -suspicionless -suspicious -sustainable -sustenanceless -sustentacular -sustentational -sustentative -susurrant -susurrous -sutural -svelte -svelter -sveltest -swacked -swaggering -swainish -swallowable -swallowlike -swampier -swampiest -swampless -swampy -swankier -swankiest -swanky -swart -swarth -swarthy -swashbuckling -swastikaed -swathable -swatheable -swayable -swayful -sweated -sweatier -sweatiest -sweatless -sweaty -sweepable -sweeping -sweer -sweet -sweetless -sweetlike -sweetmeal -swellheaded -sweltering -sweptback -sweptwing -swervable -swift -swimmable -swindleable -swindled -swingable -swingeing -swinish -swirlier -swirliest -swirly -swishier -swishiest -swishy -switchlike -swoln -swordless -swordlike -sycophantic -sycophantical -sycophantish -syenitic -syllabic -syllogistic -sylphic -sylphish -sylphlike -sylphy -sylvan -sylvatic -symbiotic -symbiotical -symbolic -symbolistic -symbolistical -symmetric -symmetrical -sympathetic -sympatholytic -sympathomimetic -sympatric -sympetalous -symphonic -symphonious -symphysial -symphystic -sympodial -symposiac -symptomatic -symptomless -synaesthetic -synagogical -synaptic -synaptical -syncarpous -synchromesh -synchronic -synchronistic -synchronistical -synchronous -synclastic -synclinal -syncopated -syncretic -syncretistical -syncytial -syndactyl -syndesmotic -syndetic -syndicalist -syndicalistic -syndiotactic -syndromic -synecdochic -synecdochical -synechistic -synecious -synecologic -synecological -synergetic -synergistic -synesthetic -synetic -syngamic -synodal -synodic -synoecious -synoetic -synoicous -synonymic -synonymical -synonymous -synoptic -synoptistic -synostotic -synostotical -synovial -synsacral -synsepalous -syntactic -synthetic -syntonic -syntonous -syntrophoblastic -syntypic -syphiloid -syringeal -syringeful -syringomyelic -syruplike -syrupy -systaltic -systematic -systemic -systemisable -systemizable -systemless -systemoid -syzygial -t -tabarded -tabby -tabernacular -tabescent -taboo -tabu -tabulable -tabular -tachistoscopic -tachyauxetic -tachygraphic -tachygraphical -tachyphylactic -tachypneic -tachypnoeic -tacit -taciturn -tacketed -tackier -tackiest -tackless -tacky -tactful -tactical -tactile -tactless -tactual -taenidial -taglike -tagmemic -tailless -taillike -tailored -taintless -takeaway -takedown -taking -talcose -talebearing -taligrade -taliped -talismanic -talismanical -talkable -talkative -talkier -talkiest -talky -tall -tallowy -taloned -tamasic -tame -tameable -tamed -tameless -tamer -tamest -taming -tanagrine -tangential -tangible -tangier -tangiest -tangled -tangy -tanked -tankless -tanklike -tannable -tannaitic -tannic -tannish -tantalic -tantalizing -tantalous -tapeless -tapelike -tapestried -tapetal -tappable -tardier -tardiest -tardo -tardy -targetless -tariffless -tarnal -tarnishable -tarsal -tartaric -tartarous -tartish -tartrated -tasimetric -tasteful -tasteless -tasty -tatty -tauriform -taurine -tauromachian -taut -tautologic -tautological -tautomeric -tautomerizable -tavernless -tawdrier -tawdriest -tawdry -tawie -tawney -tawnier -tawniest -taxable -taxaceous -taxational -taxidermal -taxidermic -taxitic -taxonomic -taxonomical -taxpaid -teacherless -tealess -tearable -tearful -tearier -teariest -tearing -tearless -teary -teasable -techier -techiest -technical -technocrat -techy -tectonic -tectricial -tedious -teeming -teen -teenage -teenier -teeniest -teensy -teeny -teethless -teetotal -tegminal -tegular -teind -teknonymous -telaesthetic -telangiectatic -telautographic -telegenic -telegnostic -telegonic -telegrammatic -telegrammic -telegraphic -telegraphical -telekinetic -telencephalic -teleostean -telepathic -telephonic -telephotographic -teleplasmic -telescopic -telesthetic -televisional -televisionary -telford -telial -telic -teliosporic -telling -tellurian -telluric -tellurous -telodynamic -telolecithal -telophasic -telsonic -temerarious -temperamental -temperate -tempered -tempestuous -templed -templelike -temporal -temporary -temptable -tempting -tenable -tenacious -tenantable -tenantless -tenantlike -tendencious -tendentious -tender -tenderhearted -tendinous -tendrillar -tendrilly -tendrilous -tenebrous -tenfold -tenne -tenorless -tenpenny -tense -tensed -tenseless -tenser -tensest -tensible -tensile -tensing -tensional -tensionless -tensive -tensorial -tentacled -tentaclelike -tentacular -tentaculoid -tentative -tented -tenth -tentie -tentier -tentiest -tentless -tentlike -tentorial -tenty -tenuous -tenurial -tenuto -tephritic -tepid -tepidity -tepidness -teratogenetic -teratogenic -teratoid -terbic -tercentenary -terebic -terebinic -terebinthine -terefah -terete -tergal -tergiversatory -teriyaki -terminable -terminal -terminational -terminatory -terministic -termitic -termless -ternary -ternate -terpeneless -terpenic -terpsichorean -terraceless -terraqueous -terrene -terrestrial -terribilita -terrible -terrific -terrigenous -territorial -terrorful -terroristic -terrorless -terse -tertial -tertian -tertiary -tertius -tervalent -tessellated -testable -testacean -testaceous -testamentary -testate -testiculate -testudinal -testudinate -testy -tetanic -tetartohedral -tetched -tetchy -tetrabasic -tetrabranchiate -tetracid -tetracyclic -tetradrachmal -tetradynamous -tetraethyl -tetragonal -tetrahedral -tetrahydrated -tetrahydric -tetrahydroxy -tetramerous -tetrandrous -tetraploid -tetrapodic -tetrapterous -tetrarchic -tetrarchical -tetrasporic -tetrastichic -tetrastichous -tetrasyllabic -tetrasyllabical -tetratomic -tetravalent -textbookish -textless -textual -textuary -thalamencephalic -thalassic -thalassographic -thalassographical -thallic -thalloid -thallous -thankful -thankless -thankworthy -thatchless -thatchy -theaceous -thearchic -theatrical -thecal -thecate -thecial -thecodont -thegnly -theistic -theistical -thelytokous -thematic -themeless -theocentric -theocratic -theocratical -theodicean -theodolitic -theogonic -theological -theomorphic -theophanic -theophanous -theoretical -theosophic -theosophical -theralite -therapeutic -theriacal -therian -therianthropic -theriomorphic -thermal -thermic -thermionic -thermochemical -thermoclinal -thermoduric -thermodynamic -thermoelastic -thermoelectric -thermoelectronic -thermogenetic -thermogenic -thermogenous -thermolabile -thermoluminescent -thermolytic -thermometric -thermomotive -thermonuclear -thermophosphorescent -thermoplastic -thermoscopic -thermoscopical -thermosensitive -thermosetting -thermostable -thermostatic -thermotactic -thermotaxic -thermotensile -thermotropic -theroid -thersitical -thetic -theurgic -theurgical -thick -thicketed -thickety -thickset -thieveless -thievish -thigmotactic -thigmotropic -thimblelike -thin -thinkable -thinnish -thio -thioacetic -thiocyanic -thiocyano -thiolacetic -thiolic -thionic -third -thirdstream -thirstier -thirstiest -thirstless -thirsty -thirteenth -thirtieth -thirtypenny -thistlelike -thistly -thixotropic -thoracic -thoric -thornier -thorniest -thornless -thornlike -thorny -thorough -thoroughbred -thoroughgoing -thoroughpaced -thoughtful -thoughtless -thousandfold -thousandth -thowless -thrasonical -thrawn -threadbare -threadless -threadlike -thready -threatful -threatless -threefold -threnodial -thriftier -thriftiest -thriftless -thrifty -thrillful -thrilling -throatier -throatiest -throatless -throaty -throbless -thromboclastic -thrombolytic -thromboplastic -thrombotic -throneless -thrushlike -thuggish -thumbless -thumblike -thumping -thundering -thunderous -thunderstruck -thundery -thymelaeaceous -thymic -thymier -thymiest -thymy -thyroarytenoid -thyroid -thyrsoid -thysanurous -tiaraed -tiaralike -tibial -ticketless -ticklish -tidal -tiddly -tideful -tideless -tidelike -tiderode -tidy -tied -tierced -tigerish -tight -tightfisted -tightknit -tiglic -tiled -tilelike -tiliaceous -tillable -timbered -timberless -timbery -timbreled -timbrelled -timeless -timely -timeous -timesaving -timeserving -timeworn -timid -timocratic -timocratical -timorous -tinctorial -tinderlike -tindery -tineal -tined -tinglier -tingliest -tingly -tinier -tiniest -tinklier -tinkliest -tinkly -tinlike -tinned -tinnier -tinniest -tinny -tinpot -tintless -tintometric -tiny -tipless -tippable -tippier -tippiest -tippy -tipsier -tipsy -tiptop -tired -tireless -tiresome -tissual -tissuey -titanic -titaniferous -titanous -tithable -titheless -titillative -titled -titrable -titratable -tittuppy -titubant -titular -titulary -toadish -toadless -toadlike -toadyish -tobaccoless -toed -toeless -toelike -toey -togaed -togate -toilful -toilsome -tolerable -tolerant -tolerative -toluic -tombless -tomblike -tomfoolish -tomial -tonal -tonalitive -toneless -tonetic -tongued -tongueless -tonguelike -tonier -toniest -tonish -tonnish -tonsilar -tonsillar -tonsillary -tonsillitic -tonsorial -tony -toolless -toothed -toothier -toothiest -toothless -toothlike -toothsome -toothy -topazine -topflight -topfull -tophaceous -topiary -topical -topline -toplofty -topmost -topnotch -topographic -topographical -topologic -topological -toponymic -toponymical -topotypic -topotypical -torchiest -torchless -torchlike -torchy -toreutic -toric -tornadic -tornadolike -torose -torpedolike -torpid -torporific -torquate -torrential -torrid -tortile -tortious -tortuous -totable -totalitarian -totemic -tother -totipalmate -totipotent -tottering -touchable -touched -touchier -touchiest -touching -touchy -tough -toughish -touristic -touristy -tourmalinic -tournois -towable -toward -towardly -towered -towering -towerless -towerlike -towery -townish -townless -towy -toxemic -toxic -toxicogenic -toxicologic -toxicological -toxophilitic -toyless -toylike -trabeated -trabecular -trabeculate -traceable -traceless -traceried -tracheidal -tracheoscopic -trachycarpous -trachyspermous -trachytic -trachytoid -trackable -tracklaying -trackless -tractable -tractile -traditional -traditionalistic -traditionless -traditive -traducianistic -trafficable -trafficless -tragic -tragicomic -tragicomical -trailblazing -trailless -trainable -trainless -trainsick -traitorous -tramless -tramontane -trancelike -tranquil -transactional -transalpine -transannular -transaquatic -transarctic -transatlantic -transaudient -transbay -transborder -transcalent -transcendent -transcendental -transcendentalistic -transchannel -transcolor -transcolour -transcondylar -transcondyloid -transcontinental -transcorporeal -transcriptional -transcriptive -transcrystalline -transcultural -transcurrent -transcursive -transdermic -transdesert -transdiaphragmatic -transdiurnal -transelemental -transelementary -transempirical -transequatorial -transeunt -transexperiental -transferable -transferential -transferrable -transfinite -transfluvial -transformable -transformational -transformative -transformistic -transfrontal -transfrontier -transfusable -transfusible -transfusive -transgressive -transhuman -transhumant -transient -transiliac -transilient -transindividual -transinsular -transisthmian -transitional -transitionary -transitive -transitory -translatable -translational -translative -translucent -translucid -translucidus -translunar -transmarginal -transmarine -transmaterial -transmental -transmeridional -transmissible -transmissive -transmittable -transmittible -transmontane -transmundane -transmutable -transmutual -transnational -transnatural -transnormal -transoceanic -transocular -transomed -transonic -transorbital -transovarian -transpacific -transpadane -transpalmar -transparent -transparietal -transparish -transpassional -transpenetrable -transpenisular -transperitoneal -transpersonal -transphysical -transpicuous -transpirable -transpiratory -transplanetary -transpleural -transpolar -transponible -transpontine -transported -transportive -transposable -transpositional -transpositive -transpulmonary -transrational -transreal -transriverina -transsegmental -transsensual -transseptal -transsepulchral -transsolid -transsonic -transstellar -transthalamic -transthoracic -transtracheal -transubstantial -transudative -transudatory -transuranic -transurethral -transuterine -transverse -trapezial -trapeziform -trapezohedral -traplike -trappean -trappier -trappiest -trappy -trashy -traumatic -travelable -travellable -travelled -traversable -trawlable -treacherous -treacly -treasonable -treasonous -treasurable -treasureless -treatyless -treble -tredecillionth -treed -treelike -treelined -treen -tref -trembly -tremendous -tremolant -tremolitic -tremulous -trenchant -trendy -treponemal -treponematous -tres -tressed -tressier -tressiest -tressured -tressy -triable -triacid -triadelphous -triadic -triangled -triangular -triapsidal -triaryl -triatomic -triaxial -triazolic -tribadic -tribal -tribasic -tribeless -triboelectric -triboluminescent -tribrachial -tribrachic -tribunicial -tribunitial -tricarpellary -tricentenary -tricentennial -trichinous -trichitic -trichogynial -trichogynic -trichoid -trichomic -trichomonadal -trichonotid -trichotomic -trichotomous -trichromatic -trickier -trickiest -trickish -trickless -tricksier -tricksiest -tricksome -tricksy -tricky -triclinic -tricolor -tricorn -tricornered -tricostate -tricrotic -tricuspid -tricuspidate -tricyclic -tridactyl -tridentate -tridimensional -triecious -triennial -triethyl -trifacial -trifid -trifling -trifocal -trifold -trifoliate -trifoliolate -triforial -triform -trifurcate -trig -trigamous -trigeminal -triggerless -triglyphed -trigonal -trigonometric -trigonometrical -trigonous -trigraphic -trihedral -trihydric -trihydroxy -trijugate -trilateral -trilinear -trilingual -triliteral -trilobate -trilobed -trilocular -trimeric -trimerous -trimestral -trimestrial -trimetallic -trimetric -trimodal -trimolecular -trimonthly -trimorphic -trimorphous -trimotored -trinal -trinary -trinocular -trinodal -trinomial -trioecious -triparted -tripartite -tripedal -tripersonal -tripetalous -triphibian -triphibious -triphthongal -triphyllous -tripinnate -triple -triplex -triplicate -triploblastic -triploid -tripodal -tripodic -trippant -tripping -tripterous -triquetrous -triradiate -trisepalous -triseptate -triserial -trismic -trisomic -trispermous -triste -tristful -tristichic -tristichous -trisyllabic -trisyllabical -tritanopic -trite -triter -tritest -tritheistic -tritheistical -triturable -triumphal -triumphant -triumviral -triune -triunitarian -trivalent -trivalve -trivial -trochaic -trochal -trochanteral -trochanteric -trochlear -trochoidal -troglodytic -troglodytical -trogonoid -trollopy -tromometric -tromometrical -troostitic -trophallactic -trophic -trophied -trophoplasmatic -trophoplasmic -trophyless -tropical -tropistic -tropologic -tropological -tropophilous -tropospheric -trothless -trotty -troubleproof -troublesome -troublous -troughlike -trouserless -troy -truceless -truculent -true -trueborn -truehearted -truer -truffled -truing -truistic -truistical -trumpless -truncated -trunkless -trunnioned -trussed -trustable -trustful -trusting -trustless -trustworthy -truthful -truthless -trying -trypanosomal -trypanosomic -tryptic -tsarist -tsaristic -tsunamic -tubal -tubate -tubbable -tubbier -tubbiest -tubby -tubercular -tuberculate -tuberculoid -tuberculose -tuberculous -tuberless -tuberoid -tuberous -tubesnout -tublike -tuboid -tubular -tubuliflorous -tubulous -tufaceous -tuffaceous -tufted -tufthunting -tugless -tuitional -tuitionary -tuitionless -tularaemic -tularemic -tuliplike -tum -tumefacient -tumescent -tumid -tumular -tumulose -tumulous -tumultuous -tunable -tuneable -tuneful -tuneless -tungstenic -tungstous -tunnellike -tuppenny -turbaned -turbanless -turbanlike -turbid -turbidimetric -turbinal -turbinate -turbosupercharged -turbulent -turdiform -turdine -turfier -turfiest -turfless -turflike -turfy -turgent -turgescent -turgid -turndown -turniplike -turpentinic -turreted -turretless -tushed -tuskless -tussal -tussive -tutti -tutto -twaddly -twee -tweedier -tweediest -tweedy -twelfth -twelvefold -twelvepenny -twentieth -twentyfold -twentypenny -twiggier -twiggiest -twiggy -twigless -twiglike -twill -twin -twinborn -twineable -twinned -twistable -twittery -twofold -twolegged -twopenny -twp -tychistic -tychopotamic -tympanic -tympanitic -typal -typhogenic -typhonic -typhous -typical -typographic -typologic -typological -tyrannical -tyrannicidal -tyrannous -tyronic -tzarist -tzaristic -ubiquitous -ugly -ugsome -ulcerative -ulcerous -uliginous -ullaged -ulmaceous -ulnar -ulotrichous -ulterior -ultimate -ultra -ultrabasic -ultracentrifugal -ultraconservative -ultraistic -ultramicrochemical -ultramicroscopic -ultramicroscopical -ultramodern -ultramontane -ultramundane -ultrared -ultrashort -ultrasonic -ultrastructural -ultratropical -ululant -umbellar -umbellate -umbellated -umbellately -umbelliferous -umbilical -umbilicate -umbiliform -umbonal -umbonate -umbonic -umbrageous -umbral -umbrellaless -umbrellalike -umbrose -umpteenth -umteen -unabandoned -unabandoning -unabased -unabashable -unabashed -unabasing -unabatable -unabated -unabating -unabbreviated -unabdicated -unabdicating -unabdicative -unabducted -unabetted -unabetting -unabhorred -unabiding -unabject -unabjective -unabjuratory -unabjured -unablative -unable -unabnegated -unabnegating -unabolishable -unabolished -unaborted -unabortive -unabraded -unabrasive -unabridged -unabrogable -unabrogated -unabrogative -unabscessed -unabsolved -unabsorbable -unabsorbed -unabsorbent -unabsorbing -unabsorptive -unabstemious -unabstentious -unabstracted -unabstractive -unabusable -unabused -unabusive -unabutting -unacademic -unacademical -unacceding -unaccelerated -unaccelerative -unaccentuated -unacceptable -unacceptant -unaccepted -unaccessible -unaccessional -unaccidental -unacclaimed -unacclimated -unacclimatised -unacclimatized -unacclivitous -unaccommodable -unaccommodated -unaccommodating -unaccompanied -unaccomplishable -unaccomplished -unaccordable -unaccordant -unaccorded -unaccostable -unaccosted -unaccountable -unaccounted -unaccoutered -unaccoutred -unaccredited -unaccrued -unaccumulable -unaccumulated -unaccumulative -unaccurate -unaccusable -unaccused -unaccusing -unaccustomed -unacerbic -unacetic -unachievable -unachieved -unaching -unacidic -unacidulated -unacknowledged -unacknowledging -unacoustic -unacoustical -unacquainted -unacquiescent -unacquirable -unacquired -unacquisitive -unacquitted -unacrimonious -unactable -unacted -unacting -unactinic -unactionable -unactivated -unactuated -unacuminous -unadamant -unadaptable -unadapted -unadaptive -unaddable -unadded -unaddible -unaddicted -unaddled -unaddressed -unadduceable -unadduced -unadducible -unadept -unadhering -unadhesive -unadjacent -unadjoined -unadjoining -unadjourned -unadjudged -unadjudicated -unadjunctive -unadjustable -unadjusted -unadministered -unadministrable -unadministrative -unadmirable -unadmired -unadmiring -unadmissible -unadmissive -unadmitted -unadmonished -unadmonitory -unadoptable -unadopted -unadoptional -unadoptive -unadorable -unadored -unadoring -unadornable -unadorned -unadroit -unadulating -unadulatory -unadult -unadulterate -unadulterated -unadulterous -unadvancing -unadvantaged -unadvantageous -unadventuring -unadventurous -unadverse -unadvertised -unadvisable -unadvised -unadvocated -unaerated -unaesthetic -unaesthetical -unaffable -unaffected -unaffecting -unaffiliated -unaffirmed -unaffixed -unafflicted -unafflicting -unafforded -unaffrighted -unaffronted -unafraid -unaged -unagglomerative -unaggravated -unaggravating -unaggregated -unaggressive -unagile -unaging -unagitated -unagrarian -unagreed -unagricultural -unaidable -unaided -unaiding -unaimed -unaiming -unairable -unaired -unaisled -unalacritous -unalarmed -unalarming -unalcoholised -unalcoholized -unaldermanly -unalerted -unalgebraical -unalienable -unalienated -unalienating -unalignable -unaligned -unalike -unalimentary -unalimentative -unallayable -unallayed -unalleged -unallegorical -unallegorized -unallergic -unalleviated -unalleviating -unalleviative -unallied -unalliterated -unalliterative -unallotted -unallowable -unallowed -unalloyed -unallured -unalluring -unallusive -unalphabetic -unalphabetical -unalphabetised -unalphabetized -unalterable -unaltering -unalternated -unalternating -unamalgamable -unamalgamated -unamalgamating -unamalgamative -unamassed -unamative -unamazed -unambient -unambiguous -unambitious -unambulant -unameliorable -unameliorated -unameliorative -unamenable -unamendable -unamended -unamending -unamerceable -unamerced -unamiable -unamicable -unammoniated -unamorous -unamortized -unamplifiable -unamplified -unamputated -unamputative -unamusable -unamused -unamusing -unanachronistic -unanachronistical -unanachronous -unanaemic -unanalagous -unanalogical -unanalogized -unanalytic -unanalytical -unanalyzable -unanalyzed -unanalyzing -unanarchic -unanarchistic -unanatomisable -unanatomised -unanatomizable -unanatomized -unanchored -unanecdotal -unaneled -unanemic -unangered -unangry -unanguished -unangular -unanimated -unanimating -unanimous -unannealed -unannexable -unannexed -unannihilable -unannihilated -unannihilative -unannihilatory -unannotated -unannounced -unannoyed -unannoying -unannullable -unannulled -unannunciable -unannunciative -unanointed -unanswerable -unanswering -unantagonisable -unantagonised -unantagonising -unantagonistic -unantagonizable -unantagonized -unantagonizing -unanthologized -unanticipated -unanticipating -unanticipative -unantiquated -unantlered -unanxious -unaphasic -unapologetic -unapostatized -unapostrophized -unappalled -unappalling -unappareled -unapparelled -unapparent -unappealable -unappealed -unappealing -unappeasable -unappeased -unappeasing -unappendaged -unappended -unapperceived -unapperceptive -unappetising -unappetizing -unapplaudable -unapplauded -unapplauding -unapplausive -unappliable -unapplicable -unapplicative -unapplied -unappliquad -unappointable -unappointed -unapportioned -unapposable -unapposite -unappraised -unappreciable -unappreciated -unappreciating -unappreciative -unapprehendable -unapprehended -unapprehending -unapprehensible -unapprehensive -unapprenticed -unapprised -unapproachable -unapproached -unapproaching -unappropriable -unappropriated -unapprovable -unapproved -unapproving -unaproned -unapt -unarbitrary -unarbitrated -unarbitrative -unarbored -unarboured -unarched -unarching -unarchitected -unarchitectural -unarduous -unarguable -unargued -unargumentative -unaristocratic -unarithmetical -unarmed -unarmored -unarmorial -unarmoured -unaromatic -unarousable -unaroused -unarousing -unarraignable -unarraigned -unarranged -unarrayed -unarrestable -unarrested -unarresting -unarrestive -unarrived -unarriving -unarrogant -unarrogated -unarrogating -unartful -unarticled -unarticulate -unarticulated -unarticulative -unarticulatory -unartificial -unartistic -unary -unascendable -unascendant -unascended -unascendent -unascertainable -unascertained -unascetic -unascribed -unashamed -unaskable -unasked -unasking -unaspersed -unaspersive -unasphalted -unaspirated -unaspiring -unassailable -unassailed -unassailing -unassassinated -unassaultable -unassaulted -unassayed -unassaying -unassembled -unassenting -unassentive -unasserted -unassertive -unassessable -unassessed -unassibilated -unassiduous -unassignable -unassigned -unassimilable -unassimilated -unassimilating -unassimilative -unassistant -unassisted -unassisting -unassociable -unassociated -unassociative -unassorted -unassuageable -unassuaging -unassuasive -unassumable -unassumed -unassuming -unassured -unassuring -unasthmatic -unastonished -unathletic -unatmospheric -unatoned -unatoning -unatrophied -unattachable -unattached -unattackable -unattacked -unattainable -unattained -unattaining -unattainted -unattempered -unattemptable -unattempted -unattempting -unattendant -unattended -unattentive -unattenuated -unattested -unattired -unattractable -unattracted -unattracting -unattractive -unattributable -unattributive -unattuned -unauctioned -unaudacious -unaudited -unauditioned -unaugmentable -unaugmentative -unaugmented -unauspicious -unaustere -unauthentic -unauthentical -unauthenticated -unauthorised -unauthoritative -unauthorized -unautistic -unautographed -unautomatic -unautumnal -unavailable -unavailed -unavailing -unavengeable -unavenged -unavenging -unaveraged -unaverred -unaverted -unavid -unavoidable -unavoiding -unavouched -unavowable -unawakable -unawake -unawaked -unawakening -unawaking -unawardable -unawarded -unaware -unawed -unawful -unawkward -unawned -unaxed -unaxiomatic -unaxised -unaxled -unbacked -unbackward -unbacterial -unbadged -unbadgered -unbadgering -unbaffled -unbaffling -unbagged -unbailable -unbailed -unbaked -unbalanceable -unbalanced -unbalconied -unbalked -unbalking -unballoted -unbanded -unbangled -unbanished -unbankable -unbanned -unbannered -unbantering -unbaptised -unbaptized -unbarbarous -unbarbed -unbarbered -unbargained -unbarking -unbarrable -unbarreled -unbarrelled -unbarren -unbartered -unbartering -unbase -unbased -unbashful -unbasketlike -unbastardised -unbastardized -unbasted -unbastinadoed -unbated -unbathed -unbating -unbatted -unbatterable -unbattered -unbattling -unbeached -unbeaconed -unbeaded -unbeamed -unbeaming -unbearable -unbearded -unbearing -unbeatable -unbeaten -unbeaued -unbeauteous -unbeautified -unbeautiful -unbeckoned -unbeclouded -unbecoming -unbedabbled -unbedaubed -unbedecked -unbedimmed -unbedizened -unbedraggled -unbefitting -unbefriended -unbeggarly -unbegged -unbegrudged -unbeguiled -unbeguiling -unbehaving -unbeheaded -unbeheld -unbeholdable -unbeholden -unbelied -unbelievable -unbelieving -unbellicose -unbelligerent -unbelonging -unbeloved -unbemoaned -unbendable -unbending -unbeneficed -unbeneficent -unbeneficial -unbenefited -unbenefiting -unbenevolent -unbenign -unbenignant -unbenumbed -unbequeathable -unbequeathed -unbereaved -unberouged -unbeseeching -unbeseeming -unbeset -unbesieged -unbesmeared -unbesmirched -unbesmutted -unbesought -unbespoken -unbesprinkled -unbestowed -unbet -unbetrayed -unbetraying -unbetrothed -unbettered -unbeveled -unbevelled -unbewailed -unbewailing -unbewildered -unbewildering -unbewitched -unbewitching -unbewrayed -unbiased -unbibulous -unbickered -unbickering -unbiddable -unbidden -unbigamous -unbigoted -unbilious -unbillable -unbilled -unbilleted -unbinned -unbiographical -unbiological -unbirdlike -unbiting -unbitten -unbitter -unblacked -unblackened -unblamable -unblamed -unblaming -unblanched -unblanketed -unblasphemed -unblasted -unblazoned -unbleached -unbleaching -unbled -unbleeding -unblemishable -unblemished -unblemishing -unblenched -unblenching -unblendable -unblended -unblent -unblessed -unblighted -unblindfolded -unblinding -unblinking -unblissful -unblistered -unblockaded -unblocked -unbloody -unbloomed -unblossomed -unblossoming -unblotted -unbloused -unblown -unblued -unbluffable -unbluffed -unbluffing -unblundering -unblunted -unblurred -unblushing -unblusterous -unboarded -unboasted -unboastful -unboasting -unbobbed -unbodied -unboding -unboggy -unboiled -unboisterous -unbold -unbolstered -unbolted -unbombarded -unbombastic -unbombed -unbondable -unbonded -unboned -unbonneted -unbookish -unbooted -unbordered -unbored -unboring -unborn -unborne -unborrowed -unborrowing -unbossed -unbotanical -unbothered -unbothering -unbought -unbounded -unbounteous -unbountiful -unbowdlerized -unbowed -unbowing -unbowled -unboyish -unbraceleted -unbracketed -unbragging -unbrailed -unbranched -unbranching -unbranded -unbrandied -unbrave -unbraved -unbrawling -unbrawny -unbrazen -unbreachable -unbreached -unbreaded -unbreakable -unbreaking -unbreathable -unbreathed -unbreathing -unbred -unbreeched -unbreezy -unbrewed -unbribable -unbribed -unbribing -unbricked -unbridgeable -unbridged -unbridled -unbrief -unbriefed -unbright -unbrightened -unbrilliant -unbrimming -unbrined -unbristled -unbrittle -unbroached -unbroadcast -unbroadcasted -unbroadened -unbrocaded -unbroiled -unbroke -unbroken -unbronzed -unbrooded -unbrooding -unbrothered -unbrotherly -unbrought -unbrowned -unbrowsing -unbruised -unbrushable -unbrushed -unbudged -unbudgeted -unbudging -unbuffed -unbuffered -unbuffeted -unbullied -unbullying -unbumped -unbumptious -unbunched -unbundled -unbungling -unbuoyant -unbuoyed -unburdensome -unbureaucratic -unburglarized -unburied -unburlesqued -unburly -unburnable -unburned -unburning -unburnished -unburnt -unburrowed -unburst -unburstable -unbusinesslike -unbuskined -unbustling -unbutchered -unbuttered -unbuttressed -unbuyable -unbuying -uncabined -uncabled -uncacophonous -uncadenced -uncaged -uncajoling -uncalamitous -uncalcareous -uncalcified -uncalcined -uncalculable -uncalculated -uncalculating -uncalculative -uncalendared -uncalibrated -uncalked -uncalled -uncallous -uncallused -uncalm -uncalmative -uncalorific -uncalumniative -uncalumnious -uncambered -uncamouflaged -uncampaigning -uncamped -uncamphorated -uncanalized -uncancelable -uncanceled -uncancellable -uncancelled -uncancerous -uncandid -uncandied -uncandled -uncaned -uncankered -uncanned -uncanny -uncanonical -uncanopied -uncantoned -uncanvassed -uncapable -uncapacious -uncaparisoned -uncaped -uncapering -uncapitalised -uncapitalistic -uncapitalized -uncapitulated -uncapitulating -uncapricious -uncapsizable -uncapsized -uncapsuled -uncaptained -uncaptioned -uncaptious -uncaptivated -uncaptivating -uncaptivative -uncapturable -uncaptured -uncaramelised -uncaramelized -uncarbonated -uncarbonized -uncarbureted -uncarburetted -uncarded -uncaressed -uncaressing -uncaricatured -uncaring -uncarnivorous -uncaroled -uncarolled -uncarousing -uncarpentered -uncarpeted -uncarried -uncarted -uncartooned -uncarved -uncascaded -uncascading -uncasemated -uncashed -uncasked -uncasketed -uncast -uncastigated -uncastigative -uncastled -uncastrated -uncasual -uncataloged -uncatalogued -uncatastrophic -uncatchable -uncatechized -uncategorical -uncategorised -uncategorized -uncatenated -uncatered -uncatering -uncathartic -uncatholic -uncatholical -uncaught -uncausable -uncausal -uncausative -uncaused -uncaustic -uncauterized -uncautioned -uncautious -uncavalier -uncavernous -uncaviling -uncavilling -uncavitied -unceased -unceasing -unceded -unceilinged -uncelebrated -uncelebrating -uncelestial -uncelibate -uncensorable -uncensored -uncensorious -uncensurable -uncensured -uncensuring -uncentered -uncentral -uncentralised -uncentralized -uncentred -uncentric -uncentrical -uncentripetal -uncephalic -uncerated -uncerebric -unceremonial -unceremonious -unceriferous -uncertain -uncertifiable -uncertificated -uncertified -uncertifying -uncertitude -unchafed -unchaffed -unchaffing -unchagrined -unchainable -unchained -unchalked -unchalky -unchallengeable -unchallenged -unchallenging -unchambered -unchamfered -unchampioned -unchanceable -unchanced -unchancy -unchangeable -unchanged -unchangeful -unchanging -unchanneled -unchannelized -unchannelled -unchanted -unchaotic -unchaperoned -unchapleted -unchapped -unchaptered -uncharactered -uncharacterised -uncharacteristic -uncharacterized -uncharge -unchargeable -uncharged -uncharitable -uncharmable -uncharmed -uncharming -uncharred -uncharted -unchartered -unchary -unchased -unchaste -unchastened -unchastisable -unchastised -unchastising -unchattering -unchauffeured -unchauvinistic -uncheapened -uncheaply -uncheated -uncheating -uncheckable -unchecked -uncheckered -uncheckmated -uncheerable -uncheered -uncheerful -uncheering -uncheery -unchemical -uncherished -uncherishing -unchested -unchevroned -unchewable -unchewed -unchid -unchidden -unchided -unchiding -unchildish -unchildlike -unchilled -unchiming -unchinked -unchippable -unchipped -unchipping -unchiseled -unchiselled -unchivalric -unchivalrous -unchloridized -unchlorinated -unchokable -unchoked -uncholeric -unchoosable -unchopped -unchosen -unchristened -unchromatic -unchromed -unchronic -unchronicled -unchronological -unchurchly -unchurlish -unchurned -uncial -unciform -unciliated -uncinate -uncinctured -uncircled -uncircuitous -uncircular -uncircularised -uncircularized -uncirculated -uncirculating -uncirculative -uncircumlocutory -uncircumscribable -uncircumscribed -uncircumspect -uncircumspective -uncircumstantial -uncircumvented -uncitable -unciteable -uncited -uncitied -uncitizenlike -uncitizenly -uncivic -uncivil -uncivilisable -uncivilizable -uncivilized -unclad -unclaimed -unclaiming -unclamorous -unclamped -unclannish -unclarified -unclarifying -unclashing -unclassable -unclassed -unclassical -unclassifiable -unclassified -unclassifying -unclawed -unclayed -unclean -uncleanable -uncleaned -uncleansable -uncleansed -unclear -unclearable -uncleared -unclearing -uncleavable -uncleft -unclerical -unclerkly -unclever -unclimactic -unclimaxed -unclimbable -unclimbed -unclimbing -unclinging -unclinical -uncloistered -uncloistral -unclosable -uncloseted -unclotted -unclouded -uncloudy -uncloven -uncloyed -uncloying -unclustered -unclustering -unclutchable -unclutched -uncluttered -uncoachable -uncoached -uncoagulable -uncoagulated -uncoagulating -uncoagulative -uncoalescent -uncoarse -uncoaxable -uncoaxal -uncoaxed -uncoaxial -uncoaxing -uncobbled -uncocked -uncoddled -uncoded -uncodified -uncoerced -uncogent -uncogged -uncognisable -uncognizable -uncognizant -uncognized -uncognoscible -uncohesive -uncoifed -uncoincided -uncoincident -uncoincidental -uncoinciding -uncoined -uncoked -uncollaborative -uncollapsable -uncollapsed -uncollapsible -uncollated -uncollectable -uncollected -uncollectible -uncollective -uncollegiate -uncolloquial -uncollusive -uncolonial -uncolorable -uncolored -uncolourable -uncoloured -uncombable -uncombatable -uncombatant -uncombated -uncombative -uncombed -uncombinable -uncombinational -uncombinative -uncombined -uncombining -uncombustible -uncombustive -uncomely -uncomfortable -uncomforted -uncomforting -uncomic -uncomical -uncommanded -uncommanderlike -uncommemorated -uncommemorative -uncommenced -uncommendable -uncommendatory -uncommensurate -uncommented -uncommenting -uncommercial -uncommingled -uncomminuted -uncommiserated -uncommiserating -uncommiserative -uncommissioned -uncommitted -uncommitting -uncommodious -uncommon -uncommonplace -uncommunicating -uncommunicative -uncommutable -uncommutative -uncommuted -uncompanionable -uncompanioned -uncomparable -uncompared -uncompassable -uncompassionate -uncompassioned -uncompellable -uncompelled -uncompelling -uncompendious -uncompensated -uncompensating -uncompensative -uncompensatory -uncompetent -uncompetitive -uncompiled -uncomplacent -uncomplained -uncomplaining -uncomplaisant -uncomplemental -uncomplementary -uncomplemented -uncompletable -uncomplete -uncomplex -uncompliable -uncompliant -uncomplicated -uncomplimentary -uncomplimented -uncomplimenting -uncomplying -uncomportable -uncomposable -uncomposeable -uncomposed -uncompoundable -uncompounded -uncompounding -uncomprehended -uncomprehending -uncomprehensible -uncomprehensive -uncompressed -uncompressible -uncompromised -uncompromising -uncompulsive -uncompulsory -uncomputable -uncomputed -unconcatenated -unconcatenating -unconcealing -unconceded -unconceding -unconceited -unconceived -unconcentrated -unconcentrative -unconcentric -unconceptual -unconcerned -unconcertable -unconcerted -unconciliable -unconciliated -unconciliating -unconciliative -unconciliatory -unconcludable -unconcluded -unconcordant -unconcrete -unconcreted -unconcurred -unconcurrent -unconcurring -uncondemnable -uncondemned -uncondemning -uncondensable -uncondensational -uncondensed -uncondensing -uncondescending -unconditional -unconditioned -uncondolatory -uncondoled -uncondoling -uncondoned -uncondoning -unconducing -unconducive -unconducted -unconductible -unconductive -unconfected -unconfederated -unconferred -unconfessed -unconfessing -unconfided -unconfident -unconfiding -unconfinable -unconfined -unconfining -unconfirmative -unconfirmatory -unconfiscable -unconfiscated -unconfiscatory -unconflicting -unconflictive -unconformable -unconformed -unconforming -unconfounding -unconfrontable -unconfronted -unconfusable -unconfused -unconfusing -unconfutable -unconfutative -unconfuted -unconfuting -uncongealable -uncongenial -uncongested -uncongestive -unconglomerated -unconglutinated -unconglutinative -uncongratulated -uncongratulating -uncongratulatory -uncongregated -uncongregational -uncongregative -uncongressional -uncongruous -unconical -unconjecturable -unconjectural -unconjectured -unconjoined -unconjugal -unconjugated -unconjunctive -unconjured -unconnected -unconned -unconnived -unconniving -unconnotative -unconquerable -unconquered -unconscientious -unconscionable -unconscious -unconsecrated -unconsecrative -unconsecutive -unconsentaneous -unconsentient -unconsenting -unconservable -unconservative -unconserved -unconserving -unconsiderable -unconsidered -unconsidering -unconsignable -unconsigned -unconsociated -unconsolable -unconsolatory -unconsoled -unconsolidated -unconsolidating -unconsoling -unconsonant -unconspired -unconspiring -unconstant -unconstellated -unconsternated -unconstipated -unconstituted -unconstitutional -unconstrainable -unconstrained -unconstraining -unconstricted -unconstrictive -unconstruable -unconstructed -unconstructive -unconstrued -unconsultable -unconsultative -unconsultatory -unconsulted -unconsulting -unconsumable -unconsumed -unconsuming -unconsummate -unconsummated -unconsummative -unconsumptive -uncontacted -uncontagious -uncontained -uncontaminable -uncontaminated -uncontaminative -uncontemned -uncontemning -uncontemplable -uncontemplated -uncontemplative -uncontemporaneous -uncontemporary -uncontemptible -uncontemptuous -uncontended -uncontending -uncontentious -uncontestable -uncontested -uncontiguous -uncontinent -uncontingent -uncontinual -uncontinued -uncontinuous -uncontorted -uncontortioned -uncontortive -uncontoured -uncontracted -uncontractile -uncontradictable -uncontradicted -uncontradictious -uncontradictive -uncontradictory -uncontrastable -uncontrasted -uncontrasting -uncontrastive -uncontributed -uncontributing -uncontributive -uncontributory -uncontrite -uncontrived -uncontriving -uncontrollable -uncontrolled -uncontrolling -uncontroversial -uncontroverted -uncontrovertible -uncontumacious -unconvenable -unconvened -unconvening -unconventional -unconverged -unconvergent -unconverging -unconversable -unconversant -unconversational -unconverted -unconvertible -unconvicted -unconvicting -unconvictive -unconvinced -unconvincible -unconvincing -unconvolute -unconvoluted -unconvoyed -unconvulsed -unconvulsive -uncookable -uncooked -uncooled -uncooperating -uncooperative -uncoopered -uncoordinate -uncoordinated -uncopiable -uncopied -uncopious -uncopyrighted -uncoquettish -uncordial -uncorned -uncornered -uncoroneted -uncorpulent -uncorrectable -uncorrected -uncorrective -uncorrelated -uncorrelative -uncorresponding -uncorridored -uncorroborant -uncorroborated -uncorroborative -uncorroboratory -uncorroded -uncorrugated -uncorrupt -uncorrupted -uncorruptible -uncorrupting -uncorruptive -uncorseted -uncosseted -uncostly -uncostumed -uncottoned -uncounseled -uncounselled -uncountable -uncounted -uncountenanced -uncounteracted -uncounterbalanced -uncounterfeited -uncountermandable -uncountermanded -uncountervailed -uncountrified -uncourageous -uncourted -uncourtierlike -uncourting -uncourtly -uncouth -uncovenanted -uncovered -uncoveted -uncoveting -uncovetous -uncowed -uncoy -uncracked -uncradled -uncrafty -uncraggy -uncramped -uncranked -uncrannied -uncrated -uncravatted -uncraven -uncraving -uncreased -uncreatable -uncreated -uncreative -uncreaturely -uncredentialed -uncreditable -uncredulous -uncreeping -uncreosoted -uncrested -uncrevassed -uncried -uncriminal -uncrippled -uncritical -uncriticisable -uncriticizable -uncriticized -uncriticizing -uncrooked -uncropped -uncrossable -uncrowded -uncrowned -uncrucified -uncrude -uncruel -uncrumbled -uncrumpled -uncrumpling -uncrushable -uncrushed -uncrusted -uncrying -uncrystaled -uncrystalled -uncrystalline -uncrystallisable -uncrystallizable -uncrystallized -unctuous -uncubic -uncubical -uncudgeled -uncudgelled -uncuffed -unculled -unculpable -uncultivable -uncultivatable -uncultivated -unculturable -uncultured -uncumbered -uncumbrous -uncumulative -uncupped -uncurable -uncurbable -uncurbed -uncurdled -uncurdling -uncured -uncurious -uncurrent -uncurried -uncursed -uncursing -uncurtailable -uncurtailed -uncurtained -uncurved -uncurving -uncushioned -uncusped -uncustomary -uncut -uncuttable -uncynical -unda -undabbled -undaggled -undainty -undallying -undamageable -undamaged -undamaging -undamasked -undamnified -undamped -undampened -undanceable -undancing -undandled -undangered -undangerous -undapper -undappled -undared -undaring -undarned -undatable -undateable -undated -undaubed -undaughterly -undaunted -undaunting -undawned -undawning -undazed -undazing -undazzled -undazzling -undeadened -undeadlocked -undeaf -undealable -undealt -undebased -undebatable -undebated -undebating -undebauched -undebilitated -undebilitating -undebilitative -undebited -undecadent -undecayable -undecayed -undecaying -undeceased -undeceitful -undeceivable -undeceptive -undecided -undecillionth -undecipherable -undeciphered -undecked -undeclaimed -undeclaiming -undeclamatory -undeclarable -undeclarative -undeclared -undeclinable -undeclined -undeclining -undecocted -undecomposable -undecomposed -undecompounded -undecorated -undecorative -undecorous -undecorticated -undecreased -undecreasing -undecreed -undecrepit -undecretive -undecretory -undecried -undedicated -undeduced -undeducible -undeducted -undeductible -undeductive -undeeded -undeep -undeepened -undefaceable -undefaced -undefalcated -undefamatory -undefamed -undefaming -undefaulted -undefaulting -undefeatable -undefeated -undefective -undefendable -undefendant -undefended -undefending -undefensed -undefensible -undefensive -undeferential -undeferrable -undeferred -undefiable -undefiant -undeficient -undefied -undefiled -undefinable -undefined -undefinite -undefinitive -undeflected -undeflective -undeformable -undeformed -undefrauded -undefrayed -undeft -undegenerate -undegenerated -undegenerating -undegenerative -undegraded -undegrading -undeified -undeistical -undejected -undelayable -undelayed -undelaying -undelectable -undelegated -undeleted -undeleterious -undeliberate -undeliberating -undeliberative -undelicious -undelighted -undelightful -undelighting -undelineable -undelineated -undelineative -undelinquent -undelirious -undeliverable -undelivered -undeluded -undeluding -undeluged -undelusive -undelusory -undelved -undemanded -undemanding -undemised -undemocratic -undemolishable -undemolished -undemonstrable -undemonstrated -undemonstrational -undemonstrative -undemure -undemurring -undeniable -undenied -undenizened -undenominated -undenotable -undenotative -undenoted -undenounced -undented -undenuded -undenunciated -undenunciatory -undeparted -undeparting -undependable -undependent -undepicted -undepleted -undeplored -undeported -undeposable -undeposed -undeposited -undepraved -undeprecated -undeprecating -undeprecative -undepreciable -undepreciated -undepreciative -undepreciatory -undepressed -undepressible -undepressing -undepressive -undeprived -undeputed -undeputized -underaccommodated -underage -underanged -underarm -underaverage -underbeaten -underbred -underclad -underclothed -undercolored -underconcerned -undercover -underdegreed -underdeveloped -underdone -underdressed -undereducated -underemployed -underfired -underfloor -underfolded -underglaze -undergraduette -underground -undergrown -underhand -underhanded -underhung -underided -underisible -underisive -underisory -underivable -underivative -underlaid -underlevel -underlimbed -underlit -underlying -undermade -undermasted -undermentioned -undermoated -undermoral -undermost -undermusic -undernamed -undernoted -underofficial -underogating -underogative -underogatory -underpeopled -underpetticoated -underpitched -underplain -underpowered -underprivileged -underproductive -underproficient -underproof -underproportioned -underqualified -underrespected -underrigged -underripened -underrooted -undersaturated -underscrupulous -undersea -underseated -underseeded -undersexed -undershot -undersighted -undersize -undersized -underslung -undersparred -understaffed -understandable -undertakerly -undertaxed -underteamed -underterrestrial -undertided -undertrained -undervaulted -undervitalized -underwater -underweight -underwooded -underwrought -underzealous -undescendable -undescended -undescendent -undescendible -undescending -undescribable -undescribed -undescried -undescriptive -undescrying -undesecrated -undeserted -undeserved -undeserving -undesiccated -undesignated -undesignative -undesigned -undesigning -undesirable -undesired -undesiring -undesirous -undesisting -undespaired -undespairing -undespatched -undespised -undespising -undespoiled -undespondent -undesponding -undespotic -undestined -undestitute -undestroyed -undestructible -undestructive -undetachable -undetached -undetailed -undetainable -undetained -undetectable -undetected -undetectible -undeteriorated -undeteriorating -undeteriorative -undeterminable -undetermined -undetermining -undeterrable -undeterred -undeterring -undetestable -undetested -undetesting -undethroned -undetonated -undetracting -undetractive -undetractory -undetrimental -undevastated -undevastating -undevelopable -undeveloping -undevelopmental -undeviable -undeviated -undeviating -undevilish -undevious -undevisable -undevised -undevoted -undevotional -undevoured -undevout -undewed -undewy -undexterous -undextrous -undiabetic -undiagnosed -undiagramed -undiagrammatic -undiagrammatical -undiagrammed -undialed -undialled -undialyzed -undiametric -undiametrical -undiapered -undiaphanous -undiatonic -undichotomous -undictated -undictatorial -undidactic -undifferent -undifferentiable -undifferentiated -undiffering -undifficult -undiffident -undiffracted -undiffractive -undiffused -undiffusible -undiffusive -undigested -undigestible -undigesting -undigitated -undignified -undigressive -undiked -undilapidated -undilatable -undilated -undilating -undilative -undilatory -undiligent -undilute -undiluted -undiluting -undiluvial -undiluvian -undim -undimensioned -undimerous -undimidiated -undiminishable -undiminished -undiminishing -undimmed -undimpled -undiplomaed -undiplomatic -undipped -undirected -undirectional -undisabled -undisagreeable -undisappearing -undisappointable -undisappointed -undisappointing -undisarmed -undisastrous -undisbanded -undisbarred -undisbursed -undiscardable -undiscarded -undiscernable -undiscerned -undiscernible -undiscerning -undischargeable -undischarged -undisciplinable -undisciplined -undisclaimed -undisclosed -undiscolored -undiscoloured -undiscomfited -undiscomposed -undisconcerted -undisconnected -undiscontinued -undiscordant -undiscording -undiscountable -undiscounted -undiscourageable -undiscouraged -undiscouraging -undiscoverable -undiscovered -undiscreditable -undiscredited -undiscriminated -undiscriminating -undiscriminatory -undiscussable -undiscussed -undisdaining -undiseased -undisestablished -undisfigured -undisfranchised -undisgorged -undisgraced -undisguisable -undisguised -undisgusted -undisheartened -undisheveled -undishonored -undisillusioned -undisinfected -undisinheritable -undisinherited -undisjoined -undisjointed -undislocated -undislodged -undismantled -undismayable -undismayed -undismissed -undisordered -undisorderly -undisorganized -undisparaged -undispassionate -undispatchable -undispatched -undispatching -undispellable -undispelled -undispensable -undispensed -undispersed -undispersing -undisplaceable -undisplaced -undisplayable -undisplayed -undisplaying -undisposed -undisprovable -undisproved -undisputable -undisputatious -undisputed -undisputing -undisqualifiable -undisqualified -undisquieted -undisrupted -undissected -undissembled -undissembling -undisseminated -undissenting -undissevered -undissipated -undissociated -undissoluble -undissolute -undissolvable -undissolved -undissolving -undissonant -undissuadable -undistant -undistasteful -undistempered -undistilled -undistinguishable -undistinguished -undistinguishing -undistorted -undistorting -undistracted -undistracting -undistrained -undistraught -undistressed -undistributed -undistrustful -undisturbable -undisturbed -undisturbing -undithyrambic -undiuretic -undiurnal -undivergent -undiverging -undiverse -undiversified -undiverted -undivertible -undivertive -undivested -undividable -undivided -undividing -undivinable -undivined -undivining -undivisible -undivisive -undivorceable -undivorced -undivulgeable -undivulged -undivulging -undoable -undocked -undocketed -undoctored -undoctrinal -undoctrined -undocumentary -undocumented -undodged -undogmatic -undogmatical -undolorous -undomed -undomestic -undomesticable -undomesticated -undomiciled -undominated -undominative -undomineering -undominical -undonated -undone -undoped -undoting -undotted -undoubtable -undoubted -undoubtful -undoubting -undouched -undoughty -undoweled -undowelled -undowered -undowned -undraftable -undrafted -undragoned -undragooned -undrainable -undrained -undramatic -undramatical -undramatisable -undramatizable -undramatized -undraperied -undrawable -undreaded -undreading -undreamed -undreaming -undreamlike -undreamt -undredged -undrenched -undressed -undried -undrifting -undrillable -undrilled -undrinkable -undrinking -undrivable -undriven -undrooping -undropped -undropsical -undrossily -undrossy -undrowned -undrubbed -undrugged -undrunk -undrunken -undry -undryable -undrying -undualistic -undubbed -undubious -undubitative -unducal -unductile -undue -undug -undulant -undulatory -undulatus -undulled -undumped -undupable -unduped -unduplicative -undurable -undusted -undusty -unduteous -undutiable -undutiful -undwarfed -undwellable -undwindling -undyable -undyed -undying -undynamic -undynamited -uneager -unearned -unearnest -unearthly -uneastern -uneasy -uneatable -uneaten -uneating -uneaved -unebbed -unebbing -unebullient -uneccentric -unecclesiastic -unechoed -unechoic -unechoing -uneclectic -uneclipsed -uneclipsing -unecliptic -unecliptical -uneconomic -uneconomical -uneconomizing -unecstatic -unedacious -uneddied -uneddying -unedible -unedificial -unedified -unedifying -uneditable -unedited -uneducable -uneducated -uneducative -uneduced -uneffaceable -uneffaced -uneffected -uneffectible -uneffective -uneffectuated -uneffeminate -uneffervescent -uneffete -unefficacious -unefficient -uneffulgent -uneffused -uneffusing -uneffusive -unegoistical -unegotistical -unegregious -unejaculated -unejected -unejective -unelaborate -unelaborated -unelapsed -unelastic -unelated -unelating -unelbowed -unelderly -unelectable -unelected -unelective -unelectric -unelectrical -unelectrified -unelectrifying -unelectronic -uneleemosynary -unelegant -unelemental -unelementary -unelevated -unelicitable -unelicited -unelided -unelidible -uneliminated -unelliptical -unelongated -uneloped -uneloping -uneloquent -unelucidated -unelucidating -unelucidative -uneludable -uneluded -unelusive -unelusory -unemaciated -unemanative -unemancipated -unemancipative -unemasculated -unemasculative -unemasculatory -unembalmed -unembanked -unembarrassed -unembattled -unembayed -unembellished -unembezzled -unembittered -unemblazoned -unembossed -unemboweled -unembowelled -unembowered -unembraceable -unembraced -unembroidered -unembroiled -unembryonal -unembryonic -unemendable -unemended -unemerged -unemergent -unemerging -unemigrant -unemigrating -uneminent -unemissive -unemitted -unemitting -unemotional -unemotioned -unemotive -unempaneled -unempanelled -unemphasized -unemphasizing -unemphatic -unempirical -unemployable -unemployed -unempoisoned -unempowered -unemptied -unempty -unemulative -unemulous -unemulsified -unenacted -unenameled -unenamelled -unenamored -unenamoured -unencamped -unenchanted -unencircled -unenclosed -unencompassed -unencounterable -unencountered -unencouraged -unencouraging -unencroached -unencroaching -unencumbered -unencumbering -unencysted -unendable -unendangered -unendeared -unended -unendemic -unending -unendorsable -unendorsed -unendowed -unendowing -unendued -unendurability -unendurable -unendured -unenduring -unenergetic -unenergized -unenervated -unenfeebled -unenfiladed -unenforceable -unenforced -unenfranchised -unengaged -unengaging -unengendered -unengineered -unengraved -unengraven -unengrossed -unengrossing -unenhanced -unenigmatic -unenigmatical -unenjoined -unenjoyable -unenjoyed -unenjoying -unenlarged -unenlarging -unenlightened -unenlightening -unenlisted -unenlivened -unenlivening -unennobled -unennobling -unenounced -unenquired -unenquiring -unenraptured -unenrichable -unenriched -unenriching -unenrolled -unenshrined -unenslaved -unensnared -unensured -unentailed -unentangleable -unentangled -unentangling -unenterable -unentered -unenterprising -unentertainable -unentertained -unentertaining -unenthralled -unenthralling -unenthused -unenthusiastic -unenticeable -unenticed -unenticing -unentitled -unentombed -unentomological -unentranced -unentrapped -unentreatable -unentreated -unentreating -unentrenched -unentwined -unenumerated -unenumerative -unenunciable -unenunciated -unenunciative -unenveloped -unenvenomed -unenviable -unenvied -unenvious -unenvironed -unenvying -unepauleted -unepauletted -unephemeral -unepic -unepicurean -unepigrammatic -unepilogued -unepistolary -unepitaphed -unepithelial -unepitomised -unepitomized -unepochal -unequable -unequal -unequaled -unequalled -unequated -unequatorial -unequestrian -unequiangular -unequilateral -unequilibrated -unequine -unequipped -unequivalent -unequivocal -unequivocating -uneradicable -uneradicated -uneradicative -unerasable -unerased -unerasing -unerect -unerected -unermined -unerodable -uneroded -unerodent -uneroding -unerosive -unerotic -unerrant -unerratic -unerring -unerudite -unerupted -uneruptive -unescalloped -unescapable -unescaped -unescheatable -unescheated -uneschewed -unescorted -unescutcheoned -unesoteric -unespied -unespousable -unespoused -unessayed -unessential -unestablishable -unesteemed -unesthetic -unestimable -unestimated -unestopped -unestranged -unetched -uneternized -unethereal -unethical -unethnologic -unethnological -unethylated -unetymologic -unetymological -uneugenic -uneugenical -uneulogised -uneulogized -uneuphemistic -uneuphemistical -uneuphonic -uneuphonious -unevacuated -unevadable -unevaded -unevadible -unevading -unevaluated -unevanescent -unevangelic -unevangelical -unevangelised -unevangelized -unevaporated -unevaporative -unevasive -uneven -uneventful -uneversible -uneverted -unevicted -unevidenced -unevidential -unevil -unevinced -unevincible -uneviscerated -unevocable -unevocative -unevoked -unevolutional -unevolutionary -unevolved -unexacerbated -unexacerbating -unexacted -unexacting -unexaggerated -unexaggerating -unexaggerative -unexaggeratory -unexalted -unexalting -unexaminable -unexamined -unexamining -unexampled -unexasperated -unexasperating -unexcavated -unexceedable -unexceeded -unexcelled -unexcellent -unexcelling -unexceptable -unexcepted -unexcepting -unexceptionable -unexceptional -unexceptive -unexcerpted -unexcessive -unexchangeable -unexchanged -unexcised -unexcitable -unexcited -unexciting -unexclaiming -unexcludable -unexcluded -unexcluding -unexclusive -unexcogitable -unexcogitated -unexcogitative -unexcommunicated -unexcoriated -unexcrescent -unexcreted -unexcruciating -unexculpable -unexculpated -unexcursive -unexcusable -unexcused -unexcusing -unexecrated -unexecutable -unexecuted -unexecuting -unexecutorial -unexemplary -unexempt -unexemptable -unexempted -unexempting -unexercisable -unexercised -unexerted -unexhaled -unexhausted -unexhaustive -unexhibitable -unexhibited -unexhilarated -unexhilarating -unexhilarative -unexhortative -unexhorted -unexhumed -unexigent -unexigible -unexiled -unexistent -unexistential -unexisting -unexonerated -unexonerative -unexorbitant -unexorcised -unexotic -unexpandable -unexpanded -unexpanding -unexpansible -unexpansive -unexpectable -unexpectant -unexpected -unexpecting -unexpectorated -unexpedient -unexpeditable -unexpedited -unexpeditious -unexpellable -unexpelled -unexpendable -unexpended -unexperienced -unexperiential -unexperimental -unexperimented -unexpert -unexpiable -unexpiated -unexpired -unexpiring -unexplainable -unexplained -unexplaining -unexplanatory -unexplicated -unexplicative -unexplicit -unexplodable -unexploded -unexploitable -unexploitative -unexploited -unexplorable -unexplorative -unexploratory -unexplored -unexplosive -unexponible -unexportable -unexported -unexporting -unexposable -unexposed -unexpostulating -unexpoundable -unexpounded -unexpressable -unexpressed -unexpressive -unexpropriable -unexpropriated -unexpunged -unexpurgated -unextendable -unextended -unextendible -unextensible -unextenuated -unextenuating -unexterminable -unexterminated -unextinct -unextinguishable -unextinguished -unextirpated -unextolled -unextortable -unextorted -unextractable -unextracted -unextradited -unextraneous -unextraordinary -unextravagant -unextravasated -unextreme -unextricable -unextricated -unextrinsic -unextruded -unexuberant -unexudative -unexuded -unexultant -uneyeable -unfabled -unfabling -unfabricated -unfabulous -unfacaded -unfaceable -unfaced -unfaceted -unfacetious -unfacile -unfacilitated -unfactional -unfactious -unfactorable -unfactored -unfactual -unfadable -unfaded -unfading -unfagged -unfagoted -unfailed -unfailing -unfainting -unfair -unfaithful -unfakable -unfaked -unfallacious -unfallen -unfalling -unfallowed -unfalsifiable -unfalsified -unfaltering -unfamiliar -unfamiliarised -unfamiliarized -unfanatical -unfancied -unfanciful -unfancy -unfanged -unfanned -unfantastic -unfar -unfarced -unfarcical -unfarmable -unfarmed -unfarming -unfasciate -unfasciated -unfascinated -unfascinating -unfashionable -unfashioned -unfastenable -unfastidious -unfasting -unfatalistic -unfated -unfathered -unfatherly -unfathomable -unfathomed -unfatigable -unfatigued -unfatiguing -unfatted -unfatty -unfatuitous -unfauceted -unfaulty -unfavorable -unfavored -unfavoring -unfavorite -unfavourable -unfavoured -unfavouring -unfavourite -unfawning -unfeared -unfearful -unfearing -unfeasible -unfeasted -unfeathered -unfeatured -unfebrile -unfecund -unfecundated -unfed -unfederated -unfederative -unfeeble -unfeedable -unfeeding -unfeeling -unfeignable -unfeigning -unfelicitated -unfelicitating -unfelicitous -unfeline -unfellable -unfelled -unfelonious -unfelt -unfelted -unfemale -unfeminine -unfended -unfendered -unfenestral -unfenestrated -unfeoffed -unfermentable -unfermentative -unfermented -unfermenting -unferocious -unferreted -unferreting -unferried -unfertile -unfertilisable -unfertilised -unfertilising -unfertilizable -unfertilized -unfertilizing -unfervent -unfervid -unfestered -unfestering -unfestive -unfestooned -unfetched -unfetching -unfeted -unfeudal -unfevered -unfeverish -unfibbing -unfibered -unfibred -unfibrous -unfickle -unfictitious -unfidgeting -unfiducial -unfielded -unfierce -unfiercely -unfiery -unfightable -unfighting -unfigurable -unfigurative -unfilamentous -unfilched -unfilial -unfilled -unfilling -unfilmed -unfilterable -unfiltered -unfiltering -unfiltrated -unfimbriated -unfinable -unfinanced -unfine -unfineable -unfined -unfinical -unfinishable -unfinished -unfinite -unfired -unfiring -unfirm -unfiscal -unfishable -unfished -unfissile -unfistulous -unfit -unfittable -unfitted -unfitting -unfixable -unfixated -unfixative -unflagged -unflagging -unflagitious -unflagrant -unflaked -unflaking -unflaky -unflamboyant -unflaming -unflanged -unflappable -unflapping -unflared -unflaring -unflashing -unflashy -unflat -unflatted -unflattened -unflatterable -unflattered -unflattering -unflaunted -unflaunting -unflavored -unflavorous -unflavoured -unflavourous -unflawed -unflayed -unflecked -unfledged -unfleeced -unfleeing -unfleeting -unfleshly -unfletched -unflexed -unflexible -unflickering -unflighty -unflinching -unflippant -unflirtatious -unflitched -unfloatable -unfloating -unfloggable -unflogged -unflooded -unflorid -unflossy -unflounced -unfloundering -unfloured -unflourishing -unflouted -unflowered -unflowering -unflowery -unflowing -unflown -unfluctuant -unfluctuating -unfluent -unfluffed -unfluffy -unfluid -unfluked -unflunked -unfluorescent -unfluorinated -unflurried -unflushed -unflustered -unfluted -unflutterable -unfluttered -unfluttering -unfluvial -unflying -unfoaled -unfoamed -unfoaming -unfocused -unfocusing -unfocussed -unfocussing -unfogged -unfogging -unfoggy -unfoilable -unfoiled -unfoisted -unfoldable -unfoliaged -unfoliated -unfollowable -unfollowed -unfollowing -unfomented -unfond -unfondled -unfoolable -unfooled -unfooling -unfoolish -unforaged -unforbearing -unforbidden -unforbidding -unforceable -unforced -unforceful -unforcible -unforcing -unfordable -unforded -unforeboded -unforeboding -unforecast -unforecasted -unforegone -unforeign -unforeknowable -unforeknown -unforensic -unforeseeable -unforeseeing -unforeseen -unforeshortened -unforestallable -unforestalled -unforested -unforetellable -unforetold -unforewarned -unforfeitable -unforfeited -unforfeiting -unforgeable -unforged -unforgetful -unforgettable -unforgetting -unforgivable -unforgiven -unforgiving -unforgone -unforgotten -unforlorn -unformalised -unformalistic -unformalized -unformative -unformed -unformidable -unformulated -unformulistic -unforsaken -unforsaking -unforsworn -unforthright -unfortifiable -unfortified -unfortuitous -unfortunate -unforward -unforwarded -unfossiliferous -unfossilised -unfossilized -unfostered -unfostering -unfought -unfoul -unfouled -unfound -unfounded -unfoundered -unfoundering -unfountained -unfoxed -unfoxy -unfractious -unfractured -unfragile -unfragmented -unfragrant -unfrail -unframable -unframeable -unframed -unfranchised -unfrank -unfraternal -unfraternised -unfraternized -unfraternizing -unfraudulent -unfraught -unfrayed -unfrazzled -unfreakish -unfreckled -unfreezable -unfreighted -unfrenzied -unfrequent -unfrequentable -unfrequentative -unfretful -unfretted -unfretting -unfretty -unfriable -unfricative -unfrictional -unfrictioned -unfried -unfriended -unfriendlier -unfriendliest -unfriendly -unfrighted -unfrightened -unfrightening -unfrightful -unfrigid -unfrilly -unfrisking -unfrisky -unfrittered -unfrivolous -unfrizzled -unfrizzly -unfrizzy -unfronted -unfrosted -unfrosty -unfrothed -unfrothing -unfrounced -unfroward -unfrowning -unfrozen -unfructified -unfructuous -unfrugal -unfruitful -unfruity -unfrustratable -unfrustrated -unfuddled -unfudged -unfueled -unfuelled -unfugal -unfugitive -unfulfillable -unfulfilled -unfulfilling -unfulgent -unfull -unfulminant -unfulminated -unfulminating -unfulsome -unfumbled -unfumbling -unfumigated -unfuming -unfunctional -unfunctioning -unfundable -unfundamental -unfunded -unfunereal -unfungible -unfunny -unfurbelowed -unfurbished -unfurcate -unfurlable -unfurnished -unfurnitured -unfurred -unfurrowed -unfused -unfusible -unfussed -unfussing -unfussy -unfutile -unfuturistic -ungabled -ungainable -ungained -ungainful -ungaining -ungainly -ungainsaid -ungaited -ungallant -ungalled -ungalleried -ungalling -ungalloping -ungalvanized -ungambled -ungambling -ungamboled -ungamboling -ungambolled -ungambolling -ungamelike -ungamy -unganged -ungangrened -ungangrenous -ungaping -ungaraged -ungarbed -ungarbled -ungardened -ungarmented -ungarnered -ungarnished -ungarrisoned -ungarrulous -ungashed -ungassed -ungated -ungathered -ungaudy -ungauged -ungauntleted -ungazetted -ungazing -ungeared -ungelatinized -ungelatinous -ungelded -ungenerable -ungeneralised -ungeneralising -ungeneralized -ungeneralizing -ungenerated -ungenerating -ungenerative -ungeneric -ungenerical -ungenerous -ungenial -ungenitive -ungenteel -ungentile -ungentle -ungentlemanlike -ungentlemanly -ungenuine -ungeodetic -ungeographic -ungeographical -ungeological -ungeometric -ungeometrical -ungermane -ungerminant -ungerminated -ungerminating -ungerminative -ungesticular -ungesticulating -ungesticulative -ungesticulatory -ungestural -ungesturing -unghostlike -unghostly -ungiddy -ungifted -ungilded -ungilled -ungilt -ungirlish -ungirthed -ungivable -ungiven -ungiving -unglacial -unglaciated -unglad -unglamorous -unglamourous -unglandular -unglaring -unglassed -unglassy -unglazed -ungleaming -ungleaned -ungleeful -unglib -ungliding -unglimpsed -unglistening -unglittering -unglittery -ungloating -unglobular -ungloomy -unglorified -unglorifying -unglorious -unglossaried -unglossed -unglossy -ungloved -unglowering -unglowing -unglozed -unglutinous -unglutted -ungluttonous -ungnarled -ungnawed -ungnawn -ungnostic -ungoaded -ungodlier -ungodliest -ungodlike -ungodly -ungoggled -ungoitered -ungolden -ungoodly -ungored -ungorged -ungossiping -ungossipy -ungothic -ungotten -ungouged -ungouty -ungovernable -ungoverned -ungoverning -ungovernmental -ungowned -ungrabbing -ungraced -ungraceful -ungradated -ungradating -ungraded -ungradual -ungraduated -ungraduating -ungrafted -ungrainable -ungrained -ungrammatical -ungrand -ungrantable -ungranular -ungranulated -ungraphable -ungraphic -ungraphical -ungraphitized -ungrappled -ungrappling -ungraspable -ungrasped -ungrasping -ungrassed -ungrassy -ungrated -ungrateful -ungratifiable -ungratified -ungratifying -ungrating -ungratuitous -ungraved -ungraveled -ungravelled -ungravelly -ungraven -ungravitating -ungravitational -ungravitative -ungrayed -ungrazed -ungreased -ungreasy -ungreedy -ungreened -ungreeted -ungregarious -ungreyed -ungrieved -ungrieving -ungrilled -ungrimed -ungrindable -ungrinned -ungritty -ungrizzled -ungroaning -ungroined -ungroomed -ungrooved -ungross -ungrotesque -unground -ungroundable -ungrounded -ungroupable -ungrouped -ungroveling -ungrovelling -ungrowing -ungrowling -ungrown -ungrudged -ungrudging -ungruesome -ungruff -ungrumbling -ungrumpy -ungual -unguaranteed -unguardable -unguarded -unguentary -unguerdoned -unguessable -unguessed -unguiculate -unguidable -unguided -unguileful -unguillotined -unguinous -ungular -unguled -unguligrade -ungummed -ungushing -ungustatory -ungutted -unguttural -unguyed -unguzzled -ungymnastic -ungyrating -ungyved -unhabitable -unhabited -unhabitual -unhabituated -unhacked -unhackled -unhackneyed -unhaggled -unhaggling -unhailable -unhailed -unhairy -unhale -unhallowed -unhallucinated -unhallucinating -unhallucinatory -unhaloed -unhalted -unhaltered -unhaltering -unhalting -unhalved -unhammered -unhampered -unhampering -unhandicapped -unhandled -unhandseled -unhandselled -unhandsome -unhanged -unhanging -unhanked -unhappi -unhappier -unhappy -unharangued -unharassed -unharbored -unharboured -unhardenable -unhardened -unharked -unharmable -unharmed -unharmful -unharming -unharmonic -unharmonious -unharped -unharping -unharried -unharrowed -unharsh -unharvested -unhashed -unhasted -unhastened -unhasting -unhasty -unhatchable -unhatched -unhated -unhateful -unhating -unhauled -unhaunted -unhawked -unhayed -unhazarded -unhazarding -unhazardous -unhazed -unhazy -unheaded -unheady -unhealable -unhealed -unhealing -unhealthier -unhealthiest -unhealthy -unheaped -unhearable -unheard -unhearing -unhearty -unheatable -unheated -unheathen -unheaved -unheavenly -unheavy -unhectic -unhectored -unhedonistic -unheeded -unheedful -unheeding -unheeled -unhefted -unheightened -unheld -unhelmeted -unhelpable -unhelped -unhelpful -unhelping -unhelved -unhemmed -unheralded -unheraldic -unherbaceous -unherded -unheritable -unhermetic -unhermitic -unhermitical -unheroic -unheroical -unherolike -unhesitant -unhesitating -unhesitative -unheuristic -unhewable -unhewed -unhewn -unhid -unhidden -unhideous -unhieratic -unhieratical -unhilarious -unhilly -unhinderable -unhindered -unhindering -unhinted -unhipped -unhired -unhissed -unhistoric -unhistorical -unhistoried -unhistrionic -unhit -unhittable -unhoarded -unhoarding -unhoary -unhoaxed -unhobbling -unhocked -unhoed -unhogged -unhoisted -unhollow -unhollowed -unholy -unhomely -unhomicidal -unhomiletic -unhomiletical -unhomogeneous -unhomogenized -unhomologic -unhomological -unhomologized -unhomologous -unhoned -unhoneyed -unhonied -unhonored -unhonoured -unhoodwinked -unhoofed -unhooped -unhooted -unhopeful -unhoping -unhoppled -unhorizoned -unhorizontal -unhorned -unhoroscopic -unhorrified -unhortative -unhosed -unhospitalized -unhostile -unhot -unhounded -unhouseled -unhousewifely -unhubristic -unhued -unhugged -unhuman -unhumane -unhumanistic -unhumanitarian -unhumble -unhumbled -unhumid -unhumidified -unhumidifying -unhumiliated -unhumiliating -unhumored -unhumorous -unhumoured -unhumourous -unhung -unhuntable -unhunted -unhurdled -unhurled -unhurried -unhurrying -unhurt -unhurtful -unhurting -unhusbanded -unhushable -unhushing -unhuskable -unhusked -unhustled -unhustling -unhutched -unhuzzaed -unhydrated -unhydraulic -unhydrolized -unhygienic -unhygrometric -unhymeneal -unhymned -unhyphenable -unhyphenated -unhyphened -unhypnotic -unhypnotisable -unhypnotizable -unhypocritical -unhypothecated -unhypothetical -unhysterical -uniambic -uniaxial -unicameral -unicellular -unicolor -uniconoclastic -unicostate -unicursal -unicuspid -unideaed -unideal -unidealised -unidealistic -unidealized -unideated -unideating -unideational -unidentical -unidentifiable -unidentified -unidentifying -unideographic -unideographical -unidiomatic -unidirectional -unidle -unidling -unidolatrous -unidolised -unidolized -unidyllic -unific -unifilar -uniflagellate -uniflorous -unifoliate -unifoliolate -uniformed -uniformitarian -uniformless -unignitable -unignited -unigniting -unignominious -unignorant -unignored -unignoring -unijugate -unilateral -unilingual -uniliteral -unilluded -unillumed -unilluminant -unilluminated -unilluminating -unilluminative -unillusioned -unillusive -unillusory -unillustrated -unillustrative -unillustrious -unilobed -unilocular -unimaged -unimaginable -unimaginary -unimaginative -unimagined -unimbibed -unimbibing -unimbued -unimitable -unimitated -unimitating -unimitative -unimmaculate -unimmanent -unimmediate -unimmerged -unimmersed -unimmigrating -unimminent -unimmolated -unimmunised -unimmunized -unimmured -unimpacted -unimpairable -unimpaired -unimparted -unimpartial -unimpartible -unimpassionate -unimpatient -unimpawned -unimpeachable -unimpeached -unimpearled -unimpeded -unimpeding -unimpelled -unimperative -unimperial -unimperialistic -unimperious -unimpertinent -unimpinging -unimplanted -unimplicated -unimplied -unimplorable -unimplored -unimportant -unimported -unimporting -unimportunate -unimportuned -unimposed -unimposing -unimpounded -unimpoverished -unimprecated -unimpregnated -unimpressed -unimpressible -unimpressionable -unimpressive -unimprinted -unimprisonable -unimprisoned -unimpropriated -unimproved -unimprovised -unimpugnable -unimpugned -unimpulsive -unimputable -unimputed -uninaugurated -unincarcerated -unincarnate -unincarnated -unincensed -uninceptive -unincestuous -uninchoative -unincidental -unincinerated -unincised -unincisive -unincited -uninclinable -uninclined -uninclining -uninclosed -unincludable -unincluded -unincludible -uninclusive -uninconvenienced -unincorporated -unincreasable -unincreased -unincreasing -unincriminated -unincriminating -unincubated -unincumbered -unindemnified -unindentured -unindexed -unindicated -unindicative -unindictable -unindicted -unindigenous -unindignant -unindividualized -unindividuated -unindoctrinated -unindorsed -uninduced -uninducible -uninducted -uninductive -unindulged -unindulgent -unindulging -unindurate -unindurative -unindustrial -unindustrialized -unindustrious -uninebriated -uninebriating -uninert -uninfatuated -uninfectable -uninfected -uninfectious -uninfective -uninferable -uninferential -uninferrable -uninferred -uninferrible -uninfested -uninfiltrated -uninfinite -uninfixed -uninflamed -uninflammable -uninflated -uninflected -uninflective -uninflicted -uninfluenced -uninfluencing -uninfluential -uninfolded -uninformative -uninformed -uninforming -uninfracted -uninfringed -uninfuriated -uninfused -uninfusing -uninfusive -uningested -uningestive -uningrafted -uningrained -uningratiating -uninhabitable -uninhabited -uninhaled -uninherent -uninheritable -uninherited -uninhibited -uninhibiting -uninhumed -uninimical -uniniquitous -uninitialed -uninitialled -uninitiate -uninitiated -uninitiative -uninjectable -uninjected -uninjured -uninjuring -uninjurious -uninked -uninlaid -uninnate -uninnocent -uninnocuous -uninnovating -uninnovative -uninoculable -uninoculated -uninoculative -uninquired -uninquiring -uninquisitive -uninquisitorial -uninscribed -uninserted -uninsidious -uninsinuated -uninsinuating -uninsinuative -uninsistent -uninsolated -uninsolating -uninspected -uninspirable -uninspired -uninspiring -uninspirited -uninspissated -uninstalled -uninstanced -uninstated -uninstigated -uninstigative -uninstilled -uninstinctive -uninstituted -uninstitutional -uninstitutive -uninstructed -uninstructible -uninstructing -uninstructive -uninstrumental -uninsular -uninsultable -uninsulted -uninsulting -uninsurable -uninsured -unintegrable -unintegral -unintegrated -unintegrative -unintellective -unintellectual -unintelligent -unintended -unintensified -unintensive -unintent -unintentional -unintercalated -unintercepted -unintercepting -uninterchangeable -uninterdicted -uninterested -uninteresting -uninterjected -uninterlaced -uninterleaved -uninterlinked -uninterlocked -unintermediate -unintermingled -unintermissive -unintermitted -unintermittent -unintermitting -uninternalized -uninternational -uninterpleaded -uninterpolated -uninterpolative -uninterposed -uninterposing -uninterpretable -uninterpretative -uninterpreted -uninterpretive -uninterred -uninterrogable -uninterrogated -uninterrogative -uninterrogatory -uninterrupted -uninterrupting -uninterruptive -unintersected -unintersecting -uninterspersed -unintervening -uninterviewed -unintervolved -uninterwoven -uninthralled -unintimate -unintimated -unintimidated -unintimidating -unintoned -unintoxicated -unintoxicating -unintrenchable -unintrenched -unintricate -unintrigued -unintriguing -unintrlined -unintroduced -unintroducible -unintroductive -unintroductory -unintromitted -unintromittive -unintrospective -unintroversive -unintroverted -unintruded -unintruding -unintrusive -unintrusted -unintuitable -unintuitional -unintuitive -uninundated -uninured -uninurned -uninvadable -uninvaded -uninvaginated -uninvasive -uninvective -uninveighing -uninveigled -uninvented -uninventive -uninverted -uninvertible -uninvestable -uninvested -uninvestigable -uninvestigated -uninvestigating -uninvestigative -uninvestigatory -uninvidious -uninvigorated -uninvigorating -uninvigorative -uninvincible -uninvited -uninviting -uninvocative -uninvoiced -uninvokable -uninvoked -uninvoluted -uninvolved -uninwoven -uninwrapped -uninwreathed -uniocular -unionistic -uniparous -unipersonal -unipetalous -uniplanar -unipolar -unipotential -unique -uniramous -unirascible -unirenic -uniridescent -unironed -unironical -unirradiated -unirradiative -unirrigable -unirrigated -unirritable -unirritant -unirritated -unirritating -unirritative -unirrupted -unirruptive -uniseptate -unisex -unisexual -unisolationist -unisolative -unisomeric -unisometrical -unisomorphic -unisotropic -unisotropous -unissuable -unissuant -unissued -unitable -unitage -unitalicized -unitary -uniteable -united -unitemized -uniterated -uniterative -unitinerant -unitive -univalent -univalve -universal -univocal -unjacketed -unjaded -unjagged -unjailed -unjapanned -unjarred -unjarring -unjaundiced -unjaunty -unjealous -unjeered -unjeering -unjelled -unjellied -unjeopardised -unjeopardized -unjesting -unjeweled -unjewelled -unjilted -unjocose -unjocund -unjogged -unjogging -unjoinable -unjointured -unjoking -unjolly -unjolted -unjostled -unjournalistic -unjournalized -unjovial -unjoyed -unjoyful -unjoyous -unjubilant -unjudgable -unjudgeable -unjudged -unjudgelike -unjudging -unjudicable -unjudicative -unjudiciable -unjudicial -unjuggled -unjuicy -unjumbled -unjumpable -unjuridic -unjuridical -unjust -unjustifiable -unjustified -unjuvenile -unkeeled -unkempt -unkenned -unkept -unkeyed -unkidnaped -unkidnapped -unkilled -unkilling -unkilned -unkind -unkindhearted -unkindled -unkindling -unkinged -unkinglike -unkingly -unkissed -unkneaded -unkneeling -unknelled -unknighted -unknightly -unknittable -unknocked -unknocking -unknotty -unknowable -unknowing -unknowledgeable -unknown -unlabeled -unlabelled -unlabiate -unlabored -unlaboring -unlaborious -unlaboured -unlabouring -unlacerated -unlacerating -unlackeyed -unlaconic -unlacquered -unladen -unladled -unlagging -unlaid -unlame -unlamed -unlamentable -unlamented -unlaminated -unlampooned -unlanced -unlanded -unlandmarked -unlanguid -unlanguishing -unlanterned -unlapped -unlapsed -unlapsing -unlarcenous -unlarded -unlarge -unlassoed -unlasting -unlathered -unlatticed -unlaudable -unlaudative -unlaudatory -unlauded -unlaughing -unlaunched -unlaundered -unlaureled -unlaurelled -unlaved -unlaving -unlavish -unlavished -unlawful -unlawyerlike -unlayable -unleached -unleaded -unleaflike -unleakable -unleaky -unlean -unlearned -unlearning -unlearnt -unleasable -unleased -unleathered -unleaved -unleavenable -unleavened -unlecherous -unlectured -unled -unledged -unleft -unlegal -unlegalised -unlegalized -unlegible -unlegislated -unlegislative -unleisured -unleisurely -unlengthened -unlenient -unlensed -unlent -unlessened -unlet -unlethal -unlethargic -unlethargical -unlettered -unlevel -unleveled -unlevelled -unleviable -unlevied -unlevigated -unlexicographical -unliable -unlibeled -unlibelled -unlibellous -unlibelous -unliberal -unliberalised -unliberalized -unliberated -unlibidinous -unlicensed -unlicentiated -unlicentious -unlichened -unlidded -unlifelike -unliftable -unlifted -unlifting -unligatured -unlight -unlighted -unlightened -unlignified -unlikable -unlike -unlikeable -unliked -unlikely -unlikened -unlimed -unlimited -unlimned -unlimp -unlineal -unlined -unlingering -unlionised -unlionized -unliquefiable -unliquefied -unliquescent -unliquid -unliquidated -unliquidating -unlisping -unlisted -unlistening -unlit -unliteral -unliteralised -unliteralized -unliterary -unliterate -unlithographic -unlitigated -unlitigating -unlitigious -unlittered -unlivable -unliveable -unlively -unliveried -unliving -unloafing -unloaned -unloaning -unloath -unloathed -unloathful -unloathsome -unlobbied -unlobbying -unlobed -unlocal -unlocalisable -unlocalizable -unlocated -unlocative -unlockable -unlocomotive -unlodged -unlofty -unlogged -unlogical -unlogistic -unlogistical -unlonely -unlooked -unlooted -unlopped -unloquacious -unlosable -unlost -unlotted -unloudly -unlounging -unlovable -unloveable -unloved -unlovely -unloving -unlowered -unlowly -unloyal -unlubricant -unlubricated -unlubricating -unlubricative -unlubricious -unlucent -unlucid -unluckier -unluckiest -unlucky -unlucrative -unludicrous -unluffed -unlugged -unlugubrious -unlumbering -unluminescent -unluminiferous -unluminous -unlumped -unlumpy -unlunar -unlunate -unlunated -unlured -unlurking -unlush -unlustered -unlustful -unlusting -unlustred -unlustrous -unlusty -unluxated -unluxuriant -unluxuriating -unluxurious -unlying -unlyric -unlyrical -unmacadamized -unmacerated -unmachinable -unmachinated -unmachinating -unmachineable -unmachined -unmad -unmadded -unmaddened -unmagical -unmagisterial -unmagnanimous -unmagnetic -unmagnetical -unmagnetised -unmagnetized -unmagnified -unmagnifying -unmaidenlike -unmaidenly -unmailable -unmailed -unmaimable -unmaimed -unmaintainable -unmaintained -unmajestic -unmakable -unmalarial -unmaledictive -unmaledictory -unmalevolent -unmalicious -unmalignant -unmaligned -unmalleable -unmaltable -unmalted -unmammalian -unmanacled -unmanageable -unmanaged -unmandated -unmandatory -unmaned -unmaneuvered -unmanful -unmangled -unmaniacal -unmanicured -unmanifest -unmanifestative -unmanifested -unmanipulable -unmanipulatable -unmanipulated -unmanipulative -unmanipulatory -unmanly -unmanned -unmannered -unmannerly -unmannish -unmanoeuvred -unmantled -unmanual -unmanufacturable -unmanufactured -unmanumitted -unmanurable -unmappable -unmarbled -unmarching -unmarginal -unmarginated -unmarine -unmaritime -unmarkable -unmarked -unmarketable -unmarketed -unmarled -unmarred -unmarriageable -unmarried -unmarring -unmarrying -unmarshaled -unmarshalled -unmartial -unmartyred -unmarvellous -unmarvelous -unmasculine -unmashed -unmasked -unmasking -unmassacred -unmassed -unmasterable -unmastered -unmasterful -unmasticated -unmasticatory -unmatchable -unmatched -unmatching -unmaterial -unmaterialised -unmaterialistic -unmaterialized -unmaternal -unmathematical -unmatriculated -unmatrimonial -unmatted -unmaturative -unmature -unmatured -unmaturing -unmaudlin -unmauled -unmeandering -unmeaning -unmeaningful -unmeant -unmeasurable -unmeasured -unmechanical -unmechanised -unmechanistic -unmechanized -unmedaled -unmedalled -unmeddled -unmeddlesome -unmeddling -unmediaeval -unmediated -unmediating -unmediative -unmedicable -unmedical -unmedicated -unmedicative -unmedicinal -unmedieval -unmeditated -unmeditating -unmeditative -unmeet -unmelancholic -unmelancholy -unmeliorated -unmellifluent -unmellifluous -unmellow -unmellowed -unmelodic -unmelodious -unmelodised -unmelodized -unmelodramatic -unmeltable -unmelted -unmelting -unmemorable -unmemorialised -unmemorialized -unmemoried -unmenaced -unmenacing -unmendable -unmendacious -unmended -unmenial -unmenstruating -unmensurable -unmental -unmentholated -unmentionable -unmentioned -unmercantile -unmercenary -unmercerized -unmerchandised -unmerchantable -unmerchantly -unmerciful -unmercurial -unmeretricious -unmeridional -unmeringued -unmeritable -unmerited -unmeriting -unmeritorious -unmerry -unmesmeric -unmesmerised -unmesmerized -unmet -unmetaled -unmetalised -unmetalized -unmetalled -unmetallic -unmetallurgic -unmetallurgical -unmetamorphic -unmetamorphosed -unmetaphysic -unmetaphysical -unmeted -unmeteorologic -unmeteorological -unmetered -unmethodic -unmethodical -unmethodised -unmethodising -unmethodized -unmethodizing -unmethylated -unmeticulous -unmetred -unmetric -unmetrical -unmetrified -unmetropolitan -unmiasmal -unmiasmatic -unmiasmatical -unmiasmic -unmicaceous -unmicrobial -unmicrobic -unmicroscopic -unmigrant -unmigrating -unmigrative -unmigratory -unmildewed -unmilitant -unmilitarised -unmilitaristic -unmilitarized -unmilitary -unmilked -unmilled -unmilted -unmimeographed -unmimetic -unmimicked -unminced -unmincing -unmindful -unminding -unmined -unmineralised -unmineralized -unmingled -unminimised -unminimising -unminimized -unminimizing -unministered -unministerial -unministrant -unministrative -unminted -unminuted -unmiracled -unmiraculous -unmired -unmirrored -unmirthful -unmiry -unmisanthropic -unmisanthropical -unmischievous -unmiscible -unmiserly -unmisgiving -unmisguided -unmisinterpretable -unmisled -unmissable -unmissed -unmistakable -unmistaken -unmistaking -unmistrusted -unmistrustful -unmistrusting -unmisunderstandable -unmisunderstood -unmitigable -unmitigated -unmitigative -unmittened -unmixable -unmixed -unmoaned -unmoaning -unmoated -unmobbed -unmobile -unmobilised -unmobilized -unmocked -unmocking -unmodeled -unmodelled -unmoderated -unmoderating -unmodern -unmodernised -unmodernized -unmodest -unmodifiable -unmodificative -unmodified -unmodish -unmodulated -unmodulative -unmoiled -unmoldable -unmoldered -unmoldering -unmoldy -unmolested -unmolesting -unmollifiable -unmollified -unmollifying -unmolten -unmomentous -unmonarchic -unmonarchical -unmonastic -unmonetary -unmonistic -unmonitored -unmonogrammed -unmonopolised -unmonopolising -unmonopolized -unmonopolizing -unmonotonous -unmonumental -unmonumented -unmoody -unmooted -unmopped -unmoral -unmoralising -unmoralistic -unmoralizing -unmorbid -unmordant -unmoribund -unmorose -unmorphological -unmortal -unmortared -unmortgageable -unmortified -unmossed -unmossy -unmothered -unmotherly -unmotile -unmotionable -unmotioned -unmotioning -unmotivated -unmotivating -unmotored -unmotorised -unmotorized -unmottled -unmouldable -unmouldered -unmouldering -unmouldy -unmounded -unmountable -unmountainous -unmounted -unmounting -unmourned -unmournful -unmourning -unmouthable -unmouthed -unmovable -unmoveable -unmoved -unmoving -unmowed -unmown -unmucilaged -unmudded -unmuddied -unmuddled -unmuddy -unmulcted -unmulish -unmulled -unmullioned -unmultipliable -unmultiplicable -unmultiplicative -unmultiplied -unmultiplying -unmumbled -unmumbling -unmummied -unmummified -unmummifying -unmunched -unmundane -unmundified -unmunicipalised -unmunicipalized -unmunificent -unmunitioned -unmurmured -unmurmuring -unmurmurous -unmuscled -unmuscular -unmusical -unmusicianly -unmusing -unmusked -unmusterable -unmustered -unmutable -unmutant -unmutated -unmutational -unmutative -unmuted -unmutilated -unmutilative -unmutinous -unmuttered -unmuttering -unmutual -unmutualised -unmutualized -unmyopic -unmysterious -unmystic -unmystical -unmystified -unmythical -unmythological -unnacreous -unnagged -unnagging -unnaked -unnamable -unnameable -unnamed -unnaove -unnapped -unnarcissistic -unnarcotic -unnarratable -unnarrated -unnarrative -unnarrow -unnarrowed -unnasal -unnascent -unnational -unnationalised -unnationalistic -unnationalized -unnative -unnatural -unnaturalistic -unnauseated -unnauseating -unnautical -unnavigable -unnavigated -unneat -unnecessary -unnecessitated -unnecessitating -unnecessitous -unnectareous -unnectarial -unneeded -unneedful -unneedy -unnefarious -unnegated -unneglected -unneglectful -unnegligent -unnegotiable -unnegotiated -unneighborly -unneighbourly -unnephritic -unnervous -unnestled -unnetted -unnettled -unneural -unneuralgic -unneurotic -unneutral -unnew -unnibbed -unnibbled -unnice -unniched -unnicked -unnicknamed -unniggard -unnigh -unnihilistic -unnimble -unnipped -unnitrogenised -unnitrogenized -unnitrogenous -unnocturnal -unnodding -unnoised -unnoisy -unnomadic -unnominal -unnominalistic -unnominated -unnominative -unnoosed -unnormal -unnormalised -unnormalising -unnormalized -unnormalizing -unnormative -unnorthern -unnosed -unnotable -unnotational -unnotched -unnoted -unnoteworthy -unnoticeable -unnoticed -unnoticing -unnotified -unnoting -unnotional -unnotioned -unnourishable -unnourished -unnourishing -unnovel -unnovercal -unnucleated -unnullified -unnumbed -unnumbered -unnumerated -unnumerical -unnumerous -unnurtured -unnutritious -unnutritive -unnuzzled -unnymphal -unnymphean -unnymphlike -unoared -unobdurate -unobese -unobeyed -unobeying -unobfuscated -unobjected -unobjectified -unobjectionable -unobjectional -unobjective -unobjectivized -unobligated -unobligative -unobligatory -unobliged -unobliging -unobliterated -unoblivious -unobnoxious -unobscene -unobscure -unobscured -unobsequious -unobservable -unobservant -unobserved -unobserving -unobsessed -unobsolete -unobstinate -unobstructed -unobstructive -unobstruent -unobtainable -unobtained -unobtruded -unobtruding -unobtrusive -unobverted -unobviable -unobviated -unobvious -unoccasional -unoccidental -unoccluded -unoccupied -unoccurring -unoceanic -unocular -unodious -unodored -unodoriferous -unodorous -unoecumenic -unoecumenical -unoffendable -unoffended -unoffending -unoffensive -unoffered -unofficed -unofficered -unofficial -unofficiated -unofficiating -unofficious -unogled -unoiled -unoiling -unoily -unomened -unominous -unomitted -unomnipotent -unomniscient -unonerous -unontological -unopened -unopening -unoperatable -unoperated -unoperatic -unoperating -unoperative -unopiated -unopiatic -unopined -unopinionated -unopinioned -unopportune -unopportunistic -unopposable -unopposed -unopposing -unoppositional -unoppressed -unoppressive -unopprobrious -unoppugned -unopressible -unopted -unoptimistic -unoptimistical -unoptional -unopulent -unoral -unorational -unoratorial -unoratorical -unorbed -unorbital -unorchestrated -unordainable -unordained -unorderable -unordered -unorderly -unordinal -unordinary -unorganic -unorganisable -unorganizable -unorganized -unoriental -unoriginal -unornamental -unornamented -unornate -unornithological -unorphaned -unorthodox -unorthodoxy -unorthographical -unoscillating -unosculated -unosmotic -unossified -unossifying -unostensible -unostensive -unostentatious -unousted -unoutlawed -unoutraged -unoutspoken -unoutworn -unovercome -unoverdrawn -unoverflowing -unoverhauled -unoverlooked -unoverpaid -unoverpowered -unoverruled -unovert -unovertaken -unoverthrown -unoverwhelmed -unowing -unowned -unoxidated -unoxidative -unoxidisable -unoxidised -unoxidizable -unoxidized -unoxygenated -unoxygenized -unpaced -unpacifiable -unpacific -unpacified -unpacifist -unpacifistic -unpackaged -unpadded -unpadlocked -unpagan -unpaged -unpaginal -unpaginated -unpaid -unpained -unpainful -unpaining -unpainted -unpaired -unpalatable -unpalatal -unpalatial -unpale -unpaled -unpalisaded -unpalisadoed -unpalled -unpalliated -unpalliative -unpalpable -unpalpitating -unpalsied -unpaltry -unpampered -unpanegyrised -unpanegyrized -unpaneled -unpanelled -unpanicky -unpanniered -unpanoplied -unpantheistic -unpantheistical -unpanting -unpapal -unpapered -unparaded -unparadoxal -unparadoxical -unparagraphed -unparallel -unparalleled -unparalysed -unparalyzed -unparaphrased -unparasitic -unparasitical -unparceled -unparceling -unparcelled -unparcelling -unparched -unparching -unpardonable -unpardoned -unpardoning -unpared -unparental -unparenthesised -unparenthesized -unparenthetic -unparenthetical -unpargeted -unparked -unparking -unparliamentary -unparliamented -unparochial -unparodied -unparolable -unparoled -unparried -unparrying -unparsed -unparsimonious -unpartaken -unpartaking -unparted -unpartible -unparticipant -unparticipated -unparticipating -unparticipative -unparticular -unparticularised -unparticularising -unparticularized -unparticularizing -unpartisan -unpartitioned -unpartitive -unpartizan -unpassed -unpassing -unpassionate -unpassioned -unpassive -unpasteurised -unpasteurized -unpastoral -unpastured -unpatched -unpatent -unpatentable -unpatented -unpaternal -unpathetic -unpathological -unpatient -unpatinated -unpatriarchal -unpatrician -unpatriotic -unpatristic -unpatristical -unpatrolled -unpatronisable -unpatronizable -unpatronizing -unpatted -unpatterned -unpatternized -unpausing -unpaved -unpavilioned -unpaving -unpawed -unpawned -unpayable -unpaying -unpeaceable -unpeaceful -unpeaked -unpealed -unpearled -unpebbled -unpecked -unpeculating -unpeculiar -unpedagogic -unpedantic -unpedantical -unpeddled -unpedigreed -unpeelable -unpeeled -unpeeling -unpeevish -unpejorative -unpelted -unpenal -unpenalised -unpenalized -unpenanced -unpenciled -unpencilled -unpendant -unpendent -unpending -unpendulous -unpenetrable -unpenetrant -unpenetrated -unpenetrating -unpenetrative -unpenitent -unpenitential -unpennied -unpennoned -unpensionable -unpensioned -unpensioning -unpent -unpenurious -unpeppered -unpeppery -unperceivable -unperceived -unperceiving -unperceptible -unperceptional -unperceptive -unperceptual -unperched -unpercipient -unpercolated -unpercussed -unpercussive -unperdurable -unperemptory -unperfect -unperfected -unperfectible -unperfective -unperfidious -unperforable -unperforated -unperforating -unperforative -unperformable -unperformed -unperforming -unperfumed -unperilous -unperiodic -unperiodical -unperipheral -unperiphrastic -unperishable -unperished -unperishing -unperjured -unperjuring -unpermanent -unpermeable -unpermeant -unpermeated -unpermeating -unpermeative -unpermissible -unpermissive -unpermitted -unpermitting -unpernicious -unperpendicular -unperpetrated -unperpetuable -unperpetuated -unperpetuating -unperplexed -unperplexing -unpersecuted -unpersecuting -unpersecutive -unpersisting -unpersonable -unpersonal -unpersonalised -unpersonalising -unpersonalized -unpersonalizing -unpersonified -unpersonifying -unperspicuous -unperspired -unperspiring -unpersuadable -unpersuaded -unpersuasible -unpersuasive -unpertaining -unpertinent -unperturbable -unperturbed -unperturbing -unperuked -unperusable -unperused -unpervaded -unpervading -unpervasive -unperverse -unperversive -unperverted -unpervious -unpessimistic -unpestered -unpesterous -unpestilent -unpestilential -unpetaled -unpetalled -unpetitioned -unpetrified -unpetrifying -unpetted -unpetticoated -unpetulant -unphased -unphenomenal -unphilanthropic -unphilologic -unphilological -unphilosophic -unphilosophical -unphlegmatic -unphlegmatical -unphonetic -unphonnetical -unphosphatised -unphosphatized -unphotographable -unphotographed -unphrased -unphysical -unphysiological -unpicaresque -unpickable -unpicked -unpicketed -unpickled -unpictorial -unpictured -unpicturesque -unpieced -unpierceable -unpierced -unpiercing -unpigmented -unpilfered -unpillaged -unpillared -unpilloried -unpillowed -unpiloted -unpimpled -unpinched -unpinioned -unpioneering -unpious -unpiped -unpiqued -unpirated -unpiratical -unpitched -unpiteous -unpitiable -unpitied -unpitiful -unpitted -unpitying -unplacated -unplacatory -unplaced -unplacid -unplagiarised -unplagiarized -unplagued -unplaned -unplanished -unplanked -unplantable -unplanted -unplashed -unplastic -unplated -unplatitudinous -unplatted -unplausible -unplayable -unplayed -unplayful -unplaying -unpleached -unpleadable -unpleaded -unpleading -unpleasable -unpleasant -unpleased -unpleasing -unpleasurable -unpleated -unplebeian -unpledged -unplenished -unplenteous -unplentiful -unpliable -unpliant -unplied -unplighted -unplodding -unplotted -unplotting -unploughed -unplowed -unplucked -unplumb -unplumbed -unplumed -unplummeted -unplundered -unplunderous -unplunged -unpluralised -unpluralistic -unpluralized -unplutocratic -unplutocratical -unpneumatic -unpoached -unpodded -unpoetic -unpoetical -unpoeticised -unpoeticized -unpoetized -unpoignant -unpointed -unpointing -unpoised -unpoisonable -unpoisoned -unpoisonous -unpolarised -unpolarized -unpoled -unpolemic -unpolemical -unpoliced -unpolishable -unpolished -unpolite -unpolitic -unpolitical -unpollarded -unpolled -unpollened -unpolluted -unpolluting -unpolymerised -unpolymerized -unpompous -unponderable -unpondered -unponderous -unpontifical -unpooled -unpopular -unpopularised -unpopularized -unpopulated -unpopulous -unporcelainized -unpornographic -unporous -unportable -unportended -unportentous -unporticoed -unportionable -unportioned -unportly -unportrayable -unportrayed -unposed -unposing -unpositive -unpositivistic -unpossessable -unpossessed -unpossessing -unpossessive -unposted -unpostered -unpostmarked -unpostponable -unpostponed -unpostulated -unpotable -unpotent -unpouched -unpoulticed -unpounced -unpounded -unpourable -unpoured -unpouting -unpowdered -unpracticable -unpractical -unpracticed -unpractised -unpragmatic -unpragmatical -unpraisable -unpraised -unpraiseful -unpraiseworthy -unpraising -unpranked -unprating -unprayerful -unpraying -unpreached -unpreaching -unprecarious -unprecautioned -unpreceded -unprecedented -unprecedential -unpreceptive -unprecious -unprecipiced -unprecipitant -unprecipitate -unprecipitated -unprecipitative -unprecipitous -unprecise -unprecisive -unprecludable -unprecluded -unpreclusive -unprecocious -unpredaceous -unpredacious -unpredatory -unpredestined -unpredicable -unpredicated -unpredicative -unpredictable -unpredicted -unpredicting -unpredictive -unpredisposed -unpredisposing -unpreempted -unpreened -unprefaced -unpreferable -unpreferred -unprefigured -unprefixal -unprefixed -unpregnant -unprejudiced -unprejudicial -unprelatic -unpreluded -unpremature -unpremeditated -unpremonished -unpreoccupied -unpreordained -unprepared -unpreparing -unpreponderated -unpreponderating -unprepossessing -unpreposterous -unpresaged -unpresaging -unprescient -unprescinded -unprescribed -unpresentable -unpresentative -unpresented -unpreservable -unpreserved -unpresidential -unpresiding -unpressed -unpressured -unpresumable -unpresumed -unpresuming -unpresumptive -unpresumptuous -unpretended -unpretentious -unpretermitted -unpreternatural -unprettified -unpretty -unprevailing -unprevalent -unprevaricating -unpreventable -unpreventative -unprevented -unpreventible -unpreventive -unpreviewed -unpreying -unpriced -unpricked -unprickled -unprideful -unpriestlike -unpriestly -unpriggish -unprim -unprimed -unprimitive -unprimitivistic -unprimmed -unprincely -unprincipled -unprintable -unprinted -unprismatic -unprismatical -unprisonable -unprivate -unprivileged -unprizable -unprized -unprobated -unprobational -unprobationary -unprobative -unprobed -unproblematic -unproblematical -unprocessed -unprocessional -unproclaimed -unprocrastinated -unprocreant -unprocreated -unproctored -unprocurable -unprocured -unprodded -unprodigious -unproduced -unproducible -unproductive -unprofanable -unprofane -unprofaned -unprofessed -unprofessing -unprofessional -unprofessorial -unproffered -unprofitable -unprofited -unprofiteering -unprofiting -unprofound -unprofuse -unprognosticated -unprognosticative -unprogrammatic -unprogressed -unprogressive -unprohibited -unprohibitive -unprojected -unprojecting -unprojective -unproliferous -unprolific -unprolix -unprologued -unprolongable -unprolonged -unpromiscuous -unpromised -unpromising -unpromotable -unpromoted -unpromotional -unpromotive -unprompt -unprompted -unpromulgated -unpronounceable -unpronounced -unpronouncing -unproofread -unpropagable -unpropagandistic -unpropagated -unpropagative -unpropelled -unpropellent -unproper -unpropertied -unprophesied -unprophetic -unprophetical -unpropitiable -unpropitiated -unpropitiating -unpropitiative -unpropitiatory -unpropitious -unproportionable -unproportional -unproportionate -unproportioned -unproposable -unproposed -unproposing -unpropounded -unpropped -unprorogued -unprosaic -unprosaical -unproscribable -unproscribed -unproscriptive -unprospered -unprospering -unprosperous -unprostituted -unprostrated -unprotectable -unprotected -unprotecting -unprotective -unprotestant -unprotested -unprotesting -unprotracted -unprotractive -unprotruded -unprotrudent -unprotruding -unprotrusible -unprotrusive -unprotuberant -unproud -unprovable -unproved -unproven -unproverbial -unprovidable -unprovided -unprovident -unprovidential -unprovincial -unproving -unprovisional -unprovisioned -unprovocative -unprovokable -unprovoked -unprovoking -unprowling -unprudent -unprudential -unprunable -unpruned -unprying -unpsychic -unpsychological -unpsychopathic -unpsychotic -unpublic -unpublicized -unpublishable -unpublished -unpuckered -unpuddled -unpuffed -unpuffing -unpugilistic -unpugnacious -unpulleyed -unpulped -unpulsating -unpulsative -unpulverable -unpulverised -unpulverized -unpulvinate -unpulvinated -unpummeled -unpummelled -unpumpable -unpumped -unpunctate -unpunctated -unpunctilious -unpunctual -unpunctuated -unpunctuating -unpunctured -unpunishable -unpunished -unpunishing -unpunitive -unpurchasable -unpurchased -unpure -unpurgative -unpurgeable -unpurged -unpurified -unpurifying -unpuristic -unpuritan -unpuritanic -unpuritanical -unpurled -unpurloined -unpurported -unpurposed -unpurposing -unpurposive -unpursuable -unpursuant -unpursued -unpursuing -unpushed -unputative -unputrefiable -unputrefied -unputrid -unputtied -unquadded -unquaffed -unquailing -unquaking -unqualifiable -unqualified -unqualifying -unquantified -unquantitative -unquarantined -unquarreling -unquarrelling -unquarrelsome -unquarried -unquartered -unquashed -unquavering -unquayed -unqueenly -unquellable -unquelled -unquenchable -unquenched -unqueried -unquerulous -unquested -unquestionable -unquestioned -unquestioning -unquibbling -unquick -unquickened -unquiet -unquietable -unquieted -unquieting -unquilted -unquitted -unquivered -unquivering -unquixotic -unquixotical -unquizzable -unquizzed -unquizzical -unquotable -unquoted -unrabbeted -unrabbinic -unrabbinical -unradiant -unradiated -unradiative -unradical -unradioactive -unraffled -unraftered -unraided -unrailed -unrailroaded -unrailwayed -unrainy -unraisable -unraiseable -unraised -unraked -unraking -unrallied -unrallying -unrambling -unramified -unrammed -unramped -unranched -unrancid -unrancored -unrancorous -unrancoured -unrancourous -unranging -unranked -unrankled -unransacked -unransomable -unransomed -unranting -unrapacious -unraped -unraptured -unrapturous -unrarefied -unrash -unrasped -unrasping -unraspy -unratable -unrated -unratified -unrationable -unrational -unrationalised -unrationalising -unrationalized -unrationalizing -unrationed -unravaged -unraving -unravished -unrayed -unrazed -unrazored -unreachable -unreached -unreactionary -unreactive -unread -unreadable -unready -unreal -unrealistic -unrealizable -unrealmed -unreaped -unreared -unreasonable -unreasoned -unreasoning -unreassuring -unreaving -unrebated -unrebellious -unrebuffable -unrebuffed -unrebuilt -unrebukable -unrebuked -unrebuttable -unrebutted -unrecalcitrant -unrecallable -unrecalled -unrecanted -unrecanting -unrecaptured -unreceding -unreceipted -unreceivable -unreceiving -unreceptive -unrecessive -unrecipient -unreciprocal -unreciprocated -unreciprocating -unrecitative -unrecited -unreckonable -unreckoned -unreclaimable -unreclaimed -unreclaiming -unreclined -unreclining -unrecluse -unreclusive -unrecognisable -unrecognitory -unrecognizable -unrecognized -unrecognizing -unrecollected -unrecollective -unrecommendable -unrecommended -unrecompensable -unrecompensed -unreconcilable -unreconciled -unreconciling -unrecondite -unreconnoitered -unreconnoitred -unreconsidered -unreconstructed -unreconstructible -unrecordable -unrecorded -unrecountable -unrecounted -unrecoverable -unrecreant -unrecreational -unrecriminative -unrecruitable -unrecruited -unrectangular -unrectifiable -unrectified -unrecumbent -unrecuperated -unrecuperative -unrecuperatory -unrecurrent -unrecurring -unrecusant -unredacted -unredeemable -unredeeming -unredemptive -unredressable -unredressed -unreduced -unreducible -unreefed -unreelable -unreferenced -unreferred -unrefilled -unrefined -unrefining -unrefitted -unreflected -unreflecting -unreflective -unreformable -unreformative -unreformed -unreforming -unrefracted -unrefracting -unrefractive -unrefractory -unrefrainable -unrefrained -unrefraining -unrefrangible -unrefreshed -unrefreshing -unrefrigerated -unrefulgent -unrefundable -unrefunded -unrefunding -unrefusable -unrefused -unrefusing -unrefutable -unrefuted -unrefuting -unregainable -unregained -unregal -unregaled -unregardable -unregardant -unregarded -unregardful -unregenerable -unregenerate -unregenerating -unregenerative -unregimental -unregimented -unregistered -unregistrable -unregressive -unregretful -unregrettable -unregretted -unregretting -unregulable -unregularised -unregularized -unregulated -unregulative -unregulatory -unregurgitated -unrehabilitated -unrehearsable -unrehearsed -unrehearsing -unreigning -unreined -unreinforced -unreinstated -unreiterable -unreiterated -unreiterating -unreiterative -unrejectable -unrejected -unrejective -unrejoiced -unrejoicing -unrejuvenated -unrejuvenating -unrelapsing -unrelated -unrelating -unrelational -unrelative -unrelativistic -unrelaxable -unrelaxed -unrelaxing -unrelayed -unreleasable -unreleased -unreleasible -unreleasing -unrelegable -unrelegated -unrelented -unrelenting -unrelevant -unreliable -unreliant -unrelievable -unrelieved -unrelieving -unreligioned -unreligious -unrelinquishable -unrelinquished -unrelinquishing -unrelishable -unrelished -unrelishing -unreluctant -unremaining -unremanded -unremarkable -unremarked -unremarried -unremediable -unremedied -unremembered -unremembering -unreminded -unreminiscent -unremissible -unremissive -unremittable -unremitted -unremitting -unremonstrant -unremonstrated -unremonstrating -unremonstrative -unremorseful -unremote -unremounted -unremovable -unremoved -unremunerated -unremunerative -unrenderable -unrendered -unrenewable -unrenewed -unrenounceable -unrenounced -unrenouncing -unrenovated -unrenovative -unrenowned -unrent -unrentable -unrented -unrenunciable -unrenunciative -unrenunciatory -unreorganised -unreorganized -unrepaid -unrepaired -unrepayable -unrepealable -unrepealed -unrepeatable -unrepeated -unrepellable -unrepelled -unrepellent -unrepentant -unrepented -unrepenting -unrepetitious -unrepetitive -unrepined -unrepining -unreplaceable -unreplaced -unreplenished -unreplete -unreplevinable -unreplevined -unreplevisable -unreplied -unreplying -unreportable -unreported -unreportorial -unreposed -unreposeful -unreposing -unrepossessed -unreprehended -unreprehensible -unrepresentable -unrepresentational -unrepresentative -unrepresented -unrepressed -unrepressible -unrepressive -unreprievable -unreprieved -unreprimanded -unreprimanding -unreprinted -unreproachable -unreproached -unreproachful -unreproaching -unreprobated -unreprobative -unreproducible -unreproductive -unreprovable -unreproved -unreproving -unrepublican -unrepudiable -unrepudiated -unrepudiative -unrepugnant -unrepulsed -unrepulsing -unrepulsive -unreputable -unreputed -unrequalified -unrequested -unrequired -unrequisite -unrequisitioned -unrequitable -unrequited -unrequiting -unrescinded -unrescissable -unrescissory -unrescuable -unrescued -unresearched -unresemblant -unresembling -unresented -unresentful -unresenting -unreserved -unresident -unresidential -unresidual -unresigned -unresilient -unresinous -unresistable -unresistant -unresisted -unresistible -unresisting -unresistive -unresolute -unresolvable -unresolved -unresolving -unresonant -unresonating -unresounded -unresourceful -unrespectable -unrespected -unrespectful -unrespirable -unrespired -unrespited -unresplendent -unresponding -unresponsible -unresponsive -unrested -unrestful -unresting -unrestitutive -unrestorable -unrestorative -unrestored -unrestrainable -unrestrained -unrestrictable -unrestricted -unrestrictive -unresumed -unresumptive -unresurrected -unresuscitable -unresuscitated -unresuscitating -unresuscitative -unretainable -unretained -unretaining -unretaliated -unretaliating -unretaliative -unretaliatory -unretardable -unretarded -unretentive -unreticent -unretinued -unretired -unretiring -unretorted -unretouched -unretractable -unretracted -unretractive -unretreated -unretreating -unretrenchable -unretrenched -unretributive -unretributory -unretrievable -unretrieved -unretroactive -unretrograded -unretrograding -unretrogressive -unretted -unreturnable -unreturned -unreturning -unrevealable -unrevealed -unrevealing -unrevelational -unreveling -unrevelling -unrevenged -unrevengeful -unrevenging -unreverberant -unreverberated -unreverberating -unreverberative -unrevered -unreverenced -unreverent -unreverential -unreversed -unreversible -unreverted -unrevertible -unreverting -unrevetted -unreviewable -unreviewed -unreviled -unreviling -unrevised -unrevivable -unrevived -unrevocable -unrevokable -unrevoked -unrevolted -unrevolting -unrevolutionary -unrevolutionized -unrevolved -unrevolving -unrewardable -unrewarded -unrewarding -unreworded -unrhapsodic -unrhapsodical -unrhetorical -unrheumatic -unrhythmic -unrhythmical -unribbed -unribboned -unridable -unridden -unriddled -unridered -unridged -unridiculed -unridiculous -unrife -unriffled -unrifled -unrifted -unrightable -unrighted -unrighteous -unrightful -unrigid -unrigorous -unrimed -unringable -unringing -unrinsed -unrioting -unriotous -unripe -unripened -unripening -unrippable -unrippled -unrippling -unrisen -unrisible -unrising -unriskable -unrisked -unrisky -unritual -unritualistic -unrivalable -unrivaled -unrivaling -unrivalled -unrivalling -unrivalrous -unrived -unriven -unriveted -unriveting -unroaming -unroasted -unrobbed -unrobust -unrocked -unrocky -unrodded -unroiled -unrollable -unromantic -unromanticised -unromanticized -unroomy -unroosted -unroosting -unroped -unrosed -unrotary -unrotated -unrotating -unrotational -unrotative -unrotatory -unrotted -unrotten -unrotund -unrouged -unroughened -unrounded -unroused -unrousing -unroutable -unrouted -unroutine -unroving -unrowdy -unrowed -unroweled -unrowelled -unrubbed -unrubified -unrubrical -unrubricated -unruddered -unruddled -unrude -unrued -unrueful -unruffable -unruffed -unruffled -unrugged -unruinable -unruinous -unruled -unruly -unruminant -unruminated -unruminating -unruminative -unrummaged -unrumored -unrumoured -unrumpled -unrun -unrung -unrupturable -unruptured -unrural -unrushed -unrushing -unrustic -unrusticated -unrustling -unsabered -unsabled -unsabotaged -unsabred -unsaccharine -unsacerdotal -unsacked -unsacramental -unsacramentarian -unsacred -unsacrificeable -unsacrificed -unsacrificial -unsacrificing -unsacrilegious -unsad -unsaddened -unsadistic -unsafe -unsafetied -unsagacious -unsage -unsagging -unsaid -unsailable -unsailed -unsainted -unsaintly -unsalable -unsalacious -unsaleable -unsalient -unsaline -unsalivated -unsalivating -unsallow -unsallying -unsaltable -unsaltatorial -unsaltatory -unsalted -unsalty -unsalubrious -unsalutary -unsalutatory -unsaluted -unsaluting -unsalvageable -unsalvaged -unsalved -unsanctified -unsanctifying -unsanctimonious -unsanctionable -unsanctioned -unsanctioning -unsandaled -unsandalled -unsanded -unsanguinary -unsanguine -unsanguineous -unsanitary -unsanitized -unsapient -unsapiential -unsaponifiable -unsaponified -unsapped -unsarcastic -unsarcastical -unsardonic -unsartorial -unsashed -unsatable -unsatanic -unsatanical -unsatcheled -unsated -unsatiable -unsatiated -unsatiating -unsating -unsatiric -unsatirical -unsatirisable -unsatirised -unsatirizable -unsatirized -unsatisfactory -unsatisfiable -unsatisfied -unsaturable -unsaturated -unsauced -unsavable -unsavage -unsaveable -unsaved -unsaving -unsavored -unsavory -unsavoured -unsavoury -unsawed -unsawn -unsayable -unscabbed -unscabrous -unscaffolded -unscalable -unscalded -unscalding -unscaled -unscaling -unscalloped -unscaly -unscamped -unscandalised -unscandalized -unscandalous -unscannable -unscanned -unscanty -unscarce -unscared -unscarfed -unscarified -unscarred -unscarved -unscathed -unscattered -unscavenged -unscenic -unscented -unsceptered -unsceptical -unsceptred -unscheduled -unschematic -unschematised -unschematized -unschemed -unscheming -unschismatic -unschismatical -unschizoid -unschizophrenic -unscholarlike -unscholastic -unschooled -unscientific -unscintillant -unscintillating -unscissored -unscoffed -unscoffing -unscolded -unscolding -unsconced -unscooped -unscorched -unscorching -unscored -unscorified -unscoring -unscorned -unscornful -unscotched -unscoured -unscourged -unscourging -unscouring -unscowling -unscraped -unscraping -unscratchable -unscratched -unscratching -unscrawled -unscrawling -unscreenable -unscreened -unscribal -unscribbled -unscribed -unscrimped -unscripted -unscriptural -unscrubbed -unscrupled -unscrupulous -unscrutable -unscrutinised -unscrutinising -unscrutinized -unscrutinizing -unsculptural -unsculptured -unscummed -unsealable -unsealed -unsearchable -unsearched -unsearching -unseared -unseasonable -unseasoned -unseaworthy -unseceded -unseceding -unsecluded -unsecluding -unseclusive -unseconded -unsecretarial -unsecreted -unsecreting -unsecretive -unsectarian -unsectional -unsectionalised -unsectionalized -unsectioned -unsecular -unsecularised -unsecularized -unsecure -unsecured -unsedate -unsedative -unsedentary -unsedimental -unseditious -unseduced -unseducible -unseductive -unsedulous -unseeable -unseeded -unseeding -unseeing -unseeking -unseemly -unseen -unseethed -unseething -unsegmental -unsegmentary -unsegmented -unsegregable -unsegregated -unsegregating -unsegregational -unsegregative -unseignioral -unseignorial -unseismal -unseismic -unseizable -unseized -unselect -unselected -unselective -unselfconscious -unselfish -unsenescent -unsenile -unsensate -unsensational -unsensed -unsensible -unsensing -unsensitive -unsensory -unsensual -unsensualised -unsensualistic -unsensualized -unsensuous -unsent -unsentenced -unsententious -unsentient -unsentimental -unsentimentalised -unsentimentalized -unsentineled -unsentinelled -unseparable -unseparate -unseparated -unseparating -unseparative -unsepulchral -unsepultured -unsequenced -unsequent -unsequential -unsequestered -unseraphic -unseraphical -unsere -unserenaded -unserene -unserialised -unserialized -unserious -unserrate -unserrated -unserried -unservable -unserved -unserviceable -unserviced -unservile -unserving -unsesquipedalian -unset -unsetting -unsettleable -unsettled -unseverable -unsevere -unsevered -unsexual -unshabby -unshadowable -unshadowed -unshady -unshafted -unshakable -unshakeable -unshaken -unshaking -unshamable -unshameable -unshamed -unshammed -unshanked -unshapable -unshapeable -unshaped -unshapely -unshapen -unshaping -unsharable -unshareable -unshared -unsharing -unsharp -unsharped -unsharpened -unsharpening -unsharping -unshattered -unshavable -unshaveable -unshaved -unsheared -unshed -unshedding -unsheer -unsheeted -unsheeting -unsheltered -unsheltering -unshelved -unshepherded -unshepherding -unshieldable -unshielded -unshielding -unshifted -unshifting -unshifty -unshimmering -unshined -unshingled -unshining -unshiny -unshippable -unshipped -unshirked -unshirking -unshirred -unshirted -unshivered -unshivering -unshockable -unshocked -unshocking -unshod -unshoed -unshored -unshorn -unshort -unshorten -unshotted -unshouted -unshouting -unshoved -unshoveled -unshovelled -unshowable -unshowed -unshowered -unshowering -unshown -unshowy -unshredded -unshrewd -unshrewish -unshrill -unshrined -unshrinkable -unshrinking -unshrived -unshriveled -unshrivelled -unshriven -unshrugging -unshrunk -unshrunken -unshuddering -unshuffled -unshunnable -unshunned -unshunted -unshut -unshuttered -unshy -unsibilant -unsiccative -unsick -unsickened -unsicker -unsickered -unsided -unsidereal -unsiding -unsidling -unsieged -unsieved -unsifted -unsighing -unsight -unsighted -unsightly -unsignable -unsignaled -unsignalised -unsignalized -unsignalled -unsignatured -unsigned -unsigneted -unsignifiable -unsignificant -unsignificative -unsignified -unsignifying -unsilenced -unsilent -unsilhouetted -unsilicated -unsilicified -unsilly -unsilvered -unsimilar -unsimmered -unsimmering -unsimpering -unsimple -unsimplified -unsimplifying -unsimular -unsimulated -unsimulating -unsimulative -unsimultaneous -unsincere -unsinewed -unsinewing -unsinewy -unsinful -unsingable -unsinged -unsingle -unsingular -unsinister -unsinkable -unsinking -unsinning -unsinuate -unsinuated -unsinuous -unsipped -unsistered -unsisterly -unsituated -unsizable -unsizeable -unsized -unskeptical -unsketchable -unsketched -unskewed -unskewered -unskilful -unskilled -unskillful -unskimmed -unskinned -unskirted -unslack -unslacked -unslackened -unslackening -unslacking -unslagged -unslain -unslakable -unslakeable -unslaked -unslammed -unslandered -unslanderous -unslanted -unslanting -unslapped -unslashed -unslated -unslating -unslatted -unslaughtered -unslayable -unsleaved -unsleek -unsleeping -unsleepy -unsleeved -unslender -unsliced -unslicked -unsliding -unslighted -unslim -unslimmed -unslinking -unslipped -unslippered -unslippery -unslipping -unsloped -unsloping -unslopped -unslotted -unslouched -unslouching -unslouchy -unsloughed -unsloughing -unslow -unslowed -unsluggish -unsluiced -unslumbering -unslumbery -unslumbrous -unslumped -unslumping -unslung -unslurred -unsly -unsmacked -unsmarting -unsmashed -unsmeared -unsmelled -unsmelling -unsmelted -unsmiling -unsmirched -unsmirking -unsmitten -unsmocked -unsmokable -unsmokeable -unsmoked -unsmoking -unsmoky -unsmoldering -unsmooth -unsmoothed -unsmoothened -unsmotherable -unsmothered -unsmothering -unsmouldering -unsmudged -unsmug -unsmuggled -unsmutched -unsmutted -unsmutty -unsnaffled -unsnagged -unsnaky -unsnared -unsnatched -unsneaking -unsneaky -unsneering -unsnipped -unsnobbish -unsnoring -unsnouted -unsnubbed -unsnuffed -unsnug -unsoaked -unsoaped -unsoarable -unsoaring -unsober -unsobered -unsobering -unsociable -unsocial -unsocialised -unsocialising -unsocialistic -unsocializable -unsocialized -unsocializing -unsocially -unsociological -unsocketed -unsoft -unsoftening -unsoggy -unsoiled -unsoiling -unsolaced -unsolacing -unsolar -unsoldierlike -unsolemn -unsolemnified -unsolemnised -unsolemnized -unsolicitated -unsolicited -unsolicitous -unsolid -unsolidified -unsolitary -unsoluble -unsolvable -unsolved -unsomatic -unsomber -unsombre -unsomnolent -unsonant -unsonantal -unsonorous -unsonsy -unsoothable -unsoothed -unsoothing -unsooty -unsophistic -unsophistical -unsophisticated -unsophomoric -unsophomorical -unsoporiferous -unsoporific -unsordid -unsore -unsorrowing -unsorry -unsortable -unsotted -unsought -unsoulful -unsoulish -unsound -unsoundable -unsounded -unsounding -unsour -unsoused -unsovereign -unsowed -unsown -unspaced -unspacious -unspaded -unspangled -unspanked -unspared -unsparing -unsparked -unsparkling -unsparred -unsparse -unspasmed -unspasmodic -unspasmodical -unspatial -unspattered -unspawned -unspayed -unspeakable -unspeared -unspecialised -unspecialising -unspecialized -unspecializing -unspecifiable -unspecific -unspecified -unspecifying -unspecious -unspecked -unspeckled -unspectacled -unspectacular -unspeculating -unspeculative -unspeculatory -unspeedy -unspellable -unspelled -unspelt -unspendable -unspending -unspent -unspewed -unspherical -unspiced -unspicy -unspied -unspilled -unspilt -unspinnable -unspinning -unspiral -unspiraled -unspiralled -unspired -unspiring -unspirited -unspiriting -unspiritual -unspiritualised -unspiritualising -unspiritualized -unspiritualizing -unspirituous -unspited -unspiteful -unspitted -unsplashed -unsplattered -unsplayed -unspleenish -unsplendid -unsplendorous -unsplendourous -unsplenetic -unspliced -unsplinted -unsplintered -unsplit -unsplittable -unspoilable -unspoiled -unspoilt -unspoken -unsponged -unspongy -unsponsored -unspontaneous -unsported -unsportful -unsporting -unsportive -unsportsmanlike -unsportsmanly -unspotlighted -unspottable -unspotted -unspoused -unspouted -unsprained -unsprayable -unsprayed -unspread -unspreadable -unspreading -unsprightly -unspringing -unsprinkled -unsprinklered -unsprouted -unsprouting -unspruced -unsprung -unspun -unspurious -unspurned -unspurred -unsputtering -unspying -unsquabbling -unsquandered -unsquarable -unsquared -unsquashable -unsquashed -unsqueamish -unsqueezable -unsqueezed -unsquelched -unsquinting -unsquired -unsquirming -unsquirted -unstabbed -unstabilised -unstabilising -unstabilized -unstabilizing -unstable -unstabled -unstack -unstacked -unstaffed -unstaged -unstaggered -unstaggering -unstagnant -unstagnating -unstagy -unstaid -unstainable -unstained -unstaled -unstalemated -unstalked -unstalled -unstammering -unstamped -unstampeded -unstanch -unstanchable -unstandard -unstandardisable -unstandardised -unstandardizable -unstandardized -unstanding -unstanzaic -unstapled -unstarched -unstarred -unstarted -unstarting -unstartled -unstartling -unstarved -unstatable -unstateable -unstated -unstatesmanlike -unstatic -unstatical -unstation -unstationary -unstationed -unstatistic -unstatistical -unstatued -unstatuesque -unstaunch -unstaunchable -unstaved -unstayable -unstaying -unsteadfast -unstealthy -unsteamed -unsteaming -unsteeped -unsteepled -unsteered -unstemmed -unstentorian -unstentoriously -unstereotyped -unsterile -unsterilized -unstern -unstethoscoped -unstewed -unsticky -unstiff -unstiffened -unstifled -unstifling -unstigmatic -unstigmatised -unstigmatized -unstilled -unstilted -unstimulable -unstimulated -unstimulating -unstimulative -unstinging -unstinted -unstinting -unstippled -unstipulated -unstirrable -unstirred -unstirring -unstitched -unstitching -unstocked -unstockinged -unstoic -unstoical -unstoked -unstolen -unstonable -unstoneable -unstoned -unstony -unstooped -unstooping -unstoppable -unstopped -unstorable -unstoried -unstormable -unstormed -unstormy -unstout -unstraddled -unstrafed -unstraight -unstraightened -unstraightforward -unstrained -unstraitened -unstranded -unstrange -unstrangled -unstrangulable -unstrategic -unstrategical -unstratified -unstraying -unstreaked -unstreamed -unstreaming -unstreamlined -unstrengthened -unstrengthening -unstrenuous -unstrepitous -unstressed -unstretchable -unstretched -unstrewed -unstrewn -unstriated -unstricken -unstrict -unstrident -unstridulating -unstridulous -unstriking -unstringed -unstringent -unstriped -unstripped -unstriving -unstroked -unstructural -unstructured -unstruggling -unstrung -unstubbed -unstubbled -unstubborn -unstuccoed -unstuck -unstudded -unstudied -unstudious -unstuffed -unstuffy -unstultified -unstultifying -unstumbling -unstung -unstunned -unstunted -unstupefied -unstupid -unsturdy -unstuttered -unstuttering -unstyled -unstylish -unstylized -unsubdivided -unsubduable -unsubducted -unsubdued -unsubject -unsubjected -unsubjective -unsubjugated -unsublimated -unsublimed -unsubmerged -unsubmergible -unsubmerging -unsubmersible -unsubmissive -unsubmitted -unsubmitting -unsubordinate -unsubordinated -unsubordinative -unsuborned -unsubpoenaed -unsubrogated -unsubscribed -unsubscribing -unsubservient -unsubsided -unsubsidiary -unsubsiding -unsubsidized -unsubstantial -unsubstantiated -unsubstantive -unsubstituted -unsubstitutive -unsubtle -unsubtracted -unsubtractive -unsuburban -unsuburbed -unsubventioned -unsubventionized -unsubversive -unsubverted -unsucceeded -unsucceeding -unsuccessful -unsuccessive -unsuccinct -unsuccorable -unsuccored -unsucculent -unsuccumbing -unsucked -unsuckled -unsued -unsufferable -unsuffering -unsufficing -unsuffixed -unsuffocated -unsuffocative -unsuffused -unsuffusive -unsugared -unsugary -unsuggested -unsuggestible -unsuggesting -unsuggestive -unsuicidal -unsuitable -unsuited -unsuiting -unsulfonated -unsulfureous -unsulfurized -unsulky -unsullen -unsulliable -unsullied -unsulphonated -unsulphureous -unsulphurized -unsultry -unsummable -unsummarisable -unsummarised -unsummarizable -unsummarized -unsummonable -unsummoned -unsumptuous -unsunburned -unsunburnt -unsundered -unsung -unsunk -unsunken -unsunny -unsupercilious -unsuperficial -unsuperfluous -unsuperior -unsuperlative -unsupernatural -unsuperscribed -unsuperseded -unsuperseding -unsuperstitious -unsupervised -unsupervisory -unsupine -unsupplantable -unsupplanted -unsupple -unsupplemental -unsupplementary -unsupplemented -unsuppliable -unsuppliant -unsupplicated -unsupplicating -unsupplied -unsupportable -unsupported -unsupporting -unsupposable -unsupposed -unsuppositional -unsuppositive -unsuppressed -unsuppressible -unsuppressive -unsuppurated -unsuppurative -unsurcharged -unsure -unsurfaced -unsurfeited -unsurfeiting -unsurgical -unsurging -unsurly -unsurmised -unsurmising -unsurmountable -unsurmounted -unsurnamed -unsurpassable -unsurpassed -unsurpliced -unsurprised -unsurprising -unsurrealistic -unsurrendered -unsurrendering -unsurrounded -unsurveyable -unsurveyed -unsurvived -unsurviving -unsusceptible -unsusceptive -unsuspected -unsuspectful -unsuspecting -unsuspended -unsuspendible -unsuspicious -unsustainable -unsustained -unsustaining -unsutured -unswabbed -unswaddled -unswaddling -unswaggering -unswallowable -unswallowed -unswampy -unswapped -unswarming -unswatheable -unswayable -unswayed -unswaying -unsweated -unsweating -unsweepable -unsweetened -unswelled -unswelling -unsweltered -unsweltering -unswept -unswervable -unswerved -unswerving -unswilled -unswingled -unswitched -unswollen -unswooning -unswung -unsyllabicated -unsyllabified -unsyllabled -unsyllogistic -unsyllogistical -unsymbolic -unsymbolical -unsymbolised -unsymbolized -unsymmetrical -unsymmetrized -unsympathetic -unsympathised -unsympathising -unsympathized -unsympathizing -unsymphonious -unsymptomatic -unsymptomatical -unsynchronised -unsynchronized -unsynchronous -unsyncopated -unsyndicated -unsynonymous -unsyntactic -unsyntactical -unsynthesised -unsynthesized -unsynthetic -unsyringed -unsystematic -unsystematical -unsystematised -unsystematising -unsystematized -unsystematizing -untabernacled -untabled -untabulable -untabulated -untaciturn -untackling -untactful -untactical -untactile -untactual -untagged -untailed -untailored -untaintable -untainted -untainting -untakable -untakeable -untaking -untalented -untalkative -untalking -untallied -untallowed -untaloned -untamable -untame -untameable -untamed -untampered -untangental -untangential -untangible -untanned -untantalised -untantalising -untantalized -untantalizing -untaped -untapered -untapering -untapestried -untappable -untapped -untarnishable -untarnished -untarnishing -untarred -untarried -untarrying -untartarized -untasked -untasseled -untasselled -untastable -untasteable -untasted -untasteful -untasting -untasty -untattered -untattooed -untaught -untaunted -untaunting -untaut -untautological -untawdry -untawed -untaxable -untaxied -untaxing -unteachable -unteamed -untearable -unteased -unteaseled -unteaselled -untechnical -untedded -untedious -unteeming -untelegraphed -untelevised -untelic -untellable -untelling -untemperable -untemperamental -untemperate -untempered -untempering -untempestuous -untempled -untemporal -untemporary -untemptable -untempted -untempting -untenable -untenacious -untenantable -untenanted -untended -untendered -untenderized -untenebrous -untense -untensible -untensile -untensing -untentacled -untentered -untenuous -unterminated -unterminating -unterminational -unterminative -unterraced -unterrestrial -unterrible -unterrific -unterrified -unterrifying -unterrorized -unterse -untessellated -untestable -untestamental -untestamentary -untested -untestifying -untethered -untethering -untextual -untextural -unthanked -unthankful -unthanking -unthawed -unthawing -untheatric -untheatrical -untheistic -untheistical -unthematic -untheologic -untheological -untheoretic -untheoretical -untherapeutic -untherapeutical -unthick -unthievish -unthinkable -unthinking -unthinned -unthinning -unthirsting -unthirsty -unthorny -unthorough -unthought -unthoughtful -unthralled -unthrashed -unthreadable -unthreaded -unthreatening -unthreshed -unthrifty -unthrilled -unthrilling -unthriving -unthroaty -unthrobbing -unthronged -unthrottled -unthrowable -unthrown -unthrust -unthumped -unthundering -unthwacked -unthwartable -unthwarted -unthwarting -unticketed -untickled -untidal -untidied -untidier -untidiest -untidy -untidying -untiered -untiled -untillable -untilled -untilling -untimbered -untimed -untimely -untimeous -untimid -untimorous -untinctured -untindered -untinged -untinkered -untinned -untinseled -untinselled -untinted -untippable -untippled -untired -untiring -untissued -untithable -untithed -untitillated -untitillating -untitled -untittering -untitular -untoadying -untoasted -untogaed -untoiling -untold -untolerable -untolerated -untolerating -untolerative -untolled -untombed -untoned -untongued -untonsured -untooled -untopographical -untoppable -untopped -untopping -untoppled -untormented -untormenting -untorn -untorpedoed -untorpid -untorporific -untorrid -untortious -untortuous -untortured -untossed -untotaled -untotalled -untotted -untottering -untouchable -untouched -untouching -untough -untoured -untoward -untoxic -untraceable -untraced -untraceried -untracked -untractable -untradable -untradeable -untraded -untrading -untraditional -untraduced -untrafficked -untragic -untragical -untrailed -untrailerable -untrailered -untrailing -untrainable -untrained -untraitorous -untrammed -untrammeled -untrammelled -untramped -untrampled -untranquil -untransacted -untranscended -untranscendent -untranscendental -untranscribable -untranscribed -untransferable -untransferred -untransferring -untransfigured -untransfixed -untransformable -untransformative -untransformed -untransforming -untransfused -untransfusible -untransgressed -untransient -untransitional -untransitive -untransitory -untranslatable -untranslated -untransmigrated -untransmissible -untransmissive -untransmitted -untransmutable -untransmuted -untransparent -untranspired -untranspiring -untransplanted -untransportable -untransported -untransposed -untransubstantiated -untrapped -untrashed -untraumatic -untraveled -untraveling -untravelled -untravelling -untraversable -untraversed -untravestied -untreacherous -untreadable -untreasonable -untreasurable -untreasured -untreatable -untreated -untreed -untrekked -untrellised -untrembling -untremendous -untremolant -untremulant -untremulent -untremulous -untrenched -untrepanned -untrespassed -untrespassing -untressed -untriable -untribal -untributary -untriced -untrickable -untricked -untried -untrifling -untrig -untriggered -untrigonometric -untrigonometrical -untrimmable -untrimmed -untrinitarian -untripped -untripping -untrite -untriturated -untriumphant -untrivial -untrochaic -untrod -untrolled -untrophied -untropic -untropical -untrotted -untroubled -untroublesome -untrounced -untruant -untruckled -untruckling -untrue -untrumped -untrumpeted -untrumping -untrundled -untrustable -untrusted -untrustful -untrusting -untrustworthy -untruthful -untrying -untubbed -untubercular -untuberculous -untufted -untugged -untumbled -untumefied -untumid -untumultuous -untunable -untuneable -untuneful -untunneled -untunnelled -unturbaned -unturbid -unturbulent -unturfed -unturgid -unturnable -unturned -unturning -unturpentined -unturreted -untusked -untutelar -untutelary -untutored -untwilled -untwinkled -untwinkling -untwinned -untwirled -untwirling -untwistable -untwitched -untwitching -untyped -untypical -untyrannic -untyrannical -untyrannised -untyrannized -untyrantlike -unubiquitous -unulcerated -unulcerative -unulcerous -unumpired -ununifiable -ununified -ununiformed -ununionized -ununique -ununitable -ununited -ununiting -unupbraided -unupbraiding -unupholstered -unupset -unupsettable -unurban -unurbane -unurbanized -unurged -unurgent -unurging -unusable -unuseable -unused -unuseful -unushered -unusual -unusurious -unusurped -unusurping -unutilitarian -unutilizable -unutilized -unutterable -unuttered -unuxorious -unvacant -unvacated -unvaccinated -unvacillating -unvacuous -unvagrant -unvague -unvain -unvaleted -unvaliant -unvalidated -unvalidating -unvalorous -unvaluable -unvalued -unvamped -unvanishing -unvanquishable -unvanquished -unvanquishing -unvaporized -unvaporous -unvariable -unvariant -unvaried -unvariegated -unvarnished -unvarying -unvascular -unvasculous -unvatted -unvaulted -unvaulting -unvaunted -unvaunting -unveering -unvehement -unveined -unvelvety -unvenal -unvendable -unvended -unvendible -unveneered -unvenerable -unvenerated -unvenerative -unvenereal -unvengeful -unvenial -unvenomed -unvenomous -unventable -unvented -unventilated -unventured -unventuresome -unventurous -unveracious -unverbal -unverbalized -unverbose -unverdant -unverdured -unverdurous -unveridic -unveridical -unverifiable -unverificative -unverified -unveritable -unvermiculated -unverminous -unversatile -unversed -unversified -unvertebrate -unvertical -unvertiginous -unvesiculated -unvesseled -unvested -unvetoed -unvexatious -unvexed -unviable -unvibrant -unvibrated -unvibrating -unvibrational -unvicarious -unvicious -unvictimized -unvictorious -unvictualed -unvictualled -unviewable -unviewed -unvigilant -unvigorous -unvilified -unvillainous -unvindicable -unvindicated -unvindictive -unvinous -unvintaged -unviolable -unviolated -unviolative -unviolent -unvirgin -unvirginal -unvirginlike -unvirile -unvirtuous -unvirulent -unvisceral -unvisible -unvisionary -unvisioned -unvisitable -unvisited -unvisiting -unvisored -unvistaed -unvisual -unvisualised -unvisualized -unvital -unvitalized -unvitalizing -unvitiable -unvitiated -unvitiating -unvitreous -unvitrescent -unvitrifiable -unvitrified -unvitriolized -unvituperated -unvituperative -unvivacious -unvivid -unvivified -unvizarded -unvizored -unvocable -unvocal -unvocalised -unvocalized -unvociferous -unvoiced -unvoid -unvoidable -unvoided -unvolatile -unvolatilised -unvolatilized -unvolcanic -unvolitional -unvolitive -unvoluble -unvolumed -unvoluminous -unvoluntary -unvolunteering -unvoluptuous -unvomited -unvoracious -unvoted -unvoting -unvouched -unvouchsafed -unvowed -unvoyaging -unvulcanised -unvulcanized -unvulgar -unvulnerable -unvulturine -unvulturous -unvying -unwadable -unwadded -unwaddling -unwadeable -unwaded -unwading -unwafted -unwagered -unwagged -unwailed -unwailing -unwainscoted -unwainscotted -unwaived -unwaked -unwakeful -unwakened -unwakening -unwaking -unwalked -unwandering -unwaned -unwaning -unwanted -unwanton -unwarbled -unwarlike -unwarmable -unwarmed -unwarming -unwarned -unwarpable -unwarped -unwarping -unwarrantable -unwarranted -unwary -unwashable -unwashed -unwastable -unwasted -unwasteful -unwatchable -unwatched -unwatchful -unwatching -unwatered -unwatermarked -unwatery -unwattled -unwaved -unwaverable -unwavered -unwavering -unwaving -unwaxed -unwayward -unweakened -unweakening -unwealthy -unweaned -unweaponed -unwearable -unwearied -unwearing -unwearisome -unweary -unwearying -unweathered -unwebbed -unwebbing -unwed -unwedded -unweeded -unweened -unweeping -unweighable -unweighed -unweighing -unweighted -unweighty -unwelcome -unwelcomed -unwelcoming -unweldable -unwelded -unwelted -unwept -unwestern -unwesternized -unwet -unwetted -unwheedled -unwhelped -unwhetted -unwhimpering -unwhimsical -unwhining -unwhipped -unwhipt -unwhirled -unwhisked -unwhiskered -unwhisperable -unwhispered -unwhispering -unwhistled -unwhite -unwhited -unwhitened -unwhitewashed -unwholesome -unwicked -unwidened -unwidowed -unwieldable -unwieldy -unwifelike -unwifely -unwild -unwilful -unwillable -unwilled -unwillful -unwilling -unwilted -unwilting -unwily -unwindable -unwinded -unwindowed -unwindy -unwinged -unwinking -unwinnable -unwinning -unwinnowed -unwinsome -unwintry -unwiped -unwirable -unwired -unwise -unwished -unwishful -unwistful -unwitched -unwithdrawable -unwithdrawing -unwithdrawn -unwitherable -unwithered -unwithering -unwithheld -unwithholding -unwithstanding -unwithstood -unwitnessed -unwitting -unwitty -unwoeful -unwomanish -unwomanlike -unwomanly -unwon -unwonderful -unwondering -unwonted -unwooded -unwooed -unwordable -unworkable -unworked -unworking -unworkmanlike -unworkmanly -unworldly -unwormy -unworn -unworried -unworshiped -unworshiping -unworshipped -unworshipping -unworthy -unwounded -unwrangling -unwrathful -unwrecked -unwrenched -unwrested -unwresting -unwrestled -unwretched -unwriggled -unwrinkleable -unwritable -unwriting -unwritten -unwronged -unwrongful -unwrought -unwrung -unyachtsmanlike -unyearned -unyearning -unyielded -unyielding -unyouthful -unzealous -upbound -upbraiding -upcountry -uphill -upmost -upper -uppermost -uppish -uppity -upright -upriver -uproarious -upstanding -upstate -upstretched -uptight -uptown -upturned -upward -uranic -uranitic -uranographic -uranographical -uranological -uranometrical -uranous -uranylic -uratic -urban -urbane -urbanistic -urceolate -urdy -uredial -uredinial -ureido -uremic -ureteral -ureteric -ureterointestinal -urethral -urethritic -urethroscopic -uretic -ureylene -urgent -uric -uricolytic -urinant -uriniferous -urinogenital -urinous -urnlike -urochordal -urogenital -urogenous -urolithic -uromeric -uropodal -uropodous -uropygial -ursiform -ursine -urticaceous -urticant -urticate -usable -used -useful -useless -ustulate -usual -usufructuary -usurious -usurpative -uterine -utile -utilitarian -utilizable -utmost -utricular -utriculate -utterable -utterless -uttermost -uvular -uxorial -uxoricidal -uxorilocal -uxorious -vacant -vacatable -vacationless -vaccinal -vacciniaceous -vaccinial -vacillant -vacillating -vacillatory -vacuolar -vacuous -vadose -vagabondish -vagal -vagarious -vagotropic -vagrom -vague -vaguer -vaguest -vain -vainglorious -valanced -valerianaceous -valeric -valgus -valiant -valid -validatory -vallate -vallecular -valleculate -valleylike -valorous -valuable -valued -valueless -valval -valvar -valvate -valvular -vambraced -vampiric -vanadic -vanadious -vanadous -vandalish -vandalistic -vaned -vaneless -vanillic -vanitied -vanquishable -vanward -vapid -vaporescent -vaporific -vaporing -vaporish -vaporizable -vaporlike -vaporous -vapory -vapourescent -vapourific -vapouring -vapourisable -vapourish -vapourizable -vapoury -variable -variant -variational -variative -varicellate -varicelloid -varicolored -varicose -varied -variegated -varietal -variform -variolitic -varioloid -variolous -variorum -varnishy -varus -vascular -vaselike -vasoconstrictive -vasodepressor -vasoinhibitory -vasomotor -vassalic -vassalless -vast -vasty -vatic -vaticinal -vaulted -vaunted -vaunting -vaunty -vectorial -vee -vegetal -vegetational -vegetationless -vegetative -vehement -vehicular -veiled -veilless -veillike -veinal -veinier -veiniest -veinless -veiny -velar -velate -velellidous -vellicative -veloce -velutinous -velvety -venal -venatic -venational -vendible -venenose -venenosus -venerable -venerational -venerative -venereal -vengeful -venial -venomless -venose -venous -ventilable -ventilative -ventless -ventose -ventral -ventricose -ventricular -ventriloquial -ventriloquistic -venturesome -venturous -venular -venulose -veracious -verbal -verbenaceous -verbless -verbose -verboten -verdant -verdigrisy -verecund -veridical -verier -veriest -verifiable -verificative -verificatory -verisimilar -veristic -veritable -vermicidal -vermicular -vermiform -verminous -vermivorous -vernacular -vernal -verrucose -verrucous -versatile -versed -versicolor -versicular -versional -vertebral -vertebrated -vertical -verticillastrate -verticillate -vertiginous -verus -vesical -vesicatory -vespertilionine -vespertine -vespine -vesseled -vesselled -vestal -vested -vestibular -vestigial -vestral -vetchlike -veterinary -vexatious -vexed -vexillate -viable -vibracular -vibraculoid -vibrant -vibrational -vibrationless -vibrative -vibrioid -vibrionic -vibronic -vicarial -vicarious -vicarly -vicegeral -viceless -vicenary -vicennial -viceregal -vicinal -vicious -vicissitudinary -vicissitudinous -vicontiel -victorious -victoryless -victualless -videogenic -viewable -viewier -viewiest -viewless -viewy -vigesimal -vigilant -vigintillionth -vigorless -vigoroso -vigorous -vile -villageless -villagey -villagy -villainous -villalike -villatic -villiform -villose -villous -viminal -vimineous -vinaceous -vincible -vindicable -vindictive -vinegarish -vinegarlike -vineless -vinelike -vinic -vinicultural -vinifera -viniferous -vinous -viny -violable -violaceous -violational -violative -violent -violetlike -violety -violinistic -violinless -viperine -viperish -viperous -viral -viremic -virescent -virgate -virginal -virgulate -viridescent -virile -virilocal -virled -virtual -virtueless -virtuosic -virtuous -virulent -viruslike -visaged -visceral -visceromotor -viscerotonic -viscid -viscoelastic -viscoid -viscometric -viscosimetric -viscous -viselike -visible -visional -visionary -visionless -visitatorial -visitorial -visorless -vistaless -visual -visualisable -visualizable -vitaceous -vital -vitameric -vitaminic -vitascopic -vitelline -vitiable -vitiated -vitiliginous -vitiligoid -vitreous -vitrescent -vitrescible -vitreum -vitric -vitrifiable -vitriform -vitriolic -vituline -vivace -vivacious -viverrine -vivid -vivisectible -vivisectional -vivo -vixenish -vixenly -vizarded -vizierial -vizirial -vizorless -vocal -vocalic -vocational -vocative -vociferant -vociferous -vocoid -voetstoots -vogie -voiced -voiceful -voiceless -void -voidable -voided -volant -volar -volatile -volatilisable -volcanic -volcanologic -volcanological -volitant -volitational -volitional -volitionary -volitionless -volitive -voltaic -voltametric -voluble -volumed -volumetric -voluminous -voluntary -voluptuous -voluted -volvate -vomerine -vomitory -voodooistic -voracious -vorant -vortical -vorticose -vortiginous -votable -voteable -voteless -votive -vowelless -vowellike -vowless -vulcanian -vulcanisable -vulcanizable -vulcanological -vulgar -vulned -vulnerable -vulnerary -vulpecular -vulpine -vulturelike -vulturine -vying -wackier -wackiest -wacky -wadable -wadeable -waf -waferlike -wafery -wageless -wageworking -waggish -waggly -wagonless -wailful -wailsome -wainable -waistcoated -waisted -waitressless -wakeful -wakeless -wakerife -walking -walleyed -wally -waltzlike -wambly -wan -wanchancy -wandering -wandle -wandlike -waney -wanier -waniest -wanner -wannest -wanning -wannish -wantless -wanton -wapperjawed -warded -wardless -warier -wariest -warless -warlike -warm -warmish -warmthless -warrantable -warriorlike -wartier -wartiest -wartless -wartlike -warty -wary -washable -washerless -washier -washiest -washy -waspier -waspiest -waspish -waspy -wastable -wasteful -wasteless -wasting -watchful -watchless -waterborne -watercolour -waterish -waterless -waterlike -waterlocked -waterlog -waterlogged -waterproof -watertight -waterworn -watery -wattless -waugh -waur -waved -waveless -wavelike -wavier -waviest -wavy -waxen -waxier -waxiest -waxlike -waxy -wayfaring -waygoing -wayless -wayward -wayworn -weak -weakhanded -weakish -weaklier -weakliest -weakly -wealthier -wealthiest -wealthy -weaponed -weaponless -wearable -wearied -wearier -weariest -weariful -weariless -wearing -wearish -wearisome -wearproof -weary -wearying -weathered -weatherly -weatherproof -weathertight -weatherworn -webbed -webbier -webbiest -webby -webless -weblike -wedded -wedged -wedgelike -wedgier -wedgiest -wedgy -wee -weedier -weediest -weedy -weekly -weepier -weepiest -weeping -weepy -weer -weest -weighable -weighted -weightier -weightiest -weighty -weird -weirless -welcome -welcomeless -weldable -weldless -wellborn -welldecked -wersh -westbound -westering -westerly -western -westernmost -westlin -westward -westwardly -wet -wetproof -wettable -wetter -wetting -wettish -whackier -whackiest -whacking -whacky -whalelike -whapping -wharfless -wheaten -wheatless -wheeled -wheelless -wheezier -wheeziest -wheezy -whelked -whelpless -wheyey -wheylike -whimsical -whinier -whiniest -whinny -whiny -whiplike -whisperous -whistleable -whistly -white -whitebelt -whited -whiteslave -whitish -whittling -whole -wholehearted -wholemeal -wholesome -wholistic -whopping -whorled -wicked -wickless -wide -wider -widespread -widest -widish -widowly -wieldable -wieldier -wieldiest -wieldy -wifeless -wifelier -wifeliest -wifelike -wifely -wigglier -wiggliest -wiggly -wigless -wiglike -wild -wilful -wilier -wiliest -willable -willed -willful -willing -willowy -willyard -wily -windblown -windbound -windburned -winded -windier -windiest -windowless -windowy -windproof -windrode -windswept -windtight -windward -windy -wineless -winged -wingless -winglike -winier -winiest -winish -winnable -winning -winsome -winterier -winteriest -winterish -winterless -winterweight -wintery -wintrier -wintriest -wintry -winy -wirable -wired -wirelike -wirespun -wiry -wisdomless -wise -wised -wiser -wisest -wishful -wising -wispier -wispiest -wisplike -wispy -wistful -witchier -witchiest -witching -witchy -withdrawable -witless -witted -wittier -wittiest -witting -witty -wizardlike -wizardly -wizened -woaded -wobbling -wobbly -wobegone -wodgy -woebegone -woeful -woesome -wolfish -wolflike -wolframic -womanish -womanless -womanly -wombed -wonderful -wondering -wonderless -wonky -wonted -wooded -wooden -woodier -woodiest -woodless -woodsy -woodwind -woody -woollen -woolly -woolstapling -woozier -wooziest -woozy -wordier -wordiest -wordless -wordy -workable -workaday -worked -workless -workmanlike -workshy -worldly -worldwide -wormish -wormless -wormlike -wormy -worried -worriless -worrisome -worse -worser -worshipful -worshipless -worst -worth -worthless -worthwhile -worthy -wounded -woundless -wraithlike -wraparound -wrapround -wrathful -wrathless -wreathless -wreathlike -wreckful -wretched -wrier -wriest -wrigglier -wriggliest -wriggly -wrinkleable -wrinkleless -wrinklier -wrinkliest -wrinkly -wrong -wrongful -wroth -wud -wurtzitic -wuthering -xanthic -xanthochroid -xanthophyllous -xanthous -xenocrystic -xenodiagnostic -xenogenetic -xenogenic -xenolithic -xenomorphic -xenophobic -xerarch -xeric -xerographic -xeromorphic -xerophilous -xerophytic -xerotic -xiphisternal -xiphoid -xylic -xylographic -xylographical -xyloid -xylophagous -xylostromatoid -xylotomous -yachty -yare -yarer -yarest -yauld -yawnful -yawning -yearlong -yearly -yeastless -yeastlike -yeasty -yeld -yellowish -yeomanly -yester -yestern -yeuky -yielding -yokelish -yolkless -yolky -young -youthful -yttric -yttriferous -zanier -zanies -zaniest -zany -zanyish -zealous -zebraic -zebralike -zebrine -zenithal -zeolitic -zephyrean -zeroth -zestful -zestless -zesty -zeugmatic -zig -zincic -zinciferous -zincky -zincographic -zincographical -zincoid -zincous -zincy -zingiberaceous -zingy -zinky -zippered -zipppier -zipppiest -zippy -zirconic -zodiacal -zonal -zonate -zoning -zonked -zonular -zoochemical -zoogleal -zoogloeal -zoographic -zoographical -zoolatrous -zoological -zoometric -zoometrical -zoomorphic -zoonal -zoophagous -zoophilous -zoophobous -zoophoric -zooplastic -zygodactyl -zygomorphic -zygophyllaceous -zymogenic diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/dict/nouns.txt b/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/dict/nouns.txt deleted file mode 100644 index 56417ee..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/dict/nouns.txt +++ /dev/null @@ -1,61821 +0,0 @@ -aa -aaerialness -aalii -aardvark -aardwolf -ab -aba -abac -abaca -abaciscus -abacist -abaculus -abacus -abalone -abamp -abampere -abandonee -abandoner -abandonment -abaptiston -abaser -abashedness -abashment -abasia -abatage -abatement -abater -abatis -abatjour -abator -abattage -abattoir -abb -abba -abbacy -abbess -abbey -abbeystead -abbot -abbotcy -abbotship -abbr -abbreviation -abbreviator -abcoulomb -abd -abdication -abdicator -abdomen -abducens -abduction -abductor -abecedarian -abecedarium -abecedary -abele -abelmosk -abernethy -aberrance -aberrancy -aberration -abesse -abetment -abettal -abettor -abeyance -abfarad -abhenry -abhorrence -abhorrer -abidance -abider -abidingness -abietate -abigail -ability -abiogenesis -abiogenist -abiosis -abiotrophy -abirritation -abjectedness -abjection -abjectness -abjunction -abjuration -abjurer -abl -ablactation -ablation -ablator -ablaut -ablegate -ablepsia -ablution -abmho -abmodality -abnegation -abnegator -abnormalcy -abnormality -abnormalness -abnormity -abo -aboardage -abode -abohm -aboideau -abolisher -abolishment -abolition -abolitionism -abolitionist -abolla -abomasum -abomasus -abominableness -abomination -abominator -abondance -aboriginality -aborigine -aborticide -abortion -abortionist -abortiveness -abortus -aboudikro -aboulia -abp -abr -abrader -abraser -abrasion -abrasive -abraxas -abrazo -abreaction -abri -abridger -abridgment -abrogation -abrogator -abruption -abruptness -abs -abscess -abscissa -abscission -absconder -absence -absentation -absentee -absenteeism -absenter -absentia -absentness -absinthe -absinthism -absoluteness -absolution -absolutism -absolutist -absolver -absorbability -absorbance -absorbedness -absorbefacient -absorbency -absorber -absorptance -absorptiometer -absorption -absorptiveness -absorptivity -abstainer -abstemiousness -abstention -abstersion -abstersiveness -abstinence -abstr -abstractedness -abstracter -abstraction -abstractionism -abstractionist -abstractiveness -abstractness -abstriction -abstruseness -abstrusity -absurdity -absurdness -abt -abulia -abundance -abura -abusage -abuser -abusiveness -abutilon -abutment -abuttal -abutter -abv -abvolt -abwatt -abysm -abyss -ac -acacia -acad -academe -academia -academician -academicism -academism -academy -acajou -acalculia -acaleph -acanthite -acanthocephalan -acanthodian -acanthosis -acanthus -acapnia -acappella -acardia -acariasis -acaricide -acarid -acarine -acarologist -acarology -acarophobia -acarus -acaulescence -acc -acce -accedence -acceder -accel -accelerant -acceleration -accelerator -accelerometer -accent -accentor -accentuality -accentuation -accentuator -acceptability -acceptableness -acceptance -acceptancy -acceptation -acceptee -accepter -acceptor -access -accessariness -accessary -accessibility -accession -accessoriness -accessorius -accessory -acciaccatura -accidence -accident -accidentalism -accidentalist -accidentality -accidentalness -accidie -accipiter -acclaimer -acclamation -acclimation -acclimatisation -acclimatiser -acclimatization -acclivity -accolade -accommodation -accommodativeness -accommodator -accompanier -accompaniment -accompanist -accompanyist -accomplice -accomplisher -accomplishment -accompt -accord -accordance -accordatura -accorder -accordion -accordionist -accouchement -accoucheur -accoucheuse -account -accountability -accountableness -accountancy -accountant -accountantship -accounting -accouplement -accouterment -accoutrement -accra -accreditation -accreditment -accretion -accroachment -accrual -accruement -acct -acculturation -acculturationist -accum -accumbency -accumulation -accumulativeness -accumulator -accuracy -accurateness -accursedness -accusal -accusant -accusation -accused -accuser -accustomedness -ace -aced -acedia -acenesthesia -acequia -acerbity -acerdol -acervulus -acescence -acescency -acestoma -acetabulum -acetal -acetaldehyde -acetaldol -acetamide -acetanilide -acetanisidine -acetate -acetation -acetazolamide -acetification -acetifier -acetimeter -acetimetry -acetin -acetobacter -acetoin -acetometer -acetometry -acetone -acetonitrile -acetophenetidin -acetophenone -acetostearin -acetum -acetyl -acetylaminobenzene -acetylaniline -acetylation -acetylbenzene -acetylcholine -acetylene -acetylenogen -acetylide -acetylization -acetylizer -acetylmethylcarbinol -achalasia -achar -achech -achene -achievement -achiever -achkan -achlorhydria -acholia -acholuria -achondrite -achondroplasia -achroite -achromat -achromate -achromaticity -achromatin -achromatisation -achromatism -achromatization -achromatophilia -achromobacter -acicula -acicularity -aciculum -acid -acidemia -acidification -acidifier -acidimeter -acidimetry -acidity -acidness -acidolysis -acidometer -acidosis -acidulant -acidulation -acidulent -acieration -acing -acinus -ack -ackee -ackey -acknowledger -acknowledgment -ackton -acle -acleistocardia -acme -acmesthesia -acmite -acne -acnemia -acnode -acoasm -acocotl -acoenaesthesia -acolyte -aconite -acorn -acosmism -acosmist -acotyledon -acouasm -acouchi -acousma -acoustician -acoustics -acpt -acquaintance -acquaintedness -acquest -acquiescence -acquirability -acquirement -acquirer -acquisition -acquisitiveness -acquittal -acquittance -acquitter -acraldehyde -acre -acreage -acridine -acridity -acridness -acriflavine -acrimoniousness -acrimony -acrobat -acrobatics -acrocephaly -acrocyanosis -acrodontism -acrodynia -acrogen -acrography -acrolein -acrolith -acrology -acromegaly -acromicria -acromion -acron -acronym -acropathy -acrophobia -acrophony -acropolis -acrospire -acrospore -acrostic -acrostolium -acroter -acroterion -acroterium -acrotism -acrylaldehyde -acrylate -acrylonitrile -acrylyl -act -actability -actg -actin -actinia -actinide -actinism -actinium -actinobacillosis -actinobacillus -actinochemistry -actinodermatitis -actinogram -actinograph -actinography -actinolite -actinology -actinomere -actinometer -actinometry -actinomorphy -actinomyces -actinomycete -actinomycin -actinomycosis -actinon -actinopod -actinotherapy -actinouranium -actinozoan -action -activation -activator -activeness -activism -activist -activity -actomyosin -acton -actor -actress -actualisation -actualism -actualist -actuality -actualization -actualness -actuary -actuation -actuator -acuity -aculeus -acumen -acumination -acupuncture -acus -acusection -acusector -acutance -acuteness -acyl -acylation -acyloin -ad -adage -adamsite -adaptability -adaptableness -adaptation -adaptedness -adapter -adaptiveness -adarbitrium -adat -addax -addend -addendum -adder -addictedness -addiction -additament -addition -address -addressee -addresser -addressor -adducer -adduction -adductor -adelantado -ademption -adenalgia -adenectomy -adenine -adenitis -adenocarcinoma -adenohypophysis -adenoidectomy -adenology -adenoma -adenophore -adenosarcoma -adenosine -adenovirus -adenylpyrophosphate -adeptness -adequacy -adequateness -adermin -adherence -adherend -adherent -adherer -adhesion -adhesiveness -adhibition -adiabat -adiadochokinesia -adiaphoresis -adiaphorism -adiaphorist -adiathermancy -adipate -adiphenine -adipocere -adipocerite -adiponitrile -adipopexia -adiposeness -adiposis -adiposity -adit -adjacence -adjacency -adjective -adjoint -adjournment -adjt -adjudication -adjudicator -adjugate -adjunct -adjunction -adjuration -adjurer -adjuror -adjuster -adjustment -adjustor -adjutancy -adjutant -adm -adman -admass -admeasurement -admeasurer -admin -adminicle -administration -administrator -administratorship -administratrix -admirability -admirableness -admiral -admiralship -admiralty -admiration -admirer -admissibility -admissibleness -admission -admittance -admitter -admixture -admonisher -admonishment -admonition -admonitor -admov -adnation -adnominal -adnoun -ado -adobe -adolescence -adoptability -adopter -adoption -adorability -adorableness -adoration -adorer -adorner -adornment -adorno -adrenalectomy -adrenaline -adrenin -adret -adroitness -ads -adscription -adsorbability -adsorbate -adsorption -adularescence -adularia -adulation -adulator -adulterant -adulteration -adulterator -adulterer -adulteress -adultery -adulthood -adultness -adumbration -aduncity -advancement -advancer -advantage -advantageousness -advection -advena -advent -adventitia -adventitiousness -adventure -adventurer -adventuresomeness -adventuress -adventurism -adventurousness -adverb -adverbial -adversary -adverseness -adversity -advertence -advertency -advertisement -advertiser -advertising -advertizer -advice -advisability -advisableness -advisedness -advisee -advisement -adviser -advisership -advocaat -advocacy -advocation -advowson -advt -adynamia -adytum -adz -adze -aecidium -aeciospore -aecium -aedeagus -aedes -aedicula -aedicule -aedile -aedileship -aedoeagus -aegirite -aegis -aegrotat -aeolipile -aeolotropism -aeolotropy -aeon -aepyornis -aerarium -aeration -aerator -aerenchyma -aerialist -aeriality -aerialness -aerie -aerification -aero -aerobacteriologist -aerobacteriology -aerobe -aerobee -aerobiologist -aerobiology -aerobiosis -aerobium -aerocar -aerodonetics -aerodontalgia -aerodontia -aerodrome -aerodynamicist -aerodynamics -aerodyne -aeroelasticity -aeroelastics -aeroembolism -aerofoil -aerogel -aerogram -aerograph -aerographer -aerography -aerolite -aerolitics -aerologist -aerology -aeromancer -aeromancy -aeromechanic -aeromechanics -aeromedicine -aerometeorograph -aerometer -aerometry -aeron -aeronaut -aeronautics -aeroneurosis -aeronomy -aeropause -aerophagia -aerophagist -aerophilatelist -aerophilately -aerophobia -aerophone -aerophore -aerophoto -aerophotography -aerophyte -aeroplane -aeroplankton -aeropulse -aeroscepsy -aeroscope -aerosinusitis -aerosol -aerospace -aerosphere -aerostat -aerostatics -aerostation -aerotherapeutics -aerothermodynamics -aerotropism -aerugo -aesc -aesculin -aesthesia -aesthete -aesthetician -aestheticism -aesthetics -aestivation -aestivator -aet -aether -aethereal -aethon -aetiologist -aetiology -af -affability -affableness -affair -affaire -affectation -affectedness -affecter -affection -affectionateness -affective -affectivity -affenpinscher -affiant -affiche -affidavit -affiliation -affinity -affirmant -affirmation -affirmer -affixation -affixer -affixture -afflatus -afflictedness -afflicter -affliction -affluence -afflux -afforestation -afforestment -affranchisement -affray -affrayer -affreighter -affreightment -affricate -affrication -affricative -affront -affrontedness -affronter -affrontiveness -affusion -afghan -afghanets -afghani -aficionada -aficionado -afikomen -aflatoxin -afreet -afrit -afrormosia -afterbirth -afterbody -afterbrain -afterburner -afterburning -aftercare -aftercast -afterclap -aftercooler -afterdamp -afterdeck -aftereffect -afterglow -aftergrowth -afterguard -afterheat -afterimage -afterlife -aftermath -afternoon -afterpain -afterpeak -afterpiece -afters -aftersensation -aftershaft -aftershock -aftertaste -afterthought -aftertime -aftertreatment -afterword -afterworld -ag -aga -agal -agalite -agalloch -agalmatolite -agalwood -agama -agamete -agamid -agammaglobulinemia -agamogenesis -agamy -agapanthus -agar -agaric -agaricin -agarita -agata -agate -agateware -agave -agba -agcy -age -agedness -agelessness -agency -agenda -agendum -agenesis -agent -ageratum -ageusia -agger -aggie -aggiornamento -agglomeration -agglomerator -agglutinability -agglutination -agglutinin -agglutinogen -aggradation -aggrandisement -aggrandiser -aggrandizement -aggrandizer -aggravation -aggravator -aggregateness -aggregation -aggression -aggressor -aggrievedness -aggro -agha -agilawood -agileness -agility -agio -agiotage -agister -agistment -agit -agitation -agitator -agitprop -agitpropist -aglet -aglossia -aglucon -aglycon -agma -agnail -agnation -agnel -agnoiology -agnomen -agnosia -agnostic -agnosticism -agogics -agon -agonist -agony -agora -agoraphobia -agouta -agouti -agouty -agr -agraation -agraffe -agraga -agrament -agrammatism -agranulocytosis -agraphia -agrarianism -agreeability -agreeableness -agreement -agribusiness -agric -agriculture -agriculturist -agrimony -agriologist -agriology -agrobiologist -agrobiology -agrology -agromania -agron -agronomics -agronomist -agronomy -agrostographer -agrostography -agrostologist -agrostology -agst -aguardiente -ague -agueweed -agujon -agura -ahankara -ahimsa -ahold -aholt -ahu -ahuehuete -ai -aide -aider -aiglet -aigrette -aiguille -aiguillette -aikido -aikuchi -ailanthus -aileron -ailette -ailment -ailurophile -ailurophilia -ailurophobe -ailurophobia -aimak -aimer -aimlessness -air -airbill -airboat -airbrasive -airbrick -airbrush -airburst -airbus -aircraft -aircraftman -aircraftsman -aircraftswoman -aircrew -aircrewman -airdrome -airdrop -airfield -airflow -airfoil -airframe -airglow -airgraph -airhead -airiness -airing -airlift -airlight -airline -airliner -airlock -airman -airmanship -airplane -airport -airscrew -airship -airsickness -airspace -airspeed -airstream -airstrip -airt -airtightness -airway -airwoman -airworthiness -aisle -ait -aitch -aitchbone -ajiva -akala -akasha -akeake -akebi -akee -akela -akene -aketon -akhara -akinesia -akinete -akroter -akroterion -akvavit -al -ala -alabamine -alabandite -alabaster -alabastos -alabastron -alabastrum -alacrity -alae -alalia -alameda -alamiqui -alamo -alamode -alanine -alap -alapa -alarmism -alarmist -alarum -alastrim -alb -alba -albacore -albarello -albarium -albata -albatross -albedo -albedometer -albergo -albert -albertite -albertype -albescence -albinism -albino -albite -albronze -album -albumen -albumeniizer -albumenisation -albumeniser -albumenization -albumin -albuminate -albuminuria -albumose -alburnum -alcahest -alcaide -alcalde -alcapton -alcaptonuria -alcayde -alcazar -alchem -alchemist -alchemy -alcheringa -alcohol -alcoholate -alcoholic -alcoholicity -alcoholisation -alcoholism -alcoholization -alcoholometer -alcoholometry -alcoholysis -alcove -alcyonarian -aldehyde -alder -alderfly -alderman -aldermancy -aldermanry -aldermanship -aldohexose -aldol -aldose -aldosterone -aldoxime -aldrin -ale -alec -alecost -alectryomancy -alegar -alehouse -alembic -aleph -alerce -alerion -alertness -alethiologist -alethiology -alette -aleuromancy -aleurone -alevin -alewife -alexander -alexanders -alexandrite -alexia -alexin -aleyard -alfa -alfalfa -alfilaria -alforja -alg -alga -algarroba -algebra -algebraist -algerienne -algerine -algerita -algesia -algesimeter -algesireceptor -algicide -algidity -algidness -algin -alginate -algolagnia -algolagnist -algologist -algology -algometer -algometry -algophobia -algor -algorism -algorithm -algraphy -alibi -alibility -alidade -alien -alienability -alienage -alienation -alienator -alienee -alienism -alienist -alienor -alif -aligner -alignment -alikeness -aliment -alimentation -alimentativeness -alimony -alinement -aliner -alinotum -alipterion -aliveness -aliyah -alizarin -alk -alkahest -alkalemia -alkalescence -alkalescency -alkali -alkalimeter -alkalimetry -alkalinisation -alkalinity -alkalinization -alkalisation -alkaliser -alkalization -alkalizer -alkaloid -alkalosis -alkane -alkanet -alkanethiol -alkannin -alkapton -alkaptonuria -alkargen -alkekengi -alkene -alkermes -alkine -alkoxide -alky -alkyl -alkylation -alkyne -allachesthesia -allanite -allantois -allayer -allecret -allegation -alleger -allegiance -allegoricalness -allegorisation -allegoriser -allegorist -allegorization -allegorizer -allegory -allele -allelism -allelomorph -allelomorphism -allemande -allemontite -allergen -allergenicity -allergist -allergy -allethrin -alleviant -alleviation -alleviator -alley -alleyway -allheal -alliance -allies -alligator -alligatorfish -allision -alliteration -alliterativeness -alliterator -allium -allmouth -allness -allocation -allochromatic -allochthon -allocution -allodiality -allodium -allogamy -allograph -allomerism -allomerization -allometry -allomorph -allomorphism -allonge -allonym -allopath -allopathy -allophane -allophone -alloplasm -allopolyploidy -allopurinol -allosaur -allotment -allotrope -allotropicity -allotropy -allottee -allotter -allotype -allowableness -allowance -alloy -allseed -allspice -allurement -allurer -alluringness -allusion -allusiveness -alluvion -alluvium -allyl -allylthiourea -almah -almanac -almandine -almandite -almemar -almery -almightiness -almique -almirah -almon -almond -almoner -almonry -almous -almsgiver -almsgiving -almshouse -almsman -almswoman -almucantar -almuce -almug -alodiality -alodium -aloe -aloes -aloeswood -alogia -aloha -aloin -aloneness -aloofness -alopecia -alouette -alp -alpaca -alpenglow -alpenhorn -alpenstock -alpha -alphabet -alphabetisation -alphabetiser -alphabetization -alphabetizer -alphitomancy -alphorn -alphosis -alpinism -alpinist -als -alsike -altar -altarage -altarpiece -altazimuth -alterability -alterableness -alteration -altercation -alternateness -alternation -alternative -alternativeness -alternativity -alternator -althaea -althea -althorn -altigraph -altimeter -altimetry -altitude -alto -altocumulus -altostratus -altruism -altruist -aludel -alula -alum -alumina -aluminate -aluminite -aluminium -aluminography -aluminosilicate -aluminosity -aluminothermy -aluminum -alumna -alumnus -alumroot -alunite -alunogen -alure -alveola -alveolation -alveolus -alyssum -amadan -amadavat -amadou -amah -amal -amalaka -amalgam -amalgamation -amalgamator -amanita -amanuensis -amaranth -amarelle -amaryllis -amasser -amassment -amateur -amateurishness -amateurism -amativeness -amatol -amatungula -amaurosis -amaut -amazedness -amazement -amazon -amazonite -amba -ambage -ambages -ambagiousness -ambarella -ambary -ambassador -ambassadorship -ambassadress -ambatch -amber -amberfish -ambergris -amberina -amberjack -amberoid -ambiance -ambidexterity -ambidextrousness -ambience -ambiguity -ambiguousness -ambilaterality -ambit -ambitendency -ambition -ambitiousness -ambivalence -ambiversion -ambivert -ambler -amblygonite -amblyopia -amblyoscope -amblypod -ambo -amboceptor -ambon -amboyna -ambrettolide -ambroid -ambrosia -ambrotype -ambry -ambsace -ambulacrum -ambulance -ambulante -ambulation -ambulator -ambuscade -ambuscader -ambuscado -ambush -ambusher -ameba -amebocyte -ameboidism -ameer -ameerate -ameiosis -ameliorableness -ameliorant -amelioration -ameliorator -ameloblast -amenability -amenableness -amender -amendment -amends -amenity -amenorrhea -amenorrhoea -ament -amentia -amercement -amercer -americium -amerism -amesace -amethyst -ametropia -ami -amiability -amiableness -amianthus -amicability -amicableness -amice -amidase -amidation -amide -amidin -amidine -amidocyanogen -amidogen -amidol -amidopyrine -amie -amiga -amigo -amimia -aminase -amination -amine -aminity -amino -aminobenzene -aminophenol -aminopherase -aminophylline -aminoplast -aminopyrine -amir -amirate -amitate -amitosis -amity -ammeter -ammine -ammo -ammocete -ammocoete -ammonal -ammonate -ammonation -ammonia -ammoniation -ammonification -ammonite -ammonium -ammonoid -ammonolysis -ammunition -amnesia -amnesiac -amnesty -amniocentesis -amnion -amniote -amobarbital -amoeba -amoebiasis -amoebocyte -amoeboidism -amok -amole -amontillado -amora -amorality -amoretto -amorino -amorist -amorosity -amorousness -amorphism -amorphousness -amortization -amortizement -amosite -amount -amour -amowt -amp -ampelite -ampelopsis -amperage -ampere -ampersand -ampherotoky -amphetamine -amphiarthrosis -amphiaster -amphibian -amphibiousness -amphiblastula -amphibole -amphibolite -amphibology -amphiboly -amphibrach -amphicrania -amphictyon -amphictyony -amphidiploid -amphidromia -amphigory -amphigouri -amphikaryon -amphimacer -amphimixis -amphioxus -amphipod -amphisarca -amphisbaena -amphisbaenid -amphitene -amphithalamus -amphitheater -amphitheatre -amphithecium -amphithuron -amphithyra -amphithyron -amphitoky -amphitricha -amphiuma -amphogeny -ampholyte -amphora -amphoricity -amphoriskos -ampleness -ampliation -amplidyne -amplification -amplifier -amplitude -ampoule -ampule -ampulla -ampullula -amputation -amputator -amputee -amrita -amt -amtrac -amu -amuck -amugis -amulet -amurca -amusement -amuser -amusia -amusingness -amusiveness -amyelia -amygdala -amygdale -amygdalin -amygdaloid -amygdule -amyl -amylase -amylene -amylogen -amyloid -amyloidosis -amylolysis -amylopectin -amyloplast -amylopsin -amylose -amylum -amyotonia -amyxorrhea -anabaena -anabantid -anabas -anabasine -anabasis -anabiosis -anableps -anabolism -anabolite -anabranch -anachorism -anachronism -anacidity -anaclisis -anacoenosis -anacoluthia -anacoluthon -anaconda -anacrusis -anacusia -anadem -anadenia -anadiplosis -anaemia -anaerobe -anaerobiosis -anaerobium -anaesthesia -anaesthesiologist -anaesthesiology -anaesthetic -anaesthetics -anaesthetist -anagenesis -anaglyph -anaglyphoscope -anaglyphy -anaglypta -anagnorisis -anagoge -anagram -anagrammatism -anagrammatist -analcite -analemma -analgesia -analog -analogicalness -analogion -analogism -analogist -analogousness -analogue -analogy -analysability -analysand -analysation -analyser -analysis -analyst -analyt -analytics -analytique -analyzability -analyzation -analyzer -anamnesis -anamniote -anamorphism -anamorphoscope -anamorphosis -ananda -anapaest -anapest -anaphase -anaphora -anaphylaxis -anaplasia -anaplasmosis -anaplasty -anaplerosis -anapophysis -anaptyxis -anarch -anarchism -anarchist -anarchy -anarthria -anarthrousness -anasarca -anaspid -anastasis -anastigmat -anastomosis -anastrophe -anat -anatabine -anatase -anatexis -anathema -anathematisation -anathematiser -anathematization -anathematizer -anatman -anatomisation -anatomiser -anatomist -anatomization -anatomizer -anatomy -anatta -anatto -anba -anbury -anc -ancestor -ancestress -ancestry -anchor -anchorage -anchoress -anchoret -anchoretism -anchorite -anchoritism -anchorman -anchoveta -anchovy -anchusa -anchusin -anchylosis -ancientness -ancientry -ancile -ancilla -ancon -ancona -ancylostomiasis -andalusite -andamento -andesine -andesite -andiron -andoroba -andradite -androclinium -androconium -androcracy -androdioecism -androecium -androgamone -androgen -androgyne -androgyny -android -andromeda -andromonoecism -andron -androphore -androsphinx -androspore -androsterone -anecdotage -anecdotalism -anecdotalist -anecdote -anecdotist -anelace -anelasticity -anemia -anemochore -anemogram -anemograph -anemography -anemology -anemometer -anemometry -anemone -anemophily -anemoscope -anemosis -anemotaxis -anemotropism -anencephalia -anergy -aneroidograph -anesthesia -anesthesimeter -anesthesiologist -anesthesiology -anesthetic -anesthetist -anesthetization -anestrus -anethole -aneuria -aneurin -aneurysm -anfractuosity -anga -angakok -angary -angel -angelfish -angelhood -angelica -angelicalness -angelique -angelology -anger -angina -angioblast -angiocardiography -angiocarp -angiology -angioma -angiosperm -angiotonase -angiotonin -angiotribe -anglaise -angle -anglepod -angler -anglesite -anglesmith -anglewing -angleworm -anglicisation -anglicization -angling -angor -angora -angriness -angst -angstrom -anguish -angularity -angularness -angulateness -angulation -angulosity -angwantibo -anhaematopoiesis -anhedonia -anhedral -anhematopoiesis -anhematosis -anhidrosis -anhinga -anhydremia -anhydride -anhydrite -anhydrosis -ani -anicca -aniconism -anil -anilide -aniline -anility -anim -anima -animadversion -animadverter -animal -animalcule -animalculum -animalisation -animalism -animalist -animality -animalization -animateness -animation -animatism -animator -anime -animism -animosity -animus -anion -anis -anisaldehyde -anise -aniseed -aniseikonia -anisette -anisocoria -anisogamete -anisogamy -anisoiconia -anisole -anisometropia -anisophylly -anisotropy -ankerite -ankh -ankle -anklebone -anklet -anklung -ankus -ankyloglossia -ankylosaur -ankylosis -ankylostomiasis -anlace -anlage -ann -anna -annabergite -annal -annalist -annatto -annealer -annelid -annexation -annexationism -annexationist -annexe -annexment -annihilability -annihilation -annihilationism -annihilationist -annihilator -anniv -anniversary -annot -annotation -annotator -announcement -announcer -annoyance -annoyer -annoyingness -annuitant -annuity -annularity -annulation -annulet -annulment -annulus -annunciation -annunciator -anoa -anociassociation -anode -anodontia -anodyne -anoesis -anoestrus -anoia -anointer -anointment -anole -anolyte -anomalism -anomalousness -anomaly -anomia -anomie -anomite -anonychia -anonym -anonymity -anonymousness -anoopsia -anopheles -anopia -anopisthograph -anorak -anorexia -anorexiant -anorthite -anorthoclase -anorthosite -anoscope -anosmia -anosognosia -anoxaemia -anoxemia -anoxia -ans -ansa -anstoss -answer -answerability -answerableness -answerer -ant -anta -antacid -antagonisation -antagonism -antagonist -antagonization -antalkali -antapex -antarala -antaranga -antbird -ante -anteater -antecedence -antecedency -antecedent -antecessor -antechamber -antechapel -antechoir -antecourt -antefix -anteflexion -antehall -antelope -antenave -antenna -antennifer -antennule -antenumber -antepast -antependium -antepenult -anteporch -anteport -anteportico -anteriority -anteroom -antetype -anteversion -anthelion -anthelix -anthelmintic -anthem -anthema -anthemion -anther -antheridium -antherozoid -anthesis -anthobian -anthocyanin -anthodium -anthol -anthologist -anthology -anthophore -anthophyllite -anthotaxy -anthozoan -anthracene -anthracite -anthracnose -anthracosilicosis -anthracosis -anthraquinone -anthrasilicosis -anthrax -anthrop -anthropocentrism -anthropogenesis -anthropogeographer -anthropogeography -anthropography -anthropol -anthropolater -anthropolatry -anthropologist -anthropology -anthropometer -anthropometrist -anthropometry -anthropomorphisation -anthropomorphism -anthropomorphist -anthropomorphization -anthropomorphosis -anthroponomist -anthroponomy -anthropopathy -anthropophagite -anthropophagy -anthroposcopy -anthroposophy -anthurium -antiaggressiveness -antialcoholism -antialcoholist -antiannexationist -antiar -antiatheist -antiauxin -antibacchius -antibaryon -antibiosis -antibiotic -antibody -antic -anticapitalism -anticapitalist -anticatalase -anticatalyst -anticathexis -anticathode -anticensoriousness -anticensorship -anticentralism -anticentralist -anticeremonialism -anticeremonialist -anticeremoniousness -antichlor -anticholinesterase -antichthon -anticipation -anticipator -anticlassicalism -anticlassicalist -anticlassicalness -anticlassicism -anticlassicist -anticlericalism -anticlericalist -anticlimax -anticline -anticlinorium -anticoagulation -anticoagulator -anticoincidence -anticommercialism -anticommercialist -anticommerciality -anticommercialness -anticommunism -anticommunist -anticonfederationism -anticonfederationist -anticonformist -anticonformity -anticonscription -anticonservatism -anticonservativeness -anticonstitutionalism -anticontagiousness -anticonventionalism -anticonventionalist -anticonvulsant -anticorona -anticorrosive -anticorrosiveness -anticreationism -anticreationist -anticreativeness -anticreativity -anticriticalness -anticum -anticyclogenesis -anticyclolysis -anticyclone -anticynic -anticynicism -antidemocracy -antidemocrat -antidepressant -antiderivative -antidisestablishmentarianism -antidogmatism -antidogmatist -antidoron -antidote -antidrug -antiecclesiastic -antiecclesiasticism -antieducationalist -antieducationist -antiegoism -antiegoist -antiegotism -antiegotist -antiempiric -antiempiricism -antiempiricist -antienthusiasm -antienthusiast -antienzyme -antievolutionist -antiexpansionism -antiexpansionist -antiexpressionism -antiexpressionist -antiexpressiveness -antifascism -antifascist -antifebrin -antifeminism -antifeminist -antiferromagnet -antiferromagnetism -antifeudalism -antifeudalist -antifoggant -antifreeze -antifriction -antifundamentalism -antifundamentalist -antigen -antigenicity -antigorite -antigrammaticalness -antigravity -antihalation -antihelix -antihero -antihierarchism -antihierarchy -antihistamine -antihumanism -antihumanist -antihunting -antihysteric -antiketogenesis -antiknock -antilegomena -antilepton -antiliberalism -antiliberalist -antiliberalness -antiliturgist -antilog -antilogarithm -antilogism -antilogy -antimacassar -antimasker -antimasque -antimasquer -antimaterialism -antimaterialist -antimatter -antimechanism -antimechanist -antimediaevalism -antimediaevalist -antimedievalism -antimedievalist -antimension -antimensium -antimere -antimerism -antimethodicalness -antimilitarism -antimilitarist -antiministerialist -antimodernism -antimodernist -antimodernness -antimonarchism -antimonarchist -antimonate -antimonide -antimonopolism -antimonopolist -antimonsoon -antimony -antimonyl -antimoralism -antimoralist -antimusicalness -antimysticalness -antimysticism -antinationalism -antinationalist -antinaturalism -antinaturalist -antinaturalness -antineutralism -antineutrality -antineutrino -antineutron -anting -antinihilism -antinihilist -antinode -antinomianism -antinomy -antinoness -antinormality -antinovel -antinucleon -antioptimism -antioptimist -antiorthodoxy -antioxidant -antioxidizer -antioxygenation -antioxygenator -antiozonant -antipacifism -antipacifist -antipapalist -antipapism -antipapist -antiparabema -antiparticle -antipasto -antipatheticalness -antipathist -antipathogen -antipathogene -antipathy -antipatriarch -antipatriarchy -antipatriot -antipatriotism -antiperistalsis -antiperspirant -antiphilosophism -antiphon -antiphonary -antiphony -antiphrasis -antiphysicalness -antipode -antipole -antipope -antipopery -antipopulism -antipragmaticism -antipragmatism -antipragmatist -antiprelatism -antiprelatist -antiproductiveness -antiprohibitionist -antiproton -antipsalmist -antipsychiatry -antipuritan -antipyresis -antipyrine -antiq -antiquarianism -antiquary -antiquatedness -antiquation -antique -antiqueness -antiquer -antiquity -antiracing -antiradical -antiradicalism -antirationalism -antirationalist -antirationality -antireactionary -antirealism -antirealist -antireducer -antireformer -antireformist -antireligionist -antireligiosity -antiremonstrant -antirenter -antirentism -antirepublicanism -antiresonance -antirevisionist -antirevolutionary -antirevolutionist -antiritualism -antiritualist -antiromanticism -antiromanticist -antiroyalism -antiroyalist -antirrhinum -antisceptic -antiscepticism -antischolasticism -antisensitivity -antisensitizer -antisensuality -antisensuousness -antisepsis -antiserum -antiskeptic -antiskepticism -antisociality -antisophism -antisophist -antisophistication -antisophistry -antispiritualism -antispiritualist -antispreader -antistater -antistatism -antistatist -antistimulation -antistriker -antistrophe -antisudorific -antisuffragist -antisupernaturalism -antisupernaturalist -antisyndicalism -antisyndicalist -antitheologian -antithesis -antitoxin -antitrade -antitraditionalist -antitragus -antitrust -antitype -antiunionist -antiutilitarianism -antivaccinationist -antivaccinist -antivenin -antiworld -antler -antlia -antlion -antoninianus -antonomasia -antonym -antre -antrum -antshrike -antthrush -anuran -anuresis -anuria -anvil -anxiety -anxiousness -aoli -aorist -aorta -aortitis -aortoclasia -aortography -aoudad -ap -apa -apache -apagoge -apanage -aparavidya -aparejo -aparitif -apartheid -apartment -apartness -apastron -apathy -apatite -ape -apeiron -apeman -apercu -aperiodicity -aperiu -apertometer -aperture -apery -apetalousness -apetaly -apex -aph -aphaeresis -aphagia -aphakia -aphanite -aphanitism -aphasia -aphasiac -aphelion -apheliotropism -aphemia -apheresis -aphesis -aphid -aphidlion -aphis -aphlaston -aphonia -aphoriser -aphorism -aphorist -aphorizer -aphrodisia -aphrodisiac -aphtha -aphylly -apiarist -apiary -apices -apiculture -apiculturist -apiculus -apiologist -apiology -apishness -aplanogamete -aplanospore -aplasia -aplite -aplomb -aplustre -apnea -apnoea -apocalypse -apocalypticism -apocarp -apocarpy -apocatastasis -apocenter -apocentricity -apochromat -apochromatism -apocopation -apocope -apocrypha -apocryphalness -apocynthion -apodeipnon -apodema -apodeme -apodosis -apoenzyme -apoferritin -apogamy -apogee -apogeotropism -apograph -apokatastasis -apollo -apologete -apologetics -apologia -apologiser -apologist -apologizer -apologue -apology -apolune -apomict -apomixis -apomorphine -aponeurosis -apophasis -apophony -apophthegm -apophyge -apophyllite -apophysis -apoplexy -apopyle -aporia -aposiopesis -apospory -apostasy -apostate -apostatism -apostil -apostle -apostlehood -apostleship -apostolate -apostolicalness -apostolicism -apostolicity -apostrophe -apothecary -apothecium -apothegm -apothem -apotheosis -apotropaism -app -appanage -appar -apparatchik -apparatus -apparel -apparentement -apparentness -apparition -apparitor -appd -appeal -appealability -appealer -appealingness -appearance -appeasableness -appeasement -appeaser -appel -appellant -appellation -appellative -appellativeness -appellee -appellor -appendage -appendance -appendancy -appendectomy -appendence -appendency -appendicectomy -appendicitis -appendicle -appendix -appentice -appenzell -apperception -appersonation -appestat -appetence -appetency -appetite -appetizer -applauder -applause -apple -applecart -applejack -apples -applesauce -applesnits -appliableness -appliance -applicability -applicableness -applicant -application -applicator -applier -applique -appmt -appoggiatura -appointee -appointer -appointment -appointor -apportioner -apportionment -apposability -apposer -appositeness -apposition -appraisal -appraiser -appreciation -appreciativeness -appreciator -apprehender -apprehensibility -apprehension -apprehensiveness -apprentice -apprenticehood -apprenticeship -apprizer -appro -approachability -approachableness -approacher -approbation -approbativeness -approbator -appropriateness -appropriation -appropriativeness -appropriator -approvability -approval -approvedness -approver -approx -approximation -appulse -appurtenance -apr -apraxia -apricot -apriorism -apriorist -apriority -apritif -apron -aprosexia -apse -apsidiole -apsis -apterium -apteryx -aptitude -aptness -apx -aqua -aquacade -aquaculture -aquaemanale -aqualung -aquamanale -aquamanile -aquamarine -aquanaut -aquaphobia -aquaplane -aquaplaner -aquarelle -aquarellist -aquarist -aquarium -aquashow -aquatint -aquatinter -aquatone -aquavit -aqueduct -aqueousness -aquiclude -aquiculture -aquiculturist -aquifer -aquilegia -ar -araban -arabesque -arability -arabinose -arachnid -arachnoid -aragonite -arak -araneid -arapaima -araroba -araucaria -arbalest -arbalester -arbalister -arbiter -arbitrage -arbitrager -arbitrament -arbitrariness -arbitration -arbitrationist -arbitrator -arbitrement -arbitrer -arbitress -arbor -arborescence -arboretum -arboriculture -arboriculturist -arborist -arborization -arborvitae -arbour -arbtrn -arbutus -arc -arca -arcade -arcana -arcanist -arcanum -arcature -arch -archaeocyte -archaeol -archaeologist -archaeology -archaeomagnetism -archaeopteryx -archaeornis -archaiser -archaism -archaist -archaizer -archangel -archbanc -archbishop -archbishopric -archconfraternity -archd -archdeacon -archdeaconate -archdeaconry -archdeaconship -archdiocese -archduchess -archduchy -archduke -archebanc -archegonium -archenemy -archenteron -archeocyte -archeologist -archeology -archer -archerfish -archery -archespore -archesporium -archetto -archetype -archfiend -archiblast -archicarp -archidiaconate -archiepiscopacy -archiepiscopate -archil -archimage -archimandrite -archine -arching -archipelago -archiphoneme -archiplasm -archit -architect -architectonics -architecture -architrave -archive -archivist -archivolt -archlute -archness -archon -archonship -archoplasm -archpriest -archpriesthood -archpriestship -archsee -archt -archway -arcograph -arcosolium -arcs -arcticologist -arcticology -arcuation -arcus -ardeb -ardency -ardentness -ardish -ardor -ardour -arduousness -area -areaway -areca -areg -arena -arenite -arenosity -areography -areola -areolation -areole -areologist -areology -arete -arethusa -arfvedsonite -arg -argal -argali -argasid -argent -argentite -argentum -arghool -argil -argillite -arginine -arglebargle -argol -argon -argonon -argosy -argot -arguer -argufier -argument -argumentation -argumentativeness -argumentum -argyrodite -arhythmia -aria -aridity -aridness -ariel -arietta -aril -arillode -arioso -arista -aristarch -aristarchy -aristocracy -aristocrat -aristocraticalness -aristocraticness -aristodemocracy -aristotype -arith -arithmancy -arithmetic -arithmetician -arithmomancy -ark -arkose -arkwright -arm -armada -armadillo -armament -armamentarium -armarian -armarium -armary -armature -armband -armchair -armer -armet -armful -armguard -armhole -armiger -armill -armilla -arming -armipotence -armistice -armlet -armload -armoire -armomancy -armor -armorbearer -armorer -armorist -armory -armour -armourbearer -armourer -armoury -armpad -armpit -armrest -armure -army -armyworm -arnatto -arnica -aroma -aromaticity -aromaticness -aromatiser -aromatization -aromatizer -arousal -arouser -arpeggiation -arpeggio -arpent -arquebus -arquebusier -arr -arrack -arraigner -arraignment -arrangement -arranger -arras -array -arrayal -arrear -arrearage -arrears -arrenotoky -arrester -arrestment -arrgt -arrhenotoky -arrhythmia -arri -arricciato -arriccio -arris -arriva -arrival -arriver -arrivisme -arriviste -arroba -arrogance -arrogation -arrogator -arrondissement -arrow -arrowhead -arrowroot -arrowwood -arrowworm -arroyo -arrythmia -arsenal -arsenate -arsenic -arsenide -arsenite -arsenolite -arsenopyrite -arshin -arsine -arsis -arson -arsonist -arsphenamine -art -artal -artefact -artel -artemisia -arterialisation -arterialization -arteriole -arteriology -arteriosclerosis -arteriotomy -arteritis -artery -artesonado -artfulness -arthralgia -arthrectomy -arthritis -arthrodia -arthrodire -arthrology -arthromere -arthropod -arthrospore -artic -artichoke -article -articulability -articulacy -articulateness -articulation -articulator -artifact -artifice -artificer -artificiality -artificialness -artillery -artilleryman -artiness -artiodactyl -artisan -artisanship -artist -artiste -artistry -artlessness -artophorion -artotype -artwork -arum -aruspex -aruspicy -arvo -aryballos -aryballus -aryl -arylamine -arylation -arythmia -asafetida -asafoetida -asana -asarabacca -asarotum -asarum -asb -asbestos -asbestosis -asbolane -ascariasis -ascarid -ascaridole -ascendancy -ascender -ascension -ascent -ascertainableness -ascertainer -ascertainment -ascesis -ascetic -asceticism -asci -ascidian -ascidium -ascites -ascocarp -ascogonium -ascomycete -ascon -ascospore -ascot -ascription -ascus -asdic -aseity -asemia -asepsis -asepticism -asgmt -ash -ashamedness -ashcan -ashet -ashkey -ashlar -ashlaring -ashman -ashplant -ashram -ashtray -asiderite -asininity -askarel -askari -asker -askos -asonia -asp -asparagine -asparagus -aspect -aspen -asper -aspergillosis -aspergillum -aspergillus -asperity -asperser -aspersion -aspersorium -asphalt -asphaltene -asphaltite -asphaltum -asphodel -asphyxia -asphyxiation -asphyxiator -aspic -aspidistra -aspirant -aspirata -aspiration -aspirator -aspirer -aspirin -assafetida -assagai -assailableness -assailant -assailer -assailment -assam -assassin -assassination -assassinator -assault -assaulter -assayer -assegai -assembl -assembla -assemblage -assembler -assembly -assemblyman -assent -assentation -assentiveness -assentor -asserter -assertion -assertiveness -assertor -assessment -assessor -assessorship -asset -asseveration -asshead -assheadedness -assibilation -assiduity -assiduousness -assignability -assignat -assignation -assignee -assigner -assignment -assignor -assimilability -assimilation -assimilationist -assimilativeness -assimilator -assistance -assistant -assistantship -assister -assistor -assize -assn -assoc -associability -associableness -association -associationism -associativeness -assonance -assorter -assortment -asst -assuagement -assuager -assumer -assumpsit -assumption -assurance -assuredness -assurer -assurgency -assuror -astasia -astaticism -astatine -aster -astereognosis -asteriscus -asterisk -asterism -asterixis -asteroid -asteroidean -asthenia -asthenope -asthenopia -asthenosphere -asthma -astigmatism -astigmatizer -astigmatometry -astigmatoscope -astigmatoscopy -astigmia -astigmometer -astigmometry -astigmoscope -astilbe -astonisher -astonishingness -astonishment -astr -astrachan -astragal -astragalomancy -astragalus -astrakhan -astraphobia -astriction -astrictiveness -astringency -astringer -astrionics -astrobiology -astrobotany -astrocompass -astrocyte -astrodome -astrodynamics -astrogation -astrogator -astrogeology -astrograph -astrography -astroid -astrol -astrolabe -astrologer -astrologian -astrologist -astrology -astromancer -astromancy -astrometry -astron -astronaut -astronautics -astronavigation -astronavigator -astronomer -astronomy -astrophotography -astrophysicist -astrophysics -astrosphere -astucity -astuteness -asylum -asymmetry -asymptote -asynchronism -asyndeton -asynergy -atabal -atacamite -ataghan -ataman -atar -ataraxia -atavism -atavist -ataxia -ataxite -atebrin -atelectasis -ateleiosis -atelier -ateliosis -athanasia -athar -atheism -atheist -atheisticness -atheling -athenaeum -athermancy -atheroma -atherosclerosis -athetosis -athlete -athleticism -athletics -athodyd -athrocyte -athrocytosis -atlantes -atlas -atm -atman -atmolysis -atmometer -atmometry -atmosphere -atoll -atom -atomicity -atomics -atomisation -atomism -atomist -atomization -atomizer -atomy -atonalism -atonality -atonement -atoner -atonicity -atony -atrabiliousness -atresia -atrichia -atrium -atroceruleous -atrociousness -atrocity -atrophy -atropine -atropism -att -attabal -attach -attacha -attacher -attachment -attacker -attainability -attainableness -attainder -attainer -attainment -attainture -attapulgite -attar -attemperator -attemptability -attempter -attendance -attendant -attender -attention -attentiveness -attenuation -attenuator -attestant -attestation -attestator -attester -attestor -attic -atticist -attingence -attingency -attirement -attitude -attitudinarian -attitudinarianism -attitudiniser -attitudinizer -attorney -attorneyship -attornment -attractableness -attractant -attracter -attraction -attractiveness -attractor -attrib -attributer -attribution -attributiveness -attributor -attriteness -attrition -atty -aubade -auberge -aubergine -aubergiste -aubrietia -auburn -auction -auctioneer -aud -audaciousness -audacity -audibility -audibleness -audience -audile -audio -audiogram -audiology -audiometer -audiometry -audion -audiophile -audiotypist -audiphone -audit -audition -auditor -auditorium -auditorship -auditress -aug -augend -auger -augite -augmentation -augmenter -augur -augury -augustness -auk -auklet -aulophyte -aulos -aumbry -aumildar -aune -aunt -auntie -aunty -aura -auramine -aurar -aureateness -aurelia -aurelian -aureole -aureolin -aureus -auricle -auricula -auricularia -aurification -auriga -auriscope -aurist -aurochs -aurora -aurum -auscultation -auscultator -ausforming -auspex -auspice -auspiciousness -austenite -austereness -austerity -australite -australopithecine -austringer -autacoid -autarch -autarchist -autarchy -autarkist -autarky -auteciousness -autecism -autecology -auteur -auth -authentication -authenticator -authenticity -author -authorisation -authoriser -authoritarianism -authoritativeness -authority -authorization -authorizer -authors -authorship -autism -autist -auto -autoantibody -autobahn -autobiographer -autobiography -autobus -autocade -autocatalysis -autocatharsis -autocephaly -autochanger -autochrome -autochromy -autochthon -autochthonism -autochthonousness -autochthony -autoclave -autocoid -autocollimation -autocollimator -autocorrelation -autocracy -autocrat -autocross -autocue -autocycle -autodidact -autodyne -autoeciousness -autoecism -autoeroticism -autoerotism -autogamy -autogenesis -autogiro -autograft -autograph -autography -autogyro -autoharp -autohypnosis -autoignition -autoinfection -autoinoculation -autointoxication -autoionization -autoist -autokinesis -autolithography -autolysin -autolysis -automat -automata -automaticity -automatictacessing -automation -automatism -automatist -automatograph -automaton -automechanism -automobile -automobilist -automorphism -autonomist -autonomy -autonym -autooxidation -autophyte -autopilot -autopista -autoplast -autoplasty -autopolyploidy -autopsist -autopsy -autoput -autoradiograph -autoradiography -autoreflection -autorotation -autoroute -autosome -autostability -autostoper -autostrada -autosuggestibility -autosuggestion -autosuggestionist -autotelism -autotimer -autotomy -autotoxaemia -autotoxemia -autotoxicosis -autotoxin -autotransformer -autotransplant -autotroph -autotrophy -autotruck -autotype -autotypy -autoxidation -autumn -autunite -aux -auxanometer -auxesis -auximone -auxin -auxocardia -auxochrome -av -avadavat -availability -availableness -avalanche -avarice -avariciousness -avatar -avdp -avenger -avens -aventail -aventurine -avenue -average -averment -averseness -aversion -averter -avg -aviary -aviation -aviator -aviatrix -avicularium -aviculture -aviculturist -avidin -avidity -avidya -avifauna -avigation -avigator -avion -avionics -avirulence -aviso -avitaminosis -avizandum -avn -avo -avocado -avocation -avocet -avodire -avoidance -avoider -avoir -avoirdupois -avoset -avoucher -avouchment -avowal -avowedness -avower -avowry -avulsion -avunculate -awaiter -awakener -awarder -awareness -awe -awedness -awelessness -awesomeness -awfulness -awkwardness -awl -awlessness -awlwort -awmous -awn -awner -awning -ax -axanthopsia -axe -axel -axes -axiality -axil -axilemma -axilla -axillar -axinite -axinomancy -axiologist -axiology -axiom -axis -axle -axletree -axman -axolotl -axon -axoplasm -axseed -ayah -ayahuasca -aye -ayin -ayous -ayre -az -azalea -azan -azathioprine -azedarach -azeotrope -azeotropism -azeotropy -azide -azimuth -azine -azlon -azobenzene -azoimide -azole -azophenylene -azote -azotemia -azoth -azotobacter -azulejo -azure -azurite -azurmalachite -azygospore -b -ba -baas -baaskap -baba -babassu -babblement -babbler -babe -babesia -babesiosis -babiche -babirusa -babka -baboo -baboon -baboonery -babracot -babu -babul -babushka -baby -babyhood -babyishness -bacca -baccalaureate -baccarat -bacchanal -bacchanalianism -bacchant -bacchante -bacchius -baccillum -baccy -bach -bachamel -bachelor -bachelordom -bachelorhood -bachelorism -bacillemia -bacillus -bacitracin -back -backache -backband -backbencher -backbend -backbiter -backboard -backbone -backbreaker -backchat -backcloth -backcourt -backdown -backdrop -backer -backfall -backfield -backflow -backgammon -background -backhand -backhandedness -backhander -backhaul -backhouse -backing -backlash -backlighting -backlog -backpack -backpacker -backplate -backrest -backrope -backsaw -backscatter -backscratcher -backset -backsheesh -backside -backsight -backslapper -backslapping -backslider -backspin -backsplice -backstabber -backstay -backstitch -backstop -backstreet -backstretch -backstroke -backswimmer -backswing -backsword -backswordman -backup -backveld -backwardation -backwardness -backwash -backwasher -backwater -backwoodsman -backyard -baclava -bacon -baconer -bact -bacteraemia -bacteremia -bactericide -bacterin -bacterioid -bacteriol -bacteriologist -bacteriology -bacteriolysis -bacteriolytic -bacteriophage -bacteriophagy -bacterioscopist -bacterioscopy -bacteriostasis -bacteriostat -bacterium -bacterization -bacteroides -baculite -baculoid -baculum -baddeleyite -badderlocks -baddie -badge -badger -badigeon -badinage -badinerie -badman -badminton -badness -bael -baetyl -bafflement -baffleplate -baffler -bafflingness -baffy -bag -bagasse -bagatelle -bagel -bagful -baggage -baggagemaster -bagged -bagginess -bagging -baggywrinkle -bagh -baghla -bagie -bagio -bagman -bagnette -bagnio -bagpipe -bagpiper -baguette -baguio -bagwash -bagwig -bagwoman -bagwork -bagworm -bahadur -baht -bahut -bahuvrihi -bai -baidarka -baigneuse -bail -bailee -bailey -bailie -bailiff -bailiffship -bailiwick -bailment -bailor -bailout -bailsman -bainite -bairn -bairnishness -bait -baiter -baize -bajada -bakeapple -bakehouse -bakemeat -baker -bakery -bakeware -baking -baklava -bakra -baksheesh -bal -balaclava -balalaika -balance -balancer -balao -balas -balata -balboa -balbriggan -balconet -balcony -baldachin -balderdash -baldhead -baldmoney -baldness -baldoquin -baldpate -baldpatedness -baldric -bale -baleen -balefire -balefulness -baler -balestra -balibuntal -baline -balker -balkiness -balkline -ball -ballad -ballade -balladeer -balladist -balladmonger -balladmongering -balladry -ballas -ballast -ballaster -ballata -baller -ballerina -ballet -balletomane -balletomania -ballett -ballflower -ballism -ballista -ballistician -ballistics -ballistite -ballistocardiogram -ballistocardiograph -ballistocardiography -ballium -ballon -ballonet -ballonna -balloon -balloonfish -ballot -ballotade -balloter -ballottement -ballottine -ballpark -ballplayer -ballpoint -ballroom -ballup -ballyhoo -balm -balmacaan -balminess -balneologist -balneology -balon -baloney -balopticon -balsa -balsam -balteus -balun -baluster -balustrade -bambino -bambocciade -bamboo -bamboozlement -bamboozler -banality -banana -bananaquit -banat -banc -band -bandage -bandager -bandanna -bandbox -bandeau -bandelet -bander -banderilla -banderillero -banderole -bandersnatch -bandh -bandicoot -bandiness -banding -bandit -banditry -bandleader -bandlet -bandmaster -bandobust -bandog -bandoleer -bandoline -bandore -bandsman -bandspreading -bandstand -bandura -bandurria -bandwagon -bandwidth -bane -baneberry -banefulness -bang -bangalay -bangboard -banger -bangle -bangtail -bani -bania -banian -banisher -banishment -banister -banjo -banjoist -bank -bankbook -banker -banket -banking -bankroll -bankroller -bankrupt -bankruptcy -banksia -banlieue -banner -banneret -bannerette -bannerman -bannerol -bannister -bannock -banquet -banqueter -banquette -bansela -banshee -bant -bantam -bantamweight -banterer -banting -bantling -banyan -baobab -bap -baptism -baptistery -baptistry -baptizement -baptizer -bar -barabara -baragnosis -baraka -barat -barathea -baraza -barb -barba -barbacan -barbarian -barbarianism -barbarisation -barbarism -barbarity -barbarization -barbarousness -barbe -barbecue -barbel -barbell -barbeque -barber -barberite -barberry -barbershop -barbet -barbette -barbican -barbicel -barbierite -barbital -barbitone -barbiturate -barbiturism -barbotine -barbu -barbudo -barbule -barbut -barbwire -barcarole -barchan -bard -barde -bardiness -bardolatry -bardship -barefacedness -barege -bareheadedness -bareness -baresark -baresthesia -barfly -bargain -bargainer -barge -bargeboard -bargee -bargello -bargeman -bargepole -bargestone -barghest -barih -barilla -barit -barite -baritone -barium -bark -barkeeper -barkentine -barker -barkhan -barley -barleycorn -barm -barmaid -barman -barn -barnacle -barndoor -barney -barnstormer -barnyard -baroclinity -barocyclonometer -barognosis -barogram -barograph -barolo -barometer -barometrograph -barometry -baron -baronage -baroness -baronet -baronetage -baronetcy -barong -barony -baroque -baroscope -barosinusitis -barostat -baroswitch -barothermogram -barothermograph -barothermohygrogram -barothermohygrograph -barotrauma -barotropy -barouche -barque -barquentine -barquette -barr -barra -barracker -barracoon -barracouta -barracuda -barracudina -barrage -barramunda -barramundi -barranca -barrator -barratry -barre -barrel -barreleye -barrelfish -barrelful -barrelhead -barrelhouse -barrenness -barrenwort -barret -barretor -barretry -barrette -barretter -barricade -barricader -barricado -barrier -barrio -barrister -barroom -barrow -barrulet -barspoon -barstool -bartender -barterer -bartizan -barton -barycentre -barye -baryon -barysphere -baryta -barytes -barytocalcite -baryton -barytone -basalt -basaltware -basanite -bascinet -bascule -base -baseball -baseboard -baseburner -basecoat -baseline -baseliner -baseman -basement -baseness -basenji -baseplate -bases -bashaw -bashfulness -bashibazouk -basiation -basicity -basidiocarp -basidiomycete -basidiospore -basidium -basil -basilard -basilica -basilisk -basin -basinet -basion -basis -basket -basketball -basketful -basketry -basketwork -basnet -bason -bass -bassarisk -basset -bassinet -bassist -bassness -basso -bassoon -bassoonist -basswood -bast -bastardisation -bastardization -bastardry -bastardy -baster -basti -bastide -bastille -bastinade -basting -bastion -bastite -bastnaesite -bat -batata -batch -bateau -bateleur -batfish -batfowler -bath -bather -bathhouse -batholith -bathometer -bathos -bathrobe -bathroom -bathtub -bathymeter -bathymetry -bathyscaphe -bathysphere -bathythermogram -bathythermograph -batik -batiste -batman -baton -batrachian -batsman -batsmanship -batswing -batt -batta -battalia -battalion -batteau -battel -batteler -battement -batten -battener -batterie -battery -battik -batting -battle -battledore -battlefield -battlefront -battlement -battlepiece -battleplane -battler -battleship -battologist -battology -battue -battuta -battuto -batuque -batwoman -bauble -baud -baudekin -baudrons -bauhinia -baulk -bauson -bauxite -bavardage -bawarchi -bawbee -bawcock -bawd -bawdiness -bawdry -bawdyhouse -bawler -bawtie -bawty -bay -baya -bayadere -bayamo -bayard -bayberry -bayonet -bayou -baysmelt -baywood -bazaar -bazoo -bazooka -bazookaman -bb -bbl -bch -bd -bde -bdellium -bdl -beach -beachboy -beachcomber -beacher -beachhead -beachie -beachwear -beacon -beaconage -bead -beader -beadeye -beadhouse -beadiness -beading -beadle -beadledom -beadroll -beadsman -beadswoman -beadwork -beagle -beagling -beak -beaker -beam -beaminess -bean -beanbag -beanery -beanfeast -beanie -beano -beanpole -beanshooter -beanstalk -bearableness -bearbaiter -bearbaiting -bearberry -bearbush -bearcat -beard -beardfish -bearding -beardlessness -beardtongue -bearer -bearing -bearishness -bearpaw -bearskin -bearwood -beast -beastie -beastings -beastliness -beata -beater -beatification -beating -beatitude -beatnik -beatus -beau -beaugregory -beaujolais -beaut -beauteousness -beautician -beautification -beautifier -beautifulness -beauty -beaux -beaver -beaverette -bebeerine -bebeeru -bebop -bebopper -bec -beccafico -beche -beck -becket -beckoner -becomingness -bed -bedazzlement -bedbug -bedchamber -bedclothing -bedcover -bedder -bedding -bedeguar -bedehouse -bedel -bedeman -bedesman -bedeswoman -bedevilment -bedfellow -bedframe -bedizenment -bedlam -bedlamite -bedlamp -bedlight -bedmaker -bedmaking -bedmate -bedpad -bedpan -bedplate -bedpost -bedquilt -bedrail -bedrock -bedroll -bedroom -bedside -bedsitter -bedsock -bedsore -bedspread -bedspring -bedstand -bedstead -bedstraw -bedtick -bedtime -bedwarmer -bee -beebread -beech -beechnut -beedi -beef -beefburger -beefcake -beefeater -beefiness -beefsteak -beefwood -beehive -beekeeper -beekeeping -beeline -beento -beep -beeper -beer -beerhouse -beeriness -beerpull -beestings -beeswax -beeswing -beet -beetfly -beetle -beetlehead -beetler -beetroot -beeves -beezer -bef -befittingness -befouler -befoulment -befuddlement -befuddler -begar -beggar -beggardom -beggarhood -beggarliness -beggarweed -beggary -beginner -beginning -begonia -beguilement -beguiler -beguine -begum -behalf -behavior -behaviorism -behaviorist -behaviour -beheadal -beheader -behemoth -behest -beholder -behoof -beige -beigel -being -bejel -bel -belah -belatedness -belauder -belcher -beldam -beleaguerer -belection -belemnite -belfry -belga -belief -belier -believability -believableness -believer -belittlement -belittler -bell -belladonna -bellarmine -bellbird -bellboy -belle -belletrist -bellflower -bellhop -bellicoseness -bellicosity -belligerence -belligerency -bellman -bellower -bellows -bellpull -bellwether -bellwort -belly -bellyache -bellyacher -bellyband -bellybutton -bellyful -belomancy -belonging -belt -beltcourse -belting -beltline -beltman -beltway -beluga -belvedere -bema -bemirement -bemusement -ben -bench -bencher -benchmark -benchwarmer -bender -bendlet -benedicite -benedict -benediction -benefaction -benefactor -benefice -beneficence -beneficialness -beneficiary -benefit -benefiter -benevolence -benevolentness -bengaline -benightedness -benignancy -benignity -benison -benitoite -benjamin -benne -bennet -benny -benthos -bentonite -bentwood -benumbedness -benumbment -benzalacetone -benzaldehyde -benzamine -benzene -benzeneazobenzene -benzidine -benzine -benzoate -benzocaine -benzofuran -benzoin -benzol -benzonitrile -benzophenone -benzoquinone -benzosulfimide -benzotrichloride -benzotrifluoride -benzoyl -benzoylation -benzyl -bequeathal -bequeather -bequeathment -bequest -berberine -berberis -berceuse -berdache -bereavement -bereaver -beret -beretta -berg -bergall -bergamasca -bergamot -bergare -bergschrund -beriberi -berk -berkelium -berley -berlin -berm -berretta -berry -bersagliere -berseem -berserker -berth -bertha -berthage -beryl -beryllium -beryllonite -besague -besant -beseecher -beseechingness -besetment -besetter -beshow -besiegement -besieger -besmearer -besmircher -besom -besottedness -bestiarist -bestiary -bestowal -bestowment -bestsellerdom -bet -beta -betacaine -betafite -betaine -betatron -betel -beth -bethel -bethroot -betise -betony -betrayal -betrayer -betrothal -betta -betterment -bettor -betty -betweenbrain -betweenness -bevatron -bevel -beveler -bever -beverage -bevvy -bevy -bewailment -bewilderment -bewitcher -bewitchery -bewitchingness -bewitchment -bewrayer -bey -beyondness -bezant -bezel -bezique -bezoar -bezonian -bezzant -bf -bg -bhajan -bhakta -bhakti -bhaktimarga -bhang -bhangi -bharal -bhavan -bheesty -bhindi -bhishti -bhp -bhungi -bhut -bi -biacetyl -bialy -bias -biathlon -biaxiality -bib -bibb -bibber -bibcock -bibelot -bibl -biblioclasm -biblioclast -bibliofilm -bibliog -bibliogony -bibliographer -bibliography -biblioklept -bibliolater -bibliolatrist -bibliolatry -bibliologist -bibliology -bibliomancy -bibliomania -bibliomaniac -bibliopegist -bibliopegy -bibliophage -bibliophile -bibliophilism -bibliophily -bibliophobe -bibliophobia -bibliopole -bibliopolism -bibliopoly -bibliotaph -bibliotheca -bibliotherapist -bibliotherapy -bibliotics -bibliotist -bibulosity -bibulousness -bicameralism -bicameralist -bicarb -bicarbonate -bice -biceps -bichloride -bichromate -bickerer -bickering -bicollaterality -biconcavity -biconditional -bicone -bicorne -bicron -bicycle -bicycler -bicyclist -bidarka -biddability -biddableness -bidding -biddy -bider -bidet -bidi -bield -biennium -bier -bierkeller -bierstube -biestings -biff -biffin -bifidity -bifluoride -biformity -bifurcation -biga -bigamist -bigamy -bigarreau -bigener -bigeye -bigg -biggie -biggin -bigging -biggy -bighead -bighorn -bight -bigmouth -bigness -bignonia -bigot -bigotry -biguanide -bigwig -bigwiggedness -bijection -bijou -bijouterie -bike -bikie -bikini -bilander -bilateralism -bilateralness -bilberry -bilbo -bilby -bile -bilection -bilestone -bilge -bilgeway -bilharzia -bilharziasis -bilingualism -bilinguist -biliousness -bilirubin -biliteralism -bilith -biliverdin -bilker -bill -billabong -billboard -billbug -biller -billet -billeter -billethead -billfish -billfold -billhead -billhook -billiard -billiardist -billiards -billing -billingsgate -billion -billionaire -billman -billon -billow -billowiness -billposter -billposting -billsticking -billy -billyboy -billycock -billyo -bilocation -bilsted -biltong -bimah -bimane -bimbo -bimester -bimetallism -bimetallist -bimethyl -bimillennium -bimodality -bimodule -bimorph -bimotor -bin -bination -binder -bindery -bindheimite -binding -bindingness -bindle -bindweed -bine -bing -binge -bingey -binghi -bingle -bingo -bingy -binnacle -binocle -binocularity -binomial -binomialism -binormal -binoxalate -bint -binturong -bioassay -bioastronautics -biobibliographer -biobibliography -biocatalyst -biocenology -biochemist -biochemistry -biocide -bioclimatician -bioclimatologist -bioclimatology -biocycle -biodynamics -bioecologist -bioecology -bioelectricity -bioelectrogenesis -bioenergetics -bioengineering -biofeedback -bioflavonoid -biofog -biog -biogen -biogenesis -biogeochemistry -biogeography -biographee -biographer -biography -bioherm -biol -biologism -biologist -biology -bioluminescence -biolysis -biomagnetism -biomass -biome -biomedicine -biometer -biometrician -biometrics -biometry -bionics -bionomics -bionomist -bionomy -biophysicist -biophysics -bioplasm -biopoiesis -biopsy -bioscope -bioscopy -biosociology -biosphere -biostatics -biostrome -biosynthesis -biota -biotechnology -biotin -biotite -biotope -biotype -biotypology -bipack -bipartisanism -bipartisanship -bipartition -biped -biphenyl -bipinnaria -biplane -bipod -bipolarity -bipropellant -bipyramid -biquadrate -biracialism -birch -bird -birdbath -birdbrain -birdcage -birder -birdhouse -birdie -birdlime -birdman -birdseed -birdwoman -birefringence -bireme -biretta -biri -biriani -birk -birling -birne -birota -birrus -birse -birth -birthday -birthmark -birthnight -birthplace -birthright -birthroot -birthstone -birthstool -birthwort -biscuit -bise -bisection -bisector -bisectrix -bisellium -bish -bishop -bishopbird -bishopric -bishydroxycoumarin -bisk -bismanol -bismuth -bismuthine -bismuthinite -bismuthyl -bismutite -bisnaga -bison -bisphenoid -bisque -bissextus -bisso -bissonata -bister -bistort -bistoury -bistre -bistro -bisulfate -bisulfide -bisulfite -bisulphate -bisulphide -bisulphite -bisymmetry -bit -bitartrate -bitchery -bitchiness -biter -bitewing -bitingness -bitonality -bitser -bitstock -bitt -bitterender -bitterling -bittern -bitterness -bitternut -bitterroot -bittersweet -bitterweed -bitterwood -bitterwort -bitting -bittock -bitumen -bituminisation -biuniqueness -bivalence -bivalency -bivalve -bivane -bivinyl -bivouac -bivvy -biz -bizarreness -bize -biznaga -bizone -bk -bkbndr -bkcy -bkg -bklr -bkpr -bks -bl -blabber -blabbermouth -blackacre -blackamoor -blackball -blackballer -blackbeetle -blackberry -blackbird -blackbirder -blackbirding -blackboard -blackboy -blackbuck -blackbutt -blackcap -blackcoat -blackcock -blackcurrant -blackdamp -blackener -blackface -blackfellow -blackfin -blackfire -blackfish -blackfly -blackguard -blackguardism -blackhead -blackheart -blackheartedness -blacking -blackishness -blackjack -blackleg -blacklist -blackmail -blackmailer -blackness -blackout -blackpatch -blackplate -blackpoll -blackrag -blacksmith -blacksnake -blacktail -blackthorn -blacktongue -blacktop -blackweed -blackwood -bladder -bladdernose -bladdernut -bladderpod -bladderwort -bladderwrack -blade -bladebone -blaeberry -blague -blah -blain -blamableness -blame -blameableness -blamefulness -blamelessness -blamer -blameworthiness -blanc -blancher -blancmange -blandisher -blandishment -blandness -blankbook -blanket -blanketing -blankness -blanquette -blanquillo -blarney -blasphemer -blasphemousness -blasphemy -blast -blastema -blaster -blastie -blasting -blastment -blastocoel -blastocyst -blastoderm -blastodisk -blastoff -blastogenesis -blastoma -blastomere -blastomycosis -blastopore -blastosphere -blastostyle -blastula -blatancy -blateness -blatherskite -blaubok -blaze -blazer -blazoner -blazonment -blazonry -bldg -bleachability -bleacher -bleachery -bleakness -blearedness -bleariness -blearyeyedness -bleater -bleaunt -bleb -bleeder -bleep -blellum -blemish -blemisher -blencher -blende -blender -blenny -blepharitis -blepharospasm -blesbok -blesbuck -blessedness -blesser -blessing -blet -bletting -blewits -blight -blighter -blighty -blimp -blindage -blindcat -blinder -blindfish -blindfoldedness -blindfolder -blinding -blindness -blindstorey -blindstory -blindworm -blinkard -blinker -blinks -blintz -blintze -blip -bliss -blissfulness -blister -blitheness -blithesomeness -blitz -blitzkrieg -blizzard -blk -bloatedness -bloater -blob -bloc -block -blockade -blockader -blockaderunning -blockage -blockboard -blockbuster -blockbusting -blocker -blockhead -blockheadedness -blockheadism -blockhouse -blockishness -bloke -blonde -blondeness -blondness -blood -bloodfin -bloodflower -bloodguiltiness -bloodhound -bloodiness -blooding -bloodlessness -bloodletter -bloodletting -bloodline -bloodmobile -bloodnoun -bloodroot -bloodshed -bloodstain -bloodstock -bloodstone -bloodstream -bloodsucker -bloodthirstiness -bloodworm -bloodwort -bloom -bloomer -bloomery -bloomingness -blooper -blossom -blot -blotch -blotter -blouse -blouson -blowball -blower -blowfish -blowfly -blowgun -blowhard -blowhole -blowie -blowiness -blowing -blowiron -blowlamp -blowoff -blowout -blowpipe -blowtorch -blowtube -blowup -bls -blubberer -blubberhead -blucher -bludgeon -bludgeoneer -bludgeoner -blue -bluebell -blueberry -bluebill -bluebird -bluebonnet -bluebook -bluebottle -bluecoat -bluefish -bluegill -bluegrass -bluehead -blueing -bluejack -bluejacket -blueness -bluenose -bluepoint -blueprint -blueprinter -bluer -bluest -bluestem -bluestocking -bluestockingism -bluestone -bluet -bluethroat -bluetick -bluetit -bluetongue -blueweed -bluewood -bluey -bluffer -bluffness -bluing -bluishness -blunder -blunderbuss -blunderer -blunger -bluntness -blurb -blurbist -blurredness -blusher -blushfulness -blusterer -blvd -blype -bn -boa -boar -board -boarder -boarding -boardinghouse -boardroom -boardwalk -boarfish -boarhound -boarishness -boart -boas -boaster -boastfulness -boat -boatage -boatbill -boatbuilder -boatel -boater -boathook -boathouse -boating -boatload -boatman -boatmanship -boatsman -boatswain -boattail -boatwright -boatyard -bobber -bobbery -bobbin -bobbinet -bobbing -bobble -bobby -bobbysoxer -bobcat -bobeche -bobfloat -boblet -bobol -bobolink -bobotie -bobowler -bobs -bobsled -bobsledder -bobsledding -bobsleigh -bobstay -bobtail -bobwhite -bocaccio -bocage -boccaccio -boccie -bod -bodega -bodegun -bodement -bodgie -bodhi -bodice -bodied -bodilessness -boding -bodkin -body -bodycheck -bodyguard -bodying -bodywork -boff -boffin -boffo -bog -bogan -bogbean -bogey -bogeyman -boggart -bogginess -boggler -bogie -bogle -bogong -bogtrotter -bogwood -bogy -bohea -bohorok -bohunk -boiler -boilermaker -boilerplate -boilover -boiserie -boisterousness -bokmakierie -boko -bol -bola -bolas -boldface -boldfacedness -boldheartedness -boldness -boldo -bole -bolection -bolero -boletus -bolide -bolivar -boliviano -boll -bollard -bollworm -bolo -bologna -bolograph -bolography -bolometer -boloney -bolson -bolsterer -bolsun -bolt -boltel -bolter -bolthead -boltonia -boltrope -bolus -boma -bombarder -bombardier -bombardment -bombardon -bombast -bombazine -bombe -bomber -bombilla -bombload -bombora -bombshell -bombsight -bombycid -bonanza -bonaventure -bonavist -bonbon -bonce -bond -bonder -bondholder -bondmaid -bondman -bondservant -bondsman -bondstone -bondswoman -bondwoman -bone -boneblack -bonefish -bonehead -boneheadedness -boneset -bonesetter -boneshaker -boneyard -bonfire -bong -bongo -bongrace -bonhomie -boniness -bonism -bonito -bonne -bonnet -bonnethead -bonnetiare -bonniness -bonnyclabber -bonsai -bonsela -bonspiel -bontebok -bontebuck -bonus -bonytail -bonze -boobialla -boobook -bood -boodle -boodler -boogeyman -book -bookbinder -bookbindery -bookbinding -bookcase -bookcraft -bookie -booking -bookishness -bookkeeper -bookkeeping -booklet -booklouse -booklover -bookmaker -bookmaking -bookman -bookmark -bookmobile -bookplate -bookrack -bookrest -bookseller -bookshelf -bookstack -bookstall -bookstand -bookstore -bookwork -bookworm -boomer -boomerang -boomkin -boomlet -boomslang -boon -boondocker -boondoggler -boong -boor -boorga -boorishness -boost -booster -boot -bootblack -boote -bootee -bootery -booth -bootie -bootjack -bootlace -bootlegged -bootlegger -bootlegging -bootlessness -bootlicker -bootloader -boots -bootstrap -boottopping -booty -booze -boozer -booziness -bopper -bor -bora -boracite -borage -borak -boral -borane -borasca -borate -borax -borazon -borborygmus -bord -bordel -bordello -border -bordereau -borderer -borderland -borderline -bordure -borecole -boredom -boree -borehole -borer -bori -boride -boring -borneol -bornite -boroglyceride -borohydride -boron -boronia -borosilicate -borough -borrasca -borrelia -borrower -borrowing -borscht -borstal -bort -borzoi -boscage -boschbok -boschvark -bosh -bosk -boskage -bosket -boskiness -bosom -boson -bosquet -boss -bossage -bossboy -bossiness -bossism -boston -bosun -boswellism -bot -botaniser -botanist -botanizer -botanomancy -botany -botargo -botcher -botchery -botchiness -botel -botfly -botheration -bothridium -bothrium -bothy -botryomycosis -botrytis -bots -bott -botte -bottega -bottle -bottlebrush -bottleneck -bottlenose -bottler -bottom -bottomlessness -bottomry -botulin -botulinus -botulism -bouch -bouche -bouchon -boucl -boucla -boud -boudeuse -boudoir -bouffancy -bouffe -bougainvillaea -bougainvillea -bough -boughpot -bougie -bouillabaisse -bouillon -bouk -boulder -bouldering -boule -bouleuterion -boulevard -boulevardier -bouleversement -boulimia -bouncer -boundary -boundedness -bounder -boundlessness -boundness -bounteousness -bountifulness -bounty -bouquet -bourbon -bourdon -bourg -bourgeois -bourgeoise -bourgeoisie -bourgeon -bourn -bournonite -bourr -bourrae -bourrasque -bourtree -bout -boutel -boutique -boutonniere -bouvardia -bouzouki -bovarism -bovarist -bovate -bovinity -bovver -bowdlerisation -bowdlerism -bowdlerization -bowdrill -bowedness -bowel -bowenite -bower -bowerbird -bowfin -bowgrace -bowhead -bowing -bowknot -bowl -bowlder -bowldering -bowleg -bowleggedness -bowler -bowline -bowling -bowman -bowpot -bowsaw -bowser -bowshot -bowsprit -bowstring -bowtel -bowwow -bowyang -bowyer -box -boxball -boxberry -boxboard -boxcar -boxer -boxfish -boxful -boxhead -boxholder -boxing -boxroom -boxthorn -boxwood -boy -boyar -boyardism -boyarism -boycotter -boyfriend -boyhood -boyishness -boyla -boyo -boysenberry -bozo -bp -br -bra -braata -brabblement -brabbler -braccae -braccio -brace -bracelet -bracer -bracero -brach -brachialgia -brachiation -brachiator -brachiopod -brachiosaurus -brachistochrone -brachium -brachycardia -brachycephalism -brachycephaly -brachydactylia -brachydome -brachylogy -brachyuran -bracingness -bracken -bracket -bracketing -brackishness -braconid -bract -bracteole -brad -bradawl -bradoon -bradsot -bradyauxesis -bradycardia -bradykinesia -bradykinesis -bradykinin -bradytely -brae -braggadocianism -braggadocio -braggart -braggartism -bragger -braguette -braider -braiding -braies -brail -brain -brainchild -braininess -brainlessness -brainpan -brainpower -brainsickness -brainstorm -brainstorming -brainwasher -brainwashing -brainwork -braird -brake -brakeage -brakeman -braker -brakesman -bramble -brambling -bran -branch -branchia -branching -branchiopod -branchiostegal -brand -brander -brandering -brandisher -brandling -brandreth -brandy -brangle -branle -branner -brannigan -bransle -brant -brashiness -brashness -brasier -brasil -brasilein -brasilin -brasque -brass -brassage -brassard -brasserie -brassey -brassica -brassie -brassiere -brassiness -brassware -brat -bratina -brattice -brattishing -brattle -bratwurst -braunite -bravado -braveness -bravery -bravest -bravura -brawl -brawler -brawn -brawniness -braxy -brayer -brayera -brayette -braza -brazenness -brazer -brazier -brazil -brazilein -brazilianite -brazilin -brazilite -brazilwood -breach -breacher -bread -breadbasket -breadboard -breadfruit -breadlessness -breadline -breadnut -breadroot -breadstuff -breadth -breadwinner -breadwinning -breakableness -breakage -breakaway -breakdown -breaker -breakfast -breakfaster -breaking -breakout -breakover -breakpoint -breakthrough -breakup -breakwater -breakweather -breakwind -breast -breastbone -breasting -breastpin -breastplate -breastplow -breaststroke -breastsummer -breastwork -breath -breatheableness -breather -breathiness -breathing -breathlessness -breccia -brecciation -brecht -brede -bree -breech -breechblock -breechcloth -breeching -breechloader -breeder -breeding -breenger -breeze -breezeway -breeziness -bregma -brekky -breloque -bremsstrahlung -brent -bressummer -bretelle -bretessa -brev -breva -breve -brevet -breviary -breviate -brevier -brevis -brevity -brewage -brewer -brewery -brewhouse -brewing -brewis -brewmaster -brian -briar -briarroot -briarwood -bribability -bribeability -briber -bribery -brick -brickbat -brickfield -brickfielder -brickkiln -bricklayer -bricklaying -brickleness -brickmaker -brickmaking -brickwork -brickyard -bricole -bride -bridegroom -bridesmaid -bridewell -bridge -bridgeboard -bridgehead -bridgeman -bridgetree -bridgewall -bridgework -bridging -bridie -bridle -bridler -bridoon -brie -briefcase -briefing -brieflessness -briefness -brier -brierroot -brierwood -brig -brigade -brigadier -brigadiership -brigalow -brigand -brigandage -brigandine -brigantine -brightener -brightness -brightwork -brigsail -brill -brilliance -brilliancy -brilliantine -brilliantness -brim -brimfullness -brimfulness -brimmer -brimstone -brindle -brine -briner -bringer -brininess -brinishness -brinjal -brink -brinkmanship -brinny -brio -brioche -briolette -briony -briquet -briquette -brisa -brisance -brisket -briskness -brisling -bristle -bristletail -bristliness -brisure -brit -britska -brittlebush -brittleness -britzka -briza -bro -broacher -broadax -broadbill -broadbrim -broadcaster -broadcloth -broadhead -broadleaf -broadloom -broadsheet -broadside -broadsword -broadtail -broadwife -brob -brocade -brocatel -brocatelle -broccoli -brochantite -broche -brochette -brochure -brock -brockage -brocket -brodie -broeboe -brogan -brogh -brogue -broguery -broiderer -broidery -broiler -brokage -brokenness -broker -brokerage -brokership -brolga -brolly -bromal -bromate -bromeliad -bromeosin -bromide -bromidrosis -bromination -bromine -bromisation -bromism -bromization -bromizer -bromochloromethane -bromoform -bromoil -bromomethane -bronchi -bronchiectasis -bronchiole -bronchitis -broncho -bronchobuster -bronchocele -bronchopneumonia -bronchorrhagia -bronchoscope -bronchoscopist -bronchoscopy -bronchospasm -bronchostomy -bronchus -bronco -broncobuster -brontosaur -brontosaurus -bronze -bronzed -bronzing -bronzite -broo -brooch -brood -brooder -broodiness -broodmare -brook -brookie -brookite -brooklet -brooklime -brookweed -broom -broomcorn -broomrape -broomsquire -broomstick -bros -brose -broth -brothel -brother -brotherhood -brotherliness -brotula -brough -brougham -broughta -brouhaha -brow -browband -browbeater -brown -brownie -browning -brownness -brownout -brownprint -brownstone -browser -brucella -brucellosis -brucine -brucite -brugh -bruin -bruiser -bruiter -bruja -brujo -brula -brulyie -brulyiement -brumby -brume -brunch -brunetness -brunette -brunetteness -brunt -brush -brusher -brushiness -brushlessness -brushpopper -brushup -brushwood -brushwork -brusqueness -brusquerie -brutalisation -brutalitarianism -brutality -brutalization -brute -bruteness -brutification -brutishness -bruxism -bryologist -bryology -bryony -bryophyte -bryozoan -bs -bsh -bskt -bt -btise -btl -btry -bu -bub -bubal -bubble -bubbler -bubby -bubo -bubonocele -buccaneer -buccaro -bucchero -buccinator -bucentaur -buchite -buchu -buck -buckaroo -buckayro -buckbean -buckboard -buckbrush -buckeen -bucker -bucket -bucketful -buckeye -buckhorn -buckhound -buckishness -buckjumper -buckle -buckler -buckling -bucko -buckra -buckram -bucksaw -buckshot -buckskin -buckstay -bucktail -buckthorn -bucktooth -buckwheat -bucranium -bud -budder -buddha -buddhi -buddle -buddleia -buddler -buddy -budger -budgerigar -budget -budgeter -budgie -buff -buffa -buffability -buffalo -buffalofish -buffer -buffet -buffeter -bufflehead -buffo -buffoon -buffoonery -buffoonishness -buffoonism -bufotenine -bug -bugaboo -bugbane -bugbear -bugeye -buggery -bugginess -buggy -bughouse -bugle -bugler -bugleweed -bugloss -bugong -bugout -bugseed -buhr -buhrstone -buibui -builder -building -bul -bulb -bulbil -bulbul -bulge -bulginess -bulimia -bulk -bulkhead -bulkheading -bulkiness -bull -bulla -bullace -bullarium -bullary -bullbaiting -bullbat -bulldog -bulldoggedness -bulldozer -bullet -bullethead -bulletheadedness -bulletin -bullfight -bullfighter -bullfighting -bullfinch -bullfrog -bullhead -bullheadedness -bullhorn -bullied -bullion -bullionism -bullionist -bullishness -bullnose -bullock -bullocky -bullpen -bullpout -bullring -bullroarer -bullsnake -bullterrier -bullwhip -bully -bullyboy -bullying -bullyragger -bulnbuln -bulrush -bulwark -bumbailiff -bumbershoot -bumblebee -bumblebeefish -bumbledom -bumblefoot -bumblepuppy -bumbler -bumboat -bumboatman -bumf -bumkin -bummalo -bummaree -bummed -bummer -bumming -bumper -bumph -bumpiness -bumpkin -bumpoff -bumptiousness -bun -bunch -bunchberry -bunchflower -bunchiness -bunco -buncombe -bund -bundh -bundle -bundler -bundobust -bundu -bung -bungalow -bungee -bunger -bungler -bungstarter -bunion -bunk -bunker -bunkerage -bunkhouse -bunkie -bunkmate -bunko -bunkum -bunn -bunny -bunraku -buntal -bunting -buntline -bunton -bunyip -buoy -buoyage -buoyancy -buprestid -bur -buran -burbler -burbot -burd -burden -burdener -burdensomeness -burdock -bureau -bureaucracy -bureaucrat -bureaucratism -bureaucratization -burela -burette -burg -burga -burgage -burgee -burger -burgess -burgh -burgher -burghership -burglar -burglary -burgomaster -burgomastership -burgonet -burgoo -burgrave -burhel -burial -burier -burin -burk -burka -burker -burkite -burl -burlap -burlecue -burler -burlesque -burlesquer -burletta -burley -burliness -burmite -burner -burnet -burnisher -burnishment -burnoose -burnout -buroo -burp -burr -burrawang -burrfish -burrhel -burro -burrow -burrower -burrstone -bursa -bursar -bursary -burse -burseed -bursitis -burster -burstone -burthen -burton -burweed -bus -busbar -busboy -busby -busera -bush -bushbaby -bushbashing -bushbeater -bushbuck -bushcraft -bushel -bushelbasket -busheler -bushelful -busheller -bushelman -busher -bushfire -bushhammer -bushie -bushiness -bushing -bushman -bushmaster -bushpig -bushranger -bushranging -bushtit -bushwa -bushwalking -bushwhacker -bushwhacking -business -businessman -businesswoman -busk -busker -buskin -busload -busman -buss -busses -bust -bustard -bustee -buster -bustic -bustler -busuuti -busybody -busyness -busywork -butacaine -butadiene -butane -butanol -butanone -butat -butcher -butcherbird -butcherer -butcherliness -butchery -butene -buteo -butler -butlerage -butlership -butlery -butte -butter -butterball -butterbump -butterbur -butterbush -buttercup -butterfat -butterfingers -butterfish -butterflied -butterfly -butterflyfish -butterflying -butterine -butteriness -buttermilk -butternut -butterpaste -butterscotch -butterweed -butterwort -butting -buttinsky -buttock -button -buttonball -buttonbush -buttoner -buttonhole -buttonholer -buttonhook -buttonmold -buttonmould -buttons -buttonwood -buttress -buttstock -butty -butyl -butylene -butyral -butyraldehyde -butyrate -butyrin -buxomness -buyer -buzz -buzzard -buzzer -buzzwig -bv -bvt -bwana -bx -bye -byelaw -bylaw -byliner -bypass -bypasser -bypath -byre -byrnie -byroad -byrrus -byssinosis -byssus -bystander -bystreet -byte -bytownite -byway -bywoner -byword -byzant -c -ca -cab -cabal -cabala -cabalism -cabalist -caballer -caballero -caballo -cabana -cabane -cabaret -cabasset -cabbage -cabbagehead -cabbagetown -cabbageworm -cabbala -cabbalism -cabbalist -cabby -cabdriver -caber -cabezon -cabildo -cabin -cabinet -cabinetmaker -cabinetmaking -cabinetry -cabinetwork -cabinetworker -cable -cablegram -cablese -cablet -cableway -cabman -cabob -cabochon -caboclo -caboodle -caboose -cabotage -cabretta -cabrilla -cabriole -cabriolet -cabstand -cabuya -cacanapa -cacao -caccia -cachalot -cache -cachepot -cachet -cachexia -cachinnation -cachinnator -cachou -cachucha -cacimbo -cacique -caciquism -cack -cackler -cacoaethes -cacodemon -cacodyl -cacodylate -cacoepy -cacoethes -cacogenics -cacographer -cacography -cacology -cacomistle -cacophony -cacqueteuse -cactus -cad -cadaster -cadastre -cadaver -cadaverine -cadaverousness -caddice -caddie -caddis -caddisfly -caddishness -caddisworm -caddy -cade -cadelle -cadence -cadency -cadenza -cadet -cadetcy -cadetship -cadette -cadger -cadginess -cadi -cadmium -cadre -caduceus -caducity -caecilian -caecum -caenogenesis -caeoma -caesaropapism -caesaropapist -caesium -caesura -caf -cafa -cafard -cafeteria -caff -caffa -caffeine -caffeinism -caffeism -caftan -cage -cageling -cager -caginess -cagoule -cahier -cahill -cahoot -cahow -caid -caiman -cain -cainogenesis -caique -caird -cairn -cairngorm -caisson -caitiff -cajeput -cajeputol -cajolement -cajoler -cajolery -cajuput -cake -cakewalk -cakewalker -cakra -cakravartin -cal -calabash -calabazilla -calaboose -calabrasella -calache -caladium -calalu -calamanco -calamander -calamary -calamine -calamint -calamite -calamitousness -calamity -calamondin -calamus -calandria -calash -calathus -calaverite -calcaneum -calcaneus -calcar -calcareousness -calceolaria -calces -calcicole -calciferol -calcification -calcifuge -calcimine -calciminer -calcination -calcinator -calciner -calciphile -calciphobe -calcite -calcitonin -calcium -calcsinter -calcspar -calculability -calculation -calculator -calculus -caldarium -caldera -caldron -calef -calefaction -calendar -calender -calenderer -calendula -calenture -calesa -calescence -calf -calfskin -caliber -calibrater -calibration -calibrator -calibre -calices -caliche -calicle -calico -calicoback -caliculus -caliduct -calif -califate -californite -californium -caliginosity -caliginousness -calimanco -calina -calipash -calipee -caliper -caliperer -caliph -caliphate -calisaya -calisthenics -calix -calker -calkin -calla -callais -callant -callboy -caller -callet -calligrapher -calligraphist -calligraphy -calling -calliope -calliopsis -callipash -calliper -calliperer -callisthenics -callithump -callosity -callousness -callout -callowness -callus -calmness -calomel -caloreceptor -calorescence -caloricity -calorie -calorimeter -calorimetry -calorizer -calory -calotte -caloyer -calpac -calque -caltrop -calumet -calumniation -calumniator -calumny -calutron -calvaria -calvary -calves -calvities -calx -calyces -calycle -calyculus -calypso -calyptra -calyptrogen -calyx -cam -camaca -camail -camanchaca -camaraderie -camarilla -camass -camauro -camber -cambiata -cambion -cambist -cambistry -cambium -cambogia -camboose -cambrel -cambric -camel -cameleer -camelhair -camellia -camelopard -cameo -camera -cameralism -cameralist -cameraman -camerlengo -camerlingo -camion -camisado -camise -camisole -camla -camlet -camoca -camomile -camoodi -camorrism -camouflage -camouflager -camouflet -camoufleur -camp -campagna -campagus -campaign -campaigner -campanile -campanologer -campanologist -campanology -campanula -campcraft -camper -campesino -campfire -campground -camphene -camphire -camphol -camphor -camphorweed -campimeter -campimetry -campion -campo -campodean -campodeid -campong -camporee -campshot -campsite -campstool -campus -campylite -camshaft -camwood -canafistula -canaigre -canaille -canakin -canal -canalatura -canaliculation -canaliculus -canalis -canalisation -canalization -canaller -canap -canapa -canard -canary -canasta -canaster -canc -cancan -cancelability -canceler -cancellability -cancellation -canceller -cancellus -cancer -canceration -cancerousness -cancha -canciun -candela -candelabrum -candescence -candidacy -candidate -candidateship -candidness -candle -candlebeam -candleberry -candlefish -candleholder -candlelight -candlemaker -candlenut -candlepin -candlepins -candlepower -candler -candlestand -candlestick -candlewick -candlewood -candor -candour -candy -candyfloss -candys -candytuft -cane -canebrake -canella -canephora -caner -canescence -canework -canfield -canful -cangue -canikin -caning -caninity -canister -canker -cankeredness -cankerworm -canna -cannabin -cannabis -cannelure -canner -cannery -cannetille -cannibal -cannibalism -cannibalization -cannikin -canniness -canning -cannon -cannonade -cannonball -cannoneer -cannoneering -cannonry -cannula -cannulation -canoe -canoeist -canoewood -canon -canoness -canonicate -canonicity -canonisation -canoniser -canonist -canonization -canonizer -canonry -canonship -canoodler -canopy -canorousness -canotier -canso -cant -cantala -cantalever -cantaloupe -cantankerousness -cantata -cantatrice -canteen -canter -canterbury -cantharus -canthus -canticle -cantilena -cantilever -cantillation -cantimo -cantina -cantiness -cantingness -cantle -cantling -canto -canton -cantonalism -cantonment -cantor -cantorship -cantrip -cantus -canula -canvas -canvasback -canvasser -canyon -canzo -canzona -canzone -canzonet -caoque -caoutchouc -cap -capa -capability -capableness -capaciousness -capacitance -capacitation -capacitor -capacity -caparison -capataz -cape -capeador -capelin -capeline -caper -capercaillie -caperer -capeskin -capette -capful -caph -capias -capibara -capillarity -caping -capita -capital -capitaliser -capitalism -capitalist -capitalization -capitalizer -capitalness -capitation -capitulant -capitulary -capitulation -capitulator -capitulum -caplin -capo -capon -caponette -caponisation -caponiser -caponization -caponizer -caporal -capot -capotasto -capote -cappelletti -capper -cappie -capping -cappuccino -capriccio -caprice -capriciousness -caprification -caprificator -caprifig -capriole -caproate -caps -capsaicin -capsicum -capsid -capstan -capstone -capsulation -capsule -captain -captaincy -captainship -caption -captiousness -captivation -captivator -captive -captivity -captor -capturer -capuche -capuchin -caput -capybara -caqueteuse -car -carabao -carabid -carabin -carabineer -carabiner -carabinero -carabiniere -caracal -caracara -carack -caracol -caracole -caracoler -caracoller -caracul -carafe -carageen -caramba -carambola -caramel -caramelisation -caramelization -carangid -carapa -carapace -carat -caravan -caravaner -caravanist -caravansary -caravanserai -caravel -caraway -carbamate -carbamide -carbamidine -carbanil -carbanion -carbarn -carbazole -carbene -carbide -carbimide -carbine -carbineer -carbinol -carbohydrate -carbon -carbonade -carbonado -carbonatation -carbonate -carbonation -carbonator -carbonisation -carboniser -carbonization -carbonizer -carbonyl -carbonylation -carboxylase -carboxylate -carboxylation -carboy -carbuncle -carburation -carburetant -carburetion -carburetor -carburettor -carburisation -carburiser -carburization -carburizer -carby -carbylamine -carcajou -carcanet -carcase -carcass -carcinogen -carcinogenicity -carcinoma -carcinomatosis -carcinosarcoma -card -cardamom -cardboard -cardcastle -carder -cardholder -cardhouse -cardialgia -cardiectomy -cardigan -cardinal -cardinalate -cardinalfish -cardinalship -carding -cardiodynia -cardiogram -cardiograph -cardiography -cardioid -cardiologist -cardiology -cardiomegaly -carditis -cardon -cardoon -cardroom -cards -cardsharp -cardsharping -careenage -careener -career -careerism -careerist -carefreeness -carefulness -carelessness -carer -caress -caresser -caret -caretaker -caretaking -carfare -carfax -carfloat -carfuffle -cargo -carhop -cariama -caribe -caribou -caricature -caricaturist -caries -carillon -carillonneur -carina -carination -carinula -carioca -cariole -cariosity -cariousness -carisoprodol -caritas -cark -carl -carlin -carline -carling -carlishness -carload -carloadings -carmagnole -carman -carmel -carmine -carn -carnage -carnalism -carnality -carnallite -carnalness -carnation -carnauba -carnelian -carnet -carney -carnification -carnival -carnivore -carnivorism -carnivorousness -carnosine -carnosity -carnotite -carob -caroche -carol -caroler -caroller -carolus -carom -caroon -carotene -carotenoid -carotid -carotin -carousal -carousel -carouser -carp -carpal -carpale -carpel -carpenter -carpentering -carpenterworm -carpentry -carper -carpet -carpetbag -carpetbagger -carpetbaggery -carpeting -carpetweed -carphology -carpi -carpogonium -carpologist -carpology -carpometacarpus -carpophore -carport -carpospore -carpostome -carpus -carrack -carrageen -carrefour -carrel -carriage -carriageway -carrier -carriole -carrion -carritch -carrollite -carrom -carromata -carronade -carrot -carrotiness -carrousel -carrus -carryall -carrycot -carse -carsickness -cart -cartage -carte -cartel -cartelism -cartelist -cartelization -carter -cartful -carthorse -cartilage -cartload -cartogram -cartograph -cartographer -cartography -cartomancy -carton -cartonnier -cartoon -cartoonist -cartopper -cartouche -cartridge -cartulary -cartwheel -cartwright -carucate -caruncle -carvacrol -carvel -carver -carving -caryatid -caryopsis -carzey -casa -casaba -casaque -casbah -cascabel -cascade -cascara -cascarilla -caschrom -case -casease -caseation -casebook -casebox -casein -caseinogen -casekeeper -caseload -casemaker -casemate -casement -caseose -caser -casern -casework -caseworker -caseworm -cash -cashableness -cashaw -cashbook -cashbox -cashdrawer -cashew -cashier -cashmere -cashoo -casimere -casimire -casing -casino -cask -casket -casque -cassaba -cassapanca -cassareep -cassata -cassation -cassava -casserole -cassette -cassia -cassie -cassimere -cassino -cassis -cassiterite -cassock -cassolette -cassone -cassoon -cassoulet -cassowary -castanet -castaway -caste -castellan -castellanship -castellany -castellation -castellum -caster -castigation -castigator -casting -castle -castor -castoreum -castrametation -castration -castrato -castrator -casualism -casualist -casualness -casualty -casuarina -casuist -casuistry -casus -cat -catabaptist -catabasis -catabolism -catabolite -catachresis -cataclasis -cataclysm -catacomb -catacumba -catafalque -catagenesis -catalase -catalepsy -catalo -catalog -cataloger -catalogist -catalogue -cataloguer -cataloguist -catalpa -catalysis -catalyst -catalyzer -catamaran -catamite -catamnesis -catamount -catamountain -cataphasia -cataphoresis -cataphract -cataphyll -cataplane -cataplasia -cataplasm -cataplexy -catapult -cataract -catarrh -catastasis -catastrophe -catastrophism -catastrophist -catatonia -catatoniac -catbird -catboat -catcall -catcaller -catchall -catcher -catchfly -catchiness -catchingness -catchlight -catchline -catchment -catchpole -catchpolery -catchpollery -catchup -catchword -cate -catechesis -catechin -catechisation -catechiser -catechism -catechist -catechization -catechizer -catechol -catecholamine -catechu -catechumen -catechumenate -catechumenism -categoricalness -categorisation -categorist -categorization -category -catena -catenane -catenary -catenation -catenoid -cateran -caterer -catering -caterpillar -caterwauler -catface -catfall -catfight -catfish -catgut -catharsis -catharticalness -cathead -cathedra -cathedral -cathepsin -catheter -catheterisation -catheterization -cathetus -cathexis -cathisma -cathode -cathodoluminescence -catholicalness -catholicate -catholicisation -catholiciser -catholicity -catholicization -catholicizer -catholicness -catholicon -catholicos -catholicus -cathouse -cathud -cation -catjang -catkin -catling -catmint -catnap -catnip -catoptrics -catstick -catsup -cattail -cattalo -cattery -cattiness -cattishness -cattle -cattleman -cattleship -cattleya -cattyphoid -catwalk -cauada -caucus -cauda -caudaite -caudation -caudex -caudillo -caudle -caul -cauldron -caulicle -cauliculus -cauliflory -cauliflower -caulis -caulker -caulome -cauon -caus -causability -causalgia -causality -causation -causationism -causationist -causativeness -causativity -cause -causelessness -causer -causerie -causeuse -causeway -causey -causticity -causticness -cauterisation -cauterization -cautery -caution -cautioner -cautiousness -cav -cavaedium -cavalcade -cavalero -cavalierism -cavalierness -cavalla -cavally -cavalry -cavalryman -cavatina -cave -cavea -caveat -caveator -cavefish -cavel -caveman -cavendish -caver -cavern -cavesson -cavetto -caviar -cavie -caviler -cavilingness -caviller -cavillingness -caving -cavitation -cavity -cavorter -cavum -cavy -caw -cay -cayenne -cayman -cayuse -cc -ccm -cd -ce -ceanothus -ceaselessness -cecity -cecum -cedar -ceder -cedi -cedilla -cedula -ceiba -ceibo -ceiler -ceilidh -ceiling -ceilometer -celadon -celandine -celature -celeb -celebrant -celebratedness -celebrater -celebration -celebrator -celebret -celebrity -celeriac -celerity -celery -celesta -celestiality -celestialness -celestite -celibacy -celibate -celioscope -celioscopy -celiotomy -cell -cella -cellar -cellarage -cellarer -cellaret -cellarman -cellblock -cellist -cello -cellobiose -celloidin -cellophane -cellularity -cellulase -cellulation -cellule -cellulitis -celluloid -cellulose -cellulosity -celom -celoscope -celotomy -celt -celtuce -celure -cembalist -cembalo -cement -cementation -cementer -cementite -cementum -cemetery -cen -cenacle -cenesthesia -cenobite -cenobitism -cenogenesis -cenospecies -cenotaph -cenote -censer -censor -censoriousness -censorship -censurability -censurableness -censure -censurer -census -cent -cental -centare -centas -centaur -centaury -centavo -centenarian -centenionalis -center -centerboard -centering -centerline -centerpiece -centesimal -centesimo -centesis -centiare -centibar -centigram -centiliter -centilitre -centillion -centime -centimeter -centimetre -centipede -centipoise -centistere -centistoke -centner -cento -centonism -centra -centralisation -centraliser -centralism -centralist -centrality -centralization -centralizer -centre -centreboard -centrefold -centrepiece -centricity -centrifugalisation -centrifugalization -centrifugate -centrifugation -centrifuge -centring -centriole -centripetalism -centrist -centroid -centrolinead -centromere -centrosome -centrosphere -centrosymmetry -centrum -centuplication -centurion -century -ceorl -cep -cephalalgia -cephalin -cephalitis -cephalization -cephalochordate -cephalodium -cephalom -cephalometer -cephalometry -cephalon -cephalopod -cephalothorax -cera -ceramal -ceramic -ceramics -ceramist -cerargyrite -cerastes -cerat -cerate -ceratin -ceratodus -ceratopsian -cercaria -cercis -cercus -cere -cereal -cerebellum -cerebration -cerebritis -cerebroside -cerebrotonia -cerebrum -cerecloth -cerement -ceremonialism -ceremonialist -ceremoniousness -ceremony -ceresin -cereus -ceria -ceriman -cerise -cerite -cerium -cermet -cero -cerograph -cerographist -cerography -ceroma -ceroplastics -cerotype -cert -certainty -certif -certifiableness -certificate -certification -certifier -certiorari -certitude -certosina -cerulean -cerumen -ceruse -cerussite -cervelat -cervelliare -cervices -cervicitis -cervid -cervix -cesium -cess -cessation -cesser -cession -cessionary -cesspipe -cesspit -cesspool -cesta -cestode -cestus -cesura -cetaceum -cetane -cete -cetin -cetologist -cetology -cetus -cf -cfd -cfh -cfm -cfs -cg -cgm -cgs -ch -chabazite -chablis -chabouk -chachalaca -chachia -chacma -chaconne -chad -chaeta -chaetodon -chaetognath -chaetopod -chaetotaxy -chafer -chafery -chafeweed -chaff -chafferer -chaffinch -chaffiness -chagal -chagrin -chagul -chain -chainage -chainbreak -chainman -chainplate -chainsman -chainwork -chair -chairlady -chairlift -chairman -chairmanship -chairwoman -chaise -chaitya -chakra -chakravartin -chalaza -chalcanthite -chalcedony -chalcid -chalcidicum -chalcocite -chalcographer -chalcographist -chalcography -chalcolite -chalcopyrite -chalcostibite -chaldron -chalet -chalice -chalicothere -chalk -chalkboard -chalkpit -chalkrail -chalkstone -challah -challenger -challiho -challis -chalone -chalumeau -chalutz -chalybite -cham -chamade -chamaephyte -chamber -chamberer -chamberlain -chambermaid -chambray -chameleon -chametz -chamfer -chamferer -chamfron -chamiso -chammy -chamois -chamomile -chamosite -chamotte -champac -champagne -champaign -champer -champers -champerty -champignon -champion -championship -chance -chanced -chancefulness -chancel -chancellery -chancellor -chancellorship -chancery -chancing -chancre -chancroid -chandelier -chandelle -chandler -chandlery -chanduy -chanfron -changeability -changeableness -changedness -changefulness -changelessness -changeling -changemaker -changeover -changepocket -changer -channel -channeler -channeling -channelization -channeller -chanoyu -chanson -chansonnier -chant -chantage -chanter -chanterelle -chantership -chanteuse -chantey -chanticleer -chantress -chantry -chanty -chaona -chaori -chaos -chaparral -chapatti -chapbook -chape -chapeau -chapel -chaperon -chaperonage -chaperone -chapiter -chaplain -chaplaincy -chaplainry -chaplainship -chaplet -chapman -chapmanship -chappal -chappe -chappie -chaprasi -chapstick -chaptalization -chapter -chapterhouse -chaptrel -chaqueta -chara -charabanc -characin -character -characterisation -characteriser -characteristic -characterization -characterizer -charactery -charade -charades -charango -charas -charcoal -charcuterie -charcutier -chard -charecin -charette -chargeability -chargeableness -charger -chargfaires -charie -chariness -chariot -charioteer -charisma -charitableness -charity -charivari -chark -charkha -charlady -charlatan -charlatanism -charlatanry -charleston -charlie -charlock -charlotte -charm -charmer -charmeuse -charmingness -charnel -charoseth -charpoy -charqui -charr -charrette -charro -chart -charta -charter -charterage -charterer -chartist -chartlet -chartographer -chartography -chartophylacium -chartophylax -chartreuse -chartula -chartulary -charvet -charwoman -chaser -chashitsu -chasing -chasm -chasmogamy -chasmophyte -chass -chassa -chassepot -chasseur -chassis -chastener -chasteness -chastenment -chastisement -chastiser -chastity -chasuble -chat -chateau -chateaubriand -chatelain -chatelaine -chaton -chatoyancy -chattel -chatterbox -chatterer -chattiness -chaudfroid -chauffer -chauffeur -chauffeuse -chaulmoogra -chaunt -chaunter -chaussure -chautauqua -chauvinism -chauvinist -chawer -chay -chayote -chazan -cheapener -cheapness -cheapskate -cheater -chebec -chebeck -chechako -checkback -checkbook -checker -checkerberry -checkerbloom -checkerboard -checkers -checkerspot -checkerwork -checkhook -checkmate -checkoff -checkpoint -checkrail -checkrein -checkroom -checkrow -checksum -checkup -checkweighman -checkwriter -cheddite -cheder -cheechako -cheek -cheekbone -cheekiness -cheekpiece -cheep -cheeper -cheerer -cheerfulness -cheeriness -cheerleader -cheerleading -cheerlessness -cheese -cheeseboard -cheeseburger -cheesecake -cheesecloth -cheesemonger -cheeseparer -cheesewood -cheesiness -cheetah -chef -cheilitis -cheiloplasty -cheilotomy -chela -chelaship -chelate -chelation -chelicera -cheliped -cheloid -chelonian -chem -chemical -chemiculture -chemigrapher -chemigraphy -chemiluminescence -chemise -chemisette -chemism -chemisorption -chemist -chemistry -chemmy -chemokinesis -chemonite -chemopause -chemoprophylaxis -chemoreception -chemoreceptor -chemoreflex -chemosmosis -chemosphere -chemostat -chemosurgery -chemosynthesis -chemotaxis -chemotherapeutics -chemotherapist -chemotherapy -chemotroph -chemotropism -chempaduk -chemurgy -cheneau -chenier -chenille -chenopod -cheongsam -cheque -chequebook -chequer -chequerboard -chequers -cherem -chergui -cherimoya -cherisher -chernozem -cheroot -cherry -cherrystone -chersonese -chert -cherub -cherubfish -chervil -chervonets -cheskey -chess -chessboard -chessel -chessman -chesstree -chest -chesterbed -chesterfield -chestiness -chestnut -chetah -cheteau -cheth -chevalier -chevee -cheveret -chevet -cheville -chevon -chevret -chevrette -chevron -chevronel -chevrotain -chevy -chewer -chewie -chewink -chg -chi -chianti -chiao -chiarooscurist -chiarooscuro -chiaroscuro -chiasm -chiasma -chiasmatypy -chiasmus -chiastolite -chiaus -chibouk -chicalote -chicane -chicaner -chicanery -chicano -chiccory -chicha -chichili -chick -chickabiddy -chickadee -chickaree -chicken -chickenpox -chickpea -chickweed -chicle -chico -chicory -chider -chief -chiefdom -chieftain -chieftaincy -chieftainship -chield -chiffchaff -chiffon -chiffonier -chifforobe -chigetai -chigger -chignon -chigoe -chilblain -child -childbearing -childbed -childbirth -childe -childermas -childhood -childishness -childlessness -childlikeness -childminder -childness -children -chile -chili -chiliad -chiliarch -chiliarchy -chiliasm -chiliast -chilindre -chilipepper -chill -chiller -chilli -chilliness -chillness -chillum -chiloplasty -chilopod -chilotomy -chimaera -chimar -chimb -chime -chimer -chimera -chimere -chimericalness -chimney -chimneypiece -chimneypot -chimp -chimpanzee -china -chinaberry -chinar -chinaware -chinbeak -chincapin -chinch -chincherinchee -chinchilla -chincough -chine -chinfest -chink -chinkapin -chino -chinoidine -chinoiserie -chinoline -chinone -chinook -chinquapin -chintz -chinwag -chionodoxa -chip -chipboard -chipmunk -chipolata -chippendale -chippie -chipping -chippy -chirimoya -chirm -chiro -chirographer -chirography -chirogymnast -chiromancer -chiromancy -chiropodist -chiropody -chiropractic -chiropractor -chiropter -chirper -chirpiness -chirrupper -chiru -chirurgeon -chirurgery -chisel -chiseler -chit -chital -chitarrone -chitchat -chitin -chitling -chiton -chittamwood -chitterling -chiv -chivalrousness -chivalry -chivaree -chive -chlamydospore -chlamys -chloanthite -chloasma -chloracne -chloral -chlorambucil -chloramine -chloramphenicol -chloranil -chlorargyrite -chlorastrolite -chlorate -chlordane -chlordiazepoxide -chlorella -chlorenchyma -chlorguanide -chloride -chlorination -chlorinator -chlorine -chlorinity -chlorite -chloroacetone -chloroacetophenone -chlorobenzene -chlorobromomethane -chlorocarbon -chloroethene -chloroethylene -chloroform -chloroguanide -chlorohydrin -chlorohydroquinone -chloromethane -chloronaphthalene -chlorophaeite -chlorophenol -chlorophenothane -chlorophyll -chloropicrin -chloroplast -chloroprene -chloroquine -chlorosis -chlorospinel -chlorothiazide -chlorotrifluoroethylene -chlorotrifluoromethane -chlorpheniramine -chlorphenol -chlorpicrin -chlorpromazine -chlorpropamide -chlorprophenpyridamine -chlortetracycline -chm -chmn -choanocyte -choanoflagellate -chocho -chock -chockstone -choco -chocolate -choctaw -choice -choiceness -chokeberry -chokebore -chokecherry -chokedamp -choker -chokes -choko -cholecalciferol -cholecyst -cholecystectomy -cholecystitis -cholecystography -cholecystostomy -cholecystotomy -choledochostomy -choledochotomy -cholee -cholelith -cholelithiasis -cholent -choler -cholera -cholericness -cholesteremia -cholesterol -cholesterolemia -choli -choline -cholinesterase -cholla -chololith -chon -chondria -chondriocont -chondriome -chondriomite -chondriosome -chondrite -chondroma -chondrosarcoma -chondrule -chondrus -chooky -choom -choora -chooser -chophouse -chopin -chopine -choplogic -chopper -choppiness -chopstick -choragus -chorale -chord -chordamesoderm -chordate -chordee -chording -chordophone -chore -chorea -choregus -choreman -choreodrama -choreographer -choreography -choriamb -choriambus -chorine -chorioallantois -choriocarcinoma -chorioepithelioma -chorioma -chorion -choriso -chorister -chorizo -chorobates -chorogi -chorographer -chorography -choroiditis -chorology -chorten -chortler -chorus -chorusmaster -chott -chou -chough -choultry -chouser -chow -chowder -chowhound -choy -chremsel -chremzel -chresard -chrestomathy -chrism -chrismatory -chrismon -chrisom -christcross -christener -chroma -chromate -chromaticism -chromaticity -chromaticness -chromatics -chromatid -chromatin -chromatism -chromatist -chromatogram -chromatography -chromatology -chromatolysis -chromatophilia -chromatophore -chrome -chromhidrosis -chromidrosis -chrominance -chromite -chromium -chromo -chromogen -chromolithograph -chromolithographer -chromolithography -chromomere -chromonema -chromophilia -chromophore -chromophotograph -chromophotography -chromoplasm -chromoplast -chromoprotein -chromosome -chromosphere -chromyl -chron -chronaxie -chronicity -chronicle -chronicler -chronobiology -chronogram -chronogrammatist -chronograph -chronographer -chronologist -chronology -chronometer -chronometry -chronon -chronopher -chronoscope -chronoscopy -chrysalid -chrysalis -chrysanthemum -chrysarobin -chrysoberyl -chrysocale -chrysocolla -chrysograph -chrysographer -chrysography -chrysoidine -chrysolite -chrysomelid -chrysophenine -chrysoprase -chrysotile -chs -chub -chubasco -chubbiness -chuckhole -chucklehead -chuckleheadedness -chuckler -chuckwalla -chucky -chuddar -chufa -chuff -chuffiness -chug -chugger -chukar -chukker -chulpa -chum -chumminess -chump -chumping -chumpishness -chung -chunk -chunkiness -chupatti -chuppah -chuprassi -churada -churinga -churl -churlishness -churn -churnability -churner -churning -chute -chutist -chutney -chuttie -chutzpa -chutzpah -chyle -chyme -chymist -chymistry -chymosin -chymotrypsin -chymotrypsinogen -chypre -cianaga -cibarium -ciborium -cicada -cicala -cicatricle -cicatrisation -cicatriser -cicatrix -cicatrization -cicatrizer -cicely -cicero -cicerone -cichlid -cicisbeism -cicisbeo -cider -cierzo -cilia -ciliation -cilice -cilium -cimaise -cimbalom -cimeliarch -cimex -cinch -cinchona -cinchonidine -cinchonine -cinchonisation -cinchonism -cinchonization -cincture -cinder -cine -cineaste -cinema -cinematheque -cinematics -cinematograph -cinematographer -cinematographist -cinematography -cineol -cineole -cineradiography -cineraria -cinerarium -cineration -cinerator -cinerin -cingulectomy -cingulum -cinnabar -cinnamene -cinnamon -cinquain -cinque -cinquecentism -cinquecentist -cinquecento -cinquedea -cinquefoil -cion -cipher -cipherer -cipolin -cippus -cira -circ -circle -circler -circlet -circuit -circuiter -circuitousness -circuitry -circuity -circularisation -circulariser -circularity -circularization -circularizer -circularness -circulation -circulator -circulus -circumambience -circumambiency -circumambulation -circumambulator -circumbendibus -circumcenter -circumference -circumferentor -circumflex -circumfluence -circumfusion -circumgyration -circumincession -circumjacence -circumjacency -circumlocution -circumlocutionist -circumnavigation -circumnavigator -circumnutation -circumradius -circumrotation -circumscriber -circumscription -circumspection -circumspectness -circumstance -circumstantiality -circumstantiation -circumvallation -circumventer -circumvention -circumventor -circumvolution -circus -cirque -cirrhosis -cirri -cirriped -cirripede -cirrocumulus -cirrostratus -cirrus -cirsectomy -cisco -ciseaux -ciseleur -ciselure -cissing -cissoid -cist -cistern -cisterna -cistophorus -cistron -cistus -cistvaen -cit -citadel -citation -citer -cithara -citharist -cither -citification -citizen -citizenry -citizenship -citole -citoyen -citral -citrange -citrate -citriculture -citriculturist -citrin -citrine -citron -citronalis -citronella -citronellal -citronellol -citrulline -citrus -cittern -city -cityscape -civ -civet -civics -civilian -civilisation -civilisedness -civiliser -civility -civilization -civilizedness -civilizer -civilness -civism -civvy -ck -ckw -cl -clabber -clabularium -clachan -clacker -cladding -cladoceran -cladode -cladophyll -cladoptosis -claimant -claimer -claimsman -clairaudience -clairseach -clairseacher -clairvoyance -clam -clambake -clamberer -clamjamfry -clamminess -clamor -clamorer -clamorist -clamorousness -clamour -clamourer -clamourist -clamp -clampdown -clamper -clamshell -clamworm -clan -clandestineness -clandestinity -clanger -clangor -clank -clankingness -clannishness -clansman -clansmanship -clanswoman -clapboard -clapotis -clapper -clapperboard -clapperclawer -claptrap -claque -claqueur -clar -clarabella -clarain -clarence -clarendon -claret -clarificant -clarification -clarifier -clarin -clarinet -clarinetist -clarinettist -clarion -clarity -clarkia -claro -clarsach -clary -clasher -clasp -clasped -clasper -class -classbook -classer -classicality -classicalness -classicism -classicist -classics -classification -classifier -classiness -classis -classmate -classroom -classwork -clatterer -claudication -clause -clausthalite -claustrophilia -claustrophobe -claustrophobia -clausula -clava -clave -clavicembalist -clavicembalo -clavichord -clavichordist -clavicle -clavicorn -clavicylinder -clavicytherium -clavier -clavierist -clavola -clavus -claw -clawer -clay -claybank -clayiness -claymore -claypan -claystone -claytonia -cleaner -cleanhandedness -cleaning -cleanliness -cleanness -cleanout -cleanser -cleanskin -cleanup -clearance -clearcole -clearer -clearheadedness -clearing -clearness -clearstarcher -clearstory -clearway -clearwing -cleat -cleavability -cleavage -cleaver -cleavers -cleek -clef -cleg -cleistocarp -cleistogamy -cleistothecium -clematis -clemency -clementine -cleoid -cleome -clepsydra -cleptobiosis -cleptomania -cleptomaniac -clerestory -clergy -clergyman -cleric -clericalism -clericalist -clericality -clerihew -clerisy -clerk -clerkess -clerkliness -clerkship -cleromancy -cleruch -cleruchy -cleveite -cleverness -clevis -clew -clewgarnet -clianthus -clich -clicha -cliche -click -clicker -client -clientage -clientele -cliff -cliffhanger -clift -climacteric -climate -climatologist -climatology -climax -climber -climbingfish -clime -clinah -clinandrium -clincher -cline -clinger -clingfish -clinginess -clingingness -clingstone -clinic -clinician -clinid -clinker -clinkstone -clinograph -clinometer -clinometry -clinostat -clintonia -clipboard -clipper -clippie -clipping -clipsheet -clique -cliquishness -cliquism -clishmaclaver -clistocarp -clistothecium -clitellum -clivers -clk -cloaca -cloak -cloakroom -clobberer -cloche -clock -clocker -clockmaker -clockmaking -clockwork -clod -cloddiness -cloddishness -clodhopper -clodpoll -clogginess -cloison -cloisonn -cloisonna -cloister -cloistress -cloke -cloky -clomp -clone -clonicity -clonism -clonus -cloot -clootie -clos -closedown -closefistedness -closeness -closeout -closer -closet -clostridium -closure -clot -cloth -clothesbasket -clotheshorse -clothesline -clothespin -clothespress -clothier -clothing -cloture -clou -cloud -cloudage -cloudberry -cloudburst -cloudiness -cloudland -cloudlessness -cloudlet -cloudscape -clough -clout -clouter -clove -clover -cloverleaf -clowder -clown -clownery -clownishness -cloyedness -cloyingness -club -clubability -clubbability -clubbed -clubber -clubbing -clubfoot -clubhand -clubhouse -clubland -clubman -clubroom -clubroot -clubwoman -cluck -clue -clump -clumsiness -clunk -clupeid -cluster -clutcher -clypeus -clysis -clyster -cm -cml -cnemis -cnida -cnidarian -cnidoblast -cnidocil -cnidocyst -cnidophore -co -coacervate -coacervation -coach -coachability -coachbuilder -coachbuilding -coacher -coachman -coachmanship -coachwhip -coachwood -coachwork -coaction -coactivity -coactor -coadjutor -coadjutress -coadjutrix -coadunation -coadventuress -coagulability -coagulant -coagulase -coagulation -coagulin -coagulum -coak -coal -coalbin -coaler -coalescence -coalface -coalfield -coalfish -coalition -coalitioner -coalitionist -coaming -coaptation -coarctation -coarseness -coarticulation -coast -coaster -coastguard -coastguardsman -coastland -coastline -coat -coatdress -coatee -coati -coating -coatrack -coatroom -coauthor -coaxer -cob -cobalt -cobaltammine -cobaltite -cobb -cobber -cobble -cobbler -cobblestone -cobbra -cobelligerent -cobia -coble -cobnut -cobra -coburg -cobweb -coca -cocaine -cocainisation -cocainism -cocainization -cocci -coccid -coccidioidomycosis -coccidiosis -coccobacillus -coccolith -coccus -coccyx -coch -cochairman -cochin -cochineal -cochlea -cockade -cockalorum -cockateel -cockatiel -cockatoo -cockatrice -cockboat -cockchafer -cockcrow -cocker -cockerel -cockeye -cockfight -cockfighting -cockhorse -cockiness -cockishness -cockle -cockleboat -cocklebur -cockleshell -cockloft -cockney -cockneydom -cockneyfication -cockneyism -cockpit -cockroach -cockscomb -cocksfoot -cockshead -cockshut -cockshy -cockspur -cocksureness -cockswain -cocktail -cockup -coco -cocoa -cocobolo -cocomat -coconsciousness -coconut -cocoon -cocopan -cocotte -cocoyam -cocozelle -cod -coda -codder -coddler -code -codeclination -codefendant -codeine -coder -codetta -codex -codfish -codger -codices -codicil -codicology -codification -codifier -coding -codline -codling -codomain -codon -codpiece -codswallop -coed -coeditor -coeditorship -coeducation -coeducationalism -coefficient -coehorn -coelacanth -coelenterate -coelenteron -coelom -coeloscope -coelostat -coemption -coenacle -coenaculum -coenesthesia -coenobite -coenobitism -coenocyte -coenosarc -coenurus -coenzyme -coequality -coequalness -coercer -coercion -coercionist -coerciveness -coercivity -coesite -coessentiality -coessentialness -coetaneity -coetaneousness -coeternity -coevality -coexecutor -coexecutrix -coexistence -coexistency -coextension -cofactor -coffee -coffeeberry -coffeecake -coffeehouse -coffeepot -coffeeweed -coffer -cofferdam -coffin -coffinite -coffle -coffret -cofunction -cog -cogency -cogitability -cogitation -cogitativeness -cogitator -cognac -cognateness -cognation -cognisability -cognisableness -cognisance -cogniser -cognition -cognizability -cognizableness -cognizance -cognizer -cognomen -cognoscibility -cognovit -cogon -cogwheel -cohabitant -cohabitation -cohabiter -coheir -coheirship -cohenite -coherence -coherer -cohesion -cohesiveness -coho -cohobation -cohobator -cohort -cohosh -cohune -coif -coiffeur -coiffure -coign -coigne -coin -coinage -coincidence -coiner -coinheritance -coinsurance -coinsurer -cointise -coir -coistrel -coit -coition -coitus -coke -coker -cokernut -cokuloris -col -cola -colacobiosis -colander -colascione -colat -colatitude -colcannon -colchicine -colchicum -colcothar -coldness -coldslaw -cole -colectomy -colemanite -colent -coleopteran -coleopteron -coleoptile -coleorhiza -coleseed -coleslaw -coleus -colewort -coley -colic -colichemarde -colicroot -colicweed -colin -coliseum -colitis -coll -colla -collab -collaboration -collaborationism -collaborationist -collaborator -collada -collage -collagen -collagenase -collagist -collapsability -collapsar -collapsibility -collar -collarbone -collard -collaret -collarette -collarino -collat -collateral -collaterality -collateralness -collation -collator -colleague -colleagueship -collectability -collectedness -collectibility -collection -collectivism -collectivist -collectivity -collectivization -collector -collectorate -collectorship -colleen -college -colleger -collegian -collegiateness -collegium -collembolan -collenchyma -collet -collie -collier -colliery -collieshangie -colligation -collimation -collimator -collinearity -collins -collinsia -collision -colloblast -collocation -collocutor -collodion -colloid -colloidality -collop -collophane -collophore -colloq -colloquialism -colloquialist -colloquialness -colloquist -colloquium -colloquy -collotype -collotypy -colluder -collun -collunarium -collusion -collusiveness -collut -collutorium -collutory -colluvium -colly -collyr -collyrium -colob -colobus -colocynth -colog -cologarithm -cologne -colomb -colombier -colon -colonate -colonel -colonelcy -colonette -colonialism -colonialist -colonialization -colonisability -colonisation -colonisationist -coloniser -colonist -colonitis -colonizability -colonization -colonizationist -colonizer -colonnade -colonus -colony -colophon -colophony -coloquintida -color -colorability -colorableness -coloradoite -colorant -coloration -coloratura -colorbearer -colorcast -colorer -colorfastness -colorfulness -colorimeter -colorimetrist -coloring -colorist -colorlessness -colorman -colossality -colosseum -colossus -colostomy -colostrum -colotomy -colour -colourability -colourableness -colouration -colourer -colourfulness -colouring -colourist -colourlessness -colpitis -colportage -colporteur -colpotomy -colt -colter -coltishness -coltsfoot -colubrid -colugo -columbarium -columbary -columbate -columbeion -columbier -columbine -columbite -columbium -columella -column -columnarity -columniation -columnist -colure -coly -colza -com -coma -comaker -comal -comandante -comatoseness -comatosity -comatulid -comb -combat -combatant -combater -combativeness -combativity -combatter -combe -comber -combfish -combinableness -combination -combinedness -combiner -comblessness -combo -combustibility -combustibleness -combustion -combustor -comdg -comeback -comedian -comedienne -comedietta -comedist -comedo -comedown -comedy -comeliness -comer -comes -comestible -comet -comeuppance -comfiness -comfit -comfort -comfortableness -comforter -comfortlessness -comfrey -comicality -comicalness -comitia -comity -comm -comma -commandant -commander -commandership -commandery -commandingness -commandment -commando -commemoration -commemorativeness -commencement -commencer -commendableness -commendam -commendation -commender -commensalism -commensality -commensurability -commensurableness -commensurateness -commensuration -comment -commentary -commentator -commenter -commerce -commercialisation -commercialism -commercialist -commercialization -commie -commination -comminator -commingler -comminution -commis -commiseration -commiserator -commissar -commissariat -commissary -commission -commissionaire -commissioner -commissionership -commissure -commissurotomy -commitment -committal -committee -committeeism -committeeman -committeeship -committeewoman -committer -commixture -commo -commode -commodiousness -commodity -commodore -commonage -commonality -commonalty -commoner -commonness -commonplaceness -commons -commonweal -commonwealth -commorancy -commotion -communalisation -communaliser -communalism -communalist -communality -communalization -communalizer -communard -communer -communicability -communicableness -communicant -communication -communicativeness -communicator -communion -communionist -communiqu -communiqua -communis -communisation -communism -communist -communitarian -community -communization -commutability -commutableness -commutation -commutator -commuter -commutuality -commy -comp -compactedness -compactification -compaction -compactness -compadre -compagnie -compander -companion -companionability -companionableness -companionship -companionway -company -compar -comparability -comparableness -comparatist -comparativeness -comparator -comparer -comparison -comparsa -compartimento -compartment -compartmentalization -compartmentation -compass -compassion -compassionateness -compaternity -compathy -compatibility -compatibleness -compatriot -compatriotism -compauero -compauia -compeer -compellation -compeller -compelling -compendiousness -compendium -compensation -compensator -compere -competence -competency -competer -competition -competitiveness -competitor -competitorship -compilation -compiler -complacency -complainant -complainer -complainingness -complaint -complaisance -complanation -complection -complement -complementariness -complementation -complementer -complementizer -completedness -completeness -completer -completion -complexion -complexity -complexness -compliableness -compliance -compliancy -complicacy -complicatedness -complication -complice -complicity -complier -compliment -complimentariness -complimenter -complin -compline -complot -complotment -complotter -compluvium -compo -component -comportance -comportment -composedness -composer -compositeness -composition -compositor -compossibility -compost -composure -compotation -compotator -compote -compotier -compound -compoundedness -compounder -comprador -comprecation -comprehender -comprehensibility -comprehensibleness -comprehension -comprehensiveness -compressibility -compression -compressor -comprisal -comprizal -compromis -compromise -compromiser -comptroller -comptrollership -compulsion -compulsiveness -compulsoriness -compunction -compurgation -compurgator -computability -computation -computer -computerization -computist -comrade -comradery -comradeship -comsat -comstockery -comte -comtesse -con -conation -conatus -conc -concatenation -concatenator -concaveness -concavity -concealedness -concealer -concealment -conceder -conceit -conceitedness -conceivability -conceivableness -conceiver -concelebration -concent -concentration -concentrativeness -concentrator -concentricity -concept -conceptacle -conception -conceptualisation -conceptualism -conceptualist -conceptuality -conceptualization -concernedness -concerningness -concernment -concert -concertgoer -concertina -concertinist -concertino -concertiser -concertizer -concertmaster -concerto -concession -concessionaire -conch -concha -conchfish -conchie -conchiolin -conchoid -conchologist -conchology -conchy -concierge -conciliation -conciliator -conciliatoriness -concinnity -conciseness -concision -conclave -conclavist -concluder -conclusion -conclusiveness -concocter -concoction -concoctor -concomitance -concord -concordance -concordat -concorporation -concourse -concrescence -concrete -concreteness -concretion -concretization -concubinage -concubine -concupiscence -concurrence -concussion -cond -condemnation -condemner -condensability -condensary -condensate -condensation -condensedness -condenser -condensery -condescendence -condescendent -condescender -condescension -condignity -condiment -condisciple -condition -conditionality -conditioner -conditioning -conditivium -conditorium -condolence -condoler -condom -condominium -condonation -condoner -condor -condottiere -conduceability -conducer -conducibleness -conduciveness -conduct -conductance -conductibility -conduction -conductivity -conductor -conductorship -conductress -conduit -conduplication -condylarth -condyle -condyloma -cone -coneflower -conenose -coney -conf -confab -confabulation -confabulator -confarreation -confection -confectionary -confectioner -confectionery -confederacy -confederalist -confederate -confederation -confederationism -confederationist -conferee -conference -conferment -conferral -conferrer -conferva -confessant -confession -confessionalism -confessor -confetti -confidant -confidante -confidence -confidente -confidentiality -confidentialness -confider -configuration -configurationism -configurationist -confinedness -confinement -confiner -confirmand -confirmation -confirmedness -confirmer -confirmor -confiscation -confiscator -confiture -conflagration -conflation -conflict -confliction -confluence -conformability -conformableness -conformance -conformation -conformer -conformism -conformist -conformity -confoundedness -confounder -confr -confraternity -confrere -confricamentum -confrontation -confronter -confrontment -confusability -confusedness -confusion -confutation -confuter -cong -conga -congealability -congealableness -congealedness -congealer -congealment -congee -congelation -congelifract -congelifraction -congeliturbation -congener -congeniality -congenialness -congenitalness -conger -congeries -congestion -congius -conglobation -conglomerate -conglomeration -conglutination -congo -congou -congratulation -congratulator -congregant -congregation -congregationalism -congregationalist -congregativeness -congregator -congress -congressionalist -congressman -congresswoman -congruence -congruency -congruity -congruousness -conicalness -conicity -conicoid -conics -conidiophore -conidium -conifer -coniferin -coniine -coniology -coniroster -conium -conjecture -conjecturer -conjoiner -conjointness -conjugality -conjugant -conjugation -conjugator -conjunction -conjunctiva -conjunctivitis -conjuncture -conjuration -conjurator -conjurer -conjuring -conker -conkers -connateness -connation -connaturalness -connectedness -connection -connectionism -connectivity -connector -connexion -conniption -connivance -conniver -connoisseur -connoisseurship -connotation -connubiality -conodont -conoid -conoscope -conquerableness -conqueror -conquest -conquian -conquistador -consanguinity -conscience -consciencelessness -conscientiousness -conscionableness -consciousness -conscript -conscription -conscriptionist -consecratedness -consecrater -consecration -consecrator -consecution -consecutiveness -consensus -consentaneity -consentaneousness -consenter -consentience -consequence -consequentiality -consequentialness -conservancy -conservation -conservationist -conservatism -conservativeness -conservatoire -conservator -conservatorium -conservatory -conserver -considerance -considerateness -consideration -considerer -consignation -consignee -consignment -consignor -consistency -consistory -consociation -consocies -consol -consolation -consoler -consolette -consolidation -consolidator -consolitoriness -consomm -consomma -consonance -consonant -consonantism -consorter -consortion -consortium -conspectus -consperg -conspicuity -conspicuousness -conspiracy -conspirator -conspiratress -constable -constableship -constabulary -constancy -constantan -constatation -constellation -consternation -constipation -constituency -constituter -constitution -constitutionalism -constitutionalist -constitutionality -constitutor -constr -constrainer -constraint -constriction -constrictor -constringency -construability -constructer -construction -constructionism -constructionist -constructiveness -constructivism -constructor -construer -consubstantialism -consubstantialist -consubstantiality -consubstantiation -consuetude -consul -consulate -consulship -consultant -consultation -consulter -consumer -consumerism -consumingness -consummation -consummator -consumption -consumptiveness -cont -conta -contact -contactant -contactor -contagion -contagiosity -contagiousness -contagium -container -containerboard -containerization -containment -contakion -contam -contaminant -contamination -contaminator -contango -contd -conte -contemner -contemp -contemplation -contemplativeness -contemplator -contemporaneity -contemporaneousness -contemporariness -contempt -contemptibility -contemptibleness -contemptuousness -content -contentedness -contention -contentiousness -contentment -contentness -conterminousness -contest -contestableness -contestant -contestation -contester -context -contexture -contg -contiguity -contiguousness -continence -continent -continentalism -continentalist -continentality -contingence -contingency -continuality -continualness -continuance -continuant -continuateness -continuation -continuativeness -continuator -continuedness -continuer -continuity -continuo -continuousness -continuum -conto -contoise -contortedness -contortion -contortionist -contour -contr -contraband -contrabandism -contrabandist -contrabass -contrabassist -contrabassoon -contrabassoonist -contractedness -contractibility -contractibleness -contractility -contraction -contractiveness -contractor -contracture -contradance -contradicter -contradiction -contradictiousness -contradictiveness -contradictor -contradictoriness -contradistinction -contrail -contraindicant -contraindication -contralto -contraoctave -contraplete -contraposition -contrapposto -contraprop -contraption -contrapuntist -contrariety -contrariness -contrariousness -contraste -contravallation -contravener -contravention -contrayerva -contrecoup -contredanse -contretemps -contrib -contribution -contributiveness -contributor -contriteness -contrition -contrivance -contriver -controllability -controllableness -controller -controllership -controversialism -controversialist -controversy -controverter -controvertist -contumaciousness -contumacity -contumacy -contumeliousness -contumely -contusion -conundrum -conurbation -conure -convalescence -convection -convector -convenance -convener -convenience -conveniency -convent -conventicle -conventicler -convention -conventionalisation -conventionalism -conventionalist -conventionality -conventionalization -conventioneer -conventioner -convergence -conversableness -conversance -conversancy -conversation -conversationalist -conversazione -converser -conversion -conversus -converter -convertibility -convertibleness -convertin -convertiplane -convertite -convexedness -convexity -conveyance -conveyancer -conveyancing -conveyor -conveyorization -conveyorizer -convictfish -conviction -convincedness -convincer -convincibility -convincingness -convive -convivialist -conviviality -convocant -convocation -convocator -convoker -convolutedness -convolution -convolvement -convolvulus -convoy -convulsibility -convulsion -convulsiveness -cony -cooboo -cooch -cooer -cooey -coof -cook -cookbook -cooker -cookery -cookhouse -cookie -cooking -cookout -cookshop -cookstove -cookware -cooky -coolabah -coolamon -coolant -cooler -coolie -coolingness -coolness -coolth -cooly -coom -coomb -cooncan -cooner -coonhound -coonskin -coontie -coop -cooper -cooperage -cooperation -cooperationist -cooperativeness -cooperator -cooperite -coopery -cooption -coordinateness -coordination -coordinator -coot -cootch -cooter -cootie -cooty -cop -copaiba -copal -copalite -copalm -coparcenary -coparcener -copartner -copartnership -copeck -copemate -copepod -coper -copesmate -copestone -copier -copilot -coping -copiosity -copiousness -copita -coplanarity -copolymer -copolymerization -copper -copperah -copperas -copperhead -copperplate -coppersmith -coppice -copping -copra -coprecipitation -copremia -coprolagnist -coprolalia -coprolite -coprology -coprosma -coprosterol -copse -copter -copula -copulation -copy -copybook -copyboy -copycat -copycutter -copyfitter -copyfitting -copygraph -copyhold -copyholder -copyist -copyreader -copyright -copyrighter -copywriter -copywriting -coquelicot -coquetry -coquette -coquettishness -coquillage -coquille -coquina -coquito -coracle -coracoid -coraji -coral -coralberry -corallita -corallite -coralroot -coranto -corban -corbeil -corbeille -corbel -corbeling -corbelling -corbicula -corbie -corbiestep -corbina -corby -cord -cordage -cordelle -corder -cordiality -cordialness -cordierite -cordillera -cording -cordite -cordoba -cordon -cordonazo -cordovan -corduroy -cordwain -cordwainer -cordwainery -cordwood -core -corelation -coreligionist -corella -coremaker -coremium -coreopsis -corer -corespondent -corf -corgi -coriander -coring -corita -corium -cork -corkage -corkboard -corker -corkiness -corkscrew -corkwood -corm -cormel -cormophyte -cormorant -corn -cornball -corncob -corncockle -corncrake -corncrib -cornea -cornel -cornelian -cornemuse -corner -cornerstone -cornet -cornetcy -cornetfish -cornetist -cornett -cornetto -cornfield -cornflag -cornflour -cornflower -cornhusk -cornhusker -cornhusking -cornice -corniche -cornicle -cornstalk -cornstarch -cornstone -cornu -cornucopia -cornuto -corody -coroll -corolla -corollary -coromell -corona -coronach -coronagraph -coronal -coronation -coronel -coroner -coronership -coronet -coronitis -coronograph -coroplast -corozo -corp -corpl -corpn -corpora -corporalcy -corporality -corporalship -corporateness -corporation -corporatism -corporator -corporeality -corporealness -corporeity -corposant -corps -corpse -corpsman -corpulence -corpus -corpuscle -corpuscularity -corr -corral -corrasion -correctedness -correction -correctitude -correctness -corrector -corregidor -corregimiento -correl -correlation -correlativeness -correlativity -corrente -corresp -correspondence -correspondency -correspondent -corrida -corridor -corrie -corrigendum -corrigibility -corrigibleness -corrival -corrivalry -corrobboree -corroboration -corroborator -corroboree -corrodant -corroder -corrodibility -corrody -corrosion -corrosiveness -corrosivity -corrugation -corrugator -corruptedness -corrupter -corruptibility -corruptibleness -corruption -corruptionist -corruptness -corruptor -corsac -corsage -corsair -corse -corselet -corset -corsetior -corsetry -corslet -cort -cortage -cortege -cortex -cortication -corticosteroid -corticosterone -corticotrophin -cortin -cortisol -cortisone -corundum -coruscation -corv -corvae -corves -corvette -corvina -corvo -corydalis -corymb -corynebacterium -coryph -coryphae -coryphaeus -coryza -cos -cosec -cosecant -coset -cosh -cosignatory -cosine -cosiness -cosmetic -cosmetician -cosmetologist -cosmetology -cosmicality -cosmine -cosmism -cosmist -cosmochemistry -cosmodrome -cosmogonist -cosmogony -cosmographer -cosmographist -cosmography -cosmoline -cosmologist -cosmology -cosmonaut -cosmonautics -cosmopolis -cosmopolitan -cosmopolitanisation -cosmopolitanism -cosmopolitanization -cosmopolite -cosmopolitism -cosmorama -cosmos -coss -cossie -cost -costa -costard -costectomy -coster -costermonger -costiveness -costlessness -costliness -costmary -costotome -costotomy -costrel -costume -costumer -costumier -costusroot -cosuretyship -cot -cotangent -cote -coteau -cotehardie -cotenancy -cotenant -cotenure -coterie -coth -cothamore -cothurnus -cotice -cotillion -cotillon -cotinga -cotise -cotoneaster -cotquean -cotta -cottage -cottager -cottar -cotte -cotter -cottier -cotton -cottonade -cottonmouth -cottonseed -cottontail -cottonweed -cottonwick -cottonwood -cotula -cotwal -cotyledon -cotype -coucal -couch -coucher -couchette -couching -cougar -cougher -coulae -coulee -coulibiaca -coulisse -couloir -coulomb -coulometer -coulter -coumarin -coumarone -council -councillor -councillorship -councilman -councilor -councilorship -councilwoman -counsel -counsellor -counsellorship -counselor -counselorship -countableness -countdown -countenance -countenancer -counter -counteraccusation -counteracter -counteraction -counteractor -counterargument -counterattack -counterattraction -counterbalance -counterblast -counterblow -counterbore -counterborer -counterbrace -counterbracing -counterbrand -countercharge -countercheck -counterclaim -counterclaimant -counterculture -countercurrent -counterdeclaration -counterdemonstration -counterearth -counterespionage -counterfact -counterfeiter -counterfeitness -counterflashing -counterfoil -counterforce -counterfort -counterglow -counterinsurgency -counterinsurgent -counterintelligence -counterirritant -counterjumper -counterman -countermanifesto -countermark -countermeasure -countermine -countermove -countermovement -counteroffensive -counteroffer -counterpane -counterpart -counterplot -counterpoint -counterpoise -counterpoison -counterpotent -counterpressure -counterproof -counterpropaganda -counterproposal -counterproposition -counterreformation -counterreply -counterrevolution -counterrevolutionary -counterscarp -countershading -countershaft -countershafting -countersignature -counterspy -counterstain -counterstamp -counterstatement -counterstroke -countersubject -countertendency -countertenor -counterthrust -countertransference -counterturn -countertype -countervair -counterview -counterweight -counterword -counterwork -countess -countrifiedness -country -countryfiedness -countryfolk -countryman -countrypeople -countryseat -countryside -countrywoman -countship -county -coup -coupa -coupe -couperationist -couperativeness -couperator -couple -couplement -coupler -couplet -coupling -coupon -couption -courage -courageousness -courante -courdinateness -courdinator -courgette -courier -courlan -course -courser -coursing -court -courteousness -courtesan -courtesy -courthouse -courtier -courtliness -courtroom -courtship -courtyard -couscous -cousin -cousinage -cousinhood -cousinry -cousinship -couteau -couter -couthiness -coutil -couture -couturiare -couturier -couvade -covalence -covalency -covariance -cove -covellite -coven -covenant -covenantee -covenanter -covenantor -coverage -coverall -coverer -covering -coverlet -covers -covertness -coverture -coveter -covetousness -covey -covin -cow -cowage -coward -cowardic -cowardice -cowardliness -cowbane -cowbell -cowberry -cowbind -cowbird -cowboy -cowcatcher -cowfish -cowgirl -cowhage -cowherb -cowherd -cowhide -cowitch -cowl -cowlick -cowling -cowlstaff -cowman -cowpat -cowpea -cowpoke -cowpox -cowpuncher -cowrie -cowry -cowshed -cowskin -cowslip -cowtail -cox -coxa -coxalgia -coxcomb -coxcombry -coxswain -coyishness -coyness -coyote -coyotillo -coypu -coz -cozenage -cozener -coziness -cp -cpd -cpl -cpm -cpo -cps -cpt -cr -craal -crab -crabbedness -crabber -crabbing -crabeater -crabeating -crabstick -crabwood -crache -crackajack -crackbrain -crackbrainedness -crackdown -crackedness -cracker -crackerberry -cracket -crackleware -crackling -cracknel -crackpot -cracksman -cracky -cracovienne -cradle -cradler -cradlesong -cradling -craft -craftiness -craftsman -craftsmanship -craftwork -craftworker -crag -craggedness -cragginess -cragsman -crake -crakow -crambo -crame -cramel -crammer -cramp -crampedness -cramper -crampfish -crampon -cran -cranage -cranberry -crancelin -crandall -crane -craneman -cranemanship -cranesbill -craniol -craniologist -craniology -craniom -craniometer -craniometrist -craniometry -craniophore -cranioscopist -cranioscopy -craniotome -craniotomy -cranium -crank -crankcase -crankiness -crankle -crankness -crankpin -crankplate -crankshaft -crannog -cranny -cranreuch -crapaud -crape -crapehanger -craps -craquelure -crare -crasher -crasis -crassitude -crassness -cratch -crate -crater -craton -cravat -cravenness -craver -craving -cravingness -craw -crawfish -crawler -cray -crayer -crayfish -crayon -crayonist -craze -crazedness -craziness -crazyweed -crcao -creakiness -cream -creamcups -creamer -creamery -creaminess -creamware -creance -crease -createdness -creatine -creatinine -creation -creationism -creationist -creativeness -creativity -creator -creatorship -creature -creatureliness -creche -credence -credendum -credential -credenza -credibility -credibleness -credit -creditability -creditableness -creditor -creditorship -credo -credulity -credulousness -cree -creed -creedlessness -creek -creel -creeper -creepie -creepiness -creese -creesh -cremaster -cremation -cremationism -cremationist -cremator -crematorium -crenation -crenature -crenel -crenelation -crenelet -crenelle -crenulation -creodont -creole -creolization -creosol -creosote -crepe -crepehanger -crepidoma -crepis -crepitation -crepitus -crepon -crepuscle -crepuscule -cres -crescendo -crescent -cresol -cress -cresset -crest -crestfallenness -crestfish -cresting -cretic -cretin -cretinism -cretonne -crevasse -crevice -crew -crewel -crewelist -crewelwork -crewman -crewmanship -crib -cribbage -cribber -cribbing -cribbiter -cribellum -cribwork -crick -cricket -cricketer -crier -crim -crime -crimelessness -criminal -criminalist -criminalistics -criminality -crimination -criminator -criminologist -criminology -crimmer -crimper -crimpness -crimson -crimsonness -crine -crinet -cringer -cringingness -cringle -crinkleroot -crinoid -crinoline -crinosity -crinum -criolla -criollo -criosphinx -cripple -crippler -crisis -crispation -crispbread -crisper -crispiness -crispness -crissum -crista -cristobalite -crit -criterion -critic -criticalness -criticaster -criticasterism -criticastry -criticiser -criticism -criticizer -critique -critter -crivetz -crl -croaker -croakiness -crocein -crocheter -crocidolite -crock -crockery -crocket -crocking -crocodile -crocodilian -crocoite -crocus -croft -crofter -croisette -croissant -crojack -crombec -cromlech -cromorne -crone -crony -cronyism -crook -crookback -crookedness -crookesite -crookneck -crooner -crop -cropland -cropper -croppie -croquet -croquette -croquignole -crore -crosette -crosier -cross -crossability -crossband -crossbanding -crossbar -crossbeam -crossbencher -crossbill -crossbirth -crossbow -crossbowman -crosscurrent -crosscut -crosscutter -crosse -crossette -crossfire -crossgrainedness -crosshatcher -crosshead -crossing -crossjack -crosslap -crosslet -crosslight -crossline -crossness -crossopterygian -crossover -crosspatch -crosspiece -crossrail -crossroad -crossroads -crossrow -crossruff -crosstail -crosstalk -crosstie -crosstree -crosswalk -crossway -crosswind -crosswort -crotalaria -crotalin -crotch -crotchet -crotchetiness -crotchwood -croton -croucher -croup -croupade -croupier -croupiness -croute -crouton -crow -crowbar -crowberry -crowboot -crowd -crowdedness -crowdy -crower -crowfoot -crowhop -crowhopper -crowkeeper -crown -crowner -crownet -crownland -crownpiece -crownwork -crowstep -croze -crozier -crs -cru -cruces -cruciality -crucian -crucible -crucifer -crucifier -crucifix -crucifixion -cruciformity -cruck -crud -crudeness -crudity -cruelness -cruelty -cruet -cruiser -cruiserweight -cruiseway -cruller -crum -crumb -crumber -crumbliness -crumblingness -crumbum -crumhorn -crummie -crumpet -crunchiness -crunchingness -crunode -cruor -crupper -crura -crus -crusade -crusader -crusado -cruse -crushability -crusher -crust -crustacean -crustiness -crutch -crux -cruzado -cruzeiro -crwth -crybaby -crymotherapy -cryobiology -cryogen -cryogenics -cryohydrate -cryolite -cryology -cryometer -cryometry -cryonics -cryophyte -cryoscope -cryoscopy -cryostat -cryosurgery -cryotherapy -cryotron -crypt -cryptaesthesia -cryptanalysis -cryptanalyst -cryptanalytics -cryptoanalysis -cryptoanalyst -cryptoclimate -cryptoclimatology -cryptococcosis -cryptogam -cryptogamist -cryptogamy -cryptogram -cryptogrammatist -cryptograph -cryptographer -cryptographist -cryptography -cryptolith -cryptologist -cryptology -cryptomeria -cryptometer -cryptonym -cryptophyte -cryptoporticus -cryptorchidism -cryptovolcanism -cryptozoite -cryptozygy -cryst -crystal -crystall -crystallinity -crystallisability -crystallisation -crystallite -crystallizability -crystallization -crystallographer -crystallography -crzette -cs -csc -csch -csk -ct -ctenidium -ctenizid -ctenophoran -ctenophore -ctg -ctimo -ctn -ctr -cts -cu -cuadrilla -cuamuchil -cub -cubage -cubane -cubature -cubbing -cubbishness -cubby -cubbyhole -cubbyu -cube -cubeb -cuber -cubicalness -cubicity -cubicle -cubiculum -cubism -cubist -cubit -cubitiere -cubitus -cubmaster -cuckold -cuckoldry -cuckoo -cuckooed -cuckooflower -cuckooing -cuckoopint -cucumber -cucurbit -cud -cuda -cudbear -cuddy -cudgel -cudgeler -cudgeller -cudgerie -cudweed -cue -cueca -cueist -cuesta -cuff -cuiajo -cuif -cuirass -cuirassier -cuirie -cuisine -cuisse -cuj -culch -culet -culex -culicid -culinarian -cullender -culler -cullet -cullion -cullis -cully -culm -culmination -culpa -culpability -culpableness -culprit -cult -cultch -cultellus -cultigen -cultism -cultist -cultivability -cultivar -cultivation -cultivator -culture -culturist -cultus -culver -culverin -culvert -cumarin -cumarone -cumberer -cumberment -cumbersomeness -cumbrance -cumbrousness -cumin -cummer -cummerbund -cummingtonite -cumquat -cumshaw -cumulation -cumulativeness -cumulet -cumulonimbus -cumulostratus -cumulus -cunctation -cunctator -cunctatorship -cuneiformist -cuneus -cuniculus -cunjevoi -cunner -cunningness -cup -cupbearer -cupboard -cupcake -cupel -cupeler -cupellation -cupful -cupholder -cupidity -cupola -cuppa -cupper -cupping -cuprammonium -cuprite -cupronickel -cuprum -cupule -cur -cura -curability -curableness -curacy -curage -curagh -curare -curarine -curarization -curassow -curate -curateship -curativeness -curator -curatorship -curatrix -curb -curbing -curbstone -curch -curculio -curcuma -curd -curdiness -curdler -curer -curet -curettage -curette -curf -curfew -curia -curie -curio -curiosa -curiosity -curiousness -curium -curledness -curler -curlew -curlicue -curliness -curling -curlpaper -curlycue -curlyhead -curmudgeon -curn -currach -currajong -currant -currantworm -currawong -currency -currentness -curricle -curriculum -currie -currier -curriery -currijong -currishness -curry -currycomb -curse -cursedness -curser -cursiveness -cursor -cursoriness -curstness -curtailer -curtailment -curtain -curtains -curtalax -curtana -curtesy -curtilage -curtness -curtsey -curtsy -curvature -curve -curved -curvedness -curvet -curvette -curvilinearity -curving -cuscus -cusec -cushat -cushaw -cushion -cusk -cusp -cuspid -cuspidation -cuspidor -cuss -cussedness -cusso -cussword -custard -custodes -custodian -custodianship -custody -custom -customableness -customariness -customer -customs -custos -custumal -cutaway -cutback -cutbank -cutch -cutcherry -cutchery -cutdown -cuteness -cutey -cuticle -cuticula -cutie -cutin -cutinisation -cutinization -cutis -cutlass -cutlassfish -cutler -cutlery -cutlet -cutline -cutoff -cutout -cutpurse -cuttage -cutter -cutthroat -cutting -cuttingness -cuttle -cuttlebone -cuttlefish -cuttyhunk -cutup -cutwater -cutwork -cutworm -cuvae -cuvette -cwm -cwo -cwt -cy -cyan -cyanamide -cyanate -cyanide -cyanine -cyanite -cyanochroia -cyanocobalamin -cyanoderma -cyanogen -cyanogenamide -cyanoguanidine -cyanohydrin -cyanometer -cyanopathy -cyanoplatinite -cyanosis -cyanotype -cyathium -cyathus -cybernetician -cyberneticist -cybernetics -cyc -cycad -cyclamate -cyclamen -cyclas -cycle -cyclecar -cyclicity -cycling -cyclist -cyclization -cyclo -cycloacetylene -cycloalkane -cyclocephaly -cyclogenesis -cyclograph -cyclohexane -cyclohexatriene -cyclolysis -cyclometer -cyclone -cyclonite -cycloolefin -cyclopaedist -cycloparaffin -cyclopedia -cyclopedist -cyclopentadiene -cyclopentane -cyclopia -cycloplegia -cyclopropane -cyclorama -cyclosilicate -cyclosis -cyclostome -cyclostyle -cyclothymia -cyclothymiac -cyclotome -cyclotomy -cyclotrimethylenetrinitramine -cyclotron -cyder -cyesis -cygnet -cyke -cyl -cylinder -cylindricality -cylindricalness -cylindrite -cylindroid -cylindroma -cylix -cyma -cymaise -cymar -cymation -cymatium -cymbal -cymbaleer -cymbaler -cymbalist -cymbalo -cymbalom -cymbocephaly -cyme -cymene -cymogene -cymograph -cymometer -cymophane -cymotrichy -cynghanedd -cynic -cynicalness -cynicism -cynosure -cyphella -cypher -cypress -cyprinid -cyprinodont -cypripedium -cyprus -cypsela -cyrtosis -cyrtostyle -cyst -cystectomy -cysteine -cysticercoid -cysticercus -cystidium -cystine -cystitis -cystocarp -cystocele -cystolith -cystoma -cystometer -cystoscope -cystoscopy -cystostomy -cystotome -cystotomy -cytaster -cytidine -cytoarchitecture -cytochemistry -cytochrome -cytoclasis -cytogenesis -cytogeneticist -cytogenetics -cytokinesis -cytologist -cytology -cytolysin -cytolysis -cyton -cytopathology -cytopenia -cytophagy -cytopharynx -cytoplasm -cytoplast -cytosine -cytosome -cytost -cytostome -cytotaxis -cytotaxonomy -cytotoxin -cytotrophoblast -cytotropism -cytozoon -czar -czardas -czardom -czarevitch -czarevna -czarina -czarism -czaritza -d -da -dabber -dabbler -dabchick -daboota -daboucha -dabster -dace -dacha -dachshund -dacoit -dacoity -dacolletage -dacor -dacryon -dacryorrhea -dactyl -dactylogram -dactylographer -dactylography -dactylology -dactylomegaly -dad -daddy -dado -daemon -daemonian -daemonology -daff -daffadilly -daffadowndilly -daffing -daffodil -daffodilly -daffodowndilly -daftness -dagga -dagger -daggerboard -daglock -dago -dagoba -daguerreotype -daguerreotyper -daguerreotypist -daguerreotypy -dah -dahabeah -dahlia -dahoon -dailiness -daimon -daimyo -daintiness -daiquiri -dairy -dairying -dairymaid -dairyman -dairywoman -dais -daisy -daisycutter -dajeuner -dak -dakhma -dakoit -dakoity -dal -dalan -dalasi -dale -dalesman -daleth -dallan -dalliance -dallier -dalmatic -dalton -daltonism -dam -damage -damageability -damageableness -damager -daman -damar -damarche -damask -damaskeening -dame -damenti -damfool -damiana -dammar -damner -damningness -damoiselle -dampcourse -dampener -damper -dampishness -dampness -damsel -damselfish -damselfly -damson -damyankee -dan -danaite -danburite -danceability -dancer -dancette -dandelion -dander -dandification -dandiprat -dandler -dandruff -dandy -dandyism -danewort -danger -dangerousness -dangleberry -dangler -danio -dankness -danny -dansant -danseur -danseuse -dapartement -daphne -daphnia -dapperness -daraf -darby -dard -daredevil -daredeviltry -darer -darg -dargah -daric -daringness -dariole -darkener -darkishness -darkness -darkroom -darksomeness -darktown -darling -darlingness -darnel -darner -darning -darogha -dart -dartboard -darter -dartingness -darts -dasein -dashboard -dasheen -dasher -dashiki -dashpot -dassie -dastard -dastardliness -dastur -dasymeter -dasyure -dat -data -datableness -datary -datcha -date -dateableness -dateline -datente -datenu -datenue -dater -dato -datolite -datto -datum -datura -dau -daube -dauber -daubery -daud -dauerschlaf -daughter -daughterliness -dauk -dauntingness -dauntlessness -dauphin -dauphine -dauphiness -dautie -davenport -davit -daw -dawdler -dawk -dawn -dawtie -day -dayan -daybeacon -daybill -daybook -dayboy -daybreak -daydream -daydreamer -dayflower -dayfly -daylight -daymark -dayside -daysman -dayspring -daystar -daytime -daywork -dayworker -dazzler -db -dbl -dbridement -dcolletage -dcor -dd -de -deacetylation -deacon -deaconess -deaconry -deaconship -deactivation -deactivator -deadbeat -deadener -deadening -deadeye -deadfall -deadhead -deadlight -deadline -deadliness -deadlock -deadman -deadness -deadrise -deadwood -deadwork -deaeration -deaerator -deafening -deafmuteness -deafness -dealation -dealer -dealership -dealfish -dealing -deambulatory -deamidase -deaminase -deamination -deaminization -dean -deanery -deanship -deanthropomorphism -dearness -dearth -deary -death -deathbed -deathblow -deathday -deathiness -deathlessness -deathliness -deathsman -deathtrap -deathwatch -deb -debacle -debarkation -debarment -debasedness -debasement -debaser -debate -debater -debauchedness -debauchee -debaucher -debauchery -debauchment -debe -debeaker -debenture -debilitant -debilitation -debility -debit -debitor -debonairness -debouchment -debridement -debris -debt -debtor -debunker -debut -debutant -debutante -debye -dec -decade -decadence -decadrachm -decagon -decagram -decahedron -decahydrate -decal -decalcification -decalcifier -decalcomania -decalescence -decaliter -decameter -decampment -decan -decancellation -decane -decantation -decanter -decapitation -decapitator -decapod -decarbonation -decarbonisation -decarboniser -decarbonization -decarbonizer -decarbonylation -decarboxylase -decarboxylation -decarburation -decarburisation -decarburization -decare -decartelization -decastere -decastyle -decastylos -decasualisation -decasualization -decasyllable -decathlon -decating -decd -decease -decedent -deceit -deceitfulness -deceivability -deceivableness -deceiver -deceleration -decelerator -decelerometer -deceleron -decemvir -decemvirate -decency -decennary -decennium -decentness -decentralisation -decentralist -decentralization -deception -deceptiveness -decerebration -decertification -dechenite -dechloridation -deciare -decibar -decibel -decidedness -decider -decidua -deciduitis -deciduousness -decigram -decile -deciliter -decillion -decimal -decimalisation -decimalization -decimation -decimator -decimeter -decimetre -decipherability -decipherer -decipherment -decision -decisiveness -decistere -deck -deckel -decker -deckhead -deckhouse -decking -deckle -deckpipe -decl -declaimer -declamation -declarant -declaration -declarator -declarer -declassification -declension -declination -declinature -decliner -declinometer -declivity -decoction -decoder -decollation -decollator -decolonisation -decolonization -decoloration -decolorisation -decoloriser -decolorization -decolorizer -decolouration -decolourisation -decolouriser -decolourization -decolourizer -decompensation -decomposability -decomposer -decomposition -decompression -deconsecration -decontamination -decontaminator -decoration -decorativeness -decorator -decorousness -decortication -decorticator -decorum -decoupage -decoupling -decoy -decoyer -decree -decreet -decrement -decremeter -decrepitation -decrepitude -decresc -decrescence -decrescendo -decretal -decretist -decrial -decrier -decubitus -decumbence -decumbency -decurion -decurrence -decurrency -decury -decussation -dedans -dedendum -dedication -dedicator -dedifferentiation -dedolomitization -deducibility -deducibleness -deductibility -deduction -dee -deed -deejay -deemster -deemstership -deepener -deepfreeze -deepness -deer -deergrass -deerhound -deerskin -deerstalker -deerstalking -deescalation -deesis -def -defacement -defacer -defalcation -defalcator -defamation -defamer -default -defaulter -defeasance -defeasibility -defeasibleness -defeater -defeatism -defeatist -defeature -defecation -defect -defectibility -defection -defectiveness -defector -defeminisation -defeminization -defence -defencelessness -defendant -defender -defenestration -defense -defenselessness -defenseman -defensibility -defensibleness -defensiveness -deference -deferment -deferral -deferrer -defervescence -defiance -defiantness -defibrillation -defibrillator -deficience -deficiency -deficit -defier -defilade -defilement -defiler -definability -definer -definiendum -definiens -definiteness -definition -definitiveness -definitude -deflagrability -deflagration -deflation -deflationist -deflator -deflection -deflector -deflexion -deflocculant -deflocculation -defloration -deflowerer -defluxion -defoliant -defoliation -defoliator -deforcement -deforcer -deforciant -deforestation -deforester -deformability -deformation -deformedness -deformer -deformeter -deformity -defraudation -defrauder -defraudment -defrayal -defrayer -defroster -defs -deftness -defunctness -defusion -deg -degausser -degeneracy -degenerateness -degeneration -deglaciation -deglamorization -deglut -deglutination -deglutition -degradation -degradedness -degrader -degradingness -degratia -degreaser -degree -degression -degummer -degustation -dehiscence -dehorner -dehortation -dehorter -dehumanisation -dehumanization -dehumidification -dehumidifier -dehydration -dehydrator -dehydrogenase -dehydrogenation -dehydrogenisation -dehydrogeniser -dehydrogenization -dehydrogenizer -dehydroretinol -deicer -deicide -deification -deifier -deiformity -deil -deionization -deionizer -deipnosophist -deism -deist -deisticalness -deity -deixis -dejectedness -dejection -dekadrachm -dekagram -dekaliter -dekameter -dekare -dekastere -dekko -del -delabialization -delaine -delamination -delater -delation -delator -delayer -dele -delectability -delectableness -delectation -delegacy -delegate -delegation -deleteriousness -deletion -delft -deli -deliberateness -deliberation -deliberativeness -deliberator -delicacy -delicateness -delicatessen -deliciousness -delict -delightedness -delighter -delightfulness -delightsomeness -delimitation -delimitative -delineation -delineator -delineavit -delinquency -delinquent -deliquescence -deliration -deliriousness -delirium -delitescence -delitescency -deliverance -deliverer -delivery -deliveryman -dell -della -delocalisation -delocalization -delphinin -delphinine -delphinium -delta -deltiology -deltoid -delubrum -deluder -deluge -delusion -delusiveness -delusterant -delustering -delver -demagnetisation -demagnetiser -demagnetization -demagnetizer -demagogue -demagoguery -demagoguism -demagogy -demandant -demander -demantoid -demarcation -demarcator -demasculinisation -demasculinization -dematerialisation -dematerialization -deme -demeanor -demeanour -dementedness -dementia -demerara -demerit -demesne -demethylchlortetracycline -demibastion -demicanton -demigod -demijohn -demilitarisation -demilitarization -demilune -demimetope -demimondaine -demimonde -demineralization -demipique -demirelief -demirep -demisability -demise -demisemiquaver -demission -demitasse -demiurge -demivierge -demivolt -demo -demobilisation -demobilization -democracy -democrat -democratisation -democratization -demodulation -demodulator -demographer -demographist -demography -demoiselle -demolisher -demolishment -demolition -demon -demonetisation -demonetization -demonism -demonist -demonographer -demonography -demonolater -demonolatry -demonologist -demonology -demonstrability -demonstrableness -demonstrant -demonstration -demonstrativeness -demonstrator -demoralisation -demoraliser -demoralization -demoralizer -demos -demotion -demountability -dempster -demulsification -demulsifier -demureness -demurrage -demurral -demurrer -demy -demythologisation -demythologization -den -denarius -denationalisation -denationalization -denaturalisation -denaturalization -denaturant -denaturation -denaturisation -denaturiser -denaturization -denaturizer -dendrite -dendrochronologist -dendrochronology -dendrologist -dendrology -dendron -dene -denegation -dengue -denial -denier -denigration -denigrator -denim -denitration -denitrification -denitrificator -denitrifier -denization -denizen -denizenation -denizenship -denom -denomination -denominationalism -denominationalist -denominator -denotation -denotativeness -denotement -denouement -denouncement -denouncer -dens -denseness -densification -densifier -densimeter -densimetry -densitometer -densitometry -density -dent -dentalisation -dentality -dentalium -dentalization -dentalman -dentary -dentation -dentelle -dentex -denticle -denticulation -dentifrice -dentil -dentin -dentine -dentiphone -dentist -dentistry -dentition -denture -denudation -denuder -denunciation -denunciator -deodand -deodar -deodorant -deodorisation -deodoriser -deodorization -deodorizer -deontologist -deontology -deoxidisation -deoxidiser -deoxidization -deoxidizer -deoxycorticosterone -deoxygenation -deoxygenization -deoxyribonuclease -deoxyribonucleoprotein -deoxyribose -dep -department -departmentalisation -departmentalism -departmentalization -departure -depauperation -dependability -dependableness -dependant -dependence -dependency -depersonalization -depeter -depicter -depiction -depictor -depilation -depilator -depletion -deplorability -deplorableness -deploration -deplorer -deployment -deplumation -depolarisation -depolariser -depolarization -depolarizer -depolymerization -depopulation -depopulator -deportation -deportee -deporter -deportment -deposal -deposer -depositary -deposition -depositor -depository -depot -depravation -depravedness -depraver -depravity -deprecation -deprecator -deprecatoriness -depreciation -depreciator -depredation -depredationist -depredator -depressibility -depression -depressiveness -depressor -depreter -deprival -deprivation -depriver -depside -dept -depth -depuration -depurator -deputation -deputy -deputyship -der -deracination -deraignment -derailleur -derailment -derangement -deranger -deratization -deray -derby -dereism -dereliction -derelictness -derequisition -derider -deringer -derision -derisiveness -deriv -derivation -derivativeness -deriver -derma -dermabrasion -dermatherm -dermatitis -dermatogen -dermatographia -dermatologist -dermatology -dermatome -dermatophyte -dermatophytosis -dermatoplasty -dermatosis -dermatozoon -dermis -dermographia -dermotherm -dero -derogation -derogatoriness -derri -derriare -derrick -derringer -derris -derry -dertrum -derv -dervish -dervishhood -dervishism -desalination -desalinization -desalter -desamidase -desaminase -desc -descamisado -descant -descanter -descendability -descendant -descender -descendibility -descension -descensory -descent -descloizite -describability -describer -descrier -description -descriptiveness -descriptivism -desecrater -desecration -desecrator -desegregation -desensitization -desensitizer -desert -desertedness -deserter -desertion -deservedness -deserver -deservingness -deshabille -desiccation -desiccator -desideration -desideratum -designation -designator -designedness -designee -designer -designment -desinence -desirability -desirableness -desiredness -desirer -desirousness -desistance -desistence -desk -deskman -desman -desmid -desmitis -desmolase -desmotropy -desolateness -desolater -desolation -desolator -desorption -desoxyribonuclease -desoxyribonucleoprotein -desoxyribose -despairer -despairfulness -despairingness -despatcher -desperado -desperateness -desperation -despicability -despicableness -despisableness -despiser -despitefulness -despoiler -despoilment -despoliation -despondency -desponder -despot -despoticalness -despotism -despumation -desquamation -dessert -dessertspoon -dessertspoonful -dessiatine -desterilization -destination -destiny -destituteness -destitution -destoolment -destrier -destroyer -destructibility -destructibleness -destruction -destructionist -destructiveness -destructivity -destructor -desuetude -desulfuration -desulfurisation -desulfuriser -desulfurization -desulfurizer -desulphuration -desultoriness -desuperheater -det -detachability -detachedness -detacher -detachment -detail -detailedness -detainer -detainment -detectaphone -detection -detective -detector -detent -detention -detergency -detergent -deterioration -deteriorationist -determent -determinability -determinableness -determinateness -determination -determinativeness -determinedness -determiner -determinism -determinist -deterrence -deterrent -detersiveness -detestability -detestableness -detestation -detester -dethronement -dethroner -detinue -detonability -detonatability -detonation -detonator -detour -detoxication -detoxicator -detoxification -detraction -detractiveness -detractor -detrainment -detribalization -detriment -detrimentality -detrimentalness -detrition -detritus -detruncation -detrusion -detumescence -deuce -deuteragonist -deuteranomal -deuteranomaly -deuteranope -deuteranopia -deuteride -deuterium -deuterogamist -deuterogamy -deuteron -deuterotoky -deuton -deutoplasm -deutzia -deva -devadasi -devaluation -devastation -devastator -devel -developability -developer -development -developpa -deviability -deviance -deviascope -deviation -deviationism -deviationist -deviator -device -devicefulness -devil -devilfish -devilishness -devilkin -devilment -devilry -deviltry -devilwood -deviousness -devisal -devisee -deviser -devisor -devitalisation -devitalization -devitrification -devocalisation -devocalization -devoir -devolatilisation -devolatilization -devolution -devolvement -devotedness -devotee -devotement -devotion -devotionality -devotionalness -devourer -devouringness -devoutness -dew -dewan -dewberry -dewclaw -dewdrop -dewfall -dewiness -dewlap -dexamethasone -dexiocardia -dexterity -dexterousness -dextrality -dextran -dextrin -dextroamphetamine -dextrocardia -dextrocularity -dextroglucose -dextrorotation -dextrose -dextrousness -dey -dezincification -dfsenwind -dg -dhak -dhal -dharana -dharma -dharna -dhikr -dhobi -dhole -dhooly -dhoti -dhow -dhurna -dhurrie -dhyana -di -diabase -diabetes -diablerie -diablery -diabolicalness -diabolisation -diabolism -diabolist -diabolization -diabolo -diacetyl -diacetylmorphine -diachylon -diaconate -diaconicon -diaconicum -diacritic -diactinism -diadem -diadochokinesia -diadochy -diaeresis -diag -diagenesis -diageotropism -diagnosis -diagnostication -diagnostician -diagnostics -diagram -diagraph -diakinesis -diakonikon -dial -dialect -dialectic -dialectician -dialecticism -dialectics -dialectologist -dialectology -dialer -dialing -diallage -dialler -dialogism -dialogist -dialogite -dialogue -dialoguer -dialysability -dialysate -dialysation -dialyser -dialysis -dialyzability -dialyzate -dialyzation -dialyzer -diam -diamagnet -diamagnetism -diameter -diamine -diaminopropyltetramethylenediamine -diamond -diamondback -diamorphine -dianetics -dianoia -dianthus -diapason -diapause -diapedesis -diapente -diaper -diaphane -diaphaneity -diaphanometer -diaphanometry -diaphanousness -diaphone -diaphony -diaphoresis -diaphototropism -diaphragm -diaphysis -diapir -diaplasis -diapophysis -diapositive -diarchy -diarist -diarrhea -diarrhoea -diarthrosis -diary -diaschisis -diascope -diaspore -diastalsis -diastase -diastasis -diastema -diaster -diastole -diastrophism -diasystem -diatessaron -diathermancy -diathermy -diathesis -diatom -diatomicity -diatomite -diatonicism -diatreme -diatribe -diatropism -diazine -diazoalkane -diazole -diazomethane -diazonium -diazotizability -diazotization -diazotype -dibasicity -dibatag -dibble -dibbuk -dibrach -dibromide -dibucaine -dicacodyl -dicast -dicastery -dicentra -dicephalism -dicer -dichasium -dichloride -dichlorodifluoromethane -dichlorodiphenyltrichloroethane -dichloromethane -dichogamy -dichondra -dichotomisation -dichotomist -dichotomization -dichotomy -dichroiscope -dichroism -dichroite -dichromat -dichromate -dichromaticism -dichromatism -dichroscope -dicing -dickens -dickey -dickeybird -dickie -dickite -dicky -diclinism -dicophane -dicot -dicotyledon -dicoumarin -dicrotism -dict -dicta -dictagraph -dictation -dictator -dictatorialness -dictatorship -diction -dictionary -dictum -dicyandiamide -dicyclopentadienyliron -dicynodont -didacticism -didactics -didapper -diddikai -diddler -didgeridoo -didicoy -dido -didrachm -didy -didymium -didynamy -dieback -dieldrin -dielectric -diencephalon -diene -dieresis -dies -diesel -dieselization -diesinker -diesinking -diesis -diestock -diestrus -diet -dieter -dietetics -diethylacetal -diethylaminoethanol -diethylethanolamine -diethylmalonylurea -diethylstilbestrol -diethylstilboestrol -dietitian -diff -difference -differentia -differentiation -differentiator -difficulty -diffidence -diffidentness -diffluence -diffraction -diffractiveness -diffractometer -diffusate -diffusedness -diffuseness -diffuser -diffusibility -diffusibleness -diffusion -diffusiveness -diffusivity -difluence -digamma -digamy -digenesis -digestant -digestedness -digester -digestibility -digestibleness -digestif -digestion -digestor -digger -digit -digitalin -digitalis -digitalism -digitalization -digitation -digitisation -digitization -digitoxin -digitron -diglyceride -diglyph -dignifiedness -dignitary -dignity -digraph -digresser -digression -digressiveness -dihedron -dihybrid -dihybridism -dihydrate -dihydromorphinone -dihydrosphingosine -dihydrostreptomycin -dihydrotachysterol -dike -diker -diketone -dikkop -diktat -dil -dilaceration -dilapidation -dilapidator -dilatability -dilatableness -dilatancy -dilatation -dilater -dilation -dilatometer -dilatometry -dilator -dilatoriness -dilemma -dilettante -dilettantism -diligence -diligentness -dill -dilly -diluteness -dilution -diluvium -dime -dimenhydrinate -dimension -dimensionality -dimer -dimercaprol -dimerism -dimeter -dimethoxymethane -dimethyl -dimethylanthranilate -dimethylbenzene -dimethylcarbinol -dimethyldiketone -dimethylketol -dimethylketone -dimethylmethane -dimethylsulphoxide -dimidiation -diminishableness -diminuendo -diminution -diminutiveness -dimity -dimmer -dimness -dimorph -dimorphism -dimorphite -dimple -dimwit -din -dinanderie -dinar -dinarchy -diner -dinergate -dinette -dingbat -dinge -dingey -dinghy -dinginess -dingle -dingo -dingus -dinitrobenzene -dinkey -dinmont -dinner -dinnerware -dinoceras -dinoflagellate -dinosaur -dinothere -dint -diocese -diode -dioeciousness -dioestrum -dioestrus -dioicousness -diol -dionaea -diopside -diopsimeter -dioptase -diopter -dioptometer -dioptre -dioptrics -diorama -diorite -diorthosis -diosgenin -diosmosis -dioxan -dioxane -dioxide -dipeptide -diphenhydramine -diphenyl -diphenylacetylene -diphenylamine -diphenylaminechlorarsine -diphenylhydantoin -diphonia -diphosgene -diphosphate -diphtheria -diphtheriaphor -diphthong -diphthongia -diphthongisation -diphthongization -dipl -diplacusis -diplegia -dipleurula -diploae -diplococcus -diplodocus -diploe -diploma -diplomacy -diplomat -diplomate -diplomatics -diplomatist -diplont -diplophonia -diplopia -diplopod -diplosis -diplostemony -diplotene -dipneedle -dipody -dipole -dipper -dipropellant -diprotodont -dipso -dipsomania -dipsomaniac -dipstick -dipteran -dipteron -dipteros -diptote -diptych -dipylon -dipyramid -dir -directcarving -directdiscourse -directexamination -direction -directive -directiveness -directivity -directness -director -directorate -directorship -directory -directress -directrix -direfulness -direness -direx -direxit -dirge -dirham -dirhem -dirigibility -dirigo -dirk -dirndl -dirt -dirtfarmer -dirtiness -dis -disability -disablement -disabler -disabusal -disaccharide -disaccord -disaccustomedness -disadvantage -disadvantageousness -disaffectedness -disaffection -disaffiliation -disaffirmance -disaffirmation -disafforestation -disafforestment -disagreeability -disagreeableness -disagreement -disallowableness -disallowance -disannuller -disannulment -disappearance -disappointer -disappointingness -disappointment -disapprobation -disapproval -disapprover -disarmament -disarmer -disarrangement -disarranger -disarray -disarticulation -disarticulator -disassembly -disassociation -disaster -disastrousness -disavowal -disavower -disbandment -disbarment -disbelief -disbeliever -disburdenment -disbursement -disburser -disc -discant -discanter -discarder -discarnation -disceptation -discernableness -discerner -discernibleness -discernment -discerptibility -discerptibleness -discharger -disciple -discipleship -disciplinability -disciplinableness -disciplinant -disciplinarian -discipline -discipliner -discission -disclaimer -disclamation -disclimax -discloser -disclosure -disco -discobolus -discographer -discography -discoloration -discomfiter -discomfiture -discomfort -discommender -discommodiousness -discommodity -discomposure -disconcertedness -disconcertingness -disconcertion -disconcertment -disconformity -disconnectedness -disconnecter -disconnection -disconnectiveness -disconsideration -disconsolateness -disconsolation -discontent -discontentedness -discontinuance -discontinuation -discontinuer -discontinuity -discontinuousness -discophile -discord -discordance -discordancy -discotheque -discountenancer -discounter -discouragement -discourse -discourser -discourteousness -discourtesy -discoverer -discoverture -discovery -discreation -discreditability -discreetness -discrepancy -discreteness -discretion -discriminant -discrimination -discriminator -discursion -discursiveness -discus -discussant -discusser -discussion -discutient -disdain -disdainfulness -disease -diseasedness -disegno -disembarkation -disembarkment -disembarrassment -disembodiment -disemboguement -disembowelment -disenchanter -disenchantment -disendower -disendowment -disenfranchisement -disengagedness -disengagement -disentailment -disentanglement -disentangler -disenthrallment -disenthralment -disenthronement -disentombment -disentrancement -disequilibrium -disestablishment -disestablishmentarian -disestablishmentarianism -diseur -diseuse -disfavor -disfavorer -disfavour -disfavourer -disfeaturement -disfigurement -disfigurer -disforestation -disfranchisement -disfurnishment -disgorgement -disgorger -disgrace -disgracefulness -disgracer -disgregation -disgruntlement -disguisedness -disguiser -disgustedness -disgustingness -dish -dishabille -disharmonism -disharmony -dishcloth -dishcross -disheartener -disheartenment -disherison -disheritor -dishevelment -dishful -dishonesty -dishonorableness -dishonorer -dishonourableness -dishonourer -dishpan -dishrag -dishtowel -dishwasher -dishwater -disillusioniser -disillusionist -disillusionizer -disillusionment -disimprisonment -disincentive -disinclination -disinfectant -disinfection -disinfector -disinfestation -disinflation -disingenuousness -disinheritance -disinhibition -disintegration -disintegrator -disinterest -disinterestedness -disinterment -disjection -disjointedness -disjunction -disjuncture -disjune -disk -diskography -diskophile -dislocation -dislodgement -dislodgment -disloyalty -dismality -dismalness -dismantlement -dismantler -dismastment -dismayedness -dismemberer -dismemberment -dismissal -disobedience -disobeyer -disobligingness -disoperation -disorder -disorderedness -disorderliness -disorganiser -disorganization -disorganizer -disorientation -disparagement -disparager -disparateness -disparity -dispartment -dispassion -dispassionateness -dispatcher -dispeller -dispensability -dispensableness -dispensary -dispensation -dispensationalism -dispensator -dispensatory -dispenser -dispeoplement -dispeopler -dispermy -dispersal -dispersant -dispersedelement -dispersedye -disperser -dispersibility -dispersion -dispersiveness -dispersoid -disphenoid -dispiritedness -dispiteousness -displacement -displacer -displayer -displeasingness -displeasure -disposability -disposableness -disposal -disposedness -disposer -disposition -dispossession -dispossessor -disposure -dispraiser -dispreader -disproof -disproportion -disproportionableness -disproportionality -disproportionalness -disproportionateness -disproportionation -disprover -disputability -disputableness -disputant -disputation -disputatiousness -disputer -disqualification -disquiet -disquietedness -disquietude -disquisition -disregarder -disregardfulness -disrepair -disreputability -disreputableness -disreputation -disrepute -disrespect -disrespectability -disrespectfulness -disrobement -disrober -disrupter -disruption -disruptor -disrupture -dissatisfaction -dissatisfactoriness -dissatisfiedness -dissection -dissector -disseisin -disseisor -disseizee -disseizin -disseizor -dissemblance -dissembler -dissemination -disseminator -disseminule -dissension -dissenter -dissentience -dissentiency -dissepiment -dissertation -dissertationist -dissertator -disservice -disseverance -disseveration -disseverment -dissidence -dissilience -dissiliency -dissimilarity -dissimilation -dissimilitude -dissimulation -dissimulator -dissipatedness -dissipater -dissipation -dissipativity -dissipator -dissociability -dissociableness -dissociality -dissociation -dissogeny -dissolubility -dissolubleness -dissoluteness -dissolution -dissolvability -dissolvableness -dissolvent -dissolver -dissonance -dissonancy -dissuader -dissuasion -dissuasiveness -dissyllabism -dissyllable -dissymmetry -dist -distaff -distance -distantness -distaste -distastefulness -distelfink -distemper -distemperature -distemperedness -distendedness -distender -distensibility -distention -distich -distilery -distilland -distillate -distillation -distiller -distillery -distillment -distinction -distinctiveness -distinctness -distinguishability -distinguishableness -distinguisher -distinguishment -distomatosis -distortedness -distorter -distortion -distr -distractedness -distracter -distractibility -distraction -distrail -distrainee -distrainer -distrainment -distrainor -distraint -distressedness -distressfulness -distributary -distributee -distribution -distributiveness -distributor -distributorship -district -distringas -distruster -distrustfulness -disturbance -disturber -disty -disulfate -disulfide -disulfiram -disulphate -disulphide -disunion -disunionism -disunionist -disuniter -disunity -disuse -disutility -disvalue -disyllabism -disyllable -dit -dita -ditch -ditchdigger -ditchdigging -ditcher -ditchwater -ditheism -ditheist -dithionate -dithionite -dithyramb -ditriglyph -dittander -dittany -ditto -dittograph -dittography -ditty -diuresis -diureticalness -diurnalness -div -diva -divagation -divalence -divan -divarication -divaricator -dived -diver -divergence -divergency -diverseness -diversifiability -diversification -diversifier -diversion -diversity -diverter -diverticulitis -diverticulosis -diverticulum -divertimento -divertissement -divestiture -divi -divid -dividableness -dividedness -dividend -divider -divination -divineness -diviner -divinisation -divinity -divinization -divisibility -divisibleness -division -divisionism -divisiveness -divisor -divorca -divorce -divorcee -divorcement -divorcer -divot -divulgater -divulgation -divulgator -divulgement -divulgence -divulger -divulsion -divvy -diwan -dixie -dixit -dixy -dizenment -dizziness -dj -djebel -djellabah -djibbah -djin -djinni -dk -dkg -dkl -dkm -dks -dlr -dlvy -dm -dmarche -doab -doater -dobber -dobbin -dobby -dobie -dobl -dobla -doblun -dobra -dobson -dobsonfly -doc -docent -docentship -docility -dock -dockage -docker -docket -dockland -dockmackie -dockmaster -dockside -dockyard -doctor -doctorate -doctorfish -doctorship -doctrinairism -doctrinality -doctrine -document -documentation -dodderer -doddie -doddle -dodecagon -dodecahedron -dodecanal -dodecaphonism -dodecaphonist -dodecastylos -dodecasyllable -dodecylphenol -dodger -dodo -dodoism -doe -doek -doer -doeskin -doffer -dog -dogbane -dogberry -dogbody -dogcart -dogcatcher -dogdom -doge -dogedom -dogeship -dogey -dogface -dogfight -dogfish -doggedness -dogger -doggerel -doggery -doggishness -doggy -doghouse -dogie -dogleg -dogma -dogman -dogmaticalness -dogmatics -dogmatisation -dogmatiser -dogmatism -dogmatist -dogmatization -dogmatizer -dogsbody -dogshore -dogtooth -dogtrot -dogvane -dogwatch -dogwood -dogy -doh -doily -doing -doit -dojo -dol -doldrums -dole -dolefulness -dolerite -dolichocephalism -dolichocephaly -dolichosaurus -doline -dolium -doll -dollar -dollarbird -dollarfish -dollface -dollhouse -dollishness -dollop -dolly -dollyman -dolman -dolmas -dolmen -dolomite -dolomitization -dolor -dolorimeter -dolorimetry -dolorousness -dolour -dolphin -dolphinfish -dols -dolt -doltishness -dolus -dom -domain -dome -domesday -domestication -domesticator -domesticity -domicile -domiciliar -domiciliation -dominance -dominator -domine -dominee -domineeringness -dominicale -dominie -dominion -dominium -domino -dominoes -dona -donation -donative -donator -donatory -donee -dong -donga -donjon -donkey -donna -donnishness -donnism -donny -donnybrook -donor -donorship -donut -donzel -doodad -doodah -doodlebug -doodler -doodlesack -doohickey -dook -doolie -dooly -doom -doomsday -doomwatcher -door -doorbell -doorbrand -doorcase -doorframe -doorjamb -doorkeeper -doorknob -doorman -doormat -doornail -doorpiece -doorplate -doorpost -doorsill -doorstead -doorstep -doorstone -doorstop -doorway -dooryard -doover -dop -dopa -dopant -dopatta -dope -doper -dopesheet -dopester -dor -dorab -dorado -dorje -dorm -dormancy -dormer -dormeuse -dormitory -dormouse -dornick -doronicum -dorp -dorr -dorse -dorser -dorsiflexion -dorsiflexor -dorsiventrality -dorsum -dorter -dortiness -dory -doryman -dosage -dose -dosimeter -dosimetrician -dosimetrist -dosimetry -dossal -dosser -dosseret -dosshouse -dossier -dossil -dot -dotage -dotard -dotation -doter -dotingness -dotter -dotterel -dottiness -dottle -doua -douane -doubleganger -doubleheader -doubleness -doubler -doubles -doublet -doublethink -doubleton -doubletree -doubloon -doublure -doubt -doubter -doubtfulness -doubtingness -doubtlessness -douc -douceness -doucepere -douceur -douche -dough -doughbelly -doughboy -doughface -doughiness -doughnut -doughtiness -douma -doup -douppioni -doura -douricouli -dourine -dourness -douroucouli -douser -douter -douzaine -douziame -dove -dovecote -dovekie -dovetail -dovetailer -dowager -dowagerism -dowdiness -dowdyism -dowel -dower -dowery -dowiness -dowitcher -downbeat -downcastness -downcome -downcomer -downdraft -downer -downfall -downhaul -downheartedness -downiness -downpipe -downpour -downrightness -downspout -downstater -downstroke -downswing -downtake -downthrow -downtime -downtown -downtowner -downtrend -downtroddenness -downturn -downwardness -downwash -dowry -dowsabel -dowser -doxographer -doxology -doxy -doyen -doyenne -doyley -dozer -doziness -dpt -dr -drabbet -drabbler -drabness -dracaena -drachm -drachma -dracone -draegerman -draff -draft -draftee -drafter -draftiness -draftsman -draftsmanship -drag -dragae -dragger -draggletail -draghound -dragline -dragnet -dragoman -dragon -dragoness -dragonet -dragonfly -dragonhead -dragonnade -dragonroot -dragoon -dragoonage -dragrope -dragsaw -dragsawing -dragster -drahthaar -drail -drain -drainage -drainageway -drainboard -drainer -drainfield -drainpipe -drainspout -drainway -drake -drakefly -dram -drama -dramatics -dramatiser -dramatist -dramatization -dramatizer -dramaturge -dramaturgist -dramaturgy -drame -drammock -dramshop -draper -drapery -draught -draughtboard -draughter -draughtiness -draughts -draughtsman -dravite -drawability -drawback -drawbar -drawbench -drawbore -drawboy -drawbridge -drawee -drawer -drawing -drawknife -drawler -drawlingness -drawplate -drawshave -drawstring -drawtube -dray -drayage -drayhorse -draying -drayman -drch -dreadfulness -dreadness -dreadnought -dream -dreamboat -dreamer -dreamfulness -dreaminess -dreamland -dreamlessness -dreamtime -dreariness -dreck -dredge -dredger -dreg -dreidel -drencher -dressage -dresser -dressiness -dressing -dressmaker -dressmaking -dressoir -drib -dribbler -driblet -driftage -driftbolt -drifter -driftfish -driftlessness -driftpin -driftwood -drill -drillbit -driller -drilling -drillmaster -drillstock -drinkability -drinkableness -drinker -dripolator -drippage -dripping -dripstone -driveler -driveller -driver -driveway -drizzle -drogher -drogue -droit -drollery -drollness -dromedary -dromond -dromos -drone -drongo -droob -droopiness -drop -dropforger -droplet -droplight -dropline -dropout -droppage -dropper -dropping -dropsicalness -dropsonde -dropsy -dropwort -droshky -drosky -drosometer -drosophila -dross -drossiness -drought -droughtiness -drouthiness -drover -drowner -drowsihead -drowsiness -drubber -drubbing -drudge -drudger -drudgery -drug -drugget -druggist -drugstore -druid -druidism -druidology -drum -drumbeat -drumbeater -drumfire -drumfish -drumhead -drumlin -drummer -drummock -drumstick -drunkard -drunkenness -drunkometer -drupe -drupelet -druse -dryad -dryas -dryasdust -drybrush -dryer -dryfarmer -dryness -dryopithecine -drypoint -drysalter -drysaltery -ds -dt -dtd -dtente -du -duad -dualism -dualist -duality -duarchy -dubbeltje -dubbin -dubbing -dubiety -dubiousness -dubitation -dubonnet -duc -ducat -ducatoon -duce -duchess -duchesse -duchy -duck -duckbill -duckboard -ducker -duckling -duckpin -ducktail -duckweed -duckwheat -ducky -duct -ductileness -ductility -ductor -ductule -ductwork -dud -dude -dudeen -dudelsack -dudgeon -due -duecentist -duecento -duel -duelist -duello -dueness -duenna -duet -duettist -duff -duffel -duffer -dugento -dugong -dugout -duiker -duikerbok -duit -duka -duke -dukedom -dukkha -dulc -dulcetness -dulciana -dulcification -dulcimer -dulcinea -dulia -dullard -dullness -dullsville -dulness -dulocracy -dulosis -dulse -duma -dumbbell -dumbfounderment -dumbhead -dumbness -dumbwaiter -dumdum -dumfounderment -dumka -dummkopf -dummy -dumortierite -dumpcart -dumper -dumpiness -dumpishness -dumpling -dunce -dunch -dundavoe -dunder -dunderhead -dunderheadedness -dune -dung -dungaree -dungeon -dunghill -duniewassal -dunite -duniwassal -dunker -dunlin -dunnage -dunnakin -dunnite -dunno -dunnock -dunny -dunt -duo -duodecagon -duodecillion -duodecillionth -duodecimality -duodecimo -duodenitis -duodenojejunostomy -duodenum -duodiode -duodiodepentode -duologue -duomo -duopoly -duopsony -duotone -duotriode -duotype -dupability -dupatta -dupe -duper -dupery -dupion -duplation -duplet -duplex -duplexer -duplexity -duplicability -duplication -duplicator -duplicature -duplicity -dupondius -duppy -dura -durability -durableness -durain -duralumin -duramen -durance -duration -durbar -duress -duressor -durgah -durian -durmast -duro -durra -durrie -durum -durzi -dusk -duskiness -dust -dustbin -dustcart -dustcloth -duster -dustheap -dustiness -dusting -dustman -dustoor -dustpan -dustsheet -dustup -dutch -duteousness -dutiability -duty -duumvir -duumvirate -duvet -duvetyn -dux -duyker -dvaita -dvandva -dwale -dwalm -dwarf -dwarfishness -dwarfism -dweller -dwelling -dwt -dyad -dyarchy -dybbuk -dye -dyeing -dyer -dyestuff -dyeweed -dyewood -dyn -dynameter -dynamics -dynamism -dynamist -dynamite -dynamiter -dynamo -dynamogenesis -dynamometer -dynamometry -dynamotor -dynast -dynasty -dynatron -dyne -dynode -dysacousia -dysadaptation -dysanagnosia -dysanalyte -dysarthria -dysbarism -dyscrasia -dyscrinism -dysentery -dysergia -dysesthesia -dysfunction -dysgenics -dysgnosia -dysgraphia -dyskinesia -dyslalia -dyslexia -dyslogia -dysmenorrhea -dysmenorrhoea -dysmetria -dysmnesia -dyspareunia -dyspathy -dyspepsia -dysphagia -dysphasia -dysphemia -dysphemism -dysphonia -dysphoria -dysplasia -dyspnea -dyspnoea -dyspraxia -dysprosium -dysrhythmia -dysteleologist -dysteleology -dysthymia -dystonia -dystopia -dystrophy -dysuria -dytiscid -dz -dziggetai -dzo -e -ea -ead -eager -eagerness -eagle -eaglestone -eaglet -eaglewood -eagre -ealdorman -eanling -ear -earache -earbob -eardrop -eardrum -earflap -earful -earing -earl -earlap -earldom -earliness -earlship -earmindedness -earmuff -earner -earnestness -earning -earphone -earpiece -earplug -earreach -earring -earshot -earth -earthenware -earthiness -earthlight -earthliness -earthling -earthman -earthmover -earthnut -earthpea -earthquake -earthrise -earthshaker -earthshine -earthstar -earthwork -earthworm -earwax -earwig -earwitness -ease -easefulness -easel -easement -easer -easiness -easing -east -easterliness -easterling -easterner -easting -eastness -easygoingness -eatage -eater -eatery -eath -eating -eau -eave -eavesdropper -ebonist -ebonite -ebony -ebullience -ebullioscopy -ebullition -eburnation -ec -ecad -ecart -eccentricity -ecchymosis -eccl -ecclesia -ecclesiarch -ecclesiastic -ecclesiasticism -ecclesiolater -ecclesiolatry -ecclesiologist -ecclesiology -eccrinology -ecdysiast -ecdysis -ecdysone -ecesis -echard -echelette -echelle -echelon -echelonment -echeveria -echidna -echinococcus -echinoderm -echinoid -echinus -echiuroid -echo -echoer -echogram -echograph -echoism -echolalia -echolocation -echopraxia -echovirus -eclair -eclampsia -eclat -eclecticism -eclipse -eclipser -eclipsis -ecliptic -eclogite -eclogue -eclosion -ecocide -ecol -ecologist -ecology -econ -econometrician -econometrics -econometrist -economics -economiser -economist -economizer -economy -ecorch -ecospecies -ecosphere -ecossaise -ecosystem -ecotone -ecotype -ecphonesis -ecraseur -ecru -ecstasy -ectasis -ectene -ecthlipsis -ecthyma -ectoblast -ectocornea -ectocrine -ectoderm -ectoenzyme -ectogenesis -ectomere -ectomorph -ectomorphy -ectoparasite -ectophyte -ectopia -ectoplasm -ectoproct -ectosarc -ectostosis -ectozoa -ectrodactylism -ectromelia -ectropion -ectropionization -ectype -ecu -ecumenicalism -ecumenicism -ecumenicist -ecumenicity -ecumenics -ecumenism -ecumenist -ecurie -eczema -ed -edacity -edaphon -eddo -eddy -edelweiss -edema -edentate -edge -edgebone -edger -edginess -edging -edh -edibility -edibleness -edict -edicule -edification -edifice -edifier -edifyingness -edile -edition -editor -editorialist -editorialization -editorializer -editorship -editress -eds -educ -educability -educatability -educatee -education -educationalist -educationist -educator -educt -eduction -eductor -edulcoration -ee -eel -eelback -eelgrass -eelpout -eelworm -eeriness -ef -effacement -effacer -effect -effecter -effectiveness -effectivity -effector -effectuality -effectualness -effectuation -effeminacy -effeminateness -effemination -effeminisation -effeminization -effendi -efference -effervescence -effervescency -effeteness -efficaciousness -efficacy -efficiency -effigiation -effigy -effleurage -efflorescence -effluence -effluent -effluvium -efflux -effort -effortlessness -effraction -effractor -effrontery -effulgence -effusiometer -effusion -effusiveness -efph -eft -eg -egalitarianism -egestion -egg -eggbeater -eggcrate -eggcup -egger -egghead -eggnog -eggplant -eggshell -egis -eglantine -ego -egocentricity -egocentrism -egoism -egoist -egomania -egomaniac -egotism -egotist -egregiousness -egress -egression -egret -eider -eiderdown -eidolon -eidos -eigenfrequency -eigenfunction -eigenvalue -eigenvector -eight -eightball -eighteen -eighteenmo -eightvo -eighty -eikon -einkanter -einkorn -einsteinium -eirenicon -eisegesis -eisteddfod -ejection -ejectment -ejector -ejido -ejusd -ekistics -ektene -el -elaborateness -elaboration -elaborator -elaeoptene -elaeothesium -elan -eland -elapid -elasmobranch -elasmosaur -elastance -elasticity -elastin -elastomer -elatedness -elater -elaterid -elaterin -elaterite -elaterium -elation -elayl -elbow -elbowroom -eld -elderberry -elderliness -elding -elecampane -election -electioneerer -electiveness -elector -electorate -electress -electret -electricalness -electrician -electricity -electrification -electrifier -electro -electroacoustics -electroanalysis -electroballistician -electroballistics -electrobiologist -electrobiology -electrocardiogram -electrocardiograph -electrocardiography -electrocautery -electrochemist -electrochemistry -electrocoagulation -electrocorticogram -electrocution -electrode -electrodeposition -electrodiagnosis -electrodialysis -electrodissolution -electrodynamics -electrodynamometer -electroencephalogram -electroencephalograph -electroencephalography -electroextraction -electroforming -electrograph -electrography -electrohemostasis -electrojet -electrokinetics -electrolier -electrologist -electroluminescence -electrolysation -electrolyser -electrolysis -electrolyte -electrolyzation -electrolyzer -electromagnet -electromagnetics -electromagnetism -electromagnetist -electromerism -electrometallurgist -electrometallurgy -electrometeor -electrometer -electrometry -electromotor -electromyogram -electromyography -electron -electronarcosis -electronegativity -electroneutrality -electronics -electronvolt -electrophone -electrophoresis -electrophorus -electrophotography -electrophysiologist -electrophysiology -electroplaque -electroplater -electroreduction -electrorefining -electroscope -electroshock -electrostatics -electrostriction -electrosurgery -electrosynthesis -electrotaxis -electrotechnician -electrotechnics -electrotechnology -electrotherapeutics -electrotherapist -electrotherapy -electrothermics -electrotonus -electrotropism -electrotype -electrotyper -electrotypist -electrotypy -electrovalence -electrovalency -electrowinning -electrum -electuary -elegance -elegancy -elegist -elegit -elegy -elektra -elem -element -elementariness -elemi -elemong -elenchus -eleoptene -elephant -elephanta -elephantiasis -elevation -elevator -eleven -elevon -elf -elfinwood -elfishness -elfland -elflock -elicitation -elicitor -eligibility -eliminability -eliminant -elimination -eliminator -elinguation -elision -elisor -elite -elitism -elitist -elix -elixir -elk -elkhound -ell -ellipse -ellipsis -ellipsograph -ellipsoid -ellipticalness -ellipticity -elliptograph -elm -elocution -elocutionist -eloigner -eloignment -eloiner -eloinment -elongation -elopement -eloper -eloquence -eloquentness -eluant -eluate -elucidation -elucidator -eluder -eluent -elusion -elusiveness -elution -elutriation -elutriator -eluviation -eluvium -elver -elves -elytra -elytron -elytrum -em -emaciation -emagram -emanation -emanator -emancipation -emancipationist -emancipator -emancipist -emargination -emasculation -emasculator -embacle -embalmer -embalmment -embankment -embarcation -embargo -embarkation -embarkment -embarrassment -embassador -embassage -embassy -embattlement -embayment -embedding -embedment -embellisher -embellishment -ember -embezzlement -embezzler -embiid -embiotocid -embitterer -embitterment -emblazer -emblazoner -emblazonment -emblazonry -emblem -emblematicalness -emblematist -embodier -embodiment -embolectomy -embolism -embolite -embolus -emboly -embonpoint -emboota -embosser -embossment -embouchure -embowment -embracement -embraceor -embracer -embracery -embranchment -embranglement -embrasure -embrectomy -embrittlement -embrocation -embroiderer -embroideress -embroidery -embroiler -embroilment -embryectomy -embryo -embryogeny -embryol -embryologist -embryology -embryotomy -embryotroph -embryotrophy -embryulcia -embryulcus -embusqu -emcee -eme -emeer -emeerate -emendation -emendator -emerald -emergence -emergency -emergentness -emersion -emery -emesis -emetine -emeu -emf -emiction -emigr -emigrant -emigration -eminence -eminency -emir -emirate -emissary -emission -emissivity -emittance -emitter -emmenagogue -emmenia -emmeniopathy -emmer -emmet -emmetrope -emmetropia -emollience -emollition -emolument -emoter -emotion -emotionalism -emotionalist -emotionality -emotiveness -emotivism -emotivity -emp -empalement -empaler -empanada -empathy -empennage -emperor -emperorship -empery -emphasis -emphaticalness -emphysema -empire -empiric -empiricalness -empiricism -empiricist -empirism -emplacement -emplectite -employability -employee -employer -employment -empoisonment -emporium -empowerment -empress -empressement -emprise -emptier -emptiness -empyema -empyrean -empyreuma -emu -emulation -emulator -emulgens -emulousness -emuls -emulsibility -emulsifiability -emulsification -emulsifier -emulsion -emulsoid -en -enabler -enactment -enactor -enallage -enamel -enameler -enamelist -enameller -enamellist -enamelware -enamelwork -enami -enamoredness -enamouredness -enantiomorph -enantiomorphism -enantiosis -enantiotropy -enargite -enarme -enarthrosis -enc -encaenia -encampment -encapsulation -encarpus -encasement -encephalalgia -encephalasthenia -encephalin -encephalitis -encephalogram -encephalograph -encephalography -encephaloma -encephalomalacia -encephalomyelitis -encephalon -encephalopathy -encephalosis -encephalotomy -enchainment -enchanter -enchantingness -enchantment -enchantress -enchaonement -enchaser -enchilada -enchiridion -enchondroma -encina -encipherer -encipherment -encirclement -encl -enclave -encloser -enclosure -encodement -encoder -encoignure -encolpion -encomiast -encomienda -encomium -encompassment -encopresis -encounterer -encouragement -encourager -encrinite -encroacher -encroachment -encrustation -encryption -enculturation -encumbrance -encumbrancer -ency -encyclical -encyclopedia -encyclopedism -encyclopedist -encystation -encystment -end -endamagement -endamoeba -endangeitis -endangerment -endaortitis -endarchy -endarteritis -endarterium -endbrain -endearment -endeavorer -endeavourer -endemism -ender -endgame -endhand -ending -endive -endlessness -endnote -endoangiitis -endoaortitis -endoarteritis -endoblast -endocarditis -endocardium -endocarp -endocranium -endocrinologist -endocrinology -endocrinopath -endocrinopathy -endocrinotherapy -endoderm -endodermis -endodontics -endodontist -endodontium -endoenzyme -endogamy -endogen -endogenicity -endogeny -endolymph -endometriosis -endometritis -endometrium -endomorph -endomorphism -endomorphy -endoneurium -endoparasite -endopeptidase -endoperidium -endophasia -endophyte -endoplasm -endopodite -endorsee -endorsement -endorser -endorsor -endosarc -endoscope -endoscopist -endoscopy -endoskeleton -endosmosis -endosome -endosperm -endospore -endosporium -endosteum -endostosis -endothecium -endothelioma -endothelium -endothermism -endotoxin -endotoxoid -endover -endower -endowment -endpaper -endpiece -endplate -endplay -endpoint -endrin -endshake -endurability -endurableness -endurance -endurer -enduringness -enema -enemy -energeticist -energetics -energid -energiser -energism -energist -energizer -energumen -energy -enervation -enervator -enfacement -enfeeblement -enfeebler -enfeoffment -enfilade -enfleurage -enfolder -enfoldment -enforceability -enforcement -enforcer -enfranchisement -enfranchiser -eng -engagedness -engagement -engager -engagingness -engarde -engenderer -engenderment -engin -engine -engineer -engineering -engineman -enginery -engobe -engorgement -engr -engraftation -engraftment -engrailment -engram -engraver -engraving -engrosser -engrossingness -engrossment -engulfment -enhancement -enhancer -enigma -enjambement -enjambment -enjoiner -enjoinment -enjoyableness -enjoyer -enjoyment -enkindler -enkolpion -enl -enlacement -enlargedness -enlargement -enlarger -enlightenedness -enlightener -enlightenment -enlistee -enlister -enlistment -enlivener -enlivenment -enmeshment -enmity -ennage -ennead -enneagon -enneahedron -enneastylos -ennoblement -ennobler -ennui -enol -enolate -enolization -enology -enormity -enormousness -enosis -enosist -enouncement -enquiry -enragement -enregistration -enricher -enrichment -enrober -enrollee -enroller -enrollment -enrolment -ens -ensample -ensemble -enshrinement -ensign -ensigncy -ensignship -ensilability -ensilage -enslavement -enslaver -ensnarement -ensnarer -ensorcellment -enstatite -ensurer -enswathement -entablature -entablement -entailer -entailment -entangledness -entanglement -entangler -entasis -entelechy -entellus -entente -enteralgia -enterclose -enterectomy -enterer -enteritis -enterobiasis -enterocolitis -enterogastrone -enterohepatitis -enterokinase -enterology -enteron -enteropneust -enterorrhexis -enterostomy -enterotomy -enterotoxemia -enterovirus -enterprise -enterpriser -enterrologist -entertainer -entertainingness -entertainment -enthalpy -enthraller -enthrallment -enthralment -enthronement -enthusiasm -enthusiast -enthymeme -enticement -enticingness -entireness -entirety -entitlement -entity -entoblast -entoderm -entombment -entomol -entomolegist -entomology -entomophily -entomostracan -entophyte -entourage -entozoa -entozoon -entr -entrada -entrae -entrainer -entrance -entrancement -entranceway -entrant -entrapment -entrapper -entreatment -entreaty -entrec -entrechat -entrecote -entrelac -entremets -entrenchment -entrep -entrepot -entrepreneur -entrepreneurship -entrepreneuse -entresol -entropy -entrustment -entry -entryway -entwinement -enucleation -enucleator -enumeration -enumerator -enunciability -enunciation -enunciator -enuresis -envelope -enveloper -envelopment -enviableness -envier -enviousness -environment -environmentalism -environmentalist -envisagement -envoy -envy -enzyme -enzymologist -enzymology -enzymolysis -eo -eobiont -eohippus -eolipile -eolith -eom -eon -eonism -eosin -eosinophil -eosinophilia -ep -epact -epagoge -epanaphora -epanodos -epanorthosis -eparch -eparchy -epaulet -epeirogeny -epeisodion -epencephalon -ependyma -epenthesis -epergne -epexegesis -ephah -ephebe -ephebeion -ephebeum -ephebos -ephebus -ephedra -ephedrine -ephemera -ephemerality -ephemeralness -ephemerid -ephemeris -ephemeron -ephippium -ephod -ephor -ephorate -epiblast -epiboly -epic -epicalyx -epicanthus -epicardium -epicarp -epicedium -epicenism -epicenter -epicentre -epicentrum -epicist -epiclesis -epicondyle -epicotyl -epicrisis -epicure -epicycle -epicycloid -epidemicity -epidemiologist -epidemiology -epidermis -epidiascope -epididymis -epidiorite -epidote -epigastrium -epigenesis -epigenesist -epigenist -epiglottis -epigone -epigoneion -epigonism -epigram -epigrammatism -epigrammatist -epigraph -epigrapher -epigraphist -epigraphy -epigynum -epigyny -epiklesis -epilation -epilator -epilepsy -epilimnion -epilogist -epilogue -epimer -epimere -epimerism -epimorphism -epimorphosis -epimyocardium -epimysium -epinaos -epinasty -epinephrine -epineurium -epionychium -epiphany -epiphenomenalism -epiphenomenalist -epiphenomenon -epiphonema -epiphora -epiphragm -epiphylaxis -epiphyll -epiphysis -epiphyte -epiplexis -epiploon -epirogeny -episcopacy -episcopalism -episcopate -episcope -episcotister -episememe -episiotomy -episode -episome -epist -epistasis -epistaxis -episteme -epistemologist -epistemology -episternum -epistle -epistoler -epistolography -epistrophe -epistyle -episyllogism -epit -epitaph -epitaphist -epitasis -epitaxis -epitaxy -epithalamion -epithalamium -epithalamus -epithecium -epithelioma -epithelium -epithelization -epithet -epitome -epitomisation -epitomiser -epitomist -epitomization -epitomizer -epitrachelion -epizoism -epizoite -epizoon -epizooty -epoch -epode -eponychium -eponym -eponymy -epop -epopee -epos -epoxide -epsilon -epsomite -epulo -epuration -epyllion -eq -eqpt -equability -equableness -equalisation -equalitarianism -equality -equalization -equalizer -equanimity -equanimousness -equatability -equation -equator -equerry -equestrianism -equestrienne -equiangularity -equidistance -equilibrant -equilibration -equilibrator -equilibrist -equilibrium -equinity -equinox -equipage -equipartition -equipment -equipoise -equipollence -equipollency -equiponderance -equiponderation -equipotentiality -equipper -equiprobabilism -equiprobability -equisetum -equitableness -equitation -equity -equiv -equivalence -equivalency -equivocacy -equivocality -equivocalness -equivocation -equivocator -equivoque -era -eradiation -eradication -eradicator -erasability -eraser -erasion -erasure -erbium -erectility -erection -erectness -erector -eremite -eremitism -eremophyte -erepsin -erethism -erg -ergastoplasm -ergate -ergatocracy -ergocalciferol -ergodicity -ergograph -ergometer -ergometrine -ergonomics -ergonovine -ergosterol -ergot -ergotamine -ergotin -ergotinine -ergotism -ergotoxine -eric -erica -erigeron -eringo -erk -erlking -ermine -ermines -erminois -erne -erodability -erodibility -erodium -erogeneity -erosion -erosiveness -erosivity -erotesis -erotica -eroticism -erotogenesis -erotology -erotomania -erotomaniac -errability -errancy -errand -errantry -errata -erraticism -erratum -erron -erroneousness -error -ers -erubescence -eructation -eruditeness -erudition -eruption -eruptiveness -eruptivity -ervil -eryngo -erysipelas -erysipeloid -erysipelothrix -erythema -erythrism -erythrite -erythritol -erythroblast -erythroblastosis -erythrocyte -erythrocytometer -erythrocytometry -erythromycin -erythrophobia -erythrophyll -erythropoiesis -erythropsin -escadrille -escalade -escalader -escalation -escalator -escallonia -escallop -escalope -escapade -escapee -escapement -escaper -escapeway -escapism -escapologist -escargot -escarole -escarp -escarpment -eschalot -eschar -eschatologist -eschatology -escheat -escheatage -escheator -eschewal -eschewer -escolar -esconson -escritoire -escrow -escuage -escudo -esculent -esculin -escutcheon -eserine -esker -eslisor -esne -esnecy -esonarthex -esophagitis -esophagus -esotericism -esotericist -esoterism -esoterist -esotery -esotropia -esp -espada -espadrille -espagnole -espagnolette -espalier -espantoon -esparto -espauol -espec -especialness -esperance -espial -espionage -esplanade -espousal -espouser -espresso -esprit -esquire -esrog -ess -essay -essayer -essayist -esse -essence -essentialism -essentialist -essentiality -essentialness -essonite -est -estab -establisher -establishment -establishmentarianism -estafette -estamin -estaminet -estampie -estancia -estanciero -estate -ester -esterase -esterification -esthesia -esthesiometer -esthesiometry -esthesis -esthete -esthetician -estheticism -esthetics -estimableness -estimation -estimator -estivation -estivator -estoc -estocada -estoile -estoppage -estoppel -estrade -estradiol -estragon -estrangedness -estrangement -estranger -estray -estreat -estrin -estriol -estrogen -estrone -estrus -estuary -esu -esurience -esuriency -eta -etaerio -etalon -etamine -etc -etcetera -etchant -etcher -etching -eternality -eternalness -eternisation -eternity -eternization -eth -ethal -ethanamide -ethane -ethanediol -ethanethiol -ethanol -ethchlorvynol -ethene -ether -etherealisation -ethereality -etherealization -etherealness -etherialisation -etherialization -etherification -etherization -etherizer -ethic -ethicality -ethicalness -ethician -ethics -ethinamate -ethine -ethnarch -ethnarchy -ethnicity -ethnobotany -ethnocentricity -ethnocentrism -ethnocracy -ethnog -ethnogenist -ethnogeny -ethnographer -ethnography -ethnohistorian -ethnohistory -ethnol -ethnolinguist -ethnolinguistics -ethnologist -ethnology -ethnomusicologist -ethnomusicology -ethnos -ethologist -ethology -ethonone -ethos -ethoxide -ethoxyethane -ethrog -ethyl -ethylation -ethylbenzene -ethyldichloroarsine -ethylenation -ethylene -ethyne -ethynylation -etiologist -etiology -etiquette -etna -etrier -etude -etui -etym -etymologist -etymology -etymon -eu -eubacterium -eucaine -eucalyptol -eucalyptus -eucharis -euchlorine -euchologion -euchology -euchre -euchromatin -euchromosome -euclase -eucrite -eucryptite -eudaemonist -eudemon -eudemonia -eudemonics -eudemonism -eudemonist -eudiometer -eudiometry -euflavine -eugenicist -eugenics -eugenol -euglena -euhemerism -euhemerist -eulachon -eulogia -eulogisation -eulogiser -eulogist -eulogium -eulogization -eulogizer -eulogy -eumelanin -eunomy -euonymus -eupatorium -eupatrid -eupepsia -euphausiid -euphemisation -euphemiser -euphemism -euphemist -euphemization -euphemizer -euphonia -euphonicalness -euphoniousness -euphonium -euphony -euphorbia -euphoria -euphrasy -euphroe -euphuism -euphuist -eupnea -eupnoea -eurhythmics -eurhythmy -euripus -eurithermophile -europium -euryphage -eurypterid -eurythmics -eurythmy -eurytopicity -eusol -eustacy -eutaxy -euthanasia -euthenics -euthenist -eutocia -eutrophication -eutrophy -euxenite -evacuation -evacuator -evacuee -evader -evagination -evaluation -evaluator -evanescence -evangel -evangeliary -evangelicalism -evangelicality -evangelicalness -evangelisation -evangeliser -evangelism -evangelist -evangelistary -evangelization -evangelizer -evaporability -evaporation -evaporator -evaporimeter -evaporite -evapotranspiration -evasion -evasiveness -eve -evection -evener -evenfall -evening -evenness -evensong -event -eventfulness -eventide -eventration -eventuality -eventuation -everglade -everlastingness -eversion -evertor -everydayness -evictee -eviction -evictor -evidence -evidentness -evildoer -evildoing -evilness -evisceration -eviscerator -evocation -evocativeness -evocator -evoker -evolute -evolution -evolutionism -evolutionist -evolvement -evolver -evonymus -evulsion -evzone -ewe -ewer -ewery -exacerbation -exacter -exactingness -exaction -exactitude -exactness -exactor -exaggeration -exaggerator -exaltation -exaltedness -exalter -exam -examen -examinant -examination -examinee -examiner -example -exanimation -exanthem -exanthema -exarch -exarchate -exasperater -exasperation -exc -excardination -excavation -excavator -exceeder -excellence -excellency -exception -exceptionableness -exceptionality -exceptionalness -excerpt -excerpter -excerption -excerptor -excess -excessiveness -exch -exchangeability -exchangee -exchanger -exchequer -excipient -exciple -excipulum -excircle -excise -exciseman -excision -excitability -excitableness -excitation -excitedness -excitement -exciter -exciton -excitor -excl -exclaimer -exclam -exclamation -exclaustration -exclave -exclosure -excludability -excluder -exclusion -exclusioner -exclusionism -exclusiveness -exclusivism -exclusivist -exclusivity -excogitation -excogitator -excommunication -excommunicator -excoriation -excrement -excrescence -excrescency -excreter -excretion -excruciation -excubitorium -excud -excudit -exculpation -excursion -excursionist -excursiveness -excursus -excurvature -excusableness -excusal -excuser -excussio -excussion -exeat -exec -execrableness -execration -execrator -executant -executer -execution -executioner -executive -executiveness -executor -executorship -executrix -exedra -exegesis -exegete -exegetics -exemplar -exemplariness -exemplarism -exemplarity -exemplification -exemplifier -exemplum -exemption -exenteration -exequatur -exequy -exerciser -exercitation -exergue -exertion -exfoliation -exhalation -exhauster -exhaustibility -exhaustion -exhaustiveness -exhaustlessness -exhedra -exhibitant -exhibiter -exhibition -exhibitioner -exhibitionism -exhibitionist -exhibitor -exhilaration -exhilarator -exhortation -exhorter -exhumation -exhumer -exigency -exiguity -exiguousness -exilarch -exile -exiler -exine -existence -existentialism -exister -exit -exitance -exobiologist -exobiology -exocarp -exoderm -exodermis -exodontics -exodontist -exodos -exodus -exoenzyme -exogamy -exogen -exogenism -exon -exonarthex -exoneration -exonerator -exonym -exopeptidase -exoperidium -exophasia -exophthalmos -exoplasm -exopodite -exorability -exorbitance -exorcisement -exorciser -exorcism -exorcist -exorcizer -exordium -exoskeleton -exosmosis -exosphere -exospore -exostosis -exotericism -exothermicity -exoticism -exoticist -exoticness -exotoxin -exotropia -exp -expandability -expandedness -expander -expandibility -expanse -expansibility -expansion -expansionism -expansionist -expansivity -expatiation -expatiator -expatriation -expectancy -expectation -expecter -expectoration -expectorator -expediency -expeditation -expediter -expedition -expeditiousness -expeditor -expellee -expeller -expendability -expender -expenditure -expense -expensiveness -experience -experiencer -experientialism -experientialist -experiment -experimentalism -experimentalist -experimentation -experimentator -experimenter -experimentor -expert -expertise -expertism -expertness -expiation -expiator -expiration -expiree -expirer -expiry -expiscation -explainer -explanation -explanator -explantation -explement -expletive -explicandum -explicans -explication -explicator -explicitness -explodent -exploder -exploit -exploitation -exploiter -exploration -explorer -explosibility -explosimeter -explosion -explosiveness -expo -exponent -export -exportation -exporter -expos -exposa -exposal -exposedness -exposer -exposition -expositor -expostulation -expostulator -exposure -expounder -expressage -expresser -expression -expressionism -expressiveness -expressivity -expressman -expresso -expressor -expressway -expropriation -expropriator -expulsion -expunction -expunger -expurgation -expurgator -exquisiteness -exr -exsanguination -exsanguinity -exsec -exsecant -exsection -exsertion -exsiccation -exsiccator -exsolution -exstrophy -ext -extemporaneity -extemporaneousness -extemporariness -extemporisation -extemporiser -extemporization -extemporizer -extendability -extendedness -extender -extendibility -extensibility -extensibleness -extensimeter -extension -extensionalism -extensionality -extensity -extensiveness -extensivity -extensometer -extensor -extent -extenuation -extenuator -exterior -exteriorisation -exteriorization -extermination -exterminator -extern -externalisation -externalism -externalist -externality -externalization -exteroceptor -exterritoriality -extinction -extine -extinguishant -extinguisher -extinguishment -extirpation -extirpator -extoller -extollment -extolment -extorter -extortion -extortioner -extrabold -extractability -extractant -extractibility -extraction -extractor -extradition -extrados -extraneousness -extraordinariness -extrapolation -extrapolator -extraposition -extrasystole -extraterritoriality -extravagance -extravagancy -extravagantness -extravaganza -extravasation -extraversion -extravert -extremeness -extremism -extremist -extremity -extremum -extrication -extrospection -extroversion -extrovert -extruder -extrusion -exuberance -exudate -exudation -exultation -exurb -exurbanite -exurbia -exuviation -eyalet -eyas -eye -eyeball -eyebar -eyebath -eyebeam -eyeblack -eyebolt -eyebright -eyebrow -eyecup -eyedropper -eyeful -eyeglass -eyeground -eyehole -eyehook -eyelash -eyelet -eyeleteer -eyelid -eyeliner -eyen -eyeopener -eyepiece -eyepit -eyer -eyeservant -eyeservice -eyeshade -eyeshot -eyesight -eyesore -eyespot -eyestalk -eyestone -eyestrain -eyetooth -eyewash -eyewater -eyewink -eyewinker -eyewitness -eyne -eyot -eyra -eyre -eyrie -eyrir -f -fa -fable -fabler -fabliau -fabric -fabricant -fabrication -fabricator -fabulist -fabulousness -faburden -fac -facade -face -facebar -faceplate -facer -facet -faceteness -facetiousness -facia -faciend -facies -facileness -facilitation -facilitator -facility -facing -facsim -facsimile -fact -factice -faction -factionalism -factionalist -factiousness -factitiousness -factor -factorability -factorage -factorial -factoring -factorization -factorship -factory -factotum -factualism -factualist -factuality -factualness -facture -facula -faculty -fad -faddishness -faddism -faddist -fadedness -fader -fading -fado -faena -faence -faerie -faery -fahlband -faiade -failing -failingness -faille -failure -fainaiguer -fainant -faineance -faineancy -fainter -faintheart -faintheartedness -faintishness -faintness -fairbanks -fairground -fairing -fairlead -fairness -fairwater -fairway -fairy -fairyfloss -fairyhood -fairyism -fairyland -faith -faithfulness -faithlessness -faitour -fakeer -fakement -faker -fakery -fakir -falbala -falchion -falcon -falconer -falconet -falconry -falda -falderal -faldstool -fallaciousness -fallacy -fallal -fallalery -faller -fallfish -fallibilism -fallibilist -fallibility -fallibleness -fallout -fallowness -falsehood -falseness -falsetto -falsework -falsie -falsifiability -falsification -falsifier -falsity -faltboat -falterer -falx -fam -famacide -famatinite -fame -familiarisation -familiariser -familiarity -familiarization -familiarizer -familiarness -familism -familist -famille -family -famine -famousness -famulus -fan -fana -fanakalo -fanatic -fanaticalness -fanaticism -fancier -fancifulness -fanciness -fancywork -fandangle -fandango -fane -fanega -fanegada -fanfare -fanfaron -fanfaronade -fanfish -fanfold -fang -fangle -fango -fanion -fanjet -fanleaf -fanlight -fanner -fanny -fanon -fantail -fantasia -fantasist -fantasm -fantasmagoria -fantast -fantasticality -fantasticalness -fantasy -fantigue -fantod -fantom -fanweed -fanwort -faoence -faqir -farad -faraday -faradisation -faradiser -faradism -faradization -faradizer -faradmeter -farandole -farawayness -farce -farcemeat -farcetta -farceur -farceuse -farcicality -farcicalness -farcy -fard -fardel -fare -farer -farewell -farfel -farfetchedness -farina -farkleberry -farl -farm -farmer -farmerette -farmery -farmhouse -farming -farmland -farmstead -farmyard -farnesol -farness -faro -farrago -farrier -farriery -farrow -farseeingness -farseer -farsightedness -fart -farthing -farthingale -fartlek -fascia -fasciation -fascicle -fasciculation -fascicule -fasciculus -fascination -fascinator -fascine -fascioliasis -fascism -fascist -fash -fashion -fashionability -fashionableness -fashioner -fashionmonger -fastback -fastener -fastening -fastidiousness -fastigium -fastness -fat -fatalism -fatalist -fatality -fatalness -fatback -fate -fatefulness -fath -fathead -father -fatherhood -fatherland -fatherliness -fathogram -fathom -fathomer -fathomlessness -fatigability -fatigableness -fatigation -fatigue -fatling -fatness -fats -fatso -fattener -fattest -fattiness -fattishness -fatuitousness -fatuity -fatuousness -fatwa -faubourg -fauces -faucet -fauchard -fauld -fault -faultfinder -faultfinding -faultiness -faultlessness -faun -fauna -fauteuil -fauxbourdon -favella -favellidium -faveolus -favism -favor -favorableness -favoredness -favorer -favorite -favoritism -favosite -favour -favourableness -favouredness -favourer -favouritism -favus -fawn -fawner -fawningness -fay -fayalite -fazenda -fb -fc -fcp -fcs -fe -fealty -fear -fearfulness -fearlessness -fearnought -fearsomeness -feasance -feasibility -feasibleness -feast -feaster -feat -feather -featherback -featherbedding -featherbone -featherbrain -feathercut -featheredge -featherfoil -featherhead -featheriness -feathering -featherlessness -featherstitch -featherweight -featliness -feature -featurette -feazing -febricity -febricula -febrifuge -febrility -febris -fec -fecket -fecklessness -fecula -feculence -fecundation -fecundator -fecundity -fedayee -feddan -fedelini -federacy -federalese -federalisation -federalism -federalist -federalization -federalness -federation -fedora -fee -feebleness -feedback -feedbag -feedbox -feeder -feeding -feedlot -feedstuff -feedwater -feeler -feeling -feelingness -feet -feignedness -feigner -feint -feist -felafel -feldsher -feldspar -felicitation -felicitator -felicitousness -felicity -felid -felineness -felinity -fellah -feller -fellmonger -fellmongering -fellmongery -fellness -felloe -fellow -fellowship -felon -feloniousness -felonry -felony -felsite -felspar -felting -felucca -felwort -fem -femaleness -feme -femerell -femicide -feminacy -femineity -feminie -feminineness -femininity -feminisation -feminism -feminist -feminization -femme -femur -fen -fenagler -fence -fencepost -fencer -fencing -fender -feneration -fenestella -fenestra -fenestration -fenland -fenman -fennec -fennel -fennelflower -fenugreek -feod -feodality -feodary -feoff -feoffee -feoffeeship -feoffer -feoffment -feoffor -feracity -ferbam -fere -feretory -fergusonite -feria -ferity -fermata -ferment -fermentability -fermentation -fermentativeness -fermi -fermion -fermium -fern -fernbrake -fernery -fernseed -ferociousness -ferocity -ferrate -ferret -ferreter -ferriage -ferricyanide -ferrihemoglobin -ferrimagnetism -ferrite -ferritin -ferroalloy -ferroaluminum -ferrocalcite -ferrocene -ferrocerium -ferrochromium -ferroconcrete -ferrocyanide -ferroelectricity -ferromagnet -ferromagnetism -ferromanganese -ferrometer -ferromolybdenum -ferronickel -ferrosilicon -ferrotitanium -ferrotungsten -ferrotype -ferrovanadium -ferrozirconium -ferrule -ferry -ferryboat -ferryman -fertileness -fertilisability -fertilisation -fertiliser -fertility -fertilizability -fertilization -fertilizer -fertilizin -ferula -ferule -ferv -fervency -ferventness -fervidity -fervidness -fervor -fervour -fescue -fess -fesse -festa -festination -festival -festiveness -festivity -festoon -festoonery -festschrift -feta -fetation -fetcher -fete -feterita -fetial -fetich -fetichism -fetichist -feticide -fetidity -fetidness -fetish -fetishism -fetishist -fetlock -fetor -fetter -fetterbush -fetterer -fetterlock -fettling -fettucine -fettucini -fetus -feu -feuage -feuar -feud -feudalisation -feudalism -feudalist -feudality -feudalization -feudatory -feudist -feuilleton -feuilletonism -feuilletonist -fever -feverfew -feverishness -feverroot -feverweed -feverwort -fewness -fewterer -fez -ff -fg -fgn -fi -fiacre -fianca -fiancae -fiance -fianchetto -fiar -fiasco -fiat -fib -fibber -fiber -fiberboard -fiberglass -fiberscope -fibre -fibreboard -fibrefill -fibreglass -fibril -fibrilla -fibrillation -fibrin -fibrinogen -fibrinokinase -fibrinolysin -fibrinolysis -fibro -fibroblast -fibrocartilage -fibrocement -fibroin -fibrolite -fibroma -fibroplasia -fibrosis -fibrositis -fibrousness -fibster -fibula -fice -fiche -fichu -fickleness -fico -fict -fiction -fictionalization -fictioneer -fictioneering -fictionisation -fictionist -fictionization -fictitiousness -fid -fiddle -fiddleback -fiddlehead -fiddleneck -fiddler -fiddlerfish -fiddlestick -fiddlewood -fideicommissary -fideicommissum -fideism -fidelity -fidley -fiduciary -fief -field -fielder -fieldfare -fieldmouse -fieldpiece -fieldsman -fieldstone -fieldwork -fieldworker -fiend -fiendishness -fierceness -fieriness -fiesta -fife -fifer -fifteen -fifty -fig -figeater -fighter -figment -figurant -figuration -figurativeness -figure -figurehead -figurer -figurine -figwort -fike -fikh -fil -fila -filagree -filament -filaria -filariasis -filasse -filature -filbert -filcher -file -filecard -filefish -filename -filer -filet -filialness -filiation -filibeg -filibuster -filibusterer -filibusterism -filicide -filigrain -filigree -filioque -filister -fillagree -fille -filler -fillet -filleting -filling -fillingness -fillip -fillipeen -fillister -filly -film -filmdom -filmgoer -filminess -filming -filmland -filmmaking -filmography -filmsetting -filmstrip -filoplume -filoselle -fils -filt -filter -filterability -filterableness -filterer -filth -filthiness -filtrability -filtrate -filtration -filum -fimble -fimbria -fimbriation -fin -finableness -finagler -finale -finalis -finalism -finalist -finality -finalization -finance -financier -finback -finca -finch -finder -finding -fine -fineableness -fineness -finery -finesse -finestra -finfoot -finger -fingerboard -fingerbreadth -fingerer -fingerflower -fingerling -fingermark -fingernail -fingerprint -fingerstall -fingertip -finial -finicality -finicalness -fining -finis -finisher -finiteness -finitude -fink -finlet -finmark -finner -finnmark -fino -finochio -finspot -fiord -fiorin -fioritura -fipple -fiqh -fir -fire -firearm -fireback -fireball -firebase -firebird -fireboard -fireboat -firebomb -firebox -firebrand -firebrat -firebreak -firebrick -firebug -firecracker -firecrest -firedamp -firedog -firedrake -fireflaught -firefly -fireguard -firehouse -firelight -firelock -fireman -firepan -fireplace -fireplug -firepower -fireproofing -firer -fireside -firestone -firestorm -firethorn -firetrap -firewarden -firewater -fireweed -firewood -firework -fireworm -firing -firkin -firmament -firman -firmness -firmware -firn -firnification -firstling -firth -fisc -fish -fishbolt -fishbowl -fisher -fisherman -fishery -fisheye -fishfinger -fishgig -fishhook -fishiness -fishing -fishline -fishmonger -fishnet -fishplate -fishpond -fishpound -fishtail -fishwife -fishworm -fishyback -fishybacking -fission -fissionability -fissiparousness -fissure -fist -fistfight -fistful -fistiana -fisticuff -fisticuffer -fistmele -fistnote -fistula -fistulization -fit -fitch -fitchew -fitfulness -fitment -fitness -fittedness -fitter -fittingness -five -fivepins -fiver -fives -fixation -fixedness -fixer -fixing -fixity -fixture -fixure -fizgig -fizzer -fizzwater -fjeld -fjord -fl -flab -flabbiness -flabellum -flaccidity -flaccidness -flache -flachette -flack -flacon -flag -flagella -flagellant -flagellantism -flagellation -flagellator -flagellum -flageolet -flagfish -flagger -flagging -flagitiousness -flagman -flagon -flagpole -flagrance -flagrancy -flagrantness -flagship -flagstaff -flagstone -flail -flair -flak -flake -flakeboard -flakelet -flaker -flakiness -flam -flambeau -flamboyance -flamboyancy -flame -flamefish -flameholder -flamen -flamenco -flameout -flamer -flamethrower -flamingo -flammability -flan -flanch -flanchard -flange -flanger -flangeway -flank -flanker -flannel -flannelboard -flannelet -flannelette -flannelleaf -flannelmouth -flanning -flapdoodle -flapdragon -flaperon -flapjack -flapper -flapperdom -flapperism -flaps -flareback -flash -flashback -flashboard -flashbulb -flashcube -flasher -flashiness -flashing -flashlight -flashover -flashtube -flask -flasket -flatboat -flatbread -flatcar -flatette -flatfish -flatfoot -flatfootedness -flathead -flatiron -flatlet -flatmate -flatness -flattener -flatterer -flattery -flattest -flattie -flatting -flattop -flatulence -flatulency -flatus -flatware -flatwoods -flatwork -flatworm -flaubert -flaunch -flaunter -flauntiness -flautist -flav -flavin -flavine -flavobacterium -flavone -flavonol -flavoprotein -flavopurpurin -flavor -flavoring -flavour -flavouring -flaw -flawedness -flawlessness -flax -flaxseed -flayer -flchette -fld -fldxt -flea -fleabag -fleabane -fleabite -fleam -fleapit -fleawort -fleck -flection -fledgling -fleece -fleecer -fleeciness -fleet -fleetingly -fleetingness -fleetness -flenerie -fleneur -flenser -flesh -flesher -fleshhook -fleshiness -fleshliness -fleshpot -fletcher -fleurette -fleuron -flews -flex -flexibility -flexibleness -flexility -flexion -flexitime -flexo -flexography -flexor -flexuoseness -flexuosity -flexuousness -flexure -fleyedness -flibbertigibbet -flicflac -flickertail -flier -flight -flightiness -flimflam -flimflammer -flimsiness -flincher -flinger -flint -flinthead -flintiness -flintlock -flippancy -flippantness -flipper -flirtation -flirtatiousness -flitch -flitchplate -fliting -flittermouse -flivver -flneur -floatability -floatage -floatation -floater -floatman -floatplane -floatstone -floc -floccillation -flocculant -flocculation -flocculator -floccule -flocculence -flocculency -flocculus -floccus -flock -flockbed -floe -floeberg -flogger -flogging -flong -flood -floodgate -floodlight -floodwater -floor -floorage -floorboard -floorcloth -floorer -flooring -floorman -floorwalker -floozy -flophouse -flopover -flopper -floppiness -flor -flora -flores -florescence -floret -floribunda -florican -floriculture -floriculturist -floridity -floridness -floriferousness -florigen -florilegium -florin -florist -floristics -floss -flosser -flotage -flotation -flotilla -flotsam -flouncing -flour -flourisher -flouter -flowage -flower -flowerage -flowerbed -flowerer -floweret -floweriness -flowerlessness -flowerlet -flowerpecker -flowerpot -flowingness -flrie -flu -flubdub -fluctuation -flue -fluency -fluentness -fluff -fluffer -fluffiness -flugelhorn -flugelman -fluid -fluidextract -fluidics -fluidisation -fluidiser -fluidity -fluidization -fluidizer -fluidness -fluke -flukiness -flume -flummery -flunkey -flunkeyism -flunky -flunkyism -fluoborate -fluophosphate -fluor -fluorene -fluorescein -fluorescence -fluoridation -fluoride -fluoridisation -fluoridization -fluorimeter -fluorination -fluorine -fluorite -fluorocarbon -fluorometer -fluorometry -fluorophosphate -fluoroscope -fluoroscopy -fluorosis -fluosilicate -flurry -flusher -flushness -flusteration -flustration -flute -fluter -fluting -flutist -flutterboard -flutterer -flux -fluxgraph -fluxion -fluxmeter -fluyt -flyability -flyback -flybelt -flyboat -flybook -flyboy -flyby -flycatcher -flyer -flyleaf -flyman -flyoff -flyover -flypaper -flyspeck -flytrap -flyway -flyweight -flywheel -fm -fn -fo -foal -foam -foamflower -foaminess -fob -focalisation -focalization -foci -focometer -focus -focuser -fodder -foe -foehn -foeman -foetation -foeticide -foetor -foetus -fog -fogbow -fogdog -fogey -foggage -fogginess -foghorn -fogram -fogy -fogyism -foible -foilsman -foin -foison -fol -folacin -foldboat -folder -folderol -foldout -folia -foliaceousness -foliage -foliation -foliature -folie -folio -foliole -foliot -folium -folk -folkishness -folklore -folklorist -folkmoot -folkright -folksay -folksiness -foll -follicle -folliculin -folliculitis -follis -follower -folly -fomentation -fomenter -fomes -fond -fondant -fondler -fondness -fondue -font -fontanel -fontanelle -fontange -food -foodlessness -foodstuff -foofaraw -fool -foolery -foolfish -foolhardiness -foolishness -foolscap -foot -footage -football -footboard -footboy -footbridge -footcloth -footer -footfall -footgear -foothill -foothold -footie -footing -footlight -footlocker -footmaker -footman -footmark -footnote -footpace -footpad -footpath -footplate -footprint -footrest -footrope -footscraper -footsie -footsoreness -footstalk -footstall -footstep -footstock -footstone -footstool -footwall -footway -footwear -footwork -footy -fop -foppery -foppishness -forage -forager -foramen -foramination -foraminifer -foray -forayer -forb -forbearance -forbearer -forbiddance -forbiddenness -forbidder -forbiddingness -force -forcedness -forcefulness -forcemeat -forceps -forcer -forcibility -forcibleness -forcipressure -ford -forearm -forebear -foreboder -foreboding -forebodingness -forebody -forebrain -forecaddie -forecaster -forecastle -forechoir -foreclosure -foreconscious -forecourse -forecourt -foredeck -forefather -forefinger -forefoot -forefront -foregift -foreglimpse -foregoer -foregoneness -foreground -foregut -forehandedness -forehead -forehearth -forehock -foreigner -foreignism -foreignness -forejudger -foreknower -foreknowledge -forel -forelady -foreland -foreleg -forelimb -forelock -foreman -foremanship -foremast -forename -forenoon -forensicality -forensics -foreordainment -foreordination -forepart -forepaw -forepeak -foreplay -forepleasure -forepole -forequarter -forerake -forerunner -foresaddle -foresail -foreseeability -foreseer -foreshadower -foreshank -foresheet -foreshock -foreshore -foreside -foresight -foresightedness -foreskin -foresleeve -forest -forestaff -forestage -forestaller -forestallment -forestalment -forestation -forestay -forestaysail -forester -forestick -forestry -foretaste -foreteller -forethought -forethoughtfulness -foretime -foretoken -foretooth -foretop -foretriangle -forewarner -forewind -forewing -forewoman -foreword -foreyard -forfeit -forfeiter -forfeiture -forge -forger -forgery -forgetfulness -forgetter -forgettery -forging -forgiveness -forgiver -forgivingness -forgoer -forint -forjudgment -fork -forkedness -forkiness -forklift -forlana -forlornness -form -formability -formaldehyde -formalin -formalisation -formaliser -formalism -formalist -formality -formalization -formalizer -formalness -formant -format -formate -formation -formativeness -formboard -forme -formeret -formicarium -formicary -formication -formidability -formidableness -formlessness -formnail -formol -formula -formularisation -formulariser -formularization -formularizer -formulary -formulation -formulator -formulisation -formuliser -formulism -formulist -formulization -formulizer -formwork -formyl -formylation -fornent -fornication -fornicator -fornicatrix -fornix -forrel -forsakenness -forsaker -forsterite -forswearer -forswornness -forsythia -fort -fortalice -forte -fortepiano -forthcomingness -forthrightness -fortification -fortifier -fortitude -fortnight -fortress -fortuitism -fortuitist -fortuitousness -fortuity -fortunateness -fortune -fortuneteller -fortunetelling -forty -forum -forwarder -forwarding -forwardness -fossa -fossarian -fosse -fossette -fossicker -fossil -fossilisation -fossilization -fossor -fossula -fosterage -fosterer -fosterling -fostress -fouett -fouetta -foulard -foulbrood -foulmart -foulness -fouls -foumart -foundation -founder -foundling -foundry -fount -fountain -fountainhead -four -fourbagger -fourchette -fourflusher -fourgon -fourpence -fourposter -fourrag -fourragare -foursome -foursquareness -fourteen -fourteener -fouter -fovea -foveola -foveole -fowl -fowler -fowling -fox -foxberry -foxfire -foxglove -foxhole -foxhound -foxiness -foxing -foxtail -foxtrot -foy -foyboat -foyer -foziness -fp -fpm -fps -fpsps -fr -fracas -fractable -fraction -fractionation -fractionator -fractionisation -fractionization -fractiousness -fractocumulus -fractostratus -fracture -fraenulum -fraenum -fragging -fragileness -fragility -fragment -fragmentariness -fragmentation -fragmentisation -fragmentization -fragrance -fragrancy -fragrantness -frailero -frailness -frailty -fraise -framableness -frambesia -framboesia -framboise -frame -frameableness -framer -framework -framing -franc -franchise -franchisement -franchiser -francium -francolin -francophone -franger -frangibility -frangibleness -frangipane -frangipani -frankalmoign -franker -frankforter -frankfurter -frankincense -franklin -franklinite -frankness -frankpledge -franticness -frapp -frappa -frare -frass -frat -fratcher -fratching -frater -fraternalism -fraternisation -fraterniser -fraternity -fraternization -fraternizer -fratricide -fratry -fraud -fraudulency -fraxinella -fray -frazil -freak -freakiness -freakishness -freckle -freebie -freeboard -freebooter -freebooty -freedman -freedom -freedwoman -freehold -freeholder -freelance -freeloader -freeloading -freeman -freemartin -freemason -freemasonry -freeness -freesheet -freesia -freestone -freestyle -freethinker -freetrader -freeway -freewheel -freewheeler -freezer -freight -freightage -freighter -freightliner -fremdness -fremitus -frenulum -frenum -frenzy -freq -frequency -frequentation -frequenter -frequentness -fresco -frescoer -freshener -fresher -freshet -freshman -freshmanship -freshness -freshwater -fresnel -fresser -fretfulness -fretwork -friability -friableness -friar -friarbird -friary -fribbler -fricandeau -fricando -fricassee -frication -fricative -friction -fridge -friedcake -friend -friendlessness -friendliness -friendship -frier -fries -frieze -friezing -frigate -frigger -fright -frightener -frightfulness -frigidarium -frigidity -frigidness -frigidoreceptor -frijol -frill -friller -frilling -fringe -fringehead -frippery -frippet -fris -frisa -frisette -friseur -frisker -frisket -friskiness -frisson -frit -frith -frithstool -fritillaria -fritillary -fritterer -fritz -frivoler -frivolity -frivoller -frivolousness -frizer -frizette -frizzer -frizziness -frizzler -frock -frocking -froe -frog -frogbit -frogeye -frogfish -frogging -froghopper -frogman -frogmarch -frogmouth -frogspawn -frolic -frolicker -frolicsomeness -fromage -fromenty -frond -frondescence -frons -front -frontage -frontality -frontier -frontiersman -frontis -frontispiece -frontlash -frontlessness -frontlet -frontogenesis -frontolysis -fronton -frontrunner -frontstall -frosh -frost -frostbite -frostbiter -frostbiting -frostfish -frostflower -frostiness -frosting -frostwork -froth -frother -frothiness -frottage -frotteur -frottola -froufrou -frounce -frow -frowardness -frowner -frowsiness -frowst -frowstiness -frowziness -frozenness -frs -frt -fructification -fructifier -fructosan -fructose -fructoside -fructuousness -frug -frugality -frugalness -fruit -fruitage -fruitarian -fruitcake -fruiter -fruiterer -fruitery -fruitfulness -fruitiness -fruition -fruitlessness -fruitwood -frump -frumpiness -frumpishness -frustrater -frustration -frustule -frustulum -frustum -frutescence -fryer -fs -ft -fth -fuage -fuchsia -fuchsin -fuchsite -fucus -fudge -fuel -fueler -fueller -fug -fugaciousness -fugacity -fugard -fugate -fughetta -fugio -fugitive -fugitiveness -fugitivity -fugleman -fugu -fugue -fuguist -fuhn -fulcrum -fulfiller -fulfillment -fulgentness -fulgor -fulguration -fulgurite -fulham -fuliginousness -fullam -fullback -fuller -fullface -fullness -fullom -fulmar -fulmination -fulminator -fulness -fulsomeness -fumage -fumarole -fumatorium -fumbler -fumblingness -fumer -fumet -fumeuse -fumigant -fumigation -fumigator -fumitory -fun -funambulism -funambulist -function -functionalism -functionalist -functionary -functor -fund -fundament -fundamentalism -fundamentalist -fundamentality -fundamentalness -fundi -fundus -funeral -funfair -funfest -fungi -fungibility -fungible -fungicide -fungistat -fungitoxicity -fungo -fungosity -fungus -funicle -funicular -funiculus -funk -funker -funkia -funned -funnel -funniness -funning -funnyman -funster -fur -furaldehyde -furan -furbelow -furbisher -furcation -furcula -furculum -furfur -furfural -furfuraldehyde -furfuran -furfurol -furiant -furiousness -furlana -furler -furlong -furlough -furmenty -furmint -furnace -furnisher -furnishing -furnit -furniture -furor -furore -furphy -furrier -furriery -furriness -furring -furrow -furrower -furtherance -furtherer -furtiveness -furuncle -furunculosis -fury -furze -fusain -fusarole -fuse -fusee -fuselage -fusetron -fusibility -fusibleness -fusil -fusilier -fusillade -fusion -fusionism -fusionist -fusobacterium -fuss -fussbudget -fusser -fussiness -fusspot -fustanella -fustet -fustian -fustic -fustigation -fustigator -fustinella -fustiness -fusula -fusuma -fut -futhark -futileness -futilitarianism -futility -futtock -futurama -future -futurism -futurity -futurology -fuze -fuzee -fuzz -fuzzball -fuzziness -fv -fw -fwd -fyke -fylfot -fyrd -fytte -g -ga -gabardine -gabbard -gabber -gabbler -gabbro -gabelle -gaberdine -gaberlunzie -gabfest -gabion -gabionade -gable -gablet -gaboon -gaby -gadabout -gadder -gaddi -gadfly -gadget -gadgeteer -gadgetry -gadid -gadling -gadolinite -gadolinium -gadroon -gadroonage -gadrooning -gadwall -gaff -gaffe -gaffer -gaffsail -gage -gager -gagger -gagman -gagroot -gagster -gahnite -gaiety -gaillard -gaillardia -gaine -gainer -gainfulness -gainlessness -gainliness -gainsayer -gait -gaiter -gal -gala -galactan -galactin -galactite -galactometer -galactometry -galactophore -galactopoiesis -galactosan -galactoscope -galactose -galago -galah -galangal -galantine -galatea -galatine -galax -galaxy -galbanum -gale -galea -galeas -galeass -galeeny -galena -galenical -galenite -galet -galilee -galimatias -galingale -galiot -galipot -gall -gallantness -gallantry -gallate -gallbladder -galleass -galleon -gallery -galleryite -gallet -galleting -galley -gallfly -galliard -galliardise -galliass -gallimaufry -gallinacean -gallingness -gallinipper -gallinule -galliot -gallipot -gallium -gallivanter -galliwasp -gallnut -galloglass -gallon -gallonage -galloon -galloot -gallopade -galloper -gallowglass -gallows -gallstone -galoot -galop -galosh -galoubet -gals -galvanisation -galvaniser -galvanism -galvanization -galvanizer -galvanocautery -galvanometer -galvanometry -galvanoplastics -galvanoplasty -galvanoscope -galvanotaxis -galvanothermy -galvanotropism -galvo -galvvanoscopy -galyak -gam -gamb -gamba -gambado -gambeson -gambier -gambit -gambler -gamboge -gambrel -gambusia -game -gamebag -gamecock -gamekeeper -gamekeeping -gamelan -gameness -gamer -gamesmanship -gamesomeness -gamest -gamester -gametangium -gamete -gametocyte -gametogenesis -gametophore -gametophyte -gamin -gamine -gaminess -gaming -gamma -gammadion -gammer -gammon -gammoner -gammoning -gamogenesis -gamone -gamp -gamut -gander -ganef -gang -gangbang -gangboard -ganger -gangland -ganglia -ganglion -ganglionectomy -ganglioside -gangplank -gangrel -gangrene -gangster -gangue -gangway -ganister -ganja -gannet -ganoblast -ganof -ganoin -ganosis -gansey -gantlet -gantline -gantlope -gantry -gaol -gaolbird -gaoler -gap -gaper -gapes -gapeseed -gapeworm -gaposis -gapping -gar -garage -garb -garbage -garbanzo -garbler -garbo -garboard -garboil -garcon -gardbrace -garden -gardener -gardenia -gardening -garderobe -gare -garefowl -garfish -garg -garganey -garget -gargler -gargoyle -gargoylism -garibaldi -garion -garishness -garland -garlic -garment -garnet -garnetter -garnierite -garnishee -garnisher -garnishment -garniture -garote -garoter -garotte -garotter -garpike -garret -garreteer -garrison -garrot -garrote -garroter -garrotte -garrotter -garrulity -garrulousness -garrya -garter -garth -garvey -gas -gasbag -gascon -gasconade -gasconader -gaseity -gaselier -gaseousness -gasholder -gasification -gasifier -gasket -gaskin -gaslight -gasman -gasogene -gasolier -gasoline -gasometer -gasometry -gasper -gaspereau -gaspergou -gasser -gassiness -gassing -gassit -gaster -gasteropod -gasthaus -gastightness -gastralgia -gastrectasia -gastrectomy -gastrin -gastritis -gastrocnemius -gastrodermis -gastroduodenostomy -gastroenteritis -gastroenterologist -gastroenterology -gastroenterostomy -gastrojejunostomy -gastrolith -gastrologist -gastrology -gastronome -gastronomy -gastropod -gastroschisis -gastroscope -gastroscopy -gastrostomy -gastrotomy -gastrotrich -gastrula -gastrulation -gasworks -gata -gate -gateau -gatefold -gatehouse -gatekeeper -gateman -gatepost -gater -gateway -gatherer -gathering -gator -gaucheness -gaucherie -gaucho -gaud -gaudeamus -gaudery -gaudiness -gauffer -gauffering -gauger -gaultheria -gauntlet -gauntness -gauntry -gaur -gauss -gaussmeter -gauze -gauziness -gavage -gavel -gavelkind -gavelock -gavial -gavotte -gaw -gawk -gawkiness -gawkishness -gayal -gayatri -gayety -gaylussite -gayness -gaz -gazabo -gazebo -gazehound -gazelle -gazer -gazette -gazetteer -gazogene -gazpacho -gd -gds -ge -gean -geanticline -gear -gearbox -gearing -gearshift -gearwheel -geb -geck -gecko -gedact -geegaw -geek -geepound -geese -geest -geezer -gegenion -gegenschein -gehlenite -geisha -geison -geitonogamy -gel -gelada -gelatification -gelatin -gelatination -gelatinisation -gelatiniser -gelatinity -gelatinization -gelatinizer -gelatinousness -gelation -gelder -geldesprung -gelding -gelechiid -gelendeleufer -gelendesprung -gelidity -gelidness -gelignite -gelsemium -gem -gemeinschaft -gemel -gemination -gemini -gemma -gemmation -gemmed -gemminess -gemming -gemmiparity -gemmologist -gemmulation -gemmule -gemologist -gemology -gemot -gempylid -gems -gemsbok -gemsbuck -gemstone -gen -gena -genappe -gendarme -gendarmerie -gender -gene -geneal -genealogist -genealogy -genearch -genera -generability -generableness -generalcy -generalisation -generaliser -generalissimo -generalist -generality -generalization -generalizer -generalness -generalship -generation -generativeness -generator -generatrix -genericalness -generosity -generousness -genesic -genesis -genet -genethlialogy -geneticist -genetics -geneva -geniality -genialness -geniculation -genie -genii -genip -genipap -genista -genit -genitor -geniture -genius -genizah -genoa -genocide -genome -genotype -genre -genro -gens -genseng -gent -genteelism -genteelness -gentian -gentianella -gentilesse -gentilism -gentility -gentisate -gentisin -gentlehood -gentleman -gentlemanliness -gentleness -gentlewoman -gentrification -gentry -gents -genu -genuflection -genuflector -genuineness -genus -geochemist -geochemistry -geochronologist -geochronology -geod -geode -geodesist -geodesy -geodynamicist -geodynamics -geog -geognosy -geographer -geography -geoid -geoisotherm -geol -geologise -geology -geom -geomagnetician -geomagnetism -geomagnetist -geomancer -geomancy -geomechanics -geomedicine -geometer -geometrician -geometrid -geometry -geomorphologist -geomorphology -geophagist -geophagy -geophysicist -geophysics -geophyte -geopolitician -geopolitics -geopolitist -geoponics -geopotential -georama -georgette -geoscience -geosphere -geostatics -geostrategy -geosyncline -geotaxis -geotropism -ger -gerah -geranial -geraniol -geranium -geratology -gerbil -gerefa -gerent -gerenuk -gerfalcon -geriatrician -geriatrics -geriatrist -germ -german -germander -germaneness -germanite -germanium -germen -germicide -germinance -germinancy -germination -germinator -gerodontics -gerontine -gerontocracy -gerontologist -gerontology -gerrymanderer -gersdorffite -gertrude -gerund -gerundive -gervais -gesellschaft -gesith -gesso -gest -gestalt -gestation -geste -gesticulation -gesticulator -gestion -gesture -gesturer -getatability -getatableness -getaway -getter -gettering -getup -geum -gewgaw -geyser -geyserite -ggr -ghain -gharial -gharry -ghastfulness -ghastliness -ghat -ghaut -ghazal -ghazi -ghee -gherao -gherkin -ghetto -ghibellinism -ghibli -ghillie -ghost -ghostdom -ghostfish -ghostliness -ghoul -ghoulishness -ghyll -gi -giant -giantess -giantism -giaour -gib -gibberellin -gibberish -gibbet -gibbon -gibboseness -gibbosity -gibbousness -gibbsite -giber -giblet -gibli -gibus -gid -giddiness -gidgee -gift -giftedness -giftwrapping -gig -gigacycle -gigahertz -gigameter -giganticness -gigantism -gigantomachia -gigantomachy -gigasecond -gigaton -gigawatt -giggler -giglet -gigolo -gigot -gigsman -gigue -gilbert -gilder -gildhall -gilding -gildsman -giles -gilet -gilgai -gilgul -gilguy -gill -gillie -gilling -gillion -gilly -gillyflower -gilsonite -gilthead -gimcrackery -gimel -gimlet -gimmal -gimmick -gimmickry -gimp -gin -ginep -gingal -gingeli -gingelly -ginger -gingerbread -gingerliness -gingersnap -gingham -gingili -gingiva -gingivitis -ginglymus -gink -ginkgo -ginnel -ginner -ginnery -ginseng -ginzo -gipon -gipper -gippy -gipsydom -gipsyhood -gipsyism -gipsywort -giraffe -girandole -girasol -girder -girdering -girdle -girdlecake -girdler -girl -girlfriend -girlhood -girlie -girlishness -girn -giro -giron -girosol -girouette -girth -girthline -gisant -gisarme -gist -git -gitim -gittern -giveaway -giver -gizmo -gizzard -gl -glabella -glabellum -glacialist -glaciation -glacier -glaciologist -glaciology -glacis -gladdener -gladdon -glade -gladiator -gladiola -gladiolus -gladius -gladness -gladsomeness -glaiketness -glaikitness -glair -glaire -glairiness -glaive -glamor -glamorization -glamorizer -glamorousness -glamour -glamourization -glamourizer -glamourousness -gland -glanders -glandule -glandulousness -glans -glariness -glaringness -glass -glassblowing -glassful -glasshouse -glassine -glassiness -glassmaker -glassmaking -glassman -glassware -glasswork -glassworker -glassworks -glasswort -glauberite -glaucescence -glaucodote -glaucoma -glauconite -glaucophane -glave -glazement -glazer -glazier -glaziery -glaziness -glazing -glb -gleam -gleaner -gleaning -gleba -glebe -glede -glee -gleed -gleefulness -gleek -gleeman -gleesomeness -gleet -glegness -glen -glengarry -gley -glia -gliadin -glibness -glidder -glider -gliff -glim -glime -glimmering -glimpse -glimpser -glioma -glisk -glissade -glissader -glissando -gloam -gloaming -gloater -glob -globe -globefish -globeflower -globetrotter -globetrotting -globigerina -globin -globoseness -globosity -globularity -globularness -globule -globulin -glochidium -glochis -glockenspiel -glogg -glomeration -glomerule -glomerulonephritis -glomerulus -glomus -glonoin -gloom -gloominess -glooming -glop -gloria -glorification -glorifier -gloriole -gloriousness -glory -gloss -glossa -glossarist -glossary -glossator -glossectomy -glossematics -glosseme -glosser -glossiness -glossitis -glossmeter -glossographer -glossography -glossolalia -glossolalist -glossologist -glossology -glossotomy -glost -glottalization -glottis -glottochronology -glottogony -glottologist -glottology -glove -gloveman -glover -glow -glowfly -glowworm -gloxinia -glt -glucagon -glucide -glucinum -glucocorticord -glucogenesis -gluconeogenesis -gluconokinase -glucoprotein -glucosan -glucose -glucoside -glucosulfone -glucosuria -glucuronide -glue -gluepot -gluer -glueyness -glume -glumness -glumpiness -gluon -gluside -glut -glutamate -glutamine -glutathione -glutelin -gluten -glutethimide -gluteus -glutin -glutinant -glutinosity -glutinousness -glutose -glutton -gluttonousness -gluttony -glyc -glycemia -glyceraldehyde -glyceride -glycerin -glycerinate -glycerine -glycerite -glycerol -glycerolysis -glyceryl -glycine -glycocoll -glycogen -glycogenase -glycogenesis -glycogenolysis -glycogenosis -glycogeny -glycol -glycolipid -glycolysis -glyconeogenesis -glycopeptide -glycopexis -glycoprotein -glycoside -glycosuria -glycuronide -glyoxaline -glyph -glyphograph -glyphographer -glyphography -glyptal -glyptics -glyptodont -glyptograph -glyptographer -glyptography -gm -gnamma -gnarl -gnarliness -gnat -gnatcatcher -gnateater -gnathion -gnathite -gnawer -gnawing -gneiss -gnome -gnomist -gnomologist -gnomology -gnomon -gnosis -gnotobiosis -gnotobiote -gnotobiotics -gnu -go -goa -goad -goaf -goal -goalie -goalkeeper -goalkeeping -goalmouth -goaltender -goanna -goat -goatee -goatfish -goatherd -goatishness -goatpox -goatsbeard -goatskin -goaves -gob -gobang -gobbet -gobbledegook -gobbler -goblet -goblin -gobo -gobstopper -goby -god -godchild -goddaughter -godded -goddess -goddesshood -goddessship -godding -godendag -godet -godetia -godfather -godhood -godlessness -godlikeness -godliness -godling -godmother -godown -godparent -godroon -godsend -godship -godson -godwit -goer -goethite -gofer -goffer -goffering -gogga -gogglebox -goggler -goglet -gogo -goi -going -goiter -goitre -gold -goldbeater -goldbeating -goldbrick -goldbricker -goldcrest -goldcup -goldeneye -goldenness -goldenrod -goldenseal -goldeye -goldfields -goldfinch -goldfinny -goldfish -goldilocks -goldminer -goldsmith -goldstone -goldthread -goldurn -golem -golf -golfer -goliard -goliardery -golilla -golliwog -golliwogg -gollywobbler -golosh -golp -gombeen -gombo -gombroon -gomerel -gomphosis -gomuti -gonad -gonadotrope -gonadotropin -gonangium -gondola -gondoletta -gondolier -goneness -goner -gonfalon -gonfalonier -gonfanon -gong -goniatite -gonidium -gonif -goniometer -goniometry -gonion -gonium -gonk -gonococcus -gonocyte -gonof -gonoph -gonophore -gonopodium -gonopore -gonorrhea -gonorrhoea -gonotheca -gonyaulax -gonycampsis -gonys -goo -goober -goodbye -goodheartedness -goodliness -goodman -goodness -goodwife -goodwill -goodwily -goof -goofball -goofiness -goog -googly -googol -googolplex -gook -goon -goonda -goop -goosander -goose -gooseberry -goosefish -goosefoot -goosegog -goosegrass -gooseherd -gooseneck -goosewing -gopak -gopher -gopherberry -gopherwood -goral -gorbelly -gorcock -gore -gorge -gorgeousness -gorger -gorgerin -gorget -gorgoneion -gorgonian -gorhen -gorilla -goriness -goring -gormand -gormandiser -gormandism -gormandizer -gorse -goshawk -goshenite -gosling -gosmore -gospel -gospeler -gospeller -gospodin -gosport -gossamer -gossan -gossip -gossipiness -gossipmonger -gossipred -gossipry -gossoon -gossypose -gotra -gouache -gouger -goujon -goulash -gourami -gourd -gourde -gourmand -gourmandise -gourmandism -gourmet -gout -goutiness -goutte -goutweed -gouvernante -gov -governability -governableness -governance -governess -government -governor -governorship -gowan -gowd -gowk -gown -gownsman -goy -gpad -gpcd -gpd -gph -gpm -gps -gr -grabber -grabbler -graben -grace -gracefulness -gracelessness -gracileness -gracilis -gracility -graciosity -gracioso -graciousness -grackle -grad -gradation -grade -grademark -grader -gradient -gradienter -gradin -gradualism -gradualist -gradualness -graduand -graduate -graduation -graduator -gradus -graffito -graft -graftage -grafter -grafting -grager -graham -grahamite -grain -grainedness -grainer -grainfield -graininess -graining -grains -gram -grama -gramarye -gramicidin -gramineousness -grammalogue -grammar -grammarian -grammaticality -grammaticalness -grammaticism -grammatology -gramme -gramophone -gramps -grampus -granadilla -granary -grandam -grandaunt -grandchild -granddad -granddaddy -granddaughter -grandee -grandeeship -grandeur -grandfather -grandiloquence -grandiosity -grandma -grandmamma -grandmaster -grandmother -grandmotherliness -grandnephew -grandness -grandniece -grandpa -grandpapa -grandparent -grandrelle -grandsire -grandson -grandstand -grandstander -granduncle -grange -grangerisation -grangeriser -grangerism -grangerization -grangerizer -granite -graniteware -granitite -granitization -granivore -granny -granodiorite -granolith -granophyre -grantee -granter -grantor -granularity -granulater -granulation -granulator -granule -granulite -granuloblast -granulocyte -granuloma -granulomatosis -granum -grape -grapefruit -grapeline -grapery -grapes -grapeshot -grapestone -grapevine -graph -grapheme -graphemics -graphicalness -graphicness -graphics -graphite -graphitization -graphologist -graphology -graphonomy -grapnel -grappa -grappler -grappling -graptolite -grasper -graspingness -grass -grasscutter -grasserie -grassfinch -grasshook -grasshopper -grassiness -grassland -grassplot -grassquit -grasswidowhood -gratefulness -grater -graticule -gratification -gratifier -gratin -grating -gratitude -gratuitousness -gratuity -gratulation -graupel -grav -gravamen -grave -gravedigger -gravel -graveldiver -gravelweed -graveness -graver -graverobber -graverobbing -gravestone -graveyard -gravicembalo -gravidity -gravidness -gravimeter -gravimetry -gravitater -gravitation -graviton -gravity -gravure -gravy -grayback -graybeard -grayfish -grayhound -graylag -grayling -graysby -graywacke -graywether -grazer -grazier -grazing -grease -greaseball -greasebush -greaselessness -greasepaint -greaser -greasewood -greasiness -greatcoat -greatheartedness -greatness -greave -grebe -grecale -gree -greed -greediness -green -greenage -greenback -greenboard -greenbottle -greenbrier -greenery -greenfinch -greenfish -greenfly -greengage -greengrocer -greengrocery -greenhead -greenheart -greenhorn -greenhornism -greenhouse -greening -greenkeeper -greenlet -greenling -greenness -greenockite -greenroom -greensand -greenshank -greensickness -greenskeeper -greenstone -greenstuff -greensward -greenth -greenwood -greeter -greeting -gregale -gregarine -gregariousness -gregorianist -greisen -gremial -gremlin -grenade -grenadier -grenadiership -grenadine -grewsomeness -grex -greyback -greybeard -greyhen -greyhound -greylag -greyness -greywacke -gribble -grice -grid -gridder -griddle -griddlecake -gridiron -grief -grieflessness -griege -grieshoch -grievance -griever -grievousness -griff -griffe -griffin -griffinage -griffinhood -griffinism -griffon -grift -grifter -grig -grigri -grillade -grillage -grille -griller -grillroom -grillwork -grilse -grimace -grimacer -grimalkin -grime -griminess -grimness -grindelia -grinder -grindery -grindle -grindstone -gringo -grinner -grip -griper -gripman -grippe -gripper -grippingness -gripsack -grisaille -griseofulvin -grisette -griskin -grisliness -grison -grist -grister -gristle -gristliness -gristmill -gristmiller -gristmilling -grit -grith -gritter -grittiness -grivation -grivet -grizzler -grizzling -gro -groan -groaner -groat -grocer -grocery -groceryman -grockle -grog -groggery -grogginess -grogram -grogshop -groin -groining -groma -grommet -gromwell -groom -groomer -groomsman -groove -groover -groper -grosbeak -groschen -grosgrain -grossness -grossularite -grosz -grot -grotesqueness -grotesquery -grotto -grouchiness -ground -groundage -groundbreaker -groundedness -grounder -groundkeeper -groundlessness -groundling -groundmass -groundnut -groundplot -groundsel -groundsheet -groundsill -groundsman -groundspeed -groundwave -groundway -groundwood -groundwork -group -grouper -groupie -grouping -groupoid -grouse -grouser -grout -grouter -grove -groveler -groveller -grovet -growan -grower -growler -grownup -growth -groyne -grubber -grubbiness -grubstake -grubstaker -grubworm -grudge -grudger -gruel -gruesomeness -gruffiness -gruffness -grugru -grumbler -grume -grummet -grumness -grumousness -grump -grumphie -grumpiness -grunion -grunter -grutch -gryphon -grysbok -gt -gtc -gtd -gteau -gtt -gu -guacamole -guacharo -guacin -guaco -guaguanche -guaiacol -guaiacum -guajira -guamachil -guan -guanabana -guanaco -guanase -guanay -guanidine -guanine -guano -guanosine -guar -guaracha -guarani -guarantee -guarantor -guaranty -guardedness -guardee -guarder -guardhouse -guardian -guardianship -guardrail -guardroom -guardsman -guarite -guava -guayabera -guayule -gubbins -gubernaculum -guberniya -guck -gudgeon -guemal -guenon -guerdon -guerdoner -guereza -guergal -gueridon -guerillaism -guerrilla -guerrillaism -guesser -guesstimate -guesswork -guest -guesthouse -guestimate -guestimated -guestimating -guff -guffaw -guglet -guib -guidance -guideboard -guidebook -guideline -guidepost -guider -guidon -guidwillie -guige -guild -guilder -guildhall -guildship -guildsman -guile -guilefulness -guilelessness -guillemot -guilloche -guillotine -guilt -guiltiness -guiltlessness -guimpe -guinea -guipure -guiro -guisarme -guise -guitar -guitarfish -guitarist -guitguit -gula -gulch -gulden -gulf -gulfweed -gulgul -gull -gullability -gullet -gulley -gullibility -gully -gulosity -gum -gumbo -gumboil -gumbotil -gumdrop -gumi -gumma -gumminess -gummite -gummosis -gump -gumption -gumshield -gumshoe -gumtree -gumwood -gun -guna -gunboat -guncotton -gunda -gundalow -gunfight -gunfighter -gunfire -gunflint -gunge -gunk -gunlock -gunmaker -gunmaking -gunman -gunmanship -gunmetal -gunnel -gunner -gunnership -gunnery -gunning -gunny -gunnysack -gunpaper -gunplay -gunpoint -gunpowder -gunrunner -gunrunning -guns -gunsel -gunshot -gunslinger -gunsmith -gunsmithing -gunstock -gunstocking -gunter -gunwale -gunyah -guppy -gurdwara -gurge -gurges -gurgitation -gurglet -gurjun -gurnard -guru -guruship -gusher -gushiness -gusset -gust -gustation -gustativeness -gustiness -gusto -gut -gutbucket -guthite -gutser -gutsiness -gutta -guttation -gutter -guttering -guttersnipe -guttler -gutturalisation -gutturalism -gutturality -gutturalization -gutturalness -gutty -guv -guy -guyot -guzzler -gv -gwyniad -gym -gymel -gymkhana -gymnasia -gymnasiarch -gymnasiarchy -gymnasiast -gymnasium -gymnast -gymnastics -gymnoplast -gymnosophist -gymnosophy -gymnosperm -gymnospermism -gymnospore -gymslip -gynaeceum -gynaecocracy -gynaecocrat -gynaecologist -gynaecology -gynaecomastia -gynaecomasty -gynandromorph -gynandromorphism -gynandromorphy -gynandry -gynarchy -gynecium -gynecocracy -gynecocrat -gynecol -gynecologist -gynecology -gynecomastia -gynecomasty -gynecopathy -gynephobia -gyniatrics -gynobase -gynodioecism -gynoecium -gynomonoecism -gynophore -gynostegium -gynostemium -gypsophila -gypsum -gypsydom -gypsyhead -gypsyhood -gypsyism -gyration -gyrator -gyre -gyrectomy -gyrene -gyrfalcon -gyro -gyrocompass -gyrofrequency -gyron -gyropilot -gyroplane -gyroscope -gyroscopics -gyrostabilizer -gyrostat -gyrostatics -gyrovague -gyrus -gyttja -h -haaf -haar -habanera -habbub -habenula -haberdasher -haberdashery -habergeon -habiliment -habilitation -habilitator -habit -habitability -habitableness -habitacle -habitan -habitancy -habitant -habitat -habitation -habitua -habitualness -habituation -habitude -habitue -habitus -haboob -habu -habutai -hacek -hachure -hacienda -hackamore -hackberry -hackbut -hackbuteer -hacker -hackery -hackie -hackle -hackleback -hackler -hackman -hackmatack -hackney -hackneyism -hacksaw -haddock -hade -hadj -hadji -hadron -hadrosaur -haecceity -haem -haemachrome -haemacytometer -haemagglutination -haemagglutinin -haemangioma -haemangiomatosis -haematein -haematemesis -haematin -haematinic -haematite -haematoblast -haematocele -haematocrit -haematocyst -haematocystis -haematocyte -haematogenesis -haematologist -haematology -haematolysis -haematoma -haematophyte -haematosis -haematoxylin -haematoxylon -haematozoon -haematuria -haemin -haemoblast -haemochrome -haemocoel -haemoconcentration -haemocyanin -haemocyte -haemocytoblast -haemodialysis -haemodynamics -haemoflagellate -haemoglobin -haemoglobinuria -haemolysin -haemophil -haemophile -haemophilia -haemophiliac -haemopoiesis -haemoptysis -haemorrhage -haemorrhoid -haemorrhoidectomy -haemorrhoids -haemostasis -haemostat -haemothorax -haemotoxin -haeres -haet -haffet -hafiz -hafnium -haft -hafter -hafynite -hag -hagberry -hagbut -hagdon -hagfish -haggadist -haggardness -haggis -haggishness -haggler -hagiarchy -hagiocracy -hagiographer -hagiography -hagiolater -hagiolatry -hagiologist -hagiology -hagioscope -hagmenay -hagrider -hagseed -hagueton -haick -haik -haikal -haiku -hail -hailer -hailstone -hailstorm -hair -hairball -hairbreadth -hairbrush -haircloth -haircut -haircutter -haircutting -hairdo -hairdresser -hairdressing -hairgrip -hairif -hairiness -hairlessness -hairline -hairnet -hairpiece -hairpin -hairsplitter -hairsplitting -hairspring -hairstreak -hairstyle -hairtail -hairweaving -hairworm -haji -hajj -hajji -hake -hakea -hakim -halakist -halalah -halation -halavah -halberd -halberdier -haleness -haler -half -halfback -halfbeak -halfheartedness -halfmoon -halfpace -halfpenny -halftone -halfwit -halibut -halicot -halide -halidom -halite -halitosis -halituosity -halitus -hall -hallah -hallan -halliard -halling -hallmark -hallmarker -halloo -hallowedness -hallower -hallroom -hallucination -hallucinator -hallucinogen -hallucinosis -hallux -hallway -halm -halma -halo -halobiont -halogen -halogenation -halophile -halophilism -halophyte -halothane -halotrichite -halt -halter -haltere -haltingness -halutz -halvah -halves -halyard -ham -hamadryad -hamadryas -hamal -hamantasch -hamantash -hamartia -hamaul -hambone -hambroline -hamburg -hamburger -hame -hametz -hamlet -hammal -hammer -hammercloth -hammerer -hammerhead -hammering -hammerlock -hammertoe -hammock -hamperedness -hamperer -hamster -hamstring -hamulus -hamza -hanap -hanaper -hance -hand -handbag -handball -handballer -handbarrow -handbell -handbill -handbook -handbrake -handbreadth -handcar -handcart -handclap -handclasp -handcraft -handcuffs -handedness -handfast -handfasting -handful -handgrip -handgun -handhold -handicap -handicapper -handicraft -handicraftship -handicraftsman -handicraftsmanship -handiness -handiwork -handkerchief -handle -handlebar -handler -handling -handloader -handloom -handmaid -handmaiden -handout -handrail -hands -handsaw -handsawfish -handsel -handset -handshake -handshaker -handshaking -handsomeness -handspike -handspring -handstand -handstroke -handweaving -handwheel -handwork -handwriting -handybilly -handyman -hanefiyeh -hangability -hangar -hangbird -hanger -hangfire -hanging -hangman -hangnail -hangout -hangover -hank -hankerer -hankering -hankie -hanky -hansel -hansom -hanuman -haole -haoma -haori -hap -haphazardness -haplessness -haplite -haplography -haplology -haplopia -haplosis -happening -happenstance -happiness -hapten -hapteron -haptics -haptometer -haptotropism -harakiri -haram -harambee -haranguer -harasser -harassment -harbinger -harbingership -harbor -harborage -harborer -harbour -harbourage -harbourer -hardback -hardbake -hardball -hardboard -hardcover -hardenability -hardener -hardening -hardfistedness -hardhack -hardhandedness -hardhead -hardheadedness -hardheads -hardheartedness -hardie -hardihood -hardiment -hardiness -hardness -hardpan -hardship -hardtack -hardtail -hardtop -hardwall -hardware -hardwood -hare -harebell -harebrainedness -hareem -harelip -harem -harewood -haricot -harikari -harim -harkener -harl -harle -harlequin -harlequinade -harlequinism -harlot -harlotry -harm -harmattan -harmer -harmfulness -harmlessness -harmonica -harmonicalness -harmonicon -harmonics -harmoniousness -harmonisation -harmoniser -harmonist -harmonium -harmonization -harmonizer -harmony -harmost -harmotome -harness -harnesser -haroseth -harp -harper -harping -harpist -harpoon -harpooner -harpsichord -harpsichordist -harpy -harquebus -harquebusier -harridan -harrier -harrow -harrower -harrowment -harshness -harslet -harst -hart -hartal -hartebeest -hartshorn -haruspex -haruspicy -harvest -harvester -harvestfish -harvestman -hasenpfeffer -hash -hasher -hashing -hashish -haslet -haslock -hasp -hassenpfeffer -hassle -hassock -haste -hastelessness -hastener -hastiness -hat -hatband -hatbox -hatchability -hatchback -hatcher -hatchery -hatchet -hatchetfish -hatchettite -hatching -hatchment -hatchway -hatefulness -hatemonger -hatemongering -hater -hathpace -hatlessness -hatpin -hatrack -hatred -hatter -haubergeon -hauberk -hauerite -haugh -haughtiness -haulage -haulback -hauler -haulier -haulm -haunch -haunter -hausen -hausfrau -haust -haustellum -haustorium -hautbois -hautboy -hautboyist -hauteur -hav -havelock -haven -haverel -haversack -haversine -havildar -havior -havoc -havocker -haw -hawfinch -hawk -hawkbill -hawker -hawkey -hawkie -hawking -hawknose -hawksbeak -hawkshaw -hawkweed -hawse -hawsehole -hawsepiece -hawsepipe -hawser -hawthorn -hay -haybox -haycock -hayfield -hayfork -haylift -hayloft -haymaker -haymow -hayrack -hayrick -hayride -hayseed -haystack -hayward -haywire -hazan -hazard -hazarder -hazardousness -haze -hazel -hazelhen -hazelnut -hazemeter -hazer -haziness -hazing -hazzan -hb -hcl -hd -hdkf -hdqrs -head -headache -headband -headboard -headbox -headcheese -headcloth -headdress -header -headfast -headfish -headframe -headgear -headhunt -headhunter -headhunting -heading -headland -headledge -headlessness -headlight -headline -headliner -headlock -headlongness -headman -headmaster -headmastership -headmistress -headnote -headphone -headpiece -headpin -headrace -headrail -headreach -headrest -headrig -headright -headroom -headsail -headsaw -headscarf -headset -headsheet -headship -headshrinker -headsman -headspring -headsquare -headstall -headstand -headstay -headstock -headstone -headstream -headstrongness -headwaiter -headway -headwind -headword -headwork -headworker -headworking -heaf -heald -healer -health -healthfulness -healthiness -heap -heaper -hearer -hearing -hearkener -hearsay -hearse -heart -heartache -heartbeat -heartbreak -heartbreaker -heartbrokenness -heartburn -heartburning -heartedness -heartener -hearth -hearthside -hearthstead -hearthstone -heartiness -hearting -heartland -heartlessness -hearts -heartsease -heartshake -heartsickness -heartsomeness -heartthrob -heartwood -heartworm -heat -heatedness -heater -heath -heathberry -heathbird -heathen -heathendom -heathenesse -heathenhood -heathenishness -heathenism -heathenness -heathenry -heathenship -heather -heatheriness -heathfowl -heatstroke -heaume -heaven -heavenliness -heavenwardness -heaver -heaves -heaviness -heavyweight -hebdomad -hebdomadary -hebephrenia -hebetation -hebetude -hecatomb -hecatonstylon -hechsher -heckelphone -heckler -hectare -hecticness -hectocotylus -hectogram -hectograph -hectography -hectoliter -hectometer -hectostere -heddle -hedenbergite -heder -hedge -hedgehog -hedgehopper -hedger -hedgerow -hedonics -hedonism -hedonist -heed -heeder -heedfulness -heedlessness -heel -heelball -heeler -heeling -heelpiece -heelplate -heelpost -heeltap -heer -hefter -heftiness -hegari -hegemonist -hegemony -hegumen -heifer -height -heightener -heighth -heinie -heinousness -heir -heirdom -heiress -heirloom -heirship -heist -heister -heitiki -hekhsher -hektare -hektogram -hektograph -hektoliter -hektometer -hektostere -heldentenor -heliaea -helianthus -heliast -helices -helichrysum -helicline -helicograph -helicon -helicopter -helio -heliocentricity -heliochromy -heliodor -heliogram -heliograph -heliographer -heliography -heliogravure -heliolater -heliolatry -heliometer -helioscope -helioscopy -heliostat -heliotaxis -heliotherapy -heliotrope -heliotropin -heliotropism -heliotype -heliozoan -helipad -heliport -helium -helix -hellbender -hellbox -hellbroth -hellcat -helldiver -hellebore -helleborein -helleborin -helleborine -heller -hellery -hellfire -hellgrammite -hellhole -hellhound -hellion -hellishness -hellkite -hello -helm -helmet -helminth -helminthiasis -helminthologist -helminthology -helmsman -helmsmanship -helotage -helotism -helotry -helper -helpfulness -helping -helplessness -helpmate -helpmeet -helterskelteriness -helve -helver -hem -hemachrome -hemacytometer -hemagglutination -hemanalysis -hemangioma -hematein -hematin -hematinic -hematite -hematoblast -hematocele -hematocrit -hematocyst -hematocyte -hematogenesis -hematologist -hematology -hematoma -hematophyte -hematopoiesis -hematoporphyria -hematosis -hematoxylin -hematozoon -hematuria -heme -hemelytron -hemeralopia -hemiacetal -hemialgia -hemianopsia -hemicellulose -hemichordate -hemicrania -hemicycle -hemicyclium -hemidemisemiquaver -hemielytron -hemiglobin -hemihydrate -hemikaryon -hemimetabolism -hemimetaboly -hemimorphism -hemimorphite -hemimorphy -hemin -hemiola -hemiparasite -hemiparesis -hemiplegia -hemipode -hemipteran -hemiscotosis -hemisphere -hemispheroid -hemistich -hemiterpene -hemitrope -hemitropism -hemitropy -hemizygote -hemline -hemlock -hemmer -hemoblast -hemochromatosis -hemoconcentration -hemocyte -hemocytoblast -hemocytometer -hemodia -hemodialysis -hemodialyzer -hemodynamics -hemoflagellate -hemofuscin -hemogenia -hemoglobin -hemoglobinuria -hemogram -hemolysin -hemolysis -hemophile -hemophilia -hemophiliac -hemophobia -hemoptysis -hemorrhage -hemorrhoid -hemorrhoidectomy -hemosiderin -hemosiderosis -hemostasis -hemostat -hemotherapeutics -hemotherapy -hemothorax -hemotoxin -hemotrophe -hemp -hempseed -hemstitch -hemstitcher -hen -henbane -henbit -henchman -henchmanship -hencoop -hendecagon -hendecahedron -hendecasyllable -hendiadys -henequen -henge -henhawk -henhouse -henna -hennery -hennin -henotheism -henotheist -henry -heortology -hepar -heparin -heparinization -hepatatrophia -hepatectomy -hepatica -hepaticoenterostomy -hepatisation -hepatitis -hepatization -hepatoscopy -hepatotoxin -hepcat -heptachlor -heptachord -heptad -heptagon -heptahedron -heptahydrate -heptameter -heptane -heptanone -heptarch -heptarchist -heptarchy -heptastich -heptastylos -heptasyllable -heptode -heptose -herald -heraldist -heraldry -herb -herbage -herbalist -herbarium -herbicide -herbivore -herbivority -herborist -herd -herder -herdic -herdman -herdsman -heredes -hereditability -hereditament -hereditarianism -hereditariness -hereditist -heredity -herem -heres -heresiarch -heresimach -heresiographer -heresiography -heresiologist -heresiology -heresy -heretic -hereticalness -heriot -heritability -heritage -heritance -heritor -herl -herm -herma -hermaphrodism -hermaphrodite -hermaphroditism -hermeneutics -hermes -hermit -hermitage -hermitry -hermitship -hern -hernia -hernioplasty -herniorrhaphy -herniotomy -hernshaw -hero -heroicalness -heroicity -heroicness -heroin -heroine -heroism -heron -heronry -heronsew -heroworshipper -herp -herpangina -herpes -herpetologist -herpetology -herquein -herring -herringbone -herryment -hertz -hesitancy -hesitater -hesitation -hesitator -hesperidin -hesperidium -hesperinos -hessian -hessite -hessonite -hest -hetaera -hetaerism -hetaerist -hetaira -hetairist -heteroaromatic -heteroauxin -heterocercality -heterochromatin -heterochromatism -heterochromosome -heterocycle -heterodoxy -heteroecism -heterogamete -heterogamy -heterogeneity -heterogeneousness -heterogenesis -heterogeny -heterogony -heterograft -heterography -heterokinesia -heterology -heterolysis -heteromorphism -heteromorphy -heteronomy -heteronym -heterophony -heterophoria -heterophylly -heterophyte -heteroplasty -heteropolarity -heteroptics -heteroscedasticity -heterosis -heterosphere -heterospory -heterostracan -heterostyly -heterotaxis -heterotelism -heterothallism -heterotopia -heterotrich -heterotroph -heterozygosis -heterozygosity -heterozygote -heth -hetman -hetmanate -heugh -heulandite -hevea -hewer -hexachloride -hexachlorocyclohexane -hexachloroethane -hexachlorophene -hexachord -hexad -hexadecane -hexaemeron -hexafluoride -hexagon -hexagram -hexahedron -hexahemeron -hexahydrate -hexahydrobenzene -hexahydrothymol -hexahydroxycyclohexane -hexamerism -hexameron -hexameter -hexamethonium -hexamethylene -hexamethylenetetramine -hexamine -hexanaphthene -hexane -hexanitrate -hexapla -hexapod -hexapody -hexarchy -hexastich -hexastichon -hexastyle -hexastylos -hexasyllable -hexer -hexobarbital -hexode -hexone -hexosamine -hexosan -hexose -hexyl -hexylresorcinol -heyday -hf -hg -hgt -hhd -hiatus -hibachi -hibernaculum -hibernation -hibernator -hibiscus -hiccup -hick -hickey -hickory -hickwall -hidage -hidalgism -hidalgo -hidalgoism -hiddenite -hiddenness -hideaway -hideboundness -hideosity -hideousness -hideout -hider -hiding -hidropoiesis -hidrosis -hielamon -hieracosphinx -hierarch -hierarchism -hierarchist -hierarchy -hierocracy -hierodeacon -hierodule -hieroglyphics -hieroglyphist -hieroglyphologist -hieroglyphology -hierogram -hierogrammat -hierogrammatist -hierolatry -hierologist -hierology -hieromonk -hieron -hierophant -hierurgy -higgler -highball -highbinder -highboy -highbrow -highbrowism -highchair -highdaddy -highflier -highhandedness -highhole -highjacker -highland -highlife -highlight -highline -highness -highroad -highway -highwayman -hijacker -hijinks -hiker -hilariousness -hilarity -hilding -hill -hillbilly -hiller -hillfort -hilliness -hillock -hillside -hillsite -hilltop -hilltopper -hilt -hilum -hilus -himation -hin -hindbrain -hinderer -hindgut -hindi -hindquarter -hindrance -hindsight -hinge -hinny -hint -hinter -hinterland -hip -hipbone -hiphuggers -hippalectryon -hipparch -hippeastrum -hippiatrics -hippiatrist -hippie -hipping -hippo -hippocampus -hippocras -hippodrome -hippogriff -hippologist -hippology -hippophagist -hippophagy -hippophile -hippopotamus -hippus -hipster -hiragana -hireling -hirer -hirsuteness -hirsutism -hirudin -hirudinean -hispanidad -hispanism -hispidity -hiss -hisser -hissing -histaminase -histamine -histidine -histiocyte -histoblast -histochemistry -histogen -histogenesis -histogram -histographer -histography -histologist -histology -histolysis -histomorphology -histone -histopathologist -histopathology -histophysiology -histoplasmosis -historian -historicalness -historicism -historicist -historicity -historiographer -historiographership -historiography -history -histothrombin -histotome -histotomy -histrionics -histrionism -hitcher -hitchiness -hitter -hive -hiver -hives -hl -hm -hoactzin -hoar -hoard -hoarder -hoarding -hoarfrost -hoarhound -hoariness -hoarseness -hoatzin -hoax -hoaxer -hob -hobber -hobblebush -hobbledehoy -hobbler -hobby -hobbyhorse -hobbyist -hobgoblin -hobnail -hobo -hoboism -hochhuth -hock -hocker -hocket -hockey -hockshop -hod -hodden -hodge -hodgepodge -hodman -hodograph -hodometer -hodoscope -hoe -hoecake -hoedown -hoer -hoeshin -hog -hogan -hogback -hogchoker -hogfish -hogg -hoggery -hogget -hoggin -hoggishness -hogmanay -hogmolly -hognut -hogshead -hogwash -hogweed -hoiden -hoister -hoistway -hokku -hokum -holdall -holdback -holder -holdership -holdfast -holding -holdout -holdover -holdup -hole -holiday -holiness -holism -holist -holland -hollo -hollowheartedness -hollowness -hollowware -holluschick -holly -hollyhock -holm -holmium -holoenzyme -hologonidium -hologram -holograph -holography -holohedrism -holohedry -hololith -holometabolism -holometaboly -holomorphism -holomorphy -holophote -holophrase -holophrasis -holophyte -holoplankton -holothurian -holotype -holster -holt -holystone -holytide -hom -homage -homager -hombre -homburg -home -homebody -homecomer -homecoming -homeland -homelessness -homelikeness -homeliness -homemaker -homemaking -homeomorph -homeomorphism -homeopathist -homeopathy -homeoplasia -homeostasis -homeotherapy -homeotherm -homeothermism -homeothermy -homeplace -homer -homeroom -homesickness -homesite -homestall -homestead -homesteader -homestretch -hometown -homework -homeworker -homeyness -homicide -homiletics -homiliary -homilist -homily -hominess -homing -hominid -hominy -hommock -homobront -homocercy -homochromatism -homochromy -homoeomorph -homoeomorphism -homoeopathist -homoeopathy -homogamy -homogenate -homogeneity -homogenesis -homogenization -homogenizer -homogeny -homogony -homograft -homograph -homoiotherm -homoiothermism -homoiothermy -homologation -homologiser -homologizer -homologue -homologumena -homology -homolysis -homomorphism -homonid -homonym -homonymity -homonymy -homopause -homophile -homophone -homophony -homophyly -homoplasy -homopolarity -homoscedasticity -homosphere -homospory -homostylism -homostyly -homotaxis -homothallism -homotherm -homothermism -homothermy -homothety -homotype -homozygosis -homozygote -homunculus -hon -honan -honda -hone -honestness -honesty -honewort -honey -honeybee -honeybunch -honeycomb -honeycreeper -honeydew -honeyedness -honeymoon -honeymooner -honeysucker -honeysuckle -honeywort -hong -honk -honker -honky -honor -honorableness -honorand -honorarium -honorer -honour -honourableness -honourer -hooch -hood -hoodedness -hoodie -hoodle -hoodlum -hoodlumism -hoodman -hoodoo -hoodwinker -hooey -hoof -hoofbeat -hoofer -hoofiness -hoofprint -hook -hookah -hookedness -hookey -hooknose -hookswinging -hookup -hookworm -hooky -hooligan -hooliganism -hooly -hoop -hooper -hoopla -hoopman -hoopoe -hoopster -hoopwood -hoosegow -hoot -hootch -hootenanny -hooter -hooves -hop -hope -hopefulness -hopelessness -hoper -hophead -hoplite -hoplology -hopper -hopping -hopsack -hopsacking -hopscotch -hoptoad -hoptree -hopvine -hor -hora -horde -hordein -hordeolum -horehound -horizon -horizontality -horizontalness -horme -hormone -horn -hornbeam -hornbill -hornblende -hornbook -hornedness -hornet -hornfels -horniness -hornito -hornlessness -hornpipe -hornpout -hornstone -horntail -hornworm -hornwort -horol -horologe -horologist -horologium -horology -horopter -horoscope -horoscoper -horoscopy -horotely -horribleness -horridness -horrification -horripilation -horror -horse -horseback -horsebox -horsecar -horsecloth -horsed -horsefeathers -horsefish -horseflesh -horsefly -horsehair -horsehead -horsehide -horselaugh -horselaughter -horseleech -horseman -horsemanship -horsemint -horseplay -horseplayer -horsepower -horsepox -horseradish -horseshoe -horseshoer -horseshoes -horsetail -horseweed -horsewhip -horsewhipper -horsewoman -horsewomanship -horsiness -horsing -horst -hort -hortensia -horticulture -horticulturist -hose -hosecock -hosel -hosier -hosiery -hosp -hospice -hospitableness -hospital -hospitalism -hospitality -hospitalization -hospitaller -hospitalman -hospitium -hospodar -host -hosta -hostage -hostageship -hostel -hosteler -hosteller -hostelling -hostelry -hostess -hostie -hostility -hostler -hostlership -hostship -hotbed -hotbox -hotch -hotchpot -hotchpotch -hotel -hotelier -hotelkeeper -hotelman -hothead -hotheadedness -hothouse -hotness -hotplate -hotpot -hotspur -hottie -houbara -houdah -hough -houmous -hound -hounder -houndfish -hounding -hounskull -houppelande -hour -hourglass -houri -house -houseboat -houseboy -housebreaker -housebreaking -housecarl -housecleaner -housecleaning -housecoat -housedress -housefather -housefly -houseful -houseguest -household -householder -householdership -housekeeper -housekeeping -housel -houseleek -houselessness -houseline -housemaid -houseman -housemaster -housemastership -housemother -houseparent -housephone -houseroom -housetop -housewarming -housewife -housewifeliness -housewifery -housework -houseworker -housewrecker -housing -houstonia -houting -hovel -hovercraft -hoverer -hoverport -hovertrain -howdah -howdie -howe -howel -howf -howff -howitzer -howl -howler -howlet -howtowdie -hoy -hoya -hoyden -hoydenishness -hoydenism -hp -hr -hrs -hs -hsien -ht -huamuchil -huapango -huarache -huaracho -hub -hubble -hubbob -hubbub -hubby -hubcap -hubris -huckaback -huckle -huckleberry -hucklebone -huckster -hucksterer -hucksterism -huddle -huddler -hue -huemul -huff -huffiness -huffishness -hugeness -hugeousness -hugger -huggermugger -huia -huisache -hula -hulk -hull -hullaballoo -hullabaloo -huller -hulling -hullo -humaneness -humanics -humanisation -humaniser -humanism -humanist -humanitarianism -humanitarianist -humanity -humanization -humanizer -humankind -humanness -humblebee -humbleness -humbug -humbugger -humbuggery -humdinger -humdrumness -humerus -humidification -humidifier -humidistat -humidity -humidness -humidor -humiliation -humiliator -humility -hummer -hummingbird -hummock -humor -humoresque -humorist -humorlessness -humorousness -humour -humourlessness -hump -humpback -humpiness -humpty -humuhumunukunukuapuaa -humulon -humus -hunch -hunchback -hund -hundred -hundredweight -hunger -hungriness -hunk -hunks -huntaway -hunter -hunting -huntress -huntsman -huntsmanship -huppah -hurcheon -hurdle -hurdler -hurler -hurley -hurling -hurly -hurricane -hurriedness -hursinghar -hurst -hurter -hurtfulness -hurtleberry -hurtlessness -husband -husbandage -husbander -husbandman -husbandry -hushion -husk -husker -huskiness -husking -hussar -hussitism -hussy -hustings -hustler -hut -hutch -hutchie -hutment -hwan -hwyl -hy -hyacinth -hyacinthin -hyaena -hyalin -hyalinization -hyalite -hyalogen -hyalograph -hyalographer -hyalography -hyalomere -hyalophane -hyaloplasm -hyaluronidase -hybrid -hybridiser -hybridism -hybridist -hybridizer -hybris -hyd -hydantoin -hydathode -hydatid -hydnocarpate -hydra -hydracid -hydraemia -hydralazine -hydrangea -hydrant -hydranth -hydrargyrism -hydrargyrum -hydrase -hydrastine -hydrastinine -hydrastis -hydrate -hydration -hydrator -hydraul -hydraulics -hydraulus -hydrazine -hydrazoate -hydrazone -hydremia -hydria -hydride -hydro -hydroa -hydroairplane -hydrobomb -hydrobromide -hydrocarbon -hydrocele -hydrocellulose -hydrocephalus -hydrochloride -hydrochlorothiazide -hydrocoral -hydrocortisone -hydrocracking -hydrodesulfurization -hydrodynamics -hydroelectricity -hydrofoil -hydroformylation -hydrogen -hydrogenate -hydrogenation -hydrogenisation -hydrogenization -hydrogenolysis -hydrogeologist -hydrogeology -hydrograph -hydrographer -hydrography -hydrokineter -hydrokinetics -hydrolant -hydrolase -hydrologist -hydrology -hydrolysate -hydrolysation -hydrolyser -hydrolysis -hydrolyte -hydrolyzation -hydrolyzer -hydromagnetics -hydromancer -hydromancy -hydromechanics -hydromedusa -hydromel -hydrometallurgy -hydrometeor -hydrometeorology -hydrometer -hydrometry -hydronaut -hydronitrogen -hydropac -hydropath -hydropathist -hydropathy -hydroperoxide -hydrophane -hydrophily -hydrophobe -hydrophobia -hydrophobicity -hydrophone -hydrophyte -hydrophytism -hydroplane -hydropneumatization -hydroponics -hydroponist -hydropower -hydrops -hydroquinone -hydrorhiza -hydros -hydroscope -hydroscopicity -hydrosere -hydroski -hydrosol -hydrosoma -hydrosome -hydrosphere -hydrostat -hydrostatics -hydrosulfate -hydrosulfide -hydrosulfite -hydrosulphate -hydrosulphide -hydrosulphite -hydrotaxis -hydrotheca -hydrotherapeutics -hydrotherapist -hydrotherapy -hydrothorax -hydrotropism -hydroxide -hydroxybenzene -hydroxyketone -hydroxyl -hydroxylamine -hydroxyproline -hydroxyzine -hydrozoan -hyena -hyetograph -hyetography -hyetologist -hyetology -hygiene -hygienics -hygienist -hygristor -hygrogram -hygrograph -hygrometer -hygrometry -hygrophyte -hygroscope -hygroscopicity -hygrostat -hygrothermograph -hyla -hylomorphism -hylomorphist -hylotheism -hylotheist -hylozoism -hylozoist -hymen -hymenium -hymenopter -hymenopteran -hymenopteron -hymenotome -hymenotomy -hymn -hymnal -hymnarium -hymnary -hymner -hymnist -hymnodist -hymnody -hymnologist -hymnology -hyolithid -hyoscine -hyoscyamine -hyoscyamus -hyp -hypacusia -hypaesthesia -hypalgesia -hypallage -hypanthium -hypaspist -hype -hyperabsorption -hyperaccuracy -hyperaccurateness -hyperacidity -hyperacoustics -hyperaction -hyperactivity -hyperacuity -hyperacuness -hyperacusis -hyperadenosis -hyperadiposity -hyperadrenalemia -hyperadrenalism -hyperaemia -hyperaesthesia -hyperaesthete -hyperalgesia -hyperalimentation -hyperalkalinity -hyperaltruism -hyperaltruist -hyperanabolism -hyperanakinesia -hyperanarchy -hyperaphia -hyperazoturia -hyperbarbarism -hyperbarbarousness -hyperbaton -hyperbola -hyperbole -hyperbolism -hyperboloid -hyperbrachycephaly -hypercalcemia -hypercalciuria -hypercapnia -hypercatabolism -hypercatharsis -hyperchloremia -hyperchlorhydria -hyperchlorination -hypercholesterolemia -hypercholesterolia -hypercholia -hypercivilization -hyperclassicality -hyperclimax -hypercoagulability -hyperconcentration -hyperconfidence -hyperconformist -hyperconformity -hyperconscientiousness -hyperconservatism -hyperconservativeness -hyperconstitutionalism -hypercorrection -hypercorrectness -hypercrinism -hypercritic -hypercriticism -hypercryalgesia -hypercyanosis -hypercythemia -hypercytosis -hyperdactylia -hyperdeification -hyperdelicacy -hyperdelicateness -hyperdelness -hyperdiabolicalness -hyperdicrotism -hyperdistention -hyperdivision -hyperdolichocephaly -hyperdulia -hyperelegance -hyperelegancy -hyperemesis -hyperemia -hyperemization -hyperemotiveness -hyperemotivity -hyperendocrinism -hyperenthusiasm -hyperepinephrinemia -hyperepinephry -hypererethism -hyperesthesia -hyperesthete -hyperethicalness -hyperexaltation -hyperexcitability -hyperexcitableness -hyperexcitement -hyperexcursiveness -hyperextension -hyperfastidiousness -hyperfederalist -hyperflexibility -hyperflexibleness -hyperflexion -hyperform -hyperfunction -hypergalactia -hypergamy -hypergenesis -hypergeneticalness -hypergeusesthesia -hyperglobulia -hyperglycaemia -hyperglycemia -hyperglycistia -hypergol -hypergrammaticalness -hyperhepatia -hyperhidrosis -hyperhilariousness -hyperhypocrisy -hypericum -hyperimmunity -hyperimmunization -hyperingenuity -hyperinsulinism -hyperintellectualness -hyperintelligence -hyperirritability -hyperkalemia -hyperkatabolism -hyperkeratosis -hyperkinesia -hyperlactation -hyperlethargy -hyperleucocytosis -hyperlipemia -hyperlogicality -hyperlogicalness -hyperlustrousness -hypermarket -hypermedication -hypermegasoma -hypermetabolism -hypermetamorphosis -hypermeter -hypermetrope -hypermetropia -hypermetropy -hypermicrosoma -hypermiraculousness -hypermnesia -hypermodestness -hypermotility -hypermysticalness -hypernatremia -hypernaturalness -hypernormality -hypernormalness -hypernutrition -hyperobtrusiveness -hyperon -hyperope -hyperopia -hyperorthodoxy -hyperosmia -hyperosteogeny -hyperostosis -hyperovaria -hyperoxemia -hyperoxide -hyperoxygenation -hyperparasite -hyperparasitism -hyperparathyroidism -hyperparoxysm -hyperpatriotism -hyperperfection -hyperperistalsis -hyperphagia -hyperphospheremia -hyperpiesia -hyperpigmentation -hyperpituitarism -hyperplane -hyperplasia -hyperploidy -hyperpnea -hyperpnoea -hyperpotassemia -hyperprosexia -hyperpurist -hyperpyrexia -hyperresonance -hyperridiculousness -hyperritualism -hyperromanticism -hypersalivation -hyperscrupulosity -hypersecretion -hypersensibility -hypersensitisation -hypersensitiveness -hypersensitivity -hypersensitization -hypersensualism -hypersensualness -hypersensuousness -hypersomnia -hypersophistication -hyperspace -hyperspeculativeness -hypersphere -hypersthene -hypersubtlety -hypersuggestibility -hypersuggestibleness -hypersusceptibility -hypertechnicalness -hypertely -hypertenseness -hypertensin -hypertensinase -hypertensinogen -hypertension -hyperthermia -hyperthrombinemia -hyperthymia -hyperthyroidism -hypertocicity -hypertonicity -hypertrophy -hyperurbanism -hypervascularity -hypervenosity -hyperventilation -hypervigilantness -hyperviscosity -hypervitalization -hypervitaminosis -hypesthesia -hypha -hyphen -hyphenation -hyphenisation -hyphenization -hyphopodium -hypnoanalysis -hypnogenesis -hypnograph -hypnologist -hypnology -hypnone -hypnopaedia -hypnosis -hypnosperm -hypnosporangium -hypnospore -hypnotherapy -hypnotisability -hypnotisation -hypnotiser -hypnotism -hypnotist -hypnotizability -hypnotization -hypnotizer -hypnotoxin -hypo -hypoacidity -hypoacussis -hypoadenia -hypoalbuminemia -hypoalimentation -hypoalonemia -hypoazoturia -hypobaropathy -hypobasis -hypoblast -hypocalcemia -hypocaust -hypocentre -hypochil -hypochilium -hypochloremia -hypochlorhydria -hypochlorite -hypocholesteremia -hypochondria -hypochondriac -hypochondriasis -hypochondrium -hypochromia -hypocorism -hypocotyl -hypocrinism -hypocrisy -hypocrite -hypocycloid -hypocytosis -hypoderm -hypoderma -hypodermis -hypodynamia -hypoendocrinism -hypofunction -hypogastrium -hypogenesis -hypogeum -hypogeusia -hypoglobulia -hypoglottis -hypoglycaemia -hypoglycemia -hypognathism -hypogonadism -hypogyny -hypohepatia -hypohidrosis -hypohydrochloria -hypohypophysism -hypoinosemia -hypokalemia -hypokinemia -hypokinesia -hypolimnion -hypomania -hypomnesia -hypomotility -hypomyotonia -hyponasty -hyponatremia -hyponitrite -hyponoia -hypophalangism -hypopharyngoscope -hypopharyngoscopy -hypopharynx -hypophonesis -hypophonia -hypophoria -hypophosphate -hypophosphite -hypophyge -hypophysectomy -hypophysis -hypophysitis -hypopiesis -hypopituitarism -hypoplasia -hypoploidy -hypopnea -hypopnoea -hypopodium -hypopotassemia -hypopraxia -hypoprosexia -hypoproteinemia -hypoproteinosis -hypopselaphesia -hypopsychosis -hypoptyalism -hypopyon -hyporchema -hyposalemia -hyposarca -hyposecretion -hyposensitization -hyposmia -hypospray -hypostasis -hypostatisation -hypostatization -hyposthenia -hypostome -hyposulfite -hyposulphite -hypotaxis -hypotension -hypotenuse -hypoth -hypothalamus -hypothallus -hypothec -hypothecater -hypothecation -hypothecator -hypothecium -hypothenar -hypothenuse -hypothermia -hypothesis -hypothesiser -hypothesizer -hypothyroidism -hypotonicity -hypotrachelium -hypotrich -hypotyposis -hypoxanthine -hypoxemia -hypoxia -hypozeugma -hypozeuxis -hypsicephaly -hypsography -hypsometer -hypsometrist -hypsometry -hyrax -hyson -hyssop -hysterectomy -hysteresis -hysteria -hysteric -hysterics -hysterocatalepsy -hysterogeny -hysterotomy -hystricomorph -hythergraph -hyzone -i -ia -iamb -iambus -iarovization -iatrochemist -iatrochemistry -iatrogenicity -ib -ibex -ibid -ibis -ic -ice -iceberg -iceblink -iceboat -iceboating -icebox -icebreaker -icecap -icefall -icehouse -iceman -ich -ichneumon -ichnite -ichnography -ichnology -ichor -ichth -ichthammol -ichthyographer -ichthyography -ichthyol -ichthyolite -ichthyologist -ichthyology -ichthyophagist -ichthyophagy -ichthyophthirius -ichthyornis -ichthyosaur -ichthyosaurus -ichthyosis -icicle -iciness -icing -icker -icon -iconicity -iconoclasm -iconoclast -iconodule -iconoduly -iconograph -iconographer -iconography -iconolater -iconolatry -iconologist -iconology -iconoscope -iconostasis -icosahedron -icositetrahedron -icterus -ictus -id -idcue -iddhi -ide -idea -ideal -idealisation -idealiser -idealism -idealist -ideality -idealization -idealizer -idealness -ideamonger -ideation -ideatum -idemfactor -identicalness -identifiableness -identification -identifier -identity -ideogram -ideograph -ideography -ideologist -ideology -ideomotion -ides -idioblast -idiocrasy -idiocy -idiodynamics -idioglossia -idiograph -idiolect -idiom -idiomaticalness -idiomaticity -idiomorphism -idiopathy -idiophone -idioplasm -idiorrhythmism -idiorrhythmy -idiosyncrasy -idiot -idioticalness -idiotism -idleness -idler -idlesse -idocrase -idol -idolater -idolatriser -idolatrizer -idolatrousness -idolatry -idolisation -idoliser -idolism -idolist -idolization -idolizer -idolum -idoneity -idoneousness -idyll -idyllist -ie -iff -igloo -ign -ignitability -igniter -ignitibility -ignition -ignitron -ignobility -ignobleness -ignominiousness -ignominy -ignoramus -ignorance -ignorantness -ignorer -iguana -iguanid -iguanodon -ihp -ihram -ijithad -ijma -ikan -ike -ikebana -ikon -il -ileitis -ileocolitis -ileostomy -ileum -ileus -ilex -iliocostalis -ilium -ilk -illamon -illation -illdisposedness -illegalisation -illegality -illegalization -illegibility -illegibleness -illegitimacy -illhumor -illiberalism -illiberality -illiberalness -illicitness -illimitability -illimitableness -illinium -illiteracy -illiterateness -illmanneredness -illnature -illness -illocution -illogic -illogicality -illogicalness -illtreatment -illuminability -illuminance -illuminant -illumination -illuminator -illuminism -illuminist -illuminometer -illus -illusion -illusionism -illusionist -illusiveness -illusoriness -illust -illustration -illustrator -illustriousness -illuviation -illuvium -ilmenite -ilth -image -imager -imagery -imaginariness -imagination -imaginativeness -imaginer -imagism -imagist -imagnableness -imago -imam -imamate -imambarah -imamship -iman -imaret -imbalance -imbalmer -imbalmment -imbarkation -imbarkment -imbecile -imbecility -imbiber -imbibition -imbitterer -imbitterment -imbodiment -imbracery -imbrex -imbrication -imbroglio -imbruement -imbrutement -imbuement -imidazole -imide -imidogen -imine -iminourea -imit -imitability -imitableness -imitation -imitativeness -imitator -immaculacy -immaculateness -immanency -immaneness -immanentism -immaterialism -immaterialist -immateriality -immaterialness -immatureness -immaturity -immeasurability -immeasurableness -immediacy -immediateness -immediatism -immediatist -immedicableness -immenseness -immensity -immensurability -immensurableness -immergence -immersion -immersionism -immersionist -immethodicalness -immigrant -immigration -immigrator -imminence -imminentness -immiscibility -immitigability -immixture -immobilisation -immobilism -immobility -immobilization -immoderacy -immoderateness -immoderation -immodesty -immolation -immolator -immoralism -immoralist -immorality -immortalisation -immortaliser -immortality -immortalization -immortalizer -immortelle -immovability -immovableness -immoveability -immoveableness -immunisation -immuniser -immunity -immunization -immunizer -immunoassay -immunochemistry -immunogenetics -immunogenicity -immunoglobulin -immunol -immunologist -immunology -immunoreaction -immunotherapy -immuration -immurement -immutability -immutableness -imp -impact -impaction -impactite -impairer -impairment -impala -impalement -impaler -impalpability -impanation -impanator -impanelment -imparity -imparkation -imparlance -impartation -imparter -impartiality -impartialness -impartibility -impartment -impassability -impassableness -impasse -impassibility -impassibleness -impassionedness -impassiveness -impassivity -impastation -impasto -impatience -impatiens -impatientness -impavidity -impeachability -impeacher -impeachment -impeccability -impeccance -impeccancy -impecuniosity -impecuniousness -impedance -impeder -impedibility -impediment -impeller -impendence -impendency -impenetrability -impenetrableness -impenitence -impenitency -impenitentness -imper -imperativeness -imperator -imperatorship -imperceptibility -imperceptibleness -imperception -imperceptiveness -imperceptivity -impercipience -imperf -imperfectibility -imperfection -imperfectness -imperforation -imperialisation -imperialism -imperialist -imperialization -imperialness -imperilment -imperiousness -imperishability -imperishableness -imperium -impermanence -impermanency -impermeability -impermeableness -impermissibility -impers -impersonalisation -impersonalism -impersonality -impersonalization -impersonation -impersonator -impertinence -impertinency -impertinentness -imperturbability -imperturbableness -imperturbation -imperviousness -impetigo -impetration -impetrator -impetuosity -impetuousness -impetus -impf -impi -impiety -impignoration -impingement -impinger -impiousness -impishness -implacability -implacableness -implantation -implanter -implausibility -impleader -implement -implementation -implementer -implementor -impletion -implication -implicitness -implicity -imploration -implorer -imploringness -implosion -impluvium -impolicy -impoliteness -impoliticness -imponderability -imponderableness -imponent -importability -importance -importation -importee -importer -importunacy -importunateness -importuner -importunity -imposer -imposingness -imposition -impossibility -impossibleness -impost -imposter -impostor -impostume -imposture -imposure -impotence -impoundage -impounder -impoundment -impoverisher -impoverishment -impracticability -impracticableness -impracticality -impracticalness -imprecation -imprecator -impreciseness -imprecision -impregnability -impregnableness -impregnation -impregnator -impresa -impresario -imprescriptibility -impresser -impressibility -impressibleness -impression -impressionability -impressionableness -impressionism -impressionist -impressiveness -impressment -impressure -imprest -imprimatur -imprimatura -imprint -imprinter -imprinting -imprisoner -imprisonment -improbability -improbableness -improbity -improperness -impropriation -impropriator -impropriety -improvability -improvableness -improvement -improver -improvidence -improvisation -improvisator -improviser -improvvisatore -imprudence -imprudency -imprudentness -impsonite -impudence -impudentness -impudicity -impugnability -impugner -impugnment -impuissance -impulse -impulsion -impulsiveness -impunity -impureness -impurity -imputability -imputableness -imputation -imputativeness -imputer -imputrescibility -impv -inability -inaccessibility -inaccessibleness -inaccuracy -inaccurateness -inaction -inactivation -inactiveness -inactivity -inadaptability -inadequacy -inadequateness -inadmissibility -inadvertence -inadvertency -inadvisability -inadvisableness -inalienability -inalienableness -inalterability -inalterableness -inamorata -inamorato -inanimateness -inanimation -inanition -inanity -inappetence -inapplicability -inapplicableness -inappositeness -inappreciativeness -inapprehension -inapprehensiveness -inapproachability -inappropriateness -inaptitude -inaptness -inarticulateness -inartificiality -inartificialness -inattention -inattentiveness -inaudibility -inaudibleness -inauguration -inaugurator -inauspiciousness -inbeing -inbreeding -inburst -inby -inc -incalculability -incalculableness -incalescence -incandescence -incantation -incapability -incapableness -incapaciousness -incapacitation -incapacity -incarceration -incarcerator -incardination -incarnation -incasement -incaution -incautiousness -incendiarism -incense -incensement -incensory -incenter -incentive -inception -inceptor -incertitude -incessancy -incessantness -inch -inchoateness -inchoation -inchworm -incidence -incident -incidentalness -incienso -incineration -incinerator -incipience -incipiency -incipit -incision -incisiveness -incisor -incisure -incitation -incitement -inciter -incivility -incivism -incl -inclemency -inclementness -inclination -incliner -inclining -inclinometer -incloser -inclosure -includedness -incluse -inclusion -inclusiveness -incogitability -incognizance -incoherence -incoherency -incombustibility -incombustibleness -income -incomer -incommensurability -incommensurableness -incommensurateness -incommodiousness -incommodity -incommunicability -incommunicableness -incommunicativeness -incommutability -incommutableness -incompactness -incomparability -incomparableness -incompatibility -incompatibleness -incompetence -incompleteness -incompletion -incompliance -incompliancy -incomprehensibility -incomprehensibleness -incomprehension -incomprehensiveness -incompressibility -inconceivability -inconceivableness -inconclusiveness -incondensability -incondensibility -inconformity -incongruence -incongruity -incongruousness -inconnu -inconsecutiveness -inconsequence -inconsequentiality -inconsequentness -inconsiderableness -inconsiderateness -inconsideration -inconsistency -inconsolability -inconsolableness -inconsonance -inconspicuousness -inconstancy -incontestability -incontestableness -incontinence -incontinency -incontinuity -incontrovertibility -incontrovertibleness -inconvenience -inconveniency -inconvertibility -inconvertibleness -inconvincibility -incoordination -incor -incorporatedness -incorporation -incorporator -incorporeality -incorporeity -incorr -incorrectness -incorrigibility -incorrigibleness -incorruptibility -incorruptibleness -incorruption -incorruptness -incr -incrassation -increaser -incredibility -incredibleness -incredulity -incredulousness -increment -increscence -incretion -incrimination -incriminator -incross -incrustation -incubation -incubator -incubus -incudes -inculcation -inculcator -inculpability -inculpableness -inculpation -incumbency -incumbrance -incurability -incurableness -incuriosity -incuriousness -incurrence -incursion -incurvation -incurvature -incurve -incus -incuse -ind -indaba -indagation -indagator -indamine -indebtedness -indecency -indecipherability -indecipherableness -indecision -indecisiveness -indecl -indeclinableness -indecomposableness -indecorousness -indecorum -indef -indefatigability -indefatigableness -indefeasibility -indefeasibleness -indefectibility -indefensibility -indefensibleness -indefinableness -indefiniteness -indehiscence -indeliberateness -indeliberation -indelibility -indelibleness -indelicacy -indelicateness -indemnification -indemnifier -indemnitee -indemnitor -indemnity -indemonstrability -indemonstrableness -indene -indentation -indenter -indention -indentor -indenture -indentureship -independence -independency -indescribability -indescribableness -indestructibility -indestructibleness -indeterminableness -indeterminacy -indeterminateness -indetermination -indeterminism -indeterminist -index -indexer -indic -indican -indicant -indication -indicator -indices -indicium -indicolite -indicter -indiction -indictment -indictor -indifference -indifferency -indifferentism -indifferentist -indigence -indigene -indigenity -indigenousness -indiges -indigestibility -indigestibleness -indigestion -indigitation -indignation -indignity -indigo -indigotin -indirection -indirectness -indiscernibility -indiscernibleness -indiscerptibility -indiscerptibleness -indiscipline -indiscreetness -indiscretion -indiscriminateness -indiscrimination -indispensability -indispensableness -indisposedness -indisposition -indisputability -indisputableness -indissolubility -indissolubleness -indistinctiveness -indistinctness -indistinguishability -indistinguishableness -inditement -inditer -indium -individ -individualisation -individualiser -individualism -individualist -individuality -individualization -individualizer -individuation -individuator -indivisibility -indivisibleness -indocility -indoctrination -indoctrinator -indoctrinization -indole -indolence -indomethacin -indomitability -indomitableness -indophenol -indorsee -indorsement -indorser -indorsor -indoxyl -indraft -indraught -indri -indris -indubitability -indubitableness -induc -inducement -inducer -inductance -inductee -inductility -induction -inductiveness -inductor -inductothermy -indulgence -indulgency -indulger -induline -indult -indumentum -induna -induplication -induration -indus -indusium -industrialisation -industrialism -industrialist -industrialization -industrialness -industriousness -industry -indweller -inebriation -inebriety -inedibility -ineducability -ineducation -ineffability -ineffableness -ineffaceability -ineffectiveness -ineffectuality -ineffectualness -inefficaciousness -inefficacity -inefficacy -inefficiency -inelasticity -inelegance -inelegancy -ineligibility -ineligibleness -ineloquence -ineluctability -ineptitude -ineptness -inequality -inequitableness -inequity -ineradicableness -inerasableness -inerrability -inerrableness -inerrancy -inertance -inertia -inertness -inescapableness -inescutcheon -inessentiality -inestimability -inestimableness -inevitability -inevitableness -inexactitude -inexactness -inexcusability -inexcusableness -inexecution -inexertion -inexhaustibility -inexhaustibleness -inexistence -inexistency -inexorability -inexorableness -inexpedience -inexpediency -inexpensiveness -inexperience -inexpertness -inexpiableness -inexplicability -inexplicableness -inexplicitness -inexpressibility -inexpressibleness -inexpressiveness -inexpugnability -inexpugnableness -inexpungibility -inextensibility -inextirpableness -inextricability -inf -infallibilism -infallibility -infallibleness -infamousness -infamy -infancy -infant -infanta -infante -infanthood -infanticide -infantilism -infantility -infantry -infantryman -infarct -infarction -infare -infatuation -infatuator -infeasibility -infeasibleness -infectedness -infecter -infection -infectiousness -infectiveness -infectivity -infector -infecundity -infelicity -infeoffment -inference -inferiority -infernality -inferno -inferrer -infertileness -infertility -infestation -infester -infeudation -infidel -infidelity -infield -infielder -infighter -infighting -infill -infiltration -infiltrator -infimum -infin -infiniteness -infinitesimality -infinitesimalness -infinitive -infinitude -infinity -infirmarian -infirmary -infirmity -infirmness -infixion -inflamedness -inflamer -inflammability -inflammableness -inflammation -inflatable -inflatedness -inflater -inflation -inflationism -inflationist -inflator -inflectedness -inflection -inflector -inflexibility -inflexibleness -inflexion -inflicter -infliction -inflictor -inflorescence -inflow -influence -influencer -influenza -influx -info -infolder -infoldment -informality -informant -information -informativeness -informer -infortunateness -infortune -infraction -infractor -infralapsarian -infralapsarianism -infrangibility -infrangibleness -infrared -infrasonics -infrastructure -infrequency -infringement -infringer -infundibulum -infuriation -infuser -infusibility -infusibleness -infusion -infusionism -infusionist -infusorian -inganue -ingate -ingatherer -ingathering -ingemination -ingeneration -ingeniousness -ingenuity -ingenuousness -ingestion -ingine -ingle -inglenook -ingleside -ingloriousness -ingnue -ingot -ingraftation -ingrafter -ingraftment -ingrainedness -ingrate -ingratiation -ingratitude -ingravescence -ingredient -ingress -ingression -ingressiveness -ingroup -ingrowth -ingulfment -ingurgitation -inhabitability -inhabitancy -inhabitant -inhabitation -inhabitedness -inhabiter -inhalation -inhalator -inhaler -inharmoniousness -inharmony -inhaul -inherence -inherency -inheritability -inheritableness -inheritance -inheritor -inheritrix -inhesion -inhibiter -inhibition -inhibitor -inhomogeneity -inhospitableness -inhospitality -inhumanity -inhumanness -inhumation -inhumer -inimicality -inimicalness -inimitability -inimitableness -inion -iniquitousness -iniquity -init -initialer -initialler -initiation -initiative -initiator -initiatress -initiatrix -injection -injector -injudiciousness -injunction -injuredness -injurer -injuriousness -injury -injustice -ink -inkberry -inkblot -inker -inkhorn -inkie -inkiness -inkle -inkling -inkstand -inkwell -inkwood -inlander -inlawry -inlayer -inlet -inlier -inline -inmate -inn -innage -innateness -innerness -innervation -inning -innings -innkeeper -innocence -innocency -innocuity -innocuousness -innomine -innovation -innovator -innoxiousness -innuendo -innumerability -innumerableness -innutrition -inobservance -inoculability -inoculant -inoculation -inoculator -inoculum -inodorousness -inoffensiveness -inofficiosity -inofficiousness -inoperativeness -inopportuneness -inopportunity -inordinacy -inordinateness -inorg -inorganization -inosculation -inosilicate -inositol -inpatient -input -inqilab -inquartation -inquest -inquietness -inquietude -inquiline -inquilinity -inquirer -inquiry -inquisition -inquisitionist -inquisitiveness -inquisitor -inquisitorialness -inradius -inrigger -inroad -inrush -inrushing -ins -insalivation -insalubrity -insaneness -insanitariness -insanitation -insanity -insatiability -insatiableness -insatiateness -insatiety -inscape -inscribableness -inscriber -inscription -inscrutability -inscrutableness -insect -insectarium -insectary -insecticide -insectifuge -insectivore -insectologer -insectology -insecureness -insecurity -inselberg -insemination -insensateness -insensibility -insensitiveness -insensitivity -insentience -insentiency -insep -inseparability -inseparableness -inserter -insertion -insetter -inshoot -inside -insider -insidiousness -insight -insigne -insignia -insignificance -insignificancy -insincerity -insinuation -insinuator -insipidity -insipidness -insipience -insistence -insistency -insister -insnarement -insnarer -insobriety -insociability -insolation -insole -insolence -insolubility -insolubilization -insolubleness -insolvability -insolvency -insomnia -insomnolence -insouciance -insp -inspectability -inspection -inspector -inspectorate -inspectorship -inspiration -inspirer -inspiriter -inspiritment -inspissation -inspissator -inst -instability -installant -installation -installer -installment -instalment -instance -instancy -instant -instantaneity -instantaneousness -instar -instatement -instauration -instaurator -instep -instigant -instigation -instigator -instillation -instillator -instiller -instillment -instilment -instinct -instituter -institutes -institution -institutionalisation -institutionalism -institutionalist -institutionalization -institutor -instr -instroke -instructedness -instruction -instructiveness -instructor -instructorship -instrument -instrumentalism -instrumentalist -instrumentality -instrumentation -insubordination -insubstantiality -insufferableness -insufficiency -insufflation -insufflator -insula -insularism -insularity -insulation -insulator -insulin -insulination -insultation -insulter -insuperability -insuperableness -insupportableness -insurability -insurance -insurant -insurer -insurgence -insurgency -insurmountability -insurmountableness -insurrection -insurrectionism -insurrectionist -insusceptibility -inswathement -inswing -inswinger -int -intactness -intaglio -intake -intangibility -intangibleness -intarsia -intarsist -integer -integrability -integrality -integrand -integraph -integration -integrationist -integrator -integrity -integument -intellect -intellection -intellectualisation -intellectualiser -intellectualism -intellectualist -intellectuality -intellectualization -intellectualizer -intellectualness -intelligence -intelligencer -intelligentsia -intelligibility -intelligibleness -intemerateness -intemperance -intemperateness -intendance -intendancy -intendant -intendedness -intendency -intender -intendment -inteneration -intens -intenseness -intensification -intensifier -intension -intensitometer -intensity -intensiveness -intent -intention -intentionality -intentness -interabsorption -interaction -interactionism -interactionist -interadaption -interaffiliation -interagency -interagent -interagglutination -interagreement -interambulacrum -interantagonism -interapplication -interarboration -interassociation -interattrition -interavailability -interaxis -interbalance -interbrain -intercalation -intercarrier -interceder -interception -interceptor -intercession -intercessor -interchangeability -interchangeableness -interchanger -intercirculation -intercivilization -interclash -interclavicle -intercohesion -intercolonization -intercolumniation -intercom -intercombat -intercombination -intercommission -intercommonage -intercommoner -intercommunicability -intercommunication -intercommunicator -intercommunion -intercommunity -intercomparison -intercomplexity -intercondenser -interconnectedness -interconnection -intercontradiction -interconversion -interconvertibility -intercooler -intercorrelation -intercrop -intercupola -intercurrence -interdenominationalism -interdentil -interdependability -interdependence -interdependency -interdestructiveness -interdetermination -interdict -interdiction -interdictor -interdifferentiation -interdiffusiness -interdiffusion -interdigitation -interdivision -interdome -interelectrode -interentanglement -interest -interestedness -interesterification -interestingness -interface -interfacing -interfederation -interfenestration -interference -interferer -interferometer -interferometry -interferon -interfertility -interfilling -interfiltration -interflashing -interfluence -interfluve -interforce -interfriction -interfusion -intergeneration -interglyph -intergradation -intergrowth -interhabitation -interincorporation -interindependence -interinhibition -interinsurance -interior -interiorism -interiorist -interiority -interjacence -interjection -interjector -interjoist -interjudgment -interjunction -interkinesis -interlacement -interlamellation -interlamination -interlanguage -interlardation -interlardment -interlaudation -interleaf -interlight -interlineation -interliner -interlingua -interlining -interlocation -interlocker -interloculus -interlocution -interlocutor -interlocutress -interlocutrix -interloop -interloper -interlude -interlunation -intermarriage -intermatch -intermean -intermeddler -intermediacy -intermediary -intermediateness -intermediation -intermediator -interment -intermessage -intermezzo -intermigration -interminability -interminableness -interminglement -intermission -intermittence -intermittency -intermitter -intermittor -intermixture -intermobility -intermodification -intermodillion -intermodulation -intermotion -intermunicipality -intermuscularity -intermutule -internality -internalization -internalness -internat -internationalisation -internationalism -internationalist -internationality -internationalization -interne -internee -internegative -interneuron -internist -internment -internode -internship -internuncio -interoceptor -interosculation -interownership -interpellation -interpellator -interpenetration -interpervasiveness -interphase -interphone -interplay -interpleader -interpolater -interpolation -interpolator -interposal -interposer -interposition -interpretability -interpretableness -interpretation -interpreter -interpretership -interquarter -interradiation -interreflection -interregnum -interrelatedness -interrelation -interrelationship -interrepulsion -interresistance -interresistibility -interreticulation -interrex -interrobang -interrog -interrogation -interrogator -interruptedness -interrupter -interruption -intersale -interscene -interschool -intersection -intersession -intersolubility -interspersal -interspersion -interstade -interstice -interstimulation -interstratification -interstriation -interstructure -intersubsistence -intersubstitution -intertexture -intertrade -intertraffic -intertransformability -intertriglyph -intertrigo -intertwinement -interunion -interval -intervale -intervalley -intervalometer -intervariation -intervener -intervenor -intervention -interventionism -interview -interviewee -interviewer -intervisitation -intervolution -interweavement -interweaver -interworld -intestacy -intestine -inthrallment -inthralment -intima -intimacy -intimateness -intimater -intimation -intimidation -intimidator -intinction -intine -intitulation -intolerability -intolerableness -intolerance -intombment -intonaco -intonation -intoner -intorsion -intoxicant -intoxication -intoxicator -intr -intractability -intractableness -intrados -intrans -intransigeance -intransigeancy -intransigence -intransigency -intransitiveness -intrant -intravasation -intrencher -intrenchment -intrepidity -intrepidness -intricacy -intricateness -intrigant -intrigante -intriguer -intro -introducer -introduction -introductoriness -introgression -introit -introjection -intromissibility -intromission -intromitter -introscope -introspection -introspectionist -introspectiveness -introspector -introsusception -introversion -introvert -intruder -intrusion -intrusiveness -intubation -intuition -intuitionalism -intuitionalist -intuitionism -intuitionist -intuitiveness -intuitivism -intuitivist -intumescence -inturn -intussusception -intwinement -inulase -inulin -inunction -inundation -inundator -inurbaneness -inurbanity -inuredness -inurement -inurnment -inutility -inv -invader -invagination -invalid -invalidation -invalidator -invalidism -invalidity -invalidness -invaluableness -invariability -invariableness -invariant -invasion -invective -invectiveness -inveigher -inveiglement -inveigler -invenit -inventer -invention -inventiveness -inventor -inventory -inveracity -inversion -inversor -invertase -invertebracy -invertebrate -invertebrateness -inverter -invertibility -invertin -invertor -investigation -investigator -investiture -investment -investor -inveteracy -inveterateness -invidiousness -invigilation -invigilator -invigorant -invigoration -invigorator -invincibility -invincibleness -inviolability -inviolableness -inviolacy -inviolateness -invisibility -invisibleness -invitation -inviter -invitingness -invocation -invocator -invoice -invoker -involucel -involucre -involucrum -involuntariness -involution -involvedness -involvement -involver -invt -invulnerability -invulnerableness -invultuation -inwale -inwardness -inyala -iodate -iodation -iodide -iodimetry -iodine -iodism -iodization -iodizer -iodoform -iodometry -iodopsin -iolite -ion -ionisation -ioniser -ionium -ionization -ionizer -ionogen -ionomer -ionone -ionopause -ionosphere -iontophoresis -iota -iotacism -ipecac -iph -ipm -ipomoea -ipr -iproniazid -ips -iq -ir -iracundity -irade -irascibility -irascibleness -ire -irefulness -irenicon -irenics -iridectome -iridectomy -irides -iridescence -iridium -iridization -iridocapsulitis -iridochoroiditis -iridocyclitis -iridosmine -iridotomy -iris -irisation -iritis -irksomeness -iron -ironbark -irone -ironer -ironhandedness -ironicalness -ironing -ironist -ironmaster -ironmonger -ironmongery -ironside -ironsides -ironsmith -ironstone -ironware -ironweed -ironwood -ironwork -ironworker -ironworking -ironworks -irony -irradiance -irradiation -irradiator -irrationalism -irrationality -irrationalness -irreclaimability -irreclaimableness -irreconcilability -irreconcilableness -irrecoverableness -irredeemability -irredeemableness -irredenta -irredentism -irredentist -irreducibility -irreducibleness -irrefragability -irrefragableness -irrefrangibility -irrefrangibleness -irrefutability -irrefutableness -irreg -irregularity -irrelativeness -irrelevance -irrelevancy -irreligion -irreligionist -irreligiosity -irreligiousness -irremediableness -irremissibility -irremissibleness -irremovability -irremovableness -irreparability -irreparableness -irrepealability -irrepealableness -irrepressibility -irrepressibleness -irreproachability -irreproachableness -irresistibility -irresistibleness -irresolubility -irresoluteness -irresolution -irresolvability -irresolvableness -irresponsibility -irresponsibleness -irresponsiveness -irretention -irretentiveness -irretrievability -irretrievableness -irreverence -irreversibility -irreversibleness -irrevocability -irrevocableness -irrigation -irrigator -irritability -irritableness -irritancy -irritation -irritativeness -irritator -irroration -irruption -isabnormal -isagoge -isagogics -isallobar -isallotherm -isanomal -isarithm -isatin -isauxesis -isba -ischaemia -ischemia -ischium -isentrope -ishime -isidium -isinglass -isl -island -islander -isle -islet -isls -ism -isnad -isoabnormal -isoagglutination -isoagglutinin -isoantigen -isobar -isobarism -isobath -isobathytherm -isobront -isobutane -isobutylene -isocephaly -isochasm -isocheim -isochor -isochrone -isochronism -isochrony -isocline -isocracy -isocrat -isocyanate -isocyanide -isocyanine -isodef -isodiaphere -isodimorphism -isodomum -isodrosotherm -isogamete -isogamy -isogeny -isogeotherm -isogloss -isogon -isogonality -isogone -isogradient -isograft -isogram -isograph -isogriv -isohaline -isohel -isohume -isohyet -isolability -isolation -isolationism -isolationist -isolator -isoleucine -isolex -isoline -isologue -isomer -isomerism -isomerization -isometrics -isometropia -isometry -isomorph -isomorphism -isoneph -isoniazid -isonomy -isooctane -isopach -isopag -isopectic -isopedin -isoperimeter -isoperimetry -isophone -isopleth -isopod -isopolity -isopor -isoprene -isopropanol -isopropyl -isopropylideneacetone -isopyre -isorhythm -isostasy -isostemony -isostere -isosterism -isotac -isotach -isoteniscope -isothere -isotherm -isothermobath -isotone -isotonicity -isotope -isotopy -isotron -isotropy -isotype -issuance -issue -issuer -istana -isthmectomy -isthmus -istle -itacolumite -ital -italicization -itch -itchiness -item -itemization -itemizer -iter -iterance -iteration -iterativeness -itherness -itinerancy -itinerarium -itinerary -itineration -iv -ivory -ivorytype -ivy -ivyberry -iw -ixia -ixodid -ixtle -izard -izba -izzard -j -jaap -jabberer -jabberwocky -jabiru -jaborandi -jabot -jaburan -jacal -jacamar -jacana -jacaranda -jacinth -jack -jackal -jackanapes -jackaroo -jackass -jackassery -jackassism -jackassness -jackboot -jackdaw -jackeroo -jacket -jackey -jackfish -jackfruit -jackhammer -jackknife -jacklight -jacklighter -jackpile -jackpiling -jackpot -jacks -jackscrew -jackshaft -jacksmelt -jacksnipe -jackstay -jackstone -jackstraw -jackyard -jacobsite -jacobus -jaconet -jacquard -jacquemart -jactation -jacteleg -jactitation -jaculation -jaculator -jad -jadder -jade -jadedness -jadeite -jadishness -jaeger -jaga -jagamohan -jager -jaggedness -jaggery -jaguar -jaguarondi -jaguarundi -jai -jaiana -jail -jailbird -jailbreak -jailer -jailhouse -jak -jakes -jalap -jalapin -jalee -jalopy -jalor -jalousie -jamb -jambalaya -jambart -jambeau -jambiya -jamboree -jambos -jamboy -jambstone -jamesonite -jampan -jane -jangler -janissary -janitor -janitorship -janitress -japan -japanner -jape -japer -japery -japonica -japygid -jar -jardini -jardiniere -jargon -jargoneer -jargonisation -jargonist -jargonization -jarl -jarldom -jarosite -jarovization -jarrah -jarvey -jarvy -jasey -jasmine -jasper -jass -jasy -jato -jaundice -jaunt -jauntiness -jaup -javanine -javelin -jaw -jawan -jawbone -jawbreaker -jawfish -jawp -jawrope -jay -jaybird -jayvee -jaywalker -jazey -jazy -jazz -jazzer -jazziness -jazzman -jct -jealousness -jealousy -jean -jebel -jeep -jeerer -jefe -jehad -jejunectomy -jejuneness -jejunity -jejunostomy -jejunum -jellaba -jellib -jelliedness -jellification -jello -jelly -jellybean -jellyfish -jellying -jemadar -jembe -jemmy -jen -jennet -jenny -jeopardousness -jeopardy -jequirity -jer -jerbil -jerboa -jereed -jeremiad -jerid -jerker -jerkin -jerkiness -jerkinhead -jeroboam -jerreed -jerry -jersey -jess -jessamine -jesse -jest -jestbook -jester -jet -jeta -jetavator -jetliner -jetport -jetsam -jetted -jettiness -jetting -jetton -jetty -jeu -jewel -jeweler -jewelfish -jeweller -jewellery -jewelry -jewelweed -jewfish -jg -jger -jiao -jib -jibba -jibber -jiber -jiffy -jig -jigger -jiggermast -jigging -jigsaw -jihad -jill -jillaroo -jillet -jillion -jilter -jim -jimigaki -jimmy -jimpness -jin -jingal -jingler -jingo -jingoism -jingoist -jingu -jinja -jinker -jinn -jinni -jinrikisha -jinx -jipijapa -jissom -jitney -jitterbug -jiujitsu -jiva -jive -jizya -jo -joannes -job -jobbed -jobber -jobbery -jobbing -jobholder -joblessness -jock -jockey -jockeyship -jocko -jockstrap -jockteleg -jocoseness -jocosity -jocularity -jocundity -jodhpur -joe -joey -jogger -joggler -johannes -john -johnin -johnny -johnnycake -joinder -joiner -joinery -joint -jointedness -jointer -jointress -jointure -jointweed -jointworm -joist -jojoba -joke -jokebook -joker -jokester -joktaleg -jole -jollification -jolliness -jollity -jolter -joltiness -jongleur -jonquil -jordan -jornada -joropo -jorum -joseph -josher -joskin -joss -josser -jostlement -jostler -jota -jotter -jotting -joual -jouk -joule -jour -journal -journalese -journalism -journalist -journalization -journalizer -journey -journeyer -journeyman -journeywork -journo -joust -jouster -joviality -jovialness -jow -jowl -joy -joyance -joyfulness -joylessness -joyousness -joyride -jr -juba -jubbah -jube -jubilance -jubilancy -jubilatio -jubilation -jubilee -jubilus -jud -judaiser -judas -judge -judger -judgeship -judgment -judicator -judicature -judicialness -judiciousness -judo -judogi -judoist -judoka -jug -jugful -juggernaut -juggins -juggler -jugglery -jughead -jugulation -jugum -juice -juicer -juiciness -jujitsu -juju -jujube -jujuism -jujuist -jujutsu -jukebox -julep -jumblement -jumbler -jumbo -jumbuck -jumper -jumpiness -jumpmaster -jumprock -junco -junction -juncture -jundy -jungle -junglegym -juniorate -juniority -juniper -junk -junket -junketeer -junketter -junkie -junkman -junkyard -junta -junto -jupe -jupon -jura -juramentado -jurat -juration -jurel -jurisconsult -jurisdiction -jurisp -jurisprudence -jurist -juror -jury -juryman -jurywoman -jus -justaucorps -juster -justice -justicer -justiceship -justiciability -justiciar -justiciarship -justicoat -justifiability -justifiableness -justification -justifier -justness -jute -jutty -juvenescence -juvenileness -juvenility -juxtaposition -k -ka -kab -kabaka -kabala -kabaragoya -kabbala -kabob -kabuki -kabuzuchi -kachina -kadi -kaf -kaffiyeh -kaftan -kago -kagu -kahuna -kaiak -kaif -kail -kailyard -kailyarder -kailyardism -kain -kainite -kainogenesis -kaiser -kaiserdom -kaiserism -kaisership -kajeput -kaka -kakapo -kakemono -kaki -kakistocracy -kal -kalam -kalanchoe -kalathos -kale -kaleidoscope -kalema -kalendar -kaleyard -kali -kalian -kalif -kalifate -kalinite -kaliph -kalmia -kalong -kalpa -kalpak -kalpis -kalsomine -kalsominer -kaltemail -kamacite -kamala -kambal -kame -kamelaukion -kami -kamikaze -kampong -kampylite -kamseen -kana -kanamycin -kane -kaneelhart -kang -kanga -kangaroo -kangarooing -kanji -kanone -kans -kantar -kantele -kantharos -kanzu -kaoliang -kaolin -kaolinisation -kaolinite -kaolinization -kaon -kapellmeister -kaph -kapok -kapote -kappa -kapuka -kaput -karabiner -karaburan -karakul -karanda -karat -karate -karma -karmadharaya -karo -karoo -kaross -karpas -karri -karrusel -karst -kart -karuna -karyogamy -karyokinesis -karyolymph -karyolysis -karyomitome -karyoplasm -karyosome -karyotin -karyotype -kas -kasbah -kasha -kasher -kashira -kashmir -kashruth -kat -katabasis -katabolism -katakana -katalase -katalysis -katalyst -katalyzer -katamorphism -kataplasia -katatonia -katcina -katcr -katharsis -kathisma -kathode -katholikos -kation -katydid -katzenjammer -kauch -kauri -kaury -kava -kaver -kayak -kayo -kazachok -kazatsky -kazoo -kb -kc -kcal -kea -keat -kebab -kebar -kebbuck -keblah -keckling -kecksy -ked -keddah -kedgeree -keef -keek -keel -keelage -keelboat -keelboatman -keelson -keener -keening -keenness -keeper -keepership -keeping -keepnet -keepsake -keeshond -keet -kef -keffiyeh -keg -kegler -kehillah -keir -keister -keitloa -kelebe -kelek -kelep -kelleg -kellet -kellion -kelly -keloid -kelotomy -kelp -kelpfish -kelpie -kelpy -kelson -kelt -kelter -kelvin -kemp -ken -kenaf -kench -kendo -kendoist -kennel -kenning -keno -kenogenesis -kenosis -kente -kentledge -kepi -keramics -keratalgia -keratectasia -keratectomy -keratin -keratinization -keratitis -keratoconus -keratode -keratoderma -keratoma -keratometer -keratometry -keratoplasty -keratoscope -keratoscopy -keratosis -keratotomy -kerb -kerbaya -kerbing -kerbstone -kerchief -kerf -kerfuffle -kermes -kermesite -kermis -kern -kernel -kernite -kernos -kero -kerogen -kerosene -kerry -kersey -kerseymere -kerygma -kestrel -ketch -ketchup -ketene -ketogenesis -ketohexose -ketolysis -ketone -ketonemia -ketonuria -ketose -ketosis -ketoxime -kettle -kettledrum -kettledrummer -ketubah -kevalin -kevel -kewpie -kex -key -keyboard -keyhole -keyman -keynote -keynoter -keypuncher -keyslot -keystone -keystroke -keyway -keyword -kfmmel -kfrsch -kg -kgf -kgr -kha -khaddar -khaki -khakis -khalif -khalifate -khalsa -khamsin -khan -khanate -khanda -khanga -khansamah -kharif -khat -khatri -khayal -kheda -khedive -khediviate -khidmatgar -khoja -khuskhus -kiaat -kiang -kiaugh -kibble -kibbutz -kibbutznik -kibe -kibitka -kibitzer -kiblah -kibosh -kickback -kickball -kickboard -kickdown -kicker -kickoff -kickshaw -kicksorter -kickstand -kicktail -kickup -kickwheel -kid -kidder -kidding -kiddishness -kiddle -kiddo -kiddy -kidnaper -kidnapper -kidney -kidneywort -kidskin -kief -kielbasa -kier -kieselguhr -kieserite -kif -kikoi -kikumon -kil -kilderkin -kilerg -kiley -kilij -killdee -killdeer -killer -killick -killickinnic -killifish -killikinick -killock -kiln -kilo -kiloampere -kilobar -kilobaud -kilocalorie -kilocurie -kilocycle -kilodyne -kilogauss -kilograin -kilogram -kilohertz -kilohm -kilojoule -kiloline -kiloliter -kilolumen -kilom -kilomegacycle -kilometer -kilometre -kilomole -kiloparsec -kilopoise -kilopound -kilostere -kiloton -kilovar -kilovolt -kilowatt -kilt -kilter -kiltie -kilting -kimberlite -kimchi -kimmer -kimono -kin -kina -kinaesthesia -kinase -kinchin -kincob -kindergarten -kindergartner -kindheartedness -kindjal -kindler -kindliness -kindling -kindness -kindredness -kindredship -kine -kinema -kinematics -kinematograph -kinematographer -kinematography -kinescope -kinesics -kinesiology -kinesthesia -kinetics -kinetograph -kinetographer -kinetography -kinetoplast -kinetoscope -kinetosis -king -kingbird -kingbolt -kingcraft -kingcup -kingdom -kingfish -kingfisher -kinghood -kinglessness -kinglet -kingliness -kingmaker -kingmaking -kingpin -kingship -kingsnake -kingwood -kinin -kink -kinkajou -kinkiness -kinkle -kinnikinnick -kino -kinoo -kinship -kinsman -kinswoman -kionectomy -kionotomy -kiosk -kiotomy -kip -kipper -kipuka -kirby -kirigami -kirk -kirkman -kirmess -kirpan -kirschwasser -kirtle -kisan -kish -kishke -kismet -kissability -kissableness -kissel -kisser -kist -kistvaen -kiswah -kit -kitambilla -kitbag -kitchen -kitchener -kitchenette -kitchenmaid -kitchenware -kite -kitenge -kiter -kith -kithara -kitling -kitsch -kittel -kitten -kittenishness -kittiwake -kitty -kiva -kiwi -kiyas -kiyi -kl -klaberjass -klangfarbe -klavern -klavier -klaxon -kleagle -klebsiella -klepht -kleptomania -kleptomaniac -klesha -klippe -klipspringer -klismos -klister -klong -kloof -klootchman -klusse -klutz -klystron -km -kmel -kmole -kn -knack -knacker -knackery -knackwurst -knag -knaidel -knap -knapper -knapsack -knapweed -knar -knave -knavery -knavishness -knawel -kneadability -kneader -kneckebrud -knee -kneecap -kneehole -kneeler -kneepad -kneepan -kneepiece -knell -knickknack -knife -knifer -kniferest -knight -knighthead -knighthood -knightliness -knish -knitter -knitting -knitwear -knives -knob -knobbiness -knobbler -knobkerrie -knockabout -knocker -knockout -knockwurst -knoll -knoller -knop -knorr -knosp -knot -knotgrass -knothole -knotroot -knotter -knottiness -knotting -knotweed -knotwork -knout -knowability -knowableness -knowe -knower -knowingness -knowledgableness -knowledge -knowledgeableness -knownothingism -knuckle -knucklebone -knucklebones -knucklehead -knuckler -knulling -knur -knurling -koa -koala -koan -kob -kobold -kodaker -kodogu -koel -kofta -koftgar -kogai -kohl -kohlrabi -koilonychia -koine -kokanee -koko -kola -kolinsky -kolkhoz -kolo -komatik -kona -konak -kondo -kongoni -konimeter -koniology -kontakion -koodoo -kook -kookaburra -koorajong -kop -kopeck -kopfring -koph -kopis -kopje -koppa -kor -koradji -kore -korfball -korma -korona -koruna -kos -kosha -koso -koto -kotower -kottabos -kotwal -kotwali -koulibiaca -koumis -kouprey -kourbash -kouros -kousso -kowhai -kowtower -kpc -kr -kraal -kraft -krait -kraken -krakowiak -krameria -krans -krater -kraurosis -kremlin -krepis -kreutzer -kriegspiel -krill -krimmer -kris -krivu -krna -kromesky -krona -krone -kroon -krs -kruller -krumhorn -krummhorn -kruna -krypton -ksi -kt -kuchen -kudos -kudu -kudzu -kueh -kufiyeh -kugel -kukri -kula -kulak -kumiss -kummerbund -kumquat -kundalini -kunzite -kurbash -kurchatovium -kurn -kurrajong -kursaal -kurta -kurtosis -kurus -kusso -kuvasz -kvass -kwacha -kwanza -kwartje -kwashiorkor -kwela -kyack -kyak -kyanite -kyat -kyathos -kyle -kylie -kylin -kylix -kyloe -kymograph -kyphoscoliosis -kyphosis -kyte -kytoon -kyu -l -la -laager -lab -labarum -labdanum -labefaction -label -labeler -labeller -labellum -labialisation -labialism -labiality -labialization -labiate -lability -labilization -labiogression -labiovelarisation -labiovelarization -labium -lablab -laboratorian -laboratory -laboredness -laborer -laboriousness -labour -labouredness -labourer -labourism -labourist -labradorite -labret -labrid -labroid -labrum -laburnum -labyrinth -labyrinthitis -labyrinthodont -lac -laccolith -lace -lacebark -lacemaking -lacer -lacerability -laceration -lacerna -lacertid -lacewing -lacewood -lacework -laches -lachrymator -lachrymatory -lachrymosity -laciness -lacing -lack -lackadaisicalness -lacker -lackerer -lackey -laconicum -laconism -lacquer -lacquerer -lacquey -lacrimation -lacrimator -lacrosse -lactalbumin -lactam -lactase -lactate -lactation -lactescency -lactescense -lactiferousness -lactobacillus -lactoflavin -lactogen -lactometer -lactone -lactonization -lactoprotein -lactoscope -lactose -lacuna -lacunar -lacunosity -lacunule -lad -ladanum -ladder -ladderman -ladderway -laddie -lader -ladhood -ladies -lading -ladino -ladle -ladleful -ladler -ladrone -lady -ladybird -ladybug -ladyfinger -ladyfish -ladyhood -ladyishness -ladykin -ladylikeness -ladylove -ladyship -ladysnow -laevorotation -laevulin -laevulose -lagan -lagen -lagena -lager -laggard -laggardness -laggen -lagger -laggin -lagging -lagniappe -lagomorph -lagoon -lagune -lah -lahar -lai -laicisation -laicism -laicization -lair -laird -lairdship -laitance -laith -laity -lake -lakefront -lakeport -laker -lakeshore -lakh -lakin -laksa -lalang -lalapalooza -lallation -lalopathy -lalophobia -laloplegia -lam -lama -lamasery -lamb -lambda -lambdacism -lambency -lambert -lambkill -lambkin -lamboy -lambrequin -lambskin -lamebrain -lamed -lamella -lamellibranch -lamellicorn -lamellosity -lameness -lamentableness -lamentation -lamenter -lamia -lamina -laminaria -lamination -laminator -lamington -laminitis -lamister -lammergeier -lamp -lampad -lampadaire -lampas -lampblack -lampern -lampers -lampion -lamplight -lamplighter -lampoon -lampooner -lampoonery -lampoonist -lamppost -lamprey -lamprophony -lamprophyre -lampshade -lampworker -lampworking -lampyrid -lamster -lanai -lance -lancejack -lancelet -lancepod -lancer -lancers -lancet -lancetfish -lancewood -lancination -land -landammann -landau -landaulet -landfall -landform -landgrave -landgraviate -landgravine -landholder -landing -landlady -landlessness -landloper -landlord -landlordism -landlordry -landlordship -landlubber -landman -landmark -landmass -landowner -landownership -landowning -landrace -landscape -landscaper -landscapist -landshark -landside -landskip -landsknecht -landslide -landsman -landsmanshaft -landwaiter -lane -langeel -langiel -langlauf -langlaufer -langouste -langrage -langsat -language -langue -languet -languette -languidness -languisher -languishment -languor -langur -laniard -lankiness -lankness -lanner -lanneret -lanolin -lanosity -lansa -lansquenet -lantana -lantern -lanternfish -lanthanide -lanthanum -lanthorn -lanuginousness -lanugo -lanyard -lap -laparectomy -laparotome -laparotomist -laparotomy -lapboard -lapel -lapful -lapidary -lapidation -lapidification -lapillus -lapin -lapis -lappage -lapper -lappet -lapse -lapser -lapsus -lapwing -laqueus -lar -lararium -larboard -larcener -larceny -larch -lard -larder -lardon -lares -largeness -largess -lariat -larithmics -lark -larker -larkiness -larkishness -larkspur -larnax -larrigan -larrikin -larrikinism -larruper -larry -larum -larva -larvicide -laryngectomee -laryngectomy -laryngitis -laryngologist -laryngology -laryngopharynx -laryngoscope -laryngoscopist -laryngoscopy -laryngotomy -larynx -lasagne -lascar -lasciviousness -laser -lash -lasher -lashing -lashkar -lasket -lass -lassie -lassitude -lasso -lassoer -laster -lastingness -lat -latah -latch -latchet -latching -latchkey -latchstring -latecomer -latency -lateness -latensification -laterality -lateran -laterite -lateroversion -latex -lath -lathe -lathee -lather -latherer -lathi -lathing -lati -latices -latifundium -latimeria -latino -latitude -latitudinarianism -latke -latria -latrine -latten -lattice -latticework -latticing -latticinio -laudability -laudableness -laudanum -laudation -laudator -lauder -lauds -laughableness -laugher -laughing -laughingstock -laughter -laumontite -launce -launcher -launchplex -launderability -launderer -launderette -laundress -laundry -laundryman -laundrywoman -laura -lauraldehyde -laurate -laureateship -laurel -laurence -laurite -laurustinus -lautenclavicymbal -lauwine -lav -lava -lavabo -lavage -lavaliere -lavaret -lavation -lavatory -laveche -lavender -laver -laverock -lavisher -lavishment -lavishness -lavolta -lavrock -law -lawabidingness -lawbook -lawbreaker -lawbreaking -lawfulness -lawgiver -lawgiving -lawine -lawing -lawlessness -lawmaker -lawmaking -lawman -lawn -lawrencium -lawsuit -lawyer -laxation -laxative -laxativeness -laxity -laxness -layabout -laydown -layer -layerage -layering -layette -layman -layoff -layout -layover -layshaft -laystall -layup -laywoman -lazar -lazaretto -laziness -lazuli -lazulite -lazurite -lazybones -lb -lbf -lc -lca -le -lea -leachability -leacher -leadenness -leader -leadership -leadoff -leadplant -leadsman -leadwort -leaf -leafage -leafbird -leafhopper -leafiness -leaflessness -leaflet -leafstalk -league -leaguer -leak -leakage -leakance -leaker -leakiness -lealty -leaner -leangle -leaning -leanness -leaper -leapfrog -leapfrogger -lear -learnedness -learner -learning -lease -leaseback -leasehold -leaseholder -leaseman -leaser -leash -leasing -leat -leather -leatherback -leatherfish -leatherflower -leatherhead -leatheriness -leatherjacket -leatherleaf -leatherneck -leatherwood -leatherwork -leatherworker -leaven -leavening -leaver -leaves -leaving -lebbek -leben -lebes -lebkuchen -lechatelierite -lechayim -lecher -lecherousness -lechery -lechuguilla -lechwe -lecithality -lecithin -lecithinase -lect -lectern -lection -lectionary -lector -lectorate -lectorship -lecture -lecturer -lectureship -lecythus -ledge -ledger -lee -leeboard -leech -leefang -leek -leeriness -leet -leeway -leftism -leftover -leftwinger -lefty -leg -legacy -legalese -legalism -legalist -legality -legalization -legate -legatee -legateship -legation -legato -legator -legend -legendist -legendry -leger -legerdemain -legerdemainist -legerity -leges -legginess -legging -legharness -leghorn -legibility -legion -legionnaire -legislation -legislator -legislatorship -legislatrix -legislature -legist -legitim -legitimacy -legitimateness -legitimation -legitimisation -legitimism -legitimist -legitimization -leglen -legman -legroom -legume -legumin -legwork -lehayim -lehr -lehua -lei -leiomyoma -leishmania -leishmaniasis -leister -leisure -leisureliness -leisureness -leitmotif -leitmotiv -lek -lekane -lekythos -lekythus -leman -lemma -lemming -lemniscate -lemniscus -lemon -lemonade -lemonfish -lempira -lemur -lender -length -lengthener -lengthiness -lengthman -leniency -lenition -lenity -leno -lens -lensman -lenticel -lenticle -lentigo -lentil -leone -leopard -leopardess -leotard -leper -lepidolite -lepidopteran -lepidopterist -lepidopterology -lepidopteron -lepidosiren -leporide -leprechaun -leprologist -leprology -leprosarium -leprosy -leprousness -leptocephalus -leptokurtosis -lepton -leptoprosopy -leptorrhiny -leptosome -leptospira -leptospirosis -leptotene -lequear -lesbian -lesbianism -lesche -lesion -lespedeza -lessee -lesseeship -lesson -lessor -leste -lestobiosis -lesya -letdown -lethality -lethargy -letter -letterer -lettergram -letterhead -lettering -letterman -letterpress -letters -letterset -lettuce -letup -leu -leucemia -leucine -leucite -leucitite -leucoblast -leucocidin -leucocyte -leucocythemia -leucocytosis -leucoderma -leucoline -leucoma -leucomaine -leucon -leuconostoc -leucopenia -leucoplast -leucopoiesis -leucorrhea -leucorrhoea -leucosis -leucosticte -leucotaxine -leucotome -leucotomy -leud -leukoblast -leukocidin -leukocyte -leukocythemia -leukocytopenia -leukocytosis -leukoderma -leukoma -leukopedesis -leukopenia -leukopoiesis -leukorrhea -leukosis -leukotaxine -leukotomy -lev -levade -levant -levanter -levantera -levantine -levanto -levarterenol -levator -leveche -levee -leveler -leveller -levelness -lever -leverage -leveret -leviathan -levier -levigation -levigator -levin -levirate -levitation -levitator -levity -levoglucose -levorotation -levulose -lewis -lewisite -lewisson -lex -lexeme -lexicality -lexicog -lexicographer -lexicography -lexicologist -lexicology -lexicon -lexicostatistics -lexigraphy -lexis -ley -lf -lg -lgth -lh -lhb -li -liability -liaison -liana -liang -liar -liard -lib -libation -libeccio -libel -libelant -libelee -libeler -libellant -libellee -liber -liberalisation -liberaliser -liberalism -liberalist -liberality -liberalization -liberalizer -liberalness -liberation -liberator -libertarian -libertarianism -liberticide -libertinage -liberty -libra -librarian -librarianship -library -libration -librettist -libretto -libri -lice -licence -licensee -licenser -licensor -licentiate -licentiateship -licentiation -licentiousness -licet -lich -lichee -lichen -lichenification -lichenin -lichenism -lichenologist -lichenology -lichi -licht -licker -lickerishness -licking -lickspittle -licorice -lictor -lid -lidia -lido -lidocaine -liebfraumilch -lied -liegeman -lien -lienectomy -lienitis -lientery -lier -lierne -lieu -lieutenancy -lieutenant -life -lifeblood -lifeboat -lifeboatman -lifeguard -lifelessness -lifelikeness -lifeline -lifer -lifesaver -lifetime -lifework -liftboy -lifter -liftoff -ligament -ligamentum -ligan -ligand -ligation -ligature -ligeance -liger -light -lightboat -lightener -lightening -lighter -lighterage -lighterman -lightface -lightfastness -lighthead -lightheartedness -lighthouse -lighting -lightlessness -lightness -lightning -lightship -lightsomeness -lightwood -lignaloes -ligne -lignification -lignin -lignite -lignocaine -lignocellulose -ligroin -ligula -ligule -ligure -likability -likableness -likeability -likeableness -likelihood -likeness -liker -likin -liking -likker -likuta -lila -lilac -lilt -lily -limacon -limaion -limb -limberneck -limberness -limbo -limbus -lime -limeade -limekiln -limelight -limelighter -limen -limequat -limerick -limes -limestone -limesulfur -limewater -limewood -limey -liminess -limit -limitableness -limitarian -limitation -limitedness -limiter -limitlessness -limmer -limner -limnologist -limnology -limonene -limonite -limousine -limper -limpet -limpidity -limpidness -limpkin -limpness -limulus -lin -linac -linage -linalool -linarite -linch -linchpin -lincrusta -linctus -lindane -linden -lindy -line -lineage -lineament -lineamentation -linearisation -linearity -linearization -lineation -linebacker -linebreeding -linecaster -lineman -linen -linenfold -liner -linesman -ling -linga -lingam -lingcod -lingerer -lingerie -lingo -lingoe -lingonberry -lingua -linguini -linguist -linguistician -linguistics -linhay -liniment -linin -lining -link -linkage -linkboy -linkman -linkwork -linn -linnet -lino -linocut -linoleate -linoleum -linotyper -linotypist -linsang -linseed -linsey -linstock -lint -lintel -linter -lintwhite -linyphiid -lion -lioncel -lioness -lionet -lionfish -lionheart -lionheartedness -lionisation -lioniser -lionization -lionizer -lip -lipase -lipectomy -lipemia -lipid -lipocaic -lipochrome -lipocyte -lipogram -lipogrammatism -lipogrammatist -lipography -lipolysis -lipoma -lipopexia -lipoprotein -lipotropism -lippen -lipper -lippie -lipstick -liq -liquation -liquefacient -liquefaction -liquefier -liquer -liquescence -liqueur -liquid -liquidambar -liquidation -liquidator -liquidity -liquidizer -liquidness -liquidus -liquor -liquorice -lira -lirella -liriodendron -liripipe -lisle -lisp -lisper -lissomeness -lissomness -list -listel -listener -lister -listerellosis -listeria -listeriasis -listeriosis -listing -listlessness -litany -litas -litchi -liter -literacy -literalisation -literaliser -literalism -literalist -literality -literalization -literalizer -literalness -literariness -literation -literator -literature -lith -litharge -lithemia -litheness -lithia -lithiasis -lithium -litho -lithograph -lithographer -lithography -lithol -litholapaxy -lithology -lithomarge -lithometeor -lithonephrotomy -lithophane -lithophone -lithophyte -lithopone -lithoprinter -lithosere -lithosol -lithosphere -lithotomist -lithotomy -lithotrite -lithotritist -lithotrity -lithuresis -lithuria -litigant -litigation -litigator -litigiosity -litigiousness -litmus -litotes -litre -litter -litterbug -littleneck -littleness -littrateur -litu -liturgics -liturgiologist -liturgiology -liturgism -liturgist -liturgy -lituus -livability -livableness -liveability -liveableness -livebearer -livelihood -liveliness -livener -liveness -liver -liverberry -liverishness -liverleaf -liverwort -liverwurst -livery -liveryman -lives -livestock -liveware -lividity -lividness -livingness -livraison -livre -liwen -lixiviation -lixivium -liza -lizard -lizardfish -lizzie -ll -llama -llano -ller -lm -ln -loach -load -loader -loading -loadstar -loadstone -loaf -loafer -loaiasis -loam -loaminess -loan -loanblend -loaner -loaning -loanshift -loather -loathing -loathness -loathsomeness -loaves -lob -lobation -lobber -lobby -lobbyer -lobbyism -lobbyist -lobe -lobectomy -lobelia -lobeline -loblolly -lobo -lobola -lobolo -lobotomy -lobscouse -lobster -lobstering -lobstick -lobulation -lobule -lobulus -lobus -lobworm -loca -locale -localisation -localiser -localism -localist -locality -localization -localizer -localness -locater -location -locator -loch -loche -lochia -lochus -loci -lock -lockage -lockbox -locker -locket -lockjaw -locknut -lockout -locksmith -locksmithery -locksmithing -lockup -loco -locoed -locoing -locoism -locoman -locomobility -locomotion -locomotive -locomotiveness -locomotivity -locoweed -loculation -locule -loculus -locum -locus -locust -locusta -locution -locutorium -locutory -lode -loden -lodestar -lodestone -lodge -lodger -lodging -lodgment -lodicule -loe -loellingite -loess -loft -lofter -loftiness -loftsman -log -logan -loganberry -logarithm -logbook -loge -logger -loggerhead -loggia -logginess -logging -logia -logic -logicality -logicalness -logician -logicism -loginess -logion -logistic -logistician -logistics -logjam -loglog -logo -logogram -logographer -logography -logogriph -logomach -logomachist -logomachy -logopaedics -logopedics -logorrhea -logorrhoea -logos -logotype -logotypy -logperch -logroller -logrolling -logway -logwood -loiasis -loin -loincloth -loiterer -lokacara -lollapalooza -loller -lollipop -lolly -loma -loment -lomentum -lonelihood -loneliness -loneness -loner -lonesomeness -longa -longan -longanimity -longbeard -longboat -longbow -longcloth -longe -longeron -longevity -longhair -longhand -longhead -longheadedness -longhorn -longicorn -longies -longing -longingness -longitude -longness -longship -longshoreman -longsleever -longsomeness -longspur -longueur -lonicera -loo -looby -loof -loofa -loofah -looie -lookdown -looker -lookout -lookum -loom -looming -loon -looniness -loop -looper -loophole -loosebox -loosener -looseness -loosestrife -loosing -loot -looter -loper -lophobranch -lophophore -lopolith -lopper -lopseed -lopsidedness -lopstick -loq -loquaciousness -loquacity -loquat -loquitur -loran -lord -lording -lordliness -lordling -lordosis -lordship -lore -lorgnette -lorgnon -lorica -lorication -lorikeet -lorimer -loris -lornness -lorry -lory -losableness -losel -loser -loss -lota -lote -lotion -lotted -lotter -lottery -lotting -lotto -lotus -loudmouth -loudness -loudspeaker -lough -louie -louis -loun -lounger -loup -loupcervier -loupe -louringness -louse -lousewort -lousiness -lout -loutishness -loutrophoros -louvar -louver -louvre -lovability -lovableness -lovage -lovat -loveability -loveableness -lovebird -lovegrass -lovelessness -loveliness -lovelock -lovelornness -lover -lovesickness -lovey -lovingness -lowan -lowball -lowboy -lowbrow -lowbrowism -lowerclassman -lowland -lowlife -lowlihead -lowliness -lowness -lox -loxodrome -loxodromics -loyalism -loyalist -loyalness -loyalty -lozenge -ls -lsc -lst -lt -luau -lub -lubber -lubberliness -lube -lubra -lubricant -lubrication -lubricator -lubricity -lubritorium -lucarne -luce -lucence -lucency -lucerne -luces -lucida -lucidity -lucidness -lucifer -luciferase -luciferin -luck -luckie -luckiness -lucklessness -lucrativeness -lucre -lucubration -lucubrator -lud -ludicrousness -ludo -lues -luff -luffa -luge -luggage -lugger -luggie -lugsail -lugubriosity -lugubriousness -lugworm -lukewarmness -lukewarmth -lulab -lulav -lullaby -luller -lullingite -lulu -lumbago -lumber -lumberer -lumbering -lumberingness -lumberjack -lumberjacket -lumberman -lumbermill -lumberyard -lumbrical -lumbricalis -lumen -luminance -luminary -luminescence -luminophore -luminosity -luminousness -lumisterol -lummox -lump -lumpenproletariat -lumper -lumpfish -lumpiness -lumpishness -lumpsucker -lunacy -lunarian -lunation -lunch -luncheon -luncheonette -luncher -lunchhook -lunchroom -lunchtime -lune -lunes -lunette -lung -lungan -lunge -lungee -lunger -lungfish -lungi -lungworm -lungwort -lungyi -lunkhead -lunt -lunula -lupin -lupoma -lupulin -lupulone -lupus -lur -lurcher -lurdan -lurement -lurer -luridness -lurker -lusciousness -lushness -lust -luster -lusterer -lustering -lusterware -lustfulness -lustihood -lustiness -lustration -lustre -lustreware -lustring -lustrousness -lustrum -lutanist -lute -lutecium -lutein -luteinization -lutenist -luteolin -luteotropin -lutestring -lutetium -luthern -luting -lutist -lux -luxation -luxe -luxulianite -luxuriance -luxuriation -luxuriousness -luxury -lv -lwm -lwop -lwp -lx -lyc -lycae -lycanthrope -lycanthropy -lyceum -lych -lychee -lychnis -lychnoscope -lycine -lycopod -lycopodium -lycosid -lyddite -lye -lygaeid -lymph -lymphad -lymphadenitis -lymphadenoma -lymphangioma -lymphangitis -lymphatolysis -lymphoadenoma -lymphoblast -lymphocyte -lymphocytosis -lymphogranuloma -lymphoidocyte -lymphoma -lymphopenia -lymphopoiesis -lymphosarcoma -lyncher -lynchet -lynching -lynx -lyolysis -lyophilization -lyre -lyrebird -lyricalness -lyricisation -lyricism -lyricist -lyricization -lyrism -lyrist -lysimeter -lysin -lysine -lysis -lysosome -lysozyme -lyssa -lyssophobia -lytta -m -ma -maar -mabela -mac -macaco -macadam -macadamia -macadamise -macaque -macaroni -macaroon -macaw -maccaboy -maccaroni -mace -macebearer -macedoine -macer -macerater -maceration -macerator -macfarlane -machaira -machan -machete -machicolation -machinability -machination -machinator -machine -machinery -machinist -machismo -machree -machtpolitik -machzor -macintosh -mack -mackerel -mackinaw -mackintosh -mackle -macle -maco -macoma -macram -macrencephaly -macro -macrobiotics -macrocephalus -macrocephaly -macroclimate -macroclimatology -macrocosm -macrocyst -macrocyte -macrodome -macrodontia -macroeconomics -macrogamete -macrograph -macrography -macrolinguistics -macrolith -macromolecule -macron -macronucleus -macronutrient -macrophage -macrophysics -macropsia -macroptery -macrosporangium -macrospore -macrostomia -macrostructure -macruran -macula -maculation -macule -macumba -madafu -madaillon -madam -madame -maddeningness -madder -madeleine -mademoiselle -madhouse -madman -madness -madras -madre -madrepore -madreporite -madrigal -madrigalist -madril -madrilene -madtom -madwoman -madwort -maelstrom -maenad -maenadism -maestro -mafficker -mafioso -maftir -mag -magazine -magazinism -magazinist -magdalen -mage -magenta -maggie -maggot -magic -magician -magilp -magistery -magistracy -magistrality -magistrate -magistrateship -magma -magmatism -magnalium -magnanimity -magnate -magnesia -magnesite -magnesium -magnet -magnetics -magnetisation -magnetiser -magnetism -magnetite -magnetizability -magnetization -magnetizer -magneto -magnetochemistry -magnetoelectricity -magnetogenerator -magnetograph -magnetohydrodynamics -magnetometer -magnetometry -magneton -magnetooptics -magnetosphere -magnetostriction -magnetothermoelectricity -magnetron -magnification -magnificence -magnifico -magniloquence -magnitude -magnolia -magnum -magot -magpie -maguey -magus -mahaleb -maharajah -maharanee -maharani -maharishi -mahatma -mahayanist -mahdism -mahewu -mahjong -mahlstick -mahogany -mahonia -mahout -mahseer -mahua -maid -maidan -maiden -maidenhair -maidenhead -maidenhood -maidenship -maidhood -maidservant -maihem -mail -mailability -mailbag -mailbox -mailcatcher -mailcoach -mailer -maill -maillot -mailman -mailsack -maimedness -maimer -mainbrace -mainland -mainlander -mainliner -mainmast -mains -mainsail -mainsheet -mainspring -mainstay -mainstream -maintainer -maintainor -maintenance -maintop -maintopsail -maiolica -maisonette -maithuna -maize -majesty -majolica -major -majorette -majority -majuscule -makefast -maker -makeshiftness -makeup -makeweight -makimono -making -makluk -mako -maksoorah -makuta -malabsorption -malacca -malachite -malacia -malacologist -malacology -malacostracan -maladaptation -maladdress -maladjustment -maladministrator -maladroitness -malady -malaguena -malaise -malam -malamute -malanders -malanga -malange -malapertness -malapportionment -malapropism -malaria -malarkey -malassimilation -malate -malcontentedness -maleate -malediction -malee -malefaction -malefactor -maleficence -malemute -maleness -malfeasance -malformation -mali -malice -maliciousness -malie -malignancy -maligner -malignity -malihini -malines -malingerer -malison -malkin -mall -mallam -mallanders -mallard -malleability -malleableness -malleation -mallee -mallemuck -mallenders -malleolus -mallet -malleus -mallow -malm -malmsey -malnutrition -malocclusion -malodorousness -malonylurea -malposition -malpractice -malpractitioner -malt -maltase -maltha -malthene -maltiness -malting -maltol -maltose -maltster -malvasia -malversation -malvoisie -malwa -mam -mama -mamba -mambo -mamelon -mamey -mamilla -mamma -mammal -mammalian -mammality -mammalogist -mammalogy -mammee -mammet -mammilla -mammock -mammon -mammonism -mammonist -mammonite -mammoth -mammotropin -mammula -mammy -mamoncillo -mampara -mamzer -man -mana -manacle -management -manager -manageress -managership -manak -manakin -manana -manas -manatee -manbote -manche -manchet -manchette -manchineel -manciple -mandacaru -mandala -mandamus -mandarin -mandatary -mandate -mandi -mandible -mandilion -mandioca -mandir -mandola -mandolin -mandolinist -mandorla -mandragora -mandrake -mandrel -mandrill -manducation -mandyas -mane -maneuver -maneuverability -maneuverer -mangabey -manganate -manganese -manganite -manganophyllite -mange -mangelwurzel -manger -mangler -mango -mangonel -mangosteen -mangrove -manhole -manhood -manhunt -mania -maniac -manicotti -manicure -manicurist -manifer -manifestant -manifestation -manifesto -manifolder -manifoldness -manikin -manilla -manille -manioc -maniple -manipulative -manipulator -manism -manit -manitou -manjak -mankind -manlessness -manlikeness -manliness -manna -mannan -mannequin -manner -mannerism -mannerist -mannerlessness -mannerliness -manness -mannikin -mannishness -mannitol -mannose -manoeuvre -manometer -manor -manorialism -manpower -manque -manroot -manrope -mansard -manse -manservant -mansion -manslaughter -manslayer -manslaying -manstealing -manstopper -mansuetude -manta -mantapa -manteau -mantel -mantelet -mantelletta -mantellone -mantelpiece -manteltree -mantid -mantilla -mantis -mantispid -mantissa -mantle -mantlet -mantletree -mantling -mantra -mantrap -mantua -manubrium -manucode -manuf -manufactory -manufacturer -manuka -manumission -manumitter -manure -manus -manuscript -manway -manyplies -manzanilla -map -maple -mapping -maquette -maqui -maquillage -maquis -mara -marabou -marabout -maraboutism -marabunta -maraca -marasca -maraschino -marasmus -marathon -marathoner -marauder -maravedi -marbelization -marble -marbleization -marbler -marbles -marbling -marc -marcasite -marcel -marcella -marceller -marcescence -marcher -marchesa -marchese -marchioness -marchland -marchpane -marconigram -marconigraph -mare -marekanite -maremma -mareograph -marezzo -marg -marga -margarine -margarita -margarite -margay -marge -margent -margin -margination -margravate -margrave -margravine -marguerite -maria -mariachi -marialite -mariculture -maridienne -marigold -marigraph -marijuana -marimba -marina -marinade -marinara -marination -mariner -marionette -mariposa -maritage -marjoram -mark -markdown -markedness -marker -market -marketability -marketableness -marketer -marketing -marketplace -markhor -marking -markka -marksman -markswoman -markup -marl -marlin -marline -marlinespike -marlinsucker -marlite -marmalade -marmite -marmoset -marmot -marocain -maroquin -maror -marouflage -marque -marquee -marquess -marquessate -marquetry -marquis -marquisate -marquise -marquisette -marriage -marriageability -marriageableness -marron -marrow -marrowbone -marrowfat -marse -marseille -marseilles -marsh -marshal -marshall -marshiness -marshland -marshmallow -marsipobranch -marsupial -marsupialization -marsupium -mart -martagon -martellato -marten -martensite -martialism -martialist -martialness -martin -martinet -martingale -martini -martlet -martnet -martyr -martyrdom -martyrisation -martyrium -martyrologist -martyrology -martyry -marvellousness -marver -mary -marzipan -mas -masalliance -masc -mascara -mascaron -mascle -mascon -mascot -masculineness -masculinity -masculinization -maser -mash -mashgiach -mashgiah -mashie -masjid -mask -maskalonge -maskanonge -masker -maskinonge -maslin -masochism -masochist -mason -masonry -masque -masquer -masquerade -masquerader -mass -massacre -massage -massager -massagist -massasauga -masseter -masseur -masseuse -massicot -massif -massiness -massiveness -massivity -masslessness -massotherapy -mast -mastaba -mastax -mastectomy -master -masterdom -masterfulness -masterhood -masterliness -masterpiece -mastership -mastersinger -masterstroke -mastery -masthead -mastic -mastication -mastiff -mastigium -mastigophoran -mastitis -mastix -mastocarcinoma -mastodon -mastoidectomy -mastoiditis -mastopathy -mastopexy -masturbation -masurium -mat -mata -matador -match -matchboard -matchboarding -matchbook -matchbox -matcher -matchlessness -matchlock -matchmaker -matchmaking -matchmark -matchstick -matchwood -mate -matelassa -matelot -matelote -mater -materfamilias -material -materialisation -materialiser -materialism -materialist -materiality -materialization -materializer -materialness -materiel -maternalism -maternity -mateyness -math -mathematician -mathematics -maths -matilda -matinae -matindol -matiness -mating -matins -matis -matisse -matlo -matoke -matrass -matriarch -matriarchalism -matriarchate -matriarchy -matric -matrices -matricide -matriculation -matriculator -matrilineage -matrilocality -matrimony -matrix -matron -matronage -matronhood -matronliness -matronship -matsu -mattamore -matte -matter -matting -mattins -mattock -mattoid -mattrass -mattress -maturation -maturement -matureness -maturer -maturity -matzah -matzo -matzoon -mauby -maud -maudlinism -maudlinness -mauler -maulstick -maulvi -maumet -maumetry -maunche -maund -maunderer -maundy -mausoleum -mauve -maverick -mavin -mavis -mavourneen -maw -mawkin -mawkishness -mawsie -max -maxilla -maxilliped -maxim -maxima -maximalist -maximation -maximin -maximization -maximizer -maximum -maximus -maxisingle -maxiskirt -maxixe -maxwell -maya -mayflower -mayfly -mayhem -mayonnaise -mayor -mayoralty -mayoress -mayorship -maypole -maypop -mayweed -mazaedium -mazair -mazard -mazarine -mazdoor -maze -mazedness -maziness -mazopathy -mazuma -mazurka -mazzard -mb -mc -meacon -mead -meadow -meadowlark -meadowsweet -meagerness -meagreness -meal -mealie -mealies -mealiness -mealtime -mealworm -meanderer -meanie -meaning -meaningfulness -meaninglessness -meaningness -means -meanspiritedness -meantime -meany -measles -measurability -measurableness -measure -measurelessness -measurement -measurer -measuringworm -meat -meatball -meathead -meatiness -meatman -meatus -mecamylamine -mech -mechanic -mechanicality -mechanicalness -mechanician -mechanics -mechanism -mechanist -mechanization -mechanizer -mechanomorphism -mechanotherapist -mechanotherapy -mechitzah -meck -meclizine -mecometer -meconium -medaka -medal -medallion -medallist -meddlesomeness -media -mediacy -mediaevalism -mediaevalist -mediant -mediastinum -mediateness -mediation -mediatisation -mediatization -mediator -mediatorship -mediatory -medic -medicament -medication -medicine -medick -medico -medievalism -medievalist -medina -mediocrity -meditation -meditativeness -meditator -medius -medlar -medley -medulla -medullation -medullization -medusa -mee -meed -meekness -meerkat -meerschaum -meeter -meeting -meetness -meg -megabit -megabuck -megacephaly -megacity -megacycle -megadeath -megadontia -megagamete -megahertz -megajoule -megakaryoblast -megalith -megaloblast -megalocardia -megalocephaly -megalomania -megalomaniac -megalopolis -megalopolitanism -megalopsia -megalosaur -megameter -megaphone -megapod -megapode -megarad -megaron -megascope -megasporangium -megaspore -megasporophyll -megass -megathere -megatherm -megaton -megavolt -megawatt -megger -megillah -megilp -megohm -megrim -megrims -mehitzah -meiny -meionite -meiophylly -meiosis -mel -mela -melaleuca -melamed -melamine -melammed -melancholia -melancholiness -melancholy -melanin -melanism -melanite -melanocyte -melanoderm -melanoma -melanosis -melaphyre -melatonin -melder -melee -melena -meletin -melezitose -melilot -melinite -melioration -meliorator -meliorism -meliorist -meliority -melisma -mell -meller -mellifluousness -mellite -mellitum -mellophone -mellowness -melodeon -melodia -melodics -melodion -melodist -melodizer -melodrama -melodramatist -melody -meloid -melolonthine -melon -melos -meltability -meltage -melter -meltingness -melton -meltwater -melungeon -mem -member -membership -membrane -membranophone -memento -memo -memoir -memorability -memorableness -memorandum -memorialisation -memorialiser -memorialist -memorialization -memorializer -memorization -memorizer -memory -memsahib -men -menacer -menacme -menad -menadione -menagerie -menaquinone -menarche -menat -mendaciousness -mendacity -mendelevium -mender -mendicancy -mendicity -mending -mene -menhaden -menhir -meningitis -meningocele -meningococcus -meniscocytosis -meniscus -menology -menopause -menophania -menorah -menorrhagia -menoschesis -menostaxis -mense -menservants -menses -menshevism -menstruation -menstruum -mensurability -mensuration -menswear -mentalism -mentalist -mentality -menthene -menthol -menticide -mentioner -mentor -mentorship -menu -menuiserie -menuisier -menyie -mepacrine -meperidine -mephitis -meprobamate -meq -merbromin -merc -mercantilism -mercaptan -mercaptide -mercaptopurine -mercenariness -mercer -mercerization -mercerizer -mercery -merchandise -merchandiser -merchant -merchantableness -merchantman -merchet -mercifulness -mercilessness -mercurialisation -mercurialism -mercurous -mercury -mercy -merengue -meretriciousness -merganser -merger -mericarp -merida -meridian -meringue -merino -merisis -meristem -merit -meritocracy -meritoriousness -merk -merkin -merle -merlin -merlon -mermaid -merman -merogony -meroplankton -meros -merozoite -merrimack -merriment -merrymaker -merrymaking -merrythought -mesa -mescal -mescaline -mesdames -mesdemoiselles -mesembryanthemum -mesencephalon -mesenchyme -mesenteritis -mesenteron -mesentery -mesh -meshrebeeyeh -meshugaas -meshugana -meshwork -mesitylene -mesmerisation -mesmeriser -mesmerism -mesmerist -mesmerization -mesmerizer -mesnalty -mesobenthos -mesoblast -mesocardium -mesocarp -mesocephal -mesocephaly -mesocolon -mesoderm -mesogastrium -mesoglea -mesognathism -mesognathy -mesolite -mesometeorology -mesomorph -mesomorphism -mesomorphy -meson -mesonephros -mesopause -mesopeak -mesophyll -mesophyte -mesorectum -mesorrhiny -mesosphere -mesothelioma -mesothelium -mesothorax -mesothorium -mesotron -mesquite -mess -message -messaline -messan -messenger -messieurs -messin -messiness -messmate -messroom -messuage -mestee -mester -mestizo -mestranol -metabiosis -metabolism -metabolite -metacarpus -metacenter -metacentre -metachromatism -metacinnabar -metacinnabarite -metacryst -metafemale -metagalaxy -metage -metagenesis -metagnathism -metal -metalanguage -metalepsis -metalinguistics -metall -metallicity -metallicize -metallisation -metallist -metallization -metallocene -metallographer -metallographist -metallography -metalloid -metallophone -metallotherapy -metallurgy -metalsmith -metalware -metalwork -metalworking -metamale -metamathematician -metamathematics -metamer -metamere -metamerism -metamorphism -metamorphosis -metanephros -metanitrophenol -metaph -metaphase -metaphor -metaphoricalness -metaphosphate -metaphrase -metaphrast -metaphys -metaphysic -metaphysics -metaphyte -metaplasia -metaplasm -metapolitics -metaprotein -metapsychology -metascope -metasomatism -metastability -metastasis -metatarsus -metatheory -metathesis -metathesise -metathorax -metatoluidine -metatroph -metatrophy -metaxylem -metazoan -metempiricist -metempirics -metempsychosis -metencephalon -meteor -meteorite -meteoritics -meteorograph -meteorography -meteoroid -meteorol -meteorology -meter -meterage -metestrus -methacrylate -methadone -methaemoglobin -methane -methanol -methantheline -metheglin -methenamine -methionine -metho -method -methodicalness -methodiser -methodizer -methodology -methotrexate -methoxide -methoxybenzene -methoxychlor -meths -methyl -methylal -methylamine -methylation -methylator -methylbenzene -methylcatechol -methyldopa -methylene -methylheptenone -methylnaphthalene -methylparaben -methyltrinitrobenzene -methyprylon -metic -meticulosity -meticulousness -metoestrus -metol -metonym -metonymy -metope -metralgia -metre -metrician -metricism -metrics -metridium -metrification -metrifier -metrise -metrist -metritis -metrization -metro -metrology -metronidazole -metronome -metropolis -metropolitanism -metrorrhagia -metroscope -metrotome -mettle -meu -mews -mezcal -mezcaline -mezereon -mezereum -mezuza -mezuzah -mezzanine -mezzotint -mezzotinter -mf -mfd -mg -mgd -mgr -mgt -mho -mi -miaow -miasma -miazine -mib -mica -micawberism -mice -micelle -micher -michigan -mickery -mickey -micky -micra -microaerophile -microaerophilic -microampere -microanalysis -microanalyst -microangstrom -microbacterium -microbalance -microbarograph -microbe -microbicide -microbiologist -microbiology -microcephalia -microcephaly -microchemistry -microcircuit -microclimate -microclimatologist -microclimatology -microcline -micrococcus -microconstituent -microcopy -microcosm -microcoulomb -microcrystal -microcrystallinity -microcurie -microcyte -microdetector -microdissection -microdistillation -microdontia -microdot -microdyne -microeconomics -microelectronics -microelectrophoresis -microelement -microenvironment -microfarad -microfiche -microfilm -microfossil -microgamete -microgamy -microglia -microgram -micrograph -micrographer -micrography -microgroove -microhabitat -microhardness -microhenry -microhm -microlambert -microlite -microliter -microlith -micrologist -microlux -micrometeorite -micrometeorogram -micrometeorograph -micrometeorology -micrometer -micrometry -micromho -micromicrocurie -micromillimeter -microminiaturization -micromotion -micron -micronucleus -micronutrient -microorganism -micropalaeontology -micropaleontologist -micropaleontology -microparasite -micropathology -microphage -microphone -microphonism -microphot -microphotograph -microphotography -microphotometer -microphotometric -microphysics -microphyte -microprint -microprocessor -micropsia -micropyle -micropyrometer -microreader -microreproduction -micros -microscope -microscopist -microscopy -microsecond -microsegment -microseism -microsiemens -microsome -microspectrophotometry -microsporangium -microspore -microsporophyll -microstat -microstethoscope -microstructure -microsurgery -microswitch -microtherm -microtome -microtomist -microtomy -microtonality -microtone -microvolt -microwatt -microwave -micrurgy -micturition -midafternoon -midair -midband -midbrain -midcourse -midday -midden -middlebreaker -middlebrow -middlebrowism -middlebuster -middlehand -middleman -middlesail -middletone -middleweight -middy -midfield -midge -midget -midgut -midinette -midiron -midland -midleg -midline -midnight -midnoon -midpoint -midrash -midrib -midriff -midsection -midshipman -midshipmite -midst -midstream -midsummer -midterm -midtown -midweek -midwife -midwifery -midwinter -midyear -mien -mig -miggle -mightiness -mignonette -migraine -migrant -migration -mihrab -mikado -mike -mikron -mikvah -mil -milady -milage -milch -mildew -mildness -mile -mileage -mileometer -milepost -miler -milestone -milfoil -miliarensis -miliaria -milieu -milit -militancy -militantness -militariness -militarisation -militarism -militarist -militarization -militia -militiaman -milium -milk -milker -milkfish -milkiness -milkmaid -milkman -milko -milksop -milksopism -milkweed -milkwood -milkwort -mill -millboard -millcake -milldam -millefeuille -millefiori -millefleurs -millenarianism -millenary -millennium -millepede -millepore -miller -millerite -millet -milliangstrom -milliard -milliare -millibar -millibarn -millieme -millier -millifarad -milligal -milligram -millihenry -milliliter -millilitre -millilux -millime -millimeter -millimetre -millimicron -millimole -milline -milliner -millinery -milling -milliohm -million -millionaire -millionth -millipede -milliphot -millipoise -millirem -milliroentgen -millisecond -millisiemens -millivolt -millpond -millrace -millrind -millrun -millstone -millstream -millwheel -millwork -millwright -milo -milometer -milord -milquetoast -milreis -milt -milter -mimbar -mime -mimeograph -mimer -mimesis -mimetite -mimicker -mimicry -mimosa -mimosis -min -mina -minah -minaret -mincemeat -mincer -mind -minder -mindfulness -mindlessness -minefield -minelayer -miner -mineral -mineralizer -mineralocorticoid -mineralogist -mineralogy -mineraloid -minestrone -minesweeper -minge -minglement -mingler -minhag -miniature -miniaturist -miniaturization -minibus -minicab -minicam -minicomputer -minidress -minikin -minim -minima -minimalist -minimax -minimisation -minimiser -minimization -minimizer -minimum -mining -minion -minipill -miniskirt -minister -ministerialist -ministerium -ministration -ministry -minium -miniver -minivet -mink -minkfish -minnesinger -minnie -minnow -minny -minority -minster -minstrel -minstrelsy -mint -mintage -minter -minuend -minuet -minuscule -minute -minuteness -minutia -minx -minyan -miombo -miosis -mir -miracidium -miracle -miraculousness -mirador -mirage -mire -mirepoix -miriness -mirk -mirliton -mirror -mirth -mirthfulness -mirthlessness -mirza -mis -misadaptation -misadjustment -misadministration -misadventure -misadvice -misalignment -misallegation -misalliance -misallotment -misanalysis -misanthrope -misanthropy -misappellation -misapplier -misapprehension -misapprehensiveness -misarrangement -misarticulation -misassertion -misassignment -misauthorization -misbehaver -misbehavior -misbelief -misc -miscalculation -miscalculator -miscaller -miscarriage -miscegenation -miscellanist -miscellany -mischance -mischanter -mischief -mischievousness -misclassification -miscoinage -miscomputation -misconceiver -misconception -misconduct -misconstruction -miscreance -miscreancy -miscreant -miscreator -miscue -misdate -misdeed -misdelivery -misdemeanant -misdemeanor -misdemeanour -misdirection -misdoer -mise -misease -miseducation -misemphasis -miser -miserableness -miserere -misericord -misericordia -miserliness -misery -misestimation -misfashion -misfeasance -misfeasor -misfeature -misfit -misformation -misfortune -misgiving -misguidance -misguidedness -misguider -mishanter -mishap -mishit -mishmash -misidentification -misinference -misinformant -misinformation -misinformer -misinstruction -misintention -misinterpretation -misinterpreter -misjoinder -misknowledge -mislayer -misleader -misliker -mislocation -mismanagement -mismanager -mismarriage -misnavigation -misnomer -miso -misocainea -misogamist -misogamy -misogynist -misogyny -misologist -misology -misoneism -misopaedist -misopedist -misorganization -mispagination -misperception -misperformance -mispick -mispickel -misplacement -mispleading -mispractice -mispractise -misprint -mispriser -misprision -mispronouncer -mispronunciation -misproportion -misproposal -mispunctuation -misquotation -misquoter -misreader -misreckon -misreference -misreliance -misreporter -misrepresentation -misrepresenter -misruler -misrun -missa -missal -missayer -misshapenness -misshipment -missile -missilery -mission -missionary -missioner -missis -missive -misspelling -misstatement -misstater -misstep -missus -missy -missyllabification -mist -mistakableness -mistake -mistakenness -mistaker -mistal -mistbow -mistcoat -misteacher -mister -mistigris -mistletoe -mistral -mistranscription -mistranslation -mistreatment -mistress -mistrial -mistruster -mistrustfulness -misunderstander -misunderstanding -misunion -misusage -misuse -misuser -misventure -mite -miter -miterer -mitergate -miterwort -mither -mithridate -mithridatism -miticide -mitigation -mitigator -mitis -mitochondrion -mitokoromono -mitosis -mitra -mitrailleuse -mitre -mitrewort -mitt -mitten -mittimus -mitzvah -mixability -mixableness -mixedness -mixer -mixologist -mixoploid -mixoploidy -mixture -mizrah -mizzen -mizzenmast -mk -mkt -ml -mlange -mlx -mm -mmf -mmfd -mnage -mneme -mnemonics -mo -moa -moan -moat -mob -mobber -mobbishness -mobbism -mobbist -mobcap -mobilisation -mobiliser -mobility -mobilization -mobilizer -mobocracy -mobocrat -mobster -moc -moccasin -mocha -mochila -mockernut -mockers -mockery -mockingbird -modality -mode -model -modeler -modeling -modeller -modem -moderateness -moderation -moderator -moderatorship -modernisation -moderniser -modernism -modernity -modernization -modernizer -modernness -modesty -modicum -modifiability -modifiableness -modificand -modification -modifier -modillion -modiolus -modishness -modiste -modularity -modulation -modulator -module -modulus -mofette -mog -mogilalia -mogo -mogote -mogul -mohair -mohawk -mohel -mohur -mohwa -moidore -moiety -moiler -moire -moistener -moistness -moisture -moit -mojarra -moke -moksha -mol -mola -molality -molar -molarity -molasses -mold -moldavite -moldboard -moldiness -molding -moldwarp -mole -molecularity -molecule -molehill -moleskin -molestation -molester -molilalia -moll -mollah -mollescence -mollification -mollifier -mollusc -molluscum -molly -mollycoddler -moloch -molter -molvi -moly -molybdate -molybdenite -molybdenum -mom -mome -moment -momentariness -momentousness -momentum -momism -mommy -momser -mon -mona -monacillo -monad -monades -monadism -monadnock -monal -monarch -monarchism -monarchist -monarchy -monarda -monas -monastery -monasticism -monazite -monde -mondo -moneme -monergism -monetarist -monetise -monetization -money -moneybag -moneybags -moneychanger -moneyer -moneylender -moneymaker -moneymaking -moneywort -mong -monger -mongo -mongol -mongolism -mongoose -mongrel -mongrelisation -mongreliser -mongrelism -mongrelness -monies -moniker -monism -monist -monition -monitor -monitorship -monitress -monk -monkery -monkey -monkeyishness -monkeypot -monkfish -monkhood -monkshood -monnion -monobasicity -monobath -monocarp -monochasium -monochloride -monochord -monochromat -monochromaticity -monochromatism -monochrome -monochromist -monochromy -monocle -monocline -monoclinism -monocoque -monocot -monocotyledon -monocracy -monoculture -monocycle -monocycly -monocyte -monodactyl -monodactylism -monodactyly -monodrama -monodramatist -monody -monoecism -monoecy -monofilament -monogamist -monogamy -monogenesis -monogenism -monogenist -monogram -monograph -monographer -monographist -monogyny -monohull -monohybrid -monohydrate -monoid -monokini -monolater -monolatrist -monolatry -monolayer -monolith -monolithism -monologue -monomania -monomaniac -monomark -monomer -monometallism -monometer -monomethylamine -monomial -mononucleosis -monophagia -monophobia -monophony -monophthong -monophthongization -monoplane -monoplanist -monoplegia -monopode -monopodium -monopody -monopolisation -monopoliser -monopolism -monopolist -monopoly -monopolylogue -monopropellant -monopsony -monopteron -monopteros -monorail -monorhyme -monosaccharide -monosemy -monosome -monostich -monostrophe -monosyllabicity -monosyllabism -monosyllable -monosyllogism -monosymmetry -monosymptomatic -monotheism -monotint -monotone -monotonousness -monotony -monotreme -monotriglyph -monotron -monotropy -monotype -monovalence -monovalency -monoxide -mons -monsieur -monsoon -monster -monstrance -monstrosity -monstrousness -montage -montbretia -monte -monteith -montero -montgolfier -month -monticule -montilla -monument -monumentalism -monumentality -monzonite -mood -moodiness -moolah -moolvee -moolvie -moon -moonbeam -moonbow -mooncalf -mooneye -moonfish -moonflower -mooniness -moonlight -moonlighting -moonquake -moonraker -moonrise -moonscape -moonseed -moonset -moonshine -moonshiner -moonshot -moonsif -moonstone -moonwort -moor -moorage -moorcock -moorfowl -moorhen -mooring -moorland -moorwort -moose -moosemilk -moosewood -mooter -mootness -mop -mopboard -moped -moper -mopoke -moppet -moquette -mor -mora -moraine -morale -moralioralist -moralism -moralist -morality -morass -moratorium -moray -morbidity -morbilli -morceau -morcha -mordacity -mordancy -mordent -moreen -morel -morello -moreness -morepork -morganite -morgen -morgue -moribundity -morion -mormyrid -morn -morning -morocco -moron -moronism -moronity -moror -moroseness -morosity -morph -morphallaxis -morpheme -morphine -morphinism -morphogenesis -morphol -morpholine -morphologist -morphology -morphoneme -morphonemics -morphophoneme -morphophonemics -morphosis -morphotonemics -morro -morrow -morse -morsel -mort -mortadella -mortality -mortar -mortarboard -mortgage -mortgagee -mortgagor -mortice -mortician -mortification -mortifier -mortise -mortiser -mortling -mortmain -mortuary -morula -morwong -mosaic -mosaicism -mosaicist -mosasaur -moschatel -moshav -mosocecum -mosque -mosquito -mosquitofish -moss -mossback -mossbunker -mossie -mossiness -mosstrooper -mosstroopery -mosstrooping -mot -mote -motel -motet -moth -mothball -mother -motherhood -mothering -motherland -motherlessness -motherliness -motherwort -motif -motility -motion -motioner -motivation -motive -motivelessness -motivity -motmot -motocross -moton -motoneuron -motor -motorbicycle -motorbike -motorboat -motorboating -motorbus -motorcade -motorcar -motorcoach -motorcycle -motorcyclist -motordrome -motoring -motorisation -motorist -motorization -motorman -motorway -motte -mottlement -mottler -motto -mottramite -moue -mouflon -moujik -moulage -mould -mouldboard -mouldiness -moulding -mouldwarp -moulin -moulter -mound -mounding -moundsman -mountain -mountaineer -mountaineering -mountainousness -mountainside -mountaintop -mountebank -mounter -mounting -mourner -mourning -mouse -mousebird -mouser -mousetail -mousetrap -mousiness -mousing -moussaka -mousse -mousseline -moustache -moutarde -mouth -mouthbreeder -mouthbrooder -mouthful -mouthiness -mouthpart -mouthpiece -mouthwash -mouton -movability -movableness -moveability -moveableness -movelessness -movement -mover -movie -movieland -moviemaker -mower -mowing -mowrah -moxa -moxie -moxieberry -mozzarella -mozzetta -mp -mpg -mph -mphps -mrem -mridang -ms -msalliance -msl -mster -mt -mtd -mtg -mtge -mtier -mtn -mu -muchness -mucidness -mucigen -mucilage -mucin -muck -muckamuck -mucker -muckerism -muckrake -muckraker -mucksweat -muckworm -mucluc -mucopolysaccharide -mucoprotein -mucosa -mucosity -mucoviscidosis -mucro -mucronation -mucus -mud -mudcat -muddiness -muddledness -muddlehead -muddlement -muddler -mudfish -mudguard -mudir -mudlark -mudpack -mudpuppy -mudra -mudskipper -mudslinger -mudslinging -mudspringer -mudstone -muenster -muesli -muezzin -muffin -muffineer -muffler -mufti -mug -mugger -muggins -mugwort -mugwump -mugwumpery -mugwumpism -mujik -mujtahid -mukluk -mulatto -mulberry -mulch -mule -muleta -muleteer -mulga -muliebrity -mulier -mulierty -mulishness -mullah -mullein -muller -mullet -mulligan -mulligatawny -mulligrubs -mullion -mullite -mullock -mulloway -multeity -multibirth -multiblade -multicasting -multichannel -multicharge -multichord -multichrome -multicide -multicircuit -multicollinearity -multicolor -multicore -multicourse -multicuspid -multidiscipline -multiengine -multiexhaust -multifariousness -multiflora -multifoil -multigravida -multihead -multihearth -multihull -multijet -multilane -multilobe -multimegaton -multimeter -multimillion -multimillionaire -multimotor -multinomial -multipara -multipartisan -multipath -multiphotography -multiplane -multiplepoinding -multiplet -multiplex -multiplicand -multiplication -multiplicity -multiplier -multiprogramming -multiracialism -multireflex -multishot -multisonorousness -multitester -multitude -multitudinousness -multivalence -multiversity -multivibrator -multiwall -multure -mum -mumbler -mummer -mummery -mummification -mummy -mumps -mun -muncher -mundungus -munga -municipality -municipalization -munificence -munificentness -muniment -munnion -munshi -munsif -munt -muntin -muntjac -muon -murage -mural -muralist -murder -murderer -murderousness -murdrum -murex -murgeon -muriate -murk -murmur -murmuration -murmurer -murphy -murra -murrain -murre -murrelet -murther -mus -muscadel -muscadine -muscarine -muscat -muscatel -muscavado -muscid -muscle -muscleman -muscovado -muscovite -musculamine -muscularity -musculature -museologist -museology -muser -musette -museum -mush -musher -mushiness -mushroom -music -musicale -musicality -musicalness -musician -musicianship -musicologist -musicology -musjid -musk -muskallonge -muskeg -muskellunge -musket -musketeer -musketry -muskie -muskiness -muskmelon -muskone -muskrat -muslin -muso -musquash -mussel -mussuck -mustache -mustachio -mustang -mustard -mustee -musth -mustiness -mut -mutability -mutableness -mutagen -mutant -mutarotation -mutase -mutation -mutch -mutchkin -mutilation -mutilator -mutineer -mutinousness -mutiny -mutism -mutoscope -mutt -mutterer -mutton -muttonhead -mutualisation -mutualism -mutualization -mutuel -mutule -muumuu -muzhik -muzziness -muzzle -muzzleloader -muzzler -mv -mwalimu -myalgia -myalism -myall -myasthenia -myatonia -myatrophy -mycelium -mycetoma -mycetozoan -mycobacterium -mycocecidium -mycol -mycologist -mycology -mycorrhiza -mycosis -mycosozin -mycostat -mydriasis -myelencephalon -myelin -myelination -myelitis -myeloblast -myelography -myeloma -myg -myiasis -mylohyoideus -mylonite -mym -myna -myoatrophy -myocardiogram -myocardiograph -myocarditis -myocardium -myoclonus -myocoele -myocyte -myoedema -myogenicity -myoglobin -myoglobinuria -myograph -myography -myohemoglobin -myohemoglobinuria -myokymia -myology -myoma -myoneuralgia -myoneurasthenia -myopathy -myope -myopia -myosin -myosis -myosotis -myotome -myotomy -myotonia -myriagram -myrialiter -myriameter -myriapod -myriare -myrica -myriopod -myrmecologist -myrmecology -myrmecophile -myrmecophilism -myrmecophily -myrobalan -myron -myrrh -myrtle -mysophilia -mystagogue -mystagogy -mysteriousness -mystery -mystic -mysticality -mysticalness -mysticise -mysticism -mysticity -mystification -mystifier -mystique -myth -mythicalness -mythiciser -mythicizer -mythoclast -mythogenesis -mythographer -mythography -mythol -mythologist -mythologization -mythologizer -mythology -mythomania -mythomaniac -mythopoeia -mythopoeism -mythopoeist -mythos -myxasthenia -myxedema -myxoedema -myxoma -myxomatosis -myxomatous -myxomycete -myxovirus -mzee -mzungu -n -nabber -nabob -nabobery -nabobism -nabobship -nacelle -nacre -nadir -nae -naething -naevus -nagana -naggingness -nagor -nagual -naiad -nail -nailbrush -nailer -nailfile -nailhead -nailsickness -nainsook -naira -naiskos -naivete -naivetivet -naivety -nakedness -naker -nalorphine -namability -namaste -namaycush -name -nameability -named -nameplate -namer -namesake -nametape -naming -namma -nan -nana -nanako -nance -nancy -nanism -nankeen -nanny -nannyberry -nanocurie -nanometer -nanometre -nanoplankton -nanosecond -nanowatt -naos -napalm -nape -napery -naphtha -naphthalene -naphthene -naphthol -naphthyl -napier -napkin -naplessness -napoleon -nappa -nappe -napper -nappy -naprapath -naprapathy -narceine -narcissism -narcissist -narcissus -narcist -narcoanalysis -narcolepsy -narcoma -narcomania -narcomaniac -narcosis -narcosynthesis -narcotic -narcoticalness -narcoticness -narcotisation -narcotism -narcotist -nard -nardoo -narghile -nark -narrater -narration -narrative -narrator -narrowness -narthex -narwhal -nasalism -nasality -nasalization -nascence -nascency -naseberry -nasion -nasologist -nasology -nasopharynx -nastiness -nasturtium -nasute -nasuteness -nat -natality -natation -natator -natatorium -natheless -nation -nationaliser -nationalism -nationalist -nationality -nationalization -nationalizer -nationhood -nativeness -nativism -nativist -nativity -natl -natrium -natrolite -natron -natterjack -nattiness -naturalisation -naturaliser -naturalism -naturalist -naturalization -naturalizer -nature -naturism -naturopath -naturopathy -nauch -naught -naughtiness -naumachia -naumachy -nauplius -nausea -nauseation -nauseousness -naut -nautch -nauticality -nautiloid -nautilus -nav -navar -navarin -nave -navel -navelwort -navette -navew -navicert -navicula -navig -navigability -navigableness -navigation -navigator -navvy -navy -nawab -nawabship -nay -nazir -nearness -nearside -neatness -neb -nebbish -nebris -nebula -nebulisation -nebuliser -nebulization -nebulizer -nebulosity -nebulousness -necessarian -necessarianism -necessariness -necessitarianism -necessitation -necessitousness -necessitude -necessity -neck -neckband -neckcloth -neckerchief -necking -necklace -necklet -neckline -neckpiece -necktie -neckwear -necremia -necro -necrobacillosis -necrobiosis -necrolatry -necrologist -necrology -necromancer -necromancy -necromania -necromimesis -necrophile -necrophilia -necrophilism -necrophobia -necropolis -necropsy -necroscopy -necrosis -necrotomist -necrotomy -nectar -nectareousness -nectarine -nectary -neddy -needer -needfire -neediness -needle -needlecord -needlecraft -needlefish -needleful -needlepoint -needlewoman -needlework -neencephalon -neep -nef -nefariousness -negatedness -negater -negation -negationist -negativeness -negativism -negativist -negativity -negator -negatron -neglectedness -neglecter -neglectfulness -neglector -negligee -negligence -negligibility -negligibleness -negotiability -negotiant -negotiation -negotiator -negritude -negus -neigh -neighbor -neighborhood -neighborliness -neighbour -neighbourhood -neighbourliness -neisseria -nek -nekton -nelly -nelson -nelumbo -nemathecium -nemathelminth -nematocyst -nematode -nematologist -nematology -nemertean -nemesia -nemo -nene -neoarsphenamine -neoclassic -neoclassicism -neoclassicist -neocolonialism -neocolonialist -neocortex -neodymium -neoformation -neoimpressionism -neolith -neologism -neologist -neology -neomycin -neon -neonate -neophyte -neophytism -neoplasm -neoplasticism -neoplasticist -neoplasty -neoprene -neostigmine -neostyle -neoteny -neoterism -neotype -neoytterbium -nepenthe -nepenthes -neper -nepheline -nephelinite -nephelometer -nephew -nephogram -nephograph -nephologist -nephology -nephoscope -nephralgia -nephrectomy -nephridium -nephrism -nephrite -nephritis -nephrocele -nephrolith -nephrolithotomy -nephron -nephropathy -nephrosis -nephrostome -nephrotome -nephrotomise -nephrotomy -nephrotoxicity -nepit -nepman -nepotism -neptunium -neral -nereis -nerol -nervation -nerve -nervelessness -nerviness -nerving -nervousness -nervule -nervuration -nervure -nescience -nesosilicate -ness -nesselrode -nest -nester -nestler -nestling -net -netball -netman -netsuke -netting -nettle -nettler -netty -network -neuk -neume -neuralgia -neurasthenia -neuration -neuraxitis -neurectomy -neurilemma -neurite -neuritis -neuroanatomist -neuroblast -neurocoele -neuroembryological -neuroembryology -neurofibril -neuroglia -neurogram -neurohypophysis -neurolemma -neurologist -neurology -neuroma -neuromast -neuron -neuropath -neuropathology -neuropathy -neurophysiologist -neurophysiology -neuroplasm -neuropsychiatry -neuropteran -neuropteron -neurosis -neurosurgeon -neurosurgery -neuroticism -neurotomy -neurotrophy -neurotropism -neurula -neuston -neut -neutralise -neutralism -neutrality -neutralization -neutretto -neutrino -neutron -neutrophil -neutrosphere -nevermind -nevus -newcomer -newel -newfangledness -newground -newlywed -newmarket -newness -news -newsagent -newsbeat -newsboard -newsboy -newsbreak -newscast -newscaster -newscasting -newsdealer -newshawk -newshen -newsiness -newslessness -newsletter -newsmagazine -newsman -newsmonger -newspaper -newspaperdom -newspaperman -newspaperwoman -newspeak -newsprint -newsreader -newsreel -newsstand -newswoman -newsworthiness -newt -newton -nexus -ngaio -ngoma -ngwee -niacin -niacinamide -nib -nibbana -nibbler -niblick -niccolite -niceness -nicety -niche -nick -nickel -nickelodeon -nickeltype -nickey -nicknack -nickname -nicknamer -nickpoint -nicotiana -nicotinamide -nicotine -nicotinism -nictitation -nidana -niddering -nide -nidification -nidus -niece -niellist -niello -nies -nieve -niff -niggard -niggardliness -niggler -night -nightcap -nightclub -nightclubber -nightdress -nightfall -nightgown -nighthawk -nightie -nightingale -nightjar -nightlife -nightmare -nightmarishness -nightrider -nightriding -nightshade -nightshirt -nightside -nightspot -nightstand -nightwalker -nightwear -nighty -nigrification -nigritude -nigrosine -nihil -nihilism -nihilist -nihility -nikethamide -nikkud -nil -nilgai -nim -nimbleness -nimblewit -nimbostratus -nimbus -nimiety -nincompoop -nincompoopery -nine -ninebark -ninepence -ninepins -nineteen -ninety -ninny -ninnyhammer -ninon -niobite -niobium -nipa -niphablepsia -nipper -nipplewort -nirvana -nisus -nit -nitchie -niter -niton -nitramine -nitrate -nitration -nitre -nitride -nitriding -nitrification -nitrile -nitrite -nitrobenzene -nitrocellulose -nitrochloroform -nitrogen -nitrogenation -nitrogenisation -nitrogenization -nitroglycerin -nitromannitol -nitromersol -nitrometer -nitromethane -nitroparaffin -nitrophenol -nitrosamine -nitroso -nitrosyl -nitrotrichloromethane -nitwit -nivation -nixer -niyama -nizamate -nob -nobbler -nobelium -nobility -nobleman -nobleness -noblesse -nocardia -nock -noctambule -noctambulism -noctambulist -noctiluca -noctilucence -noctuid -noctule -nocturn -nocturnality -nocturne -nocuousness -noddle -noddy -node -nodosity -nodule -nodus -noegenesis -noesis -noetics -nog -nogg -noggin -nogging -noil -noise -noiselessness -noisemaker -noisiness -noisomeness -nom -noma -nomad -nomadism -nomarch -nomarchy -nombril -nome -nomen -nomenclator -nomenclature -nominalism -nominalist -nomination -nominator -nominee -nomism -nomocanon -nomocracy -nomogram -nomographer -nomography -nomologist -nomology -nonabandonment -nonabdication -nonabidingness -nonabjuration -nonabolition -nonabortiveness -nonabrasiveness -nonabridgment -nonabsentation -nonabsoluteness -nonabsolution -nonabsolutist -nonabsorbability -nonabsorbency -nonabsorption -nonabstainer -nonabstemiousness -nonabstention -nonabstractedness -nonabstractness -nonabusiveness -nonacademicalness -nonaccedence -nonacceleration -nonaccent -nonacceptance -nonacceptation -nonaccession -nonaccidentalness -nonaccommodatingness -nonaccompaniment -nonaccord -nonaccretion -nonaccumulation -nonaccumulativeness -nonacid -nonacidity -nonacquaintance -nonacquaintanceship -nonacquiescence -nonacquisitiveness -nonacquittal -nonaction -nonactivation -nonactivator -nonactivity -nonactuality -nonactualness -nonacuity -nonacuteness -nonadaptability -nonadaptabness -nonadaptation -nonadapter -nonadaptor -nonaddict -nonadeptness -nonadherence -nonadhesion -nonadhesiveness -nonadjacency -nonadjournment -nonadjudication -nonadjustability -nonadjuster -nonadjustment -nonadjustor -nonadmissibility -nonadmissibleness -nonadmission -nonadopter -nonadoption -nonadorner -nonadornment -nonadvancement -nonadvantageousness -nonadventitiousness -nonadventurousness -nonadvertence -nonadvertency -nonadvocacy -nonadvocate -nonaffectation -nonaffiliation -nonaffinity -nonaffirmance -nonaffirmation -nonage -nonagenarian -nonaggression -nonagon -nonagreement -nonalien -nonalienation -nonalignment -nonalinement -nonalkaloid -nonallegation -nonalliterativeness -nonallotment -nonambiguity -nonambitiousness -nonamenability -nonamenableness -nonamendment -nonamorousness -nonamphibiousness -nonamputation -nonanalogicalness -nonanalogousness -nonanimal -nonanimality -nonanimation -nonannexation -nonannihilability -nonannulment -nonanonymity -nonanonymousness -nonanticipation -nonaphasiac -nonapparentness -nonappealability -nonappealingness -nonappearance -nonappeasability -nonappendance -nonappendence -nonapplicability -nonapplicabness -nonapplication -nonapportionment -nonappreciation -nonappreciativeness -nonapprehensibility -nonapprehension -nonapproachability -nonapproachabness -nonarbitrariness -nonargumentativeness -nonarmament -nonarraignment -nonarrival -nonarrogance -nonarrogancy -nonarticulateness -nonascendance -nonascendancy -nonascendence -nonascendency -nonascertainableness -nonascertainment -nonascetic -nonasceticism -nonaspersion -nonaspirate -nonassault -nonassertion -nonassertiveness -nonassessability -nonassignabilty -nonassignment -nonassimilability -nonassimilation -nonassistant -nonassister -nonassociability -nonassociation -nonassonance -nonassumption -nonastringency -nonathlete -nonattachment -nonattainability -nonattainment -nonattendance -nonattestation -nonattributiveness -nonaudibility -nonaudibleness -nonauthentication -nonauthenticity -nonauthoritativeness -nonautonomousness -nonavailability -nonavoidableness -nonavoidance -nonbachelor -nonballoting -nonbanishment -nonbarbarousness -nonbase -nonbeauty -nonbeing -nonbeliever -nonbelligerency -nonbeneficence -nonbeneficialness -nonbenevolence -nonbibulousness -nonbiliousness -nonbindingness -nonblamableness -nonblamefulness -nonblasphemousness -nonblasphemy -nonbleach -nonboaster -nonbookishness -nonborrower -nonbourgeois -nonbreach -nonbreeder -nonbrowser -nonbuoyancy -nonburdensomeness -nonburgage -nonbusyness -noncaffeine -noncandescence -noncapillarity -noncapitalist -noncapitulation -noncapriciousness -noncaptiousness -noncarbohydrate -noncarbon -noncarbonate -noncarnivorousness -noncarrier -noncastigation -noncategoricalness -noncatholicity -noncausality -noncausation -noncausativeness -nonce -noncelebration -noncensoriousness -noncensurableness -nonceremoniousness -noncertainty -noncertification -noncertitude -nonchalance -nonchallenger -nonchampion -nonchangeableness -noncharitableness -nonchastisement -nonchastity -nonchemist -nonchivalrousness -nonchurch -nonchurchgoer -noncircuitousness -noncirculation -noncircumspectness -noncitation -noncitizen -noncivilian -nonclarification -nonclassicality -nonclassification -nonclearance -nonclosure -noncoagulability -noncoagulation -noncoalescence -noncoercion -noncoerciveness -noncogency -noncognition -noncognizance -noncohabitation -noncoherence -noncoherency -noncohesion -noncohesiveness -noncoinage -noncoincidence -noncollaboration -noncollapsibility -noncollection -noncolloid -noncollusion -noncollusiveness -noncolorability -noncolorableness -noncom -noncombatant -noncombination -noncombustibility -noncombustion -noncomicality -noncomicalness -noncommemoration -noncommencement -noncommendableness -noncommerciality -noncommiseration -noncommitment -noncommodiousness -noncommunication -noncommunicativeness -noncommunist -noncompensation -noncompetency -noncompetitiveness -noncomplacence -noncomplacency -noncomplaisance -noncompletion -noncompliance -noncompliant -noncomplicity -noncompositeness -noncomposure -noncomprehension -noncomprehensiveness -noncompressibility -noncompression -noncompulsion -noncompulsoriness -noncomputation -nonconcealment -nonconceiving -nonconcentratiness -nonconcentration -nonconcentricity -nonconcession -nonconcision -nonconclusion -nonconclusiveness -nonconcurrence -noncondemnation -noncondensation -noncondensibility -noncondescendingness -noncondescension -noncondiment -noncondonation -nonconduciness -nonconductibility -nonconductor -nonconfederation -nonconfidence -nonconfidentiality -nonconfidentialness -nonconfinement -nonconfirmation -nonconfiscation -nonconformance -nonconformist -nonconformity -nonconfrontation -noncongestion -noncongruence -noncongruency -noncongruity -noncongruousness -nonconjugality -nonconjugation -nonconjunction -nonconnectivity -nonconnivance -nonconnivence -nonconnubiality -nonconscientiousness -nonconsciousness -nonconscription -nonconsecration -nonconsecutiveness -nonconsent -nonconsequence -nonconsequentiality -nonconsequentialness -nonconservation -nonconsideration -nonconsignment -nonconsolidation -nonconsonance -nonconspirator -nonconstant -nonconstraint -nonconstruability -nonconstructiveness -nonconsummation -nonconsumption -nonconsumptiveness -noncontact -noncontagion -noncontagiousness -noncontamination -noncontemplativeness -noncontemporaneousness -noncontemptibility -noncontemptibleness -noncontemptuousness -noncontention -noncontestation -noncontiguity -noncontiguousness -noncontinence -noncontinency -noncontinuance -noncontinuation -noncontinuity -noncontinuousness -noncontraband -noncontraction -noncontradiction -noncontrariety -noncontribution -noncontributiveness -noncontributor -noncontrivance -noncontumaciousness -nonconvergence -nonconvergency -nonconversableness -nonconversance -nonconversancy -nonconversion -nonconvertibility -nonconvertibleness -nonconveyance -nonconviction -nonconviviality -noncooperation -noncooperationist -noncooperator -noncoordination -noncorporation -noncorporeality -noncorrection -noncorrectional -noncorrelation -noncorrespondence -noncorroboration -noncorrosiveness -noncorrupter -noncorruptibility -noncorruptibleness -noncorruptness -noncosmopolitanism -noncosmopolite -noncosmopolitism -noncottager -noncouperationist -noncouperator -noncovetousness -noncreativeness -noncreativity -noncredence -noncredibility -noncredibleness -noncreditableness -noncreditor -noncredulousness -noncriminality -noncriticalness -nonculmination -nonculpability -nonculpableness -noncultivability -noncultivation -nonculture -noncumbrousness -noncurativeness -noncuriosity -noncuriousness -noncurtailment -nondamnation -nondancer -nondangerousness -nondeafness -nondebater -nondebilitation -nondebtor -nondecadence -nondecadency -nondecalcification -nondecasyllable -nondeceit -nondeceleration -nondeception -nondeceptiveness -nondeciduousness -nondecision -nondecisiveness -nondeclaration -nondeclarer -nondecoration -nondecorousness -nondedication -nondeduction -nondefalcation -nondefeasance -nondefeasibility -nondefeasibness -nondefeat -nondefection -nondefectiveness -nondefector -nondefendant -nondefense -nondefensibility -nondefensibleness -nondefensiveness -nondeference -nondefiance -nondefiantness -nondeficiency -nondefilement -nondefinability -nondefiner -nondefiniteness -nondefinitiveness -nondeflation -nondeflection -nondeformation -nondeformity -nondegeneracy -nondegenerateness -nondegeneration -nondegradation -nondeist -nondelegate -nondelegation -nondeleteriousness -nondeliberateness -nondeliberation -nondelicateness -nondelineation -nondeliquescence -nondeliriousness -nondeliverance -nondelivery -nondemise -nondemobilization -nondemocracy -nondemolition -nondemonstrability -nondemonstrableness -nondemonstrativeness -nondenial -nondenseness -nondensity -nondenunciation -nondeodorant -nondeparture -nondependability -nondependableness -nondependance -nondependancy -nondependence -nondependency -nondepletion -nondeportation -nondepositor -nondepravation -nondepravity -nondepreciation -nondepression -nondeprivation -nonderivability -nonderogation -nonderogatoriness -nondescriptiveness -nondesecration -nondesistance -nondesistence -nondestruction -nondestructiveness -nondesulfurization -nondetachability -nondetachment -nondetention -nondeterioration -nondeterminant -nondetermination -nondeterminativeness -nondeterminist -nondevelopment -nondeviation -nondeviousness -nondevoutness -nondexterity -nondexterousness -nondiabolicalness -nondiaphanousness -nondichogamy -nondictation -nondictatorialness -nondifferentiation -nondiffidence -nondiffractiveness -nondiffusibleness -nondiffusion -nondigestibility -nondigestibleness -nondigestion -nondilatability -nondilation -nondiligence -nondilution -nondiplomacy -nondirigibility -nondisagreement -nondisarmament -nondisastrousness -nondisbursement -nondiscernment -nondisclosure -nondiscontinuance -nondiscovery -nondiscrimination -nondiscursiveness -nondisfigurement -nondisingenuousness -nondisintegration -nondisjunction -nondismemberment -nondismissal -nondisparateness -nondisparity -nondispensation -nondispersal -nondispersion -nondisposal -nondisputatiousness -nondissidence -nondissipatedness -nondissolution -nondistillation -nondistinguishableness -nondistortedness -nondistortion -nondistribution -nondistributiveness -nondisturbance -nondivergence -nondivergency -nondiversification -nondivinity -nondivisibility -nondivision -nondivisiveness -nondivorce -nondivulgence -nondominance -nondomination -nondoubter -nondrinker -nondriver -nondualism -nonduality -nonductility -nonduplication -nonduplicity -nondurability -nondurableness -noneagerness -nonebullience -nonebulliency -noneconomy -nonedibility -nonedibness -noneducation -noneffeteness -nonefficacy -nonefficiency -noneffusion -noneffusiveness -nonego -nonegregiousness -nonejection -nonelaborateness -nonelasticity -nonelect -nonelection -nonelectiveness -nonelector -nonelectrification -nonelectrolyte -nonelevation -noneligibility -nonelimination -nonelite -nonelongation -nonelopement -noneloquence -nonelucidation -nonelusiveness -nonemancipation -nonembarkation -nonembellishment -nonembezzlement -nonemendation -nonemergence -nonemigrant -nonemigration -nonemission -nonemotionalism -nonemotiveness -nonempiric -nonempiricism -nonemployment -nonemulation -nonemulousness -nonenactment -nonenclosure -nonencroachment -nonendorsement -nonendowment -nonenemy -nonenforcement -nonengagement -nonengineering -nonentertainment -nonentity -nonentrant -nonentry -nonenunciation -nonenviableness -nonenviousness -nonequability -nonequableness -nonequalization -nonequation -nonequilibrium -nonequivalence -nonequivalency -nonerasure -nonerection -nonerroneousness -noneruditeness -nonerudition -noneruption -nones -nonespionage -nonespousal -nonestablishment -nonestimableness -nonesuch -nonet -noneternalness -noneternity -nonethereality -nonetherealness -nonethicalness -nonethyl -noneuphoniousness -nonevacuation -nonevaluation -nonevaporation -nonevasion -nonevasiveness -nonevent -noneviction -nonevilness -nonevolutionist -nonexactingness -nonexaction -nonexaggeration -nonexcavation -nonexcessiveness -nonexchangeability -nonexcitableness -nonexclusion -nonexculpation -nonexcusableness -nonexecution -nonexemplification -nonexemption -nonexercise -nonexerciser -nonexertion -nonexhaustiveness -nonexhibition -nonexhibitionism -nonexhortation -nonexistence -nonexistentialism -nonexpansibility -nonexpansion -nonexpansiveness -nonexpedience -nonexpediency -nonexpeditiousness -nonexpiation -nonexpiration -nonexpiry -nonexploitation -nonexplosiveness -nonexportation -nonexposure -nonexpressiveness -nonexpulsion -nonextendibleness -nonextensibility -nonextensibness -nonextension -nonextensiveness -nonextermination -nonexternality -nonextinction -nonextortion -nonextraction -nonextradition -nonextraneousness -nonextrication -nonexuberance -nonexuberancy -nonexultation -nonfacetiousness -nonfacility -nonfactiousness -nonfactitiousness -nonfaddist -nonfailure -nonfallaciousness -nonfamily -nonfanatic -nonfantasy -nonfarcicality -nonfarcicalness -nonfascist -nonfashionableness -nonfastidiousness -nonfatality -nonfatalness -nonfavorableness -nonfavorite -nonfealty -nonfeasance -nonfeasibility -nonfeasibleness -nonfecundity -nonfeebleness -nonfelicitousness -nonfelicity -nonfeloniousness -nonfermentability -nonfermentation -nonferociousness -nonferocity -nonfertility -nonferventness -nonfervidness -nonfestiveness -nonfeverishness -nonfiction -nonfictitiousness -nonfidelity -nonfighter -nonfigurativeness -nonfilter -nonfinding -nonfiniteness -nonfisherman -nonfissility -nonfixation -nonflagitiousness -nonflagrancy -nonflakiness -nonflatulence -nonflatulency -nonflexibility -nonflexibleness -nonflirtatiousness -nonfluctuation -nonfluency -nonfluentness -nonfluid -nonfluidity -nonfluorescence -nonflux -nonfood -nonforbearance -nonforeclosure -nonforeigness -nonforest -nonforfeiture -nonform -nonformalism -nonformalness -nonformation -nonformidability -nonformidableness -nonformulation -nonfortification -nonfortuitousness -nonfragileness -nonfragility -nonfrangibility -nonfraternity -nonfraudulence -nonfraudulency -nonfreedom -nonfreeman -nonfrequence -nonfrequency -nonfriction -nonfrigidity -nonfrigidness -nonfrugality -nonfrugalness -nonfruition -nonfrustration -nonfugitiveness -nonfulfillment -nonfundamentalist -nonfusibility -nonfusion -nong -nongarrulity -nongarrulousness -nongas -nongaseness -nongelatinousness -nongenuineness -nongermination -nonglare -nonglucose -nongod -nongold -nongolfer -nongovernance -nongovernment -nongracefulness -nongraciosity -nongraciousness -nongraduate -nongraduation -nongrain -nongraphicalness -nongratification -nongratuitousness -nongravitation -nongravity -nongregariousness -nongrievousness -nonguarantee -nonguidance -nonguilt -nongutturalness -nongymnast -nonhabitability -nonhabitableness -nonhabitation -nonhabitualness -nonhallucination -nonhandicap -nonharmoniousness -nonharmony -nonhazardousness -nonheading -nonheinousness -nonhereditability -nonhereditariness -nonheritability -nonheritor -nonhero -nonheroicalness -nonheroicness -nonhistoricalness -nonhistrionicalness -nonhomogeneity -nonhomogeneousness -nonhostility -nonhouseholder -nonhumaness -nonhumanist -nonhumorousness -nonhumus -nonidentification -nonidentity -nonidiomaticalness -nonidolatrousness -nonignitability -nonignitibility -nonignominiousness -nonillion -nonillionth -nonilluminant -nonillumination -nonillusiveness -nonillustration -nonimaginariness -nonimitability -nonimitativeness -nonimmanence -nonimmanency -nonimmersion -nonimmigrant -nonimmigration -nonimmunity -nonimmunization -nonimpact -nonimpairment -nonimpartation -nonimpartment -nonimpeachability -nonimpeachment -nonimperativeness -nonimperialness -nonimperiousness -nonimplement -nonimplication -nonimportation -nonimposition -nonimpressionability -nonimpressionabness -nonimprovement -nonimpulsiveness -nonimputability -nonimputableness -nonimputativeness -nonincandescence -nonincestuousness -nonincident -nonincitement -noninclination -noninclusion -noninclusiveness -nonincrease -nonincrimination -nonindictment -nonindividuality -noninductivity -nonindulgence -nonindustrialization -nonindustriousness -noninertness -noninfallibility -noninfallibleness -noninfantry -noninfection -noninfectiousness -noninfiniteness -noninflammability -noninflammableness -noninflation -noninfluence -noninformativeness -noninfraction -noninfusibility -noninfusibness -noninhabitability -noninhabitance -noninhabitancy -noninherence -noninheritability -noninheritabness -noninjuriousness -noninjury -noninoculation -noninsect -noninsertion -noninsistence -noninsistency -noninstitution -noninstructiveness -noninsurance -nonintegration -nonintellectualness -nonintelligence -noninterchangeability -noninterchangeableness -nonintercourse -noninterdependence -noninterdependency -noninterference -nonintermittence -nonintermittentness -noninterpolation -noninterposition -noninterpretability -noninterpretiveness -noninterruptedness -nonintervention -noninterventionalist -noninterventionist -nonintrospectiveness -nonintroversiveness -nonintrovertedness -nonintuitiveness -noninvidiousness -noninvincibility -noninvincibleness -noniridescence -nonironicalness -nonirrationalness -nonirrevocability -nonirrevocableness -nonirrigation -nonirritability -nonirritableness -nonirritancy -nonjoinder -nonjuror -nonjury -nonlegitimacy -nonlegume -nonliability -nonliberalism -nonliberation -nonlibidinousness -nonlicentiate -nonlicentiousness -nonlife -nonlimitation -nonlinearity -nonliquidation -nonliteracy -nonliteralness -nonliterariness -nonlitigation -nonlitigiousness -nonlixiviation -nonlocation -nonlogic -nonlogicality -nonlogicalness -nonloser -nonlover -nonloyalty -nonlubricant -nonlubriciousness -nonlucidity -nonlucidness -nonlucrativeness -nonlugubriousness -nonluminescence -nonluminosity -nonluminousness -nonluster -nonlustrousness -nonlyricalness -nonlyricism -nonmaintenance -nonmajority -nonmaliciousness -nonmalignance -nonmalignancy -nonmalignity -nonmalleability -nonmalleabness -nonmammalian -nonmanagement -nonmanifestation -nonmanifestness -nonmanufacture -nonmanufacturing -nonmarket -nonmarketability -nonmarriage -nonmarriageability -nonmarriageabness -nonmartialness -nonmasculineness -nonmasculinity -nonmason -nonmastery -nonmathematician -nonmatter -nonmaturation -nonmatureness -nonmaturity -nonmeasurability -nonmeasurableness -nonmechanicalness -nonmediation -nonmeditativeness -nonmelodiousness -nonmember -nonmembership -nonmendicancy -nonmetal -nonmetamorphosis -nonmethodicalness -nonmigration -nonmilitancy -nonmillionaire -nonmineral -nonministration -nonmiraculousness -nonmischievousness -nonmiscibility -nonmitigation -nonmobility -nonmoderateness -nonmodernness -nonmomentariness -nonmonarchist -nonmonist -nonmotility -nonmotion -nonmotivation -nonmotorist -nonmoveability -nonmoveableness -nonmultiplication -nonmusicalness -nonmutability -nonmutableness -nonmutinousness -nonmutuality -nonmysticalness -nonmysticism -nonnarcism -nonnarcissism -nonnarration -nonnasality -nonnationalism -nonnationalization -nonnativeness -nonnattiness -nonnaturalism -nonnaturalist -nonnaturalness -nonnavigability -nonnavigableness -nonnavigation -nonnebulousness -nonnecessitousness -nonnecessity -nonnegation -nonnegativism -nonnegativity -nonnegligence -nonnegligibility -nonnegligibleness -nonnegotiability -nonnegotiation -nonnervousness -nonnescience -nonneutrality -nonnihilism -nonnihilist -nonnobility -nonnomad -nonnomination -nonnormality -nonnormalness -nonnotableness -nonnotification -nonnourishment -nonnullification -nonnumeral -nonnutriment -nonnutritiousness -nonnutritiveness -nonobedience -nonobjectification -nonobjection -nonobscurity -nonobservance -nonobservation -nonobsession -nonobsessiveness -nonobstructiveness -nonobviousness -nonocclusion -nonoccupant -nonoccupation -nonodoriferousness -nonodorousness -nonoffender -nonoffensiveness -nonofficeholder -nonomission -nononerousness -nonopacity -nonopinionaness -nonopinionativeness -nonopposition -nonoppression -nonoppressiveness -nonopprobriousness -nonordination -nonorganization -nonorientation -nonornamentality -nonostentation -nonoutlawry -nonoverhead -nonowner -nonoxidation -nonoxidization -nonpacification -nonpacifist -nonpagan -nonpainter -nonpalatability -nonpalatableness -nonpalatalization -nonpalliation -nonpalpability -nonpapist -nonpar -nonparadoxicalness -nonparallelism -nonparalysis -nonparasitism -nonpareil -nonparent -nonparishioner -nonparity -nonpartiality -nonparticipant -nonparticipation -nonpartner -nonpassenger -nonpassionateness -nonpatentability -nonpause -nonpayment -nonpedestrian -nonpeltast -nonpendency -nonpenetrability -nonpenetration -nonpensioner -nonperceptibility -nonperceptibleness -nonperception -nonperceptiveness -nonperceptivity -nonpercipience -nonpercipiency -nonperfectibility -nonperfection -nonperformance -nonperformer -nonperjury -nonpermanence -nonpermanency -nonpermeability -nonpermeation -nonpermissibility -nonpermission -nonpermissiveness -nonperpendicularity -nonperpetration -nonperpetuance -nonperpetuation -nonperpetuity -nonpersecution -nonperseverance -nonpersistence -nonpersistency -nonpersonification -nonperspective -nonpersuasiveness -nonpertinence -nonpertinency -nonperverseness -nonperversion -nonperversity -nonphilosophy -nonplasticity -nonplausibility -nonplausibleness -nonpliability -nonpliableness -nonpliancy -nonpliantness -nonplurality -nonpoet -nonpoisonousness -nonpolarity -nonpolemic -nonponderability -nonponderosity -nonponderousness -nonpopularity -nonpopulousness -nonporness -nonportability -nonportentousness -nonportrayal -nonpossession -nonpossessiveness -nonpostponement -nonpracticability -nonpracticableness -nonpracticality -nonpracticalness -nonpractice -nonpreciousness -nonprecipitation -nonpredatoriness -nonpreferability -nonpreferableness -nonpreference -nonpreferentialism -nonpremium -nonpreparation -nonpresbyter -nonprescriber -nonpresence -nonpresentability -nonpresentableness -nonpresentation -nonpreservation -nonpressure -nonprevalence -nonprevention -nonpreventiveness -nonprimitiveness -nonprivity -nonprobability -nonprobation -nonprocreation -nonprocuration -nonprocurement -nonproducer -nonproduction -nonproductiveness -nonproductivity -nonprofaneness -nonprofanity -nonprofession -nonprofessionalism -nonproficiency -nonprofitability -nonprofitableness -nonprofiteering -nonprogressiveness -nonprohibition -nonprojection -nonproletariat -nonproliferation -nonprolificacy -nonprolifiness -nonprolixity -nonprolixness -nonprolongation -nonprominence -nonpromiscuousness -nonpromotion -nonpromulgation -nonpronunciation -nonpropagandist -nonpropagation -nonpropitiation -nonproportionateness -nonproprietor -nonpropriety -nonprorogation -nonprosaicness -nonproscription -nonprosecution -nonprospect -nonprosperity -nonprosperousness -nonprotection -nonprotein -nonprotestation -nonprotraction -nonprotrusion -nonprotrusiveness -nonprotuberance -nonprotuberancy -nonprovider -nonprovocation -nonprovocativeness -nonproximity -nonprudence -nonpublication -nonpublicity -nonpuerility -nonpulsation -nonpunctualness -nonpunctuation -nonpungency -nonpunishment -nonpurchasability -nonpurchase -nonpurchaser -nonpurgation -nonpurification -nonpurposiveness -nonpursuance -nonpurulence -nonpurveyance -nonputrescence -nonqualification -nonquality -nonquantitativeness -nonradiance -nonradiancy -nonradiation -nonradicness -nonrandomness -nonrapport -nonratability -nonratableness -nonrateability -nonrateableness -nonratification -nonrationalism -nonrationalist -nonrationality -nonrationalization -nonreaction -nonreactor -nonreadability -nonreadableness -nonreader -nonreading -nonrealism -nonrealist -nonreality -nonrealization -nonreasonability -nonreasonableness -nonreasoner -nonrebel -nonrebellion -nonrebelliousness -nonrecalcitrance -nonrecalcitrancy -nonreceipt -nonreception -nonreceptiveness -nonreceptivity -nonrecess -nonrecession -nonrecipience -nonrecipiency -nonreciprocity -nonrecision -nonrecital -nonrecitation -nonreclamation -nonrecognition -nonrecoil -nonrecollection -nonreconcilability -nonreconcilableness -nonreconciliation -nonrecourse -nonrectangularity -nonrecuperatiness -nonrecuperation -nonredemption -nonreducibility -nonreduction -nonreference -nonrefinement -nonreflection -nonreflectiveness -nonreflector -nonreformation -nonrefraction -nonrefractiveness -nonrefutal -nonrefutation -nonregeneration -nonregent -nonregistration -nonregression -nonregulation -nonrehabilitation -nonreimbursement -nonreinforcement -nonreinstatement -nonrejection -nonrejoinder -nonrelatiness -nonrelation -nonrelative -nonrelativity -nonrelaxation -nonrelease -nonreliability -nonreliableness -nonreliance -nonreligion -nonreligiousness -nonrelinquishment -nonremediability -nonremedy -nonremembrance -nonremission -nonremonstrance -nonremuneration -nonrendition -nonrenewal -nonrenunciation -nonrepair -nonreparation -nonrepatriation -nonrepeat -nonrepeater -nonrepellence -nonrepellency -nonrepeller -nonrepentance -nonrepetition -nonrepetitiousness -nonreplacement -nonreplication -nonreprehensibility -nonreprehensibleness -nonrepresentation -nonrepresentative -nonrepresentativeness -nonrepressibleness -nonrepression -nonreprisal -nonreproduction -nonreproductiveness -nonrepudiation -nonrequirement -nonrequisiteness -nonrequisition -nonrequital -nonrescission -nonrescue -nonresemblance -nonreservation -nonreserve -nonresidence -nonresidency -nonresident -nonresignation -nonresilience -nonresiliency -nonresistance -nonresistibility -nonresolution -nonresolvability -nonresolvabness -nonrespectability -nonrespectableness -nonresponsibility -nonresponsibleness -nonrestitution -nonrestoration -nonrestraint -nonrestriction -nonresumption -nonresurrection -nonresuscitation -nonretainment -nonretaliation -nonretardation -nonretardment -nonretention -nonretentiveness -nonreticence -nonretirement -nonretractility -nonretraction -nonretrenchment -nonretroactivity -nonrevaluation -nonrevelation -nonrevenge -nonrevenger -nonreverence -nonreversibility -nonreversibleness -nonreversion -nonrevision -nonrevival -nonrevivalist -nonrevocability -nonrevocation -nonrevolution -nonrhyme -nonrhythm -nonrioter -nonrival -nonromanticism -nonrotation -nonroyalist -nonroyalty -nonrubber -nonrudimentariness -nonruinousness -nonruling -nonruminant -nonrumination -nonrupture -nonsaccharinity -nonsacredness -nonsacrifice -nonsacrilegiousness -nonsailor -nonsalability -nonsale -nonsaleability -nonsalinity -nonsalubriousness -nonsalutariness -nonsalutation -nonsalvation -nonsanctification -nonsanctimoniousness -nonsanctimony -nonsanction -nonsanctity -nonsaneness -nonsanguineness -nonsanity -nonsaponification -nonsatiability -nonsatiation -nonsatire -nonsatiricalness -nonsatisfaction -nonsaturation -nonscarcity -nonscholar -nonschooling -nonscience -nonscientist -nonscrutiny -nonseasonableness -nonsecession -nonsecludedness -nonseclusion -nonseclusiveness -nonsecrecy -nonsecretion -nonsecurity -nonsedentariness -nonseditiousness -nonsegmentation -nonsegregation -nonseizure -nonselection -nonsensation -nonsense -nonsensibility -nonsensibleness -nonsensicality -nonsensicalness -nonsensitiveness -nonsensitivity -nonsensitization -nonsensuality -nonsensuousness -nonsententiousness -nonsentience -nonsentiency -nonseparability -nonseparableness -nonseparation -nonsequaciousness -nonsequacity -nonsequestration -nonserial -nonseriousness -nonserviceability -nonserviceableness -nonservileness -nonsettlement -nonseverance -nonseverity -nonshatter -nonshipper -nonsibilance -nonsibilancy -nonsignificance -nonsignificancy -nonsignification -nonsilicate -nonsilver -nonsimilarity -nonsimilitude -nonsimplicity -nonsimplification -nonsimular -nonsimulation -nonsingularity -nonsister -nonsmoker -nonsoberness -nonsobriety -nonsociability -nonsociableness -nonsocialist -nonsociality -nonsocialness -nonsociety -nonsoldier -nonsolicitation -nonsolicitousness -nonsolidarity -nonsolidification -nonsolubleness -nonsolution -nonsolvability -nonsolvableness -nonsolvency -nonsolvent -nonsophisticalness -nonsovereign -nonspaciousness -nonspatiality -nonspeaker -nonspecialist -nonspecification -nonspecificity -nonspeciousness -nonspectrality -nonspeculation -nonspeculativeness -nonsphericality -nonspinning -nonspinosity -nonspirit -nonspiritedness -nonspirituality -nonspiritualness -nonspirituness -nonspontaneousness -nonspuriousness -nonstability -nonstableness -nonstainer -nonstaple -nonstarter -nonstatement -nonsterility -nonsterilization -nonstimulant -nonstimulation -nonstipticity -nonstipulation -nonstock -nonstoicalness -nonstorage -nonstress -nonstriker -nonstructure -nonstudent -nonstudiousness -nonstudy -nonstultification -nonstylization -nonsubconsciousness -nonsubject -nonsubjectification -nonsubjection -nonsubjectiveness -nonsubjectivity -nonsubjugation -nonsublimation -nonsubmergence -nonsubmergibility -nonsubmission -nonsubmissiveness -nonsubordination -nonsubscriber -nonsubscription -nonsubsidy -nonsubsistence -nonsubstantiality -nonsubstantialness -nonsubstantiation -nonsubstantiveness -nonsubstitution -nonsubtileness -nonsubtility -nonsubtleness -nonsubtlety -nonsubtraction -nonsubversion -nonsubversiveness -nonsuccess -nonsuccession -nonsuccessiveness -nonsuccor -nonsuch -nonsuction -nonsufferableness -nonsufferance -nonsuffrage -nonsugar -nonsuggestion -nonsuggestiveness -nonsuit -nonsummons -nonsupervision -nonsupplication -nonsupportability -nonsupportableness -nonsupporter -nonsuppression -nonsuppressiveness -nonsurface -nonsurrender -nonsurvival -nonsurvivor -nonsusceptibility -nonsusceptibleness -nonsusceptiness -nonsusceptivity -nonsuspect -nonsuspension -nonsuspensiveness -nonsustenance -nonswimmer -nonsyllogistic -nonsymbolicalness -nonsymmetry -nonsympathizer -nonsympathy -nonsymphoniousness -nonsynchronousness -nonsyncopation -nonsyndication -nonsynthesis -nontactic -nontactility -nontalkativeness -nontangibleness -nontannin -nontax -nontaxability -nontaxableness -nontaxation -nontaxer -nonteachability -nonteachableness -nonteacher -nontechnicalness -nonteetotaler -nonteetotalist -nontemperateness -nontemporariness -nontemptation -nontenability -nontenableness -nontenant -nontensility -nontentativeness -nonterminability -nonterminableness -nontermination -nonterritoriality -nonthinker -nontolerableness -nontolerance -nontoleration -nontonality -nontourist -nontraceability -nontraceableness -nontractability -nontractableness -nontraction -nontrade -nontrader -nontradition -nontraditionalist -nontragedy -nontragicalness -nontraitorousness -nontranscription -nontransferability -nontransference -nontransformation -nontransgression -nontransience -nontransiency -nontransientness -nontransitiveness -nontranslocation -nontransmission -nontransmittance -nontransparence -nontransparency -nontransparentness -nontransportability -nontransportation -nontransposition -nontraveler -nontraveller -nontreasonableness -nontreatment -nontreaty -nontrespass -nontrial -nontribesman -nontrier -nontriviality -nontruancy -nontruant -nontrust -nontruth -nontumultuousness -nontypicalness -nontyrannicalness -nontyrannousness -nonubiquitousness -nonulcerousness -nonunanimousness -nonundergraduate -nonunification -nonuniformity -nonunionism -nonunionist -nonuniqueness -nonunison -nonunitarian -nonunity -nonuniversalist -nonuniversality -nonuniversity -nonuprightness -nonurbanite -nonusage -nonuse -nonuser -nonusuriousness -nonutility -nonutilization -nonutterance -nonvacancy -nonvaccination -nonvacillation -nonvacuousness -nonvacuum -nonvagrancy -nonvagrantness -nonvalidation -nonvalidity -nonvalidness -nonvalorousness -nonvalue -nonvaporosity -nonvaporousness -nonvariability -nonvariableness -nonvariance -nonvariation -nonvariety -nonvariousness -nonvassal -nonvegetable -nonvegetation -nonvegetativeness -nonvendibility -nonvendibleness -nonvenomousness -nonvenousness -nonventilation -nonveraciousness -nonveracity -nonverbosity -nonverification -nonveritableness -nonverminousness -nonversatility -nonverticality -nonverticalness -nonvesture -nonveteran -nonveterinary -nonvexatiousness -nonviability -nonvibration -nonvibrator -nonvicariousness -nonvictory -nonvigilance -nonvigilantness -nonvillager -nonvillainousness -nonvindication -nonvinosity -nonviolability -nonviolableness -nonviolation -nonviolence -nonvirility -nonvirtue -nonvirtuousness -nonviscidity -nonviscidness -nonviscousness -nonvisibility -nonvitality -nonvitalness -nonvitiation -nonviviparity -nonviviparousness -nonvocality -nonvocalization -nonvocalness -nonvolatility -nonvolatiness -nonvolition -nonvolubility -nonvolubleness -nonvoter -nonvulgarity -nonwar -nonweakness -nonwhite -nonworker -nonzealousness -noodle -noodlehead -nook -nookery -nookie -noon -noonday -nooning -noontide -noontime -noose -nooser -nopal -noradrenaline -norepinephrine -noria -norite -nork -norland -norm -normalcy -normalisation -normality -normalness -normativeness -normocyte -north -northcountryman -northeast -northeaster -northeasterner -norther -northerliness -northernness -northing -northwest -northwester -northwesterner -nos -nose -nosebag -noseband -nosebleed -nosegay -nosepiece -nosewheel -nosewing -nosey -nosh -nosher -nosiness -nosing -nosogeography -nosographer -nosography -nosology -nostalgia -nostalgy -nostoc -nostology -nostomania -nostril -nostrum -notability -notableness -notary -notaryship -notation -notch -note -notebook -notecase -notedness -notelessness -notelet -notepaper -noteworthiness -nothingness -notice -noticer -notification -notifier -notion -notionality -notitia -notochord -notoriousness -notornis -nototherium -notoungulate -notturno -notum -nougat -nought -noumenalism -noumenalist -noumenality -noumenon -noun -nourice -nourisher -nourishment -nous -nouveauta -nov -nova -novaculite -novation -novel -novelese -novelette -novelisation -novelist -novella -novelty -novena -novice -novitiate -novobiocin -nowness -nowt -nowy -noxiousness -noyade -noyau -nozzle -nr -ns -nt -nu -nuance -nub -nubbin -nubble -nubecula -nubility -nucellus -nucha -nuclease -nucleation -nucleator -nuclei -nuclein -nucleolus -nucleon -nucleonics -nucleoplasm -nucleoprotein -nucleosidase -nucleoside -nucleotidase -nucleotide -nucleus -nuclide -nuddy -nudeness -nudger -nudibranch -nudnik -nuggar -nugget -nuisance -nuke -nullah -nullification -nullificationist -nullificator -nullifidian -nullifier -nullipara -nullipore -nullity -nullo -numbat -number -numberer -numberplate -numbfish -numbness -numbskull -numdah -numen -numeral -numeration -numerator -numericalness -numerology -numerosity -numerousness -numis -numismatics -numismatist -numismatologist -numismatology -nummulite -numnah -numskull -nun -nunatak -nunation -nunciature -nuncio -nuncle -nunhood -nunnation -nunnery -nuraghe -nurl -nurse -nursemaid -nurser -nursery -nurseryman -nursling -nurture -nurturer -nut -nutation -nutcase -nutcracker -nutgall -nuthatch -nuthouse -nutlet -nutmeat -nutmeg -nutpick -nutria -nutrient -nutrilite -nutriment -nutrition -nutritionist -nutritiousness -nutritiveness -nutshell -nutter -nuttiness -nutting -nutwood -nv -nyala -nyanza -nyckelharpa -nyctalgia -nyctalopia -nyctinasty -nyctitropism -nyctophobia -nye -nylghai -nylghau -nylon -nymph -nympha -nymphaeum -nymphalid -nystagmus -nystatin -nytril -o -oaf -oak -oakmoss -oakum -oar -oarfish -oarlock -oarsman -oasis -oast -oat -oatcake -oater -oath -oatmeal -ob -oba -obb -obdt -obeah -obeahism -obeche -obedience -obedientiary -obeisance -obelisk -obelus -obesity -obeyer -obfuscation -obi -obit -obituary -obj -object -objection -objectionability -objectionableness -objectiveness -objectivism -objectivist -objectivity -objectlessness -objector -objurgation -objurgator -oblast -oblation -obligation -obligator -obligatoriness -obligedness -obligee -obliger -obligingness -obligor -obliquity -obliteration -oblivescence -oblivion -obliviousness -oblongata -oblongness -obloquy -obmutescence -obnoxiousness -oboe -obole -obolus -obreption -obrogation -obs -obscenity -obscurant -obscurantism -obscurantist -obscureness -obscurity -obsecration -obsequence -observability -observableness -observance -observation -observatory -observer -observership -obsession -obsidian -obsolesc -obsoleteness -obstacle -obstet -obstetrician -obstetrics -obstinacy -obstinateness -obstipant -obstipation -obstreperosity -obstreperousness -obstructer -obstruction -obstructionism -obstructionist -obstructiveness -obstructivity -obstructor -obtestation -obtruder -obtrusiveness -obtundity -obturation -obturator -obumbration -obversion -obviousness -obvolution -oc -oca -ocarina -occas -occasion -occasionalism -occasionality -occasionalness -occident -occidentality -occiput -occlusion -occlusiveness -occultation -occulter -occultism -occultist -occultness -occupancy -occupant -occupation -occupier -occurrence -ocean -oceanarium -oceanfront -oceanicity -oceanog -oceanographer -oceanography -oceanology -ocellation -ocellus -ocelot -ocher -ochlesis -ochlocracy -ochlocrat -ochlophobia -ochlophobist -ochre -ochrea -ocker -ocotillo -ocrea -oct -octachord -octad -octagon -octahedrite -octahedron -octameter -octane -octangle -octangularness -octant -octarchy -octaroon -octastylos -octateuch -octave -octavo -octet -octillion -octillionth -octocentenary -octodecillion -octodecimo -octofoil -octogenarian -octogenarianism -octopod -octopus -octoroon -octosyllable -octroi -octuple -octuplet -ocularist -oculist -oculus -od -odalisque -oddball -oddity -oddment -oddness -oddside -ode -odeum -odiousness -odium -odometer -odometry -odontalgia -odontiasis -odontoblast -odontogeny -odontoglossum -odontograph -odontography -odontolite -odontology -odontophore -odor -odoriferosity -odoriferousness -odour -odyl -odylism -odylist -oe -oecology -oedema -oeillade -oenologist -oenology -oenomel -oersted -oesophagus -oestradiol -oestrin -oestriol -oestrogen -oestrone -oestrus -oeuvre -ofay -offal -offbeat -offence -offendedness -offender -offense -offensiveness -offerer -offering -offeror -offertory -office -officeholder -officer -officialdom -officialese -officialisation -officialism -officialization -officiant -officiary -officiation -officiator -officiousness -offing -offishness -offlap -offprint -offscouring -offset -offshoot -offsider -offspring -offtake -oftenness -og -ogam -ogdoad -ogee -ogham -ogive -ogre -ohm -ohmage -ohmmeter -oidium -oik -oil -oilbird -oilcan -oilcloth -oilcup -oiler -oilfield -oilfish -oiliness -oillessness -oilman -oilseed -oilskin -oilstone -oinochoe -ointment -oiticica -oka -okapi -oke -okoume -okra -okta -oktastylos -oldie -oldster -oldwife -oleaginousness -oleander -oleandomycin -oleaster -oleate -olecranon -olefin -olefine -olein -oleograph -oleography -oleomargarine -oleoresin -olericulture -olericulturist -olethreutid -oleum -olfaction -olfactoreceptor -olibanum -oligarch -oligarchy -oligochaete -oligoclase -oligocythemia -oligophrenia -oligopoly -oligopsony -oligosaccharide -oligotrophy -oliguria -olio -olive -olivenite -olivette -olivine -olla -olm -ology -oloroso -olympiad -omadhaun -omasum -omber -ombre -ombrellino -ombudsman -omega -omelet -omelette -omen -omentum -omer -omicron -ominousness -omission -ommatidium -ommatophore -omni -omnibearing -omnibus -omnidistance -omnificence -omnigraph -omnipotence -omnipresence -omnirange -omniscience -omnivore -omnivorousness -omophagia -omophagist -omophorion -omphalocele -omphalos -omphaloskepsis -onager -onanism -onanist -oncer -oncology -oncosis -oncost -ondine -onding -ondogram -ondograph -ondometer -ondoscope -oneirocritic -oneirocriticism -oneiromancy -oneness -oner -onerosity -onerousness -oniomania -oniomaniac -onion -onionskin -onker -onlap -onlay -onlooker -onomasiology -onomastics -onomatologist -onomatology -onomatopoeia -onrush -onset -onslaught -ontogenist -ontogeny -ontologism -ontologist -ontology -onus -onychia -onychophagia -onychophoran -onyx -onyxis -oocyte -oof -oogamy -oogenesis -oogonium -oolachan -oolite -oolith -oology -oolong -oomiak -oompah -oomph -oophore -oophorectomy -oophoritis -oophyte -oos -oose -oosperm -oosphere -oospore -ootheca -ootid -op -opa -opacification -opacifier -opacimeter -opacity -opah -opaion -opal -opaqueness -opcode -openairness -opener -openhandedness -opening -openwork -opera -operability -operand -operation -operationalism -operativeness -operativity -operator -opercle -operculum -operetta -operettist -operon -operoseness -ophicleide -ophiolater -ophiolatry -ophiologist -ophiology -ophite -ophthalm -ophthalmia -ophthalmiac -ophthalmitis -ophthalmodynamometer -ophthalmologist -ophthalmology -ophthalmometer -ophthalmometry -ophthalmoscope -ophthalmoscopist -ophthalmoscopy -opiate -opinicus -opinion -opinionatedness -opinionativeness -opisthenar -opisthobranch -opisthodomos -opisthognathism -opium -opiumism -opodeldoc -opossum -opp -oppilation -opponency -opponens -opponent -opportunism -opportunist -opportunity -opposability -opposer -oppositeness -opposition -oppression -oppressiveness -oppressor -opprobriousness -opprobrium -oppugner -opsimath -opsin -opsonin -optician -opticist -optics -optime -optimise -optimism -optimist -optimization -optimum -option -optionality -optionee -optometer -optometrist -optometry -optotype -opulence -opuntia -opus -opuscule -oquassa -or -ora -orach -orache -oracle -oracularity -oracularness -oracy -orang -orange -orangeade -orangery -orangewood -orangutan -orarion -orarium -oration -orator -oratorio -oratorship -oratory -oratrix -orb -orbicularis -orbicularity -orbiculation -orbit -orbital -orbitale -orc -orca -orcein -orch -orchard -orchardist -orchardman -orchectomy -orchestra -orchestrater -orchestration -orchestrator -orchestrion -orchid -orchidectomy -orchidologist -orchidology -orchidotomy -orchiectomy -orchil -orchis -orchitis -orchotomy -orcinol -ord -ordainer -ordainment -ordeal -order -ordinance -ordinand -ordinariate -ordinate -ordination -ordn -ordnance -ordo -ordonnance -ordure -ore -oread -oregano -oreshoot -orexis -orfe -orfray -organ -organa -organdie -organdy -organelle -organicalness -organicism -organicist -organicity -organisability -organism -organist -organizability -organization -organizer -organogenesis -organographist -organography -organologist -organology -organon -organotherapeutics -organotherapy -organum -organza -organzine -orgeat -oribi -oriel -orient -orientation -orienteering -orifice -oriflamme -orig -origami -origan -origin -originality -origination -originator -orihon -oriole -orison -orle -orlo -orlop -ormer -ormolu -ornament -ornamentality -ornamentation -ornateness -orneriness -ornis -ornith -ornithine -ornithol -ornithologist -ornithology -ornithomancy -ornithopod -ornithopter -ornithorhynchus -ornithoscopy -ornithosis -orogeny -orographic -orography -oroide -orologist -orometer -orometry -orotundity -orphan -orphanage -orphanhood -orpharion -orphrey -orpiment -orpine -orrery -orris -orrisroot -orseille -ortanique -orthicon -orthocenter -orthocentre -orthocephaly -orthoclase -orthodontics -orthodontist -orthodoxness -orthodoxy -orthoepy -orthogenesis -orthogonality -orthogonalization -orthographer -orthography -orthohydrogen -orthopaedics -orthopedics -orthopedist -orthophosphate -orthopnea -orthopraxia -orthopraxy -orthopsychiatry -orthopter -orthopteran -orthopteron -orthoptics -orthoscope -orthoselection -orthostat -orthostates -orthostichy -orthotropism -orthros -ortolan -oryx -os -oscar -oscillation -oscillator -oscillogram -oscillograph -oscillometry -oscilloscope -oscitance -oscitancy -oscularity -osculation -osculum -osier -osmaterium -osmeterium -osmics -osmidrosis -osmiridium -osmium -osmometer -osmometry -osmosis -osmund -osmunda -osnaburg -osophone -osprey -ossa -ossein -osselet -ossicle -ossification -ossifier -ossifrage -ossuary -ostectomy -osteectomy -osteitis -ostensorium -ostensory -ostentation -ostentatiousness -osteoarthritis -osteoblast -osteoclasis -osteoclast -osteogenesis -osteologer -osteologist -osteology -osteoma -osteomalacia -osteomyelitis -osteopath -osteopathy -osteophyte -osteoplasty -osteoporosis -osteotome -osteotomist -osteotomy -ostiary -ostinato -ostiole -ostium -ostler -ostmark -ostosis -ostracise -ostracism -ostracization -ostracizer -ostracod -ostracoderm -ostracon -ostrich -ostringer -ot -otalgia -otherness -otitis -otocyst -otohemineurasthenia -otolaryngologist -otolaryngology -otolith -otologist -otology -otoneurasthenia -otoplasty -otorhinolaryngology -otosclerosis -otoscope -otoscopy -ottar -ottava -otter -otto -ottoman -ottrelite -ouabain -ouananiche -oubliette -oud -ougamy -ounce -ouphe -ourari -ousel -ouster -outage -outback -outbidder -outbreak -outbuilding -outburst -outcast -outcaste -outcity -outclerk -outcome -outcrop -outcrossing -outcry -outcurve -outdistrict -outdweller -outdwelling -outerness -outerwear -outfall -outfield -outfielder -outfighting -outfit -outfitter -outflanker -outflow -outflux -outgroup -outgrowth -outguard -outhaul -outhouse -outing -outkitchen -outlander -outlandishness -outlaw -outlawry -outlay -outlet -outlier -outline -outliver -outlook -outmerchant -outness -outoffice -outparish -outpath -outpatient -outport -outporter -outpost -outpour -outpouring -outpupil -output -outquarters -outrage -outrageousness -outrance -outrider -outrigger -outrightness -outrunner -outrush -outsentry -outsert -outset -outshot -outsider -outskirt -outsole -outspan -outspokenness -outstation -outstretcher -outswing -outswinger -outturn -outwardness -outwash -outwork -outworker -ouzel -ouzo -ova -ovality -ovalness -ovariectomy -ovariotomist -ovariotomy -ovaritis -ovarium -ovary -ovation -oven -ovenbird -ovenware -ovenwood -overabsorption -overabstemiousness -overabundance -overabusiveness -overacceleration -overaccentuation -overaccumulation -overacidity -overaction -overacuteness -overaddiction -overaffect -overaffirmation -overaffirmativeness -overaffliction -overaggravation -overaggressiveness -overagitation -overallegiance -overambitiousness -overanalysis -overanimation -overanxiety -overanxiousness -overappraisal -overappreciation -overappreciativeness -overapprehension -overapprehensiveness -overaptness -overargumentativeness -overartificiality -overassertion -overassertiveness -overassumption -overassuredness -overattachment -overattention -overattentiveness -overbashfulness -overbearer -overbearingness -overbet -overbite -overbitterness -overblouse -overboast -overboastfulness -overbookishness -overboot -overbounteousness -overbravado -overbraveness -overbravery -overbreak -overbrightness -overbrilliance -overbrilliancy -overbrutality -overbrutalization -overbulkiness -overbumptiousness -overcall -overcapability -overcapacity -overcapitalisation -overcapitalization -overcaptiousness -overcare -overcarefulness -overcarelessness -overcasting -overcasualness -overcausticity -overcaution -overcautiousness -overcensoriousness -overcentralization -overcharger -overcharitableness -overcharity -overcheapness -overcheck -overchildishness -overcircumspection -overcivility -overcivilization -overcleanness -overclemency -overcleverness -overclinicalness -overcloseness -overclothes -overcoat -overcoating -overcoil -overcoloration -overcomer -overcommercialization -overcommonness -overcompensation -overcompetitiveness -overcomplacence -overcomplacency -overcomplexity -overconcentration -overconcern -overcondensation -overconfidence -overconscientiousness -overconsciousness -overconservatism -overconservativeness -overconsiderateness -overconsideration -overconstantness -overconsumption -overcontentedness -overcontentiousness -overcontentment -overcontraction -overcontribution -overcontriteness -overcontrol -overcoolness -overcopiousness -overcorruption -overcostliness -overcourteousness -overcourtesy -overcovetousness -overcoyness -overcredulity -overcredulousness -overcriticalness -overcriticism -overcrowdedness -overcultivation -overcunningness -overcuriosity -overdaintiness -overdearness -overdecadence -overdecoration -overdecorativeness -overdedication -overdefensiveness -overdefiantness -overdeliberateness -overdeliberation -overdelicacy -overdelicateness -overdeliciousness -overdemandiness -overdenunciation -overdependence -overdepressiveness -overderisiveness -overdescriptiveness -overdesire -overdesirousness -overdestructiveness -overdevelopment -overdevotedness -overdiffuseness -overdiffusion -overdilation -overdiligence -overdiligentness -overdilution -overdiscouragement -overdiscreetness -overdistention -overdistortion -overdiverseness -overdiversification -overdiversity -overdogmaticalness -overdogmatism -overdose -overdraft -overdrainage -overdraught -overdrawer -overdrive -overdyer -overeagerness -overearnestness -overeasiness -overeater -overeducation -overeffort -overeffusiveness -overelegance -overelegantness -overembellishment -overemotionalness -overemphasis -overemphaticalness -overemployment -overemulation -overenthusiasm -overenviousness -overestimation -overexcitability -overexcitement -overexertion -overexpansion -overexpansiveness -overexpectantness -overexpenditure -overexplanation -overexposure -overexpressiveness -overexuberance -overexuberantness -overfacility -overfactiousness -overfaintness -overfaithfulness -overfall -overfamiliarity -overfancifulness -overfastidiousness -overfavorableness -overfearfulness -overfee -overfemininity -overfertility -overferventness -overfierceness -overflap -overflatness -overflexion -overflight -overfloridness -overfluency -overfluentness -overfold -overfondness -overfoolishness -overforce -overforwardness -overfoulness -overfrailness -overfrailty -overfrankness -overfreedom -overfrequency -overfrugality -overfruitfulness -overfrustration -overgarment -overgeneralization -overgenerosity -overgeniality -overgenialness -overgesticulation -overgesticulativeness -overglazed -overglazing -overgloominess -overgraciousness -overgratefulness -overgratification -overgratitude -overgreasiness -overgreatness -overgreediness -overgrievousness -overgrossness -overgrowth -overhappiness -overharassment -overharshness -overhastiness -overheadiness -overhearer -overheartiness -overheaviness -overhelpfulness -overhomeliness -overhonestness -overhonesty -overhostility -overhugeness -overhumanity -overhumbleness -overidealism -overidness -overidolatrousness -overillustration -overimaginativeness -overimitation -overimitativeness -overimportation -overimpressibility -overimpressionability -overimpressionableness -overinclination -overindividualism -overindividualization -overindulgence -overindustrialism -overindustrialization -overinflation -overinsistence -overinsistency -overinsolence -overinstruction -overinstructiveness -overintellectualism -overintellectualization -overintellectualness -overintenseness -overintensification -overintensity -overinterest -overinterestedness -overinterference -overinvestment -overirrigation -overjealousness -overjocularity -overjoyfulness -overjoyousness -overjudiciousness -overkeenness -overkill -overlactation -overlaness -overlasciviousness -overlaudation -overlavishness -overlaxness -overlearnedness -overline -overliterariness -overliveliness -overloftiness -overlogicality -overlogicalness -overlooker -overlooseness -overlord -overloudness -overlowness -overloyalty -overlubrication -overlusciousness -overlushness -overlustiness -overluxuriance -overluxuriancy -overmagnification -overmagnitude -overmantel -overmast -overmasterfulness -overmatter -overmatureness -overmeanness -overmeasure -overmeekness -overmellowness -overmelodiousness -overmercifulness -overmerriment -overmerriness -overminuteness -overmodernization -overmodesty -overmodification -overmournfulness -overmultiplication -overmystification -overnarrowness -overnationalization -overneatness -overneglectfulness -overnegligence -overnegligentness -overnervousness -overness -overneutralization -overneutralizer -overnicety -overnobleness -overnormality -overnormalization -overnourishment -overnumerousness -overobedience -overobeseness -overobesity -overobjectification -overobsequiousness -overoffensiveness -overofficiousness -overoptimism -overoptimist -overorganization -overorganize -overornamentality -overoxidization -overpainfulness -overpartiality -overpartialness -overparticularness -overpass -overpassionateness -overpatriotism -overpayment -overpenalization -overpensiveness -overperemptoriness -overpersuasion -overpessimism -overpiteousness -overplainness -overplausibleness -overplenitude -overplentifulness -overplenty -overplus -overpolemicalness -overponderousness -overpopularity -overpopulation -overpopulousness -overpositiveness -overpotency -overpotential -overpotentness -overpowerfulness -overpoweringness -overpreciseness -overprecision -overpreoccupation -overpresumption -overpresumptiveness -overpresumptuousness -overprocrastination -overproficiency -overprolixity -overprolixness -overprominence -overprominentness -overpromptness -overproness -overpronunciation -overprosperousness -overprotection -overprotraction -overprovidentness -overprovision -overprovocation -overpublicity -overpunishment -overqualification -overquietness -overraness -overrashness -overrationalization -overreaction -overreadiness -overrealism -overreduction -overrefinement -overreflection -overreflectiveness -overregimentation -overregulation -overreliance -overreligiosity -overreligiousness -overremissness -overrepresentation -overrepresentativeness -overreservedness -overresoluteness -overrestriction -overretention -overrichness -overrider -overrighteousness -overrigidity -overrigidness -overrigorousness -overroughness -overrudeness -overruler -oversacrificialness -oversadness -oversanguineness -oversatiety -oversaturation -overscepticalness -overscepticism -overscrupulousness -oversecretion -oversecurity -oversedation -overseer -oversensibleness -oversentimentalism -oversentimentality -overserenity -overseriousness -overservileness -overservility -oversetter -oversettlement -oversevereness -overseverity -overshirt -overshoe -oversight -oversilence -oversilentness -oversimpleness -oversimplicity -oversimplification -overskepticalness -overskeptticism -overskirt -overslaugh -overslavishness -oversleeve -overslowness -oversmoothness -oversness -oversoftness -oversolemnity -oversolemnness -oversolidification -oversophistication -oversorrowfulness -oversoul -oversourness -overspaciousness -oversparingness -overspecialization -overspeculation -overspeculativeness -overspeediness -overspill -overspin -oversqueamishness -overstaleness -overstand -oversteadfastness -oversteadiness -overstiffness -overstimulation -overstimulativeness -overstitch -overstocking -overstoutness -overstraightness -overstridence -overstridency -overstridentness -overstrongness -overstudiousness -oversubscriber -oversubscription -oversubtlety -oversufficiency -oversuperstitiousness -oversupply -oversureness -oversurety -oversusceptibility -oversusceptibleness -oversuspiciousness -oversweetness -oversystematicalness -overtalkativeness -overtalker -overtameness -overtartness -overtaxation -overtechnicality -overtediousness -overtenaciousness -overtenacity -overtenderness -overtenseness -overtension -overtheatricalness -overtheorization -overthickness -overthinness -overthoughtfulness -overthriftiness -overthrower -overthrust -overtightness -overtime -overtimidity -overtimidness -overtimorousness -overtint -overtolerance -overtone -overtread -overtreatment -overtrick -overtrustfulness -overtruthfulness -overture -overurbanization -overvaliantness -overvaluableness -overvaluation -overvariation -overvariety -overvehemence -overvehementness -overventilation -overventurousness -overview -overvigorousness -overviolentness -overvoltage -overwariness -overweakness -overwealth -overweener -overweeningness -overwhelmingness -overwideness -overwildness -overwillingness -overword -overzealousness -oviduct -oviparity -oviparousness -oviposition -ovipositor -ovisac -ovolo -ovotestis -ovovitellin -ovoviviparism -ovoviviparity -ovoviviparousness -ovule -ovum -owelty -owl -owlet -owlishness -owner -ownership -ox -oxalate -oxalis -oxazine -oxbow -oxcart -oxen -oxeye -oxford -oxgang -oxheart -oxhide -oxidant -oxidase -oxidation -oxide -oxidimetry -oxidizability -oxidization -oxidizer -oxidoreductase -oxime -oximeter -oximetry -oxlip -oxpecker -oxtail -oxter -oxtongue -oxyacetylene -oxyacid -oxyaldehyde -oxybenzene -oxycephaly -oxychloride -oxydase -oxydation -oxygen -oxygenate -oxygenation -oxygenator -oxygenicity -oxygenizer -oxyhaemoglobin -oxyhydrogen -oxymoron -oxyneurine -oxysalt -oxysulphide -oxytetracycline -oxytocia -oxytocin -oy -oyelet -oyer -oyster -oystercatcher -oystering -oysterman -oysterwoman -oz -ozocerite -ozone -ozonide -ozonizer -ozonolysis -ozonosphere -p -pa -paal -pabulum -paca -paccha -pace -pacemaker -pacer -pacesetter -paceway -pacha -pachadom -pachalic -pachinko -pachisi -pachouli -pachyderm -pachylosis -pachysandra -pachytene -pacification -pacificism -pacificist -pacifico -pacifier -pacifism -pacifist -pack -package -packaging -packer -packet -packhorse -packing -packman -packplane -packsack -packsaddle -packthread -packtrain -pact -paction -pad -padang -padauk -padding -paddle -paddleboard -paddlefish -paddler -paddock -paddy -paddymelon -paddywhack -pademelon -padeye -padlock -padnag -padouk -padre -padrone -padsaw -paduasoy -paean -paeanism -paedagogy -paederast -paederasty -paediatrician -paediatrics -paedobaptism -paedobaptist -paedogenesis -paedology -paedomorphosis -paedophilia -paella -paenula -paeon -paeony -pagan -pagandom -paganisation -paganiser -paganism -paganization -page -pageant -pageantry -pageboy -pagne -pagoda -pagodite -pagurian -pagurid -paho -pahoehoe -pahutan -paidology -paigle -paik -paiker -pail -pailful -paillasse -paillette -pain -painfulness -painkiller -painstakingness -paint -paintbox -paintbrush -painter -painting -painty -pair -pairle -pairmasts -paisa -paisano -paisley -pajama -pakeha -pal -palabra -palace -paladin -palaeethnology -palaeoanthropology -palaeobiologist -palaeobiology -palaeobotany -palaeoclimatologist -palaeoclimatology -palaeoecologist -palaeoecology -palaeoencephalon -palaeoentomologist -palaeoentomology -palaeoethnobotany -palaeogenesis -palaeography -palaeolith -palaeologist -palaeology -palaeomagnetism -palaeontography -palaeontol -palaeontologist -palaeontology -palaeozoologist -palaeozoology -palaestra -palais -palankeener -palanquin -palanquiner -palatability -palatableness -palatalization -palate -palatialness -palatinate -palatium -palaver -palaverer -palaverist -palaverment -palazzo -palea -paleencephalon -paleethnologist -paleethnology -paleface -paleobiologist -paleobiology -paleobotany -paleoclimatologist -paleoclimatology -paleoecologist -paleoecology -paleoencephalon -paleoentomologist -paleog -paleogenesis -paleogeography -paleographer -paleography -paleolith -paleologist -paleomagnetism -paleon -paleontography -paleontol -paleontology -paleopathologist -paleopedology -paleopsychology -paleozoologist -paleozoology -paleozoulogist -palestra -palet -paletot -palette -palfrey -palikar -palimpsest -palindrome -palindromist -paling -palingenesis -palingenesist -palinode -palinodist -palisade -palisado -palki -pall -palladium -pallbearer -pallet -palletization -pallette -palliasse -palliation -palliator -pallidness -pallium -pallor -palm -palmation -palmer -palmerworm -palmette -palmetto -palmist -palmiste -palmistry -palmitate -palmitin -palmyra -palolo -palometa -palomino -palooka -paloverde -palp -palpability -palpableness -palpation -palpi -palpitation -palsgrave -palsgravine -palstave -palsy -palterer -paltriness -paludamentum -paludism -palynology -pam -pamaquine -pampas -pamperedness -pamperer -pampero -pamphlet -pamphleteer -pamphrey -pamplegia -pampre -panacea -panache -panada -panatella -panatrophy -pancake -pancarditis -panchax -panchromatism -pancosmism -pancratium -pancreas -pancreatectomize -pancreatin -pancreatitis -pancreatotomy -panda -pandanus -pandect -pandemia -pandemicity -pandemonium -pandiculation -pandit -pandora -pandore -pandour -pandowdy -pandy -pandybat -pane -panegyric -panel -panelboard -paneling -panelist -panelling -panellist -panettone -panfish -pang -panga -pangenesis -pangolin -panguingue -panhandle -panhead -panic -panicle -panicmonger -panier -panjandrum -panleukopenia -panlogism -panmixia -pannage -panne -pannier -pannikin -pannus -panocha -panoply -panorama -panpipe -panplegia -panpsychist -pansophism -pansophist -pansophy -panspermia -pansy -pantagraph -pantaloon -pantechnicon -pantelegraph -pantelegraphy -panter -pantheism -pantheon -panther -pantie -pantihose -pantile -pantisocracy -pantler -panto -pantofle -pantograph -pantographer -pantography -pantologist -pantology -pantomime -pantomimicry -pantomimist -pantonality -pantothere -pantoum -pantry -pantryman -pantsuit -pantywaist -panus -panzer -pap -papa -papable -papacy -papain -papalise -papalization -papaverine -papaw -papaya -papelera -paper -paperback -paperbark -paperboard -paperbound -paperboy -paperclip -paperer -papergirl -paperhanger -paperhanging -paperiness -paperknife -paperweight -paperwork -papeterie -papilla -papilloma -papillomatosis -papillon -papillosity -papillote -papism -papist -papistry -papoose -pappenheimer -pappus -paprika -papule -papyrologist -papyrology -papyrus -par -para -parabasis -parabiosis -parablast -parable -parabola -parabole -parabolicalism -parabolist -parabolization -parabolizer -paraboloid -paraboloidal -parabrake -paracasein -paracentesis -paracetaldehyde -paracetamol -parachor -parachronism -parachute -parachuter -parachutism -parachutist -paraclete -paracyesis -paracystitis -parade -parader -paradiddle -paradigm -paradise -parados -paradox -paradoxicality -paradoxicalness -paradoxology -paradrop -paraesthesia -paraffin -paraffine -paraformaldehyde -paragenesis -parageusia -paraglider -paraglossa -paragoge -paragon -paragonite -paragraph -paragrapher -paragraphia -paragraphism -parahydrogen -paraison -parakeet -paralanguage -paraldehyde -paraleipsis -paralipsis -parallax -parallelepiped -parallelisation -parallelism -parallelization -parallelogram -paralogism -paralysation -paralyser -paralysis -paralyzation -paralyzer -paramagnet -paramagnetism -paramatta -paramecium -paramedic -parament -parameter -paramita -paramnesia -paramo -paramorph -paramorphine -paramorphism -paramountcy -paramour -paranephros -parang -paranoia -paranymph -paraparesis -parapet -paraph -paraphrase -paraphraser -paraphrasis -paraphrast -paraphyllium -paraphysis -paraplegia -parapodium -parapraxis -paraprofessional -parapsychology -parasang -parascenium -paraselene -parasite -parasiticalness -parasiticide -parasitism -parasitologist -parasitology -parasitosis -parasol -parastas -parastichy -parasynapsis -parasynaptist -parasynthesis -parasyntheton -parataxic -parataxis -parathion -parathyroidectomy -paratrooper -paratuberculin -paratuberculosis -paravane -paravent -parazoan -parbuckle -parcel -parceling -parcenary -parcener -parchedness -parcheesi -parchment -parclose -pard -pardah -pardalote -pardner -pardonableness -pardoner -pareciousness -parecism -parecy -paregmenon -paregoric -pareira -parenchyma -parens -parent -parentage -parenthesis -parentheticality -parentheticalness -parenthood -parenticide -parergon -paresis -paresthesia -paretic -paretta -pareu -parfait -parfleche -pargasite -parget -pargeting -parging -parhelion -pariah -pariahdom -pariahism -paries -paring -parish -parishioner -parishionership -parison -parity -park -parka -parkin -parking -parkland -parkway -parlance -parle -parley -parleyer -parliament -parliamentarian -parliamentarianism -parlor -parlormaid -parlour -parlousness -parochialism -parochialness -parodist -parodontium -parodos -parody -parol -parole -parolee -paronomasia -paronychia -paronym -paroquet -parotitis -parotoid -parousia -paroxysm -parpen -parpend -parquet -parquetry -parr -parrakeet -parramatta -parrel -parricide -parroket -parrot -parrotfish -pars -parsec -parser -parsimoniousness -parsimony -parsley -parsnip -parson -parsonage -part -partaker -partan -parterre -parthenocarpy -parthenogenesis -parthenogone -parthenospore -parti -partiality -participance -participant -participation -participiality -participialization -participle -particle -particularisation -particulariser -particularism -particularity -particularization -particularizer -parting -partisan -partisanry -partisanship -partita -partition -partitioner -partitionist -partitionment -partizan -partizanship -partlet -partner -partnership -parton -partridge -partridgeberry -parturiency -parturition -party -partyism -parulis -parure -parvenu -parvenudom -parvenuism -parvis -parvulus -pas -pascal -pase -paseo -pash -pasha -pashadom -pashalik -pashka -pashm -pasqueflower -pasquil -pasquinade -passableness -passacaglia -passade -passado -passage -passageway -passament -passaree -passbook -passe -passel -passementerie -passenger -passepied -passer -passibility -passingness -passion -passionary -passionateness -passionflower -passionfruit -passionlessness -passivism -passivist -passkey -passport -passus -password -pasta -paste -pasteboard -pastel -pastelist -paster -pastern -pasteurella -pasteurellosis -pasteurisation -pasteurism -pasteurization -pasteurizer -pasticcio -pastiche -pasticheur -pasticheuse -pastille -pastime -pastiness -pastis -pastor -pastorale -pastoralisation -pastoralism -pastoralist -pastoralization -pastorate -pastorship -pastosity -pastrami -pastry -pasturable -pasturage -pasture -pasturer -pataca -patagium -patch -patcher -patchouli -patchstand -patchwork -pate -patella -paten -patency -patent -patentability -patentee -patentor -pater -paterfamilias -paternalism -paternity -paternoster -path -patheticalness -pathfinder -pathfinding -pathic -pathobiologist -pathocure -pathogen -pathogenesis -pathognomy -pathography -pathol -pathology -pathoneurosis -pathos -pathosis -pathway -patience -patientness -patin -patina -patinated -patio -patisserie -patness -patois -patresfamilias -patrial -patriarch -patriarchate -patriarchdom -patriarchship -patriarchy -patrician -patricianhood -patricianism -patricianship -patriciate -patricide -patriliny -patrilocality -patrimony -patriot -patriotism -patrol -patroller -patrolman -patrology -patron -patronage -patrondom -patroniser -patronizer -patronship -patroon -patroonship -patsy -patten -patterer -patterist -pattern -patterner -patternmaking -pattle -patty -patulousness -paua -paucal -paucity -paughty -pauldron -paulownia -paunch -paunchiness -pauper -pauperage -pauperdom -pauperisation -pauperiser -pauperism -pauperization -pauperizer -pauraque -pauser -pav -pava -pavage -pavane -pavement -paver -pavilion -pavillon -pavin -paving -pavior -paviour -pavis -paviser -paw -pawer -pawl -pawnage -pawnbroker -pawner -pawnshop -pawpaw -pax -paxwax -paybox -paycheck -payday -payee -payer -payload -paymaster -paymastership -payment -paynim -paynimhood -payoff -payola -payroll -payt -pazaree -pc -pcf -pci -pct -pd -pe -pea -peace -peaceableness -peaced -peacelessness -peacemaker -peacemaking -peacetime -peach -peachblow -peacher -peachiness -peacing -peacoat -peacock -peacockery -peacockishness -peacockism -peafowl -peag -peahen -peak -peakiness -peakishness -peal -peamouth -pean -peanut -peanuts -peapod -pear -pearl -pearler -pearleye -pearlfish -pearliness -pearlite -pearloyster -pearlwort -pearmain -peartness -peasant -peasantry -pease -peasecod -peashooter -peasouper -peat -peavey -peavy -peba -pebble -pebbling -pebrine -pecan -peccadillo -peccancy -peccantness -peccary -peccatophobia -peccavi -pech -peck -pecker -pectase -pectate -pecten -pectin -pectinatella -pectination -pectinose -pectization -pectolite -pectoralis -pectose -peculiarity -peculium -ped -pedagogery -pedagogics -pedagogism -pedagogue -pedagoguery -pedagogy -pedal -pedalfer -pedalo -pedant -pedanthood -pedanticalness -pedanticism -pedantry -peddler -peddlery -pederast -pederasty -pedesis -pedestal -pedestrian -pedestrianism -pediatrician -pedicab -pedicel -pedicellation -pedicle -pediculosis -pedicure -pedicurist -pedigree -pediment -pediococcus -pedipalp -pedlar -pedlary -pedlery -pedobaptism -pedobaptist -pedocal -pedodontist -pedograph -pedologist -pedology -pedometer -pedro -peduncle -peekaboo -peeler -peeling -peen -peeper -peephole -peepshow -peepul -peer -peerage -peeress -peerie -peerlessness -peetweet -peevedness -peevers -peevishness -peewit -peg -pegboard -pegbox -pegh -pegmatite -pegwood -peh -peignoir -pein -pejoration -pekan -peke -pekin -pekoe -pelage -pelargonium -pele -pelecypod -pelerine -pelf -pelham -pelican -pelike -pelisse -pelite -pellagra -pellagrin -pellet -pellicle -pellitory -pellucidity -pellucidness -pelmet -peloid -peloria -pelorization -pelorus -pelota -peltast -peltation -pelter -peltry -pelvis -pemmican -pemphigoid -pemphigus -pen -penalisation -penalization -penalty -penance -penang -penaria -pence -pencel -penchant -pencil -pendant -pendative -pendency -pendentive -pendragon -pendragonship -pendulum -peneplain -penetrability -penetrableness -penetrameter -penetrance -penetratingness -penetration -penetrativeness -penetrativity -penetrator -penetrometer -peng -penguin -penholder -penicil -penicillation -penicillin -penicillium -peninsula -peninsularism -peninsularity -penitence -penitentiary -penknife -penlight -penman -penmanship -penna -pennaceous -pennant -penni -pennilessness -penninite -pennon -pennoncel -penny -pennycress -pennyroyal -pennyweight -pennywort -pennyworth -penologist -penology -penoncel -penpusher -pensae -pensil -pension -pensioner -pensionership -penstemon -penstock -pentachlorophenol -pentacle -pentad -pentadactylism -pentadecagon -pentagon -pentagram -pentahedron -pentalpha -pentamerism -pentamery -pentameter -pentamethylenediamine -pentane -pentangle -pentapody -pentaprism -pentaquine -pentarch -pentarchy -pentastich -pentastylos -pentasyllabism -pentasyllable -pentathlon -pentatron -pentene -penthouse -pentimento -pentlandite -pentobarbital -pentode -pentolite -pentosan -pentose -pentoxide -pentstemon -pentyl -pentylenetetrazol -penuche -penuchle -penult -penumbra -penuriousness -penury -peon -peonage -peonism -peony -people -peopler -pep -peperoni -pepino -peplos -peplum -pepo -pepper -peppercorn -pepperer -peppergrass -pepperidge -peppermint -peppershrike -pepperwood -pepperwort -peppiness -pepsin -pepsinogen -peptidase -peptide -peptone -peptonisation -peptoniser -peptonization -peptonizer -peptonoid -peracid -perambulation -perambulator -perborate -perborax -percale -percaline -perceivedness -perceiver -perceivingness -percent -percentage -percentile -percept -perceptibility -perceptibleness -perception -perceptiveness -perceptivity -perch -percher -perchlorate -perchloride -perchlorination -perchloroethylene -perchloromethane -percipience -percipiency -percolation -percolator -percussion -percussionist -percussiveness -percussor -perdifume -perdition -perdu -perdurability -perdurableness -peregrination -peregrinator -peregrinity -pereion -pereirine -perenniality -perfecter -perfectibilist -perfectibility -perfection -perfectionism -perfectionist -perfectiveness -perfectivity -perfectness -perfecto -perfervor -perfervour -perfidiousness -perfidy -perfin -perforation -perforator -performance -performer -perfume -perfumer -perfumery -perfunctoriness -perfusion -pergelisol -pergola -perh -perhydrogenation -perhydrol -peri -perianth -periapt -periarteritis -periastron -periauger -periblast -periblem -peribolos -peribolus -pericarditis -pericardium -pericarp -pericementum -pericenter -perichaetium -perichondrium -periclase -pericline -pericope -pericranium -pericycle -pericynthion -periderm -peridiole -peridiolum -peridium -peridot -peridotite -peridrome -peridromos -perigee -perigon -perigone -perigonium -perihelion -peril -perilousness -perilune -perilymph -perimeter -perimorph -perimorphism -perimysium -perinephrium -perineum -perineuritis -perineurium -period -periodate -periodical -periodicalism -periodicalist -periodicalness -periodicity -periodide -periodization -periodontics -perionychia -perionychium -periosteum -periostitis -periostracum -peripateticism -peripeteia -periphery -periphrasis -periphyton -peripteros -periptery -perique -perisarc -periscope -perishability -perishableness -perishment -perisperm -perispore -perissodactyl -peristalith -peristalsis -peristerite -peristome -peristyle -perithecium -perithelium -peritoneum -peritonitis -peritrack -peritrich -peritrichan -periwig -periwinkle -perjuredness -perjurement -perjurer -perjury -perknite -perling -perlite -perlocution -perm -permafrost -permalloy -permanence -permanency -permanentness -permanganate -permatron -permeability -permeableness -permeameter -permeance -permeator -permillage -permissibility -permissibleness -permission -permissiveness -permittivity -permutability -permutableness -permutation -permutationist -permuter -pernancy -perniciousness -pernicketiness -pernio -pernor -peroneus -peroration -peroratory -perosis -peroxidase -peroxidation -peroxide -peroxyacid -peroxyborate -perpend -perpendicularity -perpendicularness -perpent -perpetration -perpetrator -perpetuality -perpetualness -perpetuance -perpetuation -perpetuator -perpetuity -perphenazine -perplexedness -perplexer -perplexity -perquisite -perron -perruquier -perry -persalt -persecution -persecutor -perseity -perseverance -perseveration -persicaria -persiflage -persimmon -persistence -person -persona -personableness -personage -personalisation -personalism -personalist -personality -personalization -personalness -personalty -personation -personator -personification -personificator -personifier -personnel -persorption -perspective -perspectivism -perspectivist -perspicaciousness -perspicuity -perspicuousness -perspirability -perspiration -persuadability -persuadableness -persuadedness -persuader -persuasibility -persuasion -persuasiveness -persulfate -pertinaciousness -pertinacity -pertness -perturbation -perturbative -perturbator -perturbedness -perturber -perturbment -pertussis -peruke -perusal -peruser -perv -pervasion -pervasiveness -perverseness -perversion -perversity -perverter -pervertibility -pervicaciousness -perviousness -pes -pesade -peseta -pesewa -peso -pessary -pessimism -pessimist -pest -pesterer -pesthole -pesthouse -pesticide -pestiferousness -pestilence -pestilentialness -pestle -pet -peta -petal -petalage -petalody -petard -petasus -petcock -pete -petechia -peteman -peterman -petersham -pethidine -petiole -petiolule -petiteness -petition -petitioner -petitionist -petitor -peto -petrel -petrifaction -petrifier -petrochemical -petrochemistry -petrodollar -petrog -petrogenesis -petrogeny -petroglyph -petrogram -petrograph -petrographer -petrography -petrol -petrolatum -petroleum -petrologist -petrology -petronel -pettedness -petticoat -pettifogger -pettishness -petto -petulance -petulancy -petunia -petuntse -pew -pewage -pewee -pewholder -pewit -pewter -peyote -peytral -pf -pfennig -pfg -pg -phacolite -phaeton -phage -phagedena -phagocyte -phagocytolysis -phagocytosis -phagolysis -phagomania -phagophobia -phalange -phalanger -phalanges -phalanstery -phalanx -phalarope -phallicism -phallicist -phallist -phallus -phanatron -phanerite -phanerogam -phanerogamy -phanerophyte -phano -phanotron -phantasm -phantasmagoria -phantasmagorist -phantasmagory -phantasy -phantom -pharmaceutics -pharmacist -pharmacodynamics -pharmacognosist -pharmacognosy -pharmacolite -pharmacologist -pharmacology -pharmacopoeia -pharmacopoeist -pharmacopsychosis -pharmacy -pharyngectomy -pharyngitis -pharyngology -pharyngoscope -pharyngoscopy -pharyngotomy -pharynx -phase -phasis -phasmajector -phasmid -pheasant -phellem -phelloderm -phellogen -phelonion -phenacaine -phenacetin -phenacite -phenanthraquinone -phenanthrene -phenanthrenequinone -phenazine -phenetidine -phenetole -phenformin -phenix -phenmetrazine -phenobarbital -phenobarbitone -phenocopy -phenocryst -phenol -phenolion -phenology -phenolphthalein -phenomena -phenomenalism -phenomenalist -phenomenality -phenomenology -phenomenon -phenoplast -phenosafranine -phenothiazine -phenotype -phenoxide -phenoxybenzamine -phenyl -phenylacetaldehyde -phenylalanine -phenylamine -phenylbenzene -phenylcarbinol -phenyldiethanolamine -phenylethylene -phenylethylmalonylurea -phenylketonuria -phenylmethane -phenylthiourea -pheon -pheromone -phi -phial -phiale -phies -phil -philabeg -philadelphus -philanderer -philanthropist -philanthropy -philatelist -philately -philhellene -philhellenism -philibeg -philippic -philippus -phillumenist -philodendron -philogyny -philologer -philologian -philologist -philology -philomel -philopena -philos -philosopher -philosophership -philosophicalness -philosophisation -philosophiser -philosophism -philosophization -philosophizer -philosophy -philter -philterer -philtre -philtrum -phimosis -phiz -phlebitis -phlebosclerosis -phlebothrombosis -phlebotome -phlebotomisation -phlebotomist -phlebotomization -phlebotomy -phlegm -phlegmaticalness -phlegmaticness -phloem -phlogiston -phlogopite -phlogosis -phlorizin -phloroglucinol -phlox -phlyctaena -phlyctena -phobia -phocomelia -phoebe -phoenix -phokomelia -phon -phonasthenia -phonation -phonautograph -phone -phonematics -phoneme -phonemicist -phonemics -phonendoscope -phonet -phonetician -phonetics -phonetist -phonics -phoniness -phono -phonocardiogram -phonocardiograph -phonocardiography -phonogram -phonograph -phonographer -phonographist -phonography -phonol -phonolite -phonologist -phonology -phonometer -phonon -phonophore -phonoreception -phonoreceptor -phonoscope -phonotactics -phonotype -phonotyper -phonotypist -phonotypy -phoresy -phoronid -phosgene -phosgenite -phosphagen -phosphatase -phosphate -phosphatide -phosphation -phosphatisation -phosphatization -phosphaturia -phosphene -phosphide -phosphine -phosphite -phosphocreatine -phospholipid -phospholipide -phosphonium -phosphonuclease -phosphoprotein -phosphor -phosphorescence -phosphorisation -phosphorism -phosphorite -phosphoroscope -phosphorus -phosphorylase -phosphorylation -phot -photalgia -photics -photism -photo -photocathode -photocell -photochemist -photochemistry -photochromy -photochronograph -photochronography -photocomposer -photocomposition -photoconduction -photoconductivity -photoconductor -photocopier -photocopy -photocurrent -photodisintegration -photodissociation -photodrama -photodramatics -photodramatist -photoduplicate -photoduplication -photodynamics -photoelasticity -photoelectron -photoelectrotype -photoemission -photoeng -photoengraver -photoengraving -photofinisher -photofinishing -photofission -photoflash -photoflood -photofluorography -photogen -photogene -photogeology -photogram -photogrammetry -photograph -photographer -photography -photogravure -photoheliography -photoionization -photojournalism -photojournalist -photokinesis -photolithograph -photolithographer -photolithography -photolithoprint -photoluminescence -photolysis -photom -photomap -photometer -photometrician -photometrist -photometry -photomicrograph -photomicrography -photomicroscope -photomicroscopy -photomontage -photomultiplier -photomural -photon -photonasty -photoneutron -photopathy -photoperiod -photoperiodism -photophily -photophobia -photophore -photophosphorylation -photopia -photoplay -photopography -photopolymer -photoprinting -photoproton -photoreception -photoreceptor -photoreconnaissance -photorecorder -photorecording -photospectroscopy -photosphere -photostater -photostatter -photosynthate -photosynthesis -phototaxis -phototelegraph -phototelegraphy -phototheodolite -phototherapeutics -phototherapist -phototherapy -phototonus -phototopography -phototransistor -phototroph -phototropism -phototube -phototype -phototypesetting -phototypography -phototypy -photozincography -photuria -phr -phrase -phraseogram -phraseograph -phraseologist -phraseology -phrasing -phratry -phreatophyte -phren -phreneticness -phrenitis -phrenol -phrenologist -phrenology -phrensy -phthalein -phthalocyanine -phthiocol -phthiriasis -phthisis -phut -phycocolloid -phycocyanin -phycologist -phycology -phycomycete -phyla -phylactery -phyle -phyllary -phyllite -phylloclade -phyllocladium -phyllode -phyllody -phyllome -phyllophore -phyllopod -phylloquinone -phyllosilicate -phyllotaxis -phylloxera -phylogeny -phylum -phyma -phys -physiatrics -physiatrist -physic -physicalism -physicality -physician -physicianship -physicist -physics -physiocrat -physiognomist -physiognomy -physiography -physiologist -physiology -physiotherapist -physiotherapy -physique -physis -physostigmine -phytobiology -phytocide -phytoclimatology -phytocoenosis -phytogenesis -phytogeographer -phytogeography -phytographer -phytographist -phytography -phytohormone -phytology -phyton -phytonadione -phytopathologist -phytopathology -phytoplankton -phytoplasm -phytosociologist -phytosociology -phytotoxin -phytotron -piaffe -pian -pianette -pianism -pianist -piano -pianoforte -pias -piassava -piastre -piazza -pibgorn -piblokto -pibroch -pic -pica -picador -picaninny -picara -picaro -picaroon -picayunishness -piccalilli -piccanin -piccaninny -piccolo -piccoloist -pice -pich -pichiciego -pickaback -pickaninny -pickaroon -pickax -pickaxe -picker -pickerel -pickerelweed -picket -picketer -pickin -pickle -picklock -pickpocket -pickthank -pickwick -picnic -picnicker -picocurie -picofarad -picoline -picometer -picong -picosecond -picot -picotee -picowatt -picrate -picrite -picrotoxin -pictogram -pictograph -pictorialisation -pictorialization -pictorialness -picture -picturegoer -picturesqueness -picturization -picul -piddler -piddock -pidgin -pidginization -pie -piebaldness -piece -piecer -piecework -pieceworker -piecrust -piedmontite -piefort -pieman -piend -pieplant -pier -piercer -piercingness -pierhead -piet -pietism -piety -piezochemistry -piezoelectricity -piezometer -piezometry -piffle -pig -pigboat -pigeon -pigeonberry -pigeonhole -pigeonite -pigeonwing -pigface -pigfish -pigg -piggery -piggie -piggin -piggishness -piggy -piggyback -piglet -pigling -pigmeat -pigment -pigmentation -pignolia -pignon -pignus -pignut -pigpen -pigskin -pigsticker -pigsticking -pigsty -pigswill -pigtail -pigweed -pika -pike -pikelet -pikeman -pikeperch -piker -pikestaff -pil -pilaf -pilaster -pilastered -pilau -pilch -pilchard -pilcher -pile -pileum -pileup -pileus -pilewort -pilferage -pilferer -pilgarlic -pilgrim -pilgrimage -pili -piling -pill -pillar -pillaret -pillbox -pillion -pilliwinks -pillory -pillow -pillowcase -pillwort -pilocarpine -pilosity -pilot -pilotage -pilotfish -pilothouse -piloti -piloting -pilpul -pilpulist -pilular -pilule -pilus -pimelitis -pimento -pimiento -pimola -pimp -pimpernel -pimple -pimply -pin -pinacoid -pinafore -pinang -pinard -pinaster -pinball -pinchbeck -pinchbottle -pinchcock -pincher -pincushion -pine -pineapple -pinene -pinery -pinetum -pinfall -pinfeather -pinfish -pinfold -ping -pingo -pinguidity -pinhead -pinhole -pinion -pinite -pinitol -pink -pinkeye -pinkie -pinko -pinkroot -pinky -pinna -pinnace -pinnacle -pinnation -pinner -pinnula -pinnule -pinny -pinochle -pinole -pinprick -pinsetter -pinspotter -pinstripe -pint -pinta -pintadera -pintado -pintail -pintano -pintle -pinup -pinweed -pinwheel -pinwork -pinworm -pinx -pinxit -piolet -pion -pioneer -piosity -piousness -pip -pipa -pipage -pipal -pipe -pipeclay -pipefish -pipefitting -pipeful -pipeline -piper -piperazine -piperidine -piperine -piperonal -pipestone -pipet -pipette -pipewort -piping -pipistrelle -pipit -pipkin -pipper -pippin -pipsissewa -pipsqueak -piqu -piqua -piquancy -piquantness -pique -piquet -piracy -piragua -piranha -pirate -piriformis -pirn -pirog -pirogen -pirogue -pirouette -pisa -pisay -piscary -piscatology -piscator -pisciculture -pisciculturist -piscina -pishogue -pisistance -pismire -pisolite -pistachio -pistareen -piste -pistil -pistol -pistole -pistoleer -pistology -piston -pit -pita -pitahaya -pitanga -pitchblende -pitcher -pitcherful -pitchfork -pitchiness -pitching -pitchman -pitchometer -pitchout -pitchpot -pitchstone -piteousness -pitfall -pith -pithead -pithecanthropid -pithecanthropus -pithiness -pithos -pitiableness -pitier -pitifulness -pitilessness -pitman -piton -pitsaw -pitta -pittance -pituitary -pituitousness -pituri -pity -pityriasis -pivot -pivoting -pixel -pixie -pizaine -pizz -pizza -pizzeria -pizzle -pk -pkg -pkt -pl -placability -placableness -placage -placard -placarder -place -placebo -placeman -placemanship -placement -placenta -placentation -placer -placet -placidity -placidness -plack -placket -placode -placoderm -plafond -plaga -plage -plagiariser -plagiarism -plagiarist -plagiary -plagiocephaly -plagioclase -plagioclastic -plagioclimax -plagiotropism -plague -plaguer -plaice -plaid -plainchant -plainness -plainsman -plainsong -plaint -plaintiff -plaintiffship -plaintiveness -plaister -plait -plaiting -plan -planarian -planation -plancer -planch -planchet -planchette -plane -planer -planet -planetarium -planetesimal -planetoid -planetology -planform -planigraph -planigraphy -planimeter -planimetry -planisphere -plank -planker -planking -plankter -plankton -planoblast -planogamete -planograph -planography -planometer -planometry -planosol -planospore -plansheer -plant -plantain -plantation -planter -plantocracy -planula -plaque -plash -plasher -plasm -plasma -plasmacyte -plasmagel -plasmagene -plasmalogen -plasmapheresis -plasmasol -plasmin -plasmocyte -plasmodesma -plasmodium -plasmogamy -plasmolysis -plasmolytic -plasmon -plasmoquine -plasmosome -plaster -plasterboard -plasterer -plasteriness -plastering -plasterwork -plastic -plasticisation -plasticity -plasticization -plasticizer -plastid -plastique -plastiqueur -plastometer -plastometry -plastotype -plastral -plastron -plat -platan -platband -plate -plateau -plateholder -platelayer -platelet -platemark -platen -plater -platform -platina -platinate -plating -platiniridium -platinisation -platinization -platinocyanide -platinotron -platinotype -platinum -platitude -platitudinisation -platitudiniser -platitudinization -platitudinizer -platitudinousness -platoon -platteland -platter -platycephaly -platyhelminth -platykurtosis -platypus -platysma -plaudit -playa -playacting -playback -playbill -playbook -playday -playdown -player -playfulness -playgirl -playgoer -playground -playhouse -playlet -playmaker -playmate -playpen -playreader -playroom -playschool -playsuit -plaything -playtime -playwright -playwriting -plaza -plea -pleader -pleading -pleadingness -pleasance -pleasantness -pleasantry -pleasedness -pleaser -pleasingness -pleasurableness -pleasure -pleat -pleater -pleb -plebe -plebeianisation -plebeianism -plebeianization -plebeianness -plebiscite -plebs -plectognath -plectron -plectrum -pledge -pledgee -pledger -pledget -pledgor -pleiad -pleiomery -pleiophylly -pleiotaxy -pleiotropism -plenitude -plenteousness -plentifulness -plenty -plenum -pleochroism -pleomorphism -pleon -pleonasm -pleopod -plerergate -plesiosaur -plessor -plethora -plethysmograph -pleura -pleurisy -pleurite -pleurodynia -pleuron -pleuropneumonia -pleurotomy -pleuston -plew -pleximeter -pleximetry -plexor -plexus -plia -pliability -pliableness -pliancy -pliantness -plica -plication -plie -plier -plight -plimsoll -plinker -plinth -pliss -plisse -ploce -plodder -ploddingness -plonko -plop -plosion -plot -plotlessness -plottage -plotter -plough -ploughboy -plougher -ploughman -ploughmanship -ploughshare -ploughstaff -plover -plow -plowboy -plower -plowman -plowmanship -plowshare -ploy -plu -plucker -pluckiness -plucklessness -plug -plugboard -plugger -plum -plumage -plumb -plumbago -plumber -plumbery -plumbicon -plumbing -plumbism -plumbness -plumbum -plumcot -plume -plumoseness -plumosity -plumper -plumule -plunderage -plunger -plunker -plupf -plur -pluralisation -pluraliser -pluralism -plurality -pluralization -pluralizer -pluripresence -plush -plushness -pluteus -plutocracy -plutocrat -pluton -plutonium -pluviometer -pluviometry -pluviosity -plyer -plywood -pm -pneum -pneuma -pneumaticity -pneumatics -pneumatocyst -pneumatograph -pneumatologist -pneumatology -pneumatolysis -pneumatometer -pneumatophore -pneumatotherapy -pneumectomy -pneumobacillus -pneumococcus -pneumoconiosis -pneumodynamics -pneumoencephalitis -pneumoencephalogram -pneumograph -pneumography -pneumonectomy -pneumonia -pneumonitis -pneumonoconiosis -pneumonoultramicroscopicsilicovolcanoconiosis -pneumothorax -po -poacher -poachiness -pochade -pochard -pochette -pocill -pock -pocket -pocketbook -pocketful -pocketing -pocketknife -pockmark -pococurante -pococuranteism -pococurantism -pocosin -pocul -pod -podagra -poddock -poddy -podesta -podetium -podginess -podiatrist -podiatry -podite -podium -pododynia -podomere -podophyllin -podophyllum -podotheca -podsolization -podzol -podzolization -poem -poenology -poesy -poet -poetaster -poetastering -poetasterism -poetastery -poetastry -poetess -poetics -poetiser -poetizer -poetry -pogamoggan -pogey -pogge -pogonia -pogrom -pogy -pohutukawa -poi -poignancy -poikilie -poikiloblast -poikilothermism -poikilothermy -poil -poilu -poimenics -poinciana -poinsettia -point -pointal -pointe -pointedness -pointel -pointer -pointillism -pointillist -pointing -pointlessness -pointsman -pointwise -poise -poiser -poison -poisoner -poisoning -pokeberry -pokelogan -poker -pokie -pokiness -pol -polacca -polacre -polarimeter -polarisability -polarisation -polariscope -polariser -polarity -polarization -polarogram -polarography -polder -pole -poleax -poleaxe -polecat -polejumper -polemarch -polemics -polemist -polenta -poler -poleyn -polianite -police -policeman -policewoman -policlinic -policy -policyholder -poliencephalitis -poliencephalomyelitis -polimetrum -polio -polioencephalitis -poliomyelitis -polis -polisher -polit -politeness -politesse -politicalization -politician -politicking -politico -politics -polity -polje -polka -poll -pollack -pollakiuria -pollan -pollard -pollbook -pollen -pollenosis -pollera -pollex -pollicitation -pollination -pollinator -pollinium -pollinization -pollinosis -polliwog -pollock -pollster -pollucite -pollutant -pollutedness -polluter -pollution -pollyfish -pollywog -polo -polocyte -poloist -polonaise -polonium -polony -polos -poltergeist -poltroon -poltroonery -poly -polyacrylonitrile -polyamide -polyamine -polyandrist -polyandry -polyanthus -polyarchy -polyarteritis -polyarthritis -polybasicity -polybasite -polybutene -polybutylene -polycarpy -polycentrism -polychaete -polychasium -polychromy -polyclad -polyclinic -polycotyledon -polycrystal -polycythemia -polydactylism -polydaemonism -polydaemonist -polydemonist -polydipsia -polydontia -polyembryony -polyester -polyethylene -polygala -polygamist -polygamy -polygene -polygenesis -polygenetic -polygenist -polygon -polygonum -polygraph -polygrapher -polygraphist -polygynist -polygyny -polyhedron -polyhistor -polyhistory -polyimide -polyisoprene -polymath -polymer -polymerism -polymerization -polymorph -polymorphism -polymyxin -polyneuritis -polynucleotide -polynya -polyp -polypary -polypeptide -polypetaly -polyphagia -polyphagian -polyphagist -polyphone -polyphony -polypidom -polyploidy -polypnea -polypody -polypropylene -polyprotodont -polyptych -polypus -polyrhythm -polysaccharide -polysemy -polyspast -polystyrene -polysulfide -polysulfonate -polysulphide -polysuspensoid -polysyllable -polysyllogism -polysyndeton -polysynthesism -polytechnic -polytetrafluoroethylene -polytheism -polytheist -polythene -polytomy -polytonality -polyunsaturate -polyurethane -polyuria -polyvalence -polyvinyl -polyvinylpyrrolidone -polyvoltine -polyzoan -polyzoarium -pomace -pomade -pomander -pomatum -pombe -pome -pomegranate -pomelo -pomey -pomfret -pomiculture -pomiculturist -pommel -pommy -pomologist -pomology -pomp -pompadour -pompano -pompom -pompon -pomposity -ponce -ponceau -poncho -pond -ponderer -ponderosity -ponderousness -pondokkie -pondweed -pone -pong -pongee -pongid -poniard -ponograph -pons -pont -pontage -pontianak -pontic -ponticello -pontifex -pontiff -pontil -pontlevis -pontonier -pontoon -pony -ponytail -pooch -pood -poodle -pooftah -pooka -pool -poolroom -poon -poonce -poorhouse -poorness -poort -poortith -poove -popcorn -pope -popedom -popery -popgun -popie -popinac -popinjay -popishness -poplar -poplin -popliteus -popover -poppa -poppadom -popper -poppet -poppethead -poppy -poppycock -poppyhead -popsy -populace -popularisation -populariser -popularity -popularization -popularizer -population -populist -populousness -por -porbeagle -porcelain -porcelainization -porcelaneous -porch -porcupine -porgy -porion -porism -pork -porkchop -porker -porkfish -porkiness -porkpie -pornocracy -pornographer -pornography -porosity -porousness -porphyria -porphyrin -porphyrisation -porphyrization -porphyrogenite -porphyropsin -porphyry -porpoise -porrection -porridge -porringer -port -portage -portal -portamento -portance -portcullis -portent -portentousness -porter -porterage -porteress -porterhouse -portfire -portfolio -porthole -portiare -portico -portiere -portion -portioner -portliness -portmanteau -portolano -portrait -portraitist -portraiture -portrayal -portrayer -portress -portulaca -pos -posada -poser -poseur -posho -positif -position -positivism -positron -positronium -posologist -posology -posse -possession -possessiveness -possessor -possessoriness -possessorship -posset -possibility -possie -possum -possy -post -postabdomen -postact -postage -postarmistice -postbag -postbox -postboy -postbrachium -postcard -postcava -postcode -postcommunion -postconfinement -postcontract -postembryonic -poster -posterity -postern -postexistence -postfactor -postgraduate -posthumousness -postie -postil -postilion -postimpressionism -posting -postlegitimation -postliminy -postlude -postman -postmark -postmarriage -postmaster -postmastership -postmillennialism -postmillennialist -postmistress -postnotum -postposition -postredemption -postremogeniture -postresurrection -postrider -postscript -postscutellum -postsigner -postulant -postulantship -postulation -postulator -posture -posturer -posy -pot -potability -potableness -potage -potamogale -potamology -potamoplankton -potash -potass -potassa -potassium -potation -potato -potbelly -potboiler -potboy -potch -poteen -potence -potency -potentate -potentiality -potentiation -potentiator -potentilla -potentiometer -potentness -potful -pothead -pothecary -potheen -pother -potherb -potholder -pothole -potholer -potholing -pothook -pothouse -pothunter -pothunting -potiche -potion -potlatch -potlicker -potlikker -potline -potluck -potman -potometer -potoo -potoroo -potpie -potpourri -potsherd -potstone -potsy -pott -pottage -potter -pottery -pottle -potto -potus -pouch -poudrin -pouf -poulard -poult -poulterer -poultice -poultry -poultryman -poundage -poundal -pounder -pourability -pourboire -pourer -pourparler -pourpoint -poussette -poussie -poussin -pouter -poverty -powan -powder -power -powerboat -powerfulness -powerhouse -powerlessness -powwow -pox -poyntell -pozzuolana -pozzy -pp -ppd -pph -ppl -ppm -pq -pr -praam -pracharak -pracieuse -pracis -practicality -practicalness -practice -practicer -practicum -practitioner -prad -praecipitatio -praediality -praefect -praelection -praelector -praemunire -praencipe -praenomen -praepostor -praetexta -praetor -praetorianism -praetorship -pragmaticality -pragmaticalness -pragmaticism -pragmatics -pragmatism -pragmatist -prahm -prahu -prairie -prairillon -praise -praiseworthiness -prajna -praline -pralltriller -pram -prana -pranava -prancer -prand -prang -pranidhana -prank -prankishness -prankster -prao -prase -praseodymium -prat -prater -pratfall -pratincole -pratique -prattler -prau -pravenance -prawn -prawner -praxis -prayer -prayerfulness -prayerlessness -preabundance -preacceptance -preaccess -preaccommodation -preaccomplishment -preaccord -preaccordance -preaccumulation -preaccusation -preacher -preachment -preacidity -preacknowledgement -preacknowledgment -preacness -preacquaintance -preacquisition -preacquisitiveness -preacquittal -preaction -preactiveness -preactivity -preadamite -preadaptation -preaddition -preaddress -preadequacy -preadequateness -preadherence -preadjournment -preadjustment -preadministration -preadministrator -preadmirer -preadmission -preadmonition -preadoption -preadornment -preadulthood -preadvertisement -preadvertiser -preadvice -preadvocacy -preadvocate -preaemptor -preaexistence -preaffection -preaffidavit -preaffiliate -preaffiliation -preaffirmation -preaffliction -preafternoon -preaggravation -preaggression -preaggressiveness -preagitation -preagreement -preagriculture -prealgebra -preallegation -prealliance -preallotment -preallowance -preallusion -preally -prealteration -preamalgamation -preambition -preamble -preamplifier -preanesthetic -preannouncement -preannouncer -preantiquity -preappearance -preapperception -preapplication -preappointment -preapprehension -preapprobation -preapproval -preaptitude -prearrangement -prearrestment -preascertainment -preassembly -preassumption -preassurance -preattachment -preavowal -prebankruptcy -prebarbarousness -prebelief -prebeliever -prebend -prebendary -prebenediction -prebeneficiary -prebestowal -prebetrayal -prebid -preblockade -preboast -preborrowing -preboyhood -prebudget -precalculation -precampaign -precancellation -precandidacy -precandidature -precanning -precapitalist -precaptivity -precariousness -precaution -precedence -precedency -precedent -precelebrant -precelebration -precensus -precentor -precentorship -precept -preceptor -preceptorship -preceptory -preceremony -precertification -precession -prechampionship -prechildhood -prechoice -precinct -preciosity -precipice -precipitancy -precipitateness -precipitation -precipitator -precipitin -precipitousness -precirculation -precis -preciseness -precisian -precisianism -precision -precitation -precivilization -preclaimant -preclaimer -preclassification -precleaner -preclimax -preclosure -precociousness -precocity -precogitation -precognition -precoiler -precoincidence -precollapsibility -precollection -precollector -precollege -precollusion -precolor -precoloration -precolour -precolouration -precombat -precombatant -precombination -precombustion -precommand -precomment -precommunication -precomparison -precompensation -precompilation -precompiler -precompleteness -precompletion -precompliance -precomplication -precomprehension -precomprehensiveness -precompression -precompulsion -precomradeship -preconcealment -preconcentration -preconception -preconcern -preconcernment -preconcertedness -preconcession -preconclusion -preconcurrence -precondemnation -precondensation -precondition -preconduction -preconductor -preconference -preconfession -preconfiguration -preconfinement -preconfirmation -preconformity -preconfusion -precongestion -precongratulation -preconise -preconization -preconizer -preconnection -preconquest -preconsecration -preconsent -preconsideration -preconsolidation -preconspiracy -preconspirator -preconstituent -preconstruction -preconsultation -preconsultor -preconsumer -preconsumption -precontemplation -precontemporaneity -precontention -precontentment -precontest -precontract -precontribution -precontrivance -precontrol -precontroversy -preconvention -preconversation -preconversion -preconveyance -preconviction -precooler -precopy -precoronation -precorrection -precorrectness -precorrespondence -precorridor -precorruption -precorruptness -precounsel -precounsellor -precreation -precreditor -precreed -precriticism -precultivation -preculture -precure -precurriculum -precursor -precurtain -precyclone -pred -predamage -predamnation -predarkness -predata -predation -predatism -predator -preday -predaylight -predaytime -predealer -predealing -predeath -predebate -predebater -predebit -predebtor -predeceiver -predeception -predecessor -predecision -predeclaration -predeclination -prededication -prededuction -predefault -predefeat -predefect -predefence -predefense -predefiance -predeficiency -predefinition -predegeneracy -predegree -predelay -predelegate -predelegation -predeliberation -predelineation -predelinquency -predelivery -predella -predelusion -predemocracy -predemonstration -predeparture -predependence -predepletion -predeposit -predepository -predepreciation -predepression -predeprivation -prederivation -predescent -predescription -predeserter -predesertion -predespondency -predestinarian -predestinarianism -predestination -predestitution -predestruction -predetachment -predetainer -predetection -predetention -predetermination -predeterminer -predevelopment -predevotion -prediagnosis -predicability -predicableness -predicament -predication -predictability -prediction -predictiveness -predictor -prediet -predifficulty -predigestion -predikant -predilection -prediminishment -prediminution -predinner -prediploma -prediplomacy -predirection -predirector -predisagreement -predisappointment -predisaster -prediscernment -predischarge -predisclosure -prediscontent -prediscontentment -prediscount -prediscouragement -prediscourse -prediscoverer -prediscovery -prediscrimination -prediscriminator -prediscussion -predisgrace -predisguise -predisgust -predislike -predismissal -predisorder -predispatch -predispatcher -predispersion -predisplacement -predisplay -predisposal -predisposedness -predisposition -predisputant -predisputation -predispute -predisruption -predissatisfaction -predissolution -predistortion -predistress -predistribution -predistributor -predistrict -predistrust -predisturbance -prediversion -predivider -predivinity -predivision -predivorce -predivorcement -prednisone -predoctorate -predominance -predomination -predominator -predonation -predonor -predormition -predoubt -predoubter -predraft -predrawer -predread -predriller -predriver -preduplication -predusk -predynastic -preedition -preeditor -preeducation -preeffect -preeffort -preelection -preeligibility -preeligibleness -preelimination -preeliminator -preemancipation -preembarrassment -preembodiment -preemie -preeminence -preemotion -preemperor -preemployee -preemployer -preemployment -preemption -preemptor -preenaction -preenclosure -preencounter -preencouragement -preendeavor -preendorsement -preendorser -preener -preenforcement -preenjoyment -preenlargement -preenlightener -preenlightenment -preenlistment -preenrollment -preentailment -preentertainer -preentertainment -preenthusiasm -preentrance -preentry -preenumeration -preenvelopment -preepidemic -preequalization -preequipment -preequity -preerection -preeruption -preescape -preessay -preessential -preestimate -preestimation -preeternity -preevaporation -preevaporator -preevasion -preevidence -preevolutionist -preexaction -preexamination -preexaminer -preexception -preexcitation -preexclusion -preexcursion -preexecution -preexecutor -preexemption -preexhaustion -preexhibit -preexhibition -preexhibitor -preexistence -preexpansion -preexpectant -preexpectation -preexpedition -preexpenditure -preexpense -preexperience -preexperiment -preexpiration -preexplanation -preexplosion -preexposition -preexposure -preexpounder -preexpression -preextent -preextinction -preextinguishment -preextraction -pref -prefab -prefabrication -prefabricator -preface -prefacer -prefactor -prefamiliarity -prefavor -prefavorite -prefeast -prefect -prefecture -prefecundation -preferability -preferableness -preference -preferentialist -preferment -prefermentation -preferredness -preferrer -prefertility -prefertilization -prefestival -prefeudalism -prefiguration -prefigurativeness -prefigurement -prefiller -prefix -prefixion -preflavor -preflight -preforgiveness -preformation -preformulation -prefoundation -prefounder -prefrankness -prefraud -prefreshman -prefriendship -prefulfillment -prefunction -prefurlough -pregainer -pregeneration -pregirlhood -pregnability -pregnancy -pregnantness -pregraduation -pregranite -pregratification -pregrievance -pregrowth -preguarantee -preguarantor -preguess -preguidance -preguilt -prehandicap -prehardener -preharmoniousness -preharmony -preharvest -prehatred -prehearing -preheater -prehension -prehesitancy -prehesitation -prehistorian -prehistory -prehnite -preholder -preholding -prehominid -prehostility -prehumor -prehunger -preidea -preidentification -preignition -preilium -preillumination -preillustration -preimage -preimagination -preimitation -preimmigration -preimpairment -preimport -preimportance -preimportation -preimposition -preimpression -preimprovement -preincentive -preinclination -preinclusion -preincorporation -preincrease -preindebtedness -preindemnification -preindemnity -preindependence -preindication -preindisposition -preinducement -preinduction -preindulgence -preindustry -preinfection -preinference -preinflection -preinfliction -preinfluence -preinhabitant -preinhabitation -preinheritance -preinitiate -preinitiation -preinquisition -preinscription -preinsertion -preinsinuation -preinspection -preinspector -preinstallation -preinstillation -preinstruction -preinsulation -preinsurance -preintelligence -preintention -preintercession -preinterchange -preintercourse -preinterest -preinterpretation -preinterview -preintimation -preinvention -preinventory -preinvestigation -preinvestigator -preinvestment -preinvitation -preinvocation -preinvolvement -preirrigation -preissuance -preissue -prejudgement -prejudger -prejudgment -prejudice -prejurisdiction -prejustification -prekindergarten -preknowledge -prelabel -prelabor -prelacy -prelate -prelateship -prelatism -prelatist -prelature -prelawfulness -prelease -prelection -prelecture -prelegend -preliability -prelibation -preliberality -preliberation -prelicense -prelim -prelimit -preliquidation -preliterature -prelitigation -preloan -preloss -prelude -preluder -preluxuriousness -prem -premadness -premaintenance -premaker -premanhood -premanifestation -premankind -premarriage -premastery -prematch -premate -prematernity -prematureness -prematurity -premaxilla -premeasurement -premedian -premedication -premeditatedness -premeditation -premeditator -prememorandum -premenace -premention -premidnight -premidsummer -premie -premier -premiere -premiership -premillenarian -premillenarianism -premillennialism -premillennialist -preministry -premisrepresentation -premiss -premium -premixer -premixture -premodification -premold -premolder -premonition -premonopoly -premorality -premorbidness -premortification -premuddle -premunition -premutiny -prenegligence -prenegotiation -prenomen -prenomination -prenotion -prentice -preobedience -preobjection -preobligation -preoblongata -preobservance -preobservation -preobstruction -preobtrusion -preobviousness -preocclusion -preoccultation -preoccupancy -preoccupant -preoccupation -preoccupiedness -preoccupier -preoccurrence -preoffensiveness -preoffer -preomission -preoperation -preoperator -preopinion -preopposition -preoppression -preoppressor -preoption -preorder -preordinance -preorganization -preoutline -preoverthrow -prep -preparation -preparator -preparedness -preparental -preparticipation -prepartition -prepartnership -prepatent -prepavement -prepayment -prepeduncle -prepenetration -prepersuasion -prepetition -preplacement -prepolish -prepollex -preponderance -preportrayal -preposition -prepositor -prepossessingness -prepossession -preposterousness -prepostor -prepotency -prepreparation -preprimer -preprint -preprohibition -prepromise -prepromotion -prepronouncement -preprovision -preprovocation -prepsychology -prepubis -prepublication -prepuce -prepunishment -prepupa -prepurchase -prepurchaser -prequalification -prequarantine -prequotation -prereadiness -prerealization -prereceiver -prerecital -prereckoning -prerecognition -prerecommendation -prereconcilement -prereconciliation -preredemption -prereference -prerefinement -prerefusal -preregistration -prerejection -prerelation -prerelationship -prerelease -prereluctance -preremittance -preremorse -preremoval -preremuneration -prerental -prereport -prerepresentation -prerequest -prerequirement -preresemblance -preresolution -prerespectability -prerespiration -preresponsibility -prerestraint -prerestriction -prereturn -prerevelation -prerevenge -prereversal -prereverse -prereview -prerevision -prerevival -prerighteousness -prerogative -preromanticism -preroyalty -pres -presa -presacrifice -presage -presager -presanctification -presatisfaction -presavagery -presbycusis -presbyope -presbyopia -presbyter -presbyterate -presbytery -prescience -prescriber -prescript -prescription -prescriptiveness -prescriptivism -preseal -presearch -preseason -preselection -preselector -presence -presenility -presentability -presentableness -presentation -presentationalism -presentationism -presentationist -presentee -presentiment -presentist -presentiveness -presentment -preseparation -preseparator -preservability -preservation -preservative -preserver -presession -presettlement -preshadow -preshape -preshare -preshipment -preshortage -presidency -president -presidentship -presider -presidio -presidium -presignal -presocialism -presocialist -presolicitation -presolution -presound -prespecialist -prespecification -prespeculation -pressboard -presser -pressie -pressingness -pressman -pressmark -pressoreceptor -pressroom -pressrun -pressure -pressurization -presswork -prestamp -prestandard -prestandardization -presteel -prestidigitation -prestidigitator -prestige -prestimulation -prestimulus -prestissimo -prestock -prestorage -prestrain -prestruggle -prestudiousness -presubjection -presubmission -presubordination -presubscriber -presubscription -presubsistence -presubstitution -presuccess -presufficiency -presuffrage -presuggestion -presuitability -presumer -presumption -presumptuousness -presuperintendence -presuperintendency -presupervision -presupervisor -presupplication -presupply -presupport -presupremacy -presurmise -presurrender -presurvey -presusceptibility -presuspension -presuspicion -presuspiciousness -preswallow -presympathy -presymphony -presymptom -presystole -pret -preta -pretabulation -pretariff -pretarsus -pretaste -pretaster -pretemptation -pretence -pretender -pretense -pretension -preterist -preterit -preterite -preteriteness -preterition -preteritness -pretermission -pretermitter -preternaturalism -preternaturality -preternaturalness -pretestimony -pretext -pretexta -prethrust -pretimeliness -pretincture -pretoken -pretor -pretournament -pretrace -pretraining -pretransaction -pretranscription -pretranslation -pretransmission -pretransportation -pretravel -prettification -prettifier -prettiness -pretyranny -pretzel -preutilization -prevacation -prevaccination -prevailingness -prevalence -prevalentness -prevalidity -prevaluation -prevariation -prevaricator -prevegetation -prevenance -preventer -prevention -preventiveness -preventorium -preventure -preverification -preversion -preview -previgilance -previolation -previsibility -prevision -previsit -previsitor -previsor -prevogue -prevoidance -prevolunteer -prevote -prewarrant -prewash -prewelcome -prewillingness -prewitness -preworldliness -preworship -preworthiness -prewound -prexy -prey -preyer -priapism -priapitis -price -pricelessness -pricer -pricket -pricking -prickle -prickleback -prickspur -pride -pridefulness -prier -primacy -primage -primaquine -primariness -primate -primateship -primatologist -primatology -primavera -primely -primeness -primer -primero -primigravida -primine -priming -primipara -primitiveness -primitivism -primitivist -primitivity -primness -primo -primogenitor -primogeniture -primogenitureship -primordiality -primordium -primrose -primula -primus -prince -princedom -princekin -princeliness -princeling -princeship -princess -principality -principalship -principate -principe -principium -principle -prinker -printability -printableness -printer -printery -printing -printmaker -printmaking -prion -priorate -prioress -priority -priorship -priory -prisage -prisiadka -prism -prismatoid -prismoid -prison -prisoner -prissiness -priv -privacy -privatdocent -privateer -privateness -privation -privet -privilege -privileger -privity -prize -prizefight -prizefighter -prizefighting -prn -proa -proabolitionist -proaccelerin -proagon -proanarchism -proarbitrationist -prob -probabilism -probability -proband -probang -probate -probation -probationer -probationership -prober -probity -problem -proboscis -proc -procaine -procambium -procapitalist -procarp -procathedral -procbal -procedure -proceeder -proceeding -procellas -process -procession -processor -prochlorite -prochoos -prochronism -proclaimer -proclamation -proclivity -procollectivism -procommunism -proconstitutionalism -proconsul -proconsulate -procrastination -procrastinativeness -procrastinator -procreant -procreation -procreativeness -procreator -proctoclysis -proctodaeum -proctodeum -proctologist -proctology -proctor -proctorship -proctoscope -proctoscopy -procuracy -procurance -procuration -procurator -procuratorate -procuratorship -procuratory -procurement -procurer -prodd -prodder -prodigiousness -prodigy -prodomos -prodrome -producer -product -production -productiveness -productivity -proem -proempiricism -proempiricist -proenzyme -proestrus -prof -profaneness -profanity -profascism -profeminism -profeminist -proferment -profert -profession -professionalisation -professionalism -professionalization -professionless -professor -professorate -professoriate -professorship -profferer -proficiency -proficientness -profile -profiler -profit -profitability -profitableness -profiteer -profiterole -profligateness -profoundness -profunda -profundity -profuseness -profusion -profusiveness -progenitiveness -progenitor -progeny -progesterone -progestin -proglottis -prognosis -prognostication -program -programme -programmer -progress -progression -progressionism -progressionist -progressism -progressist -progressiveness -progressivist -prohibiter -prohibition -prohibitionist -prohibitiveness -prohibitor -project -projectile -projection -projectionist -projectivity -projector -projet -prolactin -prolamin -prolamine -prolan -prolapse -prolateness -prolation -prole -proleg -prolegomenon -prolepsis -proletarianization -proletarianness -proletariat -proletarization -prolicide -proliferation -proline -prolixity -prolixness -prolocutor -prolocutorship -prologist -prologue -prologuiser -prologuist -prologuizer -prologus -prolongation -prolonge -prolonger -prolongment -prolusion -prom -promazine -promenade -promenader -prometacenter -promethazine -promethium -prominence -promiscuity -promiscuousness -promisee -promiser -promisor -promonarchist -promontory -promoter -promotion -promotiveness -promptbook -prompter -promptitude -promptness -promulgation -promulgator -promulger -promycelium -pronaos -pronation -pronationalism -pronator -proneness -pronephros -prong -pronghorn -pronotum -pronoun -pronounceableness -pronouncedness -pronouncement -pronouncer -pronucleus -pronunciamento -pronunciation -proof -proofing -proofreader -propacifism -propacifist -propaedeutic -propagability -propagableness -propaganda -propagandism -propagandist -propagation -propagator -propagule -propagulum -propane -propapist -propatriotism -propellant -propeller -propene -propenol -propensity -properness -property -prophage -prophase -prophecy -prophesier -prophet -propheticality -propheticalness -prophylaxis -propinquity -propionaldehyde -propionate -propitiousness -propjet -propman -propolis -proponent -proportion -proportionability -proportionableness -proportionality -proportionateness -proportioner -proportionment -proposal -proposer -proposition -propositus -propr -propraetor -propranolol -proprietor -proprietorship -proprietress -propriety -proprioceptor -proptosis -propulsion -propyl -propylaea -propylaeum -propylene -propylhexedrine -propylite -prorealism -proreality -prorogation -proromanticism -pros -prosaicness -prosaism -proscenium -proscholasticism -prosciutto -proscriber -proscription -prose -prosector -prosecution -prosecutor -proselyte -proselyter -proselytisation -proselytiser -proselytism -proselytization -prosencephalon -prosenchyma -proser -prosimian -proslaver -proslaveryism -prosodist -prosody -prosopopoeia -prospect -prospectiveness -prospector -prospectus -prosperity -prosperousness -prosphora -prosphoron -pross -prosser -prostaglandin -prostas -prostasis -prostate -prostatectomy -prostatitis -prosternum -prosthesis -prosthetics -prosthetist -prosthion -prosthodontics -prosthodontist -prostitute -prostitution -prostitutor -prostomium -prostoon -prostration -prostrator -prosyndicalism -prosyndicalist -protactinium -protagonism -protagonist -protamine -protandry -protanomaly -protanope -protanopia -protasis -protea -protease -protection -protectionism -protectionist -protector -protectorate -protectorship -protectory -protege -protein -proteinase -proteinuria -proteolysis -proteose -proterandrousness -proterandry -proterogyny -proterotype -protest -protestation -protester -prothalamion -prothalamium -prothallus -prothesis -prothonotary -prothorax -prothrombin -protist -protistology -protium -protoactinium -protochordate -protocol -protogine -protogyny -protohistory -protohuman -protolanguage -protolog -protomartyr -protomorph -proton -protonema -protonotary -protopathy -protopectin -protophloem -protoplasm -protoplast -protopope -protopresbyter -protostar -protostele -prototype -protoxide -protoxylem -protozoan -protozoologist -protozoology -protozoon -protozoulogist -protractedness -protractility -protraction -protractor -protrusion -protuberancy -proturan -protyle -proudness -prounionism -proustite -prov -provability -provableness -provenance -provender -provenience -proventriculus -prover -proverb -providence -providentness -provider -province -provincialism -provinciality -provision -provisionality -provisionalness -provisioner -proviso -provitamin -provocation -provocativeness -provokingness -provolone -provost -provostship -prow -prowess -prowfish -prowler -prox -proximateness -proximation -proximity -proxy -prp -prs -prude -prudence -prudery -prudishness -prunability -prunableness -prune -prunella -prunelle -pruner -prunt -prurience -pruriency -prurigo -pruritus -prussianisation -prussianiser -prussianization -prussianizer -prussiate -pruta -prutah -pryer -pryingness -prytaneum -prythee -ps -psalm -psalmbook -psalmist -psalmodist -psalmody -psalterium -psaltery -psammite -psammosere -pschent -psec -psellism -psephite -psephologist -psephology -pseud -pseudamphora -pseudaxis -pseudepigrapha -pseudoacquaintance -pseudoacromegaly -pseudoamateurism -pseudoanemia -pseudoappendicitis -pseudobrachium -pseudocarp -pseudocercaria -pseudocercus -pseudoclassicality -pseudoclassicism -pseudocoel -pseudoconcha -pseudocosta -pseudocyclosis -pseudocyesis -pseudocyphella -pseudodementia -pseudoderm -pseudoedema -pseudogenus -pseudohemophilia -pseudohermaphrodite -pseudohermaphroditism -pseudolabium -pseudolegality -pseudoleucite -pseudoleucocyte -pseudolunula -pseudolunule -pseudomalaria -pseudomemory -pseudometric -pseudoministry -pseudomonas -pseudomorph -pseudomorphism -pseudomutuality -pseudonym -pseudonymity -pseudonymousness -pseudoparalysis -pseudophone -pseudopodium -pseudoscope -pseudoscopy -pseudoscorpion -pseudosphere -pseudovary -psf -psi -psia -psid -psilanthropist -psilocybin -psilomelane -psittacinite -psittacosis -psoas -psocid -psoralea -psoriasis -psorosis -psychasthenia -psychataxia -psyche -psychedelia -psychiatrist -psychiatry -psycho -psychoacoustics -psychoanal -psychoanalysis -psychoanalyzer -psychobiologist -psychobiology -psychochemical -psychodiagnosis -psychodiagnostics -psychodrama -psychodynamics -psychogalvanometer -psychogenesis -psychognosis -psychographer -psychohistory -psychokinesis -psychol -psycholinguistics -psychologism -psychologist -psychology -psychomancy -psychometrician -psychometrics -psychometrist -psychometry -psychoneurosis -psychopath -psychopathist -psychopathologist -psychopathology -psychopathy -psychopharmacology -psychophysics -psychophysiologist -psychophysiology -psychopomp -psychoprophylaxis -psychosis -psychosomatics -psychosurgery -psychotechnics -psychotechnology -psychotherapeutist -psychotherapist -psychotherapy -psychrometer -psychrometry -psychrophile -psyllid -pt -ptarmigan -pteranodon -pteridologist -pteridology -pteridophyte -pteridosperm -pterodactyl -pteroma -pteron -pteropod -pterosaur -pterygium -pteryla -pterylography -pterylology -pterylosis -ptg -ptilosis -ptisan -ptochocracy -ptomaine -ptosis -ptp -pts -ptyalectasis -ptyalin -ptyalism -pub -puberty -pubis -publ -publican -publication -publicist -publicity -publicness -publicute -publisher -publishing -publishment -puca -puccoon -puce -puck -puckerer -pudding -puddingwife -puddle -puddler -puddling -puddock -pudency -pudendum -pudginess -pueblo -puerilism -puerility -puerpera -puerperium -puff -puffball -puffbird -puffer -puffery -puffin -pug -pugaree -pugdog -puggaree -pugginess -pugging -puggree -pugilism -pugnaciousness -pugnacity -puirness -puissance -puja -puku -pul -pulchritude -pulchritudinous -puler -puli -pulka -pullet -pulley -pullover -pullus -pulp -pulpboard -pulpit -pulpiteer -pulpitum -pulpwood -pulque -pulsar -pulsatility -pulsation -pulsator -pulse -pulsebeat -pulsejet -pulsimeter -pulsojet -pulsometer -pulu -pulverisation -pulveriser -pulverization -pulverizer -pulverulence -pulvillus -pulvinus -puma -pumice -pumicer -pump -pumpernickel -pumping -pumpkin -pumpkinseed -pumpman -pumpwell -pun -puna -punchball -punchboard -punchbowl -puncheon -puncher -punctation -punctilio -punctiliousness -punctuality -punctualness -punctuation -punctuator -puncture -pundit -pung -pungency -pungy -puniness -punisher -punishment -punitiveness -punk -punka -punkah -punkie -punner -punnet -punster -punt -punter -puntilla -puntillero -punty -pup -pupa -puparium -pupil -pupillage -puppet -puppeteer -puppetry -puppy -puppydom -puppyfoot -puppyhood -purae -purblindness -purchaser -purdah -puree -pureness -purfle -purfler -purga -purgation -purgative -purgatory -purger -purificator -purine -purism -purist -puritan -puritanicalness -purity -purl -purler -purlieu -purlin -purloiner -purpart -purparty -purple -purpleheart -purpleness -purplishness -purpose -purposelessness -purposiveness -purpresture -purpura -purpure -purpurin -purree -purse -purser -pursiness -purslane -pursuance -pursuer -pursuit -pursuivant -purtenance -purulence -purusha -purveyance -purveyor -purview -pus -pushball -pushcard -pushcart -pushchair -pusher -pushiness -pushingness -pushover -pushpin -pushrod -pusillanimity -puss -pussley -pustulation -pustule -putamen -putlog -putrefaction -putrefier -putrescence -putrescency -putrescibility -putrescine -putridity -putridness -putrilage -putt -puttee -putter -puttie -puttier -putto -putty -puttying -puttyroot -puzzledness -puzzlement -puzzler -puzzlingness -puzzolana -pwr -pwt -pya -pyaemia -pycnidium -pycniospore -pycnometer -pye -pyelitis -pyelography -pyelonephritis -pyelonephrosis -pyemia -pygidium -pygmy -pygmyism -pyin -pyjama -pylon -pylorectomy -pylorus -pyoderma -pyogenesis -pyometra -pyonephritis -pyopericardium -pyophthalmia -pyorrhea -pyorrhoea -pyosalpinx -pyosepticemia -pyosis -pyothorax -pyracantha -pyralid -pyramid -pyramidion -pyran -pyranometer -pyrargyrite -pyrazole -pyrazoline -pyrazolone -pyre -pyrene -pyrenocarp -pyrenoid -pyrethrin -pyrethrum -pyretologist -pyretology -pyretotherapy -pyrexia -pyrheliometer -pyridine -pyridoxal -pyridoxamine -pyridoxine -pyrimidine -pyrite -pyrites -pyritohedron -pyrobi -pyrobitumen -pyrocatechol -pyrochlore -pyroconductivity -pyroelectricity -pyrogallate -pyrogallol -pyrogen -pyrographer -pyrography -pyrologist -pyrology -pyrolusite -pyrolysis -pyromancer -pyromancy -pyromania -pyromaniac -pyrometallurgy -pyrometer -pyrometry -pyromorphite -pyrone -pyrope -pyrophosphate -pyrophotometer -pyrophyllite -pyrosis -pyrostat -pyrosulfate -pyrosulphate -pyrotechnics -pyrotoxin -pyroxene -pyroxenite -pyroxylin -pyrrhic -pyrrhotite -pyrrhuloxia -pyrrole -pyrrolidine -pythogenesis -python -pythoness -pyuria -pyx -pyxidium -pyxie -pyxis -q -qadi -qaf -qaid -qasida -qat -qe -qh -qibla -qid -qintar -ql -qoph -qp -qr -qt -qto -qtr -qu -quackery -quacksalver -quad -quadra -quadragenarian -quadrangle -quadrangular -quadrant -quadraphonics -quadrat -quadrate -quadratic -quadratics -quadrature -quadrel -quadrella -quadrennium -quadricentennial -quadriceps -quadricycle -quadricycler -quadricyclist -quadriga -quadrigatus -quadrilateralness -quadrille -quadrillion -quadrinomial -quadriplegia -quadriplegic -quadrireme -quadrisection -quadrisyllable -quadrivalence -quadrivalency -quadrivium -quadroon -quadrumane -quadruped -quadrupedism -quadrupleness -quadruplet -quadruplicity -quaere -quaestor -quaestorship -quaffer -quag -quagga -quagmire -quahog -quaich -quail -quaintness -quakiness -quale -qualification -qualifiedness -qualifier -qualimeter -quality -qualm -qualmishness -quamash -quandary -quandong -quango -quant -quanta -quantic -quantifier -quantitativeness -quantitiveness -quantity -quantization -quantong -quantum -quarantine -quarantiner -quark -quarrel -quarreler -quarreller -quarrelsomeness -quarrian -quarrier -quarry -quarryman -quart -quarte -quarter -quarterage -quarterback -quarterdeck -quarterer -quarterfinal -quarterfinalist -quartering -quarterlight -quartermaster -quartermastership -quartern -quarterpace -quarterstaff -quartet -quartile -quarto -quartz -quartzite -quasar -quass -quassia -quatercentenary -quaternion -quaternity -quatorze -quatrain -quatre -quatrefoil -quattrocento -quaverer -quay -quayage -quayside -quean -queasiness -quebracho -quebrada -queen -queencake -queendom -queenfish -queenhood -queening -queenliness -queller -quelquechose -quenchableness -quencher -quenchlessness -quenelle -quercetin -quercitron -querist -quern -quersprung -query -ques -quest -quester -question -questionability -questionableness -questionary -questioner -questionnaire -questor -questorship -quetsch -quetzal -queue -queuer -quey -quibbler -quiche -quickhatch -quickie -quicklime -quickness -quicksand -quickset -quicksilver -quickstep -quickwittedness -quickwork -quid -quiddity -quidnunc -quiescence -quiescency -quietener -quieter -quietism -quietist -quietness -quietude -quietus -quiff -quill -quillai -quiller -quillet -quillfish -quilling -quillon -quillwort -quilt -quilter -quilting -quim -quin -quinacrine -quinarius -quinazoline -quince -quincentenary -quincunx -quincy -quindecagon -quindecaplet -quinhydrone -quinia -quinidine -quinine -quinoa -quinoid -quinoidine -quinol -quinoline -quinone -quinonimine -quinoxaline -quinquagenarian -quinquagenary -quinquecentenary -quinquefoil -quinquennium -quinquereme -quinquevalence -quinquevalency -quinsy -quint -quintain -quintal -quintant -quinte -quintessence -quintet -quintile -quintillion -quintillionth -quinton -quintuplet -quintuplication -quinua -quinze -quip -quippishness -quipster -quipu -quire -quirk -quirkiness -quirt -quisling -quist -quitch -quitclaim -quitrent -quittance -quittor -quiverer -quiverful -quixotism -quiz -quizmaster -quizzer -quizzicality -quizzicalness -quod -quodlibet -quodlibetz -quoin -quoit -quokka -quor -quorum -quot -quota -quotation -quoter -quoteworthy -quotid -quotidianness -quotient -r -rab -rabal -rabato -rabban -rabbet -rabbi -rabbin -rabbinate -rabbinism -rabbit -rabbiter -rabbitfish -rabbitoh -rabbitry -rabble -rabblement -rabbler -rabi -rabidity -rabidness -rabies -raccoon -race -racecard -racecourse -racegoer -racehorse -raceme -racemism -racemization -racemule -racer -racerunner -racetrack -raceway -rachauffa -rachilla -rachis -rachitis -racialism -racialist -racinage -raciness -racist -rack -rackboard -racket -racketeer -rackets -rackett -rackwork -racon -raconteur -racoon -racquet -rad -radar -radarman -radarscope -raddleman -radeau -radectomy -radian -radiance -radiancy -radiation -radiator -radicalism -radicalness -radicand -radicel -radices -radicle -radiculitis -radii -radio -radioactinium -radioactivity -radioautograph -radioautography -radiobiologist -radiobiology -radiobroadcast -radiobroadcaster -radiocarbon -radiochemist -radiochemistry -radiocommunication -radiodiagnosis -radioelement -radiogram -radiograph -radiographer -radiography -radioiron -radioisotope -radiolarian -radiolocation -radiologist -radiology -radiolucence -radiolucency -radioluminescence -radiolysis -radioman -radiometeorograph -radiometer -radiometry -radiomicrometer -radionuclide -radiopacity -radiophare -radiophone -radiophotograph -radiophotography -radioscope -radioscopy -radiosonde -radiostrontium -radiosurgery -radiotelegram -radiotelegraphy -radiotelemetry -radiotelephone -radiotelephony -radioteletype -radiotherapist -radiotherapy -radiothermy -radiothorium -radiotracer -radiotransparency -radiotransparent -radiov -radish -radium -radius -radix -radome -radon -radula -raff -raffee -raffia -raffinate -raffinose -raffishness -raffle -raffles -rafflesia -rafraochissoir -raft -rafter -rag -raga -ragamuffin -ragbag -ragbolt -rage -ragfish -raggedness -raggle -ragi -ragisseur -raglan -ragman -ragout -ragpicker -ragtag -ragtime -ragweed -ragwork -ragworm -ragwort -raia -raid -raider -rail -railcar -railer -railhead -railing -raillery -railroad -railroader -railroading -railway -railwayman -raiment -rain -rainband -rainbird -rainbow -raincheck -raincoat -raindrop -rainfall -rainforest -raininess -rainlessness -rainmaker -rainmaking -rainout -rainstorm -rainwater -rainwear -raiser -raisin -raising -raj -rajah -rajas -rake -rakee -rakehell -raker -raki -rakishness -rale -rall -rallier -rallycross -rallye -ram -ramark -rambla -rambler -ramblingness -rambutan -ramekin -ramentum -rami -ramie -ramification -ramjet -rammer -rammishness -ramon -ramoulade -ramp -rampager -rampart -rampike -rampion -ramrod -ramshackleness -ramson -ramtil -ramus -rance -ranch -rancher -rancherie -ranchero -ranchman -rancho -rancidity -rancidness -rancorousness -rancour -rand -randan -randomness -ranee -range -rangefinder -ranger -rangpur -rani -rank -ranker -rankness -ransacker -ranseur -ransom -ransomer -ranter -ranula -ranunculus -raob -rapaciousness -rapacity -rapatiteur -rapeoil -rapeseed -raphe -raphia -raphide -rapidity -rapier -rapine -raploch -rapparee -rappee -rapper -rapping -rapport -rapporteur -rapprochement -rapscallion -raptor -rapture -rapturousness -raptus -rarebit -rarefaction -rarefier -rareness -rarity -rasa -rasbora -rascal -rascality -rascasse -raser -rasher -rasistant -rasistante -rason -rasophore -rasp -raspatory -raspberry -rasper -raspingness -rasse -raster -rasuma -rasure -rat -rata -ratability -ratableness -ratafia -ratal -ratan -rataplan -ratatouille -ratbag -ratbaggery -ratcatcher -ratch -ratchet -rate -rateability -rateableness -rateen -ratel -ratepayer -rater -ratfink -ratfish -ratha -ratheness -rathole -rathskeller -ratificationist -ratifier -ratina -ratine -rating -ratio -ratiocination -ratiocinator -ration -rationale -rationalisation -rationaliser -rationalism -rationality -rationalization -rationalizer -rationalness -ratline -ratoon -ratsbane -rattan -ratteen -rattener -rattening -ratter -rattlebox -rattlebrain -rattlehead -rattlepate -rattlesnake -rattletrap -ratton -rattoon -rattrap -raucity -raucousness -raught -rauwolfia -ravagement -ravager -raveler -ravelin -raveling -raveller -ravelment -raven -raver -ravigote -ravine -ravioli -ravisher -ravishment -rawhide -rawin -rawinsonde -rawishness -rawness -ray -rayah -raylessness -raylet -rayon -rayonny -razee -razer -razoo -razor -razorback -razorbill -razorfish -razzia -rcd -rchauff -rclame -rcpt -rcvr -rd -re -reabsorption -reacceptance -reaccession -reacclimatization -reaccumulation -reaccusation -reacher -reacidification -reacknowledgment -reacquaintance -reacquisition -reactance -reactant -reaction -reactionarism -reactionaryism -reactionism -reactivation -reactor -readability -readaptability -readaptation -readaptiness -readdition -reader -readership -readiness -reading -readjournment -readjudication -readjuster -readjustment -readmission -readmittance -readoption -readornment -readvertisement -readvocation -reaeducation -reaentrance -reaexportation -reaexporter -reaffiliation -reaffirmation -reaffront -reagent -reaggregation -reagitation -realgar -realienation -realignment -realisation -realiser -realism -realist -reality -realizability -realizableness -realizer -reallegation -realliance -reallocation -reallotment -realm -realpolitik -realterableness -realteration -realtor -realty -ream -reamalgamation -reamassment -reamendment -reamer -reanalysis -reanimation -reannexation -reannotation -reannouncement -reanointment -reaper -reapology -reappearance -reappliance -reapplication -reappointment -reapportionment -reappraisal -reapprehension -reappropriation -reapproval -rear -rearbitration -rearguard -reargument -rearmouse -rearousal -rearrangement -rearticulation -rearwardness -reascent -reason -reasonability -reasonableness -reasoner -reasoning -reassembly -reassertion -reassessment -reassignation -reassignment -reassimilation -reassistance -reassociation -reassortment -reassumption -reassurance -reassurement -reassurer -reata -reattachment -reattainment -reattraction -reaudit -reaudition -reauthentication -reauthorization -reavowal -reawakening -reb -rebab -reballot -rebaptism -rebate -rebatement -rebato -rebbe -rebec -rebeldom -rebellion -rebelliousness -rebirth -rebop -rebore -reboso -rebounder -rebozo -rebroadcast -rebuilder -reburial -rebus -rebuttal -rebutter -rec -recalcitrance -recalcitrancy -recalcitration -recalculation -recalescence -recancellation -recanter -recapitalization -recapitulation -recaption -recarburization -recarburizer -recaster -recce -receipt -receiptor -receivability -receivableness -receiver -receivership -recelebration -recency -recension -recentness -recentralization -recept -receptacle -reception -receptionism -receptionist -receptor -recertification -recess -recession -recessiveness -recharger -recheck -recidivism -recidivist -recipe -recipience -recipient -reciprocality -reciprocalness -reciprocation -reciprocator -reciprocity -recirculation -recision -recital -recitatif -recitation -recitative -recitativo -reciter -reckoner -reckoning -reclaimant -reclaimer -reclamation -reclassification -reclination -recliner -recluse -reclusion -recoagulation -recodification -recogniser -recognition -recognizance -recognizee -recognizer -recognizor -recoinage -recollectedness -recollection -recollectiveness -recolonisation -recolonization -recoloration -recolouration -recombination -recommencement -recommendation -recommender -recommission -recommitment -recommittal -recomparison -recompilation -recomposition -recomputation -recon -reconcealment -reconcentration -reconcilability -reconcilableness -reconcilement -reconciler -recondemnation -recondensation -reconditeness -reconfirmation -reconfrontation -reconfusion -reconnaissance -reconnection -reconnoiterer -reconnoitrer -reconquest -reconsecration -reconsideration -reconsignment -reconsolidation -reconstitution -reconstruction -reconstructiveness -reconsultation -recontact -recontemplation -recontraction -reconvention -reconvergence -reconversion -reconveyance -reconviction -record -recorder -recording -recoronation -recountal -recoupment -recourse -recoverableness -recoverer -recovery -recpt -recreance -recreancy -recreation -recreativeness -recreator -recrement -recrimination -recriminator -recrudescence -recruiter -recruitment -recrystallization -rect -recta -rectangle -rectangularity -rectangularness -rectectomy -recti -rectification -rectifier -rectitude -recto -rectocele -rector -rectorial -rectory -rectrix -rectus -recultivation -recuperation -recuperativeness -recuperator -recurrence -recursion -recusancy -recusant -red -redaction -redactor -redan -redbird -redbone -redbreast -redbrick -redbud -redbug -redcap -redcoat -redcurrant -reddle -reddleman -rede -redeal -redebate -redecision -redeclaration -redecoration -rededication -redeemability -redeemableness -redeemer -redefinition -redelegation -redeliberation -redeliverer -redelivery -redemonstration -redemption -redemptioner -redenial -redeployment -redepreciation -redescent -redescription -redesignation -redeveloper -redevelopment -redeye -redfin -redfish -redhandedness -redhead -redhibition -redhorse -redia -redifferentiation -rediffusion -redigestion -redingote -redintegration -redisbursement -rediscovery -rediscussion -redismissal -redispersal -redisposition -redissection -redissolubleness -redissolution -redistillabness -redistillation -redistribution -redivision -redivorce -redleg -redneck -redness -redolence -redolency -redoubler -redoubt -redoubtableness -redowa -redox -redpoll -redraft -redrawer -redresser -redressor -redroot -redshank -redskin -redstart -redtapism -redtop -reducer -reducibility -reducibleness -reduct -reductase -reduction -reductionism -reductor -redundancy -redupl -reduplication -reduviid -reduzate -redware -redwing -redwood -reebok -reed -reedbird -reedbuck -reediness -reeding -reedling -reeducation -reef -reefer -reeffish -reeker -reel -reelection -reeler -reelevation -reeligibility -reeligibleness -reembarcation -reembarkation -reemergence -reemersion -reemigration -reemission -reemphasis -reemployment -reen -reenaction -reenactment -reencounter -reencouragement -reendorsement -reendowment -reengagement -reenjoyment -reenlargement -reenlightenment -reenlistment -reentrance -reentry -reenumeration -reenunciation -reerection -reeruption -reestablishment -reestimate -reestimation -reevacuation -reevaluation -reevasion -reeve -reexcavation -reexecution -reexhibition -reexpansion -reexplanation -reexplication -reexploration -reexportation -reexporter -reexposition -reexposure -reexpression -ref -refamiliarization -refection -refectory -refederalization -refederation -referee -reference -referendum -referent -referential -referral -refertilization -reffo -refinedness -refinement -refinery -refl -reflation -reflectance -reflection -reflectiveness -reflectivity -reflectometer -reflector -reflectorize -reflet -reflex -reflexion -reflexiveness -reflexivity -reflexness -reflorescence -reflower -refluence -reforfeiture -reformability -reformableness -reformation -reformativeness -reformatory -reformer -reformism -reformulation -refortification -refractedness -refraction -refractiveness -refractivity -refractometer -refractometry -refractor -refractoriness -refrainer -refrainment -refresher -refreshingness -refreshment -refrigerant -refrigeration -refrigerator -refringence -refringency -refuge -refugee -refugium -refulgence -refulgency -refulgentness -refunder -refundment -refusal -refuser -refutability -refutation -refuter -regainer -regalia -regality -regalness -regalvanization -regardfulness -regatta -regelation -regency -regeneracy -regenerateness -regeneration -regenerator -regent -regermination -reggae -regicide -regime -regimen -regiment -regimentation -regina -region -regionalism -regionalist -register -registerer -registrability -registrant -registrar -registrarship -registration -registry -regle -reglet -reglorification -regma -rego -regolith -regosol -regovernment -regr -regradation -regrater -regression -regressiveness -regressor -regretableness -regretfulness -regrettableness -regretter -regrowth -reguarantee -reguaranty -regularity -regularization -regularizer -regularness -regulation -regulator -regulus -regurgitation -rehabilitation -rehearing -rehearsal -rehearser -reheater -reheating -rehoboam -rehospitalization -rehumanization -rehumiliation -reichsthaler -reidentification -reif -reign -reignition -reillumination -reillustration -reimplantation -reimportation -reimposition -reimpression -reimprisonment -rein -reinauguration -reincarnation -reincarnationist -reinclusion -reindeer -reindication -reindictment -reindoctrination -reindorsement -reinducement -reinduction -reindulgence -reindustrialization -reinfection -reinfestation -reinfiltration -reinflation -reinforcement -reinforcer -reinfusion -reinjury -reinoculation -reinquiry -reinsertion -reinspection -reinspiration -reinstallation -reinstallment -reinstalment -reinstatement -reinstation -reinstator -reinstitution -reinstruction -reinsurance -reinsurer -reintegration -reinterest -reinterment -reinterpretation -reinterrogation -reinterruption -reintervention -reinterview -reintrenchment -reintroduction -reinvasion -reinvention -reinvestigation -reinvestment -reinvigoration -reinvitation -reinvolvement -reirrigation -reis -reisolation -reiver -rejectee -rejecter -rejection -rejoinder -rejudgement -rejudgment -rejustification -rejuvenescence -rel -relapser -relatability -relatedness -relater -relation -relationship -relativeness -relativism -relativist -relativity -relator -relatum -relaxant -relaxation -relaxedness -relaxin -relay -releasability -releaser -relegation -relentlessness -releva -relevance -relevancy -reliability -reliance -relic -relict -relief -reliefer -relier -reliever -religieuse -religieux -religion -religionism -religionist -religiosity -religiousness -relinquisher -relinquishment -reliquary -relique -reliquidation -relitigation -reload -reloan -relocation -reluctance -reluctivity -rem -remagnetization -remainder -remainderman -remake -remaker -remanence -remanifestation -remarker -remarque -remarriage -remastery -remastication -rematch -rematerialization -remblai -remeasurement -remediableness -remediation -remedy -rememberer -remembrance -remembrancer -remex -remigrant -remigration -remilitarization -reminiscence -remissibility -remissibleness -remission -remissiveness -remissness -remital -remittance -remittee -remittence -remittency -remitter -remittor -remnant -remobilization -remodeler -remodification -remolade -remonetisation -remonetization -remonstrance -remonstrant -remonstration -remonstrator -remontoir -remontoire -remora -remorse -remorsefulness -remorselessness -remoteness -remotion -removability -removableness -removal -removalist -removedness -remover -remultiplication -remunerability -remuneration -remunerativeness -remunerator -renascence -renavigation -rencontre -renderer -rendering -rendezvous -rendition -rendu -rendzina -renegade -renegado -renegation -reneger -renegotiation -renewal -renewer -renga -renin -renitence -renitency -rennet -rennin -renomination -renormalization -renotation -renotification -renouncement -renouncer -renourishment -renovation -renovator -renown -renownedness -rensselaerite -rent -rentability -rental -rente -renter -rentier -renullification -renunciation -renvoi -reobligation -reobservation -reoccupation -reoccurrence -reoperation -reorchestration -reorganiser -reorganization -reorganizer -reorientation -rep -repagination -repairableness -repairer -repairman -reparation -repartee -repartition -repassage -repast -repayment -repealability -repealableness -repealer -repeatability -repeater -repechage -repellence -repellency -repeller -repellingness -repentance -reperception -repercussion -repercussiveness -reperforator -reperformance -repertoire -repertory -reperusal -repetend -repetiteur -repetition -repetitiveness -repic -repiner -replacement -replay -repleader -repleteness -repletion -replevin -replica -replication -replier -repolarization -repopularization -repopulation -report -reportage -reporter -reposal -repose -reposedness -reposefulness -reposer -reposition -repository -repossession -repossessor -repostulation -repoussage -repp -reprehender -reprehensibility -reprehensibleness -reprehension -representation -representationalism -representationalist -representative -representativeness -represser -repression -repressiveness -repressor -reprimand -reprimander -reprint -reprinter -reprisal -reprise -repro -reproachableness -reproacher -reproachfulness -reproachlessness -reprobation -reproclamation -reproducer -reproducibility -reproduction -reproductiveness -reprography -repromulgation -reproof -reprotest -reprovableness -reproval -rept -reptile -republic -republicanisation -republicaniser -republicanism -republicanization -republicanizer -republication -repudiation -repugnance -repulser -repulsion -repulsiveness -repunctuation -repunishment -repurification -reputability -reputableness -reputation -req -requalification -requiescat -requirement -requisiteness -requisition -requisitioner -requisitionist -requital -requitement -requiter -reradiation -reredos -reregistration -reregulation -reremouse -rerental -res -resale -resawer -resawyer -rescission -rescript -rescrutiny -research -reseau -resect -resection -reseda -resegregation -reseizure -reselection -reseller -resemblance -resensation -resensitization -resentence -resentfulness -resentment -reseparation -reserpine -reservation -reservedness -reservist -reservoir -resetter -resettlement -resh -reshipment -reshuffle -residence -residency -resident -residentship -resider -residue -residuum -resignation -resilement -resilience -resin -resinification -resinousness -resipiscence -resistance -resistate -resister -resistibility -resistibleness -resistiveness -resistivity -resistlessness -resistor -resnatron -resolicitation -resolidification -resolubility -resolubleness -resoluteness -resolution -resolutioner -resolvability -resolvableness -resolvedness -resolver -resonance -resonation -resonator -resorbence -resorcinol -resorcinolphthalein -resorption -resource -resourcefulness -resp -respecification -respect -respectability -respecter -respectfulness -respectiveness -respirability -respirableness -respiration -respirator -respiratory -respirometry -respite -resplendence -respondence -respondent -response -responser -responsibility -responsibleness -responsion -responsiveness -responsor -responsory -responsum -ressentiment -rest -restabilization -restatement -restaurant -restaurateur -rester -resterilization -restfulness -restharrow -restimulation -restipulation -restitution -restiveness -restlessness -restorableness -restoration -restorationism -restorer -restr -restrainability -restrainer -restraint -restrictedness -restriction -restrictiveness -restringer -restudy -resubjection -resublimation -resubmission -resubscription -resubstantiation -resuit -result -resumer -resummons -resumption -resuppression -resurgam -resurgence -resurrection -resurrectionism -resurrectionist -resuscitation -resuscitator -resuspension -resymbolization -resynthesis -retable -retail -retailer -retainer -retaker -retaliation -retaliator -retally -retardant -retardate -retardation -retarder -retardment -retaxation -retd -rete -retem -retene -retention -retentionist -retentivity -retepore -retest -retestimony -retiarius -reticle -reticulation -reticule -reticulocyte -reticulum -retina -retinaculum -retinene -retinite -retinitis -retinol -retinoscope -retinoscopy -retinue -retiredness -retiree -retirement -retirer -retorsion -retorter -retortion -retoucher -retractability -retractation -retractibility -retractility -retraction -retractiveness -retractor -retranscription -retransfer -retransference -retranslation -retransmission -retransplantation -retreatingness -retrenchment -retrial -retribution -retrieval -retriever -retro -retroaction -retrocedence -retrocession -retrochoir -retrofire -retroflexion -retrogradation -retrogression -retropack -retrorocket -retrospect -retrospection -retrospectiveness -retroussage -retroversion -retrusion -retsina -returnee -reunification -reunion -reunionism -reunionist -reuniter -reupholsterer -reupholstery -reusability -reusabness -reuseabness -reutilization -reutterance -rev -revaccination -revalidation -revaluation -revamper -revampment -revanche -revanchism -revaporization -revealability -revealableness -revealer -revealingness -revealment -revegetation -reveille -revelation -revelationist -revelator -revelry -revenant -revenge -revengefulness -revenger -reventilation -revenue -revenuer -reverberation -reverberator -reverence -reverencer -reverendship -reverentiality -reverentialness -reverer -reverie -reverification -revers -reversal -reverser -reversibility -reversibleness -reversion -reversioner -reverso -reverter -revertibility -revetment -revibration -reviewability -revilement -reviler -revindication -reviolation -revisal -revision -revisionism -revisionist -revisitation -revisualization -revitalisation -revitalization -revivability -revival -revivalism -revivalist -reviver -revivification -reviviscence -revivor -revocability -revocableness -revocation -revolt -revolter -revolution -revolutionariness -revolutionary -revolutioniser -revolutionist -revolutionizer -revolver -revote -revoyage -revue -revuist -revulsant -revulsion -reward -rewriter -rex -rf -rfb -rg -rgen -rgisseur -rh -rhabdomancy -rhabdomyoma -rhachis -rhagon -rhamphotheca -rhapsodist -rhapsody -rhatany -rhb -rhea -rhebok -rheda -rhenic -rhenium -rheo -rheobase -rheologist -rheology -rheometer -rheometry -rheopexy -rheoscope -rheostat -rheotaxis -rheotron -rheotrope -rheotropism -rhet -rhetor -rhetoric -rhetorician -rheum -rheumatics -rheumatism -rheumatology -rheuminess -rhexis -rhigolene -rhinarium -rhinencephalon -rhinestone -rhinitis -rhino -rhinoceros -rhinologist -rhinology -rhinoplasty -rhinorrhea -rhinoscope -rhinoscopy -rhizobium -rhizocephalan -rhizoid -rhizome -rhizomorph -rhizopod -rhizopus -rhizosphere -rhizotomy -rho -rhodamine -rhodinal -rhodium -rhodochrosite -rhododendron -rhodolite -rhodonite -rhodopsin -rhomb -rhombencephalon -rhombohedron -rhomboid -rhombus -rhonchus -rhotacism -rhubarb -rhumb -rhumba -rhumbatron -rhyacolite -rhyme -rhymester -rhyolite -rhythm -rhythmics -rhythmist -rhyton -ria -rial -rialto -riata -rib -ribaldry -riband -ribband -ribbing -ribbon -ribbonfish -ribbonwood -ribgrass -riboflavin -ribonuclease -ribose -riboso -ribosome -ribozo -ribwort -rice -ricebird -ricer -ricercar -ricercare -richness -richweed -ricin -ricinolein -rick -ricketiness -rickets -rickettsia -rickey -rickle -rickrack -rickshaw -ricotta -ricrac -rictus -ridability -riddance -ridder -riddle -rider -ridge -ridgeling -ridgepole -ridgetree -ridgeway -ridicule -ridiculer -ridiculosity -ridiculousness -riding -ridley -ridotto -riebeckite -riel -riempie -riesling -rifacimento -rifeness -riff -riffler -riffraff -rifle -riflebird -rifleman -riflemanship -rifler -riflery -rifling -rift -rigadoon -rigamarole -rigatoni -rigaudon -rigger -rigging -rightabout -righteousness -rightfulness -rightism -rightness -rights -rigmarole -rigol -rigolet -rigor -rigorism -rigorist -rigourism -rigourist -rigsdaler -rijksdaaler -rikisha -rilievo -rill -rillet -rillette -rim -rime -rimer -rimester -rimosity -rimple -rimrock -rimstone -rimu -rin -rinceau -rind -rinderpest -ring -ringbolt -ringbone -ringdove -ringer -ringgit -ringhals -ringingness -ringleader -ringlet -ringmaster -ringneck -ringsail -ringside -ringster -ringtail -ringworm -rink -riot -rioter -riotist -riotousness -ripcord -ripeness -ripidolite -ripieno -riposte -ripper -rippingness -ripple -rippler -ripplet -riprap -ripsaw -ripsnorter -riptide -riser -rishi -risibility -rising -risk -risker -riskiness -risotto -rissole -rit -rita -rite -ritelessness -ritornello -ritter -ritual -ritualise -ritualism -ritualist -ritualization -ritz -ritziness -riv -rivage -rival -rivalrousness -rivalry -river -riverbank -riverhead -rivet -riveter -riviere -rivulet -riyal -rm -rmoulade -rms -ro -roach -road -roadability -roadbed -roadblock -roadholding -roadhouse -roadlessness -roadroller -roadrunner -roadstead -roadster -roadway -roadwork -roak -roarer -roaster -robalo -roband -robber -robbery -robbin -robe -rober -robin -robinia -roble -robomb -robot -robotization -robustness -roc -rocaille -rocambole -rochet -rock -rockabilly -rockaway -rocker -rockery -rocket -rocketeer -rocketry -rocketsonde -rockfish -rockiness -rockling -rockoon -rockrose -rockshaft -rockweed -rococo -rod -rodent -rodenticide -rodeo -rodomontade -roe -roebuck -roemer -roentgen -roentgenogram -roentgenograph -roentgenography -roentgenologist -roentgenology -roentgenometer -roentgenoscope -roentgenoscopy -roentgenotherapy -rogation -rogue -roguery -roguishness -roisterer -roisterous -rojak -roke -role -rollaway -rollback -rollbar -roller -rollicker -rollickingness -rollmop -rollock -rollway -rom -romaine -romaji -romance -romancer -romanticalness -romanticise -romanticism -romanticization -romaunt -romero -romper -rompishness -romyko -ronco -ronde -rondeau -rondel -rondelet -rondelle -rondo -rondure -rone -ronggeng -ronin -ronquil -ronyon -roo -rood -roof -roofer -roofing -rooftree -rooinek -rook -rookery -rookie -room -roomer -roomette -roomful -roominess -roommate -roorback -roost -rooster -root -rootage -rooter -rooti -rootlessness -rootlet -rootstalk -rootstock -rootworm -rooty -rope -ropedance -ropedancer -ropedancing -ropemaker -ropemaking -roper -ropery -ropewalk -ropeway -ropiness -roping -roque -roquelaure -rorqual -rort -ros -rosa -rosace -rosaniline -rosarian -rosarium -rosary -roscoelite -rose -rosebay -rosebud -rosebush -rosefish -rosehip -rosella -roselle -rosemaling -rosemary -roseola -rosery -roset -rosette -rosewood -rosin -rosiness -rosinweed -ross -rostellum -roster -rostra -rostrocarinate -rostrum -rota -rotation -rotator -rote -rotenone -rotgut -roti -rotifer -rotisserie -rotl -roto -rotogravure -rotor -rotorcraft -rotte -rottenstone -rotter -rotunda -roturier -roua -rouble -roucou -roue -rouge -roughage -roughcast -roughcaster -roughener -rougher -roughhouse -roughneck -roughness -roughrider -roughstring -roulade -rouleau -roulette -rounce -roundabout -roundedness -roundel -roundelay -rounder -rounders -roundheadedness -roundhouse -roundishness -roundlet -roundline -roundness -roundsman -roundup -roundworm -roup -rouseabout -rousedness -rouser -roustabout -rout -route -routeman -routemarch -router -routh -routine -routing -routinism -routinist -roux -rover -roving -rovingness -row -rowan -rowboat -rowdiness -rowdyishness -rowdyism -rowel -rowen -rower -rowlock -royale -royalisation -royalism -royalist -royalization -royalty -rozener -rozzer -rpm -rps -rpt -rs -rsum -rt -rubaboo -rubasse -rubato -rubber -rubberneck -rubbing -rubbish -rubble -rubblework -rubby -rubdown -rube -rubefaction -rubella -rubellite -rubeola -rubescence -rubicundity -rubidium -ruble -rubric -rubrication -rubricator -rubrician -rubstone -ruby -ruche -ruching -ruck -rucksack -ruckus -ruction -rudbeckia -rudd -rudder -rudderfish -rudderhead -rudderpost -ruddiness -ruddleman -ruddock -rudeness -rudenture -ruderal -rudiment -rudimentariness -ruer -rufescence -ruff -ruffe -ruffian -ruffianism -ruffler -rug -ruga -rugby -rugger -rugging -rugosity -ruin -ruination -ruiner -ruinousness -rule -ruler -ruling -rum -rumanite -rumba -rumbler -rumen -ruminant -rummager -rummer -rummy -rumormonger -rumour -rump -rumpus -rumrunner -rumrunning -runabout -runagate -runback -runch -rundle -rundlet -rundown -rune -runesmith -rung -runkle -runlet -runnel -runner -runoff -runout -runround -runt -runtgenography -runtgenologist -runtgenology -runtgenoscope -runtgenoscopy -runtiness -runtishness -runway -rupee -rupiah -rupture -ruralisation -ruralism -ruralist -ruralite -rurality -ruralization -ruse -rushee -rusher -rushing -rushwork -rusk -russet -rust -rusticalness -rustication -rusticator -rusticness -rustiness -rustler -rut -rutabaga -ruth -ruthenium -rutherford -rutherfordium -ruthfulness -ruthlessness -rutile -rutin -ruttiness -ruttishness -ryal -rye -ryegrass -ryke -ryokan -ryot -s -sa -saance -sabadilla -sabalo -sabaton -sabayon -sabbat -saber -sabin -sable -sablefish -sabora -sabot -sabotage -saboteur -sabra -sabre -sabretache -sabulosity -sac -sacaton -sacbut -saccharase -saccharate -saccharide -saccharify -saccharimeter -saccharimetry -saccharin -saccharinity -saccharization -saccharometer -saccharometry -saccharose -sacculation -saccule -sacculus -sacellum -sacerdotalism -sacerdotalist -sachem -sachemdom -sachemship -sachet -sack -sackbut -sackcloth -sacker -sackful -sacking -sacque -sacrament -sacramentalism -sacramentalist -sacramentality -sacramentalness -sacrarium -sacrifice -sacrificer -sacrilege -sacrilegiousness -sacring -sacristan -sacristy -sacrosanctity -sacrosanctness -sacrum -sadaqat -saddle -saddleback -saddlebag -saddlebill -saddlebow -saddlecloth -saddler -saddlery -saddletree -sadhaka -sadhe -sadhu -sadi -sadiron -sadness -sadware -safari -safeguard -safekeeping -safelight -safeness -safety -saffian -safflower -saffron -safranine -safrole -saga -sagaciousness -sagacity -sagamore -sagbut -sage -sagebrush -saggar -sagger -sagittary -sago -saguaro -sahib -saice -saiga -sail -sailboat -sailcloth -sailer -sailfish -sailing -sailmaker -sailor -sailoring -sailplane -sainfoin -saint -saintdom -sainthood -saintliness -saintpaulia -saithe -sakai -sake -saker -saki -sakkos -sal -salaam -salability -salaciousness -salacity -salad -salade -salal -salamander -salami -salary -salchow -sale -saleability -salep -saleratus -saleroom -sales -salesclerk -salesgirl -salesman -salesmanship -salesperson -salesroom -salet -salicin -salicional -salicornia -salicylate -salience -salientian -salimeter -salina -salinity -salinometer -saliva -salivation -salivator -sallee -sallenders -sallet -sallier -sallowness -sally -salmagundi -salmi -salmon -salmonberry -salmonella -salol -salon -saloon -saloop -salopette -salpa -salpicon -salpiglossis -salpingectomy -salpingitis -salpingostomy -salpingotomy -salpinx -salsify -salt -saltando -saltarello -saltation -saltbox -saltbush -saltcellar -saltchuck -saltchucker -salter -saltern -saltfish -saltgrass -salticid -saltine -saltiness -saltire -saltishness -saltness -saltpan -saltpeter -saltpetre -saltus -saltworks -saltwort -salubriousness -salubrity -salugi -salutariness -salutation -salutatorian -salutatorium -saluter -salvability -salvableness -salvage -salvager -salvation -salvationism -salvationist -salve -salver -salvia -salvo -salvor -samadhi -samaj -samara -samarium -samarskite -samba -sambar -sambo -sambuca -sambuk -samekh -sameness -samfoo -samiel -samisen -samite -samiti -samizdat -samlet -sammy -samovar -samp -sampan -samphire -sample -sampler -sampling -samsara -samshu -samurai -sanatorium -sanbenito -sanctifiableness -sanctification -sanctifier -sanctimoniousness -sanctimony -sanction -sanctioner -sanctitude -sanctity -sanctuary -sanctum -sand -sandal -sandalwood -sandarac -sandbag -sandbank -sandblast -sandblaster -sandblindness -sandbox -sandbug -sandbur -sandculture -sander -sanderling -sandfish -sandfly -sandglass -sandgrouse -sandhi -sandhog -sandhya -sandiver -sandlot -sandman -sandpaper -sandpiper -sandpit -sandroller -sandsoap -sandstone -sandstorm -sandwich -sandworm -sandwort -saneness -sangaree -sanglier -sangria -sanguification -sanguinaria -sanguinariness -sanguineness -sanguineousness -sanguinolency -sanicle -sanidine -sanies -sanitariness -sanitarium -sanitation -sanitisation -sanitization -sanitizer -sanity -sanjak -sannyasi -sansevieria -sant -santal -santims -santir -santonica -santonin -sap -sapajou -sapanwood -sapele -saphead -sapheadedness -saphena -sapidity -sapidness -sapience -sapiency -saplessness -sapling -sapodilla -saponaceousness -saponification -saponifier -saponin -saponite -sapor -saporosity -sapota -sappanwood -sapper -sapphire -sapphirine -sapphism -sappiness -sapraemia -sapremia -saprobe -saprolegnia -saprolite -sapropel -saprophyte -sapsago -sapwood -saraband -saran -sarangi -sarape -sarcasm -sarcenet -sarcina -sarcoadenoma -sarcocarcinoma -sarcocarp -sarcode -sarcoenchondroma -sarcoidosis -sarcolemma -sarcology -sarcoma -sarcomatosis -sarcophagus -sarcophile -sarcoplasm -sard -sardar -sardine -sardius -sardonicism -sardonyx -sargasso -sargassum -sargassumfish -sarge -sargo -sari -sarmentum -sarong -saros -sarpanch -sarracenia -sarrazin -sarrusophone -sarsaparilla -sarsen -sarsenet -sartor -sartorius -sash -sasin -saskatoon -sass -sassaby -sassafras -sastruga -satai -satang -satanicalness -satchel -sateen -satellite -satellitium -satiability -satiableness -satiation -satiety -satin -satinet -satinflower -satinleaf -satinpod -satinwood -satire -satiricalness -satirisation -satiriser -satirist -satisfaction -satisfactoriness -satisfier -satisfyingness -satori -satrap -satrapy -satsuma -sattva -saturability -saturant -saturater -saturation -saturator -saturniid -saturnism -satyagraha -satyagrahi -satyaloka -satyr -satyriasis -satyrid -satyromaniac -sauce -sauceboat -saucebox -saucepan -saucer -sauch -sauerbraten -sauerkraut -sauger -saugh -sauna -saurel -sauropod -saury -sausage -saussurite -sav -savableness -savageness -savagery -savagism -savanna -savant -savarin -savate -saveableness -saveloy -saver -savin -saviorhood -saviorship -saviour -saviourhood -saviourship -savor -savorer -savory -savour -savourer -savouriness -savoy -saw -sawbill -sawbones -sawbuck -sawder -sawdust -sawer -sawfish -sawfly -sawhorse -sawmill -sawyer -sax -saxhorn -saxifrage -saxony -saxophone -saxophonist -saxtuba -sayer -saying -says -sayyid -sazerac -sb -scab -scabbard -scabbedness -scabbiness -scabies -scabland -scabrousness -scad -scaffold -scaffolding -scag -scagliola -scalableness -scalade -scalage -scalar -scalare -scalawag -scalawaggery -scaldfish -scale -scaleboard -scalenohedron -scalenus -scaler -scaliness -scall -scallawaggery -scallion -scallop -scalloper -scalloping -scallywag -scaloppine -scalp -scalpel -scalper -scalping -scamillus -scammony -scamp -scampi -scampishness -scandal -scandalisation -scandaliser -scandalization -scandalizer -scandalmonger -scandalousness -scandia -scandium -scanner -scansion -scantiness -scantling -scantness -scape -scapegoat -scapegoatism -scapegrace -scapewheel -scaphocephaly -scaphopod -scapolite -scapula -scar -scarab -scarabaeid -scarabaeus -scarcement -scarceness -scarcity -scarecrow -scaremonger -scaremongering -scarer -scarf -scarfer -scarfskin -scarification -scarificator -scarlatina -scarlet -scarp -scarpe -scarph -scarves -scatology -scatoma -scatophagy -scatoscopy -scatt -scatterbrain -scatteredness -scatterer -scattering -scaup -scauper -scavenger -scelp -scenario -scenarist -scene -scenery -scenographer -scenography -scent -scentlessness -sceptic -scepticism -sceptre -scf -scfh -scfm -sch -schappe -schatchen -schav -schedule -scheelite -schefferite -schema -schematisation -schematiser -schematism -scheme -schemer -scherm -scherzo -schiavone -schiffli -schiller -schillerization -schilling -schipperke -schism -schist -schistosis -schistosity -schistosome -schistosomiasis -schiz -schizocarp -schizogamy -schizogenesis -schizogony -schizomycete -schizomycosis -schizont -schizophrene -schizophrenia -schizophyte -schizopod -schizothymia -schlemiel -schlieren -schlimazel -schlock -schmaltz -schmo -schmuck -schnapper -schnapps -schnauzer -schnitzel -schnook -schnorkle -schnorrer -schnozzle -scholar -scholarch -scholarship -scholasticate -scholasticism -scholiast -scholium -school -schoolbag -schoolbook -schoolboy -schoolchild -schoolgirl -schoolhouse -schoolie -schooling -schoolman -schoolmarm -schoolmaster -schoolmastership -schoolmate -schoolmistress -schoolroom -schoolteacher -schoolwork -schoolyard -schooner -schorl -schottische -schrank -schrik -schryari -schuit -schul -schuss -schuyt -schwa -schynbald -sci -sciamachy -sciatica -sciatically -science -scientism -scientist -scilicet -scilla -scimitar -scintigraphy -scintilla -scintillation -scintillator -scintillometer -sciolism -sciomachy -sciomancy -scion -sciosophist -sciosophy -scirrhosity -scirrhus -scissel -scission -scissure -scivvy -sclaffer -sclent -sclera -sclerectomy -sclerema -sclerenchyma -scleriasis -sclerite -scleritis -scleroblast -sclerocauly -scleroderma -sclerodermatitis -scleroma -sclerometer -sclerophyll -sclerophylly -scleroprotein -sclerosis -sclerotin -sclerotitis -sclerotium -sclerotization -sclerotome -sclerotomy -scoffer -scofflaw -scoke -scolder -scolecite -scolex -scolion -scoliosis -scollop -scolopendrid -scolophore -scolops -scombrid -sconce -sconcheon -scone -scoop -scooper -scoopful -scooter -scop -scope -scopolamine -scopoline -scopophilia -scopophiliac -scopula -scorcher -scordatura -score -scoreboard -scorecard -scored -scorekeeper -scorekeeping -scorepad -scores -scoria -scorn -scorner -scornfulness -scorpaenid -scorper -scorpion -scorpionfish -scorpionfly -scot -scoter -scotia -scotoma -scotopia -scoundrel -scourer -scourge -scourger -scouring -scouse -scout -scouter -scouth -scouthood -scouting -scoutmaster -scow -scowler -scr -scrabbler -scrag -scragginess -scramasax -scrambler -scran -scrap -scrapbook -scrapeage -scraper -scraperboard -scrapheap -scrapie -scrapper -scrappiness -scrapple -scratchboard -scratcher -scratches -scrawler -scrawliness -scrawniness -screamer -scree -screech -screecher -screed -screen -screening -screeno -screenplay -screw -screwball -screwdriver -screwer -screwhead -screwplate -screwworm -scribanne -scribbler -scribe -scriber -scribeship -scrim -scrimmage -scrimmager -scrimshaw -scrinium -scrip -script -scriptorium -scripturalness -scripture -scriptwriter -scriptwriting -scrivener -scrod -scrofula -scrofulousness -scrog -scroll -scrollwork -scrubber -scrubboard -scrubland -scrubwoman -scruff -scrum -scrummage -scrummager -scrumptiousness -scrumpy -scruple -scrupulosity -scrupulousness -scrutability -scrutator -scrutineer -scrutinisation -scrutinization -scrutinizer -scrutiny -scrutoire -scuba -scudo -sculduddery -sculduggery -sculker -scull -sculler -scullery -scullion -sculp -sculpin -sculptor -sculptress -sculpture -scum -scumboard -scuncheon -scup -scupper -scuppernong -scurf -scurrility -scurrilousness -scurviness -scut -scuta -scutage -scutcheon -scute -scutellation -scutellum -scuttle -scuttlebutt -scutum -scyelite -scyphistoma -scyphozoan -scyphus -scythe -sd -sea -seaboard -seacoast -seacock -seadog -seadrome -seafarer -seafighter -seafood -seafowl -seafront -seakindliness -seal -sealant -sealer -sealery -sealskin -seam -seaman -seamanship -seamark -seamer -seaminess -seamlessness -seamount -seamstress -seance -seaplane -seaport -seaquake -searchableness -searcher -searchingness -searchlight -seascape -seascout -seascouting -seashell -seashore -seasickness -seaside -season -seasonableness -seasonalness -seasoner -seasoning -seat -seater -seating -seatrain -seatwork -seawan -seaware -seaway -seaweed -seaworthiness -seborrhea -seborrhoea -sebum -secant -secco -secernment -secession -secessionism -secessionist -sech -secludedness -seclusion -seclusiveness -secobarbital -seconde -seconder -secondo -secondrater -secondsightedness -secrate -secrecy -secretaire -secretariat -secretary -secretaryship -secretin -secretion -secretness -sect -sectarianism -sectary -section -sectionalisation -sectionalism -sectionalist -sector -secularisation -seculariser -secularism -secularist -secularity -secularization -secularizer -secundine -security -sedan -sedateness -sedation -sedge -sedile -sedilia -sediment -sedimentation -sedimentologist -sedimentology -sedition -seditiousness -seducer -seduction -seductiveness -seductress -sedulity -sedulousness -sedum -seeableness -seecatch -seed -seedbed -seedcake -seedcase -seeder -seediness -seedlessness -seedling -seedman -seedsman -seedtime -seeing -seeker -seemer -seemliness -seepage -seer -seeress -seersucker -seesaw -segar -segment -segmentation -segno -sego -segregatedness -segregation -segregationist -segregator -seguidilla -sei -seicento -seiche -seif -seigneur -seigneury -seignior -seigniorage -seigniory -seine -seiner -seiren -seiser -seisin -seising -seism -seismism -seismogram -seismograph -seismographer -seismography -seismol -seismologist -seismology -seismometry -seismoscope -seisure -seizer -seizin -seizing -seizor -seizure -sekos -selaginella -selah -selamlik -selectance -selectee -selection -selectiveness -selectivity -selectman -selectness -selector -selenate -selenide -selenite -selenium -selenodesy -selenodonty -selenograph -selenographer -selenographist -selenography -selenolog -selenology -selenomorphology -self -selfheal -selfhood -selfhypnotization -selflessness -selfmovement -selfness -selfsameness -selfseekingness -selfsufficiency -selfward -seller -sellout -selsyn -selva -selvage -selves -sem -semainier -semaise -semanteme -semanticist -semantics -semaphore -semasiologist -semasiology -sematology -semblance -semeiologist -semeiology -sememe -semester -semi -semiactiveness -semiadhesiveness -semianarchism -semianarchist -semiangle -semianimal -semibaldness -semiblasphemousness -semibreve -semicatalyst -semicellulose -semicircle -semicircularness -semicivilization -semicolloid -semicolon -semicoma -semiconduction -semiconductor -semiconfinement -semiconformist -semiconformity -semiconsciousness -semiconventionality -semiconversion -semicotton -semicretin -semicylinder -semidangerousness -semidecay -semidefensiveness -semidefiniteness -semideification -semidelirium -semidependence -semidesert -semidestruction -semidiameter -semidiaphanousness -semidictatorialness -semidiness -semidivision -semidivisiveness -semidome -semidomestication -semidrying -semidurables -semienclosure -semierectness -semiexclusiveness -semiexhibitionist -semiexposure -semifiction -semifigurativeness -semifinal -semifinalist -semifluidity -semifrontier -semifunctionalism -semiglaze -semigod -semigroup -semih -semihaness -semihibernation -semihostility -semihumanism -semiliberalism -semiliquidity -semiluminousness -semiluxury -semimaliciousness -semimatureness -semimaturity -semiminess -semimysticalness -seminar -seminarian -seminary -seminasality -semination -seminationalism -seminervousness -seminess -semineutrality -seminoma -seminomad -seminomadism -seminormality -seminormalness -seminudity -semiobjectiveness -semiobliviousness -semiology -semiopacity -semiopenness -semiotics -semiovalness -semipagan -semiparalytic -semiparasitism -semipassiveness -semipaste -semipatriot -semipeace -semipendulousness -semipermeability -semiperviness -semiphosphorescence -semipiousness -semipolitician -semipopularity -semiporcelain -semiprivacy -semiproductiveness -semiproductivity -semiprofaneness -semiprofanity -semiprogressiveness -semiproneness -semipurposiveness -semiquaver -semiradicalness -semirareness -semirawness -semirebel -semirebellion -semirebelliousness -semireflex -semireflexiveness -semirelief -semirepublic -semiresoluteness -semirespectability -semiretirement -semirevolution -semirevolutionist -semirigorousness -semiruralism -semis -semisecrecy -semiseriousness -semishade -semislave -semisocialism -semisocialist -semisolemnity -semisolemnness -semisomnolence -semispeculation -semispeculativeness -semisphere -semispontaneousness -semistiffness -semisupernaturalness -semitheatricalism -semitone -semitrailer -semitransparency -semitransparentness -semitruthfulness -semivowel -semiwarfare -semiwildness -semolina -sempstress -sen -sena -senarmontite -senate -senator -senatorship -sendal -sendee -sender -sendoff -senega -senescence -seneschal -senhor -senhorita -senility -seniority -senna -sennet -sennight -sennit -senor -sensation -sensationalism -sensationism -sensationist -sense -senselessness -sensibilia -sensibility -sensibleness -sensillum -sensitisation -sensitiser -sensitiveness -sensitivity -sensitization -sensitizer -sensitometer -sensitometry -sensor -sensorium -sensualisation -sensualism -sensualist -sensuality -sensualization -sensum -sentence -sentencer -sententiosity -sententiousness -sentience -sentiment -sentimentalisation -sentimentaliser -sentimentalism -sentimentalist -sentimentality -sentimentalization -sentinel -sentinelship -sentry -sepal -separability -separableness -separateness -separates -separation -separatism -separatist -separativeness -separator -separatrix -sepia -sepiolite -sepoy -seppuku -sepsis -sept -septa -septarium -septectomy -septemvir -septemvirate -septendecillion -septennium -septentrion -septet -septicaemia -septicemia -septicity -septillion -septillionth -septimana -septime -septolet -septuagenarian -septum -septuor -septuplet -septuplicate -sepulcher -sepulchre -sepulture -seqq -sequaciousness -sequacity -sequel -sequela -sequence -sequencer -sequentiality -sequestrant -sequestration -sequestrator -sequestrectomy -sequestrum -sequin -sequoia -ser -sera -seraglio -serai -seraph -seraphicalness -seraphim -serdab -serein -serenade -serenader -serenata -serendipity -sereneness -serenity -serf -serfdom -serfishness -serge -sergeant -sergeantfish -sergeanty -serial -serialisation -serialism -serialist -serialization -sericin -sericite -sericterium -sericulture -sericulturist -seriema -series -serif -serigraph -serigrapher -serigraphy -serin -serine -seringa -seriousness -seriplane -serjeant -serjeanty -sermon -sermoniser -sermonizer -serologist -serology -serosa -serositis -serosity -serotherapist -serotherapy -serotonin -serousness -serow -serpent -serpentinization -serpigo -serpulid -serranid -serration -serriedness -serrulation -serrurerie -sertularian -serum -serval -servant -server -service -serviceability -serviceableness -serviceberry -serviceman -services -serviette -servileness -servility -serving -servitor -servitude -servomechanism -servomotor -sesame -sescuncia -sesquialtera -sesquicarbonate -sesquih -sesquioxide -sesquipedality -sesquiplane -sesquiterpene -sessility -session -sesterce -sestertium -sestet -sestina -seta -setaria -setline -seton -setscrew -sett -settee -setter -setting -settleability -settledness -settlement -settler -settlor -setula -setup -seuora -seuorita -seven -sevenbark -sevens -seventeen -seventy -severalty -severance -severeness -severity -severy -sewage -sewan -sewellel -sewer -sewerage -sewing -sexagenarian -sexdecillion -sexfoil -sextain -sextant -sextet -sextile -sextillion -sexto -sextodecimo -sextolet -sexton -sextuple -sextuplet -sextuplicate -sf -sferics -sfm -sfumato -sfz -sg -sgabello -sgd -sgraffito -shabbiness -shack -shackle -shackler -shad -shadberry -shadbush -shadchan -shaddock -shade -shadelessness -shadiness -shading -shadoof -shadow -shadower -shadowgraph -shadowgraphist -shadowgraphy -shadowiness -shadowland -shaduf -shaft -shafting -shaftway -shag -shaganappi -shagbark -shagginess -shagreen -shah -shahdom -shakefork -shakeout -shaker -shaking -shako -shakudo -shale -shalloon -shallop -shallot -shallowness -shalwar -sham -shamal -shaman -shamanism -shamanist -shamba -shambles -shame -shamefacedness -shamelessness -shammash -shammer -shammes -shammy -shampoo -shampooer -shamrock -shamshir -shamus -shandrydan -shandy -shandygaff -shank -shankpiece -shanny -shantey -shanti -shantung -shanty -shantytown -shape -shapelessness -shard -share -sharecropper -sharefarmer -shareholder -sharer -sharia -sharif -shark -sharkskin -sharksucker -sharpbill -sharper -sharpie -sharpness -sharpshooter -sharpshooting -sharpy -shashlik -shastra -shastracara -shatterer -shaveling -shaver -shavetail -shavie -shaving -shaw -shawl -shawm -shay -shea -sheading -sheaf -shealing -shearer -shearhog -shearlegs -shearling -shearwater -sheatfish -sheath -sheathbill -sheather -sheathing -sheaves -shebang -shebeen -shebeening -shechitah -shed -shedder -sheefish -sheen -sheeny -sheep -sheepberry -sheepcote -sheepdog -sheepfold -sheepherder -sheepherding -sheepishness -sheepshank -sheepshead -sheepshearing -sheepskin -sheepwalk -sheepweed -sheerlegs -sheers -sheet -sheeting -shegetz -shehitah -sheik -sheikdom -sheila -sheitel -shekel -shelduck -shelf -shell -shellacking -shellback -shellbark -shellfire -shellfish -shellflower -shelter -shelterer -shelterlessness -sheltie -shelty -shelver -shelves -shelving -shemaal -shenanigan -shepherd -sherbet -sherd -sheria -sherif -sheriff -sherlock -sherry -sherwani -sheugh -sheveret -shewbread -shiai -shibah -shibbeen -shibboleth -shicer -shicker -shiel -shield -shielder -shieldlessness -shieling -shiftiness -shiftingness -shigella -shikar -shikari -shiksa -shillelagh -shilling -shim -shimal -shimmy -shin -shinbone -shindig -shiner -shingle -shingler -shingles -shininess -shinkin -shinleaf -shinnery -shinny -shinplaster -shinty -ship -shipboard -shipboy -shipbuilder -shipentine -shipfitter -shiplap -shipload -shipman -shipmaster -shipmate -shipment -shipowner -shippen -shipper -shipping -shippon -shipway -shipworm -shipwreck -shipwright -shipyard -shiralee -shire -shirker -shirt -shirtband -shirting -shirtmaker -shirtmaking -shirtsleeve -shirtwaist -shirtwaister -shishya -shiv -shivah -shivaree -shive -shiverer -shivoo -shkotzim -shlemiel -shnaps -shnook -shoad -shoal -shoat -shochet -shocker -shockingness -shockstall -shoddiness -shoe -shoebill -shoeblack -shoehorn -shoelace -shoemaker -shoemaking -shoer -shoeshine -shoeshop -shoestring -shoetree -shofar -shogun -shogunate -shohet -shoji -shole -shook -shool -shoon -shooter -shop -shopful -shopgirl -shophar -shopkeeper -shoplifter -shoplifting -shopman -shopped -shopper -shopping -shoptalk -shopwalker -shopwindow -shopwoman -shoran -shore -shoreline -shoring -shortage -shortbread -shortcake -shortcoming -shortcut -shortener -shortening -shortfall -shorthand -shorthorn -shortia -shortie -shortness -shortstop -shortwave -shorty -shot -shote -shotgun -shott -shotting -shoulder -shouldna -shouse -shout -shovel -shovelboard -shoveler -shovelful -shovelhead -shovelnose -shover -showboat -showbread -showcase -showdown -shower -showeriness -showgirl -showiness -showing -showjumping -showman -showmanship -showoffishness -showpiece -showplace -showroom -shp -shpt -shr -shraddha -shrapnel -shreadhead -shred -shredder -shrew -shrewdie -shrewdness -shrewishness -shrewmouse -shriek -shrieker -shrievalty -shrieve -shrift -shrike -shrillness -shrimp -shrimper -shrine -shrinkage -shrinker -shroff -shroud -shrub -shrubbery -shrubbiness -shtg -shtreimel -shuck -shucker -shucks -shuffleboard -shufty -shuggy -shul -shulwar -shumal -shunner -shunter -shuntwinding -shusher -shutdown -shuteye -shutoff -shutout -shutter -shuttering -shuttle -shuttlecock -shwa -shyness -shypoo -shyster -si -siacle -sial -sialagogue -sialid -siamang -siamoise -sib -siberite -sibilance -sibilancy -sibling -sibship -sibyl -siccative -sice -siciliano -sickbay -sickener -sickie -sickle -sicklebill -sickleweed -sickliness -sickness -sickroom -sicle -siddur -side -sideband -sidebar -sideboard -sidebone -sidecar -sidecheck -sidehead -sidehill -sidekick -sidelight -sideline -sideman -siderite -siderocyte -siderographer -siderography -siderolite -siderophilin -sideroscope -siderosis -siderostat -sidesaddle -sideshake -sideshow -sideslip -sidesman -sidespin -sidestick -sidestroke -sideswipe -sideswiper -sidewalk -sidewall -sideway -sidewheel -sidewheeler -sidewinder -siding -siege -siemens -sienna -sierra -siesta -sieur -sieve -sifaka -sifter -sig -siganid -sigher -sight -sighter -sightlessness -sightliness -sightscreen -sigil -sigillation -sigla -siglos -sigma -sigmation -sigmatism -sigmoidoscope -sign -signal -signalman -signalment -signatory -signature -signboard -signet -significance -significancy -signification -significativeness -significs -signor -signora -signore -signorina -signorino -signory -signpost -sika -sike -siker -sikra -silage -sild -silence -silencer -silentness -silesia -silex -silhouette -silica -silicate -silication -silicide -siliciferous -silicification -silicium -silicle -silicon -silicone -silicosis -siliqua -silique -silk -silkaline -silkiness -silkscreen -silkweed -silkworm -sill -sillabub -sillcock -siller -sillimanite -silliness -silo -siloxane -silt -siltation -siltstone -silundum -silurid -silva -silvanity -silver -silverberry -silverer -silverfish -silverizer -silverleaf -silverness -silverpoint -silverrod -silverside -silversmith -silversmithing -silvertail -silverware -silverweed -silverwork -silviculture -silviculturist -sim -sima -simar -simarouba -simba -simianity -similarity -simile -similitude -simiousness -simitar -simoleon -simoniac -simonist -simony -simoom -simp -simpleton -simplicity -simplism -simpulum -simsim -simulacre -simulacrum -simular -simulation -simulator -simultaneity -simultaneousness -sin -sinalbin -sinanthropus -sinapine -sinapism -sincereness -sincerity -sinciput -sindon -sine -sinecure -sinecureship -sinecurism -sinecurist -sinew -sinewiness -sinfonia -sinfonietta -sinfulness -singability -singableness -singer -singingfish -singleness -singlestick -singlesticker -singlet -singleton -singletree -singsong -singspiel -singularity -singularization -singularness -singultus -sinh -sinhalite -sinigrin -sinisterness -sinistrality -sinistrocularity -sinistrogyration -sinkage -sinker -sinkhole -sinking -sinlessness -sinner -sinnet -sinningness -sinopis -sinter -sinuation -sinuosity -sinuousness -sinus -sinusitis -sinusoid -siper -siphon -siphonage -siphonophore -siphonostele -sipper -sippet -sipunculid -sir -sirdar -sire -siree -siren -siriasis -sirloin -sirocco -sirop -sirrah -sirup -sirvente -sis -sisal -siscowet -siskin -sissonne -sissy -sister -sisterhood -sisterliness -sistrum -sitar -sitarist -sitatunga -sitcom -site -sitella -sitfast -sitology -sitomania -sitosterol -sitter -sitting -situation -situla -situs -situtunga -sitzkrieg -sitzmark -siwash -six -sixain -sixmo -sixpence -sixte -sixteen -sixteenmo -sixty -sizableness -sizar -sizarship -size -sizeableness -sizer -siziness -sizing -sizzler -sjambok -skald -skaldship -skat -skate -skateboard -skatemobile -skatepark -skater -skatole -skean -skedaddler -skeech -skeet -skeg -skeif -skeigh -skein -skeleton -skeletonization -skeletonizer -skelf -skellum -skelly -skep -skepful -skeptic -skepticism -skeptophylaxis -skerrick -skerry -sketch -sketchability -sketchbook -sketcher -sketchiness -skete -skewback -skewer -skewerwood -skewing -skewness -ski -skiagraph -skiagrapher -skiamachy -skiascope -skiascopy -skiatron -skibob -skidlid -skidpan -skidway -skiff -skiffle -skiing -skijorer -skijoring -skilfulness -skill -skillet -skilletfish -skillfulness -skilling -skillion -skilly -skimmer -skimmia -skimming -skimpiness -skin -skinflint -skinflintiness -skinful -skinhead -skink -skinner -skinnery -skinniness -skiograph -skipdent -skipjack -skiplane -skipper -skippet -skipway -skirling -skirmish -skirmisher -skirret -skirt -skirter -skirting -skit -skittishness -skittle -skiver -skivvy -skivy -sklent -skokiaan -skolly -skouth -skua -skulduggery -skulker -skull -skullcap -skullduggery -skunk -skunkweed -skutterudite -sky -skycap -skydiver -skydiving -skyey -skyjacker -skylark -skylarker -skylight -skyline -skyphos -skypipe -skyrocket -skysail -skyscape -skyscraper -skysweeper -skyway -skywriter -skywriting -slab -slacker -slackness -slag -slaister -slaker -slalom -slander -slanderousness -slang -slanginess -slap -slapjack -slapper -slapshot -slapstick -slask -slat -slatch -slate -slater -slather -slatiness -slating -slattern -slaughter -slaughterer -slaughterhouse -slaughterman -slave -slaveholder -slaveholding -slaver -slavery -slavey -slavishness -slavocracy -slavocrat -slaw -sld -sleave -sleaziness -sled -sledge -sledgehammer -sleeker -sleep -sleepcoat -sleeper -sleepiness -sleeping -sleeplessness -sleepwalker -sleepwear -sleepyhead -sleet -sleetiness -sleeve -sleeving -sleigh -sleigher -sleight -slenderness -sleuth -sleuthhound -sley -slice -slicer -slickenside -slicker -slickness -slidableness -slider -slideway -slighter -slime -sling -slingback -slingshot -slipcase -slipcover -slipknot -slipnoose -slippage -slipper -slipperwort -slippiness -slipsheet -slipslop -slipsole -slipstick -slipstone -slipstream -slipware -slipway -sliver -slivovitz -slob -slobberer -sloe -slogan -sloganeer -slogger -sloid -sloop -sloot -slopingness -sloppiness -slopshop -slopwork -slosh -sloshiness -slot -slote -sloth -slothfulness -slotter -sloucher -slouchiness -slough -sloughiness -sloven -slovenliness -slowcoach -slowdown -slowness -slowpoke -slowworm -slub -slubberdegullion -sludge -slue -sluff -slug -slugabed -slugfest -sluggard -sluggardly -slugger -sluggishness -sluice -sluicegate -sluiceway -sluit -slum -slumberer -slumberland -slumberousness -slumgullion -slumlord -slummer -slurried -slurry -slurrying -slush -slushiness -sluttishness -slyness -slype -smack -smacker -smackeroo -smallage -smallboy -smallholding -smallpox -smallsword -smalt -smaltite -smalto -smaragd -smaragdite -smartie -smasher -smatch -smatter -smatterer -smattering -smaze -smearcase -smearer -smeariness -smeek -smeller -smelliness -smelter -smeltery -smew -smidgen -smiercase -smilax -smile -smirk -smirker -smit -smitch -smiter -smith -smithery -smithsonite -smithy -smock -smocking -smog -smoke -smokechaser -smokeho -smokehouse -smokejack -smokejumper -smokelessness -smoker -smokestack -smoking -smoko -smolt -smoodger -smoothbore -smoother -smoothhound -smoothie -smoothness -smoothy -smorebro -smorgasbord -smriti -smudginess -smuggler -smugness -smytrie -snack -snackette -snaffle -snafu -snag -snaggletooth -snail -snailfish -snailflower -snailing -snake -snakebird -snakebite -snakefish -snakefly -snakehead -snakemouth -snakeroot -snakeskin -snakeweed -snakiness -snapback -snapdragon -snapline -snapout -snapper -snapperback -snappiness -snappishness -snapshot -snare -snarer -snarler -snash -snatcher -snath -snazziness -sneakbox -sneaker -sneakiness -sneck -snecker -sneer -sneerer -sneerfulness -sneesh -sneezewort -snell -snib -snick -snicker -snickersnee -snicket -snideness -sniffer -sniffiness -sniffler -sniffles -snifter -snigger -sniggerer -snipe -snipefish -sniper -sniperscope -snippet -snippetiness -snippiness -snit -sniveler -sniveller -snob -snobbery -snobbiness -snobbism -snollygoster -snood -snook -snooker -snool -snooper -snooperscope -snoose -snoot -snootiness -snoozer -snorkel -snorter -snot -snottiness -snout -snow -snowball -snowbell -snowberry -snowbird -snowblink -snowbush -snowcap -snowcreep -snowdrift -snowdrop -snowfall -snowfield -snowflake -snowiness -snowman -snowmast -snowmobile -snowpack -snowplough -snowplow -snowshed -snowshoe -snowshoer -snowslide -snowstorm -snubber -snubbiness -snuffbox -snuffer -snuffiness -snuffler -snuggery -snuggies -snugness -snye -soakage -soakaway -soaker -soap -soapbark -soapberry -soapbox -soapfish -soapolallie -soapstone -soapwort -soarer -soave -sobber -soberer -soberness -sobriety -sobriquet -socage -socager -soccer -sociability -sociableness -socialisation -socialism -socialist -socialite -sociality -socialization -socializer -society -sociobiology -sociogenesis -sociogram -sociol -sociolinguistics -sociological -sociologism -sociologist -sociology -sociometry -sociopath -sociopathy -sock -sockdologer -sockeroo -socket -sockeye -socklessness -socle -socman -sod -soda -sodalite -sodality -sodamide -sodbuster -soddenness -sodium -sodomite -sofa -sofar -soffit -soffritto -softa -softball -softboard -softener -softhead -softie -softness -software -softwood -softy -soh -soil -soilage -soilure -soirae -soiree -soja -sojourn -soke -sokeman -sokemanry -soken -sol -solace -solacer -solan -solander -solano -solanum -solarimeter -solarism -solarist -solarium -solarization -solatium -soldan -solder -soldier -soldierfish -soldiership -soldiery -soldo -solecism -solemnise -solemnity -solemnization -solemnizer -solemnness -solenodon -solenoid -soleplate -soleprint -solfage -solfatara -solfeggio -solferino -solicitor -solicitorship -solicitude -solidago -solidarity -solidifiability -solidifiableness -solidification -solidifier -solidness -solidomind -solidus -solifidian -solifidianism -solifluction -soliloquiser -soliloquy -soling -soliped -solipsism -solitaire -solitude -sollar -solleret -sollicker -solmization -solo -soloist -solonchak -solonetz -solstice -solubility -solubleness -solum -solute -solution -solutizer -solv -solvation -solvency -solver -solvolysis -soma -somatism -somatologist -somatology -somatoplasm -somatopleure -somatotonia -somatotype -somberness -sombreness -sombrero -somersault -somite -sommelier -somnambulance -somnambulation -somnambulator -somnambulism -somnambulist -somniloquist -somniloquy -somnolence -somnolency -son -sonagram -sonar -sonarman -sonata -sonatina -sondage -sonde -sonderclass -sone -song -songbird -songfest -songfulness -songkok -songster -songstress -songwriter -sonics -sonnet -sonneteer -sonnetisation -sonnetization -sonny -sonobuoy -sonometer -sonorant -sonorousness -sonship -soogee -sook -soom -soot -sooth -soother -soothfastness -soothingness -soothsayer -sootiness -sop -sopher -sophism -sophist -sophister -sophisticalness -sophistication -sophistry -sophomore -sophrosyne -sopor -soporiferousness -soppiness -sopranino -soprano -sora -soralium -sorb -sorbet -sorbitol -sorbol -sorbose -sorcerer -sorcery -sordidness -sordino -soredium -sorehead -soreheadedness -sorghum -sorgo -sori -sorites -sorner -soroban -soroptimist -sororate -sororicide -sorority -sorosis -sorption -sorrel -sorriness -sorrow -sorrower -sorrowfulness -sort -sorter -sortie -sortilege -sortition -sorus -sot -soteriology -sotie -sotol -sou -soubise -soubresaut -soubrette -soubriquet -souchong -souffle -souk -soul -soulfulness -sound -soundboard -soundbox -sounder -soundingness -soundlessness -soundness -soundpost -soundproofing -soundtrack -soup -soupbone -soupcon -soupfin -soupiere -souple -soupmeat -soupspoon -source -sourcefulness -sourdine -sourness -sourpuss -soursop -sourwood -sousaphone -sousaphonist -souslik -soutache -soutane -souter -souterrain -south -southeast -southeaster -southeasterner -souther -southerliness -southerner -southernliness -southernwood -southing -southland -southlander -southpaw -southwest -southwester -soutter -souvenir -sovereign -sovereignty -soviet -sovietdom -sovietism -sovkhoz -sovran -sowans -sowar -sowback -sowbelly -sowbread -sowcar -sowens -sox -soy -soybean -sozin -sp -spa -space -spaceband -spacecraft -spaceman -spaceport -spacer -spaceship -spacesuit -spacewalk -spaciality -spacing -spaciousness -spackle -spade -spadefish -spadeful -spader -spadework -spadix -spaeing -spaer -spaetzle -spaghetti -spahi -spale -spall -spallation -spaller -spalpeen -span -spancel -spandex -spandrel -spangle -spaniel -spanker -spanking -spanner -spanworm -spar -sparable -spareness -sparer -sparerib -sparger -sparid -sparingness -spark -sparker -sparkishness -sparkler -sparklet -sparks -sparling -sparrow -sparrowgrass -sparrowhawk -sparteine -sparver -spasm -spasmodism -spasmodist -spasmolysis -spasmophilia -spat -spatchcock -spate -spathe -spatiality -spatiography -spatterdash -spatterdock -spatterware -spatula -spatzle -spaulder -spavin -spawn -spawner -speakableness -speakeasy -speaker -speakership -spean -spear -spearer -spearfish -spearhead -spearman -spearmint -spearwort -spec -specialisation -specialism -specialist -speciality -specialization -specialty -speciation -specie -species -specification -specifier -specimen -speciosity -speciousness -speck -speckedness -speckle -specklessness -spectacle -spectacularism -spectacularity -spectator -spectatress -specter -spectra -spectrality -spectralness -spectre -spectrobolometer -spectrochemistry -spectrocolorimetry -spectrogram -spectrograph -spectrographer -spectrography -spectroheliogram -spectroheliograph -spectrohelioscope -spectrology -spectrometer -spectrometry -spectrophotometer -spectrophotometry -spectropolarimeter -spectropolariscope -spectroradiometer -spectroscope -spectroscopist -spectroscopy -spectrum -speculation -speculativeness -speculator -speculum -speech -speechlessness -speechmaker -speechmaking -speechway -speed -speedball -speedboat -speedboating -speeder -speedfulness -speediness -speedingness -speedo -speedometer -speedster -speedwalk -speedway -speedwell -speel -speer -speiss -speleology -spelk -spellbinder -spelldown -speller -spellican -spelling -spelter -spelunker -spence -spencer -spender -spendthrift -speos -spere -spergillum -sperm -spermaceti -spermary -spermatheca -spermatid -spermatium -spermatocyte -spermatogenesis -spermatogonium -spermatophore -spermatophyte -spermatophytic -spermatorrhoea -spermatozoid -spermatozoon -spermicide -spermine -spermiogenesis -spermogonium -spermophile -spermophyte -sperrylite -spessartite -spewer -sphacelation -sphacelism -sphacelus -sphaeristerium -sphagnum -sphalerite -sphene -sphenodon -sphenogram -sphenographer -sphenographist -sphenography -spherality -sphere -sphericality -sphericity -spherics -spheroid -spheroidicity -spherometer -spherule -spherulite -sphincter -sphingomyelin -sphingosine -sphinx -sphragistic -sphragistics -sphygmogram -sphygmograph -sphygmography -sphygmomanometer -sphygmus -spica -spiccato -spice -spiceberry -spicebush -spicery -spicewood -spiciness -spick -spicula -spicule -spiculum -spider -spiderhunter -spiderling -spiderman -spiderwort -spiegeleisen -spiel -spieler -spier -spif -spiffiness -spignel -spigot -spike -spikedace -spikefish -spikelet -spikenard -spiker -spikiness -spile -spillage -spillikin -spillikins -spillover -spillpipe -spillway -spilosite -spilth -spina -spinacene -spinach -spincaster -spindle -spindleage -spindrift -spine -spinel -spinelessness -spinet -spinifex -spininess -spink -spinnability -spinnaker -spinner -spinneret -spinnery -spinney -spinning -spinny -spinode -spinosity -spinster -spinsterhood -spinthariscope -spinule -spira -spiracle -spiraea -spirality -spirantism -spirantization -spire -spirea -spirelet -spireme -spirillum -spirit -spiritedness -spiritism -spiritist -spiritlessness -spiritualisation -spiritualiser -spiritualism -spiritualist -spirituality -spiritualization -spiritualizer -spiritualty -spirituousness -spirket -spirketing -spirketting -spirochaete -spirochaetosis -spirochete -spirograph -spirogyra -spirometer -spirometry -spironolactone -spirt -spirula -spital -spitball -spitballer -spitchcock -spite -spitefulness -spitfire -spitsticker -spitter -spittle -spittoon -spitz -spitzenburg -spiv -splake -splanchnicectomy -splanchnology -splashback -splashboard -splashdown -splasher -splashiness -splat -splayfoot -spleen -spleenwort -splendidness -splendiferousness -splendor -splendour -splenectomy -splenitis -splenius -splenomegaly -spleuchan -splicer -spline -splint -splinter -splits -splittail -splitter -splodge -splore -splotch -splurge -splutterer -spode -spodumene -spoilage -spoiler -spoilfive -spoilsman -spoilsport -spokeshave -spokesman -spokeswoman -spoliation -spondee -spondulicks -spondulix -spondylitis -sponge -spongefly -sponger -spongillafly -spongin -spongioblast -spongocoel -sponsion -sponson -sponsor -spontaneity -spontaneousness -spontoon -spoof -spoofery -spook -spookiness -spool -spoom -spoon -spoonback -spoonbill -spoondrift -spooner -spoonerism -spoonful -spooniness -spoor -sporadicalness -sporadicity -sporadism -sporangium -spore -sporicide -sporocarp -sporocyst -sporocyte -sporogenesis -sporogonium -sporogony -sporophore -sporophyll -sporophyte -sporotrichosis -sporozoan -sporozoite -sporran -sport -sporter -sportfulness -sportiness -sportiveness -sports -sportscast -sportsman -sportsmanliness -sportsmanship -sportswear -sportswoman -sporulation -sporule -spot -spotlessness -spotlight -spottedness -spotter -spottiness -spotting -spousal -spouse -spousehood -spouter -spp -sprag -sprat -sprattle -spray -sprayer -spreader -sprechgesang -sprechstimme -spree -sprig -sprightliness -sprigtail -springald -springboard -springbok -springe -springer -springhaas -springhalt -springhead -springhouse -springiness -springing -springlet -springlock -springtail -springtime -springwood -sprinkler -sprinkling -sprint -sprit -sprite -spritehood -spritsail -sprocket -spruce -spruceness -sprue -spruiker -spruit -spud -spudder -spuggy -spumante -spume -spumone -spunkie -spunkiness -spunware -spur -spurge -spuriousness -spurrer -spurrey -spurrier -spurrite -spurry -spurter -spurtle -sputnik -sputum -spy -spyglass -sq -sqd -sqq -squab -squabbler -squacco -squad -squadder -squadron -squalene -squalidity -squalidness -squall -squaller -squalor -squama -squamation -squamosal -squamoseness -squamousness -square -squareface -squarehead -squareness -squarer -squaretail -squashiness -squassation -squatness -squatter -squatterdom -squattiness -squattocracy -squaw -squawbush -squawfish -squawk -squawker -squawroot -squeak -squeaker -squeal -squealer -squeamishness -squeegee -squeezer -squelcher -squelchingness -squeteague -squib -squid -squiffer -squiggle -squilgee -squill -squilla -squillagee -squillgee -squinancy -squinch -squinter -squintingness -squirarchy -squire -squirearch -squirearchy -squiredom -squireen -squireling -squirrel -squirrelfish -squirter -squit -squiz -squush -srac -sri -sruti -ss -stabile -stabilisation -stabiliser -stability -stabilivolt -stabilization -stabilizer -stable -stableboy -stableman -stableness -stabling -stacc -stachering -stack -stacker -stackering -stackfreed -stackyard -stacte -staddle -staddlestone -stade -stadholder -stadholderate -stadholdership -stadia -stadimeter -stadiometer -stadium -stadle -staff -staffer -staffman -stag -stage -stagecoach -stagecraft -stagehand -stager -stagflation -staggard -staggerbush -staggerer -staggers -staggy -staghound -staginess -staging -stagnance -stagnancy -stagnation -staidness -stainability -stainableness -stainer -stainlessness -stair -staircase -stairhead -stairway -stairwell -stake -stakeout -stalactite -stalag -stalagmite -stalagmometer -stalemate -staleness -stalk -stalker -stall -stallage -stallion -stalwartness -stamba -stamen -stamin -stamina -staminode -staminodium -staminody -stammel -stammerer -stammeringness -stammrel -stamnos -stampede -stampeder -stamper -stance -stancher -stanchion -standard -standardization -standardizer -standee -standfast -standing -standish -standoff -standout -standpipe -standpoint -standstill -stane -stanhope -stannary -stannate -stannite -stannum -stanza -stanzaic -stapelia -stapes -staph -staphylococcus -staphyloplasty -staphylorrhaphy -staphylotomy -staple -stapler -star -starboard -starch -starchiness -stardom -stardust -starfish -starflower -starkness -starlessness -starlet -starlight -starling -starriness -starter -startler -starvation -starveling -starver -starwort -stasidion -stasimon -stasis -stat -statampere -state -statecraft -statehood -statelessness -stateliness -statement -stater -stateroom -statesman -statesmanship -statfarad -stathenry -statics -station -stationer -stationery -stationmaster -statism -statist -statistic -statistician -statistics -statoblast -statocyst -statohm -statolatry -statolith -stator -statoscope -statuary -statue -statuette -stature -status -statute -statvolt -staurolite -stauropegion -stauroscope -stave -staves -stavesacre -staw -staybolt -stayer -staysail -std -stead -steadfastness -steadiness -steading -steak -steakhouse -stealability -stealage -stealer -stealing -stealth -stealthiness -steam -steamboat -steamer -steamie -steaminess -steampipe -steamroller -steamship -steamtightness -steapsin -stearate -stearin -stearoptene -stearrhea -steatite -steatolysis -steatopygia -steatorrhoea -stech -stedfastness -steed -steek -steel -steelhead -steeliness -steelmaker -steelmaking -steelman -steelwork -steelworker -steelworks -steelyard -steenbok -steening -steeper -steeple -steeplebush -steeplechase -steeplechaser -steeplechasing -steeplejack -steerage -steerageway -steerer -steersman -steeve -stegh -stegodon -stegomyia -stegosaur -stein -steinbok -stela -stele -stellarator -stellionate -stem -stemhead -stemma -stemmer -stemmery -stemson -stemware -stench -stencil -stenciler -stenciller -steno -stenograph -stenographer -stenography -stenosis -stenotype -stenotypist -stenotypy -stentor -step -stepbrother -stepchild -stepdame -stepdance -stepdancer -stepdancing -stepdaughter -stepfather -stephanite -stephanotis -stephead -stepladder -stepmother -stepparent -steppe -stepper -stepsister -stepson -stepstool -steptoe -ster -steradian -stere -stereobate -stereocamera -stereochemistry -stereochrome -stereochromy -stereognosis -stereogram -stereograph -stereography -stereoisomer -stereoisomerism -stereometry -stereomicroscopy -stereopair -stereophony -stereophotograph -stereophotography -stereopsis -stereopter -stereoptician -stereopticon -stereoscope -stereoscopist -stereoscopy -stereotaxis -stereotomist -stereotomy -stereotropism -stereotype -stereotypy -stereovision -sterigma -sterilant -sterileness -sterilisability -steriliser -sterility -sterilizability -sterilization -sterlet -sterling -sterlingness -sternbergia -sternite -sternpost -sternson -sternum -sternutation -sternutator -sternway -sternwheel -sternwheeler -steroid -sterol -stertor -stertorousness -stet -stethometry -stethoscope -stethoscopist -stethoscopy -stetson -stevedore -stew -steward -stewardess -stewardship -stewbum -stewpan -stewpot -stg -stge -sthenia -stibine -stibium -stibnite -stich -sticharion -stichic -stichometry -stichomythia -stick -stickability -sticker -stickful -stickiness -stickjaw -stickleback -stickler -stickout -stickpin -stickseed -sticktight -stickum -stickup -stickweed -stickwork -stickybeak -stiffneckedness -stiffness -stifler -stigma -stigmasterol -stigmatiser -stigmatism -stigmatization -stigmatizer -stigmatypy -stilb -stilbene -stilbestrol -stilbite -stilboestrol -stile -stiletto -stilettoing -stillage -stillbirth -stiller -stillicide -stillness -stilt -stilyaga -stime -stimulability -stimulant -stimulater -stimulation -stimulator -stimuli -stimulus -stimy -stingaree -stinger -stinginess -stingingness -stingo -stingray -stinker -stinkeroo -stinkhorn -stinkpot -stinkstone -stinkweed -stinkwood -stintedness -stinter -stipe -stipel -stipend -stipes -stipo -stippler -stipulation -stipulator -stipule -stirabout -stirk -stirlessness -stirpiculture -stirpiculturist -stirps -stirrup -stitch -stitcher -stitching -stitchwork -stitchwort -stithy -stiver -stlg -stoa -stoat -stoating -stob -stoccado -stock -stockade -stockateer -stockbreeder -stockbroker -stockbrokerage -stocker -stockfish -stockholder -stockhorn -stockiness -stockinet -stocking -stockishness -stockist -stockjobber -stockman -stockpiler -stockpot -stockrider -stockroom -stocktaking -stockyard -stodge -stogey -stogy -stoic -stoichiology -stoichiometry -stoicism -stokehold -stokehole -stoker -stokes -stollen -stolon -stolonization -stoma -stomach -stomachache -stomacher -stomack -stomata -stomate -stomatitis -stomatologist -stomatology -stomatoplasty -stomatopod -stomatotomy -stomodaeum -stomode -stomodeum -stomper -stone -stoneblindness -stoneboat -stonecast -stonecat -stonechat -stonecrop -stonecutter -stonecutting -stonefish -stonefly -stonelessness -stonemason -stonemasonry -stoner -stoneroller -stonewalling -stoneware -stonework -stoneworker -stonewort -stoniness -stooge -stook -stooker -stool -stooper -stopcock -stope -stoper -stopgap -stoping -stoplessness -stoplight -stopover -stoppability -stoppableness -stoppage -stopper -stopping -stopple -stops -stopwatch -stopwater -storability -storage -storax -storefront -storehouse -storekeeper -storer -storeroom -storey -storiette -stork -storksbill -storm -stormer -stormlessness -story -storyboard -storybook -storyteller -storytelling -stoting -stotinka -stotter -stound -stoup -stour -stoutness -stove -stovepipe -stover -stowage -stowaway -stowp -str -strabismus -strabotomy -straddler -strafer -straightedge -straightener -straightforwardness -straightjacket -straightness -strainedness -strainer -strait -straitjacket -straitness -strake -stramonium -strangeness -stranger -stranglehold -strangles -strangulation -strangury -strap -straphanger -straphanging -strapper -strass -strata -stratagem -strategics -strategist -strategos -strategus -strategy -strath -strathspey -straticulation -stratification -stratig -stratigrapher -stratigraphy -stratocracy -stratocrat -stratocumulus -stratopause -stratosphere -stratovision -stratum -stratus -stravaiger -straw -strawberry -strawboard -strawflower -strawworm -strawy -strayer -streak -streakedness -streaker -streakiness -stream -streamer -streaminess -streaming -streamlet -streamline -streamway -streek -street -streetcar -streetlight -streetwalker -streetwalking -strelitzia -strength -strengthener -strenuosity -strenuousness -strep -streptococcus -streptodornase -streptokinase -streptomyces -streptomycin -streptothricin -stress -stresslessness -stretchability -stretcher -stretto -streusel -streuselkuchen -stria -striation -strick -strickle -striction -stricture -stride -strider -stridor -stridulation -stridulousness -strife -strigil -strikeboard -strikebreaker -strikebreaking -strikeover -striker -string -stringboard -stringcourse -stringer -stringhalt -stringhaltedness -stringholder -stringiness -stringing -stringpiece -stripe -striper -striplight -stripling -stripper -striptease -stripteaser -stripteuse -striver -strix -strobe -strobila -strobilation -strobile -strobilus -stroboradiograph -stroboscope -stroboscopy -strobotron -stroganoff -stroke -stroking -stroller -stroma -stromateid -stromatolite -strongbark -strongbox -stronghold -strongman -strongness -strongpoint -strongroom -strongyle -strongylosis -strontia -strontian -strontianite -strontium -strop -strophanthin -strophanthus -strophe -strophoid -strophulus -strops -stroud -stroyer -structuralism -structuralist -structure -structurelessness -strudel -struggler -struma -strummer -strumousness -strumpet -strunt -strutter -strychnine -strychninism -stub -stubbed -stubber -stubbiness -stubble -stubbornness -stucco -stuccowork -stuccoworker -stud -studbook -studdie -studding -studdingsail -student -studentship -studfish -studhorse -studiedness -studier -studio -studiousness -studwork -stuffiness -stuffing -stuiver -stull -stum -stumer -stump -stumpage -stumper -stumpiness -stumpknocker -stunner -stunsail -stupa -stupe -stupefacient -stupefaction -stupendousness -stupidity -stupidness -stupor -sturdiness -sturgeon -sturt -sty -style -stylebook -stylelessness -stylet -stylisation -styliser -stylist -stylite -stylization -stylizer -stylobate -stylograph -stylography -stylolite -stylopodium -stylops -stylostixis -stylus -stymy -stypsis -styrax -styrene -su -suability -suasion -suasiveness -suavity -sub -subabbot -subability -subabsoluteness -subaccount -subacetate -subacidity -subacidness -subacridity -subacridness -subacumination -subadar -subadministration -subadministrator -subadvocate -subaeration -subaffluence -subage -subagency -subagent -subaggregation -subah -subalgebraist -subalimentation -suballiance -subalmoner -subaltern -subalternation -subalternity -subangularity -subangularness -subangulation -subantiqueness -subantiquity -subapparentness -subappearance -subapprobatiness -subapprobation -subarborescence -subarchitect -subarea -subarmor -subarousal -subarticle -subarticulateness -subarticulation -subassemblage -subassembly -subassociation -subattenuation -subattorney -subattorneyship -subaudibility -subaudibleness -subaudition -subauditor -subbailie -subbailiff -subbailiwick -subballast -subband -subbank -subbase -subbasement -subbass -subbeadle -subbias -subbreed -subbrigade -subbroker -subbromid -subbromide -subbureau -subcandidness -subcaptain -subcaptaincy -subcaptainship -subcarbide -subcase -subcash -subcashier -subcasing -subcasino -subcast -subcaste -subcategory -subcause -subcavity -subcell -subception -subch -subchairman -subchamberer -subchancel -subchapter -subchaser -subchief -subchloride -subcinctorium -subcircuit -subcity -subcivilization -subclan -subclass -subclause -subclavius -subclerk -subclerkship -subclimate -subclimax -subclique -subcollector -subcollectorship -subcommander -subcommandership -subcommendation -subcommissary -subcommissaryship -subcommission -subcommissioner -subcommissionership -subcompensation -subcompleteness -subcompletion -subconcaveness -subconcavity -subconcession -subconcessionaire -subconcessioner -subconference -subconformability -subconformableness -subconnation -subconscience -subconsciousness -subconservator -subconsideration -subconstellation -subconsul -subconsulship -subcontest -subcontinent -subcontract -subcontractor -subcontraoctave -subcorporation -subcortex -subcosta -subcouncil -subcover -subcreativeness -subcreek -subcrepitation -subcrest -subcrossing -subculture -subcurate -subcurator -subcuratorship -subcurrent -subcutaneousness -subcyanid -subcyanide -subdatary -subdeacon -subdeaconate -subdealer -subdebutante -subdefinition -subdelegate -subdelegation -subdelirium -subdemonstration -subdentation -subdepartment -subdeposit -subdepository -subdepot -subdeputy -subderivative -subdevil -subdiaconate -subdialect -subdiapason -subdichotomy -subdie -subdirector -subdirectorship -subdistich -subdistinction -subdistinctiveness -subdistrict -subdivineness -subdivision -subdoctor -subdolichocephalism -subdolichocephaly -subdominant -subdruid -subduableness -subdual -subduction -subduedness -subduer -subecho -subeditor -subeditorial -subeffectiveness -subelection -subelement -subendorsement -subengineer -subepoch -subequality -suberectness -suberin -suberization -subescheator -subessentialness -subexaminer -subexecutor -subextensibility -subextensibness -subface -subfacies -subfactor -subfactory -subfamily -subferryman -subfestiveness -subfield -subfigure -subfissure -subfloor -subflooring -subflora -subflush -subfoliation -subforeman -subforemanship -subform -subformation -subformativeness -subfossil -subfraction -subframe -subfreshman -subfumigation -subfunction -subgelatinization -subgelatinousness -subgeniculation -subgens -subgenus -subglobosity -subglobularity -subgod -subgoverness -subgovernor -subgovernorship -subgrade -subgranularity -subgrin -subgroup -subgum -subgyre -subgyrus -subhall -subhatchery -subhead -subheading -subheadquarters -subheadwaiter -subhealth -subherd -subhero -subhirsuness -subhorizontalness -subhouse -subhymenium -subhypothesis -subhysteria -subidea -subideal -subilium -subincision -subindex -subinfection -subinfeudation -subinfeudatory -subinflammation -subinfluent -subinsertion -subinspector -subinspectorship -subintention -subintercessor -subinterval -subintroduction -subiodide -subitem -subj -subjacency -subjack -subject -subjectification -subjection -subjectiveness -subjectivism -subjectivity -subjoinder -subjoint -subjudge -subjudgeship -subjugation -subjugator -subjunction -subking -subkingdom -sublapsar -sublapsarianism -subleader -sublease -sublecturer -sublegislation -sublegislature -sublessee -sublessor -sublibrarian -sublibrarianship -sublicense -sublid -sublieutenancy -sublieutenant -sublimableness -sublimation -sublimeness -sublimer -sublimity -sublot -sublustrousness -subluxation -submaid -subman -submanager -submanagership -submania -submanor -submarine -submariner -submarshal -submaster -submatrix -submaxilla -submeaning -submediant -submediation -submeeting -submember -submergence -submergibility -submersibility -submersion -submind -subminiaturization -submission -submissiveness -submolecule -submortgage -submucosa -submultiple -submuriate -subnaturalness -subnet -subnitrate -subnotation -subnote -subnucleus -subnumber -subnutritiousness -subobliqueness -subobscureness -subobsoleteness -subobtuseness -suboffice -subofficer -subofficial -subopaqueness -suboppositeness -suboptimum -suborbicularity -suborder -subordinary -subordination -subordinationism -subornation -suborner -suboverseer -suboxide -subpackage -subpagoda -subpanel -subparagraph -subparliament -subpart -subpartition -subpartitionment -subparty -subpass -subpastor -subpastorship -subpatron -subpatroness -subpattern -subpavement -subpectination -subpeduncle -subpellucidity -subpellucidness -subperiod -subphosphate -subphratry -subphylum -subpilosity -subpiston -subplacenta -subplant -subplot -subplow -subpoena -subpool -subpopulation -subport -subpost -subpostmaster -subpostmastership -subpostscript -subpreceptor -subpreceptorate -subpredicate -subpredication -subprefect -subprefecture -subprehensility -subprincipal -subprior -subprioress -subpriorship -subproblem -subproctor -subproctorship -subprofessor -subprofessorate -subprofessoriate -subprofessorship -subprofitableness -subprotector -subprotectorship -subprovince -subpulverizer -subpurlin -subquality -subquarter -subquestion -subrace -subradiance -subradiancy -subradicness -subrail -subrange -subreader -subreason -subrebellion -subrector -subrectory -subreference -subregent -subregion -subregularity -subrelation -subreligion -subreport -subreption -subrigidity -subrigidness -subring -subrogation -subroot -subrotundity -subrotundness -subroutine -subrule -subruler -subsale -subsalinity -subsample -subsatiricalness -subsaturation -subschedule -subscheme -subschool -subscience -subscriber -subscribership -subscription -subscripture -subsecretary -subsecretaryship -subsect -subsection -subsecurity -subsegment -subsellium -subsensation -subsensuousness -subsept -subsequence -subseries -subservience -subserviency -subset -subsewer -subshaft -subsheriff -subshire -subshrub -subsibilance -subsibilancy -subsidence -subsider -subsidiariness -subsidization -subsidizer -subsidy -subsilicate -subsistence -subsizar -subsizarship -subsmile -subsneer -subsoil -subsolid -subsort -subsorter -subsovereign -subspace -subspecialist -subspecialization -subspecialty -subspecies -subsphere -subspontaneousness -subsquadron -substage -substance -substandardization -substantialism -substantiality -substantialness -substantiation -substantiator -substantive -substantiveness -substation -substituent -substitution -substock -substore -substoreroom -substory -substrate -substratosphere -substratum -substructure -subsulcus -subsulfate -subsulfid -subsulfide -subsulphid -subsulphide -subsumption -subsuperficialness -subsurety -subsyndicate -subsyndication -subsynod -subtangent -subtaxer -subteen -subtenancy -subtenant -subtepidity -subtepidness -subterfuge -subterrane -subterritory -subtext -subthrill -subtileness -subtilisation -subtiliser -subtitle -subtleness -subtlety -subtonic -subtopia -subtopic -subtotal -subtotem -subtower -subtracter -subtraction -subtrahend -subtranslucence -subtranslucency -subtransparentness -subtread -subtreasurer -subtreasurership -subtreasury -subtrench -subtriangularity -subtribe -subtriplication -subtruncation -subtrunk -subtunic -subtunnel -subtutor -subtutorship -subtype -subunequalness -subunit -subuniverse -suburb -suburbanisation -suburbanite -suburbanization -suburbia -subutopian -subvariety -subvassal -subvassalage -subvein -subvention -subversion -subversiveness -subversivism -subvertebrate -subverter -subverticalness -subvestment -subvicar -subvicarship -subvillain -subvitalisation -subvitalization -subvitreousness -subwar -subwarden -subwardenship -subway -subwink -subworker -subworkman -subzone -succah -succedaneum -succeeder -succentor -success -successfulness -succession -successiveness -successlessness -successor -succinate -succinctness -succinctorium -succinylsulfathiazole -succor -succorer -succory -succotash -succoth -succour -succourer -succuba -succubus -succulence -succulency -succumber -succussion -suckerfish -suckfish -suckler -suckling -sucrase -sucre -sucrier -sucrose -suction -sudarium -sudatorium -sudd -suddenness -sudor -sudoriferousness -suede -suer -suet -sufferableness -sufferance -sufferer -suffering -sufficiency -suffix -suffixion -sufflation -suffrage -suffragette -suffragettism -suffragist -suffumigation -suffusion -sugar -sugarbush -sugarhouse -sugariness -sugarplum -suggestedness -suggester -suggestibility -suggestibleness -suggestion -suggestiveness -sugh -sugi -suicide -suimate -suint -suit -suitcase -suite -suiting -suitor -sukiyaki -sukkah -sukkoth -sulcation -sulcus -sulfaguanidine -sulfamerazine -sulfanilamide -sulfantimonide -sulfapyrazine -sulfapyridine -sulfarsenide -sulfarsphenamine -sulfate -sulfathiazole -sulfation -sulfisoxazole -sulfite -sulfonamide -sulfonate -sulfonation -sulfone -sulfonic -sulfonmethane -sulfur -sulfureousness -sulfuret -sulfurization -sulfurousness -sullage -sullenness -sulphadiazine -sulphanilamide -sulphantimonide -sulphapyrazine -sulphapyridine -sulpharsenide -sulphate -sulphathiazole -sulphation -sulphatization -sulphide -sulphinyl -sulphisoxazole -sulphite -sulphonamide -sulphonate -sulphonation -sulphone -sulphonium -sulphonmethane -sulphonyl -sulphur -sulphuration -sulphurator -sulphureous -sulphurization -sulphurousness -sulphuryl -sultan -sultana -sultanate -sultanship -sultriness -sum -sumac -sumach -sumi -summa -summability -summand -summariness -summarisation -summariser -summarist -summarization -summarizer -summary -summation -summer -summerhouse -summerliness -summersault -summerset -summertime -summertree -summerwood -summit -summitry -summoner -summons -sumo -sumoist -sump -sumpter -sumptuousness -sun -sunbake -sunbather -sunbathing -sunbeam -sunberry -sunbird -sunbonnet -sunbow -sunbreak -sunburn -sunburst -sundae -sunderance -sundew -sundial -sundog -sundown -sundowner -sundress -sundriness -sundrops -sunfish -sunflower -sunglass -sunglow -sungrebe -sunhat -sunket -sunlessness -sunlight -sunn -sunniness -sunray -sunrise -sunroom -sunset -sunshade -sunshine -sunspot -sunspottedness -sunstar -sunstone -sunstroke -sunsuit -suntan -suntans -suntrap -sunup -suovetaurilia -superability -superableness -superabominableness -superabomination -superabstractness -superabsurdity -superabsurdness -superabundance -superaccumulation -superaccurateness -superachievement -superacidity -superacknowledgment -superacquisition -superactiveness -superactivity -superacuteness -superadaptableness -superaddition -superadequateness -superadministration -superadmirableness -superadmiration -superadornment -superaerodynamics -superaffiliation -superaffluence -superaffusion -superagency -superaggravation -superagitation -superalimentation -superalkalinity -superallowance -superaltar -superambition -superambitiousness -superanimality -superannuation -superannuity -superapology -superappreciation -superarbiter -superarduousness -superarrogance -superartificiality -superaspiration -superassertion -superassociate -superassumption -superastonishment -superattachment -superattainableness -superattendant -superattraction -superattractiveness -superauditor -superaveraness -superaward -superbazaar -superbelief -superbelievableness -superbenefit -superbenevolence -superbias -superblessedness -superblunder -superbness -superboldness -superbomb -superbrain -superbraveness -superbrute -supercabinet -supercalender -supercandidness -supercanonization -supercanopy -supercapability -supercapableness -supercapital -supercaption -supercargo -supercatastrophe -supercaution -supercavitation -supercensure -superceremoniousness -supercharger -superchivalrousness -superciliousness -supercilium -supercivilization -superclaim -superclass -supercoincidence -supercombination -supercommendation -supercommentary -supercommentator -supercommercialness -supercompetition -supercomplexity -supercomprehension -supercompression -superconduction -superconductivity -superconductor -superconfidence -superconfirmation -superconformableness -superconformist -superconformity -superconfusion -supercongestion -superconsequence -superconservativeness -supercontest -supercontribution -supercontrol -supercordialness -supercorporation -supercredit -supercrime -supercritic -supercriticalness -superculture -supercuriousness -supercycle -supercynicalness -superdanger -superdebt -superdecoration -superdeficit -superdeity -superdejection -superdelegate -superdelicateness -superdemand -superdemonstration -superdensity -superdeposit -superdevelopment -superdevilishness -superdevotion -superdiabolicalness -superdiplomacy -superdirection -superdiscount -superdistention -superdistribution -superdividend -superdivision -superdoctor -superdominant -superdonation -superdose -superdramatist -superdreadnought -superdubiousness -superduplication -supereconomy -supereducation -supereffectiveness -supereffluence -superego -superelaborateness -superelegance -superelegancy -superelevation -supereligibility -supereligibleness -supereloquence -supereminence -superemphasis -superendorsement -superenforcement -superenrollment -superepoch -supererogation -supererogator -superestablishment -superether -superethicalness -superevidence -superexaltation -superexaminer -superexcellence -superexcellency -superexcitation -superexcitement -superexcrescence -superexertion -superexpansion -superexpectation -superexpenditure -superexport -superexpression -superexpressiveness -superexquisiteness -superextension -superextremity -superfamily -superfarm -superfecundation -superfecundity -superfee -superfemale -superfemininity -superfetation -superfibrination -superficies -superfinance -superfiniteness -superfissure -superfit -superfix -superfleet -superflexion -superfluid -superfluidity -superfluity -superflux -superfoliation -superfolly -superformalness -superformation -superformidableness -superfulfillment -superfunction -superfusion -supergaiety -supergalaxy -supergallantness -supergenerosity -supergiant -supergloriousness -supergoddess -supergoodness -supergraduate -supergrant -supergratification -supergravitation -superguarantee -supergun -supergyre -superheartiness -superheater -superheresy -superhero -superhet -superhighway -superhumanity -superhumanness -superhumeral -superhypocrite -superidealness -superillustration -superimposition -superimprobableness -superincentive -superinclination -superinclusiveness -superincomprehensibleness -superincrease -superincumbence -superincumbency -superindependence -superindictment -superindifference -superindividualism -superindividualist -superinduction -superindulgence -superindustriousness -superindustry -superinference -superinfiniteness -superinfirmity -superinfluence -superinformality -superingeniousness -superingenuity -superinitiative -superinjection -superinjustice -superinnocence -superinquisitiveness -superinscription -superinsistence -superintendency -superintendent -superintenseness -superintensity -superintolerableness -superinundation -superinvolution -superiority -superirritability -superjurisdiction -superjustification -superknowledge -superl -superlaboriousness -superlactation -superlativeness -superlikelihood -superline -superliner -superload -superlogicality -superluxuriousness -supermalate -supermale -superman -supermarket -supermarvelousness -supermasculinity -supermaterial -supermedicine -supermentality -supermixture -supermolecule -supermoroseness -supermotility -supermystery -supernatation -supernation -supernationalism -supernationalist -supernaturalism -supernaturalness -supernecessity -supernegligence -supernormality -supernormalness -supernotableness -supernova -supernumerousness -supernutrition -superobedience -superobjection -superobligation -superobstinateness -superoffensiveness -superofficiousness -superopposition -superoptimist -superorder -superordination -superorganization -superornament -superoutput -superoxalate -superoxide -superoxygenation -superparasite -superparasitism -superpassage -superpatience -superpatriot -superpatriotism -superperfection -superperson -superphosphate -superpiety -superpiousness -superplausibleness -superpoliteness -superpolymer -superpopulatedness -superpopulation -superposition -superpositiveness -superpossition -superpower -superpraise -superprecariousness -superpreciseness -superpreparation -superprobability -superproduce -superproduction -superproportion -superpublicity -superpurgation -superpurity -superrace -superradicalness -superreaction -superrefinement -superreflection -superreform -superreformation -superregistration -superregulation -superreliance -superremuneration -superrequirement -superrespectability -superrespectableness -superresponsibility -superresponsibleness -superrestriction -superrighteousness -supersacrifice -supersafeness -supersafety -supersagaciousness -supersaint -supersalesman -supersalesmanship -supersanguinity -supersanity -supersarcasm -supersatisfaction -supersaturation -superscandal -superscription -superseaman -supersecret -supersecretion -supersecretiveness -supersecureness -superseder -supersedure -superselection -superseniority -supersensitisation -supersensitiser -supersensitiveness -supersensualism -supersensualist -supersensuality -supersensuousness -superseriousness -superservice -superserviceableness -supersession -supersevereness -superseverity -supershipment -supersimplicity -supersincerity -supersize -supersmartness -supersoil -supersolemnity -supersolemnness -supersolicitation -supersonics -supersovereignty -superspecies -superspecification -superspirituality -superstage -superstamp -superstandard -superstar -superstate -superstatesman -superstimulation -superstition -superstrain -superstratum -superstrenuousness -superstrictness -superstructure -superstylishness -supersubtlety -supersufficiency -supersulfate -supersulphate -supersurprise -supersuspicion -supersuspiciousness -supersweetness -supersympathy -supersyndicate -supersystem -supertanker -supertartrate -supertax -supertemptation -supertension -superthankfulness -superthoroughness -supertoleration -supertonic -supertotal -supertower -supertragedy -supertranscendentness -supertreason -supertunic -superunit -superunity -superuniversalness -superuniverse -superurgency -supervalue -supervastness -supervenience -supervenosity -supervestment -supervexation -supervictoriousness -supervictory -supervigilance -supervigorousness -supervision -supervisor -supervitality -supervitalness -supervolition -superwager -superwoman -superworldliness -superyacht -superzealousness -supination -supinator -supineness -suplex -supp -suppedaneum -supper -suppertime -supplantation -supplanter -supplejack -supplement -supplementer -suppleness -suppletion -suppliance -suppliantness -supplicant -supplication -supplier -supportability -supportableness -supporter -suppos -supposal -supposition -suppository -suppression -suppuration -supr -supralapsarian -supralapsarianism -supranationalism -supranaturalism -supranaturalist -supraprotest -supremacist -supremacy -supremeness -supremo -supremum -suq -sura -surah -surat -surbase -surcease -surcharge -surcharger -surcingle -surcoat -surd -sureness -surety -surf -surface -surfacer -surfactant -surfbird -surfboard -surfboarder -surfboarding -surfboat -surfcasting -surfeit -surfer -surffish -surfie -surfing -surfperch -surfrider -surg -surge -surgeon -surgeoncy -surgeonfish -surgery -suricate -surjection -surliness -surmiser -surmountableness -surmounter -surmullet -surname -surpassingness -surplice -surplus -surplusage -surprisal -surpriser -surprisingness -surra -surrealism -surrebuttal -surrebutter -surrejoinder -surrenderer -surrey -surrogate -surrogateship -surrogation -surrounder -surrounding -surtax -surtout -surv -surveillance -surveying -surveyor -surveyorship -survivability -survival -survivor -survivorship -susceptance -susceptibility -sushi -suslik -suspectedness -suspecter -suspender -suspendibility -suspense -suspensibility -suspension -suspensiveness -suspensoid -suspensor -suspensory -suspicion -suspiciousness -suspiration -susso -sustainer -sustainment -sustenance -sustentation -sustention -susu -susurration -susurrus -sutler -sutlership -sutra -suttee -suture -suzerain -suzerainty -swab -swabber -swag -swage -swager -swagman -swagsman -swain -swale -swallet -swallower -swallowtail -swallowwort -swami -swamp -swamper -swampland -swamy -swan -swanherd -swankiness -swannery -swanskin -swapper -swaraj -swarajism -swarajist -sward -swarf -swarm -swarmer -swarthiness -swartzite -swashbuckler -swatch -swath -swather -swatter -swayer -swearer -swearword -sweat -sweatband -sweatbox -sweater -sweatiness -sweatshop -sweatweed -swede -sweeny -sweepback -sweeper -sweepingness -sweeps -sweepstake -sweepstakes -sweetbread -sweetbrier -sweetener -sweetening -sweetheart -sweetie -sweetiewife -sweeting -sweetman -sweetmeat -sweetness -sweetsop -sweetweed -swellfish -swellheadedness -swelling -swerver -sweven -swifter -swiftie -swiftlet -swiftness -swig -swigger -swiller -swimmeret -swimming -swimmingness -swimsuit -swindler -swine -swineherd -swineherdship -swinepox -swingback -swingboat -swingle -swinglebar -swingletree -swingometer -swingtree -swinishness -swinker -swipple -switch -switchback -switchblade -switchboard -switcher -switcheroo -switchgirl -switchman -switchover -switchyard -swither -swivel -swiveltail -swivet -swizzle -swob -swollenness -swoose -swop -sword -swordbearer -swordbill -swordcraft -swordfish -swordman -swordmanship -swordplay -swordplayer -swordsman -swordsmanship -swordstick -swordtail -swotter -swound -swy -sybarite -sybaritism -sycamine -sycamore -syce -sycee -sycon -syconium -sycophant -sycosis -syenite -syke -syll -syllabary -syllabi -syllabication -syllabification -syllabism -syllable -syllabogram -syllabography -syllabub -syllabus -syllepsis -syllogisation -syllogiser -syllogism -sylph -sylphid -sylva -sylvanite -sylviculture -sylvite -sym -symbiont -symbiosis -symbol -symbolicalness -symbolics -symbolisation -symbolism -symbolist -symbologist -symbology -symmetalism -symmetallism -symmetricalness -symmetrisation -symmetrization -symmetry -sympathectomy -sympathetectomy -sympathin -sympathizer -sympathy -symphile -symphonette -symphonia -symphonisation -symphonist -symphonization -symphony -symphysis -symploce -sympodium -symposiarch -symposium -symptom -symptomatology -symptosis -synaeresis -synaesthesia -synagogue -synalepha -synalgia -synapse -synapsis -synapte -synaptene -synarchy -synarthrodia -synarthrosis -synaxarion -synaxarium -synaxary -synaxis -syncarp -syncarpy -synchro -synchrocyclotron -synchroflash -synchronisation -synchroniser -synchronism -synchronization -synchronizer -synchronoscope -synchronousness -synchroscope -synchrotron -syncline -synclinorium -syncopation -syncopator -syncope -syncretism -syncrisis -syncytium -synd -syndactylism -syndactylus -synderesis -syndesis -syndesmosis -syndet -syndeton -syndic -syndical -syndicalism -syndicate -syndicship -syndrome -synecdoche -synechia -synechist -synecology -synectics -syneresis -synergism -synergist -synergy -synesis -synesthesia -syngamy -syngenesis -synizesis -synkaryon -synod -synoekete -synonym -synonymity -synonymousness -synonymy -synophthalmia -synopsis -synoptist -synosteosis -synostosis -synovia -synovitis -syntactics -syntagma -syntality -syntax -synteresis -synthesis -synthesist -synthesization -synthesizer -synthetisation -synthetiser -synthetism -synthetizer -synthol -syntonisation -syntonization -syntonizer -syntype -syph -syphilis -syphilisation -syphilise -syphilization -syphilologist -syphilology -syphiloma -syphon -syr -syringa -syringe -syringomyelia -syrinx -syrphid -syrup -syssarcosis -syst -system -systematics -systematisation -systematiser -systematism -systematist -systematization -systematizer -systematology -systemisation -systemiser -systemization -systemizer -systole -syzygy -taata -tab -tabanid -tabard -tabaret -tabbinet -tabel -taber -tabernacle -tabes -tabescence -tabi -tabinet -tabla -tablature -table -tableau -tablecloth -tableful -tableland -tablespoon -tablespoonful -tablet -tableware -tabling -tablinum -tabloid -tabor -taborer -taboret -taborin -tabourer -tabret -tabularisation -tabularization -tabulation -tabulator -tacamahac -tace -tache -tacheometer -tacheometry -tachi -tachisme -tachistoscope -tachogram -tachograph -tachometer -tachyauxesis -tachycardia -tachygraph -tachygrapher -tachygraphist -tachygraphy -tachylyte -tachymeter -tachymetry -tachyon -tachyphylaxis -tachypnea -tachysterol -tacitness -taciturnity -tack -tacker -tacket -tackiness -tackle -tackler -tackling -tacmahack -tacnode -taco -taconite -tacpoint -tact -tactic -tactician -taction -tactlessness -tactus -tad -tadpole -tael -taenia -taeniacide -taeniafuge -taeniasis -taenidium -taenite -taffarel -taffeta -taffrail -taffy -tafia -tag -tagliarini -tagliatelle -taglock -tagmeme -tagrag -tahina -tahr -tahsil -tahsildar -taig -taiga -taiglach -tail -tailback -tailband -tailboard -tailer -tailgate -tailgater -tailing -taille -taillessness -taillight -tailor -tailorbird -tailpiece -tailpipe -tailplane -tailrace -tailskid -tailspin -tailstock -tailwater -tailwind -tain -taintlessness -taipan -taj -taka -takahe -takeoff -takeover -taker -takin -tal -talapoin -talc -tale -talebearer -talent -talented -taler -tales -talesman -talion -talipes -talipot -talisman -talkability -talkathon -talkativeness -talker -talkfest -talkie -tallage -tallboy -tallith -tallness -tallow -tallowiness -tallyho -tallyman -tallyshop -talon -taluk -talus -talweg -tam -tamable -tamale -tamandua -tamara -tamarack -tamarao -tamarau -tamarin -tamarind -tamarisk -tamas -tamasha -tambac -tambour -tamboura -tambourin -tambourine -tameability -tameableness -tamelessness -tamis -tammy -tamperer -tampion -tampon -tamponade -tampur -tan -tana -tanager -tanbark -tanbur -tandem -tang -tanga -tangelo -tangency -tangent -tangerine -tangibility -tangibleness -tangle -tangleberry -tanglement -tangler -tango -tangoreceptor -tangram -tanguile -tanh -tanist -tanistry -tank -tanka -tankage -tankard -tanker -tankful -tankship -tanna -tannage -tannate -tanner -tannery -tannin -tanning -tansy -tantalate -tantalisation -tantaliser -tantalite -tantalization -tantalum -tantalus -tantara -tantrum -tapa -tapaculo -tapadera -tapas -tape -tapeman -taperer -taperstick -tapestry -tapetum -tapeworm -taphephobia -taphole -taphouse -tapioca -tapiolite -tapir -tapis -tapper -tappet -tapping -taproom -taproot -taps -tapster -tar -taradiddle -taramasalata -tarantass -tarantella -tarantism -tarantist -tarantula -tarata -taraxacum -tarboosh -tarbrush -tarbuttite -tardigrade -tare -tarentism -targe -target -targeteer -tariff -tarlatan -tarn -tarnation -tarnkappe -taro -tarogato -tarok -tarot -tarp -tarpan -tarpaulin -tarpon -tarradiddle -tarragon -tarred -tarriance -tarrier -tarring -tarsia -tarsier -tarsometatarsus -tarsus -tart -tartan -tartar -tartarization -tartlet -tartness -tartrate -tartrazine -tarweed -tasimeter -task -taskmaster -taskmastership -taskmistress -taskwork -tass -tasse -tassel -tasseler -tasseller -tasset -tassie -taste -tastefulness -tastelessness -taster -tastiness -tatami -tater -tatouay -tatterdemalion -tattered -tattersall -tattiness -tatting -tattler -tattletale -tattoo -tattooer -tattooist -tau -taunter -taupe -taurobolium -tauromachy -tauromaquia -tautochrone -tautog -tautologism -tautologist -tautology -tautomer -tautomerism -tautomerization -tautonym -tav -tavern -taverner -taw -tawdriness -tawer -tawny -tawpy -taws -tawse -tawyer -tax -taxability -taxableness -taxation -taxeme -taxgathering -taxi -taxicab -taxidermist -taxidermy -taximeter -taxiplane -taxis -taxite -taxiway -taxon -taxonomer -taxonomist -taxonomy -taxpayer -taxpaying -tay -tayra -tazza -tb -tbs -tc -tcheckup -tchervonetz -tchr -te -tea -teaberry -teacake -teacart -teacher -teachership -teaching -teacup -teacupful -teahouse -teak -teakettle -teakwood -teal -team -teamer -teammate -teamster -teamwork -teapot -teapoy -tear -tearableness -teardown -teardrop -tearer -tearfulness -teariness -tearlessness -tearoom -teasableness -teasel -teaseler -teaseller -teaser -teashop -teaspoon -teaspoonful -teat -teataster -teatime -teazel -teazle -tecassir -tech -techiness -technetium -technic -technicality -technicalness -technician -technics -technique -technocracy -technography -technologist -technology -technostructure -tectonics -tectrix -tedder -teddy -tediousness -tedium -tee -teel -teemer -teemingness -teenager -teenybopper -teepee -teeterboard -teeth -teether -teething -teethridge -teetotaler -teetotalism -teetotum -tef -teff -teg -tegmen -tegula -tegument -teiglach -teil -teknonymy -tektite -tektosilicate -tela -telaesthesia -telamon -telangiectasis -telautography -tele -telecommunication -telecommunications -telecourse -teledu -telefilm -teleg -telega -telegnosis -telegony -telegram -telegraph -telegraphese -telegraphist -telegraphone -telegraphy -telekinesis -telemark -telemechanics -telemeter -telemetry -telemotor -telencephalon -teleologist -teleology -teleost -telepathist -telepathy -teleph -telephone -telephonist -telephonograph -telephony -telephotography -telephotometer -teleplasm -teleplay -teleport -teleprinter -teleran -telescope -telescopist -telescopy -telescript -telesis -telespectroscope -telestereoscope -telesthesia -telestich -telethermometer -telethermometry -telethon -teletranscription -teletube -teletypesetting -teletypewriter -teletypist -teleutosorus -teleutospore -television -televisor -telewriter -telex -telfer -telferage -teliospore -telium -teller -tellership -tellin -telltale -tellurate -telluride -tellurion -tellurite -tellurium -tellurometer -telly -telomerization -telophase -telotaxis -telpher -telpherage -telson -temblor -temerariousness -temerity -temp -temper -tempera -temperament -temperance -temperateness -temperature -tempest -tempestuousness -template -temple -templet -templon -tempo -temporality -temporalness -temporariness -temporisation -temporiser -temporization -temporizer -temporomaxillary -temptation -temptingness -temptress -tempura -ten -tenability -tenableness -tenace -tenaculum -tenaille -tenaim -tenancy -tenant -tenantry -tench -tendance -tendenciousness -tendency -tendentiousness -tenderability -tenderer -tenderfoot -tenderheartedness -tenderisation -tenderiser -tenderization -tenderizer -tenderloin -tenderness -tendon -tendril -tenebriousness -tenebrism -tenebrousness -tenement -tenesmus -tenet -tenia -teniacide -teniafuge -teniasis -tennantite -tenner -tennis -tenno -tenon -tenoner -tenonitis -tenor -tenorite -tenorrhaphy -tenositis -tenotomy -tenpin -tenpins -tenpounder -tenrec -tensegrity -tenselessness -tenseness -tensibility -tensibleness -tensileness -tensility -tensimeter -tensiometer -tension -tensity -tenson -tensor -tent -tentacle -tentage -tentation -tenter -tenterhook -tentmaker -tentorium -tenuis -tenuousness -tenure -teocalli -teosinte -tepal -tepe -tepee -tepefaction -tephra -tephrite -tephroite -tequila -ter -terahertz -teraph -terass -teratism -teratogenesis -teratogeny -teratology -teratoma -terbia -terbium -terce -tercel -tercet -terebene -terebinth -teredo -terephthalate -tergiversant -tergiversation -tergiversator -tergum -term -termagant -termer -terminability -terminableness -termination -terminator -terminism -terminist -terminologist -terminology -terminus -termitarium -termite -termor -tern -terne -ternion -terotechnology -terpene -terpineol -terr -terra -terrace -terracing -terrain -terramara -terrane -terrapin -terrarium -terrazzo -terreplein -terret -terribleness -terricolous -terrier -terrifier -terrine -territorialisation -territorialism -territorialist -territoriality -territorialization -territory -terror -terrorisation -terroriser -terrorism -terrorist -terrorization -terrorizer -terry -terseness -tertianship -tervalence -tervalency -terzetto -teschenite -tesla -tessellation -tessera -tesseract -tessitura -testa -testability -testament -testator -testee -tester -testes -testicle -testification -testifier -testimonial -testimony -testis -testmatch -teston -testosterone -testudo -tetanisation -tetanization -tetanus -tetany -tetartohedrism -tetchiness -teth -tether -tetherball -tetra -tetrabasicity -tetrabrach -tetracaine -tetracene -tetrachloride -tetrachloroethylene -tetrachloromethane -tetrachord -tetracycline -tetrad -tetradrachma -tetradymite -tetrafluoroethylene -tetragon -tetragonalness -tetragram -tetrahedrite -tetrahedron -tetrahydrate -tetrahydropyrrole -tetralite -tetralogy -tetramer -tetramerism -tetrameter -tetramethyldiarsine -tetranitrate -tetranitromethane -tetraplegia -tetraploidy -tetrapod -tetrapody -tetrapylon -tetrarch -tetrarchate -tetrasporangium -tetraspore -tetrastich -tetrasyllable -tetravalence -tetravalency -tetrazene -tetrode -tetroxide -tetryl -tetter -teughness -tew -texas -text -textbook -textile -textualism -textualist -texture -tfr -tg -tgn -thack -thak -thalamencephalon -thalamium -thalamotomy -thalamus -thalassocracy -thalassographer -thalassography -thaler -thalidomide -thallium -thallophyte -thallus -thalweg -thana -thanatophobia -thanatopsis -thane -thanker -thankfulness -thanklessness -thanksgiver -thanksgiving -thar -tharm -thatch -thatching -thaumatology -thaumatrope -thaumaturge -thaumaturgy -theanthropism -theanthropist -thearchy -theat -theater -theatre -theatricalisation -theatricality -theatricalization -theatricalness -theatrician -theatrics -theatticalism -thebaine -theca -thecium -theelin -theft -theftproof -thegn -theine -theism -theist -thelitis -thema -theme -thenar -thenardite -theobromine -theocentricism -theocentricity -theocentrism -theocracy -theocrasy -theodicy -theodolite -theogonist -theogony -theol -theolatry -theologian -theologisation -theologiser -theologization -theologizer -theologue -theology -theomachy -theomancy -theomania -theomaniac -theomorphism -theonomy -theopathy -theophagy -theophany -theophobia -theophylline -theor -theorbist -theorbo -theorem -theoretician -theoretics -theorisation -theoriser -theorist -theory -theosophism -theosophist -theosophy -therapeutics -therapist -therapsid -therapy -therblig -therianthropism -theridiid -theriomorph -therm -thermaesthesia -thermalgesia -therme -thermel -thermesthesia -thermion -thermionics -thermistor -thermite -thermoanesthesia -thermobarograph -thermobarometer -thermochemist -thermochemistry -thermocline -thermocouple -thermocurrent -thermodiffusion -thermodynamics -thermoelectricity -thermoelectrometer -thermoelectron -thermogalvanometer -thermogenesis -thermogeography -thermograph -thermography -thermojunction -thermolability -thermoluminescence -thermolysis -thermomagnetic -thermometer -thermometry -thermomotor -thermophile -thermophone -thermophosphorescence -thermopile -thermoplasticity -thermoscope -thermosiphon -thermosphere -thermostability -thermostat -thermostatics -thermotank -thermotaxis -thermotherapy -thermotropism -therophyte -theropod -thesaurus -thesis -theta -theurgist -theurgy -thew -thiamine -thiasos -thiasus -thiazine -thiazole -thickener -thickening -thicket -thickhead -thickheaded -thickleaf -thickness -thief -thievery -thievishness -thigger -thigh -thighbone -thigmotaxis -thigmotropism -thill -thimble -thimbleful -thimblerig -thimblerigger -thimbleweed -thimblewit -thimerosal -thing -thingamabob -thingstead -thingumabob -thingumajig -thingumbob -thinkableness -thinker -thinking -thinner -thinness -thioalcohol -thioaldehyde -thioantimonate -thioantimonite -thioarsenate -thioarsenite -thiobacillus -thiocarbamide -thiocyanate -thiocyanogen -thioester -thiofuran -thiol -thionate -thionation -thionin -thionine -thionyl -thiopental -thiopentone -thiophen -thiophene -thiophenol -thiosinamine -thiosulphate -thiouracil -thiourea -thirlage -thirst -thirster -thirstlessness -thirteen -thirty -thistle -thistledown -thole -tholos -tholus -thomisid -thong -thoracectomy -thoracopagus -thoracoplasty -thoracostomy -thoracotomy -thorax -thoria -thorianite -thorite -thorium -thorn -thornback -thornbill -thornhead -thornlessness -thoron -thoroughbredness -thoroughfare -thoroughgoingness -thoroughness -thoroughpin -thoroughwort -thorp -thoughtlessness -thousand -thrall -thrasher -thrashing -thrave -thrawnness -thread -threader -threadfin -threadfish -threadiness -threadworm -threaper -threat -threatener -three -threedimensionality -threepence -thremmatology -threnode -threnodist -threnody -threonine -thresher -threshold -thrift -thriftlessness -thriftshop -thrill -thriller -thrippence -thrips -thriver -throat -throatiness -throatlash -throatlatch -throe -thrombectomy -thrombin -thromboclasis -thrombocyte -thromboembolism -thrombogen -thrombokinase -thrombolysis -thrombophlebitis -thromboplastin -thrombosis -thrombus -throne -throng -thronos -throstle -throttle -throttler -throughput -throughway -throwaway -throwback -thrower -throwster -thrummer -thrummy -thruput -thrush -thruster -thruway -thsant -thud -thug -thuggee -thuggery -thuja -thulia -thulium -thumb -thumber -thumbkin -thumbnail -thumbnut -thumbprint -thumbscrew -thumbstall -thumbtack -thump -thunder -thunderbird -thunderbolt -thunderbox -thunderclap -thundercloud -thunderer -thunderhead -thunderpeal -thundershower -thundersquall -thunderstick -thunderstone -thunderstorm -thurible -thurifer -thuya -thwacker -thwarter -thylacine -thyme -thymidine -thymine -thymol -thymus -thyratron -thyristor -thyroadenitis -thyrocalcitonin -thyrocarditis -thyroidectomy -thyroiditis -thyroidotomy -thyrorion -thyrosis -thyrotome -thyrotoxicity -thyrotoxicosis -thyrotropin -thyroxine -thyrse -thyrsus -thysanuran -ti -tiara -tibia -tibiotarsus -tic -tical -tick -ticker -ticket -ticking -tickler -ticklishness -ticktack -ticktock -tid -tidbit -tiddler -tiddlywinks -tidehead -tideland -tidelessness -tidemark -tiderip -tidewaiter -tidewater -tideway -tidiness -tidying -tidytips -tieback -tiebreaker -tieclasp -tiemannite -tiepin -tier -tierce -tiercel -tierceron -tiff -tiffany -tiffin -tiger -tigereye -tigerfish -tigerishness -tightener -tightness -tightrope -tightwad -tiglon -tigon -tigress -tike -tiki -tikoloshe -til -tilapia -tilbury -tilde -tile -tilefish -tilery -tiling -tillage -tillandsia -tiller -tillerman -tillicum -tillite -tilth -tilthead -tiltyard -timarau -timbal -timbale -timber -timberhead -timbering -timberjack -timberland -timberwork -timberyard -timbre -timbrel -time -timecard -timekeeper -timekeeping -timeliness -timepiece -timepleaser -timer -timesaver -timeserver -timeservingness -timetable -timework -timeworker -timidity -timidness -timing -timocracy -timorousness -timothy -tin -tinamou -tincal -tinct -tincture -tinder -tinderbox -tine -tinea -tineid -tinerer -tinfoil -ting -tinglass -tingler -tinhorn -tininess -tinker -tinkler -tinkling -tinman -tinner -tinniness -tinning -tinnitus -tinsel -tinsmith -tinstone -tint -tintack -tinter -tintinnabulation -tintinnabulum -tintlessness -tintometer -tintometry -tintype -tinware -tinwork -tinworks -tipburn -tipcart -tipcat -tipi -tipper -tippet -tippler -tipsiness -tipstaff -tipster -tirade -tirailleur -tirelessness -tirewoman -tirl -tiro -tirrivee -tisane -tissue -tiswin -titan -titanate -titania -titanite -titanium -titanosaur -titanothere -titbit -titer -titfer -tithe -tither -tithing -titi -titillation -titivation -titivator -titlark -title -titleholder -titlist -titman -titmouse -titrant -titration -titre -tittivation -tittivator -tittle -titubation -titularity -tizwin -tizzy -tlo -tm -tmesis -toad -toadeater -toadfish -toadflax -toadishness -toadstone -toadstool -toady -toadyism -toast -toaster -toastiness -toastmaster -tob -tobacco -tobacconist -tobe -tobira -toboggan -toby -toccata -tocher -tocodynamometer -tocology -tocometer -tocopherol -tocsin -tod -today -toddler -toddy -tody -toe -toea -toecap -toehold -toenail -toeshoe -toff -toffee -toft -tog -toga -togated -togetherness -toggery -toggle -toggler -togue -toheroa -tohubohu -toil -toile -toilet -toiletry -toilette -toilsomeness -toilworn -tokay -token -tokenism -tokology -tokoloshe -tokonoma -tola -tolan -tolbooth -tolbutamide -tole -tolerability -tolerableness -tolerance -toleration -tolerationism -tolerationist -tolerator -toleware -tolidine -tollbooth -toller -tollgate -tollhouse -tollkeeper -tollman -tolly -tolu -toluate -toluene -toluide -toluidine -toluol -toluyl -tolyl -tom -tomahawk -tomahawker -tomalley -toman -tomatillo -tomato -tomb -tombac -tombola -tombolo -tomboy -tombstone -tomcat -tome -tomentum -tomfool -tomfoolery -tomfoolishness -tomium -tommy -tommyrot -tomogram -tomograph -tomography -tomorrow -tompion -tomtit -ton -tonalist -tonality -tondo -tone -tonelada -tonelessness -toneme -toner -tonetician -tonetics -tonette -tonga -tongman -tongue -tonguefish -tongues -tonguing -tonic -tonicity -tonight -tonishness -tonite -tonk -tonlet -tonn -tonnage -tonne -tonneau -tonnishness -tonometer -tonsil -tonsillectome -tonsillectomy -tonsillitis -tonsillotomy -tonsure -tontine -tonus -tool -toolbox -tooler -toolholder -tooling -toolmaker -toolmaking -toolroom -toolshed -toom -toon -tooter -tooth -toothache -toothbrush -toothlessness -toothpaste -toothpick -toothsomeness -toothwort -toots -tootsy -top -toparch -topaz -topazolite -topcastle -topcoat -topee -toper -topflighter -topgallant -toph -tophamper -tophus -topi -topic -topicality -topknot -toplessness -topliner -toploftiness -topman -topmast -topminnow -topog -topographer -topography -topologist -topology -toponym -toponymy -topos -topotype -topper -topping -toprail -tops -topsail -topside -topsmelt -topsoil -topspin -topsyturviness -toque -tor -toran -torbanite -torbernite -torc -torch -torchare -torchbearer -torchier -torchwood -toreador -torero -toreutics -tori -torii -tormentil -tormentor -tornado -tornaria -tornillo -toro -toroid -torpedo -torpedoman -torpor -torque -torques -torr -torrent -torridity -torridness -torsade -torse -torsel -torsi -torsibility -torsion -torsk -torso -tort -torte -torteau -tortellini -torticollis -tortilla -tortillon -tortoise -tortoiseshell -tortoni -tortricid -tortuosity -tortuousness -torus -tosh -tosspot -tossup -tot -total -totalitarianism -totality -totalization -totalizer -totaquine -totem -totemism -totemist -toter -totient -toting -totipalmation -totterer -toucan -toucanet -touchableness -touchback -touchdown -toucher -touchhole -touchiness -touchingness -touchline -touchmark -touchstone -touchwood -toughener -toughie -toughness -toughy -toupee -tour -touraco -tourbillion -tourelle -tourer -tourism -tourist -touristry -tourmaline -tournament -tournedos -tourney -tourniquet -touter -tovarich -tovarisch -towage -towardliness -towardness -towbar -towboat -towel -towelling -tower -towerman -towhead -towhee -towkay -towline -towmond -town -townee -towner -townscape -township -townsman -townspeople -townswoman -townwear -towpath -towrope -towser -tox -toxaemia -toxalbumin -toxaphene -toxemia -toxicant -toxicity -toxicol -toxicologist -toxicology -toxicosis -toxin -toxiphobia -toxoid -toxophilite -toxophily -toxoplasmosis -toy -toyer -toyon -tp -tpd -tph -tpi -tpm -tr -trabecula -tracasserie -trace -traceability -traceableness -traceably -tracer -tracery -trachea -tracheal -tracheation -tracheid -tracheitis -trachelium -tracheobronchial -tracheophyte -tracheoscopist -tracheostomy -tracheotomist -tracheotomy -trachle -trachoma -trachybasalt -trachyte -tracing -track -tracker -tracklayer -tracklessness -trackman -tracksuit -tract -tractate -tractility -traction -tractor -tractrix -trad -trade -trademark -trader -tradership -tradescantia -tradesman -tradeswoman -tradition -traditionalism -traditionalist -traditionist -traditor -traducement -traducian -traducianism -traffic -trafficability -trafficator -tragacanth -tragedian -tragedienne -tragedy -tragicalness -tragicomedy -tragion -tragopan -tragus -trailblazer -trailboard -trailer -trainband -trainbearer -trainee -trainer -training -trainline -trainman -trainpipe -trainshed -trait -traitor -traitorousness -traitorship -trajection -trajectory -tram -tramcar -tramline -trammeler -trammeller -trammie -tramontana -trampler -trampoline -trampoliner -trampolinist -tramroad -tramway -trance -tranche -trangam -trank -trannie -tranquilization -tranquilizer -tranquillizer -tranquilness -trans -transactinide -transaction -transactor -transcalency -transceiver -transcendence -transcendentalisation -transcendentalism -transcendentalist -transcendentalization -transchanger -transcoloration -transcolouration -transcriber -transcript -transcription -transculturation -transcurvation -transducer -transduction -transection -transelement -transelementation -transenna -transept -transf -transfashion -transfd -transferability -transferal -transferase -transferee -transference -transferor -transferral -transferrer -transferrin -transfiguration -transfigurement -transfiltration -transfixion -transflux -transformation -transformer -transformism -transformist -transfuser -transfusion -transgression -transhipment -transhumance -transience -transientness -transilience -transillumination -transilluminator -transistor -transit -transitable -transition -transitiveness -transitivity -transitoriness -transitron -transl -translatability -translatableness -translater -translation -translator -translight -translocation -translucence -translucency -translunary -transmethylation -transmigrant -transmissibility -transmission -transmissiveness -transmissivity -transmittal -transmittance -transmittancy -transmitter -transmogrification -transmuscle -transmutability -transmutableness -transmutation -transmuter -transom -transp -transparency -transparentness -transpenetration -transpeptidation -transpiration -transponder -transponibility -transportation -transposability -transposal -transposer -transposition -transprocess -transrectification -transshipment -transubstantiation -transubstantiationalist -transudate -transudation -transvaluation -transvection -transversal -tranter -trap -trapanner -trapball -trapeze -trapezium -trapezius -trapezohedron -trapezoid -trapezophoron -trapper -trappiness -traprock -trapshooter -trapshooting -trapunto -trash -trashiness -trass -trattoria -trauchle -trauma -traumatism -traumatization -trav -travail -trave -traveler -traveller -traversal -traverser -travertine -travesty -travois -trawl -trawlability -trawler -tray -traymobile -treacherousness -treachery -treacle -treacleberry -treader -treadle -treadler -treadmill -treadplate -treason -treasonableness -treasr -treasure -treasurer -treasury -treat -treatise -treatment -treaty -trebuchet -trecento -tredecillion -tree -treehopper -treelessness -treenail -treenware -treetop -trefah -trefoil -trehala -trehalose -treillage -trekker -trellis -trelliswork -trematode -trembler -trembles -tremendousness -tremie -tremolite -tremolo -tremor -tremulant -tremulousness -trenail -trench -trenchancy -trencher -trencherman -trend -trental -trepanation -trepang -trepanner -trephine -trepidation -treponema -treponematosis -treponemiasis -trespasser -tress -tressure -trestle -trestletree -trestlework -tret -trevally -trevette -trey -trf -triableness -triacetate -triacetyloleandomycin -triad -triadism -triage -trial -triangle -triangularity -triangulation -triangulator -triarchy -triaxiality -triazine -triazo -triazole -tribade -tribalism -tribalist -tribe -tribelet -tribesman -triblet -triboelectricity -tribology -triboluminescence -tribrach -tribromoethanol -tribulation -tribunal -tribunate -tribune -tribuneship -tributary -tribute -trice -triceps -triceratops -trichiasis -trichina -trichiniasis -trichinisation -trichinization -trichinosis -trichion -trichite -trichloride -trichloroacetaldehyde -trichloroethylene -trichloromethane -trichloronitromethane -trichocyst -trichogyne -trichologist -trichology -trichome -trichomonad -trichomoniasis -trichopteran -trichosis -trichotomy -trichroism -trichromat -trichromatism -trick -trickery -trickiness -trickishness -trickster -trickstering -tricktrack -triclad -triclinium -tricot -tricotine -tricrotism -trictrac -tricycle -trid -trident -tridimensionality -triduum -tridymite -triennium -triens -trier -trierarch -trierarchy -triethylamine -trifle -trifler -triflingness -trifluoperazine -trifluoride -trifluorochloromethane -trifolium -triforium -triga -trigamist -trigatron -trigger -triggerfish -triglyceride -triglyph -trigness -trigo -trigon -trigone -trigonometer -trigonometria -trigonometry -trigonum -trigraph -trihedron -trihydrate -triiodomethane -triiodothyronine -trike -trilaterality -trilateration -trilby -trilemma -trilingualism -trilithon -trill -trillion -trillionth -trillium -trilobite -trilogy -trimaran -trimer -trimester -trimeter -trimethadione -trimethylene -trimethylglycine -trimetrogon -trimmer -trimming -trimodality -trimorph -trimorphism -trimotor -trination -trine -tringle -trinitrobenzene -trinitrocresol -trinitroglycerin -trinitrophenol -trinitrophenylmethylnitramine -trinitrotoluene -trinity -trinket -trinketer -trinketry -trinkum -trio -triode -triol -triolein -triolet -triose -trioxide -trip -tripalmitin -tripartition -tripe -tripelennamine -tripersonality -triphammer -triphenylmethane -triphosphate -triphthong -triphylite -triplane -triplet -tripletail -triplication -triplicity -triploidy -tripod -tripody -tripoli -tripos -tripper -trippet -triptane -triptych -triptyque -tripwire -triquetra -triradius -trireme -trisaccharide -trishaw -triskaidekaphobia -triskelion -trismus -trisoctahedron -trisomy -trispast -tristearin -tristeza -tristfulness -tristich -trisulphide -trisyllabism -trisyllable -trit -tritanope -tritanopia -tritheism -tritheist -trithing -triticale -triticum -tritium -triton -tritone -trituration -triturator -triumph -triumpher -triumvir -triumvirate -triungulin -trivalence -trivalency -trivet -trivialisation -trivialism -triviality -trivialness -trivium -trocar -troch -trochanter -trochar -troche -trochee -trochelminth -trochilus -trochlea -trochoid -trochophore -troglodyte -troglodytism -trogon -troika -troilism -trois -troke -troker -troland -trolley -trollop -trolly -trombidiasis -trombone -trombonist -trommel -tromometer -tromometry -trompe -trona -trondhjemite -trone -troop -trooper -troopship -troostite -tropaeolin -tropaeolum -tropaion -trope -tropeolin -trophallaxis -trophoblast -trophoplasm -trophozoite -trophy -tropic -tropicalisation -tropicalization -tropicbird -tropine -tropism -tropology -tropopause -tropophyte -troposphere -troth -trothplight -trotline -trotter -trotyl -troubadour -trouble -troubledness -troublemaker -troublemaking -troubler -troubleshooter -troublesomeness -troublousness -trough -trouncer -troupe -trouper -troupial -trouser -trousseau -trout -trouv -trouvaille -trouvere -trouveur -trove -trover -trowel -troweler -troweller -trp -truancy -truant -truce -truck -truckage -truckdriver -trucker -truckie -trucking -truckler -truckload -truculence -truculency -trudgen -trueheartedness -truelove -trueness -truffe -truffle -trug -truism -trull -trullisatio -trumeau -trump -trumpery -trumpet -trumpeter -trumpetfish -trumpetry -trumpetweed -trumscheit -truncation -truncheon -trundler -trundletail -trunk -trunkfish -trunkful -trunnel -trunnion -trusser -trussing -trust -trustability -trustbuster -trustee -trusteeship -truster -trustfulness -trustiness -trustingness -trustlessness -trustor -trustworthiness -trusty -truth -truthlessness -tryingness -tryma -tryout -trypaflavine -trypanosome -trypanosomiasis -tryparsamide -trypsin -trypsinize -trypsinogen -tryptophan -trysail -tryst -tsade -tsar -tsardom -tsarevitch -tsarevna -tsarina -tsarism -tsaritza -tsi -tsk -tsotsi -tsunami -tsurugi -tu -tuart -tuatara -tub -tuba -tubber -tubbiness -tube -tubenose -tuber -tubercle -tubercularisation -tubercularization -tuberculin -tuberculination -tuberculinisation -tuberculinization -tuberculisation -tuberculize -tuberculoma -tuberculosis -tuberose -tuberosity -tubifex -tubing -tubman -tubulation -tubulator -tubule -tubulure -tubuphone -tuchun -tucker -tucket -tucotuco -tufa -tuff -tuffet -tuft -tufter -tufthunter -tufting -tugboat -tugger -tugrik -tui -tuition -tularaemia -tule -tulip -tulipomania -tulipwood -tulle -tullibee -tulwar -tumblebug -tumblehome -tumbler -tumbleweed -tumbrel -tumefaction -tumidity -tumidness -tummeler -tummy -tumor -tumour -tump -tumpline -tumult -tumultuousness -tumulus -tuna -tunableness -tundish -tundra -tune -tuneableness -tunefulness -tuner -tunesmith -tungo -tungstate -tungsten -tungstic -tungstite -tunic -tunica -tunicate -tunicle -tuning -tunka -tunnage -tunnel -tunneler -tunneller -tunny -tupelo -tuppence -tuque -turaco -turban -turbary -turbellarian -turbidimeter -turbidimetry -turbidity -turbidness -turbine -turbit -turbo -turbocar -turbocharger -turbofan -turbogenerator -turbojet -turboprop -turbosupercharger -turbot -turbulence -tureen -turf -turfiness -turfman -turgency -turgidity -turgidness -turgite -turgor -turion -turkey -turkeyfish -turmeric -turmoil -turnabout -turnaround -turnbuckle -turncoat -turncock -turner -turnery -turnhall -turning -turnip -turnkey -turnoff -turnout -turnover -turnpike -turnsole -turnspit -turnstile -turnstone -turntable -turnup -turnverein -turnwrest -turpentine -turpeth -turpitude -turps -turquoise -turret -turrethead -turrilite -turtle -turtleback -turtledove -turtlehead -turtleneck -turtlet -turves -tusche -tushie -tusk -tusker -tussah -tussis -tussock -tussor -tussore -tussur -tutee -tutelage -tutenag -tutiorism -tutor -tutorial -tutsan -tutty -tutu -tuxedo -tuy -tuyere -twaddle -twaddler -twang -twangle -twattle -twayblade -tweed -tweediness -tweeny -tweeter -tweezer -twelve -twelvemo -twelvemonth -twenty -twerp -twibill -twicer -twiddler -twier -twig -twilight -twinberry -twine -twiner -twinflower -twinge -twinkler -twinkling -twirler -twirp -twistability -twister -twite -twitterer -two -twofer -twopence -twosome -tychism -tycoon -tye -tyg -tyke -tyler -tylopod -tylosis -tymbal -tympan -tympanist -tympanites -tympanitis -tympanum -tympany -typ -type -typebar -typecase -typeface -typefoundry -typeholder -typescript -typesetter -typesetting -typewriter -typewriting -typhlitis -typhlology -typhlosis -typhoid -typhoidal -typhoidin -typhon -typhoon -typhus -typicality -typicalness -typicon -typification -typifier -typikon -typist -typo -typographer -typography -typologist -typology -typw -tyramine -tyrannicalness -tyrannicide -tyranniser -tyrannizer -tyrannosaur -tyrannousness -tyranny -tyrant -tyre -tyro -tyrocidine -tyrosinase -tyrosine -tyrothricin -tyum -tzaddik -tzar -tzardom -tzarevich -tzarevna -tzarina -tzarism -tzaritza -tzimmes -tzitzith -u -ubiety -ubiquitarian -uc -udal -udder -udo -udometer -ufology -ugali -ugli -ugliness -ugsomeness -uhlan -uhuru -ui -uintathere -uitlander -ukase -uke -ukiyoe -ukulele -ulan -ulcer -ulceration -ulcerousness -ulema -ulexite -ullage -ulna -ulnoradial -ulotrichy -ulster -ultima -ultimateness -ultimatum -ultimogeniture -ulto -ultracentrifuge -ultrafiche -ultrafilter -ultrafiltrate -ultrafiltration -ultraism -ultraist -ultramarine -ultrametamorphism -ultramicrochemist -ultramicrometer -ultramicroscope -ultramicroscopy -ultramontanism -ultramontanist -ultranationalism -ultranet -ultrasonics -ultrasound -ultrastructure -ultraviolet -ultravirus -ulu -ululation -umbel -umbellet -umbellule -umber -umbilication -umbilicus -umbra -umbrage -umbrageousness -umbrella -umbrette -umiak -umlaut -ump -umpire -umpy -unabidingness -unabjectness -unabortiveness -unabsorptiness -unabstemiousness -unabstractedness -unabusiveness -unacceptability -unacceptableness -unacceptance -unaccessibility -unaccountability -unaccountableness -unaccumulativeness -unaccurateness -unaccustomedness -unacquisitiveness -unacrimoniousness -unadaptabness -unadaptiveness -unadeptness -unadhesiveness -unadmirableness -unadmissibleness -unadorableness -unadornment -unadroitness -unadvantageousness -unadventurousness -unadverseness -unadvisedness -unaffableness -unafflictedness -unaggressiveness -unallusiveness -unalterableness -unamazedness -unambiguousness -unambitiousness -unamiableness -unamicability -unamicableness -unamorousness -unamusingness -unanalagousness -unangularness -unanimity -unanimousness -unanswerableness -unanxiousness -unapologizing -unapparentness -unappealableness -unapplicability -unapplicableness -unappositeness -unappreciativeness -unapprehensiveness -unapproachability -unaptness -unarduousness -unargumentativeness -unartfulness -unassailableness -unassertiveness -unassiduousness -unassumingness -unassuredness -unattainability -unattainableness -unattendance -unattentiveness -unattractiveness -unattributiveness -unau -unaudaciousness -unaustereness -unauthenticalness -unauthenticity -unauthoritativeness -unavailability -unavailableness -unavidness -unavoidability -unavoidableness -unavowableness -unawareness -unawfulness -unawkwardness -unbankableness -unbarbarousness -unbarrenness -unbashfulness -unbearableness -unbeauteousness -unbelief -unbeliever -unbelievingness -unbendingness -unbeneficialness -unbenevolence -unbenignity -unbibulousness -unbiliousness -unbirthday -unblamableness -unblessedness -unblightedness -unblissfulness -unbloodiness -unblushingness -unboastfulness -unboisterousness -unboldness -unbookishness -unboundedness -unbounteousness -unbountifulness -unboyishness -unbraveness -unbrazenness -unbreachableness -unbreakableness -unbriefness -unbrightness -unbrilliantness -unbrittness -unbrokenness -unbrotherliness -unbumptiousness -uncallousness -uncalmness -uncandidness -uncanniness -uncanonisation -uncanonization -uncapaciousness -uncapriciousness -uncaptiousness -uncarnivorousness -uncasualness -uncategoricalness -uncatholicity -uncausativeness -uncautiousness -unceasingness -uncensoriousness -unceremoniousness -uncertainty -unchangeability -unchangefulness -unchangingness -uncharitableness -unchasteness -unchastity -uncheerfulness -uncheeriness -unchildishness -unchivalrousness -unchivalry -unchurlishness -uncia -uncinariasis -uncinus -uncircuitousness -uncircumcision -uncircumspectness -uncivility -uncivilness -unclamorousness -unclannishness -unclarity -unclassifiableness -uncle -uncleanliness -uncleanness -uncleverness -unclipper -uncoarseness -uncognoscibility -uncohesiveness -uncoloredness -uncolouredness -uncomfortableness -uncommonness -uncommunicativeness -uncommutativeness -uncomparableness -uncompassion -uncompassionateness -uncompetitiveness -uncomplaisance -uncompleteness -uncomplexness -uncompliableness -uncomprehensibleness -uncomprehension -uncomprehensiveness -uncompromisingness -uncomputableness -unconcern -uncondensableness -unconditionality -unconditionalness -unconditionedness -unconduciveness -unconformability -unconformity -uncongeniality -uncongruousness -unconscientiousness -unconscionableness -unconsciousness -unconsecration -unconsentaneousness -unconservativeness -unconsolability -unconsolidation -unconstitutionalism -uncontemplativeness -uncontemporaneousness -uncontemptibility -uncontemptibleness -uncontemptuousness -uncontentiousness -uncontestability -uncontestant -uncontiguousness -uncontinence -uncontributiveness -uncontumaciousness -unconventionality -unconvertibility -unconvertibleness -unconvulsiveness -uncooperativeness -uncoordinateness -uncoquettishness -uncordiality -uncordialness -uncorrelativeness -uncorrelativity -uncorruptedness -uncorruptibleness -uncorruptness -uncourageousness -uncourteousness -uncourtesy -uncourtliness -uncouthness -uncovetousness -uncoyness -uncraftiness -uncreativeness -uncreativity -uncreditableness -uncredulousness -uncrudeness -uncrudity -uncruelness -unct -unction -unctuosity -unctuousness -uncubicalness -uncultivation -unculture -uncumbrousness -uncurableness -uncus -undaintiness -undauntedness -undecagon -undeceiver -undeceptiveness -undecorousness -undefeatableness -undefeatedness -undefectiveness -undefendableness -undefensibleness -undefensiveness -undefinedness -undefiniteness -undefinitiveness -undegeneracy -undejectedness -undeleteriousness -undeliberateness -undeliberativeness -undelusiveness -undemocratisation -undemocratization -undemonstrableness -undemonstrativeness -undemureness -undeniableness -undenominational -undependability -undependableness -undepressiveness -underaccident -underachievement -underachiever -underactor -underadjustment -underagency -underagent -underagitation -underaim -underalderman -underbailiff -underbarber -underbeadle -underbeak -underbeam -underbeat -underbelly -underbeveling -underbevelling -underbidder -underbishop -underbishopric -underbodice -underbody -underbottom -underbough -underbox -underbrace -underbranch -underbreeding -underbridge -underbrigadier -underbrush -underbud -underbuilder -underbursar -underbutler -undercap -undercaptain -undercarriage -undercart -undercase -undercasing -undercast -undercause -underceiling -undercellar -underchamber -underchamberlain -underchancellor -underchanter -underchap -underchief -underchin -underchord -undercircle -undercitizen -undercitizenry -undercladding -underclay -underclerk -underclerkship -undercloak -undercloth -underclothing -underclutch -undercoachman -undercoat -undercoating -undercollector -undercommander -undercomment -underconsciousness -underconstable -underconsumption -undercook -undercooper -undercountenance -undercourse -undercourtier -undercrest -undercrier -undercroft -undercrust -undercrypt -undercup -undercurl -undercurrent -undercurve -underdeacon -underdealing -underdevelopement -underdevelopment -underdevil -underdialogue -underdish -underdistinction -underdistributor -underdive -underdoctor -underdog -underdose -underdot -underdown -underdraft -underdrain -underdrainage -underdraught -underdrawers -underdrumming -underedge -underemployment -underengraver -underexposure -undereye -underface -underfaction -underfactor -underfaculty -underfalconer -underfarmer -underfeathering -underfeature -underfeeling -underfelt -underfiend -underfitting -underflame -underflannel -underflood -underflooring -underflow -underfootage -underfootman -underform -underframe -underframework -underfrequency -underfringe -underfrock -underfur -undergamekeeper -undergaoler -undergarb -undergardener -undergarment -undergeneral -undergentleman -undergirth -undergloom -underglow -undergod -undergoer -undergoverness -undergovernment -undergovernor -undergrad -undergraduate -undergraduateship -undergraining -undergrass -undergroan -undergrowl -undergrowth -underguard -underguardian -undergunner -underhabit -underhammer -underhandedness -underhangman -underheaven -underhelp -underhill -underhistory -underhorseman -underhousemaid -underhum -underinstrument -underinsurance -underisiveness -underissue -underivedness -underjacket -underjailer -underjanitor -underjaw -underjobbing -underjoint -underjudge -underjungle -underkeeper -underking -underkingdom -underlaborer -underlabourer -underland -underlash -underlaundress -underlawyer -underlayer -underleather -underlegate -underlessee -underlid -underlier -underlieutenant -underlife -underlift -underlight -underliking -underlimit -underlineation -underlineman -underlinen -underling -underlip -underlock -underlodging -underloft -undermaid -undermaker -undermanager -undermark -undermarshal -undermarshalman -undermaster -undermate -undermeaning -undermediator -undermelody -undermiller -underminer -underminister -underministry -undermist -undermotion -undermount -undermountain -undermuslin -undername -undernote -undernourishment -undernsong -undernurse -undernutrition -underofficer -underopinion -underorganisation -underorganization -underpacking -underpain -underpainting -underpart -underparticipation -underpartner -underpass -underpayment -underpen -underpetticoat -underpier -underpilaster -underpile -underpinning -underplan -underplate -underplot -underply -underpoint -underpopulation -underporch -underporter -underpossessor -underpot -underprefect -underprentice -underpresser -underpressure -underpriest -underprincipal -underprior -underproducer -underproduction -underprompter -underproposition -underpropper -underprospect -underqueen -underranger -underreader -underrealm -underreceiver -underregion -underregistration -underrepresentation -underriddle -underring -underroarer -underrobe -underrogue -underroller -underroof -underroom -underrower -underrule -underruler -undersacristan -undersatisfaction -undersaturation -undersavior -undersawyer -underscheme -underschool -underscoop -underscribe -underscript -underseal -underseam -undersearch -undersecretary -undersecretaryship -undersect -underseller -undersequence -underservant -underservice -underset -undersexton -undersheathing -undershepherd -undersheriff -undershield -undershine -undershire -undershirt -undershoe -undershore -undershrub -underside -undersight -undersignalman -undersigned -undersill -underskin -underskirt -undersky -undersleeve -underslip -undersluice -undersociety -undersoil -undersole -undersorcerer -undersort -undersoul -undersound -undersovereign -undersow -underspan -underspar -underspecies -underspin -underspinner -underspring -undersprout -understaff -understage -understain -understamp -understandability -understandableness -understanding -understandingness -understatement -understay -understem -understep -understeward -understewardship -understimulus -understrain -understrap -understrapper -understream -understress -understrife -understructure -understuffing -undersuit -undersupply -undersupport -undersurface -underswain -underswamp -undersward -underswearer -underswell -undertaker -undertaking -undertalk -undertapster -underteacher -underteller -undertenancy -undertenant -undertenure -underthane -underthief -underthought -underthroating -underthrust -undertide -undertie -undertint -undertitle -undertone -undertow -undertrader -undertreasurer -undertribe -undertrick -undertruck -undertub -undertune -undertunic -undertutor -undertwig -undertyrant -underusher -underutilization -undervalve -undervassal -undervaulting -undervegetation -underventilation -underverse -undervest -undervicar -underviewer -undervillain -undervoice -underwage -underwaist -underwaistcoat -underwarden -underwatcher -underwave -underwaving -underwear -underweft -underwheel -underwing -underwitch -underwood -underworker -underworkman -underworld -underwrap -underwriter -underyield -underyoke -underzeal -underzealot -underzealousness -undescribableness -undescriptiveness -undeservingness -undesigningness -undesirableness -undestructibleness -undestructiveness -undeterminableness -undeterrability -undetestability -undetestableness -undeviousness -undevoutness -undewiness -undexterousness -undextrousness -undiaphanousness -undiffractiveness -undiffusiveness -undigressiveness -undiminishableness -undine -undisputatiousness -undistractedness -undistrustfulness -undiverseness -undivisiveness -undoer -undoing -undolorousness -undoubtfulness -undrossiness -undubiousness -undulance -undulation -undulator -undurability -undurableness -unduteousness -undyingness -uneagerness -unearnestness -unease -uneasiness -uneffectiveness -uneffeness -uneffusiveness -unegregiousness -unelaborateness -unelasticity -unelusiveness -unemotiveness -unemployability -unemployment -unenforceability -unenjoyableness -unenthusiasm -unenviability -unequability -unequableness -unequalness -unequivocalness -unerringness -unetherealness -uneuphoniousness -unevasiveness -unevenness -uneventfulness -unexceptionability -unexceptionableness -unexchangeabness -unexcitability -unexclusiveness -unexhaustion -unexpansiveness -unexpectability -unexpectedness -unexpeditiousness -unexplosiveness -unexpressiveness -unfacetiousness -unfailingness -unfaithfulness -unfamiliarity -unfastener -unfastidiousness -unfavorableness -unfavourableness -unfealty -unfearfulness -unfeasibility -unfeasibleness -unfeebleness -unfeelingness -unfelicitousness -unfeminist -unfertility -unfidelity -unfinishedness -unfirmness -unfitness -unfixity -unfleshliness -unflexibility -unflirtatiousness -unfolder -unfoldment -unfondness -unfoolishness -unforcibleness -unforeseeableness -unforgeability -unforgetfulness -unforgivableness -unformidableness -unfortuitousness -unfortunateness -unfoundedness -unfractiousness -unfragrance -unframableness -unfrankness -unfreakishness -unfriendedness -unfriendliness -unfrigidity -unfrigidness -unfrivolousness -unfrugality -unfrugalness -unfunniness -unfusibility -unfusibness -unfussiness -ung -ungainliness -ungarrulousness -ungaudiness -ungelatinousness -ungenerosity -ungenialness -ungentility -ungentleness -ungenuineness -ungirlishness -unglamorousness -unglutinosity -unglutinousness -ungovernability -ungovernableness -ungraciousness -ungratefulness -ungratitude -ungratuitousness -ungregariousness -ungt -unguardedness -unguent -unguentum -unguis -ungula -ungulate -ungutturalness -unhabitableness -unhairiness -unhandsomeness -unhappiness -unhatchability -unhaziness -unhealthiness -unheaviness -unheedfulness -unheroicalness -unhideousness -unhilariousness -unhingement -unhistory -unholiness -unhomeliness -unhomogeneousness -unhostility -unhumaneness -unhumanness -unhumbleness -unhurriedness -uni -uniatism -unicellularity -unicorn -unicycle -unicyclist -uniface -unification -unifier -uniform -uniformalization -uniformisation -uniformitarianism -uniformity -uniformization -uniformness -unignominiousness -unilateralism -unilaterality -unillustriousness -unimaginableness -unimmaculateness -unimmediateness -unimpeachability -unimpeachableness -unimportunateness -unimpressibility -unincisiveness -uninfectiousness -uninfiniteness -uninflammability -uninhabitability -uninheritability -uniniquitousness -uninjuriousness -uninnateness -uninnocuousness -uninquisitiveness -uninsidiousness -uninstinctiveness -uninsurability -unintellectuality -unintelligibility -unintelligibleness -uninterestedness -unintermediateness -uninterruptedness -unintricateness -uninvincibleness -uninvitingness -union -unionisation -unionism -unionist -unipersonality -unipod -unirascibility -unison -unit -unitarian -unitarianism -unitariness -unitedness -uniter -unity -univ -univalence -universalisation -universaliser -universalism -universalist -universality -universalization -universalizer -universe -universitarian -university -unjocoseness -unjustifiableness -unjustness -unjuvenileness -unkemptness -unkindliness -unknightliness -unknowingness -unknownness -unlaboriousness -unlanguidness -unlaudableness -unlawfulness -unlecherousness -unlegalness -unlevelness -unlicentiousness -unlikableness -unlikeableness -unlikelihood -unlikeness -unlimitedness -unlitigiousness -unliveliness -unloader -unlovableness -unloveableness -unloveliness -unloyalty -unlucidness -unluckiness -unludicrousness -unlugubriousness -unluminousness -unlyricalness -unmagnanimousness -unmaidenliness -unmaker -unmalleability -unmanageableness -unmanfulness -unmanliness -unmannerliness -unmannishness -unmarvellousness -unmarvelousness -unmeaningfulness -unmeaningness -unmeasurableness -unmeasuredness -unmelodiousness -unmercenariness -unmercifulness -unmercurialness -unmeretriciousness -unmeritability -unmeritoriousness -unmethodicalness -unmeticulousness -unmixedness -unmodernity -unmomentousness -unmorality -unmorbidness -unmoroseness -unmusicality -unmusicalness -unmutinousness -unmysteriousness -unmysticalness -unnaturalness -unnavigability -unnavigableness -unneatness -unnecessariness -unnecessitousness -unnefariousness -unneighborliness -unneighbourliness -unnervousness -unness -unneutrality -unniceness -unnimbleness -unnormalness -unnoticeableness -unnumerousness -unobdurateness -unobeseness -unobliviousness -unobsceneness -unobscureness -unobsequiousness -unobtrusiveness -unobviousness -unoccupancy -unodiousness -unodoriferousness -unodorousness -unoffensiveness -unofficiousness -unominousness -unonerousness -unopportuneness -unoppressiveness -unopprobriousness -unopulence -unornateness -unpacker -unpassionateness -unpeevishness -unpendulousness -unpenuriousness -unperceptibleness -unperemptoriness -unperfectiveness -unperfidiousness -unperson -unperspicuousness -unpersuasiveness -unpervasiveness -unperviousness -unpicturesqueness -unpiety -unpitifulness -unplacidness -unplatitudinousness -unplausibleness -unpleasantness -unpliableness -unpliancy -unpliantness -unpoliteness -unpompousness -unponderousness -unpopularity -unpopulousness -unporness -unportentousness -unpositiveness -unpossessiveness -unpracticability -unpracticableness -unpracticality -unpracticalness -unprayerfulness -unprecariousness -unpreciousness -unprecipitateness -unprecipitousness -unpreciseness -unprecociousness -unpredaceousness -unpredaciousness -unpredicableness -unpredictability -unpredictableness -unpreferableness -unprejudicedness -unprematureness -unpreparedness -unpreposterousness -unpresentableness -unpresumptuousness -unpretentiousness -unprettiness -unpreventiveness -unprimitiveness -unprimness -unprintableness -unprivateness -unprodigiousness -unproductiveness -unproductivity -unprofaneness -unprofitability -unprofitableness -unprofuseness -unprogressiveness -unprolifiness -unpromiscuousness -unpromptness -unpropitiousness -unprosaicness -unprosperousness -unprovocativeness -unproximity -unpugnaciousness -unpunctiliousness -unpunctuality -unpunctualness -unpureness -unputridity -unputridness -unqualifiedness -unquerulousness -unquestionableness -unquickness -unrapaciousness -unrapturousness -unrashness -unraveler -unraveller -unravelment -unreadiness -unreality -unreason -unreasonableness -unrebelliousness -unreceptiveness -unreceptivity -unreconcilableness -unrecuperatiness -unreeler -unrefractiveness -unregressiveness -unregretfulness -unrelentingness -unreliability -unreliableness -unremittence -unremittency -unremittingness -unremorsefulness -unremoteness -unremovableness -unrepair -unrepealability -unrepetitiousness -unrepleness -unrepose -unreposefulness -unreprehensibleness -unrepresentativeness -unrepressiveness -unreproachableness -unreproachfulness -unreproductiveness -unrepulsiveness -unrequisiteness -unrequital -unresentfulness -unreserve -unreservedness -unresoluteness -unresourcefulness -unrespectability -unrespectfulness -unresponsibleness -unresponsiveness -unrest -unrestfulness -unrestraint -unretentiveness -unrevengefulness -unreversibleness -unriddler -unridiculousness -unrightfulness -unrigidness -unrigorousness -unriotousness -unripeness -unrobustness -unrove -unruefulness -unruinousness -unruliness -unsacrilegiousness -unsadness -unsafeness -unsafety -unsagaciousness -unsageness -unsalability -unsalaciousness -unsalness -unsalubriousness -unsanctimoniousness -unsanctitude -unsanctity -unsanguinariness -unsanity -unsatiability -unsatiableness -unsatiricalness -unsatisfactoriness -unsaturate -unsaturation -unsavageness -unsavoriness -unsavouriness -unscabrousness -unscarceness -unscornfulness -unscrambler -unsearchableness -unseaworthiness -unseclusiveness -unsecretiveness -unsecureness -unsedateness -unseditiousness -unseducibleness -unseductiveness -unsedulousness -unseeingness -unselfconsciousness -unselfishness -unsensibility -unsensibleness -unsensitiveness -unsensuousness -unsententiousness -unseparableness -unseparateness -unsereneness -unseriousness -unserviceableness -unsettledness -unsettlement -unsevereness -unshadiness -unshapeliness -unsharpness -unshness -unshowiness -unshrewdness -unshrinkability -unshyness -unsickerness -unsightliness -unsimilarity -unsimpleness -unsimultaneousness -unsinfulness -unsingularness -unsinisterness -unsinkability -unsinuousness -unskilfulness -unskillfulness -unslanderousness -unslimness -unslowness -unsluggishness -unslyness -unsmokiness -unsmoothness -unsmugness -unsnobbishness -unsnugness -unsoberness -unsocialism -unsoftness -unsolemnness -unsolicitousness -unsolidarity -unsolidity -unsolidness -unsolubleness -unsolvableness -unsomberness -unsombreness -unsonorousness -unsophisticatedness -unsophistication -unsoporiferousness -unsordidness -unsoreness -unsoulfulness -unsoundness -unsourness -unspaciousness -unsparseness -unspatiality -unspeakableness -unspeciousness -unspeediness -unspiciness -unspirituality -unsplendidness -unspontaneousness -unsportiveness -unspuriousness -unsqueamishness -unstableness -unstaginess -unstaidness -unstatuesqueness -unsteadfastness -unstealthiness -unsternness -unstiffness -unstoniness -unstorminess -unstoutness -unstrangeness -unstrenuousness -unstress -unstrictness -unstubbornness -unstudiousness -unstuffiness -unstupidness -unsturdiness -unstylishness -unsubmissiveness -unsubstantiality -unsubtleness -unsubversiveness -unsuccess -unsuccessfulness -unsuccessiveness -unsufferableness -unsuggestiveness -unsulfureness -unsulkiness -unsulphureness -unsumptuousness -unsuperciliousness -unsuperfluousness -unsuperlativeness -unsupernaturalness -unsuperstitiousness -unsuppleness -unsupportableness -unsureness -unsurliness -unsusceptibility -unsusceptibleness -unsuspectedness -unsuspectfulness -unsuspiciousness -unswervingness -unsynchronousness -untameness -untastefulness -untautness -untemperateness -untempestuousness -untenability -untenableness -untenaciousness -untenacity -untenseness -untensibility -untenuousness -unterseness -unthankfulness -unthickness -unthievishness -unthinkability -unthinkableness -unthinkingness -unthoroughness -unthoughtfulness -unthriftiness -untidiness -untimeliness -untimidness -untimorousness -untolerableness -untorridity -untorridness -untortuousness -untoughness -untowardness -untractability -untractableness -untragicalness -untraitorousness -untranquilness -untransientness -untransitiveness -untransitoriness -untransmutability -untransmutableness -untransparentness -untreacherousness -untremendousness -untremulousness -untriabness -untrimmedness -untriteness -untrustness -untruth -untruthfulness -untumidity -untumidness -untumultuousness -untunableness -untuneableness -unubiquitousness -unulcerousness -ununiqueness -unusableness -unuseableness -unusefulness -unusuality -unusualness -unusuriousness -unuxoriousness -unvacuousness -unvagrantness -unvagueness -unvainness -unvaliantness -unvalorousness -unvaporosity -unvaporousness -unvariableness -unveiling -unvenerability -unvenerableness -unveniality -unvenialness -unvenomousness -unventurousness -unveraciousness -unverboseness -unverdurness -unverifiability -unveritableness -unverminousness -unversatileness -unversatility -unvertiginousness -unvexatiousness -unvicariousness -unviciousness -unvigorousness -unvindictiveness -unviolableness -unvirtuousness -unvisibleness -unvitalness -unvitreosity -unvitreousness -unvituperativeness -unvivaciousness -unvividness -unvociferousness -unvolubleness -unvoluminousness -unvoluptuousness -unvoraciousness -unvulgarness -unwakefulness -unwarranness -unwastefulness -unwatchfulness -unweariedness -unwell -unwhimsicalness -unwholesomeness -unwieldiness -unwildness -unwilfulness -unwillfulness -unwinder -unwisdom -unwiseness -unwishfulness -unwistfulness -unwit -unwittingness -unwoefulness -unwontedness -unworldliness -unworminess -unwrathfulness -unwrongfulness -unyieldingness -unyouthfulness -up -upas -upaya -upbearer -upbeat -upbringing -upbuilder -upburst -upcropping -updater -updraft -upgrader -upgrowth -upheaval -upheaver -upholder -upholsterer -upholstery -uphroe -upkeep -upland -uplander -uplifter -upperclassman -upraiser -uprising -uproar -uproariousness -uprootedness -uprooter -uprush -upsetting -upshot -upside -upsilon -upstandingness -upstart -upstartness -upstroke -upsweep -upswing -uptake -upthrow -upthrust -uptowner -uptrend -upwardness -ur -uracil -uraemia -uraeus -uralite -uranalysis -uranide -uraninite -uranism -uranite -uranium -uranographer -uranographist -uranography -uranology -uranometry -uranyl -urari -urate -urbaneness -urbanisation -urbanism -urbanist -urbanite -urbanity -urbanization -urbiculture -urchin -urd -urea -urease -uredinium -uredium -uredo -uredosorus -uredospore -ureide -uremia -urena -ureter -ureterolithotomy -ureterostomy -urethan -urethane -urethra -urethrectomy -urethritis -urethroscope -urethroscopy -urethrostomy -urgency -urger -urial -uricolysis -uridine -urinal -urinalysis -urinary -urination -urine -urn -urnfield -urning -urochord -urochrome -urodele -urogomphus -urolith -urology -uropod -uropygium -uroscopy -urostyle -uroxanthin -urticaria -urtication -urus -urushiol -usage -usance -usefulness -uselessness -user -ushabti -usher -usherette -usquebaugh -ustulation -usu -usufruct -usurer -usuriousness -usurpation -usurper -usury -usw -ut -uta -ute -utend -utensil -uteralgia -uterus -utilidor -utilitarianism -utility -utilization -utilizer -utopianism -utricle -utriculitis -utterance -utterer -utterness -uvala -uvarovite -uvea -uveitis -uvula -uvulatomy -uvulectomy -uvulitis -uvulotomy -uxoricide -uxoriousness -v -va -vaad -vac -vacancy -vacantness -vacation -vacationist -vaccination -vaccinationist -vaccinator -vaccine -vaccinia -vaccinization -vacherin -vacillation -vacillator -vacua -vacuity -vacuole -vacuousness -vacuum -vagabond -vagabondage -vagary -vagrancy -vagrant -vagueness -vaguio -vagus -vahana -vaingloriousness -vainglory -vair -vaivode -vajra -vakeel -valance -vale -valediction -valedictorian -valedictory -valence -valency -valentine -valerian -valet -valeta -valetudinarian -valetudinarianism -valetudinary -valiantness -validation -validity -validness -valine -valise -vallation -vallecula -valley -valonia -valor -valorisation -valorization -valorousness -valour -valse -valuableness -valuation -valuator -value -valuelessness -valuer -valuta -valve -valvelet -valvule -valvulitis -vambrace -vamp -vamphorn -vampire -vampirism -van -vanadate -vanadinite -vanadium -vanaspati -vanda -vandal -vandalism -vane -vang -vanguard -vanguardist -vanilla -vanillin -vanisher -vanishment -vanity -vanman -vanquisher -vanquishment -vantage -vapidity -vapidness -vapor -vaporescence -vaporetto -vaporimeter -vaporishness -vaporization -vaporizer -vaporosity -vaporousness -vapour -vapourimeter -vapouriser -vapourishness -vapourization -vaquero -var -vara -varactor -varangian -varec -vargueno -variability -variableness -variance -variate -variation -varicella -varicocele -varicosis -varicosity -varicotomy -variedness -variegation -varier -variety -varindor -vario -variocoupler -variola -variolation -variole -variolite -variolosser -variometer -variscite -varistor -varitypist -varix -varlet -varletry -varmannie -varmint -varna -varnish -varnisher -varsity -varve -vas -vascularity -vascularization -vasculum -vase -vasectomy -vasoconstriction -vasoconstrictor -vasodilatation -vasodilator -vasoinhibitor -vasoligation -vasoligature -vasomotion -vasopressin -vasopressor -vasostimulant -vasotribe -vassal -vassalage -vastitude -vastity -vastness -vastus -vat -vaticide -vaticination -vaticinator -vaudeville -vaudevillian -vault -vaulter -vaulting -vaunter -vav -vavasor -vavasory -vaward -vb -vd -veal -vealer -vection -vector -vectorcardiogram -vectorcardiography -vedalia -vedette -veery -veg -vegan -vegetable -vegetarian -vegetarianism -vegetation -vehemence -vehicle -vehiculum -veil -veiling -vein -veining -veinlet -veinstone -veinule -vela -velamen -velarium -velarization -velation -veld -veldskoen -veleta -veliger -velitation -velleity -vellication -vellum -velocipede -velocity -velodrome -velour -velours -velout -velouta -velum -velure -velvet -velveteen -velvetiness -vena -venality -venation -vendace -vendee -vender -vendetta -vendettist -vendibility -vendibleness -vendition -vendor -vendue -veneer -veneerer -veneering -venepuncture -veneration -venerativeness -venerator -venereologist -venereology -venerer -venery -venesection -vengeance -vengefulness -veniality -venialness -venin -venipuncture -venireman -venisection -venison -venom -venomness -venomousness -venosity -venousness -vent -ventage -ventail -venter -ventilation -ventilator -ventosity -ventricle -ventricosity -ventriculogram -ventriculography -ventriculopuncture -ventriculus -ventriloquism -ventriloquist -ventrotomy -venturesomeness -venturousness -venue -venule -veraciousness -veracity -veranda -veratridine -veratrine -verb -verbalisation -verbaliser -verbalism -verbalist -verbality -verbalization -verbalizer -verbena -verbiage -verbid -verbification -verbosity -verdancy -verderer -verderership -verdict -verdigris -verdin -verdite -verditer -verdure -verdurousness -verge -vergeboard -verger -verglas -veridicality -verifiability -verifiableness -verifier -verisimilitude -verism -verismo -verist -veritableness -veritas -verity -verjuice -verkrampte -verligte -vermeil -vermicelli -vermicide -vermiculation -vermiculite -vermifuge -vermilion -vermin -vermination -verminousness -vermis -vermouth -vernacularisation -vernacularism -vernacularization -vernalisation -vernalization -vernation -vernicle -vernier -vernissage -veronica -verriare -verruca -verrucoseness -verrucosity -vers -versant -versatileness -versatility -verse -verset -versicle -versiera -versification -versifier -versine -version -verso -verst -vert -vertebra -vertebrate -vertebration -vertex -vertices -verticil -verticillaster -verticillation -verticity -vertigo -vertu -vervain -verve -vervet -vesica -vesicant -vesication -vesicle -vesiculation -vesp -vesper -vesperal -vespers -vespertide -vespiary -vespid -vessel -vest -vesta -vestiary -vestibule -vestige -vestigium -vesting -vestment -vestry -vestryman -vesture -vesuvian -vesuvianite -vet -vetch -vetchling -veter -veteran -veterinarian -vetiver -veto -vetoer -vexation -vexatiousness -vexedness -vexer -vexillary -vexillology -vexillum -vg -viability -viaduct -vial -viand -viaticum -viator -vibist -vibraculum -vibraharp -vibrance -vibrancy -vibraphone -vibraphonist -vibratile -vibration -vibrato -vibrio -vibriosis -vibrissa -vibrometer -viburnum -vicar -vicarage -vicarate -vicariate -vicariism -vicariousness -vice -vicegerency -vicegerent -viceregency -vicereine -viceroy -viceroyalty -vichyssoise -vicinage -vicinity -vicissitude -vicomte -vicomtesse -victim -victimhood -victimisation -victimiser -victimization -victimizer -victor -victoria -victoriate -victorine -victoriousness -victory -victress -victrix -victualage -victualer -victualler -vicuua -video -videodisk -videophone -vidette -vidicon -vidya -vier -view -viewer -viewfinder -viewing -viewpoint -vigia -vigil -vigilance -vigilante -vigilantism -vigilantness -vignette -vignetter -vignetting -vignettist -vigor -vigorish -vigorousness -vigour -vihara -vihuela -vil -vilayet -vileness -vilification -vilifier -villa -villadom -village -villager -villain -villainage -villainess -villainousness -villainy -villanella -villanelle -villein -villeinage -villosity -villus -vim -vimana -vimen -vimpa -vina -vinaigre -vinaigrette -vinasse -vincibility -vincibleness -vinculum -vindication -vindicator -vindictiveness -vine -vined -vinedresser -vinegar -vinegarette -vinegarroon -vineland -vinery -vineyard -viniculture -viniculturist -vinificator -vino -vinometer -vinosity -vintage -vintager -vintner -vinum -vinyl -vinylacetylene -vinylation -vinylbenzene -vinylethylene -vinylidene -viol -viola -violability -violableness -violence -violet -violin -violinist -violinmaker -violist -violoncello -violone -viosterol -viper -virago -virelay -viremia -vireo -virescence -virga -virgin -virginity -virginium -virgule -virial -viridescence -viridian -viridity -virilism -virility -virl -virology -virosis -virtu -virtuality -virtue -virtuelessness -virtuosity -virtuoso -virtuousness -virucide -virulence -virus -vis -visa -visage -viscacha -viscerotonia -viscerotropic -viscidity -viscidness -viscometer -viscometry -viscose -viscosity -viscount -viscountcy -viscountess -viscounty -viscousness -viscus -vise -visibility -vision -visionariness -visitant -visitation -visitor -visor -vista -visualisation -visualiser -visualist -visualization -visualizer -vita -vitalisation -vitaliser -vitalism -vitality -vitalization -vitalizer -vitalness -vitamin -vitascope -vitellin -vitellus -vitiation -vitiator -viticetum -viticulture -vitiligo -vitrain -vitrescence -vitrics -vitrifiability -vitrification -vitrine -vitriol -vitriolization -vitrum -vitta -vittle -vituperation -vituperator -vivaciousness -vivacity -vivandi -vivandiere -vivarium -vives -vividity -vividness -viviparism -viviparity -viviparousness -vivisection -vivisectionist -vivisector -vixen -vixenishness -viz -vizard -vizcacha -vizier -vizierate -viziership -vizirate -vizirship -vizor -vizsla -vlei -vo -voc -vocab -vocable -vocabulary -vocalise -vocalism -vocalist -vocality -vocalization -vocalizer -vocalness -vocat -vocation -voces -vociferance -vociferation -vociferator -vociferousness -vodka -vogesite -vogue -voice -voicedness -voicefulness -voicelessness -voiceprint -voidance -voider -voidness -voile -voiture -volatileness -volatilisation -volatiliser -volatility -volatilizer -volcanicity -volcanism -volcano -volcanologist -volcanology -vole -volition -volley -volleyball -volleyer -volost -volplanist -vols -volt -volta -voltage -voltaism -voltameter -voltammeter -voltmeter -volume -volumeter -voluminosity -voluminousness -voluntariness -voluntarism -voluntaryism -voluntaryist -volunteer -voluptuary -volution -volva -volvelle -volvox -volvulus -vomer -vomica -vomito -vomitorium -vomiturition -vomitus -voodoo -voodooist -voraciousness -voracity -vorspiel -vortex -vorticella -vortices -vorticism -vorticity -votary -vote -voter -votress -voucher -vouchsafement -vouge -voussoir -vow -vowel -vower -vox -voyage -voyager -voyageur -vp -vr -vraisemblance -vrille -vss -vug -vulcanisation -vulcaniser -vulcanism -vulcanist -vulcanite -vulcanization -vulcanizer -vulcanologist -vulcanology -vulg -vulgarian -vulgarisation -vulgariser -vulgarism -vulgarity -vulgarness -vulgate -vulgus -vulpicide -vulpinite -vulsinite -vulture -vv -vvll -w -wab -wabbler -wack -wacke -wackiness -wad -wadder -wadding -wader -wadi -wadmal -wadna -wadset -wadsetter -wae -wafer -waff -waffie -waffle -waffness -waftage -wafter -wafture -wage -wagelessness -wager -wageworker -wagga -waggery -waggishness -waggon -waggonage -waggoner -waggonette -waggonload -wagon -wagonage -wagoner -wagonette -wagonload -wagtail -wahine -wahoo -waif -wailer -wain -wainage -wainrope -wainwright -waist -waistband -waistcloth -waistcoat -waistcoating -waister -waistline -waiter -waitress -waiver -waka -wake -wakefulness -waken -waker -wakerifeness -wakizashi -waldglas -waldgrave -wale -waling -walkabout -walkaway -walker -walkout -walkover -walkway -wall -walla -wallaba -wallaby -wallah -wallaroo -wallboard -wallet -walleye -wallflower -walloper -walloping -wallower -wallpaper -wallydrag -walnut -walrus -waltz -waltzer -wambliness -wame -wamefou -wammus -wampum -wampumpeag -wampus -wamus -wand -wanderer -wanderlust -wanderoo -wandoo -wangler -wanigan -wanion -wantage -wanter -wantlessness -wapatoo -wapentake -wapinschaw -wapiti -wappenshaw -wapperjaw -waragi -waratah -warb -warbird -warbler -ward -warden -wardenry -wardenship -warder -wardership -wardmote -wardress -wardrobe -wardroom -wardship -ware -warehouse -warehouseman -wareroom -warfare -warfarin -warhead -warhorse -wariness -warison -wark -warlessness -warlock -warlord -warmer -warmheartedness -warmness -warmonger -warmongering -warmouth -warmth -warmthlessness -warner -warning -warpage -warpath -warper -warplane -warragal -warrant -warrantableness -warrantee -warranter -warrantor -warranty -warred -warren -warrener -warrigal -warring -warrior -warrty -warsaw -warship -warsle -warsler -warstler -wart -wartime -wase -washability -washaway -washbasin -washboard -washbowl -washcloth -washday -washer -washerman -washerwoman -washery -washin -washiness -washing -washout -washrag -washroom -washstand -washtub -washwoman -wasp -waspiness -waspishness -wassail -wassailer -wastage -wastebasket -wasteland -wastelot -wasteness -wastepaper -wastepile -wastery -wasteweir -wastingness -wastrel -wastry -wat -watap -watchband -watchcase -watchdog -watcher -watchfulness -watchlessness -watchmaker -watchman -watchout -watchstrap -watchtower -watchword -water -waterage -waterbrain -waterbuck -watercolor -watercolorist -watercolourist -watercourse -watercraft -watercress -waterdog -waterer -waterfall -waterfowl -waterfront -wateriness -watering -waterishness -waterleaf -waterlessness -waterman -watermanship -watermark -watermelon -waterscape -watershed -waterside -watersider -waterskier -waterspout -watertightness -waterway -waterweed -waterworks -watt -wattage -wattle -wattlebird -wattmeter -waucht -waught -waveband -waveform -waveguide -wavelength -wavelet -wavellite -wavemeter -waveoff -wavey -waviness -waw -wawa -wax -waxberry -waxbill -waxer -waxiness -waxplant -waxweed -waxwing -waxwork -way -waybill -wayfarer -waylayer -wayleave -ways -wayside -wayzgoose -wb -wc -wd -weakener -weakfish -weakheartedness -weakishness -weakliness -weakling -weakness -weal -weald -wealth -wealthiness -weanedness -weaner -weanling -weapon -weaponeer -weaponry -weaponshaw -wearability -wearer -weariness -wearisomeness -weasand -weasel -weason -weather -weatherability -weatherboard -weatherboarding -weathercock -weatherer -weatherfish -weatherglass -weathering -weatherliness -weatherman -weathertightness -weaver -weaverbird -weazand -web -webbing -weber -webfoot -webster -websterite -webwheel -webworm -wedding -wedeling -wedeln -wedge -wedlock -weed -weeder -weediness -weedkiller -week -weekday -weekend -weekender -weeknight -weenie -weeny -weeper -weepiness -weever -weevil -weevily -weft -weigela -weighbridge -weigher -weight -weighter -weightiness -weighting -weightlessness -weightlifting -weir -weirdie -weirdness -weirdo -weirdy -weisenheimer -wejack -weka -welcher -welcomeness -weldability -welder -weldment -weldor -welfare -welfarism -welkin -wellbeing -welldoer -welldoing -wellhead -wellhole -wellhouse -wellingtonia -wellness -wellpoint -wellsite -wellspring -welsher -welt -welterweight -welwitschia -wen -wench -wencher -wenchman -wensleydale -wentletrap -weregild -werewolf -wergild -wernerite -werste -werwolf -weskit -wessand -west -westerliness -westerner -westernisation -westernism -westing -westwork -wether -wetness -wettability -wey -wf -whacker -whale -whaleback -whaleboat -whalebone -whaler -whaling -wham -whammed -whamming -whangdoodle -whangee -whapper -whare -wharf -wharfage -wharfie -wharfinger -wharve -whatnot -whaup -wheal -wheat -wheatear -wheatgrass -wheatworm -wheel -wheelbarrow -wheelbarrower -wheelbase -wheelchair -wheeler -wheelhouse -wheelie -wheeling -wheelman -wheelsman -wheelwork -wheelwright -wheezer -wheeziness -whelk -whelp -wherefore -wherewithal -wherry -whetstone -whetter -whey -wheyface -wheyishness -whf -whidah -whiff -whiffer -whiffet -whiffler -whiffletree -whigmaleerie -whigmaleery -whim -whimbrel -whimperer -whimsey -whimsicality -whin -whinchat -whine -whinstone -whipcord -whiplash -whipper -whippersnapper -whippet -whipping -whippletree -whippoorwill -whipray -whips -whipsaw -whipstall -whipstitch -whipstock -whiptail -whipworm -whirlabout -whirlicote -whirligig -whirlpool -whirlwind -whirly -whirlybird -whish -whisker -whiskey -whisky -whisperer -whispering -whist -whistler -whistling -whit -whiteacre -whitebait -whitebeam -whitebeard -whitecap -whitecup -whitedamp -whiteface -whitefish -whitefly -whitener -whiteness -whitening -whitesmith -whitethorn -whitethroat -whitewall -whitewash -whitewing -whitewood -whitey -whiting -whitishness -whitleather -whitlow -whitlowwort -whitrack -whittler -whity -whodunit -wholefood -wholeheartedness -wholesale -wholesaler -wholesomeness -wholism -whomp -whooper -whoosh -whoosis -whoosy -whopper -whorl -whort -whortleberry -whosis -whr -whse -whsle -whydah -wi -wick -wickedness -wicker -wickerwork -wicket -wicketkeeper -wicking -wickiup -wickthing -wicopy -widder -widdy -widener -widgeon -widget -widgie -widow -widower -width -wielder -wiener -wienie -wife -wifedom -wifehood -wifelessness -wig -wigan -wigeon -wiggery -wigging -wiggler -wight -wigwagger -wigwam -wikiup -wildcatter -wildebeest -wilderness -wildfire -wildfowl -wilding -wildlife -wildling -wildness -wildwood -wile -wilfulness -wiliness -willemite -willer -willet -willingness -williwaw -willow -willower -willowherb -willpower -willy -wimble -wimple -wincey -winceyette -winch -wincher -winchester -wind -windage -windbag -windbaggery -windbreak -windburn -windcheater -windchest -windedness -winder -windfall -windflaw -windflower -windgall -windhover -windiness -winding -windingness -windjammer -windlass -windle -windlestraw -windmill -window -windowlight -windowpane -windowsill -windpipe -windrow -windrower -windsail -windscreen -windshield -windsock -windstorm -windsucker -windup -windwardness -windway -wine -wineberry -winebibber -wineglass -wineglassful -winegrower -winegrowing -winepress -winery -wineshop -wineskin -wing -wingback -wingding -wingedness -winger -winglessness -winglet -wingover -wingspan -wingspread -winker -winkle -winklehawk -winlestrae -winner -winningness -wino -winsomeness -winter -winterberry -winterbourne -winterer -wintergreen -winterization -wintertide -wintertime -wintle -wintriness -winze -wiper -wire -wiredancer -wiredancing -wirehair -wireless -wirelessness -wireman -wirepuller -wirepulling -wirer -wiresonde -wiretap -wiretapper -wirewalker -wirework -wireworks -wireworm -wiring -wisdom -wiseacre -wisecrack -wisenheimer -wisent -wishbone -wishfulness -wisp -wispiness -wisteria -wistfulness -wit -witan -witch -witchcraft -witchery -witchhood -wite -witenagemot -withamite -withdrawal -withdrawer -withdrawingness -withdrawnness -withe -witheredness -witherer -witherite -withholder -withstander -withstandingness -withy -witlessness -witling -witloof -witness -wittedness -witticism -wittiness -wittol -wivern -wives -wiz -wizard -wizardry -wk -wkly -wl -wmk -wo -woad -woadwaxen -woald -wobbegong -wobbler -wodge -woe -woefulness -wofulness -wog -woggle -wok -wold -wolf -wolfer -wolffish -wolfhound -wolfishness -wolfman -wolfram -wolframate -wolframite -wolframium -wolfsbane -wollastonite -wolly -wolver -wolverine -wolves -woman -womanhood -womanishness -womanizer -womankind -womanliness -womanness -womanpower -womb -wombat -women -womenfolk -womera -wommera -wonder -wonderberry -wonderer -wonderfulness -wonderland -wonderment -wonderwork -wondrousness -wonna -wont -wontedness -wood -woodbine -woodborer -woodbox -woodcarving -woodchat -woodchopper -woodchopping -woodchuck -woodcock -woodcraft -woodcreeper -woodcut -woodcutter -woodcutting -woodenhead -woodenness -woodenware -woodgrouse -woodhewer -woodhouse -woodiness -woodland -woodlark -woodlouse -woodman -woodmancraft -woodnote -woodpecker -woodpile -woodprint -woodruff -woodrush -woodscrew -woodshed -woodsia -woodsman -woodturner -woodwaxen -woodwork -woodworker -woodworking -woodworm -woof -woofer -wool -wooler -woolfell -woolgatherer -woolgathering -woolgrower -woolliness -woollybutt -woolpack -woolsack -woolshed -woomera -woomerang -woorali -woosh -wootz -wooziness -wop -word -wordage -wordbook -wordbreak -wordiness -wording -wordlessness -wordplay -wordsmith -work -workability -workableness -workbag -workbench -workbook -workday -worker -workhorse -workhouse -working -workingman -workingwoman -worklessness -workload -workman -workmanship -workout -workpiece -workroom -workshop -worktable -workweek -workwoman -world -worldliness -worldling -worm -wormcast -wormer -wormfish -wormhole -worminess -wormroot -worms -wormseed -wormwood -wornness -worrier -worriment -worrywart -worseness -worset -worshipfulness -worssett -worsted -wort -worthiness -worthlessness -wound -woundwort -wourali -wowser -wpm -wr -wrack -wraith -wrangler -wrapper -wrapping -wrasse -wrath -wrathiness -wreaker -wreath -wreather -wreckage -wrecker -wreckfish -wren -wrencher -wrester -wrestler -wrestling -wretch -wretchedness -wriggler -wrigglework -wright -wringer -wrinkle -wrinkledness -wrist -wristband -wristlet -wristlock -wristwatch -writ -writer -writher -writing -wrongdoer -wrongdoing -wronger -wrongfulness -wrongheadedness -wrongness -wrybill -wryneck -wryness -wulfenite -wunderkind -wurley -wurst -wurtzilite -wurtzite -wus -wye -wynd -wynn -wyvern -x -xalostockite -xanthate -xanthation -xanthein -xanthene -xanthin -xanthine -xanthochroism -xanthoma -xanthophyll -xanthosiderite -xat -xc -xcl -xd -xebec -xenia -xenocryst -xenodiagnosis -xenodocheion -xenogamy -xenogenesis -xenoglossia -xenolith -xenon -xenophile -xenophobe -xenophobia -xeroderma -xerography -xerophagy -xerophthalmia -xerophyte -xerophytism -xerosere -xerosis -xi -xiphisternum -xiphosuran -xis -xoanon -xr -xw -xylan -xylem -xylene -xylidine -xylo -xylocarp -xylograph -xylographer -xylography -xylol -xylophage -xylophone -xylose -xylostroma -xylotomist -xylotomy -xylyl -xyst -xyster -xystum -y -yabby -yacht -yachting -yachtmanship -yachtsmanship -yachtswoman -yack -yad -yaffle -yahoo -yahooism -yak -yakka -yam -yamen -yapok -yapon -yapp -yapper -yarak -yarborough -yard -yardage -yardang -yardarm -yardbird -yardman -yardstick -yarmulke -yarn -yarovization -yarraman -yarrow -yashmak -yataghan -yate -yaud -yaupon -yautia -yawl -yawmeter -yawner -yawper -yawweed -yazata -yd -yds -yealing -yeanling -year -yearbook -yearling -yearner -yearning -yeast -yeastiness -yegg -yeggman -yeldring -yelk -yellow -yellowback -yellowbark -yellowbelly -yellowbird -yellowhammer -yellowlegs -yellowness -yellowtail -yellowthroat -yellowweed -yellowwood -yelper -yen -yenta -yeo -yeoman -yeomanry -yerba -yeshiva -yesterday -yesterdayness -yestereve -yesterevening -yesternight -yesternoon -yesterweek -yesteryear -yeti -yett -yew -yi -yid -yieldingness -yike -yippie -ylem -yob -yod -yodeler -yodeller -yodle -yodler -yoga -yogh -yoghurt -yogi -yogini -yogurt -yohimbine -yoke -yokefellow -yokel -yolk -yoni -yonnie -yore -yorker -youngberry -youngling -youngster -younker -yous -youth -youthfulness -yperite -yrs -ytterbia -ytterbite -ytterbium -yttria -yttrium -yttrotantalite -yuan -yucca -yulan -yule -yuletide -yuquilla -yurt -z -zabaglione -zacatun -zack -zaddik -zaffer -zaibatsu -zaire -zakah -zakat -zakuska -zamarra -zamia -zamindar -zamindari -zander -zaniness -zanthoxylum -zanyism -zapateado -zaptiah -zaratite -zareba -zarf -zarzuela -zastruga -zax -zayin -zeal -zealot -zealotry -zealousness -zebec -zebra -zebrafish -zebrass -zebrawood -zebu -zecchino -zed -zedoary -zee -zein -zemindar -zemstvo -zenana -zendo -zenith -zeolite -zephyr -zeppelin -zero -zeroed -zeroing -zest -zestfulness -zeta -zeugma -zho -zibeline -zibet -ziff -zigzag -zigzaggedness -zigzagger -zila -zillion -zimarra -zinc -zincate -zincite -zinckenite -zincograph -zincographer -zincography -zinfandel -zing -zingara -zingaro -zinjanthropus -zinkenite -zinnia -zinnwaldite -zip -zipper -zircalloy -zircon -zirconate -zirconia -zirconium -zirconyl -zither -zitherist -zithern -zittern -zizith -zloty -zo -zoa -zoaea -zoanthropy -zodiac -zoea -zoetrope -zogan -zoisite -zombi -zombie -zonation -zonda -zone -zonetime -zonite -zonule -zoo -zoochem -zoochemistry -zoochore -zoogeog -zoogeography -zoogloea -zoografting -zoographer -zoography -zooid -zool -zoolater -zoolatry -zoologist -zoology -zoometry -zoomorph -zoomorphism -zoon -zoonosis -zoophile -zoophilism -zoophobia -zoophorus -zoophyte -zooplankton -zooplasty -zoosperm -zoosporangium -zoospore -zoosterol -zootechnics -zootomy -zootoxin -zorilla -zoster -zoysia -zucchetto -zucchini -zugzwang -zwieback -zwitterion -zygapophysis -zygoma -zygophyte -zygosis -zygospore -zygote -zygotene -zymase -zymogen -zymogenesis -zymology -zymolysis -zymometer -zymosis diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/generator/fakes/fake_word_generator.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/generator/fakes/fake_word_generator.go deleted file mode 100644 index e195506..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/generator/fakes/fake_word_generator.go +++ /dev/null @@ -1,43 +0,0 @@ -// This file was generated by counterfeiter -package fakes - -import ( - "sync" - - "github.com/cloudfoundry/cli/words/generator" -) - -type FakeWordGenerator struct { - BabbleStub func() string - babbleMutex sync.RWMutex - babbleArgsForCall []struct{} - babbleReturns struct { - result1 string - } -} - -func (fake *FakeWordGenerator) Babble() string { - fake.babbleMutex.Lock() - fake.babbleArgsForCall = append(fake.babbleArgsForCall, struct{}{}) - fake.babbleMutex.Unlock() - if fake.BabbleStub != nil { - return fake.BabbleStub() - } else { - return fake.babbleReturns.result1 - } -} - -func (fake *FakeWordGenerator) BabbleCallCount() int { - fake.babbleMutex.RLock() - defer fake.babbleMutex.RUnlock() - return len(fake.babbleArgsForCall) -} - -func (fake *FakeWordGenerator) BabbleReturns(result1 string) { - fake.BabbleStub = nil - fake.babbleReturns = struct { - result1 string - }{result1} -} - -var _ generator.WordGenerator = new(FakeWordGenerator) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/words.go b/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/words.go deleted file mode 100644 index 789fc57..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/words.go +++ /dev/null @@ -1,28992 +0,0 @@ -package words - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "strings" -) - -func bindata_read(data []byte, name string) ([]byte, error) { - gz, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - return buf.Bytes(), nil -} - -func words_dict_adjectives_txt() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x6c, 0x7d, - 0xe9, 0x9a, 0xab, 0x3a, 0xcf, 0xec, 0xff, 0xf7, 0x2e, 0x13, 0xa0, 0x13, - 0xef, 0x06, 0xcc, 0x36, 0x90, 0xee, 0xf4, 0xd5, 0x1f, 0x95, 0xaa, 0x24, - 0x93, 0xfd, 0x9d, 0x67, 0xad, 0x8e, 0x4b, 0xc6, 0xf3, 0x20, 0xcb, 0x93, - 0x7c, 0xbb, 0xdf, 0x86, 0xa3, 0xac, 0xb7, 0xf9, 0x7f, 0x86, 0xca, 0x3e, - 0x8d, 0x30, 0xd7, 0xb1, 0xae, 0xb7, 0xfb, 0x3c, 0x05, 0xa6, 0xad, 0x3e, - 0xee, 0x65, 0x80, 0x71, 0x84, 0x83, 0xdf, 0xe2, 0x9e, 0xcd, 0x86, 0x60, - 0x2c, 0x83, 0x3e, 0x01, 0xad, 0x87, 0xc0, 0x51, 0x5e, 0x6e, 0x57, 0x17, - 0xc5, 0xe6, 0xa8, 0x9e, 0x3b, 0xe0, 0x39, 0x4c, 0xee, 0x70, 0x6a, 0xed, - 0x96, 0xe0, 0x28, 0x95, 0x2e, 0xa7, 0x7d, 0xa7, 0xe7, 0xe9, 0xcd, 0xaf, - 0x4f, 0x0f, 0x84, 0x91, 0x3c, 0x6b, 0x6b, 0xf4, 0x5c, 0xc6, 0xb2, 0x3e, - 0x60, 0x8a, 0xac, 0x8f, 0x69, 0x9d, 0x0e, 0x4f, 0x6d, 0xa9, 0x69, 0xb6, - 0xba, 0x3d, 0x89, 0x5b, 0x2b, 0x07, 0xc3, 0x23, 0x54, 0x0a, 0xff, 0x99, - 0x86, 0x43, 0x86, 0x2c, 0x4e, 0x4b, 0x4b, 0x6d, 0x6f, 0x83, 0x33, 0x1c, - 0x79, 0x9a, 0xe6, 0x70, 0x3e, 0xf3, 0x67, 0x7b, 0xde, 0x1a, 0x33, 0x63, - 0xd8, 0x22, 0xa3, 0xa3, 0xa9, 0xf9, 0xef, 0x8e, 0x00, 0xe7, 0x93, 0xe9, - 0x9a, 0xcf, 0xfd, 0xe9, 0x86, 0xe7, 0xcf, 0x83, 0x5d, 0x6b, 0x5b, 0xdc, - 0x43, 0x9d, 0xcb, 0xfe, 0x54, 0x98, 0x86, 0xbb, 0x8b, 0x4b, 0x86, 0x6b, - 0xa3, 0xd3, 0x56, 0x1e, 0x2a, 0xc9, 0xda, 0x8e, 0xf2, 0x75, 0x1b, 0x94, - 0x6f, 0x50, 0xb5, 0x7f, 0xf0, 0x44, 0xd6, 0x73, 0xf6, 0x3c, 0xd7, 0xd7, - 0xf4, 0xb0, 0x64, 0xae, 0xa8, 0xc8, 0xfa, 0x6b, 0x3f, 0xed, 0x36, 0xb2, - 0x08, 0xac, 0xdc, 0x87, 0x67, 0xb9, 0x1d, 0x70, 0xdd, 0xca, 0xf8, 0x50, - 0x64, 0x80, 0xd3, 0x15, 0xc3, 0x67, 0xab, 0xf9, 0xd9, 0x90, 0xa2, 0x68, - 0xe7, 0x86, 0x70, 0xf6, 0xc1, 0x6a, 0xcb, 0x5d, 0xed, 0x4c, 0xce, 0x5e, - 0xd6, 0xe3, 0xc9, 0x96, 0x21, 0xb8, 0x02, 0x56, 0xcb, 0xff, 0x14, 0xa0, - 0xec, 0xac, 0x1e, 0x27, 0x58, 0xd2, 0x06, 0x5f, 0x8a, 0x04, 0x50, 0x61, - 0x59, 0xbe, 0x04, 0xda, 0x3d, 0xbf, 0xb6, 0x3b, 0xe3, 0x03, 0xc8, 0xaf, - 0x6c, 0x0a, 0x86, 0xac, 0x32, 0xea, 0x32, 0x1d, 0x4d, 0x11, 0x80, 0xf6, - 0xf4, 0xee, 0xc7, 0xb4, 0x14, 0xd6, 0x98, 0xc1, 0xf5, 0xe8, 0xb8, 0x3d, - 0x14, 0x8c, 0xc1, 0x3d, 0x1c, 0x97, 0x35, 0x2c, 0xdb, 0x6d, 0xe8, 0x80, - 0x31, 0x3b, 0x8c, 0x42, 0x17, 0x25, 0x7f, 0xed, 0xdc, 0x1d, 0x9c, 0x0d, - 0x2e, 0x55, 0x0d, 0x56, 0x01, 0xcc, 0xc7, 0xb9, 0x2b, 0x17, 0xa7, 0x22, - 0x3a, 0x8f, 0x83, 0x29, 0x3f, 0xff, 0xfe, 0xec, 0xf7, 0xbd, 0xb3, 0x5d, - 0xbc, 0xf7, 0x1d, 0xe6, 0x70, 0x1b, 0x2d, 0xd1, 0x43, 0x02, 0xda, 0x59, - 0xa1, 0xde, 0x86, 0xc9, 0x93, 0xef, 0x84, 0x25, 0x55, 0xa8, 0x0e, 0xb7, - 0xb6, 0xf5, 0x0f, 0x75, 0x98, 0x6f, 0xe3, 0x85, 0x2c, 0x63, 0xa0, 0xcd, - 0xb2, 0xfa, 0x7e, 0x78, 0xd5, 0xd0, 0xe2, 0x60, 0x2c, 0x80, 0x74, 0xbf, - 0xad, 0x85, 0xb1, 0xb5, 0xb1, 0xdc, 0xfc, 0x9b, 0x95, 0x68, 0x19, 0x65, - 0x67, 0xc0, 0xbd, 0x36, 0x85, 0xd9, 0xb6, 0x69, 0x9e, 0xe5, 0x13, 0x38, - 0xa1, 0xc0, 0x71, 0x9b, 0xd1, 0xbd, 0x3c, 0x9c, 0x53, 0x81, 0x9c, 0xd6, - 0x4f, 0xc8, 0x06, 0x86, 0x61, 0xb2, 0x9e, 0xc3, 0x92, 0x11, 0x36, 0x2e, - 0x94, 0x98, 0x65, 0x3b, 0xc0, 0xad, 0x79, 0xd9, 0x05, 0xcf, 0x74, 0x0f, - 0x3c, 0x3b, 0xda, 0x8e, 0xb4, 0xdc, 0xd8, 0xd5, 0x1d, 0xa1, 0xd2, 0x06, - 0xb4, 0xd3, 0x12, 0x5f, 0x0d, 0xb2, 0xf6, 0x1c, 0x5b, 0xd7, 0x22, 0x2e, - 0xa3, 0x05, 0x26, 0xb8, 0x95, 0xa3, 0x5d, 0x20, 0x0b, 0xd9, 0x0a, 0x74, - 0x11, 0x6f, 0x30, 0x5c, 0x96, 0x5b, 0x46, 0xe8, 0x44, 0xd9, 0x3f, 0xc9, - 0xbf, 0x4e, 0xbe, 0xca, 0xc1, 0xb2, 0x00, 0x16, 0xaa, 0x56, 0x3d, 0x4c, - 0x9b, 0x21, 0xa5, 0xb2, 0x2e, 0x4b, 0x1d, 0xc3, 0x1b, 0x09, 0xb6, 0x90, - 0x4e, 0x45, 0xca, 0x83, 0x7e, 0xc9, 0xed, 0xd6, 0x99, 0x49, 0x92, 0x0a, - 0xb4, 0xf5, 0x20, 0xdb, 0xa8, 0x82, 0x31, 0x14, 0x01, 0xef, 0x99, 0x0d, - 0x83, 0xf2, 0x72, 0xae, 0x69, 0xd9, 0x7a, 0x45, 0xb5, 0x29, 0x79, 0x14, - 0x09, 0x46, 0x7e, 0xce, 0xc7, 0xd9, 0x2e, 0x49, 0x0b, 0x5a, 0x5f, 0x97, - 0xbb, 0xbc, 0x9f, 0xcb, 0x39, 0x47, 0xa8, 0x8e, 0xd3, 0x49, 0x73, 0x56, - 0x04, 0xb0, 0x33, 0x01, 0x67, 0x96, 0xa5, 0x21, 0x71, 0xe1, 0xc0, 0x69, - 0x9d, 0x35, 0x47, 0xe2, 0x4d, 0x78, 0x18, 0x03, 0x40, 0x18, 0xd6, 0x26, - 0x2d, 0x8a, 0x06, 0xb4, 0x92, 0x21, 0x0c, 0xe0, 0xdb, 0x6a, 0x9d, 0x93, - 0xa2, 0x9c, 0xda, 0x9d, 0xbf, 0x74, 0xd0, 0xea, 0x4e, 0xdb, 0x70, 0xf5, - 0x92, 0xb3, 0x28, 0x83, 0x69, 0xaf, 0xe3, 0x7b, 0x9d, 0x12, 0xc9, 0xdd, - 0x81, 0xde, 0xce, 0xc8, 0x1c, 0x96, 0x2f, 0x63, 0xf2, 0xa4, 0x58, 0xa4, - 0x1c, 0x9a, 0x60, 0x04, 0x7b, 0x32, 0x2c, 0x56, 0xe5, 0x99, 0x30, 0x6a, - 0x0d, 0x6b, 0x85, 0xf9, 0x9e, 0xa7, 0xb0, 0x7a, 0x3b, 0x2b, 0x19, 0x9e, - 0x53, 0x99, 0x59, 0xfc, 0xcf, 0x49, 0x5d, 0xf4, 0x59, 0x26, 0xb1, 0x4e, - 0x83, 0xf1, 0xd1, 0x1a, 0xea, 0x7b, 0x64, 0xca, 0x89, 0xc5, 0x30, 0x9e, - 0x73, 0x6d, 0xcf, 0xf7, 0xc8, 0xf8, 0x41, 0xd8, 0xf0, 0xf8, 0x8e, 0xbe, - 0xfb, 0xac, 0x8a, 0xc4, 0xf8, 0xb2, 0x5c, 0xd4, 0xd5, 0xdc, 0x1e, 0x1d, - 0xd7, 0x6d, 0xbe, 0xed, 0xa2, 0x5b, 0x45, 0x23, 0xef, 0x10, 0x23, 0xed, - 0xdc, 0x29, 0x06, 0x69, 0x38, 0x9c, 0xac, 0xef, 0x41, 0xec, 0xa5, 0x0c, - 0x2a, 0x2b, 0x07, 0x9e, 0x4a, 0x1b, 0xcd, 0x07, 0x1a, 0x5f, 0x45, 0xb9, - 0x31, 0x9c, 0x45, 0x95, 0xd8, 0xb3, 0x5c, 0x46, 0x0c, 0xf6, 0xfa, 0x10, - 0xd1, 0x0a, 0x85, 0xed, 0x21, 0x70, 0x2a, 0x73, 0x86, 0x22, 0x28, 0x94, - 0x50, 0xd4, 0x8f, 0x8d, 0xa9, 0xc1, 0x4c, 0x01, 0xcd, 0x7a, 0x2e, 0x1f, - 0x64, 0xb8, 0x6a, 0x69, 0xcd, 0x50, 0xd6, 0xfe, 0x8d, 0x1f, 0xbe, 0xd7, - 0xfa, 0x33, 0x4f, 0x39, 0x7e, 0x0e, 0xcc, 0xf7, 0x5a, 0xc9, 0xef, 0xea, - 0xf0, 0x7d, 0x2f, 0xb3, 0x23, 0xe3, 0x8f, 0x0b, 0x33, 0x5d, 0x83, 0x55, - 0xd6, 0x19, 0x4d, 0xc4, 0xea, 0x9f, 0xa9, 0xae, 0xcd, 0x65, 0x30, 0xeb, - 0x8e, 0x8b, 0xc6, 0xca, 0xa1, 0xa2, 0x31, 0x98, 0x6c, 0x26, 0xf7, 0xa7, - 0xac, 0xff, 0x3d, 0x6f, 0x36, 0xca, 0xba, 0xe3, 0x7f, 0xcf, 0x92, 0x8d, - 0xd4, 0x70, 0x30, 0x54, 0x83, 0x7b, 0x51, 0xa7, 0x69, 0xee, 0xb0, 0x15, - 0xfe, 0x2e, 0x16, 0x1f, 0x83, 0xf3, 0x2a, 0xf6, 0x64, 0xb6, 0x7a, 0x57, - 0x9d, 0xb6, 0xcb, 0x68, 0x62, 0xd8, 0x7b, 0x4e, 0x7c, 0xb8, 0x74, 0xa3, - 0x56, 0x2d, 0x51, 0x07, 0x81, 0xd5, 0xb5, 0xc7, 0x92, 0x95, 0x63, 0x28, - 0x3a, 0x48, 0x83, 0x7c, 0xf3, 0x94, 0xed, 0x5c, 0x1f, 0x42, 0xcb, 0xf4, - 0xc8, 0x60, 0x57, 0xa5, 0x60, 0xcd, 0xb4, 0xa0, 0xc5, 0x5c, 0x60, 0x84, - 0xb4, 0xbe, 0x97, 0xf0, 0xf2, 0x5e, 0xc2, 0x72, 0x9b, 0x0e, 0x39, 0xdd, - 0x9e, 0x35, 0xa2, 0xdf, 0x10, 0xab, 0x8f, 0x55, 0xd6, 0xaf, 0xb7, 0xda, - 0xc2, 0xb1, 0x8d, 0x7f, 0x72, 0x6c, 0xa8, 0x04, 0xa4, 0x27, 0xf5, 0xb4, - 0x60, 0x7f, 0x92, 0x96, 0x07, 0xb1, 0x61, 0x33, 0x38, 0x6e, 0x1e, 0x6a, - 0x08, 0x47, 0x6f, 0x09, 0x06, 0xad, 0xf8, 0x06, 0xab, 0x66, 0x85, 0x05, - 0x0b, 0xeb, 0xa8, 0x31, 0x74, 0x83, 0x8c, 0x42, 0x02, 0x7e, 0xb4, 0x1b, - 0x85, 0x53, 0xa7, 0xbc, 0x56, 0x00, 0xe6, 0xd2, 0x7d, 0x67, 0x07, 0xe8, - 0x44, 0x06, 0xb5, 0x98, 0x74, 0xd3, 0xbd, 0x2f, 0xef, 0x64, 0x1c, 0x22, - 0x2f, 0x89, 0xb8, 0x0e, 0xf8, 0xce, 0xa6, 0x23, 0x6f, 0x75, 0xd5, 0x98, - 0xaa, 0x16, 0xa2, 0xb1, 0x14, 0x46, 0xb4, 0x3c, 0xc3, 0x2a, 0x22, 0x22, - 0x84, 0x71, 0xb2, 0xfd, 0xda, 0x18, 0x2e, 0x00, 0x79, 0x35, 0x11, 0x53, - 0x71, 0x92, 0x3e, 0xac, 0x4b, 0xae, 0x0f, 0x06, 0xfb, 0x1e, 0xbc, 0x6c, - 0x47, 0x0b, 0xea, 0xcd, 0xf6, 0x33, 0xde, 0x1e, 0x1e, 0x36, 0xcc, 0xe9, - 0x38, 0x2a, 0x91, 0x1b, 0x8b, 0x0f, 0x54, 0x34, 0x7d, 0xf8, 0x1d, 0x6f, - 0x31, 0xc0, 0x3b, 0x8a, 0xe1, 0x06, 0x84, 0x27, 0x7e, 0xd4, 0xdc, 0x64, - 0xd4, 0x68, 0x37, 0x8e, 0x25, 0x4c, 0x4a, 0x6e, 0x0e, 0xe8, 0x74, 0xb4, - 0x66, 0xb1, 0x60, 0xb4, 0x07, 0xbb, 0x04, 0x15, 0x81, 0x8d, 0xa5, 0xbb, - 0xa8, 0xfc, 0x38, 0x4f, 0x26, 0x2e, 0x97, 0x95, 0x21, 0x98, 0xb8, 0x7f, - 0x53, 0x60, 0x95, 0x63, 0xd5, 0x88, 0xe9, 0x4c, 0xc4, 0xa8, 0x99, 0x0d, - 0x40, 0x49, 0x2b, 0x85, 0x38, 0xad, 0xe8, 0x52, 0xe0, 0x17, 0xc1, 0x1e, - 0x61, 0x85, 0x6a, 0xa7, 0xe9, 0xf1, 0x1b, 0xf2, 0xde, 0x11, 0xc4, 0xd5, - 0x69, 0x67, 0xd5, 0xe3, 0x04, 0xe9, 0x7b, 0x9c, 0xfe, 0x65, 0x45, 0x8c, - 0x31, 0x65, 0x1a, 0x9f, 0x53, 0x88, 0x36, 0x0e, 0xdd, 0xae, 0xdc, 0xd4, - 0xa7, 0x21, 0xca, 0xa9, 0xd9, 0x1a, 0xb4, 0x6e, 0xd2, 0xa6, 0xe3, 0x42, - 0xa8, 0xc2, 0x45, 0x31, 0x1e, 0x4e, 0x32, 0xc6, 0xb2, 0xd5, 0x18, 0x12, - 0x81, 0x37, 0x49, 0x73, 0xc4, 0xbf, 0x01, 0x31, 0x72, 0x8e, 0xff, 0xdc, - 0x54, 0x04, 0x9c, 0x51, 0x79, 0x52, 0xfe, 0xa9, 0x16, 0x2b, 0xba, 0xcf, - 0xf8, 0xcf, 0xd9, 0x27, 0x87, 0x46, 0xac, 0x43, 0xc2, 0x98, 0x74, 0x19, - 0x0c, 0x79, 0xc4, 0xe1, 0x22, 0x99, 0xcc, 0x88, 0x17, 0x5b, 0xc4, 0x82, - 0x2c, 0x70, 0x00, 0x71, 0x0c, 0x09, 0x9c, 0xee, 0x83, 0x4a, 0x67, 0x20, - 0xb2, 0x6a, 0xbb, 0xc5, 0x8b, 0x8e, 0xbb, 0xb7, 0x8b, 0x65, 0x88, 0x89, - 0x84, 0xb2, 0x3c, 0x8e, 0x74, 0x6a, 0x12, 0xbb, 0x20, 0xd8, 0xb5, 0x24, - 0x90, 0x20, 0x90, 0x7e, 0x76, 0x84, 0xb1, 0xa6, 0x7c, 0x6b, 0xe3, 0x52, - 0x78, 0xaf, 0x94, 0x46, 0x61, 0x46, 0xaa, 0x6a, 0xb4, 0xde, 0x1a, 0xc9, - 0x89, 0x76, 0x65, 0xf3, 0x5c, 0x77, 0x61, 0xa6, 0x4d, 0x52, 0xbc, 0x90, - 0x1b, 0xda, 0x10, 0xa6, 0x79, 0x83, 0xcf, 0x6c, 0x69, 0x57, 0x0b, 0x22, - 0xd9, 0x07, 0x6b, 0xb9, 0x9a, 0xd6, 0x18, 0xd1, 0x8a, 0xb7, 0x90, 0x3e, - 0x73, 0x1a, 0x73, 0xc2, 0x34, 0xf6, 0x69, 0xd1, 0x88, 0x62, 0xcc, 0x74, - 0x62, 0x2c, 0x66, 0x1e, 0x4c, 0x80, 0xe3, 0xef, 0x44, 0xc9, 0x97, 0x90, - 0x61, 0x9b, 0x38, 0xe7, 0xcc, 0x93, 0x20, 0xc2, 0x59, 0x91, 0x94, 0x13, - 0x33, 0xdf, 0xd1, 0xaa, 0x69, 0xf0, 0x0c, 0xa0, 0xbe, 0x6e, 0x0f, 0x8e, - 0xae, 0xe3, 0x2b, 0x26, 0xd8, 0x23, 0x66, 0x77, 0x85, 0xab, 0x07, 0x81, - 0xc3, 0xc9, 0x7a, 0x71, 0x72, 0xb6, 0xe9, 0xeb, 0x9c, 0x3b, 0xb1, 0x3b, - 0xe3, 0x14, 0x15, 0x1e, 0xda, 0x9d, 0xfc, 0x0b, 0x30, 0x64, 0x43, 0xc7, - 0x32, 0x0f, 0xe6, 0x0c, 0x28, 0xa4, 0x73, 0x12, 0x7f, 0x41, 0x74, 0x6b, - 0x2e, 0x87, 0xc0, 0x64, 0x21, 0xbc, 0xac, 0xbb, 0xaa, 0x3c, 0xde, 0xeb, - 0xcd, 0x87, 0x1c, 0x73, 0x37, 0x0d, 0x9e, 0xf2, 0x69, 0x9c, 0x6e, 0x0f, - 0x82, 0x02, 0x86, 0x0d, 0xb6, 0x68, 0xf5, 0xe4, 0xe9, 0x9a, 0xac, 0x0b, - 0x47, 0xf5, 0x4c, 0x95, 0xe3, 0x85, 0x0d, 0x38, 0x4d, 0x80, 0xfe, 0x5b, - 0xf9, 0x52, 0x89, 0x02, 0xfa, 0x00, 0x32, 0x61, 0xf4, 0x1d, 0x50, 0xe6, - 0x9d, 0x07, 0xb8, 0xdd, 0x1c, 0xcc, 0x78, 0xca, 0xf1, 0x19, 0x28, 0xcd, - 0x18, 0x50, 0x2f, 0x44, 0xf8, 0xd5, 0x52, 0xc8, 0xe4, 0xe3, 0xf4, 0x94, - 0x38, 0x33, 0x94, 0x58, 0x1e, 0xa6, 0x90, 0xef, 0xa6, 0x1c, 0xc6, 0x81, - 0x62, 0xa4, 0xea, 0x58, 0xee, 0x35, 0x58, 0x4d, 0xed, 0x92, 0x86, 0x6b, - 0x02, 0x9c, 0x7b, 0x0f, 0x82, 0x6c, 0x4c, 0x80, 0x93, 0x0d, 0xec, 0x6b, - 0x77, 0x34, 0x8d, 0x17, 0xcc, 0x11, 0x6f, 0x82, 0x40, 0x70, 0x1e, 0x1f, - 0x50, 0x4e, 0x20, 0xe6, 0x59, 0x27, 0x9b, 0xf5, 0xcd, 0xb8, 0x55, 0x14, - 0xc5, 0x3e, 0xa8, 0xd4, 0x1b, 0x26, 0x35, 0xe1, 0xf9, 0x78, 0x4e, 0x6d, - 0xf9, 0xc8, 0x73, 0xd6, 0x4e, 0x3b, 0x1f, 0x1a, 0xaf, 0x26, 0x54, 0xf4, - 0xb4, 0x9b, 0xdb, 0x88, 0x68, 0x17, 0xfb, 0xc2, 0x9c, 0x27, 0xb3, 0xf4, - 0x35, 0xdd, 0x30, 0xb5, 0xff, 0xb2, 0x31, 0xa1, 0xa0, 0xd9, 0x7c, 0x7d, - 0xb1, 0xf9, 0x7c, 0x7d, 0x4d, 0x1c, 0x64, 0x1c, 0x38, 0xb3, 0x23, 0x62, - 0x37, 0x4f, 0x7c, 0xd0, 0x2d, 0xd7, 0xb0, 0x0c, 0x1c, 0xc7, 0x59, 0xf7, - 0x0a, 0x58, 0xd4, 0x6d, 0x0c, 0xcd, 0x25, 0x02, 0x2d, 0xf2, 0xed, 0x05, - 0xe7, 0x06, 0x5d, 0xac, 0x1a, 0xa6, 0x0c, 0xb6, 0x25, 0x1d, 0xb7, 0xe5, - 0x76, 0xb5, 0x66, 0xe3, 0x35, 0xfc, 0xcb, 0x40, 0x34, 0xcb, 0x34, 0x50, - 0x2e, 0x43, 0xbf, 0x48, 0x7a, 0xd3, 0xaa, 0xd5, 0xd7, 0x57, 0xce, 0x19, - 0xbf, 0xbe, 0xac, 0xf4, 0x8f, 0x5b, 0x00, 0xba, 0xab, 0x2c, 0x0b, 0x1b, - 0x40, 0x16, 0x5f, 0x4b, 0x61, 0xb2, 0x8c, 0xdc, 0x6f, 0x45, 0x08, 0x4b, - 0x09, 0x8f, 0x27, 0xc2, 0x6a, 0xb4, 0x3b, 0x50, 0x09, 0x60, 0x10, 0x40, - 0x36, 0x53, 0xfd, 0x62, 0x62, 0x0e, 0x5a, 0x3e, 0x58, 0x37, 0x66, 0xf4, - 0x75, 0xbc, 0x07, 0x16, 0x1d, 0x42, 0x3c, 0x7f, 0x78, 0x8d, 0x7f, 0x4f, - 0x8e, 0x7c, 0xd4, 0x7c, 0xdc, 0xfe, 0x40, 0x21, 0x94, 0xc7, 0xe4, 0x88, - 0x19, 0x32, 0xb3, 0xa2, 0xfc, 0x7b, 0x38, 0x48, 0x23, 0x12, 0xec, 0xe0, - 0xd5, 0x91, 0x7b, 0x3a, 0x7d, 0x85, 0xf3, 0xf1, 0xb8, 0x8d, 0x34, 0x4d, - 0x3a, 0xcf, 0x55, 0x07, 0xa3, 0xce, 0x23, 0x96, 0xe2, 0x82, 0x40, 0x01, - 0x05, 0xfe, 0x70, 0x16, 0x1d, 0xe6, 0xf1, 0xc0, 0x3a, 0x5b, 0x54, 0x3d, - 0xa8, 0x57, 0x3a, 0x6c, 0xd3, 0x23, 0x42, 0x03, 0x3c, 0x2e, 0x68, 0x7e, - 0x27, 0xbe, 0x38, 0x66, 0x25, 0x02, 0x6b, 0x38, 0x7a, 0x3c, 0x6f, 0x5e, - 0x60, 0xde, 0xfc, 0x1e, 0x45, 0x43, 0xcb, 0xa3, 0x74, 0x89, 0xe8, 0x91, - 0xab, 0x9b, 0x8e, 0x6a, 0x98, 0xe4, 0x3c, 0x0f, 0x13, 0xda, 0x16, 0x37, - 0x10, 0xee, 0x5c, 0x96, 0x05, 0xcb, 0x96, 0x06, 0x3c, 0x5f, 0xe0, 0x34, - 0xd3, 0xea, 0xe0, 0x38, 0xf8, 0xa1, 0xfe, 0xd8, 0x6f, 0x08, 0x78, 0x8f, - 0x6e, 0x50, 0x1e, 0x07, 0xf2, 0x4c, 0xbb, 0xe9, 0x11, 0xac, 0xb1, 0xe8, - 0xfb, 0xa8, 0xa8, 0x06, 0x25, 0x8a, 0x42, 0x39, 0x0c, 0x32, 0x18, 0xa0, - 0x3f, 0xef, 0x28, 0xc9, 0x5d, 0x1e, 0xc1, 0x24, 0x51, 0x64, 0xb4, 0x98, - 0x24, 0x5a, 0x01, 0x8d, 0x6e, 0xec, 0x2e, 0x0e, 0x38, 0xa0, 0x93, 0xa2, - 0xf5, 0x06, 0xb7, 0xbd, 0x74, 0xd5, 0xc7, 0x95, 0x35, 0x3e, 0x3e, 0x59, - 0xe3, 0xa3, 0x5d, 0x3e, 0x5c, 0x6d, 0x57, 0xce, 0x57, 0x03, 0xc9, 0x76, - 0x3f, 0xea, 0x25, 0x91, 0x17, 0xb2, 0x7f, 0xef, 0xc1, 0x05, 0xc1, 0x6f, - 0xef, 0x6d, 0x25, 0x0b, 0x7e, 0x9c, 0xd1, 0x7e, 0x6d, 0x46, 0xf6, 0xfc, - 0xdf, 0xed, 0x69, 0xe5, 0x50, 0x9d, 0xd5, 0x05, 0x82, 0x87, 0x67, 0xf5, - 0xb1, 0xeb, 0x79, 0x62, 0xae, 0xf8, 0x3c, 0xd7, 0xc7, 0xe4, 0x93, 0xb6, - 0x32, 0xfa, 0x58, 0x58, 0x46, 0x36, 0xf1, 0x62, 0x61, 0xcc, 0xb3, 0x31, - 0x0f, 0xff, 0x36, 0xfb, 0x32, 0xe0, 0x00, 0xe4, 0xe5, 0x59, 0x6c, 0xfa, - 0x9e, 0x73, 0x61, 0x11, 0x64, 0x91, 0x65, 0x61, 0x30, 0x8b, 0x82, 0x69, - 0x77, 0x4c, 0x35, 0x01, 0x0a, 0xea, 0x1a, 0x06, 0xda, 0x56, 0x69, 0xf1, - 0x9d, 0x29, 0x2e, 0x6d, 0x6b, 0xb5, 0x7e, 0x01, 0x58, 0x67, 0xf9, 0x86, - 0x79, 0x14, 0xef, 0xdc, 0xa5, 0xfd, 0x98, 0x38, 0xf2, 0x7c, 0x03, 0xe1, - 0x67, 0x9f, 0x91, 0xa2, 0xef, 0xb2, 0xfa, 0x0f, 0xbb, 0xdf, 0xec, 0x13, - 0x4c, 0x6f, 0x2c, 0x2e, 0xb4, 0xd9, 0x8f, 0x58, 0x16, 0x57, 0x2b, 0xb8, - 0x02, 0x30, 0xdf, 0x43, 0x0e, 0x99, 0xef, 0x94, 0x51, 0xdd, 0x64, 0x25, - 0x1b, 0x94, 0xe9, 0xf3, 0x0b, 0xf4, 0xfe, 0x84, 0x28, 0x35, 0x11, 0x1e, - 0x85, 0x43, 0xce, 0xf5, 0x0d, 0x37, 0xd9, 0x72, 0x1a, 0x16, 0x60, 0x57, - 0x53, 0x9d, 0x07, 0x0f, 0x0a, 0xcb, 0x0b, 0x28, 0x86, 0x19, 0x2b, 0xa6, - 0x30, 0xea, 0xb3, 0xce, 0x39, 0x12, 0x7d, 0x90, 0xf4, 0x05, 0x8b, 0x37, - 0x53, 0x34, 0x4e, 0xcf, 0xf7, 0x28, 0x64, 0xf9, 0x62, 0xca, 0x27, 0x75, - 0xdb, 0xd9, 0xa4, 0x85, 0xc3, 0xa7, 0xb0, 0xf3, 0xb4, 0xdc, 0x21, 0xf9, - 0xa2, 0x78, 0x66, 0x13, 0x40, 0xf0, 0xcb, 0x4a, 0x73, 0x33, 0x9a, 0xcf, - 0x85, 0xa0, 0xaf, 0xb3, 0x55, 0x05, 0xf9, 0x5b, 0x12, 0x60, 0xf7, 0x81, - 0xb9, 0xf9, 0x82, 0xf4, 0x66, 0x1d, 0x7c, 0x76, 0x59, 0x64, 0x7e, 0xf8, - 0x54, 0x65, 0x70, 0xb4, 0xcb, 0x64, 0x32, 0x1f, 0x9e, 0xd1, 0x47, 0x95, - 0x31, 0x5b, 0x2f, 0xa5, 0xfd, 0x25, 0xb2, 0x47, 0xcf, 0xf2, 0xe3, 0x9a, - 0xdd, 0x87, 0xb5, 0x1f, 0xeb, 0xae, 0x5e, 0x8e, 0x0f, 0xcc, 0x13, 0x16, - 0xb9, 0xb1, 0x6a, 0x7d, 0x0a, 0x47, 0xef, 0x98, 0x29, 0x1d, 0x5b, 0xd3, - 0xd3, 0x64, 0x6f, 0xb6, 0x29, 0x84, 0x6a, 0x5b, 0x62, 0x8e, 0xb1, 0x1c, - 0xc9, 0xf4, 0x42, 0x5e, 0x52, 0x84, 0x64, 0x5b, 0xb3, 0xaf, 0x4d, 0x78, - 0x51, 0x95, 0x4d, 0xc6, 0x93, 0x6c, 0x66, 0x2e, 0x36, 0xe7, 0xf1, 0x56, - 0x62, 0xa0, 0xba, 0xb9, 0xfb, 0xaf, 0x71, 0x80, 0xc8, 0x07, 0xc3, 0xf8, - 0xbe, 0x3d, 0xc5, 0x22, 0x12, 0xfa, 0xd7, 0xef, 0x5b, 0x4a, 0xe6, 0xc0, - 0x72, 0x30, 0xe7, 0xba, 0x93, 0x13, 0x59, 0x10, 0x9d, 0x08, 0xcf, 0x6c, - 0x29, 0x00, 0xfb, 0xc5, 0xc3, 0x5f, 0xc7, 0xd1, 0x26, 0xbf, 0xb9, 0x92, - 0x30, 0x5b, 0xf7, 0x54, 0xeb, 0x45, 0x47, 0xad, 0x17, 0x34, 0x3a, 0x6a, - 0x0f, 0xae, 0x77, 0xcf, 0xb1, 0x1e, 0x6a, 0x3d, 0x3b, 0x56, 0x91, 0x1c, - 0x8e, 0x34, 0x0b, 0xf3, 0x6d, 0x28, 0x98, 0x85, 0xb0, 0x72, 0x69, 0x44, - 0xe3, 0x1c, 0xda, 0x21, 0x4d, 0x25, 0x01, 0x6b, 0x4e, 0xb1, 0x5c, 0x00, - 0xea, 0x2c, 0xb7, 0xf0, 0xd4, 0x34, 0x6a, 0x39, 0x14, 0x78, 0x95, 0x9e, - 0x14, 0x60, 0x36, 0xe6, 0x10, 0x4b, 0x00, 0x34, 0x2a, 0x1b, 0x64, 0xf2, - 0xca, 0x91, 0x83, 0xa6, 0xcd, 0x51, 0xef, 0x37, 0x96, 0xde, 0x5c, 0x87, - 0xf0, 0x52, 0x87, 0xa7, 0x8d, 0x18, 0xea, 0x8d, 0x73, 0x1d, 0x0b, 0x33, - 0x50, 0x31, 0xe2, 0xcb, 0x2e, 0x13, 0x82, 0x11, 0x38, 0x2c, 0xb3, 0x26, - 0x3e, 0x72, 0x60, 0x03, 0xfc, 0x8d, 0xe6, 0x3b, 0xbd, 0xdb, 0xc4, 0x3c, - 0xbe, 0x1a, 0x0c, 0x4f, 0x9b, 0x49, 0xb4, 0x8f, 0xc0, 0x5a, 0x19, 0x72, - 0x68, 0xb5, 0x83, 0xa1, 0x06, 0xd8, 0x64, 0xde, 0x25, 0xca, 0x83, 0x54, - 0x60, 0xeb, 0xe6, 0xdb, 0xac, 0x8a, 0x32, 0xa9, 0xb1, 0x7c, 0xa4, 0x21, - 0xa4, 0x48, 0xc0, 0x23, 0xf3, 0x79, 0xbc, 0xc3, 0xf2, 0x05, 0x9e, 0x6a, - 0xe6, 0x4f, 0x7e, 0xfb, 0x61, 0x61, 0x19, 0x77, 0x02, 0x9f, 0x36, 0xb0, - 0xab, 0xc4, 0xce, 0x97, 0xca, 0x43, 0x6d, 0x66, 0x01, 0x7b, 0x45, 0x99, - 0x5b, 0x47, 0x18, 0xc9, 0x84, 0x1d, 0xc2, 0x2a, 0xca, 0xae, 0xaa, 0x6b, - 0x5b, 0x59, 0xec, 0xcf, 0xb2, 0xa1, 0x10, 0x9c, 0x49, 0x23, 0xcf, 0x83, - 0x7f, 0xd9, 0xac, 0xd5, 0x53, 0xe6, 0x9e, 0xad, 0xff, 0xdc, 0xe5, 0x3e, - 0xa0, 0x07, 0x62, 0x84, 0x15, 0x76, 0xd8, 0xaf, 0x67, 0x12, 0xf4, 0xb6, - 0xf7, 0xf5, 0x51, 0x4c, 0x09, 0x31, 0x0b, 0x54, 0x66, 0x80, 0xd6, 0xb0, - 0x52, 0xc5, 0x1b, 0x5c, 0x65, 0xe8, 0xdb, 0xb5, 0xef, 0x1c, 0x98, 0x50, - 0x2f, 0xd5, 0xd1, 0x71, 0x8e, 0x14, 0x11, 0x66, 0x7c, 0x2e, 0x42, 0x67, - 0x34, 0x65, 0xce, 0xee, 0xe7, 0x73, 0x11, 0xcf, 0x73, 0x10, 0xf3, 0x25, - 0xa7, 0xfa, 0x78, 0x3c, 0x77, 0xd6, 0x7f, 0x1e, 0x99, 0xd8, 0xd7, 0x24, - 0x5e, 0xfb, 0xb2, 0xd9, 0x98, 0x07, 0xe6, 0xc0, 0x47, 0x9a, 0x17, 0xf3, - 0xf6, 0x53, 0x40, 0x2d, 0xe0, 0x9d, 0x1a, 0x8f, 0x84, 0x99, 0x1b, 0xe3, - 0xe5, 0x1c, 0x15, 0x6c, 0xde, 0x72, 0xdd, 0x74, 0x13, 0x19, 0x9f, 0xde, - 0xd6, 0xf6, 0xc7, 0xfe, 0x6d, 0xdf, 0x23, 0xa8, 0xc3, 0x78, 0xb7, 0x0f, - 0xf4, 0x3d, 0x40, 0xf6, 0xa3, 0xe5, 0x76, 0x6a, 0xb1, 0x71, 0x31, 0x09, - 0x76, 0x74, 0xc3, 0xdb, 0xc3, 0x72, 0xc7, 0xda, 0x97, 0x87, 0x73, 0x47, - 0x40, 0xa3, 0x24, 0xb6, 0xe5, 0x3e, 0x69, 0x20, 0x06, 0x92, 0x03, 0x9f, - 0xaf, 0xd8, 0x98, 0x32, 0x4e, 0xbf, 0x2e, 0xa7, 0x09, 0x36, 0x7a, 0x20, - 0x96, 0x53, 0x2e, 0xe2, 0x98, 0xf9, 0x38, 0xc3, 0x06, 0x25, 0x11, 0x4e, - 0xf7, 0xe9, 0xf7, 0x0c, 0xe8, 0x23, 0xae, 0x82, 0xdb, 0x2d, 0x6b, 0x37, - 0x17, 0x1b, 0x96, 0x7b, 0xe9, 0xf3, 0x05, 0x12, 0x0a, 0xc7, 0x84, 0x69, - 0x05, 0x3e, 0xbf, 0xd9, 0x19, 0x96, 0xbb, 0x49, 0x40, 0xc9, 0x1f, 0x44, - 0x79, 0xe8, 0x27, 0x04, 0x81, 0x84, 0xf4, 0x95, 0x4b, 0x0e, 0x06, 0xf7, - 0xa7, 0x32, 0x39, 0x31, 0xd2, 0xe9, 0xee, 0x1d, 0x6f, 0x99, 0x34, 0x87, - 0x5d, 0x8c, 0x99, 0xc5, 0x22, 0x89, 0xb0, 0x0a, 0xd6, 0xb8, 0xdb, 0x3d, - 0xe6, 0xad, 0x4b, 0x0c, 0x37, 0x06, 0xc6, 0x0b, 0x52, 0x34, 0xd3, 0x5a, - 0x5b, 0x7b, 0x4e, 0x9e, 0x0c, 0x61, 0xf9, 0x02, 0xae, 0xd7, 0x0f, 0x35, - 0xbe, 0x64, 0xab, 0x8a, 0x71, 0xcb, 0x27, 0x3d, 0xd1, 0x1c, 0x49, 0xf8, - 0xc8, 0x66, 0x9d, 0x27, 0x96, 0x02, 0xd1, 0x8f, 0x22, 0x41, 0x87, 0xef, - 0xee, 0x13, 0x3e, 0xdf, 0x3b, 0x57, 0x33, 0x85, 0x23, 0xcb, 0xc1, 0x4b, - 0x16, 0xf1, 0xd8, 0xa5, 0xf4, 0x46, 0x56, 0x72, 0xfb, 0x36, 0xa1, 0xa7, - 0x82, 0xee, 0x87, 0xf0, 0x30, 0x92, 0x5e, 0x69, 0x1c, 0x2a, 0xb4, 0xa5, - 0xd7, 0x05, 0x06, 0xd5, 0xdb, 0x90, 0xc0, 0xc3, 0x58, 0xc8, 0x11, 0xdd, - 0x3c, 0x3a, 0x62, 0x6c, 0x06, 0xab, 0x8c, 0x39, 0xbf, 0x42, 0xb0, 0x64, - 0x78, 0xab, 0xc6, 0xd7, 0x65, 0x8d, 0x1a, 0xaa, 0xd3, 0xfd, 0x36, 0x81, - 0xab, 0x3a, 0x52, 0xde, 0xaa, 0xea, 0xb3, 0x46, 0x85, 0xf2, 0x48, 0xc3, - 0x92, 0x23, 0x97, 0x21, 0x9f, 0x03, 0x2f, 0x5a, 0x75, 0x74, 0x1e, 0x1b, - 0xe8, 0xe0, 0x6f, 0x0c, 0xb6, 0x8e, 0x35, 0xd8, 0x2e, 0xc6, 0xdb, 0x95, - 0xac, 0xed, 0xb2, 0x72, 0xb0, 0x6c, 0x4f, 0x4c, 0xf1, 0xeb, 0x37, 0x83, - 0xb0, 0xf4, 0xde, 0x4c, 0x44, 0x6d, 0x62, 0x9b, 0xa0, 0x63, 0x55, 0x44, - 0x38, 0x9c, 0x45, 0x2d, 0x09, 0x1e, 0x17, 0x22, 0x64, 0xa4, 0x20, 0xd3, - 0x4b, 0xc3, 0xae, 0x9b, 0xdc, 0xe5, 0x86, 0x89, 0x13, 0x16, 0x63, 0x7e, - 0x88, 0x8d, 0x1e, 0x27, 0x8e, 0xb7, 0xca, 0xdc, 0x08, 0x1b, 0xf2, 0xf2, - 0xc3, 0xa3, 0x46, 0xf2, 0xcb, 0xb7, 0xf1, 0x95, 0x9e, 0xc4, 0x6d, 0x9d, - 0xb4, 0xdf, 0xe3, 0x14, 0x66, 0x18, 0x6f, 0xe7, 0x69, 0x17, 0x72, 0x4a, - 0x2a, 0x1d, 0xee, 0x56, 0x17, 0x5c, 0x7c, 0xea, 0xd4, 0xf5, 0x13, 0x2b, - 0x23, 0xa9, 0x48, 0xc6, 0x35, 0xf0, 0xc3, 0x7a, 0x4a, 0x16, 0x6a, 0x52, - 0x51, 0x10, 0x46, 0x0f, 0x59, 0xa6, 0x56, 0xde, 0x17, 0x98, 0xa1, 0xc1, - 0xfd, 0xd3, 0xd9, 0x2e, 0xa9, 0x9a, 0x25, 0x14, 0xc3, 0x3d, 0xa0, 0x84, - 0x69, 0xc0, 0xa6, 0x50, 0xb2, 0x30, 0x7c, 0x8b, 0xc6, 0x21, 0x33, 0x89, - 0xa3, 0x04, 0xe4, 0x1e, 0x9b, 0x1f, 0xb8, 0x81, 0xb1, 0x8b, 0xfc, 0x2d, - 0x38, 0x58, 0x10, 0x18, 0x7b, 0x79, 0x8a, 0xfa, 0x02, 0x42, 0xce, 0x23, - 0x8e, 0x25, 0xbe, 0x65, 0xb3, 0x19, 0x57, 0xf6, 0x94, 0xed, 0x0c, 0x51, - 0x74, 0x89, 0x8d, 0x68, 0x03, 0xce, 0xab, 0x6d, 0xc8, 0x76, 0x5e, 0xad, - 0xa1, 0x7b, 0x79, 0xdf, 0xb4, 0x6f, 0xbb, 0xbc, 0x29, 0x6c, 0x2d, 0xef, - 0xc7, 0x78, 0xeb, 0x41, 0x91, 0xf2, 0xc8, 0x1d, 0x76, 0x27, 0xc1, 0x34, - 0x48, 0xac, 0xe9, 0x22, 0xba, 0xf7, 0xfb, 0x12, 0x88, 0xbc, 0xcd, 0x51, - 0x52, 0x6b, 0xac, 0xe9, 0xaf, 0x79, 0xda, 0x69, 0x0d, 0x2e, 0xb3, 0x5e, - 0x4e, 0x72, 0xac, 0x71, 0x84, 0x63, 0x0a, 0xf2, 0xa9, 0x09, 0x45, 0xc0, - 0xfd, 0xb8, 0x50, 0xe1, 0x28, 0x98, 0x29, 0x20, 0xc7, 0x69, 0x47, 0x61, - 0x87, 0x73, 0x3b, 0xcf, 0xc0, 0x67, 0x3a, 0xed, 0xdb, 0x7d, 0x20, 0xba, - 0x3d, 0x57, 0x58, 0x56, 0x2c, 0x55, 0x2f, 0xfa, 0xcc, 0xc9, 0xd8, 0x9a, - 0xcb, 0x98, 0xeb, 0x75, 0xb1, 0x72, 0xed, 0x4b, 0x37, 0x09, 0x99, 0x86, - 0x87, 0x89, 0x63, 0x8a, 0x58, 0xb0, 0xdb, 0x1f, 0xdd, 0xbe, 0xbb, 0xe7, - 0xac, 0x6a, 0xc5, 0x82, 0xc2, 0xb2, 0x44, 0x89, 0x25, 0x41, 0x47, 0x71, - 0x36, 0x05, 0xa8, 0x3b, 0xe2, 0xb9, 0x2e, 0x47, 0x9a, 0x4b, 0x19, 0x0a, - 0x36, 0x40, 0x18, 0x19, 0x34, 0xac, 0x6c, 0x5d, 0xc4, 0x2c, 0x23, 0xde, - 0x6a, 0x3a, 0x80, 0x69, 0xf7, 0x17, 0x76, 0xc9, 0x3e, 0xd7, 0x5b, 0x0a, - 0x95, 0x26, 0x36, 0x8d, 0x4d, 0x61, 0xf5, 0x2a, 0xdc, 0x6e, 0xe9, 0x72, - 0xeb, 0x48, 0x5d, 0x05, 0x08, 0xbc, 0x6d, 0x77, 0xd6, 0x0e, 0x0a, 0xed, - 0x26, 0x1c, 0xf5, 0x8a, 0xdc, 0x20, 0xf2, 0x72, 0x28, 0x36, 0xe2, 0x88, - 0x92, 0xde, 0x8e, 0xf7, 0xf0, 0x09, 0xe9, 0xa2, 0x0d, 0x4a, 0x10, 0x40, - 0x84, 0x01, 0x36, 0xda, 0x91, 0x52, 0xb7, 0x9b, 0x93, 0x80, 0x47, 0x79, - 0x64, 0x01, 0xe2, 0x1c, 0x46, 0xc4, 0x62, 0x9c, 0x22, 0xed, 0x39, 0xfc, - 0x99, 0x19, 0xeb, 0x2b, 0x82, 0x2e, 0xbf, 0xd7, 0x4b, 0x11, 0xc3, 0x36, - 0x4b, 0x10, 0x44, 0x16, 0x5d, 0xb2, 0x91, 0x75, 0x80, 0x84, 0xeb, 0xce, - 0x87, 0x67, 0xc8, 0x06, 0x0e, 0x55, 0x09, 0x80, 0xa5, 0x43, 0x4a, 0x30, - 0x84, 0x3e, 0x38, 0x39, 0x7c, 0xbb, 0xf9, 0xd6, 0xae, 0xed, 0xaa, 0x93, - 0x75, 0x2b, 0x36, 0x72, 0x6f, 0xfc, 0x88, 0x33, 0x40, 0x8c, 0x85, 0x8b, - 0x59, 0x30, 0x9d, 0x7d, 0xae, 0x26, 0xd1, 0xd8, 0x2f, 0x0e, 0xd5, 0x4c, - 0x32, 0x0b, 0xc6, 0xcc, 0x75, 0x9c, 0x76, 0xc5, 0x3b, 0x62, 0xc3, 0x5c, - 0x07, 0x50, 0x9c, 0x68, 0xb7, 0xfc, 0x30, 0x96, 0x6a, 0x2c, 0x94, 0x59, - 0x31, 0x52, 0xec, 0x14, 0x50, 0xcc, 0x51, 0x30, 0x5d, 0x64, 0x07, 0xf3, - 0xbe, 0xb4, 0x7e, 0xf8, 0xf6, 0x1d, 0x70, 0x52, 0xd3, 0x30, 0x56, 0x26, - 0xd8, 0x91, 0x87, 0x34, 0x59, 0x56, 0x09, 0xb2, 0x51, 0x4c, 0x68, 0xfa, - 0x4c, 0x98, 0x3a, 0xe4, 0xb4, 0xd4, 0x21, 0x36, 0xff, 0x40, 0xa4, 0x94, - 0x0d, 0x22, 0x06, 0xd8, 0x8e, 0x19, 0xc5, 0x45, 0x26, 0x00, 0x11, 0xa2, - 0xcc, 0x3a, 0xad, 0xfd, 0xd8, 0xc0, 0x3a, 0x6d, 0xe5, 0x12, 0x18, 0x67, - 0x9a, 0x66, 0xb2, 0x14, 0xa7, 0x73, 0x78, 0xba, 0xa1, 0xc9, 0xd6, 0x3a, - 0x9d, 0x8a, 0x09, 0x32, 0xf4, 0xc2, 0x68, 0xce, 0xa6, 0xf3, 0x71, 0xeb, - 0x17, 0x8e, 0xdc, 0x51, 0x96, 0x5d, 0x1f, 0xe4, 0xba, 0xab, 0x4e, 0x47, - 0x9a, 0xd9, 0x65, 0x41, 0x10, 0xce, 0xff, 0x2e, 0xf9, 0xa0, 0x95, 0x9a, - 0x8f, 0x11, 0xb1, 0xc1, 0x0a, 0xbc, 0x6f, 0x58, 0xa3, 0x26, 0xc5, 0x15, - 0x31, 0x37, 0x31, 0xba, 0x18, 0x40, 0x4b, 0xf0, 0x75, 0x37, 0x31, 0x6e, - 0x10, 0xde, 0x94, 0x7d, 0x41, 0x0f, 0x83, 0x83, 0x21, 0x1f, 0x3a, 0xdd, - 0x3c, 0xf8, 0x49, 0xe5, 0x82, 0x15, 0x1b, 0x31, 0xde, 0x27, 0xce, 0x71, - 0x08, 0x41, 0x4e, 0x13, 0x2e, 0xa3, 0xc6, 0xee, 0x15, 0x07, 0x74, 0x54, - 0x1f, 0x80, 0x17, 0x5b, 0x86, 0x55, 0x06, 0xf9, 0xf1, 0x25, 0x60, 0xfb, - 0xa5, 0xe8, 0xb7, 0x96, 0x85, 0x7b, 0x5f, 0x5a, 0x06, 0x06, 0x3d, 0x6b, - 0xa3, 0x34, 0xb0, 0x02, 0x58, 0x54, 0x29, 0x0e, 0x54, 0x56, 0x38, 0xb2, - 0xe6, 0x99, 0xe0, 0x51, 0xb6, 0x6e, 0x59, 0xdd, 0xf4, 0x65, 0x16, 0x9a, - 0xfc, 0x12, 0x69, 0xd8, 0xa7, 0xf2, 0x9d, 0x58, 0x86, 0x17, 0x71, 0x60, - 0x6e, 0xf7, 0x5f, 0xb1, 0x52, 0xb1, 0xeb, 0xec, 0x08, 0xd0, 0x03, 0x32, - 0x70, 0xf8, 0x88, 0x35, 0x01, 0xe0, 0x58, 0x0a, 0x20, 0x56, 0x03, 0x14, - 0xae, 0x19, 0x47, 0xdf, 0x1a, 0x77, 0xca, 0x27, 0xa7, 0xc4, 0xe9, 0xea, - 0x3b, 0x3b, 0xf8, 0xda, 0x33, 0xbd, 0x62, 0xd7, 0xc6, 0xd3, 0xb0, 0x4e, - 0xbf, 0x62, 0x1f, 0x40, 0xb1, 0x94, 0xbe, 0xae, 0x05, 0x9b, 0x4d, 0xfa, - 0xe0, 0x18, 0x9f, 0xd2, 0xfb, 0xa7, 0xcd, 0xc5, 0x07, 0xa5, 0x87, 0x75, - 0xad, 0xc7, 0x07, 0x24, 0xb3, 0xc1, 0x8a, 0xb0, 0xfa, 0xb1, 0x19, 0x6b, - 0xcc, 0x19, 0x8c, 0x78, 0xbb, 0x70, 0xb1, 0xae, 0x27, 0x83, 0x52, 0xe5, - 0xad, 0xd1, 0x9c, 0x56, 0x08, 0x29, 0x72, 0x6b, 0x95, 0xb9, 0x13, 0x18, - 0x7f, 0x4a, 0x4b, 0xe0, 0x88, 0x90, 0x04, 0xa3, 0xac, 0x6c, 0x22, 0x5a, - 0x33, 0xc0, 0xb9, 0x82, 0x2c, 0x03, 0x60, 0x26, 0x86, 0x6b, 0xdf, 0x6b, - 0x2e, 0xaa, 0xac, 0x56, 0x74, 0xbb, 0x31, 0xe5, 0xde, 0x7b, 0x8c, 0xb1, - 0x0e, 0x64, 0x2c, 0x8e, 0x64, 0x77, 0x3c, 0x3b, 0x90, 0x5d, 0x2c, 0xa8, - 0x00, 0xd1, 0xd4, 0xa6, 0xed, 0x5a, 0x7f, 0x63, 0xf4, 0xaf, 0xbf, 0x09, - 0xdc, 0xd8, 0x99, 0xc9, 0x5d, 0x9b, 0xce, 0xeb, 0xfe, 0x13, 0xab, 0x0d, - 0x0e, 0xc5, 0xbc, 0x0f, 0xee, 0x21, 0xe8, 0xc3, 0x71, 0xd9, 0x51, 0x10, - 0xf1, 0x97, 0x9f, 0x72, 0xb9, 0x0e, 0x8b, 0x8c, 0x43, 0xb8, 0xf1, 0x51, - 0x2c, 0x08, 0xcb, 0x5e, 0xa4, 0xf4, 0xb8, 0xe5, 0x69, 0x71, 0xe3, 0xe6, - 0x77, 0x1c, 0x1f, 0x5c, 0x1c, 0x0e, 0x53, 0x1c, 0x0c, 0xc5, 0x51, 0xab, - 0xe2, 0x8b, 0x35, 0xab, 0x13, 0xda, 0x5a, 0x33, 0x34, 0x5b, 0x51, 0xc9, - 0x12, 0x90, 0x91, 0x4e, 0x98, 0x05, 0x8e, 0x61, 0xbf, 0xf8, 0x39, 0x60, - 0x7e, 0x58, 0x6f, 0x11, 0xde, 0xba, 0x76, 0xe0, 0x35, 0xe5, 0xe8, 0x90, - 0xb3, 0x38, 0x5b, 0xe4, 0x58, 0xad, 0xc1, 0xe0, 0xb9, 0x71, 0x43, 0xcb, - 0x30, 0x0e, 0x3f, 0x47, 0x58, 0x9b, 0x7d, 0xc1, 0x9a, 0x4b, 0x78, 0xdf, - 0x70, 0x92, 0x36, 0x1c, 0xda, 0xd4, 0x00, 0xb3, 0x1d, 0x34, 0x56, 0xa7, - 0x9b, 0x4d, 0xa0, 0x09, 0x6c, 0xe4, 0x35, 0x2e, 0xa7, 0x40, 0x9e, 0x5c, - 0x17, 0x70, 0x50, 0xc2, 0xf3, 0xb3, 0x97, 0xfe, 0xe5, 0x94, 0xf1, 0xfa, - 0x31, 0x5e, 0xe3, 0x5c, 0x31, 0x7a, 0x61, 0x14, 0xed, 0xd3, 0x98, 0xf4, - 0x15, 0x93, 0xb1, 0x13, 0xa6, 0x75, 0xdd, 0x2e, 0x83, 0x23, 0xe9, 0x2e, - 0xfb, 0x25, 0xfd, 0x41, 0x5d, 0x5a, 0xe3, 0x7f, 0xad, 0x94, 0x0e, 0xb7, - 0xfc, 0x8f, 0xa3, 0x88, 0xdc, 0xe1, 0xc5, 0xdd, 0x7c, 0xfb, 0x88, 0x5c, - 0xcb, 0xf0, 0x57, 0xea, 0xe2, 0x38, 0xf9, 0xcf, 0x95, 0xbc, 0x7e, 0x4f, - 0x39, 0xee, 0x42, 0x47, 0x51, 0xc1, 0x22, 0xf7, 0x94, 0x44, 0xc7, 0x92, - 0x65, 0x90, 0xcf, 0xdb, 0x35, 0xfa, 0xbd, 0x7e, 0x84, 0x46, 0x92, 0xbe, - 0x8b, 0xff, 0x7c, 0x6c, 0x49, 0x5e, 0xe9, 0xa8, 0xe4, 0xf2, 0x9f, 0x8d, - 0x4a, 0xda, 0x34, 0x1e, 0x80, 0xfe, 0x20, 0xe3, 0x6b, 0x69, 0x26, 0x9f, - 0x7c, 0x29, 0x38, 0x6e, 0x74, 0x30, 0x09, 0xa5, 0x33, 0x46, 0x92, 0x1f, - 0x62, 0xa7, 0xd1, 0x98, 0xcd, 0x43, 0xb8, 0x19, 0xde, 0x9f, 0xf4, 0x51, - 0x86, 0xff, 0x63, 0xa1, 0x4c, 0x40, 0x2e, 0xb4, 0xe1, 0xfd, 0x82, 0xd3, - 0x71, 0x50, 0x72, 0x79, 0xbf, 0x0d, 0x12, 0x48, 0x1d, 0xc7, 0xa9, 0x3d, - 0xa7, 0xf2, 0x74, 0x04, 0xa8, 0xa2, 0xe3, 0x9b, 0xc0, 0x29, 0x06, 0x20, - 0x1c, 0x97, 0xe0, 0xca, 0xc5, 0xa2, 0xa5, 0xc3, 0xc1, 0xdc, 0x4d, 0x42, - 0x47, 0xca, 0xea, 0xa4, 0x5a, 0x7b, 0x2a, 0x22, 0x6b, 0xa7, 0x71, 0x54, - 0xbc, 0x53, 0x19, 0x04, 0x1a, 0xb1, 0x6f, 0x03, 0x64, 0x01, 0x0d, 0x93, - 0x0d, 0xe2, 0x75, 0xed, 0x1e, 0x48, 0xa6, 0x0f, 0x9c, 0xbe, 0xbd, 0xa4, - 0x07, 0x05, 0x9d, 0x72, 0x91, 0xd1, 0x65, 0x8b, 0x5a, 0x05, 0x3c, 0x82, - 0xa7, 0x91, 0x8a, 0xea, 0x72, 0x82, 0x0c, 0x1e, 0xc4, 0x2b, 0x3d, 0xbf, - 0xca, 0xdc, 0x91, 0x18, 0x50, 0xc1, 0xb4, 0x6e, 0xcf, 0x22, 0x1d, 0xae, - 0xc5, 0x83, 0xb5, 0xff, 0x77, 0xc2, 0x8b, 0x1b, 0x63, 0x26, 0x43, 0x77, - 0x25, 0x19, 0x0b, 0xb0, 0x3e, 0x1e, 0x1c, 0xab, 0x8c, 0xa8, 0xb7, 0x87, - 0x56, 0xf4, 0x3a, 0x75, 0xf4, 0xaf, 0xd8, 0x61, 0x1e, 0xb2, 0x1c, 0x92, - 0xbc, 0x64, 0xde, 0xec, 0xce, 0xf5, 0xff, 0x4b, 0x5f, 0x7c, 0xe5, 0x9c, - 0xdc, 0xe9, 0xf5, 0xcb, 0xb8, 0x72, 0xfb, 0xb0, 0xd9, 0xfd, 0xb4, 0xf6, - 0xd5, 0x02, 0x0b, 0xcd, 0xbd, 0x42, 0x2e, 0x16, 0x19, 0xec, 0xd5, 0x8a, - 0x22, 0x8e, 0xdb, 0x1e, 0xb1, 0x12, 0x4b, 0xf2, 0xc5, 0x53, 0x0e, 0xff, - 0x21, 0x33, 0x90, 0x86, 0x45, 0xce, 0xfc, 0xbc, 0xbb, 0x24, 0x23, 0xbf, - 0x6d, 0xba, 0xb4, 0x08, 0x11, 0xe1, 0xcf, 0xc9, 0x48, 0x6d, 0x9e, 0xc1, - 0x75, 0x22, 0xa6, 0xb3, 0x47, 0xee, 0xa3, 0x25, 0x0c, 0x37, 0x46, 0x48, - 0xec, 0x02, 0xb1, 0xe6, 0x87, 0x11, 0xf3, 0x15, 0x95, 0xfd, 0x08, 0x79, - 0xbe, 0x77, 0xc1, 0x4e, 0x86, 0xdb, 0xb2, 0x3d, 0x9d, 0xd1, 0xa7, 0x8b, - 0x72, 0xc6, 0xd4, 0x09, 0xc4, 0xab, 0xb6, 0x81, 0xe9, 0x1b, 0x6b, 0xce, - 0xec, 0x3a, 0x11, 0xa1, 0x18, 0x27, 0xdc, 0xfb, 0xb7, 0x23, 0xad, 0x2f, - 0x4e, 0x92, 0xa9, 0x8c, 0x3a, 0x11, 0x0e, 0xf8, 0x5e, 0x7b, 0x13, 0x0c, - 0x22, 0x3c, 0x38, 0xc9, 0x26, 0x39, 0x0d, 0xd6, 0x28, 0x8d, 0xd1, 0x5c, - 0x3e, 0x4f, 0xe3, 0x39, 0xf4, 0x82, 0x4d, 0x2a, 0xbe, 0x3e, 0x6a, 0x6f, - 0x4c, 0x41, 0xf4, 0x6f, 0xc7, 0xc7, 0xc7, 0xe3, 0xe3, 0xeb, 0xb2, 0x95, - 0xde, 0xfc, 0x79, 0xf0, 0xae, 0x3b, 0x36, 0x46, 0x7c, 0x2a, 0x1d, 0xb2, - 0xf8, 0x7b, 0xf7, 0x52, 0x99, 0x2e, 0xad, 0xc0, 0xb1, 0xaa, 0x76, 0x7a, - 0xd5, 0xb9, 0xb7, 0xc2, 0xa4, 0x22, 0x8e, 0xa4, 0xd5, 0x8d, 0xd3, 0xe2, - 0x12, 0xf1, 0xaf, 0x31, 0x83, 0x1e, 0xf6, 0xef, 0x26, 0x0e, 0xfe, 0xe1, - 0xe2, 0xca, 0xc6, 0xf3, 0x78, 0x92, 0xe3, 0xa5, 0x5c, 0x5c, 0x7e, 0x4d, - 0x0d, 0x47, 0xb1, 0x1e, 0x39, 0xc8, 0x9a, 0xcd, 0xa9, 0x11, 0x51, 0xf0, - 0xea, 0xd8, 0xe9, 0x0b, 0x57, 0xfb, 0xaa, 0x58, 0x62, 0x7e, 0x08, 0x9f, - 0x73, 0xe2, 0x56, 0x86, 0x4b, 0xae, 0xbe, 0xce, 0xf5, 0x21, 0xf8, 0xc0, - 0xe6, 0x40, 0x38, 0xcb, 0xc1, 0xbc, 0x3c, 0x4c, 0x32, 0x3c, 0x3e, 0x71, - 0x78, 0xc0, 0xc6, 0xd9, 0xba, 0x4c, 0xe2, 0x27, 0x9d, 0x8c, 0xef, 0xd9, - 0x96, 0x3e, 0x17, 0x72, 0x9c, 0x7e, 0xe9, 0x1c, 0xcc, 0x7f, 0x69, 0xb9, - 0x78, 0x16, 0x1c, 0xc4, 0x1b, 0x9e, 0xff, 0x21, 0x95, 0x8e, 0x4e, 0xe6, - 0xf7, 0xfd, 0x88, 0x25, 0x75, 0x90, 0xe7, 0x22, 0x56, 0xea, 0xa8, 0x97, - 0xd3, 0xf3, 0xfd, 0x28, 0x99, 0xb3, 0x67, 0x1e, 0xf9, 0x30, 0xe2, 0x7b, - 0x3a, 0xba, 0x04, 0x83, 0x99, 0x04, 0x85, 0x2e, 0xab, 0x1c, 0x1c, 0x08, - 0x11, 0x7c, 0x4d, 0x59, 0x40, 0x4e, 0x74, 0xaa, 0xdc, 0x43, 0x1c, 0x0b, - 0xdc, 0x23, 0xf5, 0x1d, 0x70, 0x85, 0xa6, 0xed, 0xef, 0x0f, 0x22, 0xfd, - 0x81, 0x64, 0xdb, 0xc2, 0x76, 0x6b, 0x6e, 0xda, 0x93, 0xbe, 0x84, 0x57, - 0x71, 0xe2, 0x87, 0x0e, 0x17, 0x2c, 0x6b, 0x5f, 0xe4, 0x08, 0xd2, 0xd3, - 0x15, 0xa7, 0xcb, 0x4b, 0x53, 0x5a, 0x70, 0xa4, 0x23, 0x38, 0x3d, 0xc4, - 0xd0, 0xf6, 0xc1, 0xe7, 0x75, 0xec, 0xef, 0xbf, 0xf4, 0xa5, 0x79, 0xe1, - 0x24, 0xe0, 0x6d, 0x7a, 0x45, 0x08, 0x71, 0x2e, 0x30, 0xf1, 0x87, 0xc3, - 0xa1, 0xb3, 0x4f, 0x27, 0x33, 0x81, 0x46, 0x5c, 0xc2, 0x68, 0x8f, 0xa9, - 0x25, 0x8c, 0x92, 0xd5, 0x3e, 0xa7, 0x23, 0x93, 0x5c, 0xc7, 0x0b, 0xfc, - 0xb0, 0xef, 0xf1, 0x17, 0x5c, 0x8e, 0xc8, 0xbc, 0xa1, 0x58, 0x6f, 0x97, - 0xf1, 0x5b, 0x16, 0x2a, 0x13, 0x6d, 0xa3, 0x75, 0xd7, 0xd6, 0x35, 0xd5, - 0x1d, 0x97, 0x3a, 0xfa, 0x2e, 0x69, 0xc2, 0x4b, 0x18, 0xa4, 0xaf, 0xc5, - 0x51, 0x7d, 0x01, 0xee, 0x8a, 0x23, 0x48, 0x52, 0xe5, 0x3f, 0xe4, 0xf0, - 0x49, 0xfd, 0xe7, 0xeb, 0x25, 0x26, 0xb7, 0x78, 0x07, 0x71, 0x09, 0xa6, - 0xbb, 0xf0, 0xdb, 0x13, 0x57, 0x2f, 0x6e, 0xf1, 0x99, 0x3a, 0xdf, 0x21, - 0x4f, 0x42, 0x03, 0xa6, 0x36, 0x78, 0x02, 0x5d, 0xc3, 0x00, 0x29, 0xae, - 0x8e, 0x15, 0xf4, 0x4c, 0xe0, 0xbb, 0xbb, 0x79, 0x5f, 0x58, 0x01, 0x52, - 0x99, 0x5d, 0x69, 0xbd, 0x76, 0xe4, 0x20, 0x7a, 0xe0, 0x69, 0x73, 0x49, - 0xa1, 0xd9, 0x9d, 0xad, 0xfb, 0x38, 0x3f, 0x52, 0x83, 0x15, 0x25, 0x1c, - 0x8c, 0xe9, 0x54, 0xb9, 0x7c, 0x3a, 0xd2, 0x1f, 0xe6, 0xf3, 0x17, 0x5f, - 0x35, 0x98, 0xe5, 0x6a, 0xe3, 0xca, 0x24, 0xb4, 0x84, 0x8c, 0xb5, 0xe6, - 0xe8, 0x76, 0x91, 0xf5, 0x4b, 0xdc, 0xf8, 0x35, 0xe8, 0x6b, 0x1e, 0x3d, - 0x5a, 0x1c, 0xff, 0x5e, 0x7a, 0xe8, 0x9d, 0x0c, 0xe7, 0x0d, 0xad, 0x10, - 0x97, 0x77, 0x41, 0xfc, 0xda, 0x98, 0xfc, 0x17, 0x4d, 0xb8, 0xfe, 0xbe, - 0x1f, 0xd3, 0xda, 0x05, 0xad, 0x0d, 0xf7, 0x95, 0x7a, 0x50, 0xdb, 0x6d, - 0x0b, 0x59, 0x1c, 0x70, 0x0e, 0xf4, 0xe1, 0xe2, 0x1a, 0x95, 0xcd, 0x02, - 0xfd, 0x6c, 0x48, 0x12, 0x7b, 0xe9, 0x2e, 0x45, 0x75, 0xa7, 0x26, 0x55, - 0x26, 0x8b, 0xee, 0x64, 0xf4, 0x00, 0x4c, 0x6c, 0xa6, 0xee, 0xfb, 0x78, - 0x5e, 0x98, 0xa0, 0x1f, 0xce, 0xb8, 0x34, 0x65, 0xa7, 0xb3, 0x96, 0xb7, - 0x29, 0xca, 0x77, 0xc3, 0x14, 0x75, 0x4c, 0x6b, 0x74, 0x36, 0x1c, 0x1d, - 0x48, 0x7a, 0xaf, 0x36, 0x23, 0x09, 0xa7, 0x3b, 0x58, 0xe7, 0x2a, 0x61, - 0x25, 0xc8, 0xe3, 0x93, 0x2a, 0x19, 0x70, 0x2e, 0x94, 0x1a, 0x81, 0xa5, - 0xcb, 0x3e, 0xd3, 0xba, 0xd2, 0xe1, 0x3c, 0x6c, 0x94, 0xb5, 0xe7, 0x07, - 0xd7, 0xc4, 0x99, 0x92, 0x74, 0x98, 0xdd, 0xc7, 0x26, 0x47, 0xb7, 0x8b, - 0x93, 0x76, 0x95, 0x5d, 0x7c, 0x1d, 0x3e, 0x89, 0x8b, 0x14, 0xbe, 0x65, - 0xd3, 0x32, 0x34, 0xa9, 0x41, 0x6d, 0xb5, 0x97, 0x63, 0x9d, 0x2e, 0xa1, - 0x54, 0xad, 0x06, 0x94, 0x8d, 0x7b, 0x95, 0xdd, 0xbe, 0xa4, 0xf8, 0x69, - 0xc4, 0x45, 0xf4, 0xb0, 0x09, 0x26, 0x96, 0x10, 0xae, 0x1d, 0x64, 0xc3, - 0xe0, 0xaa, 0x0e, 0xb9, 0xb5, 0xdb, 0x45, 0xc6, 0x4b, 0x2a, 0xc2, 0x8d, - 0x85, 0xd0, 0x80, 0xcf, 0x2a, 0xae, 0xb9, 0xd9, 0x3c, 0x30, 0x2e, 0xb9, - 0x5c, 0xc9, 0x92, 0xe1, 0x7e, 0x2c, 0x3c, 0x18, 0x7d, 0xe9, 0x69, 0xdb, - 0xbb, 0xcb, 0x9b, 0x86, 0xb3, 0x19, 0xfc, 0x1b, 0x77, 0x8d, 0x88, 0xb9, - 0x32, 0x79, 0x14, 0xdf, 0x6e, 0x0d, 0x37, 0x58, 0x60, 0x50, 0xea, 0x1a, - 0xae, 0xad, 0xa8, 0xbe, 0x1d, 0x67, 0xaf, 0x10, 0xa5, 0xb8, 0xdb, 0x95, - 0x87, 0xb4, 0xff, 0xc3, 0x43, 0x4c, 0x22, 0x1f, 0xba, 0xcf, 0x89, 0x37, - 0xa4, 0x2e, 0x84, 0xb2, 0x68, 0xc4, 0xa7, 0xa7, 0x64, 0x6a, 0x2d, 0xd2, - 0x09, 0x91, 0xb4, 0x07, 0xe4, 0x05, 0x92, 0x21, 0x5d, 0x4b, 0xab, 0x4d, - 0x5f, 0xd8, 0xaa, 0xec, 0x94, 0x96, 0x7b, 0x04, 0x7b, 0x10, 0x73, 0x79, - 0xf4, 0x10, 0x9c, 0x50, 0x03, 0x6e, 0xd1, 0xce, 0xdb, 0xb4, 0x9d, 0x77, - 0x4c, 0x10, 0xc2, 0x15, 0x4e, 0x95, 0x5e, 0xb2, 0xfe, 0x29, 0x87, 0xb6, - 0xe7, 0x74, 0xf6, 0xda, 0xb6, 0x0a, 0x39, 0xa3, 0x54, 0xca, 0xe5, 0xf6, - 0x17, 0x68, 0x9c, 0xe1, 0x57, 0xc7, 0xea, 0xe7, 0xf9, 0x9d, 0x78, 0x87, - 0x97, 0x53, 0x2d, 0x63, 0x1f, 0x52, 0x1b, 0x82, 0x53, 0x36, 0xa9, 0xed, - 0xcd, 0x1b, 0x64, 0x8d, 0x2f, 0x25, 0x3b, 0xab, 0xe3, 0x03, 0x5b, 0xb1, - 0x22, 0x6b, 0xbb, 0x9f, 0xdd, 0x0f, 0x2e, 0xb2, 0x24, 0x0f, 0xdf, 0x6d, - 0xd6, 0x6d, 0xd5, 0x9f, 0x2c, 0x10, 0xf4, 0x19, 0x05, 0xb1, 0x4f, 0x5b, - 0xef, 0xd6, 0xfb, 0x94, 0x33, 0x28, 0xeb, 0x6c, 0x17, 0x49, 0x61, 0xff, - 0xfe, 0x48, 0xe2, 0x37, 0x17, 0x86, 0x1c, 0x8c, 0x19, 0xec, 0x7c, 0x7b, - 0x85, 0x7c, 0xb3, 0xcf, 0x65, 0x23, 0x58, 0xea, 0x77, 0x3a, 0xa8, 0xd9, - 0xf2, 0xf6, 0xec, 0x87, 0xce, 0x34, 0x7a, 0x6e, 0x6d, 0x68, 0x6c, 0x3d, - 0x57, 0xdb, 0xcd, 0xfc, 0x8f, 0x49, 0x5d, 0x0b, 0x3c, 0xa9, 0x8b, 0xe7, - 0x0d, 0xc7, 0xaf, 0x33, 0x36, 0x93, 0xed, 0x6f, 0x3d, 0x71, 0xc7, 0xad, - 0x0b, 0x88, 0xb8, 0xe5, 0x30, 0x25, 0x0a, 0xdf, 0x18, 0x5c, 0x73, 0x3e, - 0x8e, 0x23, 0x60, 0xdf, 0xe1, 0x06, 0x0b, 0x9c, 0x11, 0xed, 0x65, 0xb5, - 0xb3, 0xec, 0xe7, 0x3d, 0xae, 0x67, 0x38, 0xf5, 0xf5, 0x65, 0xdd, 0x3f, - 0x88, 0x0d, 0xe7, 0xb9, 0x2e, 0x95, 0x70, 0xb1, 0xb8, 0x24, 0xf9, 0xbd, - 0xf4, 0xe5, 0xb1, 0x4e, 0x85, 0x1f, 0xd2, 0x2a, 0xd2, 0xf7, 0xfa, 0x21, - 0xcb, 0x19, 0x2d, 0x56, 0xb2, 0xbf, 0xfd, 0xd8, 0x72, 0x84, 0x79, 0xdc, - 0xd6, 0x6f, 0x01, 0xc8, 0x49, 0xcf, 0x2b, 0x8e, 0x12, 0xc0, 0x7a, 0xee, - 0xad, 0xa5, 0x87, 0xdf, 0x30, 0x7b, 0xf0, 0xc7, 0x84, 0xe3, 0x21, 0xd9, - 0x86, 0x6d, 0x60, 0xba, 0x2e, 0xec, 0x25, 0x9d, 0x8d, 0x4a, 0x16, 0xef, - 0x20, 0x32, 0x35, 0xcf, 0x0b, 0xfb, 0x3d, 0x92, 0xd5, 0x1f, 0x5a, 0xbd, - 0x3e, 0xa0, 0x31, 0x60, 0xec, 0x6c, 0x2e, 0xa9, 0xf0, 0x71, 0x9a, 0xfc, - 0x9e, 0x5b, 0x30, 0xa0, 0xfb, 0x7c, 0x4d, 0x67, 0x06, 0x03, 0xc9, 0xc7, - 0xb9, 0x46, 0x58, 0x7e, 0x8b, 0xf2, 0xe8, 0x1c, 0xf1, 0x05, 0xbd, 0x04, - 0x17, 0xf1, 0xfc, 0x55, 0xa2, 0x72, 0x5e, 0xe8, 0x8c, 0x8e, 0x7e, 0xd8, - 0x2c, 0xe7, 0x49, 0x3c, 0x69, 0xee, 0x6b, 0xb8, 0x3a, 0x0d, 0xb1, 0xea, - 0xf4, 0xd1, 0x7a, 0x7c, 0x0a, 0x25, 0x58, 0xa6, 0xcc, 0x6e, 0x9b, 0x04, - 0x23, 0xe8, 0x7b, 0x03, 0x21, 0x20, 0x35, 0x9e, 0x58, 0x5f, 0xcf, 0x41, - 0xb7, 0x41, 0xd7, 0x5c, 0x42, 0xd0, 0x26, 0x5e, 0xac, 0xfc, 0xff, 0x92, - 0x67, 0x59, 0x89, 0xd8, 0x4f, 0xc8, 0xce, 0x26, 0xe0, 0x20, 0x1c, 0xbf, - 0xd4, 0xf6, 0x3f, 0x93, 0x53, 0x5a, 0xde, 0xf8, 0xc3, 0x45, 0x4b, 0x59, - 0x46, 0x2d, 0x6c, 0x3a, 0x42, 0x0f, 0x69, 0xc0, 0xd9, 0x5e, 0x97, 0x11, - 0x36, 0x5f, 0xc5, 0x78, 0xf1, 0xa3, 0x1a, 0x2b, 0x11, 0xb2, 0xdf, 0x87, - 0x7c, 0x6b, 0xff, 0x7e, 0x38, 0xd2, 0xcc, 0x49, 0xe9, 0x34, 0xf8, 0xed, - 0xdd, 0xd9, 0x01, 0x2d, 0x74, 0x1a, 0xca, 0xd0, 0x4e, 0x73, 0xe2, 0x32, - 0x9a, 0x83, 0xdc, 0x54, 0xc2, 0x49, 0xa3, 0x08, 0x23, 0x4c, 0x2d, 0xf8, - 0x3b, 0x50, 0x8c, 0x6c, 0x2b, 0xbc, 0x63, 0x29, 0x9e, 0x2b, 0xa2, 0xc3, - 0xb0, 0x95, 0x19, 0xdb, 0x59, 0x5b, 0x9e, 0xdd, 0xe0, 0xfe, 0xc2, 0x56, - 0xd4, 0x0a, 0xd4, 0x4c, 0xb6, 0xbc, 0x42, 0xbf, 0x5d, 0xee, 0x41, 0x6c, - 0xde, 0x59, 0x36, 0xac, 0xdf, 0xd0, 0xef, 0xec, 0xb7, 0x32, 0xfd, 0xd3, - 0x7c, 0xd3, 0x8d, 0x8d, 0x14, 0x3d, 0x36, 0xf5, 0xb8, 0x6d, 0xf5, 0xe3, - 0x6f, 0x66, 0x88, 0xd2, 0x11, 0x0e, 0x9b, 0xce, 0xea, 0x03, 0x8f, 0xc4, - 0x6d, 0xb8, 0xfe, 0xa3, 0x15, 0xaa, 0xad, 0x6f, 0x07, 0x00, 0x62, 0x43, - 0xe5, 0x16, 0x1f, 0x62, 0x61, 0xdf, 0x60, 0x57, 0x16, 0x60, 0x84, 0xca, - 0xae, 0x0e, 0x64, 0x38, 0x00, 0x6f, 0xb2, 0x25, 0x83, 0xef, 0x3c, 0x70, - 0x2a, 0x71, 0x08, 0xb2, 0xd0, 0x22, 0x50, 0x06, 0x85, 0x31, 0xca, 0x85, - 0xae, 0x0d, 0x6d, 0xb9, 0x65, 0x88, 0xed, 0x00, 0x3a, 0x7e, 0x4c, 0xbd, - 0x9a, 0xfa, 0x76, 0xc0, 0x76, 0xdd, 0x2b, 0xd8, 0xea, 0xf7, 0x47, 0x8a, - 0x53, 0x8e, 0xf2, 0xa5, 0xff, 0x04, 0xaa, 0x59, 0xc8, 0xf3, 0x42, 0x98, - 0x2c, 0xa8, 0xa6, 0xea, 0x66, 0xec, 0x25, 0x60, 0xd4, 0x74, 0xf5, 0x65, - 0xb5, 0x47, 0x66, 0xf9, 0x42, 0x32, 0x54, 0xc8, 0x80, 0xac, 0x35, 0x87, - 0x53, 0xb7, 0x2d, 0x82, 0x71, 0x2a, 0x25, 0x20, 0x05, 0x03, 0x51, 0xbe, - 0x9d, 0x81, 0x0b, 0xb7, 0x19, 0xc3, 0x5e, 0xb0, 0xff, 0x2f, 0xbc, 0x55, - 0x95, 0x3b, 0xae, 0xa2, 0x04, 0x0a, 0x6e, 0xbf, 0xd5, 0x3c, 0xb7, 0xe5, - 0xb0, 0xa7, 0xf2, 0x3f, 0x69, 0x84, 0x0f, 0xbf, 0x4c, 0xb0, 0x6d, 0x31, - 0xe2, 0x18, 0xa2, 0xb8, 0x01, 0x90, 0xcc, 0xcd, 0x08, 0x6a, 0x54, 0xc1, - 0x56, 0xb1, 0x11, 0x26, 0x57, 0xc0, 0xb4, 0x4c, 0x71, 0xd5, 0xda, 0xa1, - 0xfc, 0x4f, 0xb7, 0x3d, 0x2d, 0x67, 0x35, 0xdc, 0x0d, 0xe7, 0x33, 0xfd, - 0x98, 0x3b, 0x21, 0x23, 0x98, 0x30, 0x48, 0xb0, 0x60, 0x88, 0xb9, 0xfd, - 0xd5, 0x09, 0xf9, 0x6d, 0x2e, 0x73, 0xbc, 0x48, 0x1c, 0xe5, 0x02, 0xff, - 0x14, 0xe7, 0x0c, 0xa5, 0x33, 0x8a, 0xd4, 0xf0, 0x2e, 0x17, 0x71, 0x9c, - 0x1d, 0x68, 0xb8, 0xc2, 0x23, 0x1d, 0xc4, 0xe9, 0x30, 0x60, 0xa6, 0xcf, - 0xef, 0x1f, 0x00, 0xd4, 0x12, 0x1a, 0x52, 0x88, 0xf9, 0x19, 0x48, 0xbe, - 0xa5, 0x98, 0x29, 0x9c, 0xec, 0x1d, 0x95, 0xa3, 0x83, 0xf9, 0x1d, 0x30, - 0x0b, 0xb3, 0xee, 0x99, 0x09, 0x41, 0x3a, 0x6a, 0xb7, 0x92, 0x81, 0x00, - 0xcb, 0x4d, 0x9b, 0x86, 0xcc, 0x88, 0xe3, 0x1e, 0x92, 0xc8, 0x8b, 0xbb, - 0xc8, 0x4e, 0x9b, 0x9e, 0x10, 0xa5, 0xd2, 0x9b, 0x53, 0xe1, 0x8e, 0x1a, - 0x9d, 0x0c, 0x55, 0x93, 0xb6, 0x33, 0x68, 0x10, 0x1c, 0x40, 0x40, 0xdc, - 0x7b, 0xb8, 0xd5, 0xe6, 0x03, 0xdd, 0x15, 0x88, 0xe3, 0x8a, 0xd3, 0xd9, - 0xab, 0x3b, 0xfa, 0x2d, 0x8b, 0x52, 0xe8, 0x90, 0xee, 0xcf, 0x39, 0x92, - 0x70, 0xe2, 0xde, 0x2e, 0x9b, 0x41, 0xbb, 0xf9, 0xe8, 0xba, 0x61, 0xb7, - 0x32, 0x98, 0x64, 0xab, 0xab, 0x86, 0x01, 0xdf, 0x16, 0x73, 0xf3, 0x07, - 0xc1, 0xed, 0xdc, 0xda, 0xc3, 0xcd, 0xe7, 0x4d, 0xe7, 0x9b, 0xb7, 0x58, - 0x86, 0xd9, 0xe2, 0x02, 0x73, 0xe8, 0x42, 0x98, 0x03, 0x56, 0x8f, 0xfe, - 0x72, 0x26, 0x3d, 0xe7, 0x24, 0xff, 0x86, 0xea, 0x83, 0x9c, 0x8d, 0x60, - 0x2a, 0xc2, 0x2f, 0xe4, 0x51, 0xff, 0x9e, 0x17, 0xae, 0x6b, 0x04, 0xb7, - 0x9b, 0x0d, 0xf8, 0xd9, 0xff, 0x76, 0xbb, 0xdb, 0xd4, 0xdf, 0x07, 0x10, - 0x6d, 0x64, 0xb7, 0x60, 0x6e, 0x3e, 0x91, 0x19, 0xf9, 0x65, 0x78, 0xae, - 0xd4, 0xa8, 0xd4, 0x6e, 0x53, 0x1c, 0xe6, 0x74, 0xf8, 0x4e, 0xa2, 0xdf, - 0xb8, 0x30, 0x41, 0x66, 0x12, 0x33, 0x00, 0xf4, 0x33, 0x00, 0xed, 0x76, - 0x0e, 0x4a, 0x20, 0x76, 0x83, 0x23, 0xae, 0xbb, 0x74, 0x18, 0x11, 0xa0, - 0xe2, 0x89, 0xa2, 0x81, 0x04, 0xf5, 0x72, 0xc7, 0xb5, 0xa7, 0xcd, 0xf0, - 0x44, 0x07, 0xd5, 0x47, 0x4f, 0x37, 0xfb, 0x27, 0xdd, 0x9e, 0x21, 0xfe, - 0xf7, 0x94, 0xef, 0x4b, 0x41, 0x80, 0xa4, 0xf3, 0xc1, 0x37, 0xbc, 0xdb, - 0xa0, 0x04, 0x5b, 0x73, 0xba, 0x08, 0x5f, 0x20, 0xbd, 0x04, 0x60, 0xb2, - 0x6e, 0x01, 0xe3, 0x48, 0x4f, 0xc7, 0x72, 0x6c, 0xe3, 0xe9, 0x30, 0xed, - 0x9e, 0x4b, 0x23, 0xce, 0xb0, 0xf6, 0x14, 0x9a, 0xf1, 0xd0, 0x3a, 0x56, - 0xe2, 0x63, 0x22, 0xb1, 0xea, 0x04, 0x29, 0x70, 0xec, 0xf0, 0x76, 0x1c, - 0x5e, 0x9c, 0x6b, 0x06, 0x61, 0x62, 0xd8, 0x05, 0xca, 0x43, 0xdf, 0x51, - 0x6c, 0x5e, 0x79, 0x37, 0x9d, 0x06, 0x03, 0x35, 0x6d, 0x98, 0xb9, 0x84, - 0xa7, 0x92, 0xb7, 0x4e, 0x9c, 0x88, 0x1b, 0x25, 0x20, 0x0e, 0xb0, 0xef, - 0xf5, 0x4a, 0xa9, 0xcc, 0x40, 0xe1, 0xa6, 0xe8, 0x05, 0x2b, 0x67, 0x25, - 0x2c, 0xeb, 0x25, 0xa4, 0x82, 0x4b, 0xc0, 0x2a, 0xe4, 0x68, 0x0f, 0x83, - 0x12, 0x47, 0xad, 0x10, 0x6d, 0x9c, 0x30, 0x4c, 0xb4, 0x91, 0xb5, 0x35, - 0x72, 0xa2, 0xa4, 0x9a, 0x9d, 0x72, 0x98, 0x6d, 0x58, 0x98, 0xd1, 0x91, - 0x66, 0xe8, 0x17, 0xf0, 0x06, 0x35, 0xf5, 0xd1, 0xbb, 0xe9, 0x02, 0x45, - 0x8b, 0xfb, 0x13, 0xad, 0x17, 0xe2, 0xb5, 0x08, 0x7b, 0xd3, 0xbd, 0xb6, - 0xdc, 0x87, 0xc4, 0x0e, 0x07, 0x8a, 0xd0, 0x2f, 0xdf, 0x0e, 0x01, 0xe2, - 0x1c, 0x3d, 0xa9, 0x35, 0x3c, 0xc9, 0xae, 0xf4, 0x53, 0xb9, 0x4e, 0x5c, - 0x9c, 0x97, 0x38, 0x6b, 0xd0, 0x1e, 0x55, 0xa6, 0xb4, 0x82, 0x19, 0xd0, - 0x6d, 0x32, 0x39, 0x3d, 0x2f, 0x97, 0xcb, 0xda, 0x83, 0x29, 0x7b, 0xbe, - 0xb5, 0x0e, 0x1e, 0xc8, 0x93, 0xe9, 0x25, 0x56, 0x34, 0x32, 0x01, 0x54, - 0xda, 0xb0, 0x58, 0x62, 0xbe, 0xf5, 0xb1, 0xb7, 0xed, 0x04, 0xee, 0x37, - 0xf5, 0x3e, 0xfa, 0xad, 0x4e, 0xef, 0x8a, 0xa8, 0x6c, 0x16, 0xff, 0x20, - 0x33, 0x22, 0xa2, 0x93, 0x25, 0x4e, 0x17, 0x1a, 0xb2, 0xb1, 0x96, 0x75, - 0xa4, 0x7b, 0x99, 0x66, 0x3a, 0x7f, 0x6b, 0x8b, 0xfa, 0xdf, 0x12, 0x4d, - 0x13, 0x27, 0x0a, 0x74, 0x8d, 0x1b, 0x27, 0xd5, 0xf8, 0x95, 0x49, 0xb4, - 0x5f, 0xc5, 0x1e, 0xa2, 0x16, 0x62, 0x52, 0x81, 0x6c, 0xd3, 0xe3, 0x51, - 0xe4, 0xcf, 0x71, 0x75, 0xd8, 0xd0, 0xc1, 0xe4, 0x84, 0xd7, 0x79, 0xcc, - 0xd8, 0xf9, 0xc9, 0x9a, 0x42, 0x1c, 0xe4, 0x6e, 0x7e, 0xeb, 0x56, 0xce, - 0xb0, 0x9a, 0x86, 0x71, 0x95, 0xc8, 0x4b, 0xb4, 0x3d, 0x3f, 0x1c, 0xf7, - 0x92, 0xfd, 0x28, 0x5a, 0x68, 0x0f, 0x64, 0x14, 0x50, 0x94, 0xe4, 0xf9, - 0x04, 0x62, 0x4e, 0x0d, 0xa1, 0x2c, 0x5a, 0xf7, 0x7a, 0xf1, 0xb9, 0x4f, - 0xeb, 0x05, 0x31, 0x16, 0x20, 0x4c, 0x34, 0x98, 0x27, 0xa3, 0xaa, 0x0c, - 0x7e, 0xf5, 0x53, 0x98, 0x2d, 0x98, 0xbf, 0x83, 0xba, 0x63, 0x6f, 0x5b, - 0x4d, 0xc5, 0x2d, 0x5e, 0xe1, 0xfc, 0xc0, 0xf6, 0x22, 0xf8, 0xca, 0xe1, - 0xf7, 0x63, 0x71, 0x42, 0x48, 0xb3, 0xa1, 0x7e, 0x58, 0x28, 0xd0, 0x4d, - 0x0e, 0x74, 0x9f, 0x40, 0x70, 0x48, 0xd4, 0x18, 0x10, 0xb1, 0x82, 0x87, - 0xf8, 0x2b, 0x1e, 0x04, 0x1c, 0x02, 0x5a, 0x12, 0x72, 0xe6, 0x62, 0x0d, - 0x8b, 0xf9, 0x08, 0x79, 0x47, 0xe8, 0x98, 0x2e, 0x70, 0xec, 0x98, 0x55, - 0x11, 0xc4, 0xeb, 0xe2, 0xca, 0x47, 0xfa, 0x76, 0xf8, 0x31, 0x46, 0x18, - 0x58, 0xa2, 0xa1, 0xe6, 0xc8, 0xd4, 0xb8, 0xd1, 0x7c, 0xd9, 0x45, 0xd9, - 0x28, 0xd7, 0xc3, 0x79, 0x7e, 0xe1, 0x62, 0xd5, 0x07, 0xf1, 0x3c, 0xa9, - 0xdf, 0xf3, 0xe5, 0xc2, 0x76, 0x46, 0x13, 0x3d, 0x71, 0x4b, 0x2a, 0x1b, - 0xfe, 0x1b, 0xc7, 0x31, 0xd8, 0x1e, 0xdf, 0x38, 0xf1, 0x89, 0x3d, 0x25, - 0xf7, 0xfc, 0xb6, 0x16, 0x5e, 0xff, 0xaf, 0x0d, 0x5d, 0x1e, 0xa9, 0xff, - 0xa6, 0xd7, 0x7f, 0xaf, 0xfe, 0xfd, 0x3e, 0xe9, 0xce, 0x8c, 0x23, 0xf7, - 0x13, 0x28, 0xbf, 0x7b, 0xf4, 0x18, 0x98, 0x24, 0xe9, 0x11, 0xa2, 0xb9, - 0x39, 0x2a, 0xdd, 0xd2, 0x4b, 0x0c, 0x28, 0xce, 0x49, 0x12, 0xbf, 0xf8, - 0xdd, 0x66, 0xa3, 0x71, 0xdf, 0x7f, 0x1f, 0x62, 0xbe, 0xbf, 0xeb, 0x20, - 0x13, 0x4d, 0xda, 0xcc, 0x96, 0x99, 0x5b, 0x5e, 0xfc, 0x32, 0xde, 0x9f, - 0xf3, 0x20, 0xc3, 0x71, 0x64, 0x17, 0x50, 0xa3, 0x92, 0xc1, 0xae, 0xa2, - 0x69, 0x8f, 0xf3, 0xc3, 0x06, 0xa2, 0x31, 0x60, 0xa9, 0x4b, 0xba, 0x5a, - 0x76, 0x9e, 0x8b, 0xeb, 0x0b, 0x5a, 0xb1, 0x9a, 0x15, 0x57, 0xb5, 0x76, - 0x9b, 0xa8, 0x4e, 0x6e, 0x38, 0x87, 0xd9, 0x9f, 0xb8, 0xb2, 0xbf, 0x3f, - 0xbd, 0xae, 0x61, 0xa0, 0xae, 0x77, 0x49, 0x6b, 0x3b, 0xd6, 0xad, 0x71, - 0xb1, 0xcb, 0x4b, 0x50, 0x0b, 0x57, 0x7b, 0x9e, 0x7b, 0xdd, 0xb1, 0xb6, - 0x1f, 0x4a, 0x30, 0xf6, 0x2d, 0x2e, 0x57, 0x38, 0x62, 0x5c, 0x5b, 0xe8, - 0xc5, 0xdc, 0x31, 0x49, 0x63, 0x3a, 0x1c, 0xb1, 0x05, 0xec, 0x98, 0x04, - 0xab, 0x54, 0x6c, 0x02, 0x43, 0x1d, 0x4c, 0x42, 0x0c, 0xa9, 0x84, 0x6e, - 0x9f, 0x9d, 0xf3, 0xd2, 0x7d, 0xbf, 0xc5, 0x99, 0x4a, 0x83, 0xfb, 0x9e, - 0xc7, 0x93, 0x8c, 0x32, 0x19, 0x22, 0xbf, 0xbc, 0x03, 0x61, 0x60, 0x70, - 0x06, 0x49, 0x48, 0xa7, 0x50, 0xee, 0x32, 0x0a, 0x94, 0x70, 0x98, 0xca, - 0x50, 0x89, 0xd3, 0x25, 0xa3, 0xdf, 0xa7, 0xb8, 0x9e, 0xe7, 0x50, 0x4c, - 0xd5, 0xf0, 0x2b, 0x4f, 0x92, 0x58, 0x6a, 0x34, 0x50, 0x1a, 0x7a, 0x44, - 0x4b, 0xd8, 0xb1, 0xbf, 0xf7, 0x81, 0xd3, 0xf5, 0x1e, 0x48, 0xa5, 0xe1, - 0x25, 0x2c, 0x97, 0xf5, 0x22, 0x8d, 0x77, 0xca, 0x8f, 0x99, 0x7c, 0x90, - 0x5e, 0xa4, 0xb2, 0x60, 0x60, 0xd2, 0x7c, 0x2a, 0x20, 0xff, 0xab, 0xd6, - 0x5e, 0x91, 0xf2, 0xa3, 0x3b, 0x8d, 0x72, 0xa8, 0x99, 0xe1, 0xf3, 0xb6, - 0x07, 0x5a, 0x22, 0x2d, 0x27, 0x5b, 0xca, 0x7e, 0x72, 0x4d, 0x19, 0x60, - 0x4b, 0xf7, 0x4d, 0xdf, 0xa4, 0x0b, 0x35, 0x98, 0x7d, 0xcc, 0x8c, 0xcd, - 0x44, 0xf1, 0x41, 0xa4, 0x8e, 0xf6, 0xee, 0x9c, 0x95, 0x11, 0x03, 0xf2, - 0x60, 0xf6, 0xee, 0x37, 0x3f, 0x05, 0xa2, 0x77, 0x1e, 0x4f, 0xee, 0xfc, - 0x38, 0xe0, 0x7c, 0xbc, 0x1f, 0xba, 0x24, 0x62, 0x57, 0xe8, 0x97, 0x07, - 0x1c, 0x0a, 0xa0, 0x45, 0x1f, 0xbd, 0xb5, 0x1e, 0xba, 0x18, 0xee, 0x40, - 0xab, 0x80, 0xe8, 0xfd, 0xd1, 0xaf, 0x4d, 0x6c, 0x7a, 0x50, 0xcd, 0x80, - 0x2e, 0x06, 0x60, 0xf9, 0x53, 0xcb, 0xed, 0x7e, 0x19, 0x36, 0x72, 0x78, - 0x51, 0x6a, 0x03, 0xc2, 0x6f, 0x3a, 0xca, 0x7d, 0x17, 0x6a, 0x40, 0xc4, - 0x8a, 0xb7, 0x63, 0xad, 0x70, 0x76, 0x1c, 0xae, 0x42, 0x57, 0x8d, 0xe3, - 0xd8, 0xf9, 0xe3, 0xa4, 0xbb, 0x1e, 0x9f, 0x51, 0xf5, 0xfd, 0x9f, 0xfd, - 0x38, 0x75, 0x7e, 0xdf, 0xd0, 0xe1, 0x29, 0xe4, 0xdd, 0xab, 0xfd, 0xe7, - 0x06, 0x81, 0xae, 0xdf, 0xc0, 0xbc, 0xac, 0xae, 0x1a, 0xdc, 0x8e, 0x18, - 0xe2, 0x49, 0x08, 0xae, 0xfd, 0x0e, 0x0f, 0x96, 0x58, 0xa7, 0xb0, 0x3e, - 0x74, 0x84, 0xab, 0x9b, 0xed, 0x82, 0x7e, 0x09, 0x5e, 0x61, 0xec, 0xfa, - 0x42, 0x7b, 0xbf, 0x22, 0xc0, 0xb8, 0xa4, 0x71, 0xe7, 0xf0, 0x05, 0x30, - 0x47, 0x79, 0x62, 0xaf, 0xdf, 0xef, 0xf0, 0xd3, 0x44, 0xe0, 0x34, 0xae, - 0x74, 0xe7, 0xc6, 0xd4, 0x00, 0x5f, 0x47, 0x5f, 0x2c, 0xe7, 0x79, 0x9d, - 0x3b, 0xd8, 0x69, 0x55, 0x1a, 0xfa, 0xc5, 0x61, 0x5c, 0x4b, 0x6e, 0x70, - 0x0f, 0xd1, 0x03, 0x6a, 0xae, 0x38, 0x11, 0x43, 0x1d, 0x1a, 0xe5, 0x31, - 0xab, 0x47, 0x1c, 0xbc, 0x77, 0x30, 0x39, 0x72, 0x2e, 0x24, 0x05, 0x30, - 0x41, 0x7a, 0x30, 0xdc, 0x8f, 0xf5, 0xbb, 0x24, 0xc7, 0x15, 0x79, 0x08, - 0x31, 0x3f, 0x3f, 0xd8, 0x47, 0x8f, 0xcb, 0x6e, 0x90, 0xe1, 0x29, 0x3f, - 0xba, 0x05, 0x66, 0x73, 0x3a, 0x5d, 0x78, 0x34, 0x5e, 0x09, 0x3a, 0xc8, - 0x41, 0x0e, 0xca, 0x12, 0x47, 0x8b, 0x41, 0xdb, 0xd0, 0x86, 0xdf, 0x3a, - 0x84, 0x7b, 0x2d, 0xbe, 0x10, 0xa0, 0x01, 0xfb, 0x62, 0xf8, 0x71, 0xe4, - 0x0c, 0xdb, 0xa1, 0x7f, 0x30, 0xf0, 0x9d, 0x76, 0x31, 0x18, 0x1d, 0x58, - 0xc5, 0x3e, 0x12, 0xab, 0xb9, 0x1f, 0x94, 0x1b, 0x8f, 0xa3, 0x1f, 0x48, - 0x23, 0x7e, 0xc9, 0x19, 0x75, 0x25, 0x18, 0xda, 0xbb, 0xdf, 0x3d, 0x78, - 0x87, 0x63, 0x46, 0x19, 0xa2, 0x9c, 0x6f, 0x3a, 0x28, 0x4c, 0x6e, 0x66, - 0x1d, 0x97, 0x89, 0xf1, 0xe1, 0xba, 0x8e, 0x23, 0xa0, 0xd4, 0x7b, 0x0c, - 0xf8, 0x94, 0x27, 0x1b, 0xc3, 0xce, 0xee, 0x02, 0x44, 0x38, 0x61, 0x65, - 0x1e, 0x7d, 0xd9, 0x88, 0xd8, 0xbf, 0xfe, 0x48, 0xd9, 0x4c, 0xae, 0x7e, - 0x73, 0xbf, 0xcc, 0xe5, 0x63, 0x83, 0x62, 0xd4, 0xa7, 0x0d, 0xb7, 0x2c, - 0xcf, 0x53, 0x03, 0xfa, 0x29, 0x05, 0x75, 0xe7, 0x58, 0x62, 0x83, 0x19, - 0x30, 0xba, 0x0a, 0xb0, 0x35, 0xe8, 0x93, 0x9e, 0x15, 0xd9, 0x19, 0x9a, - 0xfd, 0xce, 0x07, 0x47, 0xf5, 0xf3, 0xe1, 0xb3, 0x03, 0x06, 0xf8, 0xb8, - 0xcc, 0x14, 0x48, 0xa0, 0x10, 0xce, 0x07, 0x27, 0x69, 0x66, 0xa2, 0x91, - 0x9e, 0x50, 0xd7, 0x49, 0xe5, 0xce, 0xe7, 0x72, 0xb9, 0xc4, 0x7c, 0xc6, - 0x8a, 0xba, 0x5c, 0x37, 0x2e, 0x88, 0x9f, 0x98, 0x27, 0x79, 0xa7, 0xe0, - 0x82, 0x38, 0x7e, 0x5d, 0x4f, 0xca, 0x99, 0x0d, 0x46, 0xe8, 0x98, 0x02, - 0x7e, 0xb6, 0xa7, 0xb3, 0x6b, 0x0b, 0x3b, 0xb5, 0xa9, 0x74, 0x86, 0xd6, - 0x30, 0xdc, 0x90, 0xd1, 0x92, 0xea, 0xd9, 0xaa, 0x22, 0xc6, 0x04, 0x7e, - 0x75, 0xe0, 0x7e, 0x76, 0xcc, 0xcd, 0x23, 0x57, 0x36, 0x0a, 0x53, 0x08, - 0x20, 0x92, 0x0b, 0x6b, 0x2c, 0x2a, 0x0e, 0x30, 0x6f, 0x77, 0x47, 0x06, - 0x8a, 0x4b, 0xf5, 0xe2, 0xe5, 0xe7, 0x11, 0x87, 0x4c, 0x02, 0x85, 0xed, - 0x77, 0x58, 0x7e, 0x87, 0x5d, 0xdc, 0x4c, 0x02, 0x8a, 0xf9, 0x62, 0xc7, - 0x74, 0xf3, 0xd4, 0x44, 0x30, 0x90, 0x6c, 0xe3, 0x94, 0x98, 0xc1, 0xa8, - 0x79, 0x47, 0x1a, 0xbb, 0x45, 0x78, 0x01, 0x3a, 0x8c, 0x8d, 0x91, 0xa0, - 0x94, 0x4f, 0xa7, 0xfe, 0xae, 0x7e, 0xfe, 0xd2, 0x0f, 0x19, 0x45, 0xaa, - 0x22, 0x3f, 0x0f, 0x5c, 0x3e, 0xbc, 0xac, 0x0c, 0x9b, 0xc5, 0xe5, 0x2c, - 0x30, 0xa8, 0xae, 0xf3, 0x14, 0x54, 0xd7, 0x65, 0x71, 0xf6, 0x89, 0xa0, - 0xc1, 0x11, 0xba, 0x00, 0x82, 0xe8, 0x45, 0x10, 0xeb, 0xd4, 0x44, 0x69, - 0x19, 0x27, 0xdd, 0x89, 0xd3, 0x3a, 0x06, 0x8b, 0xf3, 0xf8, 0x4f, 0x92, - 0xfa, 0xc9, 0xb2, 0x13, 0x7a, 0x44, 0xc2, 0x43, 0xc1, 0x69, 0x59, 0xcf, - 0x64, 0x4d, 0xa5, 0x3b, 0x27, 0xa6, 0xa4, 0xda, 0x34, 0x04, 0xce, 0x8c, - 0x2c, 0xb7, 0x0b, 0x8a, 0x10, 0xf2, 0xe0, 0xfa, 0xc9, 0x4b, 0x7b, 0x2c, - 0xbf, 0x50, 0x86, 0x44, 0x14, 0x6e, 0x6d, 0xf8, 0x8a, 0x10, 0x72, 0x07, - 0x01, 0xb8, 0xab, 0xca, 0x70, 0xea, 0xc8, 0x1c, 0x6f, 0xfb, 0x05, 0x28, - 0x27, 0xfb, 0xf9, 0x78, 0x80, 0xe7, 0xa8, 0x72, 0x92, 0x56, 0xc4, 0x1a, - 0x6a, 0x80, 0x32, 0x09, 0xda, 0x67, 0x03, 0x0a, 0x6e, 0x0a, 0xcc, 0xd5, - 0x99, 0xf3, 0x38, 0x17, 0x67, 0x2a, 0xe7, 0xaf, 0xf2, 0xff, 0x8b, 0x73, - 0xcf, 0xde, 0x29, 0x0d, 0x29, 0xc5, 0xbf, 0x35, 0x15, 0x12, 0xbf, 0x52, - 0x04, 0x7d, 0xb9, 0x6a, 0x73, 0xcf, 0x1d, 0x8e, 0xde, 0xa1, 0x21, 0xbd, - 0xfa, 0xea, 0x88, 0xc1, 0x07, 0xf5, 0x10, 0x4a, 0xab, 0xe0, 0x2b, 0xa4, - 0x61, 0x1c, 0x9c, 0x50, 0x08, 0x29, 0x81, 0xf2, 0x62, 0xc8, 0x4b, 0xca, - 0x55, 0x5e, 0xec, 0xbe, 0xb2, 0x1b, 0xf1, 0xf3, 0x65, 0x3c, 0x02, 0xc9, - 0xc4, 0x36, 0x1d, 0x0f, 0xa8, 0xe0, 0x80, 0x22, 0x14, 0x58, 0xd0, 0x47, - 0xaa, 0x1c, 0x7c, 0xa1, 0xcb, 0x31, 0xcc, 0xd0, 0x1f, 0xf2, 0xa2, 0xfa, - 0x90, 0xd7, 0x39, 0xef, 0x34, 0x57, 0x71, 0x87, 0x1f, 0xfb, 0x6f, 0xf3, - 0x01, 0xba, 0x02, 0x5a, 0x2f, 0xd0, 0x5b, 0x80, 0x89, 0x13, 0xa0, 0xe1, - 0xed, 0x67, 0x2a, 0x8f, 0x27, 0x0c, 0x76, 0x81, 0x1f, 0xe9, 0x55, 0xfc, - 0xf1, 0x3c, 0xfe, 0xd8, 0x28, 0x0c, 0xe3, 0xfb, 0xc7, 0xb5, 0xdc, 0x69, - 0x9a, 0xfe, 0xe3, 0xea, 0xdd, 0x7e, 0x10, 0x14, 0x01, 0xad, 0x7f, 0xd9, - 0x4b, 0x29, 0xf0, 0xff, 0xfa, 0x40, 0xfc, 0x1b, 0x8b, 0x1a, 0xbf, 0x17, - 0x25, 0x46, 0xbf, 0x25, 0x1a, 0xdd, 0x2f, 0x7b, 0xed, 0xef, 0xcc, 0x5f, - 0x67, 0x95, 0xbf, 0x1c, 0x0c, 0x7e, 0x6b, 0x57, 0x76, 0xfb, 0xd7, 0x77, - 0x6e, 0xfe, 0x0a, 0x34, 0xe3, 0xfc, 0x95, 0xe5, 0xa4, 0x1a, 0xa5, 0x3f, - 0x50, 0x7e, 0x8d, 0xf1, 0x8f, 0xfe, 0xfe, 0x38, 0x38, 0xff, 0x55, 0xe7, - 0xd3, 0x7f, 0x2c, 0xc6, 0xbf, 0xb7, 0x5f, 0xc8, 0xb5, 0xd9, 0x54, 0x75, - 0x29, 0x11, 0xe8, 0x1d, 0xa6, 0x47, 0x8b, 0xfb, 0x04, 0xe0, 0xb6, 0x7e, - 0xaf, 0x00, 0x13, 0x5d, 0x54, 0x92, 0x08, 0x04, 0x01, 0x18, 0x2c, 0x97, - 0x18, 0xbc, 0xd6, 0x91, 0xf6, 0xd4, 0xee, 0x18, 0xae, 0x67, 0xdd, 0x23, - 0x4d, 0xe2, 0xfd, 0x3f, 0x2a, 0x00, 0x46, 0x21, 0x18, 0xfa, 0xbe, 0xbb, - 0x6a, 0xbc, 0x40, 0x5e, 0x6e, 0x4e, 0x18, 0x7b, 0xf6, 0xc3, 0x04, 0x20, - 0xc6, 0x5a, 0x9b, 0x03, 0xb9, 0x7c, 0x4c, 0xb7, 0x26, 0xf8, 0xc4, 0x45, - 0x52, 0xc2, 0xf4, 0xeb, 0xfa, 0xf2, 0x00, 0xc0, 0x9f, 0xb7, 0x4d, 0x9f, - 0xf7, 0x1f, 0xa8, 0x84, 0x05, 0xf2, 0xaa, 0xeb, 0x77, 0x24, 0x84, 0xa8, - 0xbc, 0xff, 0x43, 0xbd, 0xe4, 0xff, 0xfe, 0xab, 0x6c, 0x32, 0x68, 0x5d, - 0x43, 0x09, 0x52, 0xa3, 0xcb, 0x27, 0x79, 0x71, 0xae, 0x59, 0x02, 0x49, - 0x30, 0x80, 0x3b, 0x34, 0x03, 0x67, 0x89, 0x9d, 0x3e, 0xf4, 0x11, 0xd0, - 0x1d, 0x5c, 0x8c, 0x23, 0xeb, 0x63, 0x7c, 0x44, 0xa9, 0x18, 0x62, 0xf9, - 0x49, 0xd9, 0xf9, 0xdd, 0x35, 0x13, 0x7a, 0x19, 0x3d, 0x1e, 0x98, 0xd9, - 0xd2, 0xf4, 0xcc, 0x3f, 0x1e, 0x70, 0xf8, 0xf8, 0x29, 0x8f, 0x87, 0xe7, - 0x5f, 0x7d, 0xd9, 0x40, 0x53, 0x7d, 0x1b, 0xf0, 0xc0, 0xca, 0x01, 0xea, - 0x7b, 0x8a, 0x7a, 0x9a, 0x6f, 0x71, 0xdd, 0x0e, 0xf8, 0xe4, 0xc2, 0xc2, - 0x1d, 0x37, 0x5d, 0x7c, 0x5e, 0x61, 0x88, 0x3f, 0x3c, 0xe3, 0x4a, 0xfc, - 0x9c, 0x6e, 0xa3, 0x20, 0xd3, 0x33, 0x2b, 0xf1, 0xf3, 0x48, 0x65, 0xc0, - 0x40, 0x56, 0xc4, 0xac, 0xc0, 0xd9, 0xd9, 0x05, 0x4c, 0x65, 0x6c, 0xfe, - 0x66, 0xea, 0x61, 0x7a, 0xea, 0xe7, 0x6f, 0xa4, 0xcc, 0x1a, 0xc9, 0xe8, - 0xd9, 0x04, 0x88, 0xd4, 0x89, 0xa1, 0x02, 0x4d, 0x01, 0xca, 0x7e, 0x41, - 0xff, 0xb9, 0xcf, 0xea, 0xcb, 0x2d, 0xda, 0x0e, 0x01, 0xf6, 0x80, 0x17, - 0xc5, 0xb7, 0x44, 0x7c, 0x4b, 0x7c, 0x5f, 0xfc, 0xbb, 0x6f, 0xf3, 0xba, - 0x99, 0x0d, 0x21, 0x31, 0xbf, 0xec, 0xb7, 0x45, 0x0c, 0x90, 0x04, 0xdd, - 0x00, 0x64, 0x9f, 0x70, 0x6a, 0xfd, 0x70, 0xe5, 0x81, 0x53, 0x7c, 0x18, - 0x05, 0x9b, 0x4a, 0x6e, 0xf5, 0x70, 0x57, 0x5c, 0x0b, 0x77, 0xd3, 0x55, - 0x02, 0xdc, 0xfd, 0xc2, 0xf4, 0x8d, 0x0e, 0x46, 0xdc, 0xcb, 0x14, 0xbc, - 0x83, 0xd5, 0xd3, 0x07, 0xf0, 0xdb, 0x81, 0xbe, 0xa9, 0x50, 0x57, 0x28, - 0xd8, 0x55, 0x44, 0xc0, 0x25, 0xb1, 0xbb, 0x56, 0x1d, 0x60, 0xc6, 0xe0, - 0xb6, 0x8f, 0x73, 0x83, 0xf1, 0xad, 0x9a, 0x5f, 0xd7, 0x70, 0xbe, 0xea, - 0x54, 0x84, 0x20, 0xcb, 0x69, 0x3b, 0x38, 0xa1, 0x75, 0xf4, 0x27, 0x3f, - 0x8d, 0x4a, 0xad, 0x08, 0x98, 0x69, 0x43, 0x07, 0x3f, 0x79, 0x60, 0xed, - 0xae, 0x2d, 0xcd, 0xbb, 0x6f, 0xad, 0x9c, 0xe1, 0x5c, 0x11, 0x34, 0x56, - 0xb7, 0x19, 0x5e, 0x3d, 0x30, 0xbd, 0x7a, 0x9a, 0x5a, 0x53, 0x8b, 0x56, - 0xd0, 0x3c, 0x0f, 0xcd, 0x21, 0x03, 0x9e, 0xbe, 0x6e, 0x43, 0xa0, 0xb2, - 0x1f, 0x01, 0x6b, 0x3d, 0x12, 0xc8, 0x2e, 0xdb, 0x6a, 0x9b, 0xbe, 0xd7, - 0x13, 0x6c, 0xc3, 0xf1, 0x3c, 0xa9, 0xa7, 0x34, 0xc6, 0xad, 0x98, 0x99, - 0x20, 0x36, 0xea, 0xa6, 0x54, 0xa8, 0xb5, 0xb6, 0x68, 0xad, 0x2d, 0x58, - 0x4f, 0xf3, 0x66, 0x1b, 0xc5, 0xd5, 0xd4, 0xca, 0x5a, 0xb4, 0xb2, 0xe6, - 0xf5, 0xdf, 0xa0, 0x28, 0x82, 0x31, 0x45, 0xab, 0x6c, 0x97, 0xd6, 0x9a, - 0x53, 0xe8, 0x0e, 0xbd, 0x9c, 0x5b, 0x0d, 0x2d, 0x0f, 0x8e, 0x8b, 0x40, - 0xb2, 0x9e, 0x76, 0x65, 0x3b, 0xa9, 0xbf, 0xf5, 0x8e, 0xe5, 0x6a, 0xd5, - 0x4e, 0xbb, 0x1d, 0x51, 0x2b, 0x2a, 0xb4, 0x36, 0xad, 0x6e, 0xe4, 0x51, - 0x6c, 0x10, 0xa7, 0x77, 0x91, 0xe6, 0xec, 0xd9, 0x35, 0xc9, 0xb0, 0x93, - 0xb7, 0x1f, 0x9c, 0xe5, 0xbd, 0x63, 0xd9, 0xd1, 0xc3, 0xdd, 0xdd, 0xf9, - 0xce, 0xe5, 0x2e, 0x01, 0x67, 0x14, 0xfb, 0x04, 0x95, 0x89, 0x0e, 0xac, - 0xa8, 0x1b, 0x8b, 0x7d, 0x8f, 0xae, 0xbe, 0x7b, 0x91, 0xec, 0x2c, 0x90, - 0xfd, 0xc9, 0x46, 0xc8, 0xa6, 0xbe, 0xf3, 0x32, 0x25, 0x41, 0x5f, 0x0a, - 0x14, 0x1d, 0x8b, 0xc0, 0x20, 0xbf, 0xca, 0x2f, 0x43, 0xc5, 0x6b, 0x0e, - 0x34, 0x15, 0x82, 0x31, 0x80, 0xc1, 0xc7, 0x29, 0x42, 0xa5, 0x48, 0x7c, - 0xca, 0x4c, 0x15, 0xf8, 0xce, 0x13, 0xae, 0x40, 0xdf, 0xd3, 0x11, 0x96, - 0x7c, 0x27, 0x21, 0x00, 0x43, 0xdc, 0x51, 0x0c, 0xc6, 0xbf, 0xad, 0xe9, - 0x11, 0x69, 0xd2, 0x25, 0xe8, 0xe1, 0xea, 0xec, 0xcd, 0xdd, 0xa7, 0xe6, - 0x9e, 0x4b, 0x5c, 0xfb, 0xa4, 0x32, 0xff, 0xc0, 0x82, 0x6f, 0x8f, 0xd4, - 0xcc, 0xac, 0x64, 0xc3, 0xb1, 0x15, 0x66, 0x84, 0x92, 0x72, 0x78, 0x20, - 0x36, 0xb7, 0x9d, 0x99, 0xe5, 0xe3, 0x60, 0x53, 0x3a, 0x0e, 0x35, 0xa5, - 0xe3, 0x60, 0x13, 0x82, 0xa9, 0x29, 0x18, 0x09, 0x97, 0x55, 0x00, 0x2f, - 0xcc, 0xea, 0x38, 0x90, 0x5e, 0x9b, 0x42, 0x7a, 0x2b, 0x3e, 0xc9, 0x5c, - 0xcf, 0xbd, 0xae, 0xf0, 0xf4, 0xa3, 0xce, 0xf6, 0x13, 0x9d, 0xed, 0x07, - 0x7d, 0x6b, 0x8a, 0xad, 0x6c, 0x47, 0xb4, 0x90, 0x7a, 0xab, 0xbb, 0xfa, - 0x8f, 0x19, 0x5f, 0xfe, 0x74, 0x13, 0x90, 0x87, 0xe1, 0x26, 0xc2, 0x98, - 0x82, 0x5d, 0x1b, 0x70, 0xbf, 0xdf, 0xf4, 0xf0, 0x1d, 0x01, 0x7c, 0xc7, - 0xe7, 0x6f, 0xff, 0xbc, 0xc8, 0xfb, 0x12, 0xde, 0x7d, 0x05, 0xce, 0x4d, - 0x86, 0xbf, 0x84, 0xc7, 0x25, 0x3c, 0x2e, 0xee, 0x71, 0x0d, 0x52, 0x8d, - 0x1c, 0xaa, 0x87, 0x19, 0x55, 0x1b, 0xc3, 0x4b, 0xcb, 0xb4, 0x34, 0x85, - 0xd6, 0xc2, 0x02, 0xca, 0xa5, 0x18, 0xb3, 0x23, 0xc6, 0x2d, 0x8d, 0x53, - 0x44, 0x1e, 0xcb, 0x11, 0x81, 0x43, 0xef, 0x2b, 0x0c, 0x9f, 0x5f, 0x1a, - 0x38, 0x15, 0xe0, 0xc9, 0x7d, 0x3b, 0x47, 0xc5, 0x9b, 0xf4, 0x04, 0x91, - 0x57, 0x5f, 0x5f, 0xc1, 0x35, 0x27, 0xab, 0x8e, 0xc5, 0x93, 0x37, 0x54, - 0xe5, 0x50, 0x9a, 0xf8, 0x0d, 0x7c, 0xdd, 0x3c, 0xfa, 0x48, 0x76, 0x24, - 0x7a, 0xc4, 0x7e, 0x1b, 0x8d, 0xd1, 0x63, 0x9f, 0xb0, 0x5d, 0x4b, 0x13, - 0x89, 0x33, 0x6e, 0xe7, 0x39, 0x80, 0xe9, 0x01, 0xe0, 0xb4, 0xac, 0x87, - 0x30, 0x7d, 0xf9, 0x77, 0x85, 0x33, 0x35, 0xb9, 0x6b, 0xe1, 0xae, 0xf9, - 0x67, 0x6b, 0x32, 0xc1, 0x10, 0xa7, 0xe8, 0x09, 0x54, 0xc0, 0x0b, 0x9b, - 0xc7, 0xe3, 0xe6, 0x12, 0xc7, 0xf4, 0x34, 0x29, 0xdc, 0x67, 0xce, 0x01, - 0x35, 0xe4, 0x4e, 0x5c, 0xba, 0x34, 0xb3, 0xce, 0x91, 0x15, 0x40, 0x4f, - 0x22, 0x37, 0x62, 0xcc, 0xf4, 0x9f, 0x78, 0x84, 0x05, 0x43, 0x00, 0x1a, - 0xbf, 0x02, 0xb0, 0x31, 0x7b, 0xc0, 0xd6, 0xa1, 0xa3, 0x07, 0xd5, 0x3e, - 0x03, 0xd7, 0x9f, 0x5d, 0xa9, 0x71, 0x95, 0x7f, 0x44, 0x2e, 0x3b, 0x41, - 0x79, 0x71, 0x80, 0x17, 0x23, 0xa8, 0x3f, 0x7a, 0xc5, 0xcb, 0xb0, 0xe2, - 0x3c, 0x54, 0x0c, 0xd4, 0x20, 0x67, 0xa6, 0x6b, 0x27, 0xba, 0x4f, 0x6b, - 0x36, 0xec, 0x35, 0x12, 0xbc, 0x8e, 0xe4, 0x6d, 0x93, 0x0f, 0x8d, 0x36, - 0xe5, 0xbc, 0x6d, 0x74, 0x3a, 0x8d, 0x79, 0x65, 0x2b, 0xa8, 0xda, 0xe8, - 0x84, 0x2d, 0xc0, 0xcd, 0x29, 0xc2, 0x73, 0xc2, 0x93, 0xef, 0xb0, 0xc8, - 0xdb, 0xab, 0xce, 0xb2, 0x85, 0xca, 0x42, 0x86, 0x5c, 0x1e, 0xab, 0x8c, - 0x1b, 0x3f, 0x51, 0x66, 0x95, 0x3b, 0x97, 0xe4, 0xdd, 0x64, 0x2c, 0x07, - 0x4f, 0x4d, 0x19, 0xfa, 0xe3, 0x07, 0x17, 0xf0, 0x61, 0x52, 0x0e, 0x24, - 0xb0, 0x42, 0x47, 0x26, 0xfe, 0x3d, 0xad, 0x85, 0x3e, 0x95, 0x35, 0x1b, - 0x70, 0x5b, 0x2a, 0xdf, 0x33, 0x3c, 0x7d, 0x21, 0x82, 0x56, 0xee, 0x12, - 0xbb, 0x01, 0x7d, 0x19, 0x10, 0x0f, 0xcc, 0xbd, 0x95, 0x11, 0x20, 0x16, - 0xb8, 0xcd, 0xe7, 0xda, 0x37, 0xcc, 0x37, 0x45, 0xd4, 0x69, 0x9f, 0x78, - 0xe8, 0xd6, 0x50, 0x3d, 0x98, 0x17, 0xee, 0x88, 0x70, 0x48, 0xc3, 0x11, - 0x01, 0xf7, 0x88, 0x03, 0xb9, 0x9e, 0x97, 0x9d, 0x3f, 0x2c, 0x8b, 0xc3, - 0x35, 0x8d, 0xc3, 0x9d, 0x2f, 0x66, 0x99, 0x71, 0xce, 0x99, 0xb6, 0x17, - 0xf4, 0xf5, 0xe2, 0x9b, 0x4d, 0xb1, 0x8c, 0x2b, 0xfb, 0x10, 0x35, 0xd9, - 0xe8, 0x03, 0xe6, 0x55, 0x42, 0x71, 0x08, 0x90, 0xab, 0x7e, 0x20, 0xa0, - 0x2c, 0x51, 0x2e, 0x5b, 0x80, 0x46, 0x78, 0x3d, 0x97, 0xbe, 0x74, 0xd4, - 0x31, 0xbf, 0xfb, 0x74, 0xec, 0x5e, 0x34, 0xec, 0x14, 0x09, 0x1f, 0xe5, - 0xce, 0x63, 0x14, 0x0e, 0x90, 0x07, 0x98, 0x7d, 0x5c, 0xbe, 0x52, 0xe1, - 0xca, 0xaf, 0xc6, 0x7b, 0xe2, 0x49, 0x05, 0xc3, 0x75, 0x0a, 0xb7, 0xdf, - 0x6e, 0x9d, 0xdc, 0xa6, 0x47, 0x06, 0x03, 0xcc, 0xd6, 0xff, 0x41, 0x76, - 0xb7, 0xd2, 0x25, 0x1b, 0x14, 0xc7, 0xa2, 0x4e, 0x5c, 0xfd, 0x56, 0xe6, - 0x50, 0xf8, 0x6a, 0x7f, 0x0d, 0xb0, 0x7e, 0x78, 0x3a, 0xae, 0x79, 0xc2, - 0x51, 0xb7, 0x74, 0xe8, 0xba, 0x0d, 0xb6, 0xe9, 0xbc, 0xb8, 0x25, 0xe2, - 0xa1, 0x5c, 0x6c, 0x00, 0x2c, 0xbe, 0x51, 0x0f, 0xb4, 0xed, 0x2a, 0x5e, - 0x34, 0xfa, 0x89, 0xa3, 0xa2, 0x30, 0xc5, 0x93, 0x12, 0x27, 0x24, 0x80, - 0x62, 0x71, 0xe8, 0x5e, 0x42, 0x57, 0xd0, 0x1d, 0x87, 0x2a, 0x42, 0xcd, - 0xa2, 0x13, 0xd5, 0x43, 0xab, 0xcb, 0x86, 0x17, 0xe5, 0x80, 0xd6, 0xc1, - 0xb8, 0x27, 0x91, 0xb2, 0xe3, 0x77, 0x8b, 0x7f, 0x1d, 0x40, 0xc8, 0x80, - 0xb1, 0x55, 0x05, 0x80, 0xd5, 0x3a, 0x54, 0xbd, 0x2e, 0x04, 0xdf, 0x4b, - 0x70, 0x57, 0x3e, 0x5b, 0x76, 0x04, 0xea, 0x6d, 0x61, 0x2c, 0x2d, 0x35, - 0xd0, 0x43, 0x09, 0xa4, 0xd2, 0x3d, 0xe1, 0xfe, 0xf2, 0x99, 0x00, 0x2e, - 0xbf, 0x78, 0x93, 0x02, 0x80, 0x77, 0xda, 0x0d, 0x79, 0x64, 0x5f, 0x94, - 0x41, 0xca, 0xd7, 0x0c, 0xb5, 0xea, 0x0a, 0x17, 0x37, 0x16, 0x60, 0x54, - 0x26, 0x3a, 0xd4, 0xac, 0x11, 0xd5, 0x70, 0x54, 0x5b, 0x02, 0x1f, 0x20, - 0x35, 0x21, 0xc4, 0xd5, 0xd0, 0x9e, 0xa8, 0x07, 0xfe, 0x6e, 0x4b, 0xd4, - 0x9f, 0x16, 0xc7, 0xee, 0x58, 0x01, 0x64, 0xc7, 0xc5, 0x0c, 0xaf, 0xd1, - 0x40, 0x67, 0x33, 0xd3, 0xc7, 0x1d, 0xe3, 0x35, 0xe2, 0xeb, 0xb8, 0x3c, - 0xba, 0xc6, 0xc9, 0x0b, 0xa3, 0x28, 0x09, 0x97, 0x9c, 0x1b, 0x96, 0x67, - 0x3d, 0x9d, 0xcb, 0x97, 0x7f, 0xce, 0x07, 0x53, 0x84, 0x3d, 0x15, 0x8f, - 0xdd, 0x81, 0xac, 0xa2, 0xa2, 0x66, 0xce, 0x35, 0xdd, 0xf4, 0x18, 0x67, - 0xcc, 0x35, 0xb5, 0x98, 0x74, 0xf7, 0x03, 0x5e, 0x5e, 0x22, 0x0e, 0xe8, - 0x57, 0xef, 0xdb, 0xc4, 0xee, 0x00, 0xcc, 0x0c, 0x4d, 0x13, 0x53, 0xd7, - 0xd6, 0xed, 0xfe, 0xcd, 0xcd, 0x8a, 0x39, 0x29, 0x8e, 0x96, 0xfc, 0x28, - 0x2a, 0x47, 0x8c, 0x6c, 0xc6, 0x39, 0x08, 0x33, 0xeb, 0x5d, 0x81, 0xd7, - 0xe8, 0xe6, 0xcb, 0x2d, 0x2b, 0x56, 0xfb, 0x2a, 0x0e, 0x18, 0xb3, 0x49, - 0x49, 0xbb, 0xc0, 0xce, 0x4d, 0x09, 0x40, 0xbf, 0x29, 0x30, 0x74, 0xa8, - 0x52, 0xc6, 0xd1, 0x93, 0x68, 0xd1, 0x8b, 0x1f, 0xb2, 0x85, 0x39, 0x4f, - 0x19, 0x13, 0x52, 0x38, 0xf3, 0xeb, 0xe1, 0x27, 0x50, 0xee, 0x85, 0xd5, - 0x25, 0x4f, 0x2b, 0x93, 0xb1, 0x72, 0x9d, 0xdb, 0x40, 0xb4, 0xc4, 0x35, - 0x53, 0x1b, 0x3a, 0xe0, 0x0d, 0xc5, 0xc1, 0xf0, 0x7b, 0xa9, 0xff, 0x65, - 0x3b, 0xf5, 0xff, 0x72, 0x9e, 0x3a, 0x64, 0x3b, 0xab, 0xbd, 0x87, 0xe9, - 0x19, 0xa5, 0x8e, 0xe4, 0x96, 0x0f, 0xed, 0x0d, 0x1d, 0x5f, 0xf8, 0x54, - 0x1d, 0x27, 0x57, 0xc4, 0xcf, 0xa4, 0xe5, 0xfb, 0x0f, 0x1d, 0xd2, 0x55, - 0x2e, 0x4f, 0x5f, 0xb0, 0xbe, 0x84, 0x7a, 0xac, 0xc4, 0xb9, 0x64, 0x7b, - 0x79, 0x6e, 0xf4, 0x1e, 0x5b, 0x0f, 0x0e, 0x3e, 0x92, 0x77, 0x51, 0x56, - 0xf2, 0x41, 0xe9, 0xeb, 0x95, 0xb8, 0x44, 0xeb, 0x0a, 0x6d, 0x75, 0xc8, - 0x0e, 0xe4, 0x5b, 0xb1, 0xe4, 0x4d, 0x5b, 0x60, 0xdd, 0x8c, 0xbd, 0xe7, - 0x66, 0x47, 0x22, 0xd9, 0x6a, 0x45, 0xf7, 0x4e, 0x3d, 0x4d, 0x30, 0xea, - 0x72, 0x01, 0x74, 0x95, 0x5b, 0x91, 0xc0, 0x3a, 0x5b, 0x06, 0xb8, 0xbf, - 0x07, 0x79, 0xde, 0x14, 0x61, 0xcc, 0xc4, 0x0c, 0x55, 0xf1, 0x8a, 0x5c, - 0xf8, 0x09, 0x44, 0xdb, 0xc3, 0x64, 0xb7, 0xf5, 0x9a, 0x1f, 0xb9, 0x39, - 0x4a, 0x80, 0x37, 0x43, 0x4a, 0xad, 0x33, 0x0e, 0xd9, 0xa0, 0x37, 0x9d, - 0x3c, 0x09, 0xe8, 0xed, 0x60, 0xf3, 0x33, 0x27, 0x66, 0xfa, 0xcb, 0x1a, - 0x6c, 0x1b, 0xbc, 0x26, 0x78, 0xef, 0x77, 0xf9, 0x0c, 0x96, 0x35, 0x3e, - 0x6a, 0xdc, 0xd8, 0xde, 0x0d, 0x7a, 0x51, 0xdd, 0xe1, 0xbf, 0xe7, 0x6d, - 0x6c, 0x4a, 0x2f, 0x8e, 0x73, 0x1e, 0x5c, 0x6d, 0x8a, 0x4b, 0x64, 0x77, - 0x5e, 0x14, 0x23, 0x10, 0x13, 0x6a, 0x14, 0x46, 0x4b, 0x1b, 0xe3, 0x01, - 0x28, 0x60, 0x0d, 0xa8, 0x21, 0x78, 0x3b, 0x8f, 0xed, 0x03, 0xb8, 0xc9, - 0x20, 0xb1, 0xc9, 0x7c, 0xb7, 0x29, 0xda, 0x59, 0x24, 0x75, 0x9a, 0x08, - 0xd6, 0xb9, 0xde, 0xae, 0xf9, 0x28, 0x80, 0xb8, 0xa4, 0x4e, 0x76, 0x18, - 0xc0, 0x29, 0x3f, 0x46, 0xe1, 0x50, 0xbe, 0xb5, 0x00, 0x2a, 0xe4, 0xb9, - 0x70, 0xc4, 0x94, 0xee, 0xe6, 0x1d, 0x77, 0x1c, 0x01, 0x25, 0xcf, 0x97, - 0x58, 0x87, 0xc1, 0x45, 0x1f, 0x9a, 0xe7, 0x3c, 0x28, 0xb2, 0xdc, 0x4d, - 0xbe, 0x7f, 0xdc, 0xd4, 0xb9, 0x97, 0xf0, 0x7c, 0x0c, 0x4f, 0xf2, 0x26, - 0x07, 0xce, 0x9a, 0x0e, 0x17, 0xc9, 0xad, 0x46, 0xc2, 0x89, 0x4b, 0x4a, - 0x45, 0x92, 0x68, 0x39, 0x94, 0x37, 0xca, 0x3e, 0x6e, 0x90, 0x53, 0xfb, - 0xfc, 0xac, 0x1c, 0xa1, 0xb8, 0x3f, 0xa0, 0xa7, 0xfb, 0x5c, 0xcb, 0xbf, - 0x3e, 0x00, 0x49, 0x8f, 0xb0, 0x83, 0x97, 0x8a, 0x12, 0x0b, 0xf3, 0x4c, - 0xaf, 0xc9, 0x98, 0x9c, 0x7e, 0x97, 0x9f, 0x69, 0xfa, 0xf6, 0x6a, 0x7b, - 0x4f, 0x94, 0xdd, 0x6d, 0x06, 0xdf, 0xb0, 0x52, 0x52, 0xb8, 0x1e, 0x7c, - 0x37, 0x89, 0xeb, 0x9b, 0xbf, 0x17, 0x49, 0x0f, 0xa4, 0xb1, 0x68, 0xce, - 0x72, 0x41, 0x78, 0xca, 0xe6, 0x9b, 0x4d, 0x3a, 0x9a, 0xdb, 0x8c, 0x92, - 0x72, 0xe7, 0x9b, 0xbb, 0xe6, 0xa1, 0x09, 0x80, 0xa9, 0xa3, 0x91, 0x86, - 0x4f, 0x80, 0x00, 0xc2, 0xc7, 0x32, 0xe9, 0x09, 0x84, 0xfb, 0xec, 0x8f, - 0xea, 0xba, 0xe9, 0x8e, 0xd7, 0x6f, 0xfe, 0x4e, 0x47, 0xb8, 0x5d, 0x73, - 0x3e, 0x4e, 0xec, 0x9e, 0xfc, 0xcb, 0x7e, 0xf3, 0xdf, 0xcd, 0xb8, 0x87, - 0x17, 0x0d, 0x16, 0x02, 0x19, 0x25, 0x5e, 0xae, 0x65, 0xce, 0x1c, 0x79, - 0x0b, 0x06, 0xae, 0xd0, 0x2a, 0x9b, 0x84, 0x3f, 0x3e, 0x70, 0x7c, 0x90, - 0x49, 0xf0, 0xe8, 0x99, 0xb0, 0xde, 0x85, 0x23, 0xc5, 0xa3, 0x47, 0xc4, - 0x3a, 0x7b, 0xe0, 0xc4, 0x99, 0xc8, 0x53, 0xe8, 0x47, 0x82, 0xee, 0xe4, - 0xca, 0xf3, 0x14, 0x5b, 0xd6, 0x80, 0xdf, 0xfc, 0x65, 0x79, 0x62, 0x0e, - 0x8a, 0xca, 0x27, 0x40, 0xa3, 0x01, 0x42, 0x08, 0xd3, 0xfd, 0xee, 0xc6, - 0xc4, 0x05, 0xd4, 0x19, 0xb2, 0x88, 0x37, 0x06, 0xbe, 0xa4, 0x4c, 0xce, - 0x30, 0xf3, 0xe0, 0xf9, 0x9d, 0xb3, 0xd6, 0x19, 0xd3, 0x09, 0x6c, 0xf9, - 0xc3, 0x63, 0xf1, 0x02, 0x2d, 0x2b, 0xd7, 0xcc, 0x6d, 0x20, 0xdb, 0x59, - 0x0d, 0x06, 0x54, 0xb4, 0xde, 0xdc, 0xdd, 0xa9, 0x49, 0x79, 0x32, 0xe4, - 0x86, 0x47, 0x12, 0x1e, 0x82, 0x5c, 0x42, 0x98, 0xcb, 0xdf, 0x5f, 0xb4, - 0x07, 0x42, 0xa0, 0xca, 0x29, 0x9d, 0x8d, 0xb9, 0xdf, 0x61, 0x86, 0x98, - 0x01, 0xcc, 0x74, 0x39, 0xf0, 0xcc, 0xd5, 0x68, 0x48, 0x06, 0xdc, 0xbb, - 0xa7, 0xd2, 0x7e, 0x65, 0x5b, 0xc7, 0xe1, 0x04, 0x9b, 0xf0, 0xb8, 0x8d, - 0x62, 0x38, 0x75, 0x84, 0x12, 0x41, 0x2f, 0x58, 0xc3, 0x0a, 0xb3, 0x8a, - 0xad, 0x38, 0x62, 0x03, 0x31, 0x64, 0x0c, 0xe0, 0x10, 0x3a, 0xc4, 0x80, - 0x9c, 0x38, 0x87, 0xef, 0x0c, 0x94, 0x07, 0x27, 0x14, 0x5a, 0x18, 0xf1, - 0x75, 0x91, 0x97, 0x25, 0xa2, 0x59, 0x22, 0xe9, 0x75, 0xc9, 0x08, 0x17, - 0xf7, 0xb5, 0xef, 0xdd, 0x0a, 0xd8, 0x2d, 0x83, 0x0d, 0x08, 0xd1, 0x2b, - 0x19, 0x81, 0x99, 0xe1, 0x1c, 0x6f, 0x0e, 0xb8, 0xe1, 0xd6, 0x36, 0x13, - 0x8d, 0x1c, 0x9c, 0xbb, 0x7c, 0x03, 0xd0, 0xf3, 0xb9, 0xbb, 0xa3, 0x1f, - 0x7d, 0xf8, 0x09, 0xfb, 0x9f, 0x70, 0xfa, 0xb3, 0x77, 0x2b, 0x3a, 0xe5, - 0xef, 0x1f, 0xb3, 0xf2, 0xf3, 0x17, 0xee, 0xfe, 0xd2, 0xdd, 0x1f, 0x5c, - 0x9c, 0xf7, 0x3b, 0x1b, 0xc0, 0xe9, 0xaa, 0xdb, 0xdc, 0xf5, 0x69, 0xe3, - 0xb9, 0xaa, 0xf4, 0x9c, 0x58, 0x29, 0xa7, 0x1e, 0x6c, 0x32, 0x24, 0x8b, - 0xd5, 0xfa, 0x0a, 0x5b, 0xca, 0xe9, 0xad, 0xfc, 0x6c, 0x0c, 0x46, 0xcb, - 0x77, 0x00, 0xca, 0xa8, 0x2f, 0x6d, 0xb3, 0x77, 0x9e, 0x6a, 0x6e, 0xf5, - 0xa6, 0x77, 0x92, 0x1c, 0x31, 0xdf, 0x55, 0x4b, 0x31, 0xd5, 0xba, 0x8f, - 0x07, 0x01, 0xc0, 0x20, 0x6a, 0xac, 0xb6, 0x18, 0x90, 0xcd, 0xe8, 0xf2, - 0xad, 0x35, 0x84, 0xa0, 0x0b, 0x1a, 0x65, 0x95, 0x9c, 0x5b, 0x7d, 0xa7, - 0xa3, 0x3e, 0x10, 0x69, 0x8d, 0x5d, 0x0e, 0x03, 0xc8, 0x13, 0x0c, 0xad, - 0xc6, 0x56, 0xbe, 0xfc, 0x72, 0xaf, 0x25, 0x93, 0xc8, 0x21, 0x10, 0x0f, - 0x8b, 0xe2, 0x27, 0xd7, 0x2a, 0xeb, 0xcc, 0x71, 0x88, 0xb8, 0x8b, 0x27, - 0xfd, 0xbd, 0x13, 0x83, 0x38, 0x42, 0x08, 0x33, 0xd2, 0xa8, 0xa3, 0x7e, - 0xf7, 0xba, 0xdc, 0xfd, 0xe7, 0xc6, 0x5f, 0x26, 0xc6, 0x40, 0x3c, 0xd2, - 0xe4, 0x04, 0x85, 0x4c, 0x43, 0x61, 0xc3, 0xb7, 0x63, 0x6c, 0x4a, 0xee, - 0x1d, 0xc0, 0x0c, 0x2c, 0xa1, 0x30, 0xb9, 0xb1, 0x9c, 0xaf, 0xf4, 0xac, - 0xb9, 0x5a, 0x93, 0x9b, 0x65, 0x00, 0x8c, 0x7b, 0x7d, 0x72, 0x0f, 0xfa, - 0x8e, 0x9d, 0x9a, 0x46, 0x03, 0x0d, 0xa0, 0x1a, 0x23, 0x6d, 0x6e, 0xbd, - 0x06, 0xa3, 0x25, 0x94, 0xb7, 0x70, 0x9d, 0xce, 0x57, 0x94, 0x28, 0x7f, - 0xfe, 0xfc, 0x53, 0x65, 0x37, 0x36, 0x53, 0xde, 0xab, 0x56, 0xf0, 0xaa, - 0x95, 0x16, 0x64, 0x91, 0xec, 0x2d, 0x35, 0x56, 0x09, 0x6b, 0x55, 0x1d, - 0x73, 0xba, 0x51, 0xa3, 0x33, 0x54, 0x7f, 0xa7, 0x95, 0x88, 0x2d, 0xd5, - 0x4d, 0x8f, 0xb8, 0xa2, 0x9d, 0x4a, 0x49, 0xad, 0xdf, 0xb6, 0xf0, 0x72, - 0xf2, 0xc3, 0x97, 0x59, 0x7e, 0x6d, 0xe4, 0xa0, 0xed, 0x40, 0x01, 0xb5, - 0x29, 0xbc, 0xf8, 0xbe, 0x4d, 0xd5, 0x53, 0x78, 0x77, 0xf2, 0x6e, 0x9b, - 0x28, 0x92, 0x7d, 0x56, 0x2a, 0x76, 0xc6, 0x2b, 0xf0, 0x88, 0x07, 0x8b, - 0x0c, 0x6e, 0x94, 0x34, 0x3d, 0x15, 0xfb, 0xb7, 0x7f, 0x25, 0x6b, 0xa8, - 0xec, 0xe8, 0xd6, 0xe1, 0xa7, 0x37, 0xe9, 0x5d, 0xce, 0xf7, 0x70, 0x8e, - 0x4e, 0x68, 0x73, 0x6a, 0xcd, 0x50, 0x93, 0x23, 0x74, 0x86, 0x20, 0x7e, - 0xe0, 0xb3, 0x6b, 0x25, 0xec, 0x68, 0x6f, 0x9e, 0x18, 0x21, 0xcc, 0x31, - 0xc7, 0xa9, 0xdd, 0x5d, 0x1c, 0x73, 0xd4, 0xab, 0x71, 0x8f, 0x28, 0x5d, - 0x40, 0x2e, 0x15, 0x55, 0xf4, 0xd3, 0xd5, 0xc1, 0x43, 0xdd, 0xcf, 0x9f, - 0x13, 0x83, 0x3c, 0x56, 0x5d, 0x07, 0x2b, 0xcc, 0xd9, 0x8b, 0x25, 0x15, - 0x68, 0x3a, 0x64, 0xc3, 0x32, 0xf0, 0x76, 0x63, 0xcc, 0x2f, 0x6c, 0x57, - 0x30, 0x57, 0x9a, 0x11, 0xac, 0xee, 0x25, 0x38, 0xe2, 0xfa, 0x26, 0x50, - 0x54, 0xe3, 0xd9, 0xa2, 0xca, 0x4f, 0x1e, 0xde, 0x83, 0xf6, 0x56, 0xa7, - 0x10, 0xc1, 0x2b, 0x74, 0xc0, 0x18, 0xc4, 0x78, 0x56, 0xfd, 0x6d, 0x89, - 0x7b, 0xfd, 0x01, 0x0b, 0x72, 0x5f, 0x3f, 0xb1, 0x3e, 0x0a, 0x04, 0x2f, - 0x3f, 0xb1, 0x17, 0xa3, 0x53, 0xf0, 0x77, 0x9d, 0x81, 0x87, 0x29, 0xf0, - 0x2b, 0x93, 0x7b, 0xd6, 0x38, 0x74, 0x69, 0xb3, 0x47, 0x78, 0xf1, 0x5b, - 0x43, 0x28, 0x57, 0x02, 0x8c, 0xc7, 0x8e, 0x20, 0x0d, 0x48, 0xb1, 0xb7, - 0x5b, 0xbc, 0x53, 0xf1, 0x6e, 0x90, 0x64, 0x0a, 0x24, 0xda, 0xad, 0x3b, - 0xe4, 0x99, 0xef, 0xff, 0x90, 0xdd, 0x6d, 0xdc, 0x9a, 0x22, 0xd5, 0x0f, - 0x62, 0x92, 0x3e, 0xf3, 0x9b, 0x97, 0x7a, 0xc3, 0x1e, 0xf6, 0xaa, 0x74, - 0x7e, 0x47, 0xda, 0x8f, 0x49, 0x09, 0x3e, 0xa6, 0x48, 0x70, 0xe4, 0xe5, - 0xd0, 0x95, 0x12, 0xc7, 0x2c, 0x0c, 0x93, 0xc2, 0xdf, 0x71, 0x88, 0xc3, - 0x89, 0x41, 0xfb, 0x66, 0xc0, 0x71, 0xba, 0xc5, 0x09, 0x9e, 0x11, 0x31, - 0x88, 0xa7, 0xdb, 0x30, 0x27, 0x59, 0x9d, 0x88, 0x60, 0xca, 0xc8, 0x48, - 0x0a, 0xfb, 0x3f, 0x01, 0x9a, 0x16, 0x50, 0x3a, 0xd2, 0x12, 0x3b, 0x90, - 0xbf, 0x6c, 0xe5, 0xe8, 0x0d, 0xe3, 0x7b, 0x0a, 0x47, 0x8b, 0x24, 0x12, - 0x21, 0x86, 0x81, 0x07, 0x2f, 0x60, 0xae, 0x59, 0x21, 0x6b, 0xaf, 0x11, - 0x40, 0xae, 0x76, 0x10, 0xd7, 0xbc, 0x4b, 0x1b, 0x16, 0xc6, 0xa6, 0x1f, - 0x2a, 0xbb, 0x5c, 0xb2, 0x25, 0x54, 0x7a, 0xa2, 0x79, 0x1a, 0xfa, 0x2e, - 0x53, 0x98, 0x2d, 0x00, 0x13, 0xb1, 0x7e, 0x33, 0x0d, 0x91, 0xc5, 0x35, - 0xb3, 0xb8, 0x32, 0x13, 0xac, 0x02, 0x1e, 0x0c, 0x17, 0xe0, 0x77, 0x1c, - 0x0a, 0x87, 0xb1, 0xdf, 0xb9, 0xb0, 0xdc, 0xa8, 0x19, 0x50, 0x6c, 0xc8, - 0x29, 0x79, 0xd9, 0xd3, 0xcb, 0xae, 0x1a, 0x75, 0x96, 0xd0, 0x62, 0xd7, - 0xa6, 0xe5, 0xb6, 0x8d, 0x23, 0x3a, 0x71, 0x51, 0xa0, 0xf9, 0xea, 0x16, - 0x7e, 0xdd, 0xd9, 0x4b, 0x6d, 0xe4, 0xc7, 0x7f, 0x98, 0xbe, 0x3f, 0xf4, - 0x45, 0x28, 0x37, 0x50, 0x66, 0x0d, 0xc5, 0x2e, 0x13, 0x4e, 0x48, 0xb0, - 0xef, 0x02, 0x7d, 0xe5, 0x10, 0xea, 0x14, 0x5e, 0x22, 0x24, 0xec, 0x96, - 0xeb, 0xe4, 0xf5, 0x37, 0x5d, 0x5d, 0xc6, 0x4a, 0xb1, 0x43, 0x6f, 0x0f, - 0x00, 0x4c, 0x37, 0xd1, 0x7e, 0x08, 0x5e, 0xfc, 0x1c, 0x3a, 0x9b, 0xe1, - 0x04, 0xd2, 0x39, 0x0d, 0x9c, 0x23, 0x36, 0xec, 0x4b, 0x84, 0x43, 0x40, - 0x9d, 0xb0, 0x02, 0x35, 0x46, 0x4c, 0xd3, 0xdf, 0x94, 0x4e, 0xfe, 0xc4, - 0xe4, 0x00, 0x15, 0xeb, 0xf4, 0x17, 0x91, 0x4e, 0x7f, 0x1e, 0xb6, 0x0e, - 0x3d, 0x1b, 0x7a, 0x59, 0x0d, 0x9c, 0x23, 0xdb, 0x90, 0x11, 0x9b, 0x14, - 0xc1, 0x3a, 0x81, 0x57, 0x1e, 0x38, 0x55, 0x6c, 0x5c, 0x89, 0x8a, 0xcb, - 0x02, 0x00, 0x53, 0x20, 0xc9, 0xa8, 0x04, 0x1e, 0x4b, 0x89, 0x8e, 0x58, - 0xb8, 0x17, 0xec, 0x26, 0xd3, 0x64, 0xc8, 0xc7, 0x1a, 0x00, 0x0f, 0xd0, - 0x39, 0xb6, 0x19, 0x91, 0x7e, 0x20, 0x39, 0x8d, 0x67, 0xcd, 0x09, 0xf3, - 0xfb, 0xa3, 0x3b, 0x98, 0xbb, 0xed, 0x3c, 0x71, 0xc7, 0xc1, 0x26, 0x01, - 0x5f, 0xfc, 0x8d, 0x4f, 0x13, 0x53, 0x8e, 0x07, 0xaf, 0x94, 0x2a, 0xbc, - 0x22, 0x47, 0x43, 0x16, 0x78, 0x5c, 0xca, 0x2b, 0x57, 0x88, 0x62, 0x6f, - 0xe3, 0xcb, 0x75, 0x30, 0x23, 0xac, 0x05, 0x47, 0xc0, 0x3d, 0x38, 0xf4, - 0x15, 0x77, 0xb3, 0x66, 0x1a, 0xd4, 0x23, 0xb2, 0xcf, 0x97, 0x55, 0xc1, - 0xaf, 0xdf, 0xe9, 0xc4, 0xfd, 0xee, 0x8a, 0x6c, 0xff, 0xf6, 0xdf, 0xa3, - 0x67, 0x63, 0xcf, 0x21, 0xca, 0xb1, 0xbb, 0xc6, 0xb0, 0x65, 0x66, 0xc5, - 0x11, 0x16, 0xfc, 0xde, 0x7d, 0xa6, 0x07, 0xc4, 0xe0, 0x8d, 0x0b, 0xf3, - 0xf7, 0x06, 0x83, 0x0f, 0xfd, 0x19, 0x30, 0xae, 0x98, 0x02, 0x18, 0xb6, - 0xbd, 0xf3, 0x36, 0xe7, 0x9d, 0xa7, 0xd1, 0xdc, 0x20, 0x97, 0xab, 0xc9, - 0x50, 0x1c, 0xc5, 0xe1, 0x6b, 0x91, 0x14, 0xea, 0x88, 0xbb, 0xb5, 0xb3, - 0x97, 0x45, 0xdc, 0xdf, 0x2d, 0x62, 0xb5, 0xa6, 0x41, 0xc4, 0x51, 0x26, - 0x0c, 0x22, 0x0f, 0x31, 0xe7, 0x20, 0xf0, 0xc2, 0xc9, 0xd9, 0x47, 0xe3, - 0x14, 0xc2, 0x8c, 0xe8, 0x7a, 0x29, 0x13, 0xb5, 0x14, 0x8a, 0x1a, 0x67, - 0x0c, 0xd6, 0x20, 0xfd, 0xd7, 0xfa, 0xd5, 0x1c, 0x1f, 0x52, 0x4f, 0x70, - 0xe0, 0xab, 0xbd, 0x5c, 0xbb, 0x81, 0x11, 0xdc, 0x8b, 0xe8, 0x27, 0x9c, - 0xff, 0xa8, 0x82, 0x2a, 0x39, 0xc3, 0xe9, 0x53, 0x5e, 0x33, 0x96, 0xdb, - 0x63, 0x5a, 0x1c, 0xb1, 0xbc, 0x4e, 0x1b, 0x01, 0x60, 0xec, 0xd1, 0xb3, - 0xcf, 0x9d, 0x1d, 0x3b, 0xc5, 0xf4, 0x16, 0x0f, 0x09, 0x39, 0xf2, 0xc0, - 0xfc, 0x92, 0xaa, 0x99, 0xee, 0xf3, 0x60, 0xc8, 0xd0, 0x06, 0xab, 0x83, - 0xa3, 0xa0, 0xa2, 0x94, 0x4e, 0xb5, 0xc3, 0x77, 0x5f, 0xc1, 0x32, 0xac, - 0x33, 0x8f, 0xf7, 0xf3, 0x4e, 0x85, 0xd2, 0x06, 0xee, 0xd1, 0x52, 0x08, - 0xdd, 0x37, 0xa0, 0x17, 0x2e, 0x01, 0x0a, 0x17, 0xe8, 0x0d, 0x03, 0x17, - 0xee, 0x60, 0x78, 0x2d, 0x9d, 0x83, 0x87, 0x0c, 0x63, 0x9d, 0xb4, 0x50, - 0x72, 0x52, 0xa5, 0x87, 0x6f, 0xc1, 0x19, 0xae, 0xb9, 0xac, 0x7c, 0x72, - 0x36, 0x7a, 0xaa, 0x27, 0xfb, 0xa1, 0x0e, 0x45, 0x3d, 0x7c, 0x5b, 0xee, - 0x27, 0x07, 0x47, 0xd5, 0xee, 0x93, 0xe1, 0x1f, 0x3c, 0xd4, 0xa2, 0x24, - 0x0d, 0xdc, 0x37, 0x39, 0xad, 0xaf, 0xba, 0x76, 0x2e, 0x43, 0xf2, 0xac, - 0xe9, 0x4a, 0xce, 0x88, 0x0c, 0xf4, 0xed, 0x52, 0x23, 0xe2, 0xec, 0xdc, - 0xf9, 0xc8, 0xdd, 0xe5, 0x53, 0x27, 0xb1, 0xce, 0x38, 0x89, 0x75, 0x3e, - 0x10, 0xd2, 0x13, 0xa9, 0x2c, 0xb1, 0x45, 0x0a, 0xe4, 0x67, 0xf5, 0x3d, - 0x96, 0xc2, 0x59, 0xf6, 0x39, 0xdf, 0xd1, 0x74, 0xcd, 0xc8, 0x23, 0x44, - 0x86, 0xe5, 0x66, 0x86, 0x98, 0x35, 0xf9, 0xa5, 0x3b, 0x51, 0x6e, 0xfb, - 0x70, 0x7f, 0x05, 0x2f, 0x18, 0x09, 0xb8, 0x99, 0x73, 0xf2, 0x53, 0x27, - 0xab, 0xce, 0x38, 0x59, 0xc5, 0xcd, 0xff, 0x53, 0xeb, 0xc7, 0x10, 0x0f, - 0x8f, 0xee, 0x76, 0x8e, 0xd9, 0x01, 0x21, 0xf3, 0x0e, 0xa8, 0xf9, 0x89, - 0xe1, 0x8b, 0xe3, 0x78, 0xee, 0xca, 0xb1, 0x67, 0x7d, 0x9e, 0xd3, 0x8f, - 0xd2, 0x37, 0xbf, 0x95, 0x61, 0x29, 0xb8, 0x34, 0xb0, 0x31, 0x41, 0x30, - 0x3d, 0x41, 0xcb, 0xf6, 0x2d, 0xd6, 0x43, 0xe8, 0x45, 0x81, 0x8b, 0x37, - 0x0c, 0x62, 0xd9, 0x40, 0xaf, 0x92, 0xa9, 0x09, 0xdc, 0xdf, 0xea, 0x32, - 0xb5, 0x2b, 0xd1, 0xf4, 0x75, 0x92, 0xd3, 0xcb, 0xd3, 0xa5, 0xeb, 0x73, - 0xa5, 0xda, 0xfc, 0xfb, 0xc9, 0x83, 0x11, 0x67, 0x7d, 0x3b, 0x0f, 0x3b, - 0x71, 0xd1, 0xd7, 0x2d, 0x00, 0x94, 0x78, 0x40, 0x79, 0xb3, 0xd1, 0xec, - 0xd4, 0x49, 0x65, 0x23, 0x1e, 0xbe, 0x9a, 0x68, 0xe6, 0x1c, 0x3b, 0x3e, - 0xc4, 0x51, 0x18, 0x4d, 0x0d, 0xb9, 0x45, 0x3b, 0xf6, 0x0e, 0x6c, 0xc2, - 0xb0, 0xb2, 0xdc, 0x14, 0xd5, 0xca, 0x8c, 0xfb, 0xb1, 0xbb, 0xfc, 0x54, - 0xeb, 0xae, 0xaf, 0xf5, 0x14, 0x6a, 0x0a, 0xae, 0x45, 0x70, 0xde, 0x14, - 0xdb, 0xce, 0x54, 0xec, 0xbc, 0x67, 0xef, 0xc8, 0xab, 0x0e, 0x5b, 0xb3, - 0xc1, 0x23, 0x8d, 0x90, 0x34, 0x75, 0x36, 0x1c, 0x14, 0x57, 0x7e, 0xd8, - 0xef, 0x4f, 0x09, 0x37, 0x67, 0xc8, 0x36, 0xc9, 0x07, 0x92, 0x0d, 0x90, - 0x0b, 0x60, 0x09, 0x62, 0xa4, 0xd1, 0x68, 0xd0, 0x35, 0x96, 0xda, 0xf7, - 0x70, 0xc8, 0x8e, 0xb6, 0x7f, 0x73, 0xd0, 0x81, 0xc8, 0x46, 0xc7, 0x47, - 0xb8, 0xe6, 0xc1, 0x14, 0x97, 0xfd, 0xed, 0x87, 0x79, 0x3f, 0xc0, 0xf4, - 0xf1, 0x4b, 0x26, 0x87, 0xe3, 0x12, 0x2b, 0x99, 0x84, 0xeb, 0xdc, 0x61, - 0xd0, 0x58, 0x0f, 0xfd, 0x2a, 0x7a, 0xce, 0x55, 0x64, 0xec, 0xfc, 0x3b, - 0xa5, 0x44, 0x3b, 0xec, 0xb6, 0x1e, 0xde, 0xa1, 0xf5, 0x28, 0xa0, 0x35, - 0xdd, 0xc5, 0xa9, 0x3f, 0x87, 0x74, 0x07, 0xd5, 0x0d, 0xf9, 0xbd, 0xf5, - 0x7c, 0x1d, 0xef, 0x5e, 0x98, 0x86, 0xbd, 0x05, 0x98, 0xf9, 0x46, 0x89, - 0xff, 0x56, 0x14, 0x6c, 0xb4, 0x64, 0xae, 0x8a, 0xd1, 0x57, 0xae, 0x90, - 0xbd, 0x1f, 0x15, 0xd9, 0x79, 0xef, 0x7b, 0x84, 0x02, 0x38, 0xbb, 0x81, - 0xd6, 0x39, 0xdc, 0xee, 0x71, 0x6d, 0xc6, 0xe0, 0xfd, 0x26, 0xa9, 0x80, - 0xf8, 0x4d, 0xf3, 0xfa, 0x7d, 0x8e, 0x0d, 0x61, 0xd7, 0xba, 0x31, 0xdf, - 0x18, 0xc4, 0x9c, 0xbe, 0xaa, 0x5f, 0x84, 0x01, 0xd8, 0x09, 0x06, 0x6a, - 0xae, 0xc0, 0x47, 0xfb, 0x34, 0x30, 0x20, 0x21, 0x0f, 0xc6, 0xf0, 0xaf, - 0x2c, 0x7d, 0x13, 0x00, 0x4c, 0xd4, 0x88, 0x3a, 0xde, 0x26, 0x8e, 0x8b, - 0x4e, 0x5c, 0xb1, 0xcf, 0x79, 0x80, 0xf8, 0x0a, 0x2b, 0x10, 0x77, 0x71, - 0x1c, 0x69, 0x55, 0xe4, 0x82, 0x19, 0x4d, 0x68, 0x78, 0x09, 0x88, 0xc2, - 0x18, 0x70, 0x25, 0x86, 0xe5, 0x02, 0xc8, 0x02, 0x19, 0x8e, 0x73, 0x57, - 0x76, 0x86, 0x93, 0x3b, 0x61, 0xc3, 0x6d, 0xd4, 0x9d, 0x34, 0xa0, 0x97, - 0xaf, 0xc9, 0x0a, 0xd1, 0xef, 0x08, 0x7d, 0x27, 0x23, 0xc1, 0x9e, 0xe0, - 0x09, 0x13, 0x6b, 0xe3, 0x34, 0x0a, 0xfd, 0x7b, 0xb1, 0x8e, 0x0b, 0x83, - 0x38, 0x07, 0xac, 0x52, 0x38, 0x60, 0x48, 0x13, 0x93, 0x3b, 0xad, 0xb9, - 0x49, 0x65, 0xc4, 0xee, 0x8f, 0x3a, 0x96, 0x4c, 0xea, 0xb4, 0x6f, 0xe5, - 0xc0, 0x6c, 0x1c, 0xf0, 0x64, 0xba, 0x00, 0xdc, 0xf5, 0xd7, 0xd7, 0x54, - 0x98, 0xd1, 0xaf, 0xc3, 0x8f, 0xc8, 0x0d, 0xf1, 0xbc, 0xf6, 0xd0, 0xab, - 0xf7, 0x31, 0x21, 0x15, 0x3e, 0x22, 0xb8, 0xb1, 0x23, 0x91, 0x26, 0xce, - 0x3e, 0x60, 0xe0, 0x53, 0x69, 0xab, 0x1b, 0xb8, 0xbb, 0xe8, 0x61, 0xcc, - 0x78, 0x98, 0x8e, 0x89, 0x75, 0xc8, 0xc2, 0x22, 0xf4, 0x44, 0xcd, 0x10, - 0xca, 0xbd, 0xb3, 0x1b, 0xc6, 0xe0, 0xe8, 0xc9, 0x22, 0x5a, 0x89, 0x5c, - 0x0a, 0x26, 0x52, 0x4e, 0x00, 0x63, 0x54, 0x01, 0xc5, 0xa8, 0x86, 0xa9, - 0x07, 0xa4, 0x79, 0x26, 0xa0, 0x67, 0x0a, 0x06, 0x55, 0x1e, 0x38, 0xbe, - 0xf8, 0xf5, 0xc3, 0x4f, 0x04, 0xe7, 0x23, 0x2d, 0xc9, 0xf5, 0x04, 0xd5, - 0xba, 0x0c, 0xeb, 0xf0, 0x82, 0xb0, 0xbf, 0x64, 0x95, 0x38, 0xfd, 0x1e, - 0xb2, 0xd5, 0xd5, 0x6e, 0xc1, 0x43, 0x89, 0x8c, 0x3b, 0xdc, 0x89, 0xeb, - 0xaa, 0x2c, 0xc7, 0x85, 0xee, 0xc0, 0x11, 0xeb, 0x19, 0xe9, 0xc6, 0xa1, - 0xd0, 0xc2, 0x96, 0xe1, 0x38, 0x5c, 0x3b, 0x96, 0xeb, 0x69, 0x1d, 0x9b, - 0x1a, 0x2f, 0x36, 0x58, 0x54, 0xcd, 0x84, 0x6c, 0x5b, 0xf1, 0x18, 0xae, - 0xa1, 0x2f, 0x55, 0xb0, 0x01, 0x56, 0xb0, 0xab, 0x1c, 0x66, 0x42, 0xcb, - 0x3d, 0xc0, 0x50, 0x05, 0x74, 0x69, 0x78, 0xe0, 0xeb, 0xbc, 0x1e, 0x6e, - 0x89, 0xdb, 0x9e, 0x17, 0xcc, 0x2f, 0x99, 0xf9, 0xb9, 0xf4, 0xde, 0xd5, - 0x09, 0x39, 0xc2, 0x71, 0x11, 0xd6, 0xb3, 0x85, 0x09, 0x25, 0x2d, 0xc2, - 0x97, 0x60, 0xb1, 0x88, 0x8f, 0xf1, 0x55, 0x9f, 0xea, 0x2e, 0xaf, 0x6c, - 0xc9, 0x73, 0x14, 0x0e, 0x5e, 0x2d, 0xc7, 0x81, 0x34, 0xff, 0xc9, 0x82, - 0x5c, 0xd8, 0x56, 0x75, 0x32, 0x7a, 0xf0, 0x03, 0xd1, 0xf6, 0x9b, 0x3a, - 0x4d, 0x1c, 0x33, 0x1e, 0x28, 0xef, 0xeb, 0xe5, 0x2b, 0x55, 0x7e, 0x44, - 0x5a, 0x28, 0xbd, 0x12, 0x4c, 0xc4, 0xc6, 0x43, 0xfc, 0x03, 0xde, 0x24, - 0xa5, 0x9e, 0x02, 0x83, 0xaf, 0x30, 0x69, 0xbc, 0x07, 0xb5, 0xc4, 0xf7, - 0x90, 0xed, 0xf3, 0xed, 0x47, 0x39, 0x07, 0x57, 0xaa, 0xa5, 0xe6, 0xbd, - 0xdc, 0x7c, 0x91, 0x77, 0xc0, 0x23, 0x9b, 0x1e, 0xf8, 0x22, 0x31, 0x3b, - 0xce, 0xa8, 0xc8, 0x0c, 0xb6, 0xba, 0x6c, 0xb7, 0xbe, 0xe9, 0x4a, 0x32, - 0x4f, 0x1f, 0x25, 0xc9, 0x90, 0xb7, 0x29, 0xd8, 0x50, 0x3c, 0xb3, 0x07, - 0x74, 0xcd, 0xc8, 0x02, 0x9d, 0x5b, 0x91, 0x3a, 0xc8, 0x28, 0xfe, 0xcb, - 0x07, 0x6f, 0x19, 0x20, 0x6e, 0x4c, 0x70, 0xab, 0xbf, 0x63, 0x0f, 0xbd, - 0x13, 0x48, 0xfc, 0x3a, 0x4c, 0x51, 0xf1, 0x6b, 0xec, 0xeb, 0x3b, 0x6c, - 0xf1, 0x59, 0x1d, 0x6f, 0xa5, 0x2e, 0x30, 0x82, 0xbf, 0xdb, 0x2a, 0x3b, - 0xf2, 0x87, 0x55, 0xfc, 0x0f, 0x8f, 0x6a, 0x0d, 0x01, 0xf5, 0xa5, 0x30, - 0xa0, 0xf1, 0xad, 0xc2, 0x59, 0xa7, 0x04, 0xe9, 0xb6, 0xa7, 0x54, 0x71, - 0x7c, 0x47, 0xfc, 0xdf, 0x19, 0xff, 0x7a, 0x63, 0xef, 0x5d, 0xc9, 0xa8, - 0xd6, 0xb5, 0x5c, 0xc6, 0x2c, 0x2e, 0xb0, 0x0c, 0xb1, 0xbe, 0x32, 0xc4, - 0xcb, 0x3c, 0x83, 0xaf, 0xb3, 0x0c, 0x78, 0x31, 0x47, 0x25, 0xb7, 0xc6, - 0x7d, 0xee, 0x0e, 0xc3, 0x3e, 0xd2, 0x55, 0x23, 0xca, 0x03, 0xf7, 0x49, - 0x27, 0xa2, 0x4b, 0x4a, 0x0e, 0xf6, 0x25, 0x98, 0x9c, 0x92, 0x27, 0x66, - 0xd7, 0x10, 0x51, 0x44, 0x30, 0xae, 0x83, 0x9d, 0x79, 0x3d, 0xc4, 0x3e, - 0xd6, 0xa3, 0xb6, 0x04, 0xa5, 0xa3, 0x5d, 0x20, 0xe2, 0xf2, 0xd4, 0x47, - 0x5e, 0x5e, 0xb7, 0x18, 0xb3, 0x3c, 0x57, 0x9b, 0x6a, 0x6e, 0xd3, 0xad, - 0x4b, 0x22, 0x75, 0xa5, 0xcd, 0x8b, 0x69, 0xeb, 0xea, 0x59, 0x44, 0x38, - 0xdb, 0x71, 0x74, 0xc8, 0xf2, 0xc8, 0x97, 0xb2, 0x3f, 0x1e, 0xe1, 0x08, - 0xe2, 0xef, 0xf2, 0xe9, 0x48, 0xa0, 0x48, 0x30, 0x58, 0x9c, 0xbf, 0x44, - 0x4a, 0x25, 0x91, 0xf8, 0xdb, 0x26, 0x8e, 0xe5, 0xea, 0xc8, 0xc6, 0x9e, - 0x92, 0x96, 0x0c, 0x7f, 0x8b, 0xcb, 0x5d, 0x0e, 0xfd, 0xa8, 0x52, 0x77, - 0xc5, 0xe6, 0xb0, 0x35, 0x09, 0x03, 0xdb, 0xde, 0x53, 0xb3, 0x47, 0x74, - 0x7b, 0xb4, 0xec, 0x2d, 0x9f, 0xc0, 0x25, 0x3e, 0x05, 0x5e, 0x99, 0x5a, - 0xb0, 0x57, 0x79, 0x3f, 0x25, 0xc2, 0x40, 0xc1, 0x0a, 0x1b, 0x71, 0x43, - 0xe9, 0x4d, 0x89, 0x58, 0x27, 0xd0, 0xf7, 0xb3, 0xea, 0x34, 0xc0, 0x80, - 0xeb, 0x04, 0x1c, 0xd1, 0xdb, 0xbd, 0x46, 0x0f, 0x6a, 0x7c, 0xd4, 0xd1, - 0xc1, 0x9a, 0x49, 0x6f, 0x77, 0x89, 0x21, 0x0e, 0x72, 0xf8, 0x72, 0x2a, - 0xca, 0xda, 0x89, 0xbf, 0x0b, 0xa1, 0xb4, 0x03, 0x76, 0xe7, 0xef, 0x0c, - 0xfd, 0xf7, 0x3d, 0x27, 0x08, 0xbb, 0xb7, 0xd2, 0x60, 0xf3, 0x91, 0xb9, - 0x43, 0x15, 0x8d, 0x2b, 0x77, 0x52, 0x2a, 0x1d, 0x26, 0x96, 0x14, 0x0a, - 0x5c, 0xd6, 0x94, 0xab, 0x9c, 0xd0, 0x6d, 0x7f, 0xbd, 0x4a, 0xf9, 0xbf, - 0xcf, 0xdb, 0x2c, 0xa4, 0x78, 0x1a, 0xe7, 0x82, 0x59, 0x38, 0x46, 0x1d, - 0x91, 0x6b, 0xdc, 0xeb, 0xbd, 0xed, 0x99, 0x90, 0x51, 0x83, 0x6c, 0x1b, - 0xcf, 0x5e, 0x44, 0xe3, 0x39, 0xcd, 0xac, 0x60, 0x9c, 0xc9, 0x98, 0x04, - 0x4e, 0x0f, 0x2b, 0x44, 0x99, 0x78, 0x33, 0x01, 0xe8, 0x07, 0x47, 0xee, - 0x20, 0x49, 0x0c, 0xb7, 0x5e, 0x91, 0x4d, 0xa2, 0x5b, 0xe3, 0xb9, 0x13, - 0x07, 0xd1, 0x20, 0x5a, 0xe9, 0x59, 0x53, 0x73, 0x68, 0xbd, 0xed, 0xb6, - 0xe8, 0x29, 0xed, 0x9b, 0xe3, 0x7b, 0x8b, 0x38, 0x67, 0xf6, 0x55, 0x28, - 0xf7, 0x4d, 0xc7, 0x8a, 0x65, 0xc5, 0x2a, 0xab, 0x60, 0xe4, 0xe3, 0x5a, - 0xbf, 0xab, 0x1f, 0x94, 0xf0, 0xe5, 0x8c, 0xa0, 0xd4, 0x63, 0x41, 0xa8, - 0xcb, 0x13, 0x86, 0x0f, 0x8e, 0x8b, 0x2d, 0xaa, 0xbc, 0x1e, 0xe2, 0x29, - 0xcd, 0xf5, 0xef, 0x79, 0x2f, 0x6a, 0x5b, 0xb2, 0x66, 0x83, 0x47, 0xa4, - 0x73, 0x53, 0xba, 0xb7, 0xd0, 0x61, 0xe2, 0xf8, 0x52, 0x23, 0xfe, 0x02, - 0x12, 0x1e, 0x18, 0xdd, 0x82, 0x8e, 0xb3, 0x9d, 0x4e, 0x48, 0xb1, 0xc9, - 0x80, 0x2b, 0x18, 0x51, 0x9c, 0x16, 0xbf, 0xc7, 0xd8, 0xde, 0x61, 0xe3, - 0xcb, 0xee, 0xc3, 0x4d, 0x77, 0x29, 0x01, 0xca, 0x7c, 0x4b, 0xd1, 0xa2, - 0x1d, 0xd7, 0xc6, 0x71, 0x7c, 0x48, 0xe3, 0x0d, 0x8f, 0x7e, 0xb0, 0xc9, - 0x5d, 0x1a, 0x25, 0x21, 0x33, 0xe3, 0x58, 0x01, 0xbd, 0x6f, 0x99, 0xf3, - 0x37, 0x1f, 0xaa, 0xca, 0xa6, 0x82, 0x3b, 0x1d, 0x58, 0x05, 0x1f, 0xe2, - 0x22, 0x07, 0xc0, 0xa2, 0xb0, 0xf7, 0xb8, 0x81, 0x00, 0x28, 0xf7, 0x4f, - 0xa5, 0x35, 0xaf, 0x57, 0x00, 0x06, 0xb0, 0xca, 0x71, 0xc7, 0x91, 0xa1, - 0xfd, 0xc8, 0x40, 0x0f, 0xbf, 0x5f, 0x7a, 0x76, 0xac, 0x70, 0x89, 0xc3, - 0xbe, 0xa5, 0xf3, 0xf2, 0x88, 0x06, 0x42, 0x4c, 0xa6, 0xc7, 0x49, 0x28, - 0xcd, 0x88, 0xf4, 0xa8, 0x5f, 0x5f, 0x30, 0x4f, 0xcf, 0xe1, 0x7e, 0x06, - 0x8f, 0x3d, 0xf4, 0x4e, 0xac, 0x23, 0x71, 0x12, 0x54, 0xd9, 0x99, 0xdf, - 0x87, 0x67, 0x9b, 0xfe, 0x0f, 0xe1, 0xa1, 0x1c, 0xf1, 0xf8, 0x2b, 0xe1, - 0x7b, 0x5f, 0xc2, 0xd5, 0xb9, 0xdc, 0x65, 0x3d, 0xe2, 0x84, 0x58, 0x93, - 0x7d, 0xbc, 0xef, 0x0a, 0xdc, 0x27, 0x1e, 0x47, 0x3c, 0xb0, 0x4a, 0xb8, - 0x25, 0x54, 0x37, 0x8f, 0x5b, 0xd6, 0x89, 0x14, 0xf4, 0x32, 0xa9, 0xd1, - 0x1d, 0xf9, 0x54, 0x2a, 0xf0, 0x16, 0x8f, 0x7b, 0x92, 0xd0, 0x6e, 0x52, - 0x27, 0xf2, 0xcb, 0x3b, 0x9a, 0xf7, 0x91, 0x9a, 0x4e, 0x1d, 0x9f, 0x73, - 0x40, 0x57, 0x66, 0x30, 0x27, 0x54, 0x30, 0x80, 0x91, 0x0b, 0xbe, 0xfe, - 0x24, 0x14, 0xdf, 0xdb, 0x93, 0x6c, 0xc5, 0x61, 0xb8, 0x4c, 0xd5, 0xca, - 0x9d, 0x50, 0x2c, 0x41, 0xe8, 0x5b, 0xf0, 0xb0, 0x63, 0x88, 0x56, 0xa4, - 0x2d, 0x55, 0x01, 0x97, 0x2f, 0x80, 0xbc, 0xf3, 0x19, 0xc0, 0x36, 0xc0, - 0x9b, 0xd0, 0xef, 0xee, 0xea, 0xbb, 0x5b, 0xe1, 0xba, 0x44, 0x96, 0xd8, - 0x84, 0x8d, 0xc0, 0x08, 0xd3, 0x89, 0xe5, 0xf2, 0x41, 0x99, 0x0e, 0xdc, - 0xbf, 0xfc, 0x5d, 0xbc, 0x40, 0x4f, 0x5a, 0x7e, 0x01, 0x91, 0x0e, 0xfd, - 0x71, 0x6a, 0xe1, 0xe4, 0x80, 0xd6, 0x56, 0x39, 0xe8, 0xab, 0x19, 0x1e, - 0x5f, 0x1a, 0xe2, 0x0e, 0xdd, 0x48, 0x1b, 0xb0, 0x03, 0xd3, 0x14, 0x75, - 0xce, 0xdc, 0xb1, 0x4e, 0xd9, 0x92, 0x73, 0x19, 0x15, 0x6d, 0x82, 0x8f, - 0x6f, 0x10, 0x7c, 0x1c, 0x83, 0x1c, 0x78, 0xcf, 0xc8, 0xbf, 0x95, 0x28, - 0xc0, 0xef, 0xe0, 0xc9, 0xd1, 0x07, 0x8f, 0xde, 0x16, 0x89, 0x98, 0xde, - 0xc6, 0x93, 0xc0, 0x83, 0xb6, 0xa7, 0x06, 0xbf, 0x49, 0xa4, 0x3e, 0x76, - 0x38, 0x3b, 0x3a, 0xc9, 0x18, 0xb8, 0xf7, 0x32, 0xb8, 0x7a, 0x07, 0xfc, - 0x66, 0xe4, 0x50, 0xf5, 0x10, 0xd3, 0x45, 0xdc, 0x6c, 0x9d, 0x83, 0xbd, - 0xc6, 0x35, 0x57, 0x47, 0x2b, 0xfd, 0xa6, 0x22, 0x28, 0x27, 0xd8, 0x67, - 0xce, 0xa8, 0x97, 0x93, 0xd3, 0x15, 0x33, 0x72, 0xa6, 0xe7, 0xf8, 0xc5, - 0x8f, 0x91, 0xac, 0xe8, 0x9e, 0x67, 0x56, 0xd5, 0xe9, 0x4f, 0x5a, 0x7a, - 0x62, 0xe2, 0x92, 0x16, 0xa1, 0x47, 0x64, 0xe3, 0x00, 0x9b, 0xd0, 0x8b, - 0x39, 0x78, 0x05, 0x63, 0xc0, 0xd3, 0x39, 0x72, 0xc2, 0x33, 0xe5, 0x00, - 0x07, 0x85, 0xe6, 0xf7, 0x44, 0x61, 0x77, 0x4a, 0xb6, 0xc7, 0x75, 0x83, - 0x69, 0xbc, 0xc1, 0xe1, 0xe4, 0x67, 0x4a, 0xdc, 0xc1, 0x3c, 0x61, 0x4f, - 0xef, 0x02, 0x3d, 0xbd, 0xc2, 0xce, 0x94, 0x10, 0x00, 0xd7, 0x26, 0x7c, - 0x73, 0xc3, 0x0d, 0x71, 0x1e, 0x1f, 0x66, 0x14, 0xfe, 0x3c, 0x93, 0x4d, - 0x13, 0x1c, 0x93, 0x90, 0xce, 0xb8, 0x8a, 0xd8, 0x3b, 0x44, 0xca, 0x9d, - 0xff, 0x4a, 0x63, 0x19, 0x09, 0x05, 0x66, 0x83, 0x8f, 0x24, 0xa7, 0x69, - 0xad, 0x77, 0x8a, 0x00, 0xd7, 0x25, 0x0f, 0xe8, 0xa4, 0xd3, 0xd0, 0x31, - 0x41, 0xc8, 0x92, 0x37, 0xbc, 0xdb, 0xc6, 0xda, 0xc8, 0x07, 0xdd, 0x02, - 0xad, 0xff, 0xbb, 0x3c, 0xeb, 0x06, 0x78, 0xea, 0xe3, 0xd9, 0x7d, 0x9c, - 0x21, 0x3c, 0xe0, 0xd0, 0xfd, 0x19, 0xde, 0x09, 0xd7, 0x84, 0x1e, 0xa7, - 0xae, 0x0d, 0x5c, 0x2e, 0x0d, 0x38, 0xcc, 0xb0, 0x78, 0x40, 0x93, 0x20, - 0xc3, 0xc4, 0x8c, 0x78, 0xe4, 0xe7, 0x3c, 0x2c, 0xee, 0x04, 0x4f, 0xbc, - 0x02, 0xc6, 0x6c, 0x83, 0x6f, 0xce, 0x85, 0xa9, 0x2e, 0x0e, 0xa2, 0xa7, - 0x30, 0x52, 0xd2, 0xb0, 0x9c, 0x11, 0x6e, 0x75, 0x3d, 0xd0, 0x71, 0xe5, - 0x2d, 0x50, 0xe2, 0xe0, 0xf7, 0x4e, 0x8c, 0xd5, 0x57, 0x67, 0x49, 0x94, - 0x31, 0xa1, 0x71, 0xf3, 0xc2, 0x39, 0x8a, 0x93, 0x3b, 0x9b, 0x38, 0x71, - 0x9e, 0x2b, 0x05, 0x7d, 0x2e, 0x34, 0x36, 0xe5, 0xb6, 0x17, 0x96, 0x21, - 0xcf, 0x78, 0x95, 0x2c, 0xe4, 0x87, 0x15, 0xa8, 0x70, 0x4f, 0xd8, 0x9b, - 0x86, 0x8e, 0x30, 0xe8, 0x76, 0x45, 0x86, 0xec, 0x14, 0x94, 0x78, 0xf8, - 0x09, 0x9a, 0x7e, 0xf7, 0x62, 0xc8, 0x25, 0x63, 0x20, 0x36, 0xd7, 0x26, - 0x71, 0x73, 0x6a, 0x2c, 0xb1, 0x36, 0xdc, 0x94, 0x8a, 0x26, 0x8d, 0xa9, - 0x40, 0x13, 0xce, 0x7d, 0x62, 0x52, 0xea, 0x17, 0x78, 0x1b, 0x21, 0x8b, - 0xb6, 0xb1, 0xbd, 0xb3, 0xaf, 0x3a, 0xe5, 0x71, 0x02, 0x28, 0x60, 0xa0, - 0x7d, 0x2b, 0xdd, 0x41, 0x88, 0xa9, 0x24, 0xba, 0x9c, 0x2a, 0x1a, 0x8f, - 0x24, 0x44, 0xd8, 0x0c, 0x40, 0xb5, 0x95, 0xcf, 0x05, 0x5e, 0x9f, 0x0a, - 0x04, 0x96, 0xc9, 0x30, 0x53, 0x1a, 0xb4, 0x9e, 0x7d, 0x0a, 0x74, 0x19, - 0xa9, 0x63, 0x86, 0x93, 0x2a, 0x3a, 0x06, 0xe9, 0x5e, 0x1a, 0xd2, 0xf7, - 0x11, 0x2f, 0xe1, 0x0b, 0x0f, 0xd1, 0x95, 0x9d, 0x62, 0xd2, 0xe2, 0xa4, - 0xae, 0xc1, 0x57, 0x04, 0xe9, 0x27, 0x5c, 0x86, 0xbe, 0x7a, 0x68, 0x89, - 0x0f, 0x86, 0xb0, 0xab, 0xb0, 0xb5, 0x9c, 0x08, 0xe1, 0xd0, 0xe7, 0xac, - 0x53, 0x3f, 0x96, 0x6f, 0xa3, 0x1e, 0xf7, 0x9f, 0xa0, 0x0a, 0x16, 0xca, - 0x44, 0xc4, 0x4a, 0x9d, 0x92, 0x82, 0x2a, 0x23, 0xbe, 0xfc, 0xe2, 0x9f, - 0x00, 0x86, 0x44, 0xa0, 0xf0, 0xf7, 0xa5, 0xf5, 0x29, 0xa0, 0x37, 0x0c, - 0x1d, 0xe8, 0x20, 0xd2, 0xa7, 0x02, 0x25, 0xb4, 0xab, 0x60, 0x7c, 0x9e, - 0x6f, 0x7f, 0x4c, 0x83, 0x01, 0xaf, 0xfc, 0xa7, 0x2f, 0x17, 0xb2, 0xbe, - 0x02, 0x2b, 0x3d, 0xf3, 0x65, 0x1d, 0xf8, 0x4a, 0x29, 0x80, 0x21, 0xee, - 0xc0, 0x92, 0xa0, 0x26, 0xaa, 0xc1, 0x5b, 0x2c, 0xca, 0xee, 0xa9, 0x6b, - 0xff, 0x02, 0xcc, 0xc2, 0xfc, 0x1d, 0xa9, 0x9b, 0xbf, 0xb9, 0x7b, 0xed, - 0x90, 0xc6, 0x3c, 0x85, 0x2e, 0xce, 0xa0, 0x5c, 0x04, 0x30, 0xfc, 0xf6, - 0xcb, 0x99, 0x80, 0x38, 0x75, 0x1c, 0x89, 0x25, 0x8e, 0x00, 0xf1, 0xc4, - 0xc1, 0xa1, 0x94, 0x2f, 0x5b, 0xce, 0x54, 0x83, 0x48, 0x57, 0xf3, 0xf4, - 0x4a, 0x70, 0x23, 0xf2, 0xe8, 0xd7, 0x81, 0x73, 0x23, 0x47, 0x33, 0x73, - 0xb0, 0xea, 0xf2, 0x9f, 0x60, 0xda, 0x2a, 0x5f, 0x00, 0xcc, 0x17, 0x57, - 0x6a, 0x6e, 0x73, 0xe0, 0x53, 0x7e, 0x18, 0xf2, 0x23, 0x32, 0x75, 0xc9, - 0x9f, 0x94, 0xaa, 0x48, 0xc3, 0x6f, 0x44, 0x72, 0xc4, 0xe7, 0xaa, 0x66, - 0xb0, 0xe5, 0x37, 0xcb, 0x5e, 0xcf, 0xd3, 0xf6, 0xe5, 0x05, 0xe4, 0x90, - 0x27, 0xa3, 0x80, 0x78, 0xe7, 0xc6, 0x90, 0x0b, 0x73, 0x4d, 0xe1, 0x93, - 0x08, 0xc1, 0x28, 0xe9, 0xbf, 0x4f, 0x3a, 0x42, 0x6e, 0x43, 0xb5, 0xf2, - 0x76, 0x94, 0xc9, 0x6e, 0x3d, 0xd9, 0xed, 0xc1, 0xb8, 0x5a, 0x26, 0xbf, - 0xf5, 0xe4, 0x37, 0x95, 0x4b, 0x8b, 0x62, 0xc1, 0xab, 0x46, 0x51, 0xf2, - 0xa9, 0xf9, 0xdf, 0x71, 0x66, 0xd4, 0xe0, 0x3b, 0xfd, 0xfb, 0x41, 0x6b, - 0x39, 0x11, 0x56, 0x86, 0x48, 0x81, 0x55, 0x76, 0x22, 0x02, 0x5b, 0xd4, - 0x4c, 0xa4, 0x3c, 0x16, 0x68, 0x3d, 0xdd, 0xf8, 0xf7, 0x2c, 0x4c, 0x6d, - 0xa6, 0xac, 0x27, 0xad, 0x31, 0x93, 0x3d, 0x21, 0xb9, 0x87, 0xf1, 0xf4, - 0xbb, 0x11, 0xdd, 0xfe, 0x52, 0x38, 0x47, 0x47, 0xd7, 0xbe, 0xf1, 0x39, - 0x2f, 0x7b, 0xde, 0x18, 0xf6, 0x9e, 0xa5, 0x46, 0x39, 0x14, 0x26, 0x4b, - 0x8f, 0x13, 0x09, 0x98, 0xd2, 0x8b, 0x94, 0x58, 0x09, 0xd8, 0x17, 0x86, - 0xc0, 0x46, 0x8f, 0x29, 0x91, 0x4c, 0x26, 0x7e, 0x3f, 0x7a, 0x75, 0xee, - 0xe7, 0x5d, 0xed, 0xf2, 0xe0, 0x3e, 0x28, 0x50, 0xe6, 0x8a, 0x5b, 0x68, - 0x0e, 0x54, 0x04, 0x3a, 0xac, 0xe4, 0xc8, 0xbf, 0x9c, 0xaf, 0x92, 0x85, - 0x39, 0xdd, 0x36, 0xff, 0x0d, 0xff, 0x93, 0x14, 0xb1, 0x39, 0xf2, 0x58, - 0x60, 0xb6, 0x40, 0x2a, 0x8d, 0x69, 0xf0, 0x1e, 0x3c, 0x4d, 0xea, 0xf0, - 0x0e, 0x3c, 0x0e, 0x5c, 0x56, 0x90, 0x9b, 0x49, 0x6e, 0xd4, 0x2c, 0x75, - 0x63, 0x59, 0x40, 0x8e, 0x5b, 0x3a, 0x6e, 0xb3, 0x5c, 0xd3, 0xd8, 0x19, - 0xe3, 0x04, 0x85, 0xa0, 0x8d, 0xd5, 0x6d, 0x84, 0x7f, 0x03, 0xbb, 0x61, - 0xb3, 0x17, 0xf4, 0x32, 0x9b, 0x52, 0x4f, 0x32, 0xb1, 0xcb, 0xa8, 0xbc, - 0x41, 0xe5, 0x46, 0xaf, 0x3c, 0x23, 0x3e, 0x04, 0x6d, 0xdc, 0x3f, 0x88, - 0x63, 0x76, 0x4e, 0xb4, 0x29, 0xf4, 0xeb, 0x3b, 0xb9, 0x2f, 0x35, 0x3f, - 0x41, 0xb5, 0xe0, 0xb3, 0xbb, 0x4c, 0xee, 0x0d, 0x7c, 0xb9, 0x6a, 0x49, - 0x8b, 0x98, 0x11, 0x05, 0x21, 0xcc, 0x67, 0x0b, 0x13, 0x31, 0x27, 0x78, - 0x56, 0x6e, 0xcc, 0x85, 0xba, 0x27, 0x2e, 0xfd, 0xaa, 0xd0, 0xff, 0x3d, - 0x3d, 0xd7, 0x2d, 0x76, 0x9b, 0x81, 0x75, 0xcb, 0x03, 0xf0, 0xe0, 0xd7, - 0xf3, 0xce, 0x30, 0x1d, 0x30, 0xc8, 0x5d, 0x0d, 0x60, 0xda, 0xa3, 0x01, - 0xd8, 0xef, 0x7a, 0xb2, 0x11, 0x4c, 0x3b, 0x8d, 0x57, 0xe3, 0x3e, 0x15, - 0xd1, 0x9a, 0x76, 0x7e, 0x9c, 0xc9, 0xf0, 0x4f, 0xc4, 0xf9, 0xa3, 0xc0, - 0x7e, 0x22, 0xac, 0x1f, 0xb8, 0x2d, 0xd1, 0xd2, 0x1d, 0x1c, 0xef, 0x6d, - 0x12, 0xf6, 0xd4, 0xe8, 0xdd, 0xd0, 0xe1, 0xa9, 0x9f, 0x67, 0x81, 0x31, - 0xc5, 0xa8, 0x56, 0xbe, 0xbe, 0x4c, 0xc8, 0x18, 0xdd, 0x0b, 0xae, 0x34, - 0x7a, 0x3a, 0xca, 0x7c, 0x9f, 0x79, 0xf0, 0x1f, 0x78, 0x64, 0xd5, 0x17, - 0xaa, 0x9f, 0x71, 0x10, 0x9e, 0xe7, 0x51, 0x65, 0x00, 0xe4, 0x69, 0x99, - 0xa1, 0x9d, 0x76, 0x0e, 0xc4, 0x38, 0xe7, 0x9e, 0x86, 0x99, 0x13, 0x06, - 0x02, 0xcf, 0x43, 0x99, 0xe5, 0xb1, 0xea, 0x79, 0x0d, 0xc3, 0x8b, 0x34, - 0xbb, 0x02, 0xae, 0x53, 0x70, 0x2a, 0x62, 0xc5, 0xb7, 0xfa, 0x8f, 0xa6, - 0xb0, 0x42, 0x0c, 0xcf, 0xcf, 0x30, 0xc0, 0x0c, 0x6f, 0xeb, 0xf1, 0x17, - 0xae, 0x8e, 0xbf, 0x74, 0x75, 0xfc, 0xb9, 0xab, 0x4d, 0xcb, 0xcd, 0x40, - 0x74, 0xb4, 0xf1, 0x2c, 0x82, 0xa1, 0x8b, 0x80, 0x73, 0x21, 0x98, 0xae, - 0x54, 0xd0, 0x79, 0xc1, 0xf1, 0x65, 0xa3, 0x8e, 0xe6, 0xc4, 0xfd, 0x83, - 0xcf, 0xa6, 0x1c, 0x6f, 0x4a, 0x52, 0xdb, 0x22, 0x45, 0xcd, 0x47, 0xc4, - 0xd2, 0xda, 0x29, 0x10, 0x6d, 0x54, 0x88, 0x81, 0xec, 0x31, 0x20, 0x3a, - 0x52, 0x61, 0x1c, 0xc9, 0x57, 0xca, 0xc1, 0xeb, 0x4e, 0x42, 0x2c, 0x4e, - 0x9b, 0xa6, 0x35, 0x86, 0x04, 0x44, 0xcb, 0xf9, 0xb6, 0xbc, 0x39, 0xef, - 0x24, 0x54, 0x9b, 0xc7, 0x9e, 0x54, 0x5f, 0xa2, 0x7a, 0x6a, 0x5b, 0xca, - 0xcd, 0xb5, 0x5b, 0x1d, 0x61, 0x59, 0x6f, 0xc3, 0xd4, 0x09, 0x7f, 0x39, - 0x2c, 0x08, 0xbe, 0x25, 0xe3, 0x49, 0xe9, 0x64, 0x84, 0xd0, 0xe5, 0xc3, - 0xa0, 0x0e, 0xee, 0xfb, 0x3a, 0xd9, 0x3f, 0xb8, 0xfb, 0x7a, 0x5b, 0xeb, - 0xf0, 0xf6, 0xa9, 0xc3, 0x13, 0x47, 0x12, 0x9a, 0x9b, 0x58, 0xaa, 0x46, - 0x8e, 0x6b, 0x49, 0x71, 0x01, 0xb0, 0xc9, 0xf4, 0x32, 0xad, 0x45, 0x4b, - 0x04, 0xcf, 0xfa, 0x1d, 0xc3, 0x82, 0x21, 0xf7, 0x26, 0xae, 0x59, 0x83, - 0x69, 0xf2, 0x95, 0x2d, 0x98, 0xfe, 0x79, 0xbe, 0x3d, 0x2a, 0x5e, 0x4a, - 0x05, 0xb4, 0x4a, 0xf3, 0x14, 0xd5, 0x99, 0xd2, 0xf0, 0xe5, 0xcd, 0x6c, - 0xe0, 0x2e, 0x91, 0xd5, 0x75, 0x24, 0x53, 0x04, 0xc0, 0x95, 0xc5, 0xa5, - 0x53, 0x47, 0xba, 0x88, 0xc3, 0xcc, 0xa2, 0x76, 0x8c, 0xfe, 0xdd, 0xaa, - 0xc6, 0x18, 0x83, 0xd3, 0x2c, 0x6f, 0x9a, 0x4a, 0x6a, 0xdd, 0x23, 0xad, - 0xd5, 0xb9, 0x70, 0xed, 0x02, 0x49, 0xdd, 0xd4, 0xa0, 0x1c, 0xd0, 0xd1, - 0xb6, 0x29, 0x47, 0x9b, 0x37, 0x28, 0x3f, 0xf2, 0x3f, 0x10, 0x78, 0xaa, - 0xda, 0x98, 0xe6, 0x32, 0xed, 0xbc, 0xca, 0xf5, 0x5f, 0x0b, 0x79, 0x18, - 0xbd, 0xc9, 0x99, 0x59, 0xb5, 0xd3, 0xf3, 0xe4, 0xad, 0x00, 0x9a, 0xca, - 0x5a, 0x9b, 0xc2, 0xbc, 0xf4, 0x1b, 0x50, 0x85, 0x9e, 0x8b, 0x3c, 0x14, - 0x6c, 0x2e, 0xf2, 0x5b, 0x18, 0x15, 0x3b, 0xb5, 0x2b, 0x94, 0x0b, 0x8a, - 0x0e, 0x2f, 0x92, 0x3a, 0x6b, 0xeb, 0x37, 0x2e, 0x41, 0x7d, 0x44, 0xf0, - 0xd1, 0x31, 0x2b, 0xe7, 0x47, 0xcf, 0xe6, 0x77, 0xd6, 0xd4, 0xc6, 0xfc, - 0x4d, 0xba, 0xe5, 0xa6, 0x5a, 0x92, 0xda, 0xe0, 0xfe, 0x38, 0x50, 0xa0, - 0xb5, 0xe3, 0x4b, 0x04, 0x2d, 0x37, 0x0f, 0x04, 0xb5, 0x6a, 0x20, 0xca, - 0xd5, 0xdb, 0x74, 0x42, 0x79, 0xe2, 0x01, 0x4b, 0x37, 0x63, 0xb5, 0xde, - 0x31, 0x9a, 0xca, 0x67, 0xd8, 0x97, 0x00, 0xe0, 0xfd, 0x3e, 0x75, 0xdc, - 0x2e, 0x6e, 0xea, 0xf1, 0x5f, 0x6f, 0x73, 0x70, 0x78, 0x50, 0xd1, 0xd4, - 0x1c, 0x4b, 0x09, 0x2d, 0x29, 0x2f, 0xb1, 0x56, 0x23, 0x09, 0x6b, 0xcd, - 0xd7, 0x8b, 0xff, 0x4b, 0x2b, 0x80, 0xf5, 0x23, 0xa2, 0xcb, 0xee, 0xae, - 0x53, 0x31, 0x1d, 0xbe, 0x10, 0xf9, 0x4d, 0xc7, 0x3f, 0x8d, 0x78, 0x63, - 0x69, 0x67, 0x7b, 0xf2, 0x1c, 0x2d, 0x2d, 0xfa, 0xfa, 0x94, 0x53, 0xb3, - 0x3a, 0x84, 0x6b, 0xe1, 0x70, 0x9e, 0x78, 0xde, 0xef, 0x6c, 0xc2, 0x0e, - 0xbc, 0x09, 0x9f, 0xb8, 0xbf, 0x67, 0x06, 0x64, 0x1e, 0x1d, 0x92, 0x33, - 0x2a, 0x26, 0x69, 0x67, 0x4e, 0xd2, 0x4e, 0x4e, 0xc8, 0xce, 0x65, 0xd1, - 0x97, 0x65, 0x89, 0x2f, 0xcb, 0xc2, 0x2f, 0x1b, 0xc7, 0x2e, 0xbf, 0x76, - 0xc5, 0x54, 0x9c, 0xab, 0x58, 0xc0, 0xb9, 0x06, 0x0f, 0x38, 0x57, 0xef, - 0xfc, 0x67, 0x8b, 0x71, 0x85, 0x88, 0xdf, 0x9a, 0xce, 0x60, 0x0b, 0x92, - 0xaf, 0x38, 0x0c, 0x3f, 0x36, 0x0a, 0x24, 0xa6, 0x39, 0x2b, 0x56, 0x9d, - 0x5f, 0x03, 0x6a, 0xe5, 0x01, 0xb1, 0x82, 0x9b, 0x29, 0xc6, 0x14, 0x93, - 0xd7, 0xbe, 0xb1, 0x84, 0xa7, 0xc5, 0x27, 0x10, 0x17, 0x8e, 0xf9, 0x0e, - 0x93, 0x15, 0xce, 0xa7, 0xd0, 0x86, 0x72, 0xd7, 0xa2, 0x02, 0xc1, 0x2a, - 0xc0, 0x6f, 0xbe, 0x00, 0xc9, 0xed, 0x3e, 0x61, 0x9f, 0x35, 0x13, 0xfb, - 0xe9, 0x63, 0xe1, 0x3f, 0x61, 0xef, 0x98, 0x4a, 0x4b, 0x19, 0x79, 0x38, - 0xd4, 0x01, 0x73, 0x5a, 0x1e, 0xb1, 0x9a, 0x26, 0x9d, 0x04, 0x6e, 0x62, - 0xfc, 0x28, 0xa1, 0x7c, 0x61, 0xc0, 0xd0, 0xcb, 0x86, 0x56, 0xd6, 0xee, - 0x31, 0x4b, 0xdc, 0x11, 0x3c, 0xae, 0xba, 0x4f, 0x2a, 0xd4, 0xdb, 0x1b, - 0xb8, 0xea, 0x4d, 0x4e, 0xb4, 0xfe, 0x50, 0x74, 0xc5, 0x59, 0x80, 0xd1, - 0x3c, 0x62, 0xa7, 0x1f, 0xa7, 0xae, 0xee, 0x7c, 0x40, 0xd0, 0xf1, 0xc2, - 0x50, 0x0c, 0x50, 0x92, 0x11, 0xec, 0xb6, 0xd8, 0x6c, 0x74, 0xe4, 0x00, - 0x1d, 0x85, 0x15, 0x53, 0x10, 0x43, 0x1b, 0x6e, 0xdc, 0xdf, 0x2e, 0x6d, - 0xd0, 0x22, 0xaf, 0xa1, 0xd3, 0xf5, 0x6a, 0x08, 0x31, 0x4d, 0x2d, 0x4f, - 0xd5, 0x10, 0xb6, 0x00, 0x14, 0x58, 0x85, 0x7d, 0x59, 0x03, 0x78, 0x01, - 0xc3, 0x73, 0x31, 0x37, 0xa8, 0xcf, 0xcf, 0xd4, 0xfb, 0x45, 0x3c, 0x60, - 0x01, 0x7a, 0x8d, 0x10, 0x97, 0x2f, 0xd7, 0xdd, 0x53, 0xf2, 0xf3, 0xd7, - 0x7c, 0xf6, 0x80, 0x8c, 0xc8, 0xf4, 0x2c, 0x8f, 0x77, 0xbb, 0x86, 0xf9, - 0xcf, 0x6d, 0xe8, 0x0e, 0xa1, 0xcd, 0x21, 0x16, 0x93, 0x3e, 0x2d, 0xd2, - 0xbd, 0xdb, 0x74, 0xef, 0xf3, 0xd9, 0xd3, 0xb0, 0xde, 0x5e, 0xe5, 0xd1, - 0xb3, 0x2b, 0xfa, 0xe2, 0xd8, 0xe4, 0xd9, 0x2b, 0x59, 0x2f, 0x45, 0xb2, - 0xf0, 0x4e, 0x3c, 0xb1, 0x8d, 0xec, 0x57, 0x77, 0xfb, 0xa0, 0xf7, 0xa9, - 0x83, 0x8c, 0xbb, 0x05, 0x9d, 0xde, 0x7a, 0x81, 0x2e, 0xfb, 0x25, 0x24, - 0x57, 0x8f, 0x73, 0xc5, 0x17, 0x67, 0xb8, 0x35, 0xdc, 0x0b, 0xac, 0xaf, - 0x83, 0x91, 0x94, 0x96, 0x6a, 0x51, 0x78, 0x99, 0x54, 0x09, 0x6a, 0xaa, - 0xef, 0xf6, 0xf4, 0x53, 0xa4, 0x44, 0x6c, 0xa5, 0x4d, 0x3a, 0x8f, 0x81, - 0x2c, 0x73, 0x4b, 0x84, 0x17, 0x44, 0x84, 0x28, 0x5a, 0x75, 0xd2, 0xd8, - 0xe1, 0x9a, 0xae, 0x50, 0xc8, 0x0d, 0x4f, 0x2e, 0x16, 0x9e, 0x8a, 0x9b, - 0x1c, 0xb9, 0x66, 0x71, 0x8f, 0xc8, 0xb8, 0xe6, 0x0d, 0x46, 0x94, 0xfe, - 0x0e, 0x95, 0x18, 0x37, 0x3a, 0xdb, 0x4c, 0xae, 0x26, 0xda, 0xb5, 0xe8, - 0x81, 0x3b, 0xf7, 0xd1, 0x61, 0x77, 0x76, 0x87, 0xd0, 0x84, 0x3f, 0x68, - 0xe4, 0xc3, 0x0d, 0xad, 0x18, 0x48, 0x62, 0xf6, 0x5f, 0xb2, 0x12, 0x74, - 0xa7, 0x7e, 0xd0, 0xca, 0x7c, 0x89, 0x05, 0x38, 0x3c, 0x75, 0x3a, 0x39, - 0x2b, 0x2b, 0x47, 0x74, 0xc3, 0x43, 0x61, 0xbc, 0xc3, 0x89, 0xa4, 0x72, - 0x00, 0xf6, 0xf3, 0x57, 0x6c, 0x4a, 0x96, 0x97, 0x3b, 0x7d, 0x61, 0x58, - 0xc3, 0x6f, 0xcc, 0x9a, 0x85, 0xb3, 0x21, 0x8a, 0x64, 0x5a, 0x40, 0xfc, - 0x5d, 0xdc, 0xfd, 0x7d, 0xba, 0xfb, 0xfb, 0x70, 0x87, 0x14, 0xcc, 0x28, - 0x0f, 0x2a, 0x22, 0x00, 0xee, 0xc3, 0x8b, 0xcd, 0x5c, 0x78, 0x91, 0xde, - 0x11, 0x53, 0x69, 0xa8, 0xbd, 0x34, 0x51, 0xc7, 0x3d, 0xfb, 0x30, 0xe3, - 0x94, 0xca, 0x2c, 0x1d, 0x68, 0x00, 0x18, 0x30, 0xcc, 0x90, 0xf4, 0x39, - 0xfb, 0xf1, 0x1f, 0x0e, 0x63, 0x33, 0x4e, 0x55, 0xa4, 0xf5, 0x77, 0x04, - 0xbd, 0x26, 0xe0, 0x5a, 0x09, 0x8e, 0x36, 0xaf, 0x15, 0xe6, 0x4e, 0x09, - 0x6c, 0xbe, 0xe9, 0xfd, 0x07, 0x47, 0x28, 0x1c, 0x9a, 0x8c, 0x19, 0x48, - 0xd5, 0x35, 0xeb, 0x02, 0x94, 0xc0, 0x7e, 0x08, 0xc5, 0x8a, 0xa9, 0x88, - 0x21, 0xcb, 0xa6, 0x5b, 0x78, 0xe9, 0x88, 0x64, 0xf1, 0xc4, 0x69, 0x88, - 0xd9, 0x6f, 0x4e, 0x0d, 0x21, 0x70, 0xe3, 0xa8, 0x23, 0xdb, 0xfa, 0x1c, - 0xeb, 0x14, 0x78, 0xa8, 0xae, 0x0c, 0x2a, 0x14, 0x6e, 0x15, 0xcd, 0xa1, - 0x87, 0x5b, 0xa8, 0xc6, 0x39, 0x43, 0x90, 0x6c, 0xff, 0xb3, 0x3f, 0x1a, - 0xe5, 0x06, 0x43, 0x7b, 0xc5, 0x81, 0xa7, 0x80, 0x61, 0xcd, 0xce, 0x33, - 0xdf, 0x7e, 0x9e, 0x56, 0xba, 0xcc, 0xde, 0x4f, 0xa4, 0xed, 0x3d, 0x79, - 0x02, 0xde, 0x2a, 0x39, 0x35, 0x26, 0xbf, 0xff, 0xea, 0xbf, 0xca, 0xb8, - 0x6b, 0xa5, 0x73, 0xaf, 0x44, 0x5e, 0x34, 0x06, 0xf7, 0xfc, 0xce, 0x6f, - 0xad, 0xd3, 0x21, 0x30, 0x00, 0xe3, 0x49, 0xe2, 0x22, 0xe2, 0x15, 0x4e, - 0x70, 0x5d, 0xc6, 0x8c, 0x32, 0xba, 0xd8, 0x39, 0x4f, 0x52, 0x73, 0xaa, - 0x56, 0xe4, 0xa4, 0xd6, 0x89, 0x92, 0xd0, 0x27, 0x7f, 0x81, 0x1c, 0x4f, - 0xb1, 0xb8, 0xfe, 0x6e, 0x16, 0xeb, 0xc4, 0x87, 0x8f, 0x15, 0x0b, 0x5e, - 0x7b, 0x52, 0x4e, 0x24, 0x21, 0x19, 0xf8, 0x66, 0x26, 0x0d, 0x44, 0x5e, - 0x1c, 0x31, 0x2f, 0xed, 0x3b, 0x3d, 0x40, 0xd5, 0x04, 0xcc, 0x93, 0x77, - 0x72, 0x02, 0x7a, 0x2c, 0x2f, 0x7a, 0x94, 0x22, 0x3c, 0xa8, 0x64, 0x8a, - 0x76, 0x58, 0xf8, 0xe4, 0x15, 0x41, 0xd8, 0x49, 0x56, 0x22, 0xf0, 0x88, - 0x4a, 0x2c, 0x68, 0x03, 0x21, 0x1e, 0x68, 0xf8, 0x61, 0x16, 0x8a, 0x3a, - 0x86, 0x94, 0xdb, 0x5c, 0x35, 0xdb, 0xfc, 0xef, 0x3f, 0x6a, 0x6e, 0x40, - 0x8a, 0x59, 0x6b, 0xf3, 0x06, 0xbb, 0x76, 0x8a, 0x6b, 0x7d, 0x44, 0x5c, - 0xeb, 0xc3, 0x63, 0x58, 0xc3, 0xcf, 0x45, 0xb6, 0x04, 0x11, 0xc2, 0xa4, - 0xe1, 0x7f, 0x4f, 0xc5, 0x1d, 0x13, 0x72, 0x20, 0x2f, 0x4b, 0xa8, 0xea, - 0x88, 0x14, 0x1b, 0x7c, 0xd3, 0x54, 0xee, 0x7d, 0x61, 0x66, 0xfe, 0xac, - 0xb9, 0xc2, 0x1b, 0x1d, 0x83, 0x44, 0xcc, 0xb9, 0xe8, 0x50, 0x9a, 0x03, - 0x1d, 0x67, 0x9b, 0xeb, 0x8d, 0x49, 0xaa, 0xb7, 0x28, 0xbf, 0x3a, 0x44, - 0x0d, 0x54, 0x1d, 0x80, 0x06, 0x78, 0xbb, 0x91, 0x93, 0xa9, 0x59, 0x7a, - 0x12, 0x0c, 0x3c, 0x3c, 0x6f, 0x35, 0x14, 0x9e, 0x04, 0x8c, 0xd0, 0x48, - 0xc8, 0x6d, 0x89, 0xce, 0x44, 0x59, 0x64, 0xae, 0x2e, 0xfd, 0xcd, 0x1c, - 0x69, 0x60, 0x48, 0xbd, 0x2a, 0xf0, 0xd1, 0xa8, 0xb2, 0xb3, 0x63, 0x4f, - 0xef, 0xf1, 0xd4, 0x69, 0x11, 0xc0, 0x08, 0xd7, 0x27, 0xfd, 0x36, 0xe0, - 0xb0, 0xa1, 0xd7, 0x73, 0x64, 0x0d, 0x38, 0xf0, 0x1a, 0xa8, 0xba, 0x76, - 0x43, 0x24, 0x5f, 0x27, 0x73, 0xf5, 0x8a, 0x74, 0xbf, 0xc8, 0x05, 0x74, - 0x19, 0xca, 0xc0, 0x9b, 0x79, 0x35, 0xf1, 0x5b, 0x75, 0x11, 0xb2, 0xf9, - 0x9c, 0xb2, 0xf9, 0x4c, 0xd9, 0xdc, 0x8c, 0xd8, 0x73, 0x9f, 0x4f, 0x5f, - 0x90, 0x9c, 0xb3, 0xb6, 0x42, 0xe8, 0x06, 0x50, 0xd4, 0x7e, 0xf3, 0x04, - 0x86, 0xd8, 0x9c, 0x03, 0x06, 0xb7, 0x38, 0x93, 0x3a, 0x37, 0x4e, 0x17, - 0x53, 0x9f, 0xef, 0x10, 0x3a, 0x0f, 0x0c, 0xf0, 0xf8, 0xc1, 0xfc, 0xde, - 0x7c, 0xea, 0xe9, 0x26, 0x58, 0x8c, 0x09, 0x91, 0x5e, 0x5e, 0x2b, 0x17, - 0x1a, 0x57, 0xeb, 0xd0, 0x52, 0x6b, 0xef, 0x38, 0xf7, 0x7a, 0xf2, 0x59, - 0x49, 0x20, 0x8e, 0xc7, 0xf5, 0x36, 0xfe, 0x73, 0xba, 0x9a, 0x11, 0xc0, - 0x93, 0x32, 0x5f, 0xbd, 0x3d, 0x42, 0xbc, 0x23, 0x24, 0x73, 0xad, 0xfd, - 0xcc, 0x72, 0xd5, 0xbe, 0xb7, 0x9b, 0xbb, 0x2c, 0x82, 0x27, 0x63, 0x2e, - 0xeb, 0x05, 0xc0, 0x25, 0xfd, 0x8a, 0xf7, 0xf1, 0x14, 0x2e, 0x34, 0xb9, - 0xd3, 0x68, 0x32, 0xe9, 0x79, 0x3f, 0xe8, 0xd1, 0xcb, 0x31, 0x74, 0x34, - 0x18, 0x70, 0xa5, 0x7a, 0x43, 0xbd, 0x53, 0x1f, 0x2c, 0x01, 0xb3, 0x72, - 0xff, 0x71, 0xdd, 0x26, 0x43, 0xf5, 0x1b, 0x5d, 0x30, 0xdc, 0x41, 0xd7, - 0x1e, 0x0e, 0xec, 0x25, 0x09, 0x53, 0xf4, 0xdb, 0xdf, 0xa8, 0x35, 0xf4, - 0x24, 0xbf, 0x24, 0xf0, 0xa4, 0x0d, 0xdf, 0x64, 0x96, 0x58, 0x5f, 0x79, - 0x0b, 0x30, 0x8b, 0xba, 0xd2, 0x39, 0x48, 0xeb, 0xc8, 0x90, 0xdd, 0xc4, - 0xc0, 0x3a, 0xbd, 0xc3, 0x2e, 0x97, 0xe6, 0x0c, 0x63, 0xb3, 0xda, 0x81, - 0x27, 0xb0, 0xae, 0xbb, 0x8e, 0x42, 0x56, 0x5d, 0xf1, 0x1c, 0xb0, 0x26, - 0x16, 0xa7, 0x36, 0x2b, 0xde, 0xa5, 0xcf, 0x01, 0xad, 0x4e, 0x78, 0x27, - 0xf8, 0x31, 0xbf, 0xc9, 0x24, 0xaa, 0xb6, 0xf5, 0xcd, 0xac, 0x0b, 0x53, - 0xda, 0x37, 0xdd, 0x13, 0xd2, 0xe3, 0xea, 0x2b, 0x29, 0x57, 0xcc, 0x48, - 0xa7, 0x7f, 0x4f, 0x5a, 0x9a, 0x50, 0xcf, 0x4a, 0x05, 0x92, 0xec, 0xeb, - 0xd8, 0x5b, 0xc2, 0xc4, 0x47, 0x9e, 0xe8, 0x14, 0x42, 0x97, 0x7c, 0x87, - 0x44, 0x55, 0xa7, 0x17, 0x8d, 0x5f, 0x74, 0x55, 0x6f, 0x05, 0xd3, 0xef, - 0xa1, 0x27, 0xbc, 0x86, 0xfa, 0xf5, 0xc5, 0xe6, 0xea, 0x40, 0x25, 0x61, - 0x3c, 0x57, 0xb2, 0x41, 0xfd, 0x22, 0x93, 0xac, 0x0f, 0xfa, 0x7c, 0x84, - 0x30, 0xe6, 0x48, 0x6d, 0xf1, 0xa1, 0xe6, 0xf7, 0xe0, 0x43, 0xc9, 0x00, - 0x21, 0x3a, 0x11, 0xd2, 0xeb, 0xda, 0x5b, 0x9a, 0x63, 0xf9, 0x0d, 0xe9, - 0x89, 0x50, 0x4e, 0xa5, 0x0d, 0xcd, 0xe1, 0x1e, 0xd9, 0x27, 0x96, 0xc7, - 0x27, 0x95, 0x83, 0x02, 0x28, 0x27, 0xcf, 0x7c, 0xe5, 0xc9, 0x1a, 0x90, - 0xc6, 0x5f, 0x03, 0x43, 0xe1, 0x71, 0xe8, 0x84, 0x1e, 0x6e, 0x59, 0x5d, - 0xde, 0xce, 0xe2, 0x2a, 0xfd, 0xd0, 0x42, 0xe5, 0xbc, 0xa9, 0x7e, 0xeb, - 0x50, 0x88, 0x2f, 0xac, 0x99, 0x0c, 0x3f, 0xe4, 0x98, 0x09, 0x2d, 0x21, - 0xf8, 0x61, 0x1b, 0x9a, 0xc7, 0xe3, 0x6c, 0xbe, 0x38, 0x57, 0xe7, 0xa9, - 0x86, 0x06, 0x00, 0xbf, 0x47, 0x48, 0x9f, 0x92, 0x23, 0x62, 0xe9, 0x00, - 0x6a, 0x0e, 0xa1, 0xc7, 0x42, 0x49, 0x35, 0x6a, 0x8b, 0xd2, 0x72, 0x5c, - 0x12, 0x8b, 0x27, 0xbb, 0x5e, 0xc4, 0xee, 0x22, 0xfd, 0x4d, 0x43, 0xb7, - 0x9d, 0x78, 0x1e, 0x8b, 0xa8, 0x5c, 0x6c, 0xa3, 0xc8, 0x49, 0x74, 0x9f, - 0x45, 0x2f, 0x17, 0x39, 0xf9, 0xe0, 0x8c, 0x18, 0x10, 0xab, 0xd0, 0xb1, - 0xa8, 0x57, 0xb1, 0xd8, 0xad, 0x42, 0xc0, 0xdd, 0x83, 0x1e, 0x35, 0xb5, - 0xfa, 0x39, 0xda, 0x7b, 0x0c, 0x75, 0xe8, 0x2e, 0x24, 0xeb, 0x03, 0xd9, - 0xa0, 0x17, 0x90, 0xba, 0xcc, 0x00, 0x4f, 0xd5, 0xda, 0xac, 0x3d, 0xfc, - 0xaa, 0x21, 0xc6, 0xcd, 0x2c, 0x8f, 0x7e, 0x24, 0x17, 0x78, 0x55, 0x5f, - 0x9f, 0xe3, 0x44, 0x8a, 0xa3, 0xb1, 0x0a, 0xf4, 0xbc, 0xd6, 0x16, 0xee, - 0x5c, 0x91, 0x2e, 0xd1, 0xa9, 0x4f, 0xbc, 0x99, 0x50, 0xaf, 0x37, 0x13, - 0xea, 0xe7, 0xcd, 0x04, 0x27, 0xa3, 0x74, 0x6a, 0xd6, 0x02, 0xb9, 0x29, - 0xd4, 0xfd, 0xc8, 0x91, 0x06, 0x47, 0x1c, 0x75, 0xea, 0x09, 0x3a, 0x3f, - 0x12, 0x72, 0x46, 0x4a, 0xce, 0x4c, 0xc0, 0x79, 0x09, 0xfb, 0xcc, 0xc0, - 0x0f, 0x35, 0xa6, 0xf3, 0xce, 0x55, 0x01, 0x4c, 0xa7, 0xef, 0x74, 0x75, - 0x52, 0x37, 0x8c, 0x23, 0x1d, 0xb8, 0x08, 0x78, 0x4c, 0x89, 0xb3, 0x95, - 0x69, 0x1a, 0x2e, 0xc0, 0x49, 0x87, 0x13, 0x0e, 0xc4, 0x8d, 0x24, 0x29, - 0xf9, 0xe2, 0x9f, 0x33, 0x77, 0x93, 0x8a, 0xa2, 0x35, 0x2d, 0xf7, 0xa8, - 0xc6, 0xe5, 0x9e, 0x1d, 0xc9, 0x61, 0x66, 0x4c, 0x54, 0x77, 0x14, 0x13, - 0x12, 0xa3, 0x94, 0xa3, 0x05, 0xd7, 0xff, 0xc2, 0x2c, 0x11, 0xc8, 0xb9, - 0x87, 0xaf, 0xa9, 0xc7, 0x37, 0x8d, 0xf2, 0x3b, 0x8d, 0x4c, 0xd4, 0xa4, - 0x61, 0xca, 0x01, 0x43, 0x99, 0x7c, 0x4c, 0x5a, 0x78, 0x29, 0xd7, 0xc1, - 0x53, 0x4e, 0x82, 0x91, 0x2e, 0x31, 0x8f, 0xab, 0xcb, 0x97, 0xbc, 0x7f, - 0x85, 0xef, 0xaf, 0xda, 0x32, 0x36, 0xe0, 0x48, 0xe3, 0x97, 0x87, 0xc5, - 0x48, 0x23, 0x18, 0x97, 0x21, 0xcc, 0x48, 0x66, 0x62, 0x50, 0xe9, 0x5b, - 0x6e, 0x52, 0x90, 0x22, 0x2c, 0xa7, 0x4b, 0xa8, 0x9f, 0x00, 0x9e, 0x6e, - 0x9d, 0x93, 0x18, 0xb5, 0xd4, 0xff, 0x10, 0xbd, 0x0c, 0x83, 0x7e, 0x5d, - 0xbf, 0xb2, 0x91, 0x19, 0x15, 0x5a, 0x5a, 0x48, 0x8c, 0x1f, 0xf8, 0xe2, - 0x6a, 0x8f, 0xb0, 0xd6, 0x8f, 0x68, 0x9d, 0x3a, 0x82, 0x38, 0x2e, 0x1f, - 0x8e, 0x5b, 0xd4, 0x54, 0x7f, 0xba, 0x29, 0x89, 0xda, 0xbf, 0xb5, 0xe1, - 0x13, 0x46, 0xa3, 0x5d, 0x96, 0x4b, 0xd5, 0x2f, 0x79, 0xbf, 0x0b, 0x78, - 0x9f, 0x7a, 0x0a, 0x9c, 0xe8, 0xce, 0xf6, 0xbd, 0x47, 0x5b, 0xf6, 0xbd, - 0x97, 0x41, 0xd1, 0x89, 0x72, 0x42, 0x1e, 0x84, 0x01, 0x3e, 0x7a, 0x9a, - 0x6d, 0xd4, 0x65, 0xfb, 0x37, 0xb8, 0xca, 0xe8, 0x1f, 0x57, 0x7f, 0xac, - 0x5f, 0x78, 0xc7, 0xc9, 0xb5, 0x0b, 0x2e, 0xdd, 0x99, 0x93, 0xaa, 0x62, - 0x94, 0xb4, 0x8f, 0x09, 0x0b, 0xb6, 0x67, 0x33, 0x2d, 0x35, 0xd3, 0x7b, - 0x86, 0xd5, 0xb9, 0x5e, 0x73, 0x7e, 0xae, 0x7a, 0xf9, 0x3c, 0x89, 0x8b, - 0x8f, 0x9c, 0xcd, 0x92, 0xba, 0xa4, 0x91, 0x54, 0x04, 0xf8, 0x11, 0xdc, - 0x9e, 0xad, 0x17, 0xd4, 0x11, 0xb0, 0x67, 0xfe, 0xbc, 0x54, 0xd1, 0x79, - 0x50, 0x22, 0x58, 0xd4, 0x65, 0x5d, 0x33, 0xae, 0xcc, 0xc8, 0xe9, 0x76, - 0xbb, 0x46, 0x2d, 0xea, 0xb8, 0x10, 0xd1, 0x50, 0x8d, 0x7a, 0x77, 0xdc, - 0xba, 0x8f, 0x5e, 0x6d, 0x50, 0x24, 0xb9, 0xc4, 0x88, 0xb9, 0x6c, 0xb9, - 0x1a, 0x40, 0x7c, 0x0d, 0xd8, 0xa9, 0x1e, 0x5a, 0x4c, 0xe1, 0x81, 0x2f, - 0x29, 0xc3, 0xbb, 0x6f, 0xca, 0xbb, 0x1f, 0xa1, 0x8f, 0x0f, 0xd8, 0x1a, - 0x64, 0x75, 0xf8, 0x63, 0xf5, 0xaa, 0xec, 0x6d, 0x5a, 0x7b, 0x7c, 0xc0, - 0xbd, 0xa6, 0x48, 0xaa, 0xb0, 0xb7, 0xe9, 0x48, 0xdf, 0x47, 0xc9, 0xb4, - 0x97, 0xb9, 0xbb, 0x98, 0xb5, 0xa8, 0xe8, 0xb0, 0xb3, 0x34, 0x10, 0x92, - 0x4e, 0x80, 0x33, 0x3b, 0x10, 0x2e, 0x05, 0x34, 0xac, 0x02, 0x5e, 0x4a, - 0x42, 0x44, 0x84, 0x9e, 0x47, 0xde, 0x9d, 0x38, 0x7a, 0xf0, 0x53, 0x06, - 0x98, 0xc9, 0x82, 0x2e, 0x60, 0x99, 0x3d, 0x3b, 0x24, 0x32, 0x84, 0xdf, - 0x6b, 0x61, 0xea, 0xd9, 0x7d, 0xc1, 0x48, 0x6c, 0xd1, 0x59, 0xfe, 0xc0, - 0x19, 0xbc, 0x09, 0xa8, 0x47, 0x14, 0xe0, 0x5c, 0xae, 0x7d, 0x3f, 0x48, - 0xa5, 0xda, 0xe2, 0xcb, 0xfc, 0x38, 0x56, 0x70, 0x8e, 0x4b, 0x7e, 0x90, - 0xe3, 0x5e, 0x13, 0x9c, 0xfb, 0x39, 0x28, 0xc7, 0x94, 0xa8, 0x67, 0x26, - 0xde, 0xe3, 0x0f, 0x9c, 0x3c, 0x65, 0x83, 0x9a, 0xac, 0x0c, 0xe6, 0xe8, - 0xd5, 0x93, 0x7a, 0xa7, 0x40, 0x5c, 0x9e, 0xda, 0xbf, 0x90, 0xaf, 0xa0, - 0xf6, 0x88, 0xde, 0xef, 0xa2, 0x74, 0x57, 0x17, 0x9e, 0xb2, 0xe5, 0x35, - 0x15, 0xe0, 0xd2, 0x93, 0x9e, 0xc7, 0x98, 0x80, 0x2b, 0x99, 0x12, 0x53, - 0xa0, 0xb7, 0xf4, 0x05, 0x23, 0x5d, 0xd2, 0xbc, 0x9c, 0x55, 0x41, 0x5a, - 0x85, 0x7b, 0xb6, 0xc7, 0x85, 0x5f, 0x06, 0x29, 0x8f, 0xbd, 0xd0, 0xbd, - 0xff, 0x66, 0xca, 0x7a, 0x6f, 0x4e, 0x1e, 0x4a, 0xad, 0xd6, 0x30, 0x6d, - 0x92, 0x23, 0x6f, 0x86, 0x0b, 0xeb, 0x03, 0xe8, 0xd5, 0x6d, 0xd7, 0x5c, - 0x91, 0x15, 0xe5, 0xbd, 0x69, 0xc5, 0x91, 0x93, 0x9b, 0x16, 0xb1, 0x48, - 0x45, 0x94, 0x6b, 0x9e, 0x46, 0x21, 0x3c, 0xbb, 0xed, 0xd9, 0x39, 0x1b, - 0x2e, 0x16, 0xae, 0x11, 0x5f, 0x83, 0x60, 0x3c, 0x25, 0x3e, 0x6a, 0xc0, - 0x70, 0x90, 0xe5, 0x4e, 0x1c, 0x33, 0x12, 0x52, 0x8a, 0xea, 0xa9, 0x78, - 0x9e, 0x37, 0x05, 0xf5, 0x94, 0xef, 0x67, 0x9f, 0xe8, 0x61, 0xd7, 0x45, - 0x52, 0xe2, 0xea, 0xfb, 0xd1, 0x5a, 0xa2, 0x31, 0xaa, 0x64, 0xab, 0x27, - 0x6e, 0x89, 0x54, 0xc6, 0x50, 0x5c, 0xb6, 0x46, 0x30, 0x7e, 0xdc, 0xc4, - 0xcc, 0xf9, 0x1c, 0xd3, 0xd7, 0xac, 0x37, 0x0f, 0x89, 0xf7, 0x5e, 0x1e, - 0x29, 0x79, 0xae, 0x36, 0xc7, 0xcb, 0xa2, 0xf1, 0xf1, 0xde, 0x3b, 0x97, - 0xe1, 0x16, 0x89, 0x02, 0xba, 0x58, 0x66, 0xdc, 0xb8, 0x51, 0xd1, 0xb3, - 0xdd, 0xa6, 0x0c, 0xe6, 0x94, 0xce, 0x67, 0xc7, 0x78, 0xe2, 0x7e, 0x92, - 0x77, 0x27, 0x32, 0x41, 0x67, 0x6b, 0xf9, 0x61, 0xdf, 0x6f, 0x1d, 0xf6, - 0x64, 0x9e, 0xbd, 0x2c, 0xa9, 0xc0, 0x7c, 0x80, 0x42, 0xc0, 0x25, 0x78, - 0x17, 0x71, 0x24, 0x68, 0xec, 0xac, 0x92, 0xb8, 0xd7, 0xbf, 0xc8, 0x57, - 0x7e, 0x63, 0x3d, 0x8c, 0xbd, 0x8f, 0xe9, 0x9a, 0xa8, 0x84, 0x19, 0x51, - 0x11, 0xf9, 0x88, 0xb7, 0x09, 0xdc, 0x4c, 0xf6, 0x17, 0x58, 0x51, 0x97, - 0x4b, 0x5c, 0xe5, 0x08, 0x36, 0x86, 0x37, 0x86, 0x7a, 0xf2, 0xaa, 0xf8, - 0xbb, 0xa1, 0x9e, 0x81, 0x33, 0xcb, 0x03, 0xf0, 0x15, 0xe8, 0xb8, 0xd8, - 0x5e, 0x82, 0x3e, 0xb3, 0xae, 0xc6, 0x7c, 0xe1, 0x32, 0x09, 0xf5, 0x50, - 0xa3, 0xc4, 0x19, 0x9d, 0x78, 0xab, 0x3f, 0x18, 0xe0, 0x8a, 0x82, 0xa3, - 0x9c, 0xdc, 0xac, 0x5f, 0xb7, 0xbe, 0x9f, 0x05, 0xaa, 0x35, 0x2d, 0x2a, - 0x24, 0x76, 0x4f, 0x5f, 0xd3, 0xd8, 0x45, 0x99, 0xf5, 0xb2, 0xb1, 0xe5, - 0x44, 0x0c, 0x9c, 0xc0, 0xaf, 0xb4, 0xc5, 0x05, 0x83, 0xef, 0xb4, 0x56, - 0xec, 0x0e, 0x15, 0xf5, 0x94, 0x63, 0xa9, 0xe3, 0xcc, 0x67, 0x12, 0xbe, - 0x7a, 0xd6, 0x69, 0xa5, 0x31, 0xe6, 0xb2, 0x42, 0x91, 0x8c, 0x12, 0x95, - 0xf7, 0x55, 0x1e, 0xd7, 0xf9, 0x47, 0xd2, 0x4a, 0x7b, 0x0e, 0x7d, 0x80, - 0xd3, 0x15, 0x8f, 0x01, 0xa2, 0x28, 0xbf, 0x4a, 0x5b, 0xba, 0x83, 0xb6, - 0xf4, 0x72, 0x2a, 0xfe, 0x4c, 0xbf, 0xa3, 0x7d, 0xe8, 0x4e, 0xf6, 0xa1, - 0x3b, 0x99, 0x6f, 0x0f, 0x09, 0x58, 0xc2, 0x99, 0x82, 0xb9, 0x0c, 0x1f, - 0x38, 0x7d, 0x9c, 0x91, 0xb1, 0x2a, 0x1e, 0x80, 0xe9, 0x4c, 0x86, 0x5e, - 0x79, 0xc4, 0x03, 0xa8, 0x8f, 0x15, 0x24, 0x94, 0x16, 0x48, 0xbb, 0x2d, - 0x72, 0x7d, 0xf6, 0xc2, 0xbd, 0x74, 0xfd, 0xaf, 0x64, 0xcb, 0x0e, 0x23, - 0x1d, 0x8f, 0x0b, 0xdf, 0x0d, 0x3d, 0xfa, 0x84, 0x2a, 0x5e, 0xa0, 0x23, - 0x60, 0xce, 0x65, 0xd6, 0x78, 0x80, 0x51, 0x90, 0x15, 0xfb, 0xc0, 0xc1, - 0xfb, 0xa6, 0xc9, 0x95, 0x51, 0x27, 0x34, 0x70, 0x33, 0x67, 0x22, 0xd2, - 0x8f, 0xb9, 0x3a, 0xe7, 0xf8, 0x46, 0xa2, 0x57, 0x5c, 0x58, 0xa8, 0x7c, - 0x1e, 0x6d, 0x7a, 0x7c, 0x7c, 0x9d, 0x1e, 0x97, 0x80, 0xae, 0x0d, 0xe8, - 0xd1, 0xa2, 0x24, 0x0d, 0xa9, 0xb5, 0x31, 0x31, 0xc1, 0x5c, 0xb5, 0x4a, - 0x4b, 0xb0, 0x0a, 0x5c, 0x56, 0x1b, 0xd7, 0x0b, 0x87, 0x96, 0x1e, 0x35, - 0x77, 0xfe, 0x0f, 0x5e, 0x38, 0xcf, 0xe6, 0x2e, 0x8a, 0x5f, 0x6a, 0xb4, - 0x20, 0x20, 0x8f, 0x1c, 0x8f, 0x07, 0x84, 0x4b, 0xde, 0xa4, 0x20, 0x50, - 0x9f, 0x72, 0x98, 0x69, 0x26, 0xf5, 0x92, 0xeb, 0x75, 0x38, 0x12, 0x5c, - 0x9c, 0x80, 0x7a, 0x7d, 0x10, 0xdd, 0x7d, 0x24, 0x44, 0x12, 0x1c, 0xcc, - 0xb4, 0xea, 0xab, 0x24, 0x8e, 0x19, 0xff, 0xda, 0x57, 0x49, 0x88, 0x23, - 0x9e, 0x35, 0x57, 0x49, 0x0c, 0xfe, 0x76, 0x6b, 0x8b, 0x9a, 0x19, 0x33, - 0xa4, 0xf2, 0xc5, 0x75, 0x99, 0x74, 0x5b, 0x13, 0x9d, 0x77, 0x15, 0x6f, - 0x1e, 0x2b, 0xa9, 0x2b, 0x0e, 0x64, 0x46, 0x22, 0x76, 0x28, 0x3f, 0x2f, - 0xb1, 0xee, 0x64, 0x64, 0x8c, 0xbc, 0x3b, 0xb4, 0x27, 0x0c, 0xd9, 0x01, - 0x9d, 0x0c, 0x71, 0xc3, 0x97, 0x22, 0xb3, 0xf3, 0xe6, 0xba, 0xe4, 0xaa, - 0xbd, 0xe6, 0x48, 0xe6, 0x3e, 0x0d, 0xbd, 0xaf, 0x91, 0x50, 0x03, 0x32, - 0xe2, 0xec, 0x1f, 0x74, 0x53, 0xc7, 0x61, 0x5f, 0x03, 0x5b, 0xf3, 0xe1, - 0x78, 0xc7, 0xff, 0x9e, 0x9f, 0xb0, 0x84, 0x97, 0x96, 0x02, 0x89, 0xe3, - 0x70, 0xd4, 0x5e, 0xb7, 0x6b, 0x4a, 0xda, 0xab, 0xa7, 0x04, 0xc7, 0x31, - 0xd2, 0x8f, 0x13, 0x47, 0xc7, 0xca, 0x7d, 0xbc, 0x1e, 0xef, 0x38, 0x56, - 0x2a, 0x1d, 0x26, 0xb3, 0x0f, 0xc2, 0x1b, 0x2d, 0xb6, 0xd5, 0xc3, 0xfd, - 0x65, 0xac, 0xc1, 0x09, 0x9d, 0xb1, 0xc7, 0xec, 0x6a, 0xc1, 0xe6, 0xf8, - 0x72, 0x2a, 0xda, 0x78, 0x25, 0xde, 0x71, 0xae, 0x0c, 0x38, 0x8e, 0xa8, - 0xb6, 0x49, 0xba, 0x4d, 0x80, 0xcb, 0x10, 0x5d, 0x89, 0xaf, 0xf3, 0x47, - 0xe8, 0x7a, 0xaa, 0x3f, 0xfc, 0x84, 0x04, 0xa1, 0x0b, 0xaa, 0x91, 0x22, - 0xbc, 0x08, 0x1d, 0xd9, 0x01, 0xbe, 0x94, 0x12, 0x49, 0x85, 0x76, 0xb4, - 0x3e, 0x37, 0x11, 0xa5, 0xb2, 0xc9, 0x37, 0xd9, 0x45, 0xac, 0x8f, 0x0c, - 0xaf, 0x9d, 0x17, 0x1f, 0x97, 0xd1, 0x53, 0x54, 0x8f, 0xa9, 0xf5, 0x11, - 0x74, 0x3f, 0xef, 0xfd, 0xb4, 0x01, 0xc8, 0x89, 0x4f, 0x56, 0x2b, 0xbd, - 0x21, 0x47, 0xee, 0x78, 0x04, 0x39, 0x82, 0xcb, 0x07, 0x91, 0x45, 0x68, - 0xc0, 0x71, 0x18, 0xb6, 0x4b, 0x77, 0xbd, 0x2c, 0x17, 0xd7, 0x4b, 0x1f, - 0x3d, 0xf2, 0x19, 0xfd, 0xa1, 0xfa, 0x3b, 0xeb, 0x6a, 0x87, 0xc7, 0xed, - 0x91, 0x92, 0x83, 0x63, 0x96, 0xf6, 0x71, 0x29, 0x90, 0x23, 0x8b, 0xc3, - 0x1f, 0x80, 0xed, 0xd6, 0x97, 0xf5, 0x08, 0x52, 0xe1, 0xd9, 0x24, 0xa4, - 0x28, 0x0d, 0xbc, 0x06, 0x9e, 0xcd, 0x85, 0x44, 0x7a, 0x31, 0x0a, 0xcb, - 0x01, 0x53, 0xf7, 0x06, 0x9a, 0xc9, 0xf5, 0x57, 0xc4, 0xaf, 0x81, 0x1c, - 0x67, 0x3a, 0xcb, 0x99, 0x95, 0x63, 0x25, 0x6d, 0x5a, 0x7b, 0x99, 0x1f, - 0x97, 0xfe, 0x7b, 0xe0, 0x4c, 0x62, 0x4f, 0xd9, 0x7e, 0xf1, 0xfb, 0x9b, - 0x85, 0x00, 0xd8, 0xae, 0x58, 0x81, 0xda, 0x20, 0x1e, 0x3e, 0x4b, 0xce, - 0xda, 0xd6, 0xa3, 0x37, 0x03, 0x83, 0xd9, 0x0c, 0x1c, 0xcf, 0x89, 0x8e, - 0x6e, 0x99, 0x39, 0x2e, 0x6b, 0x86, 0x27, 0xd1, 0xc4, 0xaa, 0x27, 0x72, - 0x80, 0x3e, 0x90, 0x39, 0x20, 0xf1, 0xf1, 0x25, 0xe7, 0x0c, 0x4e, 0x2b, - 0x44, 0xdc, 0x24, 0xdb, 0xae, 0x14, 0x76, 0x25, 0x7f, 0x24, 0x97, 0x1f, - 0x71, 0x5b, 0x58, 0x30, 0xcb, 0xd3, 0x89, 0x2b, 0xce, 0x78, 0x5b, 0x6e, - 0x74, 0x11, 0x9f, 0x17, 0xfb, 0x2c, 0x16, 0xbc, 0x40, 0xd1, 0x99, 0xbb, - 0xc8, 0x2c, 0x70, 0x91, 0xaf, 0xeb, 0x47, 0x35, 0x42, 0xa7, 0x70, 0x36, - 0xe2, 0xfa, 0xbd, 0xe2, 0x0d, 0xca, 0x8c, 0xc6, 0xe7, 0xf1, 0x49, 0xf4, - 0x29, 0xad, 0x93, 0xd7, 0x48, 0x6c, 0x52, 0xd8, 0x1d, 0xb6, 0xcb, 0x87, - 0x8c, 0x6a, 0xbf, 0x26, 0x71, 0xbf, 0x84, 0xe3, 0xa7, 0xe8, 0x89, 0x2e, - 0xcf, 0x3b, 0xd3, 0x46, 0xd5, 0xd6, 0x9f, 0x87, 0x4f, 0xea, 0x52, 0x48, - 0xf1, 0x5c, 0x7c, 0x12, 0xc9, 0x8a, 0x82, 0x54, 0x04, 0x25, 0x83, 0x7b, - 0x5d, 0x02, 0x7b, 0x45, 0x39, 0xd6, 0xb9, 0xf7, 0x0d, 0x10, 0x1a, 0x81, - 0x0c, 0xfb, 0xeb, 0xcd, 0x11, 0x64, 0xcd, 0x87, 0x9b, 0x41, 0x5a, 0x6f, - 0xcf, 0x61, 0xe8, 0xc0, 0x0a, 0x74, 0x27, 0xf6, 0xde, 0x66, 0x72, 0xb2, - 0xf5, 0xba, 0xec, 0x42, 0x82, 0xf0, 0x87, 0x9e, 0x87, 0xe8, 0x74, 0xaf, - 0xeb, 0x18, 0xfc, 0xea, 0x63, 0xf0, 0x6b, 0xca, 0x8e, 0x6e, 0x30, 0xc6, - 0xa6, 0x57, 0x3c, 0xdb, 0xd4, 0x92, 0xea, 0x7e, 0xd7, 0x68, 0x2c, 0x82, - 0x64, 0xfe, 0x96, 0xf4, 0x47, 0xfa, 0x6e, 0x7b, 0x0f, 0xb4, 0xc5, 0xf4, - 0xcb, 0xe1, 0x35, 0xa0, 0xe8, 0x11, 0xd7, 0x5c, 0x3b, 0x8e, 0xa4, 0xfd, - 0xd2, 0x78, 0x67, 0x60, 0x97, 0xd6, 0x08, 0x5c, 0xae, 0x38, 0xc3, 0xed, - 0x8d, 0xf2, 0x85, 0x1d, 0xa9, 0x74, 0x43, 0x55, 0xdc, 0x0e, 0x5f, 0x2a, - 0x72, 0x7f, 0xde, 0xba, 0xfb, 0xec, 0xdb, 0x2b, 0xab, 0x1f, 0x00, 0x53, - 0xf2, 0x08, 0x95, 0x4d, 0x10, 0x17, 0x1f, 0xf3, 0x79, 0x99, 0xa8, 0x1a, - 0xf9, 0xea, 0x4a, 0x8e, 0x8c, 0x3e, 0xe7, 0xcc, 0x3c, 0x16, 0x40, 0x22, - 0x29, 0xc0, 0xdd, 0x53, 0x2e, 0x8d, 0x48, 0xc9, 0xe9, 0x10, 0x3a, 0x4e, - 0x0d, 0xcc, 0xfe, 0xc3, 0x9d, 0x8b, 0xba, 0xf5, 0x59, 0x92, 0x4d, 0x96, - 0xb5, 0x7f, 0x47, 0x24, 0xeb, 0x2d, 0x4e, 0xdd, 0x1b, 0xda, 0x03, 0x4d, - 0x89, 0xd4, 0x80, 0x7c, 0x25, 0x0e, 0x35, 0x8b, 0x8b, 0x0d, 0x6f, 0x37, - 0x79, 0x47, 0xb0, 0x6e, 0xed, 0xc6, 0xad, 0x72, 0x43, 0x09, 0x6c, 0xec, - 0xd7, 0x5e, 0x2b, 0xb0, 0xb6, 0xd8, 0xb6, 0xd6, 0x75, 0x6b, 0x90, 0xa0, - 0xe6, 0xb1, 0xc0, 0x97, 0x0f, 0x3c, 0x1e, 0x54, 0x37, 0x35, 0xa7, 0x2d, - 0xcf, 0xc5, 0xd5, 0xed, 0xed, 0x8a, 0x76, 0x95, 0x6b, 0x93, 0x81, 0x74, - 0x21, 0xde, 0x6f, 0xd2, 0xc6, 0x76, 0x8b, 0x5f, 0xcc, 0x4f, 0x81, 0x39, - 0xaf, 0xe9, 0x13, 0xad, 0x81, 0xc8, 0x66, 0xdb, 0x3d, 0x8f, 0x17, 0xf9, - 0x72, 0x02, 0x4d, 0xcf, 0x5a, 0x93, 0x50, 0x6e, 0x66, 0x04, 0x3c, 0xe2, - 0xd9, 0x29, 0xbf, 0x76, 0x01, 0xec, 0xa1, 0xc7, 0x2e, 0x83, 0x74, 0x0e, - 0x0e, 0xb8, 0xf4, 0x10, 0xa9, 0x8d, 0x7b, 0xb1, 0x97, 0xe3, 0xb0, 0x7c, - 0x49, 0x0c, 0x06, 0xf7, 0x43, 0x5a, 0x6c, 0x89, 0x4b, 0xc7, 0x4a, 0x8d, - 0xb3, 0x3b, 0xb5, 0xf9, 0x4e, 0x65, 0x5b, 0x82, 0x5c, 0x94, 0xe0, 0x25, - 0x54, 0xb9, 0x3a, 0x66, 0x98, 0x6b, 0x0f, 0x9e, 0xfa, 0xe6, 0xaa, 0x24, - 0xd8, 0xd0, 0xc1, 0x02, 0xd0, 0x64, 0xf3, 0x25, 0xf3, 0x92, 0xf1, 0x55, - 0x89, 0x59, 0x23, 0x31, 0xeb, 0x12, 0xc1, 0x9c, 0x61, 0xa2, 0x35, 0x30, - 0xe7, 0xc2, 0xf2, 0x7a, 0xca, 0xf4, 0xd4, 0x66, 0x6d, 0x3b, 0x03, 0xcb, - 0x44, 0xd5, 0xd8, 0x17, 0x6b, 0xd6, 0x88, 0xf3, 0xd8, 0x8e, 0x53, 0x33, - 0x53, 0x03, 0xd4, 0x61, 0x7b, 0x0b, 0x84, 0x27, 0xde, 0x90, 0x24, 0x8a, - 0x02, 0xb9, 0x9e, 0x2e, 0xbf, 0x5e, 0x03, 0x89, 0x07, 0xe7, 0x04, 0x18, - 0xc4, 0x76, 0xdd, 0xe6, 0x11, 0xc5, 0xac, 0x6e, 0x7d, 0xc3, 0x07, 0x58, - 0xf9, 0xde, 0x4e, 0xad, 0x8f, 0x18, 0x8a, 0x53, 0x9f, 0x81, 0x95, 0x29, - 0x1b, 0x23, 0xe4, 0xad, 0xf5, 0x09, 0x8d, 0xe3, 0x72, 0xc5, 0x11, 0x67, - 0x4b, 0x16, 0xda, 0xbc, 0x89, 0x74, 0x0f, 0x97, 0x49, 0x66, 0xbb, 0xb6, - 0x9e, 0x86, 0xd7, 0x1a, 0xd7, 0x8c, 0xa4, 0x8c, 0xda, 0x43, 0xc5, 0xb9, - 0xef, 0x8c, 0xa2, 0xde, 0x63, 0xe3, 0x44, 0x38, 0x7d, 0xd7, 0xb1, 0x3b, - 0xda, 0x7b, 0x04, 0x35, 0x03, 0x3c, 0xb7, 0x23, 0x4c, 0x6e, 0x84, 0x3a, - 0x4c, 0x4f, 0x67, 0x48, 0x0f, 0x6d, 0x0f, 0x8d, 0x3a, 0x10, 0x2f, 0x38, - 0x65, 0x75, 0xc0, 0xa2, 0x3d, 0x52, 0xb3, 0x44, 0x6d, 0xe7, 0x3e, 0x28, - 0x31, 0x2f, 0xf5, 0xb4, 0xf7, 0x5d, 0x27, 0x52, 0x0d, 0x2e, 0x77, 0xa6, - 0xff, 0xbd, 0xdc, 0xa3, 0x12, 0x0d, 0x72, 0xe7, 0xa4, 0xbd, 0xd7, 0xa9, - 0x3f, 0xf9, 0x8e, 0x13, 0xe6, 0xba, 0x5a, 0xc1, 0xab, 0x2b, 0xf8, 0x45, - 0x0c, 0x7b, 0x99, 0xf8, 0xdb, 0x68, 0xc8, 0xce, 0xab, 0x72, 0x5f, 0xae, - 0xb7, 0xb4, 0x2b, 0xaf, 0x34, 0xe0, 0xba, 0xdf, 0x43, 0x99, 0x27, 0xbc, - 0xd8, 0xa6, 0xcb, 0x4b, 0x4b, 0xea, 0x44, 0x7c, 0xf3, 0x7e, 0x67, 0xa6, - 0x4e, 0xaf, 0x25, 0x8c, 0xef, 0xeb, 0x8d, 0x97, 0x04, 0x81, 0xdb, 0x4d, - 0xb1, 0xea, 0x9c, 0x4e, 0x08, 0x17, 0x7b, 0x94, 0xa0, 0x9e, 0xb4, 0x15, - 0x60, 0xba, 0x0f, 0x1f, 0x29, 0x70, 0xf0, 0xec, 0x72, 0xf2, 0x11, 0xf4, - 0x0e, 0x3d, 0x5c, 0xa2, 0xe0, 0x04, 0xaf, 0x74, 0xe5, 0xb4, 0xef, 0x3f, - 0x52, 0xf2, 0x55, 0x48, 0xbe, 0x8a, 0xb6, 0x87, 0x5f, 0x19, 0x70, 0x0f, - 0x5a, 0xd9, 0x3d, 0xa0, 0xdb, 0x66, 0x74, 0x90, 0x2b, 0xe9, 0xd4, 0xc0, - 0x3a, 0xf8, 0xdb, 0x1f, 0xa3, 0x8a, 0x2b, 0x70, 0xbb, 0x7c, 0x60, 0x61, - 0x04, 0xc1, 0x08, 0x62, 0x2d, 0xef, 0xbc, 0xe1, 0xc7, 0x8f, 0x42, 0xba, - 0xe1, 0x0d, 0xe1, 0xf4, 0x2f, 0x58, 0x28, 0x5e, 0x78, 0x33, 0xd8, 0x88, - 0x3d, 0x54, 0xea, 0x11, 0x77, 0xe2, 0xe8, 0x68, 0xea, 0xf2, 0x26, 0xa9, - 0xe3, 0xf8, 0x8f, 0x0d, 0x6f, 0x5e, 0x8f, 0x49, 0xe6, 0x19, 0x03, 0x27, - 0xbf, 0x52, 0x44, 0x25, 0x39, 0x95, 0x23, 0xf0, 0x65, 0xcb, 0xd8, 0xe9, - 0x8d, 0xea, 0x41, 0x45, 0x58, 0xbf, 0x39, 0x3f, 0xe2, 0xf1, 0xa3, 0xe6, - 0x64, 0xce, 0x4e, 0xef, 0xb7, 0x59, 0x52, 0x8f, 0x93, 0xd4, 0x68, 0x13, - 0x01, 0xa8, 0x38, 0x4f, 0xd7, 0x57, 0x51, 0xc2, 0xb6, 0xbd, 0x03, 0x6f, - 0x32, 0xb2, 0xe0, 0xad, 0x97, 0x45, 0x97, 0xb5, 0x89, 0xc6, 0x43, 0x95, - 0x79, 0xaa, 0x4f, 0x9f, 0xd7, 0xb1, 0x1a, 0x2a, 0x85, 0xdd, 0x77, 0x3b, - 0xd2, 0x59, 0xb4, 0x26, 0xa2, 0xfd, 0x10, 0x44, 0x8d, 0x41, 0x31, 0x30, - 0x01, 0xf4, 0x6f, 0xe0, 0xd7, 0xfb, 0x0e, 0x4c, 0xb7, 0xd6, 0x83, 0x65, - 0x83, 0xbf, 0x00, 0xc2, 0xe8, 0x20, 0xdb, 0x49, 0x76, 0x7e, 0xe5, 0xf2, - 0xc0, 0x2b, 0x0e, 0x22, 0xba, 0xb0, 0xe9, 0xc6, 0x91, 0x9f, 0xb4, 0x70, - 0xfb, 0x8a, 0xd6, 0xf6, 0x43, 0x85, 0xbb, 0x03, 0xd4, 0xa2, 0x8f, 0x6e, - 0xb0, 0xa3, 0xe3, 0xb1, 0x60, 0x1e, 0xc2, 0xac, 0xbf, 0x1e, 0xfe, 0xaf, - 0x94, 0x65, 0xd4, 0xdf, 0xa1, 0xea, 0x54, 0x85, 0x90, 0x7f, 0x46, 0x10, - 0x3a, 0x10, 0xf6, 0xe7, 0xfd, 0xff, 0x8f, 0xfd, 0x9f, 0xd7, 0x2f, 0xfd, - 0x41, 0x1a, 0x19, 0x48, 0x11, 0xee, 0x5f, 0x5a, 0x72, 0x9d, 0xbd, 0xc0, - 0x74, 0x47, 0x04, 0xf8, 0x0e, 0x44, 0x17, 0x4c, 0x8d, 0x01, 0x4e, 0x84, - 0xf0, 0xc8, 0x07, 0xb3, 0x02, 0x14, 0x4f, 0xe4, 0x39, 0x91, 0x66, 0xfb, - 0x07, 0xef, 0xb1, 0x39, 0xf6, 0x46, 0x00, 0xf0, 0xcf, 0xed, 0x87, 0x80, - 0x05, 0xe3, 0x48, 0x71, 0x0e, 0x71, 0x0c, 0xd7, 0xa1, 0xc7, 0xfa, 0x75, - 0xe8, 0xdb, 0xd7, 0x11, 0x9f, 0xbe, 0x8e, 0xf0, 0xf9, 0x75, 0xb8, 0x1b, - 0x6a, 0x25, 0x17, 0xa0, 0x1b, 0x3f, 0x14, 0x8a, 0xe7, 0x40, 0x94, 0x66, - 0x63, 0x44, 0xbb, 0xdb, 0x2c, 0x1b, 0x13, 0x87, 0xbd, 0xc0, 0xf5, 0xe6, - 0xdf, 0x42, 0x67, 0xa4, 0x23, 0x77, 0xc4, 0x95, 0x52, 0x37, 0x0f, 0x7e, - 0xb8, 0xa8, 0xa2, 0x73, 0x2a, 0x4e, 0xda, 0x5c, 0x88, 0xfc, 0x96, 0x4f, - 0xd5, 0x0f, 0xf1, 0x6a, 0xc7, 0x90, 0xaf, 0x76, 0x38, 0x8a, 0xe4, 0xaf, - 0xdf, 0x5e, 0xef, 0x7c, 0xc8, 0x63, 0xe0, 0xfb, 0x1d, 0x9e, 0xb8, 0x2d, - 0x53, 0xb4, 0x3f, 0x55, 0x6e, 0xf4, 0xb1, 0xef, 0x5d, 0xe0, 0x6d, 0x7a, - 0xb3, 0x94, 0x20, 0xc2, 0xcc, 0xc3, 0xae, 0x0e, 0xe5, 0xf0, 0x85, 0xbb, - 0x89, 0xed, 0xf6, 0x13, 0xe5, 0xfc, 0x93, 0xc5, 0xfc, 0xc3, 0x0c, 0xff, - 0x31, 0xde, 0x3f, 0x7d, 0xff, 0x8b, 0xcf, 0xde, 0x36, 0xf0, 0xc0, 0x9b, - 0xdb, 0x3b, 0xf0, 0x0f, 0xfe, 0xb6, 0x39, 0x8c, 0x25, 0xbe, 0x2c, 0xf9, - 0x65, 0xa1, 0x46, 0xe7, 0x16, 0x0f, 0x9b, 0x13, 0x31, 0x4d, 0xfe, 0xb4, - 0x39, 0x8c, 0x50, 0x39, 0x04, 0x48, 0x1b, 0x75, 0x0b, 0xbf, 0xc6, 0x48, - 0x1e, 0x1a, 0xb0, 0xbd, 0x13, 0x6b, 0xb2, 0xee, 0xd4, 0x4b, 0xae, 0xb9, - 0xc4, 0x40, 0xc4, 0xfa, 0x9b, 0xb8, 0xab, 0x40, 0xb3, 0x50, 0x4a, 0x32, - 0xa2, 0x28, 0x82, 0xb1, 0x64, 0x5c, 0x63, 0x89, 0xb6, 0x34, 0x8d, 0x92, - 0x4d, 0xfc, 0x2d, 0x8f, 0x99, 0x26, 0x3d, 0xea, 0xd9, 0x72, 0xa0, 0x4d, - 0xd9, 0x9d, 0xb6, 0xc8, 0xee, 0xb4, 0x79, 0x8c, 0x8b, 0xab, 0x29, 0x60, - 0xb3, 0x99, 0x62, 0x79, 0xa8, 0x4d, 0x14, 0xc2, 0xcc, 0xd4, 0x73, 0xe1, - 0x84, 0xb8, 0x5c, 0xd2, 0x52, 0x8d, 0x16, 0x94, 0x55, 0xf2, 0x54, 0x93, - 0xa1, 0x94, 0xf2, 0x0d, 0xef, 0x55, 0x99, 0xdd, 0xb4, 0x97, 0x67, 0x28, - 0xe5, 0x29, 0xa9, 0xac, 0xa5, 0x03, 0x87, 0x51, 0xc4, 0x4e, 0x54, 0x56, - 0xc1, 0x3e, 0xa8, 0x98, 0x74, 0x9f, 0x81, 0x80, 0x29, 0xdf, 0x59, 0xf0, - 0xbb, 0xd2, 0xb5, 0x1f, 0x71, 0x89, 0x15, 0x38, 0x72, 0xbc, 0xbf, 0x67, - 0x19, 0x8c, 0x29, 0x6f, 0xba, 0x60, 0x93, 0x70, 0x55, 0x2c, 0x71, 0xc3, - 0xd9, 0x9f, 0x30, 0x61, 0x68, 0x3f, 0x11, 0xc0, 0x8f, 0xbf, 0xcb, 0x82, - 0x2b, 0x45, 0x9e, 0xeb, 0x72, 0x8f, 0x3b, 0x3c, 0x78, 0x76, 0x24, 0xe4, - 0x51, 0xdc, 0x8a, 0xf3, 0xa0, 0x0a, 0x34, 0xa9, 0x58, 0x85, 0xaf, 0x3c, - 0x21, 0x8b, 0x43, 0x6c, 0x0a, 0xa8, 0xf4, 0x65, 0x31, 0xc7, 0x21, 0x50, - 0x5c, 0x08, 0xf9, 0x50, 0x1d, 0x95, 0x25, 0xea, 0xa8, 0xf8, 0x61, 0x67, - 0xa9, 0x72, 0xa4, 0x26, 0x47, 0x8f, 0x6b, 0x95, 0xe1, 0xab, 0x09, 0xfe, - 0x34, 0x88, 0x7c, 0xae, 0xc9, 0x86, 0x00, 0xe9, 0x37, 0x6e, 0x8f, 0x02, - 0x3a, 0xf7, 0x33, 0x8e, 0x3c, 0xb3, 0x6f, 0x96, 0x9d, 0x1f, 0xf6, 0x8d, - 0xbf, 0xac, 0x55, 0x03, 0x0a, 0x6e, 0xcf, 0x84, 0xec, 0x4c, 0x08, 0x0f, - 0xdc, 0xe1, 0xd8, 0x9c, 0x9c, 0xa2, 0xe9, 0xa8, 0xcd, 0xc7, 0x39, 0x5a, - 0x07, 0xb1, 0xd7, 0x4f, 0x42, 0x9b, 0xfd, 0xad, 0x46, 0x7f, 0xac, 0xd9, - 0x1f, 0x2b, 0xfb, 0x63, 0x15, 0xeb, 0xad, 0x38, 0xd9, 0x4b, 0xc1, 0x02, - 0x77, 0xa1, 0x76, 0x5a, 0xf2, 0x54, 0xb9, 0x99, 0xa8, 0x0f, 0x9b, 0xf5, - 0xd2, 0x56, 0x3a, 0x54, 0x9b, 0xcb, 0x85, 0xb4, 0x8a, 0xbd, 0x3c, 0x20, - 0x3c, 0x71, 0x12, 0xb6, 0x78, 0x09, 0x2e, 0x71, 0xba, 0xd5, 0xee, 0x6f, - 0x90, 0x61, 0x7e, 0x61, 0x69, 0x61, 0xee, 0x89, 0xc6, 0x19, 0x9a, 0x74, - 0x34, 0xc7, 0xb0, 0x0f, 0x82, 0xb7, 0x9e, 0x1c, 0xd5, 0x9f, 0x95, 0x48, - 0x43, 0x0c, 0x1e, 0x17, 0xe3, 0x47, 0x00, 0xe7, 0xf6, 0x36, 0xe8, 0x47, - 0xa6, 0x4f, 0x5e, 0x34, 0x00, 0xe0, 0x17, 0xfa, 0xf9, 0x51, 0x82, 0x7f, - 0x56, 0x68, 0x86, 0x65, 0x1d, 0x19, 0x11, 0x96, 0x69, 0xa1, 0x8c, 0x9f, - 0x3c, 0x18, 0xe6, 0xa6, 0x57, 0xc7, 0xd9, 0x0f, 0x6f, 0x3b, 0x2e, 0xdd, - 0x81, 0x9a, 0xee, 0x39, 0x4e, 0xfc, 0x6d, 0x34, 0x3c, 0x39, 0xe7, 0x34, - 0xf3, 0x37, 0xde, 0x7a, 0x31, 0x22, 0xee, 0x66, 0x00, 0xb1, 0xce, 0x1c, - 0xd0, 0xbd, 0x1e, 0x96, 0x0a, 0x94, 0x96, 0x6f, 0x9a, 0x34, 0x96, 0x70, - 0xb2, 0xf8, 0xa8, 0xdd, 0xf2, 0x4a, 0x6d, 0xe3, 0x95, 0xda, 0x86, 0x43, - 0xfd, 0x6e, 0xae, 0x71, 0xaa, 0xbe, 0xc5, 0x8b, 0x12, 0x81, 0xe8, 0x9c, - 0xfa, 0x18, 0x1a, 0xde, 0x8f, 0x60, 0x76, 0xc8, 0x37, 0xe3, 0x29, 0x15, - 0x47, 0x2c, 0x1b, 0x13, 0x7e, 0x18, 0x64, 0xbf, 0xd8, 0xe6, 0x98, 0xce, - 0x95, 0x35, 0x69, 0xd4, 0x68, 0xf1, 0x3a, 0x82, 0xa3, 0x28, 0x52, 0x5f, - 0x0a, 0x6c, 0x67, 0xd4, 0x1e, 0x80, 0x7a, 0x3a, 0xaf, 0x34, 0xb4, 0x77, - 0xf6, 0xa7, 0x77, 0x7d, 0xbe, 0xc7, 0x26, 0x18, 0xeb, 0x1a, 0x78, 0x27, - 0x4e, 0xbb, 0x4d, 0xed, 0xbd, 0x31, 0x66, 0x98, 0x6b, 0x28, 0x8b, 0x04, - 0x15, 0x66, 0xfd, 0xb4, 0xae, 0x79, 0xc5, 0x8a, 0x54, 0x7b, 0xef, 0x47, - 0x2c, 0x5e, 0xb8, 0x8d, 0x2e, 0x13, 0x75, 0x1c, 0xc1, 0xe7, 0xcd, 0x22, - 0x12, 0x91, 0xc0, 0xed, 0xb8, 0xde, 0xd5, 0xfe, 0xa4, 0xbb, 0x57, 0xd8, - 0x5c, 0xbf, 0x53, 0x1b, 0x64, 0xa7, 0x3e, 0xbf, 0x5d, 0x7c, 0xae, 0xef, - 0x4b, 0xa4, 0xb1, 0x3c, 0xe1, 0x04, 0x2e, 0x3d, 0x8f, 0xc2, 0xaf, 0x3a, - 0x0f, 0xb7, 0x9e, 0xa0, 0xbf, 0xda, 0xe1, 0x5b, 0x23, 0x86, 0xf2, 0x99, - 0x6d, 0x57, 0x34, 0x8b, 0xfd, 0x5a, 0x06, 0xc4, 0xd1, 0xc9, 0x45, 0x2a, - 0x5a, 0x12, 0x7f, 0x1f, 0xdf, 0xae, 0x19, 0xa0, 0x05, 0x93, 0x15, 0x18, - 0x59, 0x39, 0xa6, 0xd8, 0x88, 0x35, 0xe4, 0xdf, 0x71, 0x45, 0x05, 0x0c, - 0x87, 0xda, 0x58, 0x42, 0x15, 0xcb, 0xa9, 0x87, 0xe0, 0x01, 0x58, 0x4b, - 0xa7, 0xd6, 0xa9, 0xcf, 0x3b, 0xbd, 0x0d, 0xa9, 0x55, 0x11, 0x90, 0x63, - 0xe4, 0x89, 0x57, 0x14, 0xd2, 0xd2, 0x57, 0xb6, 0xd5, 0x30, 0xcf, 0x71, - 0xd4, 0xcb, 0x28, 0x0e, 0xad, 0xd9, 0x41, 0x15, 0xa3, 0xcb, 0x0c, 0xe7, - 0xbc, 0xe4, 0xec, 0x1a, 0x38, 0x0a, 0x06, 0x98, 0x9b, 0xd8, 0xe7, 0xac, - 0x4b, 0x4e, 0x52, 0x0a, 0x7a, 0xea, 0xd8, 0xb2, 0x6f, 0x02, 0xf5, 0x2f, - 0x2f, 0x8e, 0x18, 0x06, 0xb9, 0x22, 0x62, 0xc0, 0x67, 0x47, 0x30, 0x5b, - 0x02, 0x39, 0x49, 0x05, 0x81, 0xd6, 0x85, 0x43, 0x2c, 0x73, 0xa8, 0x44, - 0x2e, 0x77, 0xa5, 0xa2, 0xdf, 0x58, 0x05, 0x8c, 0xdc, 0xc5, 0xbd, 0x55, - 0x6c, 0x03, 0xdf, 0xb4, 0x30, 0x4f, 0xec, 0x22, 0xc5, 0xc9, 0x25, 0xaa, - 0x93, 0x8f, 0xcf, 0xd3, 0xf4, 0x94, 0xaf, 0xa1, 0xb0, 0xfd, 0x4c, 0x7d, - 0xe7, 0x86, 0xc2, 0x8a, 0x4c, 0xcf, 0x38, 0xe7, 0xa8, 0xa1, 0xfa, 0xd4, - 0x4d, 0xa0, 0x73, 0x0b, 0x55, 0xd3, 0x27, 0x67, 0x18, 0xa7, 0x2b, 0xa9, - 0x38, 0x37, 0xdd, 0x37, 0x3d, 0x37, 0xef, 0x9a, 0x30, 0xb2, 0xf8, 0xb6, - 0x30, 0x25, 0xc0, 0xc4, 0x26, 0xfa, 0xa9, 0x73, 0x02, 0x34, 0x3d, 0x99, - 0xb1, 0xa2, 0x72, 0xf6, 0x7d, 0x45, 0xab, 0xbd, 0x70, 0x7e, 0x57, 0xe9, - 0x34, 0x4d, 0x2d, 0x30, 0x61, 0x03, 0x4f, 0x71, 0x13, 0x2c, 0xe5, 0xc4, - 0xbb, 0xbc, 0x43, 0x2f, 0xd1, 0x08, 0x41, 0xc5, 0xc2, 0x47, 0x6a, 0x86, - 0x78, 0xa4, 0xc6, 0x01, 0xc3, 0xf1, 0x76, 0xd0, 0x16, 0xbc, 0x7a, 0x54, - 0x57, 0x12, 0x3c, 0xa1, 0x84, 0x7b, 0xff, 0x51, 0x3c, 0x8d, 0x57, 0xf7, - 0x34, 0x33, 0xc4, 0x33, 0x33, 0x4c, 0xea, 0x9e, 0x29, 0xe5, 0xc9, 0xb9, - 0xb3, 0xb9, 0xc7, 0x23, 0xf5, 0xcc, 0x01, 0xcf, 0x34, 0x98, 0xff, 0x93, - 0xf9, 0x79, 0x65, 0xa3, 0x6c, 0x2f, 0xa5, 0xec, 0x15, 0x29, 0xc3, 0x7d, - 0x59, 0x5e, 0x32, 0x30, 0x8c, 0x40, 0xf9, 0x70, 0xcd, 0x10, 0x0f, 0xd7, - 0x38, 0x88, 0x89, 0xad, 0x30, 0x33, 0xe3, 0x98, 0x3e, 0xfc, 0xd7, 0xb5, - 0x2d, 0x9b, 0xe1, 0x89, 0x36, 0xd9, 0x62, 0x14, 0x5d, 0xb8, 0x02, 0x7b, - 0x72, 0x08, 0x3e, 0xf1, 0x0a, 0x34, 0xb3, 0xe1, 0x3a, 0x37, 0x58, 0xe4, - 0x0e, 0x3d, 0x4f, 0xb9, 0x4d, 0x0e, 0xde, 0x7c, 0x83, 0x31, 0xf9, 0x4f, - 0xf3, 0x5f, 0x4f, 0x10, 0xd7, 0xa6, 0x1a, 0x91, 0xca, 0xec, 0xa8, 0x2f, - 0x3a, 0x91, 0x08, 0x4d, 0x0d, 0x4a, 0xef, 0x08, 0xec, 0x4d, 0x16, 0x05, - 0xe3, 0x10, 0xa8, 0xfc, 0x15, 0x37, 0x05, 0xdc, 0xa4, 0x00, 0x04, 0x38, - 0x5c, 0x51, 0x67, 0xe6, 0xbb, 0x3f, 0xff, 0xf1, 0xbe, 0xe3, 0x08, 0x1f, - 0x3f, 0xe3, 0x99, 0x14, 0x95, 0x2c, 0x30, 0xcb, 0x45, 0xa7, 0xc8, 0xde, - 0x03, 0xb9, 0x11, 0x4d, 0xe4, 0x17, 0x68, 0x4d, 0x10, 0x6e, 0xb4, 0x5c, - 0x05, 0xb8, 0xf1, 0x58, 0xbe, 0x43, 0xdc, 0x15, 0x11, 0xee, 0xaf, 0x5b, - 0x8a, 0x0c, 0x95, 0x55, 0xa4, 0x78, 0xfa, 0xea, 0xed, 0xd7, 0xfe, 0xa8, - 0xff, 0xc1, 0x31, 0x4f, 0xdb, 0xbf, 0x95, 0xd2, 0xf9, 0xa2, 0x70, 0xc1, - 0x89, 0x54, 0x49, 0x49, 0x4a, 0x89, 0x70, 0xdc, 0x63, 0x83, 0x3a, 0x65, - 0xf9, 0x59, 0x82, 0x3d, 0x62, 0x6d, 0xaf, 0xab, 0xc0, 0xec, 0x94, 0x7c, - 0x74, 0x96, 0xfc, 0xe6, 0x1a, 0xdb, 0x9b, 0x87, 0xa8, 0xdf, 0xd0, 0xae, - 0x05, 0x25, 0x12, 0xee, 0x2c, 0x32, 0x6d, 0x22, 0x2b, 0x19, 0xd5, 0x7b, - 0xeb, 0x4a, 0x32, 0xdf, 0xdb, 0x33, 0xae, 0x5c, 0xbc, 0xa1, 0x0b, 0x9f, - 0xc1, 0xd8, 0xf0, 0x4e, 0xfd, 0x2b, 0x6f, 0x72, 0xe7, 0xb7, 0xae, 0x74, - 0x06, 0x96, 0xa3, 0xd4, 0xb5, 0xf3, 0xbe, 0x16, 0x9b, 0xaf, 0xba, 0x71, - 0xd8, 0x7e, 0x1f, 0xb8, 0x70, 0xf7, 0x34, 0xd1, 0x36, 0x8e, 0xb3, 0xbc, - 0xf1, 0x48, 0xe9, 0xa4, 0xe1, 0xf6, 0x7d, 0x19, 0xa6, 0xdf, 0x47, 0x57, - 0xda, 0xda, 0xb1, 0x5c, 0x79, 0x7c, 0x79, 0xf9, 0xf5, 0x7d, 0x59, 0xa3, - 0x7c, 0xa7, 0x06, 0x18, 0x43, 0x68, 0x53, 0xd9, 0xc6, 0x44, 0x76, 0x3f, - 0x9d, 0x94, 0x47, 0x4c, 0xb3, 0xe2, 0x5b, 0xcc, 0xb8, 0x80, 0x43, 0x97, - 0x8b, 0x70, 0x84, 0xee, 0x79, 0xa4, 0xcf, 0xd0, 0x72, 0x06, 0x58, 0x7f, - 0x03, 0x71, 0xe3, 0xe5, 0xe2, 0x23, 0x54, 0x9c, 0xbd, 0x63, 0xa8, 0xfe, - 0xf3, 0x97, 0x62, 0xff, 0x67, 0x0d, 0xd9, 0x6f, 0xa1, 0x03, 0x60, 0x67, - 0xf2, 0x70, 0xd4, 0xde, 0xd2, 0x72, 0x94, 0xcf, 0xb1, 0xea, 0x21, 0xd6, - 0xa8, 0xe5, 0xf1, 0xe6, 0x93, 0xd2, 0x7c, 0xcf, 0x68, 0x94, 0x86, 0xcc, - 0x31, 0x14, 0x64, 0x8e, 0xae, 0x0b, 0xd3, 0x7e, 0x01, 0x1f, 0xf6, 0x0f, - 0xc6, 0x39, 0x19, 0xd7, 0xd3, 0x1d, 0xa5, 0xf1, 0x06, 0x99, 0xce, 0x7e, - 0x17, 0x9b, 0xe2, 0xc1, 0x50, 0x38, 0x65, 0x3d, 0x18, 0x90, 0x83, 0x3d, - 0xc1, 0x41, 0xe4, 0x5e, 0xfc, 0xe9, 0xac, 0x11, 0x77, 0x1e, 0xe9, 0x07, - 0x8f, 0xf2, 0x79, 0xf7, 0x37, 0xa8, 0x43, 0x9b, 0x40, 0x18, 0x63, 0xcc, - 0x34, 0xf1, 0x12, 0xc6, 0xe6, 0x3f, 0xe0, 0xb0, 0x30, 0xa9, 0xcb, 0x6b, - 0xbc, 0xc5, 0x2d, 0x10, 0x47, 0x87, 0xe7, 0x7e, 0x85, 0xaa, 0x37, 0xcf, - 0x1c, 0x3a, 0x08, 0xb3, 0x61, 0xe8, 0x0c, 0xf4, 0x66, 0x18, 0xbe, 0x5c, - 0xe9, 0x06, 0x07, 0x55, 0x42, 0xd4, 0xdc, 0x88, 0x97, 0xf6, 0xc7, 0x9b, - 0xeb, 0x0d, 0x83, 0x31, 0xbb, 0xc3, 0xc6, 0xe4, 0xb4, 0x6f, 0xff, 0x61, - 0x18, 0xed, 0xdb, 0x07, 0xe1, 0xf1, 0xe6, 0x0f, 0x4b, 0x8d, 0x7a, 0x19, - 0x75, 0x8c, 0x87, 0x51, 0x47, 0x2d, 0xb7, 0x8c, 0xfe, 0x3e, 0x2a, 0x9e, - 0x6b, 0xe2, 0x82, 0x9c, 0xa1, 0x77, 0x6a, 0x81, 0x01, 0x71, 0xfa, 0x9d, - 0x26, 0x22, 0xb4, 0xd0, 0x51, 0xab, 0x17, 0xe0, 0xc0, 0x09, 0xdc, 0x7a, - 0x52, 0x5a, 0x79, 0xd6, 0x4b, 0x07, 0x79, 0x70, 0xf2, 0x96, 0x02, 0xd7, - 0x88, 0x45, 0x0b, 0x37, 0xcf, 0x3b, 0xe2, 0xf1, 0x37, 0x8e, 0x23, 0x7f, - 0x22, 0xc0, 0x18, 0x92, 0x70, 0x47, 0x5a, 0x29, 0x1d, 0x6f, 0x3f, 0xab, - 0xbe, 0x9a, 0x04, 0xed, 0x4b, 0x2b, 0x86, 0x8c, 0xd5, 0x59, 0x0e, 0xbc, - 0x95, 0x99, 0xe1, 0x6d, 0xec, 0x7f, 0xe3, 0x74, 0x1b, 0xfd, 0xc7, 0x07, - 0x4c, 0x81, 0x9d, 0xf6, 0x08, 0xd2, 0x8c, 0xed, 0xb6, 0xc2, 0xfc, 0xc2, - 0x8f, 0x33, 0x05, 0xdc, 0xcf, 0x3e, 0x9e, 0x50, 0x9c, 0xb6, 0xd4, 0xc6, - 0x46, 0x88, 0xe1, 0x6b, 0xc4, 0xa3, 0xa8, 0xd8, 0xf1, 0x18, 0xf3, 0xd5, - 0x54, 0x22, 0x4f, 0x88, 0xa3, 0x37, 0x4d, 0x18, 0x71, 0x09, 0x0b, 0x88, - 0x6f, 0x62, 0x18, 0x72, 0x0d, 0xc0, 0x84, 0x65, 0x8e, 0x6b, 0x49, 0x46, - 0x18, 0xd7, 0x2e, 0x88, 0xe0, 0xae, 0xec, 0x4d, 0x83, 0xab, 0xb0, 0x73, - 0x13, 0x83, 0x37, 0x00, 0x77, 0x23, 0x80, 0xa8, 0x44, 0x9c, 0xd0, 0xb2, - 0xcf, 0x02, 0x9f, 0xfa, 0x83, 0x46, 0xc0, 0x8b, 0x1a, 0xc8, 0xe4, 0x0f, - 0xd3, 0xd0, 0x2c, 0x34, 0x78, 0x02, 0x13, 0x50, 0xea, 0xee, 0x00, 0x77, - 0x28, 0x8d, 0xbf, 0x7b, 0x56, 0x87, 0xdb, 0x5b, 0x29, 0x87, 0xa6, 0xec, - 0x71, 0x8d, 0x14, 0xbd, 0x23, 0x6d, 0x58, 0xc3, 0xf2, 0x18, 0xa7, 0x72, - 0xb0, 0x3c, 0x86, 0x69, 0xe1, 0xef, 0xab, 0x28, 0x65, 0x54, 0x00, 0xed, - 0xc0, 0x97, 0x14, 0x1d, 0x79, 0xd2, 0x74, 0xba, 0xc4, 0x50, 0x19, 0x23, - 0x1e, 0x7f, 0xb2, 0xd8, 0xcd, 0x93, 0x6e, 0x01, 0x0e, 0x7d, 0x3a, 0x95, - 0xc6, 0x54, 0x0a, 0x0d, 0xbc, 0xc8, 0xae, 0xe7, 0xa6, 0xab, 0xd2, 0x01, - 0xa1, 0x9d, 0x2b, 0x42, 0x46, 0x27, 0x6d, 0x1b, 0x6f, 0xe2, 0x74, 0x3a, - 0xc7, 0x35, 0x99, 0xc0, 0xdd, 0x09, 0x13, 0x35, 0xe3, 0x0c, 0x75, 0x84, - 0x36, 0xeb, 0xbc, 0x92, 0xe0, 0xd1, 0xd1, 0x87, 0x93, 0x0c, 0x24, 0x02, - 0x2e, 0x2f, 0x5e, 0xe6, 0x20, 0x16, 0xd2, 0xa9, 0x75, 0xa0, 0x99, 0xdb, - 0x71, 0x80, 0x79, 0x47, 0x23, 0x08, 0x26, 0x43, 0xb7, 0x2b, 0x04, 0xe3, - 0x62, 0x04, 0x28, 0x3f, 0xb4, 0x1a, 0xbe, 0xf3, 0x30, 0xab, 0x13, 0x97, - 0x33, 0x55, 0xa0, 0xdb, 0x05, 0x2a, 0x0d, 0xbe, 0xc6, 0x46, 0x90, 0xad, - 0x47, 0xc7, 0xe0, 0x89, 0x94, 0x13, 0xcd, 0x55, 0x80, 0x16, 0xef, 0x30, - 0x2e, 0xda, 0xd3, 0xbd, 0x44, 0x4c, 0x47, 0x2f, 0x4f, 0x2d, 0x5b, 0xef, - 0xa8, 0xbb, 0x2d, 0x42, 0x51, 0x42, 0x63, 0xdc, 0xaf, 0x1a, 0xa7, 0x38, - 0x3a, 0xee, 0xe8, 0xb8, 0x42, 0x8f, 0x5f, 0xeb, 0x8f, 0x06, 0x36, 0xff, - 0xf9, 0xc1, 0xca, 0xae, 0x21, 0x68, 0xdb, 0x57, 0x11, 0x7d, 0xf5, 0x5a, - 0xfd, 0xb2, 0x86, 0xa9, 0x20, 0xbe, 0xa6, 0x0c, 0xed, 0x6b, 0x8a, 0xd0, - 0x80, 0x14, 0xde, 0x57, 0x5e, 0xca, 0x13, 0xee, 0xf6, 0x63, 0xb7, 0xde, - 0x2f, 0xd6, 0x3d, 0xe4, 0x75, 0x8f, 0xe0, 0x5a, 0x3a, 0x55, 0xfe, 0xfb, - 0x91, 0x72, 0xc7, 0x97, 0xef, 0x6c, 0x4b, 0x38, 0x37, 0x9e, 0xc5, 0x2c, - 0x95, 0x2a, 0x0e, 0x64, 0xc1, 0x57, 0xb7, 0x80, 0xe6, 0xfc, 0xb6, 0x76, - 0x54, 0x8e, 0x04, 0x4a, 0x82, 0x1f, 0xc9, 0xd6, 0xf7, 0x39, 0xd7, 0x8c, - 0x41, 0xc4, 0xde, 0xb2, 0x30, 0xa3, 0x9f, 0x7b, 0x59, 0xcc, 0xd3, 0x2f, - 0xed, 0xe2, 0x70, 0xb6, 0x60, 0xd6, 0x92, 0xa8, 0x57, 0x7c, 0xa1, 0xeb, - 0x96, 0xcc, 0xe1, 0xcb, 0x13, 0xea, 0x67, 0x7c, 0x65, 0xd2, 0xad, 0x1f, - 0xbc, 0x0e, 0x8f, 0x7e, 0x52, 0x9a, 0x73, 0x39, 0x23, 0xda, 0x2d, 0x0a, - 0xd7, 0x61, 0x46, 0x25, 0xea, 0x15, 0x5f, 0x3c, 0x2a, 0x00, 0x1f, 0x92, - 0x0c, 0x4d, 0x51, 0x11, 0x8f, 0xde, 0xee, 0x9f, 0x25, 0x0a, 0xb2, 0x5f, - 0x17, 0x0f, 0xcc, 0xf6, 0x50, 0x86, 0xc2, 0x76, 0x58, 0x5c, 0x70, 0xc1, - 0xc3, 0x5e, 0x32, 0x20, 0x67, 0x8e, 0x13, 0x67, 0xe1, 0x32, 0xdd, 0xe1, - 0x3f, 0x51, 0x52, 0x73, 0x84, 0x37, 0x67, 0x7e, 0x2f, 0x25, 0x6a, 0xa2, - 0x73, 0x22, 0x5f, 0xc0, 0xf4, 0xec, 0xf9, 0x9b, 0x71, 0xe4, 0x08, 0x82, - 0x0a, 0x82, 0x5b, 0xde, 0x0e, 0xd2, 0x29, 0x17, 0x01, 0x85, 0xc8, 0x44, - 0x1d, 0x2a, 0x9f, 0x8e, 0x39, 0x62, 0xfb, 0x5b, 0x3e, 0x11, 0x5d, 0x59, - 0xa7, 0x1e, 0xec, 0xbf, 0x67, 0xb6, 0xa5, 0xb9, 0xf4, 0x54, 0x1c, 0x17, - 0xdb, 0x57, 0xb6, 0xd1, 0xf9, 0xb8, 0x79, 0x66, 0xe7, 0xa3, 0xaa, 0x54, - 0xf2, 0x2e, 0x0d, 0x21, 0x03, 0x3d, 0x7f, 0x61, 0x98, 0x98, 0x03, 0x49, - 0x34, 0xd8, 0x90, 0xc8, 0xbf, 0x4e, 0xba, 0x7c, 0x09, 0x94, 0xdd, 0x25, - 0x2e, 0xd1, 0x8e, 0x71, 0x85, 0x0e, 0xa0, 0xf9, 0x9d, 0x31, 0x26, 0x6c, - 0xf1, 0x2d, 0x50, 0x07, 0xbb, 0x86, 0x84, 0xa5, 0xdc, 0x21, 0x37, 0xfa, - 0x11, 0x33, 0x50, 0x19, 0x5f, 0x39, 0x1b, 0xb7, 0x34, 0x85, 0x19, 0x59, - 0x09, 0x25, 0xa4, 0x78, 0xcf, 0x52, 0x0f, 0xba, 0x02, 0xb2, 0xbd, 0xf4, - 0x89, 0xc1, 0x05, 0xcb, 0x31, 0x1e, 0x7f, 0x0c, 0xb0, 0xfe, 0x2f, 0x9e, - 0xc3, 0x74, 0x13, 0x8b, 0x00, 0xe2, 0x85, 0x4b, 0xa8, 0x1a, 0xbc, 0xe2, - 0x08, 0x01, 0xa7, 0x78, 0x95, 0x3a, 0x12, 0xd9, 0x7a, 0x93, 0x7e, 0xf1, - 0x6b, 0x24, 0x2b, 0xf6, 0xa5, 0x0d, 0x9f, 0xb3, 0x6a, 0x64, 0x81, 0x5e, - 0x0a, 0x1a, 0x4d, 0xe6, 0x2e, 0xfb, 0x08, 0x5e, 0x3d, 0xd8, 0xa7, 0x4c, - 0x32, 0xd5, 0x5e, 0x43, 0x87, 0xa7, 0xa3, 0xfa, 0xa9, 0x1a, 0x91, 0x76, - 0x10, 0xc8, 0x1c, 0x7c, 0x5a, 0x87, 0xa0, 0x1f, 0x14, 0x4f, 0x4d, 0x8d, - 0xb8, 0x16, 0xa1, 0x38, 0xeb, 0x72, 0x1d, 0xc2, 0x82, 0x7c, 0xf1, 0xdb, - 0x91, 0xae, 0x8e, 0x8b, 0xa5, 0xc0, 0xae, 0xdf, 0x46, 0xc3, 0x73, 0x63, - 0x1c, 0x52, 0xbb, 0x84, 0x8e, 0x8f, 0x7a, 0xa1, 0x18, 0x31, 0x87, 0x92, - 0xf5, 0x60, 0xc7, 0xd0, 0x19, 0xc0, 0xc0, 0x91, 0x5d, 0xbc, 0x87, 0x74, - 0x2f, 0x72, 0xe9, 0x8f, 0x02, 0x12, 0xe8, 0x79, 0x68, 0x27, 0xd6, 0x00, - 0x71, 0xbd, 0x61, 0xd4, 0x16, 0x90, 0x99, 0x67, 0x32, 0x95, 0xf5, 0x5c, - 0xb2, 0x23, 0xac, 0x38, 0x55, 0xf0, 0x81, 0xc5, 0x2e, 0xea, 0xca, 0xc2, - 0xc5, 0x79, 0xd8, 0x5e, 0x7e, 0x1b, 0x57, 0xb4, 0x09, 0x96, 0x48, 0xf9, - 0x76, 0x3b, 0xb7, 0xe8, 0xec, 0x5b, 0x1f, 0x33, 0x00, 0x59, 0xd1, 0x5b, - 0x09, 0x7e, 0x98, 0xd7, 0x57, 0x0d, 0xce, 0x31, 0xb0, 0x02, 0x85, 0x5d, - 0x8d, 0x94, 0xf1, 0xc2, 0xa6, 0x83, 0x3c, 0xbb, 0x06, 0xa2, 0x1d, 0xe9, - 0x60, 0xef, 0xa8, 0x64, 0x75, 0x6d, 0xd8, 0xe6, 0xf4, 0x24, 0xb6, 0x69, - 0x48, 0x6f, 0x8e, 0x15, 0x87, 0xe1, 0xc8, 0x32, 0x71, 0xff, 0x30, 0x5e, - 0x30, 0x2f, 0xb0, 0x09, 0x46, 0x88, 0x7b, 0x8c, 0x7c, 0x17, 0x99, 0xc3, - 0xa1, 0x49, 0xc7, 0xe6, 0xd5, 0x29, 0x2d, 0x19, 0x0a, 0x66, 0x0a, 0x8a, - 0x92, 0x75, 0x66, 0xef, 0x88, 0xfb, 0x94, 0xb8, 0x38, 0x10, 0x4a, 0xf1, - 0x85, 0xe1, 0xd2, 0x3b, 0x47, 0x4b, 0xc6, 0xdc, 0xc0, 0x32, 0x91, 0x20, - 0x6c, 0x34, 0xc9, 0x69, 0x88, 0x73, 0x3d, 0x4e, 0x46, 0xa9, 0xb2, 0xb8, - 0xc4, 0x2f, 0xc1, 0xb0, 0x2d, 0x62, 0x14, 0xed, 0xaa, 0xe8, 0x51, 0xa4, - 0x37, 0x94, 0x76, 0x55, 0x2b, 0x25, 0x72, 0xe9, 0x6e, 0xb4, 0x30, 0x1d, - 0x94, 0xa6, 0xba, 0x24, 0x39, 0xd7, 0x95, 0x9a, 0x5a, 0x18, 0x1f, 0x11, - 0x28, 0xf8, 0xd5, 0x7f, 0x38, 0xff, 0x68, 0xf5, 0x91, 0xe9, 0xab, 0x8f, - 0x28, 0xfb, 0xf6, 0x2a, 0x7b, 0xcc, 0x23, 0xfc, 0x06, 0x1f, 0xdb, 0x01, - 0x2f, 0xf3, 0x31, 0x97, 0x5d, 0x37, 0x21, 0x71, 0x48, 0xd1, 0xfb, 0xa4, - 0xf6, 0x09, 0xe0, 0xf1, 0x12, 0x54, 0xf5, 0x71, 0x50, 0x11, 0xf2, 0x24, - 0xe9, 0x6c, 0xf7, 0xb7, 0x2c, 0xc0, 0xab, 0xf7, 0x32, 0x0c, 0xac, 0x73, - 0x47, 0x0a, 0xc9, 0xa1, 0x82, 0x2f, 0x63, 0x1f, 0xc9, 0xfc, 0x66, 0xc7, - 0x07, 0x66, 0xf2, 0x81, 0xe5, 0xf3, 0xb1, 0x46, 0xc0, 0x6a, 0xcb, 0x04, - 0xec, 0xc5, 0x7b, 0x89, 0xa6, 0x6e, 0x48, 0x1e, 0x5a, 0x0c, 0xed, 0x06, - 0x95, 0xe2, 0xef, 0xbb, 0x04, 0xdd, 0x7d, 0xe1, 0xc5, 0x26, 0x20, 0x96, - 0xe5, 0x9e, 0x2a, 0xd4, 0x0d, 0x57, 0xb1, 0x8c, 0x7d, 0xb3, 0xd9, 0x13, - 0xc7, 0x50, 0x87, 0x4a, 0x41, 0x76, 0x50, 0xdc, 0xfa, 0x88, 0x78, 0xb7, - 0x1c, 0x64, 0xf0, 0x8c, 0xc7, 0x14, 0xbe, 0xca, 0xa1, 0xe1, 0x06, 0x47, - 0xe7, 0xa2, 0xf4, 0x37, 0xb1, 0x72, 0xd7, 0xbd, 0x37, 0x12, 0x1c, 0x27, - 0x83, 0xb4, 0x54, 0x84, 0x60, 0x70, 0xb9, 0xad, 0x91, 0x04, 0x8b, 0xe8, - 0x9c, 0x55, 0x40, 0x47, 0xe8, 0x7d, 0x22, 0xf4, 0xc0, 0x8e, 0x9b, 0x58, - 0x5a, 0x5e, 0x8d, 0x30, 0xd8, 0x65, 0x8c, 0xa3, 0x4b, 0xb0, 0x2e, 0x62, - 0x64, 0x25, 0xf0, 0x90, 0x56, 0xba, 0x6a, 0x5a, 0xd1, 0x4f, 0x7c, 0x4c, - 0x57, 0xec, 0x53, 0xd2, 0xa0, 0xae, 0x01, 0x30, 0x6a, 0x87, 0xd1, 0xdd, - 0x70, 0x48, 0x29, 0x9c, 0xec, 0x99, 0x8e, 0xba, 0x5e, 0x50, 0x04, 0x81, - 0xf5, 0x1f, 0xc5, 0x1a, 0xc7, 0xab, 0x00, 0x4b, 0x32, 0x48, 0x9c, 0x54, - 0x4f, 0x10, 0xaf, 0xf2, 0x81, 0x0a, 0x49, 0xe3, 0x1c, 0x3c, 0x05, 0x7c, - 0xdd, 0x09, 0x6b, 0x4c, 0x74, 0x20, 0x9a, 0x35, 0x7c, 0xf6, 0x75, 0xa9, - 0x71, 0x7a, 0x61, 0x51, 0x42, 0x31, 0xbd, 0xa6, 0xb9, 0x6e, 0x4a, 0xd6, - 0xab, 0x74, 0xe0, 0x29, 0x32, 0x33, 0x9c, 0x25, 0xa3, 0xc3, 0xee, 0x3c, - 0xeb, 0xfa, 0xa5, 0x52, 0x77, 0xd5, 0x8f, 0x4f, 0x07, 0x8c, 0xf9, 0x95, - 0x2d, 0xe3, 0xc5, 0xb6, 0xf6, 0xaa, 0xec, 0x0e, 0xaf, 0x9a, 0xdc, 0xc5, - 0x26, 0x6e, 0x88, 0xe1, 0x07, 0xea, 0x03, 0xfd, 0xdb, 0xcf, 0x7c, 0xf3, - 0xcd, 0x83, 0x51, 0xdb, 0xfe, 0x23, 0xf4, 0xe1, 0x8f, 0xd0, 0xca, 0xd4, - 0x64, 0x30, 0xf0, 0x5f, 0x8d, 0x4d, 0x66, 0x56, 0x19, 0x7c, 0x08, 0x32, - 0x2c, 0xb9, 0xca, 0x4c, 0xec, 0x7a, 0x54, 0x27, 0x11, 0xa9, 0xb1, 0x54, - 0xe4, 0x1e, 0x1f, 0x76, 0xaf, 0xb8, 0x1e, 0x2c, 0xe2, 0x79, 0xdc, 0xac, - 0xe5, 0x5b, 0x79, 0xdc, 0xb0, 0x2f, 0x0f, 0xe0, 0x4b, 0x8b, 0x00, 0xfe, - 0x86, 0x58, 0x00, 0xf8, 0x29, 0xf9, 0x16, 0x1e, 0xa0, 0xd4, 0x33, 0x03, - 0x22, 0xef, 0x6e, 0x88, 0x66, 0xd6, 0x0d, 0xc4, 0x06, 0x3d, 0x30, 0x35, - 0x55, 0x1b, 0x32, 0x91, 0x71, 0xf3, 0x25, 0x57, 0xe0, 0xea, 0x2a, 0x02, - 0x81, 0xa4, 0xf6, 0xd9, 0xe0, 0xd4, 0x22, 0x0d, 0xb1, 0xd2, 0xe9, 0x30, - 0xbb, 0xb1, 0x11, 0x6b, 0x0c, 0x6b, 0xc4, 0xe1, 0x26, 0x22, 0xee, 0x3b, - 0x90, 0x28, 0xaf, 0xc9, 0x5f, 0xae, 0x13, 0x8a, 0xf4, 0x00, 0x87, 0xe8, - 0x76, 0xa5, 0xf4, 0x35, 0x3f, 0x18, 0x88, 0xe0, 0xe7, 0x77, 0x46, 0xca, - 0xb5, 0x54, 0x07, 0x7f, 0x61, 0x27, 0x91, 0x77, 0x20, 0x46, 0xbb, 0xa2, - 0x19, 0x7b, 0x41, 0x41, 0xae, 0x74, 0x3d, 0xb1, 0x22, 0x88, 0xe4, 0x2b, - 0x8e, 0x46, 0x01, 0x1b, 0x53, 0x21, 0x13, 0x2e, 0x58, 0xe0, 0x53, 0x00, - 0x6b, 0x8d, 0x18, 0xb6, 0xdb, 0x1e, 0xb9, 0xb5, 0xd6, 0x94, 0xb6, 0xcf, - 0x5b, 0x2a, 0x28, 0x0c, 0x92, 0x3e, 0xf3, 0x29, 0x40, 0xc7, 0x0d, 0x4f, - 0x8f, 0x27, 0xf5, 0xf6, 0x6b, 0x1e, 0x80, 0xf5, 0x42, 0xb4, 0xe1, 0x29, - 0xa3, 0x5b, 0xd0, 0x47, 0xcb, 0x22, 0xc1, 0x4b, 0x7f, 0xfa, 0x68, 0xa8, - 0xdb, 0xf5, 0xcf, 0xb5, 0x7f, 0xaf, 0xd3, 0xc5, 0x36, 0x5c, 0x60, 0xd5, - 0x6c, 0x54, 0x04, 0xde, 0x5b, 0x07, 0xa2, 0x68, 0x7d, 0x7b, 0x14, 0x53, - 0x6e, 0x31, 0x38, 0x7e, 0xb3, 0xcc, 0xa1, 0x07, 0x68, 0xa1, 0xdd, 0x91, - 0xb1, 0x62, 0xfd, 0x99, 0xcb, 0xf6, 0x24, 0xc2, 0x56, 0xed, 0xaf, 0x37, - 0xa3, 0xbf, 0xca, 0x5f, 0xbf, 0x37, 0x46, 0x98, 0x53, 0x96, 0x12, 0x3d, - 0xe2, 0x6e, 0xcc, 0x05, 0x45, 0x80, 0xee, 0x55, 0x06, 0x8d, 0xe4, 0xa5, - 0xef, 0x2f, 0x00, 0xbf, 0xf1, 0xfb, 0xbc, 0xa9, 0xe4, 0xae, 0x8f, 0x13, - 0x80, 0x8a, 0x9d, 0x72, 0xc7, 0x91, 0x1e, 0xc1, 0x08, 0xce, 0xa9, 0x70, - 0xd4, 0xaa, 0x2c, 0x0d, 0x68, 0x8b, 0x80, 0x54, 0xd4, 0x59, 0xa8, 0x6a, - 0x27, 0xea, 0x4e, 0xe6, 0xa2, 0xea, 0xfe, 0x38, 0x38, 0x6b, 0x24, 0x9f, - 0x27, 0xf0, 0x1b, 0x53, 0xc1, 0x99, 0xca, 0x90, 0x2a, 0x7f, 0x46, 0x3c, - 0x07, 0x4c, 0x07, 0xe3, 0x5b, 0xa9, 0x18, 0xdf, 0x6b, 0xa4, 0x7a, 0xd2, - 0x1c, 0xd4, 0x6f, 0xa8, 0x6a, 0x93, 0x05, 0x7b, 0x8f, 0x2a, 0x6f, 0x6a, - 0x65, 0x82, 0x29, 0x8b, 0xaf, 0x58, 0xdc, 0x08, 0x24, 0x76, 0xdb, 0xc9, - 0xd9, 0x09, 0xa8, 0xd3, 0x9b, 0x84, 0x6c, 0xdc, 0x23, 0x1a, 0xc3, 0x27, - 0x2f, 0x85, 0x03, 0xe5, 0x70, 0x61, 0xf8, 0x94, 0x54, 0x47, 0xe8, 0x96, - 0x0f, 0xef, 0xeb, 0xe0, 0xa8, 0x25, 0x0b, 0xfa, 0x71, 0xdb, 0xd5, 0x07, - 0x3a, 0x0b, 0xc9, 0x4b, 0x56, 0x82, 0x2a, 0x86, 0x5c, 0xfc, 0x2a, 0x0f, - 0x8e, 0x3f, 0x6e, 0x1e, 0xb2, 0xd0, 0xcc, 0xc2, 0x21, 0x1f, 0x9b, 0x23, - 0x5e, 0xfd, 0x8a, 0x6b, 0x50, 0x5b, 0xe1, 0xed, 0x63, 0xa3, 0xe6, 0x7a, - 0xc8, 0x50, 0xac, 0x2b, 0x4f, 0xe7, 0x3a, 0x92, 0xfa, 0xa5, 0x31, 0xdf, - 0x94, 0x01, 0xca, 0x0b, 0xdc, 0x41, 0x78, 0x62, 0x62, 0xc5, 0xb6, 0xf4, - 0xf5, 0xda, 0xa2, 0xb3, 0x1f, 0x04, 0xf5, 0x17, 0x85, 0x6e, 0x83, 0x49, - 0xd1, 0xfa, 0x79, 0x89, 0xa3, 0xfe, 0x44, 0x5e, 0x78, 0x00, 0x87, 0x6c, - 0x18, 0x2e, 0x66, 0x16, 0xc9, 0x20, 0x62, 0x9a, 0x61, 0xf5, 0x90, 0xfc, - 0x32, 0xa0, 0x47, 0x0e, 0x42, 0xb6, 0x87, 0x6b, 0x06, 0xf1, 0x01, 0x30, - 0x28, 0x11, 0xe5, 0xc1, 0x9a, 0x8a, 0x1a, 0x9b, 0xcf, 0x17, 0x73, 0x89, - 0x82, 0x5b, 0xfa, 0x52, 0x68, 0x60, 0x0e, 0x7b, 0x25, 0xd6, 0x9b, 0x73, - 0xe2, 0x57, 0x5c, 0x76, 0xf3, 0xe4, 0xba, 0x88, 0x21, 0xf9, 0x47, 0x84, - 0x67, 0xd1, 0xe0, 0xa9, 0x8c, 0x40, 0x83, 0x0b, 0x13, 0xbf, 0x2c, 0xfc, - 0xb6, 0xf8, 0x54, 0xb2, 0x2c, 0xae, 0xc4, 0xcb, 0x4c, 0xac, 0xc4, 0x2b, - 0x06, 0x9c, 0xfa, 0x19, 0x0b, 0xaf, 0xf7, 0x8f, 0xd2, 0xf9, 0x3a, 0x86, - 0xca, 0xd7, 0xd1, 0x35, 0xbe, 0xda, 0xef, 0xb7, 0xff, 0xe8, 0xdb, 0xb7, - 0x6f, 0xf0, 0x14, 0x1d, 0x45, 0x05, 0x38, 0x17, 0x37, 0xdc, 0xe9, 0x1a, - 0x1b, 0x0f, 0x38, 0xe1, 0xa6, 0xf7, 0x0c, 0x0d, 0x6b, 0x31, 0xa6, 0xd4, - 0x61, 0xda, 0xdd, 0xa6, 0x66, 0xe7, 0xa9, 0x2e, 0x01, 0x12, 0x96, 0x41, - 0x60, 0x13, 0x77, 0xd3, 0x63, 0x9c, 0x63, 0xd1, 0xb1, 0x7e, 0x00, 0x4e, - 0xdc, 0x0d, 0x1c, 0x4f, 0xf5, 0x5e, 0x19, 0xf9, 0xa8, 0x84, 0x41, 0x3c, - 0x1d, 0xe5, 0x26, 0x38, 0xa1, 0x7c, 0x90, 0x70, 0x89, 0xc4, 0x71, 0x5d, - 0x1f, 0x1e, 0x89, 0x70, 0xba, 0x31, 0x1c, 0xa1, 0xbc, 0xf5, 0xe8, 0x9f, - 0xe3, 0x79, 0x8a, 0x70, 0x62, 0x17, 0x07, 0xb0, 0x1a, 0x37, 0x41, 0x39, - 0x68, 0x17, 0xd8, 0xc1, 0xaf, 0x1b, 0xb9, 0x97, 0xe7, 0x44, 0xbc, 0x56, - 0x4d, 0x82, 0xaa, 0x3e, 0x13, 0x87, 0xa3, 0x34, 0xc7, 0x30, 0xc3, 0x26, - 0x9a, 0xe1, 0x86, 0xb7, 0x04, 0xc4, 0xb2, 0x81, 0x03, 0xec, 0x87, 0x2f, - 0xb4, 0x30, 0x55, 0x6b, 0xf5, 0x42, 0xf6, 0xe7, 0x6a, 0xdc, 0x74, 0x89, - 0xa8, 0xf0, 0x59, 0x11, 0x9a, 0x5e, 0x77, 0x38, 0xa6, 0x61, 0xbf, 0xc1, - 0x05, 0xb7, 0xdd, 0x24, 0x99, 0x18, 0x21, 0x36, 0xbc, 0x42, 0xb1, 0x6a, - 0x57, 0xad, 0xe8, 0x61, 0x34, 0x02, 0xdf, 0xcb, 0xed, 0x0e, 0x43, 0x34, - 0x2b, 0xdb, 0x1b, 0xb5, 0xe4, 0x4b, 0x62, 0x05, 0xf3, 0xcf, 0x92, 0xd7, - 0x72, 0x08, 0xbd, 0x39, 0xf6, 0x2b, 0x39, 0x89, 0xd5, 0x38, 0x40, 0x05, - 0xe3, 0xe5, 0x2b, 0xdb, 0x30, 0x9b, 0xff, 0x7a, 0x72, 0xf5, 0x62, 0x9a, - 0x03, 0xc9, 0x00, 0x78, 0x47, 0x97, 0x91, 0xc7, 0x95, 0x1c, 0xa0, 0x85, - 0x1d, 0xae, 0x71, 0x57, 0xd2, 0x4d, 0x06, 0x80, 0xad, 0x48, 0x13, 0x4e, - 0x47, 0x5c, 0xd0, 0xf7, 0x2b, 0x18, 0x57, 0x8a, 0xe1, 0xec, 0x37, 0x2c, - 0x92, 0x2a, 0xd5, 0x3b, 0xce, 0x26, 0xfd, 0x24, 0xb1, 0x6d, 0x50, 0xe5, - 0x20, 0x6f, 0x4d, 0xfd, 0x69, 0xbf, 0x65, 0x03, 0xde, 0xef, 0x67, 0x0b, - 0x59, 0x68, 0x1f, 0xfc, 0x29, 0x40, 0xa2, 0x26, 0x36, 0x88, 0x67, 0x1b, - 0xd7, 0x12, 0x0e, 0x80, 0x19, 0x84, 0xc1, 0xed, 0x48, 0xfb, 0xfe, 0x5c, - 0x1c, 0x28, 0x7f, 0x2a, 0xd6, 0x0b, 0xc5, 0xf0, 0x36, 0x47, 0xce, 0x9d, - 0x88, 0xd9, 0x4b, 0x52, 0xf3, 0x05, 0x3b, 0x13, 0xd8, 0x2f, 0x9b, 0x35, - 0x18, 0x34, 0x2f, 0xab, 0x79, 0x20, 0x0b, 0x13, 0x78, 0x51, 0x06, 0x48, - 0x32, 0xf4, 0xcb, 0x39, 0x15, 0x8a, 0x8e, 0x48, 0xac, 0x51, 0x93, 0x41, - 0x90, 0xef, 0x80, 0x8a, 0x79, 0xa4, 0x13, 0xba, 0x00, 0x2e, 0x42, 0xd7, - 0xab, 0x9d, 0xa2, 0x02, 0x21, 0x87, 0xb9, 0xb2, 0xe7, 0x44, 0xbb, 0x5d, - 0xf2, 0xed, 0xb7, 0x2d, 0xd4, 0x34, 0xf6, 0x7e, 0xe7, 0xc2, 0x89, 0x5c, - 0x8c, 0x15, 0xc1, 0xd0, 0xfa, 0xa9, 0x6c, 0x52, 0x53, 0x58, 0x6f, 0x11, - 0x5f, 0x9b, 0x8e, 0xf8, 0x98, 0x8d, 0x70, 0xbf, 0x68, 0x2e, 0x72, 0xaa, - 0x70, 0x1e, 0x18, 0x1f, 0x75, 0x68, 0x58, 0x15, 0x15, 0x64, 0xf7, 0xdc, - 0x0f, 0x15, 0x5f, 0xc8, 0x28, 0x6f, 0x1d, 0x08, 0x72, 0xb8, 0xf7, 0xa6, - 0x71, 0xc6, 0x52, 0x90, 0x70, 0x84, 0x86, 0xed, 0x72, 0x36, 0xf1, 0x5d, - 0x5b, 0x83, 0x06, 0x96, 0xbb, 0x55, 0x86, 0xf0, 0x16, 0x1c, 0x6e, 0x7f, - 0xe0, 0x0c, 0x86, 0xdc, 0x3e, 0xce, 0x92, 0x61, 0x3f, 0x6c, 0x2a, 0x92, - 0xd6, 0x7b, 0xa4, 0x5b, 0xd0, 0xd9, 0xfd, 0x8e, 0x77, 0xfe, 0xf4, 0x34, - 0xe8, 0x18, 0x23, 0x88, 0x19, 0x2f, 0xbe, 0x46, 0x05, 0x5c, 0x57, 0x76, - 0x18, 0xa0, 0x9a, 0x45, 0xfd, 0x74, 0xdf, 0x25, 0xf4, 0x94, 0x02, 0x87, - 0x9a, 0x3b, 0xfa, 0x2b, 0x2b, 0x44, 0xad, 0xc0, 0x5f, 0xbd, 0x6d, 0xf8, - 0xad, 0xfc, 0x68, 0x00, 0xe8, 0x42, 0x8f, 0x0c, 0x54, 0x54, 0x77, 0x49, - 0x52, 0x05, 0x58, 0xfc, 0x81, 0xdb, 0x5d, 0x0d, 0xe9, 0x1f, 0xbc, 0x96, - 0x4e, 0x54, 0x7b, 0xd3, 0x97, 0xa6, 0x15, 0xa1, 0x70, 0xca, 0xed, 0x14, - 0x01, 0x05, 0xfe, 0x1d, 0x7d, 0xc7, 0xcc, 0xf0, 0x3d, 0xd7, 0x37, 0xcb, - 0x7e, 0x91, 0x51, 0x7a, 0xdd, 0x84, 0x22, 0x46, 0xc0, 0x6b, 0x53, 0xad, - 0xf7, 0x69, 0xe4, 0xfe, 0x92, 0xe1, 0x46, 0x75, 0x1d, 0x01, 0x59, 0xc4, - 0xae, 0x31, 0x70, 0x22, 0x4a, 0xad, 0x80, 0xa0, 0xe2, 0xb2, 0x95, 0xe3, - 0x75, 0xff, 0xc0, 0xbd, 0x55, 0x6d, 0xb9, 0x4b, 0x06, 0x2c, 0x51, 0xde, - 0x91, 0xca, 0x70, 0xc3, 0x02, 0x43, 0x77, 0x10, 0xa9, 0xdc, 0x4a, 0x2b, - 0x2a, 0x80, 0x5c, 0x88, 0x31, 0x38, 0xe7, 0x26, 0x9f, 0x13, 0x6f, 0xb9, - 0x98, 0x5d, 0x2d, 0xe7, 0xe5, 0x0b, 0x04, 0x14, 0xa5, 0xb3, 0xf6, 0xa4, - 0x55, 0x35, 0xc4, 0xeb, 0x4a, 0xa9, 0x53, 0xbb, 0xd6, 0x36, 0x93, 0x50, - 0xa5, 0xe1, 0x0a, 0xb1, 0x34, 0x26, 0x44, 0x18, 0xdd, 0x66, 0xfe, 0x0f, - 0x7d, 0x84, 0x83, 0x57, 0x3a, 0x3e, 0x8f, 0x2b, 0x3c, 0xa2, 0xa1, 0x1a, - 0x91, 0xfc, 0x00, 0x6a, 0xa0, 0xe3, 0x25, 0x05, 0x27, 0xcb, 0x14, 0x4d, - 0x1d, 0xea, 0xe4, 0x2f, 0xe9, 0x84, 0x56, 0xa0, 0x36, 0xaa, 0x47, 0xb4, - 0xe9, 0x12, 0x38, 0x6e, 0x77, 0xf6, 0x01, 0x2a, 0xc8, 0x70, 0xa9, 0xcb, - 0x97, 0x63, 0xf1, 0xa7, 0x69, 0x77, 0xdc, 0x66, 0x53, 0xf6, 0x48, 0xab, - 0x47, 0xee, 0xc9, 0x0d, 0xf7, 0x5c, 0x66, 0x02, 0xbe, 0x32, 0x85, 0x54, - 0x21, 0x13, 0x58, 0x19, 0xb2, 0xee, 0x9c, 0xcb, 0x3c, 0xa0, 0xda, 0x65, - 0x16, 0xb2, 0xef, 0x21, 0xf2, 0xe3, 0x59, 0x95, 0xf4, 0x6d, 0xdc, 0x85, - 0x63, 0xb9, 0x60, 0x46, 0x41, 0x2a, 0x52, 0x58, 0xf2, 0x5c, 0xa8, 0x53, - 0xdb, 0x2d, 0xd2, 0x08, 0x18, 0xd6, 0x75, 0xc8, 0xf2, 0x73, 0x3c, 0x27, - 0xea, 0x4e, 0xe6, 0x33, 0x5d, 0xb8, 0xa2, 0x18, 0xa2, 0x57, 0xf7, 0xb7, - 0x8a, 0xb5, 0xee, 0x67, 0xec, 0x48, 0x3a, 0x8e, 0x06, 0xd9, 0x0f, 0x43, - 0x00, 0x2f, 0x29, 0xd2, 0x76, 0x82, 0xd1, 0x1e, 0x61, 0xe4, 0x06, 0x72, - 0xd1, 0x46, 0x3c, 0xcc, 0xfd, 0x08, 0x4e, 0x77, 0x4c, 0x7e, 0x93, 0x80, - 0x28, 0x7b, 0x80, 0xe3, 0x84, 0xf4, 0x54, 0x5c, 0xdd, 0x9e, 0x90, 0x0a, - 0x1c, 0xaf, 0x61, 0x47, 0x22, 0x1d, 0x47, 0x81, 0x81, 0x50, 0xb0, 0x45, - 0x7c, 0x83, 0x9a, 0x30, 0x52, 0x38, 0xe9, 0x9a, 0x31, 0x88, 0x1f, 0x67, - 0x82, 0x5b, 0xa2, 0x2e, 0x9b, 0x27, 0x9d, 0xa1, 0x3a, 0xa5, 0x26, 0x2a, - 0xcd, 0x22, 0x42, 0x59, 0xe5, 0xa1, 0x3c, 0x64, 0xf4, 0xd5, 0xa8, 0x68, - 0x57, 0x5d, 0x3d, 0x48, 0x12, 0xe9, 0xa6, 0x33, 0x41, 0x10, 0x87, 0x00, - 0x8e, 0xf9, 0x10, 0x66, 0x07, 0x75, 0x18, 0x65, 0xd8, 0x15, 0x68, 0x24, - 0xd5, 0xd3, 0x90, 0x0a, 0x34, 0x9c, 0xe8, 0x83, 0xc9, 0x71, 0xb6, 0xbb, - 0xc2, 0xc2, 0xd9, 0x69, 0x65, 0x84, 0xeb, 0x0d, 0xae, 0x3b, 0xc7, 0x17, - 0x74, 0xdd, 0xc1, 0x39, 0x7f, 0x9d, 0xaa, 0xe6, 0x53, 0xf1, 0xf7, 0x66, - 0x70, 0xe8, 0xe5, 0x2d, 0x43, 0xcf, 0xd8, 0x9e, 0x48, 0xe8, 0x69, 0x38, - 0x9e, 0x45, 0x02, 0xae, 0x23, 0xd6, 0xdd, 0xf1, 0x84, 0x70, 0xa9, 0x20, - 0x4c, 0xd6, 0x93, 0x52, 0x79, 0x23, 0x2e, 0x3b, 0x11, 0xe5, 0x8c, 0xc9, - 0x37, 0x6f, 0xdc, 0x8e, 0x45, 0x57, 0x2c, 0xc7, 0x12, 0xba, 0x2e, 0x1c, - 0xf9, 0xdc, 0xc0, 0xd5, 0x78, 0x24, 0x0b, 0x21, 0xc5, 0x49, 0xad, 0x63, - 0x15, 0x48, 0x60, 0x6f, 0x27, 0xa9, 0xf5, 0x42, 0x50, 0x4b, 0x8d, 0x24, - 0xbc, 0x44, 0x42, 0x17, 0x06, 0x50, 0x4e, 0xab, 0x5f, 0x71, 0x3c, 0x07, - 0xc8, 0xcb, 0x03, 0xe6, 0x3a, 0x7a, 0xc6, 0x5e, 0x3a, 0xa9, 0x63, 0x60, - 0x4d, 0x57, 0x29, 0x41, 0xbc, 0xb8, 0x2c, 0xf6, 0x32, 0x96, 0x26, 0x23, - 0x9c, 0xf4, 0x14, 0x96, 0x4b, 0x02, 0xb5, 0xa7, 0x83, 0x65, 0xe2, 0x64, - 0xf9, 0xc0, 0xb2, 0x3d, 0xe7, 0x47, 0x86, 0x2c, 0x1d, 0x16, 0x63, 0xc1, - 0xd9, 0x7f, 0x96, 0xda, 0xdf, 0x1f, 0xb9, 0xda, 0xdf, 0x1f, 0x05, 0xe7, - 0xbf, 0x3f, 0x09, 0xce, 0x7f, 0x7f, 0x6f, 0xfe, 0x7a, 0x2e, 0x4d, 0x38, - 0xfc, 0xdf, 0x58, 0x19, 0x7a, 0xe5, 0x62, 0x85, 0xcd, 0x62, 0x6c, 0x62, - 0xe7, 0xf3, 0x97, 0x3a, 0xf0, 0x89, 0x0e, 0x82, 0x92, 0x88, 0xb5, 0x6e, - 0x10, 0xb7, 0xa7, 0x7c, 0x7e, 0x20, 0xec, 0x0e, 0xce, 0x50, 0x9f, 0x38, - 0xd6, 0x51, 0x03, 0xaa, 0x03, 0x8f, 0xb0, 0x5e, 0x4e, 0x6d, 0xd5, 0xeb, - 0xb9, 0x2d, 0x27, 0x62, 0x3e, 0xe4, 0x84, 0x9a, 0x64, 0xfd, 0x3c, 0x89, - 0x55, 0x47, 0xcc, 0x64, 0xeb, 0xc3, 0x45, 0xfe, 0xca, 0xab, 0x9e, 0x34, - 0x91, 0x3d, 0x00, 0x4c, 0xd9, 0xcd, 0xa4, 0x24, 0x53, 0x1f, 0x4a, 0x2c, - 0xaf, 0x7e, 0x9a, 0xa9, 0xe9, 0x57, 0xe5, 0x92, 0x77, 0xe5, 0x20, 0x0b, - 0x65, 0x5b, 0xb1, 0xa5, 0x5c, 0x4d, 0xd8, 0xc7, 0x2f, 0x19, 0x95, 0x3f, - 0x2e, 0x49, 0x1f, 0xba, 0x58, 0x30, 0x62, 0xe1, 0xee, 0xd9, 0x4f, 0xe3, - 0x06, 0xdd, 0x6e, 0x4c, 0xfb, 0x3c, 0xe3, 0x24, 0x8e, 0x07, 0xca, 0xd5, - 0xf4, 0x3a, 0x2f, 0x93, 0x3e, 0xb9, 0xb2, 0x6d, 0xa2, 0x54, 0xcf, 0xee, - 0x44, 0xdd, 0xab, 0x00, 0x9a, 0x92, 0xf4, 0xa5, 0x8f, 0x9c, 0xb7, 0x21, - 0x15, 0xbe, 0x00, 0xe0, 0x0a, 0xc3, 0x3d, 0x17, 0x58, 0x08, 0x70, 0xaf, - 0x04, 0xaa, 0x40, 0x11, 0x6c, 0xb6, 0xd2, 0xf8, 0xed, 0xa6, 0xde, 0x86, - 0x1b, 0x6b, 0xec, 0x8b, 0x5c, 0xf6, 0xb2, 0x01, 0xa7, 0xa8, 0x9d, 0x45, - 0x6f, 0xc2, 0x8c, 0xb8, 0x0d, 0xdb, 0x46, 0x37, 0x55, 0x85, 0x7c, 0x45, - 0x69, 0x84, 0x12, 0x05, 0xf8, 0xca, 0x56, 0xb0, 0x61, 0x6d, 0xb0, 0x72, - 0x3e, 0x5a, 0x35, 0x1d, 0xad, 0x98, 0x8d, 0xe2, 0xa8, 0x8c, 0xc7, 0xd5, - 0x16, 0x05, 0x61, 0xd2, 0xcf, 0x24, 0x83, 0x1f, 0xf6, 0xdb, 0x48, 0x63, - 0x96, 0x51, 0x76, 0x07, 0xb9, 0xa0, 0x0c, 0xac, 0x45, 0x29, 0x40, 0x3d, - 0xac, 0xef, 0xf8, 0xe5, 0xda, 0x62, 0x49, 0xf8, 0x64, 0xa5, 0x13, 0xb8, - 0x67, 0xd5, 0x88, 0x2f, 0xae, 0x30, 0x63, 0xac, 0x7d, 0x13, 0xbe, 0xfa, - 0x40, 0x55, 0x39, 0xb1, 0xac, 0x9a, 0x57, 0x56, 0x76, 0x7e, 0x3d, 0xd4, - 0x6d, 0x26, 0x5b, 0xc7, 0x11, 0xae, 0xd2, 0x99, 0x07, 0xe6, 0x3f, 0x1c, - 0x56, 0x2b, 0x1f, 0x9e, 0x76, 0x93, 0x41, 0x9c, 0x77, 0x31, 0x66, 0x20, - 0x36, 0xa5, 0xd3, 0x1b, 0x96, 0xf1, 0x74, 0x86, 0xe6, 0xc0, 0x83, 0x03, - 0x9b, 0x4f, 0xbb, 0xe3, 0x62, 0xf9, 0xa6, 0xe9, 0x86, 0x7f, 0xfe, 0xb5, - 0x9f, 0x57, 0xb4, 0x82, 0x57, 0xee, 0x97, 0xd5, 0x17, 0x2b, 0x47, 0x13, - 0xdc, 0xfa, 0x33, 0xbe, 0xf9, 0x2b, 0xeb, 0x58, 0xcb, 0xa9, 0x3f, 0x5f, - 0xf8, 0xf1, 0x6a, 0xc0, 0x7d, 0x38, 0x8f, 0xe8, 0x67, 0xd5, 0x55, 0x4f, - 0xc0, 0xb8, 0xad, 0xe6, 0xd8, 0xc6, 0x52, 0x07, 0x4c, 0xdb, 0xcf, 0xaa, - 0x94, 0xe9, 0xae, 0x9c, 0x03, 0xa6, 0xe4, 0x67, 0xf5, 0xed, 0x6a, 0xa2, - 0xe2, 0x83, 0x96, 0x21, 0x5e, 0x68, 0x04, 0xb2, 0x69, 0xb5, 0xb1, 0x00, - 0xc6, 0xf0, 0xc3, 0x86, 0xf5, 0xb3, 0x7a, 0x12, 0xf1, 0xf3, 0xab, 0xc5, - 0x95, 0xfa, 0xdb, 0x77, 0x28, 0xea, 0xdf, 0xe4, 0xc7, 0x1a, 0x79, 0x4b, - 0x7d, 0xd4, 0xf5, 0xf4, 0x11, 0xd7, 0xd3, 0x8d, 0x61, 0xdc, 0xf1, 0x83, - 0x97, 0x1d, 0x67, 0x07, 0xe4, 0x1a, 0x8d, 0x87, 0x9e, 0x71, 0x0f, 0x9c, - 0xc5, 0x10, 0xd7, 0xc5, 0xc7, 0xbc, 0x2e, 0x3e, 0xf2, 0x92, 0xf8, 0xe8, - 0x77, 0xc3, 0x51, 0x4d, 0x00, 0x73, 0x16, 0x23, 0x2f, 0x8a, 0xc3, 0xa8, - 0xd4, 0xb0, 0x90, 0x10, 0xc5, 0x08, 0x7c, 0x41, 0xcc, 0x7a, 0x1f, 0xb9, - 0x5b, 0x5c, 0x08, 0x31, 0x24, 0x26, 0x43, 0xb0, 0xc7, 0x77, 0x10, 0x7f, - 0x17, 0x42, 0x87, 0x78, 0x3a, 0x66, 0x76, 0xb6, 0x70, 0xb2, 0x4d, 0x1d, - 0xf9, 0x0b, 0x56, 0x63, 0x53, 0x49, 0x41, 0x85, 0x03, 0xe9, 0x6c, 0x3a, - 0x01, 0x99, 0x4b, 0x35, 0x9e, 0x76, 0xfb, 0x89, 0x20, 0x70, 0xb5, 0x1b, - 0x86, 0x55, 0x82, 0x4d, 0x14, 0x34, 0x8c, 0x01, 0x79, 0xdb, 0xc4, 0x79, - 0xe1, 0x04, 0x0c, 0x2f, 0x2e, 0x71, 0x8f, 0x79, 0x75, 0x7b, 0xcc, 0xab, - 0xdb, 0x71, 0xbe, 0xb8, 0xf9, 0x19, 0x60, 0xfc, 0x86, 0x9f, 0xe6, 0x8b, - 0x8a, 0x02, 0x87, 0x10, 0xf9, 0x26, 0xe0, 0xff, 0x23, 0xeb, 0xba, 0x16, - 0x54, 0xe7, 0x79, 0xed, 0xfd, 0xf7, 0x96, 0x19, 0x08, 0x90, 0x3d, 0x49, - 0xcc, 0x9f, 0xc2, 0x0c, 0xfb, 0xe9, 0x8f, 0x57, 0x91, 0x6c, 0xf6, 0xb9, - 0x00, 0x2f, 0x39, 0xee, 0xbd, 0xc8, 0x12, 0xfd, 0xa8, 0x90, 0xc7, 0x09, - 0xd7, 0x2f, 0x1b, 0x44, 0x3e, 0xc0, 0xd0, 0x93, 0xe4, 0x6b, 0x3e, 0x49, - 0xbe, 0xea, 0x49, 0xf2, 0xb5, 0x86, 0x43, 0x77, 0xd3, 0x78, 0x97, 0xb1, - 0xf1, 0x9f, 0x2e, 0xa6, 0xa8, 0xdf, 0x29, 0xeb, 0x77, 0xb2, 0x38, 0x00, - 0x22, 0x7a, 0x8f, 0x85, 0x22, 0x5e, 0xef, 0x36, 0xa4, 0xda, 0xd7, 0xb9, - 0x59, 0xb2, 0x4d, 0x80, 0x39, 0xa3, 0xa1, 0x2d, 0x02, 0x12, 0x5f, 0xc0, - 0x56, 0xe7, 0x0a, 0x3e, 0x5d, 0x00, 0x2b, 0x11, 0xff, 0xdd, 0x18, 0x20, - 0x23, 0x8a, 0xa9, 0x20, 0x60, 0x2a, 0x2a, 0x7a, 0xd3, 0x78, 0xc6, 0x97, - 0x67, 0x7e, 0x61, 0x8c, 0xe5, 0xe9, 0x72, 0x2c, 0xcf, 0xdd, 0xf5, 0x0e, - 0xc4, 0x3a, 0x2d, 0x51, 0x14, 0x25, 0x8b, 0xa2, 0xa8, 0x28, 0xda, 0x40, - 0xb1, 0x75, 0x23, 0xc5, 0x16, 0x43, 0xc5, 0x26, 0xc1, 0x14, 0x5b, 0x22, - 0x7f, 0x25, 0xf3, 0xf5, 0x56, 0x7e, 0x22, 0xd8, 0x9f, 0x0c, 0xf6, 0x87, - 0xc1, 0x9e, 0xb7, 0x1b, 0xfa, 0xe6, 0x76, 0x7a, 0xb2, 0xdc, 0x4e, 0x9d, - 0x56, 0xca, 0x64, 0xe2, 0xce, 0xc5, 0x79, 0x24, 0xa0, 0xe7, 0x8a, 0xe8, - 0x19, 0x87, 0xca, 0xf8, 0x57, 0x10, 0x79, 0x9a, 0xc8, 0xaa, 0x36, 0x3b, - 0x40, 0x35, 0x15, 0xa0, 0x56, 0x1d, 0xdb, 0xbb, 0x7e, 0xe7, 0x52, 0x29, - 0x85, 0x74, 0x5f, 0xcf, 0x2f, 0xed, 0xa5, 0xc8, 0x52, 0x4b, 0x4f, 0x44, - 0x9a, 0xa3, 0x4e, 0x26, 0x02, 0x1c, 0xe3, 0x78, 0x2b, 0xfc, 0x4d, 0x9b, - 0xef, 0x29, 0x8c, 0xcd, 0x26, 0x52, 0x75, 0x4a, 0xe4, 0x1e, 0x4c, 0xe5, - 0xe5, 0x84, 0xae, 0xb0, 0xfa, 0xcf, 0xaa, 0x3a, 0xc7, 0x8c, 0x0e, 0x2a, - 0x45, 0x0c, 0xeb, 0x7c, 0x0f, 0x9f, 0xa8, 0xd3, 0xd3, 0x53, 0xf6, 0x39, - 0x6b, 0x1d, 0x55, 0x67, 0x12, 0xfe, 0x91, 0x83, 0xe1, 0x1b, 0x50, 0x15, - 0x7a, 0xfa, 0x35, 0xf9, 0xd5, 0xca, 0xb4, 0xae, 0xd4, 0xa0, 0x75, 0x05, - 0xe7, 0x94, 0x92, 0x0a, 0xa9, 0xdd, 0xb0, 0xc6, 0xfb, 0x1f, 0x6b, 0xbc, - 0xab, 0x04, 0xda, 0xfd, 0xd9, 0x2f, 0x6e, 0x48, 0x4c, 0x1c, 0xc6, 0x00, - 0xd7, 0x06, 0x50, 0x7c, 0xa7, 0x47, 0x82, 0xf3, 0xe9, 0xff, 0x98, 0xe9, - 0x53, 0x0e, 0x74, 0x20, 0x95, 0x92, 0x30, 0x4b, 0x11, 0x69, 0xf4, 0xc1, - 0x8c, 0xda, 0x6c, 0x93, 0x9b, 0x7c, 0x4d, 0xce, 0x23, 0xf2, 0xdd, 0x9d, - 0xbb, 0x8b, 0x70, 0x8f, 0x22, 0xdc, 0xf5, 0x3c, 0xa2, 0x9a, 0x48, 0x83, - 0x1e, 0xf6, 0x5e, 0xe3, 0x5d, 0xef, 0x35, 0x9e, 0xf5, 0x02, 0xf8, 0x19, - 0x07, 0xdf, 0xf7, 0x5e, 0x4f, 0x9f, 0x52, 0x9c, 0x71, 0x1b, 0x56, 0x01, - 0x87, 0x94, 0x3a, 0xe0, 0xdf, 0x18, 0xa2, 0x5b, 0x83, 0x1b, 0xc3, 0x3b, - 0xae, 0x5b, 0x0d, 0x90, 0xb4, 0xb7, 0xbb, 0xdf, 0x9b, 0x5c, 0x9d, 0xff, - 0xf1, 0x8a, 0x8e, 0x4e, 0x60, 0xaa, 0xba, 0x08, 0x13, 0x15, 0xb2, 0xa0, - 0x6e, 0x49, 0xea, 0xcd, 0x4f, 0x62, 0x26, 0x88, 0x44, 0x4c, 0xfb, 0x1d, - 0xc1, 0x08, 0xd7, 0x21, 0x83, 0x8d, 0x6d, 0xcb, 0xbb, 0xb8, 0x76, 0xde, - 0xfb, 0x50, 0xb3, 0xec, 0x5b, 0xd7, 0x4a, 0xe0, 0x2a, 0x57, 0x10, 0xb2, - 0x37, 0xb8, 0x30, 0x33, 0x0c, 0x4b, 0xbb, 0xc4, 0x79, 0xa9, 0x5d, 0xf6, - 0x01, 0x44, 0xe2, 0x76, 0x49, 0x4e, 0xaa, 0xa0, 0x0e, 0x43, 0xf1, 0xb1, - 0xdd, 0xc3, 0xbf, 0xf7, 0xba, 0x5e, 0x2c, 0x71, 0xf1, 0x9c, 0x54, 0x31, - 0xf9, 0x1c, 0x5a, 0x88, 0xcf, 0xf1, 0x19, 0x48, 0x4f, 0x98, 0x84, 0xf6, - 0x40, 0x11, 0x8f, 0x95, 0x8d, 0x02, 0xc5, 0x4d, 0x46, 0x85, 0x6b, 0x84, - 0xb8, 0x8e, 0x61, 0x93, 0x91, 0xac, 0xa5, 0xd9, 0x09, 0xe0, 0xc8, 0xa6, - 0xcd, 0xcf, 0x95, 0xd6, 0xbb, 0x37, 0xa0, 0x88, 0x26, 0x2f, 0xb0, 0xdf, - 0x3b, 0xb7, 0x8d, 0x23, 0x9f, 0x0b, 0x8c, 0xd6, 0xf4, 0x04, 0x93, 0x6d, - 0x88, 0xa0, 0xf6, 0x62, 0x98, 0x6f, 0xfc, 0xaf, 0xb6, 0xa5, 0xe8, 0x57, - 0x7a, 0xa8, 0xe9, 0xac, 0xfb, 0x41, 0x8c, 0x16, 0x58, 0x8f, 0x3c, 0xbe, - 0xca, 0xb6, 0x06, 0x02, 0x1b, 0x14, 0xe1, 0x68, 0x2b, 0xb4, 0x4f, 0x03, - 0x05, 0x83, 0xe7, 0x27, 0x61, 0x37, 0x77, 0x96, 0x6f, 0x99, 0xff, 0x3b, - 0x87, 0xef, 0xf1, 0xda, 0xe1, 0xb5, 0xe1, 0x8c, 0xb1, 0xee, 0xff, 0x1b, - 0xc1, 0x25, 0x0b, 0x11, 0x83, 0xf8, 0x99, 0x30, 0x83, 0xe1, 0x58, 0x17, - 0xed, 0x5b, 0xd2, 0x4b, 0xf0, 0x7d, 0x57, 0xac, 0xbb, 0xa3, 0xdc, 0x8f, - 0x48, 0xec, 0xae, 0xb7, 0x3a, 0x02, 0x6b, 0x98, 0x4b, 0xb1, 0xb3, 0x04, - 0x8e, 0x47, 0x40, 0x1e, 0xf4, 0x77, 0x2f, 0x4a, 0xcb, 0xfe, 0x76, 0xc1, - 0x69, 0x8c, 0x1c, 0xc9, 0xe3, 0x88, 0xa7, 0x32, 0xf5, 0x8f, 0xe7, 0x0c, - 0x18, 0x14, 0xc6, 0x2f, 0x0c, 0x63, 0x58, 0x62, 0xe3, 0xfd, 0xcb, 0x45, - 0xe7, 0x97, 0x15, 0x4a, 0xd6, 0x05, 0xd0, 0x79, 0x15, 0x10, 0x07, 0xcc, - 0x78, 0x09, 0x5d, 0x0b, 0x89, 0x6a, 0x0d, 0x57, 0x0c, 0x8d, 0xd6, 0x87, - 0xac, 0x6b, 0x05, 0x4e, 0xd1, 0x41, 0x4c, 0x9a, 0xb7, 0xe4, 0x83, 0xd2, - 0x57, 0x3e, 0x87, 0x1a, 0x2f, 0x57, 0x0a, 0x31, 0xac, 0xa6, 0x18, 0x2e, - 0xc6, 0x0b, 0x98, 0xe8, 0xaa, 0xf1, 0x88, 0x74, 0xe0, 0xc6, 0xc7, 0x1c, - 0x84, 0xb5, 0x9f, 0x8e, 0xd0, 0x97, 0xc0, 0xef, 0x94, 0x79, 0x68, 0xc4, - 0x86, 0x03, 0x65, 0xf9, 0x9b, 0x2e, 0xf0, 0x2b, 0x46, 0xbe, 0xe6, 0x61, - 0x79, 0x8a, 0x14, 0xcb, 0xcb, 0x7f, 0x7c, 0x2e, 0x72, 0xef, 0x00, 0x63, - 0x6c, 0x9a, 0xd1, 0x3b, 0x9c, 0x5f, 0xd2, 0x3a, 0xec, 0x52, 0x2c, 0x72, - 0xc5, 0xd2, 0xa8, 0x0f, 0xc0, 0x07, 0x73, 0xe3, 0xc5, 0xbc, 0x1b, 0xe2, - 0xb5, 0x19, 0x2f, 0x49, 0xa5, 0x42, 0x31, 0x5c, 0x7a, 0xc5, 0x45, 0x21, - 0x70, 0x48, 0x0e, 0x02, 0x36, 0xe7, 0x65, 0x40, 0xbb, 0x30, 0x3f, 0xa4, - 0x3f, 0xc4, 0x45, 0xbe, 0x71, 0x04, 0xb9, 0x8c, 0x9b, 0x2d, 0xe3, 0xe5, - 0x15, 0x30, 0x8e, 0xa5, 0xf7, 0x29, 0x9c, 0x9b, 0x1d, 0x93, 0x30, 0x4c, - 0x30, 0x89, 0x0d, 0x47, 0x4f, 0x19, 0x87, 0x0e, 0x3e, 0xe2, 0x63, 0x74, - 0xec, 0xd1, 0x77, 0x81, 0xff, 0xe2, 0xd6, 0x51, 0x40, 0x36, 0x75, 0xf9, - 0xae, 0x17, 0x88, 0xf2, 0xb6, 0x71, 0x27, 0xca, 0x2f, 0xef, 0x27, 0xfd, - 0x9f, 0xdc, 0xe2, 0x12, 0xfe, 0x1d, 0xcd, 0x44, 0x1a, 0x10, 0x7e, 0xae, - 0x96, 0xa6, 0x5a, 0x81, 0x62, 0xb9, 0xb6, 0x4f, 0x78, 0x00, 0xa6, 0x90, - 0xaf, 0x77, 0x1d, 0x19, 0x56, 0xc0, 0xae, 0x74, 0xd5, 0xb6, 0x7e, 0xc4, - 0x9e, 0xdf, 0x02, 0x7b, 0x46, 0xb2, 0x75, 0xcc, 0x30, 0x53, 0xc1, 0xae, - 0xf0, 0x24, 0x5b, 0x9f, 0x54, 0x50, 0x7d, 0xa1, 0x3c, 0x9c, 0xe2, 0xe1, - 0xec, 0x15, 0x1a, 0x1a, 0xbf, 0xe2, 0xb3, 0x42, 0xf1, 0xbb, 0x9b, 0x7c, - 0x6b, 0x03, 0x21, 0x40, 0xf9, 0x3e, 0x68, 0x94, 0xd6, 0xae, 0xd1, 0x3a, - 0xbb, 0xc6, 0x51, 0x6f, 0x74, 0x47, 0x70, 0x13, 0x62, 0xff, 0x3c, 0xea, - 0x7f, 0x93, 0x41, 0x17, 0x08, 0xf4, 0x76, 0x53, 0x2a, 0x6e, 0xf9, 0x3c, - 0xa7, 0xc2, 0x38, 0x5f, 0x36, 0x7c, 0x05, 0x52, 0xe6, 0x09, 0xb1, 0x3c, - 0x02, 0x32, 0xf7, 0xe2, 0x18, 0x2c, 0x27, 0x04, 0xf1, 0x5e, 0x26, 0x89, - 0x0c, 0x4d, 0x4e, 0x6b, 0xc1, 0xb8, 0xb8, 0x6f, 0xf1, 0x7e, 0x06, 0xe8, - 0x3e, 0x29, 0x50, 0x08, 0x77, 0xcb, 0x00, 0xcc, 0xcb, 0x50, 0x51, 0xdd, - 0x22, 0x73, 0x3c, 0xbb, 0xa5, 0x0a, 0xb1, 0x0a, 0xcf, 0xf9, 0x6e, 0x87, - 0xba, 0x2a, 0x1a, 0xc9, 0xac, 0xc2, 0xf2, 0xc2, 0x9d, 0x3b, 0xfe, 0xc4, - 0xf4, 0x51, 0x1b, 0x4c, 0x30, 0x9a, 0x8c, 0x77, 0x2d, 0x24, 0xc7, 0x7b, - 0xc9, 0x91, 0xe5, 0x5e, 0x34, 0xbb, 0x8d, 0xf7, 0x76, 0x19, 0x3d, 0xe2, - 0xb4, 0xca, 0xb6, 0x75, 0x57, 0xa0, 0x14, 0x4f, 0x62, 0xf5, 0x92, 0x24, - 0x38, 0xee, 0x01, 0x09, 0x6f, 0xd0, 0x4a, 0x48, 0x64, 0x8b, 0x69, 0x0c, - 0xf4, 0x1c, 0xd7, 0xba, 0x97, 0x1c, 0x27, 0x3a, 0xd8, 0x38, 0xc7, 0x8e, - 0xd3, 0x5e, 0x53, 0x73, 0xf4, 0x08, 0xf1, 0x51, 0x9b, 0xeb, 0xf5, 0xc6, - 0xcb, 0xf4, 0xf1, 0xcf, 0x90, 0xea, 0xe0, 0xf9, 0xc6, 0x85, 0x29, 0xb7, - 0xee, 0xc2, 0x86, 0x6c, 0xab, 0x54, 0xc2, 0x8c, 0xfe, 0x28, 0x39, 0x09, - 0xf1, 0x28, 0x66, 0x9c, 0x21, 0xfd, 0x85, 0xff, 0x68, 0x0f, 0x33, 0x85, - 0xc0, 0x54, 0x63, 0xc3, 0x29, 0xe9, 0x7f, 0xe3, 0x9c, 0xe1, 0x8f, 0x3e, - 0x53, 0xcb, 0x75, 0x4b, 0x80, 0xb4, 0x2b, 0x03, 0x7a, 0xe7, 0x91, 0x9f, - 0x9a, 0x3c, 0x93, 0x7f, 0xe8, 0xe6, 0x83, 0x0f, 0xc6, 0x7b, 0x2f, 0x5f, - 0xdd, 0x78, 0x2c, 0x1b, 0x32, 0x2d, 0xe4, 0xf9, 0x6a, 0x58, 0xc6, 0x03, - 0xec, 0xa0, 0xb5, 0x82, 0x31, 0xd5, 0xb1, 0x1e, 0x36, 0x1b, 0x3d, 0x54, - 0x0d, 0xda, 0xeb, 0x33, 0x93, 0xc1, 0x3d, 0xf5, 0x6f, 0x34, 0xff, 0xda, - 0xb7, 0x08, 0xff, 0x71, 0x18, 0xcb, 0x21, 0x93, 0xf3, 0x89, 0xb3, 0x29, - 0xb7, 0x54, 0x5b, 0xf5, 0x05, 0x91, 0xfc, 0x88, 0x41, 0x43, 0x77, 0xf4, - 0xda, 0x87, 0x0f, 0x85, 0x7a, 0xf3, 0x1c, 0x7b, 0xeb, 0x66, 0xb9, 0xf5, - 0x9e, 0x3e, 0x4b, 0xdf, 0x6a, 0xd2, 0x82, 0x7a, 0xff, 0x9b, 0xc6, 0x35, - 0x74, 0x53, 0x24, 0x7d, 0x1e, 0xad, 0x42, 0xb9, 0x12, 0x32, 0x84, 0x0c, - 0xcb, 0x2e, 0x75, 0x16, 0x66, 0x93, 0x54, 0xef, 0x34, 0x79, 0x17, 0x1b, - 0x7d, 0xfc, 0x1b, 0x31, 0x19, 0x17, 0x63, 0x92, 0xfb, 0x7f, 0x56, 0x2d, - 0x05, 0x29, 0xce, 0xdb, 0xb4, 0x99, 0xe7, 0x82, 0xe2, 0xe3, 0x93, 0xfe, - 0xf3, 0xd1, 0xd7, 0x79, 0x93, 0xc5, 0x1f, 0x16, 0xff, 0x14, 0xde, 0xfe, - 0x5e, 0xbd, 0xfc, 0xb4, 0x85, 0x5f, 0xc0, 0x07, 0x55, 0xab, 0x60, 0xfd, - 0x7f, 0x64, 0xf3, 0x0e, 0xbe, 0x9d, 0xe1, 0x39, 0x9e, 0xbd, 0x97, 0x66, - 0xf5, 0xe9, 0x6e, 0xe9, 0xc8, 0xbe, 0xb0, 0xcc, 0xde, 0x18, 0xd4, 0xbb, - 0x23, 0x7c, 0x49, 0x50, 0xa9, 0x71, 0x41, 0x52, 0xb1, 0x8d, 0xe2, 0xcb, - 0x34, 0x59, 0xde, 0xc1, 0xb6, 0x33, 0xa6, 0xae, 0xb3, 0xb1, 0x29, 0x3a, - 0x1b, 0xa1, 0x1a, 0xd4, 0x89, 0x02, 0x4f, 0x69, 0xdd, 0xc3, 0xec, 0x3d, - 0xb5, 0x8e, 0x89, 0x39, 0xb5, 0xcd, 0xe3, 0xcb, 0xfd, 0x7f, 0x7c, 0x69, - 0x90, 0x9a, 0x6f, 0xd3, 0xca, 0xff, 0x9d, 0x84, 0x26, 0x87, 0xf9, 0x31, - 0xfd, 0xc7, 0x27, 0x6e, 0x5e, 0xaf, 0xcd, 0x93, 0x67, 0xb1, 0xd9, 0x3c, - 0x2e, 0x15, 0x04, 0xe3, 0xba, 0xa1, 0x0b, 0xbf, 0x31, 0x1f, 0x60, 0xa2, - 0x79, 0xee, 0x5e, 0x26, 0x00, 0x2b, 0x99, 0x02, 0xb4, 0xe3, 0x81, 0x0d, - 0x0d, 0x0e, 0x3a, 0x0b, 0xfc, 0x94, 0x4b, 0xca, 0xc6, 0x1e, 0xf1, 0x06, - 0x3c, 0xc2, 0x2d, 0xd2, 0x7b, 0x31, 0xce, 0x31, 0x32, 0x9d, 0x97, 0x50, - 0x28, 0x11, 0x2f, 0xde, 0xc6, 0x98, 0x12, 0xe6, 0x97, 0x32, 0xf3, 0x3e, - 0x36, 0x65, 0xfa, 0x2d, 0xf6, 0x98, 0x11, 0xb2, 0xd1, 0x95, 0xfd, 0x3a, - 0x96, 0xb3, 0x6c, 0x61, 0xc6, 0xdc, 0x2a, 0x8c, 0x80, 0x88, 0x98, 0x87, - 0x8a, 0x2e, 0x71, 0x63, 0x99, 0x84, 0xbf, 0xd4, 0x06, 0xa6, 0x39, 0x6e, - 0x19, 0x28, 0xce, 0x2e, 0x1c, 0xed, 0x6d, 0x7c, 0x86, 0xce, 0xce, 0x83, - 0x8b, 0x6c, 0x28, 0xe0, 0xf4, 0xb2, 0x66, 0xf1, 0xf2, 0x95, 0xa6, 0x56, - 0x37, 0x15, 0xfe, 0xc8, 0xd5, 0x96, 0xd3, 0x2d, 0xb1, 0x82, 0xfc, 0xda, - 0x78, 0x4d, 0x2e, 0x07, 0x21, 0x73, 0x4a, 0x78, 0x0a, 0x4b, 0x77, 0xb0, - 0x86, 0x99, 0x25, 0x50, 0xcd, 0x71, 0xae, 0x95, 0x52, 0x75, 0xe5, 0xd8, - 0x14, 0x57, 0xe2, 0x51, 0x9f, 0xe6, 0x4c, 0xbe, 0xf5, 0x63, 0x79, 0x8d, - 0x14, 0x2a, 0x33, 0x2e, 0xea, 0x38, 0xcb, 0x74, 0xdf, 0x5a, 0x69, 0x4d, - 0xc1, 0x33, 0x61, 0xa8, 0x30, 0xf4, 0x54, 0x64, 0x0c, 0xbe, 0x85, 0x91, - 0x77, 0xac, 0x6a, 0xf7, 0x4b, 0x89, 0xe5, 0xbd, 0xd5, 0x3b, 0x2a, 0x01, - 0x25, 0x43, 0x34, 0xf2, 0x8c, 0x20, 0x52, 0x13, 0x72, 0x0c, 0x6e, 0xcb, - 0x73, 0x88, 0xaf, 0x16, 0xbf, 0x52, 0xc1, 0x18, 0x36, 0x8f, 0x21, 0x40, - 0xdd, 0xbf, 0xc6, 0x32, 0x6d, 0x01, 0x47, 0x82, 0x0a, 0x03, 0x28, 0xdc, - 0xce, 0x7e, 0xf2, 0x41, 0x4d, 0x12, 0x0d, 0x31, 0xb7, 0x4f, 0x8a, 0x90, - 0xb0, 0x79, 0x10, 0xbc, 0xf5, 0xcf, 0xdd, 0xcc, 0xf2, 0x7c, 0x6b, 0x87, - 0x50, 0x01, 0x65, 0x45, 0x8f, 0x4b, 0xab, 0x7d, 0xaf, 0x08, 0x97, 0x90, - 0xdc, 0x2e, 0x74, 0x8b, 0x28, 0x7c, 0xe5, 0x45, 0xe0, 0xae, 0xb1, 0x80, - 0x3d, 0x84, 0x85, 0x87, 0x12, 0x61, 0x0c, 0xeb, 0x60, 0xa6, 0x00, 0x22, - 0x7a, 0x58, 0x87, 0x74, 0x84, 0xeb, 0xfb, 0x5c, 0x52, 0x77, 0x24, 0x23, - 0x16, 0x1d, 0x45, 0xbe, 0xe2, 0x88, 0x02, 0x79, 0x5a, 0x3b, 0x7e, 0x6e, - 0x89, 0x73, 0x1c, 0x79, 0x8c, 0xbe, 0x0d, 0x04, 0x9e, 0xb7, 0xa1, 0xd6, - 0x6e, 0xd5, 0xb7, 0xb8, 0x25, 0x4a, 0x78, 0x74, 0x44, 0x1b, 0xe2, 0xc3, - 0x62, 0xc1, 0xc9, 0x87, 0x9d, 0x68, 0xe0, 0xb9, 0x13, 0x96, 0x4e, 0x42, - 0x0c, 0x69, 0x2d, 0x72, 0x21, 0x55, 0x5f, 0x66, 0xfa, 0xaa, 0xbb, 0x99, - 0x21, 0x52, 0x41, 0x31, 0x6d, 0x68, 0x28, 0xab, 0x85, 0x53, 0xb9, 0x0c, - 0x3a, 0xb9, 0x37, 0x68, 0xb6, 0xcb, 0xf8, 0x15, 0xa8, 0x24, 0x04, 0x73, - 0x3c, 0x4d, 0x0b, 0xb2, 0xc4, 0x75, 0xfd, 0xa2, 0x6f, 0xb5, 0x7d, 0xab, - 0x33, 0xac, 0xb1, 0x97, 0xb1, 0x82, 0xd8, 0x6a, 0x6a, 0x2f, 0xbb, 0x5e, - 0xdb, 0x4e, 0xa8, 0xe2, 0x78, 0xd6, 0x91, 0xb8, 0xfb, 0xf0, 0x64, 0xd7, - 0x03, 0x8e, 0xa5, 0x22, 0x70, 0x6c, 0x9d, 0x88, 0x39, 0xfa, 0x1a, 0x45, - 0xff, 0xfc, 0x20, 0x3b, 0x97, 0x21, 0x4e, 0x28, 0x69, 0x16, 0xd8, 0x35, - 0x37, 0x60, 0x86, 0x76, 0x31, 0x6e, 0x11, 0x98, 0xa4, 0xc0, 0x19, 0x85, - 0xa7, 0xd8, 0x85, 0x41, 0xc5, 0xdb, 0x94, 0xc1, 0xce, 0xef, 0xec, 0x22, - 0xeb, 0x55, 0xeb, 0x07, 0x87, 0xdc, 0x5a, 0xd3, 0xb5, 0xdf, 0xa0, 0x81, - 0xaa, 0x85, 0x98, 0x45, 0x10, 0xbb, 0x35, 0xc3, 0x88, 0x22, 0xf7, 0x68, - 0xc0, 0xa5, 0x15, 0x12, 0xd8, 0x32, 0x71, 0xb1, 0xab, 0x42, 0x30, 0x5b, - 0xa2, 0xe0, 0xa8, 0xa2, 0xcb, 0x1d, 0x1d, 0xb0, 0xa7, 0x7b, 0xc0, 0xef, - 0x51, 0x7a, 0x3e, 0x48, 0x78, 0x31, 0x02, 0xf8, 0xd4, 0x3d, 0x23, 0x70, - 0x9d, 0x68, 0x2f, 0x91, 0xae, 0x8a, 0xe7, 0x0f, 0x1c, 0x55, 0x13, 0x8f, - 0x10, 0x88, 0x29, 0xe6, 0x86, 0x28, 0x46, 0xc1, 0x35, 0xce, 0x1a, 0x85, - 0xd8, 0xe0, 0xae, 0xe7, 0xa6, 0xb6, 0x8b, 0xc1, 0x50, 0x11, 0x0b, 0xed, - 0x49, 0x34, 0xe8, 0xb9, 0x74, 0x4d, 0xad, 0x4a, 0x23, 0x74, 0xa2, 0xc5, - 0x00, 0x4e, 0x2c, 0x5b, 0x8a, 0xb2, 0xa1, 0x41, 0xf7, 0xd5, 0x54, 0x24, - 0xf7, 0x50, 0xed, 0x46, 0xa8, 0xbc, 0xdd, 0xe7, 0xc1, 0x39, 0xab, 0xbd, - 0x8c, 0xf7, 0x3b, 0x42, 0x6b, 0xa0, 0x45, 0x59, 0xba, 0xf3, 0x9c, 0x9d, - 0xc1, 0x3c, 0xc0, 0xb4, 0x72, 0x35, 0x50, 0x8c, 0xe6, 0xb0, 0x83, 0xc3, - 0xc9, 0x77, 0xc7, 0xe3, 0xfa, 0x67, 0xa0, 0xf8, 0xf5, 0x0a, 0x62, 0xf4, - 0x5b, 0xe7, 0xe4, 0xf4, 0xac, 0xbb, 0x91, 0x71, 0x50, 0xd7, 0xaa, 0xc0, - 0xf7, 0xdb, 0xc4, 0x3a, 0x56, 0x14, 0x8c, 0x0b, 0xed, 0x4a, 0x9d, 0xef, - 0xc1, 0xc6, 0x68, 0x93, 0x25, 0x28, 0x00, 0x2b, 0x4d, 0x73, 0x30, 0xfe, - 0x3a, 0x06, 0x5c, 0x54, 0xf3, 0x5f, 0x59, 0x2d, 0x3f, 0xf5, 0x8f, 0x4d, - 0x49, 0xe9, 0x83, 0x12, 0x97, 0xff, 0xb0, 0xd0, 0xbb, 0xc9, 0x21, 0xd7, - 0x78, 0xfa, 0x04, 0xb1, 0xe7, 0x73, 0x24, 0x14, 0x47, 0x7a, 0x7a, 0xfc, - 0xc2, 0x13, 0xcb, 0xb4, 0xdd, 0xc2, 0x46, 0x5e, 0xc6, 0x2d, 0x7b, 0x5d, - 0xe2, 0x70, 0xe1, 0xb3, 0x02, 0x89, 0xfb, 0x9e, 0xf6, 0xa8, 0x05, 0x93, - 0x2a, 0xd6, 0x63, 0xa4, 0xb4, 0x34, 0x13, 0x5e, 0x3d, 0x56, 0x70, 0xee, - 0x39, 0x54, 0xe1, 0x14, 0x25, 0xe6, 0x75, 0x3c, 0x5c, 0x66, 0x3a, 0xe2, - 0xfc, 0x1f, 0xaf, 0x97, 0xdb, 0x70, 0xd2, 0x0e, 0x53, 0xd6, 0x76, 0x98, - 0xb2, 0xea, 0xd5, 0x09, 0xcd, 0xd6, 0x6d, 0x41, 0x64, 0xca, 0xcb, 0xd2, - 0xa7, 0xbc, 0x2c, 0xf9, 0x02, 0x3c, 0x28, 0xbd, 0x00, 0x17, 0x45, 0xf6, - 0x9c, 0x20, 0xb3, 0xbf, 0xfa, 0x74, 0x65, 0x3d, 0x32, 0xd7, 0x3e, 0x21, - 0xa9, 0x23, 0x17, 0xde, 0xff, 0xd6, 0xbd, 0x80, 0xc7, 0x82, 0x7c, 0x5b, - 0x6d, 0xe8, 0x7c, 0xe4, 0x33, 0xeb, 0x78, 0x65, 0xdd, 0x59, 0x7b, 0x5a, - 0x32, 0xe3, 0xcb, 0xb8, 0xbe, 0xc2, 0xa5, 0x1e, 0xe3, 0xc1, 0xac, 0xdb, - 0x8b, 0x58, 0xba, 0xae, 0x3f, 0xba, 0xf6, 0xa9, 0xe8, 0x6f, 0x71, 0xb5, - 0x07, 0xfb, 0x07, 0x50, 0x94, 0x65, 0x45, 0xb1, 0x69, 0xca, 0x31, 0x4c, - 0x2f, 0xfe, 0x47, 0xbe, 0x96, 0xbb, 0xc8, 0xd4, 0x72, 0x15, 0x28, 0xf7, - 0x29, 0x4f, 0x4b, 0x34, 0xc0, 0x23, 0x6f, 0x37, 0x92, 0xe7, 0xf0, 0x2b, - 0x73, 0x9c, 0xd8, 0x34, 0x60, 0xc6, 0x2a, 0xea, 0xd9, 0x4f, 0x76, 0x78, - 0xf3, 0xfd, 0x5e, 0xe4, 0x94, 0x08, 0x59, 0x7b, 0xb6, 0xca, 0x7f, 0x8e, - 0xbf, 0xb1, 0x3f, 0x7f, 0x3e, 0x34, 0xe5, 0x54, 0x73, 0x51, 0xc3, 0xab, - 0x09, 0x78, 0x3e, 0x15, 0xcf, 0x43, 0x7b, 0xe5, 0xe7, 0x94, 0xd5, 0x5f, - 0xa1, 0xba, 0xc3, 0x93, 0x8f, 0x2d, 0x1f, 0x01, 0xc5, 0x92, 0x9f, 0x90, - 0x9e, 0x2e, 0xe3, 0x07, 0x5a, 0x85, 0x30, 0x99, 0xd0, 0x3c, 0x1c, 0xf6, - 0x45, 0x99, 0xaf, 0x80, 0x2a, 0x34, 0xc3, 0x61, 0xa7, 0x8e, 0x0a, 0xa4, - 0xb8, 0x40, 0x80, 0xc0, 0x68, 0x29, 0x27, 0x12, 0x3a, 0x67, 0xe4, 0x65, - 0xc8, 0x73, 0x0a, 0xd9, 0x1a, 0x84, 0x4b, 0x03, 0xad, 0xf9, 0x81, 0x56, - 0x13, 0x16, 0x0a, 0x37, 0x7a, 0x1d, 0x0d, 0xd8, 0x42, 0x98, 0xa2, 0x20, - 0xa7, 0x6b, 0x09, 0xbb, 0xd3, 0x29, 0x97, 0x36, 0xc9, 0x0a, 0x3c, 0x7b, - 0x3d, 0xf3, 0x59, 0x10, 0xe0, 0xe8, 0x6f, 0xce, 0x71, 0x1e, 0x2f, 0x12, - 0xb2, 0x49, 0x01, 0x05, 0xc0, 0x7b, 0x1e, 0x7b, 0xf0, 0xd3, 0x9e, 0x84, - 0x57, 0xe7, 0xd7, 0xb3, 0xfe, 0x73, 0x6a, 0xaf, 0x0f, 0x45, 0x3c, 0x5d, - 0x0d, 0xf7, 0x77, 0x84, 0x3b, 0xeb, 0x62, 0xc2, 0xc8, 0xb9, 0xaa, 0x9b, - 0x9a, 0x4c, 0x02, 0xb0, 0x2b, 0x27, 0x9a, 0x25, 0x58, 0x28, 0x9d, 0xf6, - 0x9c, 0x48, 0x2b, 0x7c, 0x97, 0xae, 0x4a, 0xd7, 0x6c, 0x06, 0xd9, 0xd7, - 0x9e, 0x75, 0x2b, 0x11, 0x96, 0xf9, 0x70, 0x04, 0x98, 0x67, 0x01, 0x42, - 0x90, 0xde, 0xc0, 0xdb, 0x35, 0x52, 0x73, 0x19, 0xaf, 0x81, 0xf9, 0x4e, - 0xd0, 0xf8, 0x2d, 0x91, 0xa8, 0x81, 0x33, 0x9c, 0xba, 0x0a, 0x4e, 0x27, - 0xfb, 0x94, 0x30, 0xe2, 0x7c, 0xc4, 0x61, 0x8c, 0x70, 0xd4, 0x92, 0x1e, - 0x81, 0x54, 0xd0, 0xba, 0x08, 0xdf, 0xba, 0xc9, 0xa5, 0x90, 0xdb, 0x9a, - 0x08, 0x1c, 0x1c, 0x3d, 0xa7, 0x7d, 0xcc, 0x92, 0x4d, 0x26, 0x71, 0x60, - 0x1d, 0x5a, 0x3d, 0xc9, 0x86, 0x1c, 0xdf, 0x8f, 0x74, 0x79, 0x44, 0x43, - 0xe3, 0xeb, 0x91, 0xae, 0xa1, 0xe1, 0x9d, 0xa1, 0x7a, 0xdf, 0xe4, 0x27, - 0x87, 0x44, 0x14, 0x5f, 0x48, 0x49, 0xe2, 0x51, 0xce, 0x40, 0x1a, 0xbc, - 0x81, 0xdd, 0xcf, 0x89, 0xf4, 0xb9, 0xf6, 0xec, 0x68, 0x64, 0xb9, 0x66, - 0x20, 0x9c, 0x7b, 0xe8, 0x9a, 0x16, 0x8e, 0xf5, 0x6a, 0xd2, 0x21, 0xae, - 0x5c, 0x36, 0x47, 0x86, 0x96, 0xe5, 0xe7, 0x51, 0xdc, 0x40, 0x76, 0xbf, - 0xef, 0x28, 0x83, 0xbf, 0x2e, 0xd0, 0x18, 0xf0, 0x9e, 0x85, 0x9c, 0xa1, - 0x90, 0x11, 0xf1, 0x96, 0xbf, 0x90, 0x9e, 0x5b, 0xd1, 0x6f, 0xcd, 0xf3, - 0xff, 0xa4, 0x36, 0x0e, 0xe6, 0xac, 0xff, 0x3c, 0xab, 0xac, 0xc4, 0x3a, - 0xc9, 0x6d, 0x85, 0x47, 0xba, 0x8b, 0x4d, 0x14, 0xa0, 0x17, 0xd9, 0x10, - 0x29, 0x73, 0x84, 0xaf, 0x09, 0xfa, 0x2d, 0x99, 0x87, 0x8a, 0xbb, 0xe7, - 0x10, 0x20, 0x83, 0xd3, 0x15, 0x58, 0x33, 0x6f, 0x05, 0xc1, 0x9a, 0x44, - 0x8c, 0xb7, 0x96, 0x1a, 0xe7, 0x4d, 0x4d, 0xe1, 0x97, 0x84, 0x2a, 0xb6, - 0x52, 0xb5, 0x0a, 0xc7, 0x4b, 0x46, 0xb3, 0x8e, 0x32, 0x20, 0x1a, 0xcb, - 0x21, 0x3d, 0x8b, 0x94, 0xca, 0x0b, 0xaf, 0x14, 0x17, 0x11, 0xd4, 0x31, - 0x7e, 0xc0, 0xf4, 0x82, 0x73, 0x42, 0x67, 0x73, 0xda, 0xc8, 0xfe, 0x04, - 0x24, 0xfd, 0x54, 0x40, 0x59, 0x08, 0x53, 0xe6, 0x22, 0xce, 0x53, 0x04, - 0x5f, 0xfa, 0xfa, 0xd2, 0xa8, 0x43, 0x9d, 0x73, 0xf2, 0x22, 0x08, 0x87, - 0x42, 0x9a, 0xd6, 0xea, 0xfa, 0x37, 0x3e, 0x73, 0xa1, 0x8a, 0x57, 0x41, - 0xfa, 0xb7, 0xf5, 0xa8, 0xcb, 0xfa, 0x31, 0xd4, 0xf9, 0x8c, 0x50, 0x7b, - 0xc5, 0xd4, 0x54, 0xd0, 0x26, 0xe4, 0x3a, 0x21, 0x3e, 0xbc, 0xbf, 0x17, - 0x94, 0x93, 0x38, 0xd2, 0xa8, 0x9b, 0x91, 0xab, 0x2c, 0xda, 0x76, 0x0a, - 0x1b, 0x14, 0x35, 0x25, 0xec, 0x59, 0xc5, 0x91, 0x00, 0x88, 0xbc, 0x96, - 0x39, 0x28, 0x36, 0x56, 0xdc, 0x8a, 0xa5, 0x83, 0xd2, 0x3a, 0x7e, 0xd4, - 0x86, 0xe5, 0x02, 0x8c, 0xb8, 0x02, 0x51, 0xb2, 0x0b, 0xd9, 0xb9, 0xc7, - 0x50, 0x0a, 0x34, 0x6e, 0xb9, 0xe0, 0xc0, 0xf1, 0x1a, 0xff, 0xe3, 0x83, - 0x59, 0x3b, 0x47, 0x6b, 0x0a, 0x1a, 0x71, 0x92, 0xe5, 0xc1, 0xc0, 0xb2, - 0x6d, 0x60, 0x32, 0x34, 0x1f, 0xbd, 0x6e, 0x78, 0x07, 0x45, 0x6b, 0x2e, - 0x97, 0x36, 0x1c, 0x30, 0x2a, 0xec, 0xcd, 0x2c, 0x77, 0x54, 0xe4, 0xf6, - 0x17, 0xc6, 0xf1, 0xf3, 0x50, 0xf9, 0x9d, 0x5f, 0x71, 0x4a, 0x9a, 0x52, - 0xc9, 0x81, 0x62, 0xf9, 0xb4, 0x9d, 0x57, 0x48, 0xc9, 0x92, 0x19, 0x29, - 0x3a, 0x97, 0xa7, 0x7d, 0xf8, 0xbd, 0x92, 0x50, 0x7c, 0x7d, 0xda, 0x6b, - 0x1d, 0xf0, 0x9e, 0x38, 0xe4, 0x56, 0x1a, 0xde, 0xb5, 0xb3, 0x72, 0xb8, - 0x34, 0x52, 0x92, 0x89, 0x03, 0x6d, 0x7a, 0x7f, 0x21, 0xdc, 0x96, 0x6d, - 0x1d, 0x59, 0x3a, 0x8b, 0xcb, 0xbb, 0x23, 0xea, 0x56, 0x50, 0x8d, 0x11, - 0xba, 0x7a, 0x54, 0x3a, 0x40, 0x5e, 0x53, 0x02, 0x42, 0x66, 0x26, 0xc0, - 0x06, 0x15, 0xa4, 0x6f, 0xc0, 0xba, 0x3e, 0x2f, 0xf6, 0xf3, 0xe8, 0x24, - 0x96, 0x80, 0xcc, 0x5b, 0xd2, 0x9d, 0x52, 0x6d, 0x47, 0x72, 0x84, 0x8e, - 0x3b, 0xd5, 0x63, 0x2a, 0x51, 0x3b, 0xd7, 0x80, 0x1c, 0xdc, 0xf7, 0xe2, - 0xe5, 0x2e, 0xef, 0x00, 0x69, 0x53, 0xd7, 0x20, 0x77, 0x7a, 0xaf, 0x63, - 0xc1, 0xc2, 0xad, 0xfe, 0xbe, 0x0f, 0x6f, 0x37, 0x0b, 0xb1, 0xff, 0xd3, - 0x9d, 0xaa, 0x96, 0xc2, 0x21, 0x82, 0x6d, 0x3c, 0x29, 0x9d, 0x2f, 0x72, - 0xec, 0xa0, 0x46, 0x88, 0x38, 0xc0, 0x08, 0xae, 0x80, 0x00, 0x0c, 0xe8, - 0x98, 0x96, 0xf8, 0x3a, 0x59, 0xcc, 0x18, 0xa0, 0x05, 0x2b, 0xf3, 0x72, - 0x45, 0xee, 0xb6, 0x69, 0xbe, 0xb2, 0x95, 0xe0, 0xc6, 0xdd, 0xed, 0xc9, - 0x4f, 0xd7, 0x28, 0x6c, 0x43, 0xae, 0x4e, 0xbd, 0xc5, 0x35, 0xa2, 0xf3, - 0x3a, 0x65, 0xb2, 0xd2, 0xad, 0x4c, 0x9a, 0xe6, 0x08, 0x63, 0x67, 0x12, - 0xb1, 0xcf, 0x63, 0x69, 0x10, 0x30, 0xb8, 0xc3, 0xe7, 0xf5, 0xc7, 0x43, - 0x6b, 0x93, 0x43, 0xc7, 0xbb, 0xd5, 0x68, 0x1b, 0x76, 0x10, 0x4e, 0x05, - 0x61, 0xf4, 0xc2, 0x8e, 0x50, 0x10, 0x6b, 0x79, 0x48, 0xc7, 0xed, 0xe5, - 0x93, 0x8a, 0xaf, 0xb3, 0x98, 0xeb, 0x8f, 0xf8, 0xee, 0xb5, 0x7b, 0xc2, - 0x70, 0x57, 0x27, 0x92, 0xe9, 0xd2, 0x5b, 0xf5, 0xb8, 0xee, 0xb1, 0x9c, - 0x14, 0x8a, 0x4e, 0x85, 0xb9, 0xbe, 0xf1, 0xa5, 0x5b, 0x80, 0x1d, 0xef, - 0xdc, 0x18, 0x24, 0xec, 0xed, 0x3d, 0x70, 0x05, 0xe9, 0x6d, 0x17, 0xd8, - 0x90, 0x24, 0x68, 0x1e, 0x90, 0x42, 0x70, 0x2b, 0xc8, 0x57, 0xeb, 0xe3, - 0x69, 0x81, 0xac, 0xfb, 0xff, 0xa3, 0x10, 0xf6, 0x19, 0x22, 0xb6, 0x02, - 0x85, 0xb3, 0x7f, 0x5c, 0xa5, 0x36, 0x99, 0x0e, 0xf3, 0x8b, 0x8b, 0xf8, - 0xf4, 0x32, 0xec, 0x8c, 0xad, 0xe5, 0xc9, 0x95, 0x73, 0x04, 0x97, 0x7c, - 0x24, 0xe3, 0xb9, 0x9e, 0xb8, 0x52, 0xaf, 0x95, 0x76, 0x9a, 0x4f, 0xa4, - 0x02, 0xf4, 0x54, 0x56, 0xac, 0xe0, 0xde, 0x59, 0x67, 0x12, 0xe2, 0x6e, - 0x42, 0x20, 0x5c, 0x43, 0xbf, 0x5f, 0x8c, 0x94, 0x24, 0x29, 0x5a, 0xc4, - 0xd0, 0xae, 0x23, 0xb4, 0xb3, 0x05, 0x7c, 0x76, 0xe1, 0x46, 0xbf, 0x3b, - 0xf5, 0x30, 0x96, 0xe6, 0x21, 0x40, 0x16, 0x94, 0x6a, 0x96, 0x43, 0xab, - 0x8c, 0x73, 0xab, 0x4b, 0xa9, 0x87, 0xe1, 0xc4, 0x03, 0x88, 0xdc, 0x99, - 0x9c, 0xdb, 0xfb, 0x12, 0x91, 0x6e, 0x6f, 0x6c, 0x39, 0xd0, 0x88, 0x2b, - 0xcc, 0x1d, 0xdd, 0xc9, 0x31, 0x49, 0x4b, 0x6c, 0x62, 0x07, 0x24, 0x14, - 0xb6, 0xda, 0xcd, 0x01, 0xf9, 0x98, 0xef, 0xdc, 0xa9, 0x05, 0xec, 0xce, - 0xb7, 0x53, 0xe3, 0x19, 0xeb, 0xab, 0xd3, 0x1b, 0xf7, 0xf3, 0x30, 0xaf, - 0x01, 0x81, 0x72, 0x50, 0xd7, 0x45, 0xab, 0xae, 0x0a, 0x4e, 0x3e, 0x50, - 0x46, 0x37, 0x3a, 0xf3, 0xbc, 0xe4, 0xcc, 0x33, 0x92, 0xd7, 0x70, 0x39, - 0x59, 0x5e, 0x04, 0xea, 0xdb, 0x2f, 0xb3, 0x61, 0x02, 0x4c, 0x06, 0xf7, - 0xb8, 0x0d, 0xa8, 0x5d, 0xfd, 0xec, 0x50, 0xf8, 0xc8, 0xfb, 0x30, 0xc1, - 0xf0, 0xb6, 0xde, 0x47, 0xc9, 0x30, 0x09, 0xac, 0x82, 0x7e, 0x0d, 0x4f, - 0x3f, 0xfa, 0x33, 0x8c, 0x60, 0x62, 0x62, 0x7a, 0xe9, 0x7d, 0xcf, 0xd8, - 0x34, 0x94, 0xe2, 0x3e, 0x83, 0x7f, 0x3b, 0xff, 0x75, 0x25, 0x0c, 0xa0, - 0x51, 0x38, 0x34, 0x90, 0x56, 0xb0, 0x7d, 0x8d, 0x12, 0xab, 0x0b, 0x8c, - 0xa7, 0xb6, 0xf4, 0xb7, 0xb1, 0x92, 0x6d, 0xeb, 0x89, 0xb0, 0xa2, 0xf7, - 0x75, 0xa8, 0xe3, 0xf5, 0x4b, 0x4f, 0xa1, 0x6c, 0x72, 0x74, 0x0a, 0xb8, - 0xf1, 0x33, 0x2d, 0xd6, 0xc8, 0xd6, 0xe4, 0x53, 0x98, 0x57, 0xac, 0x4d, - 0xb0, 0xf4, 0x48, 0xe0, 0xbc, 0x34, 0x9d, 0xa0, 0x63, 0xaf, 0x11, 0xd4, - 0x84, 0x9d, 0x88, 0xc1, 0x73, 0xfc, 0x1d, 0xb0, 0x04, 0xf9, 0xcd, 0x63, - 0xe1, 0x5f, 0x4a, 0x6d, 0xb9, 0x03, 0xdc, 0xef, 0xa3, 0xa4, 0x10, 0x24, - 0xa6, 0xdf, 0xdf, 0x61, 0xb6, 0x65, 0xde, 0xd3, 0xfc, 0x0e, 0xdd, 0xc3, - 0xd1, 0xa0, 0xbc, 0x56, 0xfc, 0xc5, 0xaa, 0x92, 0xad, 0xe7, 0x17, 0xbb, - 0xd3, 0x98, 0x22, 0x7f, 0xcd, 0x84, 0xf3, 0x8b, 0xad, 0x34, 0xdd, 0x25, - 0x13, 0xce, 0xef, 0x05, 0x1a, 0x86, 0x14, 0x30, 0xa0, 0x92, 0x73, 0x19, - 0xbd, 0xbe, 0xfb, 0xcd, 0x51, 0xb6, 0xa2, 0x67, 0xba, 0x7b, 0xb6, 0x83, - 0xff, 0xa4, 0xe6, 0x86, 0x55, 0x57, 0xbf, 0x21, 0x57, 0x16, 0x28, 0x9e, - 0x25, 0x03, 0x7b, 0xca, 0xfa, 0x95, 0xda, 0xb7, 0x08, 0x26, 0x46, 0xbd, - 0xdf, 0xbc, 0xae, 0x22, 0x52, 0x2a, 0xf2, 0x2c, 0x06, 0x90, 0x05, 0x72, - 0x99, 0x5c, 0x74, 0x17, 0xac, 0xd6, 0x29, 0xf6, 0xac, 0x62, 0xbe, 0x51, - 0xce, 0xd4, 0xe4, 0x8b, 0x65, 0xe0, 0x33, 0xb3, 0x59, 0xe1, 0x94, 0x30, - 0xde, 0xbc, 0x24, 0xc1, 0x49, 0x5e, 0xc4, 0x2b, 0xdd, 0xbc, 0xdc, 0xa2, - 0x49, 0x39, 0xc4, 0x72, 0x6f, 0x09, 0x25, 0x8e, 0x14, 0x96, 0x65, 0x81, - 0xde, 0x83, 0xfc, 0x66, 0xf2, 0xdf, 0xcf, 0x91, 0xb2, 0x8d, 0xd7, 0x80, - 0x16, 0xc9, 0x99, 0x74, 0x12, 0xee, 0x70, 0xbf, 0xd4, 0x77, 0x34, 0x1b, - 0x38, 0x28, 0xcb, 0x82, 0x05, 0xa2, 0xc2, 0x18, 0x97, 0x48, 0x68, 0x92, - 0x30, 0x0c, 0x37, 0x96, 0x09, 0x4b, 0xb4, 0x67, 0x21, 0x9d, 0x5b, 0x57, - 0x04, 0x7e, 0x66, 0x4c, 0xf4, 0x72, 0x03, 0x91, 0x00, 0x59, 0x80, 0xac, - 0xa1, 0x8a, 0x32, 0xd0, 0x38, 0x74, 0x03, 0x94, 0xdf, 0xf1, 0xe2, 0x4e, - 0xff, 0x9b, 0x1a, 0xf3, 0x0d, 0xe5, 0x07, 0xda, 0xf2, 0xd3, 0x41, 0xf6, - 0x1e, 0xe2, 0x68, 0xc7, 0xc2, 0x74, 0xac, 0x59, 0x26, 0x0f, 0x6c, 0x7e, - 0xb9, 0x80, 0xd2, 0xa7, 0x8a, 0x72, 0x49, 0x13, 0x54, 0x96, 0x73, 0x2a, - 0x17, 0x37, 0x94, 0x25, 0xb6, 0x50, 0x0c, 0x6e, 0x6b, 0x0d, 0x2e, 0x2f, - 0x14, 0x80, 0x4e, 0x7f, 0xb6, 0x87, 0x5b, 0x5d, 0x15, 0x44, 0x88, 0xd8, - 0x83, 0xb2, 0xfc, 0x1e, 0xbc, 0x69, 0x91, 0x67, 0xe1, 0x57, 0x42, 0x17, - 0xc6, 0x63, 0xfa, 0xca, 0xd6, 0x41, 0x9c, 0xfa, 0xc2, 0x82, 0x7e, 0xe5, - 0x27, 0x65, 0xf4, 0x81, 0x07, 0x99, 0x0e, 0x7f, 0x4a, 0x09, 0xc8, 0x95, - 0x48, 0x51, 0xaa, 0xe3, 0x2f, 0x4e, 0x55, 0xe8, 0x42, 0x22, 0x41, 0x60, - 0x3a, 0x19, 0xd6, 0x62, 0x5e, 0xc1, 0xec, 0x58, 0x35, 0x59, 0xfd, 0x4e, - 0x9e, 0x70, 0x7f, 0xfd, 0xa4, 0x31, 0x80, 0x8a, 0x21, 0xb1, 0x5a, 0x7d, - 0x4f, 0xd2, 0x77, 0x5b, 0x65, 0xfd, 0xc6, 0x4d, 0xc8, 0x6f, 0x1e, 0x80, - 0xfe, 0xc6, 0x05, 0xc6, 0x6f, 0xde, 0x5a, 0xfc, 0xe6, 0x66, 0xe4, 0xb7, - 0xac, 0x6d, 0x14, 0xcb, 0x6b, 0x91, 0x8a, 0x1e, 0xd8, 0xcb, 0x2f, 0x26, - 0xe2, 0x9e, 0xe1, 0xb7, 0xbf, 0x66, 0xf8, 0x8d, 0x49, 0xe3, 0x57, 0x6a, - 0xc3, 0x99, 0x6a, 0x1c, 0xc2, 0xef, 0x8e, 0x16, 0xd0, 0xde, 0x0c, 0x6d, - 0xaf, 0x73, 0x9a, 0xdf, 0xee, 0xea, 0xe1, 0x37, 0x6f, 0x1e, 0x2a, 0x82, - 0x38, 0xea, 0x70, 0xbb, 0x4b, 0xb5, 0xac, 0x91, 0x93, 0x0c, 0x95, 0x01, - 0x6c, 0xeb, 0x25, 0xf6, 0x09, 0xbf, 0xb1, 0x30, 0xff, 0x6d, 0xd7, 0x10, - 0xbf, 0xf9, 0x49, 0x97, 0x11, 0xbf, 0xcf, 0x90, 0xb9, 0x2a, 0xc8, 0x10, - 0x00, 0xa6, 0xb4, 0xdb, 0x7b, 0xd8, 0x90, 0x5b, 0x7e, 0x60, 0xb6, 0x03, - 0x13, 0x91, 0x43, 0x92, 0x2f, 0xf9, 0xc0, 0x31, 0x00, 0x0b, 0x28, 0x9f, - 0x1b, 0x1b, 0xb2, 0x84, 0x9e, 0x63, 0x6e, 0xb9, 0x88, 0x35, 0x18, 0x3c, - 0xc5, 0xf2, 0x63, 0x17, 0x7a, 0x6d, 0x9e, 0x48, 0xc5, 0x05, 0xe2, 0x68, - 0xf1, 0x8b, 0x62, 0x81, 0xe4, 0x2b, 0x73, 0x43, 0xfb, 0x6d, 0xb9, 0x4d, - 0x81, 0xcc, 0xc2, 0x11, 0xf9, 0x36, 0xa5, 0x30, 0xe7, 0x46, 0x5e, 0x3b, - 0x9c, 0x7e, 0xb6, 0x3e, 0x19, 0x41, 0x64, 0xde, 0xc7, 0x14, 0x5f, 0xd7, - 0x11, 0x91, 0xc5, 0xe8, 0xf8, 0x50, 0x60, 0x9c, 0x25, 0x19, 0x07, 0xd9, - 0x15, 0x6d, 0x0d, 0xee, 0x39, 0xda, 0xd6, 0xb1, 0x23, 0x27, 0x52, 0xea, - 0xc2, 0x3e, 0x1a, 0x0a, 0x17, 0x63, 0x8b, 0x73, 0xce, 0x61, 0xbc, 0x71, - 0xba, 0x0b, 0x4f, 0x2c, 0x8a, 0xba, 0x90, 0xcc, 0x8a, 0x20, 0x4e, 0x17, - 0x24, 0x22, 0xc4, 0x32, 0x35, 0xfb, 0xad, 0xb9, 0xdf, 0x3a, 0x17, 0xd9, - 0x42, 0xe6, 0x12, 0xc5, 0x58, 0xd6, 0x56, 0x36, 0x65, 0x8d, 0xef, 0x21, - 0x5f, 0x03, 0x70, 0x6f, 0x48, 0xc5, 0xdb, 0x5e, 0xd6, 0x9b, 0x88, 0x01, - 0xd5, 0xc4, 0x5b, 0xf0, 0x48, 0xd6, 0x86, 0x5f, 0xc9, 0x18, 0x75, 0x30, - 0x29, 0x5a, 0x34, 0x70, 0x04, 0x65, 0x22, 0xaa, 0x6d, 0xcb, 0x39, 0x9c, - 0x30, 0xad, 0xcb, 0x73, 0xcb, 0x5a, 0x39, 0xef, 0x59, 0xce, 0x71, 0x5d, - 0x5e, 0xd1, 0x76, 0x6f, 0x8b, 0x95, 0xa0, 0x90, 0x0c, 0x3d, 0xb6, 0x87, - 0x9b, 0x1d, 0x47, 0x5c, 0x1a, 0x69, 0xf6, 0x38, 0xa2, 0xf9, 0xb5, 0x48, - 0x4d, 0x01, 0x5b, 0xa5, 0x48, 0xcc, 0x8a, 0xdb, 0x36, 0xf5, 0x77, 0x3f, - 0x6f, 0x37, 0xbf, 0x4f, 0x18, 0x7f, 0xdd, 0x35, 0xac, 0x51, 0x77, 0x6e, - 0xd0, 0xc7, 0x1a, 0xbf, 0x4d, 0xd7, 0x2e, 0x70, 0x36, 0x6c, 0x3f, 0x0f, - 0x17, 0x98, 0xd2, 0x6e, 0xef, 0x61, 0x43, 0x2e, 0xa5, 0xa3, 0x13, 0xbf, - 0x64, 0xea, 0x65, 0x37, 0x67, 0xcc, 0xcd, 0xc6, 0x9d, 0x7d, 0x71, 0xdc, - 0x5b, 0x5b, 0xe1, 0x85, 0x70, 0xc8, 0xfc, 0x14, 0xe1, 0x6f, 0xa5, 0xad, - 0xa9, 0xa0, 0xcf, 0xb6, 0xd5, 0xaf, 0x9e, 0x9b, 0xdb, 0xb4, 0x83, 0xfe, - 0x25, 0x39, 0xc8, 0xed, 0x99, 0x31, 0x97, 0x98, 0xe7, 0xe3, 0xdd, 0xb8, - 0x62, 0x6a, 0xa2, 0x14, 0x4c, 0xc8, 0x0d, 0xd8, 0x0b, 0xf0, 0x0f, 0x4d, - 0x05, 0xe6, 0xa7, 0x12, 0xf9, 0xdc, 0x75, 0x4a, 0x48, 0xaa, 0x0e, 0x10, - 0x1d, 0x95, 0x2a, 0xb8, 0x45, 0x46, 0x9b, 0x6d, 0x8f, 0xd0, 0x03, 0x47, - 0x14, 0x9d, 0x36, 0x24, 0xd2, 0xd7, 0xa9, 0xf3, 0x73, 0x75, 0x03, 0x3f, - 0xa0, 0xa4, 0x3e, 0xb9, 0x61, 0x40, 0x5a, 0xa8, 0x0d, 0xf1, 0xbd, 0x4e, - 0xd0, 0xda, 0x22, 0x81, 0xfa, 0x53, 0x97, 0x79, 0x97, 0x29, 0xbe, 0xcd, - 0x62, 0x18, 0x05, 0x5c, 0x06, 0x49, 0xc2, 0x14, 0x91, 0x3b, 0x5c, 0x52, - 0x67, 0x6d, 0x02, 0xeb, 0x18, 0x44, 0x86, 0x9c, 0xcd, 0xa5, 0xc2, 0xf3, - 0x32, 0x8f, 0x91, 0x48, 0x69, 0xe0, 0x57, 0xe1, 0x6d, 0x92, 0xf4, 0x97, - 0x61, 0x51, 0x99, 0x55, 0x66, 0x8f, 0x54, 0x49, 0x97, 0x5b, 0xb9, 0x75, - 0xfd, 0x0b, 0x36, 0xe7, 0x3a, 0x35, 0xd7, 0xe0, 0x93, 0xcb, 0xaa, 0x0d, - 0xd2, 0x7e, 0xf7, 0x77, 0x1c, 0xa5, 0xff, 0x52, 0x05, 0x18, 0xb4, 0x8b, - 0x1f, 0xcd, 0xed, 0x3f, 0xed, 0x62, 0x1b, 0x20, 0xbf, 0x73, 0x8a, 0x3c, - 0xd5, 0x2d, 0x9e, 0xbb, 0x04, 0xf1, 0x94, 0xf1, 0xbf, 0x86, 0xbd, 0x2b, - 0xfc, 0xd7, 0xf8, 0x98, 0x3e, 0xc8, 0x6c, 0x2f, 0x24, 0xf8, 0x3e, 0xb8, - 0x11, 0xfe, 0xa2, 0xb3, 0x39, 0x82, 0xb0, 0x18, 0xb7, 0x00, 0xbb, 0x22, - 0x9d, 0xd6, 0xdd, 0x29, 0xa7, 0xdc, 0x4c, 0x89, 0xcd, 0x7c, 0x8e, 0xad, - 0x1d, 0x94, 0x3e, 0xae, 0xd2, 0xc7, 0x55, 0xfa, 0xb8, 0xce, 0xec, 0x8a, - 0x54, 0x10, 0x98, 0x88, 0x9f, 0xcf, 0x2f, 0x1f, 0x48, 0xff, 0x86, 0xbc, - 0xe9, 0x8a, 0x66, 0x8f, 0x05, 0xe6, 0x2e, 0xf3, 0x5b, 0x9f, 0x11, 0x32, - 0x4c, 0xea, 0x9f, 0x3a, 0xed, 0x5b, 0x6f, 0x5b, 0xab, 0xc9, 0x37, 0x83, - 0xb7, 0xe1, 0x0b, 0x3f, 0x1f, 0x3b, 0x90, 0x95, 0xfa, 0x0a, 0x63, 0x8b, - 0xa9, 0xa0, 0x62, 0x71, 0x0a, 0x25, 0x7b, 0x35, 0x00, 0xc3, 0x02, 0x38, - 0x44, 0x6b, 0x36, 0xbd, 0x89, 0x1f, 0x00, 0x86, 0xdc, 0x35, 0x75, 0x23, - 0x20, 0x56, 0x2d, 0x42, 0x6e, 0x03, 0x85, 0x21, 0xc1, 0xe4, 0xde, 0x17, - 0xa6, 0x5a, 0x89, 0x90, 0x9c, 0xc4, 0x6e, 0xc1, 0x50, 0x41, 0x1c, 0x9e, - 0x5a, 0x2c, 0x61, 0x84, 0x39, 0x09, 0xdd, 0xd9, 0x36, 0x35, 0xb1, 0xde, - 0x06, 0x55, 0x2d, 0xcd, 0x4c, 0xc2, 0xd5, 0x9e, 0xaf, 0x54, 0x7b, 0x26, - 0xb3, 0x56, 0x1a, 0x41, 0xad, 0x01, 0x98, 0x6f, 0xfc, 0x47, 0xf6, 0xae, - 0x8e, 0x00, 0xaf, 0x3c, 0xaa, 0x71, 0xcf, 0x52, 0xaa, 0x6d, 0x0a, 0x25, - 0x0d, 0xe0, 0xff, 0x78, 0xd5, 0x4b, 0x42, 0x81, 0x4d, 0x1b, 0xff, 0x82, - 0x88, 0xd4, 0x4e, 0x52, 0xe7, 0x42, 0xe0, 0x78, 0x66, 0x0e, 0xe5, 0x30, - 0x55, 0x7c, 0xb3, 0x8f, 0x98, 0x81, 0xca, 0xfa, 0x81, 0xd7, 0xd1, 0x88, - 0xea, 0xa3, 0xf0, 0xac, 0xd8, 0x8c, 0xe8, 0x80, 0x93, 0xb2, 0x07, 0x39, - 0x5c, 0x30, 0xf6, 0x51, 0xff, 0x9b, 0x0c, 0xe6, 0xb4, 0xb1, 0x78, 0xdd, - 0x86, 0x85, 0xe9, 0x5d, 0x22, 0xb7, 0xcb, 0x34, 0x2b, 0x7a, 0x82, 0xcd, - 0xc0, 0xc5, 0x59, 0xe1, 0x5b, 0x39, 0x59, 0x24, 0xa9, 0xe3, 0xa6, 0xe5, - 0xf0, 0x8d, 0xac, 0x88, 0x2a, 0x9f, 0xf5, 0x0b, 0xca, 0xa7, 0x6f, 0xe0, - 0xec, 0xa0, 0x83, 0x6a, 0x2a, 0xa7, 0x50, 0xa8, 0xae, 0x38, 0xd6, 0x0b, - 0x0a, 0x98, 0x6f, 0x90, 0x6e, 0xe4, 0x93, 0x08, 0x53, 0x5f, 0xef, 0x2e, - 0xa3, 0x35, 0xcc, 0x03, 0x4f, 0x2c, 0xee, 0x3c, 0x89, 0x12, 0xa5, 0xd4, - 0xf0, 0x12, 0x84, 0xe6, 0x7a, 0xa5, 0xf1, 0x33, 0x20, 0xdc, 0xba, 0x52, - 0xd6, 0xbf, 0xd2, 0xd3, 0x2e, 0x1e, 0x88, 0x0b, 0xcb, 0xc3, 0x7a, 0x27, - 0x00, 0xac, 0xeb, 0xa7, 0x42, 0x68, 0x80, 0x27, 0xd8, 0x06, 0x73, 0xb7, - 0x54, 0xbc, 0x8f, 0x23, 0x26, 0x34, 0x20, 0x2b, 0x4e, 0xb8, 0xf1, 0x51, - 0xd4, 0x46, 0x0e, 0xac, 0x5b, 0x1d, 0x4c, 0x54, 0x5c, 0xbb, 0xf4, 0x98, - 0x12, 0x44, 0xab, 0x33, 0x0c, 0x6b, 0x0b, 0xc5, 0x4a, 0xcc, 0xd6, 0x48, - 0x3d, 0x73, 0x4e, 0x4c, 0xd3, 0x45, 0x77, 0x1b, 0x14, 0xf8, 0x31, 0x5d, - 0x5d, 0xaf, 0x15, 0xde, 0x23, 0x86, 0xe3, 0x94, 0xdd, 0xc1, 0x98, 0x8f, - 0xd6, 0xdc, 0x95, 0x3c, 0xc9, 0x7e, 0xb9, 0x51, 0xa6, 0xa9, 0x43, 0x23, - 0x54, 0x36, 0x09, 0xdf, 0x04, 0x25, 0x4a, 0x01, 0x30, 0x5c, 0x4e, 0x2a, - 0xd4, 0x1a, 0x5d, 0x7c, 0xac, 0xe8, 0x30, 0x38, 0x15, 0x01, 0x40, 0xb8, - 0x4f, 0xd3, 0xc1, 0x1f, 0x63, 0x64, 0xe7, 0x38, 0xd8, 0xe8, 0xf4, 0xaa, - 0x5f, 0x26, 0x73, 0x75, 0xb8, 0x6b, 0xe0, 0x75, 0x7f, 0xfd, 0x3f, 0xa5, - 0x9d, 0x06, 0x48, 0xe6, 0xa9, 0x8a, 0x3b, 0x5d, 0xb2, 0xd0, 0x05, 0xc9, - 0x00, 0x08, 0x18, 0x42, 0x45, 0x8e, 0xb6, 0x22, 0x04, 0x72, 0x6a, 0xe0, - 0x38, 0xa3, 0xc9, 0x50, 0x59, 0xd3, 0x56, 0xf0, 0xe9, 0x35, 0x16, 0x57, - 0xc1, 0x4b, 0x0c, 0x19, 0x00, 0x31, 0x80, 0xbc, 0xa8, 0x7f, 0x9f, 0xa6, - 0x03, 0x7c, 0x95, 0xb3, 0x7d, 0x3c, 0xe3, 0x2b, 0xce, 0x46, 0xc3, 0xca, - 0x0e, 0xfd, 0x28, 0xff, 0x86, 0xa9, 0xbf, 0xfe, 0x51, 0x08, 0xf8, 0x2d, - 0xde, 0xe0, 0x01, 0x68, 0x64, 0x0d, 0xbd, 0x30, 0x00, 0x87, 0xdd, 0x78, - 0xf3, 0x7c, 0x1b, 0x59, 0x19, 0xa1, 0xc3, 0xdd, 0x64, 0x8f, 0xee, 0x8d, - 0xf0, 0xeb, 0x56, 0x53, 0xbd, 0x7f, 0xea, 0xeb, 0x68, 0x84, 0xd2, 0x04, - 0xfc, 0x26, 0x08, 0x3d, 0x8e, 0xc2, 0x2c, 0xf9, 0x11, 0x42, 0x38, 0x06, - 0x3d, 0x58, 0x11, 0x21, 0x39, 0x10, 0xc2, 0xa8, 0x7e, 0x82, 0xf3, 0xce, - 0xac, 0x55, 0xc8, 0xf4, 0x5b, 0x75, 0xfc, 0x0d, 0x37, 0xa6, 0xf2, 0x79, - 0xc1, 0xb3, 0x3b, 0x19, 0x9a, 0xf2, 0x6f, 0xe3, 0x95, 0x97, 0xb0, 0x32, - 0xd5, 0xc2, 0xc7, 0x51, 0xd9, 0x87, 0xb1, 0xd9, 0x44, 0x25, 0x02, 0x28, - 0x35, 0x3e, 0x97, 0xbb, 0x8d, 0x91, 0x50, 0xbc, 0x4a, 0xbd, 0xab, 0xac, - 0x08, 0xc3, 0x3a, 0x8a, 0x4d, 0x22, 0xdf, 0x6f, 0xe0, 0x8e, 0x81, 0x37, - 0xdc, 0xb3, 0x57, 0x63, 0xbe, 0xee, 0xde, 0x7d, 0x27, 0xe6, 0xe8, 0x48, - 0xc6, 0x70, 0xe5, 0x8a, 0xdb, 0x19, 0xe5, 0x94, 0x87, 0xd9, 0xb7, 0xd8, - 0xf6, 0xdd, 0xc0, 0xbc, 0x3d, 0xf9, 0xcb, 0x2e, 0xb7, 0xe2, 0x2a, 0x04, - 0xc8, 0x60, 0xeb, 0xbc, 0x0f, 0xb7, 0x10, 0xdf, 0xb1, 0x06, 0x50, 0xd7, - 0x1b, 0x97, 0xa2, 0x8c, 0x63, 0xcf, 0xa7, 0x3a, 0xf0, 0xf1, 0xea, 0x8d, - 0xec, 0x9b, 0x4c, 0x2f, 0xde, 0x5f, 0xda, 0x15, 0xd1, 0x21, 0xdb, 0x15, - 0xa9, 0xa7, 0x7a, 0x60, 0xa8, 0xf5, 0xf1, 0x40, 0xee, 0x72, 0xe4, 0xea, - 0xe6, 0xa6, 0x75, 0x4d, 0x35, 0xb8, 0x61, 0x53, 0xa8, 0x5b, 0xdb, 0x23, - 0xde, 0x2c, 0xe2, 0x5f, 0x26, 0x0b, 0x77, 0xf3, 0x38, 0x02, 0xa0, 0xe4, - 0x6c, 0x8c, 0xa6, 0x2e, 0xac, 0x23, 0x7c, 0xdd, 0x3c, 0x11, 0xb0, 0xfc, - 0x36, 0x8e, 0xaf, 0x30, 0xb2, 0x39, 0x6c, 0x5b, 0x7b, 0xf8, 0x4b, 0x8a, - 0x4f, 0x41, 0x78, 0x89, 0xd5, 0xc8, 0x23, 0x3e, 0xda, 0xcb, 0x19, 0x83, - 0xa7, 0x77, 0x30, 0x56, 0x49, 0xbd, 0x47, 0xba, 0x45, 0xc4, 0x64, 0xdf, - 0xeb, 0xab, 0x4e, 0xa2, 0x7d, 0x4c, 0xc5, 0xfb, 0x7c, 0x81, 0xc5, 0x56, - 0xb7, 0xbd, 0x58, 0xab, 0xd6, 0x56, 0x7d, 0x1b, 0x29, 0x0a, 0xeb, 0xe6, - 0x37, 0x51, 0xb7, 0x51, 0xd4, 0x71, 0xa1, 0xe8, 0xa8, 0x1b, 0x52, 0xf7, - 0x88, 0x3a, 0x02, 0x76, 0x69, 0x1c, 0x56, 0xd0, 0x03, 0x74, 0xe5, 0xff, - 0x73, 0x70, 0x0e, 0x30, 0x3a, 0x35, 0x1f, 0x7b, 0xfa, 0x38, 0xb2, 0xdb, - 0x9d, 0xf2, 0x09, 0x23, 0x1c, 0x9e, 0x90, 0x87, 0x75, 0x94, 0x6c, 0x0e, - 0xaf, 0xd1, 0x5d, 0xed, 0x95, 0xbe, 0x5e, 0x51, 0xaa, 0x3f, 0xac, 0x2a, - 0x14, 0xf9, 0xdf, 0xbf, 0x6c, 0x01, 0x10, 0x16, 0x74, 0x83, 0xda, 0x1e, - 0x50, 0x53, 0xe8, 0xaf, 0xbd, 0x91, 0x8b, 0xe1, 0x14, 0x18, 0xd3, 0xca, - 0x0b, 0x01, 0xa0, 0x99, 0xd3, 0x8c, 0xd0, 0x87, 0x35, 0x27, 0x39, 0xc0, - 0xb8, 0x30, 0x34, 0x21, 0x0e, 0x35, 0x13, 0x0e, 0x39, 0xef, 0x8e, 0x49, - 0xe0, 0xce, 0x77, 0x9a, 0x73, 0xfe, 0x83, 0xd5, 0x74, 0x95, 0x69, 0x36, - 0x13, 0xe2, 0x67, 0xef, 0x27, 0x41, 0x7c, 0xcd, 0x25, 0x76, 0xa5, 0x6c, - 0x62, 0xf0, 0x80, 0xa1, 0x16, 0x31, 0xe5, 0x5a, 0x6f, 0x6a, 0x4b, 0x3c, - 0x3f, 0x88, 0xb9, 0x4d, 0xd7, 0x2b, 0xd9, 0xca, 0x09, 0x50, 0x30, 0x75, - 0x18, 0x3c, 0x68, 0x7a, 0x46, 0x98, 0xb0, 0x55, 0x45, 0xe1, 0x02, 0xf0, - 0xb5, 0x60, 0x20, 0x34, 0x7d, 0x41, 0x54, 0x19, 0x11, 0x3c, 0x8e, 0xdb, - 0x65, 0xb4, 0xb1, 0xd9, 0x94, 0xcb, 0xcd, 0x9e, 0xb7, 0xf0, 0x8a, 0x31, - 0x6c, 0xba, 0xf9, 0x41, 0x1c, 0x90, 0xfe, 0xf9, 0x08, 0x0e, 0xe0, 0xad, - 0x47, 0x70, 0xb7, 0x49, 0x12, 0x91, 0x64, 0xd2, 0x2b, 0x9e, 0x2a, 0xdf, - 0x30, 0x12, 0xab, 0x25, 0xd7, 0x19, 0x52, 0x23, 0x4c, 0x05, 0x5b, 0x5a, - 0xb1, 0x4f, 0xd3, 0x3c, 0xc2, 0xc2, 0x79, 0xbe, 0x6b, 0xaa, 0xa1, 0xe9, - 0xaa, 0xce, 0x96, 0x5f, 0x51, 0xbc, 0x9f, 0x09, 0x4c, 0xb7, 0x82, 0xe1, - 0x64, 0xd3, 0xbf, 0x4a, 0x08, 0x60, 0x92, 0x1b, 0xc6, 0x34, 0xdb, 0xba, - 0xd6, 0xc7, 0x6e, 0xe9, 0xb3, 0xa0, 0xdc, 0x07, 0xa6, 0x6c, 0x3d, 0x33, - 0x24, 0x47, 0x2b, 0x70, 0x0f, 0x8c, 0xd3, 0xbc, 0x24, 0x50, 0x96, 0xfd, - 0x00, 0x06, 0xc0, 0xe5, 0x8c, 0xa7, 0x30, 0xf5, 0x5f, 0xad, 0xae, 0x1a, - 0x0a, 0x3d, 0x38, 0x5d, 0x01, 0x1f, 0xf6, 0xea, 0xc7, 0xe3, 0x44, 0xf4, - 0x73, 0x34, 0x37, 0xdb, 0x70, 0x34, 0x0c, 0xa3, 0xee, 0x7f, 0x95, 0xec, - 0x45, 0x6d, 0x9d, 0x39, 0xf1, 0xe2, 0x62, 0x52, 0xeb, 0x59, 0xb1, 0xaa, - 0xec, 0x10, 0xfd, 0xf9, 0x70, 0xe3, 0x16, 0xba, 0xab, 0x00, 0x36, 0xfe, - 0xef, 0x75, 0xf3, 0x09, 0x70, 0x77, 0x57, 0x4b, 0xb5, 0x96, 0x82, 0x48, - 0x11, 0xb8, 0xe5, 0xf4, 0x4d, 0xeb, 0x47, 0x98, 0xdf, 0xfa, 0xa0, 0x15, - 0xaf, 0x54, 0xa1, 0xdd, 0x2c, 0x84, 0xe6, 0x66, 0x9e, 0xce, 0x1b, 0x24, - 0x39, 0xf3, 0x6b, 0xba, 0xd7, 0x90, 0x4c, 0x93, 0x59, 0x56, 0xc3, 0x81, - 0x74, 0x16, 0x2e, 0xb9, 0xa7, 0xac, 0x68, 0xf0, 0xb4, 0x42, 0xc0, 0x43, - 0x45, 0x0b, 0xff, 0x06, 0x9f, 0xcb, 0x55, 0xcc, 0x34, 0x6d, 0xf4, 0x5f, - 0xff, 0x57, 0x79, 0xd8, 0x95, 0x32, 0x9f, 0x78, 0x00, 0x28, 0xaa, 0x3d, - 0x4a, 0x77, 0xf7, 0x9e, 0x82, 0x12, 0x48, 0x6f, 0x14, 0x88, 0x38, 0xca, - 0x8c, 0xb5, 0xa6, 0x24, 0x1b, 0xce, 0x8b, 0x0a, 0x95, 0x84, 0x5b, 0x05, - 0x30, 0xd3, 0xb7, 0xef, 0xa9, 0xd8, 0x08, 0xc4, 0xd9, 0x40, 0x24, 0xdc, - 0x43, 0xc0, 0xee, 0x77, 0xc5, 0x37, 0x3c, 0x75, 0x42, 0x7c, 0x5a, 0xe7, - 0x4c, 0x47, 0xd4, 0xe7, 0xa1, 0xf6, 0x8a, 0xa5, 0x21, 0x0d, 0xf5, 0xee, - 0xd7, 0xc8, 0xc7, 0xa6, 0x00, 0xd1, 0xab, 0x7e, 0xed, 0xe1, 0x37, 0xba, - 0xc5, 0x2f, 0x3d, 0xfe, 0xb6, 0x45, 0x8c, 0x25, 0xad, 0xdd, 0x42, 0xd2, - 0xda, 0x8d, 0x92, 0xd6, 0x6e, 0xb5, 0xb1, 0x52, 0xd3, 0xbf, 0x01, 0x3e, - 0x00, 0xe9, 0x8b, 0xf5, 0xed, 0x56, 0x78, 0x81, 0x86, 0x09, 0x28, 0xae, - 0x1b, 0x43, 0x94, 0xa1, 0x09, 0xb7, 0xff, 0x79, 0x70, 0xbf, 0x16, 0x50, - 0x30, 0xec, 0xd9, 0x18, 0x12, 0x3d, 0x4e, 0xcd, 0x83, 0x17, 0x24, 0x54, - 0x80, 0xb7, 0xd2, 0xcd, 0xf7, 0x18, 0x56, 0xdf, 0xf6, 0xff, 0x1d, 0xde, - 0xbf, 0xe9, 0x7b, 0xf9, 0xd2, 0xff, 0x20, 0xa3, 0xbc, 0xed, 0xd1, 0xa2, - 0xc6, 0x88, 0xdc, 0x0a, 0x66, 0x49, 0x06, 0x92, 0xa9, 0x30, 0x28, 0x38, - 0x19, 0x66, 0xc4, 0xb2, 0xb8, 0x53, 0x42, 0x3f, 0x00, 0xfe, 0xd7, 0x7b, - 0x26, 0xa0, 0xb6, 0x43, 0xf0, 0xec, 0x18, 0x2d, 0x10, 0x4b, 0x33, 0x32, - 0xd3, 0xcf, 0x70, 0x01, 0x95, 0xad, 0x1c, 0x3f, 0x01, 0x1d, 0x95, 0x25, - 0x5c, 0x13, 0xd1, 0xf3, 0xe6, 0x28, 0xdd, 0xb6, 0xe6, 0xd0, 0xd6, 0x4a, - 0x44, 0x17, 0xc4, 0xc7, 0xad, 0x50, 0x55, 0x09, 0x60, 0x76, 0xf8, 0x39, - 0x96, 0xf8, 0x15, 0x78, 0xad, 0x38, 0xd7, 0x25, 0xf9, 0xc5, 0x09, 0x39, - 0xa5, 0xfc, 0x36, 0xd0, 0xee, 0xcf, 0x07, 0x43, 0x8d, 0x37, 0xd7, 0x80, - 0x45, 0x8b, 0xea, 0xb9, 0x2d, 0xcf, 0x09, 0x5d, 0x0b, 0xaf, 0xe2, 0x25, - 0x36, 0xa1, 0x3c, 0xd7, 0xe5, 0x79, 0x7a, 0x39, 0x3b, 0x3f, 0x67, 0xe7, - 0xf4, 0x94, 0xdb, 0x1f, 0x25, 0xe6, 0xc7, 0x49, 0xf9, 0x89, 0x84, 0xfc, - 0x84, 0xaf, 0x1f, 0x3a, 0xfb, 0x45, 0x9b, 0x9d, 0x73, 0xf1, 0x0b, 0xf4, - 0xfe, 0x4f, 0xca, 0x0c, 0x35, 0x83, 0xcd, 0x9d, 0x48, 0xee, 0x4a, 0x68, - 0xcd, 0x3e, 0xe7, 0x1b, 0x7b, 0x42, 0xc5, 0x11, 0xef, 0xec, 0x89, 0x18, - 0xc8, 0x18, 0x87, 0x29, 0x84, 0xe1, 0x7e, 0x8c, 0x25, 0x24, 0xa0, 0xbd, - 0x02, 0xc8, 0xeb, 0x78, 0x91, 0x57, 0xf5, 0xa2, 0xea, 0xc7, 0x15, 0x34, - 0x66, 0x05, 0x8d, 0xd1, 0xfd, 0x89, 0xf2, 0xeb, 0xdc, 0x7d, 0x7e, 0xcb, - 0xa4, 0xa1, 0xf2, 0xa0, 0x4a, 0x46, 0x18, 0x93, 0x13, 0xf4, 0x3b, 0x85, - 0x19, 0xf9, 0xfc, 0xed, 0xb2, 0xf9, 0x9b, 0xec, 0x47, 0x20, 0xb4, 0x71, - 0x03, 0xd8, 0xe4, 0xf4, 0xed, 0xe2, 0xae, 0x63, 0x21, 0x87, 0xd5, 0x79, - 0xb2, 0x44, 0xa5, 0x40, 0x4c, 0x49, 0x2a, 0x1d, 0x14, 0xa4, 0xbb, 0x65, - 0xb7, 0x33, 0x80, 0x5d, 0x80, 0x1f, 0xa2, 0xd1, 0x4c, 0xd9, 0x66, 0x20, - 0x25, 0x5f, 0xe5, 0x34, 0xa9, 0xf1, 0x4c, 0xcf, 0xa7, 0xba, 0x55, 0x05, - 0x76, 0x52, 0xdb, 0x35, 0x8b, 0x69, 0x6a, 0xa2, 0x62, 0x1b, 0x11, 0x71, - 0x6f, 0x21, 0x33, 0xf7, 0x16, 0xd2, 0x50, 0x6e, 0x73, 0x89, 0xd9, 0x08, - 0x48, 0x31, 0x13, 0x30, 0xd8, 0x32, 0x34, 0x57, 0x88, 0xb8, 0x5c, 0x2e, - 0x9c, 0xfc, 0x00, 0xce, 0x39, 0xfc, 0x5d, 0x62, 0xa3, 0x54, 0xa1, 0x87, - 0x85, 0x72, 0x89, 0x71, 0xa1, 0x64, 0x8b, 0x2a, 0x6a, 0x51, 0xe5, 0x7e, - 0x0f, 0x8f, 0x66, 0x81, 0x24, 0x62, 0xad, 0x54, 0x33, 0x1c, 0x17, 0x2f, - 0x6e, 0xe6, 0x92, 0x7d, 0xa2, 0x44, 0x2f, 0x2e, 0xd9, 0x8b, 0x8b, 0x7a, - 0xb1, 0xf6, 0x24, 0x90, 0x43, 0xa0, 0xbd, 0x46, 0x93, 0x48, 0x40, 0x78, - 0x28, 0xf1, 0xdb, 0x94, 0x5f, 0x27, 0x3f, 0x60, 0x93, 0xaf, 0xc9, 0x96, - 0xb1, 0x1f, 0x00, 0xd6, 0x98, 0x3f, 0xab, 0xc3, 0x51, 0x5e, 0x56, 0x35, - 0xb8, 0xaf, 0x74, 0x89, 0x64, 0xb7, 0x73, 0x47, 0xb3, 0xb0, 0x3c, 0x00, - 0xcd, 0xba, 0x04, 0x76, 0x1c, 0x12, 0xf3, 0x0c, 0x9d, 0xb3, 0x9f, 0xd1, - 0x3e, 0xe5, 0xea, 0xc4, 0x91, 0x1e, 0xd3, 0xcc, 0xe3, 0x07, 0x69, 0x87, - 0xa8, 0x86, 0x94, 0x71, 0x1b, 0xec, 0xb6, 0x82, 0xc7, 0x53, 0xcb, 0x9a, - 0x59, 0xf2, 0xb5, 0xaa, 0x99, 0xc3, 0x73, 0x45, 0x74, 0xe0, 0xea, 0x38, - 0xa3, 0x36, 0x4e, 0x56, 0xc1, 0x59, 0xbe, 0x74, 0xc8, 0x54, 0x51, 0x2b, - 0xa8, 0xb3, 0xd9, 0x05, 0xcb, 0x98, 0x08, 0x3f, 0x01, 0xab, 0xc4, 0x46, - 0xb1, 0x71, 0x15, 0xe4, 0xae, 0x6e, 0x3e, 0xd3, 0x70, 0xae, 0x2a, 0x62, - 0x1c, 0x6e, 0x4c, 0x67, 0xb4, 0xa5, 0x13, 0xe3, 0xa6, 0xbe, 0xf0, 0x9f, - 0xa7, 0xb6, 0x32, 0xb5, 0x58, 0x06, 0x2c, 0x8b, 0x58, 0x0b, 0x2b, 0x91, - 0xfd, 0x51, 0x88, 0x5e, 0xdf, 0x2e, 0xe2, 0xb7, 0x8e, 0xc0, 0xe6, 0xf7, - 0x57, 0x2d, 0x3c, 0x8c, 0x5b, 0x6f, 0x95, 0xa0, 0xd4, 0x27, 0xdf, 0x8a, - 0x67, 0x96, 0x12, 0x33, 0x4b, 0x89, 0x19, 0xa5, 0x58, 0xe0, 0x1c, 0x40, - 0x0d, 0x80, 0x9c, 0xc7, 0xf5, 0xdf, 0x8c, 0x10, 0xb7, 0x82, 0xd1, 0xac, - 0x1a, 0xda, 0x5c, 0x95, 0xb6, 0x7b, 0x2a, 0xda, 0x3e, 0x95, 0x6e, 0xff, - 0x54, 0xee, 0x12, 0xc7, 0x73, 0x93, 0xf0, 0xd0, 0x9b, 0x85, 0x87, 0xde, - 0x42, 0x78, 0x28, 0x00, 0xa2, 0xf0, 0x24, 0x5a, 0xee, 0x3a, 0x51, 0x2c, - 0xbe, 0xcf, 0xbf, 0x49, 0x62, 0x28, 0x96, 0x06, 0xa6, 0x2b, 0x60, 0xae, - 0xc0, 0xa0, 0xe0, 0x15, 0x31, 0xa0, 0x02, 0xd7, 0x19, 0x25, 0x79, 0x17, - 0xc6, 0x30, 0x65, 0x7f, 0xe1, 0x7f, 0xf0, 0x21, 0x13, 0x47, 0x3b, 0xae, - 0xd8, 0x67, 0x42, 0x40, 0x3b, 0xcd, 0x6f, 0xa5, 0x62, 0xfe, 0x9e, 0x55, - 0xdd, 0x46, 0x6a, 0xee, 0x95, 0xd0, 0xb0, 0x24, 0xc0, 0x5c, 0x54, 0xc4, - 0x44, 0xcd, 0x71, 0xdc, 0x57, 0x52, 0xf3, 0x81, 0x20, 0x8b, 0xbe, 0xac, - 0xd7, 0x13, 0xff, 0x2a, 0xb8, 0xe8, 0xc6, 0xa5, 0xcc, 0x0f, 0x3c, 0xb6, - 0x60, 0x90, 0x81, 0x19, 0xaa, 0x88, 0x37, 0x91, 0x52, 0x54, 0x66, 0xaf, - 0x0b, 0x3c, 0xd1, 0x16, 0xc9, 0xd2, 0x94, 0x29, 0x3f, 0x47, 0x84, 0x7a, - 0x68, 0xe3, 0x04, 0x50, 0x94, 0xaf, 0x72, 0xec, 0x65, 0x13, 0xf8, 0x81, - 0x70, 0xa7, 0x1b, 0xc6, 0x08, 0x86, 0xbb, 0x91, 0xa1, 0x6a, 0x4e, 0xc4, - 0xe2, 0x20, 0x9c, 0x7c, 0xf8, 0xd0, 0x28, 0x95, 0xda, 0xf6, 0x35, 0x51, - 0xba, 0xa4, 0x91, 0xa2, 0x8a, 0xe7, 0x83, 0x44, 0x57, 0x19, 0x9c, 0x82, - 0x01, 0x9c, 0xae, 0x8a, 0x9e, 0xbb, 0xdb, 0xd7, 0xe6, 0x53, 0x11, 0x80, - 0xa7, 0x23, 0xad, 0x68, 0x52, 0x84, 0x51, 0xe7, 0x5b, 0x14, 0x14, 0xd3, - 0x0e, 0xb5, 0x91, 0xca, 0x7b, 0x45, 0x73, 0x89, 0x46, 0xb9, 0x8d, 0xed, - 0x34, 0xb3, 0x12, 0x12, 0xde, 0x24, 0xb4, 0xea, 0xfb, 0x83, 0x27, 0xc3, - 0x06, 0x0e, 0x60, 0xba, 0x33, 0x07, 0xe3, 0xf7, 0x9a, 0xb5, 0x05, 0x36, - 0x78, 0x96, 0xe4, 0x36, 0xae, 0x3a, 0x0f, 0x07, 0xe2, 0x31, 0x50, 0x81, - 0x2e, 0x04, 0xca, 0x84, 0x06, 0xdc, 0x87, 0xc9, 0x60, 0xcc, 0x5c, 0x8f, - 0x79, 0x2e, 0x5c, 0x28, 0x10, 0x7d, 0x55, 0x40, 0x3a, 0x95, 0x20, 0x98, - 0x12, 0x65, 0xa6, 0xf6, 0x23, 0x8a, 0x03, 0x5c, 0xb5, 0xa7, 0xf5, 0xf0, - 0x82, 0x74, 0x2d, 0x6d, 0xb7, 0xd1, 0xd7, 0x82, 0xc0, 0xba, 0xe5, 0xad, - 0xe8, 0x9e, 0xd1, 0xd6, 0x3d, 0xb1, 0xbd, 0xdc, 0xc5, 0x25, 0x25, 0x94, - 0x7e, 0xee, 0x16, 0xb6, 0x28, 0xe8, 0x92, 0xf9, 0x56, 0x32, 0x35, 0xfa, - 0xd1, 0x54, 0xb6, 0xbf, 0x23, 0x61, 0xdf, 0x91, 0xac, 0x6f, 0x96, 0xe9, - 0xec, 0xc4, 0x2c, 0x11, 0xd4, 0x32, 0xd8, 0x98, 0x6d, 0x44, 0x07, 0x69, - 0xda, 0x9b, 0x9b, 0xee, 0x66, 0x6a, 0x6e, 0x66, 0x44, 0x4b, 0xae, 0xfa, - 0x0b, 0x39, 0x4b, 0x68, 0x64, 0x5d, 0xc7, 0x18, 0xb4, 0x2d, 0x31, 0x77, - 0x0a, 0xda, 0xe1, 0xd9, 0x22, 0xf1, 0x9e, 0x4c, 0x40, 0xeb, 0x77, 0x62, - 0x2f, 0xdf, 0xeb, 0x82, 0x30, 0xca, 0xff, 0x78, 0xe0, 0x85, 0xb6, 0x62, - 0x04, 0xb3, 0x3c, 0x8f, 0x48, 0x71, 0xd1, 0xcb, 0x9d, 0x3c, 0x40, 0x5c, - 0x80, 0x00, 0xef, 0x36, 0xf6, 0x69, 0x29, 0x82, 0xc7, 0x79, 0xf5, 0x11, - 0x48, 0xa5, 0x56, 0x2e, 0x54, 0x18, 0x59, 0x9e, 0x56, 0x03, 0x46, 0xa7, - 0xa9, 0x28, 0x9b, 0xfa, 0xe1, 0xe1, 0x6c, 0xcb, 0xb3, 0x82, 0xb2, 0x51, - 0xde, 0x18, 0x4c, 0x17, 0xe7, 0xdf, 0xda, 0x1a, 0x11, 0x0f, 0x05, 0xd5, - 0x67, 0xf7, 0x22, 0x15, 0x6d, 0x9b, 0xc4, 0xdf, 0x8e, 0x70, 0xc5, 0xec, - 0xbe, 0x2d, 0xbd, 0x15, 0x0c, 0x2b, 0xe7, 0x75, 0xf3, 0x4e, 0x82, 0x6d, - 0x88, 0x7d, 0x93, 0x8d, 0xe2, 0x6c, 0x0b, 0xff, 0xc2, 0xd3, 0xd9, 0xa8, - 0x9b, 0x24, 0x58, 0x76, 0x94, 0x9b, 0xa8, 0xd8, 0x4f, 0xeb, 0x86, 0xbb, - 0x51, 0x6d, 0x83, 0x0e, 0xa4, 0x0d, 0x9d, 0x35, 0x13, 0x4a, 0xc7, 0x09, - 0x06, 0x4b, 0x9a, 0xda, 0xc4, 0x55, 0x10, 0xd9, 0x85, 0xde, 0x11, 0x9d, - 0x9f, 0x00, 0xc2, 0x78, 0xf1, 0x8c, 0x1c, 0x06, 0xcb, 0x8b, 0x27, 0xf2, - 0x5b, 0x00, 0x5a, 0xfd, 0xaa, 0x45, 0xfe, 0xba, 0x41, 0xfe, 0x3a, 0x96, - 0x5f, 0x84, 0xa7, 0x0d, 0x9f, 0x25, 0xd3, 0xde, 0x20, 0x99, 0x56, 0x8a, - 0xbc, 0x94, 0xa3, 0x2d, 0x6f, 0x0b, 0x81, 0xe2, 0xac, 0xc5, 0xd8, 0xdf, - 0xf5, 0xf5, 0x3e, 0xe9, 0xcb, 0x3d, 0x76, 0xd7, 0x01, 0xb7, 0x77, 0x62, - 0xe4, 0xda, 0x70, 0xfa, 0x6b, 0x42, 0x7b, 0x3c, 0xbc, 0x6d, 0xc6, 0xff, - 0x12, 0x11, 0x2c, 0x63, 0x43, 0x2a, 0x21, 0xb2, 0x34, 0xdb, 0x6e, 0xfd, - 0xd6, 0x7f, 0xb8, 0xa1, 0x7e, 0xdf, 0x6a, 0x6a, 0x87, 0xcc, 0xcb, 0x6b, - 0x27, 0x1f, 0x0b, 0x0a, 0x4d, 0xa6, 0xdb, 0x70, 0x52, 0x4a, 0x2c, 0x81, - 0x97, 0x8e, 0x96, 0x4d, 0x5f, 0xcd, 0xbf, 0x7f, 0x39, 0x2f, 0xd6, 0xa5, - 0x9c, 0xba, 0xaf, 0x00, 0x8a, 0x84, 0x08, 0x8d, 0x0e, 0x00, 0xa1, 0x63, - 0xb7, 0x62, 0x37, 0x44, 0x72, 0x54, 0x21, 0x3f, 0x8e, 0xfc, 0xa3, 0xa8, - 0x3f, 0x00, 0x8d, 0x91, 0x9b, 0xaf, 0xb9, 0xaa, 0xb9, 0x40, 0x21, 0x20, - 0x53, 0x3b, 0x2a, 0x0c, 0xfb, 0xc7, 0x90, 0x26, 0x3d, 0xdb, 0x20, 0x8e, - 0x87, 0xa5, 0xbb, 0x82, 0xf8, 0x79, 0xe8, 0xa0, 0x5e, 0x04, 0xc4, 0x19, - 0x03, 0xb8, 0xf9, 0x02, 0xf9, 0x5b, 0x5b, 0xf0, 0xd7, 0x21, 0x97, 0xb1, - 0xfa, 0xf8, 0xb8, 0x02, 0x4d, 0xa2, 0x15, 0x50, 0xa4, 0x7a, 0x05, 0x92, - 0xa0, 0x12, 0x20, 0xc2, 0x12, 0xa1, 0xf1, 0xa5, 0x8e, 0xa3, 0x0f, 0xfd, - 0x4b, 0x8c, 0x70, 0x85, 0x1a, 0x14, 0xb7, 0x31, 0xa3, 0xd1, 0xd9, 0x03, - 0x4c, 0x97, 0x48, 0x5c, 0x43, 0x79, 0xf9, 0x6b, 0x3e, 0x9e, 0xdb, 0xd6, - 0xce, 0x24, 0x0d, 0x1d, 0xc2, 0x24, 0x0e, 0x19, 0x81, 0xce, 0xce, 0x25, - 0xdc, 0x9d, 0x3c, 0x6e, 0x71, 0xe0, 0xb8, 0x4d, 0x12, 0x7b, 0x7c, 0xe3, - 0xb8, 0x13, 0xf7, 0x61, 0x26, 0x14, 0x56, 0x8c, 0xf8, 0x50, 0xc2, 0x24, - 0x8b, 0xe2, 0xab, 0x17, 0x1c, 0x75, 0x31, 0x8c, 0xdc, 0xd3, 0x0b, 0xb2, - 0x47, 0x00, 0x62, 0x2c, 0xb8, 0x36, 0xb8, 0xd2, 0x7a, 0x77, 0xa3, 0x98, - 0xf6, 0x68, 0x14, 0xd3, 0xce, 0xb6, 0x30, 0xbd, 0xbc, 0x00, 0xda, 0xe2, - 0xe8, 0x64, 0xcb, 0xb3, 0x13, 0xa0, 0x39, 0xed, 0xe6, 0xce, 0xf2, 0x2d, - 0x13, 0x46, 0x6e, 0x54, 0xf0, 0x04, 0xe6, 0xcd, 0xd4, 0x7b, 0x65, 0xb7, - 0xc5, 0xd2, 0x6e, 0xcb, 0xb5, 0xdd, 0xa6, 0xc5, 0xdd, 0x66, 0x39, 0xf0, - 0x15, 0xd4, 0xe5, 0x91, 0xf6, 0x82, 0x5b, 0x71, 0x39, 0xc2, 0xf4, 0xda, - 0x1a, 0x38, 0x02, 0x77, 0x9f, 0x2c, 0xdc, 0xe7, 0x35, 0xcb, 0x29, 0xb6, - 0x05, 0x20, 0x9a, 0x35, 0xe4, 0x3e, 0x4c, 0xa3, 0xbd, 0x6c, 0xfc, 0xbc, - 0x1f, 0x5f, 0x3e, 0x62, 0x02, 0x56, 0x54, 0xbb, 0x6b, 0xbd, 0xec, 0x51, - 0xeb, 0x65, 0xcf, 0x50, 0x62, 0x12, 0x06, 0x62, 0xa2, 0x7d, 0x4c, 0x29, - 0x20, 0xd7, 0x3c, 0xa6, 0xc4, 0xc0, 0xe8, 0x2f, 0xe7, 0x1e, 0x5f, 0xce, - 0x5d, 0x5f, 0xfe, 0xc6, 0x97, 0xbf, 0xf9, 0x45, 0xe5, 0xa6, 0x51, 0x3f, - 0xe4, 0x01, 0xdf, 0x52, 0x1e, 0x30, 0x91, 0x22, 0xfc, 0x51, 0x18, 0x3f, - 0x11, 0xc6, 0x4f, 0x86, 0xf1, 0xc3, 0x30, 0xce, 0x8b, 0xf2, 0x01, 0x41, - 0x79, 0x31, 0x4f, 0x88, 0x48, 0xc6, 0x0c, 0x90, 0xa7, 0x3f, 0xf0, 0xbe, - 0x0e, 0xf7, 0x2f, 0x71, 0x48, 0xb2, 0x9d, 0x93, 0x03, 0xf0, 0x99, 0x1c, - 0x80, 0xe2, 0x22, 0x60, 0x5c, 0xe7, 0x14, 0x21, 0x4d, 0x51, 0x34, 0x40, - 0x2a, 0x9a, 0x8a, 0x98, 0x10, 0x0e, 0x94, 0x5e, 0x7d, 0x6f, 0x16, 0xcf, - 0x6b, 0xa0, 0x40, 0x24, 0xa0, 0x97, 0x80, 0x1e, 0x52, 0x2d, 0x7d, 0xc5, - 0x47, 0xd6, 0x37, 0xa4, 0x4f, 0x71, 0x61, 0xea, 0xa2, 0x38, 0xbf, 0x54, - 0x38, 0x34, 0x6d, 0x51, 0xbd, 0x9f, 0x7c, 0x33, 0x88, 0x0b, 0x48, 0xdf, - 0x56, 0x29, 0x6b, 0x27, 0xae, 0x9d, 0x99, 0x2e, 0x8b, 0xcb, 0x83, 0x49, - 0x87, 0xf3, 0xdd, 0x39, 0x06, 0x3a, 0x13, 0x4a, 0x4a, 0x86, 0x91, 0x16, - 0x20, 0xc4, 0xfe, 0x3e, 0xc5, 0x35, 0x07, 0x84, 0x12, 0xd7, 0x3f, 0x8b, - 0xed, 0x37, 0xd2, 0xfa, 0x82, 0x18, 0xfd, 0x92, 0xc0, 0xae, 0xd5, 0xa2, - 0xcf, 0xf9, 0x25, 0x7a, 0x19, 0xf8, 0xc7, 0x7d, 0x03, 0x4c, 0xed, 0x3e, - 0xce, 0x25, 0x82, 0xe0, 0x92, 0xf2, 0x8c, 0x69, 0xe2, 0x8c, 0x33, 0xbf, - 0x53, 0xbb, 0xb1, 0xd3, 0x9b, 0xb1, 0x6a, 0xde, 0xd3, 0x07, 0xfe, 0xd6, - 0x1c, 0x91, 0xce, 0x4e, 0xb3, 0xca, 0xed, 0xa4, 0x28, 0x19, 0x75, 0x97, - 0x8a, 0x19, 0x15, 0x58, 0x90, 0xe9, 0x71, 0xd5, 0xcb, 0x32, 0x00, 0x86, - 0xb9, 0xaa, 0xe0, 0xa8, 0xac, 0x4f, 0x86, 0xe6, 0x1a, 0x40, 0x2d, 0x9a, - 0x80, 0xfc, 0x02, 0x87, 0x58, 0xbc, 0xbe, 0x84, 0xd1, 0x8c, 0x2a, 0x56, - 0x7d, 0x48, 0xcf, 0x1f, 0xcc, 0xd3, 0xeb, 0x79, 0x30, 0xf8, 0x9b, 0xc5, - 0x01, 0xb2, 0xa9, 0xe9, 0x48, 0x43, 0xd1, 0x69, 0x85, 0x87, 0x00, 0x4c, - 0x59, 0x5d, 0x23, 0x45, 0x8c, 0xab, 0xa5, 0x3a, 0x02, 0xda, 0xf1, 0x1a, - 0x8e, 0xb1, 0x86, 0xa8, 0xab, 0x0b, 0x4d, 0x07, 0x38, 0xce, 0xdb, 0xa2, - 0xdd, 0x9d, 0xd0, 0xb4, 0x82, 0xc9, 0xaa, 0x02, 0x28, 0x72, 0xa0, 0xa9, - 0x0f, 0x5e, 0x37, 0xc6, 0xd9, 0x03, 0x94, 0x99, 0xc4, 0x21, 0x5a, 0xc5, - 0x53, 0x3b, 0x3f, 0xc6, 0xd3, 0x00, 0x86, 0xe0, 0x2b, 0x9f, 0x0a, 0xca, - 0x4f, 0x7e, 0xaa, 0xd0, 0x7e, 0x36, 0x88, 0xcc, 0x87, 0xc9, 0xff, 0xc6, - 0xef, 0x71, 0x8a, 0x33, 0xab, 0x9a, 0xe7, 0x9a, 0x69, 0x24, 0x74, 0x4a, - 0xd0, 0x6f, 0xcf, 0xfd, 0x22, 0x6a, 0x8f, 0x58, 0xf7, 0x48, 0x8c, 0x99, - 0x01, 0xce, 0x3d, 0x4a, 0x5f, 0x47, 0xf3, 0x30, 0x66, 0xfa, 0xdc, 0xbf, - 0x4e, 0xdf, 0x77, 0x9d, 0xbb, 0xfb, 0xc6, 0x1e, 0x7d, 0x83, 0xa7, 0x2d, - 0x96, 0x14, 0x7d, 0x0b, 0x49, 0xd1, 0x04, 0xd9, 0x70, 0x38, 0xb0, 0x9c, - 0x3a, 0x38, 0x80, 0x11, 0x0f, 0xb1, 0x2b, 0x71, 0x4a, 0x23, 0x24, 0x51, - 0xa4, 0x8b, 0x1c, 0x01, 0xaa, 0x7a, 0xcf, 0x0e, 0x67, 0x4c, 0x0e, 0x27, - 0x86, 0xff, 0xfb, 0xf0, 0xf5, 0x45, 0x25, 0xb2, 0x06, 0xd7, 0x00, 0x87, - 0xed, 0xe8, 0x44, 0x6a, 0xd0, 0xee, 0x62, 0x1b, 0xa3, 0xa1, 0x39, 0x93, - 0x90, 0x19, 0x27, 0xaa, 0x3b, 0xe2, 0x2b, 0xe5, 0x86, 0xdd, 0x07, 0x65, - 0xb1, 0x9a, 0x0a, 0x12, 0x72, 0x7f, 0x56, 0x86, 0x08, 0xc9, 0xed, 0x2b, - 0x9d, 0xdc, 0x87, 0xfa, 0xe7, 0xeb, 0x9e, 0xbb, 0xb5, 0xbc, 0xdd, 0x63, - 0x35, 0x4a, 0x80, 0x00, 0x38, 0xbe, 0xd1, 0xd8, 0xfc, 0x01, 0x9c, 0x91, - 0x10, 0xa9, 0x71, 0x8e, 0xff, 0x25, 0x9b, 0xa4, 0x80, 0xe2, 0x22, 0xc2, - 0x63, 0x3a, 0x54, 0x51, 0x90, 0x7e, 0x11, 0x5b, 0x49, 0xae, 0x51, 0x61, - 0xaa, 0x82, 0x80, 0x94, 0x32, 0x71, 0x85, 0xc3, 0x94, 0x92, 0x00, 0xa1, - 0xb7, 0xb3, 0x57, 0x71, 0x83, 0x93, 0xf4, 0xee, 0x10, 0xda, 0x08, 0x1e, - 0x24, 0x11, 0x77, 0x9b, 0x67, 0x16, 0xcf, 0x3c, 0x47, 0xbe, 0x67, 0xe8, - 0xa8, 0xb4, 0x8b, 0xf0, 0x41, 0xa5, 0x40, 0x15, 0xbc, 0x06, 0xa7, 0xe5, - 0xd5, 0xb4, 0x33, 0x7f, 0x50, 0xc3, 0x1c, 0x74, 0xdc, 0xd0, 0x9a, 0xf4, - 0x59, 0x95, 0xa9, 0x23, 0x8b, 0x85, 0xd4, 0xe6, 0x6f, 0xcb, 0x57, 0xb9, - 0xa3, 0xb1, 0x10, 0x4d, 0x8a, 0xd3, 0xa3, 0xd6, 0x3d, 0x6e, 0x2a, 0x00, - 0x38, 0xfc, 0x01, 0x28, 0x90, 0x6a, 0xfa, 0x9a, 0x39, 0xb1, 0x12, 0x0e, - 0xc2, 0xcf, 0x16, 0x25, 0x39, 0xe3, 0xae, 0x03, 0xa8, 0xbb, 0xcf, 0x9f, - 0xa0, 0x70, 0x17, 0x95, 0xb8, 0xa4, 0x4c, 0xde, 0x0e, 0x33, 0x2b, 0x4b, - 0x49, 0x51, 0x13, 0x24, 0xe2, 0xd9, 0x38, 0x88, 0x14, 0xdb, 0x70, 0x1f, - 0x18, 0x0a, 0xf8, 0xc6, 0xe8, 0x89, 0x60, 0x0b, 0xc0, 0xea, 0x04, 0x1a, - 0xc3, 0x4a, 0x51, 0x03, 0xb9, 0x8a, 0x01, 0x59, 0xe2, 0x00, 0x6a, 0x25, - 0x44, 0x6b, 0xf3, 0x5c, 0x94, 0x3d, 0x2a, 0x04, 0x84, 0xb1, 0x45, 0x1e, - 0xd7, 0xfb, 0x0f, 0xd5, 0xc3, 0xdd, 0x87, 0xd5, 0x3e, 0xeb, 0x24, 0xaa, - 0x46, 0xf9, 0x74, 0xc9, 0x3d, 0xe1, 0x65, 0xfb, 0xb2, 0x38, 0x20, 0x41, - 0x7e, 0x90, 0x5a, 0x47, 0x98, 0x63, 0xb4, 0x73, 0xc0, 0xfc, 0x3a, 0xae, - 0x2e, 0xf2, 0x0d, 0xc1, 0x9e, 0xac, 0x99, 0xcd, 0x3d, 0x67, 0xbb, 0x97, - 0xb7, 0xba, 0x1b, 0xef, 0x72, 0xaa, 0x51, 0xdb, 0xe7, 0x35, 0xbc, 0x12, - 0xdb, 0xef, 0xcc, 0x0b, 0xc9, 0xfb, 0x40, 0x86, 0x91, 0x70, 0x50, 0x8b, - 0x38, 0xbe, 0xaf, 0x93, 0xfe, 0x7d, 0x9d, 0x58, 0xf1, 0xe6, 0x0c, 0x6c, - 0xdb, 0xe9, 0x02, 0xde, 0x5a, 0xff, 0xda, 0xdd, 0x8e, 0x93, 0x85, 0x90, - 0x50, 0x05, 0xb9, 0x87, 0x9b, 0xd9, 0x67, 0x22, 0x84, 0xc8, 0xe2, 0xae, - 0xb6, 0xf0, 0x56, 0x25, 0xef, 0xe8, 0xef, 0xd1, 0xb0, 0xf6, 0xec, 0xfc, - 0x7b, 0x6b, 0xd3, 0x7b, 0xdf, 0xa0, 0x35, 0x10, 0xca, 0x64, 0xdd, 0x61, - 0x20, 0xbc, 0x93, 0x25, 0xee, 0x41, 0x12, 0x97, 0x94, 0x77, 0xf9, 0x0b, - 0xff, 0xc7, 0xe6, 0x31, 0x0a, 0x0f, 0xb6, 0x2f, 0xeb, 0xb8, 0xa8, 0x6d, - 0x34, 0x6a, 0x0d, 0xaa, 0xcc, 0xe9, 0xce, 0x0f, 0x7e, 0x44, 0x84, 0x64, - 0xa6, 0x9e, 0x3a, 0x3e, 0x69, 0x3f, 0x6e, 0xfe, 0x7f, 0x36, 0x19, 0xc6, - 0x63, 0x7c, 0x0e, 0xcd, 0x0f, 0x84, 0xd5, 0xe1, 0xd1, 0x66, 0x7e, 0x96, - 0xf0, 0x84, 0x0e, 0xe7, 0x97, 0xec, 0xaf, 0x3b, 0xc5, 0x72, 0x36, 0x67, - 0xc9, 0x5b, 0x41, 0xd2, 0x48, 0x45, 0x7d, 0x44, 0x89, 0x1e, 0xd1, 0x55, - 0x29, 0xf3, 0x53, 0x75, 0x44, 0xde, 0xc6, 0x6a, 0x5c, 0x51, 0x72, 0xe7, - 0x3d, 0xda, 0xe2, 0xb9, 0xd8, 0xcf, 0xc9, 0x96, 0x78, 0xb6, 0xd6, 0x7b, - 0xfe, 0x8d, 0x50, 0xb4, 0xc4, 0x95, 0xc9, 0xe2, 0x3f, 0x39, 0x33, 0xe0, - 0xa0, 0x5a, 0x4d, 0xfe, 0xe7, 0x5b, 0x0e, 0x7e, 0xbe, 0xed, 0xe0, 0x87, - 0x0d, 0xee, 0x87, 0xb5, 0x84, 0xdf, 0xdf, 0x48, 0xd9, 0x5f, 0x4c, 0x15, - 0x0a, 0x76, 0xe4, 0x9e, 0x58, 0x2a, 0x58, 0xef, 0xc1, 0x37, 0x77, 0x1f, - 0xeb, 0xfa, 0x63, 0x8d, 0x57, 0x56, 0x77, 0x8a, 0xfd, 0x55, 0xbf, 0x32, - 0x94, 0x2d, 0x2d, 0x16, 0x8a, 0x83, 0xaf, 0xe6, 0xed, 0x80, 0x66, 0x28, - 0x20, 0x1d, 0x63, 0x12, 0x50, 0x09, 0xac, 0x9c, 0x3b, 0x8b, 0xd5, 0xb4, - 0x33, 0x27, 0x60, 0x09, 0xed, 0xee, 0x84, 0xf2, 0xa8, 0xf1, 0x89, 0x26, - 0x72, 0x02, 0xe0, 0x85, 0xb7, 0x30, 0xdb, 0x39, 0x90, 0x8f, 0xbb, 0x81, - 0x5b, 0x9d, 0x57, 0xe2, 0x9c, 0x7b, 0x0f, 0x6f, 0xfc, 0x77, 0xdf, 0x95, - 0x59, 0x28, 0x04, 0x50, 0xc3, 0x49, 0x68, 0x7b, 0xd7, 0x16, 0x51, 0xd8, - 0xc4, 0xa1, 0x50, 0x50, 0x7f, 0x3b, 0x8a, 0x8b, 0x11, 0x42, 0x87, 0xe6, - 0x98, 0x6b, 0xf7, 0x7e, 0xe0, 0xb8, 0xbc, 0x83, 0x14, 0x7c, 0x93, 0x64, - 0x8b, 0xbf, 0x91, 0x8e, 0xf1, 0xd0, 0x87, 0x49, 0xa4, 0x09, 0x2f, 0xf2, - 0x00, 0x0f, 0x7f, 0x38, 0x28, 0x83, 0x8a, 0x88, 0x02, 0x13, 0x8c, 0xec, - 0x08, 0x77, 0x42, 0x3c, 0x65, 0xc2, 0x6c, 0xa0, 0x45, 0x27, 0xd0, 0x22, - 0x2f, 0x16, 0x27, 0x9b, 0x48, 0x5f, 0x8f, 0x71, 0x94, 0x59, 0x7b, 0x67, - 0x56, 0x4d, 0xa5, 0x6c, 0xa9, 0x5c, 0x1f, 0x69, 0x5c, 0x6d, 0x2e, 0xe6, - 0x14, 0x6e, 0xd4, 0xdb, 0x78, 0xb3, 0xc9, 0xaa, 0x04, 0xf8, 0x29, 0xdd, - 0x67, 0x8e, 0xf9, 0x23, 0xae, 0x0e, 0xa1, 0x6b, 0x55, 0x49, 0xe0, 0x83, - 0x1c, 0x98, 0xcf, 0x90, 0x20, 0x7d, 0x1f, 0xf3, 0x6d, 0x20, 0x60, 0x88, - 0x72, 0x26, 0x46, 0xaf, 0x8d, 0x92, 0xec, 0x49, 0x7d, 0xbf, 0x52, 0x10, - 0x3f, 0xc1, 0x61, 0x60, 0xc3, 0xf2, 0x9c, 0x1b, 0x94, 0x87, 0x10, 0x03, - 0xdd, 0xa0, 0xed, 0x53, 0xb8, 0x43, 0x25, 0x5c, 0x94, 0x2d, 0xde, 0x64, - 0xc2, 0x23, 0x5e, 0x3f, 0x90, 0x9c, 0x2e, 0xe3, 0xb5, 0xc1, 0xc8, 0x49, - 0xc8, 0x7e, 0x0a, 0xd8, 0x05, 0xd8, 0x48, 0x79, 0x8a, 0xf7, 0xfe, 0x84, - 0x92, 0x16, 0x43, 0xe8, 0x47, 0x20, 0xc2, 0x8e, 0xf7, 0x59, 0x24, 0x22, - 0xb3, 0x41, 0xbb, 0xd0, 0x0c, 0x3a, 0x96, 0xcd, 0xb1, 0x78, 0xcf, 0x41, - 0xe4, 0xd7, 0xfb, 0xc0, 0xef, 0x35, 0xc7, 0x84, 0x5c, 0xa6, 0x8c, 0x85, - 0x82, 0x00, 0x1c, 0x40, 0x48, 0x1c, 0x00, 0xf4, 0xca, 0x65, 0xa4, 0x1c, - 0xcb, 0x68, 0x31, 0x5b, 0x08, 0x28, 0x01, 0x9e, 0x06, 0x67, 0x18, 0x6a, - 0xd2, 0x46, 0x9b, 0x69, 0x61, 0x0f, 0x0b, 0x8f, 0xc5, 0xee, 0x7c, 0xf6, - 0xe8, 0xf2, 0xcd, 0x57, 0x4a, 0x86, 0x69, 0x87, 0x71, 0xd2, 0xcf, 0x96, - 0xd4, 0xd8, 0xb7, 0x18, 0x5f, 0xb6, 0x18, 0x58, 0xb6, 0x45, 0x57, 0x36, - 0x77, 0x08, 0xaf, 0x29, 0xae, 0x11, 0x9e, 0x5a, 0xdc, 0x23, 0x89, 0xd8, - 0xb8, 0x29, 0x4c, 0x20, 0x75, 0x9f, 0x3d, 0xaf, 0xa8, 0x8d, 0x19, 0xbc, - 0x5b, 0x04, 0x0c, 0x8d, 0xf6, 0x01, 0xbb, 0xef, 0xf1, 0xca, 0x0d, 0xd4, - 0xb9, 0x39, 0x80, 0x58, 0xe5, 0xd7, 0x05, 0x83, 0x33, 0x72, 0x0c, 0x89, - 0x1e, 0x90, 0x7f, 0xa5, 0x72, 0x38, 0xc2, 0xf2, 0xe7, 0x4e, 0xa6, 0x88, - 0xfb, 0xf8, 0xde, 0x3d, 0xfc, 0x00, 0xc0, 0xcd, 0x03, 0xec, 0xe8, 0xfc, - 0xe7, 0x2a, 0x1c, 0x40, 0xeb, 0x29, 0xa3, 0xf8, 0x8a, 0x9e, 0xf5, 0x28, - 0xf9, 0xb1, 0xb4, 0x8f, 0x71, 0xd8, 0x22, 0x44, 0x67, 0x27, 0x2f, 0xb8, - 0xee, 0xd3, 0x17, 0x64, 0x3c, 0xc2, 0x60, 0xd1, 0xe0, 0x62, 0x89, 0xb4, - 0x9e, 0x67, 0xc8, 0x44, 0x10, 0x13, 0x9e, 0x65, 0xf0, 0x9f, 0xfd, 0x16, - 0x5c, 0x7a, 0x57, 0x1a, 0xca, 0xe4, 0x84, 0x25, 0x12, 0x04, 0xa8, 0x19, - 0xed, 0xff, 0xc3, 0x06, 0x80, 0x18, 0x39, 0x98, 0xee, 0x5e, 0x01, 0x0a, - 0x30, 0xc0, 0x3b, 0x17, 0x73, 0x93, 0x2f, 0x1a, 0x01, 0x18, 0xe2, 0x72, - 0xd9, 0xf0, 0x82, 0xa1, 0x82, 0x99, 0x4b, 0xad, 0x09, 0x02, 0x2c, 0xbf, - 0x09, 0xb0, 0x92, 0x33, 0xa7, 0x18, 0x4c, 0xd5, 0x1b, 0xb5, 0x44, 0x53, - 0x6a, 0xcb, 0x5d, 0x4c, 0x60, 0xf7, 0x09, 0xca, 0x1d, 0x4b, 0x35, 0x9f, - 0xfb, 0xc8, 0x85, 0x46, 0x05, 0xef, 0x48, 0x51, 0x85, 0xca, 0xf7, 0xd3, - 0x5a, 0x46, 0xee, 0x13, 0xb5, 0x20, 0x2b, 0x17, 0xb8, 0xf8, 0x0a, 0x5b, - 0x97, 0xcf, 0xc6, 0x54, 0xd6, 0xe6, 0xb3, 0xc2, 0xb4, 0xe6, 0xac, 0xbb, - 0xf9, 0x9a, 0x36, 0x22, 0xf2, 0x13, 0x12, 0xf8, 0xa4, 0x85, 0x98, 0xe5, - 0x59, 0xf7, 0x37, 0x03, 0xff, 0xe9, 0x80, 0xcc, 0x72, 0x34, 0x79, 0x17, - 0x4f, 0x14, 0x7d, 0xa5, 0x61, 0xb9, 0xe1, 0xe7, 0xab, 0x53, 0x53, 0xd1, - 0xe4, 0x48, 0xae, 0x53, 0xbc, 0x6c, 0x24, 0x51, 0x9c, 0x88, 0xab, 0x76, - 0x05, 0xf3, 0x30, 0x7d, 0x4f, 0x4c, 0xc0, 0x44, 0xee, 0x4a, 0x83, 0xdd, - 0x56, 0x6f, 0x1a, 0x2f, 0xc5, 0xbd, 0x94, 0x48, 0xa3, 0x59, 0xa4, 0x8d, - 0xd2, 0x52, 0x85, 0xd2, 0x16, 0xb3, 0x40, 0xa7, 0xe3, 0x03, 0xb2, 0xc3, - 0x68, 0xe8, 0xf3, 0x10, 0x51, 0x66, 0x8c, 0x64, 0x34, 0xb8, 0xf3, 0x1d, - 0x7d, 0xfd, 0xf7, 0x42, 0x72, 0xce, 0x95, 0x24, 0x50, 0xf8, 0xb5, 0xce, - 0x2b, 0x22, 0xba, 0x3e, 0x2f, 0xad, 0x34, 0xcf, 0x4b, 0xf0, 0xbf, 0x8a, - 0x58, 0x35, 0xc8, 0x11, 0xcb, 0xf2, 0x2f, 0xd3, 0x1f, 0x3a, 0xdc, 0x80, - 0x3c, 0x7e, 0xcc, 0xe3, 0x17, 0xcb, 0x6a, 0xfc, 0x8a, 0x64, 0x8e, 0xbc, - 0x21, 0x85, 0xe9, 0x32, 0x03, 0x37, 0x0f, 0x13, 0x46, 0xc0, 0x84, 0x8d, - 0x6c, 0x7b, 0xf3, 0x88, 0xd4, 0xc7, 0x3e, 0xa0, 0x02, 0x36, 0x33, 0xed, - 0x73, 0xe6, 0xe9, 0x8b, 0x7f, 0x5f, 0xf4, 0x09, 0x93, 0x1e, 0x71, 0x47, - 0xcb, 0xdc, 0x4e, 0x2d, 0xc5, 0x3c, 0x0b, 0xbe, 0x83, 0xb9, 0x45, 0x9f, - 0x8a, 0x52, 0x54, 0x0d, 0x56, 0x69, 0xf9, 0x8a, 0x5a, 0x2e, 0x5f, 0x8a, - 0xa0, 0x9a, 0xbb, 0x68, 0x17, 0x37, 0x40, 0x2e, 0x6c, 0xe6, 0x3a, 0xd7, - 0x49, 0xcc, 0x6e, 0x42, 0x85, 0x43, 0x11, 0x9c, 0x81, 0xc2, 0x67, 0x59, - 0x94, 0xdb, 0x0a, 0x94, 0x49, 0x02, 0xa6, 0xb5, 0x94, 0x28, 0xad, 0x8a, - 0x98, 0xb0, 0x14, 0xdd, 0x44, 0xec, 0xd8, 0xf6, 0x7d, 0x70, 0x7b, 0x03, - 0xcc, 0xc6, 0x07, 0x15, 0xda, 0x12, 0xfc, 0x61, 0x1c, 0xc8, 0xd1, 0xb0, - 0x92, 0x13, 0x1c, 0x46, 0xe9, 0x3e, 0x62, 0xde, 0xf7, 0x7e, 0x82, 0x25, - 0xdd, 0x7a, 0x01, 0xa8, 0x3a, 0xfd, 0x6d, 0xef, 0x95, 0xf2, 0xab, 0xee, - 0x62, 0x79, 0x09, 0x29, 0x8e, 0x21, 0xc2, 0xb1, 0x93, 0xdf, 0x48, 0x58, - 0x24, 0x67, 0x41, 0x38, 0xba, 0x57, 0x62, 0x79, 0x7c, 0x45, 0x6b, 0x08, - 0x45, 0x93, 0x77, 0xf3, 0x0c, 0xdc, 0x29, 0x2b, 0x9e, 0x5e, 0x2a, 0x58, - 0x0d, 0x62, 0x87, 0x0d, 0xb8, 0x8e, 0x3d, 0xb5, 0x37, 0xc0, 0xa9, 0xcb, - 0x30, 0x6d, 0xa9, 0x22, 0xaa, 0xc2, 0x88, 0xe5, 0x1c, 0x91, 0x81, 0x53, - 0x85, 0x74, 0xba, 0x64, 0xce, 0x85, 0x7f, 0x31, 0x87, 0xce, 0x71, 0x48, - 0x09, 0xb4, 0xc8, 0xe5, 0xb2, 0x84, 0xd3, 0xa7, 0xfd, 0xfa, 0xf4, 0x97, - 0x88, 0x61, 0x1e, 0x2a, 0xa3, 0x6a, 0xae, 0x0e, 0x26, 0xd6, 0xec, 0x60, - 0x73, 0x29, 0x86, 0xef, 0xcb, 0xe0, 0xba, 0x7a, 0x5f, 0x1a, 0xd8, 0x0c, - 0xda, 0x59, 0x80, 0x89, 0x0e, 0x9a, 0x81, 0x9d, 0xe4, 0x9c, 0xa0, 0xd9, - 0xa9, 0x60, 0x9a, 0xef, 0x28, 0x86, 0x77, 0x2b, 0x86, 0xf7, 0x77, 0x79, - 0x4a, 0xbc, 0x90, 0xf1, 0xaf, 0xa0, 0x16, 0x20, 0x30, 0x93, 0xb3, 0xed, - 0x6e, 0x29, 0x54, 0x34, 0x9b, 0xed, 0x8a, 0xbd, 0xca, 0x55, 0x26, 0x0b, - 0x62, 0x0d, 0x85, 0x5b, 0x44, 0x6f, 0x18, 0x87, 0x5d, 0x1e, 0x12, 0xf1, - 0x04, 0xa4, 0xe2, 0x5c, 0xfd, 0x1c, 0xca, 0x40, 0x9e, 0x70, 0x11, 0x55, - 0x0d, 0xb1, 0x23, 0xd4, 0xc5, 0x1c, 0x2e, 0xa2, 0x2f, 0x06, 0xec, 0x8f, - 0x5e, 0x37, 0xc3, 0xc0, 0x94, 0xb0, 0xa6, 0xbc, 0xdd, 0x06, 0x51, 0xf0, - 0x20, 0x14, 0x9d, 0xd7, 0x91, 0x75, 0x75, 0x0d, 0x1d, 0x25, 0xc4, 0xc5, - 0x0f, 0x19, 0x2b, 0x98, 0xd5, 0xf2, 0x4a, 0xed, 0xab, 0xc8, 0x08, 0xb8, - 0xd9, 0x10, 0x6c, 0x89, 0x44, 0xc2, 0x0f, 0xa2, 0xad, 0xa3, 0x00, 0xe6, - 0x9c, 0x72, 0xdd, 0x39, 0x0a, 0x16, 0xac, 0x15, 0xd8, 0x42, 0xcb, 0x24, - 0x29, 0x68, 0xf7, 0x32, 0x83, 0x21, 0xe4, 0x4e, 0x36, 0x1c, 0x16, 0x75, - 0x5d, 0xbe, 0xb0, 0x11, 0xc2, 0x9c, 0x02, 0xe4, 0x3a, 0x0d, 0xca, 0xcf, - 0xef, 0xb6, 0xbe, 0x3b, 0xae, 0x95, 0xdb, 0x94, 0xb2, 0xda, 0x7a, 0xba, - 0x36, 0x70, 0xb1, 0xa9, 0xc4, 0xac, 0x29, 0xb1, 0xab, 0xc3, 0x72, 0x5b, - 0xe7, 0xdb, 0x4b, 0x0f, 0xe5, 0x86, 0xd0, 0x7e, 0xf3, 0x1c, 0x0a, 0xb0, - 0x44, 0x1c, 0xa1, 0xfd, 0x2d, 0xa0, 0x1d, 0x84, 0x16, 0xb8, 0xc4, 0xb6, - 0x87, 0x40, 0x4e, 0x59, 0xbf, 0xaf, 0x63, 0x00, 0x05, 0x55, 0xae, 0xfc, - 0x53, 0x39, 0x16, 0x5d, 0x0e, 0x1a, 0xa0, 0x8e, 0x81, 0x50, 0x92, 0x65, - 0xe4, 0xff, 0xcd, 0x9f, 0x6f, 0xf1, 0xf5, 0x46, 0x6b, 0xdb, 0x86, 0xa5, - 0x0f, 0x8d, 0x89, 0xd6, 0xf1, 0xf2, 0xcd, 0xba, 0x2a, 0xd4, 0x81, 0xff, - 0x54, 0x68, 0x3b, 0xce, 0x54, 0xef, 0xb6, 0x87, 0xcd, 0x86, 0x45, 0x01, - 0xd7, 0x4f, 0xc9, 0x2b, 0x42, 0x64, 0x0b, 0xd5, 0x19, 0x8e, 0x90, 0x64, - 0xa3, 0x08, 0x3d, 0x59, 0x16, 0x32, 0xd9, 0x3b, 0x4a, 0x3e, 0x29, 0xc1, - 0x70, 0x26, 0xb4, 0x86, 0x9d, 0x8a, 0x33, 0x96, 0xbc, 0x65, 0x53, 0xac, - 0xf8, 0x03, 0xdf, 0x38, 0xcc, 0x73, 0x8b, 0x76, 0x26, 0x56, 0x37, 0x99, - 0x8c, 0xe0, 0x74, 0x3b, 0xab, 0x63, 0xc1, 0x40, 0x03, 0xee, 0x5f, 0xb8, - 0x09, 0x57, 0x42, 0x01, 0x47, 0x8e, 0xaf, 0x84, 0xbe, 0xe4, 0xb8, 0x97, - 0x9f, 0x81, 0xcb, 0x2a, 0x98, 0xf8, 0xa6, 0xf5, 0x53, 0xdd, 0x2a, 0x4b, - 0xce, 0xe6, 0x1d, 0x17, 0x04, 0x9c, 0x62, 0xb6, 0x78, 0x93, 0x2c, 0xc4, - 0x54, 0x6c, 0x7a, 0x86, 0x7c, 0x8f, 0x87, 0x55, 0x50, 0x73, 0x1c, 0xde, - 0x92, 0x2f, 0x82, 0xba, 0x8f, 0x51, 0xa4, 0xd5, 0x3c, 0x4d, 0xe7, 0x2b, - 0x62, 0x11, 0x2c, 0x31, 0xbf, 0xd4, 0xa3, 0xc9, 0xbc, 0x09, 0x20, 0x73, - 0xa9, 0x96, 0x96, 0x88, 0x41, 0x89, 0xc7, 0x7c, 0x52, 0x78, 0x10, 0x6f, - 0xe9, 0xf8, 0x71, 0x3a, 0xe1, 0xab, 0x15, 0x49, 0xf8, 0xdd, 0xc2, 0xa3, - 0xa4, 0xfd, 0xda, 0x43, 0xe8, 0xae, 0xe9, 0xb0, 0xbe, 0xac, 0x57, 0xfd, - 0x27, 0xf7, 0x13, 0xa9, 0x29, 0x74, 0x8e, 0x88, 0xe2, 0xfc, 0x6d, 0x54, - 0x84, 0x96, 0xd2, 0xbb, 0x7f, 0x0e, 0x9b, 0xcb, 0x17, 0x9b, 0xa7, 0x98, - 0xda, 0x81, 0x8f, 0x2c, 0x3a, 0xaf, 0x72, 0x08, 0x58, 0xf3, 0x40, 0x2d, - 0xe9, 0x6b, 0x88, 0xba, 0x26, 0xae, 0x7b, 0xc0, 0xcd, 0xf8, 0x88, 0x12, - 0xd6, 0xad, 0xbe, 0x81, 0x36, 0x2c, 0xc4, 0x19, 0x6e, 0x5d, 0xc3, 0xc5, - 0xfb, 0x23, 0x93, 0x12, 0x55, 0x69, 0x22, 0x56, 0x30, 0xa2, 0x94, 0xa5, - 0x67, 0x26, 0x0f, 0x3a, 0xb1, 0x73, 0x58, 0xa6, 0x79, 0x04, 0x8a, 0xf1, - 0xb1, 0x61, 0xe5, 0xb4, 0x52, 0x92, 0xa1, 0x25, 0xdc, 0x8a, 0x18, 0x52, - 0xf5, 0x74, 0x26, 0x51, 0xb1, 0xeb, 0xf6, 0x19, 0x55, 0xfb, 0x3c, 0x4a, - 0x26, 0xf9, 0xc9, 0x38, 0xf7, 0x67, 0x64, 0x71, 0xd7, 0x69, 0x3d, 0x40, - 0x54, 0xa3, 0x57, 0x20, 0x5b, 0x2e, 0x33, 0xb7, 0x5c, 0x66, 0x6e, 0xb9, - 0xcc, 0xdc, 0xb4, 0xcc, 0xdc, 0xfc, 0x5c, 0x97, 0x20, 0xdc, 0xb4, 0x1a, - 0x48, 0x3e, 0x25, 0xe1, 0xb7, 0xe3, 0x0a, 0x36, 0x24, 0x42, 0x5d, 0x4c, - 0x08, 0x69, 0x1b, 0x08, 0x71, 0x05, 0x11, 0xd6, 0x2b, 0xc3, 0x02, 0x52, - 0xcf, 0x79, 0xf1, 0x89, 0x00, 0x81, 0x92, 0xf7, 0x52, 0xe5, 0xbe, 0x42, - 0x6d, 0x37, 0xf1, 0xd1, 0x75, 0x8f, 0x57, 0x3c, 0xe1, 0xaf, 0x98, 0x3e, - 0xdf, 0x90, 0x4a, 0x77, 0x55, 0x67, 0x88, 0x0e, 0xf9, 0xd7, 0x23, 0xce, - 0x26, 0x5d, 0x8d, 0x8c, 0x1f, 0xd0, 0xbb, 0xe1, 0xcd, 0xaa, 0x1b, 0x0d, - 0x18, 0x33, 0x55, 0x2f, 0xc2, 0x10, 0x71, 0x5c, 0x8a, 0x7b, 0x1a, 0xee, - 0x61, 0xec, 0x22, 0x9f, 0xd5, 0x83, 0x78, 0xc9, 0x1c, 0xaf, 0x0e, 0x69, - 0xbc, 0x46, 0x48, 0xe3, 0x35, 0xa2, 0x1c, 0xbd, 0x17, 0x01, 0x62, 0xe8, - 0xe3, 0xaa, 0x14, 0x8e, 0xe4, 0xea, 0xfb, 0x36, 0xfa, 0x89, 0x0c, 0x88, - 0x99, 0x3e, 0x7c, 0xe3, 0x44, 0x5d, 0x65, 0x3b, 0x4e, 0x77, 0x86, 0x82, - 0xb9, 0x6c, 0x74, 0x47, 0x1e, 0x83, 0x03, 0xab, 0xc2, 0x9f, 0x88, 0x86, - 0x91, 0xb8, 0x14, 0xa6, 0xf1, 0xe6, 0x90, 0xa6, 0xf1, 0xa5, 0x70, 0xa6, - 0x1b, 0x1f, 0x1f, 0x71, 0xff, 0x27, 0xc2, 0x4e, 0xeb, 0x08, 0x21, 0x83, - 0xc9, 0x98, 0x16, 0xfe, 0x29, 0x63, 0x93, 0xd7, 0xc8, 0x15, 0x2c, 0xb6, - 0x58, 0xc2, 0x02, 0xd1, 0xc5, 0x2b, 0xa7, 0x8a, 0x9e, 0x6e, 0x40, 0x93, - 0xfa, 0xc3, 0xe4, 0xe6, 0x3b, 0x45, 0xf3, 0x9d, 0xa2, 0x61, 0x82, 0x3f, - 0x5e, 0x0e, 0xb3, 0x0f, 0x4d, 0xcf, 0x74, 0xdd, 0x9c, 0x3f, 0x1d, 0xee, - 0x53, 0xc1, 0xf1, 0xdf, 0xc7, 0xfe, 0x00, 0x7a, 0xdc, 0x01, 0x38, 0xdb, - 0xef, 0x3e, 0x87, 0xdf, 0x7d, 0x96, 0xeb, 0x23, 0x3f, 0x1d, 0xed, 0xdb, - 0xa1, 0x8f, 0x47, 0x24, 0xc7, 0x4b, 0x21, 0x01, 0xb9, 0xe1, 0x52, 0x88, - 0x2c, 0x28, 0x2a, 0x12, 0x33, 0xa8, 0x04, 0xda, 0x1b, 0x3a, 0x0c, 0xe1, - 0xde, 0x8c, 0x28, 0xf7, 0x64, 0x44, 0xb9, 0x8b, 0x11, 0xa5, 0x1a, 0x5e, - 0x32, 0x55, 0x90, 0x5d, 0xa2, 0xe4, 0x8a, 0x1b, 0xd0, 0x1e, 0x01, 0xe4, - 0xb1, 0xbc, 0xe8, 0xd1, 0xdd, 0xba, 0xec, 0x6d, 0xd4, 0x2f, 0xf2, 0x1e, - 0x87, 0x0b, 0x1b, 0x56, 0xf4, 0xfa, 0x80, 0xa5, 0xbd, 0x43, 0x54, 0x0e, - 0x20, 0x4b, 0xc0, 0x21, 0x13, 0x29, 0xe8, 0x13, 0xdc, 0x5f, 0x30, 0xb3, - 0xf2, 0x00, 0x23, 0x59, 0x67, 0x76, 0x9a, 0x12, 0x17, 0xc6, 0x80, 0x47, - 0x84, 0x73, 0x64, 0x30, 0x8a, 0x42, 0x5d, 0xa1, 0xcb, 0xd7, 0x4f, 0x04, - 0xfa, 0xe3, 0xb4, 0xff, 0xd4, 0x09, 0x7c, 0x3b, 0xf5, 0x34, 0xca, 0x80, - 0x21, 0x9c, 0xbc, 0xb8, 0xad, 0xc6, 0x7e, 0xa0, 0xf1, 0x03, 0xc6, 0x7b, - 0x15, 0x42, 0x79, 0x3f, 0xc5, 0xd3, 0x45, 0x90, 0xc8, 0x4d, 0xfe, 0xbc, - 0xdd, 0xf4, 0xef, 0xa0, 0xcd, 0x82, 0x2f, 0xc4, 0x02, 0x27, 0x2f, 0x7e, - 0x35, 0x16, 0xfe, 0x7d, 0xcd, 0x22, 0xd4, 0x96, 0x63, 0x2f, 0x51, 0x81, - 0x5a, 0x55, 0xec, 0x29, 0x92, 0xa3, 0xe4, 0x2e, 0x46, 0x92, 0x6a, 0xf8, - 0xa4, 0x77, 0x3b, 0xf1, 0xbe, 0xe5, 0xbf, 0xfb, 0x39, 0x98, 0x49, 0x58, - 0x08, 0x23, 0xdf, 0xe9, 0x7e, 0x7c, 0x52, 0x7e, 0xbd, 0x67, 0x61, 0x10, - 0x1d, 0x62, 0x61, 0x42, 0x5c, 0xca, 0x6a, 0x99, 0x20, 0x26, 0x62, 0x82, - 0x3e, 0xaf, 0xf8, 0x3e, 0x6e, 0xd7, 0x12, 0xfe, 0x47, 0x4b, 0x8b, 0x02, - 0x72, 0x8b, 0x3d, 0xa7, 0x88, 0xba, 0xee, 0xf5, 0xbe, 0x4a, 0x21, 0xd7, - 0x5d, 0x12, 0x6f, 0xc1, 0xab, 0x8c, 0xf0, 0x31, 0xab, 0x73, 0x02, 0xa4, - 0x95, 0x6a, 0x54, 0x00, 0x79, 0x05, 0x6a, 0x1f, 0x19, 0xce, 0x61, 0xdd, - 0xbd, 0x77, 0x27, 0x76, 0x46, 0xd3, 0x3f, 0xad, 0xef, 0x0c, 0x00, 0xae, - 0xfc, 0x46, 0x13, 0x60, 0x0a, 0x10, 0x0e, 0x50, 0x78, 0x71, 0xb9, 0x73, - 0xfa, 0x60, 0x92, 0xaa, 0xc4, 0xeb, 0x7f, 0xcc, 0xaa, 0xa8, 0x86, 0x2b, - 0x0d, 0x25, 0x28, 0x6e, 0x3d, 0x2a, 0x88, 0xef, 0x74, 0xdf, 0x64, 0x5d, - 0x9a, 0xe0, 0xc7, 0xb0, 0xd1, 0x99, 0xd7, 0xb9, 0x3e, 0xcb, 0x8f, 0x4e, - 0x1e, 0x4e, 0x3d, 0x49, 0x92, 0xc9, 0xf0, 0xf0, 0xd2, 0xe8, 0x7e, 0xee, - 0x5e, 0x16, 0x9c, 0x79, 0xb8, 0x49, 0x54, 0xe4, 0xc7, 0x85, 0xb2, 0x47, - 0x99, 0x64, 0xa1, 0xef, 0x75, 0xe9, 0xc1, 0x72, 0xde, 0x59, 0x34, 0x61, - 0xed, 0xbd, 0xca, 0x79, 0x68, 0x4e, 0xa1, 0x49, 0x8f, 0xc7, 0x4e, 0x67, - 0x07, 0x4f, 0x22, 0xf8, 0xba, 0x22, 0x5c, 0x56, 0xb8, 0xaf, 0xd3, 0x53, - 0xa1, 0xd5, 0x31, 0x47, 0xb7, 0x39, 0x15, 0xe9, 0xcc, 0xd4, 0x80, 0x8c, - 0x9f, 0x22, 0xea, 0xec, 0xb7, 0xe3, 0xcb, 0x7b, 0xc1, 0xb9, 0x2f, 0x35, - 0x56, 0x11, 0x53, 0x3b, 0x81, 0x10, 0x57, 0x05, 0x15, 0x49, 0xc7, 0x92, - 0x1d, 0xe4, 0x15, 0x38, 0xf1, 0xbb, 0x61, 0x48, 0x1d, 0xb7, 0x57, 0x48, - 0x03, 0xd2, 0x39, 0x76, 0x12, 0x11, 0x14, 0x89, 0xf4, 0x13, 0x62, 0xfb, - 0x6a, 0x38, 0xc3, 0xc8, 0xad, 0x0d, 0x41, 0x68, 0x91, 0x34, 0x85, 0x09, - 0x5c, 0xc8, 0x2b, 0x9f, 0x8e, 0x60, 0x24, 0x24, 0x53, 0xf1, 0x16, 0x68, - 0xea, 0xba, 0x8a, 0x5b, 0x80, 0x9e, 0xee, 0x1d, 0x04, 0xc4, 0xd2, 0x31, - 0x08, 0x29, 0x14, 0xaf, 0x28, 0x92, 0xf3, 0x91, 0x9a, 0x4c, 0x4c, 0x9f, - 0x96, 0xcf, 0xa4, 0xfc, 0x93, 0x92, 0xf1, 0x12, 0x72, 0x13, 0x51, 0x56, - 0x5f, 0x94, 0xf3, 0x0b, 0x54, 0xd7, 0xae, 0xa3, 0x57, 0xed, 0x6f, 0xee, - 0x6d, 0x7b, 0x32, 0x36, 0x74, 0xef, 0x38, 0x64, 0x05, 0xd0, 0xc7, 0xe7, - 0x9e, 0xeb, 0xd9, 0x77, 0x3b, 0x79, 0x7d, 0xc7, 0xc9, 0xeb, 0x3b, 0x4f, - 0x5e, 0xdf, 0xac, 0xf7, 0x77, 0x6a, 0x89, 0x23, 0x64, 0x7b, 0x7c, 0x6f, - 0xbe, 0x68, 0x79, 0x77, 0x52, 0x0e, 0x40, 0xf0, 0x14, 0xf6, 0xdd, 0x2e, - 0x68, 0xdf, 0x14, 0x46, 0x4f, 0xa3, 0x36, 0xef, 0xc9, 0xad, 0xe7, 0x9d, - 0x0a, 0x1f, 0x1f, 0xc3, 0x97, 0x79, 0x5b, 0x1f, 0xf8, 0x3c, 0xca, 0x08, - 0x69, 0x7f, 0x1d, 0x51, 0x63, 0x6d, 0x54, 0x0d, 0x03, 0x84, 0x3a, 0x8c, - 0x90, 0x93, 0x48, 0x22, 0x3e, 0x9f, 0x61, 0x01, 0x6e, 0x75, 0xe2, 0x0b, - 0x79, 0x72, 0x61, 0xce, 0x6f, 0x1a, 0x2b, 0x79, 0x36, 0x1f, 0xdc, 0x95, - 0x3f, 0x6a, 0x13, 0xc0, 0x5f, 0xcd, 0x90, 0x8e, 0x66, 0xd4, 0x0d, 0x65, - 0x43, 0x8e, 0x19, 0xc2, 0x59, 0xc6, 0x91, 0x60, 0xba, 0x04, 0x68, 0xb0, - 0x56, 0xf8, 0x3b, 0x1d, 0x44, 0x7b, 0x37, 0x35, 0x5d, 0x1b, 0x9a, 0xd6, - 0xc0, 0x6a, 0x0b, 0x3d, 0xd1, 0xfc, 0x83, 0x01, 0x67, 0x9f, 0xf6, 0x9e, - 0xec, 0xa2, 0x8a, 0x1b, 0x1f, 0x93, 0xbf, 0x14, 0x38, 0x6e, 0xe2, 0x6f, - 0x69, 0x1f, 0xa8, 0xb8, 0xe2, 0xa1, 0xc3, 0x25, 0x18, 0xd8, 0x4b, 0xe4, - 0xf6, 0x82, 0x16, 0x71, 0xf3, 0x46, 0x02, 0xa7, 0x9a, 0x1f, 0x38, 0xf3, - 0x10, 0x39, 0x28, 0xf3, 0x3b, 0x52, 0xe5, 0x63, 0x26, 0x42, 0x0b, 0xc8, - 0x26, 0xde, 0x36, 0x69, 0x84, 0x0f, 0x42, 0xcd, 0x86, 0x54, 0xb6, 0x00, - 0xe8, 0x03, 0x24, 0x57, 0x5d, 0x75, 0x4a, 0xbe, 0xeb, 0x6a, 0xde, 0x29, - 0xbc, 0x28, 0x00, 0xbd, 0x10, 0x3a, 0xad, 0x77, 0xf0, 0x7f, 0xd0, 0x44, - 0x93, 0x45, 0x14, 0x79, 0x00, 0xd5, 0x13, 0xf2, 0xc7, 0xd7, 0x4c, 0x9b, - 0x12, 0x7f, 0x9f, 0xb2, 0xa0, 0xef, 0x53, 0x57, 0xcc, 0x95, 0x70, 0x93, - 0xad, 0x98, 0xad, 0xbf, 0x9a, 0x9b, 0x1e, 0xf4, 0x3c, 0x86, 0x69, 0x86, - 0x76, 0x79, 0x36, 0x94, 0x29, 0x05, 0xd2, 0x3c, 0x7c, 0x84, 0xff, 0x88, - 0x13, 0x7c, 0x00, 0x8e, 0xbe, 0x04, 0x0a, 0x63, 0x62, 0xbb, 0x9d, 0x2f, - 0xef, 0x82, 0x70, 0xd8, 0x5a, 0x67, 0xb9, 0x9d, 0x6f, 0xb1, 0x6e, 0x27, - 0xc6, 0xc3, 0x40, 0x3a, 0xbd, 0x3d, 0x87, 0x8b, 0x2c, 0x27, 0x71, 0xae, - 0x3e, 0x28, 0xab, 0x4a, 0x56, 0xf3, 0xa9, 0xe4, 0xce, 0x3c, 0xfb, 0x6c, - 0x8d, 0x3e, 0x69, 0xb6, 0xd7, 0xa0, 0x8a, 0x22, 0x27, 0xe5, 0xa3, 0x42, - 0xaa, 0xfb, 0xd3, 0x39, 0x79, 0x40, 0x45, 0x11, 0x36, 0x4e, 0xf7, 0x9c, - 0x57, 0x99, 0x0f, 0x88, 0x9e, 0x8e, 0xec, 0xcc, 0x87, 0xfa, 0x8f, 0x27, - 0xe4, 0xc7, 0xb0, 0x90, 0xf1, 0xe9, 0xea, 0x83, 0xd1, 0x87, 0x34, 0x14, - 0x54, 0x23, 0x14, 0x4f, 0x09, 0x32, 0xf1, 0x00, 0x16, 0xd3, 0x23, 0x22, - 0x82, 0x58, 0x32, 0x78, 0xcd, 0xb4, 0x32, 0x59, 0x48, 0x75, 0xa6, 0xbd, - 0x7c, 0xe7, 0x47, 0xe4, 0x66, 0xf1, 0x60, 0xb1, 0xe8, 0xc6, 0x9d, 0x40, - 0x51, 0xaf, 0x57, 0xbd, 0xac, 0x03, 0xaa, 0xc3, 0xed, 0x4d, 0x45, 0xbb, - 0x5e, 0x6d, 0xd4, 0x8a, 0x7e, 0x3e, 0x03, 0x33, 0x96, 0xf5, 0xea, 0x58, - 0xb0, 0xc6, 0x74, 0x6a, 0x01, 0x9d, 0x2e, 0xaf, 0x3c, 0x1f, 0x71, 0xbd, - 0x42, 0x50, 0x70, 0x5b, 0x4c, 0xb8, 0xd4, 0x9c, 0x10, 0xec, 0xe3, 0xcf, - 0x2a, 0x80, 0xb5, 0x5f, 0x00, 0xb5, 0x4b, 0xe1, 0x2d, 0x91, 0xa3, 0xfb, - 0xd1, 0x5b, 0x23, 0xc1, 0xd7, 0x28, 0xef, 0x3f, 0x9b, 0xf8, 0xb3, 0x85, - 0xa5, 0x56, 0x0b, 0x18, 0xb9, 0x5e, 0xef, 0x91, 0xbe, 0xfb, 0xb5, 0xa0, - 0x02, 0x9e, 0x4e, 0xdb, 0x73, 0xf6, 0xa0, 0xf3, 0x74, 0x0d, 0x56, 0x33, - 0x1a, 0xb8, 0xf6, 0x2e, 0x8f, 0x78, 0xbc, 0xfe, 0xe0, 0xdb, 0xf5, 0xfa, - 0x6f, 0x0f, 0x87, 0x9b, 0x3e, 0xde, 0x65, 0x9c, 0x5c, 0x86, 0x01, 0x7b, - 0x59, 0x27, 0xc8, 0x34, 0x6e, 0x5f, 0x25, 0xaa, 0x0a, 0x50, 0x85, 0x5d, - 0xd1, 0xd9, 0xd9, 0x9e, 0x61, 0x4d, 0x0f, 0x59, 0x11, 0xdb, 0xf5, 0x82, - 0xa3, 0x2a, 0x05, 0x13, 0x5c, 0x5c, 0x82, 0xb6, 0xcb, 0x06, 0x41, 0xe8, - 0xee, 0xb0, 0xb9, 0x82, 0xb6, 0xa8, 0xa0, 0xed, 0xba, 0x43, 0x96, 0x74, - 0xf8, 0x46, 0x2e, 0xb6, 0xb1, 0xf5, 0xc3, 0x6d, 0x74, 0x05, 0x01, 0xb8, - 0x92, 0x6b, 0xe2, 0xa8, 0xb3, 0x86, 0x93, 0x1b, 0xd4, 0xe7, 0x39, 0x83, - 0x4b, 0x24, 0x5a, 0x67, 0xc1, 0x06, 0x4e, 0x3d, 0x55, 0x20, 0x44, 0x22, - 0x53, 0x39, 0x82, 0xf1, 0xdf, 0xf6, 0x41, 0x1c, 0x47, 0x8f, 0x81, 0xe7, - 0x71, 0x11, 0x20, 0xb1, 0xd3, 0x11, 0xd5, 0x53, 0x41, 0xd8, 0x94, 0xb2, - 0x26, 0x7e, 0x07, 0x62, 0x23, 0xa9, 0x6b, 0xf7, 0x67, 0xd4, 0xc5, 0x2b, - 0x56, 0xd3, 0x8f, 0x61, 0xff, 0xc6, 0xdf, 0xa1, 0x56, 0xbe, 0x1f, 0xae, - 0xa1, 0xfd, 0x88, 0xf6, 0xa9, 0x25, 0xa1, 0x4c, 0x96, 0x12, 0x16, 0x80, - 0x8f, 0x21, 0x26, 0xc5, 0xe3, 0xf2, 0x68, 0x68, 0xbc, 0x7c, 0x1b, 0x1c, - 0x37, 0x0f, 0x2f, 0x24, 0x9c, 0x8e, 0x23, 0x9a, 0x7f, 0xc4, 0x12, 0x69, - 0x08, 0x07, 0xa7, 0xdf, 0xa7, 0x07, 0x62, 0x7c, 0x27, 0x1f, 0xa5, 0x3f, - 0x42, 0x74, 0x81, 0x80, 0x3d, 0x9e, 0x9e, 0xa4, 0xcf, 0xd5, 0x23, 0xc6, - 0x29, 0x45, 0x0d, 0x94, 0x8d, 0x6d, 0x89, 0x13, 0xc4, 0xda, 0x60, 0x3c, - 0x86, 0x97, 0x19, 0xfb, 0x1e, 0x60, 0x93, 0x62, 0xb1, 0xfc, 0x44, 0xc7, - 0xff, 0xf9, 0x5e, 0x8b, 0x9a, 0xe2, 0x4f, 0x5d, 0x64, 0x42, 0x50, 0xd3, - 0x63, 0x78, 0x8f, 0xf8, 0xff, 0x1b, 0xbb, 0x1d, 0x41, 0x07, 0x00, 0xa8, - 0x0a, 0xfd, 0x1b, 0x65, 0xf5, 0x97, 0x27, 0x3a, 0xd5, 0x54, 0x26, 0xfe, - 0x3a, 0x07, 0x7f, 0xab, 0x5d, 0x6d, 0x80, 0x03, 0xf6, 0x9d, 0xd1, 0x12, - 0xab, 0x21, 0x91, 0x22, 0x40, 0x74, 0x4e, 0xd3, 0x16, 0x0a, 0x6f, 0xf4, - 0x65, 0x01, 0xc0, 0x82, 0x2a, 0xe1, 0xd8, 0x0d, 0xa2, 0xd8, 0x1d, 0x59, - 0xd6, 0xee, 0x84, 0x7c, 0xe8, 0x00, 0x40, 0x27, 0xda, 0x93, 0x00, 0x4c, - 0xfa, 0x3e, 0x4b, 0xd4, 0xa1, 0x90, 0xe3, 0x0b, 0x41, 0x30, 0x82, 0x11, - 0x00, 0x85, 0xc2, 0x54, 0xf3, 0x69, 0x9f, 0x4f, 0x52, 0x5b, 0x04, 0xb8, - 0xc5, 0x21, 0x0d, 0xb0, 0x37, 0xc8, 0xec, 0x53, 0x83, 0x84, 0x3d, 0x11, - 0x7f, 0xf1, 0x35, 0x54, 0xa3, 0xca, 0x37, 0x46, 0x9c, 0xe8, 0x79, 0x30, - 0x6f, 0xe3, 0x7c, 0x08, 0x3d, 0x32, 0xb4, 0xc3, 0xe9, 0xda, 0xa8, 0x4a, - 0x37, 0x80, 0x9d, 0x35, 0x57, 0xdb, 0xa8, 0x07, 0x50, 0x24, 0x78, 0x92, - 0x94, 0x68, 0x5c, 0xdb, 0x07, 0x0e, 0x93, 0x42, 0x9b, 0x51, 0xcd, 0xe2, - 0x92, 0x0e, 0x98, 0xad, 0x23, 0xb2, 0xe5, 0x84, 0x1d, 0x2e, 0xa4, 0xba, - 0xd8, 0xe1, 0xf1, 0xd0, 0x23, 0xc5, 0xc1, 0x3d, 0x42, 0x9c, 0x1b, 0x81, - 0x53, 0xda, 0x0a, 0xb0, 0x65, 0xe3, 0x78, 0x44, 0x99, 0xb8, 0x20, 0x33, - 0xe9, 0x47, 0x7c, 0xf0, 0x61, 0x01, 0xd1, 0xda, 0xc3, 0xb7, 0x41, 0xd4, - 0xc5, 0xcb, 0xf1, 0xbc, 0x5c, 0x20, 0xaf, 0x88, 0xee, 0x25, 0x97, 0xef, - 0x7d, 0x04, 0xf9, 0x75, 0xad, 0xcb, 0x63, 0xae, 0x78, 0xc6, 0xaf, 0xf1, - 0xf9, 0xd8, 0x34, 0x07, 0x57, 0xac, 0x6e, 0x2d, 0xc0, 0x49, 0x1b, 0x30, - 0xbe, 0xc5, 0xe3, 0xca, 0xda, 0x6d, 0x31, 0x07, 0xe8, 0x3e, 0x0e, 0x46, - 0x5b, 0xe4, 0x40, 0x80, 0xc6, 0x83, 0x87, 0x38, 0x8f, 0x94, 0xa5, 0xf1, - 0xb0, 0x28, 0x8d, 0x47, 0x48, 0xd2, 0x78, 0x50, 0x90, 0x46, 0xfd, 0xd7, - 0x50, 0x47, 0x53, 0x23, 0xda, 0x38, 0x5e, 0x55, 0x9e, 0x63, 0xb4, 0x68, - 0x72, 0x0b, 0xc2, 0x30, 0x7d, 0x73, 0x9d, 0xdf, 0xa2, 0xa6, 0x6f, 0xac, - 0x97, 0xbb, 0xb5, 0xc7, 0x24, 0x62, 0xde, 0xa6, 0x3b, 0x2a, 0x64, 0x5a, - 0x54, 0x31, 0x91, 0xf8, 0x58, 0x0d, 0x8d, 0xe2, 0xaf, 0x13, 0xc0, 0x25, - 0x30, 0x41, 0xdd, 0x32, 0xc5, 0xaa, 0x01, 0xa4, 0xd3, 0x35, 0x4f, 0xe1, - 0x92, 0xa3, 0x14, 0x4c, 0xce, 0x6b, 0x06, 0xfe, 0x96, 0x2c, 0x67, 0x22, - 0xa0, 0xfb, 0x26, 0x88, 0x56, 0x42, 0xf3, 0xc7, 0x32, 0x70, 0x9c, 0xbb, - 0x65, 0x20, 0x09, 0x9d, 0xcd, 0x4b, 0x25, 0xdc, 0xd8, 0x42, 0xcb, 0x8b, - 0x33, 0x52, 0xb1, 0x28, 0x24, 0xf6, 0x82, 0x15, 0xd8, 0xbc, 0x57, 0xc2, - 0x5b, 0x73, 0xa3, 0x43, 0xf2, 0x0a, 0xe7, 0x2f, 0x5c, 0x36, 0x00, 0xa8, - 0x50, 0xe6, 0x45, 0xf9, 0x59, 0xc6, 0x23, 0x81, 0x5b, 0x1d, 0x5e, 0xce, - 0x44, 0x5a, 0x08, 0x9d, 0x63, 0x61, 0xcf, 0xe6, 0x1f, 0xa4, 0x52, 0xb7, - 0x44, 0xf1, 0x3e, 0xdd, 0x57, 0xe6, 0xa7, 0x2a, 0x75, 0xf6, 0xf4, 0xf3, - 0xff, 0x76, 0x32, 0x6d, 0x23, 0xa3, 0x7d, 0x4c, 0x6c, 0x63, 0x60, 0xc6, - 0x26, 0x22, 0x76, 0x34, 0x6d, 0x43, 0xd3, 0xef, 0x67, 0x3e, 0xb6, 0x33, - 0xb9, 0x9b, 0xe9, 0x37, 0x30, 0x9f, 0xfb, 0x97, 0xcf, 0xfd, 0xca, 0xe7, - 0x76, 0xa5, 0xdf, 0xad, 0x74, 0x9b, 0x95, 0x6e, 0xaf, 0x02, 0x78, 0xaa, - 0x66, 0x16, 0xea, 0x7d, 0xd7, 0x77, 0xb0, 0x5f, 0xb9, 0xc8, 0x97, 0xf8, - 0xdf, 0x86, 0x35, 0xa0, 0xf4, 0x61, 0x02, 0x76, 0x7e, 0x26, 0xeb, 0x29, - 0x22, 0x7c, 0x5f, 0x37, 0x8f, 0x2b, 0xcb, 0xf4, 0x3d, 0x40, 0x95, 0xba, - 0x3d, 0x2c, 0x60, 0x06, 0xd3, 0x8b, 0x40, 0x92, 0xde, 0xfe, 0x53, 0x5d, - 0x51, 0x44, 0x88, 0x9b, 0xa1, 0x70, 0xff, 0x84, 0x36, 0x7f, 0xc3, 0x72, - 0x65, 0xd3, 0xae, 0xc8, 0x22, 0xc4, 0xa8, 0xcd, 0x48, 0xba, 0x06, 0x7a, - 0xec, 0x44, 0x90, 0x8a, 0x26, 0x2d, 0xb5, 0x47, 0x0f, 0xe3, 0x6c, 0x50, - 0xcb, 0x04, 0x65, 0xaa, 0x0a, 0xaa, 0x58, 0xc5, 0x53, 0xa4, 0xf5, 0x73, - 0xf7, 0xd6, 0x6f, 0xde, 0xba, 0xbd, 0xdb, 0xe7, 0xd6, 0x2d, 0xa9, 0x28, - 0x53, 0x57, 0x5e, 0x6c, 0xde, 0xba, 0xbd, 0x5b, 0xc0, 0x70, 0x91, 0xfb, - 0xb8, 0x8f, 0x6d, 0x1c, 0x76, 0x71, 0x50, 0x18, 0x9a, 0x69, 0xca, 0x2e, - 0x92, 0x5b, 0x3a, 0x20, 0xf3, 0x2f, 0x3e, 0xa0, 0xdd, 0x9d, 0x45, 0xe4, - 0x55, 0x11, 0x54, 0xae, 0xd7, 0xff, 0xba, 0x44, 0xbf, 0x0c, 0x77, 0xed, - 0x64, 0x44, 0x64, 0x5d, 0x91, 0x4a, 0x2d, 0xc5, 0x0f, 0x73, 0xfa, 0x54, - 0xd3, 0x73, 0x00, 0x2f, 0x9d, 0x63, 0x4c, 0x2b, 0x5b, 0xdf, 0xf0, 0x9e, - 0xf8, 0x51, 0xa4, 0x2d, 0xb3, 0xf0, 0x74, 0xc2, 0xa0, 0x06, 0x25, 0x92, - 0xf6, 0x3c, 0x32, 0xda, 0x0a, 0x33, 0x52, 0xe3, 0x08, 0xa7, 0x52, 0xad, - 0xbd, 0x54, 0x6a, 0x89, 0xda, 0x25, 0x3e, 0x3a, 0x77, 0xd6, 0xc9, 0x48, - 0xbc, 0xb9, 0x36, 0x05, 0x23, 0x3a, 0xc2, 0xb0, 0x97, 0x3e, 0x27, 0xc1, - 0x96, 0xc5, 0x4a, 0x59, 0xdf, 0x21, 0xb8, 0xd3, 0x67, 0x6e, 0x83, 0xc7, - 0xed, 0x2b, 0xc7, 0xca, 0x0a, 0xef, 0x4c, 0xca, 0xf6, 0xc5, 0x80, 0xaa, - 0xa1, 0x25, 0x54, 0x45, 0x66, 0xcf, 0x24, 0xe4, 0xe8, 0xbd, 0x7d, 0x79, - 0xf4, 0xae, 0xc0, 0x17, 0x93, 0xc0, 0x1e, 0x1e, 0x2a, 0x50, 0x71, 0x6e, - 0x5f, 0xa8, 0x07, 0xbc, 0x2a, 0xd3, 0xf0, 0xbc, 0x8d, 0x21, 0x75, 0x3d, - 0x30, 0xa7, 0xd7, 0xcd, 0x0f, 0x4f, 0xd0, 0x8c, 0xf3, 0xf3, 0xe2, 0x21, - 0xbd, 0x82, 0x27, 0x75, 0xd2, 0xab, 0x9c, 0xf1, 0x9c, 0x62, 0x3c, 0x13, - 0x07, 0x98, 0x7a, 0xa0, 0xa0, 0x00, 0x59, 0x99, 0x40, 0x91, 0xa0, 0xd5, - 0x59, 0x5a, 0x27, 0x17, 0xfc, 0xa6, 0x01, 0x61, 0x2b, 0xe1, 0xe2, 0x19, - 0x61, 0x56, 0x90, 0x63, 0x4f, 0x23, 0xe4, 0x9d, 0x6b, 0x22, 0x79, 0xd8, - 0xa5, 0x41, 0x44, 0xc0, 0xc3, 0xe1, 0x4e, 0x85, 0xe8, 0x9a, 0x8a, 0x85, - 0x5d, 0xc8, 0xc7, 0xe0, 0x5e, 0x4b, 0xe0, 0xf6, 0x75, 0x0c, 0x93, 0x2d, - 0x6b, 0x32, 0x6c, 0x5c, 0x6a, 0xa9, 0x31, 0x2a, 0x12, 0xa9, 0x84, 0xad, - 0xa3, 0xc7, 0x9e, 0x70, 0xe8, 0x24, 0xc1, 0xfc, 0xd2, 0xd1, 0xf3, 0x74, - 0xa4, 0xd3, 0x18, 0xc1, 0x0e, 0xea, 0x7b, 0xbc, 0xd4, 0x76, 0xf2, 0x41, - 0x34, 0x5f, 0x60, 0x9f, 0x4d, 0xf8, 0x6b, 0xe4, 0x53, 0x40, 0x11, 0x1f, - 0x92, 0x50, 0x65, 0xe5, 0xe7, 0x03, 0x26, 0xc6, 0x75, 0xfc, 0xa4, 0x5a, - 0xfa, 0x73, 0x9c, 0x27, 0xd1, 0xa7, 0xb6, 0xcd, 0xb2, 0x1d, 0x95, 0xe5, - 0xe0, 0x23, 0x5d, 0x11, 0x33, 0xa4, 0x93, 0x3c, 0xf2, 0x5b, 0xad, 0x9c, - 0xee, 0xdb, 0xbb, 0x45, 0x96, 0xdd, 0x8a, 0x44, 0x0e, 0xbc, 0xa0, 0xd6, - 0xbe, 0xe0, 0xac, 0x5b, 0x55, 0x04, 0xc6, 0xa8, 0x84, 0x5e, 0x98, 0x98, - 0xd8, 0x3a, 0xc2, 0xcf, 0xa2, 0x4c, 0xe6, 0x98, 0x49, 0xaa, 0xa8, 0xcb, - 0x12, 0x1f, 0x7d, 0x1a, 0xe2, 0x60, 0xd9, 0xd4, 0xf1, 0xd6, 0x0a, 0x09, - 0x44, 0xce, 0xfe, 0x24, 0xc6, 0x56, 0x59, 0xc8, 0x68, 0x47, 0x79, 0x18, - 0x27, 0xae, 0xe9, 0x79, 0xb4, 0xe0, 0xda, 0x98, 0x48, 0xea, 0xdd, 0x1c, - 0x86, 0xfa, 0xec, 0x46, 0xd1, 0xd3, 0x99, 0xcd, 0xf0, 0xc7, 0x3d, 0xef, - 0x77, 0xd0, 0x51, 0x30, 0xd0, 0xd5, 0xe6, 0xb8, 0xb8, 0xdd, 0xfe, 0xe6, - 0xc8, 0xf6, 0x3b, 0x90, 0x73, 0x42, 0xa3, 0xe0, 0x6f, 0x1b, 0xe5, 0x00, - 0x9b, 0xeb, 0x6e, 0x88, 0x13, 0xd1, 0xd9, 0x43, 0xce, 0x04, 0xb0, 0x14, - 0x63, 0x1b, 0x29, 0x55, 0xbf, 0x1c, 0x01, 0xd3, 0xf6, 0x08, 0x6f, 0xdd, - 0xb8, 0xf8, 0xdb, 0x86, 0xc5, 0xdf, 0xe1, 0x89, 0x9d, 0xc3, 0xa1, 0xd4, - 0x3f, 0xd3, 0x72, 0x1e, 0xc2, 0xdf, 0xb3, 0x5c, 0x1b, 0x8a, 0x28, 0x38, - 0x35, 0xda, 0xba, 0x1b, 0x28, 0x7f, 0xdb, 0x38, 0xe9, 0x45, 0xc4, 0xf4, - 0x25, 0xb1, 0x11, 0x0f, 0x5f, 0x44, 0x3d, 0x78, 0xf5, 0xc4, 0xa3, 0x88, - 0xb8, 0x72, 0x7a, 0x44, 0x17, 0x9f, 0xae, 0x4d, 0xd3, 0x27, 0x09, 0x81, - 0x11, 0x9c, 0xb3, 0x30, 0xb9, 0x42, 0x99, 0xf0, 0x6e, 0x58, 0x03, 0xb9, - 0xa1, 0x32, 0x35, 0x8d, 0x3a, 0xce, 0x07, 0x88, 0xa3, 0xfd, 0x0e, 0xdb, - 0x49, 0xb9, 0x9e, 0x73, 0x7c, 0x08, 0x16, 0x3a, 0x11, 0xa9, 0xb8, 0xfa, - 0x93, 0x0c, 0x7f, 0x1e, 0xcd, 0xa6, 0xee, 0xbd, 0x14, 0x09, 0xe8, 0x92, - 0x0e, 0x5f, 0xe7, 0x16, 0x1f, 0x6e, 0x03, 0x97, 0x78, 0x15, 0x61, 0x15, - 0x5e, 0xff, 0x74, 0x86, 0x0a, 0xc0, 0xed, 0x51, 0x05, 0xbd, 0x13, 0x4b, - 0xbd, 0x02, 0x8c, 0xd3, 0x31, 0xca, 0x43, 0x55, 0xa9, 0xcc, 0xbc, 0x4f, - 0x96, 0x89, 0x89, 0x03, 0x3c, 0x4d, 0x64, 0xad, 0x32, 0x7a, 0x13, 0xf0, - 0xdf, 0xbb, 0xa7, 0x89, 0xe5, 0xb5, 0x5e, 0xfd, 0x04, 0x18, 0x30, 0x40, - 0xec, 0x4b, 0x52, 0x40, 0xc3, 0x03, 0x0b, 0xa6, 0xf5, 0x7e, 0x3c, 0x84, - 0xf8, 0xed, 0x19, 0x5f, 0x78, 0x6e, 0x03, 0x63, 0x93, 0xc1, 0x30, 0xa0, - 0x82, 0x5d, 0xad, 0x2a, 0x21, 0x33, 0xed, 0xb3, 0xad, 0xb8, 0x96, 0x07, - 0x28, 0x97, 0x61, 0x79, 0xfa, 0x63, 0xb9, 0x7a, 0x4b, 0x00, 0xdc, 0xca, - 0xb0, 0x12, 0xf1, 0x58, 0x43, 0x84, 0xf5, 0x3c, 0x3e, 0x78, 0x99, 0x5f, - 0xff, 0xf7, 0x47, 0x41, 0x60, 0xde, 0x53, 0x4f, 0xdb, 0x05, 0xac, 0x5d, - 0x0f, 0x48, 0x25, 0xb5, 0x05, 0x0e, 0x5b, 0x68, 0x9e, 0x07, 0x4d, 0x9c, - 0x65, 0x28, 0xb8, 0x8d, 0xbb, 0x36, 0xf4, 0xb2, 0x89, 0x8f, 0x16, 0xe8, - 0x71, 0x7f, 0xd2, 0x02, 0x86, 0x8f, 0x29, 0xf1, 0x98, 0x5c, 0x4f, 0xe6, - 0x29, 0x45, 0x79, 0x94, 0x61, 0xb6, 0x1e, 0x61, 0x79, 0x39, 0xda, 0x63, - 0x1a, 0x52, 0x39, 0x34, 0x93, 0x88, 0xf1, 0x17, 0x44, 0xb8, 0x8f, 0x66, - 0xb3, 0x77, 0x53, 0x20, 0x89, 0x0c, 0xfb, 0x9f, 0xb7, 0x2b, 0xb4, 0xa2, - 0x20, 0xf0, 0xce, 0x6b, 0xa3, 0xd3, 0x05, 0x5e, 0xb2, 0x7c, 0x5a, 0x59, - 0x26, 0x5e, 0xea, 0x51, 0xed, 0x54, 0xa8, 0x1a, 0xb6, 0xaf, 0x9f, 0x89, - 0xdd, 0x3e, 0x76, 0x65, 0x13, 0x1e, 0x22, 0x6a, 0xdc, 0x9e, 0x50, 0xf0, - 0x87, 0xd8, 0x02, 0x0c, 0x76, 0x5b, 0xa1, 0x6a, 0xf2, 0x8d, 0xf9, 0x63, - 0x8a, 0x86, 0xe7, 0x97, 0x19, 0x8f, 0x29, 0x76, 0xed, 0x93, 0x19, 0x17, - 0x1e, 0x45, 0x9c, 0xee, 0x32, 0xe1, 0xa7, 0xe0, 0x44, 0x84, 0xc6, 0x1b, - 0xff, 0x16, 0x7f, 0xfd, 0x28, 0x5f, 0x5f, 0x92, 0xfd, 0x56, 0x91, 0x7d, - 0x7e, 0xad, 0x03, 0x25, 0xac, 0x3d, 0x4a, 0x4d, 0x53, 0x89, 0xf0, 0x28, - 0xd1, 0x03, 0x06, 0x57, 0x2a, 0x16, 0xdf, 0x81, 0x55, 0xb0, 0x0f, 0x23, - 0x0a, 0x04, 0xe7, 0x3d, 0x42, 0x28, 0x5b, 0x05, 0x4e, 0x51, 0x05, 0xe2, - 0xee, 0x01, 0xa2, 0x0b, 0xa5, 0x8b, 0xbc, 0x1a, 0x32, 0x0e, 0x9a, 0x1a, - 0xdb, 0x29, 0x18, 0xcd, 0x46, 0x1e, 0xca, 0x14, 0x6a, 0x49, 0x43, 0x9d, - 0xe4, 0x6a, 0xbf, 0x62, 0x6b, 0x7e, 0x25, 0xa4, 0xec, 0x3b, 0xa0, 0x18, - 0xdc, 0x0b, 0x38, 0xcc, 0xdb, 0x4e, 0x06, 0x64, 0x4c, 0xa8, 0x05, 0x27, - 0xfb, 0x5b, 0x0b, 0xc7, 0x4f, 0x93, 0x08, 0x57, 0xe8, 0x18, 0x35, 0xc1, - 0xa7, 0x2d, 0x63, 0x78, 0xf7, 0x04, 0x55, 0x91, 0x36, 0x66, 0x65, 0xc6, - 0xa1, 0x97, 0x52, 0x87, 0x6c, 0x2d, 0xb8, 0x4b, 0x88, 0x6a, 0xae, 0x71, - 0x7b, 0xd4, 0x05, 0x92, 0x2b, 0x82, 0x1f, 0x43, 0x97, 0x0d, 0x6e, 0x0e, - 0x58, 0x1a, 0x04, 0x2c, 0x88, 0x25, 0x0a, 0x1c, 0xdb, 0x3d, 0x1a, 0x3a, - 0x66, 0xaf, 0xa0, 0xcb, 0x42, 0x10, 0x4a, 0x5d, 0xa5, 0x7c, 0x3d, 0x2a, - 0x9c, 0x85, 0xb4, 0xe4, 0x2b, 0x2a, 0xe2, 0xdc, 0x77, 0x92, 0x70, 0x86, - 0x96, 0x51, 0xe7, 0x54, 0x00, 0x90, 0x7e, 0x0c, 0xa0, 0x33, 0x9e, 0x0a, - 0x98, 0x82, 0x58, 0x53, 0x8b, 0x3d, 0xff, 0x61, 0xe6, 0x7c, 0x98, 0xf3, - 0xe8, 0xb0, 0x25, 0xef, 0x9e, 0x80, 0x9d, 0xb1, 0xa6, 0x2e, 0x0f, 0x28, - 0x88, 0xb5, 0x46, 0x2c, 0x4b, 0xbf, 0x42, 0x0c, 0x6a, 0x6c, 0xd0, 0xf9, - 0xf1, 0x53, 0xb9, 0x20, 0xbc, 0x18, 0xac, 0x50, 0xab, 0xbd, 0xc2, 0xad, - 0x9e, 0xbc, 0x7d, 0x94, 0x4a, 0xf9, 0x2c, 0x96, 0xd2, 0x97, 0x4b, 0x89, - 0x4d, 0x5a, 0x85, 0x9f, 0x4b, 0xc2, 0x6a, 0x11, 0x0b, 0xc2, 0xb2, 0xb4, - 0xe5, 0x60, 0x69, 0xaf, 0xce, 0x8d, 0xd3, 0xba, 0xa5, 0xad, 0xab, 0xf2, - 0x32, 0xf5, 0x05, 0x1c, 0x94, 0xbf, 0xb5, 0x35, 0x60, 0xc7, 0x8f, 0x6d, - 0xdc, 0x05, 0xd1, 0xe7, 0xe5, 0x23, 0x27, 0x52, 0xac, 0x6f, 0x14, 0x96, - 0xb1, 0xe0, 0x33, 0x4c, 0xeb, 0x56, 0xff, 0xb1, 0xb8, 0x03, 0x8a, 0xa5, - 0x1d, 0x02, 0xbe, 0x0f, 0xe1, 0x31, 0xd7, 0x78, 0xc0, 0x5e, 0xe1, 0x81, - 0x03, 0x72, 0xf8, 0x9d, 0x9c, 0x42, 0x40, 0xb9, 0xcd, 0xb5, 0x5d, 0x59, - 0x3e, 0xb2, 0x6a, 0x1d, 0xda, 0x84, 0xd1, 0xaa, 0xf2, 0xd9, 0x26, 0x70, - 0xac, 0xe1, 0xca, 0x12, 0x42, 0x31, 0x1e, 0x78, 0xce, 0x51, 0xd3, 0xac, - 0x96, 0xb4, 0x8e, 0xef, 0xab, 0xfb, 0x86, 0xaf, 0xa3, 0x61, 0xf2, 0x28, - 0x07, 0xc0, 0xbd, 0x65, 0xb5, 0x04, 0x05, 0xa2, 0xfd, 0x84, 0xd8, 0x21, - 0xba, 0x9c, 0x64, 0x58, 0x67, 0x87, 0x10, 0x47, 0xb9, 0xd5, 0x22, 0x93, - 0x88, 0x22, 0x90, 0x50, 0xdf, 0x21, 0x68, 0x5b, 0x8a, 0x51, 0x7d, 0x84, - 0xf8, 0xc5, 0x47, 0x08, 0x51, 0x25, 0x38, 0x75, 0xa8, 0x57, 0xe1, 0xcf, - 0x64, 0x79, 0x5d, 0x95, 0xb8, 0x45, 0x07, 0xaf, 0x8d, 0x49, 0x46, 0x78, - 0xbd, 0x85, 0xd7, 0x6f, 0x7d, 0xf8, 0x56, 0xaf, 0x29, 0xdf, 0xee, 0x36, - 0xe5, 0x3b, 0x5c, 0x7e, 0xa7, 0xcb, 0x9f, 0xb2, 0xb1, 0x3c, 0xca, 0x33, - 0xbe, 0x79, 0x51, 0x50, 0xc4, 0xbb, 0x07, 0xd3, 0x5f, 0xe2, 0xbe, 0xab, - 0x68, 0x9c, 0x73, 0x56, 0xb7, 0xe9, 0xaf, 0x39, 0x70, 0x8c, 0x0f, 0x7d, - 0x55, 0xab, 0xc1, 0xed, 0x8d, 0x69, 0xb7, 0x98, 0x6d, 0xad, 0xf9, 0xa0, - 0x6c, 0x18, 0x60, 0x26, 0x54, 0x2a, 0x22, 0x64, 0x32, 0xa1, 0x9b, 0x47, - 0xf6, 0x2d, 0x03, 0xf6, 0xe1, 0x83, 0x6e, 0x20, 0x4a, 0x2e, 0xd3, 0x8a, - 0x36, 0x0e, 0x86, 0x71, 0x60, 0x58, 0x72, 0x63, 0x50, 0xa0, 0x6e, 0x55, - 0x8b, 0xd9, 0x22, 0xcd, 0xab, 0x30, 0x27, 0x95, 0xe4, 0xb6, 0x71, 0xc0, - 0xd8, 0xa2, 0xaa, 0xea, 0x34, 0x85, 0x4b, 0x63, 0x25, 0x29, 0x0e, 0xf1, - 0x81, 0x6a, 0xb3, 0x76, 0x93, 0xa8, 0x04, 0xe3, 0xdf, 0x9d, 0xe0, 0x3d, - 0x12, 0xbc, 0xd3, 0xda, 0x2c, 0x43, 0x40, 0x4d, 0x5c, 0xed, 0xa3, 0xec, - 0x51, 0x82, 0x19, 0x68, 0x5d, 0x94, 0x78, 0x02, 0xc5, 0x73, 0x08, 0x9b, - 0xe1, 0xe8, 0xe0, 0xf0, 0x8b, 0x60, 0x8f, 0x38, 0x12, 0x2e, 0x14, 0x66, - 0x0d, 0x33, 0xae, 0x4a, 0xca, 0xb1, 0xdb, 0x4d, 0x1d, 0x3b, 0x37, 0x25, - 0x9a, 0x5a, 0x6d, 0x60, 0x68, 0x82, 0x15, 0x33, 0xe4, 0x03, 0xad, 0x25, - 0x81, 0xe3, 0x3f, 0x79, 0xb5, 0xd9, 0x5a, 0x61, 0x05, 0xbc, 0x32, 0xf1, - 0x4d, 0x38, 0x98, 0xfc, 0xa2, 0x95, 0x55, 0xf8, 0x3d, 0x8e, 0xcf, 0xb8, - 0x27, 0x4e, 0x56, 0x40, 0xa2, 0x65, 0x98, 0xae, 0x76, 0x9f, 0x2c, 0xdc, - 0xa4, 0x7e, 0xa6, 0x9b, 0x66, 0x11, 0xde, 0xb0, 0x42, 0x78, 0x0d, 0x83, - 0x7f, 0xc7, 0xa4, 0x7d, 0x7e, 0x81, 0xed, 0xee, 0x01, 0x2d, 0xc0, 0x31, - 0x21, 0x42, 0x82, 0xee, 0xc3, 0xca, 0x7b, 0x1e, 0x66, 0xdf, 0x7b, 0x04, - 0xf7, 0xde, 0xc3, 0xcc, 0x7b, 0x0f, 0xf2, 0xee, 0x3d, 0xce, 0xfb, 0xc8, - 0xbf, 0x8d, 0xff, 0xfc, 0x6e, 0x19, 0xc5, 0x8f, 0x73, 0x56, 0xb3, 0xa7, - 0xc9, 0x2f, 0xb3, 0x2e, 0x5d, 0xaa, 0x09, 0x9f, 0x8c, 0x76, 0xc1, 0xb1, - 0xc9, 0xc9, 0x67, 0xb7, 0x34, 0xbc, 0x06, 0x20, 0xb4, 0x58, 0x1a, 0x12, - 0xca, 0x33, 0x10, 0x27, 0x17, 0x30, 0x0b, 0x8e, 0x36, 0x82, 0xdc, 0x6c, - 0x32, 0xaa, 0x0a, 0x14, 0xd7, 0x72, 0x05, 0x7b, 0x61, 0x35, 0xad, 0x1a, - 0x14, 0x88, 0x8d, 0xe1, 0x5c, 0x14, 0x91, 0x82, 0x83, 0xf6, 0x03, 0x35, - 0x19, 0x62, 0x64, 0x7c, 0xa9, 0xd3, 0x2f, 0x0d, 0x07, 0xb4, 0x68, 0xe5, - 0x7f, 0x4a, 0x8b, 0x0b, 0x4d, 0xb6, 0x45, 0x80, 0x4c, 0xb6, 0x61, 0x38, - 0x70, 0x19, 0xfa, 0x11, 0x23, 0xc0, 0x99, 0x9e, 0xce, 0xf6, 0xd5, 0xa2, - 0xc7, 0x2b, 0x7c, 0x42, 0x33, 0x96, 0xb2, 0xa4, 0xc5, 0x7d, 0x30, 0x3b, - 0x02, 0x84, 0xfb, 0x27, 0x93, 0x61, 0xf1, 0x4a, 0x0f, 0x5c, 0x38, 0xa6, - 0xaf, 0xf5, 0x5a, 0x5b, 0x20, 0xc5, 0x2d, 0x1a, 0x63, 0x9b, 0x71, 0xa6, - 0x0e, 0x03, 0xc3, 0x37, 0x01, 0x73, 0xbb, 0x32, 0x4f, 0xe6, 0xc6, 0x7f, - 0xf8, 0xc6, 0x12, 0x86, 0x9b, 0x99, 0xe5, 0x16, 0x57, 0x33, 0x9c, 0x6c, - 0xba, 0x85, 0x3a, 0xe3, 0xd2, 0x0b, 0x40, 0x45, 0xb4, 0x7f, 0x25, 0xbf, - 0xc0, 0xb9, 0xeb, 0x42, 0xef, 0xdc, 0xdd, 0x08, 0xf6, 0x68, 0x04, 0xbb, - 0x87, 0xbc, 0x73, 0x67, 0xcc, 0x3e, 0xec, 0x7a, 0x43, 0xeb, 0x1b, 0xe4, - 0x05, 0x12, 0xeb, 0x86, 0xe8, 0x2d, 0x6d, 0xf2, 0x30, 0x59, 0xe9, 0x30, - 0x31, 0xb1, 0xb1, 0xe2, 0xde, 0x5f, 0x75, 0xd0, 0x88, 0x7b, 0x6a, 0x11, - 0x7f, 0x1b, 0xa1, 0xea, 0xc0, 0x76, 0x5e, 0x87, 0xe3, 0x40, 0x3e, 0xf4, - 0x07, 0xac, 0x7b, 0x58, 0x83, 0x3b, 0xdf, 0x23, 0xb4, 0x8d, 0x3f, 0x80, - 0x36, 0xac, 0x40, 0x7f, 0x4b, 0x98, 0xb6, 0xc9, 0xd0, 0xc2, 0xd0, 0x56, - 0x1d, 0xe7, 0x03, 0x5f, 0xde, 0x6c, 0x01, 0x5f, 0xc0, 0x0e, 0x10, 0xe2, - 0x09, 0x64, 0x33, 0x3e, 0x1f, 0xc3, 0x9c, 0xdf, 0x49, 0x29, 0x53, 0x20, - 0x1f, 0x12, 0x28, 0x2c, 0x62, 0x5a, 0xd7, 0xba, 0x14, 0xc1, 0x69, 0x57, - 0x23, 0x93, 0x7a, 0x6b, 0xd6, 0x06, 0xce, 0xa3, 0x6e, 0x10, 0xa9, 0x82, - 0x87, 0x54, 0x08, 0xa4, 0x26, 0x11, 0xab, 0x16, 0xe1, 0x18, 0xb0, 0x7b, - 0x6a, 0x70, 0xe8, 0xb9, 0x0c, 0xe9, 0x88, 0xf8, 0x16, 0x69, 0xad, 0x5d, - 0x78, 0x8c, 0xc2, 0xed, 0xc3, 0xfa, 0x08, 0x68, 0x7e, 0x47, 0xc5, 0x5c, - 0xf3, 0x7c, 0x4b, 0xf0, 0x6f, 0xb3, 0xb7, 0x1c, 0x02, 0xe1, 0x11, 0xfa, - 0xcf, 0x5b, 0x00, 0xcb, 0x78, 0x3d, 0x77, 0xf4, 0x7d, 0x11, 0x07, 0xf8, - 0x77, 0xb6, 0x7b, 0xff, 0xfd, 0x18, 0xcb, 0x3f, 0x91, 0xc6, 0xc9, 0x4b, - 0xc3, 0xf1, 0x25, 0x56, 0x80, 0x0d, 0xe7, 0x97, 0xc7, 0xd0, 0x0a, 0x27, - 0x8e, 0xfd, 0x03, 0x77, 0x1f, 0x74, 0x91, 0x20, 0x8c, 0xc3, 0x97, 0xae, - 0x66, 0x63, 0xef, 0x40, 0x9c, 0xa0, 0x64, 0x35, 0x3d, 0xf3, 0xeb, 0xf6, - 0xa8, 0x4d, 0xd4, 0x11, 0xc7, 0x0c, 0xd9, 0x70, 0x7e, 0xf1, 0x6a, 0x9d, - 0xf8, 0x9c, 0x6f, 0xe6, 0x2a, 0x01, 0x19, 0x27, 0x6e, 0xc4, 0x7a, 0x67, - 0x16, 0x18, 0x0f, 0x5d, 0xce, 0xfe, 0xa3, 0x56, 0x66, 0x22, 0x0a, 0x1e, - 0x36, 0xc5, 0xa7, 0x2e, 0x95, 0x11, 0x2e, 0x8e, 0xb6, 0x64, 0x2a, 0xff, - 0xee, 0x7e, 0xa3, 0x56, 0xf4, 0x6f, 0x73, 0x4a, 0xbd, 0x29, 0x4a, 0x11, - 0x46, 0xd7, 0x50, 0x1a, 0x11, 0xdf, 0x5a, 0x9d, 0xdc, 0x27, 0x07, 0x74, - 0xef, 0x2a, 0xe7, 0xde, 0x97, 0xed, 0xbd, 0x2b, 0xbe, 0x7b, 0x57, 0x28, - 0xdd, 0x56, 0xed, 0x3d, 0xb7, 0xd3, 0x8a, 0x8a, 0xdb, 0x4d, 0x47, 0x47, - 0x30, 0xb6, 0xb9, 0x65, 0x2d, 0x36, 0x68, 0x02, 0x76, 0xbe, 0x50, 0x8e, - 0x8a, 0xc0, 0x14, 0xa0, 0x2d, 0x89, 0xdf, 0x8b, 0x97, 0x38, 0x00, 0x1a, - 0x92, 0x16, 0x70, 0x97, 0x2a, 0xf0, 0x65, 0xcd, 0xb6, 0xbe, 0xac, 0x5d, - 0x16, 0x55, 0x30, 0xcf, 0xe1, 0xeb, 0xbd, 0xef, 0xb4, 0x78, 0x0e, 0x75, - 0x94, 0x7b, 0x50, 0xa8, 0x07, 0x89, 0xe3, 0xb1, 0xd9, 0x7e, 0xbe, 0xa7, - 0x2d, 0x06, 0x3a, 0xd9, 0x42, 0x97, 0xd7, 0x45, 0xaa, 0x7e, 0x4c, 0x29, - 0xc0, 0x31, 0xb4, 0xc1, 0x1a, 0x9f, 0xe9, 0xe0, 0x3a, 0x41, 0xbf, 0xb1, - 0x09, 0x0f, 0x47, 0x84, 0x7b, 0x2c, 0xc1, 0x49, 0xb6, 0xd8, 0x40, 0x1c, - 0xdb, 0x19, 0xc5, 0x00, 0x7a, 0xc5, 0xa6, 0xb8, 0xa3, 0x7c, 0x37, 0x23, - 0xea, 0x3e, 0xce, 0xff, 0x10, 0x99, 0xd4, 0x67, 0x73, 0x86, 0x03, 0xc1, - 0x7e, 0xf4, 0x78, 0xf2, 0x0a, 0xe6, 0x6b, 0x70, 0x61, 0x8a, 0x0c, 0xd7, - 0x5f, 0x43, 0xc6, 0xdd, 0x45, 0x8c, 0x8d, 0xb9, 0x76, 0x95, 0xa4, 0x36, - 0x30, 0xa0, 0x74, 0xc3, 0xa4, 0xec, 0xea, 0xdc, 0x36, 0x35, 0x27, 0xe7, - 0x11, 0x18, 0x23, 0xec, 0x29, 0x19, 0x54, 0x41, 0xaf, 0xed, 0x5b, 0x75, - 0x66, 0x7e, 0x01, 0xd3, 0x0f, 0x1c, 0xb9, 0x06, 0x39, 0xbd, 0xcc, 0x82, - 0x2b, 0x92, 0x2f, 0xfd, 0x33, 0x17, 0x97, 0x32, 0xdc, 0x2d, 0x62, 0xda, - 0xf4, 0x42, 0x75, 0xd1, 0x49, 0xae, 0x37, 0x1c, 0x78, 0x1c, 0x49, 0xee, - 0xd4, 0x91, 0x37, 0x65, 0xbe, 0x65, 0xf5, 0x41, 0x8e, 0xdb, 0x6b, 0x68, - 0xb5, 0x09, 0x1b, 0x08, 0x8f, 0x0e, 0xbe, 0x45, 0xd9, 0xd5, 0x95, 0xe3, - 0x25, 0x02, 0xdd, 0xe2, 0x5e, 0x88, 0xd4, 0x1b, 0xe2, 0xd7, 0x22, 0xf1, - 0xd7, 0xd1, 0xea, 0x9c, 0x1b, 0xd5, 0xe2, 0xba, 0xe2, 0x42, 0x74, 0x6b, - 0x85, 0x7d, 0x9d, 0x54, 0xd1, 0x11, 0xd4, 0x15, 0x1c, 0x06, 0xad, 0x02, - 0x6a, 0xe3, 0xde, 0xba, 0x90, 0xf1, 0xe1, 0x51, 0x3e, 0x6b, 0xc0, 0x87, - 0xb7, 0x09, 0x23, 0xa4, 0x11, 0x1a, 0x84, 0xa3, 0x10, 0xc6, 0xa5, 0x35, - 0xbc, 0xd6, 0x22, 0xb1, 0x0e, 0xed, 0x72, 0x48, 0x32, 0x8a, 0x00, 0x42, - 0x88, 0xee, 0x9d, 0xa7, 0xda, 0x21, 0xce, 0x3d, 0xd8, 0x1f, 0x68, 0xf3, - 0xd1, 0x9a, 0xc7, 0x1c, 0xb2, 0x41, 0x9c, 0x47, 0x57, 0xb7, 0xa2, 0x4a, - 0xf4, 0x9a, 0xf1, 0xf7, 0x12, 0xeb, 0x79, 0x93, 0xa7, 0x14, 0xe8, 0x92, - 0xec, 0x94, 0x65, 0x8a, 0xd6, 0xf8, 0x06, 0x14, 0x4a, 0x4d, 0x44, 0x35, - 0xb1, 0x9a, 0xa4, 0xe3, 0x68, 0x80, 0x38, 0xce, 0x03, 0x3a, 0x22, 0xdd, - 0xe5, 0xb3, 0xf5, 0x24, 0x3b, 0xaa, 0x15, 0xfc, 0xc7, 0x59, 0x37, 0x2c, - 0xda, 0xd9, 0xbb, 0xa8, 0x3c, 0x8a, 0x7e, 0xeb, 0x3e, 0x2e, 0x9e, 0x99, - 0x8a, 0x5e, 0xea, 0x16, 0xda, 0x29, 0x85, 0xb4, 0xb0, 0x19, 0x6d, 0xfd, - 0x8c, 0xa0, 0x64, 0x33, 0xdd, 0xb3, 0x89, 0x4e, 0xdb, 0xd6, 0x17, 0xc9, - 0x77, 0xed, 0x1a, 0x99, 0xa6, 0x6f, 0xca, 0xc1, 0xc9, 0x90, 0xdb, 0xdc, - 0x8e, 0x5d, 0xc6, 0xa8, 0xc3, 0x0a, 0xe1, 0xf3, 0xc2, 0xab, 0xf6, 0xf6, - 0x75, 0x7a, 0x76, 0x39, 0xad, 0x54, 0x47, 0xf4, 0x83, 0x02, 0xd5, 0x5d, - 0x64, 0x56, 0x96, 0xa1, 0xfb, 0x84, 0x69, 0xbd, 0x0d, 0xf3, 0xb6, 0x88, - 0x3b, 0xab, 0x4f, 0xba, 0xf7, 0x92, 0x22, 0x85, 0xc2, 0xa6, 0x77, 0xff, - 0xe9, 0x36, 0xe6, 0x03, 0xbe, 0x9b, 0xc0, 0x28, 0x3a, 0xb7, 0x94, 0x40, - 0xf2, 0xd2, 0x11, 0x78, 0x4b, 0x4f, 0x45, 0x9b, 0x40, 0xe2, 0xf7, 0xde, - 0x55, 0xd1, 0x3a, 0x78, 0x13, 0x49, 0x62, 0x3c, 0xbb, 0xfa, 0x5a, 0xc1, - 0xab, 0x90, 0xab, 0x2c, 0x58, 0x14, 0xcf, 0xbe, 0xc0, 0x27, 0xa5, 0xcc, - 0x45, 0x13, 0x2c, 0x5f, 0xa1, 0x99, 0x59, 0x64, 0x26, 0x30, 0x0f, 0x64, - 0x44, 0xd4, 0x49, 0x9b, 0x77, 0x99, 0x49, 0x49, 0x50, 0x40, 0xc4, 0x50, - 0xf6, 0x2c, 0xee, 0xba, 0x60, 0x68, 0x49, 0x79, 0x82, 0x63, 0x75, 0xea, - 0xc8, 0xbe, 0x1b, 0x05, 0x15, 0x49, 0x7b, 0xe2, 0x26, 0xa1, 0xf3, 0xcb, - 0x4b, 0x5e, 0x70, 0x37, 0x37, 0x8b, 0xbd, 0x75, 0x82, 0xcf, 0x72, 0x7f, - 0x4e, 0x5d, 0xb8, 0x53, 0xc8, 0x45, 0x17, 0x39, 0x77, 0x1d, 0xd9, 0x1c, - 0xb9, 0x84, 0x58, 0x16, 0xe6, 0xcd, 0x95, 0x6c, 0x8e, 0xc1, 0x32, 0x39, - 0x44, 0x6f, 0xff, 0x64, 0x13, 0x4a, 0xf4, 0xfb, 0x0c, 0x04, 0x99, 0xa9, - 0x38, 0x37, 0x17, 0xe4, 0xf3, 0xbd, 0x75, 0xee, 0x2a, 0xf1, 0x9b, 0xd3, - 0x46, 0xbe, 0xdc, 0x10, 0x35, 0xf6, 0x33, 0x6b, 0x1d, 0x68, 0xca, 0x9a, - 0x03, 0xd9, 0x56, 0xd7, 0x22, 0x8f, 0xa5, 0x05, 0x8f, 0x4d, 0x45, 0xdf, - 0x68, 0xb6, 0xa9, 0xe9, 0x8d, 0x96, 0x45, 0x5b, 0xc4, 0xa2, 0xb0, 0xa0, - 0xd1, 0x19, 0x7b, 0x2b, 0x12, 0x54, 0x4e, 0x9f, 0x41, 0xed, 0x75, 0x68, - 0xed, 0xcb, 0x65, 0xbf, 0x6c, 0xe7, 0xb3, 0x0b, 0x1a, 0x4a, 0xcd, 0xbb, - 0x66, 0x02, 0x32, 0xbb, 0x34, 0x89, 0xde, 0xe5, 0x91, 0x4f, 0x43, 0xde, - 0xaa, 0xa3, 0x0c, 0x15, 0x6b, 0x2b, 0xb6, 0xda, 0xac, 0x0d, 0x28, 0x26, - 0xcd, 0xa2, 0x80, 0x72, 0xf1, 0x78, 0x64, 0x6d, 0x8b, 0xe4, 0xc6, 0x21, - 0x79, 0xb4, 0xc9, 0x63, 0x27, 0x93, 0x61, 0x12, 0xa5, 0x73, 0x75, 0x7e, - 0x1d, 0xd1, 0x49, 0xf6, 0xba, 0xdd, 0x87, 0x78, 0xa9, 0xaf, 0x66, 0xa1, - 0x9c, 0x37, 0x8b, 0x77, 0x3f, 0xe7, 0xd4, 0xd1, 0xfa, 0xb1, 0xb6, 0xa0, - 0x8e, 0xb1, 0xfb, 0xb2, 0xc6, 0xba, 0x06, 0x30, 0x93, 0xd8, 0xd6, 0xb2, - 0x24, 0xde, 0x5b, 0x36, 0xa8, 0xa3, 0x65, 0xfc, 0xf0, 0x19, 0x92, 0xf0, - 0x6f, 0x5a, 0x6f, 0xe2, 0xd7, 0x69, 0x38, 0x03, 0x8a, 0xab, 0xe7, 0x20, - 0xda, 0xa7, 0x94, 0x9e, 0x28, 0x6a, 0xba, 0x4f, 0x73, 0xb6, 0x90, 0xd7, - 0x24, 0xb1, 0xbd, 0x22, 0x0a, 0x0e, 0x06, 0xb3, 0xdb, 0x77, 0xeb, 0xbe, - 0xb6, 0xec, 0xf3, 0x10, 0x5a, 0x8b, 0x32, 0xaa, 0x24, 0x4b, 0x75, 0xc5, - 0x8e, 0xd4, 0xb0, 0xd4, 0x55, 0x58, 0xec, 0x93, 0x9e, 0x6b, 0xe9, 0x26, - 0x19, 0xaf, 0xbd, 0x69, 0x2a, 0xac, 0xb6, 0x14, 0x7d, 0xf6, 0x4b, 0xd1, - 0x27, 0x84, 0x56, 0x2c, 0xcf, 0xf8, 0x80, 0x43, 0xdd, 0xc0, 0x47, 0x03, - 0xb1, 0x2f, 0x13, 0xd1, 0x7d, 0x88, 0x8d, 0xd9, 0xb3, 0xc4, 0x1a, 0xb4, - 0xe4, 0x0a, 0xae, 0xdd, 0xb9, 0x00, 0xf7, 0x8b, 0x32, 0x6d, 0x5d, 0xa3, - 0x07, 0x8b, 0x72, 0x79, 0x34, 0x8e, 0x44, 0xe0, 0x3c, 0x22, 0x21, 0x11, - 0xec, 0x1b, 0x20, 0xa8, 0xe7, 0x40, 0xcf, 0xec, 0x44, 0xb7, 0xc5, 0x0f, - 0x8f, 0xfd, 0x33, 0xdf, 0x21, 0x79, 0x33, 0xa0, 0x43, 0x6b, 0xdb, 0xe0, - 0x67, 0xe9, 0xd7, 0x06, 0xe5, 0x63, 0x69, 0x50, 0x42, 0xec, 0x27, 0xf1, - 0xe8, 0x60, 0x50, 0xce, 0x09, 0x8e, 0xfc, 0xba, 0x36, 0x14, 0xc9, 0xbc, - 0x8f, 0x89, 0x28, 0x60, 0xc8, 0xfe, 0xbb, 0x19, 0xfe, 0x63, 0xe8, 0x4a, - 0xee, 0x8f, 0x0a, 0xbb, 0x19, 0xb7, 0xdb, 0x3d, 0x43, 0xf0, 0xdd, 0xf2, - 0x49, 0x44, 0x99, 0x06, 0x53, 0x66, 0x85, 0x4b, 0xcc, 0x09, 0x65, 0x6d, - 0x35, 0xb0, 0x4e, 0x39, 0xa5, 0xd6, 0x46, 0x3c, 0x17, 0xe9, 0x05, 0x16, - 0x55, 0xeb, 0x3d, 0x67, 0xd0, 0x24, 0x9b, 0xe3, 0xe0, 0x01, 0x11, 0xb1, - 0x47, 0x39, 0x74, 0x43, 0x76, 0xc9, 0x11, 0xbb, 0x7c, 0x0e, 0xcf, 0x65, - 0xbb, 0x24, 0x5b, 0x24, 0x28, 0xca, 0x55, 0x05, 0x6a, 0x83, 0x46, 0xe9, - 0xc6, 0x0c, 0x4c, 0x4b, 0x4b, 0xe4, 0xc8, 0x4c, 0x5e, 0x40, 0xdd, 0x8e, - 0xf6, 0xd9, 0x36, 0xb4, 0x15, 0xb6, 0x3e, 0xcf, 0x4b, 0x86, 0xac, 0x53, - 0x6e, 0x74, 0xb7, 0x77, 0xe2, 0x08, 0xb3, 0x1b, 0x17, 0x4a, 0x3f, 0xaf, - 0x95, 0x6e, 0x8c, 0x28, 0x39, 0x44, 0x74, 0xac, 0x27, 0x95, 0xf8, 0x1d, - 0xd6, 0x2c, 0x62, 0x0f, 0x16, 0xb5, 0xe7, 0x76, 0x2b, 0xdf, 0xa0, 0xec, - 0x61, 0xef, 0x76, 0xbc, 0xcf, 0xfd, 0x63, 0xc7, 0xfb, 0xdc, 0xdb, 0xde, - 0xf6, 0xb9, 0xf7, 0x07, 0x0f, 0x75, 0xc1, 0xa1, 0x64, 0x08, 0xf0, 0x28, - 0xf3, 0xcd, 0x1b, 0x43, 0xe5, 0x79, 0x3f, 0x72, 0xe8, 0xdd, 0xcd, 0x68, - 0x94, 0xf6, 0xf2, 0xc8, 0x16, 0xdb, 0x6d, 0x85, 0xeb, 0xb2, 0xdf, 0x62, - 0xa3, 0xcd, 0x0f, 0x00, 0xa3, 0xdd, 0x90, 0x93, 0x52, 0x28, 0x35, 0xf9, - 0x3a, 0x36, 0x26, 0x07, 0xf1, 0x64, 0x91, 0x27, 0x93, 0x05, 0x9e, 0xd4, - 0x92, 0x58, 0x33, 0x47, 0x3d, 0x81, 0x40, 0x40, 0xc6, 0xa8, 0x82, 0x22, - 0x63, 0x65, 0x4d, 0xe0, 0xd4, 0x7a, 0xcb, 0x75, 0x05, 0xbd, 0xe7, 0x43, - 0xbb, 0x60, 0x23, 0xdd, 0x4c, 0x04, 0xc1, 0x71, 0xaa, 0x27, 0x14, 0x26, - 0xc8, 0xd8, 0xd4, 0x9b, 0xdc, 0xf5, 0x36, 0xa2, 0x27, 0xbb, 0x50, 0x15, - 0xe6, 0x74, 0x99, 0x99, 0x19, 0x1c, 0x28, 0x4e, 0xd2, 0x75, 0x38, 0x49, - 0x69, 0xde, 0x64, 0x95, 0x79, 0x94, 0xc1, 0x37, 0x5d, 0x8a, 0x8a, 0x00, - 0xd2, 0x7d, 0xdc, 0xb0, 0x49, 0x68, 0x33, 0x43, 0xd8, 0xd2, 0x0f, 0x71, - 0x9c, 0xe6, 0x88, 0x16, 0x91, 0xc9, 0x04, 0xc7, 0xd5, 0x60, 0xcf, 0x7b, - 0xb0, 0x0c, 0x4d, 0x17, 0xdd, 0x72, 0x4c, 0x17, 0x7d, 0xa9, 0xd1, 0xd5, - 0xe5, 0x39, 0x8e, 0x3a, 0x61, 0x6a, 0x8c, 0xe3, 0x82, 0x9d, 0xe5, 0xdd, - 0x56, 0xee, 0x80, 0x5e, 0x86, 0x08, 0xd6, 0xa6, 0x5e, 0xc1, 0xc2, 0x86, - 0x7f, 0xfc, 0xc7, 0x2d, 0xa5, 0x9c, 0x59, 0x24, 0xa7, 0x90, 0x05, 0x7b, - 0x80, 0x5f, 0x27, 0x93, 0x7c, 0xed, 0x85, 0x7d, 0x82, 0x72, 0x31, 0x5f, - 0x47, 0x8b, 0x2d, 0xc1, 0x16, 0x27, 0x46, 0x6c, 0xe0, 0x76, 0xdf, 0x4a, - 0x6a, 0xfb, 0x07, 0x32, 0x94, 0x29, 0xc7, 0x51, 0xe0, 0x90, 0x59, 0x46, - 0x9c, 0xf1, 0x4e, 0x5d, 0x28, 0xd1, 0x28, 0x81, 0x7d, 0xbc, 0x46, 0xa8, - 0xeb, 0x48, 0x42, 0x9c, 0xd4, 0xa6, 0xfb, 0x38, 0xb7, 0x05, 0xce, 0x75, - 0x16, 0x29, 0x48, 0xf3, 0x6c, 0x49, 0x4a, 0x53, 0x4b, 0xe3, 0xe9, 0xca, - 0xdc, 0xb3, 0xde, 0xaf, 0x3c, 0xda, 0x9f, 0xa4, 0xf8, 0x79, 0xba, 0xb6, - 0x6a, 0xbb, 0x16, 0x5d, 0xd7, 0x4e, 0xd7, 0x37, 0xef, 0x26, 0x27, 0xdc, - 0x4c, 0x40, 0xff, 0x3b, 0x2d, 0xa1, 0x8c, 0x9c, 0x12, 0xfa, 0x2a, 0xf2, - 0x46, 0x88, 0x68, 0x32, 0x2a, 0x61, 0xe2, 0x06, 0xdb, 0x3e, 0x7c, 0x8f, - 0x28, 0x04, 0xaf, 0x73, 0x5d, 0x35, 0xe2, 0xbf, 0x6e, 0x8f, 0x59, 0x5e, - 0x94, 0x9b, 0x3b, 0xcd, 0xdf, 0xc3, 0x7f, 0x50, 0x64, 0x43, 0xc5, 0xc3, - 0xac, 0xd1, 0x0a, 0x4e, 0xb1, 0x3f, 0x40, 0x60, 0xc7, 0x9d, 0x4e, 0xc1, - 0x1d, 0x9d, 0x36, 0x35, 0x5e, 0xbe, 0x0e, 0xac, 0x04, 0xaf, 0x05, 0x90, - 0x31, 0xbc, 0xcc, 0xe7, 0x9d, 0x04, 0x50, 0xdd, 0xbf, 0xd2, 0x5c, 0x22, - 0xad, 0x15, 0xff, 0xef, 0x9c, 0xe4, 0xec, 0x90, 0xec, 0x3c, 0x70, 0x21, - 0xb9, 0x95, 0xce, 0xf3, 0x01, 0x86, 0x62, 0x87, 0x73, 0x86, 0x40, 0xd2, - 0xc0, 0xbc, 0x80, 0x6a, 0x84, 0xda, 0x5f, 0x92, 0x4a, 0xf1, 0xb9, 0x5b, - 0xd7, 0x53, 0x60, 0x87, 0x05, 0xe8, 0xc6, 0x4b, 0x2a, 0x5c, 0x97, 0x70, - 0x9a, 0xda, 0x98, 0x93, 0x6a, 0x11, 0xa4, 0x6a, 0x0f, 0x13, 0x2a, 0xd9, - 0xd9, 0xaa, 0x0b, 0x6b, 0x19, 0x58, 0xf2, 0x14, 0xd1, 0x16, 0x76, 0x91, - 0x7a, 0xc1, 0xb4, 0x43, 0x84, 0x42, 0x11, 0x43, 0x50, 0x2f, 0x3b, 0x56, - 0x32, 0x97, 0xaf, 0x3a, 0x3d, 0xcc, 0x42, 0xd3, 0xd7, 0x94, 0x8e, 0xbf, - 0x36, 0x9d, 0x99, 0x04, 0x92, 0x37, 0x0a, 0x0f, 0x83, 0x51, 0xf0, 0xbf, - 0xf2, 0xdf, 0xf9, 0x59, 0xda, 0x5b, 0x6a, 0x63, 0xfa, 0x58, 0x06, 0x8b, - 0x38, 0x06, 0x5c, 0xc3, 0x40, 0xfb, 0xa0, 0x6c, 0x68, 0x67, 0x83, 0xec, - 0xfa, 0xfc, 0x38, 0x0e, 0xbb, 0x6f, 0x9a, 0x41, 0x48, 0x02, 0xa2, 0xd0, - 0x25, 0x6d, 0x97, 0x12, 0xde, 0xb8, 0xfe, 0x95, 0xd9, 0xf9, 0xda, 0xf0, - 0xe8, 0x4b, 0x60, 0x0a, 0x3b, 0x6c, 0x0e, 0x55, 0xfd, 0xcb, 0x32, 0xdd, - 0x5b, 0xb9, 0x9b, 0x62, 0x05, 0xe1, 0xda, 0xca, 0x49, 0xab, 0x6b, 0xd6, - 0xf0, 0x3a, 0x41, 0x0d, 0x84, 0x71, 0xe1, 0x53, 0x73, 0x80, 0xab, 0x9b, - 0xd5, 0xe2, 0x5d, 0x31, 0xc0, 0xa6, 0x00, 0x71, 0x95, 0xda, 0x80, 0x97, - 0x8f, 0x49, 0xfe, 0x4d, 0xf2, 0x88, 0xb0, 0x5e, 0x61, 0x75, 0xae, 0x36, - 0x72, 0x71, 0xf5, 0x41, 0x29, 0xd4, 0x33, 0x9e, 0xe4, 0x0a, 0x7b, 0x24, - 0x6b, 0xd8, 0xae, 0xf6, 0x44, 0x51, 0x41, 0xcf, 0x81, 0x6a, 0x6f, 0x04, - 0x38, 0xfc, 0x12, 0xa9, 0x9e, 0x9e, 0xc3, 0xb4, 0xa5, 0x3b, 0x3f, 0x0c, - 0x01, 0xdc, 0xf4, 0x3f, 0x3d, 0x71, 0xa7, 0x72, 0xd8, 0x6e, 0xca, 0x3d, - 0x29, 0xc9, 0x16, 0xc1, 0x76, 0xa8, 0x62, 0x88, 0xc2, 0x72, 0xdf, 0x87, - 0x06, 0x3b, 0x5b, 0x2b, 0x02, 0x48, 0xc2, 0x69, 0xdb, 0xf7, 0x48, 0xd1, - 0x31, 0xa9, 0x36, 0x9e, 0x94, 0xa3, 0x54, 0xcd, 0x3a, 0xa2, 0x3c, 0x22, - 0xac, 0xf1, 0x72, 0xe9, 0xa1, 0x1c, 0x56, 0x74, 0x7a, 0x44, 0x02, 0xd1, - 0xe1, 0x6b, 0x44, 0x0c, 0xc1, 0x46, 0x76, 0x7c, 0x8d, 0x3d, 0x61, 0x47, - 0xb0, 0x1d, 0x80, 0x8a, 0x72, 0xc1, 0x59, 0x91, 0xdd, 0xaf, 0xd7, 0x86, - 0x38, 0x48, 0x00, 0x8d, 0x47, 0x96, 0x1b, 0xe4, 0x73, 0xa7, 0x8b, 0xc8, - 0x9b, 0xa4, 0x89, 0x3b, 0x92, 0xe8, 0xe0, 0x82, 0xd1, 0x8c, 0x9f, 0xd0, - 0x9c, 0xff, 0xcc, 0x02, 0x33, 0x15, 0xee, 0xa0, 0xc5, 0x31, 0x42, 0xdd, - 0x6e, 0x38, 0xf1, 0x4c, 0xd4, 0x7c, 0x90, 0x0a, 0x1f, 0xd0, 0x30, 0x19, - 0x91, 0x67, 0x0c, 0x53, 0x4e, 0xab, 0xa4, 0xa2, 0x5c, 0xb6, 0xd0, 0x4f, - 0x40, 0x22, 0xfb, 0x26, 0x0f, 0x83, 0x3a, 0xfb, 0xa9, 0xd5, 0x1c, 0x37, - 0xe2, 0x53, 0x9f, 0xdc, 0xdd, 0x5d, 0x09, 0xdb, 0xc2, 0xa9, 0x05, 0x50, - 0xbb, 0xf4, 0x57, 0x0b, 0xe2, 0x95, 0x51, 0x1e, 0xa1, 0x1f, 0x88, 0x44, - 0x57, 0x24, 0x47, 0x76, 0xc4, 0x8a, 0x4f, 0xbb, 0x00, 0x0f, 0xa8, 0x42, - 0x8c, 0x00, 0x70, 0x95, 0x0e, 0x51, 0x7d, 0x43, 0x36, 0x00, 0x5c, 0x2e, - 0x45, 0x45, 0xd6, 0xd9, 0x24, 0x93, 0x3a, 0x8f, 0x16, 0x4a, 0x47, 0xdc, - 0x2a, 0x9b, 0xe7, 0xc1, 0x31, 0x00, 0x98, 0x52, 0x1a, 0x88, 0x9d, 0x06, - 0x4f, 0x2c, 0x00, 0x6a, 0x9a, 0x73, 0xc9, 0xaa, 0x06, 0x4c, 0x77, 0x25, - 0x5a, 0x6c, 0x21, 0x2f, 0xbe, 0x81, 0x8a, 0x1a, 0x5a, 0xb9, 0xd2, 0x57, - 0x69, 0x5d, 0x05, 0x50, 0xd9, 0x4a, 0x8d, 0x87, 0xc0, 0xd9, 0x55, 0x6a, - 0x98, 0x6a, 0x61, 0xa5, 0x95, 0x7c, 0xf1, 0xb9, 0xa0, 0xe0, 0x99, 0x38, - 0x1a, 0x5d, 0xca, 0x3f, 0x02, 0x7e, 0xb1, 0x6a, 0x95, 0x70, 0xde, 0x8c, - 0x64, 0x69, 0x99, 0x62, 0xde, 0xb7, 0xb1, 0xe5, 0x17, 0xea, 0x40, 0x77, - 0xb9, 0x18, 0xef, 0x6b, 0xba, 0x06, 0x6e, 0x4e, 0x3e, 0xeb, 0x1e, 0x62, - 0xbb, 0x3e, 0x70, 0xe9, 0xfc, 0x89, 0x9c, 0x3b, 0x22, 0x1b, 0xa0, 0x69, - 0xad, 0xf8, 0x4c, 0xaa, 0x08, 0x6b, 0xa2, 0xbb, 0x30, 0xca, 0x57, 0x83, - 0xcb, 0xf3, 0x38, 0x85, 0x9e, 0xe3, 0x26, 0xf0, 0x6a, 0x5f, 0x5f, 0x53, - 0x74, 0x4e, 0xe0, 0xbd, 0xab, 0x5e, 0xd3, 0x91, 0x83, 0x33, 0xdc, 0x35, - 0xd0, 0x32, 0x7b, 0xd6, 0x76, 0xee, 0x6a, 0x39, 0xe7, 0x48, 0xd2, 0xb9, - 0xe6, 0x60, 0xa0, 0x49, 0xea, 0xd9, 0x86, 0xd4, 0x33, 0x27, 0xba, 0x0a, - 0x51, 0x3a, 0x2a, 0x8d, 0x75, 0xb8, 0x5c, 0xb2, 0x68, 0xd6, 0xbc, 0xaf, - 0x02, 0x94, 0x73, 0x88, 0xf3, 0x7c, 0x3a, 0x94, 0x8a, 0xc7, 0xff, 0x9d, - 0xfe, 0x7e, 0x6d, 0x5d, 0xad, 0x12, 0x2f, 0x1e, 0xec, 0x1c, 0xc2, 0x31, - 0x93, 0xd4, 0x7c, 0x4d, 0x7e, 0x12, 0x0f, 0x1c, 0xea, 0xe1, 0x21, 0x43, - 0x5d, 0xff, 0x5e, 0x2e, 0xad, 0x90, 0x5b, 0x30, 0xa4, 0x27, 0x08, 0x27, - 0x9b, 0x3b, 0x22, 0x02, 0x7e, 0xb2, 0xd1, 0xa7, 0xbd, 0x2e, 0x6e, 0x08, - 0xd1, 0x20, 0xda, 0x07, 0x52, 0x91, 0x7a, 0x90, 0x0f, 0x6c, 0x3f, 0xbb, - 0xcf, 0x0f, 0x6f, 0x47, 0x45, 0x96, 0x1c, 0xab, 0x45, 0x3e, 0xb7, 0x29, - 0x52, 0xc5, 0x68, 0xb7, 0xfb, 0x19, 0x9f, 0xc5, 0x70, 0xe4, 0xaf, 0x54, - 0x21, 0xca, 0x1d, 0xab, 0x08, 0x35, 0x19, 0x08, 0x73, 0xc5, 0xe2, 0x5e, - 0xc1, 0x9f, 0xd7, 0x88, 0xf7, 0xbc, 0xf3, 0x84, 0x19, 0x08, 0x6f, 0xe1, - 0x35, 0x44, 0xac, 0x5f, 0x05, 0x9c, 0x98, 0x30, 0x57, 0x19, 0xdb, 0x4a, - 0xe3, 0x14, 0xc9, 0x95, 0xdf, 0x5a, 0x7b, 0x40, 0x28, 0x15, 0x27, 0x11, - 0x4b, 0xde, 0x8a, 0x53, 0x93, 0x1e, 0x89, 0xb6, 0xae, 0x31, 0xc5, 0xa6, - 0x54, 0xf1, 0x33, 0x3d, 0x3f, 0x87, 0x88, 0xba, 0xee, 0xbb, 0x2f, 0x39, - 0xcc, 0xaf, 0xbc, 0x62, 0x3b, 0x1a, 0x6a, 0xe1, 0x9c, 0x47, 0x78, 0xc0, - 0x64, 0x32, 0x28, 0xc4, 0x18, 0xf6, 0x57, 0x34, 0x9e, 0x41, 0xf1, 0x43, - 0xe2, 0xbc, 0x5d, 0x82, 0x01, 0x79, 0x0c, 0x60, 0x87, 0x6c, 0xf6, 0x0a, - 0x93, 0x50, 0x5d, 0x6a, 0xcd, 0x49, 0x63, 0xbd, 0x50, 0xe1, 0x10, 0xcd, - 0xf0, 0xb2, 0x3b, 0x03, 0xd3, 0xee, 0xc2, 0xbb, 0xe8, 0x89, 0x13, 0xc0, - 0x6b, 0xa2, 0x85, 0x46, 0x4b, 0xa2, 0x58, 0x60, 0x0a, 0xb6, 0x2c, 0xcc, - 0x21, 0x29, 0x04, 0x38, 0x56, 0xf0, 0x84, 0x8a, 0x6f, 0xce, 0x5a, 0xba, - 0xc4, 0x52, 0x78, 0xbd, 0x94, 0x71, 0x8b, 0x2e, 0x72, 0x29, 0x77, 0xfd, - 0xc7, 0x0a, 0xd2, 0x58, 0xd1, 0x16, 0xee, 0x3c, 0x02, 0xfd, 0x0d, 0xdb, - 0x07, 0x6f, 0xbe, 0x08, 0x97, 0xaf, 0xd3, 0x87, 0xa8, 0xa4, 0xc6, 0xc8, - 0xb9, 0xf4, 0xd3, 0x12, 0xf4, 0xeb, 0xc2, 0x8e, 0x3e, 0x82, 0x2c, 0xd7, - 0xa8, 0x84, 0x82, 0xf5, 0x53, 0x76, 0x83, 0x24, 0xa3, 0x94, 0x4b, 0x5b, - 0x46, 0x81, 0xc0, 0xb2, 0x29, 0xd0, 0xd6, 0x5b, 0x77, 0xe9, 0xc9, 0x0e, - 0x06, 0x0c, 0xe5, 0x2f, 0x01, 0xa7, 0x21, 0xad, 0x3f, 0xfa, 0x50, 0x67, - 0xf1, 0x6a, 0xf4, 0xde, 0x7f, 0xee, 0xd2, 0x50, 0x1b, 0x86, 0x35, 0x11, - 0x8b, 0xea, 0x8a, 0x18, 0xcb, 0x94, 0xbd, 0x7d, 0xba, 0x4e, 0x8e, 0x7b, - 0x85, 0x9c, 0x39, 0xc7, 0x0d, 0x1c, 0x59, 0xaf, 0x6b, 0xe8, 0xcb, 0x99, - 0x39, 0x4d, 0x6a, 0x7e, 0x07, 0xfd, 0xbf, 0xe6, 0xcd, 0x84, 0xba, 0x27, - 0xe8, 0x29, 0xa7, 0xb7, 0x46, 0x1e, 0x49, 0xed, 0x47, 0xf3, 0x59, 0xe6, - 0xce, 0x9d, 0x6e, 0x10, 0x84, 0x6b, 0xbf, 0xed, 0xd2, 0x72, 0xb4, 0x0f, - 0xe7, 0xd2, 0x7c, 0x40, 0x6a, 0x65, 0x47, 0x79, 0x99, 0x61, 0xdc, 0xbc, - 0xd7, 0x09, 0x72, 0xee, 0xe2, 0x81, 0x62, 0x9f, 0x71, 0x6b, 0xb5, 0xb2, - 0xbe, 0xea, 0x1a, 0x2d, 0x7d, 0xfe, 0xf3, 0x09, 0xcd, 0x3f, 0xa8, 0xb2, - 0x5d, 0xa7, 0xe8, 0xb9, 0x75, 0xdb, 0x5e, 0x5a, 0x1e, 0x49, 0x1c, 0x6a, - 0xe2, 0x26, 0xa2, 0xbd, 0x99, 0x7a, 0x35, 0x87, 0xa3, 0xcb, 0x49, 0x37, - 0xd5, 0x42, 0xd3, 0x3d, 0x63, 0xd9, 0xb6, 0xf3, 0x79, 0x34, 0x14, 0xf6, - 0x14, 0xa6, 0x72, 0x74, 0xd0, 0x41, 0x6e, 0x6d, 0x34, 0x27, 0x76, 0xbc, - 0x94, 0xe9, 0x29, 0x90, 0x3d, 0xae, 0x42, 0xdd, 0x94, 0x10, 0x2f, 0x39, - 0x46, 0x6c, 0x6d, 0x60, 0xc3, 0x99, 0x9a, 0x37, 0xb1, 0x24, 0xdc, 0x95, - 0x21, 0x21, 0xb3, 0x75, 0x6c, 0x28, 0x9c, 0x74, 0x85, 0x9c, 0x5f, 0x5d, - 0xe7, 0x27, 0xa1, 0x54, 0x01, 0xda, 0xf5, 0xf9, 0xe5, 0x28, 0xcf, 0xab, - 0x93, 0x74, 0xce, 0xad, 0x13, 0x9d, 0x73, 0x0e, 0x98, 0x80, 0xe9, 0x69, - 0x56, 0xf0, 0xcb, 0x97, 0x13, 0x56, 0x57, 0x43, 0x12, 0x8f, 0x0f, 0x9c, - 0x05, 0x6f, 0xa5, 0x84, 0x44, 0x9d, 0x65, 0x0c, 0x07, 0xbe, 0xb3, 0x86, - 0xf8, 0xce, 0x7b, 0xc4, 0x78, 0x1d, 0xbf, 0x54, 0x51, 0xd7, 0xd1, 0x99, - 0xae, 0x60, 0xba, 0x7a, 0xaa, 0x15, 0x56, 0x98, 0xc0, 0xcf, 0x47, 0xb6, - 0x64, 0x90, 0x11, 0xdc, 0xd8, 0x8d, 0x80, 0xd7, 0x51, 0xac, 0x0d, 0x1d, - 0xb9, 0x45, 0x00, 0xb7, 0x21, 0xf7, 0x89, 0xa0, 0x50, 0x3d, 0x8d, 0x88, - 0xa5, 0x7a, 0x10, 0xaf, 0xc0, 0x6b, 0xe7, 0xaa, 0x8b, 0x06, 0xa2, 0x4c, - 0x9d, 0xc8, 0xc7, 0xb4, 0x67, 0xe2, 0x75, 0xe8, 0xe1, 0x0f, 0x73, 0xfa, - 0x34, 0x7b, 0x03, 0xe0, 0xb2, 0x4a, 0x87, 0xa9, 0xca, 0x16, 0xcc, 0x0d, - 0xeb, 0x7e, 0xb4, 0x6c, 0xad, 0x51, 0x1e, 0xb9, 0x99, 0xe1, 0x54, 0xb7, - 0x4d, 0x5f, 0xe9, 0x04, 0xda, 0xaf, 0xba, 0xe4, 0x1e, 0x4d, 0x63, 0x4b, - 0x47, 0x1e, 0x3d, 0x15, 0x53, 0xf4, 0x15, 0x72, 0x59, 0x15, 0xe4, 0xaf, - 0xd6, 0x97, 0x40, 0x1e, 0x96, 0xb1, 0xf9, 0x8e, 0x0e, 0x7c, 0x6d, 0x23, - 0xeb, 0xb5, 0x4b, 0x6c, 0xcc, 0xfa, 0x15, 0x74, 0x2e, 0xb3, 0xcd, 0x5d, - 0xa7, 0xdb, 0x2d, 0x46, 0xff, 0xeb, 0xe4, 0x7b, 0x06, 0xc3, 0xb0, 0xdb, - 0x9d, 0xbf, 0x29, 0x2f, 0xd8, 0x92, 0x70, 0x74, 0xf7, 0xd5, 0xc6, 0x10, - 0x9e, 0x78, 0x66, 0x5a, 0x81, 0xbb, 0xe8, 0x15, 0xe5, 0xbd, 0xad, 0xe9, - 0x19, 0xd4, 0xf3, 0xe8, 0x48, 0x8c, 0x28, 0x43, 0x23, 0x29, 0xe8, 0x33, - 0xe0, 0xd1, 0x6c, 0x5b, 0xe7, 0x22, 0x3d, 0xb5, 0x62, 0x6b, 0xa4, 0x3a, - 0x70, 0x6f, 0xe1, 0x54, 0x42, 0xdf, 0xfa, 0xde, 0x22, 0x79, 0x96, 0xdd, - 0xf9, 0xda, 0xdb, 0x1c, 0x70, 0x85, 0x14, 0xfb, 0xf9, 0x4c, 0xa2, 0x86, - 0x16, 0x19, 0x20, 0xcc, 0xb0, 0x10, 0xcd, 0x99, 0xdb, 0x3c, 0xa8, 0xc5, - 0x69, 0xe3, 0x5e, 0x25, 0x26, 0x8a, 0xe6, 0x6e, 0x30, 0xab, 0xb3, 0xd2, - 0xd9, 0x3a, 0x0b, 0xa5, 0x7d, 0x03, 0xcc, 0x2e, 0xed, 0x92, 0x42, 0xc0, - 0x40, 0xe4, 0x31, 0x50, 0xc5, 0x38, 0x4e, 0xad, 0xc6, 0x96, 0x19, 0xd8, - 0x86, 0x1f, 0x96, 0xfa, 0xf9, 0xd5, 0x5c, 0x9d, 0x31, 0xd6, 0x5e, 0xd1, - 0xda, 0x1a, 0x8a, 0x4d, 0x81, 0x28, 0x65, 0xc1, 0x5a, 0x69, 0x81, 0x9e, - 0xad, 0xad, 0x9f, 0x39, 0xd6, 0x5e, 0xcf, 0xdd, 0x2d, 0x07, 0xc0, 0x5f, - 0x71, 0x80, 0x16, 0x96, 0x71, 0x96, 0xb6, 0x8e, 0x5f, 0x9b, 0xa7, 0xdf, - 0x1c, 0x2a, 0xb1, 0xd5, 0x67, 0xe1, 0xd6, 0x11, 0x33, 0xe6, 0xff, 0xf1, - 0x76, 0xeb, 0xd0, 0x65, 0x6c, 0x44, 0x76, 0x5e, 0x61, 0x95, 0x5c, 0xc5, - 0x35, 0x55, 0xb1, 0x02, 0x24, 0xe5, 0x49, 0x66, 0x8c, 0x23, 0xe5, 0x35, - 0xb8, 0x7f, 0x80, 0x72, 0x06, 0x18, 0x43, 0xb6, 0x38, 0xe0, 0x99, 0xad, - 0x7e, 0x6c, 0x4b, 0xa7, 0xba, 0xce, 0xcf, 0xd1, 0x6e, 0xe4, 0x5c, 0x81, - 0xad, 0x82, 0xe9, 0xff, 0x9d, 0x13, 0x56, 0xcd, 0x5a, 0xc3, 0x81, 0x3a, - 0xba, 0x2f, 0xaf, 0x61, 0x56, 0x42, 0xb7, 0x21, 0xcf, 0xce, 0x40, 0xec, - 0x09, 0x37, 0xa7, 0x67, 0xf3, 0x51, 0x72, 0x45, 0xa2, 0x3d, 0xbd, 0xd7, - 0x81, 0x21, 0x97, 0xb8, 0xb5, 0x4e, 0x72, 0xda, 0x8f, 0xcd, 0x1a, 0x5e, - 0xa1, 0x4c, 0x31, 0x45, 0x8f, 0xaf, 0x1c, 0xf0, 0xc6, 0x57, 0x4b, 0xc8, - 0xaf, 0x56, 0x4a, 0x60, 0x2a, 0xca, 0x88, 0x7f, 0x29, 0xbf, 0x29, 0x1c, - 0xff, 0xe6, 0x22, 0x61, 0xfc, 0xcd, 0x69, 0x76, 0xfc, 0xcd, 0x73, 0x1a, - 0xe2, 0x58, 0x13, 0x01, 0x43, 0x1d, 0xf8, 0x45, 0x35, 0x06, 0xca, 0x4e, - 0xa6, 0xe6, 0xd3, 0x4d, 0xa0, 0xa2, 0x79, 0xc8, 0xa1, 0x0b, 0x54, 0x2b, - 0x86, 0xdf, 0xd8, 0xdc, 0x13, 0x96, 0x16, 0x7a, 0xb7, 0xe0, 0x0a, 0x2a, - 0x3e, 0xe5, 0x36, 0x91, 0xc4, 0x9a, 0x75, 0xf8, 0x7b, 0xb4, 0x51, 0xbc, - 0x12, 0x9f, 0x9d, 0x0d, 0x16, 0xdb, 0xb3, 0x11, 0x5b, 0xa6, 0xe1, 0x36, - 0xcc, 0x31, 0x82, 0xdf, 0xc4, 0x2b, 0x05, 0x80, 0x9b, 0x0c, 0x5e, 0xde, - 0x9a, 0xf0, 0x77, 0x2e, 0x78, 0x8c, 0x74, 0x1d, 0x55, 0xe1, 0xa6, 0xe3, - 0xbc, 0x8a, 0x8e, 0xd3, 0x2b, 0x92, 0x6e, 0xda, 0xb9, 0x99, 0x79, 0x5f, - 0xc8, 0x6d, 0xb3, 0xb5, 0xdf, 0x1b, 0x4e, 0xc7, 0xe4, 0x85, 0x45, 0x11, - 0xdf, 0x67, 0xf9, 0x88, 0x8a, 0xd0, 0x88, 0xab, 0x7a, 0xaf, 0x38, 0xc3, - 0xae, 0x1d, 0x6a, 0x13, 0x58, 0xe3, 0x5b, 0x19, 0xa8, 0xca, 0x31, 0xec, - 0x3b, 0xb7, 0x91, 0x8d, 0x69, 0xce, 0xd3, 0x9e, 0x35, 0x67, 0x38, 0x81, - 0x7d, 0x5a, 0x14, 0xce, 0x14, 0x6a, 0xef, 0x80, 0xb7, 0x05, 0xc6, 0x0c, - 0xce, 0x2f, 0x07, 0x46, 0xec, 0x09, 0xe3, 0x36, 0x47, 0xae, 0xe7, 0xa1, - 0x8d, 0xb6, 0x37, 0xb2, 0x31, 0x7a, 0xce, 0x08, 0xc2, 0x63, 0x8a, 0x48, - 0xc5, 0x3f, 0x8f, 0xbf, 0xf6, 0x6c, 0x36, 0x36, 0xc3, 0xe6, 0xf3, 0xb7, - 0xf7, 0xd8, 0xe6, 0x24, 0xe2, 0x08, 0xa4, 0xb4, 0x05, 0xd5, 0x6d, 0x3e, - 0xd1, 0x30, 0xd3, 0xd5, 0xd9, 0x59, 0x47, 0x09, 0x02, 0xff, 0xfd, 0x80, - 0xae, 0x4c, 0x70, 0x3f, 0xd9, 0xa3, 0x18, 0xa1, 0x0c, 0x5a, 0x4e, 0x44, - 0xbd, 0xc2, 0x89, 0xd2, 0xde, 0xce, 0x8e, 0xd6, 0x1b, 0xae, 0x4c, 0x77, - 0x2d, 0xf3, 0x2a, 0xd6, 0x33, 0x11, 0xc2, 0xa5, 0xee, 0xb5, 0xa7, 0x35, - 0x3e, 0x64, 0xc3, 0xad, 0x58, 0x6c, 0x30, 0x80, 0xb9, 0xc6, 0xa7, 0xea, - 0xeb, 0x58, 0x7e, 0x25, 0xa1, 0x18, 0x4c, 0x89, 0xf1, 0x00, 0xf4, 0x7e, - 0x89, 0x2f, 0xd9, 0xea, 0x62, 0x1b, 0x72, 0x3b, 0x2d, 0xcf, 0x9d, 0xe7, - 0x77, 0xb1, 0x6a, 0xc1, 0xc1, 0xb5, 0x5a, 0x1a, 0x74, 0x01, 0x06, 0xca, - 0xc1, 0xa0, 0x4d, 0xd4, 0xa9, 0xa6, 0x68, 0x82, 0x8e, 0x6c, 0x4e, 0x93, - 0x21, 0x2f, 0x9c, 0xe8, 0x98, 0x62, 0xf6, 0x34, 0xa1, 0x26, 0x21, 0xd1, - 0xfb, 0xae, 0x90, 0x7b, 0xeb, 0xbe, 0x21, 0xbb, 0x5b, 0x08, 0xe5, 0x52, - 0x3b, 0xa9, 0x8a, 0xa4, 0xc9, 0x83, 0x35, 0x66, 0x14, 0xb8, 0x4d, 0x67, - 0x20, 0x29, 0xf0, 0x2f, 0xa1, 0x52, 0x95, 0x1b, 0xd1, 0x26, 0xd3, 0xc4, - 0x58, 0xfe, 0xa7, 0x2e, 0x54, 0x60, 0xa5, 0xaf, 0x7f, 0x29, 0x09, 0x2a, - 0x9f, 0x52, 0x55, 0xc2, 0x15, 0xe6, 0x97, 0x3d, 0xb5, 0x1f, 0xf8, 0x86, - 0x7a, 0x6d, 0x77, 0x2c, 0x2b, 0xae, 0xb5, 0xdc, 0x55, 0x27, 0xb7, 0xa9, - 0xa9, 0xe5, 0xfe, 0xcf, 0x98, 0x8d, 0xf4, 0xcf, 0x79, 0xcd, 0xd3, 0x90, - 0x3f, 0x67, 0xae, 0x06, 0xfe, 0xe4, 0x7a, 0xba, 0x22, 0x26, 0xf4, 0x4f, - 0xae, 0xab, 0x75, 0x2b, 0x6c, 0xed, 0xe2, 0xd5, 0x74, 0xd3, 0xff, 0x76, - 0x13, 0xc5, 0x2d, 0xf1, 0x5a, 0x07, 0xd4, 0x2b, 0x0d, 0x0e, 0x1d, 0x12, - 0x08, 0x30, 0xad, 0xbc, 0x42, 0x61, 0x61, 0xf0, 0xa1, 0x75, 0xdc, 0x14, - 0xac, 0x2b, 0x03, 0x5c, 0xfd, 0xfe, 0x9a, 0x68, 0x7f, 0x6e, 0xf2, 0xb3, - 0x8a, 0xc1, 0xd7, 0xad, 0x3b, 0xfa, 0xd9, 0x5a, 0x5c, 0x77, 0x15, 0xb8, - 0x79, 0xf0, 0x92, 0xd1, 0xe1, 0x95, 0xde, 0x4b, 0x79, 0x45, 0x7f, 0x20, - 0x54, 0x11, 0xac, 0xe5, 0xd7, 0xd9, 0x59, 0xcf, 0x25, 0x47, 0x31, 0x61, - 0x85, 0x21, 0xde, 0x42, 0xb9, 0x29, 0x5f, 0xe4, 0x33, 0x66, 0x8c, 0xa5, - 0x1d, 0x06, 0x95, 0x64, 0xf8, 0xaa, 0xf8, 0x1a, 0x4b, 0xfc, 0x72, 0xbb, - 0xe5, 0x3c, 0x54, 0x38, 0xc7, 0xdb, 0xfe, 0x99, 0xf1, 0x94, 0x76, 0xc2, - 0x5f, 0xb1, 0x4e, 0x76, 0x89, 0xdb, 0x6e, 0x32, 0x78, 0x16, 0xa7, 0xd4, - 0x0f, 0x3d, 0x21, 0xcd, 0xf1, 0x12, 0x67, 0x5a, 0x9f, 0x8f, 0x01, 0x87, - 0xb0, 0x2b, 0x26, 0x77, 0x1f, 0x93, 0x03, 0x47, 0x14, 0x80, 0x2a, 0xc1, - 0x8a, 0xf6, 0xbc, 0xaf, 0x0b, 0xea, 0x35, 0x26, 0x8e, 0xee, 0xb7, 0x0f, - 0x75, 0x91, 0x18, 0x95, 0xbc, 0xab, 0x6d, 0xed, 0x7a, 0x2a, 0xf6, 0x26, - 0x3c, 0x62, 0xee, 0x24, 0x64, 0x2a, 0xfb, 0x2d, 0x81, 0x4f, 0x7c, 0x1d, - 0x4f, 0x52, 0xae, 0x31, 0xd3, 0x2f, 0xbb, 0xcc, 0xd5, 0xe9, 0xce, 0xe9, - 0xc7, 0x60, 0x4c, 0x94, 0xb3, 0x1b, 0x89, 0x74, 0xe9, 0x11, 0x5f, 0x30, - 0x0a, 0x1c, 0x94, 0x1b, 0x1f, 0xce, 0x24, 0x36, 0x81, 0xd5, 0x5b, 0xe3, - 0xbd, 0xcd, 0xba, 0x8d, 0x11, 0x90, 0xd8, 0xd7, 0x46, 0x2b, 0x14, 0x59, - 0x6f, 0x99, 0x9c, 0xed, 0xe8, 0x20, 0x9b, 0x3e, 0x40, 0x66, 0x2b, 0xf5, - 0x4f, 0x00, 0xb7, 0x15, 0xfe, 0xfe, 0x28, 0x8a, 0x77, 0xaa, 0x3b, 0x23, - 0x99, 0x51, 0x92, 0x60, 0xe6, 0xe1, 0x2d, 0x1a, 0xa0, 0xb6, 0x5d, 0x8a, - 0x16, 0x87, 0x76, 0xf6, 0xb4, 0x9e, 0x31, 0x4c, 0x19, 0x2b, 0x8d, 0xd3, - 0x93, 0xdd, 0x68, 0xcf, 0x43, 0xba, 0x76, 0x52, 0xb2, 0x97, 0x3c, 0x73, - 0xdd, 0x63, 0xad, 0xdd, 0x96, 0xf9, 0x15, 0xbd, 0xda, 0xd7, 0x57, 0x7c, - 0x5e, 0xa8, 0xec, 0xc9, 0xc8, 0xc9, 0x2b, 0x78, 0x74, 0x11, 0x0e, 0xea, - 0x6a, 0xdb, 0x89, 0x7b, 0xb6, 0x31, 0x82, 0x38, 0x0b, 0xe0, 0x99, 0x53, - 0xe3, 0x9e, 0x3a, 0x5a, 0x13, 0xbb, 0x60, 0x9e, 0xd9, 0x0c, 0x09, 0x3b, - 0xcf, 0x53, 0xb6, 0x7b, 0x61, 0xf5, 0xc6, 0x3c, 0xb2, 0xe1, 0x21, 0xc2, - 0x10, 0xe3, 0x9e, 0x14, 0xeb, 0xdb, 0x79, 0xb7, 0x57, 0xe9, 0x59, 0xfc, - 0x7b, 0xca, 0x61, 0x91, 0xb4, 0xc3, 0x6e, 0x8f, 0x6a, 0x22, 0x7d, 0x6d, - 0xe7, 0xe5, 0xc3, 0x59, 0xa6, 0xde, 0x54, 0x34, 0xdc, 0x4a, 0xe6, 0xb9, - 0xc8, 0x7e, 0x7e, 0x75, 0x7d, 0x74, 0x87, 0x02, 0x87, 0x21, 0x26, 0xed, - 0xfd, 0xbc, 0xb5, 0xf5, 0x10, 0x88, 0x5c, 0xdd, 0xef, 0x9e, 0x26, 0xab, - 0x99, 0x19, 0x3d, 0xe7, 0xa8, 0xf0, 0xf3, 0xd9, 0xf9, 0x7a, 0xb6, 0xbb, - 0x1f, 0x52, 0xdd, 0x3a, 0xb3, 0x9d, 0x50, 0xee, 0x1e, 0x93, 0xab, 0x79, - 0x8f, 0x18, 0x20, 0xb0, 0x7e, 0x6d, 0x3e, 0x79, 0x90, 0x94, 0x79, 0x6d, - 0xa4, 0x8a, 0xa8, 0xe3, 0x23, 0xad, 0xd4, 0x8f, 0x36, 0x0c, 0x87, 0x96, - 0xe0, 0x47, 0x9b, 0xf9, 0x6b, 0xcf, 0x8f, 0x7d, 0xd2, 0x31, 0xde, 0x23, - 0x76, 0xc2, 0x39, 0x00, 0xa3, 0x27, 0x72, 0x61, 0x56, 0x7c, 0xe6, 0x0d, - 0x69, 0xb0, 0xd0, 0xc7, 0xa7, 0xe4, 0xa7, 0xef, 0x89, 0xd8, 0x48, 0x36, - 0xe6, 0xfa, 0x0e, 0x4f, 0xe9, 0x38, 0x77, 0x43, 0xc7, 0x98, 0xa3, 0xb4, - 0x18, 0x34, 0x02, 0xaf, 0x3a, 0x51, 0x16, 0xb7, 0xab, 0xcc, 0x28, 0x82, - 0x23, 0x87, 0x64, 0x5e, 0x0f, 0x34, 0xdb, 0xc3, 0x17, 0xca, 0x81, 0x5d, - 0xeb, 0xd8, 0x2d, 0x5d, 0x86, 0x2b, 0x19, 0xf4, 0x4c, 0x5d, 0xd8, 0xf5, - 0xdf, 0x41, 0xc6, 0x98, 0x7b, 0xe8, 0x3d, 0x51, 0x86, 0xb8, 0x0d, 0x2d, - 0xbb, 0x75, 0x4b, 0x15, 0x17, 0xc4, 0xa4, 0xd4, 0x0c, 0x88, 0x5e, 0x63, - 0x69, 0x94, 0x05, 0x18, 0x99, 0x58, 0x3b, 0x42, 0xbc, 0x84, 0x19, 0x74, - 0x63, 0x2d, 0x14, 0xed, 0x1b, 0x91, 0xad, 0x91, 0x59, 0x96, 0x78, 0xb9, - 0x7e, 0xe8, 0x79, 0x99, 0x48, 0xf3, 0xbe, 0xa5, 0x5f, 0x6a, 0x6d, 0x37, - 0x96, 0xbc, 0x61, 0xe3, 0x6d, 0x4a, 0x7b, 0x71, 0x75, 0x09, 0x36, 0xd7, - 0x90, 0xee, 0xd7, 0xc5, 0xfa, 0x1a, 0xa6, 0x39, 0xdb, 0xc6, 0x26, 0xc9, - 0x06, 0x01, 0xe7, 0x39, 0xda, 0xc1, 0xf6, 0x35, 0x64, 0xfd, 0x00, 0x7f, - 0x1b, 0x8d, 0xd7, 0x66, 0xab, 0x4a, 0xdf, 0xa2, 0x09, 0x48, 0x1a, 0xf4, - 0xfd, 0x61, 0x02, 0xaf, 0x98, 0x32, 0x6c, 0xb1, 0xca, 0xf6, 0xb8, 0xfb, - 0x04, 0x01, 0xac, 0x81, 0xeb, 0x10, 0x72, 0x1d, 0x83, 0x28, 0xbd, 0xbb, - 0xcb, 0xd0, 0x12, 0x07, 0xdc, 0x2a, 0xaa, 0xee, 0x67, 0xfb, 0x94, 0x5f, - 0x86, 0xed, 0x3a, 0xad, 0xcd, 0x1b, 0xde, 0x27, 0x5c, 0x93, 0x78, 0x76, - 0x1f, 0x78, 0x75, 0xd6, 0x79, 0xab, 0x53, 0xd7, 0x70, 0xef, 0x5a, 0xca, - 0x05, 0xb5, 0x10, 0xf0, 0x30, 0xe3, 0xb2, 0xc9, 0x73, 0xff, 0x48, 0x01, - 0x34, 0xb0, 0x35, 0x7f, 0x35, 0xdc, 0x56, 0xe2, 0x94, 0xfd, 0x91, 0xb1, - 0xe6, 0x65, 0x10, 0x09, 0x8a, 0xad, 0xce, 0x4f, 0x7b, 0xd7, 0x01, 0xb6, - 0x4b, 0x37, 0x77, 0x25, 0x19, 0x69, 0x85, 0xe4, 0xef, 0xb1, 0xd5, 0xe2, - 0xe5, 0x51, 0xd6, 0x6b, 0x0b, 0xe8, 0x71, 0x6e, 0x51, 0xd8, 0xe0, 0x02, - 0x6a, 0x59, 0x9c, 0x8e, 0x44, 0xaf, 0x68, 0x2a, 0x7c, 0xf5, 0x95, 0xf0, - 0xd5, 0xb7, 0x95, 0xcb, 0x6c, 0xbe, 0x4c, 0x53, 0xe7, 0x97, 0x51, 0xb9, - 0x5c, 0xde, 0xf7, 0x6c, 0xd7, 0x97, 0x02, 0x7e, 0xae, 0xb1, 0x27, 0x72, - 0x1c, 0x02, 0x2d, 0x6d, 0x85, 0x41, 0x9d, 0xcb, 0xfa, 0x0f, 0x15, 0xb1, - 0x15, 0x30, 0xe8, 0xec, 0xad, 0xe5, 0xea, 0xbe, 0xe6, 0x93, 0xca, 0x8d, - 0x76, 0x6f, 0xd3, 0x95, 0x28, 0xae, 0x6b, 0xd6, 0x77, 0x47, 0x6c, 0x1f, - 0xee, 0x9f, 0x4d, 0x7d, 0x84, 0xad, 0xd6, 0xcf, 0x12, 0xaa, 0xe5, 0xf8, - 0x6e, 0xf9, 0x27, 0x95, 0x05, 0x45, 0x2a, 0x7b, 0x28, 0xde, 0xbf, 0xfd, - 0x53, 0x63, 0x71, 0x03, 0xd2, 0x59, 0xe8, 0x4a, 0xa3, 0xb7, 0x28, 0x5b, - 0x6b, 0x45, 0xb8, 0xca, 0xc0, 0x39, 0xce, 0x51, 0xba, 0x04, 0x74, 0xe7, - 0x78, 0xb4, 0x30, 0xf7, 0x6c, 0x50, 0xcf, 0xb2, 0x75, 0x85, 0xbb, 0x3d, - 0xcf, 0xbd, 0xaf, 0x31, 0x8a, 0x79, 0x68, 0xd1, 0xed, 0x4b, 0x4b, 0xfd, - 0xde, 0x25, 0xe3, 0xe8, 0x33, 0x79, 0xae, 0xd9, 0x2c, 0xa8, 0x19, 0x3c, - 0x5c, 0x6d, 0x5d, 0x2f, 0xda, 0xba, 0x6a, 0xd9, 0xde, 0x08, 0x6a, 0xd6, - 0xd9, 0x05, 0x2c, 0xf2, 0xbc, 0x9e, 0x04, 0xa4, 0x5b, 0xa5, 0xdb, 0x77, - 0x1b, 0xe1, 0xae, 0xa3, 0x17, 0xfd, 0x5d, 0x91, 0x5d, 0xbb, 0xc2, 0xb9, - 0x62, 0x61, 0x77, 0x2c, 0x9f, 0x36, 0x63, 0xf0, 0x3e, 0x34, 0x3a, 0xa3, - 0xca, 0x53, 0xed, 0xa8, 0xfd, 0x8f, 0x92, 0xc4, 0xc1, 0xf2, 0xb9, 0x77, - 0xdf, 0xee, 0x53, 0x0b, 0x18, 0x8c, 0x60, 0xcf, 0xd9, 0x0c, 0x75, 0xb6, - 0xc1, 0x29, 0x4e, 0x84, 0x8c, 0x63, 0x4e, 0xbb, 0xad, 0x73, 0xd6, 0xb4, - 0x39, 0x90, 0xf1, 0x39, 0x75, 0x93, 0x4c, 0xa5, 0x0e, 0x0a, 0x2b, 0x0e, - 0x97, 0x90, 0x30, 0x5f, 0x2e, 0x47, 0xb3, 0xd8, 0xb3, 0xaa, 0xc7, 0xdd, - 0x0b, 0x08, 0xe1, 0x73, 0xd8, 0xb2, 0xf8, 0x6e, 0xc3, 0x25, 0x7d, 0xdc, - 0x3e, 0x27, 0xa7, 0xdb, 0x30, 0xc5, 0xd0, 0x78, 0x1b, 0x96, 0x69, 0x7e, - 0x07, 0xae, 0xc9, 0xef, 0x6a, 0xfd, 0x36, 0x9a, 0x4b, 0x4d, 0x04, 0x4e, - 0xf0, 0x3a, 0x72, 0xeb, 0xe6, 0x65, 0x90, 0xc1, 0xa5, 0x1d, 0xb4, 0x17, - 0xec, 0x20, 0xa6, 0x2f, 0x6a, 0x59, 0xdb, 0x1a, 0x99, 0x63, 0xda, 0xad, - 0x8e, 0x8d, 0x1f, 0x5d, 0x27, 0x2c, 0x3e, 0x5c, 0x84, 0xcf, 0x38, 0x26, - 0x11, 0x7e, 0xb5, 0xe8, 0xa1, 0xfb, 0xf4, 0x32, 0x36, 0x3f, 0x7c, 0xf3, - 0xd0, 0xf2, 0xbb, 0x95, 0x56, 0xfb, 0xb7, 0x3c, 0x20, 0x3e, 0xf0, 0xf0, - 0x70, 0x16, 0x87, 0xbc, 0x29, 0xc8, 0xf1, 0xf4, 0x06, 0xfe, 0xd0, 0xeb, - 0xc3, 0xbc, 0xb1, 0xeb, 0xe8, 0xa8, 0xfc, 0xfb, 0x34, 0x47, 0x38, 0x73, - 0x57, 0xda, 0x4d, 0x43, 0xb6, 0xc9, 0xf2, 0xd5, 0x51, 0xdd, 0xb0, 0xf5, - 0xa1, 0x61, 0x53, 0x36, 0x9d, 0x3e, 0xcc, 0xb0, 0xe8, 0x56, 0x02, 0x50, - 0x3b, 0xf6, 0x34, 0xec, 0x6c, 0xdf, 0x59, 0x2d, 0x56, 0x1d, 0x23, 0xfc, - 0x01, 0x53, 0x46, 0xb0, 0x2c, 0x2c, 0x8c, 0x45, 0x84, 0x0f, 0x13, 0x0e, - 0x3c, 0x7d, 0x0c, 0x33, 0xb8, 0xc1, 0x48, 0xf5, 0x27, 0xff, 0xa4, 0x79, - 0x4a, 0x91, 0xe5, 0xd0, 0x16, 0xb7, 0x20, 0x5a, 0xf9, 0x4d, 0xbb, 0xf7, - 0xfe, 0x15, 0xff, 0x19, 0x2e, 0x59, 0xea, 0x7f, 0x86, 0x54, 0x96, 0x2f, - 0x7a, 0xfc, 0x68, 0x9e, 0x7f, 0xc6, 0xcb, 0xe7, 0xb7, 0x36, 0x48, 0xfc, - 0x39, 0xef, 0x1d, 0x6c, 0x91, 0xc6, 0xb3, 0x0f, 0x12, 0x60, 0x36, 0x0c, - 0x57, 0x15, 0x27, 0xf3, 0x95, 0xe8, 0x0b, 0x4f, 0xf8, 0xa3, 0x97, 0xa0, - 0xb1, 0xb5, 0xa6, 0x89, 0x47, 0x11, 0x6b, 0x23, 0x8e, 0xd4, 0xe9, 0x23, - 0x0b, 0x48, 0x70, 0xc9, 0x80, 0xea, 0x92, 0xe2, 0xa3, 0xe1, 0x86, 0x45, - 0x36, 0x42, 0x8c, 0x64, 0xcd, 0x6b, 0xc5, 0x11, 0x6e, 0x89, 0xd2, 0x86, - 0xee, 0xef, 0xad, 0xc1, 0x18, 0x7e, 0x3f, 0xda, 0x0b, 0x64, 0xb0, 0xcd, - 0x09, 0x3f, 0xec, 0xcf, 0x2e, 0x5b, 0x67, 0x2b, 0x5d, 0xdc, 0x07, 0xa4, - 0x97, 0x33, 0xb3, 0xb3, 0xb4, 0x85, 0xe7, 0x02, 0xe5, 0xc3, 0xa5, 0x23, - 0xa1, 0xfe, 0xf4, 0xdd, 0x88, 0x7e, 0xd9, 0xb3, 0x0c, 0xdd, 0x11, 0x9f, - 0xe8, 0x6e, 0xf9, 0xd0, 0x9d, 0x16, 0x8a, 0xca, 0x82, 0x85, 0xc2, 0x82, - 0x9c, 0x5f, 0x96, 0xcf, 0x45, 0x60, 0xcf, 0xb7, 0x2b, 0xfa, 0xda, 0x66, - 0x76, 0x11, 0xa5, 0xb9, 0x5d, 0xda, 0x5a, 0x46, 0x44, 0x5b, 0x11, 0x2d, - 0x14, 0xf8, 0x3f, 0xb6, 0xcf, 0xdc, 0xa8, 0x35, 0x12, 0xfb, 0xfb, 0xd6, - 0xe8, 0xf1, 0xb8, 0xb5, 0x5f, 0xaa, 0x49, 0xec, 0x45, 0xff, 0x75, 0xf9, - 0x74, 0x8c, 0xad, 0x4f, 0x3a, 0xce, 0xcb, 0x81, 0x23, 0xee, 0x31, 0xbb, - 0x1e, 0x42, 0x3e, 0xac, 0x57, 0x7e, 0x3d, 0x8e, 0xac, 0x8d, 0x65, 0xfa, - 0xed, 0xfc, 0x75, 0x85, 0x0e, 0x71, 0x65, 0x5d, 0xb1, 0x96, 0x8f, 0xc6, - 0xb4, 0x14, 0xee, 0x80, 0x4d, 0x80, 0x53, 0xaf, 0x23, 0xea, 0x96, 0xb2, - 0xe5, 0xa1, 0xf5, 0x8d, 0xe5, 0x63, 0xca, 0xce, 0x4a, 0x59, 0x87, 0x96, - 0x4c, 0x69, 0x52, 0x33, 0x44, 0x97, 0xeb, 0x71, 0x7e, 0x19, 0x2f, 0x59, - 0x8b, 0xb5, 0x57, 0xe5, 0x5c, 0x83, 0x37, 0xb9, 0xcd, 0x0d, 0xf4, 0xb2, - 0x45, 0x59, 0xad, 0x6d, 0x66, 0x5e, 0x4b, 0x83, 0x67, 0x5d, 0xe8, 0x65, - 0x72, 0xce, 0xb5, 0x0d, 0x90, 0xe5, 0x32, 0x0e, 0xe9, 0xb9, 0x7c, 0xac, - 0x5d, 0xfb, 0x26, 0xce, 0x73, 0xb3, 0xb0, 0x9f, 0xa7, 0x57, 0x96, 0x8e, - 0x44, 0x7e, 0x08, 0x6e, 0x5f, 0x6d, 0xfe, 0x85, 0xfe, 0xf9, 0x6c, 0x1b, - 0x4f, 0x2e, 0xe6, 0x23, 0x23, 0x60, 0x53, 0xee, 0x16, 0xc5, 0xcf, 0xcf, - 0xb5, 0x3d, 0xd5, 0xf0, 0x5e, 0x1e, 0xef, 0xa5, 0x7d, 0xdf, 0xba, 0x51, - 0x59, 0xd4, 0xa3, 0x8d, 0x30, 0x9d, 0x45, 0xe7, 0x66, 0x1a, 0x7b, 0x1f, - 0x75, 0x46, 0x5a, 0xb2, 0x15, 0x34, 0xba, 0x8f, 0xb3, 0xfc, 0xbe, 0xf7, - 0x3e, 0xca, 0x58, 0x2f, 0x75, 0x47, 0x2a, 0xa4, 0xae, 0x21, 0xd1, 0xcd, - 0xf4, 0x3c, 0x0f, 0x19, 0x70, 0xc7, 0x53, 0xdc, 0xd1, 0xff, 0x7c, 0x6e, - 0xe5, 0xdb, 0x18, 0x70, 0x4d, 0xe1, 0x26, 0xae, 0x7d, 0x3c, 0x86, 0xb6, - 0x12, 0x15, 0x95, 0xc5, 0x89, 0x3b, 0xea, 0x96, 0x06, 0x1e, 0x79, 0xb7, - 0x9e, 0xd7, 0x31, 0xd5, 0x9a, 0xac, 0xf1, 0xb6, 0xac, 0xce, 0x5d, 0xd3, - 0x79, 0x96, 0x6e, 0x9f, 0xf8, 0xec, 0x82, 0x2c, 0xfd, 0xe6, 0xeb, 0x69, - 0xbe, 0x78, 0xe1, 0xbd, 0xf3, 0x81, 0xc3, 0x90, 0x73, 0x6b, 0xd4, 0xf1, - 0xf1, 0xed, 0xf8, 0x68, 0xca, 0xb6, 0x78, 0x75, 0xdf, 0x3b, 0x62, 0x8a, - 0xe7, 0x33, 0x22, 0xcb, 0x3f, 0xeb, 0x6e, 0x3c, 0x96, 0xe6, 0x33, 0x9d, - 0x6b, 0x67, 0x83, 0x74, 0x7d, 0xba, 0x39, 0xda, 0xd3, 0x1b, 0xdb, 0x90, - 0x37, 0xa8, 0x73, 0xf1, 0x3b, 0xb5, 0x4a, 0xae, 0xbf, 0xf7, 0xbd, 0x15, - 0xf1, 0xf9, 0x95, 0xfe, 0xce, 0x79, 0x29, 0x6d, 0xe1, 0xf8, 0x3c, 0x3f, - 0x1a, 0x28, 0x54, 0x69, 0x27, 0xca, 0xb0, 0xb7, 0xe1, 0xda, 0xe1, 0x69, - 0xfe, 0x19, 0xd2, 0x79, 0xc6, 0xb8, 0xd5, 0x5d, 0x53, 0xbf, 0xc2, 0x00, - 0xdd, 0xd2, 0x4f, 0x7e, 0xdd, 0xc4, 0x73, 0xdb, 0x89, 0x6e, 0xbc, 0x78, - 0xce, 0xda, 0x87, 0xfa, 0xdd, 0x74, 0x96, 0x5c, 0xee, 0x22, 0xf7, 0x67, - 0xc9, 0xc3, 0x55, 0x5a, 0x7c, 0x1c, 0x47, 0x6c, 0x65, 0x88, 0x20, 0xcb, - 0xbd, 0x55, 0x15, 0x88, 0xbe, 0x20, 0x45, 0xbf, 0xfa, 0xaf, 0x39, 0x05, - 0x80, 0xdb, 0x29, 0xd3, 0xd5, 0x38, 0x9f, 0x82, 0x0a, 0x4f, 0xb8, 0x80, - 0x6e, 0xf1, 0x76, 0xef, 0xc1, 0x4d, 0xf3, 0x26, 0xd8, 0x44, 0xdd, 0xe4, - 0x9a, 0xeb, 0x93, 0x54, 0x5c, 0x7e, 0x9a, 0xe8, 0xd2, 0xb5, 0x8f, 0xf7, - 0xbe, 0xf4, 0xf0, 0x58, 0xb3, 0xfb, 0xd6, 0x1e, 0x8a, 0xdb, 0xe2, 0xd9, - 0xe1, 0x7d, 0x58, 0xb2, 0xa2, 0xf7, 0xf1, 0x37, 0xa7, 0xa5, 0xfd, 0x31, - 0xdd, 0xda, 0x9a, 0x72, 0x7f, 0x14, 0xaf, 0xe8, 0xc8, 0x0e, 0x97, 0x3d, - 0x8a, 0x47, 0xbb, 0x1d, 0x6e, 0x63, 0x8b, 0xa8, 0x77, 0x10, 0x71, 0xda, - 0x7b, 0xa8, 0x67, 0x67, 0x3e, 0xfc, 0x2c, 0xdd, 0xc4, 0xd8, 0x85, 0x46, - 0xde, 0xa5, 0x24, 0xfa, 0xca, 0x82, 0x1a, 0xed, 0xee, 0x4b, 0x9b, 0x68, - 0xf1, 0xd8, 0x39, 0x3f, 0x1c, 0x5d, 0xb3, 0x93, 0x9c, 0xe1, 0x8e, 0x8a, - 0x69, 0x7c, 0x3f, 0xba, 0x09, 0x46, 0xca, 0x98, 0x22, 0x92, 0x43, 0x6f, - 0x26, 0x8d, 0xbb, 0x54, 0x1e, 0x35, 0xfb, 0x4b, 0xc3, 0xe3, 0x91, 0xb8, - 0xb9, 0x39, 0xbf, 0xfe, 0x74, 0x47, 0x89, 0x7c, 0xfc, 0x3e, 0x2e, 0x3d, - 0x6e, 0x5d, 0xba, 0xd1, 0xe1, 0xbb, 0x9f, 0xd0, 0x8f, 0x8c, 0x0b, 0x93, - 0xf5, 0xd0, 0x95, 0xc2, 0xc1, 0x7d, 0x41, 0xe2, 0x2e, 0x7f, 0x07, 0x45, - 0x14, 0x74, 0xeb, 0x9f, 0xe3, 0xb1, 0x49, 0x4a, 0x61, 0x50, 0x65, 0xbd, - 0x67, 0xd5, 0x76, 0x23, 0xc7, 0x81, 0x13, 0x88, 0x74, 0xa6, 0x4b, 0xc5, - 0x83, 0x4f, 0xe6, 0xbf, 0xfa, 0x55, 0x00, 0x46, 0xee, 0xbd, 0xbb, 0xde, - 0x0d, 0xab, 0xd7, 0xd8, 0xa5, 0x1b, 0x97, 0x2d, 0x89, 0xfd, 0xae, 0x5e, - 0xd4, 0xf9, 0xd5, 0x2a, 0x96, 0x44, 0x1f, 0xf4, 0xd9, 0x2d, 0xe2, 0xce, - 0xfe, 0xac, 0x51, 0x44, 0xd4, 0x5b, 0x5d, 0x5e, 0x20, 0xb6, 0x3c, 0xd2, - 0xc1, 0xb3, 0x0c, 0xa7, 0xf6, 0x35, 0x74, 0x6b, 0xbd, 0xd7, 0x90, 0x2b, - 0x27, 0x30, 0x8f, 0xb4, 0xe0, 0x5e, 0x1f, 0x13, 0xe1, 0x6b, 0xe8, 0xc2, - 0xca, 0x87, 0xff, 0xa2, 0xc6, 0x2e, 0xb4, 0xb1, 0x6b, 0x6c, 0x8d, 0xed, - 0x52, 0x44, 0xdf, 0x1f, 0x4d, 0x4e, 0x7b, 0xf7, 0x79, 0xeb, 0x3f, 0x7e, - 0x9c, 0x4a, 0xbe, 0xc6, 0xb5, 0x27, 0xb6, 0xaf, 0xe6, 0xb2, 0xd6, 0xe5, - 0x57, 0xe7, 0x71, 0xff, 0xf0, 0x36, 0x59, 0xfc, 0xbd, 0xa9, 0xb9, 0x4d, - 0x83, 0x2f, 0x2c, 0xc7, 0x33, 0xe3, 0xb5, 0xf3, 0x45, 0xb9, 0xfd, 0x94, - 0x18, 0x4e, 0x42, 0xab, 0x1e, 0x89, 0xdf, 0x77, 0x1b, 0xc4, 0xff, 0xb6, - 0x6c, 0xfc, 0x2d, 0xa5, 0xf5, 0xc8, 0xbd, 0x4d, 0x61, 0xad, 0x03, 0x61, - 0x63, 0xaf, 0xef, 0x31, 0x7b, 0x04, 0xa3, 0x3e, 0xc6, 0x1c, 0x19, 0x50, - 0x2a, 0xe1, 0x51, 0x12, 0x5a, 0x91, 0x8e, 0x04, 0xfc, 0x5e, 0xd4, 0xde, - 0xea, 0x3a, 0x33, 0xd7, 0x07, 0xc4, 0x2a, 0xd9, 0xd2, 0x2f, 0xfa, 0x70, - 0xf7, 0xc8, 0x0c, 0xba, 0x65, 0xe2, 0xcd, 0x76, 0xfa, 0xf9, 0xb5, 0xb4, - 0x8b, 0xc4, 0xee, 0x7c, 0xdb, 0x30, 0x40, 0xf1, 0x54, 0x24, 0x13, 0x47, - 0xe5, 0x10, 0x80, 0x74, 0x31, 0xd1, 0x1d, 0x56, 0x56, 0xaa, 0x9d, 0x00, - 0xe1, 0x68, 0x3c, 0xc2, 0xa6, 0xe0, 0xad, 0xbc, 0xe9, 0xc1, 0xa1, 0xd5, - 0x68, 0x7e, 0x86, 0xe3, 0x83, 0x13, 0x01, 0x54, 0xbf, 0x5e, 0xae, 0x64, - 0x5b, 0x13, 0x83, 0xd8, 0xd2, 0x59, 0xb7, 0x08, 0x86, 0xe4, 0xad, 0x96, - 0x47, 0xf4, 0xa3, 0xbc, 0x58, 0x20, 0xd1, 0x32, 0xd2, 0x2d, 0x55, 0xb7, - 0xe1, 0xb9, 0xbf, 0x29, 0xae, 0x8b, 0x44, 0x1b, 0x11, 0xb7, 0x21, 0x2b, - 0x07, 0xa7, 0x0b, 0x90, 0x97, 0x17, 0x8e, 0x6a, 0x23, 0x88, 0x8d, 0x0f, - 0x0e, 0xc2, 0xfb, 0x14, 0xbc, 0x82, 0xeb, 0xed, 0x90, 0xfa, 0x7e, 0x05, - 0x35, 0xea, 0x4a, 0xef, 0x88, 0x67, 0x93, 0x40, 0x50, 0x8a, 0x4f, 0x54, - 0x1a, 0xbb, 0x9b, 0x88, 0xa8, 0x63, 0x48, 0x7b, 0xc8, 0x8b, 0xa0, 0xa0, - 0x5e, 0x49, 0xe4, 0xa6, 0xa3, 0x0e, 0x0a, 0xf9, 0x0a, 0x05, 0xd4, 0xb6, - 0x1b, 0xf4, 0xf7, 0x79, 0x41, 0x4e, 0xff, 0x90, 0x59, 0x5c, 0xa5, 0xbb, - 0xe4, 0x13, 0x67, 0x74, 0x46, 0x76, 0xb6, 0x65, 0xd2, 0x96, 0x67, 0x61, - 0x8d, 0xa1, 0x0c, 0x30, 0x1d, 0x08, 0xc7, 0x85, 0xca, 0x99, 0xc9, 0x3a, - 0x97, 0x64, 0xbd, 0xa8, 0xfb, 0x7b, 0xdf, 0xbe, 0x9c, 0x7b, 0xdc, 0x4a, - 0xd1, 0x11, 0xeb, 0xf8, 0x30, 0x70, 0x29, 0x70, 0x3c, 0xe2, 0x47, 0x1f, - 0x60, 0xbc, 0xe2, 0xd5, 0xd6, 0xfa, 0x6a, 0xef, 0x5b, 0x2b, 0x9e, 0xcf, - 0x84, 0xdb, 0x94, 0xd0, 0xa9, 0x7d, 0x8d, 0x66, 0x87, 0xc2, 0x90, 0x11, - 0x1f, 0x31, 0xb4, 0x74, 0xd0, 0x39, 0x78, 0x7d, 0x5c, 0x09, 0xbd, 0xf2, - 0x5d, 0x09, 0x50, 0x69, 0x21, 0x9b, 0x92, 0x0f, 0x95, 0x78, 0x2b, 0xb2, - 0xee, 0xec, 0xf5, 0xd5, 0xba, 0xfb, 0xab, 0xf1, 0xb2, 0x10, 0xde, 0x87, - 0x0f, 0xa2, 0x4b, 0x41, 0x7f, 0x07, 0x1a, 0x94, 0x8a, 0x83, 0x54, 0x7e, - 0x39, 0xe2, 0x1a, 0xec, 0x95, 0xe9, 0xca, 0x2b, 0xe8, 0xd7, 0x74, 0x6f, - 0x0c, 0xe7, 0x1d, 0xfb, 0xfa, 0x6b, 0xca, 0x05, 0x39, 0xa1, 0xfd, 0xef, - 0xf9, 0xb9, 0x5b, 0x52, 0x93, 0x70, 0xc4, 0x93, 0xd7, 0x30, 0x18, 0x11, - 0xed, 0xb4, 0xe4, 0xe0, 0x40, 0x68, 0x87, 0x05, 0x87, 0x13, 0x11, 0x2e, - 0x08, 0x75, 0x56, 0xc3, 0xb4, 0x8e, 0xad, 0x51, 0x0e, 0xaa, 0x04, 0x19, - 0x33, 0x2e, 0xb0, 0x59, 0x61, 0xe7, 0xbc, 0xe6, 0x80, 0xf6, 0xa3, 0x35, - 0x5c, 0x8e, 0xb8, 0x14, 0x16, 0x8a, 0xff, 0x38, 0x8b, 0x2c, 0xd7, 0xd2, - 0x41, 0x94, 0x83, 0x76, 0xad, 0xa9, 0x81, 0x73, 0x4a, 0x95, 0x9b, 0x53, - 0xc9, 0xa7, 0xb2, 0x05, 0xd2, 0x5d, 0x7c, 0x5a, 0xf6, 0xdc, 0x1b, 0xdb, - 0x24, 0x86, 0x2b, 0x9c, 0x67, 0x6d, 0x43, 0x3c, 0xdd, 0x52, 0xfa, 0x37, - 0x3f, 0x27, 0x91, 0xe2, 0xbd, 0x69, 0x4b, 0x4d, 0xb5, 0x80, 0xd1, 0xcc, - 0x37, 0x3d, 0x87, 0xae, 0x46, 0xe9, 0x16, 0xf7, 0x20, 0xe5, 0x90, 0xcb, - 0x96, 0xed, 0x9b, 0x72, 0x6a, 0xa7, 0xba, 0x8e, 0xf0, 0x03, 0x24, 0xdc, - 0x56, 0xcd, 0x83, 0xc0, 0x6d, 0xd2, 0xc9, 0x6f, 0x85, 0x56, 0xaa, 0x31, - 0x79, 0x17, 0xbe, 0x59, 0x49, 0x1e, 0x80, 0xd3, 0x62, 0x45, 0xa0, 0x93, - 0x76, 0x09, 0x4c, 0x01, 0x91, 0x6a, 0xa8, 0x09, 0x6d, 0x6a, 0x90, 0x33, - 0x48, 0x4f, 0x31, 0xe4, 0x6d, 0xfc, 0x3a, 0xad, 0x03, 0x01, 0x44, 0x4d, - 0x4c, 0xb0, 0x71, 0x82, 0xe2, 0x45, 0x47, 0x47, 0x26, 0x33, 0x04, 0xa8, - 0xe0, 0xe2, 0x84, 0xd0, 0xe6, 0x71, 0x6c, 0xbe, 0x72, 0x80, 0xab, 0xb8, - 0xad, 0x76, 0x40, 0x6c, 0xc3, 0xbd, 0x27, 0xe2, 0x12, 0x1a, 0xd4, 0xd9, - 0xd2, 0x70, 0x0f, 0x2d, 0x9c, 0x24, 0x34, 0xd8, 0x6a, 0xfb, 0xe2, 0xbc, - 0xd5, 0xfa, 0x78, 0x39, 0xcb, 0x10, 0xfa, 0xff, 0x4a, 0x9f, 0xb9, 0xa9, - 0xd9, 0xf0, 0xce, 0x21, 0xad, 0x79, 0xe6, 0x94, 0x44, 0x0e, 0xb2, 0x20, - 0x4a, 0xf3, 0x9c, 0xb7, 0x3e, 0xdc, 0x03, 0x0d, 0x2d, 0xdb, 0xdc, 0xfd, - 0x76, 0xd4, 0xf8, 0x9a, 0x3e, 0xa9, 0x56, 0x0e, 0xdd, 0x5d, 0x3e, 0xa9, - 0xf6, 0xf0, 0x0d, 0x3b, 0xa9, 0x29, 0x06, 0x04, 0xca, 0xcd, 0xf2, 0xca, - 0xde, 0xf8, 0x48, 0xd8, 0x52, 0xd4, 0x86, 0x68, 0x12, 0xd3, 0xd6, 0x7d, - 0xc9, 0x4d, 0x59, 0x52, 0x76, 0x97, 0x4f, 0xe3, 0x80, 0xb7, 0x3e, 0xe5, - 0xb5, 0xa3, 0x74, 0x65, 0xf5, 0xf2, 0x1d, 0xac, 0x60, 0x0b, 0x2c, 0x3b, - 0x3c, 0x5e, 0xa7, 0x74, 0xa8, 0xb5, 0xa7, 0x1c, 0xac, 0x00, 0x4f, 0x97, - 0xf7, 0x94, 0xf5, 0xe7, 0x67, 0x5b, 0x04, 0xe1, 0xce, 0xb7, 0x4f, 0x1b, - 0x64, 0xb0, 0xb6, 0x80, 0x62, 0x7b, 0xb7, 0x0f, 0x10, 0x0a, 0xc5, 0xf6, - 0xb8, 0x5b, 0xa8, 0x53, 0x05, 0xd6, 0x8c, 0x0f, 0x44, 0xd5, 0x10, 0xc6, - 0x92, 0x11, 0x54, 0xd1, 0xf9, 0xab, 0x13, 0x9b, 0xfd, 0x62, 0x75, 0xe4, - 0x40, 0x09, 0x26, 0xaa, 0x33, 0x9a, 0xb0, 0x89, 0x7b, 0x0c, 0xf3, 0x33, - 0xb0, 0xd9, 0xac, 0xc8, 0xba, 0x83, 0x49, 0x9a, 0x47, 0xd8, 0x7c, 0x44, - 0x4c, 0xa4, 0x66, 0x27, 0xc8, 0xee, 0xb5, 0x5b, 0x09, 0x07, 0x00, 0x3b, - 0xe7, 0x5e, 0x3e, 0xd5, 0x21, 0xc2, 0x02, 0xe2, 0x85, 0xab, 0x29, 0x79, - 0x4f, 0x04, 0x12, 0xe8, 0x21, 0xf4, 0x0e, 0x49, 0x3b, 0x1f, 0xb4, 0xbe, - 0x5b, 0x01, 0x07, 0x50, 0x48, 0xcf, 0x21, 0xae, 0x8b, 0x8e, 0xd5, 0xf8, - 0xe1, 0xd3, 0x07, 0xc0, 0x71, 0x72, 0x38, 0x84, 0xda, 0xb4, 0x9b, 0x08, - 0x27, 0xcd, 0x45, 0xd9, 0xc2, 0x2e, 0xc5, 0x97, 0x88, 0x48, 0x6f, 0x56, - 0x10, 0x61, 0x1c, 0x70, 0x9e, 0xc2, 0xc1, 0x96, 0xbe, 0x20, 0x43, 0x13, - 0xe0, 0x3a, 0x85, 0x82, 0x26, 0x12, 0x29, 0xc5, 0x24, 0x09, 0x07, 0x72, - 0x2d, 0x4e, 0xd0, 0x15, 0xc2, 0x56, 0x61, 0x86, 0x74, 0x94, 0xbd, 0x24, - 0x1f, 0xfc, 0xde, 0xa4, 0x2e, 0x27, 0x2e, 0xce, 0xb6, 0x45, 0x46, 0x02, - 0x8d, 0x6b, 0xa2, 0xd2, 0x15, 0x65, 0x50, 0x76, 0x6f, 0xa9, 0x52, 0x80, - 0x91, 0xc1, 0x7b, 0x06, 0x16, 0x22, 0x58, 0x7a, 0xd1, 0x43, 0x95, 0xb0, - 0x48, 0xde, 0x8a, 0xbe, 0xbb, 0x12, 0x77, 0xc7, 0x07, 0x38, 0x3a, 0xc8, - 0xe9, 0x70, 0xcf, 0x53, 0xac, 0xbd, 0xe9, 0xa3, 0x00, 0x96, 0x42, 0xb2, - 0x8a, 0x96, 0xe1, 0xee, 0xbb, 0x0a, 0x2a, 0xed, 0x4e, 0x10, 0x9f, 0xb3, - 0xf4, 0xba, 0xb2, 0xeb, 0x4b, 0x6e, 0xad, 0xed, 0x60, 0x74, 0x3b, 0x58, - 0xa3, 0x14, 0xad, 0xbb, 0xac, 0xa2, 0xe7, 0x70, 0x09, 0x97, 0xcf, 0xda, - 0x9c, 0xd5, 0xf0, 0x70, 0x99, 0xd3, 0x02, 0x6e, 0xd4, 0xe0, 0xaf, 0x71, - 0xd0, 0x57, 0x31, 0x18, 0x3a, 0xed, 0x8c, 0xaa, 0x26, 0x05, 0xe2, 0xab, - 0x9e, 0xaa, 0xdb, 0x5b, 0xb4, 0x9f, 0xe7, 0xfb, 0xe2, 0x92, 0x69, 0x72, - 0x67, 0xf6, 0xb2, 0x53, 0x26, 0x12, 0xd1, 0x38, 0xed, 0xae, 0x13, 0x42, - 0x7f, 0x5f, 0x8a, 0x23, 0xc2, 0xe8, 0x74, 0x7d, 0x47, 0x0a, 0x2c, 0xed, - 0x8a, 0x08, 0x2f, 0x92, 0xd2, 0x3a, 0xca, 0x4a, 0xb7, 0xb3, 0x5a, 0xf2, - 0xef, 0x21, 0xe1, 0x0a, 0xc8, 0xc7, 0x1a, 0x7b, 0xdf, 0x08, 0xa4, 0xd0, - 0xa7, 0xf5, 0xb7, 0x6a, 0xb6, 0xc6, 0x7a, 0x44, 0xaf, 0x38, 0xa2, 0x21, - 0x1c, 0xee, 0xfd, 0xc9, 0x6e, 0xb9, 0x5b, 0xdb, 0x06, 0xf6, 0xef, 0xae, - 0xeb, 0x0a, 0x30, 0x7c, 0x61, 0x43, 0xef, 0x9e, 0x8f, 0x3c, 0xb3, 0xa8, - 0x2a, 0xe0, 0xa0, 0x71, 0xa8, 0xa3, 0x5a, 0xcf, 0x50, 0xaa, 0x19, 0x9a, - 0xac, 0x11, 0x48, 0xda, 0x86, 0x28, 0x6c, 0x06, 0x21, 0x1d, 0x79, 0xa9, - 0x78, 0x48, 0xa0, 0x9d, 0x3c, 0xf3, 0x01, 0x06, 0xbe, 0xbf, 0x28, 0x51, - 0xe0, 0x55, 0x97, 0x53, 0x1a, 0x72, 0x5e, 0x32, 0xff, 0x0c, 0x97, 0xef, - 0xaf, 0x52, 0x30, 0xe8, 0x00, 0x8e, 0x0d, 0x30, 0x59, 0x86, 0xe1, 0x72, - 0x1e, 0xef, 0xff, 0x75, 0xf7, 0x6e, 0x84, 0xd3, 0x4d, 0xcd, 0xee, 0x0f, - 0x8f, 0x30, 0xf0, 0x6f, 0xe7, 0x1c, 0xf0, 0xfe, 0x0c, 0xd4, 0x47, 0x04, - 0x03, 0xb9, 0x90, 0x59, 0x73, 0x01, 0x80, 0x00, 0xee, 0x8e, 0x66, 0x9a, - 0x1b, 0x90, 0x77, 0xfe, 0xcd, 0x03, 0xca, 0xed, 0x0f, 0x5b, 0xd6, 0xc4, - 0x70, 0x16, 0x7f, 0x86, 0x8a, 0xfd, 0x3f, 0xb8, 0x6a, 0xa5, 0x21, 0x06, - 0x71, 0x00, 0x2f, 0xa0, 0x2b, 0x5c, 0xcb, 0xe5, 0xbb, 0x9a, 0x9b, 0x7a, - 0xaa, 0x80, 0x74, 0xac, 0x0b, 0x2b, 0x79, 0x42, 0x07, 0x63, 0xd9, 0x9c, - 0x86, 0x9d, 0xaa, 0x4d, 0xfe, 0x60, 0x48, 0x5c, 0x1b, 0x70, 0xc4, 0xfb, - 0x93, 0x7f, 0x03, 0xff, 0x47, 0x3d, 0xcc, 0x14, 0x4c, 0x80, 0xea, 0x13, - 0x42, 0xe2, 0xa0, 0x57, 0x9c, 0x59, 0x27, 0x60, 0xde, 0xc9, 0xd5, 0xf0, - 0x67, 0xf8, 0x49, 0x15, 0xd7, 0x15, 0x3b, 0xee, 0x1f, 0x47, 0xf3, 0xf7, - 0xaf, 0x3c, 0xfd, 0xfd, 0x6b, 0x3f, 0x7f, 0xff, 0x56, 0x2f, 0xa3, 0xfa, - 0xd8, 0x9f, 0xf1, 0x0f, 0x99, 0x4f, 0x68, 0x56, 0xd7, 0xe0, 0x76, 0x42, - 0xec, 0x50, 0x1d, 0x2e, 0xff, 0x50, 0xa8, 0x23, 0xd5, 0xe2, 0x7f, 0x70, - 0xb1, 0x89, 0xa0, 0x68, 0x22, 0xa8, 0x0a, 0x7e, 0xb0, 0x1a, 0x25, 0x42, - 0xa0, 0x9b, 0x33, 0xec, 0x27, 0xe0, 0xd5, 0x24, 0x9b, 0xe9, 0x1f, 0x33, - 0x06, 0xfc, 0x19, 0xa1, 0x1a, 0xc3, 0x32, 0x12, 0xfe, 0x8c, 0x3f, 0xa3, - 0xab, 0x68, 0xba, 0xdf, 0x95, 0xe9, 0x49, 0xca, 0xa6, 0x60, 0xa2, 0x3a, - 0xa6, 0xbb, 0xbf, 0x2f, 0xb5, 0xa8, 0x26, 0x55, 0x11, 0x99, 0xea, 0xe9, - 0x86, 0x80, 0xe5, 0x8d, 0xcd, 0x26, 0x4a, 0x08, 0xb2, 0x9d, 0x90, 0x77, - 0x68, 0x6f, 0x7b, 0xd3, 0x11, 0x91, 0x02, 0x29, 0x17, 0x8c, 0xed, 0x7f, - 0x7c, 0xa5, 0x03, 0xb3, 0x2e, 0x68, 0xff, 0x14, 0xef, 0xd1, 0x00, 0x58, - 0x01, 0x30, 0x1d, 0x0a, 0xf7, 0x82, 0x61, 0x77, 0x7a, 0x59, 0xfd, 0x07, - 0x91, 0x1a, 0x7d, 0x87, 0x95, 0x34, 0xc8, 0xc9, 0x44, 0xc1, 0x14, 0xa8, - 0x8b, 0xab, 0xff, 0x87, 0xad, 0x8f, 0xb0, 0x0e, 0x9f, 0x33, 0xaa, 0xad, - 0xac, 0x2b, 0xf4, 0x30, 0xc1, 0x64, 0x0b, 0x2b, 0x07, 0x6d, 0x4f, 0xdc, - 0x96, 0x0d, 0x5b, 0x42, 0x65, 0xc4, 0x90, 0xf9, 0x2d, 0xe4, 0x35, 0xf8, - 0x53, 0x7e, 0x66, 0xa6, 0xee, 0xc7, 0xb1, 0xff, 0x44, 0xec, 0x3f, 0x8c, - 0x9d, 0xaa, 0x53, 0xaa, 0xe1, 0x28, 0xdf, 0xac, 0xc3, 0x93, 0x17, 0xbb, - 0xd5, 0x90, 0x94, 0x4b, 0x01, 0xf5, 0xc1, 0xf3, 0x6a, 0x81, 0x66, 0x15, - 0x99, 0xef, 0x8a, 0x48, 0xfe, 0x89, 0x58, 0x90, 0x40, 0x3e, 0x67, 0x06, - 0xd6, 0x5c, 0x4d, 0x94, 0x96, 0x3e, 0xaf, 0x11, 0xe2, 0x60, 0x62, 0xe8, - 0x3e, 0x75, 0xe6, 0xdb, 0x49, 0x31, 0xfb, 0x37, 0xd7, 0xf9, 0x99, 0xec, - 0x4a, 0xed, 0x29, 0x80, 0xae, 0xda, 0xf1, 0xcf, 0xe4, 0x93, 0xa9, 0xc1, - 0xdb, 0x9a, 0xb8, 0x7a, 0xff, 0x73, 0x86, 0xe0, 0x3b, 0x20, 0x16, 0xc9, - 0x69, 0xb9, 0x71, 0x00, 0x08, 0x0d, 0xc2, 0x27, 0xd0, 0xcc, 0xcf, 0xe5, - 0xe9, 0x28, 0xa5, 0x76, 0xe3, 0x4f, 0xa8, 0xdd, 0xf8, 0x43, 0x6d, 0x1b, - 0x78, 0x75, 0x90, 0x81, 0xa7, 0x6c, 0xe8, 0x0a, 0xef, 0x2c, 0xf0, 0x53, - 0x2d, 0x11, 0x12, 0x7a, 0xe0, 0x75, 0xe3, 0xb7, 0x4d, 0xc5, 0xb9, 0x45, - 0xb6, 0xb8, 0xc1, 0xd2, 0x97, 0x69, 0xbf, 0xfa, 0xd9, 0x0d, 0x89, 0x90, - 0xe3, 0xd1, 0x13, 0x53, 0xb8, 0x54, 0x59, 0x6e, 0xae, 0xb4, 0x0a, 0xb6, - 0x49, 0xe3, 0xde, 0xa9, 0xd3, 0x95, 0x6a, 0x1e, 0xfc, 0x6b, 0x79, 0x15, - 0x56, 0xd5, 0x00, 0x47, 0x69, 0x0a, 0x33, 0x31, 0x7b, 0x8a, 0x96, 0x33, - 0xce, 0xd2, 0x3f, 0xc2, 0xe7, 0x6b, 0x54, 0x1e, 0x5f, 0x63, 0x08, 0x50, - 0x23, 0x9e, 0xe8, 0xe7, 0xf7, 0x18, 0x28, 0x5c, 0x43, 0x05, 0xf1, 0x8d, - 0x5d, 0x42, 0xfd, 0xff, 0xa6, 0xc2, 0xbe, 0x10, 0x2a, 0x07, 0xb9, 0x97, - 0x75, 0xfb, 0x68, 0xa1, 0xfe, 0xa0, 0x6a, 0x0d, 0xb1, 0xba, 0xbf, 0xeb, - 0xe8, 0x3a, 0xd4, 0x05, 0x1b, 0x63, 0xfa, 0x1e, 0xaa, 0xb9, 0xd2, 0x05, - 0x17, 0x43, 0xd5, 0x60, 0xa6, 0xa9, 0x92, 0xfa, 0x3e, 0x2c, 0x01, 0x83, - 0x87, 0x82, 0x84, 0x44, 0xd2, 0x10, 0x36, 0x39, 0x73, 0x8d, 0x0c, 0x42, - 0x93, 0x63, 0x83, 0x8c, 0xbb, 0x2e, 0x8a, 0xec, 0xfc, 0xb0, 0x1c, 0x7c, - 0xa0, 0x58, 0xce, 0x00, 0x6b, 0xbe, 0xfd, 0x4e, 0xb1, 0xf1, 0x40, 0xdc, - 0xbb, 0x7f, 0x87, 0x6a, 0xf8, 0x0a, 0x56, 0xfc, 0xa9, 0xd5, 0x58, 0x2d, - 0x8f, 0x3e, 0x58, 0x60, 0xe9, 0xf7, 0xb8, 0x3c, 0x0f, 0xfe, 0xbf, 0xeb, - 0x7f, 0x13, 0x82, 0x05, 0x6c, 0x13, 0xdb, 0xa3, 0x6f, 0x7a, 0xdf, 0x94, - 0x4d, 0x71, 0xf3, 0xa0, 0x95, 0x49, 0x30, 0xb7, 0x97, 0x8e, 0x22, 0xea, - 0xc8, 0x2f, 0xe0, 0x95, 0x92, 0x88, 0x90, 0xdc, 0x29, 0x6a, 0x1f, 0x03, - 0xa4, 0x95, 0x3f, 0x62, 0x8a, 0x87, 0x96, 0xaa, 0x80, 0x48, 0xda, 0xb6, - 0x66, 0x6e, 0x08, 0x91, 0xd0, 0xed, 0xed, 0xfe, 0x5b, 0x27, 0xe7, 0xc2, - 0xbf, 0x96, 0xf0, 0x50, 0xa2, 0x08, 0xc4, 0x02, 0xe2, 0xd8, 0xfe, 0x6d, - 0xe5, 0x5c, 0xdf, 0x8f, 0x5a, 0xff, 0xaa, 0xd1, 0x47, 0xdd, 0xaf, 0xe2, - 0x11, 0x84, 0x00, 0x6b, 0xbc, 0x8e, 0x6b, 0x2a, 0xaa, 0xe9, 0xa2, 0xc7, - 0x38, 0xdf, 0x93, 0x76, 0x28, 0xd5, 0x0c, 0xa5, 0x5e, 0xdf, 0x93, 0xc5, - 0x1d, 0x00, 0x60, 0x7a, 0xa8, 0x66, 0xe6, 0x36, 0x21, 0x43, 0x9b, 0x31, - 0x34, 0xc3, 0xb0, 0x47, 0x2c, 0xc4, 0x68, 0xb3, 0x36, 0x45, 0x08, 0xdf, - 0x50, 0xca, 0x89, 0xbf, 0x50, 0x22, 0x08, 0xec, 0xb8, 0xb1, 0x3d, 0xaa, - 0xdd, 0xdc, 0xa0, 0xf6, 0x20, 0xa2, 0x37, 0x8d, 0xcd, 0x4e, 0xab, 0x19, - 0xae, 0x7d, 0x6d, 0x93, 0x88, 0x69, 0x58, 0xa5, 0x06, 0xde, 0x6b, 0xf3, - 0x7f, 0x68, 0xbb, 0xd8, 0xfd, 0xa5, 0x4b, 0x53, 0x33, 0x3f, 0xfc, 0x1e, - 0xd9, 0x51, 0x6a, 0xce, 0xeb, 0xf6, 0x23, 0xa2, 0xbe, 0x37, 0xe0, 0x14, - 0xdf, 0x33, 0xc5, 0x77, 0xe7, 0x9e, 0xc3, 0xcf, 0xb7, 0x5f, 0x3d, 0x7d, - 0xc7, 0xb3, 0xa7, 0x6f, 0xbe, 0x7b, 0xba, 0xca, 0xe4, 0x77, 0x07, 0xb5, - 0x7d, 0xdb, 0x1f, 0x34, 0xf8, 0xe0, 0xbb, 0x85, 0x9a, 0x7d, 0x63, 0xe1, - 0x37, 0x86, 0x2b, 0x62, 0x78, 0xf3, 0x88, 0xf0, 0xcd, 0x13, 0x5c, 0xcc, - 0x3d, 0x42, 0x69, 0x09, 0x9f, 0x73, 0x5d, 0xf5, 0x33, 0x5f, 0x75, 0x67, - 0x59, 0x57, 0x13, 0xdf, 0xab, 0x57, 0x65, 0x06, 0x48, 0xcd, 0xca, 0x75, - 0x59, 0x35, 0x9e, 0xbb, 0x94, 0x15, 0x7d, 0xe3, 0x39, 0x70, 0x98, 0xfc, - 0xf2, 0x62, 0xe8, 0x6b, 0x08, 0xba, 0xfa, 0xc6, 0x6c, 0x08, 0x06, 0x6b, - 0xfc, 0xd3, 0xe1, 0xd4, 0xa3, 0xea, 0xc1, 0xe1, 0x04, 0x81, 0x40, 0xa0, - 0xee, 0x8a, 0x19, 0x20, 0x62, 0x1a, 0x57, 0xbc, 0x6e, 0x09, 0x4b, 0x40, - 0xba, 0xf3, 0xa1, 0x11, 0x11, 0x43, 0x29, 0x5f, 0x5f, 0x4a, 0x32, 0x01, - 0x93, 0x0c, 0xd5, 0x98, 0x34, 0x1c, 0x50, 0x4d, 0xc9, 0x15, 0x77, 0x10, - 0x44, 0x0e, 0x91, 0x53, 0x7b, 0x35, 0x22, 0x86, 0x72, 0x84, 0xe3, 0x08, - 0xf7, 0x38, 0x1c, 0xee, 0x71, 0x44, 0xb8, 0x98, 0xd8, 0xab, 0xf1, 0xe3, - 0x24, 0xe8, 0x41, 0x1f, 0xcc, 0x5a, 0x21, 0x9e, 0x6a, 0x93, 0x72, 0xb8, - 0x54, 0x76, 0x67, 0xa5, 0x63, 0xa2, 0x10, 0x04, 0x94, 0x48, 0x5d, 0x65, - 0x2a, 0x12, 0x02, 0x46, 0x42, 0x0d, 0x62, 0xdf, 0xe5, 0xbb, 0x7c, 0x8d, - 0xb5, 0x54, 0xad, 0x84, 0xee, 0x3b, 0x94, 0xd0, 0x01, 0xe0, 0xf3, 0xfe, - 0x80, 0x2d, 0xf8, 0xe5, 0x35, 0x54, 0x9c, 0x07, 0xc7, 0xf2, 0x77, 0xd3, - 0x6b, 0xf8, 0xfd, 0x86, 0x1c, 0xe1, 0x4b, 0x1d, 0x29, 0xe5, 0x02, 0x24, - 0x40, 0xed, 0xab, 0xd0, 0xfb, 0x5a, 0xc7, 0x25, 0x73, 0xb4, 0xc9, 0xa0, - 0x66, 0x0d, 0xc0, 0x9a, 0x07, 0x18, 0xc5, 0xdc, 0xae, 0xc4, 0xe2, 0xf0, - 0x21, 0x7c, 0x8d, 0x98, 0xa3, 0x93, 0x01, 0xce, 0x01, 0x50, 0x22, 0x26, - 0x4d, 0xce, 0xf2, 0x42, 0xbb, 0xa3, 0xf3, 0x7b, 0x17, 0xa0, 0x33, 0xdc, - 0x9d, 0x69, 0xb7, 0x0d, 0xd7, 0xa2, 0x73, 0xca, 0x4a, 0xbc, 0xa1, 0x08, - 0x81, 0xea, 0xa4, 0xe6, 0xe1, 0x72, 0x09, 0x91, 0xca, 0x38, 0x08, 0xb3, - 0x73, 0xcf, 0x90, 0x00, 0x3a, 0x96, 0x12, 0xaa, 0xd3, 0x9c, 0xc0, 0xc1, - 0xf0, 0x53, 0xfc, 0x11, 0xe1, 0x01, 0xa6, 0xe9, 0x15, 0xf8, 0xb1, 0x91, - 0x19, 0xc7, 0x08, 0xe3, 0x2e, 0x38, 0x2c, 0xc7, 0x4d, 0xc6, 0xce, 0x40, - 0x26, 0xaa, 0x6d, 0x07, 0xfa, 0x1e, 0xb0, 0x92, 0xe2, 0xa0, 0x00, 0x0a, - 0x02, 0x31, 0xe5, 0x94, 0x70, 0xa3, 0x1b, 0x8e, 0xa8, 0x36, 0xe5, 0x6e, - 0x9b, 0x96, 0x06, 0x38, 0x3b, 0x83, 0x19, 0x74, 0x08, 0xd3, 0x73, 0x2f, - 0xf0, 0x18, 0xa6, 0x8a, 0xac, 0x02, 0x4d, 0xd8, 0x66, 0x1e, 0xa5, 0xe1, - 0xbd, 0x14, 0xb0, 0xcf, 0x91, 0x09, 0x0d, 0x4e, 0x07, 0x05, 0x7e, 0xbc, - 0x69, 0x17, 0x72, 0xae, 0x00, 0x6c, 0x65, 0xce, 0xc4, 0x0a, 0x91, 0x86, - 0xeb, 0x75, 0x8c, 0xb2, 0x27, 0x54, 0x71, 0x02, 0xea, 0x2b, 0x3a, 0x73, - 0x35, 0x47, 0x14, 0xd8, 0xf5, 0x6d, 0xea, 0x1d, 0x3e, 0xde, 0x76, 0x3f, - 0xbe, 0x8a, 0xfe, 0xc1, 0x26, 0x7a, 0xd8, 0x86, 0xc7, 0x6c, 0xca, 0x31, - 0xd2, 0xca, 0x2d, 0x58, 0x85, 0x79, 0xe6, 0x90, 0x58, 0x59, 0xba, 0x17, - 0x17, 0x05, 0x3f, 0x41, 0x03, 0x74, 0xfd, 0xdf, 0x30, 0x9e, 0xc3, 0xc4, - 0xff, 0xb7, 0xea, 0xe6, 0xdb, 0x75, 0xf3, 0x0d, 0xbb, 0xe5, 0xeb, 0xaa, - 0xc6, 0x2b, 0x61, 0x2d, 0x30, 0x9d, 0xa6, 0x45, 0x7f, 0xb3, 0x1a, 0x28, - 0xc1, 0x11, 0x56, 0x91, 0x18, 0x62, 0x28, 0x5f, 0xd8, 0x18, 0x33, 0x48, - 0x15, 0xd8, 0x12, 0x57, 0x36, 0x82, 0x6c, 0x46, 0xcb, 0xa8, 0x80, 0x18, - 0xf9, 0x12, 0xbc, 0xc0, 0x62, 0xe7, 0xb4, 0x53, 0x32, 0x76, 0xda, 0xfc, - 0x70, 0x70, 0x97, 0xe1, 0xc0, 0xb5, 0x3c, 0xa8, 0xe0, 0xe9, 0x82, 0xa4, - 0x0c, 0xb9, 0x87, 0xeb, 0x51, 0x04, 0x55, 0x9a, 0xcd, 0xc3, 0xaa, 0x44, - 0xaf, 0xd9, 0xd2, 0x2b, 0x2a, 0x73, 0x5a, 0x2a, 0x65, 0xeb, 0x25, 0x32, - 0x54, 0x51, 0xf8, 0xb8, 0xea, 0xd3, 0x15, 0xba, 0x7c, 0x95, 0x00, 0x4f, - 0x9c, 0x79, 0xae, 0x48, 0x20, 0x9d, 0xd8, 0x82, 0x2e, 0xed, 0x0a, 0xcf, - 0xaf, 0x2f, 0x4a, 0xeb, 0xeb, 0xa8, 0xee, 0x53, 0x04, 0xc7, 0xab, 0x11, - 0xf0, 0x68, 0xf1, 0xef, 0x54, 0x38, 0xf7, 0x73, 0x0a, 0x73, 0x7f, 0x4c, - 0xf1, 0xad, 0xb8, 0xe1, 0xae, 0x93, 0xda, 0xfe, 0xda, 0xda, 0xf2, 0xfa, - 0xcd, 0x3f, 0xda, 0x96, 0xd9, 0x7d, 0xd6, 0x45, 0xb5, 0x9e, 0xf7, 0x28, - 0x35, 0xac, 0xdd, 0x46, 0x76, 0xdc, 0x67, 0xf4, 0x08, 0x32, 0x09, 0xc1, - 0xf5, 0xb3, 0x2e, 0xcb, 0x6f, 0xb2, 0x12, 0x62, 0x75, 0x52, 0xa4, 0x1c, - 0x3f, 0xef, 0xae, 0xa0, 0xa7, 0x4e, 0x98, 0x01, 0x6a, 0x95, 0xb3, 0x08, - 0xf0, 0xc6, 0x45, 0xe9, 0x80, 0x68, 0x74, 0xd4, 0xde, 0x76, 0xcd, 0x9a, - 0xdb, 0xae, 0x93, 0xad, 0xdc, 0xe6, 0xb6, 0x28, 0xb9, 0xed, 0x8a, 0xf4, - 0x82, 0x9b, 0xfb, 0x5a, 0x08, 0x46, 0xfd, 0x6f, 0x32, 0xe4, 0xf8, 0x5e, - 0xd7, 0x0b, 0x87, 0x3e, 0xab, 0x2c, 0xb7, 0x3b, 0x29, 0xf5, 0xbf, 0x3a, - 0xcc, 0xf1, 0x1c, 0xab, 0xa2, 0x6f, 0x7f, 0xd6, 0xcd, 0x0c, 0x00, 0x43, - 0x7f, 0x31, 0x1b, 0xdb, 0xcb, 0x6f, 0x54, 0x09, 0x9f, 0x83, 0x8b, 0xad, - 0xe2, 0x57, 0x94, 0xea, 0xf6, 0x16, 0x9f, 0x9c, 0x90, 0x87, 0x4f, 0x40, - 0x0b, 0x63, 0xed, 0x89, 0x74, 0x06, 0xe9, 0xdd, 0x9f, 0x1e, 0x63, 0xf5, - 0xf2, 0x41, 0xb5, 0xaf, 0x38, 0xc8, 0x7f, 0xc8, 0xf5, 0x8e, 0x57, 0x38, - 0x8a, 0x9b, 0x22, 0x1d, 0x61, 0xb8, 0x71, 0x31, 0xeb, 0x3a, 0x19, 0x70, - 0x3b, 0x55, 0x25, 0x1c, 0x23, 0x07, 0x11, 0x18, 0xde, 0xfd, 0x80, 0x60, - 0x9f, 0xd5, 0x40, 0xaa, 0x0b, 0x30, 0x9a, 0x78, 0xbe, 0x7d, 0x1d, 0x8d, - 0x95, 0x1b, 0x21, 0x45, 0x79, 0xa8, 0x7c, 0x71, 0xee, 0xf6, 0xa6, 0xa9, - 0x5a, 0x3a, 0x1e, 0x53, 0x7c, 0x70, 0x2d, 0x1d, 0x0f, 0x7e, 0xaf, 0xe5, - 0x97, 0xad, 0xed, 0x50, 0x51, 0x37, 0xb6, 0xeb, 0x86, 0x37, 0xcd, 0x0b, - 0x26, 0xed, 0x7c, 0x93, 0x46, 0xb6, 0x79, 0x38, 0x9c, 0xca, 0xc3, 0xaf, - 0xc7, 0x01, 0xc9, 0x64, 0x64, 0xe0, 0x28, 0x2d, 0x77, 0x8e, 0xc0, 0xa3, - 0xdf, 0x79, 0x7f, 0x84, 0x5d, 0x5d, 0xb8, 0xe4, 0x78, 0x0b, 0x95, 0x8f, - 0x61, 0x9f, 0x32, 0x39, 0x67, 0x3c, 0x7f, 0x8b, 0xe6, 0x77, 0x4a, 0x90, - 0xd6, 0xcc, 0x77, 0x70, 0x34, 0xa0, 0x51, 0x70, 0x1e, 0x5e, 0x6d, 0xde, - 0x78, 0x29, 0x3b, 0x3f, 0x38, 0x15, 0x98, 0x7d, 0x4a, 0x34, 0xfb, 0x94, - 0xa8, 0x9a, 0x2b, 0xe2, 0xff, 0x79, 0xe7, 0xc0, 0x4e, 0x08, 0xbb, 0xdf, - 0xfa, 0xfb, 0x3b, 0x84, 0xf5, 0x5f, 0x15, 0xe0, 0x5f, 0x97, 0xdf, 0xdf, - 0x73, 0x56, 0x13, 0x05, 0x50, 0xee, 0xff, 0xbe, 0xf9, 0xc7, 0xd8, 0x52, - 0xe8, 0x2d, 0x11, 0xbd, 0x0a, 0xc0, 0x33, 0xd0, 0x1b, 0x06, 0xe7, 0x0c, - 0x18, 0xce, 0x6f, 0x85, 0x76, 0x7a, 0x0d, 0x97, 0x1a, 0x97, 0xaa, 0x99, - 0x2e, 0xe8, 0x13, 0x5b, 0x1c, 0x18, 0x76, 0x7e, 0x0b, 0xe7, 0xb7, 0x70, - 0x26, 0xcd, 0xbc, 0x00, 0x74, 0xff, 0x1d, 0xf6, 0xdf, 0x24, 0x67, 0xfc, - 0x6d, 0x6b, 0xa4, 0x90, 0xf7, 0xfe, 0x30, 0xf9, 0x71, 0x0f, 0x6b, 0xeb, - 0x5d, 0x9d, 0x47, 0x36, 0xa3, 0x35, 0x00, 0x1d, 0xbd, 0xe4, 0xe3, 0xe5, - 0x65, 0xf4, 0x3c, 0x62, 0x64, 0x60, 0x95, 0xc4, 0x69, 0xbb, 0x00, 0x67, - 0x9e, 0xf1, 0xf2, 0x0e, 0x14, 0xeb, 0x3c, 0x20, 0x25, 0xfe, 0x7a, 0x77, - 0xe2, 0xaf, 0x77, 0x84, 0x5c, 0x03, 0x72, 0xd2, 0xc7, 0x4d, 0x0e, 0xc6, - 0xcd, 0x0e, 0x14, 0xb5, 0x34, 0x76, 0xcf, 0xd8, 0xda, 0xe1, 0x6f, 0xda, - 0x65, 0xda, 0xf6, 0xce, 0x98, 0xef, 0x71, 0x62, 0x04, 0x48, 0xee, 0x63, - 0x01, 0x71, 0x76, 0x12, 0x7b, 0x25, 0x36, 0xde, 0xb9, 0x5b, 0xa7, 0x25, - 0x3b, 0xdc, 0x78, 0x77, 0xba, 0xee, 0x91, 0xae, 0x3b, 0x58, 0xc9, 0xfc, - 0x89, 0xee, 0x34, 0x40, 0x8a, 0x81, 0x53, 0x3e, 0x71, 0x13, 0xa5, 0xe5, - 0x93, 0x71, 0x86, 0x3e, 0x1d, 0xff, 0x75, 0xd2, 0xd0, 0x1b, 0xbc, 0x36, - 0xac, 0x1a, 0xbe, 0xbb, 0x58, 0xee, 0xce, 0xfd, 0x3d, 0x54, 0xae, 0xcc, - 0xe3, 0x54, 0x96, 0x37, 0x6e, 0x86, 0x4c, 0xed, 0x8f, 0x45, 0x5c, 0x3c, - 0x89, 0x2f, 0x0d, 0xaa, 0x94, 0xa7, 0xe0, 0xeb, 0x17, 0x1c, 0xc3, 0x2e, - 0xca, 0x5e, 0x18, 0x49, 0xff, 0xfe, 0x66, 0x66, 0x17, 0x1d, 0xe6, 0x12, - 0x38, 0x01, 0x50, 0xbf, 0x0d, 0xe3, 0xdc, 0xc2, 0x42, 0xaa, 0x0a, 0xe6, - 0x78, 0xb4, 0x55, 0xc1, 0xdd, 0xe3, 0x8a, 0x11, 0x8b, 0x0b, 0x10, 0x1e, - 0xc5, 0x3c, 0x06, 0x73, 0xe7, 0xbf, 0xaa, 0xc3, 0x0c, 0x31, 0x15, 0xec, - 0x4e, 0xcb, 0xba, 0x3b, 0x7c, 0xb0, 0xda, 0x63, 0xa6, 0xc0, 0x62, 0x62, - 0xa5, 0x21, 0x1f, 0x1c, 0x39, 0x34, 0x4e, 0x92, 0xe0, 0x99, 0x57, 0x83, - 0x0a, 0x3e, 0xe5, 0x13, 0x13, 0xef, 0x7b, 0xdd, 0x29, 0x13, 0xfa, 0x9f, - 0xe9, 0x2e, 0xab, 0x5a, 0xc2, 0x13, 0x77, 0xff, 0xc7, 0xd8, 0xd4, 0x6a, - 0x76, 0x56, 0x0c, 0x01, 0x14, 0xa3, 0xc3, 0xdd, 0xca, 0xd5, 0xa6, 0xbc, - 0x6e, 0x9c, 0x69, 0x61, 0x2a, 0x75, 0xcf, 0xf0, 0x72, 0x94, 0x3a, 0x27, - 0x5a, 0xdf, 0x0b, 0xc9, 0xef, 0x73, 0xb3, 0x93, 0xa3, 0x29, 0x24, 0x11, - 0x55, 0x03, 0xd1, 0x24, 0x02, 0x6a, 0xdb, 0x1e, 0x0e, 0xbb, 0x6e, 0x8d, - 0x7d, 0x01, 0x18, 0x44, 0x42, 0xdc, 0x29, 0x23, 0x9d, 0xfb, 0xce, 0xe2, - 0xde, 0x8f, 0xf2, 0x35, 0x39, 0x05, 0xee, 0x6c, 0x38, 0xc3, 0xb9, 0xdb, - 0x22, 0x87, 0x72, 0x3c, 0x1b, 0x50, 0xed, 0x1f, 0x39, 0xa8, 0x8e, 0xa7, - 0x54, 0xb9, 0x00, 0xb8, 0x52, 0xa0, 0xf4, 0x6c, 0x1b, 0x1a, 0xae, 0xbd, - 0x75, 0x48, 0x37, 0x24, 0x3f, 0xa8, 0x0e, 0x96, 0x24, 0x56, 0x95, 0x71, - 0x45, 0xcf, 0x22, 0x9d, 0x59, 0x24, 0x6a, 0xee, 0x34, 0xdc, 0x08, 0x97, - 0x24, 0xec, 0xe2, 0x3b, 0x23, 0xfa, 0xee, 0x80, 0xc3, 0xfa, 0x4e, 0xf5, - 0x0e, 0x24, 0x32, 0xea, 0xef, 0x3e, 0xea, 0x6f, 0x5c, 0xb0, 0x25, 0x6c, - 0x71, 0x7f, 0x77, 0x71, 0x7f, 0x77, 0x71, 0xd7, 0xfd, 0x18, 0xff, 0xa3, - 0x59, 0x9b, 0x49, 0x00, 0x20, 0xca, 0xc0, 0x48, 0xce, 0x1b, 0xe3, 0x4d, - 0x10, 0x6c, 0xbf, 0x58, 0xce, 0x77, 0xab, 0xf9, 0x8f, 0xc5, 0xfc, 0xf8, - 0x83, 0xe4, 0xff, 0x3a, 0x84, 0x6a, 0xe6, 0x1e, 0xf3, 0x83, 0xca, 0xaf, - 0x5e, 0x81, 0x34, 0x9c, 0x5f, 0x78, 0x0b, 0xe7, 0x12, 0xf8, 0xa0, 0xe1, - 0xc2, 0x09, 0x9f, 0xa4, 0x2b, 0x7a, 0x9e, 0x52, 0xd6, 0x63, 0x42, 0x24, - 0x66, 0xaa, 0xbb, 0x57, 0x36, 0x06, 0x2b, 0x5f, 0xb0, 0xe9, 0x50, 0x25, - 0x9c, 0x90, 0x59, 0x12, 0x2c, 0xf6, 0xb3, 0x85, 0xd8, 0x8f, 0x4a, 0x4c, - 0x5e, 0x06, 0x08, 0x39, 0xb0, 0xad, 0x8b, 0xad, 0xf9, 0xb3, 0x86, 0xa3, - 0xb9, 0xf6, 0xd9, 0x90, 0xab, 0x44, 0x1c, 0x73, 0x09, 0xb0, 0xd7, 0x28, - 0x13, 0x0f, 0x61, 0x58, 0x09, 0x84, 0xca, 0x04, 0x91, 0x0b, 0xa4, 0x23, - 0x18, 0x0f, 0x49, 0x79, 0xc5, 0xb8, 0xca, 0x53, 0x12, 0x0e, 0x5b, 0x93, - 0x24, 0x46, 0xd4, 0x51, 0x63, 0xe2, 0x0b, 0xf6, 0x79, 0xf2, 0x7c, 0x39, - 0xe1, 0xe5, 0x72, 0x4a, 0x5e, 0x26, 0x98, 0x69, 0xe8, 0x1a, 0x13, 0x57, - 0x6f, 0x5c, 0x16, 0xc4, 0x69, 0xca, 0x1c, 0x87, 0x29, 0x04, 0xd0, 0x50, - 0x0e, 0xb0, 0xd7, 0x35, 0x84, 0xa0, 0x77, 0x3c, 0xdd, 0x1b, 0xb3, 0x39, - 0xb8, 0x2c, 0x66, 0xca, 0x16, 0xe1, 0xda, 0x2e, 0xa4, 0x8c, 0x10, 0x28, - 0x81, 0x71, 0x32, 0x43, 0xa4, 0x25, 0x2c, 0xd0, 0xcf, 0x48, 0xf5, 0x42, - 0x73, 0x68, 0xf1, 0x00, 0x60, 0x23, 0x08, 0xec, 0xd2, 0xbc, 0x7b, 0xfc, - 0x04, 0x88, 0x25, 0x2d, 0xb4, 0x76, 0x88, 0xbd, 0x93, 0xc7, 0xa0, 0x95, - 0xd6, 0xc8, 0x38, 0x99, 0x8f, 0x98, 0x40, 0x85, 0xfa, 0xed, 0x64, 0x7f, - 0xeb, 0x2f, 0x29, 0x9e, 0xa5, 0x18, 0x30, 0xe1, 0xdf, 0x9c, 0x15, 0xa6, - 0x50, 0xfc, 0x3b, 0x4f, 0xf9, 0xa0, 0x13, 0x90, 0x25, 0xeb, 0xfb, 0xb1, - 0xb9, 0x4e, 0x5d, 0x7c, 0xa0, 0x54, 0xc1, 0x97, 0xa2, 0xab, 0xfb, 0xcb, - 0xab, 0x8c, 0x8d, 0x06, 0x13, 0xb5, 0x7c, 0x39, 0xdf, 0xcb, 0xd8, 0x80, - 0x03, 0x40, 0x4e, 0x1d, 0x44, 0xcb, 0xf4, 0xa2, 0x34, 0x2d, 0x4e, 0xd1, - 0xe2, 0xa6, 0x17, 0xf2, 0x94, 0x84, 0xd8, 0xd8, 0x52, 0x63, 0x05, 0xa1, - 0xe2, 0x16, 0x3b, 0x1c, 0x41, 0x44, 0x37, 0x51, 0x07, 0x1a, 0x5d, 0xe9, - 0x50, 0x12, 0x20, 0x9b, 0xd8, 0xd2, 0x37, 0x30, 0x4c, 0x83, 0x76, 0xf1, - 0x64, 0xc1, 0x2d, 0xcf, 0x9d, 0x31, 0x45, 0x41, 0x2e, 0xa0, 0xa2, 0x31, - 0xad, 0x63, 0x03, 0xb3, 0x0c, 0xdf, 0x04, 0xf9, 0x9d, 0x21, 0x8d, 0x43, - 0x2e, 0x28, 0xc0, 0x7a, 0xa6, 0x4c, 0x41, 0x26, 0x6b, 0x8d, 0x52, 0x58, - 0x71, 0xfa, 0x08, 0xc3, 0x7b, 0xd6, 0x8a, 0x48, 0xdf, 0x4f, 0x05, 0x54, - 0x37, 0x89, 0x6e, 0x04, 0xdc, 0x2f, 0x2a, 0x79, 0x01, 0xc3, 0x49, 0x78, - 0x55, 0xd9, 0xad, 0x2e, 0xbb, 0xf5, 0x5b, 0x71, 0x96, 0x3a, 0xe3, 0xd3, - 0xd7, 0xe1, 0xef, 0x47, 0x38, 0x88, 0x42, 0xc2, 0x6d, 0x6a, 0xfd, 0xc7, - 0x5f, 0x5c, 0xf1, 0x02, 0xc5, 0x89, 0x32, 0xb0, 0x93, 0x5b, 0x01, 0x5c, - 0x59, 0x2b, 0x66, 0x28, 0xc4, 0xac, 0xa6, 0x43, 0x7a, 0xda, 0x5d, 0xd3, - 0x8b, 0x06, 0x9c, 0x9a, 0x40, 0x83, 0xd2, 0x68, 0x58, 0x31, 0x8b, 0x35, - 0x64, 0xef, 0x03, 0xc5, 0x42, 0xa7, 0xc2, 0xa7, 0x94, 0x9c, 0x11, 0x4a, - 0x67, 0x35, 0xa0, 0x79, 0x02, 0x2a, 0x7c, 0x32, 0x69, 0xcf, 0x27, 0x12, - 0x54, 0x93, 0x7c, 0xb3, 0xb4, 0x0f, 0x11, 0x31, 0x3a, 0x56, 0xec, 0x53, - 0xa2, 0x0a, 0x8b, 0xc7, 0x0b, 0x20, 0xf8, 0xda, 0x62, 0x65, 0x01, 0xb9, - 0x9c, 0x8b, 0x0d, 0x93, 0xa9, 0x49, 0x6b, 0x16, 0xbf, 0xdf, 0x1c, 0xf7, - 0x9f, 0xd2, 0x4f, 0x33, 0x87, 0x19, 0x75, 0x72, 0x50, 0xcc, 0xc7, 0x7f, - 0xa9, 0xbd, 0x06, 0x67, 0x71, 0x51, 0x4a, 0xc7, 0x43, 0x74, 0x23, 0x37, - 0x19, 0x8e, 0x0e, 0xe8, 0xf8, 0x2f, 0x4e, 0xef, 0xb0, 0x6e, 0x6e, 0x65, - 0xd4, 0x08, 0xc5, 0xa9, 0x95, 0x34, 0xcc, 0x68, 0xc3, 0x01, 0xe3, 0x3b, - 0x0a, 0x6b, 0x0c, 0xf8, 0x3e, 0xc2, 0xcd, 0x51, 0x96, 0x0f, 0x68, 0xe7, - 0x4c, 0xb2, 0x59, 0xc8, 0x88, 0x3c, 0x3c, 0xeb, 0xed, 0xdb, 0xcc, 0x43, - 0x70, 0x19, 0xca, 0xdd, 0x31, 0xab, 0x0c, 0x8f, 0x74, 0x10, 0x2a, 0xcb, - 0x0d, 0xfb, 0xc4, 0x80, 0x76, 0xf9, 0xbc, 0x1c, 0xc3, 0x6b, 0x4c, 0x70, - 0xe5, 0xbf, 0x47, 0xa1, 0x57, 0x8e, 0x42, 0xaf, 0x18, 0x7a, 0x5f, 0x1a, - 0x8e, 0xa0, 0x16, 0xc1, 0x6e, 0x5d, 0x7f, 0xaf, 0x58, 0xcd, 0x4c, 0x2f, - 0x7b, 0x61, 0x99, 0x68, 0x98, 0x2e, 0x3c, 0x3b, 0x86, 0x21, 0x37, 0x65, - 0xb8, 0xd9, 0x5f, 0x19, 0x96, 0xb0, 0x42, 0x4f, 0x86, 0x36, 0x42, 0x26, - 0xa5, 0x40, 0x46, 0x09, 0xff, 0x39, 0x6c, 0x03, 0xa8, 0x62, 0xf8, 0x32, - 0xd8, 0x8f, 0x82, 0xab, 0xc1, 0x60, 0xbf, 0xc6, 0x36, 0x28, 0x96, 0x2f, - 0xae, 0x07, 0xfd, 0x52, 0x58, 0x26, 0x9d, 0x32, 0xfb, 0x7c, 0xa4, 0xe0, - 0xed, 0x94, 0x30, 0x4b, 0x82, 0xf0, 0x6f, 0x5a, 0x1f, 0x0d, 0xb1, 0xf5, - 0x16, 0x89, 0x45, 0xc1, 0xb1, 0x53, 0x7c, 0xf1, 0xf6, 0xad, 0x40, 0x49, - 0x9a, 0x0e, 0x9c, 0x09, 0xa1, 0x04, 0x2b, 0x5e, 0x23, 0xcb, 0x54, 0xdc, - 0x90, 0x14, 0xa3, 0xb9, 0xbb, 0xe0, 0x30, 0x33, 0x81, 0xba, 0x66, 0x89, - 0x93, 0x77, 0x22, 0xe4, 0x68, 0x24, 0x4b, 0x16, 0x4d, 0xc5, 0x7c, 0xd3, - 0x40, 0x41, 0x13, 0xc5, 0x5b, 0x81, 0x53, 0x70, 0xc3, 0x40, 0x51, 0x20, - 0x0e, 0x2d, 0x8b, 0xe0, 0x3e, 0x14, 0x68, 0xfa, 0x21, 0xca, 0x03, 0x9b, - 0x02, 0xce, 0x06, 0x9f, 0xe2, 0x83, 0x50, 0xf1, 0xbb, 0x59, 0xc0, 0x74, - 0x78, 0xda, 0x6c, 0x15, 0xef, 0xb5, 0xca, 0xbd, 0x1f, 0x29, 0x44, 0xa9, - 0x17, 0x10, 0x4f, 0x89, 0x97, 0xe1, 0xf2, 0x09, 0x15, 0x6c, 0x79, 0x46, - 0x4a, 0xb8, 0xf8, 0x13, 0x44, 0x82, 0x39, 0x2e, 0x47, 0x82, 0x41, 0xb8, - 0x28, 0x56, 0xfd, 0xa9, 0x05, 0x0a, 0x30, 0x1d, 0x2b, 0x1b, 0x1e, 0x86, - 0x42, 0x35, 0x03, 0x36, 0xab, 0xb5, 0x66, 0x5b, 0xec, 0x6e, 0xc0, 0x10, - 0x9c, 0x2c, 0x54, 0x63, 0x3f, 0x55, 0xda, 0xab, 0xf3, 0x89, 0x03, 0xa6, - 0x38, 0x3b, 0xa9, 0x84, 0x04, 0x92, 0x11, 0x45, 0x70, 0x90, 0x55, 0xa5, - 0xbd, 0x7d, 0x25, 0xf8, 0x94, 0x04, 0xe0, 0x67, 0x98, 0xe5, 0xe3, 0x67, - 0x62, 0xb3, 0x2a, 0x9c, 0x0b, 0xaa, 0xa1, 0xf4, 0xc1, 0xdc, 0xc3, 0x3c, - 0x08, 0xf8, 0x99, 0xe3, 0x60, 0x35, 0x48, 0xc8, 0x23, 0xf7, 0x09, 0x54, - 0xe8, 0x6f, 0x79, 0x3c, 0x6c, 0x19, 0x4f, 0x68, 0xdb, 0xc5, 0x50, 0x08, - 0x04, 0x8d, 0x89, 0x4c, 0x20, 0x07, 0xd0, 0xf2, 0xc4, 0xc3, 0x37, 0x84, - 0xf3, 0xbf, 0xd3, 0x62, 0x71, 0x67, 0x7f, 0xdf, 0xa2, 0x1f, 0x6d, 0x57, - 0x17, 0xd4, 0x76, 0x8d, 0x82, 0x8a, 0xd3, 0x3e, 0x1f, 0x8c, 0x56, 0x43, - 0xeb, 0xf2, 0x12, 0x7b, 0xcd, 0xe2, 0xc7, 0x15, 0x33, 0xf4, 0x39, 0xcc, - 0x25, 0x7a, 0xc3, 0xae, 0xbc, 0xef, 0x98, 0x5e, 0x79, 0x54, 0x54, 0xd8, - 0x03, 0xb3, 0xdf, 0x29, 0x90, 0xf3, 0x82, 0x71, 0xb3, 0x9c, 0x57, 0xfe, - 0xa9, 0x6c, 0x4f, 0x3d, 0xed, 0x22, 0x80, 0xe7, 0x73, 0x33, 0xb9, 0x91, - 0xda, 0x95, 0x42, 0x98, 0x0c, 0xf6, 0x64, 0x0c, 0xe7, 0x61, 0xcf, 0x2f, - 0xed, 0x87, 0x2a, 0x90, 0xe9, 0x41, 0xa9, 0xc4, 0xa0, 0x84, 0xeb, 0x1a, - 0xa5, 0x3b, 0xc6, 0xa5, 0x92, 0xe3, 0x12, 0x90, 0x72, 0xa1, 0x71, 0xa9, - 0xe4, 0x28, 0x54, 0x72, 0x3b, 0x51, 0xf8, 0x86, 0xe9, 0x5b, 0x40, 0x59, - 0xf1, 0xa0, 0xf4, 0x83, 0xdf, 0x97, 0xfc, 0xff, 0x68, 0x35, 0x50, 0x7e, - 0x18, 0xc1, 0x4f, 0x1c, 0x6c, 0x01, 0xd9, 0x71, 0x9c, 0xa0, 0x01, 0x21, - 0xaa, 0x1f, 0xa5, 0xff, 0xc7, 0x69, 0xfa, 0x89, 0x24, 0xfd, 0x30, 0x21, - 0x3f, 0x0c, 0x94, 0x35, 0xff, 0xa3, 0x9a, 0xaf, 0x06, 0xbf, 0xff, 0x46, - 0x85, 0x57, 0xe0, 0xe9, 0xb8, 0xbc, 0x59, 0xab, 0x7f, 0x47, 0x9d, 0x6a, - 0x10, 0xd4, 0x40, 0xf2, 0x04, 0x1b, 0x82, 0x07, 0x2f, 0x36, 0x72, 0x8d, - 0x7f, 0x36, 0x8d, 0x62, 0x81, 0x39, 0x83, 0x12, 0xab, 0xb5, 0x10, 0x0a, - 0x69, 0xbe, 0x3d, 0xa1, 0x60, 0x15, 0xff, 0xb1, 0x1d, 0x3d, 0xa5, 0xc5, - 0x50, 0xe6, 0x4e, 0x17, 0x1e, 0xd9, 0x4e, 0x5c, 0x6a, 0xea, 0x21, 0x82, - 0xa2, 0xb8, 0x9c, 0xb9, 0xa9, 0xa8, 0x78, 0x56, 0x78, 0x54, 0xe4, 0xce, - 0x80, 0xb4, 0x8e, 0x3b, 0xef, 0xf7, 0x21, 0xce, 0x93, 0xce, 0x7b, 0x08, - 0x4c, 0x9c, 0xeb, 0x0e, 0xf2, 0x67, 0xc0, 0x8a, 0xe9, 0x5c, 0x38, 0x7c, - 0x43, 0x4a, 0xbd, 0x2b, 0xaa, 0xc2, 0xda, 0x04, 0xf9, 0xf4, 0x01, 0x18, - 0x09, 0x66, 0x1a, 0x97, 0x29, 0x98, 0x3f, 0x88, 0x5b, 0x8a, 0xe3, 0x10, - 0xe6, 0x84, 0x7a, 0x28, 0x1a, 0xca, 0x81, 0xd9, 0x66, 0x08, 0x50, 0x33, - 0x64, 0x9f, 0x91, 0x98, 0x87, 0x59, 0xd2, 0x5d, 0x69, 0x30, 0x95, 0xb5, - 0xff, 0x8d, 0x7e, 0x0f, 0x40, 0x22, 0x90, 0x74, 0xad, 0x56, 0xa0, 0x20, - 0xd5, 0xb9, 0x4f, 0xf7, 0xed, 0x6a, 0xee, 0x7c, 0x95, 0x3d, 0xf3, 0x11, - 0x11, 0xc7, 0x97, 0x73, 0xfd, 0x8e, 0x21, 0xf5, 0xd4, 0x8b, 0x3a, 0x99, - 0x8a, 0x0d, 0xf1, 0x3f, 0xb9, 0x9c, 0x3e, 0x9f, 0x0a, 0x98, 0x87, 0x17, - 0xe7, 0x1e, 0xf5, 0xc3, 0x74, 0xee, 0x3a, 0xb1, 0xa1, 0xc9, 0x78, 0x76, - 0x2c, 0x00, 0x78, 0x53, 0xc7, 0x70, 0xf7, 0x3c, 0x28, 0x38, 0xc5, 0xc3, - 0x06, 0xd3, 0x5e, 0x8e, 0xf0, 0xa2, 0xcb, 0xa0, 0xa6, 0xfc, 0x4e, 0xd7, - 0x7b, 0x57, 0x9b, 0xe9, 0xdd, 0x65, 0xb8, 0x63, 0xce, 0x38, 0x75, 0x7b, - 0x57, 0x8d, 0x5c, 0xc0, 0x9d, 0xbe, 0xc8, 0x3b, 0xc9, 0xd0, 0x31, 0x9f, - 0xbf, 0xa7, 0x04, 0x7d, 0x0b, 0xf1, 0xd3, 0x9b, 0xa7, 0x7a, 0x6f, 0x48, - 0x69, 0x7c, 0xd8, 0xd7, 0x1b, 0x8a, 0x3b, 0xe3, 0x14, 0xfe, 0xbd, 0x3c, - 0x21, 0x2c, 0x8b, 0xb3, 0x56, 0xe0, 0x5c, 0x41, 0xd2, 0xe2, 0x48, 0x67, - 0xc1, 0xd6, 0x41, 0xaa, 0x9d, 0x2c, 0x90, 0xba, 0xbc, 0x3f, 0x70, 0x69, - 0x14, 0x8a, 0x90, 0x60, 0x11, 0x6f, 0xca, 0xfc, 0x5e, 0x75, 0xc7, 0xf2, - 0x5e, 0x7f, 0xd5, 0xe5, 0xdf, 0x79, 0x78, 0xf2, 0xce, 0x18, 0xca, 0xba, - 0x0e, 0x1c, 0xc2, 0xdf, 0xb9, 0x72, 0x7d, 0x73, 0x34, 0x16, 0x8a, 0x12, - 0xf0, 0xe1, 0x81, 0x2e, 0xb2, 0xde, 0x62, 0xfa, 0x80, 0xa9, 0x05, 0xff, - 0x1b, 0xda, 0x95, 0x3d, 0x69, 0x31, 0xdc, 0x05, 0xda, 0xb3, 0xea, 0x4c, - 0x02, 0xf3, 0xff, 0xd8, 0xba, 0xb2, 0xc5, 0x06, 0x71, 0x65, 0xf9, 0x3e, - 0x7f, 0x89, 0x0d, 0xb6, 0x35, 0x01, 0xc4, 0x01, 0xe1, 0xc4, 0xf9, 0xfa, - 0xab, 0xaa, 0x5e, 0xc9, 0xdc, 0x87, 0xc4, 0x55, 0xda, 0x10, 0xda, 0xd0, - 0xd2, 0xea, 0x16, 0x09, 0xec, 0x25, 0x4e, 0x6e, 0xf9, 0x1d, 0x94, 0xf9, - 0x8c, 0x40, 0xa9, 0x07, 0xc3, 0xc8, 0x6a, 0xc7, 0x90, 0x1c, 0xf9, 0xee, - 0x35, 0x25, 0xb0, 0x55, 0x1e, 0x4d, 0x74, 0x32, 0xcb, 0xcf, 0x6e, 0xfb, - 0x4a, 0xc4, 0xf7, 0xb9, 0xc8, 0xa7, 0x58, 0xd8, 0xc7, 0x21, 0xc7, 0x14, - 0x22, 0xfb, 0x40, 0x93, 0xf8, 0xde, 0xaf, 0xb0, 0x58, 0xb0, 0x90, 0x2f, - 0x53, 0xaf, 0xef, 0xd8, 0x74, 0x13, 0x37, 0xbf, 0x4e, 0x48, 0x6a, 0x17, - 0x00, 0x13, 0x69, 0x93, 0x30, 0x95, 0x7e, 0x16, 0xac, 0x3b, 0x75, 0x4a, - 0xec, 0x01, 0xda, 0x28, 0x04, 0x8b, 0x58, 0xb4, 0xe0, 0x66, 0x4d, 0x42, - 0xa9, 0xec, 0xd2, 0x81, 0x9c, 0x96, 0x8e, 0xe6, 0x01, 0x85, 0x30, 0xde, - 0x87, 0x0d, 0x3f, 0x23, 0xb5, 0x9a, 0x08, 0x3a, 0x1a, 0x7f, 0x8d, 0xa3, - 0xcb, 0xf7, 0x5f, 0xdc, 0xb0, 0x98, 0x65, 0xb5, 0x64, 0x0c, 0x9b, 0x10, - 0x1d, 0xf7, 0x74, 0xfb, 0xcf, 0xb4, 0xf2, 0x72, 0xc3, 0x02, 0x59, 0x9d, - 0x7a, 0xc0, 0xe5, 0x39, 0xfc, 0x96, 0x55, 0x62, 0x13, 0x7e, 0x00, 0x9e, - 0xb5, 0xf1, 0x57, 0x8b, 0xe5, 0xe9, 0x3a, 0x4d, 0x04, 0xef, 0x82, 0xac, - 0x26, 0x9e, 0x34, 0x16, 0x25, 0xd9, 0x86, 0xcd, 0x4f, 0x0d, 0x48, 0xb4, - 0x1a, 0x92, 0x80, 0x53, 0x73, 0x90, 0x2a, 0x8a, 0xf4, 0xf5, 0xe9, 0x9f, - 0x03, 0x13, 0xf6, 0x57, 0x37, 0x15, 0x41, 0x32, 0x56, 0xb5, 0x59, 0x91, - 0x59, 0x31, 0x93, 0x88, 0x32, 0x2d, 0xf3, 0xe5, 0xb1, 0xa2, 0x81, 0x89, - 0x0d, 0xa3, 0x63, 0xd3, 0x92, 0x4f, 0x42, 0x73, 0x67, 0xf7, 0x29, 0x11, - 0xf5, 0xd0, 0xab, 0xf2, 0xc4, 0x7e, 0xa4, 0x04, 0x16, 0x9a, 0xa4, 0x96, - 0x01, 0x36, 0x92, 0xa4, 0xcc, 0x80, 0x66, 0x94, 0x55, 0x91, 0x23, 0xa7, - 0x0e, 0x9e, 0xec, 0x0f, 0x7a, 0xf9, 0x09, 0x80, 0x0d, 0x59, 0x85, 0xa1, - 0x3b, 0x58, 0xf9, 0xaf, 0x0d, 0xde, 0x35, 0x0a, 0xea, 0xf9, 0xdf, 0x49, - 0xdb, 0xe5, 0xbf, 0x76, 0x51, 0x75, 0x19, 0xbe, 0x34, 0xc0, 0x97, 0x75, - 0x9c, 0xaf, 0x89, 0x3a, 0x02, 0xfe, 0x81, 0xca, 0x1e, 0xcb, 0xcb, 0x2c, - 0xea, 0xda, 0x04, 0x44, 0x53, 0x06, 0x43, 0x47, 0x8f, 0x40, 0xbe, 0xe5, - 0xab, 0x14, 0xab, 0xa7, 0xa7, 0xd4, 0x10, 0xb8, 0x3c, 0x7d, 0xa6, 0x45, - 0xb1, 0x69, 0x74, 0x28, 0x65, 0xda, 0x31, 0xc4, 0x15, 0xcd, 0x7d, 0xaf, - 0x45, 0x32, 0x41, 0xcd, 0xf9, 0x04, 0xaa, 0xff, 0x42, 0x43, 0x50, 0x21, - 0x86, 0x3c, 0x69, 0x97, 0xff, 0x45, 0x73, 0xb5, 0xdb, 0x13, 0x65, 0x3c, - 0xed, 0x88, 0x66, 0x79, 0x58, 0xe4, 0x7c, 0xd9, 0x79, 0x1a, 0xbd, 0x2a, - 0x05, 0xe3, 0x9b, 0x0b, 0xec, 0x95, 0x89, 0xbd, 0xcd, 0x59, 0xa1, 0x7e, - 0xeb, 0x81, 0x9e, 0xab, 0xfe, 0x0c, 0xea, 0x05, 0x3b, 0x70, 0xab, 0x66, - 0x7a, 0x9e, 0xb4, 0x30, 0xe7, 0x15, 0x13, 0x34, 0x1d, 0x65, 0x66, 0x53, - 0xcc, 0x0c, 0x28, 0xc3, 0x57, 0xff, 0xfd, 0x30, 0xab, 0x5b, 0x79, 0xbe, - 0xa2, 0xca, 0x67, 0xf6, 0x88, 0xf9, 0x1d, 0x0e, 0xb8, 0x33, 0xca, 0x77, - 0x59, 0x10, 0xc9, 0xca, 0x5d, 0x34, 0x26, 0x51, 0x59, 0xd2, 0xc3, 0xc6, - 0x04, 0x57, 0x9c, 0x64, 0x90, 0x43, 0xc8, 0xb2, 0x98, 0x94, 0xfa, 0xd2, - 0x67, 0xf1, 0x4f, 0xcb, 0x1f, 0xa0, 0x6e, 0xda, 0x08, 0xd1, 0xa2, 0x5b, - 0x87, 0xa7, 0x74, 0xf6, 0x75, 0x38, 0x34, 0x4e, 0x93, 0x8a, 0xb7, 0x3b, - 0xb0, 0x49, 0x23, 0x93, 0x43, 0x3e, 0x69, 0x35, 0x9b, 0x14, 0x0a, 0x2d, - 0x34, 0x8b, 0xc0, 0x47, 0xe5, 0x75, 0x3a, 0xed, 0x92, 0x5e, 0x27, 0xf8, - 0xd0, 0x2e, 0x90, 0x16, 0x95, 0x52, 0x01, 0x90, 0x97, 0xe9, 0x93, 0x04, - 0x46, 0xe6, 0x3a, 0x49, 0x7e, 0x39, 0x16, 0x61, 0xca, 0xc6, 0x63, 0x20, - 0x29, 0x07, 0x8d, 0x86, 0xbd, 0xca, 0xe6, 0xc0, 0xbe, 0x0b, 0xd8, 0x45, - 0x9c, 0x47, 0x05, 0xfd, 0xc3, 0x02, 0xb0, 0x9d, 0xd6, 0x63, 0x04, 0xef, - 0x8e, 0x9a, 0xbb, 0x5b, 0x69, 0x7d, 0xf1, 0x51, 0x96, 0xef, 0x59, 0x73, - 0x32, 0x5b, 0x4e, 0xf4, 0xd3, 0x22, 0x1d, 0x73, 0xd5, 0xd7, 0x5c, 0x39, - 0x9d, 0x10, 0xe0, 0x09, 0xad, 0x3a, 0xb5, 0x50, 0x28, 0xe1, 0xa5, 0x67, - 0xaf, 0x31, 0xfa, 0xac, 0x21, 0x00, 0xe9, 0x5a, 0xae, 0x3a, 0xe8, 0xcb, - 0x12, 0xfc, 0x68, 0x52, 0x16, 0xf6, 0x14, 0x4f, 0xcc, 0xfd, 0x14, 0x61, - 0x17, 0xe8, 0xf4, 0x82, 0x35, 0x2a, 0x7e, 0xa2, 0xf8, 0x9a, 0x64, 0x9b, - 0xed, 0x9b, 0xb8, 0x6d, 0x1a, 0x78, 0x87, 0x8d, 0x3a, 0x56, 0x3a, 0xf4, - 0x71, 0x6a, 0xeb, 0x87, 0x14, 0x03, 0xae, 0xc0, 0x0f, 0xf2, 0x40, 0x82, - 0xe6, 0xcd, 0x52, 0xaf, 0xc6, 0x03, 0xe0, 0x62, 0xb9, 0xc0, 0x12, 0x63, - 0x2d, 0x8f, 0x8d, 0xf0, 0xc3, 0x97, 0xdc, 0x4b, 0xd3, 0x10, 0x5c, 0xf1, - 0x75, 0xf0, 0xc5, 0x42, 0xea, 0x3f, 0x56, 0xea, 0x80, 0x5c, 0xfc, 0x75, - 0x38, 0x0f, 0xd6, 0xdb, 0x76, 0x19, 0xd5, 0x76, 0xd9, 0x25, 0x03, 0x60, - 0xa6, 0x16, 0x31, 0x56, 0xd5, 0x51, 0x7f, 0x7b, 0x6f, 0xd2, 0x3b, 0x37, - 0x4b, 0xf0, 0x2b, 0xab, 0x86, 0x8e, 0x64, 0xd2, 0xa7, 0x80, 0xb5, 0xd6, - 0x91, 0xbe, 0xfe, 0x8e, 0x09, 0xe0, 0x82, 0x7d, 0xbe, 0x79, 0x90, 0x5f, - 0xde, 0xc9, 0xe7, 0x63, 0x9a, 0xbe, 0x51, 0xfb, 0xd8, 0x1b, 0x74, 0xa4, - 0xdb, 0x4e, 0x99, 0x48, 0xa8, 0xf7, 0x64, 0x23, 0x1e, 0xa0, 0x20, 0x8c, - 0xae, 0x52, 0x06, 0x87, 0xbc, 0xeb, 0xf1, 0xa5, 0xcf, 0xe5, 0x25, 0x38, - 0x6d, 0x19, 0x87, 0x8e, 0x06, 0xc7, 0x21, 0xf9, 0x3c, 0x0e, 0xcd, 0xa6, - 0xc8, 0x7e, 0xe3, 0x57, 0x1b, 0x0e, 0x16, 0x8c, 0x0b, 0xd5, 0xe7, 0x4a, - 0x97, 0xf1, 0xe9, 0xaa, 0x42, 0xf1, 0x2d, 0xd6, 0x01, 0x09, 0xb5, 0x03, - 0xf2, 0x86, 0x36, 0x9f, 0xd2, 0x3c, 0x86, 0xe5, 0x45, 0xfb, 0x76, 0xff, - 0x75, 0x05, 0x52, 0x60, 0xb8, 0xe5, 0x6e, 0x71, 0x04, 0xd7, 0x35, 0x7b, - 0x49, 0xc2, 0x4d, 0xcf, 0xfa, 0x89, 0x34, 0x69, 0x94, 0xa6, 0x82, 0x5d, - 0xa2, 0x08, 0xb0, 0x37, 0x6e, 0xec, 0xd6, 0xd8, 0x10, 0xd4, 0x93, 0x26, - 0x1e, 0x04, 0xe3, 0xbf, 0x25, 0xd0, 0xab, 0x14, 0x9a, 0x60, 0xe7, 0xc0, - 0x12, 0x71, 0xf7, 0x8b, 0xd0, 0x42, 0x64, 0xf7, 0x59, 0x70, 0xbd, 0x1b, - 0x5c, 0x44, 0xbf, 0x21, 0x31, 0x3e, 0xb8, 0x47, 0x53, 0xc6, 0x7b, 0x83, - 0x52, 0x37, 0x6d, 0xd7, 0xb7, 0x01, 0x60, 0xc9, 0x01, 0x7c, 0x64, 0x46, - 0xd0, 0x1a, 0xff, 0xb1, 0xce, 0x9a, 0x17, 0x77, 0x8b, 0xe2, 0x96, 0xfd, - 0x40, 0x1a, 0x81, 0xb6, 0x81, 0x86, 0xf6, 0xa0, 0xf1, 0xd3, 0xb4, 0x57, - 0x9c, 0x30, 0x62, 0x8e, 0x5f, 0x19, 0xae, 0x4e, 0x5c, 0xc6, 0xe3, 0x20, - 0xfe, 0xfd, 0x64, 0x3d, 0x7f, 0x7f, 0x49, 0xb3, 0xfa, 0x29, 0xff, 0x84, - 0x6e, 0x3a, 0x41, 0x65, 0x9b, 0x46, 0x63, 0x0b, 0x13, 0xfb, 0x30, 0xe6, - 0xa7, 0xca, 0xab, 0xff, 0x5a, 0xf7, 0xfd, 0x95, 0x26, 0xf3, 0xab, 0x2d, - 0xe6, 0xb7, 0x47, 0xe9, 0x6b, 0xa4, 0x2a, 0x72, 0x1e, 0x1d, 0xf2, 0x49, - 0xfd, 0x07, 0x59, 0x83, 0x99, 0x7a, 0xa1, 0x3a, 0x7a, 0x4d, 0xc3, 0x6c, - 0xe1, 0x66, 0x46, 0xd4, 0xcb, 0xac, 0x40, 0x7d, 0x28, 0xe0, 0x4b, 0x0b, - 0xb4, 0x60, 0xd4, 0x95, 0xce, 0xd3, 0x06, 0xa8, 0xcf, 0x9b, 0xed, 0x57, - 0x93, 0x3d, 0x3c, 0xdd, 0x43, 0xd2, 0xb3, 0x83, 0x78, 0x81, 0x1a, 0xda, - 0x0e, 0xe2, 0x3b, 0x66, 0xb5, 0xc0, 0x4e, 0xbe, 0xc4, 0x6f, 0x16, 0x1d, - 0xdf, 0xbf, 0x09, 0x8a, 0x80, 0xa5, 0x71, 0x08, 0xa4, 0xc0, 0xbf, 0xe1, - 0xe6, 0xd8, 0xc5, 0x05, 0x97, 0x5e, 0x64, 0xbc, 0xb5, 0xd6, 0x01, 0xf6, - 0x6c, 0xb0, 0xff, 0xc0, 0x3b, 0xd5, 0xd3, 0x9b, 0x89, 0x50, 0x5f, 0x10, - 0x7f, 0x56, 0xf9, 0x51, 0xed, 0x26, 0xa2, 0xeb, 0x8f, 0x75, 0xa8, 0x5a, - 0xff, 0x2c, 0xa0, 0xf6, 0xa3, 0x69, 0xd4, 0x6c, 0xe0, 0xd7, 0x3e, 0x97, - 0x4e, 0xa4, 0xc0, 0x70, 0x61, 0x65, 0x8d, 0xe0, 0x9e, 0xf0, 0x1d, 0xfd, - 0x7c, 0xb7, 0x2d, 0x62, 0x71, 0x11, 0x39, 0x0d, 0x60, 0xcf, 0x59, 0x5f, - 0x44, 0x4d, 0x06, 0x8a, 0xa4, 0x77, 0x2e, 0xf8, 0x39, 0xb5, 0x55, 0x08, - 0x92, 0x82, 0x1f, 0x7b, 0x4b, 0x42, 0x87, 0x9d, 0xa6, 0xaf, 0xfe, 0xef, - 0x39, 0xf8, 0xa5, 0x5c, 0x10, 0x59, 0x9c, 0xe0, 0x09, 0xbe, 0x1c, 0xa1, - 0x40, 0x48, 0x7b, 0x69, 0x80, 0xb9, 0xc6, 0x97, 0x93, 0x94, 0xc7, 0x0f, - 0x2c, 0x93, 0xe7, 0xa0, 0x32, 0x86, 0x80, 0xb6, 0x9e, 0x00, 0xd4, 0xe5, - 0x04, 0x24, 0x47, 0xf4, 0x56, 0xa3, 0x63, 0xba, 0xeb, 0xaa, 0x69, 0x82, - 0x7c, 0xe1, 0xab, 0xce, 0x86, 0xfd, 0xd7, 0x66, 0x27, 0x24, 0x87, 0x87, - 0x2d, 0x8e, 0xe4, 0x7d, 0x28, 0xd5, 0x07, 0xdb, 0xcd, 0x1e, 0x58, 0x81, - 0x4f, 0x8d, 0x26, 0x4d, 0xbb, 0x54, 0x6b, 0x58, 0x84, 0x5a, 0x7b, 0xc0, - 0x9e, 0xbc, 0x29, 0x56, 0x13, 0x71, 0x4e, 0xcf, 0x40, 0xc7, 0xa2, 0xc0, - 0xd5, 0xb0, 0xb9, 0xd7, 0x6f, 0xfc, 0xf0, 0x02, 0x88, 0xfc, 0xaa, 0x47, - 0x1d, 0xa1, 0x05, 0xa6, 0x99, 0xf3, 0x47, 0xdb, 0xae, 0xea, 0xcf, 0x87, - 0x32, 0x48, 0x1b, 0x14, 0x44, 0x2f, 0xe4, 0x94, 0x49, 0xf5, 0x02, 0x75, - 0x9d, 0x91, 0x34, 0x06, 0x6f, 0x71, 0xad, 0xad, 0x01, 0xb0, 0x6e, 0x01, - 0x7e, 0xd5, 0x57, 0xd7, 0x4f, 0x30, 0xa8, 0x25, 0x62, 0x75, 0x0a, 0x25, - 0x8a, 0xca, 0xa1, 0x00, 0x88, 0x1d, 0x07, 0xe8, 0xa1, 0x14, 0x1f, 0x55, - 0x47, 0x29, 0x48, 0x0b, 0x19, 0xb0, 0x42, 0xb9, 0xb5, 0x7b, 0x90, 0xa9, - 0xdf, 0x21, 0xf3, 0x7a, 0x20, 0xda, 0xd4, 0xb6, 0xe2, 0xee, 0x2f, 0x00, - 0x6d, 0xe0, 0xb3, 0x43, 0x09, 0x8f, 0xfd, 0xe5, 0xe1, 0x29, 0x58, 0x7d, - 0x8f, 0x49, 0x86, 0x0b, 0x3b, 0xeb, 0x06, 0x7a, 0x41, 0xeb, 0x00, 0x33, - 0xa6, 0x1a, 0x31, 0x93, 0x75, 0x53, 0x85, 0x74, 0x6b, 0xfe, 0x63, 0xb5, - 0x87, 0xeb, 0xf0, 0x9e, 0x07, 0x1c, 0xf0, 0x68, 0xd3, 0x17, 0x8d, 0x28, - 0x12, 0xbf, 0x77, 0x7a, 0x09, 0xbc, 0xdf, 0xd5, 0xee, 0x14, 0xe1, 0xd6, - 0x2a, 0xc1, 0xb4, 0x4a, 0xc7, 0xa1, 0x42, 0x71, 0xab, 0x2c, 0x21, 0x32, - 0x76, 0x42, 0x53, 0xb8, 0xe4, 0x19, 0x9a, 0xc4, 0x25, 0xcf, 0xd0, 0xf7, - 0x2c, 0x85, 0x48, 0xc4, 0xd4, 0x47, 0x3b, 0x73, 0x5e, 0x26, 0x76, 0xd2, - 0x5d, 0x06, 0x29, 0x6a, 0x2a, 0xd0, 0x29, 0xca, 0x84, 0x6b, 0x5f, 0xf2, - 0x39, 0xe1, 0x84, 0x6f, 0xb2, 0x06, 0xe3, 0xcd, 0xd1, 0x06, 0xcd, 0x5d, - 0x4f, 0x66, 0x89, 0x54, 0xfc, 0x1d, 0xf7, 0xae, 0x6d, 0x43, 0x06, 0xf8, - 0x2e, 0xf3, 0x26, 0xa8, 0xf9, 0xe2, 0xb8, 0xb8, 0xef, 0x3a, 0x2e, 0xee, - 0x7c, 0xa1, 0x03, 0x6d, 0xe0, 0x1f, 0xea, 0x15, 0x4d, 0x3d, 0xdf, 0xb5, - 0x8c, 0x1a, 0xd4, 0x76, 0x77, 0xbc, 0xce, 0xe7, 0x80, 0x5f, 0x79, 0x2d, - 0xa9, 0xc0, 0x83, 0xe9, 0x1f, 0x15, 0x12, 0xb0, 0x2b, 0xc5, 0x66, 0xe9, - 0x97, 0x72, 0x91, 0xae, 0xfa, 0x93, 0xec, 0xda, 0x9b, 0xfd, 0xbe, 0x3d, - 0xe0, 0x68, 0x63, 0x81, 0x40, 0x73, 0x95, 0x11, 0x08, 0xb7, 0xe3, 0x8f, - 0xa6, 0x39, 0xaa, 0xcf, 0xd9, 0x9e, 0xf1, 0x9c, 0xab, 0xc3, 0x75, 0x10, - 0x3d, 0x09, 0x20, 0x69, 0xbc, 0x3a, 0xfe, 0xb3, 0x5b, 0x32, 0x1d, 0x69, - 0x98, 0x97, 0xeb, 0xe7, 0x96, 0xb2, 0x1c, 0xf7, 0x19, 0x72, 0xc7, 0x8f, - 0x65, 0x52, 0x25, 0x8c, 0x00, 0x4d, 0xa3, 0xb5, 0x60, 0x28, 0x1f, 0x97, - 0x30, 0x58, 0x5b, 0x19, 0x62, 0x89, 0xdb, 0x0c, 0x6c, 0xe2, 0x84, 0xab, - 0x4f, 0x88, 0xf8, 0xcf, 0x36, 0x87, 0x26, 0xbb, 0x51, 0xa6, 0x48, 0xde, - 0xc0, 0xd5, 0xba, 0x12, 0xba, 0x36, 0x03, 0x63, 0xab, 0xfa, 0xb8, 0xb2, - 0x67, 0x92, 0x69, 0x35, 0x14, 0x45, 0x81, 0xd5, 0xba, 0x59, 0x3d, 0xa3, - 0x76, 0xd8, 0x69, 0xb3, 0xf0, 0x02, 0x35, 0xa5, 0xbc, 0xc3, 0x44, 0x25, - 0xb2, 0x6c, 0x60, 0xcd, 0xbe, 0x81, 0x04, 0x3e, 0xee, 0x99, 0x52, 0x73, - 0x41, 0xb1, 0x1f, 0x72, 0xa1, 0x9a, 0xf0, 0x75, 0x66, 0xe6, 0x1a, 0x69, - 0x89, 0xbc, 0x12, 0x14, 0x5b, 0xea, 0xdb, 0xab, 0x5a, 0x18, 0x81, 0x1a, - 0xb5, 0xd7, 0xd3, 0xe0, 0x59, 0x34, 0xe2, 0x7e, 0x9f, 0x23, 0x13, 0x0f, - 0xd6, 0x57, 0x87, 0x11, 0x07, 0x8a, 0xb0, 0x52, 0x43, 0x68, 0xc3, 0x61, - 0x9d, 0x99, 0xd0, 0xc2, 0xa9, 0x56, 0x3d, 0x42, 0x68, 0xcd, 0xe1, 0x07, - 0x8d, 0xd8, 0x43, 0x98, 0xaa, 0x54, 0x21, 0x5e, 0xfd, 0x6d, 0xa0, 0x88, - 0x84, 0xe2, 0xdf, 0xaa, 0x21, 0x7e, 0xab, 0xb8, 0x50, 0x47, 0xba, 0xc5, - 0x9b, 0x16, 0x53, 0xcc, 0x15, 0xa4, 0x1e, 0xff, 0xa1, 0x1a, 0x38, 0xf7, - 0x4f, 0xb4, 0xe7, 0x00, 0xcd, 0xa1, 0x8e, 0x45, 0x6c, 0xee, 0xa9, 0x56, - 0xae, 0xad, 0x9f, 0x74, 0x1b, 0xfc, 0xd0, 0xbb, 0xbb, 0xe0, 0xda, 0x16, - 0xbd, 0x78, 0x67, 0x71, 0x50, 0xf8, 0xc3, 0xe6, 0xfa, 0xfa, 0xe8, 0x33, - 0x01, 0xc6, 0x8f, 0x54, 0x3b, 0xe4, 0x05, 0xb5, 0xb6, 0x64, 0x9a, 0x2b, - 0x71, 0xf4, 0x23, 0xaf, 0x1d, 0xb5, 0xf9, 0x9b, 0xc6, 0x67, 0xa8, 0x5d, - 0x72, 0xb2, 0x8b, 0xbe, 0x07, 0x27, 0x32, 0x61, 0x06, 0x8c, 0x79, 0x04, - 0xd4, 0x7d, 0xf9, 0x07, 0xa2, 0x35, 0x6d, 0x98, 0xcd, 0xe7, 0x64, 0xe7, - 0x5a, 0xe4, 0xff, 0x80, 0x01, 0xb5, 0x0c, 0x54, 0xcc, 0x20, 0xbf, 0x2c, - 0x18, 0x43, 0xe6, 0x4a, 0xb7, 0xbb, 0xdc, 0xd4, 0x58, 0x78, 0xb5, 0x10, - 0x3f, 0x30, 0xdf, 0x37, 0xe8, 0xd6, 0x70, 0x66, 0x8c, 0x85, 0xbd, 0x5c, - 0xfd, 0x10, 0x11, 0x17, 0x77, 0x65, 0xcb, 0x10, 0x74, 0x77, 0xc0, 0x13, - 0x06, 0x25, 0x56, 0xc6, 0x99, 0x99, 0xaf, 0xa8, 0x6e, 0x71, 0xe6, 0x3b, - 0xc4, 0xc1, 0x72, 0xec, 0xec, 0xe2, 0x71, 0xf4, 0x13, 0x6c, 0xd8, 0xc3, - 0x56, 0x7b, 0x4f, 0xc3, 0x1e, 0x2a, 0xd9, 0x24, 0xa0, 0x83, 0x0c, 0xb0, - 0x40, 0x49, 0x1b, 0x49, 0xe6, 0xe8, 0x81, 0x93, 0xe7, 0x6b, 0x5a, 0xdf, - 0x50, 0xc4, 0x64, 0xdf, 0x59, 0x38, 0x3d, 0x67, 0x2f, 0x0f, 0x6f, 0x73, - 0xe5, 0xb2, 0x85, 0x4d, 0x16, 0x6f, 0x72, 0x79, 0x05, 0x6b, 0x2d, 0x81, - 0xdd, 0x87, 0xb7, 0xa1, 0xb8, 0x0e, 0x02, 0x5d, 0x27, 0x99, 0xc9, 0x95, - 0xcb, 0x7e, 0x36, 0x58, 0x1f, 0x27, 0x27, 0xd8, 0x8b, 0x48, 0x8f, 0xb8, - 0x38, 0x59, 0x82, 0xd0, 0x76, 0xa4, 0xeb, 0x71, 0x52, 0xc8, 0x6e, 0x5c, - 0x72, 0x1c, 0x63, 0x88, 0xb2, 0x08, 0xab, 0x1f, 0xed, 0xe2, 0xbb, 0xe4, - 0x25, 0xed, 0x92, 0x13, 0xab, 0x1e, 0x90, 0x4c, 0x2c, 0x25, 0x2a, 0x35, - 0xd2, 0x07, 0xe6, 0xf7, 0xb5, 0xa9, 0x70, 0xb9, 0xee, 0xac, 0x97, 0xbc, - 0xb3, 0x0e, 0xe2, 0x73, 0x63, 0x12, 0x19, 0xfd, 0x31, 0xc3, 0x2a, 0x58, - 0x9a, 0xe8, 0x0f, 0xcf, 0x38, 0x09, 0xb9, 0xef, 0xd2, 0xa7, 0x10, 0xf8, - 0x67, 0xae, 0x76, 0x89, 0xb1, 0xc3, 0x5e, 0x06, 0xf2, 0xc2, 0x63, 0xff, - 0xdd, 0xf8, 0x7b, 0x2e, 0x0b, 0x17, 0xa0, 0x65, 0x84, 0xbe, 0x5d, 0xfc, - 0xf4, 0xd5, 0x80, 0x84, 0xfe, 0xa6, 0x72, 0xc7, 0xc0, 0x0c, 0xf6, 0x80, - 0xcc, 0x3c, 0x7e, 0xf8, 0x81, 0xe3, 0x2f, 0x1f, 0xf3, 0x78, 0xc0, 0x17, - 0x82, 0x7a, 0x74, 0x27, 0xa0, 0x47, 0x47, 0xf4, 0x59, 0x2b, 0xba, 0x0b, - 0x2d, 0x19, 0x72, 0x8a, 0xa8, 0x90, 0xef, 0xf9, 0x74, 0x29, 0x48, 0xc5, - 0xf8, 0x62, 0x11, 0x71, 0x6b, 0x00, 0xba, 0x06, 0x78, 0x0e, 0xd4, 0xd1, - 0xc8, 0x7f, 0xd3, 0xf7, 0xb6, 0xd7, 0xfa, 0x50, 0xcc, 0x20, 0xbc, 0xee, - 0x83, 0x5f, 0xea, 0x63, 0x12, 0x20, 0x2e, 0x5f, 0x92, 0xa5, 0xf9, 0x4b, - 0x73, 0x34, 0x7f, 0x69, 0x7f, 0x9e, 0xbf, 0xfa, 0x07, 0x7e, 0x93, 0x32, - 0x13, 0x2c, 0xe1, 0xf9, 0x9f, 0x83, 0x0d, 0x7e, 0x1e, 0xd0, 0xf7, 0x2c, - 0x50, 0x6f, 0x6e, 0x08, 0x96, 0x49, 0x32, 0xb7, 0xc8, 0x65, 0x69, 0x8d, - 0xe5, 0xb6, 0x3e, 0x72, 0xd6, 0xbd, 0xc2, 0xb2, 0xe0, 0x4f, 0xbb, 0x90, - 0xb5, 0x8a, 0x05, 0x67, 0xa7, 0x32, 0x27, 0xb5, 0xa5, 0x5e, 0xff, 0xd5, - 0x19, 0x20, 0x6e, 0x87, 0xf0, 0x32, 0x91, 0x9b, 0x22, 0x5f, 0xa0, 0xdd, - 0x8e, 0x79, 0xe4, 0x4d, 0x2b, 0xfc, 0x70, 0xb6, 0x69, 0xd7, 0x93, 0x17, - 0x93, 0xa0, 0x5b, 0xa8, 0x63, 0xc5, 0x7a, 0x82, 0x63, 0x3e, 0x93, 0x3b, - 0x07, 0xb0, 0xe3, 0xa8, 0x9e, 0x85, 0xff, 0x24, 0xdb, 0xfd, 0x57, 0x9e, - 0x5c, 0x0e, 0x5c, 0xf2, 0x95, 0x67, 0xc4, 0xe9, 0x09, 0xf1, 0x2e, 0x85, - 0x2a, 0x50, 0xeb, 0xa7, 0xcf, 0xde, 0xf1, 0xdf, 0xb7, 0xfe, 0xa9, 0xc5, - 0x50, 0x62, 0xfc, 0x70, 0x43, 0x42, 0xa7, 0x39, 0xd0, 0x34, 0x57, 0x64, - 0xd1, 0x4c, 0xa5, 0x73, 0xda, 0xb8, 0x65, 0x52, 0x5a, 0x74, 0x4e, 0x5a, - 0x76, 0xad, 0xa6, 0xfd, 0xcb, 0x1d, 0x90, 0x65, 0x28, 0xd3, 0x92, 0x4f, - 0x5b, 0xcf, 0xda, 0x4b, 0x5e, 0xbc, 0x03, 0x7d, 0x73, 0x16, 0x4f, 0x2f, - 0xcd, 0xfb, 0x79, 0x30, 0xdb, 0x07, 0xb6, 0xfc, 0x47, 0x55, 0xf1, 0xa9, - 0xf4, 0x30, 0x8c, 0x61, 0xfd, 0x57, 0x31, 0xe7, 0xab, 0x8e, 0x29, 0x93, - 0x29, 0x70, 0x9f, 0x5e, 0x6a, 0x57, 0xab, 0xf3, 0xdb, 0xf4, 0xac, 0x94, - 0xdb, 0x02, 0x3e, 0x5b, 0x93, 0xa3, 0x02, 0xd8, 0xc5, 0xb6, 0x6b, 0xee, - 0x24, 0xd0, 0x60, 0xae, 0xf5, 0x09, 0x55, 0x5c, 0x22, 0xd2, 0x02, 0x5c, - 0xa4, 0x5a, 0x0e, 0xb1, 0x53, 0x3f, 0x3a, 0xd4, 0xe4, 0x61, 0xff, 0xbd, - 0xbc, 0xcd, 0xa7, 0x97, 0x10, 0xa5, 0x76, 0x8c, 0xe1, 0xd2, 0xa6, 0x60, - 0xdb, 0xe0, 0x06, 0x62, 0x77, 0x3c, 0xd4, 0xc0, 0xaf, 0x78, 0x3f, 0xd0, - 0xab, 0x2d, 0x6b, 0x8f, 0x69, 0x10, 0xad, 0x23, 0xc0, 0xd5, 0xcb, 0x45, - 0xed, 0xa6, 0x76, 0x84, 0x5b, 0x73, 0x82, 0xb2, 0x65, 0x55, 0xd2, 0x96, - 0x54, 0x90, 0xc3, 0xa1, 0xcf, 0x44, 0x8a, 0x16, 0x98, 0xdd, 0xa1, 0x59, - 0x44, 0x59, 0x95, 0xbc, 0x79, 0x7d, 0x7e, 0xd6, 0x84, 0x8e, 0x16, 0x44, - 0x4b, 0x60, 0xc3, 0x6d, 0xd6, 0xa7, 0x24, 0xb1, 0xc9, 0xfd, 0x6b, 0xa0, - 0x1d, 0x4d, 0x7a, 0x9b, 0x8d, 0x41, 0x32, 0x05, 0xe0, 0xbc, 0xe1, 0x64, - 0x44, 0x9f, 0x48, 0x26, 0x27, 0x1e, 0xe5, 0x10, 0x55, 0x73, 0xf8, 0xf0, - 0x58, 0x6e, 0xf7, 0xd7, 0x47, 0x5f, 0xe8, 0x78, 0x0d, 0x9b, 0x54, 0xd1, - 0xa1, 0x39, 0x6c, 0x76, 0x08, 0x45, 0x28, 0x7e, 0x3a, 0x2e, 0x1d, 0x36, - 0x2c, 0xc1, 0x62, 0x88, 0x66, 0x00, 0x6a, 0x3f, 0x9b, 0xb4, 0xac, 0x83, - 0x63, 0x55, 0xff, 0xbf, 0x89, 0x17, 0xaf, 0x4b, 0xf5, 0xe1, 0xb9, 0x82, - 0xc9, 0xd9, 0x7e, 0xff, 0x7d, 0x41, 0x27, 0xa2, 0xbc, 0xac, 0x49, 0xfc, - 0x09, 0xd2, 0xcc, 0xb9, 0x46, 0xcb, 0x0e, 0xab, 0x98, 0x9d, 0x92, 0xd6, - 0xdf, 0xb4, 0x43, 0xb4, 0x9d, 0x47, 0x6b, 0x1c, 0x56, 0xe4, 0x60, 0x32, - 0xee, 0xc8, 0x9b, 0x89, 0x85, 0xfe, 0xcb, 0xa7, 0xfd, 0x68, 0x23, 0xfa, - 0xa9, 0xf3, 0x47, 0xb6, 0x9c, 0x56, 0x8a, 0x3f, 0xe2, 0x47, 0x3e, 0xd8, - 0x55, 0x0f, 0x3e, 0x70, 0x11, 0x1d, 0xdd, 0x4e, 0x64, 0xdb, 0xf8, 0xa3, - 0x62, 0x73, 0x82, 0x7f, 0x0d, 0xfb, 0xd2, 0xcb, 0x21, 0xb2, 0x80, 0x77, - 0xa4, 0xbd, 0x83, 0x05, 0x8b, 0x30, 0x7e, 0x61, 0x05, 0xe8, 0xde, 0x02, - 0xc8, 0xaa, 0x3f, 0xea, 0x67, 0x75, 0x5e, 0xe5, 0x68, 0xb7, 0x8e, 0xa6, - 0x26, 0x04, 0x90, 0x62, 0x17, 0x00, 0xcc, 0x93, 0x98, 0x90, 0x59, 0x2a, - 0xab, 0xa1, 0x4a, 0x25, 0xd4, 0x42, 0xbc, 0x0f, 0xf8, 0x2f, 0x0e, 0x5a, - 0x11, 0xae, 0x24, 0xa7, 0xa3, 0xa6, 0x51, 0x9a, 0x45, 0x42, 0x1d, 0xf5, - 0xc4, 0x11, 0x6c, 0xd6, 0xbd, 0x8b, 0x0e, 0xe8, 0x68, 0xa7, 0xe0, 0x22, - 0x10, 0xbd, 0xc0, 0xcc, 0x96, 0x9e, 0x40, 0x40, 0xb7, 0x8e, 0x67, 0x6e, - 0x86, 0x38, 0x07, 0xbf, 0x42, 0x0a, 0xd1, 0x5a, 0x09, 0x75, 0x5b, 0xbd, - 0xce, 0xec, 0xf5, 0xbd, 0xc8, 0x6f, 0xa3, 0x08, 0xcb, 0x0b, 0xe6, 0xcb, - 0x02, 0x88, 0x93, 0x99, 0x40, 0x10, 0x24, 0x6e, 0xeb, 0x20, 0xdb, 0xcd, - 0x04, 0xf2, 0x56, 0x18, 0xdc, 0x47, 0xfb, 0x65, 0x12, 0x2b, 0xb4, 0x53, - 0xe9, 0xa2, 0x07, 0xc4, 0xca, 0x71, 0xf5, 0x9d, 0x53, 0x9e, 0xe8, 0x7a, - 0x80, 0xdd, 0xd3, 0xdc, 0x55, 0x4c, 0xcf, 0xb0, 0x47, 0xf4, 0xf1, 0x9a, - 0x58, 0x1d, 0x45, 0x56, 0x15, 0x48, 0xb6, 0x48, 0x3a, 0xf8, 0xd1, 0x40, - 0xa3, 0xfe, 0x4e, 0xfa, 0xe1, 0xa9, 0x6a, 0xe3, 0x00, 0x00, 0x8a, 0x3a, - 0xf8, 0xab, 0x75, 0x80, 0x1b, 0x9d, 0x6c, 0x7a, 0x44, 0x52, 0x70, 0xd2, - 0xf4, 0xd6, 0x22, 0x41, 0xcb, 0xac, 0xc9, 0x15, 0xbd, 0xf2, 0x1c, 0xe7, - 0x84, 0x0a, 0xd4, 0xdb, 0x5b, 0xd3, 0x2a, 0x86, 0x81, 0x3b, 0x50, 0x65, - 0x4b, 0x40, 0xfa, 0x5b, 0xf9, 0xcf, 0x4a, 0xad, 0xc6, 0x6b, 0xd4, 0x9b, - 0x9c, 0x23, 0x02, 0xcd, 0xfe, 0x9a, 0xaa, 0xc2, 0x51, 0x90, 0x1b, 0xac, - 0x33, 0xea, 0x61, 0xf6, 0x4d, 0x5f, 0x94, 0x5a, 0x06, 0x35, 0x17, 0x49, - 0x5f, 0xa0, 0xb3, 0x2b, 0xb6, 0x70, 0xb3, 0xbc, 0xa9, 0x69, 0x0c, 0x34, - 0x68, 0x81, 0xed, 0x3c, 0x00, 0x18, 0xa6, 0xc3, 0xa6, 0xb1, 0x86, 0x83, - 0xb6, 0x4a, 0xa2, 0x66, 0x55, 0x51, 0xef, 0x9f, 0xfb, 0xac, 0xd1, 0x47, - 0xff, 0xb5, 0x49, 0x22, 0x88, 0xe8, 0xc1, 0x23, 0xf4, 0xbd, 0x43, 0xa8, - 0x2e, 0xf1, 0x2a, 0xb3, 0xb1, 0x58, 0x91, 0x17, 0x88, 0xea, 0x13, 0x5c, - 0x6a, 0x68, 0x92, 0x59, 0x5c, 0x23, 0xac, 0xa1, 0x23, 0x39, 0x7b, 0x68, - 0x97, 0x1b, 0xbd, 0x30, 0xcd, 0x30, 0x79, 0xf8, 0xc9, 0xec, 0x39, 0xb0, - 0x85, 0xfa, 0xac, 0xaa, 0x0f, 0x1c, 0x0c, 0x22, 0x12, 0xf2, 0x21, 0x53, - 0xa2, 0x71, 0x28, 0x3a, 0xf1, 0x23, 0xd5, 0x54, 0xee, 0xf6, 0x7c, 0xdc, - 0x83, 0x75, 0xac, 0xd2, 0xfb, 0x82, 0x9b, 0x3d, 0x4c, 0x27, 0x38, 0x35, - 0x6e, 0x1c, 0x00, 0xc7, 0x5e, 0x34, 0xc8, 0x64, 0x4f, 0x51, 0x55, 0x84, - 0x02, 0x6d, 0x4b, 0xa3, 0xc6, 0x31, 0x69, 0xcd, 0xc7, 0xa4, 0x54, 0x3c, - 0x18, 0x63, 0x48, 0x3a, 0x11, 0xe8, 0xd8, 0x85, 0x6a, 0xea, 0x1a, 0x3a, - 0x06, 0x49, 0xfa, 0xa4, 0x2a, 0xb0, 0xf5, 0x8b, 0x0e, 0x7b, 0xf7, 0x5d, - 0x9f, 0x9a, 0x2e, 0xe4, 0x18, 0xbc, 0x1a, 0x42, 0xa8, 0x01, 0x04, 0x37, - 0x18, 0xd5, 0xdd, 0xba, 0x16, 0xc4, 0x74, 0xac, 0xfc, 0x36, 0x6f, 0x1b, - 0x58, 0x17, 0x7b, 0x9d, 0x6d, 0x35, 0x02, 0xcb, 0x2d, 0x3a, 0x40, 0x6c, - 0x51, 0x59, 0xc2, 0xb0, 0x01, 0xec, 0x4f, 0x81, 0xc6, 0xca, 0x73, 0x51, - 0x68, 0x55, 0x18, 0x5b, 0xe4, 0x20, 0x3d, 0x0d, 0x7b, 0x57, 0xe2, 0xf0, - 0xe0, 0x62, 0x9b, 0xc8, 0xf6, 0x37, 0x48, 0x3e, 0x91, 0xfa, 0x07, 0xaa, - 0x78, 0xcc, 0xe3, 0xb3, 0xa4, 0xd2, 0xed, 0xeb, 0x97, 0xc8, 0xb4, 0x11, - 0x7d, 0x35, 0x5d, 0xce, 0x08, 0xb2, 0x20, 0xd1, 0x6b, 0x78, 0x73, 0x40, - 0xbe, 0x43, 0x6b, 0x5c, 0x23, 0x50, 0xf2, 0x9c, 0x3f, 0x9e, 0x15, 0x95, - 0x03, 0x23, 0xfc, 0x18, 0x7a, 0x0f, 0x22, 0x6d, 0xd1, 0xe1, 0xef, 0xe7, - 0x69, 0x25, 0x74, 0x54, 0x7b, 0xe6, 0xe1, 0x0d, 0x8d, 0xb6, 0x89, 0xf0, - 0xfb, 0x9a, 0xd9, 0x1c, 0xb9, 0xc3, 0xa1, 0xcf, 0x8d, 0xdd, 0x8e, 0x8e, - 0xb1, 0xa7, 0x3e, 0xcf, 0x7a, 0xb9, 0xa5, 0x3b, 0x98, 0x11, 0x5d, 0x83, - 0x36, 0x5a, 0x32, 0x95, 0x5f, 0x0f, 0x57, 0x47, 0xf9, 0x82, 0xd5, 0x51, - 0xbf, 0x60, 0x95, 0x1f, 0x2b, 0x99, 0xb1, 0x55, 0xb9, 0x32, 0x8a, 0x5f, - 0x8d, 0x8e, 0x3b, 0x22, 0x0c, 0xb5, 0x42, 0xab, 0x81, 0x84, 0xa4, 0x96, - 0xc8, 0x2f, 0x42, 0x3a, 0x70, 0x78, 0xab, 0x08, 0xb5, 0xe1, 0x04, 0xb4, - 0x6e, 0xf2, 0x84, 0x4d, 0x1f, 0x80, 0x75, 0x4c, 0x35, 0xa1, 0x37, 0x20, - 0x1d, 0xb1, 0x00, 0x98, 0xa5, 0x5d, 0xa9, 0x37, 0xa8, 0xdd, 0x4e, 0xf0, - 0x60, 0x82, 0x68, 0x94, 0x9f, 0x87, 0xf8, 0x8c, 0xb6, 0x34, 0x01, 0x64, - 0x89, 0xee, 0x93, 0x64, 0x19, 0x4a, 0x09, 0x74, 0xac, 0x50, 0xd3, 0xde, - 0x28, 0xa1, 0x1b, 0x14, 0xe3, 0x2d, 0x72, 0x45, 0xa4, 0xff, 0xac, 0x03, - 0x33, 0xa3, 0x15, 0xcc, 0x8b, 0x9f, 0xec, 0x56, 0x32, 0x89, 0xe1, 0xd6, - 0x5f, 0x0c, 0x51, 0xca, 0x1c, 0x5b, 0x5f, 0x77, 0x2c, 0xf9, 0x46, 0x37, - 0x4b, 0xf1, 0x23, 0x6e, 0x0b, 0x77, 0xa9, 0x18, 0x18, 0xc9, 0xb0, 0x17, - 0xd3, 0xcf, 0xdb, 0xee, 0xda, 0x4d, 0xfa, 0x42, 0xcc, 0x1a, 0x98, 0x6e, - 0xd8, 0x56, 0xdb, 0xb0, 0xa5, 0x48, 0xf5, 0x52, 0x79, 0xbe, 0xcc, 0x35, - 0xb8, 0x26, 0x42, 0x28, 0x6e, 0x12, 0x41, 0x2f, 0xec, 0x02, 0xe8, 0x92, - 0xb4, 0xe2, 0x2e, 0x08, 0xc4, 0xbe, 0xf8, 0x49, 0xb2, 0x75, 0x6d, 0x75, - 0xb5, 0xeb, 0x94, 0x08, 0x1b, 0x92, 0xbb, 0x1a, 0x73, 0x17, 0x49, 0x31, - 0x0b, 0x32, 0xcb, 0x93, 0xed, 0x84, 0xa7, 0xea, 0xee, 0x57, 0x3d, 0x7b, - 0x0b, 0xd4, 0x1f, 0x4c, 0x9b, 0xce, 0x59, 0x1b, 0x17, 0x01, 0x33, 0x72, - 0xca, 0x5c, 0xe8, 0xa4, 0xb4, 0x96, 0x26, 0x27, 0x44, 0xde, 0xf9, 0x14, - 0xe9, 0x22, 0x68, 0x04, 0x94, 0xb9, 0x56, 0x5f, 0x23, 0xe8, 0xac, 0xa7, - 0x23, 0x46, 0xd5, 0xc2, 0x38, 0xad, 0x30, 0x4e, 0x16, 0xc6, 0x69, 0xef, - 0x7c, 0xfa, 0x4b, 0x9f, 0xb6, 0x12, 0x03, 0xa2, 0x2e, 0x47, 0x4e, 0xc1, - 0xc1, 0x24, 0x06, 0x24, 0x38, 0x91, 0xf2, 0x5b, 0x5f, 0x43, 0x05, 0xc4, - 0x97, 0xea, 0x6f, 0xfa, 0x96, 0x18, 0xdf, 0xb7, 0x9e, 0x9f, 0x9e, 0xe4, - 0xc9, 0x8d, 0x2c, 0xca, 0x3c, 0x2f, 0x21, 0xf3, 0x0c, 0x68, 0x5f, 0xa9, - 0xf3, 0x1e, 0x16, 0x68, 0x33, 0x41, 0xb5, 0x9c, 0x77, 0x53, 0x5b, 0xd1, - 0xa1, 0x5e, 0x6b, 0x5c, 0x54, 0x5e, 0x7a, 0x31, 0x79, 0x69, 0x02, 0x3c, - 0xf4, 0x94, 0x1d, 0x40, 0x4a, 0x4d, 0xf7, 0xff, 0x55, 0x9e, 0x59, 0xb7, - 0x73, 0x17, 0x51, 0x69, 0x10, 0xee, 0x05, 0x9f, 0x77, 0x4d, 0x12, 0xdb, - 0xef, 0x68, 0x2f, 0xe7, 0x28, 0xc5, 0xce, 0x5f, 0x26, 0x89, 0x7d, 0x18, - 0x95, 0x2a, 0x06, 0x41, 0x82, 0xe3, 0x63, 0x80, 0x8f, 0xdc, 0x84, 0x97, - 0xdf, 0x43, 0x1c, 0xe0, 0xfb, 0xfc, 0x86, 0xd0, 0x33, 0x26, 0x55, 0x0a, - 0x99, 0x55, 0x56, 0xfb, 0x39, 0x2b, 0x51, 0x86, 0xab, 0x2b, 0x04, 0xcd, - 0xcc, 0x2a, 0x03, 0x97, 0x2b, 0xd9, 0xf5, 0xe6, 0x9b, 0xb2, 0xa6, 0x37, - 0xbc, 0x2f, 0xf4, 0xaf, 0x37, 0x1b, 0x02, 0x1d, 0x64, 0x56, 0x08, 0x78, - 0x9b, 0xf5, 0x25, 0x80, 0x79, 0xeb, 0xe1, 0xca, 0x8a, 0xa7, 0x02, 0x93, - 0xc2, 0x2d, 0xb3, 0x23, 0x9e, 0x78, 0x87, 0xcc, 0x4e, 0xf2, 0x13, 0xa6, - 0x09, 0xb9, 0x35, 0x0d, 0x65, 0x62, 0xf4, 0x24, 0x08, 0x5b, 0x00, 0xc8, - 0x0b, 0x12, 0x4e, 0xb3, 0x47, 0x13, 0x1a, 0x1c, 0x93, 0x4e, 0x7f, 0x84, - 0x10, 0xf7, 0xda, 0xef, 0x67, 0x09, 0x5a, 0x8b, 0xa5, 0x5f, 0x67, 0xea, - 0x8c, 0x52, 0xb2, 0x8a, 0x41, 0x0a, 0xa3, 0x7d, 0x80, 0xf3, 0xf4, 0xfa, - 0xc8, 0x35, 0x79, 0xae, 0xea, 0x91, 0x5e, 0x34, 0x6f, 0xa3, 0xd2, 0x41, - 0xac, 0xb9, 0xb6, 0xbf, 0x54, 0x9f, 0x42, 0x85, 0x56, 0xe6, 0x39, 0x4e, - 0xeb, 0xb5, 0x2a, 0x92, 0x83, 0x85, 0xa7, 0x11, 0x56, 0xf7, 0x87, 0xe2, - 0x6b, 0xb5, 0x50, 0xa1, 0x0e, 0x61, 0x07, 0x5d, 0x1d, 0x92, 0x9d, 0x56, - 0xba, 0x4c, 0xb8, 0xdb, 0x61, 0xc9, 0x3d, 0x86, 0x7b, 0x86, 0x2d, 0x11, - 0x9b, 0x8b, 0x0b, 0x5d, 0x74, 0x0e, 0x2f, 0x4c, 0x4f, 0x14, 0x49, 0x70, - 0x8f, 0xd9, 0xa3, 0xa9, 0xbd, 0x53, 0x25, 0xee, 0x7a, 0xb4, 0xa8, 0x51, - 0x61, 0x11, 0x0a, 0x6a, 0x99, 0xe6, 0x78, 0xe5, 0xe0, 0x16, 0x7b, 0xae, - 0x29, 0x4d, 0x91, 0xbe, 0x11, 0x38, 0x8f, 0x8e, 0xa2, 0xaa, 0x65, 0x7d, - 0x41, 0x74, 0xd2, 0xe6, 0xb4, 0x90, 0x64, 0xef, 0x54, 0xb8, 0x19, 0x1b, - 0xcd, 0xcc, 0x9f, 0xa9, 0x37, 0xce, 0x89, 0x5f, 0xa7, 0xb9, 0xaa, 0x82, - 0x50, 0xe2, 0xd0, 0xc9, 0xa5, 0x54, 0x55, 0x3c, 0x65, 0x96, 0x3c, 0xa9, - 0x91, 0x29, 0x91, 0xab, 0x97, 0x3f, 0xd7, 0xa5, 0x8e, 0x84, 0x7c, 0x26, - 0x8b, 0x84, 0x8d, 0x52, 0x0f, 0x54, 0xa2, 0xed, 0xe9, 0x25, 0x58, 0xc3, - 0x32, 0x23, 0x26, 0xe1, 0xad, 0x3a, 0x87, 0xfe, 0x3c, 0xde, 0xaf, 0x33, - 0x18, 0x05, 0xe0, 0xd2, 0xd9, 0x24, 0x2a, 0xc4, 0x22, 0xd8, 0xe6, 0xc5, - 0x64, 0x31, 0x01, 0x16, 0xda, 0xa2, 0xbf, 0xb8, 0x01, 0x1a, 0x61, 0x30, - 0x81, 0x64, 0x4f, 0x15, 0x4b, 0x89, 0x06, 0xbd, 0x32, 0x57, 0x5b, 0xf7, - 0x0b, 0x91, 0x5b, 0xc8, 0x42, 0x6c, 0x3a, 0x1d, 0xc4, 0xd3, 0x02, 0xab, - 0xf3, 0xc5, 0x33, 0x8d, 0x6d, 0xc1, 0x35, 0x5b, 0xf5, 0x1d, 0xcf, 0x20, - 0xb6, 0x90, 0x4a, 0x34, 0x98, 0x7f, 0x18, 0x04, 0xb7, 0x62, 0xc1, 0x36, - 0x0f, 0x01, 0xdb, 0xbb, 0xd1, 0x2c, 0x9c, 0x86, 0xf7, 0x11, 0xaf, 0xdf, - 0xa7, 0xfd, 0xc7, 0x14, 0xd0, 0xca, 0x6f, 0x2b, 0x6b, 0xd4, 0xfd, 0x96, - 0x1f, 0x3f, 0xbb, 0x63, 0xb9, 0xa7, 0x10, 0x71, 0x3b, 0x28, 0x3b, 0xbc, - 0xcd, 0x5f, 0xf5, 0x0a, 0x2b, 0xf1, 0xf7, 0xdc, 0xc4, 0x42, 0xb6, 0xe0, - 0x13, 0x46, 0x05, 0x35, 0x82, 0x5a, 0xd4, 0x53, 0x3c, 0x5e, 0x71, 0x9b, - 0x2e, 0x64, 0x0c, 0x76, 0x8f, 0x70, 0x4b, 0xef, 0xbf, 0xe1, 0xb5, 0xa4, - 0x94, 0x17, 0x2f, 0x3f, 0x9c, 0xf0, 0x18, 0xaa, 0x9e, 0x10, 0x36, 0x62, - 0xfd, 0x19, 0xdc, 0x95, 0x9d, 0xff, 0x4b, 0x2d, 0xec, 0x7d, 0x87, 0x9a, - 0x26, 0xc1, 0x6e, 0x96, 0x2e, 0x53, 0x0f, 0x09, 0x3b, 0x74, 0x9e, 0x0c, - 0x36, 0x39, 0x9c, 0x44, 0x67, 0x87, 0xd2, 0xf8, 0xa8, 0xde, 0x43, 0x17, - 0x11, 0xc4, 0xdb, 0xe4, 0x29, 0xf9, 0x7a, 0x47, 0x58, 0xfe, 0x44, 0x2a, - 0xf3, 0xa4, 0x37, 0x6e, 0xaf, 0x8f, 0xc1, 0x72, 0x3c, 0xef, 0xc0, 0xc0, - 0x1e, 0x08, 0xc7, 0xf0, 0x0e, 0xf3, 0x10, 0x70, 0xa0, 0x0f, 0x7d, 0x02, - 0x3b, 0xc4, 0xde, 0x5b, 0x14, 0x36, 0x2d, 0xc3, 0x79, 0x9c, 0x73, 0xbe, - 0xff, 0x25, 0x1a, 0x4e, 0x2c, 0xbc, 0xcd, 0x57, 0x9a, 0xf2, 0xee, 0x66, - 0xdc, 0x84, 0x95, 0x34, 0x32, 0xd3, 0x8c, 0x96, 0x22, 0xff, 0x42, 0xc0, - 0xb8, 0x5a, 0xa0, 0xfd, 0x92, 0xd4, 0x99, 0x46, 0x90, 0xb8, 0x59, 0x00, - 0x66, 0xeb, 0x2b, 0xc5, 0x3e, 0x84, 0xc2, 0x7e, 0xda, 0x14, 0x30, 0xa2, - 0xbf, 0x87, 0xd5, 0xdd, 0xd3, 0x8b, 0xc2, 0x3c, 0x59, 0x20, 0x99, 0x97, - 0x81, 0xc4, 0x67, 0xe0, 0x5d, 0x8b, 0x7f, 0xc2, 0xde, 0x95, 0x23, 0x8f, - 0x93, 0x13, 0x4b, 0xd3, 0x73, 0xc1, 0xd4, 0x00, 0x17, 0x23, 0xd4, 0x8e, - 0x56, 0x98, 0x95, 0x05, 0x32, 0x11, 0xfc, 0x73, 0x1f, 0x6d, 0x36, 0x89, - 0xe7, 0xb3, 0xe9, 0xec, 0xd6, 0x17, 0x45, 0x54, 0xe6, 0xe4, 0xa1, 0xc3, - 0x09, 0x43, 0xb4, 0x32, 0x3d, 0x25, 0xd4, 0x38, 0x52, 0x87, 0x26, 0x06, - 0x72, 0xfa, 0x21, 0x0e, 0xae, 0x86, 0xa9, 0xde, 0x05, 0xe0, 0x79, 0x12, - 0x63, 0x37, 0x82, 0x35, 0x99, 0x0e, 0x3f, 0xff, 0xb8, 0x39, 0xaf, 0x0e, - 0x44, 0xca, 0x49, 0xef, 0x91, 0x2d, 0x76, 0x8f, 0x0c, 0xa0, 0xf7, 0x28, - 0xd1, 0x2d, 0x6f, 0x84, 0x11, 0x5f, 0xfc, 0xaf, 0xfd, 0xf4, 0x80, 0x66, - 0xe6, 0x75, 0x56, 0xa7, 0x58, 0x19, 0x9d, 0x87, 0xce, 0x74, 0x0f, 0x9b, - 0xe9, 0x1e, 0x7c, 0x1f, 0x5d, 0xdd, 0x9c, 0xb6, 0xba, 0xc1, 0x6d, 0x66, - 0x9d, 0xd7, 0x11, 0x95, 0xaa, 0x78, 0xd2, 0x59, 0x8d, 0x6e, 0x97, 0xdb, - 0x5d, 0xb5, 0x85, 0x97, 0xcf, 0x16, 0x35, 0x5a, 0x83, 0x5f, 0x5f, 0xb2, - 0x9d, 0x2e, 0x7c, 0x72, 0xb6, 0x18, 0xc8, 0x58, 0xa4, 0x4d, 0xb7, 0x75, - 0x4e, 0x7e, 0xf5, 0x64, 0x48, 0x6b, 0xa6, 0x2e, 0x1c, 0x50, 0x1b, 0x13, - 0xce, 0x55, 0x7c, 0xea, 0x0c, 0x42, 0x5f, 0xf9, 0xce, 0x59, 0xdb, 0xfd, - 0xfd, 0xed, 0x45, 0x59, 0xf5, 0x0c, 0xe2, 0x84, 0x0a, 0xfa, 0xe5, 0x33, - 0xcc, 0x5c, 0x1c, 0x7e, 0x06, 0xa8, 0xcb, 0x65, 0x16, 0x3e, 0x77, 0x95, - 0xcb, 0xf9, 0x98, 0x36, 0x18, 0x47, 0xea, 0x6a, 0x82, 0x1e, 0xd8, 0x87, - 0x52, 0x84, 0x77, 0x96, 0xce, 0x45, 0xa8, 0x6e, 0xb1, 0xbf, 0xf5, 0x99, - 0x64, 0xa7, 0xe5, 0x33, 0xd7, 0xd7, 0x47, 0x50, 0x15, 0xe3, 0x70, 0x33, - 0xa1, 0xde, 0xc1, 0xf8, 0xd8, 0xc2, 0xf5, 0x93, 0xa2, 0x7a, 0x2e, 0x52, - 0x26, 0x08, 0x8f, 0x5d, 0xf0, 0x26, 0xb6, 0x1c, 0x80, 0xe4, 0x47, 0xf2, - 0xd4, 0x33, 0x87, 0xe7, 0xec, 0xcb, 0x94, 0xb3, 0x4f, 0xea, 0xdb, 0x4d, - 0x46, 0xf5, 0xba, 0xcc, 0x67, 0x77, 0x79, 0x7a, 0xcc, 0x4f, 0x9f, 0xfa, - 0x60, 0x83, 0x4c, 0x80, 0x7b, 0xc4, 0x16, 0x44, 0xdd, 0xda, 0xcb, 0x41, - 0x7f, 0x17, 0xdd, 0x53, 0xfd, 0x24, 0x5d, 0x08, 0x24, 0x5b, 0x9d, 0xe8, - 0xfe, 0x83, 0x02, 0x58, 0x87, 0x1b, 0x64, 0x1d, 0xba, 0x9f, 0xa0, 0xbe, - 0x58, 0x59, 0x87, 0x3b, 0x06, 0x42, 0xfe, 0xe0, 0x01, 0xd8, 0xd3, 0xde, - 0x19, 0x60, 0x7a, 0x4b, 0x14, 0x59, 0x06, 0xb9, 0x82, 0x5f, 0x82, 0x5e, - 0x99, 0xfc, 0x65, 0x02, 0x58, 0x16, 0xad, 0x03, 0xaf, 0x2e, 0xf6, 0x9f, - 0x07, 0xfe, 0xc9, 0x9e, 0xc4, 0x6a, 0xb6, 0x18, 0x70, 0x08, 0x7c, 0xa8, - 0xff, 0x1b, 0xf4, 0x8b, 0x8f, 0x54, 0x95, 0x28, 0xab, 0x48, 0x7f, 0xae, - 0x03, 0x76, 0xde, 0x28, 0x2c, 0x23, 0x50, 0xb2, 0xb3, 0xc9, 0xb4, 0x71, - 0x1d, 0x36, 0x0d, 0xbc, 0x6d, 0x92, 0x9f, 0x6d, 0xd3, 0xfc, 0xec, 0x77, - 0x9c, 0x20, 0xf1, 0xfd, 0x85, 0x18, 0xaa, 0x2a, 0x38, 0x45, 0xec, 0xfb, - 0x8c, 0xca, 0x9a, 0x24, 0xbf, 0xd3, 0x3a, 0xc0, 0x8a, 0x66, 0xb1, 0xf2, - 0xb7, 0x48, 0x90, 0x5d, 0x2f, 0x82, 0xac, 0xbc, 0x47, 0x80, 0x9f, 0xde, - 0x56, 0x25, 0xfa, 0x21, 0xff, 0x39, 0x36, 0xad, 0xb2, 0x1f, 0xdd, 0x7f, - 0xaa, 0x99, 0xf7, 0x07, 0x76, 0xb5, 0xae, 0x24, 0x5a, 0x1f, 0xc0, 0x6e, - 0x0e, 0x9a, 0x24, 0xb4, 0x2b, 0x72, 0xeb, 0x9f, 0xaf, 0xa5, 0x3d, 0x17, - 0x00, 0xc5, 0x2a, 0x29, 0x36, 0x29, 0x3c, 0xef, 0xa8, 0x84, 0x55, 0xf3, - 0xaa, 0x6a, 0x97, 0xd6, 0xe4, 0xd9, 0xc1, 0x77, 0x5f, 0xa1, 0xfc, 0xa3, - 0xc6, 0x7f, 0xf8, 0x63, 0xe5, 0xd2, 0xf4, 0x41, 0xcd, 0x1e, 0xd4, 0xe4, - 0x41, 0xa7, 0x54, 0x3b, 0x7f, 0x3d, 0x2c, 0x44, 0xb5, 0xa5, 0x06, 0x3b, - 0xb4, 0x46, 0xbf, 0x52, 0x4b, 0xa1, 0xa4, 0x72, 0x9a, 0xc0, 0x80, 0x40, - 0xa4, 0x74, 0x6e, 0xb3, 0x64, 0x0c, 0x40, 0x2b, 0x0f, 0x50, 0x2a, 0xb9, - 0x8f, 0xa0, 0xa2, 0xf3, 0x8d, 0x50, 0x2a, 0xe1, 0x6c, 0x5a, 0x40, 0x6f, - 0xf9, 0xaf, 0xdf, 0x77, 0xa0, 0xa7, 0xd6, 0xc2, 0x3b, 0x4c, 0x3b, 0xf5, - 0x69, 0xf5, 0xc6, 0x7f, 0x68, 0x44, 0x7d, 0x2a, 0x7a, 0xfb, 0xe0, 0xa7, - 0xe7, 0x60, 0xba, 0xe9, 0x44, 0x85, 0x68, 0x92, 0x1f, 0x56, 0xaf, 0x00, - 0x3c, 0x8b, 0xc8, 0x00, 0x22, 0xde, 0xa1, 0xfd, 0x61, 0x37, 0x64, 0x2a, - 0x75, 0x8c, 0x49, 0x50, 0xbd, 0xa6, 0x4d, 0xc0, 0xd2, 0xe8, 0xa0, 0xbf, - 0xb5, 0x39, 0x9a, 0xa0, 0x4c, 0x40, 0xe6, 0x12, 0xe2, 0x30, 0x72, 0x61, - 0x27, 0x61, 0xf3, 0xa1, 0xa8, 0xe2, 0x70, 0x4f, 0xc4, 0x31, 0xe5, 0x92, - 0x04, 0xab, 0x40, 0x15, 0x89, 0x27, 0x24, 0x87, 0x2a, 0x2b, 0x8c, 0x28, - 0x6a, 0x9f, 0x25, 0xb4, 0x2d, 0x17, 0x61, 0x82, 0x90, 0xd5, 0x89, 0x52, - 0x07, 0xf8, 0x65, 0x8d, 0xf1, 0x17, 0xf5, 0x35, 0x41, 0xef, 0xb9, 0xbe, - 0x8e, 0xaa, 0x40, 0x07, 0x40, 0x49, 0xd8, 0x2a, 0x72, 0x9d, 0x52, 0xa1, - 0x3f, 0xad, 0x64, 0x9e, 0x90, 0x31, 0x92, 0x34, 0xfb, 0xba, 0x8d, 0xb6, - 0x2c, 0x05, 0xf1, 0xc0, 0x73, 0xc5, 0xd1, 0xbb, 0x9c, 0xd7, 0xad, 0xd0, - 0xee, 0x64, 0xda, 0x9c, 0x9d, 0x7c, 0x0c, 0x9e, 0x17, 0x8f, 0x53, 0x7c, - 0xbe, 0x64, 0x47, 0x79, 0x9d, 0x70, 0x3f, 0xbd, 0xf0, 0xdd, 0x29, 0x8d, - 0xc8, 0xc9, 0xb1, 0x29, 0x68, 0x17, 0x15, 0xec, 0xf7, 0xcf, 0x11, 0x24, - 0x8a, 0x1d, 0x3b, 0x98, 0xe8, 0xfa, 0x1d, 0xd6, 0xb8, 0x37, 0xdd, 0x09, - 0x46, 0xe4, 0x55, 0x92, 0xa9, 0x71, 0x80, 0x0e, 0xc5, 0x43, 0x5a, 0x7b, - 0x29, 0x11, 0x19, 0xeb, 0x5b, 0x38, 0x1f, 0x56, 0x77, 0x55, 0xfb, 0xe4, - 0x54, 0xfb, 0x4c, 0x1e, 0xfa, 0x24, 0x7e, 0x80, 0x55, 0xee, 0x08, 0x48, - 0x87, 0xe2, 0x0e, 0x9b, 0x6c, 0x7c, 0x11, 0xed, 0xe2, 0x74, 0x46, 0x9c, - 0x8d, 0xb6, 0xdb, 0xf9, 0x86, 0x34, 0xa5, 0x24, 0xbb, 0xce, 0x20, 0x29, - 0x1f, 0x10, 0x98, 0x9c, 0x9f, 0xea, 0xbe, 0xfb, 0xef, 0x58, 0xcc, 0xd7, - 0x23, 0xed, 0x76, 0x1a, 0x24, 0x44, 0xcf, 0x5d, 0x84, 0x58, 0xbf, 0x25, - 0xc1, 0xb1, 0x80, 0x47, 0x27, 0x8b, 0x58, 0x91, 0x18, 0x8d, 0xac, 0x02, - 0x9b, 0x5b, 0x6d, 0x56, 0x1e, 0x06, 0x99, 0x86, 0x65, 0x80, 0x9a, 0x68, - 0x6d, 0x65, 0x89, 0x5f, 0xeb, 0x1d, 0xfb, 0x9b, 0xc3, 0x1d, 0xcc, 0xd4, - 0x9e, 0xc2, 0x51, 0xcd, 0xb4, 0x83, 0x8d, 0x76, 0x83, 0x2f, 0x88, 0xd9, - 0xa2, 0x04, 0x60, 0xef, 0xd5, 0x8b, 0x49, 0x00, 0x08, 0x4c, 0x75, 0x41, - 0xf2, 0x43, 0x35, 0x97, 0xeb, 0x64, 0xfe, 0xad, 0xf1, 0x9f, 0xc6, 0xc6, - 0x56, 0xab, 0x7b, 0xa8, 0xac, 0x21, 0x21, 0x12, 0x39, 0xad, 0xe9, 0x9c, - 0xd2, 0x7b, 0x64, 0xb8, 0xc3, 0x8f, 0xcd, 0x42, 0x40, 0xca, 0x3c, 0x2d, - 0x8b, 0x7a, 0x08, 0x6e, 0xe6, 0x63, 0xa0, 0x0e, 0x76, 0x3c, 0x7b, 0x61, - 0x1a, 0xc9, 0x8f, 0x37, 0x49, 0x38, 0xad, 0x59, 0x15, 0xd7, 0x44, 0x9e, - 0xfe, 0x44, 0x8a, 0xe2, 0x25, 0x38, 0x07, 0xdc, 0x1d, 0x9a, 0xbf, 0x1e, - 0xe3, 0x91, 0xcc, 0x1f, 0x7f, 0xcc, 0x92, 0x1e, 0x69, 0x5f, 0x36, 0x62, - 0x9b, 0xb7, 0x92, 0xf9, 0x13, 0xbd, 0x39, 0x9c, 0x2a, 0x3e, 0xe7, 0x3d, - 0xe0, 0xea, 0x60, 0x79, 0x09, 0xd3, 0x1b, 0x41, 0x9d, 0x50, 0x1a, 0x76, - 0x68, 0xbb, 0x3b, 0x34, 0x1b, 0x86, 0x3a, 0x39, 0xec, 0xde, 0x0b, 0x99, - 0xa7, 0x60, 0xc7, 0x51, 0x4e, 0x0c, 0xbb, 0xd5, 0x5a, 0x13, 0x00, 0xe6, - 0xaf, 0xe5, 0xbc, 0xb1, 0x19, 0x9c, 0x4d, 0x6a, 0x4e, 0xa6, 0x27, 0x7d, - 0x0d, 0xd2, 0xff, 0xa8, 0x57, 0xa4, 0xff, 0x3e, 0x06, 0x31, 0xd5, 0xd2, - 0x21, 0xe7, 0x26, 0xd3, 0xf7, 0x21, 0x83, 0xde, 0xf7, 0xa1, 0x83, 0xde, - 0xf7, 0xa1, 0xed, 0xf2, 0xfb, 0xd8, 0x70, 0xa1, 0xd8, 0x82, 0x7d, 0xa3, - 0x37, 0x7f, 0x08, 0xf1, 0xff, 0xa7, 0x87, 0x2d, 0xa2, 0x27, 0xbc, 0x3f, - 0x5c, 0xfe, 0xed, 0xfc, 0x8f, 0x54, 0xa0, 0x79, 0x8f, 0x95, 0x22, 0xc0, - 0x06, 0x5e, 0x32, 0x45, 0xb5, 0x71, 0x27, 0xcf, 0x90, 0x3c, 0x54, 0x88, - 0x44, 0x6c, 0x22, 0xef, 0xb6, 0x96, 0xd1, 0xd6, 0x20, 0xab, 0x2a, 0xa6, - 0xb6, 0x11, 0x17, 0xf4, 0x7c, 0x8a, 0x8f, 0x68, 0x24, 0x92, 0x5f, 0xe3, - 0xcc, 0x09, 0x14, 0x12, 0xad, 0xe5, 0x49, 0x5b, 0x94, 0x82, 0x28, 0x4b, - 0x08, 0xd9, 0x41, 0xfe, 0x6b, 0xf7, 0x81, 0x7a, 0xc2, 0xc2, 0x38, 0x82, - 0xa0, 0xaa, 0x81, 0x9a, 0xc4, 0x7a, 0x35, 0xbd, 0xa5, 0x49, 0xfc, 0x3d, - 0xcc, 0x5f, 0x9a, 0xca, 0xae, 0x72, 0x18, 0x80, 0xb1, 0x90, 0x5c, 0x0b, - 0xbe, 0x58, 0x52, 0x43, 0x54, 0x71, 0xc7, 0x1f, 0xca, 0x2c, 0xad, 0x65, - 0xed, 0xd3, 0xab, 0xad, 0xd6, 0x4d, 0x92, 0xeb, 0x5f, 0x13, 0xec, 0x06, - 0x02, 0x40, 0xb1, 0x73, 0x13, 0xb7, 0x9e, 0x7d, 0x41, 0xeb, 0x47, 0x83, - 0x91, 0xca, 0xa7, 0xaf, 0xff, 0xc8, 0x43, 0x44, 0xc6, 0x0f, 0xbf, 0xb3, - 0x95, 0x20, 0x44, 0xfd, 0xd6, 0xd2, 0x87, 0x19, 0x29, 0xc6, 0xa3, 0xfc, - 0x43, 0xf5, 0x20, 0xf8, 0xbf, 0x53, 0x6d, 0x3a, 0x11, 0xfd, 0xfa, 0x8f, - 0x0a, 0x8e, 0x00, 0x8b, 0x47, 0xd6, 0x18, 0x48, 0x6e, 0x83, 0x26, 0xf0, - 0x6c, 0x8e, 0xc7, 0x67, 0xee, 0x2b, 0xf7, 0xc7, 0x69, 0xe9, 0x68, 0x08, - 0xad, 0x03, 0x9b, 0x38, 0x15, 0x4e, 0x9c, 0x68, 0x01, 0x05, 0xd6, 0xca, - 0x19, 0x48, 0x8d, 0x4b, 0xb8, 0x6d, 0x09, 0x31, 0x2d, 0xb1, 0x52, 0x8c, - 0x87, 0xb3, 0x8c, 0xca, 0xfc, 0xe0, 0xff, 0x2e, 0x3f, 0x0c, 0x24, 0x45, - 0x5c, 0xfb, 0x72, 0x54, 0xad, 0x0e, 0x77, 0xdc, 0x86, 0xc5, 0xe6, 0x2a, - 0x9d, 0x94, 0xf9, 0xbc, 0x63, 0xf0, 0x50, 0xa8, 0xe1, 0xfb, 0x40, 0xcc, - 0x1f, 0x1a, 0x89, 0x02, 0x3a, 0x25, 0xfc, 0x48, 0x26, 0xbb, 0x43, 0xab, - 0x18, 0x37, 0xd4, 0xdd, 0x3d, 0xdb, 0xd8, 0x5b, 0xab, 0x8b, 0xc2, 0x75, - 0x28, 0x3f, 0x05, 0x6d, 0x01, 0xb2, 0x3d, 0xfd, 0x9f, 0x5e, 0xe2, 0x21, - 0x6a, 0x18, 0xd2, 0x3b, 0x90, 0x37, 0x2b, 0xda, 0x95, 0x6a, 0x91, 0x01, - 0xb6, 0xff, 0x22, 0xda, 0xc2, 0xbb, 0x4a, 0x38, 0x95, 0x87, 0xa5, 0x58, - 0x9b, 0x9c, 0x1a, 0x95, 0xd1, 0x56, 0xf7, 0x11, 0xf5, 0x57, 0xdb, 0x0f, - 0x89, 0xbe, 0xf4, 0xe2, 0x6e, 0xbe, 0x16, 0x4b, 0x58, 0xa2, 0xc6, 0xd8, - 0x54, 0x79, 0xac, 0x27, 0x11, 0xfa, 0x82, 0xc6, 0x6d, 0x4e, 0x91, 0x15, - 0x2e, 0x39, 0x09, 0xdd, 0x3a, 0x13, 0x19, 0xce, 0x11, 0x2d, 0xd0, 0x2e, - 0x96, 0x98, 0x05, 0x97, 0x51, 0x27, 0x9b, 0x64, 0x35, 0x11, 0x35, 0x7c, - 0x1a, 0xd8, 0xb2, 0x49, 0xbe, 0xdf, 0x72, 0xc8, 0xfd, 0x26, 0x75, 0xa3, - 0xc4, 0x33, 0xd1, 0xc9, 0x16, 0x0f, 0x3e, 0x70, 0xac, 0x17, 0x7e, 0x10, - 0xd8, 0x93, 0xda, 0x21, 0x83, 0x71, 0xf2, 0x8c, 0xd1, 0xad, 0xc0, 0x4e, - 0xcf, 0xed, 0xbd, 0xaf, 0xba, 0x17, 0xcd, 0x82, 0x62, 0x96, 0x48, 0x67, - 0xf7, 0xc9, 0xdf, 0xfc, 0x0e, 0x33, 0x18, 0x7b, 0x14, 0x8a, 0x71, 0x2b, - 0x8b, 0xfb, 0x5d, 0xb6, 0xeb, 0x1c, 0xa7, 0x88, 0x2b, 0x17, 0xf2, 0x4a, - 0x36, 0x19, 0xab, 0x84, 0x1c, 0x47, 0xc4, 0x2f, 0x6a, 0xf5, 0x43, 0x58, - 0x5d, 0x20, 0x88, 0x66, 0x85, 0x61, 0x3c, 0xa5, 0xda, 0x07, 0x86, 0xa1, - 0xf7, 0xf8, 0xe0, 0x72, 0x32, 0x2d, 0xa4, 0xaf, 0x43, 0x4b, 0xe4, 0x06, - 0xf2, 0xeb, 0x9e, 0xed, 0xfd, 0x0c, 0xf7, 0x33, 0xa2, 0x9f, 0x94, 0xc9, - 0x89, 0x38, 0xe7, 0x72, 0xce, 0xf9, 0x71, 0xca, 0x3d, 0x99, 0xf3, 0x70, - 0xbf, 0x32, 0x5a, 0xe9, 0xd5, 0xd3, 0x2b, 0x53, 0xb1, 0xbd, 0xcf, 0xff, - 0xce, 0x62, 0xa3, 0x5f, 0x50, 0x4f, 0xa1, 0x53, 0x35, 0xde, 0x4e, 0xaa, - 0x03, 0xbb, 0x40, 0xbd, 0xa2, 0xa6, 0xcc, 0x83, 0x78, 0x89, 0x9e, 0xb2, - 0x6b, 0x9e, 0xb0, 0xbe, 0x82, 0x35, 0x33, 0x28, 0xc3, 0xf0, 0x24, 0x48, - 0xec, 0xab, 0xa0, 0xdc, 0xb2, 0x61, 0x5a, 0x33, 0x88, 0x21, 0x7b, 0xaa, - 0x29, 0x11, 0x7b, 0x20, 0x53, 0x72, 0x41, 0xd2, 0x6b, 0x53, 0xc0, 0x4b, - 0x4c, 0xeb, 0x1a, 0xf6, 0xd0, 0xaf, 0xc9, 0xdb, 0xd9, 0xf8, 0xef, 0xe0, - 0x05, 0x30, 0xfe, 0xcb, 0x3b, 0x49, 0x96, 0x09, 0x58, 0xc7, 0xf3, 0x28, - 0x21, 0xbc, 0x9b, 0x69, 0xa4, 0x42, 0x6b, 0x6a, 0xc1, 0x8e, 0xf4, 0x72, - 0x26, 0x9c, 0xfc, 0x1f, 0x07, 0x7b, 0xec, 0x45, 0x7a, 0x59, 0x5d, 0xd4, - 0x7a, 0x71, 0xb0, 0xf0, 0x6a, 0x9e, 0x8b, 0x9a, 0xcb, 0xb0, 0xcf, 0x10, - 0x3c, 0xb7, 0xbd, 0xdd, 0x08, 0x80, 0x79, 0xe6, 0xe1, 0x39, 0x59, 0xd7, - 0x1b, 0x69, 0x57, 0xbd, 0x95, 0x0b, 0x97, 0x6d, 0x44, 0xa5, 0xfb, 0xad, - 0xe8, 0xfb, 0x4f, 0xd1, 0xf0, 0xc4, 0x9e, 0x97, 0xa4, 0xed, 0x26, 0xa0, - 0x32, 0xd1, 0x28, 0x0f, 0x5e, 0xea, 0xd2, 0x80, 0x0f, 0xbb, 0xe1, 0x25, - 0xc4, 0x4e, 0x41, 0x13, 0x8b, 0x90, 0x65, 0x8d, 0x86, 0xd6, 0x3f, 0xf0, - 0x10, 0x8e, 0x1a, 0xb2, 0x03, 0x2f, 0x9c, 0x6b, 0x71, 0x85, 0xd5, 0x5f, - 0x8d, 0x7e, 0x31, 0x03, 0x2c, 0x0e, 0xb4, 0xfe, 0x6c, 0x6c, 0x17, 0xd9, - 0x78, 0xc1, 0xc5, 0xe5, 0xdc, 0xc0, 0xe7, 0x7b, 0x95, 0xcb, 0xbc, 0x24, - 0xcf, 0xa9, 0x8f, 0x97, 0x7f, 0x88, 0x05, 0x84, 0x66, 0x61, 0x7f, 0x22, - 0xb5, 0xa2, 0x58, 0xc1, 0x53, 0xb7, 0xef, 0xa8, 0xd0, 0xd1, 0xd7, 0xa0, - 0xf6, 0xd3, 0xc8, 0x20, 0x49, 0xc5, 0x7d, 0x60, 0x63, 0xbc, 0x62, 0x91, - 0x49, 0x84, 0x9c, 0xc3, 0x67, 0xd7, 0x59, 0x34, 0x99, 0xaa, 0x1d, 0x1d, - 0x2f, 0xd4, 0x5e, 0xb2, 0x7f, 0xf3, 0xdf, 0x56, 0x71, 0xf3, 0xf6, 0x1a, - 0x6e, 0x5e, 0x45, 0xce, 0xcc, 0x97, 0x7a, 0x0a, 0xe2, 0x55, 0xda, 0x7e, - 0xc6, 0x60, 0xdf, 0x57, 0xa4, 0xd1, 0x38, 0x96, 0x9b, 0x59, 0x31, 0x25, - 0x9b, 0xe2, 0x95, 0xfd, 0x6a, 0x2e, 0x49, 0xf5, 0xf6, 0xb3, 0xf4, 0x8f, - 0xd8, 0xcd, 0xca, 0x5a, 0x88, 0x79, 0xad, 0x72, 0x45, 0x30, 0x1e, 0xa5, - 0x0e, 0xe1, 0xef, 0xc3, 0xfd, 0xaa, 0x37, 0x05, 0x12, 0xd6, 0xbc, 0x93, - 0x45, 0x0c, 0x5d, 0x20, 0x04, 0x8e, 0x60, 0x9f, 0x5f, 0xcf, 0x9f, 0x09, - 0xd7, 0x0b, 0x16, 0x35, 0x0b, 0x09, 0x7b, 0x1c, 0x97, 0x59, 0x15, 0xaa, - 0x2b, 0xa0, 0xc0, 0x16, 0x10, 0x33, 0x64, 0x6b, 0x3f, 0x6b, 0x64, 0xfa, - 0xd2, 0x2f, 0x8c, 0xf9, 0x73, 0x9f, 0x5e, 0xad, 0xab, 0xce, 0x5f, 0x09, - 0x4f, 0x91, 0x23, 0x27, 0x11, 0x0b, 0x02, 0x01, 0x93, 0xb3, 0x47, 0xe8, - 0xf3, 0xf6, 0x78, 0x2f, 0xce, 0x51, 0x83, 0x62, 0x3b, 0x35, 0x97, 0x6f, - 0xe3, 0x41, 0x83, 0xb7, 0x10, 0xe3, 0x56, 0x9f, 0x7a, 0x34, 0x28, 0xd0, - 0x33, 0xce, 0x9b, 0x8d, 0x9e, 0x06, 0x44, 0xf9, 0x9e, 0xd3, 0x7f, 0x98, - 0xbe, 0xfc, 0x86, 0xb5, 0xf5, 0xec, 0x9e, 0x42, 0xcc, 0x6f, 0x1b, 0x7c, - 0xe8, 0x05, 0x2e, 0x69, 0x74, 0xdf, 0xdc, 0xa8, 0xbb, 0x33, 0x7b, 0x41, - 0x90, 0xe3, 0xe2, 0x75, 0x24, 0x2f, 0x39, 0xd6, 0x56, 0xb2, 0xfa, 0x87, - 0x55, 0x6e, 0x4c, 0x64, 0x62, 0xdb, 0x6b, 0xe4, 0xb3, 0x2a, 0x39, 0x08, - 0xe6, 0x65, 0xa2, 0xd4, 0x8b, 0x84, 0x67, 0x9a, 0xe1, 0x29, 0x3a, 0x98, - 0x52, 0xe4, 0x9a, 0xf3, 0xb6, 0x63, 0xcb, 0x26, 0x85, 0xd6, 0xfb, 0x19, - 0x39, 0x80, 0x5d, 0xd8, 0x50, 0xee, 0x46, 0xe8, 0x8d, 0x6f, 0x7b, 0xf9, - 0x0f, 0xf7, 0x14, 0xff, 0x77, 0x0e, 0x56, 0xf2, 0xff, 0x3b, 0x7d, 0x04, - 0xef, 0xe3, 0x73, 0xfa, 0x94, 0x08, 0xd3, 0xec, 0xa3, 0x01, 0xb7, 0x49, - 0x6d, 0x61, 0x65, 0x07, 0x1f, 0xee, 0x30, 0x9e, 0xb8, 0x8c, 0x99, 0x38, - 0x9c, 0x91, 0xd6, 0x53, 0xa4, 0x06, 0x3d, 0x03, 0x7b, 0x58, 0xc1, 0xfc, - 0xcb, 0x2d, 0x3d, 0x68, 0x83, 0x9d, 0xc2, 0x5f, 0x99, 0xf9, 0x2e, 0xe5, - 0x99, 0x1e, 0xa5, 0xb2, 0xcc, 0xc4, 0xbb, 0xda, 0xcd, 0x25, 0x39, 0x7c, - 0x90, 0x13, 0x68, 0xd1, 0x55, 0x6c, 0x5c, 0xb0, 0x9d, 0x81, 0x66, 0xe6, - 0x19, 0x4d, 0xd3, 0xd5, 0x3d, 0xb6, 0x6e, 0xea, 0x6a, 0x25, 0x73, 0xdc, - 0xf8, 0x3c, 0x09, 0x8d, 0x09, 0x8f, 0xb7, 0x1d, 0x92, 0x29, 0xc8, 0xee, - 0x8a, 0xc4, 0xd4, 0x21, 0xd2, 0x3a, 0x74, 0xaf, 0x1d, 0x10, 0x07, 0xad, - 0xd6, 0x43, 0x85, 0xd8, 0xdb, 0x08, 0xb3, 0x16, 0x45, 0x5d, 0x22, 0xe6, - 0x73, 0xa4, 0xf9, 0x27, 0xec, 0x3c, 0x78, 0xfe, 0xfb, 0xb7, 0x2a, 0x7d, - 0x4f, 0xc8, 0x2c, 0xed, 0xa3, 0x2c, 0xa9, 0x8f, 0x2b, 0x4d, 0xa9, 0x28, - 0x7f, 0x5f, 0xfd, 0xfd, 0xf1, 0x47, 0xbd, 0x97, 0x14, 0xbb, 0xb2, 0xc5, - 0x7a, 0x47, 0x34, 0x07, 0x8f, 0x5d, 0xfd, 0x23, 0x7b, 0x1c, 0xe7, 0xe2, - 0x79, 0x38, 0x97, 0x98, 0x82, 0xc1, 0xf6, 0xb6, 0xd7, 0x63, 0x0c, 0x84, - 0xb4, 0xa8, 0xf6, 0xf4, 0x82, 0xb4, 0x3b, 0xb4, 0x57, 0xa6, 0x61, 0x5d, - 0xf0, 0x36, 0x13, 0xf7, 0x9b, 0xbd, 0x3d, 0xb5, 0xa5, 0x1e, 0xdb, 0x6b, - 0xda, 0xff, 0x43, 0x2d, 0xac, 0x3f, 0x21, 0x8f, 0xcf, 0xbe, 0xf5, 0xe2, - 0x58, 0xdf, 0xa3, 0xb5, 0x41, 0xa4, 0xeb, 0x94, 0xa4, 0x7a, 0x6e, 0x0d, - 0xc2, 0xa1, 0xfe, 0x8e, 0x7d, 0x6e, 0x67, 0x3e, 0xe7, 0xf3, 0xda, 0x27, - 0xce, 0x3d, 0x8d, 0x2d, 0xe7, 0x9e, 0xfb, 0xd2, 0x89, 0x5d, 0x36, 0xcb, - 0xbb, 0x11, 0xcd, 0x94, 0x53, 0x6b, 0x34, 0x27, 0x6e, 0x67, 0x97, 0x9c, - 0x30, 0x2d, 0x7e, 0xe4, 0x75, 0x20, 0xdd, 0x96, 0x14, 0x23, 0x75, 0xa0, - 0xd3, 0xd5, 0xf7, 0x29, 0x53, 0xc3, 0xf4, 0x60, 0xd8, 0x36, 0xf2, 0x37, - 0xfb, 0x29, 0x29, 0x96, 0x11, 0x49, 0xfe, 0x86, 0x75, 0x97, 0xf5, 0xb0, - 0xdb, 0x10, 0xcd, 0xec, 0x36, 0xac, 0x5f, 0x81, 0xfb, 0xe2, 0xcf, 0xa6, - 0x4f, 0x4a, 0xee, 0x81, 0xf5, 0x99, 0x37, 0x6a, 0xab, 0xb4, 0x94, 0x0e, - 0x0b, 0xd1, 0x5e, 0x5a, 0xdc, 0xb7, 0x69, 0xd8, 0x47, 0x79, 0x0f, 0xc0, - 0x70, 0xa5, 0xc5, 0x5e, 0xc1, 0x7d, 0x86, 0xf5, 0x76, 0x8f, 0x19, 0xdb, - 0xee, 0xf6, 0x01, 0xb9, 0x4d, 0xeb, 0xe8, 0x3e, 0x2b, 0xf5, 0xd6, 0x8d, - 0x99, 0x78, 0x28, 0x30, 0xcb, 0xc5, 0xb4, 0x9a, 0x56, 0x3b, 0xb0, 0x32, - 0x1c, 0x1a, 0xa7, 0xf8, 0x96, 0x43, 0xc7, 0xcf, 0xda, 0xcc, 0x99, 0x36, - 0x1f, 0x65, 0x7c, 0xc1, 0x56, 0x86, 0x07, 0x99, 0xa3, 0x58, 0x4a, 0x64, - 0xe3, 0x4f, 0x4d, 0xa5, 0x3b, 0xd4, 0x64, 0xcd, 0xc3, 0xd1, 0x62, 0x96, - 0x20, 0x53, 0x35, 0x0b, 0x06, 0x93, 0x89, 0x0a, 0x16, 0x4f, 0x1f, 0x92, - 0x5b, 0x3c, 0x75, 0x20, 0x46, 0x5b, 0x5f, 0x3c, 0xfc, 0xe4, 0x6b, 0xde, - 0xdb, 0x2c, 0xf7, 0x03, 0x0d, 0xba, 0x73, 0xca, 0x1e, 0x55, 0x8b, 0x7b, - 0xa0, 0xea, 0xcd, 0xbe, 0xe3, 0xba, 0x38, 0xe6, 0x15, 0x32, 0x63, 0x75, - 0xf0, 0x11, 0xf9, 0x56, 0x47, 0xd9, 0x28, 0x21, 0x32, 0xb7, 0x32, 0x3b, - 0xac, 0xbc, 0x0d, 0x43, 0x48, 0x1d, 0x64, 0xe6, 0xde, 0x06, 0x1d, 0xc8, - 0x15, 0x6a, 0x71, 0xec, 0x83, 0x67, 0x78, 0xa7, 0x91, 0x2c, 0x0d, 0x0f, - 0xcb, 0xee, 0xfe, 0xf2, 0x7b, 0x7a, 0xc3, 0x9d, 0x77, 0xac, 0x34, 0x46, - 0x5d, 0x6c, 0x25, 0xdb, 0x71, 0xe4, 0xa7, 0x3f, 0xf7, 0x70, 0x7c, 0xea, - 0x0a, 0xfd, 0x76, 0x8e, 0x1e, 0xe0, 0x9c, 0x6f, 0x7a, 0xea, 0x6c, 0x6c, - 0x37, 0x94, 0x7a, 0x2d, 0xa8, 0xc3, 0xfa, 0xd1, 0xe1, 0xef, 0x06, 0x81, - 0x8c, 0x55, 0x77, 0x7f, 0xc0, 0xa6, 0xe1, 0x8c, 0x0f, 0x21, 0xe4, 0x81, - 0x3d, 0xdf, 0xa7, 0xaf, 0xba, 0x3a, 0x8c, 0x22, 0xc4, 0x42, 0x5c, 0xb6, - 0x97, 0x80, 0xa5, 0x30, 0xcf, 0x3e, 0xcc, 0xc0, 0xc0, 0x8f, 0xbc, 0xd8, - 0x69, 0xbb, 0x04, 0xd8, 0xdd, 0x58, 0xb5, 0x49, 0x13, 0x37, 0x41, 0x7d, - 0xfd, 0x64, 0x2b, 0xee, 0xfb, 0xf0, 0xe5, 0x81, 0xe7, 0xbb, 0x1d, 0x8a, - 0x09, 0x13, 0x31, 0x1d, 0x25, 0xa7, 0xb7, 0x56, 0x65, 0x2d, 0xc5, 0x4b, - 0x9f, 0xcc, 0x4e, 0x6d, 0x05, 0xd2, 0xe1, 0xb9, 0xac, 0x25, 0x87, 0x04, - 0xf7, 0x27, 0xc0, 0xec, 0x62, 0x24, 0xda, 0xd9, 0x1e, 0x5e, 0x63, 0xec, - 0x1e, 0xdc, 0x31, 0x1f, 0xbd, 0xc5, 0x9e, 0xd7, 0x0a, 0x19, 0x5c, 0xb9, - 0xee, 0xa4, 0x44, 0xeb, 0x48, 0xe1, 0x25, 0x5c, 0x53, 0x6b, 0xab, 0x42, - 0x4d, 0xe7, 0x8c, 0xb0, 0xa3, 0xfc, 0xc6, 0xe3, 0xb7, 0x16, 0x3e, 0xfb, - 0xcd, 0x26, 0x9f, 0xc4, 0xab, 0x8d, 0x94, 0x9d, 0xb9, 0x0d, 0x15, 0xa1, - 0x10, 0x1e, 0xf1, 0xe4, 0xa5, 0xe5, 0xde, 0xd1, 0xdc, 0x9f, 0xe9, 0xa5, - 0x8f, 0x33, 0xe5, 0xe8, 0x38, 0xd3, 0x37, 0x09, 0x0a, 0xfc, 0xef, 0xf3, - 0x87, 0x1a, 0x1c, 0x32, 0xb5, 0xc0, 0x2d, 0xd6, 0x21, 0x20, 0x50, 0x0b, - 0xe1, 0x01, 0x8f, 0xf4, 0x35, 0xc2, 0xe0, 0x9f, 0x96, 0x18, 0x89, 0x7a, - 0xf8, 0xbc, 0x14, 0xbc, 0xbb, 0xd5, 0xee, 0x4c, 0xcc, 0xef, 0x3c, 0xa2, - 0x50, 0xa8, 0xbd, 0xc8, 0x50, 0xd4, 0xb0, 0xef, 0xfa, 0xd0, 0x54, 0x6c, - 0xd3, 0x81, 0xd1, 0x25, 0x9c, 0x1d, 0x5b, 0x39, 0xa1, 0xc1, 0xef, 0x5a, - 0x4a, 0xc4, 0x25, 0xf9, 0x9c, 0x3e, 0xe7, 0x34, 0xa1, 0x68, 0x42, 0xaa, - 0x27, 0x54, 0x74, 0x4b, 0xae, 0x8b, 0x7f, 0x0e, 0x8c, 0x79, 0x5a, 0x7b, - 0x8b, 0x16, 0xfb, 0x1a, 0x1e, 0x56, 0x01, 0xbd, 0xd0, 0xb4, 0xf3, 0x01, - 0x7e, 0x7d, 0x0c, 0xcd, 0x93, 0xa8, 0x83, 0x17, 0xba, 0xaa, 0x12, 0x44, - 0x65, 0x22, 0x82, 0x1d, 0xc4, 0x6b, 0xf9, 0x35, 0x54, 0x7b, 0xf9, 0x5e, - 0x6e, 0xf2, 0xa1, 0x3b, 0xfe, 0xe3, 0x12, 0xa1, 0xf7, 0x4b, 0xba, 0xbb, - 0x29, 0xd6, 0x32, 0xda, 0xc2, 0x33, 0x36, 0x22, 0x7b, 0xe5, 0x2d, 0x36, - 0x39, 0x31, 0xec, 0x3e, 0xef, 0x61, 0x0e, 0x2f, 0x10, 0x7b, 0xff, 0x57, - 0xff, 0x28, 0xb9, 0x4f, 0x9a, 0x13, 0x93, 0xd0, 0x3e, 0xd8, 0x6c, 0x74, - 0x0d, 0x9f, 0x35, 0x92, 0x3e, 0xf7, 0xfb, 0xcb, 0xf2, 0x0d, 0xfc, 0xac, - 0x56, 0x3c, 0x2a, 0x74, 0x1e, 0x50, 0x42, 0xb9, 0xc0, 0x79, 0x10, 0xcb, - 0x4c, 0xd9, 0x7d, 0x32, 0xa3, 0xd8, 0x3b, 0x84, 0x52, 0x9d, 0x49, 0x92, - 0x2e, 0xd0, 0xae, 0x79, 0x4b, 0x09, 0x2d, 0xa2, 0x6e, 0xd3, 0x5a, 0x9c, - 0x38, 0x41, 0xab, 0x44, 0xa2, 0xd8, 0x57, 0xb5, 0xa6, 0x40, 0x97, 0x5e, - 0x18, 0x73, 0xe4, 0x2d, 0x4a, 0xb6, 0x67, 0x31, 0xf0, 0xdb, 0x2f, 0x05, - 0x07, 0xd5, 0x28, 0xf3, 0x50, 0xfc, 0x93, 0xd9, 0x49, 0xec, 0x3e, 0xdc, - 0xa1, 0x04, 0xf7, 0x51, 0x92, 0xdf, 0x1e, 0x2d, 0x0d, 0xca, 0x1a, 0xb5, - 0x38, 0x05, 0x6a, 0x96, 0x48, 0x2e, 0x91, 0xc8, 0x23, 0x96, 0x55, 0x0f, - 0x6c, 0xea, 0x35, 0xbd, 0xd4, 0x78, 0xe1, 0xfe, 0xf4, 0x54, 0xff, 0xb4, - 0x9d, 0xe4, 0x31, 0x95, 0x84, 0xdf, 0x2d, 0x1e, 0x07, 0x2b, 0x4a, 0x5a, - 0xe2, 0xf8, 0xbe, 0x26, 0x1c, 0x11, 0x6a, 0x51, 0xe5, 0xed, 0xc2, 0x0e, - 0x8d, 0x0a, 0x2b, 0xdc, 0x1a, 0xbc, 0x0e, 0xcf, 0x34, 0xf2, 0x0b, 0xfb, - 0xe3, 0xe9, 0xb5, 0x54, 0x87, 0x39, 0x8d, 0xda, 0xc2, 0x3c, 0xe8, 0x18, - 0xef, 0x5e, 0xa1, 0x33, 0xcc, 0x93, 0x04, 0xb1, 0x04, 0x9e, 0x1e, 0xf9, - 0xb9, 0x5a, 0x83, 0xab, 0xcf, 0xd8, 0xc1, 0x23, 0x89, 0xda, 0x13, 0x66, - 0x51, 0x62, 0x4b, 0x16, 0xf8, 0xf0, 0x28, 0xb8, 0x77, 0xef, 0xdf, 0x3e, - 0x67, 0x5a, 0x04, 0x75, 0x76, 0x03, 0xb6, 0x41, 0x4b, 0xa2, 0x90, 0x08, - 0xb9, 0xd2, 0x3f, 0xbe, 0xfe, 0x1c, 0x65, 0x31, 0x1a, 0xd4, 0x59, 0xe5, - 0xd8, 0x95, 0xf8, 0xae, 0xdd, 0x9d, 0xd7, 0xae, 0x23, 0x62, 0x0c, 0x69, - 0xb8, 0xa9, 0x91, 0x1e, 0x57, 0x77, 0x2f, 0x3f, 0x58, 0xca, 0x32, 0x94, - 0x76, 0x24, 0x85, 0xa6, 0x50, 0x18, 0x9b, 0x3d, 0x01, 0xa1, 0x1e, 0xd2, - 0xf2, 0x15, 0x03, 0x4d, 0x5d, 0x44, 0xa3, 0x5e, 0x2c, 0xdd, 0x92, 0x93, - 0xc7, 0x53, 0x07, 0xeb, 0xb1, 0x70, 0x88, 0x5d, 0x3a, 0xa3, 0x17, 0xef, - 0xfd, 0x5e, 0x22, 0x39, 0x2a, 0x73, 0xc8, 0xc9, 0x61, 0xd3, 0xb9, 0xae, - 0xd6, 0x1a, 0x16, 0xec, 0x3b, 0x47, 0x68, 0x55, 0x1e, 0xa8, 0xec, 0x4c, - 0xd9, 0x82, 0x80, 0x6b, 0x6a, 0x7c, 0xee, 0x10, 0x09, 0x9f, 0x6b, 0x2a, - 0x7d, 0xa7, 0x29, 0x85, 0x96, 0x83, 0x6f, 0xd0, 0xbf, 0x97, 0xd2, 0x53, - 0xfe, 0xc7, 0x3f, 0x5e, 0x0b, 0x06, 0x8f, 0xad, 0x19, 0x81, 0xe4, 0x98, - 0xad, 0xe4, 0x88, 0xf3, 0x70, 0x4f, 0x21, 0xfb, 0xb8, 0x72, 0x0c, 0x89, - 0x7e, 0x52, 0xc4, 0x0a, 0x8d, 0x13, 0x4e, 0xce, 0x4b, 0xb1, 0xca, 0x36, - 0xcf, 0x58, 0xfe, 0xeb, 0x12, 0xf1, 0xaf, 0x5b, 0x43, 0xc9, 0xe5, 0x9d, - 0x1c, 0x8e, 0x3f, 0x01, 0x8e, 0x8b, 0x37, 0x4e, 0x0e, 0xbd, 0x2e, 0x84, - 0xa6, 0x07, 0x9c, 0x73, 0x0e, 0xdc, 0x99, 0x97, 0x87, 0x7e, 0xaf, 0x6d, - 0xc0, 0x75, 0xee, 0xc1, 0x57, 0xbb, 0xd8, 0x74, 0x61, 0x56, 0x1b, 0xd0, - 0xef, 0x65, 0xa7, 0x3a, 0x64, 0x29, 0x57, 0xfa, 0x99, 0xf1, 0x6c, 0x28, - 0x4f, 0x8f, 0x9e, 0xcf, 0x31, 0xf9, 0xe6, 0xde, 0xb4, 0xde, 0x21, 0xb5, - 0x6c, 0xc5, 0x8d, 0x2d, 0x98, 0xd4, 0xbd, 0x49, 0x3d, 0xc3, 0xe3, 0xa5, - 0xe8, 0x84, 0x7a, 0xa2, 0x32, 0x03, 0x4d, 0x4f, 0xe1, 0xad, 0x24, 0x6f, - 0xa8, 0x9d, 0xe6, 0x4e, 0xa3, 0x34, 0x92, 0x3e, 0x63, 0x54, 0xe3, 0x85, - 0xab, 0xfc, 0x9c, 0xf3, 0x9e, 0x5e, 0x8d, 0xcc, 0x83, 0x3e, 0x26, 0xd5, - 0x43, 0x61, 0x74, 0x4f, 0xe3, 0xc1, 0xfa, 0x48, 0x03, 0x99, 0x12, 0xef, - 0x67, 0xe0, 0x91, 0xea, 0xa3, 0x44, 0x5e, 0x1e, 0x69, 0x80, 0xe8, 0xc4, - 0xa5, 0xb7, 0x12, 0x8f, 0x92, 0x05, 0xcf, 0xa1, 0x8f, 0x7b, 0x7e, 0xfe, - 0x5c, 0x72, 0xd6, 0x85, 0x7a, 0x52, 0xcf, 0xd8, 0x6e, 0x25, 0x5b, 0x4b, - 0x94, 0x16, 0x8c, 0x76, 0xa7, 0x90, 0xfd, 0x15, 0xf3, 0x1c, 0x00, 0x2e, - 0x2e, 0x24, 0xa7, 0xfc, 0x8c, 0x37, 0xed, 0xc4, 0x87, 0x84, 0xf5, 0xdf, - 0xc9, 0x95, 0x74, 0xab, 0xc3, 0xf9, 0xf4, 0xc7, 0xe8, 0x5d, 0x26, 0x23, - 0x6b, 0xce, 0xde, 0x3a, 0x5d, 0x58, 0xcd, 0x63, 0xc1, 0xba, 0x9e, 0xb7, - 0x28, 0x49, 0x91, 0xb0, 0x8a, 0x61, 0x68, 0x3d, 0xee, 0x17, 0x42, 0x4d, - 0xe0, 0x91, 0x81, 0x63, 0xba, 0x9f, 0x29, 0xa9, 0xb4, 0x19, 0x47, 0xf6, - 0xbf, 0xf4, 0x26, 0xca, 0xd2, 0xa3, 0x28, 0xf6, 0x95, 0x1b, 0x92, 0xba, - 0xa4, 0xe4, 0xf6, 0x77, 0x4a, 0x8e, 0x97, 0x29, 0x52, 0xfc, 0x3a, 0xe7, - 0x9c, 0xd4, 0x54, 0x01, 0x07, 0x36, 0x99, 0x83, 0xe9, 0xee, 0x61, 0x8a, - 0x1a, 0x3b, 0x88, 0x60, 0xb8, 0xeb, 0x90, 0x32, 0x0a, 0x1a, 0x5d, 0x5b, - 0xe8, 0x25, 0x9b, 0x6d, 0x1f, 0x72, 0xbb, 0x12, 0xc3, 0x0e, 0x29, 0xc2, - 0x7e, 0x69, 0x2a, 0x61, 0xf7, 0xc1, 0xf9, 0x99, 0x33, 0x8e, 0xbb, 0xde, - 0xd9, 0xdb, 0x27, 0x8f, 0xc4, 0x97, 0xaa, 0x12, 0x1e, 0x4d, 0xe7, 0x38, - 0x97, 0x9c, 0xd2, 0x99, 0x9a, 0x6f, 0xde, 0x5f, 0x84, 0xf5, 0x82, 0xe1, - 0x99, 0xea, 0x51, 0xee, 0xab, 0x44, 0x4c, 0xbd, 0xbf, 0x92, 0x82, 0x4f, - 0x18, 0xbb, 0xff, 0x38, 0xd4, 0x5d, 0xf5, 0x1e, 0x5d, 0x9c, 0x3c, 0x33, - 0xe0, 0xb9, 0xaf, 0x93, 0x9f, 0x39, 0x7c, 0x1e, 0x52, 0xda, 0xb5, 0x99, - 0xc1, 0xf8, 0x79, 0x89, 0x22, 0x16, 0x9a, 0xbd, 0x7f, 0xd2, 0x80, 0xd9, - 0x17, 0x99, 0x39, 0x5d, 0x18, 0x83, 0x6c, 0xc9, 0x73, 0x8d, 0xb9, 0x14, - 0x58, 0x2e, 0x6c, 0xd0, 0x14, 0x93, 0x57, 0xa1, 0x52, 0x79, 0x36, 0xea, - 0x99, 0x8c, 0x97, 0xe6, 0x06, 0x66, 0x8e, 0x2e, 0x3b, 0x9a, 0xf1, 0x12, - 0x79, 0x87, 0xd3, 0x79, 0x4e, 0xaf, 0xce, 0xf3, 0x25, 0x7e, 0x9d, 0x67, - 0x6f, 0x28, 0x64, 0x39, 0x31, 0x18, 0xc4, 0x3a, 0xa2, 0x95, 0xb6, 0x73, - 0x19, 0x72, 0xef, 0x7b, 0x5f, 0x7a, 0xf1, 0x5b, 0x95, 0xda, 0xce, 0xce, - 0xf7, 0xf4, 0xde, 0x60, 0x91, 0x34, 0xd2, 0x4d, 0xd9, 0x20, 0xcd, 0x41, - 0x8f, 0xe1, 0x6f, 0x52, 0xb9, 0x22, 0xdf, 0xe5, 0xed, 0x99, 0xaa, 0xdb, - 0x65, 0x42, 0x53, 0x21, 0x00, 0x9f, 0xbe, 0x56, 0x1b, 0x54, 0xb7, 0x69, - 0xeb, 0xdd, 0xb7, 0x1a, 0xc3, 0xb9, 0x10, 0x8f, 0x07, 0x6a, 0xab, 0xdc, - 0x4e, 0x5c, 0xe0, 0x90, 0x74, 0xcf, 0xef, 0xd9, 0x59, 0x9e, 0x76, 0x2b, - 0xfd, 0xe3, 0x4b, 0xcb, 0x62, 0xe6, 0x70, 0x6c, 0x75, 0x8d, 0x6f, 0x85, - 0x39, 0xa4, 0x14, 0xea, 0xad, 0xee, 0x97, 0x24, 0xd5, 0x21, 0x12, 0x15, - 0x07, 0xaf, 0xc7, 0xee, 0x90, 0xa6, 0x22, 0x64, 0x29, 0xf2, 0x91, 0x22, - 0x9e, 0x5b, 0x4b, 0x30, 0xc7, 0x39, 0x53, 0x6f, 0x4c, 0x7b, 0x0e, 0xd5, - 0xb7, 0x3c, 0x3a, 0x0a, 0xc9, 0x6d, 0x70, 0x55, 0x2a, 0x63, 0x01, 0x8d, - 0x5a, 0xa6, 0x92, 0xce, 0x19, 0x72, 0xdc, 0xf3, 0xdf, 0x87, 0x54, 0x72, - 0x74, 0x78, 0x4c, 0x45, 0x73, 0x74, 0x5e, 0x6b, 0xee, 0x3d, 0xf9, 0x82, - 0xb5, 0x77, 0x6b, 0xdf, 0x09, 0x33, 0x75, 0x65, 0x82, 0xbd, 0x18, 0x21, - 0x64, 0x63, 0x2f, 0x43, 0x81, 0x9b, 0x21, 0xb1, 0xd8, 0xed, 0xd8, 0xa7, - 0x69, 0x8b, 0x94, 0x7c, 0x1d, 0x23, 0x70, 0x54, 0xdc, 0x62, 0x07, 0x11, - 0xd7, 0x1d, 0xbc, 0xd7, 0xef, 0xa2, 0x29, 0x50, 0x60, 0x94, 0x10, 0x71, - 0xf9, 0xf5, 0x64, 0x4f, 0x9f, 0x5f, 0x03, 0xca, 0x45, 0x01, 0x92, 0x63, - 0x18, 0x23, 0xd0, 0x71, 0x79, 0xca, 0xc7, 0x0e, 0x99, 0x14, 0x5a, 0x02, - 0x71, 0xb3, 0x3b, 0xd3, 0x58, 0x65, 0xb9, 0x8b, 0x65, 0xde, 0xb8, 0x3d, - 0xe8, 0x9c, 0x97, 0xdc, 0xfe, 0xcf, 0x79, 0xf3, 0xb8, 0x72, 0xf3, 0xed, - 0xca, 0xda, 0x5f, 0xae, 0xe9, 0x26, 0xe9, 0x09, 0xc1, 0xe6, 0xbe, 0xdc, - 0x7c, 0x21, 0x7e, 0x91, 0x4a, 0xba, 0x9f, 0x7b, 0xc6, 0xa3, 0x0f, 0x23, - 0x67, 0x6c, 0x30, 0xa5, 0xb9, 0xe0, 0xb9, 0x1f, 0x11, 0xb8, 0x0d, 0x25, - 0x82, 0xdb, 0x55, 0xf6, 0x4c, 0xf4, 0xd9, 0xfd, 0x6b, 0x3b, 0x5a, 0x51, - 0x9f, 0xd4, 0x59, 0xa9, 0x4d, 0xef, 0x8c, 0x35, 0xb2, 0x68, 0x34, 0x72, - 0x24, 0xa1, 0xc7, 0x61, 0x19, 0x62, 0xeb, 0x87, 0x4c, 0xc3, 0x8f, 0xd8, - 0x6b, 0xb2, 0x37, 0x1a, 0x87, 0xfd, 0x4b, 0x7e, 0x5d, 0x3c, 0x68, 0x9c, - 0x86, 0x51, 0x7a, 0x72, 0x47, 0x0f, 0xfb, 0x9d, 0x74, 0x3e, 0x27, 0xd8, - 0x92, 0x9a, 0x6e, 0x51, 0x9c, 0x24, 0xe1, 0x41, 0x65, 0x90, 0xff, 0xe5, - 0x6f, 0x0d, 0x1b, 0xfb, 0xc1, 0xc0, 0x69, 0xb3, 0x17, 0xd4, 0x75, 0xdb, - 0x28, 0xff, 0x84, 0xd7, 0xc7, 0x53, 0xbc, 0x4f, 0x51, 0xb5, 0xc2, 0x92, - 0xd7, 0x96, 0x9e, 0x54, 0x46, 0xfb, 0xdc, 0x80, 0x1c, 0xe1, 0x81, 0x23, - 0x0a, 0x1b, 0x60, 0x48, 0xf7, 0x9c, 0x41, 0xd2, 0xe4, 0xdb, 0xd3, 0x6f, - 0x91, 0x4e, 0xf5, 0x95, 0x87, 0x92, 0x88, 0xe8, 0xfb, 0x36, 0xe3, 0x94, - 0x45, 0xa9, 0x94, 0x79, 0x8a, 0x98, 0xa2, 0x7b, 0xf6, 0xf3, 0x14, 0x5d, - 0x99, 0xc5, 0x9a, 0x36, 0xf9, 0x7d, 0x5c, 0x72, 0xfb, 0x18, 0x78, 0x2f, - 0x5b, 0x5f, 0xf8, 0x01, 0x71, 0x02, 0x8f, 0x9e, 0x64, 0x95, 0x94, 0xbc, - 0xdd, 0x67, 0xbd, 0x84, 0x5b, 0x8f, 0xe4, 0xb5, 0x0f, 0xc9, 0x67, 0xf7, - 0xda, 0x11, 0x5c, 0xac, 0x71, 0xe4, 0x25, 0xc1, 0x08, 0x5b, 0xc5, 0x1e, - 0xae, 0xe8, 0xc5, 0x00, 0x21, 0x73, 0xe4, 0x20, 0xa6, 0x39, 0x24, 0x56, - 0x6c, 0xb1, 0x2e, 0x10, 0xdc, 0xa6, 0x84, 0x23, 0x5f, 0xf3, 0x60, 0x06, - 0xe1, 0x95, 0x4f, 0x77, 0x2f, 0xf9, 0xc7, 0x7c, 0x79, 0x3b, 0x51, 0xb8, - 0x28, 0x18, 0x93, 0x6f, 0x81, 0x10, 0x96, 0xb5, 0x8f, 0xa0, 0x33, 0x8f, - 0xf4, 0xdc, 0x7d, 0xc8, 0x1a, 0xa7, 0x57, 0xf1, 0x0d, 0xa4, 0x31, 0x8e, - 0x72, 0xc7, 0x7c, 0x90, 0x3b, 0x4e, 0xf3, 0x64, 0x57, 0xfa, 0x84, 0x8a, - 0xf5, 0xf9, 0xc9, 0xd8, 0x3d, 0xe1, 0x75, 0x4a, 0x4f, 0xea, 0xd4, 0xe7, - 0xe2, 0x60, 0x6e, 0xde, 0x59, 0x79, 0x4e, 0xf3, 0x1c, 0xed, 0x45, 0x62, - 0xa5, 0x09, 0x1c, 0xf5, 0xb5, 0x0c, 0x6b, 0x78, 0x2c, 0x49, 0x9a, 0x21, - 0x98, 0x65, 0x58, 0x34, 0x2f, 0x45, 0x1d, 0x28, 0x8f, 0x9c, 0x41, 0x01, - 0x5e, 0x19, 0x33, 0xb6, 0xa8, 0x26, 0xe2, 0x6b, 0x9f, 0x40, 0xb8, 0xe4, - 0x6e, 0xbc, 0xf6, 0x62, 0x2e, 0xa9, 0x9b, 0x1b, 0xff, 0xe3, 0xef, 0xcd, - 0x16, 0x66, 0xb4, 0x7c, 0xe4, 0x1e, 0x27, 0xe8, 0x04, 0x88, 0x55, 0xed, - 0x38, 0x6d, 0x69, 0x63, 0xa7, 0xb3, 0x79, 0x8a, 0x94, 0x40, 0x3c, 0x19, - 0xbd, 0x8a, 0x2f, 0x78, 0x1f, 0xde, 0x81, 0xa7, 0x7b, 0xca, 0x8d, 0x52, - 0x4f, 0x82, 0x34, 0x12, 0x51, 0x39, 0x97, 0x1c, 0xba, 0xfc, 0x09, 0x5e, - 0xae, 0xe1, 0xed, 0x8c, 0x4b, 0x49, 0x8e, 0x7a, 0x1c, 0x29, 0x62, 0x1e, - 0x99, 0x70, 0x0d, 0xcf, 0x9a, 0xe2, 0x5e, 0x52, 0xf7, 0xdb, 0xd3, 0x58, - 0x74, 0x8d, 0x51, 0xde, 0x29, 0x1b, 0x10, 0x67, 0xfe, 0xc3, 0x3c, 0x4b, - 0xdc, 0xb7, 0x8e, 0x88, 0xb2, 0x34, 0xcc, 0xd8, 0xe3, 0x51, 0x10, 0xa3, - 0x5d, 0xc8, 0xc5, 0xcf, 0xde, 0xeb, 0x28, 0x31, 0x7a, 0xf1, 0x66, 0xa6, - 0xbd, 0xe2, 0xb1, 0x55, 0x6f, 0x60, 0x97, 0xe5, 0x52, 0xa7, 0x22, 0x70, - 0xff, 0x6b, 0x69, 0xb4, 0x24, 0x0d, 0x04, 0x56, 0x66, 0xf7, 0x91, 0x15, - 0x46, 0xf8, 0x09, 0x8f, 0xa4, 0xc4, 0x21, 0xf5, 0xbc, 0xee, 0x10, 0x43, - 0x11, 0x94, 0x97, 0x45, 0x8e, 0x5a, 0x9a, 0x69, 0x29, 0xf3, 0x82, 0x81, - 0x1d, 0xa1, 0xd4, 0xae, 0x60, 0xd4, 0x69, 0x8b, 0xc7, 0x92, 0x7a, 0x3a, - 0x64, 0x97, 0xd0, 0x31, 0xa8, 0xbd, 0x73, 0x03, 0x79, 0x47, 0x07, 0x7d, - 0xd7, 0xdc, 0x27, 0xde, 0xf5, 0xd4, 0xf0, 0x3f, 0x2d, 0x3e, 0xad, 0x9d, - 0x38, 0x2e, 0x21, 0xb7, 0x08, 0x6c, 0xe7, 0x7b, 0x86, 0x35, 0xa1, 0x02, - 0x41, 0xb7, 0xc0, 0xae, 0x17, 0xf0, 0x0f, 0xf7, 0x10, 0xdc, 0x1d, 0xce, - 0xc4, 0xc3, 0x0a, 0x09, 0xbf, 0x8f, 0xf7, 0xb9, 0x32, 0x40, 0x53, 0x9c, - 0xfb, 0xc0, 0xf0, 0x68, 0x64, 0xb2, 0xcf, 0xac, 0x0e, 0x4f, 0x43, 0xef, - 0x6d, 0x0b, 0x11, 0xdb, 0x31, 0x11, 0xf4, 0xfe, 0x8a, 0x23, 0x03, 0x63, - 0xd9, 0xb3, 0xd5, 0x44, 0x5b, 0x5a, 0xf9, 0x8f, 0x7d, 0x70, 0x89, 0x8c, - 0xf6, 0xfa, 0x4d, 0xd8, 0xf3, 0xf8, 0xb0, 0x8f, 0x8e, 0x55, 0x19, 0x94, - 0x5e, 0xdf, 0x55, 0xf6, 0x97, 0xc4, 0x67, 0x0f, 0x9d, 0xe4, 0x76, 0xd0, - 0xe9, 0x79, 0x64, 0x38, 0x06, 0x2e, 0x29, 0x35, 0x97, 0x27, 0x1f, 0x0b, - 0xf7, 0x86, 0xdc, 0xeb, 0x19, 0x02, 0x5c, 0x4a, 0x2c, 0xe5, 0x79, 0x48, - 0x53, 0x33, 0xd0, 0x98, 0xfa, 0x14, 0xbb, 0x4c, 0x59, 0x57, 0x57, 0x1e, - 0x64, 0xe1, 0xd8, 0x9e, 0x5f, 0x9e, 0x64, 0xbd, 0x4f, 0x87, 0xac, 0x2e, - 0xc6, 0x82, 0xab, 0xd2, 0x53, 0x14, 0x8c, 0xd2, 0xfb, 0x85, 0xb5, 0xcc, - 0x45, 0xb9, 0xa1, 0xd0, 0xb9, 0xa6, 0xc6, 0xb1, 0xa5, 0x76, 0x97, 0x94, - 0x15, 0x05, 0xb5, 0x97, 0xd8, 0xed, 0xae, 0x27, 0x08, 0x75, 0x32, 0xbb, - 0xd4, 0x0a, 0xf8, 0x91, 0x9a, 0xec, 0x81, 0x73, 0xff, 0x78, 0x45, 0x52, - 0x7b, 0x29, 0x08, 0x94, 0xad, 0x11, 0x8f, 0x07, 0x8d, 0x89, 0x8a, 0x6e, - 0xa4, 0x88, 0x1a, 0xca, 0x92, 0x32, 0x8f, 0xc4, 0x48, 0x53, 0xfc, 0xb8, - 0x5c, 0x40, 0x76, 0xae, 0x2d, 0x27, 0x56, 0xdf, 0x69, 0xae, 0x42, 0xad, - 0x26, 0x79, 0x86, 0x00, 0x87, 0x92, 0x57, 0x04, 0xd9, 0xe5, 0x3d, 0xfd, - 0x71, 0xa9, 0x11, 0x2b, 0x26, 0xe8, 0x9d, 0x4d, 0x43, 0xbc, 0xeb, 0x43, - 0x94, 0x70, 0x85, 0x03, 0xa4, 0x5b, 0x9d, 0x70, 0xab, 0xe3, 0x8c, 0x52, - 0x83, 0xf2, 0x98, 0xe7, 0x9e, 0x9f, 0x4e, 0x2d, 0xcf, 0x7a, 0x41, 0x92, - 0x0e, 0x79, 0x67, 0x70, 0x84, 0x96, 0xe6, 0x7d, 0x48, 0xa5, 0x07, 0xda, - 0xdc, 0x2f, 0xed, 0x1f, 0x1b, 0xcd, 0x95, 0x4b, 0x97, 0x92, 0x03, 0xe4, - 0xb7, 0x48, 0x72, 0x9d, 0xc2, 0x3c, 0x0b, 0x9b, 0xa8, 0x8e, 0xf0, 0x5c, - 0xff, 0xef, 0x1c, 0xe6, 0xf2, 0xf8, 0x44, 0x2e, 0xb8, 0x58, 0xbe, 0x32, - 0x4f, 0x36, 0x6d, 0x31, 0x82, 0xa5, 0xce, 0xd8, 0xc9, 0x16, 0x5d, 0x44, - 0x58, 0x8a, 0x57, 0xe7, 0x77, 0xc4, 0x6b, 0x49, 0x04, 0x89, 0xf4, 0x52, - 0x28, 0x78, 0x00, 0x84, 0x88, 0xaf, 0x21, 0x92, 0x5c, 0x71, 0x72, 0x48, - 0x69, 0xc6, 0xc4, 0x40, 0xc8, 0xd5, 0x2b, 0x25, 0x1f, 0x97, 0x73, 0x8c, - 0xa5, 0xa0, 0x97, 0x11, 0xe5, 0xd0, 0x1d, 0xa6, 0x54, 0xe8, 0x97, 0x3d, - 0x27, 0xf0, 0xd3, 0xaf, 0x0b, 0x8d, 0x25, 0x6d, 0x02, 0x09, 0x09, 0x9f, - 0xf4, 0xf9, 0x27, 0x89, 0x24, 0xdf, 0x31, 0x19, 0x80, 0x88, 0xc7, 0xdd, - 0xb2, 0xf6, 0x3e, 0x67, 0x8f, 0x5f, 0xef, 0x90, 0x45, 0x1c, 0x7a, 0x87, - 0xce, 0x74, 0x56, 0x72, 0xa6, 0x4f, 0x98, 0x31, 0x6d, 0xdc, 0xf5, 0x19, - 0x43, 0x85, 0x62, 0x0b, 0xb8, 0x4c, 0xfe, 0xad, 0x55, 0xec, 0xd5, 0xe7, - 0xdc, 0x9f, 0xbf, 0xf8, 0x5d, 0x85, 0xb1, 0x5e, 0x7a, 0x18, 0xd8, 0xe4, - 0x22, 0x57, 0x23, 0x6e, 0x68, 0x5b, 0xb8, 0xf3, 0x16, 0x7d, 0x17, 0xc4, - 0xc2, 0x98, 0x72, 0x5d, 0xe2, 0x12, 0x72, 0x79, 0x24, 0x1e, 0x08, 0xb6, - 0xfd, 0x2d, 0xaf, 0xfb, 0x69, 0xf2, 0x52, 0x0a, 0xcd, 0xdd, 0x5b, 0xed, - 0x99, 0xa4, 0x6f, 0xb8, 0x86, 0xd2, 0x24, 0x4f, 0x15, 0x8e, 0xb6, 0x60, - 0x17, 0x59, 0xe9, 0x31, 0x76, 0xf3, 0xc7, 0x33, 0x7d, 0x72, 0xd4, 0xc2, - 0x70, 0x40, 0x7d, 0xdc, 0x67, 0xf5, 0xb3, 0x73, 0xc3, 0xe6, 0xd3, 0x7b, - 0xdf, 0xe6, 0x5e, 0x4a, 0xc4, 0x4f, 0x8c, 0xf9, 0x11, 0xf8, 0xb8, 0x39, - 0x51, 0x7f, 0xf4, 0x2a, 0xd0, 0x0b, 0x09, 0xca, 0x0d, 0x66, 0x5b, 0x48, - 0x4d, 0xf7, 0x74, 0x86, 0xd5, 0x09, 0xec, 0x1e, 0xf8, 0xd3, 0x33, 0xd7, - 0xa7, 0xf4, 0x0f, 0xaf, 0xf9, 0xc5, 0x74, 0x00, 0x6b, 0xd7, 0x4d, 0x7b, - 0xbe, 0x60, 0xcb, 0x00, 0x48, 0x0e, 0x94, 0x12, 0x0a, 0x29, 0x57, 0xc3, - 0xe6, 0x13, 0xd3, 0x82, 0x89, 0xad, 0xec, 0x8a, 0x35, 0x94, 0xef, 0x54, - 0x4d, 0x71, 0xf0, 0x8e, 0x2d, 0x2b, 0x9f, 0x06, 0x4c, 0x66, 0x6a, 0xd6, - 0x70, 0xb3, 0x40, 0xe7, 0x3d, 0x0d, 0x70, 0x4a, 0xdf, 0x29, 0x9c, 0x8e, - 0xd8, 0x53, 0xbe, 0x85, 0x03, 0xb2, 0xbf, 0x63, 0x39, 0x05, 0xde, 0xcc, - 0xa7, 0x67, 0xca, 0x77, 0x70, 0x49, 0x4b, 0x84, 0xf2, 0x05, 0xd5, 0xf4, - 0xac, 0xb9, 0xa8, 0x9f, 0xd5, 0x1b, 0x92, 0x61, 0xcd, 0xd0, 0xb3, 0xb6, - 0xec, 0xd5, 0x2e, 0x7e, 0xfb, 0xe4, 0x3b, 0xfc, 0x53, 0x1f, 0x15, 0x2d, - 0xd8, 0xbf, 0x43, 0x16, 0x39, 0x99, 0xfe, 0x8d, 0xf5, 0xb9, 0x60, 0xcd, - 0xc2, 0x3c, 0xdc, 0x7c, 0xb7, 0xd6, 0x88, 0x85, 0x33, 0xea, 0x41, 0x3d, - 0x0f, 0x73, 0x4e, 0x01, 0x86, 0x4f, 0x92, 0xbb, 0x9f, 0x77, 0x2a, 0xf3, - 0xaa, 0x10, 0xfa, 0x9b, 0x59, 0x75, 0x61, 0xaf, 0xce, 0x61, 0xdf, 0xe4, - 0x63, 0x9f, 0xd4, 0xce, 0x63, 0x6c, 0x31, 0xe2, 0x5e, 0xef, 0x94, 0xc9, - 0x72, 0x37, 0x79, 0x9c, 0x69, 0x8e, 0x89, 0x46, 0xc7, 0xf9, 0xeb, 0x6b, - 0xd4, 0x8a, 0x63, 0x4e, 0xad, 0x70, 0xbe, 0xb4, 0x42, 0xb3, 0xc4, 0x4d, - 0x0c, 0xfd, 0xa4, 0xe9, 0x51, 0x4a, 0x2d, 0xc9, 0xa8, 0x48, 0x18, 0x3c, - 0xd6, 0x38, 0xb4, 0x7d, 0x6c, 0x31, 0x3a, 0xc9, 0xd7, 0x46, 0x60, 0xfb, - 0x6f, 0x9e, 0xfd, 0x6b, 0xe2, 0xd4, 0x83, 0xdf, 0xf6, 0x8f, 0xb7, 0x42, - 0x21, 0x9a, 0xc7, 0x2c, 0x7d, 0xd0, 0x89, 0x0f, 0xf6, 0xd3, 0x92, 0x16, - 0x05, 0x53, 0x48, 0x31, 0x4f, 0x8b, 0xdd, 0xda, 0x27, 0x2e, 0x51, 0x29, - 0x4b, 0x9f, 0xc4, 0x7d, 0xfc, 0x81, 0x5b, 0x93, 0xf2, 0xc8, 0x7b, 0x8c, - 0x20, 0xd6, 0xa0, 0xb8, 0xbf, 0xd7, 0x97, 0x31, 0x93, 0x8e, 0x82, 0xe6, - 0xf0, 0xff, 0x71, 0x7d, 0xc0, 0xea, 0x57, 0x4d, 0xa7, 0x3c, 0xce, 0x91, - 0xd8, 0x73, 0x57, 0xbc, 0x81, 0x95, 0xbf, 0xa8, 0x81, 0x70, 0xaf, 0x07, - 0xbe, 0x44, 0x11, 0xeb, 0xe1, 0x1f, 0x26, 0xc1, 0x1e, 0xee, 0xb9, 0x57, - 0x5f, 0x0d, 0xf7, 0x51, 0x20, 0x3e, 0x37, 0x4e, 0x2c, 0x43, 0xa2, 0x73, - 0x71, 0xb5, 0x54, 0x94, 0x7a, 0xd4, 0x38, 0x9b, 0x41, 0x1b, 0x2b, 0x81, - 0x6d, 0x5e, 0x3c, 0x89, 0xc5, 0x8c, 0x12, 0x4f, 0x6b, 0x72, 0xb5, 0x21, - 0xf8, 0xeb, 0xcc, 0x83, 0x24, 0x6f, 0x07, 0xb9, 0x9f, 0xdd, 0x41, 0xfe, - 0x43, 0x2d, 0x77, 0x6d, 0x9f, 0xd2, 0xdb, 0x9f, 0x4b, 0xdc, 0x4b, 0x33, - 0x66, 0xf5, 0x72, 0xdd, 0xe8, 0xf8, 0xb3, 0xcf, 0x01, 0xab, 0x4d, 0x51, - 0x6a, 0xbe, 0x6c, 0xbc, 0x1a, 0x73, 0x82, 0x03, 0x24, 0xa1, 0xa7, 0xdd, - 0x88, 0x66, 0x6b, 0xf3, 0xfc, 0x40, 0x3f, 0xde, 0x3e, 0xc9, 0x6a, 0xa1, - 0x93, 0xcb, 0x82, 0xb0, 0xf3, 0xd9, 0xbf, 0x36, 0x9d, 0xc0, 0x38, 0x92, - 0x47, 0x13, 0x52, 0x3c, 0xe6, 0x51, 0xc7, 0x08, 0x58, 0xc7, 0xf4, 0x00, - 0x33, 0xab, 0x47, 0x56, 0xef, 0x2a, 0xe1, 0x39, 0xfd, 0xcf, 0x0f, 0xec, - 0x00, 0xdd, 0xcd, 0x77, 0xe1, 0x95, 0x58, 0x51, 0xe1, 0x46, 0x4f, 0x0c, - 0xed, 0xd8, 0xd8, 0x6a, 0x26, 0x5a, 0xdf, 0x99, 0x2b, 0xe0, 0x54, 0xda, - 0x52, 0xda, 0xa6, 0xd3, 0xce, 0x58, 0xbd, 0x47, 0x38, 0x10, 0xaf, 0x0d, - 0xd1, 0x98, 0x68, 0x11, 0x85, 0x79, 0xf1, 0xef, 0x69, 0x44, 0xdd, 0xab, - 0xee, 0x9d, 0x11, 0x69, 0xd2, 0x71, 0x5c, 0x34, 0xc5, 0x61, 0xd1, 0xb4, - 0xdb, 0x96, 0x06, 0xf6, 0x34, 0x2d, 0xa4, 0x6f, 0xa4, 0x75, 0x58, 0xfd, - 0xac, 0x75, 0xda, 0xcf, 0x51, 0x77, 0x28, 0xa7, 0x34, 0x19, 0x86, 0x31, - 0x42, 0x6f, 0x9a, 0x32, 0x2f, 0xd6, 0xfc, 0xa7, 0x4b, 0x73, 0xd7, 0xbb, - 0xa4, 0x98, 0x54, 0xf9, 0x89, 0xf1, 0x74, 0xf4, 0x8e, 0x68, 0x99, 0x54, - 0x83, 0xcb, 0x84, 0x2f, 0x97, 0x40, 0x9d, 0x7c, 0xec, 0x68, 0x2e, 0x96, - 0xdf, 0xe1, 0xea, 0x8e, 0x6b, 0x76, 0x4d, 0xcd, 0xdb, 0x99, 0xfa, 0x9e, - 0x7e, 0xe7, 0x52, 0xa1, 0xb9, 0x53, 0x83, 0xbe, 0xbd, 0xe7, 0x7b, 0x88, - 0xc1, 0xad, 0xe3, 0x92, 0xb1, 0x96, 0x20, 0xb4, 0x0a, 0xc6, 0xa7, 0xf6, - 0x9d, 0xee, 0x00, 0x3a, 0xd1, 0xa4, 0xdf, 0xc3, 0x16, 0x02, 0x65, 0xca, - 0x5a, 0x24, 0x93, 0xcf, 0x23, 0xa7, 0xb7, 0x5f, 0xe8, 0x9f, 0xde, 0xbe, - 0xa2, 0x50, 0x68, 0x85, 0xfa, 0x2e, 0xf6, 0xbb, 0xde, 0x23, 0x67, 0x20, - 0x16, 0xb3, 0xa6, 0x56, 0xf1, 0xe6, 0x7d, 0x7f, 0x1f, 0x91, 0x9d, 0x6a, - 0x27, 0x7d, 0xc7, 0x6a, 0x64, 0xfa, 0x19, 0x42, 0xce, 0x8e, 0x24, 0x3c, - 0x9e, 0xcf, 0x34, 0x0a, 0x18, 0xfd, 0xeb, 0x6d, 0x8f, 0x34, 0x6e, 0x03, - 0xc1, 0x0f, 0x8e, 0x22, 0x2c, 0x2e, 0x8f, 0x25, 0x2c, 0x22, 0x89, 0xe7, - 0xed, 0x27, 0xc9, 0x1f, 0x75, 0x72, 0x91, 0x07, 0xee, 0x3c, 0x75, 0x19, - 0x92, 0x78, 0x1e, 0x59, 0x3c, 0xad, 0xa4, 0x07, 0xe4, 0xe3, 0x0d, 0xd0, - 0x33, 0x3d, 0x00, 0x87, 0x64, 0xc9, 0x2f, 0x84, 0xae, 0xa7, 0x1f, 0x48, - 0x93, 0x5c, 0x99, 0x47, 0xa3, 0x40, 0x82, 0x45, 0xc2, 0x07, 0x4b, 0x11, - 0x34, 0xb7, 0xa5, 0x28, 0x7b, 0xc4, 0x78, 0x0d, 0xe7, 0xe1, 0xef, 0x4f, - 0xe2, 0xd5, 0xa6, 0xd4, 0x43, 0x16, 0xde, 0xd0, 0x8d, 0xbd, 0x3f, 0x73, - 0xf2, 0x00, 0xd0, 0x26, 0xff, 0x97, 0xfa, 0x2b, 0xf8, 0xfe, 0x4b, 0x87, - 0x47, 0xfb, 0x83, 0xad, 0xf9, 0xfc, 0xc4, 0x86, 0xe6, 0xf4, 0xe3, 0x7d, - 0xff, 0x67, 0xf3, 0x6b, 0x1c, 0x82, 0x3d, 0x48, 0x27, 0x47, 0xe4, 0x97, - 0xec, 0x42, 0x2c, 0x2f, 0x90, 0x0c, 0xb6, 0xf1, 0xe3, 0x07, 0xdf, 0xdf, - 0xe9, 0x0f, 0xf1, 0x0c, 0x80, 0xfb, 0xb2, 0x1b, 0x34, 0x4d, 0x25, 0x7e, - 0xa0, 0xd3, 0xc6, 0x2f, 0x4c, 0x18, 0xcd, 0x71, 0xf3, 0xa6, 0x26, 0xb9, - 0x3d, 0xa5, 0xa4, 0x44, 0xd2, 0x67, 0xe8, 0x27, 0x44, 0x6c, 0xd4, 0x7a, - 0x55, 0x0a, 0x37, 0x0f, 0x69, 0x4a, 0xa6, 0x34, 0x22, 0xa6, 0xbb, 0xa5, - 0xca, 0x72, 0xd8, 0xdc, 0x6f, 0x95, 0xa6, 0xa8, 0x35, 0x95, 0x4c, 0x5d, - 0x2f, 0xaf, 0x50, 0xd7, 0x54, 0x9e, 0xa8, 0xc1, 0x60, 0xdc, 0x42, 0xbf, - 0xd4, 0x7f, 0xde, 0x55, 0xef, 0x2c, 0x44, 0x01, 0xa7, 0x9f, 0x28, 0xee, - 0x36, 0x45, 0xe5, 0xb5, 0x24, 0xae, 0x48, 0x76, 0xfc, 0x61, 0x17, 0x12, - 0x9d, 0xaf, 0x4d, 0xa9, 0x32, 0x3b, 0x39, 0x53, 0x07, 0x57, 0x1a, 0xbe, - 0x97, 0x1d, 0xeb, 0x70, 0xf0, 0xf7, 0x4f, 0xa3, 0xb8, 0x62, 0xff, 0x68, - 0xfe, 0x70, 0x8f, 0xc3, 0xe1, 0x65, 0x7f, 0x23, 0x5c, 0x3c, 0x70, 0x4d, - 0x1d, 0x89, 0x5b, 0x12, 0x29, 0x6c, 0x6c, 0x5f, 0x28, 0x29, 0x57, 0xbf, - 0x1c, 0x71, 0x2c, 0xd7, 0x98, 0xf1, 0x51, 0xfb, 0xe1, 0x0a, 0x21, 0xf9, - 0x95, 0xf5, 0xb0, 0xd2, 0x57, 0xe2, 0xaf, 0xb2, 0xa7, 0xf1, 0xe3, 0x8c, - 0x3e, 0x02, 0x69, 0x28, 0xa9, 0x0b, 0xaa, 0x3a, 0xb7, 0xb6, 0xfd, 0xa0, - 0x2e, 0x8d, 0x84, 0x2f, 0x4c, 0xa7, 0x14, 0x0f, 0xac, 0x8b, 0xa2, 0x53, - 0x3f, 0x20, 0x40, 0x7f, 0x8f, 0x70, 0x73, 0xf3, 0x2d, 0x05, 0x57, 0x95, - 0x1e, 0x78, 0x17, 0xbc, 0xc6, 0xec, 0xf2, 0x01, 0x15, 0x92, 0x81, 0x17, - 0xf9, 0xa5, 0xa1, 0x36, 0x7b, 0xc7, 0x07, 0x26, 0x86, 0x63, 0x3c, 0x42, - 0x33, 0xde, 0x2c, 0x52, 0xbe, 0xbf, 0xd3, 0x59, 0x79, 0x46, 0xc4, 0x9e, - 0xd3, 0x8f, 0xa0, 0x77, 0x7c, 0xd3, 0x48, 0xa4, 0x1e, 0xf2, 0x19, 0xac, - 0x5b, 0x84, 0x23, 0xbe, 0xed, 0xc5, 0x9c, 0xef, 0xd0, 0x52, 0xbb, 0x9a, - 0x9c, 0xe5, 0x1c, 0xb0, 0x59, 0xe0, 0xc9, 0x93, 0xf0, 0x6b, 0x63, 0x1d, - 0xce, 0x0e, 0xe7, 0xf1, 0x88, 0xe5, 0xc4, 0x43, 0x96, 0x5c, 0xf6, 0x3a, - 0xd3, 0x1c, 0x1f, 0x72, 0x9c, 0xd8, 0x1f, 0x2d, 0x25, 0xbc, 0x73, 0xec, - 0xf0, 0xd4, 0xf7, 0xcb, 0xf5, 0x4f, 0xe5, 0x97, 0xb0, 0xfe, 0xc8, 0xbd, - 0x46, 0xa5, 0x60, 0x52, 0xe4, 0xb0, 0xf9, 0x7b, 0xed, 0x6f, 0x1d, 0xf2, - 0x00, 0x8b, 0xa6, 0x72, 0x44, 0xea, 0xe7, 0x68, 0x2f, 0xfb, 0x56, 0xc5, - 0x5d, 0x8a, 0x2d, 0xb1, 0x72, 0x0b, 0x78, 0x69, 0x2d, 0x21, 0xb6, 0xf7, - 0x28, 0x38, 0x32, 0xd7, 0xef, 0xcf, 0xa3, 0x3c, 0x93, 0xf8, 0xc5, 0x83, - 0xca, 0xe1, 0x57, 0x2f, 0x88, 0x68, 0x2b, 0x05, 0x8d, 0xc8, 0xdf, 0xba, - 0xf4, 0x85, 0x9c, 0x5d, 0x25, 0x71, 0x22, 0xb9, 0xc5, 0xd6, 0xd6, 0xdd, - 0x63, 0xa5, 0x2d, 0xfb, 0x38, 0x9a, 0x7e, 0x14, 0xd8, 0xc4, 0x83, 0xc1, - 0x91, 0x55, 0x45, 0x53, 0x35, 0xf4, 0x61, 0x23, 0xcb, 0x43, 0x44, 0xcb, - 0xfd, 0x79, 0xa1, 0x85, 0xff, 0xc2, 0x46, 0xa3, 0xe9, 0x3d, 0x67, 0x9c, - 0xef, 0xa8, 0x22, 0x0d, 0x25, 0x4d, 0xb1, 0xdc, 0x19, 0xea, 0x60, 0x59, - 0x52, 0xca, 0xed, 0xb4, 0x89, 0x73, 0x27, 0xdf, 0x96, 0xe6, 0xf4, 0xe3, - 0x6d, 0x70, 0x2e, 0x7b, 0xda, 0xe3, 0x7d, 0xcc, 0xd5, 0x47, 0x35, 0x28, - 0xff, 0x4f, 0x57, 0x05, 0x3b, 0xfd, 0x8e, 0x9e, 0xd6, 0x57, 0xd6, 0xed, - 0x4c, 0x41, 0x4f, 0x7f, 0x8a, 0xef, 0xbf, 0xc1, 0xf2, 0xfe, 0x1e, 0x53, - 0xc0, 0xc7, 0xfc, 0x89, 0x7c, 0xd9, 0x7a, 0xf6, 0x81, 0x1b, 0x07, 0xdf, - 0x4e, 0xf6, 0x74, 0x3d, 0xb6, 0xb3, 0x09, 0xd7, 0x3d, 0x12, 0x2d, 0xcf, - 0xd5, 0xa0, 0x8d, 0x40, 0xc0, 0x36, 0x77, 0xe8, 0x18, 0x42, 0x54, 0xfe, - 0x14, 0xa1, 0x11, 0xff, 0xe9, 0xc2, 0x1f, 0xd4, 0x0e, 0x39, 0x07, 0x8a, - 0xde, 0x5c, 0x93, 0xe0, 0x31, 0x48, 0xdc, 0x25, 0x26, 0xf3, 0xe8, 0x2d, - 0xdd, 0x9a, 0x11, 0xfa, 0x49, 0x9e, 0x71, 0xc7, 0xe8, 0x81, 0x25, 0xef, - 0x9c, 0x8b, 0xb1, 0x9e, 0xde, 0x4d, 0xb1, 0xa1, 0xaf, 0x49, 0x74, 0x98, - 0xba, 0xd6, 0x9e, 0x6a, 0xb6, 0x03, 0xdf, 0x23, 0x79, 0xa0, 0xa7, 0xda, - 0x87, 0xa3, 0x93, 0x73, 0x8c, 0xea, 0xdd, 0xa7, 0xc9, 0xc5, 0xa1, 0x48, - 0xfc, 0x29, 0xae, 0x06, 0x0c, 0xd8, 0xf7, 0x4a, 0x1e, 0x7b, 0xfa, 0x5c, - 0x3f, 0x70, 0xe2, 0xa3, 0xcf, 0xae, 0x5e, 0x9e, 0x80, 0x9e, 0x8a, 0x09, - 0x30, 0x3f, 0xce, 0xa7, 0xcf, 0xb7, 0x1e, 0x57, 0xa9, 0x2a, 0x8a, 0x53, - 0xf8, 0x17, 0xd3, 0x58, 0x78, 0x8e, 0x43, 0xcc, 0x4c, 0x40, 0xf5, 0x31, - 0x67, 0x7a, 0x41, 0x3b, 0x8b, 0x4b, 0x07, 0x71, 0x8f, 0xd3, 0x47, 0x90, - 0xb3, 0x8f, 0x97, 0x5e, 0x57, 0x6e, 0x67, 0x5d, 0x30, 0x34, 0xc6, 0xe9, - 0x27, 0x34, 0x19, 0x9c, 0x50, 0xb6, 0x4f, 0x76, 0x28, 0xf9, 0x1c, 0xf6, - 0xdd, 0x77, 0x4b, 0x9e, 0xc3, 0x31, 0x05, 0x94, 0x7b, 0xaa, 0x4f, 0x91, - 0x62, 0xf4, 0x65, 0xab, 0x72, 0x0b, 0x36, 0xb9, 0x20, 0x28, 0x64, 0x44, - 0x42, 0x55, 0x4b, 0x30, 0x79, 0x3f, 0x91, 0x20, 0xf1, 0xaf, 0xba, 0x09, - 0x94, 0x44, 0xd4, 0x18, 0x97, 0xc8, 0x22, 0x95, 0x3d, 0x27, 0xd1, 0xc2, - 0xbd, 0x25, 0x77, 0x2b, 0x11, 0x1c, 0x2a, 0xa9, 0x50, 0xdc, 0x73, 0x4a, - 0x2a, 0xd5, 0x12, 0xb3, 0x38, 0x35, 0x65, 0xb5, 0x5e, 0x32, 0x6a, 0x36, - 0xd7, 0x32, 0x31, 0x3f, 0xec, 0xd1, 0x4f, 0x06, 0xed, 0x1c, 0xe1, 0x69, - 0xd3, 0x1b, 0x7b, 0x9b, 0xcb, 0x6c, 0xa7, 0xd3, 0x73, 0x35, 0x79, 0x34, - 0x25, 0xe6, 0xe3, 0x75, 0x37, 0xc5, 0x86, 0xe8, 0x13, 0xa6, 0x82, 0x47, - 0x45, 0xba, 0x97, 0xf3, 0x9c, 0x07, 0x1b, 0x66, 0x3b, 0xa4, 0x7c, 0xc4, - 0xe8, 0xc4, 0x04, 0x50, 0x95, 0x58, 0xcd, 0xcc, 0x83, 0x95, 0xb5, 0x99, - 0xd7, 0x20, 0x3e, 0x5b, 0xd4, 0x3d, 0x0c, 0xab, 0x49, 0xa2, 0x38, 0x1d, - 0x4c, 0x7b, 0x2c, 0x4f, 0xd8, 0xe4, 0xd2, 0xcb, 0xe7, 0xc0, 0x36, 0x1e, - 0x42, 0xee, 0xe7, 0xb4, 0xb1, 0x98, 0x76, 0x91, 0x1d, 0xe6, 0x53, 0x76, - 0xb7, 0x68, 0x12, 0x38, 0xe2, 0x78, 0x95, 0x5c, 0xea, 0x83, 0xa4, 0xb9, - 0x4f, 0x1a, 0x40, 0x78, 0xef, 0xc0, 0x07, 0x90, 0x27, 0x04, 0x57, 0x56, - 0x43, 0x25, 0xeb, 0x09, 0x73, 0x07, 0x2d, 0xdd, 0xbd, 0xcf, 0x2d, 0x3e, - 0x8a, 0x2c, 0xca, 0xf4, 0x1c, 0xf6, 0x78, 0x99, 0x69, 0xb1, 0x42, 0xed, - 0x8b, 0x86, 0xb7, 0xe5, 0x30, 0x34, 0x0f, 0x10, 0x7b, 0xe8, 0xb8, 0x2c, - 0xdf, 0xb1, 0x77, 0x57, 0xc1, 0xe6, 0x71, 0xc6, 0x00, 0xf9, 0x3c, 0x9b, - 0xcb, 0x46, 0xf6, 0x09, 0x6b, 0x0c, 0xc4, 0x24, 0xa7, 0x79, 0xdc, 0xbf, - 0xc4, 0x8c, 0x25, 0xc9, 0x8c, 0x1d, 0x5a, 0x17, 0x39, 0x0d, 0xae, 0xf3, - 0xe4, 0x57, 0x9f, 0x9f, 0x59, 0x37, 0x56, 0xac, 0xb9, 0x7b, 0x0d, 0xbf, - 0xc3, 0x3e, 0x1a, 0xf1, 0x53, 0x8c, 0x17, 0x04, 0x6d, 0x33, 0x3c, 0xdc, - 0xc3, 0xbb, 0xf0, 0x6b, 0xf2, 0xed, 0x31, 0xa8, 0x18, 0x30, 0xdd, 0xcc, - 0x60, 0x5b, 0x78, 0x5c, 0x64, 0x67, 0x8d, 0x6a, 0xae, 0xa6, 0x3d, 0x3a, - 0x23, 0x4f, 0xdf, 0x53, 0xb8, 0xea, 0x09, 0xd4, 0x08, 0x72, 0x14, 0x9b, - 0xfe, 0xbe, 0xa6, 0x34, 0x82, 0xc1, 0xc4, 0x40, 0x68, 0x64, 0x0a, 0xa6, - 0xd1, 0xca, 0xe4, 0xbb, 0x4c, 0x86, 0xcd, 0x87, 0xf7, 0x2b, 0xee, 0x19, - 0x87, 0xcf, 0xee, 0x23, 0x5f, 0x30, 0xf5, 0xed, 0x15, 0xea, 0xfa, 0x45, - 0x5e, 0xd0, 0xbb, 0x38, 0xf9, 0x2c, 0x5f, 0x69, 0x62, 0xa1, 0x6b, 0xea, - 0x85, 0xef, 0x80, 0xbe, 0xe1, 0x79, 0x4b, 0xf9, 0x3f, 0x17, 0xd9, 0xbe, - 0x23, 0xb8, 0x3a, 0xdb, 0xc0, 0xd7, 0x89, 0x8b, 0x3a, 0xbe, 0x4e, 0x9f, - 0x2f, 0xba, 0xf1, 0x49, 0xc3, 0xa7, 0x55, 0x02, 0xac, 0x4f, 0xa6, 0x8c, - 0x80, 0x9a, 0xca, 0x6c, 0xd0, 0xe7, 0x9e, 0x86, 0x2b, 0x52, 0x35, 0xf8, - 0x4e, 0xda, 0x57, 0xbb, 0x2e, 0x36, 0x13, 0x4c, 0xdf, 0xfe, 0xb3, 0xad, - 0xb6, 0x9c, 0xef, 0xb8, 0xc6, 0x11, 0x55, 0x30, 0x09, 0x09, 0xfb, 0x53, - 0x35, 0xdd, 0x7e, 0x2d, 0xa3, 0xee, 0xb2, 0x11, 0x94, 0xec, 0x1c, 0xbd, - 0x51, 0x0d, 0x46, 0x39, 0x89, 0xf1, 0xd6, 0x89, 0xf9, 0x25, 0xa5, 0x24, - 0x4e, 0xcc, 0xcf, 0x0d, 0x6d, 0x92, 0x7d, 0x66, 0x7d, 0x19, 0x08, 0x5f, - 0x99, 0x2b, 0xee, 0x9a, 0x5a, 0x8b, 0x23, 0x29, 0x41, 0x68, 0xa0, 0x3f, - 0x02, 0x56, 0x9b, 0x46, 0xe0, 0x14, 0xdd, 0x06, 0x8a, 0x8e, 0xcf, 0x3c, - 0x7e, 0x07, 0x0f, 0xff, 0x58, 0xf8, 0x96, 0x74, 0x0d, 0x94, 0x38, 0x09, - 0x05, 0x16, 0x0a, 0x0c, 0x6b, 0xb7, 0x50, 0x92, 0x4a, 0x04, 0x53, 0x67, - 0x13, 0x74, 0x74, 0x32, 0x66, 0x66, 0x39, 0x30, 0x6a, 0xc9, 0xa6, 0x17, - 0x5c, 0x92, 0x84, 0xb0, 0x92, 0x78, 0x40, 0x1a, 0xfe, 0xca, 0x82, 0x4f, - 0x95, 0xbe, 0x2d, 0xae, 0x55, 0x4e, 0x8e, 0xac, 0x2d, 0x96, 0x65, 0xf3, - 0x05, 0x71, 0xc7, 0x53, 0x92, 0x40, 0x03, 0xcd, 0x77, 0xe7, 0x12, 0xb7, - 0xb7, 0xcb, 0x52, 0xf9, 0x64, 0x25, 0x82, 0x02, 0x47, 0xbb, 0xa0, 0x83, - 0x55, 0xc2, 0xb2, 0xe5, 0x83, 0x31, 0xd0, 0xcb, 0x9b, 0x6e, 0x7d, 0x88, - 0x5e, 0xa3, 0x58, 0x6c, 0x83, 0x23, 0xe5, 0xeb, 0xef, 0x96, 0x47, 0xc9, - 0xf7, 0x1d, 0x41, 0x52, 0x59, 0x6d, 0xe9, 0xf2, 0x68, 0xf9, 0xa3, 0xa2, - 0xa2, 0x50, 0x35, 0x84, 0x55, 0x87, 0x91, 0x51, 0x59, 0xff, 0x20, 0x9b, - 0x78, 0xca, 0xf5, 0xf6, 0x71, 0xe1, 0x75, 0x6c, 0x7f, 0x84, 0xb0, 0x54, - 0x07, 0xea, 0xa0, 0x23, 0x76, 0xc9, 0xf7, 0x1c, 0x4b, 0xdc, 0x2d, 0x19, - 0xaf, 0x3c, 0x02, 0xec, 0x49, 0xe3, 0x99, 0x52, 0xab, 0xec, 0xf5, 0x8f, - 0x88, 0x4e, 0x38, 0xc4, 0xc3, 0x70, 0x7f, 0xc0, 0xbd, 0x45, 0x34, 0xd4, - 0x5f, 0x77, 0x9c, 0x7e, 0xec, 0xb9, 0x14, 0x2f, 0xf3, 0xa7, 0x8c, 0x25, - 0x06, 0x98, 0x42, 0xb1, 0x8a, 0xf1, 0xb4, 0xb7, 0x31, 0x16, 0xc5, 0x0d, - 0x21, 0x01, 0x4f, 0x27, 0xc4, 0xb1, 0x4b, 0xbe, 0x14, 0x09, 0x32, 0x3f, - 0xe3, 0xc9, 0x67, 0x7a, 0xe7, 0xf1, 0xcc, 0x2f, 0x3c, 0x9e, 0x3c, 0xf5, - 0x98, 0x33, 0xf3, 0xac, 0xe8, 0x5e, 0x1d, 0x81, 0x87, 0xc1, 0x86, 0x47, - 0x3c, 0xf4, 0xe1, 0x82, 0xcd, 0x82, 0xfd, 0xe5, 0x49, 0x3c, 0xa5, 0x24, - 0xa8, 0x4d, 0x12, 0xfb, 0x6b, 0x25, 0xad, 0x55, 0xcb, 0x75, 0xbd, 0x68, - 0x34, 0xca, 0xf7, 0x2a, 0x57, 0x0d, 0x9e, 0x1f, 0x3f, 0x67, 0x11, 0xb2, - 0xa2, 0xab, 0xc0, 0x78, 0x8c, 0xac, 0xa5, 0x92, 0x7f, 0x5e, 0x5c, 0x95, - 0x3c, 0xc5, 0x2f, 0xd7, 0x09, 0x43, 0x59, 0xe3, 0x9a, 0x7c, 0xb9, 0x7e, - 0x61, 0x95, 0x5a, 0x16, 0xf2, 0xe6, 0xaf, 0x32, 0xcf, 0x7b, 0x89, 0xac, - 0xfc, 0x7b, 0xa6, 0x42, 0xae, 0x59, 0x13, 0x0c, 0xa4, 0xad, 0x7d, 0xfb, - 0xb3, 0xf0, 0xe6, 0xa2, 0x3f, 0xf8, 0xd8, 0x60, 0xd5, 0x24, 0x4a, 0xf8, - 0x22, 0x7c, 0x64, 0xd4, 0x1b, 0xce, 0x9f, 0xdb, 0x87, 0xc5, 0xae, 0x0b, - 0xfe, 0xc7, 0x21, 0xe2, 0xef, 0x49, 0x1a, 0x27, 0xf3, 0xd4, 0xf6, 0x28, - 0x25, 0xe6, 0xef, 0xde, 0x26, 0xde, 0xdf, 0xf7, 0x67, 0x36, 0xd1, 0x14, - 0x65, 0x19, 0xbe, 0x5c, 0x2b, 0x22, 0x4d, 0x87, 0x09, 0xc1, 0xb3, 0xff, - 0xe5, 0x0c, 0x81, 0x4e, 0x7f, 0x3a, 0x11, 0x6f, 0x26, 0xed, 0x39, 0x0d, - 0x31, 0x89, 0x1f, 0xde, 0xd7, 0xd1, 0x00, 0x07, 0xaf, 0x75, 0x1e, 0x2e, - 0x4f, 0x15, 0x87, 0xf4, 0xd8, 0x0d, 0x77, 0x8b, 0xf2, 0x43, 0xe9, 0xf0, - 0x37, 0x19, 0x71, 0xfb, 0x13, 0x2d, 0x73, 0x1c, 0xb1, 0x59, 0x4b, 0x50, - 0x9a, 0xbd, 0x8f, 0xdc, 0x3d, 0x8c, 0x5f, 0x1e, 0x71, 0xb9, 0x99, 0xd7, - 0x5d, 0x60, 0x13, 0x61, 0xf0, 0x57, 0x23, 0x4b, 0x29, 0x28, 0xf7, 0x27, - 0xec, 0x95, 0xda, 0x3e, 0xb2, 0xc3, 0x3b, 0x04, 0xeb, 0x8c, 0x47, 0x0e, - 0xcf, 0xd4, 0x54, 0xb3, 0xc7, 0x3b, 0xf6, 0x1a, 0x41, 0xe2, 0xd0, 0xaa, - 0xd4, 0xd1, 0x3f, 0x5d, 0x55, 0xe7, 0x74, 0x00, 0xc9, 0xcd, 0x56, 0xa9, - 0xc5, 0x44, 0x42, 0xca, 0x6e, 0xe7, 0x77, 0x82, 0xf4, 0xdd, 0xf6, 0x92, - 0xbf, 0x04, 0xae, 0x5c, 0xa5, 0x24, 0xdd, 0x2a, 0x65, 0x77, 0xeb, 0x73, - 0xca, 0x52, 0xd9, 0xec, 0x3b, 0x4f, 0xcd, 0x2c, 0x63, 0xfb, 0x1e, 0x9b, - 0x9e, 0x42, 0x22, 0x5a, 0xd2, 0x2b, 0x04, 0xd6, 0x72, 0x38, 0x9b, 0x06, - 0x0b, 0xf6, 0x60, 0x47, 0x4d, 0xb2, 0x2a, 0x25, 0x5d, 0x17, 0xee, 0xd8, - 0xcc, 0x07, 0x38, 0xb1, 0xa2, 0x3a, 0x0e, 0x3f, 0x7e, 0xfe, 0xb7, 0x52, - 0x41, 0xba, 0xf7, 0x1b, 0x51, 0x4f, 0x6c, 0x9e, 0x17, 0x5d, 0xc5, 0xca, - 0x74, 0x94, 0x20, 0x2b, 0x97, 0x90, 0x3a, 0x68, 0x60, 0xc8, 0x18, 0x2d, - 0xb5, 0x3d, 0x04, 0xc9, 0xfe, 0x4d, 0xf3, 0x77, 0xc3, 0xe2, 0xf3, 0x55, - 0x7c, 0xb9, 0xfe, 0xb5, 0xd6, 0xef, 0xbe, 0x92, 0x8d, 0x9e, 0xf5, 0x55, - 0x8f, 0x97, 0x88, 0x76, 0xf5, 0x57, 0xf3, 0x7d, 0x5a, 0xe2, 0x20, 0x7d, - 0x64, 0x95, 0x94, 0x08, 0xf5, 0x35, 0x89, 0xbd, 0xe6, 0x62, 0xc7, 0x63, - 0xce, 0x17, 0x83, 0xc3, 0x94, 0x65, 0x10, 0x4f, 0x36, 0x4f, 0xed, 0xfa, - 0x1a, 0xf5, 0xee, 0x9f, 0x3e, 0x1a, 0xb9, 0xb4, 0x38, 0xb6, 0xfa, 0x9c, - 0x27, 0xd3, 0x9c, 0xd6, 0xd1, 0x97, 0x3b, 0xea, 0xe6, 0x0f, 0x40, 0xab, - 0x8a, 0xca, 0x11, 0xdd, 0x1a, 0xb4, 0xb9, 0x0a, 0xd7, 0xce, 0x92, 0xba, - 0xb7, 0x79, 0xda, 0xca, 0x48, 0xbb, 0x11, 0x96, 0x88, 0xf3, 0xf5, 0xca, - 0x23, 0x42, 0xc0, 0xf6, 0xb2, 0x58, 0x8d, 0xf2, 0xc3, 0xf7, 0x0b, 0x31, - 0xbf, 0xf7, 0x64, 0xe0, 0x34, 0x15, 0x31, 0xb3, 0xd7, 0x2b, 0x2e, 0xdf, - 0xd8, 0x36, 0x81, 0x5c, 0xc4, 0x99, 0x15, 0x96, 0x31, 0x72, 0x09, 0x55, - 0x7a, 0x47, 0x44, 0xb9, 0xbb, 0x12, 0x06, 0x62, 0xff, 0xb6, 0x76, 0xe6, - 0xc5, 0x72, 0x99, 0x80, 0x92, 0xb9, 0xcf, 0x6a, 0x75, 0xe9, 0xda, 0x55, - 0x66, 0x39, 0xb9, 0xb1, 0xfa, 0x83, 0x34, 0xe3, 0x53, 0x23, 0xfe, 0xef, - 0x9c, 0x1e, 0x29, 0xb7, 0xa0, 0x5e, 0x1f, 0x9d, 0x95, 0x31, 0x50, 0x54, - 0x6c, 0x1c, 0x53, 0x8a, 0x32, 0xe4, 0x39, 0xa0, 0x34, 0xee, 0x8e, 0xcb, - 0x33, 0xb2, 0xdd, 0x4e, 0x2f, 0x3d, 0xc5, 0x16, 0xc5, 0xf2, 0xff, 0xf6, - 0xf4, 0x7e, 0x70, 0x91, 0xd8, 0xda, 0x93, 0x49, 0x5b, 0x10, 0xc4, 0x9d, - 0x4b, 0xa5, 0x16, 0x28, 0xd2, 0x73, 0xcb, 0x3a, 0x81, 0xcd, 0x27, 0xca, - 0xb7, 0xfa, 0xc3, 0xea, 0x4f, 0x1d, 0x77, 0x93, 0x23, 0x0c, 0x66, 0x51, - 0x3e, 0x0a, 0xce, 0xcb, 0x8a, 0x41, 0xa8, 0xbf, 0x1c, 0xcd, 0x52, 0x0b, - 0x88, 0xc9, 0xd6, 0x7c, 0x3e, 0x11, 0xca, 0xc3, 0x18, 0x93, 0x7b, 0x8b, - 0x5c, 0xf3, 0xa4, 0x9e, 0x95, 0x1b, 0xec, 0x19, 0x12, 0xee, 0xf3, 0x67, - 0xd9, 0x5e, 0xb6, 0x5a, 0x9b, 0x3f, 0x7b, 0x02, 0x92, 0xb1, 0xbe, 0xea, - 0xf1, 0x7e, 0x6f, 0xf8, 0xe2, 0xa3, 0x25, 0xb4, 0x0c, 0x5f, 0xd3, 0xb9, - 0x09, 0x9a, 0x07, 0x9b, 0x02, 0x2a, 0x5e, 0x03, 0xeb, 0x73, 0xb1, 0x2b, - 0x7d, 0xcf, 0xe4, 0x69, 0x02, 0x6b, 0x0b, 0xb4, 0x82, 0x59, 0x39, 0xe2, - 0x82, 0x97, 0x8f, 0x66, 0x58, 0x76, 0x3f, 0xc4, 0x76, 0x03, 0xf1, 0x96, - 0x26, 0x3a, 0xce, 0x23, 0xec, 0x6a, 0xbd, 0x5f, 0xb0, 0x57, 0x5a, 0xa7, - 0xa7, 0xe5, 0x6e, 0x3d, 0x79, 0x12, 0xe7, 0x01, 0x77, 0xdd, 0x6d, 0x5c, - 0xa8, 0x16, 0x6c, 0x76, 0x58, 0x16, 0x73, 0xfe, 0x8a, 0x4f, 0x7b, 0x67, - 0xfd, 0xdd, 0x9e, 0x53, 0xe6, 0xd6, 0xae, 0x97, 0xc1, 0xa7, 0xb8, 0x0b, - 0x8d, 0xc2, 0x78, 0xc2, 0xed, 0xba, 0x9a, 0x5a, 0xd2, 0x96, 0x37, 0x2d, - 0x45, 0xf9, 0xda, 0x39, 0x98, 0xfb, 0xf6, 0xf5, 0x41, 0x5d, 0x3d, 0xd9, - 0x96, 0x66, 0xde, 0x64, 0x82, 0xfa, 0x12, 0x23, 0xa4, 0xdc, 0x96, 0x09, - 0x73, 0x20, 0x4f, 0x42, 0x98, 0x3f, 0x1b, 0xd6, 0x78, 0x3d, 0x85, 0x29, - 0x7d, 0x54, 0x96, 0x90, 0x9f, 0x5b, 0x2e, 0x17, 0x38, 0xc9, 0x6c, 0xa3, - 0x74, 0xe1, 0xae, 0x51, 0xf2, 0x3a, 0xe3, 0x64, 0x67, 0xe9, 0x43, 0xd2, - 0x68, 0x8f, 0x99, 0x43, 0xa1, 0x10, 0x49, 0x92, 0x7b, 0xee, 0xdc, 0x1a, - 0x3d, 0x74, 0x90, 0xdf, 0x03, 0x8f, 0x3e, 0x59, 0x81, 0x50, 0xad, 0x3d, - 0xd1, 0x26, 0x94, 0xd0, 0x6f, 0x34, 0xf8, 0x46, 0x31, 0xd8, 0x64, 0xf3, - 0x78, 0x37, 0x2c, 0x1c, 0x38, 0x0e, 0x28, 0xc4, 0xc1, 0xc7, 0x8a, 0x44, - 0x2d, 0xdd, 0x36, 0xd0, 0xa6, 0x7f, 0xf8, 0x8b, 0x89, 0xff, 0x88, 0x4e, - 0x2d, 0xda, 0xf7, 0x2b, 0x8b, 0xc8, 0x34, 0x40, 0x14, 0x7c, 0x4a, 0x61, - 0x3b, 0x8e, 0x6d, 0x93, 0xcc, 0x3d, 0xf4, 0x2b, 0xca, 0x4c, 0xb0, 0xfb, - 0x44, 0x2a, 0xf9, 0x69, 0x7b, 0xbe, 0xa9, 0xdf, 0x47, 0x95, 0xdd, 0x76, - 0x92, 0x88, 0x63, 0xeb, 0x28, 0x51, 0x8d, 0x5b, 0xfc, 0x08, 0x86, 0xd0, - 0xeb, 0x80, 0xc4, 0x3a, 0x11, 0xef, 0x2b, 0x5b, 0x28, 0x57, 0x05, 0x8d, - 0x81, 0x65, 0xcf, 0x87, 0x01, 0xd8, 0x94, 0x59, 0x02, 0x1e, 0xa1, 0x78, - 0x76, 0x81, 0x5d, 0x60, 0xdf, 0xc3, 0x5e, 0x70, 0x49, 0x26, 0xb6, 0x60, - 0x41, 0x6d, 0x2e, 0xa8, 0xfa, 0xa8, 0xac, 0x06, 0x8b, 0xa8, 0x6f, 0xd4, - 0x86, 0x25, 0xcc, 0x32, 0x05, 0x63, 0x34, 0xe2, 0xae, 0x76, 0x62, 0x00, - 0xfc, 0xf6, 0x29, 0xf1, 0x1a, 0x28, 0x1a, 0x7b, 0x35, 0xf3, 0x44, 0xef, - 0xe9, 0xc2, 0x3d, 0xdd, 0x31, 0x36, 0xa9, 0x97, 0xaa, 0xdb, 0xdd, 0x61, - 0x96, 0x9a, 0x24, 0xed, 0x98, 0x2c, 0xa2, 0x82, 0xdb, 0x72, 0x20, 0xfa, - 0xb8, 0xaf, 0xec, 0x9e, 0x49, 0xe4, 0x23, 0x64, 0xe7, 0xd1, 0x9b, 0x13, - 0x4e, 0xf7, 0xc7, 0xc0, 0x50, 0xb5, 0xe1, 0xbb, 0x5b, 0xda, 0xbb, 0xf5, - 0x80, 0xea, 0xad, 0xbf, 0xa6, 0x3b, 0xfc, 0x4a, 0x7c, 0x6e, 0x4b, 0x4b, - 0xda, 0xfe, 0x5a, 0xb8, 0x45, 0xe4, 0x1f, 0x82, 0xa5, 0x4f, 0xe0, 0xbd, - 0xc7, 0xf7, 0x6f, 0x0c, 0x0e, 0x63, 0xdd, 0xef, 0xbc, 0x3b, 0x9a, 0x4d, - 0x27, 0xa1, 0x1b, 0x94, 0x0e, 0x5c, 0xb2, 0xa4, 0xfa, 0x1f, 0x4b, 0xd2, - 0x74, 0x31, 0x8b, 0xb8, 0x24, 0xa1, 0x5e, 0xc3, 0x8c, 0xca, 0x12, 0xc6, - 0x90, 0x7a, 0xb6, 0x4b, 0x72, 0x69, 0x74, 0x39, 0x5b, 0xca, 0x9b, 0xad, - 0x11, 0xd5, 0x7e, 0x29, 0x91, 0x17, 0xd5, 0x27, 0x3e, 0xc9, 0x6e, 0x66, - 0x54, 0x71, 0xea, 0x7e, 0xd9, 0xd4, 0x68, 0xe7, 0x57, 0x3b, 0x9c, 0xc2, - 0x6b, 0xe0, 0x18, 0x69, 0xf3, 0x7a, 0xd0, 0x70, 0x8a, 0x95, 0x82, 0x89, - 0xa8, 0x84, 0x9b, 0xa6, 0x74, 0x98, 0x42, 0x9f, 0x2d, 0x9e, 0xff, 0x76, - 0x10, 0x8b, 0x0f, 0xb1, 0x09, 0xb9, 0x3b, 0xd4, 0x02, 0xb8, 0x98, 0x77, - 0x04, 0x8d, 0xce, 0xa2, 0x38, 0x9e, 0x11, 0x46, 0x0e, 0x8d, 0x14, 0x4f, - 0x3c, 0x4c, 0x1d, 0x82, 0xb9, 0x39, 0x3e, 0x90, 0xfd, 0xed, 0x89, 0x1f, - 0x7e, 0x59, 0xc0, 0xcc, 0xce, 0x09, 0xf2, 0xe2, 0x31, 0x9b, 0x66, 0x1d, - 0x86, 0x89, 0xb0, 0xba, 0x66, 0x2b, 0x5b, 0x60, 0x36, 0x86, 0x99, 0xe1, - 0x2a, 0x9b, 0x3a, 0x5c, 0x0c, 0x59, 0x29, 0x55, 0x98, 0x6c, 0x43, 0xad, - 0x61, 0xa3, 0x69, 0xfd, 0x63, 0x81, 0xa9, 0x73, 0x3b, 0xf0, 0xc6, 0xcd, - 0x6c, 0x7b, 0xa1, 0x9a, 0xdb, 0xd2, 0x5a, 0x33, 0xc6, 0x4e, 0x84, 0xe3, - 0x3d, 0xe4, 0x1c, 0xd6, 0xfe, 0x26, 0xfe, 0xb2, 0xc0, 0x3e, 0x2f, 0x56, - 0x26, 0x85, 0x0c, 0x53, 0xf7, 0x16, 0xac, 0xde, 0xd2, 0xf5, 0x05, 0x23, - 0x9e, 0xb3, 0x7a, 0x9b, 0x63, 0xf5, 0xa8, 0x44, 0x07, 0x9c, 0x7a, 0xa3, - 0x9a, 0x29, 0xcd, 0xad, 0x32, 0x4b, 0xf3, 0x8f, 0x4e, 0x2a, 0x71, 0xd0, - 0x4c, 0x82, 0x1c, 0xc7, 0xc5, 0xcf, 0x45, 0xc4, 0x2a, 0x8c, 0x31, 0x59, - 0x41, 0x3b, 0xf1, 0x80, 0x79, 0x8b, 0xa6, 0xde, 0x5c, 0x28, 0xbb, 0x5e, - 0x2c, 0x21, 0x75, 0x16, 0x9b, 0x9c, 0xf5, 0x6e, 0x57, 0x4e, 0x05, 0x59, - 0x1e, 0x3a, 0xd9, 0x72, 0x06, 0xef, 0xa2, 0xe6, 0x43, 0x64, 0x37, 0x78, - 0xc3, 0x3d, 0xbe, 0xb9, 0xa0, 0x06, 0xf3, 0x7d, 0x99, 0x7a, 0xbd, 0x30, - 0x53, 0x1f, 0x49, 0x19, 0x43, 0x7d, 0x84, 0xba, 0x6f, 0xc1, 0xf6, 0x24, - 0xd5, 0x5e, 0x5d, 0xe7, 0x47, 0x5c, 0x76, 0xae, 0x28, 0x58, 0x1f, 0x72, - 0x83, 0x69, 0x94, 0x6c, 0x70, 0xa7, 0xae, 0x91, 0xaf, 0x2d, 0xb6, 0x11, - 0x55, 0x9f, 0xd0, 0x3d, 0x61, 0x7d, 0x53, 0x21, 0xfe, 0xa2, 0x79, 0x9f, - 0x1c, 0x17, 0xa8, 0x4b, 0xe8, 0x26, 0x76, 0xea, 0xde, 0xe9, 0xee, 0x21, - 0x89, 0xa7, 0x99, 0xc5, 0xfa, 0xc0, 0x6a, 0xcc, 0xe4, 0xeb, 0xe6, 0xd9, - 0xf0, 0xd1, 0x01, 0x70, 0x89, 0x46, 0xe5, 0x2c, 0x7c, 0x3d, 0x7f, 0xbb, - 0xfd, 0xf6, 0x41, 0xdb, 0x35, 0xf8, 0xd7, 0xdd, 0xcf, 0x98, 0xeb, 0xfe, - 0x34, 0x45, 0xde, 0x95, 0x6d, 0xdd, 0x33, 0x28, 0x4c, 0xc3, 0x97, 0xa7, - 0x17, 0xf8, 0xbe, 0x26, 0xc1, 0x86, 0xb0, 0x1a, 0xaa, 0x38, 0x1d, 0x01, - 0x67, 0xae, 0xa1, 0xa1, 0x7d, 0x54, 0x52, 0x3f, 0x16, 0x1b, 0x2f, 0x20, - 0x81, 0x11, 0x52, 0x89, 0xca, 0xb4, 0x28, 0xde, 0xd3, 0x3e, 0x0f, 0x9b, - 0xdd, 0x4b, 0xaf, 0xdf, 0x26, 0x5e, 0x51, 0x7f, 0xd2, 0xda, 0x50, 0x89, - 0x46, 0xe9, 0x24, 0x56, 0x6d, 0xc2, 0x3c, 0xdc, 0xe7, 0x19, 0x1a, 0x7f, - 0xb6, 0xe1, 0x9e, 0xa4, 0x5a, 0x84, 0xdd, 0x13, 0x94, 0x1c, 0x1b, 0xb1, - 0x96, 0x25, 0xdc, 0x4a, 0x7e, 0x1b, 0x50, 0x78, 0x22, 0xba, 0xb5, 0x0d, - 0x45, 0xd3, 0x4d, 0xb7, 0xa0, 0x85, 0x68, 0x4a, 0xf3, 0x1c, 0xd3, 0xeb, - 0xce, 0xb6, 0x08, 0xb4, 0x66, 0x2b, 0x09, 0x89, 0x5a, 0xcc, 0xcd, 0x41, - 0x0a, 0xb5, 0x5d, 0x82, 0xec, 0x71, 0x83, 0xde, 0x49, 0xf8, 0x8d, 0xdc, - 0xcd, 0x73, 0x0a, 0xc3, 0x43, 0x8e, 0x3f, 0x2d, 0xa2, 0x1d, 0xe5, 0x2f, - 0xf1, 0x48, 0x38, 0x5f, 0x96, 0x72, 0x14, 0x6b, 0x2f, 0xee, 0x31, 0x97, - 0x21, 0xcd, 0x83, 0xba, 0x43, 0xf5, 0x99, 0xcf, 0xe6, 0x46, 0x03, 0xb6, - 0x58, 0x00, 0x11, 0xfa, 0xab, 0x43, 0xe7, 0x14, 0xaf, 0x20, 0x79, 0xda, - 0xad, 0xe8, 0x65, 0x70, 0x60, 0x4d, 0x13, 0x16, 0x34, 0xb4, 0xe5, 0x80, - 0x44, 0x74, 0x19, 0xf8, 0x9a, 0xb1, 0x66, 0xed, 0x1d, 0x37, 0x6e, 0xd7, - 0x54, 0x0d, 0xcd, 0xc5, 0x8d, 0xb6, 0xb4, 0xc2, 0x82, 0xd4, 0x60, 0xf5, - 0x2b, 0x00, 0x64, 0x3e, 0x23, 0x08, 0xe6, 0x61, 0x7b, 0x9f, 0xf4, 0xe2, - 0x81, 0xae, 0xff, 0xd5, 0x52, 0xb4, 0x79, 0xe2, 0x36, 0x89, 0x2d, 0x70, - 0xa0, 0x7b, 0x9f, 0xea, 0x58, 0x99, 0x4c, 0xa3, 0x1a, 0x42, 0xcf, 0x44, - 0x93, 0xed, 0x9f, 0x0e, 0x48, 0x30, 0x68, 0xac, 0x7f, 0xd3, 0x79, 0xd1, - 0x36, 0x61, 0x06, 0xa6, 0x91, 0x2c, 0xc7, 0x53, 0x12, 0x9e, 0x4d, 0x76, - 0x71, 0xd2, 0x2e, 0xf6, 0x16, 0xfa, 0xec, 0x36, 0x08, 0xd2, 0xf8, 0x98, - 0xa6, 0xac, 0x85, 0x67, 0x69, 0x11, 0x27, 0x9f, 0xc3, 0x6d, 0x58, 0x3f, - 0x85, 0xfa, 0x0d, 0xa5, 0x1e, 0x4f, 0x36, 0xd6, 0xb3, 0x67, 0x1a, 0x71, - 0xb6, 0xcb, 0xbe, 0xbb, 0xb2, 0x33, 0xfc, 0xca, 0x56, 0xfc, 0xa1, 0xfb, - 0xfd, 0xf4, 0x61, 0x6f, 0xc3, 0xd6, 0xbb, 0x1d, 0xb7, 0x28, 0x49, 0xcf, - 0x78, 0xc4, 0xc1, 0x9a, 0xb1, 0xc8, 0x4f, 0x92, 0x56, 0xc3, 0x61, 0xa4, - 0xcd, 0x8b, 0x78, 0x30, 0x39, 0x5a, 0x09, 0x0a, 0xf6, 0x8c, 0x24, 0x39, - 0x63, 0x61, 0x91, 0xc0, 0xbf, 0xb6, 0x03, 0xb0, 0x89, 0x44, 0x90, 0x67, - 0x77, 0x99, 0x52, 0x94, 0x65, 0x4a, 0x35, 0xb5, 0xe7, 0x6f, 0x8a, 0xd1, - 0xe4, 0xd9, 0x22, 0xef, 0x57, 0x9b, 0x45, 0x74, 0x48, 0xe5, 0x23, 0x9a, - 0x2b, 0x3d, 0x2b, 0x59, 0x91, 0xa5, 0x51, 0x1b, 0x8a, 0x40, 0x71, 0xed, - 0xdf, 0xb3, 0x47, 0x9a, 0xe2, 0xc6, 0xf1, 0x8e, 0xb2, 0xe4, 0x97, 0xaa, - 0xeb, 0x38, 0xe3, 0x7e, 0x8b, 0xd0, 0xfc, 0x26, 0xa4, 0x9e, 0x01, 0x51, - 0x6a, 0x68, 0xe4, 0x0c, 0x63, 0x91, 0x4a, 0xe3, 0x09, 0x38, 0x1c, 0x98, - 0x12, 0x8e, 0x34, 0xe2, 0x34, 0x40, 0x49, 0x3c, 0x8d, 0x36, 0x6d, 0x7c, - 0x88, 0x9b, 0x28, 0x88, 0x61, 0x8f, 0x53, 0x62, 0xa3, 0xc8, 0xab, 0xf7, - 0xa2, 0xbb, 0x8f, 0x5d, 0x90, 0x97, 0x19, 0xee, 0xd3, 0xf9, 0xff, 0x70, - 0x0b, 0x3f, 0xad, 0x3e, 0x40, 0x02, 0xfb, 0x94, 0x0f, 0x22, 0x31, 0xc9, - 0xb2, 0xf6, 0x1f, 0x87, 0x08, 0x93, 0x86, 0x06, 0x67, 0xc9, 0xf7, 0x70, - 0xdd, 0xff, 0x89, 0x9a, 0xbf, 0xad, 0xc3, 0x71, 0xad, 0xc8, 0xae, 0x1f, - 0x12, 0xb7, 0x2b, 0xf6, 0xf0, 0x47, 0x6c, 0xc3, 0x09, 0xf3, 0x29, 0xd3, - 0x06, 0x45, 0x22, 0xe9, 0x2b, 0x9b, 0xb9, 0x45, 0x4f, 0x42, 0x90, 0x79, - 0xff, 0xe1, 0x62, 0x1d, 0xf9, 0x42, 0xd5, 0x9f, 0x4a, 0x27, 0xad, 0x80, - 0x4b, 0x92, 0xd1, 0xec, 0x5f, 0xe0, 0xd0, 0x5b, 0xa7, 0xba, 0x94, 0x35, - 0x58, 0x2f, 0xaa, 0xc9, 0x07, 0xff, 0x38, 0xd7, 0xd8, 0x7c, 0xeb, 0x87, - 0x0a, 0x3b, 0xc3, 0xd6, 0x2e, 0x1d, 0xe2, 0x30, 0x74, 0xc3, 0x16, 0xfc, - 0x90, 0x89, 0x35, 0xa1, 0xd8, 0xd1, 0x06, 0xd4, 0x56, 0x30, 0x5f, 0x56, - 0x4c, 0x9d, 0x5e, 0x8d, 0x54, 0x6d, 0x61, 0x19, 0xbb, 0x93, 0xea, 0x85, - 0x00, 0xeb, 0xae, 0xfe, 0x78, 0x2c, 0xe6, 0x63, 0x8a, 0xa0, 0xd4, 0x9e, - 0xda, 0x17, 0xf8, 0xbe, 0x1d, 0xcb, 0xcd, 0x94, 0x20, 0x10, 0xcc, 0x8b, - 0x58, 0x54, 0x3c, 0x64, 0x29, 0x6e, 0xde, 0x9d, 0x01, 0xdd, 0x79, 0x5f, - 0x2f, 0x35, 0x15, 0x75, 0x88, 0x2d, 0xa4, 0x8f, 0x2f, 0xaf, 0xf2, 0xad, - 0x0f, 0xaa, 0x71, 0x72, 0xa9, 0x6d, 0xb0, 0x7d, 0xf8, 0x84, 0x67, 0xd8, - 0xe8, 0x54, 0x1c, 0x65, 0x51, 0x8f, 0xc3, 0x95, 0x31, 0x29, 0x89, 0xa0, - 0x51, 0xde, 0x7d, 0x82, 0x05, 0x29, 0x25, 0x4b, 0x3f, 0x3d, 0x38, 0x5d, - 0x0b, 0xda, 0x76, 0xd1, 0x62, 0x6f, 0x7e, 0x7b, 0x52, 0x6a, 0xaf, 0x44, - 0x1f, 0x04, 0x51, 0x5e, 0x2f, 0x70, 0x23, 0x16, 0x30, 0x19, 0x80, 0x81, - 0xe6, 0x28, 0xd7, 0xdb, 0xe8, 0xc4, 0x1f, 0x37, 0xf9, 0xee, 0x2f, 0xf1, - 0x96, 0x36, 0x12, 0xbb, 0x43, 0x6c, 0xfa, 0x82, 0xa4, 0xfd, 0x04, 0xa1, - 0xf1, 0x0e, 0x42, 0xc3, 0x33, 0x09, 0x06, 0x08, 0xbb, 0x3c, 0x33, 0x94, - 0xa3, 0x89, 0x5c, 0x8a, 0x67, 0xee, 0x15, 0x17, 0x63, 0x3a, 0xe3, 0x41, - 0x99, 0x87, 0xcb, 0xc7, 0x66, 0x9b, 0xa8, 0xf9, 0xd4, 0x97, 0x9f, 0xb6, - 0xa4, 0x2d, 0xcf, 0x68, 0xe4, 0x5b, 0x2a, 0xcc, 0xc7, 0xdd, 0x3d, 0x2d, - 0xa4, 0x49, 0xdc, 0xdc, 0x82, 0xb2, 0x2d, 0x25, 0x75, 0xe4, 0xc9, 0x8c, - 0xd2, 0x6b, 0x5a, 0x69, 0xed, 0x68, 0x34, 0xc7, 0x2f, 0xd7, 0xd2, 0xf6, - 0x9b, 0xc9, 0xc0, 0x49, 0x23, 0x6f, 0xa7, 0x71, 0xf9, 0x14, 0xe4, 0xfa, - 0x5c, 0x9e, 0x20, 0xff, 0xa1, 0x16, 0x11, 0x66, 0x94, 0x67, 0x7d, 0x57, - 0x9e, 0x0d, 0xb9, 0x07, 0xee, 0x98, 0xcf, 0xf6, 0x6a, 0x25, 0x27, 0x58, - 0x5c, 0x42, 0x0e, 0xfa, 0xc1, 0x7a, 0x89, 0x3f, 0x2d, 0x58, 0x8d, 0x0f, - 0x0b, 0x70, 0xa4, 0x06, 0xe2, 0x65, 0x0a, 0x8b, 0xd3, 0xa9, 0xf5, 0x39, - 0xb5, 0xf7, 0xac, 0xf7, 0xbc, 0x32, 0x06, 0x4f, 0x7a, 0x44, 0x41, 0xcf, - 0xd4, 0x3c, 0x6a, 0x12, 0x77, 0x51, 0x66, 0x79, 0xab, 0x49, 0xf8, 0xa5, - 0xb3, 0x87, 0x4a, 0x09, 0x03, 0x46, 0x97, 0x13, 0x92, 0x9f, 0xf6, 0xa0, - 0x71, 0xe1, 0x12, 0xbc, 0xa4, 0x1a, 0xef, 0x2c, 0xa1, 0x94, 0x8d, 0x27, - 0xd6, 0x40, 0x97, 0x36, 0x5e, 0xb3, 0x89, 0xd3, 0x4e, 0xb3, 0x1c, 0x88, - 0xd1, 0x28, 0x93, 0xa4, 0x4a, 0xc1, 0x98, 0x07, 0x9d, 0x31, 0x54, 0xeb, - 0x01, 0x0c, 0x68, 0x5a, 0x95, 0x0b, 0xf5, 0xa2, 0x9c, 0xcb, 0x8f, 0xa2, - 0x25, 0x3e, 0xf9, 0xd4, 0x44, 0x6f, 0x56, 0xb9, 0x95, 0x1e, 0xf1, 0xe4, - 0xb8, 0xdf, 0x0f, 0xf3, 0x86, 0xc3, 0x33, 0xbd, 0x14, 0x58, 0xf6, 0x84, - 0x68, 0x87, 0x27, 0x1a, 0x26, 0x29, 0x9d, 0x78, 0x99, 0x6d, 0x25, 0xf6, - 0xa4, 0x8c, 0xe6, 0x84, 0xae, 0x66, 0x1b, 0x93, 0xcb, 0xfc, 0x87, 0xb7, - 0x3f, 0x01, 0xbc, 0xd6, 0xd0, 0x74, 0xfd, 0x03, 0xb6, 0xf7, 0x15, 0xba, - 0x67, 0xe5, 0x4f, 0x2f, 0x84, 0x00, 0x44, 0x2a, 0xad, 0x76, 0x29, 0xe7, - 0x76, 0x29, 0xe7, 0x16, 0x1a, 0xb3, 0xc0, 0x38, 0x62, 0x7a, 0x0e, 0xd3, - 0xb5, 0x31, 0xb0, 0xf3, 0x16, 0x73, 0xb8, 0xbd, 0xa6, 0x5e, 0x5c, 0x71, - 0xd1, 0x77, 0x4c, 0x38, 0x02, 0x5d, 0xbb, 0x73, 0xa5, 0x18, 0x45, 0x62, - 0x97, 0x56, 0xa8, 0xd4, 0x5f, 0x30, 0xdf, 0x07, 0xde, 0xf6, 0x33, 0x92, - 0x3d, 0x73, 0xa2, 0xc7, 0x07, 0xab, 0x38, 0xdb, 0x3a, 0x12, 0x9a, 0x61, - 0x0a, 0x56, 0xb3, 0x75, 0xd6, 0xab, 0x4b, 0x0e, 0x15, 0xf3, 0x8e, 0xa0, - 0xd9, 0x3f, 0xae, 0x70, 0x09, 0xb7, 0x04, 0xcf, 0xdb, 0x9c, 0x50, 0x9a, - 0xb5, 0x9f, 0x93, 0x5d, 0x22, 0xeb, 0xdf, 0xdc, 0x25, 0x5e, 0xf1, 0x9c, - 0x43, 0x8e, 0x49, 0x89, 0xbe, 0xed, 0x19, 0x22, 0x4c, 0x8a, 0x23, 0xdc, - 0x9a, 0x75, 0xd8, 0x77, 0x6a, 0x9b, 0xa4, 0x1b, 0x4c, 0x56, 0xa4, 0x87, - 0xa6, 0x6b, 0x50, 0x20, 0x29, 0xed, 0xe8, 0x84, 0x30, 0xd5, 0x13, 0x82, - 0x7e, 0x9d, 0xa6, 0xc6, 0x4f, 0x12, 0xa3, 0x02, 0xcc, 0x0a, 0xfa, 0xf2, - 0x31, 0x49, 0x5b, 0x74, 0xbc, 0xf9, 0xa5, 0xd1, 0x4e, 0xfa, 0x34, 0xdc, - 0xf2, 0xb3, 0xfb, 0x35, 0x98, 0xed, 0x6c, 0xe9, 0xce, 0x91, 0x32, 0x1f, - 0xc3, 0x3e, 0xb1, 0xb4, 0xbd, 0xaa, 0xb2, 0x22, 0x8b, 0x0f, 0xec, 0xff, - 0x90, 0x74, 0xe2, 0xbd, 0x14, 0x6e, 0x61, 0x92, 0x66, 0xf7, 0xbb, 0x09, - 0x14, 0x98, 0x91, 0x47, 0x89, 0xec, 0x8c, 0x26, 0xa7, 0xc4, 0x22, 0x8f, - 0x11, 0x73, 0x2c, 0x35, 0x44, 0xb4, 0xf6, 0x21, 0x6e, 0x44, 0x03, 0x4f, - 0x17, 0x32, 0x0a, 0x82, 0xde, 0x24, 0x45, 0x4f, 0x4f, 0xbe, 0x45, 0xc8, - 0x36, 0x65, 0xac, 0x91, 0xd2, 0x75, 0x82, 0xbc, 0x37, 0xb7, 0xff, 0xdd, - 0x8e, 0xbf, 0x38, 0xfc, 0x09, 0xa3, 0x4b, 0x6a, 0x4c, 0x59, 0x92, 0x0c, - 0xa0, 0x50, 0xcd, 0x7f, 0x9a, 0xa8, 0xee, 0x59, 0x32, 0x9a, 0xe4, 0xf7, - 0xe2, 0x65, 0xd3, 0x49, 0x08, 0x78, 0xc6, 0xe8, 0x24, 0xcc, 0xbd, 0x28, - 0x0e, 0xa3, 0xe3, 0xc9, 0x2e, 0x1a, 0x7f, 0xdd, 0x4e, 0xf8, 0x7e, 0xd1, - 0xe5, 0xbb, 0x67, 0x5d, 0xbe, 0x7b, 0xd6, 0xe5, 0xbb, 0x4f, 0xe9, 0x96, - 0xbc, 0xcc, 0x9c, 0x26, 0x4f, 0xa1, 0xe0, 0x13, 0xa7, 0xef, 0x69, 0xac, - 0x45, 0x2a, 0xb9, 0xca, 0xa7, 0x8b, 0xa9, 0x25, 0xd0, 0x33, 0xa5, 0x4a, - 0xab, 0x3e, 0x56, 0x40, 0xf7, 0xb0, 0x0e, 0x08, 0x92, 0x2d, 0xee, 0x80, - 0xc3, 0x30, 0x48, 0x4a, 0x27, 0x2b, 0xa6, 0xdb, 0x79, 0x27, 0xfc, 0x69, - 0x73, 0x65, 0x6a, 0xa8, 0x88, 0x2d, 0x38, 0xa5, 0xfe, 0x98, 0x8b, 0x62, - 0x70, 0xe7, 0xd5, 0x2a, 0x06, 0x6a, 0x40, 0xfc, 0x4d, 0xcf, 0x7d, 0xf7, - 0x2c, 0x8d, 0xd3, 0x94, 0x5e, 0x64, 0xcc, 0xda, 0xff, 0x8d, 0x5a, 0x9a, - 0x63, 0x9a, 0x09, 0x41, 0x61, 0xf8, 0xdd, 0x1e, 0x9e, 0xa6, 0x02, 0x42, - 0x52, 0x98, 0xd4, 0xc0, 0xb2, 0x56, 0xe2, 0x1d, 0x0a, 0x7e, 0xd3, 0x9b, - 0xbb, 0x56, 0xdf, 0x3d, 0xeb, 0xe7, 0x55, 0xe2, 0xe9, 0x3d, 0x2e, 0xa5, - 0xf7, 0x47, 0x88, 0xb4, 0x3b, 0x24, 0x25, 0x6c, 0xc6, 0xfe, 0xfa, 0x7a, - 0xe4, 0x1d, 0x66, 0x34, 0xbd, 0xfd, 0x3c, 0xce, 0x29, 0xaa, 0x09, 0x24, - 0x58, 0xd6, 0xfe, 0xeb, 0xec, 0xaf, 0xaf, 0xa7, 0xfb, 0x4c, 0x82, 0xe2, - 0xc6, 0xec, 0x65, 0x9e, 0xc9, 0x5a, 0x95, 0xb0, 0x54, 0xd9, 0x79, 0xd6, - 0xd2, 0x59, 0x12, 0xcf, 0x50, 0xe6, 0x75, 0x09, 0xb9, 0x7e, 0x7b, 0xbc, - 0xaf, 0x1b, 0x65, 0x6e, 0x1d, 0x6f, 0x3b, 0x5f, 0x0e, 0xb2, 0x3a, 0x8f, - 0xfb, 0xb8, 0xd0, 0x27, 0x1b, 0xcf, 0x4d, 0xc6, 0x45, 0x77, 0xea, 0x5c, - 0xf2, 0x3e, 0x46, 0x09, 0x07, 0x0f, 0x47, 0xa6, 0x89, 0xe7, 0xed, 0x1b, - 0xb0, 0xd6, 0x52, 0x38, 0xd1, 0x0d, 0x6c, 0x05, 0xbb, 0xd4, 0xd4, 0x2f, - 0x21, 0x79, 0x9f, 0x0b, 0x6b, 0x9d, 0xbe, 0xc3, 0xb3, 0xaf, 0x38, 0xd7, - 0x68, 0x3a, 0xdb, 0x50, 0x52, 0xe1, 0x70, 0x93, 0x36, 0x48, 0xdb, 0x4b, - 0xa6, 0x9f, 0x0b, 0x89, 0x24, 0x92, 0x2d, 0x6d, 0x32, 0x2f, 0xaa, 0x34, - 0xa1, 0x02, 0x59, 0xdb, 0x10, 0x24, 0x5d, 0x1d, 0x36, 0x6a, 0xd9, 0xe5, - 0x52, 0x3e, 0xa5, 0x18, 0xaa, 0x9a, 0x9d, 0xd8, 0x03, 0xd2, 0x1a, 0x15, - 0x57, 0x7e, 0x2f, 0x46, 0x8e, 0xe8, 0x90, 0xd7, 0x28, 0xe1, 0x90, 0x6b, - 0x30, 0x69, 0x0b, 0x56, 0x72, 0x4d, 0x20, 0x1a, 0xcb, 0x75, 0x36, 0x6e, - 0x3c, 0xe5, 0x9b, 0x93, 0x02, 0x99, 0xc7, 0x82, 0xe5, 0x6a, 0x25, 0xcb, - 0x41, 0x53, 0xae, 0x20, 0xfe, 0x7c, 0x61, 0x66, 0xeb, 0x89, 0x1f, 0xce, - 0x9c, 0x1f, 0x52, 0x6f, 0xa0, 0x79, 0x79, 0xf5, 0x67, 0x35, 0x45, 0x7a, - 0x06, 0x9e, 0x63, 0x00, 0xc6, 0x96, 0xdb, 0x90, 0x49, 0x4a, 0x3e, 0x76, - 0xe3, 0x94, 0x58, 0x7e, 0xa1, 0x10, 0x32, 0x3d, 0xca, 0xad, 0x34, 0xc3, - 0x5e, 0x44, 0xb2, 0x7c, 0x06, 0x9a, 0xdf, 0x05, 0xc6, 0x24, 0x72, 0xf6, - 0x49, 0x3d, 0xcd, 0x56, 0x73, 0x23, 0x15, 0x43, 0x31, 0x56, 0x11, 0xd9, - 0x4c, 0x8c, 0xb1, 0xc8, 0x5a, 0x36, 0x12, 0x83, 0xb5, 0xe2, 0x7e, 0xd1, - 0xa4, 0x0a, 0x97, 0x23, 0xa9, 0x62, 0x71, 0x1e, 0x51, 0xa0, 0xb2, 0xca, - 0x51, 0xfa, 0x14, 0xf6, 0x29, 0xf7, 0x78, 0x09, 0xb6, 0x8f, 0x69, 0x44, - 0x68, 0x6e, 0x43, 0x78, 0xa7, 0x89, 0xaf, 0x08, 0xe7, 0x36, 0x80, 0x81, - 0x3d, 0x1b, 0xad, 0xf8, 0x28, 0xd4, 0x4a, 0x7c, 0x0b, 0x30, 0xf3, 0x4e, - 0xed, 0x3b, 0x4f, 0xc4, 0xc1, 0xf2, 0xec, 0x64, 0xc2, 0xd1, 0x72, 0xa0, - 0x88, 0xf4, 0x0e, 0x1b, 0x4a, 0x5c, 0xf2, 0x9e, 0xee, 0x1e, 0x1f, 0xa0, - 0x77, 0xde, 0x59, 0x20, 0x3d, 0xa6, 0x04, 0xc7, 0xc0, 0x25, 0xa5, 0xbb, - 0x1f, 0x29, 0xdd, 0xbd, 0x5d, 0xbc, 0x22, 0x5f, 0xef, 0x92, 0xc7, 0x94, - 0x24, 0x97, 0x0c, 0xf2, 0x95, 0xc9, 0x1c, 0xf5, 0xf6, 0x47, 0xb1, 0xcf, - 0x9e, 0x35, 0xfb, 0xec, 0xaf, 0x29, 0x5d, 0xa2, 0xeb, 0x2c, 0xb6, 0xcc, - 0xf6, 0xd7, 0x47, 0x77, 0x44, 0x80, 0x3c, 0xfc, 0xa7, 0xbd, 0x16, 0x0f, - 0x40, 0xac, 0x71, 0xdd, 0xbe, 0x95, 0xdf, 0xa8, 0xe6, 0x19, 0x89, 0xb9, - 0x6d, 0xbe, 0xd8, 0xdc, 0x79, 0x27, 0x32, 0x46, 0xef, 0x0a, 0x6d, 0x98, - 0x86, 0x5b, 0x9a, 0xe1, 0xd5, 0x10, 0x94, 0xde, 0x2f, 0x27, 0xf6, 0x7b, - 0x52, 0xb2, 0xce, 0x4b, 0x99, 0x0a, 0xbc, 0x0c, 0x2b, 0xf6, 0xcd, 0xd5, - 0x5b, 0xc5, 0x28, 0xa1, 0xa0, 0x2a, 0x7d, 0xbc, 0xce, 0xcb, 0x1d, 0xa7, - 0xfd, 0x4c, 0xcd, 0xf1, 0xf4, 0xdd, 0xc9, 0xfd, 0x72, 0x5b, 0x6c, 0xbf, - 0xdc, 0x15, 0xdb, 0x4f, 0x79, 0x99, 0x73, 0x4b, 0x6b, 0x85, 0xdd, 0x84, - 0x20, 0x68, 0xdd, 0xc3, 0x1d, 0xed, 0x55, 0x8f, 0xe1, 0x4e, 0xb3, 0xa2, - 0xeb, 0x85, 0x4c, 0xca, 0xa6, 0x7d, 0xac, 0x9a, 0xbd, 0xce, 0xf6, 0x74, - 0xb2, 0x0a, 0x2a, 0x55, 0x01, 0x54, 0xe2, 0xf8, 0xdb, 0xa9, 0xe4, 0x90, - 0x74, 0x0e, 0x25, 0x8b, 0x47, 0x7c, 0x22, 0x0e, 0x8a, 0x58, 0x5a, 0x22, - 0x21, 0x46, 0x79, 0x0c, 0xb3, 0xe7, 0x60, 0x4e, 0x42, 0xa3, 0x60, 0x56, - 0x3a, 0x07, 0xee, 0x98, 0x3f, 0x53, 0x94, 0x28, 0x85, 0x8e, 0x7b, 0xb7, - 0x49, 0xd7, 0x53, 0x8f, 0xc1, 0x52, 0x83, 0xcc, 0xaf, 0x61, 0x28, 0xb6, - 0x89, 0xd9, 0x1d, 0xf8, 0x6e, 0xfb, 0x0b, 0x58, 0x92, 0x85, 0x07, 0x3a, - 0xec, 0x3d, 0x41, 0x7b, 0x4d, 0x90, 0x5f, 0x7f, 0xcb, 0x56, 0x0e, 0x9f, - 0xe5, 0x1f, 0x22, 0xec, 0x68, 0x6f, 0xf6, 0x76, 0x67, 0x53, 0xae, 0x00, - 0x3d, 0x14, 0x63, 0xc2, 0x01, 0xd7, 0x71, 0xb0, 0xfd, 0x59, 0x2e, 0x9c, - 0x34, 0x0d, 0x88, 0x34, 0x9d, 0x73, 0x10, 0xef, 0x11, 0x46, 0x7e, 0xdd, - 0x2f, 0xd9, 0x8b, 0x0d, 0xa6, 0x79, 0xee, 0xfc, 0xb7, 0x72, 0xff, 0xdd, - 0x03, 0x60, 0x7b, 0x59, 0xf6, 0xc5, 0x84, 0x1c, 0x2d, 0x7b, 0x1d, 0x29, - 0x6e, 0x89, 0x64, 0xa9, 0xe4, 0xc8, 0x0a, 0xeb, 0xee, 0x02, 0x5b, 0x47, - 0x6f, 0x21, 0x5b, 0xe0, 0xb2, 0xb9, 0x2c, 0x11, 0x24, 0xa9, 0xfe, 0xcb, - 0x34, 0xcf, 0x97, 0x45, 0x88, 0xb2, 0x39, 0xb0, 0x85, 0xba, 0x6c, 0x96, - 0x1d, 0x58, 0x02, 0x8c, 0xee, 0x15, 0xcb, 0x81, 0x4e, 0xfa, 0x08, 0x19, - 0xc8, 0x85, 0x7b, 0x85, 0xc6, 0x98, 0xa3, 0x3c, 0xc7, 0xaa, 0xee, 0x13, - 0xdb, 0x50, 0x97, 0x7b, 0x2a, 0x20, 0x35, 0x25, 0x68, 0x4b, 0x85, 0x83, - 0xbb, 0xc5, 0x9e, 0x70, 0x52, 0x18, 0x75, 0x4c, 0xcf, 0xd4, 0x67, 0x94, - 0x58, 0xb8, 0x74, 0x82, 0x71, 0x50, 0x13, 0x69, 0x14, 0x82, 0x58, 0xb7, - 0xbb, 0xf8, 0x45, 0x5e, 0x8b, 0x59, 0x3f, 0x3a, 0xa6, 0x98, 0xba, 0x1f, - 0x59, 0xad, 0xe8, 0x11, 0xf3, 0xe9, 0x63, 0x8a, 0xb1, 0xec, 0x98, 0xd6, - 0x21, 0xbf, 0x00, 0x5a, 0xea, 0x14, 0xf0, 0xba, 0x1c, 0x3d, 0xd2, 0x0c, - 0x8a, 0xf8, 0x1e, 0xd1, 0x4a, 0x3c, 0x88, 0xc4, 0x9a, 0x9f, 0x32, 0x7f, - 0xf4, 0x7a, 0x5c, 0x9e, 0xe6, 0x05, 0xbc, 0x1e, 0x67, 0xb8, 0x9e, 0x7f, - 0x1e, 0x7a, 0x7a, 0xd9, 0x5d, 0xcc, 0x9d, 0x51, 0x55, 0x9f, 0x7e, 0xd2, - 0x8e, 0x3c, 0x41, 0x3d, 0x74, 0x67, 0xdb, 0x1e, 0x9a, 0xf7, 0xb9, 0x3b, - 0x6b, 0xfe, 0x8e, 0x9b, 0x3f, 0xe4, 0x7f, 0x67, 0xa8, 0x15, 0x48, 0xf6, - 0xf6, 0xae, 0xc6, 0xf6, 0x0e, 0x51, 0x8b, 0x38, 0x79, 0x3b, 0x8d, 0xb3, - 0x12, 0xc3, 0x16, 0xd0, 0x55, 0xd4, 0x1c, 0x71, 0xd9, 0xf4, 0xf0, 0xdd, - 0x38, 0x4a, 0x43, 0xc5, 0x87, 0x9e, 0xd4, 0x60, 0x8b, 0x7c, 0xa7, 0xa5, - 0xe8, 0x31, 0xfd, 0xe0, 0x4e, 0x82, 0x3d, 0xf8, 0xc7, 0x4a, 0xeb, 0xe5, - 0x1a, 0x59, 0x3a, 0x6c, 0xa1, 0x6c, 0x09, 0x2a, 0xa8, 0x7c, 0x40, 0x79, - 0x15, 0x17, 0x49, 0x39, 0x7a, 0x5f, 0x4f, 0x1e, 0x59, 0x6b, 0xb3, 0x30, - 0xf3, 0x2a, 0xb7, 0x62, 0x36, 0xaf, 0x7b, 0x45, 0xc7, 0x0e, 0x1c, 0xe6, - 0x92, 0xa6, 0xd6, 0x90, 0x36, 0x28, 0x2c, 0x36, 0xed, 0x51, 0x58, 0x7d, - 0x62, 0x81, 0xf4, 0x70, 0x01, 0x68, 0xa7, 0x91, 0x08, 0x6e, 0x6d, 0x58, - 0x61, 0x94, 0x24, 0x4b, 0x8f, 0xf3, 0x54, 0xeb, 0x43, 0x85, 0x5a, 0x54, - 0xa7, 0x84, 0x3d, 0x7a, 0x2c, 0xca, 0x8f, 0xfc, 0x06, 0x5f, 0x30, 0xec, - 0xa2, 0x79, 0xfb, 0x8a, 0xda, 0xfd, 0x4a, 0x5a, 0x9c, 0x8f, 0x2f, 0x57, - 0x63, 0xd1, 0x61, 0x94, 0x8b, 0xe8, 0xb1, 0xb0, 0x5c, 0xcc, 0xc3, 0x7b, - 0xea, 0xc3, 0x9d, 0x17, 0xd4, 0x5c, 0x36, 0xfb, 0xed, 0xab, 0xfa, 0x8f, - 0x63, 0xf3, 0x5f, 0xaa, 0x17, 0x5c, 0xbd, 0xc9, 0x55, 0x22, 0x02, 0x77, - 0x8c, 0x6b, 0x4c, 0xc4, 0x73, 0xa0, 0x68, 0xe9, 0x9d, 0x7a, 0xee, 0xa1, - 0xae, 0x29, 0xed, 0x38, 0x1e, 0x26, 0xd0, 0x0b, 0xf3, 0x8c, 0xa1, 0x2d, - 0x0a, 0x6c, 0x74, 0xe0, 0x9b, 0x11, 0xca, 0xfc, 0xeb, 0xd3, 0xe7, 0x56, - 0xfe, 0xf0, 0x98, 0xac, 0xc7, 0x54, 0x9d, 0x67, 0xbf, 0x91, 0x8d, 0x2d, - 0x1b, 0x7e, 0x3f, 0x6a, 0xfe, 0x0e, 0x6e, 0xa9, 0x97, 0x50, 0x40, 0x48, - 0x9f, 0xb0, 0x45, 0x33, 0xec, 0xf0, 0x2b, 0xe3, 0x14, 0xc6, 0xfb, 0xd1, - 0x16, 0x97, 0x97, 0xb0, 0x48, 0x08, 0x67, 0x16, 0x88, 0x8d, 0x1d, 0x46, - 0x73, 0xc8, 0xf4, 0x81, 0x16, 0x7a, 0x4f, 0x38, 0xc5, 0xf3, 0x4c, 0x62, - 0xe8, 0x8e, 0x61, 0x19, 0x74, 0x8f, 0xa7, 0xe5, 0x36, 0xa5, 0xd4, 0x5a, - 0xf0, 0xf6, 0x9a, 0x3c, 0xa0, 0x5b, 0x74, 0x50, 0x68, 0xee, 0xbd, 0x25, - 0x39, 0x88, 0x6c, 0xd9, 0x24, 0x1f, 0x48, 0x2f, 0x3b, 0x01, 0x6a, 0xb2, - 0xc5, 0x53, 0x2d, 0x7e, 0x53, 0x56, 0xb0, 0x67, 0xb9, 0xec, 0xae, 0x90, - 0x43, 0x89, 0x7b, 0xc1, 0xc4, 0xa4, 0xab, 0x1a, 0x38, 0xb6, 0x50, 0x8e, - 0x0f, 0xd3, 0x2e, 0x2d, 0xf2, 0x20, 0x93, 0x4b, 0xf5, 0x89, 0xeb, 0xb5, - 0x98, 0xef, 0xd9, 0x40, 0x13, 0xa1, 0xf3, 0x3a, 0xe7, 0x48, 0x7a, 0x78, - 0x3b, 0x5e, 0xb6, 0xe4, 0x01, 0x4b, 0x63, 0x63, 0xc6, 0x5e, 0x53, 0x9d, - 0xff, 0xea, 0x31, 0x44, 0xc7, 0x91, 0x29, 0xd7, 0xe1, 0x70, 0xe8, 0xcc, - 0x58, 0x0b, 0x17, 0xec, 0xc8, 0x5e, 0xa9, 0xbd, 0xc5, 0xac, 0x19, 0xf0, - 0xcc, 0xd9, 0x6c, 0x2e, 0x4b, 0x72, 0xe0, 0x6e, 0xad, 0xd6, 0x29, 0xc6, - 0xe3, 0xda, 0x3e, 0x9b, 0xe5, 0x45, 0xa9, 0xa5, 0xee, 0xd4, 0xd2, 0xf7, - 0x5d, 0x78, 0x3c, 0xf4, 0xcb, 0x81, 0xa6, 0xcb, 0x81, 0xc6, 0x1f, 0xa9, - 0xc3, 0x8e, 0xbd, 0xce, 0x75, 0x14, 0x6a, 0x35, 0x12, 0xad, 0x6e, 0x8c, - 0xa6, 0xe3, 0x4d, 0x7f, 0x63, 0xf4, 0xa6, 0x12, 0xb7, 0xa7, 0x65, 0x49, - 0x89, 0xc5, 0xe5, 0x86, 0xb0, 0x35, 0xde, 0xd6, 0xa7, 0x1d, 0xa1, 0xf8, - 0x80, 0xb7, 0xd1, 0x9b, 0x7b, 0x95, 0xb8, 0xec, 0x03, 0xe6, 0x7d, 0x08, - 0x7a, 0xfe, 0x6c, 0xff, 0x1f, 0xc4, 0xcb, 0x62, 0x77, 0x21, 0x0f, 0x91, - 0x9d, 0xf5, 0x09, 0x97, 0x32, 0x0b, 0xd7, 0x57, 0x1a, 0x09, 0x7a, 0x6b, - 0xf9, 0x44, 0x67, 0x6c, 0x6e, 0xfb, 0x4f, 0xa1, 0x26, 0x74, 0xde, 0x2e, - 0xc6, 0x6d, 0x3b, 0xff, 0x37, 0x66, 0x20, 0x67, 0x16, 0x2e, 0x06, 0x3b, - 0x63, 0x46, 0x83, 0x1d, 0x11, 0xd7, 0x59, 0xd4, 0x19, 0xb5, 0x70, 0x8f, - 0x89, 0x94, 0x08, 0xb9, 0xa4, 0x85, 0x28, 0x68, 0xda, 0xf9, 0x30, 0xea, - 0xcf, 0x50, 0x53, 0x9a, 0x7f, 0xa8, 0x95, 0xd4, 0x79, 0xe3, 0xc1, 0x75, - 0xa2, 0x7d, 0xa4, 0xb4, 0x66, 0x29, 0x2c, 0x79, 0xb9, 0x3c, 0x12, 0x18, - 0xb6, 0x46, 0x8a, 0x67, 0x57, 0xe8, 0xfb, 0x2f, 0x9f, 0x9c, 0x86, 0xf1, - 0x5b, 0xa7, 0x31, 0x6d, 0xcc, 0x2e, 0xf1, 0x70, 0x71, 0xf2, 0x34, 0x6c, - 0xe5, 0x0f, 0x18, 0x28, 0xed, 0xa1, 0x76, 0x0a, 0x89, 0xa6, 0x55, 0x71, - 0x92, 0x5a, 0x3a, 0xce, 0x3b, 0x66, 0xc7, 0xaa, 0x33, 0x49, 0x59, 0x7a, - 0xfc, 0x3d, 0xed, 0xc2, 0x77, 0x96, 0xa6, 0x80, 0xe7, 0x78, 0x78, 0x09, - 0x3c, 0x92, 0x38, 0xc2, 0x71, 0x3e, 0xb3, 0x91, 0x1d, 0xa3, 0x96, 0x04, - 0xac, 0x47, 0x79, 0x13, 0x98, 0xb7, 0x57, 0x62, 0xdb, 0x45, 0xc5, 0x46, - 0xe2, 0xf6, 0xe2, 0xdb, 0xc5, 0xb4, 0x03, 0x78, 0xda, 0xbb, 0x53, 0x9a, - 0x3d, 0x0f, 0x2b, 0xd6, 0x24, 0x92, 0xac, 0x24, 0x17, 0xf1, 0x96, 0xa5, - 0x4f, 0x40, 0x63, 0x37, 0xcf, 0x58, 0xf2, 0x4c, 0x97, 0xd1, 0x8e, 0x74, - 0x9f, 0x8a, 0x1b, 0x48, 0xf9, 0x23, 0x7d, 0x1e, 0x59, 0x98, 0xd0, 0xa8, - 0x45, 0x3c, 0x36, 0x57, 0x65, 0x2a, 0x24, 0x1e, 0x71, 0x1d, 0x66, 0x85, - 0x7a, 0xc8, 0x3c, 0xea, 0x7e, 0x87, 0xfe, 0xf2, 0xe3, 0xbb, 0x2c, 0xb6, - 0xab, 0x01, 0x83, 0x8a, 0x97, 0xfb, 0x9a, 0xea, 0xe0, 0x9f, 0xc7, 0xcf, - 0x72, 0x73, 0x79, 0x4f, 0x27, 0x16, 0x74, 0x71, 0x69, 0x5b, 0xc3, 0xee, - 0x83, 0x73, 0xcc, 0x29, 0xe2, 0xf1, 0x58, 0x33, 0x25, 0x4a, 0xcd, 0xd2, - 0xf7, 0x4c, 0xac, 0x66, 0x3b, 0x6d, 0xa1, 0x2b, 0xe7, 0xf8, 0xac, 0xf7, - 0xd7, 0xee, 0xc5, 0xaf, 0xec, 0xea, 0x17, 0x4f, 0x15, 0xee, 0x29, 0xf1, - 0xb6, 0x9c, 0x75, 0x97, 0xcf, 0x45, 0xf3, 0x76, 0xa7, 0x26, 0x13, 0xa9, - 0xd0, 0xd3, 0xa8, 0xeb, 0x67, 0x89, 0x24, 0x5c, 0xf0, 0xdc, 0xb0, 0x87, - 0x6b, 0x7e, 0x2f, 0xdb, 0x49, 0xf8, 0x41, 0xff, 0xd3, 0xaf, 0x3f, 0xf9, - 0xf2, 0xdc, 0xac, 0xf2, 0x1b, 0x34, 0xbd, 0x4e, 0xcb, 0x2f, 0xd3, 0x87, - 0x89, 0x54, 0x0c, 0xc6, 0xc4, 0xb7, 0x37, 0x64, 0x9b, 0x7d, 0x08, 0xd4, - 0xb7, 0xcc, 0xd9, 0x68, 0xb1, 0xcb, 0xd7, 0x28, 0xcd, 0x62, 0x41, 0xe6, - 0x2f, 0x6f, 0x94, 0x7a, 0x49, 0x0e, 0xe7, 0x51, 0xde, 0x97, 0x94, 0x94, - 0x60, 0xd6, 0x2e, 0x3b, 0xd6, 0xbc, 0x12, 0x49, 0x65, 0x36, 0xd8, 0x2d, - 0x89, 0xa3, 0x61, 0xa5, 0xf6, 0xac, 0x3d, 0x1d, 0x14, 0x77, 0xb6, 0x9b, - 0x7b, 0xff, 0xe6, 0xa6, 0x89, 0x28, 0xf9, 0x62, 0xf3, 0x21, 0x67, 0xbf, - 0x91, 0xe8, 0x4f, 0x82, 0x61, 0x81, 0xc4, 0x89, 0x26, 0x93, 0xb5, 0xfb, - 0xb4, 0x24, 0x76, 0xd5, 0xa6, 0x7b, 0x28, 0x43, 0x27, 0x89, 0x73, 0xf8, - 0x44, 0xcd, 0x7f, 0x9e, 0x92, 0xbc, 0x5a, 0xa2, 0xe1, 0xff, 0x37, 0x7c, - 0x9c, 0xda, 0x93, 0x79, 0xe3, 0x06, 0x8b, 0x0b, 0x87, 0xce, 0x2c, 0x57, - 0xb3, 0xb9, 0x2f, 0xe9, 0xd2, 0x85, 0xb2, 0x18, 0xdc, 0xd4, 0xa1, 0x25, - 0x5f, 0x2d, 0x46, 0xb1, 0xf1, 0x3d, 0x27, 0x2c, 0xa3, 0x9f, 0x10, 0xef, - 0x6f, 0xfd, 0x7b, 0x13, 0x89, 0x63, 0x7a, 0x9e, 0x98, 0x49, 0x78, 0xb5, - 0xac, 0xf4, 0x15, 0xaa, 0x8d, 0x6d, 0xec, 0xbe, 0x5a, 0xe6, 0xcb, 0x96, - 0xc0, 0xff, 0x68, 0x3c, 0xa6, 0x41, 0xbe, 0x50, 0x74, 0x03, 0x9a, 0xcc, - 0xba, 0x40, 0x16, 0x24, 0x12, 0xc1, 0x24, 0x30, 0x06, 0xeb, 0x24, 0x27, - 0x92, 0x4c, 0x89, 0x13, 0xda, 0xdb, 0xbd, 0x26, 0x97, 0xc2, 0x30, 0xec, - 0x3e, 0x3e, 0x8c, 0x5e, 0x2f, 0x0c, 0xe4, 0x6b, 0xc3, 0x1d, 0x27, 0x43, - 0x98, 0xc1, 0x3c, 0x64, 0x6a, 0x0f, 0xaf, 0x6b, 0xed, 0x76, 0xba, 0x4f, - 0x29, 0x62, 0xd2, 0x03, 0x07, 0x1a, 0x02, 0xaf, 0xc1, 0xdc, 0xb7, 0x37, - 0x1b, 0x17, 0xc6, 0x4d, 0x34, 0xfc, 0x97, 0x04, 0x6b, 0x92, 0x1b, 0xed, - 0xad, 0xc9, 0x17, 0xcd, 0xed, 0x55, 0x21, 0x7d, 0xa0, 0xee, 0xbb, 0xeb, - 0x6a, 0x20, 0x0e, 0x13, 0x19, 0xcd, 0x6c, 0x73, 0x66, 0xeb, 0x59, 0x7d, - 0x6e, 0x79, 0xf3, 0xd6, 0x52, 0x7c, 0x08, 0xc0, 0x05, 0xd6, 0x24, 0xf4, - 0xd4, 0xf9, 0xec, 0x3e, 0x3e, 0xae, 0xd4, 0x39, 0xb5, 0x49, 0x12, 0x99, - 0xb5, 0x08, 0xb6, 0xa4, 0x84, 0x58, 0x13, 0xb0, 0x6d, 0x34, 0x1f, 0xd4, - 0xfa, 0xb4, 0xf5, 0x2a, 0x96, 0x0b, 0xdd, 0xd5, 0xb6, 0xf2, 0x68, 0xd8, - 0xf4, 0x2d, 0xb1, 0x09, 0x46, 0x6d, 0x2b, 0x04, 0xf9, 0xc0, 0xe2, 0xa2, - 0xe0, 0xba, 0x85, 0x51, 0x56, 0xd1, 0x5f, 0xed, 0x9f, 0xe6, 0x44, 0xa3, - 0x41, 0xb8, 0x9b, 0x36, 0xb4, 0xdd, 0xae, 0x12, 0x08, 0xf2, 0x98, 0x7e, - 0x96, 0x9f, 0xce, 0x84, 0x08, 0x93, 0x73, 0x73, 0xc1, 0x55, 0x1c, 0x83, - 0xe6, 0x09, 0x9f, 0x71, 0xff, 0x64, 0xd3, 0x21, 0x4d, 0x73, 0x8c, 0xa7, - 0x61, 0x95, 0x2e, 0x21, 0xb0, 0x4f, 0x9e, 0x8f, 0x8a, 0xe9, 0x60, 0xfb, - 0x50, 0x42, 0x2e, 0xef, 0x9a, 0x36, 0xc7, 0xc8, 0x78, 0x58, 0x3b, 0x5f, - 0x68, 0xc9, 0x4f, 0x97, 0xeb, 0x2a, 0x41, 0xd3, 0x64, 0x48, 0x1d, 0x8e, - 0xbf, 0x3c, 0xb2, 0xf6, 0x9e, 0xe6, 0x0b, 0xb9, 0xb0, 0x3d, 0x45, 0xbc, - 0xec, 0xb1, 0xd2, 0x66, 0xca, 0x85, 0x58, 0xc1, 0x96, 0x9b, 0x65, 0x95, - 0x26, 0xfc, 0xad, 0x72, 0xca, 0x13, 0xa3, 0xb9, 0xdf, 0xd4, 0xbb, 0x38, - 0x78, 0x84, 0xb7, 0x97, 0xa0, 0x0f, 0xab, 0x49, 0x44, 0x1d, 0xb7, 0x24, - 0x6f, 0x91, 0xbd, 0xd3, 0x36, 0xb7, 0x5a, 0x52, 0x1a, 0x46, 0x59, 0x33, - 0x5f, 0xbd, 0x1b, 0xb3, 0xba, 0x3d, 0xe3, 0xcb, 0x9a, 0xd4, 0x18, 0x36, - 0x18, 0xf8, 0x8e, 0x86, 0x7b, 0x5a, 0x1b, 0xa1, 0xb0, 0xbf, 0x0d, 0xcd, - 0x46, 0xd4, 0x2b, 0x0d, 0x7e, 0x9f, 0xfe, 0x49, 0xf0, 0xfe, 0x19, 0xcb, - 0xc6, 0x0e, 0xb3, 0x68, 0x74, 0xa2, 0xe6, 0xbf, 0xc7, 0x27, 0x57, 0x71, - 0xf6, 0xd1, 0xec, 0x9c, 0xb7, 0x42, 0xe3, 0x29, 0x52, 0x8e, 0xca, 0xcc, - 0x6f, 0xbe, 0x7b, 0x3f, 0x3f, 0x17, 0x18, 0xdb, 0xd6, 0x14, 0xce, 0xfe, - 0x21, 0x28, 0x36, 0xd1, 0x81, 0xa6, 0xcf, 0x5d, 0x16, 0xe0, 0x5a, 0x5f, - 0xe1, 0xa2, 0xa5, 0xa6, 0x0e, 0xb5, 0x8e, 0xca, 0x4e, 0xdb, 0xc9, 0x13, - 0xdc, 0xa6, 0x84, 0x23, 0x4e, 0xda, 0xfd, 0x38, 0x57, 0x5f, 0x90, 0x02, - 0xaa, 0x6d, 0xf8, 0x13, 0xb7, 0x03, 0x15, 0xfc, 0xef, 0xd4, 0x44, 0xe2, - 0x2c, 0x15, 0x78, 0xba, 0x10, 0x4b, 0x20, 0x1e, 0x52, 0xd8, 0x08, 0xe5, - 0xad, 0xb6, 0x1d, 0x86, 0x83, 0x08, 0x6d, 0x11, 0x73, 0xba, 0x21, 0xa6, - 0xb0, 0x66, 0x71, 0x86, 0xe0, 0x95, 0x9f, 0x9d, 0x9d, 0x47, 0xec, 0x69, - 0x00, 0xdb, 0x77, 0xfa, 0x6c, 0x7e, 0xed, 0x0a, 0x6a, 0x89, 0xd3, 0x80, - 0x45, 0xaa, 0xd3, 0xbc, 0xf7, 0x60, 0x1b, 0x93, 0x1d, 0x89, 0xea, 0x45, - 0x89, 0xde, 0xa9, 0xb5, 0x9b, 0xf7, 0xe0, 0x17, 0x08, 0xdf, 0xa1, 0xee, - 0xb9, 0x2f, 0xf7, 0x8a, 0x26, 0x31, 0x7b, 0x83, 0xeb, 0xd8, 0x55, 0x1d, - 0x01, 0xdb, 0x43, 0xd2, 0x7c, 0x8a, 0x66, 0x52, 0x3c, 0x78, 0x88, 0x4e, - 0x10, 0x5b, 0xd2, 0x76, 0xf2, 0xf5, 0x0e, 0x35, 0x23, 0xef, 0x21, 0x6e, - 0x9c, 0x0b, 0xd6, 0x0d, 0x25, 0x25, 0x1a, 0x6a, 0x7a, 0x26, 0x5d, 0x5c, - 0x64, 0x8e, 0x5f, 0x5c, 0x6a, 0x09, 0xb6, 0xf7, 0x49, 0x16, 0x16, 0xde, - 0x90, 0x9d, 0x99, 0xdc, 0xdd, 0x0d, 0xbe, 0xbe, 0xfd, 0x3a, 0x33, 0x65, - 0xa6, 0xe7, 0x94, 0x7a, 0xd2, 0xbf, 0xdb, 0xc9, 0xcd, 0xe2, 0x02, 0x79, - 0x01, 0x4f, 0x7b, 0xda, 0xa8, 0x7b, 0x67, 0x0d, 0x71, 0x6f, 0xce, 0x44, - 0x22, 0xfe, 0x1a, 0x9b, 0x73, 0xbc, 0x66, 0x73, 0xdb, 0x3d, 0x41, 0x92, - 0x66, 0xb1, 0xfc, 0x63, 0xfc, 0xee, 0xf3, 0xf5, 0x14, 0xc7, 0xc7, 0x8a, - 0xf7, 0xf4, 0x33, 0xf8, 0xd1, 0x40, 0xd8, 0x6e, 0x7a, 0x17, 0xa4, 0x52, - 0x2e, 0x44, 0x23, 0x90, 0x68, 0x8b, 0x7f, 0xf7, 0xe4, 0xa3, 0xd8, 0xcb, - 0xd3, 0x37, 0xbf, 0xdf, 0x68, 0x20, 0x91, 0x63, 0x2a, 0x2b, 0x8c, 0xb4, - 0x93, 0x7b, 0x53, 0x7d, 0x41, 0xef, 0x12, 0x0a, 0xb2, 0x88, 0xbd, 0xe8, - 0xca, 0x1e, 0x6d, 0xaa, 0xec, 0x9e, 0xa5, 0xf8, 0xca, 0x76, 0xec, 0xa2, - 0x92, 0x6f, 0xda, 0x67, 0xb5, 0xd0, 0x87, 0x6a, 0xd0, 0x79, 0xd3, 0x94, - 0xaa, 0x06, 0xf6, 0x3d, 0x90, 0x2c, 0x40, 0x7b, 0x91, 0x9e, 0x05, 0x89, - 0xd7, 0xb5, 0x23, 0x16, 0x41, 0x5e, 0x59, 0xa6, 0x29, 0x86, 0x20, 0xb9, - 0x86, 0xa9, 0x39, 0x12, 0x5b, 0x3f, 0x76, 0x72, 0x91, 0x74, 0x7b, 0xf7, - 0x71, 0x3e, 0xee, 0x4d, 0xa6, 0xe3, 0x7e, 0xb7, 0x03, 0x45, 0xa0, 0x91, - 0x6b, 0xd6, 0xb7, 0xf0, 0x56, 0x8b, 0xe5, 0xf8, 0x8d, 0x58, 0x5e, 0xf2, - 0x2c, 0xbb, 0x70, 0x65, 0x0f, 0xce, 0xc1, 0x72, 0x97, 0xae, 0xf3, 0xdd, - 0xae, 0x05, 0xbf, 0x79, 0x0b, 0x26, 0x9e, 0xe1, 0x9b, 0xdf, 0x80, 0x3e, - 0x93, 0x7d, 0xfb, 0xb1, 0xff, 0xfb, 0x64, 0x5c, 0x4b, 0xe9, 0x9c, 0x75, - 0x53, 0x87, 0x88, 0xad, 0xec, 0xbb, 0x2f, 0xc4, 0x34, 0xf0, 0xf7, 0x40, - 0x33, 0x53, 0x96, 0x0d, 0xa5, 0x12, 0xf5, 0x7b, 0x88, 0xc5, 0xd5, 0xf7, - 0xe0, 0x0d, 0xf3, 0x1b, 0x17, 0x38, 0x9b, 0x8d, 0x75, 0xdf, 0x43, 0xdc, - 0x79, 0xfb, 0x1e, 0x7e, 0x0c, 0x4d, 0x6e, 0x47, 0xf2, 0x7b, 0xb2, 0xbb, - 0x77, 0x38, 0x1c, 0x36, 0x44, 0x3b, 0xc2, 0x1a, 0xb6, 0x0f, 0xec, 0x1f, - 0x01, 0xbe, 0xd3, 0xfe, 0x5d, 0x55, 0x0d, 0xf5, 0xa7, 0x4c, 0x7e, 0x6a, - 0xf1, 0x3b, 0xf9, 0xd1, 0xf1, 0x6f, 0xff, 0xb2, 0xf0, 0xb7, 0xaf, 0x9f, - 0x07, 0xad, 0x96, 0x5f, 0x2b, 0xa2, 0x5f, 0x97, 0x36, 0xff, 0x8d, 0xcb, - 0xe0, 0xbf, 0x35, 0x26, 0xda, 0x86, 0x19, 0xbc, 0x7e, 0xcd, 0xe5, 0x0b, - 0xa1, 0xed, 0x3a, 0x90, 0x4e, 0x8d, 0x43, 0x7b, 0x64, 0x9f, 0x20, 0xdb, - 0x45, 0xb7, 0x0e, 0xe3, 0x7a, 0xf4, 0xde, 0x5e, 0x37, 0x15, 0x84, 0xd8, - 0xb1, 0x34, 0xc0, 0x2b, 0xf3, 0xa4, 0xd9, 0xd9, 0x1a, 0xe4, 0x5b, 0xf6, - 0x9a, 0xc1, 0x22, 0x90, 0x07, 0xd8, 0xd7, 0xa5, 0x52, 0x93, 0x52, 0x27, - 0x81, 0x22, 0x8e, 0x94, 0xa7, 0xc5, 0x03, 0x53, 0xbf, 0x63, 0xba, 0x99, - 0xa5, 0xa0, 0x3e, 0x67, 0xdb, 0xe5, 0x87, 0xf1, 0x8f, 0x1a, 0x1a, 0xdd, - 0x81, 0xd3, 0xe7, 0x3e, 0x53, 0xbe, 0xeb, 0x71, 0xf5, 0xbc, 0xf8, 0x44, - 0x49, 0x1d, 0xcd, 0x8b, 0x90, 0x9a, 0xbf, 0xad, 0xd5, 0x48, 0x7f, 0xf3, - 0x83, 0xe8, 0x24, 0x34, 0xd2, 0xee, 0x2f, 0x06, 0x64, 0xfe, 0xb8, 0x06, - 0x3d, 0x08, 0xbe, 0xf1, 0x16, 0xf4, 0x79, 0xb1, 0x3e, 0x5b, 0x1c, 0x1e, - 0x26, 0x89, 0xd4, 0x48, 0xc6, 0xef, 0x0f, 0x00, 0x59, 0x2a, 0xf5, 0xfe, - 0x82, 0x4d, 0x66, 0x06, 0xa8, 0x36, 0xd6, 0xf5, 0xc9, 0x07, 0x0a, 0xc1, - 0x15, 0x4a, 0x9c, 0xe9, 0x9e, 0xe9, 0x1b, 0xa7, 0x69, 0x4d, 0xae, 0x8b, - 0x63, 0x5e, 0xa9, 0x73, 0xf5, 0xf7, 0xb4, 0x8c, 0x13, 0xbe, 0x9b, 0x05, - 0x2b, 0x1b, 0x3a, 0xec, 0xf2, 0xc2, 0x62, 0xc1, 0xe2, 0x47, 0x92, 0x86, - 0xd7, 0x79, 0xeb, 0x33, 0x3c, 0x94, 0xb2, 0x00, 0x94, 0x33, 0xd0, 0x07, - 0x3f, 0xec, 0xd9, 0xf8, 0x61, 0xe8, 0xf3, 0xae, 0xd3, 0x8c, 0xf3, 0x3e, - 0x53, 0x23, 0x1b, 0x7f, 0xf1, 0x0e, 0x00, 0x72, 0xfa, 0xa5, 0x88, 0xa5, - 0x23, 0x98, 0xe3, 0x07, 0xa1, 0xe9, 0x09, 0x17, 0xd2, 0x97, 0x67, 0xba, - 0xa0, 0x0c, 0x4e, 0x86, 0xc1, 0x1b, 0x7b, 0xa2, 0xa7, 0xe9, 0xb1, 0xc0, - 0x36, 0x26, 0x2e, 0x6d, 0x9f, 0x38, 0xca, 0x81, 0xd5, 0x56, 0x1b, 0xca, - 0x88, 0xf5, 0xa3, 0xdd, 0x67, 0x63, 0xfc, 0x67, 0xcb, 0x04, 0x42, 0x29, - 0x56, 0x4c, 0xd4, 0xd0, 0xdb, 0x68, 0x59, 0x50, 0x3d, 0x55, 0xc5, 0x9b, - 0x9a, 0x1e, 0x14, 0xc0, 0xa7, 0x2f, 0x76, 0x78, 0x04, 0xa4, 0x29, 0xeb, - 0x27, 0xe4, 0x5c, 0x16, 0x8d, 0xb4, 0xc8, 0xb7, 0x8d, 0x40, 0x7a, 0xd8, - 0xb9, 0x8a, 0xb2, 0x0a, 0x74, 0xa2, 0x73, 0x95, 0xde, 0x77, 0xae, 0xda, - 0x53, 0xa1, 0x55, 0x93, 0x49, 0xee, 0x2e, 0xe2, 0x43, 0xa8, 0x8d, 0xe7, - 0x14, 0x81, 0xbe, 0xa4, 0x97, 0xe6, 0x6c, 0xb7, 0xbd, 0x7e, 0xaf, 0x00, - 0x9a, 0x54, 0x5b, 0xa6, 0x27, 0x07, 0x9a, 0x33, 0x99, 0xdc, 0x4f, 0xda, - 0x43, 0x42, 0x75, 0xc8, 0xd9, 0x48, 0x51, 0x60, 0x9f, 0xbe, 0xd2, 0x7b, - 0xc6, 0x2d, 0xcb, 0x0f, 0x0c, 0xbe, 0xe8, 0x3c, 0x9f, 0x3a, 0xd9, 0x26, - 0xf7, 0x01, 0x9b, 0xe5, 0x97, 0x76, 0x10, 0xb9, 0x8b, 0x08, 0x85, 0x67, - 0xc3, 0xfd, 0x42, 0x18, 0xa8, 0xcf, 0x63, 0x9f, 0xa8, 0xaa, 0x3a, 0x3c, - 0xd0, 0xf0, 0xea, 0xf0, 0xd5, 0xc7, 0xb5, 0x3a, 0x60, 0x61, 0xdc, 0xff, - 0xf3, 0x9d, 0xf0, 0x8b, 0x8c, 0x57, 0xbd, 0xfd, 0x5f, 0xb1, 0xb4, 0xfe, - 0xa7, 0xde, 0x54, 0x3b, 0x49, 0x47, 0xf7, 0x79, 0x80, 0x3e, 0x21, 0x20, - 0xae, 0x6e, 0xf5, 0xb7, 0x3f, 0x00, 0x08, 0x72, 0x7b, 0xf4, 0x3b, 0xd7, - 0x49, 0x90, 0x28, 0x04, 0xfe, 0xc7, 0xd5, 0xa2, 0x74, 0x80, 0x3b, 0xfd, - 0x04, 0xb3, 0xd8, 0x88, 0x11, 0xf4, 0x85, 0x06, 0xd7, 0xe1, 0xc1, 0xc0, - 0x22, 0xf4, 0xaa, 0x3a, 0x53, 0x74, 0x31, 0x15, 0xea, 0x54, 0xae, 0xba, - 0x54, 0x3a, 0xf3, 0x5b, 0x15, 0x86, 0xd1, 0x00, 0xeb, 0x6d, 0x86, 0xc5, - 0x18, 0x36, 0x6b, 0x12, 0xfb, 0x51, 0x4f, 0xd5, 0xa5, 0x53, 0xe3, 0xe5, - 0x5c, 0x07, 0x0b, 0x21, 0x1a, 0x1f, 0x00, 0xe6, 0xe3, 0xf8, 0x35, 0x4b, - 0x39, 0x86, 0xf5, 0x81, 0xd0, 0x1e, 0x88, 0xda, 0xe8, 0xa8, 0x4a, 0x0c, - 0xd8, 0x73, 0x40, 0x01, 0xdf, 0xac, 0xc3, 0xd6, 0x5b, 0xd5, 0x42, 0xab, - 0x6f, 0x79, 0xcd, 0x1d, 0x3b, 0xdb, 0x4d, 0x3d, 0x21, 0x7c, 0x34, 0xf1, - 0x17, 0x8a, 0xda, 0xa0, 0xb4, 0x45, 0x84, 0x24, 0x04, 0x59, 0x20, 0x13, - 0x3b, 0x0d, 0x75, 0x30, 0x59, 0xdb, 0x4b, 0xa8, 0x7a, 0xe9, 0xa8, 0xce, - 0x7a, 0x13, 0x44, 0x30, 0x9f, 0x6c, 0xca, 0x5f, 0x80, 0x64, 0xb1, 0x46, - 0xa5, 0x2f, 0x93, 0xde, 0x63, 0x72, 0x0d, 0x30, 0xa6, 0x77, 0x2a, 0xab, - 0x84, 0x11, 0x2c, 0x09, 0xe2, 0x72, 0x13, 0x7e, 0xf4, 0xe2, 0x52, 0x47, - 0xa7, 0xa8, 0x1b, 0x00, 0x62, 0xe5, 0xf5, 0x7e, 0xbb, 0x4b, 0xf6, 0x44, - 0xf6, 0xd1, 0xb4, 0xc9, 0xf4, 0x5f, 0x48, 0x22, 0x4e, 0x06, 0x18, 0xfd, - 0x7e, 0x1f, 0xec, 0x0d, 0x1c, 0x6a, 0x06, 0xee, 0x72, 0xf7, 0x93, 0x3e, - 0xb3, 0xdc, 0x4d, 0x12, 0xfd, 0x33, 0xe6, 0x74, 0x68, 0x0a, 0xd0, 0x42, - 0x73, 0xd1, 0x3a, 0x13, 0x44, 0x5a, 0xf5, 0xdd, 0x3b, 0x39, 0xa1, 0x0c, - 0xea, 0xa6, 0x97, 0x06, 0x71, 0x27, 0x4e, 0x70, 0xf8, 0x2b, 0xed, 0x1f, - 0xc8, 0x3f, 0x44, 0x17, 0xc6, 0xe4, 0xe5, 0x84, 0x54, 0x7e, 0x31, 0x54, - 0x00, 0xb1, 0x62, 0xef, 0x2f, 0x2d, 0x4e, 0x80, 0x0f, 0x7e, 0x66, 0xdb, - 0x72, 0x4b, 0x98, 0x69, 0xbc, 0xf6, 0x49, 0x42, 0xee, 0xd2, 0x55, 0x70, - 0x98, 0xae, 0x5f, 0x11, 0xe0, 0x91, 0x51, 0x7a, 0x97, 0xd5, 0x37, 0x6a, - 0xc3, 0x6b, 0x1a, 0x77, 0x85, 0xf2, 0x7f, 0xb1, 0x67, 0x61, 0x03, 0xbb, - 0xc6, 0x7d, 0x0a, 0x42, 0x0b, 0x84, 0x93, 0x46, 0x49, 0xfd, 0xad, 0x2e, - 0x7a, 0xab, 0xb3, 0xc3, 0x69, 0xa5, 0xf6, 0x3c, 0x47, 0x33, 0x72, 0xdc, - 0x6a, 0xfe, 0x04, 0x81, 0x73, 0xca, 0x0b, 0x7d, 0x4b, 0xbc, 0xba, 0x29, - 0x80, 0x9d, 0xe3, 0xae, 0x8f, 0x3b, 0xbd, 0xca, 0xfa, 0xc2, 0x89, 0x5a, - 0xc5, 0xfe, 0xa9, 0x63, 0x0f, 0x29, 0xc7, 0x9d, 0x75, 0x8c, 0xdd, 0x8b, - 0x8e, 0x91, 0x33, 0x7c, 0xb9, 0x09, 0xd1, 0x1f, 0x25, 0x2a, 0x99, 0x97, - 0x38, 0x19, 0x0a, 0x94, 0xc0, 0xbe, 0xfb, 0xc2, 0xec, 0x02, 0x3c, 0x74, - 0x07, 0xe1, 0x14, 0x2e, 0xab, 0x14, 0x02, 0x96, 0x3a, 0x1f, 0x3d, 0xd0, - 0x69, 0xa1, 0x4e, 0xf3, 0xfa, 0xe0, 0x7b, 0x96, 0x55, 0x0c, 0xd5, 0x3e, - 0x3a, 0x6d, 0xfc, 0x5d, 0xf1, 0x29, 0xef, 0xe5, 0x35, 0x61, 0x13, 0x13, - 0x42, 0x8f, 0x70, 0x54, 0xa5, 0x98, 0xf5, 0xf1, 0xe8, 0x4d, 0xb4, 0xfd, - 0x43, 0x6d, 0x44, 0x32, 0xab, 0x16, 0x58, 0x1c, 0x1e, 0xf2, 0x6d, 0x08, - 0x7d, 0x45, 0xd5, 0x0f, 0xfa, 0x88, 0x74, 0x37, 0xa4, 0xe3, 0x57, 0x9f, - 0x2b, 0xfd, 0x43, 0xf5, 0x45, 0x1e, 0x45, 0xc4, 0x3a, 0x43, 0xa5, 0x91, - 0x20, 0x7d, 0x32, 0x47, 0x94, 0xc7, 0xe3, 0xb8, 0xd3, 0xc4, 0x09, 0x50, - 0x2f, 0x06, 0xa6, 0x0a, 0xb1, 0x21, 0xfe, 0x72, 0x99, 0x84, 0x0b, 0xa2, - 0x0c, 0x4b, 0x31, 0xdd, 0x0a, 0x0d, 0xcb, 0x28, 0xc7, 0x32, 0x3f, 0x28, - 0x16, 0x8d, 0x0b, 0x3b, 0x7d, 0xd6, 0xc0, 0x1f, 0xbc, 0x0a, 0x24, 0x76, - 0xf0, 0x74, 0x54, 0x38, 0x1a, 0x7e, 0x99, 0x65, 0x3a, 0x4d, 0x5d, 0x4a, - 0xf5, 0x6b, 0xe8, 0xff, 0xe6, 0x11, 0x7f, 0x78, 0x68, 0xff, 0xbf, 0xf3, - 0x3f, 0x62, 0xce, 0xe3, 0x03, 0xd6, 0x86, 0x90, 0xe6, 0x6c, 0x5f, 0x24, - 0x20, 0x55, 0x14, 0xd7, 0xe1, 0x83, 0xea, 0xbe, 0x3a, 0x90, 0xff, 0x51, - 0xbb, 0x1d, 0xf7, 0x4f, 0x32, 0x0c, 0xb4, 0x08, 0xf9, 0xcc, 0xf8, 0xd9, - 0xb1, 0xf6, 0x94, 0xcd, 0xee, 0xd0, 0xe0, 0x44, 0x29, 0x9c, 0xa4, 0xc3, - 0x09, 0xb0, 0x2f, 0x74, 0xf6, 0x4d, 0x9e, 0x01, 0xd2, 0x3f, 0x88, 0xcd, - 0x19, 0x75, 0x41, 0x04, 0x11, 0xe9, 0x4b, 0x21, 0xa6, 0x33, 0x4f, 0xd8, - 0xe1, 0x03, 0x1d, 0xa8, 0x9d, 0xe6, 0x83, 0x9c, 0xb2, 0xd3, 0xdd, 0xe1, - 0xdb, 0x5f, 0xab, 0x43, 0x64, 0x46, 0xbf, 0xe0, 0x55, 0xa7, 0x16, 0xa1, - 0x3d, 0xaa, 0xda, 0x41, 0x79, 0x85, 0x16, 0x79, 0xb6, 0x1a, 0x9a, 0xc9, - 0xe1, 0xad, 0x12, 0xc2, 0x68, 0xb6, 0x0b, 0x54, 0xa1, 0x2d, 0x1b, 0x65, - 0xd9, 0xc9, 0xc6, 0x12, 0x82, 0xf4, 0xe0, 0x0f, 0x5d, 0x2e, 0x13, 0x23, - 0x27, 0xf2, 0x6b, 0xc1, 0xe5, 0x76, 0xbe, 0x40, 0xb9, 0x59, 0x41, 0xac, - 0x57, 0xc8, 0x01, 0xdf, 0xf6, 0x24, 0x16, 0x07, 0x52, 0x58, 0x07, 0x1a, - 0xfa, 0xa1, 0xeb, 0x6a, 0x7a, 0x3e, 0xeb, 0x7a, 0xd7, 0x6b, 0x81, 0x40, - 0x32, 0x9f, 0x76, 0x84, 0xbc, 0x74, 0xcc, 0xad, 0x59, 0x00, 0x89, 0x30, - 0x51, 0x3e, 0x97, 0xbf, 0x7d, 0xe0, 0x52, 0x8d, 0x08, 0xa6, 0x37, 0x0b, - 0xd6, 0x85, 0x24, 0x38, 0x46, 0x5e, 0x36, 0x27, 0xa0, 0x5e, 0x6e, 0x2b, - 0x1a, 0x13, 0xb4, 0xb4, 0xe9, 0x73, 0x71, 0xb4, 0xe9, 0x0f, 0x0c, 0xc2, - 0xb4, 0xfa, 0x87, 0xe5, 0x25, 0xa9, 0x68, 0x0b, 0x5f, 0xa5, 0x81, 0x63, - 0x78, 0xd0, 0x55, 0x44, 0xc2, 0x8c, 0xd2, 0xfc, 0x35, 0x72, 0x42, 0x5c, - 0x96, 0xd8, 0x39, 0x66, 0x35, 0x0d, 0x8a, 0x35, 0x52, 0xa9, 0xa6, 0xb8, - 0xba, 0x8a, 0x72, 0x87, 0x7f, 0x62, 0x2d, 0x56, 0xab, 0xaa, 0xf2, 0x04, - 0xf8, 0x88, 0x1f, 0x1a, 0x40, 0xc5, 0x9e, 0x31, 0xd9, 0x2f, 0xbb, 0x11, - 0x7e, 0xd0, 0x19, 0xea, 0x6f, 0xf7, 0xdc, 0x86, 0x3b, 0x1e, 0xd0, 0x07, - 0x12, 0xfb, 0xfc, 0x6e, 0x22, 0x5d, 0xdd, 0x7f, 0x39, 0x89, 0xd8, 0xd0, - 0x89, 0xa0, 0xb6, 0xa7, 0xd0, 0xc8, 0x1f, 0x60, 0x6f, 0xbd, 0x45, 0x1c, - 0xef, 0x65, 0xbf, 0x9f, 0x05, 0x91, 0x6c, 0xc0, 0xd8, 0xe4, 0xb4, 0x41, - 0xf4, 0x8a, 0x85, 0x13, 0x73, 0x93, 0x54, 0x8f, 0x85, 0xde, 0xb1, 0xba, - 0xc9, 0x96, 0x6e, 0x13, 0x88, 0x0d, 0x2d, 0x36, 0xeb, 0x19, 0xd6, 0xf6, - 0xf1, 0x8d, 0xe8, 0x04, 0xf7, 0x36, 0x09, 0xdc, 0xde, 0x8a, 0x10, 0xa9, - 0x0c, 0x87, 0x4c, 0x57, 0xec, 0x34, 0xf5, 0x5f, 0xa8, 0xa2, 0x5e, 0x32, - 0xcc, 0xee, 0x11, 0x37, 0x51, 0x89, 0x2f, 0x0e, 0xba, 0x99, 0xfd, 0x87, - 0xe7, 0x10, 0x7a, 0x3a, 0xf8, 0x87, 0x33, 0x44, 0xa8, 0x51, 0xbb, 0xe8, - 0x50, 0xab, 0x50, 0x79, 0xf5, 0xaa, 0x10, 0x8c, 0x7c, 0xc9, 0x4b, 0x6c, - 0x65, 0xe4, 0x9b, 0x61, 0x53, 0xff, 0x64, 0xa1, 0x0b, 0xd2, 0xb6, 0xee, - 0x0a, 0xd7, 0x44, 0xdb, 0x5a, 0x73, 0x60, 0x85, 0xe8, 0x04, 0xf5, 0xec, - 0x4c, 0x46, 0xc7, 0x2d, 0x6e, 0x28, 0x25, 0x05, 0x6d, 0x59, 0x3b, 0x5b, - 0xc7, 0xa7, 0xa8, 0x8d, 0x90, 0xa1, 0xe5, 0x2e, 0xbf, 0x1c, 0x7b, 0xb7, - 0x66, 0x79, 0x96, 0x9c, 0x68, 0xb3, 0x85, 0xaa, 0x36, 0xfb, 0xb5, 0x4c, - 0x7a, 0x6e, 0x5a, 0x2e, 0x25, 0xd9, 0xb9, 0xea, 0xbf, 0xba, 0x65, 0x59, - 0xf7, 0xc1, 0xc1, 0x8c, 0x7f, 0xeb, 0xf3, 0xf3, 0x8f, 0x58, 0x99, 0x95, - 0x18, 0x84, 0xd2, 0x03, 0xf7, 0x5b, 0xb1, 0xb0, 0x82, 0xf0, 0xe6, 0xa1, - 0x01, 0x2e, 0x20, 0x5f, 0x14, 0x83, 0xec, 0x68, 0x03, 0x05, 0x08, 0xb3, - 0xd5, 0x27, 0x25, 0x7a, 0xf8, 0x49, 0x6d, 0x71, 0xe8, 0xcc, 0x14, 0xfd, - 0x29, 0xfb, 0xa4, 0x68, 0xd6, 0xdf, 0x9d, 0x5e, 0x22, 0xa1, 0x52, 0x77, - 0xb1, 0x4e, 0x65, 0x6a, 0xe5, 0xf4, 0x17, 0x52, 0xf2, 0x73, 0x90, 0x08, - 0xa1, 0xd5, 0xa3, 0xd8, 0x4a, 0x42, 0xe8, 0x92, 0xa0, 0x47, 0xf8, 0x4d, - 0x11, 0x7e, 0x2f, 0x11, 0xe2, 0x53, 0x93, 0x99, 0xfb, 0xaa, 0x65, 0x78, - 0x25, 0xd2, 0x7a, 0x03, 0x7b, 0x30, 0xaa, 0xb1, 0x3e, 0xca, 0xb9, 0x18, - 0x37, 0xed, 0xc1, 0xa0, 0x9e, 0x0f, 0x7b, 0x03, 0xd9, 0x33, 0x76, 0x55, - 0x79, 0x0a, 0xa4, 0xe2, 0x4d, 0x67, 0x9e, 0x02, 0x73, 0x5c, 0x07, 0xce, - 0x65, 0x43, 0x8b, 0x9e, 0x41, 0xb4, 0x76, 0xb1, 0x58, 0xd3, 0x7f, 0x38, - 0x91, 0xdc, 0xd7, 0xd2, 0xe4, 0x85, 0x08, 0x70, 0xbb, 0x00, 0xad, 0x9d, - 0x8c, 0x8d, 0x4c, 0x90, 0xbd, 0x4c, 0x10, 0xa6, 0x5a, 0x6f, 0x03, 0x46, - 0x1a, 0xab, 0xd7, 0x18, 0x02, 0x77, 0x1b, 0x39, 0xf7, 0x1c, 0xda, 0x3a, - 0x2c, 0x44, 0x4e, 0x24, 0x87, 0xf8, 0x90, 0xec, 0x9f, 0x55, 0xe6, 0x43, - 0x50, 0x54, 0x80, 0xc9, 0xcb, 0x8e, 0xef, 0xeb, 0x87, 0x79, 0xed, 0xcb, - 0xde, 0x7f, 0xa8, 0xe3, 0x4f, 0xfe, 0xdf, 0x27, 0x2c, 0x4c, 0x99, 0x04, - 0xd8, 0x6b, 0x57, 0x59, 0x16, 0x55, 0x11, 0xb8, 0x26, 0xfc, 0x23, 0x20, - 0x72, 0xe4, 0x6a, 0xd8, 0x04, 0x7a, 0x07, 0x27, 0xd3, 0x2a, 0x4e, 0xca, - 0x05, 0x49, 0x4c, 0x2d, 0x33, 0x09, 0xd4, 0xa8, 0x19, 0x54, 0x7d, 0x49, - 0xc1, 0x3f, 0x81, 0xd7, 0x29, 0x60, 0x0d, 0xac, 0xda, 0xf8, 0x95, 0x98, - 0xf3, 0xde, 0x1f, 0x72, 0x33, 0x62, 0xc3, 0x15, 0x71, 0x0f, 0x12, 0x19, - 0xd4, 0xd9, 0x36, 0x20, 0x8e, 0x81, 0x15, 0xed, 0x11, 0xdc, 0xec, 0x38, - 0x40, 0xfd, 0xe1, 0x6c, 0x6b, 0x51, 0x62, 0x2f, 0x75, 0x51, 0x8c, 0x58, - 0x79, 0x77, 0x0e, 0xdd, 0x9e, 0x9d, 0xde, 0xc1, 0xae, 0xbf, 0x1a, 0xb3, - 0xf0, 0x60, 0xbb, 0x4a, 0x6b, 0xec, 0xff, 0x25, 0xed, 0x18, 0x73, 0x0f, - 0xf9, 0xe8, 0x1d, 0x62, 0xee, 0x11, 0xca, 0x7f, 0x2c, 0x91, 0xc3, 0xe7, - 0xcc, 0x80, 0x85, 0xa9, 0xc8, 0xcc, 0xa5, 0xff, 0x48, 0xbf, 0x0f, 0x6d, - 0x8c, 0xa1, 0x8a, 0x11, 0x28, 0x66, 0xed, 0x20, 0x5e, 0x75, 0x20, 0x45, - 0x92, 0xb1, 0x86, 0xe8, 0x50, 0xd3, 0x8d, 0x7c, 0xb5, 0x64, 0x70, 0x91, - 0x4c, 0xa5, 0x47, 0x04, 0xeb, 0x37, 0x97, 0x38, 0x9e, 0x55, 0xaa, 0x64, - 0x1d, 0x87, 0xe1, 0xd6, 0xfb, 0x49, 0x2a, 0x87, 0x7e, 0x85, 0xf2, 0x4e, - 0x48, 0xfa, 0x25, 0x43, 0xa0, 0x2d, 0x38, 0xb0, 0xb9, 0xf9, 0x3c, 0x39, - 0xce, 0x01, 0x7e, 0xf7, 0x21, 0x72, 0xc4, 0x58, 0xc6, 0xd4, 0x7b, 0xe2, - 0xf8, 0x5c, 0xb6, 0x7a, 0x17, 0x75, 0xc1, 0x1d, 0xcd, 0x6c, 0xf2, 0x91, - 0xff, 0x96, 0xa1, 0x67, 0xab, 0x79, 0x73, 0x38, 0xbd, 0x24, 0x4e, 0x9f, - 0x59, 0xe8, 0x46, 0x53, 0xff, 0xb5, 0xa8, 0xa7, 0x35, 0xc8, 0xd3, 0xde, - 0xf2, 0xb4, 0x49, 0xc5, 0xd9, 0x97, 0x6b, 0x32, 0xfb, 0x3e, 0xdb, 0xad, - 0x72, 0xfa, 0x02, 0xc0, 0xce, 0x76, 0xb6, 0x51, 0xbe, 0x82, 0x1d, 0x54, - 0x2c, 0xb0, 0xe4, 0xf7, 0xf8, 0x00, 0x4d, 0xbb, 0xfc, 0xe7, 0x7e, 0x2d, - 0xd0, 0x47, 0x42, 0xea, 0x7c, 0xec, 0x6c, 0xf3, 0x20, 0x69, 0xe0, 0x97, - 0x53, 0x8f, 0x0e, 0x3f, 0xea, 0x07, 0x6d, 0xd8, 0xa3, 0x00, 0x89, 0xcd, - 0xc4, 0xf6, 0x41, 0xfe, 0x3f, 0xa5, 0xe1, 0x40, 0x9f, 0xc4, 0x22, 0x8f, - 0xd9, 0x2d, 0x8b, 0x10, 0xee, 0xe2, 0xef, 0x56, 0xb9, 0x95, 0xd4, 0x91, - 0x1d, 0x95, 0x76, 0xfc, 0xad, 0xf9, 0xff, 0x9e, 0x70, 0xfd, 0x4b, 0x9e, - 0xd0, 0x8b, 0xbc, 0x87, 0xe3, 0x42, 0x54, 0xce, 0xe7, 0xfe, 0xd1, 0x8d, - 0x11, 0xd7, 0x68, 0x8b, 0xcd, 0x76, 0xa9, 0x35, 0xbb, 0xa1, 0x21, 0x00, - 0x92, 0x5f, 0xd2, 0xb8, 0x49, 0x4f, 0xd1, 0x76, 0xa8, 0x44, 0x1a, 0xe6, - 0xdb, 0x8d, 0x00, 0x09, 0xe4, 0x56, 0x03, 0xd0, 0x58, 0xa9, 0x9e, 0x91, - 0xf8, 0xa1, 0x8a, 0x05, 0x95, 0x14, 0xdb, 0x5a, 0x27, 0x7f, 0xda, 0xaf, - 0xcb, 0x20, 0x90, 0xce, 0xb3, 0xfc, 0x2e, 0x62, 0x82, 0xdf, 0x62, 0x0b, - 0xb5, 0x2c, 0x85, 0x96, 0x13, 0xa7, 0xbf, 0x16, 0x72, 0x7d, 0xa2, 0xaf, - 0x12, 0xd1, 0x52, 0x88, 0x39, 0xff, 0x44, 0xf4, 0x0d, 0xa2, 0x09, 0xb3, - 0xf9, 0x6c, 0xd4, 0x7c, 0x95, 0x72, 0xb6, 0xd9, 0x2d, 0x6b, 0x77, 0xd0, - 0x97, 0xef, 0x0d, 0x3a, 0x2c, 0x55, 0x8b, 0xcb, 0xa2, 0xbf, 0xcd, 0x2e, - 0x0a, 0x92, 0x42, 0x6d, 0x66, 0x04, 0x3a, 0x5c, 0xd3, 0x93, 0xd1, 0xdd, - 0x9e, 0xdd, 0xb0, 0x0f, 0x11, 0x44, 0x2f, 0xdc, 0x56, 0x1e, 0x43, 0x1e, - 0x2f, 0x2e, 0xa5, 0x81, 0xd5, 0x5e, 0x31, 0x71, 0xb1, 0xdf, 0xc6, 0x96, - 0x08, 0x38, 0xe3, 0x58, 0x45, 0x21, 0xb6, 0x44, 0x89, 0x6a, 0xef, 0x32, - 0x9e, 0x00, 0xd7, 0x95, 0x04, 0x7d, 0x1e, 0x8e, 0x26, 0x29, 0x78, 0xf1, - 0x54, 0xa1, 0x91, 0x7c, 0xb2, 0x02, 0xba, 0x41, 0xc8, 0x42, 0x91, 0xb4, - 0x3f, 0x81, 0xb3, 0xe8, 0x83, 0x13, 0x76, 0x36, 0x7d, 0xdb, 0xdb, 0x39, - 0x7f, 0x7d, 0x14, 0xe1, 0x3d, 0x3d, 0x95, 0xb3, 0xcf, 0x5f, 0xd6, 0xa3, - 0x8f, 0x3c, 0x4a, 0x0f, 0x09, 0x75, 0x1f, 0xd6, 0xd5, 0xd0, 0xe6, 0xad, - 0xae, 0xe3, 0x88, 0xda, 0xd7, 0x9c, 0x93, 0xe5, 0xfd, 0x3e, 0xe8, 0x1e, - 0xb0, 0x90, 0xa3, 0x19, 0x38, 0x87, 0xd9, 0xa1, 0x09, 0x61, 0x09, 0x97, - 0x3b, 0xa0, 0x8a, 0x53, 0xaa, 0x72, 0x6b, 0x2b, 0xe8, 0x2e, 0xc7, 0xb4, - 0x24, 0xaf, 0xc1, 0x4e, 0x77, 0x85, 0xf6, 0x8e, 0x64, 0x68, 0x17, 0xe9, - 0x42, 0x61, 0x65, 0x1e, 0xad, 0x00, 0x41, 0x34, 0x36, 0x96, 0x13, 0x0b, - 0x6f, 0x65, 0x28, 0x7f, 0x17, 0xf5, 0x99, 0xb9, 0x16, 0x10, 0xc4, 0x23, - 0x6c, 0xc5, 0x6f, 0xad, 0x3c, 0xd8, 0xb5, 0x8b, 0xac, 0xf3, 0x5c, 0x9c, - 0xc8, 0x6a, 0xac, 0xaf, 0x0a, 0x97, 0xba, 0x3a, 0x84, 0x1e, 0xf7, 0x68, - 0x7f, 0xb2, 0xb4, 0x2d, 0x17, 0x2e, 0x4a, 0x02, 0x83, 0x4e, 0x3f, 0x81, - 0xbd, 0xfa, 0x44, 0xd6, 0xdd, 0xee, 0xa0, 0x85, 0x4b, 0x66, 0xae, 0xca, - 0xcc, 0x1c, 0x8a, 0xaa, 0xf7, 0x37, 0xde, 0x52, 0x6a, 0xaa, 0xe7, 0x35, - 0xb1, 0x9c, 0x16, 0x36, 0xde, 0x2d, 0x5e, 0xd5, 0x57, 0xed, 0xc3, 0x78, - 0x84, 0xe0, 0xed, 0x76, 0xc5, 0x54, 0x67, 0x26, 0xf0, 0xdc, 0xa3, 0x51, - 0x42, 0xa3, 0x49, 0x0b, 0xa2, 0x41, 0xa0, 0x0a, 0x64, 0x76, 0x57, 0x5f, - 0x24, 0xbf, 0xb9, 0x36, 0x6b, 0xde, 0xd1, 0xee, 0xa7, 0x48, 0x8f, 0x0a, - 0x0e, 0xd7, 0x68, 0x0d, 0x98, 0x75, 0x37, 0x49, 0x74, 0xc4, 0xc1, 0x8d, - 0x80, 0xfb, 0x30, 0x5a, 0x61, 0x76, 0x62, 0x97, 0xf9, 0x85, 0x4e, 0x9b, - 0x82, 0x47, 0x1a, 0x2b, 0xc6, 0xa4, 0xec, 0x4e, 0xb9, 0x17, 0xfa, 0x38, - 0x89, 0x59, 0xa0, 0x36, 0x39, 0xbd, 0x5f, 0x48, 0x64, 0xc6, 0xad, 0xa3, - 0x29, 0xcb, 0x43, 0xe4, 0x88, 0x06, 0x19, 0x24, 0xc4, 0xc0, 0x94, 0x97, - 0x3d, 0x92, 0x49, 0xdb, 0xca, 0xe4, 0x50, 0x0a, 0xa0, 0x2f, 0x3f, 0x4e, - 0xef, 0x6a, 0x55, 0x36, 0x96, 0xc7, 0xe3, 0xd4, 0x96, 0x37, 0x16, 0x55, - 0x54, 0x2f, 0x84, 0x7b, 0x60, 0x89, 0x84, 0xad, 0x44, 0x75, 0xf2, 0x56, - 0x30, 0x52, 0x0b, 0x49, 0xc9, 0xe4, 0xb4, 0xc1, 0x63, 0xa4, 0xc0, 0x8c, - 0x3e, 0xa0, 0xde, 0x71, 0xcf, 0x43, 0x16, 0x34, 0xe4, 0xaa, 0xc9, 0x30, - 0x13, 0x2b, 0x3e, 0x7e, 0x7d, 0x01, 0xcc, 0x56, 0x89, 0x10, 0xad, 0xa8, - 0x53, 0x52, 0x98, 0xfa, 0xc7, 0x64, 0x57, 0xb4, 0xaf, 0x93, 0x0e, 0x11, - 0xb4, 0x53, 0x4c, 0x30, 0x9e, 0xa9, 0xcf, 0x4c, 0x78, 0x55, 0x27, 0xf3, - 0x70, 0xab, 0x5e, 0x23, 0x90, 0xbb, 0xb5, 0xb7, 0x81, 0xc8, 0xd9, 0x16, - 0x19, 0x99, 0x96, 0x1a, 0x1f, 0xcd, 0xce, 0x54, 0x4d, 0x68, 0x26, 0xe1, - 0xa7, 0x97, 0xa9, 0x95, 0x69, 0xab, 0xea, 0x45, 0xfa, 0xea, 0x0f, 0x1e, - 0x7c, 0x6c, 0x9a, 0xd6, 0xb7, 0x57, 0xf8, 0xf4, 0xa3, 0xfa, 0x66, 0x84, - 0xdc, 0xd3, 0x50, 0x34, 0xfd, 0x6c, 0x43, 0xb4, 0xaf, 0xce, 0xa8, 0xcc, - 0xa7, 0x19, 0xe3, 0x35, 0x3a, 0x23, 0xb9, 0x99, 0x4c, 0x3f, 0xa6, 0x66, - 0x43, 0x18, 0xe7, 0x14, 0x8a, 0x4d, 0xf5, 0x19, 0xd8, 0x03, 0xb2, 0x43, - 0x93, 0xc1, 0xe8, 0xb6, 0x24, 0x99, 0x16, 0x8f, 0xd0, 0x3f, 0x37, 0x36, - 0x3a, 0x3f, 0x86, 0x45, 0xdb, 0x50, 0x47, 0xbd, 0xe5, 0x68, 0xcf, 0x79, - 0xe8, 0xfe, 0x0f, 0xe1, 0x7a, 0x2f, 0x11, 0xfc, 0x68, 0x0e, 0xd4, 0x20, - 0x9d, 0x50, 0x73, 0x7e, 0xd7, 0x98, 0x89, 0x3c, 0x7a, 0x75, 0x7a, 0xcc, - 0x09, 0x36, 0x4d, 0x56, 0xf3, 0xd8, 0x9b, 0x67, 0x5a, 0x0c, 0xec, 0x29, - 0xfe, 0x96, 0xdf, 0x82, 0xe1, 0x5d, 0xa1, 0x7a, 0xcd, 0xf6, 0x88, 0xfe, - 0x31, 0xb1, 0xe1, 0xfc, 0x31, 0xf7, 0xef, 0x81, 0xc3, 0xef, 0x78, 0xf0, - 0x7c, 0x7a, 0x92, 0x75, 0xd5, 0x00, 0xd8, 0xb8, 0xd2, 0x91, 0x1f, 0x66, - 0xfe, 0x2d, 0x09, 0xd1, 0x65, 0xa9, 0x50, 0xe6, 0x61, 0xc4, 0x96, 0x6f, - 0x35, 0xbf, 0x6f, 0x78, 0x89, 0x81, 0xf2, 0x01, 0x29, 0x50, 0x43, 0x2b, - 0xae, 0xb4, 0x87, 0xc7, 0xfa, 0x65, 0xc8, 0xfb, 0x10, 0xcc, 0xed, 0x1b, - 0xf8, 0x5f, 0xe4, 0x4f, 0x4c, 0xe6, 0x2b, 0x2c, 0xfe, 0xc9, 0xcf, 0x76, - 0xf1, 0xc1, 0xa9, 0x5d, 0xc8, 0x8a, 0xfb, 0x29, 0x96, 0x7c, 0x14, 0x36, - 0xcd, 0x9e, 0x98, 0x4b, 0xb7, 0x9b, 0x61, 0x74, 0x29, 0x0f, 0xcb, 0xec, - 0x73, 0x1e, 0x1c, 0xfc, 0xaa, 0xef, 0xdc, 0x67, 0x10, 0xd2, 0xb8, 0xdd, - 0x9a, 0xb9, 0x12, 0x35, 0x67, 0xae, 0xec, 0xd8, 0x3c, 0x17, 0xe8, 0x6b, - 0x96, 0xc5, 0x67, 0x74, 0x51, 0xc0, 0x66, 0x68, 0x1a, 0xcd, 0x51, 0x8d, - 0xd4, 0x08, 0xa9, 0x87, 0xa3, 0x53, 0xeb, 0xe4, 0x79, 0x96, 0x59, 0xbb, - 0x97, 0x6c, 0xf1, 0x13, 0x6c, 0x5b, 0x99, 0x3f, 0x8e, 0x0d, 0xed, 0xa3, - 0x03, 0x77, 0xd2, 0xea, 0x7c, 0xe1, 0xe0, 0x46, 0x51, 0xb3, 0x7c, 0xbf, - 0x58, 0xf2, 0xea, 0x3c, 0xe9, 0xcb, 0x03, 0xb8, 0xd3, 0x1e, 0xbe, 0x6f, - 0x43, 0xf3, 0x66, 0x6f, 0xf7, 0xea, 0x33, 0x27, 0x01, 0x7d, 0x06, 0x64, - 0xf9, 0xa9, 0x3e, 0x3a, 0x99, 0xb5, 0x6b, 0xc1, 0xea, 0x76, 0xea, 0xa4, - 0x58, 0x4c, 0x5e, 0x3b, 0x72, 0x47, 0x6b, 0x9f, 0x2f, 0xe8, 0xdd, 0xb2, - 0x7c, 0x7e, 0x78, 0x15, 0xd0, 0x06, 0x9c, 0x64, 0x3c, 0x5a, 0xa8, 0x46, - 0x49, 0x36, 0x9f, 0x49, 0xb3, 0x8d, 0x65, 0x3a, 0x98, 0x5d, 0x65, 0xe7, - 0xa5, 0x65, 0x96, 0x36, 0xe5, 0x12, 0xb7, 0xd3, 0x62, 0x38, 0x85, 0x05, - 0x5f, 0xa1, 0x57, 0x1b, 0xb7, 0xea, 0xa6, 0xf6, 0x6b, 0x85, 0x25, 0xbb, - 0xaf, 0xe6, 0x70, 0xa6, 0x6f, 0xa7, 0x9a, 0x5a, 0xd5, 0xf7, 0x0c, 0xb3, - 0xa9, 0xca, 0xea, 0x9c, 0xc8, 0xe5, 0x3b, 0x77, 0x31, 0x61, 0x6a, 0x0e, - 0xeb, 0x11, 0x9e, 0xb8, 0x35, 0xe0, 0xc9, 0x62, 0xf4, 0xa8, 0x5e, 0x9c, - 0xff, 0xaa, 0xb0, 0x11, 0xb1, 0x1d, 0xba, 0x11, 0x7f, 0xac, 0x66, 0x3b, - 0xf4, 0x10, 0x54, 0x4a, 0x6b, 0xec, 0x8b, 0xa7, 0x45, 0x00, 0x45, 0x1b, - 0xe3, 0x3c, 0x38, 0xd8, 0xb5, 0x6e, 0xfb, 0x52, 0xf6, 0x5e, 0x62, 0xe4, - 0x9f, 0xed, 0xe3, 0x33, 0x0f, 0xa7, 0x2a, 0xe2, 0x11, 0xf6, 0xb6, 0xc1, - 0x66, 0x1e, 0x64, 0x06, 0x37, 0xf3, 0xe3, 0xa6, 0xc9, 0x4d, 0xdf, 0x0a, - 0xd4, 0xd0, 0xa0, 0xe0, 0x7b, 0x9e, 0x77, 0xcd, 0x3e, 0x75, 0x77, 0x73, - 0x7d, 0x42, 0xde, 0xd6, 0x1c, 0xe7, 0x3a, 0x34, 0x7d, 0x46, 0x7d, 0x34, - 0x73, 0x7b, 0x7a, 0x5b, 0x92, 0x33, 0x76, 0x02, 0x9b, 0x97, 0xf6, 0xb2, - 0xd1, 0x07, 0x53, 0xd7, 0x0b, 0xd1, 0x99, 0x26, 0x8e, 0x9d, 0x68, 0x8a, - 0xe7, 0xcf, 0xb9, 0xfb, 0xd4, 0x47, 0x98, 0x05, 0x72, 0x63, 0x76, 0x42, - 0x74, 0x35, 0xb0, 0x50, 0x74, 0xca, 0x0a, 0x59, 0x2d, 0xa9, 0x11, 0xda, - 0x14, 0x7a, 0x99, 0xa6, 0x2f, 0x05, 0xf3, 0x5c, 0xbf, 0x0d, 0xd6, 0xf8, - 0x8e, 0xc0, 0x00, 0x99, 0x7f, 0x6c, 0x3a, 0xd1, 0x77, 0x5e, 0xa6, 0xd6, - 0x6c, 0xde, 0xb3, 0x14, 0xef, 0xd6, 0xfd, 0x83, 0x65, 0x6e, 0x22, 0x63, - 0xeb, 0x2d, 0xb5, 0x7f, 0x6b, 0x6c, 0x45, 0x8b, 0x15, 0xbb, 0xf6, 0xd9, - 0xa5, 0x16, 0x47, 0x56, 0xe8, 0x44, 0x29, 0x22, 0x6c, 0x84, 0x5a, 0x06, - 0x60, 0xb0, 0x48, 0xb3, 0xb9, 0xda, 0x9c, 0x72, 0xb5, 0x81, 0x0e, 0x46, - 0x80, 0x7a, 0x13, 0xf5, 0xb0, 0x6e, 0x20, 0x48, 0xd8, 0xee, 0x23, 0x5f, - 0x9f, 0xf1, 0x4b, 0x4e, 0x60, 0xb8, 0xc6, 0x10, 0x85, 0xd5, 0x08, 0x4d, - 0x06, 0x07, 0x24, 0x24, 0x3f, 0x84, 0x68, 0xa5, 0x65, 0xd9, 0x06, 0xd0, - 0x47, 0x9e, 0xb1, 0xa6, 0x83, 0x4f, 0xb0, 0xb4, 0x41, 0x0e, 0x9a, 0xb6, - 0x4b, 0x3b, 0xdd, 0xe4, 0xaa, 0x82, 0x41, 0xcb, 0xbb, 0x19, 0x99, 0x70, - 0x1c, 0xdd, 0x26, 0x59, 0x8a, 0x10, 0xda, 0x3c, 0x7f, 0x61, 0xd8, 0x81, - 0x2c, 0x65, 0x69, 0x93, 0x79, 0x93, 0xf5, 0x85, 0xac, 0x9e, 0x9e, 0xbc, - 0xc4, 0xaa, 0x60, 0x9b, 0x79, 0xa4, 0x23, 0xe8, 0x8c, 0x01, 0x6a, 0xe3, - 0xf5, 0xb3, 0x08, 0x45, 0xbd, 0x2e, 0x96, 0xdd, 0xb9, 0xaf, 0x53, 0x05, - 0xb9, 0xd6, 0x71, 0x65, 0xc5, 0x9f, 0xe1, 0x2a, 0xc8, 0x85, 0x99, 0x52, - 0x05, 0x61, 0x5b, 0xbc, 0x9f, 0xe9, 0x1d, 0x17, 0x72, 0xc4, 0x5a, 0xcc, - 0x4e, 0x0e, 0x09, 0xbf, 0xa3, 0x61, 0x93, 0xd8, 0xf7, 0x90, 0x5b, 0x0f, - 0x5a, 0x4b, 0x59, 0x25, 0x74, 0xe6, 0xa7, 0x27, 0x1f, 0x9a, 0x8c, 0x95, - 0x8a, 0xe2, 0x60, 0x27, 0x3f, 0x06, 0x55, 0x75, 0xb0, 0xb1, 0xcd, 0xe1, - 0x6a, 0x49, 0xd7, 0xfa, 0x30, 0x94, 0x14, 0xf5, 0xaa, 0x8b, 0xe9, 0xdb, - 0x55, 0xaa, 0x2a, 0x70, 0xc9, 0x4e, 0x18, 0xab, 0x56, 0xd2, 0x9b, 0x94, - 0xae, 0x0c, 0xfa, 0x27, 0xfe, 0xa5, 0x20, 0xcd, 0x92, 0x5d, 0x89, 0xa7, - 0x12, 0xfd, 0x72, 0xee, 0x97, 0x0f, 0x54, 0x52, 0xc5, 0x28, 0x34, 0x16, - 0xa9, 0xa1, 0x44, 0x50, 0x18, 0x8e, 0x7d, 0x15, 0x86, 0x96, 0x3b, 0x8f, - 0x87, 0xf5, 0xaa, 0xb6, 0x4d, 0x2a, 0x73, 0xb3, 0xfe, 0x6b, 0x6a, 0xd7, - 0x34, 0xcd, 0x72, 0xd7, 0x9c, 0xca, 0x0d, 0x69, 0x81, 0x0f, 0x0d, 0x5a, - 0x9e, 0x36, 0xad, 0xe3, 0xbe, 0x87, 0xb7, 0x1f, 0xd1, 0xb2, 0xa5, 0xa8, - 0xee, 0xe1, 0xbc, 0x69, 0xc4, 0x7a, 0xea, 0xc7, 0x1e, 0xca, 0x7c, 0x09, - 0xb2, 0xf2, 0x28, 0xe1, 0xa3, 0xfe, 0xda, 0x8c, 0xc5, 0xb5, 0x36, 0x09, - 0x39, 0xef, 0xea, 0x7c, 0x8f, 0x19, 0xa2, 0x5c, 0xca, 0xb5, 0x56, 0xd8, - 0x57, 0x5f, 0x67, 0x6a, 0x6d, 0xc7, 0x74, 0xb7, 0x11, 0x52, 0xa0, 0xc6, - 0xf1, 0x6d, 0x64, 0x21, 0xad, 0xa4, 0x0e, 0x7c, 0x60, 0xd9, 0x61, 0x5e, - 0x31, 0x20, 0x9b, 0xe2, 0x16, 0xc1, 0xfd, 0x9f, 0xc1, 0x1f, 0x4b, 0xf4, - 0xd5, 0x1b, 0x89, 0x21, 0x05, 0xc5, 0xbf, 0xbf, 0xbd, 0x77, 0x6e, 0x16, - 0xbb, 0xe8, 0xe4, 0x30, 0x94, 0x95, 0x90, 0xcd, 0xc3, 0xfd, 0xcb, 0x90, - 0x7f, 0xd9, 0x8e, 0xf8, 0x44, 0x1d, 0x36, 0x9e, 0x1f, 0x4b, 0xad, 0xfa, - 0x51, 0x52, 0x0d, 0x23, 0x02, 0x1f, 0x1a, 0x0e, 0x3d, 0x76, 0x35, 0x68, - 0x2a, 0x44, 0x84, 0xd6, 0xf6, 0xb2, 0x2a, 0x0d, 0xe5, 0x1f, 0x5e, 0x94, - 0x3c, 0x37, 0xb1, 0x4e, 0x78, 0x40, 0x5c, 0x94, 0x60, 0x4b, 0x13, 0x57, - 0x53, 0xff, 0x21, 0x78, 0xba, 0x4c, 0x85, 0x3b, 0xb7, 0x79, 0xe9, 0xd1, - 0x67, 0xdf, 0x7d, 0xb1, 0x63, 0x2f, 0x81, 0xab, 0xae, 0x86, 0x3e, 0xf6, - 0xb4, 0xd6, 0x9b, 0xbb, 0x2f, 0x76, 0xc8, 0x34, 0x6e, 0x1f, 0x86, 0x1e, - 0x86, 0x96, 0xcb, 0x03, 0xfa, 0x9b, 0x58, 0x70, 0x4a, 0xa0, 0x0a, 0xec, - 0x4d, 0xd7, 0xcb, 0x88, 0x8a, 0x13, 0x1c, 0x7a, 0xa7, 0x84, 0xc4, 0x8c, - 0xe5, 0x1a, 0x17, 0x90, 0x0c, 0x9e, 0xf1, 0x5d, 0xec, 0xa4, 0x0f, 0xfa, - 0x9a, 0xa6, 0x5c, 0xc3, 0x17, 0xf8, 0xc8, 0x23, 0xca, 0x01, 0x81, 0xf8, - 0x23, 0xaf, 0xfa, 0x0e, 0x6f, 0x61, 0xe9, 0xbe, 0xb8, 0xf2, 0x2d, 0x7d, - 0x36, 0x8e, 0x6f, 0xdb, 0x24, 0x48, 0xb7, 0x88, 0x41, 0xc5, 0x31, 0x6e, - 0x00, 0x0b, 0x5b, 0x0c, 0x98, 0xbf, 0xdf, 0x96, 0x15, 0x16, 0x19, 0x6f, - 0x34, 0x46, 0x9a, 0xd8, 0xa8, 0x2b, 0xfd, 0x98, 0xd0, 0xa5, 0xdb, 0x99, - 0x42, 0x8b, 0x36, 0x35, 0x34, 0x07, 0x05, 0xe8, 0x9f, 0xfe, 0xa9, 0x6d, - 0xaf, 0xde, 0x33, 0xb5, 0x13, 0x36, 0x2f, 0x5d, 0xbf, 0xb8, 0xa8, 0xa4, - 0x38, 0x8a, 0x0e, 0xef, 0x97, 0x12, 0x49, 0x76, 0xdd, 0x7e, 0xe0, 0x4d, - 0x2f, 0x4f, 0x7c, 0x3f, 0x63, 0x75, 0xec, 0x0a, 0x0d, 0x41, 0x70, 0xe9, - 0xc6, 0xe2, 0xfa, 0x5d, 0x1b, 0x12, 0xbb, 0xdd, 0x22, 0x04, 0xb7, 0xba, - 0x26, 0xdf, 0x36, 0x15, 0x6e, 0x19, 0x78, 0xe7, 0xe1, 0x07, 0xb7, 0x32, - 0x2c, 0x5a, 0x5f, 0x78, 0xda, 0x32, 0xf4, 0xdb, 0x66, 0x7a, 0xdf, 0xd3, - 0xf0, 0x65, 0x60, 0x86, 0xdc, 0xb5, 0x62, 0xf7, 0x9e, 0x7c, 0x75, 0xf8, - 0x3d, 0x79, 0x39, 0x7c, 0x6b, 0x45, 0x7e, 0xf7, 0xc5, 0x8c, 0xef, 0x0f, - 0x7f, 0x17, 0x1d, 0xd6, 0xbe, 0x6d, 0xca, 0xf4, 0x5d, 0xe4, 0x4e, 0x9e, - 0x62, 0x4d, 0x92, 0xf2, 0xfd, 0x96, 0x0f, 0x8e, 0x8a, 0x92, 0xd8, 0xaf, - 0xcf, 0xaa, 0xfd, 0x20, 0xec, 0x2d, 0x82, 0xd2, 0xd0, 0xa1, 0x8e, 0xa4, - 0x4d, 0x60, 0x19, 0x6a, 0xd3, 0x87, 0xbb, 0x9e, 0x4a, 0xf0, 0x84, 0xeb, - 0x5d, 0xd3, 0xd5, 0x8c, 0xfa, 0x96, 0x4f, 0x2f, 0x15, 0xce, 0xd5, 0x6f, - 0x59, 0x91, 0xf3, 0x07, 0x59, 0xf8, 0x56, 0xc1, 0xaa, 0x1f, 0x39, 0x0f, - 0xfd, 0xb9, 0xcd, 0xb8, 0x3c, 0x46, 0x3b, 0x65, 0x2c, 0x6c, 0x80, 0x83, - 0x3e, 0xb4, 0x5c, 0x26, 0x5f, 0x2a, 0xb7, 0x62, 0x46, 0xa3, 0x65, 0xe2, - 0x59, 0xec, 0xe8, 0x2c, 0xac, 0x9a, 0x75, 0xe8, 0x8e, 0xfa, 0x94, 0x4f, - 0x1c, 0xbd, 0x76, 0xfc, 0x9a, 0xe5, 0x60, 0xe9, 0xe7, 0x63, 0x0f, 0xf9, - 0xe8, 0xd9, 0xaa, 0x00, 0x4b, 0xe6, 0xd3, 0x2a, 0xee, 0xd6, 0xd6, 0x5f, - 0x91, 0x5c, 0xc0, 0x8f, 0x95, 0xc9, 0xaf, 0xa8, 0x12, 0xe8, 0x63, 0x52, - 0x2f, 0xc3, 0xfe, 0xff, 0xf5, 0x19, 0xe5, 0xc6, 0x6e, 0xe0, 0xa6, 0x01, - 0x84, 0xf6, 0x04, 0x1c, 0xa3, 0xb0, 0x82, 0x48, 0x28, 0xce, 0x0f, 0xc2, - 0xb0, 0x9a, 0x22, 0xf9, 0xfa, 0x26, 0x93, 0x6a, 0x1d, 0x8a, 0xf2, 0x29, - 0x00, 0xbf, 0xf1, 0xbb, 0xb9, 0xd6, 0xe3, 0x6d, 0x98, 0xb0, 0xf7, 0xab, - 0x61, 0x1d, 0x53, 0x88, 0x11, 0x5c, 0x15, 0xd6, 0xab, 0x59, 0xb6, 0xe6, - 0x40, 0xdc, 0x8a, 0x24, 0xf1, 0x84, 0x9d, 0x58, 0x14, 0x9c, 0xce, 0x22, - 0x6d, 0x06, 0x89, 0x5f, 0x6e, 0xf0, 0x03, 0xf4, 0x31, 0x94, 0x77, 0x41, - 0x80, 0x9b, 0x06, 0x92, 0x1b, 0x10, 0xdb, 0xf0, 0xef, 0xb0, 0x0c, 0x74, - 0x9a, 0xb5, 0x7c, 0xf0, 0xab, 0x29, 0xce, 0xc3, 0x14, 0xb6, 0x84, 0x48, - 0xeb, 0xcd, 0x04, 0x6d, 0xae, 0x94, 0x79, 0xa1, 0x43, 0x6d, 0x14, 0x95, - 0xb8, 0x30, 0xf7, 0xed, 0x4d, 0x30, 0xe4, 0xa6, 0xfe, 0xeb, 0xe4, 0xe1, - 0xa6, 0xfb, 0x25, 0xcc, 0x74, 0xff, 0xeb, 0xdf, 0x17, 0x97, 0xcb, 0x35, - 0x48, 0xb8, 0x78, 0xa8, 0x2b, 0x4b, 0xc2, 0x99, 0xee, 0x90, 0x53, 0x58, - 0xff, 0x66, 0xc2, 0xef, 0xa3, 0x0a, 0xf5, 0x3b, 0x2f, 0x57, 0x6a, 0xfe, - 0x22, 0x8c, 0x62, 0x10, 0x07, 0x83, 0x8e, 0x25, 0x4a, 0xd3, 0xb6, 0x20, - 0x36, 0xf4, 0xf4, 0x97, 0x17, 0x8b, 0x88, 0x27, 0xad, 0x2d, 0x42, 0x2b, - 0x7e, 0x2e, 0x00, 0x04, 0xac, 0xe2, 0xf2, 0x96, 0x46, 0x0d, 0x09, 0x2d, - 0xfe, 0x53, 0x89, 0x08, 0x40, 0x26, 0xd4, 0xbf, 0x18, 0xae, 0x15, 0xe1, - 0x4a, 0x25, 0xa5, 0x6b, 0x0d, 0xfe, 0xad, 0xc0, 0xff, 0xd6, 0xd0, 0xff, - 0x57, 0x41, 0xd7, 0xfa, 0xf9, 0x5b, 0x3d, 0xff, 0xa9, 0x9d, 0xff, 0xa7, - 0x72, 0xe2, 0xc8, 0x5d, 0x49, 0x0e, 0x9d, 0x6a, 0x29, 0x5f, 0xac, 0x21, - 0xbd, 0xa4, 0xe1, 0x2b, 0x5e, 0xb2, 0x6b, 0xfd, 0x66, 0x6e, 0xe1, 0x93, - 0x49, 0x3c, 0xe1, 0x6a, 0x07, 0x22, 0xc8, 0x35, 0xfd, 0x5c, 0xe3, 0x7f, - 0x2b, 0x1c, 0xfc, 0xbc, 0xf8, 0x9e, 0xd9, 0x77, 0xe7, 0x7f, 0x76, 0x5a, - 0x5c, 0x93, 0xf1, 0x1a, 0x2d, 0xab, 0xda, 0xcb, 0x4f, 0x58, 0xa2, 0x50, - 0x47, 0xd3, 0x74, 0x68, 0xc3, 0xc1, 0x08, 0x0c, 0x15, 0x6a, 0x14, 0xa2, - 0x16, 0xa0, 0xd5, 0x3c, 0x6b, 0x93, 0x30, 0xf3, 0x8b, 0x84, 0xac, 0x7a, - 0x76, 0xe7, 0x79, 0x89, 0x16, 0xb1, 0x0c, 0xbb, 0xfe, 0xa8, 0x4f, 0x63, - 0xf0, 0xa5, 0x48, 0xf6, 0x96, 0xa2, 0x19, 0x14, 0x61, 0x38, 0x00, 0x86, - 0xdb, 0xac, 0xa1, 0x6e, 0x72, 0x92, 0x67, 0x48, 0x62, 0x6f, 0x22, 0xd3, - 0xd1, 0xd1, 0xf1, 0xb1, 0xb7, 0x82, 0x5d, 0xd9, 0xdd, 0x80, 0xa4, 0xd9, - 0xe4, 0x99, 0xe7, 0x28, 0x09, 0x90, 0x7c, 0x72, 0x4b, 0x5c, 0xb6, 0x89, - 0xaf, 0xba, 0x6c, 0xaf, 0x59, 0x2c, 0x96, 0x6c, 0xe4, 0xeb, 0xc0, 0x7f, - 0x26, 0xce, 0xba, 0x0d, 0x6b, 0x08, 0xdf, 0x80, 0xec, 0x81, 0x26, 0x83, - 0xe3, 0xb0, 0xfa, 0x5b, 0xf7, 0xb9, 0xcc, 0xa2, 0xae, 0x13, 0x0d, 0xca, - 0x5f, 0x30, 0x1f, 0x6d, 0x8c, 0x8f, 0xd3, 0xeb, 0x1d, 0x1d, 0xb1, 0x03, - 0xad, 0xd6, 0x0f, 0xd7, 0x68, 0xa1, 0xeb, 0xcb, 0x86, 0xee, 0x95, 0xaa, - 0xc0, 0xf8, 0x3b, 0x9b, 0x83, 0x08, 0xa4, 0x75, 0x18, 0xef, 0xb6, 0x8a, - 0x2e, 0x9e, 0x40, 0x92, 0x4c, 0xd2, 0xd0, 0xb3, 0xf1, 0x0e, 0x38, 0xbf, - 0xba, 0x84, 0xfc, 0xbe, 0x77, 0x24, 0xf2, 0x3a, 0x00, 0xfb, 0xa0, 0xaf, - 0x11, 0xad, 0x54, 0xa1, 0x25, 0x77, 0x78, 0x09, 0xb9, 0xba, 0x8a, 0x8d, - 0x52, 0xf3, 0x72, 0x47, 0x30, 0x1b, 0xe2, 0xbc, 0x5a, 0xe1, 0x14, 0x56, - 0x57, 0xf5, 0x48, 0xdd, 0xe6, 0x4f, 0x9f, 0x41, 0xb7, 0x2d, 0x8b, 0xf9, - 0x10, 0x9a, 0xfb, 0xaa, 0x20, 0xc6, 0xc8, 0x55, 0xec, 0xce, 0x8b, 0x7d, - 0x4f, 0xfe, 0x87, 0xbd, 0x67, 0xa2, 0xf7, 0xb4, 0x7b, 0xfd, 0x40, 0x1d, - 0x3c, 0x0a, 0x9e, 0x82, 0x9e, 0xa2, 0xce, 0x92, 0x04, 0xc5, 0xba, 0x15, - 0xc8, 0xec, 0x47, 0xd0, 0x32, 0x4b, 0x01, 0x09, 0xd0, 0x10, 0x73, 0xf5, - 0xef, 0x35, 0xd9, 0x31, 0xfd, 0x93, 0xcc, 0x87, 0x0a, 0xd4, 0x86, 0xb9, - 0xd9, 0xef, 0xa6, 0xa1, 0x36, 0xa6, 0xa1, 0xc5, 0xbe, 0x9d, 0x16, 0xf9, - 0x93, 0xb2, 0xf7, 0x91, 0x26, 0xdf, 0x7f, 0x53, 0x63, 0xc5, 0xe9, 0x89, - 0x7d, 0xa8, 0xcd, 0x36, 0x29, 0x90, 0xe8, 0x2d, 0x72, 0x8f, 0xfb, 0xeb, - 0x74, 0x08, 0x13, 0xe0, 0x44, 0xe3, 0x24, 0xdf, 0x63, 0x20, 0x6d, 0x5b, - 0x84, 0x92, 0x35, 0x68, 0xb6, 0x78, 0x5a, 0xeb, 0x0e, 0xa2, 0x4f, 0x1d, - 0x0b, 0x0c, 0xf8, 0x04, 0xb1, 0x16, 0x4c, 0x1b, 0xa8, 0x81, 0x3c, 0x88, - 0xab, 0x46, 0x02, 0x79, 0x88, 0xf4, 0xba, 0x41, 0x99, 0xc9, 0x40, 0x44, - 0x64, 0xf5, 0x20, 0xcf, 0xc9, 0xb3, 0xf9, 0xec, 0x85, 0x71, 0x48, 0x4b, - 0xde, 0xd5, 0xbe, 0xa7, 0x23, 0x4d, 0xfd, 0x59, 0xd7, 0xe2, 0x31, 0xeb, - 0xea, 0x2f, 0x13, 0xed, 0xc7, 0xf0, 0x11, 0xaf, 0x30, 0x4f, 0x3f, 0xea, - 0xd5, 0xeb, 0xf0, 0xde, 0x1c, 0x4f, 0xb3, 0x03, 0x1d, 0x6f, 0x84, 0x4c, - 0x5b, 0x11, 0xf1, 0xb7, 0xab, 0x83, 0x36, 0xb8, 0x8b, 0xd3, 0x79, 0xb8, - 0x8b, 0xe7, 0x45, 0x4c, 0xf7, 0x08, 0xfa, 0x95, 0x81, 0x0a, 0x87, 0x9c, - 0xcf, 0x78, 0xe7, 0x65, 0x1a, 0x3d, 0x73, 0x3a, 0xf7, 0x24, 0x94, 0xdd, - 0xca, 0x8f, 0x10, 0x95, 0xc6, 0x73, 0x6c, 0xcf, 0xa2, 0x91, 0x79, 0x22, - 0x91, 0x2b, 0x24, 0xaa, 0x32, 0xc8, 0x10, 0x8d, 0x0a, 0x74, 0x82, 0x09, - 0x55, 0x31, 0xd2, 0x19, 0x89, 0x3c, 0x9b, 0xdb, 0x6b, 0x57, 0x93, 0x3a, - 0xce, 0x2c, 0x7f, 0x30, 0x64, 0x68, 0xf5, 0xb0, 0xcd, 0x93, 0x55, 0xc4, - 0x56, 0xc7, 0x62, 0x49, 0xfe, 0xf9, 0x54, 0xf5, 0xc8, 0xb0, 0x1f, 0xa1, - 0x01, 0x0f, 0xaf, 0x23, 0xa2, 0x32, 0x5a, 0x98, 0xd2, 0xae, 0x71, 0xea, - 0xac, 0x19, 0xcb, 0x6a, 0xbe, 0x84, 0xaf, 0xc3, 0x96, 0x48, 0xf2, 0x6a, - 0x51, 0x85, 0xae, 0xa3, 0x8a, 0xe4, 0xd5, 0xfb, 0x8b, 0xbe, 0x7c, 0x1f, - 0x13, 0xea, 0x66, 0xc8, 0x8b, 0x51, 0x75, 0x67, 0x10, 0xbf, 0x71, 0x44, - 0x07, 0xf0, 0xa3, 0xaf, 0xa4, 0xea, 0x9e, 0x60, 0x98, 0x57, 0x26, 0x3a, - 0x30, 0xd0, 0xeb, 0x4e, 0xd1, 0xd4, 0x54, 0x77, 0x27, 0x95, 0xa0, 0xf4, - 0x39, 0xb9, 0x0f, 0x04, 0x6a, 0xc2, 0x57, 0xc0, 0xb4, 0x3b, 0xf4, 0x8c, - 0xf3, 0x3c, 0xee, 0xb0, 0xa0, 0xd6, 0xf7, 0x72, 0x77, 0x99, 0xf8, 0x2d, - 0xc5, 0x61, 0x93, 0x77, 0x32, 0x51, 0xb8, 0x0a, 0xb0, 0x15, 0xde, 0xa8, - 0x24, 0x3e, 0x74, 0xe0, 0xec, 0xe8, 0x03, 0x0d, 0x3d, 0x42, 0xbe, 0x70, - 0x76, 0xa2, 0xdf, 0x94, 0xfd, 0xcb, 0x1e, 0xc0, 0x8f, 0x05, 0xcf, 0x2b, - 0xea, 0x3f, 0x57, 0xe3, 0xc2, 0x60, 0x72, 0x9f, 0x56, 0x21, 0xf3, 0xb6, - 0x94, 0x67, 0x91, 0x2f, 0xa0, 0xd9, 0x1d, 0x06, 0x52, 0x7b, 0x10, 0x02, - 0xef, 0xfa, 0x6b, 0xed, 0xa5, 0x96, 0xbb, 0x46, 0xae, 0xde, 0x91, 0xe2, - 0xa2, 0x02, 0xc9, 0x67, 0x09, 0x64, 0x61, 0xcd, 0xb3, 0x49, 0x95, 0xe0, - 0x57, 0xbe, 0xc7, 0x80, 0xe6, 0xf9, 0xf3, 0x39, 0xb4, 0x19, 0x13, 0xba, - 0x2b, 0x05, 0x43, 0x1d, 0x8a, 0xf3, 0x1e, 0x4d, 0xcd, 0x1b, 0xf6, 0x31, - 0x4f, 0x36, 0x47, 0xd8, 0xbd, 0xd8, 0x8e, 0x6a, 0x2b, 0x02, 0x42, 0x29, - 0x80, 0x43, 0xaf, 0x5b, 0x60, 0xa3, 0x7b, 0xb0, 0x55, 0xd3, 0xae, 0x3d, - 0x87, 0x1a, 0xa9, 0x04, 0xc1, 0xd6, 0x29, 0xee, 0xce, 0x48, 0x52, 0x3a, - 0x3d, 0x56, 0x63, 0x03, 0x9b, 0x9a, 0x5f, 0x76, 0x47, 0xfb, 0xbe, 0x1a, - 0xf4, 0x32, 0x6b, 0xf1, 0xd5, 0x86, 0x81, 0x66, 0xf9, 0x31, 0xaa, 0xb3, - 0xaa, 0xbd, 0xad, 0x7a, 0x8d, 0x17, 0x78, 0x2f, 0xe3, 0xd3, 0x87, 0xec, - 0x76, 0x8a, 0x1d, 0x7d, 0x85, 0x38, 0xeb, 0x37, 0xfa, 0xb1, 0x18, 0x4c, - 0xe3, 0xb8, 0xbf, 0x98, 0x97, 0xe3, 0x7f, 0x67, 0x91, 0x4f, 0x06, 0x91, - 0xc2, 0x83, 0xff, 0x06, 0xf9, 0x2f, 0x2f, 0x20, 0xdb, 0xc0, 0xb4, 0x10, - 0x3d, 0xfe, 0xa3, 0x86, 0xa2, 0xb9, 0xa0, 0x0f, 0xa3, 0xd1, 0x6e, 0x31, - 0x9a, 0x00, 0x67, 0xed, 0xfe, 0xed, 0x12, 0xeb, 0x3f, 0x76, 0x38, 0x30, - 0xff, 0x93, 0x8e, 0x09, 0x14, 0x6a, 0xee, 0x44, 0x9e, 0x01, 0xbf, 0xee, - 0x80, 0xfd, 0x6a, 0x23, 0xcc, 0x41, 0x93, 0x29, 0x1d, 0x7e, 0x0f, 0xfb, - 0x15, 0x8f, 0x2a, 0xfd, 0xab, 0x03, 0x7e, 0x3d, 0x0f, 0xb9, 0xf0, 0x24, - 0x60, 0xf2, 0x34, 0xd0, 0xc4, 0x9b, 0xf7, 0xeb, 0x8e, 0x24, 0x3d, 0x02, - 0x26, 0xd4, 0x91, 0x06, 0xee, 0x08, 0xda, 0x0a, 0x34, 0x06, 0x7f, 0x26, - 0xfd, 0xf2, 0x37, 0xb9, 0x9f, 0xa8, 0xc8, 0xca, 0xc2, 0xad, 0x61, 0xd3, - 0xfc, 0xb5, 0xcb, 0x48, 0xb8, 0x31, 0xec, 0x34, 0x9a, 0x35, 0x7f, 0xc8, - 0xeb, 0xba, 0xd6, 0xe9, 0x9c, 0x7a, 0x9b, 0x24, 0x50, 0x5a, 0x8f, 0xb8, - 0xf4, 0xb6, 0x40, 0xa8, 0x3d, 0x09, 0xe6, 0x5f, 0xba, 0xf6, 0xba, 0xa6, - 0x45, 0x02, 0x4b, 0x71, 0xad, 0x5a, 0x9a, 0xdf, 0xdc, 0xb8, 0xb4, 0xc3, - 0x19, 0xfd, 0xb5, 0xdc, 0xf4, 0x15, 0xe2, 0xae, 0xad, 0x43, 0xb1, 0xc4, - 0x32, 0x6c, 0x3e, 0xd6, 0xa9, 0x3a, 0x44, 0x41, 0xec, 0x4e, 0x7a, 0x5b, - 0x80, 0xb4, 0x67, 0x10, 0xf3, 0xa8, 0x1e, 0x97, 0x93, 0x5c, 0xc5, 0xda, - 0xe1, 0xa1, 0xfe, 0x95, 0xf6, 0xfc, 0xcc, 0xfd, 0x30, 0x77, 0x5f, 0xea, - 0xb4, 0x3c, 0xf1, 0x69, 0xbb, 0xb6, 0xa4, 0xc6, 0x89, 0x8e, 0x15, 0x3a, - 0x89, 0x34, 0x36, 0xe2, 0xdf, 0xe4, 0xc1, 0xb9, 0x7e, 0x8b, 0x61, 0xa7, - 0xf1, 0xdd, 0xdb, 0x40, 0x7f, 0x56, 0x90, 0x86, 0x05, 0xb6, 0xe2, 0x20, - 0x96, 0xee, 0x45, 0xcc, 0x34, 0x4e, 0x1d, 0x16, 0xd9, 0x96, 0xce, 0x55, - 0x9a, 0xc6, 0x29, 0x9f, 0xdd, 0xf3, 0xd0, 0x69, 0xd5, 0x79, 0x58, 0x9b, - 0x7b, 0x73, 0x28, 0x7b, 0xd7, 0x55, 0xba, 0xc9, 0x37, 0x1b, 0xd4, 0xb7, - 0x3d, 0x4e, 0xee, 0x63, 0x6f, 0x93, 0x69, 0x24, 0x23, 0x62, 0x12, 0x00, - 0x92, 0xc4, 0xe4, 0x5b, 0x1f, 0x54, 0x3a, 0x88, 0x06, 0x2b, 0x00, 0x0d, - 0x16, 0x28, 0x3c, 0x3f, 0xfc, 0xa9, 0x77, 0x0a, 0x7e, 0x2a, 0xa4, 0x1b, - 0x14, 0x55, 0x51, 0x83, 0xb5, 0xb8, 0x7f, 0x59, 0xca, 0x5f, 0x16, 0x57, - 0x82, 0x19, 0xeb, 0x43, 0xcc, 0x47, 0x62, 0xec, 0xb3, 0x3e, 0x70, 0x9f, - 0xed, 0x81, 0xbb, 0xee, 0x0f, 0x4c, 0x34, 0xba, 0x80, 0x1f, 0x3a, 0x1f, - 0x9e, 0xc9, 0xa6, 0x51, 0x9a, 0xc5, 0x40, 0x51, 0x4d, 0x54, 0xa2, 0xb0, - 0x4d, 0xf7, 0xbb, 0xbe, 0xe8, 0x9d, 0x1a, 0x8d, 0xfa, 0xef, 0x97, 0x04, - 0xc7, 0xef, 0xa1, 0x0e, 0xcc, 0xa5, 0x64, 0x5d, 0xbe, 0xec, 0xb4, 0xe7, - 0x65, 0x43, 0x8a, 0x90, 0x36, 0x09, 0xfa, 0xb5, 0xf4, 0x74, 0x08, 0x00, - 0x90, 0x50, 0xa7, 0xf4, 0x3f, 0x37, 0x13, 0x1f, 0x36, 0xe2, 0x0d, 0xf1, - 0x39, 0x84, 0xa7, 0x61, 0xe8, 0x0b, 0xc4, 0xa5, 0x32, 0xc1, 0x1a, 0x76, - 0xd5, 0x39, 0xc5, 0x34, 0xca, 0x63, 0x47, 0xaa, 0x3f, 0x46, 0x19, 0x8c, - 0x23, 0xb7, 0x46, 0xb7, 0xb4, 0x69, 0x16, 0x7b, 0x64, 0x98, 0xd3, 0xe9, - 0x98, 0x61, 0x50, 0xa2, 0xdb, 0x47, 0x40, 0x51, 0x38, 0xa2, 0x67, 0x39, - 0x91, 0xd7, 0x18, 0x75, 0x7c, 0x71, 0x23, 0xf6, 0x40, 0x7a, 0xce, 0x63, - 0x50, 0x5d, 0xb9, 0x4c, 0x9e, 0x03, 0x4a, 0xba, 0x76, 0x31, 0x04, 0xd0, - 0xfb, 0x50, 0xc7, 0xaa, 0x7f, 0xa2, 0x43, 0x68, 0x6b, 0xd0, 0x5c, 0xd8, - 0xbc, 0x77, 0xb2, 0xcf, 0xcc, 0x34, 0xbd, 0x99, 0x3a, 0x7e, 0x58, 0x81, - 0xd3, 0x5b, 0x8a, 0x6a, 0xfa, 0x9e, 0x10, 0xee, 0x39, 0x8b, 0x26, 0x06, - 0x22, 0x46, 0x78, 0x6a, 0x3b, 0xe0, 0x9a, 0x41, 0x1e, 0xec, 0x26, 0xf7, - 0xc5, 0xde, 0x3e, 0x33, 0x20, 0x86, 0xf7, 0xf1, 0xbb, 0x3f, 0x65, 0x2c, - 0x9b, 0x66, 0x0d, 0xde, 0xcb, 0xe9, 0xc9, 0x5b, 0x76, 0x34, 0xb9, 0xa5, - 0x13, 0x23, 0x8c, 0xb4, 0x56, 0x6c, 0xf3, 0x7c, 0xde, 0x59, 0xfc, 0xb2, - 0x0f, 0xdb, 0x7f, 0x9b, 0x64, 0x5f, 0xcc, 0xf3, 0xf4, 0xdf, 0x37, 0x9d, - 0xfb, 0x32, 0xbe, 0x3c, 0xa5, 0x18, 0x39, 0x60, 0xd0, 0xb2, 0xbf, 0x8e, - 0x17, 0x62, 0xe5, 0xdf, 0xf1, 0xea, 0xdd, 0xad, 0xe3, 0x55, 0x9f, 0x93, - 0x1c, 0xef, 0xc5, 0x06, 0x7a, 0x62, 0xcd, 0x13, 0xc5, 0xe5, 0xf9, 0xf6, - 0x44, 0xee, 0xca, 0xb1, 0xb5, 0xff, 0xca, 0xf2, 0x84, 0xe5, 0xb5, 0x8e, - 0x56, 0xa3, 0x40, 0xe7, 0x62, 0x61, 0x27, 0x0a, 0xd1, 0x52, 0xbf, 0xe6, - 0xaa, 0xed, 0x7b, 0x85, 0x15, 0xa5, 0x99, 0xd3, 0x36, 0xc1, 0x92, 0xda, - 0xd4, 0x54, 0x13, 0x94, 0x63, 0x96, 0x28, 0xae, 0x7b, 0x59, 0xcb, 0x5a, - 0x8b, 0xbc, 0x4e, 0x81, 0x4a, 0x63, 0x79, 0x85, 0xd2, 0x34, 0x33, 0xc5, - 0x8c, 0x4f, 0x77, 0xac, 0xdd, 0x07, 0x6b, 0xfc, 0x51, 0x7e, 0xed, 0x3d, - 0x57, 0x0a, 0xe2, 0x6f, 0x53, 0xda, 0x15, 0x51, 0x3d, 0x9e, 0xfc, 0xb5, - 0x09, 0xb0, 0x62, 0xf6, 0xaa, 0x35, 0x3e, 0xe2, 0x7a, 0xb2, 0x4f, 0xeb, - 0x68, 0x63, 0x9f, 0x8a, 0x7f, 0x66, 0xc1, 0x72, 0xc1, 0xc8, 0x20, 0x67, - 0xdc, 0xc4, 0x7d, 0xed, 0xa2, 0xcb, 0x4c, 0xa1, 0xe6, 0xf1, 0xfa, 0x8c, - 0xa2, 0x05, 0xd2, 0x99, 0x85, 0x01, 0xee, 0x33, 0x3c, 0x21, 0x2a, 0x0f, - 0x21, 0xc6, 0xd8, 0x9e, 0xf6, 0xc6, 0x8d, 0xcb, 0x12, 0x0d, 0xef, 0xdf, - 0x2d, 0x10, 0xb9, 0x46, 0x24, 0xd0, 0xa7, 0xc9, 0x3c, 0x5c, 0x96, 0xef, - 0x23, 0xa0, 0x5e, 0xe3, 0xdf, 0xb8, 0x3d, 0x28, 0x8e, 0xe7, 0xdc, 0xca, - 0xa2, 0x25, 0xa6, 0xb2, 0x2d, 0x1b, 0x2e, 0xd0, 0x58, 0xe3, 0xd8, 0x74, - 0x12, 0x34, 0x6d, 0x33, 0x35, 0x3d, 0x77, 0xb0, 0x51, 0xd4, 0x59, 0xab, - 0xde, 0xd8, 0x47, 0x71, 0xb8, 0x8a, 0x8b, 0x0c, 0x80, 0xf8, 0xe5, 0x00, - 0xc8, 0x0d, 0x81, 0x69, 0xeb, 0x9f, 0x32, 0xfb, 0xe6, 0xcb, 0xbd, 0x3a, - 0xfe, 0xf4, 0x3e, 0xfc, 0x31, 0xd2, 0xab, 0x4a, 0x5b, 0xd1, 0xa6, 0x33, - 0x5e, 0x5e, 0x9f, 0xb0, 0x5b, 0x4c, 0x78, 0xaa, 0x59, 0xb8, 0x24, 0xd6, - 0x31, 0x63, 0xf7, 0xe3, 0x3d, 0xc3, 0x5a, 0x3b, 0xbb, 0x29, 0x86, 0x56, - 0x78, 0xaa, 0xeb, 0xcb, 0x93, 0x78, 0x59, 0x87, 0xdb, 0xb9, 0xff, 0xa5, - 0x50, 0x2d, 0x62, 0xf2, 0x2d, 0x59, 0x83, 0x90, 0x69, 0xf7, 0x38, 0xa6, - 0x4f, 0x8c, 0x7b, 0x2b, 0xa2, 0x19, 0x82, 0xd0, 0x27, 0x84, 0x4a, 0x2c, - 0x48, 0xf3, 0x7e, 0x80, 0x1b, 0x8f, 0x96, 0xcc, 0xf4, 0xd4, 0x32, 0x76, - 0x79, 0x11, 0x40, 0x51, 0xb4, 0xb0, 0x41, 0x1c, 0xf4, 0xde, 0xec, 0xd7, - 0x5e, 0xed, 0x31, 0x25, 0xbd, 0x1b, 0xc6, 0xdf, 0xea, 0xb5, 0xbf, 0x25, - 0xa7, 0x0f, 0x15, 0x4d, 0x05, 0xac, 0x73, 0x91, 0x5a, 0x86, 0x7c, 0xa7, - 0x3d, 0xf8, 0x51, 0xad, 0x25, 0x0a, 0xb4, 0x14, 0xb0, 0x98, 0x8e, 0x20, - 0xcb, 0xc5, 0x43, 0x3a, 0xe9, 0xfe, 0x38, 0x17, 0x6b, 0x22, 0xc0, 0x1f, - 0xf9, 0x5d, 0xef, 0x96, 0x7d, 0x95, 0x4e, 0x46, 0x8b, 0x18, 0x74, 0xa7, - 0x9e, 0xe2, 0x7d, 0xfb, 0x58, 0x32, 0xd6, 0xec, 0x17, 0x2e, 0x31, 0xc2, - 0x63, 0x4b, 0xce, 0xa2, 0xff, 0x91, 0x6c, 0xf2, 0x6f, 0xc3, 0x4e, 0x21, - 0xb1, 0x3d, 0x63, 0x8b, 0x82, 0xbb, 0xfd, 0x9e, 0xd4, 0x5c, 0x56, 0x83, - 0xb8, 0x49, 0xa3, 0x78, 0x8c, 0x64, 0xec, 0x64, 0x4a, 0xa1, 0x26, 0xe2, - 0x99, 0x1c, 0x8b, 0x8d, 0x8c, 0x10, 0x3d, 0xb4, 0xdc, 0x8e, 0xb6, 0x64, - 0x9b, 0x60, 0x34, 0x53, 0x83, 0x3e, 0xb9, 0x9c, 0x03, 0x98, 0xc5, 0xe6, - 0x2d, 0xb1, 0x35, 0x03, 0x20, 0x77, 0xfc, 0xac, 0x5a, 0x2d, 0x85, 0xab, - 0xdf, 0x39, 0xa0, 0xa4, 0x30, 0x5b, 0xc9, 0x96, 0xd9, 0x02, 0xce, 0x1f, - 0x13, 0xd6, 0x06, 0xf3, 0xed, 0x12, 0xc3, 0x16, 0x6c, 0x1d, 0xec, 0xc5, - 0xd6, 0xc9, 0x01, 0x76, 0x3b, 0x12, 0x2e, 0x17, 0x72, 0x57, 0x7c, 0xee, - 0x3a, 0x96, 0xf4, 0x41, 0x60, 0x54, 0x57, 0x55, 0xbd, 0x11, 0xd8, 0xdc, - 0xa7, 0x7b, 0x42, 0xa3, 0x20, 0xb9, 0x09, 0x68, 0xd0, 0x32, 0x54, 0x8f, - 0x28, 0x2a, 0xb9, 0x6d, 0x67, 0x81, 0xcc, 0x15, 0xdf, 0x72, 0xc7, 0x62, - 0xe6, 0x43, 0xa0, 0x4f, 0x3a, 0x76, 0xda, 0x9e, 0xb5, 0x8c, 0x10, 0x67, - 0x77, 0x7b, 0xd4, 0xd6, 0x3c, 0xf2, 0x31, 0xec, 0xf7, 0x04, 0x2d, 0x84, - 0xde, 0xba, 0x93, 0x61, 0xca, 0x5a, 0xb8, 0x5c, 0x8b, 0x11, 0xa0, 0x8d, - 0x1b, 0xe7, 0xb0, 0x56, 0x03, 0x66, 0x6f, 0x24, 0x61, 0x4b, 0x79, 0x83, - 0x72, 0x87, 0x2a, 0x55, 0x76, 0x1c, 0x55, 0x3e, 0x0a, 0xfe, 0xac, 0x9e, - 0x5f, 0xcb, 0xe6, 0x01, 0xc5, 0xec, 0x73, 0xc0, 0xec, 0x6e, 0xb5, 0xd1, - 0x26, 0x7f, 0xab, 0xbe, 0x96, 0xf2, 0x06, 0xd4, 0x52, 0x0b, 0xc1, 0x40, - 0xd8, 0x32, 0xb6, 0xf0, 0x6c, 0xf5, 0xd2, 0xbb, 0x8b, 0x6b, 0x2a, 0x04, - 0xf9, 0x2e, 0xeb, 0xd7, 0x2c, 0x6f, 0xf7, 0x2f, 0x45, 0x6b, 0x3a, 0xf8, - 0xe2, 0x3f, 0x19, 0x97, 0x77, 0x9b, 0x98, 0xee, 0x3a, 0x31, 0xe5, 0xa2, - 0x90, 0xa2, 0x96, 0x92, 0x36, 0x27, 0x23, 0xf2, 0x46, 0x90, 0xe0, 0x95, - 0xf1, 0xad, 0x23, 0xb9, 0x9e, 0xbd, 0x51, 0xaa, 0x51, 0xcb, 0x11, 0xf2, - 0x8d, 0xe2, 0x6d, 0x1a, 0x2e, 0x0c, 0xcb, 0x38, 0xb0, 0xa8, 0xf1, 0x10, - 0x85, 0x31, 0x32, 0xaf, 0x2a, 0x81, 0x21, 0xf0, 0x6b, 0xe2, 0x94, 0x1a, - 0x42, 0x5e, 0xe2, 0x5d, 0xf7, 0x14, 0x36, 0x8d, 0x52, 0xe9, 0xf2, 0x3a, - 0x98, 0x66, 0x58, 0x4f, 0xbf, 0x89, 0x98, 0x0e, 0xe6, 0x24, 0x3e, 0xb9, - 0xea, 0xac, 0x9d, 0x96, 0x0b, 0x62, 0x46, 0xc6, 0xf5, 0x22, 0x29, 0x1c, - 0x4e, 0xcc, 0x28, 0x88, 0x14, 0xcf, 0x14, 0xcb, 0x4f, 0xf2, 0x6e, 0xc4, - 0xda, 0x4a, 0x4c, 0x90, 0x17, 0x30, 0x65, 0xfc, 0xf0, 0x79, 0xc4, 0x7e, - 0x78, 0x12, 0xa1, 0xa3, 0x48, 0x99, 0xbd, 0xc5, 0x11, 0x66, 0xee, 0x82, - 0x69, 0xa2, 0x75, 0x65, 0xa1, 0xf0, 0x42, 0x16, 0x6d, 0x5b, 0x04, 0xd1, - 0xdc, 0x2a, 0xb1, 0xc6, 0x0a, 0x61, 0x96, 0xc1, 0x0b, 0x13, 0xec, 0x0c, - 0xec, 0xa3, 0x3e, 0xb1, 0x8d, 0xd3, 0x20, 0x02, 0x4e, 0xb5, 0x4f, 0x2d, - 0xd8, 0x6a, 0x8d, 0x39, 0x69, 0x2f, 0x6b, 0x0f, 0x5c, 0xaa, 0xd8, 0x03, - 0x5a, 0xb1, 0x16, 0x01, 0x0d, 0xbe, 0x16, 0x99, 0x38, 0x4a, 0xcf, 0xa8, - 0x46, 0xe9, 0x5f, 0x43, 0x71, 0x3f, 0x6d, 0xae, 0xba, 0xbf, 0xfd, 0x61, - 0x6f, 0xab, 0x80, 0xb7, 0xda, 0xce, 0x10, 0xa8, 0x9f, 0xa8, 0xb7, 0x19, - 0xb9, 0xdc, 0x28, 0x34, 0xc2, 0x04, 0x0f, 0x6d, 0xc8, 0x87, 0x35, 0xe4, - 0x83, 0x0d, 0x18, 0x22, 0xb8, 0x94, 0x3d, 0xd9, 0x78, 0x19, 0x40, 0xbf, - 0x20, 0x90, 0x5a, 0xb2, 0x59, 0x15, 0xc5, 0xd6, 0x99, 0x79, 0x45, 0xd2, - 0xc9, 0x9a, 0x1c, 0xeb, 0xe2, 0x37, 0xc2, 0x36, 0x51, 0xc9, 0x41, 0xe0, - 0xde, 0x5a, 0xe6, 0xbc, 0xde, 0xff, 0xa5, 0x9e, 0x3a, 0x70, 0x02, 0x15, - 0x0d, 0xa6, 0x29, 0x4c, 0xba, 0xb9, 0xa8, 0x88, 0x7d, 0x55, 0xef, 0x26, - 0x2b, 0x70, 0xa7, 0xd3, 0x1c, 0x9b, 0xfc, 0x17, 0xf7, 0x16, 0xd3, 0xd3, - 0xe6, 0x3a, 0x27, 0x88, 0xa5, 0x22, 0xdb, 0x1e, 0xcd, 0x88, 0x58, 0x97, - 0xa0, 0x2d, 0x6e, 0xee, 0x1b, 0x71, 0x68, 0x7b, 0x2b, 0x89, 0x48, 0x1e, - 0x77, 0x68, 0xd8, 0x91, 0x8c, 0xef, 0x72, 0xf4, 0x32, 0xc5, 0x7e, 0xc5, - 0x94, 0xf7, 0x2b, 0x40, 0x0e, 0x03, 0x12, 0xa3, 0x61, 0x5b, 0x46, 0xaa, - 0x4c, 0xb1, 0x15, 0x95, 0x2e, 0x9e, 0x9b, 0x2d, 0x9e, 0x3b, 0x78, 0xd4, - 0xe7, 0x53, 0xba, 0x93, 0xa8, 0x36, 0xc4, 0x2f, 0x5f, 0x47, 0xee, 0xaf, - 0x53, 0x9f, 0xd2, 0x38, 0x48, 0x9e, 0x89, 0x1d, 0x42, 0xa9, 0xa5, 0xcd, - 0x17, 0x41, 0x1d, 0xce, 0x83, 0xe8, 0x1c, 0x10, 0xc8, 0x5b, 0x05, 0xf8, - 0xac, 0xbe, 0x44, 0x0f, 0x43, 0xff, 0xc5, 0x0d, 0x92, 0xfb, 0x0e, 0xdd, - 0x76, 0xb3, 0xd4, 0xab, 0x38, 0x3d, 0xe5, 0xfc, 0xcf, 0x09, 0x5f, 0xe7, - 0x85, 0xf3, 0xbd, 0x63, 0xe9, 0xe9, 0xcb, 0x67, 0xf3, 0xc2, 0xd7, 0x2b, - 0xbf, 0xff, 0xa1, 0x39, 0xbc, 0xc3, 0x16, 0xc1, 0x5a, 0x04, 0xa9, 0xba, - 0x64, 0x7a, 0x0d, 0x3b, 0x8e, 0x93, 0x4f, 0xf7, 0x02, 0xad, 0xe3, 0x67, - 0xb5, 0xbc, 0x65, 0x9e, 0x42, 0x3c, 0xd7, 0x6a, 0x29, 0x93, 0x6b, 0x55, - 0x65, 0x96, 0x42, 0x6f, 0x75, 0x2a, 0x7f, 0xa8, 0x04, 0xfe, 0x78, 0xc9, - 0x1d, 0xfe, 0x2b, 0x95, 0xf7, 0xa2, 0x2c, 0x90, 0xcd, 0x40, 0x5e, 0x10, - 0x5c, 0xf7, 0x66, 0xf5, 0x4a, 0x40, 0x15, 0x42, 0x0a, 0x74, 0x37, 0x7f, - 0x3e, 0x74, 0x1a, 0xcb, 0x72, 0xd5, 0xa1, 0x8e, 0x8a, 0xe0, 0x62, 0x26, - 0x2a, 0xa0, 0x86, 0xeb, 0xeb, 0x1a, 0xd6, 0x52, 0xd1, 0x6e, 0xf8, 0xa2, - 0x36, 0x60, 0x13, 0x92, 0x49, 0x4c, 0x53, 0x2a, 0x22, 0xd1, 0x91, 0x21, - 0x53, 0x2a, 0x33, 0x5e, 0x58, 0x16, 0x13, 0x20, 0xb4, 0x79, 0xad, 0xc4, - 0x4b, 0xcc, 0xa0, 0xc6, 0xa8, 0x9b, 0x74, 0x19, 0x19, 0xae, 0xe1, 0x10, - 0x47, 0xbf, 0xaf, 0xb2, 0xc8, 0x57, 0xa7, 0x4f, 0x16, 0x6e, 0xec, 0xf0, - 0x04, 0xba, 0xb4, 0x0a, 0xcc, 0xb0, 0xf3, 0x64, 0x87, 0x8e, 0x06, 0xb9, - 0xd1, 0x44, 0xc2, 0x6e, 0xa1, 0x08, 0x1d, 0x83, 0x50, 0xcb, 0x1d, 0xf0, - 0x83, 0x5f, 0x3f, 0xd6, 0x06, 0xd4, 0xe7, 0xd6, 0xbb, 0x14, 0x88, 0x8c, - 0xb5, 0xf8, 0x91, 0xd1, 0x00, 0x17, 0x74, 0xec, 0x69, 0x80, 0x06, 0x70, - 0xfa, 0xe2, 0xc4, 0xbd, 0x25, 0x82, 0x6d, 0xec, 0xbc, 0xb4, 0x80, 0xea, - 0x2a, 0xd9, 0xc2, 0xef, 0x61, 0xbf, 0x8d, 0x00, 0x83, 0x85, 0x25, 0x43, - 0x9c, 0x89, 0x0c, 0x29, 0x20, 0x3a, 0x89, 0x20, 0xd4, 0xd2, 0xad, 0xb9, - 0x31, 0x84, 0xce, 0x7a, 0x62, 0xd5, 0x71, 0x40, 0x6c, 0x2d, 0xa1, 0xe6, - 0x96, 0x00, 0xb5, 0x50, 0xa2, 0x9d, 0x03, 0x97, 0x2a, 0xc4, 0x9f, 0xaa, - 0x3a, 0x54, 0x75, 0x92, 0x53, 0x69, 0x81, 0xae, 0xc6, 0xc3, 0xa0, 0x74, - 0x68, 0x2b, 0xba, 0x46, 0xeb, 0xcd, 0x6b, 0x26, 0xac, 0x62, 0xe0, 0xb3, - 0xb9, 0x76, 0x2f, 0x3a, 0xdc, 0x44, 0xcf, 0x84, 0xe0, 0x12, 0x29, 0xdc, - 0xbd, 0x38, 0x0d, 0x4b, 0x46, 0x3b, 0xab, 0xab, 0x59, 0x1c, 0x27, 0xf7, - 0x8b, 0x9f, 0xc2, 0xbc, 0x43, 0x07, 0xb1, 0x98, 0x93, 0x9d, 0x7b, 0x0b, - 0x81, 0x85, 0x3c, 0x67, 0x3e, 0x9b, 0x02, 0x7b, 0x88, 0xd8, 0x31, 0xb1, - 0x8e, 0xea, 0x84, 0xa8, 0x02, 0xf9, 0x10, 0x38, 0x35, 0x3f, 0xcc, 0x25, - 0xaf, 0x2e, 0xa6, 0x74, 0x82, 0x04, 0x17, 0xf0, 0xaf, 0xde, 0x33, 0x34, - 0xa2, 0x46, 0xf1, 0xc6, 0x80, 0x8b, 0x96, 0xdd, 0xbf, 0x64, 0x26, 0x6b, - 0x26, 0x3c, 0x72, 0xea, 0x6a, 0x3a, 0xc8, 0x4c, 0x8b, 0x2c, 0xc9, 0x96, - 0xca, 0x32, 0x16, 0x1b, 0x64, 0x2f, 0x5d, 0xee, 0x90, 0x98, 0xeb, 0x3e, - 0xf9, 0xca, 0x1d, 0x34, 0xac, 0x9b, 0x0a, 0xa5, 0x09, 0x41, 0x53, 0xa7, - 0xf1, 0x5f, 0x27, 0xcb, 0x82, 0xcf, 0xe2, 0x49, 0x5a, 0x54, 0x85, 0x9d, - 0xaf, 0x12, 0x27, 0x03, 0x36, 0xe2, 0xf0, 0xd2, 0x25, 0x21, 0x49, 0x5d, - 0x03, 0x6e, 0xd7, 0x72, 0xba, 0x5a, 0xeb, 0x10, 0xa7, 0x3d, 0xb2, 0xe4, - 0xcd, 0x99, 0xf0, 0x1a, 0x15, 0x76, 0xb7, 0x07, 0x92, 0x5d, 0x0e, 0xb8, - 0xf1, 0xeb, 0xe2, 0x59, 0x89, 0x88, 0x9f, 0x8a, 0xe0, 0x10, 0x98, 0xce, - 0x13, 0xea, 0xac, 0x9b, 0x1c, 0xf9, 0xaf, 0xbb, 0x54, 0xa8, 0x1c, 0xda, - 0x83, 0xed, 0x90, 0xe3, 0x16, 0xec, 0xcf, 0xb9, 0x8c, 0xd3, 0x60, 0xbc, - 0x04, 0x2a, 0xda, 0xb5, 0x18, 0x02, 0x2a, 0x84, 0x12, 0x60, 0xb8, 0xf3, - 0x29, 0xe3, 0xde, 0x27, 0x7f, 0x64, 0x3e, 0x10, 0x3b, 0xd0, 0xd2, 0x76, - 0x7c, 0xf1, 0x61, 0xff, 0xfc, 0x98, 0x74, 0x02, 0xd0, 0xce, 0x9f, 0xc9, - 0xb8, 0xfe, 0xcc, 0xf5, 0x0e, 0x81, 0x2c, 0x7d, 0x86, 0x52, 0x69, 0x22, - 0x60, 0xb2, 0x4a, 0x27, 0x8c, 0x8f, 0x11, 0x98, 0x87, 0x5f, 0xdc, 0xa9, - 0xc5, 0xc3, 0x8c, 0x78, 0xe4, 0x36, 0xfc, 0xa8, 0x57, 0x4e, 0xc7, 0xfa, - 0xeb, 0xe7, 0xf0, 0xa1, 0xd1, 0xa0, 0xc4, 0x3c, 0x12, 0xe8, 0x93, 0x01, - 0xec, 0x20, 0x13, 0xe7, 0xa1, 0xa0, 0x73, 0x53, 0xe6, 0x29, 0xe4, 0xb9, - 0x5a, 0xa6, 0x94, 0xd8, 0xe1, 0x2c, 0x1d, 0x52, 0x21, 0x76, 0x96, 0xc5, - 0xe7, 0xfe, 0x38, 0x68, 0x18, 0xc8, 0x0a, 0x1e, 0x4d, 0x4b, 0xe4, 0x80, - 0x8a, 0x6b, 0x9d, 0xb6, 0x50, 0x3a, 0x77, 0x94, 0x50, 0xed, 0x8f, 0x8c, - 0xe1, 0x5f, 0x17, 0x0b, 0x65, 0x83, 0x08, 0x61, 0x6a, 0xa4, 0x17, 0xee, - 0x81, 0x2f, 0xde, 0x57, 0xbf, 0xf4, 0x9c, 0xcb, 0x03, 0x4c, 0xd1, 0x22, - 0x49, 0xd8, 0x54, 0xfd, 0xcb, 0x2d, 0x38, 0xec, 0xe2, 0x99, 0x5e, 0x42, - 0x3a, 0x88, 0x99, 0x9b, 0xad, 0xa8, 0x26, 0x33, 0xd9, 0x30, 0x2a, 0xb2, - 0x12, 0xc5, 0x0f, 0xee, 0x57, 0x55, 0xc0, 0xdf, 0x5f, 0x4a, 0xd8, 0x02, - 0x70, 0x96, 0x86, 0x7d, 0x24, 0x3d, 0xfa, 0xe8, 0xf0, 0x03, 0x55, 0x6f, - 0x9b, 0x5a, 0xbc, 0xdd, 0xb0, 0x70, 0x1b, 0xf9, 0xc3, 0xef, 0x5d, 0xb1, - 0xb3, 0x9a, 0x0e, 0x66, 0xf5, 0xf8, 0xe0, 0x7f, 0x9d, 0xe5, 0x63, 0x81, - 0x8d, 0xa4, 0x26, 0x1e, 0xbb, 0x72, 0xcf, 0x98, 0x59, 0xee, 0xdb, 0xc4, - 0x32, 0xa4, 0x3e, 0xd1, 0xce, 0x51, 0xca, 0x74, 0x1b, 0x66, 0x44, 0x9c, - 0xe4, 0x5f, 0xaf, 0x7a, 0x3c, 0x47, 0xf7, 0x39, 0x79, 0xd7, 0x5b, 0xc6, - 0x6d, 0x40, 0x8d, 0xc1, 0xfb, 0x3d, 0x74, 0x52, 0x13, 0x9d, 0x8e, 0xf8, - 0x98, 0xe9, 0xd7, 0x87, 0xdd, 0xc0, 0xf4, 0x79, 0xca, 0x09, 0x50, 0x4f, - 0x5a, 0x93, 0x97, 0x12, 0x13, 0x2d, 0xde, 0xfa, 0x3b, 0x12, 0xc8, 0x7f, - 0x29, 0x8b, 0xf9, 0x89, 0x23, 0x30, 0x79, 0xe3, 0xf9, 0x89, 0xdb, 0xb4, - 0xf2, 0x4c, 0xc7, 0x4c, 0x3b, 0x96, 0x46, 0x7e, 0x70, 0x40, 0x79, 0x31, - 0x49, 0x6a, 0x56, 0x85, 0xd0, 0x94, 0x15, 0xfb, 0x96, 0x69, 0x8c, 0xc0, - 0x70, 0x65, 0xfa, 0xbd, 0xe5, 0x8f, 0x92, 0x1e, 0xcf, 0x43, 0xfa, 0x4f, - 0xb3, 0xd0, 0x9b, 0xa9, 0x87, 0xe5, 0x1d, 0xe8, 0x2d, 0xce, 0xc7, 0x80, - 0x74, 0x43, 0xb0, 0xac, 0xb6, 0x79, 0x0b, 0x84, 0xed, 0x7d, 0x86, 0xb4, - 0xc2, 0x96, 0xed, 0x83, 0x62, 0xdb, 0xc8, 0x85, 0xf3, 0x9c, 0xb2, 0x42, - 0xa5, 0x29, 0x7e, 0x9f, 0x27, 0x06, 0x89, 0xe2, 0x92, 0x86, 0x45, 0xa6, - 0x3b, 0x45, 0x67, 0x39, 0xb0, 0x22, 0xc5, 0xf2, 0x5b, 0x57, 0x49, 0x46, - 0x4e, 0x15, 0xf8, 0x2b, 0xc7, 0x63, 0x02, 0x67, 0xcc, 0x0d, 0xdc, 0xc3, - 0xc5, 0x1a, 0x94, 0x4e, 0x1e, 0xee, 0xe0, 0x1e, 0x6e, 0xc7, 0xee, 0x48, - 0xa1, 0x2b, 0x36, 0x4e, 0x3b, 0x92, 0x11, 0x20, 0xd1, 0x1b, 0xda, 0x31, - 0x5f, 0x48, 0x5e, 0x7b, 0xd3, 0x79, 0x38, 0x80, 0xbc, 0xcf, 0x16, 0x22, - 0x7e, 0x45, 0x76, 0xd9, 0x8b, 0x6e, 0xb2, 0x17, 0xec, 0xb1, 0x97, 0xff, - 0x9d, 0x5c, 0x40, 0x61, 0xa9, 0x6f, 0x51, 0x74, 0x1c, 0x2a, 0xbb, 0xd7, - 0xe4, 0x71, 0x1f, 0xbc, 0xc9, 0x0a, 0xfe, 0x10, 0x85, 0x5a, 0x55, 0x32, - 0xad, 0x63, 0xd1, 0x32, 0xc6, 0x5f, 0xeb, 0x96, 0xfd, 0x4b, 0x60, 0x9e, - 0x36, 0xdf, 0x2b, 0x22, 0x4b, 0x81, 0xfa, 0xd3, 0xa3, 0x1b, 0x0c, 0x51, - 0xba, 0x4a, 0x06, 0xd4, 0x73, 0xe7, 0xe2, 0xc2, 0x0a, 0x40, 0xd3, 0x1e, - 0xae, 0xf2, 0x36, 0x2e, 0xb8, 0x00, 0x14, 0x9e, 0xc8, 0xa0, 0x6e, 0x2f, - 0x72, 0xa3, 0x4c, 0x27, 0xff, 0x1c, 0xf3, 0xe9, 0x60, 0x88, 0x01, 0x8b, - 0x3d, 0x81, 0xd7, 0x26, 0xf1, 0xab, 0xe5, 0xf8, 0xa6, 0xde, 0xff, 0xad, - 0xfc, 0x14, 0x5d, 0xb1, 0x94, 0x9f, 0x8f, 0xd4, 0x78, 0x1f, 0x33, 0x50, - 0x12, 0xff, 0x40, 0x05, 0x8d, 0xc4, 0x06, 0x90, 0x29, 0x07, 0x11, 0x0b, - 0x69, 0xf6, 0x63, 0xed, 0xd9, 0x4f, 0xb3, 0x45, 0x67, 0x0d, 0x92, 0x55, - 0x64, 0x01, 0x57, 0x39, 0xc2, 0xc3, 0xbe, 0xf0, 0xc8, 0x9f, 0x2a, 0xbf, - 0x4f, 0x09, 0xfb, 0x2c, 0x2e, 0x2a, 0x03, 0xa2, 0x4a, 0x9b, 0x89, 0x43, - 0x2d, 0x5e, 0xa6, 0x7c, 0xfb, 0xce, 0x4f, 0xa6, 0x5f, 0xd8, 0x80, 0x79, - 0x83, 0x94, 0xff, 0x2d, 0xab, 0x2b, 0x1a, 0x55, 0xff, 0x99, 0x2c, 0x23, - 0x1d, 0x69, 0xdf, 0x99, 0xc5, 0x54, 0x21, 0x81, 0x56, 0x20, 0x90, 0x8d, - 0x25, 0x81, 0x35, 0x70, 0xde, 0xf9, 0xec, 0xf4, 0xcb, 0xde, 0x77, 0xd5, - 0x43, 0x76, 0x20, 0x9d, 0x1f, 0x75, 0xe8, 0xba, 0xde, 0x40, 0x9a, 0x95, - 0x12, 0xca, 0x43, 0x7f, 0x9b, 0x29, 0x7b, 0x25, 0x2d, 0x98, 0x8f, 0x28, - 0xf6, 0x84, 0x9b, 0xfb, 0x4b, 0xe7, 0x10, 0x20, 0xa5, 0x78, 0x48, 0x0b, - 0x11, 0x70, 0x34, 0x41, 0x7c, 0xc3, 0x63, 0xd1, 0x49, 0xc1, 0x3c, 0xa8, - 0x61, 0x78, 0x45, 0x96, 0x1a, 0xb0, 0x84, 0xec, 0xf9, 0x3b, 0x04, 0xd4, - 0x78, 0xed, 0x26, 0x31, 0x9a, 0xa6, 0xdf, 0x2c, 0x79, 0x5d, 0x28, 0x08, - 0xb0, 0xc1, 0x8f, 0xac, 0xde, 0x3f, 0x43, 0xf8, 0x69, 0xbd, 0x36, 0xd1, - 0xf5, 0x4b, 0x84, 0xfb, 0x6b, 0xce, 0x3e, 0xf2, 0x3f, 0x57, 0x6a, 0xfb, - 0xc8, 0x0d, 0x25, 0x99, 0x15, 0x83, 0x7f, 0x9d, 0x7b, 0x33, 0xbc, 0x55, - 0x49, 0xf0, 0xb3, 0xef, 0x2f, 0x76, 0x3e, 0xbf, 0x1e, 0x2c, 0x48, 0x6a, - 0xfa, 0x63, 0x65, 0xcc, 0xcb, 0xfd, 0x5b, 0x1f, 0xdc, 0x75, 0x2b, 0xaf, - 0xa3, 0x23, 0x21, 0xd6, 0x78, 0x07, 0x1c, 0x21, 0x01, 0xec, 0x0c, 0x4a, - 0xf0, 0x64, 0xb1, 0x0f, 0x97, 0x2b, 0xea, 0x8b, 0xd8, 0xdb, 0x87, 0x3f, - 0x13, 0x07, 0x2b, 0xac, 0x47, 0x44, 0xc1, 0x22, 0x73, 0xe8, 0x4c, 0x5e, - 0x70, 0x1a, 0x9f, 0xd6, 0x29, 0x00, 0x2d, 0x89, 0x52, 0xed, 0x30, 0x13, - 0x58, 0xe6, 0x5c, 0xc2, 0x64, 0x17, 0x0b, 0xcb, 0x70, 0xbd, 0x67, 0x9c, - 0x70, 0x31, 0x3f, 0xed, 0xed, 0x7e, 0xf9, 0x79, 0xc3, 0x1d, 0x89, 0x17, - 0xe4, 0xf0, 0x02, 0x36, 0x25, 0x7e, 0x30, 0x82, 0xfb, 0x08, 0x83, 0x84, - 0x95, 0xea, 0x99, 0xfa, 0xfc, 0xe9, 0x18, 0x4e, 0x11, 0x9a, 0xec, 0x33, - 0x4d, 0x5d, 0x1b, 0xce, 0x93, 0x0c, 0x73, 0xf8, 0xb5, 0x54, 0x7a, 0x20, - 0x53, 0x17, 0x2d, 0x6c, 0xac, 0x92, 0xb5, 0x0e, 0xb7, 0x75, 0x3a, 0x17, - 0x4b, 0xf2, 0xc7, 0xfa, 0xce, 0xf4, 0x13, 0x7d, 0x47, 0x87, 0x9c, 0xff, - 0x63, 0xeb, 0x3a, 0xb7, 0x5b, 0xd7, 0x79, 0xe5, 0xff, 0xf3, 0x96, 0x2e, - 0x8a, 0xad, 0x13, 0x49, 0xd4, 0x51, 0x71, 0xe2, 0xfd, 0xf4, 0x97, 0x83, - 0x99, 0x01, 0xe9, 0xfd, 0xdd, 0xb5, 0x12, 0x73, 0x40, 0xb1, 0xf7, 0x02, - 0x02, 0x7c, 0x25, 0xb7, 0xea, 0xf0, 0x41, 0x32, 0x92, 0x20, 0x04, 0xdd, - 0x0c, 0x52, 0x84, 0x6c, 0x97, 0x45, 0x35, 0x59, 0x0e, 0x66, 0xd0, 0x33, - 0xa1, 0xa5, 0xb9, 0xac, 0xd3, 0xa9, 0xf5, 0x09, 0x41, 0xb4, 0xca, 0xf3, - 0xe6, 0x7e, 0x78, 0xc6, 0x8c, 0x3d, 0x9d, 0x8f, 0x87, 0x5d, 0x3f, 0xfc, - 0x45, 0x1c, 0x0b, 0x75, 0x23, 0x77, 0x09, 0x56, 0x06, 0x80, 0x83, 0x16, - 0x57, 0x3b, 0xae, 0xa8, 0xe9, 0x8e, 0x48, 0x3a, 0x89, 0x66, 0x1d, 0xf9, - 0x83, 0x99, 0x5d, 0x20, 0x84, 0x79, 0xec, 0x42, 0xb6, 0x52, 0x42, 0x67, - 0xa7, 0x73, 0xce, 0x34, 0xe4, 0xa7, 0xf6, 0x6d, 0x8e, 0x94, 0xcf, 0xb1, - 0x04, 0x88, 0x17, 0xed, 0xf8, 0x55, 0x9f, 0x07, 0xf0, 0x87, 0x70, 0x86, - 0x77, 0x93, 0x4e, 0xf5, 0xea, 0x9b, 0xd1, 0x49, 0x35, 0x78, 0x82, 0x2f, - 0x4b, 0x77, 0x40, 0x10, 0xe0, 0xc0, 0xec, 0x56, 0x73, 0x93, 0xc9, 0x18, - 0x77, 0x17, 0xfa, 0xc9, 0x0b, 0xab, 0x30, 0x97, 0x30, 0x55, 0xaf, 0xe7, - 0x8b, 0x63, 0x48, 0x35, 0xdb, 0xd8, 0xd0, 0x88, 0xfc, 0x86, 0xec, 0xd6, - 0xe6, 0x50, 0x47, 0xeb, 0x33, 0x3a, 0x33, 0x9a, 0x06, 0xa7, 0x58, 0x22, - 0x2f, 0x6f, 0x7b, 0x0a, 0x9e, 0x45, 0xe7, 0x99, 0x44, 0x34, 0xa9, 0x1b, - 0x94, 0x19, 0xe8, 0x63, 0xdb, 0xaf, 0x91, 0xf2, 0x5a, 0xbb, 0xb5, 0xbd, - 0xe2, 0xda, 0x2a, 0xd6, 0xdc, 0x1a, 0x28, 0x8a, 0xb7, 0x24, 0x07, 0x55, - 0x21, 0xdf, 0x54, 0xe1, 0x12, 0xb7, 0xa8, 0x09, 0x15, 0xb7, 0xa0, 0x0a, - 0xe6, 0xcb, 0xe6, 0x6f, 0xe1, 0xb0, 0xe0, 0xe7, 0xf4, 0xaa, 0xae, 0xdc, - 0x1f, 0xf4, 0x01, 0x33, 0x7c, 0xdc, 0x1f, 0x70, 0xa6, 0x7b, 0xdb, 0x72, - 0x67, 0x67, 0x26, 0xde, 0x8b, 0xc0, 0x1f, 0x81, 0xe1, 0x70, 0x2e, 0x12, - 0x22, 0x83, 0x85, 0x1b, 0xac, 0x62, 0xe6, 0xec, 0x62, 0x2e, 0x98, 0x32, - 0x52, 0x1a, 0x72, 0x05, 0xdf, 0xa3, 0x16, 0x13, 0x01, 0xdb, 0x7c, 0x42, - 0x32, 0xb7, 0xe5, 0x45, 0xaf, 0xeb, 0x60, 0x62, 0xb1, 0x41, 0xa4, 0x60, - 0x43, 0x0e, 0x11, 0x0c, 0xbd, 0x46, 0x2c, 0xe2, 0x72, 0x2d, 0xdf, 0x58, - 0x09, 0x16, 0x95, 0xc5, 0x77, 0x9c, 0x6e, 0x15, 0x97, 0x48, 0x94, 0x42, - 0x34, 0xbe, 0x12, 0xfc, 0xab, 0xf2, 0x52, 0x71, 0xab, 0x05, 0x4a, 0x5b, - 0xa0, 0x19, 0x6f, 0x5c, 0x54, 0x13, 0x53, 0x6d, 0x20, 0x6f, 0x33, 0xfa, - 0x84, 0x94, 0xa5, 0x48, 0xc0, 0x14, 0x2b, 0xc2, 0xd2, 0xec, 0xb5, 0xf8, - 0x2a, 0xd2, 0x36, 0x0a, 0x40, 0x87, 0x38, 0xe7, 0x34, 0x50, 0x26, 0x02, - 0xb2, 0x74, 0x26, 0x6d, 0x40, 0x04, 0x14, 0x44, 0x37, 0x1f, 0x55, 0xea, - 0x64, 0x71, 0x4c, 0x6f, 0xae, 0x34, 0x00, 0xee, 0xc3, 0xa4, 0xeb, 0x61, - 0x50, 0x78, 0x01, 0x95, 0x58, 0x5c, 0x25, 0xc0, 0x62, 0x87, 0x4c, 0xc8, - 0xd0, 0xdf, 0x1d, 0x53, 0x2f, 0x28, 0x1d, 0x6d, 0x56, 0x78, 0xe5, 0x79, - 0x70, 0x45, 0x18, 0x29, 0x07, 0xbd, 0x16, 0x11, 0xd9, 0x7d, 0x71, 0x64, - 0x37, 0x1c, 0x20, 0x2b, 0xd0, 0xee, 0x79, 0x91, 0xa9, 0xa1, 0xc1, 0xf4, - 0xa1, 0x86, 0x5e, 0x51, 0x7f, 0x56, 0x0f, 0xfa, 0x7d, 0x9b, 0xfc, 0xe9, - 0x7d, 0x3c, 0x2f, 0xae, 0x8d, 0xa0, 0x92, 0x30, 0x8b, 0x0e, 0x60, 0xb3, - 0x1c, 0x77, 0x5d, 0xf2, 0x81, 0x68, 0x91, 0xe1, 0xd1, 0x9e, 0x9c, 0x7c, - 0x95, 0x91, 0xbe, 0x1e, 0xf1, 0x30, 0xd3, 0x2e, 0x70, 0x3b, 0xb0, 0x3b, - 0xcd, 0xbe, 0x1d, 0x00, 0x1c, 0x96, 0xce, 0xbe, 0xb6, 0x4d, 0x82, 0xf6, - 0xa8, 0x46, 0x94, 0xc2, 0x6c, 0x6d, 0xe8, 0x6d, 0x2e, 0x80, 0x0a, 0xf1, - 0x7e, 0x83, 0xd3, 0x11, 0x08, 0x71, 0x04, 0x09, 0xc6, 0x35, 0x66, 0xc5, - 0xd4, 0x5a, 0x24, 0x64, 0x8f, 0x9c, 0xee, 0x32, 0x7e, 0xb2, 0x02, 0xe4, - 0x71, 0x5b, 0xda, 0xc8, 0xf5, 0x92, 0x73, 0x1c, 0x08, 0x5d, 0x3d, 0x03, - 0x76, 0x1e, 0x92, 0x65, 0xbd, 0xe2, 0x95, 0xf2, 0x56, 0x03, 0xe6, 0x5d, - 0x16, 0x08, 0xdc, 0x0b, 0x08, 0x65, 0x2d, 0xc5, 0x61, 0x6d, 0x3a, 0xf0, - 0x59, 0x0e, 0x09, 0x4d, 0xa0, 0x20, 0x78, 0x38, 0x63, 0x64, 0x27, 0x45, - 0x76, 0xf9, 0x31, 0x43, 0xd2, 0xc5, 0x6e, 0x85, 0xfb, 0x90, 0x09, 0xdb, - 0x87, 0xb5, 0xa5, 0x66, 0xcf, 0x46, 0xb9, 0xc7, 0x85, 0xf3, 0x85, 0x38, - 0x79, 0xa0, 0x44, 0xe4, 0xf9, 0x79, 0xd0, 0xf9, 0x52, 0x01, 0x27, 0x9a, - 0xf9, 0x68, 0xab, 0x23, 0x54, 0x34, 0x47, 0x6b, 0x23, 0x47, 0xd6, 0x62, - 0x9e, 0x0d, 0x03, 0xbf, 0xdd, 0xdc, 0xcf, 0x65, 0xc7, 0xb9, 0xf4, 0xc5, - 0x5d, 0xd0, 0xcc, 0x56, 0x80, 0x75, 0x2b, 0x37, 0x81, 0xeb, 0x84, 0xa5, - 0xf6, 0xa7, 0x50, 0xd9, 0x18, 0x71, 0x78, 0xcf, 0x47, 0x84, 0x35, 0x33, - 0xd9, 0x9f, 0xe7, 0x19, 0x3c, 0xbc, 0xfd, 0x43, 0xce, 0x32, 0xab, 0x64, - 0x16, 0xa8, 0x1c, 0x41, 0x3c, 0x6d, 0x46, 0x4c, 0xe1, 0x2e, 0x2b, 0x18, - 0x35, 0xe2, 0xc5, 0xb4, 0x40, 0xf8, 0x5c, 0xf8, 0xa2, 0x15, 0x92, 0x08, - 0xd7, 0xe2, 0xed, 0x64, 0xf1, 0x76, 0xb2, 0x82, 0xe0, 0x8a, 0xc5, 0x2d, - 0xca, 0x13, 0x86, 0xb6, 0xf3, 0x15, 0x8c, 0x9c, 0x26, 0x21, 0x2d, 0x9f, - 0x36, 0xeb, 0x3b, 0xd9, 0x70, 0x41, 0x38, 0x80, 0x08, 0x4e, 0x63, 0xc5, - 0x7a, 0x4e, 0x79, 0x05, 0x9c, 0x84, 0xa3, 0x14, 0xaf, 0x20, 0x64, 0xc5, - 0xcb, 0x6a, 0xf3, 0x06, 0xaf, 0x6c, 0xdc, 0x62, 0x96, 0xcd, 0xe9, 0xda, - 0x5a, 0x71, 0x98, 0x33, 0xbf, 0x88, 0x7b, 0xa1, 0x98, 0x7b, 0x81, 0xac, - 0xec, 0x21, 0x84, 0x9c, 0x7d, 0xc4, 0x1e, 0x42, 0x76, 0x37, 0x6b, 0x36, - 0x30, 0x9b, 0xd7, 0x16, 0x73, 0x83, 0xc3, 0x0f, 0x91, 0x9d, 0xa9, 0xd5, - 0x37, 0x00, 0x87, 0xe3, 0xcd, 0xb7, 0xbd, 0x40, 0xdc, 0x53, 0x15, 0xc8, - 0x6b, 0x38, 0x14, 0x38, 0xee, 0x36, 0xf5, 0x59, 0xaf, 0x09, 0x25, 0x81, - 0xc6, 0xe1, 0xb4, 0x2c, 0x9b, 0xd3, 0x1f, 0x40, 0x49, 0x3f, 0x26, 0xa7, - 0x1d, 0x72, 0x42, 0x61, 0x40, 0xe8, 0xa4, 0x13, 0x55, 0x89, 0x77, 0x86, - 0x73, 0x62, 0xd7, 0xe9, 0xe6, 0x11, 0xa5, 0x9e, 0x2a, 0x08, 0x3e, 0x54, - 0x0e, 0xa4, 0xdc, 0x1e, 0x81, 0x78, 0x10, 0x99, 0x30, 0x4a, 0x61, 0xf7, - 0x92, 0xa4, 0xd3, 0x8c, 0xb7, 0x42, 0xd2, 0x37, 0xf7, 0xec, 0x44, 0x0a, - 0x02, 0x30, 0xb6, 0xba, 0xc5, 0xec, 0x1c, 0x38, 0x38, 0xbf, 0xde, 0x0b, - 0xf5, 0x98, 0x07, 0x75, 0x1b, 0xac, 0x50, 0x3f, 0x48, 0xd9, 0x4e, 0xd8, - 0xbf, 0xb1, 0x5d, 0x43, 0x5f, 0xf9, 0xa2, 0x1b, 0x13, 0x10, 0xe9, 0x73, - 0x69, 0x4f, 0x81, 0x82, 0x84, 0x3a, 0x21, 0x7f, 0x2b, 0x5b, 0xda, 0xa3, - 0x01, 0x8a, 0x31, 0x86, 0x24, 0x8e, 0x12, 0xfe, 0xa6, 0xec, 0x6f, 0xed, - 0x79, 0x3d, 0x60, 0xb1, 0xc5, 0xe5, 0xef, 0x64, 0xe2, 0xe9, 0xc6, 0x10, - 0xd4, 0x87, 0xc3, 0x77, 0x8d, 0x9f, 0xad, 0x63, 0xc7, 0x52, 0xe5, 0xe9, - 0xf9, 0xa9, 0x52, 0x75, 0xff, 0x76, 0xa8, 0x1c, 0x2a, 0xb1, 0xf5, 0xde, - 0x7e, 0x33, 0xf0, 0x5f, 0x3f, 0x98, 0xac, 0xc4, 0x15, 0x6f, 0xb9, 0x78, - 0xe7, 0x0b, 0x0a, 0xaf, 0x14, 0xc7, 0x24, 0x86, 0xcb, 0x77, 0x08, 0x54, - 0x21, 0x85, 0x7e, 0x9c, 0xdf, 0xce, 0xdb, 0x2d, 0xe1, 0x74, 0x55, 0x1c, - 0xd7, 0x33, 0x34, 0xf4, 0x02, 0xde, 0x2e, 0xc3, 0x2d, 0xe1, 0xe2, 0x73, - 0xe3, 0xa0, 0xc0, 0x55, 0x77, 0x6b, 0x78, 0x69, 0x1f, 0xf8, 0xde, 0x88, - 0x18, 0x9a, 0x63, 0xbd, 0xb0, 0x0f, 0x9b, 0x9a, 0xf1, 0xed, 0x99, 0x6e, - 0xf9, 0x74, 0x18, 0xd0, 0xac, 0x75, 0x81, 0xbd, 0x55, 0x0d, 0x62, 0xab, - 0x1b, 0xc1, 0xc9, 0xf9, 0x4f, 0xd1, 0xc3, 0x41, 0xd4, 0x06, 0xb5, 0x18, - 0x81, 0x39, 0x30, 0x5d, 0x59, 0xde, 0xef, 0x72, 0x88, 0x5e, 0xee, 0xef, - 0xf6, 0x71, 0x81, 0xd6, 0xc1, 0x0c, 0x63, 0xf9, 0xef, 0x1c, 0xf6, 0x74, - 0x07, 0x46, 0x99, 0xe5, 0x68, 0x1f, 0x5f, 0xa9, 0x26, 0xc5, 0x16, 0xe7, - 0xe4, 0xe6, 0x7a, 0xdc, 0x5a, 0x0b, 0xbc, 0xf1, 0xad, 0x26, 0xd0, 0x36, - 0x1c, 0xad, 0xef, 0x1c, 0x29, 0x5a, 0x97, 0xc4, 0x79, 0x23, 0x2b, 0x06, - 0x89, 0xcc, 0x49, 0x4d, 0x90, 0x43, 0x32, 0xa7, 0x60, 0xc0, 0x14, 0x4c, - 0x4a, 0x92, 0x6a, 0xfc, 0xd9, 0x6f, 0x2a, 0xf9, 0x1a, 0xa6, 0xb2, 0xce, - 0x9d, 0xfb, 0xf1, 0x92, 0xd7, 0xf2, 0x24, 0x71, 0x9b, 0xf3, 0x68, 0x2d, - 0xeb, 0x0e, 0xce, 0xc8, 0x6c, 0xcd, 0xf7, 0x31, 0x04, 0x57, 0x3a, 0xf4, - 0xf1, 0xd1, 0xd2, 0x30, 0xc6, 0x8e, 0x64, 0x11, 0x81, 0x0b, 0x98, 0xd6, - 0xac, 0x93, 0xbe, 0x7d, 0x92, 0x2d, 0x92, 0x1d, 0x92, 0xc0, 0xcb, 0xcb, - 0xe9, 0x04, 0x13, 0xdc, 0xe8, 0x9a, 0x86, 0x10, 0xdb, 0xe2, 0x7c, 0xdf, - 0xb3, 0x04, 0xee, 0xef, 0x3d, 0x9e, 0xf5, 0x29, 0x8c, 0xb8, 0x85, 0x1c, - 0x55, 0xbb, 0xc3, 0x34, 0x74, 0x99, 0x34, 0xa5, 0xa6, 0x0f, 0xae, 0xf2, - 0x68, 0x2f, 0x8e, 0x7e, 0xc0, 0xd9, 0xf2, 0x9a, 0xd4, 0x36, 0x96, 0x4d, - 0xe8, 0x5c, 0x33, 0xb3, 0x9d, 0xe2, 0xac, 0x20, 0xa1, 0x44, 0x54, 0xad, - 0xb6, 0x6e, 0xac, 0x27, 0x67, 0xfd, 0x6b, 0xb8, 0x86, 0x9a, 0x5e, 0xe2, - 0x39, 0xd3, 0xfd, 0x35, 0x38, 0x35, 0x5f, 0xa5, 0x83, 0x2f, 0x87, 0xf7, - 0x80, 0xce, 0xa9, 0x51, 0x0b, 0x15, 0x90, 0xde, 0x95, 0x54, 0x4c, 0x09, - 0xa2, 0x86, 0xf6, 0x9c, 0x1c, 0x9c, 0xc0, 0xdb, 0xb8, 0xae, 0xc2, 0x58, - 0x5d, 0xfa, 0x85, 0x28, 0xc9, 0x82, 0x0e, 0xd4, 0xe8, 0x35, 0x2b, 0xf7, - 0x39, 0xfc, 0x5e, 0x56, 0xb7, 0xf2, 0x67, 0x0d, 0xa2, 0xdc, 0x2e, 0x73, - 0x86, 0x13, 0xca, 0x28, 0x13, 0xbb, 0x75, 0xd6, 0x85, 0x92, 0xb2, 0xfd, - 0x7c, 0xaf, 0x4b, 0x0e, 0x9a, 0x9d, 0x68, 0xcc, 0x35, 0xda, 0xd3, 0x73, - 0x10, 0xb0, 0xc7, 0xf1, 0xd6, 0x2a, 0x2b, 0x5e, 0x74, 0xab, 0xb2, 0xa9, - 0x92, 0xcd, 0xc4, 0x52, 0x87, 0x80, 0xe5, 0x92, 0x15, 0x39, 0x2e, 0xc9, - 0x34, 0x4c, 0x0a, 0x52, 0x2b, 0xff, 0x38, 0x12, 0xbc, 0x15, 0x39, 0x72, - 0x20, 0xf9, 0xf7, 0x7c, 0xe4, 0xa8, 0x87, 0x65, 0x95, 0xac, 0x27, 0xbc, - 0xc7, 0x7e, 0xcf, 0x49, 0x6d, 0xaf, 0x06, 0xdf, 0xcb, 0xe3, 0x83, 0x70, - 0x6d, 0x40, 0x38, 0xb1, 0xd1, 0xd2, 0x0f, 0xc2, 0x92, 0xfb, 0xe8, 0x0e, - 0xa9, 0xa9, 0x70, 0x3f, 0x6a, 0xf0, 0x97, 0x6c, 0xee, 0xf3, 0x85, 0x9a, - 0x39, 0x8d, 0xbb, 0x61, 0x77, 0x86, 0x1e, 0x81, 0x36, 0x19, 0xa5, 0x16, - 0x4b, 0x12, 0x5b, 0x56, 0x2e, 0x1e, 0x6a, 0xba, 0x9c, 0xe7, 0x8f, 0x81, - 0x1b, 0x94, 0x33, 0x83, 0x47, 0xcb, 0x97, 0xe1, 0xd5, 0x53, 0x1d, 0x5c, - 0x12, 0xf6, 0x4e, 0xce, 0x2e, 0xa8, 0xa1, 0x4d, 0x7a, 0x73, 0x08, 0x28, - 0x1a, 0xd2, 0xdd, 0x52, 0xfc, 0xa8, 0x8a, 0x24, 0xa4, 0x5d, 0x25, 0xb5, - 0x8d, 0x5d, 0xf0, 0x1f, 0xbd, 0x10, 0x79, 0x35, 0x53, 0x38, 0x48, 0x2c, - 0x46, 0x66, 0xc2, 0x50, 0x6d, 0xa0, 0xd2, 0xb2, 0xc2, 0x9f, 0x20, 0xde, - 0xb7, 0x96, 0x8a, 0xf7, 0xef, 0x70, 0x1f, 0xfc, 0x80, 0xb7, 0x59, 0xe8, - 0xb3, 0x5e, 0x57, 0x03, 0x0d, 0xb7, 0x2d, 0x7d, 0x91, 0x47, 0xb8, 0x51, - 0x39, 0x44, 0x10, 0x3e, 0xba, 0x0f, 0x1f, 0xae, 0x5a, 0x00, 0xc5, 0x63, - 0x4d, 0x45, 0x99, 0x30, 0xeb, 0x49, 0x05, 0xb6, 0xa6, 0xb4, 0xc0, 0xdd, - 0xd0, 0xd2, 0x74, 0x54, 0x91, 0x72, 0x88, 0xd9, 0xef, 0xa1, 0x9d, 0x28, - 0x1d, 0xc7, 0xac, 0x97, 0x6d, 0x3b, 0x95, 0xec, 0x04, 0x21, 0x4d, 0x26, - 0xc0, 0x9d, 0x90, 0x0d, 0x52, 0x39, 0xe9, 0x75, 0x6f, 0xd9, 0x49, 0xe5, - 0xcc, 0xd9, 0x3d, 0xd1, 0x15, 0xe5, 0x67, 0xba, 0x24, 0x8f, 0x73, 0x6e, - 0x50, 0x0f, 0x55, 0x83, 0x3c, 0xda, 0x24, 0xd8, 0x5f, 0xe5, 0x7e, 0x90, - 0x0e, 0x66, 0xe8, 0x06, 0xe2, 0x7c, 0xb6, 0x24, 0xbf, 0x1d, 0xa3, 0x3e, - 0xc9, 0xc6, 0x47, 0x0f, 0xfa, 0xd9, 0x77, 0xb6, 0x9e, 0x8d, 0x2b, 0xc8, - 0x6e, 0xe3, 0x03, 0x52, 0xfc, 0x01, 0x81, 0x8f, 0x67, 0xf7, 0x65, 0x3c, - 0xce, 0x31, 0xc7, 0xf1, 0xfe, 0xa4, 0xa9, 0x52, 0x1f, 0x0b, 0x4e, 0x91, - 0xaa, 0x97, 0x75, 0x43, 0xb7, 0xf3, 0x17, 0x6c, 0x8c, 0x72, 0x51, 0x97, - 0x54, 0xfb, 0xba, 0x1f, 0xee, 0xde, 0x2b, 0x84, 0x77, 0x1f, 0xef, 0xc4, - 0x6d, 0x5a, 0x5f, 0xcf, 0x10, 0x9d, 0x69, 0x4f, 0xe7, 0x34, 0x8b, 0xd9, - 0x31, 0xa8, 0xb5, 0xeb, 0xaf, 0x75, 0xef, 0x51, 0xdc, 0x3b, 0x20, 0x46, - 0x62, 0xce, 0x79, 0xad, 0x52, 0x99, 0x8c, 0x58, 0x7f, 0x25, 0x31, 0xdc, - 0xdc, 0x64, 0xb6, 0x61, 0x49, 0xb4, 0x9f, 0x5b, 0xd3, 0xa7, 0x47, 0xab, - 0x36, 0xf8, 0x6d, 0xcf, 0x3c, 0xd7, 0x0b, 0xaa, 0x7d, 0x28, 0x3c, 0x4a, - 0x00, 0xda, 0x73, 0xc5, 0xb4, 0xd5, 0xdc, 0x14, 0xd7, 0xdd, 0x7e, 0xb9, - 0xb5, 0x8a, 0xdc, 0x6f, 0x78, 0x9a, 0xee, 0x6b, 0x82, 0xb0, 0xa8, 0xad, - 0xa0, 0x35, 0xd4, 0x3a, 0x33, 0x6f, 0xd7, 0x33, 0xa9, 0xe1, 0xb2, 0xab, - 0x39, 0xef, 0xe3, 0x23, 0x67, 0x44, 0x61, 0x45, 0xb6, 0xaf, 0xbc, 0xf3, - 0x90, 0x97, 0xe0, 0x9d, 0xb3, 0xc3, 0xba, 0xe3, 0x79, 0xcc, 0xf9, 0xa5, - 0xad, 0xfb, 0xf6, 0x75, 0xca, 0x46, 0xb0, 0xfb, 0x01, 0xaf, 0xf0, 0xe1, - 0xbd, 0x53, 0x25, 0xcf, 0x75, 0x3d, 0xbb, 0x1e, 0xb8, 0x87, 0xb8, 0x11, - 0xbb, 0xc5, 0x73, 0x84, 0xf7, 0x3e, 0x26, 0x69, 0x01, 0x06, 0x41, 0xc4, - 0xf3, 0xbb, 0x46, 0x76, 0xab, 0x9c, 0xba, 0x5d, 0xc8, 0x8a, 0x39, 0x2e, - 0xb9, 0xb4, 0xd5, 0x23, 0x31, 0x13, 0x92, 0x68, 0x05, 0x0c, 0x26, 0xce, - 0x39, 0x09, 0xbc, 0xbd, 0x4e, 0x22, 0xf6, 0x73, 0xf6, 0x33, 0xe6, 0xa4, - 0xa4, 0xcb, 0x78, 0x20, 0x54, 0xbd, 0x7b, 0xc2, 0x01, 0x79, 0x10, 0x7f, - 0x5c, 0x38, 0x90, 0xea, 0xdf, 0xea, 0xf4, 0x40, 0x63, 0x6c, 0xf5, 0x74, - 0x9c, 0x6d, 0x99, 0x77, 0x40, 0x54, 0x83, 0x53, 0xd3, 0xef, 0x6a, 0x41, - 0x2d, 0xf2, 0x80, 0x23, 0xf1, 0xb6, 0x0f, 0xc1, 0x49, 0x78, 0xba, 0xd9, - 0x12, 0x0c, 0xc7, 0xf0, 0x49, 0x38, 0xd0, 0x43, 0x4f, 0xac, 0x2a, 0x7e, - 0xd5, 0xe6, 0x92, 0xcd, 0x0b, 0xea, 0x6e, 0xca, 0xe4, 0x14, 0xbf, 0x20, - 0xf9, 0xdc, 0x99, 0xa9, 0x84, 0xab, 0xe9, 0xd5, 0x2d, 0xd6, 0x83, 0x57, - 0xfa, 0xda, 0xa8, 0x3d, 0xd3, 0x64, 0xa5, 0xff, 0xc0, 0xbf, 0xa3, 0x04, - 0x43, 0x54, 0xfc, 0xe7, 0xfd, 0xc0, 0x1e, 0xab, 0x56, 0xa5, 0x83, 0x6e, - 0x36, 0x2c, 0x50, 0xef, 0x8b, 0x0f, 0x55, 0xc3, 0x81, 0xc7, 0xec, 0x04, - 0xda, 0x16, 0x1d, 0xd8, 0x12, 0xf0, 0x6c, 0x80, 0x77, 0x38, 0x61, 0xc4, - 0xd1, 0x45, 0x3e, 0xcb, 0x23, 0xca, 0xd3, 0xf4, 0x20, 0xc3, 0xaf, 0xa6, - 0x79, 0x0a, 0xd0, 0x29, 0x62, 0x11, 0x2e, 0x66, 0x11, 0x2e, 0xc1, 0x0d, - 0x5c, 0xce, 0x1b, 0x8f, 0x52, 0x7d, 0x5d, 0x55, 0x4e, 0xde, 0x93, 0x94, - 0x9f, 0x7b, 0x5c, 0xe7, 0x41, 0x16, 0x6d, 0x38, 0x90, 0x80, 0xda, 0x00, - 0xda, 0x13, 0xff, 0xf9, 0x53, 0x26, 0x56, 0xe0, 0x26, 0x16, 0x20, 0x9a, - 0x0c, 0x69, 0x4b, 0x4e, 0xa0, 0x40, 0xb1, 0x0b, 0xde, 0x2e, 0x9a, 0xed, - 0x2b, 0x58, 0xbc, 0xdb, 0xad, 0x98, 0x13, 0x8b, 0xbf, 0x1c, 0xe2, 0x00, - 0x6e, 0x4b, 0xfa, 0xba, 0x81, 0xdf, 0xad, 0x1b, 0xbe, 0x0d, 0x8b, 0xf1, - 0xae, 0x11, 0x9b, 0x23, 0xd4, 0x57, 0xdd, 0xd6, 0x2b, 0x85, 0x81, 0x98, - 0xc4, 0x5a, 0xab, 0xd7, 0xba, 0xd3, 0xbe, 0x46, 0xd9, 0x05, 0x81, 0x86, - 0x2b, 0x2c, 0xad, 0x45, 0xc0, 0xb7, 0x9b, 0x65, 0x97, 0x93, 0xca, 0x67, - 0x4c, 0xa0, 0xda, 0x46, 0x7c, 0xcb, 0xa7, 0xd4, 0x5b, 0x7b, 0x4b, 0x2d, - 0x18, 0xbb, 0x80, 0x4d, 0xcf, 0xa9, 0x61, 0x8e, 0xa2, 0xa9, 0x64, 0x21, - 0x1a, 0x7d, 0xca, 0xbb, 0x05, 0xba, 0xb3, 0xd6, 0x03, 0xad, 0x6a, 0x0a, - 0x20, 0xee, 0x39, 0x21, 0x84, 0x94, 0xbd, 0xff, 0xce, 0x18, 0xd7, 0x81, - 0x9f, 0xc3, 0xe6, 0x8c, 0xdc, 0xff, 0xcd, 0x87, 0x0b, 0x8d, 0x92, 0xb3, - 0x7f, 0xcf, 0xbd, 0x0b, 0x0e, 0x4a, 0x11, 0x52, 0x8e, 0x7b, 0xd8, 0x40, - 0x41, 0x73, 0x80, 0x97, 0x0f, 0xe1, 0x45, 0x44, 0x9b, 0xab, 0x38, 0x36, - 0x4b, 0x0a, 0xba, 0xee, 0x12, 0xf4, 0x14, 0xa3, 0x12, 0x9d, 0x86, 0x26, - 0x90, 0x4d, 0x31, 0x53, 0x50, 0x9d, 0xc6, 0x58, 0xd0, 0xd3, 0xad, 0x3c, - 0x39, 0x38, 0x81, 0x78, 0xa0, 0xf3, 0x98, 0x60, 0x93, 0x0e, 0xe4, 0x5b, - 0x38, 0x10, 0x60, 0xae, 0x1c, 0x8e, 0x1e, 0xab, 0xfd, 0x40, 0x3a, 0xa5, - 0xca, 0x7f, 0xbe, 0x42, 0xb0, 0xc4, 0xdd, 0x8d, 0x65, 0x68, 0x7a, 0x9f, - 0x40, 0xb8, 0xd8, 0xea, 0x90, 0xf9, 0x2c, 0x4e, 0x48, 0x5d, 0xe8, 0xf1, - 0x35, 0xe6, 0x27, 0xa5, 0xb7, 0x99, 0x61, 0x55, 0x5b, 0x17, 0xc7, 0xd8, - 0x4a, 0xe9, 0x88, 0x04, 0x9a, 0x42, 0x8e, 0x7c, 0x67, 0x4d, 0x6a, 0xf7, - 0x97, 0x3a, 0xa5, 0x26, 0x6c, 0x3e, 0x6b, 0x59, 0x3c, 0x16, 0xe5, 0x4c, - 0x8c, 0x6f, 0x15, 0xe5, 0x21, 0x07, 0x70, 0x9e, 0x71, 0x54, 0xe2, 0x57, - 0x59, 0xb8, 0x62, 0x28, 0x9d, 0xca, 0x46, 0xbc, 0x5d, 0x43, 0x11, 0x6f, - 0x62, 0x65, 0xed, 0xca, 0x45, 0x64, 0x80, 0x51, 0x21, 0xd4, 0xc1, 0xa1, - 0xa8, 0xd9, 0x5d, 0xf1, 0x92, 0x98, 0xdf, 0xf1, 0x5c, 0xe0, 0x78, 0x8a, - 0x98, 0xa4, 0xc2, 0x09, 0xb8, 0xdc, 0x13, 0x6d, 0x4b, 0x98, 0x79, 0x7e, - 0x12, 0x78, 0xe9, 0x88, 0xd1, 0xa1, 0x6d, 0xe5, 0x72, 0x87, 0x4e, 0x25, - 0x7b, 0xc5, 0xf3, 0xcd, 0xbb, 0xd2, 0xd7, 0xce, 0x58, 0x48, 0xfc, 0x19, - 0x88, 0x4e, 0x96, 0x98, 0x4f, 0x5d, 0x80, 0xee, 0x0f, 0xb1, 0x4a, 0x80, - 0x40, 0xe7, 0x0c, 0xfe, 0xad, 0x0d, 0xa7, 0x2e, 0x28, 0x10, 0x35, 0x81, - 0x1b, 0xde, 0x53, 0x3b, 0xc7, 0xb7, 0x4b, 0xe8, 0x1b, 0xcf, 0x42, 0x87, - 0xfe, 0xa7, 0x73, 0x53, 0x3a, 0xf2, 0x5c, 0x26, 0xe0, 0x98, 0x5e, 0xb6, - 0xc5, 0x2d, 0xf7, 0xaf, 0x43, 0x19, 0x58, 0xb0, 0xb7, 0x9a, 0xcd, 0x04, - 0xe8, 0xbc, 0xdb, 0xf1, 0x99, 0x0f, 0x3f, 0x4c, 0xc9, 0x17, 0xde, 0x45, - 0x1c, 0x2c, 0x64, 0x62, 0x65, 0x98, 0x84, 0x87, 0x99, 0x4a, 0x39, 0x65, - 0xc3, 0x62, 0x4d, 0xde, 0xa2, 0xb2, 0xad, 0x26, 0xb7, 0x2d, 0x60, 0x3b, - 0xee, 0x11, 0xb5, 0xd9, 0x51, 0x14, 0xe6, 0x78, 0x37, 0x61, 0xc9, 0x17, - 0xa0, 0xf2, 0xf1, 0xeb, 0x06, 0x0e, 0xe1, 0x79, 0xd5, 0x16, 0x34, 0xa8, - 0xcd, 0xa9, 0x4c, 0x16, 0x49, 0x60, 0x2d, 0xe3, 0x00, 0xa9, 0xcd, 0x5c, - 0xd0, 0x11, 0x64, 0x3e, 0x47, 0xb0, 0xed, 0xdd, 0x0d, 0x0f, 0x8d, 0x8c, - 0xc4, 0x99, 0x6a, 0x50, 0xe9, 0x61, 0x97, 0x9d, 0x47, 0x80, 0xdb, 0xa4, - 0xf9, 0x2b, 0xa1, 0xa2, 0x9b, 0xbc, 0xc5, 0x06, 0xf6, 0x05, 0x1b, 0x70, - 0xb9, 0x18, 0x96, 0xdb, 0xed, 0xcd, 0x95, 0x75, 0x10, 0x63, 0x43, 0x8e, - 0xae, 0x3c, 0x52, 0x34, 0x47, 0x52, 0x4a, 0x63, 0xa9, 0xb3, 0x00, 0x85, - 0x1d, 0x07, 0x55, 0x4b, 0x75, 0xdd, 0x9b, 0xcb, 0x20, 0xc7, 0x8e, 0xc4, - 0x3a, 0xb5, 0x27, 0x1f, 0xa3, 0xba, 0x38, 0xa8, 0x33, 0x73, 0x53, 0x26, - 0xbf, 0xe6, 0x25, 0x71, 0x76, 0xd4, 0x1c, 0x6a, 0x04, 0x9c, 0x48, 0xeb, - 0xcd, 0x12, 0xd1, 0x74, 0xc3, 0x85, 0xc5, 0xd2, 0xbd, 0x95, 0x16, 0xbd, - 0xf7, 0x5f, 0xfd, 0xb8, 0x39, 0x28, 0x1d, 0xdf, 0x19, 0xbb, 0x96, 0xca, - 0xe2, 0xe3, 0x14, 0x11, 0xbb, 0x2b, 0x9b, 0x44, 0x0b, 0xee, 0xb1, 0x7d, - 0x34, 0x92, 0xb2, 0x2c, 0x6d, 0x6a, 0xe8, 0x4e, 0x04, 0x83, 0xd8, 0xbb, - 0xd2, 0xed, 0x0e, 0x04, 0xb7, 0xff, 0x95, 0x2d, 0x40, 0xab, 0x78, 0x93, - 0xd6, 0x5c, 0x6c, 0x97, 0x3e, 0xe4, 0x20, 0xcf, 0xee, 0xeb, 0x88, 0xf5, - 0x76, 0xf7, 0x99, 0xc2, 0xbf, 0xd3, 0x41, 0x88, 0x34, 0xef, 0xcb, 0x65, - 0x13, 0xef, 0x56, 0xe0, 0x7b, 0x3a, 0xdc, 0x96, 0x6c, 0x16, 0x90, 0xd4, - 0x1e, 0x77, 0x31, 0x2e, 0xae, 0x2d, 0x8f, 0xba, 0x40, 0xed, 0x9a, 0x4f, - 0x89, 0xec, 0x69, 0x77, 0x8a, 0xfd, 0x48, 0x19, 0x70, 0xcc, 0x99, 0x85, - 0x27, 0x95, 0x86, 0xee, 0x83, 0xfd, 0xb5, 0xe8, 0x36, 0xf4, 0xd3, 0x5a, - 0x5f, 0x5d, 0xd0, 0xb1, 0x92, 0xc3, 0x79, 0xa5, 0x3c, 0x81, 0xe2, 0x16, - 0x95, 0x3b, 0x3c, 0x60, 0x8f, 0x5f, 0xf7, 0x4b, 0x16, 0xf7, 0xfd, 0x82, - 0xa7, 0xa2, 0x30, 0x3d, 0x14, 0xdd, 0x07, 0x48, 0xf7, 0x11, 0x6c, 0x5d, - 0x0a, 0xca, 0xc2, 0xb2, 0x90, 0xa1, 0x29, 0x4c, 0xd2, 0x99, 0x82, 0xc0, - 0x45, 0xc6, 0x44, 0x1c, 0xba, 0x7b, 0xd4, 0x8a, 0x3b, 0x25, 0x62, 0xa2, - 0x16, 0x2a, 0x03, 0x0a, 0x6a, 0x4e, 0x9e, 0x69, 0x52, 0x4b, 0xbf, 0x36, - 0xb8, 0x67, 0x23, 0xbb, 0x0f, 0xd8, 0x72, 0xcf, 0x59, 0xdf, 0xd4, 0x37, - 0xe6, 0x0e, 0xd0, 0xb4, 0x8f, 0x05, 0x21, 0x85, 0x62, 0xc4, 0x5d, 0x05, - 0x41, 0x2d, 0xc6, 0x78, 0x9c, 0x4e, 0x08, 0x0f, 0x75, 0x2f, 0x7f, 0x93, - 0x19, 0x37, 0xa4, 0xfc, 0xb4, 0x08, 0xbb, 0x23, 0xde, 0xcd, 0x8b, 0xc6, - 0xa1, 0x3b, 0xd7, 0xdd, 0x42, 0xf4, 0x9d, 0x13, 0xa4, 0x33, 0x70, 0xa2, - 0xd6, 0xaa, 0x48, 0xbd, 0xd2, 0x4d, 0x16, 0xf7, 0xe8, 0x83, 0x98, 0xc0, - 0x47, 0x17, 0x4e, 0x73, 0x92, 0x33, 0x56, 0x9e, 0x18, 0x03, 0x4a, 0x07, - 0x07, 0xb1, 0xd8, 0x59, 0x80, 0xfb, 0xc3, 0xe1, 0xa0, 0x27, 0xdf, 0xc4, - 0x83, 0xda, 0x71, 0x32, 0xea, 0x42, 0xc2, 0x39, 0xb1, 0xf5, 0xe1, 0x99, - 0x3e, 0x97, 0x2e, 0x11, 0x7b, 0x28, 0x76, 0xce, 0xaf, 0xfd, 0x21, 0x41, - 0x58, 0xa4, 0x3c, 0xf1, 0x20, 0x5f, 0x52, 0xaa, 0x03, 0xa2, 0xdc, 0xce, - 0x3c, 0x34, 0x06, 0x39, 0x0f, 0x59, 0x84, 0xb1, 0xdc, 0x56, 0xca, 0xcb, - 0xa6, 0xd5, 0xc4, 0xbd, 0x9c, 0xd7, 0x0c, 0x29, 0x1f, 0xd2, 0x6c, 0x03, - 0x96, 0x3b, 0x6a, 0x8f, 0x01, 0xeb, 0x2a, 0xf4, 0x3b, 0x62, 0x40, 0xd7, - 0x2d, 0xea, 0x68, 0xc6, 0x0c, 0x6a, 0x88, 0x75, 0xce, 0x68, 0xe2, 0xec, - 0xeb, 0x61, 0xf8, 0xea, 0xda, 0x31, 0x09, 0x0d, 0x15, 0xc3, 0xd4, 0x7d, - 0xc8, 0x27, 0x39, 0x0d, 0xa7, 0xab, 0xd6, 0x34, 0xfa, 0x83, 0x71, 0x50, - 0xb5, 0x76, 0x94, 0x7d, 0xe8, 0x44, 0xad, 0xb5, 0x73, 0xe3, 0x07, 0xe9, - 0xb8, 0x08, 0x58, 0xba, 0xb4, 0xcc, 0x39, 0x66, 0x0c, 0x4b, 0x5d, 0x1e, - 0x0c, 0x83, 0x17, 0x15, 0xc3, 0xf2, 0x6f, 0x79, 0xbb, 0x28, 0xa1, 0x7c, - 0xad, 0xae, 0x69, 0xba, 0x68, 0xd7, 0x72, 0xd3, 0xb2, 0x6a, 0xe8, 0xc6, - 0x9d, 0xfe, 0x84, 0x1d, 0x54, 0x2e, 0x9d, 0x07, 0xef, 0xff, 0x37, 0x08, - 0xbf, 0x71, 0x9f, 0x18, 0x5e, 0x50, 0x3c, 0xd1, 0x12, 0x93, 0xa4, 0x72, - 0xf3, 0xab, 0xed, 0xc9, 0xf0, 0xfb, 0x31, 0x6d, 0x54, 0xb2, 0x4d, 0x4d, - 0xfd, 0x9a, 0x1c, 0xea, 0xde, 0xee, 0xe3, 0x47, 0x08, 0x21, 0xb9, 0xa0, - 0x25, 0xfb, 0x37, 0xf8, 0x55, 0xdd, 0xac, 0x3b, 0x1d, 0x70, 0x41, 0x1d, - 0x6d, 0xaa, 0x6a, 0xb2, 0xc7, 0x02, 0xab, 0xb5, 0x7e, 0x81, 0x15, 0xd4, - 0xcb, 0x8c, 0xaf, 0x0c, 0xa7, 0xe9, 0x61, 0x03, 0x21, 0x35, 0x6c, 0x01, - 0x6f, 0xad, 0x15, 0x44, 0x3d, 0x6f, 0xc6, 0x9d, 0xf3, 0xad, 0xad, 0xa3, - 0xbe, 0x42, 0x39, 0xc6, 0x2e, 0x18, 0x1a, 0xaf, 0x02, 0x7a, 0x69, 0xf6, - 0x35, 0x3e, 0xce, 0x36, 0x42, 0x7d, 0xa1, 0x0d, 0x7b, 0xc0, 0xfe, 0x1a, - 0x7f, 0x33, 0xc8, 0xf1, 0x57, 0x76, 0x75, 0xc9, 0x67, 0x89, 0x49, 0x3d, - 0xc5, 0xe4, 0x87, 0xb4, 0x77, 0x82, 0x9f, 0xac, 0xf6, 0x2f, 0x9c, 0x76, - 0xde, 0x6b, 0x05, 0x89, 0x98, 0x2f, 0x5d, 0x71, 0x7e, 0x6d, 0x97, 0x56, - 0x8f, 0x5f, 0x38, 0x82, 0xbc, 0x4f, 0xfa, 0x50, 0x5c, 0xc4, 0xd6, 0xa4, - 0x96, 0xd4, 0xa0, 0x3c, 0x3f, 0xa0, 0xc7, 0x20, 0xcc, 0x76, 0x4d, 0x02, - 0x0a, 0x1d, 0x58, 0xd3, 0x46, 0xde, 0x8d, 0x00, 0xb6, 0x73, 0xcb, 0x0d, - 0xe2, 0x91, 0xb6, 0x28, 0x95, 0xbc, 0x31, 0xa9, 0x30, 0x3b, 0xfa, 0xc3, - 0x5d, 0xf9, 0x81, 0x69, 0x4d, 0x9d, 0x56, 0x6f, 0x30, 0x55, 0x9a, 0xcf, - 0xcb, 0x9f, 0x78, 0x66, 0x84, 0xe5, 0x48, 0xbb, 0x5b, 0xd1, 0xe2, 0x44, - 0xc1, 0x3c, 0x2d, 0xa4, 0x07, 0xf0, 0xf7, 0x32, 0x3b, 0xe1, 0x8d, 0x6b, - 0xa6, 0xe2, 0x3a, 0xde, 0xde, 0x2f, 0x6f, 0xc2, 0xdd, 0x15, 0x44, 0x05, - 0x64, 0x15, 0x48, 0x2d, 0x18, 0x4b, 0xab, 0xe9, 0x04, 0x0b, 0x62, 0x1d, - 0xdc, 0x12, 0xc6, 0x39, 0xee, 0xfa, 0x99, 0x66, 0xeb, 0x06, 0x93, 0xb3, - 0xe5, 0x72, 0x3e, 0xdc, 0x4a, 0xc6, 0x3a, 0x79, 0x5c, 0x55, 0x5b, 0xc0, - 0xdd, 0x3c, 0x33, 0xb6, 0x67, 0x7f, 0x24, 0xa6, 0x47, 0xf7, 0x25, 0xe4, - 0x94, 0x2b, 0x88, 0xaf, 0x69, 0xe8, 0xea, 0x63, 0x5c, 0xfe, 0x3d, 0x73, - 0x87, 0x00, 0x1d, 0x61, 0xcb, 0xd9, 0x92, 0x68, 0xbd, 0x60, 0xcd, 0x71, - 0x53, 0x14, 0x16, 0x64, 0xa7, 0x27, 0x2c, 0xe9, 0xb1, 0x45, 0x7c, 0x84, - 0x16, 0x9e, 0x2e, 0xcf, 0x4b, 0xdb, 0x57, 0x8e, 0x8b, 0x9f, 0xdf, 0x07, - 0x1e, 0x96, 0x74, 0x04, 0x25, 0x31, 0xdd, 0xe8, 0xf8, 0x2f, 0x54, 0x42, - 0x75, 0x3b, 0x9d, 0xd0, 0x19, 0x36, 0x78, 0x6b, 0x41, 0x0d, 0x62, 0xae, - 0x78, 0x51, 0xf4, 0x77, 0x2e, 0x23, 0xb7, 0x8d, 0xff, 0x9e, 0x2f, 0x09, - 0x71, 0x0a, 0x85, 0x95, 0xfa, 0x1e, 0x4f, 0xc2, 0x0c, 0x97, 0xc7, 0x19, - 0x32, 0xf6, 0x80, 0x43, 0x91, 0xb6, 0x1f, 0xf6, 0xc1, 0xe2, 0x30, 0xf8, - 0x51, 0x37, 0xd6, 0x55, 0x52, 0x00, 0x4c, 0xfc, 0xac, 0x5e, 0xb4, 0xa1, - 0x7d, 0xca, 0xcc, 0x86, 0x38, 0x5c, 0x39, 0xcb, 0x04, 0x5a, 0xdf, 0x58, - 0xc0, 0x39, 0x5b, 0x06, 0x9e, 0x8e, 0x9c, 0xb6, 0x96, 0xb2, 0xb1, 0xc4, - 0x87, 0x7c, 0x92, 0xf5, 0xb9, 0xa2, 0xd3, 0x13, 0xfe, 0x24, 0x15, 0x25, - 0x01, 0xe7, 0x2b, 0xfb, 0x4c, 0xd3, 0x15, 0x56, 0x89, 0xfe, 0x6e, 0x2a, - 0xa8, 0xd1, 0x9b, 0x8a, 0xbc, 0x99, 0x02, 0x3c, 0xb2, 0x29, 0xce, 0xbd, - 0x38, 0xc1, 0x20, 0xa1, 0xc2, 0x24, 0x50, 0xde, 0x58, 0x41, 0x13, 0xe6, - 0x5d, 0x86, 0xb3, 0xd8, 0xae, 0xa4, 0x88, 0x5b, 0xa5, 0xcf, 0x28, 0xac, - 0x4c, 0x7c, 0x77, 0xed, 0x04, 0x02, 0x6a, 0xf5, 0x33, 0x88, 0x94, 0xcb, - 0x1b, 0x78, 0x6a, 0xfb, 0x44, 0xe8, 0x10, 0xe3, 0xa6, 0x7c, 0x2e, 0xce, - 0x0a, 0xc6, 0x20, 0xcf, 0x38, 0x22, 0xc6, 0x4f, 0xea, 0x96, 0x64, 0xae, - 0x55, 0x90, 0x31, 0x8f, 0xd1, 0x15, 0x9f, 0x6d, 0x22, 0x98, 0x7d, 0x20, - 0x32, 0xc7, 0x78, 0x27, 0xb4, 0x68, 0x10, 0x9c, 0x79, 0xe0, 0x1e, 0xa0, - 0x79, 0xa8, 0xed, 0xde, 0x41, 0x61, 0xc4, 0x22, 0xda, 0x75, 0x8e, 0x93, - 0x77, 0x63, 0x01, 0x21, 0xad, 0x54, 0xfe, 0xce, 0xdc, 0xfa, 0xe5, 0x2d, - 0x19, 0xe0, 0x91, 0x09, 0x46, 0xea, 0x6d, 0xbf, 0x5c, 0x5c, 0x31, 0x8b, - 0x8f, 0x38, 0x24, 0x69, 0x27, 0x40, 0x76, 0x92, 0xe5, 0x92, 0x53, 0xc9, - 0x72, 0x51, 0x35, 0x2c, 0x43, 0x56, 0x7c, 0xa7, 0x2c, 0x4d, 0x54, 0xf6, - 0xd2, 0xba, 0x87, 0x69, 0xb5, 0xd3, 0xdd, 0xba, 0x81, 0xc8, 0x20, 0xdb, - 0x9d, 0xdb, 0xd6, 0x9d, 0x4c, 0x0a, 0xb2, 0x7d, 0xe6, 0xcd, 0x1a, 0x20, - 0x34, 0x22, 0x45, 0xc9, 0xa4, 0x46, 0xb5, 0xc0, 0xdd, 0x41, 0x1c, 0x74, - 0xaa, 0x6d, 0xaf, 0x2e, 0x07, 0xe5, 0x7a, 0x5c, 0xda, 0x52, 0xad, 0x52, - 0x5b, 0xce, 0xe8, 0xe5, 0xfa, 0x72, 0x7b, 0x06, 0xaf, 0xf2, 0x9e, 0x13, - 0x6e, 0xa5, 0x62, 0x07, 0x3e, 0x89, 0x38, 0xd7, 0xd1, 0x1f, 0x06, 0x1d, - 0xbd, 0x0e, 0x25, 0xf7, 0x20, 0xe5, 0x5e, 0x3c, 0x97, 0x96, 0xcf, 0x75, - 0x49, 0xd3, 0xe8, 0x46, 0x22, 0xc7, 0x90, 0x12, 0xf2, 0xc4, 0x19, 0xa4, - 0x0f, 0xb2, 0x3a, 0x15, 0x6f, 0xa0, 0x54, 0x44, 0x79, 0x27, 0x08, 0xf8, - 0xc8, 0xc8, 0xa1, 0xf9, 0xca, 0x19, 0x6c, 0xba, 0xe0, 0x40, 0xc9, 0xbf, - 0xf4, 0x57, 0x64, 0x0d, 0xa4, 0xd6, 0x08, 0x41, 0x6d, 0xb2, 0xa8, 0x12, - 0xa1, 0x73, 0xd5, 0x26, 0xfd, 0xc0, 0x6a, 0xd3, 0xeb, 0x45, 0xeb, 0xe2, - 0xbf, 0x44, 0x10, 0x87, 0x45, 0xde, 0x1e, 0x06, 0x75, 0xd4, 0x55, 0xf7, - 0x42, 0x1c, 0xc2, 0x47, 0x45, 0xe4, 0x75, 0x20, 0xf0, 0xc2, 0x46, 0x2f, - 0xb1, 0x3f, 0x83, 0xad, 0x9b, 0x98, 0x96, 0xa0, 0x4e, 0x35, 0xcc, 0xfe, - 0x81, 0x6e, 0xa5, 0xc6, 0x47, 0xcb, 0xad, 0x5f, 0xc5, 0x01, 0xa9, 0x0a, - 0xba, 0x7b, 0xbf, 0x4a, 0xb4, 0x17, 0x4c, 0x95, 0x28, 0x3e, 0x3e, 0x24, - 0xb2, 0x2d, 0xee, 0xe9, 0x8d, 0xd2, 0xc1, 0x34, 0x76, 0x2e, 0x82, 0x27, - 0x91, 0x8d, 0xed, 0x73, 0x57, 0xd0, 0x6e, 0x0e, 0x03, 0x07, 0xb3, 0x19, - 0x7b, 0xb6, 0xa9, 0x5c, 0xd2, 0xe0, 0xb0, 0x3d, 0x4f, 0xd9, 0x7c, 0xb1, - 0x00, 0x8d, 0x69, 0xed, 0xc0, 0x7e, 0xe8, 0x0e, 0xd9, 0xc1, 0x9b, 0x13, - 0x2b, 0x36, 0xa5, 0x0d, 0xcf, 0x15, 0x15, 0x50, 0xe8, 0x00, 0x75, 0xa4, - 0xed, 0x82, 0x32, 0x08, 0xbf, 0x04, 0x07, 0x71, 0x7a, 0x0e, 0xff, 0x4b, - 0xda, 0x77, 0xb5, 0x38, 0x71, 0x46, 0x49, 0xb4, 0xe4, 0x34, 0xbb, 0x9e, - 0xa1, 0x29, 0x4f, 0x01, 0x9f, 0xee, 0x75, 0x79, 0x29, 0xb9, 0xe1, 0x81, - 0x9e, 0xb2, 0x07, 0x59, 0xf2, 0x85, 0x60, 0x9c, 0x70, 0x5a, 0x69, 0xfc, - 0xc3, 0x35, 0xcb, 0xd6, 0xf5, 0x40, 0xaa, 0x98, 0x0b, 0x10, 0x17, 0x2b, - 0x65, 0x21, 0x71, 0x3b, 0xfc, 0x9d, 0x6c, 0x90, 0x46, 0xba, 0xf5, 0x6e, - 0xa4, 0x1a, 0xe1, 0xe6, 0xd9, 0xb1, 0x29, 0xa0, 0x0b, 0x22, 0xa3, 0x59, - 0xcf, 0x2b, 0x2e, 0xad, 0xe4, 0xd7, 0x6a, 0x96, 0x83, 0x88, 0x37, 0xf4, - 0x1e, 0x04, 0x78, 0xa0, 0x91, 0xcb, 0x31, 0x08, 0xf1, 0x96, 0x4c, 0x26, - 0x92, 0x7f, 0xed, 0x0e, 0xba, 0xeb, 0xd2, 0x6d, 0x68, 0x0a, 0xe8, 0x40, - 0xd4, 0xcd, 0xe6, 0xe2, 0x0f, 0x45, 0xe7, 0x02, 0xd0, 0x30, 0xd7, 0xd0, - 0xd8, 0x3a, 0xfd, 0x5e, 0xc7, 0x05, 0x8d, 0x94, 0xa9, 0x63, 0x8e, 0x38, - 0xdb, 0xeb, 0x7e, 0xd9, 0xda, 0x3a, 0x1e, 0x07, 0x35, 0x3b, 0xd4, 0x3d, - 0x17, 0x7f, 0x7c, 0x69, 0x2d, 0xb1, 0x5f, 0xdf, 0x87, 0xa7, 0x7b, 0xe2, - 0xf1, 0x93, 0x88, 0x8c, 0xf4, 0x97, 0xb1, 0xa4, 0x0a, 0x1d, 0xe5, 0x71, - 0x86, 0x74, 0xcd, 0x7f, 0xd9, 0x05, 0x34, 0x9d, 0x05, 0xd8, 0xc6, 0xab, - 0x0b, 0x4b, 0x7a, 0xcc, 0x3f, 0x29, 0xb6, 0x11, 0x5e, 0xe8, 0x2a, 0xe6, - 0x21, 0xc7, 0xc3, 0x3d, 0xce, 0x68, 0x9d, 0x23, 0x4c, 0xb9, 0xe7, 0xe2, - 0x2f, 0x39, 0xc4, 0x13, 0xda, 0x8d, 0x92, 0x33, 0xb4, 0xed, 0xb8, 0xd4, - 0x08, 0xb6, 0xe0, 0x97, 0x36, 0xf3, 0x87, 0xf6, 0xbc, 0xce, 0x4f, 0xb7, - 0xef, 0xda, 0xdb, 0x7a, 0x0f, 0x57, 0x04, 0xb6, 0xdc, 0x5e, 0x19, 0xee, - 0xb3, 0xfc, 0xb0, 0x74, 0x9e, 0xdb, 0xb9, 0xc4, 0x79, 0xd0, 0x3e, 0xba, - 0xcf, 0x05, 0x52, 0x9a, 0x42, 0x51, 0x0e, 0x61, 0x9e, 0x8c, 0xee, 0x5e, - 0x25, 0x60, 0x94, 0xc7, 0xd3, 0x2c, 0x06, 0x59, 0xdb, 0x56, 0x96, 0x61, - 0x5e, 0x58, 0x03, 0x67, 0x66, 0xf1, 0x44, 0xb5, 0x95, 0x4f, 0x1e, 0x93, - 0xe6, 0x68, 0x01, 0xc6, 0x54, 0x9a, 0xf9, 0x50, 0x6d, 0xd3, 0x35, 0x57, - 0xf4, 0xe8, 0x3d, 0x87, 0x08, 0x08, 0xa5, 0x9b, 0x09, 0x46, 0x9e, 0x90, - 0x64, 0xf3, 0x38, 0x5a, 0xa7, 0x08, 0x86, 0xb0, 0x6f, 0xee, 0xad, 0xf6, - 0xe3, 0xbc, 0xfa, 0xee, 0x21, 0x95, 0xcf, 0x01, 0x9f, 0xd7, 0xbd, 0xed, - 0x68, 0x41, 0x61, 0xa7, 0xe0, 0x9c, 0x9e, 0x71, 0x39, 0xe7, 0xe6, 0xda, - 0xf4, 0xd1, 0x05, 0xf5, 0xe8, 0x4e, 0x3f, 0xf7, 0x73, 0x6c, 0x95, 0x76, - 0xce, 0x1d, 0x6c, 0xed, 0x24, 0xd5, 0x65, 0x06, 0xb1, 0xae, 0xfd, 0xb9, - 0x42, 0x47, 0x2b, 0x1f, 0xfd, 0x35, 0x7d, 0x70, 0x32, 0x3c, 0x5c, 0x11, - 0x79, 0x61, 0x0f, 0xdc, 0x14, 0xdf, 0x91, 0xb4, 0xde, 0xbb, 0xa0, 0x72, - 0xd5, 0x12, 0xf7, 0xfa, 0xde, 0x03, 0xf6, 0x97, 0xfc, 0xa4, 0x8e, 0x76, - 0x5c, 0xb4, 0xbf, 0x97, 0xae, 0xeb, 0x36, 0x75, 0x79, 0xa2, 0x7c, 0xfe, - 0x05, 0xe1, 0xa5, 0x8e, 0xb5, 0xe9, 0xc7, 0x0b, 0x42, 0xc2, 0x36, 0x3e, - 0x08, 0x79, 0x82, 0xc6, 0x89, 0x67, 0x59, 0x86, 0x9e, 0xf0, 0xa7, 0x79, - 0xcd, 0xc5, 0x78, 0xf0, 0x1b, 0xaa, 0xd0, 0x8f, 0x26, 0xd1, 0x36, 0x88, - 0x3b, 0x67, 0xe0, 0x50, 0xb0, 0xd7, 0x9c, 0xec, 0xbd, 0x13, 0x0f, 0xde, - 0x47, 0xdf, 0x5b, 0x78, 0x51, 0x7d, 0xca, 0xcd, 0x96, 0x5b, 0xc8, 0x23, - 0xce, 0xcd, 0xec, 0x66, 0xcb, 0xbd, 0x87, 0x4e, 0x08, 0x8d, 0xbb, 0x15, - 0xe0, 0x21, 0xad, 0x9d, 0x63, 0x23, 0xbb, 0xc3, 0x27, 0x28, 0x84, 0xe9, - 0xe6, 0x98, 0xc6, 0xdb, 0x00, 0xfc, 0xf6, 0xd5, 0x87, 0xf9, 0x1a, 0x80, - 0x42, 0xff, 0x36, 0x50, 0x96, 0x45, 0x0b, 0xcc, 0x97, 0xd1, 0x43, 0xe3, - 0x79, 0x08, 0xdc, 0xdf, 0xd3, 0xe2, 0xb4, 0xdb, 0x28, 0x4f, 0x89, 0x70, - 0xd3, 0x7e, 0x37, 0xd8, 0x0c, 0xd8, 0x97, 0xe2, 0xf2, 0x3d, 0x0c, 0xf5, - 0x3b, 0xa0, 0x9d, 0x15, 0x96, 0x6c, 0x11, 0xc0, 0xe2, 0x27, 0x08, 0xd8, - 0x0b, 0x83, 0x80, 0xc5, 0x16, 0x8a, 0x77, 0x48, 0x25, 0x67, 0x44, 0x85, - 0x8b, 0xe6, 0x8f, 0x13, 0x1c, 0x8b, 0x79, 0x67, 0x02, 0x45, 0x15, 0x8a, - 0xcc, 0xef, 0x27, 0x02, 0x31, 0x78, 0xec, 0x1f, 0x6d, 0xd7, 0x46, 0xae, - 0xe4, 0x80, 0x00, 0xdc, 0xae, 0x89, 0x8e, 0xbc, 0xae, 0x7a, 0x51, 0x32, - 0x83, 0x6a, 0xf5, 0x55, 0x3b, 0xfe, 0xa4, 0xf5, 0xc9, 0xab, 0x59, 0xe6, - 0x04, 0x07, 0xe8, 0x64, 0x26, 0xdf, 0x04, 0xe1, 0xd1, 0x7d, 0x98, 0xba, - 0xa2, 0xfd, 0xe1, 0x50, 0x65, 0x6d, 0x82, 0x01, 0xdb, 0xc8, 0xf4, 0x53, - 0xb6, 0x49, 0x07, 0x32, 0xc9, 0x1e, 0x30, 0xbc, 0x8b, 0x34, 0x2c, 0x56, - 0xfc, 0xe7, 0xfd, 0xc8, 0x8e, 0x35, 0x5e, 0xd6, 0x34, 0x75, 0x59, 0x30, - 0xfa, 0xa9, 0xf9, 0xd6, 0x76, 0xdc, 0x15, 0xbd, 0xc3, 0xf8, 0xe6, 0x8b, - 0x02, 0xa1, 0xa8, 0x38, 0xc0, 0xf8, 0x28, 0x4d, 0x38, 0x00, 0xf6, 0x36, - 0xec, 0x47, 0x0f, 0xe5, 0x97, 0x90, 0x9e, 0x07, 0xf3, 0x5e, 0x12, 0x46, - 0x40, 0x73, 0xfc, 0x88, 0x1f, 0x72, 0x23, 0x93, 0x64, 0x2e, 0xb1, 0x70, - 0x96, 0x60, 0x0b, 0x0d, 0x88, 0x63, 0x1c, 0x29, 0xd5, 0x5f, 0x7b, 0x18, - 0xf3, 0x6a, 0xa8, 0xad, 0xc6, 0x88, 0xbc, 0x84, 0xaf, 0xbb, 0xdd, 0xce, - 0x4d, 0x69, 0x47, 0x4e, 0x49, 0x28, 0xb2, 0xbc, 0x77, 0x19, 0xe7, 0x7d, - 0x64, 0x38, 0x67, 0xbe, 0xd4, 0x82, 0xfe, 0xf6, 0xcc, 0x2b, 0xa0, 0x32, - 0x48, 0xc8, 0x0c, 0x02, 0xbf, 0x05, 0xf6, 0xdd, 0x79, 0x5d, 0xbc, 0x35, - 0x0c, 0x14, 0x0f, 0x3f, 0xa0, 0x64, 0xdd, 0x05, 0x0f, 0x29, 0xcc, 0x0e, - 0x2b, 0xdf, 0x93, 0x6f, 0xf9, 0xda, 0x90, 0x8c, 0xcd, 0x1b, 0xd8, 0xfe, - 0x95, 0x9d, 0x54, 0xb0, 0x01, 0xd9, 0xa0, 0x11, 0xdd, 0xae, 0x5d, 0xc4, - 0xc8, 0x84, 0xbe, 0x38, 0x88, 0xc1, 0x54, 0x79, 0xbc, 0x14, 0xc1, 0x2b, - 0xde, 0x24, 0xd2, 0x3c, 0x08, 0x70, 0xc2, 0x11, 0x29, 0x7a, 0x21, 0xa8, - 0x12, 0x1a, 0x91, 0xb4, 0x02, 0x2b, 0xe0, 0x1e, 0xc1, 0x0a, 0x6c, 0x9f, - 0x3f, 0xa8, 0x43, 0x54, 0xdc, 0x88, 0xc5, 0xb2, 0x18, 0x37, 0x99, 0xe2, - 0xf8, 0x04, 0xc6, 0x84, 0x70, 0xc9, 0x2f, 0xe2, 0x00, 0x51, 0x90, 0x20, - 0x0f, 0x96, 0x3f, 0xe5, 0x64, 0x3d, 0x8c, 0xe4, 0xe0, 0x1e, 0xe7, 0x41, - 0x33, 0x7b, 0x63, 0xe9, 0x39, 0x38, 0xec, 0x20, 0x84, 0x55, 0x99, 0x28, - 0x6b, 0xfb, 0x10, 0x72, 0x1c, 0x77, 0x07, 0x49, 0xf2, 0x8f, 0xc9, 0x98, - 0xa2, 0xed, 0xb4, 0x0e, 0x25, 0x1a, 0xd7, 0x80, 0x87, 0x21, 0xa3, 0x1b, - 0xb7, 0x10, 0x67, 0x10, 0xb8, 0xd6, 0x2b, 0x5d, 0x40, 0x43, 0x9b, 0xb3, - 0x03, 0xa9, 0x3e, 0xe9, 0x7a, 0x3a, 0x86, 0x2e, 0x61, 0x38, 0x66, 0x39, - 0x37, 0xc2, 0x3a, 0x4d, 0xa4, 0xab, 0xc5, 0x8f, 0x20, 0x8d, 0x59, 0xd2, - 0xcb, 0x32, 0xfc, 0x36, 0xcf, 0x62, 0x58, 0xa5, 0xab, 0x35, 0x9e, 0x9b, - 0x66, 0x00, 0xab, 0x1e, 0xfd, 0x74, 0x16, 0x75, 0xbb, 0xb1, 0x8d, 0x9d, - 0x6f, 0x30, 0xe2, 0xab, 0x50, 0xb1, 0x51, 0xed, 0x52, 0x15, 0xc2, 0x60, - 0xeb, 0x74, 0x7a, 0x7b, 0x7f, 0x90, 0x87, 0xa2, 0xda, 0x66, 0xd9, 0x33, - 0xe4, 0xd8, 0x2c, 0x65, 0x3c, 0x7b, 0x2c, 0xb9, 0x32, 0xa8, 0x78, 0xc2, - 0xc6, 0xb6, 0x50, 0xab, 0xf0, 0xf6, 0x2d, 0x14, 0x62, 0xdc, 0x55, 0x3c, - 0x67, 0xab, 0xc8, 0x13, 0x07, 0x03, 0xb6, 0xc6, 0x2c, 0x24, 0x54, 0x72, - 0x63, 0x51, 0xbc, 0xb8, 0xad, 0x00, 0x52, 0xbf, 0x1d, 0x6f, 0xa5, 0xbe, - 0x71, 0xc7, 0xc0, 0x24, 0x5f, 0x2f, 0x75, 0xbf, 0x3d, 0xea, 0xa4, 0xa6, - 0x52, 0x3b, 0xa4, 0xdd, 0x4c, 0xc2, 0xdf, 0xc3, 0xd1, 0x28, 0x35, 0xf7, - 0x72, 0x1d, 0x32, 0xdc, 0x29, 0x17, 0x0f, 0x15, 0x97, 0xdb, 0x77, 0xc8, - 0x83, 0xa8, 0xb8, 0xec, 0x37, 0xa9, 0xc9, 0x31, 0xa1, 0x37, 0x60, 0x20, - 0x7f, 0x1d, 0x57, 0xc1, 0x01, 0x0e, 0x93, 0x74, 0xee, 0x90, 0x57, 0x86, - 0xde, 0x03, 0x7e, 0x7b, 0xcd, 0x9d, 0x25, 0xb9, 0x34, 0xc2, 0x27, 0x06, - 0x88, 0x33, 0x3b, 0x2a, 0x48, 0x31, 0x67, 0x55, 0xb8, 0xd4, 0x95, 0xe5, - 0xfe, 0x1c, 0x57, 0x53, 0x3c, 0x75, 0x2b, 0x7a, 0x11, 0x53, 0xe7, 0x29, - 0x97, 0x49, 0x7b, 0x17, 0x03, 0xdc, 0x6e, 0xb3, 0x31, 0xb1, 0xd6, 0x69, - 0xfe, 0x4d, 0x78, 0xd6, 0x66, 0x14, 0xc8, 0x36, 0xe3, 0x4b, 0x5e, 0xd0, - 0xa7, 0xd5, 0xb4, 0x7b, 0x3e, 0x84, 0x02, 0x3e, 0x84, 0xc7, 0xdb, 0xa8, - 0xd9, 0x8e, 0x4e, 0x6d, 0xc1, 0xa5, 0xbe, 0xd2, 0x40, 0x3e, 0x01, 0xbd, - 0xf4, 0xfa, 0xa4, 0xed, 0xba, 0x63, 0x1d, 0x28, 0xf1, 0x44, 0xc7, 0x45, - 0x52, 0xe6, 0xe1, 0xfe, 0x16, 0x6a, 0x8c, 0x02, 0x45, 0xaf, 0x75, 0x1c, - 0x60, 0x10, 0x47, 0xba, 0x3b, 0x5b, 0xe7, 0x04, 0x13, 0xc1, 0xb0, 0xec, - 0x9f, 0xf4, 0x31, 0xf6, 0x24, 0xd8, 0x70, 0x76, 0xc5, 0xbc, 0xa8, 0x90, - 0x4c, 0x8d, 0xd3, 0xd8, 0x79, 0x5d, 0xbe, 0x42, 0xfc, 0x4c, 0xa3, 0xb5, - 0x71, 0x6a, 0xb4, 0x4f, 0xa9, 0xfe, 0xa6, 0x33, 0xa5, 0xcb, 0x1e, 0x57, - 0x00, 0xbd, 0x9b, 0xb8, 0xd7, 0x6d, 0x15, 0x53, 0xa0, 0x38, 0xa0, 0xcf, - 0x00, 0x98, 0x05, 0xce, 0x9e, 0x8e, 0x45, 0x45, 0xa3, 0xc6, 0xec, 0x25, - 0xb7, 0x90, 0x45, 0x9d, 0xf7, 0xc0, 0x8d, 0xe6, 0x66, 0xa2, 0x50, 0x35, - 0xa2, 0xbf, 0xbd, 0x57, 0x17, 0xff, 0x51, 0xee, 0x97, 0x41, 0xd1, 0x57, - 0xdc, 0xa0, 0x58, 0xc1, 0x1b, 0xce, 0x2f, 0x79, 0xe2, 0x8d, 0x5b, 0x52, - 0xf1, 0x04, 0x56, 0xe8, 0x7b, 0xa9, 0x80, 0xb9, 0xf0, 0x2b, 0xba, 0x2b, - 0x67, 0x17, 0xf4, 0xc5, 0x79, 0x8f, 0x19, 0xd4, 0x7d, 0xd0, 0x2b, 0x46, - 0x66, 0xa7, 0xee, 0x84, 0xe4, 0x3d, 0xf7, 0x40, 0x50, 0x70, 0x05, 0x71, - 0xa0, 0xee, 0xdc, 0x77, 0x48, 0xb4, 0xe6, 0xbe, 0x5e, 0xa4, 0x98, 0x25, - 0x4c, 0x73, 0x95, 0x24, 0x5c, 0x36, 0x8e, 0x20, 0xd0, 0xaf, 0xa9, 0x90, - 0x31, 0xc4, 0x30, 0xc5, 0xf7, 0xee, 0xee, 0xa2, 0xb4, 0xeb, 0x91, 0x92, - 0xd7, 0xaf, 0x41, 0xf0, 0x2a, 0xf5, 0x6b, 0xec, 0xad, 0xc6, 0x39, 0x99, - 0xfa, 0x37, 0x48, 0x3f, 0x64, 0x10, 0x75, 0x07, 0x30, 0xb2, 0x5b, 0x56, - 0x34, 0x95, 0xf7, 0xd0, 0xe3, 0xad, 0x61, 0x67, 0x65, 0x58, 0xbe, 0x90, - 0xbe, 0x46, 0x42, 0x2d, 0x47, 0x23, 0xff, 0x3b, 0x71, 0x2e, 0x1e, 0x05, - 0x98, 0x47, 0x19, 0x1f, 0x04, 0x17, 0x1e, 0x8d, 0x56, 0x93, 0x1b, 0x7e, - 0x43, 0x4a, 0xb4, 0xf2, 0x92, 0x17, 0x9a, 0x9f, 0x54, 0x4b, 0xfd, 0x2f, - 0x85, 0x29, 0x03, 0x1d, 0x54, 0x2b, 0x01, 0xe2, 0x0b, 0xfb, 0x5c, 0x46, - 0xfe, 0xd5, 0x2e, 0x40, 0x81, 0x07, 0x9a, 0xdb, 0xcc, 0x2c, 0x7d, 0x5d, - 0xf6, 0x9b, 0x22, 0xfe, 0x0a, 0x85, 0x2c, 0x0e, 0xf8, 0x4b, 0x6f, 0x37, - 0x89, 0xb2, 0x9c, 0xdb, 0x06, 0x14, 0x30, 0x1d, 0xe7, 0xe6, 0x33, 0xc4, - 0x47, 0x6a, 0x5c, 0x88, 0x97, 0x3f, 0x74, 0x5a, 0xf7, 0xe8, 0xe3, 0x83, - 0x4e, 0xcb, 0xb9, 0x30, 0xd8, 0x93, 0x7d, 0xd8, 0x12, 0xfd, 0x43, 0x38, - 0xee, 0x55, 0xeb, 0xdc, 0x4e, 0x38, 0xaa, 0x70, 0x36, 0xcd, 0x07, 0xf7, - 0xe2, 0x4e, 0x10, 0xde, 0xc6, 0xab, 0x35, 0x12, 0x7a, 0x5c, 0x6f, 0xf2, - 0x63, 0xb6, 0x26, 0xc7, 0x36, 0xa1, 0x93, 0x4b, 0x75, 0x1a, 0x1f, 0x84, - 0x1d, 0x6e, 0x54, 0x44, 0x04, 0xd4, 0x97, 0x40, 0xc7, 0xf7, 0x59, 0x9e, - 0xe3, 0xb5, 0xbb, 0x7e, 0x16, 0xd9, 0x7d, 0x52, 0xb1, 0x8f, 0xf3, 0x0c, - 0x61, 0x44, 0x2e, 0xad, 0x31, 0x54, 0x9e, 0x32, 0xf7, 0x1f, 0xd7, 0x77, - 0x1d, 0x35, 0xee, 0x9d, 0xf3, 0xb4, 0xfc, 0xf3, 0xb7, 0x25, 0x83, 0xc7, - 0x7c, 0xe2, 0x39, 0x18, 0xcb, 0xc8, 0x8f, 0xb8, 0x0e, 0x6a, 0x49, 0x4f, - 0xfa, 0x35, 0xec, 0xb9, 0xb6, 0x68, 0x97, 0x71, 0xa0, 0xfe, 0x6d, 0x87, - 0x73, 0x81, 0x33, 0xcb, 0xed, 0x60, 0x1f, 0x3a, 0x2a, 0x38, 0x95, 0xeb, - 0x96, 0xb9, 0xf8, 0x19, 0x9e, 0x11, 0x7d, 0x84, 0x26, 0x58, 0xcd, 0x43, - 0xd6, 0x0a, 0x0b, 0x91, 0xcf, 0x5f, 0xf9, 0xf6, 0x46, 0x94, 0x2a, 0x68, - 0xd2, 0xc9, 0x0d, 0x81, 0xc6, 0x9d, 0x69, 0xfc, 0x0d, 0xa3, 0x48, 0xd8, - 0x4c, 0xc0, 0x73, 0x30, 0x31, 0x43, 0x57, 0x1d, 0x8f, 0xe2, 0x4a, 0xf0, - 0x3e, 0x44, 0xba, 0x74, 0xcd, 0xa4, 0x39, 0x39, 0xa9, 0xa3, 0xa3, 0xde, - 0xc4, 0x62, 0x90, 0x00, 0x2a, 0x9e, 0x5a, 0xe7, 0xe4, 0x0a, 0x06, 0x94, - 0x98, 0x73, 0xce, 0x37, 0xdc, 0xf2, 0x00, 0xaa, 0x89, 0x62, 0x21, 0xaa, - 0x0a, 0x8e, 0x1b, 0xac, 0x2c, 0xc7, 0x46, 0x39, 0x5e, 0x5f, 0x70, 0x09, - 0x7d, 0x58, 0xe7, 0xa4, 0xaa, 0x8b, 0x2d, 0x05, 0xb8, 0x94, 0x90, 0xf5, - 0xd1, 0xbe, 0x81, 0xd6, 0xb7, 0x56, 0x33, 0xc0, 0x2c, 0xcd, 0x79, 0x65, - 0x98, 0xef, 0x9b, 0x04, 0xfb, 0x6f, 0xa5, 0xbb, 0x41, 0x4a, 0xac, 0xa8, - 0x3b, 0x92, 0x11, 0xb4, 0x39, 0xc8, 0x17, 0x4c, 0x00, 0x11, 0x1f, 0x87, - 0x8c, 0x65, 0x80, 0x74, 0xe0, 0xcc, 0x63, 0x2a, 0x79, 0x08, 0x1d, 0x85, - 0xa3, 0x63, 0xa9, 0x9d, 0x3b, 0x37, 0x95, 0xa2, 0xa2, 0x0b, 0x2d, 0xe7, - 0xa2, 0xa5, 0xa4, 0x1c, 0x8a, 0x56, 0x94, 0xa4, 0x54, 0x98, 0x50, 0x8f, - 0xae, 0x10, 0x00, 0x9b, 0x27, 0x52, 0xaf, 0xf6, 0x25, 0x3d, 0x2c, 0x03, - 0xa4, 0x79, 0xde, 0x48, 0x34, 0xc5, 0x86, 0x1d, 0xe5, 0x8f, 0xa9, 0x41, - 0x8d, 0x44, 0x0d, 0xfa, 0x21, 0x87, 0x39, 0xae, 0x87, 0x06, 0x25, 0xc3, - 0xe5, 0x3d, 0x25, 0x90, 0x37, 0xb6, 0xb3, 0x90, 0x53, 0xcf, 0xcc, 0xad, - 0x4f, 0xa8, 0x7b, 0x76, 0x92, 0x7d, 0x0f, 0x50, 0x3a, 0x51, 0xa4, 0x90, - 0xd9, 0x9a, 0x69, 0x48, 0xe9, 0x71, 0xc2, 0x99, 0xa5, 0x20, 0x9c, 0xa7, - 0x64, 0xec, 0xc6, 0x4b, 0x75, 0xae, 0x3c, 0x75, 0x1d, 0x22, 0xdc, 0x09, - 0x05, 0x68, 0xe4, 0xd4, 0x13, 0x47, 0xff, 0x49, 0x49, 0xed, 0xe5, 0x07, - 0x80, 0xdc, 0x5b, 0x08, 0xdd, 0x8d, 0x4a, 0xc9, 0x97, 0x08, 0x9f, 0xd4, - 0x42, 0xea, 0xe3, 0xd3, 0xc7, 0x97, 0xe4, 0x1b, 0x23, 0xee, 0x9c, 0x69, - 0xb3, 0x49, 0x02, 0x13, 0x46, 0xa0, 0x43, 0xf7, 0x6f, 0x45, 0x97, 0x06, - 0x6e, 0x5e, 0x24, 0xd5, 0x29, 0xd7, 0xb3, 0xdf, 0x1e, 0xac, 0xae, 0x88, - 0xbc, 0x06, 0x29, 0xdd, 0xed, 0x47, 0x01, 0xbf, 0xbc, 0x1a, 0xb9, 0xa0, - 0x5c, 0xe3, 0xd6, 0x83, 0xe0, 0xef, 0x75, 0xe2, 0x36, 0xdc, 0xdb, 0xc6, - 0x25, 0xaf, 0x41, 0x80, 0xce, 0x07, 0x17, 0x01, 0x1f, 0x97, 0x1a, 0x25, - 0x8e, 0xdc, 0xb5, 0x02, 0xc7, 0x69, 0xf5, 0x63, 0xe9, 0x82, 0xea, 0x2f, - 0x31, 0x8a, 0x8e, 0x80, 0x1b, 0xd9, 0x56, 0x37, 0xdb, 0xc7, 0xa2, 0xe0, - 0xef, 0xdb, 0x8e, 0xce, 0xc2, 0x99, 0x19, 0x75, 0x41, 0x54, 0xba, 0xeb, - 0x0e, 0x5f, 0x47, 0x97, 0x8f, 0x4b, 0x86, 0x12, 0x17, 0x0a, 0x9c, 0x0e, - 0x3e, 0xee, 0x16, 0x4a, 0x7f, 0xa5, 0x50, 0x4b, 0xfe, 0x06, 0x16, 0x4d, - 0xc1, 0xf3, 0x68, 0xf6, 0x1e, 0x61, 0x77, 0x1e, 0x68, 0x84, 0x99, 0x43, - 0x3b, 0x89, 0x8c, 0xea, 0x43, 0x7f, 0x6b, 0xa5, 0x71, 0x60, 0x1f, 0xa0, - 0xe4, 0x91, 0xc0, 0xce, 0x87, 0x64, 0x02, 0x0a, 0x65, 0x6d, 0x73, 0x4a, - 0x60, 0x37, 0x49, 0x08, 0x5b, 0x71, 0x58, 0x3b, 0x63, 0x4f, 0x1e, 0xa4, - 0x82, 0x27, 0xcf, 0xee, 0x47, 0xa9, 0xe4, 0xc4, 0x90, 0xcd, 0x3d, 0x0e, - 0x0b, 0x1a, 0x72, 0x14, 0xd4, 0x62, 0x55, 0xc1, 0x79, 0xfd, 0xd8, 0x03, - 0xc4, 0x81, 0xbb, 0xd6, 0xf3, 0xa4, 0xbf, 0xbe, 0x36, 0x8d, 0x09, 0xfb, - 0x19, 0x1a, 0x21, 0xf6, 0xfc, 0x14, 0x3b, 0x71, 0xc2, 0x3c, 0x02, 0x2f, - 0xf1, 0xc6, 0x0f, 0x57, 0x93, 0x41, 0x44, 0x8a, 0x8f, 0x94, 0x87, 0x14, - 0x18, 0x6b, 0xd7, 0x8e, 0xd2, 0x32, 0x1c, 0xd3, 0xd2, 0xd7, 0x17, 0xd1, - 0xaf, 0x8c, 0x6c, 0x38, 0x87, 0x16, 0x31, 0xa1, 0xbd, 0x85, 0x8d, 0xfc, - 0xe8, 0x67, 0xe4, 0xa3, 0x95, 0xde, 0xd1, 0xee, 0x74, 0x85, 0x5d, 0x94, - 0xc7, 0x90, 0xbb, 0xda, 0x63, 0x68, 0x82, 0xd8, 0x48, 0x29, 0x11, 0x83, - 0x9f, 0x08, 0x54, 0x68, 0x29, 0xdc, 0xc0, 0x5b, 0x9f, 0x05, 0x28, 0x2e, - 0x78, 0x37, 0x77, 0xf9, 0xc2, 0x26, 0xb0, 0x93, 0x11, 0x8a, 0x10, 0xce, - 0x39, 0x31, 0x8f, 0x6e, 0xcb, 0x91, 0xe3, 0x61, 0x77, 0x14, 0x5d, 0xd0, - 0x80, 0x94, 0xc3, 0x6c, 0x4a, 0x47, 0x1f, 0x49, 0xbb, 0x0d, 0x87, 0xd8, - 0x6f, 0x4b, 0xdf, 0x03, 0x01, 0x11, 0xf4, 0x53, 0x83, 0xc7, 0x07, 0xe1, - 0x48, 0xdd, 0x48, 0x9a, 0x5c, 0xf0, 0xc0, 0x93, 0x74, 0x26, 0x34, 0xe2, - 0xf8, 0xf8, 0x96, 0x84, 0x45, 0x91, 0x6d, 0x21, 0xd6, 0x7b, 0x98, 0x8c, - 0x29, 0x22, 0x61, 0x11, 0x61, 0x79, 0x3d, 0x1b, 0x05, 0x70, 0x3b, 0x64, - 0xc9, 0xee, 0x49, 0x68, 0xfb, 0x3f, 0xa5, 0xa1, 0x7e, 0x77, 0x16, 0xf4, - 0xd2, 0xf0, 0xd9, 0x7f, 0x8b, 0x8b, 0x69, 0x17, 0x77, 0x10, 0x3d, 0x7e, - 0x19, 0xdf, 0x13, 0xe4, 0x56, 0xf9, 0xf3, 0x98, 0x1e, 0xe4, 0x43, 0x5b, - 0xf3, 0x63, 0x3b, 0xef, 0x59, 0x85, 0x79, 0x41, 0x5d, 0x82, 0x27, 0xa3, - 0x59, 0xef, 0x63, 0x07, 0x15, 0x11, 0x1e, 0x34, 0x5e, 0xe4, 0x5a, 0x58, - 0x7d, 0xf0, 0x8c, 0x82, 0x3f, 0x29, 0xf6, 0x53, 0x03, 0xb7, 0x0f, 0xe3, - 0x09, 0x34, 0x90, 0x55, 0x1c, 0xcc, 0xf0, 0x74, 0xe2, 0x1b, 0xc1, 0xa2, - 0x27, 0x8a, 0x4e, 0x3c, 0x49, 0x7e, 0x19, 0x42, 0x0b, 0x97, 0xee, 0xed, - 0xc0, 0x49, 0xef, 0xf3, 0x17, 0x40, 0x8f, 0x55, 0x75, 0xad, 0x9e, 0x41, - 0x99, 0xe1, 0x54, 0xc8, 0xae, 0x47, 0x33, 0x4f, 0x96, 0xee, 0x28, 0x5e, - 0xd8, 0x7d, 0x26, 0x5f, 0x82, 0x95, 0x8f, 0x73, 0x79, 0x51, 0x2c, 0x05, - 0x9e, 0xca, 0x97, 0x1f, 0xce, 0x5c, 0x3f, 0xb9, 0x51, 0xd2, 0x2b, 0x7f, - 0x82, 0x18, 0x83, 0x5c, 0xb4, 0x67, 0x4b, 0xc6, 0x79, 0xe7, 0x55, 0xc7, - 0x59, 0x3b, 0x5e, 0x6c, 0x01, 0x4e, 0x4f, 0xe2, 0xa7, 0x78, 0xa2, 0xfd, - 0xd6, 0x1b, 0x20, 0x5f, 0xf0, 0xf8, 0x1d, 0xfc, 0xc6, 0x3b, 0x93, 0xfd, - 0x32, 0x45, 0x63, 0xdd, 0xe3, 0x10, 0x32, 0x42, 0xde, 0xeb, 0xde, 0x65, - 0xc0, 0x1c, 0x08, 0x90, 0x22, 0xdc, 0x77, 0xdc, 0x71, 0x65, 0x7b, 0xda, - 0x07, 0x44, 0x5f, 0xee, 0x64, 0x62, 0x06, 0x55, 0x64, 0xb4, 0x23, 0x5c, - 0x91, 0xed, 0x19, 0x20, 0x2d, 0x9a, 0x5c, 0x1d, 0xd2, 0x5f, 0x52, 0x15, - 0x17, 0x19, 0xa5, 0x55, 0xf7, 0x24, 0x8e, 0x16, 0x38, 0x24, 0x2a, 0x16, - 0x41, 0x2b, 0xab, 0x97, 0x1e, 0x31, 0x93, 0xe4, 0xa1, 0x69, 0x94, 0x48, - 0x5a, 0x68, 0xd1, 0xd0, 0xd1, 0xef, 0xa4, 0xae, 0x35, 0x55, 0xbf, 0x62, - 0x26, 0x97, 0x95, 0x74, 0x64, 0x90, 0x5a, 0x3e, 0x34, 0xf9, 0xff, 0xaf, - 0x5d, 0x0b, 0x18, 0xaf, 0xe4, 0x72, 0x7d, 0x66, 0x2b, 0x9c, 0xd4, 0x7e, - 0x7a, 0x3d, 0xba, 0xa2, 0x32, 0xd9, 0x05, 0x72, 0x1b, 0xf4, 0x40, 0x5b, - 0x74, 0x5f, 0x84, 0xcb, 0x83, 0xe3, 0x46, 0x4f, 0x75, 0x4e, 0x25, 0xf9, - 0x42, 0x54, 0x13, 0x36, 0xfc, 0x61, 0xf1, 0x51, 0x73, 0xb0, 0x1d, 0xe3, - 0xed, 0x18, 0xa9, 0xf8, 0xdc, 0xd7, 0x49, 0x27, 0xd5, 0xe8, 0x2f, 0x8b, - 0x16, 0xc4, 0x4a, 0x99, 0xa1, 0x5d, 0x2d, 0xad, 0x6b, 0xf7, 0x68, 0x87, - 0x56, 0x78, 0x77, 0xd9, 0x42, 0x01, 0x23, 0x5e, 0x47, 0xf5, 0x47, 0xc8, - 0xff, 0x63, 0xd5, 0x22, 0xea, 0x1e, 0x10, 0xa6, 0x45, 0x5f, 0xb6, 0x7e, - 0x46, 0xd8, 0x53, 0xcd, 0x37, 0xb4, 0x64, 0xf7, 0x89, 0x6c, 0x67, 0xd1, - 0x9d, 0x9b, 0xf7, 0xec, 0x87, 0xbf, 0x7f, 0x59, 0xa4, 0x1b, 0x9f, 0x25, - 0x27, 0x99, 0x22, 0x94, 0x48, 0x0f, 0xcb, 0x90, 0xac, 0x1d, 0x69, 0x53, - 0x57, 0x5e, 0xd1, 0x01, 0x69, 0xd1, 0x69, 0xb6, 0xf8, 0xcb, 0xa2, 0x05, - 0x33, 0xfe, 0x55, 0x51, 0xed, 0x71, 0x61, 0x90, 0x37, 0xf0, 0x13, 0xdd, - 0x93, 0x58, 0xbb, 0x8c, 0xa5, 0x30, 0x43, 0x53, 0xfd, 0xbb, 0x3d, 0xda, - 0x0d, 0x4b, 0x97, 0x47, 0x1e, 0x03, 0x73, 0xc4, 0x90, 0xc5, 0xd0, 0x37, - 0xc9, 0xdb, 0x53, 0xaa, 0xe2, 0x48, 0xe5, 0x59, 0x2f, 0xc9, 0x32, 0xc4, - 0xc3, 0x8c, 0xf4, 0xdb, 0x1d, 0xe3, 0xda, 0x22, 0x45, 0x2c, 0xc9, 0x62, - 0xc6, 0x36, 0xf7, 0xdc, 0xba, 0x30, 0x74, 0x1e, 0xdb, 0xb2, 0x50, 0x96, - 0xee, 0x88, 0xc8, 0x56, 0x8f, 0x09, 0x9b, 0xf2, 0x3e, 0x68, 0x1f, 0xae, - 0x76, 0x1e, 0x37, 0x3d, 0xb1, 0x12, 0x89, 0x45, 0xda, 0xfd, 0x23, 0x18, - 0xdb, 0x64, 0xfd, 0xdc, 0xca, 0xb9, 0x1d, 0xbd, 0xa7, 0x7c, 0xce, 0x24, - 0xb2, 0x7b, 0xbc, 0x44, 0x9b, 0xf3, 0xda, 0x0a, 0x0f, 0xb8, 0xb9, 0xc5, - 0x3b, 0xd8, 0x17, 0xd9, 0xe3, 0xd3, 0xa2, 0xcb, 0x69, 0x7f, 0xd4, 0x49, - 0x8b, 0xf6, 0x00, 0x47, 0x74, 0x27, 0x33, 0xe9, 0xd3, 0xe6, 0x7f, 0x9c, - 0xf4, 0xa1, 0xbc, 0x5a, 0xea, 0xda, 0xb3, 0x93, 0x20, 0xfb, 0x47, 0x25, - 0xb4, 0x68, 0xef, 0x4a, 0x44, 0x77, 0x4f, 0x4b, 0x68, 0x33, 0xe5, 0xfa, - 0x8f, 0xf4, 0x7c, 0xdd, 0xde, 0x5c, 0xfe, 0x88, 0x2e, 0x9f, 0xee, 0x3f, - 0x44, 0x29, 0xc9, 0xea, 0x78, 0xd6, 0x29, 0xfe, 0xd2, 0xf5, 0xce, 0x61, - 0x0d, 0xa5, 0x86, 0xcd, 0x17, 0x4f, 0x33, 0x75, 0xa6, 0x43, 0x2b, 0x3d, - 0x22, 0x12, 0xf1, 0xde, 0x21, 0x43, 0x5e, 0xfb, 0x00, 0xda, 0x1d, 0x7d, - 0x1f, 0xc1, 0xd5, 0xfe, 0x5f, 0xbd, 0x64, 0x78, 0x7d, 0x8e, 0x91, 0x49, - 0x37, 0x17, 0x1f, 0xef, 0x39, 0xc2, 0xea, 0xeb, 0x32, 0xea, 0x7e, 0x5b, - 0xe4, 0xdc, 0x62, 0xfc, 0x02, 0x37, 0x53, 0x2b, 0xdc, 0xaf, 0x50, 0xaa, - 0x97, 0x73, 0xcb, 0xd7, 0xd8, 0x4a, 0xe1, 0x71, 0xd9, 0xbb, 0x46, 0xc4, - 0x17, 0x64, 0x53, 0x4f, 0x65, 0xa2, 0x44, 0xf5, 0x5f, 0x8f, 0x61, 0x48, - 0xea, 0xdd, 0x35, 0xf1, 0xe7, 0xd0, 0x46, 0x16, 0x88, 0x92, 0x85, 0x60, - 0x2e, 0x2f, 0x24, 0x6d, 0x59, 0xfe, 0x22, 0x3a, 0x0f, 0xbf, 0x56, 0xf9, - 0x4b, 0x3a, 0x5f, 0x21, 0x7c, 0x90, 0xed, 0x3b, 0x19, 0x48, 0x1a, 0xee, - 0x07, 0xd7, 0xe7, 0x1b, 0xc7, 0x13, 0x5e, 0x9e, 0x86, 0x15, 0x57, 0x42, - 0xcd, 0xff, 0x38, 0x07, 0x97, 0x68, 0xa3, 0xfb, 0x07, 0x07, 0xb2, 0xd9, - 0x2f, 0x59, 0x96, 0x95, 0xa0, 0x80, 0xff, 0x2e, 0x89, 0xb4, 0xe3, 0x7a, - 0x84, 0x34, 0x19, 0x55, 0x3e, 0xdd, 0x74, 0x76, 0x7d, 0x12, 0xf1, 0x40, - 0x60, 0xca, 0x41, 0x71, 0xdc, 0xcb, 0xc7, 0x50, 0x6e, 0x3e, 0x7e, 0x11, - 0xe4, 0x43, 0xbe, 0x27, 0x7d, 0x74, 0xd5, 0x25, 0x8e, 0x19, 0x63, 0x33, - 0xec, 0x9b, 0x6e, 0x3c, 0xfb, 0xb4, 0x31, 0x87, 0xbe, 0x28, 0x30, 0x00, - 0x76, 0xa9, 0x6a, 0xec, 0xf9, 0x24, 0xcb, 0x35, 0x87, 0xc2, 0xf9, 0x02, - 0x09, 0x48, 0xad, 0x75, 0x25, 0x77, 0x7c, 0x52, 0xe4, 0x4a, 0x20, 0x99, - 0xe7, 0x8e, 0x19, 0x74, 0x3b, 0x7c, 0x14, 0x89, 0x1a, 0xeb, 0x07, 0x8f, - 0x99, 0xdc, 0x69, 0xad, 0x59, 0xfa, 0xd8, 0x30, 0x89, 0xfd, 0x48, 0x62, - 0xe9, 0x7b, 0xab, 0xc9, 0x16, 0x54, 0x1d, 0x46, 0x6e, 0x92, 0xeb, 0xdb, - 0x2c, 0x24, 0xdf, 0x56, 0x16, 0x5b, 0xe7, 0x7a, 0xfb, 0xac, 0x1b, 0x32, - 0xbc, 0x67, 0xc6, 0x31, 0x4e, 0x4e, 0x66, 0xb4, 0x6e, 0x56, 0xc1, 0xd9, - 0x97, 0x8d, 0xbf, 0xb1, 0xb8, 0x07, 0xd9, 0xb8, 0xdc, 0x45, 0x7e, 0xb4, - 0x0a, 0x88, 0xf2, 0xb7, 0x47, 0x0b, 0x86, 0x0d, 0xa2, 0xfc, 0xbd, 0xee, - 0x6c, 0xec, 0xda, 0x24, 0xcd, 0x7c, 0x2d, 0x6a, 0xfc, 0x70, 0xbb, 0x61, - 0x8b, 0xf9, 0x2c, 0x73, 0x1b, 0xf1, 0x4b, 0xab, 0x12, 0x9c, 0x18, 0x2e, - 0x89, 0xd7, 0xce, 0x7e, 0xc3, 0x42, 0xf5, 0x83, 0x7c, 0xb7, 0x94, 0x83, - 0xde, 0xc7, 0x9e, 0xce, 0x23, 0x44, 0xd2, 0xa9, 0x6d, 0x5e, 0x64, 0x53, - 0x18, 0x6b, 0x0b, 0x6b, 0x38, 0x25, 0x6d, 0x85, 0x81, 0xa2, 0x3e, 0x94, - 0xce, 0xfd, 0xaf, 0x5d, 0x0b, 0xe7, 0x53, 0x49, 0x1c, 0xed, 0xc6, 0x56, - 0x72, 0x2b, 0x05, 0x62, 0x09, 0x77, 0x4b, 0xab, 0xc6, 0x65, 0x2d, 0xb2, - 0x1f, 0xfa, 0x3b, 0x0e, 0x6b, 0xd1, 0x6b, 0x57, 0xcd, 0x1f, 0xa2, 0x4e, - 0x69, 0x93, 0xaf, 0xaf, 0x44, 0x9a, 0x97, 0xc7, 0xe4, 0xdc, 0xaf, 0x0c, - 0xd6, 0x8f, 0xcb, 0xa3, 0xde, 0xaa, 0x9f, 0xd3, 0xd6, 0x76, 0x68, 0xfa, - 0x49, 0xf7, 0x2e, 0xf2, 0x58, 0x28, 0x2d, 0x78, 0xa2, 0x43, 0xf2, 0x93, - 0xb3, 0x9a, 0x76, 0xef, 0xad, 0xaf, 0x97, 0xee, 0x2c, 0x50, 0x74, 0xc7, - 0xd4, 0xdc, 0xd9, 0xe4, 0x20, 0xb3, 0x75, 0xc3, 0x4a, 0xc7, 0xe9, 0x2c, - 0xba, 0x1d, 0x07, 0xca, 0x62, 0x1f, 0xbb, 0x91, 0xd3, 0x64, 0xcb, 0x63, - 0xc7, 0xbc, 0x2c, 0xba, 0xb6, 0xd2, 0x62, 0x8d, 0x1c, 0xb4, 0xca, 0x63, - 0x3d, 0x91, 0xef, 0xfc, 0x04, 0x86, 0xc8, 0x4c, 0x58, 0xb0, 0x33, 0x63, - 0x60, 0x6b, 0xe9, 0xc1, 0x5d, 0x51, 0x3f, 0x37, 0xec, 0xb7, 0x4b, 0xab, - 0x44, 0x1e, 0x0d, 0x6e, 0x59, 0x49, 0xfd, 0x51, 0xa1, 0x2c, 0xda, 0x11, - 0x21, 0x2d, 0x86, 0x8f, 0x94, 0xec, 0xbe, 0x8e, 0x6f, 0xe1, 0xe3, 0x58, - 0x2c, 0x4b, 0x3f, 0x18, 0xec, 0x1b, 0x35, 0x5a, 0x6f, 0x60, 0x47, 0xb6, - 0xb0, 0xbe, 0x87, 0x69, 0x68, 0x3d, 0xd6, 0x3c, 0xbd, 0x1d, 0xd1, 0x57, - 0x12, 0x55, 0xae, 0x35, 0x07, 0x4d, 0x59, 0x88, 0xe8, 0xd1, 0xa7, 0xa2, - 0xa4, 0xeb, 0x22, 0xa5, 0x5b, 0xdd, 0x62, 0x21, 0x88, 0xfd, 0x5d, 0x17, - 0x1e, 0x6c, 0x1e, 0xf3, 0x87, 0xcd, 0xf8, 0xe8, 0xeb, 0xa5, 0x71, 0xe6, - 0x92, 0x3c, 0xaf, 0x47, 0xcb, 0xd9, 0x69, 0x8d, 0xaf, 0x24, 0x7b, 0xbe, - 0x55, 0xd9, 0x34, 0x01, 0x55, 0x61, 0x71, 0x80, 0x55, 0xb2, 0x9f, 0xd4, - 0xcd, 0x2a, 0x69, 0xe2, 0x63, 0xa4, 0x78, 0xf5, 0xab, 0xab, 0xd7, 0xd0, - 0x6a, 0xf0, 0x05, 0xa5, 0x3c, 0x6d, 0xe2, 0x09, 0xb2, 0xa5, 0xf1, 0x15, - 0x2f, 0xa8, 0x4d, 0xfd, 0x19, 0x2e, 0xdd, 0x0c, 0xf2, 0xa7, 0xe0, 0x52, - 0x74, 0xc8, 0x28, 0xfa, 0x73, 0xa7, 0xfd, 0x73, 0xe4, 0x81, 0xfc, 0x7b, - 0x02, 0x30, 0xf7, 0x30, 0x36, 0x42, 0x55, 0x48, 0x51, 0x4e, 0x4b, 0x70, - 0x1e, 0x01, 0x85, 0xf4, 0xf5, 0xba, 0xba, 0x5d, 0x4c, 0xc5, 0x83, 0x7b, - 0x61, 0x2b, 0x37, 0x6b, 0x38, 0x22, 0x7d, 0x93, 0x17, 0x2a, 0x3a, 0xac, - 0x0f, 0xb0, 0x48, 0x2c, 0x39, 0xec, 0xf6, 0xa4, 0x3d, 0xe5, 0x1e, 0xeb, - 0x2f, 0x32, 0xbf, 0x77, 0x51, 0x97, 0xfe, 0xfd, 0x7c, 0x58, 0xd4, 0xae, - 0xfc, 0xba, 0x2c, 0x8d, 0xb4, 0x36, 0x36, 0x53, 0x0d, 0xe7, 0x56, 0x2f, - 0x46, 0x94, 0x7e, 0x79, 0xf0, 0x39, 0xc4, 0x80, 0xca, 0x15, 0x4b, 0x23, - 0xda, 0x37, 0xa8, 0x18, 0x14, 0x6e, 0x82, 0x0b, 0x83, 0xec, 0x65, 0xf6, - 0xfd, 0x65, 0x91, 0xde, 0xff, 0x52, 0xb8, 0xfa, 0xbf, 0x76, 0xcd, 0xe5, - 0xc7, 0x45, 0x53, 0x58, 0xed, 0xc3, 0xef, 0x99, 0xdf, 0xb3, 0x8b, 0x91, - 0x98, 0x5b, 0xdd, 0xc5, 0x61, 0xe6, 0x65, 0x1d, 0xce, 0xce, 0xa6, 0xa1, - 0xba, 0x1c, 0x99, 0xbb, 0x42, 0xb2, 0xda, 0xc1, 0x5d, 0x82, 0xf5, 0x5b, - 0xce, 0xb7, 0xbf, 0xb2, 0x1e, 0xab, 0xce, 0xa8, 0x8b, 0x23, 0x54, 0xda, - 0x67, 0x72, 0x71, 0x8c, 0x9c, 0xdb, 0x5d, 0x10, 0x14, 0xa5, 0x2f, 0x97, - 0xa6, 0xee, 0x3d, 0x55, 0xfe, 0x22, 0xe5, 0xf3, 0xfd, 0x18, 0x15, 0xe0, - 0xfb, 0x61, 0x27, 0x50, 0xb2, 0xe7, 0xca, 0xfb, 0x20, 0xed, 0xb2, 0x53, - 0xc0, 0x8a, 0x6e, 0xcb, 0xc5, 0xd1, 0xc1, 0x2c, 0xe3, 0x28, 0xf3, 0xe4, - 0xa6, 0xbf, 0xc9, 0x0c, 0xe4, 0xc6, 0x31, 0x06, 0xfa, 0x6a, 0xdc, 0xbe, - 0x2f, 0xf1, 0x1b, 0x4c, 0xf0, 0xe7, 0x1d, 0x12, 0x6f, 0x78, 0xf4, 0x58, - 0xf1, 0x14, 0x56, 0x60, 0xaf, 0x3a, 0x07, 0x8a, 0x92, 0x6d, 0xb2, 0x06, - 0xc1, 0xb3, 0x8f, 0xbb, 0x81, 0x30, 0xb1, 0x80, 0xab, 0x00, 0x0e, 0xa5, - 0x48, 0xad, 0x9a, 0x41, 0x8d, 0x1e, 0xf8, 0x12, 0x86, 0xe7, 0x47, 0xaa, - 0xc5, 0x3e, 0x47, 0x04, 0x32, 0xee, 0xe8, 0x98, 0xd5, 0xa0, 0xd2, 0x9d, - 0xf3, 0x3b, 0x52, 0x45, 0xa6, 0x89, 0xb3, 0xae, 0x62, 0xde, 0x3c, 0xc7, - 0x6c, 0xc2, 0x0d, 0x89, 0x30, 0x26, 0x06, 0x8a, 0x18, 0x26, 0xea, 0xf5, - 0x0a, 0x33, 0x52, 0x34, 0xe9, 0x95, 0x5d, 0x00, 0x87, 0xb0, 0x36, 0xc0, - 0x7c, 0x4e, 0x6b, 0x84, 0x87, 0xb9, 0x20, 0xb2, 0x08, 0x54, 0x18, 0xc7, - 0xcb, 0xef, 0xdb, 0x03, 0xfa, 0x0e, 0x9d, 0xc4, 0x9f, 0x8e, 0x70, 0x19, - 0x27, 0x9e, 0xe8, 0x5d, 0xcf, 0x0c, 0xcf, 0x54, 0xbd, 0x06, 0xc4, 0x44, - 0x2e, 0x16, 0x35, 0x06, 0xf4, 0x0e, 0xe3, 0xb0, 0xe3, 0x10, 0x4a, 0x1b, - 0x85, 0xe3, 0xe7, 0x53, 0x04, 0x1c, 0x56, 0xce, 0x45, 0x7b, 0xaf, 0x53, - 0x4a, 0xa9, 0xce, 0x45, 0x41, 0x3a, 0xc0, 0xd4, 0xd6, 0x7f, 0x9a, 0xd9, - 0xe4, 0x84, 0x6e, 0xb4, 0x33, 0x16, 0x87, 0x4d, 0x24, 0x64, 0x20, 0x16, - 0xc6, 0x0a, 0x5d, 0x6c, 0x8c, 0x72, 0x5d, 0xc9, 0xb4, 0x7e, 0xa6, 0xac, - 0xfa, 0x13, 0xa7, 0xd1, 0x60, 0x6e, 0x01, 0x7b, 0x9e, 0x15, 0x24, 0x05, - 0xa7, 0xdf, 0x09, 0xb1, 0x46, 0x43, 0x7c, 0x19, 0x9e, 0x83, 0xa4, 0x15, - 0x55, 0xbc, 0xc5, 0x6f, 0x24, 0x66, 0x7b, 0xe4, 0xc9, 0x27, 0x9e, 0x5a, - 0xd8, 0xb3, 0xd6, 0x30, 0xa7, 0xb7, 0x12, 0x02, 0x74, 0x36, 0x1e, 0x56, - 0x94, 0x7a, 0x6e, 0xeb, 0xc4, 0xd4, 0xe0, 0xf1, 0x18, 0x79, 0x15, 0x08, - 0x95, 0xf0, 0x7c, 0x53, 0x56, 0x11, 0x95, 0xdc, 0xe2, 0x15, 0xa7, 0x3f, - 0xfa, 0xca, 0xaf, 0x22, 0x16, 0x11, 0x4c, 0x26, 0x6b, 0x3f, 0x9d, 0x94, - 0x9d, 0x9a, 0xdf, 0x2a, 0x40, 0x99, 0x64, 0x5d, 0x56, 0x10, 0x7d, 0x50, - 0x9a, 0x71, 0x4e, 0x69, 0xd1, 0x3a, 0xad, 0x44, 0x0b, 0x20, 0x9a, 0x67, - 0xe8, 0xd2, 0xc2, 0xad, 0x42, 0xa8, 0x01, 0x63, 0x21, 0x8a, 0x4d, 0xfa, - 0xdc, 0x13, 0x58, 0x43, 0x37, 0xd1, 0x26, 0xc0, 0x90, 0x0f, 0xed, 0x8e, - 0x4e, 0x08, 0x0d, 0x5c, 0x0c, 0x55, 0x73, 0x07, 0x04, 0x21, 0x28, 0xad, - 0x47, 0xea, 0xee, 0x25, 0x1c, 0x6d, 0x1d, 0x09, 0xad, 0x46, 0x3b, 0x63, - 0x7b, 0x4b, 0xcf, 0xc7, 0xfb, 0xb6, 0xe8, 0x01, 0x52, 0x45, 0x5e, 0x5d, - 0xa6, 0xda, 0x95, 0x0a, 0xda, 0xf0, 0x02, 0xa2, 0x7b, 0x4a, 0xfb, 0x56, - 0x00, 0x92, 0xa5, 0x59, 0x4d, 0x36, 0x8c, 0x3a, 0x36, 0x45, 0x30, 0xf7, - 0x84, 0x8c, 0x30, 0x1c, 0x7f, 0x47, 0x57, 0xf4, 0x9b, 0xbe, 0xb7, 0x27, - 0x21, 0x4a, 0x6a, 0x7e, 0x43, 0xfc, 0x73, 0xcc, 0xda, 0x44, 0xfc, 0x52, - 0x51, 0x69, 0x96, 0x45, 0xb6, 0x14, 0xc1, 0xa6, 0x24, 0xa4, 0xac, 0x52, - 0x22, 0xb6, 0x0d, 0x62, 0x96, 0xef, 0x1b, 0xaf, 0x7a, 0xad, 0x4b, 0x25, - 0x09, 0xa6, 0x4b, 0xa2, 0x4d, 0xdf, 0x5b, 0xa8, 0xf3, 0xf5, 0x10, 0xff, - 0xde, 0x28, 0xf2, 0x2c, 0x97, 0xd3, 0xde, 0x0f, 0xbc, 0xb7, 0xee, 0xec, - 0xf1, 0x4d, 0x76, 0xd3, 0xfc, 0xd0, 0x1f, 0xc3, 0xbd, 0xb7, 0x4e, 0xdf, - 0xf0, 0x1b, 0x6c, 0x5e, 0xdc, 0x00, 0xbd, 0x53, 0x6b, 0x3c, 0x91, 0x52, - 0xd1, 0x95, 0x33, 0x58, 0x80, 0x1e, 0x3a, 0x22, 0x7c, 0x77, 0xda, 0xe1, - 0x81, 0xdf, 0x8e, 0x6b, 0xae, 0x73, 0xfd, 0xd0, 0x08, 0x3f, 0x81, 0x7f, - 0xb7, 0xf5, 0xf4, 0x7b, 0x4b, 0x25, 0xd0, 0x6f, 0xdc, 0xd7, 0x4e, 0x5f, - 0xa7, 0x09, 0x3d, 0x1d, 0x0a, 0xfc, 0xeb, 0xc4, 0x48, 0x37, 0xfd, 0x7b, - 0x3b, 0x83, 0xab, 0xf6, 0x7d, 0x78, 0x8d, 0x50, 0xd7, 0x97, 0x75, 0xc1, - 0x5e, 0x07, 0xfe, 0x5a, 0xa7, 0xc2, 0x18, 0x37, 0x0d, 0xa3, 0x88, 0x83, - 0xd0, 0xdb, 0xf6, 0xc0, 0xf6, 0x37, 0xfa, 0x31, 0x33, 0x29, 0x28, 0x7b, - 0x24, 0xf2, 0x71, 0x86, 0x28, 0xc9, 0x0a, 0x20, 0x65, 0xcd, 0x8f, 0xa4, - 0xf4, 0x74, 0x45, 0x44, 0xc6, 0x50, 0xb8, 0xc4, 0xde, 0x49, 0xe1, 0x2c, - 0x08, 0x25, 0x46, 0xa2, 0x6e, 0x4f, 0xed, 0xec, 0x84, 0x3e, 0xb1, 0x84, - 0x54, 0x1c, 0xd6, 0x53, 0xb8, 0x79, 0xeb, 0x69, 0x8c, 0x5c, 0x95, 0x7e, - 0x84, 0xae, 0x26, 0x81, 0xfd, 0x20, 0x7a, 0xc3, 0x18, 0x27, 0xe7, 0x78, - 0x64, 0xaa, 0xbe, 0xe5, 0xf2, 0xdb, 0x0e, 0xbf, 0xc3, 0x1d, 0x78, 0xba, - 0xa2, 0x63, 0x0a, 0x4b, 0x14, 0x91, 0x28, 0x96, 0xe5, 0x64, 0x91, 0x02, - 0x62, 0x9b, 0x8c, 0x91, 0x09, 0x78, 0x46, 0x5f, 0x0a, 0xa5, 0x93, 0xcc, - 0x47, 0xec, 0x54, 0x1c, 0x5a, 0x25, 0x9a, 0xb7, 0xe5, 0x38, 0xe7, 0x4e, - 0x79, 0x74, 0xb5, 0xa9, 0x7f, 0x21, 0x69, 0x2b, 0x88, 0xb8, 0xab, 0x5c, - 0xec, 0x93, 0x79, 0xdb, 0xea, 0xce, 0x0e, 0x27, 0x4f, 0xc4, 0x19, 0xec, - 0xb6, 0xbd, 0x13, 0xe2, 0x9a, 0x3a, 0xcc, 0x90, 0x49, 0x24, 0x34, 0xbd, - 0x8d, 0xe6, 0xa6, 0x06, 0x30, 0x6c, 0x58, 0xdb, 0xdb, 0xc1, 0x0a, 0xd8, - 0x8e, 0x3f, 0x66, 0x72, 0x13, 0x25, 0x07, 0x71, 0x28, 0xc6, 0x32, 0xe0, - 0xf9, 0x58, 0x78, 0xc7, 0x10, 0x56, 0x46, 0xb5, 0xae, 0xe3, 0x38, 0x21, - 0x09, 0xe9, 0x46, 0x61, 0xeb, 0x47, 0x14, 0xc2, 0x2b, 0xc3, 0x8a, 0x57, - 0x91, 0xff, 0x9d, 0x43, 0x70, 0xce, 0x13, 0x28, 0x11, 0xd0, 0xc3, 0x17, - 0xd5, 0x10, 0x20, 0xea, 0xa1, 0xa2, 0x70, 0x2c, 0xf5, 0x4f, 0x44, 0x72, - 0x14, 0x88, 0xae, 0x86, 0x0c, 0x62, 0x58, 0x22, 0x87, 0x83, 0x54, 0x49, - 0x41, 0x84, 0x96, 0x66, 0x66, 0x42, 0x07, 0xb3, 0xf1, 0x0e, 0x27, 0x10, - 0xfa, 0x3a, 0x00, 0xc7, 0xe8, 0xd0, 0xb7, 0x60, 0x06, 0x25, 0x13, 0x98, - 0x07, 0x8c, 0x1d, 0x84, 0x65, 0x9f, 0xfe, 0x77, 0x8e, 0x57, 0x72, 0x7f, - 0x56, 0x74, 0xfb, 0xe6, 0x6f, 0x9d, 0x2c, 0x94, 0xd1, 0x51, 0x03, 0x3a, - 0x90, 0x7e, 0x39, 0x23, 0x56, 0x58, 0x27, 0xe7, 0x23, 0xca, 0x6c, 0x9c, - 0x64, 0xaa, 0x6c, 0x47, 0x15, 0xec, 0xb8, 0xdc, 0x4e, 0xde, 0xfd, 0x02, - 0xdf, 0x21, 0x98, 0x70, 0xe9, 0xa8, 0xae, 0x84, 0x43, 0x86, 0xb2, 0xbe, - 0x94, 0x78, 0x41, 0x0a, 0x54, 0x93, 0xf9, 0xd5, 0xc1, 0x32, 0x8d, 0x0e, - 0x17, 0xc5, 0x91, 0x41, 0x55, 0xa2, 0xf5, 0xd7, 0x20, 0xb3, 0xc3, 0x42, - 0xf4, 0x8a, 0x92, 0xc6, 0x06, 0x15, 0x82, 0xf0, 0x77, 0x9d, 0x11, 0x04, - 0xc9, 0xbc, 0xd4, 0x46, 0xdc, 0xfa, 0xe6, 0xb8, 0xae, 0xac, 0x5d, 0x6c, - 0xc4, 0x58, 0x90, 0xa3, 0xcb, 0xe3, 0xb7, 0xc8, 0xc7, 0x9f, 0x3f, 0xfe, - 0x14, 0x1a, 0x46, 0x11, 0x5a, 0xb9, 0xe3, 0x98, 0x93, 0xdf, 0x13, 0xf3, - 0xcb, 0x72, 0xbf, 0xcc, 0x30, 0x1d, 0x1e, 0xa4, 0x91, 0x63, 0xd7, 0x59, - 0xd7, 0x6f, 0x57, 0x49, 0x27, 0x14, 0x8c, 0xd2, 0xed, 0x70, 0xfb, 0xa2, - 0x0f, 0xfa, 0xbd, 0xff, 0x03, 0x85, 0xb1, 0x38, 0x38, 0x09, 0x33, 0x6c, - 0x6f, 0x43, 0x28, 0xde, 0x23, 0xa8, 0xad, 0x21, 0xae, 0xc3, 0x62, 0x76, - 0x35, 0x5a, 0x88, 0x62, 0x4a, 0x49, 0x49, 0xda, 0x1b, 0x85, 0xfd, 0xd0, - 0x70, 0x02, 0x6e, 0x68, 0xa8, 0x61, 0xd4, 0x56, 0x2a, 0x9e, 0xaf, 0x6a, - 0x7c, 0x4b, 0xbd, 0x1b, 0xe1, 0x3b, 0xcc, 0x29, 0x48, 0xe0, 0xba, 0x26, - 0x8f, 0x04, 0xdd, 0xd9, 0xa7, 0x03, 0x4c, 0x34, 0x96, 0x83, 0xa6, 0x4e, - 0x34, 0x84, 0x5f, 0x72, 0x74, 0x44, 0x6a, 0xef, 0xca, 0xae, 0x44, 0xab, - 0x05, 0xa0, 0xca, 0xc0, 0x78, 0x71, 0xaf, 0x8d, 0x6b, 0xe0, 0xdc, 0x97, - 0x7e, 0x50, 0xf2, 0xdd, 0x66, 0xc8, 0xa0, 0x38, 0x8b, 0x10, 0x6a, 0x92, - 0xeb, 0x09, 0x3b, 0x1b, 0x77, 0x29, 0xaa, 0x0f, 0xea, 0x23, 0xbc, 0xe9, - 0x8c, 0x5e, 0x20, 0xdc, 0x94, 0xe8, 0x87, 0x85, 0xa6, 0xec, 0xc0, 0xeb, - 0x05, 0x17, 0xc5, 0x84, 0x3c, 0x80, 0x09, 0xac, 0x57, 0x00, 0x1d, 0x76, - 0xc8, 0x4d, 0x01, 0x3e, 0xc9, 0xee, 0x2a, 0x35, 0x2c, 0xfa, 0xa7, 0xb4, - 0x69, 0xd1, 0x07, 0x4d, 0xf9, 0xd8, 0x80, 0xd2, 0x84, 0xb8, 0x5d, 0x28, - 0x98, 0x7f, 0x83, 0xe8, 0xdc, 0xda, 0x8c, 0x61, 0x42, 0x5d, 0xa6, 0xf8, - 0x90, 0xb6, 0x3a, 0x8d, 0x44, 0x1d, 0x3d, 0x82, 0x2d, 0xa5, 0x9a, 0x78, - 0x8a, 0x0a, 0x10, 0xe2, 0x0b, 0xe2, 0x53, 0xa0, 0x18, 0x29, 0x2a, 0x5e, - 0xae, 0xd2, 0xf5, 0x2c, 0x1c, 0x4e, 0x17, 0xb6, 0x0e, 0xe9, 0x57, 0x06, - 0x48, 0xe7, 0x75, 0x67, 0x5c, 0xbe, 0x02, 0x85, 0xcb, 0x5d, 0x2d, 0x61, - 0xdc, 0x87, 0x86, 0x22, 0x92, 0x9d, 0x2e, 0xfe, 0x0d, 0xdd, 0x73, 0xdb, - 0xe5, 0x3b, 0x6c, 0xbf, 0x99, 0xe4, 0x60, 0x05, 0xbd, 0x2c, 0xf7, 0x12, - 0xd8, 0xed, 0x95, 0x2b, 0x1b, 0xdc, 0xdd, 0xa1, 0x74, 0xe6, 0x2b, 0x65, - 0x60, 0x45, 0xa6, 0xe2, 0xb2, 0xca, 0x39, 0x9c, 0xed, 0x61, 0x56, 0xc2, - 0xe7, 0x99, 0xc1, 0xaa, 0x7b, 0xcc, 0xeb, 0xe5, 0x61, 0xa7, 0x2b, 0x5b, - 0xda, 0x5c, 0xf7, 0x24, 0x6a, 0xc9, 0x33, 0xb4, 0x1c, 0xc1, 0x74, 0xd3, - 0xf3, 0xc8, 0x4b, 0xc4, 0x10, 0x21, 0xfd, 0x33, 0x0c, 0x4a, 0x3f, 0x09, - 0xd1, 0x15, 0x61, 0x7f, 0x2f, 0x73, 0x18, 0xc8, 0xda, 0xc2, 0x92, 0x5e, - 0x1e, 0x2c, 0xad, 0xe5, 0xa1, 0xd2, 0x5a, 0x1e, 0xf1, 0xf5, 0x9b, 0x7d, - 0x6a, 0x51, 0x9e, 0xa5, 0x87, 0x77, 0x93, 0x8e, 0x5c, 0x98, 0xa1, 0x36, - 0xc0, 0xb9, 0x5a, 0xb5, 0x27, 0xad, 0x28, 0xe2, 0x5e, 0xa9, 0xa7, 0xaa, - 0x82, 0x23, 0x7e, 0x38, 0xa0, 0x6f, 0x21, 0xb2, 0x76, 0x50, 0x50, 0xc0, - 0xf4, 0xb3, 0x0d, 0xf1, 0xf3, 0x75, 0xb9, 0x65, 0x0f, 0x14, 0xf5, 0xd2, - 0x17, 0xf7, 0x59, 0xc0, 0x08, 0x77, 0x8b, 0x54, 0x43, 0xea, 0xc3, 0x4a, - 0xfb, 0x48, 0xfc, 0xc6, 0x54, 0xe3, 0xb0, 0x53, 0x65, 0x11, 0x10, 0x39, - 0x8a, 0x6c, 0x64, 0x33, 0xdc, 0x9d, 0xa0, 0x7d, 0x65, 0xfe, 0xf7, 0x55, - 0xf9, 0x87, 0x6c, 0x80, 0x08, 0x63, 0x85, 0xaf, 0x43, 0xf1, 0x1e, 0x43, - 0x82, 0xf5, 0xf2, 0xa6, 0x8b, 0xe3, 0x19, 0x3f, 0x61, 0xeb, 0x64, 0xc7, - 0x48, 0x5f, 0x0d, 0x45, 0xc3, 0x97, 0xce, 0x34, 0x23, 0xf4, 0x0a, 0x22, - 0x21, 0x47, 0xdd, 0x53, 0x43, 0x00, 0xf4, 0x12, 0x99, 0x01, 0x25, 0xed, - 0xe0, 0x41, 0x44, 0xcc, 0x31, 0x80, 0x9d, 0x37, 0x96, 0x10, 0x77, 0xba, - 0x5b, 0x9d, 0xe3, 0x99, 0x9b, 0x57, 0x28, 0xfa, 0x20, 0xa0, 0x8b, 0x57, - 0xa8, 0x1d, 0x0f, 0x33, 0xec, 0x47, 0xee, 0xb1, 0xb6, 0xcb, 0x0f, 0xfe, - 0xaf, 0x85, 0x31, 0xfd, 0x30, 0x7a, 0x77, 0xa0, 0x3f, 0xe2, 0x0c, 0x0c, - 0x39, 0xdd, 0xcc, 0xe1, 0xa0, 0x4a, 0xa8, 0x53, 0x4a, 0x8a, 0xe7, 0xde, - 0xac, 0xe5, 0xb7, 0x17, 0xce, 0x2d, 0xec, 0xef, 0x91, 0xd1, 0x5e, 0xda, - 0x36, 0x08, 0xc9, 0x53, 0xa2, 0x9c, 0x91, 0xf8, 0x15, 0x39, 0xc5, 0xcf, - 0x40, 0x25, 0x0d, 0x3c, 0x88, 0xb7, 0x27, 0x8f, 0xf2, 0xc3, 0xc5, 0x8f, - 0xb5, 0x09, 0xed, 0xf3, 0xd0, 0xc1, 0x02, 0xc5, 0x5b, 0xbf, 0xff, 0x7c, - 0x10, 0xc8, 0xe4, 0x50, 0x5b, 0xa3, 0xec, 0xf0, 0x0a, 0xb2, 0xcb, 0xd9, - 0x56, 0xfb, 0xd8, 0x11, 0x20, 0xda, 0x7f, 0x5a, 0xff, 0x40, 0x30, 0xdc, - 0x46, 0x99, 0x19, 0xb2, 0xdb, 0x59, 0x60, 0x43, 0xbc, 0x6b, 0x74, 0x00, - 0x21, 0x81, 0x5a, 0x39, 0x0e, 0x81, 0x29, 0xdf, 0x89, 0xa2, 0x12, 0x06, - 0xc8, 0xcd, 0xb3, 0xdb, 0x09, 0xe2, 0x2c, 0x20, 0x5c, 0x3a, 0x3a, 0x31, - 0x85, 0x4c, 0x43, 0xda, 0xf3, 0xd7, 0x97, 0x5d, 0x9c, 0x87, 0x4b, 0x0a, - 0x62, 0x9f, 0xf1, 0x46, 0x33, 0x5c, 0xa2, 0xc5, 0xa6, 0x3d, 0x84, 0xe6, - 0x4c, 0x8e, 0x33, 0xc9, 0x12, 0xb5, 0x53, 0x49, 0xe7, 0xf4, 0x36, 0x8c, - 0xaf, 0x84, 0x0c, 0x65, 0x70, 0xdd, 0x00, 0x9d, 0x51, 0xe2, 0x37, 0xac, - 0xce, 0xa6, 0x0b, 0x2d, 0x7d, 0x09, 0x23, 0x4c, 0xa7, 0xcf, 0xcb, 0x96, - 0xe5, 0x02, 0x4d, 0xe9, 0xb7, 0x27, 0xc0, 0x78, 0xf7, 0x43, 0x3f, 0x11, - 0xcc, 0x6d, 0xdd, 0xbd, 0xe0, 0xf8, 0x6e, 0x6a, 0xd0, 0x31, 0x8a, 0x52, - 0x32, 0xc7, 0xcc, 0xa6, 0x46, 0x91, 0x0a, 0xb2, 0xa4, 0xeb, 0x1e, 0x71, - 0x9c, 0x13, 0x8f, 0x4b, 0x0f, 0x0f, 0xa1, 0x97, 0x51, 0xd9, 0xf3, 0x73, - 0xd9, 0x33, 0x9d, 0x92, 0x04, 0x29, 0x31, 0xc8, 0xe9, 0xa4, 0x49, 0x48, - 0x4e, 0x39, 0xc7, 0x51, 0xa5, 0xf9, 0x76, 0x91, 0x1f, 0xe6, 0xd9, 0x92, - 0x5c, 0x1b, 0xe5, 0x94, 0xeb, 0xe1, 0x61, 0x7e, 0xe4, 0x33, 0x44, 0x7f, - 0x04, 0xcb, 0x78, 0x7e, 0x13, 0xff, 0x78, 0x7e, 0xbb, 0x8f, 0x87, 0x3e, - 0x48, 0xe8, 0xeb, 0xdd, 0x14, 0xe4, 0xe9, 0x7d, 0x52, 0x63, 0x06, 0xd2, - 0x8b, 0xdf, 0xfb, 0xcb, 0xc2, 0x01, 0x37, 0x81, 0x7c, 0x94, 0x0c, 0x9c, - 0x29, 0xd8, 0xee, 0x2e, 0xdd, 0x72, 0x66, 0xbb, 0x28, 0xaf, 0xec, 0x2e, - 0xb7, 0x10, 0xed, 0x2e, 0xd0, 0xe2, 0xf0, 0x7b, 0x42, 0x41, 0x65, 0x60, - 0x1b, 0x53, 0x18, 0x6d, 0xa3, 0xfc, 0xed, 0xbc, 0x7b, 0x8d, 0x01, 0xa2, - 0x55, 0xef, 0xc1, 0x10, 0x0f, 0x73, 0xb2, 0x01, 0x63, 0xf7, 0x3a, 0x08, - 0x6f, 0xbc, 0xb7, 0x85, 0x70, 0x60, 0xbe, 0x37, 0x04, 0x4a, 0xdd, 0x3b, - 0x4d, 0x98, 0x30, 0xa5, 0x07, 0xa7, 0x9d, 0xaa, 0xff, 0xde, 0xa6, 0x87, - 0xe1, 0x7e, 0x8f, 0xe1, 0xe6, 0x1e, 0x17, 0xe0, 0x30, 0x63, 0x5c, 0x1b, - 0xee, 0xc3, 0xe0, 0xb6, 0x74, 0x0f, 0x81, 0xa7, 0x8f, 0x40, 0x90, 0x89, - 0x97, 0xd6, 0xf3, 0xda, 0x42, 0x11, 0xa1, 0x72, 0x0b, 0x92, 0x79, 0xbc, - 0xe7, 0x5b, 0x2d, 0x48, 0x94, 0xf5, 0xfb, 0xa9, 0x48, 0x90, 0x9e, 0x2b, - 0x2a, 0xb8, 0x31, 0x54, 0x5f, 0x39, 0xf0, 0xda, 0x4d, 0x5e, 0xd1, 0x35, - 0xee, 0xe4, 0x17, 0x93, 0x40, 0x59, 0x7f, 0x06, 0x8e, 0x9a, 0xbf, 0xa7, - 0xac, 0x19, 0x61, 0xb5, 0x80, 0xfb, 0x79, 0xe3, 0xf7, 0xae, 0x11, 0xdc, - 0xb3, 0xb6, 0xef, 0xd2, 0xd0, 0x00, 0xd4, 0x58, 0xf6, 0x3e, 0x28, 0x4c, - 0x0e, 0x90, 0x3c, 0x1b, 0xa5, 0x03, 0x33, 0x8a, 0x27, 0x16, 0x53, 0xc3, - 0xf0, 0x1d, 0xbf, 0x96, 0x0f, 0x9b, 0x30, 0x6c, 0x29, 0x29, 0x36, 0x1c, - 0x2f, 0x1e, 0x88, 0x28, 0x7f, 0x34, 0xfb, 0xd0, 0x57, 0xcb, 0xe8, 0x17, - 0x27, 0xae, 0x81, 0x92, 0x25, 0x65, 0xd7, 0x3a, 0xd5, 0x17, 0x24, 0x21, - 0x2a, 0xf9, 0x81, 0x65, 0x7b, 0x32, 0x86, 0xba, 0x00, 0xca, 0x41, 0x26, - 0xae, 0x5c, 0x3b, 0xe8, 0x10, 0x78, 0xef, 0x1a, 0xf2, 0x46, 0x6f, 0x2e, - 0xbf, 0xc0, 0x19, 0xee, 0x96, 0x93, 0x53, 0xc0, 0x5c, 0xea, 0x8a, 0x8c, - 0xaa, 0x0b, 0x78, 0x6e, 0xcd, 0xff, 0xe2, 0xbc, 0x7f, 0x41, 0xce, 0x10, - 0xce, 0x44, 0x05, 0xd9, 0x54, 0xbe, 0xb6, 0xf1, 0xd1, 0x9a, 0xa3, 0x29, - 0x87, 0x35, 0x2e, 0x2a, 0xa2, 0x2f, 0xc9, 0xda, 0x0c, 0xe1, 0xa6, 0x6e, - 0x59, 0x5f, 0xe7, 0x9e, 0xe8, 0xe8, 0x90, 0x02, 0x7b, 0x5c, 0x72, 0x6c, - 0x7b, 0x44, 0x06, 0x1e, 0x97, 0xec, 0xbb, 0x01, 0x23, 0x3c, 0x20, 0xa6, - 0x0a, 0x48, 0xed, 0x92, 0xbc, 0x48, 0x72, 0x4a, 0xc9, 0xd6, 0x0a, 0xb3, - 0x13, 0x19, 0xbd, 0x41, 0x9e, 0x69, 0x6c, 0x54, 0x81, 0xc4, 0x1f, 0x05, - 0xa8, 0xf2, 0x7a, 0x74, 0xec, 0x36, 0xa0, 0xf6, 0x36, 0x8f, 0x92, 0x88, - 0xe2, 0x7e, 0x84, 0x64, 0x85, 0x66, 0xdd, 0x96, 0x36, 0xb8, 0xe4, 0x97, - 0xc1, 0x94, 0x6e, 0x39, 0x6b, 0x3c, 0x20, 0x7b, 0x47, 0x7e, 0x2a, 0x54, - 0xfa, 0x21, 0xc3, 0xc5, 0xb6, 0xe7, 0xd4, 0xa1, 0x4d, 0xa6, 0x93, 0x4d, - 0x0e, 0x1a, 0x08, 0x68, 0xbd, 0x8e, 0x79, 0xe6, 0xc3, 0x43, 0x71, 0x97, - 0x28, 0xd4, 0x9a, 0x6c, 0x6b, 0x68, 0xa6, 0xfa, 0x87, 0x12, 0x4d, 0xbd, - 0x32, 0x1b, 0xc0, 0x8a, 0xf8, 0x09, 0x51, 0x59, 0xc1, 0xb3, 0x13, 0xe9, - 0xa4, 0x40, 0x4d, 0x06, 0x99, 0xaf, 0x19, 0x09, 0x65, 0x59, 0x46, 0x4a, - 0xf6, 0x81, 0xbc, 0xcf, 0xd5, 0x31, 0xb6, 0x08, 0x28, 0x2d, 0x97, 0x52, - 0x41, 0x55, 0x14, 0x9d, 0x92, 0x59, 0x12, 0xaf, 0xc1, 0xc0, 0x05, 0x3c, - 0xc5, 0xcb, 0x0d, 0xd9, 0xff, 0xba, 0x0d, 0x55, 0x18, 0x3d, 0x73, 0x1a, - 0x2e, 0x19, 0x11, 0xce, 0x64, 0x0c, 0x1f, 0x69, 0x29, 0x69, 0x1f, 0x80, - 0x2f, 0x66, 0x44, 0x22, 0x45, 0x03, 0xc8, 0x02, 0x9d, 0x8b, 0x8e, 0xc0, - 0x68, 0xe4, 0xaf, 0x8f, 0xd1, 0xdc, 0xce, 0xa2, 0xf6, 0xb4, 0x3f, 0xe9, - 0x78, 0x7f, 0xa6, 0xe3, 0xf4, 0xa6, 0x5d, 0x24, 0xc0, 0xc1, 0xf0, 0xc5, - 0xa3, 0x12, 0x82, 0x43, 0xbf, 0xe5, 0x2c, 0x54, 0xd2, 0x75, 0x70, 0x12, - 0x50, 0x3a, 0xbc, 0xb9, 0xa9, 0xe0, 0xa1, 0x8f, 0x6d, 0xd0, 0xa8, 0x4d, - 0x55, 0x6d, 0x3b, 0x18, 0x9d, 0x14, 0x1f, 0x78, 0x49, 0x65, 0x8c, 0x76, - 0x97, 0x0d, 0x07, 0x50, 0xce, 0x3a, 0xc9, 0xec, 0x41, 0x39, 0x91, 0x90, - 0xd3, 0xa9, 0x50, 0x8b, 0xaf, 0x2f, 0x80, 0x8f, 0x41, 0xc6, 0x26, 0x73, - 0xa7, 0x73, 0x67, 0x78, 0x0e, 0x55, 0x21, 0x21, 0xaa, 0x33, 0x3b, 0x02, - 0xb1, 0xe2, 0x60, 0x55, 0x2f, 0x17, 0x27, 0x34, 0xd5, 0x1f, 0x03, 0x2a, - 0xa9, 0x7a, 0x01, 0x29, 0xc2, 0x99, 0x5f, 0x46, 0x25, 0xba, 0x7b, 0xfb, - 0x08, 0xe2, 0x95, 0x41, 0xd7, 0xa5, 0x61, 0x44, 0x0e, 0xa0, 0x14, 0x2f, - 0xce, 0x33, 0x5f, 0x3e, 0xf6, 0xd8, 0xbe, 0xda, 0x93, 0xc8, 0x4a, 0xc4, - 0x29, 0xe6, 0x3f, 0x1f, 0x52, 0x34, 0x21, 0xd9, 0x71, 0xdc, 0x12, 0x2e, - 0xf7, 0x7f, 0x28, 0x2b, 0xd2, 0x16, 0x99, 0xb5, 0x55, 0x2a, 0x7f, 0x21, - 0xcc, 0xf1, 0x32, 0x35, 0x78, 0x74, 0x30, 0xd2, 0xe7, 0x77, 0x8f, 0x21, - 0x1a, 0x52, 0x25, 0x2e, 0xd1, 0x0b, 0xd1, 0x94, 0x92, 0xed, 0x17, 0x02, - 0x1d, 0x87, 0xc3, 0xa6, 0x6c, 0xac, 0xe9, 0x98, 0x50, 0x3b, 0xae, 0xc1, - 0x97, 0x51, 0x40, 0x67, 0x64, 0x3d, 0x4c, 0xe4, 0x85, 0x5c, 0xe7, 0x1e, - 0x15, 0xd7, 0x4e, 0x36, 0x73, 0x50, 0xbd, 0xe4, 0xb9, 0xbf, 0x2d, 0xdc, - 0xe0, 0xd7, 0x6e, 0x36, 0x5d, 0xdb, 0x10, 0xf5, 0xb1, 0x0f, 0x20, 0xa1, - 0x34, 0x04, 0x56, 0x1d, 0xac, 0x21, 0x33, 0x64, 0x48, 0x94, 0xcb, 0xae, - 0x35, 0x85, 0x89, 0x04, 0xbe, 0xf1, 0x7d, 0x47, 0xe0, 0x3a, 0x3d, 0x67, - 0x74, 0xa5, 0xcd, 0xd5, 0x71, 0xd2, 0xd0, 0x82, 0x75, 0xab, 0x5b, 0x5d, - 0x88, 0xb8, 0x30, 0xd5, 0xfe, 0x01, 0x38, 0x4e, 0xbf, 0x02, 0xe1, 0x80, - 0xb1, 0x63, 0x26, 0x12, 0xcc, 0x1e, 0xbb, 0x42, 0x14, 0xb0, 0xda, 0x40, - 0xdc, 0x05, 0x33, 0x38, 0x29, 0xa7, 0x0d, 0xb1, 0x91, 0xbd, 0xe3, 0xb8, - 0x75, 0x24, 0xcc, 0xba, 0x90, 0x64, 0x0d, 0x27, 0x4e, 0x4b, 0x53, 0x0b, - 0x65, 0x34, 0xca, 0xbc, 0xff, 0xd7, 0x16, 0x78, 0x7b, 0x36, 0x16, 0x48, - 0x08, 0x70, 0x31, 0x07, 0x66, 0x8a, 0xf6, 0xd6, 0x9c, 0xf6, 0xa1, 0xcd, - 0xd5, 0x3b, 0xd6, 0x6e, 0x3c, 0x29, 0x80, 0x78, 0xc1, 0xeb, 0xc4, 0x54, - 0xa3, 0xfa, 0x58, 0x0b, 0x29, 0x07, 0x90, 0x30, 0x12, 0x14, 0x40, 0x89, - 0x6c, 0xbc, 0x53, 0x0d, 0x33, 0xc2, 0xf1, 0x7e, 0xda, 0xf6, 0xb4, 0xd5, - 0x83, 0x9d, 0x6b, 0x1f, 0xa7, 0x91, 0x8d, 0x77, 0xaf, 0xe3, 0x8d, 0xce, - 0xdc, 0x83, 0x60, 0x19, 0xef, 0xbc, 0xee, 0x03, 0xd8, 0x55, 0x2d, 0x40, - 0xce, 0xd5, 0xb8, 0xab, 0x2a, 0x81, 0x9c, 0x8e, 0x5c, 0xf8, 0x85, 0xc4, - 0x8a, 0x04, 0x72, 0x58, 0xa6, 0xcc, 0x45, 0x85, 0x4c, 0x04, 0x00, 0xc3, - 0x2e, 0xaa, 0x2c, 0x2b, 0xe0, 0x0a, 0xb4, 0xa6, 0xdf, 0x5a, 0x57, 0xea, - 0x17, 0x4d, 0x24, 0xa6, 0x70, 0x67, 0x2d, 0xd7, 0x6b, 0xf6, 0xf3, 0x9e, - 0x07, 0x17, 0xd4, 0x24, 0x86, 0xdd, 0x8d, 0xa2, 0x34, 0xb3, 0x04, 0x53, - 0xae, 0xa6, 0x31, 0x03, 0x72, 0xd8, 0x87, 0x07, 0x2f, 0xaa, 0x36, 0xda, - 0xa4, 0xaa, 0xc2, 0xae, 0x80, 0x55, 0xc5, 0x69, 0xe7, 0x90, 0x8f, 0x92, - 0x69, 0xe1, 0x43, 0x57, 0x7d, 0xdf, 0xda, 0xb8, 0xc4, 0x27, 0xaf, 0x2c, - 0x10, 0xbe, 0x7e, 0xa5, 0x1b, 0x08, 0x49, 0x61, 0x5a, 0x4f, 0xaf, 0x02, - 0x2b, 0x9a, 0x73, 0x73, 0x98, 0xb2, 0x0a, 0x43, 0xf8, 0xa0, 0x77, 0x84, - 0x01, 0x09, 0xbc, 0x68, 0xfd, 0xd0, 0xaa, 0xf8, 0x41, 0x32, 0xd1, 0xa2, - 0x15, 0xd2, 0xde, 0xb6, 0xa4, 0x22, 0xf4, 0x09, 0x92, 0x7b, 0x3e, 0x31, - 0x33, 0x7d, 0x60, 0x81, 0x96, 0xf6, 0x5b, 0x1c, 0xd4, 0x50, 0x7c, 0x1f, - 0xad, 0xd8, 0x32, 0xdd, 0x28, 0x8f, 0x51, 0x53, 0xc6, 0xa1, 0x27, 0x6a, - 0x46, 0xc7, 0x60, 0x58, 0x6a, 0x2d, 0x81, 0xd9, 0x66, 0xb2, 0x4f, 0x95, - 0x3e, 0xc4, 0xc4, 0x30, 0x70, 0x72, 0x51, 0xe3, 0x29, 0xf5, 0x99, 0x03, - 0xd7, 0xd1, 0x2d, 0x86, 0xdb, 0x2b, 0x40, 0x63, 0xc3, 0x08, 0x30, 0x54, - 0x6e, 0x25, 0x52, 0x32, 0x53, 0x07, 0x4d, 0xe0, 0x5c, 0x32, 0x1c, 0x5b, - 0x1e, 0x5f, 0x03, 0x4b, 0x25, 0x38, 0x65, 0xf7, 0xe5, 0x08, 0x7a, 0x80, - 0x6f, 0xbd, 0x15, 0xe2, 0x01, 0x59, 0x1e, 0xc3, 0x2f, 0x51, 0xdd, 0x1c, - 0xe5, 0x9e, 0x59, 0xe4, 0x60, 0xd8, 0x07, 0x30, 0x79, 0x55, 0x2a, 0x7d, - 0x96, 0x01, 0x6a, 0x3f, 0xd7, 0xba, 0x4e, 0x44, 0x16, 0x54, 0xf7, 0x24, - 0x38, 0x28, 0xce, 0x16, 0x04, 0x97, 0x40, 0xde, 0xf8, 0x1f, 0x10, 0x18, - 0xaf, 0xcc, 0x9c, 0x11, 0xb0, 0x9f, 0x17, 0xc6, 0xa4, 0x00, 0x5e, 0x0e, - 0x7d, 0xce, 0x45, 0xfa, 0x99, 0xe7, 0x07, 0xaf, 0x36, 0x68, 0xbd, 0xfa, - 0x55, 0xde, 0xab, 0x2d, 0xed, 0x02, 0x32, 0x7f, 0xb5, 0x37, 0x3f, 0xd4, - 0x4f, 0x03, 0xaa, 0x17, 0x54, 0x7c, 0xca, 0x97, 0x6a, 0xb0, 0x6d, 0xbc, - 0xf1, 0x26, 0xb1, 0xad, 0x2b, 0x4c, 0x39, 0x38, 0x2c, 0x27, 0x0c, 0x8e, - 0x04, 0xa3, 0x02, 0xdb, 0xdc, 0x69, 0x43, 0x76, 0x59, 0x07, 0x15, 0xd6, - 0x5f, 0xa1, 0x8d, 0x57, 0x2d, 0x7b, 0x5f, 0xe3, 0xf0, 0xe3, 0xe8, 0x2b, - 0x74, 0x2a, 0xc7, 0x3c, 0xf4, 0x11, 0x94, 0xb7, 0x3d, 0x0b, 0x48, 0xaf, - 0x1d, 0x01, 0x5e, 0x69, 0xf5, 0x6a, 0x13, 0xec, 0x0b, 0x6b, 0x5c, 0xb5, - 0x6f, 0xbc, 0x80, 0x94, 0x93, 0x76, 0xf8, 0xf3, 0x2a, 0x93, 0x86, 0x90, - 0x97, 0xc7, 0xc8, 0x0a, 0x5e, 0xb2, 0xc2, 0x44, 0x95, 0xd1, 0xe6, 0xac, - 0xf5, 0x13, 0xaa, 0xe4, 0xe1, 0xe0, 0xc7, 0x03, 0xdb, 0x13, 0x5c, 0x92, - 0x31, 0x50, 0x3f, 0x2f, 0xb3, 0x1f, 0x2a, 0x57, 0xbc, 0xf2, 0xe9, 0xb8, - 0x11, 0x53, 0xf5, 0x94, 0x50, 0xaf, 0xcd, 0x92, 0x2e, 0x1b, 0x42, 0x66, - 0x2b, 0xf6, 0xee, 0xb0, 0x42, 0x5f, 0x78, 0x00, 0x1e, 0xe9, 0xed, 0x20, - 0xbb, 0x5c, 0xc0, 0xcd, 0x0e, 0xfc, 0xbe, 0xa2, 0xf1, 0xea, 0x0a, 0x31, - 0x61, 0x15, 0xda, 0xaa, 0xe6, 0x87, 0xda, 0x5a, 0x61, 0xe4, 0x83, 0x9a, - 0xdb, 0x07, 0xc9, 0x1c, 0xd4, 0x59, 0xe7, 0xa6, 0x87, 0x32, 0x41, 0x38, - 0xbd, 0x86, 0x0a, 0x23, 0x5e, 0x1f, 0xcb, 0xd1, 0x9f, 0x64, 0xc9, 0x20, - 0xd1, 0x87, 0xf6, 0xc7, 0x57, 0x48, 0x80, 0x7a, 0x74, 0x4f, 0x0c, 0x4e, - 0xed, 0xa4, 0x20, 0xfb, 0xbc, 0x11, 0xe5, 0x8e, 0xa5, 0x85, 0x20, 0xad, - 0x55, 0xaa, 0xe4, 0x94, 0xff, 0xe0, 0x45, 0xae, 0x84, 0xf4, 0xda, 0x55, - 0x94, 0xdc, 0x9f, 0xdb, 0x53, 0x59, 0x78, 0xd7, 0x8f, 0x96, 0x51, 0x16, - 0xa1, 0xbe, 0x8f, 0x27, 0x8b, 0x85, 0x00, 0xfe, 0xb8, 0x63, 0x01, 0xa3, - 0xeb, 0x1d, 0xc6, 0x55, 0x02, 0x0b, 0x09, 0xdf, 0x30, 0xd9, 0x40, 0xc7, - 0xab, 0xec, 0x71, 0xee, 0x08, 0x39, 0xb9, 0xc7, 0x11, 0x32, 0x61, 0x89, - 0xe1, 0x50, 0x8b, 0x43, 0xb2, 0x56, 0x57, 0xe3, 0xa1, 0x55, 0x14, 0xd0, - 0x5a, 0xe2, 0x86, 0xaf, 0xc2, 0x38, 0xff, 0x08, 0x73, 0xa7, 0xab, 0xf0, - 0x3a, 0xea, 0x29, 0xc5, 0x56, 0x17, 0x03, 0xf8, 0xd1, 0x0c, 0x06, 0xb9, - 0xd1, 0xfc, 0x55, 0xd8, 0x96, 0x23, 0x1d, 0x28, 0xba, 0x3a, 0x40, 0x9c, - 0x30, 0x11, 0xc8, 0x39, 0x8f, 0x8d, 0xeb, 0x4e, 0x27, 0x7e, 0xfd, 0xaa, - 0x35, 0xa0, 0xbc, 0x97, 0x33, 0x2d, 0x27, 0x9c, 0xce, 0x8f, 0xf3, 0x17, - 0xe4, 0x49, 0x55, 0x53, 0x51, 0xf3, 0xd2, 0x67, 0x44, 0xf3, 0xa9, 0xbb, - 0x23, 0x59, 0xc6, 0x05, 0xcd, 0xc8, 0x0b, 0x1a, 0x9f, 0x39, 0x80, 0xb7, - 0x50, 0x5f, 0x1f, 0xbc, 0xdb, 0xde, 0xcc, 0x6e, 0x18, 0x6f, 0x0f, 0x14, - 0x4b, 0x61, 0xfd, 0x83, 0x49, 0x24, 0x2a, 0x23, 0x6e, 0x47, 0x70, 0x67, - 0x8c, 0xce, 0x55, 0x4d, 0x6c, 0x8e, 0x25, 0x7e, 0xb4, 0x9a, 0xdf, 0x2c, - 0xa7, 0xfd, 0x5b, 0xe5, 0xb4, 0xeb, 0x7c, 0xb6, 0x82, 0x70, 0xf7, 0xdf, - 0x89, 0x5f, 0xc8, 0x56, 0xfe, 0x07, 0x8c, 0x65, 0x38, 0xa4, 0xc0, 0xad, - 0xd7, 0x78, 0x68, 0xd4, 0xc3, 0x3e, 0xa7, 0xae, 0x0b, 0xfe, 0x21, 0xcb, - 0xb5, 0xd3, 0x70, 0xfc, 0x61, 0xb0, 0x30, 0x23, 0xd8, 0xe3, 0x0f, 0x42, - 0x7b, 0x91, 0x61, 0x39, 0x80, 0xbc, 0xbf, 0xc4, 0x26, 0x01, 0xa4, 0xca, - 0x28, 0x97, 0x7b, 0x02, 0x49, 0x30, 0x85, 0x64, 0xc4, 0x7f, 0x42, 0x50, - 0x21, 0x32, 0x51, 0x2e, 0xbe, 0x5f, 0x28, 0x52, 0xc3, 0x08, 0xf1, 0x7e, - 0xf2, 0x73, 0x2d, 0x1c, 0xfe, 0x2a, 0xd0, 0x15, 0x0c, 0xe4, 0xf4, 0x1d, - 0x32, 0xb8, 0x69, 0x81, 0xcc, 0x3f, 0xfa, 0x07, 0xe7, 0x26, 0x0a, 0xb2, - 0x82, 0x48, 0x71, 0x98, 0xe1, 0xfa, 0x86, 0xfc, 0x97, 0x7b, 0xcc, 0xf3, - 0xc5, 0x09, 0xba, 0x2b, 0xc4, 0x5a, 0x1f, 0x60, 0x4d, 0xca, 0x9b, 0x4f, - 0x5b, 0xa8, 0x23, 0x7f, 0x90, 0x68, 0xbb, 0xb6, 0xd0, 0xfd, 0xab, 0x49, - 0x0f, 0x43, 0x45, 0x52, 0x6b, 0x2a, 0x38, 0xa3, 0x8d, 0x95, 0x71, 0x62, - 0x72, 0xc6, 0x49, 0xc9, 0x19, 0x51, 0x6d, 0xc5, 0x1b, 0xe9, 0x02, 0x5e, - 0x29, 0xde, 0xcf, 0x11, 0x06, 0xbb, 0x4a, 0x60, 0xd9, 0x2d, 0xc3, 0xed, - 0x3b, 0xc0, 0x51, 0xd6, 0x7f, 0x82, 0xe9, 0xe9, 0x9f, 0x64, 0x7d, 0x32, - 0x50, 0x6d, 0x95, 0x79, 0x65, 0xa4, 0xde, 0xad, 0x00, 0x30, 0x9f, 0x45, - 0xa5, 0x52, 0x5c, 0x2a, 0x25, 0x4a, 0xa5, 0xcc, 0xb2, 0x9e, 0x6d, 0x3d, - 0x87, 0x75, 0xb4, 0xc9, 0x6a, 0x38, 0x18, 0x57, 0x80, 0x8e, 0xa2, 0xcb, - 0x3a, 0x18, 0xd0, 0xbf, 0x2e, 0xdc, 0x0a, 0xee, 0xd9, 0xf0, 0x82, 0x81, - 0x5d, 0x0e, 0xc7, 0xfa, 0x98, 0x33, 0xcc, 0xa6, 0x98, 0xb2, 0x47, 0x00, - 0xe2, 0x99, 0x78, 0x05, 0x71, 0x39, 0x2b, 0x3d, 0xd8, 0x21, 0x60, 0x23, - 0x44, 0x67, 0xd0, 0x70, 0xe3, 0x68, 0x3b, 0xc5, 0xe2, 0xe5, 0x9d, 0xf5, - 0x08, 0x63, 0xf0, 0xfd, 0x1a, 0xe8, 0xf9, 0xc8, 0x8d, 0x41, 0x39, 0x74, - 0x3b, 0x0c, 0x0d, 0xc1, 0x28, 0xb0, 0x03, 0x52, 0xc9, 0xea, 0xb7, 0xc7, - 0x93, 0xbf, 0x2c, 0xa7, 0x0a, 0xf6, 0x3a, 0x58, 0x02, 0x2d, 0xfa, 0x1d, - 0x64, 0xfa, 0x0a, 0x0f, 0x98, 0x55, 0x01, 0x40, 0x5f, 0x75, 0xa7, 0x1c, - 0x06, 0x62, 0x3f, 0x77, 0x7e, 0xd5, 0x04, 0x5d, 0x7e, 0xd0, 0xdf, 0xf1, - 0x4b, 0xb7, 0xef, 0x48, 0xd8, 0x3b, 0x3b, 0xd4, 0x79, 0xbd, 0x82, 0xc1, - 0x03, 0xe6, 0xb8, 0xd3, 0x64, 0x03, 0x21, 0x40, 0x21, 0x02, 0xc5, 0x17, - 0x15, 0x51, 0x72, 0x2c, 0x6f, 0xd0, 0x6f, 0xa8, 0xa2, 0x05, 0xf3, 0x72, - 0xa4, 0xb9, 0x82, 0x3b, 0x03, 0x8e, 0xbb, 0xd4, 0x6a, 0x7c, 0x85, 0x67, - 0x8b, 0x16, 0x00, 0x94, 0xb9, 0x05, 0xdf, 0x09, 0x1c, 0xe5, 0x0e, 0xee, - 0xc4, 0xd9, 0x3b, 0xeb, 0x86, 0x30, 0x6a, 0x07, 0xec, 0xcf, 0x91, 0xa6, - 0xbb, 0x0e, 0x9d, 0x2b, 0x40, 0xa0, 0xf7, 0xf8, 0x36, 0x5a, 0x8a, 0xb8, - 0x64, 0x1d, 0x6c, 0x27, 0x97, 0x50, 0xe7, 0x57, 0xa6, 0xf3, 0xeb, 0x2b, - 0xa2, 0x01, 0x3f, 0x80, 0x4c, 0x86, 0xfb, 0xc5, 0x48, 0xc9, 0x18, 0x70, - 0x3e, 0x62, 0xbc, 0x3c, 0x1f, 0xba, 0xfe, 0x3e, 0xbd, 0xc3, 0x38, 0x9d, - 0xf2, 0x99, 0x05, 0x31, 0xb7, 0xfe, 0x7e, 0x6a, 0xac, 0xad, 0x5b, 0x09, - 0x81, 0xe5, 0xa6, 0x9d, 0xc4, 0x19, 0x1b, 0xc5, 0xfa, 0xab, 0xb8, 0x62, - 0x1e, 0x3d, 0x17, 0x32, 0x10, 0x84, 0x19, 0x39, 0x59, 0x78, 0x89, 0x59, - 0x4d, 0x04, 0xfd, 0x57, 0xef, 0x3f, 0x3f, 0x3a, 0xff, 0xf9, 0x57, 0xdf, - 0x3f, 0x3f, 0xfb, 0xfa, 0xb9, 0x1c, 0x0a, 0xfb, 0x70, 0xd8, 0x9c, 0x57, - 0x4e, 0xe8, 0xa8, 0xc6, 0xab, 0x74, 0x1f, 0x56, 0xc7, 0xa3, 0xe3, 0x4d, - 0x9c, 0xb3, 0x9b, 0x39, 0x67, 0xb7, 0xe0, 0x98, 0xad, 0xbf, 0xfb, 0x20, - 0x7f, 0x40, 0x4a, 0x3d, 0x60, 0x7c, 0x64, 0xab, 0xd9, 0x15, 0xd5, 0xee, - 0xa8, 0x76, 0x37, 0x70, 0x48, 0x89, 0x8b, 0x8c, 0xef, 0xe1, 0x3e, 0x79, - 0x13, 0x4e, 0x3d, 0xdc, 0x10, 0xb0, 0x1d, 0x6b, 0xea, 0xd0, 0x21, 0x09, - 0x84, 0x68, 0xc7, 0x18, 0x1b, 0x80, 0x6d, 0x43, 0xd7, 0xdc, 0xa7, 0xaf, - 0xb9, 0x4f, 0x5d, 0x73, 0x9f, 0xb8, 0xc4, 0xae, 0x0b, 0xee, 0xab, 0xc4, - 0x00, 0x54, 0xa8, 0xf6, 0x52, 0x51, 0x0c, 0x18, 0x3b, 0x54, 0x49, 0x23, - 0x22, 0x68, 0xaf, 0x7f, 0x86, 0xa6, 0x5f, 0x23, 0xf5, 0x4b, 0x93, 0xcb, - 0x60, 0x08, 0x51, 0x85, 0x29, 0xba, 0xc6, 0x76, 0xe3, 0x3d, 0x21, 0xf9, - 0x40, 0x4d, 0x69, 0xe1, 0xf7, 0x49, 0x46, 0x5a, 0xa4, 0x2e, 0x5f, 0xe0, - 0x88, 0xf0, 0x87, 0xad, 0x6e, 0xcb, 0xf8, 0x35, 0xd8, 0x74, 0x00, 0xbe, - 0x6f, 0x13, 0xb6, 0x6a, 0x11, 0xc1, 0xb7, 0x52, 0x7f, 0xb3, 0xb9, 0xd1, - 0xf1, 0x66, 0x45, 0x2f, 0x81, 0xe3, 0xa4, 0x4b, 0x2f, 0xb4, 0xac, 0x6a, - 0x82, 0xa3, 0x5f, 0xaf, 0x78, 0xe2, 0xe3, 0xd5, 0x16, 0x08, 0x0c, 0xf8, - 0x97, 0x1b, 0xe1, 0x7e, 0x59, 0x6e, 0x87, 0xe0, 0x8d, 0xaf, 0x6b, 0xf6, - 0x0b, 0x42, 0xd3, 0x92, 0x77, 0xbf, 0x7c, 0x21, 0xb4, 0x87, 0xf8, 0x2e, - 0x76, 0x48, 0x33, 0x66, 0xfc, 0x01, 0x22, 0x37, 0x51, 0x26, 0xe3, 0x54, - 0x5c, 0xe4, 0x01, 0x51, 0x21, 0xe3, 0xc2, 0xb2, 0xb7, 0x4c, 0x69, 0x22, - 0xd4, 0xa1, 0xd1, 0x7e, 0x08, 0xc2, 0xf9, 0x74, 0x11, 0xb3, 0x8a, 0xcf, - 0x7f, 0x60, 0x3a, 0xde, 0xe9, 0x82, 0xdb, 0xb5, 0xac, 0x56, 0x92, 0xaa, - 0xae, 0x5a, 0xbc, 0x63, 0x44, 0x04, 0xa6, 0x79, 0xc5, 0x34, 0xb9, 0x20, - 0xc0, 0x00, 0xa1, 0x20, 0x22, 0x3f, 0x38, 0xef, 0x72, 0x9d, 0x56, 0xfc, - 0xb6, 0x2d, 0x86, 0x07, 0x98, 0xd9, 0x1e, 0x26, 0x05, 0x3e, 0x95, 0x1f, - 0x19, 0x68, 0x6c, 0x44, 0x91, 0xdc, 0x59, 0xcb, 0x4b, 0x42, 0x36, 0x8d, - 0x69, 0xe5, 0x16, 0x3b, 0xd0, 0xf2, 0xc0, 0xe2, 0xc8, 0x90, 0xc5, 0xc9, - 0x93, 0x88, 0x30, 0xeb, 0x8a, 0x46, 0xa6, 0x2a, 0x72, 0xd2, 0xc4, 0x11, - 0xa2, 0x55, 0x22, 0xb4, 0x83, 0x85, 0x55, 0x4d, 0x6e, 0x76, 0x03, 0x32, - 0x15, 0x2e, 0xd2, 0xa9, 0xae, 0x0f, 0x0f, 0xb9, 0x0a, 0xaf, 0x18, 0x4d, - 0x95, 0x83, 0x33, 0x06, 0x43, 0x02, 0x4d, 0x53, 0x8d, 0xb0, 0xff, 0xb3, - 0xc5, 0xfa, 0x72, 0x99, 0x41, 0xcf, 0x48, 0xc3, 0xcd, 0x6b, 0x5d, 0x49, - 0x29, 0x7b, 0xd0, 0xf2, 0x65, 0x08, 0x67, 0xba, 0x1e, 0xda, 0x2d, 0xf2, - 0x33, 0x1a, 0x16, 0x79, 0x6c, 0x09, 0xad, 0x22, 0x8f, 0x94, 0x8e, 0x5e, - 0x92, 0xb0, 0xe7, 0x5b, 0x97, 0xb2, 0x78, 0x50, 0xa1, 0x9a, 0x8d, 0xd9, - 0x6f, 0x0f, 0x0e, 0xa3, 0x4d, 0x66, 0xb4, 0x1d, 0x2d, 0x66, 0x03, 0xb0, - 0x2e, 0x96, 0xfb, 0x7a, 0x59, 0x07, 0xa6, 0xe0, 0x1e, 0xbf, 0x61, 0x4b, - 0x6f, 0xf2, 0x54, 0x57, 0x40, 0x59, 0xcd, 0xa1, 0x87, 0x85, 0xc5, 0x24, - 0x95, 0x2c, 0x06, 0xdd, 0x77, 0x5e, 0xb3, 0x92, 0x78, 0x15, 0xfb, 0xac, - 0xd3, 0xdb, 0x12, 0x95, 0x9a, 0x39, 0xb3, 0x9c, 0x82, 0x54, 0xe9, 0xb2, - 0x07, 0xf7, 0x70, 0x36, 0xb8, 0x55, 0x73, 0x77, 0xa0, 0x45, 0x76, 0xd1, - 0x70, 0x56, 0x35, 0xc0, 0x30, 0xd9, 0x1c, 0x6a, 0xab, 0xb9, 0x37, 0x9f, - 0x65, 0xe9, 0x70, 0x74, 0x6e, 0x22, 0x5b, 0x1d, 0xed, 0xf3, 0xca, 0x42, - 0x5a, 0x57, 0x15, 0xd2, 0xba, 0x22, 0x21, 0xeb, 0xa6, 0x91, 0x66, 0x35, - 0xf7, 0x7b, 0xc0, 0x75, 0x98, 0x12, 0x6a, 0xf3, 0x26, 0x42, 0xe3, 0x5b, - 0xc5, 0x7f, 0x4a, 0xa0, 0xed, 0x76, 0xd1, 0xa0, 0xb0, 0xdd, 0xd8, 0xdc, - 0xab, 0x39, 0x0d, 0xf3, 0x6c, 0x3b, 0x60, 0x06, 0xb0, 0xb5, 0xc7, 0x62, - 0x41, 0xb4, 0xa0, 0xb7, 0x9b, 0xcc, 0x7b, 0x61, 0x1a, 0xb6, 0x6f, 0x55, - 0xe1, 0xf6, 0x8d, 0x64, 0x6e, 0x18, 0xe1, 0x30, 0xeb, 0x56, 0x68, 0x17, - 0xe0, 0xe6, 0x5c, 0xc6, 0xcc, 0xe0, 0x96, 0x3d, 0x66, 0xdf, 0x99, 0x55, - 0xc8, 0x6b, 0xdb, 0x2f, 0xf1, 0x26, 0x05, 0xe6, 0x80, 0x66, 0xa9, 0x0b, - 0x13, 0x00, 0xf7, 0xd3, 0x03, 0x2b, 0xba, 0xf6, 0x64, 0x95, 0x68, 0x4f, - 0x67, 0xbb, 0x38, 0xc3, 0x94, 0x9e, 0x4e, 0xf9, 0x0e, 0x89, 0xb1, 0x73, - 0xc9, 0x66, 0x79, 0x1c, 0x2f, 0xc6, 0xa8, 0xf9, 0x94, 0x88, 0x9d, 0x17, - 0x87, 0x45, 0x6c, 0x4e, 0xc7, 0x9b, 0x53, 0x43, 0x98, 0x8c, 0xf7, 0xed, - 0x81, 0xec, 0x94, 0x70, 0x7f, 0x20, 0xe6, 0xe5, 0xbc, 0xa9, 0xda, 0xce, - 0x1b, 0x22, 0xc6, 0x32, 0x82, 0xf6, 0x4b, 0x7e, 0x58, 0xf8, 0x45, 0x4d, - 0x0d, 0x9b, 0x3f, 0x6c, 0x9c, 0x03, 0x43, 0xc7, 0x90, 0x83, 0x86, 0xf4, - 0x14, 0x0d, 0x3b, 0xb5, 0x93, 0xff, 0x03, 0xf5, 0x41, 0x4c, 0x64, 0xa8, - 0x11, 0xaa, 0x86, 0xfb, 0x78, 0x9c, 0x9a, 0xec, 0x50, 0x2d, 0xca, 0xa8, - 0x02, 0x44, 0x54, 0x2f, 0x71, 0x6e, 0x05, 0x62, 0xe9, 0xbf, 0xb0, 0xdb, - 0x94, 0xb3, 0xb3, 0xb9, 0x3b, 0x9b, 0xc3, 0xb3, 0x73, 0x89, 0x84, 0xfe, - 0x40, 0x60, 0x2c, 0x87, 0xad, 0x80, 0x61, 0xa7, 0x44, 0xfe, 0x8e, 0xb7, - 0xa2, 0x91, 0x36, 0x20, 0x7d, 0xfe, 0x8e, 0x10, 0x85, 0x97, 0x15, 0xfe, - 0x6b, 0x4e, 0xd2, 0x5d, 0x37, 0x4a, 0xfb, 0x0d, 0xb3, 0xbd, 0x6e, 0xae, - 0x83, 0x88, 0x14, 0x11, 0x20, 0x41, 0x40, 0xef, 0x30, 0x70, 0x5b, 0x4d, - 0x0f, 0x63, 0xf0, 0x25, 0x07, 0x8a, 0x60, 0x71, 0xa8, 0x14, 0x89, 0xa8, - 0x60, 0x93, 0xcd, 0xe4, 0xe0, 0xa7, 0x1c, 0xdf, 0x80, 0x7f, 0xe2, 0xe1, - 0x01, 0xe0, 0x9d, 0x41, 0x60, 0xf5, 0x18, 0x86, 0x43, 0xa8, 0x03, 0x84, - 0x4d, 0x1f, 0x68, 0x80, 0x52, 0xb2, 0x26, 0xa7, 0x6a, 0xea, 0xc3, 0x72, - 0x20, 0xab, 0xb3, 0x31, 0x85, 0x3d, 0xb7, 0x4a, 0x3b, 0x44, 0xf7, 0xc4, - 0x98, 0x10, 0x32, 0x7c, 0x22, 0xd6, 0x65, 0x71, 0xf2, 0x16, 0x71, 0x16, - 0xee, 0xc1, 0x25, 0x1c, 0xbf, 0x8a, 0x4a, 0x4b, 0xbe, 0x40, 0x11, 0xdc, - 0xfa, 0x6c, 0xa2, 0xdd, 0x7b, 0x52, 0x39, 0xa6, 0xa6, 0x13, 0x80, 0xcc, - 0xef, 0x1a, 0xdd, 0xaf, 0x9a, 0x5c, 0xb8, 0x08, 0xbc, 0x85, 0x20, 0xf3, - 0x63, 0x50, 0xfe, 0x6a, 0xab, 0xbf, 0x0c, 0xe9, 0x2f, 0x28, 0x85, 0x06, - 0xf1, 0xd9, 0x34, 0x36, 0x99, 0x4c, 0x14, 0x58, 0x79, 0x34, 0x93, 0x9a, - 0x88, 0x80, 0xb7, 0x2f, 0x17, 0xc2, 0xf6, 0xe5, 0x32, 0xdd, 0x5c, 0x4f, - 0x5b, 0xe8, 0xab, 0x73, 0xc8, 0xe9, 0x30, 0x3c, 0xe2, 0x74, 0x5b, 0x16, - 0x47, 0xb0, 0x57, 0x00, 0x68, 0x9d, 0xdc, 0x20, 0x93, 0x7b, 0xb4, 0x71, - 0xe8, 0x06, 0xfd, 0x01, 0x9b, 0x8b, 0x13, 0xd8, 0x7c, 0x92, 0x22, 0xeb, - 0xee, 0xeb, 0x20, 0x46, 0x34, 0x1c, 0x2f, 0x6f, 0xdd, 0x8a, 0xbc, 0x27, - 0x22, 0x74, 0xdf, 0xa5, 0x87, 0x5a, 0xa2, 0x61, 0x6b, 0xd8, 0xdf, 0xd7, - 0x83, 0xa5, 0x56, 0x9b, 0x87, 0x0a, 0xd6, 0xe7, 0x89, 0x81, 0x62, 0xab, - 0x42, 0x24, 0xbf, 0x4f, 0xb2, 0x16, 0x01, 0x6c, 0x7f, 0xe2, 0x4c, 0x04, - 0xfd, 0x7c, 0x4f, 0x3f, 0x15, 0xda, 0x25, 0x64, 0xb4, 0x44, 0xa5, 0xe1, - 0xb0, 0x4d, 0x86, 0x1e, 0x5b, 0x35, 0x82, 0x19, 0xd7, 0x59, 0xde, 0x70, - 0xe4, 0x37, 0xbd, 0x80, 0x12, 0x51, 0x3a, 0x22, 0x4a, 0x3c, 0x4e, 0xf9, - 0xde, 0xb7, 0xce, 0x43, 0x50, 0xcd, 0xd5, 0xfa, 0xdc, 0x54, 0x3e, 0xa4, - 0xde, 0xea, 0xb7, 0x26, 0x9b, 0xc7, 0xe3, 0xf9, 0x9e, 0x49, 0xcc, 0x75, - 0xb9, 0xf2, 0xe7, 0x2d, 0xf4, 0x87, 0x6d, 0x57, 0x30, 0x1a, 0x4a, 0xe0, - 0xf8, 0x1e, 0x22, 0x04, 0x94, 0x4d, 0x8b, 0x0f, 0x08, 0x38, 0x36, 0x5c, - 0xa6, 0x6b, 0x79, 0xb3, 0x51, 0x81, 0x78, 0x8c, 0xdb, 0x64, 0x6a, 0xcb, - 0xd9, 0xb7, 0xae, 0x6f, 0x6b, 0x32, 0xef, 0x02, 0x45, 0x88, 0x41, 0xe4, - 0xac, 0xdb, 0x24, 0x12, 0x08, 0x2a, 0x8e, 0x50, 0xb1, 0x1b, 0x0b, 0xed, - 0x1b, 0xb8, 0x44, 0xe8, 0x79, 0x09, 0xa6, 0xac, 0xe8, 0x80, 0x23, 0x1e, - 0xc6, 0xd1, 0x16, 0x88, 0xf1, 0x51, 0x3a, 0x81, 0x2e, 0x2e, 0xd5, 0xaa, - 0xc7, 0x93, 0xab, 0x56, 0x00, 0x7a, 0x98, 0x42, 0xcb, 0x5f, 0x8a, 0x32, - 0x0d, 0x0b, 0x0e, 0xdb, 0x40, 0xe5, 0x9a, 0x79, 0x06, 0x75, 0x1f, 0xb6, - 0xde, 0x5d, 0x86, 0x90, 0x1b, 0x90, 0x20, 0xf0, 0x2e, 0x7b, 0x6a, 0x8e, - 0xf6, 0xc8, 0x59, 0xa0, 0xc1, 0xee, 0x95, 0xdd, 0x49, 0x67, 0xc4, 0x46, - 0x7f, 0x9a, 0x83, 0x32, 0xa7, 0x7d, 0x84, 0x54, 0xa6, 0xbb, 0xfa, 0x4b, - 0xed, 0x53, 0x10, 0xd8, 0xa3, 0x8c, 0x94, 0xf9, 0xaa, 0x74, 0xe0, 0x3d, - 0x79, 0xd8, 0xac, 0x6e, 0xc2, 0x10, 0xeb, 0xc1, 0x37, 0xd9, 0xc0, 0x47, - 0x47, 0x6c, 0xd7, 0xf3, 0x10, 0x4a, 0xc7, 0x5b, 0xce, 0xf1, 0x10, 0xd0, - 0xc5, 0xfe, 0x50, 0xb6, 0x35, 0x6b, 0xab, 0xe2, 0xb1, 0x43, 0x6c, 0x73, - 0xe5, 0x28, 0x59, 0x22, 0x7a, 0xbd, 0x10, 0x8a, 0xdd, 0xef, 0x5b, 0x30, - 0x31, 0x57, 0xfc, 0x33, 0x31, 0x28, 0x30, 0xfc, 0x87, 0xcd, 0xa6, 0x21, - 0x18, 0x9a, 0x9c, 0x06, 0x7e, 0x59, 0x95, 0xb5, 0xcd, 0xcb, 0x27, 0xa1, - 0x68, 0x8c, 0x1b, 0x97, 0x50, 0x10, 0xc9, 0xa5, 0x4b, 0x32, 0x61, 0xbb, - 0x3c, 0xf4, 0x54, 0x58, 0x58, 0xf9, 0x21, 0x66, 0xb5, 0x07, 0x66, 0x18, - 0x3f, 0x93, 0xbd, 0xfd, 0x4c, 0xe9, 0xeb, 0x47, 0x09, 0xfb, 0x59, 0xf2, - 0xe3, 0xd2, 0x3e, 0x2e, 0xf1, 0x71, 0xc0, 0xab, 0x36, 0x98, 0xc3, 0x4d, - 0x23, 0xdd, 0xa6, 0xdb, 0x97, 0x40, 0x51, 0x73, 0x9b, 0x2e, 0x61, 0x88, - 0x14, 0xf7, 0x10, 0x63, 0x2c, 0x25, 0x40, 0xc0, 0x9c, 0x9d, 0xc5, 0x40, - 0x8c, 0xa4, 0x42, 0x3a, 0xf2, 0x6c, 0x04, 0x19, 0x11, 0x27, 0x47, 0xac, - 0xda, 0x08, 0x7d, 0xb1, 0x08, 0x82, 0x4f, 0x5c, 0x80, 0xbe, 0xb4, 0xab, - 0xae, 0x50, 0x25, 0x5a, 0x6b, 0x18, 0x83, 0x5b, 0xab, 0xc8, 0x8d, 0x1b, - 0xdd, 0x1b, 0x0e, 0x8f, 0x9c, 0x56, 0x1c, 0x35, 0xdd, 0x05, 0x94, 0x92, - 0x33, 0x67, 0x6e, 0xc0, 0x08, 0x4a, 0xef, 0xd7, 0x8d, 0xf4, 0x11, 0x6f, - 0xd8, 0x61, 0x06, 0x4b, 0x25, 0x63, 0xc0, 0xf3, 0x42, 0x27, 0xfa, 0x5c, - 0x33, 0x49, 0x62, 0x45, 0x80, 0xec, 0xa4, 0x78, 0x0f, 0xb0, 0xe3, 0x5c, - 0xb4, 0x52, 0x1e, 0x34, 0x4f, 0xed, 0x36, 0x2b, 0x98, 0x19, 0x51, 0x80, - 0x88, 0xa7, 0x22, 0x44, 0x73, 0x2e, 0x91, 0xab, 0x73, 0xdb, 0xd8, 0x91, - 0x03, 0x30, 0xf8, 0x93, 0xbb, 0xdf, 0x6a, 0xd6, 0xe1, 0xd9, 0x6b, 0xc6, - 0xa4, 0x14, 0xf0, 0x21, 0x9d, 0xe8, 0x82, 0x9e, 0x29, 0xcf, 0xc3, 0xe8, - 0x5d, 0x27, 0xa4, 0xf8, 0x0e, 0x01, 0x1e, 0xb6, 0x6b, 0x53, 0x5a, 0xc0, - 0x08, 0x6b, 0x80, 0xf4, 0xfb, 0x25, 0xc0, 0x17, 0x8f, 0xa8, 0x2b, 0xaa, - 0xe3, 0xdc, 0x11, 0x66, 0x91, 0x85, 0x96, 0x2f, 0x83, 0xde, 0x25, 0x54, - 0x30, 0xeb, 0x75, 0x1e, 0x60, 0x64, 0x32, 0xcc, 0x3d, 0xbc, 0xa9, 0x20, - 0x2a, 0x78, 0xff, 0x43, 0xb9, 0xd2, 0xf6, 0xbe, 0xa9, 0x81, 0x55, 0x54, - 0x5e, 0x42, 0x3b, 0xde, 0xc6, 0xed, 0x8d, 0x7b, 0x3d, 0x95, 0x3f, 0x12, - 0x38, 0xac, 0xc3, 0x40, 0xc7, 0xea, 0xd0, 0x9a, 0xa3, 0xb6, 0x00, 0x84, - 0xde, 0x39, 0x5c, 0x73, 0xfb, 0x05, 0x7e, 0x75, 0x3e, 0x38, 0x36, 0x0c, - 0x07, 0xf1, 0x3f, 0x6c, 0xc1, 0x18, 0xb6, 0x77, 0x4c, 0xe4, 0x3b, 0xb8, - 0xb0, 0x63, 0x03, 0x95, 0xec, 0xd8, 0x7b, 0x70, 0x41, 0xcb, 0x88, 0x35, - 0x41, 0xa0, 0x3d, 0xae, 0x57, 0xc2, 0x7e, 0x1b, 0x0e, 0x19, 0x3a, 0x31, - 0x09, 0xac, 0xeb, 0x41, 0x11, 0x0c, 0x28, 0x24, 0x8a, 0x87, 0x9d, 0xf7, - 0x71, 0x03, 0x2f, 0xbc, 0x1b, 0x97, 0xc9, 0x6e, 0x99, 0x77, 0x7b, 0x6a, - 0xdc, 0xb7, 0xe6, 0x4b, 0x99, 0x9a, 0x31, 0x86, 0x38, 0x04, 0xa5, 0x11, - 0x39, 0xb5, 0xc6, 0x93, 0x40, 0x30, 0xee, 0x51, 0xf3, 0x83, 0x6e, 0xfc, - 0x9b, 0xd2, 0xcc, 0x8a, 0x1e, 0x91, 0xf2, 0x76, 0x9e, 0x69, 0xec, 0x75, - 0xcd, 0x07, 0x19, 0x49, 0xb8, 0x8b, 0x59, 0x6a, 0x0f, 0xe6, 0x5e, 0x45, - 0x64, 0xa6, 0x21, 0xa2, 0x97, 0x80, 0xa3, 0x53, 0x47, 0x19, 0xec, 0x9a, - 0xfc, 0xbc, 0xbb, 0xf9, 0x79, 0x01, 0x54, 0x97, 0x83, 0x36, 0xd7, 0xc1, - 0xe1, 0x5b, 0x7f, 0xa7, 0xf8, 0xe5, 0xe2, 0xa4, 0x9a, 0x93, 0xfc, 0xcd, - 0x93, 0x3d, 0xce, 0xe1, 0xc2, 0x7a, 0x7a, 0x8d, 0xb6, 0x66, 0x19, 0x39, - 0x7f, 0x90, 0x53, 0x3c, 0xc0, 0x43, 0x89, 0x08, 0x98, 0x65, 0x0d, 0x1e, - 0x9b, 0x53, 0x85, 0x5c, 0xb1, 0xcb, 0xdb, 0x7b, 0xb6, 0x81, 0xfa, 0xe4, - 0xc2, 0x6c, 0x0b, 0xb3, 0x9e, 0x92, 0xf3, 0x39, 0x0b, 0x2e, 0x71, 0x7e, - 0xd1, 0xa1, 0x69, 0x25, 0xfe, 0x28, 0xd4, 0x7f, 0x99, 0xaa, 0xe9, 0xa2, - 0x5d, 0x55, 0xbc, 0x21, 0xd7, 0x37, 0x73, 0x1f, 0x03, 0xc5, 0xfc, 0x13, - 0x26, 0x0b, 0x72, 0x1a, 0xf8, 0x42, 0x31, 0x51, 0xc4, 0x81, 0x1d, 0x41, - 0xdd, 0xeb, 0x1e, 0x82, 0x2d, 0x99, 0xd3, 0xe7, 0x02, 0x32, 0x68, 0xdd, - 0x09, 0x93, 0x60, 0xa0, 0xf1, 0x82, 0x4d, 0xe6, 0xc2, 0xfa, 0x98, 0xb4, - 0x58, 0xae, 0xc0, 0x1c, 0x30, 0xd1, 0x60, 0xa6, 0x2f, 0x9e, 0xc6, 0x58, - 0x8a, 0x12, 0x80, 0xde, 0x9f, 0x37, 0x18, 0x71, 0x69, 0x0d, 0x19, 0x4c, - 0x52, 0xcc, 0xd8, 0x3c, 0x8c, 0x59, 0x48, 0x89, 0xe9, 0x76, 0xa0, 0xd4, - 0x31, 0x20, 0x5e, 0x86, 0x08, 0xb1, 0x32, 0xe6, 0x11, 0x0a, 0xda, 0xc8, - 0x6b, 0x14, 0x94, 0xe5, 0xf9, 0xf6, 0x84, 0x5d, 0x6a, 0x15, 0x19, 0x10, - 0x13, 0xb9, 0x40, 0x67, 0xa7, 0x33, 0x23, 0x51, 0x27, 0xcf, 0x7e, 0x49, - 0x92, 0x3b, 0xce, 0x4e, 0x55, 0x0d, 0x15, 0xde, 0xa1, 0x05, 0xc1, 0xc4, - 0x23, 0x04, 0x36, 0x6b, 0xe6, 0x0a, 0x0d, 0x3b, 0xb7, 0xf2, 0x8c, 0x67, - 0xf5, 0xa4, 0x28, 0x18, 0xf8, 0x2f, 0x2a, 0xdd, 0x9e, 0x92, 0xee, 0x10, - 0xd4, 0xd2, 0x44, 0x0f, 0x8b, 0xd6, 0x99, 0x6f, 0x47, 0xd8, 0x67, 0x27, - 0xc1, 0x57, 0xb4, 0xd6, 0x4f, 0x1d, 0x91, 0x6e, 0xef, 0x29, 0x75, 0x80, - 0xf4, 0x5f, 0xd1, 0x3c, 0x34, 0x9c, 0x00, 0x53, 0x9e, 0x73, 0x87, 0x55, - 0x18, 0x4b, 0xf0, 0x81, 0x10, 0x76, 0x02, 0x7b, 0xff, 0xd7, 0xc6, 0xae, - 0x24, 0x58, 0x37, 0x30, 0x92, 0x0a, 0x81, 0xed, 0xad, 0x90, 0x36, 0x57, - 0x46, 0x93, 0x9d, 0x1b, 0xe4, 0x69, 0x39, 0x53, 0xa6, 0x96, 0x32, 0x3b, - 0xdd, 0x71, 0xcd, 0x1e, 0x60, 0x98, 0x9c, 0xae, 0x4e, 0x66, 0xed, 0x27, - 0xa9, 0x88, 0xae, 0x5d, 0x23, 0x1b, 0xaf, 0x1f, 0xad, 0x6c, 0xc4, 0x42, - 0x77, 0x7d, 0x0e, 0x2d, 0xfc, 0x09, 0xcf, 0xc5, 0x1c, 0x30, 0x5f, 0xa7, - 0x13, 0x3a, 0xde, 0x82, 0x57, 0x4e, 0x6a, 0x76, 0x95, 0xd8, 0x1e, 0x75, - 0xf7, 0x29, 0xbf, 0x75, 0x88, 0xbd, 0x9c, 0x92, 0xa1, 0xba, 0x47, 0x0b, - 0xbc, 0xfa, 0xa6, 0xeb, 0x93, 0x54, 0xe4, 0xf1, 0x34, 0x6a, 0x51, 0x0c, - 0xa9, 0x5d, 0xad, 0x39, 0xdf, 0xae, 0x14, 0x66, 0x23, 0x8a, 0x52, 0x0a, - 0xd2, 0x6f, 0xf0, 0x12, 0x12, 0x1e, 0x5d, 0x23, 0xc1, 0x96, 0x94, 0x2f, - 0xf3, 0x83, 0xaa, 0x2b, 0x00, 0x8f, 0xb9, 0x73, 0xf0, 0x6e, 0x0d, 0x9a, - 0x82, 0x4c, 0x2d, 0xee, 0x51, 0x75, 0x26, 0x2e, 0xe9, 0xed, 0xd9, 0x75, - 0xa0, 0xba, 0xbb, 0xb8, 0x65, 0xeb, 0xa0, 0xca, 0xb5, 0x3f, 0x8e, 0x3a, - 0x95, 0xae, 0x91, 0x1a, 0xb6, 0x8e, 0xd0, 0x03, 0x6b, 0x12, 0xdc, 0x05, - 0x00, 0x96, 0x10, 0x96, 0xef, 0x0f, 0xa0, 0xfe, 0x3b, 0xc7, 0x46, 0x96, - 0x96, 0xa0, 0x58, 0x63, 0xef, 0x83, 0x89, 0x6b, 0x2b, 0xab, 0x6c, 0xe6, - 0xb7, 0xae, 0x8d, 0x77, 0x2a, 0xd8, 0x4c, 0xe2, 0xda, 0xeb, 0x92, 0x9d, - 0x36, 0xf4, 0xa7, 0x5d, 0xa6, 0x0c, 0x64, 0xa1, 0xc0, 0xf8, 0x46, 0x77, - 0x41, 0x2d, 0xbb, 0x6e, 0x01, 0x44, 0xa5, 0x30, 0x5f, 0x59, 0x80, 0x9b, - 0xad, 0xfb, 0x2e, 0x9d, 0x43, 0xcd, 0xfb, 0x2b, 0x1e, 0x9d, 0xdc, 0x86, - 0x4f, 0xfa, 0x10, 0xb9, 0xdd, 0xb3, 0x5e, 0x3b, 0xd9, 0x21, 0x41, 0x37, - 0x31, 0xbd, 0x26, 0xcf, 0x2d, 0x89, 0x44, 0x6f, 0x88, 0xde, 0xf1, 0x90, - 0x92, 0x94, 0xa3, 0x7f, 0xb7, 0x9c, 0xdc, 0x2f, 0xe3, 0xf4, 0x16, 0x5a, - 0x1e, 0x5e, 0x01, 0xcd, 0xd0, 0x1b, 0xf5, 0x25, 0x80, 0xe1, 0x52, 0x29, - 0x03, 0xf1, 0x56, 0x1c, 0xf7, 0xe1, 0x4b, 0x62, 0xb2, 0x45, 0x65, 0xf1, - 0x07, 0x1e, 0x0f, 0x7f, 0xc0, 0xe4, 0x9a, 0x5f, 0x2c, 0x54, 0x95, 0x54, - 0x7b, 0xd0, 0x45, 0xfa, 0x68, 0x9d, 0xeb, 0x2e, 0x9d, 0xbf, 0xad, 0xc1, - 0xdf, 0xc7, 0xda, 0x6b, 0x2f, 0x39, 0x44, 0xd5, 0x01, 0xba, 0xdd, 0x53, - 0x04, 0x0d, 0x5d, 0x58, 0xf6, 0x1d, 0xfc, 0x7a, 0x82, 0x31, 0x33, 0xdb, - 0xfe, 0xdc, 0x96, 0xf4, 0x00, 0x81, 0xf8, 0xf7, 0xc4, 0x2a, 0x61, 0x2a, - 0x5d, 0x73, 0x92, 0x20, 0xca, 0x34, 0x51, 0x4b, 0x8a, 0x88, 0xac, 0x87, - 0x3b, 0x1e, 0xf0, 0x38, 0x5b, 0x96, 0x62, 0xdc, 0x13, 0x8e, 0x53, 0x7d, - 0xcb, 0x8a, 0xdb, 0x80, 0x07, 0x6f, 0xa6, 0x03, 0x0f, 0xad, 0x72, 0xb1, - 0x3a, 0x5f, 0xdb, 0x17, 0x12, 0x0a, 0xa8, 0x09, 0x32, 0x26, 0xb5, 0x8e, - 0xad, 0x7e, 0x87, 0xd5, 0x7e, 0xd6, 0x66, 0x97, 0xe5, 0x31, 0xfc, 0xb6, - 0x65, 0x2a, 0x28, 0xeb, 0x57, 0x23, 0xb5, 0xea, 0x5a, 0xc3, 0xc4, 0xae, - 0xc5, 0x5a, 0x90, 0x4d, 0xfa, 0xb0, 0x2c, 0xb2, 0xd7, 0x06, 0x1e, 0xfb, - 0x70, 0x40, 0x16, 0xe5, 0xb6, 0x92, 0x52, 0x1a, 0xd6, 0x6a, 0x13, 0x0a, - 0xda, 0xb2, 0x2a, 0x4c, 0xe4, 0xc0, 0x21, 0x6d, 0x6a, 0xfa, 0x9c, 0x54, - 0xf7, 0xfd, 0x61, 0x75, 0xdc, 0x24, 0x97, 0x04, 0xe3, 0xfe, 0x4c, 0x47, - 0xc7, 0x91, 0xf0, 0xd7, 0x68, 0x82, 0xe8, 0xbe, 0x58, 0x25, 0x82, 0x38, - 0x35, 0xc9, 0xc4, 0x0b, 0xac, 0x29, 0xa1, 0x1d, 0x17, 0x1c, 0x97, 0xb4, - 0x58, 0xcf, 0xe5, 0x23, 0x59, 0x38, 0x4d, 0x6f, 0xb1, 0x9d, 0x7b, 0xa2, - 0xe3, 0xdc, 0x5a, 0x4e, 0x1f, 0xc9, 0x82, 0xf7, 0x41, 0x29, 0x90, 0xc7, - 0x74, 0x71, 0xf0, 0x8f, 0x09, 0x0c, 0xa8, 0x1a, 0x48, 0x1f, 0x78, 0xbe, - 0xb8, 0x74, 0xc5, 0xfd, 0x04, 0xcb, 0x95, 0xc1, 0xe0, 0xbe, 0xf6, 0x84, - 0x2e, 0x66, 0xef, 0x65, 0x82, 0xcc, 0x49, 0x5b, 0xd8, 0xde, 0x2d, 0x41, - 0xb9, 0x27, 0xfc, 0x0d, 0xd2, 0x01, 0x55, 0xcd, 0x9d, 0xf4, 0xe4, 0x46, - 0xe6, 0xd6, 0xc3, 0x16, 0x4e, 0x72, 0x88, 0x56, 0xbe, 0xe6, 0x52, 0xe6, - 0xf9, 0x0e, 0x21, 0xbe, 0x0e, 0x77, 0x5c, 0x42, 0x0c, 0x42, 0x36, 0xe8, - 0x7f, 0x4b, 0x9b, 0x28, 0xfe, 0x3d, 0xef, 0x63, 0x8e, 0xc5, 0xff, 0x9e, - 0x5b, 0x2e, 0xb8, 0x84, 0xf5, 0xa5, 0xc9, 0x30, 0x16, 0x95, 0x12, 0x8c, - 0x83, 0x96, 0xfc, 0x62, 0xe2, 0xff, 0x5c, 0x99, 0x94, 0x5b, 0xac, 0x01, - 0x48, 0xcf, 0x7b, 0x08, 0xbb, 0xa5, 0xd4, 0x74, 0x2e, 0x4a, 0x0a, 0x50, - 0x3a, 0x5e, 0x32, 0xb5, 0xd3, 0xdb, 0xc5, 0x35, 0xbd, 0x5b, 0x9e, 0xe6, - 0xcb, 0xa3, 0xc7, 0x4b, 0x16, 0xb7, 0x89, 0xfc, 0x36, 0x8d, 0x6d, 0x8a, - 0x00, 0xc5, 0x17, 0x0b, 0xa4, 0xa0, 0x68, 0x2b, 0x47, 0xae, 0x19, 0x47, - 0x3e, 0x5d, 0x83, 0xa9, 0xf4, 0xf9, 0x15, 0xaf, 0xf7, 0x94, 0x92, 0x59, - 0x4c, 0x00, 0x01, 0x1d, 0x04, 0xa5, 0x25, 0xf7, 0xbe, 0x0e, 0x9d, 0xdd, - 0x66, 0xb0, 0x07, 0x37, 0x75, 0x90, 0x5d, 0x98, 0x82, 0x80, 0x3a, 0xb2, - 0x79, 0x85, 0xf0, 0xe6, 0x71, 0xc9, 0xaf, 0x33, 0x58, 0x69, 0x33, 0xe9, - 0xc3, 0x41, 0x11, 0x55, 0x26, 0xda, 0xea, 0xbd, 0x23, 0xed, 0x77, 0xd4, - 0x3a, 0x08, 0xc2, 0x38, 0xb6, 0xb4, 0x0c, 0x9c, 0x8d, 0xa6, 0x17, 0xf6, - 0x1c, 0x74, 0xb9, 0xba, 0xf5, 0x49, 0x59, 0x9c, 0x09, 0x6b, 0x0b, 0xfe, - 0xa0, 0xd2, 0x57, 0xa7, 0x14, 0x4e, 0x16, 0xc7, 0x53, 0x93, 0x59, 0x27, - 0xc4, 0x99, 0xe4, 0xb9, 0xe0, 0xad, 0x50, 0xe6, 0xa9, 0xd1, 0xf6, 0xf0, - 0x6e, 0x8e, 0xdf, 0xdd, 0x1a, 0x8c, 0x82, 0x9c, 0x3b, 0x28, 0xfb, 0x25, - 0x04, 0x63, 0x10, 0xd9, 0x46, 0x32, 0x9e, 0x45, 0x8c, 0xcd, 0xbe, 0x1b, - 0xa9, 0x96, 0xcb, 0x9e, 0xf6, 0xfd, 0xf3, 0x9d, 0x0f, 0x1b, 0x17, 0x54, - 0x2d, 0xb6, 0x97, 0x93, 0x9c, 0x62, 0x33, 0x45, 0x78, 0xd3, 0xd3, 0xde, - 0x77, 0x90, 0xf0, 0x9d, 0x18, 0x88, 0x72, 0x3b, 0xda, 0x74, 0x07, 0xc5, - 0x4b, 0xee, 0x63, 0x4b, 0x1b, 0xed, 0x16, 0xf0, 0x29, 0x01, 0x94, 0xeb, - 0xbf, 0x43, 0x9b, 0x8b, 0xcb, 0x75, 0x1a, 0x5f, 0xd9, 0x7c, 0x53, 0xee, - 0x74, 0x10, 0x75, 0x0e, 0x17, 0x38, 0x6a, 0x5d, 0x66, 0xf2, 0x0b, 0x55, - 0xa6, 0xba, 0x84, 0x2c, 0x9c, 0x9a, 0x78, 0x6c, 0x03, 0x59, 0x08, 0xa6, - 0xbe, 0x97, 0x5f, 0x12, 0xe9, 0xfb, 0xe5, 0xcf, 0x2f, 0xd7, 0x3f, 0x64, - 0xbb, 0x5e, 0x32, 0x37, 0xe5, 0xf7, 0x8d, 0x2b, 0x62, 0x97, 0x0d, 0xc4, - 0x6e, 0x7c, 0x8d, 0xfb, 0xf1, 0x41, 0x28, 0xac, 0x10, 0x6e, 0xcd, 0x2d, - 0x2a, 0x88, 0x29, 0xf7, 0x2b, 0x14, 0x67, 0xbd, 0x6b, 0x41, 0x4e, 0xaa, - 0x05, 0x68, 0xd1, 0xd6, 0xa2, 0x0a, 0x39, 0x7f, 0x49, 0xed, 0x39, 0x63, - 0xae, 0x97, 0xdd, 0xa7, 0x2d, 0x20, 0x52, 0x7a, 0xe9, 0x27, 0xd9, 0xbe, - 0x6f, 0x2d, 0x8f, 0x6b, 0xdc, 0xe2, 0x78, 0xe8, 0x5e, 0xeb, 0x56, 0x82, - 0x17, 0x2c, 0x41, 0xdc, 0x73, 0x7f, 0x9c, 0x84, 0x03, 0xe9, 0xd6, 0x4c, - 0xc0, 0x6d, 0xc1, 0xbe, 0x42, 0xaa, 0xc1, 0x9a, 0x95, 0xd6, 0xa4, 0x6b, - 0x9b, 0xf2, 0x39, 0x4a, 0x50, 0xad, 0x3e, 0xd7, 0x21, 0xb4, 0xc0, 0x3a, - 0x21, 0xb8, 0xf7, 0x9f, 0x07, 0x37, 0x94, 0x4e, 0xb6, 0xf6, 0xdf, 0x74, - 0xba, 0x80, 0xf4, 0xe1, 0x62, 0xb1, 0x82, 0xb4, 0xda, 0x86, 0x36, 0x16, - 0xd6, 0x75, 0x47, 0xb7, 0x32, 0x5b, 0x5b, 0xbc, 0xdd, 0x52, 0x67, 0x5d, - 0xcc, 0x58, 0xfe, 0x41, 0xd9, 0x0f, 0xe4, 0xfe, 0x64, 0x7f, 0x6d, 0x82, - 0xb9, 0x49, 0xad, 0x39, 0x8d, 0x08, 0xb7, 0x66, 0x11, 0x62, 0x8d, 0x09, - 0xe3, 0x69, 0x48, 0x7a, 0x82, 0x34, 0x86, 0x0c, 0x2f, 0x1f, 0x5b, 0x91, - 0xb2, 0xa0, 0x6e, 0x51, 0xd9, 0x02, 0xd7, 0xad, 0xd8, 0xbc, 0x77, 0x0b, - 0xd5, 0x55, 0xba, 0x63, 0x8d, 0xbb, 0xb3, 0xc0, 0xb0, 0xc8, 0xa7, 0x1f, - 0xa2, 0x9b, 0xd3, 0x68, 0x99, 0xf7, 0x6c, 0xb6, 0xd4, 0x51, 0x96, 0xc9, - 0x48, 0x45, 0x66, 0x22, 0x5f, 0xea, 0x68, 0x9d, 0xba, 0xa6, 0x20, 0x9b, - 0xf4, 0xdd, 0xbf, 0xe9, 0x0f, 0x17, 0x59, 0xb6, 0x94, 0xda, 0x4a, 0xb8, - 0x74, 0x39, 0x3d, 0x97, 0xb6, 0x46, 0x6b, 0x42, 0x31, 0x41, 0x59, 0xe8, - 0x13, 0xf1, 0x66, 0xcb, 0xbf, 0xc6, 0x27, 0x48, 0x58, 0x09, 0xb3, 0x93, - 0x9c, 0x22, 0xba, 0x1b, 0xd6, 0x3a, 0x31, 0x21, 0x24, 0xdb, 0x4e, 0xa1, - 0xbd, 0x91, 0x27, 0xe5, 0x97, 0xba, 0xa4, 0xf2, 0x25, 0x20, 0xc9, 0xbd, - 0x8d, 0xdf, 0x41, 0x38, 0x2e, 0xbd, 0x47, 0x13, 0xb1, 0xb6, 0x73, 0x31, - 0xd0, 0xc7, 0xb8, 0x65, 0x5c, 0xfd, 0x83, 0x11, 0xd9, 0x74, 0x6a, 0x06, - 0xc3, 0xc6, 0x1c, 0xfc, 0x3d, 0xe1, 0x62, 0x08, 0x6e, 0x77, 0xa1, 0x36, - 0xc8, 0x26, 0x77, 0x31, 0x09, 0x1e, 0xb0, 0x56, 0x94, 0x3b, 0x71, 0x33, - 0xc3, 0x05, 0xcc, 0x7d, 0x9c, 0x38, 0x3e, 0x7a, 0x9c, 0xee, 0xc9, 0x0a, - 0x01, 0xd8, 0xdd, 0x2e, 0x82, 0xf4, 0xb9, 0x31, 0xe0, 0x72, 0xf4, 0x6b, - 0xf1, 0x8e, 0xce, 0xda, 0xa9, 0x2d, 0x3c, 0x0b, 0x73, 0xff, 0x1e, 0x27, - 0xef, 0x81, 0x7a, 0xc9, 0xe2, 0xa4, 0xa7, 0x61, 0x5e, 0x0c, 0x47, 0x3b, - 0x9a, 0x17, 0x88, 0x72, 0xfa, 0x70, 0x37, 0x9b, 0xe9, 0x08, 0xd4, 0x1a, - 0x47, 0xcb, 0xd9, 0x98, 0x24, 0x8e, 0x5c, 0x38, 0x1e, 0x29, 0xe7, 0xaa, - 0x14, 0x4f, 0xec, 0xbe, 0x8c, 0xe6, 0xf0, 0xa5, 0x05, 0x38, 0x1f, 0x36, - 0xe7, 0x48, 0x04, 0x09, 0xe3, 0x78, 0x13, 0xb5, 0x0c, 0xaa, 0xf5, 0x6a, - 0x71, 0xd6, 0x05, 0xae, 0x89, 0xdb, 0x8d, 0x67, 0x8c, 0x89, 0x3d, 0x7c, - 0x86, 0x72, 0xc2, 0xa5, 0x3b, 0xff, 0xd8, 0x7f, 0x06, 0x17, 0xd5, 0x7b, - 0xe9, 0x4e, 0xb2, 0x8e, 0x60, 0x05, 0x54, 0x74, 0x47, 0xdd, 0x77, 0xa4, - 0x8f, 0xea, 0xe8, 0x92, 0xab, 0x74, 0x13, 0xed, 0xdb, 0x47, 0xff, 0xa2, - 0x46, 0xbd, 0x40, 0x9d, 0x5a, 0x39, 0xd1, 0xd9, 0xba, 0x0f, 0xeb, 0x2c, - 0x20, 0x21, 0x7e, 0xd2, 0x20, 0x20, 0x62, 0xd9, 0xa5, 0x13, 0xd7, 0x82, - 0xbb, 0x37, 0x0f, 0x2d, 0xbb, 0xaf, 0xea, 0x27, 0x8b, 0xf0, 0x55, 0x1c, - 0xd0, 0x0b, 0x1a, 0x3f, 0xbc, 0x5e, 0xaa, 0xc4, 0x2d, 0x67, 0x59, 0xb4, - 0x66, 0x1f, 0x69, 0x57, 0xea, 0x8c, 0x4f, 0x6e, 0x0d, 0xb5, 0x3c, 0xbe, - 0xb5, 0xd6, 0xf9, 0xf1, 0x22, 0xed, 0x3d, 0x84, 0x24, 0xfc, 0x1d, 0xdb, - 0xc7, 0xb6, 0x1b, 0x83, 0x44, 0x0d, 0x84, 0xae, 0x5e, 0xb1, 0xb4, 0x4d, - 0xb6, 0xde, 0x27, 0x57, 0x90, 0x23, 0xff, 0xc2, 0x94, 0x2c, 0x75, 0x56, - 0xff, 0x87, 0xa2, 0xf1, 0x87, 0x7f, 0x7a, 0x11, 0xf9, 0x89, 0xdd, 0x8e, - 0x44, 0xea, 0xb0, 0xd8, 0xaf, 0x34, 0xf7, 0x21, 0x77, 0x9a, 0x4b, 0xee, - 0x23, 0x81, 0xda, 0xd6, 0x29, 0xd8, 0x4b, 0x28, 0x48, 0x9c, 0x44, 0x24, - 0x6e, 0x3f, 0x15, 0xc9, 0xd9, 0x9a, 0x74, 0x25, 0x58, 0x6c, 0x4b, 0xbc, - 0x53, 0x34, 0x1e, 0x95, 0xe2, 0xae, 0xe3, 0x08, 0x3b, 0x09, 0xb5, 0x59, - 0x0e, 0xbe, 0xa5, 0x5a, 0x75, 0x10, 0xb4, 0x8a, 0x27, 0x06, 0x20, 0xee, - 0x79, 0xf3, 0x5d, 0xf9, 0xde, 0xde, 0x95, 0x0b, 0x32, 0x4d, 0x2b, 0xc3, - 0x5e, 0x73, 0xd3, 0x44, 0x14, 0x05, 0xb3, 0x1e, 0x69, 0x4a, 0x1a, 0x22, - 0xf0, 0x30, 0x5b, 0x52, 0x22, 0xa9, 0xd7, 0xb8, 0x29, 0x08, 0x57, 0x02, - 0x50, 0x2f, 0x9b, 0x91, 0x36, 0x3a, 0x0a, 0x03, 0xc4, 0x32, 0x63, 0x11, - 0x15, 0x85, 0x10, 0x67, 0x05, 0xc3, 0x9c, 0xb8, 0x83, 0x3a, 0x5d, 0xab, - 0x30, 0x38, 0x9a, 0x84, 0x2d, 0x78, 0x35, 0x88, 0xd9, 0xa0, 0x4b, 0xe5, - 0x59, 0x87, 0xa5, 0x4c, 0x0e, 0xee, 0x37, 0x01, 0x6a, 0x23, 0x7b, 0xd2, - 0xd7, 0x7f, 0xa7, 0x19, 0x63, 0x87, 0xff, 0x4e, 0xfa, 0x09, 0x73, 0xd4, - 0xd7, 0x41, 0x92, 0x36, 0x84, 0x5d, 0x86, 0x22, 0xe8, 0x46, 0x5d, 0x87, - 0x64, 0x9e, 0xd9, 0x02, 0xa8, 0x56, 0x36, 0xfe, 0xc4, 0x20, 0xba, 0xe9, - 0x16, 0xc2, 0xcc, 0x39, 0x83, 0x0b, 0x99, 0x9c, 0xfb, 0x04, 0xea, 0x40, - 0x10, 0xbf, 0xc3, 0x72, 0xf9, 0x38, 0x8a, 0xaf, 0x85, 0xe6, 0xb3, 0x42, - 0x8f, 0x95, 0x5b, 0x4e, 0xac, 0x5b, 0xd7, 0xe5, 0xeb, 0x28, 0x4f, 0x79, - 0x64, 0x80, 0xed, 0xd9, 0xf4, 0x1e, 0xfc, 0x09, 0x8b, 0x9c, 0x1c, 0x1c, - 0xdc, 0xd5, 0xb1, 0xb7, 0x35, 0xb8, 0x36, 0xe2, 0xfe, 0x54, 0x04, 0x3f, - 0xaf, 0x7e, 0x6c, 0xe0, 0xe7, 0x9f, 0x30, 0x39, 0x02, 0x6e, 0x5b, 0x7a, - 0xd8, 0x7c, 0xe2, 0x0d, 0x11, 0xb6, 0x11, 0xbe, 0x38, 0xe5, 0x00, 0xb2, - 0xc9, 0x12, 0x2b, 0xfb, 0xaf, 0x64, 0xb5, 0x96, 0x46, 0x0a, 0x98, 0x85, - 0xbf, 0x1f, 0x3b, 0xc0, 0xfd, 0x32, 0xb3, 0x29, 0xef, 0x90, 0x2b, 0xda, - 0x1f, 0xf3, 0xc2, 0x22, 0x84, 0xe4, 0xb2, 0xe5, 0x8a, 0x59, 0xa4, 0x5b, - 0xdf, 0x24, 0x4b, 0xe7, 0xc0, 0x56, 0x9e, 0x39, 0x3c, 0xc6, 0x3c, 0x3d, - 0xd4, 0xa1, 0x2c, 0x44, 0xbb, 0x29, 0x39, 0x07, 0x1f, 0x2d, 0xec, 0x78, - 0x22, 0xfa, 0xc5, 0xa3, 0xf2, 0x57, 0x68, 0x8e, 0x62, 0x5b, 0x7e, 0x75, - 0xe6, 0x38, 0x08, 0xba, 0x81, 0xbc, 0x58, 0xe9, 0x30, 0x36, 0x99, 0xb1, - 0x7c, 0x12, 0x97, 0xc1, 0xf0, 0x63, 0xbe, 0xa6, 0x40, 0x2c, 0x8a, 0xdf, - 0xd6, 0x54, 0x01, 0x77, 0xb5, 0xe7, 0xdf, 0x76, 0x8f, 0xf1, 0xdb, 0xfa, - 0xdf, 0x6f, 0x7f, 0xec, 0xfd, 0x9b, 0x45, 0xf1, 0xcb, 0x1b, 0xc4, 0x5f, - 0xdd, 0x1f, 0xfe, 0xb6, 0xae, 0xf0, 0xdb, 0x35, 0x8c, 0xdf, 0xd6, 0x73, - 0x7f, 0x8f, 0x28, 0xb3, 0x38, 0xca, 0x0a, 0x33, 0x5a, 0xd1, 0xef, 0xd1, - 0x75, 0xda, 0xdf, 0x23, 0x0a, 0xe8, 0x97, 0x83, 0xd6, 0x6f, 0x8d, 0xb0, - 0x96, 0x9e, 0xd8, 0xa8, 0x9e, 0xe6, 0x18, 0x7c, 0x26, 0xc7, 0xe0, 0x93, - 0x1c, 0x83, 0xcf, 0xcb, 0x9d, 0xfb, 0x04, 0x00, 0xe6, 0xb5, 0xa2, 0xd0, - 0xb8, 0x49, 0x90, 0xd7, 0x1b, 0x41, 0x75, 0x2e, 0x58, 0x1c, 0x01, 0x19, - 0x4e, 0xfc, 0xea, 0xf5, 0x1f, 0x91, 0x5c, 0x50, 0xae, 0xb1, 0x00, 0xe3, - 0x0e, 0xee, 0x89, 0x6a, 0xd8, 0x09, 0xdf, 0x8e, 0x01, 0x0c, 0x89, 0xe4, - 0xe9, 0xdb, 0x7e, 0xbe, 0xc3, 0x8b, 0x59, 0x10, 0x9f, 0xe2, 0x54, 0x7f, - 0xe2, 0xca, 0x9f, 0xe9, 0x6b, 0x87, 0x4b, 0x15, 0x43, 0xd0, 0x21, 0x33, - 0x31, 0x3b, 0x83, 0x73, 0x66, 0x70, 0x39, 0xde, 0x0e, 0x65, 0x75, 0x7c, - 0xeb, 0xd0, 0xd0, 0x9d, 0x86, 0x9d, 0x83, 0x67, 0x98, 0x89, 0x09, 0xc4, - 0xe4, 0xac, 0x71, 0x2d, 0xfc, 0xf4, 0x80, 0x5d, 0x41, 0x06, 0xb0, 0x7d, - 0x3b, 0xf4, 0x6d, 0xc5, 0x6f, 0x5c, 0x59, 0x7e, 0x0b, 0x11, 0x60, 0xb3, - 0xc6, 0x77, 0x23, 0x95, 0x78, 0xd9, 0x63, 0x2c, 0xca, 0x9f, 0x97, 0x9f, - 0xc9, 0x31, 0xff, 0x68, 0xca, 0xa8, 0x4b, 0x86, 0xaf, 0x44, 0x31, 0xd2, - 0xc1, 0x94, 0xab, 0x01, 0x9c, 0x80, 0x91, 0x3e, 0xa2, 0x48, 0x1f, 0x60, - 0xfa, 0x08, 0xc6, 0x84, 0xe7, 0xa0, 0x29, 0xb6, 0x82, 0x86, 0xec, 0x66, - 0x58, 0x14, 0xc4, 0xb0, 0x38, 0x04, 0x09, 0x31, 0x06, 0x22, 0x8b, 0x26, - 0x40, 0xb3, 0x4a, 0x9f, 0xf4, 0x76, 0xe4, 0x17, 0x57, 0xfc, 0x30, 0xba, - 0x1c, 0x06, 0xce, 0x73, 0x30, 0x15, 0xcb, 0xe4, 0x72, 0xac, 0xc8, 0xe5, - 0x50, 0xe1, 0xfe, 0xc4, 0xf3, 0x41, 0x39, 0x8d, 0x34, 0x4f, 0xc9, 0x5b, - 0xf8, 0x1c, 0xf5, 0xb2, 0x10, 0xaf, 0x76, 0xa6, 0xbb, 0x2d, 0x01, 0x19, - 0x0b, 0x83, 0x56, 0xb8, 0xe3, 0x97, 0x96, 0xea, 0x40, 0xfa, 0xf2, 0x75, - 0xb4, 0x8f, 0xf6, 0xfe, 0x05, 0x7e, 0xc7, 0xba, 0x0b, 0x45, 0x0b, 0x19, - 0x71, 0x89, 0x13, 0xe4, 0x12, 0x8c, 0x53, 0xcf, 0x51, 0x85, 0x32, 0xba, - 0x4c, 0x62, 0x67, 0xf0, 0x34, 0xcf, 0x50, 0x05, 0x6e, 0x3e, 0x75, 0x5b, - 0x84, 0x26, 0x01, 0xb4, 0x65, 0xd8, 0x1b, 0xc3, 0x7e, 0x31, 0xd0, 0x9a, - 0x33, 0xb3, 0xc3, 0x03, 0xc7, 0x32, 0x15, 0xc0, 0xd9, 0x2f, 0xf7, 0xe8, - 0x42, 0xc5, 0xcd, 0xae, 0x3c, 0xce, 0x18, 0x17, 0x9f, 0x65, 0xdd, 0x75, - 0x1b, 0x58, 0xe1, 0x0f, 0x04, 0x1e, 0xee, 0xcf, 0xe4, 0x22, 0x03, 0x8a, - 0x17, 0xb3, 0x40, 0x07, 0x7f, 0x5b, 0x34, 0x1b, 0xf9, 0x90, 0x9f, 0x7c, - 0x7c, 0x57, 0xcd, 0x1c, 0xd1, 0x08, 0x59, 0x70, 0x80, 0x99, 0x8a, 0x1f, - 0xa5, 0xf6, 0x87, 0x59, 0x87, 0x19, 0x59, 0x67, 0x37, 0xdf, 0xcc, 0x24, - 0x11, 0x88, 0xde, 0x6b, 0x02, 0xee, 0x34, 0x18, 0x59, 0x72, 0x62, 0x3d, - 0xeb, 0xd4, 0x13, 0xbd, 0x76, 0xa3, 0xc6, 0x36, 0x80, 0x89, 0xc6, 0xbc, - 0xa6, 0x93, 0xc5, 0x39, 0x09, 0x98, 0xb6, 0x1e, 0x12, 0xa0, 0xf0, 0xd8, - 0x0e, 0x00, 0xe5, 0xc0, 0xac, 0x54, 0xcf, 0xc6, 0x4a, 0xf5, 0x14, 0x2b, - 0xd5, 0x33, 0x1e, 0xd0, 0xb1, 0x7c, 0x4f, 0xf3, 0x10, 0x3f, 0x4f, 0xcc, - 0x19, 0xf2, 0x0d, 0x47, 0xef, 0xf0, 0xfd, 0x0e, 0x9f, 0x23, 0xb4, 0x15, - 0x71, 0x6a, 0x1e, 0xb5, 0x14, 0x1b, 0xaf, 0x7c, 0x90, 0x45, 0x10, 0x22, - 0xdb, 0x2b, 0xe4, 0xf3, 0x19, 0x98, 0x04, 0x60, 0x11, 0x42, 0xb3, 0x8c, - 0xa7, 0x6c, 0x81, 0xb6, 0x30, 0x26, 0x2e, 0x89, 0x80, 0x62, 0xf6, 0x25, - 0xd8, 0x0c, 0x22, 0xce, 0x5b, 0xac, 0x99, 0xc3, 0xa0, 0x6f, 0x0f, 0xc0, - 0x00, 0x45, 0x36, 0x21, 0xd4, 0x33, 0x40, 0xbb, 0x68, 0x0e, 0x4a, 0x6f, - 0xec, 0x49, 0x18, 0xed, 0xb5, 0x54, 0x8f, 0xc3, 0xa1, 0xb1, 0x59, 0x8c, - 0x83, 0xdf, 0xb6, 0x28, 0x5e, 0x88, 0x5d, 0x88, 0x62, 0x18, 0x1f, 0xdc, - 0x34, 0x54, 0x53, 0x11, 0x3f, 0x9e, 0xf9, 0x45, 0xbd, 0xc7, 0x6c, 0x45, - 0x30, 0xd3, 0x91, 0x1e, 0x35, 0x09, 0x45, 0xa0, 0x80, 0xc8, 0x4d, 0xaa, - 0x57, 0x09, 0x48, 0x36, 0x6a, 0xa2, 0x23, 0x42, 0x9b, 0x6d, 0xb2, 0x90, - 0x1f, 0xb1, 0xaf, 0x72, 0xbe, 0x1f, 0x4b, 0xc8, 0xac, 0x8f, 0x52, 0x17, - 0xe6, 0x12, 0x78, 0xe4, 0xec, 0x08, 0x5e, 0x4a, 0xae, 0x10, 0x80, 0x22, - 0x92, 0x3c, 0x08, 0x07, 0x52, 0x39, 0x4c, 0x16, 0x21, 0x5d, 0xe1, 0x37, - 0x9a, 0x7d, 0x35, 0x98, 0xe0, 0x49, 0x93, 0x49, 0x05, 0xca, 0xe8, 0x84, - 0xf6, 0x39, 0xc6, 0x58, 0x33, 0xea, 0xf9, 0x51, 0x98, 0x74, 0x75, 0x84, - 0xf5, 0xeb, 0x12, 0x61, 0x48, 0xc5, 0x25, 0x91, 0x52, 0x3c, 0xf9, 0xad, - 0x35, 0xa1, 0xdd, 0xd1, 0x5b, 0xf2, 0xf7, 0x07, 0xce, 0x95, 0x21, 0x8e, - 0xdc, 0xcb, 0x99, 0x37, 0x2b, 0xe3, 0x1c, 0xeb, 0x21, 0x1c, 0x6f, 0x63, - 0xf5, 0x50, 0x4d, 0x59, 0x17, 0x29, 0x58, 0xd8, 0xa1, 0x40, 0xb2, 0xe6, - 0xac, 0x04, 0x8a, 0x4a, 0x99, 0x43, 0xc1, 0x40, 0x98, 0xa3, 0xd4, 0xf8, - 0x1d, 0xb2, 0x77, 0xe9, 0x63, 0x2b, 0x7c, 0x53, 0x7c, 0xa7, 0x5a, 0xf2, - 0x6c, 0xf6, 0x12, 0x6d, 0x94, 0xa3, 0x68, 0x67, 0x4b, 0x3e, 0x0d, 0x98, - 0x5b, 0x6b, 0xae, 0x3c, 0xc7, 0xe5, 0x16, 0x4b, 0x24, 0x9c, 0x10, 0x51, - 0xa7, 0x42, 0x85, 0x66, 0xb9, 0x04, 0x82, 0x37, 0x72, 0xae, 0xd6, 0x56, - 0xa7, 0x26, 0x83, 0xa7, 0xf4, 0x32, 0xee, 0x34, 0xd9, 0x22, 0xbd, 0x40, - 0x0a, 0x70, 0x28, 0x96, 0x38, 0xad, 0x17, 0x60, 0x72, 0x03, 0xf9, 0x36, - 0x47, 0x54, 0xe8, 0xa2, 0xee, 0xbe, 0x3e, 0x78, 0x7f, 0x22, 0x6a, 0x8b, - 0xba, 0x26, 0x66, 0xa8, 0xdf, 0x59, 0x43, 0x4b, 0x9a, 0xac, 0xa6, 0xa5, - 0x58, 0xb8, 0x0f, 0xf3, 0xbc, 0x9c, 0x2c, 0x3a, 0x5d, 0xa9, 0x57, 0x73, - 0xb7, 0xcb, 0x73, 0x17, 0xb3, 0x80, 0x15, 0xad, 0xa5, 0x8a, 0x35, 0x02, - 0x85, 0x1c, 0x90, 0x5e, 0x00, 0x43, 0x03, 0x06, 0xc3, 0xca, 0x86, 0x0d, - 0x7e, 0xf1, 0xa8, 0x64, 0x31, 0x8e, 0xc3, 0x94, 0x97, 0x0d, 0x8f, 0x97, - 0x77, 0xb0, 0x4e, 0xf3, 0xa4, 0xa2, 0x22, 0x72, 0x76, 0x47, 0xc1, 0xc8, - 0x7f, 0x6a, 0x3e, 0x10, 0x0c, 0x1f, 0x07, 0xb9, 0x90, 0xc7, 0x50, 0xc3, - 0xa3, 0xf4, 0xfd, 0x72, 0x05, 0x3c, 0xfe, 0xd6, 0x3d, 0x01, 0xa6, 0xaa, - 0xf1, 0x17, 0x0b, 0xe1, 0x0f, 0x02, 0x8b, 0xc5, 0x8a, 0xf8, 0xcb, 0x15, - 0x71, 0x05, 0x6f, 0xbb, 0x11, 0x53, 0x58, 0xdd, 0xdb, 0x27, 0x40, 0x80, - 0x64, 0x59, 0x1f, 0xc5, 0xae, 0x3e, 0x82, 0x55, 0xfd, 0x5b, 0xaf, 0x43, - 0xbe, 0x2d, 0xc6, 0x79, 0xff, 0x1e, 0x46, 0xbe, 0xe7, 0xa6, 0xf2, 0x39, - 0x97, 0x90, 0x89, 0xc8, 0xc0, 0x77, 0xbe, 0x10, 0xf8, 0x1e, 0x92, 0xbb, - 0x38, 0xa0, 0xbf, 0x93, 0x71, 0xf8, 0x7b, 0xf8, 0x89, 0x1f, 0x72, 0xdd, - 0x7c, 0xeb, 0x2d, 0xd2, 0x37, 0x18, 0x9e, 0x34, 0x0c, 0x36, 0x1c, 0xa1, - 0x8d, 0x77, 0x4d, 0x61, 0xb5, 0x8f, 0xdf, 0x90, 0x84, 0xf1, 0x4b, 0x6c, - 0x63, 0xdf, 0x23, 0x19, 0xa2, 0x7d, 0x4e, 0x05, 0x53, 0x16, 0xc1, 0x04, - 0xfc, 0x0d, 0xc9, 0x87, 0x63, 0x3c, 0x1f, 0xa9, 0x90, 0x13, 0xf3, 0xb7, - 0x1b, 0xce, 0xb7, 0x5b, 0x4e, 0x05, 0x0b, 0x7d, 0xf3, 0x25, 0xb3, 0x00, - 0x8a, 0x03, 0x88, 0x9e, 0x49, 0x1c, 0x21, 0xfb, 0xa2, 0x22, 0x2f, 0x05, - 0x02, 0x29, 0x14, 0x3e, 0xe2, 0xdd, 0xbf, 0x4b, 0xf9, 0x3e, 0xeb, 0xe6, - 0xe6, 0xfb, 0x2d, 0x46, 0xd7, 0x6f, 0x3d, 0xe5, 0xfc, 0xd6, 0xd2, 0xf4, - 0xfb, 0x1d, 0x8c, 0xd8, 0x4c, 0xcd, 0x9b, 0x63, 0xf9, 0x74, 0xe1, 0xa3, - 0xf5, 0x0a, 0x30, 0xf3, 0x4c, 0x5e, 0x5a, 0x4f, 0xb9, 0xb4, 0x9e, 0xb8, - 0xb4, 0x9e, 0xbc, 0xa2, 0x9e, 0x72, 0x45, 0x0d, 0xc4, 0x18, 0x26, 0x89, - 0x27, 0x17, 0xa0, 0xb7, 0x85, 0xde, 0xd6, 0x27, 0x79, 0xbf, 0xa7, 0x0b, - 0x85, 0x77, 0xc6, 0x8d, 0x28, 0xdd, 0x1e, 0x76, 0x1a, 0x17, 0x0d, 0x53, - 0x38, 0x3a, 0xe2, 0xf7, 0x15, 0x39, 0xaa, 0xa6, 0xb5, 0x38, 0xef, 0x75, - 0x77, 0xc6, 0x16, 0x43, 0x10, 0xfe, 0x2a, 0x82, 0x6b, 0x2f, 0x1b, 0xa6, - 0x61, 0xf8, 0xe6, 0xaf, 0x1c, 0x0e, 0xdf, 0x76, 0x58, 0x91, 0xcc, 0xf0, - 0x30, 0xac, 0x51, 0x5b, 0x00, 0x76, 0xba, 0xa6, 0x53, 0x2d, 0xc5, 0xa6, - 0x5c, 0x90, 0x02, 0xd1, 0xdb, 0x61, 0xd7, 0x47, 0xba, 0x3e, 0xf8, 0xe5, - 0x35, 0xa4, 0x2f, 0x4f, 0x86, 0x21, 0xe0, 0x2b, 0x9c, 0x9f, 0x5e, 0x38, - 0x4f, 0xb9, 0xe7, 0x9d, 0x62, 0xa2, 0x9f, 0x72, 0x01, 0x0a, 0x14, 0xcf, - 0x2e, 0x01, 0xef, 0x76, 0x73, 0x67, 0x81, 0x31, 0x56, 0x45, 0xc9, 0x96, - 0x10, 0x86, 0xbe, 0xce, 0xf1, 0x23, 0x47, 0xb3, 0x9d, 0xcd, 0x3c, 0xbd, - 0x9d, 0x62, 0x09, 0x4a, 0xd3, 0xee, 0xf1, 0xd6, 0x6f, 0x82, 0x2c, 0x93, - 0xfa, 0xbb, 0xa8, 0xb0, 0x02, 0xd0, 0xe7, 0x12, 0x85, 0xe4, 0x25, 0x69, - 0x05, 0xb8, 0xdc, 0x0f, 0x00, 0x9e, 0x8a, 0x1e, 0xd2, 0x3d, 0xb0, 0xf3, - 0xb7, 0xf2, 0xe5, 0x28, 0x40, 0xba, 0x6c, 0xee, 0xf8, 0x25, 0xc4, 0x32, - 0x54, 0x00, 0x1d, 0x76, 0x61, 0x73, 0x38, 0xa6, 0xc3, 0xc1, 0xe4, 0x24, - 0x38, 0x15, 0xb7, 0xcf, 0xe2, 0x10, 0x4b, 0x86, 0x58, 0x18, 0x62, 0x21, - 0x57, 0x03, 0x4c, 0xb9, 0xf0, 0x9a, 0x1d, 0x28, 0x5c, 0xe8, 0x30, 0x73, - 0x82, 0x8c, 0x2e, 0xb9, 0x39, 0x6f, 0xe9, 0xe8, 0xbc, 0xd1, 0xd5, 0xf9, - 0xa0, 0xf9, 0x92, 0x8a, 0x95, 0x84, 0x74, 0xf6, 0x1a, 0xd8, 0x46, 0xb1, - 0x49, 0x9c, 0xce, 0xbb, 0x5a, 0xfc, 0x79, 0x77, 0x8b, 0x0f, 0x35, 0x72, - 0xd5, 0xa0, 0x7a, 0x38, 0x00, 0xe5, 0x01, 0xc7, 0x16, 0x86, 0xf3, 0xd5, - 0x63, 0x30, 0x71, 0x8c, 0xeb, 0x93, 0x19, 0xe8, 0xa7, 0x64, 0xa0, 0x9f, - 0xc8, 0x40, 0x3f, 0x9d, 0x51, 0x67, 0xe7, 0xf6, 0x8a, 0xe1, 0x7e, 0x3a, - 0x9d, 0xc7, 0x33, 0xf3, 0x78, 0x32, 0x8f, 0x7a, 0xcb, 0x1f, 0x00, 0x74, - 0xfd, 0x9f, 0x2f, 0xda, 0x14, 0xcc, 0x17, 0x2c, 0x92, 0xf1, 0x1b, 0x4e, - 0xea, 0x72, 0xe1, 0xf2, 0xb8, 0x47, 0xf3, 0xa8, 0x70, 0x0e, 0x97, 0x58, - 0xe9, 0xcf, 0x17, 0xad, 0xee, 0x01, 0xc2, 0x56, 0x12, 0x0a, 0x03, 0xa1, - 0x8c, 0x67, 0x77, 0xe2, 0x79, 0xb8, 0xb0, 0x29, 0x10, 0x20, 0x21, 0x40, - 0xf0, 0x34, 0x84, 0x7c, 0xa6, 0x6a, 0x46, 0x67, 0x9b, 0xad, 0x88, 0x26, - 0x90, 0xbc, 0x78, 0xaf, 0x36, 0x73, 0x4f, 0x86, 0x85, 0x4a, 0xbe, 0x29, - 0x07, 0xdf, 0x04, 0x0b, 0x68, 0x1e, 0x37, 0xbf, 0x04, 0x99, 0x8b, 0x5f, - 0xf4, 0xcf, 0xc5, 0x83, 0x4e, 0xa0, 0xb4, 0xd3, 0x50, 0x3d, 0x53, 0x18, - 0x0a, 0xcd, 0x88, 0xa2, 0x44, 0x2a, 0x4a, 0xc1, 0xb4, 0x14, 0x86, 0x52, - 0x93, 0x47, 0x19, 0x33, 0x95, 0x29, 0xca, 0x56, 0x8d, 0x72, 0x3e, 0xef, - 0x0f, 0xc7, 0x73, 0x3e, 0xe2, 0xe7, 0x11, 0xe1, 0xc2, 0x8c, 0x70, 0x4f, - 0xbf, 0x5e, 0x11, 0x4a, 0x4b, 0xfb, 0xe2, 0xac, 0x33, 0x4b, 0xe8, 0x82, - 0x80, 0x5c, 0xa1, 0x74, 0x17, 0x0e, 0xac, 0x8b, 0xcf, 0x2c, 0x16, 0x2b, - 0x65, 0xda, 0x71, 0x5d, 0x9f, 0x28, 0x3c, 0x2f, 0x3e, 0xb4, 0x58, 0xe2, - 0xd0, 0x62, 0xb9, 0xa8, 0x73, 0x2e, 0x96, 0x2c, 0x1f, 0x48, 0x4e, 0xdd, - 0x3f, 0x16, 0x0e, 0xbc, 0xcb, 0xc5, 0xab, 0x86, 0x85, 0x07, 0xe8, 0x4b, - 0x7b, 0x84, 0xb3, 0xe4, 0x1b, 0x9c, 0xa5, 0x3d, 0xc1, 0x59, 0xf4, 0xd2, - 0x66, 0xb9, 0xfc, 0xf9, 0xa3, 0x6f, 0x7f, 0xfe, 0xf8, 0xd3, 0x1f, 0x0c, - 0xb9, 0xcb, 0xe0, 0x74, 0x0d, 0x99, 0x30, 0x20, 0xb4, 0x8c, 0x85, 0x8f, - 0x6c, 0x20, 0xda, 0x06, 0x2d, 0x66, 0xa9, 0xbb, 0xf9, 0xe8, 0x7b, 0x00, - 0x4a, 0x46, 0xbc, 0x27, 0xc5, 0xef, 0x46, 0x23, 0xfc, 0x8f, 0x7a, 0xac, - 0x42, 0x90, 0x56, 0x68, 0x8e, 0x00, 0x08, 0x12, 0x5a, 0xea, 0x59, 0x2c, - 0x1e, 0x5e, 0x96, 0x1c, 0x5e, 0x16, 0x0e, 0x2f, 0xcb, 0x98, 0x19, 0x1a, - 0x5b, 0x86, 0x46, 0x65, 0x88, 0x82, 0xb7, 0xf7, 0xa5, 0x40, 0x42, 0x0b, - 0x02, 0xc6, 0x40, 0xb4, 0x94, 0xa2, 0xc0, 0x4a, 0x71, 0x60, 0xa5, 0x44, - 0x60, 0xb5, 0xb9, 0xf8, 0xcb, 0x91, 0x5f, 0x0e, 0x7e, 0x89, 0x72, 0x28, - 0xac, 0xc9, 0x12, 0xb2, 0x39, 0xc3, 0x54, 0x16, 0x81, 0x98, 0xd4, 0xf2, - 0x73, 0xe5, 0x3d, 0x5b, 0x45, 0x50, 0x04, 0x40, 0x87, 0x3f, 0x0a, 0xf7, - 0xc7, 0xc1, 0xfe, 0xd8, 0xe3, 0x4f, 0xfa, 0x43, 0xc8, 0xde, 0x94, 0x2e, - 0xb9, 0x27, 0x5d, 0xb8, 0x25, 0x5d, 0xfc, 0xb8, 0x67, 0xc9, 0xb7, 0x3d, - 0x40, 0x93, 0x3e, 0x85, 0xf1, 0x88, 0x9f, 0x07, 0x5d, 0xd5, 0x51, 0x09, - 0xd5, 0x53, 0x2e, 0xcc, 0x6c, 0x98, 0xf0, 0x55, 0xdc, 0x96, 0x00, 0x22, - 0xea, 0x0a, 0xf6, 0xf3, 0x8e, 0x49, 0xa2, 0xa2, 0xf8, 0x55, 0xef, 0x90, - 0x68, 0xa7, 0xbd, 0x5c, 0x23, 0x84, 0x2b, 0x84, 0xde, 0xc5, 0xb1, 0x40, - 0xb9, 0x6e, 0xe3, 0x7f, 0xa7, 0xf9, 0x89, 0x8a, 0xc4, 0xe2, 0x4a, 0x7d, - 0xe9, 0xc7, 0x0d, 0x5e, 0xc5, 0x3c, 0x8b, 0xad, 0xa0, 0xe0, 0x9d, 0x09, - 0x0f, 0xb4, 0x41, 0xe5, 0x93, 0x4a, 0x11, 0x86, 0x38, 0xbe, 0x4c, 0xcf, - 0xa1, 0x70, 0x35, 0x71, 0xbb, 0x68, 0x0f, 0xf2, 0xf3, 0x66, 0xb9, 0x84, - 0x9e, 0x21, 0x66, 0x4d, 0x0a, 0x0d, 0x00, 0x6a, 0x8f, 0x87, 0xba, 0x6d, - 0x92, 0x75, 0x5b, 0xbf, 0xc0, 0x10, 0xf9, 0x75, 0xc4, 0x8f, 0xd5, 0x3c, - 0x02, 0x47, 0x3b, 0xe1, 0xdb, 0xac, 0x52, 0xb7, 0x90, 0xfc, 0xbd, 0xfc, - 0x13, 0xb2, 0xb6, 0xf0, 0x93, 0x42, 0x05, 0x42, 0xa0, 0x4f, 0xfd, 0xc5, - 0x1b, 0x10, 0xd4, 0x42, 0x89, 0x12, 0xf0, 0x58, 0xa6, 0x5b, 0x4b, 0xdc, - 0x48, 0x6a, 0x0b, 0x50, 0xa6, 0xaf, 0xcb, 0x41, 0x41, 0x2a, 0x35, 0x1b, - 0xf1, 0x73, 0x1b, 0x0f, 0x05, 0x85, 0x65, 0x38, 0x7e, 0x63, 0x44, 0x05, - 0xb0, 0xe2, 0x34, 0x12, 0xd3, 0x74, 0x12, 0x9d, 0xb1, 0x03, 0x3a, 0x68, - 0x7f, 0xd8, 0x35, 0x14, 0x21, 0x2f, 0x0a, 0xa9, 0xb8, 0xec, 0x26, 0x08, - 0x07, 0x65, 0x7d, 0x50, 0x36, 0x2a, 0xcc, 0x70, 0x72, 0x7a, 0xb1, 0x0f, - 0x48, 0xab, 0x97, 0x23, 0x0b, 0x99, 0xa8, 0x30, 0x2d, 0xad, 0xc5, 0xdc, - 0xec, 0xc1, 0xce, 0xec, 0x5a, 0x9a, 0xdb, 0x83, 0xe1, 0x86, 0x23, 0x44, - 0x50, 0xb5, 0x7d, 0x71, 0x9f, 0xda, 0xa8, 0x74, 0xa9, 0xbb, 0xc9, 0x32, - 0xb3, 0x49, 0xcd, 0x57, 0xec, 0x0d, 0xe3, 0x3d, 0x64, 0x24, 0x44, 0xd7, - 0xba, 0xb1, 0xd9, 0xfc, 0xeb, 0x8e, 0xb7, 0x92, 0xe3, 0xd7, 0xe5, 0xc6, - 0x7b, 0xb2, 0x20, 0x86, 0xf4, 0xc4, 0xe7, 0xa7, 0x00, 0xe0, 0xc7, 0xb6, - 0xad, 0xae, 0x83, 0x29, 0xde, 0x95, 0x46, 0xa4, 0x6a, 0x79, 0xc4, 0x00, - 0x55, 0x24, 0xb9, 0x2d, 0x00, 0x3b, 0x02, 0xd3, 0xd6, 0x05, 0xbd, 0xd8, - 0x85, 0x1d, 0x14, 0x7f, 0x88, 0xee, 0x02, 0x19, 0x79, 0x3b, 0xe6, 0x98, - 0xaf, 0x4b, 0x74, 0xad, 0x18, 0x2b, 0xc0, 0x8b, 0xa2, 0x24, 0x0b, 0x71, - 0xcb, 0x8c, 0x6d, 0xdd, 0x4c, 0xe6, 0xb4, 0x12, 0x02, 0x29, 0x1c, 0x49, - 0x4a, 0xa7, 0xf0, 0x92, 0x27, 0x57, 0x3c, 0x85, 0x02, 0xe2, 0x76, 0x2e, - 0x7c, 0xf0, 0x64, 0xa4, 0x95, 0xc0, 0x76, 0x0d, 0x2f, 0x78, 0x2f, 0xce, - 0x60, 0xb6, 0x7b, 0xb4, 0xa2, 0x28, 0x50, 0xa8, 0x3c, 0x60, 0x33, 0x89, - 0x7b, 0x89, 0xc2, 0x5b, 0x09, 0x44, 0x1e, 0xab, 0x80, 0xa2, 0xe7, 0xb2, - 0x34, 0xa3, 0x50, 0x36, 0x4e, 0xef, 0x61, 0xd2, 0xed, 0xe6, 0x31, 0xaa, - 0xc2, 0x88, 0x5d, 0x07, 0x3a, 0x38, 0x12, 0x04, 0xab, 0x23, 0xfc, 0xef, - 0x12, 0x34, 0xb7, 0x17, 0x32, 0xb3, 0x16, 0x2d, 0x4a, 0x68, 0xf2, 0xf1, - 0x4d, 0x39, 0xaf, 0x10, 0x39, 0x4f, 0x7b, 0x0c, 0x59, 0xe8, 0x48, 0xa7, - 0x4f, 0x8c, 0xca, 0xc9, 0x9d, 0x54, 0x39, 0xa7, 0xb4, 0x50, 0x61, 0x5b, - 0x84, 0xff, 0x6e, 0xb9, 0x5d, 0x01, 0xec, 0x6a, 0xf1, 0x6e, 0xad, 0x9c, - 0x2a, 0xb5, 0xd3, 0xa5, 0x76, 0x7a, 0x84, 0x3b, 0x3d, 0xc2, 0xc5, 0x16, - 0xb9, 0x9c, 0xe1, 0x4a, 0xe2, 0x7c, 0x89, 0xec, 0x70, 0xbb, 0x87, 0x3c, - 0xb1, 0x3d, 0x04, 0x03, 0x86, 0x89, 0x9c, 0x85, 0xf9, 0xd4, 0x78, 0x0e, - 0x38, 0x5c, 0xbc, 0x7b, 0x6e, 0xd4, 0xd2, 0x08, 0xee, 0xb1, 0x7a, 0x2a, - 0x9d, 0x36, 0x4f, 0xe9, 0x81, 0x5b, 0x20, 0xc1, 0xd0, 0x80, 0x13, 0x44, - 0x43, 0x2d, 0xb8, 0x9f, 0xa1, 0x8f, 0x97, 0xd4, 0xd2, 0x88, 0x4f, 0x87, - 0x19, 0xaf, 0xa6, 0x96, 0xf2, 0xe7, 0x4f, 0xec, 0x5a, 0xd7, 0x8b, 0xf3, - 0xbb, 0x52, 0x79, 0xdb, 0x6e, 0xed, 0x50, 0x15, 0xdc, 0x35, 0xd5, 0xae, - 0xe0, 0xad, 0x19, 0x64, 0xa9, 0x43, 0x92, 0x15, 0x0f, 0x7b, 0x66, 0xa1, - 0x04, 0x71, 0xc0, 0xbd, 0xe6, 0xa5, 0xc5, 0xaa, 0xc9, 0xa2, 0x9a, 0xa1, - 0x9b, 0x2a, 0x80, 0xa3, 0xf3, 0x7d, 0x46, 0x45, 0x09, 0xe2, 0xec, 0xa1, - 0x9a, 0xd9, 0xce, 0x84, 0xfd, 0x7d, 0x63, 0xf0, 0xfb, 0x20, 0x63, 0x93, - 0x89, 0xd2, 0x59, 0x2f, 0x75, 0xe9, 0x76, 0x67, 0x42, 0xf0, 0x3e, 0x8d, - 0x63, 0x55, 0x60, 0x3f, 0x98, 0x5e, 0xc5, 0x9a, 0x82, 0x09, 0xe4, 0x92, - 0x39, 0xe2, 0x64, 0x12, 0x9c, 0x70, 0x0c, 0xf8, 0x78, 0x6a, 0x40, 0xc5, - 0x09, 0x19, 0xcb, 0xe4, 0x80, 0xc2, 0xb4, 0x79, 0x25, 0x1b, 0x1d, 0xb9, - 0xe2, 0xee, 0x5a, 0x0f, 0x57, 0x2a, 0x9d, 0xbf, 0xa0, 0xdd, 0x30, 0xcc, - 0xd8, 0xd5, 0xaf, 0x83, 0x77, 0xcc, 0xab, 0x97, 0x46, 0xeb, 0xa0, 0x62, - 0x1e, 0xba, 0x19, 0x11, 0x84, 0x07, 0x77, 0xe2, 0xb4, 0xf4, 0x61, 0xe5, - 0x6a, 0x66, 0xb0, 0xd5, 0x9a, 0x79, 0xc8, 0x38, 0x74, 0x63, 0x35, 0x0a, - 0x7e, 0x7e, 0x50, 0xb1, 0x05, 0xc5, 0x83, 0xaf, 0xc0, 0xe6, 0x8e, 0xb0, - 0x76, 0x7e, 0x82, 0xa6, 0xeb, 0x4e, 0x74, 0x1e, 0x89, 0x90, 0x0c, 0xad, - 0xb2, 0xff, 0x9f, 0x9d, 0x9f, 0xfe, 0xd1, 0x2a, 0x87, 0x7d, 0x92, 0x66, - 0x86, 0x20, 0xb5, 0x86, 0x62, 0xf2, 0x0f, 0xab, 0x4f, 0xdf, 0xa9, 0xd3, - 0x4e, 0xcc, 0x3a, 0xdb, 0x3f, 0x1f, 0x5c, 0x3b, 0x2b, 0x1e, 0x6d, 0x3b, - 0x8f, 0x43, 0x28, 0x28, 0x08, 0x10, 0x7d, 0x7d, 0xcd, 0x37, 0x97, 0x6b, - 0x3e, 0xba, 0x5c, 0xf9, 0xd8, 0x72, 0x85, 0x22, 0x25, 0xec, 0x9d, 0xd6, - 0xdc, 0x89, 0x00, 0xa9, 0x13, 0xaf, 0xc9, 0x26, 0x12, 0xec, 0x88, 0x78, - 0x5d, 0xe7, 0x92, 0xdb, 0x34, 0xd3, 0x11, 0x95, 0xdb, 0xfb, 0x60, 0xda, - 0x82, 0x7a, 0xe8, 0x65, 0x8f, 0xc8, 0x68, 0xba, 0x84, 0x38, 0xac, 0xeb, - 0xbe, 0xfc, 0x29, 0x9f, 0xc4, 0xd2, 0x11, 0x0e, 0xdd, 0x66, 0x8a, 0x7a, - 0x08, 0x22, 0x2a, 0xfc, 0x09, 0x6d, 0xf8, 0x44, 0x9c, 0x6b, 0x83, 0xfd, - 0xb1, 0x55, 0xc5, 0x53, 0x2f, 0xfb, 0xc1, 0xcf, 0x14, 0x11, 0x81, 0x8f, - 0x5e, 0xf9, 0x0f, 0xc8, 0xcc, 0x3c, 0xcd, 0xe7, 0x0e, 0xa4, 0x05, 0x08, - 0xa0, 0x8a, 0x99, 0xe8, 0x18, 0x0c, 0x39, 0x1b, 0xac, 0xdc, 0x0a, 0xd5, - 0x98, 0x96, 0xdb, 0xe1, 0xe0, 0x89, 0x47, 0x13, 0x8f, 0x98, 0x3f, 0x80, - 0x7e, 0x63, 0x83, 0x1a, 0xc8, 0x91, 0xbe, 0x1f, 0xcc, 0x1a, 0x40, 0x9f, - 0x66, 0xa9, 0x5b, 0x16, 0x82, 0xce, 0xdb, 0x6c, 0x17, 0x62, 0x86, 0x58, - 0xf3, 0xa0, 0x04, 0x48, 0xf9, 0xc9, 0x5d, 0x34, 0xd0, 0x3b, 0x0c, 0x56, - 0xfe, 0x28, 0xb9, 0x3e, 0x6b, 0xbe, 0xbc, 0xab, 0x28, 0x1c, 0xdc, 0x99, - 0x03, 0xef, 0x2d, 0xd6, 0xdc, 0x5b, 0x04, 0x8a, 0x3e, 0xc9, 0xbd, 0x45, - 0x35, 0x26, 0x4f, 0xcc, 0xeb, 0xf8, 0x9d, 0x11, 0x7d, 0xcb, 0xdf, 0xb7, - 0xbd, 0x7d, 0x87, 0xe3, 0x5c, 0xf5, 0x05, 0x7c, 0xda, 0x75, 0xac, 0xa2, - 0xd6, 0x10, 0x10, 0x9b, 0x56, 0xf7, 0x49, 0x41, 0x04, 0x62, 0x20, 0x80, - 0x8c, 0x7c, 0x89, 0x91, 0x79, 0xd5, 0x90, 0x91, 0x37, 0x57, 0x6b, 0x5e, - 0x5c, 0xad, 0xa9, 0x27, 0x12, 0xd0, 0x41, 0x65, 0x40, 0xb9, 0x6a, 0xa8, - 0x78, 0x71, 0x89, 0x2d, 0x1c, 0xcb, 0xb4, 0x06, 0x5c, 0xad, 0x4e, 0x11, - 0x48, 0xd7, 0x18, 0x6b, 0x5c, 0x3b, 0xe2, 0xd0, 0xda, 0x3d, 0x8d, 0x4c, - 0x3c, 0x30, 0x18, 0x95, 0xf4, 0x23, 0x03, 0x31, 0x69, 0xd9, 0xac, 0xc6, - 0xad, 0x8b, 0x74, 0x8b, 0x2b, 0x19, 0x22, 0x15, 0x1e, 0xd6, 0x10, 0x1a, - 0xda, 0x80, 0x9b, 0xaf, 0xc3, 0x39, 0xda, 0xb4, 0xce, 0x0d, 0x74, 0x2a, - 0x96, 0x4e, 0x34, 0xad, 0xc8, 0x21, 0x3f, 0xd8, 0x75, 0x1d, 0xa7, 0x2e, - 0x03, 0xf5, 0xfe, 0x8b, 0xec, 0xa9, 0xd6, 0xc2, 0x46, 0x4d, 0x26, 0x63, - 0x37, 0x08, 0x8d, 0xbd, 0x4c, 0xc1, 0x4a, 0x45, 0xfe, 0xf7, 0x3d, 0xb4, - 0x86, 0x06, 0xa2, 0x79, 0x70, 0x31, 0xb0, 0x5a, 0x76, 0xee, 0xbe, 0x4e, - 0xd0, 0xd8, 0xc8, 0xbe, 0x47, 0xe8, 0xa5, 0xee, 0x1a, 0x47, 0x9a, 0x51, - 0x23, 0x44, 0x51, 0x27, 0x80, 0xef, 0x30, 0xe3, 0x77, 0x18, 0x78, 0x99, - 0x11, 0x48, 0x8e, 0xf3, 0x46, 0x9c, 0x30, 0x26, 0x47, 0x20, 0x7a, 0x10, - 0xfb, 0x74, 0xa0, 0xc8, 0x45, 0x80, 0x2c, 0x72, 0x50, 0xa5, 0xc3, 0x0d, - 0x72, 0xf7, 0x04, 0xc4, 0xee, 0xa9, 0xf7, 0xd5, 0x6b, 0x3b, 0x75, 0x5c, - 0x71, 0x28, 0xed, 0x6d, 0xb8, 0x88, 0x88, 0xd4, 0x9a, 0x5c, 0xba, 0xeb, - 0xbe, 0x75, 0x3a, 0x37, 0xec, 0x7a, 0xd6, 0x32, 0x7a, 0xd8, 0x2c, 0xd2, - 0xa5, 0x5f, 0x91, 0x0f, 0x61, 0x56, 0xc8, 0x0c, 0x88, 0x58, 0x2a, 0x78, - 0x7b, 0xe0, 0x28, 0x96, 0xb7, 0x2e, 0xc8, 0x7a, 0x2f, 0x3a, 0x24, 0x26, - 0x88, 0xfc, 0x03, 0x35, 0xf9, 0x2c, 0x20, 0x23, 0xc6, 0xc6, 0x8f, 0xb9, - 0x4a, 0xba, 0xad, 0x00, 0x3d, 0xc5, 0x91, 0x4e, 0x35, 0x26, 0x07, 0x5c, - 0x16, 0xbb, 0x59, 0xd2, 0xcd, 0xe2, 0x04, 0x78, 0xb1, 0xbe, 0x72, 0x79, - 0x8e, 0x79, 0x9c, 0x2b, 0x05, 0x8d, 0xd3, 0x25, 0xb4, 0x4d, 0x09, 0xd6, - 0x61, 0xde, 0x69, 0x69, 0x4f, 0x8c, 0x03, 0x7b, 0xc0, 0x2f, 0x6a, 0x5b, - 0x25, 0x35, 0x93, 0x0b, 0xbf, 0x75, 0x39, 0x29, 0x2a, 0x43, 0x41, 0x9b, - 0x13, 0x7b, 0x33, 0xd4, 0xab, 0xb0, 0x35, 0x60, 0xd1, 0xcc, 0x24, 0x6f, - 0x87, 0x93, 0xbc, 0xa9, 0xe0, 0xcb, 0xa6, 0x19, 0xaf, 0xf8, 0xb4, 0x1f, - 0x68, 0x4f, 0x41, 0x14, 0x49, 0x31, 0xb2, 0x83, 0x86, 0xfa, 0x71, 0x49, - 0x2f, 0xee, 0x6e, 0x25, 0xeb, 0x56, 0x8b, 0xf2, 0x95, 0xa7, 0x16, 0x90, - 0x66, 0x94, 0xb5, 0x74, 0xea, 0xcb, 0x79, 0x34, 0x1b, 0xf9, 0xdf, 0x2e, - 0x6f, 0xa6, 0xd9, 0xea, 0x28, 0x89, 0xf4, 0x11, 0xac, 0x20, 0xe1, 0x95, - 0xfb, 0x85, 0x55, 0xdb, 0x85, 0x6a, 0xea, 0x26, 0x41, 0x28, 0x2d, 0xdf, - 0x34, 0x9f, 0x2a, 0x88, 0xad, 0xdd, 0xfe, 0x26, 0xb6, 0x5b, 0xde, 0x00, - 0xaf, 0x58, 0x47, 0xda, 0xc1, 0xd2, 0x82, 0xf2, 0x76, 0x6d, 0x4d, 0x01, - 0xdb, 0x84, 0xf4, 0x92, 0xdd, 0x37, 0xa0, 0xbe, 0x9e, 0x37, 0x06, 0x73, - 0xde, 0x58, 0xd2, 0x51, 0x5d, 0xdb, 0x9b, 0x96, 0xbc, 0xb8, 0x5f, 0xcf, - 0x39, 0xc7, 0xdb, 0x53, 0x87, 0xe3, 0x04, 0xbb, 0xac, 0x14, 0xee, 0x19, - 0xc7, 0xe4, 0xeb, 0x29, 0x56, 0xbc, 0xd5, 0xe2, 0xdb, 0x00, 0x18, 0x1d, - 0x74, 0x59, 0xdc, 0xc3, 0x64, 0x7d, 0xfe, 0x77, 0x9a, 0x69, 0x4a, 0x08, - 0x21, 0x06, 0x7c, 0x87, 0x19, 0xbb, 0x7e, 0x98, 0x93, 0x1d, 0xf9, 0x9c, - 0x34, 0x20, 0x1d, 0xf1, 0xba, 0x1b, 0x20, 0xa2, 0x05, 0xd0, 0x98, 0x1e, - 0x7a, 0xd2, 0xa3, 0xa2, 0x43, 0x47, 0x3a, 0x13, 0x11, 0xf0, 0x28, 0x03, - 0x43, 0xe6, 0x5e, 0x26, 0xb4, 0xa4, 0xdb, 0x8b, 0x46, 0x30, 0x21, 0x45, - 0x16, 0x23, 0x18, 0x74, 0x8f, 0x7f, 0xeb, 0x63, 0x1e, 0xf3, 0x05, 0xd4, - 0xc7, 0x59, 0xa1, 0x71, 0x06, 0xad, 0x26, 0x85, 0x03, 0x85, 0x26, 0x6c, - 0x9a, 0x5b, 0x88, 0x44, 0x99, 0x1a, 0xe6, 0xe8, 0x0b, 0x6a, 0xe8, 0x3f, - 0x0d, 0x7f, 0x7d, 0x63, 0x49, 0x12, 0x2a, 0x1b, 0xe3, 0x36, 0x2b, 0x2d, - 0x81, 0x98, 0x96, 0x31, 0x0e, 0xaf, 0x61, 0x52, 0x5b, 0x56, 0xe2, 0xe6, - 0x4b, 0x32, 0x8c, 0xa0, 0x2b, 0xc7, 0x39, 0x1d, 0x5b, 0x4e, 0x47, 0xe5, - 0x34, 0xbf, 0xb5, 0x4f, 0xf1, 0xa5, 0x2e, 0x9e, 0x6f, 0x21, 0x66, 0xf4, - 0xb8, 0xf0, 0x38, 0xf3, 0xb8, 0x78, 0x05, 0x7e, 0xa4, 0x84, 0x4f, 0xa0, - 0x3b, 0x8d, 0xf0, 0xc2, 0xc6, 0x1a, 0x26, 0x82, 0x3a, 0x7c, 0xc0, 0x5b, - 0x01, 0x8f, 0x1e, 0x02, 0xf0, 0xb6, 0xb8, 0xc2, 0xf8, 0x1d, 0x23, 0x00, - 0x49, 0x49, 0x0e, 0x14, 0xdd, 0xe3, 0xb0, 0x52, 0x64, 0xa0, 0xad, 0x43, - 0x0a, 0x70, 0xc2, 0x53, 0x06, 0xf2, 0x34, 0x82, 0x78, 0xcc, 0x1c, 0x80, - 0x1b, 0xbe, 0x4c, 0xa6, 0x72, 0x26, 0xac, 0x24, 0xfd, 0x7e, 0x3b, 0xb2, - 0x49, 0x59, 0x9b, 0x32, 0x6b, 0xc1, 0xc4, 0x50, 0x8d, 0x9f, 0xb8, 0x17, - 0x00, 0x00, 0x13, 0x10, 0x90, 0x9e, 0x90, 0x11, 0x1c, 0x83, 0x50, 0x4e, - 0x4f, 0x95, 0x5a, 0xcd, 0x15, 0x76, 0x5c, 0xac, 0x79, 0x1e, 0xf0, 0x0e, - 0xd5, 0x11, 0x7f, 0x1a, 0x59, 0x74, 0xb8, 0x5b, 0xf1, 0xc2, 0x64, 0x2d, - 0x7d, 0x30, 0xcb, 0x62, 0xf0, 0xe7, 0xc2, 0xd4, 0xad, 0xd4, 0x63, 0x06, - 0x54, 0xc7, 0x5a, 0x9f, 0x43, 0x89, 0xca, 0xb7, 0x3a, 0xa2, 0x37, 0xe8, - 0x9d, 0x78, 0xd2, 0x22, 0x6f, 0x11, 0x08, 0x55, 0x74, 0xdb, 0x8d, 0x15, - 0xbc, 0x7d, 0xc7, 0x6f, 0xba, 0xc8, 0xef, 0x1b, 0xa3, 0xd5, 0x41, 0x08, - 0x01, 0xeb, 0x73, 0x63, 0xcd, 0xed, 0x63, 0x2b, 0xd2, 0xc3, 0x19, 0x3b, - 0x54, 0xc3, 0x47, 0x36, 0x8e, 0x83, 0xe1, 0x78, 0x40, 0x0a, 0xa4, 0x20, - 0x0f, 0x33, 0xff, 0x05, 0x7c, 0xd3, 0xdc, 0xe3, 0x78, 0x3c, 0x50, 0x0e, - 0xf9, 0x49, 0xc9, 0xcd, 0x8f, 0xdd, 0x28, 0x76, 0x1d, 0xe0, 0x1d, 0xa9, - 0x0a, 0x2b, 0xe0, 0x9e, 0x0d, 0x80, 0x03, 0x10, 0xb6, 0x7f, 0xb8, 0x76, - 0x93, 0xa7, 0x53, 0x09, 0x3b, 0x5b, 0xca, 0xce, 0x21, 0xe3, 0x3b, 0x25, - 0xee, 0x09, 0xb0, 0xe5, 0xee, 0x74, 0xb3, 0x3d, 0xe7, 0x6d, 0x88, 0xa0, - 0xa1, 0xf1, 0x38, 0xcc, 0xad, 0x4c, 0x6e, 0x7d, 0x2f, 0xbb, 0x7f, 0x65, - 0x29, 0x48, 0xec, 0x64, 0x2d, 0x96, 0x3b, 0x0f, 0xc7, 0x0e, 0xe9, 0x22, - 0x16, 0xb0, 0xd5, 0x3b, 0x8c, 0x29, 0x5d, 0x4f, 0xba, 0xba, 0x23, 0xb4, - 0x87, 0xc9, 0x5c, 0x89, 0xc4, 0x4a, 0x7f, 0x60, 0x06, 0x30, 0x7b, 0x95, - 0x73, 0x58, 0x6c, 0xd3, 0x91, 0x72, 0x9b, 0x8e, 0x14, 0xdc, 0x04, 0xa4, - 0xab, 0xf5, 0x83, 0x42, 0x9c, 0x8e, 0x81, 0x47, 0xb2, 0x07, 0x94, 0xf1, - 0x1c, 0x46, 0x65, 0x7d, 0x3f, 0x88, 0x33, 0xf1, 0xde, 0x65, 0x1e, 0x29, - 0xdb, 0xa7, 0xa2, 0x29, 0xed, 0xa6, 0xb4, 0x5b, 0xf9, 0x1b, 0x5b, 0x75, - 0x82, 0x74, 0xb4, 0x7a, 0x9b, 0x50, 0x2b, 0xff, 0x12, 0x49, 0x9c, 0x9a, - 0x79, 0xd0, 0xbe, 0xc9, 0x53, 0xee, 0xe4, 0x5f, 0x1d, 0x21, 0x08, 0x83, - 0x4e, 0x33, 0x2b, 0xb3, 0xc3, 0x9a, 0x67, 0xc6, 0xb5, 0xdc, 0x5c, 0x74, - 0x4b, 0xb9, 0x69, 0xa9, 0x72, 0xf4, 0xbb, 0xc7, 0xe3, 0x53, 0x7e, 0x0e, - 0xc8, 0xa7, 0x1e, 0xfd, 0x00, 0xaf, 0x83, 0x1d, 0xad, 0x38, 0xb3, 0x57, - 0x22, 0x96, 0x26, 0x02, 0x92, 0x84, 0x05, 0xe5, 0x81, 0xda, 0x15, 0x73, - 0x5c, 0xa3, 0xcd, 0x0e, 0x34, 0x88, 0x3c, 0x88, 0x09, 0x1b, 0x6e, 0xfc, - 0x8f, 0x4e, 0x60, 0x4f, 0xe0, 0xb7, 0x61, 0x9c, 0x53, 0x2c, 0x80, 0xab, - 0xf3, 0xb7, 0x3a, 0x7f, 0xeb, 0xcf, 0xb8, 0x07, 0xd8, 0x6e, 0x65, 0xf3, - 0x46, 0x8c, 0x54, 0x32, 0x48, 0x81, 0x3c, 0xa7, 0xb1, 0xfb, 0x3a, 0x14, - 0x19, 0x12, 0x81, 0x13, 0xf8, 0xf6, 0xdc, 0x72, 0x20, 0x49, 0x3a, 0xa9, - 0xba, 0xf5, 0xde, 0xdb, 0xb7, 0xae, 0xd8, 0x1a, 0xc5, 0x2c, 0x6e, 0x10, - 0x9b, 0x52, 0x07, 0xd8, 0x2d, 0x3f, 0x9b, 0xad, 0x87, 0xc4, 0xc1, 0x87, - 0x61, 0x41, 0xf8, 0xd0, 0x83, 0x44, 0x9e, 0xf8, 0x04, 0x29, 0xdd, 0x36, - 0x22, 0xba, 0x94, 0xa4, 0xf4, 0x1b, 0x52, 0xef, 0x95, 0xe5, 0xec, 0xf8, - 0x82, 0x0b, 0xce, 0x98, 0x1d, 0x67, 0x1b, 0xad, 0xaa, 0x5b, 0xc4, 0x9f, - 0x24, 0x98, 0x92, 0x45, 0xc1, 0x2d, 0x6e, 0xe6, 0x3e, 0x73, 0x04, 0x2a, - 0xb7, 0x69, 0x80, 0xdc, 0x08, 0xbc, 0x1e, 0x1d, 0x19, 0xd5, 0x92, 0x62, - 0xae, 0x2b, 0x71, 0x14, 0xb7, 0x49, 0x1c, 0x9c, 0x41, 0x5c, 0xe1, 0xbd, - 0x23, 0x18, 0xde, 0x0f, 0xed, 0xe0, 0x41, 0x67, 0x17, 0xc7, 0x78, 0xe5, - 0x08, 0x8e, 0x05, 0x71, 0x8e, 0x9d, 0x8d, 0x68, 0xdf, 0xf4, 0x8e, 0xb9, - 0x12, 0x9e, 0xa4, 0x42, 0xb1, 0x0c, 0x4d, 0x76, 0xe7, 0x51, 0x4a, 0x40, - 0x88, 0x64, 0xaa, 0xad, 0x8c, 0xbe, 0x2d, 0x06, 0x42, 0x02, 0xe2, 0x45, - 0xd7, 0xe1, 0xfb, 0xc4, 0x03, 0x9b, 0x7d, 0x2c, 0x00, 0x8f, 0x56, 0x70, - 0xc1, 0x46, 0x8a, 0xdf, 0xd0, 0xff, 0x1d, 0xc8, 0x9d, 0x6d, 0xa4, 0x70, - 0x1e, 0x3e, 0x06, 0x53, 0x6a, 0x1a, 0xbb, 0xdb, 0x91, 0x0b, 0xd1, 0x83, - 0x8b, 0xcf, 0xc3, 0x1c, 0x3f, 0x00, 0x25, 0x8c, 0xc3, 0x0e, 0xd6, 0xec, - 0xd9, 0xf1, 0x36, 0x76, 0xe4, 0x50, 0x1d, 0x38, 0x9d, 0x8c, 0x87, 0x5d, - 0x8c, 0x39, 0xb7, 0x8f, 0x7a, 0x43, 0x4a, 0xa0, 0x6a, 0x00, 0x4e, 0x07, - 0x1e, 0xee, 0xc6, 0x6d, 0xed, 0x38, 0x03, 0x2b, 0xb9, 0x39, 0xc9, 0xdb, - 0xa6, 0x54, 0x6d, 0x9b, 0x0f, 0xc4, 0x85, 0x55, 0x54, 0xc9, 0x31, 0x75, - 0x60, 0x9f, 0xad, 0x96, 0x5f, 0x5c, 0xde, 0x25, 0xcb, 0x9b, 0xac, 0xc6, - 0x51, 0x24, 0x84, 0x0a, 0x0c, 0x44, 0x14, 0x6f, 0x5e, 0xb7, 0x1d, 0x79, - 0x6d, 0x7f, 0x14, 0x56, 0x44, 0x11, 0xdb, 0x04, 0x01, 0x83, 0x0b, 0xb6, - 0x89, 0xda, 0xce, 0x58, 0xff, 0xd5, 0x7c, 0x8e, 0xad, 0x75, 0xf0, 0x2e, - 0x2c, 0x8c, 0xf1, 0x08, 0x77, 0x93, 0xe4, 0x08, 0x05, 0x6a, 0xa3, 0x63, - 0x6d, 0xac, 0x7c, 0x7d, 0x4f, 0xf4, 0x26, 0x38, 0x18, 0xa6, 0x6b, 0x39, - 0x40, 0x83, 0xde, 0xc9, 0x1f, 0x9f, 0xb7, 0x56, 0x4d, 0x1e, 0x66, 0x45, - 0xe5, 0x7e, 0x19, 0x68, 0xe9, 0xc5, 0x59, 0x59, 0x86, 0x86, 0xee, 0x34, - 0x1e, 0x7a, 0x4c, 0x09, 0xec, 0xbc, 0xfb, 0x08, 0x07, 0x28, 0x92, 0xb3, - 0x28, 0xeb, 0x8b, 0x73, 0xbe, 0x88, 0xfb, 0xe7, 0x88, 0x9d, 0x69, 0xdc, - 0x8d, 0xd1, 0xab, 0x6f, 0xf5, 0x81, 0xe8, 0x20, 0x98, 0x6c, 0xf4, 0xd5, - 0x55, 0x5a, 0xb6, 0xe1, 0xcd, 0xaf, 0xf1, 0x98, 0x48, 0x48, 0x66, 0x16, - 0xfc, 0x36, 0x5f, 0x9d, 0x36, 0xad, 0xa1, 0x09, 0x98, 0x84, 0x6d, 0xce, - 0x50, 0xe7, 0xe6, 0x43, 0x07, 0x46, 0x80, 0x91, 0x30, 0xba, 0xd0, 0xeb, - 0xb4, 0x5a, 0x34, 0x07, 0x7f, 0xf3, 0xa2, 0x14, 0x04, 0xeb, 0x7e, 0xbb, - 0x68, 0x3e, 0x25, 0xa8, 0xcd, 0x93, 0x97, 0x11, 0xf9, 0xd4, 0x30, 0x80, - 0xe2, 0xdc, 0x28, 0x97, 0xe0, 0x08, 0x2d, 0xff, 0x36, 0xbd, 0x02, 0x0b, - 0x62, 0x3f, 0x84, 0xb2, 0xeb, 0x89, 0x50, 0xe7, 0x33, 0xc5, 0x1e, 0xb1, - 0xf9, 0x2e, 0x3b, 0x90, 0x83, 0xc9, 0xc2, 0xdc, 0x74, 0xfd, 0x1e, 0x80, - 0x9d, 0x61, 0xbb, 0x60, 0xd9, 0xee, 0xc1, 0x75, 0x53, 0x7b, 0xc1, 0x43, - 0x27, 0x36, 0x8c, 0xe0, 0x3e, 0xd3, 0xa1, 0x22, 0x5f, 0x7f, 0xb2, 0xbf, - 0x19, 0x8e, 0x8c, 0xec, 0x48, 0x3e, 0xb5, 0x20, 0xf2, 0x79, 0x69, 0x4f, - 0x39, 0x64, 0x96, 0xe1, 0x76, 0x39, 0x6f, 0x2a, 0xa7, 0x9f, 0xe7, 0x45, - 0x20, 0x13, 0xff, 0xe3, 0xc4, 0x7b, 0x0b, 0x26, 0xc4, 0xe2, 0xa8, 0xb0, - 0xfb, 0xfe, 0xa6, 0x39, 0xa7, 0xbb, 0xb9, 0xb9, 0x73, 0xe5, 0x06, 0x4c, - 0x2f, 0xc1, 0x1a, 0x76, 0x17, 0xa6, 0x77, 0xdf, 0x94, 0x13, 0xda, 0xa5, - 0x58, 0x58, 0x2b, 0x5a, 0xc7, 0x23, 0x61, 0xcd, 0x6c, 0xb9, 0x29, 0x3b, - 0x83, 0x5e, 0xb5, 0x56, 0x94, 0x4c, 0x25, 0xc4, 0x4e, 0x4e, 0x72, 0x61, - 0x10, 0x47, 0x74, 0xa3, 0xca, 0x33, 0x18, 0xdd, 0x09, 0xc2, 0x01, 0xb5, - 0x85, 0x05, 0xe8, 0x2a, 0x75, 0xb4, 0x0c, 0x01, 0x88, 0x01, 0x18, 0x14, - 0x5d, 0x45, 0x4e, 0xf1, 0xf8, 0xc8, 0x5a, 0x01, 0x63, 0xb8, 0xc3, 0x0e, - 0x15, 0x34, 0xf1, 0x3c, 0x66, 0x70, 0x07, 0xa8, 0x58, 0xd5, 0xee, 0x01, - 0x8c, 0x7a, 0xbb, 0xc0, 0x06, 0x74, 0x58, 0x85, 0x17, 0xd1, 0x53, 0x2a, - 0x24, 0x92, 0x78, 0x0b, 0x67, 0xac, 0x3e, 0x74, 0x38, 0x74, 0xe8, 0x70, - 0x40, 0x89, 0xd7, 0x5d, 0x66, 0xba, 0x5a, 0x55, 0x0e, 0xe3, 0xea, 0x52, - 0x18, 0xd7, 0x70, 0x5c, 0xae, 0x6c, 0x20, 0x10, 0x27, 0x92, 0xcb, 0x94, - 0xa0, 0x38, 0xe3, 0x42, 0x37, 0x56, 0x4e, 0xa6, 0x8d, 0x60, 0xb1, 0x97, - 0x39, 0xcd, 0x63, 0xb0, 0x7b, 0x0f, 0x72, 0x5b, 0x1b, 0xbe, 0xb6, 0xc2, - 0xec, 0xe2, 0x9c, 0x8d, 0xdd, 0x53, 0x92, 0x12, 0x00, 0x98, 0x8e, 0xd3, - 0x52, 0xec, 0x04, 0x33, 0xe9, 0x67, 0xdd, 0xc9, 0x65, 0x53, 0xa8, 0x7d, - 0x5d, 0x9d, 0x3f, 0x94, 0xc6, 0x30, 0xd4, 0xb7, 0xce, 0x45, 0x0f, 0xa8, - 0x35, 0x8a, 0xac, 0x53, 0xbf, 0x51, 0x98, 0x9c, 0x46, 0xc9, 0xac, 0x72, - 0x9c, 0xf7, 0x7c, 0xb8, 0x2a, 0xcc, 0x70, 0x4f, 0x69, 0xa9, 0x0e, 0xc4, - 0x10, 0xee, 0x8a, 0x87, 0x8a, 0x86, 0xc2, 0x8c, 0x10, 0x24, 0x72, 0x97, - 0x20, 0x4a, 0xd2, 0x8a, 0x82, 0x88, 0x14, 0x60, 0xf0, 0xdf, 0x1e, 0x52, - 0x05, 0x04, 0x10, 0x15, 0x77, 0xae, 0xc3, 0x97, 0x05, 0x1e, 0x82, 0x58, - 0xee, 0x8a, 0x24, 0x74, 0x47, 0x54, 0xc3, 0xeb, 0x99, 0x73, 0x73, 0x3a, - 0x36, 0xed, 0x4e, 0x02, 0x30, 0xbe, 0x2d, 0x76, 0x27, 0x67, 0x9c, 0xb8, - 0x1d, 0x6f, 0x4e, 0xc8, 0xef, 0x5c, 0xcf, 0xbf, 0x73, 0x32, 0x7e, 0xf3, - 0x2c, 0x22, 0x4c, 0x56, 0x89, 0x4f, 0x46, 0x2b, 0xe8, 0xd6, 0x91, 0x95, - 0x78, 0xbe, 0x59, 0x7b, 0xef, 0x29, 0xcd, 0x74, 0xba, 0xca, 0xdc, 0x1a, - 0x73, 0x1c, 0x35, 0xa8, 0x57, 0x83, 0x2f, 0x8a, 0xcf, 0x0b, 0x32, 0x74, - 0x5e, 0x21, 0x3f, 0x92, 0x62, 0x05, 0xf0, 0x0a, 0xc0, 0xd2, 0x23, 0x1b, - 0x46, 0xf5, 0xc6, 0xfb, 0x80, 0xe3, 0x22, 0x99, 0x4d, 0xa0, 0x10, 0x21, - 0x4d, 0xf5, 0x2f, 0x10, 0x9b, 0x6d, 0xb7, 0x72, 0xc7, 0x89, 0x79, 0x4f, - 0x34, 0x47, 0x65, 0x1e, 0x1d, 0xe6, 0xe9, 0x83, 0x80, 0x20, 0x04, 0xee, - 0x77, 0x3d, 0x8b, 0x06, 0xfe, 0xf7, 0xc2, 0xf3, 0x34, 0xe0, 0x59, 0x6c, - 0xf9, 0xed, 0x6b, 0x5d, 0xab, 0x04, 0xd0, 0xa5, 0x52, 0x45, 0x5f, 0x5f, - 0xd3, 0x69, 0x0f, 0x0f, 0x8a, 0x33, 0x1d, 0x7a, 0xc2, 0x5e, 0x79, 0xdc, - 0x1a, 0xe0, 0x18, 0x12, 0x30, 0xf9, 0xd3, 0x63, 0x80, 0x38, 0xfa, 0xdb, - 0x07, 0xa1, 0xf0, 0xa7, 0xd0, 0x4a, 0x1b, 0x28, 0xd6, 0xc1, 0xf2, 0xbc, - 0xe8, 0xf3, 0x72, 0xc3, 0x04, 0x2f, 0xfc, 0xc8, 0xe2, 0x4a, 0x4e, 0x9b, - 0x86, 0x19, 0x15, 0x1e, 0xb1, 0x73, 0xd9, 0x1e, 0xc4, 0x18, 0xbb, 0xe6, - 0x0a, 0x21, 0xdc, 0x83, 0xb2, 0xa6, 0x40, 0xe0, 0x62, 0x5c, 0x79, 0x5a, - 0x57, 0xbf, 0xa0, 0x27, 0x61, 0x95, 0xd5, 0x1d, 0x59, 0x94, 0xb3, 0xff, - 0xce, 0x8b, 0x4d, 0xc7, 0x50, 0x83, 0x77, 0x3d, 0xd4, 0x86, 0xf1, 0xe4, - 0xf5, 0x1f, 0x88, 0xda, 0xe3, 0x9c, 0xec, 0xc0, 0xe9, 0xea, 0xda, 0x64, - 0x9f, 0x80, 0xbc, 0x3d, 0xa1, 0x58, 0x38, 0x4b, 0xbb, 0xa5, 0xbd, 0xee, - 0x98, 0x9c, 0x41, 0x42, 0x05, 0x9c, 0xa1, 0x3a, 0x26, 0x9c, 0x51, 0x60, - 0x3f, 0x13, 0x38, 0xa7, 0xc7, 0x8e, 0x72, 0x6e, 0xb6, 0xf7, 0x31, 0xb4, - 0x04, 0x8a, 0x50, 0x68, 0x48, 0x11, 0xb9, 0x38, 0x40, 0x04, 0x93, 0x98, - 0x8f, 0x31, 0x3a, 0x0b, 0x05, 0x84, 0x26, 0xf3, 0xb8, 0xb8, 0x2a, 0xf4, - 0xae, 0x83, 0xc8, 0xa3, 0xf6, 0x79, 0xb5, 0xc0, 0x50, 0x20, 0x70, 0x6b, - 0x38, 0x55, 0x26, 0x98, 0x8c, 0x93, 0x3a, 0xe1, 0x03, 0x3a, 0x98, 0x73, - 0x93, 0x02, 0xe0, 0x8e, 0x90, 0xe7, 0x26, 0xbf, 0xb3, 0x12, 0x78, 0xe7, - 0xfb, 0xa0, 0xfd, 0xaf, 0xcb, 0xef, 0x77, 0x9c, 0x6c, 0x33, 0xb9, 0x45, - 0x5e, 0x29, 0x37, 0x49, 0x40, 0xbe, 0x21, 0xa6, 0x4a, 0x42, 0x7a, 0x40, - 0x94, 0x46, 0xdc, 0x2e, 0xc3, 0xcd, 0x68, 0x82, 0x52, 0x07, 0x55, 0x1d, - 0xd4, 0x5e, 0x04, 0x5f, 0x94, 0xe0, 0x36, 0x08, 0x4e, 0x65, 0xb7, 0xfb, - 0x79, 0xbd, 0x2c, 0x99, 0xda, 0xba, 0xcb, 0xbc, 0x79, 0x87, 0x91, 0x54, - 0x06, 0xc6, 0xeb, 0x24, 0xa0, 0x75, 0x77, 0x6e, 0x25, 0x97, 0xf3, 0xd6, - 0xa2, 0x84, 0x82, 0x57, 0x07, 0xbe, 0x65, 0xd7, 0x36, 0x56, 0x00, 0x60, - 0xf9, 0xb9, 0xf8, 0x61, 0x78, 0xb5, 0xc0, 0x18, 0x78, 0x38, 0x37, 0x03, - 0x65, 0xa8, 0x28, 0x02, 0x50, 0x2a, 0xe7, 0x1b, 0x78, 0x06, 0x38, 0x46, - 0x82, 0x28, 0xcb, 0x3d, 0x3f, 0xd4, 0xf6, 0xa8, 0x76, 0x62, 0xdc, 0x7f, - 0x59, 0x58, 0x82, 0x20, 0x3a, 0x57, 0x9d, 0xa3, 0xad, 0x39, 0xd9, 0x2c, - 0xf9, 0xb2, 0x12, 0x29, 0xeb, 0xb3, 0xe1, 0xd8, 0x44, 0x80, 0x4c, 0xc9, - 0x9f, 0x95, 0x98, 0xa0, 0xf6, 0x65, 0x12, 0x7c, 0x39, 0xcb, 0x78, 0x86, - 0xc0, 0x66, 0x1e, 0xb0, 0x05, 0x35, 0x8d, 0xd9, 0x24, 0x9a, 0x60, 0xd0, - 0x8a, 0x0b, 0xa4, 0xe1, 0x8e, 0x9f, 0x84, 0xc2, 0xaa, 0xc3, 0xf3, 0xbc, - 0xc8, 0x3b, 0x24, 0x7b, 0x2e, 0xf7, 0xec, 0xe4, 0xa2, 0x95, 0x94, 0x4a, - 0xe0, 0x56, 0x72, 0xcb, 0x60, 0xea, 0x2c, 0xdc, 0x09, 0xa8, 0xe8, 0x6d, - 0x5e, 0xc3, 0x07, 0xdd, 0x82, 0xa3, 0x8a, 0x7f, 0xe1, 0x36, 0xd6, 0x40, - 0x62, 0xe8, 0xc5, 0x9e, 0x52, 0x78, 0xa8, 0x88, 0xdd, 0xea, 0x7e, 0x65, - 0xf1, 0x6c, 0xa5, 0x5b, 0x96, 0xaf, 0x54, 0x75, 0x2c, 0x1a, 0x12, 0xb9, - 0xd4, 0x8b, 0x6e, 0x59, 0xf4, 0x5d, 0xc1, 0x97, 0xe5, 0xdf, 0x90, 0x3e, - 0xf8, 0xfa, 0x9b, 0xb6, 0x97, 0x6c, 0x57, 0x15, 0x8e, 0x2f, 0x75, 0xe0, - 0x4e, 0x50, 0x29, 0x89, 0x2c, 0xf1, 0x12, 0x02, 0xd0, 0x32, 0xb9, 0x75, - 0xdf, 0x7e, 0x36, 0x67, 0x10, 0x55, 0xc0, 0xcb, 0x6a, 0x92, 0x5b, 0xcb, - 0xc6, 0x0b, 0x8f, 0xda, 0x88, 0x72, 0x82, 0x8c, 0x43, 0x23, 0x37, 0x23, - 0x0b, 0x2f, 0x25, 0x6c, 0x8d, 0xb3, 0xd3, 0xa4, 0x10, 0xd4, 0xd2, 0xe3, - 0xd3, 0x71, 0x6d, 0x47, 0xcb, 0xf1, 0xf6, 0xae, 0xfb, 0xac, 0x5d, 0x41, - 0xed, 0x4e, 0x4e, 0xed, 0xf3, 0x2e, 0x36, 0xeb, 0xf7, 0x26, 0xce, 0x02, - 0x20, 0xbc, 0x0b, 0xc7, 0x38, 0xad, 0xf2, 0x84, 0xa0, 0x27, 0x57, 0x7a, - 0x32, 0xe6, 0x01, 0x9f, 0xb7, 0x96, 0xd0, 0x5e, 0xe2, 0x6a, 0x25, 0xcf, - 0xab, 0x3c, 0x03, 0xc8, 0xfd, 0x79, 0x75, 0x6e, 0x03, 0xd9, 0x76, 0x3a, - 0x36, 0xa7, 0x41, 0xf8, 0x6e, 0xc2, 0x03, 0xe3, 0xed, 0x5c, 0x06, 0x65, - 0xfb, 0xdc, 0x92, 0x77, 0x08, 0x54, 0x5e, 0xd0, 0x06, 0xd1, 0xf5, 0x8d, - 0x77, 0xf7, 0xa1, 0xc9, 0x75, 0xed, 0x08, 0x86, 0x70, 0x6f, 0xa2, 0xd5, - 0x41, 0x4c, 0x87, 0xe6, 0x6a, 0x40, 0xa5, 0x56, 0xd0, 0xee, 0x71, 0xd3, - 0xed, 0x0f, 0xc4, 0xf9, 0xe5, 0x50, 0x3e, 0x04, 0xed, 0xa8, 0x9f, 0x9a, - 0x3a, 0x52, 0x9f, 0x21, 0x0a, 0x61, 0xce, 0x76, 0x53, 0xe9, 0xd6, 0x51, - 0xee, 0x3a, 0xbb, 0x24, 0x52, 0xc2, 0x6a, 0x7b, 0x70, 0x17, 0xc4, 0x3d, - 0x04, 0x98, 0xa9, 0x4c, 0xac, 0x97, 0xdd, 0x9d, 0x20, 0xc4, 0xbe, 0xd6, - 0x49, 0x22, 0x07, 0x88, 0xfb, 0xd8, 0xe2, 0x1c, 0x77, 0xb7, 0x3b, 0x41, - 0x87, 0xc0, 0x53, 0x2f, 0x96, 0x5a, 0x50, 0xad, 0xaf, 0x58, 0xd6, 0x6b, - 0x45, 0x58, 0x4c, 0xf4, 0xaa, 0x88, 0xfe, 0xb2, 0xb2, 0xff, 0xb2, 0x69, - 0x2c, 0xbb, 0x7b, 0xb5, 0x58, 0x11, 0x53, 0x00, 0x89, 0xfb, 0x2d, 0x73, - 0xa6, 0x18, 0xd6, 0x50, 0xd7, 0xdb, 0x19, 0x6b, 0x1d, 0xcf, 0x5b, 0xd9, - 0x34, 0xc9, 0xae, 0x0d, 0xfb, 0x4b, 0xdd, 0x58, 0xa8, 0x84, 0x8d, 0x19, - 0xd1, 0x7c, 0xd9, 0x1e, 0x39, 0x79, 0x34, 0x8a, 0x1f, 0xeb, 0xea, 0x3b, - 0xe6, 0x19, 0x05, 0xd2, 0x69, 0xd8, 0x0f, 0x12, 0x52, 0xb0, 0x02, 0xad, - 0x10, 0x32, 0x7a, 0x38, 0x15, 0xa2, 0x94, 0x8e, 0x75, 0xec, 0xfd, 0xfc, - 0x77, 0x36, 0xd0, 0x9a, 0x29, 0x64, 0xb4, 0xa4, 0xa0, 0x18, 0x08, 0x31, - 0x0a, 0xa9, 0xb2, 0x01, 0x54, 0x58, 0x83, 0x5a, 0xe7, 0xb0, 0xc7, 0xa9, - 0xb6, 0x56, 0x3a, 0x68, 0x08, 0x39, 0xdc, 0xd5, 0x89, 0xed, 0x94, 0x44, - 0xcb, 0x4a, 0x40, 0xf2, 0x71, 0xdd, 0x22, 0xc7, 0xac, 0x00, 0xe1, 0x19, - 0x16, 0x04, 0x44, 0x6a, 0x53, 0x03, 0xf9, 0xc2, 0x34, 0xce, 0xbc, 0x03, - 0x8e, 0xcd, 0x36, 0x3b, 0xee, 0xd7, 0x65, 0x6f, 0xf6, 0x38, 0x88, 0x1c, - 0xd3, 0x83, 0xa9, 0x28, 0xac, 0xaf, 0x3a, 0x7b, 0x6a, 0x85, 0xf1, 0x85, - 0x39, 0x96, 0xf5, 0xf3, 0x35, 0x8a, 0x43, 0xba, 0xc2, 0x69, 0xf8, 0x3d, - 0x35, 0xf0, 0x10, 0xcb, 0x1e, 0xfa, 0x7d, 0xb6, 0x44, 0x0a, 0xbc, 0x04, - 0x57, 0x9b, 0x02, 0x29, 0xfb, 0x9e, 0x65, 0xf5, 0xb5, 0x5d, 0x6e, 0x6d, - 0x92, 0x49, 0x8a, 0x23, 0xe9, 0x57, 0xcd, 0xf2, 0x1f, 0xad, 0xd5, 0xbe, - 0xb6, 0xe2, 0x86, 0x51, 0xb7, 0xe2, 0x5e, 0x7b, 0xf5, 0xc2, 0x66, 0x41, - 0xed, 0x37, 0x99, 0x99, 0xe1, 0xc7, 0xc5, 0x2b, 0xc1, 0xc7, 0xd0, 0xb4, - 0x51, 0x35, 0x8a, 0xa9, 0xc6, 0x23, 0x00, 0xd5, 0x49, 0x30, 0x97, 0x67, - 0x07, 0x06, 0xa5, 0x68, 0x3b, 0x11, 0xb5, 0x1d, 0xe1, 0x6f, 0x5b, 0x0e, - 0x9a, 0x8f, 0xe9, 0x92, 0xa5, 0xf4, 0x98, 0x2e, 0x2e, 0xee, 0xc7, 0x94, - 0x6b, 0x52, 0xc8, 0xb0, 0xed, 0x21, 0x4b, 0x31, 0xa0, 0xbd, 0x95, 0xdc, - 0x30, 0x55, 0xbc, 0xef, 0x0e, 0x22, 0x9b, 0x65, 0xd7, 0x26, 0x1f, 0x75, - 0x8e, 0x6f, 0x93, 0x46, 0xdd, 0xe6, 0x2d, 0xe9, 0xd5, 0xc0, 0x8a, 0xcd, - 0x80, 0x3a, 0x29, 0x64, 0x1f, 0xa4, 0xbf, 0xaf, 0x1e, 0x42, 0x9e, 0x10, - 0x0b, 0xe3, 0xa2, 0x7d, 0x8e, 0xdb, 0xae, 0x89, 0xec, 0x59, 0xca, 0x37, - 0x1b, 0x09, 0x16, 0x49, 0x7f, 0xb2, 0x5a, 0x42, 0xe8, 0xad, 0x80, 0xdb, - 0x7e, 0x85, 0xcc, 0xe7, 0x13, 0xfa, 0x8a, 0x97, 0x86, 0x06, 0xc3, 0xe2, - 0xef, 0xf3, 0xe0, 0x29, 0x4b, 0x9b, 0x53, 0x81, 0x81, 0x81, 0x8e, 0xb7, - 0xc3, 0x89, 0x16, 0xa4, 0xe3, 0x71, 0xbe, 0x5a, 0x94, 0x51, 0x47, 0xdc, - 0x7b, 0x4a, 0xed, 0x6e, 0x9c, 0x25, 0x8a, 0x39, 0x60, 0x1b, 0x76, 0xeb, - 0xa8, 0x07, 0x79, 0xce, 0xb9, 0x55, 0x81, 0x9a, 0xa8, 0xb6, 0x96, 0x19, - 0xb1, 0x0a, 0x09, 0xc1, 0x5d, 0x81, 0xa7, 0xcb, 0x3c, 0xe7, 0x9a, 0x07, - 0x8c, 0x4c, 0x8f, 0xb3, 0x8d, 0x58, 0x1d, 0xdd, 0x1c, 0x2c, 0xad, 0x7d, - 0x06, 0xe3, 0x53, 0x87, 0xf7, 0x63, 0x6c, 0xd4, 0x38, 0x27, 0xec, 0x04, - 0x29, 0x76, 0x74, 0x46, 0xda, 0xd6, 0x14, 0xc6, 0x91, 0x8f, 0xb6, 0xdf, - 0xfd, 0x77, 0xe8, 0x3a, 0xc5, 0xbf, 0x6d, 0x78, 0x6d, 0xe2, 0x84, 0x13, - 0x33, 0xcc, 0x7f, 0xcf, 0x87, 0xc7, 0x6c, 0x40, 0x39, 0xc8, 0xe6, 0xd3, - 0x2f, 0xa2, 0x2a, 0x56, 0x69, 0xd4, 0x66, 0xae, 0xb0, 0xd0, 0xc8, 0x17, - 0xf7, 0xf5, 0x4a, 0x9c, 0x8b, 0x9a, 0x34, 0x70, 0xec, 0x95, 0x44, 0x2d, - 0xe9, 0xa6, 0x2e, 0xfd, 0xca, 0x94, 0xd4, 0xf6, 0x5e, 0x1e, 0x0e, 0x0a, - 0x58, 0x03, 0xe2, 0xe4, 0xd9, 0x73, 0xfb, 0xa0, 0xe4, 0x6b, 0x38, 0x9e, - 0x72, 0x66, 0xd9, 0x0e, 0x80, 0xb9, 0x40, 0xe4, 0x6a, 0xd9, 0xa5, 0x50, - 0x29, 0xdb, 0x8e, 0x69, 0x55, 0xf7, 0xdb, 0x9b, 0xd0, 0xe3, 0xb4, 0xe5, - 0x21, 0xc1, 0xa5, 0x15, 0xb7, 0x4e, 0x48, 0x31, 0x16, 0x30, 0xfd, 0xed, - 0x9c, 0xaf, 0xfa, 0x74, 0x7a, 0xb8, 0xb2, 0x88, 0x64, 0x23, 0xa6, 0xe8, - 0xf4, 0x63, 0xfe, 0xf3, 0x3a, 0xa3, 0xf1, 0xd0, 0x2d, 0x44, 0xfc, 0x5c, - 0xd4, 0x84, 0x25, 0xf7, 0x07, 0x20, 0xe6, 0x2b, 0x59, 0x76, 0x1b, 0x3b, - 0x10, 0x6a, 0x1e, 0xf3, 0xe0, 0x09, 0x2c, 0xd0, 0x62, 0x54, 0x6e, 0x9c, - 0xbd, 0x24, 0x98, 0xb8, 0x0d, 0x08, 0xbd, 0xa4, 0x62, 0x50, 0x38, 0xa1, - 0x1a, 0x1c, 0x82, 0x5b, 0xee, 0x0c, 0xc9, 0xfa, 0x77, 0x23, 0xcf, 0x2d, - 0x33, 0x5e, 0x5a, 0x25, 0xb6, 0x84, 0x63, 0x62, 0x33, 0xa1, 0xf5, 0x94, - 0xc2, 0x1a, 0x6f, 0x8d, 0xc7, 0x1a, 0xe4, 0xe4, 0x66, 0x36, 0x47, 0x2b, - 0x39, 0x95, 0xd0, 0x71, 0xc9, 0x3c, 0xe9, 0x74, 0x86, 0xad, 0x17, 0x1b, - 0x11, 0x9b, 0x6a, 0x74, 0x73, 0x99, 0x86, 0x6c, 0x07, 0x33, 0xf9, 0xf4, - 0x08, 0x29, 0xa2, 0x38, 0xb0, 0x64, 0x8f, 0x05, 0xda, 0x8a, 0xab, 0x22, - 0x09, 0xe6, 0x0e, 0x8f, 0x39, 0xe4, 0xf7, 0xdc, 0x33, 0xc8, 0x05, 0xe2, - 0x27, 0xe5, 0xbb, 0x89, 0x28, 0x06, 0xd6, 0xc8, 0x9b, 0x52, 0x13, 0x2b, - 0x1c, 0x12, 0x8d, 0x6d, 0xf9, 0xba, 0x94, 0xbb, 0xf8, 0xa1, 0x8c, 0x15, - 0x5a, 0xf1, 0xb2, 0x67, 0x69, 0x2a, 0xe7, 0x49, 0xc5, 0xe5, 0xb8, 0xd6, - 0x62, 0x14, 0x30, 0x0c, 0xf3, 0xd8, 0xac, 0x10, 0xa8, 0xae, 0x9a, 0xaf, - 0x93, 0x8f, 0x75, 0xca, 0x75, 0xbf, 0xa9, 0xe0, 0x0a, 0x4e, 0xdd, 0x34, - 0x3a, 0x95, 0xeb, 0x71, 0x32, 0xd2, 0xba, 0x1a, 0x63, 0x63, 0x08, 0xc0, - 0xe4, 0x97, 0xcc, 0x60, 0xf9, 0x5c, 0x69, 0x94, 0x49, 0x05, 0x5b, 0xd6, - 0x8b, 0x23, 0x58, 0x43, 0x1a, 0xbd, 0xb0, 0xf2, 0x5f, 0xda, 0x9a, 0xcb, - 0x0d, 0x3f, 0x1e, 0xfc, 0x64, 0xb0, 0xdb, 0xb5, 0xeb, 0x91, 0x8d, 0xba, - 0x9b, 0x3c, 0xec, 0x29, 0x77, 0xf7, 0x84, 0xf6, 0x10, 0xd8, 0x69, 0xb1, - 0x2c, 0x64, 0xc0, 0xce, 0xfa, 0x25, 0x11, 0x81, 0x01, 0xe5, 0xf1, 0xa5, - 0x19, 0x02, 0x82, 0x07, 0xd5, 0x1d, 0x52, 0x84, 0x71, 0x42, 0xb9, 0xd8, - 0x64, 0x40, 0x46, 0xe1, 0x94, 0xf8, 0xad, 0x2c, 0xe2, 0xbd, 0xc8, 0x70, - 0x38, 0x08, 0x88, 0x29, 0x93, 0x36, 0x0b, 0x90, 0x47, 0x9e, 0x27, 0x40, - 0x46, 0xb1, 0xeb, 0x0e, 0xef, 0x06, 0x32, 0x0f, 0x49, 0xdc, 0x4d, 0xb9, - 0xa4, 0xd6, 0xba, 0xd7, 0x58, 0x6e, 0x93, 0x3f, 0x80, 0x70, 0xb9, 0x25, - 0xe5, 0x30, 0x92, 0x94, 0xe3, 0x69, 0x3a, 0x75, 0x4e, 0xba, 0x62, 0x93, - 0x62, 0x67, 0xd3, 0xd1, 0x9c, 0xd4, 0x86, 0xff, 0x68, 0x29, 0x42, 0xef, - 0xc3, 0xd2, 0xf6, 0xf6, 0x49, 0xb6, 0xaf, 0x6d, 0x47, 0x08, 0xb2, 0x04, - 0xd7, 0x8a, 0xa9, 0x23, 0x4f, 0x1e, 0x3b, 0xe1, 0xc8, 0x20, 0x6a, 0x59, - 0xb4, 0x34, 0x8a, 0x50, 0xf4, 0xc7, 0xe6, 0xc3, 0xa0, 0xda, 0xae, 0xda, - 0xf8, 0x2d, 0xc2, 0xc1, 0x59, 0xc1, 0x24, 0xe0, 0xdb, 0x99, 0x77, 0x3a, - 0x46, 0x77, 0x98, 0x75, 0x8a, 0xa9, 0x4b, 0xd6, 0x78, 0x76, 0x67, 0xb5, - 0xd9, 0x20, 0xb3, 0xbf, 0x41, 0x56, 0x8c, 0x50, 0x71, 0x58, 0x65, 0x7a, - 0xb7, 0x52, 0xb0, 0xc8, 0x63, 0xc0, 0xad, 0x46, 0xa8, 0xe7, 0x65, 0x95, - 0xac, 0x4b, 0x70, 0x5c, 0x20, 0x39, 0x20, 0x93, 0x63, 0xd2, 0xf7, 0x6e, - 0xa1, 0x50, 0xc9, 0xaf, 0xa6, 0x24, 0x2c, 0xe8, 0x27, 0x56, 0xdc, 0x93, - 0xbf, 0xae, 0xe7, 0x91, 0x9f, 0x46, 0x8f, 0xe8, 0xeb, 0x56, 0x3e, 0xfc, - 0xf4, 0x12, 0x8f, 0x49, 0x8f, 0x87, 0xe7, 0x26, 0x08, 0x39, 0xc6, 0x2e, - 0xbe, 0xfb, 0x6a, 0xae, 0xaa, 0x20, 0x52, 0x90, 0x71, 0xa5, 0xb0, 0x15, - 0xf0, 0xc4, 0xbe, 0x7a, 0x9f, 0x5d, 0x33, 0x3a, 0xe7, 0x32, 0x79, 0x7d, - 0x6f, 0x97, 0xd9, 0xbb, 0x3a, 0x11, 0x72, 0x66, 0x22, 0xbf, 0xe5, 0xba, - 0xb8, 0xee, 0x58, 0xee, 0x5b, 0x77, 0xd0, 0x4c, 0x9a, 0x75, 0x0d, 0x56, - 0xca, 0x3a, 0x2c, 0x7c, 0xb1, 0x05, 0x82, 0x6f, 0x59, 0x1f, 0x08, 0x55, - 0x4c, 0x29, 0xfe, 0x38, 0xa0, 0xc3, 0xa9, 0x11, 0xaa, 0x56, 0xb7, 0x8b, - 0x4f, 0xee, 0xb7, 0xdc, 0xb5, 0x06, 0x6a, 0x91, 0x6e, 0x43, 0x07, 0x97, - 0x4c, 0x5b, 0x2d, 0xe1, 0xcb, 0x72, 0x17, 0x52, 0xd6, 0x71, 0x01, 0xd8, - 0x46, 0xc6, 0xa8, 0x03, 0x97, 0x26, 0x04, 0x18, 0x2f, 0x0e, 0xff, 0x88, - 0x2d, 0x84, 0x3e, 0x3c, 0xa1, 0xf0, 0xe6, 0xd6, 0x41, 0xb9, 0x02, 0xa1, - 0x11, 0xc4, 0x58, 0x5f, 0xc6, 0x4c, 0x29, 0x25, 0x19, 0x57, 0x50, 0xf2, - 0xdc, 0x77, 0x2b, 0xc7, 0xc9, 0x74, 0x59, 0xb3, 0x3f, 0x90, 0x57, 0xb3, - 0x29, 0xad, 0x38, 0xa1, 0x5d, 0xa4, 0x6e, 0xe9, 0x4a, 0xa4, 0x76, 0x5e, - 0xe0, 0xc9, 0xeb, 0xe4, 0x4e, 0x9f, 0x27, 0x08, 0x68, 0x7c, 0x54, 0xe6, - 0xa8, 0xcf, 0x31, 0x50, 0xaf, 0x0a, 0x0f, 0xa4, 0xe4, 0xba, 0x0a, 0xaa, - 0x64, 0x52, 0x7c, 0x2a, 0xe0, 0x7f, 0xbe, 0xd0, 0xb0, 0xc0, 0xcd, 0x40, - 0x5b, 0x7e, 0xdf, 0x5a, 0xba, 0x20, 0x0d, 0x33, 0x1d, 0xef, 0x6e, 0xec, - 0x4d, 0x7a, 0x18, 0xf0, 0xdd, 0x13, 0x39, 0xe0, 0x9f, 0x4c, 0xa1, 0x04, - 0x3f, 0x11, 0x39, 0x1a, 0x49, 0x78, 0x02, 0x5a, 0x32, 0x6d, 0x63, 0xf0, - 0x58, 0x05, 0x2c, 0x6e, 0xe0, 0xbb, 0xfb, 0x72, 0x1e, 0x66, 0x74, 0xcf, - 0xdb, 0x40, 0x3c, 0x73, 0xdf, 0x64, 0x2c, 0x8f, 0x6d, 0x1b, 0xf3, 0xb1, - 0x85, 0xc9, 0x97, 0x28, 0x82, 0x8a, 0x5b, 0x4f, 0x4d, 0x80, 0xa6, 0xdc, - 0x6a, 0x7c, 0x30, 0xfd, 0x57, 0x52, 0x0c, 0xa3, 0xc6, 0xee, 0xe6, 0xc2, - 0x6e, 0xf9, 0x24, 0x5f, 0xfe, 0x96, 0x6b, 0x7a, 0x30, 0xb3, 0x9c, 0xad, - 0x57, 0x37, 0x52, 0xa5, 0x46, 0xda, 0x61, 0x7c, 0xdc, 0xd8, 0x87, 0x85, - 0xbb, 0x99, 0xa0, 0x92, 0x11, 0xda, 0x7f, 0x5a, 0x98, 0xed, 0xe6, 0xb4, - 0x52, 0x67, 0x2e, 0x77, 0x43, 0xb8, 0xf3, 0x57, 0x2e, 0xef, 0xf7, 0xf7, - 0x52, 0xee, 0x1d, 0x54, 0x1c, 0x84, 0xcd, 0xfe, 0x25, 0xe7, 0xb5, 0x59, - 0x69, 0x34, 0xaf, 0x3b, 0x98, 0x5c, 0x21, 0x7f, 0xee, 0x6e, 0xfe, 0xda, - 0xdb, 0xe0, 0x6d, 0xe2, 0xe0, 0xa6, 0xd4, 0x1e, 0x2a, 0x02, 0x2f, 0xf9, - 0xf8, 0x0f, 0xd4, 0xca, 0xca, 0x03, 0x0b, 0x99, 0x1d, 0x6f, 0x5d, 0x14, - 0x5b, 0xb7, 0xb6, 0xea, 0xe4, 0x5a, 0x8b, 0x68, 0xd7, 0x4e, 0x20, 0x53, - 0x79, 0x1d, 0xc9, 0xb1, 0x8d, 0xb7, 0x60, 0x0e, 0x1b, 0xed, 0xef, 0xf0, - 0x3a, 0x42, 0x50, 0x4e, 0xea, 0x76, 0xe1, 0xa2, 0x53, 0xa7, 0x03, 0xaf, - 0xe5, 0xd2, 0x1e, 0x58, 0xf6, 0x6a, 0xf7, 0x78, 0x8e, 0xc7, 0x58, 0xc7, - 0x23, 0x73, 0xa2, 0x4f, 0x78, 0x9b, 0xcc, 0x1c, 0xe1, 0x7d, 0xa6, 0xfc, - 0x6d, 0x97, 0xdc, 0x21, 0x61, 0x21, 0xbb, 0x5b, 0xa1, 0x8a, 0xc8, 0x76, - 0x0d, 0x17, 0xe4, 0x6b, 0xc8, 0xe2, 0x36, 0x69, 0xaf, 0xeb, 0xf0, 0x47, - 0xad, 0x3d, 0x09, 0xbb, 0x1c, 0xbb, 0x91, 0x33, 0x29, 0x15, 0xa9, 0x74, - 0xc4, 0x06, 0xfa, 0xb2, 0xff, 0x31, 0xa7, 0xc6, 0x8a, 0xdb, 0x19, 0x00, - 0x78, 0x01, 0xa6, 0xdc, 0x33, 0x37, 0xca, 0xbe, 0x20, 0x52, 0xc1, 0xc3, - 0x45, 0x3c, 0xd2, 0xbc, 0x2c, 0xb9, 0xf7, 0x0e, 0x7a, 0x1a, 0x9c, 0x08, - 0x11, 0x39, 0x72, 0x37, 0x69, 0xde, 0xc0, 0x75, 0x51, 0x93, 0x91, 0x10, - 0x33, 0x8a, 0x3a, 0x8b, 0xa5, 0x07, 0x68, 0x66, 0x6d, 0x2b, 0xa1, 0x8e, - 0xa4, 0xd3, 0x1f, 0x1f, 0xbf, 0x1f, 0x6f, 0x5c, 0x39, 0x79, 0x42, 0x0f, - 0x8e, 0x4d, 0x46, 0x93, 0x7e, 0xa1, 0xf4, 0xcb, 0x2b, 0x40, 0xc8, 0xb8, - 0xf1, 0xd2, 0x4d, 0xf8, 0xe3, 0x83, 0x82, 0x27, 0x95, 0xcc, 0x5c, 0x61, - 0x01, 0x6e, 0x51, 0x85, 0x3c, 0x5f, 0x5d, 0x7e, 0x84, 0x0a, 0x62, 0xb9, - 0xb9, 0xf5, 0x12, 0xf6, 0xd6, 0x0e, 0x78, 0xc9, 0xb3, 0xc1, 0x33, 0xf7, - 0x96, 0x27, 0xae, 0x1c, 0x5c, 0xf1, 0x12, 0x61, 0x1e, 0x20, 0x14, 0xd3, - 0x99, 0xaa, 0xdb, 0xda, 0xcd, 0x4e, 0x76, 0x4d, 0x2d, 0xaf, 0x4b, 0xee, - 0x0b, 0xad, 0x24, 0x8d, 0x9d, 0x10, 0xd4, 0xd6, 0x3e, 0x80, 0x11, 0x95, - 0x19, 0x11, 0xe5, 0xe6, 0xf2, 0x42, 0x97, 0x73, 0x99, 0x23, 0x11, 0x6a, - 0xab, 0x15, 0x1e, 0x79, 0x4f, 0x06, 0xc2, 0x79, 0x27, 0x1e, 0x5d, 0x6c, - 0x1d, 0x79, 0x27, 0xbd, 0x77, 0x81, 0x8f, 0x3e, 0x2a, 0x84, 0x52, 0xb0, - 0xab, 0x61, 0x28, 0xe2, 0x93, 0xf3, 0x31, 0x65, 0xee, 0x07, 0x91, 0x9b, - 0x2d, 0x49, 0x6c, 0x3f, 0xaf, 0x3f, 0x66, 0xa2, 0x3e, 0xaf, 0x7f, 0x06, - 0x28, 0x94, 0xa8, 0xa6, 0x0b, 0xff, 0x4f, 0x66, 0xf7, 0x4f, 0x5d, 0xec, - 0xf9, 0x88, 0xfb, 0x76, 0x83, 0x02, 0x10, 0x05, 0x54, 0x09, 0xb3, 0xff, - 0x77, 0x32, 0xef, 0x09, 0x99, 0xd5, 0x80, 0x64, 0x99, 0x20, 0xd6, 0x70, - 0x75, 0x83, 0x5a, 0xf0, 0x43, 0x40, 0x01, 0x9f, 0x57, 0x87, 0x7a, 0x52, - 0x76, 0x03, 0x90, 0x2a, 0xce, 0xcc, 0x8a, 0xa7, 0x64, 0x1c, 0x75, 0x83, - 0x73, 0x5b, 0xfe, 0xe5, 0x2d, 0x1b, 0x05, 0x7d, 0x9c, 0xf7, 0x4e, 0xce, - 0x02, 0x89, 0x88, 0x09, 0xc8, 0xca, 0x5b, 0xce, 0x10, 0xe9, 0x05, 0xee, - 0x13, 0xb1, 0xd9, 0x9d, 0xa1, 0x4e, 0x86, 0xd1, 0x57, 0xc8, 0x95, 0xef, - 0x57, 0x08, 0x23, 0x5f, 0x88, 0x70, 0x01, 0xc2, 0x89, 0xee, 0xeb, 0x4b, - 0xca, 0xca, 0xce, 0x07, 0x85, 0xea, 0xc2, 0x54, 0x66, 0x1f, 0x7e, 0x5b, - 0x00, 0x84, 0x28, 0x42, 0x92, 0x90, 0xaa, 0x89, 0x38, 0x7c, 0x5a, 0xe4, - 0xf9, 0x99, 0xcb, 0x54, 0xbe, 0xac, 0x3c, 0x7d, 0xa6, 0x3c, 0x7d, 0x5d, - 0xe2, 0x77, 0x5c, 0xde, 0x13, 0x01, 0x2b, 0x62, 0xfa, 0x2a, 0xb6, 0x39, - 0x5d, 0xb1, 0x80, 0xfa, 0x78, 0x6e, 0xcd, 0x8a, 0xce, 0xc8, 0x5a, 0x16, - 0xe6, 0x6e, 0xf3, 0x08, 0x80, 0xe4, 0xd5, 0x5d, 0xda, 0x12, 0x86, 0x58, - 0x74, 0xce, 0xa9, 0xee, 0x29, 0x68, 0x68, 0x81, 0x50, 0x91, 0x43, 0x07, - 0x52, 0xf0, 0x75, 0xbd, 0x7f, 0x57, 0x04, 0x1e, 0xff, 0x01, 0x94, 0xf7, - 0xe9, 0xd8, 0x14, 0xeb, 0xb1, 0x39, 0xba, 0x23, 0x8a, 0x03, 0x47, 0x32, - 0x66, 0x59, 0x26, 0xf1, 0xa7, 0x11, 0x59, 0xb7, 0x90, 0x66, 0x36, 0xbd, - 0x05, 0x7e, 0x06, 0x32, 0x1b, 0x42, 0x6a, 0xd6, 0xa1, 0xcf, 0x7e, 0x71, - 0x5a, 0xa1, 0x39, 0x36, 0xa9, 0xea, 0x7a, 0x21, 0x38, 0x59, 0xf8, 0x40, - 0x4c, 0xf0, 0x72, 0x0d, 0xd1, 0x77, 0x30, 0x79, 0x9c, 0xba, 0x5c, 0xf1, - 0x7e, 0x20, 0xd1, 0x3b, 0x40, 0x59, 0x96, 0x81, 0xd5, 0xb0, 0xf0, 0x09, - 0xc0, 0x29, 0x26, 0xc6, 0xd3, 0x39, 0xab, 0x66, 0x58, 0x93, 0xcb, 0xf3, - 0xb4, 0x28, 0xbf, 0x33, 0x24, 0xf9, 0x9d, 0x7e, 0x83, 0x7b, 0x2e, 0x90, - 0xa0, 0x35, 0xd8, 0xaf, 0x04, 0x00, 0x57, 0xe0, 0xd7, 0x79, 0xe7, 0x42, - 0x86, 0xc9, 0x33, 0x84, 0xc1, 0xe1, 0x57, 0x99, 0x08, 0x94, 0xc7, 0x18, - 0x41, 0x95, 0xd9, 0x2f, 0x86, 0x48, 0xef, 0x31, 0xfd, 0x25, 0x75, 0x3a, - 0x9c, 0xcb, 0x0d, 0xf7, 0xca, 0xe5, 0x2e, 0x55, 0x16, 0x69, 0x05, 0xe1, - 0x9e, 0xf1, 0x7a, 0x4f, 0x36, 0xa7, 0x96, 0x11, 0x41, 0x35, 0xdd, 0xb1, - 0xa4, 0x93, 0xe9, 0x27, 0x28, 0x35, 0xd6, 0xc0, 0x67, 0x7a, 0xba, 0x5f, - 0xd6, 0xa3, 0x4b, 0xd0, 0xbd, 0x69, 0x9b, 0x20, 0x1d, 0xf7, 0x33, 0xf9, - 0x35, 0x0f, 0x4a, 0x83, 0x82, 0x86, 0x96, 0xce, 0x6b, 0xf0, 0x8f, 0x05, - 0x34, 0x67, 0x50, 0x60, 0x29, 0x7a, 0x4d, 0x8b, 0xc6, 0x2c, 0x04, 0xaa, - 0xee, 0x56, 0x35, 0x80, 0x83, 0xaa, 0x73, 0x88, 0x37, 0x2a, 0x20, 0xe3, - 0x25, 0xea, 0xcd, 0xc4, 0xd8, 0xca, 0x71, 0x49, 0xf6, 0x10, 0x50, 0x9a, - 0x2f, 0x08, 0x87, 0xe6, 0xdd, 0x8c, 0x32, 0x81, 0xef, 0x67, 0xf7, 0x61, - 0x2b, 0x8f, 0x4b, 0x26, 0x61, 0x83, 0x86, 0x90, 0x5b, 0x4b, 0xf1, 0xd1, - 0x9e, 0x75, 0x89, 0xfe, 0x2c, 0xbd, 0xe4, 0x29, 0x01, 0xd1, 0x8e, 0x1a, - 0xa1, 0xa9, 0x4e, 0x06, 0x1e, 0x09, 0xbd, 0x5a, 0x08, 0xb8, 0x69, 0x7b, - 0x39, 0xb5, 0xd7, 0x61, 0x81, 0x5e, 0x98, 0x2c, 0x81, 0x4a, 0x87, 0x94, - 0xa2, 0xc0, 0x93, 0x8f, 0xd6, 0xa9, 0xf6, 0xce, 0x68, 0xbb, 0x38, 0xf2, - 0xeb, 0xb9, 0x2b, 0xae, 0xe4, 0x0e, 0x21, 0xe6, 0x74, 0x47, 0x9c, 0xd7, - 0xfa, 0x41, 0xae, 0x2d, 0x21, 0x75, 0xb2, 0x5c, 0xdb, 0x87, 0xe3, 0xd2, - 0xb8, 0x0b, 0x65, 0x23, 0xad, 0xc1, 0x3d, 0xc5, 0x77, 0x8c, 0xb4, 0x11, - 0xcf, 0x45, 0xa8, 0x85, 0x6a, 0xfc, 0x23, 0x41, 0x76, 0x1c, 0x24, 0xa6, - 0xb7, 0xfe, 0x2b, 0x44, 0xd9, 0x66, 0x05, 0x34, 0xe1, 0x15, 0xa4, 0xb0, - 0x21, 0xd8, 0xda, 0xd7, 0x3c, 0xf6, 0x14, 0xd1, 0x7d, 0x79, 0x8d, 0x53, - 0x07, 0x35, 0x2f, 0x82, 0x0c, 0x4d, 0xb0, 0x14, 0x9f, 0x1a, 0x74, 0xc1, - 0x39, 0xc0, 0x3d, 0x4b, 0x19, 0xaf, 0x4c, 0xf6, 0x96, 0xfa, 0xc6, 0xdc, - 0x11, 0x54, 0x53, 0xdc, 0x2a, 0x9a, 0xb2, 0x75, 0x49, 0x2c, 0x71, 0xa3, - 0xe0, 0x5e, 0x68, 0xda, 0x15, 0x02, 0xde, 0x8a, 0x8f, 0x78, 0x7a, 0x56, - 0x0b, 0x59, 0x9c, 0x7b, 0x4b, 0xd6, 0x62, 0x2d, 0xa2, 0x22, 0xb1, 0x35, - 0xbd, 0x7c, 0x5a, 0xa4, 0xaa, 0x57, 0xdb, 0x7c, 0xec, 0x8d, 0xc2, 0xce, - 0x07, 0x54, 0x20, 0xb6, 0xa6, 0x34, 0x81, 0x74, 0x9e, 0xd3, 0x93, 0xea, - 0xfa, 0x5e, 0x1d, 0x11, 0x7e, 0x96, 0x8c, 0xab, 0x53, 0xf5, 0x4a, 0x7a, - 0xeb, 0x4a, 0xfa, 0xdd, 0xb5, 0xa1, 0xfb, 0x85, 0xef, 0x43, 0x03, 0x0f, - 0xb5, 0xa8, 0xf3, 0x1e, 0x87, 0x16, 0xa5, 0xcb, 0x01, 0xa4, 0xd0, 0xdc, - 0x72, 0xc4, 0xb8, 0xd7, 0x7a, 0x37, 0x9f, 0xb5, 0xe9, 0xa5, 0x11, 0xfb, - 0xd8, 0x6a, 0xfd, 0x3e, 0xa0, 0x42, 0xc1, 0x85, 0x19, 0x54, 0x9d, 0xc2, - 0xca, 0xd4, 0x25, 0x01, 0x2f, 0x41, 0x6e, 0xe4, 0x3c, 0x0c, 0xf2, 0x95, - 0x0d, 0xfe, 0x8e, 0x31, 0x75, 0x90, 0xb0, 0xef, 0xb0, 0xa8, 0x8b, 0xe4, - 0x16, 0xec, 0x99, 0xcd, 0x10, 0xac, 0xef, 0x4f, 0x37, 0x66, 0x70, 0x33, - 0xb4, 0x54, 0xf7, 0x57, 0xe9, 0x24, 0xbb, 0x31, 0x6a, 0x98, 0x2e, 0xd7, - 0xd2, 0xc6, 0xd9, 0xd4, 0xa7, 0x2a, 0xa2, 0x05, 0x32, 0x0d, 0x6d, 0x54, - 0xf1, 0x7d, 0xbc, 0x8b, 0xa9, 0x69, 0x5e, 0x25, 0x35, 0xfa, 0xaa, 0x20, - 0xa8, 0xf2, 0x5f, 0x17, 0xdd, 0x3c, 0x2e, 0x8d, 0x58, 0x70, 0xbd, 0xd0, - 0xa2, 0x5b, 0x13, 0xfd, 0x77, 0xa6, 0xc6, 0x88, 0xa0, 0x31, 0xa4, 0xb5, - 0x5a, 0x19, 0xac, 0x4b, 0x30, 0x88, 0x97, 0x46, 0xd2, 0x66, 0xd1, 0x35, - 0xd9, 0xe1, 0xf7, 0xd2, 0xb5, 0x6f, 0xa8, 0xab, 0x98, 0xba, 0x60, 0x7f, - 0x43, 0x01, 0x5c, 0x6b, 0x7b, 0xd5, 0x62, 0x6c, 0xd9, 0xf8, 0xbd, 0x35, - 0x46, 0xc5, 0xa0, 0x43, 0x18, 0x75, 0xa3, 0x52, 0x51, 0x19, 0x69, 0x3c, - 0xdf, 0x1d, 0xb3, 0x1c, 0x7f, 0xeb, 0x62, 0x76, 0x16, 0x01, 0x9d, 0xd6, - 0x5d, 0xb1, 0x7e, 0xa1, 0x10, 0xb2, 0x86, 0xbf, 0xa0, 0x4b, 0xcd, 0x71, - 0x7c, 0x0d, 0x47, 0x56, 0x45, 0x3f, 0x6c, 0x7f, 0x35, 0xe7, 0x63, 0xd7, - 0x76, 0xad, 0x2a, 0x38, 0xf0, 0xd4, 0xe6, 0x80, 0xb8, 0x62, 0xef, 0xba, - 0xcd, 0x57, 0x37, 0x4d, 0xc7, 0x33, 0x81, 0x7b, 0xeb, 0xc3, 0x95, 0x3e, - 0x7c, 0x41, 0x05, 0x32, 0x8e, 0x15, 0xda, 0x58, 0xf3, 0x71, 0x93, 0x5e, - 0xe9, 0x07, 0x1f, 0xf9, 0xde, 0x92, 0x9a, 0xb2, 0x55, 0x3c, 0x06, 0x27, - 0xb2, 0x5d, 0x9b, 0x9b, 0xc8, 0xa4, 0x3c, 0x86, 0x25, 0x27, 0xb4, 0x76, - 0x0b, 0x1e, 0x44, 0xe9, 0xba, 0x68, 0xbb, 0xd2, 0x36, 0xe1, 0xe0, 0xea, - 0xae, 0xf3, 0xbe, 0x17, 0x17, 0x6d, 0x3c, 0xf9, 0x78, 0x1b, 0x6f, 0x25, - 0x5d, 0x41, 0x03, 0x72, 0xb9, 0xbf, 0x9d, 0xa2, 0xa6, 0xc1, 0xb5, 0xa7, - 0x1c, 0x81, 0xaf, 0xa8, 0x2b, 0xc4, 0xc5, 0xb2, 0x6c, 0xeb, 0xcc, 0x55, - 0xb6, 0xcc, 0xdd, 0x88, 0x63, 0x8d, 0xbd, 0x15, 0x04, 0xae, 0x8d, 0xb7, - 0xa3, 0xff, 0x5c, 0x72, 0x24, 0xc4, 0x3d, 0x72, 0xb9, 0xb6, 0x32, 0x0e, - 0x3a, 0x27, 0xc9, 0x3a, 0x78, 0x5b, 0x89, 0xb0, 0xc8, 0xe0, 0x8b, 0x7b, - 0x36, 0xee, 0x0d, 0xda, 0x62, 0x17, 0x9a, 0xc1, 0x2f, 0x9d, 0xfa, 0x67, - 0x59, 0x8c, 0x5f, 0x64, 0x84, 0x6b, 0x16, 0x7a, 0xd0, 0x6d, 0xb2, 0x76, - 0x84, 0x2c, 0xeb, 0x11, 0xaa, 0x0f, 0x1f, 0xbd, 0xeb, 0xb8, 0x81, 0xcd, - 0x02, 0x1f, 0x97, 0xbe, 0x31, 0x8d, 0x4b, 0xdf, 0x64, 0x82, 0xa7, 0xb5, - 0x77, 0xba, 0x94, 0x5b, 0x17, 0x12, 0x1b, 0x7e, 0x97, 0x9f, 0x76, 0x9e, - 0x17, 0x24, 0x6e, 0x4b, 0xa0, 0x9c, 0xbe, 0x05, 0x07, 0x46, 0x95, 0x74, - 0x7d, 0x94, 0xa9, 0x5f, 0x54, 0xf2, 0x16, 0xb9, 0x82, 0x7e, 0x39, 0xd6, - 0xdd, 0x50, 0x57, 0x2a, 0x86, 0xac, 0x96, 0x9e, 0xfe, 0x6e, 0x38, 0xc8, - 0x96, 0x16, 0x9c, 0xe8, 0x65, 0x20, 0x53, 0xc9, 0x0a, 0xcf, 0xb7, 0x55, - 0x24, 0xde, 0x09, 0xcf, 0x78, 0x17, 0x46, 0x98, 0x73, 0x68, 0x5e, 0xe5, - 0x06, 0xfe, 0xed, 0xa7, 0x12, 0x28, 0xae, 0xc5, 0x02, 0x2b, 0x23, 0xe9, - 0xee, 0x6a, 0x49, 0x65, 0xcf, 0x9d, 0xa1, 0x55, 0x7e, 0xea, 0x7c, 0xe2, - 0x9e, 0xb1, 0xfb, 0xda, 0x6b, 0xa0, 0x0d, 0x9b, 0x4e, 0xeb, 0x10, 0xe9, - 0x36, 0x2f, 0x76, 0x37, 0xbb, 0x41, 0x2d, 0x47, 0xfb, 0x82, 0x65, 0x4f, - 0x88, 0x5f, 0x54, 0x8b, 0x0e, 0x95, 0xbe, 0x99, 0x7e, 0x28, 0x89, 0xdd, - 0x9d, 0xd6, 0x32, 0x85, 0xd6, 0x0c, 0xe2, 0x9c, 0x4a, 0x2a, 0x2c, 0xae, - 0x9e, 0x76, 0x31, 0x4a, 0xa2, 0xd6, 0x42, 0x2e, 0xb2, 0x96, 0x06, 0x5a, - 0x3f, 0x58, 0x2e, 0xfd, 0x68, 0xd1, 0xce, 0xf0, 0x1a, 0x31, 0xb6, 0x91, - 0x70, 0x19, 0x1e, 0x75, 0xae, 0xc8, 0xb2, 0xeb, 0x77, 0x13, 0xb8, 0x16, - 0xcd, 0x36, 0xb1, 0x04, 0xe7, 0x88, 0xb3, 0x10, 0x54, 0x96, 0x63, 0xb9, - 0x42, 0xd6, 0x96, 0x83, 0xa8, 0x94, 0x93, 0x5e, 0x92, 0xdf, 0x21, 0xc3, - 0x29, 0xd7, 0x3d, 0x6f, 0xe8, 0x40, 0xde, 0x52, 0xe8, 0x3f, 0xc9, 0x33, - 0xd7, 0x78, 0xe5, 0x2b, 0x15, 0xb4, 0x8b, 0xb4, 0x1e, 0x86, 0x20, 0xad, - 0xe5, 0x2b, 0x88, 0x4e, 0x75, 0x2b, 0xe9, 0x6b, 0x17, 0x66, 0x5c, 0x65, - 0x3a, 0xe5, 0xdd, 0x25, 0x67, 0x50, 0xbe, 0xd8, 0x0c, 0x62, 0xb9, 0xf4, - 0xf5, 0x88, 0xcb, 0xc8, 0xb8, 0xc6, 0x6e, 0xa4, 0x14, 0xac, 0x8a, 0xac, - 0x23, 0xfc, 0xc7, 0x1c, 0x0c, 0xfe, 0x9c, 0xa1, 0x39, 0x4f, 0xd5, 0xa9, - 0x41, 0x62, 0x66, 0xf1, 0x4e, 0xec, 0x73, 0x18, 0xeb, 0x6e, 0xec, 0x4c, - 0x39, 0x97, 0x75, 0xe7, 0xbc, 0xb7, 0x6c, 0xad, 0x2d, 0xfb, 0x2b, 0x18, - 0x94, 0xdb, 0x50, 0x15, 0xad, 0x2d, 0xf1, 0xda, 0x6f, 0xd3, 0xea, 0x98, - 0x78, 0xe9, 0xdc, 0xf5, 0xc3, 0xc4, 0x0a, 0x45, 0x2c, 0xe9, 0x6e, 0x1b, - 0x70, 0xd6, 0xd5, 0x62, 0x80, 0xc2, 0x51, 0x57, 0x24, 0x6e, 0xd6, 0x2e, - 0x9d, 0x53, 0x3c, 0x53, 0xee, 0x52, 0x79, 0xba, 0x1b, 0xb4, 0x8b, 0xa7, - 0x20, 0xfa, 0x76, 0x98, 0x7a, 0x33, 0x49, 0x3c, 0x9a, 0x7d, 0xcc, 0x4e, - 0xdd, 0x88, 0xb1, 0x0d, 0x9d, 0xa7, 0x4e, 0x21, 0xa6, 0x2d, 0x4a, 0x3f, - 0x48, 0x87, 0x50, 0x98, 0x36, 0xcd, 0x36, 0x75, 0x96, 0xa0, 0xf6, 0x3a, - 0x7e, 0xd5, 0xf5, 0x5b, 0xd6, 0x68, 0xde, 0x0d, 0x09, 0x3b, 0x39, 0xfb, - 0xe5, 0x6b, 0x30, 0x7a, 0x5c, 0xba, 0x56, 0xb6, 0xe3, 0x24, 0x37, 0x07, - 0x88, 0xbd, 0xee, 0xf8, 0xba, 0x45, 0x44, 0x7f, 0x7b, 0x04, 0x12, 0x3b, - 0xa6, 0x4b, 0x1b, 0x5d, 0xa8, 0xfd, 0x72, 0xf3, 0x82, 0x70, 0x8f, 0x13, - 0x23, 0x1d, 0x2f, 0x05, 0xad, 0xdb, 0x23, 0xe0, 0xb8, 0x3f, 0xca, 0x02, - 0xd8, 0x87, 0xae, 0x1b, 0x80, 0xd8, 0xf2, 0x43, 0xb7, 0x6a, 0xd8, 0x3f, - 0x26, 0xab, 0x4e, 0xf1, 0xa0, 0xc9, 0x1c, 0xed, 0x3f, 0xf5, 0x0b, 0xa6, - 0x4d, 0x4b, 0x69, 0xaf, 0x54, 0x90, 0x16, 0x6b, 0x87, 0xfd, 0x3a, 0xa9, - 0xa7, 0xba, 0xaf, 0x5d, 0x69, 0xf5, 0x3a, 0xdc, 0x68, 0x41, 0xed, 0x67, - 0x81, 0x7b, 0xd5, 0x2b, 0xb4, 0x68, 0xcb, 0xc0, 0xa6, 0xb8, 0x23, 0x28, - 0x0a, 0x1f, 0x0f, 0x58, 0x9a, 0xad, 0x24, 0xe6, 0x12, 0x67, 0xaf, 0xdd, - 0x21, 0x8b, 0x7e, 0xc8, 0x2d, 0x6e, 0x77, 0x29, 0xd5, 0x51, 0x99, 0xdc, - 0x26, 0x60, 0x2c, 0xc8, 0x90, 0x9a, 0x93, 0x5d, 0x6f, 0x3f, 0xfa, 0xd3, - 0x81, 0x7c, 0x80, 0x4c, 0x22, 0xdf, 0x3e, 0x8a, 0x1c, 0xdd, 0x99, 0xfd, - 0xa6, 0x4e, 0xb8, 0xdd, 0x01, 0x05, 0xfd, 0x6e, 0x7b, 0x8e, 0x5d, 0x9c, - 0x4f, 0xd9, 0x60, 0x3e, 0x6e, 0xb2, 0x68, 0x71, 0xf4, 0x9b, 0xce, 0xbc, - 0xd9, 0x08, 0xdc, 0x1d, 0x3a, 0x06, 0x1d, 0x67, 0x7a, 0x5d, 0x60, 0x71, - 0xe2, 0xd6, 0x5b, 0x84, 0x18, 0xbc, 0x96, 0x64, 0x6a, 0x14, 0x0d, 0x88, - 0x03, 0x7b, 0x2b, 0x15, 0x85, 0x45, 0x77, 0x47, 0x14, 0x54, 0x7f, 0x9d, - 0x03, 0x8b, 0x3a, 0x09, 0x7e, 0xf3, 0xd8, 0x36, 0x28, 0x3c, 0x8d, 0x7b, - 0x28, 0x53, 0x78, 0x86, 0x93, 0xc1, 0xe0, 0xc6, 0xe4, 0xd6, 0x2f, 0x91, - 0x6a, 0x20, 0xaf, 0x16, 0xcc, 0x19, 0x52, 0x2d, 0xd4, 0x1f, 0xce, 0x87, - 0x7b, 0x46, 0x7f, 0xf8, 0x0e, 0x72, 0x6b, 0xd3, 0xd1, 0xeb, 0xe2, 0x89, - 0xf2, 0xd5, 0x2f, 0x23, 0x5e, 0xd4, 0xcf, 0x9c, 0x79, 0x7b, 0xc5, 0x2b, - 0xcf, 0xf6, 0xd5, 0xfa, 0x6d, 0x49, 0x6d, 0xe7, 0xd4, 0xf9, 0xdc, 0x73, - 0x0f, 0x53, 0x71, 0xb6, 0x84, 0x57, 0x9b, 0x2f, 0xc0, 0xb7, 0x67, 0x3d, - 0xfb, 0xa0, 0xdb, 0xf9, 0x37, 0x88, 0x1c, 0x12, 0x7f, 0xca, 0x36, 0xdd, - 0x9d, 0x85, 0x9f, 0x28, 0x11, 0xc5, 0xf1, 0x67, 0xc8, 0x51, 0x40, 0x43, - 0xc7, 0xea, 0x97, 0xda, 0x15, 0xb2, 0x42, 0x29, 0xfd, 0x23, 0xcc, 0xd6, - 0xf1, 0xd6, 0x8f, 0x3d, 0x5d, 0xa5, 0x36, 0x99, 0x2c, 0x04, 0x30, 0x3e, - 0xaa, 0x83, 0x03, 0x16, 0x3b, 0xf3, 0x69, 0x6c, 0xc0, 0x45, 0x4e, 0xb1, - 0x49, 0x6e, 0x2e, 0xd8, 0x3e, 0xd7, 0x94, 0xd0, 0x4b, 0xdc, 0x59, 0x67, - 0xf2, 0xbc, 0x82, 0xe6, 0x4c, 0xe1, 0xe1, 0xdb, 0x54, 0xe7, 0xac, 0x75, - 0x15, 0x12, 0x7f, 0x91, 0x4a, 0x67, 0xb7, 0x41, 0x5b, 0xcf, 0x36, 0xc8, - 0xd7, 0x46, 0xd3, 0x76, 0x17, 0xdb, 0xa5, 0xb1, 0xb6, 0xae, 0x58, 0x9d, - 0xe4, 0xf9, 0x02, 0xe6, 0xdf, 0xc6, 0x5e, 0xb6, 0x82, 0x79, 0xae, 0xa5, - 0x29, 0x28, 0x77, 0xb5, 0x24, 0x72, 0x90, 0xdb, 0x2e, 0xdd, 0x2a, 0x60, - 0xbb, 0x6c, 0x1f, 0x3e, 0x73, 0x8a, 0xa9, 0x53, 0xfa, 0xf0, 0x68, 0x35, - 0x80, 0xe1, 0xbc, 0x75, 0x85, 0xed, 0xd2, 0x6e, 0x77, 0x56, 0xed, 0x25, - 0xf9, 0x69, 0xbb, 0x5e, 0x58, 0x4e, 0x9b, 0xd5, 0x40, 0x71, 0x8c, 0x0e, - 0x59, 0xca, 0x27, 0x65, 0x29, 0x9f, 0x75, 0xd3, 0xc9, 0xc2, 0xde, 0xbe, - 0x52, 0xae, 0xee, 0x69, 0x6d, 0x9f, 0x15, 0xa0, 0x72, 0xb6, 0x47, 0x7e, - 0x78, 0x0c, 0x59, 0xbe, 0x9b, 0x97, 0xc6, 0x21, 0x6f, 0xef, 0xe4, 0x1c, - 0x82, 0xa7, 0xe5, 0x0e, 0x90, 0xdc, 0x75, 0x22, 0xa0, 0xdd, 0xbd, 0xc7, - 0xac, 0xd6, 0x2d, 0xa4, 0xfc, 0x45, 0x1a, 0xd7, 0x6d, 0xb4, 0xa5, 0x9e, - 0xee, 0x6d, 0x1f, 0x3c, 0x1b, 0xb5, 0x73, 0x8d, 0xde, 0x44, 0x56, 0xfc, - 0x76, 0x60, 0xaf, 0xd1, 0x87, 0x8c, 0x7b, 0xec, 0xd2, 0x7b, 0x1c, 0xf5, - 0x18, 0x93, 0xb3, 0xad, 0x81, 0x95, 0xfe, 0x10, 0xa2, 0x9a, 0x6d, 0x3e, - 0xa8, 0xe6, 0x2a, 0x67, 0x2d, 0x62, 0x05, 0x84, 0xa1, 0x8a, 0x12, 0xae, - 0x4c, 0xa4, 0xef, 0x1c, 0xc5, 0x3a, 0x79, 0x58, 0x27, 0xb6, 0x37, 0xf1, - 0x9a, 0x4d, 0xae, 0x3e, 0xae, 0xb6, 0x49, 0x65, 0x85, 0x9b, 0x64, 0x54, - 0xe7, 0xa6, 0x1d, 0x25, 0x10, 0x03, 0x56, 0x33, 0x7a, 0x41, 0x13, 0xa0, - 0x8c, 0x4d, 0x26, 0x6a, 0xf2, 0x47, 0xa2, 0xbe, 0x7e, 0x2e, 0x10, 0x9d, - 0x1f, 0x25, 0xf9, 0x73, 0x19, 0x29, 0xa6, 0xf1, 0x27, 0x74, 0x44, 0x32, - 0x51, 0xc4, 0xac, 0xdf, 0x9f, 0x8b, 0x9e, 0x27, 0x13, 0x30, 0x18, 0x3f, - 0x4f, 0x06, 0x7a, 0xc3, 0x90, 0x38, 0x39, 0x02, 0xba, 0x09, 0x21, 0x72, - 0x94, 0xb2, 0x85, 0xdf, 0xa7, 0x8c, 0xb0, 0xdc, 0x9f, 0xd7, 0x13, 0xf2, - 0x33, 0x98, 0x82, 0xda, 0xd2, 0xbf, 0x2f, 0x4c, 0x97, 0x75, 0x58, 0x00, - 0x0d, 0x86, 0xef, 0x04, 0x51, 0xae, 0x75, 0x1c, 0x8b, 0xc9, 0x01, 0x26, - 0x63, 0x1d, 0xac, 0x6f, 0x07, 0x48, 0x29, 0x1b, 0x42, 0xdf, 0x4e, 0x9d, - 0x2b, 0x74, 0xac, 0x0b, 0xc4, 0xf8, 0x06, 0xfa, 0x19, 0x0e, 0xfe, 0xda, - 0xbd, 0x5f, 0x84, 0x03, 0xcd, 0xd1, 0xba, 0x7e, 0xea, 0x66, 0xd3, 0xea, - 0x01, 0x7f, 0xa2, 0x2c, 0x15, 0xc0, 0x7a, 0xf0, 0x62, 0x05, 0xe8, 0x47, - 0x76, 0x56, 0x0b, 0xfb, 0x33, 0x42, 0xd4, 0xfe, 0xcf, 0x38, 0xcf, 0xa6, - 0x21, 0x00, 0xa5, 0xc7, 0xf7, 0x00, 0x8f, 0xb4, 0x7a, 0x0c, 0x0c, 0xc2, - 0x15, 0x01, 0x19, 0x68, 0x91, 0xc4, 0x00, 0x91, 0xad, 0x31, 0x7a, 0xce, - 0x8f, 0x05, 0xbd, 0xfd, 0xa4, 0x9c, 0xb7, 0x1f, 0x8a, 0x79, 0xfb, 0x69, - 0x12, 0x4e, 0x7e, 0xca, 0xb4, 0xe0, 0x77, 0x93, 0xd8, 0x95, 0x40, 0xf1, - 0xe5, 0x7d, 0x03, 0x7f, 0x26, 0x17, 0x95, 0x0d, 0x23, 0xa3, 0x49, 0x21, - 0xfe, 0xf7, 0xa0, 0x2b, 0x70, 0x48, 0x7d, 0xbc, 0x0a, 0xa4, 0xa2, 0x82, - 0xf7, 0xc4, 0x35, 0x54, 0x98, 0xe1, 0x7c, 0xb2, 0x52, 0x60, 0xa0, 0x37, - 0x8c, 0xd0, 0x01, 0x07, 0x83, 0x3e, 0xe6, 0xab, 0xb6, 0x0f, 0x46, 0x11, - 0xe5, 0x7c, 0xe5, 0x11, 0x3a, 0xc1, 0x7e, 0x7c, 0x62, 0x3a, 0xf1, 0x5b, - 0x08, 0x23, 0xda, 0xb6, 0x29, 0x9f, 0xd8, 0x32, 0xb1, 0x45, 0xcd, 0x90, - 0x5d, 0x96, 0xb4, 0xfc, 0x37, 0x31, 0x4f, 0x15, 0xeb, 0x92, 0x4f, 0x28, - 0x6d, 0xdf, 0xfb, 0xa8, 0x08, 0x9e, 0x6f, 0xa7, 0x67, 0x2d, 0x77, 0x5b, - 0xd6, 0xd9, 0xe0, 0x42, 0xbb, 0x7c, 0x37, 0x4b, 0xcc, 0x72, 0x7e, 0x2f, - 0x79, 0x83, 0x13, 0xc4, 0xc3, 0xc7, 0x02, 0x15, 0xaf, 0xb6, 0x34, 0xaf, - 0xeb, 0x7b, 0xc1, 0x0d, 0x03, 0x63, 0x5e, 0x42, 0x32, 0xd3, 0x10, 0x65, - 0xb9, 0xe4, 0x7b, 0x4f, 0x43, 0x25, 0xa4, 0xa3, 0xe4, 0x1f, 0xb4, 0x03, - 0xf0, 0x41, 0x2b, 0x20, 0x87, 0xf9, 0x8a, 0xa0, 0x4f, 0x02, 0x6d, 0xad, - 0xc2, 0xcd, 0xa9, 0x0a, 0xd4, 0x05, 0xf2, 0xe6, 0x9a, 0xed, 0x5d, 0xd7, - 0xfb, 0xb7, 0xe3, 0x4d, 0x34, 0x40, 0x55, 0x0c, 0x9d, 0xdf, 0xed, 0x2f, - 0x36, 0x43, 0x23, 0x1a, 0x5c, 0xc3, 0xfe, 0x92, 0xa2, 0x9d, 0xde, 0x78, - 0xbb, 0x36, 0x13, 0x0d, 0xb7, 0x7b, 0xa1, 0xcc, 0x9a, 0x86, 0x19, 0xd3, - 0x70, 0x7b, 0xa6, 0x67, 0x0b, 0xff, 0x06, 0xb2, 0xc0, 0x9a, 0x86, 0xe5, - 0xde, 0xc7, 0xba, 0x01, 0x9b, 0xd7, 0xae, 0xac, 0x6d, 0x3e, 0x2e, 0x8a, - 0x9d, 0x6c, 0x49, 0xe6, 0x49, 0xaa, 0x66, 0x8b, 0xa8, 0xd8, 0x71, 0x11, - 0x1f, 0x43, 0x45, 0xcb, 0xdb, 0xfe, 0x02, 0xc9, 0x6f, 0xc5, 0x76, 0xe0, - 0xfa, 0x03, 0x70, 0x02, 0xca, 0x7e, 0x94, 0x4f, 0x28, 0x7f, 0x2f, 0x15, - 0xa9, 0xf7, 0x68, 0x15, 0x85, 0xce, 0x72, 0x86, 0xd5, 0x0a, 0xab, 0xa5, - 0xff, 0x70, 0x95, 0x1f, 0x59, 0xa5, 0x94, 0x2a, 0x7e, 0x6d, 0x15, 0x2b, - 0xf9, 0x61, 0x6f, 0x88, 0x1a, 0x8b, 0x5d, 0xc1, 0x7b, 0x33, 0x93, 0x3d, - 0x51, 0x0c, 0x8d, 0x01, 0xcb, 0xfc, 0xe6, 0x6d, 0xe0, 0x3b, 0x25, 0x20, - 0xbd, 0xa9, 0x39, 0x2f, 0x1e, 0x54, 0x32, 0x40, 0x08, 0x53, 0xbb, 0x34, - 0xd8, 0x80, 0x66, 0x60, 0x12, 0x7f, 0x3a, 0x42, 0xcd, 0x1c, 0x90, 0x09, - 0xf8, 0xf3, 0x8e, 0x17, 0xc1, 0xc7, 0x3f, 0x75, 0x02, 0xbf, 0xfc, 0x1f, - 0x59, 0xdf, 0xb6, 0xd8, 0x3c, 0xcb, 0x33, 0x7b, 0xfe, 0xdf, 0x65, 0x9a, - 0x38, 0x09, 0x4f, 0x6d, 0xe3, 0x0f, 0x43, 0xda, 0xf4, 0xea, 0x17, 0xda, - 0xcc, 0x48, 0x79, 0xd7, 0x41, 0x9b, 0x19, 0xf6, 0x06, 0x8c, 0xd9, 0x08, - 0xa9, 0xc9, 0x28, 0xd9, 0x55, 0xe1, 0xe7, 0xfc, 0x2f, 0x1b, 0x34, 0xf6, - 0x0d, 0x13, 0x62, 0x1b, 0xdf, 0x13, 0xd5, 0x2a, 0xff, 0xc7, 0xff, 0x99, - 0xae, 0x06, 0x49, 0x1a, 0x5a, 0x1b, 0xfa, 0x45, 0xbb, 0x05, 0x64, 0xfa, - 0x85, 0xbe, 0x2f, 0xe3, 0x57, 0x6b, 0x48, 0x09, 0x54, 0x4b, 0x64, 0x22, - 0x99, 0x0b, 0x55, 0xb9, 0xdf, 0x2b, 0x83, 0x1e, 0xfb, 0x12, 0xb0, 0x3a, - 0x2e, 0xdd, 0xfe, 0x8f, 0xb6, 0xff, 0x9f, 0x6a, 0xbc, 0xec, 0x5a, 0x5e, - 0x53, 0x01, 0x65, 0xbf, 0xa7, 0x06, 0x31, 0xfd, 0x4e, 0x02, 0xe4, 0x49, - 0xae, 0xaa, 0xcb, 0xd5, 0x1a, 0xed, 0xe2, 0x40, 0x8b, 0xed, 0x53, 0x04, - 0x01, 0x43, 0x3d, 0xe6, 0xa8, 0xa9, 0x43, 0x05, 0x74, 0x62, 0xce, 0xdf, - 0x4d, 0xeb, 0xb5, 0x5f, 0x5c, 0xb7, 0x70, 0x87, 0x15, 0x24, 0x01, 0x62, - 0xb7, 0x42, 0xc0, 0x8e, 0x74, 0xbe, 0x97, 0xcb, 0xfc, 0xc0, 0x29, 0xb8, - 0xd5, 0x1f, 0x29, 0xa4, 0x0a, 0x7f, 0xcc, 0x06, 0x53, 0x01, 0x0c, 0x51, - 0x6d, 0xf9, 0xb5, 0x98, 0xe1, 0x01, 0x11, 0x74, 0x31, 0xe1, 0x65, 0x41, - 0x87, 0x26, 0x34, 0xdf, 0x48, 0xbb, 0xe3, 0x11, 0x50, 0x0b, 0xe3, 0xaa, - 0x30, 0x15, 0xe8, 0xc4, 0x41, 0x90, 0x3d, 0xf3, 0x8a, 0x67, 0x5e, 0xf5, - 0x51, 0x57, 0x0d, 0xbe, 0x8a, 0x71, 0x1e, 0x19, 0x2b, 0x77, 0x4d, 0x76, - 0xbb, 0x9c, 0x9a, 0xe6, 0xb6, 0xe8, 0x3f, 0x4f, 0x6b, 0x33, 0xbf, 0xc5, - 0x8b, 0xbe, 0x69, 0x72, 0x9b, 0x25, 0xb6, 0x59, 0x09, 0xe7, 0x00, 0xa8, - 0xdb, 0x95, 0x22, 0x8a, 0xeb, 0x37, 0x0e, 0x05, 0x16, 0x4b, 0xc0, 0xb4, - 0xde, 0x76, 0x98, 0xd4, 0x13, 0xb0, 0x6a, 0x9a, 0xa2, 0x6e, 0x66, 0xfe, - 0xff, 0x36, 0x82, 0xb6, 0xd8, 0xbf, 0xbd, 0xde, 0x5c, 0x11, 0xb8, 0x82, - 0x62, 0x0d, 0xbe, 0xef, 0xf8, 0x99, 0x23, 0x68, 0x57, 0xd5, 0xde, 0xe6, - 0xa0, 0xe2, 0x40, 0x5e, 0x18, 0x1f, 0xfc, 0x3b, 0xec, 0x54, 0x2b, 0xb0, - 0x24, 0x0f, 0x5d, 0x21, 0x6a, 0x7e, 0xfa, 0x91, 0x90, 0xdf, 0xc3, 0x73, - 0x31, 0x45, 0x29, 0xf6, 0xab, 0xc5, 0x6c, 0xb7, 0xaa, 0xff, 0xa5, 0x90, - 0x32, 0x2e, 0x79, 0x62, 0x0d, 0xe6, 0x13, 0x27, 0xdc, 0x35, 0x89, 0x26, - 0xc5, 0x41, 0x2a, 0xa7, 0x39, 0x99, 0x49, 0x1c, 0x03, 0x56, 0x1a, 0xb3, - 0x49, 0x26, 0xbf, 0xb6, 0xfd, 0x92, 0x14, 0x6f, 0xca, 0x21, 0xcf, 0x62, - 0x7d, 0xef, 0xec, 0x28, 0xf4, 0x5c, 0x85, 0xcf, 0xff, 0x5d, 0xff, 0x0f, - 0x97, 0x88, 0x53, 0xa4, 0x15, 0x3d, 0x9a, 0x29, 0x0a, 0xbb, 0x48, 0xe7, - 0x19, 0x5d, 0xff, 0xf9, 0xa8, 0x1a, 0x50, 0x8b, 0x22, 0x9a, 0x1f, 0x96, - 0x06, 0x77, 0x81, 0x7f, 0x5e, 0x56, 0xb1, 0xcb, 0xea, 0x99, 0xfd, 0xdc, - 0x9a, 0x3d, 0xbd, 0x02, 0x7d, 0xfc, 0x89, 0x24, 0xeb, 0x9f, 0x22, 0x41, - 0x7f, 0x44, 0xf5, 0x97, 0xfc, 0x78, 0xa8, 0xdd, 0x03, 0xfd, 0x7a, 0x52, - 0xbf, 0x7e, 0x6a, 0x24, 0xc8, 0x67, 0xb0, 0x13, 0x16, 0xbf, 0xa4, 0x0b, - 0xa8, 0x85, 0xf8, 0xf5, 0xb6, 0xfc, 0x75, 0xa3, 0x49, 0x44, 0x16, 0xf0, - 0x10, 0x1d, 0xb2, 0x7d, 0x99, 0xcf, 0xe6, 0x53, 0x71, 0xb9, 0x58, 0xe0, - 0xbf, 0xb6, 0xdb, 0x2f, 0x40, 0x2b, 0xcb, 0x6d, 0xb7, 0x75, 0x98, 0x6e, - 0xeb, 0x78, 0x65, 0x60, 0x01, 0xbc, 0xab, 0x29, 0xb7, 0xf9, 0xff, 0xf4, - 0x88, 0xa6, 0xce, 0xc9, 0x7e, 0x35, 0x82, 0x6a, 0xfe, 0x91, 0x8c, 0x05, - 0xe9, 0xa1, 0xac, 0x42, 0x89, 0x74, 0xb5, 0x91, 0x5a, 0x40, 0xb3, 0x33, - 0x84, 0xbe, 0x98, 0x52, 0x9f, 0xbe, 0x2c, 0xd6, 0xf1, 0xe5, 0x02, 0xad, - 0xfc, 0x13, 0xc1, 0x87, 0xee, 0x7a, 0xd1, 0x3b, 0xb4, 0xa2, 0x0b, 0x38, - 0xdf, 0xfa, 0xa3, 0xff, 0x5d, 0xbd, 0xa7, 0x20, 0xdd, 0xdb, 0xa3, 0x60, - 0x6c, 0x77, 0xa1, 0xf5, 0x3e, 0xa7, 0x86, 0xf2, 0xe8, 0xdf, 0xfc, 0x1c, - 0xc9, 0xce, 0x03, 0xbf, 0x7d, 0x42, 0xe4, 0x15, 0xba, 0x9a, 0x60, 0xbf, - 0xd0, 0xd9, 0x9e, 0x1c, 0x2a, 0xe5, 0x9c, 0x75, 0xd9, 0x81, 0x5c, 0xe3, - 0xa3, 0xe2, 0x4a, 0xd7, 0xa6, 0x97, 0x0d, 0x33, 0x0b, 0x1c, 0xa9, 0xc4, - 0x78, 0x3b, 0xd9, 0x1c, 0x97, 0x90, 0xfb, 0xb2, 0xf3, 0xce, 0xb6, 0x30, - 0xbd, 0xf2, 0xb1, 0x2b, 0x74, 0xfb, 0x23, 0x0a, 0x9f, 0xcc, 0x4e, 0x2d, - 0x65, 0xe4, 0x94, 0x45, 0xb9, 0x2d, 0x72, 0xc4, 0xd8, 0xaf, 0x12, 0x13, - 0x7c, 0xc0, 0x45, 0x04, 0xfe, 0xac, 0xf7, 0x04, 0xd1, 0x26, 0x5c, 0x67, - 0xff, 0x97, 0xca, 0x59, 0xad, 0x21, 0xbc, 0x10, 0xa5, 0xaa, 0x0a, 0x18, - 0xc5, 0xab, 0x35, 0xc9, 0xba, 0x0e, 0x15, 0x9d, 0x71, 0x74, 0x75, 0xe0, - 0xd5, 0x29, 0x27, 0x7b, 0x17, 0x2f, 0x83, 0x2c, 0xd2, 0x8b, 0xde, 0xf9, - 0x13, 0x32, 0x9f, 0xec, 0x34, 0xf7, 0xd3, 0x9f, 0x40, 0x8f, 0x0e, 0xbc, - 0xc1, 0x55, 0x34, 0xd9, 0x57, 0xdc, 0x21, 0xa8, 0x6c, 0x48, 0xde, 0x65, - 0x01, 0xa7, 0x49, 0x62, 0x09, 0x5e, 0xdd, 0xcd, 0x15, 0xa3, 0x72, 0x79, - 0xee, 0x40, 0x9f, 0x68, 0x73, 0x11, 0x23, 0x45, 0x56, 0x76, 0x1f, 0xf0, - 0xe6, 0xef, 0xd5, 0xf3, 0x55, 0xe3, 0x4e, 0x70, 0xc4, 0xe7, 0xc3, 0xa0, - 0x25, 0x2c, 0xdb, 0x56, 0x0c, 0xac, 0xda, 0x01, 0x88, 0x9b, 0xff, 0x40, - 0xbb, 0x5d, 0x57, 0x45, 0x35, 0xf0, 0x76, 0x8b, 0x07, 0x80, 0x6f, 0x20, - 0xf7, 0x5f, 0xbe, 0xbc, 0xca, 0x76, 0x35, 0x9c, 0x3b, 0x7f, 0x77, 0xcd, - 0xae, 0xe2, 0xcd, 0x72, 0xdb, 0xb9, 0x76, 0x22, 0xa7, 0xff, 0x6f, 0xf6, - 0x03, 0xff, 0xd3, 0x0a, 0x70, 0xda, 0xbb, 0xe0, 0xeb, 0xe7, 0xee, 0xf7, - 0x5e, 0xf4, 0xd7, 0x9e, 0x99, 0x0d, 0xae, 0x88, 0xb1, 0xf5, 0xf3, 0x35, - 0x7f, 0x4d, 0x04, 0xd2, 0x16, 0xca, 0x56, 0xad, 0x7b, 0x18, 0x86, 0x49, - 0xeb, 0x67, 0xc0, 0x5a, 0x3c, 0x4c, 0xf7, 0x14, 0xfc, 0xd1, 0xe7, 0x9a, - 0x54, 0xef, 0xce, 0x2e, 0xfe, 0xd3, 0xfc, 0xd7, 0x4a, 0xc7, 0x9a, 0x65, - 0xbd, 0xf6, 0xc8, 0x58, 0x9f, 0xd2, 0xdb, 0x76, 0x1f, 0x70, 0x16, 0xfb, - 0x50, 0x7d, 0x76, 0x72, 0xbb, 0x14, 0x64, 0x62, 0xe9, 0xfa, 0xbf, 0x68, - 0x84, 0x09, 0x76, 0x4b, 0xb3, 0x99, 0x85, 0x31, 0xef, 0xe3, 0x8d, 0xf6, - 0xc6, 0x0c, 0x6b, 0x2c, 0x35, 0x7a, 0x25, 0xba, 0x5e, 0xa5, 0xb8, 0xde, - 0xe3, 0xdb, 0xe2, 0x8e, 0xf3, 0x77, 0x0f, 0xd4, 0x9f, 0xfa, 0x01, 0x10, - 0x71, 0x8c, 0xcb, 0xf3, 0xff, 0x5c, 0x08, 0xbe, 0xeb, 0x89, 0xba, 0xfe, - 0xd8, 0xae, 0xa4, 0xee, 0xa2, 0xc9, 0x1a, 0xf6, 0x3d, 0x67, 0x16, 0xff, - 0xe7, 0x02, 0xf2, 0xd6, 0x00, 0x0d, 0xa3, 0x8e, 0x02, 0x0c, 0xd6, 0xce, - 0x3c, 0x9a, 0x5d, 0xa0, 0xb4, 0x4c, 0xb7, 0x02, 0xe0, 0x75, 0xd4, 0x50, - 0xc0, 0xdd, 0xde, 0x81, 0x36, 0x7b, 0x02, 0x5a, 0x5d, 0xb0, 0x85, 0x3e, - 0x4e, 0x51, 0xe9, 0xd0, 0x6c, 0x88, 0x68, 0x0d, 0x7b, 0x49, 0x59, 0x08, - 0x5f, 0xb7, 0x6c, 0xed, 0x61, 0xb8, 0x75, 0xab, 0x62, 0xf8, 0x5f, 0x7a, - 0xf2, 0xe8, 0xd8, 0x0a, 0x6d, 0x22, 0xae, 0x0a, 0xdc, 0x9c, 0x41, 0x16, - 0xd8, 0x17, 0x5c, 0xfd, 0xa3, 0x20, 0x88, 0x85, 0x6f, 0xec, 0xaf, 0x4d, - 0xbb, 0x69, 0xeb, 0x1e, 0xbc, 0xdb, 0x18, 0x21, 0xbf, 0xf6, 0x30, 0xbd, - 0x58, 0x9a, 0x2e, 0x3e, 0xd2, 0x45, 0xe6, 0xcc, 0x05, 0xbb, 0x65, 0x3f, - 0xc5, 0x2b, 0x4f, 0x14, 0xa7, 0xdb, 0x23, 0x9d, 0x90, 0x2f, 0x52, 0x88, - 0x1d, 0x50, 0x25, 0xdd, 0x42, 0x42, 0x0c, 0x5d, 0xf0, 0xb8, 0x79, 0xa5, - 0x3b, 0x74, 0x67, 0x89, 0x60, 0xc2, 0xa5, 0xf2, 0xdb, 0x7a, 0x75, 0xa1, - 0xfa, 0x2e, 0x2a, 0x06, 0x35, 0xe7, 0x6e, 0x1f, 0xa3, 0x39, 0x67, 0xf8, - 0xf2, 0xf1, 0x49, 0xa0, 0xab, 0x60, 0xd2, 0x54, 0xba, 0xca, 0x38, 0x3a, - 0x78, 0x5f, 0x57, 0x04, 0xba, 0x89, 0x5a, 0xad, 0xcd, 0x12, 0x9b, 0x4c, - 0xc6, 0x3d, 0x2b, 0xee, 0x64, 0xf3, 0x63, 0xf4, 0x76, 0x8f, 0x87, 0xb7, - 0x7f, 0x97, 0x0d, 0x4d, 0x64, 0x3e, 0xf1, 0xfb, 0xe6, 0xd3, 0x14, 0x30, - 0xa4, 0x2b, 0xb8, 0xfe, 0x7a, 0xa1, 0xfc, 0x40, 0x55, 0xb1, 0xdb, 0xf0, - 0x50, 0x7c, 0xf8, 0x7b, 0x28, 0x50, 0x17, 0x66, 0x06, 0x7b, 0x0a, 0xae, - 0xaa, 0xf2, 0x13, 0x44, 0xce, 0x1c, 0xd1, 0x05, 0x8b, 0x42, 0x91, 0x0f, - 0xc2, 0xe8, 0xdc, 0xb1, 0xf8, 0x60, 0x48, 0xc4, 0x54, 0x68, 0x29, 0x64, - 0x83, 0xfe, 0xf6, 0x2f, 0x31, 0xbe, 0x21, 0x93, 0xb0, 0x89, 0xbd, 0x5b, - 0xfc, 0xda, 0x8c, 0x5e, 0x7f, 0xa5, 0xfd, 0xf4, 0x4e, 0x47, 0xfe, 0xd2, - 0x89, 0xc3, 0x79, 0x06, 0x8a, 0x2f, 0xda, 0x27, 0x97, 0x54, 0x9e, 0x76, - 0xa3, 0x59, 0x7f, 0xf5, 0xf9, 0x15, 0x48, 0x89, 0x71, 0x16, 0xa1, 0xc0, - 0xb2, 0x16, 0xa4, 0xea, 0xe8, 0x35, 0x57, 0x18, 0x5c, 0x35, 0x28, 0x4e, - 0x0b, 0xfa, 0xd7, 0x73, 0x41, 0x5d, 0x4d, 0xe4, 0x3b, 0x23, 0x13, 0xf2, - 0x47, 0x7a, 0xc1, 0xd3, 0x4c, 0x72, 0xc9, 0x6f, 0xbd, 0x55, 0x79, 0xdc, - 0xe7, 0x9c, 0x04, 0xac, 0x9a, 0x8e, 0xbf, 0x0c, 0x0e, 0x2c, 0xd4, 0xfa, - 0xee, 0xf5, 0xdb, 0x53, 0xf7, 0x29, 0xc1, 0x04, 0xfe, 0x8a, 0x3e, 0x17, - 0x15, 0xd3, 0x68, 0xe6, 0x0a, 0x51, 0xb5, 0x80, 0x96, 0x84, 0x34, 0xab, - 0xbe, 0x0a, 0x02, 0x5d, 0xdb, 0x9f, 0x60, 0x9f, 0x6f, 0x4c, 0xc4, 0x39, - 0xe8, 0xc4, 0x9b, 0x5c, 0xa0, 0x74, 0xf7, 0xe3, 0x79, 0xd9, 0x13, 0xf4, - 0x62, 0xd4, 0xb6, 0x44, 0xda, 0x67, 0x65, 0x68, 0x83, 0xe6, 0x2e, 0x5b, - 0xe5, 0xf6, 0xb8, 0x72, 0x97, 0x65, 0x78, 0x96, 0xcd, 0x6e, 0xbe, 0x1b, - 0xda, 0xf1, 0xdb, 0x9f, 0xa6, 0x91, 0x5b, 0x69, 0xce, 0xdf, 0xa6, 0xa4, - 0x4f, 0x9f, 0x8f, 0xea, 0x2f, 0x8a, 0xdc, 0xb6, 0x30, 0x21, 0xe6, 0xd4, - 0xf6, 0x58, 0x8c, 0xdc, 0x46, 0x63, 0x38, 0x4e, 0x24, 0x94, 0x41, 0xfc, - 0x0d, 0xcc, 0x26, 0x8d, 0x1f, 0x34, 0xe5, 0xc1, 0xaf, 0x01, 0x58, 0xc6, - 0x5e, 0x1d, 0x22, 0x64, 0x31, 0x7b, 0xf4, 0xba, 0x80, 0xc8, 0xf1, 0x0e, - 0x56, 0xd7, 0xe6, 0xf2, 0x8e, 0x34, 0xb0, 0x90, 0x30, 0x52, 0xed, 0xdb, - 0xa7, 0x64, 0x1f, 0x57, 0xbd, 0x5e, 0x03, 0xe5, 0xe5, 0x72, 0x45, 0x8c, - 0x8a, 0xf4, 0xdc, 0xf1, 0xa3, 0xf0, 0x98, 0x99, 0x25, 0xc2, 0x0a, 0x88, - 0xf3, 0x5a, 0x70, 0x53, 0xa2, 0xe9, 0xcc, 0x47, 0x49, 0x90, 0x48, 0xd3, - 0x37, 0x42, 0x40, 0x7e, 0x03, 0x63, 0x3e, 0x60, 0x2c, 0x5a, 0xcc, 0x5e, - 0x1f, 0x39, 0x63, 0x65, 0xa7, 0xf0, 0x14, 0xf4, 0x9c, 0x81, 0x40, 0xbd, - 0xc4, 0x08, 0xb9, 0xfe, 0xb7, 0x85, 0xbe, 0xa1, 0xb7, 0x81, 0x59, 0x44, - 0x01, 0xb0, 0x6c, 0xae, 0x50, 0xc7, 0x80, 0x67, 0x79, 0xa4, 0x82, 0x29, - 0x41, 0xf6, 0x65, 0xfb, 0xc2, 0x04, 0x63, 0x7e, 0x6d, 0xf5, 0x9f, 0xaf, - 0xac, 0x9f, 0xc5, 0xd7, 0x9e, 0xcf, 0x52, 0xf5, 0x9f, 0x9a, 0x5a, 0xd3, - 0x38, 0x55, 0x74, 0x46, 0x25, 0x68, 0xfe, 0x6b, 0x0a, 0xb0, 0xfa, 0xaf, - 0x87, 0x6a, 0x37, 0xfb, 0x6f, 0xfa, 0x6b, 0x15, 0x9f, 0x36, 0x31, 0x71, - 0x74, 0x76, 0x87, 0x28, 0x79, 0x3b, 0xed, 0xa9, 0x9a, 0x2c, 0x2a, 0xfa, - 0xd3, 0x60, 0x59, 0x80, 0xde, 0x3e, 0x25, 0x93, 0xcd, 0x95, 0x28, 0xff, - 0xd9, 0x75, 0x18, 0x28, 0xbf, 0xf1, 0x7c, 0x7e, 0x3f, 0xad, 0x9b, 0xca, - 0x05, 0xf9, 0xb1, 0xa5, 0x8b, 0x01, 0xcd, 0xb6, 0x62, 0x69, 0xa8, 0xc8, - 0x92, 0x9a, 0xe8, 0xfd, 0x7f, 0x3c, 0x48, 0x05, 0xf8, 0xd2, 0x09, 0xb0, - 0x93, 0x47, 0xb5, 0xee, 0x60, 0x4c, 0x2c, 0x33, 0xaa, 0xdf, 0x70, 0x3b, - 0x39, 0x0e, 0x91, 0xf2, 0x38, 0xe7, 0x47, 0xc3, 0xe6, 0x97, 0x4e, 0xf4, - 0x51, 0xdc, 0x70, 0xa2, 0xdc, 0x5b, 0x3a, 0x5d, 0x6a, 0x5b, 0xb0, 0xec, - 0x93, 0x3c, 0x67, 0x55, 0xdd, 0x44, 0x97, 0xa3, 0x43, 0x04, 0x14, 0x68, - 0x85, 0x6c, 0x6a, 0x7c, 0x41, 0x7f, 0x3d, 0xcb, 0x86, 0x73, 0x02, 0x81, - 0x8b, 0x67, 0x37, 0x27, 0x1e, 0xb6, 0xdb, 0x3b, 0x61, 0xb9, 0x7b, 0xb5, - 0x1b, 0xd2, 0xe7, 0x17, 0x88, 0x48, 0x13, 0x6a, 0x8a, 0x73, 0x9a, 0xec, - 0x29, 0x16, 0x5f, 0x6d, 0xcc, 0x21, 0xe6, 0x82, 0xb8, 0xf5, 0xc2, 0xb8, - 0x35, 0x32, 0xac, 0x17, 0x8b, 0x5b, 0xbf, 0xe8, 0xb2, 0x7d, 0xd5, 0x2b, - 0xdf, 0x38, 0xa5, 0x78, 0x93, 0x95, 0x1c, 0x9f, 0x7e, 0x80, 0x98, 0x62, - 0x3d, 0xdb, 0x38, 0x9f, 0xfe, 0xac, 0x6e, 0xa2, 0x7d, 0x82, 0x0d, 0xc9, - 0x0b, 0x72, 0xcf, 0xed, 0xb0, 0x32, 0x0e, 0x59, 0x04, 0x24, 0x68, 0x03, - 0x8c, 0x42, 0x3d, 0xf9, 0xff, 0x06, 0x93, 0x82, 0xbe, 0x37, 0xb5, 0x33, - 0x88, 0x4f, 0xcf, 0xdb, 0x86, 0xb8, 0xf7, 0x66, 0x0f, 0xf9, 0xde, 0xfc, - 0x11, 0xdf, 0x9b, 0x06, 0x9e, 0x8f, 0x47, 0xdd, 0x98, 0x4a, 0xfd, 0xf7, - 0x74, 0x30, 0x9b, 0xd4, 0x97, 0x5e, 0x73, 0x9a, 0x25, 0xa7, 0x3e, 0xfa, - 0x6b, 0x05, 0x34, 0x25, 0xfa, 0xbd, 0xd0, 0xbc, 0x71, 0x57, 0x75, 0xf7, - 0xf2, 0x3c, 0x2a, 0xfa, 0x30, 0xff, 0xcb, 0x49, 0xf5, 0xfc, 0xb1, 0xad, - 0x91, 0xf9, 0xeb, 0xc1, 0xdc, 0xa6, 0xa7, 0x80, 0x56, 0x6f, 0x0a, 0x24, - 0x9c, 0x26, 0x2f, 0x73, 0x68, 0xf9, 0x95, 0x23, 0x2f, 0x4d, 0x4a, 0x0e, - 0xb8, 0xf5, 0xff, 0xbd, 0xa8, 0x88, 0xb9, 0xe2, 0xef, 0xbd, 0xa8, 0xab, - 0xbe, 0x91, 0x45, 0x97, 0x15, 0x05, 0x6f, 0x4c, 0xa1, 0x08, 0xac, 0x28, - 0xcf, 0xb7, 0xd7, 0xbe, 0x88, 0x5d, 0x5f, 0x0d, 0x45, 0xbb, 0xf7, 0x06, - 0xdf, 0xfa, 0x2b, 0x72, 0xcc, 0x37, 0x20, 0x87, 0x28, 0xec, 0xb6, 0xe8, - 0x43, 0x6c, 0x9e, 0xe2, 0xb6, 0x9c, 0x62, 0x59, 0xf3, 0x61, 0x50, 0x8e, - 0xf0, 0x1d, 0xff, 0xc8, 0x45, 0x91, 0x09, 0x8a, 0xc6, 0xe6, 0x47, 0x97, - 0x50, 0x6b, 0x64, 0xab, 0x5e, 0x9b, 0x3b, 0xee, 0x86, 0xf5, 0xa2, 0x67, - 0x96, 0x56, 0x72, 0x6f, 0xc4, 0xa2, 0xda, 0x17, 0xba, 0x0a, 0x2e, 0xa9, - 0x5a, 0x7f, 0x6d, 0x3c, 0x03, 0xd2, 0x7a, 0x45, 0x6d, 0x9c, 0x76, 0x33, - 0xc3, 0xd7, 0xdd, 0x0a, 0x9f, 0x68, 0xf9, 0x47, 0xc0, 0xef, 0x35, 0x9c, - 0x34, 0x20, 0xd2, 0xf7, 0x14, 0x11, 0x91, 0x31, 0x77, 0x0d, 0x75, 0x54, - 0x25, 0x68, 0xcd, 0x9d, 0x76, 0x32, 0x7b, 0xd1, 0x00, 0x87, 0x7b, 0x60, - 0xcb, 0xcd, 0xad, 0x9f, 0x77, 0x18, 0x3f, 0xef, 0x6a, 0xfb, 0x7c, 0xfe, - 0x3f, 0xdd, 0xf9, 0x54, 0xd6, 0xeb, 0xf1, 0x7f, 0xbd, 0x58, 0xf5, 0x37, - 0x54, 0xeb, 0xfc, 0x82, 0x89, 0x2c, 0x6f, 0x17, 0x83, 0x77, 0xfa, 0xb0, - 0xf3, 0x57, 0xb6, 0xa8, 0x8a, 0x4f, 0xa7, 0xf5, 0xd7, 0xaf, 0xc8, 0x29, - 0x71, 0xe0, 0xfb, 0x74, 0xaa, 0x75, 0xcd, 0x52, 0xd2, 0x56, 0xb6, 0x6f, - 0x9a, 0xdc, 0xb9, 0x92, 0x5c, 0x7a, 0x43, 0xa8, 0xe6, 0x16, 0x71, 0x26, - 0xec, 0xc3, 0x4a, 0xd7, 0x55, 0x3d, 0xee, 0xff, 0xe1, 0x22, 0xaf, 0xff, - 0x4e, 0x9f, 0x7a, 0xb9, 0x69, 0x97, 0xab, 0x18, 0x96, 0x2a, 0x06, 0xa5, - 0x09, 0xde, 0xe6, 0xf5, 0x25, 0xf7, 0x95, 0xdc, 0x57, 0xb2, 0xaa, 0x0b, - 0x88, 0x87, 0x94, 0x67, 0xa8, 0x0f, 0x7d, 0x55, 0xaa, 0xaa, 0xa4, 0x9b, - 0x2b, 0x44, 0x1b, 0x75, 0xe6, 0xaf, 0x3d, 0x32, 0xc5, 0x5e, 0x0d, 0x49, - 0x59, 0x14, 0xd8, 0x33, 0xcc, 0x89, 0x82, 0x3c, 0x7f, 0xc5, 0x88, 0x50, - 0x31, 0x20, 0xd4, 0xed, 0x5e, 0xab, 0xbd, 0x5f, 0x76, 0x03, 0xaa, 0xdb, - 0xcc, 0x5f, 0xfe, 0xfb, 0x37, 0x9d, 0x83, 0x4c, 0xf5, 0xf9, 0x49, 0xdd, - 0x1f, 0x43, 0x8b, 0x22, 0xbf, 0xf0, 0x7a, 0x0c, 0x14, 0xd6, 0xfa, 0x81, - 0xdb, 0x01, 0x90, 0x5f, 0x4d, 0x7c, 0xc7, 0xef, 0xfc, 0xb2, 0x5f, 0x9a, - 0x83, 0x0f, 0xf4, 0x06, 0x2c, 0x9e, 0x0b, 0x56, 0xf9, 0x62, 0x3f, 0xa0, - 0x8b, 0x41, 0x3c, 0xcb, 0xaa, 0xaa, 0x4d, 0x36, 0xfd, 0xb5, 0x9c, 0xaa, - 0xdb, 0xcb, 0x51, 0x14, 0x81, 0xbc, 0x38, 0x13, 0x79, 0x0d, 0x55, 0x9d, - 0x55, 0xd7, 0xe3, 0xf2, 0xa7, 0x8b, 0xe5, 0x7a, 0xdc, 0x57, 0x1b, 0x08, - 0x26, 0x1a, 0xb2, 0xf7, 0x2d, 0x13, 0x4f, 0x7f, 0xc9, 0xe7, 0x37, 0xd1, - 0x4a, 0xe4, 0x13, 0x9d, 0x7a, 0xac, 0x1e, 0x69, 0xad, 0x3a, 0xf0, 0xd7, - 0x43, 0x0d, 0x8a, 0xcc, 0xdf, 0xbd, 0xce, 0xb9, 0xb9, 0x80, 0x58, 0x04, - 0x04, 0xb6, 0xb8, 0xd8, 0x83, 0x05, 0x72, 0x57, 0x3b, 0x75, 0x22, 0x72, - 0x57, 0x3b, 0xe7, 0x21, 0x52, 0xd7, 0x86, 0xbd, 0xc9, 0x0a, 0x7b, 0x4f, - 0x86, 0xec, 0x11, 0xd5, 0xda, 0x93, 0x18, 0x4c, 0xb0, 0xb9, 0xaf, 0x7d, - 0xbf, 0x45, 0x04, 0xf4, 0x46, 0x50, 0x11, 0x54, 0x4f, 0x12, 0xe6, 0xb4, - 0x77, 0x09, 0x27, 0xdd, 0xa3, 0x98, 0x3f, 0x7e, 0x63, 0x74, 0x42, 0xbb, - 0xc8, 0x26, 0x77, 0xd0, 0xb1, 0x71, 0x6f, 0xd7, 0xd1, 0xbb, 0x99, 0xc3, - 0xb6, 0x5f, 0xab, 0xa7, 0xe6, 0xfb, 0x5b, 0x2e, 0x60, 0xab, 0xbb, 0x98, - 0xa5, 0xdb, 0x45, 0x35, 0x5c, 0x5d, 0xef, 0x6a, 0x24, 0x47, 0x7e, 0x0a, - 0xf4, 0xe7, 0x28, 0xae, 0x2a, 0xd7, 0xdd, 0xe5, 0x6e, 0xa0, 0x7d, 0x8a, - 0xea, 0x70, 0x35, 0xfb, 0x8a, 0xb4, 0x95, 0x87, 0xef, 0xce, 0x1a, 0xd0, - 0x2a, 0x10, 0x84, 0xd0, 0xf2, 0xdc, 0x3a, 0xef, 0x90, 0xff, 0xd6, 0xc3, - 0x06, 0x16, 0xfa, 0x86, 0x34, 0x84, 0xcc, 0xee, 0x6d, 0xbf, 0x64, 0xe2, - 0xf9, 0x61, 0x92, 0x02, 0xff, 0x78, 0x4e, 0x7a, 0x23, 0xd1, 0x7e, 0x64, - 0x5c, 0x73, 0x41, 0x52, 0xfd, 0xb5, 0x6c, 0x7e, 0x30, 0xb8, 0x2b, 0xb2, - 0x4a, 0xfb, 0xd1, 0x31, 0xb5, 0xfe, 0x78, 0xaf, 0xfe, 0xd9, 0x11, 0x42, - 0x5c, 0x7f, 0xfd, 0xa9, 0x7f, 0xf1, 0x1f, 0xb3, 0x79, 0xc5, 0xe8, 0x0b, - 0xc4, 0x5a, 0xbf, 0xbf, 0x66, 0x42, 0xc8, 0x0a, 0xfe, 0xf6, 0xd4, 0xcc, - 0x10, 0xa1, 0x0c, 0x3c, 0x26, 0xf0, 0xa0, 0xc8, 0x77, 0xb6, 0x00, 0xbb, - 0x06, 0x70, 0x51, 0xc5, 0x1e, 0x5b, 0x2a, 0x82, 0xec, 0x54, 0x43, 0x96, - 0xfc, 0x8b, 0x7d, 0x3d, 0x15, 0x72, 0x32, 0x2f, 0xec, 0x8d, 0x63, 0x68, - 0x63, 0xb4, 0xce, 0x6b, 0xb4, 0x33, 0x98, 0xed, 0x49, 0x4d, 0xf8, 0xcd, - 0x8c, 0xbe, 0xd7, 0xcb, 0x5b, 0x6b, 0xa8, 0xf1, 0xcc, 0x4c, 0x6e, 0xff, - 0xd1, 0xdf, 0xba, 0x8a, 0xc8, 0xd1, 0x62, 0x3f, 0x29, 0xb0, 0x37, 0x11, - 0x1c, 0x10, 0xdb, 0x35, 0xab, 0x0b, 0x1a, 0x73, 0xed, 0xba, 0x33, 0x98, - 0x48, 0x0c, 0x22, 0x61, 0xc1, 0x88, 0xf0, 0x30, 0xef, 0xf9, 0x63, 0x6b, - 0x7b, 0x42, 0xcb, 0xae, 0xac, 0x5f, 0xeb, 0xe5, 0xcf, 0x0b, 0x89, 0x43, - 0xb8, 0x06, 0xd1, 0x9b, 0xb0, 0xd6, 0xa1, 0xe8, 0xd4, 0x15, 0xc3, 0x44, - 0x6e, 0x00, 0x48, 0x76, 0x32, 0xe0, 0x0b, 0x75, 0x60, 0xb2, 0xa3, 0xe1, - 0x96, 0x7a, 0x05, 0x8a, 0x0e, 0x4e, 0x05, 0x27, 0x15, 0x4c, 0x1a, 0x33, - 0x35, 0xec, 0x86, 0xf7, 0x1d, 0x2d, 0x36, 0x89, 0x2b, 0x3b, 0x37, 0x62, - 0xb7, 0x2e, 0x0d, 0xf7, 0xd5, 0x04, 0x33, 0x8c, 0x0d, 0x93, 0x42, 0x57, - 0xf2, 0x25, 0x87, 0x82, 0x0a, 0x6a, 0xd3, 0x0d, 0x5c, 0x95, 0x4d, 0xf4, - 0x0d, 0x8c, 0x2c, 0xa7, 0x98, 0x09, 0x4a, 0x42, 0xca, 0xaa, 0x9c, 0x6e, - 0x73, 0x7d, 0x3d, 0x07, 0x75, 0x27, 0xb3, 0x13, 0xb6, 0x80, 0x83, 0x58, - 0x4c, 0x9e, 0x5e, 0x3e, 0x98, 0x77, 0x01, 0xa5, 0xd4, 0x4b, 0xec, 0x0e, - 0x32, 0x7c, 0x2c, 0xa4, 0x22, 0x0f, 0x9c, 0xaa, 0xc3, 0xf8, 0x6b, 0x01, - 0x0b, 0xb5, 0xbe, 0xe6, 0x00, 0xad, 0xbc, 0xce, 0x74, 0xd8, 0x21, 0x39, - 0x19, 0x11, 0xa7, 0x45, 0x86, 0xe7, 0x3c, 0xc9, 0x03, 0x7d, 0xea, 0xa5, - 0x75, 0xa7, 0xd1, 0x98, 0x7d, 0x28, 0x7c, 0xfd, 0xa0, 0xcd, 0xab, 0x75, - 0xd9, 0x0e, 0xd7, 0xa3, 0x63, 0x34, 0xd4, 0xac, 0x1a, 0x1f, 0x28, 0xcc, - 0xf2, 0x7b, 0xc8, 0x2b, 0x15, 0x29, 0xe1, 0x1a, 0x3d, 0x08, 0x46, 0x4b, - 0xa7, 0xd9, 0xd3, 0xae, 0xc3, 0x18, 0x5e, 0xc7, 0x2b, 0x82, 0xe1, 0x0a, - 0x64, 0xb0, 0x5c, 0x73, 0xa1, 0xd3, 0x94, 0x34, 0x35, 0x24, 0xd4, 0x95, - 0x06, 0x29, 0xe8, 0x1f, 0xf7, 0x71, 0xa6, 0x64, 0x5d, 0xc0, 0x9e, 0x04, - 0xe9, 0x3d, 0x20, 0xd4, 0xa8, 0xcc, 0x2e, 0x2e, 0x05, 0xf4, 0xc7, 0x8e, - 0x9e, 0xa8, 0xb3, 0x60, 0xc2, 0x70, 0x8e, 0xdb, 0x41, 0xce, 0xcf, 0xe8, - 0xf1, 0xb3, 0xb8, 0x4f, 0x55, 0xdd, 0x63, 0x2c, 0x3f, 0x5c, 0x81, 0x8e, - 0x09, 0x30, 0x14, 0xa4, 0xd8, 0x96, 0xb3, 0xaa, 0x38, 0xb9, 0xf4, 0x78, - 0x8e, 0xf5, 0xa3, 0x6e, 0xd6, 0x54, 0x31, 0xae, 0x09, 0x05, 0x18, 0x1d, - 0x55, 0xa1, 0xbd, 0xca, 0x42, 0x76, 0x14, 0x8a, 0xf7, 0x6a, 0xc0, 0xd8, - 0x17, 0xe5, 0xeb, 0x14, 0x6d, 0x9f, 0xbb, 0x8d, 0x1c, 0x92, 0xde, 0x52, - 0xf6, 0xaa, 0x39, 0x90, 0x45, 0x83, 0x1e, 0x41, 0x27, 0x3d, 0x95, 0x5a, - 0x58, 0x0a, 0x98, 0x46, 0x92, 0x13, 0x17, 0x62, 0x9c, 0xe4, 0x48, 0xa3, - 0xb3, 0x3e, 0xf7, 0x8f, 0xc7, 0x86, 0xa8, 0xa8, 0x11, 0xbb, 0xe4, 0xa2, - 0x18, 0x3a, 0xf9, 0x9c, 0x44, 0x13, 0xd4, 0x6d, 0xf1, 0xfa, 0xa8, 0xe1, - 0xef, 0x12, 0xa5, 0x46, 0x5c, 0xfb, 0x5d, 0x37, 0x2d, 0x32, 0x66, 0xb5, - 0xcd, 0x49, 0x94, 0x4f, 0xbf, 0xdd, 0x0d, 0x38, 0xde, 0x51, 0x2a, 0xb7, - 0x23, 0x93, 0x6f, 0xa2, 0x61, 0x28, 0x27, 0x33, 0x2a, 0x3b, 0x5c, 0xe9, - 0xa5, 0x90, 0x63, 0x81, 0xd4, 0x53, 0x8e, 0x50, 0x12, 0x07, 0x7e, 0xa6, - 0xc8, 0xb8, 0x3f, 0x62, 0xac, 0x5c, 0x47, 0x45, 0xc3, 0x1e, 0x25, 0x27, - 0x5a, 0xda, 0x25, 0xba, 0x8f, 0xe8, 0x79, 0x5b, 0xe2, 0x55, 0x87, 0x9e, - 0x37, 0x23, 0x35, 0xb2, 0x9e, 0x15, 0x13, 0x29, 0xd8, 0xe8, 0x06, 0xd2, - 0x3a, 0x6a, 0x0f, 0xc6, 0x8b, 0x9d, 0xa4, 0x17, 0x2c, 0x89, 0x18, 0x27, - 0xce, 0xa0, 0xd4, 0xa3, 0xa6, 0xb4, 0x7d, 0x34, 0x67, 0x8c, 0x9a, 0x4d, - 0x4e, 0x69, 0x66, 0xaf, 0x34, 0x16, 0xc2, 0xbc, 0x4e, 0xed, 0x16, 0x84, - 0x93, 0x23, 0x79, 0xcc, 0xe4, 0xaf, 0x4f, 0x3e, 0xd5, 0xa9, 0x46, 0xc5, - 0x1c, 0xb2, 0xb9, 0x61, 0x7e, 0x51, 0x09, 0x75, 0x14, 0x39, 0xc3, 0xce, - 0x8f, 0x32, 0x9d, 0x22, 0x20, 0xb1, 0x24, 0xd6, 0x6f, 0xfc, 0x96, 0xde, - 0x39, 0x28, 0x20, 0x31, 0xd2, 0xa2, 0xef, 0x51, 0xbd, 0x8c, 0x31, 0x9d, - 0xdd, 0x79, 0x1c, 0x53, 0x42, 0xd4, 0x55, 0xe9, 0x90, 0xa7, 0x2a, 0xc8, - 0xe4, 0x18, 0x4c, 0x15, 0x11, 0x0e, 0x1c, 0x60, 0xe5, 0xaa, 0xab, 0x65, - 0x2b, 0xeb, 0x9d, 0xbe, 0x36, 0x34, 0x70, 0x76, 0x43, 0x5a, 0x02, 0x11, - 0x82, 0x9c, 0x3f, 0x83, 0xdf, 0x80, 0xd7, 0xb2, 0xa2, 0x7d, 0x5e, 0xcb, - 0xfa, 0x81, 0xad, 0x3d, 0xf5, 0x48, 0xcc, 0x5d, 0x7f, 0xe0, 0x6f, 0x22, - 0x06, 0xd6, 0xb3, 0x26, 0x96, 0x09, 0xe1, 0xfc, 0x3d, 0xeb, 0x4e, 0xff, - 0xd3, 0x24, 0xb4, 0x14, 0x8e, 0x16, 0xce, 0x30, 0x2e, 0x24, 0xa4, 0xbf, - 0x01, 0xdd, 0xfb, 0xb6, 0x5c, 0x65, 0x61, 0x53, 0x75, 0x7f, 0xae, 0x2d, - 0x5a, 0x80, 0x05, 0xd3, 0x08, 0x01, 0xbb, 0x3b, 0xc9, 0x53, 0x2e, 0x77, - 0xf9, 0xb7, 0x7d, 0x59, 0xe6, 0x9b, 0xdb, 0xf3, 0x11, 0x58, 0x57, 0x1b, - 0x94, 0x05, 0xd9, 0x54, 0x71, 0x42, 0xd3, 0x02, 0x2a, 0x97, 0x3a, 0x54, - 0x87, 0x92, 0xa2, 0x9b, 0x46, 0x9d, 0x1d, 0x79, 0xb1, 0xd1, 0xc1, 0x61, - 0xf7, 0x90, 0xf6, 0xef, 0xb4, 0x3c, 0x4f, 0x5b, 0x58, 0x1b, 0xd0, 0x3a, - 0x9d, 0x68, 0x34, 0x78, 0x4a, 0x4a, 0xc5, 0x1f, 0xb3, 0xd8, 0xa1, 0xd2, - 0xfc, 0xbd, 0x2d, 0xa2, 0x29, 0x45, 0x53, 0x2b, 0xb6, 0xcc, 0x50, 0x55, - 0x51, 0x56, 0xb5, 0x54, 0x21, 0x25, 0x70, 0xae, 0xdb, 0x6d, 0xea, 0x29, - 0x0b, 0x2a, 0xfb, 0xf5, 0x73, 0x98, 0x89, 0x7e, 0x8b, 0x7b, 0xfd, 0xd9, - 0x3e, 0xa8, 0x28, 0x98, 0xba, 0x01, 0xac, 0xf6, 0x73, 0x3a, 0x47, 0xf5, - 0x96, 0xaf, 0xb4, 0x95, 0x2e, 0xec, 0x63, 0x13, 0x7c, 0x3a, 0xb4, 0x8b, - 0x19, 0x1f, 0x21, 0xb6, 0x70, 0x7a, 0xdd, 0xd0, 0x9d, 0x87, 0x08, 0xb8, - 0x1a, 0x96, 0xf9, 0xef, 0xe2, 0xeb, 0xcf, 0x56, 0xd2, 0x59, 0x2b, 0xc8, - 0x8e, 0x80, 0x4f, 0x3f, 0x27, 0x57, 0x68, 0xb5, 0x2f, 0x67, 0x4f, 0x8f, - 0x77, 0x84, 0x50, 0x02, 0x0f, 0xab, 0x2a, 0xb1, 0xf8, 0x48, 0x27, 0x19, - 0x06, 0x6e, 0x0c, 0x3c, 0x57, 0x8e, 0x0c, 0xd3, 0x53, 0xa8, 0x5e, 0x37, - 0x66, 0x04, 0xcb, 0x57, 0x6a, 0x4f, 0xcc, 0x1a, 0x0a, 0xc6, 0x21, 0x0d, - 0xe9, 0x58, 0x5b, 0x38, 0x01, 0x97, 0xcd, 0x6d, 0x06, 0x3b, 0x23, 0x9c, - 0xad, 0x81, 0x15, 0xd9, 0xb3, 0x7d, 0xdb, 0x8f, 0x2f, 0x8b, 0xcc, 0xb8, - 0xa8, 0x45, 0xd3, 0x3d, 0x27, 0xfb, 0xb5, 0xa5, 0x90, 0x60, 0x3f, 0xc1, - 0x14, 0x1d, 0x9f, 0x15, 0xe5, 0x11, 0x81, 0xf6, 0x5b, 0x20, 0x04, 0xf0, - 0xe3, 0xc6, 0xf9, 0xb5, 0x34, 0x91, 0x52, 0x37, 0x7d, 0xe6, 0xde, 0x37, - 0xb9, 0x9e, 0xc5, 0xaf, 0x42, 0x71, 0xb9, 0x4c, 0x41, 0xac, 0x69, 0x3f, - 0x88, 0x9c, 0xcb, 0xd1, 0x0b, 0x5a, 0xec, 0x6e, 0x19, 0x99, 0x69, 0x4b, - 0x01, 0xf5, 0xea, 0x1e, 0xba, 0x73, 0xab, 0xbf, 0xc5, 0x73, 0x10, 0x58, - 0x57, 0x92, 0x86, 0x24, 0x6c, 0x8c, 0x29, 0xf7, 0xd1, 0xae, 0xee, 0xa9, - 0x49, 0x3d, 0x2e, 0xa8, 0x6d, 0xb1, 0x95, 0xe7, 0xc5, 0x12, 0xe9, 0x78, - 0xd4, 0xe8, 0x63, 0x7d, 0x1f, 0x4f, 0xab, 0x87, 0x07, 0x8a, 0xfd, 0x10, - 0xe9, 0xa4, 0x05, 0x7d, 0x30, 0x58, 0xf8, 0x7a, 0x92, 0xd8, 0x12, 0xa0, - 0x6a, 0x34, 0x41, 0x7e, 0x70, 0x6a, 0x48, 0x8f, 0x4d, 0x5b, 0x11, 0x95, - 0xd8, 0x56, 0x2a, 0x68, 0xf5, 0x17, 0x68, 0xda, 0xa3, 0x0d, 0x3d, 0x06, - 0x1c, 0xc3, 0x5f, 0xec, 0x29, 0x2d, 0x8e, 0xac, 0x88, 0x2b, 0xbf, 0xfc, - 0xc5, 0x25, 0xbc, 0x14, 0x78, 0x79, 0x44, 0x44, 0xcf, 0xe3, 0x6e, 0x3c, - 0x5d, 0x17, 0xec, 0x7a, 0x97, 0x0d, 0x23, 0x5a, 0xf5, 0xbe, 0x1a, 0x57, - 0x57, 0x94, 0xec, 0xaa, 0x1b, 0x42, 0x61, 0xc3, 0xd3, 0x29, 0x44, 0x26, - 0xb5, 0x57, 0xef, 0x38, 0x5e, 0x5d, 0x78, 0xa3, 0xf6, 0x28, 0xdc, 0x8e, - 0xc4, 0x77, 0xdf, 0x78, 0x6a, 0xa5, 0x46, 0x67, 0x38, 0x5c, 0x3a, 0xc5, - 0x90, 0x4d, 0x9d, 0x45, 0xce, 0xd1, 0x02, 0xa6, 0x99, 0x41, 0xa1, 0x5c, - 0xb7, 0xe0, 0xa7, 0xec, 0x1f, 0xef, 0x84, 0x74, 0x9e, 0xdf, 0x38, 0xd5, - 0x1d, 0xab, 0xc4, 0x6d, 0xfa, 0x0a, 0x2e, 0x66, 0xab, 0x45, 0xe0, 0x8a, - 0x9f, 0x5f, 0xfb, 0x2d, 0x57, 0xfa, 0x50, 0x0a, 0xd7, 0x98, 0x75, 0xc5, - 0x03, 0xe5, 0xf7, 0xa3, 0xec, 0x26, 0x3b, 0x98, 0x36, 0x02, 0x99, 0xfd, - 0x45, 0x01, 0x9d, 0x15, 0x4f, 0x75, 0x77, 0x13, 0x43, 0xd7, 0xe9, 0x84, - 0x14, 0x0c, 0x36, 0xdc, 0xe9, 0x8c, 0x96, 0x39, 0x7d, 0x58, 0x38, 0x31, - 0x3e, 0xa4, 0x15, 0xba, 0xec, 0x5d, 0xdb, 0x8f, 0xee, 0x05, 0xda, 0xbe, - 0x87, 0xb7, 0x47, 0x9c, 0x8b, 0x4f, 0xcc, 0x53, 0xf1, 0xc0, 0x96, 0xba, - 0x6c, 0x81, 0xda, 0x56, 0x80, 0x57, 0x71, 0xb7, 0xa1, 0xa3, 0xfb, 0xb8, - 0x11, 0x07, 0xc5, 0x81, 0x3d, 0x26, 0xbf, 0x7d, 0x65, 0x6c, 0xc7, 0xd3, - 0x1c, 0x15, 0x59, 0x1d, 0x8c, 0xed, 0x55, 0xbc, 0xa3, 0x8d, 0xdd, 0x82, - 0xed, 0xdc, 0x17, 0x6a, 0xd0, 0xc7, 0x61, 0x48, 0x27, 0x14, 0xc5, 0xd7, - 0x44, 0xa2, 0x09, 0x50, 0x33, 0xac, 0xd7, 0x27, 0x1d, 0x76, 0xf4, 0xf8, - 0xa4, 0x27, 0x30, 0x94, 0x04, 0x2a, 0xaa, 0xfe, 0x99, 0xa9, 0x0f, 0x91, - 0xe7, 0xb2, 0x32, 0x13, 0xbb, 0x4f, 0xb5, 0x33, 0x89, 0x56, 0x67, 0x0f, - 0xd0, 0x69, 0x43, 0x8d, 0x43, 0xd2, 0xc0, 0x16, 0xb8, 0x9e, 0xdd, 0x07, - 0x79, 0xd9, 0x16, 0x5c, 0x21, 0x5e, 0xec, 0x5a, 0x80, 0xec, 0x57, 0x7b, - 0xa8, 0x1c, 0x9f, 0xaa, 0x10, 0xdb, 0x85, 0x01, 0x2a, 0x85, 0xda, 0x9a, - 0xda, 0x90, 0xb6, 0x81, 0x04, 0x7b, 0x89, 0x02, 0x4e, 0x84, 0xc5, 0x76, - 0x50, 0xcb, 0x7b, 0x83, 0x42, 0x54, 0xcc, 0x7b, 0x58, 0x3c, 0x6a, 0xf0, - 0x9c, 0x04, 0x5b, 0x9c, 0x13, 0x75, 0x7d, 0x04, 0x51, 0x52, 0x6f, 0xfa, - 0xb7, 0x9c, 0xf8, 0x50, 0x2f, 0xd8, 0x13, 0x18, 0x0f, 0xdf, 0x2a, 0x94, - 0x1e, 0xc8, 0x81, 0xad, 0x4a, 0xf4, 0xc1, 0xfd, 0xa2, 0xe1, 0x7a, 0xe8, - 0x26, 0x5a, 0xf4, 0xdf, 0x97, 0x7d, 0x08, 0xc6, 0x42, 0x59, 0xb1, 0x89, - 0xa5, 0xb6, 0x87, 0xc8, 0xba, 0x2a, 0xb5, 0x7e, 0x3e, 0xf0, 0x38, 0x23, - 0x3a, 0x08, 0xec, 0x17, 0x86, 0x4e, 0x46, 0x41, 0xdf, 0x74, 0xdb, 0x4d, - 0x01, 0xf6, 0x84, 0x3e, 0x0f, 0x19, 0x38, 0x28, 0x16, 0x64, 0xfd, 0x79, - 0x9c, 0xdd, 0x33, 0xc0, 0x69, 0xa7, 0x20, 0x88, 0x47, 0x88, 0xd9, 0x46, - 0x0f, 0xc7, 0x3a, 0xf1, 0xfd, 0xa8, 0xf7, 0x7c, 0x13, 0xeb, 0x59, 0x6d, - 0xee, 0x03, 0xa2, 0x25, 0x34, 0xbb, 0x83, 0x5d, 0x6c, 0x50, 0x49, 0x0f, - 0xb7, 0x5f, 0x75, 0x19, 0x7e, 0x72, 0x3f, 0x74, 0xe2, 0x31, 0x6c, 0x5c, - 0x15, 0x23, 0x67, 0x5a, 0xa8, 0x09, 0xf4, 0xab, 0xaa, 0xbf, 0x12, 0x53, - 0x6d, 0x3f, 0x76, 0x31, 0xb2, 0xe2, 0x23, 0x1a, 0xa0, 0x45, 0x53, 0xac, - 0x9d, 0x0d, 0xf8, 0x4c, 0xee, 0xd2, 0x2a, 0x83, 0x67, 0x46, 0x82, 0x18, - 0x14, 0x7e, 0x73, 0x65, 0x37, 0x34, 0x1b, 0x6b, 0x38, 0x33, 0x73, 0xd4, - 0xc7, 0x17, 0x32, 0x13, 0xeb, 0xc8, 0x6b, 0x45, 0x70, 0xa4, 0x79, 0xc7, - 0xfe, 0xf5, 0x6c, 0xa2, 0x80, 0x5a, 0xfb, 0xf3, 0xe7, 0x39, 0x76, 0xab, - 0xd0, 0xf1, 0xf0, 0x9c, 0xb9, 0x68, 0x19, 0xb1, 0x16, 0x1f, 0x69, 0x47, - 0x4e, 0x72, 0xbb, 0xd8, 0x6e, 0xa6, 0x40, 0xa0, 0xe2, 0x33, 0xf3, 0xb1, - 0xc9, 0x9f, 0x58, 0x9f, 0xb4, 0xcd, 0x80, 0x89, 0x7d, 0x1a, 0xa6, 0x16, - 0x39, 0xe6, 0x7f, 0x2f, 0xee, 0x86, 0x0a, 0xc0, 0x6c, 0x55, 0x80, 0xef, - 0x1c, 0x0f, 0x9f, 0x5b, 0x0f, 0xb7, 0x3c, 0x2c, 0x40, 0xdb, 0x75, 0xe0, - 0xe0, 0x61, 0xec, 0x0f, 0xb9, 0xf7, 0xa6, 0x79, 0x0b, 0xf4, 0x68, 0xbb, - 0x1b, 0xa2, 0x97, 0x33, 0x18, 0x3b, 0xe3, 0x56, 0x75, 0x97, 0xfa, 0xb0, - 0x02, 0x3c, 0xb2, 0x42, 0x0b, 0x37, 0xd7, 0xbc, 0x37, 0xff, 0xe1, 0x67, - 0x4e, 0x98, 0x55, 0x81, 0x82, 0x6e, 0xe1, 0xaa, 0x5e, 0x7f, 0x9d, 0x83, - 0x8d, 0x5a, 0x2c, 0x10, 0x17, 0x7f, 0x39, 0x06, 0x0c, 0x69, 0x29, 0xda, - 0x35, 0xf4, 0xdd, 0xba, 0x86, 0xfc, 0x6a, 0xd7, 0x68, 0x77, 0x64, 0x7d, - 0x47, 0xc6, 0x77, 0x2d, 0xdd, 0xc3, 0x93, 0x78, 0xb0, 0x9a, 0xda, 0xc3, - 0x4a, 0xb4, 0x9b, 0xc4, 0xff, 0x04, 0xac, 0x5b, 0x91, 0x9a, 0xeb, 0x36, - 0x3b, 0x93, 0x1d, 0x31, 0x6b, 0x44, 0x01, 0x9e, 0xb8, 0x2a, 0xb7, 0x9b, - 0x3f, 0xdf, 0xe0, 0x2a, 0x64, 0x3e, 0x7c, 0x1b, 0x42, 0x0c, 0x99, 0xea, - 0xff, 0xfa, 0x7f, 0xfd, 0xe7, 0x62, 0x87, 0xa6, 0x3f, 0xcb, 0xa2, 0xff, - 0x4c, 0xa6, 0xdd, 0x80, 0x14, 0x58, 0x90, 0x7a, 0xaf, 0x77, 0x59, 0x9f, - 0xcc, 0xdf, 0x97, 0x9f, 0x88, 0x2b, 0xf4, 0xca, 0xfd, 0x51, 0xc9, 0x48, - 0x0b, 0xb0, 0xf7, 0x37, 0x02, 0xec, 0x94, 0x30, 0xf8, 0x99, 0xb3, 0x26, - 0x4b, 0x59, 0x81, 0xa6, 0x3c, 0x91, 0xf9, 0x58, 0x21, 0x05, 0xe8, 0xd3, - 0xfd, 0x88, 0x49, 0x72, 0xb9, 0x39, 0xa7, 0xff, 0x6c, 0xa4, 0x11, 0x2d, - 0xac, 0xd6, 0x03, 0x7e, 0xfc, 0x50, 0xf1, 0xa7, 0x60, 0x50, 0xf8, 0x29, - 0x72, 0x48, 0x20, 0x49, 0x55, 0xcf, 0x78, 0x4e, 0x49, 0x1e, 0xda, 0x36, - 0x3f, 0x15, 0xf9, 0x1f, 0xff, 0xd7, 0xdf, 0xb8, 0x5b, 0x24, 0x48, 0x8e, - 0x50, 0xec, 0xa5, 0x36, 0xb5, 0xae, 0x04, 0x16, 0x40, 0x54, 0x8f, 0xcc, - 0xff, 0x4f, 0xec, 0xce, 0xbf, 0x21, 0xa6, 0xfc, 0xf6, 0x99, 0x0c, 0x8e, - 0x5f, 0xde, 0xe9, 0x68, 0xe7, 0xcd, 0x11, 0xfb, 0x9d, 0x06, 0xec, 0x77, - 0xd3, 0x5b, 0x08, 0x09, 0xda, 0xd7, 0x48, 0x89, 0xa5, 0xe5, 0xa2, 0x3e, - 0x7f, 0x3e, 0xf2, 0xfc, 0x61, 0xe4, 0x19, 0x5f, 0x73, 0x6e, 0x60, 0x06, - 0x88, 0xf5, 0x1e, 0xf9, 0x78, 0xe8, 0xf8, 0x3d, 0xd7, 0xf4, 0x38, 0xbd, - 0x53, 0xa8, 0xfe, 0xa2, 0x0a, 0x6b, 0x37, 0xb4, 0x5e, 0xe4, 0xe1, 0xc7, - 0x0a, 0xa3, 0x3c, 0x63, 0x95, 0xcd, 0xad, 0xf9, 0x76, 0xf5, 0xe6, 0x1f, - 0xfe, 0xa1, 0xd7, 0x15, 0xab, 0x38, 0xba, 0xca, 0x5a, 0xb5, 0x84, 0x66, - 0xff, 0x6d, 0x59, 0xa5, 0xd0, 0xa4, 0xba, 0xee, 0x6a, 0x91, 0xc5, 0x1c, - 0xb2, 0x66, 0x35, 0x75, 0xf1, 0x92, 0x0a, 0x54, 0xbb, 0x1b, 0x14, 0x87, - 0x0a, 0x27, 0x3f, 0x53, 0xf8, 0xaf, 0x03, 0xc3, 0x88, 0x31, 0xae, 0x1d, - 0xd8, 0x76, 0xc0, 0x8c, 0xf8, 0x0e, 0x98, 0x92, 0xa6, 0x8f, 0xa4, 0xab, - 0xf9, 0x39, 0xc8, 0x3b, 0xd4, 0x7a, 0x33, 0x18, 0x2a, 0x09, 0xcc, 0xa8, - 0x5b, 0x63, 0x16, 0x43, 0x57, 0xc6, 0x54, 0xc8, 0x1b, 0xda, 0x78, 0x93, - 0x2a, 0x5e, 0x42, 0xa9, 0xe5, 0x0f, 0x9d, 0xbc, 0xa1, 0x90, 0x17, 0xc8, - 0x62, 0x16, 0xb7, 0xe8, 0x08, 0x1d, 0xbd, 0x54, 0xd0, 0xab, 0x40, 0x8a, - 0x25, 0x56, 0x4f, 0x1e, 0x8b, 0xa7, 0xd1, 0x2c, 0x88, 0x1c, 0xf7, 0xdb, - 0xed, 0x04, 0x12, 0xe9, 0xf3, 0x42, 0x64, 0x10, 0x14, 0xed, 0x9c, 0x26, - 0xa9, 0x33, 0x36, 0xbd, 0x2c, 0x20, 0x03, 0xe0, 0x65, 0x0e, 0x00, 0xd2, - 0xe5, 0x89, 0x65, 0x9c, 0x56, 0x72, 0xc2, 0xd5, 0x6f, 0x93, 0x38, 0xa6, - 0x2b, 0x03, 0xf6, 0xf0, 0xee, 0xf0, 0xed, 0xf0, 0xfd, 0x12, 0x45, 0x66, - 0x74, 0xbf, 0xb9, 0x26, 0x66, 0x62, 0x04, 0xa3, 0x81, 0x02, 0x25, 0xb3, - 0xb2, 0x3d, 0xd0, 0xd2, 0x13, 0x42, 0xe0, 0xa7, 0x9c, 0x0f, 0x9a, 0x6b, - 0xb9, 0xc1, 0x51, 0xb4, 0xe4, 0x10, 0x20, 0xa5, 0x7f, 0xc3, 0xf7, 0xe4, - 0x9c, 0x78, 0xac, 0x35, 0xf2, 0xf2, 0x92, 0xef, 0xcb, 0x83, 0x05, 0x53, - 0x8c, 0x64, 0xf5, 0x8c, 0x9a, 0xc1, 0xaa, 0xab, 0xf6, 0x54, 0xdc, 0x7a, - 0x20, 0x24, 0xd7, 0xf4, 0xca, 0xae, 0xa1, 0x93, 0x8e, 0xe5, 0xf6, 0x80, - 0x6b, 0x7d, 0x30, 0x31, 0xd5, 0x06, 0x97, 0xdc, 0x99, 0xc8, 0x79, 0xb5, - 0x3d, 0x12, 0xc5, 0x75, 0x7d, 0x11, 0xb6, 0x2f, 0x46, 0x16, 0x92, 0xdc, - 0x65, 0x50, 0x07, 0x46, 0xd1, 0x27, 0x3e, 0x22, 0x4d, 0x39, 0x11, 0xd5, - 0xee, 0x62, 0xc4, 0x45, 0xf3, 0x8d, 0xc9, 0x99, 0x19, 0x12, 0xeb, 0x50, - 0xa4, 0x29, 0xcc, 0xf7, 0xf2, 0x0d, 0x7a, 0x88, 0xc1, 0xe7, 0x1a, 0x6c, - 0x12, 0x58, 0x47, 0x0e, 0x28, 0x3d, 0x72, 0x92, 0xeb, 0x82, 0x06, 0xba, - 0xca, 0x7c, 0xaf, 0xe1, 0x81, 0xc1, 0x3c, 0xa9, 0xab, 0x8c, 0x05, 0x23, - 0x79, 0x1e, 0xec, 0x54, 0x46, 0xec, 0xf1, 0x14, 0x33, 0x8c, 0xef, 0x82, - 0x93, 0xd8, 0x9b, 0x22, 0xac, 0xf8, 0x41, 0x94, 0x92, 0xf5, 0x52, 0x36, - 0xc4, 0x81, 0xee, 0x90, 0x20, 0xe5, 0xfc, 0xa4, 0x7f, 0x41, 0x5f, 0x3e, - 0x38, 0xee, 0x54, 0xf4, 0xca, 0xec, 0x5c, 0xef, 0x2b, 0xc2, 0x26, 0x35, - 0xb0, 0xce, 0x65, 0xb0, 0x0f, 0xdf, 0x23, 0x77, 0xa2, 0xac, 0x22, 0xd6, - 0x68, 0xcb, 0x29, 0x4f, 0x82, 0x87, 0xad, 0xed, 0xc6, 0x30, 0x67, 0xaa, - 0x90, 0x7a, 0x46, 0xce, 0xd0, 0x61, 0x40, 0x16, 0x3e, 0x7d, 0x69, 0x89, - 0x10, 0x8b, 0x35, 0x10, 0x86, 0x6a, 0x03, 0x48, 0xa7, 0x4c, 0x4c, 0x49, - 0x59, 0xff, 0xf0, 0x8b, 0xb6, 0x32, 0x85, 0xb6, 0x06, 0xcf, 0x14, 0x87, - 0x55, 0x39, 0x4e, 0x56, 0xc5, 0x9c, 0x37, 0x57, 0x54, 0xbf, 0x5d, 0x2c, - 0x50, 0xd4, 0x1d, 0x3c, 0xa1, 0x84, 0x15, 0xc4, 0x83, 0x3e, 0x91, 0x80, - 0xda, 0xfa, 0x30, 0x90, 0x4a, 0xf4, 0xbd, 0x8b, 0x54, 0x1e, 0xde, 0x2a, - 0x52, 0x44, 0xaa, 0xe3, 0x44, 0x06, 0x06, 0xbd, 0x2f, 0xfc, 0x6f, 0xc8, - 0xad, 0x47, 0x8f, 0x34, 0x3f, 0x7e, 0x3e, 0x1b, 0x72, 0xd6, 0x58, 0x10, - 0x21, 0x11, 0xca, 0x77, 0xd4, 0x9d, 0x61, 0x40, 0xba, 0xea, 0x86, 0x04, - 0x5e, 0xa2, 0x6b, 0xb4, 0x02, 0xfc, 0xd9, 0x1d, 0x6c, 0x2e, 0x65, 0xa8, - 0xee, 0x11, 0xce, 0x15, 0x7b, 0x2a, 0x8e, 0xbe, 0x0f, 0xbd, 0x29, 0x43, - 0x36, 0xec, 0x36, 0xef, 0x0b, 0xd4, 0x00, 0xec, 0xd8, 0xc2, 0x0a, 0xf2, - 0x92, 0xdd, 0xd8, 0x85, 0x6e, 0xde, 0x67, 0x6e, 0xb7, 0x42, 0x97, 0x82, - 0x42, 0xdd, 0x54, 0x07, 0x80, 0x82, 0xc6, 0x31, 0xe6, 0x36, 0xc7, 0xdb, - 0x25, 0xa2, 0x8f, 0x6b, 0x38, 0x33, 0x89, 0xf9, 0xde, 0xe9, 0xef, 0xd3, - 0x64, 0x13, 0x0c, 0x62, 0x20, 0x80, 0xca, 0x61, 0x85, 0xb5, 0xf8, 0xe7, - 0x44, 0x21, 0x02, 0xff, 0x13, 0xf1, 0x07, 0xb8, 0x0f, 0x34, 0xdc, 0x4d, - 0x15, 0xe2, 0xe1, 0xd1, 0x27, 0xdb, 0x39, 0xf4, 0x4c, 0x12, 0x5d, 0x5e, - 0x89, 0x07, 0xb2, 0xcb, 0x20, 0xe8, 0xda, 0x34, 0x7d, 0x8e, 0x90, 0x1f, - 0xa6, 0xd0, 0xcd, 0x21, 0x7b, 0x46, 0x34, 0x3e, 0x07, 0x8f, 0xd3, 0x48, - 0x18, 0xb3, 0x33, 0x53, 0x95, 0x26, 0x4a, 0x04, 0x1f, 0x95, 0x5b, 0x4d, - 0x0d, 0x53, 0xd9, 0x30, 0x15, 0xa7, 0xd0, 0x20, 0x9e, 0x64, 0x8d, 0xb2, - 0x54, 0x14, 0xa5, 0xb2, 0x24, 0x22, 0x30, 0x13, 0xde, 0xa8, 0xae, 0xb9, - 0x44, 0xb3, 0xaa, 0xd5, 0x77, 0xd0, 0x83, 0x0a, 0x46, 0x11, 0x44, 0xe3, - 0xaa, 0xff, 0x2e, 0x78, 0x33, 0x49, 0x6e, 0xc1, 0xd0, 0xab, 0x5e, 0x17, - 0xd1, 0xe5, 0xff, 0x00, 0xee, 0x17, 0xb4, 0x86, 0x13, 0x86, 0x93, 0x31, - 0x99, 0x85, 0x33, 0x16, 0x7e, 0x72, 0x9c, 0xe2, 0x88, 0x83, 0xe8, 0xed, - 0x55, 0x38, 0x1e, 0x08, 0x86, 0x6b, 0x65, 0x1b, 0x47, 0x99, 0x78, 0xd1, - 0x2e, 0x61, 0xab, 0xb0, 0xfb, 0x1d, 0x69, 0xa8, 0xc6, 0x57, 0x0b, 0x6e, - 0xca, 0x5f, 0xad, 0x2c, 0xf7, 0x7b, 0x59, 0x39, 0xa7, 0x98, 0xa4, 0x6d, - 0x84, 0xbf, 0x40, 0x6b, 0x89, 0x98, 0x82, 0x19, 0x95, 0x83, 0xea, 0xfd, - 0xde, 0xdc, 0xb2, 0x9e, 0x91, 0x8a, 0x91, 0xe1, 0xde, 0xe4, 0xd2, 0xe7, - 0xd8, 0x51, 0x2f, 0x8f, 0xc7, 0x2a, 0x17, 0x55, 0xd9, 0xa5, 0x1e, 0x8f, - 0x76, 0xe1, 0xab, 0xeb, 0xc4, 0x93, 0x87, 0x61, 0x7d, 0x78, 0x2d, 0xec, - 0x4d, 0x8f, 0xb2, 0xfa, 0xaf, 0x87, 0x2c, 0x9d, 0xe1, 0x5c, 0xbd, 0xb6, - 0xc2, 0x05, 0x6e, 0x85, 0xc2, 0x09, 0x93, 0x16, 0xbe, 0xde, 0xc5, 0x4b, - 0xcf, 0x89, 0x0f, 0x3e, 0x6e, 0x65, 0x83, 0x03, 0xfb, 0x18, 0x7a, 0x7b, - 0x39, 0xfd, 0xad, 0x5f, 0x65, 0xd4, 0xc2, 0x47, 0x6d, 0x4e, 0x57, 0x37, - 0x38, 0x37, 0x44, 0x5e, 0xaf, 0x55, 0x34, 0x4a, 0x7b, 0xcb, 0x39, 0xf3, - 0x6f, 0xe2, 0xaa, 0xf7, 0x67, 0xe5, 0x1a, 0x87, 0x90, 0x05, 0xd3, 0x9f, - 0xf5, 0x21, 0x6a, 0xa4, 0xd1, 0x78, 0x72, 0x3a, 0x8f, 0xfc, 0x15, 0x23, - 0x94, 0x62, 0xe4, 0x22, 0x2a, 0x3e, 0x19, 0xe8, 0xb1, 0x23, 0xc8, 0xb7, - 0xbb, 0x40, 0x4a, 0x22, 0x08, 0xea, 0x7e, 0xce, 0x69, 0xdf, 0x8c, 0x39, - 0xb1, 0xc7, 0x94, 0xdb, 0xa6, 0x44, 0xae, 0xc5, 0x30, 0xd8, 0x1f, 0xfd, - 0x54, 0x58, 0xdf, 0x60, 0xcc, 0x4a, 0x9d, 0xa0, 0x6c, 0xce, 0x90, 0x5f, - 0x41, 0xa0, 0x92, 0x5e, 0x28, 0x30, 0x86, 0xaa, 0x9d, 0x3e, 0x2e, 0xdf, - 0xe5, 0x98, 0xae, 0x2c, 0x2a, 0x66, 0xa1, 0x7a, 0x21, 0x14, 0x79, 0x72, - 0x52, 0x25, 0xe6, 0x00, 0xbe, 0xf0, 0x5e, 0x90, 0xf8, 0xe3, 0x38, 0x45, - 0xeb, 0x38, 0xc5, 0xe3, 0xf5, 0x85, 0x2d, 0x0f, 0x85, 0x31, 0x0e, 0xa3, - 0x15, 0x8c, 0xb8, 0xd7, 0x36, 0xdb, 0xee, 0xb2, 0x21, 0x8e, 0x33, 0x0f, - 0x09, 0xf6, 0x19, 0x14, 0x0f, 0xbc, 0x5d, 0xf0, 0xf1, 0xc8, 0x6e, 0x5e, - 0x90, 0xb9, 0x7c, 0xf1, 0xaf, 0xc1, 0x44, 0x66, 0x52, 0xdc, 0x30, 0xa7, - 0x9c, 0xdb, 0x97, 0x2f, 0x9b, 0x44, 0x59, 0xe4, 0x5a, 0x62, 0x54, 0x74, - 0x86, 0x32, 0x38, 0x43, 0x06, 0xd1, 0xb3, 0xd4, 0xd4, 0x7b, 0xc2, 0x08, - 0xbf, 0xe3, 0xad, 0x10, 0x65, 0xe1, 0x4b, 0x84, 0x68, 0xfe, 0x4d, 0xdb, - 0x0a, 0xdd, 0x5c, 0xac, 0x4b, 0xa0, 0x0c, 0xe8, 0xcc, 0xb3, 0x62, 0x8c, - 0xdb, 0x64, 0x5a, 0x8f, 0x47, 0x9a, 0x13, 0xb6, 0x7b, 0xc4, 0x55, 0x06, - 0x9f, 0xc1, 0x17, 0xd9, 0x30, 0x4a, 0x1b, 0x53, 0xa3, 0x0d, 0x33, 0xa3, - 0x8d, 0x13, 0x23, 0x99, 0xe2, 0x50, 0xc7, 0xca, 0x7f, 0xb8, 0x35, 0xb6, - 0xbb, 0x78, 0x61, 0xf6, 0x0b, 0xe6, 0xd7, 0xf2, 0xba, 0x3e, 0xe8, 0x8a, - 0x8d, 0x00, 0x12, 0x2f, 0xf0, 0xee, 0x26, 0x00, 0x03, 0x32, 0xd0, 0xfb, - 0x0f, 0xe5, 0x52, 0x12, 0xe1, 0xff, 0x58, 0x36, 0xbb, 0xe0, 0x45, 0x18, - 0x85, 0x94, 0xc3, 0xc2, 0x33, 0xa2, 0x2b, 0x45, 0x02, 0x42, 0xfe, 0x3e, - 0xfd, 0x90, 0xb8, 0x5e, 0xbd, 0x34, 0x28, 0x1a, 0x59, 0x7c, 0x6a, 0xbe, - 0x2f, 0x2b, 0x1c, 0xf1, 0x6c, 0x0f, 0x7c, 0xd7, 0xf7, 0x87, 0xbd, 0xfe, - 0xa2, 0x3a, 0x12, 0x1f, 0x5e, 0x3f, 0xdb, 0x15, 0x14, 0xd3, 0x78, 0x85, - 0x28, 0x78, 0xd9, 0x50, 0x31, 0xbb, 0xd9, 0xe1, 0x37, 0xf8, 0xcb, 0x52, - 0x4d, 0x0c, 0xd7, 0xf2, 0x2c, 0x6b, 0xb8, 0x2b, 0xeb, 0x1f, 0x7e, 0x68, - 0x48, 0x50, 0xff, 0xdc, 0xee, 0x6a, 0xe9, 0x12, 0x21, 0xe7, 0x8c, 0xfb, - 0x4a, 0xfc, 0x0e, 0x84, 0x12, 0xed, 0x63, 0x4d, 0xb9, 0x8c, 0x95, 0x85, - 0x12, 0x7b, 0x3a, 0xc9, 0x43, 0x18, 0x33, 0xac, 0x9c, 0xa4, 0xee, 0xa2, - 0xdd, 0x89, 0xc1, 0xce, 0x1f, 0xbe, 0xd5, 0x66, 0x1e, 0x31, 0xb5, 0x85, - 0x73, 0x8f, 0xe6, 0xec, 0x3f, 0x81, 0xd1, 0x8c, 0x46, 0xff, 0xfe, 0x13, - 0xf7, 0xef, 0x23, 0x2e, 0x3b, 0x83, 0x28, 0x39, 0x4a, 0xfd, 0xaa, 0xab, - 0xea, 0xdc, 0xfe, 0xc9, 0x18, 0xd6, 0xa9, 0x3f, 0x47, 0x2f, 0xff, 0x1b, - 0x11, 0x74, 0x65, 0xdb, 0xfe, 0x62, 0x1c, 0xf0, 0x5b, 0xee, 0x82, 0x24, - 0x13, 0x0c, 0x7b, 0x87, 0x5d, 0xd7, 0xf2, 0x2c, 0x85, 0xe9, 0xa1, 0x07, - 0xb8, 0x58, 0xc5, 0x4c, 0xd0, 0x33, 0x3f, 0x44, 0x32, 0x28, 0xdc, 0xfd, - 0xea, 0x03, 0x88, 0x0d, 0x36, 0x22, 0xce, 0xc1, 0xe6, 0x50, 0x82, 0x20, - 0xcb, 0x25, 0xd2, 0x81, 0x82, 0x06, 0x90, 0x08, 0x73, 0x46, 0x98, 0x39, - 0xfe, 0x3c, 0xe8, 0x81, 0x01, 0x48, 0x94, 0x14, 0x5e, 0x97, 0xf2, 0xca, - 0x8c, 0x93, 0xbf, 0x43, 0x6c, 0x4c, 0xa6, 0x14, 0x3a, 0xeb, 0xf8, 0x10, - 0x4d, 0xb4, 0xb7, 0xc8, 0x53, 0x18, 0x92, 0x10, 0x9c, 0x83, 0x9d, 0x4c, - 0x6d, 0x2d, 0x29, 0x46, 0x8c, 0x66, 0xae, 0xb7, 0x30, 0x05, 0x63, 0x52, - 0xd2, 0x1c, 0x8e, 0xa5, 0x8b, 0x45, 0x8c, 0xe8, 0x70, 0x87, 0x1b, 0x6e, - 0x24, 0x4b, 0x55, 0x61, 0x06, 0x54, 0x15, 0xca, 0xce, 0x1c, 0x82, 0x88, - 0x8e, 0xdb, 0x08, 0xa4, 0xac, 0x7f, 0xf8, 0x75, 0x96, 0xdf, 0xe9, 0x8b, - 0x61, 0x9f, 0x69, 0x1c, 0x07, 0x8f, 0xb8, 0xcf, 0x18, 0xcf, 0x8f, 0xac, - 0x59, 0x3c, 0xf3, 0x48, 0x4b, 0x7a, 0x1f, 0xe3, 0xa6, 0xe2, 0xd5, 0xcb, - 0xf5, 0x99, 0xf2, 0x10, 0xfa, 0xe1, 0x17, 0x39, 0xd4, 0xa3, 0xe5, 0x27, - 0x51, 0x1a, 0x8f, 0x52, 0x5f, 0xd9, 0xef, 0x95, 0xdc, 0x91, 0x42, 0x63, - 0xbd, 0x69, 0x6f, 0x13, 0x41, 0xb7, 0xe6, 0xd3, 0x18, 0xc3, 0x9e, 0x98, - 0x13, 0x2f, 0x7b, 0xfb, 0xc2, 0xe0, 0x38, 0x11, 0x26, 0x07, 0x0d, 0x85, - 0x6c, 0x2c, 0xa0, 0xa0, 0xce, 0xf9, 0x30, 0x18, 0x66, 0x88, 0x6e, 0x3b, - 0x45, 0xd0, 0x63, 0xa0, 0xa0, 0xed, 0xe1, 0xcb, 0xfb, 0xe6, 0xb6, 0xed, - 0x98, 0xa7, 0x28, 0x3c, 0xf2, 0x4b, 0x3d, 0x4a, 0xfb, 0x73, 0x8b, 0x79, - 0x06, 0xe6, 0x85, 0xa2, 0x42, 0x3b, 0x50, 0x81, 0x67, 0x14, 0xd2, 0x45, - 0x44, 0x14, 0xc6, 0xe7, 0x4e, 0xcf, 0xfa, 0x6e, 0x40, 0x28, 0xfd, 0xec, - 0x32, 0x31, 0xe9, 0x33, 0xe6, 0x81, 0x9a, 0x8c, 0xfb, 0x80, 0x6f, 0xa0, - 0x25, 0x96, 0x7f, 0x4a, 0x92, 0x3b, 0x93, 0x74, 0xeb, 0x4e, 0x8a, 0xf1, - 0xd6, 0x09, 0x62, 0x00, 0x33, 0x21, 0x03, 0xc8, 0x34, 0x6a, 0x6c, 0xf0, - 0x35, 0x3d, 0xf2, 0x53, 0x50, 0xae, 0x3e, 0x1c, 0x34, 0x5e, 0x96, 0xcf, - 0xe4, 0xc3, 0x0b, 0xd9, 0x3a, 0xf5, 0x6f, 0x43, 0x58, 0xa9, 0x31, 0x82, - 0x11, 0xd7, 0x7c, 0x55, 0x24, 0x1a, 0xcf, 0x64, 0xc4, 0x0a, 0x67, 0xb2, - 0xd2, 0xb7, 0x80, 0x74, 0x6e, 0xd4, 0xd6, 0x98, 0x38, 0x43, 0x7a, 0xea, - 0x6a, 0x50, 0xd3, 0x1d, 0x9f, 0x17, 0x6f, 0xbb, 0xf3, 0x9b, 0xd1, 0xbe, - 0xe1, 0xe2, 0x8f, 0x7c, 0x9a, 0x16, 0x64, 0x42, 0x7f, 0x96, 0x53, 0x4e, - 0x9b, 0x3b, 0xdc, 0x0b, 0x7b, 0xab, 0xea, 0xfb, 0xf5, 0x98, 0xe7, 0x25, - 0x3e, 0x9a, 0x4a, 0x3c, 0x88, 0xc0, 0x08, 0x23, 0xea, 0x33, 0x19, 0xfb, - 0xbc, 0x88, 0xa1, 0xaa, 0x88, 0x33, 0xd6, 0xf0, 0x79, 0x07, 0x62, 0x6c, - 0x91, 0x3f, 0x83, 0xf3, 0xb2, 0xf7, 0x70, 0xdf, 0x51, 0xe9, 0xe7, 0xc9, - 0xb5, 0x87, 0xc2, 0x70, 0x3e, 0xcf, 0xc8, 0x88, 0xdb, 0x1b, 0xa7, 0x59, - 0xf9, 0x64, 0x8c, 0xc2, 0x37, 0xe5, 0x3c, 0x53, 0x97, 0x54, 0xc2, 0x30, - 0x5b, 0x7e, 0x4e, 0x65, 0xfd, 0xc3, 0x2f, 0xca, 0xe5, 0x14, 0x65, 0x28, - 0x27, 0x36, 0x2b, 0x15, 0x33, 0xd2, 0x19, 0x31, 0x6a, 0x8c, 0x97, 0x46, - 0x18, 0xaa, 0xa6, 0xe1, 0x51, 0x4c, 0xb8, 0xd1, 0x63, 0x88, 0x6d, 0x6b, - 0xc6, 0x19, 0x5c, 0x45, 0x0a, 0x66, 0xfb, 0xc1, 0x5c, 0xa6, 0x63, 0xc6, - 0xdd, 0x22, 0x70, 0xa3, 0x23, 0x9b, 0x74, 0xbe, 0xf9, 0x78, 0x89, 0xcf, - 0x9e, 0xb6, 0x39, 0xe4, 0x68, 0xdb, 0xdd, 0xfb, 0x46, 0x39, 0x00, 0x61, - 0x18, 0xe5, 0x3a, 0x0f, 0x0b, 0x28, 0x94, 0x20, 0xb8, 0xa7, 0xf1, 0x56, - 0x49, 0xb8, 0x7f, 0x67, 0xf7, 0x6f, 0xba, 0x47, 0x17, 0xef, 0xd1, 0xbf, - 0x15, 0x22, 0xfd, 0x1e, 0xfb, 0x76, 0x9d, 0x6a, 0x6e, 0x40, 0x7a, 0xc4, - 0x16, 0x96, 0x7d, 0x18, 0x3f, 0x5e, 0x36, 0xc5, 0x0c, 0xc3, 0x4e, 0x25, - 0x98, 0x93, 0x95, 0xde, 0x39, 0xe0, 0xf4, 0x5e, 0x98, 0x57, 0x4b, 0xdb, - 0x7c, 0x3d, 0x6d, 0x9a, 0xbb, 0xf1, 0x29, 0xe4, 0x95, 0x36, 0xd0, 0x27, - 0x29, 0x5f, 0x23, 0x47, 0x12, 0x4a, 0xcf, 0xe1, 0xcf, 0x6a, 0x56, 0xf6, - 0x1c, 0xdf, 0x5c, 0xdd, 0x8e, 0x62, 0xec, 0xd4, 0x8e, 0x5b, 0x49, 0x41, - 0x4c, 0x40, 0xd7, 0x13, 0x75, 0x86, 0x54, 0x8d, 0x7a, 0x40, 0x2a, 0x7e, - 0x55, 0x22, 0xbb, 0x66, 0x8a, 0xfa, 0x53, 0xbf, 0x96, 0x19, 0xdb, 0x98, - 0x45, 0x86, 0x04, 0xf4, 0x52, 0xf6, 0x99, 0x49, 0xca, 0x49, 0xf9, 0x1f, - 0x3c, 0x39, 0xda, 0x41, 0x0f, 0x14, 0x3c, 0xe2, 0x2b, 0x31, 0xba, 0x98, - 0x74, 0xd2, 0x9c, 0x5e, 0x69, 0x24, 0x79, 0x71, 0x20, 0x79, 0xc5, 0x38, - 0xf2, 0x5a, 0xf6, 0xe8, 0xf3, 0x4a, 0x6e, 0x40, 0x0c, 0xd1, 0x2e, 0x74, - 0xc5, 0x89, 0xd0, 0x8b, 0x63, 0xc3, 0xcb, 0x36, 0x71, 0xc4, 0x96, 0x3a, - 0x93, 0xa9, 0xdc, 0x36, 0x79, 0xf9, 0x45, 0x2f, 0x85, 0x5c, 0xb1, 0xff, - 0x5c, 0xbe, 0x13, 0xe4, 0xef, 0x0d, 0x00, 0x1d, 0xf2, 0xe7, 0xf2, 0x4d, - 0x14, 0xbb, 0xf7, 0x3f, 0x17, 0xec, 0x2d, 0xfd, 0x5c, 0xac, 0xa6, 0x7d, - 0xf9, 0xff, 0xe3, 0xdf, 0x98, 0x9f, 0x6f, 0xbd, 0xf3, 0x25, 0xc8, 0x9b, - 0xd2, 0x97, 0x23, 0x73, 0x46, 0xcc, 0x4a, 0xfa, 0x45, 0x7d, 0xff, 0x5a, - 0xa5, 0x7c, 0xe1, 0x55, 0x11, 0xe0, 0xf1, 0xbf, 0xa4, 0xef, 0xf9, 0x17, - 0xf9, 0xeb, 0xe2, 0xdb, 0xa9, 0x0a, 0x5a, 0x82, 0x56, 0xc4, 0xaf, 0x8b, - 0x49, 0xcd, 0x38, 0x82, 0xe3, 0x03, 0x91, 0xd8, 0x0e, 0x5f, 0x68, 0x86, - 0xaf, 0x0b, 0x32, 0x5c, 0xe5, 0xd2, 0x11, 0xbd, 0x95, 0xb9, 0xc7, 0xb5, - 0xfa, 0x01, 0xc7, 0xc4, 0x0c, 0xfd, 0x8d, 0xc4, 0x65, 0x43, 0xc4, 0x1d, - 0xfd, 0x65, 0xfb, 0x72, 0x21, 0x5d, 0x45, 0x18, 0x64, 0x26, 0xfc, 0x66, - 0xea, 0xfb, 0x0e, 0xb7, 0x9d, 0x4f, 0xb1, 0xf7, 0x78, 0x8a, 0x03, 0x1b, - 0x1f, 0x0a, 0xff, 0x1c, 0xb6, 0xaf, 0x8b, 0x2f, 0xd8, 0x05, 0xd3, 0x91, - 0x29, 0xb4, 0x07, 0x46, 0x94, 0x89, 0x59, 0xbe, 0xd6, 0x98, 0x6d, 0xc3, - 0xaa, 0xc1, 0x60, 0xc2, 0xbb, 0x81, 0x1e, 0x69, 0xa5, 0xd2, 0x9c, 0x8b, - 0xff, 0x98, 0xd7, 0xf9, 0xb4, 0x26, 0xfe, 0x92, 0xcf, 0x6d, 0xf7, 0x9d, - 0xac, 0x49, 0x54, 0x81, 0x1f, 0x03, 0x29, 0xfb, 0x23, 0x23, 0x28, 0xb2, - 0xe1, 0xeb, 0x0c, 0xae, 0x1d, 0x55, 0xd4, 0x91, 0x65, 0xa7, 0x57, 0xec, - 0xf4, 0x18, 0xa1, 0x3b, 0x5a, 0x77, 0xc1, 0xb0, 0x2b, 0xc8, 0x87, 0x8d, - 0xaf, 0xc5, 0xcf, 0x26, 0xdd, 0x10, 0xa3, 0x01, 0x46, 0x60, 0x8a, 0x0b, - 0x7a, 0x31, 0x74, 0x3e, 0x2a, 0xea, 0xe1, 0xdd, 0xad, 0x66, 0x96, 0xcb, - 0x40, 0xb0, 0xd1, 0x7d, 0xd3, 0x58, 0x31, 0xf6, 0x46, 0x9c, 0x58, 0xbd, - 0x2c, 0xd7, 0x6f, 0x96, 0xe3, 0xba, 0xd6, 0x81, 0x2c, 0xe4, 0xce, 0x9c, - 0xe7, 0x31, 0xdf, 0x23, 0xff, 0xf4, 0x0b, 0x1e, 0x5f, 0x80, 0x0b, 0xfa, - 0xff, 0x72, 0x2b, 0xdb, 0x46, 0xf8, 0xb7, 0x20, 0xbd, 0x5b, 0x93, 0x3d, - 0x5a, 0x27, 0xf7, 0x82, 0x53, 0xc9, 0x89, 0x45, 0xb8, 0x17, 0x39, 0x3d, - 0x1e, 0x6a, 0x48, 0xc2, 0x20, 0xdc, 0x1a, 0xce, 0x22, 0x26, 0x1e, 0xe8, - 0xfe, 0x0a, 0x91, 0xc6, 0xf3, 0xf2, 0x22, 0x8c, 0x1a, 0x7c, 0x2e, 0xab, - 0x83, 0xba, 0xde, 0x58, 0x35, 0x42, 0xbc, 0x72, 0x56, 0xd4, 0xc1, 0x1a, - 0x27, 0x5c, 0x46, 0x90, 0x9a, 0x88, 0xbd, 0xd6, 0x73, 0x01, 0x7e, 0x2c, - 0xbe, 0x4a, 0x15, 0x4b, 0x84, 0x18, 0xe3, 0x60, 0x95, 0x50, 0xd0, 0x56, - 0x2f, 0x78, 0xe0, 0x3d, 0xb2, 0xc4, 0x0a, 0x49, 0x4c, 0x16, 0xde, 0x7d, - 0x01, 0x04, 0xec, 0xc9, 0x29, 0xf1, 0xb1, 0x42, 0x49, 0x4f, 0xa1, 0x7a, - 0x44, 0x77, 0x8b, 0x87, 0x4a, 0xc4, 0x16, 0x04, 0xc0, 0x05, 0x8e, 0x22, - 0xbb, 0x60, 0x31, 0xff, 0x37, 0x16, 0xe8, 0xcb, 0x0e, 0xea, 0x7e, 0x6d, - 0xb9, 0xa0, 0xc8, 0x22, 0x00, 0xe8, 0xf0, 0x5c, 0x16, 0xac, 0x64, 0x94, - 0x6c, 0x81, 0x2d, 0xf5, 0xb3, 0x2c, 0x0c, 0xbb, 0x2d, 0x97, 0x46, 0x5c, - 0x1a, 0xfb, 0xb2, 0x5c, 0x4e, 0x42, 0xe1, 0x4f, 0xb3, 0x16, 0xa0, 0xf0, - 0xa8, 0xdf, 0x5e, 0xed, 0xe7, 0x5c, 0xb3, 0x89, 0xb0, 0x9f, 0x87, 0xe9, - 0xbe, 0x01, 0xfb, 0xe5, 0x99, 0x74, 0x2c, 0x30, 0x0c, 0xa2, 0x0c, 0x2a, - 0xdd, 0x08, 0x77, 0xbe, 0x4f, 0xaa, 0xa4, 0x85, 0x08, 0xf0, 0x87, 0xa3, - 0xa4, 0x42, 0x24, 0xf1, 0x53, 0x64, 0x7b, 0x1c, 0x1e, 0x4a, 0xc2, 0xab, - 0xf3, 0x09, 0x14, 0xd3, 0x83, 0xa5, 0x29, 0x18, 0x48, 0x8a, 0x4b, 0xd4, - 0x09, 0x9c, 0xdd, 0xde, 0x13, 0x54, 0xe8, 0xb1, 0x0a, 0x8f, 0xfa, 0x04, - 0xda, 0x63, 0x43, 0x94, 0x5c, 0x21, 0x46, 0x5e, 0x37, 0xca, 0xa8, 0x88, - 0x43, 0x7c, 0xc1, 0x73, 0x08, 0x40, 0x40, 0x8c, 0xbc, 0x25, 0x5d, 0x1e, - 0x57, 0x1a, 0xbb, 0x8b, 0x5f, 0xc5, 0x55, 0x79, 0x0b, 0x44, 0x9f, 0x91, - 0xf3, 0xb1, 0x1d, 0x40, 0x36, 0xe6, 0xbe, 0x56, 0x7e, 0xab, 0x14, 0xed, - 0xc0, 0x98, 0x98, 0x0a, 0xa4, 0x9b, 0xa7, 0x22, 0x5f, 0x95, 0x27, 0x1c, - 0xf7, 0x6f, 0x94, 0x6a, 0x95, 0x05, 0xc9, 0xc2, 0xd0, 0x27, 0x9d, 0xff, - 0x30, 0x8e, 0xac, 0x31, 0xca, 0x29, 0x44, 0x7a, 0x70, 0x82, 0xe8, 0xc1, - 0x84, 0x5b, 0x9c, 0xbf, 0x3b, 0x43, 0x20, 0xc1, 0x0c, 0x16, 0x05, 0x11, - 0x18, 0xce, 0xb7, 0x88, 0x8b, 0xe1, 0x04, 0xaf, 0xca, 0x8a, 0x75, 0xc6, - 0xd7, 0xca, 0xd3, 0xa4, 0x09, 0x4d, 0x91, 0x4c, 0x30, 0xa4, 0x35, 0x3b, - 0x27, 0xa1, 0x99, 0x71, 0x36, 0xc8, 0x4e, 0xb7, 0xd6, 0x39, 0x4b, 0xbe, - 0x05, 0x06, 0xaa, 0xb7, 0xb7, 0x03, 0x54, 0x49, 0x3d, 0xcf, 0x4f, 0x8c, - 0x84, 0x71, 0x16, 0xa1, 0x52, 0xb8, 0x40, 0x3f, 0xda, 0x50, 0xab, 0x0f, - 0xd9, 0xeb, 0xe0, 0x21, 0x9b, 0xe2, 0x70, 0x45, 0x22, 0x54, 0xd3, 0x62, - 0x04, 0x29, 0x8e, 0x86, 0x72, 0x8e, 0xa8, 0x37, 0x9d, 0x59, 0x7a, 0x5f, - 0xab, 0xfc, 0x7a, 0x54, 0xb6, 0x99, 0x20, 0x7f, 0xd4, 0x7a, 0xc1, 0x42, - 0xe8, 0xab, 0x7e, 0xf9, 0x68, 0x52, 0x6f, 0x85, 0xc0, 0xbd, 0x44, 0x78, - 0x4f, 0x7e, 0xf1, 0xaa, 0xd5, 0x92, 0xb3, 0xb0, 0xa1, 0xb7, 0xae, 0x51, - 0x6b, 0x75, 0x45, 0x56, 0xdb, 0x57, 0x14, 0x60, 0xfb, 0xba, 0xf8, 0x9c, - 0x54, 0xb0, 0x3b, 0x46, 0x63, 0x56, 0xb4, 0x25, 0x3a, 0x14, 0xac, 0x11, - 0x0b, 0x34, 0xd5, 0x6c, 0x8a, 0xe0, 0xd4, 0xf8, 0x82, 0x57, 0xfe, 0xa2, - 0xc0, 0x6d, 0xf7, 0x1f, 0x4b, 0xb9, 0x35, 0x0c, 0x3c, 0x0a, 0x11, 0x0a, - 0x5d, 0xa5, 0xc2, 0x6e, 0xbf, 0xe2, 0x27, 0x93, 0xed, 0x3c, 0x5e, 0xff, - 0xe2, 0xe8, 0x56, 0x07, 0x8b, 0x29, 0xcd, 0x80, 0x3a, 0x10, 0x89, 0x5a, - 0xd4, 0xe9, 0xcf, 0x6d, 0x5d, 0x30, 0x11, 0xff, 0x62, 0xc6, 0xcc, 0xf5, - 0x07, 0x95, 0xf8, 0xf6, 0x47, 0xb2, 0xbb, 0xfa, 0xfe, 0x58, 0x0d, 0x1a, - 0xa9, 0x15, 0x3f, 0xf0, 0xe1, 0x69, 0x1c, 0xe6, 0x5a, 0xbc, 0x9f, 0x0a, - 0x19, 0x00, 0xe5, 0x12, 0x54, 0x00, 0x75, 0x69, 0xa0, 0xbf, 0xee, 0xf0, - 0xb3, 0x32, 0xc2, 0xcf, 0xfe, 0x36, 0xf0, 0x67, 0xc3, 0x86, 0x5e, 0x7a, - 0x43, 0x6b, 0xb4, 0x78, 0x9b, 0x1b, 0xbf, 0xb3, 0x13, 0x7d, 0xa7, 0x00, - 0x78, 0x77, 0x5a, 0xfe, 0xfa, 0xb4, 0xf8, 0xf6, 0x28, 0x64, 0x18, 0x77, - 0x5a, 0x22, 0xd9, 0xe5, 0xcf, 0x0a, 0xb0, 0x78, 0x1d, 0xc9, 0x2d, 0x2f, - 0xa4, 0xe2, 0x5b, 0x28, 0x02, 0x90, 0x42, 0xc1, 0xeb, 0xa7, 0x02, 0x5c, - 0x11, 0x12, 0x53, 0x86, 0x89, 0x50, 0x47, 0x65, 0xb9, 0xe3, 0x17, 0x2e, - 0xde, 0x7e, 0x76, 0xc8, 0xbc, 0xc3, 0x75, 0x35, 0xfb, 0x32, 0x8a, 0xb7, - 0x8d, 0x39, 0xd1, 0xff, 0xec, 0x4c, 0xb2, 0x77, 0xcf, 0xb0, 0x46, 0xcd, - 0xd4, 0xcb, 0x4d, 0xcc, 0x67, 0x65, 0x1c, 0x3e, 0xcc, 0xa5, 0x5e, 0x59, - 0x81, 0x7c, 0x85, 0x5a, 0xfd, 0x5e, 0xf0, 0x6b, 0xb5, 0x5f, 0xf7, 0x3f, - 0x78, 0xd5, 0x5b, 0x20, 0x94, 0x29, 0x75, 0x4c, 0xc3, 0x36, 0x79, 0x6a, - 0xec, 0x99, 0x6e, 0xa8, 0xd6, 0xd0, 0x89, 0x68, 0x03, 0xd3, 0x5d, 0xd1, - 0x0c, 0xc5, 0x3a, 0x1b, 0x18, 0x71, 0x39, 0xdf, 0x12, 0xd0, 0x09, 0x3d, - 0x36, 0x87, 0x22, 0xb5, 0x14, 0x1f, 0x10, 0x01, 0x71, 0x1c, 0x2b, 0x08, - 0x5f, 0xef, 0xb1, 0x1d, 0xee, 0xa6, 0x06, 0xc9, 0xed, 0xfd, 0x18, 0xec, - 0xb3, 0x63, 0x47, 0x23, 0x0d, 0x51, 0x39, 0xe4, 0x71, 0xea, 0xdb, 0x5b, - 0x61, 0xf8, 0xa9, 0xcd, 0xd7, 0x98, 0xaf, 0xf7, 0x6e, 0x12, 0xb0, 0x42, - 0xe6, 0xdc, 0x95, 0xfb, 0xa3, 0x93, 0x3e, 0xd6, 0x0b, 0xdf, 0xb0, 0xd1, - 0x50, 0x08, 0x91, 0xa3, 0xff, 0xdf, 0x20, 0x79, 0xdb, 0x2f, 0x76, 0x33, - 0xbe, 0x20, 0xf2, 0x22, 0x00, 0x19, 0xb7, 0x58, 0xfc, 0x4c, 0x6c, 0x45, - 0x88, 0xd1, 0x62, 0xb4, 0xb3, 0xe3, 0x97, 0xa9, 0x9c, 0x72, 0xc9, 0xf0, - 0xc4, 0xd7, 0x77, 0xc8, 0x3e, 0x9e, 0x87, 0x3e, 0x39, 0xe1, 0x1f, 0x32, - 0xc5, 0x40, 0x85, 0xc5, 0x14, 0x66, 0x42, 0xca, 0xf9, 0x7c, 0x8d, 0x37, - 0x93, 0xf4, 0xba, 0xbb, 0x5e, 0xbe, 0x3c, 0x2d, 0x3d, 0x3e, 0x30, 0x20, - 0x06, 0x39, 0x70, 0xee, 0x28, 0xfd, 0xc8, 0xd7, 0x7c, 0x57, 0x5f, 0x6b, - 0x5f, 0x2f, 0xff, 0xea, 0x8a, 0xe8, 0xf2, 0x15, 0xef, 0x08, 0xba, 0x5e, - 0x2f, 0x6d, 0x09, 0x82, 0x65, 0x80, 0xe2, 0x9d, 0x90, 0x52, 0x66, 0x4e, - 0x7a, 0xf6, 0xe9, 0x4c, 0x38, 0xed, 0xb2, 0xaa, 0xc6, 0x89, 0x9b, 0xcf, - 0x08, 0xc5, 0x00, 0xc4, 0x57, 0x8b, 0x58, 0xdf, 0x00, 0x2b, 0x01, 0x8b, - 0xb0, 0xfa, 0xe7, 0x6f, 0xc2, 0xcd, 0x7f, 0x52, 0x9a, 0xae, 0x75, 0x46, - 0xf1, 0xd8, 0xf6, 0x92, 0xbc, 0x84, 0x22, 0x95, 0x0d, 0x6b, 0xc9, 0xab, - 0xcc, 0xb1, 0xee, 0x2b, 0xab, 0x61, 0x3b, 0x64, 0x0f, 0x1b, 0x05, 0xf6, - 0x4e, 0x28, 0xe0, 0x59, 0xa3, 0x7c, 0x22, 0xc0, 0xf0, 0x07, 0x7c, 0x5d, - 0xe2, 0xd9, 0xd5, 0xec, 0x4e, 0xb8, 0x7f, 0x7a, 0x24, 0x9f, 0x86, 0x72, - 0xa8, 0x25, 0x71, 0x07, 0xf0, 0xbe, 0x31, 0x20, 0x7e, 0xbf, 0x59, 0xd8, - 0x9d, 0x6e, 0x3a, 0xea, 0x86, 0xc9, 0x71, 0xc3, 0x07, 0x13, 0xc1, 0x7e, - 0xde, 0x84, 0x2f, 0x1c, 0xeb, 0xc3, 0x22, 0xb9, 0xa1, 0x2b, 0x2b, 0x43, - 0xef, 0xd8, 0x33, 0xfc, 0xc1, 0xdf, 0x86, 0x6a, 0x50, 0x3b, 0x94, 0x85, - 0x89, 0x14, 0xea, 0xff, 0x08, 0xfa, 0x17, 0x9e, 0xa9, 0xf9, 0x9d, 0x31, - 0x9d, 0x56, 0x52, 0xae, 0x27, 0x0f, 0x2b, 0x8d, 0x20, 0xce, 0x39, 0x50, - 0x01, 0x07, 0x37, 0x0e, 0x05, 0x97, 0x9a, 0x31, 0x52, 0x09, 0x81, 0x3b, - 0x10, 0xe6, 0x66, 0xcc, 0x9b, 0xff, 0xc0, 0x15, 0x33, 0x10, 0x8f, 0xd3, - 0x54, 0x20, 0xe1, 0xfc, 0x60, 0x28, 0x4a, 0x33, 0xf9, 0xec, 0x20, 0xc9, - 0xc7, 0x2d, 0xca, 0x05, 0x21, 0xbb, 0x01, 0x2c, 0xac, 0x77, 0x15, 0x19, - 0xf2, 0x62, 0x89, 0x1c, 0x4b, 0xca, 0x9e, 0xce, 0x7b, 0x79, 0x55, 0xf6, - 0x8b, 0x56, 0x51, 0x07, 0x72, 0xbb, 0x8c, 0x70, 0x44, 0x2a, 0x72, 0x9d, - 0x83, 0xdd, 0x42, 0x6c, 0x63, 0x02, 0x36, 0xf4, 0x81, 0x46, 0xa7, 0x5e, - 0x59, 0x75, 0xed, 0xe5, 0xe0, 0xc4, 0xd7, 0xc4, 0x20, 0xd2, 0x3d, 0x97, - 0x8d, 0x4f, 0xec, 0x43, 0xda, 0x15, 0x87, 0x0d, 0x0a, 0xe8, 0xd9, 0xfd, - 0xa7, 0x3c, 0x22, 0x82, 0x12, 0xd4, 0x38, 0x3e, 0x7a, 0x82, 0xe2, 0xdd, - 0x51, 0xb5, 0x03, 0x7a, 0x89, 0x4b, 0x24, 0x1b, 0xdc, 0x51, 0xf1, 0x20, - 0xa1, 0x75, 0x7c, 0xa5, 0x9c, 0x4d, 0xc8, 0x06, 0xe6, 0xf5, 0xc9, 0x36, - 0xe8, 0x49, 0x28, 0x08, 0xec, 0xfc, 0xf0, 0x8b, 0x90, 0xd1, 0x8c, 0x51, - 0x69, 0x3d, 0x3a, 0xf8, 0x9c, 0x77, 0x34, 0xf4, 0x67, 0x37, 0xc5, 0x1f, - 0xd0, 0x33, 0xf0, 0x0f, 0xa4, 0xda, 0xe2, 0x47, 0x79, 0xd4, 0x2c, 0xbf, - 0x03, 0x3e, 0x37, 0xc7, 0xa7, 0xc1, 0x77, 0x44, 0x95, 0x16, 0xa0, 0x34, - 0x23, 0xf5, 0xe4, 0x11, 0x3d, 0xf9, 0x75, 0x51, 0xd5, 0x78, 0x0a, 0xc5, - 0xc4, 0x2c, 0x9c, 0x0b, 0xc7, 0xe5, 0x57, 0x59, 0x13, 0xee, 0xde, 0xce, - 0x38, 0xcb, 0xbe, 0xf2, 0x24, 0x7b, 0x0e, 0xed, 0xee, 0xa2, 0x71, 0x1d, - 0xaf, 0x4b, 0x8c, 0xb0, 0x4e, 0x10, 0x5c, 0xf4, 0xe3, 0xdb, 0x56, 0x82, - 0x28, 0x23, 0xfa, 0xb2, 0x33, 0xb2, 0xab, 0x2a, 0x46, 0xc7, 0xa3, 0x2a, - 0xf1, 0xc8, 0xaa, 0x4a, 0xcd, 0xcb, 0xb7, 0xec, 0xe7, 0xc8, 0x81, 0x46, - 0x04, 0xc2, 0x69, 0xc4, 0x35, 0xf5, 0x54, 0xb9, 0x1c, 0xe2, 0x19, 0x29, - 0x42, 0x83, 0x39, 0xfb, 0x0b, 0x16, 0xc8, 0xea, 0xd0, 0x50, 0xc4, 0xb5, - 0x9b, 0xba, 0xca, 0x5c, 0x8d, 0xb2, 0xc0, 0x78, 0xc2, 0xb6, 0x7c, 0x21, - 0x66, 0x53, 0xdb, 0xf7, 0x1e, 0xd8, 0x08, 0x4a, 0xdf, 0x78, 0x67, 0x63, - 0xf7, 0x73, 0x38, 0x47, 0x21, 0x18, 0xe4, 0xec, 0x1a, 0x29, 0x73, 0x2f, - 0xcc, 0x30, 0x3e, 0xbb, 0x42, 0xfa, 0xb8, 0x69, 0x9c, 0xe7, 0xc5, 0xa6, - 0x3c, 0x02, 0x12, 0xf2, 0x90, 0x4f, 0xb3, 0x65, 0xe2, 0xce, 0x3c, 0x28, - 0x51, 0x0c, 0x57, 0x7c, 0x03, 0x9f, 0x6a, 0x4d, 0xc5, 0xc0, 0x9a, 0x76, - 0xcf, 0xc9, 0x6f, 0x89, 0x30, 0xfd, 0xf8, 0xbe, 0x4d, 0x7c, 0x4f, 0xf8, - 0x60, 0xdf, 0x7b, 0xa6, 0x5d, 0x60, 0x23, 0x74, 0xf6, 0xfc, 0x3e, 0x32, - 0x8b, 0x9c, 0xdc, 0x36, 0x90, 0x63, 0x66, 0xb9, 0x43, 0xf2, 0xc7, 0x31, - 0x1a, 0xd3, 0x58, 0x78, 0x75, 0xa0, 0xea, 0x6f, 0xc7, 0x53, 0x3e, 0x35, - 0x51, 0xaa, 0x03, 0x8b, 0x18, 0xc1, 0x07, 0x51, 0x8f, 0x87, 0xd0, 0x33, - 0x9a, 0xff, 0x30, 0x74, 0xa4, 0xe0, 0x4c, 0xdd, 0x1d, 0x58, 0x9c, 0xf6, - 0x58, 0x08, 0xe2, 0xf9, 0x1a, 0x9f, 0x4f, 0x4e, 0x43, 0xc2, 0x79, 0xcb, - 0x98, 0x41, 0x36, 0x3e, 0x76, 0x8b, 0x82, 0xf4, 0x84, 0xc2, 0xd5, 0x2b, - 0x93, 0xe5, 0x3b, 0xfb, 0x42, 0xb0, 0x87, 0x23, 0xa5, 0x7e, 0x9c, 0x65, - 0x1f, 0x66, 0xd6, 0x63, 0xcc, 0x7a, 0x5e, 0x64, 0x0a, 0x3d, 0x98, 0xcf, - 0x78, 0x95, 0x3d, 0x1e, 0x7a, 0xb9, 0x1c, 0x4c, 0x7c, 0xe2, 0xf5, 0xed, - 0xa8, 0xd3, 0x0d, 0x2f, 0xff, 0x73, 0xe1, 0x01, 0x9e, 0x62, 0x04, 0xe0, - 0x3e, 0x95, 0xe2, 0x2d, 0x62, 0x72, 0x97, 0x5a, 0x71, 0xb8, 0xa2, 0x4f, - 0x2c, 0x51, 0xc4, 0x65, 0xf1, 0xa7, 0xe7, 0xdd, 0x11, 0x99, 0xcf, 0x62, - 0xaa, 0xec, 0x98, 0x81, 0x4f, 0x66, 0xf1, 0x8a, 0xee, 0xb0, 0xfc, 0x44, - 0x6e, 0x3f, 0xee, 0x56, 0xf0, 0x63, 0x1b, 0x65, 0x82, 0xe8, 0x83, 0xd4, - 0xca, 0x7a, 0xb3, 0x75, 0xb1, 0x42, 0x9f, 0x66, 0x0b, 0x46, 0x47, 0x2c, - 0x6c, 0xc2, 0xb2, 0xe3, 0xa1, 0xa1, 0x35, 0xd4, 0x71, 0xb8, 0x32, 0xe8, - 0xc9, 0x3e, 0x2e, 0x90, 0x78, 0x8e, 0xdd, 0x3e, 0xd8, 0x18, 0xf6, 0x11, - 0xe5, 0x29, 0xd3, 0xd1, 0x1b, 0x7b, 0x9e, 0x30, 0x7e, 0x88, 0x9e, 0x35, - 0xaa, 0xbd, 0xa2, 0x00, 0xa2, 0x63, 0xd3, 0xd3, 0xa9, 0x35, 0x3a, 0x44, - 0x65, 0x59, 0x44, 0x3b, 0xb6, 0x02, 0xbd, 0xad, 0x8f, 0x4a, 0x0a, 0x91, - 0x0d, 0x33, 0xfd, 0x06, 0xd7, 0x9d, 0x6e, 0x3b, 0xc4, 0x20, 0x4c, 0xfc, - 0x30, 0xb6, 0x00, 0xaf, 0xcf, 0x21, 0x9a, 0x1f, 0xdf, 0x0e, 0x57, 0x54, - 0x1a, 0x56, 0x39, 0xbe, 0xc5, 0x7c, 0xf5, 0x9b, 0x6b, 0x13, 0x50, 0x48, - 0xfb, 0x6a, 0xf7, 0x5b, 0x15, 0x5c, 0x39, 0xa3, 0x29, 0x0d, 0x39, 0x4d, - 0x34, 0xb8, 0x8e, 0x28, 0x7e, 0xb1, 0x39, 0x20, 0xba, 0x38, 0xe8, 0x5f, - 0xa6, 0xfd, 0x83, 0x78, 0xf5, 0x83, 0xd9, 0x77, 0x56, 0xd8, 0x26, 0xea, - 0x29, 0x5c, 0x4e, 0xc3, 0x1c, 0x54, 0x6c, 0x02, 0x15, 0x17, 0x2e, 0x91, - 0xdc, 0xa6, 0xe6, 0x38, 0x3f, 0x59, 0x4e, 0x91, 0x1a, 0x8a, 0xe0, 0xf0, - 0xc2, 0xc1, 0xeb, 0x35, 0xc6, 0x85, 0xd2, 0x97, 0x04, 0xdd, 0xb3, 0x10, - 0xfc, 0x2d, 0x3b, 0x7a, 0x9c, 0x33, 0x2b, 0xe0, 0xcb, 0xda, 0x63, 0xfe, - 0xae, 0xf8, 0x8d, 0xd7, 0x5e, 0xd9, 0xdf, 0x27, 0xb3, 0x14, 0xd7, 0x8b, - 0xff, 0xb8, 0x54, 0xb8, 0x22, 0xaf, 0x93, 0x35, 0x64, 0x5b, 0x05, 0x1f, - 0x08, 0x60, 0x0a, 0x52, 0x15, 0x36, 0x7e, 0xae, 0x14, 0xbf, 0x19, 0x93, - 0xef, 0xde, 0x7a, 0xa1, 0x8c, 0x85, 0x62, 0x84, 0x3e, 0x4f, 0xf4, 0x12, - 0xc5, 0xf1, 0x49, 0x74, 0x9a, 0xc2, 0xa5, 0x64, 0x7f, 0xe0, 0xfc, 0x76, - 0xb0, 0xa8, 0x18, 0xbc, 0xfe, 0x32, 0x81, 0x05, 0xab, 0x1b, 0x41, 0x67, - 0x76, 0x3e, 0xe9, 0xde, 0xf0, 0x9b, 0xbc, 0x5b, 0xf8, 0x22, 0xc3, 0xe5, - 0xf2, 0x8a, 0x00, 0xf7, 0x6e, 0xbf, 0x9c, 0x2b, 0x4c, 0xf8, 0x6d, 0xd5, - 0xbf, 0x8a, 0xcd, 0x6d, 0x05, 0x65, 0x33, 0xf5, 0x0b, 0x8e, 0x7f, 0x3d, - 0xcd, 0xb2, 0xb1, 0xe7, 0x08, 0x0e, 0x57, 0xe4, 0x54, 0xf8, 0xb9, 0x53, - 0x3d, 0x37, 0x9e, 0x41, 0x8d, 0x8d, 0x5e, 0x23, 0x0d, 0x1e, 0xf1, 0x5c, - 0xa2, 0xc5, 0x1e, 0x21, 0x3a, 0x91, 0x9f, 0x97, 0x29, 0xb2, 0x22, 0xd6, - 0x97, 0xbd, 0xdf, 0x90, 0x2c, 0x17, 0x80, 0x2c, 0x47, 0xca, 0x46, 0x31, - 0x3d, 0xd2, 0x14, 0x59, 0x09, 0x02, 0x71, 0xcb, 0xe0, 0x9a, 0xc4, 0xe5, - 0xae, 0xdc, 0x78, 0x9a, 0xe8, 0x11, 0x0b, 0x77, 0x23, 0x3d, 0xfb, 0xe0, - 0xc5, 0x03, 0x7b, 0x79, 0xc0, 0x95, 0x57, 0xac, 0x26, 0xb1, 0x2b, 0x23, - 0x13, 0xfc, 0x46, 0x4a, 0xbf, 0x56, 0x03, 0x15, 0x55, 0x5b, 0x4d, 0x35, - 0x93, 0x23, 0x4f, 0x14, 0xe7, 0x82, 0x57, 0x6c, 0x88, 0x5f, 0x2b, 0x6e, - 0x32, 0x5d, 0x7d, 0xeb, 0x6a, 0xfe, 0xb2, 0x9b, 0x55, 0xc8, 0x7b, 0xab, - 0xfe, 0x53, 0xcb, 0xdc, 0x8f, 0xfc, 0x26, 0x08, 0xa9, 0x59, 0x25, 0x7f, - 0x9f, 0x04, 0xc1, 0xb9, 0x80, 0xab, 0x62, 0xbd, 0x0a, 0x17, 0xa1, 0xae, - 0x95, 0xb7, 0x9e, 0xae, 0xb5, 0xf8, 0x74, 0xad, 0xce, 0x41, 0x0d, 0xdf, - 0x15, 0xc7, 0x9e, 0x0a, 0x88, 0x3f, 0x90, 0x52, 0x3c, 0x13, 0xe6, 0x6f, - 0x18, 0xd1, 0xab, 0xec, 0x01, 0x84, 0xb4, 0xbb, 0xf2, 0x23, 0x4a, 0xaa, - 0x2c, 0x42, 0x1e, 0x67, 0x49, 0x3e, 0x9d, 0x1e, 0x0b, 0x25, 0x54, 0x9c, - 0x65, 0x9f, 0xf2, 0xe1, 0x13, 0xf9, 0x2c, 0x8f, 0xe2, 0xc3, 0xb3, 0xe8, - 0x27, 0xf9, 0xdf, 0x40, 0x03, 0xc4, 0xb5, 0x04, 0xd1, 0xd1, 0xb4, 0xd3, - 0x39, 0xe6, 0xfa, 0x75, 0xc5, 0x54, 0x5f, 0x35, 0x78, 0x26, 0x67, 0x0c, - 0xf2, 0x35, 0xde, 0x14, 0x81, 0xfd, 0x93, 0x78, 0x3d, 0x6d, 0x5f, 0x7c, - 0x04, 0x81, 0xc8, 0x13, 0x2f, 0x56, 0x95, 0xf7, 0x2a, 0x45, 0x0c, 0x43, - 0x41, 0x89, 0xbf, 0xc2, 0x37, 0xc5, 0x42, 0x6d, 0x6f, 0xb2, 0x59, 0x56, - 0x22, 0x89, 0x71, 0x46, 0x8c, 0xc5, 0x5e, 0x7a, 0xd1, 0x48, 0xdd, 0x52, - 0xf9, 0xee, 0x90, 0xbf, 0x72, 0xcc, 0xa4, 0x6c, 0x38, 0xa8, 0x9c, 0xa8, - 0xd4, 0x6d, 0xc3, 0x5e, 0x38, 0x70, 0xc3, 0xa0, 0x3e, 0xf9, 0x5c, 0x45, - 0xb4, 0x78, 0x3c, 0xa7, 0xcc, 0x7c, 0xe3, 0xfe, 0x9a, 0xe2, 0x5b, 0xe4, - 0xaf, 0x0c, 0x5f, 0x2c, 0xa5, 0x27, 0x2e, 0x5e, 0x1a, 0x4d, 0x69, 0xee, - 0x51, 0x3a, 0xb9, 0xec, 0x50, 0x58, 0xb0, 0x02, 0xa9, 0x0b, 0x23, 0x23, - 0xe2, 0x88, 0xaa, 0x9f, 0xcb, 0x7f, 0x69, 0xa4, 0xe2, 0x9c, 0xc5, 0x2c, - 0x7a, 0xc1, 0x36, 0x82, 0xf7, 0x9e, 0x71, 0xc4, 0xab, 0x37, 0xac, 0x98, - 0x84, 0xec, 0x04, 0x87, 0x98, 0x9e, 0x70, 0x26, 0x0a, 0xd1, 0x72, 0x5e, - 0xce, 0x99, 0xd7, 0x48, 0xad, 0xb0, 0xc5, 0x95, 0x0a, 0x63, 0xc8, 0x56, - 0x6e, 0xd8, 0xd6, 0xd4, 0x2b, 0x8c, 0x87, 0x6f, 0xcb, 0x5e, 0x2d, 0xdc, - 0xe3, 0xfb, 0x65, 0xac, 0xd4, 0x9d, 0x95, 0xea, 0x9c, 0x81, 0xd3, 0xbe, - 0x9c, 0xb1, 0xec, 0xc3, 0xf2, 0xab, 0x69, 0x6e, 0x3e, 0xb4, 0x18, 0xe4, - 0x8e, 0x7a, 0x35, 0x96, 0x83, 0x9e, 0xe9, 0x71, 0x8c, 0xb2, 0x89, 0x65, - 0x6b, 0x06, 0x6f, 0x84, 0xc8, 0x87, 0xa7, 0x80, 0x25, 0xb2, 0x5e, 0x2f, - 0xd7, 0x08, 0xb5, 0x5e, 0xa2, 0xbb, 0x2b, 0x89, 0xac, 0x26, 0x3b, 0x2f, - 0x11, 0x10, 0x9a, 0x68, 0x3f, 0x28, 0x73, 0x36, 0x1e, 0x29, 0x2d, 0xa9, - 0x09, 0x74, 0x99, 0x45, 0xf8, 0x0b, 0x54, 0x72, 0x88, 0x92, 0x72, 0x8a, - 0x05, 0xb0, 0xb2, 0xff, 0x64, 0x54, 0x3e, 0x33, 0x2a, 0x1f, 0x9d, 0xf7, - 0xc0, 0xae, 0xbe, 0xe0, 0x8f, 0xb7, 0x31, 0x24, 0xd1, 0x8d, 0x2c, 0x9f, - 0x0c, 0xe9, 0xc9, 0x69, 0x59, 0xf6, 0x19, 0xf1, 0x62, 0x2a, 0x89, 0xd4, - 0x93, 0xb0, 0x79, 0xd0, 0xff, 0x78, 0xc7, 0x20, 0xbb, 0x7d, 0xc8, 0x9b, - 0x1b, 0x3f, 0xcf, 0x14, 0xfb, 0xfc, 0x08, 0xcb, 0x7b, 0x31, 0x64, 0x91, - 0xf2, 0x58, 0x53, 0x2a, 0x93, 0x44, 0xf3, 0xe7, 0x7e, 0x7f, 0xb0, 0xa7, - 0x7f, 0xee, 0x4a, 0x91, 0x22, 0x41, 0x59, 0x9a, 0xaf, 0x89, 0xdc, 0x18, - 0x6e, 0xb9, 0x25, 0xe7, 0x12, 0xf1, 0x71, 0x41, 0x41, 0xf1, 0x1e, 0x1b, - 0x6e, 0xa4, 0x28, 0x5e, 0xde, 0x54, 0x11, 0x72, 0x74, 0xdf, 0x91, 0x13, - 0x82, 0x59, 0x7f, 0xb5, 0xed, 0x10, 0x14, 0x5c, 0x19, 0x7d, 0x4a, 0xea, - 0x25, 0x1f, 0x0b, 0x02, 0xb0, 0x28, 0xa1, 0xd1, 0xd7, 0x47, 0x58, 0x54, - 0x8d, 0xcc, 0x50, 0x6e, 0x29, 0xa1, 0x75, 0xc4, 0x53, 0xf2, 0xc2, 0xbc, - 0x90, 0x86, 0x9e, 0x6a, 0x10, 0x61, 0x70, 0x6a, 0x0d, 0xcc, 0xf0, 0x93, - 0xb0, 0x04, 0xb7, 0x65, 0x8b, 0xe1, 0x44, 0x19, 0xe2, 0x08, 0x4e, 0xc1, - 0x62, 0x12, 0xea, 0x2c, 0x7d, 0x8c, 0xd4, 0x21, 0xe2, 0xed, 0x67, 0x8a, - 0xa7, 0xb2, 0xdd, 0xc1, 0xcb, 0x47, 0xb4, 0x10, 0xef, 0x14, 0x56, 0xd7, - 0xf4, 0xf0, 0x37, 0xec, 0xf0, 0x2a, 0x8c, 0x04, 0x72, 0xf8, 0x54, 0xbe, - 0x71, 0xfd, 0xc0, 0xa8, 0x51, 0x2a, 0xd5, 0x70, 0x5c, 0xe2, 0x19, 0x46, - 0x4c, 0x06, 0xf6, 0x7b, 0xcc, 0x19, 0x26, 0xbe, 0xa5, 0x6f, 0xc4, 0x7e, - 0x5f, 0xa2, 0x1a, 0xef, 0xd1, 0xfb, 0x15, 0x33, 0xcb, 0x3b, 0x67, 0x42, - 0x0a, 0x51, 0xd3, 0xf7, 0x98, 0xf8, 0x4c, 0x9c, 0xea, 0xf9, 0xce, 0xf1, - 0x4b, 0x60, 0x0a, 0xd3, 0xb6, 0xd4, 0x1d, 0x8c, 0xb2, 0x46, 0xee, 0xe5, - 0xbc, 0xe6, 0x24, 0xce, 0x6b, 0x2a, 0xa5, 0xb2, 0x08, 0x1a, 0x97, 0x7f, - 0xc9, 0x98, 0x6a, 0x8d, 0x3d, 0x1b, 0x63, 0x4c, 0xa4, 0x72, 0xdf, 0x46, - 0x48, 0x1a, 0x38, 0x76, 0x53, 0x7d, 0x1d, 0xb1, 0x78, 0x6f, 0x58, 0xc8, - 0x48, 0x5d, 0xe3, 0x3e, 0xce, 0xe4, 0x1e, 0xf1, 0x47, 0x8e, 0x9d, 0xbf, - 0x6e, 0xc2, 0x22, 0x46, 0x14, 0xfa, 0x11, 0x97, 0x96, 0x94, 0x71, 0x22, - 0x36, 0xf1, 0xc9, 0x18, 0x8f, 0x25, 0xa6, 0x34, 0x3b, 0x6e, 0x2c, 0xd3, - 0x73, 0x95, 0xf4, 0xfe, 0x7f, 0x1e, 0x11, 0x66, 0xe0, 0x34, 0xa7, 0x27, - 0x8f, 0x42, 0xb8, 0x03, 0x2b, 0x36, 0xdd, 0x74, 0x26, 0x4b, 0x1d, 0xda, - 0x1d, 0x22, 0xfd, 0xa4, 0xa1, 0x43, 0xf9, 0xc0, 0x17, 0x93, 0xcb, 0xa3, - 0xba, 0xff, 0xb3, 0x0b, 0x2d, 0x7c, 0xd6, 0x7f, 0x71, 0xc1, 0x85, 0x0c, - 0x39, 0xfe, 0x8b, 0x19, 0xf4, 0xfe, 0xcf, 0x74, 0x08, 0x01, 0xf6, 0x70, - 0xdf, 0x53, 0x73, 0xff, 0x8b, 0xc8, 0x7b, 0xea, 0xe5, 0x4c, 0x65, 0x8f, - 0x71, 0x71, 0xc7, 0x1d, 0x12, 0xc1, 0x35, 0xb7, 0xd1, 0xff, 0xc6, 0x92, - 0x0a, 0x28, 0x0c, 0x71, 0x4e, 0xd5, 0x45, 0xc6, 0x89, 0x80, 0xf0, 0x34, - 0x3f, 0x51, 0x4a, 0xaf, 0xe5, 0x9a, 0x1a, 0xc7, 0x18, 0x73, 0x98, 0x74, - 0x64, 0xa6, 0x3a, 0x8b, 0x52, 0x54, 0x51, 0x86, 0x85, 0xd7, 0xea, 0x4c, - 0x1f, 0x4f, 0xd3, 0x9d, 0x14, 0xf9, 0x85, 0x26, 0x25, 0xd0, 0xc8, 0xb0, - 0xc5, 0xe3, 0x9d, 0x62, 0xb7, 0x28, 0x45, 0x2b, 0xb7, 0xf4, 0x48, 0x85, - 0x42, 0x40, 0xca, 0x1e, 0xf9, 0x79, 0x70, 0x5d, 0x42, 0x70, 0xdc, 0x62, - 0x50, 0x96, 0xba, 0xeb, 0xf9, 0x31, 0x94, 0x9d, 0x31, 0x94, 0xa9, 0xba, - 0xe8, 0x8f, 0x48, 0xe5, 0x96, 0xfa, 0xdb, 0x99, 0x46, 0x3a, 0x51, 0xb9, - 0xc9, 0x27, 0x3e, 0x4a, 0x14, 0x8f, 0x37, 0x53, 0x84, 0xf4, 0x08, 0xd3, - 0x97, 0xb4, 0x28, 0x12, 0xda, 0xf6, 0x4c, 0x79, 0x81, 0xd1, 0x58, 0x1f, - 0xff, 0x61, 0xa9, 0x9f, 0xca, 0x12, 0x3d, 0x0f, 0x57, 0xc6, 0x23, 0x78, - 0x4b, 0x53, 0x2e, 0xa1, 0xe5, 0x9a, 0xd2, 0x6a, 0x79, 0xb0, 0x11, 0x1d, - 0x52, 0x1f, 0xe9, 0x8c, 0x8f, 0xa0, 0xe3, 0x3f, 0x41, 0xe9, 0x15, 0xb7, - 0x67, 0xc0, 0x52, 0x40, 0xa5, 0x51, 0xbb, 0xb8, 0x5b, 0xe3, 0x38, 0x0a, - 0x36, 0xb6, 0x9c, 0xc6, 0x16, 0x81, 0xb6, 0x1c, 0x66, 0xc3, 0x44, 0x18, - 0xe4, 0x96, 0x59, 0xca, 0x75, 0x3b, 0x82, 0xf5, 0x4b, 0x3c, 0x47, 0xbf, - 0x3c, 0xa2, 0x93, 0xf7, 0x54, 0x51, 0x6a, 0x9b, 0x3d, 0x8a, 0x60, 0xb4, - 0x7f, 0xfa, 0xa6, 0x24, 0xd3, 0xb7, 0xb7, 0xe7, 0x6f, 0xaf, 0x1a, 0x31, - 0x4e, 0xc9, 0x28, 0xed, 0x29, 0xe8, 0xb1, 0x7e, 0x26, 0x23, 0xe6, 0x8d, - 0xd3, 0xcb, 0x13, 0x06, 0x8f, 0x49, 0xd3, 0x77, 0x50, 0xe9, 0x48, 0x81, - 0x39, 0x3d, 0xdc, 0x7b, 0xfe, 0x72, 0xf7, 0x8f, 0xd7, 0xbc, 0xc7, 0x45, - 0x35, 0x67, 0x8c, 0xc4, 0xcb, 0xef, 0x57, 0x98, 0xad, 0x20, 0x7e, 0x64, - 0xc2, 0x59, 0x95, 0xe0, 0x88, 0xbd, 0xa7, 0xd8, 0xb1, 0x16, 0xdd, 0x7b, - 0xba, 0xa1, 0x09, 0xca, 0x47, 0x8e, 0x75, 0xf7, 0x1e, 0x17, 0x54, 0x40, - 0x0a, 0x4b, 0x29, 0x8a, 0x60, 0xaf, 0xb9, 0xd8, 0xe6, 0x90, 0x42, 0x0b, - 0x4d, 0x0f, 0xe9, 0x0e, 0xaf, 0xcf, 0xf0, 0xec, 0x79, 0xaa, 0x23, 0xed, - 0x23, 0xb9, 0x33, 0x27, 0x76, 0x46, 0x57, 0x34, 0x16, 0xe9, 0xc8, 0x7d, - 0x98, 0x08, 0xa9, 0xb7, 0x63, 0x22, 0x68, 0x5c, 0x96, 0x21, 0x4d, 0x59, - 0x96, 0x1e, 0x3e, 0xaf, 0x94, 0xc6, 0x2b, 0xa5, 0x50, 0xd7, 0xdc, 0x5f, - 0xe2, 0x84, 0xdc, 0x49, 0x0e, 0x29, 0x2a, 0x4d, 0xf8, 0x65, 0x35, 0x9e, - 0x4a, 0xa6, 0x34, 0xf5, 0x95, 0xf9, 0x46, 0xa5, 0x01, 0xfd, 0xb5, 0xa4, - 0xde, 0xfd, 0x5a, 0xd8, 0x38, 0xaf, 0x25, 0x3a, 0xef, 0x4b, 0xbb, 0x0d, - 0x47, 0x96, 0x99, 0xde, 0x23, 0x82, 0xb5, 0xe8, 0x10, 0x42, 0x52, 0xa4, - 0x76, 0xe6, 0x94, 0x1b, 0x97, 0x74, 0x46, 0xfe, 0x93, 0x62, 0x4f, 0x29, - 0xa6, 0xd2, 0xbe, 0x52, 0xdb, 0xbe, 0xf2, 0x7c, 0xe8, 0x95, 0x1b, 0x75, - 0xd6, 0xdb, 0x35, 0x42, 0xed, 0xd7, 0x1c, 0x7f, 0x8f, 0x49, 0xe5, 0xab, - 0xce, 0xc9, 0xc3, 0x92, 0x31, 0xe2, 0x60, 0x27, 0x72, 0xc2, 0xb9, 0xae, - 0xc9, 0x18, 0x79, 0xc4, 0x49, 0x46, 0xe5, 0xbe, 0x17, 0x3f, 0x09, 0xf5, - 0xc8, 0x5b, 0x10, 0xce, 0x10, 0xf1, 0xe0, 0x57, 0xa9, 0xb6, 0x1b, 0x8f, - 0x13, 0x48, 0xcc, 0xeb, 0x88, 0xd5, 0x06, 0xe4, 0x5b, 0x26, 0x40, 0x2b, - 0x1d, 0xef, 0x50, 0xf8, 0x72, 0xad, 0xa2, 0x17, 0xb9, 0xfb, 0xce, 0xb7, - 0xa4, 0xe2, 0xb5, 0xc8, 0x65, 0x4d, 0xdb, 0x99, 0xa3, 0x9c, 0x31, 0x21, - 0x5a, 0x3b, 0xc6, 0x8a, 0xa6, 0x9a, 0xd3, 0xe1, 0xf4, 0x12, 0x29, 0x43, - 0xa8, 0x96, 0x36, 0xd8, 0xe4, 0x5a, 0xc9, 0x25, 0xf9, 0xa4, 0x31, 0x4a, - 0xae, 0xb0, 0x1e, 0x35, 0xc6, 0x16, 0x31, 0x76, 0xc5, 0x1d, 0xb5, 0xd6, - 0xaa, 0x6c, 0x08, 0x32, 0x33, 0x65, 0xfd, 0xd3, 0x33, 0xa5, 0x64, 0x1c, - 0xef, 0x47, 0x6b, 0xdc, 0x18, 0x6d, 0x2d, 0xcd, 0x89, 0x26, 0x39, 0x7a, - 0xa0, 0xec, 0x5a, 0xe2, 0x49, 0xc6, 0xd1, 0xa3, 0x48, 0x23, 0x46, 0xfb, - 0xc6, 0xcd, 0x69, 0x91, 0x65, 0x25, 0xec, 0xbe, 0x83, 0x76, 0x76, 0x7e, - 0x5b, 0x3a, 0xc5, 0x8a, 0xe6, 0xec, 0x99, 0x67, 0x61, 0x86, 0x83, 0x44, - 0xed, 0x0d, 0xce, 0xa2, 0x87, 0x2a, 0xc2, 0x67, 0x57, 0x1c, 0xaa, 0x82, - 0xf9, 0x9a, 0x7d, 0x5b, 0xba, 0x8a, 0xe4, 0x2e, 0xf7, 0x58, 0xe0, 0x2a, - 0x97, 0x5d, 0xb8, 0x8f, 0xb4, 0x5b, 0xda, 0xa3, 0x53, 0xce, 0x4b, 0x67, - 0xca, 0xe3, 0xe4, 0x43, 0xb6, 0x31, 0x1f, 0xfc, 0x64, 0x0c, 0xbe, 0x52, - 0x43, 0x6c, 0x9b, 0xc6, 0xbe, 0xde, 0x88, 0x0d, 0xc1, 0x09, 0xfd, 0xf9, - 0x47, 0xb7, 0xee, 0xf4, 0x52, 0x9b, 0xf8, 0x1e, 0xf1, 0xc5, 0x7e, 0xf4, - 0x5a, 0xc2, 0x8d, 0xb1, 0x27, 0x44, 0x66, 0x7e, 0x1c, 0x52, 0x35, 0xb1, - 0x06, 0x51, 0xfa, 0x89, 0xb0, 0xd7, 0xdd, 0x2e, 0x62, 0x02, 0x4e, 0x81, - 0x49, 0x48, 0x4f, 0x80, 0x83, 0x9c, 0x76, 0xd9, 0x19, 0x7e, 0xf7, 0xbb, - 0x59, 0x31, 0xcb, 0x54, 0x25, 0x45, 0x81, 0xed, 0xe8, 0xa0, 0xe1, 0x6a, - 0xcb, 0xb5, 0x51, 0x34, 0xa4, 0xc5, 0x55, 0x1f, 0xc5, 0xe1, 0xea, 0x7d, - 0x40, 0xa0, 0x98, 0x9c, 0xb0, 0xec, 0x97, 0x9b, 0x99, 0x1e, 0x42, 0xb0, - 0x5b, 0x49, 0xb1, 0x6f, 0xb8, 0xcb, 0x30, 0xf1, 0x72, 0x30, 0xab, 0x7a, - 0x56, 0x26, 0x7b, 0x12, 0x85, 0xec, 0x19, 0xc4, 0x92, 0x5a, 0x31, 0xad, - 0xf8, 0x0a, 0x8f, 0x03, 0x79, 0x14, 0xdc, 0x56, 0x34, 0x18, 0xbb, 0xf9, - 0x46, 0xff, 0xfe, 0x43, 0x53, 0x2c, 0x28, 0x5c, 0xb8, 0x36, 0x8e, 0x3e, - 0x8d, 0x07, 0xa6, 0xad, 0xc6, 0xce, 0x60, 0xab, 0x3f, 0x37, 0xb8, 0xba, - 0x8c, 0xeb, 0x75, 0xce, 0xd0, 0xd8, 0x47, 0x9a, 0xcb, 0x6e, 0xcc, 0x69, - 0x9a, 0x15, 0x64, 0xe0, 0xd2, 0xf2, 0xd5, 0xf4, 0x4f, 0x07, 0x44, 0x8e, - 0x21, 0x0c, 0x7b, 0xa5, 0x30, 0xac, 0x20, 0x3c, 0x3f, 0xf6, 0xbd, 0xcc, - 0x44, 0x15, 0x1c, 0xd5, 0x5c, 0xd5, 0x07, 0x29, 0xfb, 0x92, 0x59, 0x14, - 0xd9, 0x1d, 0xfe, 0xfe, 0x3f, 0x07, 0x8b, 0xce, 0x89, 0xcd, 0x30, 0x1d, - 0x7c, 0xfa, 0x6b, 0xd5, 0x28, 0x92, 0xb8, 0x9e, 0x89, 0x42, 0x60, 0x88, - 0xa3, 0x0c, 0xba, 0xac, 0x3c, 0xf4, 0x96, 0xd9, 0xe5, 0xeb, 0x93, 0xf4, - 0xff, 0x50, 0xc4, 0x49, 0x2b, 0x3a, 0x25, 0xee, 0x1e, 0x72, 0x27, 0xaa, - 0x9f, 0xd4, 0x0b, 0x97, 0x14, 0x0d, 0x5e, 0x07, 0x9a, 0x26, 0x25, 0x40, - 0x0d, 0x98, 0x02, 0xe1, 0x8b, 0xd7, 0x43, 0x90, 0x57, 0x23, 0xb3, 0xa1, - 0xf8, 0x51, 0xec, 0xfb, 0x0c, 0x0a, 0xbe, 0x0d, 0xbf, 0x07, 0xaf, 0xc6, - 0xbe, 0x10, 0xb1, 0xc7, 0x8d, 0x48, 0x67, 0x08, 0x13, 0x33, 0xda, 0x81, - 0xc5, 0xd4, 0xe0, 0x4a, 0x4a, 0xee, 0x43, 0x60, 0xc8, 0x1b, 0x27, 0x4a, - 0x2e, 0xda, 0x0f, 0x7d, 0xbe, 0x39, 0x2c, 0xf3, 0xce, 0x7a, 0x7a, 0x63, - 0xe5, 0x7b, 0xbb, 0xe8, 0x3f, 0x9c, 0x72, 0xdd, 0x78, 0x9b, 0xed, 0x26, - 0xd7, 0x9e, 0xdf, 0x0a, 0x28, 0xef, 0x2c, 0x4a, 0x01, 0x29, 0x8d, 0x62, - 0xe4, 0x06, 0x14, 0x21, 0x5c, 0x0e, 0x6f, 0xc2, 0x1d, 0xbd, 0xf6, 0x86, - 0xa1, 0x42, 0xc1, 0xee, 0x30, 0x24, 0x7b, 0x6e, 0x54, 0x0b, 0x77, 0xa3, - 0x64, 0xe9, 0x2d, 0x54, 0xf2, 0x18, 0xb4, 0xca, 0xbc, 0xa9, 0x6e, 0x13, - 0x07, 0x08, 0x89, 0x60, 0x0d, 0x89, 0x34, 0xe4, 0xd1, 0x99, 0x43, 0x5f, - 0x12, 0x34, 0x4f, 0xbf, 0xe7, 0x77, 0x53, 0xa9, 0x39, 0x17, 0x32, 0x9f, - 0x64, 0xa7, 0x3f, 0x56, 0xb8, 0x37, 0x5c, 0x9a, 0x15, 0x00, 0xa7, 0x3f, - 0x77, 0xf9, 0xa3, 0xc3, 0x1f, 0xca, 0x33, 0x91, 0x3b, 0x2e, 0x14, 0x8d, - 0x17, 0xc8, 0x5b, 0x35, 0x93, 0xdc, 0xed, 0x07, 0xed, 0x2d, 0xb0, 0xeb, - 0x2f, 0x6e, 0x76, 0x0a, 0x62, 0xf1, 0x17, 0x1c, 0x53, 0x29, 0x42, 0xe2, - 0x5f, 0x17, 0xdc, 0x24, 0x9e, 0x58, 0x6c, 0x64, 0x44, 0x20, 0x63, 0x0c, - 0xe8, 0xf4, 0xe5, 0x89, 0x15, 0x84, 0x53, 0x29, 0xeb, 0xee, 0xf0, 0xcd, - 0xdc, 0xae, 0x7e, 0x2c, 0xae, 0x08, 0x89, 0x50, 0x88, 0x4f, 0x60, 0xf1, - 0x6b, 0x35, 0x8a, 0x5f, 0x11, 0x91, 0x4a, 0x67, 0xc4, 0xfc, 0xcf, 0x0d, - 0xc1, 0x69, 0x08, 0xc8, 0x98, 0xdc, 0xe8, 0x8f, 0x28, 0x4a, 0x11, 0x12, - 0xf5, 0x13, 0x82, 0x04, 0x8e, 0x59, 0x0a, 0xb9, 0xd2, 0xe5, 0x73, 0x0d, - 0x65, 0x29, 0x25, 0x21, 0x91, 0xfd, 0x7a, 0x61, 0xaa, 0x2b, 0x97, 0x80, - 0x46, 0x92, 0x3b, 0xd3, 0xad, 0x57, 0x56, 0x4a, 0xde, 0xf3, 0x07, 0xcd, - 0x7e, 0xd8, 0xda, 0x17, 0xda, 0x2e, 0x3d, 0x63, 0xe6, 0x0e, 0x81, 0x07, - 0x85, 0x71, 0xaf, 0x7d, 0xd2, 0x96, 0xea, 0xb1, 0x51, 0x1e, 0x52, 0x49, - 0x38, 0x1f, 0xa5, 0x03, 0x46, 0x9a, 0x13, 0xf3, 0xc1, 0x7d, 0x20, 0x99, - 0x05, 0x49, 0x69, 0x43, 0x83, 0xa6, 0xa2, 0x82, 0x07, 0xe0, 0xfe, 0xab, - 0xc1, 0x0f, 0x77, 0xa4, 0xbd, 0xe0, 0x89, 0x96, 0xc3, 0x7f, 0xd8, 0x6f, - 0xef, 0x97, 0x78, 0x51, 0x95, 0xc0, 0x79, 0x8d, 0x8c, 0xef, 0xb9, 0x51, - 0xee, 0x97, 0x2d, 0x9c, 0xf1, 0x74, 0x77, 0xaa, 0xdf, 0x70, 0x4c, 0x8f, - 0x25, 0x75, 0xf3, 0xfb, 0x12, 0x49, 0x2e, 0x51, 0xba, 0x7b, 0x1c, 0x4f, - 0x3a, 0xf1, 0x4e, 0x7b, 0x5f, 0xd8, 0x14, 0x77, 0x2e, 0x94, 0x15, 0x9f, - 0xe1, 0x7c, 0x96, 0x14, 0xf5, 0x8c, 0x34, 0x61, 0xbb, 0xd0, 0x59, 0x4b, - 0x39, 0x34, 0x74, 0x1d, 0x8a, 0x93, 0x28, 0x44, 0xae, 0xe5, 0x5a, 0x16, - 0x62, 0x86, 0x5c, 0x89, 0xf6, 0x14, 0x69, 0x0f, 0x57, 0x5b, 0x36, 0x3a, - 0x64, 0x39, 0x78, 0x56, 0xee, 0x98, 0x1e, 0xb1, 0x47, 0x6c, 0x04, 0x81, - 0x1a, 0x94, 0x34, 0x29, 0xc6, 0x9b, 0x7a, 0xb7, 0xf2, 0xcc, 0xd5, 0x1c, - 0x54, 0x71, 0x06, 0xb9, 0x65, 0x86, 0x4a, 0x02, 0xf5, 0xec, 0x1e, 0x50, - 0x20, 0x6d, 0x10, 0xa1, 0x38, 0x86, 0x2f, 0xa1, 0x21, 0xee, 0xb6, 0xfc, - 0x8b, 0x32, 0xaf, 0x69, 0xdc, 0x58, 0x59, 0x9a, 0x35, 0xc6, 0x8d, 0x24, - 0x19, 0x20, 0xe4, 0xc1, 0xf2, 0x40, 0x86, 0xd2, 0x10, 0x3e, 0x97, 0x62, - 0xd4, 0xfc, 0x2b, 0x1e, 0xc1, 0x09, 0x13, 0x73, 0xfa, 0x82, 0xef, 0x35, - 0x45, 0xc3, 0x12, 0xcb, 0x31, 0x46, 0x28, 0x25, 0x91, 0xc0, 0x1e, 0xbd, - 0x59, 0x49, 0xc4, 0xd9, 0x97, 0x9c, 0xb2, 0x6c, 0xb1, 0x7a, 0x23, 0xaf, - 0x25, 0x97, 0xee, 0x95, 0x46, 0x2f, 0x65, 0x48, 0x80, 0xcd, 0xb2, 0x0e, - 0xd6, 0xdf, 0xea, 0xf7, 0x90, 0x05, 0xb1, 0xef, 0x4d, 0x88, 0x97, 0xc5, - 0x75, 0x6c, 0xdf, 0x16, 0xae, 0x12, 0x0c, 0x22, 0x3e, 0x8e, 0xf3, 0x26, - 0x0a, 0xb5, 0x49, 0x37, 0xb5, 0x86, 0xc6, 0x79, 0x1d, 0x28, 0x03, 0xee, - 0xa1, 0x97, 0x96, 0xb4, 0x7f, 0xfa, 0x72, 0xf9, 0x9e, 0x5c, 0xbc, 0x74, - 0xdb, 0x68, 0x04, 0xf8, 0xa4, 0xca, 0xd6, 0x3f, 0x12, 0xdc, 0xd1, 0x23, - 0x76, 0xde, 0x84, 0x9f, 0xb8, 0xc6, 0xc6, 0x9a, 0xb0, 0x68, 0xf2, 0xb4, - 0x8b, 0xad, 0x84, 0x41, 0xc6, 0x8e, 0xb1, 0x64, 0xa7, 0x23, 0xab, 0xd0, - 0x15, 0xd3, 0x7d, 0x32, 0x54, 0xda, 0x01, 0x39, 0x56, 0x83, 0x28, 0xe3, - 0x91, 0x87, 0x89, 0x83, 0xea, 0x8c, 0x26, 0x2e, 0xec, 0xae, 0x47, 0xf4, - 0xba, 0x03, 0x22, 0x24, 0x13, 0xd6, 0x48, 0x30, 0x0d, 0xfd, 0x31, 0xee, - 0x9b, 0x0a, 0x32, 0xc7, 0xb8, 0x63, 0x28, 0x70, 0x89, 0x41, 0xd0, 0x08, - 0x0b, 0x63, 0xcc, 0x9f, 0x3b, 0xeb, 0x2a, 0x03, 0xcb, 0xf1, 0xca, 0x7f, - 0x83, 0xc6, 0xb3, 0xf2, 0xb8, 0xd7, 0x71, 0x49, 0xa9, 0x9c, 0x67, 0xca, - 0xee, 0x3c, 0x23, 0x89, 0xc2, 0x12, 0x8e, 0x1e, 0xc8, 0xa7, 0xe4, 0xb2, - 0xed, 0xfe, 0xa9, 0x49, 0xfc, 0xa6, 0x0a, 0x4d, 0x1c, 0xec, 0x0f, 0xba, - 0xa9, 0x38, 0xa5, 0x80, 0x57, 0x0a, 0x40, 0x45, 0x0c, 0x82, 0x51, 0x83, - 0xcd, 0x25, 0x00, 0x15, 0xe1, 0x4e, 0xbb, 0x90, 0x1a, 0xb5, 0x3c, 0x49, - 0x1c, 0xdf, 0x2a, 0x35, 0x61, 0xb7, 0x09, 0x65, 0xd0, 0xc1, 0xe7, 0x6f, - 0x92, 0xd7, 0xb2, 0xd6, 0x83, 0xb4, 0xee, 0x9e, 0xf3, 0x2d, 0xd5, 0x85, - 0x2c, 0xf2, 0xa2, 0xee, 0x9b, 0xec, 0xc0, 0x56, 0x8c, 0x3e, 0xed, 0x5e, - 0x98, 0xe7, 0x7d, 0xad, 0xd5, 0x33, 0xe1, 0xc5, 0xe8, 0x89, 0x1f, 0xeb, - 0x9c, 0xc1, 0x39, 0x14, 0xd3, 0xcb, 0x72, 0x37, 0x06, 0x54, 0x3e, 0xf0, - 0xc4, 0x3f, 0xfe, 0xa4, 0xcf, 0x0b, 0x1c, 0x9f, 0xf1, 0xa6, 0xb6, 0xe7, - 0xf0, 0xfa, 0x6f, 0x9c, 0xed, 0xb4, 0x12, 0x4d, 0x24, 0xf8, 0x45, 0x88, - 0x26, 0x6d, 0x69, 0xc6, 0xd4, 0xe2, 0xfe, 0x8f, 0x08, 0xef, 0x98, 0xfe, - 0x5f, 0x41, 0x52, 0x07, 0x0e, 0x21, 0xe7, 0xa7, 0xb8, 0x3b, 0xe0, 0xf8, - 0x3a, 0xbf, 0x12, 0xb7, 0x05, 0xe8, 0x64, 0x85, 0x6c, 0xb6, 0xe9, 0x47, - 0x5a, 0xa3, 0xae, 0x44, 0x0e, 0x68, 0x05, 0x3c, 0x3d, 0x41, 0xd1, 0x10, - 0x6a, 0x63, 0x4b, 0xdb, 0xf9, 0x01, 0x6f, 0xf1, 0xbe, 0xb6, 0x7a, 0xa7, - 0x32, 0x07, 0x61, 0x8f, 0xe8, 0xea, 0xc9, 0x84, 0x80, 0x13, 0x3e, 0xe9, - 0xb1, 0x54, 0x4c, 0xd3, 0x85, 0xf4, 0x39, 0x7e, 0xa5, 0x82, 0x1c, 0xd4, - 0x4f, 0x20, 0x64, 0xb5, 0x9b, 0x0d, 0x02, 0xdd, 0x22, 0xb9, 0x11, 0xd9, - 0x57, 0x85, 0x9a, 0x5d, 0xe5, 0x35, 0xcf, 0x5c, 0x84, 0xe7, 0x0f, 0x72, - 0x33, 0xc3, 0x50, 0x80, 0x59, 0xab, 0xe0, 0x74, 0xf9, 0xdf, 0xb8, 0xac, - 0xf1, 0x49, 0xd3, 0x4d, 0xb0, 0xf8, 0x94, 0x35, 0x35, 0x82, 0x47, 0x1c, - 0x53, 0xa0, 0xd6, 0x6a, 0xd4, 0xc3, 0xa9, 0xc6, 0x68, 0x83, 0xce, 0xb5, - 0xf4, 0x81, 0xed, 0x06, 0xe1, 0xcb, 0x85, 0x20, 0x02, 0xc5, 0x04, 0x6b, - 0xe2, 0x5f, 0xc2, 0x67, 0xf5, 0x42, 0x9f, 0xe9, 0xe3, 0xd5, 0xe4, 0x9e, - 0x59, 0x20, 0x38, 0xae, 0xec, 0x6a, 0x62, 0x70, 0x96, 0xd5, 0x33, 0xd7, - 0xda, 0xbe, 0x5c, 0x36, 0x92, 0x86, 0xc0, 0xb9, 0x6c, 0xfc, 0xc6, 0xba, - 0x46, 0x08, 0xf3, 0xed, 0x4b, 0xb4, 0x70, 0xd7, 0x5a, 0xe8, 0x8d, 0x2d, - 0xdb, 0xa3, 0x27, 0xc7, 0x91, 0xd3, 0x4d, 0xb6, 0xad, 0x62, 0x06, 0x37, - 0xd7, 0x9e, 0x71, 0xa1, 0x6e, 0xd2, 0x9f, 0x4b, 0xc7, 0x9b, 0xfc, 0xb3, - 0xf8, 0xfd, 0x63, 0xc1, 0xb8, 0xde, 0x2b, 0x98, 0xd7, 0x77, 0x27, 0xf9, - 0x5b, 0x2e, 0xac, 0xb1, 0xac, 0x9c, 0xce, 0x99, 0xc7, 0x49, 0x2a, 0xe9, - 0x20, 0xc3, 0xf0, 0x11, 0x0c, 0xfd, 0x2f, 0xcb, 0x53, 0x3b, 0x63, 0x0a, - 0x9c, 0x27, 0x87, 0x45, 0x6e, 0x67, 0x7c, 0x81, 0xd2, 0x99, 0xa8, 0x99, - 0xd8, 0x0e, 0xf8, 0x4a, 0x90, 0xc1, 0xcb, 0x35, 0xc6, 0x1d, 0x3d, 0x99, - 0xfc, 0x24, 0xcc, 0x02, 0xc7, 0x94, 0x06, 0x23, 0x7a, 0x7c, 0x9a, 0x4f, - 0x0e, 0x53, 0x67, 0x69, 0x29, 0x00, 0xab, 0x86, 0xca, 0xdb, 0x26, 0x3e, - 0x2e, 0x11, 0x5a, 0x70, 0xf2, 0x88, 0xb7, 0xe8, 0x3c, 0x38, 0x5f, 0x10, - 0x18, 0x61, 0x2a, 0xa7, 0xa7, 0xba, 0xed, 0xcb, 0x5a, 0x8d, 0x3d, 0x60, - 0x25, 0x98, 0x5f, 0x48, 0xbe, 0x08, 0x6f, 0xe7, 0x94, 0x8e, 0x1b, 0x07, - 0x59, 0x3f, 0x3a, 0xe4, 0xb3, 0xa4, 0x93, 0xc4, 0xdb, 0x92, 0x54, 0xb1, - 0x19, 0xf1, 0x48, 0xdc, 0xd4, 0x50, 0xb8, 0xa7, 0x20, 0xcc, 0xaf, 0xe7, - 0xf9, 0x62, 0x8f, 0xb7, 0xb3, 0x2f, 0x29, 0x37, 0xb3, 0xf3, 0x73, 0x09, - 0x3f, 0xa3, 0x78, 0x12, 0xf2, 0x17, 0x83, 0x6f, 0x39, 0x37, 0xa5, 0x11, - 0x77, 0x8b, 0x75, 0x60, 0xcf, 0x0b, 0x81, 0x1e, 0x0b, 0x01, 0x81, 0x11, - 0xe6, 0xcc, 0x25, 0x3c, 0xa3, 0x14, 0xd1, 0x5c, 0xfd, 0xd9, 0x38, 0xea, - 0xf4, 0x1a, 0x7d, 0x24, 0x29, 0x6c, 0x03, 0x41, 0x19, 0x85, 0x60, 0xe0, - 0x54, 0xa3, 0x94, 0x2e, 0x35, 0x77, 0x93, 0x1d, 0xca, 0x58, 0xdb, 0x1b, - 0x41, 0x12, 0xfa, 0xa5, 0x64, 0x61, 0x94, 0x7d, 0x78, 0xe5, 0x54, 0x62, - 0x02, 0xf2, 0x8a, 0xd9, 0x47, 0x28, 0x20, 0x17, 0xec, 0x77, 0x2b, 0x04, - 0xa2, 0x13, 0x86, 0x66, 0x7d, 0xc5, 0x88, 0xc6, 0x01, 0x71, 0xa2, 0x98, - 0x4b, 0xbe, 0x70, 0x0c, 0xa8, 0xd0, 0xfa, 0xd8, 0x8f, 0x3b, 0xfc, 0xd8, - 0xa3, 0xfd, 0x52, 0x9f, 0x86, 0x60, 0xc0, 0x42, 0xdd, 0xe3, 0x13, 0x8a, - 0xe0, 0xb3, 0x45, 0x2a, 0xa2, 0xa3, 0x7e, 0xcb, 0x18, 0xb7, 0x48, 0x32, - 0xb5, 0xcc, 0xdd, 0x01, 0x81, 0x57, 0x82, 0x40, 0xae, 0x74, 0x7a, 0x42, - 0xb7, 0x85, 0x96, 0x30, 0x12, 0xc1, 0x79, 0x8f, 0x9a, 0xd8, 0xbf, 0xec, - 0x2c, 0x5f, 0xf7, 0xab, 0x2a, 0xb7, 0x64, 0xaf, 0x56, 0x19, 0x9b, 0x46, - 0x21, 0xd4, 0x95, 0xde, 0xd4, 0x16, 0xac, 0xc7, 0xb8, 0xdf, 0xa1, 0x63, - 0x89, 0x98, 0x8d, 0x11, 0x0e, 0x48, 0x46, 0x1c, 0xbc, 0x49, 0x8a, 0x7c, - 0x74, 0xcd, 0xcc, 0x82, 0xe2, 0x5b, 0xa4, 0xc2, 0xa3, 0x09, 0x10, 0xef, - 0x48, 0x93, 0x8d, 0x93, 0x1e, 0x83, 0x93, 0x11, 0x23, 0x1e, 0x86, 0xf2, - 0x3b, 0x06, 0x19, 0xe6, 0x11, 0x5d, 0xb8, 0x84, 0xa1, 0x80, 0x9b, 0x8c, - 0x5f, 0xf8, 0x6a, 0x96, 0x64, 0x5c, 0xe0, 0x56, 0x7c, 0xc3, 0xa6, 0xac, - 0x97, 0x83, 0x42, 0x15, 0xc2, 0xf8, 0x82, 0x50, 0x81, 0xe5, 0x2d, 0x94, - 0x57, 0xde, 0x42, 0x71, 0xe5, 0x2d, 0x14, 0x5c, 0x4f, 0x58, 0x1e, 0x78, - 0x3e, 0x3f, 0xe9, 0x33, 0x70, 0x03, 0x62, 0xf4, 0xf1, 0x42, 0x2d, 0x2b, - 0xd4, 0x79, 0x43, 0xd9, 0xec, 0xbf, 0xd9, 0xda, 0xf5, 0x48, 0x1b, 0x3b, - 0x5b, 0xd9, 0xca, 0x2d, 0xea, 0x58, 0xad, 0x75, 0x70, 0x88, 0x72, 0xfa, - 0xe1, 0x87, 0xbc, 0xd8, 0xa3, 0xb0, 0xbd, 0x7e, 0x13, 0x8b, 0xa8, 0xdb, - 0x25, 0x63, 0xb4, 0xb3, 0xef, 0x1b, 0xdf, 0x0a, 0x4f, 0xe4, 0x0c, 0xf2, - 0x05, 0xb1, 0x77, 0xe9, 0xe6, 0x50, 0xe6, 0xbc, 0x2c, 0xc2, 0xa9, 0x8a, - 0x9e, 0xd9, 0xf0, 0xe7, 0xa7, 0xae, 0xe4, 0x70, 0x60, 0x6c, 0xa3, 0x11, - 0x1e, 0x3b, 0x04, 0x13, 0x9e, 0xf1, 0x5e, 0x9d, 0x54, 0x84, 0xa7, 0x18, - 0x03, 0xda, 0xc4, 0xd8, 0x83, 0xbe, 0x89, 0xdc, 0x1a, 0x75, 0x09, 0x3a, - 0xa3, 0xcf, 0x42, 0xad, 0x12, 0xce, 0xb2, 0x4f, 0xf9, 0xf0, 0x61, 0x51, - 0x3e, 0xee, 0x2d, 0x92, 0x23, 0x9e, 0x98, 0xfb, 0xcb, 0x69, 0x2a, 0xa7, - 0x6f, 0x6c, 0xfc, 0x09, 0xa9, 0x51, 0xc4, 0x58, 0x48, 0x18, 0x19, 0x89, - 0x6d, 0x50, 0x2d, 0x66, 0xec, 0xc8, 0xd1, 0x42, 0x2e, 0xd4, 0xe8, 0x1e, - 0x4d, 0x73, 0x66, 0xc9, 0x07, 0xa5, 0x10, 0xe9, 0x74, 0x12, 0x4f, 0x94, - 0x8e, 0x0c, 0x41, 0x23, 0x96, 0x1e, 0xdc, 0x7d, 0xf8, 0x42, 0x3f, 0x24, - 0x59, 0x4a, 0x29, 0xed, 0x1f, 0x38, 0x65, 0xd0, 0x7c, 0x8c, 0x45, 0x1e, - 0xbe, 0x25, 0xad, 0xb1, 0x83, 0x47, 0xd2, 0xee, 0x80, 0xd7, 0xe9, 0xbc, - 0x0e, 0x9e, 0x2c, 0x39, 0x43, 0xdc, 0x1b, 0xa5, 0x87, 0x44, 0x49, 0xe0, - 0x85, 0xee, 0xf6, 0x65, 0x8b, 0x57, 0xe1, 0xbc, 0x97, 0x47, 0x54, 0xf4, - 0xdd, 0xd4, 0xf0, 0x30, 0xf4, 0xa3, 0x46, 0xb3, 0x3e, 0x1a, 0xb6, 0x06, - 0x27, 0x1e, 0x25, 0xe5, 0xfb, 0x18, 0x29, 0xc6, 0xe0, 0xb8, 0x73, 0x9a, - 0x8d, 0xd5, 0x3d, 0x28, 0xb4, 0x9e, 0x09, 0xa9, 0x7b, 0xb4, 0x76, 0xd1, - 0xeb, 0x20, 0x7c, 0xa5, 0xe7, 0xac, 0xe6, 0x9e, 0xda, 0xb0, 0xec, 0x72, - 0x47, 0x33, 0xd5, 0x9a, 0x3b, 0xc0, 0x9f, 0xe2, 0x7a, 0x8e, 0xe9, 0xb1, - 0xd2, 0x38, 0x8c, 0x92, 0x1b, 0x1f, 0x65, 0x53, 0x9d, 0xf1, 0x24, 0xef, - 0x48, 0x7a, 0xc3, 0x06, 0x97, 0x18, 0x29, 0x8e, 0xda, 0x0c, 0x05, 0x4d, - 0x20, 0xeb, 0x1b, 0xe4, 0x71, 0xc1, 0x85, 0x9e, 0x49, 0xe5, 0x72, 0xc0, - 0x23, 0x48, 0xba, 0x03, 0xa0, 0x3c, 0xee, 0x48, 0x81, 0x46, 0x58, 0x6a, - 0x6f, 0x13, 0x16, 0xd7, 0x03, 0x9c, 0x31, 0x5c, 0xc8, 0x08, 0x3b, 0x0b, - 0x9f, 0xf6, 0x81, 0x23, 0xb1, 0x35, 0x6d, 0xf0, 0x3a, 0xbd, 0x11, 0xbf, - 0x3f, 0x7c, 0xde, 0xd9, 0x27, 0x52, 0x88, 0xd7, 0x2d, 0x29, 0x2b, 0x77, - 0x46, 0x9f, 0x91, 0x9a, 0xc8, 0xcc, 0x55, 0x70, 0x88, 0xe2, 0x26, 0x85, - 0x42, 0xa6, 0xeb, 0x8b, 0xb5, 0x88, 0xf6, 0xb1, 0x7a, 0x13, 0x5a, 0x16, - 0x46, 0xa4, 0x4c, 0xc1, 0x4d, 0x1a, 0xe6, 0x9a, 0xf0, 0x16, 0x23, 0xae, - 0x12, 0xa6, 0x7f, 0x2e, 0x1f, 0xef, 0x53, 0x88, 0x34, 0x2a, 0x49, 0xef, - 0xe5, 0x49, 0xb9, 0x3d, 0x21, 0x21, 0x72, 0xa8, 0x6c, 0x1d, 0x2c, 0xdf, - 0x59, 0xf9, 0xd9, 0x12, 0x9c, 0x6a, 0x82, 0xc6, 0xf4, 0x1c, 0x47, 0x3e, - 0x90, 0x30, 0x14, 0x3c, 0x2e, 0x69, 0x14, 0xee, 0x74, 0x17, 0x65, 0x13, - 0x7e, 0x9d, 0x5d, 0x58, 0x68, 0x21, 0x16, 0x56, 0xa2, 0xf1, 0xa5, 0xf4, - 0x23, 0x7f, 0xd5, 0xe8, 0xf2, 0xdf, 0x10, 0xcc, 0x9e, 0xe2, 0x5d, 0x8e, - 0xc3, 0x23, 0x4d, 0x2f, 0xce, 0x3c, 0x69, 0x2d, 0x49, 0x10, 0xd1, 0x08, - 0x96, 0x75, 0x42, 0x96, 0x78, 0x29, 0x92, 0x84, 0x95, 0xb2, 0x01, 0x55, - 0x6c, 0xc2, 0xe2, 0x38, 0xd5, 0x19, 0xc3, 0x0d, 0x98, 0x11, 0x9c, 0x23, - 0xdf, 0xf3, 0xdd, 0xc4, 0x7a, 0x8b, 0x7d, 0x5b, 0x45, 0x7f, 0x09, 0x21, - 0x3e, 0xa7, 0x21, 0xbf, 0x64, 0x18, 0x51, 0x61, 0x25, 0xca, 0x50, 0xf4, - 0x99, 0x57, 0x7c, 0x0b, 0x92, 0xa0, 0x92, 0x93, 0x17, 0x30, 0xc7, 0xa8, - 0x57, 0x89, 0x06, 0x79, 0x61, 0x5d, 0x2c, 0x88, 0xf9, 0xa4, 0x2f, 0xd9, - 0x8b, 0xb5, 0xf2, 0x8a, 0xc1, 0xf5, 0x15, 0xbb, 0x41, 0x8a, 0x91, 0x47, - 0x6d, 0xe9, 0xa5, 0x53, 0xe6, 0x51, 0xc7, 0x9a, 0x3e, 0x25, 0xca, 0xc2, - 0xc3, 0x13, 0xad, 0xf0, 0xe7, 0x79, 0x62, 0xa5, 0x26, 0xb5, 0x09, 0x3b, - 0x46, 0xce, 0x09, 0x9b, 0xcb, 0x31, 0x38, 0x86, 0xfb, 0x88, 0xab, 0x31, - 0x60, 0xee, 0x85, 0x51, 0xb0, 0x3e, 0x38, 0xab, 0x71, 0xe8, 0xe9, 0xac, - 0x3c, 0xd9, 0xf2, 0x4b, 0xdc, 0xf2, 0x7b, 0x22, 0xa8, 0x41, 0x96, 0xcf, - 0x29, 0x12, 0xdf, 0xca, 0x15, 0xcb, 0xbf, 0xbc, 0x5d, 0x5c, 0x93, 0x10, - 0xa6, 0x12, 0x5e, 0xcf, 0x57, 0xc6, 0xac, 0x23, 0x82, 0x6d, 0x08, 0x62, - 0x8b, 0xb0, 0xa2, 0x6f, 0xe2, 0xda, 0xea, 0xad, 0x8e, 0x2f, 0x8e, 0x36, - 0x82, 0xc3, 0xd5, 0xbb, 0xa0, 0x40, 0x44, 0xe2, 0x21, 0xaa, 0x6e, 0x50, - 0x58, 0x9d, 0xfc, 0xe0, 0x53, 0x24, 0x28, 0x20, 0x2a, 0x16, 0xe7, 0xc1, - 0x22, 0x16, 0x83, 0x7c, 0x04, 0xc3, 0xf5, 0x51, 0xf7, 0x80, 0x81, 0xa3, - 0xb3, 0xc4, 0x2b, 0xd4, 0x2e, 0xac, 0x68, 0x87, 0xf6, 0xb4, 0x46, 0xce, - 0x88, 0xa0, 0x36, 0x22, 0xff, 0x43, 0x91, 0x84, 0xe8, 0x41, 0x02, 0xfe, - 0x61, 0x18, 0x28, 0xb3, 0x53, 0xe4, 0x4f, 0xdb, 0xb8, 0xf5, 0xd3, 0xa8, - 0x83, 0x57, 0xa1, 0xcb, 0x17, 0x29, 0xee, 0x06, 0xd0, 0x17, 0x1a, 0xd5, - 0x53, 0xa6, 0x0d, 0x58, 0x66, 0x58, 0xee, 0xa8, 0xc9, 0x16, 0xea, 0x3e, - 0x15, 0x23, 0x00, 0x55, 0x2d, 0x2b, 0x66, 0xe0, 0x57, 0xb8, 0x9a, 0x58, - 0xd0, 0xad, 0x55, 0xae, 0x5e, 0x29, 0x1e, 0x23, 0xe8, 0x64, 0xa5, 0xd4, - 0x39, 0x16, 0xdb, 0xb7, 0x55, 0xa0, 0x03, 0xb6, 0xc6, 0x70, 0xc5, 0x8e, - 0x13, 0x61, 0x23, 0x4f, 0x2c, 0xb0, 0xe3, 0xd7, 0x33, 0xb1, 0x58, 0xfc, - 0xb0, 0x71, 0x23, 0x68, 0x84, 0xc6, 0xa8, 0x1b, 0x53, 0x1a, 0x5f, 0xf8, - 0x4c, 0x4d, 0x14, 0x07, 0x19, 0xc3, 0x0b, 0x34, 0x20, 0xdb, 0x7a, 0x1b, - 0xf6, 0xdf, 0x52, 0x72, 0x1b, 0x53, 0xc9, 0x58, 0x9e, 0x42, 0x4f, 0x08, - 0x35, 0x03, 0xfd, 0x71, 0xb7, 0xc1, 0x15, 0xfc, 0xa0, 0x4b, 0xb2, 0xa5, - 0x72, 0xa3, 0x18, 0xca, 0x8d, 0xd3, 0xa7, 0x09, 0x2c, 0x59, 0x28, 0x66, - 0x9c, 0x88, 0x5f, 0x4a, 0x2a, 0x3f, 0xbe, 0xfd, 0x5c, 0x9a, 0x6f, 0x0e, - 0xfe, 0xa4, 0x39, 0xc3, 0x4f, 0xd9, 0x21, 0xaf, 0x72, 0x63, 0x3d, 0xf8, - 0xb7, 0x1d, 0xb5, 0xf1, 0x36, 0xe3, 0xf0, 0x40, 0x96, 0xed, 0x32, 0x67, - 0x2f, 0x4d, 0x7f, 0x7d, 0x1d, 0xa0, 0x40, 0xb7, 0x90, 0x65, 0x32, 0x67, - 0x3a, 0x1a, 0x96, 0x8b, 0xca, 0xbd, 0x1b, 0x32, 0x07, 0xbc, 0x24, 0x38, - 0x39, 0xa0, 0x6a, 0x0f, 0x68, 0xec, 0x5d, 0xbc, 0xbe, 0xe7, 0xaf, 0x7b, - 0x98, 0xca, 0x3d, 0xad, 0xc6, 0xe5, 0x1a, 0xd7, 0xc1, 0x26, 0x5e, 0x97, - 0xb3, 0x40, 0xbd, 0xe6, 0x32, 0xd7, 0xe2, 0x16, 0x71, 0x02, 0xba, 0x78, - 0x12, 0x57, 0x3d, 0x4e, 0x35, 0xc7, 0xb5, 0xf8, 0x25, 0x66, 0x83, 0x0c, - 0x51, 0x8e, 0x14, 0x02, 0x2f, 0xdf, 0x32, 0xd7, 0x05, 0x7e, 0xdb, 0x16, - 0x30, 0xbb, 0xff, 0x21, 0xb6, 0x6e, 0xc4, 0x68, 0xa8, 0x50, 0x9d, 0xbf, - 0xdc, 0x5c, 0x4b, 0xda, 0x04, 0x5e, 0x97, 0x0b, 0xf6, 0x2d, 0x97, 0x5b, - 0x58, 0xe9, 0x58, 0x78, 0x6b, 0x5c, 0x50, 0x84, 0x64, 0x55, 0x61, 0xe6, - 0xaf, 0xe7, 0x1c, 0x70, 0xe3, 0x91, 0x87, 0x41, 0xeb, 0x1f, 0x3c, 0xf7, - 0x5f, 0xee, 0xe9, 0xb0, 0xde, 0x88, 0x3b, 0x63, 0x42, 0x64, 0xb0, 0x30, - 0x04, 0xcf, 0x9b, 0x0d, 0xc3, 0x0e, 0x81, 0xb0, 0x0d, 0xb2, 0xae, 0x42, - 0xda, 0x8b, 0xd7, 0xe9, 0x17, 0xd5, 0x8a, 0x68, 0x60, 0xd6, 0x0b, 0x9f, - 0xfb, 0x1e, 0xbb, 0xf0, 0x13, 0xcb, 0x87, 0x8b, 0xf8, 0x44, 0xa2, 0xb8, - 0x8d, 0xb4, 0xc4, 0x5e, 0xc4, 0xf2, 0xa8, 0x71, 0xb2, 0x3c, 0x49, 0xcf, - 0xac, 0x2d, 0x10, 0xeb, 0x5f, 0xfe, 0x5d, 0x42, 0xe7, 0x46, 0x9c, 0x3f, - 0x2f, 0x61, 0x73, 0x79, 0xf1, 0x5b, 0xec, 0x1f, 0xf8, 0x66, 0x04, 0x6d, - 0xbf, 0xb2, 0xdf, 0xac, 0xe1, 0x89, 0xae, 0xb8, 0x42, 0x83, 0xe9, 0xb2, - 0x62, 0x06, 0x9f, 0x0f, 0xaf, 0x17, 0x1e, 0xd4, 0x2f, 0x6b, 0xca, 0x74, - 0xb9, 0xa2, 0x67, 0x3a, 0xb4, 0xa2, 0x1b, 0x41, 0x0b, 0x3b, 0x43, 0x2b, - 0x2b, 0xf5, 0xed, 0xa4, 0x49, 0x96, 0xad, 0x9e, 0x6f, 0xb7, 0xd5, 0xa2, - 0x27, 0xe4, 0x56, 0x71, 0xe9, 0xe2, 0xec, 0x92, 0x6f, 0xcd, 0x4e, 0xf2, - 0x62, 0xe9, 0x4b, 0x68, 0xfc, 0x30, 0x02, 0xf7, 0x1b, 0x41, 0xa1, 0x77, - 0x7c, 0x73, 0xe5, 0x16, 0x71, 0x74, 0x77, 0x51, 0xfb, 0x4d, 0x0f, 0xff, - 0xaa, 0xc6, 0x4e, 0xe2, 0x22, 0x37, 0xf3, 0xbd, 0x31, 0xd7, 0x71, 0xe5, - 0x36, 0x0f, 0x08, 0x42, 0x39, 0xf3, 0x7a, 0xe1, 0xb5, 0x49, 0x9e, 0x8b, - 0xc7, 0x09, 0x78, 0x1c, 0x80, 0x2f, 0x22, 0xcc, 0x8e, 0xf4, 0xb6, 0x0b, - 0xa7, 0x01, 0x82, 0xc3, 0xdc, 0x17, 0x19, 0x3d, 0xcf, 0xd4, 0x19, 0xc0, - 0xfe, 0xe3, 0x89, 0x0c, 0xbe, 0x2e, 0xeb, 0xe6, 0x01, 0xbf, 0x20, 0xa9, - 0x2a, 0xb0, 0x35, 0xc8, 0x7d, 0x0a, 0xeb, 0xbe, 0xe2, 0x13, 0xfc, 0x06, - 0x92, 0x5a, 0xf2, 0xc9, 0xb3, 0x30, 0x48, 0x78, 0x2d, 0x9b, 0xe9, 0x9d, - 0x06, 0x09, 0xcd, 0xd0, 0x93, 0xd4, 0x48, 0x94, 0xb3, 0x08, 0xc7, 0x99, - 0x30, 0x72, 0x4b, 0x6f, 0xac, 0x31, 0x78, 0x54, 0x5e, 0x88, 0x32, 0xc6, - 0xe8, 0xed, 0xed, 0xdb, 0x49, 0x8e, 0xad, 0x1f, 0xa5, 0x3b, 0xfc, 0x0b, - 0x2d, 0x13, 0x4e, 0xe4, 0x4b, 0x74, 0x43, 0xd6, 0x8a, 0x1b, 0x67, 0xca, - 0xf3, 0x2d, 0x7f, 0xb8, 0xa0, 0xb7, 0xc1, 0x4e, 0xf7, 0x1d, 0x81, 0x69, - 0x98, 0x76, 0xe1, 0xe5, 0xfb, 0x25, 0xae, 0xde, 0xcf, 0xce, 0xcb, 0xed, - 0x2d, 0xc7, 0x1e, 0xa4, 0xb2, 0x45, 0x0e, 0x5a, 0xdc, 0x73, 0x4c, 0x22, - 0x66, 0xd8, 0xfe, 0x3e, 0x08, 0x52, 0x9d, 0xcc, 0x5f, 0xd5, 0x4d, 0x2e, - 0x5b, 0x79, 0x4f, 0xd5, 0x53, 0x5e, 0x3e, 0x25, 0x8f, 0x7c, 0xe5, 0x76, - 0x0d, 0xd5, 0x43, 0x0a, 0x89, 0x0a, 0x3e, 0x5c, 0xe7, 0x8d, 0x20, 0xeb, - 0x10, 0xb9, 0xaf, 0xe0, 0xe0, 0x4e, 0x10, 0x97, 0x09, 0x0b, 0x6d, 0x29, - 0x2f, 0x6a, 0x0a, 0x32, 0xc1, 0xc0, 0x3e, 0xc9, 0x56, 0x38, 0x80, 0xa9, - 0x8d, 0x73, 0x49, 0x6a, 0xc4, 0x96, 0xa4, 0x70, 0x68, 0xd9, 0xb9, 0xa7, - 0x35, 0xa1, 0xdd, 0xfb, 0x27, 0x33, 0x81, 0x73, 0x7f, 0x38, 0xf0, 0xf0, - 0xc5, 0xd6, 0x01, 0x88, 0xd7, 0x94, 0x88, 0x0a, 0xe3, 0x80, 0x05, 0x84, - 0x5e, 0x21, 0xec, 0x0a, 0x42, 0xaf, 0xf7, 0x89, 0xe2, 0xb1, 0xdb, 0x64, - 0xa9, 0x4b, 0xe9, 0x41, 0x97, 0x80, 0xf8, 0xf5, 0xaf, 0xe2, 0x7e, 0x43, - 0x3a, 0xb7, 0xca, 0x7b, 0x22, 0x46, 0x10, 0x14, 0x83, 0xa9, 0x20, 0x06, - 0x1e, 0x70, 0x93, 0x29, 0x8d, 0x48, 0x25, 0xbe, 0x83, 0x22, 0x0d, 0xd6, - 0xe6, 0x6d, 0xb0, 0xb4, 0xd2, 0x77, 0xbd, 0x3b, 0x08, 0x46, 0x9f, 0xd9, - 0xf5, 0xaa, 0xa1, 0xe3, 0xfb, 0xb2, 0x7c, 0xa1, 0x96, 0xef, 0x65, 0xbd, - 0xa0, 0xd0, 0xf7, 0xb4, 0xd6, 0x72, 0xe6, 0x1e, 0x79, 0x3b, 0x6b, 0x99, - 0x43, 0xe0, 0x23, 0x10, 0x32, 0x7e, 0xc8, 0x43, 0xa3, 0x40, 0x0f, 0x5d, - 0x9a, 0x80, 0x40, 0x0c, 0xc4, 0xe1, 0xee, 0x90, 0x03, 0x80, 0x61, 0x24, - 0x44, 0xed, 0x75, 0x62, 0xd9, 0x00, 0x53, 0x7e, 0x62, 0xeb, 0xdd, 0x71, - 0xb5, 0x54, 0x20, 0xfb, 0xb9, 0xe0, 0x70, 0x45, 0x82, 0x2b, 0xf6, 0x54, - 0x0d, 0xd2, 0x39, 0x69, 0x7d, 0x26, 0x0b, 0x4f, 0x36, 0xba, 0x48, 0x2e, - 0xed, 0x19, 0x23, 0xcc, 0x5e, 0x59, 0x8b, 0x02, 0xe1, 0x4c, 0x71, 0x9d, - 0x65, 0xa7, 0x91, 0x72, 0x83, 0x08, 0xd1, 0x42, 0x65, 0xe9, 0x24, 0x85, - 0x7b, 0x59, 0x46, 0x92, 0x3b, 0x23, 0x54, 0xbe, 0x4f, 0xe7, 0xb3, 0xf1, - 0xc9, 0xcf, 0x95, 0x15, 0x7b, 0xee, 0xec, 0x82, 0x27, 0x93, 0xe6, 0x19, - 0xa2, 0x5e, 0x50, 0x7d, 0xac, 0xd1, 0xb6, 0x9d, 0xa6, 0x5e, 0x1c, 0x23, - 0xa7, 0xfc, 0x5e, 0xc5, 0x3b, 0xd5, 0x55, 0xb8, 0xe0, 0x4c, 0x81, 0xd2, - 0x99, 0x24, 0x79, 0x04, 0x0e, 0xbb, 0x50, 0x93, 0x3e, 0xdb, 0x85, 0xa5, - 0x37, 0x12, 0x5e, 0x98, 0xf0, 0x28, 0x8c, 0xb9, 0xaa, 0xda, 0x09, 0x8c, - 0xe4, 0x0b, 0xea, 0x53, 0x2e, 0x08, 0x20, 0x6e, 0xe9, 0x4c, 0x14, 0x5a, - 0x68, 0x14, 0x26, 0x75, 0x68, 0xaa, 0x2a, 0x81, 0x8d, 0x31, 0xf1, 0x71, - 0x10, 0xa7, 0xa9, 0xb6, 0xb1, 0xec, 0xc3, 0x4c, 0x62, 0x41, 0x37, 0xc9, - 0x0f, 0x1f, 0x71, 0xc4, 0xcd, 0x6d, 0x10, 0x1f, 0x27, 0xb3, 0xd1, 0xd0, - 0x0f, 0xd1, 0xac, 0xe5, 0xc3, 0x80, 0xe8, 0xb2, 0x87, 0xe0, 0x8e, 0xe0, - 0xdd, 0xb7, 0x08, 0x26, 0x8e, 0xd8, 0xaf, 0x42, 0x37, 0x1f, 0x7b, 0x27, - 0xc2, 0x61, 0xe9, 0xc4, 0xe8, 0xe0, 0xc7, 0x65, 0x40, 0x56, 0xcb, 0x31, - 0x88, 0x18, 0x67, 0x30, 0x09, 0x16, 0x91, 0xec, 0xf2, 0x1f, 0x51, 0x9c, - 0xbd, 0x1b, 0xce, 0xc7, 0x84, 0x93, 0x52, 0x6d, 0xeb, 0xc4, 0x67, 0xaf, - 0xab, 0xcf, 0xa2, 0x44, 0x27, 0xb0, 0x9b, 0x8a, 0x12, 0xfc, 0x9c, 0xf3, - 0x23, 0xa4, 0x19, 0xd6, 0x65, 0x9d, 0xf8, 0x70, 0x73, 0x54, 0x51, 0x62, - 0x29, 0xe8, 0x7f, 0xb8, 0x51, 0x2b, 0x08, 0x2e, 0xde, 0x72, 0x82, 0x02, - 0xf6, 0x40, 0x38, 0x1a, 0x14, 0xab, 0x25, 0x2a, 0x71, 0xb1, 0x1b, 0x29, - 0x61, 0x60, 0x56, 0x98, 0x4c, 0x6c, 0x1a, 0x02, 0x96, 0xa4, 0x74, 0x5a, - 0xe8, 0xee, 0x99, 0xe2, 0xa8, 0x49, 0xe0, 0xeb, 0xe2, 0x17, 0xc3, 0x94, - 0xd4, 0x2b, 0xe3, 0xaa, 0xf9, 0x73, 0xaf, 0x4e, 0xbd, 0x37, 0x89, 0x42, - 0x1b, 0xf1, 0x54, 0x9d, 0x78, 0x13, 0x36, 0xda, 0x20, 0x15, 0x88, 0x10, - 0x78, 0x49, 0x9a, 0xe9, 0xa5, 0x5b, 0x78, 0xbe, 0x15, 0x27, 0xe9, 0x4b, - 0xab, 0xfc, 0x90, 0xe0, 0x0a, 0x98, 0x02, 0x2b, 0x5a, 0x83, 0x7e, 0xf7, - 0x89, 0x30, 0x9f, 0x68, 0x2e, 0x6f, 0x20, 0x67, 0xee, 0x1e, 0x0a, 0x22, - 0x8e, 0x3c, 0x6e, 0x5f, 0x9a, 0xda, 0x22, 0x33, 0x74, 0x20, 0x53, 0xde, - 0x0c, 0x9b, 0xcb, 0x12, 0x51, 0xbc, 0xed, 0x95, 0x71, 0x86, 0xfa, 0x68, - 0xc5, 0x70, 0x7d, 0xa6, 0xf7, 0xe2, 0x0c, 0x1d, 0x93, 0x8a, 0x7f, 0x00, - 0xb1, 0x15, 0x3a, 0xa1, 0x2a, 0x28, 0x43, 0x97, 0x94, 0x4b, 0x43, 0x3e, - 0xc5, 0x3f, 0xfd, 0x72, 0x9f, 0x88, 0x4a, 0x50, 0xe3, 0x82, 0x11, 0x77, - 0x87, 0x69, 0xc1, 0xc5, 0xb6, 0x93, 0xad, 0x29, 0x70, 0xa8, 0xc2, 0x08, - 0x7d, 0x71, 0xfb, 0x22, 0xc9, 0x16, 0xbd, 0x6c, 0x95, 0x6d, 0x11, 0x82, - 0x86, 0x86, 0xc5, 0x96, 0x0c, 0x1a, 0x5b, 0xb6, 0x5b, 0x5d, 0x3c, 0x6f, - 0xc1, 0xe9, 0x80, 0x88, 0x26, 0xe0, 0x88, 0x61, 0x51, 0xcd, 0xf9, 0x96, - 0x69, 0x87, 0x39, 0x95, 0x89, 0x5c, 0x9b, 0xe2, 0x07, 0x81, 0xdf, 0x9b, - 0x13, 0xe9, 0xfe, 0xde, 0x52, 0xb8, 0xf7, 0xc7, 0x98, 0x33, 0x44, 0xfb, - 0xc3, 0x35, 0x90, 0xbb, 0x4a, 0x08, 0x7f, 0xf4, 0x11, 0xc6, 0x7a, 0x97, - 0x21, 0xef, 0x28, 0x36, 0x53, 0x12, 0xf3, 0x58, 0xa2, 0xe6, 0x9d, 0x5e, - 0xd4, 0x74, 0x3b, 0x57, 0x35, 0x57, 0xbe, 0x2f, 0x2f, 0x6e, 0x85, 0x0b, - 0xa4, 0x5b, 0x09, 0x37, 0xef, 0x1e, 0xb3, 0xf3, 0xa7, 0x48, 0x7b, 0x2c, - 0x53, 0x5f, 0x52, 0x53, 0xa6, 0x73, 0x97, 0xd8, 0xf2, 0x77, 0x76, 0x32, - 0xd2, 0x83, 0x9a, 0x60, 0x27, 0x3b, 0x62, 0xe1, 0xe8, 0xc4, 0x7b, 0xda, - 0x0b, 0x06, 0x0f, 0x17, 0xff, 0xd8, 0xcb, 0xbd, 0x5a, 0xdb, 0x67, 0x59, - 0x74, 0x97, 0x19, 0x65, 0xc3, 0x1e, 0xf3, 0xc2, 0xdb, 0xaf, 0x8b, 0x6c, - 0x1e, 0x63, 0xc8, 0x56, 0x8c, 0xae, 0x61, 0x6a, 0x16, 0x17, 0xde, 0x80, - 0x5d, 0xd2, 0xfd, 0x57, 0x11, 0xb7, 0x08, 0x75, 0xc1, 0x8b, 0xbc, 0xcd, - 0xf0, 0xa8, 0xf1, 0xc2, 0xbe, 0xfc, 0x46, 0xd9, 0xa2, 0x57, 0x62, 0x39, - 0x15, 0x27, 0xb3, 0xd1, 0xee, 0x85, 0x03, 0x88, 0xe5, 0x77, 0x2e, 0x31, - 0x1a, 0xee, 0x93, 0x90, 0x79, 0x6d, 0xfe, 0x72, 0xe6, 0xfb, 0xcb, 0x2d, - 0xff, 0x09, 0x1f, 0x8f, 0x28, 0x06, 0xd8, 0x7f, 0x3c, 0xbd, 0x34, 0xa0, - 0xbe, 0xfa, 0xfa, 0x85, 0x61, 0x4f, 0x45, 0x8c, 0x12, 0xc2, 0x38, 0x46, - 0x10, 0x84, 0x82, 0x38, 0x82, 0xfd, 0xb8, 0x7d, 0xc2, 0xf3, 0xc8, 0xd9, - 0x9f, 0x47, 0xce, 0x5e, 0x94, 0x52, 0xc3, 0xeb, 0xba, 0x2c, 0xec, 0x35, - 0x4a, 0xe8, 0x8e, 0x01, 0xd9, 0xa0, 0x75, 0x10, 0xc5, 0x4c, 0x66, 0xa1, - 0x35, 0x47, 0x23, 0x0c, 0x7f, 0xf4, 0x1c, 0x26, 0x34, 0x6b, 0x04, 0x5f, - 0x83, 0xbd, 0xe0, 0xd3, 0x52, 0x0a, 0x5c, 0x3f, 0xfd, 0x7e, 0x28, 0x2c, - 0x06, 0xf5, 0x60, 0xe8, 0x8f, 0xbf, 0x69, 0x45, 0xff, 0xcb, 0x05, 0xbd, - 0x20, 0x96, 0x23, 0x2e, 0xc4, 0x08, 0x19, 0xe9, 0x99, 0xb9, 0xd6, 0x56, - 0x98, 0xc2, 0x44, 0x11, 0xea, 0x23, 0xa7, 0x5f, 0x43, 0xca, 0x83, 0x2c, - 0x82, 0x42, 0x43, 0x1a, 0xfd, 0x69, 0x97, 0x78, 0x92, 0x16, 0xef, 0xda, - 0x2f, 0x95, 0x1e, 0x09, 0x1c, 0x61, 0x7a, 0x79, 0xd2, 0xb8, 0xbb, 0xe7, - 0x84, 0x01, 0x47, 0x8b, 0x52, 0xc5, 0x68, 0x2a, 0x98, 0x21, 0xf0, 0xdd, - 0xf9, 0x0d, 0x19, 0x3d, 0xc1, 0x23, 0x9e, 0x40, 0x48, 0x72, 0x8f, 0xf0, - 0x23, 0xbe, 0xb7, 0xbf, 0xaa, 0x9f, 0xc1, 0x7b, 0xa4, 0x2c, 0x04, 0x09, - 0x22, 0x99, 0x8d, 0x0d, 0x16, 0xe6, 0x3b, 0x27, 0x6e, 0x71, 0xcd, 0xd3, - 0x19, 0x42, 0xe1, 0x25, 0xff, 0x7d, 0xe2, 0xc3, 0x3f, 0x11, 0xf6, 0x67, - 0x1d, 0xe3, 0xf1, 0x9e, 0xe5, 0x2b, 0x55, 0xba, 0x32, 0x04, 0x2b, 0x7a, - 0x6b, 0xe9, 0x93, 0x21, 0x77, 0x50, 0xa4, 0x22, 0x7a, 0xc9, 0x3e, 0x18, - 0xa2, 0xf9, 0xe5, 0xe7, 0xe5, 0x17, 0x02, 0x34, 0x82, 0x30, 0x8a, 0xfc, - 0x62, 0xba, 0xfc, 0xab, 0xfa, 0x78, 0x7b, 0x82, 0xa8, 0x1f, 0xca, 0x19, - 0x2e, 0xbf, 0x75, 0x4f, 0xef, 0x5a, 0xdd, 0xf3, 0xab, 0x5d, 0xc5, 0x7c, - 0xb4, 0x7f, 0xa8, 0x27, 0x89, 0xba, 0xc0, 0x67, 0xfc, 0xf7, 0x08, 0xf1, - 0x53, 0x23, 0x1e, 0xe0, 0xe0, 0x8d, 0x06, 0xc5, 0x1c, 0x2a, 0x8d, 0x78, - 0xf2, 0x47, 0xda, 0x6b, 0x33, 0xe2, 0x59, 0x51, 0x44, 0xd7, 0x20, 0x13, - 0x5a, 0xe4, 0xa8, 0xeb, 0x12, 0x5e, 0x37, 0x6c, 0x3f, 0x2a, 0xce, 0x69, - 0x71, 0x2f, 0xd5, 0x30, 0x3e, 0x38, 0xbf, 0xe9, 0x20, 0xdd, 0x08, 0x43, - 0xe5, 0xe7, 0x58, 0xe2, 0x39, 0xe4, 0x9c, 0x05, 0x23, 0xb5, 0x33, 0x56, - 0xa2, 0xd0, 0xd8, 0xb1, 0x23, 0x8d, 0xc0, 0x5e, 0xb6, 0x12, 0x29, 0xc7, - 0xdb, 0x04, 0xe5, 0x32, 0x8a, 0xf8, 0x84, 0x6b, 0x5a, 0x8f, 0xfc, 0x86, - 0xca, 0x3d, 0xc7, 0x29, 0xd8, 0x1e, 0x23, 0x6e, 0x52, 0x83, 0x07, 0xc2, - 0x1a, 0xd6, 0x1d, 0x42, 0x87, 0x35, 0x3d, 0xe1, 0x5a, 0xf9, 0x84, 0x6b, - 0xcd, 0x35, 0xa7, 0x2c, 0xc5, 0xaf, 0x51, 0x91, 0xa1, 0x8c, 0xd3, 0x49, - 0x0e, 0xd6, 0x72, 0x79, 0x6a, 0x8b, 0x38, 0xd1, 0xda, 0x75, 0x8f, 0x5e, - 0x10, 0x0a, 0xf7, 0x8c, 0x20, 0x3c, 0x4f, 0xa4, 0x05, 0x9f, 0x29, 0xc8, - 0xc9, 0x10, 0x67, 0xd2, 0x16, 0x25, 0x7c, 0xe4, 0x96, 0xe3, 0x55, 0xbd, - 0x89, 0x5b, 0x18, 0x69, 0x76, 0x96, 0x7d, 0x58, 0xac, 0x6c, 0x8b, 0x9d, - 0x94, 0x05, 0x1a, 0x1c, 0xaf, 0x8f, 0xd1, 0xb8, 0x67, 0xfa, 0xdb, 0x73, - 0x7f, 0xe9, 0xd1, 0x5f, 0x7a, 0xc8, 0x2c, 0x2b, 0x39, 0x33, 0x19, 0x39, - 0xfa, 0x88, 0x67, 0xf8, 0x10, 0x56, 0x25, 0x65, 0x58, 0x51, 0x64, 0x0d, - 0x94, 0x8f, 0xfb, 0xc3, 0x81, 0x21, 0x5b, 0x0c, 0xb6, 0x9d, 0x6b, 0xed, - 0xdf, 0x9e, 0x6b, 0xbb, 0x47, 0x6d, 0x67, 0x2b, 0xc3, 0xce, 0xc2, 0x27, - 0xde, 0xa0, 0x1e, 0x8a, 0x6d, 0x94, 0x98, 0x22, 0x0c, 0x6f, 0xec, 0x2e, - 0xd7, 0xfd, 0xb1, 0x81, 0x6d, 0xec, 0x8c, 0x32, 0xb4, 0x65, 0x43, 0xe2, - 0xb1, 0x16, 0x31, 0x12, 0x61, 0xca, 0x7e, 0xfa, 0x68, 0xd2, 0x1b, 0xbf, - 0x66, 0x43, 0xae, 0x7d, 0x79, 0xaa, 0x23, 0x76, 0x99, 0x7f, 0x23, 0xc0, - 0x8a, 0xe1, 0xe2, 0x8d, 0xef, 0xeb, 0x1d, 0xa2, 0x76, 0x02, 0xac, 0x72, - 0x27, 0x8a, 0xcc, 0x26, 0xc1, 0xf6, 0xdf, 0xfd, 0x02, 0x4b, 0x23, 0xe9, - 0x00, 0x05, 0xc7, 0x27, 0xf2, 0xdb, 0x03, 0x15, 0x46, 0x29, 0x08, 0x96, - 0xee, 0xde, 0xde, 0x2f, 0x21, 0xed, 0x67, 0x18, 0xa1, 0x3b, 0xdf, 0x17, - 0x23, 0x0c, 0x3e, 0x3c, 0xf0, 0x8d, 0xde, 0x28, 0xca, 0x0d, 0xa5, 0xf6, - 0xd3, 0xcc, 0x09, 0x2a, 0xb2, 0x29, 0x2b, 0x01, 0x42, 0x51, 0x1a, 0x70, - 0xc2, 0x66, 0x3f, 0xdd, 0xad, 0xc3, 0xde, 0x69, 0xcd, 0xec, 0xee, 0x26, - 0x76, 0xef, 0x73, 0xd9, 0xc4, 0xc3, 0x9b, 0xbb, 0x9a, 0x66, 0x70, 0x80, - 0x34, 0xe6, 0xb2, 0xea, 0x07, 0x41, 0x93, 0x62, 0x6d, 0x67, 0xf0, 0xa1, - 0x8e, 0x67, 0xb9, 0xec, 0x39, 0x97, 0xd0, 0x2d, 0x41, 0xff, 0x40, 0x90, - 0xfe, 0x39, 0xdd, 0xb9, 0xe5, 0x75, 0x97, 0x8d, 0x7d, 0xb8, 0x5e, 0x0b, - 0x0a, 0x6b, 0xe6, 0x1d, 0xee, 0x98, 0x1d, 0xdd, 0x61, 0x53, 0x68, 0x82, - 0x8e, 0xed, 0x94, 0xbb, 0x67, 0xd5, 0xd0, 0x4a, 0xf3, 0x83, 0x84, 0x44, - 0x79, 0x73, 0xf2, 0x0e, 0xa9, 0xc8, 0x3b, 0xed, 0x21, 0xdc, 0x2f, 0xe7, - 0xd5, 0xb5, 0x0e, 0x03, 0xde, 0x80, 0xf7, 0xff, 0x10, 0xc6, 0x78, 0xc6, - 0xbc, 0xcf, 0x19, 0xc2, 0xf5, 0x25, 0x79, 0xf4, 0x72, 0x63, 0x8d, 0x9e, - 0x8c, 0x9d, 0x4c, 0x11, 0xdd, 0x99, 0x01, 0x6d, 0x9c, 0x19, 0x5c, 0xdf, - 0x0e, 0x6b, 0x14, 0x5d, 0x08, 0x82, 0x94, 0x47, 0x38, 0x17, 0xdf, 0xcf, - 0x30, 0xc8, 0x5c, 0x98, 0x72, 0xf7, 0xb4, 0xa8, 0xd9, 0xfe, 0x7e, 0x19, - 0xd1, 0x85, 0xe7, 0x9b, 0x62, 0xfe, 0xaf, 0xd4, 0x21, 0x5f, 0xec, 0x8f, - 0xaf, 0xca, 0xf6, 0x14, 0xd8, 0xe1, 0x3f, 0x72, 0xe0, 0x11, 0xa1, 0x47, - 0x0a, 0x3e, 0x18, 0x1e, 0xf7, 0xe4, 0xef, 0xd8, 0x43, 0x16, 0xe0, 0xad, - 0x4b, 0x21, 0xd7, 0xbb, 0xdc, 0x7e, 0xf6, 0x44, 0x17, 0x5c, 0x5d, 0xba, - 0x2f, 0xa9, 0x6a, 0x16, 0x5a, 0x21, 0xba, 0x8b, 0xa9, 0x14, 0x0f, 0x7a, - 0x1d, 0xfb, 0x8d, 0x00, 0x15, 0x8a, 0xff, 0x9c, 0xbd, 0x38, 0xb6, 0x91, - 0xc2, 0xf6, 0x86, 0x0d, 0xf0, 0x3d, 0xa3, 0x9d, 0xce, 0x89, 0xd0, 0xeb, - 0x97, 0x50, 0x35, 0xa7, 0x18, 0xce, 0x76, 0xd0, 0x86, 0x94, 0x9d, 0x7d, - 0x78, 0x7a, 0x55, 0x2f, 0xae, 0x28, 0xe3, 0x1e, 0x53, 0x8b, 0x3b, 0x26, - 0x16, 0x77, 0x39, 0x69, 0x2b, 0x0c, 0xd8, 0xfd, 0xc7, 0xfd, 0xb6, 0x8b, - 0x87, 0xd6, 0x55, 0x90, 0x41, 0xff, 0x92, 0xdc, 0x63, 0x17, 0x7a, 0xc2, - 0x05, 0xea, 0xdb, 0x81, 0x91, 0x42, 0xbd, 0xa3, 0x1a, 0x5a, 0xb2, 0xd3, - 0x0e, 0xc6, 0xaa, 0x68, 0x9c, 0x96, 0x38, 0xc6, 0x73, 0xb4, 0xca, 0x01, - 0x41, 0x6e, 0x3e, 0x30, 0x4c, 0x5b, 0x22, 0x88, 0xcb, 0x7d, 0xdc, 0x45, - 0x60, 0x0a, 0xc9, 0xf7, 0x64, 0x23, 0x00, 0x34, 0x85, 0xc2, 0x16, 0xab, - 0xb3, 0xbf, 0xcf, 0x90, 0x7f, 0x39, 0xe4, 0x1f, 0x43, 0xbe, 0x6c, 0x2e, - 0x27, 0xa8, 0x58, 0x00, 0xaa, 0x96, 0x37, 0x88, 0x90, 0x27, 0x9f, 0xeb, - 0xa4, 0x0d, 0xa9, 0x3b, 0x77, 0x47, 0x14, 0x21, 0x28, 0x1e, 0x68, 0x7e, - 0x41, 0xac, 0xfa, 0x5e, 0x4c, 0xf1, 0xa5, 0x76, 0x3e, 0x04, 0x16, 0x88, - 0x20, 0xdc, 0x0b, 0xce, 0x4e, 0x26, 0x0a, 0xe0, 0x15, 0x54, 0xae, 0xdf, - 0xf6, 0x14, 0xa2, 0xc8, 0x8a, 0xc3, 0xbc, 0x58, 0x68, 0x44, 0x5d, 0x15, - 0xb9, 0x84, 0x6f, 0x19, 0x95, 0xc5, 0x6f, 0x1e, 0x4e, 0xd4, 0xae, 0x0b, - 0x81, 0xbd, 0xf5, 0xc5, 0x4c, 0x90, 0xdc, 0x65, 0xaf, 0x1e, 0x75, 0x13, - 0x77, 0x96, 0x55, 0x02, 0x37, 0x9c, 0x47, 0xf4, 0xe9, 0x22, 0x36, 0x6d, - 0x77, 0x74, 0xbc, 0xb2, 0xe2, 0x91, 0xcb, 0x8a, 0x6c, 0xd1, 0xef, 0x68, - 0x94, 0x69, 0xa2, 0x0d, 0x4e, 0xb1, 0x29, 0x6e, 0x24, 0xb9, 0x33, 0x70, - 0x74, 0xae, 0xb2, 0x7d, 0x71, 0x22, 0x14, 0x37, 0xdc, 0x05, 0xf9, 0x7c, - 0xf8, 0xee, 0x7d, 0x36, 0x2e, 0x58, 0xe3, 0xf2, 0xfb, 0x9d, 0x32, 0x5c, - 0xf7, 0x2c, 0x75, 0x7f, 0x0f, 0x99, 0x7b, 0x5e, 0x8e, 0xc7, 0xc5, 0xcd, - 0x7b, 0x61, 0x19, 0xf4, 0x0e, 0xaa, 0xea, 0x56, 0xb5, 0x14, 0x52, 0x7c, - 0xc6, 0x16, 0xa9, 0x20, 0x77, 0xea, 0xfc, 0xa6, 0xeb, 0x4c, 0x57, 0x8c, - 0x72, 0x33, 0x3c, 0x86, 0x48, 0x1e, 0x5e, 0xde, 0xcb, 0x2f, 0x3d, 0x7f, - 0xf9, 0x70, 0xbf, 0xac, 0xe1, 0x95, 0x5f, 0xde, 0x95, 0x06, 0x4a, 0x05, - 0x46, 0x83, 0xaf, 0x17, 0x9c, 0x9f, 0x4e, 0xf8, 0x8d, 0xb0, 0xdf, 0x0c, - 0xaa, 0x76, 0x91, 0xe6, 0xef, 0xf6, 0x05, 0xc3, 0x8f, 0x77, 0x1a, 0x20, - 0x9e, 0x68, 0x67, 0xf2, 0x34, 0xeb, 0xa2, 0x98, 0x01, 0x1a, 0xfc, 0x1b, - 0x9d, 0x20, 0xbe, 0xa9, 0xd0, 0x93, 0xf7, 0x84, 0xf1, 0x80, 0x8a, 0xf6, - 0x84, 0x5b, 0x24, 0xce, 0x93, 0x6b, 0xc7, 0x4c, 0x0c, 0x22, 0xed, 0x06, - 0xe9, 0xcc, 0x4f, 0x83, 0x42, 0x3e, 0x76, 0x7c, 0x04, 0x0c, 0xd3, 0xe3, - 0x07, 0xae, 0x6f, 0x07, 0xd0, 0xea, 0x31, 0xd1, 0x0d, 0x8f, 0xbb, 0x2c, - 0x57, 0x22, 0xe4, 0xb4, 0xf0, 0xcd, 0x59, 0x97, 0xd3, 0x44, 0x89, 0x26, - 0xe2, 0x8b, 0xbc, 0xfa, 0xbd, 0x49, 0x01, 0xf8, 0x6a, 0xac, 0xc9, 0x3e, - 0xf5, 0x5d, 0xcf, 0xba, 0x2c, 0x56, 0xa1, 0xb5, 0xd8, 0x89, 0x67, 0xcd, - 0x7a, 0xc5, 0x97, 0x16, 0x62, 0xc7, 0x93, 0x45, 0xd2, 0x95, 0xdb, 0xc3, - 0x8a, 0x11, 0xb5, 0x3e, 0x1e, 0xe1, 0xcc, 0x9e, 0x80, 0x4b, 0x8d, 0x77, - 0xb5, 0x9c, 0x63, 0xc0, 0x64, 0xd1, 0x26, 0xc0, 0x29, 0x99, 0xc2, 0x5b, - 0x94, 0x2d, 0x6a, 0x4b, 0xbe, 0x92, 0xd1, 0x84, 0x75, 0xa0, 0xd2, 0x79, - 0x66, 0x6d, 0x90, 0x01, 0x7e, 0x7c, 0x74, 0x58, 0x71, 0x8c, 0x7a, 0x77, - 0x9b, 0xca, 0xf7, 0x75, 0xc8, 0xe4, 0xd1, 0x9f, 0x4d, 0x31, 0x4b, 0xee, - 0xf2, 0x1a, 0x77, 0x9a, 0x58, 0x56, 0x64, 0xe9, 0x0c, 0x2f, 0xf4, 0x40, - 0xb3, 0x8c, 0x9d, 0xa8, 0xc6, 0xa6, 0x8e, 0xb2, 0x98, 0x11, 0xad, 0x54, - 0x5e, 0x74, 0x5f, 0xa1, 0x46, 0xea, 0x9e, 0xec, 0x7d, 0xdc, 0x57, 0x3e, - 0xc9, 0xf8, 0xe8, 0x70, 0xa3, 0xe7, 0x20, 0xa9, 0xc3, 0xe1, 0x0e, 0xcf, - 0x1d, 0x77, 0x99, 0xef, 0xd5, 0x77, 0x52, 0x26, 0xd8, 0x08, 0xe0, 0x87, - 0x6d, 0x21, 0x45, 0xc9, 0x31, 0xb9, 0xd2, 0x19, 0x6d, 0x55, 0xf9, 0xd2, - 0xba, 0x61, 0xe7, 0x7b, 0xa5, 0x8a, 0xa5, 0x3b, 0x24, 0x2a, 0xee, 0x15, - 0xa7, 0xa2, 0xf7, 0x30, 0xa9, 0x3f, 0x61, 0xb9, 0x20, 0x15, 0x6a, 0x0f, - 0xbf, 0x8b, 0x99, 0x8a, 0x9f, 0x08, 0xc2, 0x19, 0xb2, 0x42, 0x64, 0x15, - 0x9f, 0xd7, 0xba, 0xe3, 0x07, 0x59, 0xd5, 0xc8, 0xbe, 0x86, 0x1b, 0x62, - 0x56, 0xbf, 0x7f, 0x77, 0xaf, 0x8d, 0x99, 0xcb, 0x7d, 0x7b, 0xd4, 0x99, - 0xec, 0xc0, 0xb8, 0x45, 0x29, 0xc7, 0xf4, 0x88, 0x65, 0x0b, 0x0e, 0xb8, - 0x15, 0xf8, 0x9c, 0x4b, 0x76, 0x6b, 0xc2, 0x9b, 0x91, 0xe2, 0x69, 0xfd, - 0xc6, 0xcf, 0x04, 0xcb, 0x57, 0xfd, 0xc0, 0x0c, 0xbc, 0xb8, 0x41, 0x45, - 0x40, 0x06, 0x7a, 0x98, 0x3c, 0xae, 0x40, 0xb3, 0xde, 0x2f, 0xe8, 0x7b, - 0x4f, 0x15, 0x65, 0x14, 0x5e, 0xbe, 0xc0, 0x13, 0x78, 0x2e, 0xa9, 0xd8, - 0xc2, 0x22, 0xb7, 0x49, 0x10, 0xe1, 0xd4, 0xbd, 0xae, 0x9d, 0x19, 0xaa, - 0x7e, 0xb1, 0x1c, 0x8f, 0xca, 0xca, 0x8c, 0x11, 0xf6, 0xe5, 0x23, 0x5c, - 0x37, 0x03, 0xde, 0x02, 0x7f, 0x20, 0xc1, 0x38, 0x89, 0xa8, 0xf0, 0x8b, - 0x50, 0x54, 0xe8, 0xe7, 0x98, 0x25, 0x7a, 0xa4, 0xa2, 0xb2, 0x71, 0xe6, - 0xe7, 0x9e, 0x55, 0x3c, 0x71, 0xcf, 0x41, 0x7a, 0x8a, 0x4b, 0x69, 0x57, - 0x23, 0x78, 0xb4, 0x07, 0x74, 0x86, 0x0a, 0x66, 0x35, 0x3e, 0xaa, 0xdb, - 0xb7, 0x9f, 0x78, 0x35, 0x0b, 0xdf, 0xaa, 0x0d, 0x86, 0xd3, 0x2a, 0x27, - 0x1d, 0xf5, 0xb8, 0xf1, 0x32, 0xb6, 0x12, 0x7c, 0xbe, 0xa0, 0x34, 0x46, - 0x95, 0x8a, 0xa7, 0xb6, 0xde, 0x28, 0x3c, 0x65, 0x24, 0xa5, 0x74, 0x5e, - 0xbe, 0x91, 0xf3, 0xc9, 0xcf, 0xd8, 0xc4, 0x3f, 0x2c, 0x46, 0x7f, 0xc2, - 0xc2, 0xb4, 0xda, 0x26, 0x89, 0x75, 0x61, 0x0d, 0xa3, 0x83, 0x82, 0x63, - 0xf5, 0x21, 0xc4, 0x65, 0x09, 0x27, 0x9e, 0x35, 0x7f, 0x0b, 0xe4, 0xc1, - 0xe5, 0x03, 0x1e, 0x66, 0x0e, 0x9d, 0x9f, 0xd9, 0x13, 0x8f, 0x17, 0x03, - 0x4e, 0x4d, 0xb3, 0x40, 0xdc, 0x2d, 0x9f, 0x60, 0xf5, 0x1f, 0x0f, 0xe4, - 0x6b, 0x05, 0xee, 0x04, 0x19, 0x6a, 0x19, 0x33, 0x8d, 0xd0, 0x1c, 0x7c, - 0xaf, 0xbf, 0xf8, 0xd5, 0x61, 0xa3, 0xa5, 0xa5, 0xbc, 0x60, 0x8c, 0xe6, - 0x22, 0x86, 0x63, 0x4f, 0x3f, 0x51, 0xbc, 0xf7, 0x2d, 0x66, 0x05, 0x62, - 0xce, 0xdc, 0x7e, 0xb9, 0xb0, 0x93, 0x1b, 0xad, 0x19, 0x7b, 0x94, 0x90, - 0x45, 0x11, 0xf2, 0x6d, 0xbf, 0xaa, 0x41, 0x7a, 0x0d, 0x1c, 0x21, 0xd2, - 0xb1, 0x1f, 0x99, 0x3f, 0x89, 0x68, 0x08, 0x82, 0xb2, 0xd0, 0x3b, 0x2f, - 0x68, 0x50, 0x59, 0xd0, 0x04, 0x10, 0x65, 0xbb, 0xab, 0x6d, 0x73, 0x1b, - 0x73, 0xe6, 0x5b, 0xfd, 0x4d, 0xd7, 0x85, 0xb3, 0xf4, 0xb6, 0x50, 0x37, - 0xc1, 0xc4, 0xfb, 0x5f, 0x01, 0x84, 0x50, 0x20, 0x60, 0x44, 0x30, 0x8a, - 0x5e, 0xd8, 0xf8, 0x8a, 0xd0, 0x02, 0xad, 0x22, 0x14, 0x76, 0xf1, 0x05, - 0x2b, 0xb7, 0xdd, 0xee, 0x2d, 0x36, 0x2d, 0xef, 0xaa, 0xca, 0x1a, 0x1b, - 0x2a, 0x4e, 0x3c, 0x8d, 0xc2, 0x5f, 0xb4, 0xad, 0x42, 0x37, 0x51, 0x4a, - 0x62, 0x83, 0x96, 0x31, 0xcf, 0x28, 0x1e, 0x28, 0x49, 0xcb, 0x80, 0xa0, - 0x5c, 0xa1, 0x43, 0x48, 0x70, 0xf1, 0x20, 0x2b, 0xd2, 0x38, 0xbf, 0x19, - 0xf0, 0xfc, 0x76, 0xb7, 0xf8, 0xd4, 0xb5, 0xf2, 0xaa, 0x98, 0x88, 0xb6, - 0x12, 0xd5, 0x2d, 0xf0, 0x0d, 0x64, 0xa0, 0xb2, 0xd7, 0xd4, 0x33, 0x21, - 0xf7, 0x74, 0x55, 0x2a, 0x8a, 0x90, 0x61, 0xcc, 0x32, 0x5a, 0xc5, 0xeb, - 0x24, 0x62, 0xf0, 0xf4, 0x37, 0x33, 0xf7, 0x77, 0xbd, 0x91, 0x8f, 0x57, - 0x52, 0xc8, 0x40, 0x89, 0x5c, 0x6d, 0xfd, 0x04, 0x85, 0xcf, 0x38, 0x8a, - 0xe7, 0x39, 0x74, 0x4d, 0xc9, 0xc6, 0x18, 0x69, 0x89, 0x39, 0x60, 0xfd, - 0xea, 0x0e, 0x73, 0xea, 0xf7, 0xb1, 0xac, 0x04, 0x40, 0x9e, 0xfa, 0x78, - 0x40, 0xcf, 0xd5, 0xcc, 0xe3, 0x1e, 0xb7, 0x03, 0x9c, 0x79, 0xe0, 0x35, - 0x2d, 0x4f, 0x28, 0x36, 0x3c, 0x91, 0x25, 0xb1, 0xca, 0xe6, 0x27, 0x9c, - 0x62, 0x23, 0x14, 0x84, 0xf1, 0xdc, 0x80, 0xfa, 0x9d, 0x0a, 0x31, 0x15, - 0xc1, 0x7b, 0xa3, 0x05, 0xe0, 0x3b, 0x34, 0x8f, 0xdf, 0x45, 0x37, 0x25, - 0x7b, 0x96, 0x13, 0x7a, 0x71, 0xb4, 0x14, 0xc8, 0x5d, 0xfd, 0x3b, 0x47, - 0x91, 0xb1, 0xe3, 0xa0, 0x7d, 0x42, 0x1c, 0xb5, 0x4c, 0xa8, 0x26, 0xaf, - 0xef, 0x72, 0xa1, 0x89, 0x73, 0x03, 0xb9, 0xd1, 0x84, 0x09, 0xd3, 0x68, - 0x57, 0x1f, 0x08, 0x47, 0x8b, 0xda, 0x08, 0xd3, 0xec, 0x8a, 0x39, 0xba, - 0xc0, 0x7a, 0xc8, 0x3d, 0x0c, 0xb5, 0x43, 0x98, 0x3a, 0x2e, 0x76, 0xdf, - 0x39, 0x05, 0x8a, 0x09, 0xd0, 0xf0, 0xf9, 0xe8, 0xc0, 0x1a, 0x7d, 0xf4, - 0x41, 0x73, 0xa3, 0x0f, 0xec, 0x8b, 0x3e, 0xe2, 0x74, 0xe1, 0x81, 0x81, - 0x4f, 0x80, 0x75, 0x88, 0x07, 0x4f, 0x18, 0x04, 0x69, 0xa7, 0x15, 0x70, - 0x9a, 0x8a, 0x9a, 0x09, 0xbb, 0x47, 0x58, 0xfd, 0xb6, 0xc3, 0x03, 0x1f, - 0x61, 0x05, 0xfe, 0x76, 0x3e, 0xb8, 0xa1, 0xf8, 0x50, 0x39, 0x0d, 0xe2, - 0x17, 0xef, 0x45, 0x3e, 0x2e, 0x1b, 0x0b, 0xc4, 0x26, 0x13, 0x58, 0xc3, - 0xb5, 0x7e, 0x38, 0x67, 0xf7, 0xf0, 0x58, 0xfc, 0x0a, 0xcb, 0x84, 0x56, - 0x58, 0x5f, 0x5c, 0x09, 0x68, 0xcb, 0x9e, 0xb1, 0xbd, 0x06, 0x8f, 0x0b, - 0x8b, 0x83, 0xe9, 0xd6, 0x44, 0x5f, 0x04, 0xc8, 0xa6, 0xdd, 0x18, 0x3b, - 0xb6, 0x4e, 0x1e, 0x17, 0xea, 0x69, 0x16, 0x88, 0x06, 0x7c, 0x88, 0x71, - 0x6b, 0x48, 0xa2, 0x0a, 0xc1, 0x72, 0xf4, 0x71, 0x61, 0x08, 0x6f, 0x2f, - 0xf4, 0xc8, 0x47, 0x6c, 0x78, 0x3d, 0x2e, 0x66, 0x64, 0x6f, 0xfe, 0xa2, - 0x3c, 0x43, 0xee, 0xa2, 0x22, 0xe0, 0x1f, 0x06, 0xd0, 0x07, 0xf4, 0x4e, - 0x3e, 0xb0, 0xc1, 0xf6, 0x30, 0x49, 0x76, 0xd4, 0xa9, 0x31, 0xcf, 0x1a, - 0xbb, 0x0f, 0xa6, 0xf2, 0xcd, 0x5b, 0x5c, 0x31, 0x3e, 0xb2, 0x64, 0x48, - 0xd5, 0xe8, 0xdf, 0x87, 0xe7, 0x5f, 0xf6, 0xec, 0xc9, 0xab, 0x7f, 0x78, - 0xd8, 0x1b, 0xaf, 0xc4, 0xfa, 0x9b, 0x21, 0x7d, 0x59, 0x14, 0xa3, 0x54, - 0x6e, 0x4e, 0x44, 0x40, 0x44, 0xea, 0xcb, 0xe2, 0x8e, 0xde, 0x77, 0x05, - 0x25, 0xb0, 0x5d, 0x60, 0xb7, 0x32, 0xf8, 0xdb, 0x98, 0x4b, 0x47, 0x3d, - 0x96, 0x39, 0x81, 0xf5, 0xae, 0xbe, 0xd4, 0xf9, 0x21, 0x76, 0x33, 0xdd, - 0x41, 0x3c, 0xdb, 0x24, 0xdf, 0x32, 0x09, 0x35, 0x42, 0x10, 0xbb, 0x8f, - 0x28, 0x70, 0x5e, 0x1c, 0x61, 0x2c, 0x7a, 0xe4, 0x43, 0x19, 0x10, 0xd4, - 0x42, 0x4b, 0xf7, 0xd9, 0x54, 0xa1, 0x02, 0xcc, 0x8a, 0x92, 0x30, 0x28, - 0xf9, 0x67, 0x60, 0x3f, 0x3c, 0x13, 0xee, 0x56, 0x48, 0x0c, 0x7a, 0xb4, - 0xa7, 0x28, 0xbe, 0xf6, 0x4a, 0x78, 0x42, 0x09, 0xf6, 0xfc, 0x42, 0x59, - 0xdf, 0x29, 0x7e, 0x0f, 0x6d, 0xce, 0x4c, 0x6e, 0x00, 0x2b, 0x80, 0x16, - 0xbe, 0xc0, 0x86, 0xea, 0x44, 0xfe, 0x7d, 0x89, 0x09, 0x2a, 0x66, 0xa7, - 0x9c, 0x9a, 0x3e, 0xe4, 0x9c, 0xc0, 0x0a, 0xb1, 0x86, 0xb4, 0xfe, 0xc3, - 0xf4, 0x7d, 0x3d, 0x92, 0x71, 0x4f, 0xc5, 0x23, 0x88, 0x5e, 0x7a, 0x6a, - 0x86, 0x1b, 0xd3, 0x42, 0xef, 0x17, 0xf4, 0x36, 0xe0, 0xdd, 0x6c, 0xe5, - 0x8d, 0xb4, 0x07, 0x6d, 0x6f, 0x4e, 0xe4, 0x6b, 0x98, 0xc7, 0x5a, 0xbe, - 0xec, 0xe7, 0x86, 0x40, 0x65, 0x3b, 0x90, 0x98, 0x9e, 0x67, 0xd3, 0x3d, - 0x96, 0x99, 0x4e, 0x2c, 0x23, 0x2e, 0xed, 0x27, 0xfc, 0x62, 0xd9, 0x6a, - 0xdd, 0xdc, 0x9b, 0x17, 0x36, 0x0c, 0xbf, 0x19, 0x18, 0xea, 0xff, 0x1e, - 0xb2, 0xd2, 0xbf, 0x34, 0x06, 0xe2, 0xb3, 0x54, 0x3c, 0x8b, 0x5f, 0x78, - 0x7e, 0xa4, 0x35, 0xfc, 0x83, 0x4b, 0xc3, 0x89, 0xf0, 0xa8, 0x23, 0xde, - 0x4e, 0x5d, 0x15, 0xc3, 0xb5, 0x57, 0x38, 0xef, 0x97, 0xe6, 0xad, 0xb6, - 0xfb, 0x9e, 0x8a, 0x00, 0x6d, 0x99, 0xbd, 0x62, 0x28, 0xaf, 0x7e, 0x56, - 0xf4, 0xa8, 0x98, 0xf6, 0x18, 0xd2, 0x39, 0x8f, 0x42, 0xeb, 0x25, 0xd5, - 0xa6, 0x3e, 0x8f, 0x0a, 0x05, 0xbf, 0x0f, 0x39, 0xc9, 0xf5, 0x91, 0x43, - 0xd4, 0xa2, 0x69, 0xba, 0x95, 0xc1, 0xe0, 0xe3, 0x0b, 0x9d, 0x87, 0xcc, - 0xc1, 0x31, 0x58, 0x2a, 0xb6, 0x60, 0xdd, 0xdf, 0x2c, 0xac, 0x57, 0x1e, - 0x15, 0xe3, 0x56, 0x1d, 0xdd, 0x82, 0xbc, 0x42, 0x81, 0x84, 0x11, 0xf7, - 0x7f, 0x51, 0x61, 0x84, 0x61, 0x7e, 0x63, 0x1f, 0xb8, 0xcf, 0x37, 0x5f, - 0x56, 0x6c, 0xc5, 0x52, 0xb9, 0x80, 0x02, 0xef, 0x0f, 0xed, 0x82, 0xcd, - 0x7f, 0x83, 0x0c, 0x7a, 0xa3, 0xa3, 0x1d, 0xad, 0x19, 0xea, 0xc9, 0x35, - 0xc2, 0xde, 0xe9, 0x1c, 0xdf, 0x42, 0x5e, 0xce, 0xfc, 0x54, 0x30, 0x23, - 0x53, 0x7a, 0x77, 0xe5, 0x64, 0x57, 0x30, 0x3a, 0x92, 0x41, 0xa6, 0x77, - 0x3c, 0x23, 0x0c, 0x46, 0xa0, 0x3c, 0xfc, 0x28, 0xc6, 0x1d, 0x4e, 0x61, - 0x2e, 0xef, 0x64, 0x90, 0x05, 0x3c, 0x8f, 0x48, 0xc6, 0x95, 0x3b, 0x2b, - 0x8a, 0x00, 0x27, 0x1d, 0xad, 0x0f, 0xb6, 0x28, 0x43, 0x8f, 0xba, 0x4a, - 0x2b, 0x35, 0x67, 0x0c, 0x14, 0x3d, 0xbd, 0xa5, 0x9a, 0x89, 0x05, 0x1c, - 0x25, 0xdd, 0x15, 0xac, 0x09, 0x7e, 0xe0, 0x37, 0xe0, 0xee, 0x20, 0x8e, - 0x48, 0xc8, 0x7c, 0xba, 0x45, 0xfe, 0xf2, 0xf2, 0xbc, 0x91, 0x10, 0xaa, - 0x03, 0x3a, 0x29, 0x14, 0x59, 0xca, 0xcb, 0x72, 0x03, 0x40, 0xf3, 0x2c, - 0xf8, 0x32, 0x8a, 0xcd, 0x27, 0xbe, 0xa4, 0x6d, 0x41, 0x72, 0x65, 0x79, - 0x05, 0x42, 0x51, 0x38, 0x1a, 0x36, 0xd7, 0x34, 0x22, 0x86, 0xee, 0x6f, - 0xac, 0x9b, 0xb2, 0x23, 0xf5, 0x62, 0x0b, 0x93, 0x47, 0xcc, 0xdf, 0x1f, - 0xad, 0x5e, 0xd0, 0x6b, 0x5b, 0x65, 0x2f, 0xa9, 0x75, 0x23, 0x42, 0x86, - 0xf3, 0x2d, 0xb1, 0xdf, 0xbe, 0x9c, 0xff, 0x1b, 0x96, 0xb4, 0x2f, 0x46, - 0x0d, 0x30, 0x43, 0x2e, 0x4d, 0x05, 0x1e, 0xc9, 0x19, 0xad, 0x3d, 0xd3, - 0x64, 0x7f, 0x10, 0x1c, 0xe4, 0x27, 0x50, 0x72, 0xb4, 0xfa, 0xc7, 0x04, - 0x5d, 0x11, 0x3c, 0xc7, 0xe2, 0xf3, 0xe4, 0x09, 0xef, 0x77, 0xfb, 0x8d, - 0x39, 0x97, 0xe8, 0x8d, 0xd7, 0x27, 0xf6, 0xf7, 0x66, 0x5c, 0xa4, 0xab, - 0x9b, 0x5e, 0x46, 0x21, 0x2c, 0xf3, 0xc0, 0xca, 0xfd, 0x31, 0x78, 0x2d, - 0x6d, 0xc2, 0x06, 0xcb, 0x70, 0x13, 0x53, 0xd8, 0x42, 0xb1, 0xbb, 0xda, - 0xc7, 0xcd, 0x5c, 0x4b, 0xa4, 0x56, 0x90, 0xd8, 0xfc, 0xe2, 0x7b, 0x87, - 0x9d, 0x70, 0xad, 0x50, 0x42, 0x26, 0x87, 0x9c, 0xde, 0xb6, 0x78, 0xd9, - 0x7c, 0x7d, 0x3f, 0x7f, 0x8b, 0xbe, 0xf1, 0x8a, 0x5d, 0x55, 0xcf, 0x63, - 0x60, 0x7f, 0x55, 0xd4, 0x8d, 0xf0, 0x63, 0xca, 0x61, 0x76, 0x02, 0x7c, - 0x55, 0x87, 0xf7, 0x94, 0xc1, 0x16, 0x7e, 0x6f, 0x3b, 0x4e, 0x98, 0x1f, - 0xef, 0x78, 0x1f, 0xde, 0xd6, 0xae, 0xf3, 0x9d, 0xe6, 0x5e, 0x91, 0xe2, - 0x70, 0xb5, 0x3a, 0x73, 0x08, 0x77, 0xdf, 0xfa, 0x16, 0xb0, 0x12, 0xed, - 0xde, 0x3f, 0x9f, 0x54, 0xb7, 0xae, 0xc8, 0x72, 0x7a, 0x86, 0x12, 0xf8, - 0x27, 0x0e, 0xf9, 0x27, 0xd0, 0x47, 0x78, 0x5e, 0xdc, 0x9d, 0x1b, 0x8f, - 0x02, 0x47, 0x9c, 0x5b, 0x07, 0x45, 0x62, 0xe0, 0x15, 0x09, 0x54, 0x04, - 0xec, 0x01, 0x5a, 0x82, 0x8c, 0x18, 0x49, 0xe0, 0xd1, 0xc5, 0xc2, 0x2b, - 0xe0, 0xf1, 0x01, 0x11, 0x74, 0x17, 0x49, 0x72, 0x17, 0x56, 0x7e, 0x52, - 0x97, 0xbb, 0x20, 0x18, 0xe2, 0x70, 0x9c, 0x88, 0xf5, 0x47, 0x4a, 0x42, - 0x0a, 0x60, 0x72, 0xa8, 0xbd, 0xe3, 0x28, 0xf8, 0xd5, 0x8f, 0x9c, 0x20, - 0x7b, 0x1e, 0x91, 0x87, 0x1e, 0x1e, 0x8a, 0x63, 0xe1, 0x84, 0x5f, 0xb5, - 0x05, 0x1c, 0xc4, 0x37, 0x9e, 0xd6, 0x3f, 0x63, 0x5a, 0x3f, 0x21, 0x32, - 0xa2, 0xe0, 0xc0, 0x13, 0x82, 0x03, 0x02, 0xac, 0x4f, 0x3e, 0x29, 0x42, - 0x20, 0xc8, 0x25, 0x98, 0x1d, 0x5a, 0xef, 0x9c, 0x04, 0xcf, 0xde, 0x0e, - 0x06, 0xf5, 0xe9, 0x82, 0x20, 0xb6, 0x5a, 0xd3, 0xe9, 0xd7, 0xfc, 0xa5, - 0xb2, 0x89, 0x27, 0xd6, 0x07, 0xcf, 0x4b, 0xb8, 0x74, 0x96, 0xf0, 0x64, - 0x73, 0xd8, 0xce, 0xc0, 0x33, 0x29, 0x8b, 0x79, 0x52, 0x53, 0xcc, 0x93, - 0xfd, 0x00, 0x23, 0xff, 0x33, 0xba, 0xc2, 0x40, 0xa5, 0xe3, 0xa0, 0xe7, - 0x79, 0xf9, 0xc1, 0x73, 0xa3, 0x43, 0xfe, 0xe1, 0xc5, 0x36, 0x88, 0xa8, - 0x82, 0xf1, 0x88, 0x7f, 0xf0, 0xd7, 0x62, 0x40, 0xc7, 0x80, 0x00, 0x77, - 0x60, 0xf7, 0x5d, 0x7c, 0x3b, 0xff, 0x49, 0x3b, 0xa1, 0x82, 0xe6, 0x9c, - 0xc1, 0xda, 0xd0, 0xb1, 0x4e, 0x55, 0x8c, 0x78, 0x02, 0x07, 0x62, 0xb5, - 0x48, 0xa9, 0xc1, 0x89, 0x09, 0xb5, 0xee, 0xc1, 0x7b, 0x84, 0xea, 0x88, - 0x39, 0x67, 0xb5, 0xbb, 0xa1, 0x17, 0x9c, 0x5e, 0x6e, 0xe2, 0x5e, 0xa0, - 0xfd, 0xfa, 0xe5, 0xf0, 0xe7, 0x42, 0x71, 0x9c, 0x59, 0x8b, 0xb3, 0x31, - 0x4f, 0xb8, 0x2f, 0x78, 0xb6, 0xe5, 0xe6, 0xb5, 0x49, 0x91, 0x81, 0x89, - 0xf0, 0x70, 0x77, 0xe4, 0x9a, 0xf6, 0x92, 0x9e, 0xcb, 0xea, 0x3f, 0xdb, - 0x02, 0x6f, 0xca, 0xc1, 0x0a, 0xa4, 0x1b, 0x12, 0x5e, 0xd1, 0x61, 0xa0, - 0x12, 0xfa, 0xb9, 0xf8, 0x70, 0x26, 0xda, 0xf2, 0xd7, 0x5b, 0x82, 0x5e, - 0xba, 0xf6, 0x35, 0xe7, 0x42, 0xde, 0x2a, 0x4b, 0x63, 0x80, 0x18, 0x9f, - 0xe4, 0x70, 0x1f, 0x8f, 0x32, 0xbb, 0xee, 0x27, 0xb4, 0xd1, 0x6a, 0x2e, - 0xc6, 0xe0, 0x5a, 0x93, 0x9b, 0x4f, 0x1b, 0xc5, 0xe4, 0xb8, 0x8b, 0x55, - 0x19, 0x44, 0x5f, 0x72, 0xf2, 0xb2, 0x40, 0xb1, 0xb5, 0xf0, 0x5c, 0x7e, - 0x98, 0xb9, 0x77, 0xf5, 0x45, 0x3f, 0x47, 0x4f, 0xdd, 0x34, 0x78, 0xe2, - 0xf0, 0x62, 0x02, 0x94, 0xbc, 0x2c, 0xb8, 0xf2, 0x01, 0x68, 0xa5, 0x10, - 0xd1, 0x57, 0xbc, 0x56, 0xbe, 0xe9, 0x36, 0x07, 0xf5, 0xb0, 0x18, 0x68, - 0xc4, 0xf2, 0x28, 0xb1, 0x8b, 0xfb, 0x84, 0x82, 0xa7, 0x27, 0x6e, 0xc8, - 0x3c, 0x0b, 0x42, 0x61, 0x74, 0x50, 0x55, 0x37, 0x9e, 0xa5, 0x41, 0xcf, - 0x52, 0x09, 0xc3, 0xb4, 0x82, 0x77, 0x5c, 0x4f, 0x92, 0x9f, 0x71, 0x92, - 0xfc, 0xac, 0x7c, 0x4d, 0x6a, 0xbc, 0x25, 0xd5, 0xbe, 0x83, 0x4f, 0x58, - 0x94, 0x7f, 0x8a, 0xf5, 0x78, 0xf8, 0xe1, 0x43, 0xe0, 0xc3, 0x2f, 0x4e, - 0xa8, 0x9e, 0x3c, 0x7b, 0x7a, 0xea, 0x11, 0x12, 0x01, 0xdc, 0x2c, 0x45, - 0xb7, 0x14, 0xfe, 0x54, 0x0d, 0x2a, 0x26, 0xbc, 0x20, 0x78, 0x45, 0xf3, - 0x02, 0xc3, 0x47, 0xac, 0xcf, 0xa3, 0x82, 0x8d, 0xf9, 0x3c, 0xf3, 0x59, - 0xe3, 0x8a, 0xc7, 0xf3, 0xe3, 0x56, 0x19, 0xd8, 0x47, 0x38, 0x24, 0xe1, - 0x9d, 0xba, 0xf2, 0xcb, 0x55, 0x5d, 0x09, 0x78, 0xe8, 0xe9, 0x12, 0x84, - 0x71, 0x76, 0xae, 0x23, 0xe6, 0xcc, 0x04, 0x4f, 0x5c, 0xef, 0x00, 0x07, - 0x00, 0x1e, 0xf9, 0xc0, 0x28, 0x85, 0x8d, 0xa1, 0x09, 0x7c, 0x1a, 0xfc, - 0x9c, 0x4d, 0xf1, 0xc7, 0x8c, 0x15, 0x77, 0x2f, 0x68, 0xa3, 0x6b, 0x3d, - 0xc5, 0xcc, 0x96, 0x3d, 0x4c, 0xe3, 0xea, 0x2d, 0xcb, 0x49, 0x3f, 0x5d, - 0x54, 0x74, 0xfe, 0x1e, 0x49, 0x67, 0xad, 0xac, 0x9a, 0x8b, 0xb7, 0xa5, - 0x36, 0x2e, 0x27, 0x61, 0x4f, 0xb9, 0xcb, 0xb3, 0x06, 0xfc, 0x29, 0x77, - 0xaf, 0xfc, 0xf1, 0x15, 0xfd, 0xdc, 0x3f, 0x39, 0x50, 0x33, 0xf2, 0x1c, - 0x9b, 0x5e, 0xe6, 0xd2, 0xdf, 0x05, 0x20, 0x42, 0x0b, 0x99, 0xd3, 0xa4, - 0x82, 0x40, 0xde, 0x8d, 0xb8, 0x57, 0x39, 0x51, 0xe1, 0x2f, 0x1f, 0xc3, - 0x88, 0xcf, 0xcd, 0x85, 0xf1, 0x1c, 0x12, 0x84, 0x5e, 0x68, 0x84, 0xc1, - 0xc5, 0xb8, 0xc0, 0x11, 0xae, 0x83, 0xce, 0x1e, 0x85, 0x4b, 0x98, 0x27, - 0x3f, 0x07, 0xb4, 0x67, 0x33, 0x11, 0x01, 0x5e, 0x88, 0x89, 0x58, 0x12, - 0x95, 0x64, 0x96, 0x1f, 0x6f, 0x3d, 0x9a, 0xa4, 0x7a, 0x8e, 0x50, 0x37, - 0xf8, 0x0c, 0xc3, 0x43, 0x4f, 0x4e, 0xc8, 0x26, 0xfa, 0x0e, 0xc7, 0x6f, - 0x04, 0xec, 0x6b, 0x20, 0x04, 0xe4, 0x37, 0x6d, 0xce, 0xcd, 0x4c, 0xd9, - 0xe2, 0xf3, 0x7d, 0xc3, 0xda, 0x46, 0xe1, 0xb0, 0xdb, 0x3d, 0x82, 0x2b, - 0x1b, 0xf6, 0xfd, 0x28, 0x7e, 0x53, 0x69, 0xc2, 0x16, 0xbb, 0x3a, 0xcf, - 0xf7, 0x5c, 0x61, 0xda, 0x8e, 0xed, 0x84, 0xde, 0x83, 0xde, 0xc7, 0x33, - 0x26, 0x04, 0x46, 0x7a, 0xf2, 0x01, 0xdc, 0x5d, 0xc0, 0xdd, 0xe1, 0x19, - 0x31, 0x84, 0xfe, 0x05, 0xad, 0xc9, 0x48, 0x94, 0xd0, 0xf9, 0x19, 0xba, - 0x46, 0x8a, 0xd5, 0xee, 0x7a, 0xb9, 0xaf, 0x9e, 0x5e, 0x19, 0x29, 0xd0, - 0x72, 0x55, 0x2e, 0xbf, 0xb6, 0xd3, 0x32, 0x3d, 0x70, 0xc7, 0xb1, 0xc8, - 0x35, 0x15, 0x9f, 0xf6, 0x16, 0xd5, 0x82, 0x68, 0x60, 0xaf, 0x57, 0xaa, - 0xb3, 0x28, 0x62, 0x01, 0xcd, 0x26, 0xd6, 0x72, 0x13, 0xf2, 0xf4, 0x88, - 0x63, 0xf6, 0x79, 0xc9, 0x7b, 0x8e, 0xb6, 0x56, 0x83, 0x02, 0x56, 0xfc, - 0xfa, 0xd6, 0x9f, 0x63, 0x4f, 0x48, 0xc9, 0x1f, 0x3d, 0x7a, 0x20, 0x6b, - 0x17, 0x83, 0xbe, 0x8c, 0xb3, 0x8b, 0x4c, 0xd7, 0x84, 0xb9, 0xc6, 0x04, - 0x45, 0xfc, 0x3d, 0x56, 0x99, 0x32, 0xf6, 0xc7, 0x9a, 0x38, 0x31, 0x4f, - 0xa7, 0x50, 0xa1, 0x66, 0xf9, 0xd4, 0x9e, 0x59, 0x6e, 0x9e, 0xf4, 0x8a, - 0x84, 0xc4, 0xc4, 0xab, 0x77, 0x6c, 0x21, 0x7c, 0xa2, 0x1a, 0xcf, 0xf0, - 0x5e, 0xad, 0x97, 0x88, 0xe6, 0x15, 0xfb, 0xf1, 0xaa, 0x14, 0xd1, 0x1d, - 0xb3, 0xd6, 0x6a, 0x0c, 0x2f, 0x4e, 0xf1, 0xf3, 0x7e, 0xc0, 0xca, 0x20, - 0x38, 0x4e, 0x55, 0x14, 0xef, 0xb3, 0xd2, 0x75, 0xd1, 0xf5, 0x9e, 0x48, - 0x0c, 0xe2, 0xc5, 0x52, 0x6c, 0x11, 0x04, 0x79, 0x99, 0x1f, 0x6a, 0x29, - 0xc1, 0xbf, 0x6c, 0xc2, 0xfc, 0xa0, 0x50, 0x21, 0x42, 0x43, 0x06, 0xb3, - 0x98, 0x51, 0x61, 0x41, 0x71, 0x2b, 0x54, 0x05, 0x7e, 0x07, 0x60, 0xb8, - 0xe2, 0xee, 0x8f, 0xa0, 0x2d, 0x10, 0xb6, 0x2c, 0x41, 0xfa, 0x87, 0x17, - 0x8a, 0x45, 0xfa, 0x5a, 0x9c, 0x52, 0xe3, 0xa2, 0x91, 0x70, 0xb7, 0xa5, - 0x84, 0x42, 0x1e, 0x0c, 0x91, 0xa5, 0x70, 0x1d, 0xdf, 0xef, 0xb2, 0xd6, - 0x2f, 0x0f, 0x55, 0xb1, 0x15, 0x5a, 0x60, 0x3e, 0xaa, 0xa8, 0xf5, 0x28, - 0x54, 0x99, 0x11, 0xcb, 0xc0, 0x30, 0x52, 0x54, 0xe6, 0x31, 0xbe, 0x5c, - 0xc1, 0xb7, 0x22, 0x7f, 0x80, 0xed, 0x6b, 0xb8, 0x5b, 0x34, 0xc0, 0x46, - 0x91, 0x4d, 0x83, 0x08, 0x1a, 0x93, 0x97, 0xb2, 0x6d, 0x17, 0xae, 0x49, - 0x85, 0xb8, 0xd6, 0x0b, 0xd5, 0xfa, 0x5a, 0xe8, 0x0c, 0x25, 0x1a, 0x0a, - 0x4f, 0xc0, 0xa4, 0x2f, 0x43, 0x58, 0x44, 0xad, 0x2b, 0xb3, 0x95, 0x0b, - 0x54, 0x67, 0xc2, 0x7f, 0xc4, 0xde, 0xd8, 0xdb, 0x01, 0x39, 0x7b, 0x81, - 0x54, 0x0e, 0x6e, 0x84, 0xee, 0xad, 0x27, 0xe8, 0x43, 0x84, 0xe1, 0x08, - 0x9e, 0xb4, 0x49, 0x0a, 0x85, 0xb1, 0x66, 0xc1, 0x3f, 0xa8, 0xb9, 0x63, - 0x09, 0xc5, 0xdc, 0xce, 0xc2, 0xc7, 0x07, 0x7d, 0xc1, 0xb7, 0x40, 0x78, - 0x40, 0x5e, 0x8f, 0x11, 0x18, 0x2d, 0xad, 0xcb, 0x3f, 0x14, 0x48, 0x21, - 0xc7, 0x12, 0xe5, 0xde, 0x05, 0x04, 0xf7, 0xa8, 0x22, 0xf9, 0xdc, 0x33, - 0xe1, 0x15, 0x9a, 0x32, 0x04, 0x53, 0x3c, 0x5f, 0x09, 0x51, 0x4d, 0x15, - 0x83, 0x0b, 0x25, 0x65, 0xd3, 0x8b, 0x23, 0x48, 0xb2, 0x46, 0x25, 0xf1, - 0xde, 0x88, 0xe1, 0x11, 0xd5, 0xa2, 0x8c, 0xc1, 0xce, 0x40, 0x11, 0x1e, - 0x33, 0x01, 0xc1, 0x26, 0x16, 0x0a, 0x1a, 0xd6, 0x3e, 0x94, 0x50, 0xf5, - 0xbb, 0xb2, 0xf3, 0xcc, 0x38, 0xda, 0x05, 0xf6, 0xc7, 0x3f, 0x1d, 0x50, - 0x79, 0xad, 0xc4, 0xb3, 0xeb, 0xc1, 0x51, 0x0a, 0xc7, 0x73, 0x24, 0x21, - 0xe9, 0x1e, 0x8a, 0xd2, 0x57, 0x82, 0xec, 0x61, 0xc7, 0x78, 0xa4, 0x04, - 0xc6, 0x83, 0xd1, 0x69, 0x09, 0x55, 0x70, 0x4f, 0x41, 0x3c, 0xc5, 0xfd, - 0x32, 0x1e, 0xb4, 0x6a, 0x50, 0xf6, 0xab, 0x48, 0xd5, 0x7f, 0x50, 0xd4, - 0x20, 0xb0, 0x7b, 0x40, 0xc1, 0xa8, 0x40, 0x5c, 0x7f, 0x14, 0x7c, 0xe2, - 0xa8, 0x59, 0x24, 0xf1, 0xea, 0x25, 0x7c, 0xf4, 0x53, 0x60, 0xdd, 0x45, - 0x8c, 0xbe, 0xe5, 0x4c, 0xca, 0x19, 0x28, 0xc2, 0xd3, 0x3b, 0x94, 0x06, - 0x1b, 0x49, 0xee, 0xde, 0x76, 0xa1, 0x5b, 0x45, 0x20, 0xaf, 0x45, 0x1a, - 0x49, 0xee, 0x25, 0xb9, 0x47, 0x4e, 0x66, 0x33, 0x17, 0xb7, 0xbb, 0x8a, - 0x5a, 0x5c, 0xad, 0xa9, 0x78, 0xb2, 0x11, 0x19, 0x29, 0x72, 0x83, 0xd2, - 0x31, 0x8b, 0x90, 0x95, 0xf4, 0x06, 0xa5, 0xf7, 0xf8, 0x0a, 0xbf, 0x50, - 0xce, 0x22, 0x0b, 0x98, 0xb0, 0x97, 0x57, 0x54, 0x3f, 0xff, 0x08, 0xaf, - 0x5f, 0xa0, 0x78, 0x39, 0xf6, 0x74, 0x67, 0x5f, 0x09, 0x1b, 0x75, 0xa7, - 0x3d, 0x65, 0x81, 0x0f, 0x1c, 0x76, 0x2a, 0xc1, 0xa7, 0xc0, 0x94, 0x58, - 0x8e, 0xf8, 0xd4, 0xc3, 0x81, 0x11, 0x5d, 0x77, 0x64, 0x70, 0x0c, 0x7b, - 0x3b, 0x94, 0x8d, 0x29, 0x62, 0x55, 0xd2, 0xc8, 0x98, 0x41, 0x16, 0x0c, - 0x0a, 0x2c, 0x1d, 0x22, 0x7b, 0x2a, 0xb3, 0x2c, 0xaa, 0xfb, 0xa5, 0x2f, - 0x01, 0x23, 0x2a, 0xad, 0x52, 0x04, 0x89, 0xf2, 0xe6, 0xef, 0xcb, 0xbe, - 0x84, 0x6c, 0x32, 0x08, 0x92, 0xb7, 0x6b, 0x77, 0x45, 0xef, 0x43, 0x30, - 0xc8, 0x7d, 0x49, 0xf5, 0x45, 0xe5, 0x68, 0x06, 0x99, 0x68, 0x28, 0x47, - 0x13, 0xdc, 0x52, 0xf8, 0xb0, 0x1c, 0xa6, 0xec, 0xc3, 0xab, 0x31, 0xa9, - 0x39, 0x75, 0x0e, 0xf7, 0x93, 0x59, 0x24, 0xa1, 0xea, 0x12, 0x82, 0xcf, - 0x02, 0xd1, 0xcc, 0x22, 0x21, 0x9c, 0xe0, 0x16, 0xc9, 0xaf, 0x11, 0x71, - 0x4d, 0xa5, 0x5e, 0x73, 0x49, 0xd7, 0x92, 0x3c, 0x46, 0xf4, 0x67, 0x23, - 0xa8, 0x16, 0x13, 0x11, 0xe5, 0x43, 0xc0, 0x32, 0x4e, 0xf9, 0x10, 0x20, - 0x2b, 0x21, 0x42, 0x66, 0x90, 0xb1, 0x79, 0x39, 0x4c, 0x70, 0xd9, 0xd1, - 0xc6, 0xf7, 0x91, 0xda, 0x01, 0xa2, 0x0a, 0x8a, 0x18, 0x33, 0xde, 0xb8, - 0x47, 0x54, 0xca, 0x83, 0x52, 0xfc, 0x25, 0x1d, 0xca, 0x94, 0x74, 0x14, - 0x53, 0xec, 0x70, 0x22, 0xda, 0x35, 0xef, 0xc4, 0x96, 0xb4, 0x17, 0x5b, - 0x76, 0xdc, 0xc7, 0x55, 0x3d, 0xd0, 0xe8, 0x71, 0x79, 0x63, 0x24, 0x2b, - 0x88, 0x9e, 0xb8, 0x7c, 0x7d, 0x62, 0xe6, 0x80, 0x59, 0x94, 0xcc, 0x18, - 0x7c, 0x72, 0xba, 0x97, 0xff, 0xf1, 0x58, 0x44, 0xad, 0xb8, 0x31, 0x2f, - 0xc5, 0x99, 0x78, 0xb3, 0x96, 0x1e, 0x35, 0xa2, 0x18, 0xcf, 0xf9, 0x2f, - 0xf7, 0xc1, 0x7f, 0xd1, 0x9a, 0xff, 0xf8, 0xe2, 0xff, 0xc3, 0x81, 0xaf, - 0x41, 0xe4, 0xfa, 0xed, 0xde, 0x6e, 0x2c, 0xa8, 0xec, 0x1c, 0x9b, 0xe7, - 0x92, 0x00, 0xcf, 0x3b, 0x21, 0x47, 0xe0, 0xbd, 0xbe, 0xa2, 0xde, 0x8c, - 0x78, 0x19, 0x74, 0x3a, 0x86, 0x32, 0xd4, 0xd0, 0xa9, 0x06, 0x82, 0x70, - 0xd4, 0xf8, 0x53, 0x92, 0xc6, 0x1f, 0xc5, 0x67, 0xc9, 0x81, 0x26, 0xab, - 0x7c, 0x67, 0xc3, 0x10, 0xcb, 0xc4, 0xb8, 0x2e, 0x2d, 0xb7, 0xfb, 0x6e, - 0x7c, 0x94, 0xb3, 0xec, 0xf1, 0x52, 0x1a, 0x41, 0xda, 0xce, 0x3c, 0xed, - 0x93, 0x57, 0x97, 0x27, 0x8e, 0xe9, 0x95, 0x61, 0x46, 0x39, 0xa2, 0x16, - 0xe7, 0xca, 0x27, 0x5e, 0xcb, 0xf3, 0x60, 0xf1, 0xcf, 0x23, 0x8a, 0xaf, - 0x38, 0x45, 0x38, 0xcf, 0x48, 0xb7, 0x47, 0x63, 0x8a, 0x26, 0xe6, 0x6b, - 0xe0, 0x08, 0x42, 0x99, 0x22, 0x10, 0x96, 0x96, 0x5a, 0x99, 0x15, 0xef, - 0xd7, 0xec, 0xd3, 0x47, 0x8a, 0xd4, 0x43, 0x63, 0x03, 0x39, 0x83, 0xb6, - 0x18, 0x53, 0x3f, 0x8c, 0xad, 0x90, 0xe2, 0x39, 0x92, 0xe9, 0x15, 0x63, - 0x5b, 0x7c, 0x64, 0x4f, 0x4c, 0xb8, 0x05, 0x45, 0x87, 0x3b, 0x61, 0xcc, - 0xc7, 0x20, 0x93, 0x1a, 0xa9, 0xd6, 0xd8, 0x11, 0xbb, 0x98, 0x04, 0x84, - 0xb3, 0x92, 0x35, 0x60, 0xcf, 0x81, 0x58, 0x0a, 0x91, 0xbc, 0x4d, 0xa3, - 0x92, 0xd3, 0xc1, 0x88, 0x2b, 0x6d, 0x3d, 0x08, 0xc3, 0x8c, 0x6b, 0xd7, - 0x3b, 0xb2, 0xfc, 0x0c, 0x76, 0xda, 0x6b, 0x54, 0xcc, 0xd0, 0xa9, 0xce, - 0xe6, 0xf2, 0x67, 0xbe, 0x9a, 0xa9, 0x10, 0x8d, 0xca, 0x1b, 0xc8, 0xf0, - 0x70, 0x42, 0xb3, 0x02, 0x06, 0x75, 0x49, 0x5f, 0x4b, 0x39, 0x08, 0x39, - 0x3f, 0x49, 0x8a, 0x9a, 0x5e, 0x51, 0xb1, 0x16, 0x7b, 0xb9, 0x26, 0x82, - 0x6d, 0x66, 0x63, 0xf1, 0x8a, 0x0a, 0xc3, 0xd6, 0x9f, 0xb2, 0xb4, 0xaa, - 0xd8, 0xed, 0x62, 0xef, 0x63, 0x4d, 0xbe, 0x54, 0xb5, 0xe7, 0xb4, 0xf7, - 0xec, 0xd9, 0x53, 0x1d, 0xb4, 0xd0, 0xc0, 0xa7, 0x74, 0x4f, 0xdf, 0x46, - 0xa5, 0x9f, 0x75, 0x74, 0xac, 0xd8, 0xa8, 0x37, 0x5a, 0x3f, 0xaa, 0x4c, - 0x69, 0xca, 0x98, 0x13, 0x63, 0x27, 0x29, 0x9f, 0x39, 0x7b, 0xed, 0xb9, - 0xfa, 0x94, 0x7f, 0xc4, 0xc5, 0xbd, 0x31, 0xb2, 0xe4, 0x19, 0x1d, 0xaa, - 0x89, 0x9d, 0xb0, 0x94, 0x8e, 0x9a, 0x0d, 0xfb, 0xf4, 0xfd, 0x88, 0x18, - 0x56, 0xc5, 0x8c, 0x8f, 0xdc, 0xc8, 0x61, 0x35, 0x3e, 0x68, 0xc4, 0x3d, - 0x3f, 0x1a, 0xee, 0x5c, 0xae, 0x39, 0x6c, 0xe8, 0xc5, 0x57, 0x4a, 0x3d, - 0x68, 0xc6, 0x8a, 0xef, 0x62, 0x1b, 0x83, 0x0a, 0x15, 0x65, 0x3f, 0xd5, - 0x0e, 0xba, 0x4b, 0x56, 0x05, 0x26, 0x37, 0x70, 0x37, 0xb6, 0x2f, 0x55, - 0xf8, 0x28, 0xa6, 0xde, 0x4c, 0x32, 0xe6, 0x84, 0x69, 0xfe, 0x44, 0xbf, - 0x69, 0x8a, 0xe7, 0x8c, 0xc1, 0x54, 0x6d, 0x57, 0x54, 0x5a, 0x68, 0xf1, - 0x2a, 0xbb, 0xdf, 0xa1, 0x06, 0xf6, 0x23, 0x31, 0xc7, 0x91, 0x40, 0x4c, - 0x9b, 0xbb, 0x5a, 0x51, 0xfb, 0x20, 0x25, 0x52, 0xae, 0x79, 0x0e, 0xe7, - 0x94, 0xb5, 0xdf, 0x6a, 0xee, 0x98, 0xc6, 0x52, 0x58, 0x1d, 0x85, 0x13, - 0x57, 0xd5, 0x38, 0x1f, 0x34, 0xe2, 0x72, 0x5a, 0x2e, 0x30, 0x8a, 0x39, - 0x52, 0x84, 0x11, 0x6f, 0xe4, 0x48, 0x5f, 0x70, 0x21, 0xa9, 0x87, 0x8f, - 0xf8, 0x0c, 0xc5, 0x9d, 0xd0, 0x89, 0x1b, 0x01, 0x1e, 0x3c, 0x14, 0x0b, - 0x29, 0xa6, 0xeb, 0x23, 0xcd, 0x76, 0xa9, 0xe9, 0x67, 0xc2, 0xf4, 0x30, - 0x2f, 0x39, 0xe1, 0x41, 0x29, 0x85, 0xa0, 0xd1, 0x5f, 0x10, 0x0a, 0x34, - 0x18, 0xe1, 0x5b, 0x38, 0xc7, 0x52, 0x7d, 0x7f, 0x85, 0xfd, 0x28, 0x23, - 0x0c, 0x74, 0xc6, 0x3d, 0x5f, 0xd2, 0xff, 0xf8, 0xf6, 0x28, 0xc0, 0xe7, - 0x47, 0x07, 0x1c, 0xed, 0xf4, 0x4a, 0xdf, 0xd9, 0x57, 0x79, 0xa4, 0xa5, - 0x8c, 0x33, 0x26, 0xe4, 0x14, 0xe9, 0x84, 0x02, 0x22, 0x21, 0x11, 0x29, - 0x22, 0xd4, 0xb4, 0xf4, 0x78, 0xd5, 0x82, 0x6e, 0xf4, 0xaa, 0xdf, 0x51, - 0xf8, 0xfa, 0x4d, 0xd7, 0x95, 0x5f, 0xbc, 0xf4, 0x0a, 0xc5, 0xfb, 0xf3, - 0x43, 0x0d, 0x76, 0x82, 0xf5, 0xec, 0x4e, 0x49, 0xec, 0x15, 0xc5, 0x99, - 0x5c, 0x39, 0x2e, 0xd8, 0xa6, 0x93, 0x17, 0x17, 0x1d, 0xe0, 0x98, 0x83, - 0xd0, 0x0a, 0x77, 0xd1, 0x86, 0xa1, 0xd1, 0x64, 0x58, 0x73, 0x10, 0xca, - 0x4e, 0x8a, 0x09, 0x63, 0xcc, 0xd9, 0x81, 0x5b, 0x70, 0x9a, 0xe8, 0xe4, - 0x03, 0x37, 0xdf, 0x3b, 0x2e, 0x62, 0xcf, 0x11, 0x37, 0xa1, 0xa8, 0x9d, - 0xae, 0xa8, 0xd2, 0x5e, 0x4b, 0xa6, 0x89, 0x4e, 0x04, 0x54, 0xa9, 0x13, - 0xaf, 0x13, 0xb1, 0x23, 0x88, 0x8a, 0x50, 0xcc, 0x50, 0xd1, 0x81, 0x15, - 0x7b, 0xea, 0x2d, 0xb6, 0xa9, 0x0c, 0x7b, 0x45, 0x3b, 0x41, 0xa2, 0x1c, - 0xf2, 0xf2, 0x00, 0x77, 0x8a, 0xde, 0xa2, 0xee, 0xf0, 0xd7, 0x7f, 0xfc, - 0x33, 0x6b, 0x93, 0x23, 0xad, 0xbc, 0xa0, 0x1e, 0xad, 0x6e, 0x2e, 0x9d, - 0xa9, 0x90, 0xd2, 0x8e, 0xc2, 0xe6, 0xba, 0xf7, 0x09, 0xaf, 0xf9, 0xc2, - 0x1e, 0x19, 0x7b, 0x95, 0x89, 0xa9, 0x0a, 0x7f, 0x10, 0x81, 0xf6, 0x1c, - 0x13, 0x59, 0xf9, 0xf8, 0x90, 0xdd, 0x6c, 0x86, 0xea, 0xb9, 0xcb, 0x15, - 0x9f, 0x27, 0x17, 0x17, 0x29, 0xb4, 0xc8, 0x8e, 0x2e, 0xd6, 0x97, 0x8d, - 0x61, 0x62, 0x5f, 0xa0, 0xa7, 0xbd, 0xa6, 0xae, 0x1b, 0x06, 0x96, 0x1b, - 0xdc, 0xa8, 0xfc, 0x4e, 0x90, 0x3b, 0x2d, 0xd8, 0x01, 0x87, 0x32, 0xbc, - 0x7f, 0x17, 0x1a, 0x48, 0xf8, 0xe7, 0xef, 0xfc, 0x3f, 0x5c, 0xed, 0xfc, - 0x07, 0x29, 0x8b, 0x7f, 0x97, 0x03, 0x7a, 0x06, 0xfe, 0xc1, 0x4e, 0x92, - 0x00, 0x6b, 0x8d, 0x7f, 0x17, 0xb1, 0xc2, 0x70, 0x75, 0xd7, 0x61, 0xd6, - 0xf1, 0xff, 0xd1, 0x8e, 0xe1, 0x3f, 0x28, 0x06, 0xfd, 0x47, 0xe3, 0x05, - 0xff, 0xb0, 0x61, 0x26, 0xa0, 0x38, 0xaa, 0x87, 0x1c, 0x18, 0x9e, 0x1f, - 0xec, 0xcf, 0x19, 0xa6, 0x1b, 0xff, 0x16, 0x28, 0x0e, 0x56, 0xe4, 0xb0, - 0xf8, 0x84, 0xed, 0x5f, 0xbd, 0x56, 0xb5, 0x6d, 0x31, 0x81, 0xc9, 0x13, - 0xfd, 0xc3, 0x69, 0xe2, 0x3f, 0xde, 0x77, 0x13, 0x45, 0xa2, 0x5e, 0xbd, - 0x6a, 0xf3, 0xc6, 0x07, 0xc2, 0x7f, 0xf5, 0x1b, 0xfe, 0x76, 0xa4, 0x3a, - 0x7f, 0x91, 0x2a, 0x0e, 0x61, 0xfe, 0x55, 0x35, 0xaf, 0x81, 0x37, 0x0e, - 0xd4, 0x0b, 0x59, 0xfd, 0xd2, 0x1e, 0x54, 0x92, 0xce, 0x5f, 0x3b, 0x04, - 0x9a, 0xc0, 0x6b, 0x62, 0x7c, 0x15, 0x97, 0x08, 0xff, 0x37, 0x6e, 0x78, - 0x11, 0x04, 0x2e, 0x19, 0xdf, 0x00, 0xfc, 0xac, 0xf9, 0x1f, 0xa5, 0x94, - 0x26, 0xa2, 0x76, 0x10, 0xc3, 0xde, 0xd6, 0x4a, 0x4a, 0xf6, 0xf1, 0xb2, - 0x0c, 0xc8, 0xd1, 0xfc, 0x1b, 0x45, 0x35, 0x47, 0xfc, 0xe3, 0xc9, 0xda, - 0x44, 0x07, 0x63, 0xcc, 0x97, 0xda, 0x9e, 0xc9, 0x90, 0x47, 0x3e, 0xbb, - 0xff, 0xc4, 0xe9, 0x85, 0x33, 0x4f, 0x41, 0x26, 0x05, 0xea, 0xfc, 0x8d, - 0x43, 0xff, 0x6f, 0x57, 0x22, 0xf5, 0xbd, 0x78, 0x87, 0xf9, 0x5e, 0x9c, - 0x5b, 0xad, 0x7c, 0x97, 0xdb, 0xee, 0x62, 0x0c, 0x06, 0x81, 0xbd, 0x31, - 0xbf, 0x79, 0xe3, 0x61, 0x22, 0x4f, 0xa1, 0xec, 0xf8, 0x31, 0xc3, 0x48, - 0x60, 0x6b, 0x20, 0x44, 0xf1, 0xf5, 0xb6, 0x00, 0xaf, 0x3d, 0x85, 0x6f, - 0x05, 0xbe, 0x0f, 0xf9, 0xbd, 0x63, 0xc6, 0x37, 0x11, 0xe4, 0xc7, 0xbe, - 0xa9, 0x7b, 0xf9, 0x7b, 0xe7, 0x25, 0x18, 0x83, 0x16, 0x7b, 0x8f, 0x43, - 0xee, 0xef, 0x1d, 0x33, 0x57, 0x45, 0x48, 0xa0, 0x9a, 0x50, 0x5c, 0xba, - 0xde, 0x27, 0x90, 0xbe, 0x3f, 0x7a, 0xc9, 0x37, 0xf9, 0xc8, 0x18, 0x3f, - 0xd7, 0x98, 0x5e, 0x71, 0x8a, 0x08, 0x7d, 0x2a, 0xac, 0xca, 0xda, 0xe1, - 0x86, 0xa3, 0x0f, 0x83, 0xd6, 0xa5, 0x04, 0x8f, 0x08, 0x31, 0x18, 0x24, - 0x36, 0x29, 0x1d, 0xd3, 0x03, 0x2d, 0x31, 0xa1, 0x9f, 0xe2, 0x4f, 0x34, - 0x87, 0x7e, 0xa4, 0x62, 0x72, 0x08, 0xf3, 0x17, 0x85, 0xc1, 0x9b, 0xe3, - 0xab, 0x6a, 0xd9, 0x82, 0xf1, 0x1f, 0x50, 0x9e, 0x98, 0x1a, 0x81, 0x3b, - 0xe7, 0x0d, 0x13, 0x1f, 0x50, 0x40, 0xb0, 0x62, 0xc9, 0xb8, 0xe2, 0x38, - 0x54, 0xc0, 0x06, 0x41, 0x23, 0xb9, 0xf8, 0x3d, 0x4a, 0x20, 0x1c, 0x8f, - 0xea, 0x4e, 0x78, 0x43, 0x12, 0xde, 0x6b, 0xa8, 0xbe, 0x5e, 0x00, 0xc2, - 0xcd, 0x85, 0xcd, 0x8e, 0xca, 0x69, 0xc8, 0xa1, 0x3d, 0xac, 0x78, 0xe7, - 0x59, 0xdd, 0xe5, 0x64, 0x8d, 0xf0, 0x8e, 0x81, 0xdc, 0xfa, 0x2e, 0x28, - 0x1c, 0x37, 0x49, 0x15, 0xfa, 0x7b, 0x66, 0xd8, 0xe6, 0x11, 0x2b, 0x8c, - 0xcd, 0xaf, 0x72, 0x8d, 0x0c, 0x89, 0x0d, 0xcc, 0x3c, 0x05, 0xde, 0x98, - 0xf0, 0x6c, 0xa3, 0x35, 0x41, 0xe0, 0x17, 0x7e, 0x11, 0xfd, 0x65, 0xd2, - 0xe7, 0x06, 0xdc, 0xf3, 0xc7, 0x86, 0x91, 0x09, 0xde, 0xb2, 0x84, 0xfa, - 0xb6, 0x82, 0x40, 0x07, 0xf2, 0xca, 0x93, 0x0a, 0x2e, 0x64, 0x26, 0xb8, - 0x23, 0xdc, 0x42, 0xf5, 0x36, 0x02, 0xdf, 0xf6, 0xbb, 0xdb, 0x0f, 0xaa, - 0x53, 0x90, 0x17, 0x40, 0x60, 0x37, 0x70, 0x46, 0xbc, 0x13, 0xe1, 0xa2, - 0xaa, 0xb0, 0xae, 0x53, 0xb0, 0x47, 0x50, 0xa8, 0x4e, 0x9e, 0x6b, 0xda, - 0x27, 0xee, 0x33, 0xe8, 0xfa, 0x16, 0xf1, 0xfc, 0xff, 0xc3, 0xc1, 0xdd, - 0x72, 0xb3, 0x6b, 0x51, 0xfa, 0x5b, 0x90, 0xdb, 0x83, 0x63, 0xeb, 0xc4, - 0x05, 0x39, 0x3c, 0xca, 0x89, 0x15, 0x1a, 0x88, 0xb7, 0xcd, 0x52, 0x4e, - 0xe6, 0xa2, 0x70, 0xb5, 0xc7, 0xdd, 0x1f, 0xfd, 0xc9, 0x52, 0xed, 0x7e, - 0xf6, 0xb3, 0x62, 0x7f, 0x7e, 0x05, 0x17, 0xb5, 0xa4, 0xee, 0x62, 0x0e, - 0xfd, 0xe9, 0x85, 0xea, 0x62, 0xa4, 0xcf, 0xde, 0x14, 0x60, 0xf8, 0x74, - 0xd6, 0x87, 0x19, 0xa5, 0x5e, 0x69, 0xaa, 0x4d, 0x11, 0x61, 0x61, 0x0d, - 0xb9, 0x92, 0x5f, 0x01, 0x0f, 0x3e, 0xc7, 0x5c, 0xcd, 0x7c, 0x1c, 0xf5, - 0xae, 0x0c, 0x5f, 0x38, 0x3e, 0x94, 0x18, 0x1f, 0x14, 0x7a, 0xdd, 0x0a, - 0x0e, 0xd8, 0x3c, 0xfa, 0x57, 0xba, 0xc1, 0x02, 0xf6, 0x97, 0x58, 0x07, - 0x96, 0x2b, 0x03, 0x88, 0xce, 0x33, 0x0b, 0x85, 0xdc, 0x9d, 0x73, 0xc6, - 0x50, 0xac, 0x4c, 0x91, 0x59, 0x32, 0x70, 0xc7, 0xb7, 0x6a, 0x42, 0x8e, - 0x05, 0xb8, 0x6d, 0xb1, 0xd2, 0x0e, 0xce, 0x2a, 0x8f, 0x8c, 0x36, 0xf2, - 0xab, 0xb2, 0x2b, 0x47, 0xdb, 0xac, 0x9f, 0x7b, 0x4d, 0x76, 0x35, 0x67, - 0xd2, 0x4c, 0xf2, 0x1b, 0x3f, 0xc9, 0xc5, 0xc3, 0x78, 0x73, 0x4f, 0x80, - 0x24, 0x36, 0xfc, 0x16, 0x64, 0xb0, 0xd1, 0xeb, 0xd0, 0x1f, 0x17, 0x7b, - 0xc0, 0xe2, 0x4f, 0xbe, 0x05, 0x98, 0xa3, 0xac, 0x3a, 0x3d, 0x74, 0xe7, - 0xba, 0xb3, 0xf6, 0xe6, 0x48, 0x79, 0x8f, 0xd6, 0x51, 0x16, 0x3e, 0x98, - 0x17, 0x0b, 0x29, 0x37, 0x02, 0x56, 0xa4, 0x11, 0x64, 0x00, 0x51, 0x75, - 0xea, 0x1e, 0xcf, 0x77, 0x35, 0xcc, 0x9e, 0x79, 0x9c, 0x62, 0x3b, 0x62, - 0x91, 0xfa, 0x47, 0x9b, 0x0a, 0xb3, 0x51, 0xc9, 0x67, 0x88, 0x06, 0x9f, - 0x49, 0x9c, 0x60, 0xd2, 0xe8, 0x71, 0x25, 0x2d, 0x98, 0x94, 0xb0, 0x79, - 0xa3, 0x4b, 0xf3, 0xde, 0x8b, 0x28, 0x41, 0x4f, 0xd0, 0xeb, 0xf9, 0x85, - 0x8b, 0x6c, 0x2b, 0xae, 0xc3, 0xac, 0xf5, 0x72, 0x27, 0xf2, 0x1a, 0xa5, - 0x54, 0xb8, 0x5c, 0x31, 0x79, 0xe2, 0x17, 0x7e, 0x50, 0xc2, 0xa5, 0xd0, - 0xe5, 0x5d, 0xd7, 0xfa, 0xf5, 0xe5, 0x09, 0x4f, 0xf4, 0x46, 0xec, 0x2f, - 0x77, 0xf2, 0x17, 0x44, 0x7e, 0x29, 0x6e, 0x62, 0xec, 0x2f, 0xb1, 0xce, - 0xd0, 0x18, 0x1d, 0xe6, 0x87, 0x3a, 0xfc, 0x2b, 0x4d, 0x30, 0xd0, 0xba, - 0xe1, 0x5a, 0xef, 0xfa, 0xf9, 0xa6, 0x3a, 0x8b, 0x10, 0x00, 0x53, 0x55, - 0xbe, 0x36, 0xe7, 0x03, 0x74, 0xf7, 0xdd, 0x2b, 0xa3, 0xfa, 0x9a, 0x6e, - 0x85, 0x00, 0xd7, 0x0a, 0xc5, 0xc4, 0x62, 0x21, 0x84, 0xca, 0xc4, 0xd6, - 0x1a, 0x25, 0xd6, 0xb9, 0xd5, 0x0a, 0xbb, 0x5c, 0xf3, 0x15, 0xbe, 0x79, - 0x52, 0x03, 0xe7, 0xbf, 0x2b, 0x0d, 0x06, 0xca, 0xdd, 0x99, 0x04, 0x6f, - 0xfe, 0xeb, 0x11, 0x58, 0xfb, 0x50, 0x93, 0x31, 0x91, 0x7b, 0xbd, 0xad, - 0x9c, 0x43, 0x75, 0xbb, 0x59, 0xcf, 0x1c, 0x49, 0xcf, 0x1b, 0x88, 0x27, - 0x00, 0x66, 0x15, 0xa3, 0x0c, 0x05, 0x1f, 0xe8, 0xd8, 0x62, 0xca, 0xc4, - 0x7e, 0xbf, 0x4d, 0x58, 0xd5, 0xd0, 0xe9, 0x9e, 0xf6, 0x85, 0x19, 0xd7, - 0x16, 0xc9, 0xcc, 0xe9, 0x24, 0xbe, 0x03, 0x50, 0xb9, 0xb1, 0x42, 0x3a, - 0x6c, 0x02, 0xc9, 0x06, 0xde, 0x61, 0x85, 0x41, 0x65, 0x2e, 0xe2, 0x75, - 0x12, 0x16, 0x97, 0xe0, 0x95, 0x12, 0x7a, 0x3d, 0xbb, 0x80, 0xfe, 0x3a, - 0x6c, 0x89, 0xbb, 0xe2, 0x64, 0xdb, 0x80, 0x05, 0x69, 0xf8, 0xfd, 0x46, - 0x2e, 0xf6, 0xb5, 0x0d, 0x5d, 0x1d, 0x2b, 0x6d, 0xf1, 0x09, 0x62, 0xa8, - 0x1e, 0xbe, 0x2c, 0x83, 0x49, 0x1b, 0xaf, 0xe3, 0x97, 0xc9, 0xff, 0xca, - 0x19, 0x8f, 0x17, 0x58, 0x31, 0x13, 0xf8, 0xe5, 0x21, 0x05, 0x34, 0x7a, - 0xac, 0x6f, 0x5b, 0x64, 0xea, 0xaf, 0xb6, 0xd2, 0x26, 0x9a, 0xf6, 0x2e, - 0x58, 0xe8, 0x6d, 0x69, 0x06, 0xb7, 0xa9, 0xdd, 0x0a, 0xef, 0x00, 0x4e, - 0x3e, 0x7c, 0x3c, 0x1f, 0x63, 0xcb, 0x47, 0x40, 0x0f, 0xe6, 0xff, 0x6f, - 0x0b, 0x01, 0x7c, 0x1e, 0xcc, 0x5e, 0x7a, 0x36, 0x24, 0x16, 0x26, 0xdb, - 0xe7, 0x9b, 0xeb, 0x1b, 0x01, 0xc2, 0x5c, 0xa0, 0x12, 0x90, 0xa1, 0x26, - 0x39, 0x91, 0x94, 0x90, 0x3f, 0x12, 0x8c, 0xdf, 0x86, 0xdf, 0x28, 0xa3, - 0x9c, 0x73, 0xfb, 0x40, 0xee, 0xe4, 0x6d, 0x70, 0x65, 0xc1, 0x7d, 0xd9, - 0x39, 0xc1, 0x16, 0x6e, 0x1b, 0xdc, 0xf6, 0x64, 0x8b, 0x00, 0xd4, 0xfd, - 0xfe, 0xc1, 0xde, 0xde, 0xc6, 0x69, 0xcf, 0x76, 0x11, 0x71, 0x59, 0x2f, - 0xee, 0x4c, 0xb7, 0x60, 0xd7, 0x0a, 0xcc, 0x66, 0x73, 0xc2, 0x5e, 0xd5, - 0x27, 0x03, 0x9b, 0xae, 0xca, 0xf1, 0xec, 0x2b, 0x4f, 0x87, 0x0d, 0x7b, - 0x5e, 0xeb, 0x1a, 0x35, 0xcd, 0xe3, 0x83, 0x0d, 0xb7, 0x07, 0x36, 0x39, - 0x9d, 0x5c, 0x4d, 0x0c, 0x4a, 0xac, 0xf7, 0x5c, 0xf1, 0x48, 0x7b, 0x18, - 0xc4, 0x35, 0xe2, 0xce, 0x37, 0x36, 0xe9, 0xce, 0x29, 0xe6, 0x76, 0x41, - 0x66, 0xfb, 0x32, 0xa0, 0x91, 0x6b, 0x12, 0xeb, 0xa1, 0x1b, 0x6d, 0x3a, - 0x88, 0x10, 0xe5, 0x05, 0x4d, 0xa2, 0x72, 0x6e, 0x74, 0xbe, 0xdb, 0xab, - 0x09, 0x78, 0xe1, 0xc3, 0x1b, 0x67, 0xb8, 0x63, 0x44, 0xf5, 0x1b, 0xeb, - 0xff, 0xe5, 0x1f, 0x61, 0x53, 0x3a, 0x47, 0x5c, 0xcb, 0xc4, 0x95, 0xd3, - 0x0d, 0xdb, 0x05, 0x0a, 0x5a, 0x82, 0xf4, 0xb6, 0x89, 0xee, 0x44, 0x75, - 0x3e, 0x1a, 0x43, 0x74, 0x3e, 0xd0, 0xc0, 0xe3, 0x0c, 0xd5, 0x04, 0xd9, - 0xa2, 0x34, 0xee, 0xc0, 0x80, 0xdc, 0x73, 0x15, 0x12, 0xe1, 0xa8, 0x36, - 0x6a, 0xe3, 0x85, 0xe5, 0x89, 0xa0, 0xfd, 0x68, 0x53, 0xc3, 0x20, 0x9e, - 0x47, 0x7b, 0xa4, 0x37, 0xaa, 0xd9, 0x5d, 0x59, 0x01, 0xbd, 0x6c, 0x0e, - 0xa3, 0x37, 0xf9, 0x3a, 0x45, 0x41, 0xcf, 0xae, 0x8c, 0xcf, 0xbc, 0x1a, - 0x41, 0xc9, 0x8d, 0x0e, 0xc1, 0xd1, 0x8d, 0x3b, 0x28, 0x82, 0xf8, 0x7e, - 0xb4, 0x13, 0xc7, 0xb4, 0x8e, 0x49, 0x3a, 0xba, 0x71, 0xeb, 0x6f, 0xa6, - 0xfd, 0xe2, 0x54, 0xd0, 0x08, 0xb0, 0x98, 0x7a, 0xc2, 0x93, 0xf8, 0x52, - 0x62, 0x82, 0x6f, 0x02, 0x64, 0x77, 0x9e, 0x97, 0x2b, 0x12, 0x3b, 0xf1, - 0x26, 0x9f, 0xa1, 0xa6, 0xc8, 0x48, 0x72, 0x47, 0xe7, 0x4b, 0xf6, 0x2b, - 0x41, 0xd0, 0x09, 0xe2, 0x02, 0xc6, 0xc6, 0x0b, 0x18, 0x5b, 0xd8, 0xe9, - 0x95, 0xcd, 0x7f, 0xbe, 0x92, 0xdd, 0x25, 0xa3, 0x10, 0xe8, 0x43, 0x50, - 0x8a, 0xfc, 0x2f, 0xbc, 0xd1, 0x68, 0x73, 0x16, 0x11, 0x37, 0x10, 0x27, - 0x6a, 0xe5, 0x9a, 0x7a, 0xe9, 0xa4, 0x72, 0xfb, 0x04, 0x9e, 0x74, 0x0e, - 0x39, 0x0a, 0x25, 0x01, 0xe8, 0x8f, 0x32, 0x0e, 0xd9, 0x55, 0x30, 0xe4, - 0x2d, 0xb0, 0x5c, 0x42, 0x9a, 0x5e, 0xc8, 0x07, 0xf2, 0x6a, 0x59, 0x7c, - 0xa4, 0x98, 0x8b, 0xa6, 0xe8, 0x8b, 0x4a, 0x3c, 0x0d, 0x39, 0x67, 0x43, - 0xa1, 0x8d, 0x9c, 0xd9, 0x07, 0x0f, 0x6e, 0xcc, 0x1f, 0x7b, 0xb9, 0xa1, - 0x47, 0x08, 0x22, 0xbc, 0x65, 0xe4, 0xb3, 0x27, 0x25, 0x28, 0xd8, 0xad, - 0x5c, 0xc4, 0x0a, 0x00, 0x70, 0x47, 0x70, 0x7e, 0x99, 0x1c, 0xbf, 0x3c, - 0x26, 0x37, 0x97, 0x0c, 0xaf, 0x44, 0x11, 0xf3, 0xfa, 0x11, 0x1c, 0x6f, - 0x90, 0x28, 0x98, 0x8e, 0x8c, 0x7a, 0x0a, 0xdf, 0x73, 0x56, 0x31, 0xfc, - 0x2c, 0x8b, 0xd5, 0x92, 0xec, 0x06, 0x3c, 0xeb, 0xea, 0xcf, 0xec, 0xec, - 0x6d, 0xa4, 0x70, 0x63, 0x5e, 0xcc, 0x4b, 0x15, 0xaa, 0xee, 0x02, 0xf3, - 0x9e, 0xbe, 0xf8, 0xed, 0x00, 0x03, 0x08, 0x5f, 0x6f, 0x48, 0xb3, 0x62, - 0xb3, 0xdf, 0xf0, 0x99, 0x42, 0xfc, 0x05, 0x0e, 0x63, 0xa3, 0x93, 0xf2, - 0xbd, 0x86, 0x0a, 0x4a, 0x01, 0x78, 0x8c, 0xad, 0x46, 0xbb, 0x6e, 0x35, - 0x77, 0x5e, 0xd0, 0xbf, 0x44, 0x1d, 0xee, 0x7e, 0x28, 0xaa, 0x08, 0x29, - 0xf1, 0xa6, 0xa3, 0x42, 0x7e, 0x70, 0x70, 0xe6, 0xbb, 0x41, 0x0d, 0x80, - 0xd8, 0xed, 0xef, 0x6d, 0x44, 0x4d, 0xee, 0xb9, 0x6f, 0xf9, 0x79, 0xb6, - 0x80, 0x27, 0x0f, 0x2f, 0x37, 0x3f, 0x0a, 0x8e, 0x40, 0x90, 0x59, 0xdd, - 0xe4, 0x58, 0x18, 0x1a, 0x04, 0x84, 0x2c, 0x2e, 0x55, 0xaa, 0xb8, 0xb1, - 0xf0, 0x7a, 0x20, 0x1c, 0xd5, 0xa5, 0x34, 0xea, 0xc5, 0xe8, 0x8a, 0x78, - 0x05, 0xbd, 0xbf, 0x5d, 0x07, 0xde, 0xec, 0x39, 0x68, 0xf4, 0x98, 0x41, - 0xca, 0xa6, 0xfa, 0x0d, 0xc7, 0x52, 0x9b, 0xbe, 0x45, 0x03, 0x49, 0x97, - 0x94, 0x6e, 0xe9, 0xe1, 0x8a, 0xc7, 0x6d, 0x2a, 0x3b, 0xc1, 0x74, 0xbc, - 0xb4, 0x27, 0xf6, 0xe9, 0x1d, 0xa2, 0xa4, 0x4a, 0xf0, 0x14, 0xd6, 0x5f, - 0x3a, 0x5f, 0x9f, 0x9e, 0x5a, 0xab, 0xa7, 0xa6, 0xea, 0xf1, 0x5a, 0x09, - 0xf4, 0x74, 0x05, 0x0e, 0x5f, 0xfa, 0x27, 0xe6, 0xcf, 0xd0, 0x2f, 0x71, - 0x20, 0x40, 0x56, 0x23, 0xf5, 0xe3, 0xf9, 0x3e, 0xe9, 0x69, 0x04, 0x31, - 0x11, 0x66, 0xa9, 0x8d, 0x97, 0x4e, 0x32, 0x65, 0x38, 0x8c, 0x1a, 0xb3, - 0x69, 0xd1, 0xa1, 0x0d, 0x22, 0xc4, 0x33, 0x75, 0x69, 0x23, 0xa8, 0x35, - 0x65, 0x7f, 0xd9, 0xeb, 0x2f, 0xbc, 0xde, 0xd1, 0x51, 0x54, 0xaf, 0x02, - 0x2a, 0xb7, 0x33, 0x43, 0xd4, 0x2d, 0x0f, 0x40, 0x14, 0x62, 0x4a, 0xb7, - 0xe8, 0x91, 0x87, 0x28, 0x77, 0xd6, 0x21, 0xb2, 0x5c, 0xce, 0xcd, 0x02, - 0x29, 0xf2, 0x17, 0x09, 0x38, 0x7c, 0xdc, 0xfd, 0xca, 0xeb, 0x59, 0x9b, - 0x2c, 0x0e, 0xbe, 0xbc, 0xc7, 0x18, 0xbe, 0x02, 0xf2, 0x06, 0x4b, 0x58, - 0xe2, 0xcb, 0x82, 0xc5, 0x8e, 0x6d, 0x3c, 0x51, 0xec, 0x9f, 0x1f, 0x51, - 0xee, 0xe0, 0xe3, 0x80, 0xaa, 0x9f, 0xf6, 0x98, 0xab, 0xca, 0xa5, 0x9f, - 0xc9, 0x83, 0x97, 0x56, 0x40, 0xff, 0xb2, 0xa7, 0xa7, 0xf5, 0x0d, 0xb7, - 0x15, 0xc0, 0x2b, 0x6e, 0xce, 0x0d, 0x6c, 0x75, 0x4d, 0x8a, 0xc4, 0xb6, - 0x72, 0x45, 0x2c, 0xdf, 0xeb, 0xdc, 0x0a, 0xe4, 0xcb, 0x26, 0xf2, 0x1b, - 0x73, 0x82, 0xe8, 0x86, 0x50, 0x69, 0x89, 0x0f, 0x86, 0x42, 0x71, 0xb2, - 0xa7, 0x52, 0x57, 0x67, 0xc6, 0x4c, 0xa6, 0x6c, 0x11, 0xbc, 0xd0, 0x1c, - 0xab, 0x90, 0xf8, 0x88, 0x3b, 0x41, 0x9d, 0xef, 0x6a, 0xa9, 0xdc, 0xeb, - 0xc8, 0x08, 0x2b, 0x75, 0xc7, 0xa3, 0xee, 0x03, 0xa8, 0x71, 0x26, 0x2b, - 0x90, 0x1d, 0xa7, 0x20, 0xf1, 0xd6, 0x2a, 0x21, 0x56, 0xf7, 0x5b, 0xf1, - 0xca, 0x3c, 0x2f, 0x22, 0x12, 0xc0, 0x56, 0x0d, 0xea, 0x65, 0x39, 0xe7, - 0x0c, 0x61, 0xce, 0xc2, 0x3d, 0x49, 0x9e, 0x3d, 0xca, 0xd3, 0xfa, 0xc4, - 0xb1, 0x9c, 0x54, 0xbe, 0x21, 0x18, 0xf7, 0xa3, 0xb5, 0x0e, 0x3e, 0x65, - 0x30, 0xa6, 0x13, 0x0a, 0xca, 0x0b, 0xd7, 0x1b, 0x8e, 0x00, 0xc4, 0xe6, - 0x4e, 0xac, 0x10, 0x94, 0x2c, 0x3b, 0x21, 0xd3, 0x8f, 0x33, 0xf6, 0xed, - 0xc3, 0x4e, 0x3b, 0x18, 0x03, 0xea, 0x56, 0xaf, 0x48, 0x43, 0xdd, 0x22, - 0x4d, 0x77, 0xab, 0xd5, 0xe2, 0xc7, 0xf9, 0xf5, 0x96, 0x36, 0x62, 0x1c, - 0xa3, 0xc2, 0xa9, 0x9b, 0x74, 0xa3, 0xfa, 0xd5, 0xcd, 0x85, 0x1f, 0x37, - 0x6c, 0xa9, 0x6c, 0xdc, 0x52, 0x99, 0xc8, 0x53, 0xa9, 0x6e, 0x24, 0x78, - 0x02, 0x1f, 0xd8, 0x05, 0xa0, 0x93, 0x28, 0xf6, 0x7e, 0x81, 0x93, 0x8b, - 0x8d, 0x07, 0x17, 0x5b, 0xbd, 0xf9, 0x16, 0xa3, 0xa2, 0x80, 0xfc, 0xfa, - 0x1a, 0x8e, 0xd0, 0xaa, 0xef, 0xce, 0x00, 0xb3, 0xb8, 0x85, 0xce, 0x35, - 0x21, 0xb6, 0xe8, 0xa8, 0xb7, 0x38, 0x38, 0x32, 0x12, 0xd3, 0x87, 0xca, - 0xdb, 0x5c, 0x02, 0x6d, 0x31, 0x50, 0x6f, 0x31, 0x83, 0x33, 0x8c, 0xc0, - 0x58, 0x11, 0x86, 0x1a, 0x4a, 0x81, 0xe8, 0xd2, 0x0a, 0x51, 0xbe, 0x55, - 0x6f, 0xdb, 0xce, 0x5f, 0x2e, 0x6f, 0x14, 0xd2, 0x7b, 0xcd, 0x65, 0x52, - 0x86, 0x50, 0x6b, 0xac, 0x52, 0xe5, 0xf0, 0xcf, 0x9e, 0x32, 0xf4, 0x08, - 0x6f, 0x62, 0x32, 0xe8, 0xea, 0xe3, 0x3d, 0xb0, 0xf5, 0xdc, 0xca, 0x9b, - 0xf1, 0x13, 0x2e, 0x18, 0x3c, 0xe2, 0x70, 0x5e, 0x20, 0x6e, 0xd2, 0x4e, - 0x5c, 0x55, 0x7d, 0x06, 0xd9, 0x51, 0xa3, 0xa9, 0x9c, 0xa1, 0x18, 0x46, - 0xff, 0x3e, 0x3c, 0xff, 0xc2, 0x93, 0x3a, 0x51, 0x26, 0x09, 0xd1, 0x36, - 0x10, 0x8f, 0x55, 0xbd, 0x42, 0x2a, 0x1c, 0x7c, 0x6b, 0x4a, 0x26, 0x32, - 0x2b, 0x7e, 0x23, 0xcb, 0x96, 0xa6, 0xdf, 0x35, 0x29, 0x37, 0xda, 0x54, - 0xad, 0xa6, 0x81, 0x9b, 0x0f, 0x18, 0xf3, 0xb3, 0xfc, 0x65, 0x27, 0xad, - 0x72, 0xbb, 0xee, 0xb4, 0x3a, 0x95, 0xaf, 0x60, 0xfa, 0x8a, 0xc9, 0x45, - 0x04, 0x02, 0x54, 0x41, 0xeb, 0x8f, 0xb4, 0x24, 0x4a, 0xfa, 0x11, 0x37, - 0x68, 0x8e, 0xd9, 0x5c, 0x71, 0xcc, 0x56, 0x79, 0xe8, 0x60, 0x70, 0x75, - 0x57, 0x74, 0xf4, 0x3c, 0xcf, 0x09, 0x23, 0xab, 0x06, 0x51, 0xf2, 0xd9, - 0x8f, 0xd8, 0xaf, 0x14, 0xd3, 0x83, 0x8d, 0x22, 0x53, 0x8c, 0x33, 0x61, - 0xd4, 0x39, 0xcc, 0xdf, 0x6e, 0x75, 0xa4, 0xbe, 0x37, 0x52, 0xe7, 0x1b, - 0xb9, 0xf7, 0x0d, 0x74, 0x3f, 0xdc, 0x95, 0xd8, 0x6a, 0x5c, 0x28, 0xdc, - 0x5c, 0x91, 0x22, 0xda, 0x6c, 0xb0, 0x8d, 0xa8, 0x56, 0x58, 0xee, 0x23, - 0xe2, 0x09, 0x26, 0xf2, 0xf1, 0x46, 0x20, 0xfd, 0xfb, 0x33, 0x92, 0xf3, - 0xad, 0xd4, 0x8d, 0x5b, 0x85, 0x5b, 0x6c, 0x15, 0x6e, 0xbe, 0x55, 0xb8, - 0x61, 0x87, 0x70, 0xc3, 0xf4, 0xd8, 0xce, 0x1e, 0xb7, 0x71, 0x2d, 0x2b, - 0x36, 0x20, 0x06, 0xf6, 0x86, 0x06, 0xac, 0x74, 0x6f, 0xd4, 0x68, 0x27, - 0x48, 0x1f, 0x6a, 0xac, 0x2e, 0x2f, 0xa6, 0x9a, 0x31, 0x9f, 0x06, 0x10, - 0x66, 0x5d, 0x59, 0xf7, 0x22, 0x36, 0x79, 0xf0, 0x0c, 0x03, 0xf4, 0xfa, - 0xff, 0x71, 0xbc, 0xde, 0xee, 0x90, 0x23, 0xe3, 0x45, 0xe4, 0x71, 0xf5, - 0x16, 0xda, 0x38, 0x26, 0xdc, 0x10, 0x78, 0xa2, 0x7b, 0xc6, 0x8c, 0x87, - 0x73, 0xb8, 0x4d, 0xa4, 0x9e, 0x6c, 0x1d, 0x2c, 0x62, 0x0a, 0x0c, 0x3c, - 0x17, 0x61, 0xe5, 0x88, 0x8f, 0x2d, 0xf9, 0x1f, 0xf9, 0xbd, 0xf8, 0xf6, - 0xe3, 0xa6, 0x42, 0x15, 0x7c, 0xb8, 0x86, 0x1b, 0x4a, 0x06, 0x91, 0xa1, - 0x60, 0x6f, 0xd8, 0x71, 0xe2, 0x23, 0x39, 0x4e, 0x88, 0xea, 0x4c, 0x88, - 0x37, 0x42, 0x50, 0xc1, 0x4e, 0x09, 0x04, 0xc0, 0x37, 0x5c, 0xfa, 0xdc, - 0x46, 0x5e, 0x7d, 0xc7, 0xd6, 0xe4, 0xc6, 0xdb, 0x29, 0x82, 0xbc, 0x60, - 0x5c, 0x6a, 0x8d, 0xa4, 0x43, 0xc6, 0x88, 0x57, 0x2d, 0xfd, 0xcb, 0x7a, - 0xf9, 0xc0, 0x0c, 0xc0, 0xfe, 0x18, 0xfa, 0x88, 0xb7, 0xa4, 0x8e, 0x78, - 0xe2, 0x81, 0x64, 0x47, 0xaa, 0xb0, 0x1e, 0x97, 0x24, 0xb6, 0x37, 0xbe, - 0xe9, 0x76, 0x77, 0xd3, 0xd3, 0x7b, 0x63, 0x18, 0x79, 0x73, 0xcb, 0x5c, - 0x21, 0xda, 0xe0, 0x4d, 0x43, 0x7c, 0x02, 0xd3, 0x98, 0xb1, 0xcb, 0x96, - 0x84, 0x25, 0xb2, 0x43, 0x18, 0x65, 0xe7, 0x39, 0xf4, 0xee, 0xda, 0xc4, - 0x77, 0xea, 0x0d, 0xdd, 0x43, 0x6d, 0xe8, 0xee, 0xc7, 0xd2, 0xfb, 0xa5, - 0xbe, 0x8c, 0xfb, 0x68, 0x27, 0xe3, 0xb5, 0x08, 0x91, 0x7a, 0x99, 0x84, - 0x56, 0xc2, 0x50, 0xea, 0x68, 0x04, 0x31, 0x38, 0x17, 0xda, 0x55, 0x45, - 0x05, 0x81, 0xfb, 0x9f, 0x5e, 0x5a, 0xec, 0x53, 0x27, 0xd9, 0x52, 0x40, - 0xaf, 0xae, 0xa0, 0xc8, 0xd3, 0xf9, 0x1f, 0xbd, 0x3d, 0x1f, 0x28, 0x60, - 0x71, 0x14, 0x11, 0xc6, 0xb9, 0xb0, 0x60, 0x8a, 0x51, 0x1b, 0xa3, 0xb3, - 0xda, 0x5e, 0x9c, 0x64, 0x18, 0xf6, 0xf0, 0x8b, 0x6a, 0x41, 0xdf, 0x17, - 0x31, 0xb8, 0x66, 0xdf, 0x26, 0xc3, 0x5c, 0xa9, 0x07, 0xf5, 0x44, 0x9d, - 0x7b, 0x1b, 0x88, 0x3c, 0x3e, 0x1b, 0x44, 0x89, 0xcd, 0x1e, 0x77, 0xe8, - 0x81, 0xd8, 0xa9, 0x07, 0x62, 0x77, 0x5d, 0x44, 0xfb, 0x72, 0xa7, 0x96, - 0x82, 0x7d, 0x89, 0x92, 0x3c, 0x78, 0x3b, 0xc3, 0x31, 0xa2, 0x3d, 0x28, - 0xf6, 0x6c, 0xb6, 0xee, 0xf1, 0x1c, 0x46, 0x10, 0xa5, 0x3c, 0x9e, 0x5f, - 0xd5, 0x3e, 0x01, 0x4e, 0x06, 0xd8, 0xf1, 0x6c, 0xae, 0xc8, 0x41, 0x6c, - 0x1f, 0x23, 0x67, 0xc8, 0xee, 0xec, 0xd0, 0x0f, 0x28, 0x00, 0x4e, 0xa8, - 0x6a, 0x05, 0x0f, 0x8f, 0x3b, 0x60, 0x7b, 0x73, 0xc2, 0x8e, 0x00, 0xda, - 0xf4, 0xc5, 0x67, 0x59, 0x02, 0x3c, 0x89, 0xa2, 0x26, 0x0b, 0x76, 0x58, - 0xf1, 0xdd, 0x31, 0xf3, 0x17, 0xc0, 0xae, 0x58, 0x1e, 0x0f, 0xd3, 0xd2, - 0x21, 0xe2, 0x24, 0xfa, 0xf3, 0x2c, 0xd1, 0xb0, 0xc5, 0xef, 0xbc, 0xef, - 0x50, 0xcb, 0x30, 0x07, 0x9b, 0xa6, 0x8a, 0x09, 0xce, 0x4f, 0xfa, 0xf7, - 0x41, 0xfd, 0x01, 0xab, 0x6c, 0x85, 0x7a, 0x97, 0xab, 0x50, 0x7a, 0xbd, - 0x57, 0xc4, 0x9d, 0x40, 0x6b, 0xa7, 0x6e, 0x17, 0x5b, 0x3f, 0xea, 0x1d, - 0x5b, 0x0f, 0xae, 0x88, 0xe5, 0xa8, 0x21, 0xaf, 0xe1, 0xd8, 0xbb, 0x64, - 0xad, 0x48, 0xac, 0x6d, 0x1e, 0x33, 0x69, 0x5c, 0x06, 0x41, 0xce, 0x49, - 0xe3, 0x32, 0x48, 0xf2, 0x62, 0x9a, 0xa2, 0x5d, 0x4f, 0xe7, 0x91, 0x3b, - 0x53, 0xe7, 0x2b, 0x58, 0xd3, 0x58, 0x36, 0x09, 0xea, 0xb6, 0x76, 0xfe, - 0xfe, 0x48, 0x7c, 0x7b, 0xb0, 0x64, 0x39, 0xd8, 0xc8, 0x0d, 0x08, 0xd9, - 0x72, 0xc0, 0x11, 0x48, 0xb7, 0x48, 0x1f, 0x23, 0xfb, 0x6e, 0xfa, 0xe7, - 0x99, 0xd8, 0xe0, 0x05, 0xc7, 0x3d, 0x6b, 0xa6, 0xdf, 0xab, 0x1d, 0xf5, - 0xcb, 0x6f, 0xf3, 0x17, 0x6f, 0x5c, 0x57, 0xbe, 0x9c, 0x23, 0xe6, 0x94, - 0xfb, 0x70, 0x43, 0xc5, 0x7b, 0x5c, 0x68, 0xcb, 0xb6, 0x84, 0x15, 0xe3, - 0xe5, 0x15, 0xec, 0x8d, 0x3a, 0x1a, 0x76, 0x24, 0xe7, 0xc2, 0xab, 0xd1, - 0xa4, 0x82, 0x13, 0xab, 0x41, 0xea, 0x65, 0xda, 0xdf, 0x62, 0x11, 0x7e, - 0x05, 0x32, 0xe9, 0x0e, 0x85, 0x7e, 0xca, 0x52, 0x7d, 0xd6, 0x55, 0xbf, - 0x78, 0xa1, 0xac, 0x7e, 0x2d, 0xa7, 0xff, 0xbe, 0xdd, 0x6f, 0xf1, 0x2f, - 0x67, 0xfd, 0xba, 0xcf, 0x8f, 0x96, 0x17, 0xb0, 0x7e, 0x51, 0xb6, 0xdf, - 0x20, 0x9e, 0xcc, 0x19, 0x67, 0x5e, 0xc1, 0xd7, 0x60, 0xaf, 0xe4, 0xf3, - 0xf2, 0x3e, 0x21, 0x76, 0xb3, 0x1f, 0x4c, 0x7d, 0x8d, 0xc5, 0x8f, 0x13, - 0x5b, 0xc3, 0x2b, 0x89, 0x30, 0x28, 0xd9, 0x9a, 0xc4, 0x1f, 0x85, 0xc1, - 0x4e, 0x72, 0xfd, 0xda, 0xeb, 0x2f, 0xb1, 0x8c, 0xc6, 0x8b, 0x23, 0xdb, - 0xe1, 0x75, 0x64, 0xd1, 0x4e, 0xb1, 0xff, 0xcb, 0xb0, 0x62, 0x26, 0x1d, - 0x8f, 0xa0, 0x44, 0x87, 0x20, 0xc3, 0x8c, 0xd0, 0x5e, 0x28, 0xc1, 0x89, - 0xcb, 0xac, 0x13, 0x56, 0xd1, 0x3e, 0x6a, 0xb0, 0x97, 0xfd, 0x42, 0xcc, - 0xcb, 0x29, 0x20, 0x78, 0x40, 0x61, 0x8b, 0xa7, 0x9f, 0xce, 0xb0, 0x8c, - 0x78, 0x0c, 0x4a, 0x7e, 0x1b, 0x44, 0xbe, 0x21, 0xf9, 0x5d, 0xbf, 0x28, - 0x3c, 0x3d, 0x61, 0x61, 0x1a, 0xaf, 0x72, 0x09, 0x57, 0x7f, 0xbc, 0xeb, - 0xf5, 0x72, 0xb2, 0x4d, 0xae, 0xe9, 0x86, 0xe9, 0x24, 0xb8, 0xf8, 0x39, - 0xe1, 0x70, 0xdb, 0xbd, 0x02, 0x71, 0x24, 0x51, 0xaf, 0xb2, 0xad, 0x7d, - 0x55, 0xe4, 0x33, 0x18, 0x6e, 0xa4, 0xd6, 0x9b, 0xcf, 0x9a, 0x05, 0xc4, - 0xb1, 0xac, 0x30, 0x47, 0xcb, 0x55, 0x16, 0x20, 0x16, 0x1d, 0xd8, 0x32, - 0xbe, 0xdf, 0x63, 0xdb, 0xd3, 0x88, 0xa5, 0xa4, 0xd0, 0xb3, 0x16, 0x8c, - 0xa7, 0xbd, 0xdf, 0xfd, 0xbd, 0x99, 0xc8, 0x5f, 0x6e, 0x43, 0xc9, 0xb5, - 0x20, 0xe9, 0x42, 0x1d, 0x9c, 0x20, 0x4c, 0x91, 0x1b, 0x91, 0xd5, 0xb7, - 0x51, 0xb0, 0xa4, 0xac, 0xb0, 0x12, 0x36, 0x81, 0x76, 0xbd, 0xcd, 0x97, - 0xe0, 0x95, 0x87, 0xcc, 0x21, 0xd5, 0x5f, 0x37, 0x88, 0x4c, 0x3b, 0x39, - 0xaf, 0x2e, 0x4f, 0x54, 0xa9, 0xbd, 0xb5, 0xce, 0xf5, 0x62, 0x4c, 0x65, - 0xea, 0x81, 0xe4, 0x0e, 0x48, 0x76, 0x54, 0xbd, 0x24, 0x8e, 0x3a, 0x08, - 0x03, 0xae, 0x06, 0xad, 0xd2, 0x92, 0x21, 0xd7, 0x9a, 0xee, 0x94, 0x57, - 0xda, 0x45, 0x54, 0xe4, 0x61, 0xd1, 0x79, 0x0e, 0xd1, 0x9e, 0xb0, 0x47, - 0x80, 0x1d, 0x23, 0xdb, 0x5c, 0xf1, 0xd9, 0xed, 0xee, 0x84, 0x31, 0xee, - 0x0b, 0x3f, 0x59, 0x18, 0xdc, 0x6f, 0x51, 0x84, 0xfc, 0x05, 0xc6, 0xbb, - 0x7d, 0xc4, 0x8d, 0x6e, 0xc7, 0x28, 0xdb, 0xd1, 0x2a, 0x0f, 0xf3, 0x27, - 0xc3, 0x25, 0xeb, 0x9a, 0xaf, 0x7d, 0xd7, 0x03, 0xc5, 0x93, 0xab, 0x1e, - 0x2c, 0x03, 0x88, 0x67, 0x91, 0x72, 0x83, 0xb6, 0x76, 0x5f, 0xac, 0xaa, - 0x3c, 0x3e, 0x3c, 0x5b, 0x58, 0x0e, 0x77, 0xec, 0x09, 0xb8, 0xaa, 0x62, - 0x33, 0xcb, 0x69, 0x2e, 0xf3, 0x2b, 0x12, 0x4a, 0x19, 0x64, 0x05, 0x1b, - 0xef, 0x9f, 0x12, 0xb8, 0x73, 0xea, 0xad, 0x38, 0x5c, 0xad, 0x73, 0xa8, - 0x45, 0xbf, 0x95, 0xc8, 0x06, 0xab, 0xf6, 0xc0, 0xab, 0xa2, 0x88, 0xb5, - 0xa9, 0xec, 0xef, 0x93, 0x79, 0x82, 0x85, 0x6f, 0xa2, 0x28, 0x50, 0x47, - 0x92, 0x7b, 0xe8, 0xd3, 0x06, 0xf1, 0xf0, 0x18, 0x5e, 0x44, 0x07, 0x76, - 0x9e, 0x29, 0xcb, 0x62, 0xfb, 0x82, 0xb2, 0xcb, 0x26, 0x6f, 0xfd, 0x4d, - 0xf0, 0x0d, 0x9c, 0x65, 0xcb, 0xea, 0xec, 0xb3, 0x2b, 0xef, 0x06, 0xd6, - 0x33, 0x4e, 0xcd, 0xea, 0xb9, 0xf9, 0xd4, 0x47, 0x14, 0x99, 0x62, 0xa4, - 0x17, 0x88, 0x6f, 0xc3, 0x99, 0x2c, 0x35, 0x3a, 0x79, 0x11, 0x87, 0x05, - 0x99, 0x8a, 0x6d, 0xb3, 0xb9, 0x40, 0x85, 0xd9, 0x9b, 0x2a, 0x93, 0xa9, - 0x07, 0xe0, 0x79, 0x54, 0xdb, 0x71, 0x9b, 0xd8, 0x0d, 0x28, 0xe8, 0xe7, - 0xd4, 0x0e, 0xb1, 0x04, 0xde, 0x9a, 0xa9, 0x74, 0x15, 0x1c, 0x16, 0x5e, - 0x84, 0x51, 0x5f, 0x9b, 0x10, 0x8a, 0xde, 0x08, 0x39, 0x4c, 0x42, 0x55, - 0x21, 0xa5, 0x61, 0x84, 0xb5, 0x14, 0xa3, 0xe3, 0xd7, 0xf7, 0xfc, 0x14, - 0x3f, 0x5d, 0x39, 0xa4, 0x90, 0x1f, 0xd5, 0x4d, 0xa6, 0xc1, 0x91, 0xab, - 0x6b, 0x89, 0x98, 0x1f, 0x19, 0x1c, 0xd3, 0x1b, 0xf4, 0xa7, 0x9f, 0x38, - 0x5a, 0x5d, 0x09, 0xc3, 0x44, 0xfb, 0x2b, 0x71, 0xf7, 0xf7, 0x83, 0xfa, - 0x74, 0x8c, 0xb8, 0xcf, 0xe1, 0xc7, 0x44, 0xf3, 0x37, 0x76, 0xa9, 0x8c, - 0x5c, 0x89, 0x52, 0x08, 0xdd, 0x66, 0x03, 0x44, 0x90, 0x6f, 0xaf, 0xe6, - 0x03, 0xf2, 0x1e, 0x13, 0xf0, 0xae, 0xdd, 0x21, 0x36, 0x28, 0xed, 0x17, - 0xdc, 0xbb, 0xdf, 0x91, 0x2e, 0xfa, 0x78, 0x45, 0x1e, 0x78, 0x2f, 0x0e, - 0xea, 0x3e, 0x3f, 0xa8, 0xfb, 0x5c, 0x10, 0x43, 0x37, 0x07, 0x21, 0x36, - 0x60, 0x78, 0x05, 0x2a, 0x80, 0xee, 0x87, 0xf0, 0xb3, 0xde, 0x6e, 0x19, - 0x57, 0x10, 0x86, 0xa0, 0x6a, 0x27, 0xc7, 0x56, 0xe7, 0x93, 0x1c, 0x91, - 0xd3, 0x11, 0x4b, 0x97, 0x43, 0x8c, 0x30, 0x22, 0x7c, 0xd7, 0x17, 0xf4, - 0x08, 0xa5, 0x8c, 0xc7, 0x7c, 0x59, 0x1e, 0x6f, 0xec, 0xf4, 0x80, 0xfd, - 0x91, 0xad, 0x81, 0x08, 0x8b, 0x49, 0x35, 0xc9, 0x15, 0x88, 0x12, 0xc9, - 0x54, 0x6c, 0x58, 0x88, 0x0d, 0xa5, 0xe7, 0x12, 0xf5, 0x4f, 0xe6, 0x4f, - 0xbc, 0xb3, 0x60, 0x87, 0xbb, 0x44, 0x61, 0x1a, 0x1f, 0x7e, 0xa2, 0xfa, - 0xeb, 0xfe, 0x8a, 0x19, 0x5f, 0x2d, 0x66, 0xf8, 0x29, 0x83, 0xb0, 0x59, - 0xb0, 0x35, 0xc1, 0x70, 0x7f, 0x9f, 0x09, 0xff, 0x11, 0xcf, 0x75, 0xd1, - 0x25, 0x7c, 0xce, 0x82, 0x72, 0x3a, 0x46, 0x2e, 0xd7, 0x48, 0xea, 0x0a, - 0xa1, 0x78, 0xc3, 0xd9, 0x3d, 0x79, 0xb0, 0x44, 0x38, 0xd6, 0x97, 0x1b, - 0x1b, 0x9c, 0x10, 0x1a, 0x41, 0x90, 0x5b, 0x65, 0xa7, 0xe1, 0xa3, 0x63, - 0xa4, 0x33, 0x28, 0x8a, 0xf3, 0xce, 0xe4, 0x25, 0xfc, 0xef, 0x83, 0xb3, - 0xdc, 0x60, 0x88, 0xfd, 0x58, 0xd0, 0x3f, 0xda, 0x37, 0x01, 0xb3, 0x9b, - 0x5d, 0x66, 0xa3, 0x26, 0xd6, 0xe0, 0x08, 0x58, 0x67, 0xe9, 0x91, 0x50, - 0xbd, 0x15, 0x3a, 0xaf, 0xf1, 0x1c, 0x95, 0x15, 0xd0, 0xe8, 0x0f, 0x71, - 0x8d, 0x09, 0x59, 0xea, 0xb3, 0x84, 0xbe, 0x4b, 0x51, 0x40, 0xe3, 0xe3, - 0x8b, 0x41, 0x06, 0x67, 0xce, 0xb8, 0xf5, 0xa6, 0x50, 0xf6, 0x9e, 0xf6, - 0x9e, 0x59, 0x0a, 0xa7, 0x34, 0x12, 0x70, 0xfe, 0x8a, 0xc8, 0x3e, 0x41, - 0x0b, 0x12, 0x55, 0x49, 0x87, 0x1c, 0x5f, 0x5d, 0xfe, 0xfe, 0x1b, 0xe4, - 0x2f, 0x05, 0x39, 0x2f, 0x28, 0x7a, 0xec, 0x7c, 0x39, 0x8b, 0x7c, 0xff, - 0x3c, 0xd0, 0x89, 0xdc, 0x4e, 0xe6, 0x92, 0x34, 0xee, 0x38, 0x89, 0x20, - 0x9e, 0xc0, 0xfc, 0x44, 0x8c, 0x28, 0xa8, 0xb1, 0x3f, 0x32, 0xff, 0xdc, - 0x0b, 0x1c, 0xe8, 0x32, 0x9d, 0x7d, 0xce, 0x67, 0x60, 0x06, 0xd8, 0x52, - 0x3d, 0xda, 0x95, 0x72, 0x22, 0xc7, 0x25, 0x75, 0x9d, 0x8f, 0x4f, 0x67, - 0xe8, 0x01, 0xd2, 0xda, 0x65, 0x85, 0x8b, 0x36, 0x0d, 0x39, 0xde, 0x5e, - 0xc1, 0xae, 0xc5, 0x9f, 0x53, 0xd4, 0x6a, 0x30, 0xa9, 0x16, 0x6f, 0xbc, - 0x63, 0xc6, 0xa8, 0x7c, 0x65, 0xba, 0x5c, 0x8b, 0x3b, 0xa3, 0x80, 0x42, - 0xff, 0xfe, 0x43, 0x51, 0x65, 0x9d, 0x05, 0xe0, 0x45, 0x07, 0xc7, 0xac, - 0x96, 0xc1, 0xfa, 0x7d, 0xb9, 0xcb, 0xab, 0xac, 0x51, 0xb7, 0x2f, 0xf8, - 0xfe, 0xb8, 0xc3, 0x0f, 0x7c, 0xde, 0xcc, 0x13, 0xfd, 0x76, 0x09, 0x6b, - 0xbe, 0x8a, 0x7d, 0x74, 0x5f, 0x7c, 0x6f, 0xed, 0x80, 0x86, 0xd2, 0x50, - 0x7e, 0x74, 0x2c, 0xd8, 0xf5, 0x38, 0x60, 0xb7, 0x6e, 0x82, 0x50, 0xd9, - 0xaf, 0xc4, 0xac, 0xdc, 0x1e, 0xcb, 0xed, 0xf2, 0xf0, 0x63, 0x6d, 0xc1, - 0x7b, 0xff, 0x80, 0x56, 0x51, 0x94, 0x5f, 0x11, 0x4d, 0x4a, 0xaa, 0xc3, - 0x5a, 0xf1, 0xc2, 0x37, 0x0f, 0x57, 0x8a, 0x0e, 0x5e, 0xd2, 0x99, 0xc8, - 0x2f, 0x48, 0x1c, 0xcb, 0xbf, 0xb8, 0x99, 0x79, 0x40, 0x4c, 0x63, 0x4e, - 0xb1, 0x3d, 0xed, 0xd8, 0x79, 0x33, 0xfc, 0x47, 0xec, 0x27, 0xb2, 0x87, - 0x68, 0xfc, 0x58, 0x13, 0x24, 0xf6, 0xb3, 0x0d, 0xb5, 0x6d, 0x4e, 0x84, - 0xfc, 0x45, 0x3f, 0x8b, 0xbf, 0xe1, 0x73, 0x5e, 0xdf, 0x1b, 0xcb, 0xaa, - 0x04, 0xc1, 0x17, 0x4e, 0x34, 0x41, 0x18, 0x7f, 0xe9, 0xa9, 0xd8, 0x72, - 0x87, 0x0f, 0x71, 0x4a, 0x5c, 0xc4, 0x9c, 0xcc, 0x95, 0x48, 0x0a, 0x42, - 0xf3, 0xca, 0x64, 0x2b, 0x86, 0x57, 0x63, 0xd9, 0x87, 0x59, 0x78, 0x82, - 0x14, 0x39, 0x3d, 0x96, 0x83, 0x5f, 0x1c, 0x85, 0x3a, 0x12, 0x8a, 0xb4, - 0x07, 0x25, 0xbc, 0x9d, 0x79, 0x18, 0xc5, 0x48, 0xce, 0xf4, 0x04, 0xa4, - 0x60, 0x31, 0x39, 0x07, 0x7d, 0x25, 0xbf, 0x41, 0x9f, 0x27, 0x53, 0x2b, - 0x07, 0x5e, 0x34, 0x99, 0xe1, 0xad, 0xac, 0x9a, 0x46, 0x1b, 0x75, 0x8e, - 0x99, 0xd2, 0x6d, 0x44, 0xcd, 0x36, 0xb9, 0x51, 0x56, 0x51, 0x68, 0x51, - 0x3d, 0x13, 0x08, 0x91, 0x55, 0x21, 0x0d, 0x23, 0x84, 0x7a, 0x1a, 0x21, - 0xbc, 0xec, 0x2b, 0xa4, 0xa6, 0x74, 0xef, 0x35, 0x5a, 0xc9, 0x08, 0x9f, - 0xf9, 0x9e, 0x3b, 0x57, 0x53, 0xc5, 0x2f, 0x39, 0xda, 0x96, 0x62, 0x6d, - 0x11, 0x69, 0xd0, 0xbd, 0xb0, 0x93, 0xcc, 0x46, 0xb8, 0x79, 0xe7, 0x37, - 0x88, 0xfa, 0x29, 0xc7, 0xd3, 0x25, 0xfb, 0x8d, 0x34, 0x9c, 0x20, 0x1e, - 0x4b, 0xda, 0x85, 0x3a, 0x42, 0xcb, 0x96, 0x41, 0xe6, 0x06, 0x65, 0x28, - 0x06, 0xe9, 0x4c, 0x3d, 0x6d, 0x82, 0xe3, 0x0d, 0x6f, 0x10, 0x4c, 0x33, - 0xc8, 0xc7, 0xde, 0x96, 0xf4, 0xd4, 0x4a, 0xf0, 0xd0, 0xaa, 0x71, 0x21, - 0xa2, 0x97, 0xd4, 0x3a, 0x5c, 0x0e, 0x1f, 0x59, 0xd9, 0xc2, 0x21, 0x23, - 0xd5, 0x35, 0xea, 0x5a, 0x5f, 0x1b, 0x7e, 0x9a, 0x84, 0xa7, 0xb7, 0x42, - 0xd8, 0x88, 0xd2, 0x29, 0xfb, 0xf4, 0x8b, 0x54, 0x0f, 0xd8, 0xb7, 0x74, - 0x4c, 0x8f, 0x73, 0x8e, 0x38, 0x8c, 0xa4, 0xe4, 0xd3, 0x8b, 0x05, 0xd6, - 0x5d, 0x7f, 0x7a, 0xa5, 0x97, 0x88, 0xf7, 0xa4, 0x01, 0x39, 0x68, 0x80, - 0x7e, 0x44, 0x8b, 0x71, 0x04, 0x34, 0x7b, 0x73, 0x6a, 0xee, 0xec, 0x1d, - 0x9e, 0x47, 0x81, 0xce, 0x19, 0x63, 0x6c, 0xba, 0x50, 0xba, 0x22, 0x64, - 0xf0, 0x06, 0xbe, 0x33, 0x06, 0x1b, 0x97, 0xd4, 0x18, 0xca, 0xf0, 0x6c, - 0x3d, 0x26, 0xe4, 0x49, 0x8f, 0x9c, 0xe0, 0xd1, 0xbe, 0x22, 0x35, 0x61, - 0x48, 0x4d, 0x30, 0xa3, 0x0c, 0x0c, 0xe5, 0x6d, 0x9c, 0x11, 0x7c, 0xb0, - 0x1e, 0x5e, 0x51, 0x8a, 0xd7, 0x85, 0xe3, 0x60, 0x7b, 0xa5, 0x22, 0xc8, - 0xad, 0xe2, 0x04, 0xb3, 0x3b, 0x9b, 0xe7, 0xc5, 0x8e, 0x31, 0x3b, 0x12, - 0x17, 0xfe, 0x47, 0x98, 0x2e, 0x36, 0xc8, 0x40, 0x72, 0xbc, 0xeb, 0x4f, - 0xe2, 0x18, 0x63, 0x63, 0xe7, 0x97, 0x89, 0x42, 0x5b, 0x13, 0xa6, 0x69, - 0x4a, 0x92, 0x53, 0x32, 0xcc, 0x86, 0x60, 0xb7, 0x95, 0x7b, 0x7e, 0x95, - 0x1d, 0xae, 0x0f, 0xbf, 0x95, 0x3b, 0xd7, 0xd2, 0xfe, 0xdc, 0xcf, 0x45, - 0x37, 0x82, 0x2c, 0xcb, 0xa7, 0xde, 0xda, 0xa5, 0xe0, 0x8a, 0x70, 0x4a, - 0x6d, 0x05, 0x61, 0xd8, 0x7a, 0x56, 0x97, 0x0a, 0x4b, 0xcc, 0x7d, 0xd7, - 0xe5, 0x01, 0xf1, 0xa8, 0x20, 0xee, 0x57, 0x21, 0x63, 0x2f, 0x30, 0x84, - 0xec, 0x45, 0xa6, 0xec, 0x10, 0x65, 0xe5, 0x28, 0x9a, 0xd3, 0x3f, 0xd0, - 0x5e, 0xb3, 0x4d, 0x8d, 0x70, 0x70, 0x7f, 0xce, 0xfe, 0x43, 0x02, 0x4d, - 0x61, 0x2e, 0xf5, 0xfc, 0x6d, 0x30, 0xc6, 0x30, 0x09, 0x24, 0x63, 0x0e, - 0x1c, 0x67, 0x28, 0xe8, 0x84, 0x2b, 0x10, 0xb7, 0x5f, 0x04, 0x63, 0x40, - 0x32, 0xc8, 0xd4, 0xdc, 0x9e, 0xed, 0xa1, 0x66, 0x9d, 0x99, 0xf0, 0xd2, - 0x92, 0xb3, 0xb7, 0x4f, 0x09, 0x3b, 0x81, 0x47, 0x59, 0xb1, 0xf1, 0x77, - 0xc8, 0x6e, 0xc5, 0x23, 0x60, 0xb8, 0x42, 0xbc, 0x52, 0xf1, 0x0f, 0x60, - 0x45, 0x0a, 0xdb, 0x81, 0x72, 0xe2, 0x2c, 0x38, 0x6d, 0x89, 0x1d, 0x02, - 0x70, 0xc4, 0x79, 0xa0, 0x73, 0x96, 0xc3, 0x3d, 0xff, 0x37, 0x1c, 0x70, - 0xc8, 0x2a, 0xa1, 0x81, 0xfb, 0xa0, 0x7d, 0xdc, 0x89, 0x16, 0x44, 0xe5, - 0x91, 0x95, 0x40, 0xf8, 0xba, 0x60, 0xe4, 0xc1, 0x11, 0xb3, 0x74, 0xf4, - 0xc6, 0xf5, 0x82, 0x5d, 0x76, 0x83, 0xfe, 0x89, 0x83, 0xfa, 0x1c, 0x01, - 0xc5, 0xc1, 0xa3, 0xc4, 0x94, 0xde, 0xd9, 0x1f, 0xd9, 0x00, 0xda, 0x09, - 0xf8, 0xc9, 0x58, 0x61, 0x28, 0x40, 0x35, 0x49, 0xa2, 0x7c, 0xd4, 0x2a, - 0x79, 0xac, 0x97, 0x08, 0x89, 0x57, 0x72, 0x8d, 0x52, 0x89, 0xd6, 0x25, - 0xde, 0x0f, 0x3c, 0x68, 0x44, 0x79, 0x22, 0xda, 0x58, 0x3b, 0xe2, 0x26, - 0xea, 0x01, 0xc3, 0xc6, 0x02, 0xfc, 0xb9, 0x57, 0x4e, 0x38, 0xe3, 0x9e, - 0xaa, 0x6a, 0xdc, 0x61, 0x1c, 0x5c, 0x5a, 0x55, 0x14, 0x61, 0xcf, 0x14, - 0xe0, 0xf4, 0xb7, 0x93, 0x37, 0x51, 0x15, 0xa5, 0xb0, 0x31, 0x5b, 0xe0, - 0x31, 0xcc, 0x44, 0x5f, 0x8b, 0x4f, 0xdc, 0x79, 0xdd, 0xf4, 0x90, 0xfb, - 0x9f, 0x7c, 0x62, 0xe9, 0x6b, 0x78, 0x34, 0xd5, 0xc2, 0xeb, 0x45, 0x66, - 0x3b, 0xae, 0x05, 0x19, 0x7b, 0x7b, 0xc6, 0x5d, 0xc5, 0x63, 0xe5, 0x61, - 0xdb, 0xc1, 0x4b, 0x5c, 0x8a, 0xe8, 0x38, 0x1e, 0xc8, 0x08, 0x7d, 0x53, - 0xee, 0x47, 0x01, 0x6d, 0x5f, 0xf8, 0xa5, 0x0b, 0x01, 0x04, 0x44, 0x27, - 0xe6, 0x15, 0x62, 0xc7, 0x28, 0xef, 0xd8, 0xf1, 0x44, 0x23, 0x24, 0x06, - 0x41, 0xd0, 0x90, 0x23, 0xc4, 0x07, 0x27, 0xe9, 0xf5, 0x8a, 0xed, 0xe5, - 0xc4, 0xac, 0x43, 0xef, 0xcb, 0xe0, 0xb0, 0x54, 0xd9, 0x4e, 0x15, 0xfb, - 0x47, 0x15, 0x03, 0x53, 0x8d, 0x51, 0x49, 0x21, 0x32, 0x36, 0xf2, 0x17, - 0x04, 0x90, 0x57, 0x67, 0x8e, 0xca, 0xdd, 0x22, 0x41, 0x5e, 0x4b, 0x95, - 0x09, 0x24, 0x05, 0x9f, 0x46, 0x92, 0xbb, 0x3f, 0x74, 0x4d, 0x0b, 0xdb, - 0x9a, 0x56, 0xb0, 0x58, 0x9f, 0xcf, 0xdf, 0xcd, 0x8b, 0xa9, 0xc8, 0xcb, - 0xb9, 0xfa, 0xb1, 0x81, 0xca, 0x55, 0x71, 0x94, 0x54, 0x42, 0xf7, 0x0e, - 0x37, 0x3c, 0xe7, 0x1a, 0x5b, 0x23, 0x75, 0xe5, 0x3d, 0xf2, 0x83, 0x2b, - 0x3b, 0x01, 0x3b, 0x21, 0x66, 0x21, 0x0a, 0xf1, 0x68, 0xeb, 0x3b, 0xa4, - 0x92, 0xc1, 0x50, 0xe2, 0xed, 0xc0, 0x33, 0x25, 0xbd, 0xfd, 0x46, 0x3c, - 0x44, 0x6a, 0xec, 0xaa, 0xea, 0xa2, 0x51, 0x1a, 0x3e, 0xed, 0x81, 0xa9, - 0x95, 0x21, 0xe6, 0x74, 0xe4, 0xd5, 0x7d, 0x8d, 0x9b, 0x3b, 0x8a, 0x91, - 0xa4, 0xec, 0xe5, 0x5c, 0x68, 0x13, 0x6f, 0xf2, 0x3d, 0xdd, 0x14, 0x3d, - 0x2a, 0xb3, 0x6e, 0x1c, 0x34, 0xd4, 0xce, 0x30, 0xaa, 0x41, 0x70, 0x8f, - 0x30, 0xf3, 0x63, 0x4a, 0x8f, 0xb4, 0x46, 0x31, 0x46, 0x1f, 0xdd, 0x41, - 0x17, 0xd0, 0x62, 0xc8, 0x30, 0xe6, 0x41, 0xf0, 0x04, 0x78, 0xb5, 0x2b, - 0x55, 0xe8, 0x39, 0x64, 0xd7, 0x16, 0x21, 0x31, 0x4a, 0x75, 0x3a, 0x43, - 0x64, 0xc1, 0x4c, 0xe0, 0xe4, 0xf1, 0xc4, 0x01, 0x13, 0xa2, 0x47, 0x18, - 0xca, 0x15, 0xc8, 0x1b, 0x3d, 0x42, 0x8e, 0x54, 0x78, 0x65, 0xf4, 0x49, - 0xd5, 0x18, 0x55, 0x82, 0xd5, 0x5b, 0x1d, 0x7c, 0x65, 0x44, 0x7a, 0x09, - 0xfd, 0x0d, 0xb6, 0x48, 0x43, 0x71, 0xee, 0x44, 0xd1, 0xda, 0xf8, 0x5e, - 0xd6, 0xe8, 0x33, 0x3f, 0xec, 0x00, 0x6a, 0x56, 0x17, 0x12, 0x53, 0x60, - 0x6b, 0xe0, 0x14, 0xea, 0x04, 0x8e, 0xa9, 0x05, 0x30, 0x62, 0xc4, 0x1e, - 0x84, 0x60, 0x84, 0x9f, 0xc8, 0xc7, 0x3c, 0xc5, 0x3c, 0x54, 0x57, 0xea, - 0x45, 0x6a, 0xfc, 0x82, 0xc4, 0xfa, 0x48, 0x5a, 0xac, 0x31, 0x26, 0x06, - 0xf8, 0x16, 0x03, 0xbc, 0x42, 0x3a, 0x5f, 0x29, 0x08, 0xa2, 0x64, 0x44, - 0xa7, 0x68, 0x32, 0x37, 0xc8, 0x10, 0x43, 0x04, 0x98, 0x4f, 0x2e, 0x84, - 0x72, 0x9d, 0x39, 0x49, 0x4a, 0x6e, 0xae, 0x2d, 0xaf, 0x8c, 0x53, 0x0e, - 0x88, 0x7b, 0x93, 0xf5, 0xe5, 0x93, 0x7d, 0x04, 0xcd, 0x49, 0x1e, 0x90, - 0x76, 0x51, 0x76, 0xd2, 0xfd, 0x8c, 0x30, 0xa1, 0x38, 0xd7, 0x19, 0x53, - 0xa3, 0xb6, 0x5c, 0x21, 0x35, 0x95, 0xef, 0x46, 0x49, 0x77, 0x23, 0xd9, - 0x07, 0x5f, 0xfc, 0x89, 0x55, 0x3e, 0x15, 0xa9, 0xdd, 0x52, 0xbb, 0xa7, - 0xdb, 0x37, 0x20, 0xcc, 0x28, 0xa9, 0xb6, 0x75, 0x96, 0xc2, 0xb1, 0xad, - 0xd2, 0x8d, 0x47, 0x25, 0x27, 0xdf, 0x33, 0x30, 0x86, 0x94, 0x85, 0x36, - 0xbc, 0x16, 0x16, 0xe7, 0x7e, 0x61, 0x05, 0x87, 0xae, 0x57, 0x23, 0x8d, - 0x1e, 0xe5, 0x31, 0x12, 0xf9, 0x45, 0xb3, 0x41, 0x73, 0xab, 0xa9, 0x84, - 0x46, 0xcb, 0xa8, 0x82, 0x1a, 0xb8, 0x27, 0x6d, 0x35, 0x93, 0xad, 0xec, - 0xc1, 0x4b, 0xaa, 0x5f, 0x5e, 0xd5, 0x12, 0x9c, 0x2e, 0x18, 0x09, 0xad, - 0xf1, 0x45, 0x6f, 0x4b, 0x3a, 0xcc, 0x16, 0x16, 0x07, 0x7b, 0x93, 0x71, - 0xeb, 0x59, 0x21, 0x1f, 0xda, 0x87, 0x60, 0x26, 0x08, 0x9e, 0x02, 0xe4, - 0x21, 0x45, 0x79, 0x2c, 0x54, 0xe6, 0x3c, 0x17, 0x73, 0x53, 0x85, 0x0c, - 0xc5, 0x83, 0x61, 0xc3, 0x3b, 0x9f, 0x25, 0x74, 0x7f, 0x0a, 0x49, 0xdb, - 0x97, 0xce, 0xa2, 0xad, 0xce, 0xf4, 0x3a, 0x24, 0x39, 0x05, 0x67, 0xf4, - 0x29, 0x1f, 0x2f, 0xca, 0x09, 0x1b, 0x90, 0x71, 0x4a, 0xab, 0x28, 0x9a, - 0xe7, 0x1c, 0x5b, 0x4a, 0x09, 0xd3, 0x0e, 0x85, 0x11, 0x73, 0x6c, 0xe9, - 0x7d, 0x53, 0x36, 0xf8, 0xc4, 0xf1, 0x1d, 0x50, 0xdc, 0x4b, 0xf2, 0x49, - 0x7b, 0x03, 0x4a, 0x43, 0x9e, 0xed, 0x50, 0xc3, 0xd6, 0x77, 0x36, 0x8e, - 0x29, 0xcb, 0x99, 0xe0, 0x75, 0xc1, 0x09, 0xbc, 0x92, 0x95, 0xd5, 0xf6, - 0xba, 0xa4, 0xcb, 0xe9, 0xc2, 0x3f, 0x2a, 0xeb, 0xf5, 0x59, 0x59, 0xaf, - 0xff, 0xc7, 0xd5, 0xb5, 0x2d, 0x3a, 0xa8, 0xea, 0xc0, 0xf7, 0xfd, 0x97, - 0xbd, 0xb8, 0x5a, 0xcf, 0xb2, 0xea, 0x46, 0xd4, 0xd5, 0x7e, 0xfd, 0x21, - 0xc9, 0xcc, 0x84, 0xee, 0x87, 0x96, 0x09, 0x77, 0x90, 0x6b, 0x02, 0xa1, - 0xab, 0x2c, 0xd7, 0x34, 0xf7, 0xe5, 0x31, 0xbd, 0x51, 0x6f, 0x61, 0xc3, - 0x1a, 0xb8, 0xd4, 0x18, 0xb5, 0xdd, 0x29, 0xb9, 0xc9, 0x31, 0x75, 0x67, - 0x1c, 0xeb, 0xec, 0x9e, 0x3b, 0x0e, 0xd5, 0x80, 0x88, 0x32, 0x8c, 0x8f, - 0x07, 0xd8, 0x92, 0x65, 0x7c, 0xc1, 0x60, 0xe8, 0x97, 0xe6, 0x30, 0x60, - 0x4d, 0x62, 0x65, 0x7c, 0xc9, 0x57, 0x9b, 0x29, 0x18, 0xd7, 0xdc, 0xc6, - 0x22, 0xa5, 0xdd, 0x95, 0x58, 0xeb, 0xa7, 0x36, 0xd5, 0xe7, 0x40, 0x3f, - 0x6e, 0xfd, 0x40, 0xdf, 0xaf, 0xa2, 0x8a, 0x9f, 0x79, 0x06, 0x6a, 0x3b, - 0x68, 0x36, 0xd3, 0x64, 0x40, 0x6b, 0x95, 0x50, 0x96, 0xab, 0x3a, 0x80, - 0x41, 0x31, 0xf8, 0x44, 0x61, 0xa4, 0x72, 0x12, 0xa5, 0x59, 0xae, 0x0a, - 0x31, 0x0d, 0x99, 0x21, 0x51, 0x8c, 0xe1, 0x96, 0xed, 0xd0, 0x71, 0x17, - 0xf9, 0x6d, 0xba, 0xa8, 0xa2, 0x6c, 0x3d, 0xba, 0x75, 0x7c, 0x78, 0xb3, - 0x20, 0xcf, 0x2a, 0x70, 0x3a, 0xf0, 0xd4, 0xb6, 0xe1, 0x9c, 0x50, 0x9d, - 0xa0, 0x3d, 0x97, 0xae, 0x26, 0xd4, 0x79, 0xa8, 0x85, 0x4a, 0xb3, 0xe3, - 0xda, 0xeb, 0x75, 0x5c, 0x7b, 0xad, 0x8e, 0x8d, 0xf8, 0xb9, 0x64, 0x25, - 0x1a, 0xd1, 0x21, 0x84, 0xfd, 0xe9, 0xca, 0xf4, 0xd3, 0x0d, 0x0e, 0x41, - 0x64, 0x01, 0x8d, 0xd4, 0x16, 0xb9, 0xe4, 0x61, 0x16, 0xc3, 0x63, 0xed, - 0x12, 0x19, 0x6b, 0x67, 0x9f, 0xfb, 0x52, 0x27, 0x13, 0xe3, 0x95, 0x44, - 0x83, 0x3b, 0x66, 0xa8, 0x05, 0x4f, 0x9e, 0x66, 0xed, 0xc8, 0x42, 0xe5, - 0xd1, 0x63, 0x9d, 0x24, 0xbb, 0xdc, 0x3f, 0xf2, 0x00, 0x47, 0xa3, 0x52, - 0xe3, 0x33, 0x09, 0x39, 0xe9, 0x20, 0x18, 0xb0, 0x72, 0x95, 0x47, 0xbd, - 0x56, 0x7b, 0x6c, 0xe6, 0x27, 0xc7, 0x46, 0xa3, 0x98, 0xe8, 0x34, 0xfe, - 0x01, 0x2c, 0xdc, 0xb1, 0x1a, 0x9e, 0x1f, 0x59, 0x09, 0x46, 0xd1, 0xc5, - 0x6e, 0xff, 0x68, 0xc4, 0x59, 0x5e, 0x5a, 0xb3, 0x2c, 0xaf, 0x5c, 0x99, - 0x98, 0x12, 0x8f, 0x0c, 0xfd, 0x5a, 0x94, 0xbd, 0xd7, 0xd2, 0xb7, 0x60, - 0xa9, 0xfa, 0x30, 0xbc, 0x56, 0x01, 0xf9, 0xde, 0xa7, 0x47, 0xd6, 0xde, - 0xec, 0xab, 0xb6, 0x8c, 0x76, 0xce, 0x55, 0x1c, 0x08, 0x25, 0xbf, 0xfc, - 0xb4, 0x46, 0x09, 0x17, 0x13, 0xab, 0x2b, 0x8c, 0xcb, 0xd8, 0xef, 0xd9, - 0xcf, 0xdd, 0x42, 0x29, 0x38, 0xa1, 0x1c, 0xe9, 0xed, 0x08, 0x62, 0xb6, - 0xf8, 0xd5, 0xb5, 0x6b, 0x04, 0x20, 0x3f, 0xa1, 0x11, 0x26, 0x17, 0xed, - 0x88, 0x4c, 0xa2, 0x13, 0x89, 0x1a, 0xa3, 0x2a, 0xb9, 0x11, 0xa0, 0x32, - 0xfd, 0x31, 0x95, 0x85, 0x27, 0x79, 0x7c, 0xf9, 0xe5, 0xca, 0xc4, 0x49, - 0x7d, 0x86, 0xff, 0x2c, 0xef, 0xd3, 0x62, 0xfa, 0x26, 0xeb, 0xb7, 0xb3, - 0x12, 0x5e, 0xb6, 0x3e, 0xe8, 0xd6, 0xd9, 0x67, 0x6e, 0x72, 0xa9, 0x5c, - 0x78, 0x4f, 0xa5, 0xa1, 0xd2, 0x35, 0x9a, 0xed, 0xc2, 0x32, 0x1b, 0x62, - 0xda, 0x3e, 0xad, 0x66, 0xf4, 0xfd, 0x2c, 0xeb, 0x44, 0x4e, 0x67, 0xa6, - 0x86, 0x55, 0xbd, 0x70, 0x5b, 0xbb, 0xbe, 0x66, 0x84, 0x0a, 0xdb, 0xe9, - 0xa3, 0x76, 0x2a, 0x97, 0x08, 0xad, 0xa1, 0x75, 0x0b, 0x2f, 0xa7, 0x7a, - 0x17, 0x45, 0x57, 0xfb, 0x8e, 0x51, 0x4d, 0xf9, 0x02, 0xbf, 0x6d, 0xe5, - 0xd5, 0x24, 0xe0, 0x0c, 0x22, 0xed, 0xf1, 0x24, 0x32, 0x82, 0xa2, 0xf5, - 0x50, 0x60, 0x45, 0xa6, 0x63, 0x82, 0x41, 0x6c, 0x39, 0xaa, 0xe5, 0xa9, - 0x41, 0x23, 0xf6, 0x2b, 0x55, 0x44, 0x36, 0x6a, 0x47, 0x54, 0xb9, 0xaa, - 0x58, 0xb8, 0xa4, 0x80, 0xfa, 0x51, 0x07, 0xe5, 0xaa, 0xc1, 0xeb, 0x18, - 0xef, 0x9d, 0xdf, 0x51, 0x99, 0x39, 0xc6, 0xcc, 0xcb, 0xf1, 0xb5, 0x18, - 0x59, 0x5c, 0x61, 0x6a, 0x47, 0x3c, 0x88, 0xfa, 0x31, 0x32, 0x28, 0xc5, - 0xb6, 0xf4, 0x23, 0x57, 0xea, 0x4d, 0x0d, 0x22, 0x7d, 0xfd, 0x2a, 0xb6, - 0x53, 0xab, 0x87, 0xac, 0x94, 0xbd, 0xcf, 0xc6, 0x9e, 0x2d, 0x76, 0x67, - 0x3a, 0x9c, 0xfb, 0xb7, 0x37, 0x2e, 0x74, 0x39, 0xea, 0x59, 0xa2, 0x4e, - 0x9b, 0xc8, 0xb8, 0x73, 0x46, 0x6f, 0xdb, 0xaf, 0x53, 0x07, 0x38, 0x89, - 0x1a, 0x91, 0xfc, 0x85, 0xa0, 0xe0, 0xd2, 0x96, 0x15, 0x68, 0x71, 0xba, - 0x53, 0xb3, 0x52, 0x17, 0x8e, 0x01, 0x64, 0x66, 0x7f, 0xe4, 0xb1, 0x70, - 0x7f, 0xaf, 0x44, 0xdb, 0x05, 0xbb, 0x65, 0x83, 0x5d, 0xf2, 0x8e, 0x17, - 0x12, 0xed, 0xe1, 0x12, 0x75, 0xe3, 0xc0, 0x51, 0x6b, 0xfb, 0x74, 0xe4, - 0x32, 0xdd, 0x09, 0x8e, 0x9e, 0x41, 0x7c, 0x44, 0xf0, 0xd0, 0xaa, 0x70, - 0x38, 0xb4, 0x55, 0xc9, 0xd4, 0x41, 0x61, 0x9d, 0xb7, 0xa1, 0xce, 0x9d, - 0xb5, 0x8d, 0x86, 0xdc, 0x61, 0x01, 0xca, 0xda, 0xe4, 0xd2, 0xc8, 0xfb, - 0x4c, 0xed, 0xe6, 0x80, 0x9d, 0xaf, 0x14, 0xf3, 0x38, 0xc5, 0x4a, 0x9a, - 0xfb, 0x8a, 0xcc, 0xf5, 0xbd, 0x43, 0xf9, 0xd7, 0xdc, 0xb4, 0x9b, 0xb4, - 0x5e, 0x43, 0x4b, 0x50, 0x08, 0x50, 0x60, 0x95, 0x23, 0x6e, 0xc3, 0x43, - 0x7a, 0x7d, 0xd0, 0x9f, 0x16, 0xa6, 0x7b, 0x27, 0x2f, 0xc8, 0xd7, 0x1b, - 0x0d, 0xc6, 0x55, 0x67, 0xa0, 0xde, 0x96, 0x2d, 0x86, 0x4f, 0xc3, 0x19, - 0xe0, 0x0b, 0xc8, 0x0d, 0xeb, 0xf5, 0x1d, 0xc7, 0x5b, 0x07, 0x95, 0x8c, - 0x61, 0x66, 0x4f, 0xfa, 0x63, 0x03, 0x47, 0x83, 0x36, 0xc8, 0x80, 0xdb, - 0xce, 0x70, 0xaa, 0x97, 0x5c, 0x08, 0xef, 0xb5, 0xa4, 0x7a, 0x32, 0x50, - 0xf4, 0x54, 0x46, 0x00, 0x4c, 0x27, 0xff, 0xee, 0x3c, 0x20, 0xd6, 0x10, - 0x5a, 0x63, 0x43, 0x5c, 0x8d, 0x37, 0xf8, 0x2b, 0xd4, 0x5d, 0x9a, 0x04, - 0x45, 0xef, 0x79, 0x69, 0xf2, 0x5f, 0xcb, 0x6d, 0xe7, 0xd2, 0x08, 0x65, - 0xec, 0xdf, 0x78, 0x30, 0x19, 0xb5, 0x62, 0x54, 0x19, 0x32, 0x1d, 0x23, - 0xbe, 0x29, 0x68, 0xb3, 0x70, 0x4a, 0x11, 0x16, 0xf2, 0x6d, 0x1a, 0x46, - 0xd9, 0x1b, 0x3a, 0x38, 0x82, 0x37, 0xfc, 0x86, 0xe5, 0x00, 0xad, 0x42, - 0x0d, 0x4d, 0x93, 0xf2, 0xcd, 0xb6, 0xfc, 0xef, 0xde, 0xa9, 0x0b, 0x0f, - 0x82, 0xf6, 0x4a, 0x6c, 0x28, 0x64, 0x96, 0x99, 0x5a, 0xb7, 0x4a, 0xdb, - 0xad, 0x9b, 0x00, 0x49, 0x7e, 0xb9, 0x31, 0x2b, 0xa3, 0x5e, 0xb8, 0x6c, - 0xf8, 0xf6, 0x4b, 0x73, 0xa0, 0xef, 0xd1, 0x55, 0x13, 0xb8, 0xa9, 0xe8, - 0xc6, 0xa1, 0xa6, 0xab, 0x02, 0x4f, 0xb2, 0xac, 0x42, 0x87, 0x2a, 0x62, - 0xec, 0x8a, 0x3f, 0xfe, 0x61, 0x84, 0x22, 0xf4, 0x76, 0xd9, 0x88, 0xcf, - 0x27, 0xd3, 0xf8, 0x7c, 0x18, 0xf2, 0xf3, 0x91, 0x8f, 0x25, 0x33, 0x81, - 0x65, 0x94, 0xbd, 0x30, 0x3f, 0x24, 0x1c, 0xa3, 0xc5, 0x13, 0x7a, 0x30, - 0xd7, 0xec, 0xec, 0xed, 0xb3, 0x53, 0xf8, 0xdc, 0xab, 0x7b, 0x36, 0x9c, - 0x5e, 0x17, 0xcd, 0x66, 0xa5, 0xb5, 0xb6, 0x09, 0xbe, 0x7f, 0xf8, 0x4d, - 0xcb, 0x05, 0x53, 0x4a, 0xa1, 0xfa, 0x27, 0x03, 0x85, 0xcf, 0xf8, 0x1b, - 0x71, 0xe2, 0xfb, 0xda, 0xd3, 0x27, 0xef, 0x30, 0xd9, 0xed, 0x9d, 0x81, - 0xd5, 0xe3, 0xf0, 0xf7, 0x4b, 0x33, 0xaa, 0xc8, 0x4e, 0xcc, 0x8d, 0xb0, - 0x9a, 0x78, 0xc5, 0xb0, 0x2d, 0x8e, 0xf9, 0xa9, 0x1a, 0x64, 0xfb, 0xd5, - 0x05, 0xdd, 0x72, 0xc1, 0x68, 0x57, 0x2e, 0x6c, 0x27, 0x86, 0x46, 0x82, - 0xa5, 0x0c, 0x09, 0xa3, 0xc5, 0x38, 0xde, 0x3b, 0xfb, 0x3d, 0x1d, 0x1e, - 0x4c, 0x69, 0x66, 0xde, 0xe6, 0x5f, 0x16, 0x77, 0xde, 0xf8, 0x2a, 0xb6, - 0xe1, 0xe5, 0xa5, 0xf2, 0x18, 0x41, 0xfb, 0xca, 0x08, 0x56, 0x4d, 0x0f, - 0xe5, 0xc2, 0x1c, 0xae, 0x55, 0xc9, 0x1a, 0xa4, 0xb3, 0x46, 0x81, 0xb6, - 0xc5, 0x7a, 0x86, 0xc1, 0x10, 0xd4, 0x41, 0x68, 0x28, 0xea, 0xb4, 0x2a, - 0x59, 0x7e, 0xd1, 0x9a, 0x95, 0xd2, 0x35, 0xff, 0xee, 0x20, 0x76, 0xf9, - 0xbe, 0xec, 0x96, 0x24, 0xe3, 0xfe, 0xba, 0xec, 0x96, 0x64, 0xef, 0x0c, - 0xa7, 0x03, 0xec, 0x94, 0xc2, 0xd3, 0x4c, 0x25, 0x55, 0xa1, 0x16, 0x7d, - 0x7f, 0x46, 0xf4, 0x61, 0xed, 0x77, 0x8f, 0xb7, 0x25, 0x1f, 0xd2, 0x50, - 0xee, 0x5e, 0x83, 0x3a, 0xe0, 0x05, 0xee, 0xf7, 0x0c, 0x74, 0x87, 0xa7, - 0x09, 0x06, 0xc7, 0x7e, 0xc7, 0x9f, 0xf4, 0x87, 0xb3, 0xc1, 0x85, 0xaf, - 0x31, 0x37, 0xa0, 0x4c, 0xe4, 0xf6, 0x3b, 0x88, 0xce, 0x1e, 0xa5, 0x69, - 0x78, 0xe3, 0x71, 0x8d, 0x46, 0xb0, 0x90, 0x03, 0x37, 0xe0, 0x0d, 0xd9, - 0x58, 0x88, 0x2f, 0x37, 0x5c, 0xdb, 0xea, 0x40, 0x31, 0x5e, 0xb9, 0x66, - 0x30, 0xd8, 0xc6, 0x05, 0xa0, 0xdf, 0xce, 0xc3, 0xaf, 0xdc, 0xa5, 0xad, - 0x38, 0x08, 0xd8, 0xb7, 0xee, 0x78, 0x1b, 0x79, 0x52, 0xc9, 0xc9, 0x49, - 0xde, 0x6e, 0x14, 0xa7, 0x1b, 0x9c, 0x6b, 0x07, 0x99, 0xc9, 0x5b, 0xd7, - 0xc0, 0x8c, 0x43, 0x2b, 0xfb, 0x61, 0x5c, 0xe5, 0x3f, 0x4f, 0x15, 0x05, - 0x91, 0x9e, 0x56, 0x55, 0xff, 0x4d, 0x9b, 0xce, 0x60, 0xbd, 0x0e, 0xcc, - 0xcf, 0x68, 0xbb, 0x78, 0x7c, 0x02, 0x10, 0x8a, 0x18, 0xa4, 0xe2, 0xcb, - 0xd9, 0xc5, 0x09, 0x7a, 0xfb, 0xed, 0xbe, 0x81, 0x11, 0xb4, 0x9f, 0x52, - 0x9b, 0x1c, 0xa8, 0xde, 0x45, 0xb1, 0x52, 0x17, 0x68, 0xc0, 0xb4, 0x8e, - 0x0d, 0x77, 0xcf, 0xeb, 0x35, 0x56, 0xef, 0x23, 0x8f, 0xf7, 0x81, 0xc4, - 0xde, 0x09, 0xd4, 0xe7, 0xdb, 0xf1, 0xc3, 0xa8, 0x9d, 0x50, 0xe4, 0xcb, - 0xa4, 0x5b, 0x91, 0xa2, 0x32, 0x8d, 0x57, 0xa7, 0x29, 0x48, 0xb4, 0x3c, - 0xbf, 0xec, 0xf8, 0x57, 0xef, 0xba, 0x52, 0x8b, 0xab, 0x51, 0x76, 0xb2, - 0xad, 0x73, 0xd4, 0x99, 0x37, 0x12, 0x99, 0x85, 0xb6, 0x61, 0xad, 0xf2, - 0x36, 0x2f, 0xa3, 0xc6, 0x65, 0xd2, 0x1d, 0x69, 0x3c, 0xc7, 0x9e, 0xcc, - 0x2b, 0x4f, 0x1d, 0x3d, 0x66, 0xb2, 0xa5, 0xcf, 0x7e, 0xc9, 0xbc, 0xe7, - 0xcd, 0x78, 0x50, 0x72, 0xc9, 0x25, 0x6c, 0xa3, 0xc8, 0x07, 0x0a, 0x98, - 0xa3, 0xce, 0xa0, 0x37, 0xe4, 0x58, 0x57, 0x25, 0x1f, 0xc2, 0x00, 0xc5, - 0x18, 0xab, 0x69, 0x93, 0x0e, 0x81, 0x59, 0x89, 0x7b, 0x6c, 0xe9, 0x2f, - 0xc7, 0xb7, 0xc1, 0x5f, 0x9e, 0x63, 0x62, 0x7b, 0xde, 0xcd, 0x11, 0xa5, - 0xa4, 0x82, 0xd4, 0xc7, 0xde, 0x4b, 0xc9, 0x70, 0x45, 0x1d, 0xfc, 0xb6, - 0x6f, 0xcc, 0xfb, 0xfd, 0xa2, 0x3a, 0xba, 0x0f, 0x43, 0x36, 0x45, 0x23, - 0xe8, 0xfd, 0x3e, 0xbc, 0xb2, 0x93, 0xdc, 0x4b, 0xca, 0xb8, 0x40, 0x31, - 0x3c, 0xb8, 0x58, 0x8e, 0x54, 0xcf, 0x03, 0x07, 0x87, 0x21, 0x3f, 0xb9, - 0xbf, 0xc8, 0x46, 0xcf, 0xe2, 0xd8, 0xdb, 0x7c, 0xa0, 0xbe, 0xfe, 0xa3, - 0x06, 0xff, 0x93, 0xed, 0xfd, 0x67, 0xd4, 0x90, 0xf1, 0xd3, 0xb5, 0xcd, - 0x78, 0x4f, 0x8d, 0x7e, 0xfa, 0x66, 0xda, 0x9d, 0x91, 0x03, 0xf1, 0xe5, - 0xc4, 0xf0, 0x3a, 0x2f, 0xd7, 0x70, 0xc9, 0x0a, 0x71, 0xfc, 0xe5, 0xa0, - 0xc0, 0x46, 0xb0, 0x96, 0x7f, 0x4a, 0xde, 0xda, 0x01, 0x95, 0x11, 0x74, - 0x99, 0xf7, 0x79, 0x36, 0xbd, 0x0d, 0x9c, 0x3f, 0x02, 0xa7, 0xb7, 0xf1, - 0xd1, 0x7d, 0xe0, 0x1f, 0xbd, 0xc2, 0x67, 0xb8, 0xeb, 0x71, 0x3f, 0xbb, - 0xba, 0x9b, 0x41, 0x05, 0xdf, 0xb7, 0xce, 0xcb, 0x26, 0x1f, 0x5b, 0x7a, - 0xa8, 0x9d, 0x87, 0x4c, 0x46, 0x05, 0x7d, 0xf4, 0xa5, 0x79, 0x64, 0x61, - 0x1e, 0x68, 0xde, 0x8f, 0xcb, 0x24, 0x9b, 0xae, 0x0b, 0x39, 0x81, 0x8c, - 0x3e, 0x2e, 0xea, 0x4e, 0x06, 0x83, 0x51, 0xdd, 0xf0, 0x30, 0x77, 0x1d, - 0x28, 0xa8, 0xfa, 0x45, 0x28, 0x0f, 0x20, 0x51, 0xdd, 0x8f, 0x51, 0x37, - 0x90, 0x48, 0x30, 0xfa, 0x54, 0x21, 0x14, 0x44, 0x17, 0x7f, 0xe9, 0x86, - 0xf3, 0x46, 0x54, 0x65, 0xc3, 0xd8, 0xfc, 0xbd, 0x37, 0x35, 0x2a, 0xc7, - 0xca, 0xc3, 0x9e, 0x0d, 0xf6, 0xd1, 0xc9, 0xb2, 0x49, 0x7d, 0x3a, 0xaa, - 0xf6, 0x58, 0x69, 0xa6, 0x06, 0x4a, 0x23, 0xca, 0x43, 0x12, 0xa2, 0x32, - 0xd8, 0xfb, 0x77, 0x53, 0x4f, 0xb7, 0xe9, 0x3a, 0x3f, 0x9c, 0x53, 0xbd, - 0x0b, 0xf3, 0x64, 0xfa, 0xa7, 0x09, 0xf9, 0x5d, 0xfc, 0xa5, 0xbf, 0x9b, - 0x88, 0x2d, 0x23, 0x1d, 0x6b, 0x57, 0xdd, 0xdd, 0x25, 0x55, 0x12, 0x8a, - 0xaa, 0xf6, 0x95, 0xdd, 0xbd, 0x73, 0x17, 0x04, 0xc2, 0xfc, 0xaf, 0xeb, - 0x57, 0xff, 0xe3, 0x23, 0x32, 0x01, 0x19, 0x91, 0x3f, 0xbd, 0xa0, 0x44, - 0x40, 0xd1, 0x31, 0xb5, 0xe1, 0xbb, 0x40, 0x0d, 0x9e, 0xa6, 0xde, 0x43, - 0x37, 0x88, 0x76, 0xf5, 0xe8, 0x30, 0xd7, 0x3d, 0xd3, 0xe5, 0x4f, 0xd9, - 0x9b, 0xf0, 0x74, 0xbf, 0xa3, 0x8c, 0xe7, 0x4d, 0xcb, 0x3c, 0xb1, 0x13, - 0x44, 0x67, 0x3f, 0xf6, 0xf6, 0x0a, 0x3a, 0x3c, 0x3a, 0xff, 0x8f, 0xcc, - 0x65, 0xb6, 0x38, 0x3f, 0x94, 0x23, 0xef, 0x07, 0x9b, 0xfc, 0x94, 0x23, - 0x37, 0x0f, 0xe8, 0x18, 0x1a, 0x8e, 0xce, 0x7a, 0x38, 0x18, 0x47, 0x83, - 0x8a, 0xc3, 0x04, 0x01, 0xb3, 0x1c, 0x1e, 0x5a, 0x64, 0x4d, 0xf1, 0x42, - 0xdf, 0xb3, 0x8b, 0x20, 0x2c, 0xe4, 0x37, 0xc8, 0x8c, 0xe8, 0xcb, 0x6f, - 0xe7, 0xaf, 0xf3, 0xb3, 0xdf, 0x2a, 0x33, 0xf7, 0xea, 0xc6, 0xa6, 0xd7, - 0x45, 0x83, 0x49, 0xa7, 0x56, 0x34, 0x88, 0xb4, 0x2f, 0x9c, 0x8f, 0x5c, - 0x41, 0xa3, 0xfc, 0x0c, 0xf7, 0xb4, 0xd7, 0x85, 0x72, 0x12, 0x4a, 0x61, - 0xcc, 0x14, 0x4c, 0xa1, 0xd7, 0x8d, 0x83, 0x5a, 0x77, 0xa2, 0x17, 0xc4, - 0x41, 0xdc, 0xf5, 0xd2, 0x57, 0x8e, 0xfc, 0x79, 0xb6, 0xd7, 0xe5, 0xac, - 0x5b, 0xae, 0x1b, 0x41, 0xc9, 0x23, 0xc8, 0xff, 0x78, 0x56, 0xbb, 0x7a, - 0xd9, 0x1b, 0xa9, 0x1c, 0x14, 0x8c, 0x51, 0x0f, 0x90, 0x33, 0x7e, 0x2a, - 0xb0, 0x71, 0x4c, 0xdb, 0x7d, 0xee, 0xba, 0x12, 0x28, 0x46, 0xda, 0x9d, - 0x9c, 0x09, 0x02, 0xde, 0xe6, 0xe1, 0x4c, 0x6b, 0x48, 0xfb, 0xca, 0xf0, - 0xc5, 0xd7, 0x27, 0xd9, 0x39, 0x31, 0xeb, 0xfe, 0x08, 0xa4, 0x1c, 0x8e, - 0x2e, 0x39, 0x5e, 0x02, 0xd4, 0x3c, 0xdf, 0x2d, 0x5e, 0x54, 0x8e, 0xd9, - 0xa2, 0x4a, 0x6b, 0xa7, 0x32, 0x8a, 0x20, 0x39, 0x50, 0xe1, 0xb6, 0x28, - 0x42, 0xf6, 0xf7, 0x43, 0x4d, 0x42, 0x3d, 0x0a, 0x14, 0xd9, 0xbd, 0x15, - 0xb3, 0xdd, 0xcf, 0xf8, 0x22, 0xe8, 0x67, 0xc8, 0xfd, 0x9b, 0x13, 0xb2, - 0x9f, 0x7a, 0xff, 0xd3, 0xd4, 0xd9, 0xb3, 0x3c, 0x76, 0x75, 0xe0, 0xd2, - 0x61, 0x79, 0xc9, 0x6e, 0x88, 0x83, 0xb6, 0xe8, 0x37, 0x41, 0xa1, 0x70, - 0xab, 0x86, 0xc9, 0x35, 0x5b, 0xbb, 0x9f, 0x66, 0xcc, 0x74, 0x79, 0xb6, - 0xd1, 0x60, 0x9e, 0xc4, 0x73, 0xaa, 0xd2, 0x8b, 0xf5, 0xd7, 0x2e, 0x84, - 0x91, 0xe9, 0xeb, 0xe8, 0x56, 0xdb, 0x3c, 0x95, 0x67, 0xe8, 0xad, 0x04, - 0xf3, 0xc4, 0x52, 0x10, 0xf4, 0xd2, 0x20, 0x05, 0x71, 0x2e, 0xc2, 0x97, - 0x7d, 0x36, 0x4c, 0x71, 0xe4, 0x24, 0xf3, 0xa7, 0x27, 0x9b, 0x1b, 0xd4, - 0xa9, 0x82, 0xca, 0x9e, 0xf4, 0x2d, 0xc6, 0x4f, 0xba, 0x1b, 0x62, 0xff, - 0x23, 0xdb, 0x97, 0x45, 0xc6, 0xd8, 0xa7, 0xb5, 0x7d, 0xc7, 0xbd, 0x65, - 0xa0, 0x7e, 0x90, 0x73, 0x4a, 0x81, 0xc6, 0x6e, 0x5c, 0x01, 0xa5, 0xb2, - 0x48, 0x72, 0x6c, 0x78, 0xe9, 0x37, 0xca, 0x41, 0x7e, 0xb9, 0xa9, 0x32, - 0x9c, 0xca, 0x38, 0x96, 0xdc, 0xa0, 0xae, 0x9d, 0x18, 0xd8, 0xa9, 0x7e, - 0x11, 0xfa, 0x25, 0x4b, 0x75, 0xb2, 0xcf, 0xf2, 0x92, 0x39, 0x5e, 0x34, - 0x2e, 0x07, 0x1b, 0xdd, 0xb9, 0xab, 0x46, 0x74, 0x03, 0x9e, 0x13, 0x4a, - 0x76, 0xef, 0x38, 0x4b, 0x83, 0xf3, 0xc7, 0xd9, 0x58, 0xf7, 0x49, 0xd5, - 0x67, 0xcf, 0x79, 0x2b, 0xde, 0x29, 0xeb, 0xae, 0x5b, 0x8b, 0xad, 0x5a, - 0x8b, 0xf5, 0xac, 0x4c, 0xa3, 0xc8, 0xe8, 0x33, 0xac, 0x6e, 0x17, 0x8f, - 0xb7, 0x0e, 0x1d, 0xce, 0x59, 0xe4, 0xdf, 0x7e, 0xbf, 0xf1, 0x6f, 0x6e, - 0x37, 0x0c, 0x32, 0x1b, 0x79, 0xfa, 0xc3, 0x71, 0xb7, 0xa4, 0x77, 0x8a, - 0xa3, 0xc1, 0x76, 0xdb, 0x3b, 0x87, 0x9d, 0x01, 0x06, 0xdd, 0xb4, 0x34, - 0xe2, 0x75, 0x9d, 0x58, 0x68, 0x27, 0x94, 0x46, 0x36, 0x26, 0x83, 0xfc, - 0x88, 0x5b, 0xd7, 0x75, 0x75, 0x66, 0x84, 0x47, 0x46, 0x3a, 0xc8, 0x7e, - 0xb1, 0xf9, 0xcb, 0xd7, 0x80, 0x8f, 0x59, 0xde, 0xa7, 0x31, 0xfd, 0xcf, - 0xec, 0xfd, 0x76, 0xa9, 0x22, 0x73, 0x3c, 0x6e, 0x1a, 0x3b, 0xb6, 0x51, - 0xd5, 0xe8, 0x17, 0x2f, 0x7a, 0x3f, 0xca, 0xcd, 0xb8, 0xe9, 0x53, 0x6e, - 0xfe, 0x0c, 0x1e, 0x61, 0x36, 0x97, 0x8d, 0x4f, 0xe2, 0x05, 0x54, 0xd0, - 0x45, 0x1f, 0xde, 0x60, 0x46, 0xb9, 0xe4, 0x3a, 0xbd, 0xe1, 0x72, 0x53, - 0xc7, 0xf6, 0x77, 0x17, 0x33, 0xda, 0x35, 0x57, 0x5a, 0x8e, 0xd3, 0xdb, - 0x58, 0x3a, 0x5f, 0x6a, 0x00, 0xdb, 0x3a, 0xa6, 0xff, 0x49, 0xd7, 0xc2, - 0x8c, 0x5a, 0xb2, 0x9b, 0x19, 0x91, 0x1d, 0x37, 0x28, 0x16, 0x50, 0xc1, - 0x33, 0xad, 0xcc, 0x76, 0xf7, 0xb4, 0xad, 0x51, 0x4b, 0x97, 0x87, 0xba, - 0x74, 0xf3, 0xdd, 0x56, 0xc5, 0xec, 0xb2, 0xc9, 0xb5, 0x1b, 0x25, 0x83, - 0x4c, 0xb7, 0xb1, 0x2f, 0xad, 0x93, 0x5f, 0x6e, 0x8a, 0x70, 0xe7, 0xb6, - 0xac, 0x3b, 0xee, 0x63, 0x44, 0x29, 0x5d, 0x0d, 0xed, 0xdb, 0xad, 0x6b, - 0xe3, 0x20, 0xff, 0xe3, 0x9a, 0x85, 0x21, 0x8d, 0xb8, 0x6a, 0x9f, 0xcd, - 0x9a, 0x99, 0xac, 0xdd, 0x8a, 0xc8, 0xd4, 0xf0, 0x2a, 0xc2, 0x20, 0xbe, - 0x9d, 0x32, 0xb2, 0xa9, 0x9b, 0x3d, 0x6b, 0xbf, 0x25, 0xaa, 0xb9, 0x0d, - 0xaa, 0x3a, 0xee, 0x63, 0x0f, 0xac, 0x6a, 0xf1, 0xd3, 0xe2, 0x64, 0x9f, - 0xaa, 0xfa, 0xb2, 0x75, 0xd4, 0xaa, 0xa9, 0xe6, 0x5c, 0x51, 0x75, 0x9c, - 0xd3, 0x34, 0x18, 0x5f, 0xba, 0xca, 0xac, 0xdd, 0x96, 0xb5, 0xf6, 0xbb, - 0xd4, 0x5a, 0x72, 0xaa, 0x75, 0xac, 0x68, 0xfb, 0x97, 0x49, 0x49, 0xca, - 0xe3, 0x78, 0xdd, 0xbb, 0x28, 0x8c, 0x52, 0xe9, 0xbe, 0xc6, 0xfa, 0xda, - 0x8d, 0xf5, 0xb5, 0x2c, 0x5f, 0x09, 0xdb, 0xe9, 0x8e, 0x7b, 0xba, 0x19, - 0x95, 0x89, 0x2f, 0x5f, 0x5b, 0x33, 0x2d, 0xec, 0x5c, 0x65, 0x94, 0x22, - 0xa7, 0xc2, 0xc1, 0x80, 0x0c, 0x7c, 0xf4, 0x2b, 0x8c, 0x23, 0x57, 0x18, - 0x06, 0xd3, 0xcf, 0xd7, 0x4e, 0xe2, 0x18, 0x7a, 0x97, 0x0e, 0xe3, 0x5c, - 0x07, 0x20, 0xfb, 0x80, 0x11, 0xe9, 0xa7, 0x48, 0x3a, 0x2d, 0xaa, 0x2a, - 0x54, 0x90, 0xff, 0xf1, 0xac, 0x4a, 0x38, 0xb4, 0xf6, 0x3b, 0x7a, 0x76, - 0xc7, 0x31, 0x68, 0xa9, 0x76, 0x74, 0x0f, 0xd3, 0x3b, 0xb5, 0xa5, 0x9f, - 0xec, 0xb4, 0xba, 0xaf, 0x14, 0xf0, 0xcb, 0x3e, 0xd3, 0x56, 0x2d, 0xda, - 0x59, 0xb2, 0xac, 0xa1, 0x51, 0x4b, 0xcd, 0x43, 0x3c, 0xb6, 0x23, 0x19, - 0x6c, 0x87, 0x16, 0x7a, 0x47, 0xc7, 0x1f, 0x3d, 0x46, 0x7e, 0x56, 0x93, - 0x7b, 0xcb, 0x76, 0xf9, 0xed, 0xb1, 0x7c, 0x4c, 0xb5, 0x83, 0x8a, 0xd8, - 0x46, 0xcf, 0x8e, 0xc9, 0x4d, 0x5a, 0x4b, 0xc9, 0x23, 0x87, 0xd1, 0xa3, - 0x1b, 0x46, 0xcf, 0xbe, 0xff, 0x9c, 0xd9, 0x7f, 0x0c, 0xca, 0x8f, 0x98, - 0x75, 0xcf, 0xb6, 0xa5, 0xc4, 0x45, 0x46, 0xe1, 0xa8, 0xcd, 0xe7, 0x90, - 0x7a, 0x57, 0x1a, 0xa1, 0x7b, 0x04, 0xe5, 0xf9, 0xae, 0xcf, 0xd7, 0x17, - 0x0c, 0x3f, 0xd4, 0xa2, 0x66, 0x80, 0x13, 0xa9, 0x8e, 0x16, 0x14, 0x7b, - 0x53, 0x6a, 0x06, 0x98, 0xe8, 0xc8, 0xef, 0x3b, 0xe2, 0x1e, 0x87, 0xbf, - 0x51, 0xb8, 0x4f, 0x3d, 0xc6, 0xac, 0x34, 0xfe, 0x44, 0x2c, 0x12, 0x30, - 0x8d, 0x09, 0x50, 0x7b, 0x76, 0x87, 0x43, 0xa9, 0xf1, 0x3e, 0x47, 0x20, - 0x46, 0xd2, 0x30, 0x1a, 0x69, 0xdb, 0x25, 0xc2, 0x59, 0xc2, 0x1d, 0xf2, - 0x8d, 0x47, 0x9d, 0x5d, 0x32, 0x88, 0x2a, 0x1b, 0xc9, 0x7b, 0x1d, 0xa9, - 0x6b, 0xcc, 0x10, 0x43, 0xae, 0x03, 0x0c, 0x16, 0x5b, 0x3a, 0x81, 0x1a, - 0x5c, 0x15, 0xdb, 0xba, 0x32, 0xcf, 0x0d, 0xd1, 0x7d, 0x43, 0xb5, 0xa8, - 0xb9, 0x4a, 0xba, 0x32, 0x6e, 0x6a, 0x2e, 0x23, 0x74, 0x48, 0x1a, 0xf0, - 0xe6, 0x30, 0x42, 0xf4, 0x1e, 0x40, 0x5b, 0x7b, 0x7b, 0x11, 0x54, 0x61, - 0x0e, 0xf6, 0x6d, 0x43, 0x8c, 0xf3, 0x90, 0x30, 0xc0, 0x61, 0x67, 0xad, - 0x7a, 0x38, 0xe8, 0x8e, 0x9c, 0x1d, 0x94, 0x17, 0x1a, 0x42, 0x80, 0xe5, - 0xf2, 0x12, 0xe2, 0x34, 0x48, 0x65, 0xc5, 0x0d, 0xc4, 0x0b, 0x93, 0x85, - 0xca, 0x49, 0x0c, 0x78, 0xb6, 0x79, 0x7c, 0xaf, 0x50, 0x4b, 0x93, 0xdd, - 0xa9, 0x67, 0x86, 0x97, 0x17, 0x2f, 0x94, 0x13, 0xb2, 0x6f, 0x91, 0x44, - 0xd3, 0x5f, 0x96, 0x57, 0xc4, 0xb6, 0x28, 0xe9, 0x45, 0x13, 0xef, 0x02, - 0xe9, 0x0d, 0xb7, 0x02, 0x0b, 0x54, 0x44, 0x18, 0xa8, 0xb2, 0x92, 0xef, - 0x7e, 0x3d, 0xbf, 0xe4, 0x0c, 0x67, 0x70, 0x61, 0x38, 0x05, 0x0b, 0xdd, - 0xc1, 0x76, 0xe4, 0x66, 0x0e, 0x9b, 0x1d, 0xed, 0xd6, 0x2f, 0x05, 0xcd, - 0xc4, 0x5c, 0xae, 0x2c, 0xe4, 0x1e, 0x2e, 0x62, 0x1e, 0x2e, 0xb9, 0x5e, - 0x5d, 0xb8, 0x5c, 0xf5, 0x7b, 0x02, 0x61, 0xc5, 0x5e, 0xbc, 0x9c, 0x21, - 0xb5, 0xc2, 0x0d, 0x23, 0x33, 0xa7, 0x44, 0x80, 0x3b, 0xeb, 0x7b, 0xbf, - 0x6a, 0xb1, 0x1b, 0x4f, 0x3d, 0x4d, 0x09, 0x91, 0x86, 0xa9, 0x81, 0x2d, - 0x82, 0x8c, 0xe0, 0xee, 0xa9, 0x62, 0xfe, 0xdc, 0x39, 0x80, 0x77, 0xa2, - 0x29, 0x09, 0xa6, 0x76, 0x75, 0x3c, 0x3e, 0xf1, 0x54, 0xf6, 0x5c, 0x02, - 0xec, 0x5a, 0x3d, 0xb2, 0xf3, 0xee, 0x2e, 0xa6, 0x2f, 0x76, 0xf4, 0x18, - 0x83, 0xff, 0x9e, 0x6a, 0x08, 0x81, 0x51, 0xd6, 0xbd, 0x67, 0xf5, 0xef, - 0xaf, 0x17, 0x05, 0x85, 0xfb, 0x8b, 0xeb, 0xa2, 0xfd, 0x25, 0xa9, 0xeb, - 0xce, 0xcb, 0x7f, 0x65, 0x9f, 0xe3, 0x3f, 0xe2, 0x58, 0xf3, 0x25, 0x99, - 0x20, 0xe0, 0xa9, 0xa0, 0x2e, 0xb8, 0x25, 0xdd, 0xc5, 0xc9, 0xd9, 0xd9, - 0x67, 0xf6, 0xee, 0x98, 0xa5, 0x11, 0xe8, 0x13, 0x6d, 0x39, 0x8f, 0x1a, - 0xf3, 0x85, 0x3d, 0xc0, 0x52, 0x91, 0xbd, 0x86, 0xe9, 0x7a, 0x6b, 0x0b, - 0x01, 0x3c, 0x2e, 0xb3, 0xd9, 0xeb, 0x4e, 0xf7, 0x25, 0x18, 0xad, 0x92, - 0xfa, 0xda, 0x4b, 0x2c, 0xa9, 0x01, 0x2a, 0xa9, 0x12, 0xf7, 0xd8, 0xf4, - 0x50, 0x8b, 0x01, 0xd7, 0x4e, 0x8b, 0x92, 0x88, 0xee, 0x1d, 0x47, 0x45, - 0xe2, 0x14, 0xf2, 0xda, 0x28, 0x7b, 0x35, 0x31, 0xbe, 0xc2, 0x76, 0x89, - 0x00, 0x7a, 0x0d, 0xaa, 0x41, 0x0e, 0x11, 0xdb, 0xe5, 0x67, 0x80, 0x81, - 0xe3, 0x22, 0xdb, 0xe5, 0x21, 0x89, 0xf3, 0x16, 0xcf, 0x17, 0x6f, 0xd2, - 0xc9, 0xba, 0x05, 0xbf, 0x62, 0xcb, 0x57, 0x9c, 0x36, 0x8a, 0xf1, 0x37, - 0xe9, 0x09, 0x72, 0xe4, 0x1f, 0x7c, 0xbb, 0xa4, 0xb7, 0xa9, 0x8b, 0x75, - 0xca, 0x22, 0x71, 0xcf, 0x61, 0x68, 0xa6, 0x15, 0x79, 0x33, 0xc0, 0x4c, - 0x1b, 0x2f, 0x80, 0x6c, 0x29, 0xd4, 0xdf, 0xf2, 0x49, 0x26, 0x87, 0xda, - 0xfc, 0x93, 0x42, 0x2e, 0x14, 0x5d, 0x85, 0x45, 0x3e, 0x47, 0x66, 0x04, - 0xc6, 0x84, 0x80, 0x19, 0x6a, 0x57, 0xb0, 0x3d, 0xf3, 0x70, 0xa4, 0x42, - 0x6b, 0x50, 0xf0, 0x73, 0x00, 0xcc, 0x29, 0x68, 0x02, 0xa1, 0xcc, 0x1a, - 0x95, 0xca, 0x63, 0x82, 0x96, 0x18, 0x93, 0x64, 0x17, 0x92, 0xe2, 0xe4, - 0xcd, 0x34, 0xce, 0xb3, 0x9a, 0x67, 0xbd, 0x0d, 0xb3, 0x91, 0x19, 0xb0, - 0xf9, 0x1b, 0xaa, 0x33, 0x4b, 0xe1, 0xc4, 0xd0, 0x41, 0xa5, 0x37, 0xaa, - 0xa4, 0x76, 0xae, 0xea, 0x83, 0xc0, 0xab, 0xbe, 0x81, 0x23, 0xd6, 0xe0, - 0xea, 0x77, 0xdd, 0x95, 0xbb, 0x35, 0xaf, 0xbe, 0x6f, 0xd4, 0xb6, 0xbb, - 0xb5, 0x6d, 0xeb, 0x45, 0x4d, 0x09, 0x18, 0xc1, 0x5d, 0x1b, 0x10, 0x1c, - 0xba, 0xef, 0x82, 0xae, 0xb7, 0x5d, 0xf2, 0xc3, 0xf1, 0xa0, 0x15, 0x10, - 0x3c, 0xda, 0xe5, 0x5b, 0x96, 0x93, 0x1f, 0xa2, 0x66, 0x76, 0x74, 0xd6, - 0x35, 0x20, 0x2b, 0xaa, 0x03, 0x85, 0x91, 0x8e, 0x25, 0x23, 0x6d, 0x78, - 0xeb, 0xe2, 0xa0, 0x0c, 0x22, 0xf0, 0xe7, 0xcb, 0xe5, 0x23, 0x97, 0xed, - 0x47, 0xd2, 0xa9, 0x20, 0xfb, 0x6c, 0x6c, 0xaa, 0x94, 0x1c, 0x74, 0x02, - 0x33, 0x7f, 0x3b, 0xbb, 0xec, 0x21, 0xe7, 0x83, 0x3d, 0xeb, 0xc8, 0xc6, - 0xc4, 0x06, 0x74, 0xb0, 0x08, 0xc7, 0xc2, 0x81, 0xe0, 0x60, 0xe2, 0x07, - 0x87, 0xbe, 0x80, 0x61, 0x79, 0xc2, 0xe6, 0x8c, 0xe1, 0x83, 0xec, 0xc3, - 0xed, 0x76, 0xc1, 0x94, 0x60, 0x08, 0xf3, 0x79, 0x83, 0x3f, 0x3f, 0xa6, - 0x48, 0x1f, 0xf6, 0x53, 0x7a, 0xee, 0x2c, 0xb1, 0x34, 0x34, 0x28, 0xbb, - 0xb4, 0x9a, 0x30, 0xa9, 0x1a, 0x7e, 0x87, 0xf9, 0x92, 0x8d, 0x35, 0x4f, - 0x56, 0x2a, 0xa8, 0x4f, 0x4f, 0x29, 0x1b, 0xf3, 0x9c, 0x49, 0xe3, 0x19, - 0x31, 0x43, 0x15, 0x31, 0x96, 0x1b, 0xdc, 0x0a, 0x9d, 0xca, 0x8f, 0x90, - 0x1a, 0xe2, 0x8d, 0xcf, 0x6f, 0x19, 0x3a, 0x88, 0xa0, 0x2e, 0xdd, 0x10, - 0x85, 0x59, 0x0d, 0x6b, 0x83, 0x62, 0xbc, 0xf2, 0x68, 0x1b, 0x37, 0x32, - 0x54, 0x36, 0x3b, 0xb6, 0x20, 0xaf, 0x76, 0x84, 0x01, 0x2d, 0xc6, 0x30, - 0xad, 0x5b, 0xac, 0xfb, 0x24, 0xcc, 0x15, 0x30, 0xf1, 0xf6, 0xe5, 0xf2, - 0x49, 0x2a, 0x11, 0xab, 0xf0, 0x99, 0x57, 0x3b, 0x92, 0x40, 0x7a, 0xcf, - 0xf1, 0xb3, 0x8c, 0x77, 0xc1, 0xf5, 0x59, 0x94, 0x59, 0x7b, 0xf7, 0x87, - 0x2f, 0x03, 0x07, 0xb5, 0x29, 0x12, 0x5e, 0x18, 0x8d, 0x0b, 0x49, 0x38, - 0x90, 0x6f, 0x3c, 0xa9, 0x6a, 0x97, 0xe9, 0xa3, 0x7b, 0x93, 0x62, 0x1f, - 0x09, 0xbe, 0x14, 0x82, 0x2d, 0x3f, 0x3f, 0x89, 0xe8, 0x21, 0x1b, 0xca, - 0x92, 0x6d, 0x62, 0xc1, 0xd6, 0xab, 0x21, 0x35, 0x84, 0x85, 0xec, 0xab, - 0x80, 0xf2, 0xaa, 0xd8, 0xbb, 0x4f, 0xc6, 0x07, 0xae, 0x0d, 0xcd, 0xb2, - 0x83, 0xe2, 0xb9, 0x06, 0x6b, 0x46, 0xb5, 0x97, 0x44, 0x8f, 0x0e, 0x2a, - 0x82, 0x3d, 0xe3, 0x3a, 0xd5, 0x42, 0x79, 0x50, 0xca, 0x51, 0x5a, 0xe6, - 0x73, 0x65, 0xa0, 0xe4, 0xa9, 0x66, 0x8e, 0xcb, 0xe5, 0x9c, 0x64, 0xdf, - 0x45, 0x39, 0x0c, 0xd9, 0x5c, 0x75, 0x6d, 0x2e, 0x4e, 0xa3, 0x4f, 0x44, - 0xd7, 0x29, 0x6d, 0x85, 0xd4, 0x33, 0x0a, 0x0f, 0xcf, 0x04, 0xc4, 0x5a, - 0xa4, 0x11, 0xbb, 0x7a, 0x69, 0x5b, 0xab, 0x4c, 0x09, 0x77, 0xf5, 0x95, - 0xa2, 0x65, 0xa2, 0xe3, 0x71, 0x56, 0x63, 0x03, 0xa5, 0x6c, 0x3a, 0xf9, - 0xf9, 0x72, 0xfc, 0xd0, 0x71, 0x9f, 0xba, 0x54, 0x83, 0x80, 0xc7, 0x1d, - 0x87, 0xe0, 0xb6, 0x64, 0x06, 0x6c, 0x64, 0x05, 0x04, 0x6b, 0x32, 0x6d, - 0xf5, 0xa1, 0x87, 0x54, 0x09, 0xb7, 0xf1, 0x6c, 0xd4, 0xd6, 0x9f, 0x8d, - 0xda, 0xf2, 0x6c, 0x54, 0x83, 0xba, 0x76, 0xba, 0xe9, 0x36, 0xe8, 0x96, - 0x87, 0x8b, 0xb6, 0xbc, 0x68, 0x19, 0xb0, 0xb3, 0x06, 0x63, 0x63, 0xf3, - 0xd3, 0x2b, 0xf4, 0xe2, 0xcc, 0x20, 0xcc, 0x29, 0x4e, 0x75, 0x0e, 0x0a, - 0x6b, 0x98, 0x61, 0x73, 0x7d, 0xd5, 0x69, 0x30, 0x16, 0x66, 0x85, 0x8a, - 0xfe, 0xf4, 0x34, 0x31, 0x4e, 0x96, 0x00, 0x65, 0x98, 0x4e, 0x7c, 0x6d, - 0x54, 0x19, 0x04, 0xc2, 0xea, 0x1e, 0x52, 0x79, 0x07, 0xcc, 0xd0, 0x5d, - 0xda, 0xea, 0x1a, 0x4e, 0x71, 0xbc, 0x11, 0x14, 0xbd, 0x6c, 0x3a, 0x01, - 0xb2, 0x75, 0x27, 0x40, 0x1c, 0x67, 0x34, 0x6a, 0x25, 0x83, 0x66, 0x92, - 0x41, 0xf5, 0x9b, 0xd5, 0x3b, 0x08, 0xfc, 0x0a, 0xbd, 0x62, 0xf4, 0x1e, - 0x86, 0xa8, 0x96, 0x81, 0xc3, 0xa6, 0x21, 0x7a, 0x7a, 0x74, 0x39, 0x7b, - 0xbc, 0xba, 0x3c, 0xa7, 0x12, 0x8f, 0xcd, 0xc4, 0xfc, 0x0f, 0x25, 0xee, - 0xc4, 0x97, 0x8b, 0x3e, 0x08, 0x28, 0x55, 0x3e, 0x68, 0x14, 0xc5, 0x64, - 0xf1, 0xd0, 0x07, 0xe7, 0x84, 0xd6, 0x0c, 0xc3, 0x88, 0x67, 0xa7, 0x1c, - 0xc5, 0xc8, 0x36, 0xe4, 0x64, 0x3d, 0xa8, 0xea, 0xa7, 0xd0, 0x1a, 0x15, - 0xa0, 0xb3, 0x63, 0x0a, 0xd3, 0x8f, 0x1d, 0x5b, 0xd2, 0x3a, 0xb4, 0xd1, - 0x71, 0x9f, 0xcf, 0x9e, 0x04, 0xa7, 0x00, 0xb5, 0xe1, 0x11, 0xf1, 0xfa, - 0xc2, 0x43, 0x28, 0xb3, 0x3d, 0xf3, 0xc3, 0x8b, 0x13, 0xec, 0x10, 0x85, - 0x9c, 0x75, 0x9d, 0xdd, 0x30, 0x26, 0x6e, 0x7b, 0xcb, 0x4d, 0xa1, 0xf7, - 0xae, 0xbd, 0x81, 0xc2, 0x38, 0x0e, 0xf2, 0x93, 0x8e, 0xcc, 0x2a, 0xf3, - 0x56, 0xc9, 0xf8, 0x0a, 0x9c, 0x4d, 0x65, 0xa6, 0x9a, 0x3b, 0x87, 0xdd, - 0x57, 0x13, 0x95, 0x69, 0xca, 0xe6, 0x93, 0x36, 0x54, 0x8a, 0x49, 0x82, - 0x94, 0x69, 0x90, 0x64, 0x21, 0x0d, 0xd7, 0x1e, 0xa6, 0x17, 0x7d, 0xe3, - 0x20, 0x50, 0xfe, 0x36, 0x86, 0xdd, 0x9e, 0xfc, 0xa4, 0x8d, 0xd0, 0x90, - 0x33, 0xf8, 0x79, 0xec, 0x0e, 0xd7, 0x44, 0xfc, 0xea, 0x21, 0xa8, 0x61, - 0x00, 0xa9, 0x2d, 0x20, 0x84, 0x2f, 0x74, 0xb6, 0x36, 0x4b, 0x5e, 0xd8, - 0xea, 0x4b, 0x28, 0x06, 0xdf, 0xfa, 0x27, 0x27, 0xb7, 0xfe, 0x81, 0xc9, - 0x4d, 0x8f, 0x57, 0x34, 0xa4, 0x22, 0x95, 0x2c, 0x11, 0x25, 0xf3, 0xdd, - 0x7d, 0x5c, 0x09, 0x56, 0x5c, 0x4f, 0x78, 0x6e, 0xca, 0x82, 0x92, 0x43, - 0x5a, 0xa2, 0x3e, 0xb6, 0x7f, 0x77, 0x53, 0x37, 0xc3, 0x47, 0x62, 0xb7, - 0x21, 0x4a, 0x5a, 0x55, 0x61, 0xf6, 0x4e, 0x81, 0x22, 0xe3, 0xa3, 0x05, - 0xdb, 0x90, 0x47, 0xe3, 0x1c, 0x27, 0x08, 0xe7, 0x3f, 0x34, 0xa7, 0x36, - 0x32, 0x5f, 0xdf, 0x01, 0xee, 0x0b, 0xf9, 0x94, 0x41, 0x84, 0xcf, 0x67, - 0x9c, 0x78, 0x6d, 0x26, 0x38, 0x63, 0x0d, 0xfd, 0xa6, 0x3f, 0x3d, 0xb1, - 0xee, 0x78, 0x06, 0x40, 0xde, 0x9e, 0x7a, 0x7a, 0xc3, 0xe0, 0xd0, 0x63, - 0xc4, 0xf4, 0x12, 0xc2, 0x41, 0xe7, 0x86, 0xd6, 0xf4, 0xb7, 0x0e, 0x3d, - 0xa6, 0x7b, 0xdc, 0x81, 0x75, 0x84, 0x04, 0x57, 0x25, 0x58, 0x32, 0x40, - 0x19, 0x7a, 0x8c, 0xc0, 0x25, 0x7d, 0xae, 0x34, 0xe5, 0x46, 0x8e, 0x1b, - 0x70, 0xe7, 0x55, 0x30, 0x17, 0x84, 0xcf, 0x5c, 0x8e, 0x3f, 0xbb, 0x65, - 0xf8, 0x93, 0xeb, 0xf0, 0xa7, 0x26, 0xb5, 0xa7, 0x0c, 0x0e, 0xa7, 0xcf, - 0xc1, 0xaf, 0xed, 0x99, 0xc9, 0x4a, 0x1d, 0x34, 0xef, 0x3c, 0x4d, 0x4f, - 0xa1, 0x82, 0x4e, 0x7a, 0x61, 0xc5, 0x08, 0xc5, 0x6d, 0x6a, 0xe1, 0xee, - 0x5f, 0x04, 0x3d, 0x8d, 0x83, 0x1e, 0x20, 0x0a, 0x02, 0xbe, 0x0c, 0xca, - 0x8f, 0xbe, 0xa5, 0x1e, 0xdd, 0x77, 0x18, 0xf5, 0x6a, 0x17, 0x8e, 0x95, - 0xe6, 0xc8, 0x2a, 0x19, 0xf9, 0xb2, 0x9c, 0xc1, 0x74, 0x45, 0x90, 0x35, - 0xbf, 0x1a, 0x1f, 0xa8, 0x68, 0xa8, 0xfc, 0x26, 0x52, 0x10, 0xae, 0xb8, - 0x1b, 0x52, 0x2e, 0xd4, 0x30, 0x9f, 0x79, 0x53, 0x61, 0x7b, 0xe6, 0x63, - 0xec, 0x8e, 0xe1, 0x43, 0x4f, 0x92, 0x35, 0x08, 0x1b, 0xba, 0x14, 0x81, - 0x19, 0x66, 0xa5, 0x89, 0xa6, 0x42, 0xf6, 0x5b, 0x43, 0x7b, 0x87, 0x14, - 0x21, 0x2b, 0xd8, 0x5e, 0x6f, 0xe8, 0xa0, 0x70, 0x76, 0x11, 0x75, 0x10, - 0xa9, 0x90, 0x0e, 0xa8, 0xa8, 0x4e, 0xa4, 0x78, 0x46, 0x15, 0x35, 0x3f, - 0xfc, 0x14, 0x65, 0x38, 0x05, 0x30, 0x83, 0x3c, 0x4b, 0x5b, 0x59, 0x03, - 0xb0, 0xc6, 0x1b, 0xca, 0xf2, 0x1b, 0xc1, 0xa8, 0xc9, 0x54, 0x0d, 0x34, - 0xf5, 0xb8, 0x27, 0x22, 0x7d, 0x63, 0xb1, 0x29, 0xe0, 0x3e, 0xff, 0x0a, - 0xc0, 0xdd, 0x79, 0x79, 0xf4, 0x20, 0xc6, 0x5c, 0x83, 0xb9, 0xc1, 0x32, - 0x2c, 0x5b, 0xd6, 0xda, 0x5e, 0x61, 0x64, 0x63, 0xf5, 0x82, 0x8e, 0xd7, - 0x91, 0x1b, 0x86, 0xf1, 0xa6, 0x5b, 0x7a, 0x5b, 0xdc, 0x6e, 0xd9, 0xf2, - 0x72, 0x8b, 0xc3, 0x22, 0x00, 0xbb, 0xbb, 0x4c, 0x9c, 0xb1, 0x97, 0xa6, - 0x82, 0x06, 0xb8, 0x9c, 0x1e, 0x71, 0x4b, 0x7d, 0xa3, 0xbc, 0x6b, 0x53, - 0x83, 0x1e, 0x1f, 0x5c, 0x7a, 0x18, 0x7b, 0x9e, 0xa6, 0xdc, 0xc0, 0x57, - 0x32, 0x7d, 0x43, 0x28, 0x9b, 0xc1, 0x89, 0xee, 0xdd, 0x4a, 0x2e, 0x88, - 0x4f, 0x47, 0x74, 0xbe, 0x34, 0x0f, 0x51, 0xfc, 0xed, 0x40, 0xc9, 0xf4, - 0x7c, 0x8f, 0xa0, 0x6e, 0xac, 0x11, 0x50, 0xaa, 0x95, 0x7c, 0xff, 0x3c, - 0x30, 0x79, 0x3d, 0xa6, 0xcb, 0x0e, 0xd3, 0x02, 0x55, 0xdc, 0x35, 0xd0, - 0x9a, 0x2a, 0x05, 0x4b, 0x26, 0x6e, 0x27, 0x9f, 0xd1, 0x71, 0xc6, 0x33, - 0xa1, 0x90, 0x93, 0x7a, 0xd5, 0xf8, 0x1a, 0xb1, 0xf4, 0xf4, 0xbe, 0x4d, - 0xcb, 0xec, 0xe6, 0xb6, 0xcd, 0xe8, 0x30, 0xb2, 0xde, 0x40, 0xc6, 0xea, - 0x84, 0xb2, 0xf7, 0xda, 0x15, 0xa1, 0x8e, 0x5b, 0x02, 0xf7, 0x5e, 0x54, - 0x4e, 0x7b, 0xaf, 0xeb, 0x22, 0x4e, 0x92, 0x29, 0x32, 0x88, 0x29, 0x69, - 0xe4, 0xd9, 0x2b, 0x47, 0x0c, 0xda, 0x60, 0x14, 0x81, 0xbb, 0xba, 0x94, - 0xa2, 0x18, 0x64, 0x80, 0x87, 0x6c, 0x94, 0x9b, 0x78, 0xb5, 0x32, 0xe0, - 0x6f, 0x06, 0xf9, 0x55, 0xcc, 0xb3, 0xd0, 0x8e, 0x89, 0x3b, 0x10, 0xa2, - 0xe4, 0x82, 0x49, 0x83, 0x58, 0x9e, 0x67, 0x0d, 0x88, 0xba, 0xad, 0x19, - 0x46, 0x0b, 0xc9, 0xd6, 0x5a, 0x3a, 0xe8, 0x8e, 0xbf, 0x1d, 0x2b, 0xe0, - 0x77, 0xe8, 0x76, 0x90, 0x4e, 0xd0, 0xcf, 0x99, 0x00, 0x49, 0xfd, 0x8e, - 0x13, 0x4a, 0xfe, 0xcb, 0x23, 0xd8, 0x8e, 0x64, 0xc9, 0x89, 0xb3, 0x15, - 0x6c, 0x26, 0xe2, 0x70, 0x3a, 0x5d, 0xa2, 0xaf, 0x4d, 0xe2, 0x18, 0x3b, - 0x9a, 0x7b, 0x8c, 0x5a, 0x30, 0x42, 0x10, 0xac, 0xf8, 0xcd, 0x54, 0x3e, - 0x85, 0xa9, 0x1a, 0x9c, 0xba, 0x89, 0x7e, 0xba, 0x28, 0x56, 0xe6, 0x62, - 0xba, 0xe8, 0x64, 0x1d, 0x30, 0xaa, 0x51, 0x3a, 0xe4, 0x1c, 0x29, 0x25, - 0x56, 0xae, 0x14, 0xcb, 0x6d, 0x6a, 0x43, 0xd9, 0x80, 0xa4, 0x48, 0xae, - 0xa1, 0xdd, 0x3a, 0xb1, 0x12, 0x10, 0x87, 0xaa, 0xad, 0x7c, 0x30, 0x00, - 0x4c, 0x6d, 0x63, 0x02, 0x93, 0x93, 0xb5, 0xc1, 0x37, 0x80, 0x7c, 0x59, - 0xde, 0x1c, 0x71, 0xd1, 0x35, 0x8d, 0xaa, 0x24, 0x8d, 0x34, 0xa9, 0xc0, - 0xad, 0xc1, 0x17, 0x0c, 0x16, 0x35, 0x1b, 0xd3, 0xa4, 0x46, 0xe2, 0xa8, - 0xf4, 0xf8, 0x4d, 0x48, 0xbf, 0x64, 0x75, 0x4c, 0x4b, 0x67, 0x25, 0x3b, - 0x95, 0x54, 0x87, 0x0a, 0x02, 0xca, 0x6b, 0xc3, 0x6f, 0xa0, 0x47, 0x7a, - 0x78, 0xa4, 0x87, 0x13, 0x06, 0xdc, 0x76, 0xea, 0x1a, 0x69, 0x50, 0x45, - 0xdd, 0xf3, 0x00, 0x28, 0x88, 0x37, 0xa1, 0x3e, 0x18, 0x6f, 0xed, 0x3a, - 0x92, 0x5f, 0x9a, 0x9c, 0xbb, 0xa3, 0x17, 0xbc, 0xd4, 0xc0, 0xfc, 0xd9, - 0xf9, 0xf0, 0xa4, 0x77, 0xe4, 0xb7, 0x97, 0x56, 0x40, 0xba, 0x1f, 0xec, - 0x88, 0x1e, 0xa9, 0x8f, 0x79, 0x7b, 0x8d, 0xb2, 0x1b, 0xc5, 0x1f, 0x78, - 0xe5, 0x9a, 0x21, 0x5e, 0x3c, 0x75, 0xa4, 0x65, 0xc0, 0x4b, 0xd2, 0x6f, - 0x83, 0x43, 0x8f, 0xe9, 0xce, 0xd0, 0xcb, 0x6f, 0xe4, 0xb6, 0x7b, 0xff, - 0x73, 0xb3, 0x77, 0x2e, 0x9f, 0x02, 0x0c, 0x62, 0x70, 0x26, 0x61, 0x4f, - 0x4f, 0x65, 0xb4, 0x7a, 0x5e, 0x12, 0x58, 0xf1, 0xec, 0x7d, 0xac, 0x3b, - 0x44, 0xcf, 0x0d, 0xc1, 0xe2, 0xc1, 0x55, 0xd3, 0x6b, 0x57, 0x8f, 0x7f, - 0xf1, 0xa6, 0x95, 0x23, 0xcf, 0xdc, 0xac, 0xcb, 0x8e, 0x9b, 0xde, 0xb2, - 0x6b, 0xe8, 0x17, 0x8e, 0x85, 0x16, 0x8a, 0x63, 0x1e, 0xb4, 0xcc, 0x36, - 0x18, 0xfe, 0xa4, 0x12, 0x64, 0xd3, 0x33, 0x61, 0xdb, 0xbc, 0x5c, 0xaf, - 0x68, 0x0a, 0xb3, 0x58, 0x67, 0xb3, 0x56, 0x3f, 0xb3, 0xd8, 0x47, 0x33, - 0xc5, 0x73, 0x0d, 0xb9, 0xa7, 0x85, 0x1d, 0x7d, 0xe1, 0xe2, 0x7b, 0xc9, - 0xf5, 0xf5, 0xa2, 0xa5, 0xf4, 0x72, 0x8d, 0x2e, 0xb5, 0x48, 0xc2, 0xb5, - 0x64, 0x33, 0x5b, 0x74, 0xce, 0xd5, 0xe1, 0x24, 0xc0, 0x79, 0x16, 0x44, - 0xe7, 0x3d, 0xb7, 0xb3, 0x41, 0x7d, 0xbe, 0x22, 0xe0, 0xc8, 0x0a, 0xa2, - 0x0f, 0x17, 0x8d, 0xd2, 0xf4, 0x6a, 0xe5, 0x05, 0xfd, 0x6d, 0x91, 0x4a, - 0xd2, 0x6d, 0xf9, 0xa9, 0x30, 0x34, 0xfe, 0x2d, 0x8f, 0x47, 0x04, 0xa2, - 0x14, 0x4a, 0xef, 0xfc, 0x6c, 0x0b, 0x8f, 0xa1, 0x3a, 0x4a, 0xcb, 0x28, - 0x6b, 0x5b, 0x4b, 0x0f, 0xe2, 0xa5, 0x9a, 0x22, 0xc1, 0x59, 0x40, 0x53, - 0x66, 0x50, 0x5b, 0x4f, 0x30, 0xf3, 0x36, 0x5f, 0x53, 0x80, 0x0c, 0xaa, - 0xc7, 0xe8, 0x8c, 0x8d, 0xa0, 0xe5, 0xbd, 0x8b, 0x55, 0x52, 0x98, 0x65, - 0xda, 0x59, 0x35, 0x3a, 0x10, 0xa7, 0xe3, 0x70, 0x76, 0x33, 0x94, 0xf5, - 0xf8, 0xe2, 0x27, 0x6a, 0x1d, 0x3d, 0x3c, 0xbd, 0xe6, 0x85, 0xcb, 0x0a, - 0x1e, 0x94, 0x0b, 0x80, 0x5a, 0x9b, 0x79, 0x90, 0xa1, 0xc1, 0x2d, 0x12, - 0x5b, 0xf4, 0xa2, 0xe8, 0x96, 0x7d, 0xc6, 0x10, 0xeb, 0x66, 0x89, 0xa6, - 0x6c, 0x8a, 0x6c, 0xf5, 0x05, 0x81, 0x11, 0x2b, 0x29, 0x16, 0x76, 0x7d, - 0x2e, 0xf6, 0x38, 0xec, 0xed, 0x8b, 0xa0, 0xdf, 0xfe, 0xd1, 0x28, 0x90, - 0xf0, 0xd9, 0x36, 0x3b, 0x11, 0x1e, 0x85, 0xb1, 0xb7, 0x16, 0x99, 0x89, - 0x82, 0xaa, 0xd1, 0x01, 0xdf, 0x4d, 0x83, 0xab, 0x8d, 0x97, 0x51, 0xd0, - 0x9d, 0x13, 0xe9, 0xc2, 0x17, 0x4a, 0x37, 0x28, 0xcd, 0x71, 0x53, 0x21, - 0x29, 0x7b, 0x77, 0xc4, 0x14, 0xf6, 0xa8, 0xca, 0x9d, 0x1f, 0xd6, 0x56, - 0x59, 0x6d, 0xed, 0xe6, 0x18, 0xc3, 0x2f, 0xd6, 0xfe, 0x7c, 0xa7, 0x65, - 0xcb, 0x4b, 0xb8, 0x0d, 0xde, 0x69, 0xa7, 0x0d, 0xd5, 0xaa, 0xdd, 0x2f, - 0xb5, 0x8f, 0x6d, 0xd2, 0x3d, 0xb6, 0xe9, 0xbd, 0x0a, 0x47, 0x53, 0xda, - 0xa6, 0x4f, 0xbf, 0x73, 0xd8, 0xc0, 0xf6, 0xa2, 0xd5, 0xf6, 0xc2, 0x31, - 0x1c, 0xe1, 0xa8, 0x55, 0x7b, 0xc3, 0x40, 0x48, 0x33, 0xaa, 0x9e, 0x00, - 0x68, 0xe8, 0x0d, 0x30, 0xe4, 0xe4, 0xbf, 0x6a, 0x1c, 0x5f, 0x87, 0xbe, - 0xeb, 0x92, 0x62, 0x96, 0x86, 0xbe, 0x7f, 0x92, 0xea, 0x1c, 0x73, 0x51, - 0x1c, 0xd4, 0x2d, 0x61, 0x86, 0xd1, 0x12, 0x73, 0x1d, 0xb2, 0xce, 0xf8, - 0x92, 0x80, 0xa3, 0x49, 0xb0, 0xf2, 0x95, 0x71, 0x10, 0x5c, 0x05, 0x7e, - 0x3d, 0x38, 0x20, 0xea, 0x18, 0x3a, 0x0a, 0x7c, 0xb5, 0x15, 0xef, 0x50, - 0x6e, 0xdd, 0xc9, 0xf7, 0x4d, 0x07, 0xdf, 0x0d, 0xd5, 0x30, 0xb3, 0x51, - 0xa4, 0x9e, 0xff, 0x0d, 0x5a, 0xf4, 0x9b, 0x89, 0xef, 0x6e, 0x1b, 0x71, - 0x55, 0x35, 0xa7, 0xdd, 0x06, 0x22, 0x09, 0x96, 0x52, 0x2b, 0xba, 0x75, - 0x44, 0xf4, 0x63, 0xee, 0xb5, 0xd6, 0x5c, 0xa2, 0xda, 0x41, 0xd3, 0x49, - 0x80, 0x41, 0xca, 0x25, 0x83, 0x17, 0x81, 0x0c, 0xc2, 0x91, 0xc4, 0x61, - 0x6f, 0xbd, 0x2b, 0xb2, 0xb1, 0x7b, 0xa1, 0xb5, 0xa3, 0xff, 0xe3, 0x59, - 0x5f, 0x52, 0xf4, 0x97, 0x07, 0x7e, 0x9b, 0x4c, 0xaf, 0xe2, 0xc8, 0xc7, - 0x26, 0x3d, 0xc6, 0x5b, 0xaa, 0x0e, 0xde, 0x42, 0x31, 0x70, 0x11, 0xc1, - 0x86, 0xd6, 0x56, 0x67, 0x33, 0xfa, 0xa0, 0x1f, 0x9b, 0x1d, 0xef, 0x82, - 0x1a, 0x83, 0x82, 0xda, 0x7b, 0x12, 0x3a, 0x8d, 0xb6, 0x55, 0x2b, 0x39, - 0x3b, 0x04, 0x55, 0x7b, 0xa8, 0xb4, 0xc6, 0x4a, 0x53, 0x83, 0xc2, 0xba, - 0xe4, 0x11, 0x84, 0x55, 0xa3, 0xbf, 0xa1, 0xf0, 0x8b, 0x77, 0xa7, 0xec, - 0x80, 0xee, 0x83, 0x6e, 0x73, 0xcc, 0x15, 0x76, 0x66, 0x97, 0x9c, 0x06, - 0xd3, 0xba, 0x9a, 0xdb, 0x1a, 0xdd, 0x24, 0x70, 0xc4, 0xca, 0x58, 0xb4, - 0x34, 0x72, 0x88, 0x66, 0xd8, 0x60, 0x5b, 0x2a, 0xcd, 0x9c, 0x42, 0x44, - 0x23, 0x89, 0xda, 0xad, 0x41, 0x1b, 0xd5, 0xe5, 0x5b, 0x55, 0xab, 0x11, - 0x68, 0xd5, 0x64, 0xbe, 0xea, 0x84, 0xaf, 0x41, 0x2d, 0x93, 0xd7, 0xa2, - 0xda, 0xc6, 0x9d, 0xf6, 0x00, 0xe9, 0x2e, 0xa5, 0xca, 0xdb, 0x5a, 0x72, - 0x9b, 0xbc, 0xe6, 0x91, 0x35, 0xc7, 0xea, 0x7a, 0x81, 0x59, 0x07, 0xa5, - 0x4b, 0x3f, 0x79, 0x29, 0x6b, 0xa1, 0xf0, 0x61, 0xc5, 0xb9, 0x9a, 0x6d, - 0xdd, 0xa3, 0x4e, 0xf5, 0xe6, 0x84, 0x41, 0xe6, 0x57, 0x6b, 0xcb, 0xb5, - 0x7b, 0x55, 0x78, 0x5b, 0x39, 0x1c, 0xfc, 0xbb, 0x5f, 0xa4, 0x2b, 0xc3, - 0x88, 0xdc, 0x70, 0xb8, 0xd2, 0x10, 0x94, 0xc4, 0xb0, 0x6c, 0x75, 0xfd, - 0x6a, 0x4b, 0x4d, 0x20, 0xa6, 0x6f, 0xfc, 0xf2, 0x42, 0x7b, 0x33, 0x0d, - 0x20, 0x9f, 0xf4, 0xd3, 0x08, 0xf9, 0x99, 0x6e, 0xf2, 0x2f, 0x3d, 0xc4, - 0x9b, 0x8e, 0xfb, 0x3b, 0x7a, 0x75, 0xb6, 0x28, 0x7f, 0x95, 0xc4, 0xbc, - 0x5e, 0xf2, 0x65, 0x7d, 0x12, 0xf0, 0x1f, 0xd4, 0xa7, 0x77, 0xfa, 0xa4, - 0x53, 0x64, 0xa6, 0xea, 0x90, 0x50, 0xc5, 0x66, 0xae, 0x6a, 0xad, 0x5d, - 0xa9, 0x85, 0x65, 0xd3, 0xe9, 0xa1, 0x6a, 0x4b, 0xc6, 0xd2, 0x63, 0x45, - 0xc8, 0xfb, 0x0f, 0x01, 0x6b, 0xda, 0xbf, 0xc3, 0x1c, 0x11, 0x48, 0xc7, - 0xaf, 0x36, 0x1d, 0xc0, 0xde, 0xa8, 0x43, 0xdf, 0xc1, 0xeb, 0xa2, 0x42, - 0x4e, 0xca, 0xc9, 0x24, 0x0f, 0x1d, 0x33, 0xa1, 0x4a, 0x9c, 0x1f, 0x88, - 0x78, 0xbe, 0x3d, 0x05, 0x32, 0xb1, 0x36, 0xb2, 0x96, 0x7b, 0x07, 0xf3, - 0x7c, 0x85, 0x2c, 0x86, 0x2f, 0xf7, 0xcf, 0x7f, 0xdd, 0x3f, 0xe9, 0xae, - 0x1c, 0xcc, 0x9f, 0xd0, 0xff, 0xd5, 0xe0, 0xaa, 0x3c, 0x6a, 0x6f, 0x51, - 0x35, 0x7b, 0xd6, 0x4b, 0x7e, 0xbb, 0x92, 0xb5, 0x53, 0x6a, 0x06, 0xd2, - 0x11, 0xae, 0xaa, 0x23, 0x02, 0xf5, 0xd2, 0x7d, 0xa9, 0x3a, 0xf4, 0x98, - 0xee, 0x43, 0xdf, 0xbb, 0x2b, 0x57, 0x62, 0x35, 0x25, 0xf5, 0x71, 0x54, - 0x30, 0x11, 0xd6, 0x74, 0x35, 0xd5, 0x5c, 0x38, 0xde, 0xba, 0x90, 0x5b, - 0x1f, 0x78, 0x97, 0x9f, 0x9d, 0x5a, 0xf4, 0x1b, 0xb1, 0xab, 0x92, 0xf7, - 0xaf, 0x5a, 0x56, 0xc6, 0xdf, 0x69, 0xc7, 0xae, 0xd5, 0x0a, 0x70, 0xff, - 0xb9, 0x6c, 0x15, 0x78, 0x82, 0x9c, 0xb5, 0x41, 0xac, 0x27, 0x0c, 0xc9, - 0xef, 0xc0, 0x6f, 0x3b, 0x0c, 0xaa, 0xd9, 0x41, 0x8d, 0x6f, 0x78, 0x29, - 0xcc, 0xec, 0xa7, 0x76, 0xe6, 0x8e, 0x68, 0x9d, 0x7e, 0x42, 0xd4, 0x65, - 0x68, 0xab, 0x45, 0xc5, 0x54, 0x20, 0xf7, 0x70, 0xa4, 0xef, 0x19, 0x2f, - 0xff, 0x36, 0xb3, 0x3e, 0x97, 0xed, 0xb6, 0xc8, 0x37, 0x26, 0xdb, 0x8a, - 0x17, 0xd7, 0xec, 0xa9, 0xf0, 0x1f, 0x9a, 0xdc, 0xbe, 0x55, 0x9e, 0xe8, - 0x75, 0xc4, 0xcc, 0x8f, 0xd2, 0x7d, 0x4c, 0xcc, 0xb6, 0x15, 0x14, 0x53, - 0xd6, 0x0c, 0x5d, 0xa9, 0x57, 0xa7, 0xa1, 0x97, 0xee, 0x1f, 0x83, 0xf8, - 0x72, 0x51, 0xdb, 0xf9, 0xe2, 0x7b, 0xd5, 0x1c, 0x40, 0xab, 0x66, 0xa7, - 0x9a, 0x23, 0x4a, 0xd5, 0x29, 0x5e, 0x83, 0x7d, 0x9c, 0xa5, 0x64, 0x62, - 0x6a, 0xac, 0x63, 0x51, 0x1f, 0xd3, 0xe3, 0x02, 0x01, 0x69, 0xad, 0xfd, - 0x71, 0x0d, 0x36, 0x39, 0x09, 0x14, 0x7a, 0x51, 0x03, 0x5a, 0xe4, 0x6f, - 0x8a, 0x99, 0xae, 0xa6, 0xe0, 0xbd, 0xc1, 0xa1, 0xc7, 0xf0, 0x18, 0xbc, - 0xfe, 0xaa, 0x53, 0x1b, 0x86, 0x94, 0x6e, 0x0a, 0x00, 0xaa, 0xf8, 0x1a, - 0x79, 0x4b, 0xc5, 0xe0, 0x28, 0xcb, 0x57, 0x67, 0xfb, 0x4a, 0x5b, 0x44, - 0x1f, 0x8c, 0xe5, 0x5a, 0x2e, 0x3c, 0x59, 0x6a, 0xf8, 0x47, 0x88, 0x7c, - 0x5d, 0x40, 0x7d, 0xf0, 0x20, 0x7f, 0x96, 0x72, 0x72, 0x3c, 0xc9, 0xc9, - 0xd0, 0x60, 0xef, 0x93, 0xcb, 0x7a, 0x83, 0x71, 0x90, 0xca, 0xd1, 0xd4, - 0xd9, 0x76, 0x1f, 0xdb, 0xe4, 0x7a, 0x0f, 0x54, 0x20, 0x30, 0x2a, 0xb1, - 0x53, 0x7a, 0x63, 0x84, 0x3a, 0x54, 0xe1, 0x03, 0x59, 0x0e, 0x5f, 0x1d, - 0xec, 0x7c, 0xbc, 0xa6, 0xcc, 0xde, 0x30, 0x3f, 0x92, 0xf5, 0x20, 0x32, - 0x3d, 0x8b, 0x2f, 0x59, 0xed, 0xe2, 0x64, 0x4d, 0x62, 0xdb, 0x14, 0xa6, - 0xe3, 0x2e, 0x06, 0x25, 0x97, 0x33, 0x51, 0x7c, 0xea, 0xa2, 0xc3, 0x6f, - 0xd5, 0xb5, 0xd9, 0xd2, 0xf6, 0x86, 0x9a, 0xe5, 0xcd, 0x2f, 0x87, 0x7d, - 0xe3, 0x76, 0x52, 0xa9, 0x8f, 0xbf, 0x69, 0xaf, 0xa6, 0xe6, 0x50, 0xa1, - 0x57, 0xd9, 0xae, 0x09, 0x0f, 0x05, 0x53, 0x2b, 0x34, 0x55, 0x20, 0x3c, - 0x5c, 0x02, 0x42, 0x2e, 0x8f, 0x87, 0x3a, 0x30, 0x57, 0x12, 0x55, 0x5c, - 0x0b, 0x43, 0x53, 0x42, 0x48, 0x7e, 0xea, 0x7e, 0x83, 0xb2, 0x79, 0x83, - 0x31, 0x81, 0xee, 0x94, 0xbf, 0xd8, 0x6b, 0x15, 0x89, 0x58, 0x1a, 0x71, - 0x3f, 0x0c, 0x45, 0x53, 0x34, 0x2d, 0xed, 0xfa, 0xbc, 0x4e, 0xe8, 0x0b, - 0xef, 0xba, 0x56, 0xd7, 0xb0, 0x4c, 0x7e, 0x40, 0x49, 0x49, 0xea, 0xbe, - 0x0e, 0x19, 0xc3, 0x8a, 0xc9, 0x76, 0x2f, 0x77, 0x24, 0x90, 0x2b, 0xe2, - 0xda, 0xaf, 0x7a, 0xea, 0x9b, 0x45, 0x7a, 0x73, 0x7f, 0x6a, 0x08, 0xc3, - 0xd3, 0x7e, 0xbd, 0x8f, 0xd4, 0xac, 0x68, 0x04, 0x6f, 0x04, 0x3a, 0xe6, - 0xc1, 0x05, 0xc3, 0x44, 0xff, 0xc3, 0xb9, 0x86, 0x3d, 0xdf, 0xe9, 0x06, - 0xc6, 0x30, 0xd5, 0x88, 0x5d, 0x87, 0x2e, 0xec, 0x9e, 0xe5, 0xeb, 0x8b, - 0x20, 0x6c, 0x53, 0xfc, 0xa3, 0xc7, 0xa3, 0xd2, 0x75, 0x2a, 0xf2, 0xee, - 0xc4, 0xd6, 0x39, 0xe9, 0x0a, 0xb9, 0x13, 0x55, 0x11, 0xe7, 0xbd, 0xf1, - 0x46, 0xc4, 0x43, 0xb9, 0x75, 0xf8, 0xa6, 0xee, 0x5f, 0xa4, 0x62, 0xd1, - 0xb9, 0xaf, 0xfd, 0xba, 0x2e, 0xc3, 0x7c, 0x21, 0x51, 0x96, 0xae, 0x10, - 0xdd, 0x31, 0x2a, 0x10, 0x4a, 0xcc, 0xe5, 0xeb, 0x68, 0xa3, 0x8d, 0xca, - 0xaa, 0x34, 0x61, 0x13, 0xe6, 0xe1, 0x20, 0x14, 0x42, 0xaf, 0xb2, 0x1a, - 0x61, 0x77, 0x18, 0xb1, 0x8d, 0x16, 0x55, 0xbf, 0x5d, 0x99, 0xd5, 0x4e, - 0x3f, 0xa8, 0x28, 0x39, 0x56, 0xd6, 0x51, 0xde, 0x18, 0x23, 0x21, 0x3f, - 0xf6, 0x3c, 0xd3, 0x2c, 0x48, 0x3f, 0xae, 0xad, 0x7a, 0x99, 0xff, 0x43, - 0x66, 0x16, 0xf3, 0x81, 0xa5, 0x20, 0x18, 0xf9, 0xed, 0xa6, 0xc3, 0x3d, - 0x81, 0x59, 0xc2, 0x9b, 0xe9, 0x5a, 0xc2, 0x8e, 0x25, 0x08, 0x06, 0xbf, - 0xdd, 0xc6, 0x19, 0xcd, 0xa7, 0xf5, 0x29, 0x0d, 0xe8, 0x4e, 0x28, 0x26, - 0x3e, 0xbf, 0xec, 0xf8, 0xa5, 0x9a, 0xe6, 0x64, 0xb4, 0x6b, 0xd7, 0xce, - 0x36, 0xf9, 0x93, 0x4a, 0xe2, 0x83, 0x60, 0x90, 0x9f, 0x3c, 0x86, 0x6e, - 0xf8, 0x4f, 0xfe, 0xa5, 0xe3, 0x89, 0x04, 0x33, 0xf8, 0x43, 0xb5, 0x2a, - 0x01, 0x69, 0xfd, 0xe0, 0x4e, 0xc0, 0x50, 0x7c, 0xd2, 0xb6, 0x30, 0xde, - 0x18, 0x87, 0x63, 0xb5, 0xd2, 0xa0, 0x90, 0x6c, 0x10, 0x88, 0xa6, 0xe5, - 0xe6, 0x8e, 0x4f, 0xad, 0x0b, 0x8e, 0x1b, 0xaf, 0xf0, 0x6e, 0xba, 0xc0, - 0xbb, 0xed, 0xd3, 0xcf, 0x92, 0x4d, 0x76, 0xfa, 0x69, 0xe3, 0x17, 0x46, - 0x16, 0x27, 0xf4, 0x69, 0xa6, 0x58, 0xb3, 0x98, 0xaa, 0xce, 0x19, 0x40, - 0x6c, 0x91, 0x9d, 0x7a, 0xe7, 0x1a, 0xb2, 0xd7, 0x9d, 0x32, 0xba, 0xf5, - 0xd9, 0xc7, 0x67, 0x54, 0x46, 0x58, 0x51, 0xba, 0x97, 0xa6, 0x55, 0x83, - 0xdd, 0x39, 0x65, 0x90, 0xf0, 0xef, 0xc4, 0xe7, 0xdb, 0xed, 0x23, 0xb7, - 0x5c, 0x04, 0x38, 0x41, 0x7b, 0x29, 0x76, 0xdf, 0xf6, 0xf9, 0xaa, 0x3d, - 0x5b, 0xe0, 0xf8, 0xee, 0xb9, 0x1f, 0xc3, 0x70, 0x08, 0x51, 0xb3, 0x04, - 0xcd, 0x6d, 0x74, 0x8c, 0x7c, 0xfa, 0x5b, 0x7f, 0xd4, 0x5d, 0xe6, 0x64, - 0xde, 0x43, 0x70, 0x6a, 0xda, 0x3b, 0xb7, 0x71, 0x29, 0x84, 0xb9, 0xac, - 0x32, 0x2a, 0x75, 0xc6, 0x3b, 0xd9, 0x77, 0x77, 0x7f, 0xd9, 0xed, 0xfe, - 0x45, 0xf0, 0x2b, 0x19, 0x95, 0xca, 0x09, 0x9c, 0x3e, 0x54, 0x35, 0x41, - 0x80, 0x35, 0xb4, 0xaf, 0x38, 0x04, 0xbf, 0xaf, 0xfd, 0xb3, 0x48, 0x24, - 0x19, 0x64, 0x4d, 0xdb, 0x21, 0x4f, 0x4d, 0x25, 0xc9, 0xc8, 0x40, 0x67, - 0xb0, 0xb1, 0x8f, 0x10, 0x1a, 0x4a, 0x02, 0x67, 0x43, 0x07, 0xa5, 0xcc, - 0xaf, 0x6a, 0x1f, 0x6b, 0xa7, 0xc2, 0x00, 0x54, 0xef, 0x92, 0x21, 0x96, - 0xad, 0xf7, 0xb5, 0xa5, 0xa7, 0xee, 0xb1, 0x76, 0xd1, 0xac, 0xdd, 0x54, - 0x35, 0x40, 0x62, 0xcc, 0x48, 0x4a, 0x37, 0x38, 0xac, 0x6b, 0x9e, 0x53, - 0x07, 0x41, 0x27, 0x3b, 0xf5, 0xa9, 0xe9, 0xa2, 0xc0, 0x8e, 0xaf, 0x44, - 0x18, 0x1c, 0xd4, 0x89, 0x1c, 0x33, 0xcb, 0x45, 0xcb, 0xab, 0x3c, 0xa8, - 0xbb, 0x43, 0xec, 0xba, 0x97, 0x97, 0x3e, 0x56, 0x91, 0x8e, 0x6f, 0xc3, - 0x9d, 0x92, 0x30, 0x92, 0xf4, 0x37, 0x73, 0x01, 0xb6, 0x17, 0x7b, 0x58, - 0x36, 0x7d, 0xe9, 0x49, 0x5a, 0xc3, 0x62, 0x23, 0x35, 0x9c, 0x9d, 0xc5, - 0xb1, 0x52, 0xe9, 0xf5, 0xfd, 0x39, 0xd9, 0x35, 0x7a, 0x50, 0xe9, 0x37, - 0x99, 0xc7, 0x7b, 0xdb, 0x36, 0xbe, 0x33, 0xd9, 0x03, 0x3a, 0x7a, 0x0d, - 0xf2, 0x20, 0x87, 0x43, 0x86, 0xdd, 0xba, 0xb7, 0x34, 0x49, 0xa1, 0x52, - 0xf3, 0x56, 0x3a, 0x30, 0x87, 0x6c, 0x27, 0x14, 0xc1, 0x3a, 0x28, 0xed, - 0xe0, 0x57, 0x2a, 0xb2, 0x55, 0x6f, 0x2f, 0x36, 0xa2, 0xdf, 0xf5, 0xef, - 0xdd, 0xbe, 0x3f, 0x30, 0x63, 0xd3, 0x52, 0xec, 0x14, 0x77, 0xe3, 0xcc, - 0xb5, 0xb9, 0x43, 0x78, 0x3d, 0x7b, 0xd6, 0xc3, 0xe9, 0xf7, 0x6d, 0x18, - 0x7d, 0x50, 0x0c, 0xf2, 0x0a, 0xc1, 0xec, 0x29, 0x41, 0x70, 0x5b, 0xb3, - 0xbf, 0x14, 0xae, 0x2d, 0x7d, 0x33, 0xd8, 0xbb, 0x83, 0xf4, 0xcb, 0x55, - 0xd8, 0xc9, 0xeb, 0xd4, 0x8e, 0x64, 0x39, 0x68, 0x2b, 0x72, 0xda, 0xf9, - 0xaa, 0x99, 0x5e, 0xb8, 0xa9, 0x3b, 0x53, 0x06, 0x79, 0x76, 0x67, 0xad, - 0xce, 0xfe, 0xac, 0xd5, 0x39, 0xb8, 0x0e, 0xf8, 0x66, 0xe6, 0x09, 0xbe, - 0x53, 0x47, 0xf8, 0xce, 0x3c, 0xa0, 0x77, 0x6a, 0xaf, 0x78, 0x8e, 0xda, - 0x41, 0x9c, 0xb9, 0x3b, 0x3b, 0x17, 0x8e, 0xf4, 0xe7, 0xa2, 0xfb, 0x38, - 0x27, 0xc6, 0xc8, 0xb7, 0x31, 0x9d, 0xb3, 0xbf, 0x07, 0xc9, 0xf5, 0xe2, - 0x3b, 0x38, 0xd2, 0xc4, 0xcb, 0x43, 0x4d, 0x2f, 0xa9, 0xe8, 0x28, 0xef, - 0xd7, 0x75, 0x99, 0xe0, 0x14, 0xb0, 0xb7, 0x47, 0x5b, 0x0e, 0xe2, 0x43, - 0xe2, 0x65, 0xd7, 0xc5, 0xe5, 0xcf, 0x29, 0xb9, 0x75, 0xaf, 0x21, 0x83, - 0xca, 0x48, 0x82, 0x42, 0x39, 0x40, 0x7e, 0x05, 0x14, 0x33, 0xab, 0x91, - 0xcf, 0xbc, 0xac, 0xf4, 0xb6, 0xe7, 0x59, 0xb5, 0xfb, 0x4e, 0x0a, 0x39, - 0x98, 0x6f, 0x4f, 0x7f, 0x04, 0x19, 0x31, 0x81, 0xfc, 0x7c, 0x91, 0x8c, - 0x69, 0xbe, 0x2d, 0xab, 0xaa, 0x6c, 0xbe, 0x77, 0xf5, 0x37, 0xb7, 0x3d, - 0xea, 0x4b, 0xde, 0xaa, 0x3f, 0x81, 0xd4, 0x63, 0x26, 0xd6, 0xbd, 0x23, - 0x4e, 0xea, 0xd3, 0x51, 0x0c, 0x95, 0xbb, 0x9a, 0xb7, 0x71, 0x36, 0x94, - 0x79, 0x12, 0x88, 0x0e, 0xe4, 0xf6, 0xed, 0x55, 0x75, 0x04, 0xfa, 0xf3, - 0xed, 0x8c, 0x5a, 0xaa, 0x76, 0x2f, 0x70, 0xa6, 0x1c, 0x43, 0x6c, 0xbf, - 0x06, 0xb4, 0x01, 0x0d, 0x5c, 0x61, 0x7f, 0x1b, 0xed, 0xfa, 0x7d, 0x40, - 0x4a, 0x83, 0xac, 0x70, 0x31, 0x10, 0x74, 0xc5, 0x74, 0x88, 0x08, 0xa8, - 0x5a, 0xbb, 0x52, 0xb4, 0x5c, 0x79, 0xed, 0xce, 0x00, 0xd6, 0x71, 0xd6, - 0xe7, 0xab, 0xd2, 0x24, 0xb7, 0xc2, 0x11, 0x93, 0xf9, 0x95, 0xb3, 0x24, - 0xee, 0x7a, 0xb4, 0xbc, 0x5e, 0xa4, 0x94, 0xcb, 0x38, 0x84, 0x9c, 0x08, - 0x0c, 0xcb, 0x03, 0xa6, 0xaf, 0x9a, 0x83, 0x41, 0x83, 0x58, 0x65, 0x54, - 0x1d, 0x16, 0x6d, 0x88, 0x46, 0x67, 0x03, 0x3f, 0x3c, 0x67, 0x61, 0x9a, - 0x1a, 0x39, 0xdd, 0x02, 0x8f, 0x22, 0x46, 0x06, 0x9b, 0x19, 0x77, 0x77, - 0x80, 0x99, 0x04, 0x73, 0xd5, 0x9d, 0x64, 0x26, 0x41, 0xa7, 0x15, 0xb6, - 0x99, 0xa8, 0x8e, 0x49, 0x19, 0xb4, 0xbd, 0x2c, 0xed, 0x57, 0x65, 0x75, - 0x65, 0xa8, 0xd2, 0x29, 0x28, 0x07, 0xd5, 0xbb, 0x30, 0x9e, 0xc2, 0xb8, - 0x8b, 0x62, 0xd3, 0xc3, 0xf1, 0xc6, 0x7e, 0xd4, 0xfa, 0xac, 0x5e, 0x70, - 0x6f, 0xbb, 0xda, 0xc4, 0x35, 0x75, 0x50, 0x38, 0xbf, 0xdf, 0x56, 0x87, - 0x1e, 0xd3, 0x7d, 0x60, 0x3b, 0xd9, 0xf4, 0x51, 0x37, 0x17, 0xdb, 0xd6, - 0x94, 0xce, 0x18, 0x5c, 0x16, 0x40, 0xc8, 0x4c, 0x8d, 0x9f, 0xc8, 0x58, - 0xf6, 0x6c, 0x10, 0x3b, 0xdc, 0x6a, 0x27, 0x72, 0xaf, 0x97, 0xf3, 0x5e, - 0x22, 0x4a, 0x7e, 0xe3, 0x3f, 0x65, 0xe5, 0x8f, 0x45, 0x84, 0x76, 0xb8, - 0xda, 0xa9, 0xe4, 0x15, 0xc3, 0xb1, 0x81, 0x92, 0x76, 0x1b, 0xed, 0x54, - 0x66, 0x87, 0xc4, 0xb7, 0x27, 0xef, 0xfc, 0x55, 0x9e, 0xb0, 0x6c, 0x00, - 0xc3, 0x4e, 0x95, 0xd6, 0xcc, 0x6a, 0xfa, 0xe3, 0xf4, 0xde, 0xa9, 0x51, - 0x5c, 0xf7, 0x35, 0xec, 0xfd, 0xba, 0xa6, 0x08, 0xb0, 0x6a, 0x86, 0x68, - 0x9d, 0x75, 0x1d, 0x32, 0x33, 0x4e, 0x68, 0x99, 0x07, 0xba, 0xa6, 0x1b, - 0x22, 0xcc, 0xd3, 0x74, 0x8e, 0x37, 0xae, 0x9e, 0x8d, 0x9a, 0xe4, 0x07, - 0x97, 0x15, 0x00, 0xa3, 0xca, 0x4c, 0xb3, 0x67, 0x97, 0x5a, 0x95, 0x67, - 0x56, 0xb9, 0xee, 0x11, 0x19, 0xba, 0xa9, 0x98, 0x73, 0xae, 0x50, 0x83, - 0x40, 0xc0, 0xf9, 0x9e, 0xa0, 0x74, 0x90, 0x4d, 0xaa, 0xcd, 0x8e, 0x3c, - 0xfb, 0x53, 0xed, 0x62, 0x02, 0xcc, 0x51, 0x51, 0x6d, 0x63, 0x22, 0xe6, - 0x40, 0x72, 0x57, 0x7f, 0x4a, 0x5f, 0xd1, 0xaa, 0x90, 0x25, 0x2f, 0x67, - 0x93, 0x60, 0x58, 0x50, 0x58, 0x78, 0x8a, 0x8e, 0xa1, 0xc2, 0x8e, 0xd0, - 0xdf, 0x18, 0x2c, 0xf4, 0xd0, 0xd0, 0x5b, 0x51, 0x8e, 0x0a, 0xcf, 0x01, - 0x00, 0xca, 0xbf, 0xb8, 0x33, 0x46, 0x2c, 0x59, 0xc2, 0x82, 0x52, 0x79, - 0x47, 0x51, 0xb6, 0xb2, 0xab, 0x18, 0xec, 0x3e, 0x29, 0x29, 0x7c, 0x8f, - 0x2d, 0x03, 0x74, 0x09, 0xe8, 0x34, 0x50, 0x40, 0x5a, 0xff, 0x71, 0x9c, - 0x35, 0x84, 0xaf, 0xab, 0xa3, 0xed, 0x8e, 0xd0, 0xfd, 0x0c, 0x22, 0xd0, - 0x93, 0xbd, 0xa4, 0x01, 0x5a, 0xb5, 0xd5, 0x4c, 0x9c, 0x8a, 0x20, 0x44, - 0x54, 0x03, 0x97, 0x00, 0x84, 0xb4, 0xe7, 0xdc, 0xd4, 0xa0, 0xde, 0x1c, - 0x16, 0xa6, 0xa7, 0xa5, 0x0c, 0xe9, 0xab, 0x0c, 0x5d, 0x70, 0xbb, 0xf1, - 0xb6, 0xcb, 0x8d, 0x14, 0x5c, 0xe3, 0xe4, 0x6e, 0x33, 0xf9, 0xaa, 0xbe, - 0x9d, 0xf8, 0xd0, 0x4c, 0xf0, 0x1c, 0xb3, 0x24, 0x3c, 0x8b, 0xe8, 0x48, - 0x96, 0x45, 0x43, 0x8d, 0x63, 0xaf, 0x56, 0x3b, 0xa1, 0x4d, 0x60, 0xc7, - 0x32, 0x02, 0x72, 0xac, 0x09, 0xc4, 0xaa, 0x92, 0xc0, 0xdb, 0x20, 0x87, - 0xd0, 0x67, 0x27, 0xbf, 0x0c, 0x22, 0xed, 0x75, 0xbc, 0xc7, 0xa8, 0x0c, - 0x80, 0xf3, 0xed, 0xd5, 0x8f, 0x5a, 0xcb, 0x52, 0x1d, 0xfd, 0x29, 0xbe, - 0xa4, 0xbd, 0xe1, 0x7c, 0xa1, 0x5f, 0x3b, 0x3d, 0x25, 0x5b, 0x2c, 0x07, - 0x0c, 0xf2, 0xa6, 0x85, 0xe1, 0x33, 0x33, 0x12, 0x27, 0x3f, 0x1a, 0x08, - 0x9d, 0x15, 0xf5, 0xc9, 0xf3, 0x74, 0x0d, 0xe5, 0xfe, 0xa0, 0x3e, 0x4f, - 0x8a, 0xf3, 0x0c, 0x6a, 0x27, 0x17, 0x44, 0x67, 0x0f, 0xef, 0xf9, 0xae, - 0x72, 0xd5, 0x93, 0x63, 0x15, 0x7c, 0x89, 0x66, 0x8e, 0xb4, 0x18, 0xfd, - 0x98, 0x8f, 0x83, 0x48, 0x7e, 0x74, 0x46, 0xa3, 0x19, 0x8c, 0x89, 0xed, - 0x96, 0xf3, 0xff, 0x98, 0x83, 0x9e, 0xaa, 0x25, 0x2b, 0x65, 0x94, 0xfe, - 0xc8, 0x0a, 0x36, 0xa0, 0x99, 0xd3, 0x1b, 0x00, 0x1d, 0x7e, 0x7c, 0x8d, - 0x70, 0xa2, 0xc4, 0xbe, 0x8e, 0xf9, 0x50, 0x47, 0x1d, 0x73, 0xec, 0xe1, - 0x82, 0xaa, 0x81, 0xdf, 0xb4, 0x9b, 0x09, 0x34, 0xc2, 0x3b, 0x14, 0x66, - 0xd1, 0x73, 0x92, 0x95, 0xd8, 0x84, 0x5a, 0x9a, 0xa4, 0xa3, 0xa9, 0x2d, - 0xbc, 0xc0, 0x64, 0x6a, 0xdb, 0x7c, 0xcd, 0x2c, 0x23, 0xce, 0x2b, 0xd9, - 0xd6, 0x3f, 0x07, 0x81, 0xb1, 0xbf, 0xce, 0xda, 0x28, 0x46, 0x99, 0x9c, - 0x58, 0xe3, 0xd7, 0xc5, 0xa1, 0x92, 0xba, 0x5c, 0x54, 0x89, 0x52, 0x52, - 0x52, 0x97, 0xc7, 0x05, 0x80, 0xe7, 0xc6, 0xda, 0x4c, 0x18, 0x16, 0x53, - 0x4e, 0x1b, 0x8e, 0x19, 0x62, 0x4a, 0x1d, 0x45, 0x24, 0x0e, 0xf8, 0x42, - 0xfa, 0x0b, 0x5e, 0xfb, 0xa5, 0xe8, 0xa5, 0x99, 0x78, 0xd7, 0xa8, 0x21, - 0x3e, 0xd1, 0x57, 0x79, 0x63, 0xb7, 0x2e, 0x2b, 0x1f, 0x65, 0x8d, 0xf6, - 0x90, 0xa2, 0x18, 0x49, 0x62, 0x0c, 0x30, 0x49, 0xd5, 0x9c, 0xc9, 0x5e, - 0x58, 0xb5, 0x81, 0xe9, 0x25, 0xd6, 0x97, 0x8b, 0xdd, 0x8c, 0x59, 0xe8, - 0x1e, 0xbc, 0x6b, 0x03, 0x3a, 0x88, 0xd5, 0x88, 0x42, 0x5b, 0x72, 0x54, - 0x0c, 0xee, 0x1d, 0x64, 0x66, 0xb1, 0xd3, 0xae, 0x0b, 0x65, 0xca, 0x8e, - 0x04, 0x6b, 0x02, 0xd6, 0xbc, 0x1d, 0x79, 0x55, 0x39, 0x78, 0x2a, 0xb6, - 0xe6, 0xa1, 0xd8, 0xca, 0x71, 0x63, 0x51, 0x22, 0x90, 0xfc, 0xd4, 0xe5, - 0x2f, 0xf2, 0x57, 0x52, 0xad, 0x64, 0xd5, 0xcc, 0x62, 0x80, 0x0b, 0xad, - 0xa2, 0x5e, 0xd8, 0x29, 0xf0, 0x32, 0xc9, 0x53, 0x07, 0x87, 0x1e, 0xc3, - 0x2f, 0xd8, 0x49, 0x8e, 0x72, 0x32, 0x6b, 0xd4, 0xae, 0x44, 0x8c, 0x8f, - 0xa9, 0xb8, 0x1f, 0xcc, 0x8f, 0x46, 0x63, 0x3d, 0x5f, 0x11, 0xa8, 0x64, - 0x22, 0x23, 0x0f, 0x56, 0x38, 0x56, 0x42, 0xda, 0xa9, 0xa7, 0x58, 0xcb, - 0xa5, 0x5a, 0xea, 0x71, 0x7a, 0x8a, 0x22, 0xd0, 0xd4, 0xe3, 0x24, 0xd6, - 0x44, 0xb2, 0xf4, 0xe7, 0x43, 0x00, 0x37, 0x32, 0xa2, 0x9d, 0xb8, 0x69, - 0xfd, 0x20, 0xca, 0xf9, 0x54, 0x3d, 0x79, 0x51, 0xd0, 0xee, 0x6d, 0x2d, - 0xd1, 0x19, 0xfa, 0xa7, 0x2f, 0xa4, 0x93, 0xe5, 0xcb, 0xb1, 0xa8, 0xa8, - 0x8d, 0xd4, 0x43, 0xa1, 0x20, 0xff, 0x3a, 0x22, 0xe5, 0x87, 0x49, 0xb3, - 0x0f, 0xd1, 0xe2, 0xdb, 0x7b, 0x1f, 0x33, 0x78, 0xc5, 0x24, 0xc6, 0x2e, - 0xa6, 0x7c, 0xf1, 0xce, 0xc9, 0xb1, 0x2b, 0xeb, 0xd7, 0x57, 0xce, 0x1b, - 0x9a, 0x20, 0x82, 0x63, 0xe8, 0xc4, 0x74, 0xa9, 0x7d, 0xe6, 0x34, 0xd4, - 0x18, 0xf1, 0x1a, 0x1f, 0xe5, 0x9b, 0xde, 0xbe, 0xd2, 0x4f, 0x49, 0x09, - 0xc8, 0xda, 0x7b, 0xde, 0xbf, 0x22, 0x7e, 0xed, 0x9d, 0x9b, 0x9d, 0x1a, - 0xcc, 0xbc, 0xf2, 0x58, 0x18, 0x89, 0xae, 0xf4, 0xc9, 0xb9, 0x0c, 0x32, - 0x79, 0x88, 0xa2, 0x7b, 0xd7, 0xae, 0x32, 0xfe, 0x23, 0xe7, 0x68, 0x76, - 0xab, 0x9a, 0x12, 0xa7, 0xd8, 0x72, 0x91, 0x5a, 0xaf, 0x86, 0x8f, 0x6c, - 0x82, 0xd2, 0xf8, 0x16, 0xb8, 0xb7, 0xef, 0x1d, 0xa4, 0x70, 0x1b, 0x54, - 0x7a, 0xdb, 0x2a, 0x3b, 0xac, 0xbf, 0xda, 0xa1, 0x26, 0xdf, 0xad, 0x01, - 0xbe, 0x9e, 0xd5, 0x70, 0x6a, 0x2f, 0xdf, 0x94, 0x62, 0xa8, 0x9d, 0x3d, - 0x8b, 0x33, 0xd0, 0xfc, 0x65, 0xa7, 0xb5, 0xbc, 0x31, 0x0b, 0xa9, 0x44, - 0xd3, 0xb0, 0x9f, 0x45, 0x43, 0x06, 0x5e, 0x0b, 0x2e, 0x3b, 0x19, 0xde, - 0xbf, 0xf0, 0xd0, 0x61, 0xf9, 0xa7, 0x5e, 0x3f, 0x93, 0xe3, 0x6a, 0x77, - 0x6a, 0x8a, 0x20, 0x2f, 0x6a, 0x7a, 0x41, 0x28, 0x39, 0xd9, 0x8f, 0xca, - 0x36, 0x94, 0x06, 0x84, 0x2e, 0x40, 0x2c, 0x54, 0xf9, 0x3c, 0xa9, 0x0b, - 0x74, 0xd3, 0xa7, 0xc6, 0x20, 0x56, 0xa0, 0x4e, 0x43, 0x34, 0x48, 0xe3, - 0xa1, 0x11, 0x67, 0x7c, 0x2c, 0xf3, 0x12, 0xac, 0xa1, 0xff, 0xd2, 0x4c, - 0xf2, 0x95, 0xbd, 0x6f, 0xd4, 0x88, 0x33, 0xba, 0x6a, 0x98, 0x38, 0xed, - 0x91, 0xb2, 0x5e, 0x47, 0x4a, 0xad, 0x22, 0x50, 0xaa, 0x36, 0x69, 0x44, - 0x5b, 0x1e, 0x3d, 0x59, 0x69, 0x6d, 0xfd, 0x85, 0x44, 0x96, 0x36, 0xf4, - 0x23, 0x07, 0x4b, 0x78, 0xd4, 0xe4, 0x68, 0x6f, 0x18, 0x8e, 0x82, 0xf4, - 0xb4, 0x2a, 0x7f, 0x9a, 0x4b, 0x5a, 0x23, 0xb9, 0x4e, 0x3d, 0xc4, 0x63, - 0x51, 0x46, 0xcd, 0xac, 0xab, 0x9d, 0x69, 0x4b, 0x42, 0x15, 0x90, 0x99, - 0xde, 0x23, 0x84, 0x16, 0x71, 0x8e, 0x6a, 0x62, 0xf9, 0x9b, 0xef, 0x0a, - 0x9e, 0x3b, 0x0b, 0xc3, 0x69, 0x8b, 0xf5, 0xac, 0x6b, 0x88, 0x62, 0xb0, - 0xad, 0x4a, 0xaf, 0x41, 0xa3, 0xea, 0x93, 0x7e, 0xb8, 0xd2, 0xa0, 0x98, - 0xdb, 0x5f, 0xe5, 0xe3, 0xf9, 0x56, 0x12, 0x68, 0x54, 0x3b, 0xee, 0xbe, - 0x55, 0xea, 0xd2, 0x72, 0xe1, 0x34, 0x11, 0xc5, 0xcf, 0x0d, 0x8e, 0x30, - 0xed, 0x1e, 0x35, 0xc3, 0xaa, 0xc7, 0xec, 0x3a, 0xf2, 0x61, 0x10, 0xf9, - 0x30, 0x89, 0x36, 0x63, 0x9a, 0x75, 0xa9, 0xbb, 0xba, 0x4c, 0x52, 0x70, - 0x24, 0x50, 0x93, 0xdf, 0xa1, 0x6a, 0xa5, 0x1a, 0x07, 0x1f, 0x20, 0x13, - 0x2a, 0x0a, 0xca, 0x65, 0xfa, 0x5e, 0x42, 0x7b, 0x34, 0xed, 0xa9, 0x8e, - 0xa1, 0xee, 0x64, 0x78, 0xb4, 0xd1, 0x8e, 0x65, 0x77, 0xf4, 0x0e, 0x48, - 0xce, 0x95, 0x98, 0xb0, 0x0d, 0xf1, 0x94, 0x62, 0x40, 0xa4, 0x70, 0x6a, - 0x91, 0x79, 0x8e, 0x65, 0x4a, 0x24, 0xe7, 0xfc, 0x68, 0xc9, 0xbb, 0x0d, - 0x08, 0x2f, 0x38, 0xac, 0xd4, 0x4c, 0x36, 0xb5, 0x77, 0x1b, 0x17, 0x43, - 0xb5, 0x0a, 0x61, 0x6f, 0x8f, 0x5e, 0x1b, 0xc4, 0x27, 0x09, 0xbe, 0x0c, - 0xbc, 0x5f, 0x47, 0x53, 0xff, 0x1b, 0xdf, 0x61, 0x9f, 0x6e, 0x5a, 0x21, - 0x02, 0xc7, 0x44, 0xe0, 0x04, 0xfc, 0xbc, 0x38, 0xb0, 0xef, 0xdd, 0xfd, - 0xc2, 0x5d, 0xd7, 0x0d, 0x0c, 0x71, 0xe6, 0x6b, 0x58, 0xdc, 0xd3, 0x86, - 0xe3, 0x74, 0x98, 0xbd, 0x85, 0x97, 0xa1, 0x2a, 0x1d, 0xd1, 0x18, 0xf7, - 0xf5, 0xaa, 0xb7, 0xb5, 0x80, 0xe9, 0xf0, 0x5c, 0x26, 0x5d, 0x82, 0xdb, - 0xd7, 0xb8, 0x81, 0xee, 0xa6, 0xa2, 0x83, 0x8c, 0x3a, 0xda, 0x05, 0x01, - 0xd3, 0x87, 0x10, 0xc8, 0x4c, 0x6f, 0x1e, 0x12, 0xeb, 0xe8, 0x65, 0x8c, - 0x5d, 0x8f, 0x72, 0x61, 0x76, 0xde, 0xa9, 0x6e, 0xdb, 0x34, 0xad, 0x21, - 0x61, 0x28, 0x40, 0xd8, 0x37, 0x9d, 0x1e, 0x35, 0xb8, 0xd2, 0x91, 0x77, - 0xb4, 0xf7, 0xea, 0xef, 0x38, 0x60, 0x2c, 0x72, 0x8a, 0xc2, 0xce, 0x20, - 0x22, 0x40, 0xcd, 0xa7, 0x18, 0xf2, 0x10, 0xc6, 0xfe, 0xb7, 0x30, 0xee, - 0xe3, 0x82, 0x2b, 0x9b, 0x06, 0xa2, 0xae, 0x1a, 0xba, 0x89, 0xaf, 0xd1, - 0x88, 0x6e, 0xef, 0xd0, 0xa8, 0x9d, 0xe1, 0x1e, 0x85, 0x01, 0x1f, 0x5e, - 0xed, 0x47, 0xdc, 0xa6, 0x33, 0xf5, 0x89, 0x0c, 0x4a, 0x71, 0x9f, 0xa1, - 0xfb, 0x25, 0x6d, 0xef, 0x19, 0xdf, 0xc4, 0x75, 0x5d, 0x83, 0x3c, 0xdf, - 0x61, 0x10, 0x7e, 0x31, 0x1e, 0x1d, 0x97, 0x64, 0x24, 0x1e, 0x97, 0xaf, - 0xe7, 0x09, 0x48, 0xd2, 0x5f, 0xf7, 0x34, 0xc1, 0x71, 0x59, 0xc5, 0x1e, - 0x71, 0xcc, 0x94, 0x34, 0xc5, 0x38, 0x44, 0x16, 0x31, 0x73, 0x38, 0x78, - 0x28, 0xb3, 0xc9, 0xcd, 0x6c, 0xf8, 0xcd, 0x78, 0x37, 0x0e, 0x51, 0x01, - 0x19, 0x6f, 0x65, 0xa8, 0x7d, 0xea, 0x10, 0x03, 0xed, 0xb3, 0x2c, 0xb9, - 0x05, 0x39, 0x74, 0x91, 0xe9, 0x18, 0x9e, 0x2e, 0x37, 0x75, 0x88, 0x11, - 0xe2, 0xb0, 0x7b, 0xf0, 0xbe, 0x3f, 0xb7, 0xf7, 0x2c, 0xa6, 0x30, 0xb9, - 0x10, 0x38, 0xb8, 0x64, 0x3d, 0x52, 0xee, 0xd5, 0x20, 0x4f, 0x28, 0x1e, - 0xdd, 0x93, 0x27, 0xc7, 0x90, 0xef, 0x06, 0x1c, 0xfd, 0x03, 0x27, 0x4e, - 0x0c, 0x8c, 0x99, 0xaa, 0x68, 0x1b, 0x1c, 0x69, 0x87, 0x87, 0xd6, 0x1c, - 0xa1, 0x94, 0xa9, 0xdc, 0x5d, 0x8f, 0x8c, 0xfb, 0xb1, 0x8c, 0x29, 0x53, - 0xe0, 0x76, 0x08, 0x10, 0x13, 0x52, 0x50, 0x8c, 0xa5, 0x88, 0xa9, 0x67, - 0xfa, 0x6b, 0x91, 0x9e, 0x01, 0x7e, 0xb0, 0x46, 0x2c, 0x5b, 0x84, 0xe3, - 0x03, 0x2f, 0x86, 0x14, 0xb5, 0x41, 0x45, 0x30, 0xc6, 0x2d, 0x10, 0x20, - 0xc6, 0x96, 0xc3, 0x47, 0x10, 0xb7, 0x2c, 0xb8, 0x38, 0x6a, 0x06, 0xb3, - 0x40, 0x6d, 0x0d, 0x7d, 0xdb, 0xb3, 0x24, 0xb6, 0xa4, 0x56, 0x1a, 0xa6, - 0xdb, 0x84, 0xde, 0x36, 0x7a, 0xd8, 0xba, 0x78, 0xea, 0x70, 0x05, 0x93, - 0xd4, 0x55, 0xe4, 0x2a, 0x1b, 0x75, 0x7c, 0x64, 0x34, 0xdb, 0x57, 0x02, - 0xe2, 0x6f, 0x1f, 0x64, 0xc0, 0xb5, 0x2f, 0xbe, 0x00, 0xfc, 0x5d, 0xaa, - 0xaa, 0x28, 0x36, 0x06, 0x87, 0xca, 0x33, 0x5e, 0xd9, 0xfd, 0xc6, 0xab, - 0xbe, 0xad, 0x43, 0xb4, 0xa7, 0xc0, 0x58, 0xcc, 0x1f, 0xa3, 0x29, 0x03, - 0x43, 0x5c, 0x92, 0x8c, 0x1e, 0xa6, 0xfd, 0xfa, 0xc5, 0xfa, 0x1e, 0x6f, - 0x75, 0xe9, 0xfc, 0x18, 0x87, 0x4f, 0x0e, 0x3b, 0xb7, 0xb0, 0x9d, 0x92, - 0x5f, 0xa9, 0xf8, 0x3d, 0x5a, 0xf1, 0x26, 0x66, 0x46, 0x8a, 0x61, 0x4d, - 0xd9, 0x2f, 0xab, 0xc6, 0x46, 0x10, 0xd5, 0xc0, 0xe8, 0x92, 0x2c, 0xc6, - 0xd1, 0x89, 0xb5, 0x82, 0xe0, 0x17, 0xea, 0xfc, 0xf3, 0xf8, 0xf7, 0x31, - 0x2e, 0x93, 0x02, 0x2e, 0xaa, 0x44, 0x87, 0x0c, 0xc5, 0xdb, 0x5e, 0xc7, - 0x68, 0xa3, 0xaf, 0x00, 0x6a, 0xc1, 0x20, 0xe6, 0xa5, 0x46, 0xe0, 0x6b, - 0x8e, 0xda, 0xc9, 0x37, 0xb8, 0x2b, 0xfc, 0x66, 0xd3, 0x53, 0x04, 0xe3, - 0xee, 0x05, 0x2f, 0xf5, 0xfa, 0xac, 0xdc, 0xbd, 0xd3, 0x6b, 0x50, 0x4d, - 0xc8, 0xb5, 0xe3, 0xcb, 0x96, 0x1f, 0x83, 0x17, 0x29, 0xec, 0x39, 0x99, - 0x0b, 0xd1, 0xce, 0xe8, 0xf3, 0x96, 0x0a, 0x08, 0x7e, 0x92, 0x0a, 0x1f, - 0xf5, 0xdb, 0x8e, 0x82, 0x9b, 0x23, 0xdf, 0xb5, 0x3e, 0xf2, 0x51, 0xeb, - 0xa3, 0x7b, 0xd1, 0xfa, 0xb0, 0x87, 0xca, 0x58, 0x38, 0x5b, 0x64, 0xdf, - 0x58, 0xbc, 0xda, 0xf7, 0x8e, 0xa0, 0x18, 0xba, 0xb5, 0x82, 0x2e, 0xb9, - 0xee, 0xd9, 0x2f, 0x51, 0xac, 0xed, 0x23, 0x3b, 0xb1, 0x9d, 0xd4, 0x83, - 0xa9, 0x98, 0x3e, 0xd4, 0xa3, 0xdc, 0x20, 0x2b, 0x40, 0x8a, 0x9d, 0x0f, - 0xbc, 0x6c, 0xe7, 0x26, 0x8b, 0xef, 0xf8, 0x43, 0x9c, 0xf7, 0xe2, 0x0e, - 0xbe, 0xfb, 0x73, 0x84, 0xd2, 0x37, 0x33, 0x14, 0x0f, 0x66, 0xf3, 0xc3, - 0xdb, 0x01, 0xec, 0x1c, 0x2a, 0xd6, 0xa0, 0x18, 0xef, 0x74, 0x83, 0x22, - 0xc5, 0xc3, 0xee, 0x18, 0xaa, 0x8f, 0x38, 0x71, 0x20, 0xf8, 0xce, 0xc8, - 0x27, 0xa8, 0x85, 0x77, 0xa4, 0x46, 0xd9, 0x08, 0xb2, 0xce, 0x03, 0xe7, - 0x40, 0xde, 0x48, 0x9d, 0x22, 0x3a, 0x96, 0x17, 0x5b, 0xc3, 0xd2, 0x0d, - 0x78, 0x0b, 0xed, 0xf8, 0x95, 0xc4, 0xf7, 0x71, 0xb4, 0xe1, 0x14, 0xf0, - 0x01, 0xd9, 0xe1, 0xb1, 0xbc, 0x2f, 0x58, 0x4a, 0x1c, 0xbb, 0x67, 0x1e, - 0xe5, 0x0a, 0xe2, 0x43, 0xe2, 0x11, 0x53, 0xd2, 0x3e, 0x75, 0x43, 0xbf, - 0xeb, 0x12, 0x8a, 0x03, 0x3e, 0x81, 0x91, 0x05, 0x4c, 0x65, 0xa7, 0x36, - 0x96, 0x27, 0x5f, 0xbf, 0xed, 0x0e, 0x3a, 0x9c, 0xc9, 0x15, 0x3a, 0x2f, - 0x72, 0xa5, 0x1b, 0x96, 0xe3, 0xe7, 0x85, 0xdb, 0xaa, 0x93, 0x52, 0xd7, - 0x93, 0x4c, 0x9f, 0x53, 0x9c, 0x9d, 0x86, 0x5c, 0x67, 0x1d, 0xad, 0x9d, - 0x10, 0x75, 0x00, 0xfc, 0xca, 0x8c, 0xa9, 0xc8, 0xd0, 0x2c, 0xbb, 0x99, - 0x51, 0xfd, 0x12, 0x4c, 0x0c, 0x90, 0x2c, 0xe7, 0xf3, 0xc2, 0x00, 0xf2, - 0x3e, 0x33, 0x1d, 0xe3, 0x2b, 0x3a, 0x28, 0x57, 0xe6, 0x8f, 0x77, 0x5b, - 0xed, 0x60, 0x86, 0x8a, 0x8a, 0xd5, 0x65, 0x1e, 0xd6, 0x68, 0x88, 0xb1, - 0x96, 0x35, 0xbd, 0xad, 0xb2, 0x93, 0xb7, 0x92, 0xf2, 0x29, 0x50, 0xf4, - 0xf3, 0x76, 0x43, 0xeb, 0x96, 0x93, 0xec, 0x84, 0x33, 0xa5, 0x99, 0x27, - 0xf9, 0xad, 0x67, 0x4a, 0x30, 0xcf, 0x4e, 0x1f, 0xdf, 0xa9, 0x6b, 0xd1, - 0x8e, 0x3a, 0x0f, 0x4c, 0xbf, 0xea, 0x53, 0x98, 0xc8, 0x89, 0x37, 0x2a, - 0x9d, 0x8a, 0xf4, 0xc9, 0xce, 0x3f, 0x2f, 0x87, 0xcc, 0xa2, 0xe8, 0x0f, - 0x05, 0x3f, 0xb2, 0x3e, 0x0f, 0x82, 0x3f, 0xb8, 0xbd, 0xc1, 0x7f, 0x3c, - 0x87, 0xfc, 0x3c, 0x43, 0xf7, 0x7d, 0x74, 0xb5, 0xa2, 0x21, 0x39, 0xaf, - 0x8b, 0xa0, 0xd2, 0x1b, 0xb8, 0xe8, 0x72, 0xc4, 0xc0, 0x65, 0xc4, 0x82, - 0xc1, 0xf0, 0x9b, 0xa6, 0x9c, 0x25, 0x92, 0x3a, 0x07, 0x6c, 0x1a, 0x0d, - 0xd0, 0x39, 0x68, 0x36, 0x65, 0x1e, 0x02, 0x3d, 0x07, 0xe5, 0x93, 0x6a, - 0x13, 0xce, 0x61, 0x7c, 0xa8, 0x5e, 0x0d, 0xc3, 0x5d, 0x8a, 0x55, 0x1c, - 0xd6, 0xb4, 0xad, 0x91, 0x95, 0xe9, 0xc6, 0xcc, 0x39, 0xba, 0x0b, 0x32, - 0x94, 0xb4, 0x12, 0x9d, 0xd4, 0x49, 0x74, 0x52, 0x01, 0x00, 0x0e, 0xdb, - 0x9c, 0x03, 0xef, 0x7c, 0x00, 0xa1, 0x0b, 0x9f, 0x43, 0xb8, 0xb2, 0x5f, - 0x3c, 0x5b, 0xf6, 0x27, 0x42, 0xbc, 0x73, 0xde, 0x90, 0x9c, 0x3b, 0x65, - 0x26, 0x46, 0x6c, 0x58, 0x71, 0x9c, 0xd2, 0x5b, 0x74, 0x4a, 0x47, 0x91, - 0xa1, 0x1a, 0x66, 0x61, 0x94, 0xd4, 0x8e, 0x1e, 0xa8, 0x08, 0xa7, 0x1c, - 0x18, 0x54, 0xef, 0xa2, 0x88, 0xb7, 0xaa, 0x78, 0xea, 0x40, 0x53, 0x16, - 0x73, 0xc2, 0x6c, 0xe8, 0x6d, 0x7f, 0xc5, 0xb5, 0xe0, 0x49, 0x86, 0xcd, - 0x39, 0x52, 0xdb, 0x72, 0x43, 0x18, 0xef, 0xce, 0x4e, 0xb5, 0x93, 0x63, - 0xaf, 0xf9, 0x36, 0x19, 0xb0, 0xaf, 0x1a, 0x0c, 0xbb, 0x29, 0xfc, 0xe3, - 0x9a, 0xf3, 0x99, 0x42, 0x1e, 0xed, 0x94, 0x4f, 0x69, 0x13, 0x39, 0x25, - 0xee, 0x39, 0x79, 0xdb, 0xc5, 0x80, 0xac, 0x22, 0xc6, 0x39, 0x53, 0xc6, - 0x02, 0xdb, 0x80, 0x72, 0x36, 0x23, 0x33, 0x90, 0xef, 0x9c, 0x92, 0x0a, - 0x9e, 0x79, 0xb7, 0xf5, 0x94, 0x54, 0xd0, 0x50, 0x06, 0x55, 0xd9, 0xe7, - 0x38, 0xca, 0x7a, 0xe2, 0xd6, 0xc0, 0xa9, 0x87, 0x56, 0x4e, 0xec, 0x7c, - 0xdb, 0x3e, 0x3d, 0x48, 0x56, 0x5d, 0x03, 0x2c, 0x04, 0x19, 0x2c, 0xb9, - 0x7f, 0x6f, 0xe8, 0x79, 0x2f, 0x97, 0x53, 0x91, 0x04, 0xc9, 0x2c, 0x04, - 0x35, 0x03, 0xe7, 0xc7, 0x1d, 0xb3, 0x27, 0x8d, 0x29, 0xdc, 0x35, 0xdc, - 0x5a, 0x1b, 0xad, 0x9f, 0x52, 0x68, 0x6a, 0x54, 0x77, 0xf7, 0x2c, 0xc8, - 0x65, 0x81, 0xc7, 0x99, 0xfc, 0xbb, 0x53, 0xa7, 0xdd, 0x0d, 0x79, 0x31, - 0x17, 0x0e, 0x65, 0xa6, 0x90, 0x3e, 0x44, 0xab, 0x0e, 0xf9, 0x39, 0x17, - 0xde, 0x07, 0x3d, 0x63, 0x78, 0x36, 0xf5, 0x95, 0x85, 0x41, 0xba, 0x91, - 0x7d, 0xe1, 0x60, 0xda, 0x52, 0x25, 0x80, 0xa9, 0xc7, 0x1b, 0x1a, 0xfc, - 0xed, 0x20, 0x9d, 0xf9, 0x91, 0x1a, 0xea, 0x13, 0x0e, 0x2a, 0x92, 0x2e, - 0xd3, 0x9d, 0xe8, 0x05, 0x33, 0x72, 0xc3, 0xe3, 0x2a, 0x0d, 0x99, 0xd2, - 0xaf, 0x1e, 0x2b, 0xd6, 0xd4, 0x06, 0x46, 0x42, 0x4e, 0x18, 0x0a, 0x75, - 0x4c, 0xf2, 0xf4, 0x1b, 0x38, 0x70, 0x6e, 0x6b, 0x29, 0x7e, 0xd8, 0xc2, - 0xcb, 0xdf, 0x67, 0x72, 0x4f, 0x4f, 0xbd, 0x96, 0x73, 0xe6, 0x23, 0x39, - 0x0e, 0x27, 0xda, 0xaa, 0x11, 0x18, 0x7f, 0x93, 0xb6, 0xce, 0x1c, 0x62, - 0x35, 0xe4, 0xfe, 0xe6, 0xd4, 0x4d, 0x69, 0x43, 0xa1, 0x6a, 0xe4, 0x94, - 0xb4, 0xd7, 0x11, 0x33, 0x43, 0x19, 0xf5, 0x89, 0x9b, 0x28, 0xef, 0xcb, - 0xed, 0xd9, 0x5f, 0xe4, 0x7d, 0x0f, 0x9c, 0x12, 0x1d, 0x45, 0xac, 0x6f, - 0xa9, 0x61, 0x7b, 0xa7, 0x16, 0xb6, 0xf7, 0x22, 0x7e, 0xdf, 0x67, 0x80, - 0x5e, 0xe3, 0xf5, 0x1a, 0x6a, 0x08, 0x3a, 0xfe, 0xcb, 0xea, 0x2f, 0xde, - 0x5a, 0xbf, 0x58, 0x9f, 0xae, 0x22, 0x6c, 0x7d, 0x2d, 0x26, 0xdb, 0x35, - 0x25, 0x33, 0xf1, 0x4f, 0xda, 0x5b, 0x50, 0x33, 0xac, 0x71, 0xc5, 0x2d, - 0x5e, 0x37, 0x0f, 0xf7, 0x57, 0x16, 0x6e, 0x74, 0xd6, 0x6c, 0xac, 0xab, - 0x5f, 0x54, 0x74, 0x53, 0x15, 0xb6, 0x56, 0x84, 0xac, 0x2e, 0xca, 0x5e, - 0xc9, 0xaf, 0x5b, 0x63, 0x72, 0x2b, 0xb1, 0x44, 0x2c, 0xae, 0x00, 0x3c, - 0x00, 0xa5, 0x8f, 0x5f, 0x84, 0x8d, 0xb8, 0x46, 0xea, 0x00, 0x82, 0x11, - 0xc9, 0x48, 0x36, 0xca, 0x32, 0xd3, 0xcc, 0xf7, 0x14, 0x41, 0x23, 0x3a, - 0x67, 0x24, 0x81, 0x8d, 0xe4, 0x4c, 0xa4, 0x38, 0xf0, 0x50, 0x6e, 0x83, - 0x6f, 0x6c, 0xfe, 0x89, 0xab, 0x33, 0xc5, 0xde, 0x3b, 0x9c, 0xc2, 0x9c, - 0x81, 0xda, 0x30, 0x69, 0x86, 0xeb, 0xf7, 0x34, 0x06, 0x62, 0x09, 0x6b, - 0x13, 0x28, 0xd2, 0x66, 0x19, 0xe3, 0x1c, 0xc7, 0x0c, 0xa7, 0x67, 0x11, - 0x40, 0x69, 0x0c, 0xfa, 0x5d, 0x43, 0x50, 0x61, 0xbc, 0x27, 0xd7, 0x08, - 0x09, 0x06, 0x56, 0xc4, 0x37, 0xde, 0x96, 0xe9, 0x1d, 0xee, 0x78, 0x94, - 0xc0, 0x98, 0xe0, 0x5c, 0x98, 0x37, 0xbc, 0x34, 0xdf, 0xb1, 0x51, 0x29, - 0x58, 0x1e, 0x17, 0x34, 0x12, 0x63, 0x6f, 0x5b, 0xcf, 0x34, 0xa7, 0xce, - 0x97, 0xc1, 0xf0, 0x67, 0x2b, 0xee, 0xa8, 0xd0, 0xe5, 0x85, 0xec, 0x2f, - 0xeb, 0x82, 0x00, 0x0d, 0xc0, 0xd7, 0xfa, 0x7e, 0x44, 0xd9, 0x37, 0xe7, - 0xfc, 0x39, 0xf0, 0x7c, 0xda, 0x1e, 0xfb, 0x16, 0xdb, 0x1b, 0xc7, 0x9e, - 0xbb, 0xd0, 0xbb, 0xf1, 0x0f, 0x99, 0x6e, 0x3e, 0x2a, 0x81, 0xcd, 0x66, - 0x9b, 0xed, 0xad, 0x79, 0xb6, 0x4b, 0x4e, 0xe1, 0xc7, 0xb7, 0x60, 0xdb, - 0xfe, 0xe3, 0x37, 0xb1, 0x7c, 0xb5, 0x21, 0xb6, 0x9b, 0x1f, 0x9c, 0x8e, - 0x0d, 0x81, 0x0b, 0x6b, 0xcd, 0xf4, 0xdd, 0x45, 0xcf, 0x78, 0xeb, 0xd8, - 0x6e, 0x35, 0xda, 0xa7, 0x7d, 0xf9, 0x60, 0x0e, 0x01, 0x59, 0x3a, 0xc9, - 0x85, 0x33, 0x14, 0x99, 0x30, 0x14, 0x41, 0x8e, 0xf0, 0xff, 0x07, 0x45, - 0xae, 0x66, 0xe2, 0x32, 0x86, 0xc1, 0x29, 0xf6, 0x49, 0x64, 0xd9, 0x81, - 0x61, 0xe7, 0xec, 0x3a, 0x8f, 0xd2, 0x51, 0xdb, 0xc4, 0x78, 0xac, 0xe0, - 0xdd, 0x4d, 0x00, 0x23, 0xaa, 0x87, 0x94, 0xdb, 0x43, 0xd1, 0x75, 0xcf, - 0xd9, 0x23, 0x36, 0x01, 0x9f, 0xf3, 0xf8, 0x2c, 0x43, 0x64, 0xf6, 0x1d, - 0x97, 0xbb, 0x31, 0x62, 0x8e, 0xcb, 0xe3, 0x72, 0xb5, 0x17, 0xbe, 0x5a, - 0xf7, 0x33, 0x3c, 0xf9, 0x3f, 0x33, 0xf5, 0x58, 0x20, 0xa6, 0x30, 0xc6, - 0xe0, 0xf2, 0xfa, 0x27, 0xb8, 0x82, 0xfe, 0x5f, 0xc2, 0xd8, 0x2c, 0xc9, - 0xb6, 0x25, 0xb7, 0xbf, 0xc7, 0xa4, 0xd2, 0xb4, 0xbc, 0xd8, 0xce, 0xce, - 0xd8, 0x86, 0x56, 0xa5, 0xca, 0xf0, 0xe4, 0x0d, 0xa2, 0x99, 0x8f, 0x20, - 0xc7, 0xc8, 0xb3, 0x69, 0x8a, 0x01, 0x0b, 0x31, 0x32, 0xeb, 0xa7, 0x1c, - 0xdc, 0x84, 0xde, 0x61, 0x41, 0x5a, 0xbf, 0xbd, 0x35, 0x8a, 0xd5, 0x28, - 0x46, 0x23, 0xd8, 0x8c, 0x6e, 0xa0, 0xf2, 0xa6, 0xc3, 0x8b, 0xd5, 0x8c, - 0x12, 0x46, 0xc4, 0x71, 0x20, 0xe2, 0xd7, 0x35, 0xa4, 0xeb, 0xc6, 0x97, - 0x1c, 0x23, 0x7b, 0xf3, 0xe5, 0x2e, 0x33, 0x62, 0x6f, 0x08, 0xc0, 0x35, - 0xbc, 0x3f, 0x85, 0x6a, 0x78, 0xf4, 0xf0, 0x33, 0x53, 0x9c, 0x6d, 0x51, - 0xe2, 0xf6, 0xa3, 0xcb, 0xfe, 0xbe, 0xb8, 0x9b, 0x8d, 0xf0, 0xd1, 0xe8, - 0xb8, 0xac, 0x5e, 0xec, 0x75, 0xe1, 0x0e, 0x3e, 0x58, 0x9b, 0x3f, 0x1e, - 0x72, 0x0d, 0x6d, 0x47, 0x01, 0x3c, 0x3d, 0x67, 0x7b, 0x22, 0x86, 0x86, - 0x51, 0xfe, 0x95, 0xe5, 0x5f, 0xa3, 0xe6, 0x56, 0x3b, 0x50, 0x90, 0xd1, - 0xed, 0x19, 0xdf, 0xae, 0x08, 0x77, 0x5e, 0xaf, 0x21, 0xf1, 0x24, 0xfa, - 0x74, 0xd6, 0x16, 0x1b, 0x78, 0xaa, 0xe4, 0xa8, 0xba, 0x89, 0xbd, 0x35, - 0xf0, 0x11, 0xae, 0xb7, 0x81, 0x9f, 0x2c, 0xf0, 0xe2, 0x45, 0xf3, 0x71, - 0xc6, 0x79, 0x04, 0x81, 0xb7, 0xf0, 0x00, 0x1a, 0x0c, 0x59, 0x87, 0x15, - 0x31, 0xfa, 0x50, 0x60, 0xc0, 0xf7, 0xed, 0x37, 0x40, 0xc6, 0xb6, 0x4c, - 0x51, 0x56, 0xbb, 0x57, 0xb3, 0xbb, 0x3f, 0x5b, 0x79, 0x78, 0x46, 0xdd, - 0x7e, 0x63, 0x63, 0xd9, 0x06, 0x54, 0xcf, 0xb6, 0xc4, 0x5b, 0xed, 0x60, - 0x41, 0x99, 0xc5, 0x3d, 0x5e, 0x9c, 0x5c, 0xdc, 0x5f, 0x1b, 0x54, 0x9f, - 0xe3, 0x75, 0x44, 0xb3, 0x6b, 0x6b, 0xb9, 0xa5, 0x86, 0x83, 0xbd, 0xbe, - 0x71, 0x03, 0xc0, 0x57, 0xf5, 0xb6, 0x6e, 0x47, 0xc0, 0x8e, 0x4b, 0x64, - 0xcd, 0x9e, 0xe1, 0x89, 0xaa, 0x08, 0xd6, 0x30, 0xb9, 0xc1, 0xe2, 0x05, - 0x3b, 0x68, 0xfe, 0x87, 0x1b, 0xde, 0x80, 0x38, 0x86, 0x96, 0x87, 0xe1, - 0x11, 0xc5, 0x75, 0x93, 0xb5, 0x29, 0x22, 0x12, 0x03, 0x69, 0x59, 0x26, - 0x0f, 0xb9, 0x01, 0x0c, 0x42, 0xc7, 0xe0, 0x3b, 0x71, 0x33, 0xe0, 0xdb, - 0xda, 0x9b, 0x95, 0x77, 0x88, 0xfc, 0x34, 0xc3, 0x0e, 0x53, 0x85, 0x69, - 0xd9, 0x6e, 0x80, 0x3e, 0x67, 0xcb, 0x4f, 0xc4, 0x12, 0x5f, 0xac, 0x35, - 0xda, 0x16, 0x3a, 0x9a, 0xb7, 0xa1, 0x1b, 0xd3, 0x6d, 0x63, 0x94, 0x1b, - 0xa6, 0x14, 0x03, 0xae, 0xce, 0xb9, 0x0e, 0xbe, 0x75, 0xbc, 0xc6, 0x7c, - 0x83, 0x89, 0x42, 0x80, 0x69, 0x6d, 0x2c, 0xe8, 0xd9, 0xbf, 0x76, 0x00, - 0x0f, 0x4c, 0xfe, 0x05, 0x99, 0xd5, 0x0c, 0x42, 0xd6, 0x93, 0xf8, 0xd6, - 0xe2, 0x5a, 0x83, 0x67, 0xed, 0x7c, 0x6a, 0x64, 0x9f, 0xb1, 0x46, 0x7e, - 0x9c, 0x41, 0x8d, 0x38, 0x9d, 0x57, 0x8d, 0x78, 0x2a, 0x7d, 0x57, 0x78, - 0xaf, 0x25, 0xe2, 0xa9, 0x6c, 0x85, 0x01, 0x51, 0x9b, 0x86, 0xa7, 0xa5, - 0xf5, 0x50, 0x79, 0x72, 0x6a, 0x43, 0xf1, 0xc4, 0xed, 0x4e, 0x5e, 0x77, - 0x43, 0x0c, 0xbb, 0x4f, 0x11, 0x21, 0x39, 0x41, 0x60, 0x7c, 0xfb, 0xfb, - 0x6d, 0x1a, 0xf8, 0x06, 0xe3, 0x4d, 0x6c, 0x01, 0xe0, 0xfd, 0xba, 0xd8, - 0x52, 0x8d, 0x6c, 0x70, 0x33, 0xc7, 0x47, 0xeb, 0x8a, 0x56, 0xbd, 0xf6, - 0xa4, 0xfe, 0x6c, 0xdf, 0x97, 0x7c, 0x6f, 0x43, 0xfe, 0x3d, 0x0b, 0x3e, - 0xa7, 0xd8, 0x7c, 0x5f, 0x2c, 0x70, 0x11, 0xde, 0x9a, 0x07, 0xbb, 0xfc, - 0x13, 0xaa, 0x33, 0x1d, 0x47, 0x69, 0xb8, 0x6e, 0x0c, 0xae, 0xb8, 0x4f, - 0x48, 0x62, 0x90, 0x97, 0x80, 0xd1, 0x07, 0xc5, 0x26, 0x77, 0x74, 0x60, - 0x98, 0xf1, 0xe3, 0xfe, 0xf4, 0x1a, 0x1f, 0xb0, 0xb4, 0x69, 0x16, 0x65, - 0x32, 0x14, 0xbe, 0xc0, 0x56, 0x07, 0x53, 0xdd, 0x59, 0xea, 0x3e, 0x14, - 0x00, 0x32, 0x86, 0x8d, 0xad, 0x20, 0xd8, 0xec, 0x89, 0x6a, 0x84, 0xaa, - 0x2c, 0xbe, 0x75, 0xb5, 0xc9, 0x9e, 0x7c, 0x28, 0xd1, 0x66, 0x69, 0x41, - 0xe2, 0xa1, 0xbc, 0xfa, 0xff, 0x86, 0x70, 0x5b, 0xd6, 0x86, 0xed, 0x73, - 0x6d, 0x62, 0xb7, 0x6b, 0x2c, 0x83, 0x68, 0x40, 0x98, 0xc1, 0xb7, 0x0f, - 0x00, 0x14, 0x3d, 0x75, 0xab, 0xa0, 0xc6, 0x2b, 0xb2, 0x6e, 0x4a, 0x17, - 0x46, 0xb8, 0x45, 0xc6, 0xdb, 0x12, 0x14, 0x9d, 0xd0, 0x57, 0x16, 0x17, - 0x4f, 0x95, 0xdc, 0xfe, 0xe0, 0xf5, 0xb7, 0x7f, 0x66, 0x1a, 0x9f, 0xcf, - 0x18, 0xfa, 0xa8, 0x0d, 0x40, 0x1f, 0xeb, 0x20, 0x08, 0xe8, 0xf9, 0xfd, - 0xc2, 0xd1, 0x90, 0x82, 0x3a, 0x22, 0x8a, 0x91, 0x81, 0x46, 0x7f, 0x75, - 0xc6, 0x10, 0xc0, 0x2d, 0xde, 0x09, 0x48, 0x51, 0x81, 0xa3, 0xb6, 0x25, - 0x32, 0xbd, 0xdd, 0x0f, 0x5f, 0x66, 0x1a, 0x42, 0x9c, 0x6d, 0xda, 0xf0, - 0x6c, 0x1b, 0x98, 0x11, 0x6e, 0x88, 0xb7, 0xfa, 0x0f, 0x8e, 0x75, 0x10, - 0x34, 0x98, 0xb9, 0x99, 0x26, 0xd1, 0xfb, 0xc8, 0x30, 0xa2, 0xe1, 0xbe, - 0xd8, 0x81, 0x4d, 0x0f, 0x41, 0x19, 0x44, 0xc0, 0x37, 0x53, 0x0b, 0x09, - 0x84, 0xe3, 0xfb, 0xe0, 0x6b, 0x49, 0xcb, 0x32, 0x64, 0x11, 0x06, 0xbc, - 0xd1, 0xbb, 0x69, 0xad, 0xbe, 0x01, 0xf8, 0x36, 0x05, 0xab, 0xc7, 0xf8, - 0x68, 0x9f, 0xf7, 0xe5, 0x59, 0x82, 0xa8, 0xc2, 0x40, 0x9c, 0xff, 0x6c, - 0x49, 0x3f, 0xff, 0x71, 0xb9, 0x05, 0x42, 0x98, 0x04, 0x63, 0x5b, 0xfe, - 0x91, 0x28, 0xc3, 0x75, 0x95, 0xbb, 0x08, 0xe3, 0xc1, 0xc2, 0x3b, 0x7e, - 0x03, 0xc0, 0x64, 0x59, 0x1a, 0x8c, 0x6f, 0x1b, 0x8b, 0xab, 0x9b, 0x03, - 0x74, 0x94, 0x86, 0xbc, 0xf9, 0x9b, 0xe9, 0x9e, 0x5f, 0xa8, 0xa8, 0x17, - 0x1e, 0x1f, 0xb2, 0xc7, 0x9e, 0x6f, 0x44, 0xf1, 0x90, 0x41, 0x27, 0x2f, - 0xe9, 0x04, 0x24, 0xf6, 0x0c, 0xb4, 0x2d, 0xbe, 0x6c, 0x3e, 0x0e, 0x88, - 0x44, 0xb9, 0xb0, 0x30, 0x00, 0x1b, 0xcf, 0xc3, 0x6c, 0x3d, 0x29, 0xce, - 0x6a, 0x1f, 0xb1, 0x7e, 0xbf, 0x10, 0x20, 0x39, 0x18, 0x56, 0x1c, 0x88, - 0x59, 0x1c, 0x30, 0x3b, 0xcb, 0x94, 0xcd, 0x8b, 0x02, 0x17, 0x8a, 0x5b, - 0xdc, 0xac, 0x48, 0xcf, 0x60, 0x44, 0x32, 0x62, 0x57, 0x13, 0x18, 0xf9, - 0x5a, 0x63, 0x2d, 0x1d, 0xc0, 0xb3, 0xbf, 0x32, 0x0b, 0x91, 0xb9, 0xd8, - 0xda, 0x98, 0x89, 0xb5, 0xc9, 0x58, 0x1e, 0xd1, 0x0f, 0x20, 0xc8, 0x31, - 0x80, 0xe5, 0xdd, 0x68, 0x1a, 0x1c, 0xe4, 0x2d, 0x3e, 0x14, 0x57, 0xcc, - 0x47, 0x70, 0xba, 0x5c, 0xbc, 0x13, 0x64, 0xe5, 0x3a, 0xcf, 0x25, 0x3e, - 0x5b, 0xa4, 0x12, 0xac, 0x7a, 0x49, 0x7e, 0x0c, 0x6c, 0x28, 0xc9, 0xe6, - 0x72, 0x27, 0x49, 0x82, 0x02, 0x70, 0xde, 0x0f, 0xa2, 0xa2, 0xf3, 0x6c, - 0xb7, 0x31, 0x7c, 0x2e, 0x03, 0x5e, 0x9b, 0x71, 0x82, 0x96, 0x38, 0x69, - 0xe4, 0xb8, 0xb5, 0xc4, 0x8e, 0xf2, 0xb4, 0xb9, 0x06, 0x81, 0xa0, 0x09, - 0x62, 0xa6, 0xe9, 0x9f, 0x94, 0x37, 0x05, 0x42, 0xee, 0x4d, 0xda, 0xc4, - 0x55, 0xc2, 0xe8, 0xc7, 0xf2, 0x00, 0xd5, 0x86, 0x5d, 0x91, 0x51, 0xa0, - 0x28, 0x7b, 0x88, 0x98, 0xf0, 0x55, 0x43, 0xc4, 0x04, 0xa2, 0xea, 0x0b, - 0xfb, 0xf8, 0x35, 0xda, 0xad, 0x80, 0xc8, 0x5d, 0x35, 0x2d, 0x1e, 0x40, - 0xd8, 0x2a, 0x36, 0xe8, 0x47, 0xd9, 0x3c, 0x20, 0xc7, 0x25, 0x08, 0x9e, - 0x0c, 0x4c, 0x1a, 0x5d, 0x83, 0x88, 0x0a, 0x80, 0x08, 0xaa, 0x13, 0x40, - 0x01, 0xa2, 0xb4, 0x0d, 0xdb, 0x12, 0x6d, 0x44, 0xad, 0xa4, 0x64, 0x2a, - 0x70, 0x74, 0x9d, 0x90, 0x4a, 0xb9, 0xfb, 0x8e, 0x1c, 0xb4, 0x0d, 0x0a, - 0x0c, 0x0c, 0x19, 0x87, 0x9f, 0xae, 0x74, 0x3b, 0x4f, 0xd8, 0x6a, 0xf6, - 0x56, 0x91, 0x0a, 0x08, 0x54, 0xec, 0x61, 0x3d, 0xfc, 0x2f, 0x34, 0xb2, - 0x39, 0xf0, 0x81, 0x0e, 0x02, 0xab, 0x06, 0xc6, 0x01, 0x95, 0xfa, 0x19, - 0x09, 0x58, 0xbb, 0xd1, 0xba, 0x5c, 0x52, 0x75, 0x73, 0x93, 0x91, 0xf2, - 0xb2, 0x3e, 0x24, 0x57, 0x3e, 0xce, 0xa4, 0x10, 0xab, 0x41, 0xaf, 0x8e, - 0x65, 0xa8, 0xc6, 0x37, 0xab, 0x66, 0xf3, 0x18, 0xcd, 0xb7, 0x8b, 0xb6, - 0xdc, 0xf0, 0xa5, 0xcc, 0xa2, 0x51, 0x36, 0xfc, 0x43, 0xd2, 0x05, 0x39, - 0xd7, 0x11, 0x07, 0xf1, 0x8e, 0xd8, 0xa2, 0x51, 0xe4, 0x25, 0x81, 0x17, - 0xbc, 0x42, 0xc4, 0x15, 0x00, 0x37, 0x25, 0x7a, 0xc2, 0xb3, 0x6b, 0xdb, - 0xd8, 0x88, 0x6a, 0xcc, 0xd5, 0x65, 0x8a, 0xc4, 0x04, 0xad, 0xfd, 0x01, - 0x23, 0x5f, 0x90, 0x94, 0xd9, 0xc3, 0xab, 0x97, 0x88, 0xd9, 0x9a, 0x4d, - 0x7c, 0x3f, 0xc8, 0xce, 0x28, 0x39, 0x0b, 0x53, 0x4e, 0x5c, 0x29, 0x48, - 0x80, 0xd6, 0xc9, 0xcb, 0xfc, 0xad, 0xd6, 0x08, 0x12, 0x3b, 0x2f, 0xe7, - 0x0a, 0xcc, 0x0e, 0xb0, 0xee, 0x5e, 0x96, 0xfb, 0xb2, 0x60, 0x54, 0x91, - 0x44, 0xcd, 0x90, 0x97, 0x83, 0x8b, 0x00, 0x07, 0x3e, 0xd2, 0x2e, 0xdd, - 0x84, 0xbf, 0x60, 0x39, 0xb3, 0xe0, 0xc6, 0x98, 0x01, 0x94, 0x07, 0xa5, - 0xf1, 0xab, 0xb3, 0x6e, 0xe1, 0x57, 0x67, 0x7f, 0xdd, 0x2e, 0x6c, 0x42, - 0xd4, 0xd6, 0xb6, 0xfc, 0x94, 0xc0, 0x45, 0x14, 0x90, 0xc0, 0x75, 0x44, - 0xd6, 0x6f, 0x08, 0xe4, 0x5c, 0x1c, 0x77, 0xff, 0xa7, 0x93, 0xca, 0x01, - 0x5a, 0x71, 0xf6, 0x69, 0xe5, 0xae, 0xb5, 0x41, 0x2f, 0x6a, 0x3c, 0xfe, - 0x11, 0x89, 0x4b, 0x78, 0x17, 0xe2, 0x3a, 0xbb, 0x4b, 0x61, 0xf3, 0x5c, - 0x98, 0x6d, 0x9e, 0x33, 0xf0, 0xfe, 0x87, 0x32, 0x3c, 0x49, 0xeb, 0xce, - 0xcb, 0x8f, 0xfd, 0xa0, 0xb7, 0xd5, 0x91, 0xf9, 0xc2, 0xf4, 0x65, 0x80, - 0x1c, 0x51, 0x93, 0xd8, 0x59, 0x0f, 0x30, 0x73, 0x72, 0x3f, 0xf8, 0xc4, - 0x26, 0xb8, 0xb3, 0xc6, 0x68, 0xa6, 0x2f, 0x68, 0x4f, 0x1e, 0xcc, 0x6e, - 0x60, 0xab, 0xb7, 0xc5, 0xbb, 0xbc, 0xe3, 0x30, 0xfd, 0x00, 0x27, 0x82, - 0x86, 0xf4, 0xce, 0x4c, 0x59, 0xf8, 0x4b, 0xb4, 0x27, 0xae, 0x48, 0x9e, - 0xbe, 0x2b, 0xf7, 0x70, 0x93, 0xa7, 0x3a, 0xd5, 0x0f, 0xb2, 0xfa, 0xba, - 0xba, 0xc5, 0x6c, 0xbf, 0xdb, 0xb3, 0xfd, 0x9c, 0x02, 0x0b, 0xd8, 0x90, - 0xe7, 0xa0, 0x19, 0xe1, 0x7d, 0x1e, 0xdc, 0x3d, 0x2a, 0x65, 0x46, 0x9d, - 0xcc, 0x73, 0x90, 0x33, 0x49, 0x84, 0x9d, 0xa3, 0xa4, 0x58, 0xf2, 0x43, - 0x1a, 0xe8, 0x57, 0xb3, 0xcb, 0xff, 0xfc, 0x6e, 0x12, 0x9e, 0xfd, 0x35, - 0x03, 0x5e, 0x4a, 0xc4, 0x5c, 0x10, 0x73, 0xa1, 0x35, 0x92, 0x6f, 0x03, - 0x93, 0xcb, 0x08, 0x3d, 0xde, 0xf2, 0xaa, 0x4f, 0xba, 0x4b, 0x0a, 0x68, - 0x78, 0x5c, 0xe4, 0xbf, 0x22, 0xbe, 0xca, 0x08, 0x99, 0x97, 0x52, 0xe5, - 0xc5, 0x4a, 0xe4, 0xdf, 0x0b, 0x4c, 0x00, 0x97, 0x9f, 0x30, 0x65, 0x7b, - 0xde, 0xa2, 0xc0, 0xf4, 0x18, 0x6c, 0x4f, 0xdb, 0xfe, 0x57, 0x58, 0xaf, - 0xb4, 0x5e, 0x23, 0x53, 0xdb, 0xea, 0xce, 0xcc, 0x0c, 0xa4, 0x8a, 0x0e, - 0x18, 0x63, 0x8d, 0xea, 0x81, 0x3c, 0xd1, 0x01, 0x9c, 0xaa, 0x6d, 0x3d, - 0xca, 0x3c, 0x04, 0xb4, 0x45, 0xf9, 0x5e, 0x02, 0x47, 0xe4, 0x55, 0xd9, - 0xaa, 0x6a, 0x6b, 0x86, 0x42, 0x37, 0x17, 0xf0, 0x43, 0xe0, 0x41, 0xcb, - 0xb5, 0x2c, 0xcb, 0x4f, 0xc0, 0x60, 0xc2, 0x3a, 0x74, 0x7e, 0x3b, 0x24, - 0x95, 0x21, 0xa7, 0xf4, 0xa8, 0xed, 0xf2, 0x43, 0xfb, 0xb7, 0x84, 0x0f, - 0x8f, 0xe0, 0x60, 0xce, 0x8f, 0x01, 0x69, 0x1e, 0x51, 0xf8, 0x03, 0x65, - 0x3f, 0x2c, 0x7c, 0x1b, 0xd1, 0xed, 0x3f, 0x5c, 0xfe, 0xe0, 0xf2, 0x87, - 0x00, 0x7f, 0xe6, 0xe3, 0xfd, 0x73, 0x41, 0xab, 0x7a, 0xb7, 0x79, 0x2a, - 0x00, 0x62, 0x0e, 0x01, 0xa7, 0x99, 0x9e, 0xa7, 0xe1, 0xf2, 0xeb, 0x7f, - 0xcf, 0xd0, 0xa7, 0x65, 0xd0, 0x2b, 0xa0, 0x99, 0x93, 0x27, 0x10, 0xc0, - 0x92, 0x30, 0xf4, 0xfe, 0x27, 0x24, 0xa0, 0x70, 0x72, 0x14, 0x6e, 0x2e, - 0x16, 0x95, 0x2c, 0x34, 0x40, 0x24, 0x49, 0xa1, 0x28, 0x45, 0xa2, 0x61, - 0x16, 0x98, 0x11, 0xba, 0xf5, 0x21, 0xfb, 0x40, 0x06, 0x14, 0xc8, 0xf3, - 0x3d, 0xc4, 0x42, 0x30, 0x45, 0xa7, 0x86, 0x50, 0xc9, 0x2e, 0x42, 0x95, - 0x00, 0x35, 0xc5, 0xa7, 0x40, 0x91, 0x59, 0x43, 0xf2, 0x6f, 0x04, 0x3e, - 0x4b, 0x10, 0xa8, 0x04, 0x17, 0xb6, 0xba, 0xa8, 0xd5, 0xf3, 0x65, 0xa6, - 0xe7, 0xcb, 0xde, 0xd5, 0x69, 0xff, 0xc8, 0xd2, 0x35, 0xaa, 0x38, 0x24, - 0xb0, 0xcd, 0x78, 0xd0, 0xa0, 0xfd, 0x23, 0x82, 0x9b, 0xe9, 0xc1, 0xef, - 0x0f, 0x0b, 0x6e, 0x4e, 0xc3, 0x3d, 0x9c, 0x86, 0x3b, 0x9c, 0x4c, 0x65, - 0x6d, 0xfb, 0x8f, 0x1a, 0x1d, 0x56, 0xb8, 0xae, 0x74, 0x5d, 0xa3, 0x44, - 0xa6, 0xfc, 0xfe, 0x1c, 0xc2, 0xcd, 0x1d, 0x28, 0xd7, 0x95, 0x00, 0x37, - 0x40, 0x04, 0x0f, 0x44, 0x7f, 0xd6, 0xd9, 0x86, 0xb1, 0xb8, 0x17, 0xb4, - 0x65, 0x08, 0x78, 0x61, 0xd2, 0x0e, 0x23, 0x6c, 0x03, 0xb4, 0x99, 0xae, - 0x51, 0x2d, 0xd3, 0x74, 0x0f, 0xc1, 0xcd, 0xd9, 0xf6, 0xa8, 0xf6, 0x11, - 0xb6, 0x1a, 0xc2, 0x8d, 0x90, 0xed, 0x46, 0x1e, 0xf1, 0xa0, 0x02, 0x05, - 0xbf, 0x30, 0x9d, 0xfb, 0x6b, 0xb8, 0xad, 0x67, 0xdc, 0x8c, 0x66, 0x07, - 0xe0, 0xfe, 0xcd, 0xbd, 0xf2, 0xd3, 0xe0, 0x1c, 0xaa, 0x0b, 0x88, 0x8b, - 0x1b, 0x11, 0x7b, 0x33, 0x2d, 0xe5, 0x27, 0xa7, 0x87, 0xa7, 0xe6, 0x87, - 0x27, 0x9e, 0x3d, 0x70, 0xf0, 0x36, 0x63, 0xc2, 0x87, 0x78, 0x5e, 0x42, - 0x44, 0xd5, 0x40, 0xf9, 0x89, 0x32, 0x3d, 0xfd, 0x46, 0x61, 0x98, 0xb4, - 0xf1, 0x5d, 0xae, 0x9b, 0xb2, 0xf9, 0x44, 0x1a, 0x0e, 0x3c, 0x8d, 0x86, - 0x2c, 0xea, 0xc1, 0x0f, 0x63, 0xb8, 0xa4, 0x9a, 0x7e, 0xdf, 0x83, 0x3b, - 0xbc, 0x91, 0x24, 0x45, 0xd4, 0x2e, 0xa0, 0xf6, 0x48, 0xc0, 0x74, 0x32, - 0x30, 0xbf, 0xdd, 0xf0, 0xff, 0x95, 0x01, 0x36, 0xec, 0x0d, 0x20, 0x6f, - 0x8e, 0xe2, 0x3b, 0x76, 0x7f, 0x75, 0x88, 0xff, 0xab, 0xa9, 0x2f, 0x86, - 0x00, 0xda, 0x8d, 0x6d, 0x6a, 0xa3, 0x83, 0xc3, 0xa8, 0x99, 0xb1, 0x86, - 0x72, 0x4b, 0x17, 0x41, 0xc7, 0xbf, 0x3d, 0x5b, 0x14, 0xfe, 0x4d, 0x63, - 0xf9, 0xe0, 0xd9, 0xa2, 0x7c, 0xda, 0x50, 0x2c, 0x32, 0x1a, 0x62, 0x3d, - 0x2d, 0xbe, 0x9d, 0x80, 0xe0, 0xfa, 0xf4, 0xeb, 0x89, 0x56, 0xca, 0xb6, - 0x28, 0xf3, 0xbf, 0xe2, 0xff, 0x50, 0x3c, 0xeb, 0xb0, 0x9a, 0xe1, 0xe9, - 0x9b, 0x64, 0xdb, 0x72, 0x2c, 0xb9, 0xb6, 0x23, 0xaf, 0x82, 0x00, 0xee, - 0xd7, 0x05, 0xdd, 0x2e, 0xdb, 0x8e, 0x88, 0x4d, 0xde, 0xed, 0x5e, 0x1c, - 0xb8, 0x17, 0x88, 0xc0, 0x21, 0x00, 0x3f, 0x4d, 0xe2, 0x17, 0x5e, 0x1c, - 0xb8, 0x97, 0x98, 0xc8, 0xc7, 0x07, 0x22, 0x79, 0x20, 0xc0, 0x64, 0x99, - 0x8a, 0x29, 0x7d, 0x44, 0x18, 0x86, 0x80, 0xcc, 0x1c, 0x12, 0x73, 0xca, - 0xcb, 0x29, 0x2d, 0x37, 0xd3, 0x9e, 0xf6, 0x31, 0xf3, 0xed, 0xed, 0x73, - 0xf4, 0x04, 0xe6, 0xfb, 0x75, 0x32, 0xc9, 0x99, 0xa3, 0x68, 0xf0, 0x86, - 0x42, 0x8a, 0x06, 0xd9, 0xb9, 0x19, 0x91, 0xd6, 0xcc, 0x42, 0x9a, 0x28, - 0x1d, 0x59, 0x33, 0x18, 0x31, 0xa1, 0x81, 0x37, 0x54, 0x16, 0xaf, 0xce, - 0xf9, 0x1e, 0x8a, 0x49, 0x0c, 0x61, 0x2c, 0x6a, 0x28, 0xba, 0x87, 0x8b, - 0xe0, 0x4f, 0x6e, 0x74, 0x21, 0x89, 0x0f, 0x9d, 0x24, 0xa0, 0x51, 0xe4, - 0x19, 0x49, 0x33, 0xe5, 0xf8, 0x14, 0x90, 0xd2, 0x53, 0x46, 0x4f, 0xb1, - 0xfc, 0xe9, 0x8a, 0x94, 0x11, 0xa2, 0x82, 0x7b, 0x06, 0x18, 0xe1, 0x34, - 0xdb, 0x39, 0x8c, 0xe1, 0x03, 0x84, 0xe7, 0xa7, 0x2a, 0x74, 0x06, 0x0e, - 0x17, 0xfb, 0xc3, 0xf0, 0xee, 0xf2, 0x7d, 0xfb, 0x47, 0x1e, 0xed, 0x12, - 0xcc, 0x6e, 0x95, 0xe8, 0x3e, 0xb7, 0x3b, 0xb8, 0x97, 0x2e, 0xff, 0x3f, - 0xfd, 0x98, 0x97, 0xfd, 0x17, 0xff, 0xf7, 0x38, 0xe3, 0x1c, 0xc0, 0x19, - 0x5a, 0x1d, 0x9a, 0x11, 0xa3, 0xe2, 0xc8, 0x89, 0x7f, 0xdc, 0xd0, 0x77, - 0x46, 0x9f, 0xf9, 0x71, 0x58, 0x20, 0xce, 0xf7, 0xbb, 0x47, 0x07, 0xee, - 0x13, 0xa7, 0x86, 0x1c, 0x98, 0xd7, 0xee, 0x0c, 0xc1, 0x39, 0x62, 0x00, - 0x88, 0x9b, 0x59, 0x2e, 0xd2, 0x8f, 0xd0, 0x95, 0x81, 0x2b, 0xc2, 0xda, - 0x08, 0xea, 0xdb, 0x26, 0x24, 0xfb, 0xc1, 0xc8, 0x35, 0x7e, 0xfc, 0x58, - 0xc7, 0xb9, 0xf8, 0xb9, 0xb1, 0x73, 0x81, 0x4e, 0x63, 0x07, 0x6f, 0x33, - 0x86, 0xb6, 0xd4, 0x6c, 0x01, 0x16, 0x1f, 0xff, 0x97, 0x41, 0x74, 0x2c, - 0x50, 0x16, 0x74, 0xc4, 0x25, 0x9e, 0x1e, 0x34, 0x33, 0x12, 0x68, 0xa0, - 0x5c, 0x8c, 0x41, 0xa0, 0xc3, 0x04, 0x71, 0x7c, 0xc0, 0xb3, 0x8b, 0x83, - 0x04, 0x67, 0x5c, 0x2c, 0xcd, 0x73, 0x04, 0x79, 0x8a, 0x20, 0x10, 0x7c, - 0xcf, 0x36, 0x24, 0xc6, 0xa1, 0x02, 0x1c, 0x29, 0x70, 0x63, 0x76, 0xc3, - 0x0b, 0xec, 0xa6, 0x15, 0xb8, 0x01, 0x04, 0x5a, 0xee, 0xdb, 0xdb, 0x0d, - 0x6b, 0x88, 0x0e, 0x9c, 0x74, 0xe5, 0x37, 0x6e, 0x06, 0xe9, 0xfa, 0x78, - 0x23, 0xc5, 0xe5, 0x83, 0xb8, 0x3e, 0x8c, 0xcb, 0xc6, 0x4b, 0xd3, 0xf5, - 0xe7, 0xd6, 0x85, 0x49, 0x70, 0xd5, 0xb9, 0x14, 0x8f, 0x12, 0xe7, 0x18, - 0x1c, 0xdc, 0x2f, 0x61, 0xe3, 0x59, 0x2c, 0xbf, 0xf4, 0xa7, 0xb3, 0x0c, - 0x86, 0x7d, 0x25, 0x88, 0x53, 0x0c, 0x6e, 0xc6, 0xd0, 0xb4, 0x60, 0x7d, - 0xda, 0x4c, 0x06, 0x7b, 0x31, 0xcc, 0xcb, 0x7d, 0xc6, 0x82, 0xc3, 0x4c, - 0x7a, 0xe0, 0x32, 0x62, 0x31, 0x95, 0x02, 0xfe, 0xef, 0x19, 0xb5, 0x73, - 0x0d, 0x51, 0x9d, 0x0e, 0xe9, 0x3b, 0x32, 0x5f, 0x9f, 0xf1, 0x4f, 0xdb, - 0xfa, 0x6c, 0xc3, 0x6e, 0xe4, 0xdf, 0x57, 0x3d, 0x38, 0xff, 0xe0, 0x66, - 0xf8, 0xb1, 0x5b, 0x9d, 0xc1, 0x07, 0x6d, 0x70, 0xbd, 0x94, 0x18, 0x44, - 0x1a, 0x14, 0x8a, 0x73, 0x03, 0x0e, 0x10, 0x64, 0xf8, 0x0f, 0x8c, 0xd0, - 0x6d, 0x02, 0x0e, 0x8f, 0x10, 0xee, 0x9f, 0xd1, 0x15, 0xd1, 0x0f, 0x8b, - 0x86, 0xc9, 0x92, 0xe3, 0x64, 0xc1, 0x40, 0xd9, 0x1d, 0x95, 0x00, 0x46, - 0xf4, 0x7e, 0xa9, 0x26, 0x02, 0xcd, 0xbf, 0x0a, 0x34, 0xfb, 0x62, 0xc4, - 0x0e, 0x4a, 0xfc, 0xa3, 0xe3, 0x12, 0x0d, 0x58, 0xe1, 0xf7, 0x96, 0xee, - 0x5e, 0xea, 0xc7, 0x85, 0x51, 0xe7, 0xce, 0x13, 0x35, 0x7f, 0x17, 0x57, - 0x2d, 0x10, 0xe6, 0x62, 0xfa, 0x7d, 0xda, 0xa6, 0x3e, 0x88, 0xf5, 0xf9, - 0x0e, 0x46, 0x60, 0x90, 0x06, 0x86, 0x79, 0xb9, 0x95, 0xb7, 0x4f, 0x3d, - 0x86, 0xef, 0xe3, 0xe5, 0x31, 0x2f, 0x22, 0x1f, 0x50, 0x07, 0x0f, 0x0c, - 0x04, 0x21, 0xfa, 0x9f, 0x9f, 0xd1, 0x2f, 0x2b, 0xf1, 0xfa, 0x5c, 0xae, - 0x0e, 0x8b, 0xe9, 0x83, 0x36, 0x33, 0x28, 0x1d, 0x63, 0xf8, 0x73, 0x66, - 0x56, 0x11, 0xb6, 0x73, 0x17, 0x91, 0x09, 0xc3, 0xef, 0x0a, 0x6b, 0x37, - 0x47, 0x7f, 0xd1, 0x22, 0xf8, 0xf8, 0x46, 0x78, 0x21, 0xfc, 0x44, 0x43, - 0xfb, 0xcf, 0x18, 0x13, 0x9b, 0xbf, 0xf7, 0x04, 0x6f, 0x2d, 0xba, 0xb6, - 0xb3, 0xb4, 0xa8, 0x1b, 0x36, 0x6d, 0xa8, 0xaf, 0x4b, 0xa5, 0x53, 0x8d, - 0x8b, 0x05, 0x7e, 0xbe, 0xe4, 0xdd, 0x8c, 0x32, 0xf8, 0x5f, 0xf1, 0xff, - 0x56, 0xe9, 0xef, 0xcb, 0xde, 0xe6, 0xae, 0xf7, 0xe5, 0xf4, 0x27, 0xb2, - 0xcc, 0xb4, 0x5a, 0xb5, 0x43, 0x27, 0xd3, 0x42, 0xf0, 0x36, 0x63, 0x8b, - 0x31, 0x2b, 0x90, 0xb5, 0x0b, 0x47, 0xe6, 0x64, 0xe1, 0x4d, 0xd0, 0xe8, - 0x6f, 0xd0, 0xbd, 0x07, 0x8c, 0x12, 0x6f, 0x5f, 0x84, 0xc1, 0x98, 0x9b, - 0xb9, 0xb7, 0xe1, 0x40, 0xe7, 0x56, 0xde, 0x4b, 0xdb, 0xbd, 0xba, 0xff, - 0x65, 0x8a, 0xfe, 0x66, 0xa0, 0x79, 0x58, 0x76, 0x77, 0xc5, 0x99, 0x96, - 0x77, 0x75, 0xce, 0x86, 0x1b, 0xe0, 0xf3, 0x7c, 0x62, 0x3f, 0xea, 0x06, - 0xa8, 0x56, 0x8c, 0x66, 0xbe, 0xfd, 0xcf, 0xe2, 0xe4, 0x39, 0x98, 0x8f, - 0xc9, 0x2f, 0x5a, 0x70, 0x37, 0x3d, 0xcf, 0x86, 0x6c, 0xc3, 0xff, 0xb1, - 0xd3, 0x12, 0x6d, 0xb5, 0xd6, 0x00, 0xc4, 0x9b, 0x9f, 0xa1, 0x7d, 0x93, - 0xd6, 0xe8, 0xe7, 0x86, 0xbc, 0xc1, 0x7d, 0x86, 0x18, 0xdc, 0x3f, 0x03, - 0x4a, 0x6e, 0xa0, 0xa5, 0x31, 0xec, 0x50, 0xfe, 0xfc, 0x19, 0x1f, 0xed, - 0x37, 0xdf, 0x1c, 0xce, 0xe2, 0x43, 0x19, 0x6e, 0x05, 0x31, 0x43, 0x1f, - 0xae, 0x27, 0x2c, 0x51, 0x23, 0xdb, 0xf7, 0x71, 0x13, 0x41, 0x3c, 0xc4, - 0x63, 0xbc, 0x9a, 0xf4, 0x6a, 0x80, 0xe5, 0xc3, 0x2d, 0x3d, 0x32, 0xbc, - 0x0b, 0x65, 0xc0, 0xa7, 0x24, 0x00, 0x2b, 0x79, 0x43, 0xe6, 0xa3, 0x6d, - 0x20, 0xad, 0xc5, 0x7e, 0xac, 0x51, 0x7b, 0x22, 0xce, 0x64, 0xfa, 0xb8, - 0xf6, 0x47, 0x33, 0xac, 0xd6, 0x9b, 0x61, 0x63, 0x5c, 0x33, 0x9c, 0x29, - 0xf2, 0x59, 0x16, 0x7f, 0x0e, 0x3c, 0xbc, 0x2f, 0x6d, 0x86, 0x27, 0x58, - 0x88, 0x58, 0x80, 0xa5, 0xcf, 0xfe, 0x62, 0xdc, 0xb0, 0x28, 0xec, 0x22, - 0x7e, 0x4c, 0x83, 0xe0, 0x43, 0x09, 0xc1, 0x16, 0x7d, 0xa0, 0xc1, 0xc8, - 0x91, 0x9a, 0xab, 0xc3, 0xe8, 0x14, 0x0e, 0x97, 0x6b, 0x42, 0x44, 0xb4, - 0x82, 0xdd, 0xfb, 0x69, 0x9b, 0xc8, 0xfb, 0xe5, 0x56, 0xdf, 0x93, 0x43, - 0xc5, 0xd9, 0xb0, 0x77, 0x73, 0x56, 0xda, 0xfb, 0x85, 0x9e, 0xfb, 0xff, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0x47, 0x4b, 0xc8, 0xf0, 0xea, 0x06, - 0x00, - }, - "words/dict/adjectives.txt", - ) -} - -func words_dict_nouns_txt() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x6c, 0x7d, - 0xeb, 0x9a, 0x83, 0x2a, 0xd3, 0xec, 0xff, 0x75, 0x97, 0x26, 0x32, 0x09, - 0x2b, 0x2a, 0xbe, 0x88, 0xc9, 0x98, 0xab, 0xdf, 0x5d, 0x55, 0xdd, 0xe8, - 0xac, 0x6f, 0x3f, 0x33, 0xa1, 0xab, 0x91, 0xf3, 0xf9, 0xd0, 0xc0, 0x30, - 0xfc, 0x33, 0x0c, 0xa9, 0xe6, 0x61, 0x5a, 0xd2, 0xb6, 0x19, 0x9e, 0x72, - 0x36, 0xb5, 0x8e, 0xef, 0xa1, 0xbe, 0x08, 0x3e, 0x65, 0xfa, 0xf9, 0x67, - 0xb8, 0xd9, 0xff, 0x80, 0xdf, 0x9d, 0x8a, 0x60, 0xde, 0xee, 0xfb, 0xe6, - 0xa8, 0x91, 0xee, 0x93, 0x6b, 0x88, 0x4c, 0x65, 0x49, 0xa0, 0xf3, 0x2a, - 0x35, 0x55, 0xb2, 0xcb, 0x68, 0xfa, 0x27, 0xaa, 0x81, 0xe6, 0xb4, 0xd0, - 0x99, 0xb5, 0x99, 0x7b, 0x65, 0x01, 0xdc, 0xf4, 0x75, 0x7b, 0xa6, 0x51, - 0x01, 0x04, 0x0e, 0x73, 0x5b, 0x66, 0x38, 0xda, 0xf0, 0xa0, 0x63, 0x2d, - 0xc5, 0x87, 0x26, 0x5b, 0xe6, 0x0c, 0xc9, 0xbf, 0x65, 0x17, 0x5f, 0x44, - 0xba, 0x85, 0x56, 0x32, 0x74, 0x10, 0x39, 0xc6, 0xce, 0x02, 0x7e, 0x80, - 0xc8, 0xa7, 0x5b, 0x12, 0x73, 0x6c, 0x2d, 0x0d, 0x23, 0x60, 0x69, 0x52, - 0x65, 0xaa, 0xb4, 0xed, 0x99, 0x11, 0xb3, 0x1b, 0x1d, 0xa9, 0xe9, 0x9d, - 0xcd, 0x4b, 0x86, 0xdb, 0x19, 0xfa, 0x77, 0x2f, 0xfb, 0x54, 0x66, 0xf8, - 0x01, 0x37, 0xc6, 0x7c, 0x0f, 0x43, 0x84, 0x34, 0x32, 0x16, 0x0b, 0x39, - 0xe8, 0x7e, 0x4f, 0xcb, 0x26, 0x10, 0x86, 0x0c, 0xd1, 0x4c, 0xba, 0xa7, - 0x71, 0xb0, 0x8c, 0x5a, 0x4e, 0xbc, 0xcf, 0x1d, 0x23, 0x40, 0x69, 0x4a, - 0x54, 0xe7, 0xb2, 0xbd, 0x00, 0xea, 0x92, 0xda, 0x93, 0x1f, 0x6a, 0x1d, - 0x96, 0x7b, 0xea, 0x28, 0xf4, 0xdc, 0x0b, 0x8b, 0x2d, 0xbf, 0x35, 0x4f, - 0xbe, 0x64, 0x09, 0x34, 0x89, 0xca, 0xe7, 0xc3, 0x6d, 0xff, 0x0c, 0x95, - 0xe9, 0xf0, 0x4c, 0x0b, 0x3d, 0x7c, 0x96, 0x5a, 0x93, 0x3e, 0x11, 0xc2, - 0x70, 0x1e, 0xdd, 0x70, 0x1e, 0x9d, 0xcf, 0xcb, 0xc3, 0xb3, 0x2e, 0xa7, - 0x66, 0x59, 0x03, 0xf0, 0x18, 0x32, 0x7c, 0xc8, 0x53, 0x6e, 0x70, 0x28, - 0x97, 0x47, 0x32, 0x33, 0xcc, 0x2e, 0x62, 0x95, 0xa7, 0x5c, 0x42, 0xab, - 0xd5, 0xb2, 0x32, 0x2a, 0xb9, 0xd6, 0xdc, 0x22, 0xe0, 0xff, 0xa6, 0x7b, - 0xeb, 0xe5, 0x02, 0xcc, 0xa9, 0x1d, 0x9a, 0xfb, 0xd2, 0x75, 0xf7, 0x1e, - 0x61, 0x83, 0x0c, 0x1b, 0x82, 0x30, 0x0d, 0xf7, 0xee, 0xde, 0x74, 0x01, - 0x8c, 0xf9, 0x34, 0xec, 0x08, 0xc7, 0x94, 0x1e, 0x0a, 0xf7, 0x94, 0x56, - 0x95, 0xb9, 0x69, 0x77, 0x93, 0xf3, 0xb3, 0x40, 0x2d, 0xe3, 0xe0, 0x51, - 0x59, 0x60, 0x56, 0xdf, 0x08, 0xe9, 0xce, 0x52, 0xea, 0x3c, 0x4c, 0x4c, - 0x77, 0x41, 0x37, 0x4b, 0xec, 0x41, 0x05, 0x23, 0x6d, 0xb8, 0x58, 0xac, - 0xe6, 0xa9, 0x94, 0x96, 0x91, 0xea, 0x13, 0x79, 0x5d, 0x2c, 0x51, 0x87, - 0x1d, 0x60, 0xca, 0x56, 0x25, 0x6a, 0x20, 0xcf, 0x38, 0xc3, 0xee, 0xb5, - 0xa3, 0xbc, 0xcd, 0x57, 0x46, 0x66, 0x26, 0x44, 0xa0, 0xcc, 0xc3, 0xc6, - 0xe2, 0x43, 0xb0, 0x11, 0xe4, 0x05, 0x31, 0xf4, 0xe0, 0x90, 0x0d, 0xd7, - 0x88, 0x19, 0x93, 0xb2, 0x44, 0xfe, 0x96, 0x9a, 0x1f, 0xa6, 0xed, 0x51, - 0x11, 0x27, 0xfd, 0x96, 0xef, 0x79, 0x0c, 0x28, 0x07, 0xea, 0x25, 0x00, - 0x86, 0xdf, 0xdd, 0x97, 0xda, 0xe4, 0xf9, 0x3e, 0xe6, 0x57, 0x65, 0xc4, - 0xf7, 0x89, 0x29, 0x8c, 0x7a, 0x05, 0x0f, 0xad, 0xc4, 0x25, 0xd1, 0x2d, - 0xa8, 0xdc, 0x04, 0x78, 0x27, 0x82, 0xdf, 0x61, 0x23, 0xfd, 0xc2, 0x81, - 0x9a, 0x86, 0xc8, 0xf2, 0x9a, 0xa9, 0x8c, 0x0f, 0xd9, 0x34, 0xe0, 0x09, - 0x55, 0x4b, 0xcf, 0x24, 0x42, 0x46, 0xad, 0xee, 0x6b, 0xe8, 0x19, 0xf2, - 0x00, 0xf2, 0x77, 0x77, 0x6c, 0xcd, 0xdc, 0x36, 0x04, 0x90, 0xd1, 0xed, - 0x6e, 0x29, 0x42, 0xe7, 0x37, 0xaf, 0x09, 0x46, 0x7b, 0x81, 0x02, 0x4e, - 0xa9, 0x03, 0x65, 0x07, 0xb1, 0xdb, 0x68, 0x8c, 0x2b, 0x40, 0xf8, 0x97, - 0x97, 0xf6, 0x4c, 0x01, 0xdc, 0x42, 0xb1, 0xe2, 0x16, 0x29, 0x46, 0xc6, - 0x5d, 0x27, 0x3c, 0x8d, 0x28, 0x7d, 0x0d, 0xbe, 0xe5, 0x7c, 0xa9, 0xb7, - 0xb3, 0x8a, 0x91, 0xf3, 0x10, 0x1a, 0xec, 0xd5, 0x86, 0xcc, 0x8f, 0xb5, - 0xe0, 0x4a, 0x19, 0xb2, 0x6a, 0x21, 0x08, 0xdd, 0xa1, 0xb5, 0x9d, 0x76, - 0x91, 0x4a, 0x73, 0x6a, 0xe7, 0xa7, 0x08, 0x0d, 0xe0, 0xfb, 0x0c, 0x27, - 0x59, 0xf7, 0xbc, 0x0d, 0x59, 0xed, 0xbc, 0x35, 0xa5, 0x73, 0x2e, 0xfb, - 0x16, 0xa6, 0x1a, 0xd2, 0x40, 0xf6, 0xcd, 0xc5, 0xed, 0x0a, 0x4f, 0xa7, - 0x9a, 0x59, 0x76, 0xef, 0x9b, 0x1c, 0xa9, 0xc3, 0xa5, 0xe6, 0x3b, 0x7b, - 0x7e, 0x09, 0x57, 0x1c, 0x7b, 0x12, 0x9d, 0x6c, 0x3b, 0xd9, 0x8b, 0x27, - 0xe0, 0x4f, 0x26, 0x5f, 0x9c, 0xd9, 0xb7, 0x8b, 0xa9, 0x7d, 0xf3, 0x38, - 0xed, 0x75, 0x3c, 0x91, 0x7f, 0x87, 0xcb, 0x5e, 0x80, 0xf7, 0x5e, 0x53, - 0xac, 0xe1, 0x81, 0xba, 0xa9, 0x3e, 0xef, 0x2a, 0xc7, 0xfb, 0x25, 0x82, - 0x96, 0x75, 0x13, 0xfd, 0xda, 0xa3, 0x09, 0xde, 0xbd, 0x09, 0x36, 0x4a, - 0xd3, 0x6f, 0xfc, 0xca, 0x84, 0x4f, 0x1f, 0xeb, 0xb6, 0x8c, 0x1c, 0x8c, - 0xd4, 0x01, 0xfb, 0xd6, 0x25, 0xdf, 0x2d, 0x03, 0x07, 0x90, 0x91, 0x8a, - 0x75, 0x84, 0x4e, 0x5d, 0xd7, 0xc0, 0x9d, 0x5d, 0x47, 0x60, 0xd8, 0x16, - 0xee, 0xe8, 0x00, 0xb5, 0xae, 0x12, 0x64, 0xba, 0x2b, 0x16, 0x86, 0xd2, - 0xfa, 0x04, 0x45, 0x69, 0x6c, 0xc9, 0x51, 0xb9, 0x9b, 0xee, 0x30, 0xc9, - 0x41, 0xf0, 0x63, 0x3e, 0x31, 0xdb, 0x6c, 0xc2, 0x9d, 0x60, 0x5d, 0xe4, - 0xd2, 0xba, 0x26, 0xb6, 0x3d, 0x77, 0x6b, 0xda, 0xa4, 0x63, 0xbd, 0x99, - 0x1b, 0xae, 0xde, 0x64, 0x00, 0x8d, 0x22, 0x8b, 0xd8, 0x32, 0x95, 0x07, - 0x73, 0xcc, 0xf1, 0x21, 0xb4, 0x3e, 0xcb, 0xcd, 0x1d, 0x91, 0x2f, 0xfb, - 0x94, 0xac, 0x9e, 0x32, 0xc1, 0xef, 0x48, 0x10, 0x81, 0x34, 0x86, 0x56, - 0x62, 0x2d, 0x35, 0x3a, 0x49, 0x4d, 0xd6, 0x11, 0xb6, 0x0e, 0x95, 0xd7, - 0xc1, 0x94, 0x1a, 0x38, 0x0a, 0xba, 0x71, 0x6e, 0x7a, 0x89, 0xaf, 0x4b, - 0xdb, 0xbd, 0xf1, 0x73, 0xa6, 0xbb, 0x41, 0xc6, 0x4d, 0x59, 0xc5, 0x89, - 0x2a, 0xe8, 0x5c, 0xb4, 0xb0, 0x62, 0x23, 0x74, 0x84, 0xdd, 0x50, 0x77, - 0x6a, 0x65, 0xf3, 0x21, 0x10, 0x0e, 0xba, 0xcb, 0xee, 0x86, 0xb5, 0x48, - 0x48, 0xab, 0x0b, 0x77, 0x38, 0xca, 0x17, 0x8f, 0xbd, 0xb9, 0x22, 0x2a, - 0x7f, 0xcc, 0x1b, 0xb7, 0x9f, 0x98, 0xa6, 0xb3, 0xfd, 0x86, 0xc6, 0x52, - 0x7b, 0x47, 0xb6, 0x78, 0x18, 0x81, 0x5a, 0x07, 0x16, 0x77, 0x96, 0x9c, - 0x93, 0xfb, 0xf3, 0x4d, 0xfe, 0x3a, 0x17, 0xde, 0xd9, 0x58, 0x40, 0x2e, - 0xad, 0xd9, 0xa3, 0x33, 0x0d, 0x79, 0x0e, 0x34, 0xf7, 0x68, 0x4f, 0xf9, - 0xbf, 0x78, 0xfb, 0x2f, 0xef, 0x96, 0xc8, 0x7c, 0x2f, 0x1f, 0xdf, 0xee, - 0x73, 0x99, 0x06, 0x96, 0xa7, 0x7b, 0x99, 0xd1, 0x39, 0x87, 0x81, 0xe0, - 0xde, 0x3d, 0x13, 0x5c, 0x47, 0x89, 0x5a, 0xe6, 0x75, 0x58, 0x72, 0xba, - 0xe0, 0xd9, 0xe3, 0x2c, 0x6e, 0x3b, 0xf1, 0x71, 0x32, 0x53, 0xbe, 0xa7, - 0x0e, 0xd5, 0x2d, 0x77, 0xe6, 0x62, 0x5f, 0xb4, 0x8e, 0x4e, 0x22, 0xeb, - 0x01, 0x23, 0xb1, 0x0d, 0xbb, 0x6d, 0xab, 0x22, 0x1e, 0x62, 0xa2, 0xf0, - 0x6c, 0xbf, 0x3f, 0x53, 0x77, 0x12, 0xcc, 0x5e, 0x4f, 0xb8, 0xc9, 0xbd, - 0x3d, 0x3e, 0x2f, 0xd7, 0xb2, 0x27, 0xf6, 0x2c, 0x7c, 0xe4, 0xbd, 0xc8, - 0x09, 0xb7, 0x0b, 0xd4, 0xc0, 0x56, 0xac, 0x8d, 0xdf, 0x04, 0xd7, 0xe9, - 0xe2, 0xb7, 0x65, 0xe0, 0x85, 0xa9, 0xfd, 0x8b, 0x22, 0x52, 0xd3, 0x98, - 0xcf, 0x62, 0x4c, 0xae, 0x1b, 0x48, 0x5d, 0xbb, 0x0c, 0xf7, 0x9e, 0x40, - 0x75, 0x1f, 0x26, 0xd1, 0xee, 0x14, 0x95, 0x7d, 0x6a, 0xfb, 0x59, 0x3f, - 0x4f, 0xce, 0x53, 0x64, 0x9f, 0xa5, 0x7a, 0xa7, 0x05, 0xb8, 0x4f, 0xa7, - 0x71, 0x31, 0x67, 0x6e, 0x4b, 0x43, 0x99, 0x6d, 0x0e, 0xb9, 0x15, 0x73, - 0xf1, 0x34, 0x51, 0xb7, 0xe8, 0x58, 0x8c, 0xd9, 0x14, 0x28, 0xa3, 0x0a, - 0xd2, 0x7e, 0x16, 0x44, 0x4b, 0xee, 0xd1, 0xa9, 0x9c, 0xb3, 0x29, 0xcb, - 0xdc, 0xad, 0x22, 0x2b, 0xf8, 0x3d, 0xa9, 0xad, 0x83, 0xfb, 0xd6, 0xb1, - 0x6f, 0x62, 0xfe, 0xb7, 0x8b, 0xd6, 0x9b, 0x72, 0x27, 0xd5, 0xb1, 0x4c, - 0xa4, 0x6f, 0xcd, 0xa0, 0xee, 0x67, 0x63, 0x26, 0x44, 0x53, 0xf0, 0x81, - 0xf6, 0x1a, 0x7a, 0x19, 0x46, 0x3d, 0xb1, 0x9f, 0x20, 0x19, 0xd3, 0xf3, - 0x60, 0x99, 0x27, 0x53, 0x5c, 0x7b, 0xce, 0xa1, 0xb7, 0x58, 0x59, 0x38, - 0xf1, 0x86, 0x81, 0xb9, 0x73, 0x2d, 0xa8, 0xa2, 0x66, 0xe8, 0x6b, 0xf5, - 0xa7, 0xdb, 0xcc, 0x3f, 0x7d, 0xce, 0x22, 0x8e, 0x11, 0x36, 0x14, 0x8d, - 0xa3, 0x20, 0x1b, 0x0f, 0x83, 0x32, 0x56, 0x6e, 0xde, 0x27, 0x03, 0x87, - 0xde, 0x69, 0xa1, 0x9c, 0x16, 0x8a, 0x07, 0xc3, 0xf2, 0xd4, 0xba, 0xdd, - 0xc9, 0x99, 0xd5, 0x26, 0x19, 0xe6, 0xd8, 0x18, 0x56, 0xc1, 0x77, 0x93, - 0x98, 0x90, 0x55, 0xff, 0xe2, 0xc9, 0x70, 0x4c, 0x4e, 0x2c, 0xdc, 0x4b, - 0xb1, 0xe2, 0xf0, 0x4d, 0x6e, 0xda, 0xb4, 0x10, 0xf5, 0x93, 0xeb, 0x51, - 0x39, 0xa6, 0xbf, 0xe6, 0xee, 0xcf, 0x72, 0x31, 0x97, 0x2e, 0x08, 0x73, - 0x12, 0x67, 0x22, 0x55, 0x0c, 0x7d, 0xaf, 0x4e, 0xe5, 0xaf, 0x47, 0xed, - 0x98, 0x66, 0xcc, 0xbb, 0x26, 0xeb, 0x9a, 0x6e, 0x16, 0x14, 0x84, 0x0b, - 0x7d, 0xa5, 0xb2, 0xfe, 0x39, 0xc0, 0xd0, 0x33, 0xdd, 0x9f, 0x24, 0xf4, - 0xe2, 0x99, 0xd3, 0x3b, 0x0a, 0x3d, 0x31, 0x8d, 0xbc, 0xd8, 0xa3, 0x3e, - 0xa7, 0x52, 0x2d, 0x5b, 0xab, 0x2c, 0x97, 0x29, 0xe8, 0x1e, 0x3a, 0x8b, - 0x7d, 0x63, 0xfe, 0x11, 0x96, 0xb5, 0x7b, 0x54, 0x8b, 0xeb, 0x5b, 0x27, - 0x36, 0xb4, 0x0e, 0x4e, 0x2d, 0xeb, 0x72, 0x59, 0xf8, 0x9c, 0x5b, 0x4e, - 0xd8, 0x0b, 0x79, 0xf0, 0xf3, 0x89, 0xbf, 0x7f, 0xbf, 0x59, 0xbe, 0xe4, - 0x29, 0x3c, 0x9c, 0xcf, 0x4c, 0xcf, 0x56, 0x55, 0x87, 0xa0, 0x55, 0x1e, - 0x01, 0x33, 0xb7, 0xd8, 0xc5, 0xe7, 0x18, 0x9d, 0x58, 0x1e, 0x5f, 0x0a, - 0x18, 0x39, 0x39, 0x31, 0xf6, 0x02, 0x26, 0xc8, 0xf2, 0x92, 0x47, 0x77, - 0x2c, 0x6a, 0x5a, 0xb6, 0xa2, 0x7e, 0x68, 0x18, 0x91, 0xc7, 0x72, 0xda, - 0x28, 0xa1, 0x67, 0x01, 0x60, 0xd2, 0x12, 0x75, 0x5f, 0x6c, 0xbc, 0x20, - 0xdd, 0xb3, 0xf7, 0x57, 0x43, 0x97, 0x17, 0x56, 0xc0, 0x17, 0x7e, 0xec, - 0x7c, 0x5f, 0x58, 0x06, 0xb8, 0xbf, 0x96, 0xf2, 0x99, 0x92, 0xa6, 0x12, - 0x9d, 0xf1, 0x4c, 0x7b, 0x71, 0xb1, 0xe2, 0xce, 0xa2, 0x3b, 0x25, 0xac, - 0x5d, 0xf4, 0x31, 0x0e, 0x07, 0x62, 0xf3, 0xa5, 0xee, 0xcf, 0xca, 0x95, - 0x45, 0x8a, 0x52, 0x60, 0xe1, 0x1c, 0xef, 0x5e, 0x06, 0x26, 0x74, 0xb9, - 0x97, 0x86, 0x42, 0x53, 0xd2, 0x32, 0x5c, 0x2c, 0x5a, 0x2c, 0x69, 0x13, - 0xd5, 0x84, 0xb4, 0xc2, 0xcf, 0xb2, 0xf9, 0x08, 0x8e, 0x00, 0x81, 0x29, - 0x28, 0xb0, 0x23, 0x03, 0x54, 0x76, 0x77, 0xd1, 0xba, 0x87, 0x4c, 0xba, - 0xb1, 0xfd, 0x30, 0xda, 0x62, 0x3c, 0x28, 0x8c, 0x18, 0xb3, 0x83, 0xfa, - 0xdf, 0x6e, 0x23, 0xf5, 0x18, 0x96, 0x88, 0xe9, 0x6d, 0xda, 0xff, 0xf6, - 0xb4, 0xc9, 0x4c, 0x3e, 0x9b, 0x27, 0x63, 0xea, 0xd9, 0xcd, 0x80, 0x8b, - 0xa2, 0x4c, 0x5c, 0x05, 0x36, 0x9f, 0x98, 0x06, 0xee, 0x2d, 0xb2, 0xf1, - 0x1a, 0xea, 0x3a, 0xea, 0x8e, 0x6a, 0xe0, 0x6b, 0xdd, 0xc9, 0xd9, 0xae, - 0x55, 0x29, 0x1c, 0x46, 0xdf, 0x6b, 0xb4, 0x5f, 0x35, 0x4a, 0x44, 0xed, - 0x45, 0xa2, 0xe6, 0x9f, 0x69, 0x78, 0xc7, 0xe7, 0xd9, 0x52, 0xac, 0xcf, - 0x38, 0xc4, 0xd3, 0xb8, 0x15, 0xd6, 0x16, 0x54, 0x29, 0x50, 0x7d, 0x5c, - 0xab, 0xcf, 0xf7, 0x63, 0x58, 0xbc, 0x10, 0xd5, 0x62, 0x09, 0xea, 0xf5, - 0xc0, 0xf0, 0xa1, 0x11, 0x6d, 0xf5, 0x56, 0xc1, 0x68, 0x1d, 0xb8, 0x3c, - 0x61, 0xd0, 0xf2, 0x5f, 0x7a, 0x96, 0x22, 0x4f, 0x01, 0x0d, 0x5a, 0x31, - 0x96, 0x7c, 0x84, 0xdb, 0x36, 0x04, 0xaf, 0xee, 0xc6, 0xac, 0x84, 0xa9, - 0xa1, 0x1e, 0xf2, 0x64, 0x1d, 0x9a, 0xbb, 0xd8, 0x87, 0xba, 0x84, 0x1e, - 0xf6, 0x15, 0xf3, 0x7e, 0xa2, 0x6d, 0xcd, 0x4a, 0x18, 0x43, 0x25, 0x90, - 0x45, 0xc8, 0x81, 0x99, 0xdb, 0xe5, 0xa2, 0x27, 0x28, 0x68, 0x78, 0x09, - 0x18, 0x5f, 0x3d, 0x76, 0xd6, 0x3e, 0x5e, 0x52, 0x1c, 0xad, 0xa5, 0x83, - 0x4b, 0xf3, 0x6c, 0x1c, 0x9b, 0x5b, 0x24, 0xdf, 0x65, 0x8c, 0xd1, 0x50, - 0x7d, 0xd4, 0x90, 0x98, 0xca, 0x20, 0x83, 0xd2, 0x25, 0x00, 0x7a, 0x00, - 0xb0, 0x3b, 0x40, 0x73, 0x91, 0xa7, 0xc9, 0x13, 0xf9, 0xd4, 0xd8, 0x83, - 0xc5, 0x68, 0xc7, 0x4a, 0x35, 0x2b, 0x3e, 0x78, 0x1b, 0x1d, 0xa1, 0x0d, - 0x6a, 0xdd, 0xbc, 0x25, 0xfc, 0x7c, 0x42, 0xce, 0x54, 0x3a, 0x0e, 0x4b, - 0x93, 0xea, 0x0b, 0xa1, 0xb2, 0x02, 0x70, 0xe6, 0x5a, 0xa4, 0x43, 0x25, - 0x8d, 0xe3, 0xee, 0xdb, 0x6c, 0x53, 0xd8, 0xee, 0xca, 0x7c, 0x58, 0xff, - 0x7b, 0xc1, 0xdd, 0x4d, 0x63, 0x22, 0xca, 0xc0, 0x97, 0xc8, 0x84, 0xee, - 0x5a, 0x46, 0x47, 0x56, 0x99, 0x2d, 0x64, 0xe1, 0xa4, 0x8d, 0x3b, 0x2e, - 0x69, 0xf1, 0x2d, 0x83, 0x2c, 0xb8, 0xbd, 0xf7, 0x70, 0x85, 0x45, 0x01, - 0xec, 0xf5, 0x06, 0x53, 0x6b, 0x4f, 0xcf, 0xb7, 0xea, 0x7d, 0x4c, 0xb6, - 0xef, 0xd6, 0xb7, 0x1e, 0x16, 0x0a, 0x5a, 0x95, 0x03, 0xb2, 0x5c, 0xdd, - 0x26, 0xa6, 0x2d, 0xbd, 0x85, 0x17, 0x37, 0x77, 0xd4, 0x02, 0xc9, 0x29, - 0xa0, 0xef, 0xd5, 0xec, 0xd2, 0x1d, 0xa9, 0x6e, 0xe0, 0xfc, 0x28, 0x7f, - 0x76, 0x59, 0xb5, 0xf6, 0x95, 0xd9, 0xb8, 0x73, 0x65, 0xd3, 0x48, 0x5f, - 0x4e, 0xba, 0xef, 0x2b, 0x56, 0xe5, 0x76, 0xa6, 0xbf, 0xcc, 0x6c, 0xb1, - 0x76, 0x27, 0x28, 0x77, 0xa2, 0x31, 0xe8, 0x6b, 0x1f, 0x77, 0x16, 0xba, - 0xb3, 0x03, 0xb7, 0x32, 0x89, 0x58, 0x5a, 0xe2, 0x6a, 0xa9, 0x6c, 0x1c, - 0xe6, 0x8d, 0x79, 0x3d, 0x0e, 0x97, 0x69, 0x97, 0x98, 0x18, 0xf8, 0x92, - 0x93, 0x7d, 0xc0, 0x68, 0xdb, 0x88, 0xab, 0x68, 0x4f, 0xe4, 0x11, 0x1d, - 0x78, 0x53, 0x0d, 0x19, 0xd1, 0x56, 0x8c, 0xe3, 0xf0, 0x0b, 0x35, 0x2d, - 0xa3, 0x13, 0x7e, 0xe2, 0x98, 0x7d, 0x1c, 0xf3, 0xb9, 0x24, 0x41, 0x46, - 0x9e, 0x60, 0x1c, 0xac, 0x06, 0x11, 0xd0, 0xf5, 0xaa, 0x9b, 0x02, 0x45, - 0x1f, 0xe3, 0xa8, 0x06, 0x2a, 0x44, 0xfb, 0x3d, 0x39, 0x0d, 0x7b, 0xbe, - 0x16, 0x3c, 0x26, 0x74, 0x69, 0xc3, 0x58, 0x00, 0x67, 0x5f, 0x80, 0xb1, - 0xe0, 0x0c, 0xd3, 0x03, 0xb5, 0xce, 0x50, 0x62, 0x29, 0x20, 0x64, 0x33, - 0x08, 0xca, 0x5a, 0x63, 0x00, 0x9d, 0xd3, 0x1d, 0x85, 0x55, 0x46, 0xcb, - 0xf3, 0x58, 0xb1, 0xb8, 0xba, 0xc5, 0x67, 0xab, 0xb0, 0xa7, 0x6d, 0xaf, - 0x32, 0x40, 0x61, 0xde, 0x1a, 0xa1, 0x2a, 0x27, 0x8b, 0xcd, 0x36, 0xef, - 0x5d, 0x7f, 0x0b, 0x9f, 0xca, 0x3b, 0x73, 0x52, 0x6e, 0xf0, 0x98, 0xd6, - 0x83, 0xcd, 0xd6, 0x66, 0xed, 0x2a, 0xb3, 0x26, 0xc5, 0xd2, 0xda, 0x68, - 0xa3, 0x60, 0x0e, 0xc0, 0x09, 0x22, 0x8f, 0x51, 0xc3, 0x99, 0xa9, 0x56, - 0x53, 0xd4, 0xc3, 0x08, 0x8d, 0x01, 0x9a, 0x83, 0x4a, 0xaa, 0x69, 0x2d, - 0x41, 0xcf, 0xb5, 0xa7, 0x4d, 0x7c, 0x3d, 0x49, 0xf2, 0xc0, 0x36, 0xde, - 0xe8, 0x68, 0x6d, 0x49, 0x79, 0x61, 0xe2, 0xcb, 0x14, 0xca, 0x03, 0x63, - 0xa1, 0x38, 0x8b, 0x61, 0x2d, 0xe8, 0x58, 0xb6, 0x50, 0x5f, 0x67, 0xcd, - 0x92, 0xc6, 0xbc, 0x2a, 0x02, 0x19, 0x23, 0x51, 0x45, 0x35, 0xaf, 0xd6, - 0x61, 0xd4, 0x13, 0x65, 0x37, 0x70, 0x36, 0x95, 0x60, 0xd6, 0xf4, 0x2b, - 0x3f, 0xd7, 0x12, 0xeb, 0x48, 0xc4, 0xb9, 0x03, 0x16, 0xd3, 0x0c, 0x2f, - 0xff, 0x1d, 0xbc, 0x5f, 0x75, 0x84, 0x0f, 0x5c, 0xd8, 0x7e, 0x53, 0xcf, - 0xca, 0x3b, 0x4d, 0x59, 0xd3, 0xe1, 0x9b, 0x25, 0xe3, 0xbf, 0x54, 0xf6, - 0x73, 0x5b, 0x21, 0x18, 0x16, 0x94, 0x7f, 0x77, 0xad, 0x5c, 0x8f, 0x5c, - 0x08, 0x0f, 0x1a, 0xe6, 0xea, 0x69, 0x45, 0x09, 0x6a, 0xd4, 0xad, 0x6d, - 0x2d, 0x05, 0x08, 0x8f, 0x30, 0xc1, 0x91, 0x9e, 0x4f, 0x1c, 0x85, 0xf0, - 0x0d, 0x29, 0x37, 0xa3, 0xf9, 0x32, 0x95, 0xf1, 0x9b, 0xd3, 0xb0, 0xed, - 0x31, 0x12, 0x08, 0x0e, 0x96, 0x95, 0xb9, 0xa6, 0x66, 0x0e, 0x97, 0x88, - 0xb0, 0xf4, 0xe6, 0x01, 0xe9, 0x6c, 0xa9, 0x7f, 0x39, 0x4d, 0x48, 0x4f, - 0x9d, 0x9a, 0x7f, 0xc9, 0x9e, 0x63, 0x0f, 0x31, 0xbd, 0x9e, 0x83, 0x9b, - 0x82, 0x76, 0xdb, 0x86, 0xbb, 0xd9, 0xee, 0x65, 0x84, 0xec, 0xb2, 0x64, - 0xe2, 0xdc, 0xc5, 0x35, 0x5f, 0x41, 0x31, 0x14, 0xa3, 0x14, 0x42, 0xb7, - 0xfa, 0xab, 0xe6, 0x6c, 0xc4, 0x58, 0x43, 0x2b, 0x00, 0x0e, 0x23, 0x05, - 0x50, 0x24, 0xdc, 0x01, 0x40, 0x45, 0xaf, 0xbc, 0x4d, 0x8d, 0x66, 0x71, - 0x5c, 0xb8, 0xcc, 0x3e, 0x11, 0xed, 0xd0, 0x40, 0xf5, 0xb6, 0x99, 0x0c, - 0xd4, 0x73, 0x71, 0x6b, 0x2c, 0xd7, 0xb6, 0xad, 0x78, 0xb3, 0x55, 0xa2, - 0x11, 0x28, 0x97, 0x04, 0x29, 0xd7, 0xf4, 0x28, 0x3d, 0xc2, 0x45, 0xf1, - 0xb5, 0xf1, 0x63, 0x50, 0x0f, 0xa4, 0x21, 0x78, 0x59, 0xd1, 0x90, 0xf4, - 0x26, 0x80, 0x9c, 0x8a, 0x7b, 0x45, 0xb9, 0x27, 0x85, 0x69, 0xcc, 0x2f, - 0xdc, 0x6d, 0xfe, 0x6c, 0x40, 0x13, 0x81, 0xf8, 0xb3, 0xf2, 0x2c, 0x8e, - 0x85, 0xf0, 0x5c, 0x2d, 0xc6, 0x50, 0xbc, 0x9e, 0x71, 0xe2, 0x1c, 0x61, - 0x10, 0x38, 0x0d, 0x28, 0x95, 0x6c, 0xca, 0xef, 0x6b, 0x75, 0x0e, 0xbb, - 0x81, 0x16, 0x6b, 0x75, 0xc2, 0xe9, 0x44, 0x0c, 0x15, 0xe1, 0x21, 0xf0, - 0x2c, 0xe8, 0x83, 0x81, 0x3c, 0xc8, 0xfb, 0x7c, 0x3b, 0x5d, 0x5a, 0x34, - 0x13, 0x1a, 0xdf, 0xc8, 0x58, 0x4f, 0x0c, 0xe2, 0x2a, 0xa0, 0xfd, 0xc2, - 0x40, 0x7d, 0x2c, 0x39, 0xbe, 0xa3, 0xdb, 0x32, 0xb4, 0x0c, 0x22, 0xcd, - 0x49, 0xe6, 0xd2, 0x7e, 0xc0, 0xab, 0x9d, 0xc5, 0xcb, 0x8a, 0xa3, 0x7a, - 0xc2, 0x0d, 0xdb, 0x80, 0x7f, 0x8c, 0x5d, 0xb0, 0xda, 0x27, 0xe1, 0xab, - 0x73, 0xf5, 0xe6, 0x24, 0xb3, 0xec, 0x18, 0xd2, 0x1a, 0x20, 0xd1, 0xe9, - 0x5c, 0xf5, 0x66, 0xc6, 0x50, 0xf3, 0x54, 0x77, 0x18, 0xba, 0x79, 0xeb, - 0x71, 0x17, 0x57, 0x3b, 0xe4, 0xcc, 0x48, 0xf8, 0x2b, 0xed, 0x2c, 0x17, - 0x6c, 0x20, 0xd1, 0xf3, 0x99, 0x4c, 0x2f, 0x6f, 0xc6, 0xf5, 0xde, 0x10, - 0xd8, 0x8d, 0x77, 0x2f, 0xc2, 0x7d, 0x50, 0xaf, 0x9e, 0x6f, 0xeb, 0x99, - 0xd8, 0x5c, 0x03, 0x28, 0x58, 0xa5, 0xb7, 0x6a, 0xef, 0xf2, 0xd9, 0x04, - 0x60, 0xe2, 0x58, 0x06, 0x4e, 0x9d, 0xc6, 0x83, 0xf3, 0xff, 0xf1, 0x8b, - 0x9f, 0x79, 0x91, 0x30, 0x3f, 0x84, 0x8e, 0x81, 0x18, 0x0f, 0x1b, 0xa4, - 0xce, 0x68, 0x33, 0x07, 0x74, 0x4b, 0x06, 0xa8, 0xfa, 0x14, 0x55, 0x20, - 0x11, 0x74, 0xa2, 0x10, 0xd9, 0x34, 0x2a, 0xec, 0x3c, 0xb2, 0x5a, 0x77, - 0x03, 0x64, 0x6d, 0xc0, 0x8c, 0xa0, 0x26, 0x1b, 0x5d, 0xae, 0xb2, 0x66, - 0x3d, 0x25, 0x76, 0x29, 0x99, 0x4d, 0xc1, 0x1c, 0x80, 0x16, 0xe8, 0xb4, - 0x1e, 0x56, 0xb9, 0x68, 0xb3, 0xfa, 0xbe, 0x6d, 0x2f, 0xc8, 0x51, 0x88, - 0xd9, 0xdf, 0x3d, 0x0f, 0xf4, 0xa6, 0xdc, 0x8f, 0x67, 0x1f, 0x24, 0x84, - 0xe4, 0xbd, 0xec, 0xd1, 0x1b, 0x4c, 0x54, 0xcf, 0x69, 0x73, 0xc2, 0xde, - 0x59, 0xaa, 0x3e, 0xff, 0xce, 0x7d, 0xd1, 0xfc, 0xaf, 0xd6, 0x21, 0x8d, - 0xe4, 0xc4, 0xe9, 0x5f, 0xd3, 0x57, 0x83, 0xbe, 0xff, 0x4a, 0xa8, 0x30, - 0x63, 0xec, 0x40, 0x8a, 0x7d, 0x7b, 0xcd, 0x9a, 0xc4, 0x34, 0x1f, 0x7b, - 0x38, 0x17, 0x10, 0x93, 0x1e, 0x21, 0xe6, 0xd8, 0x3d, 0xbc, 0x71, 0x76, - 0x0b, 0x46, 0x86, 0x6c, 0x58, 0xb3, 0xc5, 0xb2, 0xc4, 0xc9, 0xca, 0x50, - 0x9a, 0xb9, 0xd5, 0xa9, 0x50, 0xfc, 0x14, 0x6c, 0x1f, 0x27, 0x4c, 0xc0, - 0x9c, 0x72, 0x1e, 0x90, 0x6a, 0xcc, 0x02, 0x02, 0xa5, 0x7a, 0x62, 0x39, - 0xaa, 0xd9, 0x80, 0x40, 0xb8, 0x7d, 0x89, 0x7f, 0x8f, 0xfc, 0xec, 0xf5, - 0xdf, 0xa1, 0x6b, 0xa6, 0xfb, 0xd3, 0xc6, 0xec, 0xf7, 0x3f, 0xcc, 0xe6, - 0x9c, 0x95, 0xa3, 0xec, 0x11, 0xc1, 0x8c, 0xa2, 0x5c, 0x03, 0xe3, 0x53, - 0x0c, 0xa1, 0x2a, 0xc7, 0x94, 0x6d, 0x0b, 0xb7, 0x98, 0x1d, 0x84, 0x63, - 0x4b, 0xb2, 0x3a, 0x1e, 0x69, 0xbf, 0xb0, 0x21, 0x4e, 0x98, 0x12, 0x72, - 0x89, 0x17, 0xe8, 0x39, 0x44, 0x6a, 0x13, 0x7a, 0xe0, 0xb1, 0x16, 0x63, - 0x2d, 0xed, 0xf4, 0x5f, 0xde, 0xad, 0xfb, 0x3c, 0x52, 0x70, 0x09, 0x97, - 0x54, 0x47, 0x88, 0x5a, 0x39, 0xd1, 0x25, 0xc9, 0x8c, 0x7a, 0x9a, 0xad, - 0x36, 0xee, 0x3c, 0x91, 0x96, 0x3d, 0xc0, 0xec, 0x93, 0x07, 0xcc, 0x5a, - 0xf4, 0x75, 0x3b, 0x1c, 0xda, 0xc8, 0x47, 0x08, 0x4b, 0x2a, 0x1a, 0x7e, - 0x82, 0x2b, 0xca, 0xb2, 0x6d, 0xe5, 0x2a, 0x29, 0xd1, 0x33, 0x79, 0x20, - 0x36, 0xd5, 0x2a, 0x81, 0x48, 0x8d, 0xad, 0x9d, 0xa5, 0x5c, 0x33, 0xa8, - 0x74, 0x26, 0x15, 0x87, 0x68, 0x7f, 0xcb, 0xd3, 0x59, 0x0d, 0xeb, 0xfe, - 0x40, 0x94, 0xb6, 0x3b, 0x95, 0x7d, 0x42, 0xf7, 0x75, 0x2e, 0xa9, 0x10, - 0x31, 0x66, 0x04, 0xbe, 0x22, 0xd2, 0x19, 0xba, 0xe0, 0xcc, 0x46, 0xd8, - 0xe7, 0x64, 0x8e, 0x59, 0x6d, 0x11, 0xde, 0xa6, 0x82, 0x06, 0x92, 0xd0, - 0x0a, 0x1b, 0xa2, 0xb1, 0x76, 0xa9, 0x5b, 0x2d, 0x6a, 0xd6, 0x8f, 0xfd, - 0xff, 0xf4, 0x66, 0x13, 0x30, 0x1a, 0x4d, 0xc3, 0x90, 0x47, 0x21, 0x49, - 0xa0, 0xa9, 0xcb, 0x26, 0x10, 0x47, 0x83, 0x2a, 0xa6, 0x3a, 0x38, 0xbf, - 0x1b, 0xea, 0x03, 0x69, 0x69, 0xbc, 0x53, 0x47, 0xee, 0x5b, 0x5a, 0xd6, - 0xbc, 0x6c, 0xf7, 0xa7, 0xac, 0x67, 0x76, 0xac, 0x46, 0xef, 0x4f, 0x9a, - 0xcc, 0xe3, 0xf0, 0xce, 0xd2, 0x99, 0x72, 0xf7, 0xda, 0x06, 0x5d, 0xb2, - 0x9c, 0x31, 0x1a, 0x6e, 0x81, 0xfa, 0xe7, 0x3a, 0xbb, 0x6b, 0xbf, 0xa7, - 0xde, 0x6f, 0x68, 0xa9, 0xb7, 0xfb, 0xf9, 0xb1, 0x92, 0xb8, 0x33, 0x5c, - 0x53, 0xbe, 0xc6, 0x84, 0x5c, 0x0d, 0xe4, 0xb6, 0xa7, 0x5d, 0x5d, 0x14, - 0xd0, 0x2f, 0x08, 0xc6, 0xea, 0x67, 0x52, 0x90, 0x53, 0x47, 0xf2, 0xf3, - 0x03, 0x81, 0x96, 0x67, 0xef, 0x58, 0xc0, 0x1f, 0x4e, 0xe4, 0x6c, 0x4d, - 0xf9, 0xf1, 0x6c, 0x57, 0xdc, 0x4d, 0xa2, 0xf9, 0x4c, 0x1d, 0xb9, 0xe3, - 0xc2, 0x4a, 0x38, 0xab, 0x7c, 0x2d, 0xe8, 0x19, 0x64, 0x72, 0x35, 0x50, - 0x9f, 0x78, 0xfc, 0xfc, 0xec, 0x1a, 0x23, 0xfe, 0x3c, 0x9e, 0x43, 0x90, - 0xd4, 0x36, 0x47, 0xd9, 0xa8, 0x95, 0x2a, 0xcb, 0xa2, 0x71, 0x38, 0x61, - 0x01, 0x7c, 0x49, 0xfc, 0x07, 0x49, 0x54, 0x7e, 0x51, 0x46, 0x2d, 0xa0, - 0x28, 0x57, 0x16, 0x16, 0xaa, 0xc5, 0x4a, 0x38, 0x4b, 0xec, 0x4f, 0x43, - 0x3f, 0x5f, 0xb1, 0xb0, 0x44, 0x68, 0xe5, 0xde, 0x51, 0x1d, 0x68, 0x0f, - 0x70, 0xd7, 0xc0, 0x2e, 0x30, 0xfb, 0x6e, 0x30, 0xd6, 0x74, 0xa7, 0x40, - 0x28, 0x91, 0x44, 0xd3, 0xb0, 0x3a, 0x2a, 0x36, 0xc8, 0x74, 0x6b, 0x23, - 0x05, 0xb6, 0x88, 0x12, 0x16, 0x42, 0x81, 0x12, 0x8b, 0x91, 0xf0, 0x63, - 0x2a, 0x1f, 0x47, 0xb5, 0x7c, 0x22, 0x34, 0x8f, 0x7d, 0xc0, 0xe6, 0x16, - 0xe0, 0x33, 0x0d, 0x6e, 0x34, 0xcf, 0x1c, 0x3b, 0x01, 0x4e, 0xf9, 0xc7, - 0x91, 0x15, 0x1d, 0xb7, 0xb3, 0x94, 0xe2, 0xc1, 0x5e, 0x7b, 0x04, 0xd6, - 0x34, 0xb8, 0x9f, 0x6b, 0x4e, 0x77, 0xb7, 0xb2, 0x39, 0x49, 0x4b, 0x2c, - 0x5d, 0x90, 0x7d, 0x1a, 0x09, 0x58, 0x22, 0xa8, 0xcd, 0xa2, 0xe7, 0xd6, - 0xac, 0x1e, 0xee, 0x96, 0xe3, 0xce, 0xe4, 0x39, 0xb4, 0xad, 0x9a, 0x46, - 0x31, 0x30, 0xf6, 0x53, 0x22, 0xe0, 0x86, 0x26, 0x83, 0x96, 0x62, 0x8f, - 0x01, 0xbf, 0x89, 0x0a, 0xbb, 0x0c, 0xa3, 0x53, 0xc1, 0xb2, 0xbd, 0x01, - 0x2c, 0x7c, 0x77, 0xdd, 0x0f, 0xc7, 0x96, 0x8f, 0x61, 0xa6, 0x8d, 0x39, - 0x49, 0x7b, 0xce, 0xd2, 0xb4, 0xf8, 0x4f, 0x05, 0x32, 0x01, 0xbe, 0xd8, - 0x6b, 0x5a, 0xa7, 0xb0, 0x93, 0x31, 0x07, 0xd4, 0x35, 0x76, 0xcb, 0x1f, - 0xe8, 0x5e, 0x1f, 0xd8, 0x0e, 0x77, 0x82, 0x44, 0x01, 0x68, 0xb4, 0xea, - 0x6a, 0x92, 0xfa, 0x61, 0x86, 0x3e, 0x06, 0x94, 0xd5, 0x07, 0xe4, 0xd7, - 0x1e, 0xe8, 0xa6, 0x90, 0xdc, 0x8f, 0x28, 0xac, 0xd6, 0x3f, 0x1a, 0x0d, - 0xbc, 0xe8, 0xfb, 0x82, 0x02, 0xf8, 0xf0, 0xd5, 0x8b, 0x33, 0x2c, 0x4c, - 0x8e, 0x07, 0x86, 0x23, 0xd2, 0xdf, 0x59, 0xe4, 0x1e, 0x5c, 0xf1, 0x7e, - 0x3c, 0x30, 0xe4, 0x30, 0xd5, 0x86, 0x31, 0x5c, 0xce, 0x28, 0xe0, 0x26, - 0xac, 0xa2, 0x79, 0x76, 0x74, 0xae, 0xd0, 0x38, 0xc4, 0x51, 0x96, 0xde, - 0xc8, 0x05, 0xdf, 0x8d, 0x82, 0xcb, 0x27, 0xd4, 0x42, 0xea, 0xc3, 0xfa, - 0x9c, 0xb1, 0x9b, 0xb1, 0x7a, 0x3d, 0xf6, 0x6a, 0xdd, 0xd9, 0xda, 0xf1, - 0xf7, 0xef, 0xa7, 0x6f, 0x7c, 0x7a, 0x5f, 0x5c, 0x78, 0x47, 0x70, 0x2a, - 0x25, 0xb8, 0x3c, 0x1d, 0xc4, 0x85, 0xa1, 0xd8, 0x1b, 0x17, 0x74, 0xe3, - 0xd8, 0x85, 0x19, 0xbb, 0x71, 0x44, 0xf6, 0x89, 0xb4, 0xb0, 0xee, 0xd4, - 0x73, 0x3b, 0x47, 0x9b, 0xfd, 0x88, 0x28, 0xe6, 0x42, 0x45, 0x73, 0x05, - 0xb4, 0xf9, 0x0c, 0x50, 0x8e, 0x86, 0xea, 0x91, 0xa5, 0x84, 0xc7, 0x40, - 0xf4, 0x2c, 0xb7, 0xd5, 0xfa, 0xab, 0x0e, 0xd8, 0x59, 0x3c, 0xa6, 0x44, - 0xb5, 0x6c, 0xca, 0x83, 0x69, 0xbf, 0xd3, 0xd2, 0x74, 0x88, 0xb2, 0xa8, - 0x2d, 0x94, 0xa1, 0x7b, 0xf4, 0x54, 0x5d, 0x12, 0xd9, 0x12, 0xfd, 0xcc, - 0x63, 0x51, 0xb3, 0xf2, 0x58, 0xd4, 0x78, 0x80, 0x72, 0x5d, 0xd8, 0x01, - 0x3b, 0xb8, 0x87, 0x75, 0x4f, 0xe8, 0xdd, 0x1e, 0x74, 0xc2, 0xb7, 0x55, - 0x1f, 0x5c, 0x65, 0x7e, 0x14, 0xec, 0xe5, 0x42, 0x8d, 0x91, 0xc3, 0xa3, - 0xec, 0xcd, 0x49, 0x16, 0x81, 0x31, 0x44, 0xa2, 0x0e, 0x11, 0x8a, 0x8a, - 0x3e, 0x86, 0x94, 0x35, 0xa8, 0xfa, 0xe2, 0x17, 0x40, 0x6c, 0x25, 0x21, - 0xc3, 0x76, 0xab, 0x4b, 0x47, 0xd3, 0x18, 0x87, 0x43, 0x8d, 0x2c, 0xd3, - 0x10, 0x70, 0x74, 0x43, 0x29, 0x9d, 0xe5, 0x87, 0x4c, 0x4f, 0x72, 0xe3, - 0xc2, 0xd5, 0x0c, 0x41, 0x9a, 0xd0, 0x66, 0xe4, 0x6a, 0xd6, 0x2e, 0x71, - 0xba, 0x60, 0xc5, 0x2a, 0x96, 0xfe, 0x1f, 0x97, 0x01, 0xf2, 0xa3, 0x8f, - 0x8c, 0x1f, 0x7f, 0x86, 0xc2, 0x8f, 0xcb, 0x50, 0xf8, 0x51, 0x4f, 0x60, - 0xfd, 0x9f, 0x42, 0xaa, 0xc8, 0x62, 0x70, 0xa6, 0xf4, 0x13, 0x74, 0xab, - 0x1a, 0xb2, 0x3d, 0xb8, 0xfe, 0xde, 0xc7, 0xa1, 0x17, 0xb6, 0x7f, 0xbc, - 0x78, 0x27, 0x0e, 0x5f, 0xa8, 0x81, 0xc6, 0x14, 0x32, 0x59, 0x88, 0xc6, - 0x2e, 0xe5, 0x93, 0xb0, 0xa3, 0xfc, 0xd8, 0xff, 0xa5, 0xdf, 0x14, 0x19, - 0xb0, 0x7e, 0xe5, 0x35, 0x10, 0xe4, 0x19, 0xa2, 0x69, 0xcf, 0x82, 0xe6, - 0xeb, 0x49, 0x49, 0xa1, 0xe7, 0x8e, 0x5f, 0xb2, 0x7f, 0x38, 0x62, 0x19, - 0xc6, 0x95, 0x78, 0x89, 0x65, 0x66, 0x95, 0xb0, 0x6c, 0x49, 0xd9, 0xf8, - 0xf5, 0xb1, 0xe7, 0x69, 0x3a, 0x81, 0x34, 0x5f, 0x19, 0xfd, 0x53, 0x7e, - 0x69, 0xfb, 0x28, 0x4f, 0xd1, 0x4a, 0xe5, 0x49, 0xc3, 0xd7, 0x1c, 0x06, - 0x27, 0x65, 0x47, 0x9e, 0x76, 0x0d, 0x3a, 0xd3, 0x05, 0x23, 0xb9, 0x9c, - 0xe1, 0xd4, 0xa3, 0x63, 0x7e, 0x98, 0xd1, 0xd6, 0x4b, 0x06, 0x24, 0xcf, - 0x67, 0x5b, 0x85, 0x61, 0x50, 0xb6, 0xae, 0x6e, 0x9a, 0x48, 0x0b, 0xba, - 0x93, 0x5c, 0xbb, 0xcc, 0x1f, 0x60, 0x46, 0x73, 0x0f, 0xb0, 0x6f, 0x4f, - 0x82, 0xbd, 0x6e, 0x32, 0xc5, 0x20, 0xd6, 0x7b, 0x65, 0xdf, 0xe0, 0x80, - 0xab, 0x53, 0x8e, 0xb7, 0x3f, 0xcc, 0xa7, 0x74, 0x36, 0x7d, 0x82, 0xba, - 0x96, 0xcf, 0x5f, 0x08, 0x56, 0xd0, 0x9f, 0x9c, 0x90, 0xc0, 0x06, 0xd8, - 0x05, 0x1a, 0xe5, 0x4c, 0xc4, 0x28, 0x0a, 0x3a, 0xc0, 0xc3, 0x3f, 0xf8, - 0xd8, 0x3f, 0xa3, 0x2f, 0xa4, 0x8d, 0x1c, 0x31, 0x63, 0x87, 0x9c, 0xd1, - 0x1d, 0x36, 0x51, 0x76, 0x50, 0x00, 0x4b, 0x0a, 0xca, 0xe8, 0x4f, 0x45, - 0x51, 0xf4, 0xc0, 0x18, 0xd1, 0xb4, 0x34, 0x57, 0x1f, 0x87, 0x1b, 0x28, - 0x95, 0x76, 0xb7, 0x08, 0x7c, 0x98, 0xd8, 0x2c, 0x79, 0xc2, 0x43, 0x1f, - 0x69, 0x03, 0xb0, 0x04, 0x19, 0x40, 0x07, 0x38, 0x3b, 0x92, 0x05, 0x3a, - 0xd3, 0x10, 0x96, 0xb0, 0xf6, 0xc1, 0x40, 0xca, 0x48, 0xa4, 0x8f, 0xf5, - 0x8d, 0xed, 0x19, 0xb1, 0xd8, 0x98, 0xc7, 0xb0, 0xd4, 0xd0, 0x27, 0x42, - 0xbd, 0x71, 0x4e, 0xf1, 0xaf, 0x0d, 0x8c, 0xff, 0x19, 0x5e, 0xc3, 0x44, - 0x75, 0x43, 0xb3, 0xf9, 0xb2, 0x0e, 0x3d, 0x81, 0xdc, 0x32, 0x54, 0x42, - 0x7e, 0xe6, 0xf6, 0xf7, 0x2b, 0x71, 0x1a, 0xf1, 0x7a, 0xb2, 0x1c, 0xf7, - 0x25, 0x5a, 0x00, 0x94, 0xad, 0x97, 0x6f, 0x5c, 0xbd, 0xce, 0x8d, 0xab, - 0xd7, 0x5b, 0x83, 0x54, 0x4b, 0x78, 0x38, 0x33, 0x41, 0xb4, 0x9c, 0x69, - 0x37, 0x51, 0x8e, 0x9c, 0xfd, 0x32, 0xa0, 0x9a, 0x60, 0xa1, 0xb2, 0x05, - 0x62, 0xc9, 0x75, 0x88, 0x8e, 0x6e, 0xc2, 0x9e, 0x20, 0x1a, 0x99, 0x69, - 0xa0, 0x3d, 0x16, 0xd8, 0xc9, 0x72, 0x73, 0x14, 0xcd, 0xff, 0xdb, 0x33, - 0x41, 0x91, 0x3a, 0xd2, 0xd4, 0xe2, 0x1e, 0xae, 0x54, 0x68, 0xb2, 0x6a, - 0x27, 0x56, 0xa0, 0x11, 0xc8, 0x7d, 0xa4, 0x31, 0xc0, 0x0d, 0xbf, 0x81, - 0xca, 0x9d, 0xb3, 0x2e, 0x03, 0x35, 0xd9, 0xa8, 0x42, 0x88, 0x53, 0xec, - 0xe9, 0xc6, 0x4e, 0x1e, 0xc4, 0x9a, 0x04, 0x04, 0xfa, 0x96, 0xc6, 0xe2, - 0xc4, 0x67, 0x91, 0x86, 0xeb, 0x43, 0x7a, 0xc8, 0x36, 0x12, 0x45, 0x1a, - 0xe8, 0x58, 0x85, 0x62, 0x71, 0x6d, 0xba, 0xf9, 0xd6, 0x1b, 0x00, 0x6d, - 0xb9, 0x59, 0x4b, 0x88, 0x2f, 0x81, 0xfc, 0xd5, 0x46, 0x8d, 0x68, 0x56, - 0x77, 0xea, 0x4c, 0x8c, 0xb8, 0x82, 0xbd, 0x7c, 0xfa, 0x5e, 0x3e, 0xe5, - 0x4e, 0x87, 0x96, 0x02, 0x4a, 0x4e, 0x01, 0xb8, 0x6c, 0xd2, 0xac, 0x0b, - 0xfd, 0xbb, 0x0f, 0x4f, 0xee, 0x26, 0x1b, 0x60, 0xbb, 0x64, 0x74, 0x72, - 0xba, 0xb2, 0x40, 0x38, 0x70, 0x07, 0xee, 0xc3, 0xe1, 0x5f, 0xbf, 0x18, - 0x22, 0x4d, 0xd8, 0x19, 0x74, 0xa2, 0xc4, 0x06, 0x3a, 0x44, 0x51, 0xc3, - 0x68, 0xa7, 0x3c, 0x31, 0xd7, 0x14, 0x55, 0x98, 0x08, 0xd1, 0x4d, 0x04, - 0x52, 0xce, 0x8b, 0xe9, 0xf1, 0x74, 0x76, 0xee, 0xf0, 0xfb, 0xe7, 0x4b, - 0xcf, 0x87, 0xce, 0xd5, 0xee, 0x88, 0xb6, 0x51, 0x0c, 0xbf, 0xe9, 0xdd, - 0x61, 0x63, 0x7c, 0xc9, 0xec, 0xf7, 0x4d, 0xd5, 0x89, 0x0d, 0x30, 0xd4, - 0x1f, 0x4c, 0xcc, 0x27, 0xee, 0x69, 0x2e, 0x1d, 0xdc, 0x4f, 0xbd, 0x7a, - 0x42, 0x55, 0xeb, 0x69, 0x2c, 0xcf, 0xf4, 0xab, 0x84, 0xa4, 0x80, 0x8f, - 0xa9, 0xce, 0xa0, 0xac, 0xb3, 0xfe, 0x19, 0xfe, 0xe5, 0x38, 0x77, 0x1a, - 0x29, 0x21, 0x83, 0x7a, 0x3a, 0xa5, 0x3b, 0x95, 0xc2, 0x94, 0xb2, 0x61, - 0x7c, 0x3d, 0x62, 0x51, 0x03, 0xa2, 0xed, 0x08, 0x4e, 0xb2, 0x81, 0x32, - 0x9d, 0x4a, 0xf3, 0x8d, 0xe9, 0x43, 0xb1, 0x4f, 0x6b, 0xe7, 0x59, 0x84, - 0xbc, 0xe2, 0x19, 0xf5, 0xd6, 0xc1, 0x1a, 0xfe, 0xe7, 0xd9, 0x59, 0x76, - 0x8e, 0x0e, 0xb2, 0x4b, 0x98, 0xb0, 0x82, 0xd1, 0xfd, 0xd8, 0x3d, 0x6c, - 0xe9, 0xad, 0x20, 0x7d, 0x38, 0x15, 0x98, 0xd2, 0xef, 0x20, 0xe1, 0xe9, - 0x40, 0x5b, 0x40, 0x2d, 0xb6, 0x4d, 0xda, 0x39, 0x01, 0xa1, 0xb5, 0x83, - 0x13, 0x8c, 0xe9, 0x67, 0xa0, 0xe2, 0x34, 0xfb, 0xda, 0xf1, 0x64, 0xd3, - 0xc2, 0x7f, 0x41, 0x1f, 0xf8, 0x11, 0x0c, 0x15, 0xcb, 0x5f, 0x40, 0xe9, - 0x56, 0x3b, 0x55, 0x90, 0x1f, 0x58, 0x45, 0x5b, 0x18, 0x2a, 0xc0, 0x0e, - 0x9a, 0xcc, 0xb1, 0x0d, 0x22, 0x8d, 0xcc, 0x06, 0xae, 0x29, 0x04, 0x30, - 0xa7, 0x87, 0x4b, 0xac, 0x1a, 0x90, 0xfc, 0x01, 0x80, 0x27, 0xce, 0x83, - 0xc1, 0x7d, 0x44, 0x45, 0x78, 0x58, 0xe9, 0x7b, 0x2c, 0x72, 0x50, 0x50, - 0x21, 0x38, 0xd3, 0xef, 0x11, 0x89, 0xf7, 0xe8, 0x65, 0xeb, 0xd1, 0xcb, - 0xd5, 0xa3, 0xf7, 0x96, 0x06, 0xf5, 0x49, 0x8b, 0xc1, 0x04, 0xed, 0x49, - 0xe4, 0xa3, 0x8a, 0x29, 0xa3, 0x8d, 0x9d, 0xfa, 0x3e, 0xc6, 0x64, 0x13, - 0x7a, 0x86, 0x32, 0xb3, 0x72, 0x9b, 0x3a, 0x9c, 0x9f, 0x8c, 0x79, 0xf8, - 0xb7, 0x28, 0xdf, 0x84, 0xf4, 0xc4, 0x50, 0xf2, 0x8f, 0xf2, 0x2c, 0xfb, - 0xa9, 0x0c, 0x00, 0x99, 0xf8, 0x81, 0xf2, 0x60, 0x67, 0x05, 0xaa, 0x31, - 0xc0, 0x94, 0x5f, 0x3e, 0x4c, 0x9b, 0x72, 0xe8, 0xcc, 0xa7, 0x48, 0x7c, - 0x67, 0xde, 0xa7, 0x29, 0x0e, 0xca, 0x38, 0x41, 0x72, 0xf3, 0xee, 0xe4, - 0x52, 0x38, 0x13, 0x99, 0xf2, 0x1a, 0x2d, 0xff, 0x74, 0xb1, 0x76, 0x0c, - 0x28, 0xa0, 0x56, 0x35, 0x55, 0xcc, 0x5f, 0xf8, 0x45, 0x9b, 0xf2, 0x42, - 0x39, 0x66, 0x8a, 0x01, 0xf5, 0x96, 0xb0, 0x33, 0x87, 0x98, 0xec, 0x24, - 0xd2, 0xdc, 0x71, 0x8d, 0xcf, 0x97, 0xa6, 0x4f, 0x6c, 0x3b, 0xbf, 0x7c, - 0xaf, 0x5f, 0xfe, 0x18, 0xdb, 0xba, 0x5b, 0x7f, 0xcc, 0x7c, 0x43, 0xbb, - 0x60, 0x66, 0x48, 0xa0, 0xb6, 0xe2, 0xc5, 0xbe, 0x9c, 0xa4, 0x05, 0x45, - 0x75, 0x12, 0x5e, 0x14, 0xbb, 0x68, 0x14, 0x5f, 0xd7, 0x46, 0xd1, 0x86, - 0x7e, 0x9c, 0x38, 0x4d, 0xaf, 0x64, 0x89, 0xfe, 0x60, 0x74, 0x92, 0x1c, - 0x83, 0x74, 0x26, 0x1d, 0x57, 0xc9, 0x7e, 0x59, 0xa3, 0xc0, 0x72, 0xf0, - 0x62, 0x0c, 0x8e, 0x49, 0x6a, 0x0f, 0x1f, 0x57, 0x60, 0xa7, 0x09, 0x22, - 0x69, 0x7d, 0x79, 0x6c, 0x42, 0x2f, 0xd7, 0xa4, 0x6f, 0x13, 0x3e, 0x86, - 0x75, 0xd2, 0xaa, 0x8a, 0x8d, 0x10, 0xef, 0xdc, 0x05, 0x9a, 0xa6, 0x3e, - 0x95, 0x02, 0xf4, 0x6f, 0x8f, 0xac, 0x1d, 0x32, 0xc0, 0x82, 0xf5, 0x14, - 0x5f, 0xb8, 0x76, 0x7e, 0xbb, 0xd8, 0x00, 0x1b, 0xb6, 0x7c, 0xdf, 0xd5, - 0xe1, 0xf7, 0xaf, 0xa9, 0xef, 0x69, 0xea, 0x20, 0x98, 0xe4, 0x81, 0xb7, - 0xd3, 0x06, 0x24, 0xaf, 0x71, 0xc5, 0xf1, 0x69, 0x46, 0xe3, 0x22, 0x84, - 0x05, 0x1b, 0xc5, 0x29, 0x79, 0xda, 0x09, 0x44, 0x4f, 0x00, 0x2e, 0x42, - 0x51, 0x1f, 0xd2, 0x69, 0x4f, 0x15, 0x31, 0x34, 0x5f, 0x5c, 0xfe, 0x12, - 0xea, 0xc1, 0x8b, 0x93, 0x5e, 0x06, 0x65, 0xe1, 0xe0, 0xd0, 0x69, 0x9a, - 0x9e, 0x5c, 0x0c, 0x9c, 0xa6, 0x9e, 0x1c, 0x99, 0x79, 0x62, 0x95, 0x25, - 0x2c, 0x08, 0xfd, 0xe4, 0x8d, 0xe1, 0xce, 0x9b, 0x3b, 0x99, 0xcf, 0x7d, - 0xae, 0xce, 0xf4, 0x92, 0xef, 0x1a, 0xee, 0x00, 0x6b, 0xc8, 0x34, 0xdb, - 0x5c, 0x8c, 0x4e, 0x84, 0x99, 0xbe, 0x71, 0xc2, 0x45, 0x0b, 0x97, 0xf7, - 0x73, 0x4e, 0x8b, 0x93, 0x80, 0x7b, 0x37, 0x33, 0xc6, 0x3e, 0x03, 0xb1, - 0x1c, 0x2d, 0x5a, 0x9e, 0x00, 0xd0, 0x60, 0x76, 0xe2, 0x14, 0xdf, 0x53, - 0x95, 0xf0, 0xcc, 0xa4, 0xde, 0x5c, 0x5d, 0xf2, 0xe1, 0x4f, 0x2e, 0x94, - 0x85, 0x8d, 0xcd, 0x24, 0x09, 0x27, 0xa3, 0xeb, 0xa0, 0x20, 0x87, 0xa8, - 0x13, 0xd0, 0x53, 0x75, 0x61, 0x8a, 0x15, 0x6a, 0xa0, 0x69, 0x70, 0x07, - 0x56, 0xeb, 0x5e, 0x57, 0x54, 0x1f, 0x37, 0x6c, 0xb5, 0x80, 0xe2, 0x95, - 0x90, 0x20, 0x1a, 0x76, 0x26, 0x47, 0xf1, 0xd9, 0xf6, 0xa4, 0xfd, 0x97, - 0xd4, 0x51, 0xcf, 0xdf, 0xd8, 0x97, 0x01, 0xa2, 0x70, 0xbd, 0x80, 0xdb, - 0x3e, 0xdc, 0xca, 0xe7, 0x9c, 0x6d, 0x92, 0xf3, 0xfc, 0x2b, 0xb4, 0xb8, - 0x71, 0x14, 0x6d, 0x74, 0xcd, 0xd2, 0xee, 0x3b, 0xdd, 0x84, 0x55, 0xb4, - 0x1f, 0x7b, 0x83, 0x3c, 0x93, 0x27, 0xd2, 0xe5, 0xd0, 0x87, 0x31, 0xef, - 0xd0, 0x7d, 0x7b, 0x82, 0xb3, 0x5a, 0x9a, 0x8a, 0xea, 0x6f, 0x0e, 0xa1, - 0x0e, 0xce, 0x6c, 0xe5, 0xac, 0x00, 0xe3, 0x94, 0x07, 0xa8, 0xa4, 0xde, - 0x84, 0x58, 0x90, 0x67, 0x2b, 0xde, 0x95, 0x94, 0xc9, 0x3f, 0x63, 0x08, - 0xef, 0xa3, 0xf4, 0x09, 0x83, 0x57, 0x9a, 0xc9, 0x55, 0xee, 0xd0, 0x43, - 0x53, 0x47, 0x11, 0x86, 0xd5, 0xa8, 0x6c, 0x96, 0x9d, 0x76, 0xb6, 0x47, - 0x7e, 0xeb, 0x03, 0x10, 0x67, 0x2b, 0x06, 0x63, 0x7c, 0x30, 0x6b, 0xf6, - 0x64, 0xd4, 0x27, 0x06, 0xd3, 0xbc, 0xe3, 0xb0, 0x87, 0xc2, 0xb0, 0x33, - 0x41, 0xe6, 0x1d, 0x76, 0x2e, 0x65, 0x2a, 0x8a, 0x54, 0x49, 0x54, 0x36, - 0xa9, 0x5a, 0x4a, 0x41, 0x27, 0x88, 0x98, 0x96, 0x27, 0x55, 0xd6, 0x34, - 0x0b, 0x99, 0xc7, 0xa0, 0x94, 0x9f, 0x40, 0x6b, 0xba, 0xcb, 0xe0, 0xee, - 0x43, 0x0c, 0x8c, 0x88, 0x56, 0x9e, 0x45, 0x9d, 0x56, 0x6b, 0xfe, 0x38, - 0xf1, 0x02, 0x7a, 0x52, 0x34, 0x12, 0x08, 0x92, 0x98, 0xe8, 0x18, 0x56, - 0xba, 0x6d, 0xea, 0x8d, 0x8d, 0x96, 0xc0, 0xd9, 0x0e, 0x05, 0xcf, 0x58, - 0x3b, 0xf3, 0xfd, 0xcf, 0xc7, 0xaf, 0x7f, 0xcc, 0xad, 0x0f, 0x6b, 0xd6, - 0xf0, 0xc8, 0xcf, 0xbc, 0x4c, 0x6b, 0x8c, 0xb4, 0x09, 0xe0, 0x13, 0x74, - 0xb7, 0x8c, 0xd9, 0xcf, 0xa4, 0x14, 0x32, 0x55, 0x9d, 0xae, 0x01, 0x5f, - 0xde, 0x34, 0xf8, 0xcd, 0xb3, 0xea, 0x2f, 0x6a, 0x76, 0xef, 0xa0, 0xc9, - 0xf4, 0x62, 0x78, 0x69, 0x12, 0xb8, 0x84, 0x7b, 0xe2, 0x73, 0xd1, 0xdf, - 0xb9, 0xeb, 0x17, 0xce, 0x97, 0x4f, 0xfc, 0xd7, 0xdc, 0xbb, 0x7b, 0x14, - 0xdd, 0x7e, 0x7b, 0x0e, 0x2c, 0x77, 0xd6, 0x09, 0x88, 0x28, 0x8a, 0x36, - 0x31, 0xf4, 0x26, 0xa0, 0x4b, 0x7d, 0x4f, 0x5d, 0xe8, 0xdb, 0x50, 0xdb, - 0xd9, 0xc0, 0x62, 0x59, 0xd0, 0x14, 0x8a, 0xd9, 0xb3, 0x30, 0x41, 0x54, - 0xbb, 0x6a, 0xe1, 0x7f, 0xb2, 0xe9, 0x96, 0x52, 0x87, 0x00, 0xa9, 0x63, - 0x96, 0x50, 0xe2, 0xb9, 0x0d, 0x4b, 0xc9, 0xe0, 0x89, 0xb3, 0x87, 0xa0, - 0xcc, 0x64, 0xa0, 0x7c, 0xa2, 0x6e, 0xaa, 0x2f, 0xa4, 0x88, 0xdb, 0x2c, - 0xd1, 0xee, 0xa7, 0x0d, 0x17, 0xaa, 0x11, 0xe6, 0x16, 0x51, 0x70, 0xee, - 0x80, 0xfb, 0x42, 0x59, 0x5f, 0xa3, 0xb5, 0x14, 0x06, 0x28, 0xbc, 0xf2, - 0x15, 0xc9, 0x89, 0xcb, 0x48, 0xd3, 0x3b, 0x15, 0x06, 0x91, 0xd4, 0x53, - 0x17, 0x98, 0x96, 0x8f, 0x8d, 0x07, 0x29, 0xe7, 0x61, 0x44, 0x6d, 0x00, - 0x79, 0x63, 0xb5, 0xc2, 0x00, 0x8e, 0x52, 0xb1, 0xfe, 0xce, 0xe8, 0x06, - 0x4c, 0xb1, 0x09, 0x31, 0xe9, 0x63, 0x98, 0x83, 0xba, 0x73, 0xc1, 0x20, - 0x0f, 0xb0, 0xc4, 0xd4, 0x68, 0x70, 0xd9, 0xad, 0x08, 0xa3, 0x64, 0x59, - 0x0d, 0xc7, 0xda, 0x0b, 0x41, 0xe2, 0x3a, 0x8d, 0x81, 0x63, 0x9a, 0xf4, - 0x4d, 0x92, 0x63, 0xa0, 0x6a, 0x85, 0x20, 0xe5, 0xbd, 0xd7, 0xa0, 0xd6, - 0xb7, 0x28, 0xd3, 0x83, 0xa5, 0xdf, 0x67, 0x59, 0xe0, 0x5a, 0x36, 0xc9, - 0xbe, 0x3c, 0x98, 0x15, 0xf3, 0x10, 0xbb, 0x8f, 0x33, 0x37, 0x27, 0xe7, - 0xe1, 0x1b, 0x8b, 0xa1, 0x80, 0xe1, 0xc9, 0x57, 0x01, 0xff, 0xba, 0x40, - 0xf2, 0x8c, 0x91, 0xb6, 0x29, 0x8f, 0xe4, 0x64, 0x13, 0x3d, 0x65, 0x1f, - 0x66, 0x4d, 0x77, 0x65, 0x0c, 0x05, 0xc7, 0xc8, 0xb6, 0x41, 0xee, 0xe4, - 0x02, 0x35, 0xd3, 0x71, 0xb6, 0x86, 0x3d, 0x2e, 0x32, 0xcc, 0x3c, 0x8e, - 0x08, 0x55, 0x1d, 0x26, 0xd0, 0xa3, 0x32, 0x9c, 0x37, 0x0c, 0xe1, 0x07, - 0x81, 0x7f, 0x29, 0xbc, 0x0d, 0xc4, 0x91, 0x96, 0xcd, 0x67, 0xd4, 0x7c, - 0xcf, 0x38, 0x92, 0xfc, 0x8b, 0xa1, 0x64, 0x3b, 0x3a, 0x57, 0x2f, 0xa1, - 0xcb, 0x29, 0xcc, 0x3d, 0xf6, 0x30, 0xf3, 0xd8, 0xaf, 0x06, 0x30, 0x8b, - 0xac, 0xde, 0xa8, 0x19, 0xdb, 0xa4, 0xa6, 0x65, 0xd4, 0x98, 0x72, 0x0e, - 0xc1, 0x33, 0x81, 0x8b, 0xc5, 0xb7, 0x8d, 0x3c, 0xc3, 0xf1, 0x77, 0x9c, - 0x73, 0x14, 0xa6, 0x23, 0x93, 0x62, 0x36, 0x1d, 0x8f, 0x9e, 0x9a, 0xd3, - 0x61, 0xbd, 0xd6, 0xe0, 0xc8, 0x37, 0x53, 0x81, 0x29, 0x4d, 0x3a, 0xe3, - 0x90, 0xb0, 0x29, 0x31, 0x1d, 0x31, 0x48, 0x07, 0xcb, 0xa1, 0x54, 0xc0, - 0xb2, 0x5e, 0xd1, 0x51, 0x05, 0x63, 0x3c, 0x1d, 0xaa, 0xd6, 0x81, 0x01, - 0xd4, 0xd1, 0x19, 0x62, 0xa8, 0xb7, 0x41, 0x41, 0xdb, 0xb1, 0x16, 0xc2, - 0xc2, 0x0c, 0xb8, 0x74, 0xcd, 0xa5, 0x05, 0x8a, 0xe8, 0x85, 0x74, 0x8e, - 0xa1, 0xed, 0x3e, 0xc8, 0x1b, 0xa1, 0x53, 0xb3, 0x08, 0x3d, 0x9d, 0xf0, - 0x4b, 0x62, 0x21, 0x49, 0x37, 0x2c, 0xfe, 0x26, 0x21, 0x9b, 0x3e, 0xb1, - 0x48, 0x26, 0x19, 0x40, 0x2b, 0xc7, 0x2f, 0x2e, 0x7c, 0x30, 0xdb, 0x08, - 0xef, 0x2a, 0xc8, 0xe4, 0x3c, 0x8b, 0xa0, 0xa0, 0x87, 0xc9, 0x19, 0x86, - 0xca, 0x06, 0x80, 0xb7, 0x89, 0x9b, 0x5c, 0xf3, 0x65, 0xc6, 0x43, 0x7c, - 0xba, 0xa3, 0xa9, 0x27, 0xa8, 0x97, 0x68, 0x43, 0xfa, 0x10, 0xa6, 0x4b, - 0xad, 0x6c, 0x06, 0x1d, 0x16, 0xc7, 0x32, 0x4b, 0x19, 0x87, 0x19, 0x13, - 0xe4, 0xd0, 0xaa, 0x77, 0x39, 0x88, 0x6d, 0x1b, 0xa6, 0xa2, 0x8f, 0x95, - 0x6c, 0x24, 0xae, 0x04, 0xc6, 0xb1, 0x10, 0x05, 0x8a, 0x43, 0x12, 0xd8, - 0xcf, 0xf8, 0x9d, 0x21, 0xcc, 0x97, 0x00, 0xe6, 0x58, 0x6e, 0x9d, 0xad, - 0x65, 0x3b, 0x4d, 0xdc, 0xaf, 0x46, 0xe8, 0xac, 0xcd, 0xf1, 0x36, 0xa7, - 0x9e, 0x16, 0xca, 0x78, 0x1d, 0x9e, 0x99, 0x5d, 0x50, 0xde, 0xa8, 0x44, - 0xda, 0xd9, 0xb2, 0x81, 0xeb, 0x60, 0x12, 0x59, 0x8f, 0xea, 0x26, 0xa9, - 0x3c, 0x18, 0x3e, 0x2c, 0x34, 0xcd, 0x79, 0x56, 0x60, 0x17, 0xf7, 0x68, - 0xe9, 0x1e, 0xc9, 0xbc, 0xa7, 0x18, 0xd7, 0x97, 0xfe, 0x1c, 0xbf, 0x01, - 0xc3, 0x93, 0x3b, 0x53, 0xc7, 0x35, 0xdc, 0x80, 0x5c, 0xc1, 0x34, 0xe5, - 0x6e, 0xcc, 0x33, 0x0c, 0xb0, 0x07, 0xa4, 0x52, 0x51, 0x89, 0xc8, 0x2d, - 0xa8, 0x97, 0x0c, 0x79, 0xea, 0xdd, 0xd1, 0xec, 0x61, 0xc1, 0x32, 0x9d, - 0x29, 0x12, 0xd0, 0x06, 0x28, 0x81, 0x28, 0x5b, 0x47, 0xda, 0x35, 0x3c, - 0x16, 0x10, 0xc9, 0x1b, 0x82, 0x5e, 0xf4, 0x4e, 0xf9, 0x1a, 0xb2, 0x61, - 0x4d, 0x99, 0x6b, 0x40, 0xf5, 0x0a, 0xc0, 0xd7, 0x7d, 0xe6, 0x79, 0x0f, - 0x39, 0xbf, 0xd9, 0xd7, 0x31, 0x45, 0xef, 0x02, 0x0c, 0xf0, 0x92, 0x0b, - 0xce, 0x88, 0x6a, 0xd7, 0x0d, 0xdc, 0x22, 0x42, 0xe7, 0xcb, 0x8d, 0x42, - 0xc7, 0x0c, 0x6a, 0x51, 0x6d, 0x31, 0xe2, 0xe7, 0x64, 0x01, 0xa3, 0xe6, - 0x94, 0x4b, 0xd5, 0x29, 0x68, 0xef, 0x0a, 0xbb, 0x05, 0xcc, 0x6f, 0xac, - 0x89, 0x65, 0xe5, 0xe3, 0xfe, 0x0d, 0x54, 0x2f, 0x3a, 0x85, 0xad, 0x02, - 0x81, 0x72, 0xca, 0x27, 0x5c, 0x46, 0xbd, 0xbf, 0x04, 0xea, 0xad, 0x56, - 0x1f, 0xbb, 0x13, 0x5d, 0xf5, 0xcf, 0xd1, 0x91, 0x98, 0xa8, 0x01, 0x45, - 0xe2, 0xd7, 0xb3, 0x8e, 0x20, 0xce, 0xbc, 0x75, 0x63, 0x2e, 0x1f, 0x60, - 0xb4, 0xe9, 0x6b, 0xd2, 0x9e, 0x29, 0x40, 0x59, 0x15, 0xa3, 0x35, 0x69, - 0x3c, 0xe4, 0x77, 0x83, 0x80, 0x6c, 0x03, 0x86, 0xa7, 0x33, 0x8a, 0x4a, - 0x69, 0x05, 0x13, 0x56, 0xe0, 0x16, 0x85, 0x0d, 0x5b, 0x45, 0xd5, 0xa6, - 0x64, 0x5e, 0x08, 0xc0, 0x6a, 0xa1, 0x17, 0xf0, 0xc6, 0xb5, 0x36, 0xa1, - 0x33, 0xc4, 0x60, 0x51, 0xba, 0xd4, 0xbb, 0x81, 0x53, 0x62, 0x09, 0x79, - 0x98, 0x88, 0xb9, 0x0a, 0xe3, 0x38, 0x50, 0x1d, 0xd8, 0xf9, 0x18, 0xbc, - 0x57, 0xed, 0xfe, 0x10, 0xb7, 0xa3, 0x2c, 0x17, 0xe8, 0xa6, 0xc7, 0xbc, - 0x6a, 0x82, 0x4f, 0x06, 0xa7, 0x3b, 0xdc, 0xbc, 0xe6, 0xad, 0x42, 0x3b, - 0x2e, 0x26, 0x00, 0xb4, 0x09, 0x7c, 0x77, 0x65, 0x1e, 0xee, 0x11, 0x8b, - 0x39, 0xff, 0x46, 0xdc, 0xca, 0xef, 0xee, 0x48, 0xed, 0x3e, 0xb2, 0x64, - 0xa8, 0x77, 0x77, 0x74, 0xbb, 0x0d, 0x14, 0x3c, 0xec, 0x38, 0x7c, 0x6e, - 0x29, 0xd2, 0xaa, 0xe1, 0xec, 0xd9, 0x1c, 0x8e, 0x60, 0x58, 0xd7, 0x13, - 0x8b, 0x4c, 0xed, 0xe6, 0x5c, 0x4e, 0x4e, 0xcc, 0x5e, 0x23, 0x5c, 0xd6, - 0x66, 0xd5, 0xe1, 0x84, 0x5d, 0x3b, 0x72, 0x06, 0xa2, 0xce, 0xf7, 0xa7, - 0x9b, 0xd8, 0x67, 0x01, 0xb4, 0x2d, 0xfa, 0xec, 0xc7, 0x96, 0x80, 0xdc, - 0x19, 0xac, 0x08, 0xa8, 0xb4, 0x49, 0xd4, 0xfa, 0x55, 0x18, 0xb8, 0xde, - 0xa8, 0xad, 0x5d, 0xf2, 0x04, 0x50, 0xc2, 0x61, 0x40, 0x97, 0xda, 0x48, - 0x4e, 0xd1, 0x98, 0x7c, 0xec, 0x39, 0xaf, 0x65, 0x57, 0xa6, 0x76, 0xa2, - 0xdc, 0x36, 0xea, 0xf9, 0xbe, 0xb7, 0x6e, 0x7f, 0xf7, 0xdd, 0x57, 0x20, - 0x4c, 0x02, 0x67, 0x2d, 0xfc, 0xcd, 0x28, 0xaa, 0xb8, 0x08, 0xc0, 0x08, - 0x06, 0x6f, 0x3b, 0x47, 0x12, 0x3b, 0x65, 0xfe, 0x6c, 0x48, 0x8b, 0xc9, - 0xc3, 0xbc, 0x2b, 0xf5, 0xf7, 0xd8, 0x9a, 0x9e, 0x75, 0x00, 0x74, 0xd6, - 0x76, 0x39, 0x48, 0x4c, 0xfc, 0xe6, 0xcb, 0x74, 0x6f, 0x3e, 0x12, 0x37, - 0x16, 0xe6, 0xe3, 0x31, 0x72, 0xd7, 0x42, 0x20, 0x05, 0x60, 0x4b, 0x4d, - 0xa4, 0xd2, 0x63, 0x50, 0xf1, 0xc0, 0x9c, 0xd0, 0x14, 0x35, 0x9a, 0x7e, - 0x28, 0xd1, 0xa8, 0x37, 0xde, 0x47, 0x18, 0x07, 0xf5, 0x1a, 0x61, 0x38, - 0x9a, 0xa3, 0x83, 0xb3, 0xa6, 0x96, 0xdd, 0x68, 0x34, 0xb1, 0x07, 0xab, - 0x9f, 0x6b, 0xba, 0xc3, 0xcc, 0xfa, 0xa3, 0x34, 0x6f, 0x0a, 0x8f, 0xdf, - 0xe8, 0xfc, 0xac, 0xcf, 0x54, 0x21, 0x03, 0xb0, 0xd6, 0x65, 0x14, 0xda, - 0x9c, 0xb0, 0x52, 0x0a, 0x49, 0xcb, 0xfb, 0xed, 0x45, 0xb7, 0xa5, 0x10, - 0xf8, 0x62, 0xba, 0x50, 0x93, 0x79, 0x8a, 0xed, 0x00, 0xdd, 0x43, 0xf6, - 0x7e, 0xe1, 0x19, 0xc2, 0x25, 0xb0, 0x2f, 0xab, 0x1a, 0xc2, 0xba, 0x08, - 0x1d, 0xc2, 0x91, 0xb8, 0xd2, 0xf1, 0x64, 0x53, 0xa6, 0x3c, 0x9c, 0x18, - 0x39, 0x0b, 0x4c, 0xf1, 0x86, 0x05, 0x23, 0x99, 0x30, 0xaa, 0xac, 0x59, - 0x70, 0x58, 0x42, 0x64, 0x71, 0x1e, 0x95, 0xd5, 0x0d, 0x69, 0xbd, 0x70, - 0x09, 0x01, 0xc9, 0xe5, 0x2a, 0x00, 0xb9, 0x9c, 0x22, 0x90, 0xd7, 0x23, - 0x79, 0x1d, 0xf7, 0x85, 0xdc, 0x3f, 0x3a, 0x47, 0xe7, 0xb9, 0xf4, 0xb2, - 0x5c, 0x85, 0xc9, 0x3a, 0x23, 0x5b, 0x5d, 0x08, 0x63, 0xc1, 0x1e, 0xff, - 0xfa, 0xec, 0x20, 0x06, 0x7e, 0xce, 0x1e, 0x81, 0x1a, 0xbd, 0x7f, 0x2c, - 0x48, 0x3a, 0xb7, 0x57, 0x1e, 0x32, 0x47, 0x49, 0xc8, 0xe5, 0xcf, 0x86, - 0xfb, 0x85, 0xa3, 0x77, 0xd3, 0xdd, 0x73, 0x61, 0x4a, 0xf3, 0x4c, 0x97, - 0x62, 0xc5, 0x7b, 0xc1, 0x74, 0xdc, 0xc9, 0xb9, 0x6e, 0x27, 0x56, 0xe9, - 0xcb, 0xa8, 0xce, 0x1d, 0x35, 0x47, 0xbd, 0xb1, 0x25, 0xb7, 0x27, 0x07, - 0x0c, 0xb0, 0x95, 0xc6, 0x3e, 0x7e, 0x11, 0xb7, 0x8c, 0x81, 0x5a, 0x38, - 0x7b, 0xb0, 0x16, 0x11, 0x28, 0x42, 0xd3, 0xe1, 0x8e, 0x1f, 0x41, 0x3c, - 0xe5, 0x80, 0xfe, 0xe7, 0x3e, 0x1c, 0xdf, 0x3f, 0x2e, 0x7f, 0x2f, 0xee, - 0x7d, 0xe5, 0xde, 0xdc, 0x53, 0x36, 0xfa, 0xd8, 0xe5, 0xd2, 0xb5, 0x39, - 0x3e, 0x93, 0xd9, 0x59, 0xd9, 0xf0, 0x92, 0xb4, 0x0e, 0x49, 0x41, 0x59, - 0x83, 0x3e, 0x59, 0x1d, 0x97, 0xc1, 0x1b, 0x35, 0x00, 0xab, 0xa2, 0xbf, - 0xb2, 0x15, 0x47, 0x70, 0x85, 0xe6, 0x70, 0x8c, 0x95, 0xef, 0x10, 0x4a, - 0xb5, 0xeb, 0xf6, 0xa3, 0x37, 0x86, 0xdb, 0xe1, 0x4e, 0x54, 0x55, 0x8d, - 0x7a, 0x8f, 0x50, 0x12, 0x35, 0x47, 0x74, 0x04, 0x5d, 0xa0, 0x7c, 0x61, - 0x67, 0x78, 0x26, 0xbf, 0x77, 0x0f, 0x06, 0x56, 0xd5, 0xd5, 0xad, 0x45, - 0xdd, 0xdc, 0x6c, 0x1a, 0xcf, 0xb3, 0xc0, 0x80, 0xa5, 0x87, 0x6c, 0xe3, - 0xed, 0x4a, 0x8c, 0x10, 0xbf, 0xe1, 0x7c, 0x81, 0x6a, 0x75, 0xf3, 0x78, - 0xb6, 0xe4, 0x01, 0xb3, 0x32, 0xab, 0x02, 0x43, 0x70, 0x2e, 0xa1, 0x9c, - 0x1a, 0x4a, 0x75, 0xe7, 0xbe, 0xff, 0xfd, 0xec, 0x99, 0xa2, 0xed, 0x78, - 0xac, 0x39, 0xcc, 0x57, 0x27, 0xc0, 0xb9, 0x01, 0x97, 0xa5, 0x10, 0xfa, - 0xfe, 0x31, 0xf2, 0xed, 0x46, 0x98, 0x10, 0x4d, 0x75, 0x81, 0x23, 0x9b, - 0x05, 0x03, 0xa6, 0xe5, 0xb6, 0xa3, 0xab, 0x5d, 0x50, 0xe7, 0x78, 0x66, - 0xbe, 0x3a, 0xd0, 0x6c, 0x52, 0x90, 0x06, 0x9e, 0xfa, 0x84, 0x4c, 0x64, - 0xe5, 0xb9, 0xf3, 0x4c, 0xd0, 0x16, 0xa8, 0x75, 0xa0, 0x5c, 0x60, 0x4b, - 0xd5, 0x52, 0x47, 0xa7, 0xae, 0xa2, 0x63, 0xe8, 0x9d, 0x18, 0x1a, 0x20, - 0xf9, 0xb0, 0x6f, 0x83, 0xd3, 0x2c, 0x23, 0x47, 0xb4, 0x38, 0xbc, 0x71, - 0xc7, 0x33, 0x8d, 0x58, 0x61, 0xa2, 0xf0, 0x04, 0xc8, 0x44, 0x8b, 0x8c, - 0xb6, 0xa9, 0x64, 0x60, 0x17, 0x29, 0xe0, 0xf9, 0x69, 0x9d, 0xc5, 0xae, - 0x11, 0x97, 0x41, 0x17, 0xca, 0xb2, 0x49, 0x8d, 0x37, 0xc9, 0x00, 0xfa, - 0x96, 0xd9, 0x69, 0x2f, 0x36, 0xb9, 0xe6, 0x6e, 0xd8, 0x32, 0xd6, 0x61, - 0xf4, 0x4f, 0xb5, 0xdc, 0x27, 0x5f, 0x55, 0x21, 0x53, 0x2e, 0x58, 0xd7, - 0x23, 0x00, 0x8e, 0xb9, 0x24, 0x89, 0x0b, 0x81, 0xf3, 0x71, 0x02, 0x20, - 0x84, 0xd9, 0x16, 0x77, 0x88, 0x1d, 0x12, 0xc1, 0xd1, 0xb5, 0x8e, 0xc5, - 0x5d, 0x60, 0x49, 0xa4, 0x34, 0xc5, 0x38, 0x38, 0xb2, 0x51, 0xf3, 0xc5, - 0x51, 0xb7, 0xeb, 0xe2, 0xc8, 0x80, 0x9b, 0x55, 0xd1, 0xe5, 0x37, 0xf0, - 0xa9, 0x1d, 0x1b, 0x9d, 0x4b, 0xba, 0x8f, 0x2e, 0x6d, 0xe5, 0xd0, 0x7b, - 0x99, 0xce, 0xb4, 0x60, 0xba, 0x11, 0xd7, 0x9b, 0x38, 0x1d, 0x5b, 0xae, - 0xe2, 0xe6, 0x2e, 0x9d, 0x67, 0xa4, 0xdc, 0x3d, 0x0c, 0x06, 0xbd, 0x31, - 0x15, 0x62, 0xb3, 0x1c, 0x50, 0x56, 0xa2, 0x99, 0x37, 0xe4, 0xd3, 0x10, - 0x87, 0xd5, 0x75, 0x17, 0x77, 0x08, 0x82, 0x30, 0xae, 0x15, 0x4d, 0x4d, - 0x8a, 0xfa, 0x67, 0xa0, 0x79, 0xdb, 0x01, 0x18, 0xc2, 0xcb, 0xbc, 0xf2, - 0x08, 0xa7, 0x91, 0x15, 0xae, 0x2a, 0x8f, 0x90, 0x94, 0x67, 0x60, 0xce, - 0xae, 0xc8, 0x61, 0x0f, 0xc5, 0x7f, 0x3b, 0xa6, 0xff, 0xf4, 0x4b, 0x97, - 0x6e, 0xe9, 0xda, 0x11, 0x39, 0xee, 0xf5, 0x2d, 0xf1, 0xbe, 0xa3, 0x7f, - 0xb8, 0x23, 0xc5, 0x21, 0x33, 0x04, 0xd3, 0xe5, 0xdf, 0xce, 0x3d, 0x11, - 0x50, 0xde, 0x44, 0xb4, 0xfc, 0xe0, 0xfa, 0xa4, 0xdd, 0xe7, 0x11, 0xdc, - 0x7f, 0x37, 0xe5, 0x85, 0x99, 0x89, 0x51, 0x26, 0x07, 0x65, 0xf5, 0xa1, - 0x6a, 0xf5, 0x06, 0x48, 0xc7, 0x72, 0x80, 0x32, 0xdb, 0x2c, 0x81, 0xe8, - 0x75, 0xc0, 0xa9, 0xa1, 0x37, 0x14, 0x21, 0xe7, 0x1e, 0xd3, 0xf2, 0xe0, - 0x6a, 0x8f, 0x91, 0x98, 0xe7, 0x03, 0xf2, 0xd0, 0xfd, 0x99, 0x3d, 0xd2, - 0x59, 0x85, 0xc2, 0x76, 0xe6, 0x71, 0x45, 0xd0, 0xcd, 0xa6, 0x1a, 0xb3, - 0xa0, 0x0d, 0x7a, 0xd4, 0xd0, 0x09, 0x33, 0x62, 0x80, 0x35, 0x73, 0x28, - 0xf0, 0x98, 0x86, 0xac, 0xcf, 0x93, 0xab, 0xab, 0x82, 0x3d, 0x29, 0x2c, - 0x53, 0xd4, 0x34, 0xa0, 0x99, 0xc7, 0xbe, 0x01, 0x3f, 0x5c, 0x3a, 0x27, - 0x2a, 0xf2, 0x09, 0xf2, 0x06, 0xbd, 0xb9, 0x23, 0xf7, 0xbd, 0x70, 0x32, - 0xcd, 0x26, 0x49, 0xa2, 0x77, 0xcb, 0x23, 0x84, 0x86, 0x96, 0x87, 0xe2, - 0x88, 0x96, 0x9a, 0x2e, 0xed, 0x9e, 0x84, 0xfd, 0x72, 0x05, 0xc1, 0x30, - 0x8d, 0xe5, 0x99, 0x74, 0x65, 0xdc, 0x93, 0x7d, 0xea, 0x19, 0xf4, 0xc1, - 0x58, 0x0e, 0xab, 0x48, 0xcb, 0x73, 0x48, 0xbc, 0xc8, 0xa1, 0x64, 0xef, - 0x29, 0x9f, 0xb8, 0x3e, 0x80, 0xb9, 0x6c, 0x88, 0xa7, 0xe8, 0x96, 0xe7, - 0xff, 0x31, 0x02, 0xde, 0x31, 0xe6, 0x39, 0x01, 0x95, 0xf3, 0xb8, 0xb1, - 0xc2, 0x2b, 0x14, 0x2f, 0xaf, 0xc0, 0x00, 0x5d, 0xa8, 0x05, 0x72, 0x1b, - 0x19, 0xbf, 0x3b, 0x33, 0x3f, 0xdf, 0x63, 0xf0, 0x07, 0x91, 0xaa, 0xb8, - 0xad, 0x24, 0xae, 0xee, 0x58, 0xa2, 0x9b, 0xcf, 0x34, 0xc1, 0x5c, 0x34, - 0x75, 0xec, 0xab, 0x69, 0xc1, 0xa9, 0x02, 0x64, 0xae, 0xb9, 0x92, 0xe8, - 0x74, 0x4f, 0xc0, 0xdd, 0xad, 0x9f, 0x9b, 0xb6, 0xce, 0x9d, 0xfa, 0x2d, - 0x90, 0xfb, 0x77, 0xd9, 0xc9, 0x05, 0xd7, 0x53, 0xb6, 0xdf, 0x52, 0x24, - 0x14, 0x2e, 0xa8, 0xc3, 0xa1, 0x0c, 0x86, 0xa9, 0xa1, 0x1d, 0x09, 0x9f, - 0x39, 0x17, 0x5b, 0xdc, 0x1e, 0xe1, 0x76, 0x0a, 0x87, 0x2c, 0x2a, 0x68, - 0x59, 0x5b, 0x4c, 0xa0, 0xf9, 0xe5, 0x79, 0x61, 0x98, 0xdb, 0x1e, 0x06, - 0xac, 0x9d, 0xae, 0xae, 0x57, 0x42, 0xe2, 0xd8, 0xf1, 0x21, 0xc4, 0xb4, - 0x74, 0x13, 0x93, 0x7f, 0x3d, 0x57, 0x9d, 0xc0, 0x71, 0xf1, 0xc5, 0x4d, - 0xfb, 0x96, 0xd8, 0xf2, 0xf2, 0x23, 0xac, 0xcb, 0x0b, 0x85, 0xeb, 0x45, - 0x8b, 0xa6, 0x4a, 0xb0, 0x0b, 0xa8, 0x91, 0xec, 0x2c, 0xa9, 0x2f, 0xc6, - 0xe3, 0x85, 0xa9, 0x48, 0xc8, 0xa9, 0x92, 0xd3, 0x56, 0x9c, 0x60, 0x0e, - 0x23, 0xd7, 0x6e, 0xcb, 0x5b, 0xdf, 0x49, 0x4d, 0x37, 0x92, 0x81, 0x75, - 0x79, 0xc1, 0x9d, 0x94, 0x0f, 0xf9, 0xcf, 0xa5, 0x1a, 0xa8, 0xca, 0x8c, - 0xe8, 0xdd, 0x97, 0x34, 0xa8, 0xca, 0x59, 0xd3, 0xcd, 0x1e, 0x65, 0x49, - 0x71, 0xe2, 0xa0, 0x43, 0xa5, 0xf7, 0xc9, 0x35, 0x71, 0x49, 0x44, 0x53, - 0xb6, 0x65, 0xc9, 0x38, 0x19, 0xd3, 0x47, 0x8e, 0x62, 0xc3, 0xa1, 0xce, - 0xb8, 0x53, 0x17, 0xfe, 0xb4, 0xab, 0x4c, 0x5e, 0xf2, 0x5b, 0x6a, 0x1c, - 0xba, 0x5b, 0x96, 0xd2, 0xa4, 0x76, 0xe7, 0x4a, 0x0b, 0xc3, 0x65, 0xef, - 0xc7, 0x0b, 0x9d, 0x91, 0xb6, 0x5f, 0xaf, 0x09, 0x14, 0x3a, 0x7d, 0x0e, - 0xb9, 0x2c, 0x7b, 0xd6, 0x21, 0x5b, 0x22, 0x7a, 0x71, 0x56, 0xfa, 0xe5, - 0xac, 0xdb, 0x8b, 0xa6, 0xa7, 0xa0, 0xe1, 0x85, 0xf6, 0x60, 0x8c, 0xda, - 0x70, 0xe2, 0x34, 0x46, 0x86, 0x01, 0x2a, 0x48, 0xf6, 0x62, 0xec, 0xb6, - 0x95, 0xd3, 0x04, 0x05, 0xdc, 0x96, 0x7e, 0x8a, 0x6b, 0xf1, 0xe3, 0x59, - 0xd6, 0x5b, 0x2b, 0xfb, 0x4a, 0xef, 0x14, 0x8a, 0xbe, 0x67, 0x9d, 0x86, - 0x20, 0x70, 0xaf, 0x55, 0xe6, 0x7c, 0xea, 0x8f, 0x93, 0xe3, 0x5e, 0xbf, - 0x80, 0xce, 0xa1, 0x2a, 0xb8, 0x83, 0x54, 0x0e, 0x71, 0xdd, 0x11, 0x44, - 0xb6, 0x96, 0xe3, 0xae, 0xf9, 0x9d, 0x76, 0x8c, 0x49, 0x14, 0x6d, 0xa0, - 0x8b, 0x33, 0x45, 0x97, 0x72, 0x72, 0x75, 0x71, 0x4a, 0xd4, 0x5a, 0x5d, - 0xc3, 0xb2, 0xec, 0xd9, 0xbb, 0x4b, 0x6b, 0x54, 0x5f, 0x24, 0x12, 0x2b, - 0x72, 0xa0, 0x00, 0x57, 0xbf, 0xde, 0x8e, 0xc8, 0x06, 0x45, 0xea, 0x0f, - 0xc8, 0x78, 0xe3, 0xde, 0x3b, 0x6e, 0xdc, 0xb4, 0x42, 0xeb, 0x56, 0xe1, - 0x5c, 0xb4, 0x7a, 0x29, 0xbf, 0x31, 0x81, 0x2c, 0xbf, 0x1d, 0x90, 0x20, - 0x38, 0x1c, 0x03, 0x42, 0x06, 0x91, 0xcc, 0x87, 0xa9, 0x05, 0x72, 0x96, - 0x40, 0x71, 0xb1, 0x04, 0x42, 0x96, 0xa6, 0x10, 0x36, 0x8e, 0x28, 0x9b, - 0x6e, 0xcd, 0xc1, 0x01, 0xd4, 0x72, 0x8a, 0xa5, 0x04, 0x3b, 0x9f, 0xb0, - 0x75, 0xf8, 0x3d, 0x0d, 0xb9, 0xb0, 0x8b, 0xa1, 0x35, 0xfd, 0x92, 0x56, - 0x2e, 0x42, 0x10, 0xa8, 0xc9, 0x6e, 0xb7, 0x5c, 0xe9, 0x41, 0xa2, 0xa2, - 0x55, 0x22, 0x03, 0xfd, 0x0a, 0xbd, 0x8e, 0x8f, 0x13, 0x37, 0x87, 0x92, - 0x9b, 0x07, 0x7c, 0xfa, 0x2e, 0x8d, 0xf0, 0xca, 0x2e, 0x1f, 0x90, 0x17, - 0xed, 0x02, 0x95, 0xbd, 0xca, 0xd6, 0x4f, 0xfe, 0x15, 0x85, 0x78, 0x97, - 0xc2, 0x99, 0x6c, 0xb4, 0x23, 0x0b, 0x93, 0x92, 0xda, 0x9a, 0x5a, 0x9e, - 0x6e, 0x00, 0x60, 0x23, 0x01, 0x9a, 0x7f, 0xdc, 0x03, 0x96, 0x79, 0xa1, - 0xbd, 0xfb, 0xba, 0x6a, 0x38, 0x60, 0x20, 0x2d, 0xda, 0x75, 0x16, 0xde, - 0x27, 0xd7, 0x2e, 0x9a, 0x5c, 0x11, 0x75, 0x2d, 0x1b, 0x0a, 0x15, 0xe2, - 0x9a, 0x8b, 0xd7, 0x2d, 0x8c, 0x33, 0x8b, 0xac, 0x6b, 0xb7, 0xc4, 0xc0, - 0xd9, 0xd9, 0xd8, 0x38, 0x69, 0xba, 0xa0, 0x5f, 0x07, 0xb3, 0xd5, 0x01, - 0x8e, 0xaa, 0x1a, 0xe5, 0x13, 0x97, 0x98, 0x2f, 0x81, 0x76, 0xe3, 0xd5, - 0x49, 0x8e, 0xf0, 0x61, 0xa5, 0xf3, 0xab, 0x31, 0x32, 0x47, 0x69, 0x1b, - 0x41, 0xd1, 0x62, 0x26, 0xaf, 0x5b, 0x3c, 0x06, 0x8d, 0x4a, 0x78, 0xd5, - 0xa2, 0x5b, 0x2a, 0x93, 0x93, 0x18, 0xe3, 0x09, 0x1f, 0x42, 0x31, 0x92, - 0x26, 0x3c, 0x26, 0x5f, 0x77, 0x31, 0xce, 0xc6, 0x9a, 0x6e, 0x44, 0x37, - 0x8e, 0x18, 0xaa, 0xbc, 0x9f, 0x2c, 0x60, 0x98, 0xac, 0xb8, 0x98, 0x68, - 0xeb, 0x58, 0x5b, 0xac, 0x25, 0x42, 0x27, 0x9d, 0xc0, 0xff, 0xdb, 0xb3, - 0x6e, 0xe7, 0x22, 0xf7, 0x5f, 0x93, 0x4a, 0x1d, 0x8a, 0x50, 0x8b, 0x72, - 0x01, 0xdc, 0x57, 0x7d, 0xa4, 0x71, 0xae, 0x80, 0x04, 0x7f, 0x0a, 0xce, - 0xff, 0x47, 0xeb, 0x38, 0x75, 0xfe, 0xb2, 0xd3, 0x89, 0xa2, 0xf8, 0x06, - 0x57, 0x2f, 0xa6, 0xce, 0xe4, 0x72, 0xf6, 0xfc, 0x16, 0xc3, 0xe7, 0xce, - 0xd5, 0xab, 0xd1, 0x18, 0xd7, 0x3b, 0xa7, 0x45, 0x84, 0x5e, 0xc9, 0xae, - 0x9a, 0xf3, 0x7f, 0x35, 0xda, 0x7f, 0x34, 0xbe, 0xff, 0x1f, 0x6b, 0xe5, - 0x1a, 0xff, 0x38, 0x4c, 0x70, 0xb2, 0xa7, 0xcf, 0x2e, 0x2f, 0x13, 0x1c, - 0x0e, 0x80, 0x46, 0x96, 0x39, 0x7f, 0x7e, 0x45, 0xa3, 0x75, 0xe1, 0x4a, - 0xa4, 0xd7, 0x5e, 0xbd, 0x18, 0xe5, 0x38, 0x03, 0x13, 0x2b, 0x95, 0xd0, - 0xba, 0x48, 0xc0, 0x5e, 0xd9, 0x26, 0xf6, 0x3f, 0xbd, 0xab, 0xe9, 0x54, - 0x11, 0x2b, 0xbc, 0x5d, 0x6b, 0xff, 0x55, 0x81, 0xcd, 0xb7, 0xe1, 0x6e, - 0xed, 0xf8, 0xbe, 0x39, 0xa3, 0x05, 0x6f, 0xc0, 0x58, 0x5c, 0x23, 0xf4, - 0x5a, 0x93, 0x75, 0xa4, 0x2d, 0x2a, 0x91, 0x4d, 0x06, 0xd6, 0xdc, 0x27, - 0x76, 0x17, 0xb6, 0x39, 0xdb, 0x06, 0x6f, 0xa9, 0x9d, 0x39, 0xce, 0x2f, - 0x4f, 0x5f, 0xb3, 0x10, 0xa3, 0x5e, 0xcd, 0x70, 0x5a, 0x70, 0xe5, 0xe5, - 0xd9, 0x7b, 0x84, 0x96, 0xf6, 0x9d, 0xc5, 0xb6, 0x7a, 0xf1, 0x32, 0x58, - 0x77, 0xd8, 0x1a, 0x66, 0x6e, 0x13, 0x5d, 0x0c, 0x9c, 0x3a, 0x7f, 0xcd, - 0xfc, 0xf1, 0x04, 0x17, 0xb9, 0x39, 0xe2, 0x25, 0x73, 0x98, 0xc7, 0xf6, - 0xa0, 0xbb, 0x48, 0x16, 0x20, 0xae, 0x19, 0xc9, 0x57, 0x26, 0xac, 0x59, - 0x44, 0x37, 0x4c, 0x8e, 0xba, 0xbf, 0xa7, 0x46, 0xfb, 0xab, 0x71, 0x7a, - 0x2a, 0x9d, 0xff, 0xd8, 0x38, 0xcd, 0xa7, 0xfa, 0xd7, 0xc1, 0xe0, 0xe3, - 0xbb, 0x0d, 0x66, 0x7f, 0x03, 0x2e, 0xa9, 0xa3, 0xd2, 0xcb, 0xce, 0xbd, - 0x0c, 0x97, 0xe9, 0xc5, 0xc9, 0x47, 0x98, 0x6d, 0x48, 0xd0, 0x2f, 0x10, - 0x25, 0x3f, 0x63, 0x97, 0xf4, 0x9a, 0x78, 0x17, 0x9d, 0xf6, 0x5f, 0x9d, - 0x76, 0xfc, 0x47, 0xe7, 0x8c, 0x58, 0xe1, 0x4e, 0xdb, 0xc5, 0x91, 0x7d, - 0x39, 0x1d, 0x58, 0x7e, 0x70, 0xd9, 0xeb, 0x65, 0x08, 0xf7, 0x7f, 0x34, - 0x4f, 0x93, 0xa5, 0xce, 0xff, 0x65, 0xbb, 0xb7, 0xcb, 0xe5, 0x4e, 0x0b, - 0xd7, 0x48, 0xf5, 0x1d, 0x23, 0xfd, 0xab, 0xc6, 0xa5, 0xee, 0x40, 0x13, - 0xf2, 0x30, 0x3c, 0x8c, 0x7b, 0x89, 0x27, 0x3a, 0xe5, 0xbf, 0x25, 0xa2, - 0x2c, 0x6f, 0x5d, 0x7e, 0xfc, 0xc7, 0xd8, 0x45, 0xaf, 0x07, 0xeb, 0xbd, - 0x4f, 0xba, 0x80, 0x92, 0x6c, 0xd5, 0x6a, 0x10, 0x21, 0xa6, 0x51, 0xef, - 0xf4, 0x97, 0x3b, 0x7d, 0xc0, 0x29, 0xc7, 0x6b, 0x22, 0x74, 0xbe, 0x5d, - 0xf8, 0xff, 0x63, 0xe1, 0xdd, 0x53, 0x00, 0x6b, 0x5c, 0x7f, 0xca, 0x53, - 0x64, 0xfb, 0x71, 0x9f, 0xae, 0x2d, 0xb6, 0x34, 0x62, 0xe5, 0xd6, 0xd9, - 0x28, 0x30, 0xc7, 0x12, 0x75, 0x19, 0x28, 0xc2, 0x32, 0x62, 0xa1, 0xc5, - 0x57, 0x98, 0x3a, 0xd7, 0x9c, 0x59, 0xd1, 0x20, 0x45, 0x84, 0x2d, 0xd7, - 0xf2, 0xdb, 0xe5, 0x98, 0xc0, 0xda, 0x3c, 0x68, 0xc3, 0x85, 0x4e, 0x7e, - 0xb9, 0xca, 0x79, 0x62, 0x0c, 0x1f, 0xcb, 0x63, 0x3e, 0xf3, 0x27, 0x38, - 0x77, 0xa7, 0x54, 0xcf, 0x48, 0x5f, 0x11, 0x32, 0x50, 0x21, 0xa8, 0x66, - 0x20, 0xdd, 0xef, 0x98, 0xc4, 0x0f, 0x5b, 0xb4, 0x3b, 0x57, 0x8d, 0x70, - 0x2e, 0x8d, 0xbb, 0x36, 0xa0, 0xce, 0xbc, 0xe9, 0x5a, 0x5d, 0xe3, 0x51, - 0xba, 0x71, 0xc0, 0xae, 0xdb, 0x2e, 0xda, 0x3d, 0x48, 0x69, 0x5e, 0x73, - 0x0d, 0x1f, 0x85, 0xbb, 0xb1, 0x60, 0xdd, 0x24, 0x45, 0x01, 0xf2, 0x10, - 0x5f, 0x83, 0x8d, 0xaf, 0xdf, 0x63, 0x56, 0x94, 0xd2, 0xdb, 0xef, 0x07, - 0xef, 0x36, 0x7f, 0x57, 0x1b, 0x4f, 0x5e, 0x4a, 0xc1, 0x45, 0xa3, 0x9b, - 0xf0, 0x43, 0x90, 0x17, 0x23, 0x5d, 0xe7, 0xaf, 0x99, 0x4b, 0x61, 0xf9, - 0x19, 0xb6, 0x1e, 0x5a, 0x61, 0x19, 0xfd, 0x49, 0xb7, 0xea, 0x4d, 0xff, - 0x4f, 0x9a, 0x73, 0x77, 0xd4, 0x99, 0x30, 0x54, 0x21, 0x93, 0xfa, 0xa0, - 0xc8, 0xf3, 0x5f, 0xfe, 0x34, 0xbf, 0x8f, 0x67, 0xcd, 0x08, 0xce, 0x8d, - 0x97, 0xc7, 0x23, 0xca, 0x07, 0xce, 0x4a, 0x7f, 0x93, 0xc3, 0x38, 0x42, - 0x0e, 0x66, 0xf7, 0x55, 0xd1, 0x8b, 0x23, 0x57, 0x2d, 0xd9, 0xd6, 0xaa, - 0x25, 0x69, 0xac, 0x04, 0xb6, 0xfc, 0x88, 0x75, 0x5e, 0x8a, 0xbd, 0x71, - 0xe3, 0xe4, 0x5a, 0x0d, 0x70, 0xb0, 0x34, 0x8c, 0x62, 0x77, 0xb5, 0x7b, - 0xd9, 0x47, 0x82, 0xf9, 0xc9, 0x0b, 0x39, 0x00, 0x70, 0xbf, 0x64, 0x5f, - 0xc7, 0x3f, 0x79, 0xb7, 0x6d, 0xc1, 0xf0, 0x7d, 0x6d, 0x70, 0xfb, 0x7c, - 0x16, 0x65, 0x67, 0x9a, 0x33, 0x8b, 0xae, 0xe1, 0x05, 0xc6, 0x73, 0x14, - 0x51, 0x6a, 0x70, 0x78, 0xea, 0x5a, 0x11, 0x5f, 0x0b, 0x05, 0x1e, 0x0d, - 0x41, 0x52, 0x7a, 0x4e, 0xde, 0x52, 0x4c, 0x49, 0xe2, 0xe3, 0x80, 0xf9, - 0x96, 0x2e, 0xdd, 0x5b, 0x67, 0xdb, 0x95, 0xed, 0x51, 0xc5, 0xee, 0x6a, - 0x7d, 0xf4, 0xaf, 0xe5, 0x11, 0x74, 0xf0, 0x93, 0x07, 0xe2, 0xba, 0x6b, - 0x3e, 0x98, 0xc2, 0x66, 0x36, 0x04, 0xb8, 0xaa, 0x33, 0xdb, 0x2b, 0x75, - 0xa8, 0x15, 0xbd, 0x80, 0xa1, 0xdd, 0xfc, 0xce, 0x93, 0xf9, 0x3f, 0x7c, - 0x0b, 0xbe, 0x85, 0x51, 0xdd, 0xba, 0x11, 0x06, 0x9d, 0x73, 0x63, 0xb8, - 0x6c, 0x37, 0xbd, 0x2f, 0xee, 0x9c, 0x1a, 0xa7, 0x89, 0xff, 0x1a, 0xf8, - 0xfb, 0x7d, 0x89, 0x01, 0xbe, 0xf0, 0x1e, 0xe6, 0x6a, 0x0a, 0x70, 0xda, - 0xe5, 0x68, 0xfc, 0x5a, 0x32, 0x66, 0x24, 0xd8, 0x70, 0x9a, 0x08, 0xd6, - 0x1d, 0x67, 0xf9, 0xff, 0x1b, 0x31, 0x5c, 0x69, 0x78, 0xc6, 0xc6, 0xb9, - 0xeb, 0xb7, 0xd3, 0xed, 0xb2, 0x5c, 0x0b, 0x52, 0x67, 0x5b, 0x67, 0xbd, - 0xc8, 0x62, 0xe8, 0x31, 0x76, 0xa8, 0x9b, 0x22, 0xe7, 0xbf, 0x6c, 0xb7, - 0xb3, 0x95, 0x88, 0x2c, 0x25, 0x18, 0x1c, 0x4c, 0x8e, 0x2e, 0xe5, 0xc4, - 0x19, 0xb7, 0xb8, 0xff, 0x1d, 0x67, 0xcc, 0xc7, 0xd6, 0xfe, 0x3f, 0x1a, - 0x61, 0x77, 0x19, 0xfe, 0xf6, 0x72, 0xcb, 0x7f, 0x5a, 0xd1, 0x85, 0xf7, - 0x5f, 0x5f, 0x3f, 0xef, 0xf5, 0xff, 0x7c, 0xed, 0x6e, 0x2f, 0x69, 0xbf, - 0x8e, 0xcf, 0x82, 0xf5, 0xfa, 0x48, 0x96, 0xd2, 0x2d, 0xc1, 0x78, 0x04, - 0xbd, 0xf6, 0x70, 0xf5, 0xa6, 0xdb, 0x15, 0xe3, 0xfe, 0xc4, 0x10, 0x91, - 0xeb, 0x11, 0x3d, 0x4f, 0x62, 0xe4, 0xcd, 0xf9, 0x4d, 0x04, 0xe1, 0x7c, - 0xc3, 0x83, 0xdc, 0x5b, 0xd3, 0xdc, 0xbc, 0xec, 0xd6, 0x6b, 0xb8, 0x7f, - 0xb8, 0x91, 0x6b, 0x0e, 0x47, 0x9c, 0x91, 0x47, 0x5c, 0x54, 0x18, 0x8b, - 0x66, 0x61, 0x19, 0x07, 0x33, 0xa2, 0x29, 0x03, 0xf6, 0xed, 0x2d, 0x30, - 0xc7, 0xa3, 0x1f, 0xcc, 0xb9, 0xf0, 0x3e, 0xb6, 0xb2, 0xd9, 0xdb, 0x12, - 0xf6, 0x56, 0x9b, 0xb4, 0xfd, 0x84, 0x5f, 0xce, 0xc4, 0x97, 0xf5, 0x4c, - 0x49, 0x63, 0x4e, 0x43, 0xeb, 0xa9, 0x5b, 0x87, 0x9b, 0xcf, 0x52, 0xc1, - 0x34, 0xdd, 0xcc, 0x46, 0x66, 0x6b, 0xc5, 0x91, 0xb6, 0x0b, 0x2e, 0xd9, - 0x00, 0xad, 0xd3, 0x89, 0xf6, 0x2c, 0xd1, 0x92, 0x06, 0x93, 0x3a, 0x77, - 0x04, 0xb2, 0x92, 0xef, 0x93, 0xef, 0x93, 0xbb, 0x7c, 0x2c, 0xed, 0x8a, - 0x7b, 0x50, 0x51, 0xe3, 0x1a, 0xc4, 0xa8, 0xb7, 0xe0, 0x71, 0xe5, 0x69, - 0x8f, 0xbb, 0x65, 0x21, 0xe7, 0x35, 0xdd, 0x7c, 0x0c, 0xa5, 0x01, 0xb4, - 0x28, 0x27, 0x1c, 0xa8, 0x0e, 0xdd, 0x29, 0x6c, 0xbd, 0xfe, 0x89, 0x54, - 0x94, 0x81, 0xb5, 0x44, 0x1a, 0xf8, 0x42, 0x04, 0x41, 0x38, 0x86, 0x0b, - 0x6f, 0xba, 0x77, 0x75, 0x78, 0xe8, 0x32, 0xe5, 0xff, 0x68, 0xfc, 0x97, - 0xf5, 0xe0, 0xd6, 0x34, 0x5d, 0x3f, 0x8a, 0x8b, 0x6f, 0x85, 0x77, 0x3d, - 0x5e, 0x3a, 0x59, 0xd3, 0x8a, 0xeb, 0x0c, 0x2f, 0xa6, 0xa2, 0x2d, 0x5f, - 0x37, 0x88, 0xf6, 0x87, 0xfe, 0xc6, 0xf5, 0xb2, 0x16, 0x81, 0xdc, 0x21, - 0xd2, 0xe2, 0xe6, 0x8e, 0xda, 0x7b, 0x88, 0x90, 0xad, 0x33, 0xf8, 0x3f, - 0xa9, 0xfb, 0x9f, 0x21, 0xd4, 0xff, 0xf6, 0x48, 0x33, 0xde, 0xca, 0x38, - 0xf6, 0xa0, 0xfc, 0x6f, 0x3f, 0xcb, 0x62, 0xb4, 0xe1, 0x46, 0x2f, 0xdf, - 0xbd, 0xe0, 0xfe, 0x6f, 0x8f, 0x9a, 0x51, 0xfd, 0x4e, 0x65, 0x42, 0xb6, - 0x94, 0x57, 0x1c, 0x3e, 0xd6, 0xff, 0x34, 0x0f, 0xf5, 0x3f, 0xcd, 0x43, - 0xe7, 0xc3, 0x55, 0x7f, 0xe0, 0x25, 0xc2, 0x89, 0x2b, 0x77, 0xba, 0xdd, - 0x74, 0xb1, 0x97, 0xfc, 0x06, 0x4d, 0x62, 0x0c, 0xed, 0xff, 0x30, 0xa7, - 0xb1, 0x29, 0x3f, 0x2e, 0xe9, 0xeb, 0xfc, 0x76, 0x7a, 0x87, 0x76, 0xb2, - 0xf5, 0x02, 0x57, 0xfd, 0xf9, 0x16, 0x87, 0xa7, 0xcf, 0xeb, 0x7e, 0xc3, - 0xee, 0xd5, 0x72, 0xea, 0x6c, 0xa8, 0xa2, 0x3e, 0xf7, 0xc1, 0x83, 0x50, - 0xdb, 0x1f, 0x6f, 0x62, 0xa4, 0x76, 0xc6, 0xe3, 0xbf, 0x63, 0x37, 0xcb, - 0xc1, 0xfd, 0x12, 0xb7, 0xdc, 0xaf, 0x68, 0x05, 0x87, 0x63, 0x08, 0x97, - 0x62, 0x77, 0xf2, 0xf1, 0xfd, 0xb8, 0x58, 0x15, 0xe3, 0x5f, 0xea, 0x53, - 0x62, 0xf0, 0x08, 0x3c, 0x04, 0x88, 0x7d, 0x2c, 0xe1, 0x38, 0xec, 0x6c, - 0x98, 0xa8, 0xfe, 0x19, 0x00, 0xe3, 0xf2, 0x95, 0x7c, 0x99, 0x1f, 0x38, - 0x1f, 0x0d, 0x16, 0xd8, 0xfd, 0xcc, 0x26, 0xb2, 0xd7, 0x09, 0xcf, 0x96, - 0xd6, 0x28, 0x84, 0x36, 0x6d, 0x8a, 0x00, 0xbc, 0x2e, 0x01, 0x78, 0xfd, - 0x0d, 0x40, 0xb9, 0xce, 0x02, 0xaf, 0x55, 0x5c, 0xb8, 0x5d, 0x71, 0x97, - 0x0d, 0x3b, 0xb5, 0x3c, 0x59, 0xd1, 0x58, 0xfc, 0x49, 0xc7, 0x8b, 0x86, - 0x3b, 0x61, 0xd5, 0x50, 0x92, 0xcb, 0x60, 0x5a, 0xac, 0x1d, 0x11, 0x76, - 0x4b, 0xed, 0xac, 0xa7, 0x1b, 0x7a, 0xc0, 0xcb, 0xb0, 0x0f, 0xe7, 0xbb, - 0x5f, 0xdd, 0x4e, 0xc8, 0x52, 0x18, 0xde, 0x6d, 0xce, 0x01, 0xb1, 0x35, - 0xe7, 0x70, 0x29, 0x51, 0x1f, 0x4b, 0x6d, 0xfb, 0xca, 0x53, 0x17, 0xd7, - 0x9e, 0xef, 0xaf, 0x9e, 0x9b, 0x3b, 0x96, 0x3f, 0xb5, 0xe5, 0xe4, 0xf5, - 0xdd, 0x1a, 0x66, 0x2e, 0x69, 0x79, 0x55, 0x3f, 0xd7, 0x0f, 0xb3, 0xdf, - 0x25, 0x04, 0x54, 0x07, 0x6f, 0xd7, 0x1a, 0xb7, 0xfe, 0xff, 0x54, 0x2f, - 0xd3, 0x7a, 0xf8, 0xea, 0x0c, 0xd6, 0xf5, 0x5d, 0xd3, 0x57, 0x3c, 0xf3, - 0xbe, 0x5c, 0xca, 0xe3, 0xde, 0x7c, 0x40, 0x73, 0x16, 0xf2, 0x37, 0x9e, - 0xf3, 0x58, 0xfe, 0xcc, 0x81, 0xa4, 0xd5, 0xb9, 0xe4, 0x2b, 0x97, 0xd9, - 0xef, 0xd6, 0x59, 0x9a, 0xf6, 0x70, 0x9a, 0x36, 0xb6, 0x5b, 0x2c, 0xa3, - 0x62, 0xdf, 0xd5, 0x1c, 0x56, 0x50, 0xb0, 0xe0, 0xe5, 0x52, 0x34, 0xcd, - 0x97, 0xff, 0x9b, 0x46, 0x60, 0x5e, 0x70, 0xb6, 0x67, 0xe5, 0xb1, 0x9a, - 0xa5, 0xb5, 0xa7, 0x6e, 0x80, 0x58, 0x70, 0x9d, 0x32, 0x89, 0xa7, 0x80, - 0xef, 0x54, 0xbf, 0xb9, 0x9b, 0xf8, 0x9b, 0x13, 0x0b, 0xd2, 0xef, 0x39, - 0x07, 0x2f, 0x58, 0x12, 0x77, 0x11, 0x58, 0xeb, 0x93, 0x07, 0xaa, 0xba, - 0xa6, 0xcc, 0x00, 0xf7, 0x00, 0xb2, 0x34, 0xfb, 0x42, 0x63, 0xb1, 0x49, - 0x88, 0x45, 0x61, 0xfd, 0x87, 0x47, 0xfe, 0xd7, 0x81, 0xb7, 0x66, 0xad, - 0x2e, 0x7b, 0xb5, 0x0e, 0x3a, 0x4f, 0x8b, 0x0e, 0xf5, 0x9d, 0xc7, 0x83, - 0x26, 0x6a, 0xfa, 0xb7, 0x90, 0x9a, 0xc3, 0x3f, 0x04, 0x58, 0x24, 0x1b, - 0x85, 0xb4, 0x5b, 0x02, 0xa4, 0x10, 0xad, 0x71, 0x3d, 0x81, 0xf7, 0x9a, - 0x58, 0x0a, 0xc2, 0xa0, 0x6e, 0xe5, 0x4f, 0x62, 0x1c, 0x6b, 0xa2, 0xb0, - 0x89, 0x15, 0x94, 0xfb, 0x4e, 0x92, 0x31, 0x06, 0x65, 0x2d, 0x01, 0x23, - 0xbd, 0xfe, 0xd2, 0x02, 0x30, 0xcf, 0xb0, 0xa8, 0xf3, 0x5a, 0xf1, 0x34, - 0x44, 0x4f, 0x00, 0x72, 0xd4, 0xb5, 0x49, 0x0b, 0x76, 0x48, 0xd6, 0x27, - 0x6e, 0x21, 0x64, 0xea, 0xc5, 0x0d, 0x73, 0x46, 0x5f, 0x4e, 0x25, 0x00, - 0x2d, 0xc0, 0xec, 0x87, 0x18, 0x94, 0x7f, 0x93, 0x88, 0xf3, 0x1a, 0x8b, - 0xe2, 0x02, 0x5d, 0x94, 0x61, 0x7d, 0x6a, 0x4f, 0x84, 0xf7, 0xbc, 0xb9, - 0xf3, 0x41, 0x99, 0x16, 0xa6, 0x86, 0x45, 0xe9, 0xa2, 0xe1, 0x11, 0xaf, - 0x7d, 0x4c, 0x49, 0x8a, 0x32, 0x46, 0x21, 0x2e, 0xd8, 0xef, 0xe9, 0x25, - 0xf8, 0xea, 0x1b, 0x64, 0x55, 0x3c, 0x4c, 0x0e, 0x19, 0xac, 0xf6, 0xa4, - 0x96, 0x76, 0x3c, 0xd7, 0xec, 0x43, 0x72, 0x00, 0xf2, 0xbc, 0xd9, 0x7b, - 0x3d, 0xef, 0x8d, 0x59, 0xaf, 0xd7, 0xc6, 0x90, 0xd9, 0x69, 0xa0, 0xaf, - 0x1d, 0xaf, 0x21, 0x50, 0xb0, 0xf6, 0xd3, 0x35, 0xb8, 0x92, 0xa3, 0x6f, - 0xc6, 0x92, 0x71, 0xa1, 0x95, 0x10, 0x07, 0x5b, 0xb5, 0x04, 0xbf, 0xea, - 0x2d, 0xc0, 0xd5, 0x9c, 0x64, 0x89, 0x5e, 0x17, 0x08, 0x59, 0xae, 0x0b, - 0x0f, 0x17, 0xac, 0xc5, 0x6a, 0xf6, 0xb1, 0x62, 0x59, 0xd0, 0x61, 0xb4, - 0x87, 0xab, 0xcb, 0x32, 0x88, 0x1e, 0x02, 0xad, 0xcb, 0x76, 0x69, 0x45, - 0x9d, 0x69, 0xe0, 0x6b, 0xeb, 0x5e, 0x24, 0x4a, 0x7f, 0xff, 0xa1, 0xc3, - 0x70, 0xaf, 0xc4, 0x4a, 0x23, 0xb1, 0xbc, 0xac, 0x07, 0x8f, 0xca, 0x05, - 0xf2, 0x91, 0x91, 0xb1, 0x07, 0xde, 0x7f, 0x92, 0xe1, 0x31, 0xe5, 0x75, - 0x09, 0x38, 0x0f, 0x4e, 0x69, 0xdf, 0x45, 0x50, 0xd7, 0x12, 0x2b, 0x12, - 0x6b, 0xc1, 0xcc, 0x3e, 0x53, 0x02, 0x75, 0xf5, 0xfd, 0x69, 0xac, 0xe4, - 0x27, 0x91, 0x4b, 0x11, 0x89, 0x5d, 0xba, 0xb5, 0xbc, 0xfe, 0xc4, 0x8b, - 0xd7, 0x63, 0x70, 0x99, 0x5e, 0x29, 0x2b, 0x44, 0x51, 0x40, 0xad, 0xe5, - 0x0f, 0x01, 0x54, 0x3c, 0xce, 0x3c, 0x22, 0xfa, 0x76, 0xcd, 0x3d, 0x6c, - 0x33, 0x08, 0xd3, 0xbe, 0x90, 0x9f, 0xf3, 0xbd, 0x89, 0xfe, 0xca, 0x3f, - 0xad, 0xcf, 0xeb, 0xe3, 0x79, 0x0d, 0x23, 0x97, 0xd5, 0x3b, 0xe2, 0x58, - 0x12, 0xc0, 0xea, 0xf2, 0x63, 0x16, 0x3c, 0x58, 0xf5, 0x2f, 0x7b, 0x2d, - 0xa7, 0x64, 0x9f, 0xa1, 0x29, 0xfd, 0xca, 0xca, 0x31, 0xf1, 0x53, 0x55, - 0xb0, 0x6d, 0x40, 0xb0, 0x7a, 0x45, 0x60, 0x71, 0xa1, 0x19, 0xc4, 0x3d, - 0x80, 0x1c, 0xea, 0x1d, 0x11, 0x20, 0x9a, 0x33, 0xd0, 0x29, 0x05, 0x95, - 0x14, 0x8d, 0xb0, 0x96, 0xb1, 0x57, 0xde, 0x26, 0xd4, 0x6d, 0x97, 0x8b, - 0x54, 0x4d, 0xf0, 0xdd, 0xbd, 0x7e, 0x0b, 0x06, 0x18, 0xef, 0xbc, 0x56, - 0x9c, 0x99, 0xbb, 0xab, 0x76, 0x94, 0x2e, 0x19, 0x4e, 0xf8, 0x08, 0x10, - 0x34, 0x12, 0x08, 0x76, 0x07, 0xb9, 0x8a, 0x10, 0xf4, 0xd6, 0x70, 0xc5, - 0x2a, 0x00, 0x54, 0x1c, 0xe2, 0xca, 0xaf, 0xc0, 0xac, 0x51, 0x68, 0x1f, - 0x27, 0xa7, 0x4b, 0x3c, 0xdf, 0xe9, 0x9c, 0x07, 0x57, 0x4d, 0x27, 0x8b, - 0x1b, 0x61, 0xa1, 0x6b, 0x88, 0xef, 0xca, 0xd3, 0xd5, 0x24, 0x7d, 0x23, - 0x95, 0x1c, 0xb3, 0x1c, 0xa0, 0xef, 0xa2, 0x83, 0xf3, 0x27, 0x30, 0x01, - 0x2f, 0xf7, 0xd4, 0x92, 0xed, 0x1e, 0x27, 0x3d, 0x32, 0xb8, 0xae, 0x0a, - 0x55, 0x9a, 0xf4, 0x74, 0x88, 0x50, 0x84, 0x42, 0xf8, 0x9d, 0xae, 0xb8, - 0x3b, 0x36, 0x4d, 0x29, 0x3e, 0x28, 0xa4, 0xb8, 0x6d, 0x4d, 0xe9, 0x90, - 0xe2, 0x41, 0xb8, 0x80, 0x87, 0xc3, 0xb8, 0x6b, 0x59, 0xcc, 0x69, 0x24, - 0x9d, 0x46, 0xac, 0x89, 0xba, 0x1a, 0x42, 0x8e, 0xe5, 0xad, 0x33, 0x53, - 0xd8, 0xc0, 0xea, 0x13, 0x40, 0xcb, 0xe1, 0xc8, 0x37, 0x4d, 0x8a, 0x4a, - 0xe5, 0xe8, 0xce, 0x63, 0x50, 0xb7, 0x7e, 0xf8, 0x65, 0x5d, 0x93, 0x2e, - 0xdd, 0x34, 0xd0, 0xba, 0xe7, 0xad, 0xfb, 0xed, 0x3d, 0xd0, 0x1a, 0x47, - 0x60, 0x57, 0x6b, 0xcf, 0xf6, 0xb1, 0x23, 0x36, 0x55, 0xeb, 0xe4, 0xaa, - 0x15, 0x99, 0x26, 0xa4, 0x43, 0x78, 0x40, 0x9b, 0x93, 0x61, 0xbf, 0xbb, - 0xa9, 0xcd, 0x3a, 0x10, 0xe9, 0xe6, 0x6b, 0x46, 0xc4, 0x31, 0x79, 0xa0, - 0xfb, 0x25, 0x47, 0xa7, 0xeb, 0x91, 0x27, 0xb1, 0xca, 0x94, 0xa9, 0x0f, - 0xfa, 0x1c, 0x2b, 0xc5, 0xa7, 0xec, 0xa1, 0xd3, 0x34, 0x65, 0x5d, 0x67, - 0x9a, 0x2e, 0x0f, 0x6b, 0x2b, 0xf4, 0xd0, 0x96, 0x31, 0x59, 0x0f, 0x33, - 0x3a, 0xaa, 0x81, 0xa2, 0x20, 0x00, 0xcb, 0x35, 0x3d, 0x5d, 0x99, 0x2e, - 0xb8, 0x9b, 0xd9, 0x2e, 0x81, 0x2c, 0x5e, 0x70, 0x28, 0x2d, 0x10, 0x41, - 0x2d, 0x5b, 0x2f, 0xba, 0xb8, 0x76, 0x44, 0xc5, 0x15, 0x48, 0x66, 0x6b, - 0xea, 0x52, 0x17, 0x9d, 0x39, 0x8b, 0x92, 0x34, 0x8a, 0x9b, 0x7c, 0xfa, - 0x71, 0x35, 0xc7, 0xe7, 0x4d, 0xe5, 0x5d, 0x23, 0x9c, 0x21, 0x73, 0x75, - 0xa6, 0x97, 0x06, 0x87, 0xde, 0x5c, 0x04, 0xeb, 0x2d, 0xc6, 0x1a, 0x7d, - 0xe8, 0x8a, 0x95, 0x4b, 0xa8, 0x78, 0xac, 0xe8, 0xe2, 0x8b, 0xf8, 0x33, - 0x1f, 0xa8, 0x11, 0x36, 0x6e, 0x67, 0x3c, 0x88, 0x2f, 0xfe, 0x97, 0x5b, - 0x8f, 0x45, 0x31, 0x4f, 0x86, 0x76, 0xf9, 0x44, 0xbe, 0x5b, 0x14, 0xf7, - 0xfe, 0xef, 0xf7, 0xb0, 0xfc, 0xfe, 0x13, 0x9a, 0xb7, 0xa7, 0x66, 0xe9, - 0x17, 0xf5, 0x89, 0x71, 0xc3, 0xbf, 0x4e, 0xba, 0x8c, 0xd6, 0xea, 0x97, - 0xd4, 0x1a, 0xc5, 0xad, 0xd7, 0x5e, 0xd4, 0x60, 0xba, 0x0e, 0x94, 0xd4, - 0x30, 0xbf, 0xee, 0x58, 0x81, 0x58, 0x29, 0x02, 0xc0, 0x76, 0x4c, 0xa8, - 0xeb, 0xd1, 0xeb, 0x18, 0xc8, 0x69, 0x30, 0x66, 0xdd, 0x83, 0x84, 0x49, - 0xd4, 0x67, 0xe3, 0x51, 0x2d, 0xae, 0x1c, 0x68, 0xa6, 0xb3, 0xc6, 0xfb, - 0x2a, 0x00, 0x07, 0x82, 0x14, 0x27, 0xa5, 0xe3, 0x11, 0x84, 0xd5, 0x34, - 0x6d, 0x62, 0x4d, 0x45, 0xe7, 0x28, 0x01, 0x62, 0x1c, 0x62, 0x18, 0xa3, - 0x3d, 0x1e, 0x13, 0x31, 0x2c, 0xc1, 0x2b, 0x03, 0x17, 0x3d, 0x2c, 0x12, - 0x77, 0xa8, 0x99, 0xbd, 0x41, 0x5d, 0x2a, 0x6c, 0x20, 0x6e, 0x8e, 0x01, - 0xd4, 0x9d, 0x61, 0x81, 0x2a, 0xa1, 0x9f, 0x26, 0x76, 0xc4, 0xb8, 0x72, - 0x3d, 0xa0, 0x03, 0x84, 0xde, 0xc0, 0xf6, 0xc4, 0xe1, 0x7a, 0x2e, 0x01, - 0x2c, 0xad, 0x03, 0x77, 0x44, 0x2f, 0x78, 0x19, 0xe0, 0xad, 0x5c, 0x56, - 0xe9, 0xb0, 0x8a, 0x41, 0xd0, 0x87, 0x9a, 0xff, 0xdb, 0xad, 0x95, 0xda, - 0x15, 0xbf, 0x7c, 0x89, 0xdf, 0x75, 0xa0, 0x65, 0xdc, 0x8f, 0x5c, 0xcc, - 0xbc, 0x42, 0xe4, 0x1f, 0x74, 0x1c, 0x15, 0x87, 0x4e, 0x48, 0x92, 0x56, - 0x8e, 0x4f, 0xa1, 0x19, 0x20, 0x09, 0x28, 0xe0, 0x84, 0x16, 0x8f, 0x3e, - 0x11, 0x14, 0xa1, 0x38, 0x49, 0x4b, 0xa1, 0x1f, 0x6b, 0xfc, 0x93, 0xb4, - 0xd7, 0x81, 0xb2, 0x83, 0x75, 0x90, 0x30, 0x74, 0xb5, 0x66, 0x49, 0xf7, - 0x07, 0xd5, 0x1b, 0x6e, 0x87, 0x69, 0x1d, 0x20, 0x28, 0x80, 0x39, 0x60, - 0xee, 0x54, 0xe2, 0xe2, 0x81, 0xba, 0xa6, 0x1a, 0x06, 0xe1, 0x90, 0xdc, - 0x14, 0xa7, 0x22, 0x78, 0xe2, 0xbc, 0x75, 0x83, 0x2c, 0xde, 0x84, 0xe9, - 0x62, 0xbf, 0x3b, 0xea, 0x8e, 0xc8, 0x50, 0x39, 0xaf, 0xcc, 0x27, 0xc3, - 0xeb, 0x71, 0x80, 0xce, 0x24, 0xbd, 0x70, 0xee, 0x49, 0xb9, 0x80, 0x6f, - 0x0f, 0x49, 0xa9, 0x96, 0x59, 0x83, 0x2c, 0xec, 0x74, 0xbc, 0x55, 0x7e, - 0xd8, 0xd9, 0x33, 0xd7, 0xfb, 0x3f, 0x3a, 0x46, 0x50, 0x55, 0x2a, 0x8d, - 0x2c, 0xe2, 0x3c, 0xec, 0x06, 0xe8, 0x39, 0x1f, 0x8a, 0xa4, 0x81, 0x27, - 0x95, 0x21, 0xf9, 0x01, 0x45, 0xe1, 0xa9, 0x03, 0x1f, 0x95, 0x75, 0xee, - 0x08, 0x7c, 0xd9, 0xf5, 0x91, 0x46, 0x54, 0x16, 0x71, 0xba, 0x36, 0x1d, - 0x58, 0xcd, 0xa6, 0xd0, 0x1c, 0xc0, 0x9d, 0x54, 0xdb, 0x05, 0x24, 0x31, - 0x63, 0x43, 0x37, 0x9e, 0x00, 0x00, 0xb0, 0x31, 0x3a, 0x44, 0x4f, 0x3a, - 0xe4, 0xe6, 0x89, 0x71, 0xd8, 0xf0, 0xc5, 0xd9, 0xd2, 0xaa, 0xe3, 0xab, - 0xa6, 0x33, 0x4a, 0x4d, 0x03, 0xe5, 0xee, 0x3b, 0x1c, 0x3c, 0x42, 0xe2, - 0xea, 0x71, 0x61, 0xd4, 0x7a, 0x82, 0xc5, 0xa9, 0xce, 0xcd, 0xcd, 0xe1, - 0x39, 0xc6, 0x6d, 0xeb, 0xd8, 0x2d, 0xec, 0x2f, 0x7d, 0x4e, 0x3d, 0x68, - 0xe9, 0xe1, 0x02, 0xf7, 0x95, 0x6f, 0xc1, 0xcd, 0x87, 0xa3, 0xa6, 0xfb, - 0x15, 0x81, 0xcf, 0xe4, 0xfc, 0x93, 0x88, 0x97, 0x34, 0xf4, 0x98, 0xc7, - 0xa9, 0x78, 0x42, 0xff, 0xe2, 0x53, 0x90, 0x80, 0xdd, 0x2b, 0x8a, 0x53, - 0x12, 0x70, 0x9e, 0x6f, 0xe8, 0x27, 0xf3, 0x8d, 0x15, 0xec, 0x28, 0xb8, - 0x44, 0x35, 0xa0, 0xe6, 0x1c, 0x40, 0x63, 0xbe, 0x26, 0x44, 0x4e, 0x36, - 0x6a, 0xc7, 0x04, 0xe2, 0x7e, 0xfc, 0xe5, 0xe3, 0xbb, 0xb2, 0xc0, 0x2f, - 0xff, 0x15, 0x8a, 0x4b, 0xbd, 0xc0, 0x2d, 0x41, 0x1f, 0xa2, 0x36, 0x5c, - 0x1a, 0x1e, 0xc5, 0x31, 0x6e, 0x7e, 0x99, 0xdd, 0x80, 0x5f, 0xfe, 0x02, - 0xe8, 0x41, 0x6a, 0xbc, 0x85, 0x38, 0x50, 0xd1, 0xfd, 0xeb, 0xc1, 0x46, - 0x51, 0x44, 0xc5, 0x7a, 0x3b, 0xec, 0x34, 0x92, 0x2e, 0xeb, 0x21, 0x5d, - 0x43, 0x78, 0x56, 0x99, 0x60, 0x89, 0xdc, 0xf2, 0x54, 0xbf, 0xe4, 0x6b, - 0x39, 0x83, 0x60, 0x05, 0x27, 0xb9, 0x1b, 0x82, 0xea, 0x49, 0x3b, 0xdb, - 0xed, 0xf0, 0xb5, 0x03, 0xa3, 0x32, 0xcb, 0xcb, 0x80, 0xea, 0x3d, 0x26, - 0x38, 0x86, 0x36, 0x7f, 0x94, 0xab, 0x2a, 0xec, 0xd8, 0xbb, 0x3f, 0xb3, - 0xd6, 0x39, 0xda, 0x89, 0x25, 0xd7, 0xca, 0x77, 0x92, 0xea, 0x98, 0x6e, - 0x54, 0x39, 0x36, 0x03, 0xf5, 0x5e, 0xa4, 0x8e, 0xca, 0x79, 0xde, 0xa4, - 0x60, 0x2a, 0x2b, 0xf4, 0x78, 0x2e, 0xbe, 0xf1, 0x2a, 0x19, 0x53, 0x14, - 0x92, 0xc4, 0x7a, 0x9d, 0x90, 0xf4, 0xdc, 0x1f, 0xc4, 0xb3, 0x1e, 0x4c, - 0x87, 0x14, 0xd7, 0x66, 0xd4, 0x53, 0xd2, 0xaa, 0xea, 0xea, 0x8b, 0x7a, - 0xde, 0x7c, 0x01, 0x98, 0x44, 0x22, 0xcc, 0xbd, 0x30, 0x26, 0xb9, 0xd3, - 0x74, 0xec, 0xa5, 0xfe, 0x58, 0xdf, 0xbc, 0x45, 0x33, 0x0c, 0xff, 0x78, - 0xa1, 0x32, 0xd4, 0x4c, 0xb2, 0xb1, 0x49, 0xd6, 0xc5, 0xc3, 0x24, 0x6e, - 0x12, 0x6f, 0x5c, 0x20, 0x79, 0x1e, 0x96, 0xc0, 0xb4, 0x90, 0x5d, 0x9d, - 0xdc, 0x40, 0xd6, 0xf5, 0x8b, 0xf5, 0x31, 0x59, 0x5d, 0xaa, 0x14, 0xcb, - 0xaf, 0x0f, 0x19, 0x65, 0x10, 0x4d, 0x75, 0x8a, 0x99, 0x94, 0x11, 0x7a, - 0xc0, 0x05, 0x6a, 0x23, 0x3a, 0x3a, 0x6a, 0xc0, 0x1b, 0x5c, 0x81, 0x88, - 0x5e, 0xe7, 0x62, 0x20, 0xe2, 0x3a, 0x0a, 0xd1, 0x81, 0x65, 0x05, 0x06, - 0xe2, 0x79, 0xb4, 0x27, 0x57, 0x35, 0xd4, 0x7b, 0xf8, 0x71, 0xc5, 0xfe, - 0x08, 0x9d, 0x95, 0x88, 0x89, 0x2a, 0xcf, 0x27, 0x55, 0xc6, 0x00, 0x6f, - 0x9d, 0xb1, 0x35, 0xcd, 0x56, 0x04, 0xfe, 0x61, 0x37, 0x3b, 0x38, 0x51, - 0xfb, 0xe9, 0xe8, 0x10, 0x0c, 0x01, 0x89, 0xc0, 0xed, 0x02, 0xcf, 0x09, - 0xdd, 0x45, 0xeb, 0xa2, 0x71, 0x91, 0xaf, 0x20, 0xef, 0x15, 0x9d, 0x87, - 0x13, 0xb8, 0x75, 0xab, 0xf9, 0x07, 0xa1, 0x0e, 0x82, 0x74, 0xc8, 0xa5, - 0x44, 0x72, 0x71, 0xd3, 0x4d, 0x45, 0x0f, 0xfa, 0x52, 0x57, 0xfb, 0xfa, - 0x54, 0x5d, 0x58, 0x8a, 0x23, 0x0d, 0x75, 0xe6, 0x65, 0xe6, 0x20, 0x99, - 0x13, 0x75, 0x43, 0x9e, 0xa8, 0x02, 0x3e, 0x82, 0xa8, 0xb3, 0xdf, 0x82, - 0x48, 0x10, 0x3a, 0x07, 0x89, 0x57, 0xda, 0xf9, 0xc6, 0x53, 0x81, 0x75, - 0x46, 0x6b, 0x8e, 0xec, 0xe1, 0x6a, 0xbd, 0xa9, 0x74, 0xec, 0x67, 0x47, - 0xfa, 0xcd, 0x7e, 0xc5, 0x78, 0x9d, 0x75, 0x1a, 0xa5, 0xce, 0x59, 0xdd, - 0xef, 0xcc, 0x8b, 0x62, 0x49, 0x18, 0x1c, 0x35, 0x2c, 0x73, 0xb6, 0x59, - 0xa9, 0x77, 0x97, 0x33, 0xd7, 0x88, 0x89, 0x26, 0x39, 0x39, 0x95, 0x81, - 0x4e, 0x95, 0x2c, 0xff, 0x7b, 0x64, 0x67, 0xd6, 0xa2, 0x19, 0xaf, 0x9f, - 0x0f, 0xea, 0x88, 0xe7, 0xd2, 0xa9, 0x0a, 0xfc, 0x5c, 0x14, 0x78, 0xd5, - 0x34, 0x90, 0x8b, 0xd9, 0xfd, 0x04, 0x34, 0xb4, 0xca, 0x9f, 0x95, 0x2d, - 0xd8, 0x5c, 0xd5, 0x84, 0xcc, 0x1e, 0x6b, 0x9a, 0x38, 0x74, 0x40, 0xa4, - 0xba, 0x9c, 0xbb, 0xf5, 0x47, 0xac, 0xa2, 0x3c, 0xaa, 0x72, 0x7d, 0xaa, - 0xd3, 0xb1, 0x67, 0x73, 0xe9, 0xe7, 0xed, 0xfe, 0xbe, 0xcc, 0xe9, 0x9c, - 0x3e, 0xe8, 0x05, 0x5b, 0x50, 0xf2, 0x6b, 0xe2, 0x2c, 0x48, 0xe6, 0xc8, - 0x14, 0x02, 0x66, 0x99, 0x8d, 0xaf, 0x78, 0x77, 0xae, 0x03, 0xd5, 0x12, - 0xfe, 0x38, 0x99, 0x33, 0xe2, 0xb7, 0xfd, 0x09, 0x79, 0x46, 0x43, 0x80, - 0x38, 0x5d, 0xb1, 0x0c, 0x6c, 0x54, 0x0f, 0xa9, 0x0c, 0x83, 0x35, 0x40, - 0xd5, 0x89, 0xba, 0x05, 0x20, 0x1a, 0xb3, 0x86, 0x47, 0xc7, 0xc9, 0x6b, - 0x8d, 0x81, 0xd7, 0x79, 0xc3, 0x7f, 0xad, 0x0f, 0xaa, 0xcf, 0x8b, 0xa9, - 0xb3, 0xee, 0xe1, 0x24, 0xbd, 0x29, 0x77, 0xce, 0x95, 0x02, 0x0a, 0xd0, - 0x69, 0xde, 0x46, 0x4b, 0x32, 0x89, 0xca, 0x75, 0xbe, 0x9e, 0x97, 0x02, - 0xb1, 0x3e, 0xfb, 0x78, 0x10, 0x87, 0xda, 0x54, 0x64, 0x80, 0x3c, 0xa5, - 0x08, 0x59, 0x2c, 0xac, 0x5f, 0xb6, 0xc6, 0x76, 0xeb, 0x11, 0xc6, 0xb0, - 0x18, 0xaa, 0x6e, 0xf9, 0x05, 0xd2, 0x55, 0x42, 0x40, 0xba, 0xdf, 0x4a, - 0x88, 0xf9, 0x5b, 0xcb, 0xc1, 0xa0, 0xf5, 0xd0, 0x6f, 0x89, 0x27, 0x1d, - 0x48, 0x19, 0x88, 0x2d, 0x51, 0x5a, 0x8a, 0x74, 0x0c, 0x8d, 0xf8, 0xe2, - 0x87, 0xa7, 0x09, 0xb1, 0x8d, 0x27, 0xe6, 0x89, 0xb5, 0xb5, 0xaa, 0x43, - 0x7f, 0x95, 0xd3, 0x8e, 0xca, 0x87, 0x72, 0xa0, 0xaa, 0xb4, 0xe2, 0x7d, - 0x8d, 0xc5, 0xc5, 0x4c, 0x30, 0x3f, 0xaf, 0xbc, 0x5e, 0xc2, 0x66, 0x41, - 0x3f, 0x7c, 0xc2, 0xd1, 0x80, 0xd8, 0x59, 0x4b, 0xa7, 0x35, 0x44, 0x14, - 0x22, 0xf6, 0xce, 0x7f, 0xaf, 0xbc, 0xea, 0xdf, 0xe5, 0x61, 0x19, 0xe1, - 0xed, 0xde, 0xcf, 0xb6, 0x4a, 0x43, 0x8b, 0x16, 0xc4, 0x2d, 0x74, 0xa5, - 0xb1, 0xf9, 0xf3, 0x07, 0xb5, 0x59, 0xe5, 0xf6, 0x22, 0x0d, 0x61, 0x61, - 0xbd, 0x23, 0x03, 0x18, 0x4b, 0x1e, 0x3c, 0xea, 0xea, 0xb6, 0xb9, 0xac, - 0x3b, 0x74, 0xc4, 0x4a, 0x04, 0x18, 0x81, 0xc0, 0x12, 0x67, 0xea, 0xba, - 0x3c, 0xa7, 0xa5, 0xcb, 0x22, 0x7c, 0x24, 0xa4, 0xa6, 0x8e, 0x52, 0x98, - 0x2f, 0xe7, 0x27, 0xa7, 0xfb, 0xb9, 0x8c, 0xe4, 0xec, 0xfd, 0x84, 0x31, - 0x6b, 0x0d, 0xd6, 0x53, 0x42, 0x0c, 0x4b, 0x06, 0xa4, 0xa0, 0x94, 0x9c, - 0xd8, 0xf2, 0x49, 0x1d, 0xd4, 0x40, 0xb1, 0x99, 0xd5, 0xb9, 0xee, 0x22, - 0xee, 0x1a, 0x3c, 0x4e, 0xc4, 0x05, 0xfe, 0x1a, 0x97, 0xb8, 0x61, 0xcd, - 0x61, 0x34, 0x97, 0x0f, 0x66, 0x92, 0xe5, 0xca, 0x12, 0xd4, 0xc7, 0x1b, - 0xda, 0x97, 0x22, 0x49, 0x4e, 0xe5, 0xda, 0x79, 0x9d, 0x76, 0x6d, 0x94, - 0x07, 0xf7, 0x40, 0x47, 0x67, 0xd0, 0xac, 0x58, 0xa2, 0x5e, 0xb3, 0x3d, - 0xde, 0x37, 0x6e, 0x03, 0x80, 0x66, 0xc6, 0xfb, 0x8d, 0xbc, 0x39, 0x6e, - 0xbc, 0x5d, 0x2f, 0x10, 0x5b, 0x07, 0x06, 0x44, 0xef, 0x2c, 0x27, 0x21, - 0x4f, 0x8d, 0x28, 0xd6, 0xdb, 0xf0, 0x83, 0x97, 0x9b, 0x85, 0x4a, 0x87, - 0x0b, 0x55, 0x4c, 0xe8, 0x78, 0xde, 0xcb, 0xa0, 0xee, 0xf7, 0xdc, 0x14, - 0x82, 0xed, 0x86, 0x5f, 0xd2, 0x55, 0xcd, 0x0e, 0x32, 0x61, 0xd1, 0xcc, - 0x75, 0xe3, 0x44, 0x4d, 0x7a, 0x80, 0x63, 0x50, 0x96, 0x45, 0x4c, 0x8c, - 0x7c, 0x51, 0x8d, 0x10, 0xe9, 0x0e, 0xa0, 0x85, 0x91, 0x4d, 0xef, 0xf7, - 0x1b, 0xb1, 0xc2, 0x9f, 0x2f, 0xd7, 0x00, 0x85, 0x8e, 0x1b, 0x27, 0x9e, - 0xc3, 0xac, 0xfb, 0xa5, 0xfe, 0x51, 0x94, 0x53, 0x8f, 0xed, 0x9e, 0xa9, - 0x8c, 0xec, 0xd3, 0xb6, 0x78, 0x73, 0x6a, 0x83, 0xe8, 0x3c, 0x6d, 0xf8, - 0x62, 0xbd, 0x81, 0x18, 0xe0, 0x1b, 0x8c, 0x57, 0x43, 0xb7, 0xbb, 0x42, - 0x14, 0x65, 0x72, 0xe3, 0xb2, 0xc3, 0x45, 0xd6, 0x74, 0xe3, 0x68, 0x6f, - 0x1b, 0xe9, 0x6b, 0x62, 0x99, 0xd9, 0xb4, 0x81, 0x12, 0x5b, 0xa8, 0xdb, - 0xb9, 0x51, 0xba, 0x3d, 0xb0, 0xbc, 0x85, 0xe1, 0xdf, 0xf6, 0x1c, 0xfa, - 0xfb, 0xe3, 0xdb, 0xf3, 0xce, 0xa0, 0x3d, 0x13, 0x3f, 0xf2, 0x09, 0xe3, - 0xed, 0x39, 0xa1, 0x01, 0x26, 0x61, 0x07, 0xb9, 0x3d, 0x67, 0x19, 0x5a, - 0xb5, 0xcc, 0xb9, 0x3d, 0x79, 0xdc, 0x75, 0x7b, 0x36, 0x36, 0xdc, 0x1b, - 0x45, 0x2f, 0x19, 0x62, 0x8c, 0xb7, 0x14, 0x8e, 0x97, 0x56, 0x6c, 0x41, - 0x91, 0x06, 0xdc, 0xf6, 0xd4, 0x0d, 0x1e, 0x9b, 0x76, 0x6a, 0x36, 0xc4, - 0x1b, 0x2b, 0xbc, 0x0f, 0x16, 0x0f, 0x41, 0xc6, 0x67, 0xe5, 0xc8, 0xdd, - 0xc8, 0x42, 0xb5, 0x4a, 0x7d, 0xf4, 0x07, 0x60, 0x83, 0x63, 0x72, 0x05, - 0x76, 0x7d, 0x79, 0x8e, 0x85, 0xcb, 0xb0, 0xe7, 0xf9, 0xca, 0xb5, 0x4c, - 0x0d, 0x29, 0xf0, 0xc4, 0xe4, 0xd4, 0x82, 0x26, 0xf9, 0xfe, 0xe4, 0xed, - 0x74, 0x1d, 0xba, 0xb9, 0xc2, 0x8b, 0xe7, 0x0c, 0x1c, 0xbf, 0x0a, 0x33, - 0x81, 0xa7, 0xbe, 0x33, 0x85, 0x1e, 0x31, 0x0f, 0x56, 0x48, 0x9d, 0xb6, - 0x4a, 0x93, 0x2e, 0x79, 0x42, 0xd0, 0x42, 0x27, 0x6c, 0xe6, 0xda, 0xed, - 0xd5, 0xe4, 0x14, 0xcd, 0xf3, 0x76, 0xa9, 0x12, 0xdb, 0xf0, 0xc0, 0x65, - 0xfc, 0x46, 0x71, 0x04, 0xad, 0x97, 0xc3, 0x4d, 0xf7, 0xeb, 0x3b, 0xa2, - 0xe5, 0xad, 0x5f, 0xac, 0x6f, 0x70, 0xa6, 0xba, 0x6d, 0xee, 0x1c, 0x40, - 0x78, 0x1b, 0x5c, 0x91, 0x25, 0x9e, 0x74, 0x11, 0x75, 0x67, 0x0e, 0xd1, - 0xe4, 0x1e, 0xa7, 0xf9, 0x36, 0x05, 0x1d, 0x3a, 0x40, 0x97, 0x2c, 0xe8, - 0xa6, 0x71, 0xd9, 0x58, 0x07, 0x2a, 0x29, 0x9b, 0x87, 0xe6, 0x1c, 0x2e, - 0x13, 0xf7, 0xa1, 0x32, 0x39, 0x05, 0xc3, 0x0f, 0x62, 0x12, 0x84, 0xc9, - 0xfa, 0xc7, 0x64, 0x0d, 0x93, 0x71, 0x6f, 0x1d, 0x61, 0xd7, 0x0b, 0x91, - 0x7c, 0x63, 0xf4, 0xed, 0xdd, 0x2f, 0x40, 0xdc, 0x36, 0x75, 0xb7, 0xa2, - 0xbd, 0xcc, 0x73, 0x51, 0xb4, 0x1b, 0xc9, 0xa3, 0xe4, 0x50, 0x88, 0xfa, - 0x54, 0xc8, 0xb8, 0xc7, 0x79, 0x23, 0x98, 0xb8, 0xd6, 0x41, 0x58, 0x7d, - 0xf0, 0xee, 0x63, 0x81, 0xea, 0x20, 0xc2, 0x98, 0x1f, 0x8b, 0xc2, 0x08, - 0xf1, 0xbe, 0xab, 0x4b, 0xf3, 0xd5, 0xf3, 0xf9, 0x7a, 0x66, 0xb0, 0xf3, - 0x67, 0xec, 0xa5, 0xe1, 0x0e, 0x6d, 0xfe, 0xa2, 0xa4, 0xc3, 0x76, 0xa2, - 0x48, 0x02, 0x5f, 0x84, 0x22, 0x70, 0x4b, 0x5f, 0x5a, 0xa0, 0x6f, 0xe5, - 0xfe, 0x8f, 0x9f, 0xe1, 0x3b, 0x83, 0x43, 0xee, 0x2c, 0x5d, 0xe7, 0x01, - 0xbf, 0x13, 0xab, 0xfd, 0x70, 0xf6, 0x0c, 0x5a, 0x08, 0xad, 0x20, 0x0b, - 0xdc, 0xd7, 0x12, 0x7b, 0xd5, 0x9b, 0xa2, 0xb3, 0x0f, 0x31, 0xe4, 0x13, - 0xa6, 0xa1, 0x7d, 0x0e, 0x6a, 0x8d, 0x54, 0x73, 0x14, 0x7e, 0xee, 0x35, - 0x1c, 0xb5, 0x81, 0x6f, 0xcf, 0x30, 0x0d, 0x95, 0x41, 0xfd, 0x71, 0x1a, - 0x40, 0xc6, 0xaf, 0x69, 0xd3, 0x54, 0xcf, 0x80, 0x29, 0xa0, 0x80, 0xac, - 0xd4, 0x0a, 0x14, 0xde, 0x24, 0xd2, 0x01, 0xbc, 0x4d, 0x5c, 0xf6, 0x76, - 0x93, 0xf0, 0x15, 0x60, 0x76, 0xf0, 0x1b, 0xc6, 0xb8, 0x3c, 0xe8, 0x20, - 0xb1, 0x54, 0xb7, 0xa7, 0x2e, 0x84, 0x21, 0xe0, 0x4e, 0xa8, 0xa3, 0x53, - 0x33, 0x9e, 0x28, 0xdb, 0x30, 0x73, 0xfa, 0x27, 0x2e, 0xd2, 0x70, 0xd7, - 0x85, 0xbf, 0x0a, 0x15, 0x99, 0x38, 0x2a, 0x14, 0xac, 0x1f, 0x1d, 0xbc, - 0xb2, 0xf1, 0x35, 0x87, 0x73, 0xb1, 0x65, 0xdf, 0x99, 0xee, 0xc0, 0xc5, - 0xfa, 0x74, 0x23, 0xed, 0xaf, 0x8c, 0x3a, 0xec, 0x1b, 0x5d, 0xce, 0x7b, - 0xde, 0x34, 0x9a, 0xc0, 0xa2, 0xa8, 0xe2, 0x59, 0xf5, 0xa2, 0x91, 0x83, - 0x98, 0xf0, 0x38, 0xab, 0xb4, 0xab, 0x78, 0x88, 0xc1, 0x0d, 0xc7, 0xe2, - 0x31, 0xe4, 0x5b, 0x5c, 0xae, 0xda, 0x61, 0x2f, 0x2c, 0x90, 0xb5, 0x8c, - 0xac, 0x13, 0x96, 0x97, 0xd9, 0x17, 0x66, 0xb0, 0xa3, 0xd8, 0xdf, 0x51, - 0x21, 0x53, 0xac, 0x58, 0x3b, 0xb6, 0x2e, 0x71, 0x1d, 0xdc, 0x19, 0x5f, - 0xe6, 0x02, 0x1a, 0xf9, 0xe6, 0x06, 0x51, 0x7f, 0xd5, 0x0d, 0x5c, 0x8c, - 0xc6, 0x1d, 0xab, 0x98, 0xe0, 0xde, 0x89, 0x8b, 0xf3, 0xbe, 0xc6, 0xd2, - 0xa1, 0x6b, 0x2b, 0xcb, 0x6b, 0x99, 0x9c, 0x0c, 0x37, 0xf7, 0x01, 0x9b, - 0xc9, 0xb5, 0xc3, 0xec, 0x31, 0xef, 0x2b, 0x1b, 0x8e, 0xdd, 0x95, 0x78, - 0x12, 0x30, 0x70, 0x68, 0x47, 0x56, 0xd5, 0x08, 0x9d, 0x96, 0xdf, 0x03, - 0xf5, 0x08, 0x2c, 0xc3, 0x3b, 0x5f, 0x23, 0xe1, 0x7c, 0x44, 0x84, 0x6f, - 0x92, 0x77, 0xe8, 0x2e, 0xfe, 0x79, 0x8b, 0x4f, 0x1a, 0x47, 0x9c, 0xe1, - 0x39, 0x59, 0xf7, 0xe0, 0x2c, 0xa5, 0xbb, 0x26, 0x8c, 0x06, 0x62, 0xe0, - 0xba, 0xe9, 0x8a, 0xa7, 0xed, 0x98, 0x23, 0xbc, 0x87, 0xd5, 0x4e, 0x9e, - 0x84, 0xd8, 0x8e, 0xe5, 0xbc, 0x79, 0x09, 0xf2, 0x45, 0x7a, 0x91, 0xc3, - 0x90, 0x6e, 0x9d, 0x68, 0x36, 0x64, 0x9b, 0x40, 0xee, 0x83, 0xce, 0xe6, - 0xb6, 0x41, 0x2f, 0x9c, 0xb5, 0x61, 0x16, 0xa9, 0x54, 0xb4, 0x8f, 0xd2, - 0x06, 0xbd, 0x4c, 0x4e, 0xda, 0x40, 0x5d, 0xfb, 0x57, 0x76, 0xfd, 0x78, - 0x80, 0x4d, 0x3a, 0xf0, 0xba, 0x1d, 0x6b, 0x2f, 0xb0, 0x9f, 0x06, 0xc3, - 0xeb, 0x85, 0x48, 0x05, 0x50, 0xd7, 0x79, 0xe2, 0x8a, 0x1a, 0x3a, 0xf1, - 0xa4, 0x47, 0x38, 0x64, 0x36, 0xff, 0xd3, 0x0f, 0x9b, 0x89, 0xc6, 0xac, - 0x98, 0xa7, 0x31, 0x31, 0xb8, 0x41, 0xb5, 0x1d, 0xd2, 0x2e, 0x83, 0xf1, - 0xb0, 0x02, 0x4f, 0x5a, 0xce, 0x83, 0x83, 0xcb, 0x64, 0x05, 0xe2, 0xad, - 0x81, 0x26, 0x8e, 0xd2, 0x48, 0xbd, 0xe9, 0x71, 0xcc, 0xaf, 0x56, 0x28, - 0x47, 0xd0, 0x28, 0xb1, 0x8e, 0xdc, 0x32, 0xef, 0xca, 0x14, 0x80, 0x0a, - 0xbb, 0x4a, 0xa2, 0x39, 0x8e, 0xc7, 0xb4, 0x5e, 0xd1, 0x5b, 0xaf, 0xe5, - 0x86, 0x22, 0xeb, 0x5a, 0xc1, 0x4a, 0x46, 0xc3, 0xc1, 0x53, 0x1c, 0x99, - 0x57, 0x36, 0x36, 0x7f, 0x64, 0xe8, 0x7a, 0x5d, 0x0e, 0xb1, 0x9b, 0x62, - 0x32, 0x5c, 0xee, 0xc9, 0xe9, 0xb7, 0xe4, 0x68, 0xfe, 0xd4, 0xba, 0x74, - 0x65, 0xeb, 0x72, 0x94, 0xad, 0xc4, 0x75, 0xfb, 0x4d, 0xbb, 0x9b, 0x5c, - 0x4a, 0x8d, 0x4f, 0x50, 0xb5, 0xd1, 0xd2, 0x3b, 0x4e, 0x6c, 0x45, 0x30, - 0x13, 0x70, 0xdb, 0x9b, 0x03, 0xa6, 0x6e, 0xc5, 0xcb, 0xd7, 0xfb, 0x94, - 0x78, 0x7b, 0x34, 0xb8, 0xab, 0x9d, 0xe2, 0x4e, 0x56, 0x1d, 0x3c, 0xa4, - 0xb8, 0x07, 0xda, 0xf0, 0x2e, 0xf7, 0xd1, 0x10, 0x82, 0x28, 0x60, 0x8d, - 0x37, 0xed, 0x91, 0x0c, 0x4e, 0x19, 0x34, 0x00, 0x0f, 0xac, 0xc1, 0x97, - 0xeb, 0x5d, 0xde, 0x17, 0x6b, 0x7f, 0x07, 0xf5, 0x64, 0xc7, 0x6e, 0xac, - 0x83, 0xee, 0x46, 0xf6, 0x37, 0x78, 0x0d, 0xae, 0xfb, 0xa4, 0xe3, 0x93, - 0x4d, 0xc5, 0xd8, 0xa6, 0xc1, 0x6b, 0x5c, 0xaf, 0x4e, 0xa6, 0x5d, 0x7c, - 0x01, 0x2b, 0xd7, 0xfa, 0x66, 0xbe, 0xc3, 0xe6, 0x28, 0xbe, 0x7a, 0x46, - 0xb4, 0xeb, 0xe8, 0x08, 0x5c, 0xac, 0xe8, 0x3a, 0x76, 0x5f, 0xbc, 0xd7, - 0x17, 0xea, 0x06, 0xb6, 0x76, 0x31, 0x90, 0x02, 0x48, 0x07, 0xe3, 0xd2, - 0x16, 0xe2, 0x9e, 0xad, 0xa9, 0x15, 0x4e, 0x27, 0x64, 0x70, 0x73, 0xec, - 0x29, 0xb5, 0xd8, 0x77, 0x14, 0xc8, 0xf1, 0x28, 0xc9, 0x1f, 0xd6, 0xf3, - 0x43, 0x3a, 0x5a, 0x58, 0xea, 0x9c, 0x4a, 0x53, 0xc3, 0x9b, 0xd1, 0x47, - 0x07, 0x1a, 0x9c, 0x90, 0x09, 0x6f, 0x70, 0x09, 0xcc, 0x35, 0x1f, 0xc8, - 0x9f, 0x9f, 0xe4, 0x4a, 0x1d, 0xee, 0x11, 0x47, 0xc2, 0xf7, 0x1f, 0xe3, - 0x8a, 0x5f, 0xcd, 0x37, 0x27, 0x7b, 0xd8, 0x02, 0x0c, 0x6b, 0xc4, 0x17, - 0x7b, 0xe0, 0xc3, 0x62, 0xbb, 0x68, 0x87, 0x05, 0x0b, 0xf4, 0x7e, 0xe3, - 0x4e, 0xd6, 0x8e, 0x5b, 0x26, 0x82, 0xb2, 0x2c, 0x0a, 0x71, 0xf2, 0xbc, - 0xdf, 0xb0, 0x60, 0x8b, 0xd2, 0xbd, 0xe3, 0xa1, 0x1a, 0x23, 0x1e, 0x52, - 0x51, 0x5e, 0x51, 0xbb, 0x8f, 0xf8, 0x0d, 0x97, 0x62, 0x4e, 0x8e, 0x5e, - 0x8c, 0x7d, 0x5b, 0x1e, 0x30, 0x92, 0x61, 0x1f, 0xfd, 0x66, 0xe1, 0x5d, - 0x2f, 0x0c, 0x1b, 0x29, 0x52, 0x75, 0xbf, 0x10, 0x90, 0x7a, 0x19, 0x20, - 0x6f, 0x1d, 0x1c, 0x56, 0xd7, 0x5d, 0x44, 0xfc, 0x71, 0x2d, 0x40, 0x9b, - 0xc4, 0x33, 0xf3, 0xf7, 0x31, 0xfb, 0x65, 0xf9, 0x3b, 0xdf, 0x90, 0xdf, - 0x47, 0x8f, 0x35, 0x40, 0xa9, 0x41, 0x59, 0x59, 0x05, 0x95, 0x6f, 0xc0, - 0xda, 0x5e, 0xc4, 0x21, 0xb8, 0xfd, 0xc1, 0xfd, 0x9f, 0x9d, 0xdd, 0xe1, - 0xae, 0x1a, 0xb1, 0x3f, 0x2e, 0xeb, 0xe2, 0x62, 0xf4, 0x75, 0x77, 0xf5, - 0x20, 0xd9, 0x7c, 0x17, 0x62, 0x7f, 0xe1, 0xc7, 0xd5, 0xd5, 0x7d, 0x8a, - 0x47, 0x63, 0x77, 0xae, 0x1e, 0xec, 0xba, 0x69, 0x78, 0xb7, 0x41, 0xef, - 0x88, 0x5a, 0x46, 0xe1, 0x2b, 0x5e, 0x12, 0x8a, 0x83, 0x4d, 0xc2, 0xf8, - 0x8e, 0x29, 0x96, 0x29, 0x5a, 0x59, 0x30, 0x00, 0xa3, 0x38, 0x93, 0x18, - 0x09, 0x59, 0x75, 0x89, 0xa2, 0xe8, 0x42, 0xc0, 0xc9, 0x3f, 0x69, 0x96, - 0xc6, 0x4e, 0x83, 0x5a, 0xd6, 0xd9, 0xab, 0x3f, 0xf2, 0xec, 0xa0, 0xca, - 0xf6, 0xe5, 0x2a, 0x49, 0x63, 0x1e, 0xd2, 0xf3, 0x41, 0x96, 0xef, 0x9b, - 0xda, 0x30, 0xf4, 0xfe, 0xa4, 0x4b, 0x45, 0x81, 0x62, 0xf2, 0xe1, 0x0d, - 0xd9, 0x9e, 0x20, 0xce, 0x30, 0x89, 0x37, 0x4a, 0x94, 0xa3, 0xdf, 0xf1, - 0x75, 0x94, 0xdd, 0x1f, 0x07, 0x20, 0xbd, 0x14, 0x15, 0x2b, 0x66, 0x5a, - 0xd0, 0xe3, 0x0b, 0xfb, 0xe9, 0xd4, 0xd5, 0x14, 0x17, 0x42, 0x81, 0xfe, - 0xde, 0xa4, 0xa0, 0x35, 0x93, 0x94, 0xbf, 0x5a, 0x5c, 0xc7, 0x87, 0x58, - 0xbb, 0xb5, 0x83, 0x1c, 0xd5, 0xec, 0xbe, 0x75, 0x20, 0xaa, 0xa0, 0xc7, - 0x1e, 0x02, 0xc0, 0xab, 0x6b, 0xbd, 0xa8, 0x93, 0xae, 0x81, 0x69, 0x7e, - 0x01, 0x17, 0x40, 0x94, 0x40, 0x5d, 0x1d, 0xce, 0xdb, 0xe8, 0x77, 0xf4, - 0xa1, 0xa7, 0x64, 0xf5, 0xc9, 0x96, 0x7a, 0x72, 0x0a, 0x76, 0x7b, 0xba, - 0xde, 0xe5, 0x79, 0x0f, 0xe7, 0x52, 0xff, 0x70, 0x91, 0x1c, 0x0e, 0x8d, - 0xb3, 0x12, 0xbb, 0x4e, 0x38, 0xd6, 0xfb, 0x32, 0xe7, 0xba, 0x2b, 0x61, - 0xd4, 0x0b, 0x71, 0x73, 0xe7, 0x3c, 0x9a, 0x85, 0x0a, 0xa4, 0x8d, 0x75, - 0x90, 0xdc, 0x98, 0xdb, 0xf0, 0x5c, 0x04, 0xf2, 0x79, 0xa5, 0xc0, 0x85, - 0x75, 0x53, 0x2c, 0x36, 0xad, 0x68, 0xbb, 0x9b, 0xa0, 0xc5, 0x5d, 0x84, - 0xe2, 0x9e, 0xbe, 0xba, 0x0a, 0x8e, 0xf7, 0x72, 0xc9, 0xa2, 0xb6, 0x9c, - 0xab, 0x63, 0xbd, 0x17, 0x17, 0x30, 0x4c, 0xe8, 0x74, 0x77, 0x87, 0x1e, - 0x64, 0xe7, 0x2e, 0xd9, 0xe1, 0x3a, 0x6e, 0x6d, 0xe2, 0x16, 0x26, 0x90, - 0xe7, 0xb4, 0x81, 0x69, 0xea, 0x02, 0x2d, 0x17, 0xbe, 0xb8, 0xf7, 0xa5, - 0xea, 0x3c, 0x49, 0x7c, 0xd6, 0xfe, 0xcf, 0x1e, 0x9b, 0x47, 0x04, 0x25, - 0xbc, 0xda, 0xdd, 0xf1, 0x43, 0x35, 0xa5, 0x95, 0x31, 0x8f, 0x5c, 0xc0, - 0x04, 0xe4, 0x95, 0x2f, 0x06, 0xfe, 0x16, 0x97, 0xd2, 0xcb, 0x4b, 0xc1, - 0xdd, 0xbc, 0xf9, 0x2f, 0xe7, 0x58, 0x42, 0x9e, 0xfb, 0xe5, 0x5c, 0x22, - 0x70, 0xae, 0xca, 0x9a, 0x87, 0x5e, 0xe5, 0xdb, 0x5b, 0x0c, 0xd5, 0xf7, - 0x76, 0xcd, 0x06, 0xec, 0xaf, 0x11, 0x3c, 0xb9, 0x80, 0x06, 0x70, 0xac, - 0x3e, 0xc7, 0x33, 0xc6, 0xe6, 0xde, 0xb9, 0x47, 0x2f, 0x2f, 0xfd, 0xf5, - 0x63, 0x72, 0xe5, 0x5c, 0x98, 0x25, 0x0f, 0xf9, 0xf7, 0xfb, 0x45, 0xe3, - 0x72, 0x25, 0x0a, 0x58, 0x2f, 0x30, 0x7a, 0x70, 0x4e, 0xce, 0x5b, 0xc5, - 0x7b, 0x5e, 0x43, 0x83, 0xfc, 0x5f, 0x3a, 0x92, 0x99, 0xd9, 0x53, 0x72, - 0xe6, 0xea, 0x8f, 0x40, 0xaf, 0x05, 0x62, 0xac, 0x6e, 0xe2, 0xac, 0x2c, - 0x5b, 0x03, 0x69, 0xb9, 0x9f, 0x31, 0x65, 0x0c, 0xd8, 0x5d, 0xba, 0x24, - 0x06, 0x38, 0x37, 0x7d, 0x9e, 0x74, 0x04, 0x67, 0x05, 0xd6, 0x33, 0x8a, - 0xb0, 0xdb, 0xee, 0x37, 0x4e, 0xec, 0xad, 0xdf, 0x1a, 0x21, 0xa8, 0x20, - 0x51, 0x7a, 0xde, 0x28, 0x0f, 0x9a, 0xf5, 0xa0, 0x44, 0xf3, 0x6c, 0x28, - 0x4f, 0xa5, 0x39, 0xda, 0x3c, 0x4e, 0x7e, 0x51, 0x6c, 0x20, 0x39, 0x74, - 0x7d, 0x7e, 0x05, 0xec, 0x16, 0x5e, 0xf1, 0xc5, 0x6f, 0xd0, 0x5d, 0x3c, - 0xce, 0x18, 0x5c, 0x62, 0x74, 0xb2, 0x32, 0x56, 0x71, 0xe5, 0xcb, 0x99, - 0x71, 0xb5, 0xdf, 0x95, 0x44, 0x66, 0xf7, 0x60, 0x6d, 0x51, 0x93, 0xb6, - 0x73, 0x00, 0x46, 0xae, 0xac, 0x5e, 0xdb, 0xd0, 0x3e, 0x8e, 0x0a, 0xef, - 0xb6, 0x3f, 0x1e, 0x78, 0x93, 0xfb, 0x6a, 0xd0, 0xb5, 0xdc, 0xe1, 0x93, - 0x8d, 0x50, 0x37, 0x7f, 0x3a, 0x08, 0x50, 0x0f, 0x50, 0x02, 0x45, 0xaa, - 0xb5, 0x7e, 0xa3, 0x8f, 0x98, 0x2b, 0x8e, 0xbb, 0x4d, 0x9c, 0x93, 0x07, - 0x38, 0x20, 0xb4, 0xc5, 0x21, 0xa3, 0xe0, 0x7d, 0x61, 0x95, 0x6c, 0xf1, - 0xe4, 0x88, 0xb1, 0x30, 0x21, 0x2f, 0x18, 0xde, 0x63, 0x45, 0x5e, 0x40, - 0xdf, 0xae, 0xb9, 0xb5, 0xcf, 0x22, 0xde, 0x73, 0xa0, 0x7b, 0xf9, 0xc5, - 0x45, 0x49, 0x3e, 0x52, 0xf8, 0xf5, 0x02, 0xfc, 0x9b, 0x75, 0xe1, 0xa0, - 0xae, 0xde, 0xd8, 0x7f, 0x75, 0x21, 0xde, 0x20, 0xe8, 0x4d, 0xd3, 0xdb, - 0xfe, 0xe3, 0x89, 0x8a, 0xf7, 0x70, 0x59, 0xc0, 0x7a, 0xff, 0x59, 0x8e, - 0x7c, 0xe3, 0x89, 0x43, 0x9e, 0x6e, 0x78, 0xe3, 0x15, 0xe2, 0xa0, 0x67, - 0x63, 0xf0, 0xd6, 0xac, 0xef, 0x3d, 0x5a, 0x2d, 0xb5, 0x26, 0x9c, 0x2d, - 0xa0, 0xd1, 0x8d, 0x6a, 0xe3, 0xcb, 0xb4, 0x00, 0xbb, 0x44, 0xd2, 0x0c, - 0xee, 0x24, 0xda, 0xf9, 0x7b, 0xe3, 0x75, 0x2a, 0x24, 0xcc, 0x9b, 0x2f, - 0x3a, 0xcb, 0xc1, 0x58, 0xd2, 0x8d, 0x2b, 0xdc, 0xde, 0x56, 0x7d, 0xde, - 0x92, 0xd0, 0xef, 0x8f, 0x2d, 0xc5, 0x4b, 0x4b, 0xa0, 0x15, 0xc2, 0xae, - 0x6f, 0xef, 0xd6, 0xd1, 0x3b, 0xbf, 0x4f, 0x29, 0xa8, 0xf7, 0x55, 0x04, - 0xea, 0xad, 0x7b, 0xf0, 0xdf, 0xbe, 0x43, 0xef, 0x47, 0x33, 0xde, 0xf9, - 0xc7, 0x46, 0x1d, 0x04, 0x8f, 0xee, 0xfa, 0x23, 0x9c, 0x17, 0xeb, 0x8b, - 0x18, 0xef, 0x8c, 0xf9, 0x0d, 0x47, 0x70, 0x36, 0xa5, 0x2d, 0x50, 0x79, - 0x6a, 0x5b, 0xa5, 0xe0, 0x6d, 0xad, 0x8a, 0x9e, 0x52, 0x7e, 0xc3, 0x12, - 0x3e, 0x17, 0xbd, 0x7e, 0xf0, 0xee, 0x8f, 0x30, 0xbd, 0x71, 0x1f, 0x3d, - 0x88, 0x76, 0xac, 0xde, 0x25, 0xfb, 0xec, 0x01, 0x88, 0x91, 0xe5, 0xfd, - 0x48, 0x50, 0xc7, 0x7d, 0xe5, 0x53, 0x5b, 0xef, 0xb2, 0xc9, 0xca, 0xae, - 0x49, 0x10, 0x81, 0xa7, 0x5a, 0xf9, 0x60, 0xba, 0x64, 0x24, 0x56, 0xd2, - 0x00, 0x69, 0xe6, 0xc3, 0xe4, 0xda, 0x27, 0x4f, 0xca, 0x7d, 0xd1, 0xde, - 0xd5, 0x3f, 0xc3, 0x67, 0x90, 0xf8, 0xda, 0x87, 0xaf, 0x6e, 0x12, 0xd4, - 0xd1, 0xa9, 0xe7, 0xc0, 0x07, 0xc6, 0xc2, 0xc5, 0xcf, 0xe5, 0xe1, 0xe8, - 0x4f, 0x42, 0x65, 0x74, 0xdc, 0x37, 0xeb, 0x3e, 0x2f, 0x38, 0xe1, 0x78, - 0xc2, 0xef, 0xb4, 0x30, 0x7d, 0x78, 0xb7, 0xd2, 0x47, 0x4f, 0x0a, 0x7d, - 0x16, 0xfc, 0xe8, 0x99, 0x5e, 0x23, 0xb7, 0x8c, 0xb3, 0xf2, 0x8b, 0x9b, - 0x89, 0x38, 0xa5, 0xc4, 0xe5, 0x6c, 0xbf, 0x58, 0x90, 0xff, 0xc5, 0xd4, - 0xf9, 0x37, 0xf6, 0xc9, 0x7e, 0x51, 0x88, 0x4c, 0xd1, 0x1d, 0xc5, 0xbf, - 0xda, 0xdb, 0x27, 0xa9, 0xa0, 0xaa, 0x0c, 0xbf, 0x38, 0xa0, 0xab, 0xc9, - 0xfd, 0xef, 0x79, 0x3e, 0xe3, 0x37, 0x06, 0xd4, 0x06, 0xe6, 0x7f, 0x74, - 0xb9, 0xe6, 0x2f, 0x5a, 0x4f, 0x53, 0x6c, 0xd0, 0x0b, 0xc0, 0x69, 0xf9, - 0xaf, 0x19, 0x6b, 0xf0, 0xa5, 0x90, 0x71, 0x51, 0x9f, 0x5f, 0xdd, 0xbe, - 0xc7, 0x07, 0xe6, 0x4c, 0xd9, 0xb1, 0xcd, 0x64, 0xc8, 0x6c, 0x1d, 0x28, - 0x48, 0x07, 0x23, 0x75, 0x20, 0x23, 0xbf, 0xf6, 0x3f, 0x4c, 0x90, 0xae, - 0xf9, 0xc2, 0xb9, 0x2f, 0xce, 0xc4, 0x42, 0xbe, 0x0c, 0x65, 0xfe, 0x9b, - 0xc6, 0x41, 0x57, 0xc7, 0x7f, 0x53, 0x3c, 0x46, 0xf5, 0xbd, 0x9c, 0x78, - 0x70, 0x6c, 0x81, 0xfc, 0x72, 0xab, 0x37, 0xde, 0x00, 0xfa, 0xca, 0xf6, - 0x84, 0x20, 0x7d, 0xcf, 0x97, 0x14, 0xbe, 0x25, 0xeb, 0x59, 0x87, 0x2f, - 0x47, 0xbc, 0x5f, 0x3e, 0xab, 0xe0, 0xf7, 0x81, 0x7f, 0xb9, 0x8c, 0x03, - 0x95, 0xad, 0x94, 0x81, 0x27, 0x55, 0x1b, 0xfb, 0x68, 0xce, 0xf5, 0xb5, - 0xf2, 0x8b, 0x73, 0x48, 0x5f, 0xd6, 0x8e, 0xef, 0xae, 0x6d, 0x1d, 0xa3, - 0x78, 0x94, 0xe6, 0xae, 0x9b, 0xcf, 0xbe, 0xc7, 0xc3, 0x77, 0xa4, 0x6e, - 0xff, 0xdc, 0x06, 0xfb, 0x1f, 0x36, 0x2a, 0xaf, 0x61, 0x35, 0x4a, 0x1d, - 0x3c, 0xca, 0xb2, 0x83, 0x5a, 0x3b, 0xc1, 0xa2, 0x28, 0x58, 0x41, 0x13, - 0x15, 0xe4, 0xa7, 0x28, 0x2b, 0x87, 0xc1, 0x8c, 0x56, 0x04, 0xb4, 0x42, - 0x26, 0xc8, 0xc0, 0x8b, 0x6a, 0x29, 0x52, 0x17, 0x27, 0xd8, 0x00, 0xbd, - 0xe1, 0x56, 0x70, 0x6c, 0x86, 0x19, 0xa0, 0x37, 0xfb, 0x44, 0x75, 0x7b, - 0xca, 0x0e, 0x4d, 0x1c, 0x14, 0xba, 0x02, 0x88, 0xa3, 0x37, 0xda, 0x4f, - 0xa4, 0x3a, 0xf9, 0x74, 0x41, 0x1c, 0x06, 0x3d, 0xbc, 0x7d, 0x08, 0xe2, - 0xb2, 0x27, 0xf2, 0x31, 0xa8, 0xf3, 0xdd, 0x88, 0xdb, 0xe2, 0x55, 0x45, - 0x00, 0xda, 0x89, 0x02, 0x82, 0xbf, 0x96, 0x8f, 0x50, 0xf0, 0xb4, 0x08, - 0x41, 0x82, 0x78, 0x7f, 0x80, 0xb1, 0xcc, 0x1d, 0x7b, 0xf0, 0xc4, 0xb8, - 0x3f, 0xd8, 0xd6, 0x9d, 0x99, 0x32, 0x77, 0xed, 0x69, 0x01, 0x34, 0x9e, - 0x8e, 0x05, 0x7c, 0x51, 0x19, 0x94, 0x50, 0xf7, 0x17, 0x05, 0x61, 0x08, - 0xd2, 0xc2, 0xba, 0xef, 0xd8, 0x35, 0x59, 0x8f, 0x89, 0x0a, 0x84, 0x61, - 0x84, 0x16, 0xb7, 0x5a, 0xf1, 0xd4, 0xae, 0x3e, 0x5b, 0x60, 0x9b, 0xc0, - 0x84, 0xf2, 0x40, 0xc4, 0xcb, 0xd7, 0x80, 0xc6, 0xf2, 0x91, 0xd7, 0x7c, - 0xd8, 0xf8, 0xa6, 0x45, 0x15, 0x90, 0x1f, 0xdc, 0xc0, 0x46, 0xc0, 0x97, - 0x8e, 0x89, 0xf0, 0xb0, 0x16, 0xc0, 0x83, 0x6f, 0x5d, 0x08, 0x5a, 0x47, - 0xed, 0x01, 0x7a, 0x0e, 0x17, 0xe0, 0xcd, 0x47, 0x67, 0xab, 0xc3, 0x5d, - 0x8e, 0xea, 0x11, 0x31, 0x20, 0xb4, 0x03, 0xa0, 0x13, 0xb6, 0x2e, 0x09, - 0xf4, 0x6e, 0x99, 0xeb, 0x16, 0xd1, 0x35, 0x12, 0x67, 0x3d, 0x43, 0xb8, - 0x4e, 0x9e, 0xc1, 0x2f, 0x8a, 0xd2, 0x10, 0xa0, 0x72, 0x01, 0x6c, 0x83, - 0x42, 0x6a, 0x15, 0xb6, 0x45, 0x32, 0x6d, 0x77, 0x9e, 0x3c, 0x09, 0x2e, - 0xc9, 0xca, 0xf6, 0x4c, 0xc9, 0x7d, 0xc6, 0x3e, 0xa7, 0x03, 0x08, 0x36, - 0x11, 0x4d, 0x3c, 0x25, 0x71, 0xe2, 0x08, 0xd8, 0x36, 0xe5, 0x88, 0x94, - 0x4d, 0xec, 0x16, 0x07, 0x13, 0x7a, 0x48, 0x42, 0x1b, 0xab, 0xdc, 0xe2, - 0x7b, 0x1b, 0x0e, 0x07, 0x7c, 0x23, 0x59, 0xd0, 0x53, 0x1b, 0x67, 0xbf, - 0x22, 0x24, 0x06, 0xcf, 0xef, 0x15, 0x62, 0x09, 0x84, 0x9f, 0x8c, 0x6b, - 0x8f, 0x02, 0x87, 0xff, 0xd6, 0xb0, 0x8e, 0x27, 0x42, 0x23, 0x06, 0x66, - 0x97, 0xab, 0xef, 0xc8, 0x32, 0xb4, 0xcc, 0xea, 0x7a, 0x82, 0xeb, 0xd9, - 0xf2, 0x89, 0x04, 0x07, 0x70, 0xf7, 0x3f, 0x43, 0x24, 0x16, 0x44, 0x56, - 0xb6, 0x70, 0xf5, 0xf0, 0xf2, 0x65, 0x13, 0x11, 0x96, 0x5d, 0x39, 0xc7, - 0xe5, 0x42, 0x34, 0x2c, 0xff, 0xa8, 0x75, 0x19, 0xa2, 0x68, 0x63, 0x3e, - 0x7b, 0x42, 0x3d, 0x8f, 0xea, 0x78, 0x09, 0x80, 0x99, 0x4c, 0xc0, 0xe9, - 0x44, 0x6a, 0xb6, 0x2f, 0xec, 0x71, 0x32, 0x87, 0x1a, 0x92, 0xe0, 0xb0, - 0xf2, 0x15, 0x1c, 0x0e, 0x29, 0xa6, 0x3f, 0xdc, 0x69, 0x0f, 0xd3, 0xf9, - 0xab, 0xa3, 0xda, 0x73, 0xe9, 0x9c, 0x56, 0x9e, 0x2f, 0x6c, 0x37, 0xa9, - 0x4a, 0xdf, 0xce, 0xc7, 0x0d, 0xc5, 0xa1, 0xa3, 0xa6, 0x85, 0x9d, 0xd3, - 0x73, 0x02, 0x8f, 0xcd, 0xae, 0x86, 0x62, 0x1c, 0xad, 0xcf, 0x3c, 0xf4, - 0xd1, 0x30, 0x9f, 0xef, 0xde, 0x88, 0x33, 0xb5, 0x1e, 0xae, 0x22, 0xf5, - 0xc6, 0xfc, 0x48, 0x74, 0x1a, 0x8b, 0x6f, 0xfa, 0x80, 0x75, 0x4a, 0x19, - 0x54, 0xfa, 0x8f, 0xb8, 0x4b, 0x50, 0x66, 0x3c, 0xf3, 0xd8, 0xf4, 0x24, - 0x08, 0x82, 0xdc, 0x86, 0x9f, 0x9f, 0xde, 0x04, 0x03, 0x46, 0xa5, 0x00, - 0xae, 0xa2, 0xb1, 0x27, 0x04, 0x06, 0x11, 0x47, 0x01, 0x7a, 0x60, 0x1f, - 0x95, 0xb4, 0x51, 0xf0, 0x1f, 0xcf, 0x74, 0xc1, 0xb5, 0xc7, 0x0f, 0x2b, - 0xe8, 0xe3, 0xa1, 0xb0, 0x90, 0xce, 0xda, 0x68, 0x03, 0x97, 0x46, 0x92, - 0xec, 0xee, 0x01, 0xd1, 0xb5, 0xc7, 0xf1, 0xb1, 0xbc, 0x7d, 0xc9, 0xa1, - 0x27, 0x95, 0x09, 0xf9, 0xff, 0x60, 0x3c, 0x20, 0x5b, 0x76, 0xc3, 0xe5, - 0x07, 0x88, 0x03, 0x64, 0xbc, 0x19, 0x42, 0x9b, 0xc1, 0x51, 0x7b, 0xcd, - 0xac, 0xb3, 0xa4, 0xf4, 0x65, 0x0f, 0x03, 0xbb, 0x0c, 0x78, 0x41, 0x7d, - 0x7c, 0x32, 0xfd, 0xd2, 0x6b, 0x83, 0x04, 0xf5, 0xe5, 0x14, 0xa9, 0xfe, - 0x1c, 0xc6, 0x1d, 0xf6, 0x59, 0x73, 0x9f, 0xbb, 0xd4, 0x77, 0xcd, 0xcf, - 0x6c, 0x88, 0x3f, 0xeb, 0x86, 0xd9, 0x7f, 0x60, 0x33, 0x57, 0xcd, 0x4f, - 0x9e, 0xa8, 0x24, 0xe1, 0x74, 0x90, 0x64, 0x71, 0xf9, 0xe7, 0x27, 0x28, - 0x97, 0x18, 0x88, 0x3f, 0x99, 0xed, 0x90, 0x6f, 0xc7, 0x03, 0xb0, 0xf5, - 0x37, 0xb2, 0x8b, 0xf5, 0x3a, 0xa3, 0x41, 0x89, 0xd1, 0xba, 0x48, 0x3d, - 0xfb, 0xa8, 0x4c, 0x83, 0x4a, 0x51, 0xec, 0xdd, 0xde, 0x86, 0x7f, 0x31, - 0x7b, 0xb9, 0xe1, 0x75, 0x74, 0x1e, 0xa0, 0x02, 0x8a, 0xf6, 0xf1, 0x65, - 0x79, 0xcb, 0x12, 0xa9, 0x46, 0xef, 0xa5, 0xde, 0xf1, 0x95, 0x30, 0x58, - 0x03, 0x50, 0xfa, 0xbf, 0xbc, 0x62, 0xbe, 0x2a, 0xd5, 0xde, 0xa4, 0x21, - 0x76, 0x53, 0xaf, 0xb6, 0x93, 0xfd, 0xe5, 0x97, 0xd0, 0xc2, 0x76, 0x6a, - 0xd2, 0x3e, 0x16, 0x40, 0xa1, 0xba, 0x51, 0x6d, 0x34, 0x63, 0xbd, 0x0a, - 0x49, 0xcd, 0xb8, 0x62, 0x09, 0x10, 0x35, 0xbe, 0x39, 0x40, 0x30, 0xa6, - 0x11, 0x43, 0x06, 0x7e, 0xb2, 0x52, 0x3e, 0x2a, 0x9b, 0xa6, 0x91, 0x5b, - 0xf2, 0x00, 0x98, 0x84, 0xc8, 0x9c, 0x47, 0x7d, 0x1a, 0x0b, 0xee, 0x87, - 0x24, 0x5a, 0x55, 0x4e, 0x05, 0x4e, 0x03, 0x95, 0xb5, 0x9a, 0xa9, 0x60, - 0xd9, 0x42, 0xa3, 0xe9, 0x27, 0x57, 0xf1, 0x31, 0xe4, 0xbc, 0x0d, 0x2a, - 0xdc, 0x38, 0x9d, 0xc1, 0x28, 0x4f, 0xf9, 0xb6, 0xe3, 0x32, 0x27, 0x42, - 0x76, 0x81, 0x93, 0x12, 0x8c, 0xcf, 0xde, 0xca, 0xc6, 0x2b, 0xbe, 0xd0, - 0xd4, 0xa4, 0x30, 0x4e, 0xc3, 0x98, 0x82, 0xca, 0x82, 0x21, 0xb5, 0x16, - 0x40, 0x73, 0x59, 0x1e, 0x5d, 0x5b, 0x8c, 0x52, 0x1c, 0x3c, 0xb3, 0x62, - 0xf2, 0x44, 0xe3, 0x3c, 0xd9, 0x69, 0xd8, 0x50, 0x3a, 0x7a, 0x50, 0x27, - 0x3d, 0x4c, 0x47, 0xd4, 0x9c, 0xa0, 0x24, 0xa7, 0x0b, 0xce, 0xf1, 0x5d, - 0x06, 0xd0, 0xdf, 0xba, 0x65, 0x8d, 0x1f, 0x78, 0x30, 0x67, 0x08, 0x20, - 0x01, 0xdd, 0xce, 0x6c, 0x1d, 0x2a, 0x61, 0x27, 0x8a, 0x03, 0xc7, 0x4d, - 0xe8, 0xf3, 0xff, 0xd5, 0x5a, 0x9f, 0xff, 0x3f, 0x3d, 0x45, 0x4a, 0x8d, - 0x1f, 0xde, 0x68, 0x75, 0xe2, 0x61, 0x2e, 0x8b, 0xc7, 0xa1, 0xc4, 0x97, - 0xb2, 0xf0, 0xb4, 0x01, 0xb1, 0x9b, 0x69, 0x91, 0xa8, 0x25, 0x92, 0x02, - 0x0f, 0xab, 0x7a, 0x8d, 0x21, 0x13, 0x39, 0xb1, 0x0e, 0xac, 0xc2, 0x06, - 0xf4, 0x9e, 0x30, 0x21, 0x56, 0x6c, 0x88, 0x78, 0xed, 0x2a, 0xa5, 0xcd, - 0x56, 0x12, 0x8c, 0xf8, 0x00, 0xa8, 0x89, 0x8b, 0xa5, 0x14, 0xfd, 0xb9, - 0x67, 0xf1, 0x92, 0xce, 0x1e, 0xc4, 0x19, 0x46, 0x47, 0x61, 0x8d, 0xd2, - 0x88, 0x3b, 0x78, 0xd4, 0x85, 0x4d, 0x1c, 0x88, 0x4e, 0x9b, 0x52, 0xa7, - 0x25, 0x0e, 0xc8, 0xa6, 0x9d, 0x9f, 0xf6, 0xc8, 0x47, 0x2e, 0xbf, 0x32, - 0x42, 0x33, 0xdf, 0xcd, 0xbf, 0xf1, 0xb9, 0x3d, 0x4b, 0x7b, 0xd7, 0x2b, - 0xae, 0x55, 0xbe, 0xbd, 0x21, 0x76, 0x0e, 0xd6, 0x7d, 0x9b, 0x0d, 0x80, - 0x29, 0x07, 0x82, 0x7b, 0x51, 0x08, 0xa9, 0xa2, 0xbc, 0x73, 0xe0, 0xa4, - 0xf3, 0xa1, 0x4e, 0xab, 0x80, 0x92, 0x7b, 0x19, 0x6f, 0xe5, 0x97, 0x34, - 0x0d, 0xbb, 0xa8, 0x0a, 0x91, 0x0f, 0xac, 0x40, 0x38, 0x2b, 0xea, 0x10, - 0xb7, 0x8e, 0x89, 0x29, 0x53, 0x72, 0xb4, 0x2d, 0x83, 0x86, 0x17, 0xcb, - 0x28, 0xd5, 0x52, 0xa1, 0xc8, 0x95, 0x48, 0x41, 0xa0, 0x87, 0xa8, 0x7f, - 0x68, 0x2c, 0xe5, 0xcb, 0x38, 0xe9, 0x62, 0x0c, 0x41, 0x7d, 0xeb, 0xfd, - 0xc2, 0x32, 0x62, 0xd5, 0x54, 0x9a, 0x45, 0xd6, 0xcd, 0xd7, 0xf8, 0xe4, - 0xd5, 0x0e, 0xaf, 0x4e, 0x88, 0x7a, 0x13, 0x69, 0x80, 0xd7, 0x6d, 0x84, - 0x8f, 0xd8, 0xfa, 0x52, 0x32, 0xec, 0x75, 0x70, 0x5a, 0xb3, 0xd0, 0x07, - 0x87, 0xb8, 0x84, 0xf2, 0xc8, 0x31, 0xac, 0xdc, 0x4c, 0x36, 0xc6, 0x52, - 0x00, 0x2f, 0x6d, 0x83, 0xdc, 0x7b, 0x58, 0x43, 0xc6, 0x2f, 0x8f, 0x18, - 0x1e, 0x7b, 0x55, 0xe6, 0xe5, 0xfd, 0x20, 0x4d, 0xcd, 0xff, 0x92, 0xa9, - 0x0c, 0x52, 0xe9, 0x4b, 0xf6, 0x01, 0x51, 0x97, 0xa0, 0x20, 0xf4, 0xc8, - 0xfe, 0x5b, 0xa4, 0xaa, 0x98, 0x2d, 0x2f, 0x2a, 0x96, 0xe1, 0x02, 0x32, - 0xf3, 0x52, 0x12, 0x79, 0xf3, 0xbc, 0xd8, 0xb8, 0x94, 0xad, 0x8e, 0x80, - 0x1b, 0xa9, 0xfb, 0xda, 0x3a, 0xe0, 0xd4, 0x62, 0x79, 0x69, 0xd6, 0xb4, - 0x58, 0x17, 0xb4, 0x33, 0x8c, 0x1a, 0x61, 0x81, 0xc8, 0x41, 0x82, 0x16, - 0x9f, 0x3c, 0x1d, 0xf1, 0x16, 0x04, 0x5d, 0x3f, 0xc3, 0xc8, 0xcb, 0xdf, - 0x8c, 0xfe, 0x6f, 0x97, 0x3d, 0x50, 0x7d, 0xf9, 0x5f, 0xf4, 0xae, 0xcb, - 0x96, 0x54, 0x60, 0xd0, 0x5b, 0x80, 0xd2, 0x60, 0x63, 0x55, 0x00, 0xf9, - 0x24, 0x1f, 0x04, 0x63, 0xaf, 0x47, 0x76, 0x7d, 0x54, 0x8e, 0x9b, 0x3a, - 0x04, 0x0e, 0x06, 0xc0, 0x26, 0x97, 0x98, 0x28, 0xa2, 0x8e, 0xae, 0x4d, - 0x0d, 0xd5, 0x4a, 0x19, 0x54, 0xe6, 0xcc, 0xea, 0x62, 0xa8, 0x44, 0xdf, - 0xa8, 0x21, 0xab, 0xc4, 0x64, 0x6e, 0x03, 0x7f, 0x03, 0x7e, 0x04, 0x2e, - 0xc6, 0x03, 0xf8, 0x92, 0x4e, 0x93, 0x8a, 0x17, 0xa8, 0x00, 0xbe, 0x24, - 0x37, 0x2a, 0x82, 0xc3, 0x9d, 0xa1, 0x30, 0x50, 0xf3, 0x15, 0x29, 0x24, - 0x64, 0xb6, 0x18, 0xbf, 0x89, 0xeb, 0xfa, 0xac, 0x98, 0x44, 0xdf, 0xab, - 0x89, 0x58, 0xdb, 0x02, 0x97, 0xa4, 0xde, 0x77, 0x07, 0x93, 0x13, 0xa7, - 0xff, 0x0b, 0xfd, 0xea, 0x44, 0x8d, 0x6f, 0x8d, 0x72, 0x09, 0xc0, 0x43, - 0x67, 0x84, 0xcd, 0x89, 0x9b, 0xc9, 0x11, 0x72, 0x9b, 0x35, 0xc8, 0xbd, - 0x7c, 0x3a, 0x90, 0xd5, 0x9d, 0x01, 0x68, 0x52, 0x07, 0xb4, 0xd7, 0xa1, - 0x9d, 0x38, 0x62, 0x52, 0xbc, 0x3d, 0xad, 0x9c, 0x2c, 0x9b, 0x3a, 0x16, - 0xd1, 0xc9, 0x75, 0xe5, 0xef, 0x47, 0xdd, 0x68, 0xb5, 0xc6, 0x5e, 0x8d, - 0x02, 0x4f, 0xc9, 0x81, 0x8e, 0x54, 0xa8, 0xd5, 0x9b, 0x02, 0x9b, 0xcb, - 0xea, 0xba, 0x64, 0x40, 0x1f, 0x00, 0x55, 0x08, 0x8a, 0xf7, 0xce, 0xba, - 0x26, 0x36, 0x57, 0x38, 0x68, 0x3c, 0x8c, 0x17, 0xdd, 0x0e, 0x36, 0xb5, - 0xee, 0xb5, 0xbf, 0x4e, 0x62, 0xf8, 0x67, 0xa2, 0x8b, 0x8f, 0x81, 0xc3, - 0x00, 0x52, 0xa5, 0x9d, 0xdc, 0x7a, 0xa4, 0xa8, 0xad, 0xf5, 0x91, 0x5c, - 0x07, 0xe7, 0x49, 0x08, 0x54, 0xde, 0x0d, 0xac, 0x1e, 0x7e, 0x2c, 0xe4, - 0x7a, 0xe2, 0x3c, 0x9e, 0x9a, 0x03, 0xda, 0x78, 0x8f, 0xaa, 0x5a, 0xc3, - 0x9a, 0xa5, 0xa7, 0x44, 0xeb, 0x29, 0xa9, 0xde, 0x4d, 0x81, 0x7b, 0xa5, - 0xa4, 0x71, 0xa7, 0xa1, 0x25, 0x12, 0xf2, 0xe5, 0x3a, 0x9e, 0x3e, 0x1a, - 0x19, 0x82, 0xdc, 0x0b, 0x07, 0x74, 0x1c, 0x70, 0x5a, 0xfd, 0xe3, 0xb0, - 0xdf, 0xeb, 0xa1, 0x3e, 0xe0, 0x95, 0x32, 0x3a, 0x61, 0xed, 0x1d, 0x87, - 0x86, 0x55, 0xbd, 0x4e, 0xc5, 0xb5, 0xef, 0x55, 0xf3, 0xb8, 0xba, 0xf8, - 0x84, 0xca, 0x1f, 0xdd, 0x51, 0x31, 0x2c, 0xba, 0x2c, 0xd5, 0x17, 0x73, - 0xa1, 0x71, 0x56, 0x86, 0xe8, 0xc1, 0x6b, 0xef, 0xb7, 0x21, 0x8e, 0x44, - 0x72, 0x1a, 0xe7, 0xb3, 0x0e, 0xe7, 0x77, 0xed, 0x19, 0x03, 0x2d, 0x52, - 0xd5, 0xbb, 0xd4, 0x12, 0xf9, 0xe3, 0x9d, 0x3a, 0xe9, 0xf9, 0x4d, 0x4d, - 0x91, 0xa1, 0x87, 0x88, 0x38, 0x2f, 0xe7, 0x2e, 0x80, 0x46, 0x94, 0x17, - 0xbc, 0x39, 0xe4, 0xe1, 0xf3, 0x79, 0x93, 0x81, 0x8f, 0xcf, 0x71, 0xab, - 0x5e, 0x5b, 0x3e, 0x43, 0xde, 0xd9, 0xf5, 0xfa, 0xf9, 0x79, 0x3c, 0xea, - 0x7f, 0xcd, 0x84, 0x5e, 0x18, 0xac, 0x03, 0x5e, 0x13, 0x14, 0xd4, 0xdc, - 0xad, 0x72, 0x31, 0x14, 0xc0, 0x03, 0x86, 0xfb, 0xc7, 0x22, 0xf3, 0x7a, - 0x13, 0x57, 0x99, 0x2e, 0x6a, 0x59, 0x6a, 0xac, 0x1b, 0x00, 0x69, 0xf0, - 0x42, 0xb4, 0xb7, 0xf8, 0xbc, 0x8f, 0x27, 0xd2, 0x48, 0xad, 0x56, 0x4f, - 0x16, 0x0b, 0x1e, 0x2e, 0x0c, 0x3d, 0x61, 0x16, 0x5c, 0xee, 0xae, 0xd7, - 0x8a, 0x3b, 0xed, 0x49, 0xae, 0x8a, 0x56, 0x55, 0xab, 0x2b, 0x66, 0x83, - 0xa1, 0xe1, 0x83, 0x25, 0xc2, 0x3d, 0x3e, 0xfb, 0x88, 0x99, 0xd0, 0x07, - 0xfe, 0x38, 0x0b, 0x13, 0x19, 0x65, 0x90, 0xcb, 0xa8, 0x84, 0x41, 0xdc, - 0xc7, 0xd4, 0x7d, 0x8c, 0x38, 0x27, 0x5f, 0xf0, 0xc0, 0x09, 0x18, 0x8d, - 0x51, 0x1c, 0x9d, 0x9a, 0x45, 0x28, 0x74, 0x9c, 0xdd, 0xc2, 0x9e, 0x86, - 0x5d, 0x3c, 0xd2, 0x02, 0xb2, 0xab, 0xc3, 0xaf, 0xdb, 0xea, 0xe9, 0x66, - 0x25, 0x99, 0x1d, 0x4e, 0x75, 0x39, 0x17, 0xa2, 0xea, 0x00, 0x8b, 0xe0, - 0x04, 0x32, 0x7b, 0xf0, 0x12, 0x1a, 0x86, 0x42, 0x69, 0x70, 0xb8, 0xbe, - 0xcb, 0x39, 0x01, 0x2a, 0x0b, 0x8e, 0xc6, 0x69, 0xb5, 0x51, 0x5c, 0x78, - 0x73, 0xf7, 0x3a, 0x7b, 0x84, 0x3b, 0x5e, 0x77, 0x37, 0x48, 0x76, 0x8b, - 0xf8, 0x1c, 0x68, 0x1b, 0x7c, 0xae, 0xb5, 0x61, 0x73, 0x9c, 0x1f, 0xef, - 0x6a, 0xf9, 0x36, 0x29, 0x3e, 0xe4, 0xdf, 0x7a, 0xd3, 0x62, 0x68, 0xaf, - 0x6a, 0x76, 0xb6, 0x74, 0x2f, 0x2c, 0xb9, 0x5b, 0xf2, 0x71, 0x8a, 0x80, - 0xbe, 0xa9, 0x62, 0x6f, 0xd1, 0x69, 0x6d, 0xd1, 0xb4, 0x19, 0xf8, 0x37, - 0x93, 0xc6, 0x74, 0x7b, 0x63, 0xd8, 0xb7, 0x27, 0x97, 0x9d, 0xb6, 0xe7, - 0x39, 0x18, 0xb1, 0x96, 0xf3, 0x36, 0x7c, 0xcb, 0x8e, 0xb6, 0x66, 0xcb, - 0xd1, 0xcb, 0x6c, 0xda, 0x28, 0x04, 0x18, 0xfd, 0x71, 0x22, 0xc7, 0x7e, - 0x36, 0xc0, 0x39, 0x5f, 0x86, 0x25, 0xc3, 0x36, 0x6b, 0xe3, 0x90, 0xc5, - 0x54, 0x8f, 0x09, 0x1f, 0x3b, 0x77, 0xb0, 0xc9, 0x0f, 0xb9, 0xef, 0x29, - 0x11, 0xde, 0x31, 0x28, 0x1a, 0x95, 0x80, 0x44, 0x92, 0x18, 0x54, 0x29, - 0x04, 0x62, 0x41, 0x02, 0xf0, 0x89, 0xf5, 0xe6, 0x6e, 0xc8, 0x09, 0xba, - 0xb0, 0x0d, 0xd5, 0xbd, 0xd1, 0xf2, 0xd9, 0xd6, 0x3d, 0xda, 0x34, 0x1c, - 0xda, 0xa2, 0xe7, 0xdc, 0xb6, 0x22, 0xd5, 0x6d, 0x17, 0xed, 0xb7, 0x01, - 0x7e, 0xb4, 0x30, 0x2a, 0xae, 0xf1, 0xcc, 0x6a, 0x4f, 0x17, 0xb2, 0xdf, - 0x3f, 0xac, 0x82, 0x05, 0x24, 0xa0, 0xbc, 0x69, 0x59, 0x2a, 0x0b, 0xf8, - 0xc6, 0xf3, 0x32, 0x02, 0xcb, 0x10, 0x5a, 0x6c, 0xc1, 0xb6, 0xee, 0x94, - 0x17, 0x92, 0x86, 0x17, 0x17, 0x85, 0x11, 0x80, 0xa6, 0x59, 0x9a, 0xda, - 0xac, 0xa6, 0xe1, 0x35, 0xa4, 0x10, 0xb9, 0x94, 0xd0, 0xbc, 0xb6, 0xb6, - 0x9f, 0xf2, 0xd1, 0xb0, 0x8d, 0x63, 0xcf, 0xf6, 0x74, 0x1c, 0x95, 0x15, - 0xef, 0x2d, 0x64, 0xff, 0xd4, 0x1b, 0x64, 0x3c, 0x18, 0x42, 0xc2, 0x77, - 0x24, 0x05, 0x58, 0xb1, 0xda, 0xb3, 0xed, 0x37, 0xd2, 0xe3, 0x34, 0x7b, - 0x44, 0x73, 0x8d, 0x97, 0xa1, 0xef, 0x10, 0x4e, 0x70, 0x1c, 0xd5, 0xa4, - 0xe1, 0xa8, 0xdb, 0xa5, 0x41, 0xbd, 0xf2, 0x6c, 0x28, 0x5b, 0x7e, 0x51, - 0xdd, 0x14, 0x37, 0x95, 0x5d, 0xd5, 0x1e, 0x4a, 0xfe, 0x6a, 0x70, 0xd4, - 0x7c, 0xf4, 0x4d, 0xea, 0xdd, 0x7a, 0x8b, 0x65, 0x45, 0xce, 0x3b, 0x9b, - 0x12, 0xa4, 0xf1, 0xbd, 0x31, 0x07, 0x72, 0x25, 0x92, 0xa7, 0xb1, 0x5d, - 0x03, 0x51, 0xe0, 0xfb, 0xdc, 0x0e, 0xb2, 0x6c, 0x4e, 0xe2, 0x8b, 0x56, - 0xb2, 0x9a, 0x0f, 0x06, 0x9b, 0x07, 0xb2, 0x85, 0x7f, 0x53, 0x72, 0xe2, - 0xb3, 0x03, 0xc0, 0x58, 0x70, 0x26, 0xb6, 0x1e, 0xa8, 0x39, 0xee, 0x9e, - 0x4c, 0x69, 0xcd, 0xe9, 0x1e, 0xc6, 0x75, 0x9d, 0x85, 0x70, 0x75, 0x1a, - 0x11, 0x6b, 0xe7, 0x7c, 0x50, 0x58, 0x81, 0xd8, 0x65, 0x7e, 0xf7, 0x98, - 0x42, 0x5a, 0xc4, 0xe8, 0xae, 0xbe, 0xa4, 0xc5, 0x02, 0xd3, 0x7e, 0x63, - 0xe8, 0xf6, 0x91, 0x4a, 0x7a, 0xb1, 0x66, 0xed, 0x78, 0xa2, 0x0e, 0xf9, - 0xba, 0x3f, 0xb3, 0x26, 0x0d, 0xfb, 0x84, 0x28, 0xed, 0xaa, 0x26, 0xfb, - 0xaf, 0x8a, 0xd6, 0x1b, 0xeb, 0xae, 0xec, 0x3c, 0x3e, 0x14, 0xc7, 0x01, - 0xb8, 0x71, 0x40, 0xf3, 0xb9, 0x6b, 0x6c, 0xfe, 0x19, 0xa9, 0xc4, 0x70, - 0xeb, 0xa3, 0x72, 0xfe, 0x19, 0x8f, 0x28, 0x54, 0x5e, 0xe2, 0x3e, 0x8d, - 0x29, 0xf8, 0x61, 0x73, 0xc1, 0xdf, 0x40, 0x65, 0x54, 0xb1, 0x38, 0x86, - 0xb9, 0x90, 0xb0, 0x3d, 0x38, 0x62, 0xdc, 0x79, 0x78, 0xe7, 0x7e, 0x14, - 0xe4, 0xd8, 0xb1, 0xcd, 0x89, 0xcd, 0xe6, 0xe1, 0x75, 0xef, 0x3b, 0x70, - 0xe0, 0xfd, 0xe5, 0xdc, 0xd5, 0x54, 0x8e, 0xb5, 0x49, 0x19, 0x75, 0x2b, - 0x9d, 0x37, 0xcb, 0x62, 0xd4, 0x09, 0x33, 0x8d, 0xfa, 0x34, 0x26, 0x5f, - 0x13, 0x18, 0x4d, 0x3f, 0x71, 0x13, 0x04, 0xea, 0xad, 0x1c, 0x02, 0xf7, - 0xc2, 0x77, 0x57, 0x88, 0x83, 0xaa, 0x57, 0x03, 0x42, 0x0c, 0x40, 0x3f, - 0x38, 0xf8, 0x79, 0xd3, 0xa5, 0x0a, 0x22, 0x4c, 0x23, 0x37, 0x37, 0xca, - 0xe2, 0xc8, 0xce, 0xd2, 0xa8, 0x27, 0x04, 0xa7, 0x88, 0x4c, 0xa4, 0x98, - 0x2c, 0x1a, 0x9d, 0x92, 0x13, 0xee, 0xb8, 0x18, 0xd2, 0x0c, 0xcb, 0x80, - 0xca, 0x37, 0x80, 0xe7, 0xa3, 0x41, 0x35, 0x68, 0x69, 0x78, 0xc8, 0x9a, - 0x9e, 0x58, 0x33, 0x40, 0xcd, 0x97, 0xbc, 0xa5, 0x33, 0x73, 0xf7, 0x89, - 0x16, 0x17, 0x2e, 0x96, 0xa6, 0x41, 0x9b, 0x52, 0x46, 0x7f, 0x12, 0x9b, - 0x2d, 0x43, 0x8a, 0x12, 0x96, 0x03, 0x4c, 0xd5, 0x78, 0x34, 0xa1, 0x42, - 0x15, 0xad, 0x79, 0x00, 0xe3, 0xb5, 0x1d, 0xa0, 0xf3, 0x3d, 0x1f, 0x30, - 0xb1, 0xf6, 0xe7, 0xd0, 0x43, 0x12, 0x13, 0x06, 0x20, 0x5c, 0x62, 0x08, - 0x70, 0x1f, 0xe8, 0x55, 0x1d, 0xa5, 0xaa, 0x2d, 0x4a, 0x1c, 0xa2, 0xcb, - 0xce, 0xd8, 0x37, 0x5a, 0xc9, 0x59, 0x5d, 0xc7, 0xdd, 0x66, 0x7e, 0x00, - 0x19, 0x24, 0x0c, 0xf6, 0xc5, 0x47, 0xc3, 0x2b, 0xba, 0x28, 0x9c, 0xb7, - 0x65, 0x79, 0x36, 0xa0, 0x22, 0x11, 0x11, 0xdb, 0x9a, 0x62, 0xc6, 0xf6, - 0x73, 0x13, 0x9a, 0x7a, 0xaa, 0xa0, 0xc2, 0xe8, 0x45, 0x20, 0x90, 0x53, - 0x7a, 0x8e, 0x9c, 0x3c, 0x73, 0x01, 0x53, 0xa0, 0x25, 0x33, 0xfe, 0xb8, - 0x47, 0xe4, 0xc6, 0xa6, 0xc3, 0x94, 0x87, 0xcd, 0x1a, 0x8a, 0x62, 0xba, - 0xff, 0x5b, 0xf0, 0x9e, 0x1e, 0x61, 0x93, 0xda, 0xef, 0x89, 0x21, 0xe7, - 0x0b, 0x5c, 0x84, 0x57, 0xaf, 0xc8, 0x2a, 0x0c, 0x80, 0xd1, 0xd7, 0x82, - 0x93, 0xc3, 0xbf, 0x50, 0xdf, 0x32, 0xf1, 0x8e, 0x29, 0x73, 0xb2, 0xfa, - 0xc7, 0x0d, 0x59, 0x21, 0x04, 0xe7, 0x86, 0x89, 0x19, 0x54, 0xce, 0x00, - 0xd2, 0x1d, 0xbf, 0xfb, 0xf0, 0x83, 0x27, 0x80, 0x0c, 0xa1, 0x09, 0x4e, - 0xa8, 0xab, 0xa6, 0xa0, 0x32, 0x19, 0xd1, 0x96, 0x87, 0x8d, 0x19, 0xe6, - 0xbe, 0xa8, 0x8e, 0x25, 0xf1, 0x34, 0x0e, 0xdf, 0xbe, 0xfa, 0x93, 0xc6, - 0xdb, 0x8e, 0x94, 0x18, 0xe3, 0x09, 0x24, 0x40, 0xec, 0xbc, 0x29, 0x81, - 0xc6, 0x7b, 0x51, 0xc8, 0xc6, 0xd1, 0x89, 0xeb, 0x27, 0x9c, 0x69, 0x27, - 0x88, 0x82, 0x8f, 0xb3, 0x69, 0x50, 0x55, 0x8c, 0xc7, 0xb4, 0x75, 0x10, - 0x45, 0x7b, 0x4c, 0xef, 0x58, 0x8a, 0x4e, 0xe3, 0x0f, 0x66, 0x4a, 0x1f, - 0x22, 0x5c, 0x41, 0x03, 0x60, 0x93, 0xec, 0x25, 0x3e, 0x4f, 0x2c, 0xe2, - 0x20, 0x6c, 0xa2, 0x88, 0x56, 0x52, 0x4d, 0xf4, 0xd3, 0x38, 0x7b, 0x5d, - 0x00, 0xf0, 0x40, 0xcd, 0x83, 0xcc, 0xae, 0xac, 0xa2, 0x46, 0xe8, 0xab, - 0x8f, 0x7a, 0x0c, 0x14, 0x96, 0x9a, 0x11, 0x37, 0xf5, 0x10, 0x54, 0xae, - 0xa9, 0x24, 0xbc, 0x1a, 0xfa, 0x12, 0x9d, 0x9c, 0x67, 0x3d, 0x1d, 0xb5, - 0xc5, 0x06, 0xaa, 0x51, 0x2a, 0xae, 0x85, 0x90, 0xc9, 0x8d, 0x1d, 0x40, - 0xf2, 0x45, 0x21, 0x47, 0x1e, 0x0a, 0x5f, 0x1a, 0x02, 0x88, 0x6f, 0xd6, - 0xa5, 0x31, 0xaa, 0x2d, 0xcb, 0x3a, 0x24, 0x77, 0x40, 0x3f, 0xba, 0x2f, - 0x80, 0x6d, 0x6d, 0x4a, 0x37, 0x77, 0x2b, 0xb1, 0xc1, 0x32, 0x75, 0x61, - 0x49, 0x4b, 0x18, 0xc0, 0xa7, 0xf4, 0x43, 0xe5, 0x86, 0x33, 0x47, 0xb4, - 0xf1, 0x73, 0x1f, 0x5e, 0xb4, 0xf6, 0x13, 0x65, 0xdc, 0xfa, 0x22, 0xcf, - 0xe5, 0xf4, 0x03, 0xbf, 0x5f, 0x44, 0x5e, 0x63, 0x12, 0xaf, 0x14, 0x31, - 0x1a, 0x53, 0x48, 0x21, 0x85, 0xd9, 0x87, 0x93, 0x89, 0x8f, 0xb1, 0x1a, - 0x59, 0xa9, 0xc8, 0x94, 0x94, 0xc8, 0xe5, 0x54, 0xbb, 0x1f, 0x15, 0x6f, - 0x94, 0x03, 0xf4, 0xda, 0x67, 0x59, 0x3d, 0xfc, 0x8a, 0xba, 0xbb, 0x0c, - 0x7f, 0xe3, 0x34, 0xda, 0x28, 0xdb, 0x1d, 0x10, 0x6f, 0x6c, 0x93, 0x3a, - 0xc1, 0x84, 0xa9, 0x60, 0xa1, 0xd1, 0x77, 0xa2, 0x3b, 0x5c, 0x6d, 0x61, - 0x8c, 0x7f, 0x32, 0xbb, 0x5f, 0xf7, 0xf3, 0x07, 0x8f, 0xa5, 0x57, 0x07, - 0x5e, 0x54, 0x7e, 0xf6, 0x71, 0xec, 0xa5, 0x59, 0x0c, 0x4c, 0x3c, 0x58, - 0x3c, 0x1f, 0x27, 0x51, 0xdb, 0x0b, 0xa4, 0xbd, 0x6e, 0xc2, 0xde, 0x58, - 0x80, 0xf9, 0xa4, 0x14, 0xfa, 0x08, 0xef, 0x23, 0x6b, 0x45, 0x8b, 0x40, - 0xf1, 0x79, 0xf0, 0xb0, 0xa8, 0x51, 0xdc, 0xf5, 0xe4, 0x5e, 0x12, 0x57, - 0x01, 0x26, 0xe2, 0x03, 0x3d, 0x0f, 0xde, 0x04, 0xfb, 0x21, 0x79, 0x67, - 0x4c, 0x7e, 0x1c, 0x70, 0x11, 0xa4, 0xe3, 0x16, 0x78, 0xa7, 0x09, 0x4b, - 0x14, 0xac, 0xa2, 0x68, 0x85, 0x42, 0x3a, 0x33, 0xf7, 0xc0, 0x93, 0x96, - 0x0b, 0xac, 0xaa, 0x4d, 0xfe, 0xa1, 0x14, 0x38, 0x9e, 0xd9, 0x1f, 0x65, - 0x6e, 0x86, 0x25, 0x85, 0xf0, 0x5f, 0x62, 0xfe, 0x86, 0x27, 0xd5, 0xbe, - 0x5f, 0x91, 0xfc, 0x06, 0x3c, 0x03, 0xde, 0xed, 0x4d, 0x23, 0x6b, 0xd9, - 0x94, 0xb0, 0x8d, 0xa5, 0x66, 0x38, 0x44, 0xdc, 0x80, 0x66, 0x4d, 0x55, - 0x6c, 0xee, 0xc7, 0xf4, 0x98, 0x1e, 0x88, 0xfa, 0x94, 0x99, 0x2f, 0x93, - 0x9a, 0xb4, 0x09, 0xcf, 0x10, 0xb8, 0x2c, 0x56, 0x70, 0xbd, 0xfb, 0x00, - 0xeb, 0xa6, 0xce, 0x11, 0x91, 0x33, 0xd4, 0x66, 0x30, 0x27, 0x9b, 0xe1, - 0x71, 0xe1, 0x18, 0xb0, 0xce, 0x4a, 0xc3, 0x69, 0xe2, 0xbb, 0x6e, 0x04, - 0xec, 0xb5, 0x39, 0x62, 0x86, 0xda, 0x3c, 0xdd, 0xce, 0x0d, 0x07, 0x83, - 0x5c, 0xb3, 0x42, 0xa7, 0x7f, 0x2f, 0x5b, 0xf7, 0x5d, 0x8f, 0x79, 0x29, - 0x60, 0x13, 0x6e, 0xdc, 0xa0, 0x2c, 0xd4, 0x85, 0xd1, 0x17, 0xb5, 0x4d, - 0xd3, 0xe9, 0x58, 0xf9, 0xc8, 0xba, 0x17, 0xef, 0x69, 0xfa, 0xa4, 0xe6, - 0xe9, 0x25, 0x01, 0x21, 0x00, 0xd9, 0x3d, 0x24, 0xfd, 0x10, 0x48, 0x66, - 0x0e, 0xad, 0x90, 0x13, 0xed, 0xad, 0x29, 0x31, 0xa7, 0x83, 0x53, 0x97, - 0x14, 0xc7, 0xd7, 0x80, 0x16, 0x6d, 0x48, 0x72, 0xb0, 0x63, 0x0a, 0xc4, - 0x1c, 0x58, 0xc7, 0xa6, 0x16, 0xfa, 0x5e, 0x2d, 0xa7, 0xe6, 0x81, 0x6c, - 0xb8, 0x0a, 0xc7, 0xe8, 0xae, 0xac, 0x78, 0x27, 0x8d, 0xab, 0x70, 0x9d, - 0xa9, 0x29, 0x71, 0x6e, 0xc2, 0x60, 0x3c, 0xf3, 0x7f, 0xc3, 0x10, 0x17, - 0xf2, 0x18, 0xff, 0x74, 0xa9, 0x0c, 0xd0, 0x99, 0xcb, 0x49, 0x40, 0xbd, - 0x05, 0xd2, 0xdc, 0x38, 0xf9, 0x82, 0xb9, 0x25, 0x22, 0x6f, 0x6b, 0x4c, - 0x01, 0xbb, 0x9e, 0x97, 0x8e, 0x85, 0xb7, 0x30, 0x5c, 0x31, 0x4b, 0xb9, - 0x41, 0x0a, 0x15, 0x38, 0x58, 0x4e, 0x1c, 0x17, 0x07, 0x74, 0x96, 0x65, - 0x0a, 0xb8, 0x05, 0x55, 0x00, 0x70, 0x9d, 0x78, 0xb7, 0x48, 0xdc, 0xc2, - 0xe2, 0xc3, 0xf7, 0xcb, 0xd2, 0x82, 0x4e, 0xa0, 0x97, 0xeb, 0x05, 0x87, - 0x60, 0x95, 0xa8, 0x0b, 0x45, 0x6d, 0x85, 0x36, 0x05, 0x2e, 0xb7, 0xe2, - 0xf1, 0xf8, 0x17, 0x23, 0x26, 0x00, 0xb9, 0xb1, 0x28, 0xa2, 0x0b, 0x4d, - 0x6b, 0xfe, 0x93, 0x78, 0x9f, 0xb3, 0x4c, 0x37, 0x6f, 0x38, 0xf9, 0x48, - 0x5f, 0xf7, 0xca, 0x98, 0x48, 0xd8, 0x2f, 0x76, 0x2b, 0x93, 0x66, 0xfa, - 0xe4, 0xfc, 0x35, 0x54, 0x32, 0x5e, 0x8e, 0x25, 0x05, 0xe5, 0xf4, 0x22, - 0x17, 0x05, 0x0a, 0xf9, 0x3e, 0x47, 0x4e, 0x8b, 0x3a, 0x2a, 0x03, 0xf7, - 0xa1, 0xeb, 0xfd, 0xf0, 0x82, 0x68, 0xc2, 0xec, 0x74, 0x12, 0xb1, 0x90, - 0xd6, 0x3c, 0xb9, 0x31, 0xc8, 0x55, 0x45, 0x50, 0x4a, 0xbc, 0x6b, 0x47, - 0x66, 0xdb, 0xa7, 0x1f, 0x09, 0x61, 0x91, 0xe5, 0x49, 0x28, 0x08, 0xf9, - 0x5c, 0x34, 0x7e, 0xa6, 0xfd, 0xa2, 0x71, 0x4c, 0x41, 0x63, 0x10, 0xb3, - 0x7c, 0xa9, 0x67, 0x53, 0x0e, 0x08, 0x94, 0x9f, 0x90, 0x39, 0x26, 0xe8, - 0xa9, 0x62, 0x0c, 0xab, 0x27, 0x57, 0x97, 0x19, 0x02, 0x22, 0xa4, 0x5d, - 0xbd, 0x6b, 0x1f, 0x1b, 0x9b, 0xaf, 0xaa, 0x36, 0x15, 0x03, 0x1e, 0xb7, - 0x58, 0x63, 0x0c, 0xc4, 0x45, 0x23, 0x0e, 0x83, 0x50, 0xa8, 0xeb, 0x83, - 0x0a, 0x57, 0x00, 0x40, 0x67, 0x4a, 0xb5, 0x09, 0xb2, 0xcb, 0x30, 0xc0, - 0x2a, 0x50, 0x1f, 0xdb, 0xfd, 0x59, 0x29, 0xdd, 0x93, 0xf0, 0x00, 0x72, - 0x45, 0xa7, 0xc9, 0x52, 0x5e, 0x5f, 0x49, 0xb3, 0x81, 0xa4, 0xa5, 0xd1, - 0x84, 0x56, 0x1f, 0x84, 0x5a, 0xdd, 0x23, 0x96, 0xc7, 0xba, 0x61, 0xbc, - 0xad, 0x4a, 0x65, 0x95, 0x31, 0xcd, 0xa2, 0x5a, 0x62, 0x4d, 0x95, 0x8d, - 0x71, 0xc5, 0xb5, 0xcc, 0x22, 0x6c, 0x7f, 0x2b, 0xd3, 0xa6, 0x1e, 0x53, - 0xf8, 0x72, 0x60, 0xe7, 0x51, 0xa5, 0x68, 0x1b, 0x34, 0xc8, 0xe5, 0xb3, - 0x50, 0x46, 0xd0, 0xab, 0xd3, 0x29, 0xa2, 0xb3, 0x63, 0xdb, 0x52, 0xf3, - 0x74, 0xd8, 0x7c, 0x45, 0x2c, 0xf1, 0xee, 0x42, 0x88, 0xa4, 0xa5, 0x47, - 0xa4, 0x11, 0x31, 0xbf, 0xcd, 0x31, 0x6c, 0xde, 0xac, 0xd6, 0x87, 0x93, - 0xec, 0xe0, 0x36, 0xec, 0x5e, 0x46, 0x71, 0xdd, 0x9a, 0x5f, 0x1a, 0xed, - 0xf0, 0x20, 0xa0, 0x1c, 0xa6, 0x40, 0x38, 0xdc, 0x36, 0xb4, 0xad, 0xde, - 0x47, 0x42, 0x87, 0x69, 0x82, 0xa3, 0x93, 0xca, 0xc4, 0x36, 0xfc, 0x28, - 0x42, 0xad, 0x6b, 0xf0, 0xdc, 0xa8, 0x01, 0x76, 0x36, 0x4c, 0x18, 0x1c, - 0x62, 0x24, 0xf1, 0xde, 0x1c, 0xd7, 0xfc, 0x80, 0x70, 0x59, 0x36, 0x35, - 0x5d, 0xa8, 0x23, 0xc0, 0x00, 0x37, 0x2c, 0xa1, 0x4a, 0x4b, 0xde, 0x35, - 0x17, 0xb0, 0x05, 0x64, 0x73, 0xd2, 0x58, 0x95, 0x9b, 0x75, 0xcc, 0xcb, - 0xad, 0x72, 0x11, 0x5e, 0x8c, 0x47, 0xef, 0x1d, 0x81, 0x78, 0xd3, 0xe3, - 0xb7, 0xa6, 0xf8, 0xde, 0xe9, 0xb8, 0xd4, 0xae, 0x81, 0x37, 0x1c, 0xa1, - 0xf2, 0xe9, 0xb2, 0x10, 0xe9, 0x93, 0xd1, 0x97, 0x76, 0xc6, 0x45, 0xad, - 0x02, 0x1d, 0x01, 0xcf, 0x2c, 0x22, 0x1b, 0xe6, 0x23, 0x0a, 0x30, 0x67, - 0xb3, 0xd7, 0x48, 0xef, 0xaf, 0xb2, 0xf9, 0xcb, 0xe0, 0x7c, 0x79, 0x91, - 0xab, 0xd1, 0xc2, 0x31, 0x08, 0xea, 0x2b, 0x2b, 0xf2, 0x57, 0xa6, 0xac, - 0x17, 0xb5, 0xb2, 0xfd, 0x1c, 0xfe, 0x85, 0xe6, 0x73, 0x78, 0x21, 0x09, - 0x40, 0xb2, 0x93, 0x19, 0xfb, 0x0d, 0xc0, 0xcb, 0x43, 0x2a, 0x3f, 0xe0, - 0x5d, 0x6b, 0x23, 0x6f, 0x5a, 0xc2, 0xd0, 0xcb, 0x42, 0x60, 0x81, 0xc4, - 0x10, 0xf1, 0x69, 0x13, 0x27, 0xda, 0xb6, 0xbe, 0xf0, 0xb9, 0xcb, 0x3c, - 0x06, 0x90, 0x46, 0x33, 0x1a, 0x2a, 0x14, 0xd3, 0x8c, 0xf3, 0x1f, 0xa6, - 0x6e, 0x50, 0xda, 0x93, 0x7b, 0xcd, 0xb9, 0xcb, 0xae, 0xde, 0xf2, 0x0d, - 0x3f, 0x29, 0x88, 0x5f, 0xbe, 0x69, 0xfe, 0x9f, 0xd1, 0x5d, 0xc1, 0x29, - 0x4c, 0xb4, 0x4d, 0xc9, 0xbc, 0x66, 0x7e, 0xbe, 0xe0, 0xe6, 0xf8, 0x27, - 0x4f, 0xa1, 0xfd, 0x08, 0xca, 0xfc, 0x17, 0xf4, 0x83, 0x2c, 0x17, 0x2e, - 0x3e, 0xbd, 0xf0, 0xd8, 0x93, 0x63, 0xbd, 0x83, 0xd9, 0xb1, 0x4a, 0x70, - 0xe7, 0xc2, 0x46, 0x2c, 0x96, 0x04, 0x13, 0xfa, 0xde, 0xc1, 0x06, 0xc6, - 0x80, 0xed, 0xc4, 0x77, 0x67, 0xd6, 0x74, 0xb1, 0x6c, 0x4c, 0x58, 0x70, - 0xd9, 0x2c, 0xc7, 0x6c, 0x5d, 0x3b, 0xce, 0x3d, 0xc6, 0x7a, 0x17, 0x3f, - 0x30, 0x57, 0xcc, 0x3a, 0xee, 0xfe, 0x69, 0x9e, 0x1d, 0xf0, 0x62, 0xb9, - 0x74, 0xbb, 0x8d, 0x8b, 0x61, 0x82, 0xb8, 0xb9, 0xfa, 0xc4, 0x55, 0x2f, - 0xdd, 0x5c, 0xf9, 0x6e, 0x89, 0xd2, 0x13, 0x0e, 0x65, 0x26, 0x1e, 0x48, - 0x17, 0x8c, 0x59, 0xa9, 0x4d, 0x42, 0xe7, 0x78, 0x34, 0xeb, 0xc2, 0x34, - 0x32, 0xd8, 0x95, 0x24, 0xd1, 0xf5, 0x88, 0x37, 0x76, 0xdb, 0xa6, 0xac, - 0xb4, 0xd8, 0x3b, 0x88, 0xec, 0xb7, 0xaf, 0x13, 0xbe, 0x34, 0x48, 0x24, - 0xe0, 0x10, 0x05, 0x77, 0xfe, 0x31, 0xb3, 0xa2, 0xfc, 0xdc, 0xcb, 0x72, - 0xd7, 0x2b, 0x63, 0xc4, 0xf1, 0x68, 0x83, 0x38, 0xba, 0x81, 0x23, 0x98, - 0xa0, 0xac, 0xb8, 0x59, 0xc7, 0x78, 0x9c, 0x56, 0x07, 0x0a, 0xa2, 0xcb, - 0x3f, 0xe5, 0x71, 0xec, 0x03, 0x4c, 0xe2, 0x18, 0x5e, 0x66, 0x9f, 0x8b, - 0x1a, 0xe5, 0x27, 0x5a, 0x1f, 0x13, 0xad, 0xa2, 0xc8, 0x73, 0x59, 0x2e, - 0xe3, 0xe1, 0x5d, 0xb4, 0xca, 0x1c, 0xae, 0x66, 0xf6, 0x05, 0x93, 0xc3, - 0xad, 0xed, 0xcc, 0xb8, 0x3e, 0x7f, 0xa1, 0x0c, 0x95, 0x29, 0x68, 0x67, - 0x6c, 0xce, 0x3e, 0xca, 0xcf, 0xb3, 0x6f, 0xcc, 0xf1, 0xce, 0xa2, 0xa1, - 0xbd, 0xc6, 0x0c, 0x1f, 0x07, 0xf1, 0xa0, 0xcc, 0x0a, 0x36, 0xcf, 0x11, - 0x81, 0xe0, 0x9e, 0xb0, 0x1d, 0x48, 0xcb, 0x8b, 0x46, 0xb1, 0x52, 0x94, - 0x1f, 0x0f, 0x2a, 0x59, 0x98, 0x5e, 0xb9, 0x60, 0x9a, 0x51, 0xda, 0xd4, - 0xe4, 0xc8, 0x28, 0x77, 0xef, 0x34, 0xdd, 0xc5, 0x75, 0x0a, 0x10, 0xb3, - 0xbe, 0x65, 0x6f, 0x8e, 0x70, 0x9d, 0x87, 0x8a, 0xf6, 0x83, 0x15, 0xd3, - 0x54, 0x56, 0x0c, 0x9b, 0x96, 0x2f, 0x0a, 0xac, 0x24, 0xd0, 0x48, 0x1e, - 0xd1, 0x21, 0xe4, 0x7f, 0x63, 0x78, 0x9f, 0xff, 0xc5, 0x5a, 0x1b, 0x54, - 0x5f, 0xf5, 0xc4, 0xb3, 0x14, 0xa6, 0x08, 0x66, 0x88, 0x19, 0xe0, 0x62, - 0x17, 0xa5, 0x6a, 0x64, 0x31, 0xcb, 0x91, 0x33, 0xee, 0xe0, 0xe4, 0x3d, - 0xa7, 0x81, 0x42, 0x95, 0x38, 0x51, 0x09, 0xaf, 0xa6, 0xd8, 0xf8, 0xcc, - 0xd3, 0xc3, 0x55, 0x8e, 0x63, 0xf3, 0x64, 0xed, 0xd9, 0x97, 0x91, 0x70, - 0xc4, 0xa5, 0x7f, 0xbc, 0x9c, 0xff, 0xd8, 0xbb, 0x77, 0x60, 0x94, 0xb4, - 0xe7, 0xb1, 0x6e, 0xe0, 0xba, 0xdf, 0x98, 0x7a, 0x90, 0x6b, 0x3c, 0x03, - 0xc7, 0x85, 0x6d, 0x23, 0xd6, 0xfa, 0x8f, 0xfa, 0xfc, 0x52, 0x14, 0x26, - 0x2a, 0xc3, 0x8d, 0x5b, 0x85, 0x19, 0xd3, 0x0a, 0xae, 0x55, 0x01, 0xed, - 0xd2, 0x71, 0x73, 0x2c, 0x41, 0x20, 0x9d, 0xf7, 0x0c, 0x99, 0x7c, 0x3b, - 0x0c, 0xa0, 0x4c, 0xd2, 0xe9, 0x9f, 0x9e, 0x14, 0xa9, 0xc0, 0x55, 0x8f, - 0xe1, 0x6c, 0xe6, 0x5e, 0x41, 0xeb, 0x78, 0x13, 0x72, 0xef, 0x51, 0xe2, - 0x1e, 0xaa, 0x56, 0xd3, 0xe4, 0xc9, 0x04, 0x3a, 0x70, 0xdb, 0x3b, 0xfb, - 0xb4, 0x24, 0x4b, 0xa6, 0x29, 0x6b, 0xa9, 0x84, 0x24, 0x47, 0x02, 0x4c, - 0x58, 0xce, 0xf0, 0x30, 0xf2, 0x82, 0x7d, 0x77, 0x19, 0xd2, 0x55, 0xaf, - 0x60, 0x0e, 0xa9, 0x9c, 0x43, 0x01, 0x78, 0x73, 0x6e, 0x88, 0xb9, 0x55, - 0x7a, 0x21, 0x36, 0x6b, 0x89, 0xe1, 0x6e, 0x4a, 0xa0, 0x19, 0xb3, 0xc7, - 0x2c, 0x89, 0xaf, 0x3c, 0x33, 0x6f, 0xe7, 0xe4, 0xfe, 0xcd, 0x78, 0x80, - 0xc3, 0x13, 0x3c, 0x70, 0x13, 0x7e, 0xb2, 0x93, 0xc1, 0x85, 0x86, 0xbd, - 0xe2, 0xcd, 0x65, 0x8c, 0xd6, 0xc1, 0x20, 0xf7, 0xba, 0x32, 0x4f, 0x7f, - 0x91, 0xb2, 0x9f, 0x67, 0x46, 0x2d, 0x11, 0x14, 0x2f, 0x74, 0x20, 0x07, - 0xe9, 0x33, 0x65, 0xad, 0x02, 0x65, 0x97, 0xf8, 0x11, 0xf5, 0x84, 0x58, - 0xb8, 0xbc, 0x6a, 0x44, 0xd3, 0x77, 0x0e, 0x4f, 0xdc, 0xd4, 0x43, 0x30, - 0xd1, 0x99, 0x07, 0xd6, 0xb5, 0xb3, 0xe4, 0x69, 0x8c, 0x14, 0xaa, 0xfc, - 0xe2, 0xbb, 0xe0, 0x38, 0x8a, 0x17, 0x34, 0xde, 0xaa, 0xbf, 0xe9, 0x59, - 0xb5, 0xa9, 0x03, 0xc5, 0x5a, 0x2f, 0xa9, 0x11, 0xfc, 0x0e, 0x5a, 0x5e, - 0xa2, 0x18, 0x18, 0x0f, 0xe8, 0x2b, 0x01, 0x0b, 0x6f, 0x30, 0x12, 0xb8, - 0xdc, 0xa8, 0x61, 0xfc, 0x7f, 0xbb, 0xc2, 0xf2, 0x9f, 0xde, 0xb0, 0xf4, - 0x27, 0x81, 0x81, 0x71, 0x7f, 0x9e, 0xfa, 0xb6, 0x72, 0xc7, 0x7b, 0x24, - 0xae, 0x2d, 0x58, 0xa5, 0xaf, 0x0a, 0x5f, 0xee, 0x3a, 0x65, 0xa9, 0x75, - 0xc8, 0x60, 0xcf, 0x6e, 0xf2, 0xa2, 0x21, 0x6b, 0xde, 0xf6, 0x9e, 0xf7, - 0x95, 0x18, 0x4e, 0xf7, 0x8b, 0x85, 0x38, 0x5e, 0x0b, 0x88, 0xea, 0xec, - 0xcf, 0x73, 0x74, 0xb6, 0x9f, 0x95, 0x84, 0x0e, 0x6e, 0xdd, 0x48, 0x11, - 0xc7, 0x84, 0xb9, 0x6d, 0x8a, 0x5e, 0xa2, 0xfc, 0x58, 0xd6, 0xe8, 0xc4, - 0x80, 0xe1, 0x69, 0x78, 0x17, 0xde, 0x76, 0x0d, 0x86, 0xa3, 0x04, 0x57, - 0xd2, 0xe2, 0x24, 0xdc, 0x7c, 0xa4, 0xbf, 0x11, 0x3d, 0x9f, 0xd2, 0xee, - 0x87, 0x62, 0xd3, 0x3f, 0xb7, 0x3f, 0x69, 0x79, 0x7e, 0x7f, 0x72, 0x80, - 0x4f, 0x79, 0x6d, 0x1f, 0x2b, 0xcc, 0x1d, 0xb5, 0x7f, 0x6e, 0x7d, 0xc8, - 0x50, 0xa6, 0x9d, 0x0b, 0xe9, 0x3e, 0x5b, 0xed, 0xa2, 0xdb, 0xf9, 0x72, - 0xc5, 0x33, 0x99, 0x4d, 0x9a, 0x49, 0x2a, 0xa6, 0xc7, 0x8b, 0x63, 0x55, - 0x0b, 0x3d, 0xbc, 0x1d, 0xa9, 0x2f, 0x66, 0x0b, 0x48, 0x9f, 0x16, 0xd7, - 0x58, 0xca, 0x7c, 0x41, 0x0a, 0x0d, 0x0f, 0x3e, 0xde, 0xf2, 0xe5, 0xa2, - 0x94, 0xce, 0xd0, 0xe4, 0xea, 0x03, 0x2e, 0x1b, 0x3e, 0xe4, 0x48, 0x1f, - 0x9c, 0x60, 0xbc, 0xe5, 0x10, 0x73, 0xe8, 0xc2, 0xe2, 0xb8, 0xa6, 0xf5, - 0x7e, 0xc6, 0x2f, 0x36, 0xe5, 0x24, 0x2f, 0xee, 0xce, 0xe9, 0x06, 0x18, - 0xa2, 0x23, 0x5e, 0x6f, 0xc7, 0x7b, 0xd6, 0x03, 0x55, 0xac, 0x3d, 0x76, - 0xfb, 0x8d, 0xd5, 0xb3, 0x68, 0x4b, 0x12, 0x57, 0x23, 0xca, 0x33, 0x9e, - 0xfd, 0x13, 0x0d, 0xa3, 0x3a, 0xf7, 0xa0, 0xd7, 0xf8, 0x36, 0x97, 0x69, - 0xea, 0x9c, 0x76, 0xb9, 0xc4, 0x7a, 0x4d, 0x5f, 0x59, 0x61, 0x75, 0x22, - 0x08, 0x00, 0x55, 0x91, 0x42, 0x74, 0xd9, 0xb7, 0xc9, 0xf0, 0xb2, 0x1d, - 0xd5, 0x5e, 0x1d, 0x71, 0xbb, 0xbe, 0xbf, 0x6f, 0x71, 0xc3, 0xa3, 0x70, - 0x56, 0x70, 0x61, 0xe2, 0x7f, 0xfb, 0x30, 0x4a, 0xda, 0x88, 0xaf, 0xb7, - 0x45, 0x3d, 0xc5, 0x19, 0x73, 0x2d, 0x24, 0x99, 0xa2, 0xfd, 0x50, 0x00, - 0x4d, 0x25, 0x0c, 0xdd, 0x35, 0xd8, 0xab, 0x6a, 0x71, 0x6a, 0x6c, 0xe2, - 0x18, 0xca, 0x22, 0x13, 0x17, 0x6a, 0xb3, 0x1f, 0x59, 0x30, 0xba, 0xa9, - 0x91, 0xa9, 0xa3, 0x2f, 0x6a, 0xe3, 0x55, 0xb6, 0x1a, 0xd7, 0x58, 0xdc, - 0xb8, 0x02, 0x43, 0xc2, 0x19, 0x4d, 0xc6, 0x24, 0x34, 0x53, 0xbc, 0x0b, - 0x14, 0x69, 0x53, 0xbd, 0x07, 0xd0, 0x28, 0xa8, 0x2a, 0xc1, 0x6b, 0xc5, - 0xa6, 0x43, 0xae, 0xf2, 0x5b, 0xa1, 0x6c, 0xcf, 0x91, 0xcd, 0x47, 0x6d, - 0xbe, 0x5a, 0x03, 0xb4, 0xf8, 0x68, 0xc0, 0xe0, 0x8a, 0xc5, 0x07, 0xc1, - 0x7a, 0xea, 0x6a, 0xe6, 0x05, 0x14, 0x5d, 0xae, 0x20, 0x6b, 0x81, 0x41, - 0xad, 0x5f, 0xe1, 0xca, 0xa9, 0x4c, 0x9a, 0xa8, 0x44, 0x47, 0x0d, 0xc4, - 0xf6, 0x78, 0x63, 0x65, 0xff, 0x25, 0xf2, 0x69, 0xad, 0xba, 0x3e, 0x49, - 0x87, 0x91, 0x78, 0xba, 0xc6, 0xcd, 0xe4, 0x40, 0xc7, 0x58, 0xcb, 0xaf, - 0xf5, 0x31, 0x3b, 0xef, 0xf4, 0x87, 0x16, 0xc2, 0x8d, 0x8d, 0x00, 0xfa, - 0xbf, 0xcd, 0x1a, 0xc2, 0x90, 0xaa, 0xf2, 0x38, 0x54, 0xd1, 0x22, 0x73, - 0x84, 0x49, 0xd7, 0x5b, 0x06, 0x8e, 0xaf, 0x36, 0x05, 0x90, 0xab, 0x1c, - 0xcc, 0x71, 0x5e, 0xab, 0x7f, 0xc3, 0x9d, 0xa6, 0xbf, 0xdc, 0xb2, 0xc9, - 0xdc, 0xc3, 0xcf, 0xbc, 0x07, 0x8c, 0x89, 0xea, 0x9d, 0x15, 0x04, 0x99, - 0x9a, 0xe8, 0xce, 0x5a, 0xc8, 0xf7, 0x8b, 0x48, 0x68, 0x7e, 0x9f, 0x7e, - 0x54, 0x6e, 0xb8, 0x4c, 0x32, 0x76, 0x14, 0x7a, 0x36, 0x21, 0x38, 0x61, - 0xff, 0xbe, 0x3e, 0xdd, 0x40, 0xdc, 0x4b, 0x74, 0x63, 0x7a, 0x36, 0x2b, - 0xdc, 0x5e, 0x0c, 0x63, 0x1a, 0xa9, 0x49, 0xa4, 0xba, 0x2a, 0x85, 0xa8, - 0x25, 0xad, 0x8e, 0xe7, 0x73, 0x61, 0x3b, 0xf7, 0x1b, 0x6e, 0x0c, 0x6e, - 0x32, 0x05, 0x41, 0x67, 0x24, 0x5f, 0xa3, 0xc3, 0xbc, 0x75, 0x41, 0xc5, - 0x14, 0xd8, 0x4b, 0x11, 0xe0, 0x12, 0xd4, 0x5d, 0x02, 0xdc, 0xc3, 0x8e, - 0x97, 0x07, 0xc0, 0xed, 0xc3, 0xe5, 0x78, 0x62, 0xef, 0x2a, 0x09, 0xb9, - 0xca, 0xe5, 0xb0, 0xca, 0x40, 0x38, 0xee, 0x01, 0xc0, 0x3d, 0xd2, 0xa2, - 0xb8, 0x60, 0x25, 0xba, 0xe9, 0x7d, 0xe9, 0xef, 0x28, 0xde, 0x70, 0x4f, - 0xad, 0xd7, 0x00, 0xa1, 0x43, 0xe8, 0x2d, 0x1d, 0x66, 0xf5, 0x3b, 0xab, - 0x96, 0xbf, 0xcb, 0xce, 0x59, 0x18, 0xa7, 0xe5, 0xf9, 0x8b, 0x1f, 0x85, - 0x86, 0xe4, 0x10, 0x8e, 0x18, 0xe4, 0xaf, 0x67, 0xfa, 0x97, 0x45, 0xd8, - 0xc2, 0xf0, 0xba, 0x2d, 0xa3, 0x45, 0xfd, 0x05, 0x77, 0x5f, 0x16, 0xb6, - 0xd7, 0x04, 0x6e, 0x85, 0x62, 0x96, 0xcc, 0xd5, 0xc9, 0x0f, 0x30, 0x89, - 0xfa, 0x58, 0x79, 0xe2, 0xf1, 0x34, 0xe4, 0x36, 0xd1, 0x4c, 0x11, 0xb7, - 0x89, 0x47, 0xd5, 0xa6, 0xe9, 0x44, 0x29, 0x74, 0x7d, 0x87, 0x42, 0x98, - 0xa3, 0x5a, 0x42, 0x96, 0xf3, 0x40, 0xdd, 0x70, 0xf6, 0x9d, 0xcd, 0xe9, - 0x3c, 0xd2, 0x26, 0x18, 0xd6, 0x70, 0x46, 0xda, 0x11, 0xb2, 0x10, 0xe8, - 0x0e, 0xb1, 0x53, 0x02, 0x8a, 0xf1, 0x08, 0x85, 0xb1, 0xfb, 0x5e, 0x79, - 0x47, 0x23, 0x99, 0x91, 0xbb, 0x5d, 0x40, 0x9a, 0x3d, 0x4c, 0x3c, 0xe3, - 0x76, 0xf7, 0xd0, 0xc5, 0xde, 0x19, 0x31, 0x2a, 0x9a, 0x40, 0xc4, 0x54, - 0xc3, 0x54, 0xa2, 0xc9, 0x43, 0xa3, 0x1b, 0xa8, 0x4f, 0xc8, 0xe6, 0x11, - 0x9c, 0x06, 0xb0, 0x8e, 0x6a, 0xbb, 0xc0, 0x98, 0x33, 0x4c, 0x71, 0xec, - 0x8d, 0x20, 0xf6, 0x66, 0xc1, 0xf0, 0xb1, 0x1c, 0xa2, 0x29, 0xf9, 0x77, - 0x8d, 0x04, 0x81, 0x66, 0xee, 0xad, 0x05, 0x8a, 0x38, 0x9c, 0x96, 0x79, - 0x04, 0x65, 0xe2, 0x19, 0x39, 0x8a, 0xb3, 0x4c, 0xe7, 0x19, 0x39, 0xc2, - 0x12, 0x59, 0x54, 0x07, 0x77, 0x7b, 0x9b, 0x73, 0xe4, 0xaa, 0xb5, 0x0a, - 0x2f, 0x37, 0xd8, 0xba, 0x3f, 0x4d, 0x13, 0x26, 0x42, 0xdf, 0x5c, 0x16, - 0xf6, 0x94, 0x54, 0xa1, 0x9f, 0xfc, 0xb8, 0x18, 0xd0, 0xe8, 0xd9, 0x09, - 0xca, 0x27, 0x39, 0x02, 0x2b, 0x6c, 0x80, 0xeb, 0x69, 0x52, 0xd5, 0xc3, - 0x71, 0xf5, 0xb8, 0x8f, 0xb2, 0x94, 0x74, 0x96, 0x71, 0x1a, 0x52, 0x2f, - 0x39, 0x1e, 0x00, 0x86, 0x58, 0x79, 0x34, 0x9f, 0x93, 0xd7, 0x89, 0x5b, - 0x9e, 0x50, 0xff, 0xea, 0xf5, 0xed, 0x61, 0x30, 0xe7, 0x86, 0x39, 0xb8, - 0x2a, 0x82, 0x50, 0x44, 0x83, 0x32, 0x51, 0x1e, 0x5f, 0x47, 0xde, 0xab, - 0xc0, 0x3c, 0x70, 0xd4, 0x8b, 0xa9, 0x9b, 0xcb, 0x85, 0x3b, 0xd4, 0xca, - 0x15, 0x98, 0x6e, 0xd7, 0xe5, 0xc0, 0x27, 0x97, 0x00, 0x17, 0xf5, 0xac, - 0x5e, 0x7a, 0x56, 0x75, 0x21, 0x6c, 0x42, 0xde, 0x97, 0x6e, 0x50, 0x82, - 0xa2, 0x13, 0xae, 0x1d, 0x4d, 0x1e, 0x36, 0xc2, 0x3e, 0x43, 0x73, 0x5e, - 0x86, 0x9a, 0x54, 0xee, 0x53, 0xc4, 0x99, 0x93, 0xc9, 0x77, 0xef, 0xa7, - 0x90, 0x7e, 0x02, 0x88, 0x50, 0xa2, 0xf1, 0x2b, 0x69, 0x0a, 0x78, 0x84, - 0x0b, 0x78, 0x5b, 0x7a, 0x0e, 0xc8, 0xee, 0x85, 0x10, 0x13, 0x77, 0x82, - 0x3e, 0x78, 0x24, 0x17, 0xde, 0xe9, 0x6e, 0x65, 0x87, 0x87, 0xae, 0x41, - 0x10, 0x27, 0x89, 0x35, 0xc2, 0x18, 0x26, 0x89, 0x69, 0xc7, 0xe4, 0x18, - 0x17, 0xf1, 0xdc, 0x70, 0x3c, 0x86, 0xad, 0x5a, 0xbf, 0x52, 0x19, 0xc8, - 0x2c, 0x6c, 0xaf, 0xac, 0xb4, 0xd9, 0x6f, 0x4a, 0xcb, 0x6f, 0x92, 0xca, - 0x18, 0x7e, 0xcb, 0xd2, 0x41, 0x44, 0xed, 0xcb, 0xa7, 0x38, 0x6e, 0xd3, - 0x88, 0x28, 0xa7, 0xcb, 0x6b, 0x45, 0xe2, 0x68, 0x5e, 0x40, 0x5a, 0x91, - 0x11, 0x58, 0xf1, 0x1d, 0x4f, 0x9c, 0x4f, 0x78, 0xa4, 0xe3, 0xf2, 0xa5, - 0xb9, 0x0b, 0x3b, 0xbd, 0x4b, 0x37, 0x28, 0x49, 0x05, 0x9d, 0x1b, 0xbb, - 0x53, 0xd2, 0x09, 0x61, 0x9c, 0xed, 0x65, 0x3b, 0x41, 0xaa, 0xef, 0x51, - 0x90, 0xd0, 0xd5, 0x38, 0x11, 0xbb, 0x30, 0x2c, 0xd6, 0x17, 0xea, 0x46, - 0x6b, 0xc7, 0x96, 0x66, 0x1c, 0x94, 0x5a, 0x41, 0x55, 0xec, 0x8d, 0xaa, - 0xd9, 0xb3, 0xc0, 0x9c, 0x41, 0xda, 0x36, 0xb9, 0xa2, 0xcb, 0x45, 0x6e, - 0x9c, 0x61, 0xe3, 0xd8, 0x90, 0x73, 0x1f, 0x3c, 0xab, 0x75, 0xf3, 0x7d, - 0x7d, 0x12, 0x1a, 0x07, 0x80, 0xaf, 0x99, 0x2d, 0x61, 0xf6, 0xf3, 0x26, - 0x00, 0x14, 0x35, 0x99, 0x7c, 0x9e, 0x08, 0xea, 0x0d, 0x1e, 0x10, 0x76, - 0x48, 0xc3, 0xe3, 0xe0, 0xdd, 0x94, 0xbc, 0xcb, 0xcb, 0xe5, 0x33, 0x06, - 0x07, 0x2c, 0xc7, 0x8e, 0x1d, 0xea, 0x8c, 0x9e, 0xa1, 0x97, 0x5a, 0xcd, - 0xac, 0x93, 0x12, 0xa0, 0xb2, 0xd8, 0xbe, 0x4e, 0x18, 0x22, 0x86, 0x4f, - 0x4e, 0x6e, 0xdb, 0x59, 0x83, 0x7d, 0x04, 0x82, 0x25, 0x89, 0x28, 0x32, - 0x7c, 0xe7, 0x34, 0x2e, 0x25, 0x00, 0xfb, 0x95, 0xfa, 0xaa, 0x99, 0x2d, - 0x68, 0xfe, 0x7e, 0xe5, 0x23, 0xd2, 0xb0, 0x9c, 0x5b, 0xb7, 0xc4, 0x70, - 0xab, 0x20, 0x3b, 0xcb, 0x9d, 0xca, 0x4b, 0xaa, 0x9a, 0x20, 0x81, 0x7a, - 0xa2, 0xdd, 0xf7, 0xac, 0xc9, 0x3f, 0xdc, 0x48, 0x74, 0x54, 0x80, 0x7e, - 0x64, 0x28, 0x70, 0x37, 0x1c, 0x9a, 0xde, 0x33, 0x38, 0x3a, 0x43, 0x22, - 0x5e, 0x1d, 0x48, 0xe9, 0x67, 0xa3, 0x01, 0xcf, 0xce, 0x81, 0xa7, 0x81, - 0xa7, 0xa2, 0x52, 0x04, 0x12, 0xfa, 0x3d, 0xf1, 0xd5, 0x02, 0x9b, 0xaa, - 0xfe, 0x0b, 0xc0, 0x77, 0x60, 0x81, 0xb1, 0xa7, 0xde, 0xf2, 0x69, 0xf4, - 0xa9, 0x63, 0xdb, 0x80, 0x17, 0x5d, 0x0f, 0x72, 0xb9, 0x48, 0x16, 0x89, - 0x6b, 0x2d, 0x1c, 0x3a, 0x8b, 0x19, 0x18, 0x8e, 0x39, 0x81, 0xfc, 0x56, - 0x1a, 0xe2, 0xa5, 0xec, 0x1e, 0x02, 0x0d, 0x96, 0x80, 0xac, 0x3e, 0xb8, - 0x77, 0x5b, 0x1b, 0x22, 0x80, 0x3e, 0x20, 0x73, 0x18, 0x4e, 0x61, 0x38, - 0x39, 0xcc, 0x8e, 0xf7, 0x48, 0xbe, 0x32, 0x5a, 0x23, 0x5d, 0xb7, 0x6b, - 0x1c, 0xbc, 0x50, 0x09, 0xc9, 0x1f, 0xf1, 0xb3, 0x5b, 0x99, 0x55, 0xe3, - 0xcb, 0x45, 0x5c, 0xc7, 0x98, 0x55, 0x5f, 0xb7, 0x4d, 0xa6, 0x69, 0x51, - 0x1d, 0x66, 0x89, 0x68, 0x7a, 0x06, 0x48, 0xa8, 0xcf, 0x52, 0xd1, 0x87, - 0x37, 0x91, 0x9c, 0x1f, 0xaf, 0x1e, 0x06, 0x38, 0x1c, 0x28, 0x9f, 0x87, - 0x62, 0xfc, 0x79, 0x7a, 0x69, 0xf8, 0xf0, 0x5d, 0x0a, 0x80, 0xec, 0x24, - 0xbc, 0xff, 0x78, 0xe2, 0x7d, 0xf8, 0x8a, 0x2b, 0x80, 0xe4, 0x70, 0x0c, - 0xa8, 0xd1, 0x35, 0xca, 0xce, 0xb2, 0x7c, 0x74, 0x32, 0xd6, 0x80, 0xd5, - 0x23, 0x85, 0xef, 0xa3, 0x05, 0x56, 0x03, 0x38, 0x12, 0x37, 0xc1, 0xc1, - 0x1d, 0xc3, 0x33, 0x06, 0x8b, 0xc8, 0xcb, 0xd8, 0xee, 0xcd, 0xce, 0x3e, - 0xea, 0x78, 0xb1, 0x83, 0x74, 0xd1, 0x14, 0x4c, 0x54, 0x24, 0x39, 0x40, - 0xa0, 0xbe, 0xd6, 0x50, 0x0e, 0x2d, 0x8d, 0xd6, 0x76, 0x74, 0xc8, 0xdc, - 0xe0, 0x25, 0x64, 0xe3, 0x04, 0x20, 0x19, 0x4e, 0x83, 0x3e, 0x02, 0xdb, - 0x93, 0x27, 0xce, 0x9e, 0x1e, 0xe1, 0xc4, 0xa3, 0x72, 0xaa, 0x6f, 0x28, - 0x82, 0x27, 0xd9, 0x0a, 0xa3, 0x3e, 0xe2, 0x11, 0x70, 0xd7, 0x3d, 0xa9, - 0xf6, 0xe4, 0x23, 0x88, 0x3d, 0xf9, 0x99, 0x40, 0xa0, 0xfa, 0x07, 0x79, - 0x24, 0xa4, 0x6e, 0xcd, 0x09, 0x36, 0x19, 0x09, 0x4a, 0x0c, 0xb4, 0x4e, - 0x46, 0xd5, 0x6c, 0x8f, 0x05, 0xd4, 0x69, 0x77, 0x4f, 0x31, 0xd3, 0xf3, - 0x08, 0x48, 0xa6, 0x88, 0xc0, 0x35, 0x62, 0xf0, 0xb3, 0x27, 0x1f, 0xf2, - 0x18, 0x50, 0x7d, 0xdb, 0xd9, 0xd8, 0xed, 0x3f, 0x3f, 0x0a, 0xc3, 0xcf, - 0x4f, 0x04, 0xde, 0xfd, 0x3d, 0x6b, 0xf0, 0xee, 0xad, 0x2b, 0xa9, 0xb5, - 0x0f, 0x5d, 0xcf, 0x75, 0x1f, 0x4e, 0x5b, 0x98, 0xc7, 0x7e, 0x02, 0x54, - 0x0d, 0x00, 0x6d, 0x2c, 0xdb, 0x5b, 0x8c, 0xdd, 0x7b, 0x97, 0xfd, 0x22, - 0x69, 0xae, 0x03, 0x8b, 0xd4, 0x7e, 0x23, 0x60, 0x5c, 0x4b, 0xb0, 0x9c, - 0xc7, 0x29, 0x5e, 0x6e, 0x97, 0xa9, 0xa1, 0x2a, 0xba, 0xed, 0x85, 0x94, - 0x41, 0x74, 0xe0, 0x8d, 0x0e, 0x38, 0xc9, 0x6a, 0x01, 0x7d, 0x28, 0xc1, - 0x68, 0x48, 0x59, 0x5a, 0x20, 0xe8, 0xc3, 0x66, 0xa3, 0x5c, 0x64, 0x0a, - 0x0b, 0x07, 0xb9, 0x65, 0x20, 0x54, 0x0b, 0x08, 0xda, 0x03, 0xc6, 0x54, - 0x2d, 0x83, 0x8e, 0x98, 0x18, 0x55, 0xc1, 0x02, 0xd8, 0xf3, 0xe4, 0x61, - 0xe1, 0x96, 0xa7, 0xb7, 0xc8, 0x05, 0x92, 0xd3, 0xe5, 0xe5, 0xc0, 0x43, - 0xd5, 0x3c, 0xac, 0x8d, 0x8f, 0xb5, 0x00, 0x70, 0xad, 0x40, 0x54, 0xeb, - 0x20, 0x25, 0x64, 0x9b, 0x01, 0x3e, 0x6c, 0x63, 0x0a, 0xaf, 0xf8, 0x94, - 0xd3, 0xfe, 0x5a, 0x0d, 0xa0, 0x84, 0x65, 0x8b, 0xe6, 0x37, 0x24, 0x07, - 0x29, 0xad, 0x80, 0xa0, 0x48, 0x10, 0x3c, 0x48, 0x51, 0xc0, 0x8d, 0xc8, - 0xd0, 0xb1, 0x95, 0x5f, 0xd9, 0x63, 0xa7, 0x59, 0x5c, 0x50, 0xb0, 0xdc, - 0x7e, 0x26, 0xc5, 0x54, 0xbd, 0x71, 0xb9, 0x61, 0x82, 0x0e, 0x35, 0xe3, - 0x88, 0x20, 0xae, 0x3b, 0xce, 0x34, 0xe6, 0x92, 0xe4, 0xe5, 0xb6, 0x51, - 0x99, 0xd2, 0x18, 0x74, 0x74, 0xfd, 0x29, 0x64, 0x02, 0x89, 0x33, 0xce, - 0xd3, 0x1b, 0xe2, 0x25, 0x12, 0xe5, 0xe6, 0xf1, 0xb9, 0x7d, 0x34, 0x5d, - 0x2e, 0xf7, 0x81, 0xcf, 0x9c, 0x00, 0x30, 0x7d, 0xef, 0xa7, 0xc6, 0x9d, - 0x1e, 0xc2, 0xf9, 0x31, 0x61, 0xf2, 0x07, 0x82, 0x66, 0x8a, 0x8f, 0xf4, - 0xa2, 0x12, 0x59, 0xaf, 0x20, 0x23, 0x58, 0xc7, 0xc5, 0xe3, 0xd1, 0x64, - 0x32, 0x43, 0x84, 0x0b, 0x2a, 0xa3, 0x0b, 0xf0, 0x7e, 0xa1, 0x8c, 0x14, - 0x19, 0xc5, 0x75, 0x7a, 0x50, 0x2c, 0xda, 0xa8, 0x26, 0x86, 0x7c, 0x2a, - 0x64, 0xc8, 0xcd, 0x1d, 0x12, 0xb8, 0x65, 0x7b, 0x56, 0xb4, 0xfb, 0x63, - 0x04, 0x81, 0xc2, 0x67, 0x9e, 0x26, 0x2f, 0x0f, 0x09, 0xd9, 0x16, 0xae, - 0x25, 0x43, 0x55, 0xde, 0x41, 0x54, 0xac, 0x91, 0x7a, 0x8b, 0x69, 0x48, - 0x09, 0xa6, 0xb0, 0x72, 0xb1, 0x19, 0x1b, 0xa0, 0x74, 0x09, 0xfb, 0xdd, - 0x2a, 0x34, 0x0f, 0xd5, 0x47, 0xae, 0x9a, 0x15, 0x1e, 0x16, 0x2c, 0x36, - 0x79, 0x61, 0x31, 0x7a, 0xee, 0xcc, 0x01, 0x4d, 0x99, 0x48, 0x5c, 0xd0, - 0x91, 0xd8, 0x67, 0x48, 0x86, 0x25, 0x97, 0x59, 0x70, 0x51, 0x21, 0xbd, - 0xe2, 0x68, 0xa3, 0x8f, 0xbe, 0xcb, 0x0b, 0x52, 0x91, 0xfe, 0xe9, 0x85, - 0xb8, 0x20, 0x1f, 0x30, 0x92, 0x2d, 0x3c, 0x02, 0x6e, 0xc3, 0x22, 0x4d, - 0x27, 0x1d, 0x78, 0x5d, 0x2d, 0x3c, 0x0f, 0x7f, 0xce, 0xfd, 0xca, 0x74, - 0x02, 0x3a, 0x42, 0x1b, 0xb1, 0x5e, 0x54, 0x74, 0x70, 0xd7, 0x08, 0x57, - 0x60, 0xca, 0xc4, 0xe5, 0x11, 0x23, 0x6f, 0xd6, 0x60, 0xa3, 0x99, 0x32, - 0xc7, 0x9c, 0xca, 0x61, 0xa3, 0x90, 0xe9, 0x4e, 0x21, 0x2a, 0x54, 0xd9, - 0x89, 0x9f, 0xca, 0x63, 0x19, 0x44, 0x75, 0x32, 0x20, 0xd0, 0x41, 0xe8, - 0x6b, 0xab, 0xc5, 0x8f, 0x43, 0x97, 0x69, 0x93, 0xc7, 0xd1, 0x7a, 0x18, - 0x62, 0x21, 0x81, 0x08, 0x95, 0x29, 0xac, 0x98, 0x93, 0x5b, 0xf1, 0x7d, - 0x9b, 0x82, 0x2d, 0x8d, 0x4c, 0x3f, 0x74, 0x9d, 0x91, 0x01, 0x06, 0x17, - 0xb3, 0x83, 0x32, 0xdf, 0xa2, 0x89, 0x21, 0xca, 0x27, 0xf4, 0x52, 0x47, - 0x4c, 0x4f, 0x67, 0x9d, 0x02, 0x01, 0x95, 0xc4, 0x0e, 0xa4, 0xc8, 0xa5, - 0xca, 0x92, 0x8e, 0xf1, 0x19, 0xf0, 0x6a, 0x3f, 0xdf, 0x70, 0x09, 0x27, - 0xa8, 0xb5, 0x80, 0x4c, 0x03, 0x43, 0x5e, 0xaf, 0xe7, 0xdb, 0x71, 0xc7, - 0x3a, 0x16, 0x6e, 0xad, 0xc7, 0x29, 0x51, 0xdc, 0xaa, 0x9d, 0x74, 0xbd, - 0x2f, 0x31, 0x9b, 0xd1, 0xb2, 0xdc, 0xe8, 0x33, 0x57, 0x56, 0x0a, 0x9b, - 0x32, 0x35, 0xcb, 0x46, 0x42, 0x16, 0xb0, 0xe0, 0x68, 0xb3, 0x5c, 0xd2, - 0x22, 0xa5, 0x51, 0x2b, 0x13, 0x6f, 0x2e, 0x25, 0x94, 0x38, 0xbf, 0x5c, - 0x96, 0x18, 0xb3, 0x00, 0xf9, 0xda, 0x65, 0x59, 0xc6, 0x8e, 0xf8, 0x25, - 0x71, 0x76, 0x4c, 0xe4, 0x6d, 0xe8, 0xe2, 0x7d, 0xa0, 0x83, 0x5e, 0x2e, - 0x96, 0xc4, 0x23, 0x35, 0xa2, 0x4a, 0x6f, 0x83, 0x4f, 0x2f, 0xa9, 0x96, - 0x57, 0xca, 0xeb, 0x45, 0x8b, 0x12, 0x2a, 0xff, 0xdc, 0x73, 0x31, 0xb5, - 0xaa, 0xe0, 0x2d, 0x4f, 0x1b, 0xe8, 0x10, 0x44, 0xdd, 0xd1, 0x82, 0x31, - 0x44, 0x67, 0x68, 0x50, 0x61, 0x52, 0xf3, 0x06, 0x12, 0x21, 0xc1, 0x9a, - 0xfc, 0x20, 0x67, 0x4f, 0xab, 0xcb, 0x71, 0x8f, 0x35, 0xa0, 0xb2, 0x6c, - 0xb8, 0x41, 0xa3, 0xf8, 0x99, 0x61, 0xa3, 0x6b, 0x66, 0xc1, 0xb0, 0x0e, - 0x98, 0xd3, 0x14, 0x82, 0x5d, 0x11, 0x65, 0x49, 0x58, 0x0e, 0x6f, 0xa8, - 0x16, 0x0c, 0xe8, 0x0b, 0xf6, 0xf0, 0x95, 0x95, 0x45, 0x43, 0x07, 0x55, - 0xd6, 0xc2, 0x8d, 0x26, 0x12, 0xf8, 0x72, 0xb6, 0x02, 0x32, 0xf2, 0x8a, - 0x9d, 0xab, 0x0e, 0x8f, 0x8e, 0xd5, 0xd2, 0x94, 0xd7, 0x9d, 0xa7, 0xbc, - 0x00, 0x78, 0x9f, 0x24, 0x50, 0x96, 0x46, 0x98, 0x38, 0x3b, 0xaa, 0xf2, - 0x0a, 0x49, 0x5d, 0x87, 0x61, 0x44, 0x2d, 0xb6, 0x51, 0xef, 0x6e, 0x80, - 0xde, 0x6e, 0x2e, 0xda, 0x0a, 0xd5, 0x7f, 0xb7, 0x10, 0xa1, 0xd4, 0x3a, - 0x32, 0x80, 0x0f, 0x7f, 0x0d, 0x46, 0x83, 0x52, 0x5e, 0x5a, 0xd1, 0x00, - 0xe0, 0xd0, 0xc4, 0xc0, 0xe6, 0x7b, 0xe5, 0x80, 0x56, 0x80, 0x7f, 0x84, - 0x5a, 0x98, 0xc3, 0x91, 0x81, 0x29, 0x10, 0x0b, 0x27, 0x10, 0x27, 0xd4, - 0x86, 0xbc, 0x51, 0x25, 0x40, 0xae, 0x6a, 0x98, 0x4b, 0x32, 0x28, 0x5c, - 0xb3, 0x1a, 0xe8, 0x32, 0x7b, 0x84, 0xe6, 0x6d, 0xf2, 0x2f, 0xd4, 0x5e, - 0x46, 0x9f, 0x8c, 0x10, 0x46, 0xbb, 0xaa, 0xa2, 0x54, 0x08, 0x29, 0x1f, - 0x53, 0xca, 0xa5, 0x73, 0x2f, 0x0a, 0xb9, 0xf7, 0xeb, 0x85, 0x4c, 0x8b, - 0x42, 0x5d, 0x14, 0x51, 0x3c, 0xa0, 0x4c, 0xa2, 0xfc, 0xc1, 0x92, 0x52, - 0xf1, 0xee, 0xae, 0xb4, 0x7f, 0xc3, 0xa8, 0x56, 0xd7, 0x01, 0x92, 0x2e, - 0x92, 0x09, 0x58, 0x3b, 0xf4, 0xe4, 0x6d, 0x97, 0xae, 0xc7, 0x98, 0x1c, - 0x81, 0x66, 0xe7, 0xef, 0x50, 0xdf, 0xf8, 0x38, 0x01, 0x51, 0x2b, 0x6b, - 0x64, 0x67, 0x63, 0x28, 0x54, 0xee, 0xbe, 0x32, 0xfe, 0x8d, 0x52, 0x2d, - 0x49, 0x7f, 0x46, 0x96, 0x0d, 0x09, 0xb6, 0x36, 0x18, 0x09, 0x49, 0x36, - 0x15, 0xbc, 0x11, 0x0b, 0x75, 0xa2, 0xba, 0x48, 0x8b, 0xf2, 0x71, 0x45, - 0xab, 0xd0, 0x46, 0x7e, 0xa9, 0x7e, 0x99, 0xa6, 0x78, 0x3f, 0xf5, 0x78, - 0xcc, 0x2c, 0xf3, 0xac, 0x9f, 0x95, 0x42, 0xfb, 0x24, 0x6c, 0x8d, 0xbd, - 0x29, 0x04, 0xa1, 0xf0, 0x82, 0x50, 0x68, 0x4d, 0xca, 0x65, 0x42, 0x35, - 0x80, 0x75, 0x54, 0x83, 0x55, 0xb1, 0x53, 0x28, 0x40, 0x11, 0xb2, 0x52, - 0x93, 0xb8, 0x67, 0x68, 0xd3, 0x8d, 0x4c, 0x85, 0x9d, 0x84, 0x76, 0x06, - 0x21, 0x0c, 0xc2, 0x9e, 0xa9, 0x2e, 0x1e, 0x31, 0xeb, 0x32, 0x8f, 0x7b, - 0x0a, 0x43, 0x05, 0x5b, 0x0a, 0x81, 0x17, 0xa9, 0x6c, 0xca, 0x71, 0xa2, - 0x97, 0x6f, 0x67, 0xeb, 0xd3, 0xce, 0x61, 0x47, 0xed, 0x91, 0xd7, 0x85, - 0xcb, 0x00, 0x9a, 0x04, 0x11, 0xb8, 0x8f, 0xdb, 0x9d, 0x0d, 0x70, 0xdd, - 0x9a, 0xd2, 0x8d, 0xcc, 0xb7, 0x20, 0x6c, 0x9b, 0x0f, 0x4b, 0x36, 0x9c, - 0x15, 0x7a, 0x09, 0xbc, 0x55, 0x69, 0xd8, 0x1a, 0x6e, 0x44, 0x2f, 0x37, - 0xc4, 0x09, 0x40, 0xd9, 0xe2, 0xce, 0x96, 0xc2, 0x19, 0x5a, 0x51, 0x07, - 0xb5, 0xe9, 0x2e, 0x83, 0xa2, 0x0f, 0x9b, 0xdb, 0xd8, 0xb8, 0x3a, 0x5c, - 0x78, 0x0e, 0xd1, 0xbf, 0xa8, 0xc9, 0xdb, 0x9a, 0x6c, 0xb1, 0x2f, 0xdb, - 0x3e, 0xc9, 0x77, 0xd7, 0x59, 0x80, 0xdb, 0xa0, 0x5b, 0xcd, 0x1d, 0x85, - 0xd6, 0x37, 0xb4, 0x42, 0xde, 0x49, 0x2f, 0x54, 0x80, 0x54, 0x36, 0xb4, - 0x2e, 0xd1, 0x56, 0x62, 0x23, 0xa2, 0x9c, 0x1b, 0x11, 0x45, 0x1d, 0xa5, - 0xe4, 0xf2, 0x25, 0x5d, 0xe4, 0x3d, 0x3a, 0x36, 0x93, 0x74, 0x78, 0x93, - 0xd0, 0x01, 0x4d, 0xd5, 0xe3, 0x5c, 0x3b, 0x03, 0xd7, 0x04, 0xa8, 0x30, - 0x50, 0xcc, 0x0b, 0x53, 0x59, 0x2b, 0x35, 0xd1, 0x22, 0xb9, 0x55, 0x9e, - 0x11, 0x22, 0x5e, 0x34, 0x0a, 0x23, 0xe4, 0x74, 0xa9, 0xb8, 0x30, 0x38, - 0xea, 0xc4, 0xec, 0xe4, 0x52, 0xa1, 0xc0, 0x2a, 0xf0, 0x3b, 0x85, 0x36, - 0x45, 0x59, 0x80, 0x81, 0x98, 0x48, 0x3b, 0x66, 0x9b, 0x7e, 0xc4, 0x1a, - 0x84, 0x11, 0xd9, 0xef, 0x93, 0x54, 0x04, 0x06, 0x87, 0xe2, 0x4c, 0x91, - 0xf8, 0xa9, 0x01, 0xdc, 0x5a, 0x69, 0xf4, 0xe7, 0xc7, 0x53, 0x0e, 0x13, - 0x22, 0x10, 0x9c, 0xef, 0x7f, 0xa3, 0x17, 0xe7, 0x88, 0xac, 0xb3, 0xce, - 0x3d, 0xa5, 0xae, 0xcc, 0x95, 0x5d, 0x03, 0xbc, 0x9d, 0x32, 0x25, 0x43, - 0xde, 0xb6, 0xe0, 0xe4, 0x3b, 0x22, 0xb9, 0x7b, 0x07, 0x4d, 0xaa, 0xc2, - 0x47, 0xe9, 0x07, 0xa8, 0x94, 0xba, 0x91, 0xd1, 0x29, 0xbd, 0xd5, 0x59, - 0x3a, 0xca, 0x6e, 0x29, 0xf1, 0x96, 0x51, 0x1f, 0x85, 0x58, 0x5c, 0x79, - 0x47, 0x99, 0x4d, 0x68, 0xee, 0xfa, 0xbe, 0x8c, 0x14, 0xe7, 0x04, 0xe8, - 0xbd, 0xb2, 0x4f, 0xda, 0x40, 0x2f, 0x69, 0xb8, 0x2f, 0xe7, 0xf7, 0xcb, - 0x99, 0x25, 0x70, 0xe7, 0x71, 0xa4, 0xc2, 0xab, 0xcc, 0x8d, 0x78, 0xc1, - 0xdd, 0xab, 0x86, 0x1e, 0xbb, 0x0f, 0x7e, 0xf6, 0xfa, 0x90, 0x9a, 0x0a, - 0xf3, 0xdd, 0x51, 0x3a, 0x61, 0xee, 0x58, 0xe6, 0x5d, 0x75, 0x49, 0x58, - 0x83, 0x55, 0xea, 0xe0, 0xdc, 0xa0, 0x1d, 0x3c, 0xdc, 0xed, 0xa7, 0xd6, - 0x62, 0xa7, 0xbf, 0x2a, 0x9a, 0x7b, 0xcb, 0xfe, 0xb5, 0xa1, 0x97, 0xe7, - 0xc2, 0x6c, 0xd9, 0xdf, 0xba, 0x18, 0xd6, 0x10, 0xce, 0x28, 0xa3, 0xc6, - 0xbe, 0xfd, 0x86, 0x0c, 0x81, 0x46, 0x40, 0xef, 0xde, 0x7e, 0x53, 0x41, - 0x79, 0xab, 0x6b, 0xfc, 0xa0, 0xd7, 0xee, 0x9b, 0x57, 0xc1, 0xce, 0x1d, - 0x7e, 0xcf, 0x2f, 0x55, 0x53, 0xbe, 0x4f, 0x4f, 0xd6, 0x4f, 0x12, 0xef, - 0x31, 0x51, 0x8b, 0x62, 0xaa, 0xd6, 0x1a, 0xb0, 0xbe, 0x42, 0x8b, 0x31, - 0xb0, 0xf9, 0xf8, 0x40, 0xc5, 0x1b, 0x9c, 0xcf, 0x6b, 0x61, 0x89, 0xf9, - 0xd0, 0x11, 0x2f, 0x13, 0x9f, 0xb3, 0x4c, 0x7c, 0xb8, 0x79, 0x42, 0xf2, - 0x38, 0xbd, 0x9c, 0xdc, 0x98, 0xda, 0xd9, 0xcf, 0xe4, 0x66, 0xd5, 0x95, - 0x7f, 0x54, 0x06, 0x3f, 0xbc, 0x37, 0xd0, 0x88, 0xcc, 0x6e, 0x4f, 0xd7, - 0x5d, 0x79, 0x91, 0x84, 0x81, 0x16, 0x5e, 0x28, 0x51, 0x3f, 0x9f, 0x42, - 0xf3, 0x87, 0xba, 0xd9, 0x0f, 0x45, 0x58, 0x71, 0x55, 0x4f, 0xf9, 0xd5, - 0x92, 0x91, 0x51, 0xad, 0xa8, 0x18, 0xf0, 0x09, 0xf8, 0xef, 0x9d, 0x63, - 0x79, 0x4d, 0x22, 0x7f, 0x7d, 0x54, 0xf8, 0xcb, 0xb3, 0x0c, 0xe5, 0xd7, - 0x23, 0xfa, 0xdb, 0xc7, 0xa2, 0xbf, 0xf2, 0xef, 0xd7, 0x27, 0xe5, 0xbf, - 0xbe, 0x25, 0x53, 0x7e, 0x7d, 0xbe, 0x03, 0xa7, 0x0f, 0x3a, 0x78, 0xc4, - 0x26, 0x14, 0x90, 0x83, 0x7b, 0x4c, 0x8f, 0x8e, 0x9f, 0xca, 0x77, 0x9d, - 0x0d, 0x3d, 0xdd, 0xe2, 0xd9, 0xc7, 0x1f, 0xac, 0xd2, 0x90, 0x5f, 0x2a, - 0xc7, 0x96, 0x96, 0x08, 0xf1, 0xd7, 0x34, 0xac, 0x73, 0x35, 0xeb, 0xe8, - 0x2a, 0xeb, 0xc0, 0x4d, 0xe0, 0x7a, 0xb9, 0xf3, 0xb3, 0xc6, 0xa5, 0x9f, - 0x15, 0x97, 0x6c, 0x26, 0x51, 0xcc, 0x3d, 0x95, 0x6d, 0x50, 0x39, 0x10, - 0x01, 0xa8, 0x4e, 0xf4, 0xf5, 0x29, 0x35, 0xeb, 0x8d, 0x47, 0xc7, 0x2a, - 0x2e, 0x8e, 0x4b, 0x75, 0xc8, 0xa7, 0x1b, 0x1d, 0x6e, 0xb8, 0x7e, 0x7f, - 0x73, 0x6e, 0xd3, 0xdd, 0xea, 0x4b, 0x72, 0x1e, 0x2d, 0x2b, 0xc0, 0xe1, - 0x97, 0x1d, 0x3b, 0xc3, 0x1b, 0xda, 0x99, 0x1c, 0x17, 0xfe, 0x70, 0x4e, - 0xcf, 0x29, 0x76, 0xc3, 0x7c, 0x70, 0x48, 0x50, 0xf2, 0x17, 0x84, 0x3a, - 0x2d, 0xc0, 0x4b, 0x3a, 0x7d, 0x11, 0x91, 0x97, 0x49, 0x2c, 0x4e, 0x5b, - 0x50, 0xe6, 0x54, 0xbd, 0x6e, 0xe9, 0xe1, 0x82, 0x09, 0x3c, 0x47, 0x0f, - 0x20, 0x63, 0x8d, 0xcf, 0x14, 0x18, 0xa2, 0xe6, 0x88, 0xfb, 0x72, 0x41, - 0x8b, 0x62, 0x3e, 0x6e, 0x85, 0xc6, 0xc6, 0x23, 0xee, 0x72, 0x26, 0x73, - 0x46, 0x68, 0x3c, 0x74, 0x4b, 0xf9, 0x1f, 0x66, 0xeb, 0x4c, 0x96, 0x2b, - 0x87, 0x15, 0x4e, 0x06, 0x9e, 0x3e, 0xd9, 0x8c, 0x7a, 0xc4, 0xcb, 0x5e, - 0x8b, 0x27, 0x82, 0xf3, 0xc5, 0x71, 0x6d, 0x1d, 0x74, 0x03, 0xca, 0xad, - 0xb8, 0x88, 0xaf, 0x0e, 0x12, 0x05, 0x05, 0xf5, 0x38, 0xe6, 0x44, 0x4f, - 0x33, 0x43, 0x2f, 0x5f, 0xf3, 0x82, 0xd7, 0xbe, 0x47, 0xc1, 0x1c, 0xf1, - 0xcf, 0xcb, 0xd9, 0x6c, 0x82, 0x5b, 0x07, 0x37, 0xbc, 0xaa, 0xd2, 0x03, - 0x6e, 0x39, 0x76, 0x31, 0xc9, 0x35, 0x8e, 0x6e, 0x3b, 0x0c, 0x1f, 0x97, - 0xb8, 0xa6, 0x32, 0xf0, 0xf9, 0x81, 0xe3, 0x62, 0x43, 0x95, 0xbe, 0xbf, - 0x92, 0x54, 0x8e, 0x10, 0x00, 0x66, 0xf9, 0xf9, 0x92, 0xe5, 0x97, 0x1f, - 0xa3, 0xac, 0xc3, 0x7c, 0x53, 0x56, 0xcc, 0xb7, 0xc9, 0xdd, 0xa2, 0xf6, - 0xa2, 0xd2, 0xb9, 0xf0, 0x71, 0x1b, 0x07, 0xfe, 0xf9, 0x52, 0x1c, 0x89, - 0x37, 0x74, 0xcd, 0x4c, 0x83, 0x45, 0x9a, 0x9e, 0x4e, 0x4b, 0x34, 0x45, - 0xf5, 0xdc, 0x34, 0x04, 0xec, 0xfe, 0x8c, 0x95, 0xf2, 0xfd, 0x40, 0xcc, - 0x28, 0xc9, 0xd0, 0x19, 0x75, 0xb2, 0xb8, 0x8d, 0x25, 0x3f, 0x3c, 0x50, - 0x9b, 0x7f, 0x61, 0x6e, 0x6d, 0xcf, 0x9e, 0xc0, 0x67, 0x51, 0xe3, 0x33, - 0xbd, 0xa4, 0x93, 0x93, 0xa4, 0x9c, 0xc1, 0xb8, 0x4e, 0x80, 0x1d, 0x80, - 0xd6, 0x62, 0xeb, 0xe0, 0x63, 0x28, 0x02, 0xa5, 0xdc, 0xe6, 0x2b, 0x1f, - 0x44, 0x87, 0x28, 0xaf, 0x97, 0x20, 0x48, 0x41, 0x6b, 0xa0, 0xee, 0xf3, - 0xa6, 0xab, 0x38, 0x78, 0x59, 0x13, 0x06, 0x3e, 0x0b, 0xed, 0x34, 0xbe, - 0xb3, 0x2c, 0xd0, 0xb3, 0x4b, 0xa3, 0x18, 0xa3, 0x9f, 0xbd, 0x6e, 0x34, - 0xae, 0xcb, 0xcc, 0x0d, 0xbc, 0x79, 0x31, 0x09, 0xde, 0x6b, 0x0f, 0x87, - 0xdf, 0x1c, 0x66, 0x81, 0xca, 0xe8, 0x7b, 0x57, 0x4b, 0xa4, 0x5a, 0xf3, - 0xf1, 0xb6, 0xe7, 0xb3, 0x48, 0xed, 0xe1, 0xf9, 0xa5, 0xa5, 0x43, 0x5f, - 0x8d, 0x0c, 0xa2, 0x5e, 0x98, 0xbf, 0x64, 0xbf, 0x71, 0xe4, 0xa1, 0x6a, - 0x67, 0xd1, 0x48, 0x0e, 0x3a, 0x39, 0xf1, 0xf4, 0x33, 0x94, 0x87, 0x08, - 0xe4, 0x37, 0x12, 0xf3, 0x9b, 0xa7, 0x53, 0x4b, 0x8d, 0x71, 0xd5, 0xc1, - 0xf8, 0x1a, 0x9b, 0x8e, 0x3a, 0x7c, 0x0a, 0x35, 0x2e, 0xdf, 0x20, 0x56, - 0x3f, 0x00, 0xf8, 0x53, 0x29, 0x34, 0x54, 0x79, 0x92, 0xbd, 0x57, 0x13, - 0x70, 0xec, 0xa4, 0x80, 0xb8, 0x71, 0x5e, 0x79, 0xc0, 0xbd, 0x38, 0xda, - 0xda, 0x8e, 0x85, 0x35, 0xc0, 0x26, 0xef, 0xc6, 0x8f, 0x1f, 0xac, 0x0c, - 0xac, 0xc4, 0x4e, 0xc3, 0xeb, 0xdc, 0x0b, 0x27, 0xf7, 0x48, 0x0e, 0x28, - 0x2d, 0x0c, 0xa4, 0xfb, 0x7f, 0xe3, 0xb6, 0x60, 0xd0, 0x1f, 0xae, 0xc9, - 0x04, 0x0a, 0xdd, 0xee, 0x62, 0xf1, 0x00, 0xbd, 0x34, 0x43, 0x06, 0xf2, - 0xd5, 0x79, 0x40, 0xac, 0xa2, 0x73, 0x5c, 0x07, 0x06, 0x7b, 0x14, 0xa0, - 0x7e, 0xab, 0x2c, 0x61, 0x9c, 0x71, 0x22, 0x93, 0x17, 0x25, 0x84, 0x7b, - 0xb8, 0x35, 0x2d, 0x9b, 0xd4, 0x14, 0x1b, 0xd8, 0x44, 0xbc, 0x5e, 0x57, - 0x48, 0x53, 0x6b, 0xc7, 0xe8, 0x7a, 0x09, 0xe3, 0xb2, 0x5c, 0x31, 0xbb, - 0x6e, 0xcb, 0x25, 0xe3, 0x4d, 0x43, 0x1a, 0x3c, 0xa1, 0xb0, 0xe2, 0x71, - 0x4d, 0x91, 0x1e, 0x96, 0x2e, 0x00, 0xe0, 0xf8, 0xe1, 0xe8, 0x9a, 0x2d, - 0xb8, 0xf3, 0x2f, 0xa8, 0xf7, 0x55, 0x89, 0x33, 0x1f, 0x9b, 0xa2, 0xd1, - 0x77, 0x29, 0x2a, 0x02, 0x46, 0x7c, 0x47, 0x91, 0xd8, 0xaf, 0x5e, 0xae, - 0x7e, 0x46, 0xc9, 0x51, 0xcc, 0x67, 0xab, 0x6f, 0x27, 0x83, 0xc6, 0x57, - 0xed, 0x07, 0x54, 0x9c, 0xdc, 0x75, 0xe2, 0x79, 0x96, 0xbe, 0x3d, 0xa8, - 0x8f, 0x99, 0x01, 0x7a, 0xbd, 0xf8, 0x61, 0xd2, 0x2d, 0x4d, 0x35, 0xcd, - 0x1b, 0xe6, 0xc5, 0x4f, 0xec, 0x29, 0x80, 0x55, 0xde, 0x6c, 0x67, 0xc2, - 0xf8, 0x95, 0xaf, 0x00, 0xdb, 0x46, 0x17, 0xde, 0x54, 0x04, 0x93, 0x54, - 0x5a, 0xd2, 0xb5, 0xfb, 0x02, 0x4a, 0xf9, 0xb7, 0x6a, 0x89, 0xd1, 0x4d, - 0xa4, 0xf1, 0xfb, 0xc7, 0x8b, 0x96, 0x1a, 0x75, 0x10, 0x69, 0xfb, 0x02, - 0x7e, 0x75, 0x01, 0x2d, 0x50, 0xda, 0xfb, 0xc4, 0xe5, 0x81, 0xba, 0xb3, - 0xcd, 0x54, 0x61, 0x17, 0xaf, 0x02, 0xf2, 0x3a, 0x95, 0x6f, 0x7d, 0x37, - 0x1f, 0x87, 0xd0, 0xfe, 0x30, 0xd5, 0x09, 0x59, 0xa6, 0x75, 0x86, 0x00, - 0x52, 0x13, 0xf0, 0x7b, 0x44, 0x3a, 0x94, 0xf1, 0xfb, 0xeb, 0x95, 0xa7, - 0x45, 0xc8, 0x2f, 0x9d, 0x74, 0xa8, 0x10, 0x02, 0x47, 0x01, 0xc9, 0xf7, - 0x58, 0xfe, 0x71, 0xd8, 0x8d, 0x78, 0xc1, 0xca, 0x71, 0x37, 0x72, 0xcd, - 0x9a, 0xae, 0x6b, 0x6a, 0x0d, 0xf5, 0xa1, 0x11, 0x1b, 0xe0, 0xa6, 0xe5, - 0x44, 0xc0, 0x0f, 0x57, 0x2d, 0x0d, 0x3d, 0x92, 0x93, 0x68, 0x0e, 0x80, - 0x35, 0xfa, 0x23, 0x54, 0x1f, 0x05, 0xa4, 0xb1, 0x3c, 0xe1, 0x67, 0xe8, - 0xb6, 0x23, 0x00, 0xe3, 0xc3, 0xc3, 0x44, 0xf9, 0x4a, 0x23, 0x53, 0x10, - 0x86, 0xda, 0x47, 0x16, 0xfa, 0x86, 0x03, 0xee, 0x9b, 0x23, 0xb7, 0x85, - 0x17, 0x38, 0x7a, 0x09, 0x37, 0xae, 0xa3, 0x2a, 0x35, 0xb2, 0x23, 0xf5, - 0xec, 0xa0, 0xb5, 0xc7, 0xa0, 0x68, 0x1a, 0x75, 0xa3, 0x42, 0xda, 0x89, - 0x01, 0xa7, 0xda, 0x89, 0xee, 0x6b, 0x0c, 0xaa, 0x22, 0x42, 0xa8, 0xe6, - 0x0d, 0xb0, 0x05, 0x7c, 0xfa, 0xa5, 0x31, 0x84, 0x11, 0x0c, 0x83, 0x11, - 0xd1, 0xc7, 0xa6, 0xe1, 0x46, 0x9e, 0x5c, 0xcd, 0xba, 0xc4, 0x36, 0xe0, - 0xd1, 0x61, 0x38, 0x29, 0x26, 0x9c, 0x62, 0x5e, 0xcc, 0x36, 0xcc, 0x9e, - 0xba, 0x4e, 0x9f, 0xaa, 0x55, 0xbf, 0x61, 0xdb, 0xa8, 0xaf, 0xe9, 0x56, - 0x17, 0x82, 0xaf, 0xee, 0x96, 0x07, 0xcd, 0x2b, 0xe5, 0x39, 0xc0, 0xc9, - 0xe7, 0xc5, 0xbe, 0x86, 0xff, 0xe5, 0x60, 0x80, 0x1b, 0x3e, 0x50, 0xfb, - 0xd6, 0x94, 0x31, 0x0b, 0xc3, 0x57, 0xa8, 0x70, 0x5e, 0xcd, 0x97, 0xd3, - 0xd5, 0x25, 0xe5, 0xa2, 0xaf, 0x9a, 0x28, 0x8a, 0xea, 0x03, 0x6b, 0x27, - 0x44, 0x7d, 0x15, 0x53, 0xef, 0x44, 0x8c, 0x86, 0x97, 0x9b, 0x0f, 0x29, - 0x6c, 0x34, 0xac, 0xe0, 0x82, 0x36, 0x4f, 0xa9, 0xf3, 0xe6, 0x0e, 0xc3, - 0x5c, 0x56, 0xe2, 0x34, 0xc6, 0x94, 0xed, 0x45, 0x87, 0xb9, 0x96, 0xc0, - 0xa5, 0x04, 0xe1, 0x30, 0xdc, 0xbe, 0xfa, 0xce, 0xae, 0x12, 0x61, 0x2e, - 0xd1, 0xa3, 0x59, 0x83, 0x85, 0xf5, 0x2f, 0x50, 0xed, 0xe3, 0x11, 0x29, - 0x75, 0x0d, 0xdd, 0xa3, 0x56, 0x03, 0x7b, 0x93, 0x67, 0xd0, 0xcb, 0x75, - 0x41, 0x37, 0x37, 0xfc, 0x38, 0x52, 0xf5, 0x30, 0x84, 0x0b, 0x28, 0x9b, - 0x43, 0x55, 0x9f, 0xc2, 0xdb, 0x5b, 0xaa, 0xdb, 0xf1, 0xe8, 0x14, 0x74, - 0x6d, 0x3f, 0xfc, 0x7c, 0x83, 0xa2, 0xcb, 0xcd, 0x40, 0x39, 0x17, 0x73, - 0x30, 0x49, 0xcf, 0x6a, 0x63, 0x26, 0xc0, 0x7d, 0xfe, 0xea, 0xa7, 0x3d, - 0xd9, 0x41, 0x5a, 0x68, 0x28, 0x51, 0xd4, 0x4c, 0x87, 0x54, 0x07, 0x80, - 0xc2, 0xa3, 0x2a, 0x55, 0xac, 0x8a, 0x92, 0x6a, 0x28, 0x56, 0xd8, 0xbb, - 0x15, 0xee, 0x07, 0x93, 0xb0, 0xf5, 0xe1, 0xeb, 0x1d, 0x8a, 0x79, 0x1e, - 0x43, 0x4b, 0x75, 0xb0, 0x84, 0xb3, 0xaf, 0x3e, 0xe4, 0x28, 0x2f, 0xff, - 0xe2, 0x07, 0x2a, 0x89, 0xbc, 0xa8, 0x14, 0x5e, 0x0a, 0x80, 0x7b, 0x33, - 0xe8, 0x08, 0x0f, 0x45, 0xc4, 0x79, 0x31, 0x08, 0x98, 0x5b, 0xa1, 0x1e, - 0x85, 0x0a, 0xef, 0xfa, 0x32, 0xe4, 0x89, 0x66, 0x54, 0x8f, 0x58, 0x12, - 0xc7, 0xe1, 0x0f, 0x62, 0xff, 0xbe, 0x5d, 0xf4, 0x38, 0xd6, 0x3f, 0x9f, - 0x8a, 0x14, 0x56, 0xb0, 0xe6, 0xc2, 0xd3, 0x6a, 0xd8, 0x2a, 0x7a, 0x0e, - 0x6e, 0xb7, 0xfc, 0x68, 0x58, 0x6e, 0x48, 0xb9, 0x31, 0x5f, 0x3f, 0x2f, - 0xbc, 0xe2, 0x48, 0x34, 0x1e, 0xf3, 0x74, 0x56, 0xcd, 0x22, 0x61, 0xeb, - 0xba, 0x25, 0x68, 0xc8, 0xcc, 0x88, 0xc3, 0x7c, 0x31, 0xf0, 0xba, 0xa4, - 0x7d, 0xd6, 0xda, 0xa4, 0x34, 0x6a, 0x7d, 0x0e, 0x8f, 0x93, 0x75, 0x11, - 0xfd, 0x93, 0xe1, 0x62, 0xc5, 0xc9, 0x1e, 0x9d, 0x91, 0x44, 0x95, 0x33, - 0x7c, 0xd7, 0x47, 0xcc, 0xee, 0xa1, 0xf1, 0xc0, 0x5c, 0xc3, 0xd2, 0x38, - 0xd5, 0xbc, 0x40, 0x37, 0xfb, 0x4d, 0x4e, 0x46, 0x51, 0x55, 0x3e, 0x00, - 0x65, 0x0f, 0x9d, 0x2a, 0x1c, 0x01, 0xa8, 0xb9, 0x2c, 0x45, 0xdd, 0xce, - 0x29, 0x66, 0x03, 0x38, 0x6b, 0xb8, 0xcc, 0x6d, 0x8e, 0xea, 0x3b, 0x16, - 0xa4, 0xee, 0x8a, 0x36, 0x24, 0x08, 0x28, 0x2d, 0x0f, 0x24, 0xc1, 0x03, - 0xef, 0x54, 0x4c, 0xd5, 0x4d, 0x94, 0x40, 0x75, 0x50, 0x42, 0x94, 0xd9, - 0x06, 0xf8, 0xb9, 0x06, 0x96, 0x14, 0x43, 0x2d, 0xf4, 0x93, 0xcd, 0xbe, - 0xd7, 0x47, 0x1d, 0x2a, 0xd6, 0x65, 0x8b, 0x41, 0x9f, 0x1e, 0x5c, 0xe0, - 0xde, 0x68, 0x14, 0x49, 0xea, 0xc5, 0x88, 0x0e, 0x64, 0x98, 0x1d, 0x34, - 0x7d, 0x78, 0x0e, 0x4f, 0x82, 0x0f, 0x15, 0x5d, 0xd3, 0x00, 0xe0, 0x42, - 0x73, 0x55, 0xa3, 0x4b, 0x53, 0x15, 0xc5, 0x8f, 0x8f, 0x4c, 0x0d, 0x84, - 0x1f, 0x9f, 0x45, 0x23, 0x4a, 0x03, 0x2e, 0xdb, 0x01, 0x18, 0xcd, 0xb0, - 0x2f, 0xc5, 0xd4, 0xfd, 0x9e, 0xb8, 0x7f, 0x24, 0xe0, 0xa5, 0x7c, 0xd7, - 0x79, 0x11, 0x50, 0x26, 0x9c, 0x82, 0xc9, 0x0b, 0xc6, 0x4d, 0x75, 0x8b, - 0x12, 0x11, 0xaf, 0xfb, 0xbf, 0xb4, 0x8d, 0xcb, 0x7b, 0xab, 0x62, 0xb5, - 0x4f, 0x07, 0x03, 0x45, 0xea, 0x0b, 0x1a, 0xfb, 0x8c, 0x5d, 0x7e, 0x23, - 0xfc, 0xa0, 0x99, 0xe0, 0xbe, 0xa4, 0xe8, 0x44, 0x76, 0xbf, 0xbb, 0xde, - 0x41, 0xd7, 0xa5, 0x55, 0x36, 0xa3, 0x2e, 0x99, 0x01, 0x1a, 0xa9, 0x68, - 0xf0, 0xd2, 0xc7, 0x1a, 0xb7, 0xfa, 0x2e, 0x04, 0x30, 0x87, 0xc8, 0x46, - 0xbd, 0x77, 0x25, 0x62, 0x7f, 0xb7, 0x6f, 0x5d, 0x14, 0x5c, 0x58, 0x7d, - 0xf8, 0x8e, 0xdb, 0xd8, 0x7a, 0x35, 0x26, 0x77, 0x3e, 0xa6, 0x17, 0x1a, - 0x47, 0xa0, 0xef, 0x69, 0x50, 0x96, 0xbb, 0x8b, 0xd7, 0x0b, 0x95, 0xc0, - 0xf5, 0x4e, 0x6c, 0xff, 0x95, 0x4b, 0x47, 0x3f, 0xd6, 0x23, 0x78, 0x10, - 0x2c, 0x22, 0x7a, 0x33, 0x0c, 0xe8, 0x5b, 0xd0, 0x28, 0x9a, 0x45, 0xc4, - 0x7e, 0x7b, 0x99, 0x71, 0xfc, 0x73, 0x15, 0xb3, 0x59, 0x21, 0xa3, 0x1c, - 0xff, 0x6e, 0xff, 0x37, 0xfc, 0xd0, 0x94, 0xed, 0x12, 0xa7, 0xd8, 0x7d, - 0xe5, 0x68, 0xa7, 0x58, 0xc5, 0x8e, 0xd3, 0x70, 0xa6, 0x2c, 0xde, 0x02, - 0xec, 0xf7, 0xfb, 0x20, 0x59, 0x25, 0x20, 0xf4, 0x40, 0x46, 0x9f, 0xc9, - 0x81, 0xbf, 0x70, 0x6f, 0x10, 0x0f, 0x4c, 0xed, 0x44, 0x92, 0x86, 0x30, - 0x0a, 0xcf, 0x50, 0xee, 0x4d, 0x19, 0x58, 0x1f, 0x01, 0x0e, 0xd9, 0x7c, - 0x49, 0xe4, 0x60, 0xef, 0x52, 0x7b, 0x40, 0xca, 0x38, 0x88, 0x99, 0x25, - 0x7d, 0x93, 0xb7, 0xec, 0x02, 0x48, 0xb8, 0x32, 0x07, 0x74, 0xd0, 0x87, - 0x97, 0x16, 0xe0, 0x08, 0x28, 0x0b, 0xb3, 0x5f, 0x16, 0x7c, 0x0c, 0xff, - 0xbb, 0xcf, 0xab, 0x3b, 0xa1, 0xa8, 0xbc, 0xa6, 0x60, 0x59, 0xf6, 0x0d, - 0x28, 0x30, 0x98, 0x96, 0x92, 0xcc, 0xa4, 0x5c, 0x79, 0x04, 0xe5, 0x9a, - 0x23, 0x00, 0x37, 0xf3, 0xf6, 0x78, 0x3f, 0x64, 0x0f, 0xc1, 0xec, 0xbd, - 0xcb, 0x65, 0x03, 0x69, 0xbb, 0xcd, 0x10, 0xd6, 0x48, 0x69, 0xb1, 0x0e, - 0x3a, 0x26, 0x88, 0x25, 0xfa, 0x5d, 0x42, 0x25, 0x46, 0x50, 0x4d, 0x41, - 0x32, 0x09, 0x43, 0x06, 0x92, 0x07, 0x07, 0x32, 0x05, 0x7f, 0xf4, 0x30, - 0x05, 0x49, 0xe6, 0x5d, 0x3f, 0x80, 0xcd, 0x89, 0x7f, 0x42, 0x59, 0xe4, - 0x24, 0x14, 0x2b, 0xfe, 0x52, 0x63, 0x5c, 0x0e, 0x8c, 0x9d, 0x2f, 0x51, - 0x2d, 0x6f, 0xba, 0x78, 0x14, 0x48, 0x73, 0xe2, 0x7c, 0x5c, 0x5c, 0xb4, - 0x53, 0x3c, 0x04, 0x2a, 0x4a, 0xa4, 0x28, 0xbb, 0x51, 0xc1, 0x33, 0x81, - 0x9d, 0x45, 0xfc, 0x7e, 0x0a, 0x9e, 0xd0, 0x44, 0x0b, 0x80, 0xe3, 0xa6, - 0xfb, 0x43, 0x6f, 0x09, 0xed, 0x0f, 0x5d, 0x0e, 0xbe, 0x43, 0xc0, 0x04, - 0x9e, 0xe8, 0x94, 0x30, 0x5e, 0x7d, 0xa3, 0x7b, 0x5d, 0xb0, 0x64, 0xe7, - 0xe1, 0xe0, 0x3d, 0x24, 0x9f, 0x76, 0x2e, 0xc1, 0xec, 0xda, 0x14, 0x05, - 0x51, 0x83, 0x6b, 0xa8, 0xc8, 0x34, 0xf7, 0x49, 0x8d, 0xa0, 0xb5, 0xda, - 0x1f, 0x3a, 0xb5, 0xb4, 0x3f, 0x2b, 0x15, 0x6f, 0xae, 0xf6, 0x6c, 0xff, - 0xff, 0x74, 0xb9, 0x26, 0x50, 0xe5, 0x39, 0xb2, 0x6d, 0xba, 0x51, 0xc9, - 0xc2, 0xd2, 0x42, 0xe7, 0x8f, 0x67, 0x87, 0x3d, 0x44, 0xbe, 0x25, 0xc1, - 0x1b, 0x05, 0x4d, 0xf1, 0xa4, 0x11, 0x70, 0x87, 0x5e, 0xdd, 0x2c, 0x1d, - 0x98, 0x06, 0xa9, 0xf7, 0x24, 0xaa, 0x0d, 0x26, 0xa2, 0x83, 0xb4, 0xdf, - 0x31, 0x47, 0xdc, 0x48, 0x79, 0x49, 0xbb, 0x68, 0x5f, 0x1f, 0x27, 0xcb, - 0xfe, 0x7f, 0xd7, 0x81, 0xdd, 0xfd, 0x3c, 0xa7, 0xdb, 0xe1, 0xc5, 0x70, - 0xe2, 0x19, 0xb6, 0x1d, 0x27, 0x78, 0x29, 0x7e, 0x11, 0xc8, 0x5d, 0xf8, - 0xe9, 0x8f, 0xf8, 0x90, 0x61, 0x4b, 0x0a, 0x54, 0xdd, 0xeb, 0xee, 0xf0, - 0x7f, 0x9c, 0xf5, 0x82, 0x6d, 0x43, 0xf7, 0xa4, 0xef, 0x6c, 0xa1, 0x44, - 0x95, 0xeb, 0x0e, 0xe5, 0xe5, 0x59, 0x2e, 0x6c, 0x58, 0xcf, 0x4e, 0xce, - 0x00, 0x87, 0x73, 0xa2, 0x4a, 0x83, 0x35, 0xc9, 0x8d, 0x55, 0x79, 0x37, - 0x4d, 0x35, 0x42, 0x66, 0x83, 0xca, 0xea, 0x21, 0xf6, 0x03, 0x10, 0x86, - 0x70, 0xc8, 0x27, 0xbb, 0xee, 0x87, 0x83, 0xb2, 0x9d, 0x83, 0xb1, 0x3d, - 0x8e, 0xfd, 0x02, 0x84, 0x0b, 0x47, 0xac, 0x97, 0xda, 0x5c, 0x02, 0x3f, - 0x00, 0x6f, 0x52, 0xa6, 0x0f, 0x37, 0x3a, 0xad, 0x4f, 0x89, 0xd7, 0x44, - 0x70, 0xef, 0x4d, 0xe5, 0x1d, 0x81, 0xc4, 0x53, 0xe2, 0x35, 0x65, 0x81, - 0xbc, 0xae, 0x80, 0xe3, 0x96, 0x2f, 0xd1, 0xcf, 0x69, 0x78, 0xdd, 0x57, - 0x8c, 0x6a, 0x88, 0x2b, 0x29, 0x05, 0xce, 0x44, 0x39, 0x5f, 0xdc, 0x67, - 0x7a, 0xa2, 0x86, 0x63, 0x9e, 0x55, 0x0f, 0x67, 0x8c, 0x36, 0xe8, 0xcd, - 0xcc, 0x34, 0xd5, 0x54, 0xc7, 0x88, 0xa2, 0xe0, 0xad, 0xd5, 0xbc, 0xd2, - 0xef, 0x35, 0x8a, 0xd7, 0xbc, 0xba, 0x2b, 0x6b, 0x51, 0xc8, 0xd7, 0x76, - 0x9e, 0x15, 0xc7, 0xa6, 0xaa, 0x7a, 0x47, 0xa8, 0xbe, 0x5f, 0x00, 0x18, - 0x12, 0xc7, 0xfb, 0xd2, 0x77, 0x46, 0x77, 0x0e, 0xb0, 0xa0, 0x52, 0xb6, - 0x47, 0x4d, 0x26, 0x5f, 0x20, 0xd8, 0x35, 0xc5, 0x22, 0xa1, 0x9d, 0x78, - 0x46, 0xc0, 0x10, 0x9a, 0x71, 0x06, 0x6f, 0xf1, 0xa9, 0x24, 0xe4, 0x23, - 0x93, 0x08, 0xcd, 0x7a, 0x3d, 0x5d, 0x1e, 0xb8, 0x19, 0x56, 0xa5, 0x6e, - 0x51, 0x59, 0xc1, 0xec, 0x6b, 0x97, 0x78, 0x39, 0x09, 0x47, 0xd8, 0x86, - 0xa2, 0x9e, 0x2f, 0x1c, 0x6e, 0xed, 0x98, 0x9e, 0x35, 0x01, 0x86, 0xef, - 0xc5, 0x8a, 0xb3, 0xd0, 0x85, 0x85, 0xd1, 0xa9, 0xc3, 0x8b, 0xc1, 0xe0, - 0xae, 0xf6, 0xee, 0xb7, 0xdf, 0xef, 0xff, 0x8f, 0xae, 0x2f, 0xdd, 0x4e, - 0x1d, 0x77, 0xbe, 0xfd, 0xde, 0x6f, 0xe9, 0x80, 0x03, 0xee, 0x18, 0xcb, - 0x2d, 0x5b, 0xe4, 0xc0, 0xd3, 0x5f, 0xed, 0xa1, 0x24, 0x71, 0x7e, 0xf7, - 0xbf, 0x56, 0xe2, 0xda, 0x25, 0x34, 0xcf, 0x63, 0xd5, 0x66, 0x11, 0x52, - 0x45, 0x3a, 0x79, 0xca, 0xf6, 0x62, 0x0d, 0x61, 0xbd, 0x48, 0x2f, 0x05, - 0x56, 0x29, 0x17, 0xa4, 0x65, 0xc7, 0xcd, 0x0f, 0xac, 0xfd, 0x39, 0x4a, - 0x71, 0x83, 0xb9, 0x64, 0x17, 0x5f, 0xe6, 0x61, 0x74, 0xe1, 0x38, 0x94, - 0xaf, 0xac, 0xa2, 0x20, 0xfa, 0xad, 0x82, 0x7e, 0xab, 0x1d, 0x27, 0x86, - 0xac, 0xd3, 0xba, 0x42, 0x40, 0x22, 0x95, 0xae, 0x0d, 0x9f, 0x03, 0x54, - 0x3b, 0x69, 0x5c, 0x4c, 0x02, 0xa0, 0x2b, 0x79, 0x22, 0xe1, 0x1c, 0x86, - 0xc7, 0x8f, 0x85, 0x17, 0x3e, 0xf0, 0xbd, 0xc9, 0x68, 0x36, 0xc9, 0x22, - 0x0a, 0x1d, 0xd3, 0x2a, 0x7c, 0x6d, 0x7a, 0x8f, 0xb5, 0x4a, 0xc5, 0xeb, - 0x94, 0x83, 0x32, 0x36, 0xb7, 0x14, 0x1b, 0x3b, 0x1d, 0x37, 0xcb, 0x92, - 0x49, 0x0a, 0x90, 0x48, 0xb0, 0xb1, 0x0b, 0xc0, 0xf9, 0x68, 0xc9, 0x7c, - 0x14, 0x5e, 0xdc, 0xf4, 0xf8, 0xda, 0xb1, 0xb0, 0xfd, 0x50, 0x68, 0x45, - 0x91, 0xc0, 0xa0, 0x4a, 0x34, 0xd2, 0x67, 0xda, 0x5d, 0x27, 0xfa, 0xbc, - 0x4a, 0x3e, 0x3f, 0x40, 0x16, 0xd1, 0x56, 0x77, 0x20, 0x1b, 0xf2, 0x05, - 0x69, 0x91, 0xc8, 0xa2, 0xd2, 0xa6, 0xb9, 0x25, 0x3f, 0xec, 0xa5, 0xf3, - 0xde, 0xb1, 0x0c, 0x2d, 0x10, 0x42, 0x9a, 0x20, 0xe2, 0xf4, 0x55, 0xdd, - 0x4c, 0xd6, 0xb4, 0xb5, 0x68, 0x8e, 0x91, 0x19, 0x0d, 0x5a, 0xce, 0xd3, - 0x2f, 0x0f, 0x03, 0x2b, 0x72, 0x83, 0xce, 0x91, 0x40, 0xce, 0x42, 0x24, - 0x56, 0xbb, 0xc4, 0x3d, 0x8a, 0x0a, 0x62, 0xf0, 0xc8, 0xc7, 0xa4, 0x6f, - 0x36, 0x61, 0x34, 0x15, 0x9a, 0x87, 0x9b, 0x6c, 0x89, 0xeb, 0xd8, 0x3b, - 0x97, 0xeb, 0xe6, 0x18, 0x4f, 0x22, 0x48, 0x55, 0xd6, 0x1e, 0xbd, 0x60, - 0xf7, 0xf8, 0xa2, 0x8f, 0xba, 0x2a, 0x51, 0x09, 0xbf, 0xdc, 0x15, 0x57, - 0x3f, 0x75, 0xdc, 0xa5, 0x52, 0x8f, 0xc0, 0x1b, 0xf5, 0xc0, 0x9e, 0xc3, - 0x03, 0x6a, 0x4a, 0x75, 0xdc, 0x7d, 0xc9, 0x0a, 0xb3, 0xdc, 0xd5, 0x24, - 0xb6, 0xb6, 0xc9, 0xd8, 0xbe, 0x65, 0x9b, 0x13, 0x75, 0x33, 0x75, 0x51, - 0xce, 0xd4, 0xe3, 0xae, 0x8b, 0x6c, 0x15, 0xd4, 0x45, 0xc5, 0xc3, 0x66, - 0x8b, 0x4c, 0xa2, 0x64, 0x7a, 0x64, 0xc2, 0x6d, 0xab, 0x5d, 0x75, 0x1a, - 0xbd, 0xe8, 0xa7, 0x6c, 0xc5, 0x1e, 0x86, 0xe1, 0x82, 0x77, 0xb7, 0x31, - 0x9f, 0x9e, 0x4c, 0xd6, 0x9f, 0xf8, 0xe9, 0xf7, 0x6e, 0x61, 0xf0, 0x81, - 0xfd, 0x43, 0x0b, 0x96, 0xc0, 0x41, 0x12, 0xfb, 0x52, 0x5f, 0x39, 0x98, - 0x0d, 0x76, 0xab, 0x0e, 0xf2, 0xd0, 0xd5, 0xc4, 0x12, 0xf6, 0xe9, 0x01, - 0xc5, 0x81, 0xab, 0x2f, 0xa3, 0xe4, 0x6a, 0x52, 0xb6, 0xad, 0x88, 0x3e, - 0xb5, 0x97, 0x95, 0xe3, 0x74, 0xf6, 0x94, 0x02, 0x39, 0x43, 0xe5, 0x78, - 0xe9, 0x7a, 0x6d, 0x05, 0x11, 0x17, 0xdf, 0xa5, 0x2d, 0x4d, 0x72, 0x54, - 0x45, 0x50, 0x23, 0x2f, 0x14, 0x04, 0x57, 0x7e, 0x48, 0x6d, 0x80, 0x90, - 0x7d, 0x5d, 0x45, 0x54, 0x27, 0xeb, 0xc2, 0xdd, 0xb4, 0xb5, 0x81, 0xb8, - 0xd2, 0xc2, 0x25, 0x02, 0x09, 0xea, 0xaa, 0x63, 0x07, 0xa2, 0x0e, 0x02, - 0xc8, 0xcd, 0x19, 0x90, 0x0e, 0xd8, 0x76, 0x74, 0xcc, 0x4c, 0xa2, 0x83, - 0x6f, 0xc1, 0xf2, 0xd8, 0x1b, 0x6c, 0xbf, 0xab, 0xd6, 0x01, 0x5e, 0x4a, - 0xfc, 0xfc, 0xad, 0x18, 0x03, 0x71, 0x93, 0xed, 0x68, 0x5c, 0xb3, 0xfc, - 0xed, 0x39, 0x81, 0xf0, 0xab, 0xa3, 0x0f, 0x3b, 0x1e, 0x98, 0x29, 0x79, - 0x7a, 0x9b, 0x3b, 0x3a, 0xc2, 0xc7, 0xc7, 0xc2, 0xd9, 0x55, 0x7b, 0xd4, - 0x4b, 0xb4, 0x4f, 0x47, 0x4b, 0xc6, 0x71, 0xd1, 0x6b, 0x90, 0xd2, 0x9f, - 0xf5, 0x96, 0xfe, 0x96, 0xb7, 0xf8, 0xf5, 0x0b, 0xe9, 0xf1, 0xa3, 0x68, - 0xa8, 0x77, 0x96, 0x60, 0x42, 0x92, 0x96, 0x07, 0x15, 0x46, 0x72, 0xf5, - 0xe2, 0x82, 0x40, 0x77, 0xb8, 0x1a, 0xec, 0xc6, 0x29, 0xfc, 0x79, 0x50, - 0x1c, 0x8a, 0x61, 0x69, 0xf8, 0x30, 0xd5, 0x72, 0xb1, 0xc2, 0x1c, 0x09, - 0x3b, 0x5a, 0x24, 0x18, 0xa5, 0xd7, 0xaa, 0xaf, 0x4b, 0xf3, 0xc5, 0x1b, - 0x6d, 0xa2, 0x21, 0x53, 0x8f, 0xdc, 0x69, 0xc0, 0xaa, 0xfc, 0x27, 0x3d, - 0x9c, 0x51, 0xdc, 0x16, 0x2f, 0xef, 0x37, 0x3f, 0xaa, 0xbf, 0xef, 0xb7, - 0xcd, 0x28, 0x04, 0xe7, 0x59, 0xff, 0x6a, 0x6e, 0xfc, 0x52, 0xa9, 0xd1, - 0x9f, 0x7f, 0xbe, 0x30, 0xc5, 0x7e, 0xd5, 0xf1, 0xa5, 0x76, 0x6d, 0x2f, - 0x7f, 0xb5, 0x67, 0xfa, 0xda, 0x79, 0xdc, 0x48, 0x62, 0x1e, 0x0b, 0x16, - 0x28, 0x4d, 0xad, 0x1f, 0x6e, 0x0b, 0xbc, 0x32, 0x5b, 0xd0, 0x4b, 0x6f, - 0xf6, 0x5f, 0x38, 0x58, 0xd4, 0x02, 0xbf, 0x42, 0x99, 0x9c, 0x3e, 0x59, - 0x7d, 0x85, 0xb6, 0x44, 0x2e, 0x3f, 0x5f, 0x27, 0xf6, 0x13, 0x88, 0x78, - 0x34, 0x52, 0x5b, 0x8a, 0x82, 0xd4, 0xd6, 0xe1, 0x8b, 0x42, 0xc1, 0x2e, - 0xff, 0x5c, 0xa6, 0xfa, 0xf7, 0x85, 0xff, 0x9a, 0x07, 0xfc, 0x4e, 0x22, - 0x18, 0x27, 0x0d, 0x4e, 0x01, 0x14, 0x45, 0x80, 0x64, 0x24, 0xba, 0xc9, - 0x4d, 0xcd, 0x4d, 0x10, 0x08, 0xd4, 0xbb, 0x4c, 0x96, 0x82, 0x5f, 0x01, - 0xb4, 0xe7, 0x05, 0xe5, 0xcc, 0xd6, 0x18, 0x11, 0x0c, 0xcc, 0x4b, 0x9b, - 0xc4, 0x0a, 0xbf, 0x47, 0xa0, 0xc7, 0xa0, 0xf6, 0xc2, 0xf5, 0x7b, 0xcd, - 0x90, 0xb5, 0x03, 0xe4, 0x2f, 0xae, 0x1a, 0x5e, 0xb0, 0xc0, 0xba, 0x32, - 0x32, 0x8b, 0xb8, 0x4d, 0x61, 0x83, 0xea, 0x90, 0xa2, 0x33, 0xa8, 0xa1, - 0xe6, 0xf2, 0x2b, 0x10, 0xfb, 0x91, 0x01, 0xcb, 0xc5, 0x3a, 0xeb, 0x4b, - 0xa9, 0xf2, 0x44, 0x87, 0x4d, 0x4e, 0x11, 0x64, 0x6d, 0x05, 0xe8, 0xdd, - 0x2a, 0x49, 0xcc, 0xc8, 0xc4, 0x2b, 0x61, 0x04, 0xca, 0x1f, 0xdd, 0xe4, - 0x25, 0x90, 0xf3, 0x74, 0x3a, 0x4b, 0x24, 0xb7, 0x01, 0x80, 0x77, 0xb9, - 0x09, 0x92, 0xec, 0x6a, 0x07, 0x1c, 0x48, 0xb7, 0x5d, 0x2b, 0x28, 0x2f, - 0x58, 0xa9, 0x8b, 0xff, 0x69, 0x17, 0x80, 0xef, 0x3c, 0x77, 0xbb, 0xe0, - 0x59, 0x27, 0x1e, 0x6b, 0x5d, 0x28, 0xe9, 0x90, 0xdf, 0x3d, 0x58, 0x93, - 0x3f, 0xb6, 0x07, 0xa1, 0x17, 0x9c, 0xf3, 0x34, 0x26, 0x65, 0xe2, 0x54, - 0x48, 0x4a, 0xf5, 0x0a, 0x80, 0x52, 0x78, 0x40, 0x31, 0x59, 0x10, 0x55, - 0x91, 0x5c, 0x7e, 0xf8, 0x51, 0x75, 0xb8, 0xa4, 0x09, 0xab, 0x9f, 0x83, - 0xf0, 0x3a, 0x3f, 0xe4, 0x6f, 0xed, 0xa6, 0xd7, 0xa0, 0x68, 0x45, 0x80, - 0xf3, 0xfe, 0x12, 0x6d, 0xd6, 0x6f, 0x33, 0x05, 0x94, 0x10, 0x5a, 0xa2, - 0x4a, 0xc3, 0xb2, 0xcb, 0xad, 0x15, 0x80, 0x87, 0xb6, 0xf0, 0x01, 0x77, - 0xaa, 0xfe, 0xaf, 0x88, 0x6a, 0x9b, 0x0a, 0x73, 0xf4, 0x82, 0x07, 0x01, - 0x17, 0x56, 0xad, 0xab, 0xc6, 0x40, 0x81, 0x3c, 0x13, 0x3c, 0x6d, 0xf0, - 0x54, 0xb7, 0x67, 0x18, 0x13, 0xf6, 0x0b, 0x54, 0x4f, 0x5e, 0x66, 0x51, - 0x13, 0x9b, 0x1e, 0xe8, 0x4a, 0x85, 0xee, 0xdd, 0xee, 0xe1, 0xda, 0x8a, - 0x1d, 0x01, 0xee, 0xb3, 0xe3, 0xb3, 0xae, 0xa2, 0xdb, 0x25, 0xa8, 0x7e, - 0xc4, 0x6d, 0x7b, 0xd0, 0x53, 0x5f, 0x9b, 0x9e, 0x1c, 0x27, 0x88, 0x98, - 0x3d, 0xdc, 0x56, 0x00, 0x59, 0x22, 0x98, 0x05, 0x9f, 0x07, 0x16, 0xac, - 0x95, 0x2a, 0x1d, 0x05, 0x02, 0x2d, 0x05, 0xb0, 0x99, 0x70, 0x99, 0xe6, - 0x0b, 0x0f, 0xdf, 0x89, 0x68, 0x71, 0xde, 0xda, 0x8b, 0xe4, 0xca, 0xe0, - 0xc5, 0x41, 0x25, 0x75, 0xae, 0x94, 0xf6, 0x69, 0x57, 0xe1, 0x75, 0xee, - 0x24, 0xa7, 0x00, 0xe6, 0x03, 0x77, 0x07, 0x2e, 0xd3, 0x37, 0xfe, 0x09, - 0xd0, 0xad, 0x55, 0x82, 0xad, 0x08, 0xd6, 0x9b, 0x6f, 0xfe, 0xa4, 0xdf, - 0xbe, 0x67, 0xe5, 0x22, 0x81, 0xbc, 0x05, 0x14, 0x38, 0x19, 0x1f, 0x56, - 0xef, 0xdb, 0xbc, 0xaa, 0xad, 0x29, 0x71, 0x2d, 0x6d, 0x37, 0xde, 0x4b, - 0xbc, 0x4c, 0xf7, 0x85, 0xe6, 0x77, 0x1c, 0x95, 0x54, 0x92, 0x58, 0x61, - 0x21, 0x85, 0xf2, 0x82, 0x13, 0xc1, 0xfa, 0x51, 0xb3, 0x5a, 0xf4, 0x19, - 0x52, 0xe6, 0x2a, 0xb9, 0x30, 0x8e, 0x50, 0x22, 0xc9, 0xef, 0x4d, 0xa5, - 0x42, 0x91, 0x1c, 0xa0, 0xe7, 0xc2, 0x48, 0xff, 0x3b, 0x43, 0xe1, 0xbe, - 0x69, 0x42, 0x48, 0xff, 0x26, 0xdf, 0xd1, 0x12, 0xcc, 0x41, 0x91, 0xa5, - 0xff, 0x16, 0xd9, 0xfe, 0x99, 0xf9, 0xe1, 0x1b, 0xaf, 0x00, 0xb4, 0xf9, - 0xc3, 0x8c, 0xfa, 0xc1, 0x85, 0x8c, 0x7c, 0x32, 0x6a, 0xf0, 0x12, 0x97, - 0x32, 0xeb, 0x48, 0x26, 0xf0, 0x76, 0x63, 0x5e, 0x5b, 0x8b, 0x5f, 0xa1, - 0xb2, 0xf9, 0x98, 0xc3, 0x58, 0x6d, 0x14, 0xba, 0x14, 0x99, 0xfb, 0xeb, - 0xb4, 0x16, 0x12, 0xdc, 0xac, 0x4d, 0x81, 0xae, 0x0c, 0x0e, 0x90, 0x11, - 0x5b, 0x25, 0xe2, 0xd5, 0xe0, 0x34, 0x38, 0xc3, 0xe4, 0xec, 0xb5, 0x99, - 0xac, 0x9d, 0x40, 0x24, 0xde, 0x26, 0x58, 0xf4, 0xdb, 0x76, 0x55, 0x81, - 0xae, 0x11, 0xdf, 0xf3, 0xee, 0x5f, 0x9e, 0x52, 0xaf, 0x05, 0xf5, 0x32, - 0x13, 0x8e, 0x17, 0x1a, 0x3a, 0x84, 0xb2, 0xc9, 0x3c, 0x04, 0x75, 0x99, - 0x29, 0x2a, 0x67, 0x12, 0x96, 0x91, 0x0e, 0x7b, 0x89, 0xbe, 0xa9, 0x7c, - 0x4d, 0x30, 0x76, 0x54, 0xc5, 0x95, 0x9b, 0xad, 0x44, 0xaa, 0x84, 0x14, - 0xc6, 0xb2, 0x0d, 0x56, 0xa3, 0x83, 0x02, 0x8c, 0xdf, 0x25, 0x29, 0xd1, - 0x10, 0xe2, 0x10, 0x43, 0x27, 0x8e, 0x28, 0x9e, 0x78, 0x08, 0x3a, 0x15, - 0x87, 0x1e, 0x43, 0x12, 0xee, 0x4e, 0x48, 0x69, 0x4a, 0xfd, 0xcd, 0xb5, - 0x20, 0x81, 0x53, 0x58, 0x52, 0xea, 0xaf, 0xda, 0x3b, 0xba, 0x50, 0x97, - 0x27, 0x53, 0x0b, 0x4d, 0x17, 0xa0, 0xf3, 0xb7, 0xbe, 0x96, 0x4e, 0x0c, - 0x8c, 0xab, 0xb2, 0x06, 0x73, 0x07, 0x0d, 0x16, 0xd5, 0x02, 0xbf, 0xbe, - 0x01, 0x3a, 0x64, 0x60, 0x91, 0x50, 0x17, 0x48, 0xf2, 0xc6, 0x87, 0x73, - 0xe8, 0x0b, 0xd4, 0x77, 0xca, 0xed, 0x82, 0x9b, 0x41, 0x03, 0x74, 0x78, - 0xc4, 0x29, 0x8c, 0xe9, 0x7e, 0x71, 0x59, 0x2c, 0xae, 0x69, 0xcb, 0x65, - 0x35, 0x4d, 0x26, 0x5f, 0xea, 0xc6, 0x2b, 0x8c, 0x24, 0x2e, 0xb5, 0x5b, - 0x61, 0xb5, 0x5a, 0xbe, 0xf5, 0x55, 0xc7, 0xbd, 0x42, 0x0a, 0xe1, 0xb6, - 0x8c, 0x58, 0x19, 0xb1, 0xdc, 0x38, 0x13, 0x51, 0xfe, 0x91, 0xe9, 0xd5, - 0x62, 0x69, 0x35, 0x79, 0xe1, 0xdc, 0x60, 0x5d, 0x76, 0x57, 0xb7, 0x65, - 0x9f, 0x67, 0xd3, 0x1c, 0x34, 0x90, 0x2d, 0xdc, 0x23, 0xe0, 0x63, 0x7a, - 0xc9, 0x31, 0x34, 0xa4, 0x79, 0xa8, 0x58, 0x97, 0x3f, 0xf8, 0xaa, 0x2d, - 0xae, 0xce, 0x20, 0x65, 0x28, 0xd5, 0x25, 0x90, 0xaa, 0x79, 0x50, 0x92, - 0xf7, 0x25, 0xe6, 0x2d, 0xab, 0x46, 0x53, 0x08, 0xe3, 0x6e, 0x63, 0x4d, - 0x30, 0xea, 0x0c, 0x83, 0x93, 0x23, 0xf5, 0x5c, 0x2b, 0xa5, 0x75, 0x06, - 0x38, 0x1c, 0x40, 0x4b, 0x4d, 0x4b, 0xc6, 0x90, 0x8e, 0xcf, 0xe8, 0xe2, - 0x09, 0x3e, 0xe6, 0xf9, 0x80, 0x2d, 0xb7, 0xd6, 0x21, 0xab, 0xa8, 0x1b, - 0x97, 0xf4, 0xb7, 0x19, 0xa9, 0x40, 0x1e, 0xc1, 0xe3, 0x5c, 0x93, 0x34, - 0xcf, 0x97, 0x79, 0x77, 0x51, 0x57, 0xa6, 0xd7, 0x97, 0x64, 0x49, 0x69, - 0x82, 0x61, 0xa4, 0xc7, 0x6c, 0x0d, 0xe7, 0xf8, 0xfd, 0x1d, 0xa6, 0x32, - 0xd0, 0x08, 0xb4, 0xa6, 0x97, 0x8c, 0xf7, 0x09, 0xb3, 0xc2, 0x55, 0x5d, - 0x2c, 0x9f, 0xb0, 0x81, 0x96, 0x87, 0xb2, 0xaf, 0x3c, 0xb6, 0xa5, 0xd5, - 0x3c, 0x31, 0x8a, 0x4f, 0xc5, 0xf4, 0xae, 0x9c, 0x6e, 0x18, 0xcf, 0xe8, - 0x17, 0x9e, 0xee, 0xc0, 0x9e, 0xaa, 0x93, 0xcf, 0xda, 0x31, 0x0b, 0xb1, - 0x24, 0x5f, 0xae, 0xaa, 0x2f, 0x57, 0xd1, 0x57, 0xab, 0x90, 0xaf, 0xfd, - 0x48, 0xa2, 0xa7, 0x9a, 0x1c, 0x00, 0xa5, 0xb6, 0x01, 0xc3, 0x31, 0xea, - 0x21, 0x34, 0x9d, 0x92, 0x2c, 0x2b, 0xc9, 0x56, 0xa7, 0x2f, 0x36, 0x81, - 0x62, 0x52, 0xe5, 0xc6, 0x63, 0x8a, 0x09, 0x16, 0xc5, 0xaa, 0x81, 0x14, - 0xce, 0x61, 0x1f, 0x6a, 0x5a, 0x0f, 0x48, 0xa7, 0x9d, 0x04, 0x18, 0xfb, - 0xc7, 0x97, 0xea, 0x04, 0x29, 0xa3, 0x5f, 0x11, 0xeb, 0xfd, 0x03, 0x6f, - 0x2d, 0x65, 0xd5, 0x9d, 0xfb, 0x03, 0xb7, 0x8b, 0x44, 0x17, 0x64, 0x9d, - 0x4a, 0x0b, 0xe2, 0x54, 0xe4, 0xf7, 0xbc, 0xde, 0xeb, 0xf0, 0x24, 0xb4, - 0xca, 0xe9, 0xbc, 0xd6, 0x31, 0x98, 0xa3, 0xd7, 0x63, 0x66, 0x34, 0xd4, - 0xa9, 0x34, 0xe9, 0xa9, 0x83, 0xec, 0x54, 0x41, 0x8d, 0x84, 0x0f, 0x48, - 0x94, 0xc6, 0xb3, 0x36, 0xc1, 0xc5, 0xd0, 0x51, 0xae, 0xed, 0xe5, 0x2a, - 0x5e, 0xd1, 0x5a, 0x0e, 0xf5, 0xc3, 0x0f, 0x25, 0x5c, 0xf5, 0xff, 0x91, - 0x94, 0x39, 0x75, 0x46, 0xa5, 0x1f, 0x71, 0xf6, 0x4a, 0x9a, 0xb3, 0x43, - 0x4e, 0xe5, 0x7b, 0xd5, 0x00, 0x1e, 0x30, 0x07, 0xb6, 0x17, 0x40, 0x85, - 0x86, 0x3b, 0x3f, 0xd3, 0x8d, 0xad, 0x1c, 0x80, 0x45, 0x57, 0xc1, 0x72, - 0xdb, 0x1a, 0x90, 0xfb, 0x7d, 0xda, 0x1c, 0xe4, 0x3e, 0x51, 0xd8, 0x5b, - 0x33, 0x8e, 0xc3, 0xb4, 0xce, 0xbd, 0x8c, 0xd5, 0x55, 0x3e, 0x76, 0xed, - 0xac, 0x00, 0xd9, 0xd1, 0x8c, 0x65, 0x10, 0x11, 0x37, 0x4a, 0x00, 0xac, - 0x6b, 0x1f, 0x10, 0xf2, 0x2f, 0x04, 0xe2, 0xc7, 0x3b, 0x87, 0x21, 0xd0, - 0x1c, 0x94, 0x8b, 0x57, 0xe0, 0xd6, 0x4e, 0x04, 0x55, 0xda, 0xbb, 0x33, - 0x75, 0x57, 0x28, 0x75, 0x6a, 0x3b, 0x6d, 0x81, 0x16, 0xb9, 0x4b, 0xec, - 0x21, 0x1e, 0x3b, 0x1f, 0x1f, 0x01, 0xf0, 0x70, 0x8a, 0x40, 0xdd, 0x65, - 0x05, 0x94, 0x84, 0x06, 0xe4, 0x7c, 0x79, 0xad, 0xfe, 0xe9, 0xb8, 0x3b, - 0x45, 0x5c, 0xac, 0x62, 0x4e, 0x5f, 0x17, 0xea, 0xa7, 0xd2, 0xbb, 0xd5, - 0x4c, 0x63, 0xbc, 0x2b, 0xd0, 0xb4, 0x72, 0x9b, 0xd4, 0xd3, 0x6d, 0x9c, - 0x6c, 0x6c, 0x18, 0xb5, 0x35, 0x61, 0xdb, 0xd4, 0x83, 0x47, 0x8b, 0xdc, - 0x86, 0x0e, 0x1d, 0xb8, 0xd1, 0xd1, 0xc2, 0x7b, 0x60, 0xd4, 0x37, 0xd6, - 0x05, 0xc5, 0x3f, 0x6d, 0x59, 0xb1, 0xa9, 0x62, 0x6e, 0x6a, 0xb5, 0x1b, - 0x94, 0x8b, 0x99, 0xca, 0xee, 0x85, 0x1f, 0xe6, 0x46, 0xed, 0x7d, 0x86, - 0x41, 0x14, 0x9c, 0xad, 0x60, 0xa6, 0xf3, 0x61, 0xde, 0x63, 0x78, 0x99, - 0xd7, 0xc1, 0x96, 0x62, 0x7a, 0x09, 0x83, 0x3c, 0x58, 0x1b, 0xe6, 0xe7, - 0x9b, 0x96, 0x24, 0x5b, 0x1d, 0xcf, 0xf9, 0xe3, 0x75, 0x56, 0x3e, 0x81, - 0xe2, 0x3c, 0x5a, 0xb8, 0x75, 0x87, 0x75, 0xce, 0x73, 0x9d, 0x38, 0xd1, - 0x26, 0x3a, 0xe7, 0x8e, 0x3c, 0xed, 0x06, 0x17, 0x7e, 0x6b, 0x6d, 0x06, - 0x42, 0x3d, 0x47, 0x01, 0xb3, 0x92, 0x7f, 0x5d, 0x75, 0xf2, 0x20, 0xe8, - 0x87, 0x07, 0x62, 0x24, 0x41, 0x46, 0x38, 0xd6, 0x98, 0xc0, 0x5b, 0x09, - 0xd3, 0x5d, 0x85, 0x26, 0x14, 0x81, 0xe9, 0x6e, 0xb7, 0x70, 0xd0, 0x58, - 0xe2, 0x09, 0x2f, 0x1c, 0x9a, 0x81, 0x7f, 0x07, 0xe8, 0x7a, 0x72, 0x4d, - 0x72, 0x94, 0x8a, 0xa8, 0x62, 0xf9, 0xfa, 0xe6, 0x41, 0x1c, 0xa1, 0xc9, - 0x59, 0x58, 0xc1, 0xd8, 0x12, 0xb6, 0x59, 0x57, 0xbf, 0x81, 0xd4, 0x0f, - 0x6e, 0x33, 0xda, 0x80, 0x10, 0x3d, 0x1a, 0xb2, 0x6f, 0xf6, 0x62, 0x78, - 0xd3, 0x1d, 0x41, 0x80, 0xc2, 0x7a, 0x77, 0xe3, 0x98, 0xb0, 0x2d, 0xae, - 0x8c, 0x1a, 0x22, 0x37, 0xbd, 0x7c, 0xb9, 0x84, 0x12, 0xe0, 0x8b, 0xf4, - 0xfc, 0x8a, 0xcc, 0x2d, 0x9b, 0x7f, 0xb8, 0x47, 0xc4, 0xfc, 0x65, 0x67, - 0x51, 0xbf, 0x5a, 0xab, 0x13, 0xd0, 0x4a, 0x8d, 0x9b, 0x66, 0x44, 0x9b, - 0xe3, 0xb4, 0x69, 0x4e, 0xce, 0x17, 0xb8, 0x6e, 0x08, 0xdb, 0xa2, 0x8d, - 0x0a, 0x01, 0xf5, 0x58, 0xc6, 0xbd, 0x5e, 0xb7, 0x18, 0x6e, 0xb1, 0xe4, - 0xd8, 0x22, 0xb2, 0x9b, 0x6d, 0xa4, 0x4d, 0x0b, 0x37, 0x20, 0xee, 0x47, - 0x09, 0xce, 0x0e, 0x38, 0x85, 0x30, 0x51, 0x31, 0x8e, 0x86, 0x9b, 0xe7, - 0x36, 0x34, 0xb8, 0x34, 0xeb, 0xab, 0xfe, 0xab, 0x82, 0x28, 0x27, 0xff, - 0x1c, 0xe1, 0x43, 0x16, 0xa7, 0x6b, 0x22, 0xa0, 0x73, 0x2c, 0x6d, 0x43, - 0xd3, 0x4c, 0x7a, 0x77, 0x67, 0x74, 0x1a, 0xbc, 0xc7, 0xdf, 0xdf, 0xf1, - 0x7b, 0xb6, 0xf3, 0xa8, 0xcf, 0x7e, 0x25, 0x0c, 0xb4, 0xeb, 0xa7, 0xb1, - 0xf9, 0xe0, 0xb9, 0x29, 0x7f, 0xe4, 0x80, 0xca, 0xd9, 0x11, 0xce, 0x6d, - 0x26, 0xd3, 0x59, 0xeb, 0x63, 0xc0, 0x54, 0x38, 0xdb, 0xa9, 0x10, 0x05, - 0x36, 0x78, 0x71, 0x6a, 0x7c, 0x04, 0xcd, 0x5a, 0x2c, 0xd7, 0x19, 0x35, - 0x87, 0x62, 0xcf, 0xac, 0x37, 0x6d, 0x63, 0x32, 0xf0, 0xf3, 0x3e, 0x65, - 0xb5, 0x6c, 0x2f, 0x2e, 0xb6, 0xd3, 0x33, 0xd0, 0x0a, 0x6a, 0x03, 0x99, - 0x02, 0x45, 0xc0, 0xcb, 0xd0, 0x41, 0x9c, 0xcb, 0x43, 0xb1, 0x5c, 0xc2, - 0x5e, 0x8b, 0x43, 0x3c, 0x31, 0x01, 0xb6, 0x77, 0x9e, 0xa7, 0x41, 0x8f, - 0x10, 0xbf, 0x9b, 0x49, 0xab, 0x1b, 0xa7, 0x25, 0x61, 0x11, 0x66, 0x93, - 0xc8, 0xb6, 0x9a, 0x16, 0x51, 0xc5, 0xd2, 0xe5, 0xfb, 0x9c, 0x0e, 0x13, - 0xcf, 0x92, 0x01, 0x5d, 0x34, 0x2f, 0x85, 0xf0, 0x4e, 0xfa, 0x2a, 0x8a, - 0x94, 0x1b, 0x68, 0x8a, 0x90, 0x92, 0x26, 0x4f, 0x09, 0x1b, 0xc7, 0xa9, - 0xa0, 0xc3, 0x44, 0x28, 0xec, 0x5d, 0xf7, 0xde, 0x2f, 0xee, 0xed, 0xb2, - 0x35, 0xf0, 0x65, 0xe9, 0xb9, 0x0d, 0xee, 0x9c, 0xd4, 0x1a, 0x85, 0x9d, - 0x39, 0x64, 0x98, 0x0a, 0x22, 0xf9, 0x92, 0x97, 0xc3, 0x3f, 0x9e, 0xd3, - 0x1b, 0x94, 0xce, 0xe6, 0x49, 0x3d, 0xc5, 0x8e, 0x45, 0x78, 0x50, 0xfd, - 0x22, 0xe3, 0x7c, 0xc1, 0xe8, 0xb2, 0xd8, 0xc8, 0x86, 0x5e, 0x72, 0xec, - 0xde, 0x96, 0xd8, 0xd5, 0xf0, 0x39, 0x33, 0xdf, 0x17, 0x66, 0xcb, 0x5e, - 0xdb, 0x1a, 0xfb, 0x8d, 0x7d, 0x59, 0x2d, 0x25, 0x15, 0x98, 0xa5, 0xb0, - 0x2f, 0xe7, 0x64, 0xb2, 0x06, 0x75, 0x9d, 0x36, 0x7e, 0x74, 0x78, 0x36, - 0xd8, 0xaa, 0xb8, 0xd9, 0xee, 0x20, 0xf2, 0x63, 0xc8, 0x81, 0x05, 0x83, - 0xe4, 0x76, 0x36, 0x98, 0x5f, 0x0d, 0x7e, 0x58, 0x71, 0x36, 0x01, 0x73, - 0x80, 0xd8, 0x9d, 0x0d, 0x89, 0x1f, 0xc1, 0x2d, 0x92, 0x39, 0xb6, 0xc3, - 0xbd, 0xb5, 0xc3, 0x7d, 0x6c, 0x7e, 0x7b, 0x6b, 0x7e, 0x3b, 0x5f, 0x40, - 0x83, 0x9e, 0xfa, 0x42, 0x80, 0x9b, 0x10, 0x3d, 0xdb, 0xa9, 0x36, 0xe8, - 0x5c, 0x84, 0xe9, 0x62, 0x57, 0x36, 0x47, 0x36, 0xed, 0xbc, 0xa7, 0x43, - 0x37, 0xb5, 0x31, 0xe1, 0xb5, 0x91, 0xd0, 0x6c, 0x3a, 0x56, 0x85, 0x3c, - 0xae, 0x9c, 0x83, 0x53, 0xda, 0xc0, 0xdc, 0x04, 0x34, 0xd3, 0xdb, 0x73, - 0x52, 0x1f, 0xb3, 0xd3, 0xe9, 0x31, 0x41, 0x66, 0x30, 0xd1, 0xa2, 0xfd, - 0xa1, 0x0a, 0xae, 0x24, 0xda, 0xa5, 0xd9, 0x75, 0x3e, 0x06, 0x30, 0x64, - 0xdf, 0xa1, 0xdd, 0x99, 0xfd, 0xd4, 0xce, 0x0b, 0x29, 0x47, 0x53, 0x22, - 0x37, 0x9d, 0x3d, 0x6c, 0x9f, 0x63, 0x64, 0xcf, 0xe5, 0x39, 0xf5, 0x1f, - 0x9e, 0x11, 0xd1, 0x13, 0xaa, 0xc0, 0x44, 0x5d, 0x5f, 0xe2, 0x87, 0xe2, - 0x8a, 0x57, 0xb4, 0x50, 0x05, 0x55, 0xa0, 0x1c, 0x43, 0xf7, 0x97, 0xeb, - 0xda, 0xb0, 0xd5, 0x07, 0xeb, 0x50, 0x89, 0x9e, 0x44, 0x99, 0x9e, 0xec, - 0xa1, 0x84, 0x54, 0x5d, 0xb8, 0xe0, 0x80, 0xc2, 0xbe, 0x1e, 0x77, 0x02, - 0x5f, 0x58, 0x8a, 0xa0, 0x0c, 0x23, 0xab, 0xad, 0xe3, 0x55, 0xda, 0x1a, - 0x74, 0x6e, 0x20, 0x07, 0x6a, 0xb0, 0xc8, 0xd6, 0xb7, 0xec, 0xdc, 0xd4, - 0x19, 0xe2, 0xbd, 0xd4, 0x64, 0x9a, 0x56, 0xa3, 0x79, 0x0d, 0xda, 0x6b, - 0x99, 0xd8, 0x77, 0x67, 0xb7, 0x9b, 0x93, 0xb2, 0x4f, 0x26, 0x17, 0xf9, - 0x7c, 0xf2, 0xfb, 0x9c, 0xb6, 0xa0, 0x8e, 0xc0, 0x73, 0xf2, 0x28, 0x41, - 0x78, 0xa8, 0x21, 0x08, 0xd7, 0x79, 0xd4, 0x22, 0xc6, 0x41, 0x6b, 0x9b, - 0x3a, 0x7f, 0x4d, 0x0f, 0xd5, 0x0f, 0xa0, 0xe5, 0xda, 0x91, 0x7a, 0x86, - 0x0c, 0x45, 0xfe, 0x6b, 0x00, 0xc5, 0x8b, 0x9a, 0xbb, 0x49, 0xdf, 0xce, - 0x8e, 0xaf, 0xd9, 0x96, 0xc3, 0x83, 0xa5, 0x79, 0x15, 0xde, 0xb4, 0x42, - 0x80, 0xc0, 0x72, 0x79, 0xc8, 0x97, 0xf5, 0x11, 0xb8, 0xbd, 0x8e, 0x31, - 0x58, 0x28, 0x05, 0x6a, 0x6d, 0x3d, 0x74, 0x45, 0x04, 0x1a, 0x4d, 0x53, - 0x36, 0x1c, 0xb2, 0xf4, 0xab, 0xb5, 0x5c, 0xc2, 0xf7, 0xc7, 0x0f, 0xef, - 0xf6, 0xc3, 0x6b, 0x6d, 0x60, 0xb0, 0xf1, 0xa7, 0x72, 0xc7, 0xdc, 0xf1, - 0x39, 0xe2, 0x66, 0x4b, 0xd9, 0x58, 0xb6, 0x8b, 0xf3, 0xa2, 0xe4, 0xfe, - 0x23, 0xee, 0x0e, 0xa8, 0x67, 0x12, 0x1e, 0xcd, 0x1d, 0x5d, 0x5e, 0x2f, - 0x68, 0x78, 0x8c, 0x3a, 0xb8, 0xb9, 0xfd, 0xf0, 0xfe, 0xf8, 0x21, 0xa2, - 0xae, 0xc0, 0x5f, 0x6d, 0x27, 0x30, 0x63, 0xdf, 0xb2, 0x08, 0x68, 0xe0, - 0xc9, 0x17, 0xa7, 0xe1, 0xa2, 0x65, 0x6e, 0xbe, 0x68, 0xdf, 0x74, 0x80, - 0x31, 0xf7, 0x20, 0xcf, 0x0d, 0x62, 0xa3, 0x33, 0x69, 0x7b, 0x83, 0x6c, - 0xad, 0x4e, 0x17, 0xff, 0xca, 0x5a, 0x79, 0xc5, 0x8a, 0x91, 0x40, 0x97, - 0x03, 0x81, 0x70, 0x9d, 0x5d, 0xd9, 0xa0, 0x39, 0x71, 0xbe, 0xb6, 0xe9, - 0x71, 0x48, 0xb6, 0xd6, 0xdb, 0xcc, 0x55, 0x0b, 0x66, 0x3c, 0x35, 0xbf, - 0xf0, 0x86, 0x31, 0xf1, 0x4d, 0x35, 0x1a, 0xda, 0xc4, 0xd7, 0x06, 0x9c, - 0xed, 0xc4, 0x9e, 0x77, 0x8b, 0x71, 0xb7, 0x23, 0xb1, 0x5c, 0xa4, 0x10, - 0x23, 0x1f, 0xfe, 0x26, 0x1f, 0xd0, 0x18, 0xee, 0xf7, 0x11, 0x3b, 0xbc, - 0xa4, 0xf6, 0x75, 0x5d, 0xfa, 0x72, 0xd3, 0x4c, 0x58, 0x78, 0xe0, 0xbd, - 0xa2, 0x99, 0x53, 0x79, 0x71, 0x55, 0x29, 0xf0, 0xa1, 0xc8, 0x25, 0xa4, - 0x7f, 0x5d, 0xa8, 0x5d, 0x81, 0xdf, 0x3b, 0x94, 0x53, 0x37, 0xe4, 0xb8, - 0xd5, 0xae, 0x40, 0xeb, 0x67, 0x20, 0xe5, 0xc7, 0xdc, 0x88, 0xc6, 0x40, - 0x21, 0xc6, 0x61, 0xfe, 0xa6, 0x35, 0x95, 0x57, 0x13, 0xc8, 0x0a, 0xdc, - 0x2e, 0xc6, 0x5e, 0xa6, 0x6c, 0xf7, 0x66, 0x3c, 0x1b, 0xd1, 0x49, 0x1b, - 0xaa, 0xdd, 0x4f, 0xf0, 0x71, 0xbc, 0x95, 0xbf, 0x27, 0x75, 0x73, 0xdf, - 0xd3, 0x1f, 0x12, 0xca, 0xdf, 0x02, 0xe0, 0xbd, 0x42, 0x20, 0x6e, 0x1e, - 0xe4, 0x3b, 0xf7, 0x77, 0xf2, 0x32, 0xa9, 0xb4, 0x17, 0x6e, 0xa6, 0x56, - 0xa2, 0x8a, 0x85, 0xc1, 0x46, 0x73, 0x72, 0x43, 0x47, 0x5a, 0x3b, 0x38, - 0x59, 0xf2, 0x07, 0x02, 0x6c, 0xda, 0x14, 0xc8, 0x9a, 0xb8, 0xe5, 0xbe, - 0x8b, 0x5b, 0xa1, 0xa6, 0x56, 0x78, 0xde, 0x61, 0xaa, 0x38, 0x2c, 0xb1, - 0x27, 0x96, 0x87, 0x61, 0x04, 0x13, 0x9a, 0x3a, 0x94, 0x5d, 0xd5, 0x75, - 0xd4, 0xb1, 0x9f, 0x86, 0xec, 0x9c, 0x69, 0xa2, 0x91, 0x3c, 0x7b, 0x3e, - 0x93, 0x3d, 0x05, 0xcc, 0x6b, 0x3f, 0xa4, 0xc9, 0xbc, 0x76, 0x60, 0x4a, - 0x65, 0x2b, 0x15, 0x43, 0xbc, 0xbe, 0x83, 0xd5, 0x76, 0x4a, 0x76, 0xcf, - 0x1c, 0xcd, 0x89, 0x66, 0x51, 0x74, 0x6d, 0x06, 0x99, 0x2d, 0x29, 0x5b, - 0xc8, 0xeb, 0x77, 0xc0, 0x08, 0xab, 0x27, 0x73, 0x9b, 0x8a, 0x7a, 0xff, - 0x6d, 0xf6, 0xb9, 0x4c, 0x76, 0xbb, 0x84, 0x34, 0x29, 0x90, 0x71, 0x30, - 0xaf, 0xdc, 0x53, 0x55, 0xbf, 0x82, 0xa4, 0x4c, 0x26, 0x8a, 0x70, 0x81, - 0x87, 0x5c, 0xc1, 0x6e, 0xab, 0x23, 0xda, 0x72, 0x6d, 0x93, 0x98, 0xfc, - 0x8a, 0x78, 0xf6, 0xa8, 0x67, 0x1c, 0xa0, 0xab, 0xbe, 0xaa, 0x16, 0x6d, - 0xd4, 0x4a, 0x5a, 0x70, 0x67, 0x55, 0x62, 0x57, 0xea, 0x74, 0xba, 0x47, - 0x07, 0x70, 0x2b, 0x49, 0x67, 0xa3, 0xb2, 0x53, 0x0e, 0x45, 0x15, 0xcd, - 0xba, 0x01, 0xfa, 0xc9, 0xea, 0xb3, 0xeb, 0xd7, 0x4a, 0xe8, 0xd3, 0x2e, - 0x3b, 0xfb, 0xec, 0xc5, 0x81, 0x91, 0x0b, 0x4a, 0x8c, 0x57, 0x83, 0xe4, - 0x34, 0x76, 0xed, 0x61, 0xf7, 0x34, 0x81, 0x82, 0xe1, 0x86, 0x6e, 0xed, - 0x57, 0x31, 0x76, 0x72, 0x36, 0x4f, 0x4f, 0xef, 0xe8, 0x64, 0xec, 0xf6, - 0xb8, 0x55, 0xef, 0x1c, 0x07, 0x77, 0x88, 0x44, 0xd3, 0xf6, 0x5d, 0xde, - 0x87, 0xe6, 0xbf, 0x77, 0x7b, 0x78, 0xaf, 0x81, 0x99, 0x80, 0x36, 0x6a, - 0x2a, 0x8f, 0xe5, 0xb1, 0xd2, 0x82, 0x9b, 0x0d, 0xa4, 0xd2, 0x37, 0x2f, - 0x08, 0x19, 0xbf, 0xff, 0x74, 0xfb, 0x31, 0x79, 0xe8, 0x13, 0x81, 0x0c, - 0x9d, 0xa1, 0x59, 0x88, 0x99, 0x51, 0x9b, 0x98, 0x6a, 0x16, 0x81, 0x47, - 0xe4, 0xac, 0x85, 0x59, 0x6e, 0x0d, 0x22, 0xbb, 0x6e, 0x64, 0xc8, 0x71, - 0x27, 0x48, 0xad, 0xce, 0xb9, 0xd8, 0xf8, 0xde, 0x65, 0x12, 0x8a, 0x11, - 0x34, 0x73, 0x2e, 0x9a, 0x59, 0x5e, 0xae, 0x2e, 0xbd, 0xa8, 0xb2, 0xe3, - 0xf8, 0xd2, 0x3a, 0xb7, 0x82, 0x8b, 0xac, 0xab, 0x87, 0x6e, 0x2f, 0xcc, - 0x2f, 0x93, 0x52, 0xea, 0xd3, 0xe9, 0x7c, 0xfa, 0xbb, 0x9a, 0xb8, 0x5e, - 0x12, 0x9d, 0x81, 0xfa, 0x50, 0xe5, 0xa2, 0x3e, 0xb5, 0x66, 0xc8, 0xb8, - 0x86, 0xad, 0x00, 0xea, 0xf2, 0x2e, 0x7c, 0x8c, 0x76, 0x79, 0xb6, 0x1e, - 0xfb, 0xec, 0x1d, 0xf6, 0x39, 0x1c, 0x03, 0x07, 0xf3, 0x12, 0x96, 0xcc, - 0x19, 0xc2, 0xcd, 0x64, 0x5b, 0xc2, 0x62, 0x18, 0xc5, 0xb2, 0x39, 0x9f, - 0xc9, 0x13, 0xef, 0x8a, 0x3c, 0xb3, 0xcc, 0xa7, 0x9e, 0x15, 0x02, 0xc5, - 0xaa, 0x21, 0x9f, 0xbf, 0xf7, 0xd9, 0xa9, 0xb3, 0x00, 0xc4, 0x0a, 0x8b, - 0xd7, 0xe9, 0xb9, 0x8d, 0xf2, 0xcf, 0xe9, 0xe2, 0x06, 0xe5, 0xf9, 0x94, - 0x96, 0xad, 0xf9, 0xe9, 0xaa, 0xf7, 0x9a, 0xdc, 0x5a, 0x5e, 0x71, 0x44, - 0x90, 0xdf, 0x6c, 0xef, 0x3c, 0xd7, 0x39, 0xa6, 0x2f, 0x11, 0x2d, 0x0a, - 0xeb, 0x9a, 0x12, 0x89, 0x3d, 0x70, 0x75, 0x61, 0x15, 0x60, 0x11, 0x56, - 0xca, 0x69, 0x28, 0xa8, 0xf7, 0xaa, 0x0f, 0xea, 0xc2, 0xfa, 0xc7, 0x63, - 0xfa, 0x31, 0x37, 0xea, 0x1c, 0x3f, 0x24, 0x69, 0x54, 0xe0, 0x0f, 0xe9, - 0xb2, 0x99, 0x78, 0xd4, 0x3f, 0x42, 0xfd, 0x2e, 0xa0, 0x33, 0xff, 0x68, - 0xbb, 0x55, 0x40, 0xa7, 0xfc, 0xf4, 0x1a, 0xf9, 0x98, 0x93, 0x03, 0xd1, - 0xef, 0x59, 0x9e, 0x78, 0x43, 0x48, 0xc0, 0x3f, 0xb9, 0xfd, 0x72, 0x8c, - 0xae, 0xa3, 0x5f, 0x5f, 0xcb, 0x56, 0xe6, 0x97, 0x24, 0x62, 0x77, 0x77, - 0xec, 0xee, 0x75, 0x06, 0xa8, 0xbd, 0xaf, 0xe3, 0x3e, 0xcb, 0xca, 0x62, - 0xf6, 0xa1, 0x49, 0x39, 0x6e, 0xff, 0x82, 0x2c, 0xc1, 0x2f, 0x8f, 0xc5, - 0x80, 0x59, 0xed, 0x5d, 0xdf, 0x83, 0xde, 0xfe, 0xb0, 0x9f, 0x38, 0x9c, - 0xad, 0x91, 0xcd, 0x47, 0x9d, 0x39, 0x6f, 0x17, 0xc3, 0x0c, 0x09, 0xd4, - 0x44, 0xa7, 0x4d, 0x22, 0xeb, 0x8e, 0x3a, 0x51, 0x26, 0xc5, 0x09, 0xa5, - 0x3c, 0xf0, 0x62, 0xf0, 0x38, 0x16, 0xfd, 0xb2, 0x98, 0x8b, 0xb8, 0x44, - 0xe0, 0x2a, 0xe2, 0x03, 0x9b, 0xbc, 0x3e, 0x30, 0x3d, 0xa8, 0xa6, 0x99, - 0x74, 0x6d, 0xbe, 0x68, 0x65, 0x55, 0xa9, 0x03, 0xc4, 0xa1, 0xf7, 0x29, - 0xf4, 0xab, 0xfa, 0x87, 0x55, 0x98, 0x8c, 0x4e, 0xcf, 0xd0, 0x0f, 0xb9, - 0x3d, 0xa9, 0x71, 0xa4, 0x23, 0x4f, 0x7e, 0xcc, 0xbd, 0x1a, 0x8c, 0xc4, - 0x9c, 0x12, 0xb1, 0x7d, 0x89, 0x3d, 0xda, 0xe3, 0xac, 0xb3, 0xab, 0xf6, - 0x23, 0x70, 0xb2, 0xb1, 0x72, 0x51, 0xd3, 0xb6, 0x23, 0x4c, 0x6b, 0xaf, - 0x66, 0xd7, 0x58, 0x95, 0x9c, 0xdd, 0x65, 0xfe, 0x80, 0xa9, 0x01, 0x3a, - 0x2b, 0x31, 0x40, 0x0a, 0x9d, 0x46, 0x51, 0x09, 0x2a, 0xe4, 0x10, 0x55, - 0x81, 0x27, 0x04, 0x47, 0x09, 0x5b, 0x71, 0xa6, 0x72, 0xb0, 0x63, 0x82, - 0xd9, 0x59, 0x4b, 0x6f, 0x3f, 0xf5, 0x3b, 0xb0, 0xf2, 0xb8, 0xa2, 0xe4, - 0x40, 0x04, 0x99, 0x3d, 0xb5, 0x9f, 0xbe, 0xe7, 0x39, 0x6c, 0x40, 0x19, - 0x60, 0x83, 0x2f, 0xdb, 0xc5, 0x75, 0x6a, 0x81, 0xa2, 0xf5, 0xd8, 0x39, - 0x7d, 0xc7, 0x91, 0x16, 0x7a, 0xb7, 0xad, 0x39, 0xf7, 0xa4, 0x1f, 0xbb, - 0x60, 0xd0, 0x6e, 0x43, 0x94, 0x4c, 0x6e, 0x41, 0x99, 0xa9, 0x44, 0x11, - 0xc3, 0x35, 0xdd, 0xec, 0x19, 0x51, 0xfb, 0xbd, 0x34, 0x0b, 0xbb, 0x82, - 0x95, 0x72, 0x9f, 0xa6, 0x61, 0x49, 0xe0, 0x6d, 0x07, 0x38, 0xa2, 0xda, - 0x84, 0x22, 0x69, 0x8f, 0x1e, 0xb5, 0x07, 0x64, 0x24, 0x75, 0xa4, 0xd5, - 0x38, 0x34, 0xf8, 0x4d, 0xaa, 0xa1, 0x80, 0xa9, 0x67, 0xc4, 0x7e, 0xa7, - 0x1c, 0x15, 0xc1, 0x17, 0x7b, 0xfa, 0x8a, 0x56, 0x6d, 0x00, 0x13, 0x35, - 0x67, 0x54, 0xed, 0x23, 0x34, 0xff, 0x51, 0xa2, 0xf7, 0xb2, 0xca, 0x6d, - 0xf3, 0x24, 0xe7, 0x3b, 0xe9, 0x71, 0xb6, 0x0c, 0x86, 0x28, 0x81, 0xfd, - 0x3e, 0x0f, 0x38, 0x0a, 0x27, 0x38, 0x39, 0x95, 0x00, 0xcc, 0x86, 0xb0, - 0x01, 0x76, 0x7e, 0xe9, 0xb6, 0xc6, 0xf9, 0xa5, 0x79, 0xe8, 0x79, 0xd1, - 0x60, 0x74, 0xb6, 0x03, 0xda, 0x13, 0x57, 0x98, 0x64, 0x74, 0x0f, 0x03, - 0x5d, 0xbf, 0x69, 0x82, 0xc4, 0x0c, 0x6f, 0x9d, 0x89, 0x3d, 0x78, 0x42, - 0xa5, 0xd4, 0x4a, 0x33, 0x89, 0x76, 0xb5, 0x6d, 0xa3, 0xfc, 0x6a, 0xb8, - 0x33, 0x65, 0x17, 0xe5, 0xb5, 0x38, 0x77, 0xfd, 0xd0, 0x47, 0x14, 0xf9, - 0x3a, 0x7b, 0x47, 0x82, 0xa0, 0xf5, 0x1f, 0xe2, 0x14, 0x4d, 0xc2, 0x47, - 0x43, 0x67, 0xa0, 0xf7, 0x87, 0xe5, 0x77, 0xb3, 0xcc, 0xa1, 0x44, 0x20, - 0x56, 0x72, 0xe0, 0x4a, 0xd0, 0xc7, 0xbc, 0x0d, 0xb0, 0xc7, 0x08, 0x5c, - 0x04, 0x74, 0xc3, 0x89, 0x6f, 0x6b, 0x6c, 0xe2, 0x87, 0xc8, 0xdd, 0x52, - 0x8e, 0x88, 0x00, 0xbe, 0x3f, 0x7e, 0x61, 0xc2, 0xb5, 0x09, 0x0b, 0xe2, - 0x08, 0xf8, 0xbc, 0x07, 0xa0, 0x59, 0xf6, 0x6c, 0x10, 0xfa, 0xee, 0x64, - 0x90, 0x9d, 0x08, 0xcf, 0xe4, 0x70, 0x37, 0x94, 0xbb, 0x80, 0xc2, 0xbf, - 0x53, 0x71, 0x51, 0x7e, 0x6b, 0xf3, 0xa2, 0x52, 0x95, 0xe8, 0x77, 0x14, - 0x93, 0xd7, 0x74, 0xe7, 0x8d, 0xfb, 0x3b, 0xd8, 0x27, 0x76, 0x36, 0xdf, - 0x31, 0x4d, 0x18, 0x52, 0xe4, 0x8b, 0x82, 0x95, 0x5e, 0x39, 0x2c, 0x0a, - 0xac, 0x42, 0xfb, 0xa1, 0x22, 0xb9, 0xfb, 0xe0, 0x4e, 0x60, 0xc8, 0x00, - 0xf1, 0xef, 0x91, 0x2f, 0xf6, 0xf6, 0x8f, 0xc3, 0x83, 0x9a, 0x20, 0x82, - 0xc4, 0xe1, 0x17, 0xf4, 0x53, 0x33, 0x17, 0xcd, 0xd6, 0x8f, 0x38, 0xa5, - 0x35, 0x36, 0xf1, 0x85, 0xc7, 0x10, 0xc5, 0x3b, 0x3a, 0x64, 0xd8, 0xfd, - 0x19, 0xbf, 0xff, 0xb2, 0xf8, 0x1e, 0x2c, 0x7e, 0x78, 0x3f, 0x58, 0x4a, - 0xdd, 0xd4, 0x91, 0xf7, 0x9a, 0xfa, 0xbc, 0x17, 0xe6, 0x8d, 0x7d, 0xfc, - 0x77, 0x52, 0x61, 0x68, 0xeb, 0x36, 0x76, 0xc4, 0x4f, 0xdf, 0x12, 0x3a, - 0x75, 0xb8, 0x77, 0x6e, 0x1c, 0x42, 0xea, 0xcc, 0x48, 0x6a, 0xc2, 0x2a, - 0x8c, 0x83, 0xa6, 0xf3, 0x50, 0x1b, 0x38, 0x75, 0x84, 0x7e, 0x46, 0x0f, - 0x78, 0xba, 0x8d, 0xb4, 0x29, 0xe5, 0x79, 0xf6, 0x15, 0xd6, 0xa9, 0x31, - 0x84, 0x7a, 0xd6, 0x55, 0x39, 0x20, 0x97, 0x52, 0xe3, 0x14, 0x20, 0x6f, - 0x6e, 0x9c, 0xe7, 0xab, 0x76, 0x51, 0xaa, 0x43, 0xbe, 0x49, 0x55, 0xa6, - 0x2b, 0x7e, 0x29, 0x4a, 0x52, 0x11, 0x73, 0x9d, 0xd4, 0xfd, 0x55, 0xe0, - 0x44, 0x95, 0xeb, 0xfc, 0x87, 0x64, 0xd1, 0x1d, 0xd3, 0xa2, 0x53, 0x3a, - 0xce, 0x2c, 0x4b, 0xdc, 0xbd, 0x29, 0x71, 0xaf, 0xa5, 0xf4, 0x53, 0xcf, - 0x0a, 0xbf, 0x7d, 0xb3, 0x41, 0x50, 0x13, 0x8e, 0xa2, 0xb3, 0xd0, 0xe2, - 0x8b, 0x23, 0x65, 0xd5, 0xf4, 0xbd, 0xc8, 0x1f, 0xfe, 0x74, 0xf4, 0x9d, - 0x79, 0x2c, 0x76, 0xb4, 0x67, 0x01, 0xd4, 0xcc, 0x22, 0x6e, 0x42, 0x6a, - 0x8a, 0x8d, 0x39, 0x83, 0x79, 0xc6, 0x3c, 0x48, 0x5c, 0xb8, 0x9e, 0xf5, - 0x1d, 0xd6, 0xf4, 0x5e, 0x40, 0x95, 0xc3, 0x97, 0x14, 0x2a, 0x68, 0xd6, - 0x34, 0x1d, 0x28, 0xc7, 0x2c, 0x72, 0x46, 0x75, 0x22, 0x0c, 0xf7, 0x1f, - 0x75, 0xbe, 0x7c, 0xd4, 0xf8, 0xe2, 0xc2, 0x2b, 0x8d, 0x5f, 0x92, 0xb6, - 0x22, 0xca, 0xb8, 0x61, 0xfb, 0xc4, 0xff, 0x34, 0xfb, 0x1e, 0xda, 0x13, - 0xd7, 0xbb, 0xd8, 0x1a, 0xa0, 0x54, 0x89, 0x3b, 0xa6, 0x15, 0x2c, 0xb1, - 0x67, 0x21, 0x1c, 0x2e, 0x7d, 0xeb, 0x06, 0xf4, 0x25, 0x9a, 0x1b, 0x55, - 0x8d, 0x78, 0x4e, 0x3e, 0xc2, 0xe1, 0xe6, 0xef, 0x73, 0x16, 0x64, 0xef, - 0x0f, 0xc2, 0x59, 0xc4, 0x33, 0x4e, 0x57, 0x35, 0xb3, 0x7e, 0xba, 0x32, - 0xd5, 0x3c, 0xbc, 0x86, 0xb9, 0xac, 0x65, 0x19, 0xfb, 0x6e, 0xdf, 0x13, - 0xdb, 0x68, 0xa0, 0x0b, 0xfb, 0x9e, 0x27, 0xf3, 0xef, 0xb9, 0xa8, 0xf7, - 0x79, 0x52, 0x87, 0x67, 0xc4, 0x73, 0x59, 0x9b, 0xe9, 0x87, 0x31, 0x1b, - 0xc9, 0xb3, 0x1f, 0x2c, 0xb8, 0xa0, 0xea, 0x92, 0x5b, 0x7d, 0xca, 0x53, - 0x59, 0x02, 0x33, 0x4c, 0x55, 0x41, 0x5f, 0xd4, 0xe4, 0x5e, 0xa9, 0x22, - 0xf9, 0x62, 0x69, 0xd5, 0xc1, 0xed, 0x52, 0x6d, 0xd6, 0x3a, 0x5e, 0x99, - 0x19, 0x67, 0x6d, 0x3c, 0xf2, 0xc2, 0x64, 0xbd, 0x97, 0xf5, 0xac, 0xe2, - 0xd3, 0x2d, 0xcd, 0x99, 0xd7, 0xc3, 0x28, 0xd3, 0xa6, 0x7e, 0x17, 0x7e, - 0x98, 0x99, 0xb3, 0xae, 0x86, 0xcd, 0xcb, 0x97, 0xbe, 0x09, 0x5f, 0xc6, - 0xbe, 0x92, 0xe5, 0x7a, 0x17, 0x45, 0xc4, 0x2b, 0xb5, 0xa8, 0x6a, 0x9c, - 0xc0, 0x73, 0x93, 0x6a, 0x5e, 0x2d, 0x39, 0x04, 0x48, 0x7b, 0x36, 0x33, - 0xb4, 0xb1, 0xf0, 0x4b, 0xd1, 0x58, 0x46, 0x21, 0x6c, 0xbb, 0xb1, 0xb9, - 0xc1, 0x45, 0x1e, 0xcd, 0x71, 0xa1, 0x8c, 0x70, 0x0e, 0x97, 0x4a, 0x02, - 0x84, 0x17, 0x62, 0x44, 0x27, 0x08, 0x13, 0x11, 0xde, 0x14, 0x20, 0xb5, - 0x7e, 0xe7, 0xc6, 0xb4, 0x00, 0x0f, 0x6d, 0x57, 0xd4, 0x75, 0xe3, 0x17, - 0x4f, 0xe8, 0x09, 0x6c, 0x62, 0xa1, 0x05, 0x0d, 0xea, 0xe7, 0xa4, 0x1d, - 0x43, 0x48, 0x86, 0xd1, 0x2b, 0x77, 0x7e, 0xb3, 0x09, 0xd7, 0x95, 0x44, - 0x73, 0x18, 0x29, 0xbe, 0xab, 0x37, 0x79, 0x2a, 0x92, 0xa4, 0xa1, 0xcb, - 0x2c, 0xb5, 0xa1, 0x7c, 0x21, 0xaf, 0x2f, 0x94, 0x11, 0xca, 0x79, 0x5a, - 0x78, 0x4d, 0x12, 0x68, 0xa7, 0xd4, 0x06, 0xde, 0x4d, 0x88, 0xe3, 0x2d, - 0xe1, 0xa3, 0x99, 0x46, 0x3e, 0xad, 0x3c, 0x28, 0x21, 0xd5, 0x7e, 0x21, - 0x21, 0xfb, 0x3b, 0xa1, 0xe6, 0xc4, 0xfb, 0x35, 0x75, 0x05, 0xf6, 0xe0, - 0xb7, 0xa5, 0xb4, 0xa5, 0x8e, 0x11, 0x3b, 0x0b, 0x2b, 0x91, 0x4e, 0xc1, - 0xe7, 0x47, 0x5c, 0x7d, 0x27, 0x42, 0x9c, 0x35, 0xb1, 0x21, 0x89, 0x48, - 0x3c, 0xbc, 0xc5, 0x42, 0xa0, 0xbc, 0x05, 0x62, 0x3d, 0x63, 0x0d, 0x81, - 0xef, 0xb0, 0x28, 0xa5, 0xa3, 0x17, 0x74, 0x4e, 0x54, 0xbf, 0x88, 0x8c, - 0xdc, 0xd2, 0x97, 0x9c, 0x10, 0xb0, 0x95, 0x8f, 0x37, 0x88, 0x21, 0x32, - 0x75, 0xaf, 0x55, 0x77, 0x16, 0xa6, 0xf2, 0x68, 0x02, 0x3a, 0x61, 0xef, - 0x85, 0x87, 0x78, 0x41, 0x7a, 0xbf, 0x42, 0x56, 0x83, 0x41, 0x85, 0x25, - 0xb7, 0x9e, 0xd5, 0x5c, 0x2c, 0x15, 0xc9, 0xce, 0x41, 0xe5, 0x0f, 0x1b, - 0x0f, 0x93, 0xc9, 0xa7, 0x85, 0x24, 0xb2, 0xc3, 0x7d, 0x40, 0x3f, 0x6a, - 0x37, 0x7d, 0x09, 0x3c, 0x13, 0xe9, 0x4c, 0x6d, 0x8e, 0x9b, 0xf1, 0x92, - 0x7c, 0x03, 0x26, 0x72, 0x88, 0x27, 0xd4, 0xda, 0xbd, 0xee, 0xbb, 0x51, - 0x44, 0x9a, 0x3a, 0x12, 0xee, 0xcb, 0x7c, 0x31, 0xae, 0x2b, 0x3f, 0x47, - 0x00, 0x30, 0x05, 0x92, 0x8f, 0x4b, 0x44, 0x0a, 0xc7, 0xa1, 0x02, 0xda, - 0xd1, 0x00, 0xa2, 0x8a, 0xe0, 0x06, 0xc3, 0xa2, 0x9e, 0xeb, 0x12, 0x3e, - 0xe6, 0xa0, 0xcd, 0x22, 0x6e, 0x1e, 0xd9, 0x74, 0x87, 0xc4, 0x2c, 0x21, - 0x8a, 0x3c, 0x25, 0xa4, 0x04, 0xfa, 0x80, 0x10, 0xe8, 0x05, 0xb8, 0xd9, - 0xb5, 0x22, 0xe7, 0x31, 0x09, 0xfb, 0x69, 0x93, 0x49, 0x3f, 0x71, 0x0a, - 0xd6, 0x2e, 0xe2, 0xa2, 0x59, 0xc0, 0xb3, 0x41, 0x95, 0x13, 0xe1, 0xfb, - 0xd3, 0xed, 0x3b, 0xdc, 0xce, 0x26, 0x3d, 0x37, 0xb1, 0xdb, 0xb5, 0x06, - 0xec, 0x79, 0x18, 0xd7, 0x12, 0x09, 0xbf, 0xcb, 0xed, 0xaf, 0xf8, 0xd8, - 0xe8, 0xfd, 0xb7, 0xd1, 0x39, 0x8f, 0xcc, 0xc7, 0x6f, 0xf1, 0x8b, 0xcb, - 0xce, 0xfb, 0x66, 0x44, 0xfb, 0x7c, 0x0e, 0x89, 0x6a, 0x49, 0x52, 0x7b, - 0x04, 0x40, 0x31, 0x4f, 0xc1, 0x3c, 0x22, 0x3b, 0x33, 0x04, 0x29, 0x37, - 0x28, 0xa5, 0x5c, 0x66, 0x42, 0xd9, 0x22, 0xd9, 0x22, 0x8f, 0xcb, 0xbe, - 0xb6, 0x2d, 0x5c, 0x5e, 0xe1, 0xed, 0x08, 0x16, 0x13, 0xb6, 0xa8, 0xb1, - 0xe9, 0x40, 0x49, 0x9a, 0x9e, 0x46, 0x48, 0xca, 0xe6, 0x16, 0x40, 0x7d, - 0x05, 0x61, 0x4b, 0x3a, 0x38, 0x3c, 0x1c, 0xc9, 0xba, 0xaf, 0x24, 0x5e, - 0xe3, 0xb2, 0x70, 0x07, 0xae, 0x33, 0xc1, 0x30, 0x58, 0x32, 0xcd, 0x1f, - 0x48, 0x61, 0x34, 0xc4, 0x2e, 0x1c, 0x4e, 0x00, 0x78, 0xc1, 0x90, 0x17, - 0x09, 0x57, 0x51, 0x5c, 0x55, 0x14, 0x3d, 0x0c, 0x98, 0x61, 0x79, 0xca, - 0xb7, 0x97, 0xb6, 0x35, 0x2a, 0xae, 0x95, 0x4e, 0xbf, 0xea, 0x27, 0x9b, - 0x72, 0x4f, 0x18, 0x34, 0x5d, 0x8b, 0x7f, 0xc6, 0xc6, 0x17, 0x5b, 0x5e, - 0xbe, 0xe8, 0xda, 0x67, 0x05, 0x4c, 0x65, 0xbe, 0xc8, 0x0a, 0x5d, 0xce, - 0x0a, 0x9c, 0x0a, 0x75, 0x98, 0xb2, 0x3c, 0x0c, 0x3b, 0x99, 0x43, 0x8c, - 0x1c, 0xcd, 0x10, 0xca, 0xc2, 0x53, 0x45, 0x61, 0x2f, 0x28, 0xc9, 0xd8, - 0xa1, 0x04, 0x28, 0x01, 0xb9, 0x57, 0xcc, 0x33, 0x05, 0xe2, 0xb8, 0x06, - 0x74, 0xae, 0xff, 0xd6, 0xfb, 0x27, 0xf2, 0x2f, 0x82, 0x43, 0x89, 0x99, - 0x15, 0x4d, 0x85, 0xa2, 0x87, 0x07, 0x98, 0xf7, 0x30, 0x06, 0xce, 0x0d, - 0x15, 0x46, 0xe6, 0x45, 0x58, 0xce, 0x8e, 0xea, 0xc7, 0x7b, 0x97, 0x81, - 0x1c, 0x5a, 0xdb, 0xba, 0x9c, 0x33, 0x0f, 0xd1, 0x2a, 0xd9, 0xa9, 0x76, - 0x4e, 0x79, 0x2d, 0x55, 0xb6, 0x15, 0xd0, 0x32, 0x16, 0xf6, 0x6c, 0x23, - 0x75, 0x01, 0xf4, 0x6d, 0xb2, 0x0c, 0x7d, 0x64, 0xb6, 0x34, 0x92, 0x79, - 0xc0, 0xce, 0x31, 0x70, 0xac, 0x0b, 0x15, 0xd5, 0x62, 0xce, 0x8b, 0xe0, - 0x59, 0x94, 0x73, 0x38, 0xd1, 0xdb, 0x18, 0x7c, 0x1d, 0xa8, 0x94, 0x22, - 0x2d, 0x2e, 0x2b, 0x55, 0xca, 0xca, 0x71, 0x38, 0x71, 0x4f, 0xcc, 0x1a, - 0x0c, 0x56, 0x77, 0x6e, 0xf9, 0xa9, 0x7b, 0xe4, 0x04, 0x51, 0x34, 0x4f, - 0x36, 0xa7, 0x4a, 0x50, 0xa9, 0xf4, 0x7c, 0x44, 0xf1, 0x6c, 0x9b, 0x6b, - 0x3e, 0x9d, 0xaa, 0x24, 0x58, 0x74, 0xc5, 0xac, 0xa6, 0xc7, 0x41, 0xad, - 0x4d, 0x02, 0xa7, 0x28, 0x6f, 0x48, 0x7a, 0xee, 0x40, 0x85, 0x7b, 0xa4, - 0x2c, 0x0e, 0xbd, 0x4a, 0xc1, 0xc6, 0x3c, 0x37, 0xa8, 0xe6, 0x53, 0x43, - 0x33, 0x63, 0xac, 0x4a, 0xd8, 0xd4, 0x4d, 0x1b, 0x22, 0x10, 0xba, 0xad, - 0x39, 0xf9, 0x5d, 0x23, 0xfa, 0x5d, 0x0b, 0xe7, 0xbb, 0x3a, 0xfd, 0xae, - 0x46, 0xb5, 0xc7, 0xb8, 0x55, 0x88, 0xc3, 0xa0, 0x6a, 0x7a, 0xe7, 0x43, - 0x0d, 0x78, 0x85, 0xbd, 0x4b, 0xa4, 0xad, 0x52, 0x08, 0xd2, 0xc6, 0xfd, - 0x61, 0x34, 0x5d, 0xec, 0x21, 0xde, 0x29, 0x6e, 0x97, 0xf4, 0x21, 0x42, - 0x35, 0x11, 0x15, 0x5c, 0xf1, 0x99, 0xcf, 0x49, 0x24, 0x71, 0x0a, 0x46, - 0x74, 0xdb, 0xf0, 0x84, 0x4f, 0x98, 0xed, 0x90, 0xe8, 0x84, 0xd8, 0xcd, - 0x0a, 0x21, 0xe9, 0x43, 0xc4, 0xac, 0xce, 0x2c, 0xee, 0x7c, 0x5f, 0x83, - 0xaf, 0x96, 0xd8, 0x40, 0x14, 0x0b, 0x61, 0xc4, 0x1c, 0xbe, 0x4f, 0x10, - 0xa7, 0x0a, 0x82, 0x07, 0x89, 0xa0, 0x85, 0xac, 0x98, 0x45, 0x07, 0x57, - 0x00, 0x14, 0x1f, 0x29, 0xc8, 0x8a, 0x0c, 0x20, 0xe1, 0x90, 0x84, 0x47, - 0x33, 0xd4, 0xb6, 0xae, 0x6e, 0x27, 0xe3, 0x5b, 0xa7, 0x92, 0x2f, 0xa3, - 0x05, 0x97, 0x07, 0x81, 0xc2, 0x72, 0x0e, 0x79, 0x6d, 0x64, 0xf4, 0xe4, - 0x17, 0xf0, 0x90, 0xaf, 0xe7, 0x8b, 0x59, 0xc1, 0xd7, 0x31, 0xf7, 0xf1, - 0x79, 0x0c, 0xb2, 0xf2, 0x4d, 0xc3, 0x95, 0xf7, 0xc1, 0x9c, 0xe5, 0x6b, - 0x9d, 0xed, 0xb2, 0x09, 0x02, 0x2e, 0xd7, 0xa0, 0xba, 0xa7, 0x02, 0x9c, - 0x2e, 0xcd, 0x66, 0x3f, 0x16, 0xe8, 0x1c, 0xcb, 0xbc, 0xb3, 0xf6, 0xc8, - 0x5b, 0x84, 0x84, 0xbb, 0xbb, 0x31, 0x32, 0xb5, 0xed, 0x7d, 0x05, 0xa7, - 0xd5, 0x63, 0x05, 0xb3, 0xbc, 0xe0, 0xbd, 0x1b, 0x52, 0x0a, 0x78, 0x12, - 0xf3, 0xa3, 0xaf, 0x47, 0x38, 0x40, 0x56, 0x58, 0x00, 0x4a, 0xf6, 0x25, - 0xf2, 0xf5, 0x19, 0xec, 0x5b, 0x4d, 0x77, 0x51, 0x49, 0xa6, 0x24, 0x5c, - 0xee, 0xc9, 0x80, 0x85, 0xb7, 0x86, 0xdd, 0xda, 0x06, 0xa7, 0x22, 0x74, - 0xbe, 0x49, 0x5f, 0x11, 0x37, 0xa6, 0xfd, 0xc1, 0x35, 0x18, 0xe8, 0x2c, - 0x51, 0x42, 0xc0, 0x5f, 0xf2, 0xf5, 0xf1, 0x15, 0x15, 0x04, 0x68, 0x75, - 0xd9, 0x03, 0x53, 0x8a, 0x22, 0x71, 0x9e, 0x98, 0x1b, 0xb8, 0x80, 0xae, - 0x84, 0xd6, 0x1e, 0x8b, 0xe1, 0x3c, 0x5c, 0xfb, 0x1e, 0xad, 0x96, 0x3d, - 0xbe, 0x9d, 0x17, 0xb8, 0x2c, 0x4e, 0xfa, 0x90, 0xdb, 0xa4, 0x38, 0xc7, - 0x35, 0x71, 0xa0, 0x23, 0xe2, 0xa8, 0x07, 0x03, 0x77, 0x5c, 0xd0, 0xbe, - 0x98, 0xde, 0xb6, 0x30, 0xe1, 0xbd, 0xef, 0xbb, 0x2f, 0x6a, 0x8b, 0x1e, - 0x01, 0x4e, 0xf9, 0xbd, 0x57, 0x3b, 0x0e, 0x55, 0xb7, 0xac, 0x0d, 0xa2, - 0x76, 0x6d, 0x2a, 0x8f, 0x4a, 0xae, 0xa6, 0xed, 0x50, 0x9c, 0xdc, 0x1a, - 0x74, 0x75, 0x2b, 0x22, 0x4e, 0x79, 0x80, 0x83, 0x57, 0x61, 0x85, 0x33, - 0x06, 0x80, 0x6c, 0xdf, 0x35, 0x31, 0xb8, 0xf3, 0x16, 0xf1, 0xa2, 0xd8, - 0x6e, 0x7e, 0xc6, 0x77, 0x8f, 0xcb, 0xb9, 0x06, 0xf2, 0xe2, 0x5a, 0x44, - 0x23, 0xcf, 0x6a, 0x49, 0xb7, 0x89, 0xad, 0xb9, 0xe8, 0xb4, 0xc9, 0x5e, - 0x07, 0x3c, 0xa6, 0xe0, 0x36, 0x2c, 0x0c, 0xc5, 0x46, 0xdc, 0x6e, 0x71, - 0x32, 0x43, 0x4c, 0x11, 0xb2, 0x82, 0xbb, 0xa4, 0xee, 0x89, 0x91, 0xe1, - 0xe6, 0x7c, 0xd8, 0xe6, 0xb5, 0x9b, 0x84, 0x47, 0xdb, 0x70, 0x30, 0x27, - 0x36, 0x2c, 0xa5, 0x17, 0xab, 0xde, 0x76, 0xf8, 0xa7, 0x23, 0x0e, 0xd2, - 0xee, 0x5c, 0x22, 0xe2, 0xeb, 0x7e, 0x44, 0xb3, 0x66, 0xd1, 0x96, 0x2d, - 0x21, 0xb0, 0x42, 0xb8, 0x1c, 0x61, 0xaa, 0x2c, 0xe0, 0x2d, 0xcf, 0x70, - 0x95, 0x23, 0x81, 0xa7, 0xf3, 0x4f, 0xf9, 0xc4, 0x2b, 0x93, 0x95, 0x60, - 0xb0, 0xaa, 0x84, 0x56, 0x76, 0x1c, 0x9c, 0xae, 0x42, 0xbc, 0x38, 0x57, - 0x81, 0x0e, 0x8f, 0xee, 0xbc, 0xcd, 0x88, 0xaf, 0x9a, 0xcc, 0xae, 0x54, - 0xd7, 0xca, 0xa4, 0xf8, 0x13, 0x38, 0xc2, 0xc4, 0x42, 0x8b, 0xe3, 0xbe, - 0x47, 0x0b, 0x21, 0xb8, 0xbc, 0x1a, 0xcc, 0x1d, 0x46, 0x7a, 0x76, 0xf7, - 0x07, 0xbb, 0x7b, 0xb6, 0x7d, 0xe8, 0xf0, 0xf6, 0xdd, 0xd1, 0x73, 0x6c, - 0x78, 0x9f, 0xaf, 0x52, 0x88, 0x8f, 0x26, 0xf0, 0x5e, 0xda, 0x1d, 0x77, - 0xe4, 0xc6, 0xac, 0xdf, 0x23, 0x22, 0x27, 0xa4, 0xc8, 0x39, 0xbf, 0xf6, - 0x33, 0x2b, 0x19, 0xb8, 0xd6, 0xc6, 0xdc, 0xc8, 0xfe, 0x7e, 0xf1, 0x7a, - 0x3d, 0xd0, 0x45, 0xf1, 0xa6, 0x50, 0xf4, 0xdc, 0x51, 0x9b, 0x3e, 0x77, - 0x83, 0xcf, 0x9f, 0x21, 0x39, 0xa1, 0xb3, 0xef, 0xbf, 0x6d, 0xbf, 0x47, - 0xdb, 0x2f, 0x41, 0xf5, 0x36, 0xa0, 0x87, 0x00, 0x9f, 0x95, 0x00, 0x88, - 0xbf, 0x24, 0x25, 0xbe, 0x4e, 0xe5, 0x4e, 0x6d, 0x55, 0x09, 0xbb, 0xda, - 0xa8, 0x7f, 0xac, 0x13, 0x32, 0xc7, 0x78, 0x76, 0xf7, 0x90, 0x3f, 0x9a, - 0x47, 0xfe, 0x6c, 0x1e, 0xd9, 0xd5, 0x38, 0xdf, 0xbe, 0xeb, 0x68, 0xe2, - 0x80, 0xed, 0x75, 0x1b, 0xee, 0xea, 0xd4, 0xfa, 0x0c, 0xea, 0x6a, 0x95, - 0xb5, 0x6d, 0x4b, 0xbd, 0xb0, 0x1f, 0xfe, 0x45, 0x30, 0xd0, 0x05, 0xc6, - 0x22, 0xd1, 0xc8, 0x96, 0x7f, 0xee, 0xb2, 0x1e, 0x43, 0x5b, 0xa6, 0x66, - 0xdd, 0x8e, 0x38, 0x5b, 0x0c, 0xc6, 0x39, 0xb2, 0x52, 0xfd, 0xa1, 0xa0, - 0xe3, 0xa4, 0x2d, 0x04, 0x82, 0x48, 0x9e, 0xdc, 0x3d, 0x1c, 0xaf, 0x47, - 0x34, 0x86, 0xdc, 0xb4, 0x69, 0x82, 0x71, 0x2b, 0x85, 0x88, 0x41, 0xcd, - 0x0a, 0xf2, 0x9e, 0x14, 0xc8, 0x7f, 0x45, 0xd1, 0x94, 0xf3, 0x9e, 0x6b, - 0x59, 0x79, 0xaf, 0x84, 0xbb, 0x76, 0x44, 0x15, 0x38, 0x25, 0x69, 0xc2, - 0x30, 0x0c, 0x3d, 0x14, 0xe6, 0xd3, 0x15, 0x78, 0x3c, 0x47, 0xbf, 0x8f, - 0x07, 0xe9, 0x64, 0x70, 0x36, 0x34, 0xe9, 0x61, 0x64, 0xe7, 0xff, 0x88, - 0xc9, 0x2d, 0x11, 0x7a, 0x89, 0x72, 0xef, 0x87, 0xe5, 0x77, 0x9c, 0x7a, - 0xcb, 0xfb, 0x36, 0xf6, 0xbb, 0xea, 0xd5, 0x46, 0x72, 0x1e, 0x6c, 0x9d, - 0x87, 0xfb, 0x1f, 0xe5, 0xe9, 0xf1, 0x48, 0xb7, 0x49, 0xe3, 0x49, 0x85, - 0x6d, 0x28, 0x53, 0xce, 0x40, 0xb4, 0x32, 0x89, 0xde, 0xa9, 0x13, 0x15, - 0x79, 0x77, 0x68, 0xec, 0x39, 0x24, 0xf2, 0x36, 0xd0, 0xd1, 0x0c, 0x35, - 0xdf, 0x07, 0x5e, 0xe2, 0xdc, 0xda, 0x8c, 0x6d, 0xbb, 0x2e, 0x1c, 0xe5, - 0x4b, 0xbd, 0x16, 0x2d, 0x9c, 0xee, 0x41, 0x40, 0x29, 0x57, 0xf9, 0x2a, - 0x2e, 0x7a, 0x08, 0x21, 0xd9, 0x57, 0xe1, 0x9f, 0x16, 0x54, 0x04, 0x78, - 0xaa, 0x1c, 0x29, 0xa1, 0x23, 0xfd, 0x09, 0xa8, 0x00, 0xdb, 0x06, 0xf9, - 0x7d, 0x2a, 0xd7, 0xef, 0x18, 0x56, 0x24, 0xd5, 0xcd, 0xa0, 0x74, 0xa4, - 0x0c, 0x2e, 0xeb, 0x23, 0xa1, 0x5c, 0x88, 0x95, 0x82, 0x12, 0x1d, 0x6e, - 0x9d, 0x94, 0x17, 0x0d, 0x52, 0xe5, 0x9c, 0xca, 0x7f, 0x45, 0x96, 0x9e, - 0x4b, 0xd4, 0x55, 0x41, 0xba, 0xf9, 0x95, 0x0b, 0xc6, 0xf1, 0x95, 0x94, - 0xbf, 0x6f, 0x16, 0xce, 0x5c, 0xbb, 0x43, 0x65, 0x5f, 0x45, 0x8e, 0x5e, - 0x45, 0xc7, 0x8f, 0xa6, 0x81, 0x92, 0x5e, 0x53, 0xe9, 0xd7, 0x7c, 0x31, - 0x41, 0xfd, 0x9e, 0xab, 0xfb, 0x9f, 0x44, 0xf0, 0xa3, 0xbb, 0xef, 0x44, - 0xea, 0x8a, 0xe7, 0x8b, 0xc6, 0x26, 0x52, 0x3f, 0x90, 0x31, 0x43, 0x71, - 0xb5, 0xc1, 0x78, 0xca, 0x44, 0xe6, 0x68, 0x40, 0xc5, 0x4c, 0xec, 0x69, - 0xe7, 0x0c, 0x21, 0x81, 0xe1, 0xf3, 0xc3, 0xf1, 0xba, 0xfc, 0x24, 0x4e, - 0x85, 0xe7, 0x8b, 0x05, 0xa7, 0x13, 0x7a, 0xca, 0x05, 0xc4, 0x2b, 0x0e, - 0x44, 0x2d, 0x4c, 0xc8, 0x0c, 0x22, 0x38, 0x8a, 0x4d, 0x70, 0xa0, 0x01, - 0xfa, 0x0b, 0x05, 0x91, 0xaa, 0xad, 0xe0, 0xb2, 0xc7, 0x05, 0xa8, 0x90, - 0x54, 0x70, 0x57, 0xf1, 0x3d, 0xdd, 0xf3, 0x8f, 0xbe, 0x5f, 0x1a, 0x4a, - 0x2a, 0x8a, 0xc2, 0xad, 0xd0, 0x1b, 0x1b, 0x77, 0xde, 0x2a, 0xb8, 0xfb, - 0x62, 0x45, 0xa5, 0x39, 0x68, 0x1f, 0xe6, 0xe7, 0x39, 0x77, 0x87, 0xb5, - 0x47, 0x99, 0x22, 0x24, 0x62, 0xb5, 0x13, 0x32, 0x6d, 0x26, 0x30, 0x53, - 0xb6, 0x04, 0x49, 0xcb, 0x42, 0xe0, 0xe2, 0xbe, 0x12, 0x8c, 0xde, 0xa5, - 0x0b, 0x6a, 0xfd, 0x4b, 0x5c, 0x17, 0xb3, 0xdd, 0xce, 0x3e, 0xe5, 0x86, - 0xf5, 0x18, 0x05, 0xb0, 0x47, 0xe6, 0xe4, 0x54, 0x75, 0x66, 0x26, 0x2f, - 0xde, 0x8c, 0x00, 0xd2, 0x12, 0xf5, 0x65, 0x46, 0xfb, 0x92, 0x77, 0x3e, - 0xb4, 0xc2, 0xd7, 0x23, 0xe1, 0xec, 0x65, 0xc4, 0x1c, 0xbb, 0xa0, 0x15, - 0x2d, 0xda, 0x5c, 0x00, 0xda, 0x39, 0x65, 0x9b, 0xb5, 0x07, 0x0a, 0xba, - 0x2d, 0xca, 0x7c, 0x96, 0xcb, 0x63, 0xe1, 0x95, 0x6b, 0x82, 0xb2, 0x6a, - 0x8f, 0x1a, 0x4c, 0xef, 0xad, 0x82, 0x79, 0x09, 0x7f, 0x9e, 0xc7, 0xc1, - 0xe4, 0x68, 0x54, 0xfd, 0xe5, 0xfc, 0x50, 0xa3, 0x00, 0x4d, 0x79, 0x8f, - 0x38, 0x69, 0x33, 0x43, 0x54, 0xd5, 0x54, 0x13, 0xdb, 0x9a, 0x53, 0xa1, - 0x15, 0x84, 0xcc, 0xe6, 0x6a, 0x50, 0xbb, 0x27, 0x1d, 0xd1, 0x10, 0x66, - 0x77, 0x8a, 0x61, 0x4b, 0xcf, 0x6e, 0xc3, 0xeb, 0xe1, 0x15, 0xae, 0xb8, - 0xef, 0x15, 0x67, 0x55, 0xc0, 0xc7, 0x23, 0x35, 0xaf, 0x63, 0x27, 0x89, - 0xf8, 0x9c, 0x4e, 0x23, 0x96, 0xa6, 0xa3, 0x72, 0xbc, 0xb6, 0xf3, 0xde, - 0x23, 0x73, 0xf6, 0x10, 0xa9, 0x22, 0x6b, 0x9f, 0x8b, 0x76, 0x0c, 0xba, - 0x49, 0x24, 0xcb, 0xac, 0xfd, 0xe1, 0xd9, 0x7b, 0x87, 0x91, 0x23, 0xfb, - 0x74, 0xe5, 0x72, 0x76, 0x7e, 0xd4, 0x40, 0x69, 0x75, 0x53, 0x1f, 0x38, - 0x7b, 0xc6, 0x57, 0xa9, 0xe6, 0x75, 0xf3, 0xe6, 0xa5, 0x6a, 0x5d, 0x30, - 0xdc, 0x0e, 0xae, 0x42, 0x66, 0x5e, 0x96, 0x20, 0x89, 0xe6, 0x4f, 0x51, - 0x61, 0xa6, 0xad, 0x86, 0x82, 0x61, 0x14, 0xb3, 0xca, 0x38, 0xdf, 0x38, - 0xae, 0x61, 0x0f, 0x25, 0x71, 0x49, 0x88, 0x49, 0x89, 0x0b, 0x37, 0x6f, - 0xe9, 0x6d, 0x5b, 0x49, 0xbd, 0x81, 0xfb, 0x90, 0x4a, 0x62, 0x29, 0x55, - 0x7d, 0xa3, 0x92, 0x47, 0x42, 0xd9, 0x29, 0x5f, 0x26, 0x3a, 0x2a, 0xba, - 0x63, 0xf3, 0x61, 0x15, 0xc5, 0x0b, 0x0e, 0x86, 0x7e, 0xfc, 0x70, 0x0a, - 0xea, 0x3a, 0x0e, 0xc5, 0x67, 0x8e, 0xdf, 0xc1, 0x3b, 0x70, 0x77, 0x4b, - 0xac, 0x22, 0xa0, 0xc8, 0x78, 0xa0, 0x53, 0x5f, 0x74, 0x66, 0xd7, 0x80, - 0x7e, 0xf2, 0x06, 0xa6, 0x35, 0x99, 0xe3, 0xe4, 0x93, 0xbe, 0x7b, 0x34, - 0x1d, 0x0f, 0x25, 0x1a, 0xd1, 0x67, 0x1d, 0x8b, 0x11, 0xc9, 0xdf, 0x3a, - 0x6d, 0xe7, 0x48, 0x39, 0x3f, 0x4d, 0x22, 0x97, 0x9f, 0xaa, 0x41, 0xcf, - 0xf8, 0x39, 0x06, 0xfd, 0x8a, 0xe2, 0x97, 0xa4, 0x09, 0x03, 0x90, 0x2e, - 0x7c, 0x54, 0xc8, 0x84, 0xa9, 0xa7, 0x9f, 0x7f, 0x39, 0x1f, 0x81, 0xbe, - 0x00, 0x14, 0x09, 0x3a, 0x11, 0xe4, 0x36, 0xc5, 0xba, 0x93, 0x26, 0x7e, - 0x6b, 0xf6, 0x1e, 0x17, 0xdf, 0xd5, 0xed, 0x6c, 0xfc, 0xd6, 0x31, 0x2b, - 0x0a, 0xc8, 0x14, 0xf4, 0x7c, 0xb1, 0x52, 0x01, 0x63, 0x17, 0x05, 0xe0, - 0x8c, 0x45, 0xf5, 0x32, 0xc9, 0xc8, 0xbb, 0x24, 0x0b, 0xdf, 0x8e, 0xcf, - 0x42, 0x5b, 0xa3, 0xb9, 0x81, 0x97, 0x11, 0xc3, 0xba, 0x5c, 0x92, 0x0d, - 0x38, 0x21, 0x5b, 0xa0, 0x0e, 0x87, 0x51, 0xbe, 0xc8, 0xaf, 0x1f, 0x3c, - 0xe5, 0xb8, 0xbe, 0x8c, 0xaf, 0xf3, 0x6c, 0x94, 0x03, 0x61, 0xdf, 0x4a, - 0x74, 0xe7, 0x00, 0x5c, 0xe1, 0x3e, 0xcb, 0xab, 0x1f, 0x6f, 0xa2, 0xe8, - 0x34, 0xf8, 0x4e, 0x21, 0x07, 0xf8, 0x2a, 0x40, 0x75, 0xbc, 0x0b, 0x3b, - 0xbc, 0xfa, 0xbd, 0x72, 0xd4, 0xa8, 0xc0, 0xf9, 0x6b, 0xc4, 0x71, 0xde, - 0xd8, 0x7d, 0x9d, 0x6b, 0xc2, 0xf2, 0xfd, 0x7d, 0xf1, 0xfe, 0x4c, 0x85, - 0x2c, 0x28, 0x52, 0x15, 0x3a, 0x60, 0xa6, 0x04, 0x8a, 0xfb, 0x72, 0x83, - 0x6c, 0x79, 0x02, 0xf5, 0xc6, 0xb1, 0xce, 0x5d, 0x6e, 0x89, 0xbf, 0xaf, - 0x5f, 0x9e, 0x6c, 0x2c, 0xf2, 0x78, 0xbd, 0x42, 0x08, 0xab, 0xc6, 0x02, - 0x32, 0x61, 0xba, 0x64, 0x56, 0x2d, 0x08, 0x4a, 0x35, 0xa9, 0xcb, 0xfb, - 0x43, 0xf0, 0xae, 0x2e, 0x1d, 0xc2, 0x53, 0xe3, 0x30, 0x1e, 0xcc, 0x30, - 0x90, 0x80, 0x5b, 0x7e, 0xe6, 0xce, 0x3d, 0xa4, 0x28, 0x94, 0xb8, 0x9b, - 0x66, 0xe5, 0xa8, 0xb2, 0x4c, 0x65, 0x41, 0xe9, 0xe9, 0xa2, 0xf9, 0x72, - 0xef, 0xe8, 0x65, 0xa8, 0xfa, 0x02, 0x70, 0x0a, 0x6c, 0x94, 0x4c, 0x03, - 0xb4, 0xcf, 0xba, 0x72, 0x29, 0x61, 0x2e, 0x77, 0x9f, 0xba, 0x82, 0x2e, - 0x26, 0x2d, 0xe4, 0xb5, 0xa3, 0x22, 0x0f, 0xfb, 0xd0, 0xb3, 0x78, 0xf3, - 0xfa, 0xde, 0x87, 0xa0, 0xe5, 0x31, 0x69, 0x7c, 0xa9, 0x80, 0x5e, 0xe2, - 0x6a, 0xd7, 0x9d, 0x47, 0x28, 0xf8, 0x66, 0x93, 0xc9, 0x34, 0x8c, 0xfb, - 0xc5, 0x8d, 0xca, 0xf2, 0xfa, 0xb5, 0x68, 0x8c, 0xe1, 0x62, 0xd8, 0x0d, - 0x2d, 0x8f, 0x5d, 0xdf, 0x69, 0x7b, 0xab, 0xba, 0x71, 0x8d, 0x5a, 0xbf, - 0x31, 0xcb, 0xa9, 0x30, 0x8b, 0x50, 0x97, 0x0f, 0xd0, 0x97, 0xf6, 0xd8, - 0x6a, 0xcd, 0x99, 0x76, 0x15, 0xaa, 0xf6, 0xeb, 0x40, 0x30, 0xf6, 0x63, - 0xa8, 0x35, 0xab, 0xd3, 0x5d, 0x40, 0xca, 0x0a, 0xe7, 0x6d, 0x26, 0x7e, - 0xbf, 0xd5, 0x07, 0xa9, 0x31, 0xd7, 0x6f, 0xf3, 0x29, 0xe9, 0xeb, 0x87, - 0x39, 0x84, 0xbe, 0x25, 0x00, 0xbc, 0x36, 0xd3, 0xa0, 0x49, 0x1e, 0xd4, - 0xb9, 0x62, 0xf8, 0xc0, 0x1d, 0x1f, 0xa8, 0x82, 0x62, 0xe5, 0x4a, 0x5b, - 0xba, 0xa6, 0x3f, 0x8c, 0x04, 0x93, 0xba, 0x47, 0xff, 0xb8, 0xec, 0x8f, - 0xa2, 0xd0, 0xf7, 0xb4, 0xf2, 0x92, 0x64, 0x45, 0x3b, 0x24, 0x98, 0xa8, - 0x5e, 0x78, 0xa5, 0xbb, 0xf8, 0xe9, 0x1a, 0x00, 0xf3, 0xa3, 0x75, 0xef, - 0x0b, 0xd7, 0x41, 0x8b, 0x3a, 0x94, 0x3c, 0x2c, 0x3c, 0x96, 0xbe, 0x0b, - 0x4e, 0xfc, 0x7a, 0x6c, 0xae, 0x36, 0x99, 0xb7, 0x79, 0xc3, 0x92, 0x6f, - 0xf6, 0x02, 0xd6, 0x92, 0x5f, 0xc2, 0xca, 0x9e, 0xae, 0x61, 0x8a, 0xc5, - 0x2a, 0x57, 0xb5, 0xc1, 0x24, 0x3b, 0xf5, 0xe2, 0x7a, 0xc9, 0x7b, 0xd0, - 0x56, 0xc9, 0x72, 0x2e, 0x51, 0x1f, 0x73, 0xd1, 0x57, 0x9a, 0x02, 0x03, - 0xaa, 0x58, 0x35, 0x38, 0x80, 0xc8, 0x2e, 0x03, 0xe7, 0xb1, 0x23, 0x48, - 0xf6, 0x7e, 0x02, 0xae, 0x62, 0x4f, 0xfa, 0x49, 0xb9, 0xeb, 0x3b, 0x36, - 0xf7, 0x45, 0x2b, 0x85, 0xe5, 0x3c, 0xe3, 0x1d, 0x3f, 0xf0, 0x9c, 0xe3, - 0xe7, 0x27, 0x3f, 0xd3, 0xda, 0x6f, 0xf1, 0x8b, 0x7d, 0x09, 0xb8, 0x6f, - 0xc3, 0xf5, 0x88, 0xfb, 0x5a, 0x57, 0x4a, 0xd7, 0xb8, 0x61, 0x4e, 0x0e, - 0xb6, 0xd7, 0xd4, 0xb7, 0x4c, 0x2b, 0x56, 0x47, 0xbd, 0x42, 0x2f, 0xeb, - 0x36, 0x1b, 0xad, 0xa6, 0x8f, 0xaf, 0x72, 0x59, 0x1a, 0xb3, 0xb4, 0xdf, - 0x29, 0x0d, 0x61, 0xe1, 0x9b, 0x36, 0xf2, 0x5b, 0xb3, 0xd4, 0x0e, 0x7a, - 0xc8, 0x1d, 0x3c, 0x20, 0x6b, 0x6c, 0x80, 0xeb, 0x14, 0x3e, 0x5d, 0x97, - 0xe9, 0x5d, 0x17, 0x6b, 0x7f, 0x78, 0x2c, 0x03, 0x03, 0x9d, 0xc6, 0x13, - 0xd5, 0x4a, 0xfe, 0x8a, 0xb8, 0xdd, 0x4a, 0x0d, 0x23, 0xec, 0x74, 0x10, - 0xd7, 0xca, 0x82, 0x61, 0x21, 0x12, 0x37, 0x1b, 0x5a, 0xb7, 0x01, 0x46, - 0xe8, 0x69, 0xc2, 0xbe, 0xfe, 0xf6, 0xc1, 0x21, 0x3d, 0xdd, 0xe8, 0x6b, - 0xae, 0x6d, 0xb6, 0x73, 0xa3, 0xe6, 0x05, 0x19, 0x5d, 0xfc, 0xde, 0x8c, - 0x0c, 0x64, 0x8f, 0xb5, 0x5f, 0x2a, 0x23, 0x11, 0x80, 0x62, 0xa9, 0xc2, - 0x41, 0xf0, 0x23, 0x09, 0xd2, 0x09, 0xbb, 0x0d, 0x4c, 0xaa, 0x6b, 0xf7, - 0x21, 0x0a, 0x9f, 0xe1, 0x6d, 0xb5, 0xce, 0x9f, 0xd8, 0x5c, 0x6e, 0x26, - 0xfb, 0x7d, 0x9a, 0x7b, 0x8a, 0x18, 0xfd, 0x75, 0x64, 0x46, 0xd7, 0xbe, - 0xb9, 0x29, 0xbc, 0x5c, 0x7a, 0xb8, 0xec, 0x21, 0x03, 0xe7, 0xee, 0x39, - 0xa2, 0x12, 0x58, 0x33, 0x49, 0x22, 0xb4, 0x84, 0xf0, 0xa7, 0x56, 0xa0, - 0xe9, 0xdd, 0x93, 0x83, 0x73, 0xd4, 0xb5, 0xfc, 0x6f, 0xfa, 0x9b, 0xf9, - 0x47, 0x7a, 0x58, 0x7b, 0xc6, 0x0a, 0x35, 0xc6, 0x7f, 0x8c, 0xe1, 0x8e, - 0xa6, 0xfc, 0xee, 0xd6, 0x20, 0x65, 0xec, 0xd1, 0x42, 0xdd, 0x95, 0x56, - 0xec, 0xc9, 0x5f, 0x07, 0xcf, 0xce, 0xf9, 0x84, 0xa4, 0xde, 0x8b, 0x7b, - 0x34, 0xe4, 0xff, 0x03, 0xfe, 0xd5, 0x6a, 0x9f, 0x2e, 0xda, 0x2f, 0x00, - 0xa4, 0x10, 0x92, 0xd5, 0x4b, 0x0f, 0x9c, 0x92, 0x92, 0xfc, 0xe8, 0x1b, - 0x33, 0xc7, 0x74, 0x91, 0x71, 0x6a, 0xf6, 0x4e, 0xdc, 0xdc, 0xb9, 0x27, - 0xed, 0xef, 0x83, 0xb8, 0x0d, 0xa6, 0x9f, 0x90, 0xef, 0x40, 0xa8, 0x26, - 0x57, 0x51, 0x9b, 0x90, 0x56, 0x7c, 0xa5, 0x6c, 0x93, 0x7b, 0xd2, 0x92, - 0xb7, 0x12, 0x39, 0x64, 0x10, 0xeb, 0x3c, 0x0a, 0xb7, 0x22, 0xcf, 0xbb, - 0xbd, 0x81, 0xe2, 0x95, 0x5b, 0xf0, 0x5e, 0x63, 0x99, 0xeb, 0xdd, 0x62, - 0x18, 0x1c, 0x9f, 0xd6, 0x53, 0x67, 0xaf, 0xa9, 0x69, 0xe5, 0xe8, 0x7c, - 0x67, 0x67, 0x11, 0xc8, 0x18, 0xea, 0x68, 0xd1, 0x75, 0x5d, 0xb0, 0x9b, - 0x23, 0x95, 0x4d, 0x26, 0xd3, 0xb8, 0x42, 0x06, 0x86, 0xf7, 0x0a, 0x1e, - 0xcb, 0xd4, 0xb9, 0x48, 0x94, 0x70, 0xfb, 0x6d, 0xd1, 0x57, 0x79, 0xcd, - 0xe1, 0x1c, 0xdb, 0x51, 0x87, 0xd8, 0x55, 0x76, 0x52, 0x44, 0x85, 0x85, - 0x68, 0x51, 0x63, 0x02, 0xb5, 0x60, 0x14, 0x1d, 0x32, 0x1c, 0xbd, 0x0d, - 0xd5, 0x36, 0xc4, 0x1c, 0xc3, 0x2f, 0xcd, 0x98, 0x67, 0xa8, 0x42, 0xed, - 0x5d, 0x22, 0x59, 0xde, 0xbf, 0x11, 0x62, 0x6a, 0xd2, 0x0f, 0x33, 0x86, - 0x33, 0xbc, 0x94, 0x94, 0xdc, 0xa4, 0x6d, 0x21, 0xbc, 0xe7, 0xd1, 0x0a, - 0x2f, 0x69, 0x88, 0x04, 0x11, 0x8b, 0x13, 0xc4, 0x0b, 0xd1, 0x6e, 0xab, - 0x6d, 0x1c, 0x49, 0x6d, 0x63, 0x17, 0x2a, 0xb0, 0x15, 0x48, 0xd6, 0xd0, - 0xc8, 0xeb, 0xc2, 0x3c, 0xaf, 0x7f, 0xcc, 0x07, 0xf4, 0x98, 0x3c, 0xfe, - 0xe9, 0xc7, 0xf7, 0x00, 0xb3, 0xa9, 0xc6, 0x82, 0x0a, 0x28, 0xb9, 0x50, - 0x86, 0xfe, 0x4e, 0x22, 0xe1, 0xb1, 0x2e, 0xbf, 0x01, 0xa4, 0x6b, 0x9e, - 0x1e, 0xfe, 0x75, 0x18, 0x53, 0x1b, 0xc7, 0x64, 0xe2, 0xcd, 0xde, 0x57, - 0x03, 0xf6, 0xc3, 0x89, 0xaa, 0x59, 0x29, 0x41, 0x58, 0x3a, 0xc8, 0x49, - 0x7c, 0x78, 0xd7, 0x9e, 0x7c, 0x92, 0x9f, 0xf7, 0x05, 0xba, 0x4e, 0x96, - 0x6e, 0xd2, 0x80, 0x62, 0xa1, 0x23, 0x21, 0xde, 0x24, 0x76, 0xe8, 0xcb, - 0x5b, 0x26, 0x09, 0x77, 0xb6, 0xe4, 0x6f, 0xcd, 0x3b, 0xd3, 0x21, 0x96, - 0x63, 0x24, 0x31, 0x89, 0x71, 0xfd, 0xcf, 0x3e, 0xa1, 0xbd, 0xa3, 0xe1, - 0x2b, 0x8c, 0xd3, 0x95, 0xd3, 0x05, 0x98, 0x21, 0x28, 0x38, 0x82, 0x3b, - 0x59, 0x5d, 0x0a, 0x3f, 0x9c, 0x36, 0xa5, 0xb2, 0x6a, 0x35, 0xef, 0xb7, - 0x67, 0x14, 0x15, 0x58, 0x3f, 0x57, 0x33, 0x52, 0x39, 0x51, 0x11, 0xec, - 0x40, 0xd1, 0x1b, 0xbb, 0xc0, 0x0a, 0xde, 0x06, 0x87, 0x26, 0x3d, 0x10, - 0x3b, 0x8e, 0x37, 0x54, 0x8c, 0xa1, 0x2e, 0x37, 0x92, 0x60, 0x50, 0x0a, - 0x23, 0xe6, 0x01, 0xb2, 0xc0, 0x3f, 0x9e, 0x97, 0x4c, 0x01, 0x2b, 0xc4, - 0xde, 0x59, 0x73, 0xc5, 0xb4, 0xfe, 0x21, 0x03, 0xdc, 0x02, 0x7e, 0x0c, - 0x0c, 0xc7, 0x34, 0x33, 0xae, 0x55, 0xe6, 0x3a, 0xbc, 0x36, 0xb4, 0x35, - 0x34, 0x78, 0xc2, 0xbe, 0x85, 0xd0, 0xaf, 0xa6, 0x3a, 0xa3, 0x5c, 0x16, - 0xeb, 0xcc, 0x35, 0xa3, 0x77, 0x07, 0xe6, 0x76, 0xce, 0xda, 0x07, 0x56, - 0x55, 0x30, 0xab, 0xb5, 0x55, 0x72, 0x0f, 0xed, 0x48, 0xe4, 0x3e, 0x99, - 0xcd, 0x27, 0x72, 0x39, 0x9a, 0x2a, 0x40, 0x71, 0x34, 0x92, 0x09, 0x9f, - 0x1b, 0x11, 0xa1, 0x0b, 0x88, 0x7b, 0x11, 0x7f, 0x19, 0x44, 0xae, 0x0d, - 0x46, 0x8e, 0xb1, 0xaf, 0xe3, 0x10, 0x6e, 0x73, 0x64, 0xeb, 0x47, 0xbc, - 0xc7, 0x58, 0x03, 0x9f, 0x1f, 0x81, 0x74, 0x83, 0xf0, 0xd1, 0xaf, 0x1c, - 0x1a, 0x3e, 0x03, 0xe3, 0x9d, 0x63, 0x64, 0x74, 0x74, 0x38, 0x84, 0xb1, - 0x63, 0x53, 0x99, 0x17, 0x2b, 0x8c, 0x2a, 0x41, 0x1d, 0xd2, 0xff, 0x2c, - 0x32, 0xdf, 0x7a, 0x81, 0x6e, 0x5e, 0x6d, 0x1a, 0x29, 0x65, 0xb8, 0x47, - 0xd7, 0xcb, 0x61, 0xeb, 0xc5, 0x25, 0x38, 0x14, 0xe6, 0x36, 0xc4, 0x7e, - 0xfb, 0xc8, 0x9d, 0x2e, 0x0e, 0x2b, 0x98, 0xf0, 0xcd, 0x37, 0x7f, 0x02, - 0xe7, 0x30, 0x77, 0x2c, 0xd3, 0xe0, 0x85, 0x2f, 0x18, 0x36, 0x4c, 0xab, - 0x2f, 0x5c, 0x66, 0xbe, 0x36, 0x74, 0x18, 0x61, 0x13, 0xea, 0xa1, 0xf2, - 0x7c, 0x41, 0x3a, 0xe8, 0x97, 0x32, 0xe7, 0x75, 0x24, 0x28, 0x0f, 0x5c, - 0x8d, 0x2f, 0xea, 0xf6, 0x08, 0xdd, 0xdf, 0x03, 0xb7, 0x54, 0x04, 0x56, - 0x14, 0x82, 0x73, 0xb8, 0x6d, 0x25, 0x03, 0xec, 0x59, 0x26, 0x20, 0x64, - 0x20, 0x38, 0x42, 0x9c, 0x1f, 0x74, 0x4b, 0xbb, 0x87, 0x16, 0xe0, 0x53, - 0x8b, 0x54, 0xc4, 0x97, 0x7b, 0x41, 0xe5, 0x6b, 0x3a, 0x38, 0xd8, 0x97, - 0xaf, 0xaf, 0xe8, 0xa9, 0xa9, 0x71, 0x86, 0xd6, 0xa8, 0x53, 0x46, 0xcf, - 0x07, 0x3a, 0x6e, 0x87, 0xb1, 0xd6, 0x38, 0x43, 0xf0, 0xab, 0x3b, 0xcc, - 0x80, 0x88, 0x67, 0xb9, 0xf2, 0x62, 0xee, 0xbd, 0x7c, 0xd3, 0x90, 0x2b, - 0xfe, 0xd2, 0x6f, 0x5f, 0x94, 0x1b, 0x3f, 0x5a, 0xda, 0x97, 0x1f, 0x59, - 0xfd, 0xd1, 0xfc, 0xa0, 0xf0, 0xb9, 0xcf, 0x9d, 0x99, 0x48, 0xdd, 0x11, - 0x76, 0xc2, 0x39, 0x04, 0xf5, 0x46, 0xdc, 0x0c, 0xda, 0x9a, 0xbd, 0xc8, - 0x88, 0x8b, 0x2f, 0x68, 0x5d, 0x08, 0xe3, 0x38, 0x01, 0xad, 0xeb, 0x17, - 0xee, 0x36, 0x95, 0x9d, 0xda, 0x64, 0x81, 0x32, 0xef, 0xce, 0xdf, 0x21, - 0xfd, 0xff, 0x26, 0xb0, 0xea, 0x3b, 0xf8, 0x8a, 0x7b, 0xd2, 0xf8, 0xf6, - 0xa3, 0x37, 0x49, 0xee, 0x27, 0x75, 0x34, 0x98, 0xfd, 0xc5, 0x55, 0xb1, - 0x9c, 0x5a, 0x1c, 0x43, 0x64, 0xb7, 0xcc, 0xdf, 0x4a, 0x0b, 0x28, 0x22, - 0xf0, 0x62, 0xae, 0xbe, 0x1e, 0xfa, 0xca, 0xd1, 0xab, 0x6d, 0xac, 0xbe, - 0x1e, 0x54, 0xb4, 0x46, 0x50, 0x4d, 0xf6, 0xbf, 0x19, 0x77, 0x0c, 0xaf, - 0x1d, 0x2d, 0x6b, 0x99, 0xb6, 0x09, 0x31, 0xc7, 0x9d, 0x49, 0xf6, 0x20, - 0x4b, 0x9d, 0x7c, 0x09, 0x5c, 0x98, 0x36, 0x2c, 0xda, 0x45, 0x70, 0x75, - 0x10, 0x01, 0x0b, 0xc6, 0xa9, 0xa7, 0x39, 0xa4, 0x47, 0xf0, 0x4f, 0x80, - 0xf7, 0x87, 0x8d, 0xb7, 0x6c, 0x40, 0xd1, 0x33, 0x08, 0x56, 0xa7, 0x24, - 0x1b, 0x7d, 0xbc, 0xb3, 0xd2, 0xa1, 0xa3, 0xfe, 0x92, 0xd4, 0x5a, 0x41, - 0x58, 0xe2, 0x50, 0xb2, 0xcc, 0x19, 0x03, 0x9d, 0xba, 0x1e, 0x7c, 0xed, - 0xb5, 0x6e, 0x8a, 0x54, 0xc2, 0x18, 0x3f, 0x74, 0xf7, 0x65, 0xe1, 0xe5, - 0x5c, 0x1a, 0xcc, 0xb1, 0x6f, 0x52, 0x21, 0x22, 0xc6, 0x0d, 0x01, 0x7c, - 0x79, 0xe6, 0x2d, 0xe0, 0x86, 0x60, 0x66, 0x80, 0x2d, 0x89, 0x66, 0x1f, - 0x0d, 0xbe, 0xfb, 0x2f, 0xda, 0x33, 0xf7, 0x76, 0x8e, 0x5d, 0xcf, 0x7a, - 0x35, 0xb8, 0xa8, 0xdb, 0x24, 0x39, 0xbd, 0x7d, 0x2b, 0x86, 0x23, 0x8d, - 0x60, 0x34, 0xd7, 0x91, 0xb3, 0x57, 0x8d, 0x67, 0x09, 0x8f, 0x06, 0x2f, - 0xb2, 0x98, 0x15, 0x92, 0xc8, 0xdf, 0x5a, 0x17, 0x97, 0xf1, 0xe7, 0xac, - 0x6b, 0x7f, 0x46, 0xcc, 0xa0, 0xad, 0x89, 0x73, 0x13, 0x4c, 0x0a, 0x88, - 0x2b, 0x86, 0x5a, 0x13, 0xeb, 0xe4, 0xcd, 0xf3, 0x64, 0x32, 0x72, 0xb2, - 0x4d, 0xbc, 0x4e, 0x0b, 0xf0, 0x98, 0x95, 0xbe, 0x6d, 0x7a, 0xc8, 0x8f, - 0xff, 0xca, 0xb4, 0x18, 0xcc, 0x26, 0xba, 0x0e, 0xfb, 0xf8, 0xe0, 0xce, - 0x81, 0x4b, 0xc6, 0xd7, 0x79, 0x32, 0xfa, 0x86, 0x82, 0xbe, 0x8b, 0x62, - 0xe5, 0xb4, 0xef, 0x12, 0xfa, 0x7f, 0xc1, 0x16, 0x08, 0x03, 0xd8, 0xf9, - 0xa8, 0x7b, 0xc1, 0xfc, 0x71, 0xc9, 0x17, 0x7e, 0x98, 0xea, 0xac, 0x7e, - 0x9e, 0xf4, 0x24, 0x85, 0x82, 0x62, 0x53, 0xff, 0x52, 0x06, 0x49, 0xbc, - 0x62, 0xd1, 0x4c, 0x84, 0x0c, 0x70, 0xad, 0xbc, 0x95, 0x76, 0xf0, 0xe1, - 0x3c, 0xee, 0x9c, 0x07, 0x7e, 0xff, 0x65, 0xf1, 0x3d, 0x58, 0xec, 0xa1, - 0xac, 0x1f, 0xb6, 0x94, 0xd3, 0xd9, 0x4f, 0x62, 0x00, 0x1e, 0x10, 0x5f, - 0xa9, 0x53, 0x94, 0x91, 0x7d, 0x75, 0xf6, 0xc3, 0x8b, 0x30, 0x08, 0x7f, - 0x1e, 0x5f, 0x78, 0x8f, 0xf1, 0xd5, 0x7c, 0x8b, 0x2b, 0xd5, 0x64, 0x70, - 0x99, 0xa8, 0xfb, 0x4c, 0xae, 0x3b, 0xd4, 0xd9, 0x88, 0x61, 0x19, 0xed, - 0x95, 0xa3, 0x07, 0x77, 0x7b, 0xe5, 0x31, 0xf4, 0x5a, 0xd1, 0xe3, 0xf2, - 0x20, 0xf9, 0x7f, 0xa7, 0xcb, 0xe0, 0x52, 0x5c, 0x44, 0x7d, 0x4d, 0x97, - 0x32, 0x38, 0x0d, 0x56, 0xd5, 0x00, 0x26, 0xdb, 0xf4, 0x6c, 0x8f, 0x61, - 0x47, 0x83, 0x16, 0xc5, 0xad, 0x9c, 0xe3, 0xcf, 0xa8, 0xd8, 0x2d, 0xa1, - 0xd8, 0x85, 0x1f, 0x7e, 0x3b, 0x2e, 0xd2, 0xab, 0xdb, 0xb9, 0x7d, 0xfc, - 0x75, 0x9f, 0x2f, 0x7f, 0xb3, 0xbd, 0x88, 0x1e, 0x87, 0x25, 0x7a, 0x35, - 0xa6, 0xbd, 0x92, 0x18, 0x4d, 0x06, 0x0f, 0xf8, 0xc4, 0x66, 0xe4, 0xc7, - 0x5c, 0x07, 0xf3, 0xf9, 0x53, 0x4b, 0xd0, 0x33, 0xad, 0x43, 0x96, 0x30, - 0x78, 0xb5, 0x98, 0x9c, 0xef, 0x9a, 0xd6, 0x55, 0xb4, 0xe8, 0xcb, 0x03, - 0x3b, 0x03, 0x59, 0xa9, 0x19, 0xf8, 0x88, 0x8a, 0x53, 0x67, 0x81, 0x78, - 0xef, 0x6b, 0x46, 0xe4, 0x68, 0xad, 0x96, 0x63, 0x70, 0xad, 0xb9, 0x53, - 0xf9, 0x43, 0x2a, 0x99, 0xa0, 0x00, 0xea, 0xa5, 0x0e, 0x5d, 0x07, 0x80, - 0x3c, 0x6e, 0xf6, 0xb7, 0x2c, 0x12, 0x4c, 0xee, 0xb7, 0xa0, 0x13, 0x01, - 0x27, 0x76, 0xf4, 0xfc, 0x90, 0xec, 0xd8, 0x45, 0xd7, 0x3f, 0x2b, 0x79, - 0x4e, 0x18, 0x3d, 0xd8, 0xc8, 0x4e, 0xc8, 0x58, 0xff, 0xa7, 0xcb, 0x42, - 0x73, 0x8b, 0x3b, 0x75, 0x79, 0x86, 0x54, 0x21, 0x9c, 0x6a, 0xd5, 0xe3, - 0x4d, 0xd9, 0xca, 0xbc, 0xe7, 0x46, 0xd9, 0x20, 0x89, 0xb4, 0xd1, 0x5f, - 0x5b, 0x2c, 0x9b, 0xf7, 0x99, 0x5e, 0xb2, 0xc4, 0x4d, 0x35, 0x90, 0xed, - 0x36, 0x0b, 0x9c, 0xa2, 0xfd, 0xd8, 0xb2, 0x33, 0x0e, 0x54, 0xbd, 0xda, - 0xa9, 0xf5, 0xd7, 0xe2, 0x74, 0x80, 0x68, 0xa2, 0x45, 0xa8, 0x0d, 0xb3, - 0x06, 0xd7, 0x8e, 0x93, 0x70, 0x59, 0xd7, 0x70, 0xcf, 0x0c, 0x38, 0x9d, - 0x59, 0xac, 0x24, 0xe7, 0xeb, 0x90, 0x6c, 0x37, 0x6c, 0x2b, 0x2e, 0x3c, - 0x5b, 0x5a, 0x9e, 0xea, 0xdb, 0x9f, 0x16, 0x03, 0x4f, 0xd0, 0xba, 0x16, - 0x32, 0x31, 0xf1, 0x31, 0x97, 0x8d, 0xe8, 0x23, 0xc0, 0x7b, 0xb4, 0xfd, - 0xfe, 0xb0, 0xfd, 0x0e, 0xdb, 0xcd, 0x8c, 0x3d, 0xed, 0x13, 0x07, 0x52, - 0x75, 0xd6, 0xf2, 0x53, 0x17, 0x5f, 0x35, 0xda, 0xeb, 0xf4, 0xc5, 0x26, - 0x51, 0x69, 0xb1, 0x86, 0xb5, 0x0b, 0x24, 0x9c, 0x23, 0x3e, 0xab, 0x34, - 0xc9, 0x54, 0x7a, 0xd5, 0x32, 0x18, 0x6f, 0x95, 0x2e, 0x7a, 0x4d, 0x0a, - 0x88, 0x2a, 0x07, 0xea, 0x5d, 0x2f, 0x42, 0x8b, 0x21, 0x5a, 0x29, 0xfd, - 0xfd, 0x14, 0x90, 0x1f, 0xcb, 0x43, 0x67, 0x78, 0x15, 0x65, 0xbc, 0x0c, - 0x54, 0x9f, 0x00, 0xee, 0xa0, 0x6a, 0xf9, 0x0e, 0x6d, 0x3f, 0x3f, 0x79, - 0x83, 0x83, 0x96, 0x18, 0xab, 0x3a, 0x54, 0xff, 0x88, 0xf3, 0x35, 0xca, - 0x8a, 0xfe, 0xc5, 0x25, 0xc8, 0x17, 0x61, 0xcc, 0xdb, 0x20, 0x37, 0x3d, - 0x9b, 0xcc, 0x01, 0x58, 0xce, 0x44, 0xad, 0x7f, 0x07, 0x57, 0x72, 0xd0, - 0xb9, 0xa1, 0xb0, 0xba, 0xeb, 0x4b, 0x25, 0xf2, 0x44, 0xb6, 0x42, 0xc5, - 0x3f, 0x44, 0x92, 0xa1, 0xb0, 0x2a, 0x55, 0x10, 0x61, 0x8a, 0x43, 0xc7, - 0xf0, 0xdc, 0x3c, 0xcb, 0x6a, 0xf5, 0xc5, 0x3f, 0x50, 0xc5, 0x0d, 0x13, - 0x47, 0x7c, 0xdb, 0x6d, 0xa3, 0x15, 0x42, 0x2e, 0x63, 0x22, 0x08, 0xa1, - 0x01, 0xce, 0x2c, 0x02, 0xd5, 0x74, 0x30, 0xbe, 0xbd, 0xb3, 0x4e, 0x71, - 0x06, 0xb0, 0x42, 0x70, 0x9d, 0xb2, 0x7c, 0x77, 0x0c, 0x41, 0xfb, 0xaf, - 0x10, 0x15, 0xb8, 0xea, 0xaa, 0xc9, 0x8a, 0xbb, 0x6b, 0x13, 0x7d, 0x62, - 0x97, 0x42, 0xa2, 0x2c, 0xd0, 0x07, 0x42, 0x2d, 0x50, 0xc9, 0x01, 0x17, - 0x06, 0x93, 0xa3, 0x98, 0x2a, 0xe0, 0x2d, 0x69, 0x3f, 0xd1, 0x42, 0x5d, - 0x41, 0x0b, 0xdd, 0x06, 0xac, 0xaa, 0x28, 0x4e, 0xc1, 0x65, 0x7b, 0x22, - 0x7d, 0x1e, 0x06, 0xce, 0x5f, 0xe2, 0xce, 0x84, 0x53, 0x65, 0x57, 0xfe, - 0x59, 0x14, 0x8d, 0xc4, 0xef, 0xe1, 0x0a, 0xa2, 0x92, 0x3e, 0x5c, 0x43, - 0x8e, 0x5d, 0xdf, 0xf9, 0x6a, 0x2a, 0xd3, 0x43, 0x5f, 0x9d, 0x7b, 0xaf, - 0x16, 0xfd, 0x08, 0x8a, 0xe9, 0xa9, 0xfd, 0x17, 0x13, 0x99, 0x0d, 0x8e, - 0xad, 0x23, 0xe0, 0x19, 0x30, 0x7e, 0x1e, 0x93, 0x47, 0xb6, 0xf9, 0x39, - 0xf8, 0x61, 0xaa, 0xed, 0x04, 0x20, 0xdd, 0x71, 0x01, 0xd2, 0x9d, 0x99, - 0xb5, 0x5d, 0x3b, 0x5a, 0xd1, 0x02, 0xba, 0x97, 0xdc, 0xda, 0x02, 0x39, - 0xf9, 0xc0, 0x24, 0x98, 0xdc, 0x56, 0xd0, 0x8d, 0xe5, 0x59, 0xe5, 0xc0, - 0xc5, 0x8f, 0x45, 0xc5, 0xf6, 0xd4, 0x97, 0x76, 0x70, 0xfd, 0xbf, 0x3d, - 0x42, 0xeb, 0x6c, 0x32, 0xa3, 0x2d, 0xb0, 0x06, 0xbb, 0xad, 0x35, 0x5c, - 0x43, 0x5d, 0xa1, 0x10, 0x14, 0xde, 0x5c, 0x15, 0x6f, 0x70, 0xe8, 0xa3, - 0xdd, 0x53, 0x3c, 0x97, 0x30, 0x9e, 0xa3, 0xe1, 0x3c, 0x93, 0xe3, 0x52, - 0x98, 0x21, 0xbf, 0xff, 0xf4, 0xea, 0xc7, 0xbc, 0x7f, 0x7d, 0xb9, 0xf6, - 0xbf, 0x5a, 0xe6, 0xbd, 0x1e, 0xdc, 0x1b, 0xa8, 0x60, 0x57, 0xed, 0x8e, - 0x0b, 0x05, 0x15, 0xf9, 0xf1, 0x08, 0x9e, 0x40, 0xd0, 0x93, 0x4a, 0x79, - 0xd5, 0xd7, 0x7d, 0x1d, 0x78, 0x75, 0x4e, 0x15, 0xc4, 0x31, 0x25, 0x70, - 0x47, 0x14, 0xd1, 0x0e, 0x70, 0x84, 0x07, 0x92, 0x93, 0x09, 0x84, 0xab, - 0x46, 0x95, 0x66, 0x77, 0x34, 0x33, 0x36, 0x28, 0x57, 0x23, 0xdb, 0xce, - 0xe3, 0x0a, 0x74, 0x8d, 0x23, 0x5f, 0x80, 0x6e, 0x04, 0x45, 0x58, 0xee, - 0xb8, 0xc8, 0x71, 0x27, 0x0a, 0x90, 0x2f, 0x81, 0x09, 0xc2, 0x95, 0xe2, - 0xf2, 0x6c, 0x2b, 0x3c, 0x32, 0x37, 0x05, 0xf9, 0xb4, 0x0f, 0x4f, 0xde, - 0xca, 0x58, 0x79, 0x9d, 0x89, 0x2a, 0x0a, 0xd6, 0x99, 0x8e, 0x31, 0xdc, - 0x4a, 0x66, 0x93, 0xb0, 0x2e, 0xe8, 0x09, 0xd7, 0x42, 0xd1, 0xbd, 0xc0, - 0x95, 0xab, 0x06, 0xba, 0x7f, 0x68, 0xaa, 0x25, 0x7d, 0x19, 0x1c, 0x9b, - 0xd6, 0x99, 0xa3, 0x79, 0x25, 0x0f, 0x72, 0xfb, 0xf1, 0xe2, 0x0b, 0xfd, - 0x15, 0x77, 0x62, 0xf0, 0xa2, 0x52, 0x0e, 0x77, 0xca, 0xec, 0x59, 0xa6, - 0x11, 0x5f, 0xc0, 0x70, 0xf3, 0x4d, 0x89, 0xe3, 0xad, 0x14, 0x12, 0x75, - 0x49, 0x33, 0xe5, 0xa7, 0xaf, 0x3a, 0xbb, 0x55, 0x73, 0x0a, 0x7c, 0x76, - 0xac, 0x24, 0xe7, 0x85, 0x22, 0x64, 0x00, 0x0e, 0x19, 0xfc, 0xe8, 0xeb, - 0x1c, 0xcd, 0x3f, 0xbd, 0x28, 0xf3, 0x8f, 0xbb, 0xbf, 0xb9, 0x1d, 0x37, - 0x56, 0x58, 0xd8, 0x23, 0x90, 0xd2, 0xe0, 0xa9, 0x43, 0x1a, 0x0a, 0xa5, - 0x0d, 0x97, 0x4f, 0x25, 0x86, 0x01, 0xfd, 0xde, 0x2c, 0xcd, 0x8b, 0x8a, - 0xf3, 0xf9, 0xc8, 0x17, 0xfa, 0x15, 0xf4, 0x9d, 0x44, 0x66, 0x92, 0x1f, - 0x7d, 0x59, 0x14, 0x0b, 0x37, 0xe1, 0x49, 0x54, 0x46, 0x40, 0x33, 0x2b, - 0x08, 0xd5, 0x93, 0xe0, 0x1b, 0xb7, 0xba, 0xf5, 0xe8, 0x02, 0xca, 0x13, - 0x78, 0x57, 0xf7, 0x22, 0xcc, 0x48, 0x2d, 0xde, 0xe0, 0x53, 0x4e, 0x2c, - 0x7d, 0xbb, 0x0f, 0xf8, 0x0f, 0x89, 0x46, 0xe1, 0x4a, 0x6b, 0x3d, 0xd1, - 0x4d, 0x19, 0xaa, 0xc7, 0xc6, 0xd9, 0xca, 0x74, 0x17, 0xc1, 0xae, 0x3a, - 0x0b, 0x58, 0x87, 0xd4, 0xff, 0xf8, 0xdc, 0x65, 0x5d, 0x22, 0xfc, 0xee, - 0x72, 0x0b, 0x6d, 0x2d, 0x82, 0xb7, 0xce, 0x44, 0xc3, 0xaa, 0x23, 0xd3, - 0xc5, 0x84, 0x93, 0x0f, 0xa0, 0x2b, 0x89, 0x53, 0xbe, 0xfd, 0x74, 0xab, - 0xb1, 0xf0, 0x04, 0xf4, 0x36, 0x96, 0x21, 0xab, 0x02, 0x24, 0x0e, 0xf2, - 0x8e, 0x54, 0x45, 0xd1, 0x5c, 0xdb, 0x21, 0xf5, 0xba, 0x78, 0x5c, 0xf2, - 0x69, 0xf4, 0x1a, 0xa7, 0xd1, 0x15, 0x48, 0x3b, 0x7e, 0x45, 0x1a, 0x8e, - 0xa8, 0xa3, 0x28, 0x86, 0xc0, 0x50, 0x58, 0x84, 0xed, 0x91, 0xc7, 0xc4, - 0x5e, 0x8d, 0xbe, 0xf4, 0x26, 0xf0, 0x59, 0xeb, 0x97, 0x10, 0xa3, 0xb3, - 0x2e, 0x6e, 0x3e, 0x28, 0xc8, 0xc4, 0x87, 0x40, 0x95, 0x88, 0xf1, 0xb5, - 0xc3, 0x35, 0x7d, 0xc5, 0x14, 0x42, 0x22, 0xd7, 0x74, 0x41, 0x18, 0x5f, - 0x1b, 0xfe, 0xf8, 0x2a, 0xbf, 0xa1, 0x22, 0x5c, 0xb1, 0x3b, 0x72, 0x1c, - 0x16, 0xd7, 0xcf, 0x35, 0x72, 0x39, 0x0d, 0x3a, 0x86, 0x2a, 0x13, 0x87, - 0x11, 0x15, 0x42, 0x5a, 0x09, 0xc0, 0xad, 0x95, 0x48, 0x92, 0xc0, 0x5f, - 0xd1, 0x0e, 0x26, 0x21, 0x65, 0x2e, 0x40, 0xb6, 0x75, 0xce, 0x79, 0x78, - 0x36, 0xb2, 0x26, 0x4e, 0x4a, 0x54, 0x2a, 0x6d, 0x37, 0x73, 0xf5, 0x7e, - 0x43, 0xa5, 0xac, 0xd5, 0xbc, 0x9c, 0x85, 0x2f, 0x73, 0x3b, 0xd1, 0xa8, - 0x4e, 0x24, 0x35, 0x8d, 0xa9, 0x08, 0x92, 0xea, 0x5b, 0x77, 0x56, 0xf9, - 0x8e, 0xd4, 0x51, 0xea, 0xc8, 0x05, 0x44, 0x1c, 0x44, 0x6f, 0x29, 0x8b, - 0x93, 0x6e, 0xb6, 0xae, 0x0a, 0x00, 0x47, 0x45, 0xf8, 0xce, 0x87, 0xd5, - 0x24, 0x9a, 0xb3, 0xe0, 0x30, 0x31, 0xae, 0xa2, 0xc4, 0x3c, 0xb9, 0x31, - 0x8c, 0xc4, 0x9d, 0x92, 0x21, 0x45, 0xa0, 0x3c, 0x3e, 0x1d, 0x46, 0xe1, - 0xe7, 0xaa, 0xaf, 0x1a, 0x5f, 0x05, 0x3e, 0xf9, 0x23, 0x84, 0x82, 0x48, - 0xc1, 0x96, 0xb5, 0xe5, 0xba, 0xf2, 0x6a, 0x30, 0x51, 0xbb, 0x53, 0x23, - 0xce, 0x76, 0x3d, 0x0d, 0x5f, 0x75, 0x2a, 0xb1, 0x3a, 0xcd, 0xc5, 0xf9, - 0xce, 0xa1, 0x53, 0x4f, 0x37, 0x48, 0x6a, 0x67, 0x8c, 0x66, 0xee, 0x53, - 0x8a, 0xd5, 0x99, 0xf8, 0xab, 0xfb, 0x51, 0x00, 0x43, 0xb1, 0xbf, 0x7a, - 0xae, 0xbe, 0x7a, 0x9b, 0xc3, 0x9e, 0x67, 0xfd, 0xf4, 0xfe, 0xbe, 0x7c, - 0x7d, 0x32, 0x9c, 0xbe, 0x14, 0x4f, 0xc3, 0xb9, 0x27, 0x7a, 0x23, 0xf8, - 0x56, 0x41, 0x96, 0xaf, 0xbb, 0x92, 0x54, 0x81, 0xce, 0xc0, 0x2a, 0x5a, - 0xc3, 0x48, 0x5d, 0x6f, 0xf9, 0x72, 0xbd, 0x26, 0x90, 0xab, 0x98, 0x29, - 0x16, 0xd6, 0x6c, 0xb6, 0x2f, 0x6e, 0x68, 0xd6, 0x6f, 0x9b, 0xb5, 0x70, - 0xff, 0x72, 0x2d, 0x3b, 0x75, 0x22, 0xac, 0xc5, 0x95, 0xcf, 0xca, 0x15, - 0x2f, 0xeb, 0x6b, 0xe7, 0xbb, 0x4a, 0x1f, 0x46, 0x40, 0x02, 0x12, 0x8c, - 0x6b, 0x38, 0x8f, 0x5a, 0xa5, 0x37, 0x5c, 0xcf, 0xac, 0x64, 0xc1, 0xce, - 0x1f, 0xbe, 0x7a, 0xbc, 0x5d, 0x51, 0xfa, 0xd2, 0x7e, 0x3d, 0x20, 0x2f, - 0x35, 0x10, 0xbc, 0xc2, 0xc8, 0x07, 0x01, 0x75, 0x1e, 0x82, 0x1b, 0x01, - 0xf9, 0xc9, 0x2e, 0x32, 0x20, 0x27, 0x44, 0x89, 0xd3, 0x3d, 0x7c, 0x5b, - 0x46, 0x81, 0x09, 0xdd, 0xd3, 0x9d, 0x61, 0x56, 0x25, 0x2f, 0x19, 0x40, - 0x99, 0x64, 0x03, 0x8d, 0x1a, 0x60, 0x7e, 0x3b, 0xe2, 0x35, 0x0f, 0x21, - 0x34, 0xe4, 0x14, 0x7a, 0x7f, 0x08, 0x9e, 0x11, 0x14, 0x57, 0xe3, 0x69, - 0xba, 0xfe, 0x5b, 0x06, 0xa4, 0x2a, 0x6b, 0x8c, 0xad, 0xcb, 0x0a, 0xcb, - 0xd6, 0xa2, 0x7c, 0x7d, 0x4a, 0x25, 0x90, 0x2c, 0xdd, 0x06, 0xfd, 0x44, - 0xe2, 0x30, 0x90, 0x08, 0x1d, 0x73, 0xa0, 0x70, 0x5b, 0xf1, 0x12, 0x00, - 0x2d, 0x8d, 0xdd, 0x15, 0xdf, 0x6d, 0xd4, 0xcf, 0x97, 0x7e, 0x5a, 0x95, - 0xc6, 0xae, 0x67, 0xa8, 0x62, 0x09, 0xea, 0x01, 0xd0, 0x6d, 0xb7, 0x14, - 0x62, 0x57, 0x13, 0xdf, 0x29, 0xcb, 0x73, 0x21, 0xbb, 0x5e, 0xda, 0xf6, - 0x4a, 0x9a, 0x1e, 0xce, 0xbe, 0xfd, 0x6c, 0x11, 0xc9, 0x97, 0x01, 0x47, - 0xd7, 0x90, 0x28, 0xdc, 0x67, 0x88, 0xae, 0x9c, 0xab, 0x36, 0x80, 0xde, - 0x0a, 0x7b, 0xfa, 0x06, 0x0f, 0x17, 0xc3, 0x71, 0xaa, 0x9e, 0x12, 0xb1, - 0x23, 0xa0, 0xf4, 0xa8, 0xfa, 0xb9, 0x46, 0x3e, 0x41, 0x71, 0x28, 0xc8, - 0xa2, 0xaf, 0x22, 0x74, 0x4a, 0x1e, 0x23, 0x00, 0xab, 0x75, 0x9a, 0xca, - 0x79, 0x57, 0x41, 0xfc, 0x61, 0x98, 0x5f, 0xf8, 0x9f, 0x20, 0x75, 0x81, - 0x44, 0x6b, 0x3f, 0x33, 0x9c, 0x06, 0xd4, 0xfe, 0x9d, 0x1f, 0xd9, 0xe6, - 0x43, 0x82, 0x24, 0xad, 0xfc, 0xa2, 0x1e, 0xda, 0x2a, 0xc6, 0xe4, 0x27, - 0x61, 0xd9, 0xb3, 0xdc, 0xb8, 0xf7, 0x05, 0x6e, 0xa1, 0x99, 0x1c, 0xf1, - 0xee, 0x68, 0xb2, 0x35, 0xe8, 0x15, 0xae, 0xe4, 0x17, 0x82, 0x39, 0x28, - 0x0a, 0x35, 0x49, 0x6f, 0xa9, 0x68, 0x5b, 0xbb, 0x9b, 0x7b, 0x04, 0x7a, - 0x37, 0xf3, 0xcb, 0xa2, 0xef, 0xd5, 0x04, 0x62, 0x6d, 0xd3, 0xe3, 0x75, - 0xd1, 0xbc, 0xcb, 0x46, 0x81, 0xa1, 0xe5, 0x69, 0x91, 0x92, 0x0d, 0x70, - 0x3a, 0x9c, 0xaf, 0xc8, 0x06, 0xd0, 0xa1, 0x93, 0xd8, 0x50, 0x2e, 0xed, - 0xa5, 0x67, 0xba, 0x50, 0xdc, 0x15, 0x09, 0x9f, 0x6b, 0x57, 0xb4, 0xce, - 0x8c, 0xe8, 0x0f, 0x5f, 0x0a, 0x81, 0xae, 0x89, 0xaf, 0xb0, 0x01, 0x4f, - 0x0a, 0x50, 0x24, 0x5a, 0x1a, 0x82, 0x10, 0x3f, 0x02, 0xc9, 0x34, 0x4f, - 0x78, 0x42, 0xc0, 0x72, 0xbb, 0xfc, 0x5c, 0xfc, 0x06, 0x16, 0x90, 0xf7, - 0xf6, 0x3d, 0x62, 0x92, 0xd8, 0x03, 0xa8, 0xa4, 0x07, 0xb5, 0xd4, 0xa8, - 0x40, 0x2a, 0x5b, 0x9c, 0xf3, 0x70, 0x78, 0x48, 0x97, 0x38, 0x34, 0x01, - 0x8a, 0x4e, 0x34, 0xe1, 0x7c, 0xc7, 0xa4, 0x05, 0xba, 0xe2, 0x16, 0xbd, - 0x91, 0x17, 0xdf, 0xc0, 0xe9, 0x5b, 0x3f, 0xf3, 0x00, 0x44, 0x94, 0xb7, - 0x43, 0x05, 0xfb, 0x8a, 0x4d, 0xbc, 0x8b, 0x43, 0xef, 0x40, 0x13, 0x5e, - 0x1d, 0xa8, 0x93, 0xb9, 0xfc, 0x1c, 0x12, 0x37, 0x07, 0xa4, 0x2e, 0x17, - 0x48, 0x27, 0x50, 0x44, 0x25, 0x8c, 0x14, 0xcc, 0xb1, 0x3b, 0x32, 0x18, - 0x0c, 0x5b, 0xac, 0x8f, 0xdf, 0x49, 0x19, 0xff, 0x23, 0x39, 0x4c, 0x49, - 0xaf, 0x18, 0x78, 0xab, 0xa5, 0x7e, 0x58, 0x02, 0xe9, 0x2b, 0xad, 0x62, - 0x1f, 0x4a, 0x59, 0xda, 0x8e, 0x41, 0x58, 0x3c, 0x78, 0x85, 0x95, 0x14, - 0xed, 0xb4, 0xab, 0x48, 0xf5, 0x66, 0xa9, 0xd2, 0xd7, 0xc4, 0x34, 0xa4, - 0xb7, 0x1e, 0xf4, 0xb1, 0x2b, 0x43, 0xef, 0x5b, 0x67, 0x1f, 0x2c, 0x84, - 0xab, 0x9e, 0x3d, 0x72, 0x63, 0xa6, 0x7e, 0x38, 0x69, 0x74, 0x1e, 0x5c, - 0xe7, 0x6f, 0x5c, 0x0b, 0x64, 0xfd, 0xbe, 0x4a, 0x01, 0x60, 0xb2, 0x23, - 0x29, 0xb1, 0x4c, 0x14, 0xd9, 0x94, 0xae, 0xee, 0x3f, 0xa4, 0xd1, 0x30, - 0x5d, 0xf5, 0x84, 0x1c, 0x94, 0xa9, 0xba, 0x2e, 0xa1, 0xd5, 0xb1, 0xc2, - 0x21, 0x8b, 0xaf, 0x5e, 0x12, 0x27, 0x77, 0xc9, 0x57, 0x37, 0xf7, 0xeb, - 0x6a, 0xbe, 0x26, 0x99, 0xf9, 0x73, 0x95, 0x75, 0x5f, 0xe3, 0x4c, 0xd7, - 0x03, 0xa7, 0x78, 0x90, 0x61, 0x9c, 0x30, 0x0c, 0xd6, 0x8f, 0x14, 0x24, - 0x18, 0xb8, 0x0b, 0x9f, 0xaf, 0xa5, 0x85, 0xd4, 0xb0, 0xd7, 0x18, 0x69, - 0xfe, 0xae, 0xf1, 0xd0, 0x3c, 0x3d, 0xcd, 0x54, 0xb1, 0x5f, 0x29, 0xde, - 0x7f, 0x6f, 0x6c, 0x2e, 0xf3, 0xca, 0x7d, 0x57, 0x0d, 0x32, 0x66, 0xe4, - 0x11, 0x8f, 0x7d, 0x52, 0x17, 0xe7, 0x42, 0xc8, 0x69, 0x6c, 0x9a, 0x1f, - 0x7b, 0x04, 0x67, 0xc1, 0x2b, 0x04, 0xee, 0x9c, 0x47, 0x21, 0x2c, 0xa9, - 0x49, 0x61, 0x49, 0x83, 0x18, 0x16, 0x60, 0x5d, 0x80, 0x02, 0xc2, 0xad, - 0x17, 0xa2, 0xc2, 0x7d, 0xc1, 0x0a, 0xde, 0x3c, 0x8f, 0x4b, 0xf3, 0x7f, - 0xc5, 0x2b, 0x22, 0x41, 0xd7, 0x83, 0x39, 0xf3, 0x7a, 0x25, 0xa8, 0x23, - 0x41, 0xa0, 0x5e, 0x1b, 0x38, 0x64, 0x54, 0x89, 0xb1, 0x07, 0x87, 0x63, - 0x71, 0x1c, 0x73, 0xdf, 0x9b, 0xee, 0x6c, 0xb8, 0xc0, 0x23, 0x7c, 0xff, - 0x04, 0xd8, 0x6b, 0x1f, 0xa6, 0xf5, 0x9b, 0x7f, 0x79, 0x36, 0xe7, 0x7f, - 0xe6, 0x8b, 0xc7, 0x40, 0x41, 0x0d, 0x7c, 0x10, 0xc3, 0x76, 0x7a, 0x14, - 0x0a, 0x2c, 0xeb, 0x15, 0x69, 0xeb, 0x3f, 0x7d, 0xc7, 0x30, 0xfa, 0xfd, - 0xcd, 0x3e, 0x1e, 0xc4, 0xb3, 0x37, 0x62, 0x3d, 0x86, 0x21, 0xf4, 0xbc, - 0x86, 0x98, 0x77, 0x7a, 0x89, 0x74, 0x2d, 0x3c, 0xe9, 0x21, 0x16, 0xc9, - 0x95, 0xf5, 0x1f, 0x67, 0xba, 0x26, 0x4a, 0xb2, 0x24, 0x62, 0x57, 0xc2, - 0x9d, 0xa9, 0xf4, 0x5d, 0xb6, 0x18, 0xd4, 0x51, 0xf5, 0x6e, 0x8e, 0xdb, - 0x0d, 0x4f, 0x0e, 0x63, 0x44, 0xbe, 0xb5, 0x8d, 0x68, 0xc3, 0x96, 0xa5, - 0x64, 0x19, 0xef, 0xdb, 0x86, 0x25, 0x2f, 0x25, 0x02, 0xb4, 0x1f, 0x5b, - 0x7b, 0xba, 0xa1, 0xb7, 0xef, 0xde, 0x91, 0x5b, 0xbb, 0xb5, 0xca, 0x2a, - 0x77, 0x6e, 0x96, 0x69, 0x0f, 0xd0, 0x9d, 0xbe, 0x3f, 0x9c, 0xbe, 0x3f, - 0x9d, 0xbe, 0xbb, 0xd3, 0xb7, 0x9d, 0x26, 0xca, 0x7d, 0x00, 0xa8, 0x1d, - 0xc6, 0xe0, 0x34, 0x3d, 0xd9, 0x9b, 0xdd, 0xe4, 0xaf, 0xc5, 0xe1, 0x26, - 0xcc, 0x9a, 0x24, 0xca, 0xde, 0xd0, 0x01, 0x93, 0xa1, 0x8f, 0xf7, 0x79, - 0x09, 0xe2, 0x26, 0x86, 0xd3, 0x7b, 0x66, 0xe6, 0x3d, 0xce, 0x83, 0x92, - 0xcf, 0xd5, 0x12, 0x6a, 0xba, 0xdc, 0x57, 0xd0, 0xf2, 0x09, 0xb7, 0xf8, - 0xea, 0xe7, 0xab, 0x79, 0x0e, 0xc8, 0x7c, 0xbb, 0x53, 0xe2, 0x72, 0x25, - 0xec, 0x48, 0xee, 0x85, 0x1d, 0x01, 0x64, 0x63, 0xd4, 0x8f, 0xde, 0xd2, - 0x01, 0x70, 0x96, 0x9f, 0xf8, 0xde, 0x1c, 0x5f, 0x32, 0xc4, 0x7a, 0x0f, - 0x5c, 0x29, 0x8e, 0x73, 0x15, 0x13, 0xa9, 0x82, 0xa8, 0x04, 0xfb, 0x4e, - 0x3e, 0x87, 0xa9, 0x1c, 0xe4, 0x4b, 0x0c, 0xd8, 0x76, 0x4e, 0x9e, 0xeb, - 0x26, 0x26, 0x90, 0xab, 0x28, 0x64, 0x09, 0xb3, 0x29, 0x0a, 0x60, 0xe1, - 0xf9, 0x04, 0xd7, 0x55, 0xba, 0x20, 0x88, 0xaf, 0xba, 0xde, 0x9f, 0x82, - 0xfb, 0xab, 0xf8, 0x15, 0xae, 0xb0, 0x8f, 0x55, 0x3f, 0x97, 0xb6, 0x31, - 0x92, 0x56, 0x2b, 0xf6, 0xac, 0x00, 0x5d, 0x37, 0xa3, 0x4d, 0xc9, 0x1b, - 0xf8, 0x5a, 0x72, 0x47, 0x5a, 0x43, 0x51, 0x51, 0x45, 0xf7, 0x45, 0x07, - 0xbd, 0x82, 0xec, 0x3e, 0x56, 0x08, 0x2a, 0x98, 0xe8, 0x89, 0xd7, 0x0b, - 0x15, 0x1c, 0xdc, 0x28, 0xe3, 0xd6, 0x53, 0x6a, 0x27, 0xab, 0x89, 0xd2, - 0xf9, 0x54, 0x2e, 0xba, 0x0e, 0x58, 0x09, 0xef, 0x4d, 0x73, 0x60, 0x30, - 0x4e, 0x0d, 0x2f, 0x76, 0x9e, 0x32, 0xc4, 0x57, 0x12, 0x1e, 0x6a, 0x44, - 0x15, 0x44, 0x00, 0x4c, 0x3b, 0x14, 0x52, 0x65, 0xf9, 0xc7, 0x70, 0xb0, - 0x17, 0x90, 0xb8, 0x05, 0xf2, 0x80, 0x3e, 0x00, 0x31, 0x5a, 0x4a, 0x00, - 0xb9, 0x29, 0x6a, 0x92, 0x8a, 0x83, 0x08, 0x25, 0x44, 0x37, 0xc3, 0xb8, - 0xc0, 0xd5, 0x9d, 0x12, 0x7c, 0xbf, 0x4c, 0x52, 0x1c, 0x0a, 0x8e, 0x9c, - 0x7a, 0xc7, 0x0f, 0x83, 0x73, 0x30, 0x60, 0xfd, 0xa9, 0xcc, 0xd5, 0x7e, - 0xb1, 0x26, 0x90, 0x6e, 0x0d, 0x68, 0xfa, 0x0c, 0xdc, 0xdc, 0xee, 0x43, - 0x53, 0x14, 0x9b, 0x03, 0x2d, 0xe3, 0x0f, 0x36, 0xcd, 0x5f, 0x2e, 0xb8, - 0x55, 0xd3, 0xd6, 0x10, 0x3b, 0x66, 0x70, 0xc6, 0x6f, 0xbc, 0xc8, 0x0f, - 0xe4, 0xdf, 0x90, 0xef, 0xeb, 0x00, 0x9b, 0xbf, 0xe4, 0xa2, 0x28, 0xd7, - 0x21, 0xd9, 0x91, 0xa0, 0x79, 0xa2, 0xbc, 0xd9, 0x40, 0x6e, 0x73, 0x2b, - 0x0a, 0x7a, 0x8c, 0x79, 0x65, 0xe7, 0x56, 0x25, 0xc0, 0x2d, 0x9f, 0x3f, - 0x86, 0xbf, 0x33, 0xd7, 0x2a, 0xce, 0x4a, 0x33, 0xe7, 0xc0, 0x0c, 0x2e, - 0x9e, 0x7d, 0xf2, 0x49, 0x83, 0x88, 0x10, 0xd0, 0xe4, 0x94, 0x92, 0xe9, - 0x71, 0x72, 0x5e, 0xcf, 0xce, 0xfc, 0x59, 0x33, 0x01, 0x80, 0x65, 0xda, - 0x1a, 0x6a, 0x7d, 0x22, 0xd9, 0xe2, 0xb8, 0x50, 0x6d, 0x8a, 0x2d, 0xc5, - 0xad, 0xf2, 0x24, 0xdd, 0x9d, 0x49, 0xda, 0x8a, 0x48, 0x72, 0xd0, 0x97, - 0xc1, 0x81, 0x4d, 0xb4, 0xf8, 0xf9, 0xd6, 0x63, 0x8c, 0xad, 0xb2, 0x11, - 0x3b, 0xfa, 0x98, 0xdc, 0xe6, 0x48, 0x26, 0x75, 0xb3, 0x89, 0x2e, 0x0a, - 0x6e, 0x39, 0xc2, 0x4d, 0x2c, 0x45, 0x01, 0x2f, 0xdd, 0xab, 0x14, 0x83, - 0xda, 0x0a, 0x29, 0x4d, 0x61, 0xb8, 0x5c, 0x83, 0xf6, 0xb2, 0x4d, 0xbb, - 0x89, 0xee, 0x54, 0x0b, 0x6a, 0xfd, 0x5a, 0xe1, 0x7f, 0x26, 0x25, 0x04, - 0x17, 0x0d, 0xdc, 0x39, 0x70, 0x2d, 0xab, 0xc0, 0x0e, 0xbf, 0x94, 0xe6, - 0xc4, 0xa1, 0x49, 0xb4, 0x90, 0x91, 0xcc, 0x8a, 0x3b, 0x9c, 0xb5, 0x6c, - 0x26, 0x3e, 0xa6, 0x03, 0x6e, 0x09, 0x2d, 0x43, 0xd7, 0x5c, 0xb9, 0xd3, - 0x24, 0x75, 0xab, 0xda, 0xb6, 0x05, 0x7a, 0x86, 0x99, 0xf8, 0x57, 0x36, - 0xb1, 0x31, 0x57, 0x57, 0xf5, 0xab, 0x8e, 0xa2, 0xce, 0x63, 0x34, 0x91, - 0xa2, 0x40, 0x65, 0x7c, 0x91, 0xf3, 0x77, 0xd9, 0x54, 0xbf, 0xbd, 0x6a, - 0xfe, 0x0c, 0xe2, 0xa2, 0x55, 0xa4, 0xac, 0xfe, 0x05, 0x80, 0x9d, 0x30, - 0x29, 0xc7, 0xe2, 0x35, 0x74, 0x37, 0xa5, 0xb5, 0x0b, 0x7d, 0x6a, 0xf8, - 0xec, 0xb8, 0x57, 0xde, 0xf4, 0x31, 0xe0, 0xae, 0xc3, 0x95, 0x9b, 0x81, - 0xe9, 0x6e, 0x8f, 0x88, 0x48, 0x37, 0x72, 0x67, 0x95, 0x3e, 0x86, 0xdf, - 0x75, 0xb8, 0xa1, 0x33, 0x30, 0xdd, 0xd5, 0x3b, 0x3c, 0x92, 0xac, 0xfe, - 0xe4, 0x5d, 0x36, 0x50, 0xb9, 0xdf, 0xef, 0x76, 0x6b, 0xcd, 0xe6, 0x89, - 0x25, 0x5b, 0x87, 0x21, 0x75, 0x62, 0xaa, 0x66, 0x29, 0x8f, 0x41, 0x0e, - 0x32, 0xf4, 0xc8, 0x5d, 0x93, 0xfb, 0xf8, 0x24, 0x49, 0x8f, 0x04, 0x2d, - 0x4e, 0xd9, 0xda, 0x22, 0x01, 0xbf, 0x7c, 0x2c, 0x01, 0x7c, 0x71, 0xcd, - 0x4e, 0xcd, 0xe4, 0xbb, 0x9a, 0x74, 0x6f, 0xdb, 0x6b, 0xe6, 0x34, 0x68, - 0x93, 0x0d, 0x9c, 0x23, 0x85, 0x3a, 0xcd, 0x20, 0x08, 0x93, 0xbe, 0x71, - 0x06, 0x4e, 0xeb, 0x4a, 0xe8, 0x27, 0x6c, 0xad, 0x22, 0x1d, 0x31, 0x02, - 0x54, 0xe4, 0xdc, 0x38, 0x62, 0xc8, 0xc2, 0x86, 0xa1, 0x7f, 0x6c, 0x46, - 0x25, 0x9b, 0x8c, 0xb9, 0x50, 0x3e, 0xb3, 0xa1, 0x0c, 0x49, 0x2e, 0x91, - 0xa4, 0xf2, 0x91, 0x8a, 0xd2, 0x22, 0x5b, 0x5a, 0x6c, 0xcb, 0x47, 0x74, - 0xf7, 0x28, 0x65, 0xa8, 0x7d, 0xf0, 0xf0, 0x01, 0xa8, 0x69, 0x47, 0x85, - 0x11, 0x25, 0x3a, 0x76, 0x8e, 0x74, 0xb9, 0xb8, 0x15, 0xc7, 0x1a, 0x10, - 0x5b, 0x69, 0xea, 0x10, 0xca, 0x8d, 0xc3, 0x00, 0x44, 0x91, 0x47, 0x13, - 0x21, 0x7e, 0x05, 0x52, 0xd9, 0xe1, 0x9a, 0x8d, 0xe3, 0x5f, 0x5a, 0x43, - 0x00, 0xda, 0xe2, 0xe7, 0xa5, 0x59, 0x6c, 0xde, 0xcc, 0x1e, 0x36, 0xcb, - 0xc3, 0x0e, 0xb7, 0xd6, 0xaf, 0x0d, 0xaa, 0x7a, 0xc5, 0x28, 0xc1, 0x9a, - 0x37, 0xa9, 0xe9, 0x72, 0x8c, 0x87, 0x4f, 0xec, 0x66, 0xbd, 0x63, 0x9d, - 0x28, 0x23, 0x0e, 0x9b, 0x7f, 0x58, 0xee, 0xcd, 0x84, 0x67, 0xdb, 0xe6, - 0xb5, 0xa6, 0x20, 0x06, 0x51, 0x61, 0xe1, 0x5d, 0x3a, 0xb5, 0x5f, 0xa4, - 0xc4, 0x44, 0xb5, 0x90, 0x49, 0xcb, 0x06, 0xbd, 0x7b, 0x11, 0x67, 0x2f, - 0xbe, 0x78, 0xa4, 0x49, 0x34, 0xeb, 0x2b, 0xc6, 0xcb, 0x48, 0x24, 0x7f, - 0x28, 0x65, 0xb2, 0x4e, 0x13, 0x73, 0xe6, 0x3a, 0xfc, 0x60, 0x97, 0x43, - 0x71, 0x3e, 0x20, 0x43, 0x35, 0xe1, 0x72, 0xfc, 0x30, 0x12, 0x9a, 0x1d, - 0xfc, 0x04, 0x6f, 0x2f, 0x8b, 0xa4, 0xe2, 0xa7, 0xc7, 0x15, 0xf5, 0xe4, - 0x31, 0x4b, 0x0a, 0x42, 0x05, 0x57, 0x8d, 0x5d, 0x00, 0x12, 0x03, 0x2b, - 0xa8, 0xa5, 0x2f, 0x20, 0x73, 0xb7, 0x82, 0x64, 0xf2, 0x6b, 0xeb, 0x0c, - 0x72, 0x8e, 0xd3, 0xa8, 0xf4, 0x50, 0x2c, 0x67, 0x61, 0x45, 0x84, 0x50, - 0xce, 0x71, 0xed, 0x53, 0x53, 0xd2, 0xc7, 0x77, 0x73, 0xf2, 0xcd, 0xd9, - 0xe7, 0xe3, 0x5b, 0x33, 0x2e, 0xd2, 0x31, 0x4f, 0xbe, 0x2d, 0xb3, 0x56, - 0x68, 0x4c, 0x7e, 0x5d, 0xd0, 0x30, 0xf8, 0x76, 0x70, 0x26, 0x18, 0x3f, - 0xd7, 0xba, 0x3e, 0x89, 0xf2, 0x27, 0x56, 0x04, 0xd5, 0x04, 0x17, 0x7e, - 0x40, 0xf9, 0x2e, 0xe4, 0x71, 0xde, 0xdc, 0x2b, 0x60, 0xdb, 0xaf, 0x16, - 0x2b, 0xb9, 0x1c, 0xc2, 0xcc, 0x91, 0x07, 0xde, 0xca, 0xb7, 0xa2, 0x0b, - 0xae, 0xd7, 0x09, 0x9c, 0x34, 0xce, 0xcd, 0xd5, 0xac, 0x07, 0x82, 0x44, - 0xd7, 0x31, 0xad, 0xe4, 0x1f, 0x0d, 0x75, 0xff, 0x5a, 0x24, 0xeb, 0xfa, - 0x31, 0xc6, 0x83, 0x60, 0x9c, 0xbc, 0x4f, 0x59, 0xa4, 0xdd, 0xe0, 0xc3, - 0x77, 0x98, 0x9c, 0xff, 0x63, 0xd0, 0x83, 0x89, 0xf8, 0x9d, 0x53, 0x7e, - 0x35, 0xe8, 0x3a, 0x13, 0xc2, 0x58, 0x81, 0xb2, 0x0a, 0x11, 0x60, 0x19, - 0xc4, 0x5e, 0x0e, 0x26, 0x8f, 0x0f, 0xee, 0x1c, 0xb9, 0x77, 0xb7, 0xbd, - 0xc8, 0x9b, 0xa1, 0xda, 0x3f, 0xe2, 0xf9, 0x1c, 0xe1, 0x6d, 0x9d, 0x03, - 0x96, 0x6e, 0xe3, 0x30, 0x99, 0x87, 0xb8, 0x8b, 0x0b, 0x87, 0x87, 0xe6, - 0xb8, 0x46, 0x8b, 0x5a, 0xae, 0x98, 0x57, 0xc0, 0xee, 0x92, 0x22, 0xfc, - 0xa8, 0x8a, 0xa3, 0xb1, 0x73, 0xfe, 0x60, 0x5a, 0xb5, 0x58, 0x2c, 0xbe, - 0x24, 0x60, 0xf4, 0x98, 0x95, 0x3d, 0x5b, 0xfe, 0xe1, 0xc9, 0xe4, 0x1a, - 0x68, 0x9e, 0x3b, 0x8a, 0x6c, 0x21, 0xa3, 0x91, 0xc3, 0x4c, 0x0f, 0x00, - 0x9c, 0x0f, 0x27, 0xcc, 0x3a, 0x2a, 0x7f, 0xce, 0x08, 0x59, 0x55, 0x4e, - 0xfb, 0x58, 0xa0, 0xc3, 0x26, 0x19, 0x59, 0x57, 0x80, 0x74, 0x4d, 0xe1, - 0xc0, 0xab, 0x46, 0xa2, 0x56, 0x41, 0x80, 0x1b, 0x74, 0x28, 0x69, 0xeb, - 0x1e, 0x41, 0xac, 0xde, 0x65, 0x1e, 0xf8, 0xa0, 0xbf, 0xb3, 0x93, 0x27, - 0xc8, 0xf9, 0xcf, 0x03, 0x55, 0x5e, 0x5b, 0x09, 0x15, 0xb6, 0x62, 0x29, - 0xdb, 0x67, 0xf5, 0x10, 0xef, 0xc0, 0xca, 0xd6, 0x6b, 0x8a, 0xf0, 0xd9, - 0xb1, 0x63, 0x56, 0xb6, 0xcf, 0x1a, 0x23, 0xbe, 0x7b, 0xc0, 0x25, 0x0a, - 0x50, 0x33, 0xaa, 0x7d, 0xc0, 0xd0, 0x0a, 0xc4, 0x0f, 0x8d, 0x80, 0x06, - 0xdb, 0xd9, 0xf1, 0xe0, 0x35, 0xb9, 0xe7, 0x5f, 0x76, 0xa3, 0x52, 0x95, - 0x6d, 0xb0, 0x18, 0x73, 0x20, 0x32, 0xff, 0x95, 0x8e, 0xa6, 0x80, 0xcd, - 0x87, 0x8f, 0xd4, 0xf7, 0xe4, 0x0e, 0xee, 0x4f, 0x1f, 0x0e, 0x99, 0x6b, - 0x11, 0x1f, 0x93, 0x7d, 0x7e, 0x24, 0xea, 0xfc, 0x4c, 0xd2, 0xf9, 0x61, - 0xb1, 0x45, 0x38, 0xaa, 0x4e, 0x39, 0x4b, 0xcf, 0x50, 0x7e, 0x59, 0xd7, - 0xf6, 0x69, 0x58, 0x50, 0x91, 0x1b, 0xf7, 0x2c, 0x65, 0xd0, 0x61, 0xb7, - 0x77, 0x55, 0xad, 0x82, 0x60, 0xbc, 0xc5, 0x28, 0xfa, 0xa7, 0x7d, 0xda, - 0x9a, 0x13, 0xca, 0x28, 0xee, 0x91, 0x0e, 0x83, 0x1e, 0x6f, 0x99, 0x44, - 0xcd, 0x17, 0xc7, 0x0b, 0x21, 0x64, 0x4c, 0xed, 0x6d, 0xfe, 0xf0, 0x29, - 0x7f, 0x7a, 0x93, 0xfd, 0xf2, 0x24, 0xf0, 0xf3, 0xf3, 0xb7, 0x14, 0x7e, - 0x44, 0x1c, 0xad, 0x53, 0x96, 0xf0, 0x98, 0x0c, 0x20, 0xa4, 0x98, 0x77, - 0xaa, 0xc5, 0x45, 0x63, 0x0e, 0xfc, 0x51, 0x0b, 0x9b, 0x61, 0x37, 0x88, - 0xf0, 0x5a, 0xbf, 0x62, 0x38, 0x74, 0xb7, 0xfb, 0xd4, 0xf7, 0x10, 0xc1, - 0xdc, 0x03, 0x2c, 0x63, 0xda, 0x3e, 0x06, 0xef, 0x1d, 0xa7, 0x0c, 0xe9, - 0x1c, 0xa0, 0x2b, 0xd0, 0x3e, 0x15, 0x5e, 0xfc, 0x27, 0xd2, 0x38, 0xb7, - 0xcf, 0x4e, 0x5f, 0x57, 0x9e, 0x23, 0xa6, 0x1b, 0x6b, 0x7e, 0xf8, 0xc0, - 0x13, 0xf8, 0xb1, 0xcf, 0x20, 0x5f, 0x1e, 0x86, 0xc7, 0xe0, 0x18, 0x8c, - 0xb3, 0x6f, 0x76, 0xa9, 0xcf, 0xb1, 0xb3, 0x69, 0xf8, 0x0a, 0x68, 0x6b, - 0xe7, 0xd2, 0x9d, 0x03, 0x0f, 0x85, 0x01, 0x3e, 0xe5, 0x01, 0xb6, 0xb2, - 0x5f, 0x86, 0x18, 0x2f, 0x11, 0xe1, 0x35, 0xee, 0x42, 0x13, 0xe3, 0x86, - 0xc7, 0xd9, 0x70, 0xb3, 0xb2, 0x6c, 0xc3, 0xd8, 0x4c, 0xbe, 0x59, 0x8a, - 0x4d, 0x46, 0x30, 0x7d, 0x80, 0xd9, 0xfb, 0x56, 0x01, 0x70, 0x2b, 0x67, - 0xc1, 0x26, 0xa0, 0xad, 0x9b, 0xfc, 0x65, 0x39, 0x42, 0xd6, 0xa5, 0xa1, - 0x77, 0x63, 0xc7, 0xa6, 0x04, 0xee, 0x83, 0x69, 0x96, 0xba, 0x5f, 0x7f, - 0x46, 0xe8, 0xc2, 0xaf, 0xb0, 0x3b, 0x5b, 0x3e, 0x2a, 0x39, 0xee, 0xe5, - 0x44, 0x6a, 0x96, 0xa9, 0x65, 0x4b, 0x6d, 0xaf, 0x03, 0xfc, 0x88, 0xc3, - 0xd8, 0x94, 0xf5, 0xb8, 0x43, 0xa0, 0x05, 0xb6, 0x44, 0xb4, 0x96, 0x9e, - 0x09, 0xcb, 0xff, 0x64, 0xc2, 0x32, 0x26, 0x7a, 0x09, 0xef, 0x36, 0x7b, - 0xe7, 0xba, 0x59, 0x69, 0xf7, 0x23, 0x9d, 0xcd, 0x7e, 0x2c, 0xa6, 0x1f, - 0xbb, 0xea, 0x6a, 0x1d, 0x67, 0x6c, 0x0b, 0xb3, 0xbc, 0x48, 0x50, 0x1a, - 0x9a, 0x5b, 0x3a, 0x86, 0x34, 0x24, 0x8f, 0x14, 0x3b, 0xe5, 0x73, 0x0e, - 0xc6, 0xbd, 0x8e, 0x01, 0xa7, 0xb0, 0x74, 0x8c, 0x2d, 0x29, 0x1d, 0xe1, - 0xa3, 0xc7, 0xcd, 0x3d, 0x0d, 0x85, 0x99, 0x5a, 0x3f, 0x29, 0xcd, 0xc6, - 0xa4, 0x91, 0x23, 0x7a, 0x6a, 0x69, 0x30, 0xc6, 0xa7, 0xb4, 0x8e, 0x2e, - 0x4b, 0x03, 0x35, 0xd0, 0x3c, 0x64, 0x74, 0x9e, 0xef, 0x73, 0xb7, 0x03, - 0xe6, 0x23, 0x4e, 0x61, 0x32, 0x14, 0xac, 0x8d, 0x46, 0xf7, 0xc7, 0xd8, - 0x68, 0x70, 0x14, 0xfc, 0xe9, 0xc5, 0x31, 0xd8, 0x3e, 0x8e, 0x88, 0xc5, - 0x72, 0x68, 0x50, 0xde, 0xf1, 0xac, 0xc2, 0x28, 0x79, 0xae, 0x24, 0x34, - 0x0f, 0x50, 0x8e, 0xce, 0x50, 0x9e, 0xd8, 0x71, 0x6b, 0x92, 0x65, 0x6d, - 0xc1, 0x00, 0x0e, 0x31, 0xaa, 0x6c, 0x1a, 0x6a, 0x48, 0x3f, 0x4f, 0xa8, - 0x38, 0xdf, 0xa6, 0x4f, 0xc6, 0xd1, 0xfb, 0x18, 0xbf, 0xf6, 0x61, 0xc0, - 0xda, 0x63, 0x94, 0xda, 0x3f, 0x74, 0x7c, 0x90, 0x77, 0xa7, 0x2e, 0x21, - 0x8e, 0xa2, 0x9a, 0xbe, 0x51, 0x9c, 0xa3, 0x23, 0x7a, 0x68, 0x72, 0x87, - 0x7b, 0x4f, 0x3f, 0xfe, 0x59, 0xe5, 0x79, 0xe2, 0x70, 0xe7, 0x1f, 0xea, - 0x9c, 0x69, 0xfa, 0x75, 0x01, 0xb8, 0x22, 0x87, 0x24, 0xca, 0xfa, 0x19, - 0x34, 0x02, 0x35, 0x8e, 0x31, 0xde, 0xa8, 0xa6, 0x43, 0x49, 0xdc, 0x42, - 0x7f, 0x46, 0x45, 0x75, 0xba, 0xd3, 0xea, 0x83, 0xb8, 0x1c, 0xc8, 0x55, - 0x78, 0xb3, 0xf2, 0x0b, 0x80, 0xe5, 0x0c, 0x3a, 0x3a, 0x5a, 0xfa, 0xed, - 0xc6, 0x60, 0xd7, 0x79, 0xfc, 0x39, 0x9c, 0x0f, 0x7a, 0x2b, 0xc0, 0x86, - 0xf7, 0xdb, 0xf9, 0x69, 0xfa, 0x31, 0xe4, 0x85, 0x89, 0x53, 0x31, 0x88, - 0xa9, 0x07, 0xb7, 0x9f, 0x41, 0x7d, 0x6e, 0xb7, 0x35, 0xe1, 0x5f, 0x82, - 0x65, 0x9c, 0xae, 0x75, 0x93, 0xc7, 0x07, 0x77, 0x8e, 0x5c, 0xf7, 0xba, - 0x8c, 0x63, 0x24, 0x96, 0x38, 0xdb, 0x98, 0xea, 0x3c, 0x74, 0xd4, 0x64, - 0x7b, 0x7e, 0xe5, 0x46, 0x6f, 0x29, 0xd2, 0x9e, 0xa5, 0x5e, 0x25, 0x60, - 0x0b, 0x14, 0x4c, 0x6a, 0xf0, 0x18, 0xac, 0xbf, 0x3b, 0x8e, 0x67, 0xd6, - 0xe2, 0x6c, 0x3d, 0x9a, 0x4d, 0x40, 0xcf, 0xf8, 0xf9, 0x8e, 0x0d, 0x5f, - 0x85, 0x76, 0xf7, 0xd2, 0x1c, 0x92, 0x6d, 0xfc, 0xf3, 0xe2, 0x9d, 0x7d, - 0x3c, 0x58, 0xe3, 0x7e, 0xc0, 0x46, 0x69, 0x00, 0xb7, 0x88, 0x53, 0x28, - 0xe4, 0x04, 0x14, 0xa9, 0xfd, 0xc8, 0x4d, 0x8e, 0xfb, 0x03, 0xbb, 0x60, - 0x5c, 0x30, 0xc6, 0x4b, 0xcb, 0x91, 0x65, 0xdb, 0x22, 0x2f, 0x97, 0xa3, - 0x97, 0xe6, 0xd2, 0x62, 0xad, 0x8b, 0xcb, 0x02, 0x11, 0x74, 0x6c, 0x7f, - 0x02, 0x75, 0x8b, 0xe3, 0x6e, 0xe7, 0x76, 0x49, 0x97, 0xc8, 0x8b, 0x74, - 0x69, 0x51, 0x49, 0x97, 0x88, 0x08, 0x16, 0xc8, 0xee, 0x89, 0x2b, 0x93, - 0xaf, 0x41, 0x47, 0xb3, 0xe9, 0x34, 0xda, 0xd3, 0x50, 0xf5, 0x52, 0xd1, - 0x55, 0x05, 0x48, 0x1d, 0x6e, 0xb7, 0x6e, 0xc0, 0x9c, 0x1d, 0xb4, 0x58, - 0x84, 0xca, 0x68, 0xc3, 0xa1, 0x9e, 0x94, 0xaf, 0x38, 0xd4, 0x12, 0x36, - 0xda, 0x97, 0xc1, 0xcf, 0x92, 0x73, 0xc7, 0xad, 0x20, 0x19, 0xd7, 0xeb, - 0xfc, 0xe8, 0x4d, 0x18, 0x8c, 0x12, 0x7b, 0xc5, 0xdc, 0xa5, 0x37, 0x33, - 0xb2, 0xb9, 0x43, 0x45, 0xf1, 0x3a, 0xcc, 0x76, 0xc8, 0xf4, 0x0a, 0x7b, - 0xb5, 0x0e, 0x90, 0x40, 0x76, 0x8a, 0x38, 0xc5, 0xb9, 0x5b, 0x67, 0xcf, - 0x91, 0xcb, 0x9d, 0x69, 0x11, 0x5d, 0x6e, 0x51, 0xb8, 0xd7, 0x18, 0x6c, - 0xa1, 0x03, 0xe8, 0xb2, 0xec, 0x6a, 0x85, 0xd7, 0xa5, 0xc5, 0x62, 0xf1, - 0xe9, 0x7d, 0x58, 0x6f, 0xb7, 0x93, 0x8c, 0x35, 0x87, 0x23, 0xe3, 0xc1, - 0x75, 0xe3, 0x65, 0x80, 0xc0, 0x38, 0x0a, 0x73, 0xf4, 0x92, 0x7b, 0x27, - 0xdd, 0xfb, 0x00, 0x59, 0xb6, 0x66, 0x6d, 0xc8, 0xb4, 0x16, 0x40, 0x32, - 0xc1, 0x6b, 0x59, 0x35, 0x8e, 0x6b, 0xb9, 0xcc, 0x63, 0x36, 0x96, 0x8b, - 0xad, 0x96, 0xcb, 0x30, 0x8a, 0x91, 0x7d, 0x8e, 0xdc, 0x19, 0x34, 0xaa, - 0x11, 0xf0, 0xf2, 0xe1, 0x51, 0x0b, 0xbe, 0xf4, 0x53, 0x19, 0x32, 0x29, - 0x77, 0xe4, 0x5e, 0x9e, 0x5c, 0x6e, 0xde, 0x2f, 0xf6, 0x7e, 0x9c, 0xe4, - 0x6c, 0xd7, 0xd7, 0x3a, 0x51, 0xb4, 0x18, 0xe1, 0x6c, 0xaa, 0xcd, 0x3f, - 0x55, 0xaa, 0x39, 0x34, 0x66, 0x61, 0x1a, 0x92, 0x54, 0x77, 0xb9, 0x85, - 0xb4, 0x7d, 0xf3, 0xc3, 0xc3, 0x39, 0x90, 0x7e, 0x99, 0x2b, 0x38, 0xc5, - 0xe9, 0x1b, 0xb2, 0x6c, 0xfb, 0x4f, 0x6d, 0x22, 0x19, 0xd0, 0x35, 0xcc, - 0x9c, 0x42, 0x6a, 0x8c, 0x7f, 0xaa, 0x15, 0x44, 0x53, 0x36, 0xe3, 0xe8, - 0x4f, 0xc5, 0xa9, 0x5e, 0x1a, 0x37, 0xcf, 0x83, 0x73, 0x47, 0x3c, 0x1a, - 0xd8, 0x2d, 0xa5, 0x2d, 0x09, 0x38, 0xc3, 0xbf, 0xa1, 0xcc, 0x61, 0x8b, - 0x9f, 0x75, 0x34, 0x47, 0x14, 0xd1, 0xca, 0xcf, 0x49, 0xe0, 0x38, 0xa6, - 0xb0, 0xd7, 0x9a, 0x96, 0x61, 0xeb, 0xfb, 0xbf, 0x63, 0xa6, 0x51, 0x11, - 0x9f, 0x70, 0x57, 0xb0, 0x5c, 0xc3, 0xdd, 0x12, 0x7b, 0xa9, 0x80, 0x2d, - 0x02, 0x80, 0x83, 0x69, 0xbf, 0x75, 0xd1, 0xf9, 0xa8, 0x31, 0xdf, 0x8b, - 0xdb, 0xcd, 0xf7, 0x72, 0x2b, 0x43, 0xca, 0x1b, 0x17, 0xd1, 0x18, 0x0c, - 0x1c, 0xf4, 0x30, 0xc8, 0x80, 0x69, 0x69, 0x5e, 0x22, 0xff, 0x79, 0xf7, - 0xeb, 0xda, 0x60, 0xf7, 0xbb, 0xe6, 0xcf, 0xe0, 0x54, 0xc2, 0x8e, 0x85, - 0x9c, 0xd2, 0xda, 0x40, 0x07, 0xeb, 0xc7, 0xa5, 0x55, 0x83, 0xc5, 0x5b, - 0x31, 0x1b, 0x64, 0xf7, 0x0c, 0xd1, 0x1d, 0xaa, 0x4d, 0xad, 0x99, 0x67, - 0x03, 0xcd, 0xb0, 0xb4, 0xcc, 0xc1, 0xc9, 0x41, 0x6f, 0x0e, 0x62, 0x7b, - 0x7b, 0x22, 0x3f, 0x5a, 0x6d, 0x5e, 0xa4, 0x16, 0xcf, 0x8a, 0x22, 0x57, - 0x08, 0xcf, 0x06, 0xc3, 0xcf, 0x71, 0xf2, 0x6a, 0x56, 0x4e, 0xfd, 0x1d, - 0xd6, 0xa3, 0x95, 0x73, 0x8b, 0xff, 0xc6, 0x43, 0x84, 0xd0, 0xb2, 0x94, - 0x28, 0x0f, 0xfe, 0xec, 0xc1, 0x83, 0x0b, 0x4f, 0x2a, 0x6c, 0xb9, 0x5d, - 0xc6, 0xce, 0xb6, 0x72, 0x43, 0xb8, 0x6d, 0x60, 0xfa, 0x2e, 0x83, 0x47, - 0x9e, 0xf6, 0xa9, 0x33, 0xbb, 0xb1, 0x26, 0xde, 0xea, 0x24, 0x6a, 0xf0, - 0x45, 0x6c, 0xcf, 0x93, 0xdb, 0xc7, 0xdc, 0xeb, 0xd6, 0xe6, 0x5e, 0xb7, - 0x61, 0xee, 0x75, 0x53, 0x33, 0xb8, 0xcd, 0xbd, 0x24, 0x20, 0x81, 0xfe, - 0x5b, 0x7a, 0x3f, 0x07, 0x66, 0xf8, 0xb1, 0x96, 0xe5, 0xd7, 0x60, 0x7b, - 0x0b, 0x5f, 0xb7, 0x5e, 0x5f, 0xc5, 0xf4, 0xa0, 0xb1, 0x65, 0x33, 0xb0, - 0x76, 0x20, 0xbd, 0xf1, 0x40, 0x47, 0xf3, 0x6e, 0xd1, 0x6c, 0xf3, 0xb6, - 0xa6, 0x21, 0x0c, 0x68, 0xb6, 0x89, 0xa6, 0x1e, 0x4c, 0xfb, 0xad, 0x9c, - 0x7d, 0x37, 0x94, 0xb2, 0xca, 0xf1, 0x2d, 0x24, 0x38, 0xea, 0x1a, 0x12, - 0x66, 0x56, 0x75, 0xf2, 0x96, 0xe7, 0x9b, 0x9b, 0x23, 0x61, 0xb7, 0x65, - 0xa6, 0x35, 0xe5, 0x0f, 0x93, 0xd1, 0x41, 0xef, 0xc0, 0x65, 0xd0, 0x3c, - 0x6e, 0x86, 0xad, 0x4f, 0x38, 0x9b, 0x81, 0x36, 0x2a, 0x85, 0x63, 0xdb, - 0xb2, 0x72, 0xad, 0xa2, 0x0b, 0xbe, 0x0c, 0x23, 0x3f, 0x73, 0xe9, 0xdb, - 0x0f, 0xdb, 0xb0, 0x69, 0xbf, 0xb5, 0xb9, 0xea, 0x72, 0xf1, 0x5c, 0x8b, - 0xaf, 0xcc, 0x28, 0x5a, 0xa0, 0x1d, 0x2d, 0x6f, 0xbe, 0x71, 0x5f, 0x81, - 0x6e, 0x3f, 0x91, 0x6a, 0x8e, 0xb6, 0x78, 0x02, 0xb1, 0xb4, 0x49, 0xd9, - 0x82, 0x87, 0xbe, 0xb6, 0x26, 0x57, 0xff, 0xce, 0x97, 0x68, 0xc0, 0x86, - 0xfc, 0xf5, 0xdf, 0xb8, 0x49, 0x43, 0x14, 0x1b, 0x5e, 0xdb, 0xbf, 0x54, - 0xe3, 0xa4, 0x58, 0x01, 0x2b, 0x93, 0xff, 0x2d, 0x3d, 0x8f, 0x89, 0x95, - 0x5b, 0xff, 0xf6, 0xd5, 0x90, 0xb1, 0x7a, 0x59, 0x63, 0x9f, 0xbf, 0x89, - 0x8d, 0x28, 0x0c, 0x1d, 0x1e, 0x71, 0xf8, 0x14, 0xd1, 0x8a, 0x73, 0x3d, - 0x3d, 0x3d, 0x21, 0xa1, 0x27, 0xc3, 0xde, 0xd2, 0xd6, 0xab, 0xcc, 0xc6, - 0xf3, 0xd0, 0x96, 0xa1, 0xdb, 0x78, 0x6b, 0x82, 0x5c, 0xd8, 0x13, 0x74, - 0xa5, 0xd8, 0x86, 0xab, 0x11, 0x64, 0x14, 0x89, 0x2d, 0xb6, 0x29, 0xea, - 0xe4, 0xb4, 0xad, 0x13, 0xa0, 0xd9, 0xdf, 0xa5, 0xbb, 0xc5, 0x62, 0x05, - 0x32, 0x1c, 0x25, 0xe3, 0xbc, 0xe3, 0x18, 0xbb, 0xb7, 0xbe, 0xee, 0xde, - 0xb6, 0x3a, 0xc3, 0x6b, 0xb9, 0x89, 0xeb, 0x8e, 0xcc, 0x4c, 0x17, 0x75, - 0xbb, 0x6a, 0x08, 0x59, 0x06, 0xe3, 0x1e, 0x1f, 0x79, 0xc5, 0xa8, 0x22, - 0xd5, 0x3e, 0xdc, 0x1c, 0xd8, 0x0c, 0x8e, 0xd3, 0xab, 0xf1, 0x3a, 0x9d, - 0xdb, 0x6e, 0x65, 0x89, 0x4e, 0xed, 0xb8, 0x2c, 0x51, 0x0f, 0x0d, 0x87, - 0xf3, 0x23, 0x19, 0x9d, 0xc3, 0x46, 0x18, 0xef, 0x9b, 0x8e, 0x5b, 0x94, - 0x9f, 0x17, 0x50, 0x37, 0xbd, 0x89, 0xef, 0xc8, 0x69, 0x6a, 0x8c, 0xdb, - 0xc5, 0x31, 0x5f, 0x06, 0x45, 0x84, 0x8d, 0xcf, 0x1d, 0x87, 0x43, 0x32, - 0x29, 0x7e, 0x28, 0x83, 0x79, 0x19, 0x9b, 0xe3, 0x61, 0xcd, 0x71, 0x44, - 0xfd, 0x86, 0x62, 0x70, 0x63, 0x0c, 0x63, 0xaf, 0x86, 0xa8, 0x27, 0x1e, - 0x12, 0x33, 0x3e, 0xf0, 0x30, 0x18, 0x77, 0x83, 0xee, 0x4b, 0x7e, 0x7a, - 0x8b, 0x49, 0xb8, 0x47, 0xcc, 0x4c, 0x4b, 0x29, 0x79, 0x55, 0x21, 0x33, - 0x63, 0xb4, 0x61, 0x90, 0xbc, 0xcc, 0x32, 0x97, 0x47, 0xec, 0xf6, 0x18, - 0x6c, 0x0b, 0xd0, 0x49, 0xc0, 0xa4, 0x20, 0x6a, 0x9a, 0x98, 0x5e, 0xe1, - 0xcd, 0x47, 0xc4, 0xc0, 0x85, 0xab, 0x7e, 0x0d, 0x91, 0xcc, 0x3c, 0x07, - 0x8a, 0x51, 0x02, 0xd8, 0x11, 0xe9, 0x97, 0x33, 0x89, 0x23, 0x0e, 0xe9, - 0xd2, 0x97, 0x6d, 0x60, 0xd4, 0xb1, 0x1f, 0xbc, 0xf6, 0x06, 0x32, 0xfc, - 0xe8, 0x51, 0xa8, 0x29, 0x47, 0x27, 0x5c, 0xae, 0xa3, 0x0d, 0x70, 0x29, - 0x6c, 0x2d, 0xe3, 0xaa, 0xef, 0xd0, 0xb9, 0x24, 0xe9, 0x24, 0xb0, 0xb5, - 0x14, 0x27, 0xef, 0x78, 0x1a, 0x45, 0x36, 0xc7, 0x79, 0x28, 0x51, 0x0b, - 0xa4, 0x42, 0x67, 0x26, 0x24, 0x33, 0xb8, 0xb6, 0xec, 0x33, 0x6f, 0xe4, - 0x57, 0xb0, 0x5c, 0xa2, 0xef, 0x25, 0x1e, 0xab, 0xcc, 0xbe, 0xc4, 0x84, - 0x94, 0x30, 0x62, 0x4a, 0x1c, 0x7d, 0xff, 0xc1, 0x03, 0x87, 0x8e, 0xa2, - 0x69, 0x83, 0xb3, 0x0e, 0x05, 0x32, 0x91, 0x95, 0x38, 0x22, 0x57, 0xeb, - 0xc4, 0x95, 0xe1, 0x9e, 0x17, 0x83, 0x62, 0x77, 0x72, 0x79, 0x28, 0xaa, - 0x73, 0xd9, 0x47, 0xe6, 0x6c, 0xe3, 0x06, 0x99, 0x48, 0x33, 0xf1, 0x68, - 0xeb, 0x63, 0x6c, 0xfb, 0x30, 0x39, 0xff, 0x36, 0x39, 0x07, 0xef, 0x9c, - 0xca, 0x33, 0x48, 0xec, 0x29, 0x1b, 0xdb, 0x6d, 0xee, 0x93, 0x37, 0x31, - 0xcd, 0x19, 0x5e, 0x15, 0xb6, 0xf8, 0xe5, 0x32, 0xcc, 0x5b, 0xc0, 0x5e, - 0x5a, 0x74, 0x73, 0x19, 0x7d, 0x28, 0x63, 0x9f, 0x3b, 0xf0, 0xe7, 0xc0, - 0x0f, 0x0d, 0xc8, 0x06, 0x1f, 0xf6, 0x5b, 0x0c, 0x8a, 0x83, 0x28, 0x5f, - 0x4d, 0xde, 0x86, 0xed, 0x8d, 0x26, 0xe7, 0xdf, 0x26, 0x8e, 0x64, 0x33, - 0x69, 0xb1, 0x2b, 0xb3, 0x2f, 0x68, 0x56, 0xb8, 0x9a, 0x78, 0x92, 0x52, - 0x51, 0x2b, 0xf1, 0xb2, 0x9e, 0x51, 0x2d, 0x01, 0xbb, 0xf3, 0x35, 0xd2, - 0x5c, 0x1e, 0x03, 0x68, 0x71, 0x7a, 0x0c, 0xdb, 0x3f, 0x95, 0x7b, 0x0c, - 0x2e, 0x1f, 0x8f, 0x56, 0xeb, 0xca, 0x63, 0x1f, 0xcc, 0xf7, 0x31, 0x37, - 0x18, 0x26, 0x2f, 0x24, 0xd4, 0xef, 0xe5, 0x0c, 0x3a, 0x6d, 0x0d, 0xca, - 0x8f, 0x73, 0xba, 0xd9, 0x07, 0x22, 0xdf, 0xe6, 0x10, 0xd3, 0xab, 0x3d, - 0x58, 0x35, 0x98, 0xb3, 0x15, 0xbd, 0x90, 0x1f, 0x66, 0x06, 0x3b, 0x6c, - 0x55, 0xc0, 0x20, 0xfa, 0x90, 0x73, 0xfa, 0x69, 0xa6, 0xf6, 0xe6, 0x11, - 0x47, 0x14, 0xc6, 0xdd, 0x59, 0x3f, 0xd4, 0x46, 0xb3, 0xd0, 0xa4, 0xee, - 0x54, 0x18, 0xb3, 0xbe, 0xb1, 0x6d, 0x51, 0xd1, 0x1e, 0xb4, 0xb7, 0x94, - 0xe0, 0x86, 0xcc, 0x90, 0x49, 0x6a, 0x8e, 0x70, 0xfa, 0x1a, 0xe3, 0x42, - 0xe3, 0xc7, 0xf4, 0xca, 0xac, 0x77, 0x3d, 0x30, 0x38, 0x1b, 0x18, 0x96, - 0xe6, 0xe6, 0xd7, 0x8f, 0xb0, 0xce, 0xf2, 0xe1, 0x97, 0x93, 0x89, 0xd1, - 0xe6, 0x3a, 0x9a, 0xb6, 0xf8, 0x7e, 0x8e, 0xab, 0xe0, 0x1f, 0x83, 0xa3, - 0x6e, 0x0e, 0x85, 0x32, 0x1f, 0x16, 0x8f, 0x33, 0xe8, 0xf4, 0x11, 0x85, - 0xa3, 0x15, 0x34, 0x60, 0x0f, 0x28, 0xa6, 0x76, 0xe7, 0xfc, 0xe7, 0x0c, - 0xea, 0x89, 0xd5, 0xc9, 0xbe, 0xef, 0xac, 0x4b, 0xc6, 0x48, 0x59, 0x85, - 0x63, 0x60, 0x10, 0x47, 0xa1, 0xbe, 0x96, 0xf0, 0xec, 0xa8, 0xb5, 0xa5, - 0xce, 0x7e, 0xfe, 0x1a, 0x1e, 0xb2, 0x17, 0x98, 0x07, 0x1c, 0xe6, 0x65, - 0xb4, 0xd4, 0x1f, 0x2f, 0x88, 0xeb, 0x4e, 0xca, 0xd4, 0x82, 0x2d, 0xc3, - 0xe8, 0x26, 0x36, 0x12, 0x29, 0xe6, 0xf9, 0xd7, 0xaf, 0x2e, 0xfb, 0x8a, - 0x87, 0x32, 0x00, 0xd7, 0xcc, 0x87, 0x08, 0xa4, 0x06, 0x3e, 0xd2, 0x5f, - 0xdc, 0x04, 0xf4, 0xb3, 0xf4, 0xb1, 0x02, 0xe4, 0xb1, 0x5c, 0xfb, 0x30, - 0x63, 0x18, 0x99, 0xa1, 0x8b, 0x6b, 0xdb, 0xe9, 0x2f, 0x14, 0x3c, 0x5d, - 0x07, 0x18, 0x59, 0x18, 0xdc, 0xd9, 0x38, 0x7b, 0x2c, 0xf8, 0xf9, 0x43, - 0x72, 0x48, 0x8d, 0xeb, 0x3f, 0x8f, 0x13, 0x59, 0xb2, 0x63, 0xa5, 0x15, - 0x3f, 0xd4, 0x18, 0x1a, 0x7c, 0xfe, 0xdc, 0xbc, 0xfe, 0xe8, 0x65, 0xcf, - 0xdc, 0xbb, 0x0e, 0xc0, 0xa8, 0x3d, 0x10, 0x48, 0x17, 0x05, 0x05, 0xb9, - 0x49, 0xd1, 0xa7, 0x9b, 0xe9, 0xbe, 0x89, 0x1b, 0xf2, 0xd5, 0x46, 0x1f, - 0x41, 0x5c, 0x97, 0x21, 0x10, 0x31, 0xcb, 0xc7, 0xcf, 0x90, 0x86, 0x32, - 0xfa, 0xca, 0x07, 0x45, 0x04, 0xdb, 0x35, 0x6e, 0x2c, 0x74, 0x76, 0xb0, - 0xb8, 0xba, 0xf4, 0xf2, 0x04, 0xa1, 0xc0, 0xcf, 0x88, 0x30, 0xcf, 0x1d, - 0x03, 0xf7, 0x13, 0x33, 0xb2, 0x38, 0x1b, 0x0b, 0x47, 0x10, 0x5e, 0x1c, - 0x70, 0xb4, 0x53, 0x2c, 0x6e, 0x8c, 0x5c, 0x5d, 0xda, 0xb6, 0x8c, 0xfc, - 0x88, 0x77, 0xfe, 0x2b, 0xe1, 0x47, 0x0b, 0x73, 0x10, 0xf0, 0x24, 0x3e, - 0x56, 0xd6, 0xc2, 0xc3, 0x2f, 0xaf, 0xd8, 0x8a, 0xaa, 0xd3, 0x8d, 0x4b, - 0x2a, 0x8e, 0xcd, 0x7c, 0x85, 0x44, 0x0a, 0x63, 0x74, 0x41, 0x0e, 0x62, - 0xf9, 0x0a, 0x5a, 0xba, 0x1f, 0x64, 0xc6, 0xfc, 0x86, 0x41, 0x64, 0xf7, - 0x72, 0x8e, 0x3f, 0x0c, 0x8e, 0x9e, 0xbd, 0x7c, 0x63, 0x1d, 0xc3, 0x53, - 0xb0, 0x69, 0xac, 0x57, 0xe4, 0xc7, 0x7a, 0x15, 0x47, 0x66, 0xdb, 0xe7, - 0x89, 0x19, 0x58, 0xbc, 0xac, 0xef, 0xe3, 0xf0, 0x68, 0x70, 0x0e, 0x06, - 0xaf, 0x8e, 0x5b, 0x95, 0x22, 0x13, 0xd6, 0xca, 0x63, 0xfa, 0x58, 0x77, - 0xc8, 0xc0, 0x11, 0x02, 0x0e, 0x04, 0x01, 0xb7, 0x1f, 0xd6, 0x28, 0x13, - 0x10, 0x28, 0xf6, 0x5c, 0x0a, 0xc4, 0x07, 0x33, 0x36, 0xe3, 0x2e, 0x87, - 0xab, 0xf8, 0x73, 0x7c, 0x2e, 0xbb, 0x3d, 0xfb, 0xda, 0xf0, 0xd9, 0x16, - 0x80, 0x35, 0x4f, 0xa7, 0xf6, 0xbb, 0x0b, 0xf0, 0x09, 0x15, 0x2b, 0xdd, - 0x70, 0x89, 0x5e, 0xef, 0xe9, 0x2e, 0x94, 0xa5, 0xeb, 0xe3, 0xa5, 0xc0, - 0xb9, 0x31, 0x11, 0xc2, 0x16, 0xd3, 0xb4, 0xe9, 0xff, 0x63, 0xf6, 0xf8, - 0x8b, 0x3f, 0x3f, 0xf9, 0xf3, 0xf5, 0xc9, 0xbf, 0xff, 0xf6, 0x63, 0xfe, - 0x08, 0x30, 0x98, 0x7c, 0xeb, 0xd1, 0xce, 0xe3, 0x8b, 0x24, 0xf1, 0xe3, - 0x6f, 0x2d, 0x49, 0x79, 0x8c, 0x9f, 0x99, 0x21, 0x46, 0xd5, 0xe4, 0xbd, - 0x78, 0x7b, 0x19, 0x5c, 0x0b, 0xea, 0x18, 0x1c, 0x95, 0x08, 0xe3, 0x6c, - 0x3f, 0x8f, 0x7d, 0x97, 0xd8, 0x8f, 0xc8, 0x9c, 0xcb, 0xd6, 0x10, 0x6e, - 0x2f, 0xcc, 0x8d, 0x3b, 0x0d, 0xff, 0xf4, 0xbe, 0xf0, 0x19, 0x17, 0x08, - 0x2a, 0x7a, 0xf5, 0x54, 0xbc, 0xac, 0x87, 0x20, 0xb0, 0x37, 0x11, 0x2a, - 0x13, 0x45, 0xfb, 0x4a, 0xf9, 0x23, 0xeb, 0xc8, 0xdb, 0x49, 0xed, 0xa1, - 0xe2, 0x24, 0xec, 0xd9, 0x7b, 0xbb, 0x27, 0xa4, 0xd7, 0xf5, 0x80, 0x97, - 0x16, 0x02, 0xde, 0x23, 0x0d, 0x29, 0x5a, 0x18, 0x5c, 0xb7, 0xa7, 0x5e, - 0xa9, 0xd2, 0xde, 0x18, 0xcc, 0xd8, 0x41, 0x8a, 0x1e, 0xee, 0xd9, 0x1f, - 0x22, 0x08, 0x3b, 0xb2, 0x7e, 0x8a, 0xb4, 0x51, 0xfe, 0xdb, 0x10, 0x85, - 0x26, 0x0e, 0x8e, 0xf8, 0xd9, 0xf6, 0x7f, 0xc1, 0x48, 0xd2, 0x1b, 0xb0, - 0x02, 0xc1, 0x39, 0xf6, 0x10, 0xc9, 0x76, 0xc2, 0x2d, 0xd8, 0xbb, 0x0f, - 0xfc, 0x9c, 0xbe, 0xf8, 0xce, 0x57, 0x2f, 0x88, 0x75, 0x2a, 0x99, 0x78, - 0x56, 0x90, 0x70, 0x56, 0x00, 0xd9, 0x49, 0xf5, 0xf3, 0x15, 0x40, 0xbf, - 0xfb, 0xfc, 0x39, 0xfd, 0xc4, 0x8b, 0xbd, 0xf4, 0xb3, 0x98, 0x30, 0xef, - 0xd3, 0x0f, 0xc5, 0x29, 0x54, 0x7a, 0xdc, 0xd9, 0xe9, 0x26, 0x08, 0x11, - 0x79, 0xca, 0x8a, 0x74, 0x6f, 0x48, 0xca, 0x77, 0xaa, 0x2b, 0xcc, 0xaf, - 0xe9, 0x2e, 0x40, 0x01, 0x91, 0x00, 0x4c, 0x98, 0xd7, 0x9b, 0x49, 0xaf, - 0x45, 0x70, 0x32, 0x19, 0xd9, 0x9c, 0xd6, 0x06, 0x4e, 0x39, 0xa5, 0x4f, - 0x0f, 0x7e, 0xd0, 0x69, 0xe2, 0x20, 0x9b, 0x5e, 0xa9, 0x41, 0xa4, 0xcd, - 0x22, 0xa5, 0x2b, 0x92, 0xc4, 0x9f, 0x84, 0x39, 0x01, 0xbd, 0x65, 0xe4, - 0x76, 0x59, 0xdb, 0xad, 0x97, 0x4f, 0xc8, 0x99, 0xdd, 0xb0, 0x4a, 0xd3, - 0x6c, 0xcb, 0x42, 0xf1, 0x29, 0xdc, 0xab, 0xd6, 0x02, 0x31, 0x4a, 0x31, - 0xce, 0x50, 0x7e, 0x78, 0x9f, 0xf5, 0x98, 0xfd, 0xf8, 0x4d, 0x5e, 0x30, - 0x88, 0x53, 0x45, 0xa1, 0x36, 0x94, 0x1c, 0x51, 0x16, 0x25, 0x62, 0xbb, - 0x4f, 0xcb, 0xd7, 0x44, 0xba, 0xea, 0xab, 0x30, 0x2b, 0x78, 0x90, 0xe4, - 0xcb, 0xec, 0xe3, 0x19, 0x61, 0xfa, 0x82, 0x7b, 0x5c, 0x1f, 0xc8, 0x7d, - 0xf9, 0x4e, 0x85, 0x71, 0x95, 0x48, 0x40, 0x4d, 0x05, 0xd4, 0xdb, 0xe2, - 0x1c, 0xd9, 0xe7, 0xa3, 0x99, 0xc7, 0x4b, 0xf9, 0x5d, 0x57, 0x47, 0xf6, - 0x45, 0x37, 0x62, 0x24, 0xc2, 0xa5, 0x92, 0x58, 0x7e, 0xec, 0x43, 0x47, - 0xbd, 0x2f, 0x5c, 0xc5, 0xf0, 0x56, 0x92, 0xaf, 0xb3, 0xef, 0xb5, 0xb0, - 0xb4, 0x6a, 0x32, 0xea, 0xed, 0x72, 0x77, 0xa0, 0xc8, 0xd1, 0x7b, 0x80, - 0xc3, 0xc0, 0xef, 0xb0, 0x01, 0xad, 0x03, 0x99, 0xf8, 0x78, 0xe8, 0x31, - 0xfc, 0xbe, 0xeb, 0xde, 0xcf, 0x1e, 0xf1, 0xe1, 0x43, 0x09, 0xdc, 0x58, - 0x59, 0xf6, 0xfe, 0xf0, 0x71, 0xb7, 0x88, 0x7c, 0x08, 0x8f, 0x5e, 0x71, - 0xa9, 0x8f, 0x45, 0x4a, 0x66, 0x6d, 0xe6, 0xce, 0xce, 0x90, 0x72, 0x0e, - 0x44, 0x85, 0x1d, 0x04, 0x96, 0xab, 0x9f, 0x76, 0xd6, 0x7a, 0x69, 0x2e, - 0x49, 0x3b, 0x85, 0x6e, 0x91, 0x44, 0x40, 0x74, 0xf8, 0x72, 0xab, 0x01, - 0x90, 0xc1, 0x85, 0xe7, 0xcb, 0x95, 0x16, 0xdf, 0x1c, 0xda, 0x5f, 0xdf, - 0xcb, 0x07, 0x74, 0xf4, 0x5f, 0x16, 0xb4, 0x53, 0xd1, 0x9d, 0x1a, 0xf9, - 0x0d, 0x6c, 0xd3, 0x11, 0x7f, 0x65, 0x2b, 0xa4, 0xa3, 0x96, 0x64, 0xbd, - 0xb2, 0x37, 0xb2, 0x69, 0xe8, 0xca, 0x33, 0x94, 0xef, 0xff, 0x95, 0x99, - 0x5a, 0x92, 0x05, 0x29, 0xba, 0x87, 0x80, 0x09, 0x27, 0xe8, 0x0f, 0x21, - 0xfe, 0x2b, 0x4b, 0xbc, 0xbf, 0x23, 0x34, 0xe0, 0x8d, 0x85, 0xff, 0x20, - 0x25, 0xb5, 0xd2, 0xec, 0x2b, 0x16, 0x95, 0x6a, 0x7f, 0x33, 0x4f, 0xff, - 0x2e, 0x24, 0xab, 0xbe, 0xf1, 0xdc, 0x37, 0x43, 0x8b, 0x32, 0xab, 0x84, - 0x90, 0x1c, 0xad, 0x7e, 0x5f, 0x88, 0x37, 0x2f, 0xf4, 0xee, 0x8b, 0x8d, - 0x37, 0x7f, 0xcd, 0x9c, 0x19, 0x92, 0xca, 0xff, 0xaf, 0xd9, 0x06, 0xbe, - 0xdf, 0x97, 0xbf, 0xda, 0x55, 0xbf, 0xfc, 0x45, 0xc9, 0x14, 0x42, 0xb3, - 0x49, 0x2d, 0xae, 0x5d, 0x70, 0xd3, 0x2f, 0x8c, 0x04, 0x63, 0x28, 0x49, - 0x32, 0x90, 0xef, 0x6f, 0xbf, 0x95, 0x8f, 0x50, 0x8f, 0xe2, 0x6e, 0x93, - 0xd0, 0xb9, 0x50, 0x71, 0xb4, 0xed, 0x0a, 0x57, 0xe9, 0x60, 0x08, 0xa5, - 0x00, 0xa0, 0xfe, 0x29, 0x7d, 0xc9, 0x9c, 0x95, 0x00, 0x64, 0x7a, 0x27, - 0xa1, 0xa7, 0xd2, 0x74, 0x2d, 0x39, 0xc9, 0x73, 0xcb, 0x09, 0x10, 0x70, - 0xd8, 0x82, 0xfe, 0x5d, 0x12, 0x4a, 0xd8, 0x55, 0xe6, 0x7e, 0xca, 0x53, - 0xe1, 0x72, 0x6b, 0xbd, 0x91, 0x95, 0xb7, 0x50, 0xe7, 0x80, 0xba, 0x66, - 0xd4, 0x70, 0x4e, 0x83, 0xf2, 0x0c, 0x65, 0xfe, 0x8c, 0xbc, 0x7f, 0x38, - 0xf6, 0x14, 0x47, 0xf8, 0x19, 0x5d, 0x7b, 0xbe, 0xb1, 0x90, 0x96, 0xb8, - 0xd3, 0xea, 0xcd, 0xf7, 0xec, 0x12, 0xb2, 0x37, 0x3f, 0xfc, 0x38, 0xb7, - 0x42, 0x91, 0x76, 0x45, 0x72, 0xd2, 0x64, 0x37, 0xe4, 0x9f, 0xe3, 0x92, - 0x21, 0x61, 0xab, 0xa2, 0x88, 0x3a, 0xdd, 0x3f, 0x54, 0x66, 0x4d, 0x73, - 0x28, 0xa0, 0x5f, 0x37, 0xf1, 0x89, 0x7e, 0xde, 0xbe, 0x26, 0x3e, 0x1c, - 0xcd, 0x9b, 0xe4, 0x79, 0x80, 0x5a, 0xfa, 0x43, 0x85, 0x59, 0xaf, 0xc3, - 0x81, 0x16, 0xfd, 0x4a, 0x29, 0x16, 0xd2, 0xc8, 0x4a, 0xa2, 0xcd, 0xf1, - 0x8a, 0x1e, 0x1a, 0x8a, 0xb2, 0x73, 0x13, 0x9d, 0x9c, 0xfb, 0x2c, 0x09, - 0xfc, 0x22, 0xe1, 0x6c, 0x07, 0xc0, 0x63, 0x7e, 0x0e, 0x41, 0x84, 0x44, - 0x8d, 0xb2, 0xd4, 0xb6, 0x90, 0xa6, 0x92, 0x79, 0xfc, 0x69, 0xa0, 0xb5, - 0x20, 0xd1, 0xaf, 0x43, 0xba, 0x97, 0xe3, 0xa7, 0x81, 0xc1, 0xcc, 0x19, - 0xba, 0xa9, 0x6f, 0x02, 0xbd, 0x07, 0x70, 0xfa, 0xea, 0x0a, 0x7f, 0xfd, - 0x09, 0x44, 0xa1, 0xd3, 0x84, 0x11, 0xed, 0xa2, 0x2f, 0x7a, 0x52, 0xa5, - 0xba, 0x28, 0x66, 0xd4, 0xaa, 0x04, 0x45, 0x0c, 0xab, 0xc9, 0x14, 0x54, - 0xb5, 0x07, 0x2f, 0x55, 0xf4, 0x93, 0x2a, 0x7e, 0x25, 0xf2, 0x1b, 0xf7, - 0xe3, 0xdd, 0xb3, 0x50, 0xa8, 0xa9, 0x69, 0x54, 0x2e, 0x3f, 0xd0, 0xcb, - 0x1e, 0x38, 0xf3, 0xf0, 0x22, 0x00, 0xf8, 0x14, 0xf5, 0xd9, 0xce, 0x20, - 0xfd, 0xbe, 0x6b, 0xb6, 0xa9, 0x48, 0x55, 0x9e, 0x6e, 0x76, 0xfa, 0xb6, - 0xd3, 0xef, 0x3d, 0xa9, 0xd1, 0x80, 0xea, 0xf5, 0x9f, 0xa0, 0x5b, 0x1b, - 0x71, 0x84, 0xc5, 0xdb, 0x37, 0x31, 0x5a, 0x8e, 0x77, 0x71, 0x8c, 0x39, - 0x6d, 0x16, 0xe6, 0xb8, 0x09, 0x38, 0x8f, 0x5e, 0xcd, 0xbd, 0xe9, 0x82, - 0x6b, 0x3f, 0xf8, 0x02, 0x40, 0xde, 0xf5, 0x93, 0x2a, 0xcc, 0xee, 0xb3, - 0xbd, 0x5c, 0x7b, 0x70, 0xcf, 0x9b, 0x33, 0x65, 0x47, 0x93, 0xb8, 0xa8, - 0x80, 0x9a, 0x58, 0xe7, 0x94, 0x19, 0xaa, 0x3b, 0x38, 0xa8, 0x8f, 0x56, - 0xec, 0xf2, 0x78, 0x06, 0x45, 0x6e, 0xf8, 0x21, 0x9e, 0x85, 0x93, 0x19, - 0xed, 0x28, 0x09, 0x79, 0xbe, 0x2d, 0xd7, 0x0e, 0x1f, 0x8b, 0x2f, 0x69, - 0x67, 0xbd, 0x5c, 0xcf, 0x63, 0x27, 0x20, 0xdc, 0x26, 0x21, 0xc1, 0x47, - 0xdc, 0x7c, 0x1b, 0x21, 0xa3, 0xcd, 0x07, 0x4d, 0xed, 0x36, 0xcf, 0xc0, - 0xbe, 0x3e, 0x58, 0xe6, 0x4c, 0xd6, 0x7b, 0x45, 0x50, 0x47, 0x46, 0xdd, - 0x69, 0x1d, 0x55, 0xe6, 0xed, 0xaa, 0x3e, 0xa1, 0xe2, 0x3e, 0xbd, 0x14, - 0xb7, 0xf6, 0xb8, 0x40, 0x37, 0x56, 0x03, 0xaa, 0x8f, 0x39, 0x7d, 0x41, - 0x3f, 0xcf, 0x6c, 0x3c, 0x94, 0xa7, 0x39, 0x07, 0x95, 0x06, 0x5b, 0xbe, - 0x73, 0x01, 0x34, 0xfb, 0xd7, 0xeb, 0x18, 0xaa, 0xdb, 0x00, 0x54, 0x5c, - 0x84, 0x57, 0xc7, 0x98, 0x25, 0xe0, 0xc2, 0x6e, 0x3f, 0xc2, 0x14, 0x76, - 0x70, 0x65, 0x1f, 0x4b, 0xab, 0x78, 0x38, 0x27, 0x1a, 0x43, 0x2a, 0x1f, - 0xbb, 0x84, 0xe2, 0xc3, 0xb3, 0xe1, 0x38, 0x8c, 0xdc, 0x68, 0x49, 0xa1, - 0x1c, 0x94, 0x1e, 0x51, 0x89, 0xba, 0xd0, 0x63, 0x5a, 0x64, 0x2c, 0x6e, - 0xd6, 0x9b, 0xe8, 0x7c, 0x34, 0xb2, 0xd8, 0x99, 0x07, 0xe6, 0x7c, 0xd8, - 0x86, 0x3e, 0xf6, 0xe5, 0x9c, 0x83, 0xfe, 0x21, 0xe9, 0x1b, 0x25, 0xc0, - 0x9a, 0xa7, 0x68, 0x28, 0x6e, 0xac, 0xba, 0x14, 0xb0, 0x92, 0x27, 0x6a, - 0xcb, 0x26, 0x3a, 0xf1, 0x21, 0x90, 0xc5, 0x12, 0x85, 0x5d, 0xfa, 0xdd, - 0x90, 0xfc, 0xe4, 0x67, 0xa2, 0x85, 0x27, 0x8f, 0x8a, 0xa0, 0x4e, 0x5a, - 0x95, 0xed, 0xe9, 0x41, 0xf6, 0xc9, 0x4a, 0xfb, 0xba, 0x4a, 0x62, 0x72, - 0x45, 0x9c, 0x92, 0xe7, 0xd7, 0x86, 0x47, 0x78, 0xe7, 0x1c, 0xe3, 0xca, - 0x4b, 0xfd, 0xc6, 0x0b, 0x6a, 0xb5, 0x1a, 0x50, 0xa3, 0x7b, 0xf1, 0x3d, - 0x23, 0xe0, 0x01, 0xb5, 0xc6, 0xf8, 0xaa, 0x2e, 0x28, 0x93, 0xd8, 0x6f, - 0xeb, 0xf0, 0x4b, 0xa7, 0x58, 0x87, 0x4e, 0xc2, 0x43, 0x9a, 0x59, 0x9d, - 0xae, 0xcd, 0xd4, 0x34, 0x67, 0xa0, 0x01, 0x02, 0xb8, 0xdf, 0x65, 0x0c, - 0x8e, 0xce, 0x87, 0x77, 0x75, 0x87, 0x05, 0x48, 0x1d, 0xbe, 0x71, 0x72, - 0x3c, 0xc2, 0x7e, 0x1a, 0xf4, 0xd0, 0x82, 0xbd, 0x4a, 0xeb, 0x0a, 0xe0, - 0x2d, 0x6a, 0x80, 0xb0, 0x2d, 0x34, 0xa9, 0xfc, 0x8d, 0xe9, 0x96, 0x2c, - 0x70, 0x1f, 0x78, 0x8d, 0x00, 0xc7, 0xc8, 0xf5, 0xa8, 0xd5, 0xce, 0xb9, - 0x9c, 0x1d, 0xe9, 0x8e, 0x00, 0xf4, 0x70, 0x27, 0x65, 0xaf, 0xe1, 0xe9, - 0x34, 0x06, 0xd3, 0x37, 0x1b, 0x46, 0xb3, 0xc7, 0x27, 0xff, 0xfe, 0xdb, - 0xce, 0x3c, 0xe0, 0x66, 0x5b, 0x2a, 0x8c, 0xa8, 0x14, 0x17, 0x44, 0x1f, - 0xf6, 0x09, 0x8a, 0x2c, 0x67, 0x0b, 0x18, 0xbd, 0xae, 0xa4, 0x4d, 0x66, - 0x85, 0xf7, 0xab, 0x41, 0x42, 0xb1, 0x71, 0x65, 0x7a, 0x0b, 0x3d, 0xc6, - 0x27, 0x8e, 0x92, 0x0b, 0x66, 0xf8, 0xd0, 0x28, 0x26, 0x15, 0x5a, 0x73, - 0x43, 0x32, 0x53, 0x6f, 0x78, 0x60, 0x0b, 0x28, 0x68, 0x36, 0x58, 0x02, - 0x1d, 0x9e, 0x51, 0xe2, 0x3e, 0xfc, 0xf9, 0xf2, 0xa0, 0x02, 0x03, 0x9c, - 0x49, 0xa8, 0x9f, 0x63, 0x5a, 0xa5, 0x01, 0xb6, 0x12, 0xa8, 0xbf, 0x5f, - 0x64, 0xb2, 0x79, 0x47, 0x84, 0x48, 0x36, 0xbd, 0x8b, 0x64, 0xad, 0xf9, - 0x94, 0x77, 0x08, 0xc9, 0x1d, 0x92, 0x55, 0x5b, 0x51, 0xc9, 0x7a, 0x0a, - 0x7e, 0x6a, 0x9c, 0x3f, 0xa1, 0x26, 0x93, 0xf9, 0x0a, 0x64, 0xa0, 0x9b, - 0x3f, 0x96, 0x49, 0x82, 0xf1, 0x3d, 0x2e, 0xee, 0x9e, 0x75, 0xc2, 0xcd, - 0xc2, 0xd3, 0x13, 0xd4, 0xd3, 0x2d, 0x9c, 0x34, 0x0b, 0x88, 0xc8, 0xd4, - 0x66, 0x8b, 0xa9, 0x7c, 0xaf, 0x44, 0x37, 0xc7, 0x81, 0x1e, 0x75, 0xe9, - 0x7d, 0x37, 0xb6, 0xd4, 0x0f, 0x40, 0x8b, 0xa3, 0x02, 0xfc, 0xed, 0xa6, - 0xbf, 0x14, 0x73, 0x2a, 0xa8, 0x59, 0x9b, 0x54, 0xc6, 0xa7, 0xf3, 0x97, - 0x9d, 0xf8, 0xf9, 0x82, 0xb6, 0x32, 0x06, 0x22, 0x89, 0x04, 0x85, 0xba, - 0x9f, 0x13, 0xa5, 0xae, 0xe2, 0xcb, 0x78, 0x80, 0x2a, 0x82, 0xe5, 0x22, - 0xf1, 0x8d, 0xa9, 0xf6, 0xb2, 0xfc, 0xe5, 0x66, 0x1b, 0x2b, 0x5b, 0x79, - 0xa1, 0xb2, 0xb3, 0x4a, 0x6a, 0xf7, 0x4a, 0x81, 0x9c, 0x80, 0xba, 0xbc, - 0x5e, 0x56, 0x89, 0x6a, 0x29, 0x96, 0x22, 0x00, 0xea, 0xf7, 0x24, 0x71, - 0xe0, 0x56, 0x1e, 0x12, 0x24, 0x4d, 0xa0, 0x6e, 0xaa, 0x6c, 0x92, 0x47, - 0x45, 0xaa, 0x37, 0xf6, 0x01, 0x5d, 0xec, 0x64, 0x35, 0xbe, 0x13, 0x76, - 0x3b, 0x9f, 0x56, 0xe2, 0x4a, 0x4f, 0xd9, 0xa8, 0x6f, 0x4a, 0x34, 0x6c, - 0x0b, 0x36, 0xeb, 0x95, 0xed, 0x3f, 0x0c, 0xe6, 0xe3, 0x49, 0x4e, 0xe5, - 0xfc, 0x78, 0x18, 0x1a, 0xe1, 0x63, 0x6f, 0xb1, 0xe1, 0x6c, 0xa6, 0xd1, - 0x09, 0xf2, 0xdc, 0xa2, 0x41, 0xda, 0xe4, 0xe3, 0xe7, 0xbf, 0x7e, 0x4a, - 0xfd, 0xa7, 0x7c, 0x2b, 0xde, 0x0c, 0x12, 0x5f, 0xab, 0x0c, 0x4b, 0x35, - 0xb8, 0xbf, 0x1c, 0xd7, 0xf9, 0xf6, 0x10, 0x9b, 0x1c, 0x92, 0x31, 0xcc, - 0x50, 0x98, 0x9b, 0xb0, 0xea, 0x77, 0xc3, 0x2d, 0xc0, 0xaf, 0x3c, 0x0d, - 0xce, 0x2b, 0xe3, 0x22, 0x37, 0xcb, 0x9d, 0x16, 0x32, 0x97, 0xda, 0xae, - 0x6e, 0x73, 0xe7, 0xe6, 0x1e, 0x2d, 0x0a, 0x82, 0xff, 0x60, 0xa6, 0x9e, - 0x82, 0x26, 0x9f, 0x3f, 0xd8, 0x9c, 0x87, 0xf4, 0x41, 0xa0, 0xd9, 0x94, - 0x3f, 0xb2, 0xea, 0x0a, 0x25, 0xe0, 0xc7, 0xf9, 0x69, 0x38, 0xfb, 0x92, - 0xac, 0x98, 0x63, 0x5f, 0xe2, 0x71, 0x28, 0x0d, 0xbe, 0x75, 0xb2, 0x2a, - 0x3c, 0x2f, 0x43, 0x56, 0x83, 0xeb, 0x85, 0x58, 0x79, 0xaa, 0x4d, 0xef, - 0x49, 0x94, 0xee, 0x91, 0xc0, 0xb9, 0x67, 0x85, 0x1f, 0x76, 0x13, 0xdf, - 0x86, 0x8c, 0xa4, 0x54, 0xa2, 0x38, 0x32, 0xfb, 0x30, 0x39, 0xbb, 0xc1, - 0x29, 0xd1, 0x83, 0x43, 0xc1, 0x40, 0x9f, 0xc3, 0x39, 0xe4, 0xca, 0xbf, - 0x45, 0xa2, 0xe7, 0xc5, 0x45, 0x6d, 0x15, 0x5c, 0xa0, 0x83, 0x36, 0x75, - 0x83, 0xdc, 0x32, 0xfa, 0x51, 0x7b, 0x9a, 0x21, 0x2f, 0x3d, 0xbe, 0x09, - 0x6b, 0x47, 0xae, 0xe1, 0xb1, 0x12, 0x41, 0xce, 0x16, 0x9f, 0xe7, 0x8c, - 0x06, 0x2d, 0xf0, 0x7d, 0xea, 0xbe, 0x60, 0x43, 0xa9, 0x61, 0x6d, 0x0a, - 0x09, 0x4b, 0xef, 0x7f, 0x63, 0x8e, 0x79, 0x64, 0x7a, 0x31, 0xe1, 0x55, - 0xd2, 0x60, 0x11, 0x17, 0x31, 0x86, 0xf8, 0xee, 0x59, 0xfb, 0x90, 0xc1, - 0xec, 0xd3, 0x0d, 0x6f, 0xda, 0x47, 0x93, 0xa4, 0xf7, 0x40, 0x03, 0xbf, - 0x8c, 0xd5, 0x20, 0xcf, 0xe3, 0xbd, 0x52, 0x1b, 0xed, 0xeb, 0xab, 0x33, - 0xc3, 0xd6, 0xea, 0x5f, 0x26, 0x1a, 0x88, 0x68, 0x78, 0x48, 0xd8, 0xb0, - 0x99, 0xbb, 0x95, 0xff, 0x37, 0xf6, 0xfb, 0xfc, 0x60, 0xc6, 0x1f, 0x39, - 0x53, 0x19, 0x92, 0x74, 0xec, 0xdd, 0x53, 0x69, 0xaf, 0x6e, 0xcc, 0x63, - 0x1f, 0x98, 0xf3, 0xa3, 0x40, 0x20, 0xe8, 0xfd, 0xa7, 0xfb, 0x51, 0xbe, - 0x70, 0xa1, 0x2f, 0xd8, 0x73, 0x6e, 0xd3, 0xf9, 0xe0, 0x7b, 0xff, 0x70, - 0xde, 0xeb, 0x1c, 0xae, 0x5b, 0xad, 0x0d, 0xf4, 0xe8, 0xb7, 0xa7, 0x65, - 0x46, 0x7d, 0x53, 0xc6, 0xee, 0xe7, 0x81, 0x9f, 0x9a, 0xab, 0x0a, 0x2f, - 0x73, 0xab, 0xd0, 0xbf, 0xb3, 0x37, 0x9b, 0xc4, 0x69, 0x4b, 0x25, 0x70, - 0xd4, 0xbc, 0x68, 0x40, 0xd4, 0x02, 0x70, 0xed, 0x0d, 0x2a, 0xb2, 0x34, - 0xbf, 0xfe, 0x36, 0xff, 0x4e, 0xeb, 0x4f, 0xe0, 0x56, 0xbd, 0xeb, 0xc4, - 0x70, 0x4e, 0x7a, 0x3c, 0x40, 0xee, 0xa0, 0xe4, 0x74, 0x63, 0x2a, 0x26, - 0x15, 0xee, 0xfd, 0xf7, 0xd9, 0xfb, 0x63, 0x06, 0x45, 0xbc, 0xb3, 0xca, - 0x28, 0x69, 0x9f, 0x3b, 0xba, 0xe5, 0xaf, 0x1d, 0xdd, 0xd2, 0x77, 0x74, - 0x8b, 0xc3, 0xed, 0xaf, 0x27, 0x01, 0xe3, 0x17, 0xf3, 0x2e, 0xea, 0x5d, - 0xf5, 0x27, 0x96, 0x06, 0xc5, 0x5b, 0xc9, 0xa4, 0x7d, 0x47, 0x14, 0x92, - 0xca, 0x34, 0x50, 0x7e, 0xee, 0x08, 0x97, 0x61, 0x13, 0x18, 0x3d, 0x83, - 0x47, 0xd3, 0xac, 0x71, 0xbe, 0x64, 0x09, 0x53, 0xf2, 0x33, 0x94, 0xe2, - 0xd3, 0x97, 0x4a, 0x1d, 0xb8, 0x5a, 0x60, 0x2d, 0xf6, 0x31, 0xa4, 0x5a, - 0x04, 0x76, 0x55, 0xd1, 0x4b, 0x20, 0xf6, 0xeb, 0x2b, 0x0c, 0xaf, 0xfb, - 0xcc, 0xab, 0x62, 0xcb, 0x59, 0xad, 0x28, 0x32, 0xb1, 0x56, 0x08, 0x4d, - 0xed, 0xea, 0x3a, 0x20, 0x71, 0x9a, 0x53, 0x0e, 0xd5, 0xd9, 0x23, 0x5e, - 0xb3, 0x00, 0x49, 0x9f, 0x39, 0xa1, 0x0a, 0xf8, 0x08, 0x05, 0xec, 0x10, - 0xa9, 0xcc, 0x69, 0x96, 0x6f, 0x36, 0x15, 0x48, 0x78, 0x76, 0x80, 0xa7, - 0x7a, 0xd2, 0x68, 0x1d, 0xd0, 0xc3, 0x32, 0x75, 0x28, 0xeb, 0x4f, 0x4d, - 0x6d, 0x70, 0x84, 0xa7, 0x2a, 0x2b, 0xf4, 0x22, 0xca, 0xf1, 0x58, 0xf4, - 0xa9, 0x4f, 0xec, 0x2a, 0x3e, 0x29, 0xbc, 0xea, 0x19, 0x73, 0x38, 0x81, - 0x79, 0xee, 0x30, 0x37, 0x98, 0x04, 0x5d, 0x5e, 0x00, 0xdc, 0x3a, 0x79, - 0xfa, 0x9a, 0xdd, 0x73, 0xf6, 0xbe, 0x18, 0x85, 0x40, 0xcb, 0x33, 0xde, - 0x4a, 0xc5, 0x21, 0x95, 0xd3, 0xf1, 0x64, 0x13, 0x92, 0xf3, 0xf0, 0xba, - 0xeb, 0x8f, 0xaa, 0x0c, 0x23, 0xcb, 0x5c, 0x43, 0x1b, 0xfa, 0x55, 0x50, - 0xbf, 0xca, 0x57, 0x10, 0xae, 0x56, 0x04, 0xe2, 0x97, 0x56, 0x2a, 0xbf, - 0x5f, 0xea, 0x6c, 0x7f, 0xbf, 0xb4, 0xa7, 0xf3, 0x1b, 0xbb, 0xa9, 0xbf, - 0x5f, 0x0b, 0x87, 0xda, 0x4a, 0xe5, 0x91, 0x76, 0x99, 0x7f, 0xeb, 0x72, - 0xcd, 0xf3, 0xb2, 0x5f, 0x6f, 0x72, 0xfd, 0xde, 0x96, 0x4c, 0xa7, 0x77, - 0x87, 0x5c, 0x7f, 0xfe, 0x32, 0xa5, 0xcb, 0xbb, 0x1a, 0xd2, 0xef, 0xa2, - 0xa3, 0x87, 0x5f, 0x5a, 0x96, 0x08, 0x7c, 0x50, 0xa6, 0xff, 0x77, 0xad, - 0x7d, 0x12, 0x64, 0xdd, 0xa7, 0x5f, 0xb5, 0xb4, 0xdf, 0x9d, 0x2d, 0xf1, - 0x97, 0xfa, 0xfb, 0x2b, 0x51, 0xf7, 0xf4, 0x4b, 0xbd, 0xfe, 0x95, 0x94, - 0x2d, 0x62, 0xa1, 0x69, 0xf3, 0xaf, 0x22, 0x7d, 0xdc, 0x39, 0xf9, 0xfc, - 0xf5, 0x41, 0xcc, 0xef, 0xb1, 0xb2, 0x92, 0xfc, 0x7a, 0x7e, 0x0a, 0xb7, - 0xd0, 0x70, 0x5e, 0x3f, 0xeb, 0x8d, 0x9b, 0x5e, 0x7f, 0x2e, 0x9a, 0x10, - 0x92, 0xd2, 0x8f, 0x3f, 0x21, 0x64, 0xf5, 0xd5, 0xf7, 0xa9, 0x5f, 0x41, - 0x35, 0xb3, 0x7f, 0x69, 0xee, 0x0d, 0xb4, 0xa3, 0xee, 0xbd, 0xf1, 0x3f, - 0xbb, 0xbe, 0xbe, 0x7d, 0x28, 0xf2, 0x76, 0x16, 0xd7, 0xf0, 0xf7, 0x1a, - 0x27, 0x6c, 0x56, 0xed, 0xb5, 0xf6, 0xe3, 0x05, 0x2f, 0xf6, 0x87, 0x70, - 0x69, 0xa8, 0x5a, 0xcb, 0x13, 0x86, 0x97, 0x8c, 0x27, 0x33, 0x19, 0x4a, - 0x72, 0xdc, 0x65, 0x65, 0x2b, 0xcc, 0x01, 0x65, 0x06, 0x41, 0x69, 0x8a, - 0x2e, 0xbf, 0x0a, 0x85, 0xa1, 0x55, 0xcf, 0x56, 0xa4, 0x19, 0x76, 0x9e, - 0xb8, 0x0b, 0x08, 0xd1, 0xc6, 0xd3, 0xbf, 0x93, 0x7e, 0xba, 0xfc, 0x7c, - 0x49, 0xd1, 0x4a, 0x83, 0x3d, 0x98, 0xcb, 0x8f, 0xe6, 0x91, 0x40, 0xa3, - 0xa9, 0x42, 0x02, 0x75, 0x85, 0x20, 0x73, 0x8a, 0xae, 0xb3, 0x4e, 0xd9, - 0x88, 0x1d, 0x13, 0x88, 0xbf, 0x5d, 0x05, 0x28, 0x5c, 0x13, 0x40, 0x3b, - 0x5f, 0x40, 0xf2, 0xa0, 0xd6, 0x52, 0x89, 0xc5, 0xc9, 0xd3, 0x75, 0x0d, - 0x92, 0x4d, 0x8f, 0x24, 0x8f, 0xae, 0xe1, 0xe3, 0xf7, 0xa9, 0xef, 0x12, - 0xb1, 0xfa, 0x3e, 0xc3, 0x43, 0x21, 0xf5, 0x00, 0xe0, 0x34, 0x30, 0x04, - 0x92, 0x97, 0xf4, 0xe3, 0x76, 0xeb, 0x89, 0x6a, 0xb2, 0xf1, 0x2b, 0x0c, - 0x8f, 0x7e, 0x18, 0x8b, 0x1f, 0x34, 0x1c, 0x68, 0x47, 0x4f, 0x24, 0xb3, - 0xbe, 0x4c, 0xcd, 0xe3, 0x21, 0xdf, 0x1e, 0xbb, 0xbe, 0xdd, 0x3b, 0x4d, - 0x97, 0x40, 0xd5, 0x0e, 0x80, 0x12, 0x3d, 0xd5, 0x87, 0xb5, 0xa1, 0xd2, - 0x96, 0x7f, 0xb8, 0x36, 0xad, 0x52, 0x80, 0xe6, 0x7c, 0xfa, 0xae, 0xbc, - 0xd8, 0x66, 0xc7, 0x86, 0x20, 0x52, 0x55, 0xc3, 0xf9, 0x5a, 0x6c, 0x6d, - 0x49, 0x8d, 0x7a, 0x19, 0x1f, 0xcc, 0xcb, 0xf0, 0x11, 0x74, 0x76, 0x25, - 0x11, 0xce, 0xdd, 0xb2, 0xd5, 0x28, 0x10, 0xfb, 0x05, 0x00, 0x31, 0x2e, - 0x8b, 0x77, 0x5b, 0xd6, 0x03, 0x4a, 0xac, 0xf5, 0x71, 0x40, 0x9b, 0x16, - 0x85, 0xf4, 0xa3, 0xef, 0x85, 0x72, 0x12, 0xf3, 0xd4, 0x74, 0x53, 0x02, - 0xae, 0x36, 0xea, 0x26, 0xbb, 0xd3, 0xfd, 0xe3, 0xd3, 0x35, 0x40, 0x4f, - 0x6b, 0x32, 0xa4, 0x58, 0xde, 0x44, 0x15, 0x44, 0x9e, 0xb9, 0xfe, 0xcb, - 0xd3, 0x3e, 0x15, 0xd6, 0xe8, 0x7d, 0xd6, 0x37, 0x54, 0x60, 0x54, 0x4c, - 0x7f, 0x71, 0xd2, 0x54, 0x94, 0x0e, 0x7d, 0xa5, 0xb2, 0x27, 0x4b, 0xb7, - 0x35, 0x35, 0x62, 0x6a, 0x53, 0x14, 0x30, 0x22, 0x73, 0xca, 0x6f, 0xc5, - 0xc2, 0x79, 0x75, 0xaa, 0xdc, 0x9e, 0x13, 0xe3, 0xf3, 0x9c, 0xb7, 0xb0, - 0xfc, 0xd4, 0xef, 0x4f, 0xd7, 0xc8, 0x67, 0x3b, 0x25, 0xce, 0x13, 0x6b, - 0xcc, 0x6f, 0x14, 0xfd, 0xaf, 0xeb, 0x31, 0x53, 0xf0, 0x32, 0x8e, 0x1f, - 0x5f, 0xf2, 0xfe, 0xe5, 0x39, 0x41, 0x9e, 0xde, 0xb3, 0xbe, 0xad, 0x2e, - 0xbd, 0x5b, 0xee, 0xbd, 0x5f, 0x5a, 0x3f, 0xe7, 0xcb, 0x84, 0xca, 0x38, - 0x4f, 0x2d, 0x63, 0x67, 0xdc, 0x8f, 0xc4, 0xf7, 0x52, 0x76, 0xf3, 0x0c, - 0x87, 0xf4, 0x25, 0x30, 0xd8, 0x75, 0x0b, 0x9d, 0x35, 0x82, 0x55, 0x7a, - 0x88, 0xb4, 0x3d, 0x49, 0xbe, 0xc0, 0xdb, 0xe6, 0x00, 0x1d, 0x32, 0xb6, - 0x73, 0x7f, 0x2e, 0xd6, 0xf0, 0x69, 0x1c, 0x93, 0x19, 0x31, 0xdc, 0xda, - 0x02, 0x4c, 0x39, 0xa8, 0xab, 0xf0, 0xec, 0x89, 0xa9, 0xc1, 0xda, 0x62, - 0xa7, 0x2e, 0x6a, 0xf6, 0x96, 0x31, 0x01, 0xb7, 0x03, 0x89, 0x70, 0xbb, - 0xd6, 0x10, 0x3b, 0x75, 0x15, 0xb4, 0xdd, 0x52, 0xe2, 0xb5, 0x85, 0x7e, - 0x5d, 0x4e, 0x93, 0x69, 0xb4, 0x31, 0xac, 0x93, 0x73, 0x48, 0x7a, 0xce, - 0xa3, 0xa4, 0xe7, 0x4c, 0xf9, 0x5b, 0xf5, 0x5b, 0x9a, 0xa3, 0xb2, 0xb6, - 0x01, 0x95, 0x5b, 0xc4, 0x59, 0x85, 0x50, 0xbf, 0x7d, 0x1b, 0x29, 0x53, - 0x51, 0x4e, 0xa6, 0xf4, 0xdb, 0xfa, 0x55, 0xf3, 0xaf, 0x74, 0x99, 0x4d, - 0x9b, 0x35, 0x65, 0xf5, 0xcc, 0xd2, 0x9f, 0xe3, 0x11, 0x75, 0x9e, 0x1f, - 0x2d, 0x73, 0x1f, 0x63, 0xee, 0x3e, 0xc6, 0xec, 0x7d, 0x44, 0x3e, 0x3e, - 0xda, 0xc5, 0xfe, 0xdc, 0xde, 0xd6, 0x13, 0x39, 0x4b, 0xd5, 0xdb, 0x82, - 0xf4, 0x1f, 0xb5, 0xdd, 0x4b, 0xb0, 0xca, 0x52, 0xe9, 0xbf, 0xfa, 0x95, - 0x48, 0x96, 0x76, 0x4e, 0x90, 0xb6, 0x45, 0x57, 0x19, 0xee, 0xd0, 0x92, - 0xb2, 0x65, 0xcc, 0xbb, 0xbf, 0xad, 0xcd, 0xd5, 0xf4, 0x5d, 0xf9, 0x08, - 0x14, 0xe8, 0x10, 0x39, 0x9b, 0xfb, 0x5d, 0xd2, 0x6e, 0x2b, 0x30, 0xef, - 0x93, 0x0d, 0xa1, 0x22, 0x48, 0x0b, 0x7c, 0xdc, 0x9b, 0x02, 0x31, 0x42, - 0x0e, 0x5b, 0x99, 0x77, 0x1c, 0x4a, 0xc3, 0xe1, 0xef, 0xf7, 0x04, 0x21, - 0x9f, 0x91, 0xb5, 0x87, 0x4f, 0xd6, 0x32, 0xb5, 0x9e, 0xa1, 0x51, 0x6a, - 0x33, 0x16, 0x64, 0x33, 0x71, 0xb6, 0x9e, 0x49, 0x43, 0xcd, 0xfc, 0x9c, - 0x0e, 0x15, 0xc8, 0x73, 0x51, 0x75, 0xfb, 0xe5, 0x47, 0xf9, 0x57, 0x89, - 0x73, 0xbe, 0x22, 0x0f, 0x23, 0xb3, 0xa6, 0x20, 0xa2, 0xae, 0x32, 0x38, - 0x1e, 0xac, 0x9f, 0x2f, 0xf5, 0xea, 0x8b, 0x47, 0xe7, 0x25, 0x46, 0x67, - 0x80, 0xd3, 0x46, 0x56, 0x10, 0x53, 0x91, 0xfd, 0xd3, 0x08, 0xbd, 0x78, - 0xfc, 0x24, 0x95, 0x55, 0x7d, 0x69, 0x97, 0x3d, 0x2d, 0xb4, 0xc3, 0xf6, - 0xea, 0xb6, 0xe0, 0xba, 0xf3, 0xda, 0x80, 0xa2, 0xd9, 0x30, 0xf7, 0x6a, - 0x83, 0x65, 0x2d, 0x5e, 0xfa, 0x65, 0x69, 0xe3, 0x94, 0x0d, 0xfb, 0xb0, - 0x11, 0x9c, 0x1c, 0x3c, 0x1c, 0x83, 0x3d, 0x68, 0x0b, 0xfa, 0xb0, 0x37, - 0x47, 0x48, 0xb2, 0x92, 0xd2, 0x42, 0xeb, 0x58, 0xcb, 0x56, 0x06, 0x94, - 0x47, 0xbd, 0x3f, 0x99, 0x72, 0xc6, 0x48, 0xa1, 0x3e, 0x99, 0x9b, 0xa4, - 0x90, 0x6e, 0x8b, 0x93, 0x02, 0xd0, 0x35, 0x7c, 0xf0, 0x65, 0x8e, 0x8a, - 0x94, 0x4f, 0x3a, 0x61, 0x24, 0x4d, 0xa4, 0x07, 0x0e, 0x10, 0xfe, 0x00, - 0xee, 0xbb, 0x7c, 0xdc, 0xb5, 0x32, 0xaa, 0xc3, 0x19, 0xeb, 0xde, 0x72, - 0xec, 0x2d, 0xa5, 0xc7, 0xfe, 0x95, 0x79, 0x7d, 0x03, 0xd0, 0x96, 0x5a, - 0x5b, 0xac, 0xb0, 0xa1, 0x43, 0xa1, 0x71, 0x4b, 0x19, 0x04, 0x7a, 0x1c, - 0x38, 0x9f, 0xcf, 0xec, 0x47, 0x50, 0x7e, 0xf6, 0x52, 0x55, 0x0a, 0x24, - 0x0e, 0xfa, 0xc4, 0xb8, 0x21, 0x37, 0xac, 0x9a, 0x66, 0x96, 0x7d, 0xf0, - 0x42, 0xd5, 0xee, 0xcd, 0x56, 0xb7, 0xa0, 0x0b, 0x61, 0x80, 0x54, 0x42, - 0x94, 0x7d, 0x2f, 0x03, 0x17, 0x26, 0xcf, 0x3a, 0x7d, 0xc4, 0x04, 0x3a, - 0x27, 0x9d, 0xb2, 0x83, 0x46, 0xfc, 0xd3, 0x85, 0x5a, 0xc8, 0x33, 0xce, - 0x07, 0xe4, 0x20, 0x5d, 0x6a, 0x3b, 0x74, 0xbc, 0xa9, 0x4e, 0x28, 0x87, - 0xc0, 0x0e, 0x82, 0x53, 0x54, 0xb5, 0x32, 0x41, 0x52, 0xfe, 0x3a, 0x37, - 0xc4, 0xb3, 0x0a, 0xe0, 0x70, 0xce, 0x36, 0x4b, 0x0d, 0x07, 0xf8, 0xca, - 0xff, 0x1a, 0xfd, 0x53, 0x3f, 0x2f, 0x7e, 0xd1, 0x9c, 0x93, 0x67, 0x92, - 0x10, 0xbc, 0x78, 0x21, 0x5d, 0x67, 0x0e, 0xa3, 0xe9, 0x81, 0x03, 0x6d, - 0x00, 0x7f, 0x5f, 0xfa, 0x2a, 0xdd, 0xbc, 0x9f, 0x82, 0xef, 0x97, 0x9d, - 0xa7, 0x3e, 0xc5, 0x04, 0x3e, 0x1c, 0x8d, 0x54, 0x67, 0x0a, 0xb6, 0xb0, - 0x29, 0x0e, 0x3b, 0x3f, 0x52, 0xeb, 0x91, 0x7d, 0x75, 0x07, 0x94, 0x5d, - 0x2d, 0x2f, 0x91, 0x04, 0x3d, 0x6d, 0x82, 0xa7, 0x48, 0x4a, 0x29, 0xbb, - 0xc7, 0xd4, 0x12, 0x71, 0xa8, 0x95, 0x25, 0x85, 0x7a, 0xf4, 0xf7, 0xb5, - 0x60, 0xbe, 0x1c, 0x82, 0x90, 0x33, 0x0d, 0x8c, 0x9d, 0x7c, 0x69, 0xd0, - 0x25, 0xf2, 0x82, 0x83, 0x8c, 0xe6, 0x65, 0x44, 0xdc, 0x05, 0x24, 0xe4, - 0x24, 0x52, 0x40, 0xfd, 0x47, 0xc5, 0x6d, 0x73, 0x51, 0x4c, 0x07, 0x67, - 0xf8, 0x35, 0x9b, 0x44, 0x74, 0x8f, 0xef, 0xc5, 0x29, 0x38, 0x6e, 0x1f, - 0x53, 0xf5, 0x6a, 0x70, 0x8f, 0xb5, 0x17, 0x19, 0x55, 0xfa, 0x64, 0x0d, - 0xaa, 0x00, 0x51, 0x4c, 0xc7, 0xb1, 0x4e, 0xbb, 0xc1, 0xec, 0x30, 0x57, - 0x6d, 0xaa, 0x08, 0x6e, 0x0e, 0xa1, 0x7b, 0xcd, 0xdb, 0x46, 0xaf, 0xdb, - 0x12, 0x11, 0x97, 0x72, 0x22, 0xa0, 0xdd, 0x53, 0x26, 0x40, 0xe9, 0x53, - 0x00, 0xd4, 0xc5, 0x6a, 0xa2, 0x14, 0xf1, 0x00, 0x3a, 0x02, 0x3a, 0x33, - 0x32, 0x55, 0xa4, 0x03, 0x9d, 0xcd, 0x85, 0x6e, 0x25, 0x10, 0x2d, 0xf6, - 0xee, 0xd4, 0xa8, 0x5b, 0xd1, 0x6f, 0xfb, 0x91, 0x32, 0xcc, 0x08, 0x96, - 0x28, 0x25, 0x89, 0x13, 0x87, 0xc2, 0xdd, 0x55, 0xaa, 0xa4, 0x09, 0xd5, - 0x42, 0x1c, 0x4b, 0xe4, 0xd0, 0xd9, 0x40, 0x6b, 0x47, 0x67, 0x68, 0xe5, - 0x81, 0xa8, 0x41, 0xda, 0x2f, 0x91, 0x95, 0x65, 0xd7, 0x97, 0x3b, 0x01, - 0x00, 0x4b, 0x98, 0x37, 0xd7, 0x45, 0x85, 0x53, 0xec, 0x94, 0x69, 0xfb, - 0x75, 0x2d, 0x89, 0x15, 0x33, 0x90, 0xfa, 0xbc, 0xf4, 0x7b, 0xd5, 0xb7, - 0x97, 0xdd, 0xef, 0x55, 0x36, 0xe4, 0xf3, 0xef, 0x77, 0x58, 0xbc, 0xab, - 0xaa, 0xff, 0xde, 0x5b, 0x25, 0xff, 0xfd, 0x89, 0xa9, 0x85, 0xd6, 0x65, - 0xd4, 0x02, 0x65, 0x2a, 0x37, 0x5b, 0xb4, 0x8b, 0xdf, 0xad, 0x15, 0xc8, - 0xef, 0xe6, 0xb1, 0xa6, 0x2e, 0x79, 0x79, 0x2d, 0x29, 0x27, 0x4e, 0x32, - 0xeb, 0x2a, 0x94, 0xae, 0x11, 0x89, 0x82, 0x7f, 0x2a, 0xda, 0xa8, 0x24, - 0x2e, 0x22, 0x11, 0x6e, 0xa2, 0x7c, 0x9a, 0x06, 0xc0, 0xbd, 0x58, 0x82, - 0xa5, 0xa3, 0x3f, 0x0d, 0xa8, 0x97, 0x04, 0x8e, 0x57, 0xf2, 0x99, 0xea, - 0x9f, 0x32, 0xa7, 0xeb, 0x75, 0xc6, 0xed, 0x54, 0x97, 0xab, 0x7f, 0x9c, - 0xa3, 0x17, 0xad, 0xc8, 0x26, 0x48, 0x4a, 0x71, 0x4f, 0x49, 0x1a, 0xbb, - 0x7e, 0xe4, 0x54, 0xf4, 0x45, 0x37, 0xc4, 0x79, 0xf1, 0xba, 0x7e, 0xbe, - 0xf4, 0xb5, 0xd1, 0x57, 0x9b, 0x4e, 0x0a, 0xdf, 0x3a, 0x67, 0xfb, 0xd2, - 0xd2, 0x91, 0x8b, 0xc4, 0x63, 0x66, 0xec, 0x6f, 0xd3, 0xff, 0xed, 0x72, - 0x6f, 0x4e, 0x89, 0x9b, 0xd3, 0x8d, 0xb2, 0x20, 0x73, 0xe1, 0xb8, 0x59, - 0x5c, 0x22, 0x94, 0x8a, 0x4c, 0x95, 0x1a, 0xf5, 0xa3, 0x3a, 0x42, 0x9a, - 0x0d, 0x12, 0xa9, 0x8c, 0xbb, 0x26, 0x29, 0x30, 0xb6, 0x72, 0xea, 0x3b, - 0x5d, 0x66, 0x65, 0xf4, 0xd1, 0x6a, 0x65, 0x51, 0x9d, 0x2d, 0xcc, 0xda, - 0xb7, 0xbd, 0x7a, 0xcf, 0x0b, 0x24, 0xd2, 0xe5, 0x5f, 0x76, 0x2c, 0xaf, - 0xaf, 0x09, 0xf7, 0xca, 0x32, 0x94, 0xe5, 0x57, 0x0f, 0x27, 0x2e, 0xce, - 0x5e, 0x50, 0x15, 0xe0, 0x41, 0xfc, 0x25, 0xe5, 0xf9, 0xa2, 0x9a, 0x14, - 0xbc, 0xd2, 0x1d, 0xea, 0x16, 0x59, 0x67, 0x5f, 0x31, 0x56, 0xbc, 0xba, - 0x83, 0x58, 0x23, 0xbe, 0xda, 0x9a, 0xf0, 0x95, 0x9a, 0x53, 0x5f, 0xa4, - 0xaa, 0xc8, 0xaf, 0x88, 0x8d, 0x64, 0x4d, 0x9a, 0x4b, 0x00, 0xb0, 0x8f, - 0x68, 0xb7, 0x63, 0xc4, 0xa4, 0xd4, 0x38, 0xbf, 0xb8, 0xbd, 0x51, 0xbf, - 0x53, 0x57, 0x62, 0x42, 0xb6, 0xce, 0x56, 0xa4, 0xe7, 0xab, 0x73, 0xe7, - 0xc0, 0x78, 0x5a, 0x53, 0xd9, 0xf4, 0x69, 0x35, 0x7d, 0xd8, 0x4d, 0x4d, - 0xe9, 0xe1, 0xc0, 0xb5, 0x04, 0xc2, 0x04, 0xaa, 0x8c, 0xba, 0xe3, 0x1b, - 0xbb, 0x71, 0xa3, 0xa5, 0xf9, 0x22, 0xc5, 0x96, 0x82, 0xb9, 0x5b, 0xc1, - 0xaa, 0x7f, 0x3a, 0x07, 0x6b, 0xba, 0x86, 0xd4, 0xb1, 0x72, 0x6f, 0x1f, - 0x75, 0xe1, 0x77, 0x36, 0x7c, 0x94, 0x22, 0x25, 0xc1, 0x98, 0x7d, 0x99, - 0x09, 0x2b, 0xb8, 0xa0, 0x3a, 0x35, 0x7c, 0x36, 0x6f, 0xb7, 0x57, 0xc4, - 0xa5, 0x95, 0x06, 0x30, 0xef, 0x57, 0x94, 0x48, 0x53, 0xae, 0x55, 0x57, - 0x6f, 0x83, 0xc8, 0x3e, 0xa9, 0x10, 0xa2, 0xf3, 0x6f, 0x0f, 0xf2, 0xc4, - 0x2f, 0x05, 0xa9, 0x38, 0x1c, 0x94, 0xaa, 0x2a, 0xda, 0x81, 0x1f, 0x7b, - 0x07, 0x37, 0x8c, 0x93, 0xcd, 0xc4, 0x33, 0x2e, 0xf3, 0xf2, 0x5d, 0xf8, - 0xfd, 0x3f, 0xb6, 0xdf, 0x9f, 0xb6, 0xc7, 0x7c, 0x1b, 0x0c, 0xe0, 0xe0, - 0xad, 0xa1, 0xaf, 0x26, 0xeb, 0xb8, 0xe0, 0xbf, 0x66, 0x1a, 0xee, 0xbb, - 0xd5, 0xa8, 0x9e, 0x73, 0x48, 0x28, 0x00, 0x7a, 0x63, 0x1e, 0x89, 0xa3, - 0x07, 0x6c, 0x5e, 0xa0, 0x25, 0x05, 0xae, 0x8e, 0xf1, 0x44, 0xed, 0x5c, - 0x20, 0xd0, 0xf5, 0xc4, 0x0f, 0x35, 0x98, 0xb3, 0xfa, 0x57, 0x3b, 0xbc, - 0x32, 0x5d, 0xf3, 0xc2, 0xe9, 0x65, 0x99, 0x1e, 0x38, 0x3e, 0xae, 0x09, - 0x86, 0xaa, 0xbc, 0xa2, 0x89, 0x7c, 0xd1, 0xee, 0x67, 0x25, 0x5a, 0x56, - 0x85, 0x5e, 0x3c, 0xd0, 0xd8, 0xfc, 0xab, 0xf8, 0xa5, 0xef, 0x9d, 0x33, - 0x0c, 0x20, 0xf8, 0xfc, 0x45, 0x3c, 0xd3, 0x33, 0x24, 0xac, 0x7c, 0xf5, - 0xe9, 0x22, 0x30, 0xb3, 0x03, 0x40, 0x8e, 0x16, 0xeb, 0xf5, 0xa9, 0xe8, - 0x30, 0x39, 0x49, 0xfc, 0x95, 0xa4, 0x20, 0xa0, 0x42, 0x0f, 0x62, 0xd9, - 0x58, 0x7b, 0x56, 0x5e, 0xd1, 0x15, 0x45, 0x8b, 0x03, 0x4a, 0x26, 0xb3, - 0x7f, 0x49, 0x71, 0x5f, 0x90, 0x8c, 0xd2, 0x00, 0xb4, 0xf3, 0x94, 0xac, - 0x5c, 0xdc, 0x6f, 0x56, 0x90, 0x15, 0x22, 0xdc, 0xe1, 0xa0, 0x0b, 0xba, - 0x0e, 0x31, 0x8e, 0x95, 0x2b, 0x46, 0xa8, 0x72, 0xbd, 0x61, 0x59, 0x44, - 0x42, 0xfb, 0x00, 0x0d, 0x71, 0xa7, 0xb5, 0x5c, 0xb5, 0x41, 0x81, 0x59, - 0x6c, 0x99, 0x71, 0xca, 0x5e, 0x66, 0x25, 0x65, 0xe6, 0xcc, 0x9a, 0xe3, - 0x7d, 0x59, 0xa6, 0x7f, 0x11, 0xc5, 0x85, 0x38, 0xf3, 0xa1, 0x9a, 0x28, - 0x07, 0x94, 0x0a, 0xe9, 0xd5, 0xa2, 0xbb, 0x35, 0x45, 0x87, 0xf4, 0xe5, - 0xdf, 0xfa, 0xbf, 0xa2, 0xfc, 0x0b, 0x67, 0x2d, 0xf5, 0xfb, 0x07, 0xdf, - 0x85, 0x8a, 0xcc, 0xa0, 0xbb, 0xce, 0xf2, 0x5d, 0x31, 0x2e, 0xe8, 0x56, - 0xa9, 0x47, 0x88, 0xb2, 0xda, 0x81, 0x6e, 0x46, 0x80, 0x1e, 0x24, 0x48, - 0x12, 0x2e, 0xae, 0xd7, 0x4f, 0x5b, 0x1b, 0x95, 0x15, 0xa7, 0x35, 0xf8, - 0x46, 0x9d, 0x25, 0x8e, 0x2d, 0x83, 0xca, 0x70, 0x3d, 0x50, 0x56, 0x7d, - 0x14, 0x1f, 0x6a, 0xfd, 0xe4, 0xaf, 0xe7, 0xc2, 0xfe, 0x16, 0x80, 0xe5, - 0xb8, 0xaa, 0xa3, 0x00, 0x7d, 0x0e, 0x3e, 0x82, 0xcb, 0x01, 0x22, 0x60, - 0xe2, 0x24, 0x63, 0xd5, 0xb7, 0xa6, 0x1c, 0x1e, 0x88, 0xfe, 0x3f, 0x95, - 0xa0, 0xa7, 0x04, 0x71, 0x10, 0xe0, 0x67, 0x5f, 0x4e, 0x68, 0x77, 0x13, - 0x4a, 0x68, 0x27, 0x27, 0xd0, 0xf9, 0x11, 0xe1, 0x01, 0x2d, 0x3e, 0x4a, - 0xc9, 0xe3, 0xcb, 0xcf, 0xfe, 0x81, 0xda, 0xfe, 0x06, 0x5e, 0x10, 0xe3, - 0xfb, 0x90, 0xeb, 0x4a, 0xbe, 0xf8, 0x7c, 0xa1, 0x50, 0x50, 0x34, 0x14, - 0xab, 0x9e, 0x74, 0xf2, 0x5f, 0x99, 0xe8, 0x67, 0x1d, 0xd4, 0x7e, 0xff, - 0xa1, 0xbe, 0xff, 0x48, 0x87, 0xe0, 0xb3, 0x05, 0xe3, 0xe2, 0xaa, 0xb4, - 0x3a, 0x7e, 0x50, 0xa3, 0x03, 0x19, 0x1e, 0x99, 0x07, 0x47, 0xba, 0x35, - 0xc5, 0x7f, 0x82, 0xcc, 0x0b, 0x23, 0x2d, 0xb4, 0xcb, 0x36, 0x2f, 0x4d, - 0x0e, 0x4f, 0x65, 0xe4, 0x8c, 0x8d, 0x87, 0xe8, 0xdf, 0xf9, 0x99, 0x16, - 0x00, 0xce, 0x8a, 0x2a, 0x69, 0xc3, 0x37, 0xa6, 0x71, 0x65, 0x0f, 0xd5, - 0x05, 0x25, 0x14, 0xc3, 0x96, 0x5d, 0x2a, 0xa0, 0xca, 0xce, 0x9a, 0xbd, - 0xbb, 0x62, 0x0f, 0xd2, 0x5d, 0xcb, 0xfe, 0x5d, 0xf8, 0x53, 0x5c, 0x81, - 0xaf, 0x13, 0x3f, 0xcd, 0x5c, 0xca, 0x4e, 0xe5, 0x3c, 0x10, 0xb7, 0xce, - 0xaf, 0x7e, 0xd4, 0x23, 0x80, 0xb2, 0x63, 0x98, 0xb0, 0x2c, 0x94, 0xb2, - 0xeb, 0xfe, 0x76, 0xa5, 0x18, 0x49, 0x7f, 0x14, 0x54, 0xd6, 0x4f, 0xdc, - 0xfd, 0xc0, 0xb5, 0x5e, 0xce, 0x24, 0x06, 0xe1, 0xe2, 0xa3, 0x58, 0xf1, - 0x22, 0xe1, 0x01, 0x3e, 0xd8, 0x03, 0xb9, 0x93, 0x64, 0x71, 0x5a, 0x7d, - 0x13, 0x44, 0xcf, 0x5a, 0xd0, 0x9c, 0x30, 0x15, 0x2d, 0x1a, 0xea, 0x49, - 0x9c, 0x89, 0xe3, 0x91, 0x63, 0x88, 0x42, 0x11, 0xed, 0x16, 0xa8, 0x63, - 0xab, 0xe0, 0xa4, 0x06, 0x7d, 0x02, 0x93, 0x94, 0xbf, 0x7c, 0x39, 0xb8, - 0xf0, 0xb2, 0x70, 0xc1, 0x55, 0x89, 0x25, 0x09, 0x3c, 0x18, 0xf7, 0x2b, - 0x3f, 0x4b, 0xf8, 0xac, 0xed, 0x7b, 0x49, 0x58, 0x29, 0xd4, 0x6e, 0x83, - 0xef, 0xe9, 0x34, 0xa8, 0x63, 0x2f, 0xb8, 0x0e, 0x5e, 0x3f, 0x33, 0xa3, - 0xba, 0xd0, 0x1b, 0xb6, 0xfe, 0x2c, 0xaf, 0xeb, 0x72, 0x7f, 0x32, 0x75, - 0xae, 0xf4, 0x37, 0x1e, 0x45, 0x3b, 0x60, 0xd0, 0xbe, 0x70, 0x0d, 0x13, - 0x07, 0xb9, 0xca, 0xbf, 0xda, 0x3b, 0xb0, 0x27, 0xca, 0x6b, 0x8b, 0xd4, - 0xea, 0xc4, 0xd4, 0x56, 0xbd, 0xdb, 0xee, 0x2b, 0x2c, 0xbd, 0xb4, 0x6a, - 0x2a, 0xf9, 0x81, 0x0e, 0x4d, 0xd9, 0xc8, 0x4f, 0x9e, 0x94, 0xe2, 0x5c, - 0x3b, 0x2e, 0x39, 0xd7, 0x35, 0x72, 0x51, 0xa9, 0xe0, 0x07, 0xfe, 0x8d, - 0x5f, 0x75, 0x48, 0xa8, 0xe5, 0x5d, 0x84, 0x9c, 0xdd, 0xd9, 0x03, 0xb8, - 0xb7, 0xcf, 0x4e, 0xab, 0x36, 0x7b, 0x44, 0xe5, 0x6e, 0x69, 0x01, 0xf5, - 0xa1, 0x26, 0xfb, 0xb7, 0x97, 0x4e, 0xa5, 0x74, 0x22, 0x8b, 0x6f, 0x4b, - 0xfd, 0x21, 0x6f, 0x8e, 0xa1, 0x78, 0x0f, 0x95, 0x6e, 0x17, 0x26, 0x0a, - 0x8d, 0xb5, 0x81, 0xb0, 0xea, 0x92, 0x13, 0x20, 0xf7, 0x13, 0x59, 0x17, - 0x03, 0x44, 0x6d, 0x6d, 0x9d, 0xfe, 0x08, 0x6c, 0x2c, 0x0d, 0x1d, 0xea, - 0xe2, 0x20, 0x77, 0x75, 0x69, 0x76, 0x2f, 0x8f, 0x59, 0x3f, 0xc9, 0xc6, - 0x33, 0xc6, 0xce, 0xfc, 0xf4, 0xf7, 0x6a, 0x12, 0x0e, 0x9e, 0xaa, 0x18, - 0xcf, 0xa8, 0x0f, 0xcf, 0x65, 0x50, 0xad, 0x03, 0x96, 0xf9, 0x70, 0x70, - 0x6a, 0x53, 0x78, 0x29, 0x13, 0x33, 0xe9, 0x53, 0xe4, 0x97, 0x44, 0x35, - 0x1e, 0xf3, 0x82, 0x82, 0x4b, 0xc7, 0xf5, 0xc3, 0x31, 0x01, 0x24, 0x9a, - 0x03, 0x30, 0x73, 0x82, 0x81, 0x1e, 0x3d, 0xcf, 0x6a, 0x2b, 0xe1, 0x57, - 0x37, 0x09, 0x8a, 0x2f, 0x13, 0x42, 0x87, 0xc3, 0x75, 0x3e, 0x0c, 0x34, - 0xae, 0x18, 0xb9, 0x8d, 0x80, 0x7b, 0x89, 0x3e, 0x4c, 0x86, 0xf6, 0x4a, - 0xb6, 0xe5, 0xf8, 0x71, 0x4a, 0x67, 0x03, 0x81, 0x0d, 0x44, 0x0a, 0x15, - 0x65, 0x94, 0x73, 0xe2, 0x9a, 0xa6, 0x9c, 0xda, 0x0b, 0x01, 0xdd, 0x48, - 0x59, 0xed, 0xb8, 0xac, 0x67, 0xd9, 0x13, 0x11, 0xe8, 0x5c, 0xae, 0xc4, - 0x21, 0x7e, 0x05, 0x34, 0x76, 0x15, 0x3b, 0xfd, 0x20, 0xa5, 0x70, 0x09, - 0x5d, 0xb8, 0xfb, 0x59, 0xce, 0x41, 0x3b, 0x28, 0x99, 0x77, 0x67, 0xe8, - 0xc5, 0xaa, 0x91, 0x98, 0x54, 0x1b, 0xa9, 0x15, 0x33, 0xde, 0x20, 0x2f, - 0xd1, 0x93, 0x44, 0x1d, 0xce, 0x99, 0x38, 0x9c, 0x9f, 0x7c, 0x70, 0x57, - 0xce, 0xdd, 0x35, 0x32, 0x9a, 0xb8, 0xb6, 0x31, 0x2a, 0xb9, 0x67, 0xaa, - 0xd1, 0x2c, 0x7e, 0x62, 0x24, 0x1a, 0x11, 0x3f, 0x15, 0xe3, 0x13, 0xca, - 0x36, 0xb7, 0x80, 0x11, 0xfc, 0xf9, 0xba, 0x17, 0xe5, 0x04, 0x3b, 0xf0, - 0xf3, 0x77, 0xb2, 0x9f, 0x5a, 0xd0, 0x96, 0x68, 0x7b, 0xbc, 0x17, 0x5c, - 0x5c, 0x87, 0x7e, 0xab, 0xc9, 0x6f, 0x2d, 0xd5, 0xdf, 0x1a, 0x66, 0x8d, - 0xf5, 0x0b, 0xa5, 0x57, 0x3f, 0x75, 0x6e, 0x8f, 0xf5, 0x19, 0xd0, 0x29, - 0x1a, 0x3c, 0x53, 0xf3, 0xb2, 0x96, 0xb3, 0x4a, 0xd3, 0xa5, 0xc6, 0x18, - 0x7d, 0x11, 0x31, 0x76, 0x02, 0x27, 0x0e, 0x8b, 0x60, 0xaf, 0xb8, 0xe2, - 0x24, 0xc8, 0xa1, 0xde, 0xa0, 0x7b, 0x9e, 0x6e, 0x05, 0x3e, 0x87, 0x9f, - 0x5c, 0x6d, 0x85, 0x63, 0x4f, 0xe3, 0x01, 0x2d, 0x9a, 0x9c, 0x70, 0xe5, - 0x11, 0x4b, 0x04, 0xce, 0x85, 0x09, 0x80, 0xae, 0xc3, 0xbc, 0xaa, 0x45, - 0xf6, 0x73, 0x00, 0x68, 0x04, 0xaf, 0xaf, 0x99, 0x2f, 0x47, 0xb4, 0x34, - 0xef, 0x1c, 0xc6, 0xc4, 0xc6, 0xc1, 0xde, 0x05, 0xff, 0xe8, 0xd0, 0x5e, - 0x97, 0x9a, 0x00, 0x25, 0x1a, 0x88, 0xd1, 0xae, 0x80, 0x76, 0x56, 0x99, - 0xd6, 0xb9, 0x5a, 0x26, 0xf0, 0xd4, 0xf4, 0x75, 0x51, 0x47, 0xf9, 0xba, - 0x68, 0x6b, 0x19, 0x34, 0xea, 0x4b, 0xc5, 0x49, 0xdf, 0xba, 0x6a, 0xc5, - 0x2d, 0xcd, 0x6d, 0x36, 0xbb, 0xfe, 0x4c, 0x81, 0x2f, 0xf3, 0x7e, 0x9f, - 0x56, 0xf9, 0x84, 0x0c, 0x9a, 0x95, 0xac, 0xcb, 0x1a, 0x0b, 0x26, 0xc0, - 0xfb, 0xfc, 0xa7, 0x39, 0x00, 0xae, 0xc3, 0x4e, 0xf3, 0xcc, 0xcb, 0x3b, - 0xc0, 0xc8, 0x36, 0xab, 0x1d, 0x27, 0x5d, 0x9c, 0x1c, 0xbc, 0xd5, 0xa4, - 0x32, 0x46, 0xe0, 0x7d, 0xb2, 0x16, 0x15, 0x31, 0x79, 0xfa, 0xee, 0x3f, - 0x41, 0xfd, 0x4a, 0x87, 0xcd, 0x12, 0x24, 0x4d, 0x5c, 0x7b, 0xa8, 0xbb, - 0xa4, 0x3d, 0x99, 0x69, 0x2e, 0xa8, 0x6e, 0xcc, 0x18, 0x17, 0xc1, 0xc2, - 0x86, 0x2e, 0x28, 0x03, 0x1d, 0x8b, 0x64, 0x83, 0x07, 0xe7, 0xa8, 0x1f, - 0x3a, 0x26, 0x15, 0x7c, 0x39, 0xb3, 0xeb, 0x9a, 0xf8, 0xf5, 0x08, 0xff, - 0x84, 0x2f, 0x66, 0x9a, 0x6d, 0x9d, 0xa9, 0x12, 0x51, 0x59, 0xd2, 0x9d, - 0xf9, 0x0c, 0x91, 0x38, 0x4b, 0x9d, 0x38, 0xe9, 0x2a, 0x9d, 0x7e, 0x65, - 0x91, 0x70, 0x6a, 0xf2, 0x72, 0x26, 0xdf, 0xb8, 0x19, 0xf4, 0xc2, 0xc4, - 0xe6, 0xb5, 0xe2, 0x7f, 0xd1, 0x84, 0x98, 0x20, 0xb7, 0x1b, 0xe7, 0x9d, - 0x55, 0x5b, 0x34, 0xcf, 0x34, 0x10, 0x72, 0x73, 0xde, 0x90, 0xe9, 0x5c, - 0x31, 0x2b, 0xa0, 0x42, 0xb5, 0xfa, 0xe1, 0xad, 0xba, 0x4a, 0x33, 0xbf, - 0xae, 0x1a, 0x00, 0xac, 0xac, 0x8f, 0x2f, 0xf4, 0x6c, 0x24, 0x7c, 0x27, - 0x2e, 0x14, 0x40, 0xf9, 0x0f, 0x94, 0x82, 0xca, 0xd1, 0x50, 0x6f, 0x98, - 0x13, 0x0f, 0x95, 0xcc, 0x83, 0x55, 0x48, 0xc0, 0xd5, 0xe7, 0xd1, 0xaa, - 0xc5, 0x23, 0x34, 0xa3, 0x61, 0x1b, 0xa4, 0xa6, 0x87, 0xed, 0x6a, 0xbb, - 0xc1, 0xec, 0x8a, 0x04, 0x6c, 0xd8, 0xb0, 0x7f, 0x0d, 0x12, 0xf0, 0x80, - 0x39, 0x3f, 0x7f, 0x6d, 0x96, 0x5b, 0xfe, 0xda, 0xef, 0x7a, 0xce, 0xf6, - 0xd2, 0x3a, 0xf4, 0x65, 0xe5, 0xf0, 0x95, 0xd6, 0x0c, 0xbf, 0x1a, 0xf8, - 0x90, 0x0c, 0x18, 0x75, 0x88, 0xe9, 0xdc, 0xb9, 0xf9, 0xf3, 0xda, 0x8f, - 0x99, 0xce, 0xf3, 0xe9, 0xb2, 0x07, 0x70, 0x81, 0x33, 0xad, 0xfd, 0x76, - 0x3a, 0xa0, 0x8a, 0x0f, 0xe7, 0x34, 0x73, 0xd6, 0xc3, 0xc5, 0x60, 0xe8, - 0x5b, 0xc5, 0xf6, 0xfe, 0x38, 0x9b, 0x55, 0xf6, 0xd2, 0x2f, 0x88, 0xe0, - 0xe6, 0x6d, 0x40, 0xa2, 0xd9, 0x01, 0x78, 0x3f, 0xe1, 0xc5, 0x71, 0xc7, - 0xd4, 0xb9, 0x83, 0xb1, 0x46, 0x7b, 0x35, 0x01, 0x5f, 0x86, 0x2d, 0x3a, - 0x51, 0xed, 0xda, 0x5d, 0xf7, 0xd7, 0xe9, 0xf5, 0xe5, 0xeb, 0x8c, 0x9e, - 0xec, 0x84, 0x62, 0xee, 0xfb, 0x72, 0x86, 0x54, 0xbf, 0x6a, 0x30, 0xbc, - 0x4a, 0x20, 0xa7, 0x57, 0x09, 0x80, 0xab, 0x0e, 0xd9, 0x2b, 0xec, 0x2d, - 0x5f, 0xb8, 0x75, 0x54, 0x8d, 0xd5, 0x6f, 0x3c, 0xd3, 0xb0, 0xbd, 0xd8, - 0x10, 0x79, 0xc5, 0x76, 0x08, 0xc0, 0x8b, 0x37, 0xbf, 0x8c, 0x64, 0x4f, - 0x3c, 0x3a, 0xd2, 0x6e, 0x6f, 0x87, 0x10, 0x49, 0xa1, 0xfb, 0x14, 0x66, - 0xf7, 0x29, 0xbf, 0x70, 0x62, 0x04, 0x5c, 0xa3, 0xf6, 0x68, 0x48, 0x81, - 0x1c, 0x91, 0xc2, 0x23, 0x12, 0x10, 0x3f, 0x9c, 0x61, 0x70, 0x4e, 0x7f, - 0x1c, 0x68, 0x45, 0x69, 0x73, 0x26, 0xd5, 0xdc, 0xfa, 0xe3, 0x58, 0xf1, - 0x5d, 0x4b, 0x68, 0xfa, 0x33, 0xbf, 0x38, 0xa4, 0x37, 0xc5, 0xad, 0xbc, - 0xd1, 0x50, 0xea, 0xe7, 0x8a, 0x7e, 0x17, 0x14, 0x35, 0xbe, 0xd2, 0xf9, - 0xa9, 0x9b, 0x4f, 0x84, 0x98, 0x5e, 0xbd, 0x31, 0x71, 0x30, 0x3d, 0x64, - 0x67, 0x39, 0xdf, 0xd3, 0x3f, 0xd7, 0x7f, 0xea, 0x92, 0xfc, 0xaa, 0xab, - 0x3f, 0x20, 0xab, 0x28, 0x74, 0x7a, 0xfe, 0x00, 0xa4, 0x1a, 0x37, 0xd2, - 0x02, 0x31, 0xdb, 0x57, 0xdc, 0xfe, 0xa1, 0x8d, 0xba, 0xc6, 0xbb, 0x4e, - 0x32, 0xba, 0xdc, 0x8f, 0x3b, 0x96, 0x73, 0xd7, 0x89, 0xea, 0x48, 0x45, - 0x5e, 0xa4, 0x58, 0x24, 0x63, 0xd8, 0x06, 0xa6, 0x2b, 0x6c, 0xfb, 0x99, - 0x66, 0x3c, 0x81, 0x06, 0xae, 0x15, 0xda, 0x44, 0x5b, 0x62, 0x1d, 0xb3, - 0xd9, 0x8c, 0xec, 0x2b, 0x38, 0x16, 0x8d, 0xf1, 0x63, 0xbe, 0xa1, 0x6d, - 0x5f, 0x27, 0x44, 0x01, 0x7b, 0x0a, 0x57, 0x6c, 0x6b, 0x5e, 0x27, 0x5c, - 0xa1, 0x36, 0xc1, 0xa0, 0x26, 0x14, 0x2e, 0xeb, 0x1c, 0x03, 0x9f, 0x09, - 0x8f, 0x5f, 0x5f, 0x86, 0x75, 0xf6, 0xd3, 0x59, 0x0c, 0x54, 0xa0, 0x38, - 0xc4, 0x6a, 0xc0, 0xbf, 0xa5, 0x0f, 0xab, 0x9a, 0xa5, 0x5e, 0xa7, 0xdb, - 0x6d, 0xe2, 0x97, 0x71, 0x06, 0xd1, 0x72, 0xb0, 0xe2, 0x35, 0x31, 0x33, - 0x6f, 0x89, 0x9f, 0x2f, 0x5a, 0x2b, 0xb8, 0x96, 0xab, 0xd1, 0xf8, 0x83, - 0xcb, 0x1f, 0x2c, 0xaa, 0xec, 0xc8, 0x23, 0xc0, 0x3b, 0xfe, 0x71, 0x23, - 0x8b, 0x00, 0xef, 0xbc, 0x2b, 0x49, 0x4c, 0xeb, 0xe2, 0x25, 0x49, 0x45, - 0x4a, 0xfc, 0xf2, 0x78, 0x21, 0xd0, 0x65, 0x3b, 0xdb, 0x0f, 0xff, 0x61, - 0x2b, 0x04, 0x20, 0xbf, 0xf4, 0x55, 0x4a, 0x17, 0x5c, 0x51, 0x5d, 0xae, - 0x81, 0x36, 0x01, 0x5d, 0x42, 0xad, 0x90, 0x4e, 0x8f, 0x97, 0xbe, 0x9e, - 0x85, 0x5d, 0xa7, 0x7f, 0x67, 0x6a, 0xef, 0xb9, 0x4e, 0x48, 0xde, 0xcf, - 0xfd, 0x81, 0xa8, 0xfc, 0xa8, 0x12, 0xfc, 0xb8, 0x12, 0x20, 0xf3, 0x56, - 0xfa, 0x81, 0xf6, 0x0b, 0x32, 0xf3, 0x73, 0xc8, 0xe3, 0x5a, 0x41, 0x90, - 0x8c, 0xd5, 0x56, 0xac, 0x2b, 0x83, 0x88, 0x1e, 0xaf, 0xe8, 0xfb, 0x2f, - 0x00, 0x27, 0x13, 0x04, 0x82, 0x0a, 0x7c, 0x65, 0x45, 0x79, 0xa8, 0x72, - 0x81, 0xc4, 0x12, 0x37, 0x38, 0xcf, 0x9a, 0xc5, 0x66, 0xd2, 0x8d, 0x5f, - 0x61, 0x5c, 0xde, 0x27, 0x38, 0x7e, 0x4c, 0xe6, 0x79, 0x53, 0x4e, 0x3c, - 0xf8, 0x03, 0x6e, 0x85, 0x80, 0x7e, 0xd7, 0xb9, 0x00, 0xe8, 0x82, 0x55, - 0xca, 0x15, 0xdb, 0xb4, 0xf4, 0x40, 0xc9, 0x7e, 0xb4, 0xbd, 0x80, 0x8a, - 0x71, 0x8c, 0xb9, 0x32, 0x75, 0x8f, 0xdd, 0x57, 0x5b, 0x01, 0x67, 0x5b, - 0xdd, 0x4d, 0x62, 0xe9, 0x05, 0x1c, 0x00, 0x2f, 0x34, 0x44, 0x38, 0x47, - 0x35, 0x64, 0xf5, 0xe2, 0xb1, 0x78, 0x25, 0x75, 0xee, 0x56, 0xa3, 0x58, - 0x11, 0xb8, 0x6d, 0xc2, 0x80, 0x5a, 0xe9, 0x57, 0xc9, 0x46, 0x97, 0x21, - 0x07, 0xf8, 0x1c, 0x83, 0xe4, 0xd4, 0x8f, 0xd7, 0x99, 0xdb, 0x54, 0x57, - 0xbd, 0x8c, 0x06, 0xe9, 0xfa, 0x82, 0xc8, 0xed, 0x75, 0x75, 0x4e, 0xb4, - 0xfa, 0x77, 0x1e, 0xa2, 0x01, 0xbc, 0xf4, 0x55, 0x9e, 0x6f, 0xd2, 0xae, - 0x7b, 0xd5, 0x0d, 0x0d, 0x91, 0x58, 0x39, 0x83, 0x5b, 0xad, 0x08, 0x5b, - 0x98, 0x36, 0x16, 0xd4, 0x3f, 0x5f, 0xcc, 0xba, 0xf2, 0xc2, 0x15, 0xa4, - 0x03, 0x61, 0xa1, 0x4b, 0x29, 0x41, 0x25, 0x9b, 0x32, 0xb7, 0x70, 0xf5, - 0x5e, 0x37, 0x93, 0x2b, 0xae, 0xd9, 0x24, 0xc2, 0x1a, 0x8e, 0xad, 0x10, - 0x7b, 0x52, 0x67, 0x60, 0xf8, 0x7e, 0xc1, 0x2b, 0x36, 0x30, 0xdc, 0xdc, - 0x79, 0xb2, 0x99, 0x1a, 0x9d, 0x8c, 0x43, 0x66, 0x0c, 0xf2, 0x8d, 0x1f, - 0xb6, 0x96, 0xcc, 0xaa, 0x94, 0x7b, 0xa1, 0xe1, 0x06, 0x00, 0x42, 0xc9, - 0x3f, 0x2e, 0xa6, 0xfc, 0xd3, 0xcb, 0x27, 0xff, 0x34, 0xc0, 0x6b, 0xc4, - 0x00, 0x6d, 0xaf, 0x0b, 0xcc, 0x89, 0xf5, 0x52, 0x05, 0xab, 0x2a, 0x4e, - 0x5e, 0x07, 0x8f, 0x37, 0x16, 0x69, 0xb6, 0xaf, 0xae, 0x5a, 0x39, 0xdd, - 0xd8, 0x65, 0x32, 0x0f, 0xf3, 0x19, 0x1d, 0x44, 0x56, 0x6b, 0xca, 0xe7, - 0xe0, 0xfe, 0xc4, 0xf7, 0xc0, 0x51, 0x7c, 0x25, 0xf7, 0xb0, 0x79, 0xdc, - 0xa1, 0xc5, 0xf6, 0xaa, 0x6b, 0x67, 0x20, 0xcb, 0xcf, 0x42, 0x8a, 0x0b, - 0x90, 0x57, 0x6e, 0x76, 0x82, 0x9c, 0xb6, 0x7d, 0xf6, 0x7b, 0xb7, 0xe0, - 0x98, 0xd9, 0xc7, 0x4b, 0x83, 0x38, 0x10, 0x06, 0xdd, 0x2b, 0x4b, 0x9e, - 0xbd, 0xfc, 0x39, 0x34, 0x1b, 0xea, 0x91, 0xbb, 0xe2, 0x20, 0x96, 0xbf, - 0xd0, 0xde, 0xd8, 0xac, 0x4e, 0x5e, 0xae, 0x22, 0xd8, 0xfc, 0xeb, 0x56, - 0x4c, 0xc4, 0x22, 0x88, 0x33, 0xf1, 0xb3, 0xaa, 0x92, 0x9e, 0x62, 0xcb, - 0x83, 0xdf, 0x0c, 0x8f, 0xe1, 0x04, 0xfb, 0xda, 0xfc, 0x66, 0x13, 0x04, - 0x5c, 0x90, 0x80, 0x82, 0x67, 0x0a, 0xf7, 0x95, 0xe5, 0x5d, 0x24, 0x04, - 0x22, 0x40, 0x4b, 0x56, 0x41, 0x03, 0x2e, 0xdb, 0x90, 0x77, 0x95, 0x69, - 0x77, 0x5a, 0x2a, 0xc7, 0xa7, 0xa1, 0xa6, 0x73, 0x03, 0xfa, 0xed, 0x64, - 0x7e, 0x3d, 0xe7, 0x6d, 0x57, 0xbd, 0x7e, 0xb2, 0xef, 0xfa, 0xc5, 0xbf, - 0x9b, 0xc2, 0x2f, 0xbc, 0x67, 0x31, 0xff, 0xca, 0x32, 0x22, 0xf7, 0x62, - 0x2b, 0xac, 0xeb, 0xa2, 0x3a, 0xae, 0x09, 0xe1, 0x78, 0x1e, 0x14, 0x17, - 0x10, 0x48, 0x69, 0x0d, 0xd7, 0x44, 0xc8, 0x5f, 0x79, 0x97, 0x2e, 0x00, - 0x3d, 0x7e, 0x79, 0xff, 0x9c, 0x88, 0xb6, 0x75, 0x5e, 0x5e, 0x01, 0x9f, - 0xbb, 0x54, 0xca, 0xe7, 0x00, 0xa0, 0xea, 0xbb, 0x5e, 0xc7, 0x9e, 0x55, - 0x8f, 0x70, 0xa0, 0x41, 0x97, 0x50, 0x7d, 0x05, 0xca, 0x95, 0xab, 0x29, - 0xfd, 0x7c, 0xbf, 0x19, 0xfd, 0xaf, 0xfa, 0x57, 0x23, 0x06, 0x8d, 0x9f, - 0x6e, 0x57, 0xc3, 0xa0, 0xcc, 0x31, 0xb9, 0x66, 0x73, 0x85, 0xb3, 0x16, - 0x5d, 0xee, 0x11, 0x9c, 0x2c, 0x12, 0x66, 0x14, 0x11, 0x8a, 0x85, 0x80, - 0x9b, 0x15, 0x80, 0x6d, 0xa3, 0xb9, 0x31, 0xf0, 0x71, 0x9e, 0xb0, 0xc1, - 0x7f, 0x12, 0xa8, 0x55, 0x11, 0x30, 0xe6, 0x40, 0x2f, 0x86, 0x77, 0xc5, - 0x2d, 0x2b, 0x02, 0xee, 0x8f, 0x01, 0x38, 0xfd, 0x44, 0xdb, 0xdc, 0x80, - 0x22, 0x70, 0xd5, 0x20, 0x5a, 0x01, 0x33, 0xa3, 0xd2, 0xf6, 0x4b, 0xc6, - 0xa2, 0x01, 0x80, 0xc7, 0xed, 0x02, 0x99, 0x76, 0x43, 0xea, 0x8d, 0xa1, - 0x62, 0xf7, 0xdd, 0xe2, 0xf2, 0xfd, 0x88, 0xbd, 0x0e, 0x30, 0x01, 0x7a, - 0x2e, 0xac, 0x8a, 0x7c, 0x48, 0x0a, 0x03, 0x54, 0xff, 0x8c, 0xa7, 0xf9, - 0xf2, 0xe2, 0x61, 0x1d, 0x03, 0xcc, 0x9b, 0xba, 0x5c, 0x9f, 0x14, 0x15, - 0xec, 0xfd, 0x77, 0x14, 0xfe, 0x3d, 0xfa, 0xfe, 0xc8, 0x75, 0x56, 0x2a, - 0x28, 0x1e, 0x03, 0x34, 0x42, 0xd8, 0xb0, 0xb1, 0xb1, 0xe3, 0x96, 0x0b, - 0x8e, 0xf9, 0x1e, 0x30, 0xca, 0x11, 0x33, 0x5c, 0xfc, 0x00, 0xa1, 0x0b, - 0xe1, 0xf3, 0xfe, 0x35, 0x5f, 0x0d, 0xf0, 0x42, 0x8b, 0x88, 0x95, 0x14, - 0xa0, 0xe5, 0xde, 0x79, 0xef, 0x2d, 0x82, 0xdc, 0xf0, 0xcb, 0xe1, 0x0c, - 0x3d, 0xef, 0x10, 0x1e, 0x27, 0xf4, 0xcb, 0x1b, 0x18, 0xd7, 0xf9, 0x0b, - 0xff, 0x94, 0x86, 0x02, 0x9a, 0x7f, 0x22, 0xf2, 0x15, 0xab, 0x3a, 0x55, - 0x14, 0xdb, 0x5e, 0xc2, 0x83, 0x71, 0x26, 0x3d, 0x67, 0x13, 0xb1, 0xb8, - 0x03, 0xd1, 0xed, 0x83, 0x9b, 0x1b, 0xea, 0x36, 0x98, 0x44, 0xc2, 0xf0, - 0x8f, 0xb6, 0x66, 0x5e, 0x57, 0x02, 0xd8, 0xb8, 0x60, 0xa8, 0x68, 0x59, - 0xf5, 0xa6, 0x2c, 0x60, 0x44, 0xd0, 0x63, 0xe1, 0x8c, 0xb3, 0x27, 0x7e, - 0x59, 0xf8, 0x5f, 0x54, 0x1e, 0x13, 0xc1, 0xa7, 0xc1, 0xff, 0xde, 0x42, - 0x80, 0xf9, 0x33, 0xb1, 0xdd, 0x95, 0xcd, 0x21, 0x97, 0x53, 0x5f, 0x87, - 0x49, 0xc0, 0x88, 0xb0, 0x5a, 0x5f, 0xf0, 0x3f, 0xb1, 0x45, 0x81, 0x70, - 0x2e, 0x03, 0x84, 0xbd, 0xde, 0x07, 0xe1, 0x8d, 0xd1, 0xbb, 0x4c, 0x9a, - 0xea, 0x56, 0x50, 0xb3, 0x23, 0xdb, 0x2c, 0xce, 0xd0, 0x81, 0x57, 0x7d, - 0x2f, 0xc3, 0x40, 0x1d, 0x3c, 0x23, 0x02, 0x8c, 0xc9, 0x19, 0x06, 0x47, - 0x30, 0x21, 0x0e, 0x8e, 0xcc, 0x72, 0xda, 0x8e, 0xbb, 0x7a, 0xa0, 0xdd, - 0xa9, 0xbb, 0x4c, 0xf2, 0x0a, 0x77, 0xc3, 0xd7, 0xee, 0xf3, 0x26, 0xa7, - 0xdb, 0x39, 0x18, 0x85, 0xdb, 0x7d, 0x19, 0x4c, 0xc9, 0x24, 0xff, 0xc0, - 0xf6, 0x76, 0xa1, 0xe2, 0xf9, 0x6e, 0x03, 0x5c, 0x6c, 0x0a, 0x76, 0xde, - 0x7e, 0x91, 0x79, 0xff, 0xf5, 0xe3, 0x7b, 0xf8, 0xf1, 0xb5, 0x7e, 0xfc, - 0xf8, 0xa7, 0xf2, 0xc7, 0x3c, 0x72, 0xc3, 0xaf, 0x25, 0x7f, 0x72, 0x9f, - 0xa1, 0x96, 0xfc, 0x11, 0x90, 0x3d, 0xc1, 0xc0, 0x35, 0x18, 0x63, 0x3d, - 0x33, 0x1b, 0xbd, 0xd6, 0x8e, 0xd2, 0x21, 0x38, 0xa8, 0x55, 0x6a, 0xfc, - 0xe8, 0xfc, 0x25, 0x21, 0x83, 0x64, 0x6a, 0xbb, 0xb2, 0xf1, 0xa9, 0xee, - 0xe1, 0xc2, 0xec, 0x99, 0x9d, 0x00, 0x5e, 0x35, 0x26, 0x58, 0x82, 0x84, - 0x12, 0x68, 0x72, 0xed, 0x30, 0x2f, 0xb8, 0x18, 0x6c, 0x67, 0xab, 0x96, - 0x02, 0x58, 0x7b, 0x9f, 0x66, 0x26, 0xb5, 0x1f, 0x52, 0x2b, 0x6e, 0x72, - 0xb2, 0xf3, 0x78, 0x2e, 0xb9, 0x01, 0xd7, 0x2e, 0x9e, 0x24, 0x90, 0x6e, - 0xea, 0x4d, 0x80, 0xb0, 0x37, 0x40, 0x74, 0xb6, 0x50, 0x29, 0xa4, 0x72, - 0x48, 0x7e, 0x18, 0x9c, 0x03, 0xd3, 0x33, 0xc3, 0xfa, 0xa8, 0x8c, 0x9e, - 0x3d, 0xf2, 0xb9, 0x69, 0xc3, 0x22, 0x77, 0x7e, 0xd4, 0xe9, 0xfb, 0xcc, - 0x6d, 0x37, 0x20, 0xe8, 0xea, 0xbe, 0xb6, 0x1f, 0x16, 0x17, 0xd9, 0x82, - 0x5b, 0x4f, 0xa4, 0x33, 0x1b, 0xc5, 0x72, 0x6d, 0x1d, 0xc8, 0x85, 0xca, - 0x47, 0x48, 0xcb, 0x64, 0xca, 0x2d, 0x0d, 0xc1, 0x36, 0x35, 0xad, 0x5c, - 0xb4, 0xb7, 0x45, 0x65, 0xb5, 0xb4, 0x36, 0xe2, 0xc7, 0xed, 0x40, 0x0f, - 0xb5, 0x3a, 0xd0, 0x21, 0xd1, 0x64, 0xdf, 0x23, 0x3b, 0x42, 0xe5, 0xfe, - 0xd2, 0x72, 0x9e, 0x3a, 0xc8, 0x15, 0x04, 0x96, 0xaf, 0x43, 0x91, 0x92, - 0xb7, 0x25, 0xc0, 0x68, 0x8f, 0xd2, 0x13, 0x25, 0xd0, 0x33, 0x6d, 0x69, - 0x15, 0xf3, 0x87, 0x1f, 0xa5, 0x5d, 0x9d, 0xd0, 0xe5, 0xc7, 0x63, 0xe6, - 0xc5, 0xf2, 0xea, 0x80, 0x5c, 0xe3, 0x7e, 0x94, 0xbe, 0x9f, 0x7d, 0xd9, - 0x09, 0xe8, 0x0c, 0xcf, 0x91, 0xe5, 0x92, 0x7b, 0xb6, 0x0e, 0x0f, 0x8f, - 0x8e, 0x15, 0x85, 0xf6, 0xfc, 0x38, 0x70, 0xb2, 0xe5, 0x1c, 0xae, 0xea, - 0xcc, 0x72, 0x2c, 0xb4, 0xd5, 0x1a, 0x92, 0x00, 0xfb, 0x00, 0x27, 0xac, - 0x8e, 0x19, 0xd8, 0x8e, 0x97, 0xad, 0x57, 0xcc, 0x55, 0xb7, 0xf7, 0x2b, - 0xb2, 0x4a, 0x2b, 0x20, 0x17, 0x62, 0x1a, 0xfa, 0x23, 0xe2, 0x64, 0xe3, - 0x8f, 0xee, 0x64, 0xd4, 0x6c, 0x2f, 0x36, 0x7f, 0x30, 0x9f, 0x56, 0x73, - 0x74, 0x3c, 0xc4, 0x9f, 0xce, 0xa2, 0xdb, 0x19, 0x74, 0xb4, 0x07, 0xf7, - 0xe9, 0x49, 0x19, 0x7d, 0x29, 0x7f, 0x79, 0x53, 0xba, 0x3f, 0x83, 0x0e, - 0x4e, 0xb1, 0xe9, 0x18, 0xca, 0x3f, 0xb4, 0x22, 0x06, 0x5c, 0x06, 0x8b, - 0xa1, 0x1a, 0x10, 0xdc, 0xa0, 0x69, 0x80, 0xec, 0x39, 0xce, 0x21, 0x3a, - 0xef, 0xcc, 0x19, 0x6c, 0x0e, 0x47, 0xb0, 0x66, 0xc3, 0xce, 0xd0, 0x10, - 0x06, 0xd9, 0x2a, 0x9d, 0x0b, 0x7b, 0xea, 0x01, 0x70, 0x31, 0xf1, 0x36, - 0x1b, 0x79, 0xa2, 0x73, 0x49, 0x4a, 0xc3, 0x4b, 0x09, 0xc8, 0x1c, 0xb5, - 0x41, 0x4e, 0xd1, 0xa8, 0xcc, 0x40, 0x67, 0xd8, 0x19, 0xc7, 0x0d, 0x5d, - 0xd8, 0xbf, 0xda, 0xd9, 0x71, 0x09, 0x1a, 0x83, 0x56, 0xbb, 0xa6, 0x4f, - 0x7c, 0xaa, 0x25, 0x66, 0xc9, 0xb2, 0x02, 0x5a, 0x6c, 0xe2, 0xd1, 0xcf, - 0xb7, 0x56, 0x80, 0x1e, 0x5f, 0xe1, 0x87, 0x20, 0x23, 0x5a, 0xb2, 0xc3, - 0x0d, 0xfd, 0x63, 0x0d, 0xfa, 0x67, 0x91, 0xa3, 0x15, 0x17, 0x56, 0xa1, - 0x20, 0x7a, 0x17, 0x52, 0x41, 0xcf, 0xa5, 0x6b, 0xcb, 0xa2, 0xba, 0x6c, - 0xe6, 0x4b, 0xe3, 0x10, 0xbe, 0x5e, 0x4d, 0x6a, 0x0d, 0x80, 0xbe, 0xf2, - 0x56, 0x25, 0xa8, 0x5e, 0x2b, 0xca, 0x7c, 0xd4, 0xb5, 0x45, 0xee, 0xfc, - 0xf8, 0xcd, 0x4e, 0x10, 0x39, 0x4e, 0xe2, 0xe6, 0x7f, 0x39, 0x71, 0x9b, - 0x1f, 0xda, 0x64, 0x33, 0xf0, 0xcc, 0x70, 0xf6, 0x4e, 0x42, 0x05, 0xdf, - 0x35, 0xdf, 0xdf, 0x74, 0xe5, 0x1d, 0x84, 0x59, 0x3f, 0xe4, 0x1b, 0xef, - 0xbd, 0x00, 0x49, 0x40, 0x24, 0x10, 0xdf, 0x25, 0x12, 0xe0, 0x12, 0xac, - 0x2d, 0x12, 0xab, 0x64, 0x6b, 0xbe, 0xf7, 0x29, 0x2f, 0xb7, 0x4b, 0xaf, - 0xf3, 0x37, 0xfe, 0xa7, 0x4b, 0x94, 0x2a, 0x60, 0x26, 0x5d, 0x5b, 0xa6, - 0x08, 0x27, 0x19, 0x3f, 0xba, 0xe9, 0xc3, 0x36, 0x71, 0x99, 0xc5, 0x54, - 0x26, 0x75, 0x14, 0xd4, 0xde, 0x0e, 0x61, 0xcf, 0x07, 0x71, 0x2d, 0x93, - 0xbe, 0xe7, 0xa9, 0x39, 0x38, 0x35, 0x01, 0x16, 0x3a, 0x8d, 0xd4, 0xbd, - 0x7c, 0xcf, 0x3d, 0x26, 0x78, 0x37, 0x2e, 0x32, 0xfa, 0x7a, 0x19, 0x7e, - 0xee, 0xcd, 0xe2, 0x5b, 0xe2, 0xa9, 0x00, 0x1e, 0xcb, 0xd0, 0xad, 0x88, - 0x7d, 0x77, 0x36, 0xa2, 0x3a, 0x6a, 0x1e, 0x21, 0x7f, 0x55, 0x9f, 0xf9, - 0xad, 0xfb, 0x40, 0x04, 0x73, 0x93, 0xd4, 0x40, 0xf6, 0x98, 0x83, 0x7e, - 0xba, 0x3c, 0x66, 0xcd, 0xb4, 0xbf, 0x07, 0xd5, 0xa2, 0xc1, 0x0d, 0xe9, - 0xdf, 0x8e, 0x31, 0xba, 0xb9, 0xc5, 0x24, 0x06, 0x0c, 0xeb, 0x04, 0x13, - 0x70, 0x14, 0x20, 0xbc, 0x28, 0x9a, 0xd2, 0xf7, 0x32, 0x75, 0x10, 0x63, - 0xf9, 0xf7, 0xf2, 0xc5, 0x5b, 0x69, 0x11, 0xcb, 0x60, 0x95, 0x17, 0x8b, - 0xb5, 0xad, 0x34, 0xf8, 0x32, 0x64, 0x78, 0x6a, 0x72, 0xdf, 0xcb, 0xaa, - 0x89, 0x6d, 0x05, 0xad, 0x62, 0x2c, 0xab, 0x7f, 0xdb, 0x7a, 0x47, 0xf7, - 0xed, 0x8e, 0xbf, 0xd2, 0x25, 0x5a, 0x93, 0xf0, 0x61, 0xd4, 0x16, 0x5d, - 0x64, 0x22, 0x46, 0xdb, 0x32, 0x96, 0x13, 0x58, 0x75, 0x17, 0xd2, 0xd4, - 0xd5, 0xbd, 0xef, 0x8a, 0xbb, 0xc8, 0x7c, 0x22, 0xd7, 0x93, 0x96, 0xb2, - 0xb5, 0xd7, 0x83, 0xb5, 0x15, 0xbd, 0x55, 0xf8, 0x02, 0xa5, 0x0b, 0x0e, - 0xb5, 0x95, 0x18, 0x33, 0xcd, 0x7e, 0x1a, 0x82, 0xc1, 0x52, 0x5d, 0xa9, - 0x5a, 0x4b, 0x38, 0x4e, 0xd8, 0xad, 0x3c, 0x03, 0x9d, 0x83, 0xa9, 0xc3, - 0x81, 0x2c, 0x8d, 0xc8, 0x29, 0xe0, 0x30, 0x6c, 0xce, 0x72, 0x93, 0x88, - 0x1f, 0x5c, 0xd8, 0x79, 0x0c, 0x09, 0x6e, 0xd2, 0x1e, 0x84, 0xdb, 0xec, - 0xc7, 0x1a, 0xc5, 0x0c, 0xba, 0x53, 0x3b, 0xcb, 0x53, 0x69, 0x93, 0x29, - 0x32, 0xb2, 0x00, 0x14, 0x91, 0xca, 0xd3, 0x4b, 0x35, 0x49, 0x2f, 0x08, - 0x01, 0x52, 0xc4, 0x81, 0x21, 0xb4, 0xea, 0x83, 0x2b, 0x53, 0x0d, 0x7b, - 0xa8, 0x42, 0xef, 0x71, 0x9b, 0x70, 0xef, 0x01, 0x0e, 0xa8, 0x7f, 0x6b, - 0x62, 0xcd, 0x11, 0x6c, 0xa5, 0x6c, 0xd6, 0x8e, 0xd6, 0xe9, 0xb2, 0x0c, - 0xcc, 0x63, 0x1c, 0x96, 0xa1, 0x43, 0xcb, 0xa4, 0x0f, 0x79, 0xe4, 0x02, - 0x43, 0xb4, 0xfb, 0x80, 0x5b, 0x5e, 0x90, 0xc9, 0x06, 0x6d, 0x2b, 0x68, - 0x66, 0x4d, 0x99, 0x08, 0x66, 0xaf, 0x48, 0x6f, 0x1a, 0xbb, 0x6e, 0x7d, - 0xc8, 0xbd, 0xe9, 0x66, 0x1a, 0x40, 0x2f, 0x8e, 0xfb, 0xd2, 0x1a, 0xd4, - 0x5d, 0x22, 0x18, 0x09, 0xfa, 0xef, 0x52, 0xe6, 0x52, 0x41, 0x79, 0x4c, - 0x43, 0x47, 0x22, 0xf6, 0x3d, 0xb0, 0xcb, 0xb8, 0xd9, 0xda, 0x0c, 0xe4, - 0x96, 0x0b, 0x3e, 0xff, 0x40, 0x9c, 0xc2, 0x98, 0xe7, 0xff, 0xec, 0x49, - 0x1a, 0x37, 0x58, 0xe4, 0xcd, 0xeb, 0xe3, 0x7f, 0x4d, 0xe6, 0xd1, 0xf9, - 0x10, 0x8b, 0x66, 0xd2, 0x2d, 0xf0, 0xe1, 0x1a, 0xf6, 0xb6, 0xe7, 0x45, - 0x35, 0x13, 0x97, 0x1e, 0x11, 0xde, 0x18, 0xdb, 0x88, 0xe8, 0xd2, 0xeb, - 0xd5, 0x42, 0x27, 0xe3, 0x1c, 0x6c, 0x69, 0x2b, 0xb8, 0x65, 0xdf, 0xd2, - 0x91, 0x74, 0x3f, 0xb9, 0x72, 0xec, 0xbd, 0x03, 0xf7, 0xa7, 0x4d, 0xd7, - 0xd9, 0x3e, 0xfd, 0xe1, 0x60, 0xf3, 0x6f, 0x97, 0x31, 0x28, 0x46, 0xbe, - 0xfe, 0xf4, 0x55, 0xf3, 0x4f, 0xac, 0x96, 0x7f, 0xda, 0xd2, 0xf6, 0xa7, - 0x2d, 0x6d, 0x7f, 0xb4, 0x4c, 0xf8, 0x69, 0x2b, 0xb9, 0x9f, 0x1f, 0x4c, - 0x22, 0x10, 0x4b, 0x88, 0x83, 0x1f, 0xe7, 0xee, 0x54, 0x3f, 0x4e, 0x3a, - 0xcc, 0xa8, 0x56, 0x8f, 0x37, 0xeb, 0x60, 0x90, 0x64, 0xa0, 0x36, 0xc1, - 0x09, 0x35, 0x3a, 0x8f, 0xde, 0x24, 0xc5, 0xb5, 0x3e, 0x9b, 0x6c, 0xb8, - 0xae, 0x4d, 0xe2, 0xf2, 0x32, 0x38, 0xe7, 0x00, 0xf1, 0x23, 0x5f, 0x7c, - 0xb5, 0xd9, 0x98, 0xd5, 0x8a, 0x57, 0xf0, 0x8d, 0x4c, 0x5a, 0x17, 0x7e, - 0xbe, 0xc6, 0xc6, 0x63, 0xd6, 0xd6, 0xcc, 0x3c, 0xff, 0xfa, 0x55, 0xf1, - 0x95, 0x46, 0x71, 0x81, 0xc1, 0x3d, 0x98, 0xda, 0x46, 0xe5, 0xfe, 0x32, - 0x86, 0xbe, 0x5c, 0x14, 0x2a, 0x36, 0x54, 0xaf, 0xcd, 0xd0, 0xfb, 0xac, - 0x42, 0x7d, 0x81, 0x4a, 0xb6, 0x6f, 0x7f, 0x57, 0xfe, 0xd1, 0xa7, 0x77, - 0xc1, 0x3c, 0x99, 0x60, 0x5c, 0xb5, 0x6a, 0x3f, 0x6c, 0x73, 0x8b, 0x5f, - 0x85, 0xdc, 0x60, 0x05, 0xfc, 0xaf, 0x78, 0x98, 0x31, 0x96, 0x31, 0x74, - 0x84, 0x45, 0xb3, 0x5b, 0x97, 0x21, 0xdd, 0x1f, 0xb9, 0xb6, 0x64, 0xad, - 0x55, 0x51, 0x19, 0x06, 0xeb, 0x66, 0xe4, 0xe9, 0xd3, 0x0a, 0xa8, 0x8c, - 0x9d, 0xa2, 0xa7, 0x76, 0x96, 0x04, 0x34, 0x1a, 0x73, 0x17, 0x12, 0xc7, - 0xf4, 0xf5, 0x9b, 0x2e, 0xe3, 0xca, 0x4f, 0x6c, 0xaf, 0x3d, 0xd8, 0x37, - 0x5e, 0x06, 0x34, 0x37, 0xa8, 0xd8, 0x9c, 0xf4, 0xe3, 0xf4, 0x3b, 0x09, - 0x40, 0x1c, 0xc2, 0x57, 0x5a, 0xbe, 0x34, 0xb3, 0x5e, 0xdd, 0x07, 0xaf, - 0x85, 0xd3, 0xeb, 0x35, 0x3a, 0xd2, 0x41, 0xed, 0x2f, 0x99, 0x73, 0xf6, - 0xc2, 0x4c, 0x58, 0xf3, 0xb4, 0x55, 0x3b, 0x00, 0x8f, 0xe9, 0x46, 0x09, - 0xaf, 0x11, 0xab, 0xe0, 0xc7, 0x1f, 0xdf, 0x7f, 0xfd, 0xf8, 0x8e, 0x1f, - 0xd3, 0x0d, 0x7b, 0xf3, 0x81, 0x98, 0x15, 0xc2, 0x6a, 0xaa, 0xc4, 0x32, - 0x8c, 0x69, 0xce, 0xc3, 0x47, 0x46, 0x00, 0x4e, 0x0e, 0x0e, 0xcf, 0x7a, - 0x00, 0x39, 0x66, 0x81, 0x8f, 0xe9, 0xe0, 0x8d, 0xe9, 0x31, 0x6a, 0x36, - 0x19, 0xe2, 0x83, 0xe4, 0x8c, 0x79, 0xdc, 0x4c, 0xba, 0x1d, 0xc6, 0x70, - 0x9e, 0x36, 0xf9, 0x0a, 0x50, 0x84, 0xb6, 0x5e, 0x4b, 0x79, 0x3c, 0x37, - 0x11, 0xe4, 0x29, 0x1b, 0xb0, 0x6a, 0x3d, 0xe6, 0x63, 0x93, 0x0f, 0xb8, - 0xdd, 0xc2, 0x3d, 0x85, 0x73, 0x86, 0xc4, 0x30, 0x5e, 0x3e, 0xe2, 0x2f, - 0xcb, 0xd7, 0x74, 0x44, 0x60, 0xd4, 0xcf, 0x61, 0x78, 0xe3, 0x6e, 0xd6, - 0x63, 0xf9, 0x37, 0xdd, 0x65, 0x80, 0xfd, 0xc4, 0x61, 0x29, 0x18, 0x06, - 0xef, 0xc1, 0xa0, 0xd8, 0x4b, 0x88, 0x5f, 0xdc, 0x0d, 0xd3, 0x76, 0x9d, - 0x22, 0x28, 0x30, 0x42, 0xdb, 0xfc, 0xb1, 0x5b, 0xf2, 0x58, 0x76, 0xbe, - 0xcb, 0x04, 0xc2, 0x43, 0x75, 0xce, 0xb9, 0x01, 0x77, 0xd2, 0x61, 0xe1, - 0xf8, 0xd0, 0xf6, 0x36, 0xc8, 0xa3, 0x3a, 0x99, 0x5c, 0x0f, 0x96, 0x18, - 0xbe, 0xd0, 0xf2, 0x0e, 0x5b, 0xc1, 0x13, 0x19, 0x82, 0xa7, 0x14, 0x59, - 0x13, 0x26, 0x4e, 0xc5, 0x1f, 0x89, 0x1f, 0x78, 0xdb, 0x53, 0x44, 0xb6, - 0xc7, 0x29, 0x5d, 0x3c, 0x82, 0x13, 0x9d, 0x0d, 0x8c, 0x2e, 0xc8, 0x0f, - 0x4e, 0xae, 0x7d, 0xca, 0x64, 0x46, 0x05, 0xd7, 0x0f, 0xf0, 0xe7, 0x41, - 0x5c, 0x64, 0x63, 0x14, 0x4a, 0x1c, 0x99, 0xce, 0x90, 0x1b, 0x79, 0x84, - 0x6d, 0x40, 0x4f, 0x51, 0x1e, 0x14, 0xdd, 0x68, 0xdf, 0xfd, 0xfd, 0xa8, - 0xfe, 0xe9, 0xb3, 0xc2, 0xfb, 0x74, 0x58, 0x40, 0x1e, 0x6c, 0x1f, 0x31, - 0xd9, 0xc6, 0xe0, 0xb7, 0x14, 0xbd, 0xbf, 0x71, 0x6e, 0xe6, 0xba, 0x2e, - 0x72, 0x1d, 0xee, 0x0c, 0x84, 0x48, 0xb6, 0x5e, 0x30, 0xe6, 0xdb, 0x38, - 0x60, 0x03, 0x47, 0x7c, 0x1b, 0x56, 0x05, 0x8d, 0x7b, 0xfe, 0x65, 0x37, - 0x32, 0xeb, 0x63, 0x9f, 0xcd, 0xec, 0xdc, 0x7f, 0x7a, 0x7f, 0xfe, 0xe4, - 0x06, 0x9d, 0xe4, 0x51, 0xfb, 0x89, 0x02, 0xfb, 0x5a, 0xec, 0x76, 0xcf, - 0xe4, 0x1e, 0x50, 0x91, 0x30, 0x8c, 0xe9, 0xe6, 0xfd, 0x5b, 0x6e, 0x11, - 0xc2, 0x5d, 0x63, 0x55, 0x99, 0xe2, 0x05, 0x06, 0x80, 0xac, 0xd1, 0xc3, - 0xd7, 0x69, 0xe5, 0xe9, 0xcd, 0xa7, 0x30, 0x69, 0xd1, 0xe3, 0x7f, 0x6d, - 0x22, 0x5c, 0x9a, 0x6b, 0x88, 0x1d, 0x13, 0xd6, 0x4c, 0xde, 0x83, 0x49, - 0xc9, 0x7f, 0x59, 0x29, 0xf9, 0x7f, 0x6d, 0x30, 0x4f, 0x05, 0x47, 0xf3, - 0xbf, 0xdc, 0x39, 0xcf, 0x84, 0x3f, 0x7d, 0x70, 0x9e, 0xf9, 0x2e, 0x1a, - 0x01, 0x6f, 0x17, 0x0d, 0x45, 0xfd, 0x61, 0xf4, 0xb2, 0xc1, 0xc7, 0xaf, - 0x83, 0x39, 0x3d, 0xa6, 0x47, 0x7d, 0x78, 0xdf, 0xd4, 0xbd, 0x6e, 0xda, - 0xab, 0xd8, 0x94, 0xc5, 0xdb, 0xd2, 0x97, 0x2b, 0xc2, 0x49, 0xc6, 0x0f, - 0x7e, 0xcf, 0xe1, 0x47, 0x8a, 0x16, 0xbb, 0xfc, 0x2f, 0x6f, 0x07, 0x92, - 0x3c, 0x26, 0xdc, 0x13, 0x57, 0x13, 0xd6, 0xe8, 0x87, 0xa1, 0xf7, 0x0d, - 0xb6, 0xf4, 0xd0, 0xb7, 0x4f, 0x79, 0x3a, 0x23, 0x8d, 0x2d, 0x7f, 0x9b, - 0x9c, 0xdd, 0x44, 0x41, 0xa7, 0xb3, 0x3b, 0x3d, 0xc7, 0x5a, 0x5c, 0xd9, - 0x58, 0xe1, 0xd4, 0x6e, 0x7a, 0x80, 0xdb, 0xe5, 0x93, 0xa1, 0x37, 0x74, - 0x71, 0x34, 0xb7, 0x1f, 0xb5, 0x72, 0x6b, 0x75, 0xb2, 0xa2, 0x98, 0xdb, - 0x09, 0xb2, 0x51, 0x56, 0x78, 0xa6, 0xc1, 0xfc, 0x4c, 0xe3, 0x2f, 0xa4, - 0x0c, 0xed, 0xfc, 0xa8, 0x4c, 0x56, 0xf8, 0x65, 0xc4, 0x41, 0x98, 0xe8, - 0x3d, 0xda, 0xd0, 0x3c, 0x60, 0xd3, 0x89, 0xf7, 0xdc, 0x4f, 0x40, 0x28, - 0xc2, 0x70, 0x16, 0xf8, 0x43, 0xb2, 0x5c, 0xcc, 0x2f, 0xc3, 0x42, 0xb1, - 0x72, 0xd0, 0xbc, 0xec, 0x1f, 0x56, 0x11, 0xff, 0xb0, 0xd9, 0x74, 0xbf, - 0xa7, 0x80, 0xca, 0xdd, 0x53, 0x77, 0xdc, 0x88, 0x9a, 0x3f, 0xda, 0xda, - 0xd8, 0xfa, 0xb2, 0x6d, 0xf3, 0x84, 0x61, 0x83, 0x44, 0xcf, 0x6e, 0x48, - 0x86, 0x25, 0x03, 0xa1, 0xd2, 0x57, 0x51, 0xb1, 0xc9, 0x4d, 0x05, 0xa8, - 0xe7, 0x83, 0xb8, 0x39, 0xac, 0xf4, 0xe4, 0x8b, 0xd3, 0x0f, 0xdb, 0xd9, - 0x2b, 0xbb, 0x19, 0x44, 0x30, 0xfd, 0xc1, 0x9b, 0xbf, 0xe6, 0x80, 0x9c, - 0x1c, 0x00, 0xbe, 0x3f, 0x7e, 0xb0, 0x4f, 0x7f, 0x5e, 0x7f, 0xc9, 0x69, - 0xa6, 0xd9, 0xb0, 0x84, 0x11, 0x37, 0x3a, 0x7e, 0xe5, 0xe5, 0x2b, 0x6d, - 0xa5, 0xe6, 0xaf, 0x16, 0x3d, 0xa3, 0x09, 0x6e, 0xc7, 0x9e, 0xbc, 0x09, - 0x11, 0xc6, 0xb4, 0x82, 0xca, 0x8d, 0x0b, 0x23, 0xae, 0x67, 0x01, 0xc7, - 0xf2, 0x1f, 0xcd, 0x1e, 0x9f, 0xfc, 0x7b, 0xb4, 0xa3, 0x8c, 0xdf, 0xa7, - 0x26, 0x49, 0x0f, 0x1c, 0xb6, 0x7a, 0x5a, 0x6f, 0x2a, 0xae, 0xf5, 0xf4, - 0x7b, 0xdb, 0x07, 0xda, 0xe7, 0x2d, 0xce, 0xf9, 0xf6, 0x10, 0x5a, 0x08, - 0x98, 0x8f, 0xcf, 0x8e, 0x6e, 0x77, 0xd5, 0xdd, 0xa5, 0x8d, 0x4c, 0xc0, - 0x3f, 0x2d, 0xde, 0x98, 0xd8, 0x97, 0x56, 0xa9, 0x08, 0x65, 0xd8, 0x16, - 0x09, 0x3b, 0x76, 0x24, 0x7a, 0x8c, 0xc8, 0xf5, 0x18, 0x0d, 0xdb, 0x15, - 0xc0, 0x0a, 0x63, 0x4d, 0xaf, 0xc8, 0x9e, 0xb5, 0xb4, 0x5d, 0x04, 0xbc, - 0x31, 0x1a, 0x6a, 0x87, 0x59, 0xb9, 0x20, 0x7e, 0x7f, 0xfe, 0xf4, 0x8e, - 0x9f, 0x46, 0xfd, 0x26, 0x30, 0xd8, 0x7b, 0x2b, 0x30, 0xa3, 0x28, 0x0f, - 0xeb, 0x64, 0x60, 0x2e, 0xb8, 0xf7, 0x58, 0x30, 0x03, 0x44, 0xa4, 0x28, - 0xea, 0x92, 0xd4, 0x3f, 0x1d, 0x8b, 0x9b, 0xe1, 0xb0, 0x41, 0x4e, 0x98, - 0x72, 0x47, 0xfa, 0x9d, 0x1e, 0x50, 0x84, 0x92, 0xad, 0x41, 0x78, 0x52, - 0x4c, 0x10, 0xf7, 0xec, 0x79, 0x12, 0x80, 0x33, 0x2c, 0xf7, 0x3d, 0x43, - 0x61, 0xf9, 0x69, 0xb8, 0x34, 0x97, 0x73, 0x6f, 0x6b, 0x66, 0xc2, 0xe2, - 0x75, 0x30, 0xbf, 0x0e, 0xfb, 0x4d, 0x62, 0xc3, 0xd6, 0x31, 0xec, 0xee, - 0x0d, 0x3b, 0xfb, 0x82, 0xad, 0xeb, 0x24, 0x1b, 0x4e, 0x9c, 0x33, 0x12, - 0x35, 0x6f, 0xd0, 0x82, 0xf2, 0xd9, 0xdf, 0xae, 0xeb, 0x20, 0xf3, 0xce, - 0x10, 0x79, 0xfc, 0xbf, 0xf7, 0xe1, 0x70, 0x2f, 0x31, 0xb2, 0xec, 0xa5, - 0x67, 0x7e, 0x51, 0x24, 0x8a, 0x85, 0x46, 0xab, 0x37, 0xa1, 0x80, 0xdb, - 0xb0, 0x92, 0xa7, 0x50, 0xaf, 0x4b, 0x5c, 0x3b, 0xbc, 0x92, 0x0d, 0x9b, - 0xe9, 0x76, 0x9b, 0x47, 0xac, 0xdf, 0x87, 0x59, 0x57, 0xe6, 0xb6, 0x35, - 0x2f, 0x64, 0xd5, 0x95, 0x96, 0x9a, 0x5a, 0x9e, 0xd7, 0x56, 0xc1, 0x85, - 0x9d, 0xee, 0x3c, 0x43, 0xed, 0x73, 0x94, 0x6d, 0xf6, 0x09, 0x9e, 0xc5, - 0xbb, 0x00, 0x1c, 0xf1, 0xcb, 0x90, 0x59, 0x35, 0x0f, 0xf4, 0x6d, 0x41, - 0x2e, 0xcf, 0x71, 0x1c, 0x8a, 0x3c, 0xc2, 0x33, 0x0a, 0x7e, 0xbf, 0xac, - 0xc3, 0x80, 0x0c, 0x5e, 0x8b, 0x3f, 0x0c, 0x7d, 0x3c, 0x08, 0xc8, 0xb7, - 0x16, 0x01, 0x39, 0x41, 0x9d, 0x82, 0x6d, 0x1d, 0x61, 0x6e, 0xaf, 0xbc, - 0x8d, 0xb9, 0x3c, 0x21, 0xd2, 0x43, 0xe9, 0x81, 0x49, 0x47, 0xf7, 0x9a, - 0x17, 0x81, 0x9b, 0xa3, 0xe1, 0x07, 0xde, 0xdb, 0x05, 0xb6, 0xd1, 0x47, - 0xc8, 0xa9, 0xc5, 0x34, 0xf1, 0xd3, 0x66, 0x16, 0x84, 0xbd, 0x8e, 0x66, - 0xdc, 0xe0, 0xc4, 0x57, 0x7b, 0x1f, 0x99, 0xf2, 0x7e, 0x48, 0x23, 0x17, - 0x75, 0x85, 0x81, 0x77, 0xf1, 0x20, 0x22, 0x95, 0x23, 0x5f, 0x66, 0x1e, - 0x3e, 0x75, 0x83, 0x85, 0xf4, 0xae, 0x0b, 0x33, 0xc4, 0x2a, 0xb6, 0x63, - 0x1a, 0xce, 0xf3, 0xc8, 0xf4, 0x62, 0xae, 0xac, 0xea, 0xe9, 0xd1, 0x6f, - 0xba, 0x1c, 0xfd, 0xaa, 0x0b, 0xcf, 0x74, 0x8e, 0x0b, 0x5e, 0xbb, 0xf3, - 0x02, 0x2e, 0x30, 0x2b, 0xcd, 0xd1, 0xae, 0x12, 0xf0, 0x88, 0xa7, 0x77, - 0x61, 0x62, 0x6d, 0x27, 0xf6, 0xd3, 0x89, 0x96, 0x0f, 0x3b, 0x2e, 0x49, - 0x42, 0xb5, 0x7e, 0x09, 0x72, 0x02, 0x5d, 0xd3, 0xf2, 0xd6, 0x8c, 0x0e, - 0xca, 0xbc, 0xbf, 0x46, 0xcf, 0x21, 0x18, 0x29, 0x1b, 0x35, 0x10, 0x67, - 0xd4, 0xc6, 0xad, 0x06, 0x05, 0xef, 0x6c, 0x08, 0xc5, 0xdf, 0x01, 0xed, - 0x28, 0xd4, 0x7e, 0x03, 0x76, 0x65, 0xfd, 0xe0, 0x30, 0x0b, 0x19, 0xb2, - 0xca, 0xbc, 0x7d, 0xc8, 0xa7, 0x49, 0xeb, 0x9f, 0x8e, 0x39, 0x9f, 0xed, - 0xc7, 0x70, 0x93, 0x9f, 0xe3, 0xef, 0xcf, 0xf8, 0xfd, 0xd9, 0xf7, 0x33, - 0x25, 0xee, 0x81, 0x93, 0x90, 0x63, 0xb9, 0xb4, 0xee, 0x4c, 0x58, 0xf1, - 0xea, 0xda, 0xb5, 0x1b, 0xc3, 0xd2, 0xef, 0xda, 0xb5, 0x03, 0xdb, 0xfe, - 0x6d, 0xeb, 0xa1, 0x4a, 0xe9, 0xb6, 0x41, 0xfc, 0xec, 0xb6, 0x7f, 0x58, - 0xe9, 0x2a, 0xd0, 0x30, 0x0e, 0x91, 0x69, 0xc3, 0x50, 0xe5, 0x06, 0xdf, - 0xb2, 0xfd, 0x18, 0x0e, 0x20, 0xa1, 0x34, 0x74, 0x0a, 0x6f, 0xa8, 0xc2, - 0x9b, 0xf0, 0x87, 0x1f, 0xcd, 0xc4, 0x8e, 0x20, 0xdc, 0x6e, 0x80, 0x46, - 0x2c, 0x56, 0x66, 0x68, 0x11, 0x70, 0x4d, 0x7b, 0xf0, 0x2a, 0x3c, 0x43, - 0xe7, 0x0a, 0x2e, 0xfc, 0x6e, 0xcb, 0xb9, 0xa6, 0xe8, 0xdb, 0x50, 0x49, - 0x4d, 0xb9, 0x95, 0xfe, 0xff, 0xce, 0x38, 0x8e, 0xff, 0x63, 0xca, 0x71, - 0x8c, 0x73, 0x8e, 0x63, 0x9f, 0x22, 0x51, 0x40, 0x7d, 0x77, 0x8c, 0xec, - 0x50, 0x4e, 0xbb, 0xe5, 0xe6, 0x00, 0xd6, 0x22, 0x50, 0x7b, 0xd8, 0xc7, - 0x8d, 0xbd, 0x63, 0x98, 0x6b, 0x40, 0xb3, 0xf7, 0x90, 0xa3, 0xe4, 0x7a, - 0x96, 0xee, 0xcb, 0xf1, 0x17, 0x6b, 0x8f, 0x6b, 0xbd, 0x1f, 0x63, 0x90, - 0x7c, 0x1a, 0x43, 0x14, 0x85, 0xb6, 0x0f, 0x67, 0x13, 0x5d, 0x4b, 0x4a, - 0x60, 0x5b, 0xb7, 0xcd, 0x71, 0x8b, 0x96, 0xac, 0xda, 0xc2, 0xde, 0x67, - 0x0e, 0xc7, 0x7f, 0xa5, 0x1f, 0xf6, 0x1d, 0x51, 0xb1, 0x41, 0xab, 0xfd, - 0x6e, 0x48, 0x06, 0x4f, 0x9c, 0xc1, 0x23, 0x78, 0xce, 0x01, 0xb9, 0x97, - 0x35, 0x4c, 0x89, 0x8e, 0x61, 0x93, 0x1f, 0xf8, 0x25, 0x7a, 0xf6, 0x4b, - 0x79, 0x5d, 0x67, 0x38, 0x70, 0x4a, 0x2d, 0x55, 0x67, 0xb4, 0xe8, 0x5a, - 0x0f, 0x5e, 0x81, 0x3e, 0x8e, 0x57, 0x83, 0xef, 0xf9, 0xd6, 0x14, 0x7a, - 0x0f, 0x58, 0x9d, 0xfc, 0xa7, 0xfa, 0xee, 0xce, 0x8f, 0x3e, 0xa9, 0x06, - 0x59, 0xd3, 0x36, 0xd0, 0xfa, 0xdd, 0x07, 0x5f, 0x71, 0x7d, 0x46, 0x15, - 0xbc, 0x62, 0x26, 0xe6, 0xfd, 0xd7, 0x8f, 0xef, 0xf8, 0x71, 0xbf, 0x7f, - 0x78, 0x34, 0x74, 0xf3, 0x47, 0x91, 0xa2, 0x38, 0xd5, 0x69, 0xc4, 0xf4, - 0xc4, 0x9b, 0x8b, 0x96, 0x46, 0x70, 0xad, 0xb5, 0x91, 0xc9, 0x06, 0xce, - 0x27, 0x0a, 0x40, 0x12, 0x19, 0xec, 0xf9, 0x7c, 0xae, 0xe9, 0xc4, 0xae, - 0x10, 0x1b, 0xd8, 0xb1, 0x46, 0x39, 0xdb, 0x16, 0xfc, 0xa9, 0xa3, 0x53, - 0x23, 0xe6, 0xc0, 0x19, 0x0e, 0xb6, 0x66, 0xc7, 0x92, 0xe0, 0x03, 0xea, - 0xe7, 0xbc, 0xf4, 0xe9, 0xe8, 0xc0, 0x29, 0xbf, 0xcf, 0x76, 0x96, 0x29, - 0x01, 0xee, 0x43, 0x8a, 0xcc, 0xb7, 0x52, 0xb3, 0xc1, 0xf9, 0x37, 0xdf, - 0x7c, 0x16, 0xf7, 0xfc, 0xfc, 0xbd, 0x27, 0x56, 0x6c, 0x6e, 0x50, 0x55, - 0x3a, 0xb0, 0xa3, 0x10, 0x67, 0xac, 0x82, 0x36, 0x3c, 0x46, 0x4f, 0x8f, - 0x73, 0x8c, 0xe3, 0x71, 0x7e, 0xc4, 0xb0, 0x1f, 0x1a, 0x9d, 0x71, 0x82, - 0x87, 0x4b, 0x9c, 0x5b, 0x4c, 0x9a, 0xc4, 0xd0, 0x78, 0xe1, 0xe5, 0x68, - 0x08, 0x0a, 0x1c, 0xfc, 0xc3, 0xdd, 0xb9, 0xbf, 0x58, 0x7b, 0x97, 0xa2, - 0x97, 0x3e, 0xb5, 0x07, 0x8a, 0xa7, 0x41, 0x97, 0xfe, 0xeb, 0x9f, 0xb6, - 0x39, 0x00, 0x3c, 0x2c, 0xa6, 0x9b, 0x86, 0x84, 0x80, 0x3d, 0x29, 0x56, - 0xb5, 0x40, 0xd4, 0xcb, 0x1f, 0x23, 0xe7, 0xd0, 0x32, 0xf9, 0x3a, 0x30, - 0x7e, 0x79, 0x0c, 0xcb, 0xe8, 0xc6, 0x36, 0xef, 0x96, 0xee, 0x44, 0x17, - 0x32, 0x4e, 0x88, 0x38, 0xea, 0x1e, 0xc5, 0x1e, 0x37, 0xf4, 0x9a, 0xb4, - 0xbd, 0xfa, 0xa2, 0x2f, 0xf6, 0xb9, 0x6f, 0x51, 0x29, 0xc8, 0x6d, 0x49, - 0x77, 0xb0, 0x3a, 0xf3, 0xea, 0xdc, 0x3e, 0x0f, 0x98, 0x33, 0x26, 0x30, - 0x9a, 0x14, 0x13, 0x71, 0x9c, 0x03, 0x0a, 0x99, 0x3b, 0x9d, 0x0b, 0x6f, - 0x18, 0x17, 0x82, 0x13, 0xfa, 0x3a, 0x81, 0x6d, 0xe4, 0x57, 0x5c, 0x80, - 0x6f, 0x7a, 0xfe, 0xd4, 0xe7, 0xca, 0x67, 0x2b, 0x15, 0xac, 0x25, 0x52, - 0xf5, 0x9c, 0x7a, 0x91, 0x0b, 0x33, 0x47, 0x9f, 0x3c, 0x74, 0xaa, 0xdf, - 0xb4, 0xf7, 0xe2, 0x24, 0x3b, 0xe7, 0x40, 0xce, 0x56, 0xe2, 0x9d, 0x01, - 0x2c, 0x83, 0xdd, 0x38, 0xb9, 0xaf, 0x40, 0xcf, 0xeb, 0x08, 0x23, 0xa4, - 0xc5, 0x4d, 0xe8, 0x31, 0x32, 0xe7, 0xff, 0x63, 0xeb, 0x5a, 0xd7, 0x5e, - 0x75, 0x7d, 0xe5, 0xf7, 0x75, 0x97, 0xb6, 0xa5, 0xd6, 0xf5, 0xaa, 0xf4, - 0x87, 0xda, 0xb7, 0xf6, 0xea, 0x77, 0x66, 0x26, 0x01, 0xba, 0xfe, 0xfb, - 0x79, 0x5a, 0x32, 0x41, 0x4e, 0x22, 0x67, 0x42, 0x70, 0x46, 0x29, 0x98, - 0xdc, 0xfb, 0xb5, 0xeb, 0x18, 0x78, 0x32, 0x02, 0xa6, 0xcb, 0x2e, 0xe3, - 0x2c, 0x7c, 0x9c, 0x71, 0x00, 0x23, 0xf9, 0x90, 0x57, 0xed, 0x32, 0x0c, - 0x15, 0xa5, 0x46, 0xe7, 0x28, 0x00, 0x5c, 0xb2, 0xfa, 0xd5, 0xed, 0xc2, - 0xd8, 0x48, 0x69, 0x50, 0xc0, 0x5b, 0x4a, 0x4e, 0x95, 0x86, 0xcd, 0xd3, - 0xf2, 0x35, 0x15, 0x17, 0xfb, 0xe9, 0xd8, 0xaf, 0xc5, 0xae, 0xd7, 0xf7, - 0xd6, 0xcb, 0xeb, 0x7b, 0xeb, 0xe5, 0x95, 0x29, 0xc3, 0xf8, 0x62, 0xaf, - 0xfe, 0xe5, 0x4c, 0x16, 0x9d, 0xc3, 0xf9, 0x68, 0xf0, 0x15, 0x35, 0xf0, - 0x95, 0xdb, 0xc8, 0x0b, 0x38, 0x39, 0x6d, 0x8f, 0xc3, 0x8f, 0x2f, 0x81, - 0xe9, 0x73, 0x38, 0x57, 0x3d, 0x1e, 0xea, 0xfa, 0x01, 0x5a, 0x57, 0x6f, - 0x5c, 0x4c, 0x6d, 0x20, 0x7e, 0xfd, 0xcb, 0xb1, 0x8b, 0x6b, 0x68, 0x33, - 0x70, 0x9d, 0x07, 0x5a, 0xdf, 0xa0, 0x62, 0xd0, 0xa8, 0x8b, 0xbd, 0xff, - 0x46, 0x1b, 0xff, 0x3b, 0x53, 0xe6, 0xfa, 0x8d, 0xfd, 0xcc, 0xc7, 0xb0, - 0xa9, 0x09, 0x7e, 0x4f, 0x38, 0x8f, 0x79, 0x63, 0x31, 0x7c, 0xa3, 0x64, - 0x33, 0x3d, 0x40, 0x2d, 0xff, 0xdf, 0x7b, 0x89, 0x84, 0x02, 0xae, 0xa2, - 0x93, 0xd3, 0x3c, 0x2c, 0xcf, 0x47, 0xda, 0x75, 0xa6, 0x57, 0x36, 0x5d, - 0x88, 0xd0, 0xc3, 0xe8, 0x57, 0xbf, 0x89, 0x1d, 0xe7, 0xe3, 0xaa, 0x11, - 0x0e, 0xb8, 0xd2, 0xd6, 0xfb, 0xc0, 0x56, 0xfb, 0x1a, 0x37, 0xbc, 0x7d, - 0x70, 0x53, 0x70, 0xfb, 0x82, 0x77, 0x1b, 0xf2, 0x52, 0x6b, 0xde, 0x6d, - 0xfc, 0x73, 0x7b, 0xe0, 0xd4, 0xc3, 0x03, 0xc5, 0xe3, 0x01, 0x19, 0xc3, - 0x81, 0x74, 0x11, 0x21, 0x37, 0xfd, 0x58, 0x46, 0x3e, 0xf2, 0x65, 0x82, - 0x89, 0xe1, 0xec, 0x83, 0x97, 0xde, 0x1a, 0xd9, 0x69, 0x65, 0x59, 0x86, - 0x5b, 0x88, 0x06, 0x12, 0xe8, 0xb3, 0xb8, 0x3d, 0x4e, 0x86, 0x63, 0x4f, - 0x27, 0xdc, 0x2f, 0x9f, 0x48, 0xd1, 0xe0, 0x12, 0xcc, 0xd4, 0x14, 0xe4, - 0xe8, 0x24, 0xc8, 0x73, 0x1b, 0xcd, 0x88, 0x8d, 0x62, 0xe3, 0xdc, 0x52, - 0xd1, 0x1e, 0xe8, 0xd3, 0xbb, 0xc8, 0xa0, 0x3c, 0x16, 0x51, 0x81, 0xa4, - 0xf2, 0x57, 0xc6, 0x74, 0x7d, 0x9c, 0xb3, 0xdc, 0x5e, 0x33, 0x0f, 0xff, - 0x0b, 0x4d, 0xd7, 0x6a, 0x39, 0x5d, 0x0f, 0xc6, 0xe1, 0xea, 0x3d, 0x81, - 0x5c, 0x57, 0xac, 0xc1, 0x5b, 0x12, 0xc9, 0xd7, 0x87, 0x9f, 0x53, 0x1d, - 0x82, 0x67, 0xfa, 0x71, 0xc3, 0xcb, 0xc4, 0xa4, 0x8f, 0x34, 0xfc, 0xc8, - 0x2b, 0x61, 0x3d, 0x08, 0x0a, 0x4e, 0x67, 0xfb, 0x1d, 0x35, 0xd9, 0xbe, - 0xca, 0xf3, 0xec, 0x63, 0xe5, 0xe4, 0x92, 0xbb, 0xe9, 0x93, 0xdf, 0x9c, - 0x68, 0x20, 0x0e, 0xca, 0x02, 0x5a, 0xba, 0x7f, 0x14, 0x00, 0xdf, 0x7b, - 0xa6, 0x74, 0x95, 0xa8, 0x5e, 0x42, 0xc8, 0x83, 0x75, 0x46, 0x69, 0x11, - 0xb3, 0x05, 0xac, 0xb3, 0xe8, 0xc6, 0x9e, 0x62, 0x0a, 0x09, 0xf7, 0x35, - 0xa7, 0x41, 0xd7, 0xb1, 0x12, 0xf8, 0x03, 0x78, 0x5b, 0x2a, 0xda, 0x03, - 0x29, 0x8f, 0x67, 0x6d, 0x62, 0x3a, 0x90, 0x87, 0xb3, 0x6d, 0x97, 0x89, - 0x73, 0xa7, 0x67, 0xfb, 0xe4, 0x86, 0xab, 0x63, 0xbd, 0xe9, 0x7c, 0x7e, - 0xbe, 0x7c, 0x7d, 0xaa, 0xaf, 0x4f, 0xe7, 0xeb, 0x23, 0x5f, 0x4c, 0x8e, - 0xb6, 0x53, 0x1b, 0xf2, 0x54, 0xfa, 0xaa, 0xf4, 0xe4, 0x95, 0x8d, 0x94, - 0x27, 0xfa, 0xcf, 0x99, 0x5b, 0x8f, 0xf5, 0xa0, 0x7d, 0xef, 0x24, 0xa3, - 0xaa, 0x88, 0x52, 0x3f, 0x07, 0x71, 0x2b, 0x5d, 0x7e, 0x8a, 0x19, 0x28, - 0xab, 0x64, 0xac, 0x54, 0xd4, 0x60, 0xe0, 0x39, 0x6c, 0x4a, 0xdc, 0x73, - 0x38, 0x54, 0x0f, 0x9e, 0xe9, 0x16, 0x9f, 0xef, 0xa9, 0xd3, 0x58, 0x13, - 0xf5, 0xd0, 0x80, 0xf0, 0x10, 0x7b, 0x00, 0x7f, 0x57, 0xe0, 0x5c, 0x53, - 0x1d, 0x5c, 0x69, 0xcf, 0xa2, 0xa2, 0x4f, 0x31, 0x28, 0x14, 0x70, 0x07, - 0xb9, 0x16, 0x4d, 0xc3, 0x7b, 0x5f, 0x18, 0x9f, 0x0f, 0xeb, 0xd0, 0x1d, - 0x45, 0x36, 0x3f, 0x27, 0xc5, 0xa2, 0xe3, 0xdb, 0x40, 0xb9, 0x7b, 0xc8, - 0x55, 0xbe, 0x17, 0x63, 0x28, 0x5e, 0xf2, 0x8b, 0x7f, 0x72, 0x3f, 0x20, - 0x4c, 0x90, 0x1d, 0x61, 0x28, 0xe5, 0x5e, 0x95, 0xdc, 0xed, 0xfa, 0x98, - 0xdc, 0xc2, 0x7b, 0x4c, 0x03, 0xb8, 0x21, 0x93, 0xc0, 0xba, 0x9c, 0x78, - 0xb8, 0x7b, 0x9b, 0x01, 0x10, 0x56, 0x69, 0x19, 0x1c, 0x14, 0x51, 0x36, - 0x45, 0x00, 0xbc, 0x50, 0x50, 0xef, 0xb4, 0xe1, 0x68, 0x3d, 0x11, 0xc4, - 0x28, 0x86, 0xa2, 0xbc, 0xe7, 0x42, 0x0d, 0x6f, 0x56, 0x0b, 0x26, 0x90, - 0x87, 0x0e, 0x0d, 0x2e, 0x22, 0x52, 0x7e, 0xe1, 0x58, 0x1f, 0x07, 0x87, - 0x58, 0xa3, 0xd2, 0xec, 0x85, 0x5b, 0xde, 0x00, 0xd3, 0xc5, 0x41, 0xcd, - 0xd0, 0x8f, 0x17, 0x87, 0x4f, 0xa8, 0xc1, 0x20, 0x9e, 0x9d, 0xb2, 0xcb, - 0x08, 0x4b, 0x49, 0x21, 0x00, 0xed, 0x53, 0x5f, 0xb0, 0xc5, 0x47, 0x81, - 0xfe, 0xf8, 0x91, 0x63, 0xec, 0x81, 0x47, 0xc2, 0x2e, 0x36, 0xfc, 0x44, - 0x4d, 0xbc, 0xf0, 0x1c, 0x83, 0x11, 0x1c, 0xa9, 0x9b, 0x2e, 0xd4, 0x4f, - 0x04, 0x9a, 0xa9, 0x86, 0xc4, 0xd0, 0x71, 0xd5, 0xbe, 0x36, 0x04, 0x4d, - 0xf2, 0x8d, 0xed, 0x22, 0x0e, 0x4b, 0x38, 0x51, 0xc3, 0xab, 0x63, 0x01, - 0x04, 0xd0, 0xb9, 0xa0, 0xf7, 0xe0, 0xfe, 0xcf, 0x64, 0x53, 0x97, 0x4d, - 0x89, 0x74, 0x51, 0xff, 0x14, 0x30, 0xdf, 0xa6, 0xfb, 0x7c, 0xf0, 0x9a, - 0xd7, 0x78, 0xa3, 0xb0, 0xb7, 0x5e, 0x6c, 0xb5, 0x7a, 0x54, 0xdc, 0xe2, - 0x9f, 0xe7, 0xbd, 0x7b, 0x1f, 0xe6, 0x01, 0xad, 0x37, 0x25, 0x01, 0xc5, - 0x73, 0x69, 0xed, 0x7e, 0xf0, 0x7b, 0xc3, 0x9f, 0xef, 0x67, 0xf2, 0x0f, - 0x3d, 0xc4, 0x5e, 0x98, 0xc4, 0x2c, 0x81, 0xf6, 0xb0, 0x5b, 0x86, 0xbd, - 0xa1, 0xce, 0x32, 0x3e, 0x6b, 0xb0, 0x95, 0xa9, 0x01, 0xaa, 0xd5, 0xbb, - 0xfe, 0x70, 0x3b, 0x0c, 0xf4, 0x74, 0xc2, 0x5b, 0x4f, 0x00, 0xd9, 0x93, - 0x19, 0x51, 0xb8, 0x3f, 0x7c, 0x3e, 0x47, 0xc7, 0x71, 0xcd, 0x51, 0xa5, - 0x71, 0x03, 0x20, 0x4d, 0xbf, 0xd2, 0x0e, 0xd8, 0x95, 0xb6, 0x19, 0x2c, - 0x39, 0x22, 0xa7, 0xab, 0x7d, 0x90, 0x19, 0x4d, 0x7e, 0x15, 0x58, 0x9a, - 0x5c, 0x29, 0x5a, 0x80, 0xa9, 0xf6, 0x99, 0x9d, 0x8e, 0xb4, 0x5b, 0x2c, - 0xe5, 0x8a, 0xaa, 0xee, 0x5d, 0x77, 0x7d, 0xcb, 0x13, 0x07, 0x88, 0x07, - 0x2f, 0x23, 0xdf, 0xfa, 0x4f, 0xce, 0x79, 0x52, 0x7d, 0x81, 0x52, 0x0c, - 0xea, 0xb9, 0xb8, 0x4d, 0x38, 0xb5, 0x1f, 0xb9, 0x24, 0xbc, 0x11, 0x3d, - 0xd5, 0x62, 0xdd, 0x6e, 0xd3, 0xcf, 0x30, 0x11, 0xa8, 0x3b, 0xa0, 0x16, - 0xc0, 0x5b, 0x46, 0x6f, 0x8c, 0x37, 0x44, 0xcc, 0x37, 0x32, 0x2e, 0x1d, - 0x36, 0xdd, 0x68, 0x75, 0x2e, 0x2a, 0x5a, 0xb7, 0x73, 0x55, 0x31, 0x48, - 0xde, 0xac, 0xa6, 0xf9, 0xa6, 0x2c, 0xa1, 0x98, 0x16, 0x4f, 0x00, 0x53, - 0xd8, 0x15, 0xa5, 0x93, 0x69, 0xe3, 0x36, 0xee, 0x54, 0xfb, 0xdb, 0x24, - 0x03, 0x63, 0x79, 0x92, 0x56, 0x44, 0xb0, 0x02, 0x46, 0x01, 0x6a, 0x21, - 0x7d, 0xc8, 0xea, 0x6b, 0xcf, 0x8a, 0x0e, 0xcb, 0x05, 0xb4, 0xd9, 0x69, - 0xc8, 0xfd, 0x1e, 0xcd, 0x39, 0xbb, 0x02, 0x0c, 0x26, 0xd8, 0xbb, 0x8a, - 0x43, 0x77, 0xc1, 0x72, 0x9c, 0xab, 0x9d, 0xb3, 0xd1, 0x5d, 0xd0, 0x6e, - 0x41, 0x7a, 0x4f, 0x5c, 0x3f, 0x31, 0x84, 0x95, 0xf5, 0xe8, 0xf3, 0x85, - 0x8b, 0x20, 0xf3, 0x97, 0x55, 0xee, 0xec, 0xac, 0x7d, 0x65, 0x57, 0x8d, - 0xf3, 0xdc, 0x2e, 0xbe, 0x8e, 0x49, 0x42, 0x93, 0x64, 0xff, 0xf3, 0x3f, - 0x52, 0xed, 0x1d, 0xcf, 0x92, 0x71, 0xbf, 0x63, 0xbf, 0x93, 0x6d, 0x85, - 0xc1, 0x5b, 0x0d, 0x00, 0xd0, 0xc7, 0xbe, 0xc6, 0xcd, 0x47, 0x7d, 0x50, - 0xa7, 0x9f, 0x81, 0x63, 0xfe, 0xe9, 0x7c, 0xed, 0x7c, 0xee, 0xf7, 0xc3, - 0x3b, 0x6b, 0xa0, 0x18, 0xa3, 0x8b, 0xe9, 0x71, 0xb8, 0xad, 0xeb, 0x3b, - 0xce, 0xcd, 0xbd, 0xab, 0x88, 0xb1, 0x93, 0xa6, 0x72, 0xce, 0xbd, 0xd4, - 0x14, 0x8e, 0x38, 0xc7, 0x2f, 0x8a, 0x07, 0x6d, 0x70, 0x35, 0x62, 0x32, - 0xcf, 0x62, 0x0a, 0x54, 0xd3, 0x33, 0xfa, 0xbc, 0x9e, 0xa0, 0xa5, 0x41, - 0x5c, 0x4d, 0x03, 0xd9, 0x7b, 0x00, 0x26, 0x06, 0x88, 0x59, 0x28, 0xb5, - 0x10, 0xd3, 0x38, 0xed, 0x32, 0xa9, 0x42, 0x3a, 0xd0, 0xd6, 0xd0, 0x52, - 0x61, 0x2d, 0x76, 0x63, 0x15, 0xb3, 0x03, 0x6c, 0xad, 0xd9, 0xd8, 0x2d, - 0x38, 0x83, 0xa1, 0xda, 0x10, 0x22, 0xd5, 0xb9, 0x71, 0x3e, 0xaf, 0x3e, - 0x3d, 0x06, 0x66, 0xb5, 0x1f, 0xd7, 0x76, 0x79, 0x19, 0x39, 0xed, 0xb6, - 0x11, 0x91, 0x7a, 0xf3, 0x40, 0xe9, 0x58, 0xa5, 0xb8, 0x6e, 0x60, 0x39, - 0xac, 0x59, 0x1b, 0x07, 0x17, 0xa7, 0xc7, 0x89, 0xd3, 0x93, 0x15, 0xe8, - 0x25, 0xea, 0x59, 0x46, 0x22, 0x3f, 0xcf, 0xba, 0x6a, 0x30, 0x41, 0x1b, - 0x6a, 0xdc, 0x1f, 0xa5, 0x27, 0x25, 0xac, 0xac, 0x2f, 0x84, 0x5e, 0xda, - 0xf3, 0x3a, 0xad, 0x61, 0x87, 0xd5, 0xac, 0x93, 0xfb, 0xc8, 0x28, 0xce, - 0x3f, 0x89, 0x46, 0xa1, 0xb9, 0x2b, 0xb4, 0x9f, 0x1f, 0xcc, 0xac, 0xa6, - 0x9f, 0x9d, 0x4d, 0x32, 0x5c, 0xa1, 0x82, 0xc5, 0xea, 0x93, 0x31, 0x55, - 0x63, 0x5b, 0x65, 0xf8, 0x49, 0xe6, 0x6e, 0xd5, 0x45, 0x4c, 0xfd, 0x92, - 0xe0, 0xd4, 0xb7, 0x03, 0x55, 0xbf, 0x2a, 0x03, 0x73, 0x67, 0x51, 0x0b, - 0xb2, 0xe3, 0xe2, 0x7e, 0x22, 0x82, 0xba, 0x96, 0x07, 0x99, 0x79, 0x16, - 0xb9, 0x19, 0xca, 0x0a, 0x35, 0x46, 0x73, 0xa8, 0xfc, 0x8a, 0xbb, 0x12, - 0x1d, 0x45, 0xb5, 0x9a, 0xf9, 0x3e, 0x33, 0x83, 0xad, 0xeb, 0xa2, 0x53, - 0x4c, 0x72, 0x0d, 0xbc, 0xd4, 0xec, 0x71, 0x08, 0x61, 0xd3, 0x59, 0x29, - 0x06, 0x53, 0xc6, 0x2f, 0xb1, 0x73, 0x12, 0xc8, 0xe7, 0x8b, 0x3a, 0x0b, - 0x06, 0xf3, 0x3a, 0x3c, 0x95, 0xaf, 0x8b, 0x6e, 0x16, 0xb8, 0x85, 0xe4, - 0x05, 0x95, 0x43, 0xe5, 0xf7, 0xd9, 0xfa, 0x57, 0x0d, 0x62, 0x2b, 0xe0, - 0x39, 0xe5, 0x61, 0x65, 0xa6, 0x54, 0xcb, 0x4b, 0x5a, 0x3f, 0xa9, 0x73, - 0x8d, 0x43, 0x98, 0x92, 0x31, 0x76, 0x8b, 0xee, 0xab, 0xc9, 0x02, 0xec, - 0xfc, 0xc5, 0x75, 0x0f, 0xff, 0x8d, 0x9c, 0x6b, 0xa5, 0x90, 0x33, 0xa0, - 0xd5, 0x74, 0xab, 0xcd, 0x15, 0xd7, 0xf2, 0x1e, 0xdd, 0xf7, 0x5b, 0xb0, - 0xce, 0xc6, 0xc3, 0x44, 0x84, 0xcd, 0xd9, 0xd1, 0x35, 0x45, 0x8b, 0x67, - 0x86, 0xe7, 0x46, 0xd8, 0xa2, 0xa0, 0x06, 0xf5, 0x3c, 0x21, 0xd4, 0x7b, - 0x3e, 0x39, 0x44, 0x5a, 0x7e, 0x59, 0x8f, 0x11, 0xe8, 0x4a, 0x01, 0x49, - 0x76, 0xd9, 0x2b, 0x64, 0x30, 0x60, 0x6a, 0x20, 0xcb, 0x25, 0x3f, 0x98, - 0x92, 0x03, 0xc6, 0x35, 0x16, 0xa2, 0xe3, 0x85, 0x25, 0x75, 0x1d, 0xc5, - 0x71, 0x00, 0xb0, 0x8e, 0xf2, 0x33, 0x46, 0x79, 0xe1, 0xc5, 0x16, 0x20, - 0x99, 0x26, 0xbb, 0x14, 0x88, 0x00, 0xe5, 0x96, 0xc9, 0xab, 0xc6, 0x0e, - 0xeb, 0xa2, 0x8e, 0x75, 0xf5, 0x08, 0x8d, 0xf0, 0x26, 0x1e, 0x83, 0x19, - 0xf5, 0x80, 0x3e, 0x33, 0x8e, 0x4d, 0xf0, 0xc0, 0xaf, 0x1e, 0x6c, 0xc3, - 0x41, 0xc7, 0xdc, 0x71, 0xa4, 0x15, 0x82, 0x30, 0xf7, 0x1c, 0x25, 0x67, - 0x66, 0x71, 0x4e, 0x9d, 0xb4, 0xf0, 0xc4, 0x3e, 0x85, 0x65, 0x2d, 0xd7, - 0x3e, 0x2e, 0x63, 0xc8, 0x51, 0x1d, 0xe0, 0x43, 0x5a, 0x21, 0x63, 0xf7, - 0x94, 0x7d, 0xb7, 0x9a, 0x20, 0x0a, 0x55, 0x7e, 0xfa, 0x28, 0x9c, 0xaa, - 0xff, 0x45, 0x73, 0xf7, 0xb0, 0xf8, 0xb3, 0xa2, 0xbe, 0x52, 0x8a, 0xd0, - 0x40, 0x95, 0xf9, 0x19, 0xd7, 0xfd, 0xa9, 0x9d, 0xce, 0x1b, 0xe4, 0x47, - 0x56, 0xa2, 0x25, 0xec, 0xde, 0xec, 0xe7, 0xf2, 0x5b, 0x65, 0x26, 0x0a, - 0xca, 0x13, 0x87, 0x51, 0x85, 0x1e, 0xaa, 0x1f, 0xd1, 0xab, 0x6a, 0x68, - 0x59, 0x41, 0xd3, 0x3b, 0x57, 0x6d, 0xbe, 0x1c, 0x92, 0xe3, 0xb0, 0x73, - 0x28, 0x5b, 0xff, 0xc0, 0xc2, 0xa4, 0x70, 0xec, 0x4a, 0x9b, 0xcc, 0x23, - 0xd9, 0x00, 0xdb, 0x18, 0x81, 0xa1, 0xb1, 0x53, 0xce, 0x3f, 0x1f, 0xc8, - 0x70, 0x77, 0x21, 0x88, 0x09, 0x95, 0xb3, 0x99, 0x43, 0x0a, 0x47, 0xd5, - 0x11, 0x70, 0x6d, 0xf5, 0xc3, 0xa2, 0xb6, 0xfc, 0x4f, 0xbe, 0x81, 0xa5, - 0xfe, 0x50, 0x36, 0xb8, 0x5a, 0x39, 0x82, 0xa3, 0x40, 0x63, 0x23, 0x60, - 0x1e, 0x92, 0x28, 0xd4, 0x94, 0x1f, 0x72, 0x67, 0x23, 0xb2, 0x0a, 0xfd, - 0xe9, 0x32, 0x04, 0x65, 0xeb, 0x47, 0xb4, 0x57, 0x50, 0x1d, 0xf9, 0x60, - 0xc6, 0xf1, 0xe6, 0x2e, 0x56, 0xa7, 0x2d, 0x0f, 0xa4, 0xed, 0x4e, 0x00, - 0x0b, 0x88, 0x00, 0x91, 0x4a, 0x08, 0x07, 0x2d, 0x9a, 0x53, 0xe2, 0x96, - 0x55, 0xcf, 0xaa, 0x95, 0xf7, 0x1f, 0x01, 0x65, 0x8e, 0xeb, 0x9e, 0x9a, - 0xec, 0xf8, 0xe0, 0x10, 0x93, 0x6a, 0x14, 0x62, 0xc5, 0x84, 0x35, 0x5c, - 0x1f, 0x54, 0x3e, 0xb7, 0x2c, 0xd3, 0x4f, 0xc4, 0x57, 0x78, 0x25, 0xe6, - 0x8d, 0x75, 0x06, 0xb8, 0x76, 0xec, 0x20, 0x57, 0xc0, 0xf4, 0xec, 0x59, - 0xaf, 0xb7, 0x9f, 0x9c, 0xf5, 0x3c, 0x7d, 0x71, 0xe7, 0x79, 0xa2, 0xb8, - 0x20, 0xe9, 0x88, 0xbf, 0xd8, 0x08, 0xd2, 0x1a, 0xb5, 0x97, 0x86, 0x7e, - 0xe0, 0x6e, 0x98, 0x29, 0x48, 0xd7, 0x0f, 0x79, 0x2c, 0xe4, 0xd5, 0xfd, - 0x09, 0xda, 0x74, 0xe8, 0x95, 0x1a, 0xf2, 0x4a, 0x23, 0x4e, 0x2d, 0x11, - 0x70, 0x67, 0x9d, 0x4b, 0x05, 0xca, 0x7a, 0x61, 0x1f, 0x90, 0x8b, 0x09, - 0x6f, 0xa5, 0x79, 0x83, 0x92, 0x5d, 0xa0, 0xba, 0x00, 0x3c, 0x95, 0x16, - 0x99, 0x1e, 0xbd, 0xd9, 0x7a, 0x51, 0x3e, 0x78, 0x2a, 0x0f, 0xae, 0x6d, - 0xd8, 0x5c, 0x9b, 0xc4, 0x86, 0x0f, 0xb5, 0x4f, 0x34, 0x06, 0xb9, 0x0a, - 0x55, 0x1a, 0x53, 0x59, 0x6f, 0x28, 0x67, 0x85, 0x1e, 0xf7, 0xfb, 0xa0, - 0x93, 0x47, 0x53, 0x09, 0xbd, 0x52, 0xfc, 0xa8, 0xdd, 0x2a, 0x0c, 0x77, - 0x2c, 0xb5, 0xbc, 0x2a, 0x5c, 0x04, 0x0e, 0x2e, 0x1a, 0x1b, 0xba, 0xe2, - 0x2e, 0x65, 0xd5, 0x4b, 0x30, 0x99, 0x73, 0x9f, 0x8d, 0x97, 0x46, 0xa3, - 0x4d, 0x88, 0x21, 0xca, 0x36, 0xdc, 0x5e, 0x50, 0x4a, 0x30, 0xa6, 0x2f, - 0xa6, 0xb5, 0x3a, 0xdb, 0x70, 0xbf, 0x77, 0x07, 0x48, 0x82, 0x57, 0xae, - 0x83, 0x99, 0xea, 0xfe, 0xa7, 0x58, 0x4e, 0xdb, 0x53, 0xc7, 0x75, 0x0f, - 0xfb, 0x03, 0x59, 0xcd, 0xa2, 0xbe, 0x06, 0x8e, 0x0e, 0xf5, 0xaf, 0x28, - 0xbe, 0xf6, 0x3a, 0xb2, 0xa8, 0xae, 0xe7, 0x39, 0xff, 0x7e, 0x3d, 0xa5, - 0x45, 0xc4, 0xbd, 0xae, 0xc7, 0x1c, 0xb9, 0x02, 0x5c, 0xbd, 0x59, 0x51, - 0x1f, 0x4a, 0x75, 0xf6, 0xe4, 0xad, 0xc3, 0xee, 0x4e, 0x4c, 0x5d, 0x7a, - 0xae, 0x36, 0x9d, 0x5f, 0xeb, 0x1f, 0x5a, 0xfa, 0xc1, 0xbe, 0x3c, 0xbf, - 0x89, 0x3d, 0x1c, 0x7b, 0xe9, 0xea, 0xc5, 0x3f, 0xa4, 0x81, 0x4e, 0xce, - 0xa7, 0xb2, 0xf5, 0x91, 0x5e, 0xb8, 0xf4, 0x82, 0x8f, 0x1d, 0x9f, 0xe5, - 0xce, 0x86, 0x8c, 0xcb, 0x65, 0x3e, 0x1d, 0xe7, 0x6b, 0x97, 0xf1, 0x5b, - 0xbc, 0xc3, 0xd6, 0xad, 0x23, 0x1b, 0xfb, 0xca, 0xbf, 0x9e, 0xc0, 0x97, - 0xb4, 0xe1, 0x4c, 0xbc, 0x17, 0x27, 0x92, 0x51, 0xf5, 0x8c, 0x18, 0x74, - 0x21, 0x79, 0x47, 0xfe, 0x2e, 0x97, 0xa3, 0xd8, 0x24, 0xa4, 0xba, 0x41, - 0x4d, 0xfc, 0x62, 0xe8, 0xe8, 0x4a, 0x43, 0xad, 0x46, 0x15, 0x46, 0x01, - 0x2a, 0xb7, 0x8a, 0x6a, 0x9d, 0xdd, 0xa0, 0xbd, 0xa0, 0x63, 0xca, 0xda, - 0x7f, 0x44, 0xf0, 0xee, 0xc7, 0xd0, 0xf4, 0xcf, 0x93, 0x88, 0xda, 0xf0, - 0xb3, 0x9b, 0x27, 0x04, 0xdf, 0x39, 0xe6, 0x45, 0xe2, 0x0a, 0x67, 0xd2, - 0x98, 0x42, 0xc0, 0x6b, 0x37, 0x99, 0x6e, 0x63, 0xb4, 0x59, 0x74, 0x61, - 0xc8, 0xc6, 0x63, 0x14, 0x53, 0x34, 0xd7, 0x73, 0x36, 0x75, 0xd0, 0xe3, - 0x8a, 0xb1, 0xfc, 0x56, 0x75, 0x02, 0x10, 0xb6, 0x5a, 0xc0, 0x8b, 0x2d, - 0xde, 0x42, 0x39, 0xf2, 0x6f, 0x96, 0x46, 0x4b, 0x36, 0x76, 0x32, 0x2f, - 0x79, 0x3e, 0x94, 0x8a, 0x26, 0x5d, 0x5f, 0x19, 0x25, 0xb8, 0x3b, 0x99, - 0x0f, 0x6e, 0xb9, 0x4f, 0x91, 0xef, 0xc4, 0x35, 0xc0, 0x85, 0xd7, 0x8c, - 0x0b, 0x2e, 0x2e, 0x05, 0x24, 0x26, 0xdf, 0xba, 0xf1, 0x47, 0xd8, 0x78, - 0x76, 0xf0, 0x08, 0x7d, 0x0d, 0x03, 0x12, 0xc6, 0x5d, 0x1b, 0xe0, 0x16, - 0x5d, 0x4d, 0x09, 0x9b, 0x48, 0x0d, 0xb9, 0xfa, 0xb9, 0xf2, 0x5a, 0xcf, - 0xb7, 0x91, 0x5b, 0xbf, 0x5a, 0x94, 0xb0, 0x28, 0x1d, 0xd3, 0x02, 0x5a, - 0xbf, 0xda, 0x73, 0xd8, 0xf4, 0x22, 0x38, 0xb2, 0xe8, 0x84, 0x54, 0x9a, - 0x45, 0x7b, 0xbe, 0xb7, 0x74, 0xec, 0xdd, 0x29, 0x17, 0x59, 0xd8, 0xa0, - 0x35, 0x5a, 0x83, 0x60, 0x7b, 0xaf, 0x18, 0xe9, 0x96, 0x8e, 0x69, 0x2f, - 0x01, 0xee, 0x2b, 0xfb, 0x6c, 0x10, 0xeb, 0x25, 0xcd, 0x5b, 0x5b, 0xd0, - 0x16, 0x36, 0xb1, 0x7b, 0xb6, 0x91, 0x09, 0x0f, 0xa7, 0xb0, 0x77, 0x6b, - 0x57, 0xfc, 0x57, 0x3e, 0x20, 0x4e, 0x0c, 0xb4, 0x5c, 0xf4, 0x7e, 0x70, - 0x8b, 0x1b, 0x9d, 0x1d, 0xee, 0xe9, 0x2b, 0x19, 0xae, 0xe9, 0x9b, 0xd8, - 0x4f, 0x66, 0x39, 0x6c, 0x65, 0x42, 0xe7, 0xb4, 0x0c, 0xc5, 0xf5, 0x90, - 0xc2, 0xdd, 0xbd, 0x8b, 0xb2, 0x48, 0x7b, 0x0d, 0xd7, 0xa6, 0x8e, 0x35, - 0xfd, 0x10, 0xa8, 0xec, 0x1e, 0xb4, 0x10, 0x78, 0x49, 0x9d, 0x27, 0xb7, - 0xbb, 0xbd, 0xae, 0x63, 0xd5, 0x94, 0x51, 0xdf, 0xb9, 0x3f, 0xe8, 0x54, - 0x9f, 0x93, 0x0d, 0xb2, 0x45, 0x40, 0x7e, 0x02, 0x56, 0xa8, 0xfa, 0xda, - 0x27, 0xcf, 0x17, 0x1c, 0x06, 0x0a, 0xda, 0x3a, 0xe5, 0x4d, 0x62, 0x47, - 0xa2, 0xf5, 0x83, 0xa7, 0x71, 0x65, 0x05, 0xb3, 0x76, 0xb4, 0x69, 0x5b, - 0x0a, 0x36, 0x32, 0x9a, 0x1c, 0x4e, 0xfa, 0x77, 0x16, 0xf9, 0x36, 0xf5, - 0xdc, 0x78, 0xa4, 0x9e, 0xfd, 0x4d, 0xb5, 0x7f, 0xc1, 0xa5, 0x62, 0xb5, - 0x05, 0x74, 0xa6, 0x3d, 0xbb, 0x45, 0x23, 0x4c, 0xd8, 0xec, 0xef, 0xe8, - 0x91, 0x1e, 0x53, 0x6b, 0x5c, 0xd3, 0x3a, 0x0e, 0x63, 0x97, 0x6e, 0xb2, - 0xed, 0x61, 0xd5, 0xfc, 0xee, 0x1c, 0x66, 0x33, 0xff, 0xf2, 0x1e, 0x0f, - 0xe6, 0x91, 0x73, 0xef, 0x18, 0xfc, 0x17, 0x5b, 0x25, 0x29, 0xc8, 0xe7, - 0xe5, 0xd2, 0x71, 0xec, 0x29, 0x2b, 0xff, 0xdf, 0x61, 0x85, 0xe3, 0x22, - 0x41, 0x00, 0x63, 0x29, 0xa7, 0x51, 0xcf, 0x12, 0xfd, 0x63, 0x51, 0xdb, - 0xca, 0xff, 0xb5, 0xd5, 0xb4, 0x4f, 0xca, 0x09, 0x27, 0xd7, 0x4d, 0x38, - 0x6d, 0x77, 0xeb, 0xa2, 0x4a, 0x05, 0xa9, 0xc2, 0xa3, 0x43, 0x6e, 0x2b, - 0x35, 0x05, 0x11, 0xed, 0x7d, 0x1a, 0xff, 0x87, 0x93, 0xbb, 0xef, 0xf1, - 0xc6, 0xff, 0x64, 0xf2, 0xfd, 0x28, 0x6b, 0x97, 0xfc, 0x31, 0x97, 0x96, - 0xc7, 0x64, 0x18, 0x8a, 0x35, 0xb9, 0xaa, 0xc2, 0x04, 0x5d, 0x09, 0x23, - 0xef, 0x4e, 0xaa, 0xa8, 0x22, 0x18, 0x2a, 0xc8, 0xab, 0x01, 0xe1, 0xf6, - 0xab, 0xfa, 0x21, 0x47, 0xdd, 0x90, 0x45, 0xd4, 0x2d, 0x80, 0x91, 0xeb, - 0x9a, 0xd3, 0x07, 0x8d, 0x90, 0x45, 0x04, 0x2c, 0x71, 0xf4, 0x2a, 0x18, - 0xd6, 0xc4, 0x07, 0x75, 0x51, 0x0b, 0xf1, 0x42, 0x3c, 0x20, 0x28, 0x32, - 0x4b, 0xde, 0x23, 0x39, 0x13, 0x89, 0xc1, 0x84, 0x48, 0xbb, 0x5b, 0x84, - 0x5e, 0x1b, 0x1f, 0x90, 0x97, 0xa8, 0x4e, 0x28, 0x57, 0x66, 0x14, 0xba, - 0xe9, 0xd4, 0x10, 0x18, 0xec, 0x65, 0xe1, 0xdd, 0xc2, 0x23, 0xc8, 0x38, - 0x3f, 0xf8, 0xef, 0xc3, 0xf8, 0x02, 0x8f, 0xa7, 0xca, 0x00, 0xf6, 0xad, - 0x48, 0x77, 0xd4, 0x15, 0xa2, 0x5f, 0x57, 0xb2, 0x48, 0xe8, 0xf5, 0x65, - 0x9a, 0x75, 0x66, 0x33, 0xf2, 0xa8, 0xf1, 0xfb, 0x17, 0xfb, 0xf9, 0x7e, - 0x1c, 0x49, 0x9f, 0x96, 0x27, 0x5f, 0xaf, 0xf2, 0x2b, 0x76, 0x4b, 0x34, - 0x2d, 0x00, 0x33, 0x77, 0xed, 0x91, 0xb5, 0x15, 0x10, 0xca, 0x0a, 0x87, - 0xdd, 0x98, 0x56, 0x8c, 0x72, 0x06, 0xb8, 0x2b, 0x41, 0xc6, 0xce, 0x1d, - 0x63, 0xf3, 0xcf, 0xbe, 0x07, 0x98, 0x56, 0xe6, 0x69, 0xb4, 0xf8, 0xc6, - 0x4e, 0x97, 0xa9, 0xb9, 0xde, 0xd3, 0x58, 0x86, 0x7f, 0xd9, 0x88, 0x06, - 0x67, 0xab, 0xfd, 0x25, 0x1d, 0xb7, 0xb2, 0x41, 0x9b, 0x78, 0xa7, 0xbf, - 0x2d, 0xa1, 0x7f, 0x39, 0x74, 0xad, 0xce, 0xfe, 0x42, 0x87, 0x40, 0x3c, - 0x02, 0xf6, 0xd6, 0xfe, 0xef, 0xa1, 0x81, 0xca, 0x0f, 0x8d, 0x6e, 0x04, - 0xf1, 0xd3, 0x7a, 0x2c, 0x1c, 0xc5, 0x0d, 0xbf, 0x36, 0x6f, 0x6d, 0xd5, - 0x00, 0x4c, 0xc3, 0xe7, 0xa0, 0x55, 0xea, 0x6d, 0x89, 0xa5, 0x2e, 0xa0, - 0x48, 0x00, 0x8e, 0xb0, 0xb6, 0x72, 0x2f, 0xae, 0x08, 0xb6, 0x41, 0xfe, - 0x32, 0x9c, 0x2d, 0xc9, 0x4b, 0xf2, 0x3b, 0x6f, 0x2a, 0xae, 0xce, 0x70, - 0x53, 0x25, 0x0b, 0x4a, 0xbe, 0xa4, 0x9b, 0x6b, 0xcf, 0x20, 0x73, 0xca, - 0x79, 0xb6, 0x26, 0x65, 0xec, 0x6a, 0x4c, 0x7e, 0x76, 0x63, 0x82, 0x1c, - 0x03, 0x4f, 0x82, 0x16, 0x1f, 0xd9, 0x79, 0x6a, 0xec, 0x38, 0xd4, 0xb2, - 0x26, 0xe6, 0xd3, 0x85, 0x41, 0x3e, 0x1e, 0x4e, 0xed, 0xe0, 0x12, 0xae, - 0x2a, 0xed, 0x3b, 0x66, 0x71, 0x25, 0x60, 0xeb, 0x1a, 0x9f, 0x2e, 0x02, - 0x42, 0xb4, 0x37, 0xe7, 0xb5, 0x17, 0x73, 0xf8, 0xe5, 0xc5, 0xe5, 0x5a, - 0x71, 0xf3, 0x69, 0x4c, 0x60, 0xa8, 0xf6, 0xa8, 0xf5, 0xcb, 0x62, 0x5b, - 0x85, 0x23, 0x5f, 0xda, 0xa3, 0x9a, 0xca, 0x60, 0x62, 0xe1, 0xdb, 0x6d, - 0x72, 0xe9, 0x71, 0xf5, 0x17, 0x71, 0x41, 0x71, 0x7e, 0x4d, 0x2b, 0x39, - 0x7f, 0xa0, 0x3d, 0x58, 0x00, 0xff, 0x34, 0x44, 0xe1, 0x10, 0x57, 0x9a, - 0xa4, 0xde, 0x27, 0x2c, 0xce, 0x54, 0x71, 0x04, 0xd2, 0xed, 0x31, 0x88, - 0x8d, 0xc4, 0x7e, 0x0d, 0x03, 0x78, 0xc0, 0x87, 0xeb, 0x02, 0x1b, 0x16, - 0x81, 0x02, 0x4e, 0x58, 0xaa, 0xaa, 0x9f, 0x13, 0x02, 0xba, 0x5d, 0xfd, - 0xc3, 0x22, 0x4d, 0x8b, 0x7f, 0x8e, 0xc6, 0xf9, 0xe9, 0x8a, 0x06, 0x80, - 0xa0, 0x0b, 0xa7, 0x95, 0x19, 0xf2, 0x5e, 0x4b, 0x7a, 0x5d, 0x52, 0xce, - 0x75, 0x39, 0x9c, 0xe3, 0x8d, 0x73, 0xd7, 0x96, 0x3f, 0x63, 0xfc, 0xde, - 0xce, 0xd2, 0x10, 0x6f, 0xa9, 0x7d, 0x60, 0x71, 0x39, 0x9c, 0x45, 0x64, - 0x65, 0x88, 0x62, 0xf7, 0xc4, 0x4d, 0xb7, 0x01, 0x73, 0xbe, 0x3b, 0xe0, - 0xcd, 0x70, 0x1e, 0x46, 0xe5, 0xbe, 0x92, 0xd4, 0x6c, 0x6b, 0xa2, 0x3b, - 0xab, 0xff, 0xc7, 0xd9, 0xfe, 0xff, 0xf9, 0xed, 0x22, 0xf1, 0x19, 0x1f, - 0x8e, 0xb7, 0x74, 0x19, 0x71, 0xec, 0x5f, 0xb1, 0x1e, 0xd1, 0x64, 0xb6, - 0x53, 0x30, 0x15, 0x77, 0x5f, 0xe2, 0xf0, 0x06, 0xfd, 0x3f, 0xa8, 0xf3, - 0x6b, 0x42, 0x4c, 0xb0, 0xd0, 0xc6, 0x9d, 0x40, 0xcb, 0x4b, 0xb2, 0x87, - 0x96, 0x2b, 0xba, 0xf3, 0x2b, 0xd3, 0x86, 0x9e, 0x35, 0x6a, 0xb3, 0x70, - 0xd7, 0x03, 0x63, 0x4c, 0x3a, 0xf9, 0xa3, 0xef, 0x74, 0x3b, 0xdf, 0x52, - 0x5e, 0x52, 0x9f, 0x62, 0x72, 0x49, 0xc8, 0xca, 0x1a, 0xf7, 0x70, 0x03, - 0x7e, 0x85, 0x42, 0x9b, 0x3e, 0x46, 0x6b, 0x81, 0xa2, 0x88, 0x01, 0x2b, - 0xf2, 0xc3, 0xd7, 0x5b, 0x89, 0x22, 0x8a, 0xe3, 0xe9, 0x35, 0x0d, 0xc8, - 0x3f, 0x3c, 0xea, 0xa3, 0x0d, 0x65, 0x6a, 0x3b, 0x5d, 0xf9, 0xb6, 0x91, - 0xe1, 0x76, 0x6d, 0x17, 0xc9, 0x4a, 0x50, 0x73, 0x5f, 0x7b, 0xa6, 0x2d, - 0xa1, 0x63, 0x08, 0x54, 0xed, 0x3e, 0x29, 0x05, 0xaa, 0x4f, 0x3f, 0xf1, - 0x74, 0xb9, 0xcc, 0xd1, 0x39, 0x91, 0x49, 0x61, 0xdf, 0xf5, 0x8b, 0xce, - 0xe5, 0xf6, 0xe8, 0x98, 0xdd, 0x47, 0xec, 0x76, 0x00, 0xee, 0xe1, 0x77, - 0xdd, 0x6b, 0xe3, 0x1c, 0xcc, 0x29, 0xe6, 0x59, 0x47, 0xcc, 0x10, 0x59, - 0xef, 0x22, 0x70, 0xc6, 0x3b, 0x75, 0xf1, 0x11, 0x5f, 0x91, 0x88, 0x25, - 0x60, 0xd5, 0x30, 0x11, 0x4c, 0x0b, 0xe1, 0xd5, 0x3a, 0x8a, 0xad, 0xee, - 0x97, 0x6e, 0xb8, 0xcd, 0xe3, 0x1f, 0xac, 0xa4, 0xd8, 0xcc, 0x63, 0xae, - 0x4d, 0xb1, 0xb8, 0x1a, 0xd6, 0x44, 0xad, 0x03, 0x5e, 0xf2, 0x8c, 0x3b, - 0xbe, 0x9e, 0xb5, 0xc5, 0x97, 0x6d, 0x7a, 0x0e, 0x5d, 0x79, 0x15, 0xdb, - 0x9e, 0x54, 0x2f, 0xc0, 0xaf, 0x1a, 0xd5, 0xb3, 0x7a, 0xc7, 0x6a, 0x4d, - 0x2b, 0x58, 0x62, 0x5b, 0xe9, 0x24, 0xff, 0xf5, 0xb0, 0x86, 0x88, 0x53, - 0x54, 0x6e, 0x3d, 0x1f, 0x7d, 0x08, 0xc6, 0xf5, 0x01, 0x74, 0xdb, 0x57, - 0xe2, 0x6a, 0x00, 0xf3, 0xeb, 0x2b, 0xe6, 0xf9, 0xf5, 0x1d, 0xf3, 0xfc, - 0x8a, 0xac, 0xcc, 0xb3, 0xb7, 0x01, 0x38, 0x5b, 0x19, 0x19, 0x49, 0x28, - 0xaf, 0x47, 0xb4, 0x54, 0x86, 0x6a, 0x59, 0x00, 0x6c, 0xed, 0xb6, 0xf4, - 0x75, 0x7a, 0x77, 0xd3, 0x94, 0x77, 0x02, 0x2f, 0xb1, 0x7f, 0xa7, 0xef, - 0xbe, 0xf3, 0x8e, 0x80, 0x7a, 0x5a, 0x85, 0xa0, 0xce, 0x36, 0x79, 0x95, - 0x45, 0x05, 0x5d, 0xfd, 0xdb, 0xa1, 0xc2, 0x7d, 0xfd, 0x11, 0x94, 0xce, - 0xf7, 0x40, 0x43, 0x54, 0x32, 0xb1, 0xed, 0x5b, 0xed, 0x58, 0xf4, 0xf8, - 0xe6, 0xdc, 0xdb, 0xda, 0x77, 0x46, 0x55, 0xe6, 0x9e, 0xba, 0x74, 0x1e, - 0xa2, 0x2e, 0xee, 0x08, 0xc4, 0x3b, 0x7a, 0x03, 0x7a, 0xea, 0x9a, 0xca, - 0x2f, 0x31, 0x1e, 0x30, 0x51, 0xf5, 0x17, 0x45, 0xd5, 0x06, 0xf8, 0xd7, - 0xe6, 0x78, 0xfd, 0x5a, 0xd6, 0x20, 0xdf, 0x31, 0x98, 0x27, 0x3c, 0xba, - 0xcf, 0xd6, 0xac, 0xe6, 0xf4, 0xaf, 0xb3, 0x88, 0x54, 0x5c, 0x8d, 0x2d, - 0xd7, 0x93, 0x71, 0x60, 0xfa, 0xe5, 0x9b, 0xdd, 0x8f, 0x8a, 0x0a, 0x45, - 0x8a, 0x64, 0x01, 0xf1, 0x81, 0xce, 0x25, 0xd9, 0xf6, 0xa4, 0xcf, 0xae, - 0x26, 0x84, 0x00, 0xcc, 0x8d, 0x61, 0x82, 0x55, 0x4d, 0x90, 0x60, 0xa9, - 0xb0, 0xa6, 0x0b, 0x4c, 0x6e, 0xf6, 0x6e, 0x99, 0xb6, 0xad, 0x8f, 0xd6, - 0x40, 0xff, 0xd5, 0xcb, 0x04, 0x4d, 0xc0, 0x9e, 0xa5, 0x64, 0x22, 0x12, - 0xe0, 0x9a, 0x0a, 0x32, 0x5d, 0xa6, 0xd2, 0x22, 0xe2, 0x12, 0x8e, 0x05, - 0x40, 0x6c, 0x82, 0x79, 0xd4, 0x96, 0x71, 0x83, 0xbb, 0x3f, 0xb6, 0xfa, - 0xb6, 0x06, 0xfb, 0x14, 0x1c, 0xe5, 0x52, 0x0b, 0xaa, 0x61, 0x77, 0xc5, - 0x04, 0x1d, 0xf3, 0xdd, 0xcb, 0x83, 0x21, 0x5f, 0x72, 0x07, 0x92, 0x14, - 0x28, 0x77, 0x55, 0xeb, 0x73, 0x1b, 0x71, 0xbb, 0x83, 0xd5, 0x53, 0x4d, - 0xe0, 0x15, 0xc6, 0xf1, 0xee, 0xd8, 0xd3, 0x72, 0xb8, 0xf0, 0xc0, 0xe6, - 0x13, 0xe5, 0x63, 0xaf, 0x1f, 0x01, 0x52, 0xf3, 0xb4, 0xeb, 0xab, 0x5d, - 0xab, 0x75, 0x08, 0x88, 0x92, 0x49, 0xd4, 0x36, 0x0d, 0xb3, 0x4a, 0x4a, - 0x38, 0xd6, 0x4e, 0x4b, 0x8c, 0x39, 0x71, 0xa5, 0xb6, 0x37, 0x6b, 0xfb, - 0x43, 0x07, 0x4d, 0x05, 0x18, 0xd0, 0x63, 0x0a, 0x41, 0x5c, 0xc2, 0xc9, - 0x21, 0x76, 0x70, 0x2e, 0x40, 0xa5, 0x8a, 0x41, 0x60, 0xdf, 0x5d, 0x95, - 0x0c, 0xe8, 0x24, 0xcd, 0x32, 0x43, 0x02, 0x62, 0xdf, 0xdb, 0x4c, 0x64, - 0xe7, 0xcb, 0x1c, 0x21, 0x21, 0x84, 0x6b, 0x06, 0x3b, 0xd9, 0x62, 0xc8, - 0x29, 0x07, 0x7e, 0xe1, 0x3f, 0xd0, 0xa8, 0x13, 0x6e, 0xcb, 0x03, 0x6f, - 0xf5, 0x5f, 0x83, 0xf8, 0xd2, 0x06, 0x1c, 0xce, 0xb0, 0x0c, 0xe0, 0x1a, - 0xbb, 0x9b, 0x0e, 0xb2, 0xc2, 0x0c, 0x79, 0x80, 0x57, 0x3d, 0x61, 0x03, - 0x58, 0xe5, 0x62, 0x80, 0x6d, 0xe8, 0xd2, 0xea, 0xa0, 0x5b, 0xb4, 0xa0, - 0xc5, 0x47, 0x70, 0x5b, 0x67, 0x1b, 0xee, 0xf7, 0x78, 0xc8, 0x75, 0x7c, - 0x9d, 0xb3, 0xab, 0xac, 0xd7, 0xcd, 0x60, 0xb9, 0xa6, 0x42, 0x06, 0x35, - 0x25, 0x07, 0xb3, 0xd5, 0xe5, 0x8a, 0x97, 0x8e, 0x6b, 0xb1, 0x8d, 0x7b, - 0x4d, 0x34, 0x6e, 0x32, 0xbb, 0x46, 0xe1, 0xd5, 0xb4, 0xf7, 0x12, 0xaf, - 0xee, 0x44, 0x09, 0x69, 0xfd, 0xfc, 0x0b, 0x87, 0x0d, 0xc3, 0xd9, 0x1a, - 0x4f, 0xdb, 0x36, 0xe8, 0x6b, 0xf2, 0x42, 0xf7, 0xea, 0x4e, 0xa8, 0xe2, - 0xf4, 0x66, 0x6b, 0x01, 0xc8, 0x74, 0x11, 0x6f, 0xcd, 0x4d, 0x14, 0xe8, - 0x57, 0x77, 0xc6, 0x78, 0xf2, 0x83, 0x0b, 0xd3, 0x2b, 0x97, 0xeb, 0xe0, - 0x34, 0x05, 0xad, 0x20, 0x5e, 0xd6, 0xf5, 0xf9, 0x19, 0x20, 0x7b, 0xcc, - 0xa3, 0x17, 0x4c, 0x41, 0x8f, 0x8b, 0x38, 0x87, 0x75, 0xf5, 0x0c, 0xec, - 0x1f, 0x17, 0xd0, 0x9f, 0x47, 0x02, 0x5f, 0x48, 0x3d, 0xcf, 0x11, 0x4c, - 0x6f, 0x0a, 0x16, 0x68, 0xbf, 0xee, 0x0d, 0xeb, 0x4f, 0x5d, 0x2b, 0xf9, - 0x7c, 0x7c, 0x44, 0xf6, 0xd7, 0x7e, 0x89, 0xba, 0x91, 0xff, 0x62, 0x6f, - 0xf4, 0x82, 0x9b, 0x2e, 0xfe, 0x4e, 0x17, 0xa7, 0x2b, 0x8d, 0xd5, 0xbe, - 0x87, 0x75, 0x4a, 0x3f, 0x56, 0x99, 0x7e, 0xcc, 0xe1, 0x8f, 0xbd, 0xfc, - 0x8f, 0x79, 0x9d, 0x2d, 0xe6, 0x19, 0xd1, 0x19, 0x1f, 0x77, 0xa2, 0xe4, - 0xe1, 0x02, 0x83, 0x2f, 0x93, 0x75, 0x2f, 0x50, 0xc6, 0x1d, 0xc5, 0x24, - 0x27, 0x4c, 0xa4, 0x29, 0xe3, 0x5a, 0x01, 0x5c, 0x4d, 0x44, 0xf3, 0xe0, - 0xd3, 0x42, 0x86, 0xcb, 0x37, 0x24, 0xbc, 0xd6, 0x20, 0x5f, 0xf1, 0x67, - 0x92, 0x49, 0xd4, 0xbe, 0xe5, 0xab, 0x7f, 0x25, 0x0a, 0xcd, 0x99, 0xc1, - 0x0d, 0xbe, 0x2c, 0xfd, 0xc6, 0x20, 0x74, 0xfe, 0xa3, 0x2e, 0xcd, 0xc0, - 0x32, 0x48, 0x2c, 0x92, 0x50, 0x6d, 0xa0, 0x41, 0x89, 0x18, 0x18, 0x38, - 0x79, 0xdf, 0x45, 0xd6, 0xd8, 0x33, 0xd7, 0x1d, 0x53, 0x22, 0x9d, 0x7a, - 0xc9, 0x6d, 0xeb, 0x34, 0x63, 0x8f, 0x14, 0x6a, 0xe0, 0x59, 0x06, 0x9c, - 0x8b, 0xd4, 0xec, 0xbc, 0xf6, 0x14, 0x1b, 0xe3, 0x8b, 0xa7, 0x99, 0xc0, - 0x3f, 0x68, 0xbe, 0xdd, 0xb4, 0x1c, 0x60, 0x80, 0xc9, 0xb9, 0x71, 0xb3, - 0x3a, 0xdf, 0x42, 0xb1, 0x3b, 0x51, 0x08, 0x46, 0x91, 0x59, 0x31, 0x31, - 0x23, 0xe2, 0xb6, 0x38, 0xa3, 0x6c, 0xdc, 0xee, 0x5c, 0x68, 0x1c, 0x17, - 0x53, 0x1b, 0x48, 0xb0, 0xe7, 0xcc, 0x09, 0x26, 0x43, 0x19, 0x15, 0x77, - 0xa6, 0xa1, 0xb0, 0xe0, 0x2a, 0x21, 0x0f, 0xf9, 0x28, 0x49, 0xdb, 0x6b, - 0x86, 0x00, 0x9f, 0x91, 0x11, 0x7f, 0x5e, 0x38, 0x0d, 0xaa, 0x23, 0x29, - 0x06, 0xb8, 0xb5, 0x9e, 0xc7, 0x2b, 0xef, 0x21, 0x01, 0xf5, 0xf6, 0x35, - 0x8f, 0xb8, 0x3f, 0xca, 0x08, 0xdd, 0xa7, 0x60, 0x3c, 0xdb, 0x28, 0xa8, - 0x92, 0xc7, 0x3b, 0x57, 0x1b, 0x8d, 0xea, 0xb6, 0x06, 0x00, 0x66, 0xf0, - 0x58, 0x97, 0x83, 0xb3, 0x9a, 0x70, 0x12, 0x14, 0x4b, 0x02, 0xfa, 0x1d, - 0xeb, 0xc1, 0x23, 0xc3, 0xb4, 0x71, 0xfd, 0xd5, 0x79, 0x64, 0x76, 0x8e, - 0x73, 0x62, 0x92, 0x21, 0x86, 0x00, 0x73, 0x15, 0xe9, 0x5a, 0x5b, 0x67, - 0x2b, 0x8a, 0x06, 0xc1, 0x39, 0xc5, 0x1b, 0x82, 0xb7, 0x8e, 0xf6, 0x40, - 0x9f, 0x2f, 0xc7, 0x1f, 0x39, 0xde, 0x22, 0x3b, 0x36, 0x5e, 0xec, 0x6d, - 0x60, 0xcf, 0x5c, 0xb3, 0x34, 0x50, 0x32, 0xfd, 0xbe, 0x3c, 0x07, 0xfd, - 0x56, 0x04, 0x03, 0x3c, 0x0e, 0xc5, 0xe3, 0x0c, 0x19, 0x16, 0x13, 0x4b, - 0x3a, 0xfb, 0x2a, 0xde, 0x7e, 0x94, 0xff, 0xe2, 0x13, 0xe1, 0xd5, 0xe7, - 0x5b, 0x39, 0x16, 0xa4, 0x96, 0x9f, 0x73, 0x6e, 0x43, 0xc5, 0x8c, 0x23, - 0x2b, 0x2c, 0xa4, 0x33, 0x64, 0x8f, 0x3b, 0x69, 0xe9, 0xde, 0xe2, 0x0c, - 0x16, 0xf2, 0x3a, 0x07, 0xbd, 0xa9, 0x7c, 0x4a, 0x99, 0x4d, 0x9e, 0x19, - 0xc7, 0x0c, 0xc1, 0x23, 0x12, 0xc9, 0x10, 0x13, 0xfa, 0x67, 0x99, 0x67, - 0xff, 0x60, 0xf3, 0x1c, 0x79, 0x3d, 0xb7, 0xf3, 0x5f, 0x86, 0x21, 0x3c, - 0x97, 0x67, 0xc5, 0x34, 0x4b, 0x27, 0x5e, 0x9e, 0x2b, 0xa1, 0x1b, 0x5c, - 0xee, 0xe8, 0x8a, 0x8e, 0xd3, 0x9f, 0x7f, 0x35, 0x1e, 0x63, 0x9b, 0x4f, - 0x66, 0xc8, 0xf9, 0x04, 0xe6, 0x37, 0x9f, 0x3b, 0xed, 0xd3, 0xd4, 0x96, - 0x0d, 0xa2, 0x2b, 0x59, 0x44, 0x23, 0x9d, 0x7c, 0xbe, 0xd3, 0xe8, 0x92, - 0xc7, 0x77, 0xc6, 0x9b, 0x2e, 0xdc, 0x45, 0xa1, 0xfa, 0x05, 0x33, 0x36, - 0x5e, 0x71, 0x01, 0xd0, 0x4e, 0xbc, 0x54, 0x8e, 0xe9, 0x11, 0xa3, 0x5a, - 0x0d, 0x11, 0x7c, 0xe6, 0x3f, 0xc1, 0xc4, 0xdc, 0x72, 0x18, 0x5e, 0x27, - 0x9f, 0x50, 0x34, 0xad, 0x47, 0x59, 0xc2, 0x3f, 0x24, 0x95, 0xb6, 0x73, - 0x5f, 0xe0, 0x51, 0x2c, 0xfd, 0xd1, 0x14, 0x34, 0x82, 0xd3, 0xf7, 0x81, - 0x68, 0xaf, 0x13, 0xc8, 0x15, 0x67, 0x1c, 0x61, 0xaa, 0xab, 0x1a, 0x59, - 0x27, 0x57, 0x05, 0x18, 0xe5, 0xea, 0x0b, 0x5e, 0x59, 0x51, 0xb2, 0x3c, - 0xad, 0x23, 0xfd, 0xfc, 0x95, 0x0f, 0x8a, 0x7c, 0xe5, 0x55, 0xe1, 0xac, - 0x2d, 0xa3, 0x56, 0x6f, 0x5a, 0x78, 0xc1, 0x12, 0xcc, 0x4b, 0xe1, 0x55, - 0x34, 0x79, 0x55, 0xc0, 0xb5, 0xf1, 0x5b, 0xa1, 0x61, 0x35, 0xaf, 0x1f, - 0x56, 0xcc, 0xcc, 0x4b, 0xd3, 0x40, 0x1e, 0x24, 0x73, 0xba, 0x1c, 0xa3, - 0xa3, 0xe2, 0x74, 0xa3, 0x18, 0x75, 0xce, 0x0f, 0x97, 0x55, 0x57, 0xb0, - 0x56, 0x00, 0x13, 0x09, 0x6d, 0x16, 0x1a, 0xfe, 0x51, 0xf2, 0xf2, 0x5b, - 0x1b, 0x94, 0x2c, 0xe3, 0x42, 0x2d, 0x8b, 0x00, 0x45, 0x2d, 0x3a, 0xba, - 0x58, 0x96, 0x45, 0x6b, 0x9f, 0x0b, 0x6f, 0xdc, 0x32, 0xf4, 0x97, 0xe3, - 0xb4, 0x8c, 0x2b, 0x6c, 0xd2, 0xd3, 0xbd, 0xff, 0xac, 0x59, 0x76, 0x2a, - 0x91, 0x54, 0x85, 0x4b, 0xba, 0x72, 0x44, 0x6f, 0xe0, 0x39, 0xa5, 0xab, - 0xfc, 0x3f, 0x35, 0xed, 0x01, 0xca, 0x9b, 0x5c, 0x6d, 0x93, 0x47, 0x6c, - 0x7d, 0x86, 0x5e, 0x15, 0xe8, 0xe9, 0x80, 0xc2, 0x86, 0x42, 0xb2, 0xfa, - 0xd5, 0x0b, 0x14, 0xef, 0x4f, 0xb4, 0xe4, 0xc4, 0x67, 0x38, 0xab, 0x89, - 0x2b, 0x3a, 0x77, 0x92, 0x7d, 0x27, 0x9b, 0x68, 0xd0, 0x49, 0xc2, 0xcd, - 0x4c, 0xbb, 0x90, 0x2a, 0x01, 0xff, 0xec, 0x4b, 0x75, 0xfc, 0xdf, 0xde, - 0x0f, 0xee, 0xa1, 0xde, 0x23, 0xc7, 0xd1, 0x11, 0x57, 0xe0, 0x0b, 0xa2, - 0xaa, 0x89, 0x4d, 0x68, 0x95, 0x80, 0xb2, 0x78, 0x6d, 0x2d, 0x2b, 0x85, - 0x97, 0x72, 0x89, 0x03, 0x65, 0xf6, 0x7a, 0x30, 0xe8, 0x4f, 0x2e, 0xd4, - 0xec, 0x61, 0xb4, 0x17, 0x9a, 0x8d, 0x83, 0xc9, 0xfe, 0xe0, 0x95, 0xd6, - 0x7a, 0x5c, 0xd0, 0x78, 0x05, 0xe3, 0xe9, 0x0c, 0x11, 0x1e, 0x8f, 0xd7, - 0x9b, 0x80, 0x4d, 0x3d, 0x32, 0x23, 0xa8, 0x12, 0x7c, 0x42, 0xc5, 0x4f, - 0x7f, 0x05, 0xc7, 0xbc, 0xae, 0x9a, 0xba, 0xb2, 0x16, 0xc6, 0xb3, 0x36, - 0x45, 0x49, 0x98, 0x31, 0xdb, 0x16, 0xed, 0x8f, 0xae, 0xe4, 0x27, 0x85, - 0x43, 0x3c, 0x94, 0x80, 0x4f, 0xd6, 0xbd, 0x55, 0xf5, 0xf4, 0x61, 0x56, - 0xa4, 0x6d, 0xe3, 0x29, 0xef, 0x6e, 0xb3, 0x7b, 0xcf, 0xb2, 0xd7, 0xc4, - 0xf3, 0xca, 0xdf, 0x5b, 0xc6, 0x35, 0x10, 0x66, 0xf0, 0xc3, 0x62, 0xfd, - 0x61, 0x74, 0x29, 0x16, 0x32, 0x0f, 0x5f, 0xca, 0xcc, 0x6d, 0x65, 0x82, - 0x30, 0xac, 0x82, 0xdf, 0x83, 0x3e, 0x38, 0x95, 0x17, 0x66, 0x82, 0x88, - 0xa8, 0x40, 0x18, 0x30, 0x87, 0x1d, 0x07, 0xbd, 0x06, 0xe4, 0x71, 0xf7, - 0x00, 0xdb, 0xfc, 0x0c, 0x4c, 0x7b, 0x09, 0x63, 0x9a, 0x62, 0xf0, 0x7c, - 0x5c, 0x69, 0xd4, 0xf4, 0x5c, 0x51, 0xf6, 0x93, 0x10, 0x5b, 0xcb, 0x43, - 0xc3, 0xb2, 0x63, 0x7c, 0xc8, 0x44, 0x65, 0x3a, 0x1d, 0x66, 0x07, 0xde, - 0xc6, 0x1b, 0x8a, 0xfc, 0x30, 0xa8, 0xaa, 0x8e, 0xeb, 0xb2, 0xaa, 0x25, - 0x3b, 0xd6, 0xe3, 0x49, 0xe3, 0x89, 0x61, 0x30, 0x10, 0xc7, 0x6d, 0x47, - 0x81, 0x2c, 0xe7, 0x2c, 0x0b, 0xb5, 0x7c, 0x47, 0x09, 0x6f, 0xd6, 0x84, - 0xd7, 0x87, 0xfa, 0xac, 0x87, 0xbf, 0xe4, 0x67, 0x70, 0xb7, 0x9f, 0x49, - 0xd5, 0xf8, 0x25, 0xe3, 0x4a, 0x71, 0x3a, 0x03, 0x1a, 0xb6, 0xbd, 0x5c, - 0x15, 0x81, 0x03, 0xfa, 0xfd, 0xd5, 0xa6, 0x84, 0xa8, 0x5a, 0xaf, 0xdf, - 0x5b, 0xa4, 0xf4, 0xd7, 0xaf, 0x9c, 0xd3, 0x76, 0x9c, 0x76, 0xa5, 0x61, - 0xe2, 0x7d, 0x7f, 0xab, 0xa3, 0x98, 0x18, 0xe6, 0xdf, 0x55, 0x57, 0x4e, - 0x19, 0xc0, 0x60, 0x2a, 0x9e, 0xaf, 0x57, 0x75, 0x18, 0x02, 0x72, 0x78, - 0x2b, 0xc3, 0x5d, 0x2e, 0xdd, 0x42, 0x27, 0x72, 0x0d, 0x3c, 0x86, 0xc3, - 0x01, 0x37, 0x25, 0x6f, 0x35, 0x94, 0x1a, 0xdf, 0xaa, 0x5b, 0x35, 0x00, - 0xd4, 0x93, 0xfd, 0xae, 0x05, 0xc3, 0xa0, 0xfa, 0x7c, 0x7b, 0xe6, 0x43, - 0x81, 0x63, 0x57, 0xce, 0x23, 0x80, 0xc8, 0xd3, 0x8f, 0xbc, 0x6d, 0xbf, - 0x1a, 0x24, 0xfc, 0xda, 0x90, 0xd2, 0xad, 0xb0, 0xc1, 0xfd, 0x2b, 0x34, - 0x79, 0x62, 0x75, 0xaf, 0x9c, 0x03, 0x0f, 0xc4, 0x4a, 0x1d, 0x5b, 0x4e, - 0x20, 0x0c, 0x43, 0xd7, 0x1a, 0xe7, 0x8e, 0xfb, 0xe4, 0x01, 0x7e, 0xad, - 0xf6, 0x54, 0x5b, 0x6c, 0x5f, 0x02, 0x28, 0xc7, 0xb6, 0xe1, 0xa2, 0x7c, - 0xd4, 0xd7, 0x7b, 0x37, 0xa1, 0x1d, 0xc3, 0x3a, 0x97, 0x99, 0x31, 0xbf, - 0xc8, 0x27, 0xbb, 0xfa, 0x13, 0xc1, 0x83, 0xce, 0x6c, 0xf1, 0x35, 0x52, - 0x8a, 0xf9, 0x06, 0xf4, 0x4f, 0x19, 0x5f, 0x70, 0x69, 0xe8, 0x2e, 0xca, - 0x0f, 0x6a, 0x40, 0x0e, 0xca, 0x70, 0x1d, 0x12, 0x7a, 0x28, 0x3f, 0xa1, - 0x43, 0x22, 0x96, 0x2d, 0x6e, 0x19, 0xd2, 0x98, 0xd4, 0xa0, 0x17, 0x2e, - 0xb2, 0xe9, 0x8b, 0xc0, 0x4c, 0xc9, 0x69, 0x11, 0x9d, 0x22, 0xc4, 0xfb, - 0xbe, 0x85, 0x07, 0x22, 0xf5, 0x66, 0xdc, 0xb5, 0x35, 0x63, 0xa0, 0x37, - 0x0d, 0x3b, 0x41, 0x67, 0x2f, 0x6e, 0x86, 0xfd, 0x22, 0x04, 0x43, 0x1a, - 0x39, 0x15, 0x3f, 0xc3, 0x09, 0xcd, 0x03, 0x1e, 0x22, 0x47, 0xee, 0x24, - 0x1e, 0x19, 0x90, 0x3b, 0xd1, 0x24, 0x86, 0x48, 0x77, 0xae, 0x10, 0xae, - 0xd4, 0x84, 0x4f, 0x68, 0xdd, 0xac, 0x3b, 0x8d, 0x50, 0xac, 0x17, 0x1f, - 0xf5, 0xb4, 0xb0, 0x8b, 0x30, 0xb0, 0xe1, 0x0c, 0xb8, 0x28, 0xbf, 0x3f, - 0xa0, 0xbf, 0xe3, 0x63, 0x7f, 0x0c, 0x03, 0x91, 0x12, 0x3c, 0xad, 0x32, - 0x3d, 0x0c, 0x02, 0x76, 0x4b, 0xc0, 0x7e, 0x0d, 0x60, 0xac, 0x5c, 0x81, - 0xde, 0x71, 0xc0, 0x49, 0x50, 0x85, 0x13, 0xc8, 0x8b, 0x21, 0xa0, 0xfb, - 0xfd, 0x49, 0x32, 0xfd, 0x75, 0xf8, 0x55, 0xf4, 0x4d, 0x62, 0x3c, 0x2d, - 0xb4, 0x29, 0xdc, 0x18, 0x37, 0x0b, 0xc5, 0x50, 0xcf, 0xb9, 0xea, 0x44, - 0xda, 0x66, 0x03, 0x36, 0x0f, 0xc6, 0x28, 0x16, 0x3d, 0x5d, 0x38, 0xc9, - 0x33, 0x60, 0x3d, 0x00, 0x3f, 0xda, 0x53, 0x21, 0x3c, 0x59, 0x9d, 0x0b, - 0x2f, 0xf4, 0x0b, 0x5a, 0xdf, 0x30, 0xae, 0xfb, 0x13, 0xaa, 0xe5, 0x00, - 0x4c, 0x03, 0xfe, 0x01, 0x5f, 0x1c, 0x97, 0x96, 0xe1, 0xb7, 0x2e, 0x86, - 0x18, 0xd6, 0xf1, 0x2f, 0x82, 0x22, 0x0a, 0x69, 0x17, 0x21, 0x0e, 0xf4, - 0x09, 0xdc, 0x6d, 0xc1, 0x31, 0x33, 0xc2, 0xe4, 0x44, 0x7e, 0xfc, 0x6b, - 0xfd, 0xfe, 0xac, 0xd3, 0x5d, 0x0f, 0xbc, 0xa8, 0xff, 0xb6, 0xbb, 0x1e, - 0x8d, 0xf1, 0x91, 0x87, 0xa1, 0xed, 0x31, 0xbc, 0x1c, 0xed, 0x25, 0x7c, - 0xef, 0xbc, 0xe1, 0xb0, 0xe8, 0x4b, 0x9c, 0xfe, 0x65, 0xcf, 0x87, 0xba, - 0x6f, 0x43, 0xee, 0x4e, 0x3d, 0x6f, 0x61, 0x22, 0x71, 0x41, 0x5e, 0xf4, - 0x1e, 0xa5, 0x5e, 0x76, 0x47, 0x94, 0x3d, 0xbf, 0x78, 0xa3, 0x20, 0xcc, - 0x0b, 0x2e, 0xc2, 0xaf, 0x17, 0x0b, 0x82, 0xf6, 0x5e, 0x97, 0xa9, 0x41, - 0xcd, 0xa7, 0x89, 0x6a, 0x07, 0x04, 0x4e, 0x2d, 0x8f, 0xa1, 0x52, 0x1d, - 0x33, 0xf3, 0x92, 0x72, 0x25, 0x69, 0xe2, 0x59, 0x30, 0x39, 0x2b, 0x69, - 0xa2, 0x72, 0x75, 0x1c, 0x23, 0x7b, 0xc8, 0x76, 0xd3, 0x58, 0x21, 0x8e, - 0x0c, 0xf1, 0x94, 0x50, 0x04, 0x03, 0x38, 0x0a, 0x2c, 0xba, 0xbc, 0xcd, - 0x61, 0xb5, 0xa6, 0x6a, 0x87, 0x32, 0x5d, 0x68, 0x78, 0x4b, 0x32, 0xa9, - 0x13, 0x2e, 0xd3, 0x5d, 0x03, 0x03, 0x80, 0x0b, 0x67, 0x07, 0x40, 0x72, - 0x72, 0xdf, 0x35, 0x73, 0x00, 0xea, 0xde, 0xc6, 0xb8, 0x27, 0xeb, 0x90, - 0x01, 0x4d, 0xd3, 0x0a, 0xc7, 0x80, 0x30, 0x79, 0x17, 0x5c, 0xf1, 0x65, - 0x70, 0x50, 0x25, 0x02, 0x4b, 0xe0, 0xbe, 0xa8, 0x00, 0xec, 0x27, 0xf9, - 0x2c, 0x2b, 0x7e, 0x5a, 0x79, 0x22, 0x13, 0x83, 0x86, 0xe2, 0xe7, 0x00, - 0x0b, 0xc4, 0xd3, 0x35, 0x74, 0x37, 0xf8, 0xf4, 0xa4, 0x5a, 0xc7, 0xaa, - 0x60, 0x9f, 0x3e, 0xc2, 0x84, 0x72, 0x3a, 0x8f, 0xf2, 0x95, 0xe6, 0x8a, - 0x9c, 0xa8, 0x82, 0x4e, 0xb8, 0xb0, 0xf1, 0x0f, 0xb4, 0xf4, 0x2b, 0x53, - 0x75, 0xc8, 0xbd, 0x70, 0x36, 0x59, 0xb2, 0x2f, 0xd7, 0x03, 0x78, 0x0a, - 0x20, 0x22, 0x3d, 0xc8, 0x4e, 0x47, 0xc9, 0x41, 0xf9, 0x80, 0x31, 0x66, - 0x9e, 0x1b, 0xb1, 0xb6, 0xe9, 0x42, 0xf3, 0x19, 0xdf, 0x83, 0xf5, 0x2f, - 0x3f, 0xef, 0x2e, 0x3c, 0x54, 0xb0, 0x7b, 0xbe, 0x8b, 0x6a, 0x3a, 0x4f, - 0xa4, 0x20, 0xbc, 0x0d, 0xc9, 0xf1, 0x62, 0x59, 0x42, 0xf8, 0xa0, 0x7a, - 0x41, 0x1c, 0xed, 0xa8, 0x13, 0x73, 0x70, 0xd2, 0x75, 0x0d, 0xc4, 0x84, - 0x3d, 0x75, 0x59, 0x6c, 0xc9, 0xdb, 0xe3, 0x87, 0x16, 0x9b, 0x93, 0x38, - 0xf3, 0x51, 0x74, 0x59, 0x00, 0x16, 0x91, 0x24, 0x1c, 0x04, 0xb3, 0x26, - 0xd5, 0x8b, 0x79, 0x3f, 0x80, 0x31, 0xa6, 0x5e, 0x6a, 0xe8, 0x1b, 0xc2, - 0xc5, 0xbb, 0x48, 0xa3, 0xdb, 0xe4, 0x4d, 0x34, 0xa0, 0x3b, 0x3a, 0xb4, - 0x82, 0x05, 0xaa, 0x44, 0x1f, 0x2a, 0xd2, 0x87, 0x17, 0x69, 0x52, 0xa4, - 0xea, 0xe0, 0x43, 0xeb, 0x42, 0x76, 0x51, 0xb5, 0x66, 0xc7, 0x88, 0x2d, - 0x08, 0x7a, 0xc0, 0x62, 0x26, 0x4c, 0x0e, 0x4b, 0x00, 0xbc, 0xdf, 0xe4, - 0x99, 0x98, 0x82, 0xab, 0x87, 0x58, 0x0b, 0x05, 0x14, 0xf6, 0x72, 0x9f, - 0xe4, 0x77, 0xf1, 0xa2, 0x7a, 0x2c, 0x9e, 0xc2, 0x63, 0xe1, 0xf9, 0xbf, - 0xe2, 0x37, 0x4f, 0x80, 0xaa, 0xd0, 0x1d, 0x8b, 0x1f, 0x56, 0x28, 0x87, - 0x95, 0x38, 0x36, 0x85, 0xb8, 0x7a, 0x70, 0x8d, 0xd7, 0x59, 0x7f, 0x6a, - 0xe6, 0x1d, 0x6c, 0xed, 0xcd, 0xd4, 0x27, 0xe4, 0xd8, 0xda, 0x66, 0x2e, - 0x37, 0x9a, 0x9b, 0xcc, 0xdb, 0xc1, 0xd7, 0xb0, 0xd9, 0xe0, 0xc1, 0x04, - 0x50, 0xd0, 0xa0, 0x9c, 0x21, 0xbf, 0x5f, 0x4e, 0x0f, 0xf7, 0xb4, 0x22, - 0xb2, 0x3f, 0xd2, 0x55, 0x9f, 0xfe, 0xa4, 0x54, 0x39, 0x40, 0xa8, 0xfc, - 0x0b, 0x64, 0xef, 0x6b, 0xce, 0xed, 0xd1, 0x6e, 0xd1, 0xf8, 0xcd, 0xaf, - 0x87, 0xfd, 0x10, 0xeb, 0xe1, 0xeb, 0x17, 0x87, 0xab, 0x10, 0x3e, 0x7c, - 0xbe, 0x71, 0xf8, 0x81, 0x28, 0x7c, 0x8a, 0x79, 0xc7, 0x24, 0xe8, 0xd0, - 0x7a, 0x62, 0x7c, 0x93, 0xe3, 0x32, 0x25, 0x3a, 0xbc, 0xb4, 0x3d, 0x7a, - 0xdc, 0xef, 0xe4, 0xbd, 0xce, 0x71, 0x81, 0x90, 0x2d, 0x02, 0xbc, 0xe2, - 0x3f, 0xec, 0x32, 0xd9, 0xdf, 0x52, 0x91, 0x10, 0x06, 0xc8, 0xf4, 0x43, - 0x2a, 0x0b, 0x04, 0x87, 0x6c, 0x34, 0x43, 0x77, 0xb3, 0x02, 0xa8, 0x6f, - 0x39, 0xb4, 0xca, 0x68, 0x44, 0xf5, 0xff, 0xc0, 0x65, 0x69, 0x0c, 0xeb, - 0x47, 0xa3, 0x06, 0x03, 0xbf, 0xbc, 0x90, 0x09, 0xe0, 0x91, 0x14, 0xe1, - 0x0f, 0x43, 0x24, 0xc4, 0xae, 0x9b, 0xa7, 0xf2, 0x1a, 0x5b, 0x1d, 0xae, - 0x21, 0xcc, 0x08, 0xb7, 0xa3, 0x8d, 0xea, 0x0e, 0x52, 0x5c, 0x63, 0xcb, - 0xcd, 0x5b, 0x33, 0x30, 0xb4, 0x32, 0x32, 0x6b, 0x46, 0x8d, 0x92, 0xc7, - 0x57, 0xc0, 0x43, 0xde, 0xa6, 0xa7, 0x5c, 0x23, 0xcc, 0x00, 0x33, 0x0d, - 0xb7, 0x9d, 0x67, 0xda, 0x79, 0xbc, 0x89, 0x2b, 0x00, 0x07, 0x73, 0x25, - 0xed, 0xee, 0x13, 0x43, 0x29, 0x33, 0xe8, 0x4f, 0x0b, 0x80, 0xc7, 0xe8, - 0x61, 0x8d, 0x5c, 0x4b, 0x30, 0x82, 0x2a, 0x7d, 0xe8, 0x04, 0x25, 0xc9, - 0x05, 0xb3, 0xf9, 0x03, 0xad, 0xcc, 0xf1, 0x83, 0x10, 0x31, 0x4e, 0x30, - 0x83, 0x6b, 0x2e, 0xc7, 0xcf, 0x0f, 0x2e, 0xff, 0x3d, 0xe6, 0x2b, 0x8d, - 0x90, 0xb5, 0x35, 0xa8, 0xcb, 0xb0, 0x8f, 0xaf, 0xdb, 0x29, 0xc1, 0xb1, - 0x50, 0x01, 0xac, 0x89, 0xcf, 0x27, 0x9a, 0xb3, 0xb2, 0x3d, 0xda, 0x2e, - 0x03, 0xdb, 0x4b, 0x82, 0x83, 0x47, 0xb5, 0x0a, 0xcd, 0xf3, 0xb1, 0xed, - 0x70, 0xcc, 0xfc, 0x90, 0x18, 0xa2, 0x58, 0x8d, 0xd2, 0xfa, 0x81, 0x81, - 0x3b, 0x46, 0x73, 0xb1, 0xb9, 0x6e, 0xbc, 0xaa, 0x93, 0x01, 0x0f, 0x67, - 0xb9, 0xfc, 0x0e, 0xda, 0x96, 0x3a, 0x16, 0xde, 0x3c, 0x64, 0x55, 0xef, - 0xdb, 0x0b, 0xdf, 0x72, 0x59, 0x7e, 0xac, 0x11, 0x24, 0x40, 0x9c, 0x0b, - 0x26, 0xc1, 0xbe, 0x1c, 0x77, 0x2c, 0x4f, 0xad, 0x8b, 0x1e, 0xda, 0xbd, - 0x35, 0x32, 0x45, 0xe0, 0xed, 0xee, 0x6e, 0xc3, 0x5e, 0x78, 0xb8, 0x6a, - 0x74, 0x70, 0x64, 0x61, 0xf1, 0x0c, 0xaf, 0x4c, 0x96, 0xd3, 0x4c, 0x12, - 0x4f, 0x61, 0xc0, 0x98, 0x55, 0x50, 0xe6, 0xed, 0x50, 0x08, 0xe3, 0xc0, - 0x19, 0xa5, 0x01, 0x15, 0x88, 0xd5, 0x66, 0x71, 0x7c, 0xdf, 0x75, 0xb2, - 0xde, 0x41, 0xd3, 0xe9, 0x43, 0xdb, 0x59, 0x46, 0x9a, 0x8d, 0xbe, 0xe2, - 0xca, 0x96, 0xe4, 0x58, 0x35, 0x62, 0x04, 0xfd, 0x71, 0x0b, 0xf7, 0x81, - 0x15, 0x28, 0x98, 0x2c, 0x74, 0x5c, 0x1f, 0x3a, 0x98, 0x15, 0xb0, 0x6e, - 0x2b, 0xd7, 0x84, 0x71, 0x17, 0x62, 0xc7, 0x60, 0x25, 0x54, 0x6c, 0xc8, - 0xd4, 0x39, 0xe7, 0xde, 0x57, 0xed, 0x1a, 0x11, 0xe6, 0xbf, 0xe9, 0xef, - 0x01, 0x3d, 0x33, 0x54, 0xa4, 0x40, 0x2b, 0x7e, 0x83, 0xec, 0x27, 0x0a, - 0x1d, 0x40, 0x3d, 0x80, 0xf3, 0xae, 0xcc, 0xe5, 0xc8, 0x0a, 0xee, 0xc9, - 0xf5, 0xa4, 0x83, 0x5d, 0x09, 0x81, 0x3a, 0x50, 0xa3, 0x25, 0x42, 0x90, - 0xfa, 0x8a, 0xa3, 0x69, 0xd8, 0x3a, 0x7c, 0x39, 0xe6, 0x90, 0x3d, 0xf3, - 0x44, 0x23, 0xcb, 0xe3, 0xa9, 0x97, 0x79, 0xc6, 0x1e, 0xf8, 0xa1, 0xde, - 0x0e, 0xe4, 0xed, 0x44, 0xce, 0xb1, 0x6c, 0xa2, 0xb0, 0xe6, 0x4e, 0x11, - 0xa3, 0xb8, 0xea, 0x35, 0x96, 0x16, 0x1d, 0x72, 0xce, 0x4f, 0xec, 0x8e, - 0xad, 0xf7, 0xa3, 0xde, 0x7b, 0x9b, 0x59, 0x83, 0xc7, 0xac, 0xfa, 0x68, - 0x7a, 0x32, 0x7b, 0x19, 0xd4, 0x43, 0xc3, 0x7c, 0xe8, 0xb9, 0x3f, 0x16, - 0x47, 0x5c, 0x63, 0x3d, 0x5c, 0xa2, 0xa4, 0x2a, 0x04, 0xc4, 0xae, 0x2e, - 0xa2, 0x2c, 0xee, 0xcf, 0x65, 0xb5, 0x0e, 0xdd, 0x67, 0x7e, 0x48, 0x84, - 0xf9, 0x28, 0x0b, 0xb5, 0x70, 0x1c, 0xd0, 0x1a, 0x0b, 0xdd, 0xfd, 0x34, - 0x27, 0x86, 0xc3, 0xfc, 0x2f, 0x1f, 0x9b, 0xb9, 0x1f, 0x10, 0xb0, 0x3c, - 0xb6, 0x9f, 0x28, 0xcd, 0xf4, 0xb1, 0xed, 0x6a, 0x89, 0xb7, 0xdd, 0x0b, - 0xbd, 0x01, 0x49, 0xec, 0xfa, 0x4e, 0xb3, 0x11, 0x2b, 0xb6, 0x4f, 0x82, - 0xe6, 0x53, 0x45, 0x7f, 0xdb, 0x39, 0x60, 0xc5, 0x81, 0xad, 0x2c, 0xa7, - 0x4f, 0xe7, 0x7d, 0x31, 0xcc, 0x10, 0xd6, 0x1a, 0x0e, 0xae, 0x9a, 0x1f, - 0x9d, 0x2c, 0xdc, 0xb1, 0xb7, 0x7d, 0x4b, 0xaa, 0x28, 0x3e, 0x0e, 0x5d, - 0x53, 0x2a, 0xca, 0xc1, 0xf4, 0xf1, 0x62, 0x10, 0x66, 0x9e, 0x08, 0x14, - 0x1f, 0xec, 0x64, 0x89, 0x7f, 0x0d, 0xdc, 0x33, 0x7e, 0xd9, 0x58, 0x16, - 0x5b, 0xad, 0xbf, 0x5c, 0x83, 0x35, 0x73, 0x81, 0x59, 0xee, 0x32, 0x6b, - 0x4d, 0x15, 0x83, 0x67, 0x3e, 0xf4, 0x02, 0x65, 0xfa, 0x7f, 0x2d, 0x78, - 0x76, 0x97, 0xa7, 0x77, 0x50, 0xa7, 0x34, 0x9f, 0x40, 0x26, 0xf0, 0x4c, - 0x74, 0xc2, 0xee, 0xf2, 0x4c, 0xf6, 0x1a, 0x68, 0x5b, 0xcf, 0xa4, 0x6e, - 0xc1, 0x28, 0x07, 0x96, 0x48, 0x17, 0xb4, 0x4d, 0xa8, 0x3f, 0x06, 0xe2, - 0x44, 0x8a, 0x00, 0x31, 0x0a, 0xec, 0x0e, 0xf0, 0x4e, 0x0e, 0xdc, 0x75, - 0x76, 0x52, 0xd5, 0x0f, 0x90, 0xeb, 0x82, 0x8b, 0x13, 0xe5, 0xc4, 0x2c, - 0x7b, 0x86, 0x3c, 0x40, 0xee, 0xed, 0x1b, 0xd5, 0x61, 0xff, 0x73, 0x65, - 0xe8, 0xac, 0x23, 0xd6, 0x55, 0xe3, 0x54, 0x2e, 0xda, 0x5e, 0x83, 0xb7, - 0xa1, 0x9e, 0x66, 0x32, 0x6e, 0x95, 0xbe, 0xa8, 0xc1, 0x99, 0x99, 0x1a, - 0x8c, 0xcf, 0x8d, 0x8a, 0x75, 0x64, 0x7b, 0x19, 0xb4, 0x16, 0x73, 0x6e, - 0x57, 0xa8, 0x50, 0x1e, 0x84, 0x5c, 0xfb, 0xc8, 0x29, 0xc9, 0xaa, 0x93, - 0xa8, 0x8c, 0x7a, 0x9a, 0x36, 0x6a, 0xbd, 0x21, 0xbe, 0x57, 0x19, 0xdf, - 0x93, 0x27, 0x74, 0x99, 0x1f, 0x5b, 0x8b, 0xb3, 0x2a, 0x3b, 0x3e, 0xb7, - 0xaa, 0xf4, 0xea, 0xdc, 0xe6, 0x61, 0x76, 0x60, 0xf5, 0x50, 0x20, 0x7b, - 0xe0, 0x56, 0x2d, 0xb2, 0x2b, 0x02, 0xaa, 0x4c, 0x0e, 0x6e, 0xf7, 0x34, - 0x2f, 0x35, 0xa4, 0xa7, 0x35, 0xa5, 0xc7, 0x1a, 0x78, 0xe7, 0x57, 0xdd, - 0x9e, 0x50, 0x9d, 0x2d, 0xab, 0xc7, 0x30, 0x56, 0x54, 0xed, 0xd2, 0xd2, - 0x21, 0xbd, 0x66, 0x1c, 0x61, 0x25, 0xf2, 0x58, 0xa8, 0xc1, 0x48, 0x68, - 0x4d, 0x4e, 0x3d, 0x29, 0xcf, 0x32, 0x78, 0xc2, 0x9f, 0xd0, 0x4f, 0x74, - 0x30, 0x8c, 0xf2, 0x38, 0xf7, 0x87, 0x07, 0xbd, 0xdb, 0x20, 0xad, 0xaa, - 0xc3, 0x6a, 0x2c, 0x93, 0x67, 0xa9, 0x0c, 0x57, 0x11, 0xe9, 0xae, 0x73, - 0xb3, 0xa7, 0x14, 0x11, 0xd1, 0xd5, 0xa1, 0x54, 0xec, 0x38, 0xc4, 0x65, - 0x65, 0xef, 0x63, 0x3f, 0x88, 0x4a, 0xec, 0xd0, 0x95, 0xf2, 0xc9, 0x7f, - 0xd2, 0x1f, 0x4b, 0x09, 0xba, 0x9a, 0xc4, 0x55, 0x35, 0x9a, 0xac, 0x00, - 0x86, 0xe6, 0x24, 0x53, 0xd3, 0x11, 0xc2, 0x5d, 0x84, 0xe5, 0x38, 0xe1, - 0xd8, 0xa2, 0x99, 0xb3, 0xd6, 0xa5, 0x0d, 0xad, 0xac, 0x20, 0x36, 0x1b, - 0xc4, 0x1f, 0x6a, 0x45, 0x41, 0x2f, 0x36, 0x97, 0x30, 0xc2, 0x39, 0x04, - 0xa9, 0xbd, 0xa5, 0xd1, 0x3b, 0xf4, 0xd7, 0x81, 0x1e, 0xf3, 0x1f, 0xce, - 0x1f, 0xe9, 0x91, 0xd8, 0x9f, 0xcc, 0x18, 0x4c, 0x80, 0x4e, 0x9e, 0xa0, - 0x32, 0x73, 0xf5, 0xc6, 0x80, 0x35, 0x7e, 0xd1, 0x23, 0x82, 0x43, 0x2d, - 0xe3, 0x75, 0xe7, 0x45, 0xc4, 0x17, 0xf2, 0x80, 0x3d, 0x5c, 0xa9, 0xa3, - 0x02, 0xe0, 0xaa, 0x3f, 0xc0, 0x7c, 0xf0, 0x89, 0x4d, 0x5e, 0xad, 0x95, - 0x01, 0x70, 0xa7, 0xdb, 0x23, 0xe3, 0x2d, 0x71, 0x67, 0x3a, 0xcd, 0xb4, - 0xf2, 0x54, 0x3c, 0x71, 0x4d, 0x09, 0x6e, 0x42, 0xc7, 0x34, 0xc3, 0x61, - 0x6f, 0xad, 0x50, 0xec, 0x0b, 0x32, 0x4b, 0x00, 0x38, 0xe1, 0x20, 0xc4, - 0xca, 0x2a, 0xc1, 0x93, 0xb9, 0x6e, 0xe0, 0xbf, 0x03, 0x4b, 0x2c, 0x49, - 0x15, 0x69, 0x73, 0xb4, 0x3d, 0x38, 0xe5, 0x75, 0x3c, 0xad, 0x61, 0xbd, - 0x0f, 0x6e, 0xc9, 0x31, 0x62, 0x20, 0x66, 0xd2, 0xef, 0xf0, 0x26, 0x99, - 0x46, 0x91, 0xc8, 0x01, 0x06, 0xb9, 0xd5, 0xed, 0x43, 0xe0, 0x99, 0x26, - 0xc7, 0x35, 0xba, 0xdb, 0x8e, 0xc2, 0xc3, 0xfe, 0x54, 0xc9, 0xdf, 0xf8, - 0x68, 0x4f, 0x2d, 0xef, 0x9d, 0x19, 0x1d, 0x2a, 0xab, 0xd5, 0xa0, 0xa7, - 0xa1, 0xe6, 0xf7, 0x76, 0x8e, 0x39, 0xd6, 0x37, 0xd2, 0xc0, 0x39, 0xb8, - 0x26, 0x35, 0x34, 0xcf, 0x3f, 0xbc, 0x7d, 0x1e, 0x27, 0xb3, 0xe8, 0xed, - 0xb0, 0xff, 0x2b, 0xd1, 0xd8, 0x62, 0x9a, 0x98, 0x2e, 0xda, 0xde, 0x26, - 0xb5, 0x46, 0x06, 0xd4, 0xfc, 0x5d, 0x6c, 0xf0, 0x27, 0x19, 0x48, 0x41, - 0xaa, 0x45, 0x0a, 0x7b, 0x36, 0x1c, 0x06, 0xe3, 0x2c, 0x66, 0xba, 0xfe, - 0xc1, 0xdd, 0xe9, 0x7f, 0x78, 0x6b, 0xb7, 0x99, 0x54, 0x2d, 0xa5, 0xee, - 0xd6, 0x18, 0xab, 0x35, 0x1c, 0x2a, 0x1a, 0x9c, 0x69, 0xb0, 0x0d, 0x08, - 0x80, 0x55, 0x94, 0xc0, 0x98, 0x51, 0x7d, 0x31, 0xa8, 0xe4, 0xce, 0xbb, - 0xc6, 0xe8, 0x8e, 0x2b, 0x67, 0xe3, 0x54, 0x61, 0x3b, 0x96, 0xcf, 0xca, - 0xb4, 0x06, 0xb6, 0x8a, 0x39, 0x31, 0x97, 0x89, 0x36, 0x51, 0x16, 0xd1, - 0x6b, 0x12, 0xff, 0xc0, 0xe0, 0x17, 0xb7, 0x5c, 0xcf, 0x54, 0xff, 0x40, - 0x34, 0x3b, 0xe5, 0x3b, 0x92, 0xea, 0x2b, 0x5e, 0x71, 0xd0, 0xa5, 0xf0, - 0x2d, 0x1e, 0xd3, 0x6d, 0x15, 0x5d, 0xe3, 0xc8, 0xbe, 0x18, 0x0c, 0x65, - 0x1d, 0x4e, 0x37, 0x01, 0x7f, 0x66, 0xdd, 0xbf, 0x6c, 0x32, 0x0d, 0xbe, - 0xd5, 0x23, 0x53, 0xd7, 0x9f, 0x83, 0xe7, 0x83, 0x48, 0xaf, 0xff, 0xc8, - 0x6a, 0x76, 0x89, 0xe2, 0x78, 0x05, 0x18, 0x6f, 0xcc, 0x00, 0xad, 0x2f, - 0x66, 0xe0, 0x33, 0xa4, 0x98, 0x79, 0x79, 0xf4, 0x53, 0x99, 0x6c, 0xf9, - 0x04, 0xb3, 0x2a, 0xff, 0xc3, 0xc5, 0xce, 0x4f, 0x94, 0x51, 0xd1, 0xe2, - 0x80, 0x39, 0x30, 0x43, 0xaf, 0x3a, 0x3e, 0x80, 0xeb, 0xf0, 0x23, 0x38, - 0x44, 0x37, 0x45, 0x9a, 0x79, 0xf5, 0x20, 0xae, 0x53, 0xa6, 0x11, 0xd9, - 0x1e, 0xb9, 0x2c, 0x37, 0x52, 0x52, 0xa7, 0xbd, 0xa7, 0x8e, 0xdd, 0x3a, - 0x46, 0xbe, 0x70, 0x75, 0x4d, 0xb5, 0x9e, 0x94, 0x1a, 0xc1, 0xfa, 0xf8, - 0x53, 0x2d, 0x19, 0xbe, 0x4a, 0x4b, 0x86, 0x30, 0x35, 0xf4, 0x3f, 0x11, - 0x52, 0x2f, 0x06, 0xd0, 0x36, 0xb0, 0x42, 0x1b, 0x92, 0x26, 0x38, 0xec, - 0x6d, 0xe8, 0x13, 0x6b, 0x30, 0x9a, 0xae, 0x6c, 0x95, 0xf4, 0xb2, 0xd6, - 0x67, 0x62, 0xd7, 0xc6, 0x80, 0xd5, 0x8a, 0x2b, 0xc4, 0x43, 0x11, 0x81, - 0x74, 0xce, 0xe1, 0x0c, 0x29, 0xfd, 0xa1, 0x79, 0xf1, 0xcc, 0x41, 0xe3, - 0x8f, 0x0c, 0xdd, 0x21, 0x4b, 0xc3, 0xf4, 0xed, 0xf6, 0xbd, 0x0b, 0x3a, - 0x18, 0x42, 0x6e, 0xc5, 0x00, 0xf9, 0x77, 0xdf, 0x73, 0x5a, 0x3f, 0xe7, - 0x22, 0xbb, 0x18, 0x38, 0x24, 0x6a, 0x54, 0x2a, 0xb2, 0x94, 0x02, 0x93, - 0x8a, 0x18, 0x7d, 0xc6, 0xb9, 0x8f, 0x4d, 0x99, 0x1f, 0x17, 0x17, 0x10, - 0x4d, 0x8a, 0x46, 0xaa, 0x6f, 0x89, 0x4a, 0xbe, 0x2a, 0x15, 0x36, 0x28, - 0xb8, 0x0a, 0xec, 0x39, 0x22, 0xf9, 0x64, 0xba, 0x2f, 0x19, 0x8a, 0xbb, - 0xce, 0x59, 0x5f, 0x7e, 0xc7, 0x62, 0x94, 0x4a, 0x12, 0x35, 0xd7, 0xf1, - 0x6b, 0x39, 0x8a, 0xa5, 0x63, 0xb3, 0x50, 0x56, 0x21, 0x57, 0x20, 0x51, - 0x33, 0x5d, 0x07, 0xf7, 0x2e, 0xee, 0x1b, 0xef, 0x0d, 0xb3, 0xb2, 0x0b, - 0x6f, 0x81, 0x9a, 0x5b, 0xb9, 0xc4, 0x58, 0x37, 0x5d, 0x3f, 0x50, 0xe7, - 0x67, 0xe3, 0xb3, 0x64, 0x89, 0xa3, 0xb7, 0x1b, 0x85, 0x6c, 0x8c, 0xde, - 0x32, 0x0c, 0xd8, 0xa4, 0xf9, 0x37, 0x4d, 0x68, 0xd4, 0x6e, 0x72, 0x4c, - 0xd1, 0x1e, 0xf3, 0x8c, 0x45, 0x21, 0x18, 0x17, 0x7e, 0x58, 0xae, 0x0d, - 0x99, 0xe9, 0x8d, 0xe6, 0x8d, 0x52, 0x88, 0xe9, 0x66, 0xb9, 0x5a, 0x2f, - 0x26, 0x00, 0xf2, 0xe1, 0x7c, 0xa2, 0x8e, 0x35, 0x98, 0x98, 0xfa, 0xa7, - 0xee, 0xb6, 0x4f, 0x61, 0xb7, 0x63, 0x90, 0xd3, 0xfd, 0xac, 0xed, 0x2a, - 0x14, 0x00, 0xc1, 0x0c, 0xa7, 0x18, 0xe0, 0x89, 0x4c, 0x5a, 0x41, 0x69, - 0xcc, 0x67, 0xe8, 0x1c, 0x4d, 0x7e, 0x01, 0x98, 0x38, 0x75, 0xa5, 0x90, - 0x6e, 0x54, 0xa0, 0xf8, 0x1f, 0x57, 0x1a, 0x43, 0x4d, 0x2b, 0xd6, 0x4b, - 0xbe, 0xb9, 0x94, 0x1c, 0x28, 0x5c, 0x47, 0x11, 0xaf, 0xb3, 0x8d, 0x61, - 0xd2, 0x8e, 0xab, 0xd8, 0xea, 0xc7, 0xad, 0xe7, 0x7a, 0x0b, 0x39, 0x42, - 0x45, 0xbf, 0x94, 0x66, 0xae, 0xbe, 0x1b, 0xd5, 0x8d, 0xd4, 0x06, 0xb8, - 0x9a, 0x68, 0x54, 0x1d, 0x5d, 0xf2, 0x85, 0xe6, 0x64, 0x1d, 0xfe, 0xbd, - 0xde, 0x34, 0x2d, 0x58, 0x40, 0x71, 0xe4, 0x41, 0xa4, 0xf2, 0x21, 0xa9, - 0x17, 0x1c, 0x5f, 0xe6, 0xee, 0x67, 0xe1, 0x04, 0x7c, 0xc9, 0xa9, 0x32, - 0x9d, 0x7b, 0x3f, 0x35, 0x0d, 0x06, 0x22, 0x1e, 0xd7, 0xb3, 0xc2, 0xbd, - 0x05, 0x5b, 0x0f, 0x1a, 0x38, 0x13, 0xe2, 0x45, 0xc1, 0x7e, 0x1a, 0x6b, - 0x93, 0x3d, 0x52, 0xa9, 0x53, 0x23, 0xaa, 0x77, 0x30, 0xf7, 0x9c, 0xe2, - 0x69, 0x71, 0x40, 0x77, 0x62, 0x5d, 0xe6, 0x72, 0xfe, 0x14, 0x98, 0xc2, - 0xf9, 0x34, 0x4e, 0x35, 0xa2, 0x69, 0xa4, 0x15, 0x74, 0xb9, 0xb0, 0x1b, - 0xbe, 0xe3, 0x5e, 0xe2, 0x2e, 0x22, 0xd7, 0x69, 0xe6, 0x68, 0x17, 0xa0, - 0x52, 0x28, 0xa2, 0x37, 0x08, 0x96, 0x61, 0x45, 0xea, 0x42, 0x79, 0x6a, - 0x4a, 0xda, 0x1c, 0x2a, 0x13, 0x4b, 0xd6, 0x00, 0xdf, 0x60, 0x08, 0x29, - 0x26, 0xe9, 0x56, 0xd3, 0xbc, 0x24, 0x85, 0xa2, 0xb5, 0xd4, 0xeb, 0x59, - 0x4b, 0x77, 0x34, 0x39, 0x77, 0x8b, 0xc5, 0xea, 0xc9, 0x38, 0xe8, 0x9a, - 0x44, 0x9d, 0xa3, 0x4d, 0xa1, 0x0c, 0x2d, 0x8d, 0x78, 0x36, 0xfa, 0xea, - 0xa8, 0x21, 0xde, 0xb0, 0x41, 0x60, 0x93, 0xc4, 0xc4, 0xcd, 0x3b, 0x33, - 0xb9, 0x5e, 0x62, 0x74, 0xcd, 0x74, 0xfe, 0xa4, 0xb2, 0x17, 0x03, 0x1b, - 0xfa, 0x4d, 0x03, 0x68, 0x89, 0x46, 0x58, 0xb2, 0x61, 0x1c, 0x33, 0xfe, - 0xfd, 0xc0, 0x20, 0x38, 0x46, 0x9d, 0x2b, 0x41, 0x18, 0xae, 0x1c, 0x26, - 0xc0, 0x15, 0x68, 0x77, 0x17, 0xbb, 0x9c, 0x14, 0x8b, 0xa0, 0x7e, 0x9c, - 0xb1, 0x34, 0xa2, 0x37, 0x80, 0x24, 0x43, 0xa2, 0xb0, 0x2a, 0x4d, 0xec, - 0xb3, 0x02, 0x65, 0xf6, 0xe4, 0x46, 0xcd, 0x35, 0x94, 0x77, 0xdd, 0x71, - 0xc7, 0x8d, 0x3e, 0x26, 0xd9, 0x98, 0x14, 0x91, 0x93, 0x48, 0xb4, 0xa0, - 0x97, 0x5d, 0x0d, 0x41, 0x61, 0x5e, 0xb0, 0x17, 0x4d, 0x84, 0xd5, 0xc2, - 0x00, 0x36, 0x53, 0x24, 0x7c, 0x39, 0x45, 0xb8, 0x3f, 0x0c, 0x6f, 0xfd, - 0xd1, 0x59, 0x6e, 0x20, 0xeb, 0x35, 0x40, 0x37, 0xdc, 0x5b, 0xc1, 0xef, - 0x0f, 0xc5, 0x2f, 0x54, 0x47, 0x9c, 0x70, 0xb0, 0x5c, 0x3d, 0x05, 0x8e, - 0x11, 0xdc, 0x6e, 0x77, 0x0c, 0xfb, 0xe3, 0xa4, 0x26, 0x81, 0xea, 0xdf, - 0x5f, 0x4f, 0xd0, 0x5f, 0xa8, 0x58, 0x4c, 0x7f, 0x8f, 0xcd, 0x9c, 0xfd, - 0x4c, 0xd2, 0x1b, 0x9c, 0x7e, 0xd4, 0x7b, 0x59, 0xfa, 0xe6, 0xe1, 0x92, - 0xeb, 0x39, 0xc2, 0xe0, 0x18, 0x94, 0x63, 0x84, 0x31, 0x0f, 0x09, 0x6a, - 0x9e, 0xe8, 0xc5, 0x20, 0xe7, 0x88, 0x48, 0xd5, 0x3c, 0xd0, 0xdd, 0x7a, - 0x83, 0xf9, 0x9c, 0x48, 0xb6, 0x05, 0xd2, 0xa3, 0x58, 0x44, 0x13, 0x43, - 0xed, 0x54, 0x80, 0x3a, 0x7c, 0x41, 0xe4, 0xdf, 0x97, 0x70, 0x15, 0xe5, - 0x9e, 0x3e, 0x2f, 0xf0, 0xbd, 0x45, 0x52, 0xf6, 0xb0, 0x29, 0x0a, 0x19, - 0x60, 0x0d, 0xb0, 0xa7, 0x40, 0x4a, 0x48, 0xa4, 0xf9, 0xc4, 0x3b, 0x5d, - 0xf2, 0xaf, 0xcc, 0x02, 0x79, 0x26, 0x6c, 0xaa, 0xda, 0x3f, 0x15, 0x49, - 0x4d, 0x12, 0xc6, 0x20, 0x7a, 0xbe, 0xb1, 0x3f, 0xb0, 0xd1, 0x8f, 0x8d, - 0x87, 0x06, 0xbe, 0x60, 0x64, 0xa5, 0x83, 0x44, 0x29, 0x51, 0x71, 0x51, - 0x45, 0xfc, 0xfa, 0x71, 0xa7, 0x2c, 0xfa, 0x73, 0x68, 0xee, 0x71, 0xb4, - 0xff, 0x09, 0x1d, 0x95, 0xd1, 0x74, 0x39, 0xcb, 0x21, 0x4f, 0x60, 0xe6, - 0x02, 0x71, 0xeb, 0x68, 0x82, 0x8f, 0x58, 0x4b, 0x0e, 0xca, 0xb5, 0x00, - 0x7d, 0x40, 0xb7, 0x58, 0x5d, 0x05, 0xb2, 0xf3, 0x28, 0x72, 0x53, 0x28, - 0x8a, 0xfe, 0xd7, 0xae, 0xb9, 0x6a, 0xa3, 0xe1, 0xde, 0x22, 0x92, 0x22, - 0xe5, 0xe2, 0x3e, 0xd8, 0xfc, 0xc7, 0x06, 0x4d, 0xc3, 0xff, 0x58, 0x75, - 0x1e, 0x0f, 0x35, 0x38, 0xce, 0x72, 0x0e, 0xbe, 0xff, 0xc3, 0x76, 0xcf, - 0xf3, 0x30, 0x1e, 0x73, 0xff, 0xd6, 0xd9, 0xef, 0x9a, 0xfb, 0x8a, 0xfb, - 0xe8, 0x1d, 0xdc, 0x52, 0x43, 0xf5, 0x28, 0x64, 0xd8, 0x54, 0x0d, 0xda, - 0xcd, 0xe2, 0x2b, 0x7b, 0xfa, 0xd3, 0x4a, 0x61, 0x15, 0x4b, 0x3d, 0x3d, - 0x1f, 0xed, 0xa3, 0xac, 0xaa, 0x82, 0xd1, 0x3e, 0x55, 0xbd, 0x65, 0xcb, - 0x94, 0x6f, 0xdb, 0xfa, 0xa2, 0x54, 0xea, 0x7e, 0xed, 0xa3, 0xa5, 0x8a, - 0x12, 0x2f, 0x78, 0x50, 0xd9, 0xde, 0x07, 0xf2, 0xed, 0xf7, 0x81, 0xab, - 0x41, 0x7d, 0xcc, 0x29, 0x9b, 0xbf, 0xb5, 0x6c, 0x51, 0xd9, 0x78, 0xff, - 0x65, 0xe7, 0xae, 0xd0, 0x7c, 0x7f, 0x62, 0x2e, 0x4e, 0xd6, 0xae, 0xc6, - 0xed, 0x42, 0xa5, 0x76, 0xe3, 0x3b, 0xef, 0x7d, 0xc6, 0x71, 0x6d, 0xa9, - 0xe2, 0xcf, 0x3f, 0xbe, 0x3e, 0xcd, 0x97, 0x6b, 0xd5, 0xfe, 0xe2, 0xba, - 0xf4, 0x35, 0x55, 0xdb, 0xff, 0x58, 0x34, 0x2f, 0x12, 0x1f, 0xaa, 0xdc, - 0x6e, 0xa5, 0xd7, 0xe5, 0x11, 0xfe, 0xb5, 0x3b, 0x3b, 0x9b, 0x94, 0x4b, - 0xcf, 0xf5, 0x4c, 0x2b, 0x6f, 0x5a, 0x77, 0x0b, 0xe6, 0xfc, 0xfa, 0x9e, - 0x62, 0xbb, 0x7c, 0xaf, 0xef, 0x07, 0x1d, 0x80, 0x7d, 0xa1, 0xd2, 0x1d, - 0xa1, 0xaf, 0x56, 0x75, 0xcd, 0xe6, 0x08, 0x81, 0xbc, 0xb0, 0xe9, 0xde, - 0x79, 0xe5, 0x9d, 0xbd, 0xce, 0xf8, 0x9a, 0x47, 0x65, 0x74, 0x0c, 0xa5, - 0xe3, 0x8f, 0x9e, 0xdb, 0xff, 0x49, 0x13, 0x75, 0x6d, 0xff, 0xf3, 0x61, - 0xab, 0x5d, 0x73, 0x35, 0x0f, 0xd0, 0xf7, 0xd2, 0xb8, 0x2e, 0x3f, 0x4a, - 0x1b, 0xf3, 0x85, 0xc5, 0x7d, 0x5a, 0xbb, 0x92, 0x28, 0xd5, 0xc6, 0xc1, - 0x3c, 0xb0, 0xd1, 0x10, 0xcc, 0x3e, 0xf4, 0x9f, 0x52, 0x87, 0x9a, 0xba, - 0x90, 0x36, 0x48, 0x90, 0xb4, 0xcc, 0xde, 0xce, 0xd5, 0x15, 0x68, 0xbb, - 0xc5, 0x3e, 0xbc, 0x3b, 0xc6, 0x66, 0xa4, 0xeb, 0x57, 0x33, 0xe5, 0x36, - 0xdf, 0x2e, 0xbe, 0xde, 0x0b, 0x1a, 0xf6, 0x86, 0xa7, 0xe5, 0x75, 0xef, - 0x8a, 0x76, 0x5d, 0x76, 0xc8, 0xe2, 0xcb, 0x4f, 0x5f, 0xbd, 0x6d, 0xb2, - 0xd7, 0x72, 0x38, 0x74, 0x73, 0x07, 0x7b, 0xb6, 0x37, 0x07, 0x2e, 0x1d, - 0xd3, 0xc7, 0x70, 0xb6, 0xe0, 0xe3, 0x38, 0xd0, 0x17, 0x5b, 0x9f, 0xfe, - 0xe2, 0xac, 0x46, 0xcd, 0xda, 0xc3, 0x23, 0x3a, 0x06, 0x65, 0xd2, 0xe8, - 0xdd, 0x21, 0x81, 0x6c, 0x3c, 0x16, 0x28, 0x96, 0x05, 0xa1, 0xe5, 0x0f, - 0x34, 0x70, 0xe3, 0xac, 0xfb, 0x9f, 0x38, 0xf0, 0xee, 0x34, 0xe4, 0x3b, - 0xc0, 0x4e, 0x34, 0xb3, 0xe2, 0xb2, 0xae, 0x57, 0xef, 0x58, 0xbb, 0x6c, - 0xb4, 0x49, 0xf2, 0x48, 0x30, 0x54, 0x34, 0x45, 0xbb, 0xf2, 0xaa, 0x55, - 0xfa, 0xe5, 0x3d, 0x7e, 0x7a, 0x25, 0xf1, 0xb4, 0xbe, 0xff, 0xe1, 0x59, - 0x48, 0xad, 0x31, 0xce, 0x75, 0x45, 0xde, 0xa0, 0xf7, 0xfe, 0x36, 0x92, - 0x65, 0x51, 0x41, 0x9f, 0x16, 0x61, 0x01, 0x33, 0xac, 0xa6, 0x88, 0x8e, - 0x97, 0xcb, 0x57, 0x55, 0x58, 0xce, 0x31, 0x69, 0x4d, 0x81, 0x4f, 0x60, - 0x79, 0x5d, 0xc7, 0xa3, 0x5a, 0x6f, 0x41, 0xf5, 0x88, 0x6d, 0xd2, 0xe4, - 0xcd, 0xc9, 0xe4, 0xad, 0xc8, 0xf4, 0xa6, 0x81, 0x35, 0x8e, 0x19, 0x09, - 0xfa, 0x91, 0xd0, 0x18, 0x07, 0x9c, 0xb3, 0x2f, 0x6c, 0xcc, 0x31, 0x65, - 0x27, 0xa8, 0xad, 0x2f, 0x19, 0x0e, 0x35, 0xb4, 0xcc, 0x51, 0x3b, 0x6e, - 0xb1, 0x4a, 0x31, 0x70, 0xf5, 0x81, 0x88, 0x5b, 0x07, 0xe5, 0x48, 0xe9, - 0xc8, 0xba, 0x75, 0x4d, 0xc0, 0xbf, 0x5b, 0x9e, 0xc2, 0xaa, 0xda, 0xac, - 0x63, 0xbc, 0x9d, 0xd5, 0xbb, 0xb0, 0x54, 0xd9, 0xcb, 0xff, 0xf9, 0x74, - 0x40, 0xc8, 0xd7, 0xf3, 0xe6, 0x43, 0xf9, 0x75, 0x68, 0xd4, 0x71, 0x5c, - 0x43, 0x21, 0x6e, 0x60, 0xe6, 0x0d, 0xef, 0x9a, 0x4d, 0x3e, 0x8b, 0xf0, - 0xbb, 0xe9, 0xfb, 0xab, 0xe9, 0x53, 0xed, 0x05, 0x0f, 0x2c, 0xbc, 0x7f, - 0x61, 0x05, 0xf0, 0x6a, 0xb6, 0x9a, 0x81, 0xf0, 0xbc, 0x2e, 0x4c, 0xf8, - 0x3e, 0x55, 0x2a, 0x4f, 0x6f, 0x28, 0x4f, 0x15, 0x6f, 0xfc, 0x86, 0x38, - 0x4f, 0x8c, 0x1b, 0xe8, 0xd9, 0xc0, 0xda, 0x00, 0xbd, 0xda, 0xf8, 0x67, - 0x85, 0xc8, 0x74, 0x9c, 0x64, 0xee, 0x19, 0x66, 0x5d, 0xf0, 0xcd, 0xa1, - 0x5b, 0x5b, 0x37, 0xd0, 0x42, 0xda, 0xaa, 0xf2, 0xba, 0xca, 0xd0, 0x83, - 0x4d, 0x56, 0x31, 0x15, 0x37, 0x3a, 0x73, 0x44, 0x49, 0xa0, 0x8c, 0x35, - 0xb8, 0xfe, 0x54, 0x18, 0x17, 0xdf, 0x13, 0x63, 0xee, 0xd1, 0xa9, 0x69, - 0xea, 0x74, 0x34, 0x7d, 0x2b, 0x68, 0x02, 0xb7, 0xe1, 0x4a, 0xc4, 0x12, - 0x70, 0x4c, 0x8e, 0x4e, 0xd2, 0x3d, 0xb4, 0x92, 0x80, 0x39, 0x03, 0xd9, - 0x30, 0x9d, 0x0d, 0x01, 0x50, 0xb5, 0x9b, 0xfd, 0x96, 0xf4, 0x8a, 0xeb, - 0x13, 0xd9, 0x41, 0x8a, 0xa8, 0x5a, 0x81, 0xa1, 0xf5, 0x84, 0x02, 0x6a, - 0xc4, 0x9a, 0xb2, 0xab, 0x43, 0x4a, 0x50, 0x97, 0x0a, 0xc3, 0xcf, 0x3c, - 0x7c, 0x64, 0x3b, 0xe3, 0x46, 0x81, 0x0e, 0x76, 0x0e, 0xf2, 0x5a, 0x98, - 0x6e, 0xb6, 0x2f, 0x24, 0xdd, 0x01, 0x9d, 0x6a, 0xc1, 0xec, 0x87, 0x5a, - 0x2a, 0x05, 0x12, 0xfa, 0xa9, 0x00, 0x39, 0x02, 0x5e, 0x4e, 0x61, 0xd6, - 0x44, 0x82, 0x3d, 0x09, 0x1c, 0x9b, 0xa8, 0x1c, 0xac, 0x92, 0x45, 0x01, - 0xcc, 0x68, 0x85, 0x8c, 0x52, 0xcc, 0x4c, 0xa0, 0x86, 0x79, 0x58, 0x03, - 0x56, 0x14, 0xc0, 0x6f, 0x58, 0x96, 0xba, 0xae, 0x20, 0xac, 0x0f, 0x20, - 0xa5, 0x48, 0x01, 0x4e, 0xa1, 0xf5, 0xfa, 0x68, 0x2e, 0xab, 0xb2, 0x2a, - 0x72, 0x9b, 0x87, 0x5b, 0x5a, 0xaa, 0x6d, 0x26, 0xd1, 0x7d, 0xb2, 0x92, - 0x5b, 0xa9, 0xc0, 0x12, 0x6c, 0x64, 0xac, 0x63, 0x65, 0x8a, 0x98, 0xd3, - 0xe1, 0x5c, 0x5d, 0xcc, 0x35, 0x94, 0xb3, 0x0b, 0xff, 0xcc, 0x4e, 0x78, - 0xb6, 0x5e, 0x70, 0x0e, 0xea, 0x5d, 0x79, 0x30, 0xf1, 0xbc, 0xf3, 0xcc, - 0x2e, 0xbe, 0xc7, 0xfe, 0x80, 0x92, 0x1b, 0x15, 0x2a, 0x9f, 0x8f, 0xed, - 0xbf, 0xc3, 0x28, 0x4e, 0x38, 0xe2, 0x1e, 0x0a, 0xfb, 0x33, 0x6d, 0x29, - 0x69, 0x8a, 0x02, 0x85, 0x7c, 0xf1, 0x76, 0x84, 0xcc, 0x44, 0x7b, 0x88, - 0xf9, 0xd1, 0x12, 0x87, 0x54, 0x03, 0x9d, 0x81, 0xbc, 0xe1, 0x59, 0xfc, - 0xd8, 0x29, 0x00, 0x9f, 0xb1, 0x05, 0x5d, 0x92, 0x26, 0xef, 0x4b, 0x42, - 0xcc, 0xd6, 0x4d, 0x2c, 0x31, 0x2a, 0x58, 0xa6, 0xb1, 0xc8, 0x64, 0x83, - 0xb5, 0xd4, 0xab, 0xd3, 0xb1, 0xfa, 0xe2, 0x31, 0x11, 0x20, 0xb0, 0x89, - 0x4e, 0x3d, 0x99, 0x50, 0x4b, 0xc1, 0x28, 0x5c, 0xc3, 0xa1, 0x80, 0x46, - 0x5c, 0x0b, 0x4f, 0xf9, 0xca, 0x33, 0x0f, 0x10, 0x24, 0x54, 0xee, 0x61, - 0xd4, 0x2a, 0x34, 0x30, 0x73, 0x05, 0x34, 0x6b, 0xd3, 0x30, 0x2d, 0x8b, - 0x3b, 0xdb, 0x65, 0x52, 0x92, 0x37, 0x10, 0x5d, 0xe7, 0xba, 0x91, 0x41, - 0xe8, 0xa9, 0xc4, 0x98, 0x59, 0x1f, 0x34, 0x2b, 0xa2, 0x1c, 0x0f, 0x9a, - 0x9e, 0x9b, 0x8e, 0xd9, 0x3b, 0x86, 0x29, 0xcd, 0x6d, 0xbe, 0x48, 0x5c, - 0xdd, 0xfb, 0x9b, 0x3c, 0xf1, 0x1f, 0x6a, 0xd9, 0x7b, 0x0e, 0x2a, 0x49, - 0x36, 0x0b, 0x1d, 0x6e, 0x03, 0x81, 0x92, 0xff, 0x4c, 0x92, 0x07, 0xa1, - 0xa6, 0x01, 0x7e, 0x32, 0x52, 0x2d, 0x16, 0x2e, 0x4f, 0x7d, 0x0d, 0xee, - 0x81, 0x6e, 0x02, 0x7d, 0x0d, 0xc6, 0xf0, 0x90, 0xcb, 0xa3, 0xcb, 0x73, - 0x62, 0xd9, 0x87, 0x5a, 0x9b, 0x6b, 0xd0, 0xe6, 0x0c, 0x9c, 0x12, 0xe8, - 0x70, 0x77, 0x28, 0xbb, 0xb9, 0x55, 0xbf, 0x27, 0x67, 0xc2, 0xfc, 0x50, - 0xb8, 0x92, 0xba, 0xf6, 0xe5, 0xe4, 0x52, 0x58, 0xeb, 0x55, 0xe2, 0xca, - 0x6a, 0x83, 0xb9, 0x2a, 0xcb, 0x02, 0xa3, 0x59, 0xbb, 0x81, 0xdf, 0xda, - 0x5e, 0x3d, 0xbd, 0x7a, 0x91, 0xd6, 0xc8, 0xb4, 0x01, 0xb7, 0x3c, 0x77, - 0xb5, 0x3d, 0x4f, 0x17, 0x5c, 0x30, 0x74, 0xfa, 0x6b, 0x9d, 0x25, 0x61, - 0x14, 0x49, 0x70, 0xd0, 0x0a, 0x25, 0xb1, 0x75, 0x0e, 0xb5, 0x67, 0xe0, - 0x1a, 0xd8, 0x46, 0x50, 0x97, 0x85, 0x0c, 0xbb, 0x59, 0x47, 0x28, 0x64, - 0xda, 0x59, 0xec, 0xe0, 0xaf, 0x2d, 0x3c, 0x3f, 0x89, 0x2d, 0x18, 0x76, - 0x1c, 0x38, 0x18, 0x5e, 0xa5, 0x20, 0xd7, 0x68, 0x2c, 0xc4, 0xac, 0xbe, - 0x20, 0xb7, 0xfa, 0xed, 0x48, 0x09, 0x62, 0x06, 0xb3, 0x13, 0x39, 0x5d, - 0x24, 0x1a, 0x26, 0xd4, 0xec, 0x3a, 0x4b, 0xed, 0x77, 0x0a, 0x72, 0xa3, - 0x11, 0xd3, 0x56, 0x9a, 0x39, 0xb4, 0x4f, 0x90, 0x39, 0x3a, 0x0e, 0x2a, - 0x26, 0x7c, 0x07, 0xa1, 0x63, 0xf8, 0x45, 0xc5, 0xb3, 0xc4, 0x08, 0xea, - 0x0e, 0x56, 0x63, 0x8a, 0xf6, 0x75, 0x56, 0x48, 0x15, 0x92, 0xc4, 0x35, - 0x3d, 0x56, 0x41, 0xf0, 0x1f, 0x54, 0xc3, 0x56, 0xac, 0x97, 0xf8, 0xfb, - 0x5d, 0x87, 0xe7, 0x56, 0xf3, 0xdb, 0xb8, 0xf2, 0x3c, 0xe8, 0xbc, 0xee, - 0x68, 0xfa, 0xac, 0x78, 0x98, 0x47, 0x79, 0x15, 0x07, 0x51, 0x83, 0xb5, - 0xb3, 0x98, 0xd6, 0x06, 0x77, 0x45, 0xd8, 0xcf, 0xbb, 0xff, 0x99, 0x70, - 0xff, 0x3b, 0xd3, 0x0e, 0x7e, 0x19, 0x7a, 0x3c, 0x0f, 0xd7, 0xa9, 0xb7, - 0x38, 0xd3, 0x3f, 0x61, 0xb7, 0x38, 0xa3, 0xb9, 0x08, 0x76, 0xeb, 0x9d, - 0xa9, 0x41, 0x86, 0x86, 0xc5, 0x18, 0xba, 0x55, 0xd5, 0x8b, 0x8e, 0xea, - 0x56, 0x40, 0xa7, 0x86, 0xd1, 0x71, 0xa9, 0xf6, 0xa1, 0xfd, 0x90, 0xcc, - 0xe6, 0x9e, 0xa7, 0x99, 0xf5, 0x1d, 0x08, 0x37, 0x2e, 0x28, 0x49, 0xbc, - 0xf7, 0xc6, 0x5f, 0x66, 0x5a, 0x45, 0xb8, 0x8d, 0x55, 0x2a, 0x8c, 0x90, - 0xa6, 0x72, 0x9d, 0x6b, 0xb0, 0x33, 0x0d, 0x6e, 0xe1, 0xae, 0xae, 0xf4, - 0x55, 0x80, 0x3d, 0xdf, 0x7a, 0xcd, 0xb7, 0xea, 0x34, 0xdf, 0xf4, 0x10, - 0x03, 0xd4, 0x78, 0x3a, 0x3f, 0x3d, 0xfe, 0xbc, 0x68, 0x2f, 0x94, 0x08, - 0x9d, 0x85, 0xc3, 0x63, 0x11, 0x78, 0xd6, 0x11, 0x91, 0x71, 0x4f, 0x9f, - 0xc6, 0xae, 0xae, 0x50, 0xd4, 0xc3, 0x6d, 0x1a, 0x45, 0x2b, 0xc7, 0x07, - 0x90, 0x40, 0x61, 0x19, 0xbb, 0x62, 0x49, 0xeb, 0xe1, 0x96, 0x39, 0xae, - 0x3a, 0x05, 0x73, 0x84, 0x22, 0x3c, 0x30, 0xe7, 0x33, 0xe0, 0x31, 0xef, - 0x21, 0x4e, 0x05, 0x4e, 0xbd, 0x7d, 0xea, 0x31, 0xc3, 0xe2, 0xa7, 0x3a, - 0xaf, 0xbc, 0x34, 0xce, 0xa1, 0xb5, 0xf9, 0x37, 0x95, 0x84, 0x60, 0x58, - 0x0d, 0x1a, 0xc7, 0x78, 0xcf, 0x2e, 0xda, 0x73, 0x8b, 0x8f, 0x88, 0x8a, - 0x7d, 0xc3, 0x35, 0x61, 0xf1, 0x32, 0xc6, 0xe4, 0x74, 0x19, 0x88, 0xd6, - 0x31, 0x79, 0x89, 0x22, 0x2e, 0xd5, 0x09, 0x56, 0xb2, 0xe2, 0x01, 0x65, - 0x92, 0x08, 0xb8, 0x74, 0x19, 0xb6, 0xb1, 0x7a, 0xb9, 0xde, 0x2e, 0x94, - 0x22, 0x83, 0xb6, 0x98, 0xa1, 0x86, 0x90, 0x5c, 0x35, 0xa5, 0xc3, 0x23, - 0xf0, 0xa2, 0xa4, 0xeb, 0xeb, 0xdd, 0xc6, 0x81, 0xf5, 0xf4, 0xf6, 0x18, - 0x94, 0x4e, 0x8e, 0x33, 0x57, 0x68, 0x70, 0x00, 0x69, 0x7b, 0x04, 0xeb, - 0x6d, 0xcd, 0xcc, 0xf4, 0x5b, 0xb6, 0x74, 0x4e, 0x91, 0x88, 0xdc, 0xa7, - 0x33, 0x7f, 0xa5, 0x2f, 0x76, 0x31, 0x0d, 0x71, 0xb1, 0x2f, 0xac, 0xc9, - 0x28, 0xd9, 0xc0, 0x4f, 0x01, 0x5c, 0x20, 0x11, 0x96, 0xbe, 0xa9, 0x3e, - 0x85, 0xef, 0xb6, 0xc9, 0x1e, 0xdc, 0x93, 0x42, 0x07, 0x3d, 0xd7, 0x3d, - 0xac, 0x73, 0xf8, 0xf5, 0xe6, 0x5b, 0xa5, 0x0e, 0x3c, 0x01, 0xd0, 0x13, - 0xcf, 0x39, 0x7d, 0x60, 0x8f, 0x87, 0xd8, 0xd3, 0x10, 0x3b, 0xab, 0x06, - 0x79, 0x31, 0x0c, 0x01, 0xdb, 0x67, 0x52, 0x9f, 0xcd, 0x89, 0x11, 0x98, - 0xcf, 0xe5, 0xa9, 0x34, 0x71, 0xfb, 0xd9, 0xeb, 0xbf, 0x73, 0x7b, 0xcf, - 0x78, 0x14, 0xd1, 0xb4, 0xde, 0xfa, 0x76, 0xf5, 0x56, 0x77, 0x6a, 0x57, - 0x9c, 0xfc, 0x3d, 0xaa, 0xeb, 0xb6, 0x6b, 0x0b, 0x86, 0xf7, 0x18, 0x50, - 0x10, 0x84, 0x1c, 0xea, 0x7d, 0xb8, 0x93, 0x30, 0x93, 0xe0, 0x19, 0xee, - 0xb5, 0xa7, 0x0b, 0x04, 0xad, 0xc9, 0xb2, 0x2c, 0xb8, 0xab, 0xd3, 0x41, - 0x94, 0x19, 0x9d, 0x1f, 0x15, 0xc8, 0x02, 0xda, 0xfb, 0x05, 0xd0, 0xd2, - 0x8e, 0xa3, 0xc8, 0x34, 0x17, 0xda, 0x00, 0xfa, 0x49, 0x3a, 0x1a, 0x49, - 0x66, 0xa9, 0x19, 0x00, 0x11, 0x7f, 0x81, 0x67, 0x7c, 0x0c, 0xdd, 0xca, - 0x16, 0x28, 0x92, 0xbe, 0xed, 0xa9, 0xa2, 0xea, 0x9b, 0x92, 0xe8, 0x6e, - 0x6d, 0x78, 0x9e, 0xd4, 0xa8, 0x39, 0xd3, 0x1e, 0x94, 0x28, 0xd6, 0x59, - 0x97, 0xdf, 0x38, 0x52, 0xb7, 0x7a, 0x93, 0xb8, 0x8e, 0xab, 0xb4, 0x6d, - 0xfa, 0x6c, 0x0d, 0x3d, 0x79, 0x02, 0x09, 0x40, 0x52, 0x44, 0x06, 0x78, - 0x80, 0x47, 0x80, 0x6f, 0xe6, 0xb3, 0x8e, 0x95, 0x77, 0x47, 0x19, 0xa1, - 0x28, 0x0f, 0x40, 0x13, 0xe9, 0x74, 0x26, 0x76, 0x81, 0xd7, 0x90, 0xde, - 0x24, 0x52, 0xf8, 0xed, 0x9e, 0x50, 0x73, 0xc4, 0x77, 0x48, 0x2c, 0x57, - 0x18, 0x23, 0xef, 0x3e, 0x62, 0x0a, 0x66, 0x13, 0x64, 0xda, 0x41, 0xf5, - 0x51, 0x88, 0x96, 0x00, 0xee, 0x5c, 0xdb, 0xbf, 0x40, 0x18, 0x6d, 0x0a, - 0x29, 0xd8, 0x58, 0x93, 0x11, 0xe4, 0xd7, 0x6c, 0xbb, 0xab, 0xeb, 0x3d, - 0xa5, 0xcb, 0xfc, 0xcd, 0xd0, 0x45, 0xca, 0xf7, 0x7b, 0xd8, 0xa2, 0x67, - 0xc1, 0x3b, 0xb4, 0x1d, 0xc7, 0xf5, 0x9e, 0x67, 0x35, 0x1c, 0x00, 0xe1, - 0x0e, 0xfa, 0x4f, 0x5a, 0x4e, 0xdc, 0xab, 0x6a, 0x14, 0xc7, 0x74, 0xfe, - 0xa5, 0xcf, 0xb6, 0xe3, 0xf1, 0x10, 0x2d, 0x4e, 0x53, 0x21, 0xdc, 0xe9, - 0x0f, 0x16, 0x2c, 0xa2, 0x2d, 0xfb, 0xa8, 0x65, 0x0f, 0x94, 0xad, 0x98, - 0x9e, 0xa7, 0x2a, 0xd8, 0x9d, 0x70, 0x71, 0x8a, 0xcc, 0xe4, 0x44, 0x4e, - 0xe2, 0xd0, 0xbe, 0x63, 0x0a, 0x73, 0x11, 0x61, 0x04, 0xbc, 0x8e, 0xf9, - 0x42, 0xe7, 0x55, 0xb1, 0xae, 0x61, 0x7a, 0xc3, 0x31, 0xc3, 0xc8, 0x4a, - 0x32, 0xf5, 0x69, 0x28, 0x36, 0x26, 0x5e, 0x44, 0x54, 0xd0, 0x00, 0x3c, - 0xa6, 0xe2, 0x73, 0x54, 0xa1, 0xee, 0x25, 0x4a, 0x9d, 0xb3, 0xae, 0xe3, - 0x31, 0x47, 0xa6, 0x3f, 0xaa, 0x12, 0x63, 0xc7, 0xf0, 0x3a, 0x8d, 0x2c, - 0x30, 0x38, 0x14, 0x1f, 0xcf, 0x80, 0x03, 0xfa, 0xba, 0x10, 0x41, 0xb5, - 0x3b, 0xbb, 0xe2, 0xf8, 0x57, 0x03, 0x6a, 0x50, 0x7f, 0xfe, 0x33, 0xad, - 0x37, 0x7d, 0xf1, 0x9f, 0xda, 0x69, 0xa3, 0xaf, 0x6b, 0x03, 0x75, 0x83, - 0xa5, 0x7d, 0x12, 0x32, 0xfd, 0x03, 0x78, 0xa5, 0xbc, 0x5c, 0x5a, 0x9b, - 0x23, 0xe7, 0xbb, 0x67, 0xe1, 0x05, 0x7b, 0x8d, 0x29, 0x40, 0x71, 0x50, - 0x1f, 0xbe, 0xaa, 0xa7, 0x57, 0xf5, 0x62, 0x13, 0xc4, 0xe8, 0xcf, 0x17, - 0x15, 0x2c, 0xcd, 0x62, 0xd6, 0x95, 0xbb, 0xc2, 0x20, 0x23, 0x93, 0x6d, - 0xc0, 0xb5, 0xac, 0x10, 0xbb, 0xfa, 0x14, 0xc3, 0xb9, 0x15, 0x70, 0x62, - 0xc4, 0xb0, 0x1e, 0x18, 0xf5, 0x62, 0x02, 0xbd, 0x66, 0xaf, 0xe7, 0xed, - 0xae, 0xd7, 0x54, 0xbb, 0x19, 0xd7, 0x00, 0x4f, 0x50, 0x07, 0xfb, 0xbe, - 0x37, 0x44, 0x82, 0x40, 0xf3, 0xd1, 0x3e, 0xd5, 0x7f, 0xc7, 0xc4, 0x52, - 0xd4, 0x0d, 0x59, 0x0a, 0x17, 0x64, 0xeb, 0x70, 0x03, 0xb7, 0x16, 0x32, - 0x09, 0x00, 0xe1, 0x84, 0x5a, 0x19, 0x41, 0x6d, 0xd4, 0x9e, 0x02, 0x84, - 0x4d, 0x75, 0x14, 0x08, 0x91, 0x6f, 0x03, 0xef, 0x1d, 0x82, 0x0e, 0x54, - 0x2c, 0xaf, 0x00, 0x3c, 0xb0, 0x92, 0x1b, 0x4e, 0x6c, 0x30, 0xe6, 0x84, - 0xc3, 0x18, 0x00, 0xcd, 0xf4, 0x0c, 0xce, 0xad, 0x92, 0x82, 0x61, 0x6e, - 0x6e, 0x18, 0xec, 0x85, 0xe7, 0xd9, 0x8b, 0xef, 0x66, 0xe3, 0xf6, 0x6a, - 0x09, 0x4c, 0x4b, 0xd4, 0xe5, 0x9a, 0x2a, 0x8e, 0x74, 0x98, 0x7f, 0x9b, - 0xb7, 0x70, 0xdb, 0x2f, 0xae, 0xbc, 0xf4, 0xc7, 0xd0, 0x67, 0x29, 0xb9, - 0x78, 0xe1, 0x66, 0xaf, 0x05, 0x8f, 0xa6, 0x15, 0x3c, 0xb9, 0x0a, 0xf0, - 0x28, 0x44, 0x9d, 0x82, 0xf0, 0x54, 0xb5, 0x83, 0x03, 0x29, 0xf3, 0x21, - 0x2e, 0xab, 0xd1, 0x90, 0x21, 0xae, 0x0f, 0x49, 0x4f, 0x3e, 0x69, 0x89, - 0x29, 0x82, 0x41, 0x8e, 0x5e, 0x05, 0x63, 0x35, 0xa5, 0x8e, 0x2d, 0xdb, - 0x28, 0x05, 0x77, 0xbe, 0x5c, 0xa6, 0x1a, 0x36, 0x76, 0x10, 0xe7, 0xee, - 0xd1, 0xc8, 0x3b, 0x2a, 0x56, 0x0f, 0x27, 0x3f, 0x12, 0xd6, 0x19, 0xdb, - 0x63, 0xab, 0x45, 0x43, 0x44, 0x12, 0x45, 0x47, 0xd7, 0xc9, 0x88, 0x3e, - 0xad, 0x07, 0x67, 0x51, 0x01, 0x03, 0xd1, 0xe5, 0x77, 0xf5, 0xba, 0xb5, - 0x24, 0xe5, 0x2f, 0xf8, 0xa6, 0x08, 0xb2, 0x38, 0x97, 0xb9, 0x03, 0xf6, - 0x99, 0x6c, 0x85, 0xfe, 0x1a, 0x6d, 0x9f, 0x0e, 0x9c, 0xdf, 0xe7, 0x5f, - 0x71, 0x6b, 0x6d, 0xdc, 0x22, 0xb2, 0xd5, 0xe6, 0x24, 0xec, 0xb5, 0xa5, - 0x70, 0x5d, 0x5e, 0x9a, 0xee, 0xf5, 0xd4, 0x29, 0x5e, 0x4f, 0xbd, 0xd6, - 0xf5, 0xc4, 0x8b, 0x67, 0x27, 0x0d, 0x26, 0x1c, 0xca, 0xd6, 0xda, 0x15, - 0xf6, 0xf2, 0xd6, 0x79, 0x55, 0xa7, 0xbc, 0xdf, 0x32, 0xe2, 0x8f, 0x9b, - 0x67, 0x04, 0x59, 0x06, 0x2d, 0x27, 0xdb, 0x87, 0x56, 0xb1, 0xac, 0xa2, - 0x6f, 0x6b, 0x48, 0xb9, 0x35, 0x25, 0xef, 0x84, 0xac, 0xb9, 0xa4, 0x29, - 0x5e, 0x1b, 0x8c, 0x67, 0xbd, 0x41, 0x9c, 0x21, 0x0c, 0x4c, 0xbd, 0x7f, - 0x6c, 0xe5, 0xab, 0xa0, 0xdb, 0xba, 0xe7, 0xe8, 0xca, 0x5c, 0x84, 0x8d, - 0x54, 0x5f, 0x8c, 0xd9, 0x50, 0x34, 0x9b, 0x32, 0x9a, 0x44, 0x22, 0x4b, - 0xa3, 0x47, 0xef, 0xf4, 0xcc, 0x07, 0xf3, 0xcb, 0x81, 0xc2, 0xae, 0x95, - 0x2a, 0xd0, 0x67, 0x7b, 0x2c, 0x11, 0x58, 0xcc, 0xe2, 0x86, 0xbd, 0xda, - 0x1a, 0x96, 0x0f, 0xc8, 0xb5, 0x92, 0x3c, 0x06, 0x7f, 0x72, 0xd5, 0x30, - 0xdb, 0xd0, 0x3c, 0xf8, 0x43, 0x1b, 0x35, 0x6e, 0x42, 0x75, 0x6d, 0x12, - 0xcc, 0xd3, 0x49, 0x0e, 0x1e, 0x59, 0x7c, 0x94, 0x2f, 0xc6, 0xeb, 0x7e, - 0xb5, 0xd8, 0x3c, 0xec, 0x4d, 0x19, 0xe9, 0xb3, 0x76, 0x6a, 0x10, 0xac, - 0x01, 0xcb, 0xe6, 0xf4, 0x97, 0xfa, 0x6d, 0x8d, 0xcb, 0x61, 0x13, 0xc5, - 0x68, 0xce, 0x84, 0x39, 0xaa, 0x38, 0x96, 0x54, 0x5b, 0x39, 0x61, 0x59, - 0xaf, 0x4d, 0x8d, 0xa8, 0x73, 0xe1, 0x88, 0x58, 0x8e, 0x62, 0xea, 0xa7, - 0xbb, 0xf1, 0x2b, 0x28, 0x81, 0x3c, 0xea, 0xd7, 0xd4, 0x75, 0x67, 0xaf, - 0x49, 0xcf, 0x9b, 0x78, 0x8e, 0xe1, 0x12, 0xcb, 0x43, 0x0d, 0xfb, 0x1a, - 0xdb, 0xb7, 0x85, 0x5c, 0x6c, 0xad, 0x9d, 0x7e, 0x65, 0xa4, 0xef, 0x05, - 0xc3, 0xc7, 0xfc, 0x46, 0x5a, 0xb5, 0x72, 0xe6, 0x0c, 0xa8, 0x7d, 0xed, - 0x6c, 0xbf, 0x0b, 0x8e, 0x44, 0x19, 0xb5, 0x2c, 0xe6, 0x8a, 0x85, 0xb5, - 0x1c, 0x4f, 0xca, 0xf1, 0xa1, 0x09, 0xb1, 0x91, 0x3d, 0x44, 0x47, 0xf0, - 0xbe, 0x52, 0xf5, 0x95, 0x70, 0xbd, 0xa1, 0x4c, 0x16, 0xd2, 0x0e, 0xa2, - 0xbe, 0xdb, 0x57, 0x7a, 0x0e, 0x10, 0x74, 0x7b, 0x62, 0x31, 0x32, 0x81, - 0xae, 0xbc, 0x0e, 0x6c, 0x20, 0xcc, 0x14, 0x28, 0x02, 0x88, 0x8b, 0xcf, - 0x8c, 0xa1, 0xa8, 0xea, 0xd3, 0x67, 0x87, 0xcf, 0xe1, 0xa0, 0x2c, 0xff, - 0x33, 0xd9, 0xdb, 0x6a, 0x56, 0xf2, 0x84, 0xb6, 0x5d, 0xad, 0x08, 0x3c, - 0xfb, 0x15, 0x0b, 0x63, 0x6e, 0x14, 0x35, 0xc5, 0xe9, 0x2b, 0xdf, 0x64, - 0xb5, 0x2c, 0x1f, 0xd1, 0xce, 0x3d, 0xd3, 0x3b, 0xe4, 0x83, 0xcc, 0x39, - 0xc2, 0x7f, 0x24, 0x0c, 0x8c, 0x48, 0x14, 0x14, 0x10, 0x06, 0xde, 0x00, - 0x4c, 0x95, 0xd1, 0x43, 0xf4, 0xc6, 0xe4, 0x82, 0x72, 0xf0, 0x85, 0x53, - 0x14, 0xc9, 0xad, 0xb8, 0x50, 0xcc, 0xb2, 0x10, 0x8c, 0x3e, 0x9d, 0x38, - 0x0c, 0x75, 0x1d, 0x55, 0x3b, 0x45, 0x86, 0x33, 0xd4, 0x8a, 0x2d, 0xd3, - 0x0d, 0x8a, 0x0d, 0xf3, 0x05, 0xd5, 0xe4, 0x39, 0x79, 0x7b, 0x61, 0x80, - 0xbb, 0x04, 0x4f, 0x2c, 0x4e, 0x3e, 0x31, 0x71, 0x3f, 0xdf, 0x02, 0xba, - 0x2b, 0x9b, 0xd0, 0xe7, 0x9d, 0x84, 0x4f, 0xd2, 0x54, 0x6d, 0x5c, 0x94, - 0x94, 0x88, 0x23, 0x14, 0xa1, 0x92, 0x2a, 0x72, 0x87, 0x93, 0xa2, 0xa3, - 0x18, 0xb8, 0xc2, 0xcd, 0x96, 0x9b, 0xb3, 0xdc, 0xe1, 0x02, 0x5e, 0x82, - 0x32, 0xc5, 0xd3, 0xc3, 0x83, 0x38, 0xaf, 0x73, 0x05, 0x9c, 0x95, 0x3c, - 0x27, 0xcc, 0xc5, 0x35, 0x91, 0x14, 0xae, 0x85, 0xae, 0xb1, 0xfe, 0x4c, - 0x73, 0xd7, 0xe7, 0x54, 0xaf, 0xb6, 0x26, 0xc6, 0x45, 0xb7, 0x6e, 0xad, - 0x7b, 0xf1, 0x00, 0xb3, 0x28, 0x7b, 0x2e, 0x7f, 0xb9, 0x2a, 0x1b, 0x5c, - 0xe1, 0xee, 0x38, 0xd0, 0x0c, 0xed, 0x39, 0x72, 0xc0, 0xde, 0x4e, 0x54, - 0x9f, 0x1b, 0xd0, 0xf3, 0x46, 0xc3, 0x5c, 0x51, 0x57, 0xac, 0xd6, 0x73, - 0xbb, 0x73, 0x98, 0xd6, 0x3a, 0x50, 0x4e, 0xea, 0xa8, 0x4f, 0xf7, 0x9c, - 0xaf, 0x35, 0x9e, 0xab, 0xa7, 0xef, 0x64, 0x69, 0x9d, 0x7e, 0x6a, 0x9e, - 0xc6, 0x6a, 0xe0, 0xd3, 0x2f, 0xd0, 0x04, 0x48, 0x38, 0x4a, 0x0e, 0x30, - 0x2d, 0x6b, 0x3c, 0xac, 0xf9, 0xe5, 0x62, 0xe4, 0x4f, 0x1e, 0x3b, 0x15, - 0x09, 0xd6, 0x53, 0xd9, 0x26, 0xd9, 0x8e, 0xbd, 0x16, 0x4d, 0xcb, 0x99, - 0xbb, 0xa2, 0xb1, 0x9c, 0x9b, 0xa3, 0x75, 0x60, 0xe1, 0x9e, 0x74, 0xbe, - 0x0a, 0xc0, 0xca, 0x9d, 0x97, 0xeb, 0xa9, 0x4e, 0xcd, 0x31, 0x76, 0x3e, - 0x21, 0x71, 0x4f, 0x8c, 0x5d, 0xf1, 0x53, 0x20, 0x41, 0x0e, 0x3d, 0x96, - 0xf9, 0xbf, 0x2d, 0xf6, 0xde, 0x42, 0x6f, 0x42, 0xc1, 0x0e, 0x56, 0xc9, - 0x29, 0x2a, 0xfd, 0xe4, 0x37, 0xa8, 0x13, 0x9d, 0xb3, 0xc4, 0x1f, 0x84, - 0x67, 0x07, 0x5b, 0xb5, 0xd2, 0x47, 0xe7, 0xe1, 0x45, 0x59, 0x51, 0x21, - 0x91, 0x81, 0xda, 0x16, 0xf0, 0xd6, 0x1f, 0xca, 0x97, 0x3a, 0x8c, 0x94, - 0x91, 0x91, 0xff, 0x5a, 0xb6, 0x70, 0xed, 0x8f, 0x8f, 0xd4, 0x9f, 0x9c, - 0xb4, 0x2d, 0xb2, 0x9e, 0x7c, 0xac, 0xf2, 0x44, 0xc3, 0x22, 0xab, 0xec, - 0x8f, 0x76, 0x99, 0x83, 0xa7, 0x69, 0xdb, 0x23, 0xc1, 0x10, 0x94, 0x4f, - 0x01, 0xba, 0x22, 0x1e, 0xec, 0xe9, 0x4c, 0xf1, 0xd2, 0xb0, 0xed, 0xb3, - 0x3b, 0xcf, 0xb3, 0x27, 0x60, 0xcf, 0x6d, 0xa1, 0x16, 0x2c, 0xf6, 0xb1, - 0xdc, 0x8d, 0xd7, 0x3c, 0xe8, 0x49, 0xcc, 0xa3, 0xbf, 0x11, 0x83, 0xdf, - 0xbd, 0x18, 0xee, 0xad, 0xe8, 0xd5, 0xc4, 0xd5, 0xb4, 0x19, 0x60, 0x90, - 0x18, 0x10, 0x0d, 0x8b, 0x97, 0x2a, 0x67, 0x94, 0x1a, 0x31, 0x6a, 0x41, - 0xea, 0x5a, 0x04, 0xa1, 0x2f, 0x45, 0x38, 0xee, 0xac, 0x3f, 0xb5, 0xf0, - 0x1a, 0xab, 0x88, 0x3d, 0x93, 0xba, 0x1b, 0xc8, 0x83, 0xd3, 0x1b, 0xfa, - 0x55, 0xe4, 0x8e, 0x3e, 0x5f, 0x4e, 0x3e, 0xee, 0x84, 0xa7, 0xaf, 0x66, - 0x7f, 0xf0, 0xc9, 0xfe, 0xae, 0x9f, 0xec, 0x15, 0xff, 0x93, 0xe3, 0x49, - 0x66, 0x71, 0xcd, 0xec, 0x1c, 0xf4, 0x95, 0xba, 0x22, 0x6a, 0x30, 0x08, - 0x5d, 0x3d, 0x69, 0x24, 0xba, 0xc2, 0x4b, 0xea, 0xaa, 0x4c, 0x9c, 0x92, - 0x53, 0x57, 0xb1, 0x49, 0xd3, 0x5f, 0x7a, 0x1e, 0x73, 0x86, 0x19, 0x3d, - 0xfd, 0xf3, 0xd4, 0xf9, 0xe0, 0xf4, 0x9f, 0xfd, 0x9e, 0x96, 0xf4, 0xff, - 0x8e, 0xda, 0xd9, 0x03, 0x46, 0x67, 0x4d, 0xad, 0xfa, 0xf1, 0xce, 0x64, - 0x3a, 0x79, 0xe0, 0xff, 0x42, 0x48, 0x9b, 0xe0, 0xd3, 0xbb, 0xe2, 0x5b, - 0x1b, 0x5a, 0x75, 0x37, 0xab, 0xc3, 0xda, 0xe1, 0x1b, 0xbb, 0xf7, 0xf1, - 0x55, 0x9f, 0x6c, 0x2d, 0xfe, 0x3b, 0x24, 0xa9, 0x69, 0x14, 0xad, 0x60, - 0x8d, 0x8d, 0x1c, 0xf5, 0x19, 0xe1, 0x7a, 0xa0, 0x01, 0xf3, 0x6e, 0xe9, - 0x5a, 0x07, 0x5b, 0xf5, 0x7b, 0xc7, 0xd5, 0x41, 0x1c, 0xcd, 0x05, 0x8e, - 0x08, 0x9c, 0x53, 0x2c, 0xba, 0x61, 0x68, 0x6b, 0xce, 0x98, 0xc7, 0x86, - 0xd7, 0x08, 0x74, 0xcd, 0x6f, 0x52, 0xea, 0xcd, 0x10, 0xe0, 0x7a, 0xa9, - 0x07, 0xe6, 0xc3, 0x1b, 0xa0, 0xcc, 0xf1, 0x3d, 0xd1, 0xec, 0x52, 0x41, - 0x8d, 0x39, 0x9d, 0xc1, 0x22, 0xc7, 0xd0, 0x9e, 0xad, 0xf5, 0x72, 0x31, - 0xf1, 0x54, 0x0b, 0x5e, 0xb3, 0x54, 0x37, 0x65, 0x12, 0x40, 0x8c, 0x13, - 0xb9, 0xa5, 0x6c, 0x68, 0xbc, 0x3b, 0xdc, 0xd2, 0xee, 0x09, 0xdf, 0xfb, - 0x2f, 0x57, 0x45, 0x71, 0xfe, 0x3b, 0xc2, 0xe5, 0x4b, 0xe6, 0xd0, 0x52, - 0x58, 0x85, 0x96, 0x80, 0xb3, 0x24, 0xd8, 0x1d, 0xd6, 0xf0, 0xc9, 0xd4, - 0x50, 0x5f, 0x75, 0x93, 0x3c, 0x18, 0xcf, 0xcd, 0x57, 0xa6, 0xe0, 0x19, - 0x5a, 0x3f, 0x1b, 0x85, 0xc7, 0x70, 0x11, 0xf0, 0xfa, 0x8d, 0xe1, 0xbe, - 0x0c, 0xf5, 0x12, 0x0c, 0xe0, 0x24, 0x2b, 0x77, 0xa5, 0xed, 0x8a, 0x72, - 0xe1, 0xf7, 0xe0, 0xbd, 0x9a, 0xee, 0x30, 0x84, 0x73, 0xeb, 0xfd, 0x9a, - 0xc9, 0xaf, 0xd7, 0x34, 0xaa, 0x82, 0x4e, 0xca, 0x8c, 0x32, 0x14, 0xd3, - 0x86, 0x82, 0x0a, 0x41, 0x6f, 0xbb, 0xfa, 0x90, 0x32, 0xe2, 0x0f, 0xb9, - 0x63, 0x5f, 0x5b, 0xd5, 0xcd, 0xbe, 0x24, 0xae, 0xbf, 0xc0, 0x30, 0x5e, - 0xfb, 0x3a, 0xdd, 0x79, 0x61, 0x35, 0xd8, 0x9b, 0x77, 0xf7, 0x06, 0xbd, - 0x9b, 0x34, 0xe4, 0x02, 0x87, 0x42, 0xea, 0x5f, 0x0c, 0xc7, 0xc1, 0x25, - 0xc2, 0x57, 0xd8, 0xfa, 0xe5, 0xd7, 0x80, 0xbb, 0x4c, 0xdd, 0x4b, 0x4b, - 0xc8, 0x04, 0x92, 0x36, 0x2b, 0x25, 0x4d, 0x6b, 0xa2, 0xb0, 0xc3, 0xf0, - 0x08, 0x1b, 0xb7, 0x30, 0x47, 0x0d, 0xb1, 0x0a, 0x2f, 0x16, 0x4e, 0xd8, - 0x14, 0x2c, 0x33, 0x75, 0xf1, 0x60, 0xb8, 0x41, 0xd7, 0x94, 0xf9, 0x14, - 0xcd, 0x68, 0x30, 0x0b, 0x6d, 0xf3, 0xad, 0x65, 0x7c, 0x6e, 0xa7, 0x60, - 0x80, 0x99, 0xdd, 0x3c, 0x8b, 0xe4, 0x56, 0xfe, 0x41, 0x72, 0x93, 0x1c, - 0x22, 0xf6, 0xa7, 0xbb, 0xfa, 0x7b, 0x03, 0x4a, 0x52, 0x8e, 0x23, 0x64, - 0x98, 0x08, 0xd7, 0x51, 0x0b, 0x18, 0xf5, 0x13, 0x9c, 0x2a, 0x4b, 0x70, - 0xbf, 0x42, 0xbc, 0x50, 0x5b, 0x87, 0xc5, 0x55, 0x95, 0x57, 0xa7, 0x37, - 0x11, 0x4e, 0x68, 0x0c, 0x40, 0x62, 0x04, 0x24, 0xa2, 0x80, 0x12, 0x7e, - 0x52, 0xa6, 0x10, 0x73, 0xdc, 0xda, 0xba, 0x14, 0xee, 0x93, 0x17, 0xa0, - 0xe3, 0x52, 0xa5, 0x5e, 0xcb, 0x71, 0x8d, 0x0a, 0x51, 0x0e, 0x2c, 0xa3, - 0xbb, 0xe3, 0x23, 0xce, 0xed, 0xc4, 0x8d, 0x1a, 0x02, 0xf5, 0x85, 0xc9, - 0x28, 0x75, 0x2f, 0x8c, 0xfb, 0xcb, 0xa9, 0x0c, 0xb7, 0xee, 0xfb, 0x09, - 0xd9, 0xf5, 0x0a, 0x39, 0x2c, 0x0c, 0x8c, 0xc3, 0xa3, 0x6f, 0xb0, 0x58, - 0x54, 0x19, 0x04, 0x34, 0x96, 0x11, 0x62, 0x69, 0x13, 0x62, 0x89, 0x00, - 0x8c, 0xd9, 0x73, 0xc7, 0x68, 0x94, 0x23, 0x8b, 0xeb, 0x59, 0x3d, 0x01, - 0xd7, 0x92, 0xd7, 0x5b, 0x30, 0xb3, 0x68, 0xa1, 0xab, 0xd7, 0x9d, 0xb1, - 0x41, 0xc9, 0x65, 0x1a, 0x1a, 0xc7, 0x31, 0x88, 0x33, 0x79, 0x4a, 0x5d, - 0x24, 0xaa, 0x28, 0xdb, 0x75, 0x90, 0x76, 0x25, 0x42, 0xad, 0x23, 0x3b, - 0x28, 0x8e, 0x94, 0x55, 0x82, 0xd9, 0x2d, 0x67, 0x9e, 0x7a, 0x76, 0xf8, - 0x14, 0xe0, 0x90, 0xc4, 0xc0, 0x33, 0x02, 0x61, 0x6f, 0x45, 0xaa, 0xd6, - 0x93, 0xb0, 0x38, 0xe5, 0xac, 0x15, 0x88, 0x59, 0x05, 0x50, 0x87, 0x1c, - 0xb8, 0xda, 0x93, 0xf5, 0x06, 0x20, 0x7b, 0xd2, 0xca, 0xd3, 0x49, 0x84, - 0xc5, 0xed, 0x5a, 0x81, 0x22, 0xb2, 0x77, 0x21, 0x38, 0xc7, 0x38, 0xa8, - 0x0e, 0xc6, 0x29, 0x9b, 0x77, 0x41, 0xbd, 0xcb, 0x23, 0xe1, 0x32, 0x53, - 0x01, 0x25, 0x2e, 0xcf, 0x0a, 0x10, 0x57, 0x3e, 0xf2, 0xc5, 0xf1, 0xe5, - 0x28, 0x54, 0x61, 0x10, 0x07, 0x0e, 0xb6, 0xeb, 0xe1, 0xc1, 0x1c, 0x38, - 0x72, 0x01, 0xa1, 0x34, 0x4f, 0xd3, 0x31, 0x2b, 0x4f, 0xa1, 0x3d, 0x81, - 0x53, 0xca, 0x2d, 0xa9, 0xa1, 0xd8, 0x78, 0xa6, 0x78, 0x73, 0x91, 0xc6, - 0x8d, 0x56, 0x6b, 0x42, 0x05, 0xc0, 0x5d, 0x18, 0x38, 0xe9, 0xfc, 0x06, - 0xe4, 0x59, 0x77, 0x0e, 0xf0, 0x85, 0x0f, 0x22, 0xac, 0x82, 0xa9, 0x2e, - 0x54, 0xbc, 0x07, 0x6e, 0xb6, 0xd5, 0x8e, 0x81, 0x86, 0xcc, 0xcb, 0x86, - 0x6c, 0x7b, 0x72, 0xa9, 0x04, 0x24, 0x3e, 0xf5, 0x13, 0x12, 0xf4, 0x3d, - 0xe2, 0x39, 0xd7, 0x0d, 0x83, 0x4d, 0x26, 0x14, 0x5a, 0x53, 0x39, 0x4e, - 0xe1, 0x2d, 0x53, 0x99, 0xf4, 0x40, 0xf1, 0xc5, 0x71, 0x4b, 0x99, 0x53, - 0xf4, 0x14, 0xd8, 0x2e, 0x52, 0x5f, 0xb7, 0x59, 0x94, 0x74, 0x33, 0x49, - 0x9f, 0x5e, 0xc2, 0xf9, 0xfb, 0x55, 0xc5, 0xe1, 0x99, 0x79, 0x8d, 0xb0, - 0x80, 0xe2, 0xa0, 0x66, 0x0c, 0x02, 0x8c, 0x04, 0x71, 0x45, 0x0f, 0x33, - 0xb9, 0xe0, 0x14, 0x11, 0x03, 0xde, 0x58, 0x46, 0x36, 0x5e, 0xb5, 0x44, - 0xaa, 0x97, 0x44, 0xff, 0x8b, 0x8b, 0x61, 0xae, 0x4e, 0xd9, 0x95, 0x32, - 0x23, 0x2a, 0xb3, 0x77, 0xcc, 0x7e, 0x36, 0xc6, 0x53, 0xbc, 0xf9, 0x01, - 0x67, 0xba, 0xb3, 0xae, 0xf4, 0x4f, 0xbd, 0x4f, 0x90, 0x31, 0xf5, 0x57, - 0x10, 0xfe, 0xff, 0x37, 0x0d, 0xc2, 0xf6, 0xee, 0x99, 0xc6, 0xa6, 0x3d, - 0x68, 0x92, 0x8f, 0xe5, 0x39, 0xe9, 0xd1, 0x4a, 0xb9, 0x04, 0x81, 0x84, - 0x13, 0x1e, 0x9b, 0x0e, 0x2f, 0x6a, 0xcc, 0x0e, 0x93, 0x0b, 0x93, 0x00, - 0x9d, 0xf0, 0x49, 0x68, 0x67, 0x70, 0x10, 0x0d, 0x40, 0xe3, 0xf8, 0x91, - 0x63, 0x49, 0x00, 0x40, 0x61, 0x3e, 0x52, 0x9c, 0x09, 0x09, 0xac, 0xb4, - 0x3e, 0x7c, 0xb3, 0x6a, 0xdb, 0xa7, 0xa5, 0x0d, 0x1c, 0xc8, 0x45, 0x84, - 0x80, 0x2c, 0x9b, 0xd6, 0x06, 0x36, 0xcb, 0x57, 0x58, 0xe6, 0xab, 0x4c, - 0x95, 0xa4, 0x3d, 0x73, 0xfd, 0x04, 0xbd, 0xaa, 0x06, 0x4c, 0x44, 0x10, - 0x76, 0xc1, 0x52, 0x1e, 0xbf, 0x37, 0xe8, 0x94, 0xdd, 0x66, 0x54, 0x70, - 0xbc, 0x9e, 0xf8, 0x16, 0x91, 0xb7, 0xbb, 0x8b, 0x83, 0x29, 0x42, 0x7c, - 0xb7, 0xa2, 0x4a, 0xbb, 0x17, 0xe5, 0x6d, 0x89, 0xb0, 0xb4, 0xbb, 0x1b, - 0xab, 0xbd, 0xba, 0xd4, 0x1e, 0xca, 0x3e, 0x28, 0x49, 0xb6, 0x1d, 0xf8, - 0x17, 0x17, 0xf2, 0x72, 0x64, 0xf6, 0xe8, 0x52, 0xf6, 0xc1, 0xb2, 0x38, - 0x83, 0x72, 0xc0, 0x1c, 0x1d, 0xf2, 0x7e, 0xc5, 0x1f, 0xf9, 0x0b, 0x37, - 0x57, 0x09, 0x50, 0x4b, 0x45, 0x29, 0x08, 0xbb, 0x59, 0xcc, 0x79, 0xbc, - 0x20, 0x09, 0xea, 0x15, 0x80, 0xeb, 0x90, 0x99, 0x4c, 0xb8, 0xa8, 0x43, - 0x64, 0x2c, 0x2f, 0x61, 0x66, 0x42, 0x13, 0xa2, 0x3c, 0xc8, 0x1b, 0xc0, - 0x20, 0xca, 0x23, 0x42, 0x5c, 0x80, 0xe1, 0x58, 0x94, 0xf7, 0xd6, 0xbf, - 0x4e, 0xe7, 0x92, 0xfc, 0x30, 0x5d, 0x10, 0x10, 0xe9, 0x86, 0xeb, 0xc1, - 0x33, 0x7a, 0xc7, 0x9f, 0xef, 0x67, 0x9e, 0x62, 0x5e, 0x5e, 0xff, 0xed, - 0x71, 0xfa, 0xc7, 0x71, 0x57, 0x0c, 0xc9, 0x7e, 0x3d, 0xfb, 0x28, 0x7a, - 0x8c, 0x4e, 0x60, 0xd6, 0x38, 0x9b, 0x88, 0x19, 0x30, 0x4b, 0x20, 0x80, - 0xf8, 0x75, 0xe0, 0x3d, 0xf4, 0x84, 0x24, 0xab, 0x56, 0xc4, 0x1c, 0x30, - 0x80, 0xd8, 0xa9, 0x37, 0x94, 0x2f, 0x99, 0x17, 0x7c, 0x10, 0xf7, 0xc7, - 0x04, 0x1b, 0x8f, 0x52, 0x4d, 0x4e, 0x03, 0x38, 0xc0, 0xd1, 0x89, 0xaf, - 0x95, 0x38, 0x8e, 0x87, 0xb1, 0xc4, 0x51, 0x19, 0x7f, 0xf0, 0xe0, 0x75, - 0x35, 0x9e, 0xde, 0x60, 0xfd, 0xd9, 0xec, 0x44, 0x77, 0xe0, 0xec, 0xdf, - 0x9c, 0xbf, 0x5b, 0x93, 0x7f, 0xd8, 0xeb, 0x29, 0x06, 0x20, 0x9b, 0x88, - 0x4e, 0xd7, 0xaf, 0x67, 0xd5, 0xc6, 0x5d, 0xd0, 0x7b, 0xe7, 0xa2, 0x3e, - 0xb2, 0x61, 0xa4, 0x72, 0xc9, 0x9d, 0xbc, 0xbd, 0xcc, 0xe4, 0xf7, 0xd9, - 0x4a, 0x4e, 0xd1, 0xfb, 0x9e, 0xb3, 0xcc, 0xfa, 0x89, 0xce, 0xf9, 0x92, - 0xd6, 0x8f, 0x17, 0x95, 0x73, 0xb6, 0x71, 0x2c, 0xca, 0x50, 0x1e, 0xca, - 0x36, 0x85, 0x5d, 0x5a, 0x3b, 0xd7, 0xe1, 0x32, 0x48, 0x0b, 0xaa, 0x2d, - 0x72, 0xed, 0xb1, 0xc0, 0xb5, 0x4f, 0xff, 0x1d, 0x6a, 0xf3, 0x76, 0x48, - 0x2a, 0x61, 0x8a, 0x86, 0x2c, 0x3d, 0x98, 0x3e, 0xec, 0xd7, 0xed, 0x98, - 0xb2, 0xee, 0xdd, 0xa2, 0xec, 0x5e, 0xd7, 0x64, 0x81, 0x2c, 0x58, 0xab, - 0x9f, 0xc7, 0x85, 0xd7, 0xff, 0x70, 0x08, 0x7a, 0x5c, 0xa9, 0x8a, 0x18, - 0x74, 0x3e, 0x9f, 0x1c, 0x1f, 0x39, 0x44, 0xad, 0x3e, 0x78, 0xdd, 0xbc, - 0xc0, 0x9c, 0x8b, 0xbb, 0x54, 0xa6, 0x31, 0xb0, 0x6b, 0xe4, 0x9a, 0xa1, - 0xa2, 0x87, 0x90, 0xa5, 0xe2, 0x00, 0x5b, 0xd8, 0x85, 0x1a, 0x8e, 0xeb, - 0xcc, 0x66, 0xf6, 0xb8, 0x6a, 0x3c, 0x76, 0x48, 0xd8, 0x88, 0xf0, 0x36, - 0xa4, 0xc5, 0x25, 0xd2, 0xed, 0x4d, 0x94, 0x4a, 0x52, 0xb4, 0xbf, 0x8e, - 0xf0, 0xb1, 0x1d, 0xa2, 0xe8, 0x05, 0xa4, 0x97, 0xda, 0x3a, 0x3b, 0x44, - 0xf1, 0x39, 0xee, 0xf3, 0xa0, 0xb9, 0xc0, 0x31, 0xd6, 0xd3, 0xf1, 0x87, - 0x2b, 0xd7, 0x21, 0xe0, 0xab, 0x8e, 0xf8, 0x18, 0x46, 0x7d, 0x3d, 0x75, - 0x69, 0x10, 0xce, 0xe7, 0xe1, 0xca, 0xa3, 0xf0, 0x87, 0x14, 0xeb, 0x88, - 0x46, 0xcd, 0x15, 0xc3, 0x68, 0x23, 0xb3, 0x09, 0x98, 0xab, 0x00, 0x9f, - 0xde, 0xe1, 0x27, 0x1c, 0x22, 0x6d, 0x0b, 0x4e, 0x72, 0x32, 0x8b, 0xa4, - 0x4a, 0xe1, 0xc0, 0x1a, 0x03, 0xf3, 0x9b, 0xc2, 0xf8, 0x0a, 0xc2, 0x20, - 0xd7, 0x7a, 0x0f, 0x57, 0xc4, 0x63, 0xe0, 0x31, 0x58, 0x11, 0x96, 0x1d, - 0x4f, 0xf8, 0x45, 0x04, 0xe2, 0x18, 0x43, 0x68, 0xe3, 0x09, 0xb4, 0x07, - 0xfa, 0x7c, 0x39, 0xfe, 0xb8, 0x63, 0xcf, 0x63, 0x82, 0xda, 0x80, 0x88, - 0xad, 0x43, 0x7c, 0xb1, 0x4a, 0xd3, 0x83, 0xfa, 0x48, 0x40, 0xcb, 0x25, - 0x7c, 0x16, 0x07, 0x85, 0x5a, 0x1b, 0x00, 0x72, 0x22, 0x3d, 0x22, 0x21, - 0x87, 0xa7, 0x83, 0xfa, 0x19, 0x0e, 0xe9, 0xff, 0x49, 0x87, 0x6b, 0xfa, - 0xe1, 0xf7, 0x10, 0x86, 0xf7, 0x32, 0x71, 0x87, 0xc0, 0x28, 0x45, 0x55, - 0xfc, 0x32, 0x53, 0xe3, 0xb3, 0x16, 0xb7, 0x0f, 0x2b, 0x37, 0x0f, 0xf6, - 0x78, 0x40, 0x7e, 0x62, 0xf5, 0x28, 0x5d, 0x50, 0x35, 0xa4, 0x13, 0xaa, - 0x1a, 0xd4, 0x70, 0x1d, 0xdc, 0xc5, 0x81, 0xac, 0x1b, 0x5a, 0xab, 0x43, - 0x8b, 0x59, 0x07, 0x7b, 0x04, 0xe5, 0x2d, 0x25, 0x24, 0xe9, 0x9f, 0x88, - 0xe9, 0x85, 0xdc, 0x3f, 0x9f, 0x61, 0x18, 0x5f, 0x9b, 0xe4, 0x23, 0x64, - 0xc3, 0x8f, 0x77, 0xd2, 0x18, 0xe6, 0x35, 0x5c, 0x63, 0x59, 0x45, 0x10, - 0x1d, 0x36, 0x50, 0xe2, 0x43, 0x8e, 0xe3, 0x5f, 0x43, 0x3b, 0x52, 0x81, - 0xb3, 0xcc, 0x5f, 0x50, 0xee, 0xdb, 0xa1, 0xc1, 0x17, 0xba, 0xe2, 0x39, - 0xe8, 0xc4, 0x8e, 0xd5, 0x71, 0x28, 0x80, 0xe8, 0xd8, 0xfd, 0xeb, 0xa9, - 0xbe, 0x99, 0xf3, 0x5b, 0x8d, 0x46, 0xac, 0x52, 0x22, 0xdc, 0x02, 0xc1, - 0xcb, 0x56, 0xd8, 0x47, 0xf6, 0xf9, 0xf6, 0xfe, 0x91, 0xf7, 0x67, 0x6e, - 0x93, 0x48, 0x71, 0xe1, 0xea, 0x19, 0xa7, 0x98, 0x09, 0x5d, 0xfd, 0xbd, - 0x33, 0xca, 0xa8, 0x67, 0xc6, 0x38, 0x03, 0x37, 0x7e, 0x56, 0x4f, 0x5b, - 0xa5, 0x31, 0x0d, 0x84, 0x40, 0xdd, 0x2b, 0x96, 0x1f, 0x5c, 0xe0, 0xe1, - 0x95, 0xa4, 0x71, 0x1c, 0x80, 0x23, 0x82, 0x97, 0x6b, 0xf7, 0x04, 0xd8, - 0xb2, 0xdb, 0xec, 0x32, 0xab, 0xbe, 0x1f, 0x30, 0x6c, 0xbc, 0xa5, 0xc9, - 0xbf, 0x86, 0x58, 0x55, 0x1e, 0x08, 0x87, 0x7d, 0x19, 0x35, 0xfd, 0x32, - 0xa4, 0x03, 0xd3, 0x63, 0x04, 0xe3, 0x02, 0xf9, 0xb8, 0xbb, 0x89, 0xef, - 0x67, 0x63, 0xfc, 0xdb, 0x70, 0xfa, 0xd3, 0xe9, 0x4a, 0x89, 0x8d, 0x57, - 0xc8, 0xe3, 0x03, 0xd0, 0x95, 0x5f, 0x62, 0x28, 0xb0, 0x87, 0xeb, 0x99, - 0xb7, 0xce, 0x08, 0xe8, 0x55, 0xa6, 0x48, 0xee, 0x64, 0x25, 0xa0, 0x26, - 0xd3, 0x19, 0x86, 0x54, 0xd7, 0x81, 0x84, 0x6a, 0x4e, 0xc5, 0x92, 0xd0, - 0x2b, 0x73, 0x7a, 0xf3, 0xe2, 0x7d, 0x81, 0x4e, 0xdd, 0xfd, 0xec, 0x47, - 0xa5, 0x96, 0x9e, 0xd9, 0xc9, 0x84, 0x38, 0xc3, 0x4b, 0x57, 0x04, 0xe2, - 0x04, 0x9a, 0xda, 0xa1, 0xb8, 0x56, 0x29, 0xbd, 0x3e, 0xec, 0x0a, 0x7f, - 0xf9, 0x2f, 0x34, 0x2c, 0xd7, 0xde, 0x38, 0x03, 0x72, 0xf1, 0x14, 0xbd, - 0x75, 0x97, 0x1c, 0x69, 0xcd, 0xb1, 0x77, 0x1c, 0xc2, 0x25, 0x50, 0x07, - 0x05, 0xd8, 0x9e, 0x66, 0x7a, 0x81, 0xfe, 0x82, 0x1a, 0x8e, 0x18, 0x3d, - 0x98, 0xf7, 0x6a, 0x3d, 0xd7, 0x83, 0xea, 0x6f, 0xe9, 0x55, 0x35, 0xba, - 0xd0, 0x48, 0x7c, 0x1e, 0x07, 0xdb, 0x84, 0xc2, 0x97, 0x2e, 0x20, 0x71, - 0x20, 0x3f, 0x94, 0x06, 0x79, 0x63, 0x71, 0xb4, 0xba, 0xc2, 0xa6, 0xde, - 0x52, 0xc1, 0x00, 0xc4, 0x81, 0x11, 0x09, 0x87, 0x4c, 0xef, 0x81, 0xb3, - 0x2b, 0x8f, 0x77, 0x7b, 0xb6, 0xf4, 0x5e, 0xf1, 0xc7, 0x76, 0x48, 0x8d, - 0xf4, 0x3a, 0xbc, 0xbe, 0x20, 0x5f, 0xe5, 0x9a, 0x12, 0x5b, 0x80, 0x37, - 0x44, 0x42, 0x54, 0x1e, 0x02, 0x9e, 0x84, 0xcf, 0xf0, 0x22, 0xd4, 0x66, - 0x07, 0xd5, 0x46, 0x65, 0xb5, 0xb1, 0xf5, 0x71, 0xc1, 0x72, 0xb2, 0xa8, - 0x47, 0x51, 0x5a, 0x68, 0xe5, 0x19, 0x09, 0x70, 0xd7, 0x5b, 0xab, 0x62, - 0x6f, 0xbe, 0x24, 0xc6, 0xda, 0x63, 0x93, 0x47, 0x73, 0x3e, 0x55, 0x44, - 0xdf, 0x0f, 0xae, 0x11, 0x03, 0x4d, 0x4f, 0x5e, 0xce, 0x4f, 0xc4, 0xac, - 0x34, 0xca, 0x1b, 0xce, 0x80, 0xca, 0xd5, 0xad, 0xb6, 0x20, 0x94, 0x1a, - 0x03, 0xf2, 0x04, 0x4d, 0x7b, 0x17, 0x53, 0xbf, 0x7c, 0xfa, 0x6e, 0x27, - 0x19, 0x01, 0xeb, 0xd7, 0x06, 0x5e, 0x22, 0x46, 0x7f, 0xc1, 0x69, 0x0f, - 0x67, 0x7a, 0xb7, 0x99, 0xc6, 0xa0, 0xcd, 0x2c, 0xa0, 0xc5, 0x49, 0x0d, - 0x70, 0xb6, 0x4e, 0x73, 0x2f, 0x1d, 0xfb, 0x62, 0x02, 0x43, 0x50, 0xdb, - 0xd0, 0x71, 0xeb, 0x12, 0xe6, 0x07, 0xfa, 0x00, 0x22, 0xe1, 0x42, 0xbd, - 0x2d, 0x6b, 0x93, 0x98, 0x96, 0xa3, 0xe4, 0xfa, 0x27, 0xac, 0x66, 0x81, - 0x15, 0x3a, 0x74, 0x39, 0xd5, 0xa4, 0x88, 0xd1, 0x7b, 0xe4, 0x65, 0x39, - 0xd6, 0xda, 0xc7, 0x74, 0xbc, 0x3f, 0xae, 0x47, 0x07, 0xdf, 0xd7, 0x52, - 0x33, 0xa5, 0x69, 0x34, 0xa9, 0xf8, 0x14, 0xf6, 0xdc, 0xc2, 0x95, 0x7b, - 0xee, 0xe9, 0xb8, 0xb6, 0x10, 0xa0, 0x26, 0xd8, 0x87, 0x19, 0xc6, 0xdc, - 0x64, 0x4e, 0x0c, 0xf2, 0x98, 0x9f, 0xcd, 0x59, 0xd9, 0xbe, 0x90, 0xbf, - 0xcf, 0x51, 0xfa, 0xb7, 0x36, 0xee, 0x70, 0xf0, 0x72, 0x31, 0x26, 0xc3, - 0x5b, 0xff, 0x75, 0xb5, 0xec, 0x00, 0xaa, 0x54, 0x1d, 0x38, 0x6c, 0x54, - 0x01, 0x22, 0xe0, 0x4c, 0xf3, 0x8d, 0x75, 0x8d, 0x37, 0x94, 0x41, 0x35, - 0xbf, 0xe0, 0x3c, 0x39, 0x84, 0xcc, 0x8d, 0x74, 0xd5, 0x7d, 0xc5, 0x42, - 0x29, 0xac, 0xc2, 0x19, 0x51, 0xb3, 0xe5, 0xe7, 0x76, 0x54, 0x43, 0x3d, - 0x5a, 0x48, 0x71, 0xbe, 0x87, 0x0c, 0x17, 0x12, 0xdf, 0xda, 0x9c, 0xaf, - 0xbb, 0xfb, 0x00, 0x6c, 0x0a, 0x52, 0x88, 0x9c, 0xbe, 0x79, 0x50, 0xa7, - 0x54, 0x30, 0x45, 0xc0, 0xe2, 0x58, 0x06, 0x1c, 0xf3, 0xbb, 0x03, 0x77, - 0xb3, 0xba, 0xe0, 0x53, 0x84, 0x70, 0xb8, 0x87, 0x78, 0x4c, 0x01, 0xad, - 0x60, 0xb0, 0x55, 0x73, 0x14, 0x21, 0x06, 0x56, 0xae, 0xea, 0xc9, 0x89, - 0x6a, 0x71, 0x82, 0x5c, 0x2b, 0x13, 0x59, 0xdc, 0xe2, 0x9e, 0xe7, 0xfa, - 0xc9, 0x1f, 0x75, 0x15, 0xf1, 0x8d, 0x41, 0xa4, 0x32, 0x8d, 0xa8, 0x2e, - 0x4a, 0x3b, 0xdb, 0xdc, 0xb4, 0xfc, 0x22, 0xdb, 0x04, 0xdc, 0xdf, 0x2e, - 0xbd, 0xf0, 0xe6, 0x4d, 0xf8, 0xfa, 0x12, 0x84, 0x0a, 0x35, 0xae, 0xc7, - 0x6f, 0xf0, 0xcb, 0x5e, 0xb9, 0xd3, 0xb8, 0xea, 0x3b, 0xcb, 0xd5, 0x3c, - 0xd4, 0x57, 0x77, 0x46, 0x0f, 0x72, 0xa9, 0xaf, 0xfa, 0xd0, 0x2d, 0x3c, - 0x06, 0x8e, 0x5a, 0xcf, 0x1f, 0x87, 0x9a, 0x80, 0xc9, 0x4f, 0xd4, 0x19, - 0xd0, 0x56, 0x0c, 0x40, 0x1d, 0xcb, 0xbe, 0x11, 0x22, 0xdb, 0x3e, 0x8e, - 0x2a, 0xdf, 0x12, 0xb1, 0xd3, 0x8a, 0xff, 0x1b, 0x5b, 0xab, 0xaa, 0x4d, - 0xd3, 0xb6, 0x77, 0x8b, 0x5a, 0x6f, 0xdf, 0xdf, 0x7d, 0xb3, 0x8a, 0x4c, - 0xbe, 0xf5, 0xf5, 0xee, 0xb5, 0x7b, 0xbc, 0x9b, 0x66, 0x8f, 0xb7, 0x8b, - 0xea, 0xbf, 0x5d, 0x2c, 0xeb, 0x5d, 0x05, 0xea, 0xdf, 0x4d, 0x9e, 0xfe, - 0xdd, 0xc4, 0xe9, 0xdf, 0x12, 0x58, 0x31, 0xc2, 0x7a, 0x54, 0xe5, 0xe9, - 0xdf, 0x2e, 0x4e, 0xff, 0xd6, 0x7a, 0xcb, 0x5b, 0x13, 0x6b, 0x06, 0x48, - 0xb6, 0x2e, 0x5a, 0xbe, 0x91, 0xc1, 0x91, 0x0d, 0xc2, 0xcc, 0x31, 0xed, - 0x5f, 0xbe, 0x7b, 0x11, 0xf8, 0x77, 0x27, 0x01, 0xff, 0xae, 0x02, 0xf0, - 0x40, 0x58, 0x22, 0x59, 0x94, 0x0e, 0xdf, 0xa6, 0x79, 0x57, 0x09, 0xf8, - 0x77, 0x37, 0xe0, 0x7b, 0x63, 0xe0, 0x5f, 0x73, 0x80, 0x25, 0xd1, 0x5b, - 0xa3, 0x5c, 0x8b, 0x25, 0xd1, 0x12, 0x20, 0x9e, 0x7d, 0xfc, 0x59, 0xc4, - 0xde, 0x84, 0xe0, 0xdf, 0x55, 0x06, 0xfe, 0x5d, 0x35, 0xc8, 0xbd, 0x43, - 0xf2, 0xfd, 0x5d, 0x45, 0xdc, 0xdf, 0xdd, 0x32, 0xec, 0x3b, 0xf4, 0x0d, - 0x78, 0xa2, 0xf6, 0x66, 0x3f, 0x45, 0x9c, 0x86, 0xfc, 0xa3, 0x87, 0xa0, - 0xfb, 0xbb, 0x2e, 0xca, 0xbe, 0xf1, 0x81, 0x9e, 0xc3, 0xda, 0xb5, 0xfc, - 0xe0, 0x6a, 0xd7, 0xf3, 0xd4, 0x4d, 0xa7, 0x02, 0x53, 0xef, 0x86, 0xd9, - 0x08, 0xfa, 0x6d, 0xab, 0xdc, 0x77, 0xa4, 0xa4, 0x54, 0x66, 0x0f, 0xe6, - 0x15, 0xee, 0xf7, 0x5a, 0x31, 0x85, 0xb3, 0xa2, 0x6a, 0x07, 0xc4, 0xdf, - 0xbc, 0xb2, 0x5c, 0x05, 0x99, 0xb0, 0xb3, 0x56, 0xba, 0x5c, 0x1f, 0x4e, - 0xb3, 0x8e, 0xb1, 0xf7, 0x1b, 0x87, 0x6c, 0x52, 0x78, 0xbd, 0x4d, 0x9d, - 0xdf, 0xdb, 0x14, 0x9e, 0x63, 0x1f, 0x26, 0x60, 0xad, 0x1f, 0xcf, 0x50, - 0xa9, 0x66, 0x48, 0x92, 0xb6, 0x02, 0xb2, 0xf9, 0xca, 0xaf, 0x14, 0x59, - 0x84, 0x43, 0x30, 0xde, 0xf2, 0x3f, 0x93, 0x67, 0x10, 0xe4, 0x66, 0x6b, - 0xfb, 0x81, 0x42, 0xe7, 0x35, 0x2b, 0x60, 0xa9, 0xb8, 0x55, 0xb3, 0x9e, - 0xdf, 0x9d, 0xf7, 0xc2, 0x15, 0xb0, 0x77, 0xda, 0x89, 0xa9, 0x35, 0xbe, - 0xbe, 0x56, 0xf0, 0xb9, 0x74, 0x6c, 0xea, 0x99, 0x78, 0xe2, 0xfe, 0xf7, - 0xc9, 0x53, 0x5e, 0xf6, 0x1a, 0x47, 0x8c, 0x57, 0x9f, 0xed, 0xbb, 0xd4, - 0xaf, 0x35, 0xb5, 0xdc, 0x9f, 0x8a, 0x32, 0x6a, 0x2a, 0xc9, 0x1f, 0x31, - 0x83, 0x6c, 0x00, 0x5f, 0x9d, 0xcc, 0x2e, 0x1c, 0xf9, 0xe6, 0x7a, 0x7c, - 0xb3, 0x5d, 0x23, 0x38, 0x28, 0xe7, 0x6a, 0xf6, 0x51, 0xa9, 0xa0, 0x7a, - 0x5b, 0x3d, 0x18, 0xd5, 0x67, 0xaf, 0x37, 0xd6, 0x1d, 0xe1, 0x2d, 0x50, - 0xf5, 0x55, 0xc7, 0x0b, 0xd2, 0xaf, 0x1d, 0x89, 0x9f, 0xa1, 0x52, 0x7c, - 0x0f, 0xa4, 0xe7, 0x79, 0xda, 0x83, 0x36, 0xff, 0x39, 0xca, 0xc7, 0xdc, - 0x15, 0xad, 0x39, 0x97, 0xb0, 0xec, 0xcb, 0xfc, 0x5c, 0xef, 0x37, 0x73, - 0x26, 0x5c, 0xf7, 0xdf, 0x3d, 0xd3, 0x58, 0x3d, 0xf6, 0x5c, 0x82, 0xd4, - 0xc0, 0xa3, 0x21, 0xa7, 0x44, 0x05, 0xcc, 0xc1, 0xc9, 0x2c, 0xda, 0x2a, - 0xa4, 0x0e, 0xd8, 0xbd, 0x9b, 0x26, 0x22, 0xc1, 0xec, 0x96, 0x7b, 0x3d, - 0x16, 0x59, 0xb9, 0x78, 0xe4, 0x25, 0x53, 0x0a, 0xed, 0x81, 0xe2, 0xee, - 0x15, 0x87, 0xcd, 0xd2, 0xfd, 0x3b, 0xf4, 0x52, 0x50, 0xbe, 0xc6, 0xcd, - 0xce, 0x7a, 0x26, 0xe8, 0x56, 0x96, 0xea, 0x29, 0x57, 0x50, 0x83, 0xe4, - 0x26, 0x9b, 0xc1, 0xfc, 0xec, 0xea, 0xb6, 0x73, 0x72, 0x15, 0x53, 0x2d, - 0x43, 0xa1, 0xf0, 0x0c, 0x50, 0xa3, 0xef, 0x27, 0x74, 0x96, 0x57, 0xcb, - 0x32, 0xba, 0x27, 0x08, 0x22, 0xd4, 0x5d, 0xd5, 0x37, 0x6c, 0x36, 0x88, - 0x68, 0xb4, 0x99, 0x88, 0xb3, 0x4a, 0xe6, 0xc6, 0x81, 0xd5, 0x86, 0x6b, - 0x55, 0x77, 0x81, 0x70, 0x55, 0xc7, 0x0a, 0xdb, 0x74, 0xad, 0xe5, 0x48, - 0x98, 0xf1, 0x34, 0x1d, 0x4e, 0xef, 0x50, 0xaa, 0x9c, 0xde, 0x08, 0x63, - 0xe7, 0xd1, 0xe2, 0xc1, 0x37, 0xaf, 0x1b, 0xdb, 0x1a, 0x12, 0xb7, 0xaa, - 0x43, 0x23, 0xf1, 0x75, 0x45, 0xa2, 0xf2, 0x7c, 0x4d, 0x67, 0x3e, 0xff, - 0x3c, 0xfc, 0xf8, 0xc3, 0xbe, 0xd9, 0xe9, 0xae, 0x7d, 0x77, 0x26, 0xdc, - 0x4c, 0xbd, 0x9b, 0xed, 0x5f, 0xae, 0x0e, 0x29, 0xc9, 0x46, 0xc9, 0x25, - 0xe3, 0x51, 0x12, 0x45, 0x03, 0xd3, 0xd8, 0x16, 0x46, 0x43, 0xaf, 0xaf, - 0xc0, 0x5e, 0xed, 0x49, 0xee, 0x03, 0xce, 0x0e, 0x94, 0x61, 0xeb, 0xd1, - 0xde, 0x6e, 0xf5, 0x45, 0x9f, 0x37, 0x7a, 0xb4, 0x0e, 0xf4, 0xd9, 0x43, - 0xbe, 0xcb, 0x91, 0xd2, 0xcd, 0x6e, 0x83, 0x0b, 0xaf, 0x6e, 0xb7, 0x76, - 0x1b, 0x0b, 0x95, 0x5f, 0x3a, 0xbc, 0x37, 0xec, 0x49, 0x26, 0xee, 0x63, - 0xc1, 0x15, 0xaa, 0x35, 0xdc, 0x12, 0x9a, 0x33, 0xe5, 0x7a, 0xaa, 0x05, - 0x54, 0xaa, 0x08, 0xde, 0xf5, 0xfe, 0x7a, 0xbd, 0x63, 0xbb, 0xb9, 0xbe, - 0x31, 0xde, 0x90, 0xed, 0x53, 0xa9, 0x13, 0x0b, 0x61, 0xc5, 0xe1, 0xa7, - 0x38, 0x08, 0xc2, 0x69, 0x6e, 0xc8, 0x9b, 0x87, 0xb8, 0xd0, 0xbe, 0x22, - 0xd9, 0xda, 0xb0, 0x24, 0x43, 0xa3, 0x82, 0x94, 0x7e, 0x75, 0x65, 0x84, - 0xac, 0x82, 0xe8, 0xef, 0xb7, 0xef, 0xb5, 0x83, 0x09, 0x66, 0x0f, 0xa7, - 0xf6, 0x87, 0xc0, 0x6c, 0x8b, 0xf6, 0x7f, 0x8a, 0x73, 0x19, 0x32, 0xa7, - 0xfa, 0xad, 0x40, 0x97, 0x81, 0xf7, 0x18, 0x55, 0x7f, 0x71, 0xab, 0x91, - 0x33, 0x5b, 0x17, 0x24, 0x74, 0xe0, 0x72, 0xb3, 0x17, 0xcc, 0xff, 0xe6, - 0x6b, 0x19, 0x70, 0xf1, 0xb9, 0x3a, 0xc8, 0xca, 0xf4, 0x4f, 0xf6, 0x16, - 0x27, 0xf9, 0xcf, 0x10, 0xcc, 0xd6, 0x25, 0xa0, 0x2e, 0x53, 0x39, 0xa3, - 0xf7, 0x47, 0x57, 0x12, 0xbe, 0x7d, 0x6d, 0xd8, 0x51, 0x3c, 0x8f, 0x54, - 0xa4, 0xe5, 0xd0, 0xc3, 0xd6, 0xa7, 0x40, 0xbd, 0xd4, 0x33, 0xb5, 0x2c, - 0xcb, 0x7d, 0x1c, 0xb9, 0xc6, 0xe1, 0x73, 0x66, 0x6c, 0x05, 0xea, 0xe1, - 0x71, 0x89, 0x1d, 0xe9, 0xb7, 0xcd, 0xae, 0xf7, 0xa0, 0xfe, 0xb0, 0x2d, - 0xee, 0x1c, 0xe5, 0x22, 0x73, 0xd0, 0x52, 0x2a, 0x20, 0xc7, 0x67, 0x4d, - 0x2b, 0xce, 0x39, 0x50, 0x58, 0x1b, 0x97, 0xf3, 0xa4, 0x33, 0xe1, 0x2f, - 0x75, 0x8f, 0xa0, 0x45, 0x04, 0x7b, 0x7c, 0x46, 0x71, 0xb5, 0x17, 0xe8, - 0x4c, 0x2d, 0xaa, 0x06, 0xa8, 0x0e, 0xcc, 0x68, 0x91, 0xaa, 0x48, 0x20, - 0x48, 0x0f, 0x9c, 0x89, 0xba, 0x33, 0xcf, 0x54, 0xd5, 0x6e, 0x9f, 0x89, - 0x8a, 0xd8, 0x4f, 0xe8, 0xc8, 0xdc, 0x18, 0xcf, 0x58, 0xa4, 0xcc, 0xe8, - 0x4c, 0x0f, 0x7e, 0x38, 0xd0, 0xcc, 0x50, 0x67, 0x5c, 0x11, 0x08, 0xca, - 0x54, 0x81, 0x24, 0x05, 0x31, 0x4f, 0x37, 0x91, 0x55, 0x3c, 0xd2, 0x9e, - 0x6c, 0xc0, 0xed, 0xac, 0x9f, 0x9a, 0x3c, 0x25, 0x75, 0x79, 0xca, 0x72, - 0xc3, 0x89, 0xc3, 0x75, 0x0f, 0x38, 0xc9, 0x85, 0x55, 0xa8, 0x9b, 0x83, - 0xac, 0x67, 0xf1, 0x02, 0x1b, 0xc7, 0xc4, 0x27, 0xf6, 0xf0, 0xc5, 0xdb, - 0x08, 0xe8, 0x47, 0x80, 0x0b, 0x75, 0x27, 0xb7, 0x6f, 0x27, 0x46, 0xad, - 0x0b, 0x99, 0x0d, 0xfc, 0x7a, 0x8a, 0x7f, 0xb5, 0x8a, 0x65, 0x00, 0x17, - 0x74, 0x3a, 0x0d, 0x1b, 0x2f, 0x62, 0xdc, 0x87, 0x3a, 0x19, 0x38, 0xa6, - 0x78, 0x27, 0xa3, 0xa3, 0xa6, 0x60, 0x33, 0xcb, 0x9f, 0xfb, 0x9f, 0xfb, - 0x60, 0x3f, 0x1c, 0xa7, 0xba, 0x4b, 0xfd, 0x02, 0xc8, 0x34, 0x1c, 0xa0, - 0x10, 0x99, 0x12, 0xc1, 0x2b, 0x39, 0xe2, 0x47, 0x0c, 0x9c, 0xe9, 0xfe, - 0x60, 0x4b, 0x44, 0x10, 0x15, 0x0c, 0x4c, 0xb1, 0x51, 0x8a, 0x01, 0x84, - 0x71, 0xc5, 0xfb, 0xf3, 0x76, 0x4e, 0x18, 0xf8, 0xce, 0xa0, 0x3a, 0x6e, - 0x2a, 0x65, 0xb7, 0x30, 0x77, 0x99, 0xc9, 0x43, 0xb8, 0xa6, 0x36, 0x90, - 0xbd, 0x53, 0x1b, 0x01, 0x4c, 0x1c, 0x2a, 0x27, 0x95, 0xe5, 0x5c, 0x5d, - 0xa3, 0x49, 0x88, 0xd4, 0x39, 0xc3, 0xe4, 0xf9, 0x1d, 0xeb, 0x00, 0xeb, - 0x08, 0x62, 0xbd, 0x85, 0x93, 0x89, 0xaf, 0x7d, 0x65, 0xbc, 0x38, 0xbe, - 0x23, 0xaa, 0x10, 0xf6, 0xda, 0x79, 0x74, 0x8c, 0xbb, 0xec, 0x52, 0xb5, - 0x4f, 0xdf, 0xac, 0xa2, 0xdc, 0xdb, 0x0c, 0xcb, 0xb9, 0x31, 0x39, 0x82, - 0x3c, 0x87, 0x23, 0x25, 0x67, 0x6f, 0xdd, 0x82, 0x38, 0x2e, 0x5f, 0x08, - 0xba, 0x77, 0x48, 0x6b, 0x01, 0x1c, 0x2d, 0x41, 0x47, 0x4b, 0x8e, 0xaf, - 0x7d, 0x3b, 0xac, 0x29, 0xc1, 0x30, 0xc9, 0xa8, 0x8d, 0x9c, 0x44, 0xe8, - 0x04, 0x79, 0x77, 0xbb, 0x85, 0x12, 0x32, 0xe1, 0xc5, 0x29, 0x42, 0x8b, - 0xae, 0xf8, 0xce, 0x5d, 0x0e, 0x33, 0x95, 0xc8, 0x5b, 0x36, 0x03, 0x3b, - 0x6b, 0x30, 0x99, 0x4f, 0x18, 0xda, 0x93, 0x20, 0xd4, 0xc7, 0x7c, 0x19, - 0xf8, 0x59, 0x26, 0x7d, 0xe7, 0x69, 0x96, 0xb7, 0xa9, 0x5e, 0x0f, 0x08, - 0x3c, 0xeb, 0x91, 0xd2, 0x85, 0xab, 0xe7, 0xc7, 0x83, 0x71, 0x68, 0xb9, - 0x17, 0x34, 0x0d, 0x0a, 0x5c, 0xe8, 0x24, 0xda, 0xdd, 0xcd, 0xce, 0xeb, - 0x48, 0x3b, 0x58, 0x53, 0x3a, 0xad, 0x7b, 0x7b, 0xa1, 0xc9, 0xdb, 0x56, - 0x43, 0x68, 0x84, 0x7e, 0x84, 0xbc, 0xf6, 0x03, 0x7a, 0xca, 0xca, 0x9c, - 0x06, 0x59, 0x54, 0xe7, 0xaa, 0x4e, 0x42, 0x8c, 0xbb, 0xb8, 0x79, 0x9f, - 0xb3, 0x3b, 0x39, 0x1f, 0x50, 0xe3, 0x46, 0xa4, 0x7c, 0x33, 0x30, 0xfb, - 0xab, 0x5b, 0xdd, 0xa4, 0x19, 0x9b, 0x15, 0x64, 0xea, 0x22, 0x0b, 0x38, - 0x5c, 0x96, 0x7a, 0x1f, 0x7e, 0x52, 0x12, 0x61, 0xa7, 0x78, 0xe7, 0xdd, - 0x08, 0x34, 0x11, 0xdb, 0x0f, 0xea, 0xe4, 0x60, 0xd9, 0xc9, 0xaf, 0x36, - 0x5f, 0x1f, 0x2a, 0x16, 0xf3, 0xb5, 0x12, 0xba, 0x26, 0xd8, 0x1d, 0xd0, - 0xe3, 0x7c, 0xa3, 0x07, 0x48, 0xc5, 0xce, 0x04, 0xb8, 0x8e, 0x86, 0x68, - 0xee, 0x34, 0x2d, 0x8b, 0x3d, 0x45, 0xfd, 0xe9, 0xac, 0x98, 0x67, 0x55, - 0xfe, 0x99, 0x2a, 0xea, 0x08, 0x26, 0x17, 0x9b, 0x6d, 0x78, 0x6f, 0x78, - 0x3f, 0x1d, 0xd7, 0x0a, 0x38, 0xcf, 0xd0, 0x6d, 0x4d, 0xfa, 0x1b, 0x56, - 0x5b, 0xf2, 0x0c, 0x33, 0xd4, 0xec, 0xf6, 0x3d, 0x0b, 0x50, 0x1f, 0x0b, - 0x10, 0xcb, 0xd2, 0x97, 0xf2, 0x18, 0x67, 0x6b, 0x7b, 0x13, 0xaa, 0x63, - 0x88, 0xf4, 0x7c, 0xe7, 0x8d, 0x8f, 0x77, 0xee, 0x21, 0xe8, 0xc9, 0xdb, - 0x0c, 0xa4, 0x17, 0xaa, 0xd4, 0x58, 0x10, 0xb9, 0x73, 0x3d, 0xb1, 0x91, - 0x59, 0x68, 0xf0, 0xde, 0xf3, 0x18, 0x53, 0x35, 0x9e, 0xde, 0x9d, 0x61, - 0xe0, 0x8e, 0x3f, 0xff, 0x38, 0xfc, 0x74, 0x0e, 0xfd, 0x7d, 0x96, 0xc8, - 0xa4, 0x25, 0x72, 0x68, 0xf1, 0xa2, 0xbe, 0xe0, 0x38, 0xde, 0x5d, 0x42, - 0x31, 0xf7, 0x61, 0x69, 0xdf, 0x60, 0x39, 0x70, 0x7a, 0xf3, 0x3e, 0x20, - 0x60, 0xd6, 0xa9, 0x75, 0xf8, 0x19, 0xe6, 0x4c, 0xb0, 0xb3, 0xcd, 0x25, - 0xad, 0x75, 0x79, 0x0d, 0xc9, 0xcd, 0xbb, 0x64, 0x9e, 0x44, 0x5b, 0x39, - 0x83, 0x9e, 0x93, 0x40, 0xa7, 0xe7, 0x29, 0x75, 0x6a, 0x30, 0x19, 0x44, - 0x0c, 0x9c, 0x5c, 0x1a, 0x07, 0x27, 0x2c, 0x31, 0xeb, 0x7d, 0x60, 0x7d, - 0x04, 0xe5, 0x9b, 0x0a, 0xa8, 0x1e, 0xaf, 0x5e, 0x16, 0x78, 0xe4, 0x1d, - 0x74, 0xa4, 0xa1, 0x60, 0x15, 0xa6, 0xb2, 0x67, 0xfd, 0xcb, 0xd2, 0xb8, - 0x5a, 0xa5, 0xba, 0x93, 0xb2, 0x7f, 0x33, 0xa0, 0xe2, 0x8a, 0xeb, 0xb6, - 0xcc, 0x94, 0x53, 0xde, 0x2e, 0x47, 0xba, 0xb1, 0x49, 0xd7, 0xf9, 0xd6, - 0xdd, 0xd1, 0x12, 0x74, 0x18, 0xb9, 0x11, 0x2d, 0x2e, 0x9e, 0xee, 0xb1, - 0x41, 0xda, 0xb1, 0xf1, 0xea, 0xbc, 0x64, 0x00, 0x14, 0xed, 0x0a, 0x01, - 0x4b, 0x1e, 0x8e, 0x43, 0x82, 0xf0, 0xd2, 0x22, 0xd0, 0xcc, 0x56, 0x24, - 0x7b, 0x3b, 0xf6, 0x1f, 0x2b, 0x5c, 0x61, 0x5b, 0x80, 0xf3, 0x8f, 0xa7, - 0x68, 0x2b, 0x22, 0x64, 0x52, 0x09, 0xb4, 0x38, 0xf8, 0xf4, 0xcf, 0x3f, - 0xf1, 0x5c, 0xb3, 0x05, 0x40, 0xa8, 0xc5, 0x48, 0x44, 0xbf, 0xbe, 0xaf, - 0x68, 0x98, 0x31, 0x52, 0x45, 0x00, 0x0b, 0xae, 0x21, 0xdc, 0xd9, 0x45, - 0xc0, 0xa6, 0x01, 0x74, 0x93, 0x9b, 0xf6, 0xa2, 0xc2, 0x35, 0x08, 0x5a, - 0x31, 0xb5, 0xb8, 0x80, 0xd4, 0xbf, 0x9e, 0xca, 0x7f, 0x49, 0xb8, 0xd5, - 0x09, 0xe0, 0x9e, 0x9c, 0x40, 0xec, 0x2a, 0xda, 0xc9, 0x32, 0xb1, 0xb0, - 0x95, 0x9f, 0x39, 0x49, 0x9d, 0xf3, 0x1d, 0x37, 0xd4, 0xe0, 0x12, 0xc4, - 0x3f, 0x7e, 0x13, 0xa2, 0x08, 0x05, 0x52, 0x04, 0xe9, 0x66, 0xd1, 0x8d, - 0xe5, 0xf7, 0x41, 0x8a, 0x77, 0x41, 0xbd, 0xcd, 0x2b, 0x8b, 0x2e, 0x94, - 0x07, 0x3a, 0x3d, 0x55, 0x2b, 0x0f, 0x58, 0xde, 0x6b, 0xfd, 0x28, 0x28, - 0x26, 0x05, 0x02, 0x6b, 0xa4, 0x2a, 0xbe, 0xa4, 0x0c, 0x1c, 0x03, 0x38, - 0x23, 0x5b, 0x4a, 0xad, 0xab, 0x00, 0x47, 0x57, 0x1c, 0x26, 0xb5, 0xf4, - 0x33, 0xcf, 0xf6, 0x87, 0x27, 0x82, 0x60, 0x50, 0x26, 0xef, 0x73, 0x42, - 0xa1, 0xdf, 0x34, 0x48, 0xd8, 0x62, 0x6b, 0x84, 0xf0, 0x4a, 0x27, 0x00, - 0xb1, 0xa4, 0x10, 0x5c, 0xb3, 0x67, 0x75, 0xdc, 0xae, 0x31, 0x21, 0x0b, - 0xcc, 0xce, 0x7c, 0xbb, 0xaa, 0x02, 0x1b, 0xc5, 0x02, 0x3c, 0x96, 0x2e, - 0xc9, 0xb0, 0x28, 0x6c, 0x57, 0x15, 0x5d, 0x56, 0x93, 0xcd, 0x5b, 0x6b, - 0xd2, 0xd6, 0x90, 0x39, 0x5b, 0x1b, 0x4a, 0xf2, 0x7c, 0x41, 0x22, 0x28, - 0x1f, 0x15, 0xb7, 0xf3, 0xba, 0x00, 0x80, 0xe4, 0xcf, 0x77, 0x6d, 0x8e, - 0x03, 0xe1, 0xa4, 0x5b, 0x6d, 0x41, 0x8c, 0xa5, 0x60, 0xca, 0x3d, 0x2e, - 0xab, 0xb9, 0xb3, 0x40, 0xed, 0x31, 0x3e, 0xd8, 0x63, 0x74, 0xb0, 0x47, - 0x29, 0xda, 0x6b, 0x11, 0x8a, 0x58, 0xf8, 0x91, 0xf7, 0xd4, 0x9a, 0x11, - 0x76, 0x60, 0xfb, 0x43, 0x1f, 0x94, 0x62, 0x71, 0x22, 0xde, 0x84, 0x03, - 0xfa, 0x77, 0x27, 0x9c, 0xaa, 0x37, 0xa9, 0x99, 0x22, 0x0a, 0xe2, 0x9e, - 0xf3, 0xd2, 0x75, 0x80, 0x96, 0xe6, 0x96, 0x29, 0x64, 0x6a, 0x96, 0x80, - 0xf3, 0x9c, 0x8f, 0xea, 0xbb, 0xfb, 0x18, 0xa2, 0xbe, 0x9f, 0x0c, 0x94, - 0xa2, 0x3d, 0xf2, 0xc7, 0x80, 0xde, 0x72, 0xaf, 0x89, 0xe9, 0x86, 0x02, - 0xfb, 0x81, 0x2e, 0x77, 0xeb, 0x38, 0x46, 0x7c, 0x74, 0x76, 0xbf, 0x28, - 0x2e, 0xc7, 0xc5, 0x3a, 0x66, 0x44, 0x75, 0x5c, 0x39, 0xa8, 0x3c, 0x34, - 0x12, 0x3d, 0x74, 0x69, 0x8d, 0x81, 0x59, 0xe6, 0x2e, 0xf3, 0x3e, 0xad, - 0x1a, 0x1b, 0x39, 0x56, 0x32, 0x8d, 0x89, 0x34, 0x18, 0xec, 0xde, 0xfa, - 0x58, 0x69, 0x30, 0xa2, 0x3d, 0x1d, 0x6c, 0xfb, 0x8e, 0x37, 0xa2, 0xbc, - 0xf1, 0x7d, 0x71, 0x17, 0xee, 0xe0, 0x54, 0x2b, 0xf9, 0xc0, 0x59, 0x45, - 0xf2, 0xa5, 0xcf, 0xf9, 0x62, 0x41, 0x7c, 0xe5, 0xd2, 0x65, 0xd9, 0xab, - 0x6a, 0x2f, 0xbb, 0xbb, 0xb6, 0x23, 0x52, 0x75, 0x76, 0x04, 0xe1, 0x77, - 0x0b, 0xbb, 0xa3, 0x38, 0xf9, 0x0a, 0xe6, 0xe8, 0xc3, 0x39, 0x22, 0xa0, - 0xa3, 0x05, 0xc0, 0x94, 0xfc, 0xae, 0x34, 0xf8, 0xf4, 0x77, 0x6d, 0x75, - 0x15, 0x59, 0x7a, 0x0e, 0xb3, 0xa2, 0xf8, 0x50, 0xdd, 0xd5, 0xfd, 0xf2, - 0xe7, 0x6e, 0x9d, 0xd8, 0xd5, 0x06, 0xb1, 0x57, 0x73, 0x62, 0x0f, 0xd2, - 0xc0, 0xd1, 0x27, 0xae, 0xd2, 0xba, 0xeb, 0x92, 0x2c, 0xf9, 0xc6, 0x25, - 0x58, 0x35, 0xa7, 0x70, 0xbf, 0x95, 0x6e, 0xbb, 0x05, 0xc4, 0xca, 0x4b, - 0xd8, 0x6f, 0x1a, 0x16, 0xe2, 0x3e, 0xa7, 0x28, 0x3f, 0xc4, 0x73, 0x73, - 0xb1, 0xcb, 0x4c, 0x8c, 0x80, 0x8c, 0x0a, 0xb0, 0xa8, 0x4a, 0xbc, 0x63, - 0xd7, 0x28, 0x1a, 0x2c, 0xa6, 0x59, 0x81, 0x39, 0xd3, 0x72, 0xe6, 0x7a, - 0xd4, 0x60, 0x78, 0x2f, 0x8a, 0xe3, 0x7b, 0xc6, 0x17, 0x14, 0x56, 0x55, - 0x11, 0x9e, 0x22, 0x29, 0x62, 0x6a, 0xf8, 0xfd, 0xfb, 0x81, 0xb7, 0x9a, - 0x8b, 0x7b, 0x00, 0x9d, 0xfb, 0xd5, 0xa5, 0x07, 0xe0, 0xe6, 0x16, 0x02, - 0x47, 0xc8, 0xa2, 0x6c, 0x8a, 0xd3, 0xf0, 0x51, 0x88, 0x17, 0x97, 0xdb, - 0x14, 0xe2, 0xc8, 0x1e, 0xe8, 0x7e, 0x30, 0x7d, 0x86, 0xe6, 0xfa, 0x14, - 0x21, 0x5d, 0xf1, 0xff, 0x41, 0x61, 0x36, 0xd2, 0x25, 0xc4, 0x7d, 0x52, - 0xc8, 0x9e, 0x19, 0x7b, 0x3d, 0x42, 0xbd, 0x65, 0x60, 0x14, 0x38, 0x42, - 0x05, 0x68, 0xfd, 0x62, 0x82, 0xc3, 0xdb, 0x0d, 0x83, 0x16, 0x5c, 0x20, - 0x63, 0xc3, 0x2a, 0x02, 0x8a, 0x8b, 0x0a, 0x58, 0x0c, 0x29, 0x60, 0xed, - 0x3f, 0x83, 0x5d, 0x1a, 0xdc, 0x2b, 0xfc, 0x7c, 0x39, 0xf2, 0xd4, 0xd5, - 0x83, 0x5d, 0x06, 0x71, 0x1c, 0xf4, 0xce, 0x98, 0x53, 0xfb, 0xda, 0xe9, - 0xe6, 0xdf, 0x13, 0x60, 0x14, 0xcd, 0x6f, 0x52, 0x7e, 0xf2, 0xe4, 0xdf, - 0x37, 0xdd, 0x70, 0x9c, 0x01, 0x54, 0x37, 0x17, 0x02, 0xf9, 0x18, 0x3f, - 0x51, 0x7d, 0x20, 0x88, 0x3b, 0x6d, 0x13, 0x95, 0xc4, 0xfc, 0x82, 0x0a, - 0x62, 0xaf, 0x15, 0x49, 0xea, 0x88, 0x8d, 0xae, 0x7c, 0xc2, 0xf4, 0xcf, - 0x03, 0xbb, 0xd8, 0x64, 0xe3, 0x6c, 0x95, 0x33, 0x03, 0x4f, 0x16, 0xef, - 0x4e, 0x8f, 0x73, 0x65, 0x72, 0x7d, 0x50, 0xdb, 0x9e, 0x34, 0xc7, 0xa7, - 0xc4, 0x32, 0xc3, 0x9d, 0xab, 0x0c, 0xf5, 0xc9, 0xea, 0x4f, 0xe6, 0xe1, - 0x41, 0xa2, 0x18, 0xe6, 0xe8, 0x29, 0x2a, 0x54, 0xe2, 0x83, 0x93, 0x97, - 0x08, 0x64, 0xce, 0x49, 0xe4, 0xd7, 0x89, 0xa6, 0x95, 0xbc, 0x6e, 0x8b, - 0xe6, 0xd4, 0xa5, 0x45, 0x93, 0x08, 0x50, 0x12, 0xb5, 0x18, 0x46, 0xfd, - 0x95, 0x76, 0x8f, 0xe8, 0xb8, 0x5e, 0xf1, 0x3d, 0x66, 0x8d, 0xa1, 0x12, - 0xbe, 0xe9, 0x32, 0xd4, 0xef, 0x82, 0x11, 0x36, 0x64, 0x2d, 0x39, 0x06, - 0xe1, 0xf9, 0xee, 0x1b, 0x6d, 0x74, 0xcf, 0x0c, 0x41, 0xd2, 0x8b, 0xe1, - 0x12, 0x19, 0x7f, 0xd4, 0x5e, 0x9b, 0x4c, 0x7b, 0x5e, 0x0b, 0xd0, 0xa2, - 0x5b, 0x17, 0x1d, 0xec, 0x7f, 0xbe, 0xee, 0xa0, 0xb9, 0x43, 0x1b, 0x29, - 0x4c, 0xb4, 0x6d, 0x58, 0x6e, 0x80, 0x46, 0x53, 0xe5, 0x97, 0x8a, 0x36, - 0xce, 0xfe, 0x67, 0xfa, 0xe2, 0x26, 0xd5, 0x9d, 0x4a, 0x01, 0xf1, 0x32, - 0x6a, 0xc4, 0xd3, 0xda, 0x4a, 0xdb, 0x8a, 0x33, 0x03, 0x6c, 0x8c, 0x09, - 0x4b, 0x03, 0xe1, 0x40, 0xdd, 0x5f, 0x5a, 0x17, 0xd6, 0x02, 0x1b, 0xdc, - 0x5e, 0x45, 0x66, 0x27, 0x36, 0x51, 0xfc, 0x55, 0xa8, 0xc7, 0x58, 0x12, - 0x86, 0x24, 0x09, 0x5d, 0xa7, 0x19, 0xde, 0x0d, 0x03, 0x31, 0xa7, 0x33, - 0xcb, 0xa3, 0x99, 0x2c, 0xdc, 0xa4, 0xfe, 0x7d, 0x32, 0xef, 0x2c, 0x6e, - 0xca, 0xa8, 0x88, 0x58, 0x80, 0xca, 0xe0, 0x25, 0xc6, 0xda, 0x33, 0xe4, - 0x07, 0x5b, 0x09, 0x6b, 0x22, 0xb8, 0x4c, 0x00, 0x69, 0x01, 0x3f, 0x83, - 0x71, 0xe7, 0xe5, 0x69, 0x30, 0xe5, 0x7a, 0xc1, 0xf9, 0xaf, 0xbb, 0xab, - 0x88, 0x72, 0x5a, 0x3b, 0x62, 0x67, 0xfd, 0x0d, 0x83, 0x79, 0xc5, 0x47, - 0xb1, 0x21, 0x9f, 0x4c, 0x7f, 0xcc, 0xfe, 0x09, 0xeb, 0xd3, 0x30, 0xac, - 0xbd, 0xfc, 0x61, 0x74, 0xab, 0x0a, 0x5f, 0x59, 0x37, 0x0e, 0xb2, 0xb1, - 0xe8, 0xdc, 0x95, 0x2e, 0x70, 0x8a, 0x8a, 0x9a, 0x0b, 0x40, 0x59, 0xc7, - 0x8a, 0xc4, 0x5a, 0x00, 0x26, 0xae, 0x8f, 0x00, 0x5c, 0x4f, 0x9b, 0x53, - 0xdc, 0x9c, 0xc1, 0x0d, 0x0e, 0xe3, 0x9c, 0x2f, 0x6c, 0x95, 0x8d, 0x6f, - 0x97, 0x20, 0x90, 0xf5, 0xc0, 0xa6, 0xdd, 0x9f, 0x67, 0xcc, 0x3d, 0xcf, - 0x80, 0xb8, 0xb6, 0x41, 0xa9, 0x2d, 0x3a, 0x8c, 0xe8, 0xce, 0x21, 0xf0, - 0x5e, 0x51, 0x99, 0xaa, 0x13, 0x08, 0x37, 0x37, 0x2e, 0xaf, 0x94, 0xba, - 0x71, 0xae, 0x4b, 0x54, 0xee, 0x6f, 0x20, 0xa1, 0x85, 0xdf, 0xdc, 0xd0, - 0xe1, 0x48, 0x21, 0x8e, 0xe9, 0x8d, 0x90, 0x03, 0x75, 0xaf, 0x4b, 0x7d, - 0x61, 0x68, 0x6e, 0x39, 0x2f, 0xba, 0x19, 0x98, 0xfc, 0x3a, 0x59, 0x4b, - 0x3d, 0x0b, 0x6f, 0xf6, 0x6d, 0xae, 0xd9, 0xdf, 0x69, 0xc7, 0xee, 0x7c, - 0x4d, 0xd7, 0x7e, 0xac, 0x23, 0x46, 0x85, 0xce, 0x41, 0xef, 0x3e, 0xd1, - 0x0b, 0x87, 0x82, 0xaa, 0xab, 0xcf, 0x54, 0xae, 0xb9, 0x7a, 0xe2, 0x40, - 0x57, 0x03, 0x7e, 0x98, 0x9a, 0x35, 0x03, 0xa9, 0x18, 0x97, 0x7a, 0x91, - 0xb7, 0xf0, 0xb4, 0x75, 0x85, 0x43, 0x7c, 0x94, 0x0e, 0x72, 0x7a, 0x83, - 0xfd, 0xcb, 0xc9, 0xe7, 0x1f, 0x2f, 0x9f, 0x2f, 0x2f, 0x9f, 0xe6, 0xe5, - 0xa3, 0x4f, 0xa5, 0x0e, 0x28, 0x52, 0xf6, 0xa2, 0xc1, 0x2d, 0x6e, 0x81, - 0x3d, 0x92, 0xf3, 0x9a, 0xbc, 0x03, 0x02, 0xaa, 0x96, 0xaa, 0x0d, 0x1a, - 0xcf, 0xe0, 0x68, 0x18, 0x02, 0xe1, 0xa3, 0x8d, 0x19, 0xbd, 0xb1, 0xb8, - 0x43, 0xdc, 0x33, 0x52, 0xc1, 0x63, 0x37, 0xb3, 0x83, 0x78, 0xd7, 0xcd, - 0x8f, 0x26, 0x02, 0x65, 0x77, 0x96, 0xb3, 0x17, 0xe5, 0x6d, 0xdf, 0xac, - 0x40, 0x4c, 0x77, 0xe4, 0x14, 0x83, 0xab, 0x55, 0x44, 0x07, 0x59, 0xee, - 0x2a, 0x1b, 0xd4, 0xa6, 0xc4, 0xc7, 0x5c, 0xd6, 0x83, 0x34, 0xd1, 0xc3, - 0x89, 0xca, 0x80, 0xd0, 0x2e, 0xa4, 0x22, 0xb4, 0xc7, 0x3b, 0xed, 0xf5, - 0x95, 0x76, 0x4e, 0xb3, 0x49, 0xc2, 0xdb, 0x16, 0xde, 0x78, 0x3b, 0xc0, - 0x3d, 0xa9, 0x0f, 0xd9, 0x55, 0x7e, 0x40, 0x2e, 0x87, 0xfc, 0xf8, 0xe2, - 0x07, 0x41, 0xb8, 0xf5, 0xb1, 0xb3, 0x81, 0x43, 0x93, 0x17, 0x47, 0xa8, - 0xcb, 0x38, 0x07, 0x70, 0x4f, 0x07, 0xfe, 0xaa, 0x74, 0x07, 0xdb, 0xf8, - 0xe3, 0x46, 0xa3, 0xef, 0xb9, 0xc5, 0x2d, 0x15, 0xed, 0x81, 0x98, 0x7a, - 0xa2, 0x4f, 0xe7, 0xd6, 0xdb, 0xa1, 0xe3, 0xe6, 0x2e, 0xb1, 0x0a, 0xb2, - 0xeb, 0xa1, 0x43, 0x0f, 0xac, 0x72, 0x70, 0xf6, 0x62, 0xe2, 0xcd, 0xbc, - 0xa7, 0x5f, 0x81, 0x3a, 0x80, 0x07, 0x53, 0x72, 0x76, 0x57, 0x9a, 0xbf, - 0x13, 0xa9, 0xf7, 0xf1, 0x45, 0xa6, 0xf4, 0x1b, 0x39, 0xf0, 0xf9, 0x83, - 0x46, 0xd5, 0xde, 0x7b, 0xb4, 0x48, 0xed, 0x55, 0xa7, 0xe1, 0x8a, 0x26, - 0x72, 0xb2, 0xd1, 0xe3, 0xe0, 0xc4, 0x59, 0x27, 0x0f, 0xad, 0x44, 0x4d, - 0xc8, 0x00, 0x6a, 0x17, 0x01, 0xb1, 0xa0, 0xa7, 0x0b, 0xfe, 0xd0, 0x4f, - 0x66, 0x24, 0x4c, 0x5d, 0x9b, 0x4f, 0xa8, 0x4d, 0x05, 0x42, 0xa9, 0x8d, - 0x30, 0x58, 0xdc, 0xac, 0xce, 0x70, 0x3d, 0x08, 0x3a, 0x42, 0xa0, 0xea, - 0xa1, 0x4c, 0xb3, 0x13, 0x54, 0x00, 0x07, 0xca, 0x42, 0x30, 0x41, 0x28, - 0x21, 0xe4, 0xd0, 0x15, 0x6d, 0x39, 0x07, 0x1d, 0x3c, 0x6b, 0xcf, 0x28, - 0xd8, 0x2c, 0x53, 0x67, 0x60, 0x09, 0x71, 0x59, 0xa8, 0x14, 0x9d, 0x89, - 0xf5, 0xd5, 0x46, 0x60, 0x0f, 0x40, 0xba, 0xe6, 0x89, 0x16, 0x25, 0x26, - 0xfb, 0xdd, 0xbe, 0xc4, 0x35, 0xe8, 0x8d, 0xc7, 0x27, 0x09, 0xa3, 0x49, - 0x9f, 0x2e, 0x1a, 0x6a, 0x4f, 0x17, 0x56, 0x64, 0xae, 0x9c, 0x43, 0xc7, - 0x1b, 0xcd, 0x03, 0xe6, 0x4f, 0x34, 0x29, 0x13, 0x73, 0x15, 0x4b, 0xec, - 0x2e, 0x4d, 0xed, 0xb4, 0x2b, 0x3c, 0x53, 0x5c, 0x16, 0xd5, 0x41, 0x96, - 0x5f, 0x71, 0xb5, 0x40, 0x06, 0x5b, 0xc3, 0xfa, 0x0a, 0xa1, 0x5b, 0x86, - 0xc7, 0x80, 0x6a, 0xba, 0xdd, 0xd0, 0xb8, 0x90, 0x68, 0xb8, 0x48, 0xa8, - 0x21, 0x3b, 0xa1, 0xf5, 0xde, 0x61, 0x5b, 0x82, 0x6a, 0xbd, 0x8b, 0x18, - 0x8b, 0x4b, 0xf1, 0x9c, 0x97, 0x77, 0x18, 0x4c, 0x13, 0xe4, 0x38, 0x5d, - 0xc9, 0x7a, 0xcf, 0xa3, 0xa5, 0x05, 0xbb, 0x89, 0xaa, 0x8a, 0x4c, 0xe6, - 0x93, 0x04, 0xa2, 0x9a, 0xf4, 0x90, 0xee, 0x30, 0x30, 0x9d, 0x9c, 0x78, - 0x95, 0x96, 0xa8, 0xd6, 0x70, 0x80, 0x16, 0x2d, 0xb4, 0x00, 0x6a, 0x77, - 0x89, 0x90, 0x12, 0x09, 0x42, 0xdc, 0x14, 0x22, 0xd4, 0x32, 0x5f, 0x20, - 0x05, 0xb5, 0xde, 0x64, 0xd6, 0x1a, 0x34, 0xd9, 0x34, 0x26, 0x55, 0x38, - 0x05, 0x62, 0x03, 0x39, 0x61, 0x62, 0x36, 0x71, 0xac, 0x61, 0xcd, 0x5c, - 0x62, 0x81, 0xbb, 0x33, 0xd9, 0xc8, 0xf9, 0x51, 0xf7, 0xd3, 0xdd, 0xb9, - 0x00, 0x43, 0xea, 0xe5, 0x67, 0x3c, 0xa8, 0x1c, 0x42, 0xc0, 0x73, 0x5f, - 0x30, 0x1a, 0x56, 0xb0, 0xc9, 0x89, 0x67, 0xf7, 0xa8, 0x69, 0x25, 0x28, - 0x9b, 0xa3, 0x69, 0x54, 0x1d, 0x9e, 0x30, 0x7c, 0x98, 0x7e, 0x90, 0xe5, - 0xa8, 0x17, 0x2c, 0x4b, 0x33, 0xee, 0x61, 0x4e, 0x04, 0x1e, 0x25, 0xa4, - 0x2e, 0x87, 0xa0, 0x2a, 0x96, 0xa8, 0x4f, 0x72, 0xa3, 0xc9, 0xd2, 0x34, - 0x5f, 0x12, 0x03, 0x9c, 0xd5, 0x3a, 0x73, 0x63, 0x67, 0xc2, 0xd5, 0x64, - 0xac, 0x8c, 0x73, 0xf2, 0x0f, 0x3b, 0x53, 0x0f, 0x38, 0x81, 0x5c, 0xd1, - 0x4f, 0x9c, 0x62, 0x25, 0xf4, 0x77, 0x9a, 0xad, 0x76, 0x8f, 0xa2, 0x87, - 0x17, 0xf6, 0x80, 0x5f, 0x8c, 0x3e, 0xf9, 0xec, 0x8d, 0xbb, 0x81, 0x51, - 0x93, 0x48, 0x22, 0xbd, 0xc7, 0x44, 0xdd, 0x0e, 0xf7, 0xc9, 0x15, 0x40, - 0xa2, 0x59, 0xa8, 0xef, 0x38, 0xbb, 0x29, 0x6b, 0x25, 0x07, 0x22, 0x42, - 0x2c, 0xfe, 0xba, 0xa1, 0xdd, 0x69, 0xa4, 0x70, 0xc6, 0x28, 0x91, 0x44, - 0xdf, 0x6c, 0xee, 0x82, 0xc5, 0xd7, 0x9b, 0x99, 0x9e, 0x05, 0xb7, 0x4d, - 0x83, 0x8e, 0x59, 0xcf, 0x96, 0xf8, 0xfa, 0xf3, 0xe2, 0x81, 0xfa, 0x22, - 0x9e, 0x81, 0x65, 0xf8, 0x09, 0xbb, 0x38, 0xca, 0x07, 0x8c, 0x85, 0xfa, - 0xb0, 0xc7, 0x71, 0x51, 0xc6, 0x9b, 0x21, 0xdc, 0xca, 0x44, 0xe7, 0x2d, - 0x79, 0xf2, 0x19, 0x2c, 0x93, 0xee, 0x09, 0x81, 0xb4, 0x6b, 0x0c, 0x08, - 0x9c, 0xab, 0xed, 0xc1, 0x5c, 0x73, 0x70, 0x7f, 0xc8, 0xac, 0x29, 0xdb, - 0xbf, 0x7c, 0x69, 0xb0, 0x28, 0xe0, 0xdf, 0x84, 0xd5, 0x8c, 0xba, 0x1f, - 0x41, 0x54, 0x2a, 0x48, 0xdd, 0x01, 0xff, 0x5d, 0x5c, 0x31, 0x17, 0x30, - 0x40, 0x3f, 0xdc, 0xc3, 0x0b, 0xba, 0x04, 0xd8, 0x1d, 0x30, 0xde, 0xaf, - 0x86, 0x69, 0xf5, 0xbe, 0x62, 0x8d, 0x75, 0xf7, 0x69, 0xf5, 0xb6, 0x44, - 0x5d, 0x0a, 0xae, 0xea, 0x8b, 0xe5, 0xa0, 0x58, 0x09, 0x52, 0x01, 0x5f, - 0x53, 0x9f, 0x8c, 0x06, 0xd8, 0x0c, 0xac, 0x1a, 0xa8, 0x4c, 0x31, 0xcb, - 0x98, 0xd6, 0x3b, 0xbb, 0xb9, 0x49, 0xd3, 0x3b, 0x92, 0xe8, 0x47, 0x88, - 0x8b, 0x55, 0x23, 0xe6, 0x16, 0xb8, 0xea, 0x24, 0x66, 0x1b, 0x64, 0xbc, - 0xa8, 0x50, 0x8f, 0xf6, 0xc0, 0xa6, 0x01, 0x70, 0xe5, 0x5a, 0x3b, 0xe1, - 0xb3, 0x70, 0xfe, 0x4a, 0x8c, 0x5d, 0xe6, 0xb0, 0xdf, 0xf9, 0x5d, 0x57, - 0x8e, 0x5f, 0xa6, 0xb5, 0x2e, 0x3b, 0x4f, 0xed, 0xfc, 0x98, 0x5f, 0x73, - 0x05, 0x22, 0x46, 0x53, 0x5e, 0x6e, 0xac, 0x54, 0x07, 0x3c, 0x12, 0x72, - 0xc7, 0x3e, 0xb4, 0x19, 0x2a, 0xc8, 0x6b, 0x24, 0x64, 0x95, 0xf3, 0xca, - 0x67, 0x1a, 0xd8, 0xdb, 0x02, 0xe0, 0xd6, 0xf7, 0x7d, 0xca, 0x7c, 0xdd, - 0xac, 0x4e, 0x10, 0xcb, 0x57, 0x07, 0xb3, 0xe6, 0xf9, 0xe4, 0x97, 0xfb, - 0x0f, 0x6f, 0x8f, 0x50, 0x58, 0xdb, 0x4b, 0xe2, 0xa2, 0xb5, 0x51, 0xff, - 0x1c, 0x45, 0x32, 0x04, 0x02, 0x9b, 0x9c, 0x5c, 0x26, 0x86, 0xd8, 0xba, - 0x64, 0xa2, 0xdd, 0xc1, 0x72, 0x71, 0xf0, 0x16, 0x2d, 0xaa, 0x0c, 0x44, - 0xee, 0xc6, 0x62, 0xf1, 0xb0, 0xcb, 0x14, 0xb1, 0x1c, 0x23, 0x29, 0x4e, - 0xc9, 0xaa, 0xd1, 0x05, 0xe6, 0x22, 0xa4, 0xa1, 0xdb, 0xb0, 0x3c, 0x05, - 0xb2, 0x9c, 0xdd, 0x34, 0x41, 0x32, 0x74, 0x9f, 0x07, 0x2d, 0x6d, 0x11, - 0x9f, 0xa4, 0xe3, 0x11, 0xe9, 0xf2, 0x05, 0x76, 0x43, 0xbe, 0x71, 0x02, - 0x94, 0x3d, 0x4e, 0xb5, 0xfe, 0x05, 0x1a, 0xf0, 0x44, 0x67, 0xee, 0xa3, - 0x13, 0x79, 0x72, 0x9e, 0x5e, 0x10, 0xa0, 0xea, 0x30, 0xe7, 0xbb, 0xbe, - 0x56, 0x71, 0xab, 0x4d, 0x2d, 0x53, 0x49, 0xd1, 0x7b, 0x10, 0x79, 0xfe, - 0xed, 0x0f, 0xdc, 0x97, 0x49, 0x64, 0x15, 0x9f, 0xe0, 0x77, 0xd0, 0xc6, - 0x3d, 0xe1, 0xee, 0x81, 0x68, 0xf4, 0x05, 0xa0, 0xae, 0xb0, 0xf8, 0xde, - 0x9d, 0x00, 0xc3, 0xf2, 0x58, 0x7f, 0xf8, 0x01, 0xad, 0x10, 0x7a, 0xeb, - 0x5d, 0x3c, 0xfd, 0x8b, 0x17, 0x95, 0xb2, 0xfc, 0xaa, 0xbf, 0x53, 0xbc, - 0x6b, 0xb7, 0xc9, 0x37, 0x59, 0xc1, 0xf4, 0x72, 0x5c, 0x58, 0xdc, 0xb7, - 0xeb, 0x1f, 0x6f, 0xb8, 0xb7, 0x07, 0x85, 0x3f, 0x04, 0x7e, 0x67, 0x02, - 0x26, 0x0d, 0x44, 0x31, 0x00, 0x9d, 0xa2, 0x67, 0x22, 0xad, 0x15, 0x6a, - 0x7b, 0x8c, 0xec, 0xd5, 0xb6, 0x07, 0x85, 0x3e, 0x00, 0xa2, 0xd1, 0xd9, - 0xb4, 0x9d, 0x60, 0x74, 0x56, 0xcd, 0xdd, 0x1e, 0xb1, 0xcc, 0xc2, 0x6e, - 0x54, 0x71, 0xba, 0xa4, 0x02, 0x50, 0x66, 0x39, 0x01, 0x38, 0x1c, 0x69, - 0x43, 0xcb, 0xc0, 0xaf, 0xfa, 0xd4, 0xed, 0xe1, 0x59, 0xb2, 0x3d, 0x4e, - 0x2f, 0x9f, 0x8e, 0x3c, 0xaa, 0x4d, 0x6f, 0x4b, 0xda, 0x5a, 0x3c, 0x63, - 0x9f, 0x43, 0x37, 0xc6, 0xda, 0x36, 0x75, 0x6d, 0x2c, 0x5c, 0xdb, 0x7e, - 0xf7, 0x92, 0xb1, 0xe1, 0x34, 0x1c, 0xe9, 0xc4, 0xcd, 0x43, 0x9e, 0x9c, - 0xe6, 0xf2, 0x56, 0x20, 0xa5, 0x7d, 0xc7, 0x15, 0x19, 0x04, 0xd4, 0x5e, - 0x0f, 0xa0, 0xc1, 0x1a, 0x68, 0x6b, 0xe2, 0x10, 0x24, 0x17, 0x24, 0x61, - 0x62, 0x08, 0x3e, 0xd5, 0xd3, 0x76, 0x06, 0xfd, 0x1b, 0xee, 0xc1, 0xd7, - 0xcd, 0x18, 0xdd, 0x20, 0x03, 0xd2, 0xba, 0xa6, 0x57, 0xa2, 0xf1, 0xb4, - 0x2a, 0x4d, 0x50, 0x68, 0x02, 0xbf, 0x23, 0xb6, 0x77, 0xf5, 0xff, 0xe6, - 0xe3, 0xb7, 0x72, 0xe4, 0xad, 0x1c, 0x78, 0x7b, 0x67, 0xfe, 0x16, 0xf9, - 0xe8, 0xa3, 0x7d, 0x38, 0x7d, 0x34, 0xe2, 0xa5, 0xf1, 0x2f, 0x07, 0x50, - 0x7f, 0xd9, 0x5e, 0x58, 0x46, 0xcc, 0xc3, 0x85, 0xc6, 0xc5, 0xbf, 0xa8, - 0x41, 0x68, 0xc7, 0x5d, 0x80, 0xae, 0x57, 0x9f, 0x6b, 0x09, 0x86, 0x03, - 0x8e, 0x54, 0x49, 0xb8, 0xbc, 0x4a, 0xf1, 0x22, 0x98, 0x48, 0xe2, 0x8c, - 0x15, 0x45, 0x8c, 0x9b, 0x39, 0x42, 0x77, 0x80, 0x4c, 0xa8, 0x90, 0x3d, - 0x87, 0x73, 0x7a, 0xad, 0x60, 0x30, 0x45, 0x13, 0x3e, 0xdc, 0x49, 0x66, - 0x4b, 0x68, 0x48, 0xc5, 0x78, 0xe6, 0x91, 0x38, 0x51, 0xbe, 0xf9, 0x4c, - 0xe5, 0x24, 0xf5, 0x9b, 0x1b, 0xcb, 0xb2, 0x3c, 0x53, 0xbd, 0x03, 0xc8, - 0x93, 0xbb, 0x88, 0x18, 0x2f, 0xa8, 0x2b, 0x72, 0x74, 0x06, 0xda, 0xab, - 0x47, 0x2d, 0x1f, 0x01, 0xec, 0x03, 0x4a, 0x03, 0x11, 0x2b, 0xfc, 0xcc, - 0xf2, 0xc9, 0xcb, 0xeb, 0xcd, 0xe4, 0xab, 0xfe, 0x24, 0x99, 0xde, 0x34, - 0x02, 0x7a, 0x4a, 0x7f, 0x94, 0xbe, 0x9f, 0x9a, 0x9b, 0x7c, 0x93, 0xe5, - 0x92, 0x20, 0x12, 0x04, 0x90, 0xcf, 0x48, 0x89, 0x63, 0xa6, 0x65, 0x91, - 0x4d, 0x8a, 0xf7, 0x5c, 0x20, 0x66, 0x75, 0x53, 0x58, 0x38, 0xd6, 0x27, - 0x82, 0xb9, 0x00, 0x00, 0x05, 0x05, 0x00, 0xfc, 0x39, 0x4e, 0xdf, 0xff, - 0x3a, 0x43, 0x95, 0x4c, 0x00, 0x4b, 0xad, 0x1a, 0xb3, 0xf2, 0x84, 0xbd, - 0x2d, 0x89, 0x27, 0x7a, 0x1d, 0x93, 0x93, 0xe2, 0x94, 0x82, 0x1b, 0x86, - 0x7e, 0x64, 0xba, 0x3d, 0x17, 0xe8, 0x44, 0xeb, 0x0b, 0x83, 0xd1, 0x1b, - 0x0b, 0xa9, 0x20, 0x00, 0x6b, 0x0f, 0x5b, 0xd8, 0x06, 0xe4, 0xbb, 0x22, - 0x5d, 0xfd, 0x7b, 0x3d, 0x6f, 0xd6, 0x00, 0xea, 0x9b, 0x3c, 0x6f, 0x25, - 0xbe, 0xd3, 0x93, 0xfa, 0xa4, 0x00, 0xfe, 0x7a, 0x61, 0xa2, 0x1c, 0x9a, - 0x53, 0x8e, 0xc5, 0x04, 0xbd, 0xf0, 0x3c, 0x99, 0xb5, 0xd1, 0x7d, 0x51, - 0x02, 0x8d, 0x66, 0xe3, 0x6b, 0x42, 0x0d, 0x1e, 0xf3, 0x45, 0xe8, 0x7a, - 0x5c, 0x92, 0x90, 0x02, 0xaf, 0xcd, 0x98, 0xe0, 0x28, 0xe0, 0x7d, 0x08, - 0x20, 0x95, 0xff, 0x13, 0xed, 0xe1, 0x55, 0xe1, 0xff, 0xe8, 0xdd, 0x5d, - 0x84, 0x02, 0xa0, 0x70, 0xa8, 0x6e, 0xe8, 0x3a, 0xd0, 0xcb, 0x1e, 0x79, - 0xb2, 0xc7, 0x37, 0xdd, 0x35, 0x4a, 0x71, 0x90, 0x6a, 0x75, 0xf2, 0x2d, - 0x43, 0xd4, 0x06, 0xcf, 0x85, 0xdd, 0xb3, 0x76, 0xa7, 0x96, 0x0a, 0x80, - 0xea, 0xd6, 0xb7, 0xee, 0x88, 0x4a, 0x43, 0xa7, 0x83, 0x4d, 0xfe, 0xf6, - 0x29, 0x39, 0xd5, 0x4b, 0xd9, 0x3c, 0x9d, 0x85, 0x7b, 0x8f, 0x2d, 0x8b, - 0x80, 0xf2, 0x77, 0x28, 0x6c, 0x75, 0x2c, 0x00, 0xf6, 0x8d, 0xdc, 0x8a, - 0xbd, 0x94, 0x00, 0x73, 0xfe, 0xd0, 0x44, 0xc1, 0x80, 0x17, 0xa7, 0x43, - 0x12, 0x46, 0x04, 0x35, 0x37, 0x0f, 0x1e, 0xe5, 0x81, 0xca, 0x81, 0x3f, - 0xd2, 0x3b, 0xf0, 0x27, 0xd4, 0x0f, 0x80, 0xe6, 0xa6, 0x6f, 0x81, 0x6c, - 0x58, 0x43, 0x05, 0x01, 0xc1, 0x13, 0xfa, 0xbd, 0xdc, 0x53, 0x7e, 0x1e, - 0xe5, 0x79, 0x94, 0xe0, 0x8a, 0x13, 0x7f, 0x31, 0x2d, 0x62, 0x89, 0xba, - 0xd5, 0x2f, 0x8d, 0x96, 0xbd, 0xbf, 0x6d, 0xe7, 0x66, 0x1e, 0xde, 0x34, - 0xb4, 0xcc, 0x3a, 0x53, 0x8b, 0xcf, 0x7d, 0xae, 0xed, 0x18, 0xec, 0x6e, - 0x6f, 0xa4, 0x3b, 0x0d, 0x34, 0xb8, 0x3d, 0x42, 0xca, 0x24, 0xe2, 0x64, - 0xe8, 0x2e, 0xb0, 0xd0, 0x84, 0xe4, 0x22, 0xa8, 0x66, 0x63, 0x33, 0x27, - 0xc4, 0x71, 0x89, 0xb3, 0x81, 0xdb, 0xa8, 0xde, 0x78, 0x4e, 0x9c, 0x8b, - 0x92, 0x14, 0xd1, 0xc8, 0x29, 0xee, 0x96, 0xc0, 0x34, 0x87, 0x18, 0xd6, - 0x38, 0x6c, 0x4f, 0x03, 0xad, 0x12, 0x18, 0x9b, 0xa5, 0xa7, 0x19, 0x74, - 0x53, 0x58, 0x2c, 0x5b, 0xc9, 0x4b, 0x74, 0x8a, 0x1e, 0x1a, 0xa8, 0xc6, - 0xa1, 0xbe, 0x39, 0x30, 0x87, 0x8b, 0x73, 0xac, 0xc3, 0xe1, 0x7e, 0x06, - 0x7f, 0x7d, 0xe8, 0x14, 0x60, 0xba, 0x7f, 0xe9, 0xf2, 0x4d, 0xa3, 0xee, - 0x18, 0x12, 0xc7, 0x90, 0x1c, 0x4c, 0xb3, 0x96, 0x2f, 0xeb, 0x84, 0x26, - 0x36, 0x63, 0xe9, 0x9d, 0x65, 0xc6, 0x5c, 0x08, 0x98, 0x51, 0xbd, 0x8f, - 0xbc, 0xb5, 0x10, 0x8e, 0xbc, 0x45, 0x10, 0x6d, 0x4f, 0x19, 0x0c, 0x4b, - 0x21, 0xc4, 0x51, 0xdd, 0x8a, 0x6b, 0x49, 0xd8, 0xb1, 0x37, 0x8a, 0xb4, - 0x4f, 0xd7, 0x3b, 0x14, 0x5c, 0x03, 0xfc, 0x50, 0x39, 0x39, 0x8a, 0x0d, - 0xe7, 0x17, 0x51, 0x75, 0x41, 0xe2, 0x95, 0xa7, 0xc5, 0x5b, 0x61, 0x01, - 0x35, 0x9a, 0xd3, 0xb2, 0xd5, 0xe7, 0xab, 0xe7, 0x84, 0x8f, 0x76, 0x66, - 0x8e, 0xf3, 0x67, 0x89, 0xc9, 0xdd, 0x84, 0x9a, 0x5b, 0x5f, 0x4f, 0xb4, - 0xe9, 0xe3, 0xd3, 0xdb, 0x6e, 0xa2, 0xf8, 0x4e, 0x93, 0xb7, 0x5b, 0x53, - 0x9c, 0xe9, 0xa8, 0xb0, 0xbe, 0xa0, 0x86, 0x0b, 0x24, 0x3e, 0x2c, 0x82, - 0xda, 0x78, 0x96, 0x13, 0x5d, 0xa2, 0xa8, 0xc1, 0xec, 0x3c, 0xbd, 0xd4, - 0xf8, 0xf8, 0x07, 0xcf, 0x4d, 0x6b, 0xa5, 0x18, 0x36, 0xde, 0x00, 0x1e, - 0x4f, 0x56, 0xf7, 0x0e, 0xaa, 0x4e, 0xd0, 0x00, 0x4e, 0xd1, 0xb8, 0xb3, - 0xe8, 0xcc, 0xf2, 0x95, 0xc6, 0xb5, 0xad, 0x9c, 0x81, 0x3b, 0xbc, 0x93, - 0x16, 0xfc, 0xb2, 0x57, 0xb7, 0x4c, 0x9c, 0x2a, 0x50, 0x23, 0x12, 0xf8, - 0x0c, 0xcc, 0x86, 0x04, 0x48, 0xf4, 0x47, 0xe6, 0x85, 0xb5, 0x2d, 0xd3, - 0x07, 0x44, 0x67, 0xf0, 0xaa, 0xd9, 0x7b, 0xf2, 0x1c, 0x3d, 0x79, 0x96, - 0x99, 0x6f, 0x32, 0x47, 0xe5, 0x0c, 0x3a, 0x0b, 0xff, 0xa6, 0x06, 0x7f, - 0xe3, 0x15, 0xb3, 0x9b, 0x9e, 0x09, 0x39, 0xa6, 0x7b, 0x80, 0x57, 0x28, - 0xc0, 0x13, 0x0c, 0xc7, 0x1e, 0x43, 0x2e, 0x9e, 0x31, 0xb9, 0xfc, 0x0e, - 0xf3, 0x8f, 0x3f, 0xfd, 0x30, 0xf5, 0x4f, 0x9f, 0x43, 0x18, 0xf2, 0x46, - 0x3f, 0xfb, 0xa7, 0x34, 0x1a, 0x9f, 0x5f, 0xd1, 0x62, 0x5e, 0x85, 0x43, - 0x40, 0x9b, 0x93, 0x6b, 0xe4, 0x06, 0xb7, 0x65, 0xa0, 0x16, 0xe6, 0x72, - 0x70, 0x1f, 0x1f, 0xf0, 0xaa, 0x18, 0xb9, 0xdd, 0xac, 0xe1, 0x59, 0x63, - 0xd4, 0x46, 0xe6, 0x12, 0x83, 0x2c, 0xa0, 0x1a, 0x13, 0x75, 0x3f, 0xd6, - 0x42, 0x93, 0xa1, 0x73, 0xd1, 0x43, 0x82, 0xfe, 0x7a, 0x36, 0x9d, 0x9a, - 0xec, 0x81, 0x44, 0x40, 0xd2, 0x02, 0xe4, 0xf2, 0x96, 0xb3, 0xae, 0x0f, - 0x31, 0x1a, 0x85, 0xa5, 0x95, 0x95, 0x5d, 0x2b, 0xa8, 0x06, 0x36, 0xd6, - 0x0d, 0x5c, 0x48, 0xe1, 0xb9, 0xa4, 0xd2, 0x86, 0xd4, 0xa9, 0x5a, 0xe4, - 0xc3, 0x33, 0xfd, 0xd7, 0x43, 0xf9, 0x75, 0x36, 0x95, 0x66, 0xe1, 0x9f, - 0xf8, 0xd7, 0xfb, 0x24, 0x82, 0xdd, 0x41, 0xcd, 0xbd, 0xdf, 0x7e, 0x3b, - 0xdf, 0xd9, 0x70, 0xf4, 0x4c, 0xd7, 0x9f, 0xea, 0x55, 0x4d, 0x14, 0x6e, - 0x31, 0x8e, 0x96, 0x50, 0x8d, 0x1f, 0x86, 0x50, 0xc7, 0xe5, 0x76, 0xa0, - 0x3b, 0x3f, 0xae, 0xa1, 0xa8, 0xc2, 0x30, 0x1f, 0x7a, 0x41, 0xac, 0x17, - 0xd6, 0x1a, 0xe4, 0x40, 0xce, 0x87, 0xf4, 0xa0, 0x91, 0x94, 0xc3, 0x06, - 0x99, 0x9a, 0xb9, 0x11, 0xaa, 0x58, 0x1c, 0x58, 0xf7, 0x84, 0xe9, 0x67, - 0x21, 0xc4, 0x28, 0x43, 0xa9, 0xe3, 0xb5, 0x46, 0x37, 0xb9, 0x48, 0x1b, - 0x11, 0x3f, 0x1d, 0xc0, 0xa7, 0x7f, 0xfe, 0x89, 0xe7, 0x11, 0x23, 0x87, - 0x8c, 0x47, 0x1d, 0x17, 0x72, 0x11, 0xc8, 0x4c, 0x09, 0x89, 0xcd, 0x87, - 0x0d, 0xb6, 0x2a, 0xd5, 0x20, 0xc7, 0xa0, 0xdb, 0x84, 0x45, 0xbe, 0x48, - 0x77, 0x39, 0x20, 0x94, 0x50, 0x3f, 0x1f, 0xc1, 0x15, 0x99, 0xdc, 0x98, - 0x23, 0xb0, 0x42, 0xc9, 0xb2, 0x71, 0xf4, 0x05, 0xf4, 0x40, 0x01, 0xab, - 0x89, 0x04, 0x53, 0x6d, 0xbb, 0x97, 0x23, 0xfb, 0xe9, 0x59, 0xdf, 0x76, - 0x23, 0x5e, 0xfb, 0x07, 0x11, 0xdd, 0x14, 0xc9, 0xc0, 0xb2, 0xf9, 0x25, - 0x1e, 0xe7, 0xce, 0x9f, 0xab, 0x21, 0x12, 0xfe, 0x27, 0xed, 0x7e, 0x3d, - 0x54, 0xc3, 0xe1, 0x8e, 0x6b, 0x95, 0xf3, 0xa1, 0xfd, 0x3c, 0x77, 0x5e, - 0x14, 0x8a, 0x97, 0xcd, 0x23, 0x56, 0x6a, 0x67, 0x2e, 0x26, 0xd6, 0xb4, - 0xb5, 0x4d, 0x67, 0xea, 0xff, 0xa0, 0x49, 0xf7, 0xde, 0xd0, 0xc6, 0xf8, - 0xe4, 0xe0, 0x4e, 0x90, 0xb7, 0x1d, 0x47, 0x1d, 0x52, 0x1d, 0x6f, 0x1a, - 0x52, 0xb4, 0x0a, 0xe4, 0x41, 0xbd, 0xeb, 0x1b, 0x9d, 0xf0, 0x7d, 0xb6, - 0x06, 0xd9, 0x27, 0xaa, 0x46, 0xd3, 0xcc, 0x47, 0x3e, 0x30, 0x34, 0x9a, - 0x65, 0x9f, 0xe5, 0x8c, 0xa6, 0xbd, 0x8c, 0xf7, 0x39, 0x1a, 0x81, 0x9c, - 0x3e, 0x66, 0xd6, 0x8e, 0xe2, 0x7c, 0x72, 0x77, 0xdb, 0x88, 0x1a, 0xa2, - 0x53, 0x17, 0x4d, 0x19, 0xc0, 0xd1, 0x13, 0x86, 0xa6, 0xc5, 0x86, 0xf9, - 0xd4, 0x78, 0xfd, 0x0c, 0x31, 0x18, 0x43, 0x8f, 0x84, 0xc1, 0xba, 0x15, - 0x17, 0x0b, 0xc8, 0xba, 0xe1, 0x8c, 0x65, 0xa9, 0x8c, 0x2a, 0x6e, 0x46, - 0xd4, 0xdd, 0x3c, 0xc4, 0x6a, 0x66, 0xb6, 0x9a, 0x44, 0x6d, 0xbb, 0xf1, - 0xf9, 0xc9, 0x7c, 0x2a, 0x33, 0xc1, 0x88, 0xef, 0x98, 0xd9, 0xac, 0x67, - 0xa9, 0x2d, 0xb8, 0xe7, 0x1b, 0xa7, 0x27, 0x68, 0xd5, 0x73, 0x7a, 0xc0, - 0xb5, 0x56, 0x5a, 0x72, 0xdd, 0xea, 0xcb, 0x75, 0xcf, 0x2e, 0x6b, 0xfb, - 0x2d, 0x6b, 0xf3, 0x0c, 0x8b, 0x3b, 0x79, 0xbc, 0x40, 0xb0, 0x22, 0x8f, - 0x37, 0x71, 0x28, 0xfc, 0xd6, 0x15, 0xb0, 0x41, 0x61, 0x97, 0xa0, 0xe4, - 0x8d, 0xaa, 0xa4, 0x2e, 0x20, 0x87, 0xe3, 0xe4, 0x30, 0x58, 0x1d, 0xf2, - 0xc4, 0x75, 0xcc, 0x3c, 0xcd, 0x5a, 0xdf, 0xe7, 0xb6, 0x0c, 0xaf, 0xfa, - 0x34, 0x82, 0x97, 0x86, 0xdc, 0x36, 0xf1, 0x4d, 0xdf, 0xc2, 0xe7, 0x53, - 0x24, 0x72, 0x70, 0xe3, 0x3c, 0x0a, 0x42, 0x89, 0x32, 0xaf, 0xf5, 0x7c, - 0x13, 0x59, 0xa6, 0xa5, 0xae, 0x68, 0x13, 0xb1, 0x01, 0x37, 0x24, 0x33, - 0xcb, 0x9c, 0x9d, 0x53, 0x58, 0x68, 0x99, 0xf3, 0xfc, 0x43, 0xa3, 0x6e, - 0x24, 0x18, 0x46, 0xf7, 0x10, 0x80, 0x85, 0xcf, 0xe0, 0x92, 0xe5, 0xe9, - 0x47, 0x07, 0x72, 0x80, 0xa0, 0x60, 0x92, 0x34, 0xb2, 0x60, 0x66, 0x52, - 0x67, 0x89, 0x61, 0x12, 0x50, 0xa5, 0x67, 0x85, 0xdc, 0x5c, 0x02, 0x23, - 0xe2, 0x5f, 0x98, 0x6b, 0xd9, 0xb9, 0x13, 0x4d, 0xc8, 0x7e, 0xdc, 0x17, - 0x00, 0x2e, 0xb1, 0xf6, 0x92, 0x21, 0xda, 0xbc, 0x93, 0x72, 0x99, 0xd7, - 0xa8, 0x47, 0xba, 0xde, 0xd0, 0xa4, 0x66, 0x3d, 0xdc, 0x07, 0x4e, 0x00, - 0x1d, 0xcc, 0xc9, 0x21, 0xb3, 0x07, 0xdd, 0x35, 0x27, 0x74, 0xd1, 0xac, - 0x63, 0xe6, 0x20, 0x69, 0xa1, 0x9c, 0x29, 0xbd, 0x0b, 0x30, 0xd3, 0x60, - 0x4b, 0x67, 0x54, 0xf3, 0x21, 0x03, 0x0f, 0x2a, 0x8b, 0x71, 0x6f, 0x73, - 0xcb, 0xac, 0x3c, 0x43, 0xf9, 0xea, 0x1f, 0x4d, 0x97, 0xb2, 0xf7, 0x5e, - 0x46, 0xb5, 0x46, 0x09, 0xa0, 0x1a, 0x4b, 0x74, 0x8a, 0x5a, 0xa3, 0xe5, - 0xae, 0xbc, 0xff, 0xcf, 0x59, 0xaf, 0x9b, 0xf7, 0x7b, 0x78, 0x1b, 0x29, - 0x40, 0x87, 0x53, 0x40, 0x93, 0xdb, 0x3c, 0x28, 0x97, 0x6d, 0x60, 0x92, - 0x5f, 0xb6, 0x0e, 0x46, 0x7d, 0xcc, 0x01, 0x94, 0xd5, 0x2f, 0x19, 0x5c, - 0x86, 0x86, 0x56, 0xa7, 0x98, 0x1d, 0x19, 0xd0, 0x12, 0x91, 0x81, 0x27, - 0xd7, 0x16, 0x09, 0x6e, 0x4e, 0x3d, 0x31, 0x3e, 0xd6, 0x03, 0xd2, 0x4a, - 0xb2, 0x21, 0xad, 0x7c, 0xe6, 0xac, 0x8b, 0x81, 0x01, 0xb6, 0x6b, 0x51, - 0x65, 0x07, 0xf6, 0x44, 0x6d, 0xd9, 0x2f, 0xc0, 0x21, 0xc3, 0x03, 0x4e, - 0x81, 0x66, 0x47, 0xe9, 0xe9, 0x80, 0x63, 0x2e, 0xa1, 0x35, 0x05, 0x52, - 0xfe, 0xdb, 0xf4, 0x6e, 0x0e, 0xa0, 0x4c, 0xfb, 0x8d, 0xfc, 0xd0, 0x2c, - 0x8f, 0xda, 0xdf, 0xef, 0x98, 0x28, 0x72, 0xe8, 0x43, 0xfc, 0x6c, 0x5f, - 0x45, 0xbd, 0x7d, 0xd6, 0x5d, 0x9a, 0xa0, 0x5c, 0x97, 0x00, 0xad, 0x9d, - 0x82, 0x18, 0x6d, 0x8a, 0xe5, 0xc2, 0x58, 0x8a, 0x26, 0x59, 0x36, 0x42, - 0xa3, 0x91, 0x06, 0x5f, 0x88, 0x11, 0xf6, 0x47, 0x13, 0xe4, 0xe2, 0xdc, - 0xd6, 0xb0, 0x6b, 0xb2, 0x0a, 0xae, 0xba, 0xa9, 0xc3, 0x81, 0x5c, 0xe4, - 0xf8, 0x1a, 0x53, 0x04, 0xc0, 0xba, 0xec, 0x96, 0xab, 0x84, 0x38, 0xd0, - 0xd3, 0x6d, 0x18, 0xca, 0xb5, 0x4e, 0x67, 0x88, 0x63, 0x3a, 0x03, 0x86, - 0xa7, 0x93, 0x55, 0xbf, 0x59, 0xb6, 0x7c, 0x8d, 0xdc, 0xe8, 0x45, 0xd9, - 0x84, 0xc5, 0x6e, 0x4f, 0x0c, 0x90, 0x8a, 0x4a, 0xc0, 0x08, 0x07, 0xec, - 0x29, 0xa0, 0x7d, 0x2c, 0x43, 0x57, 0x9c, 0x0e, 0x4a, 0x0e, 0xb5, 0xd7, - 0xe4, 0x70, 0x76, 0xdb, 0x47, 0x9e, 0xdc, 0xd2, 0xb5, 0xf0, 0x10, 0xe7, - 0x75, 0xa3, 0x18, 0x90, 0x73, 0x47, 0xd9, 0x52, 0x85, 0x7c, 0xb9, 0x74, - 0x63, 0x77, 0x60, 0x20, 0xe4, 0x8d, 0x01, 0x7d, 0x1a, 0x03, 0xa8, 0x0a, - 0x64, 0xa0, 0xa8, 0x2a, 0xe3, 0x5e, 0xb1, 0xbb, 0x03, 0x9b, 0x02, 0x3d, - 0x3d, 0x40, 0xed, 0x71, 0x11, 0xac, 0x35, 0x47, 0xe2, 0xc4, 0x1f, 0xe1, - 0x21, 0x4f, 0x8f, 0xa6, 0x12, 0x82, 0x2c, 0xe7, 0x47, 0x02, 0x5c, 0x70, - 0x06, 0xcc, 0x9e, 0x24, 0x97, 0xfa, 0x13, 0x52, 0x8b, 0x4d, 0x58, 0x7d, - 0xff, 0x3d, 0x6e, 0x91, 0xd0, 0x9f, 0xd5, 0x9b, 0x2d, 0xc1, 0x59, 0x02, - 0xa3, 0xc6, 0xcd, 0x32, 0x07, 0xcf, 0x53, 0xed, 0xb8, 0x01, 0x24, 0x65, - 0xbe, 0xbd, 0xc4, 0x45, 0x20, 0xa2, 0x55, 0xd5, 0x24, 0xd5, 0x8a, 0x1e, - 0xf1, 0xa6, 0xf4, 0x6b, 0xf3, 0x12, 0x20, 0xab, 0xb8, 0xe2, 0xb4, 0x72, - 0xec, 0xd8, 0x38, 0xa7, 0xc4, 0x59, 0x19, 0x88, 0x3b, 0xaf, 0x9c, 0xed, - 0x0a, 0x39, 0x2e, 0xce, 0xd9, 0x1d, 0xfc, 0x8a, 0x72, 0xab, 0x23, 0x73, - 0x73, 0xe1, 0x74, 0x90, 0x86, 0xfa, 0x29, 0xb5, 0x0a, 0x69, 0xe0, 0xbf, - 0x83, 0xf7, 0x9c, 0x12, 0x6b, 0x6f, 0x03, 0xe0, 0x58, 0x23, 0xab, 0xb6, - 0x41, 0xdb, 0xee, 0x84, 0x93, 0xde, 0x7e, 0x4b, 0x55, 0x23, 0x95, 0xb3, - 0xee, 0xf6, 0x31, 0xdc, 0x6a, 0xb6, 0xe1, 0xc8, 0xf1, 0x8f, 0x23, 0xae, - 0x29, 0x10, 0x45, 0xa6, 0x18, 0xf2, 0x94, 0x68, 0x33, 0x83, 0x40, 0x2d, - 0x9c, 0xa3, 0xee, 0xab, 0x6e, 0x3f, 0x5e, 0x6e, 0xb7, 0x39, 0x41, 0xf5, - 0x1c, 0xa1, 0x3b, 0xd5, 0xd2, 0xa8, 0xd0, 0x18, 0x8f, 0xfc, 0xe8, 0x53, - 0xe0, 0x9a, 0x69, 0xe0, 0x7a, 0xa6, 0x66, 0x9f, 0xe1, 0xb3, 0x82, 0xf6, - 0x9e, 0x7b, 0x0d, 0x65, 0x8a, 0x74, 0x73, 0xcc, 0x88, 0x79, 0x15, 0xea, - 0x8d, 0x50, 0xaa, 0xb1, 0x59, 0xeb, 0x7d, 0xc4, 0x4b, 0x38, 0xee, 0xda, - 0x80, 0xa4, 0xd5, 0x08, 0x80, 0xfc, 0xa3, 0x96, 0xca, 0x4f, 0x80, 0x0a, - 0xa9, 0x68, 0xf0, 0x8a, 0x87, 0xd1, 0xb3, 0xfc, 0x17, 0x87, 0x2e, 0x14, - 0xb6, 0x4d, 0x3d, 0x6e, 0x01, 0x54, 0xd4, 0x7e, 0x73, 0x14, 0xad, 0xdf, - 0x68, 0x20, 0x74, 0x64, 0x23, 0x97, 0x7b, 0x9a, 0xf6, 0xa0, 0xf2, 0x0f, - 0xe4, 0x1f, 0x7f, 0x74, 0xb3, 0x38, 0x39, 0x45, 0xfb, 0xa4, 0x8e, 0x2e, - 0x97, 0x14, 0x48, 0x4e, 0x3c, 0xe2, 0xb1, 0x0a, 0x06, 0x08, 0x17, 0x07, - 0x5d, 0xa3, 0x13, 0xf5, 0x57, 0xdd, 0x4a, 0x41, 0xc5, 0x8a, 0x7c, 0x67, - 0x3e, 0xfe, 0xb4, 0xaf, 0x1b, 0xf3, 0x0f, 0x43, 0xb3, 0x37, 0x05, 0x33, - 0xb7, 0x41, 0x8c, 0xda, 0x50, 0x2b, 0x1e, 0xb2, 0xb6, 0x2e, 0x5d, 0xb1, - 0x5b, 0x70, 0x34, 0xee, 0x71, 0xaa, 0xf0, 0x2c, 0x83, 0x46, 0x20, 0x04, - 0x75, 0xe4, 0x28, 0x4e, 0x29, 0x59, 0x7c, 0x83, 0xd8, 0xd1, 0x1e, 0xa8, - 0x06, 0xd6, 0xc6, 0x98, 0xe2, 0xaa, 0xb7, 0x9a, 0x02, 0x8d, 0x4c, 0x20, - 0x7c, 0xe9, 0xc4, 0xa3, 0x6e, 0xde, 0xf6, 0x2e, 0x67, 0x96, 0x18, 0x12, - 0x14, 0x7d, 0xf4, 0x45, 0xf3, 0x4f, 0x5c, 0xc6, 0x68, 0x53, 0x12, 0x0d, - 0xca, 0x84, 0xcf, 0x40, 0x35, 0xa0, 0xe9, 0xd6, 0xbf, 0x28, 0xb8, 0xd6, - 0x2f, 0x74, 0xe7, 0x2f, 0x8c, 0x59, 0xbd, 0xac, 0x2e, 0x59, 0x84, 0x1b, - 0x42, 0xa2, 0xa5, 0xcf, 0x08, 0xf1, 0xfe, 0x4e, 0x64, 0x3e, 0xff, 0x3c, - 0xfc, 0x74, 0x0f, 0xcf, 0x40, 0xbd, 0x13, 0x0d, 0x98, 0x01, 0xbf, 0x03, - 0xee, 0x82, 0x8d, 0x1c, 0x3e, 0x6a, 0x0e, 0x1f, 0xf3, 0x77, 0x44, 0x35, - 0x1a, 0xef, 0xe0, 0xcb, 0x72, 0xce, 0x4e, 0xaa, 0xb3, 0xd5, 0x4b, 0xca, - 0xda, 0x65, 0x49, 0x28, 0x5a, 0x0b, 0x08, 0x2d, 0x60, 0xc4, 0x24, 0xde, - 0x2c, 0x6f, 0xd6, 0x7e, 0xd5, 0x02, 0xb3, 0xf9, 0xd8, 0xa8, 0x50, 0xa6, - 0x43, 0xdf, 0x6a, 0xfb, 0xad, 0x3d, 0xfc, 0xf6, 0xdb, 0x15, 0xae, 0xed, - 0xb4, 0x01, 0x18, 0x33, 0x8e, 0x11, 0xe3, 0x88, 0x8d, 0xba, 0xf3, 0xdd, - 0xcd, 0xa7, 0xd5, 0xc9, 0x4c, 0xf8, 0xc0, 0xc5, 0xdf, 0xad, 0xa0, 0xe3, - 0xca, 0x02, 0xab, 0xe5, 0x95, 0xed, 0xf6, 0x3e, 0xc5, 0x29, 0x36, 0x57, - 0xb0, 0x08, 0xb4, 0x46, 0x33, 0xa7, 0xab, 0xd0, 0x01, 0x0e, 0x3f, 0x98, - 0x11, 0x70, 0x0f, 0xd8, 0x06, 0xff, 0xc5, 0x0f, 0xbb, 0x00, 0x58, 0xb3, - 0x9f, 0x9a, 0xf5, 0x9a, 0x82, 0xb6, 0x86, 0x28, 0x38, 0xaf, 0xb0, 0xf2, - 0xa8, 0x12, 0xc7, 0xbd, 0xe0, 0x12, 0xc8, 0x1d, 0x00, 0x7a, 0x88, 0xdb, - 0x36, 0xc8, 0xa4, 0xc2, 0x67, 0xa0, 0x24, 0x93, 0x2b, 0xb2, 0xb8, 0xf4, - 0xd5, 0x47, 0x9f, 0x86, 0x66, 0x27, 0xad, 0x3c, 0x90, 0xfb, 0x34, 0x2e, - 0xcb, 0xa5, 0x4a, 0x25, 0xe7, 0xc3, 0x6c, 0x7c, 0x42, 0xe6, 0x86, 0xc0, - 0x53, 0xb9, 0x45, 0x7e, 0x40, 0x7d, 0xb2, 0x13, 0xf8, 0x42, 0x79, 0xbc, - 0x91, 0x5e, 0x8a, 0x06, 0xf7, 0xc7, 0xbc, 0xa8, 0xb7, 0xab, 0xed, 0xd5, - 0x31, 0xd3, 0x0c, 0xeb, 0x7a, 0xf4, 0xc1, 0x15, 0xca, 0x90, 0x7a, 0x34, - 0x86, 0x58, 0xbc, 0x8f, 0x55, 0x4e, 0x77, 0x8d, 0x89, 0x04, 0x7c, 0xf8, - 0x70, 0xd0, 0x4b, 0xb9, 0xf8, 0xde, 0x9e, 0xc1, 0x58, 0x90, 0x37, 0x58, - 0xa7, 0xfa, 0x38, 0x62, 0xa4, 0x48, 0xca, 0x53, 0xcb, 0x19, 0x40, 0xd9, - 0x3b, 0x8d, 0x03, 0x07, 0xe4, 0x82, 0x72, 0x17, 0x03, 0xc3, 0xa5, 0xbc, - 0x38, 0x40, 0xb7, 0x1b, 0x1f, 0xd1, 0xc6, 0x4e, 0x14, 0xfc, 0x71, 0x20, - 0xef, 0x0a, 0xe5, 0x85, 0x65, 0xff, 0x8c, 0xc3, 0x43, 0x41, 0xe1, 0x1f, - 0xbb, 0xe5, 0x18, 0x93, 0x14, 0x12, 0xbd, 0x17, 0xea, 0xc1, 0xdb, 0x0f, - 0x01, 0xe6, 0xb7, 0xa4, 0x2a, 0xf2, 0x7b, 0x9c, 0x33, 0xfb, 0xcb, 0xf7, - 0x43, 0x3e, 0x8d, 0x6a, 0x04, 0xf5, 0x8e, 0x56, 0xf7, 0xed, 0xde, 0xb5, - 0x66, 0x9d, 0xa1, 0x33, 0x02, 0x19, 0x83, 0x50, 0x7c, 0xc5, 0x20, 0x6b, - 0xb8, 0xfc, 0x71, 0x1f, 0xd6, 0x4b, 0x3d, 0xad, 0x24, 0x61, 0x10, 0xfb, - 0xdc, 0x60, 0xda, 0x43, 0xdc, 0x4c, 0xb9, 0x91, 0xec, 0x52, 0x3c, 0x10, - 0x3a, 0x3c, 0x02, 0x0c, 0xff, 0x70, 0xb9, 0x54, 0xa6, 0x16, 0x9e, 0xe0, - 0x3f, 0x5f, 0x7c, 0xd4, 0x00, 0xaa, 0x02, 0xb9, 0x1e, 0x7e, 0xd0, 0x96, - 0x1c, 0x97, 0x54, 0x82, 0x63, 0xdf, 0x56, 0x86, 0xb4, 0x52, 0xdd, 0xa5, - 0x10, 0xa9, 0xaf, 0xe6, 0x1a, 0xa8, 0x42, 0xd1, 0xc4, 0xac, 0x4e, 0xb8, - 0x93, 0x8c, 0xad, 0x8d, 0x83, 0xd0, 0x1d, 0x52, 0xf9, 0x48, 0x0a, 0xb9, - 0x2e, 0xa9, 0xe2, 0x5b, 0x52, 0x63, 0x37, 0xb7, 0xd4, 0xdd, 0xdc, 0xd2, - 0xef, 0xe6, 0x16, 0xde, 0x14, 0x9b, 0x05, 0x9a, 0x95, 0x92, 0x00, 0xad, - 0x56, 0x46, 0xda, 0xa5, 0x03, 0x60, 0x2e, 0xbc, 0xdb, 0x80, 0x28, 0x77, - 0x30, 0xdc, 0xba, 0xf9, 0xe5, 0x25, 0x15, 0x11, 0x35, 0xad, 0x9c, 0xf8, - 0xf0, 0xc5, 0xd7, 0xeb, 0x9f, 0x7a, 0x43, 0xf5, 0x9f, 0xef, 0xbb, 0xab, - 0xbb, 0x9b, 0xab, 0x09, 0x27, 0xe5, 0xd9, 0x8a, 0x8b, 0x63, 0x57, 0x47, - 0xbc, 0xcd, 0x8d, 0x78, 0x74, 0x67, 0x63, 0x9d, 0xb3, 0x88, 0x69, 0x69, - 0x30, 0xee, 0x39, 0x84, 0x6b, 0xc0, 0x89, 0xf0, 0x07, 0x9a, 0xeb, 0x70, - 0x99, 0x2f, 0x19, 0x0f, 0xe5, 0xe7, 0x2e, 0xdd, 0x31, 0xc2, 0x47, 0xc3, - 0x93, 0xe5, 0xe4, 0xea, 0x49, 0xfd, 0x89, 0x74, 0xfc, 0xcc, 0x7e, 0xec, - 0x1b, 0xb8, 0x46, 0xf7, 0xf3, 0xf4, 0x91, 0x39, 0xb2, 0xda, 0x95, 0xc9, - 0xdd, 0x71, 0x4d, 0xa9, 0x4c, 0xe6, 0x9a, 0x0a, 0x86, 0x1e, 0xf0, 0x8d, - 0x7d, 0xa5, 0x8b, 0xc0, 0xb3, 0xc8, 0xe3, 0x6e, 0x0a, 0x79, 0x9c, 0xe9, - 0xbe, 0xb8, 0xd8, 0xe6, 0xce, 0xdf, 0xbf, 0xbf, 0xc9, 0xa0, 0xb2, 0xee, - 0xaa, 0xf8, 0x62, 0x13, 0x20, 0x1d, 0x43, 0x24, 0x1b, 0x66, 0x6c, 0x51, - 0x94, 0x01, 0xf5, 0x90, 0xeb, 0xde, 0x9c, 0x9b, 0x96, 0xe1, 0x83, 0x5a, - 0x28, 0x31, 0x25, 0x98, 0x51, 0x1a, 0x01, 0x63, 0xda, 0x5b, 0x78, 0xf4, - 0x0b, 0x34, 0x5d, 0x26, 0xa7, 0x1a, 0x6a, 0x10, 0x69, 0x91, 0xc1, 0xe1, - 0x49, 0x74, 0xe3, 0x38, 0x11, 0x00, 0xdb, 0xd6, 0xa0, 0x3e, 0x74, 0x34, - 0xa8, 0xf5, 0x06, 0x07, 0xee, 0x73, 0xf6, 0xb2, 0x6c, 0x28, 0x0f, 0xd5, - 0x32, 0xbb, 0xea, 0x08, 0xc3, 0xe1, 0x19, 0x0d, 0xee, 0x14, 0x90, 0xeb, - 0x5c, 0x81, 0x8a, 0x62, 0x8e, 0x14, 0xc7, 0x1c, 0x00, 0x88, 0x65, 0x39, - 0x85, 0xec, 0x12, 0xd1, 0xe9, 0xef, 0x03, 0xc9, 0xc1, 0x1f, 0x8f, 0x8f, - 0x77, 0x64, 0x08, 0x72, 0x75, 0x00, 0x54, 0x4b, 0x89, 0x81, 0xfc, 0xa9, - 0x72, 0xdb, 0xd7, 0x1b, 0x45, 0xd9, 0xcb, 0x08, 0xb6, 0x87, 0xd2, 0xfa, - 0x62, 0xcc, 0x72, 0x8b, 0x64, 0x2d, 0x93, 0xda, 0x8f, 0xda, 0x6a, 0x78, - 0xa3, 0x01, 0x05, 0x8f, 0x20, 0xff, 0xd1, 0xf0, 0x65, 0x7c, 0xa1, 0xda, - 0x24, 0x88, 0x53, 0x88, 0xff, 0xb5, 0x15, 0x7e, 0x2c, 0x6e, 0x67, 0x27, - 0x7a, 0xb8, 0x3d, 0xd2, 0x5a, 0x51, 0xd0, 0x5d, 0xd4, 0x33, 0x92, 0x40, - 0x93, 0x43, 0x30, 0x35, 0xa4, 0x87, 0x6f, 0x2f, 0x15, 0x5c, 0x84, 0xc3, - 0x37, 0xd7, 0xfe, 0x49, 0xe9, 0x06, 0xeb, 0x86, 0xbd, 0xc2, 0x37, 0x4d, - 0x0b, 0x65, 0xea, 0x1a, 0x06, 0x0a, 0xc3, 0xc3, 0x94, 0xf8, 0x5c, 0x91, - 0xe4, 0x72, 0x99, 0x2e, 0x52, 0x0e, 0xc3, 0x0d, 0xa1, 0x1b, 0x85, 0x41, - 0x04, 0xb3, 0x80, 0xc5, 0x94, 0x84, 0xfc, 0x85, 0x27, 0xa9, 0xb5, 0x26, - 0x0a, 0x2b, 0xd5, 0xbd, 0x29, 0xdd, 0xae, 0x9c, 0x3a, 0x16, 0x49, 0x2c, - 0x93, 0xb4, 0x61, 0xaa, 0xd8, 0xa9, 0x63, 0xfc, 0x55, 0x27, 0xc5, 0x9f, - 0x64, 0xfd, 0x51, 0x00, 0x3a, 0x18, 0x59, 0x26, 0x6d, 0xb7, 0x19, 0x55, - 0xab, 0xe3, 0x9f, 0xb7, 0x5e, 0xca, 0x2e, 0xd8, 0x72, 0x61, 0x1a, 0x6d, - 0x98, 0xac, 0x61, 0x35, 0xb1, 0xe7, 0xc3, 0x18, 0xdb, 0x1d, 0x84, 0x58, - 0xaa, 0x90, 0xee, 0x2c, 0xe3, 0xff, 0x62, 0xc8, 0x5c, 0xb8, 0xee, 0x56, - 0x5c, 0x60, 0xb7, 0x84, 0x80, 0x2e, 0xf6, 0xe7, 0x92, 0x13, 0x0d, 0x0a, - 0xca, 0xe4, 0x2b, 0x50, 0x04, 0x4c, 0x0a, 0x43, 0xc5, 0x70, 0x09, 0x23, - 0xeb, 0x5d, 0xa9, 0xdd, 0xb8, 0x35, 0x6a, 0x54, 0xc5, 0x78, 0x92, 0x58, - 0x06, 0x68, 0x7d, 0xff, 0x4d, 0x15, 0x65, 0xa2, 0x3d, 0x26, 0x7f, 0x30, - 0x7d, 0x4d, 0x0c, 0x27, 0x9f, 0x66, 0x97, 0x8e, 0x0e, 0xcc, 0x38, 0x63, - 0x23, 0xc0, 0xd0, 0x07, 0xe6, 0x2b, 0x7b, 0x82, 0x5f, 0x39, 0x3e, 0xf9, - 0x2b, 0xcf, 0xcd, 0xae, 0xf5, 0x9b, 0xde, 0x1a, 0x19, 0xf1, 0x24, 0x7e, - 0xc2, 0xe2, 0x53, 0x93, 0xf4, 0xf9, 0xc8, 0x27, 0x67, 0xe7, 0x30, 0x95, - 0x09, 0x58, 0x49, 0xc7, 0x25, 0x1a, 0x30, 0x2e, 0x4c, 0x2f, 0x96, 0xc5, - 0x65, 0xa9, 0x25, 0xd3, 0x12, 0x9b, 0xa5, 0x05, 0x0b, 0xe3, 0xda, 0x9e, - 0x34, 0xa8, 0x62, 0x0d, 0x0a, 0x4d, 0xae, 0x44, 0x12, 0xbb, 0x31, 0xb4, - 0x3d, 0x79, 0xf2, 0x18, 0x87, 0x15, 0xae, 0x4e, 0x94, 0x57, 0x40, 0xed, - 0x8c, 0x30, 0x0f, 0x5e, 0x31, 0x2a, 0x74, 0x54, 0x78, 0x41, 0x2e, 0x10, - 0xc3, 0xac, 0xdb, 0x47, 0xc6, 0xd0, 0x25, 0x3b, 0x32, 0xac, 0x00, 0xcb, - 0xc3, 0x1a, 0x47, 0xe4, 0x01, 0x55, 0xc6, 0x04, 0x36, 0x4f, 0xd7, 0xca, - 0x15, 0x6a, 0x51, 0x97, 0xca, 0x07, 0x23, 0xa1, 0x1d, 0xa2, 0x56, 0x76, - 0xc9, 0x79, 0xf8, 0xf5, 0x16, 0x37, 0x71, 0x7e, 0x58, 0x83, 0xd8, 0xc3, - 0x8d, 0x85, 0x13, 0x60, 0x5f, 0x0d, 0x2d, 0x59, 0xa1, 0x6e, 0xbb, 0x4c, - 0x09, 0x6c, 0x04, 0x2a, 0x15, 0x7a, 0x36, 0x6e, 0x7b, 0xe4, 0xac, 0x21, - 0x5f, 0x3b, 0x07, 0x8e, 0x6f, 0x45, 0xe8, 0x2e, 0xbd, 0xde, 0x67, 0xe5, - 0xac, 0xd6, 0xdb, 0x40, 0xab, 0xdb, 0x3d, 0xb2, 0xc4, 0x3e, 0xfd, 0xa1, - 0x87, 0x3b, 0x87, 0x92, 0x25, 0x1f, 0xf8, 0x13, 0x78, 0x56, 0xfe, 0xd2, - 0xa8, 0x13, 0x81, 0x92, 0x7f, 0xfd, 0x4d, 0x7e, 0xb7, 0x1a, 0xde, 0xaf, - 0x5e, 0xe2, 0xb7, 0x4b, 0xce, 0x6f, 0x2d, 0x45, 0xf9, 0x13, 0x93, 0xaf, - 0x82, 0x3f, 0x5c, 0x1e, 0xd7, 0x7e, 0x42, 0xe4, 0x2c, 0x43, 0x3d, 0x30, - 0x7e, 0x1b, 0xd6, 0x40, 0x29, 0x80, 0xfa, 0x4b, 0xec, 0xa4, 0xb6, 0x12, - 0x0c, 0x91, 0x58, 0x33, 0xe2, 0xa3, 0x02, 0xc5, 0x13, 0x16, 0x4a, 0x5c, - 0xed, 0xc8, 0xd7, 0x3c, 0xfc, 0x3a, 0x4e, 0x41, 0x6f, 0x92, 0x0e, 0xcf, - 0x65, 0xd2, 0x86, 0x4e, 0x81, 0xd6, 0x80, 0x60, 0xe6, 0xd5, 0xc1, 0xec, - 0xa1, 0x74, 0x45, 0xc1, 0x38, 0xc9, 0xca, 0xda, 0x54, 0xea, 0x29, 0xb3, - 0xfa, 0x58, 0xda, 0xb2, 0x74, 0xd1, 0x5e, 0x9f, 0xa2, 0x6a, 0xdb, 0x7e, - 0xc0, 0x94, 0x57, 0x10, 0x60, 0x43, 0x05, 0x44, 0xba, 0xb7, 0x32, 0xcd, - 0xd1, 0xb6, 0x05, 0x63, 0x6f, 0x86, 0xef, 0xaa, 0x23, 0x5d, 0xc7, 0xf5, - 0xc1, 0x7e, 0x93, 0x74, 0x75, 0xba, 0xf3, 0x01, 0x3a, 0xb0, 0x83, 0xed, - 0xf0, 0x81, 0x2e, 0xe2, 0x50, 0xbf, 0x78, 0xf8, 0x5c, 0x10, 0x79, 0x67, - 0x19, 0xd6, 0x1d, 0xde, 0x24, 0x87, 0x8c, 0x34, 0x80, 0xfe, 0xe0, 0x50, - 0x43, 0x7b, 0x8c, 0x0f, 0x4d, 0xb8, 0x8e, 0x11, 0xbb, 0x48, 0x07, 0xa4, - 0x18, 0x5f, 0xa9, 0x82, 0xf0, 0x3b, 0xc5, 0x11, 0x3b, 0xdc, 0xcb, 0xc2, - 0xea, 0x74, 0x8c, 0x07, 0x0d, 0xba, 0xe5, 0x35, 0x22, 0xf7, 0x03, 0x9b, - 0x6f, 0xc7, 0x7c, 0xe5, 0x94, 0xf3, 0x98, 0xe3, 0x38, 0x84, 0x90, 0xc6, - 0x9d, 0xc7, 0x3c, 0xd6, 0x2e, 0xd3, 0x70, 0xe6, 0xe3, 0x76, 0x00, 0x85, - 0x58, 0x2f, 0x38, 0x3f, 0x06, 0x86, 0x62, 0xed, 0xf7, 0xda, 0x5e, 0x62, - 0x9e, 0x65, 0x3b, 0x6b, 0x97, 0xf3, 0x88, 0x18, 0x66, 0xa9, 0x24, 0x3b, - 0xe2, 0xd4, 0xb4, 0x81, 0x4c, 0x87, 0xcb, 0xc0, 0xe7, 0x6d, 0x67, 0xc0, - 0xb1, 0x62, 0x0e, 0xc7, 0xad, 0xfd, 0x39, 0xd4, 0xfc, 0x60, 0x4e, 0xc9, - 0xa9, 0xd3, 0xb1, 0xc4, 0xbd, 0x2f, 0x06, 0xd5, 0x73, 0x82, 0xd6, 0xa5, - 0x00, 0xea, 0xb6, 0x86, 0xb9, 0xd3, 0xa4, 0xe4, 0xc6, 0xb1, 0x4c, 0x23, - 0x17, 0x8d, 0x08, 0x3c, 0x5a, 0x42, 0xc6, 0xba, 0x4c, 0x3a, 0x60, 0x07, - 0x7d, 0x12, 0x36, 0xa9, 0x5f, 0x2e, 0xbe, 0x80, 0x52, 0x31, 0x7c, 0xba, - 0x3e, 0xc7, 0x00, 0x43, 0x38, 0xe9, 0x15, 0x98, 0x05, 0xa7, 0xc0, 0xa4, - 0xb1, 0x8c, 0xd3, 0x3c, 0xcc, 0x84, 0x3d, 0xbf, 0x1d, 0x55, 0xff, 0x8d, - 0xfd, 0x7e, 0xca, 0x6f, 0x5b, 0x59, 0x7f, 0xb7, 0xf5, 0x36, 0xd1, 0x64, - 0x59, 0x5b, 0xa5, 0x90, 0xea, 0x58, 0xef, 0x94, 0x3f, 0x35, 0x9a, 0x14, - 0xc6, 0x38, 0xc9, 0x8c, 0x51, 0xc8, 0xa1, 0xb9, 0x81, 0x80, 0x46, 0xc2, - 0x40, 0x58, 0x77, 0x15, 0x82, 0xce, 0xe7, 0x6b, 0x38, 0xcd, 0x32, 0xb7, - 0xe0, 0x15, 0x97, 0x36, 0x19, 0x41, 0xb1, 0x0e, 0x10, 0x48, 0xcf, 0x7e, - 0x68, 0x30, 0xdb, 0x6d, 0xd2, 0x80, 0xa2, 0x6b, 0xed, 0xcf, 0x4d, 0x84, - 0x09, 0x5c, 0xa7, 0x48, 0xbf, 0x64, 0x3d, 0x8d, 0x6a, 0x3f, 0xfb, 0x58, - 0x35, 0x4b, 0x3f, 0xf8, 0x6f, 0x0b, 0x89, 0x38, 0x09, 0x05, 0xf3, 0x92, - 0x78, 0xc8, 0x1e, 0x9a, 0x0e, 0x35, 0x66, 0x3b, 0x4a, 0x34, 0x62, 0x86, - 0xb8, 0x9a, 0x41, 0xca, 0xd2, 0x50, 0x3c, 0x18, 0x86, 0x54, 0x41, 0x0b, - 0xb2, 0x86, 0x6a, 0xbf, 0x4c, 0x07, 0x93, 0x0a, 0x45, 0xe9, 0x2a, 0xa5, - 0xaf, 0x79, 0x1a, 0x55, 0x74, 0x12, 0x3e, 0x02, 0xb5, 0x8a, 0x09, 0xe0, - 0xbd, 0xe0, 0x01, 0x8d, 0x3d, 0xf4, 0xbc, 0xaa, 0xa0, 0x97, 0xb5, 0x26, - 0x71, 0x0d, 0xd1, 0x77, 0xc0, 0xdd, 0x09, 0xe7, 0xc5, 0x47, 0x61, 0x91, - 0x28, 0x59, 0x0c, 0x45, 0xe0, 0x0e, 0xd7, 0xdc, 0x73, 0x84, 0xe6, 0x1e, - 0x80, 0x48, 0x4d, 0xf1, 0x70, 0x8a, 0xb2, 0xc1, 0x65, 0x79, 0x0f, 0xa8, - 0x33, 0xf7, 0x89, 0xae, 0xb0, 0xdb, 0xb6, 0x06, 0xc2, 0x3a, 0x40, 0x7d, - 0x31, 0x80, 0x63, 0x96, 0xc0, 0xc4, 0xa1, 0xe0, 0x31, 0xc0, 0x3b, 0x36, - 0xae, 0xb7, 0x18, 0xf1, 0x6a, 0xb5, 0xc9, 0x90, 0xa9, 0xd3, 0x8d, 0x06, - 0x76, 0xca, 0xfd, 0x1d, 0x4d, 0x3b, 0xc8, 0xd1, 0x29, 0x07, 0x39, 0xb8, - 0xf2, 0x04, 0x53, 0x2f, 0xb0, 0x61, 0x98, 0xc4, 0xbc, 0x96, 0x18, 0x7e, - 0xbd, 0xff, 0x21, 0x10, 0xf2, 0x62, 0xeb, 0x45, 0x3c, 0x0f, 0x05, 0xb3, - 0x5d, 0xd0, 0x70, 0xf2, 0xe9, 0xa6, 0x90, 0xa2, 0xab, 0x33, 0x44, 0x89, - 0x1f, 0x5c, 0x47, 0xe4, 0x13, 0x34, 0x88, 0x73, 0xc8, 0x86, 0x3d, 0x0c, - 0xe8, 0x55, 0xa4, 0x56, 0x6d, 0x61, 0x66, 0x35, 0x7b, 0xc8, 0xf0, 0x57, - 0x03, 0x55, 0xc9, 0xd9, 0x0e, 0x9c, 0xce, 0xc4, 0x06, 0x16, 0xae, 0x37, - 0x42, 0x17, 0x7e, 0xb4, 0x03, 0xdb, 0x07, 0x8f, 0x61, 0xd7, 0x3b, 0x14, - 0x9d, 0x47, 0x0e, 0xec, 0xda, 0x4a, 0x3d, 0x70, 0x8c, 0x46, 0x01, 0xe8, - 0xdb, 0x52, 0x6c, 0x6b, 0x71, 0x20, 0x97, 0x28, 0x68, 0x14, 0x4d, 0x38, - 0x98, 0xe7, 0x1f, 0x66, 0xef, 0xe7, 0x43, 0x43, 0x5b, 0xd6, 0x47, 0x1d, - 0xfd, 0xbd, 0xfe, 0xdc, 0xed, 0x1b, 0xff, 0x5a, 0xbd, 0x39, 0xd1, 0x5f, - 0x9e, 0xf3, 0x1d, 0x2f, 0x7e, 0xa2, 0x6b, 0x38, 0x31, 0x62, 0x1c, 0xff, - 0x8c, 0x83, 0xfd, 0x2e, 0xda, 0x19, 0x07, 0x02, 0x24, 0xb5, 0x3c, 0x03, - 0x99, 0x9d, 0x96, 0x0c, 0xc2, 0xfd, 0x78, 0xd0, 0xea, 0x3e, 0x95, 0xf9, - 0x58, 0x3f, 0x13, 0x31, 0xdb, 0x0a, 0x28, 0x0d, 0xb2, 0x0c, 0x13, 0xc1, - 0x97, 0xa3, 0xe2, 0x20, 0x99, 0x7c, 0x9a, 0xf5, 0xf4, 0xfc, 0x03, 0x95, - 0x66, 0x17, 0xc8, 0x44, 0x18, 0xb8, 0x31, 0x9a, 0x9b, 0x35, 0x45, 0x66, - 0xe2, 0xc4, 0x8d, 0x91, 0x91, 0xee, 0x41, 0x92, 0x9e, 0x8e, 0x14, 0xea, - 0x31, 0x30, 0x21, 0x89, 0x5a, 0xf4, 0x33, 0x9a, 0x7d, 0xf5, 0x20, 0xa0, - 0x15, 0x02, 0x83, 0x45, 0xf1, 0x90, 0xa2, 0xe4, 0x39, 0x74, 0x3f, 0xdc, - 0x9c, 0x1e, 0xb1, 0xbd, 0x04, 0x23, 0xc9, 0x2c, 0x24, 0xdc, 0x21, 0x1a, - 0xe5, 0x65, 0xa4, 0xdd, 0xe8, 0x04, 0xcd, 0x8b, 0x11, 0x1e, 0x72, 0x1e, - 0x21, 0xaf, 0x4f, 0xeb, 0x87, 0x47, 0x3e, 0xa5, 0x1d, 0x89, 0xe3, 0xb0, - 0xfe, 0x56, 0xc1, 0x84, 0xfc, 0x55, 0x5e, 0x71, 0x8a, 0x0a, 0x12, 0x7d, - 0x12, 0x70, 0x1d, 0x82, 0x90, 0x99, 0x2a, 0xd4, 0x9d, 0x9f, 0x86, 0x76, - 0x1a, 0xc4, 0x48, 0xd6, 0x3c, 0xd0, 0x80, 0x7e, 0x5d, 0x07, 0x53, 0x05, - 0x4c, 0x06, 0x90, 0x8b, 0xd0, 0x34, 0x86, 0xd9, 0x46, 0xe6, 0xc9, 0xbd, - 0xb9, 0x60, 0xfc, 0x42, 0x5c, 0x67, 0xb7, 0x1a, 0xa6, 0xcb, 0x48, 0x05, - 0x23, 0x34, 0x66, 0x92, 0x07, 0xcd, 0x35, 0x92, 0x43, 0x69, 0x55, 0xa2, - 0x3d, 0x29, 0x6d, 0xd5, 0xe2, 0x2d, 0x93, 0x71, 0x5f, 0x86, 0x95, 0xdf, - 0x85, 0x45, 0x61, 0x96, 0xcb, 0x34, 0x6c, 0x4e, 0x44, 0x71, 0x5b, 0x21, - 0xe8, 0xaa, 0xa7, 0x3c, 0xd2, 0xe6, 0x48, 0xaf, 0xc6, 0x02, 0x31, 0x4f, - 0xd0, 0x8b, 0x0f, 0x8a, 0x3d, 0x19, 0x05, 0xe1, 0xaa, 0xc5, 0x80, 0xb2, - 0xdc, 0x3c, 0x45, 0xe9, 0x7f, 0x8e, 0xa5, 0x3a, 0xc7, 0xca, 0x0d, 0x0a, - 0x48, 0x80, 0x5e, 0xe6, 0x28, 0x7f, 0x73, 0x4d, 0xcb, 0x9c, 0x58, 0x7a, - 0x66, 0x4a, 0x91, 0x38, 0xf5, 0x44, 0x78, 0x2a, 0xfc, 0xd8, 0x27, 0x91, - 0x9c, 0xa8, 0xd8, 0xce, 0x50, 0x36, 0x78, 0xab, 0x60, 0x52, 0xe6, 0x41, - 0x13, 0x99, 0x02, 0xb6, 0x54, 0xdb, 0xf0, 0xdc, 0x5d, 0xa2, 0x9d, 0x57, - 0xa6, 0xd7, 0xc1, 0x86, 0xb0, 0x04, 0x7b, 0x85, 0x8f, 0xd9, 0x83, 0xf0, - 0x57, 0xaa, 0xef, 0xa6, 0x92, 0x6e, 0x14, 0x3a, 0x6c, 0xc3, 0xf9, 0xef, - 0xb0, 0x3d, 0x89, 0xd6, 0x43, 0xae, 0xb2, 0x8e, 0xb3, 0x13, 0xae, 0x4e, - 0x54, 0xba, 0x0d, 0x85, 0x8d, 0x87, 0x98, 0x9f, 0xaa, 0xb1, 0x40, 0x1e, - 0x60, 0xfe, 0xed, 0xfc, 0xff, 0x8a, 0x6a, 0x79, 0xc7, 0x90, 0xfb, 0xcb, - 0x8c, 0x11, 0x73, 0x21, 0x90, 0xe3, 0xa2, 0x1c, 0xa2, 0xdb, 0xd7, 0x50, - 0xd7, 0xd9, 0x82, 0x53, 0xc0, 0x2f, 0xb5, 0x81, 0x8e, 0x3e, 0x5f, 0x4e, - 0x3e, 0xd5, 0x49, 0xbe, 0x42, 0x0d, 0x97, 0xb2, 0x0b, 0x6c, 0x2d, 0xd8, - 0xce, 0xb4, 0x27, 0x4f, 0x5e, 0x19, 0x76, 0xdd, 0xbe, 0xf8, 0xfa, 0xb4, - 0x96, 0x67, 0x30, 0xfb, 0xf0, 0x9e, 0xaa, 0x3b, 0x5e, 0x64, 0x51, 0xdd, - 0xf1, 0x82, 0x0a, 0x4f, 0x16, 0x8b, 0xfb, 0x2b, 0x7c, 0xd3, 0xc9, 0x39, - 0xfc, 0x18, 0xc1, 0xe3, 0xe5, 0x42, 0x63, 0x90, 0x79, 0xcb, 0xa4, 0xb8, - 0xcb, 0x98, 0x60, 0x62, 0x22, 0x97, 0x0b, 0x6b, 0xef, 0xe2, 0x8d, 0xe8, - 0x72, 0xc9, 0xcc, 0xf6, 0xe5, 0x82, 0x2d, 0x2d, 0xd0, 0x63, 0x63, 0xf3, - 0xb0, 0xd0, 0x36, 0x41, 0xfc, 0x1f, 0xf4, 0x8a, 0xae, 0x00, 0xe0, 0x27, - 0x25, 0x7d, 0x05, 0x41, 0x15, 0x37, 0x5e, 0x5e, 0x48, 0xea, 0xc5, 0x65, - 0x71, 0x27, 0x5b, 0x2c, 0x33, 0x91, 0xc9, 0xdd, 0x73, 0xb6, 0xca, 0x4b, - 0xf2, 0xf6, 0xca, 0x72, 0x0d, 0xeb, 0xb7, 0x2c, 0x3b, 0xc8, 0x4e, 0x11, - 0x5d, 0xb9, 0x2d, 0x18, 0x33, 0x61, 0x71, 0xd1, 0x62, 0x08, 0xbb, 0x2b, - 0x36, 0x3a, 0x8b, 0x2a, 0xfa, 0x12, 0xad, 0xd6, 0xe2, 0x29, 0x5c, 0x06, - 0x99, 0x37, 0x7d, 0xd2, 0xc5, 0x53, 0xb8, 0x38, 0x97, 0xd7, 0xca, 0xbb, - 0x87, 0x3e, 0x46, 0x95, 0xac, 0x85, 0xaf, 0xc1, 0x12, 0xbc, 0xaa, 0x6e, - 0xae, 0x09, 0x6d, 0x35, 0xdd, 0xaf, 0xe3, 0xa5, 0x82, 0xac, 0xca, 0xb6, - 0xaa, 0x89, 0x5e, 0x47, 0xca, 0x6c, 0x10, 0x30, 0x6b, 0x41, 0x19, 0xad, - 0x00, 0xee, 0xe9, 0xe0, 0xc7, 0x26, 0xcb, 0x09, 0x29, 0xf0, 0x93, 0x67, - 0x90, 0x80, 0xf4, 0x65, 0x40, 0x57, 0x3d, 0xf2, 0x4c, 0x5b, 0x31, 0x07, - 0x02, 0xc1, 0x72, 0xe5, 0x88, 0xa2, 0xeb, 0xf6, 0x7f, 0x19, 0xcb, 0xca, - 0x12, 0xbf, 0xba, 0x46, 0x07, 0x20, 0x26, 0x36, 0x33, 0x9b, 0xd6, 0xac, - 0x57, 0x5b, 0x37, 0x36, 0x14, 0x5a, 0x73, 0x20, 0x55, 0xfe, 0x41, 0xc8, - 0xff, 0x29, 0xc0, 0xe2, 0x9c, 0x67, 0x1a, 0x5c, 0xd1, 0x03, 0x60, 0x44, - 0xc8, 0x0f, 0x15, 0x86, 0x67, 0xda, 0x64, 0xe2, 0x54, 0x09, 0x00, 0xcf, - 0xca, 0x8c, 0x54, 0x79, 0xce, 0x27, 0x5e, 0x50, 0xe0, 0xb6, 0xa8, 0xa2, - 0x97, 0x0b, 0x8d, 0x60, 0x86, 0xf5, 0x93, 0x09, 0x14, 0x74, 0xb9, 0x88, - 0xf3, 0xac, 0x34, 0xc0, 0x0e, 0x10, 0x3a, 0x69, 0x40, 0x6e, 0x97, 0x82, - 0xd1, 0xe8, 0xa8, 0x73, 0xa6, 0x22, 0xf2, 0x67, 0x80, 0x99, 0x4c, 0xa0, - 0x38, 0x21, 0xec, 0x78, 0xa1, 0x63, 0x19, 0xdc, 0xcf, 0x32, 0xc0, 0x75, - 0x0f, 0xa3, 0x74, 0x84, 0x8f, 0x79, 0x12, 0x30, 0x23, 0xca, 0xe8, 0xe9, - 0x18, 0xf3, 0xc9, 0xa6, 0x8e, 0x40, 0xb5, 0xb0, 0x4c, 0x36, 0xa4, 0xe1, - 0xa8, 0xa0, 0xe8, 0x3b, 0x56, 0x7d, 0x23, 0x06, 0xfd, 0x5b, 0x17, 0x2c, - 0x36, 0x8d, 0x83, 0x14, 0x26, 0x8d, 0x10, 0xaa, 0x08, 0xa2, 0x6f, 0x64, - 0x23, 0x65, 0x6d, 0x12, 0x13, 0x62, 0xb1, 0xba, 0xa2, 0x12, 0xa8, 0xfa, - 0xd5, 0xa0, 0xda, 0x50, 0xde, 0x83, 0x14, 0xd1, 0xe0, 0xdd, 0xe2, 0x09, - 0x6d, 0x08, 0x46, 0x8b, 0x62, 0x2b, 0x31, 0x4a, 0xb1, 0xe1, 0xb5, 0x5a, - 0x01, 0x28, 0xfc, 0x71, 0x92, 0x82, 0x16, 0x07, 0xd5, 0x26, 0xac, 0x0e, - 0x8e, 0x03, 0x85, 0x62, 0xe2, 0x00, 0xee, 0x64, 0xfe, 0xba, 0xab, 0x9d, - 0x59, 0xf8, 0x62, 0xde, 0xe1, 0xf1, 0xa6, 0x16, 0x63, 0xd3, 0x87, 0x02, - 0x51, 0xeb, 0xed, 0x08, 0x7e, 0xb6, 0xa4, 0x70, 0x6d, 0xf8, 0x3d, 0xb9, - 0x45, 0x0b, 0x7e, 0xf3, 0x6d, 0x01, 0x43, 0x6d, 0x25, 0x47, 0x8c, 0x6c, - 0x7f, 0xf8, 0x6e, 0x94, 0xd0, 0x31, 0x22, 0x29, 0xc5, 0x71, 0xd8, 0x34, - 0x0e, 0xda, 0x58, 0x6b, 0x09, 0x22, 0xec, 0xec, 0x25, 0x7a, 0xab, 0xed, - 0xf4, 0x56, 0x1b, 0xe9, 0x4d, 0xa5, 0x17, 0x04, 0xeb, 0xd1, 0x42, 0x63, - 0x26, 0x52, 0x97, 0x10, 0x03, 0x74, 0xa1, 0x51, 0x94, 0x11, 0x7a, 0x58, - 0xb8, 0x1e, 0xe1, 0x99, 0x6f, 0x84, 0xb8, 0x13, 0x8b, 0xa0, 0xee, 0xd0, - 0x83, 0xb1, 0xb9, 0xd9, 0xc8, 0x22, 0x89, 0x0d, 0xe7, 0xab, 0x54, 0xd6, - 0x06, 0xa3, 0x8a, 0xaf, 0xfb, 0xb4, 0x45, 0xf7, 0xc9, 0x7d, 0xe5, 0xeb, - 0x9a, 0x96, 0xe9, 0x08, 0xce, 0x2f, 0x8c, 0x72, 0xe6, 0xc0, 0xf5, 0x2d, - 0xb8, 0x05, 0x29, 0xfc, 0x67, 0x6e, 0x0d, 0x74, 0xbe, 0xc9, 0xc7, 0x5d, - 0x54, 0xff, 0x58, 0x7d, 0xf9, 0xf9, 0x0a, 0xe5, 0x6f, 0xfa, 0x7b, 0x7c, - 0x87, 0x3b, 0x4f, 0xfc, 0xc2, 0x84, 0x7d, 0x60, 0x5d, 0x30, 0xe8, 0xf4, - 0x1a, 0x0c, 0xdb, 0xc8, 0x14, 0xc8, 0xb3, 0x3f, 0xa6, 0xad, 0x26, 0x2c, - 0x7a, 0xbd, 0xc0, 0xe1, 0xbe, 0x8f, 0xb4, 0x87, 0x05, 0xfa, 0x90, 0x88, - 0x8f, 0x79, 0xa8, 0x20, 0x8a, 0x05, 0x56, 0x24, 0x11, 0xf2, 0x8e, 0x47, - 0x2c, 0xc1, 0xbb, 0xbe, 0xe4, 0x9e, 0xa8, 0x70, 0x18, 0x40, 0xc7, 0x5a, - 0x80, 0x6a, 0xe7, 0xb5, 0x27, 0x95, 0x97, 0x5d, 0x9a, 0xdd, 0xc6, 0x61, - 0x77, 0x6b, 0x35, 0xa5, 0x3e, 0xd3, 0x1c, 0xab, 0x26, 0x46, 0xcd, 0xb2, - 0x46, 0x28, 0xf4, 0x8c, 0x2e, 0x0c, 0xb0, 0x70, 0x8e, 0x81, 0x1b, 0x8f, - 0x41, 0x6e, 0x34, 0xd2, 0xb0, 0xf0, 0xa3, 0xe1, 0xfe, 0x83, 0x93, 0x34, - 0x4a, 0xd0, 0xe1, 0xc3, 0x79, 0x52, 0x85, 0x7a, 0xa8, 0x8b, 0x38, 0x66, - 0xdd, 0xf9, 0x0d, 0x18, 0x4d, 0xf1, 0x51, 0xc7, 0x87, 0x87, 0xb7, 0xc1, - 0x07, 0x9d, 0xca, 0x6a, 0xdb, 0xa2, 0x34, 0x63, 0xc6, 0x05, 0x33, 0x62, - 0x79, 0xa9, 0x45, 0x7d, 0xb1, 0xd3, 0x30, 0xf3, 0x67, 0x62, 0x83, 0xf4, - 0x92, 0x7c, 0xa0, 0x81, 0x89, 0x03, 0xd8, 0x97, 0x57, 0xf8, 0x5f, 0xfc, - 0x7f, 0x68, 0x44, 0x08, 0xbf, 0x3f, 0xad, 0x3d, 0x3b, 0xe9, 0xf8, 0xc4, - 0xd6, 0x22, 0xa8, 0xa6, 0x13, 0xe7, 0x8c, 0x89, 0x2b, 0xbd, 0x9f, 0xee, - 0xee, 0x83, 0xff, 0xc0, 0x46, 0xfb, 0x93, 0x9c, 0x68, 0xeb, 0x1f, 0x48, - 0x33, 0x34, 0x8d, 0xa0, 0xb4, 0x2d, 0xe0, 0x54, 0x36, 0x51, 0x69, 0x3f, - 0xcf, 0x81, 0x59, 0x69, 0x9e, 0x6e, 0x16, 0xa8, 0x59, 0x71, 0x20, 0x9a, - 0xb8, 0xd5, 0xaa, 0x6a, 0x0c, 0x39, 0x54, 0x18, 0x50, 0xba, 0x00, 0xca, - 0x6c, 0x84, 0xae, 0xcf, 0x07, 0x44, 0xb9, 0x80, 0xb4, 0x67, 0x37, 0x26, - 0xeb, 0x5e, 0x20, 0x1a, 0x0a, 0xc3, 0x82, 0x4c, 0x37, 0x9c, 0x66, 0x19, - 0x53, 0xe2, 0x1b, 0x43, 0xaf, 0x9e, 0x19, 0x3a, 0x7f, 0x6f, 0x00, 0xc5, - 0x23, 0x71, 0x48, 0xa2, 0xdd, 0xbd, 0x31, 0xe1, 0x62, 0x35, 0x94, 0x30, - 0x00, 0x2b, 0xbf, 0x38, 0x49, 0x32, 0xa6, 0x47, 0x8c, 0xfa, 0x13, 0xee, - 0x37, 0x21, 0xa1, 0x1b, 0x5c, 0x40, 0xa9, 0x9b, 0xd9, 0x46, 0x46, 0x3d, - 0x43, 0x2f, 0x36, 0x48, 0xb7, 0x18, 0x2d, 0xb6, 0xd2, 0x2f, 0xcb, 0x3a, - 0x18, 0x0d, 0x96, 0x49, 0x10, 0xde, 0xcf, 0x0a, 0x3f, 0xdf, 0xae, 0x3e, - 0xcd, 0x55, 0x6d, 0x3e, 0xd3, 0x5c, 0xdd, 0xdc, 0xf4, 0xf8, 0x96, 0xb6, - 0x67, 0x39, 0x98, 0x4b, 0xf3, 0x4d, 0xb9, 0x35, 0x27, 0xab, 0x90, 0x98, - 0xae, 0x1a, 0xb2, 0x81, 0xcc, 0x9c, 0x8e, 0xbb, 0xdc, 0x82, 0x6b, 0xae, - 0xb5, 0xa5, 0x45, 0x10, 0x81, 0x43, 0x8c, 0x95, 0xef, 0x3f, 0x6f, 0x89, - 0x8a, 0xee, 0xc6, 0xc4, 0xbf, 0x65, 0x8f, 0x65, 0xd2, 0xc0, 0x2f, 0xb0, - 0x30, 0x0b, 0x96, 0xf6, 0x8a, 0x10, 0x87, 0x06, 0xc1, 0x08, 0x0c, 0x66, - 0x58, 0x2f, 0x18, 0x2a, 0x18, 0xf1, 0x62, 0x47, 0x34, 0x8a, 0x3e, 0xa5, - 0x43, 0x1d, 0xb8, 0xb6, 0x3a, 0x86, 0x6b, 0xbd, 0x27, 0x46, 0x3a, 0xfa, - 0xc7, 0xde, 0x24, 0x19, 0x20, 0xfb, 0x3c, 0x67, 0xbe, 0xe3, 0xc2, 0xb0, - 0xb7, 0x4b, 0xfe, 0x11, 0x3d, 0xae, 0x02, 0x9a, 0x2e, 0x60, 0xf4, 0xc0, - 0xb9, 0x9d, 0x19, 0xcf, 0x27, 0x2d, 0x6e, 0xe8, 0xb5, 0x2b, 0x60, 0x15, - 0x97, 0xa6, 0x47, 0x95, 0x52, 0x33, 0x50, 0x27, 0x48, 0x22, 0x6e, 0xe1, - 0x53, 0x08, 0x3b, 0x50, 0x23, 0x95, 0x42, 0x3a, 0xf1, 0x25, 0x25, 0x67, - 0x7c, 0xdd, 0x45, 0xdc, 0x7c, 0x0d, 0xfb, 0xb9, 0x15, 0x02, 0x67, 0x3d, - 0x46, 0xe2, 0x6d, 0x5a, 0x72, 0xe3, 0xf6, 0x0a, 0xf7, 0xe6, 0xfd, 0xf3, - 0xed, 0xfd, 0xd3, 0xbc, 0xf7, 0xf1, 0x69, 0x30, 0xde, 0x54, 0x56, 0x06, - 0x7c, 0xf5, 0xa9, 0x62, 0x5b, 0x27, 0x04, 0xb1, 0x37, 0xc2, 0xaa, 0xca, - 0x85, 0x9c, 0x56, 0x4d, 0x05, 0x6b, 0xd9, 0xc3, 0x70, 0xf9, 0xfa, 0xa7, - 0x0e, 0x9b, 0x13, 0xc7, 0x3c, 0x30, 0x1f, 0x50, 0x8f, 0x14, 0xf9, 0xe3, - 0x97, 0xf1, 0x39, 0x94, 0xbb, 0x17, 0xb3, 0x6a, 0xaa, 0x2f, 0x34, 0xb5, - 0xb8, 0x9a, 0xca, 0x6d, 0x30, 0xcc, 0xff, 0x69, 0xa2, 0xf9, 0x94, 0x39, - 0x88, 0x42, 0x21, 0x15, 0xe8, 0x2e, 0x53, 0x6f, 0xe0, 0x03, 0x27, 0x03, - 0x87, 0x02, 0xfb, 0x0c, 0xfc, 0x36, 0x99, 0x6e, 0x33, 0x97, 0x88, 0x01, - 0xf4, 0xbd, 0xa5, 0x0b, 0xd1, 0x80, 0xfc, 0x14, 0xe6, 0x38, 0xfd, 0x6d, - 0x89, 0x25, 0x73, 0x65, 0xe0, 0x7b, 0xd2, 0x55, 0xd9, 0x0e, 0x23, 0xa1, - 0x5c, 0xa5, 0x73, 0xca, 0x85, 0x38, 0x62, 0x2c, 0xa5, 0x24, 0x87, 0xe1, - 0xa9, 0x16, 0x07, 0xca, 0xf7, 0xf8, 0xd3, 0x6d, 0x92, 0xef, 0x59, 0xd7, - 0x1d, 0x08, 0x2e, 0xc3, 0xda, 0x50, 0x2c, 0xc4, 0x90, 0xef, 0xa0, 0x44, - 0x2b, 0x80, 0x4b, 0xdf, 0xdc, 0xa8, 0xd3, 0x30, 0x42, 0x77, 0x07, 0x8d, - 0x7a, 0x32, 0xbb, 0x32, 0xca, 0xa7, 0x23, 0xf4, 0x0b, 0x01, 0xc3, 0xcc, - 0x57, 0xbf, 0x29, 0xbe, 0x41, 0x86, 0x46, 0x15, 0x97, 0x6b, 0xab, 0x74, - 0x8d, 0xe7, 0xd3, 0x1b, 0x8d, 0x24, 0x73, 0x73, 0x27, 0x86, 0xf4, 0xf0, - 0x5c, 0x87, 0x25, 0x3e, 0x7e, 0x70, 0x8c, 0x6c, 0xa4, 0x61, 0xe3, 0x0e, - 0xba, 0xe3, 0x91, 0x33, 0x96, 0xde, 0x38, 0x3d, 0x6d, 0x88, 0x55, 0x19, - 0x47, 0x9b, 0x38, 0x35, 0x06, 0x9e, 0x69, 0xf0, 0xbe, 0x7d, 0x47, 0x74, - 0xc8, 0x67, 0xae, 0x42, 0xf3, 0xaa, 0x4f, 0xd2, 0x69, 0xd4, 0xec, 0x98, - 0x5d, 0x0c, 0x55, 0xba, 0x3a, 0x52, 0x00, 0x09, 0x17, 0x1d, 0x7b, 0xca, - 0xac, 0x8d, 0x9a, 0xae, 0xea, 0x78, 0x62, 0xf8, 0x48, 0x50, 0x5a, 0xd8, - 0x89, 0x57, 0xf2, 0x3b, 0x52, 0x08, 0xb9, 0xd8, 0xfc, 0xb4, 0xe5, 0x51, - 0xe5, 0xf9, 0x14, 0x37, 0xd5, 0xfb, 0x03, 0x40, 0xb7, 0x3b, 0xb7, 0x9a, - 0x33, 0x62, 0x36, 0x87, 0x2c, 0x1f, 0x36, 0x98, 0xc2, 0x29, 0xa7, 0x88, - 0xd3, 0xb9, 0xad, 0x61, 0xf7, 0x99, 0xd7, 0x6a, 0xeb, 0x97, 0x95, 0x82, - 0xe1, 0xea, 0x2d, 0xe8, 0xa8, 0xae, 0x37, 0xd9, 0xb8, 0x4b, 0x77, 0x2f, - 0x02, 0xea, 0x72, 0x4d, 0x20, 0x48, 0x9a, 0xc8, 0xbb, 0xf6, 0x13, 0x95, - 0xb6, 0xed, 0x5c, 0xa3, 0xef, 0x8d, 0x45, 0x8a, 0xd4, 0x96, 0x24, 0x98, - 0x23, 0x85, 0xb5, 0xaa, 0x0c, 0xab, 0x22, 0x04, 0xc8, 0x01, 0xd8, 0x49, - 0xa0, 0x49, 0xf1, 0xf7, 0x2f, 0x97, 0x89, 0x8f, 0xd2, 0x7d, 0x20, 0x61, - 0x9d, 0x82, 0x18, 0x0c, 0x5a, 0xe5, 0xe2, 0xd7, 0x94, 0x40, 0x2f, 0xf1, - 0xd0, 0x32, 0xd9, 0x99, 0xad, 0x42, 0xbe, 0x2e, 0x8b, 0x41, 0x51, 0xd9, - 0x07, 0x51, 0x13, 0x0d, 0x14, 0x65, 0x19, 0x58, 0xfd, 0x15, 0x91, 0x92, - 0xb2, 0x24, 0x79, 0x98, 0xbc, 0xf6, 0xf3, 0xd6, 0x34, 0x65, 0x86, 0xc3, - 0x33, 0xa0, 0x57, 0x95, 0x7a, 0xaf, 0x9a, 0xc1, 0x7a, 0x5d, 0x2b, 0xb0, - 0x2f, 0x33, 0x12, 0xe5, 0x2b, 0xd5, 0x58, 0x3b, 0x53, 0x3f, 0x7e, 0x70, - 0x7c, 0x42, 0x75, 0xa9, 0x37, 0x0d, 0x2d, 0x53, 0xd9, 0x6e, 0xb9, 0xdc, - 0xef, 0x9e, 0x3e, 0xde, 0x97, 0x05, 0xa0, 0x11, 0x09, 0x08, 0x76, 0x43, - 0x47, 0xdc, 0x05, 0xc5, 0x2c, 0x87, 0xa6, 0xb4, 0xda, 0xc7, 0x6e, 0x1c, - 0x94, 0x27, 0xdc, 0x2e, 0x38, 0x6a, 0xd8, 0x82, 0xbd, 0x7f, 0xa7, 0x9e, - 0xea, 0x8d, 0x01, 0x53, 0x9f, 0xcf, 0xdc, 0xec, 0xa6, 0x38, 0xce, 0x4e, - 0xc6, 0x2d, 0xd5, 0x48, 0x92, 0xe2, 0xc1, 0xde, 0x8e, 0xd9, 0x3b, 0x53, - 0xdb, 0x9b, 0x7d, 0xe0, 0x00, 0xd9, 0x67, 0xb1, 0x24, 0xea, 0xb4, 0xf7, - 0x03, 0xcd, 0x30, 0x73, 0xf8, 0x57, 0x43, 0xac, 0x53, 0x1d, 0x18, 0x08, - 0xdf, 0x71, 0x34, 0xee, 0x81, 0xbd, 0x18, 0x33, 0x79, 0x83, 0x11, 0x28, - 0x2a, 0xcc, 0x63, 0xd8, 0xea, 0xae, 0x38, 0x99, 0x68, 0xe8, 0x1e, 0xc3, - 0x0e, 0xe3, 0xa0, 0xf9, 0x91, 0x8f, 0x8f, 0xb5, 0xfd, 0x9c, 0x2c, 0x63, - 0x5f, 0x28, 0x93, 0x70, 0x26, 0x28, 0x3d, 0x9c, 0xe3, 0x63, 0xba, 0x50, - 0x0a, 0x99, 0x65, 0xd3, 0x98, 0x19, 0xce, 0x21, 0x63, 0x03, 0x1f, 0x1c, - 0xe9, 0xc3, 0x84, 0x54, 0x1a, 0x81, 0x56, 0x00, 0x80, 0x6a, 0x9c, 0xf9, - 0x98, 0x65, 0xd6, 0x31, 0xf0, 0xe3, 0xc4, 0x8a, 0xad, 0x05, 0xc4, 0x5d, - 0x34, 0x9a, 0xb4, 0x9f, 0x5c, 0x91, 0x8f, 0x01, 0x08, 0xf0, 0x8e, 0xd3, - 0xe5, 0x0f, 0xd5, 0x33, 0x14, 0xa6, 0xc0, 0x31, 0x23, 0x90, 0xd2, 0x06, - 0x90, 0x2c, 0xfb, 0x50, 0x01, 0x21, 0xcc, 0x8c, 0x06, 0x8a, 0x9e, 0xd4, - 0xb0, 0x86, 0xd7, 0x54, 0x1d, 0xca, 0x3d, 0x4d, 0x7a, 0xc7, 0xdb, 0x40, - 0x67, 0xa0, 0x99, 0x37, 0xfc, 0x63, 0x66, 0x01, 0xa9, 0x28, 0xb8, 0x46, - 0xd9, 0x80, 0x22, 0x46, 0x1f, 0xaf, 0x19, 0xfc, 0x2d, 0xb1, 0xf4, 0x32, - 0xf1, 0x6f, 0x45, 0x14, 0xbb, 0x65, 0x40, 0x96, 0x73, 0xfb, 0x87, 0xc8, - 0x1b, 0x36, 0x6e, 0x1d, 0xbb, 0x48, 0xa3, 0x33, 0x7c, 0xbb, 0x91, 0xf7, - 0x9f, 0xd8, 0xc8, 0x1c, 0xf3, 0x93, 0xc6, 0x9d, 0x64, 0x36, 0x9c, 0xd1, - 0xba, 0x11, 0xee, 0x7c, 0x39, 0xfb, 0xf8, 0xc3, 0x8e, 0x74, 0x8c, 0x5a, - 0x41, 0x99, 0x46, 0x25, 0x7e, 0xb4, 0x5a, 0x40, 0x42, 0x46, 0xd3, 0x75, - 0x5e, 0xd3, 0x30, 0xba, 0xe2, 0x45, 0xa3, 0xac, 0xc1, 0x46, 0x1e, 0x5c, - 0x23, 0x9f, 0x7c, 0xbc, 0x3a, 0xb9, 0xfa, 0x4a, 0x88, 0xd3, 0x6e, 0x34, - 0xe9, 0x78, 0x1c, 0x26, 0x92, 0x63, 0x16, 0x41, 0x7a, 0xe4, 0x8d, 0x5f, - 0xdb, 0x05, 0xab, 0x48, 0x99, 0x30, 0x1c, 0x07, 0xa5, 0xe9, 0x42, 0x2e, - 0x86, 0x5d, 0xd9, 0xf5, 0x08, 0x0d, 0x82, 0x90, 0xb9, 0x1a, 0xa7, 0xc5, - 0xb5, 0xb2, 0xc1, 0x29, 0x07, 0xb2, 0xd3, 0xa2, 0xe8, 0x6c, 0xdc, 0x4a, - 0x6e, 0xc1, 0xb9, 0x1c, 0xa7, 0x72, 0x65, 0xe5, 0x9e, 0x5f, 0x7b, 0x4d, - 0x44, 0xdc, 0x82, 0x80, 0x14, 0x17, 0x3f, 0x16, 0x28, 0xe3, 0xd5, 0x5a, - 0x60, 0x53, 0xc5, 0xe7, 0x38, 0x8a, 0x9d, 0x54, 0xea, 0xad, 0x83, 0x82, - 0x80, 0x00, 0x02, 0xe8, 0xe4, 0x61, 0x4c, 0x18, 0x1f, 0x91, 0x6a, 0x82, - 0x4f, 0x45, 0x29, 0x9c, 0x65, 0x42, 0x59, 0x1e, 0x0c, 0x6c, 0x83, 0x4c, - 0xdc, 0x85, 0x1e, 0xa5, 0x2b, 0x4f, 0x84, 0x31, 0x6b, 0xf0, 0x32, 0x71, - 0x7d, 0x6d, 0x7a, 0x32, 0x2f, 0xb4, 0x90, 0x6f, 0x04, 0x0e, 0x9e, 0xdb, - 0xc9, 0x0a, 0x01, 0xa0, 0xb1, 0x07, 0x90, 0xbe, 0xbd, 0x01, 0x2a, 0x76, - 0x19, 0xa7, 0xa2, 0x2d, 0xa9, 0x29, 0xae, 0xa5, 0x01, 0xc2, 0x2d, 0x2d, - 0x46, 0xf5, 0xd9, 0x40, 0x94, 0xe3, 0xe5, 0xa6, 0xe7, 0x37, 0x28, 0xcf, - 0xfc, 0x09, 0x48, 0x37, 0x74, 0x3f, 0xbb, 0xd8, 0x1e, 0xa0, 0x47, 0x58, - 0xf4, 0xcd, 0x4a, 0xab, 0x75, 0xd0, 0xed, 0x66, 0x46, 0xa6, 0x21, 0xe8, - 0xd1, 0x51, 0x50, 0x9f, 0xae, 0xd1, 0x08, 0xc2, 0x54, 0xf7, 0x64, 0x83, - 0x29, 0xd6, 0xcf, 0x4d, 0xe3, 0x77, 0xb6, 0xbf, 0x13, 0xff, 0x13, 0x5e, - 0x65, 0xe7, 0x9d, 0x98, 0x38, 0x3e, 0xa4, 0x36, 0x8c, 0xe7, 0x88, 0xc6, - 0xe9, 0x83, 0x81, 0xf5, 0xf4, 0xf9, 0x70, 0x9d, 0xd1, 0xc2, 0x97, 0xee, - 0xaf, 0x21, 0x00, 0x5a, 0x34, 0x9c, 0xa2, 0xf6, 0x61, 0x37, 0xa1, 0xda, - 0x4d, 0x40, 0x84, 0xc0, 0xbb, 0xb1, 0xa2, 0xbd, 0x0f, 0xe6, 0x14, 0xdc, - 0x40, 0x6e, 0xbe, 0x36, 0x09, 0x24, 0x8f, 0x68, 0xe9, 0xcd, 0xd4, 0x75, - 0xaf, 0x44, 0x59, 0x31, 0x02, 0x1c, 0xf2, 0x34, 0x39, 0x55, 0x6e, 0x18, - 0x68, 0xab, 0xe7, 0xf3, 0x30, 0xfd, 0xb8, 0x56, 0x1c, 0xe2, 0xa9, 0xe1, - 0x22, 0x33, 0x89, 0x4c, 0xd5, 0xfe, 0x45, 0x9b, 0x45, 0xd1, 0x2d, 0xed, - 0xb6, 0xb8, 0xe0, 0x52, 0x3c, 0xa8, 0x6d, 0x10, 0xb8, 0xa3, 0x04, 0xfd, - 0x72, 0x7f, 0x74, 0x1e, 0x8e, 0xde, 0x07, 0xbe, 0xe9, 0xcc, 0x1e, 0xce, - 0x59, 0x4e, 0xd2, 0x04, 0x7a, 0x67, 0x34, 0x5b, 0xea, 0x4a, 0xdd, 0x66, - 0xd2, 0xa6, 0x0e, 0xcc, 0x8b, 0x54, 0x5f, 0x88, 0x81, 0xb6, 0x3a, 0x02, - 0x5f, 0xc9, 0x99, 0xb5, 0x2c, 0x57, 0x41, 0x78, 0xd2, 0xe9, 0xe4, 0x80, - 0xd5, 0x3b, 0x1b, 0x0f, 0x00, 0x2a, 0x77, 0x12, 0x82, 0x20, 0xdb, 0xff, - 0xb1, 0xf5, 0x65, 0x5b, 0xce, 0xf2, 0x3c, 0xb3, 0xe7, 0xef, 0x5d, 0x92, - 0x84, 0x4e, 0xfc, 0x04, 0x30, 0xbf, 0x81, 0x74, 0xd3, 0x57, 0xbf, 0x55, - 0x55, 0x92, 0x6d, 0xfa, 0xdb, 0x6b, 0x25, 0x56, 0xc9, 0x78, 0x9e, 0x47, - 0xb9, 0xa2, 0xb0, 0xe4, 0x8b, 0x49, 0x0e, 0x99, 0x9d, 0x90, 0xf5, 0xc4, - 0x36, 0x62, 0xe2, 0xd3, 0x2e, 0x3a, 0x33, 0x45, 0xc6, 0x46, 0x02, 0xa1, - 0x0f, 0xe1, 0xc7, 0x02, 0x4b, 0x35, 0x8b, 0xc1, 0x9d, 0x82, 0xa8, 0xb4, - 0xff, 0xd5, 0xf9, 0x77, 0x22, 0x7a, 0xf7, 0x9b, 0x1a, 0x3d, 0x05, 0x22, - 0x26, 0xbf, 0x0a, 0xba, 0xf5, 0x27, 0x14, 0xb3, 0x04, 0x55, 0x25, 0xc8, - 0xa8, 0x3e, 0x8d, 0xd8, 0xe4, 0xc1, 0x1b, 0x4c, 0x50, 0x59, 0x9c, 0x46, - 0x29, 0x0f, 0xaa, 0xb5, 0x3b, 0x9d, 0xb8, 0xd2, 0x31, 0xe9, 0x00, 0x35, - 0x68, 0x57, 0x8a, 0x70, 0x3e, 0xda, 0xd4, 0x48, 0xfa, 0x91, 0x06, 0x96, - 0xa7, 0x3a, 0x65, 0xee, 0x1f, 0x72, 0xbb, 0xc2, 0x94, 0x07, 0x1a, 0xb8, - 0x29, 0xdd, 0xdc, 0xa4, 0x2e, 0x24, 0x83, 0x8a, 0x60, 0xc3, 0x7a, 0x42, - 0x1d, 0x9b, 0x70, 0xdd, 0x10, 0xea, 0xec, 0x4d, 0x81, 0x5f, 0xb0, 0x75, - 0x4a, 0xc3, 0x4a, 0xab, 0xb4, 0xbd, 0xa9, 0x6e, 0xaa, 0x0b, 0x02, 0xc5, - 0x11, 0x4e, 0x04, 0x3f, 0xa7, 0xcc, 0x98, 0x67, 0xdf, 0xc0, 0x71, 0xd1, - 0x3e, 0x90, 0xe4, 0x4f, 0x65, 0x94, 0xaa, 0x0e, 0x9c, 0xc8, 0x5b, 0x75, - 0xe0, 0x3d, 0x16, 0xb1, 0x2b, 0xe3, 0x6e, 0xdc, 0x12, 0x5f, 0xbc, 0x18, - 0xfe, 0xf3, 0x17, 0x01, 0x40, 0x6a, 0x5f, 0x4c, 0xcc, 0xbe, 0xd8, 0x10, - 0x6f, 0xa8, 0x75, 0xb8, 0x1a, 0x51, 0x91, 0x06, 0x95, 0x7d, 0xeb, 0x16, - 0x29, 0x34, 0x5f, 0x90, 0x66, 0xac, 0x03, 0x59, 0x70, 0xcc, 0x13, 0x85, - 0x36, 0x3f, 0xe9, 0xf1, 0x5c, 0xe7, 0xdb, 0xc4, 0xee, 0x08, 0x51, 0xb6, - 0x8e, 0xe3, 0xe5, 0x2b, 0xb7, 0xae, 0x75, 0x08, 0x8a, 0x68, 0xc3, 0x66, - 0xca, 0x79, 0x96, 0x1a, 0xa5, 0x84, 0x90, 0x8e, 0xaf, 0x50, 0xb8, 0x7a, - 0x48, 0x99, 0x39, 0x75, 0x0a, 0x28, 0x4e, 0xe9, 0x50, 0x28, 0xa3, 0x41, - 0xa0, 0xd6, 0xc4, 0xcc, 0x9c, 0xce, 0xc2, 0xb8, 0x87, 0x25, 0xa2, 0xf1, - 0xb5, 0xa0, 0x1b, 0xf0, 0x96, 0x0a, 0xd7, 0xb2, 0x7c, 0xd1, 0x9a, 0x78, - 0xf6, 0x19, 0x83, 0x98, 0xd1, 0x81, 0x9b, 0xac, 0x01, 0xdd, 0xb6, 0x88, - 0x5d, 0x5d, 0xb5, 0x04, 0x6c, 0x13, 0xbd, 0xc6, 0xb9, 0xc3, 0xd6, 0x1c, - 0xaa, 0xec, 0x05, 0x8e, 0x00, 0xb5, 0x86, 0xd6, 0x99, 0xb0, 0x50, 0x03, - 0xc5, 0x6f, 0xfb, 0xde, 0x2d, 0x88, 0x80, 0x95, 0xf7, 0x38, 0xd0, 0xd2, - 0xcd, 0x57, 0xa9, 0xf1, 0xc4, 0x7b, 0x25, 0x82, 0xcd, 0xed, 0x7d, 0xaf, - 0x46, 0x58, 0x7b, 0x4d, 0x55, 0x05, 0xa2, 0x38, 0x92, 0x27, 0xce, 0x6a, - 0x41, 0xe1, 0xe6, 0xba, 0x51, 0x6d, 0x76, 0x4d, 0xb8, 0xda, 0xc4, 0x50, - 0xc3, 0x8d, 0xe3, 0x4e, 0xc1, 0x7e, 0x00, 0x9c, 0x67, 0x80, 0xf2, 0xb4, - 0x81, 0x81, 0x7c, 0xc7, 0x05, 0xbd, 0x7b, 0x66, 0x97, 0x63, 0x6c, 0x5d, - 0x32, 0x01, 0xb3, 0x8c, 0x7f, 0xf8, 0x10, 0xdf, 0x4e, 0x2e, 0xc4, 0xc2, - 0x91, 0xe1, 0xd9, 0x08, 0x02, 0xff, 0xba, 0x85, 0x57, 0x79, 0x3b, 0xa6, - 0x2f, 0x2e, 0x70, 0x89, 0x51, 0xe9, 0x38, 0xee, 0x10, 0x6f, 0xe6, 0x66, - 0xa4, 0x70, 0xdb, 0x7e, 0x3a, 0x18, 0xab, 0x63, 0xf4, 0xd5, 0x5c, 0x4a, - 0xe6, 0x81, 0x5a, 0xd9, 0x35, 0x32, 0xf3, 0x50, 0x9c, 0xc2, 0x23, 0x5a, - 0xde, 0x07, 0x5e, 0x4d, 0x15, 0x52, 0xbb, 0x6c, 0x68, 0xe7, 0x13, 0x65, - 0xc4, 0xa3, 0xea, 0xca, 0xb1, 0x8f, 0x4e, 0xec, 0xdb, 0x1c, 0x2e, 0x8c, - 0x2c, 0xe6, 0xc7, 0xee, 0x46, 0xf4, 0x92, 0xa7, 0x50, 0x54, 0xc7, 0xa3, - 0x5f, 0xe2, 0x34, 0xce, 0xe3, 0xbb, 0xef, 0x0a, 0x0c, 0x68, 0xff, 0x79, - 0x57, 0x96, 0x9e, 0x77, 0x2a, 0xe3, 0xcc, 0xb8, 0x1b, 0x68, 0x87, 0xe4, - 0xc4, 0xa6, 0x86, 0x96, 0x0a, 0x14, 0x13, 0xe1, 0x8a, 0xaa, 0x1e, 0x46, - 0x20, 0x0e, 0x4e, 0xe5, 0x10, 0x98, 0x53, 0xba, 0x61, 0xc1, 0xb2, 0x77, - 0x92, 0x0e, 0x85, 0xf0, 0x07, 0x50, 0x1e, 0x9e, 0x7d, 0x76, 0x8b, 0xe9, - 0xdc, 0x22, 0xdb, 0x33, 0x8a, 0x88, 0x7b, 0x6b, 0x53, 0xfd, 0x15, 0x23, - 0x7f, 0xc2, 0x66, 0xe7, 0x52, 0x62, 0x4e, 0x6c, 0xaf, 0xac, 0x7b, 0xc4, - 0xcd, 0x98, 0x9f, 0xaa, 0x5f, 0xcb, 0xce, 0x59, 0x8b, 0xca, 0xd9, 0x4a, - 0xc7, 0xd9, 0x95, 0x8e, 0x33, 0xff, 0x0c, 0x93, 0xc7, 0x67, 0x7d, 0x49, - 0x55, 0x0d, 0xed, 0x31, 0x4b, 0x4d, 0xe5, 0x18, 0xd4, 0x75, 0x1f, 0x26, - 0x51, 0x35, 0x0c, 0x06, 0x38, 0x65, 0x76, 0xd8, 0x9c, 0xd8, 0x2f, 0x4e, - 0xec, 0xd5, 0x09, 0xab, 0x21, 0x8b, 0x76, 0xeb, 0x17, 0x3c, 0x2d, 0x48, - 0xd5, 0x0b, 0xdf, 0x82, 0xf9, 0xe0, 0x02, 0xe9, 0x92, 0xba, 0x50, 0x05, - 0x2c, 0x19, 0xf3, 0x40, 0x7c, 0x38, 0x4f, 0x00, 0xd9, 0xb5, 0x0c, 0xdf, - 0xfa, 0xa0, 0x61, 0xc4, 0x32, 0x26, 0x3a, 0xc1, 0xa5, 0x3e, 0x53, 0x59, - 0xd1, 0x97, 0xdc, 0xd6, 0x8f, 0x1d, 0x9f, 0x42, 0x70, 0x49, 0xf9, 0xb0, - 0x58, 0xd3, 0x72, 0x4b, 0x17, 0x4c, 0xe7, 0x1d, 0x32, 0x96, 0x58, 0x5d, - 0xb3, 0x2e, 0x0b, 0xab, 0x8a, 0x19, 0x43, 0xfb, 0x3c, 0x7c, 0x41, 0x99, - 0xa8, 0x60, 0x60, 0x9b, 0x21, 0x6a, 0x4d, 0x5b, 0x4f, 0x0e, 0x19, 0xa8, - 0x3c, 0xb8, 0x74, 0x50, 0x20, 0x7f, 0xb7, 0xde, 0xe0, 0xb2, 0xd0, 0xa1, - 0x9d, 0xca, 0x48, 0xeb, 0x3e, 0x53, 0xcd, 0xdc, 0x90, 0xa2, 0x0f, 0xf5, - 0x91, 0x3a, 0xe0, 0x15, 0xbb, 0x21, 0x10, 0x70, 0x07, 0x39, 0x1d, 0xfa, - 0xac, 0x0d, 0xd2, 0x3c, 0x40, 0x7a, 0xee, 0x13, 0x9d, 0x66, 0xd6, 0xf9, - 0x84, 0xac, 0xb9, 0x68, 0xc6, 0x29, 0xba, 0xc7, 0xf8, 0x84, 0x68, 0x26, - 0x31, 0xf0, 0x5a, 0x13, 0xcd, 0x7c, 0x63, 0x7d, 0xcd, 0xd8, 0xc6, 0xc9, - 0xb7, 0x6d, 0xd7, 0x35, 0x0b, 0x83, 0x96, 0x38, 0x18, 0xad, 0xe7, 0x87, - 0xf5, 0x74, 0x13, 0xc1, 0x83, 0x22, 0xa9, 0xf9, 0xd5, 0x06, 0x05, 0xd2, - 0x52, 0xa0, 0x48, 0x35, 0xba, 0x17, 0xd6, 0xca, 0x73, 0xd6, 0xcb, 0x69, - 0x4f, 0xec, 0x5f, 0x3e, 0x06, 0x81, 0x5d, 0x2a, 0x0a, 0x61, 0x7e, 0xb8, - 0x18, 0x0f, 0x43, 0x61, 0xb9, 0x9d, 0x46, 0x83, 0x20, 0xbc, 0xf7, 0xd8, - 0x70, 0x87, 0xe8, 0xd2, 0x9c, 0xc3, 0x6e, 0xfe, 0x46, 0x04, 0x1e, 0xeb, - 0xa0, 0x05, 0xa6, 0xec, 0x27, 0xef, 0xf2, 0x63, 0xe3, 0xc4, 0x23, 0x3f, - 0x22, 0x34, 0x9b, 0xb4, 0xbf, 0x31, 0x51, 0xc8, 0xb4, 0x3b, 0x7a, 0x01, - 0xca, 0xdc, 0x14, 0xd1, 0x53, 0x4a, 0x22, 0xf2, 0xe5, 0x89, 0xd3, 0x89, - 0x19, 0xb3, 0x5b, 0xee, 0x41, 0x65, 0x9f, 0xe7, 0x66, 0xcd, 0x73, 0x33, - 0x0b, 0x42, 0xc2, 0x9f, 0xa6, 0x75, 0x4a, 0xce, 0x08, 0x46, 0x9e, 0xdc, - 0x90, 0x84, 0x30, 0x26, 0x2f, 0xb5, 0x0e, 0x65, 0xd2, 0x30, 0x65, 0x84, - 0x57, 0xe4, 0x26, 0x24, 0x1b, 0x9c, 0x08, 0x6b, 0x2c, 0xd8, 0x1d, 0x5f, - 0x70, 0x27, 0x46, 0xc8, 0x93, 0x00, 0xb0, 0xe4, 0x87, 0xa3, 0x8d, 0x3b, - 0x14, 0x80, 0x6e, 0x4e, 0x2f, 0x3f, 0x38, 0x84, 0xd0, 0x52, 0x47, 0x68, - 0x5e, 0x88, 0x36, 0x69, 0x25, 0x0c, 0x5e, 0x64, 0x6e, 0xd6, 0xc9, 0xc0, - 0x8c, 0xc9, 0x37, 0x57, 0x9b, 0x72, 0xbc, 0x1d, 0x01, 0xb4, 0xbf, 0x34, - 0x89, 0x35, 0x78, 0x60, 0x56, 0x65, 0x83, 0x8b, 0x19, 0xea, 0x17, 0x15, - 0x59, 0xd4, 0x91, 0x33, 0x51, 0x0e, 0x71, 0x0d, 0x72, 0x66, 0x05, 0x49, - 0x4d, 0xdf, 0xf9, 0x59, 0x81, 0x90, 0x4d, 0x34, 0xa3, 0x18, 0xea, 0xd4, - 0x56, 0x9e, 0x10, 0xdd, 0xf9, 0x86, 0xab, 0xca, 0xa0, 0x99, 0xaa, 0x67, - 0x24, 0xdf, 0x08, 0x03, 0x85, 0x20, 0x35, 0xd4, 0x4d, 0x1b, 0x2e, 0xed, - 0x48, 0xf6, 0x85, 0xc1, 0x32, 0xd5, 0x25, 0x0a, 0x35, 0xcc, 0x32, 0xbd, - 0xc4, 0x31, 0xa3, 0x8c, 0x69, 0xec, 0xe0, 0x94, 0x17, 0x11, 0x04, 0x39, - 0x5e, 0x0a, 0x19, 0x30, 0x4f, 0x1d, 0x0b, 0xca, 0xcb, 0xd7, 0xc0, 0x73, - 0x6a, 0x0e, 0x52, 0x68, 0x2e, 0xd2, 0x44, 0x04, 0x16, 0xcc, 0x0b, 0x59, - 0x6e, 0x16, 0x1f, 0x10, 0x1a, 0xf8, 0xa2, 0x1a, 0x2b, 0xc7, 0x0e, 0x99, - 0x14, 0xda, 0x5d, 0xd4, 0x03, 0x4b, 0x46, 0x90, 0xed, 0x8b, 0xf5, 0x1b, - 0x14, 0x1b, 0x49, 0x78, 0xca, 0xad, 0x4c, 0x27, 0x32, 0x1a, 0x4d, 0x12, - 0x1e, 0x7b, 0x02, 0xca, 0xe1, 0x89, 0x41, 0xd7, 0x2b, 0x78, 0x4d, 0x30, - 0x50, 0x76, 0x68, 0x35, 0xe2, 0x4e, 0x74, 0x0e, 0x07, 0x4f, 0x3f, 0x1a, - 0xba, 0x0f, 0x36, 0x1c, 0x67, 0xa2, 0x2d, 0x27, 0x54, 0xa4, 0x6c, 0xe6, - 0x52, 0x93, 0x55, 0xb9, 0x1b, 0xcb, 0x8c, 0x55, 0xbf, 0xee, 0x81, 0xec, - 0x67, 0xee, 0xaa, 0x5b, 0xe6, 0xed, 0x4e, 0xd0, 0xaa, 0x41, 0xa9, 0xe5, - 0x02, 0xe8, 0xf9, 0x04, 0x10, 0x4d, 0x06, 0x3f, 0x7f, 0xf1, 0x08, 0xf0, - 0x93, 0x62, 0xe5, 0xdd, 0xca, 0x93, 0x8a, 0xcc, 0x3c, 0xf3, 0xe4, 0x64, - 0x85, 0xc8, 0x55, 0x6f, 0x93, 0x98, 0x3e, 0x10, 0xcf, 0x05, 0x82, 0x92, - 0x80, 0xe1, 0x8e, 0x5a, 0x48, 0xf6, 0xff, 0x50, 0x75, 0xfd, 0x9c, 0xd0, - 0xcb, 0x30, 0x10, 0x0f, 0x00, 0x02, 0x3d, 0xe5, 0x8d, 0x01, 0x5e, 0xc7, - 0x25, 0xf4, 0xf6, 0x93, 0xa3, 0x7e, 0xd6, 0x36, 0x43, 0xea, 0x22, 0xf2, - 0x8a, 0x83, 0x74, 0x59, 0x7d, 0x12, 0x49, 0x38, 0x0f, 0xfc, 0xad, 0xd6, - 0xa8, 0xb0, 0x66, 0xe1, 0xbc, 0x3e, 0xc3, 0x5e, 0x74, 0x2e, 0x4e, 0x39, - 0x00, 0x39, 0x27, 0x54, 0xeb, 0x60, 0x44, 0x42, 0x4f, 0x44, 0x58, 0xfc, - 0x74, 0xba, 0x08, 0xe2, 0x4a, 0xac, 0x43, 0xca, 0x8b, 0x43, 0xae, 0x72, - 0x67, 0xcb, 0x3d, 0x12, 0xaf, 0x24, 0x31, 0x3f, 0xce, 0xde, 0xee, 0x70, - 0x89, 0x3b, 0xa8, 0x76, 0x07, 0x03, 0xcf, 0x15, 0xfe, 0x4a, 0x9b, 0xe9, - 0xb3, 0xbd, 0xb8, 0xb1, 0x9f, 0x71, 0x1d, 0x54, 0x25, 0x73, 0xf3, 0x86, - 0x72, 0x9b, 0x15, 0xe0, 0x6d, 0x65, 0x1d, 0x02, 0xa1, 0x3d, 0x80, 0x40, - 0x99, 0x93, 0x3e, 0x00, 0x4c, 0x84, 0x31, 0x05, 0x98, 0xf5, 0x85, 0x83, - 0x4e, 0x8c, 0xe9, 0x57, 0x27, 0x11, 0x4e, 0x60, 0x97, 0x7b, 0x2f, 0xa6, - 0xb0, 0x43, 0x20, 0x3a, 0x09, 0x94, 0xa7, 0xdb, 0x76, 0xae, 0xca, 0x41, - 0xbc, 0x5c, 0xf1, 0xcc, 0x07, 0x85, 0xa9, 0x1b, 0x95, 0xcd, 0xe3, 0x1f, - 0x4d, 0x1d, 0xbc, 0x1c, 0xf7, 0xc4, 0x4b, 0xa3, 0x73, 0x22, 0x7d, 0x48, - 0xa5, 0xd1, 0x48, 0x8c, 0x23, 0x52, 0xa3, 0xc3, 0xb3, 0x30, 0x13, 0xfa, - 0x90, 0x12, 0x41, 0x3c, 0xb8, 0x70, 0x64, 0x84, 0x6f, 0x11, 0x18, 0xf8, - 0xe0, 0xfe, 0xf5, 0x42, 0xcd, 0x0f, 0xfe, 0x60, 0x63, 0xe9, 0xdb, 0xb9, - 0x58, 0xfb, 0x16, 0xcb, 0xe9, 0x3f, 0x61, 0xd3, 0xd4, 0xc4, 0x9e, 0x10, - 0xb3, 0x24, 0x07, 0xde, 0xc3, 0x7c, 0x33, 0xb9, 0xbe, 0xe1, 0x1b, 0x73, - 0x83, 0x1d, 0xd3, 0xf7, 0xa2, 0x45, 0x89, 0x6c, 0xde, 0x40, 0x4a, 0xda, - 0x73, 0xbd, 0x43, 0xc1, 0xdf, 0xe2, 0xbc, 0x5a, 0x0c, 0x56, 0x73, 0xdc, - 0xdc, 0x2a, 0x7e, 0xe8, 0xbd, 0xc4, 0xa9, 0x77, 0x03, 0x28, 0x25, 0x3a, - 0xfd, 0x06, 0xb5, 0x4e, 0xf5, 0xc1, 0xb4, 0xae, 0x12, 0x0f, 0xfd, 0x45, - 0xc8, 0x89, 0x53, 0x05, 0x88, 0x1b, 0x90, 0x8f, 0xae, 0x05, 0xb3, 0x83, - 0xa3, 0xd9, 0xc7, 0x9d, 0xef, 0x27, 0x5e, 0xb5, 0x86, 0xe2, 0x73, 0xa9, - 0xc2, 0xf9, 0x3a, 0x54, 0xca, 0x7d, 0x7b, 0xea, 0xca, 0x34, 0x48, 0x62, - 0x22, 0x38, 0x08, 0x3d, 0xd9, 0x38, 0x74, 0x07, 0xa8, 0xc2, 0x3d, 0x60, - 0x78, 0x65, 0x78, 0x79, 0x38, 0xd8, 0xc7, 0x00, 0xe1, 0xe1, 0xa1, 0xc9, - 0x27, 0x10, 0x4d, 0x63, 0xcf, 0x84, 0xc1, 0xfd, 0xda, 0xa5, 0xf2, 0xc0, - 0x0b, 0x80, 0xbc, 0xfd, 0x52, 0x87, 0x2a, 0x21, 0x6d, 0x46, 0xb8, 0x9a, - 0x4a, 0x92, 0xe4, 0xb8, 0x82, 0x95, 0xe2, 0x75, 0x4e, 0xe1, 0x22, 0xaa, - 0xb7, 0x95, 0x08, 0x53, 0xfb, 0xea, 0x0e, 0xe2, 0x55, 0x02, 0x8a, 0x61, - 0x7c, 0x6a, 0x4b, 0x0d, 0x6a, 0x39, 0xe9, 0x26, 0xb7, 0x93, 0xe4, 0x30, - 0x7a, 0xce, 0x2e, 0x1d, 0xb1, 0x72, 0x9c, 0xb9, 0xd0, 0x4d, 0x5c, 0x82, - 0xb2, 0xd2, 0x13, 0xd6, 0x17, 0xc9, 0x3b, 0xb6, 0xb3, 0xed, 0x0f, 0xb7, - 0x3b, 0xe3, 0x83, 0x54, 0x30, 0x72, 0xd2, 0xc5, 0x25, 0x00, 0xae, 0xb2, - 0xb2, 0x2a, 0x9d, 0xf0, 0x9a, 0x1f, 0x9b, 0x12, 0xc0, 0x42, 0x3b, 0xb8, - 0x66, 0xe5, 0xf4, 0x50, 0x76, 0x2d, 0x31, 0x96, 0x03, 0x7c, 0x0c, 0x0d, - 0x3c, 0xce, 0x80, 0x31, 0xc2, 0x03, 0x37, 0x8e, 0x41, 0x55, 0xbc, 0x89, - 0x0f, 0xff, 0x18, 0x43, 0x37, 0x60, 0x1b, 0x49, 0xf0, 0x1a, 0xbb, 0x9b, - 0x6f, 0x85, 0x6d, 0x79, 0x28, 0xe5, 0x40, 0xe7, 0x06, 0xb7, 0xea, 0x45, - 0x0c, 0xe2, 0x1a, 0x9e, 0x6a, 0x4e, 0x40, 0x38, 0xe3, 0x8a, 0x27, 0x26, - 0x1c, 0x57, 0x5d, 0xde, 0xa9, 0x25, 0x5c, 0x87, 0xa0, 0x0d, 0x95, 0x31, - 0x22, 0x5b, 0x74, 0x14, 0x09, 0x70, 0xe3, 0x32, 0x29, 0x91, 0x0a, 0x9a, - 0x81, 0xdd, 0xcb, 0xa1, 0xc3, 0x08, 0x86, 0xae, 0x18, 0x3d, 0x29, 0x90, - 0xc2, 0x49, 0x95, 0x75, 0x54, 0x59, 0x37, 0xfc, 0x94, 0x80, 0xfe, 0x80, - 0xbf, 0x57, 0x53, 0xbf, 0x6e, 0xca, 0x4b, 0x22, 0xa8, 0x16, 0x25, 0x89, - 0x9b, 0x6e, 0x6f, 0x2f, 0x7d, 0xb2, 0x9b, 0x58, 0x94, 0x82, 0xd6, 0x34, - 0x4b, 0xde, 0x2c, 0x19, 0x1d, 0xd0, 0x03, 0xb2, 0xf9, 0x93, 0x1b, 0xdc, - 0xc7, 0xa0, 0xf2, 0xce, 0x2b, 0xd0, 0x52, 0x57, 0xb5, 0x84, 0xe3, 0x73, - 0xdd, 0x20, 0x74, 0x5c, 0x4d, 0x8f, 0x4e, 0xc3, 0xb3, 0x63, 0x8a, 0xd3, - 0xc4, 0x62, 0x34, 0x4a, 0x11, 0xf6, 0xbc, 0x24, 0xda, 0x35, 0x26, 0x2b, - 0xba, 0x5f, 0x01, 0x71, 0x8e, 0x52, 0x75, 0x81, 0x96, 0x50, 0xb3, 0x4b, - 0x4a, 0x7a, 0x3c, 0x45, 0x37, 0x27, 0xaf, 0xec, 0x46, 0x7c, 0xb8, 0x09, - 0xf8, 0x09, 0xd3, 0x2f, 0xa9, 0xe3, 0x3c, 0x06, 0xe0, 0x0c, 0x0c, 0xb0, - 0xaf, 0x36, 0xe0, 0x7a, 0x1c, 0x60, 0x1f, 0x03, 0x74, 0x29, 0xdc, 0x6d, - 0xd6, 0x07, 0x73, 0x3a, 0xd4, 0x79, 0x46, 0x83, 0xdc, 0x5a, 0x91, 0x84, - 0x0f, 0x12, 0x6f, 0x8c, 0x0d, 0x78, 0xdb, 0x60, 0x53, 0xd8, 0x48, 0x26, - 0x9d, 0x2a, 0x05, 0xad, 0x0b, 0xdb, 0x1a, 0x7f, 0x40, 0xbd, 0x1f, 0xbb, - 0x27, 0x3b, 0x56, 0xca, 0x92, 0x2c, 0x6c, 0x3e, 0x2a, 0x2f, 0x5c, 0xe3, - 0xce, 0xef, 0x40, 0x6b, 0xb8, 0xb4, 0xa5, 0xe6, 0xce, 0xe4, 0x85, 0x74, - 0xdb, 0xd6, 0x49, 0x49, 0xb5, 0x6d, 0xff, 0xe7, 0xe9, 0xba, 0x6d, 0xdf, - 0xc9, 0x26, 0x3f, 0x9a, 0x3a, 0x95, 0xee, 0x69, 0xf6, 0x67, 0x89, 0xdc, - 0xde, 0xf5, 0x6c, 0x3d, 0x51, 0x5b, 0x2b, 0x14, 0x17, 0x26, 0x5c, 0x43, - 0x31, 0x73, 0x51, 0x52, 0x40, 0x9d, 0x84, 0x28, 0x67, 0x4f, 0x81, 0x56, - 0x80, 0x8e, 0x55, 0x29, 0xf5, 0xa1, 0x42, 0x01, 0x99, 0x00, 0xa3, 0xd4, - 0x87, 0xa4, 0x2b, 0x10, 0x4f, 0x4e, 0x1e, 0xda, 0x89, 0x21, 0x56, 0xbf, - 0x0c, 0x18, 0x9e, 0xd4, 0x6f, 0x25, 0x47, 0x57, 0x28, 0xec, 0xa1, 0xfb, - 0xb4, 0x62, 0xf2, 0x91, 0x34, 0x3a, 0xa0, 0x74, 0x1f, 0x67, 0x1b, 0x74, - 0x66, 0x31, 0x0f, 0x0f, 0x67, 0x3c, 0x00, 0x4a, 0xe8, 0x83, 0x72, 0x87, - 0xc5, 0x0d, 0xec, 0x43, 0xd5, 0xdd, 0x6b, 0x9c, 0x3e, 0x69, 0xaf, 0x40, - 0xe6, 0x0e, 0x55, 0xb4, 0x0f, 0x39, 0x09, 0x3e, 0x26, 0x18, 0x3d, 0x00, - 0xa7, 0x86, 0xa3, 0x06, 0xfc, 0x10, 0xa4, 0x21, 0x3c, 0x0b, 0x43, 0xea, - 0x21, 0x3f, 0xb7, 0x9b, 0xac, 0x7f, 0x63, 0xcb, 0x51, 0x68, 0x8c, 0xb6, - 0xcf, 0x1b, 0x8a, 0xdf, 0x14, 0x94, 0x76, 0x46, 0xae, 0x21, 0x91, 0x68, - 0x48, 0x2d, 0x78, 0xd0, 0x2f, 0xc0, 0x6e, 0x00, 0x00, 0x76, 0x1d, 0x12, - 0x5b, 0x3e, 0xe0, 0xe2, 0x54, 0x03, 0x59, 0xc0, 0x54, 0x4d, 0xee, 0x77, - 0x2e, 0x37, 0x14, 0xbe, 0x28, 0xde, 0x0d, 0xfb, 0xa1, 0x51, 0x11, 0xf3, - 0x90, 0x5b, 0x0e, 0x90, 0xdc, 0xc9, 0x22, 0x34, 0x4a, 0x79, 0x48, 0xad, - 0xee, 0x31, 0xcf, 0xc7, 0x51, 0x37, 0x7a, 0x00, 0x3c, 0x81, 0x80, 0x74, - 0xa0, 0x5f, 0x70, 0xdf, 0xa7, 0x30, 0x50, 0x14, 0x51, 0x4a, 0xa3, 0x3a, - 0x05, 0xa2, 0x4e, 0x10, 0x6e, 0x81, 0x26, 0xff, 0xfa, 0xac, 0x8e, 0x3f, - 0xf9, 0x08, 0x6f, 0x8f, 0xdd, 0x88, 0xf6, 0x74, 0x1d, 0x95, 0xdd, 0x21, - 0xa4, 0x29, 0x57, 0xa4, 0xa6, 0x9a, 0xcc, 0xb1, 0xb9, 0x7b, 0x9e, 0xd4, - 0xe3, 0x12, 0x4b, 0x36, 0xc0, 0x9c, 0xdc, 0x13, 0xd4, 0xcf, 0x2d, 0xb6, - 0x90, 0x5f, 0xb1, 0xbb, 0xed, 0xc2, 0x85, 0x7a, 0xa0, 0x4d, 0xf5, 0x14, - 0x88, 0x92, 0x29, 0x05, 0x6d, 0x62, 0xdf, 0x2c, 0x6e, 0xbd, 0x17, 0x51, - 0x8e, 0x09, 0x21, 0x3e, 0x58, 0xf0, 0xbb, 0x26, 0xd8, 0xee, 0x69, 0x10, - 0x39, 0xe8, 0x05, 0x78, 0xf4, 0x4b, 0x5f, 0x65, 0x7c, 0x7a, 0xae, 0x3c, - 0x07, 0x2d, 0x5e, 0x0a, 0xb5, 0x1a, 0x3b, 0x62, 0x32, 0xc1, 0x7b, 0x22, - 0x60, 0xac, 0xcb, 0x62, 0x4a, 0xcc, 0x3c, 0x8c, 0x61, 0x94, 0xab, 0x3e, - 0x90, 0x10, 0xca, 0xda, 0x0e, 0xea, 0x99, 0x22, 0xe4, 0x3d, 0x3e, 0x39, - 0xb9, 0xfe, 0xdd, 0x76, 0x93, 0x0a, 0x26, 0x6e, 0x65, 0x8c, 0xaa, 0x30, - 0xd6, 0xaa, 0x30, 0x9e, 0x2f, 0x79, 0x53, 0x6b, 0xc2, 0xe8, 0x35, 0x21, - 0x56, 0x9b, 0x0d, 0x44, 0x0d, 0xa0, 0x88, 0x18, 0x50, 0xf6, 0xe6, 0x58, - 0xea, 0x2c, 0xbe, 0xd9, 0x54, 0xf4, 0x18, 0xa7, 0x53, 0x6d, 0x2b, 0x43, - 0x48, 0x3b, 0xf7, 0x86, 0x0b, 0x5e, 0xc5, 0xa4, 0xda, 0x95, 0xff, 0x34, - 0xb2, 0x80, 0x24, 0xca, 0x00, 0x7d, 0x11, 0x7d, 0x34, 0x7c, 0x07, 0x92, - 0x9b, 0xe3, 0xa7, 0x25, 0x0e, 0xb7, 0xb1, 0xa0, 0x8e, 0x22, 0x4c, 0x0c, - 0x52, 0x95, 0x34, 0x42, 0x6f, 0x58, 0x89, 0x55, 0x76, 0x0c, 0x2a, 0x08, - 0x1c, 0x8d, 0x26, 0x1f, 0x84, 0xe2, 0xb4, 0x85, 0x29, 0x38, 0x34, 0x5d, - 0xfc, 0xb2, 0xb0, 0xc0, 0xd3, 0x41, 0x90, 0x22, 0xea, 0xa5, 0xc6, 0x90, - 0x76, 0x26, 0x0d, 0xb1, 0x38, 0xa6, 0x59, 0x03, 0x7d, 0xd2, 0x22, 0x30, - 0xbd, 0x15, 0xb4, 0x59, 0x1f, 0xa2, 0xd6, 0xa5, 0x39, 0x00, 0xce, 0xf4, - 0x62, 0x31, 0xad, 0x24, 0x1f, 0xc2, 0x90, 0x9e, 0x02, 0xf2, 0x79, 0x89, - 0xb5, 0x9c, 0xc2, 0xb7, 0x92, 0x40, 0x34, 0x04, 0x66, 0x16, 0xa7, 0xd5, - 0x31, 0x27, 0x29, 0x94, 0x3f, 0xe3, 0x44, 0xda, 0x5d, 0xbf, 0x96, 0xd6, - 0x4d, 0x39, 0x9e, 0x70, 0x45, 0x55, 0x8e, 0x6f, 0x63, 0xb6, 0x6e, 0xe7, - 0xa3, 0x50, 0x4a, 0x50, 0xcd, 0x53, 0x02, 0x69, 0x48, 0xeb, 0x70, 0x4e, - 0xa7, 0xa7, 0xb5, 0xdb, 0x54, 0xfc, 0xf2, 0x12, 0xa8, 0xbb, 0xb2, 0x77, - 0x06, 0xf7, 0x99, 0x0b, 0x0b, 0x81, 0xc2, 0xe4, 0x1c, 0xa7, 0x3c, 0x0a, - 0xbb, 0x3f, 0x8d, 0x84, 0x92, 0x77, 0xb0, 0x7c, 0x58, 0xcc, 0x1d, 0xf8, - 0x44, 0x5b, 0x6e, 0x7d, 0x0d, 0x4d, 0x4a, 0x00, 0x8d, 0x80, 0x5c, 0x40, - 0x2a, 0x64, 0xc6, 0x37, 0x6b, 0xb7, 0xb5, 0xa8, 0x4d, 0xf4, 0xc6, 0x25, - 0xda, 0x15, 0x52, 0xa5, 0x4b, 0xf6, 0x29, 0x52, 0xa6, 0xf5, 0xe7, 0xd3, - 0x0d, 0x84, 0xe8, 0x76, 0x40, 0x4d, 0x16, 0xf2, 0x13, 0x7d, 0x39, 0x00, - 0x93, 0x20, 0xc7, 0x84, 0x42, 0x63, 0xa6, 0x3c, 0x73, 0xae, 0x6a, 0xf4, - 0x7b, 0x64, 0x24, 0x55, 0x16, 0x72, 0x9e, 0xe5, 0x71, 0x9e, 0x37, 0xf7, - 0x8f, 0x9b, 0x51, 0x24, 0xfc, 0xa0, 0xec, 0xc8, 0x58, 0xf4, 0x7d, 0x13, - 0xdc, 0x55, 0xd5, 0xf2, 0xf6, 0xf4, 0x49, 0x4e, 0xae, 0xb5, 0x41, 0x32, - 0x11, 0x7d, 0xd4, 0x98, 0xb7, 0x5f, 0xa8, 0xf4, 0x74, 0x1f, 0x37, 0x0c, - 0xd4, 0xdd, 0x94, 0x38, 0xc5, 0x83, 0x07, 0xaa, 0x4a, 0x3e, 0xee, 0xaf, - 0x1a, 0x1f, 0x55, 0x60, 0xca, 0x3b, 0x64, 0x41, 0x06, 0xe2, 0x1b, 0x87, - 0x0a, 0xc9, 0x51, 0x45, 0x23, 0x3b, 0x13, 0xba, 0xb5, 0x99, 0xa3, 0x5c, - 0xc4, 0x56, 0x47, 0xab, 0x98, 0x44, 0xc1, 0x79, 0xa8, 0xba, 0xbc, 0x28, - 0x4a, 0xe4, 0x83, 0x1c, 0xc0, 0x8d, 0x63, 0x06, 0x22, 0x4a, 0xf7, 0x72, - 0xac, 0xa2, 0x41, 0xe8, 0x09, 0x05, 0xb8, 0xaa, 0x5f, 0x02, 0xfe, 0x56, - 0xdf, 0x25, 0x78, 0x06, 0x52, 0x55, 0x16, 0x64, 0x9d, 0xcb, 0xc7, 0x2a, - 0xd5, 0x83, 0xba, 0xa6, 0xd1, 0xa9, 0x87, 0x70, 0xe5, 0x31, 0xd4, 0xe2, - 0x5d, 0x45, 0x3e, 0x36, 0x37, 0xa8, 0x90, 0xa8, 0xd4, 0x79, 0x1e, 0x7d, - 0xb4, 0xa4, 0x42, 0x50, 0x11, 0xcd, 0x7d, 0x2b, 0x88, 0xdf, 0xd2, 0xfc, - 0xf6, 0x8f, 0xdf, 0x8b, 0x3c, 0xff, 0x66, 0x11, 0xce, 0x27, 0xeb, 0xe6, - 0xe1, 0x23, 0x9e, 0x23, 0x5e, 0xa6, 0x03, 0xb4, 0x99, 0xc9, 0x7b, 0x6c, - 0x48, 0xdf, 0xb5, 0x03, 0x59, 0x28, 0x96, 0x45, 0x84, 0xfa, 0x4c, 0xaf, - 0xa3, 0xdb, 0xf4, 0x2f, 0xf5, 0x01, 0x10, 0xc2, 0x40, 0xf6, 0x03, 0xf1, - 0x4b, 0xa1, 0x85, 0xdb, 0x7f, 0xe5, 0xf0, 0x72, 0x19, 0xdb, 0x80, 0x06, - 0x5a, 0x6b, 0x09, 0x81, 0x34, 0x54, 0x5f, 0x49, 0x66, 0xd7, 0xea, 0xac, - 0x96, 0x36, 0xcb, 0xe1, 0xb3, 0x8f, 0x63, 0x67, 0xeb, 0x8b, 0x6d, 0x22, - 0x68, 0x9f, 0x3a, 0x89, 0x6f, 0x0e, 0xef, 0x77, 0xfb, 0x5b, 0x7a, 0xea, - 0xc2, 0x0e, 0xce, 0x8c, 0x19, 0x39, 0x86, 0xbb, 0x4d, 0x69, 0x51, 0xad, - 0xb0, 0x2c, 0x34, 0xa0, 0x56, 0x1e, 0x7c, 0xc4, 0x00, 0x84, 0x8c, 0xfd, - 0x16, 0x2e, 0x18, 0x1d, 0x43, 0x1a, 0xb8, 0x33, 0x46, 0x80, 0x89, 0xc6, - 0x31, 0xfc, 0x4b, 0x58, 0x52, 0x3a, 0x06, 0x1e, 0x57, 0xe3, 0x27, 0xda, - 0x5c, 0xf0, 0x7c, 0xd5, 0x20, 0x24, 0x57, 0xb4, 0x1b, 0x07, 0x7a, 0x92, - 0x24, 0xf5, 0x69, 0x40, 0x4e, 0x65, 0x2c, 0x6f, 0xce, 0x17, 0x2a, 0x08, - 0x93, 0x00, 0xee, 0x34, 0x90, 0x72, 0xae, 0x25, 0x94, 0x4b, 0x20, 0x3a, - 0x5a, 0x6a, 0x6d, 0x20, 0x1e, 0x9d, 0xca, 0xd0, 0xc3, 0x47, 0x1c, 0x07, - 0xef, 0xe3, 0x2f, 0x15, 0xa8, 0x97, 0x05, 0x53, 0x06, 0xc5, 0xa0, 0x3c, - 0xd4, 0x22, 0x00, 0xa9, 0x80, 0x1f, 0x5e, 0x91, 0x8f, 0xe1, 0xc3, 0xd0, - 0x9c, 0x10, 0x79, 0x20, 0xc4, 0xa1, 0x3d, 0xcb, 0x0b, 0xbc, 0xbd, 0x61, - 0xc9, 0x4a, 0x62, 0x43, 0xc4, 0x24, 0xdc, 0xdd, 0xe3, 0x0d, 0x08, 0x94, - 0x11, 0x64, 0xc8, 0x31, 0xf2, 0x64, 0x9b, 0x35, 0x01, 0xe2, 0xca, 0xa3, - 0x51, 0x06, 0x75, 0x2c, 0xe3, 0xef, 0x40, 0xfa, 0x94, 0x41, 0xeb, 0x76, - 0xdd, 0x08, 0x3a, 0x34, 0xf6, 0x82, 0x86, 0x7d, 0xd9, 0x32, 0x90, 0x6b, - 0xeb, 0x34, 0x00, 0xe8, 0x9e, 0xb4, 0x49, 0x0c, 0xac, 0xfa, 0x76, 0x70, - 0x5f, 0x03, 0x6a, 0x24, 0xc5, 0xd8, 0x9b, 0x12, 0x7c, 0x34, 0xcc, 0x5a, - 0xc8, 0x71, 0x91, 0x29, 0x38, 0x62, 0x7a, 0x68, 0xcb, 0xe5, 0xc0, 0xc1, - 0xcb, 0x23, 0x49, 0x7c, 0x3e, 0x80, 0x4b, 0x27, 0x74, 0x88, 0xd2, 0x76, - 0xf0, 0x41, 0xed, 0xc5, 0x3f, 0xeb, 0xca, 0xd7, 0xa1, 0xe3, 0x2b, 0x87, - 0xc7, 0x26, 0x71, 0xed, 0x3a, 0xd1, 0xc8, 0x93, 0xea, 0xf4, 0x90, 0x2a, - 0x53, 0x71, 0x2a, 0x11, 0xc8, 0xf3, 0xa8, 0x1e, 0x4c, 0x3c, 0xd2, 0x24, - 0x1b, 0x6d, 0xba, 0x05, 0xa6, 0x35, 0x74, 0x7c, 0xaf, 0x9e, 0xf7, 0x52, - 0x80, 0xb2, 0x8a, 0x2f, 0xd0, 0xee, 0x81, 0x9a, 0xf4, 0x29, 0x3a, 0x2c, - 0xc0, 0xde, 0xf6, 0xbc, 0xd2, 0xd4, 0x82, 0x35, 0xfd, 0x23, 0xad, 0x9c, - 0x7d, 0x1c, 0x3c, 0x1c, 0x77, 0xc4, 0x71, 0xb7, 0x83, 0x8b, 0xa0, 0x14, - 0x48, 0xe5, 0x44, 0x83, 0x66, 0x89, 0xa8, 0x52, 0x84, 0xf7, 0x27, 0xa7, - 0x89, 0xbc, 0x47, 0x77, 0x4c, 0xa8, 0x96, 0xc7, 0xc4, 0xfb, 0xb3, 0x07, - 0x36, 0x6e, 0x4c, 0xd1, 0xf4, 0xeb, 0xd0, 0xa1, 0xca, 0x63, 0x92, 0x52, - 0x17, 0x44, 0x0f, 0x89, 0x19, 0x38, 0x24, 0x5c, 0xc0, 0x48, 0xea, 0xbe, - 0x50, 0xf5, 0x55, 0x1e, 0x16, 0x37, 0x6e, 0xd8, 0x40, 0x65, 0x29, 0x36, - 0xba, 0x0b, 0x58, 0x69, 0x46, 0xe2, 0x61, 0x51, 0xf7, 0xe0, 0x02, 0xd0, - 0x51, 0xaf, 0x00, 0x01, 0x31, 0xf7, 0xe7, 0x59, 0x0b, 0x08, 0x6c, 0x65, - 0x4c, 0x51, 0xe7, 0x7d, 0xcc, 0x96, 0xf0, 0x5c, 0x9e, 0x03, 0xca, 0x34, - 0xb8, 0x73, 0x0e, 0x72, 0xcc, 0x6a, 0xcd, 0x0f, 0x98, 0x62, 0x45, 0x5f, - 0x28, 0x4a, 0xd6, 0xe8, 0x3d, 0xeb, 0x98, 0x00, 0x9f, 0xa3, 0xa2, 0xca, - 0xd3, 0x1b, 0xc7, 0xa2, 0xc7, 0x50, 0x03, 0x30, 0x93, 0x17, 0x4a, 0xb1, - 0x05, 0xe5, 0x03, 0x68, 0x06, 0x58, 0x12, 0x30, 0x76, 0x3f, 0x16, 0x5d, - 0x9f, 0x3b, 0x16, 0x3f, 0x64, 0x46, 0xa0, 0x22, 0xb9, 0xa8, 0x10, 0x2c, - 0xf5, 0xae, 0xbb, 0xc1, 0x91, 0xfb, 0xe0, 0x12, 0x0c, 0xf4, 0x94, 0x8c, - 0x36, 0x91, 0x30, 0xa1, 0x79, 0x8e, 0x0b, 0x0a, 0x02, 0x15, 0x77, 0x6a, - 0x38, 0x75, 0x2c, 0x7a, 0xf0, 0x06, 0x60, 0x62, 0x13, 0xb5, 0x58, 0xe7, - 0xa3, 0x30, 0xad, 0xf9, 0x5b, 0x65, 0x72, 0x29, 0xd5, 0xe1, 0xd2, 0x1c, - 0xda, 0xa8, 0xc8, 0x5b, 0xad, 0xa5, 0x18, 0xf5, 0x87, 0xdd, 0x00, 0xb5, - 0x9b, 0xe7, 0x20, 0xec, 0xec, 0x1e, 0x39, 0x02, 0xd7, 0xf4, 0x34, 0xf9, - 0xe6, 0xa4, 0xe2, 0x58, 0x4e, 0x1c, 0xf2, 0x3f, 0x78, 0x64, 0xf4, 0x28, - 0xd6, 0x8f, 0xb2, 0xc1, 0xe1, 0x96, 0x07, 0xd4, 0x8d, 0xa4, 0xce, 0x99, - 0x8f, 0xe2, 0x75, 0xb3, 0xfc, 0x63, 0x9e, 0x58, 0x33, 0xc4, 0x1a, 0x89, - 0x7e, 0xc6, 0x14, 0x4f, 0x04, 0x5d, 0x76, 0x3e, 0xe2, 0x99, 0xbe, 0x27, - 0xa4, 0xe2, 0xc0, 0xd2, 0x26, 0x25, 0xdc, 0x22, 0x8a, 0x15, 0x81, 0x2a, - 0xdd, 0x06, 0x08, 0x25, 0x0c, 0x66, 0x77, 0xdc, 0xea, 0xa2, 0x55, 0xdf, - 0xbc, 0x3d, 0x76, 0x35, 0x3c, 0x7b, 0x4c, 0x72, 0x0f, 0xee, 0xf0, 0x41, - 0x75, 0x47, 0x35, 0x48, 0x3c, 0xea, 0x09, 0x76, 0xa2, 0x6d, 0x49, 0xac, - 0x69, 0x98, 0x98, 0xea, 0xeb, 0xd1, 0xdf, 0xcc, 0xaa, 0xfc, 0xdc, 0x30, - 0xcb, 0xbb, 0xe3, 0xdf, 0xab, 0xb9, 0xea, 0x33, 0x8c, 0x7c, 0xfe, 0xe3, - 0x11, 0xe5, 0xe3, 0x64, 0x8e, 0xf8, 0xf0, 0xd3, 0x34, 0xbf, 0xcf, 0x25, - 0x61, 0x9a, 0x7a, 0xce, 0xf8, 0x23, 0xdb, 0xce, 0xf9, 0xfd, 0x62, 0x6f, - 0x75, 0xce, 0x8b, 0x2e, 0x0b, 0x3b, 0xe0, 0xc5, 0xb2, 0x86, 0xcf, 0xca, - 0x20, 0xbd, 0x04, 0x8f, 0xd9, 0x51, 0xe8, 0xe8, 0x80, 0x82, 0x41, 0xc9, - 0x9e, 0x10, 0xdc, 0xb2, 0x75, 0xdb, 0x3d, 0x73, 0x3a, 0x5c, 0x79, 0xa9, - 0xa2, 0x42, 0x46, 0x54, 0x1c, 0x97, 0x20, 0xcf, 0x79, 0xc3, 0xd3, 0xf1, - 0xcf, 0x73, 0x19, 0xc6, 0x3b, 0x0f, 0xfb, 0x13, 0xc5, 0xd5, 0x87, 0xca, - 0xec, 0x81, 0x63, 0x59, 0xad, 0x72, 0xd5, 0x14, 0x56, 0x7c, 0x19, 0xb5, - 0xca, 0xe9, 0xd3, 0x62, 0xcd, 0x03, 0xef, 0xcb, 0x5c, 0x39, 0x85, 0xa4, - 0xd3, 0xa8, 0xa6, 0x05, 0x3c, 0x39, 0x96, 0xf1, 0xae, 0x24, 0x58, 0xfa, - 0x50, 0x75, 0x81, 0x1a, 0x39, 0x60, 0x10, 0xad, 0x61, 0xeb, 0x82, 0x76, - 0x09, 0x59, 0x1f, 0x30, 0xc3, 0x78, 0xc6, 0x46, 0xd8, 0x86, 0x32, 0x37, - 0x19, 0xa9, 0x17, 0x53, 0xce, 0x25, 0xf3, 0xd5, 0x70, 0x80, 0x47, 0xca, - 0xe3, 0xdd, 0x43, 0x9c, 0x6b, 0x88, 0x70, 0xaa, 0xa4, 0xd3, 0xf7, 0xad, - 0xdc, 0x13, 0xb7, 0xad, 0xf5, 0x98, 0x9d, 0x63, 0xdd, 0xab, 0x3c, 0x57, - 0x66, 0x12, 0x5a, 0x6a, 0x83, 0xae, 0xa3, 0x73, 0xda, 0x00, 0x5a, 0xda, - 0x38, 0xeb, 0x89, 0xed, 0x33, 0x4e, 0x6c, 0x9f, 0x71, 0xce, 0xf0, 0xf4, - 0x6b, 0x7c, 0x5c, 0x12, 0x3e, 0xeb, 0x5d, 0xf3, 0x53, 0x42, 0x24, 0xce, - 0x7a, 0xd3, 0xe6, 0x44, 0x2f, 0x62, 0x8a, 0xc5, 0x75, 0xe5, 0xf0, 0xdb, - 0x70, 0x93, 0x41, 0x0b, 0x4e, 0x86, 0xd6, 0xc4, 0x71, 0x38, 0x10, 0x1f, - 0x54, 0x04, 0xf2, 0xab, 0xdc, 0x8e, 0x94, 0x0e, 0xb8, 0xc8, 0xcd, 0x1e, - 0x83, 0x2b, 0x58, 0x62, 0xf7, 0x0a, 0xc2, 0xcc, 0x67, 0xe0, 0x8e, 0xc8, - 0x59, 0xb0, 0x55, 0x71, 0xee, 0xfb, 0xbf, 0xe1, 0xbf, 0xd7, 0x7f, 0xaf, - 0x61, 0xf8, 0x82, 0x52, 0x4c, 0xc1, 0x73, 0xa3, 0xd6, 0xc2, 0x18, 0xb8, - 0x1d, 0x37, 0x10, 0x48, 0xcc, 0x25, 0x6f, 0x23, 0x13, 0x3d, 0x5e, 0xdb, - 0xe1, 0x53, 0x0c, 0x47, 0x34, 0x2f, 0xfa, 0xce, 0x3d, 0x39, 0x41, 0xaf, - 0xf2, 0x95, 0xc9, 0xb4, 0x9a, 0xf4, 0xb9, 0xde, 0x74, 0x71, 0xc6, 0xf7, - 0xcc, 0xc4, 0x61, 0xd5, 0x5f, 0x68, 0x09, 0x7a, 0x0f, 0x93, 0x4b, 0xd8, - 0xaf, 0x34, 0x3c, 0xd9, 0x8f, 0x21, 0xe8, 0xd4, 0x1c, 0x3b, 0x7a, 0x03, - 0x0f, 0x77, 0xf7, 0x08, 0x4a, 0x43, 0x39, 0x33, 0xa6, 0x07, 0x95, 0x7d, - 0x48, 0x46, 0xef, 0xe3, 0x1b, 0xea, 0x0b, 0x3d, 0xfe, 0x0b, 0x07, 0xce, - 0xd1, 0x8b, 0x19, 0x78, 0x0f, 0xdc, 0xc2, 0x05, 0xd2, 0x26, 0x35, 0xd1, - 0xb1, 0x07, 0x1d, 0x99, 0x3e, 0x3c, 0x43, 0xf2, 0xf2, 0x0b, 0x0d, 0xa0, - 0x49, 0x56, 0xa6, 0x20, 0x5c, 0xad, 0x11, 0x94, 0xc1, 0x99, 0x31, 0x05, - 0xdd, 0xe3, 0x13, 0xc4, 0x62, 0x38, 0x45, 0x09, 0x03, 0xdc, 0x6c, 0xf4, - 0xf5, 0xc2, 0x69, 0x76, 0x1a, 0x61, 0x64, 0x1e, 0xff, 0xa8, 0x20, 0xcc, - 0x8f, 0xc2, 0x78, 0x1a, 0xd9, 0x70, 0x65, 0xfd, 0x65, 0x15, 0xfc, 0x3e, - 0x2a, 0x89, 0xc7, 0x99, 0xca, 0x80, 0x53, 0x98, 0xf3, 0xe8, 0xf8, 0x0c, - 0xd1, 0x50, 0x64, 0x9f, 0x7e, 0x08, 0xd0, 0x53, 0xab, 0xe9, 0x24, 0x67, - 0x97, 0x27, 0xcf, 0x10, 0x77, 0x58, 0xbb, 0x0d, 0xd4, 0xe0, 0xf9, 0x36, - 0x47, 0xf3, 0xd8, 0xb4, 0xab, 0xae, 0xb9, 0x73, 0x0f, 0xb8, 0x7b, 0x08, - 0x76, 0xdf, 0xd4, 0x70, 0x06, 0xdb, 0xa8, 0x15, 0x97, 0xd4, 0xf4, 0xcf, - 0xed, 0x82, 0xab, 0xe3, 0xda, 0x06, 0x71, 0x1c, 0x27, 0xf1, 0x9c, 0xf5, - 0x56, 0xa6, 0x71, 0x67, 0xc5, 0x67, 0x67, 0x2c, 0x22, 0x14, 0xd2, 0x6c, - 0x9c, 0xe9, 0x4c, 0xfc, 0x60, 0xdd, 0xb8, 0x63, 0x72, 0x65, 0x7e, 0x73, - 0xc5, 0x3c, 0xc9, 0x07, 0xe8, 0x46, 0xbb, 0x88, 0xe5, 0x2e, 0xcd, 0xad, - 0xb2, 0x5b, 0x47, 0xe3, 0x08, 0xb2, 0xcf, 0x43, 0x66, 0xa8, 0xb4, 0xce, - 0x21, 0x12, 0xbb, 0xc5, 0x0c, 0xa8, 0x77, 0xcd, 0xa6, 0x2a, 0x2d, 0x02, - 0xed, 0x32, 0x27, 0xb9, 0xfa, 0x98, 0xb9, 0x5b, 0xf5, 0xc3, 0xd6, 0x1d, - 0xae, 0xe1, 0x64, 0x2a, 0xf8, 0x27, 0x34, 0x77, 0x0d, 0x8d, 0x0d, 0x86, - 0x59, 0xe1, 0xbb, 0x33, 0x2e, 0x26, 0x4c, 0xcc, 0xde, 0xc2, 0x52, 0xca, - 0x0b, 0x8b, 0x13, 0x81, 0x31, 0x65, 0xef, 0xb0, 0xb7, 0x83, 0x9d, 0x8e, - 0x5b, 0xdb, 0x20, 0x98, 0xa3, 0x61, 0x8f, 0xa6, 0x4d, 0x4d, 0xca, 0xf0, - 0xe3, 0x18, 0xe7, 0x7b, 0x01, 0xf1, 0xec, 0xa9, 0x11, 0x18, 0xf9, 0xfa, - 0x12, 0x49, 0xbf, 0x50, 0x79, 0x9a, 0x87, 0x57, 0xf4, 0x5e, 0xda, 0x8d, - 0x36, 0x72, 0x2e, 0x2a, 0x67, 0x4f, 0xfc, 0xa3, 0xae, 0x3e, 0x55, 0x55, - 0x9f, 0x0f, 0xa6, 0xb9, 0x44, 0x1b, 0x1b, 0x85, 0x14, 0x39, 0x26, 0xf0, - 0xf3, 0x19, 0x62, 0x71, 0x81, 0x53, 0x90, 0x57, 0xd5, 0x52, 0x7d, 0x7d, - 0xfa, 0x38, 0x00, 0xc8, 0xbb, 0x3b, 0xc2, 0xa7, 0x9f, 0xac, 0x6c, 0x8c, - 0x7f, 0xd0, 0x96, 0x5f, 0xc0, 0x12, 0xba, 0x51, 0x46, 0x9f, 0x29, 0x4a, - 0xa8, 0x21, 0x35, 0xee, 0x2f, 0x3e, 0x3c, 0x30, 0x50, 0xaf, 0x70, 0xc6, - 0x64, 0x80, 0x52, 0x7e, 0x5e, 0x68, 0xc2, 0x77, 0x46, 0x20, 0xb1, 0x1d, - 0x48, 0x52, 0x86, 0x89, 0x04, 0xad, 0x18, 0xf3, 0x33, 0x29, 0xac, 0xc9, - 0x05, 0x74, 0x39, 0x2a, 0x48, 0xa8, 0xc4, 0x0f, 0x85, 0x5b, 0x19, 0x04, - 0x38, 0x54, 0xb6, 0xbf, 0x1c, 0x1f, 0x9b, 0x90, 0x1e, 0xb3, 0x23, 0x62, - 0xaa, 0x91, 0x2a, 0x1e, 0x82, 0x18, 0xbf, 0x01, 0x3f, 0xb2, 0x88, 0x0b, - 0x2d, 0xaf, 0x38, 0xbe, 0x73, 0x75, 0x13, 0x20, 0x7d, 0x89, 0x78, 0x72, - 0xa6, 0xf6, 0x24, 0x2b, 0x99, 0xa4, 0x60, 0x52, 0x66, 0x0f, 0xa8, 0x24, - 0x36, 0x0b, 0x31, 0xba, 0x65, 0x5b, 0xf5, 0x4e, 0x71, 0xc7, 0x84, 0x27, - 0xdb, 0x5a, 0x2a, 0xdc, 0x29, 0x57, 0x5f, 0xf0, 0x9c, 0xe4, 0xc4, 0xee, - 0xa9, 0x52, 0xbe, 0x47, 0xbc, 0x06, 0x2e, 0x93, 0xdf, 0x4a, 0x0f, 0x36, - 0x9f, 0xff, 0xfe, 0x51, 0x01, 0x7c, 0x8f, 0x54, 0x50, 0xfc, 0xdf, 0x09, - 0x06, 0xf0, 0xa8, 0x3e, 0x73, 0x6a, 0xa2, 0xcc, 0xbb, 0xd7, 0x30, 0x45, - 0xbd, 0x9d, 0x86, 0x8f, 0x34, 0xd0, 0x27, 0x06, 0x4d, 0x0c, 0x61, 0xed, - 0xd2, 0x94, 0x11, 0xd3, 0x17, 0x15, 0x6f, 0xfa, 0x0d, 0x28, 0x8c, 0xd3, - 0x57, 0xbf, 0xf3, 0x03, 0x7e, 0x56, 0xbb, 0x32, 0x7d, 0xf1, 0x41, 0x3f, - 0x82, 0x11, 0xd3, 0x14, 0x20, 0xcf, 0x4a, 0x9b, 0x31, 0xb2, 0x7d, 0xb4, - 0x99, 0xe0, 0x21, 0x6a, 0xd3, 0x2d, 0x52, 0x76, 0x0a, 0x46, 0x32, 0x83, - 0xad, 0x2a, 0x60, 0xc4, 0x5b, 0x34, 0x43, 0xfe, 0xf2, 0xb5, 0x30, 0xf5, - 0x26, 0x2a, 0x8a, 0xc5, 0xc4, 0x7e, 0xc8, 0xc5, 0xd6, 0xbd, 0x24, 0x89, - 0x8e, 0x94, 0xc7, 0x4e, 0x02, 0x28, 0x3e, 0x53, 0xce, 0x22, 0xdf, 0x2d, - 0xf0, 0xba, 0x0c, 0x02, 0xc0, 0xb5, 0x13, 0x00, 0x9c, 0xbf, 0xaf, 0xa9, - 0xe5, 0x5c, 0x2e, 0x95, 0xe1, 0x51, 0xed, 0xca, 0x78, 0x30, 0xf1, 0x0a, - 0x2a, 0xc8, 0x37, 0x2b, 0xc0, 0x44, 0x87, 0xd8, 0x54, 0x4f, 0xf4, 0x12, - 0x27, 0x80, 0x39, 0x0e, 0x98, 0xc2, 0x36, 0xcf, 0x79, 0x87, 0x27, 0xb5, - 0x1d, 0x13, 0x52, 0xef, 0x39, 0xd5, 0x16, 0x1e, 0xc5, 0x7a, 0x58, 0x1c, - 0x41, 0xca, 0x8d, 0xa7, 0x12, 0x1d, 0x54, 0xe1, 0x02, 0x91, 0x5e, 0xac, - 0xb8, 0x1b, 0x3e, 0x76, 0x34, 0x36, 0x93, 0xe7, 0xf7, 0x87, 0x8d, 0xd1, - 0x74, 0x2a, 0xa1, 0xe0, 0xc3, 0x6c, 0x5d, 0xef, 0x39, 0x3c, 0x2a, 0xda, - 0x88, 0x26, 0xaa, 0x8b, 0xb5, 0x72, 0xf7, 0x57, 0x85, 0x42, 0x65, 0x67, - 0x0b, 0x3b, 0x0f, 0x07, 0x0d, 0xdd, 0x94, 0xb7, 0x38, 0x6a, 0xe9, 0x55, - 0x61, 0xbe, 0xd9, 0x7c, 0x2e, 0x28, 0x03, 0xc6, 0x8e, 0xc4, 0x7a, 0x6d, - 0x84, 0x84, 0x37, 0x24, 0x5f, 0x3c, 0xe7, 0x42, 0x22, 0x03, 0x46, 0xa2, - 0xe2, 0x02, 0x57, 0x4d, 0x8e, 0x5c, 0x05, 0x95, 0xa7, 0x40, 0x93, 0x46, - 0x12, 0x80, 0x7b, 0xa6, 0xd3, 0xb3, 0xeb, 0x40, 0x32, 0x53, 0xe4, 0x2a, - 0x19, 0xba, 0xb3, 0xed, 0x41, 0xc3, 0x11, 0x5e, 0x9a, 0x31, 0xfa, 0x8b, - 0x98, 0xe0, 0x1e, 0x25, 0x55, 0x9a, 0x5a, 0x58, 0x7a, 0x97, 0x07, 0x95, - 0x1b, 0x1b, 0x62, 0x50, 0x96, 0x37, 0x01, 0x19, 0x33, 0x48, 0xf1, 0xb3, - 0x84, 0x63, 0x7c, 0x4e, 0x01, 0xb0, 0x90, 0x44, 0x50, 0x54, 0x2f, 0xb5, - 0xf2, 0xad, 0xe6, 0x6a, 0x79, 0xdc, 0x87, 0x12, 0x74, 0x17, 0x98, 0x14, - 0x08, 0x80, 0xcd, 0x51, 0x51, 0xd7, 0x60, 0xe8, 0xf8, 0xfa, 0xda, 0xfe, - 0xeb, 0x9e, 0x12, 0x7c, 0xf1, 0xf8, 0xcc, 0xb6, 0x57, 0xa0, 0x68, 0x19, - 0x3e, 0xe4, 0xbd, 0xb7, 0x5d, 0x06, 0x8e, 0x85, 0x94, 0xcf, 0x68, 0x00, - 0xa4, 0xbb, 0x7b, 0x04, 0xe0, 0x31, 0x36, 0x5c, 0xfd, 0x12, 0xe4, 0x8c, - 0xbb, 0x63, 0x35, 0xd0, 0xeb, 0xd9, 0x66, 0xa2, 0x86, 0x28, 0x71, 0xa1, - 0x0e, 0xc8, 0xaa, 0x9a, 0x95, 0xcf, 0xf1, 0x8b, 0xcc, 0x34, 0x3a, 0xb9, - 0x79, 0xa4, 0x23, 0x01, 0xa7, 0x08, 0xb5, 0xbf, 0xe2, 0x21, 0xc8, 0xfa, - 0x87, 0xc5, 0xfd, 0xf4, 0xa8, 0x60, 0x94, 0xef, 0xf9, 0x50, 0x18, 0x8b, - 0x1a, 0xc5, 0xe5, 0x21, 0x7f, 0x35, 0xbe, 0x24, 0xf5, 0xae, 0x51, 0x6b, - 0xff, 0xa2, 0xb2, 0xb2, 0xbd, 0x22, 0x1b, 0x88, 0x4a, 0x85, 0x11, 0x86, - 0xba, 0xe8, 0x4d, 0x86, 0x92, 0xd1, 0x84, 0x4a, 0x35, 0xb1, 0x47, 0xa9, - 0x80, 0xa0, 0x29, 0xff, 0xde, 0x9a, 0x65, 0xc3, 0x14, 0x25, 0x44, 0x14, - 0x09, 0xf1, 0x5d, 0x52, 0xcd, 0x9b, 0xf3, 0xc6, 0x4b, 0xc5, 0x84, 0x9e, - 0x9e, 0xe3, 0x57, 0x3a, 0x47, 0x06, 0xf8, 0xd9, 0x26, 0x16, 0xb8, 0x53, - 0x47, 0x42, 0xe9, 0x79, 0x2f, 0xc9, 0x05, 0x04, 0xe1, 0x72, 0x13, 0x80, - 0xbb, 0xf8, 0x74, 0x57, 0x9e, 0x8b, 0xa7, 0xc7, 0xd3, 0x13, 0x88, 0x67, - 0x0a, 0xff, 0xe3, 0x2e, 0xf2, 0x8b, 0xef, 0xd9, 0x38, 0x17, 0x75, 0x68, - 0xd1, 0xc8, 0x1e, 0xaf, 0x65, 0xbf, 0x86, 0xc5, 0x93, 0x6a, 0x53, 0xc2, - 0x1f, 0x72, 0x34, 0x33, 0xd7, 0x34, 0xd0, 0xcc, 0x05, 0xbd, 0x0b, 0x72, - 0x7b, 0xc5, 0xc5, 0xfa, 0x3a, 0xd4, 0x58, 0xbb, 0x7e, 0x70, 0xf5, 0x46, - 0x7b, 0x9d, 0xda, 0x08, 0xc2, 0xb0, 0x8f, 0x0f, 0x0c, 0xad, 0x6c, 0x34, - 0xd6, 0xc9, 0xdb, 0x4a, 0x2b, 0x7a, 0x8b, 0x02, 0x03, 0x84, 0xa4, 0x65, - 0xb5, 0x8b, 0x87, 0xe3, 0x0d, 0xed, 0xcc, 0xf4, 0x15, 0x22, 0xc7, 0x04, - 0x34, 0x60, 0x5c, 0xdb, 0xf0, 0xdf, 0x60, 0x08, 0x96, 0x78, 0x0d, 0x56, - 0xcd, 0x12, 0xc3, 0x59, 0x06, 0xb1, 0x38, 0x09, 0x4e, 0x00, 0xb9, 0x87, - 0x85, 0xc8, 0xfb, 0x79, 0x00, 0x9f, 0xf0, 0x95, 0x5b, 0xf2, 0xe4, 0x75, - 0xe4, 0xc5, 0xba, 0xdc, 0x72, 0x71, 0xa2, 0xd1, 0x21, 0x90, 0x9b, 0xcb, - 0x47, 0xa5, 0xf5, 0xdb, 0xe1, 0x1f, 0x1f, 0xde, 0x4f, 0x02, 0xb0, 0x84, - 0x94, 0x68, 0x3a, 0xca, 0x43, 0xcb, 0xcc, 0x40, 0x77, 0xcf, 0x1f, 0x08, - 0x1d, 0x6c, 0xf9, 0xee, 0x42, 0x09, 0x5f, 0x55, 0x16, 0x21, 0xd0, 0x17, - 0x36, 0x3a, 0x23, 0xc1, 0xcb, 0xe3, 0x15, 0xce, 0x5f, 0x1a, 0x83, 0xf2, - 0xf0, 0x66, 0x52, 0xe0, 0x8f, 0x7e, 0x45, 0xa5, 0x77, 0x29, 0x29, 0x74, - 0x89, 0x0b, 0x02, 0x44, 0x91, 0x24, 0xb5, 0x46, 0x97, 0x66, 0x7a, 0x65, - 0xa1, 0x28, 0x8f, 0x48, 0x9e, 0xc7, 0x1e, 0x01, 0xf1, 0x01, 0x8a, 0x81, - 0xac, 0x2f, 0xdf, 0x11, 0x5f, 0x9e, 0x54, 0x23, 0x70, 0x2f, 0xc8, 0x8d, - 0xde, 0x56, 0xfa, 0x73, 0xaf, 0x2d, 0x44, 0x23, 0x67, 0x7b, 0x78, 0xa0, - 0x94, 0xee, 0x38, 0x17, 0x76, 0x7d, 0xa4, 0x50, 0x6c, 0xc0, 0xa8, 0x5c, - 0xe6, 0x00, 0xa7, 0xbc, 0x23, 0xc9, 0xe8, 0x24, 0xcb, 0xac, 0xa9, 0xff, - 0x77, 0x70, 0xe0, 0xe5, 0x48, 0x33, 0x4e, 0x67, 0xbc, 0xb0, 0x4c, 0x72, - 0x0d, 0x3d, 0x29, 0x93, 0x9e, 0x9a, 0x36, 0x23, 0xd2, 0xd4, 0xbd, 0xa8, - 0x53, 0x2a, 0x73, 0xac, 0xcf, 0x03, 0x77, 0x85, 0xbd, 0x40, 0xec, 0xe7, - 0x7d, 0x68, 0x68, 0xba, 0x7c, 0xc8, 0x4b, 0x85, 0x55, 0x33, 0xb6, 0xc2, - 0x9c, 0xdd, 0xa2, 0xd7, 0x17, 0xe7, 0xde, 0x49, 0x16, 0xb8, 0xa3, 0x63, - 0x0e, 0xf4, 0x7b, 0x31, 0xfc, 0x5b, 0x0d, 0x2b, 0xe4, 0x39, 0xac, 0xec, - 0x9a, 0xaf, 0x95, 0xf0, 0x67, 0x89, 0x71, 0xad, 0xcd, 0xac, 0x47, 0xf6, - 0x3b, 0x85, 0x29, 0xab, 0x46, 0xbf, 0xac, 0x5e, 0xc4, 0x56, 0xf7, 0x73, - 0xd5, 0xf8, 0x8d, 0xd4, 0x4d, 0x6c, 0x36, 0xca, 0xc8, 0x2a, 0xb3, 0x81, - 0xc3, 0x30, 0xfd, 0xfe, 0xbf, 0x03, 0x87, 0x89, 0x1a, 0xd2, 0x00, 0xb2, - 0xe0, 0xc9, 0xfc, 0x45, 0xc0, 0x35, 0xd8, 0x4d, 0xba, 0x94, 0x76, 0x81, - 0x28, 0x6c, 0x75, 0x92, 0x52, 0x36, 0x8d, 0x0b, 0x8a, 0x3c, 0x90, 0xc2, - 0x21, 0x82, 0x15, 0xdb, 0x1b, 0xa5, 0xad, 0x01, 0x6e, 0x3c, 0x90, 0x63, - 0xe8, 0xd8, 0xd6, 0xf1, 0xc7, 0x41, 0xe2, 0x4c, 0xa6, 0x7c, 0xdc, 0xd0, - 0x67, 0xf4, 0x0e, 0x9f, 0xc8, 0xbb, 0x04, 0x62, 0xb5, 0x6d, 0xdb, 0xb8, - 0xac, 0x5f, 0x23, 0x6f, 0xea, 0xbc, 0x34, 0xa8, 0xf1, 0x05, 0x22, 0x89, - 0xa7, 0x27, 0x95, 0xb6, 0x82, 0xb4, 0xf9, 0x78, 0x83, 0xfd, 0xf2, 0x76, - 0xb5, 0xbd, 0xb1, 0xcc, 0x6d, 0x9b, 0x9b, 0x60, 0x1b, 0x68, 0x6a, 0x57, - 0x58, 0xb6, 0xdd, 0xcb, 0x68, 0xac, 0x44, 0xbf, 0x38, 0x5b, 0xdc, 0x6f, - 0xea, 0x4d, 0x76, 0x5c, 0x0b, 0x7a, 0xe1, 0x8a, 0x5a, 0x6b, 0x09, 0x8c, - 0xf1, 0x76, 0x44, 0x37, 0xd7, 0x9c, 0xfa, 0x27, 0x86, 0x89, 0xd4, 0xa3, - 0x46, 0xec, 0xeb, 0x13, 0xfe, 0x64, 0x18, 0x81, 0xa7, 0xb1, 0x21, 0x0d, - 0x48, 0xdb, 0xf1, 0x3e, 0x60, 0x3f, 0x7b, 0xdf, 0xa0, 0xdb, 0x93, 0xde, - 0xcb, 0x47, 0xf1, 0x7b, 0x17, 0x93, 0x5d, 0xf3, 0x99, 0xbd, 0x78, 0xd8, - 0x0a, 0xa7, 0x75, 0x3e, 0xb1, 0x39, 0xda, 0x82, 0x1a, 0x20, 0x0c, 0x1c, - 0xba, 0x0a, 0xf9, 0xc2, 0x91, 0x60, 0xa9, 0x35, 0x05, 0x8e, 0x49, 0x4d, - 0xe7, 0x31, 0x79, 0x44, 0x0f, 0x0d, 0x0a, 0x8e, 0x29, 0x39, 0x45, 0xe9, - 0x3f, 0x16, 0x0e, 0x3e, 0xb5, 0xb7, 0x00, 0x69, 0x99, 0xec, 0x12, 0x8e, - 0x0d, 0x6f, 0x94, 0x11, 0xec, 0x52, 0x25, 0x78, 0x81, 0x50, 0x4f, 0x60, - 0x40, 0x0a, 0x0c, 0xde, 0xa2, 0x73, 0x70, 0x06, 0x55, 0xe9, 0x3d, 0xf8, - 0xd8, 0xcc, 0x6b, 0xf8, 0xe0, 0x3f, 0x7a, 0xe6, 0x7e, 0xe8, 0xf6, 0x87, - 0xf7, 0x84, 0x48, 0xb7, 0xc1, 0xf5, 0xcb, 0xa6, 0x61, 0xed, 0x27, 0x4d, - 0x0f, 0xf6, 0xcc, 0x9f, 0xc4, 0xce, 0xe1, 0x93, 0xef, 0x52, 0x35, 0x9c, - 0x40, 0x11, 0xff, 0xd6, 0x21, 0x34, 0xde, 0xa4, 0x80, 0xe2, 0xc3, 0xc1, - 0x6f, 0x37, 0xf1, 0xe6, 0xda, 0xd8, 0xb7, 0x7a, 0xdf, 0x6f, 0x1f, 0x7a, - 0x7c, 0xbf, 0x17, 0x5c, 0x6f, 0x00, 0xd8, 0x7c, 0x72, 0x65, 0xc8, 0xdd, - 0x7b, 0x7f, 0x6b, 0xee, 0xfc, 0x2d, 0x13, 0xdb, 0xf8, 0x52, 0xc7, 0x6c, - 0x28, 0xa6, 0x99, 0x84, 0xab, 0x23, 0x7a, 0xb3, 0x7b, 0x1d, 0x81, 0x67, - 0xa7, 0x8a, 0xd7, 0x79, 0x57, 0x2c, 0x4f, 0x1d, 0x58, 0x07, 0xd0, 0x10, - 0xe5, 0xe4, 0x9b, 0xb6, 0xa0, 0x59, 0x74, 0xf6, 0xd1, 0xd1, 0x39, 0xb3, - 0xd2, 0x9e, 0x9e, 0xd9, 0x67, 0x49, 0x41, 0xd9, 0x9c, 0x9e, 0x3e, 0xa9, - 0x3f, 0x37, 0xef, 0x09, 0xce, 0x6f, 0xf5, 0x6e, 0xe7, 0xb7, 0x46, 0x29, - 0xbf, 0xac, 0x6a, 0xbf, 0xd2, 0xfc, 0xd5, 0x46, 0xb6, 0x40, 0x6b, 0x0a, - 0x7f, 0x69, 0x90, 0x09, 0x6e, 0xea, 0x8b, 0x39, 0x60, 0x60, 0xe1, 0x28, - 0x06, 0x12, 0x10, 0x94, 0xef, 0x6a, 0xf1, 0x7e, 0xa3, 0xec, 0xfc, 0x2a, - 0xdd, 0x7e, 0xe9, 0xc3, 0xed, 0xbf, 0xd7, 0xdd, 0xec, 0x9b, 0x27, 0x8f, - 0xb7, 0x0d, 0x37, 0x1f, 0xff, 0x57, 0xcc, 0x08, 0x3b, 0x43, 0x53, 0x78, - 0x53, 0x04, 0x40, 0x75, 0x0d, 0x40, 0x7d, 0x30, 0xd1, 0x0f, 0xa9, 0x19, - 0x81, 0x3c, 0x47, 0x42, 0x4d, 0x40, 0x0c, 0x71, 0x1d, 0x80, 0x08, 0x5e, - 0x1b, 0xd1, 0x60, 0x1b, 0x80, 0x55, 0x0e, 0x80, 0x8f, 0x1c, 0x02, 0x51, - 0xc8, 0x24, 0xc0, 0x0b, 0x87, 0xe4, 0x03, 0x8c, 0x4d, 0x8f, 0xe1, 0x1d, - 0xf5, 0x3a, 0x1d, 0xe8, 0x14, 0xa1, 0xd1, 0xdb, 0x80, 0x42, 0x51, 0xcb, - 0xc0, 0x70, 0xab, 0x51, 0x68, 0x19, 0x2b, 0x90, 0x83, 0x2a, 0xae, 0x04, - 0x31, 0xc7, 0x33, 0x86, 0x0d, 0x1b, 0xe9, 0x16, 0x3e, 0x0b, 0xaa, 0xc3, - 0x06, 0x9b, 0xfc, 0x01, 0x53, 0x30, 0x7c, 0x7c, 0x1f, 0x40, 0x97, 0x01, - 0x88, 0x54, 0x9c, 0x88, 0xe4, 0x16, 0x2f, 0x8d, 0x08, 0xa0, 0x8b, 0x07, - 0x18, 0x87, 0xfb, 0xcb, 0x91, 0xa7, 0x07, 0x8e, 0xae, 0x39, 0xf5, 0x30, - 0x6b, 0x06, 0x8d, 0x71, 0x47, 0x58, 0xe3, 0xf8, 0x1c, 0xd4, 0x66, 0x3b, - 0x5f, 0x42, 0xa3, 0xcc, 0xea, 0x5c, 0x8e, 0x90, 0x87, 0x73, 0x7b, 0x15, - 0xbd, 0xb1, 0x47, 0x26, 0xe2, 0x15, 0xc3, 0x70, 0x40, 0x3e, 0x4d, 0x2a, - 0xc8, 0x17, 0xac, 0x1c, 0x79, 0x9a, 0xf2, 0xa5, 0x6c, 0x81, 0x48, 0x29, - 0x5f, 0x49, 0x22, 0x2a, 0x90, 0x90, 0xe1, 0xb0, 0x4f, 0xc0, 0x6f, 0x3d, - 0x50, 0x20, 0x28, 0x07, 0xf8, 0xa0, 0x35, 0x41, 0x2e, 0x15, 0xbc, 0x2b, - 0x08, 0xd3, 0x7c, 0x21, 0x9a, 0x41, 0x63, 0xdc, 0x26, 0x1a, 0x9d, 0xf4, - 0x75, 0x52, 0x79, 0x32, 0x52, 0x5b, 0x5e, 0x72, 0x29, 0x30, 0xe3, 0xbc, - 0xca, 0x70, 0x71, 0xe2, 0xae, 0xc5, 0xd8, 0x06, 0xd2, 0x4a, 0x15, 0xa2, - 0xa2, 0x72, 0x5a, 0x76, 0xa9, 0x51, 0xba, 0xcb, 0x8e, 0x5b, 0xa1, 0x8e, - 0xb4, 0x84, 0x54, 0xa1, 0x3b, 0x60, 0x4c, 0x8e, 0xa7, 0x87, 0xc5, 0xe3, - 0x1a, 0x66, 0x45, 0xe1, 0x63, 0x1d, 0x1f, 0x12, 0x87, 0xef, 0x8a, 0x83, - 0x11, 0xde, 0x01, 0x77, 0xb8, 0x7b, 0x1d, 0x23, 0xf6, 0xe4, 0x2d, 0x7b, - 0x6a, 0xd6, 0xab, 0x9b, 0x51, 0xda, 0xcb, 0xde, 0x17, 0x72, 0xeb, 0xc9, - 0x9d, 0xf0, 0x90, 0xb2, 0xa0, 0xe6, 0x68, 0x84, 0x71, 0xee, 0x55, 0x5c, - 0x9d, 0x9b, 0x81, 0xdb, 0x5f, 0x05, 0x3b, 0x1f, 0x80, 0x1a, 0x1d, 0x0a, - 0x15, 0xe6, 0x2b, 0xd3, 0xa1, 0x8b, 0x87, 0x67, 0xaa, 0xe2, 0xb0, 0xbf, - 0x7c, 0x45, 0x95, 0x30, 0x29, 0x57, 0x77, 0xb6, 0x3b, 0xa2, 0x0f, 0x15, - 0xdd, 0x5d, 0x52, 0x7b, 0xc7, 0xc0, 0x2f, 0xf7, 0x06, 0xb8, 0x2e, 0xab, - 0x06, 0x5b, 0x6d, 0xf4, 0xda, 0xe1, 0xc9, 0xb8, 0x44, 0xc1, 0xe6, 0x49, - 0x6d, 0xa7, 0xa9, 0x19, 0xa5, 0x70, 0x71, 0xa0, 0x98, 0x53, 0x8e, 0xc3, - 0xa1, 0x76, 0xe5, 0xa3, 0x60, 0x7d, 0xc6, 0x90, 0xe4, 0x28, 0xa6, 0xbe, - 0x80, 0x46, 0xb6, 0x88, 0x88, 0x6b, 0xc6, 0xce, 0xef, 0xd1, 0xeb, 0xe3, - 0xcd, 0xa2, 0xc4, 0x9c, 0x12, 0x18, 0x18, 0xb0, 0x1b, 0x44, 0x88, 0x50, - 0xf0, 0x39, 0x70, 0xec, 0x45, 0x01, 0x72, 0xab, 0x69, 0xc4, 0x53, 0xd6, - 0xf3, 0xcd, 0xc1, 0x82, 0xc5, 0x48, 0x7e, 0xbf, 0xbf, 0x34, 0x4e, 0x1a, - 0xad, 0xc7, 0x9b, 0xa2, 0xe5, 0xf0, 0xcd, 0x20, 0x48, 0xaa, 0x66, 0xad, - 0xbc, 0x87, 0x4c, 0x30, 0xc0, 0x6c, 0xa3, 0xf6, 0x93, 0x4b, 0x2d, 0x60, - 0x78, 0xbc, 0x31, 0xd0, 0xfa, 0xea, 0xe0, 0x29, 0x3c, 0x79, 0x1d, 0xac, - 0xaf, 0x7f, 0x10, 0x6e, 0x5a, 0xd5, 0x1a, 0x79, 0xa2, 0xd7, 0xc8, 0xb8, - 0x60, 0xa8, 0xc1, 0x91, 0xc5, 0xa8, 0xf6, 0x59, 0xad, 0xa8, 0xa9, 0xaf, - 0xfc, 0x0c, 0xa0, 0xb5, 0x8d, 0x91, 0x47, 0xdb, 0x44, 0xd0, 0x9f, 0x8d, - 0x0f, 0x1f, 0x95, 0x13, 0x30, 0xef, 0x1e, 0x3e, 0xea, 0x66, 0x7f, 0x36, - 0xba, 0x8b, 0xe3, 0xa3, 0x55, 0xd8, 0xb1, 0x6f, 0x9d, 0xd1, 0x59, 0x99, - 0xa2, 0x49, 0x9d, 0xde, 0xf8, 0x04, 0x51, 0x69, 0xb7, 0x54, 0xf1, 0x56, - 0xd4, 0x90, 0x36, 0x34, 0x80, 0xb2, 0x9c, 0x9f, 0x76, 0x56, 0x77, 0xda, - 0xd0, 0x72, 0xff, 0xf8, 0x55, 0x6b, 0xcc, 0x93, 0xd3, 0x9a, 0x11, 0xe2, - 0x68, 0x3d, 0x38, 0x84, 0x48, 0x98, 0xe7, 0x31, 0xb3, 0x28, 0x24, 0x0e, - 0x39, 0x23, 0x63, 0xeb, 0x43, 0x93, 0x82, 0x48, 0xcd, 0x04, 0x81, 0xa7, - 0x20, 0xb5, 0x87, 0x1d, 0x13, 0xbf, 0x17, 0x95, 0xeb, 0x54, 0x42, 0x53, - 0xab, 0x2c, 0x06, 0xbc, 0x74, 0xca, 0xc7, 0xe4, 0x7d, 0x47, 0xda, 0xd3, - 0x1b, 0x81, 0x79, 0x47, 0x7e, 0xbf, 0x3d, 0x6f, 0xdf, 0x35, 0x0f, 0xdf, - 0x2d, 0x0f, 0xdf, 0x2d, 0xdf, 0xde, 0x2d, 0xdf, 0xde, 0x2d, 0xdf, 0x70, - 0x66, 0xc8, 0x82, 0x8a, 0x31, 0x13, 0x0e, 0x1a, 0x63, 0x7d, 0x1a, 0x74, - 0xd9, 0x5f, 0x2c, 0x18, 0x53, 0x52, 0xdf, 0x8a, 0x27, 0xcd, 0xc5, 0xdf, - 0x5f, 0xe5, 0xc4, 0x1e, 0x36, 0xb1, 0x77, 0x81, 0x58, 0x2a, 0x0e, 0x1f, - 0x27, 0x4d, 0xb1, 0x48, 0x57, 0x79, 0x37, 0xa5, 0x2c, 0x95, 0xbb, 0x53, - 0x7a, 0xb4, 0x4b, 0x3c, 0xb6, 0xb1, 0x1c, 0x3f, 0x3c, 0x08, 0x11, 0x89, - 0x29, 0x75, 0x4e, 0xb6, 0x5d, 0x90, 0xca, 0x9c, 0x15, 0xf3, 0x02, 0x07, - 0x19, 0xdf, 0x12, 0x71, 0x58, 0xdc, 0x48, 0xc4, 0x7a, 0xaa, 0xfb, 0x20, - 0x01, 0xdd, 0x80, 0xb6, 0x88, 0x80, 0x24, 0x13, 0x53, 0x10, 0x42, 0x09, - 0xc3, 0x84, 0xae, 0x9f, 0x57, 0x98, 0x96, 0x0e, 0x6f, 0x1e, 0x5a, 0x0a, - 0x9c, 0x25, 0xfa, 0xcd, 0x83, 0x0c, 0xac, 0xac, 0xdc, 0x78, 0x4f, 0xa5, - 0xc8, 0x03, 0x4f, 0x37, 0x0c, 0x6e, 0xa6, 0xe9, 0x26, 0x21, 0x11, 0x84, - 0xd9, 0xb5, 0x8a, 0x06, 0x39, 0xd3, 0x74, 0x57, 0x90, 0xfc, 0x42, 0x0d, - 0xd0, 0x78, 0xcb, 0x8a, 0xa7, 0x90, 0xc2, 0x40, 0x7c, 0x81, 0x6e, 0xc4, - 0xed, 0x28, 0x0d, 0x26, 0x2d, 0x4e, 0x19, 0x40, 0xe2, 0xce, 0xaa, 0x9d, - 0xd3, 0xa4, 0xe1, 0x2a, 0xc1, 0xc1, 0x6e, 0x40, 0xe2, 0xf5, 0x48, 0x6b, - 0x43, 0x3a, 0x4d, 0xef, 0x30, 0xcf, 0x5c, 0x64, 0x0c, 0x66, 0x0e, 0x0c, - 0xf0, 0x06, 0x9e, 0x82, 0x4b, 0x90, 0xb4, 0xe9, 0xe6, 0x5c, 0xdd, 0x89, - 0xea, 0x78, 0x06, 0x66, 0xf6, 0x71, 0x83, 0x80, 0x97, 0x71, 0x1b, 0xdc, - 0x71, 0xce, 0x01, 0xe0, 0x29, 0x9a, 0x3d, 0x03, 0xd5, 0x54, 0x4c, 0x6b, - 0xab, 0xf3, 0x93, 0x66, 0xc7, 0xa8, 0xc6, 0xad, 0xee, 0x4f, 0xeb, 0xac, - 0x3a, 0x6d, 0x40, 0xe3, 0x16, 0x2c, 0xb8, 0x6f, 0x6f, 0x92, 0xa8, 0xc8, - 0xd3, 0x67, 0x94, 0x0a, 0x27, 0xe1, 0x4b, 0xdb, 0xbe, 0xbe, 0xee, 0x5e, - 0xff, 0xcf, 0xe6, 0x35, 0x36, 0xa8, 0x63, 0x97, 0xb4, 0xdb, 0xb8, 0xae, - 0xdb, 0xd4, 0xb1, 0x31, 0xdd, 0xf6, 0xa5, 0xeb, 0xb6, 0x74, 0xbf, 0x2b, - 0xdd, 0x6d, 0x4a, 0x77, 0x7b, 0xd2, 0xdd, 0x96, 0x74, 0xb7, 0x07, 0x7d, - 0xdd, 0x82, 0xbe, 0xec, 0x40, 0x77, 0x1b, 0xd0, 0x75, 0xcb, 0xb9, 0xdf, - 0x71, 0x16, 0x8e, 0x5d, 0x55, 0xe7, 0x70, 0xd2, 0x86, 0x7b, 0xb5, 0x6d, - 0x3b, 0xba, 0xdf, 0x8d, 0xee, 0xf6, 0x9f, 0xdb, 0xf6, 0xf3, 0xa8, 0xa4, - 0x19, 0xa7, 0x93, 0x8f, 0xaa, 0x01, 0x96, 0xc1, 0xd7, 0x0b, 0x71, 0xd9, - 0xe4, 0xce, 0xb3, 0x71, 0x84, 0x7c, 0x18, 0x81, 0x68, 0xc9, 0xeb, 0xe6, - 0xf8, 0x8e, 0xd9, 0xdf, 0xc4, 0x29, 0x14, 0x38, 0x2c, 0x52, 0x28, 0x97, - 0x66, 0x2c, 0x56, 0x2f, 0x61, 0x8a, 0x82, 0x2c, 0x03, 0xa9, 0x96, 0x40, - 0xa6, 0xd0, 0x8c, 0x97, 0xc6, 0x93, 0x0d, 0x29, 0x3d, 0xc3, 0x52, 0x17, - 0x8e, 0x14, 0x3b, 0xd1, 0x06, 0x5f, 0xe7, 0xa3, 0x84, 0xb3, 0x6f, 0xeb, - 0x45, 0xdd, 0x04, 0x0e, 0xee, 0xdd, 0xb2, 0xf6, 0x6a, 0x1a, 0x7b, 0x8a, - 0x89, 0x93, 0x48, 0x8d, 0x71, 0x07, 0xfc, 0x48, 0xd2, 0x4b, 0x1b, 0xef, - 0xa6, 0x42, 0xb4, 0x04, 0xe8, 0x8a, 0xb5, 0xc9, 0x30, 0x85, 0x8b, 0xa8, - 0x9e, 0x84, 0xc9, 0x8a, 0x61, 0xc4, 0x7d, 0xcd, 0x0f, 0xff, 0xbe, 0x43, - 0x62, 0x2e, 0xa1, 0xb5, 0x34, 0x35, 0xb9, 0x93, 0x8b, 0xe8, 0xad, 0x90, - 0x5b, 0xda, 0x94, 0xc9, 0x9c, 0x38, 0x7a, 0x47, 0xe5, 0x2c, 0xeb, 0xb8, - 0xc8, 0x48, 0xb4, 0x3b, 0x42, 0x11, 0x5c, 0x60, 0x05, 0xf0, 0xf7, 0x7c, - 0x6a, 0xb2, 0x30, 0x7b, 0x4b, 0x3c, 0xfb, 0x0c, 0x44, 0x3b, 0x37, 0xed, - 0xd0, 0x40, 0x9c, 0x19, 0x68, 0x19, 0xff, 0xf7, 0xb4, 0x40, 0x3d, 0x20, - 0x70, 0x3d, 0x1f, 0xe0, 0x5c, 0xad, 0x16, 0x38, 0x2c, 0x10, 0xb4, 0x56, - 0x07, 0x31, 0xbf, 0x61, 0xa2, 0x1e, 0x20, 0xf8, 0x73, 0x7e, 0x00, 0xec, - 0xb1, 0xdd, 0x95, 0xac, 0xf9, 0xe9, 0x63, 0x9c, 0x76, 0xa6, 0xe0, 0xcf, - 0x91, 0x02, 0xb0, 0xea, 0x0b, 0xea, 0xd1, 0x02, 0x47, 0x72, 0xda, 0x77, - 0xe4, 0xba, 0x83, 0x05, 0xfd, 0xb9, 0x02, 0x62, 0x1e, 0xed, 0x7a, 0x75, - 0x87, 0x0a, 0xba, 0x33, 0x05, 0xdd, 0x91, 0x82, 0xff, 0x39, 0x51, 0x80, - 0x73, 0x03, 0x89, 0x32, 0x30, 0x1b, 0xae, 0x09, 0x17, 0xa7, 0x0b, 0xea, - 0xe1, 0x82, 0x71, 0xf6, 0xde, 0x62, 0x3c, 0xf6, 0x88, 0x77, 0xeb, 0x3e, - 0xda, 0xc1, 0x83, 0x76, 0xee, 0x00, 0xa8, 0x40, 0x14, 0x05, 0xe0, 0x4a, - 0x45, 0x53, 0x76, 0xc8, 0xb2, 0x4f, 0xbb, 0x4a, 0x82, 0x10, 0x13, 0x15, - 0x56, 0x96, 0x1b, 0x37, 0x18, 0x8d, 0xb2, 0xc9, 0x58, 0xee, 0x2f, 0xb5, - 0xa3, 0x02, 0xde, 0x8e, 0x2e, 0x77, 0xc8, 0xd7, 0xc0, 0x60, 0x79, 0x94, - 0xcc, 0x32, 0x87, 0x36, 0x92, 0x2a, 0x8d, 0xdb, 0x4e, 0x9c, 0x04, 0x66, - 0xe2, 0x2d, 0x96, 0x75, 0x8f, 0x13, 0x61, 0x5e, 0x78, 0x4e, 0x0c, 0x80, - 0xa9, 0xb3, 0x68, 0x9d, 0x24, 0x6e, 0xd3, 0x61, 0x08, 0x3d, 0x50, 0x55, - 0x9f, 0xb2, 0xf0, 0x58, 0xc9, 0x48, 0x99, 0x24, 0x2a, 0x97, 0x0e, 0x19, - 0x36, 0x1a, 0xb1, 0x4e, 0x2f, 0xda, 0xa8, 0x95, 0x93, 0x70, 0xbc, 0x04, - 0xb0, 0x04, 0xad, 0x0b, 0xa7, 0xc6, 0x5a, 0x2a, 0x22, 0x35, 0x98, 0x57, - 0xc6, 0xd5, 0x5c, 0x58, 0x79, 0x7f, 0x3e, 0xc0, 0xe5, 0x89, 0x13, 0xe9, - 0x6d, 0x9d, 0x1b, 0x94, 0x4b, 0x27, 0xd4, 0x3b, 0x5d, 0x3b, 0x7a, 0xe0, - 0x48, 0xfe, 0x55, 0xdd, 0xeb, 0x8a, 0x69, 0xda, 0xc4, 0x81, 0x07, 0xa1, - 0xa6, 0x92, 0x06, 0x9d, 0x28, 0x01, 0x0d, 0xd4, 0xe4, 0x03, 0xae, 0x8d, - 0x8d, 0x31, 0x51, 0x2f, 0xd6, 0x5d, 0x99, 0x03, 0x9a, 0x03, 0x15, 0xe6, - 0xa3, 0x80, 0x12, 0x46, 0xf8, 0x14, 0x8a, 0x2a, 0x4f, 0x68, 0xa3, 0xf8, - 0xcd, 0x71, 0xcb, 0x1c, 0xc8, 0xdb, 0x72, 0xca, 0x2c, 0x28, 0x9a, 0xc0, - 0x82, 0xc8, 0x3d, 0x20, 0xa6, 0x75, 0xb9, 0x51, 0x51, 0xc1, 0xc6, 0x21, - 0x0c, 0xff, 0x7e, 0xd3, 0xab, 0xe6, 0x40, 0x92, 0x91, 0x4d, 0xf4, 0xd1, - 0x48, 0x42, 0x48, 0xa3, 0x31, 0x6c, 0xa1, 0xb8, 0x1d, 0x7a, 0xa1, 0x91, - 0x49, 0x79, 0xb0, 0x27, 0x2b, 0xbe, 0x84, 0x51, 0x62, 0xce, 0x5f, 0x6c, - 0x24, 0xbe, 0x89, 0x76, 0xa7, 0xee, 0x9c, 0xd5, 0xca, 0xa6, 0x33, 0xf1, - 0x14, 0x65, 0xe3, 0xbd, 0x2b, 0x26, 0xeb, 0x3e, 0x8e, 0x8f, 0xb0, 0x2f, - 0x83, 0xfa, 0xee, 0xa7, 0x64, 0x05, 0xe7, 0xa1, 0xc2, 0x6e, 0x30, 0xd8, - 0xd8, 0x33, 0xb8, 0xda, 0x45, 0x06, 0xe7, 0x5f, 0x44, 0x76, 0xc5, 0x67, - 0x6c, 0x72, 0x19, 0x30, 0xe3, 0xcb, 0x34, 0x7f, 0x89, 0x49, 0xf2, 0xf1, - 0x48, 0x49, 0xbe, 0xfb, 0x05, 0xc4, 0x92, 0x82, 0xdd, 0x8c, 0x91, 0xf3, - 0xd9, 0xc2, 0x6e, 0xd7, 0x54, 0x9b, 0xb0, 0xe5, 0x87, 0xc7, 0x32, 0x38, - 0x96, 0x90, 0xc6, 0xc5, 0x57, 0xab, 0x66, 0xd1, 0x48, 0x18, 0x23, 0xc2, - 0xfa, 0x0c, 0xe2, 0x5e, 0xa2, 0x85, 0x3f, 0x1d, 0x78, 0xbd, 0xe6, 0x82, - 0x40, 0x51, 0x83, 0x69, 0x24, 0x1e, 0x9f, 0x13, 0x83, 0x16, 0xcd, 0x53, - 0xc0, 0x38, 0xaf, 0x1e, 0x65, 0xd1, 0x32, 0xa5, 0xd5, 0x18, 0x2a, 0x7d, - 0x84, 0x73, 0x8c, 0xc1, 0x81, 0x9a, 0xe6, 0xe2, 0x64, 0x14, 0x55, 0x88, - 0xb3, 0x74, 0x55, 0xa5, 0xf1, 0x66, 0xfa, 0x28, 0x47, 0xbf, 0x25, 0x15, - 0x45, 0xa3, 0xb3, 0xc2, 0x30, 0xae, 0xdc, 0xfd, 0x64, 0x10, 0x57, 0x45, - 0x6d, 0x1d, 0xbb, 0x31, 0x4b, 0x70, 0x74, 0xc8, 0xda, 0x1a, 0xf9, 0xe7, - 0x2b, 0x2a, 0xa4, 0x3a, 0xad, 0x40, 0xd9, 0xea, 0x5e, 0x86, 0x70, 0x28, - 0x01, 0x12, 0xd2, 0x75, 0x58, 0x93, 0x48, 0x15, 0x6e, 0xab, 0xa7, 0x34, - 0x05, 0x99, 0x35, 0x38, 0xe8, 0x4c, 0xc9, 0x1d, 0x15, 0xb2, 0xec, 0x13, - 0x2f, 0xac, 0x5f, 0xdb, 0x96, 0x58, 0x80, 0x37, 0xef, 0xc8, 0x37, 0x17, - 0x1b, 0xfd, 0xd2, 0x92, 0xd9, 0x3e, 0xf0, 0xa0, 0x2a, 0xa9, 0xe2, 0x2f, - 0xa4, 0x6f, 0xc9, 0xbf, 0xa5, 0xd0, 0xb1, 0x64, 0x18, 0xd8, 0xa9, 0xb2, - 0x54, 0x91, 0x3d, 0xd4, 0xc0, 0x00, 0xdf, 0xc7, 0xe2, 0xb2, 0x40, 0x9c, - 0x57, 0x07, 0xdc, 0xbe, 0x3b, 0x2f, 0x7f, 0x42, 0x23, 0x6f, 0x1a, 0x8e, - 0x52, 0xc3, 0xc7, 0x45, 0x3b, 0x65, 0xd5, 0xff, 0x84, 0x43, 0x3a, 0x78, - 0x2c, 0xec, 0x4f, 0xec, 0x55, 0x26, 0xcc, 0x60, 0xdc, 0xd8, 0xbc, 0x06, - 0xd7, 0xe6, 0x9d, 0xa1, 0xa3, 0x5e, 0xcc, 0xb9, 0x6a, 0x34, 0x37, 0xa8, - 0x73, 0x07, 0x81, 0x55, 0xc4, 0xc0, 0xf0, 0x75, 0x21, 0x96, 0xc5, 0xfa, - 0x08, 0x95, 0xc3, 0xb3, 0xb9, 0xd9, 0x8d, 0xb0, 0x2a, 0x1b, 0xe6, 0x96, - 0x5c, 0x03, 0xba, 0x9c, 0x61, 0x02, 0x8b, 0x16, 0x67, 0xc3, 0xa5, 0x7a, - 0xb0, 0x42, 0x6a, 0x7b, 0xfb, 0x72, 0xd6, 0xf8, 0xd6, 0x5a, 0xa0, 0x87, - 0xbb, 0x5c, 0x20, 0x86, 0xb3, 0x5e, 0xcb, 0xd8, 0x65, 0xdc, 0xc7, 0x07, - 0x9b, 0xdb, 0xf6, 0xb9, 0x85, 0xb3, 0x8e, 0xc8, 0xc4, 0xe4, 0x52, 0x8d, - 0x60, 0x2f, 0x65, 0x58, 0x2a, 0x77, 0xd6, 0x30, 0xc4, 0x34, 0x91, 0x78, - 0x9c, 0x5a, 0x24, 0x77, 0x1e, 0x6f, 0x6a, 0xac, 0x0f, 0x94, 0x89, 0x8b, - 0x5a, 0x7b, 0xe1, 0xbc, 0x06, 0xc6, 0x10, 0xae, 0x05, 0x46, 0x5c, 0x0d, - 0x65, 0x1d, 0xdf, 0x71, 0x9a, 0xa5, 0x1d, 0x32, 0x12, 0x75, 0x40, 0xdc, - 0xba, 0x19, 0x0f, 0x2c, 0xe2, 0xa9, 0x10, 0x7f, 0x38, 0x7f, 0xe7, 0x46, - 0xde, 0xf8, 0xa3, 0xbe, 0x4d, 0x8d, 0xbe, 0x33, 0x2c, 0x51, 0x19, 0xec, - 0xd2, 0xeb, 0x8e, 0x7e, 0x78, 0xa9, 0x6a, 0xac, 0xaf, 0xb1, 0xf2, 0xea, - 0x14, 0x7f, 0x06, 0x57, 0x6d, 0xf8, 0xe0, 0x9f, 0x30, 0x17, 0x60, 0x05, - 0xfc, 0x19, 0xbe, 0xa6, 0xa3, 0xf9, 0xf4, 0x74, 0x4d, 0x1f, 0xbc, 0xfd, - 0xb4, 0xde, 0x13, 0xb0, 0x59, 0x6a, 0x1d, 0xa9, 0x70, 0xb6, 0x09, 0xf1, - 0x6f, 0xf8, 0x4b, 0x8d, 0xfd, 0x75, 0xda, 0x80, 0xaf, 0xf1, 0x3f, 0xe7, - 0xdf, 0xf0, 0xcf, 0x51, 0x4f, 0x09, 0xdd, 0xe1, 0xe8, 0x94, 0x89, 0x5e, - 0xbe, 0x5b, 0xeb, 0xdc, 0x39, 0x8d, 0xd5, 0xaa, 0x73, 0xfb, 0xb8, 0x4b, - 0xd0, 0x8f, 0xb4, 0x03, 0x2c, 0x56, 0xe0, 0xf7, 0x9a, 0x0e, 0x41, 0xd2, - 0x5e, 0xc3, 0xbc, 0x72, 0x5e, 0x60, 0x34, 0x3f, 0x82, 0x9e, 0x04, 0xde, - 0xc5, 0xff, 0xd4, 0x1e, 0xde, 0x91, 0x07, 0xcf, 0xcf, 0x0f, 0x3a, 0x62, - 0xb3, 0xf4, 0xd3, 0xf7, 0xfa, 0x3f, 0x0a, 0x7c, 0xbe, 0xe1, 0xd8, 0x83, - 0xa6, 0x57, 0x3f, 0x1a, 0x07, 0xfc, 0xa8, 0x7d, 0xfc, 0xc9, 0x5b, 0x0d, - 0x26, 0xe5, 0xc6, 0x92, 0x92, 0x3d, 0x27, 0xa9, 0xd6, 0xe1, 0xe5, 0x82, - 0xc3, 0x6f, 0xe0, 0xcf, 0x07, 0x96, 0xa8, 0xbf, 0xfe, 0x7b, 0x59, 0x43, - 0xfb, 0xb4, 0x0a, 0x8d, 0x0d, 0x99, 0x34, 0xf0, 0xa4, 0x5e, 0xba, 0xe1, - 0x72, 0x25, 0x68, 0xbb, 0x5d, 0xe8, 0x8c, 0x5a, 0x57, 0xc7, 0x68, 0x5e, - 0xd3, 0xcd, 0xa6, 0x32, 0xb4, 0x74, 0x87, 0xf4, 0xc2, 0x17, 0xf7, 0x9c, - 0x20, 0xdb, 0xf0, 0x24, 0x61, 0xc5, 0x31, 0xaa, 0x23, 0x06, 0x89, 0xb7, - 0x8a, 0x41, 0x6c, 0x5e, 0x88, 0x1c, 0x22, 0xca, 0x41, 0x5d, 0xeb, 0x21, - 0x69, 0x66, 0x42, 0x6a, 0x9d, 0xac, 0x14, 0x51, 0xa6, 0xfb, 0x8b, 0x17, - 0xfe, 0x0e, 0x97, 0x0c, 0x04, 0xce, 0x2b, 0x06, 0x50, 0x34, 0x65, 0xc4, - 0x3b, 0x29, 0x02, 0xa8, 0x4d, 0x9c, 0x84, 0x5b, 0x69, 0x31, 0xf7, 0x05, - 0x23, 0x30, 0x42, 0xc4, 0x39, 0x62, 0x64, 0x4d, 0xfc, 0x1d, 0xb5, 0x3e, - 0x2d, 0x3f, 0xe2, 0x38, 0xca, 0x70, 0xa0, 0x80, 0x05, 0xde, 0x2b, 0x3e, - 0x89, 0xe2, 0x60, 0x2e, 0xa0, 0x85, 0xf3, 0xee, 0xee, 0x65, 0x0a, 0x47, - 0x27, 0xa2, 0x0c, 0x55, 0xb6, 0x3c, 0x8d, 0x73, 0x67, 0xc4, 0xd5, 0xfe, - 0xf0, 0xa2, 0xe3, 0x6e, 0xaa, 0xca, 0x04, 0x9a, 0x87, 0xfd, 0xc2, 0x54, - 0x6b, 0xbe, 0xb8, 0x95, 0xda, 0xa3, 0x80, 0x81, 0x5d, 0x77, 0x86, 0x14, - 0x42, 0x22, 0x0f, 0x20, 0x04, 0x98, 0xcb, 0xd4, 0x51, 0x68, 0xc8, 0x8f, - 0x1d, 0xa7, 0xe7, 0x4b, 0xab, 0xa5, 0x00, 0x12, 0x31, 0x40, 0x98, 0x4f, - 0x51, 0xae, 0xcb, 0x3a, 0x50, 0xd2, 0x3c, 0x5f, 0x77, 0x1d, 0xf6, 0x35, - 0x24, 0xd1, 0x52, 0x40, 0x5f, 0xda, 0x1a, 0x36, 0xd4, 0x9f, 0x7d, 0x01, - 0xcb, 0x35, 0x26, 0x03, 0xff, 0xfc, 0x06, 0x83, 0x41, 0x6d, 0x3a, 0x00, - 0x40, 0xd4, 0xa0, 0x00, 0xd7, 0x4d, 0x89, 0x16, 0x69, 0x55, 0x17, 0x0a, - 0xc4, 0xb0, 0x02, 0xa8, 0x54, 0x90, 0xb2, 0x21, 0x4c, 0xd5, 0xc9, 0x7f, - 0x69, 0x79, 0xc3, 0xb0, 0xb8, 0xa9, 0x93, 0x93, 0x21, 0x8e, 0xc5, 0x66, - 0xf2, 0xd2, 0xc1, 0xd8, 0x4e, 0x93, 0x9f, 0xf7, 0x92, 0x00, 0x02, 0x90, - 0x2f, 0x2e, 0xd2, 0x51, 0x08, 0x81, 0xdb, 0xd4, 0x5c, 0xda, 0xa8, 0xf6, - 0x56, 0x08, 0x76, 0x01, 0x9e, 0xa7, 0x11, 0x5d, 0x65, 0x9f, 0x76, 0x59, - 0x7b, 0xb8, 0xa4, 0x9e, 0xe6, 0xa8, 0x40, 0xfc, 0x3f, 0x78, 0x9e, 0x86, - 0x48, 0x07, 0xbe, 0x12, 0x4e, 0xff, 0xed, 0xa4, 0x89, 0x2a, 0x36, 0xce, - 0x76, 0xff, 0xa2, 0x57, 0xf2, 0x81, 0x36, 0x4f, 0x18, 0xce, 0xc9, 0x28, - 0xe3, 0xf3, 0x95, 0x98, 0x91, 0x8b, 0x9b, 0x35, 0xe2, 0xc9, 0x89, 0x00, - 0xad, 0x1a, 0x41, 0xa5, 0xf5, 0x75, 0x40, 0x84, 0x01, 0xc2, 0xb1, 0xae, - 0x03, 0xde, 0x86, 0xd2, 0xa2, 0x08, 0x38, 0x95, 0x76, 0x0b, 0x36, 0x5f, - 0x5f, 0x9c, 0x89, 0xe3, 0xea, 0x53, 0xc5, 0x2c, 0x52, 0x2b, 0x2e, 0xcd, - 0xbf, 0x24, 0x22, 0x82, 0x34, 0x4b, 0xbd, 0x4b, 0x2c, 0x99, 0x70, 0x19, - 0x1c, 0x3d, 0xb4, 0x8e, 0x06, 0x28, 0x01, 0x1c, 0x84, 0xb5, 0x7c, 0x0a, - 0x9f, 0x42, 0xf1, 0x6e, 0x52, 0x65, 0xaa, 0x3e, 0xa7, 0xf4, 0x84, 0xd6, - 0xcb, 0xce, 0xee, 0x8b, 0x88, 0x16, 0xc0, 0x6d, 0x10, 0xf6, 0xc4, 0x8d, - 0x3a, 0x03, 0xbe, 0xb2, 0x9f, 0x94, 0xa0, 0x65, 0x83, 0x4c, 0x6a, 0x65, - 0x1d, 0xb0, 0x8a, 0x6b, 0x39, 0x38, 0x1e, 0x14, 0x1d, 0x59, 0x6c, 0xb6, - 0x15, 0x57, 0xc4, 0x59, 0xa8, 0x08, 0x69, 0x6e, 0x5b, 0x25, 0x59, 0xe8, - 0x95, 0xe8, 0x80, 0x0e, 0xe7, 0x24, 0x3f, 0x6f, 0x8e, 0x07, 0xc9, 0x66, - 0x09, 0xee, 0x0e, 0x2c, 0xa4, 0x9b, 0xe6, 0x44, 0xbe, 0x7a, 0x62, 0x30, - 0x96, 0x4e, 0x00, 0xdb, 0x7b, 0x5b, 0x64, 0x79, 0xb2, 0xd8, 0x81, 0xb7, - 0x4f, 0x5b, 0x2c, 0xdb, 0x3b, 0xd2, 0xcc, 0xa6, 0x32, 0x6e, 0xb1, 0x26, - 0xe3, 0x16, 0x43, 0x68, 0xa2, 0xb3, 0xba, 0xd1, 0xbd, 0x4b, 0x45, 0xde, - 0x83, 0xc5, 0x8b, 0x6e, 0x17, 0xdb, 0xa1, 0xe1, 0xe6, 0xf8, 0x40, 0x55, - 0xcf, 0x5b, 0xd8, 0xe7, 0x5c, 0x9d, 0xa5, 0x64, 0x3b, 0x47, 0x75, 0x02, - 0xe1, 0xac, 0x27, 0x9c, 0xe3, 0xbd, 0xe1, 0xfd, 0x0c, 0x7c, 0x8d, 0x50, - 0xe3, 0x35, 0xab, 0xe9, 0xf5, 0xc2, 0x8a, 0x53, 0x6c, 0x23, 0xce, 0x5c, - 0x14, 0x22, 0xa7, 0x92, 0x25, 0x24, 0x13, 0x78, 0xad, 0x57, 0x25, 0xd6, - 0x31, 0x03, 0xe3, 0xeb, 0x25, 0x69, 0x0f, 0x39, 0x17, 0x2f, 0x3f, 0xda, - 0x8f, 0x47, 0x33, 0x5e, 0x5a, 0x4a, 0x4f, 0xdc, 0x91, 0xb3, 0x46, 0xc0, - 0x2c, 0xe4, 0xe1, 0xbe, 0xff, 0xc2, 0x97, 0x8c, 0x05, 0x0a, 0x1d, 0x3f, - 0xc8, 0x7e, 0x1c, 0x22, 0xf3, 0xb0, 0xdd, 0x93, 0xe0, 0xab, 0x70, 0x9b, - 0xc8, 0x90, 0x2f, 0x95, 0xe7, 0x3a, 0x91, 0xcd, 0xd8, 0xf9, 0x0d, 0x18, - 0x8e, 0xfd, 0x50, 0xa1, 0x2b, 0x37, 0xfc, 0x6f, 0x82, 0xd6, 0xbf, 0x53, - 0xbe, 0xd3, 0xcb, 0x25, 0x36, 0xbf, 0xd0, 0xcc, 0xba, 0xa4, 0x5c, 0x50, - 0x71, 0xe7, 0x8b, 0x42, 0x3f, 0x09, 0x99, 0xae, 0xf9, 0xe6, 0x62, 0x9c, - 0x0d, 0xe9, 0x34, 0x29, 0xc4, 0x39, 0x43, 0x61, 0xac, 0xad, 0x90, 0xbd, - 0x20, 0x78, 0xfa, 0xc5, 0xe6, 0xca, 0x4f, 0xbc, 0x64, 0xde, 0xa1, 0x25, - 0x39, 0x49, 0x28, 0xb5, 0xe4, 0x85, 0xa1, 0x0a, 0x44, 0x38, 0xc3, 0x2d, - 0x6e, 0xcc, 0x41, 0x5d, 0x03, 0xb2, 0x59, 0xb5, 0x99, 0x86, 0x6f, 0xbc, - 0x18, 0xf2, 0xa1, 0x94, 0x21, 0xdf, 0x3a, 0xc9, 0xfc, 0x53, 0x66, 0x8f, - 0x51, 0xca, 0x66, 0x7e, 0x65, 0x1a, 0x81, 0x14, 0x41, 0x30, 0x48, 0xb1, - 0x27, 0x1d, 0x7a, 0xea, 0xf8, 0x50, 0x7e, 0xda, 0xd0, 0x47, 0x81, 0xf2, - 0xdb, 0x31, 0x10, 0x13, 0xfc, 0x72, 0x21, 0x2b, 0xa4, 0x3b, 0x89, 0xac, - 0xb7, 0xbb, 0x31, 0x19, 0x67, 0x68, 0x07, 0x1a, 0x99, 0x33, 0x5b, 0xeb, - 0xfc, 0xe4, 0xf1, 0x13, 0xc8, 0x60, 0xe1, 0x16, 0x77, 0x7e, 0x7e, 0x0f, - 0x72, 0x50, 0x47, 0x71, 0xb2, 0x4e, 0x23, 0x67, 0xdf, 0x2c, 0x03, 0x65, - 0xaf, 0x91, 0xdf, 0xb8, 0xc3, 0x92, 0xdf, 0x68, 0xee, 0xf2, 0xf4, 0x60, - 0x8f, 0x07, 0xd1, 0xcc, 0x0a, 0xdf, 0xa4, 0xfc, 0x06, 0x51, 0xc1, 0x84, - 0x18, 0x65, 0x56, 0xe1, 0xec, 0x9d, 0x86, 0x51, 0x8e, 0x33, 0x40, 0x3f, - 0x6e, 0xf8, 0xa0, 0x41, 0x24, 0xc3, 0x94, 0x38, 0xc0, 0xca, 0xd1, 0x73, - 0xf8, 0x92, 0x73, 0xd6, 0x22, 0x4c, 0x9e, 0xd4, 0x40, 0x67, 0x6e, 0xa0, - 0x40, 0xfd, 0xbe, 0x6c, 0xe7, 0x53, 0xa7, 0x83, 0x3a, 0x99, 0x69, 0xf0, - 0xc0, 0x5b, 0xbb, 0x0a, 0x20, 0xe3, 0x6e, 0xaa, 0x67, 0xf1, 0x44, 0xd7, - 0x79, 0xb9, 0x14, 0x75, 0xd9, 0x86, 0xcd, 0xe7, 0x4c, 0x3b, 0xb9, 0x4a, - 0x2c, 0x26, 0xc3, 0x76, 0x25, 0x4f, 0x35, 0x3f, 0xdb, 0xf1, 0xdf, 0x8c, - 0x51, 0xf4, 0xa3, 0x78, 0x38, 0x89, 0xa5, 0x4b, 0x09, 0x84, 0x00, 0xfd, - 0xe2, 0x79, 0x63, 0x65, 0xa8, 0x4d, 0xed, 0x82, 0x91, 0xbe, 0xb5, 0x40, - 0xfb, 0xe8, 0xa8, 0xb0, 0xb5, 0x0c, 0x98, 0x36, 0xc7, 0x67, 0x18, 0xc0, - 0x8b, 0xe8, 0xbc, 0x71, 0x94, 0x71, 0xb0, 0xe7, 0x50, 0x43, 0x03, 0xcc, - 0x6d, 0xb4, 0x3c, 0x79, 0x0e, 0x4e, 0x4c, 0xc1, 0xd3, 0x5b, 0x34, 0x43, - 0x94, 0x86, 0xff, 0xc2, 0x0e, 0x29, 0x5e, 0xff, 0x1b, 0x9d, 0xc0, 0x28, - 0x9e, 0xbd, 0x27, 0xe1, 0x05, 0x07, 0x36, 0x19, 0xa6, 0xdc, 0x38, 0x2a, - 0xc7, 0x4b, 0x80, 0x94, 0xc1, 0xe3, 0x48, 0xb9, 0xca, 0xa7, 0xee, 0x1f, - 0x02, 0x75, 0x27, 0x09, 0x4c, 0x48, 0x26, 0x17, 0x53, 0xa1, 0x1f, 0xbf, - 0x12, 0x0a, 0x27, 0xfc, 0x8a, 0x73, 0x83, 0x4a, 0x18, 0xe3, 0xd0, 0xd4, - 0xaa, 0x08, 0x38, 0x73, 0x3a, 0x9c, 0x78, 0x15, 0x9c, 0x38, 0x16, 0x93, - 0x81, 0xeb, 0x9a, 0x71, 0x30, 0x73, 0x07, 0xab, 0xab, 0xe4, 0x64, 0xc8, - 0x1c, 0xba, 0x2b, 0x96, 0x0a, 0x95, 0x4e, 0xf7, 0x64, 0x5c, 0x96, 0x8c, - 0x13, 0x1a, 0x64, 0x76, 0x19, 0xf2, 0x13, 0x39, 0x44, 0xaa, 0x3e, 0x8e, - 0xdc, 0x3a, 0x0e, 0xe0, 0x70, 0xed, 0x19, 0xb9, 0xad, 0x9a, 0x3d, 0x8f, - 0x3a, 0x56, 0xe3, 0xc0, 0x0d, 0x9e, 0xe1, 0xb6, 0xaf, 0x29, 0x1a, 0x98, - 0xf4, 0x00, 0x28, 0x61, 0xe2, 0x41, 0x06, 0x22, 0xc5, 0x3e, 0x4d, 0xe2, - 0xab, 0x35, 0x25, 0x5d, 0x5a, 0xd2, 0x43, 0x94, 0x9f, 0x75, 0x4d, 0xc4, - 0xd2, 0xf0, 0x56, 0x78, 0x13, 0xc7, 0x10, 0x96, 0x50, 0x4e, 0xa1, 0x6e, - 0xb1, 0x24, 0x58, 0x7d, 0xe9, 0x32, 0x20, 0x5f, 0x73, 0x20, 0x5f, 0xb2, - 0x20, 0x77, 0x79, 0xe0, 0x2b, 0x25, 0x79, 0xd6, 0x1d, 0x9f, 0x31, 0xa0, - 0x96, 0x4c, 0x1c, 0x7b, 0xbe, 0x64, 0xbd, 0x35, 0xaa, 0xd1, 0x5c, 0xb0, - 0x4a, 0x08, 0x5f, 0x37, 0x01, 0xc8, 0x01, 0xb4, 0x66, 0x22, 0xe4, 0xa1, - 0x4a, 0x2d, 0x33, 0x03, 0x47, 0x08, 0x53, 0x97, 0x9d, 0xa8, 0x9e, 0xcd, - 0x1b, 0xbd, 0x86, 0x59, 0x2a, 0xfe, 0x6d, 0xf8, 0x18, 0x2b, 0xc2, 0x7d, - 0xbe, 0x60, 0xdc, 0x91, 0x33, 0xc2, 0x7d, 0x49, 0x0a, 0x4f, 0x6a, 0x2d, - 0xb7, 0x88, 0x46, 0x5c, 0x0d, 0x0a, 0xac, 0x03, 0x57, 0xfa, 0x73, 0xdd, - 0x5a, 0xc9, 0x21, 0x90, 0x36, 0x90, 0x9b, 0x7b, 0x9d, 0x93, 0x23, 0x2b, - 0xc9, 0x8e, 0xea, 0xea, 0x0b, 0x96, 0xb0, 0x2e, 0xeb, 0x2d, 0xd0, 0xf0, - 0x35, 0x16, 0xc2, 0x5c, 0x5c, 0x73, 0x3f, 0xa7, 0x08, 0x9e, 0xaf, 0xae, - 0x18, 0xf2, 0xb5, 0x15, 0xa0, 0xba, 0x98, 0x92, 0xe7, 0x2e, 0x05, 0x2f, - 0xe9, 0xd7, 0xa5, 0x9e, 0x41, 0xf7, 0xcd, 0x9b, 0x90, 0xb9, 0xad, 0xad, - 0x38, 0x56, 0x46, 0x1f, 0xcb, 0x5d, 0x37, 0x8c, 0x98, 0xd2, 0x0b, 0xdb, - 0x1d, 0x5e, 0xc5, 0x56, 0x4c, 0x2d, 0xe3, 0x77, 0x2f, 0xa8, 0x80, 0x27, - 0x29, 0x9f, 0x90, 0x02, 0x10, 0x7b, 0xf2, 0xfa, 0x02, 0x81, 0x8e, 0xc1, - 0x02, 0xde, 0x79, 0x2c, 0x87, 0xa8, 0x48, 0x46, 0x16, 0x99, 0x07, 0x16, - 0x4c, 0x01, 0x6a, 0x83, 0x6f, 0x58, 0xf7, 0xf1, 0x02, 0x85, 0xd1, 0xed, - 0xf0, 0xce, 0xdb, 0xf1, 0xe4, 0x9e, 0x84, 0xef, 0xa8, 0x35, 0x98, 0xd8, - 0xe5, 0xc5, 0x8d, 0xbd, 0x19, 0x9c, 0x5c, 0xa4, 0xb6, 0x1b, 0xef, 0xe4, - 0xd8, 0xb2, 0x01, 0x68, 0x0b, 0x00, 0x50, 0xb6, 0x78, 0x47, 0x82, 0xe4, - 0x62, 0x43, 0xd7, 0x24, 0x72, 0x66, 0x7c, 0x38, 0x50, 0xc8, 0x75, 0x26, - 0x67, 0x10, 0x73, 0x01, 0x88, 0x8e, 0x77, 0x42, 0x27, 0x49, 0x95, 0x17, - 0x31, 0x7a, 0xb0, 0xa1, 0x42, 0x26, 0xf9, 0xf6, 0x93, 0x82, 0x39, 0x33, - 0xd1, 0xf2, 0x17, 0x15, 0x9d, 0x86, 0xcb, 0x7c, 0x90, 0xe1, 0x55, 0x85, - 0xc8, 0x03, 0xe1, 0x10, 0x21, 0x3f, 0xbd, 0xa9, 0x0c, 0x0c, 0xc5, 0xbb, - 0x05, 0x40, 0x03, 0x99, 0xec, 0x07, 0x72, 0x0d, 0x6c, 0x10, 0xf5, 0xae, - 0xa6, 0xc4, 0x7a, 0xf6, 0x95, 0x44, 0x27, 0xcd, 0x0c, 0xd0, 0xec, 0x94, - 0x34, 0x10, 0x11, 0xf0, 0x70, 0xb2, 0x9c, 0x71, 0x2c, 0x94, 0x95, 0x47, - 0x99, 0x0b, 0x39, 0x46, 0x3c, 0x02, 0x2b, 0xc7, 0x38, 0xd9, 0xe7, 0x1b, - 0x06, 0xbe, 0x3d, 0x35, 0x20, 0x84, 0x1e, 0x79, 0x99, 0x19, 0x4c, 0xb5, - 0x94, 0x78, 0x9b, 0x95, 0xc2, 0x7c, 0x09, 0x69, 0x9e, 0xe3, 0x4b, 0x7a, - 0xc0, 0x62, 0xb8, 0xb6, 0x83, 0xdd, 0x79, 0xed, 0xfb, 0x19, 0xf9, 0xbe, - 0xfa, 0x48, 0xc6, 0xef, 0xe8, 0xe4, 0x7a, 0x2f, 0xc7, 0x67, 0x96, 0xd9, - 0xa7, 0x5f, 0x59, 0xc2, 0xf9, 0x9c, 0x86, 0xd6, 0xdd, 0x83, 0xb1, 0xee, - 0x59, 0xae, 0x50, 0x86, 0x8e, 0x51, 0x0a, 0xd9, 0x7d, 0xb1, 0x64, 0x60, - 0xd5, 0x3a, 0x17, 0xb6, 0xd3, 0xa6, 0x72, 0x90, 0x65, 0x34, 0x2b, 0x07, - 0xcb, 0x18, 0x23, 0xda, 0x92, 0x7e, 0x59, 0x26, 0x49, 0x77, 0x5f, 0xb8, - 0xae, 0x9c, 0x87, 0xb9, 0xb0, 0x57, 0xc5, 0xfd, 0x06, 0x52, 0x9a, 0x5f, - 0x6e, 0x3c, 0xb6, 0x09, 0xc0, 0xc9, 0x35, 0x00, 0x9f, 0x1f, 0x17, 0x54, - 0x86, 0x96, 0x7a, 0x99, 0x24, 0xeb, 0x2e, 0xae, 0x91, 0xaf, 0x71, 0x12, - 0x9f, 0xea, 0x17, 0x48, 0x03, 0x07, 0xed, 0x92, 0xa9, 0x2c, 0x3a, 0x41, - 0x0d, 0xa0, 0x41, 0x58, 0x59, 0x62, 0x38, 0x50, 0x16, 0xdd, 0x70, 0x31, - 0xe0, 0x39, 0x4f, 0x40, 0x43, 0x79, 0x92, 0x9a, 0x39, 0x48, 0x68, 0x2b, - 0x25, 0x0e, 0x15, 0xfb, 0x48, 0xeb, 0xe2, 0x67, 0x95, 0x72, 0xa9, 0x03, - 0x5d, 0x47, 0x4d, 0x53, 0xe6, 0xf6, 0x91, 0x05, 0xa8, 0x94, 0xd4, 0xea, - 0x0e, 0x2e, 0x55, 0x34, 0x58, 0x05, 0xf1, 0x92, 0x5b, 0xd3, 0xd4, 0x38, - 0xe5, 0x07, 0xcb, 0x6f, 0xd9, 0x5c, 0x62, 0x03, 0x11, 0xce, 0xff, 0x00, - 0xf0, 0xea, 0x21, 0x81, 0x8e, 0x3b, 0x03, 0x3e, 0x44, 0xbe, 0x74, 0x3c, - 0x71, 0x73, 0x4e, 0x03, 0x69, 0x20, 0x4b, 0xab, 0x0a, 0x4f, 0x01, 0xad, - 0xd0, 0x10, 0xa9, 0x74, 0x01, 0xa9, 0xab, 0x36, 0x34, 0xe9, 0xcc, 0x7f, - 0x85, 0x1e, 0x73, 0x48, 0x9c, 0x1d, 0xef, 0xfe, 0x41, 0x75, 0x41, 0xc0, - 0x07, 0xc5, 0x60, 0x54, 0x45, 0x0d, 0x51, 0x92, 0x51, 0x45, 0xe1, 0xc0, - 0xaa, 0x4b, 0x24, 0x82, 0x1e, 0x25, 0xc8, 0x8e, 0x8f, 0x00, 0x6e, 0x9a, - 0x3f, 0x38, 0x2a, 0x0d, 0x7a, 0xac, 0x22, 0x37, 0xb7, 0xd1, 0xc7, 0xf3, - 0x40, 0xd5, 0xf7, 0xef, 0xd8, 0x6f, 0x22, 0x93, 0x6b, 0x10, 0x09, 0x6b, - 0x20, 0x6b, 0x61, 0xd2, 0xdc, 0x3d, 0x17, 0x65, 0xba, 0x14, 0x08, 0x6d, - 0x65, 0x75, 0xa0, 0xe4, 0x64, 0x3e, 0x96, 0xdb, 0x31, 0x2a, 0x1f, 0xcc, - 0x1e, 0xbc, 0x85, 0xca, 0xdc, 0xe1, 0x05, 0xbc, 0xac, 0xdb, 0x33, 0x24, - 0x88, 0x36, 0x2e, 0x9b, 0x64, 0x5c, 0x6d, 0x19, 0x45, 0x3b, 0x61, 0x23, - 0x62, 0xa7, 0x0a, 0xd4, 0xea, 0x38, 0xde, 0xcf, 0x86, 0xeb, 0x90, 0x42, - 0xbc, 0xe6, 0x80, 0xc2, 0x8a, 0x19, 0xb0, 0x8a, 0x29, 0x5e, 0x70, 0x60, - 0xc1, 0x50, 0xf8, 0xf6, 0x41, 0x2a, 0x0b, 0x36, 0xa9, 0x47, 0x1e, 0x97, - 0x2d, 0x9c, 0xc8, 0xb5, 0x7d, 0x9c, 0x3a, 0xa4, 0xf4, 0x00, 0x54, 0x24, - 0x76, 0x0f, 0xf0, 0x9e, 0xe4, 0x50, 0x8a, 0x00, 0xee, 0x61, 0x69, 0xaa, - 0x33, 0xa2, 0xcd, 0x77, 0x22, 0xf3, 0x7e, 0x63, 0xc6, 0xe8, 0x66, 0x8c, - 0xb7, 0x3e, 0xa6, 0xae, 0x6c, 0x14, 0x05, 0xa4, 0xc7, 0xa0, 0x60, 0x77, - 0x84, 0x6e, 0x19, 0x78, 0x47, 0xa7, 0x68, 0x58, 0x31, 0xdc, 0xbd, 0x74, - 0x92, 0xd6, 0xf6, 0xc1, 0x45, 0xc8, 0x19, 0x08, 0x0d, 0x3f, 0xae, 0x69, - 0x40, 0xbe, 0x6c, 0x2b, 0x7b, 0xb0, 0x5d, 0x01, 0x3f, 0x6e, 0x03, 0x9b, - 0xb8, 0xe3, 0xc1, 0x3e, 0x43, 0x65, 0x9b, 0xf2, 0x0d, 0xff, 0x8b, 0xb6, - 0x4d, 0xf2, 0x2b, 0x49, 0xbd, 0xe2, 0xe0, 0x4d, 0x66, 0x26, 0xc7, 0xb1, - 0x6c, 0xef, 0x83, 0xcd, 0xd6, 0x61, 0x85, 0x8b, 0x2f, 0x5e, 0x02, 0xd3, - 0x74, 0xd1, 0x23, 0x96, 0x40, 0xe9, 0xbf, 0x08, 0xd5, 0x81, 0xea, 0xca, - 0x4e, 0x8c, 0xe8, 0x74, 0x10, 0x07, 0xba, 0x2b, 0xe3, 0xce, 0xb3, 0x4e, - 0x4f, 0x8e, 0xfc, 0xf1, 0xc7, 0xc6, 0x34, 0x43, 0xd5, 0x49, 0xbf, 0xde, - 0x00, 0xe8, 0x42, 0xf8, 0x85, 0x27, 0xf7, 0x89, 0xb7, 0x88, 0x01, 0x24, - 0x74, 0x8f, 0x50, 0x17, 0x88, 0x03, 0x85, 0x95, 0xcb, 0x94, 0xd6, 0xf8, - 0x9a, 0x01, 0x8e, 0xab, 0xe7, 0xee, 0x20, 0x1f, 0x98, 0x74, 0x54, 0x9b, - 0x5f, 0x70, 0xea, 0x4b, 0x0e, 0x34, 0x06, 0xe9, 0x11, 0x68, 0x09, 0xe0, - 0xfd, 0x64, 0xc5, 0xcd, 0x43, 0x17, 0xff, 0x4f, 0xec, 0x92, 0xfb, 0x85, - 0x7d, 0xa8, 0x05, 0xa1, 0x9b, 0x9a, 0xb2, 0x18, 0xe2, 0x92, 0x2a, 0x80, - 0x4d, 0x80, 0xe7, 0x1a, 0x34, 0xbe, 0x46, 0x53, 0x51, 0x9d, 0x8b, 0x39, - 0x5f, 0x3c, 0x4d, 0x7c, 0x92, 0xe2, 0x28, 0xbc, 0xfc, 0x2e, 0xe3, 0x3d, - 0x98, 0x70, 0x70, 0xcf, 0xdc, 0x44, 0xe7, 0x3b, 0x22, 0xd0, 0xf9, 0x30, - 0xf2, 0x36, 0xa7, 0xf7, 0x4b, 0xd6, 0x80, 0xb4, 0x62, 0x54, 0xc7, 0x36, - 0x81, 0x76, 0xad, 0xde, 0xe6, 0x6f, 0x15, 0xb1, 0x6f, 0x0d, 0x86, 0xbe, - 0xa5, 0xc0, 0x81, 0xef, 0x2f, 0x2a, 0x54, 0xd3, 0xae, 0xb1, 0xfa, 0x37, - 0x3f, 0x4c, 0x8e, 0xd9, 0xe7, 0x7d, 0xef, 0x61, 0x17, 0x01, 0x3f, 0x11, - 0x90, 0x53, 0x2b, 0x16, 0x20, 0x6d, 0xe1, 0x43, 0x9c, 0x25, 0x8c, 0x25, - 0x89, 0x59, 0x47, 0xa3, 0x8f, 0x5f, 0x82, 0x51, 0x73, 0xe7, 0x18, 0xe6, - 0x83, 0x32, 0x31, 0x0d, 0x61, 0xd3, 0x3d, 0x03, 0x14, 0x5d, 0x39, 0x10, - 0x80, 0xce, 0x0d, 0x7f, 0x6e, 0x29, 0x19, 0xc9, 0xe2, 0x5c, 0xf3, 0x84, - 0xca, 0xbb, 0xe6, 0xc7, 0xad, 0x60, 0x80, 0x6c, 0x83, 0xcd, 0x41, 0xdd, - 0x91, 0x0f, 0x3b, 0x49, 0xfc, 0x40, 0xbe, 0x30, 0xb3, 0xcc, 0xa0, 0xb2, - 0xdb, 0x41, 0x07, 0x19, 0xde, 0x43, 0xe7, 0xc0, 0x49, 0xf0, 0x09, 0x78, - 0x9c, 0x51, 0x62, 0x21, 0xec, 0xf1, 0x55, 0x25, 0x96, 0x12, 0x45, 0x74, - 0x8f, 0xe7, 0x58, 0x41, 0x5d, 0xb8, 0xe7, 0x02, 0xb6, 0x93, 0x39, 0x18, - 0x64, 0x1d, 0xa4, 0x24, 0x2a, 0xa6, 0x18, 0xb6, 0x1d, 0x13, 0xc2, 0x8c, - 0xfa, 0x4b, 0xe9, 0x86, 0x2e, 0x41, 0xc2, 0xb1, 0x43, 0x5a, 0xf5, 0xe6, - 0xef, 0xe0, 0x2a, 0xcc, 0x51, 0x1f, 0x96, 0x27, 0xe4, 0xcc, 0x95, 0x20, - 0x0e, 0x14, 0x89, 0xa1, 0xc5, 0xd9, 0x47, 0x8e, 0x02, 0xbb, 0x83, 0xee, - 0x64, 0xcb, 0x85, 0xaf, 0xdf, 0x4f, 0x07, 0xbf, 0xbd, 0x8b, 0xbf, 0xe1, - 0xe2, 0x9b, 0xd7, 0x57, 0x80, 0x22, 0x14, 0x58, 0x1b, 0xc4, 0xd0, 0x8d, - 0xa8, 0x6a, 0x1e, 0x4f, 0x27, 0x8a, 0xbf, 0x23, 0xba, 0xfd, 0xf0, 0xcb, - 0xd1, 0x90, 0xc2, 0xe8, 0x62, 0x5d, 0x0d, 0x8f, 0x90, 0xc2, 0x65, 0x34, - 0x3d, 0xba, 0x71, 0x88, 0xb3, 0x32, 0x9d, 0x70, 0x76, 0x68, 0xd8, 0x1d, - 0x2a, 0x9c, 0x31, 0x7c, 0x01, 0xca, 0x32, 0x35, 0xa5, 0x66, 0x79, 0xd2, - 0xeb, 0xc6, 0x82, 0xb2, 0x31, 0xcb, 0x31, 0x54, 0x54, 0xdd, 0xd5, 0x38, - 0x7c, 0xfe, 0x7e, 0xcc, 0x32, 0x69, 0x23, 0x4b, 0x88, 0x1f, 0x16, 0xf4, - 0x74, 0xc9, 0x9d, 0x70, 0x96, 0xa3, 0x7b, 0xa0, 0x18, 0xcc, 0x51, 0x9c, - 0xf4, 0x46, 0x56, 0x2a, 0x5e, 0x30, 0x43, 0x2c, 0x2d, 0x90, 0x02, 0x71, - 0xe0, 0xbf, 0x1c, 0x6f, 0xfe, 0x87, 0xf5, 0x18, 0x06, 0xea, 0x4e, 0x0a, - 0x36, 0x13, 0x82, 0xb3, 0x33, 0xa8, 0xee, 0x08, 0x93, 0x1d, 0x6f, 0x87, - 0x54, 0x1a, 0xb7, 0x31, 0x0e, 0x4f, 0xce, 0xe5, 0x19, 0x4b, 0xbb, 0x10, - 0x16, 0x09, 0x85, 0x50, 0xaf, 0xe5, 0xc7, 0xe5, 0xb1, 0xb8, 0x38, 0x66, - 0xb4, 0xb8, 0x59, 0x97, 0xc3, 0xe0, 0x40, 0x8d, 0xa0, 0x75, 0x29, 0x68, - 0x30, 0x8e, 0x62, 0x05, 0x96, 0x81, 0x2a, 0xaa, 0x1e, 0xc5, 0xab, 0x47, - 0xa9, 0xe4, 0x24, 0x91, 0x9b, 0x65, 0x22, 0x87, 0x15, 0x77, 0xd6, 0x39, - 0x5c, 0xd5, 0x8d, 0x0c, 0xe2, 0xa8, 0xe6, 0x35, 0xd0, 0x16, 0x13, 0x55, - 0x9b, 0x46, 0x46, 0xea, 0x2c, 0xe3, 0xc0, 0x65, 0x9e, 0xa8, 0xba, 0xfd, - 0xc5, 0x9e, 0x63, 0xd3, 0x55, 0x3b, 0x51, 0x0e, 0x1f, 0x04, 0xe9, 0x02, - 0x91, 0xa2, 0x40, 0x48, 0xeb, 0xdb, 0x4b, 0x65, 0x60, 0x7b, 0x53, 0x91, - 0xc1, 0x77, 0xa4, 0xcf, 0xa6, 0x4e, 0xee, 0xc0, 0xe3, 0xb2, 0x24, 0x7e, - 0xce, 0xc9, 0x10, 0x2d, 0x23, 0x8d, 0x68, 0x4e, 0x03, 0x0a, 0x0c, 0xde, - 0x29, 0x41, 0x98, 0x2a, 0x9a, 0xc1, 0x63, 0xd7, 0x41, 0x1f, 0xc8, 0x51, - 0x7e, 0x7d, 0x63, 0xf3, 0xda, 0xec, 0x9d, 0x90, 0x11, 0x8c, 0xc1, 0xaf, - 0x03, 0xb4, 0xbc, 0xe7, 0xc0, 0x85, 0x8e, 0x73, 0x98, 0xc4, 0x4d, 0xdd, - 0x01, 0xc2, 0xd3, 0x65, 0xd2, 0x9c, 0x21, 0xba, 0x85, 0x40, 0xab, 0x2f, - 0x15, 0xc2, 0xff, 0xca, 0x9c, 0xc2, 0x33, 0xd7, 0x24, 0x4e, 0x8a, 0x71, - 0x61, 0x4a, 0x13, 0x62, 0x03, 0x84, 0x50, 0x2f, 0x68, 0x72, 0x19, 0xf3, - 0xbc, 0x41, 0x80, 0xbd, 0x88, 0x9a, 0x05, 0x87, 0x73, 0x45, 0x7b, 0xa0, - 0xdf, 0xf8, 0x6c, 0x31, 0x3f, 0x61, 0xe9, 0x01, 0x69, 0xc2, 0x0c, 0xf6, - 0x03, 0x7b, 0x2f, 0x18, 0x5f, 0x00, 0xd1, 0xc1, 0xc7, 0x92, 0x6d, 0x78, - 0xb0, 0x72, 0x78, 0x83, 0xe3, 0x10, 0x52, 0xef, 0xfa, 0x56, 0x06, 0xbe, - 0x77, 0x4a, 0xa4, 0x27, 0xa5, 0x85, 0xad, 0xa0, 0xba, 0x2e, 0xd2, 0x4e, - 0xf4, 0x25, 0x50, 0x9e, 0xa7, 0x1a, 0xe2, 0x60, 0x0e, 0xc7, 0x9b, 0xdb, - 0xe5, 0x3d, 0xe7, 0x06, 0x7b, 0x66, 0xfb, 0xaf, 0x9e, 0xc8, 0x20, 0x55, - 0xe2, 0x3e, 0x24, 0x7b, 0x90, 0x00, 0xed, 0xb8, 0x28, 0x5b, 0x4c, 0xc1, - 0xc3, 0x51, 0x0b, 0xdf, 0x6f, 0xae, 0x8e, 0xfc, 0x66, 0xd7, 0xac, 0x31, - 0x09, 0xa2, 0x64, 0xc0, 0xe1, 0x34, 0xa8, 0x83, 0x93, 0x54, 0x24, 0x91, - 0x50, 0xe7, 0x41, 0xb8, 0xa0, 0x42, 0x54, 0xf2, 0x5c, 0x6d, 0xdc, 0x21, - 0xd3, 0x61, 0x71, 0xcc, 0xa3, 0xf4, 0x8e, 0xe2, 0xa4, 0xb9, 0xd8, 0x15, - 0xe2, 0x75, 0x36, 0xe7, 0xea, 0x49, 0x98, 0xca, 0x65, 0x5c, 0x58, 0xf8, - 0x6d, 0x7a, 0x7c, 0x0d, 0x2e, 0xe0, 0x0e, 0x71, 0xf6, 0xf1, 0xa5, 0xc4, - 0x7c, 0x1b, 0xdc, 0x63, 0xc4, 0x6b, 0xbc, 0xed, 0x11, 0x75, 0x69, 0xd6, - 0x13, 0xcf, 0xe0, 0x46, 0xee, 0xb7, 0xfa, 0xe2, 0x17, 0x34, 0xbe, 0x20, - 0x36, 0xd7, 0x51, 0x99, 0xcf, 0xa9, 0xb3, 0xa9, 0xf2, 0x2a, 0x10, 0x89, - 0xd6, 0xc9, 0x1d, 0x72, 0xae, 0x76, 0x4b, 0xc1, 0xff, 0x5e, 0xf9, 0x58, - 0xf4, 0x13, 0x5b, 0x67, 0xba, 0x8d, 0xf5, 0x80, 0x44, 0xa5, 0x08, 0x38, - 0x96, 0x8e, 0x71, 0x33, 0xa8, 0xdc, 0x7b, 0x7c, 0x20, 0x53, 0x23, 0x36, - 0x45, 0x79, 0x33, 0x14, 0xe9, 0xdc, 0xfb, 0xd5, 0x3c, 0xb2, 0xf0, 0xd4, - 0xd8, 0x10, 0xd7, 0xd0, 0x1a, 0x17, 0x8e, 0x77, 0x81, 0x9e, 0xce, 0x66, - 0xfa, 0xf7, 0x62, 0xfa, 0x37, 0x4c, 0xcf, 0xc3, 0xb3, 0x0f, 0xcb, 0x8c, - 0x2d, 0xf2, 0xd2, 0xb0, 0x7b, 0x3c, 0xdb, 0x04, 0xd6, 0xfb, 0x73, 0xb1, - 0x8f, 0x63, 0x1b, 0x02, 0x4f, 0x01, 0x30, 0xdd, 0xd2, 0x39, 0x08, 0xe7, - 0xc7, 0x5c, 0x7a, 0xdc, 0xc5, 0x64, 0x6e, 0x89, 0xa1, 0x97, 0x65, 0x08, - 0x97, 0xe1, 0xf0, 0x38, 0xe3, 0x40, 0x50, 0xcb, 0xc5, 0x15, 0x27, 0xcf, - 0x05, 0xbc, 0x46, 0xb6, 0x15, 0xe8, 0x60, 0xdc, 0x09, 0x1b, 0x89, 0xe7, - 0x9f, 0x5a, 0xfc, 0xa2, 0x01, 0x22, 0xe4, 0x72, 0xb9, 0x20, 0x1e, 0x47, - 0xaf, 0xd0, 0xab, 0x8e, 0x70, 0x2b, 0x5e, 0x3e, 0x9a, 0x16, 0xac, 0x09, - 0x09, 0x18, 0x2d, 0x41, 0xee, 0x2a, 0xd5, 0xba, 0x8c, 0xc7, 0xdc, 0x9d, - 0x91, 0xa6, 0x5e, 0x6e, 0x49, 0xb6, 0xfa, 0x15, 0x37, 0xe1, 0xef, 0x88, - 0xfc, 0xea, 0x9f, 0x21, 0xa6, 0xa3, 0x7a, 0x57, 0x5e, 0xe9, 0xd7, 0xc3, - 0xe4, 0x9f, 0x7d, 0xf1, 0x24, 0x60, 0x17, 0xca, 0x4d, 0x8d, 0x2d, 0x10, - 0xee, 0xaf, 0x11, 0xe4, 0x29, 0xc0, 0x3c, 0x54, 0x14, 0xa6, 0x7c, 0xc9, - 0x98, 0x98, 0xe3, 0x95, 0x40, 0x35, 0xa8, 0xa8, 0x89, 0xb5, 0x98, 0x81, - 0xa9, 0xc9, 0x49, 0xa6, 0xfb, 0xb2, 0xbe, 0x86, 0x0b, 0xd7, 0x1b, 0xf4, - 0x9b, 0x1f, 0x3c, 0x6f, 0xa6, 0xb5, 0x67, 0x1d, 0x3d, 0xc3, 0x53, 0x9b, - 0x01, 0xbb, 0xb3, 0xfd, 0x4d, 0xa7, 0x26, 0x53, 0xdd, 0xb7, 0x11, 0xa3, - 0xc3, 0xfe, 0xc4, 0x71, 0x69, 0x83, 0x87, 0xd7, 0xaa, 0xa7, 0x3f, 0x67, - 0x3d, 0xe9, 0x26, 0xf6, 0x3d, 0xee, 0xb9, 0x71, 0x53, 0x05, 0x7e, 0xd0, - 0x40, 0xdc, 0x1a, 0x22, 0xbc, 0xc4, 0xd6, 0xe6, 0xd6, 0xaf, 0x9b, 0x9d, - 0xea, 0x20, 0xc7, 0x7a, 0xf7, 0xaf, 0xc2, 0x53, 0xb8, 0xd6, 0xd4, 0x7a, - 0x0a, 0xf7, 0x7c, 0x26, 0x05, 0x02, 0x54, 0x91, 0x23, 0xa2, 0x29, 0xbe, - 0xc9, 0xc1, 0x6a, 0x11, 0x6f, 0x5f, 0x04, 0xa2, 0xe3, 0xcf, 0x56, 0x35, - 0x9e, 0xad, 0x6a, 0x3c, 0x5b, 0x11, 0x7c, 0xb6, 0xc2, 0xf0, 0xbc, 0x16, - 0x86, 0x67, 0xcd, 0xd0, 0xa7, 0xd2, 0xae, 0xee, 0x95, 0x9c, 0x18, 0xd1, - 0x9f, 0xfd, 0xfe, 0x62, 0x63, 0x76, 0x32, 0x71, 0xdb, 0x20, 0xa0, 0x74, - 0x7f, 0x73, 0x68, 0x02, 0x41, 0x8f, 0x97, 0x32, 0xa1, 0x72, 0x01, 0x05, - 0xc0, 0x17, 0xf8, 0x2a, 0x1c, 0x96, 0x8e, 0xc9, 0xc1, 0xe8, 0xa4, 0x41, - 0x40, 0x84, 0x76, 0xe6, 0xa7, 0x85, 0x9d, 0x83, 0x91, 0xe2, 0x0e, 0xf2, - 0x15, 0x3e, 0x50, 0x39, 0xea, 0x89, 0x36, 0x43, 0x60, 0x70, 0x45, 0x32, - 0xd0, 0x12, 0x7e, 0x5e, 0x22, 0xe1, 0xb9, 0xcd, 0xca, 0x4e, 0x3e, 0x6f, - 0x77, 0x65, 0xa4, 0x81, 0x33, 0xf2, 0x5b, 0x98, 0x9d, 0xd7, 0x8a, 0xff, - 0x70, 0x3f, 0xb8, 0x6c, 0x65, 0x08, 0x12, 0xf6, 0xc7, 0x60, 0xa6, 0x67, - 0x83, 0x92, 0xd9, 0x61, 0x08, 0x23, 0x26, 0x86, 0x71, 0xc5, 0xa3, 0x65, - 0xf4, 0x98, 0xb9, 0x60, 0x0d, 0xce, 0x70, 0xdb, 0x2c, 0x31, 0xbd, 0xde, - 0x83, 0xbf, 0xdf, 0x0f, 0x1d, 0x68, 0x6b, 0x5c, 0x9c, 0xa1, 0x91, 0x8e, - 0xcf, 0x10, 0xc4, 0x60, 0xfa, 0xac, 0x62, 0x42, 0xb6, 0x77, 0x67, 0x4f, - 0x9f, 0xce, 0xe0, 0xd1, 0xe3, 0xde, 0xb9, 0x43, 0x2d, 0x3e, 0xf0, 0xc3, - 0x1f, 0x47, 0x77, 0x2e, 0xad, 0x7e, 0xbc, 0x4f, 0x2c, 0x5e, 0x26, 0x9a, - 0x7c, 0xcc, 0xd0, 0x34, 0x94, 0xcb, 0xe0, 0xbb, 0x4f, 0x7d, 0x8a, 0x04, - 0xbb, 0x47, 0x84, 0x5b, 0x0a, 0x81, 0xa1, 0x14, 0xa5, 0xa1, 0x0b, 0xf7, - 0xf4, 0xe6, 0x48, 0xb2, 0xfa, 0x3b, 0xed, 0xe5, 0x68, 0x9e, 0x88, 0xdb, - 0x9d, 0x5b, 0xea, 0x76, 0xb8, 0xb3, 0xf5, 0x14, 0xb4, 0xf3, 0x3a, 0x25, - 0x48, 0x46, 0x77, 0x59, 0x08, 0x7f, 0xb3, 0x5f, 0xa5, 0x03, 0x87, 0x23, - 0x9d, 0x43, 0xa9, 0x8e, 0x88, 0xad, 0xb3, 0x20, 0x69, 0xed, 0x11, 0xba, - 0x1b, 0x2f, 0x9e, 0x39, 0x1a, 0x2b, 0x6a, 0xb6, 0xad, 0x34, 0xb1, 0x0c, - 0x01, 0x63, 0xd2, 0x7f, 0x6a, 0xd0, 0xe3, 0x81, 0xb8, 0x0f, 0xd3, 0xbd, - 0x25, 0x13, 0xb8, 0xd4, 0x02, 0x62, 0x73, 0xff, 0xa5, 0xe1, 0xfd, 0x12, - 0x35, 0xe3, 0x21, 0xe9, 0x27, 0xf2, 0x86, 0xa3, 0xa5, 0xce, 0x21, 0xb0, - 0x75, 0x20, 0x17, 0x1a, 0xf5, 0x9e, 0xa4, 0x74, 0x2c, 0xbc, 0x1b, 0xcf, - 0x83, 0xf7, 0xf6, 0xaa, 0x66, 0xaf, 0x55, 0xb1, 0x15, 0xa0, 0xb6, 0x26, - 0x4a, 0x1d, 0xac, 0xbd, 0xc5, 0x6b, 0x9a, 0xae, 0x93, 0x66, 0x36, 0xad, - 0xc0, 0x79, 0xc0, 0xdb, 0x07, 0x71, 0x61, 0x43, 0x5a, 0x97, 0x0b, 0x6d, - 0xae, 0x85, 0x4e, 0x81, 0xa7, 0xe9, 0x82, 0xcf, 0x65, 0xae, 0x99, 0x1a, - 0x7c, 0xe7, 0xc4, 0x06, 0xc1, 0xcc, 0x7b, 0xba, 0x64, 0x0a, 0xb4, 0xc7, - 0xf2, 0xf1, 0xed, 0xe7, 0xab, 0xce, 0x67, 0xbc, 0x9a, 0xc3, 0x0b, 0x7b, - 0x08, 0x40, 0x57, 0x5a, 0x6d, 0x40, 0x09, 0x99, 0xdd, 0x5d, 0xa8, 0xc8, - 0x77, 0xf6, 0x8a, 0xcb, 0xbe, 0x72, 0x86, 0xf7, 0x09, 0x1a, 0xee, 0x3e, - 0x9d, 0x97, 0x12, 0x0d, 0xe9, 0xbe, 0xad, 0x12, 0xdd, 0xcf, 0xfd, 0xd5, - 0xa5, 0xf7, 0xb9, 0xb7, 0x4f, 0x0f, 0xab, 0xa1, 0x67, 0x4d, 0xeb, 0xc7, - 0xd8, 0xad, 0x0d, 0x48, 0xc3, 0x06, 0xf4, 0xb5, 0x1d, 0x10, 0xd7, 0xb7, - 0x03, 0xa6, 0xd3, 0x31, 0x89, 0xa5, 0xa5, 0x9e, 0x06, 0x93, 0xde, 0xbd, - 0xe4, 0x96, 0x3a, 0x68, 0x03, 0x99, 0x88, 0xe1, 0xbe, 0x65, 0xee, 0xd6, - 0x38, 0xd8, 0x7e, 0xe5, 0x4b, 0x61, 0x7d, 0x1c, 0x35, 0x74, 0x36, 0x7c, - 0x7e, 0x0e, 0x35, 0xc7, 0x9c, 0x73, 0x63, 0x21, 0x07, 0x5a, 0xb8, 0xda, - 0x98, 0x2f, 0x05, 0x07, 0xcb, 0x8e, 0x97, 0x6c, 0x91, 0x46, 0xcd, 0x64, - 0x48, 0x92, 0xb8, 0xa4, 0xf8, 0xc8, 0xdb, 0xee, 0x69, 0xa8, 0x3c, 0x16, - 0x1a, 0x56, 0x88, 0x3a, 0xe9, 0xfc, 0x70, 0xbd, 0x70, 0xa3, 0xe0, 0x69, - 0xf9, 0x6a, 0xe1, 0xd2, 0x04, 0x5d, 0x5a, 0x20, 0x18, 0xbb, 0x24, 0xd5, - 0xf8, 0x63, 0xed, 0x4a, 0x1f, 0xda, 0x9f, 0x7b, 0x77, 0xf1, 0xa8, 0xd3, - 0x99, 0xfa, 0x18, 0x40, 0x6b, 0xd4, 0x5c, 0xd9, 0x79, 0xac, 0x04, 0x5c, - 0x22, 0xf9, 0xc3, 0xcd, 0x8d, 0x70, 0x96, 0x72, 0x27, 0x1f, 0xd7, 0x62, - 0xfc, 0x05, 0xf9, 0x09, 0x7e, 0x35, 0x8c, 0xfc, 0x34, 0xfe, 0xa4, 0xde, - 0x67, 0x69, 0xf4, 0x1e, 0x53, 0xa7, 0xba, 0xc9, 0x2d, 0x36, 0xa2, 0x63, - 0xe9, 0xca, 0xf3, 0xd3, 0x66, 0xa7, 0xf7, 0x3d, 0xa2, 0xaf, 0xa3, 0x15, - 0x44, 0x71, 0x88, 0x22, 0x98, 0xfd, 0x9a, 0x14, 0xcf, 0xf1, 0xd8, 0xae, - 0x49, 0x87, 0xeb, 0x9f, 0xad, 0x24, 0x3c, 0xa7, 0xf3, 0xde, 0xb5, 0xf4, - 0x60, 0xaf, 0x5c, 0xda, 0x9a, 0xaf, 0x1c, 0x4b, 0x02, 0xfc, 0x79, 0x77, - 0x97, 0x9a, 0xba, 0x16, 0xe8, 0x46, 0xdb, 0x99, 0x70, 0x71, 0x97, 0xf3, - 0xc2, 0xd4, 0x3a, 0x71, 0xae, 0x35, 0x6d, 0x1e, 0x8d, 0x74, 0x3f, 0x3c, - 0xda, 0x69, 0x9e, 0x8f, 0xd6, 0x5b, 0x88, 0xeb, 0x4b, 0x1e, 0x56, 0xe4, - 0x96, 0xd6, 0xf9, 0xa5, 0xc5, 0x86, 0x97, 0x5d, 0x39, 0xc3, 0x69, 0xdd, - 0x09, 0x93, 0xc3, 0xa3, 0x0f, 0x9b, 0x74, 0xd3, 0xb3, 0xb5, 0x52, 0xa9, - 0x94, 0x3f, 0x45, 0xe2, 0xdd, 0x77, 0x86, 0xef, 0x3f, 0xed, 0xf5, 0x7b, - 0x2c, 0x43, 0x57, 0xd7, 0x2f, 0xdd, 0x12, 0x32, 0xa6, 0x0b, 0xe0, 0x84, - 0x9b, 0x1e, 0x9a, 0xf8, 0x90, 0x3b, 0xee, 0xf9, 0xd2, 0x4e, 0x4c, 0x69, - 0x6d, 0xfe, 0x60, 0xdc, 0xd2, 0x37, 0xbf, 0xce, 0xb7, 0x90, 0xdb, 0xf4, - 0x7a, 0xbf, 0xf6, 0x5e, 0x14, 0xe4, 0xeb, 0xa5, 0xcb, 0xe6, 0x5e, 0x97, - 0x46, 0x66, 0xb6, 0x8a, 0xec, 0x03, 0x7d, 0x72, 0xd7, 0x48, 0x80, 0xd7, - 0x19, 0xd6, 0x1a, 0x98, 0x18, 0x5f, 0x0a, 0xea, 0x26, 0x74, 0x63, 0xd2, - 0xd0, 0x73, 0x1e, 0x44, 0xdc, 0x2a, 0xcf, 0x9d, 0x27, 0x09, 0x63, 0x8e, - 0xe9, 0x1a, 0xc4, 0x2e, 0x75, 0x66, 0x4c, 0xe7, 0xbb, 0x76, 0x18, 0xed, - 0x44, 0x8b, 0xef, 0x0c, 0xb9, 0xf0, 0x97, 0x08, 0x2f, 0x10, 0xab, 0x56, - 0xd3, 0x67, 0x19, 0xda, 0xcb, 0x20, 0xd2, 0xc0, 0xc3, 0xed, 0xcd, 0xbe, - 0xd8, 0xee, 0xf3, 0xb1, 0xa3, 0x39, 0x8f, 0xf4, 0xc8, 0x37, 0x1b, 0x5e, - 0x5c, 0xeb, 0x70, 0xfd, 0x14, 0x51, 0x6d, 0xd1, 0xcc, 0x05, 0x4b, 0x47, - 0xbc, 0x03, 0x46, 0x76, 0xab, 0xc1, 0xc0, 0x3e, 0x9e, 0x1f, 0x44, 0x72, - 0xb6, 0x25, 0x61, 0xfe, 0x0c, 0xb5, 0x9f, 0xce, 0x3f, 0x2d, 0xe8, 0x31, - 0x19, 0x21, 0x3c, 0xbb, 0xf5, 0x86, 0x15, 0xb7, 0xf8, 0xe2, 0x9a, 0x7b, - 0xc7, 0xd5, 0x7c, 0x02, 0x6f, 0x73, 0x58, 0xdc, 0x5b, 0xef, 0xf5, 0xcc, - 0x95, 0xc6, 0xe1, 0x40, 0x6e, 0x67, 0x03, 0x0d, 0x4f, 0xd7, 0x5a, 0xac, - 0xbc, 0x50, 0x37, 0x4c, 0x35, 0x90, 0x3c, 0x0c, 0x3e, 0x04, 0xf6, 0x89, - 0x5f, 0x0d, 0xea, 0x9a, 0x5a, 0x7e, 0xad, 0xe9, 0xf9, 0x67, 0x04, 0xb7, - 0xa6, 0xdd, 0x1f, 0x45, 0x0a, 0xdf, 0x7c, 0xa6, 0x2b, 0xd8, 0x6c, 0x62, - 0xa8, 0xe4, 0x29, 0xb4, 0x2e, 0x63, 0xe8, 0x2e, 0xb9, 0x42, 0x9b, 0xfc, - 0x6d, 0x5b, 0xe7, 0x2d, 0x66, 0xac, 0x3f, 0x95, 0xf3, 0xbd, 0x61, 0xe2, - 0xb3, 0xb4, 0x0f, 0xb8, 0x67, 0xb3, 0xb4, 0xde, 0x0a, 0xeb, 0x7f, 0x7f, - 0x0b, 0x5c, 0xe1, 0xe3, 0x11, 0x35, 0x80, 0x5c, 0xae, 0xe8, 0x3b, 0xf5, - 0xcd, 0x3e, 0x7e, 0xba, 0x28, 0x6d, 0xf7, 0x72, 0xac, 0xf1, 0xfc, 0x92, - 0x74, 0xc6, 0x3b, 0x6e, 0xac, 0x56, 0x03, 0x68, 0xe7, 0xfb, 0xd6, 0x81, - 0x1a, 0xed, 0x32, 0x74, 0xa7, 0xd5, 0x17, 0xae, 0xd0, 0xfa, 0x6b, 0xed, - 0xf7, 0x8f, 0xb5, 0x3e, 0xb0, 0xce, 0x5f, 0x1d, 0x39, 0x2e, 0xd1, 0xb3, - 0xda, 0x56, 0x47, 0x92, 0xfe, 0x16, 0xcd, 0xa5, 0xda, 0x6f, 0x92, 0x55, - 0x28, 0x38, 0xde, 0xf9, 0xba, 0xf0, 0x25, 0x58, 0x31, 0xcf, 0x07, 0xf6, - 0xfb, 0x56, 0xc4, 0xc7, 0x6d, 0x9f, 0xc6, 0x1a, 0x56, 0xec, 0x7b, 0x98, - 0xcb, 0x97, 0x68, 0x87, 0x5e, 0xdf, 0x61, 0x6d, 0xc7, 0x66, 0x03, 0x8b, - 0xab, 0xc1, 0x7d, 0xbc, 0xbf, 0x96, 0x6b, 0x4d, 0xd6, 0x29, 0x0e, 0xa1, - 0x65, 0x1b, 0xfb, 0x0f, 0x0b, 0x25, 0x0d, 0x34, 0xac, 0xa5, 0xae, 0xca, - 0xfa, 0x62, 0x4f, 0xf0, 0x11, 0x4d, 0x9d, 0x4a, 0x1b, 0x82, 0xd1, 0xe9, - 0xf5, 0xb1, 0xd3, 0x39, 0x7b, 0x7c, 0xa9, 0x3e, 0x7b, 0xbe, 0xc7, 0xd4, - 0x98, 0xdc, 0xd2, 0x73, 0x9c, 0x50, 0x0b, 0x1f, 0x36, 0x39, 0x68, 0x9d, - 0xc9, 0x67, 0xd8, 0xee, 0xf1, 0x04, 0xb8, 0x34, 0x38, 0xa1, 0xea, 0xb8, - 0xbd, 0x9e, 0x3c, 0xa1, 0x46, 0x7a, 0x26, 0x2c, 0xe0, 0xb5, 0xa8, 0x7e, - 0x20, 0x99, 0xa2, 0xb3, 0x71, 0x39, 0x95, 0x10, 0x3a, 0x73, 0x6a, 0x23, - 0xcc, 0xae, 0xab, 0x7e, 0x49, 0x55, 0x52, 0xbc, 0xba, 0xf6, 0xe3, 0xd5, - 0xaf, 0x56, 0x92, 0x6b, 0x2e, 0xbe, 0xf2, 0x9a, 0x1f, 0x3e, 0x37, 0x5d, - 0x72, 0x93, 0xa7, 0x02, 0xae, 0x1b, 0x2b, 0x2c, 0x75, 0x39, 0x60, 0xed, - 0x26, 0xcf, 0x6b, 0x9d, 0x3c, 0xaf, 0xbe, 0x00, 0x65, 0xd4, 0xe6, 0xc3, - 0x0f, 0x05, 0xa8, 0x86, 0x32, 0x5e, 0x3e, 0x72, 0x88, 0x73, 0x70, 0xcf, - 0xea, 0xa7, 0xde, 0x3e, 0x22, 0x6c, 0x8b, 0x36, 0x60, 0x2c, 0xcc, 0xad, - 0xc4, 0x88, 0x8f, 0x50, 0x93, 0x53, 0x47, 0xb4, 0xd4, 0x66, 0x8d, 0x68, - 0x0f, 0xf4, 0xfb, 0xc7, 0xf2, 0xef, 0xc5, 0xf2, 0x6f, 0xb5, 0x2c, 0xe9, - 0x03, 0x27, 0xee, 0xd1, 0x98, 0xd2, 0xcd, 0xae, 0x33, 0xa6, 0xc6, 0x1e, - 0x01, 0x88, 0xdb, 0xf6, 0x1a, 0x95, 0x87, 0xe9, 0x76, 0xcc, 0xad, 0x1c, - 0xe5, 0xbf, 0x53, 0x58, 0xd3, 0xc8, 0xdd, 0xd7, 0x6e, 0xae, 0x89, 0xdb, - 0x83, 0x75, 0xb9, 0x11, 0x5c, 0xb8, 0xee, 0x97, 0x53, 0x30, 0xc4, 0xe9, - 0x26, 0x88, 0xc6, 0x1c, 0xa1, 0x8d, 0x39, 0xd4, 0x28, 0xc8, 0x3d, 0x66, - 0x07, 0x9e, 0x88, 0xf9, 0x32, 0x1f, 0xcc, 0x7f, 0xa6, 0x83, 0xbe, 0xd2, - 0xbe, 0x87, 0x7d, 0x9f, 0xf3, 0x75, 0xc6, 0xf3, 0xd2, 0x99, 0x15, 0x73, - 0xbf, 0x70, 0x11, 0x50, 0xe7, 0xab, 0xaf, 0xd8, 0x02, 0x70, 0x7b, 0x39, - 0xda, 0x7b, 0x89, 0x30, 0x13, 0x6a, 0x23, 0xfa, 0x36, 0x78, 0xa3, 0x7c, - 0x1d, 0x0f, 0x0b, 0x6e, 0x8e, 0x6a, 0xba, 0xdc, 0x8f, 0x79, 0x6c, 0x04, - 0xa0, 0xc2, 0x42, 0x30, 0x54, 0x14, 0x5f, 0xb9, 0xb2, 0x2f, 0xed, 0x3f, - 0xf3, 0x86, 0xdc, 0x0f, 0x82, 0xf3, 0x13, 0xb7, 0xa9, 0x22, 0xb0, 0x5d, - 0x61, 0x36, 0x5c, 0x35, 0x63, 0x11, 0x27, 0xf7, 0xc3, 0x5c, 0x30, 0xfb, - 0x1e, 0x86, 0xfb, 0x11, 0x6f, 0xee, 0x07, 0xbc, 0xf9, 0xb9, 0x0c, 0x75, - 0xc6, 0x81, 0xe3, 0xc6, 0xc3, 0xa3, 0x32, 0xa7, 0xfa, 0xfe, 0xdc, 0x8d, - 0x72, 0x73, 0x3f, 0xc8, 0xcd, 0xdd, 0x1e, 0x88, 0x7f, 0x3d, 0x57, 0xdd, - 0xfc, 0x71, 0x27, 0x50, 0xc9, 0xab, 0x4f, 0xdd, 0x60, 0x93, 0x1b, 0x00, - 0x3d, 0x8e, 0x18, 0x58, 0x39, 0x5c, 0x22, 0xea, 0xf3, 0x10, 0xc5, 0xb5, - 0x8d, 0xad, 0x72, 0x3f, 0x94, 0xca, 0xf3, 0x99, 0xfd, 0xdc, 0x85, 0x31, - 0x8b, 0xee, 0x6c, 0x13, 0xb5, 0xe1, 0x14, 0x17, 0xd2, 0x23, 0xaf, 0x96, - 0xec, 0x9a, 0x98, 0x21, 0xa2, 0xfe, 0x7a, 0x30, 0x8d, 0x2d, 0xe7, 0xf2, - 0xac, 0x0b, 0x8b, 0x57, 0x9d, 0xb3, 0xd3, 0xf9, 0x71, 0x9c, 0x5b, 0x46, - 0x80, 0xa9, 0xce, 0xd6, 0x94, 0xd0, 0x80, 0x63, 0xd8, 0xc7, 0x8e, 0x4b, - 0x95, 0x3b, 0x9f, 0x15, 0x6d, 0x21, 0x95, 0xa4, 0x26, 0x5d, 0x83, 0x91, - 0x7d, 0x6b, 0x6a, 0xbe, 0x5d, 0x07, 0x26, 0xb9, 0x0d, 0x46, 0x72, 0x1b, - 0x8b, 0xe4, 0x18, 0x8a, 0xe4, 0x3a, 0x12, 0xe9, 0x9a, 0xc8, 0x7c, 0x1d, - 0x93, 0xe4, 0xb5, 0x0c, 0x3f, 0x15, 0xb6, 0xd1, 0x09, 0x18, 0xc8, 0xa0, - 0xea, 0xcc, 0x91, 0xaf, 0xb9, 0xbf, 0xe2, 0x98, 0xdf, 0x5a, 0x9b, 0x6e, - 0xe3, 0xcf, 0xfb, 0xab, 0x7d, 0xdd, 0xcf, 0xda, 0xe1, 0x5b, 0x1a, 0x7a, - 0x9e, 0x62, 0xc3, 0xda, 0x6b, 0xc3, 0xd6, 0x15, 0x87, 0x6d, 0x28, 0x77, - 0x47, 0xfd, 0x98, 0x24, 0xff, 0xcf, 0x50, 0xa2, 0x8e, 0x4f, 0x2d, 0x3d, - 0xcb, 0xa0, 0xc8, 0xc6, 0x55, 0x07, 0xc1, 0xbe, 0x89, 0x15, 0xdf, 0xdb, - 0xa6, 0xf4, 0x46, 0x77, 0xc0, 0xd7, 0x64, 0xd7, 0x6e, 0x55, 0x7f, 0xed, - 0x17, 0xee, 0xd7, 0xba, 0x6e, 0xbf, 0xe6, 0xae, 0x4f, 0x06, 0x3e, 0x36, - 0x37, 0xf0, 0x72, 0x62, 0xc5, 0xc9, 0xd7, 0x55, 0x75, 0xbc, 0xbc, 0xe2, - 0xf1, 0x5e, 0xc1, 0xe0, 0xd3, 0x0e, 0x67, 0xaa, 0x73, 0x92, 0xb8, 0xd8, - 0x3e, 0x45, 0x36, 0x21, 0xac, 0x43, 0xd5, 0xee, 0xfc, 0xac, 0x23, 0x82, - 0xcc, 0x8e, 0x73, 0xeb, 0x60, 0xf3, 0x61, 0x8b, 0xfe, 0x21, 0x5f, 0xc7, - 0x05, 0xb9, 0x1f, 0x08, 0xe4, 0x9d, 0xa7, 0x7b, 0x6a, 0x1b, 0xec, 0xc2, - 0x04, 0x80, 0x90, 0x16, 0xee, 0xf4, 0x0f, 0xd7, 0x7e, 0xd5, 0x37, 0xb6, - 0xd1, 0x7e, 0x8e, 0x72, 0xf2, 0x3b, 0x1e, 0xcf, 0xb9, 0x42, 0x4f, 0xb1, - 0x2d, 0x75, 0xeb, 0x30, 0x5b, 0xdb, 0x30, 0x58, 0xb7, 0xba, 0xbe, 0x2f, - 0x18, 0x03, 0xe0, 0xad, 0x2e, 0xf6, 0x6b, 0x9b, 0x63, 0x63, 0xf2, 0x6c, - 0x1b, 0x4e, 0x6f, 0x9d, 0x6c, 0xeb, 0xa3, 0x9e, 0x90, 0x51, 0xd8, 0x78, - 0x3e, 0x68, 0x08, 0x70, 0xaf, 0x20, 0xbe, 0x65, 0xac, 0x41, 0x4e, 0xe3, - 0xba, 0x85, 0xbd, 0x98, 0xd0, 0x6c, 0x12, 0xa3, 0xe0, 0xee, 0x41, 0xd0, - 0xbc, 0x5f, 0xf6, 0xc0, 0x5a, 0x57, 0x89, 0x71, 0x02, 0x77, 0x99, 0xd3, - 0x7f, 0xe6, 0x43, 0x1a, 0xe6, 0x1b, 0x15, 0xcb, 0xd8, 0x64, 0x3d, 0xe0, - 0x27, 0x4a, 0x15, 0x6e, 0xb5, 0xc6, 0x6d, 0xcc, 0x0b, 0x63, 0x51, 0x21, - 0x8b, 0x6d, 0x55, 0x26, 0x77, 0x32, 0x07, 0x6e, 0xe3, 0x8f, 0x29, 0xd6, - 0x5b, 0xe0, 0xce, 0xfb, 0x7f, 0x16, 0x60, 0x9c, 0xf4, 0xb4, 0x3f, 0x64, - 0x5b, 0x92, 0xda, 0xb4, 0xfe, 0x4d, 0x80, 0x63, 0x7b, 0x4e, 0xb1, 0x47, - 0x4c, 0xf8, 0x43, 0xe2, 0x07, 0x02, 0x0d, 0xe2, 0xa0, 0x95, 0x91, 0x2f, - 0xdc, 0xbe, 0x31, 0xaa, 0x83, 0x84, 0x06, 0x70, 0xd8, 0x02, 0xf9, 0x68, - 0x7f, 0x6c, 0xca, 0x65, 0x72, 0xbc, 0x10, 0x0f, 0x1a, 0x79, 0x41, 0xcc, - 0xa1, 0x0f, 0xe5, 0xa7, 0x41, 0xdd, 0x5f, 0x52, 0xf1, 0xb4, 0xca, 0x24, - 0x78, 0xd6, 0x1d, 0xdd, 0x9e, 0x3d, 0x83, 0xab, 0xa6, 0x26, 0x77, 0x9e, - 0x58, 0x63, 0xab, 0xc6, 0x55, 0xe3, 0x71, 0x3f, 0xb7, 0x63, 0xbb, 0x6f, - 0x56, 0xc8, 0xac, 0xab, 0xdb, 0x42, 0xa3, 0x2c, 0xa9, 0x62, 0xbe, 0x12, - 0xd7, 0xe1, 0x66, 0x6a, 0xa3, 0xa1, 0x04, 0x81, 0x26, 0xe9, 0xae, 0x03, - 0x24, 0xa0, 0x48, 0x32, 0x25, 0x13, 0xa3, 0x1f, 0x65, 0x1e, 0x28, 0xdf, - 0x79, 0x14, 0xa3, 0xc2, 0x5d, 0x90, 0x77, 0xed, 0x03, 0xb9, 0x49, 0x15, - 0x84, 0x06, 0xdd, 0xc1, 0x96, 0x08, 0x86, 0x25, 0x1c, 0x32, 0x60, 0x09, - 0xdd, 0x48, 0x83, 0x5c, 0x13, 0xd9, 0x90, 0x3a, 0x18, 0x41, 0xb5, 0x5a, - 0x86, 0xb7, 0x10, 0x64, 0x91, 0x38, 0x6c, 0x86, 0xd4, 0x88, 0xaa, 0xb1, - 0x8f, 0x8a, 0x2a, 0x84, 0x2a, 0xa0, 0xd8, 0x3c, 0xee, 0x87, 0xd9, 0x7f, - 0x3c, 0x5e, 0x56, 0x2a, 0x1f, 0x40, 0xd6, 0xba, 0x43, 0x99, 0xa4, 0x46, - 0xdb, 0xe7, 0x0c, 0xc2, 0x25, 0x34, 0x07, 0xd8, 0x1d, 0x20, 0x2d, 0x08, - 0x7e, 0x7b, 0x1b, 0xbf, 0x61, 0x43, 0xe9, 0x68, 0xc8, 0x05, 0xc6, 0x03, - 0x56, 0x73, 0xfb, 0x41, 0xe7, 0xe6, 0xaf, 0xe1, 0x8e, 0x76, 0x0b, 0x0b, - 0xe1, 0x6d, 0x41, 0x43, 0xdc, 0x57, 0xaa, 0x0b, 0x8d, 0xa1, 0x71, 0xaf, - 0x0e, 0x90, 0x1d, 0xc3, 0xa2, 0x42, 0xa2, 0xad, 0x40, 0x07, 0x48, 0xf3, - 0x40, 0xfa, 0x1a, 0xc9, 0xf9, 0xf0, 0x63, 0x07, 0x00, 0x18, 0x0a, 0xc8, - 0x41, 0x78, 0x92, 0x7c, 0x04, 0x0a, 0x84, 0xcb, 0xe3, 0xa7, 0x90, 0x48, - 0x3d, 0x48, 0x01, 0xc6, 0x06, 0x46, 0x10, 0xd7, 0x23, 0xec, 0x9e, 0xa5, - 0x8c, 0xf5, 0x33, 0x82, 0x59, 0xea, 0xd0, 0x47, 0xc9, 0x79, 0x85, 0x35, - 0xb5, 0x7d, 0x44, 0x30, 0x1a, 0x0c, 0x13, 0x71, 0xc3, 0x9c, 0x48, 0x25, - 0xec, 0x41, 0x19, 0x4a, 0xd6, 0xa4, 0xcc, 0xe9, 0xca, 0xca, 0xfc, 0x76, - 0x2e, 0x2d, 0xa4, 0xf2, 0xfc, 0xea, 0xe9, 0x2e, 0x6b, 0x35, 0x21, 0x27, - 0x26, 0x1a, 0x0e, 0x5e, 0xc1, 0x1b, 0x46, 0x93, 0x60, 0xa2, 0xa2, 0x72, - 0x48, 0x50, 0x3c, 0xef, 0x85, 0x7f, 0x1b, 0x8e, 0x29, 0xb6, 0xb3, 0x27, - 0x41, 0x2b, 0x35, 0x79, 0xaa, 0x16, 0xe5, 0x75, 0xf6, 0x22, 0x93, 0xbb, - 0x82, 0x92, 0xa7, 0xea, 0x22, 0x0b, 0x42, 0xd6, 0xf5, 0x36, 0x82, 0xe6, - 0xfe, 0x89, 0x46, 0x09, 0x2a, 0x1d, 0xb0, 0x60, 0x7e, 0x7d, 0xfd, 0x07, - 0xd9, 0x8a, 0xd9, 0xd4, 0x05, 0xff, 0xb6, 0x14, 0x49, 0x06, 0x2e, 0x82, - 0xa6, 0x5e, 0x93, 0x1e, 0x3e, 0x79, 0x16, 0x82, 0x20, 0xb7, 0x8f, 0xb9, - 0x96, 0x2f, 0xc3, 0xb8, 0xf2, 0x57, 0xbd, 0x16, 0x2f, 0x43, 0x85, 0xdd, - 0xb2, 0x10, 0x56, 0x53, 0x1c, 0xed, 0xd5, 0x64, 0xa1, 0xbf, 0x78, 0xe3, - 0x5d, 0x04, 0x95, 0x8c, 0x6f, 0xba, 0xe3, 0xd9, 0xbd, 0xf4, 0xb2, 0x06, - 0xf6, 0xc5, 0x82, 0xf9, 0x2f, 0x59, 0xb3, 0x68, 0xdf, 0xfe, 0x59, 0x4f, - 0x97, 0xde, 0x68, 0x60, 0xdf, 0x23, 0xfe, 0x7c, 0x33, 0x3e, 0xbd, 0x61, - 0xd8, 0xe2, 0x3b, 0x8d, 0x1c, 0xb3, 0x19, 0xb5, 0x19, 0xc4, 0x54, 0xb1, - 0x44, 0xcb, 0x19, 0x42, 0x7a, 0x99, 0x4a, 0x5d, 0x6b, 0xcd, 0x21, 0xaa, - 0x16, 0x0d, 0xc1, 0x44, 0x73, 0x89, 0x5f, 0xad, 0xf9, 0x9f, 0x24, 0x51, - 0x04, 0x54, 0x29, 0x00, 0x71, 0xad, 0x1b, 0x46, 0x43, 0x3a, 0xad, 0x07, - 0xd9, 0x12, 0xcf, 0xae, 0xb2, 0x3b, 0x8b, 0x74, 0x71, 0xf8, 0xdb, 0x7d, - 0xa9, 0x09, 0x2a, 0x26, 0x52, 0x8d, 0x1c, 0xde, 0x4c, 0xbf, 0xf3, 0x93, - 0xce, 0x57, 0x42, 0x4a, 0xc5, 0x6d, 0xf4, 0xe7, 0x8b, 0x1b, 0x23, 0xdb, - 0x62, 0xc2, 0x36, 0x6a, 0x43, 0xc5, 0x73, 0x97, 0x99, 0xc1, 0x36, 0x8f, - 0xd2, 0xa2, 0xa8, 0x51, 0x62, 0xb0, 0xfb, 0x47, 0xb8, 0x57, 0x23, 0x3c, - 0xb0, 0x5a, 0x5a, 0xfc, 0xb8, 0x06, 0x3a, 0x12, 0xb9, 0x4e, 0xbe, 0x1f, - 0x11, 0x27, 0xac, 0x17, 0x07, 0xad, 0xa1, 0xeb, 0x16, 0x91, 0x21, 0x3f, - 0xc3, 0x7a, 0x49, 0x9d, 0x01, 0x4c, 0x78, 0x26, 0x22, 0x2d, 0x5d, 0xf0, - 0xc8, 0xb2, 0x30, 0x04, 0x6e, 0xa6, 0xc2, 0x0b, 0x31, 0x4a, 0x11, 0x60, - 0x4f, 0x0f, 0xc1, 0x6a, 0xdc, 0x87, 0x32, 0x89, 0xe3, 0x3d, 0xaa, 0x61, - 0x7d, 0x73, 0xd1, 0x01, 0x0d, 0xef, 0x8e, 0x3f, 0x35, 0xce, 0xc7, 0x96, - 0xfd, 0x44, 0x28, 0x19, 0x37, 0x10, 0xfb, 0x8c, 0x95, 0xf1, 0x40, 0x50, - 0x1c, 0x41, 0x14, 0x71, 0xe3, 0x3f, 0xa9, 0x99, 0xfb, 0x28, 0x7d, 0x67, - 0x49, 0xbd, 0x49, 0x10, 0x40, 0x9f, 0x78, 0x89, 0x39, 0xe9, 0x0e, 0xb3, - 0xc8, 0x49, 0x9a, 0x96, 0x10, 0x31, 0xe0, 0x9c, 0x5c, 0x09, 0x1c, 0xc1, - 0x23, 0xef, 0x56, 0x19, 0x91, 0xd9, 0x7b, 0x6e, 0x9c, 0x97, 0x6a, 0x99, - 0x6b, 0x5c, 0x86, 0x4a, 0x03, 0x14, 0x94, 0x0b, 0x8a, 0x8b, 0x13, 0x0c, - 0xc2, 0xcc, 0xe3, 0xaa, 0x89, 0x03, 0x92, 0x79, 0xb0, 0x81, 0xbd, 0x91, - 0x1b, 0xa6, 0x5e, 0x48, 0x7d, 0xa0, 0x99, 0x5e, 0x00, 0x28, 0xb3, 0x60, - 0xf5, 0x1d, 0x41, 0x02, 0x0e, 0x6d, 0x1b, 0x16, 0x4f, 0x63, 0x00, 0x66, - 0xe4, 0x7c, 0x43, 0x81, 0x14, 0x4d, 0x61, 0x83, 0x62, 0x19, 0x5c, 0x17, - 0x30, 0xac, 0x67, 0x7f, 0xe9, 0xc8, 0x20, 0x5e, 0x38, 0x60, 0x5a, 0xd8, - 0x48, 0xea, 0x87, 0xa4, 0x76, 0x4d, 0x78, 0xce, 0xee, 0x09, 0xa9, 0xd2, - 0x40, 0xc7, 0x58, 0x6d, 0x1c, 0x7b, 0xc5, 0x55, 0x37, 0x3d, 0x86, 0xdf, - 0xcc, 0x20, 0xb1, 0x23, 0xc6, 0x01, 0x67, 0xac, 0xe0, 0x25, 0x1e, 0xb5, - 0x80, 0x8a, 0x7b, 0x8f, 0x03, 0x10, 0x4d, 0xb7, 0xfa, 0x71, 0xa9, 0x1c, - 0x73, 0x88, 0x9b, 0x73, 0xf4, 0xe9, 0xf5, 0x91, 0xf3, 0xf3, 0x8c, 0x9d, - 0x06, 0x56, 0x1a, 0x87, 0x51, 0x69, 0x66, 0x9e, 0x35, 0xf7, 0x0f, 0xcb, - 0x45, 0x53, 0xfd, 0x06, 0xb6, 0xab, 0x30, 0x3c, 0x9e, 0xfe, 0x72, 0x7b, - 0xcf, 0xed, 0x67, 0xc7, 0x55, 0x47, 0x50, 0xfb, 0x7a, 0xc6, 0x8d, 0x8d, - 0xc3, 0x86, 0xcb, 0x9d, 0x11, 0x93, 0xe0, 0x6b, 0x6c, 0xb0, 0x37, 0xe3, - 0x61, 0x05, 0xda, 0x2f, 0xfa, 0x11, 0x2a, 0xc7, 0xbb, 0xe3, 0xfb, 0xc5, - 0x7e, 0x2c, 0x9a, 0x0a, 0x87, 0x37, 0xcb, 0x1f, 0x6f, 0x97, 0xbf, 0xde, - 0x16, 0x6d, 0x73, 0x11, 0xaa, 0x12, 0x06, 0x0a, 0x4f, 0x4b, 0xad, 0x86, - 0x33, 0xa5, 0x77, 0x3d, 0x5a, 0x73, 0x31, 0xcf, 0xe9, 0xc9, 0x33, 0xaf, - 0x8e, 0x3c, 0x43, 0x84, 0x95, 0x09, 0x69, 0x09, 0xf7, 0x81, 0xf6, 0x6a, - 0x6f, 0xbb, 0xa7, 0x16, 0x2c, 0x2b, 0x85, 0xcf, 0x2e, 0x94, 0xe9, 0x47, - 0x6d, 0x98, 0x0d, 0xa6, 0xa1, 0xb9, 0x55, 0x77, 0xc5, 0xce, 0x15, 0xca, - 0x38, 0xe1, 0x6f, 0x33, 0xf4, 0xf0, 0xb6, 0xd2, 0x61, 0x4b, 0x4b, 0xb1, - 0xcd, 0xd8, 0xe6, 0xf6, 0xa7, 0xa6, 0x39, 0x45, 0xb8, 0x73, 0xa9, 0xd9, - 0x9f, 0x4b, 0xcd, 0xfb, 0x5c, 0x6a, 0xc6, 0xe7, 0xb2, 0x0f, 0x97, 0xb0, - 0x89, 0x1f, 0x4b, 0x63, 0x7a, 0x83, 0xbf, 0x7f, 0x0c, 0xfe, 0x56, 0x83, - 0xd8, 0x81, 0x24, 0xfc, 0x74, 0x49, 0x00, 0xa6, 0xe5, 0x52, 0xfe, 0x8c, - 0x97, 0x6f, 0x63, 0xff, 0xf1, 0x58, 0xba, 0x50, 0x1c, 0x4b, 0x04, 0x41, - 0xfb, 0xa2, 0x97, 0x2d, 0x51, 0x67, 0xe2, 0x7b, 0x1e, 0x36, 0x3c, 0x95, - 0x21, 0xdc, 0x4d, 0xbe, 0xc8, 0xfb, 0xee, 0xf0, 0xd6, 0x58, 0x1f, 0xc5, - 0x89, 0xd5, 0x7a, 0x99, 0x3b, 0x89, 0x61, 0x94, 0xa8, 0x0f, 0x36, 0x83, - 0x09, 0xe3, 0x78, 0x09, 0xa5, 0x85, 0xa0, 0xae, 0xf4, 0x82, 0x6b, 0x19, - 0x72, 0x94, 0x68, 0x21, 0xe6, 0xa3, 0xab, 0xf4, 0x64, 0x6a, 0x6c, 0xd1, - 0x26, 0xae, 0x03, 0x06, 0x9c, 0x24, 0xb2, 0x4a, 0xc4, 0x16, 0x74, 0x1d, - 0x92, 0x1a, 0x31, 0x00, 0x77, 0x6d, 0xb5, 0x66, 0x53, 0x64, 0x6c, 0x3a, - 0x6e, 0x68, 0x5a, 0x9b, 0x47, 0xeb, 0x50, 0x9b, 0x74, 0xc2, 0x2c, 0x23, - 0x0b, 0x84, 0xab, 0xbb, 0xb5, 0x12, 0x26, 0x5b, 0x53, 0x6b, 0x38, 0x5a, - 0xe5, 0x15, 0xaf, 0x8c, 0x34, 0xed, 0xdd, 0xfd, 0xc0, 0x03, 0xa0, 0xd5, - 0x0b, 0x32, 0x11, 0x17, 0x70, 0x9d, 0xf7, 0x65, 0xaf, 0x1e, 0x6d, 0x5b, - 0x1f, 0x2e, 0x70, 0x2d, 0x05, 0x06, 0x0e, 0x62, 0x49, 0xd3, 0xc5, 0x50, - 0xba, 0x1a, 0xb2, 0x80, 0xc4, 0xb0, 0x40, 0xfc, 0xe7, 0xf2, 0xf5, 0x53, - 0x2d, 0x76, 0x81, 0xb6, 0xf1, 0x16, 0xe9, 0x9e, 0xc6, 0x88, 0x13, 0xe0, - 0x56, 0xd1, 0x5e, 0x9d, 0xf8, 0x68, 0xad, 0xdc, 0x20, 0x9e, 0xb9, 0xe9, - 0x82, 0x0b, 0x56, 0x51, 0x07, 0x8a, 0x28, 0x8d, 0xf7, 0x7b, 0x6f, 0xc6, - 0x38, 0xf7, 0x40, 0xd0, 0x75, 0xad, 0x78, 0xe6, 0xad, 0x9a, 0x39, 0xba, - 0xb1, 0xa9, 0xf1, 0x8f, 0x6a, 0xe5, 0xe1, 0xee, 0x3f, 0xba, 0x04, 0x18, - 0x6b, 0x47, 0xb5, 0xea, 0x8e, 0x25, 0xc0, 0xf2, 0x88, 0x78, 0x08, 0xca, - 0xe4, 0x82, 0x99, 0x62, 0x67, 0x53, 0x7c, 0x4b, 0x3c, 0x8e, 0x06, 0xaa, - 0x3d, 0xe2, 0xb3, 0xe1, 0x9a, 0x04, 0xee, 0x47, 0xe9, 0x7b, 0x1f, 0xb2, - 0xb9, 0x34, 0xe4, 0xfd, 0xb8, 0x71, 0xfd, 0x2e, 0x58, 0xa7, 0xd1, 0x79, - 0x2b, 0x1d, 0x65, 0x85, 0x33, 0x9f, 0xbf, 0x5f, 0x3f, 0xcd, 0x7a, 0x5a, - 0x6b, 0x2e, 0x8d, 0xe5, 0xcb, 0x09, 0x36, 0x76, 0x7b, 0x4f, 0x62, 0xa7, - 0xb7, 0x32, 0xcd, 0xbd, 0xaf, 0x5c, 0x2b, 0xdf, 0xea, 0x1d, 0xdc, 0x5f, - 0x7e, 0xee, 0xf0, 0xde, 0xf0, 0xef, 0xd5, 0x5c, 0x73, 0x32, 0xd5, 0xba, - 0x32, 0x96, 0x4b, 0xde, 0xd9, 0xbc, 0xea, 0x52, 0x46, 0xc4, 0xf7, 0x71, - 0xe7, 0x48, 0x6c, 0xe6, 0x91, 0x85, 0xa5, 0x45, 0xab, 0x75, 0xd5, 0x3c, - 0x59, 0x70, 0x71, 0x62, 0x1e, 0xaf, 0x2e, 0xcc, 0xe9, 0x52, 0x23, 0x70, - 0x33, 0x5b, 0x44, 0x67, 0xbf, 0xba, 0x30, 0x6f, 0x71, 0x1a, 0xac, 0xe3, - 0xaa, 0x25, 0x72, 0xbf, 0x7f, 0x4c, 0xff, 0xe1, 0x22, 0x87, 0xf7, 0xd4, - 0x85, 0x55, 0xcc, 0xd9, 0x31, 0x5d, 0x62, 0xef, 0xd8, 0x2c, 0xec, 0x03, - 0x27, 0x8d, 0x3e, 0xfc, 0xd4, 0x69, 0x1e, 0x7d, 0x2e, 0x09, 0x68, 0x3d, - 0x64, 0x16, 0xe8, 0x32, 0x6d, 0x6f, 0x85, 0x2d, 0x9e, 0x7c, 0x76, 0xdc, - 0xdb, 0x3c, 0x48, 0x59, 0x40, 0x12, 0x95, 0x51, 0xe6, 0x34, 0xa5, 0x0b, - 0xc7, 0x70, 0x54, 0x26, 0x32, 0x4f, 0x17, 0xd9, 0x00, 0x3a, 0x87, 0xe2, - 0x76, 0xa0, 0x41, 0x1b, 0x56, 0x75, 0x71, 0x21, 0xd7, 0x22, 0x82, 0x3d, - 0xcd, 0xea, 0x2a, 0x18, 0x39, 0x35, 0x0d, 0x47, 0x9f, 0x3b, 0x93, 0xa4, - 0xdc, 0x10, 0x85, 0xb7, 0x42, 0xcd, 0x2e, 0xd9, 0xde, 0x50, 0x76, 0x5c, - 0x4d, 0xb4, 0x01, 0xe8, 0xda, 0xcd, 0xab, 0x9c, 0x91, 0x3f, 0x5d, 0x14, - 0xa7, 0xec, 0x9d, 0x03, 0xcf, 0x47, 0x3e, 0xab, 0xe1, 0xbc, 0x85, 0x01, - 0x9f, 0x10, 0xcc, 0xd8, 0x4f, 0x51, 0x4e, 0x72, 0x7d, 0x2e, 0x4c, 0x72, - 0x66, 0x7a, 0xaf, 0x1c, 0xee, 0x69, 0x75, 0xe9, 0xe0, 0x7c, 0x4b, 0x89, - 0xbc, 0x78, 0xc4, 0xd0, 0xe5, 0x77, 0xe6, 0xca, 0x1e, 0x2d, 0x59, 0xee, - 0x7a, 0x0c, 0x0c, 0x05, 0x42, 0x53, 0xc1, 0x34, 0x70, 0x2c, 0xc3, 0xfd, - 0x6c, 0xb8, 0x0b, 0x0a, 0xf8, 0xce, 0x58, 0xb8, 0xbd, 0xb9, 0xde, 0xd6, - 0x45, 0x10, 0x25, 0x23, 0x3c, 0xb9, 0x54, 0x91, 0x7c, 0xed, 0x34, 0xb2, - 0xea, 0x38, 0x9f, 0xa2, 0x71, 0x90, 0x03, 0xe0, 0x99, 0x25, 0x47, 0xc5, - 0x51, 0x80, 0xda, 0x56, 0xe2, 0x0e, 0xb7, 0x26, 0x4f, 0xab, 0x5f, 0xf0, - 0x76, 0x14, 0x19, 0x8c, 0x9b, 0xbb, 0x69, 0xf3, 0xde, 0xc1, 0x99, 0xf8, - 0xc6, 0x33, 0xcb, 0x7d, 0xb1, 0x0a, 0x8d, 0x16, 0x3e, 0xd7, 0xf9, 0x63, - 0xa0, 0x36, 0x3f, 0x65, 0x6c, 0xa5, 0xa1, 0xf8, 0xd6, 0x80, 0x60, 0xda, - 0xc6, 0xce, 0x50, 0xda, 0xaa, 0xa1, 0xe7, 0xd2, 0x7b, 0x38, 0x5e, 0x26, - 0x68, 0xe2, 0xf7, 0xde, 0x6c, 0x75, 0x71, 0x1b, 0x82, 0x16, 0x4e, 0x7a, - 0x00, 0xef, 0x25, 0x5d, 0x1a, 0x78, 0x7f, 0x28, 0xdf, 0xd1, 0x9f, 0x0f, - 0xe9, 0xe2, 0xcf, 0xd6, 0x42, 0x44, 0x38, 0xfc, 0x31, 0x9c, 0xff, 0x84, - 0x6b, 0x6b, 0xe3, 0xf3, 0xc6, 0xed, 0x95, 0xfb, 0x5c, 0x8c, 0xd6, 0x04, - 0x36, 0xec, 0x59, 0xc6, 0xf7, 0xe8, 0x40, 0x13, 0xe7, 0x28, 0x1d, 0x54, - 0xbc, 0x92, 0xdb, 0x48, 0x51, 0xfd, 0x80, 0xb8, 0x34, 0x0c, 0xb8, 0xe5, - 0x25, 0x74, 0x0d, 0x56, 0xe7, 0x73, 0xdf, 0xbe, 0x91, 0xeb, 0x82, 0x6c, - 0x63, 0xf4, 0xf8, 0x80, 0x83, 0x57, 0x55, 0xdb, 0xdc, 0x68, 0x49, 0x2c, - 0xce, 0xd3, 0x18, 0xcc, 0x18, 0x76, 0x3e, 0x17, 0xa7, 0x3f, 0x57, 0xa7, - 0x3f, 0x63, 0x0b, 0xc3, 0xc7, 0x43, 0x96, 0x3f, 0xa9, 0x76, 0xfd, 0x60, - 0xb6, 0xce, 0x17, 0x72, 0xb9, 0x9a, 0xdb, 0xaa, 0x15, 0xff, 0x20, 0x4b, - 0x47, 0xb3, 0x7f, 0xd4, 0xa1, 0x03, 0x61, 0x6d, 0x65, 0x5c, 0x54, 0xb9, - 0xa1, 0x66, 0xf8, 0x62, 0xe0, 0x78, 0xd4, 0x76, 0xe8, 0xb8, 0x14, 0x35, - 0xe3, 0xe4, 0xab, 0x81, 0x08, 0xfc, 0x61, 0xdd, 0x57, 0xb4, 0x0b, 0xc7, - 0xb4, 0x05, 0xf5, 0x60, 0x03, 0xb5, 0x7c, 0xad, 0xf5, 0xbd, 0xcd, 0x36, - 0xd7, 0x98, 0x6b, 0xae, 0xfd, 0xe8, 0x79, 0xbd, 0x8e, 0x9e, 0x8f, 0xd6, - 0xdc, 0x1c, 0x97, 0x59, 0xb3, 0xb1, 0x1e, 0x20, 0x5c, 0x9f, 0xed, 0xe6, - 0x66, 0xeb, 0xe7, 0xbf, 0x6e, 0x0d, 0xc8, 0x5a, 0xa3, 0x7b, 0x5f, 0x98, - 0x2b, 0x1f, 0x5e, 0x2c, 0xf5, 0x06, 0x43, 0xc0, 0xbd, 0x7d, 0x91, 0xd7, - 0x04, 0x7e, 0xbe, 0xca, 0x99, 0xde, 0xc8, 0xc7, 0x1d, 0x7e, 0x0c, 0xeb, - 0xde, 0xf9, 0xfb, 0x18, 0xff, 0xef, 0x70, 0x67, 0x09, 0x9b, 0xb3, 0x8f, - 0x4b, 0xbf, 0x6f, 0xfc, 0x87, 0x27, 0x81, 0x90, 0x90, 0x8d, 0xf1, 0x2f, - 0xed, 0x54, 0x49, 0x65, 0x5b, 0xc8, 0xa7, 0x34, 0xf6, 0x31, 0x15, 0xdb, - 0x7d, 0xde, 0xbb, 0xd6, 0x3e, 0xd8, 0xf6, 0x19, 0x73, 0xc3, 0x7d, 0xa8, - 0x28, 0x03, 0x2d, 0xa8, 0x54, 0xd5, 0xc4, 0x12, 0x22, 0x68, 0x89, 0x3b, - 0x44, 0xf7, 0x56, 0xeb, 0xa9, 0x23, 0xd4, 0x2b, 0x7b, 0xb6, 0xe6, 0x97, - 0xf3, 0xcd, 0xb3, 0x95, 0x6d, 0x7a, 0xc7, 0xa2, 0x59, 0x1b, 0xfa, 0x94, - 0x84, 0xd6, 0xcb, 0xf7, 0x5e, 0x7b, 0xf6, 0x62, 0x22, 0xf7, 0x23, 0x77, - 0xe9, 0xb0, 0x0a, 0x36, 0x33, 0x38, 0x3c, 0xff, 0x50, 0x98, 0xf6, 0xd0, - 0x94, 0x74, 0x96, 0xce, 0x54, 0xe1, 0x2e, 0x45, 0xcc, 0x72, 0x3a, 0x3e, - 0x0c, 0xec, 0x71, 0xf8, 0xbc, 0xe2, 0x16, 0x8c, 0xe3, 0xd1, 0xe5, 0x1d, - 0x98, 0x16, 0xcb, 0xe3, 0x59, 0xa7, 0x87, 0xc1, 0xa0, 0xda, 0x1a, 0x86, - 0xa4, 0x97, 0x36, 0x36, 0x59, 0x6e, 0x23, 0x1b, 0xa7, 0xe5, 0x56, 0xc6, - 0xf1, 0xe1, 0x90, 0xb7, 0xb1, 0x8d, 0xc2, 0xdd, 0x3b, 0xfe, 0xc3, 0x74, - 0x6f, 0xf7, 0x13, 0x1a, 0x5f, 0xbd, 0x33, 0x0d, 0x2b, 0xf9, 0x9e, 0x05, - 0x77, 0x5c, 0xc2, 0xee, 0xb9, 0xa8, 0x38, 0x86, 0xd7, 0xde, 0x91, 0xf5, - 0xe2, 0x82, 0xcd, 0x44, 0xbb, 0x60, 0x89, 0xbf, 0xd8, 0xbc, 0x87, 0x3d, - 0x1b, 0xcd, 0x97, 0xf6, 0x41, 0x1c, 0x23, 0x77, 0xa7, 0x94, 0xd3, 0xee, - 0x53, 0x87, 0x37, 0x6f, 0xe9, 0x0c, 0x1e, 0x55, 0xf3, 0xd8, 0x7b, 0x2f, - 0xf9, 0x7e, 0x0c, 0x0f, 0x39, 0x90, 0xd9, 0xc6, 0xa0, 0x61, 0xd3, 0x30, - 0xe4, 0xbd, 0x11, 0xb1, 0xce, 0x13, 0x40, 0x1c, 0x2b, 0xd0, 0x1a, 0xce, - 0xe2, 0x89, 0x13, 0x7d, 0x2c, 0xb5, 0x0c, 0xa0, 0xaa, 0x6b, 0xae, 0xe6, - 0x30, 0x8a, 0x04, 0xb6, 0x4c, 0x4d, 0xc9, 0xad, 0x4c, 0x90, 0x71, 0xa7, - 0x5e, 0x94, 0x04, 0x65, 0x20, 0x9a, 0x64, 0xa1, 0xbd, 0x82, 0x5a, 0x50, - 0x70, 0xd3, 0x63, 0xcb, 0x04, 0x4b, 0x97, 0x3c, 0x62, 0x14, 0x9c, 0x3a, - 0xe9, 0x09, 0x78, 0x3a, 0x94, 0x73, 0x5b, 0x58, 0xe9, 0x4a, 0xba, 0x31, - 0x6e, 0x57, 0xfd, 0xdf, 0xd2, 0xe7, 0x49, 0x9c, 0xe2, 0x17, 0x94, 0xb1, - 0x4f, 0xcd, 0x5e, 0x5c, 0x93, 0x60, 0xd0, 0x27, 0x2a, 0x30, 0x2a, 0x0f, - 0x35, 0x1e, 0x0d, 0x0f, 0xa6, 0x2e, 0xc3, 0xf4, 0xf6, 0xac, 0x80, 0x8a, - 0x22, 0x50, 0x2c, 0x78, 0x1b, 0xa3, 0x21, 0x1a, 0x81, 0x07, 0x67, 0x3a, - 0x42, 0xd6, 0x0e, 0x99, 0xcd, 0x35, 0x23, 0x2e, 0xfd, 0xe2, 0xf7, 0x72, - 0xcf, 0xcf, 0x6e, 0x49, 0x14, 0x2c, 0x96, 0x77, 0x3c, 0x45, 0x32, 0x4e, - 0x6e, 0x5e, 0xb1, 0x0c, 0x61, 0xfb, 0xbd, 0x8d, 0x4d, 0x9a, 0x46, 0x2b, - 0xba, 0x38, 0xd2, 0x21, 0x52, 0x44, 0xff, 0xac, 0x1d, 0xf6, 0x5a, 0xbd, - 0x2d, 0xd7, 0xdb, 0x7b, 0xad, 0xfc, 0xe8, 0x4b, 0xa4, 0x34, 0xaa, 0x1b, - 0xc7, 0xd2, 0x37, 0x6d, 0x4d, 0xe7, 0xe2, 0x28, 0xb5, 0xf6, 0x3e, 0xd6, - 0x97, 0x45, 0xa1, 0xca, 0xf7, 0x96, 0xb0, 0x0a, 0xd4, 0x73, 0xd7, 0xb0, - 0x93, 0xbf, 0x1a, 0xbf, 0x26, 0x08, 0xf9, 0x8b, 0x81, 0xda, 0x1e, 0x83, - 0x99, 0xc6, 0x3e, 0x8a, 0x75, 0x0e, 0x22, 0x26, 0x0d, 0x9d, 0xc1, 0x34, - 0xd4, 0x54, 0x8f, 0x46, 0xf7, 0xe2, 0x4f, 0xe8, 0x5d, 0xfc, 0xea, 0x1b, - 0xeb, 0x8e, 0xff, 0x5c, 0xcd, 0x6c, 0x17, 0xa7, 0xcc, 0xcf, 0xf4, 0x19, - 0xfe, 0x57, 0xa3, 0x73, 0xf8, 0x7f, 0x0a, 0x0f, 0x56, 0x41, 0xb6, 0x8b, - 0x9d, 0xc7, 0x9f, 0x00, 0xd6, 0xfb, 0x57, 0x64, 0x9e, 0xe5, 0xa8, 0x89, - 0x00, 0xa6, 0xff, 0xd0, 0xe7, 0xf1, 0xb2, 0x1c, 0xa2, 0xdb, 0x88, 0xed, - 0xa6, 0xde, 0xc7, 0x8d, 0xcf, 0x58, 0x85, 0x1b, 0xe2, 0xea, 0x92, 0x58, - 0xa7, 0xd5, 0xd9, 0x48, 0x97, 0x89, 0x54, 0xd3, 0xda, 0xff, 0x57, 0x27, - 0x92, 0xcc, 0xf8, 0x6d, 0xaf, 0xe5, 0xdd, 0x5a, 0x91, 0xe9, 0x12, 0x4b, - 0xf2, 0x17, 0x07, 0xfd, 0x94, 0xb8, 0x18, 0xeb, 0x4e, 0xae, 0xd1, 0xd9, - 0xf6, 0x9a, 0x8b, 0xd6, 0x4a, 0x6e, 0x97, 0xa2, 0xe7, 0x1a, 0xbd, 0x6b, - 0x75, 0x1d, 0xa0, 0x31, 0x67, 0x65, 0x5a, 0xa2, 0xed, 0x1c, 0xa0, 0x5e, - 0xca, 0x5d, 0xd3, 0xeb, 0xdd, 0xb3, 0xf4, 0x4b, 0xcd, 0x41, 0xe7, 0xce, - 0xe0, 0xfe, 0xb8, 0xf0, 0xff, 0xb1, 0x8e, 0xa6, 0xab, 0x33, 0x92, 0x2f, - 0x5d, 0x8a, 0x1a, 0xc3, 0x0c, 0x69, 0x4a, 0xf5, 0xed, 0xdf, 0xa6, 0x51, - 0x0d, 0x91, 0xeb, 0xcc, 0x8e, 0x2d, 0xcb, 0xc8, 0x56, 0xc6, 0x8d, 0xd4, - 0x1b, 0x74, 0xe2, 0xd2, 0xb3, 0x0f, 0x81, 0xf8, 0x2e, 0x8c, 0xa5, 0x1c, - 0xeb, 0x7e, 0x35, 0x71, 0xac, 0xfb, 0xff, 0xc7, 0x48, 0x04, 0x07, 0x4c, - 0x7c, 0xa2, 0x8f, 0x05, 0xeb, 0xa2, 0xf1, 0xbd, 0xe0, 0x5d, 0x64, 0x69, - 0x77, 0xab, 0x82, 0xce, 0x35, 0x37, 0x8d, 0x3d, 0xba, 0x4f, 0xed, 0x62, - 0x00, 0xf9, 0xe8, 0x08, 0x4a, 0xd7, 0xf3, 0x97, 0x5a, 0xd1, 0x4b, 0x9a, - 0xbb, 0x44, 0x74, 0x4e, 0xe9, 0x53, 0xb2, 0x3b, 0x71, 0x6c, 0xad, 0x67, - 0x39, 0x6e, 0x17, 0x28, 0x93, 0x07, 0xcf, 0x41, 0x19, 0xe5, 0xd9, 0x0b, - 0xc8, 0x3d, 0xbd, 0x37, 0x53, 0xd3, 0xbd, 0x1a, 0x9b, 0xfa, 0x41, 0x06, - 0xb9, 0x16, 0x09, 0xb0, 0xd5, 0xce, 0x7c, 0x8b, 0x92, 0x71, 0x60, 0x87, - 0xce, 0x43, 0x7d, 0x69, 0xb8, 0xaf, 0x4d, 0xb6, 0x4d, 0x13, 0x7c, 0xa5, - 0x48, 0xb8, 0x25, 0xc0, 0x51, 0x6a, 0xe7, 0x71, 0x94, 0x68, 0x8b, 0x8e, - 0xf2, 0x69, 0x9e, 0x01, 0x7b, 0x9f, 0x65, 0x58, 0x54, 0x56, 0xd9, 0x67, - 0x3d, 0xf0, 0x1f, 0x6e, 0x03, 0xc9, 0x33, 0xac, 0x11, 0x32, 0x5a, 0x0f, - 0x5d, 0xa7, 0xc6, 0x93, 0x0b, 0xb7, 0x56, 0xf0, 0x1e, 0xe3, 0xdd, 0xa3, - 0x60, 0x28, 0xe1, 0xa8, 0x50, 0x0b, 0x7b, 0xd3, 0xa9, 0x11, 0x78, 0xd4, - 0x09, 0xbc, 0xc3, 0x4f, 0xf7, 0x65, 0x72, 0x92, 0x96, 0xab, 0x8d, 0x8c, - 0xf5, 0x8a, 0x3f, 0x5a, 0xed, 0x48, 0x87, 0x58, 0x2c, 0xfc, 0x18, 0xfa, - 0x92, 0x3a, 0xf4, 0x5b, 0x52, 0x4d, 0xa3, 0x73, 0xe1, 0xcb, 0x8a, 0x5c, - 0xea, 0x4d, 0x90, 0xbf, 0x18, 0xe8, 0xd6, 0x62, 0xc9, 0x2f, 0xdb, 0xff, - 0xf2, 0xbd, 0x85, 0x3f, 0xc1, 0xfe, 0x4a, 0x4b, 0x1b, 0xe4, 0x3f, 0xc6, - 0x57, 0xaa, 0xc5, 0x12, 0x37, 0x42, 0x6f, 0x7d, 0x83, 0x58, 0x35, 0x22, - 0x65, 0xa6, 0xde, 0xa7, 0xe9, 0xe2, 0x8d, 0x5f, 0x2d, 0x0d, 0xd8, 0xb9, - 0x31, 0x2f, 0xdd, 0x71, 0xa3, 0xe0, 0x59, 0xad, 0x88, 0xb9, 0x3e, 0xe5, - 0x30, 0x37, 0x5d, 0x39, 0x35, 0xa3, 0xd1, 0xbc, 0x64, 0x5d, 0xe8, 0x74, - 0x5e, 0x7b, 0xee, 0xb7, 0xd1, 0xf4, 0x23, 0x06, 0xa1, 0x8f, 0x3a, 0x43, - 0x78, 0xf8, 0x42, 0x1f, 0x81, 0x4a, 0x9b, 0x23, 0xad, 0xa5, 0x1b, 0xd7, - 0x16, 0xf6, 0x1b, 0x23, 0x3f, 0xb1, 0x0a, 0x73, 0xeb, 0x03, 0xe1, 0x1a, - 0x5d, 0x18, 0xf0, 0xc8, 0xc6, 0x35, 0x63, 0x42, 0xa7, 0x33, 0x84, 0x1d, - 0xf0, 0x3f, 0xb9, 0xe1, 0x5a, 0xee, 0x91, 0x73, 0xfb, 0xff, 0x7c, 0xaf, - 0xb1, 0x10, 0xaf, 0xf1, 0x63, 0xe3, 0x76, 0x72, 0x3f, 0x52, 0x15, 0x73, - 0x9c, 0xc9, 0x80, 0x3a, 0x2c, 0x41, 0x77, 0x07, 0xe1, 0x56, 0x8a, 0x86, - 0xe1, 0xc1, 0x57, 0x9f, 0x49, 0x93, 0xca, 0x6b, 0xba, 0xfb, 0x09, 0x42, - 0xc0, 0x3d, 0x1c, 0x6c, 0x16, 0x7d, 0x4f, 0x89, 0xd0, 0x9d, 0xf8, 0xfa, - 0xaa, 0xa3, 0xc4, 0xca, 0x9c, 0x1d, 0xb3, 0x7b, 0x98, 0x1b, 0x2b, 0x07, - 0x9e, 0xd5, 0xd2, 0xd3, 0x33, 0x12, 0xc0, 0x13, 0x11, 0xb0, 0xab, 0x50, - 0xc6, 0x56, 0xda, 0xa7, 0x75, 0xba, 0x5c, 0x10, 0xaa, 0x1a, 0x1e, 0xda, - 0x67, 0x1b, 0x98, 0x1b, 0xb3, 0xf4, 0xb8, 0xda, 0xcf, 0x4e, 0xf0, 0x6c, - 0x1b, 0x50, 0x5c, 0xe4, 0x0e, 0x5c, 0x1d, 0xb6, 0xca, 0x52, 0x96, 0xde, - 0x6b, 0xd7, 0xe8, 0xfc, 0x86, 0xce, 0xba, 0xff, 0x35, 0xb3, 0xee, 0x7f, - 0x0c, 0xa5, 0x75, 0xf2, 0x76, 0xcb, 0x18, 0x9b, 0x62, 0xf6, 0x7e, 0xd4, - 0xfe, 0x81, 0x4c, 0xba, 0x96, 0x89, 0xa6, 0x55, 0xcd, 0xac, 0x97, 0xf1, - 0x57, 0xd5, 0xe8, 0xfd, 0xeb, 0xce, 0x2b, 0x39, 0x9b, 0x3a, 0xfb, 0xfd, - 0x30, 0x38, 0xf8, 0xde, 0xb6, 0x8d, 0x74, 0x8e, 0xde, 0x00, 0xf9, 0xde, - 0x80, 0x25, 0x5c, 0xbf, 0xe6, 0x12, 0x3a, 0x17, 0xf6, 0x79, 0xf4, 0xfb, - 0x35, 0x57, 0xcd, 0xce, 0xad, 0x3a, 0x77, 0x7a, 0xa4, 0x28, 0x7a, 0x5e, - 0x2a, 0x3f, 0xe9, 0x11, 0xf4, 0xe8, 0x36, 0x5f, 0x3a, 0x1d, 0x37, 0x1f, - 0xec, 0x7c, 0xe1, 0xf6, 0x9e, 0xf3, 0x20, 0x38, 0xf7, 0xfb, 0x3f, 0x4e, - 0xfd, 0xf6, 0x4e, 0x5d, 0x3f, 0x46, 0x91, 0xc7, 0x6d, 0xf7, 0x2e, 0x36, - 0x64, 0x5b, 0x3c, 0xf2, 0xbd, 0x7e, 0xca, 0x10, 0x14, 0xd5, 0xf2, 0x2b, - 0x58, 0x39, 0x23, 0xae, 0x0b, 0x01, 0x8f, 0xb1, 0x90, 0x78, 0xcd, 0xc0, - 0x34, 0xef, 0x05, 0x21, 0x69, 0x62, 0xfa, 0x99, 0x9a, 0xb3, 0x9d, 0xaf, - 0xb8, 0x8c, 0x95, 0xd9, 0x63, 0x41, 0x66, 0xee, 0x18, 0x20, 0x92, 0x94, - 0xa2, 0x7a, 0x1d, 0xb8, 0xff, 0x10, 0x45, 0x93, 0xf0, 0x1a, 0xd1, 0xd7, - 0x2e, 0x0a, 0x59, 0xc1, 0x44, 0x49, 0x2a, 0x1d, 0x3e, 0x6e, 0x17, 0x7f, - 0xc5, 0x36, 0x7f, 0x8f, 0xbb, 0xd4, 0xea, 0xd1, 0x71, 0x97, 0x3f, 0xd6, - 0x06, 0xfa, 0xf8, 0x01, 0x70, 0x0c, 0xd0, 0x1c, 0xaa, 0x15, 0xed, 0xb8, - 0x14, 0xa0, 0x23, 0x5a, 0x16, 0x00, 0x97, 0xff, 0x0e, 0x6e, 0xaa, 0x0d, - 0x86, 0x60, 0xd5, 0x95, 0xe1, 0xa8, 0x53, 0xc7, 0xa4, 0x50, 0x20, 0x38, - 0x2a, 0x3d, 0xc7, 0xc2, 0x21, 0xc4, 0xd1, 0xed, 0xef, 0x18, 0xd7, 0x3a, - 0xb7, 0x43, 0xde, 0x6e, 0x5e, 0xd8, 0x78, 0xc2, 0xeb, 0x52, 0xc8, 0xaa, - 0xce, 0xf5, 0xfb, 0xde, 0x73, 0xbf, 0x7f, 0x4d, 0xd7, 0xe8, 0x5c, 0x0e, - 0x8c, 0x89, 0x67, 0xd0, 0xbf, 0x7d, 0x5f, 0x79, 0x19, 0x6f, 0x75, 0xd5, - 0x9a, 0x98, 0xcb, 0xd4, 0x4b, 0x3f, 0xee, 0xb4, 0xa1, 0x65, 0x37, 0xc9, - 0x25, 0x17, 0xe6, 0xbf, 0xbe, 0xba, 0x0f, 0x60, 0x6a, 0xce, 0x80, 0xbb, - 0x8f, 0x97, 0xaf, 0x63, 0x9f, 0xd0, 0xe2, 0x6b, 0x8d, 0xa8, 0x6c, 0xfb, - 0x8c, 0x8e, 0xbd, 0x0b, 0x7a, 0xe8, 0x84, 0xf1, 0xe8, 0xf7, 0x09, 0x63, - 0x46, 0x31, 0x4e, 0xf5, 0x61, 0x00, 0x30, 0x2e, 0xea, 0xa1, 0x42, 0xe9, - 0xf6, 0x83, 0x79, 0x71, 0x2d, 0xd4, 0x53, 0xae, 0xf3, 0xbb, 0x71, 0x42, - 0x19, 0x6a, 0x26, 0xdb, 0xf2, 0xe1, 0x58, 0x07, 0xef, 0x58, 0xbc, 0x8d, - 0xef, 0xff, 0x77, 0x5c, 0x8a, 0x26, 0x79, 0x7e, 0x80, 0xfc, 0x99, 0x7e, - 0x4d, 0xc0, 0x34, 0xb6, 0x0b, 0xdb, 0x0d, 0x34, 0xc8, 0x5c, 0x3e, 0x79, - 0xa8, 0x63, 0x9b, 0x0d, 0x08, 0xa7, 0x96, 0x41, 0xc3, 0xd4, 0x76, 0x5d, - 0xb9, 0x33, 0x1e, 0x12, 0x10, 0x47, 0x65, 0xd1, 0xb6, 0xf5, 0x33, 0x54, - 0xf4, 0x4f, 0x73, 0xe7, 0x9d, 0xd8, 0x66, 0xf5, 0xd3, 0xd7, 0x36, 0x71, - 0xed, 0xe3, 0x0f, 0x8f, 0xa6, 0x78, 0x1a, 0xfc, 0xb4, 0x15, 0x0a, 0xc8, - 0x8b, 0xe8, 0xfa, 0x01, 0x67, 0x3b, 0x7b, 0x63, 0x9c, 0xda, 0x04, 0x2e, - 0x15, 0xbe, 0x86, 0xcb, 0x42, 0x4e, 0xd5, 0xe8, 0x6c, 0x6a, 0x1e, 0x3c, - 0x76, 0x58, 0x26, 0x73, 0x9f, 0x66, 0x3f, 0xf9, 0x92, 0x68, 0x3f, 0x38, - 0x3e, 0x51, 0x6d, 0x39, 0x73, 0x3a, 0xd3, 0xaf, 0x43, 0x80, 0x2f, 0xbd, - 0xc9, 0x96, 0xa4, 0x3f, 0x6b, 0xba, 0x3a, 0x79, 0x59, 0xc3, 0x0e, 0xfe, - 0x8f, 0x81, 0xd4, 0x59, 0xbf, 0xae, 0x6f, 0x54, 0x8d, 0xde, 0xc6, 0x65, - 0x7b, 0x0b, 0x1a, 0xfd, 0xb6, 0x4a, 0xe5, 0x7b, 0x1b, 0xc7, 0xd2, 0x17, - 0x5d, 0x89, 0xe4, 0xe8, 0xf9, 0x54, 0x2e, 0xe5, 0xe0, 0x07, 0x57, 0x5a, - 0x9a, 0x8b, 0x98, 0x0c, 0xe0, 0x96, 0x48, 0x8a, 0x83, 0x67, 0x8d, 0xd3, - 0x77, 0x72, 0xd5, 0xfa, 0xd7, 0x30, 0xb7, 0xda, 0xf7, 0x35, 0xcc, 0x32, - 0xa2, 0x94, 0xfc, 0xd2, 0xb0, 0x0e, 0x64, 0x70, 0x3a, 0x3a, 0xe5, 0xe3, - 0x0e, 0x82, 0x7a, 0xbf, 0xc5, 0x71, 0xf5, 0x72, 0xd9, 0x9b, 0x87, 0x8b, - 0x5a, 0x23, 0x01, 0x9e, 0x0f, 0x35, 0x5c, 0xee, 0x7b, 0x50, 0x95, 0x94, - 0xaf, 0xa1, 0xc8, 0x99, 0xbd, 0x76, 0x89, 0xc2, 0x6c, 0xa9, 0xaf, 0x53, - 0x97, 0x3f, 0x13, 0x17, 0xb4, 0x2a, 0x75, 0xfc, 0x41, 0xa6, 0x38, 0x70, - 0x77, 0x88, 0x5a, 0x34, 0x2f, 0x6d, 0x94, 0xb8, 0x70, 0xf7, 0x1e, 0xde, - 0xdd, 0x21, 0xdd, 0xdb, 0x35, 0x63, 0x6f, 0xde, 0x60, 0xfe, 0xfa, 0xf2, - 0x4e, 0xa8, 0x0d, 0x49, 0xbf, 0x70, 0x72, 0xa4, 0x84, 0x89, 0x12, 0x47, - 0x33, 0x88, 0xb3, 0x68, 0xf1, 0x10, 0x59, 0xb5, 0xe8, 0x42, 0x5d, 0x5a, - 0x22, 0x8d, 0x6d, 0x1a, 0xfe, 0x35, 0x6e, 0x11, 0x81, 0xe3, 0x51, 0x35, - 0x2d, 0x91, 0xa7, 0xa0, 0x6e, 0x27, 0x8d, 0xd3, 0x23, 0xa8, 0x2c, 0x24, - 0x09, 0xe2, 0x77, 0xa4, 0xb5, 0xdc, 0x2f, 0x3c, 0xa8, 0x40, 0x52, 0xcf, - 0x61, 0x04, 0xa3, 0xa8, 0xa6, 0x99, 0x9d, 0xd2, 0x57, 0xd2, 0x97, 0x6e, - 0x02, 0x27, 0x06, 0x0f, 0x67, 0x57, 0x2f, 0xab, 0x46, 0x6f, 0x44, 0x4b, - 0xf1, 0x84, 0x6a, 0x37, 0xbe, 0xd2, 0x12, 0x16, 0x20, 0xcf, 0x23, 0x29, - 0xcf, 0x89, 0x43, 0xb7, 0x7d, 0xaf, 0x2e, 0xfd, 0x78, 0xe0, 0xa6, 0x61, - 0x6e, 0xb9, 0x09, 0xa6, 0x38, 0xe8, 0xda, 0x34, 0x67, 0x5b, 0x62, 0x4e, - 0x12, 0xd9, 0x12, 0x2e, 0xb0, 0x49, 0x73, 0xd8, 0x3b, 0xb6, 0x87, 0x63, - 0x9d, 0xd1, 0xd8, 0x99, 0x6e, 0xcc, 0xee, 0x8c, 0x12, 0x68, 0xba, 0x14, - 0xaf, 0xa9, 0x15, 0xab, 0xa9, 0x16, 0x97, 0x4e, 0x0a, 0x4e, 0x70, 0x5d, - 0xd0, 0xc6, 0x1a, 0xb3, 0x98, 0xf0, 0x10, 0x75, 0x9a, 0xee, 0x4a, 0xee, - 0xd6, 0x71, 0x8c, 0xfb, 0x26, 0x39, 0xaa, 0x06, 0x51, 0x09, 0xf8, 0x3b, - 0x08, 0x61, 0x66, 0xf6, 0xc5, 0x72, 0x96, 0xa3, 0x1c, 0x18, 0x88, 0x52, - 0x5a, 0xe5, 0x89, 0x38, 0x6e, 0xba, 0xe1, 0xbf, 0x70, 0xab, 0x0f, 0x78, - 0xa0, 0x43, 0xae, 0x5c, 0x0e, 0x70, 0x38, 0xcf, 0x90, 0x94, 0xba, 0x33, - 0x4a, 0xa8, 0xd0, 0x43, 0xc0, 0xec, 0xba, 0xd5, 0xdc, 0xee, 0x58, 0x4f, - 0x5d, 0x5e, 0xa3, 0x6f, 0xa9, 0x24, 0xb6, 0x25, 0x53, 0x19, 0x20, 0x51, - 0x99, 0x60, 0x93, 0x30, 0x49, 0x61, 0x4e, 0x75, 0x35, 0xab, 0xfe, 0x2a, - 0x5a, 0x99, 0x95, 0xfd, 0x76, 0xfe, 0xc7, 0x19, 0x06, 0x03, 0xf5, 0xf6, - 0xc6, 0x47, 0x68, 0xc1, 0xb4, 0x61, 0xcf, 0xd7, 0xb1, 0xb9, 0x81, 0xbe, - 0x21, 0x39, 0x2e, 0xed, 0x48, 0x6c, 0x60, 0x7c, 0xb5, 0x43, 0xfd, 0x15, - 0xef, 0xc2, 0xd9, 0xe3, 0x67, 0x23, 0x0d, 0x5c, 0xcf, 0x32, 0xba, 0x3b, - 0x79, 0xe9, 0x34, 0xba, 0x43, 0x55, 0xbe, 0xe7, 0xd8, 0xcd, 0xa5, 0x30, - 0x07, 0x2d, 0x1d, 0xd3, 0x35, 0x49, 0x21, 0xf3, 0x47, 0xa8, 0xd7, 0x8f, - 0xa9, 0xe6, 0x53, 0x63, 0xcf, 0xe7, 0xe4, 0xea, 0x82, 0x37, 0x51, 0x88, - 0x36, 0xb5, 0xbf, 0x4f, 0x1c, 0x11, 0xea, 0x6c, 0x7a, 0xf0, 0x70, 0xd9, - 0x68, 0xe1, 0x8b, 0x52, 0xd5, 0x67, 0x30, 0x0a, 0x29, 0x90, 0xa7, 0xe0, - 0x13, 0xe2, 0xe9, 0x6b, 0x29, 0x7f, 0x16, 0x8f, 0x16, 0xc2, 0xdb, 0x59, - 0xac, 0x23, 0x03, 0xc3, 0x9f, 0x56, 0x56, 0x9f, 0x85, 0xfd, 0xaf, 0xdc, - 0x09, 0x17, 0x46, 0x3f, 0x23, 0xe2, 0xb0, 0x16, 0xb0, 0x67, 0xc9, 0xc7, - 0x2a, 0xfa, 0x8d, 0xdb, 0x0b, 0x36, 0x4b, 0x9b, 0xa2, 0x51, 0x7d, 0x1e, - 0xa5, 0x9b, 0x51, 0x63, 0x3e, 0xd7, 0x8d, 0x54, 0xc4, 0x2a, 0xf7, 0x1d, - 0xef, 0x15, 0xf6, 0x56, 0x6a, 0x34, 0xc4, 0x15, 0xa2, 0xa9, 0x19, 0x89, - 0x9a, 0xfd, 0xd2, 0xa9, 0x5a, 0xa3, 0x78, 0x8d, 0xa6, 0x4b, 0x3c, 0x69, - 0xc8, 0x9f, 0x03, 0xad, 0x67, 0xdb, 0xa5, 0x6a, 0x7b, 0x54, 0x97, 0xe7, - 0xfe, 0x2b, 0x5b, 0x0b, 0x53, 0x7b, 0xf7, 0xdf, 0xb1, 0xbc, 0x04, 0x2a, - 0xe9, 0x87, 0xd0, 0xd3, 0x07, 0xaf, 0x22, 0x7b, 0x28, 0xeb, 0xf5, 0x06, - 0x41, 0x59, 0xe9, 0xde, 0x15, 0x03, 0x77, 0x79, 0x2b, 0xa4, 0x6a, 0x44, - 0x28, 0x42, 0x72, 0xbc, 0xc3, 0x30, 0x74, 0xd4, 0xfa, 0x4e, 0x01, 0xef, - 0x46, 0x6d, 0x96, 0x1f, 0x07, 0x93, 0x1c, 0xbb, 0xd9, 0xcb, 0x0d, 0x86, - 0xe5, 0x7a, 0x87, 0x61, 0x91, 0x1b, 0x09, 0xc3, 0xde, 0x96, 0x5c, 0x29, - 0x46, 0xc1, 0xdc, 0xd2, 0x4c, 0x18, 0x88, 0xca, 0x0b, 0xa0, 0x06, 0x3d, - 0x00, 0x82, 0xec, 0x32, 0x08, 0x73, 0xfd, 0xee, 0x45, 0x47, 0x98, 0x69, - 0xf4, 0xaf, 0x36, 0xb6, 0xff, 0xa2, 0xad, 0xfd, 0xc7, 0x23, 0x2a, 0xcd, - 0xf3, 0x7f, 0x21, 0x42, 0x01, 0xb0, 0x5e, 0x2b, 0x22, 0x96, 0xf1, 0x72, - 0x31, 0xcc, 0x0e, 0xe8, 0x1f, 0xa5, 0x50, 0x22, 0x04, 0xa8, 0x43, 0x6f, - 0x09, 0x3a, 0x07, 0x98, 0x58, 0x5d, 0x78, 0x99, 0x74, 0x79, 0xf3, 0x71, - 0x22, 0xa3, 0x89, 0x06, 0xfd, 0x22, 0xcd, 0xf2, 0x66, 0x0d, 0x7c, 0x4f, - 0xaa, 0xe0, 0x6f, 0x6c, 0xbb, 0xa0, 0xd5, 0x7a, 0x63, 0xae, 0x45, 0xaa, - 0xa1, 0xd1, 0x24, 0x99, 0xe8, 0x00, 0xdf, 0x74, 0x5c, 0x4f, 0xdc, 0x18, - 0xc5, 0xcd, 0x98, 0x65, 0xd2, 0x22, 0xa5, 0xcf, 0x28, 0x75, 0x9b, 0x66, - 0x81, 0x6f, 0x0b, 0x8f, 0xa3, 0x2d, 0x5d, 0xbb, 0xbb, 0xc4, 0xe9, 0x23, - 0xa0, 0xba, 0xb4, 0xed, 0x3b, 0xb5, 0x0b, 0xc5, 0xa3, 0x1b, 0xf5, 0x87, - 0x39, 0x0c, 0xe5, 0xa8, 0x95, 0x42, 0xa7, 0x90, 0xe7, 0x10, 0x50, 0x4b, - 0x0e, 0xde, 0x9e, 0x93, 0xd1, 0xe6, 0x30, 0x60, 0x96, 0x4b, 0x3f, 0x5d, - 0xd2, 0x59, 0x7b, 0x62, 0xf3, 0x79, 0x82, 0xb9, 0x5f, 0xf0, 0x76, 0xb6, - 0x96, 0x90, 0x26, 0xa2, 0x2a, 0x2d, 0xf9, 0x46, 0x09, 0x87, 0x0a, 0x4e, - 0xbe, 0x1c, 0x66, 0x20, 0xc7, 0xfa, 0x9b, 0x25, 0xd0, 0x47, 0x16, 0x88, - 0xe9, 0x7b, 0xbe, 0x7b, 0x23, 0x9e, 0x1f, 0xfd, 0xc2, 0xb7, 0x0d, 0xc0, - 0x2e, 0xc3, 0xfb, 0xcc, 0x99, 0x61, 0xec, 0x0f, 0x38, 0xd7, 0x4c, 0x5f, - 0x0f, 0x3b, 0x1b, 0xef, 0xc7, 0x10, 0xff, 0xf0, 0x6e, 0x9b, 0x9b, 0x4e, - 0xf7, 0x06, 0x6b, 0x1e, 0x64, 0xdc, 0xd9, 0x86, 0x3a, 0x74, 0x8b, 0x29, - 0x79, 0xeb, 0x43, 0xbe, 0x25, 0x2d, 0x4d, 0x0b, 0xef, 0x5c, 0x26, 0xf1, - 0x13, 0xe8, 0x40, 0x07, 0xd4, 0xff, 0x4b, 0x96, 0x02, 0xa0, 0x47, 0x3b, - 0x78, 0x6f, 0x0c, 0xcf, 0xb6, 0x19, 0x4d, 0x75, 0x9d, 0x8e, 0x58, 0x2d, - 0xad, 0x41, 0x2f, 0x25, 0x42, 0x0a, 0xaa, 0x61, 0x95, 0x6f, 0x00, 0xd7, - 0xa8, 0x8b, 0x6e, 0x15, 0xa7, 0x70, 0xb8, 0x13, 0xe4, 0x14, 0x7c, 0x2e, - 0x1d, 0x6c, 0x8b, 0x09, 0x98, 0xc7, 0x72, 0xb5, 0xa2, 0xa4, 0xa7, 0x7a, - 0x54, 0x3e, 0x9e, 0x6d, 0x04, 0xaf, 0xce, 0x8a, 0xa8, 0xe8, 0xc1, 0x50, - 0x27, 0x78, 0x8a, 0x0c, 0x9e, 0x02, 0x61, 0xf8, 0xb6, 0x7a, 0x4d, 0x09, - 0x90, 0x52, 0x2c, 0x2e, 0x6c, 0xb5, 0xb2, 0x84, 0x79, 0xab, 0xf4, 0xb5, - 0x70, 0x88, 0x9b, 0x9a, 0x0b, 0x7b, 0x77, 0xc4, 0x07, 0x9c, 0xd6, 0x2f, - 0x30, 0x25, 0x1e, 0x49, 0xaf, 0x2b, 0xe6, 0xe4, 0x19, 0x76, 0x3f, 0xe2, - 0x28, 0xbf, 0xee, 0xa5, 0x5f, 0x89, 0x74, 0xb6, 0x59, 0xe2, 0xa5, 0x60, - 0x12, 0x49, 0xe8, 0x0d, 0x7c, 0x3a, 0x8a, 0x89, 0x0e, 0xf1, 0xd7, 0xf1, - 0xac, 0xf8, 0xc3, 0x03, 0x78, 0xc4, 0x7c, 0x2a, 0xac, 0x74, 0x8c, 0x5b, - 0xae, 0x87, 0xde, 0xc4, 0x78, 0x08, 0xc6, 0x49, 0xc2, 0x00, 0x96, 0xad, - 0x1f, 0x26, 0x40, 0x10, 0x46, 0x17, 0xdb, 0xcb, 0xf4, 0xef, 0x2a, 0x93, - 0xab, 0xf1, 0xf5, 0x6b, 0x5c, 0x83, 0xa8, 0x58, 0xfa, 0xab, 0xd4, 0xfe, - 0x84, 0x81, 0xb3, 0x5d, 0xfc, 0x75, 0x88, 0x97, 0x20, 0x42, 0xb2, 0xbb, - 0x16, 0x1f, 0xac, 0x4b, 0x8b, 0x0f, 0x35, 0xb8, 0x91, 0x2d, 0xda, 0xd5, - 0x35, 0xbd, 0x33, 0x4e, 0xba, 0x8c, 0x4e, 0xb9, 0x88, 0x41, 0x80, 0xa5, - 0x1c, 0x0f, 0x59, 0x63, 0x19, 0x8e, 0x84, 0x41, 0xad, 0x87, 0x29, 0x2d, - 0x75, 0xf2, 0x27, 0x9c, 0xe5, 0x8f, 0xbf, 0xac, 0xed, 0xb0, 0x7a, 0x58, - 0x4f, 0xd6, 0x6c, 0x6d, 0x09, 0xa1, 0xdb, 0x55, 0xdf, 0x92, 0xcf, 0xa4, - 0xb6, 0x65, 0xa8, 0x7b, 0xa5, 0xc4, 0xd4, 0xcc, 0x75, 0x21, 0x6c, 0xcb, - 0xf7, 0xbe, 0xf4, 0xd5, 0xeb, 0x55, 0x80, 0xa3, 0x13, 0x77, 0xbd, 0x5f, - 0xab, 0x0e, 0xe6, 0xb7, 0x33, 0xde, 0xad, 0x5c, 0x1b, 0xf7, 0xb9, 0xb8, - 0xfa, 0x89, 0x70, 0x49, 0xde, 0x99, 0x40, 0xe7, 0xf4, 0x71, 0x8f, 0x63, - 0x19, 0x1b, 0x33, 0x6c, 0x1d, 0xfb, 0xb5, 0x29, 0xb2, 0xee, 0xcf, 0x1a, - 0xbd, 0xa1, 0x23, 0xb5, 0x3b, 0xce, 0xf8, 0xa6, 0x93, 0x0d, 0x0b, 0xea, - 0x68, 0x13, 0x58, 0x91, 0x36, 0xe0, 0x83, 0x0d, 0xc1, 0x48, 0x95, 0x35, - 0xb5, 0xbd, 0x69, 0x67, 0xe4, 0x01, 0xbf, 0xf6, 0xc1, 0x80, 0xe4, 0x7b, - 0xb5, 0xdc, 0x82, 0x61, 0x69, 0x8f, 0xbe, 0x9e, 0x28, 0xdc, 0xc5, 0x53, - 0x64, 0x15, 0x7a, 0xe4, 0x62, 0x10, 0xb7, 0xed, 0xd5, 0x9d, 0xc5, 0x7e, - 0x63, 0xf5, 0x80, 0x5c, 0x57, 0xb2, 0xac, 0x16, 0x8a, 0xd4, 0xe5, 0x7b, - 0xc3, 0x6d, 0x79, 0xd5, 0x19, 0x0f, 0xaf, 0x0a, 0x3b, 0xf6, 0x3e, 0xdd, - 0x64, 0x7a, 0x36, 0x83, 0xe9, 0x59, 0xcd, 0xa5, 0x3e, 0xec, 0x64, 0xda, - 0x87, 0xb1, 0xa2, 0xea, 0x5f, 0xea, 0xe0, 0x72, 0x77, 0xb0, 0x1f, 0x7b, - 0x18, 0x05, 0xdc, 0x2a, 0xac, 0xee, 0x36, 0x49, 0xbe, 0xc3, 0xff, 0x4f, - 0x73, 0xfe, 0xab, 0xb1, 0xff, 0xd1, 0xf8, 0xbd, 0x5a, 0xf3, 0x20, 0xba, - 0x9a, 0xdf, 0x4a, 0x4f, 0xcc, 0x90, 0xea, 0xc8, 0xc7, 0xf7, 0x06, 0xdd, - 0x52, 0xb9, 0xac, 0x7c, 0x8b, 0x0f, 0x47, 0x8e, 0xbe, 0xb4, 0xe0, 0x21, - 0xff, 0x88, 0xa0, 0x60, 0x0b, 0x5f, 0xe3, 0xff, 0x7c, 0xf7, 0x0c, 0x73, - 0x3e, 0x3c, 0x3d, 0x6e, 0x97, 0xe3, 0x1b, 0xc6, 0x33, 0x4f, 0xeb, 0xfa, - 0xe4, 0x76, 0x60, 0x9f, 0xae, 0x6f, 0x7b, 0x8e, 0x7e, 0x7d, 0x17, 0x5c, - 0xcb, 0x1a, 0x31, 0x0a, 0x32, 0x9e, 0x6b, 0x12, 0xf1, 0xf3, 0x82, 0x5b, - 0x88, 0xaf, 0x13, 0xac, 0x76, 0x3a, 0x1b, 0x69, 0x09, 0xda, 0x7d, 0xde, - 0x7b, 0xac, 0x1c, 0x3c, 0xd6, 0x7e, 0x54, 0xe3, 0x6c, 0x17, 0xc2, 0x55, - 0x77, 0x22, 0x3a, 0x9d, 0x8b, 0xf1, 0x38, 0xc8, 0x40, 0xb4, 0x0b, 0xb8, - 0xc3, 0x71, 0x61, 0x35, 0xa0, 0x5b, 0x98, 0x33, 0x5e, 0x04, 0xea, 0x9d, - 0x70, 0x9d, 0xde, 0x8b, 0xb6, 0x57, 0xd8, 0x98, 0x88, 0x7a, 0xe3, 0xe5, - 0xdf, 0x45, 0x6a, 0xa1, 0x69, 0x7c, 0x63, 0x22, 0x1a, 0x79, 0xfa, 0xed, - 0x9d, 0xf6, 0x77, 0x4c, 0x94, 0xa1, 0xbb, 0xb7, 0xe5, 0xdd, 0x7d, 0xd0, - 0x6d, 0x68, 0x03, 0x2c, 0x54, 0xfb, 0x65, 0xb2, 0xbe, 0x5f, 0xe7, 0xea, - 0x3b, 0x64, 0x7b, 0x0f, 0x01, 0xe8, 0xfd, 0x3e, 0xba, 0xb3, 0xe3, 0xb3, - 0x4b, 0x17, 0x72, 0x3d, 0xe6, 0x58, 0x99, 0x08, 0xb2, 0x38, 0x84, 0x3c, - 0x82, 0x15, 0x57, 0x07, 0xa3, 0x4e, 0x03, 0x56, 0x37, 0xa2, 0x94, 0xba, - 0x1c, 0xdc, 0x86, 0xc2, 0x95, 0x10, 0x8f, 0xdb, 0x6a, 0x5c, 0xaf, 0xe7, - 0x81, 0x6c, 0x1a, 0xf3, 0x1f, 0x7e, 0xbf, 0xf2, 0xee, 0x6d, 0xe5, 0x7f, - 0xff, 0x3f, 0x8e, 0xfe, 0xfe, 0x71, 0x34, 0x52, 0xa9, 0xc9, 0xe4, 0xed, - 0x99, 0xd2, 0x71, 0xbb, 0x27, 0x23, 0xd9, 0x2e, 0xb9, 0x9d, 0x6f, 0x09, - 0x3e, 0xce, 0xfd, 0xd9, 0x09, 0x63, 0x51, 0x3c, 0xc3, 0x65, 0xdd, 0xdc, - 0x6b, 0x1f, 0x97, 0x47, 0xfd, 0x44, 0x78, 0x56, 0xb8, 0x3b, 0xaa, 0x8d, - 0xc5, 0xde, 0x8e, 0x22, 0x10, 0x16, 0x07, 0x35, 0x91, 0xbb, 0x25, 0x8b, - 0x9d, 0xd7, 0x2a, 0x97, 0x26, 0xed, 0x52, 0xb8, 0x3f, 0x80, 0xe1, 0x7c, - 0x38, 0xb3, 0x75, 0xba, 0x7b, 0x3d, 0x50, 0xba, 0xc7, 0x6d, 0x6f, 0xa1, - 0x4f, 0xe7, 0x98, 0xfb, 0xd9, 0x5c, 0xf3, 0x56, 0x30, 0x4c, 0xd7, 0xd2, - 0x7a, 0x79, 0x88, 0x40, 0xfc, 0xfd, 0x2f, 0x8e, 0xbc, 0xad, 0xec, 0xee, - 0x2c, 0x0e, 0xea, 0x37, 0xb3, 0xd6, 0xf4, 0x4c, 0x69, 0xe8, 0x34, 0x9e, - 0x35, 0x41, 0x88, 0xc3, 0xd6, 0xf3, 0x39, 0xe1, 0xc5, 0xbf, 0x8b, 0xc9, - 0x32, 0x8e, 0x73, 0x33, 0x31, 0xdf, 0x70, 0x7d, 0x5f, 0xc7, 0x72, 0xf8, - 0x3c, 0x84, 0x55, 0xaa, 0x3e, 0x18, 0x6b, 0xbf, 0x3d, 0x08, 0x8d, 0x72, - 0xcb, 0xa5, 0xe7, 0x37, 0x0e, 0x44, 0x3a, 0x8d, 0xbd, 0xcd, 0xa5, 0xc0, - 0x7e, 0x86, 0x34, 0xf5, 0x95, 0xab, 0x50, 0x68, 0x19, 0x51, 0x15, 0xb5, - 0x40, 0x86, 0x6f, 0x0d, 0x12, 0xde, 0xdb, 0xc2, 0x07, 0x39, 0x3c, 0x04, - 0x56, 0x9c, 0x19, 0x1f, 0x0d, 0x76, 0x29, 0x52, 0x4f, 0x52, 0x13, 0x6f, - 0x5b, 0xf7, 0x61, 0xdb, 0xea, 0x87, 0x17, 0xdf, 0x90, 0xea, 0x03, 0x13, - 0x5a, 0x5d, 0xa9, 0x75, 0xbd, 0xb0, 0x93, 0x4a, 0x37, 0x63, 0xda, 0xff, - 0x48, 0xec, 0x97, 0xce, 0x34, 0x6c, 0xaf, 0x0a, 0x3f, 0x92, 0xf5, 0x44, - 0x2e, 0xd7, 0xf5, 0x12, 0x72, 0x53, 0x5e, 0xae, 0x16, 0x21, 0xa1, 0x66, - 0x49, 0x17, 0x9d, 0xb9, 0x82, 0xdb, 0xb0, 0x37, 0x7c, 0xc9, 0x43, 0x9c, - 0xcb, 0x4d, 0x7d, 0x1c, 0x71, 0xf8, 0xd7, 0x27, 0xe1, 0x95, 0xad, 0x11, - 0xf8, 0x9f, 0xd3, 0xc0, 0xbd, 0xe6, 0xd5, 0x51, 0x69, 0xe5, 0xab, 0xcd, - 0x3f, 0x06, 0x3a, 0x27, 0x70, 0x55, 0x7b, 0xeb, 0x3e, 0xaf, 0x58, 0x35, - 0x6e, 0xdf, 0x79, 0xe8, 0xb5, 0x05, 0x63, 0x59, 0xfa, 0x35, 0xe9, 0xa6, - 0xd5, 0x79, 0x80, 0x57, 0x0c, 0xda, 0xb9, 0x1a, 0x69, 0x7d, 0x42, 0x62, - 0x42, 0xe3, 0xf7, 0x74, 0x8d, 0x4b, 0x9e, 0x9a, 0x2f, 0xd6, 0xc1, 0x5c, - 0x72, 0xab, 0xe4, 0xd5, 0xd1, 0x81, 0xb7, 0xda, 0x03, 0xd7, 0x43, 0x78, - 0x3b, 0xc4, 0xfc, 0x73, 0x4d, 0x61, 0xe8, 0xc7, 0x37, 0xd2, 0xde, 0x21, - 0x34, 0x47, 0x18, 0xe7, 0x9f, 0x2e, 0x49, 0x78, 0x39, 0x1f, 0xd5, 0xf3, - 0xf5, 0xfb, 0xdf, 0x81, 0x0c, 0x35, 0xaf, 0xe7, 0x97, 0x76, 0xbe, 0x21, - 0xb0, 0x37, 0x74, 0xd1, 0x8e, 0x8c, 0x68, 0x67, 0x84, 0x2e, 0xf6, 0xbe, - 0xb0, 0xcc, 0xdb, 0xb9, 0x2d, 0x8d, 0xf6, 0xbd, 0x5b, 0x95, 0xdc, 0xbb, - 0xc7, 0x08, 0xc4, 0xe9, 0x24, 0xfa, 0xce, 0x97, 0x06, 0xee, 0x3b, 0x1e, - 0xf8, 0x72, 0x96, 0xfd, 0xe6, 0xd4, 0x35, 0x11, 0xe3, 0xd6, 0x40, 0x9f, - 0x7d, 0xdc, 0xf2, 0xb9, 0x36, 0xa4, 0xd0, 0xab, 0x37, 0x22, 0xc1, 0x63, - 0xab, 0xbd, 0x22, 0xf5, 0xe6, 0x7b, 0x08, 0xe4, 0x6f, 0xb6, 0xbe, 0x90, - 0x42, 0xfb, 0x55, 0xa7, 0xcb, 0x9f, 0x2f, 0x5f, 0xa4, 0x16, 0xec, 0x9a, - 0xe4, 0x60, 0xcb, 0xd9, 0xd8, 0xe6, 0xc0, 0xde, 0x65, 0xd6, 0x57, 0x9a, - 0xa6, 0xe6, 0x7d, 0xbf, 0xad, 0x04, 0x1e, 0xf5, 0xb7, 0x7d, 0xad, 0x9b, - 0x17, 0x62, 0x3e, 0x01, 0x73, 0xa9, 0xba, 0xa5, 0xcf, 0xa9, 0x3e, 0xd1, - 0x9f, 0xd7, 0xbe, 0x07, 0xd2, 0xfa, 0x7d, 0xcc, 0x00, 0xa1, 0x7d, 0x8f, - 0xfe, 0x4b, 0xac, 0x24, 0x1b, 0xbe, 0xac, 0x06, 0x23, 0x51, 0xff, 0x1c, - 0x13, 0xa6, 0xd6, 0xdf, 0xf2, 0x76, 0x59, 0x79, 0xdd, 0x25, 0x75, 0xbf, - 0x75, 0xaf, 0xd8, 0xdd, 0xab, 0xa0, 0x16, 0xe9, 0xa4, 0x27, 0x29, 0x2b, - 0x8e, 0xe4, 0xf9, 0x37, 0xdc, 0x9b, 0xc3, 0xff, 0xfa, 0x3a, 0x59, 0x97, - 0x30, 0x81, 0x73, 0xb5, 0xfc, 0xef, 0x78, 0x3c, 0x5b, 0x09, 0xe9, 0x96, - 0x33, 0xf7, 0x10, 0xc4, 0xef, 0x05, 0xc0, 0xfa, 0x96, 0xae, 0x28, 0x61, - 0x63, 0x6c, 0xea, 0xab, 0x27, 0x9f, 0x7a, 0xba, 0xf0, 0xcb, 0xf3, 0xa8, - 0x0d, 0x99, 0x8d, 0x93, 0x1f, 0x97, 0x8f, 0xe5, 0xd1, 0xbb, 0x75, 0x5c, - 0x3e, 0x8e, 0xc3, 0x97, 0x23, 0x9f, 0xd3, 0x13, 0x2e, 0x63, 0x6f, 0x26, - 0xd5, 0x56, 0x11, 0xa5, 0xe1, 0x18, 0x2a, 0xae, 0xb9, 0x3f, 0xe5, 0xbe, - 0x38, 0x1b, 0xf7, 0xae, 0x36, 0xb8, 0xb8, 0xb7, 0x35, 0xe6, 0x62, 0xec, - 0xa8, 0xa9, 0x44, 0xa6, 0xd4, 0x1a, 0x20, 0x96, 0x0b, 0xc3, 0xe4, 0xa2, - 0x39, 0x9a, 0xf2, 0x5a, 0x5d, 0x3e, 0xa2, 0xf2, 0x4d, 0x47, 0x9f, 0x18, - 0x33, 0x3a, 0xbe, 0x9a, 0x18, 0xf3, 0xb0, 0xdf, 0xbd, 0xbc, 0xcc, 0xe3, - 0x10, 0x46, 0x46, 0xbd, 0x38, 0x1b, 0x8c, 0xa4, 0xdb, 0x54, 0xa6, 0xf4, - 0x4c, 0x37, 0xd8, 0x72, 0x8d, 0xe6, 0x13, 0xd9, 0x5c, 0xdd, 0x89, 0x34, - 0x9e, 0xcd, 0x42, 0x0b, 0xc0, 0xf8, 0xfb, 0x9b, 0x1d, 0xa6, 0x7e, 0x08, - 0x5c, 0x7a, 0xf9, 0x55, 0x95, 0xef, 0x7b, 0xd4, 0x39, 0x5d, 0x9b, 0x94, - 0x4b, 0xef, 0x35, 0x43, 0x12, 0x52, 0x2d, 0x7d, 0xce, 0x9d, 0x1d, 0x57, - 0x1a, 0xae, 0x41, 0x0c, 0xe1, 0x35, 0x64, 0xf2, 0xc5, 0xf3, 0xfc, 0xf8, - 0xd3, 0x28, 0x41, 0xc7, 0xaa, 0x7f, 0xc7, 0x5e, 0x3a, 0xf4, 0x90, 0xd3, - 0x47, 0x8c, 0x1e, 0x30, 0xad, 0x43, 0xe7, 0xdc, 0xd1, 0xe4, 0x8d, 0xbb, - 0xc6, 0x7e, 0x44, 0x07, 0xdf, 0x0d, 0xf3, 0xca, 0x72, 0x1d, 0x68, 0x83, - 0x6f, 0x09, 0xb0, 0x44, 0x5f, 0xde, 0x7a, 0x99, 0x8b, 0xd1, 0x3f, 0x5d, - 0x4f, 0xd3, 0xf8, 0x6b, 0xad, 0xf9, 0xf6, 0x77, 0xae, 0x0d, 0xcd, 0x08, - 0xd6, 0x58, 0xc1, 0x33, 0xb6, 0x2d, 0xc8, 0x1d, 0xb5, 0x7d, 0x6c, 0x23, - 0xcb, 0xa5, 0x65, 0xcb, 0x52, 0x7b, 0x81, 0xc5, 0x67, 0xd8, 0x80, 0x56, - 0xb9, 0x93, 0xe7, 0x7b, 0xee, 0x87, 0x59, 0x97, 0xa5, 0x64, 0xf0, 0xdf, - 0xcb, 0x58, 0x9a, 0xbd, 0xf5, 0x5a, 0xd3, 0xc5, 0x86, 0x5d, 0x97, 0x06, - 0xd2, 0x7f, 0x86, 0x64, 0xf7, 0x4b, 0x5f, 0xb9, 0xbe, 0x28, 0x3e, 0x50, - 0x30, 0x47, 0xdc, 0xf8, 0x00, 0xbf, 0x23, 0x17, 0x6e, 0x40, 0x26, 0xe4, - 0x0b, 0x56, 0xa6, 0x39, 0x9d, 0x7b, 0x8f, 0x21, 0xd7, 0xb7, 0xc2, 0x66, - 0x61, 0xeb, 0x5a, 0xd2, 0xb5, 0x8c, 0xfb, 0xa5, 0x3c, 0x4b, 0xa3, 0x2f, - 0xd0, 0xd4, 0xb9, 0xda, 0xa8, 0x6e, 0x11, 0xb7, 0x74, 0xe0, 0xba, 0x79, - 0x7c, 0xc4, 0xf0, 0xa6, 0xb3, 0x57, 0xc6, 0xaf, 0x7e, 0x16, 0x58, 0x70, - 0xfd, 0x3d, 0x46, 0xe2, 0x1c, 0xc7, 0xf4, 0xfd, 0xed, 0x75, 0x60, 0x13, - 0x5c, 0xf3, 0xa8, 0x8c, 0xf5, 0x22, 0xb3, 0x58, 0xcc, 0x72, 0x5b, 0x87, - 0x20, 0xfe, 0x32, 0x72, 0xc2, 0xa9, 0xda, 0x6b, 0x1e, 0x52, 0xe4, 0x18, - 0x41, 0xbe, 0x0d, 0xd1, 0x26, 0x96, 0xdc, 0x40, 0x6f, 0x36, 0x3f, 0x5b, - 0xba, 0xe2, 0xde, 0xc8, 0x25, 0xb0, 0xc7, 0xda, 0x22, 0x7d, 0x74, 0x03, - 0x75, 0x88, 0x55, 0x76, 0x74, 0x1f, 0x97, 0x0a, 0x5f, 0x39, 0x7b, 0xb6, - 0x6c, 0x7d, 0x82, 0x6c, 0xfd, 0x50, 0xfe, 0xb2, 0x8e, 0xb9, 0xf3, 0x5d, - 0x85, 0x52, 0x73, 0x93, 0x4c, 0x33, 0xba, 0x0f, 0x51, 0x94, 0x63, 0xd7, - 0x4c, 0x70, 0xbe, 0x44, 0x57, 0x83, 0x8e, 0x6b, 0x6b, 0xc1, 0x63, 0x8a, - 0x17, 0xb6, 0x6e, 0xe5, 0xef, 0x7c, 0x9e, 0xa1, 0x5b, 0xb7, 0x75, 0x8d, - 0x6e, 0xf5, 0x6c, 0xc7, 0x8a, 0x74, 0xd7, 0x36, 0x61, 0x40, 0xdb, 0x20, - 0x56, 0x8c, 0x2a, 0xb3, 0x6c, 0x3c, 0xc6, 0xd0, 0xc7, 0xc8, 0xbc, 0xee, - 0x46, 0x0c, 0xe0, 0xbc, 0xe2, 0xed, 0xdf, 0x10, 0x74, 0x5d, 0x2b, 0x6a, - 0x37, 0x2a, 0xff, 0x44, 0x02, 0x7c, 0x6a, 0xc2, 0x7e, 0xb0, 0xa8, 0x79, - 0x56, 0xdc, 0x0f, 0x98, 0xf8, 0x2e, 0x4a, 0x0b, 0x2a, 0xaa, 0x5b, 0xa9, - 0x30, 0x37, 0x78, 0x31, 0x72, 0x99, 0x97, 0x7e, 0xd2, 0xf8, 0xdd, 0x50, - 0x34, 0x34, 0xc4, 0x61, 0x1d, 0xdb, 0x33, 0xbd, 0x27, 0x79, 0xea, 0x52, - 0xe7, 0x7b, 0x1c, 0x3e, 0x5d, 0x4c, 0xc8, 0xba, 0xc5, 0xef, 0x5c, 0x26, - 0x2d, 0xb5, 0x58, 0xf6, 0x79, 0x0f, 0xa0, 0x77, 0x7b, 0x0d, 0xbd, 0x4a, - 0x5b, 0xa0, 0x25, 0x13, 0x38, 0xcd, 0x83, 0x13, 0x59, 0xe9, 0x2f, 0x83, - 0x8b, 0x29, 0x81, 0x3c, 0x10, 0x14, 0x8e, 0x77, 0x65, 0x14, 0xf5, 0xd4, - 0x86, 0x31, 0xee, 0xab, 0x65, 0x6c, 0x2b, 0x2f, 0x98, 0x66, 0x74, 0xd9, - 0x25, 0xb6, 0xb5, 0x0a, 0xe4, 0xbd, 0x5c, 0xd8, 0x8c, 0x2d, 0xc2, 0x67, - 0xad, 0xf4, 0x3d, 0x3b, 0xa8, 0x2e, 0x79, 0xb2, 0xe7, 0x5a, 0x64, 0xf3, - 0x4f, 0xdc, 0x48, 0x10, 0xdc, 0x7b, 0x7d, 0x0f, 0x9e, 0x94, 0xa1, 0x5f, - 0x5f, 0x77, 0xb6, 0x05, 0xc2, 0x8a, 0x5b, 0x76, 0xb0, 0x54, 0x9a, 0x6c, - 0x86, 0xeb, 0x01, 0x6b, 0xec, 0xd9, 0xb1, 0xd7, 0x8f, 0xfd, 0xb7, 0x7e, - 0xfa, 0xe2, 0x8b, 0x84, 0x3b, 0xe6, 0xf4, 0xad, 0xfb, 0xc2, 0x40, 0xfd, - 0xa5, 0xe8, 0x10, 0x46, 0xbc, 0xf1, 0x74, 0xd8, 0x23, 0x42, 0x39, 0xb6, - 0x1d, 0x10, 0x1e, 0xfd, 0x73, 0x1f, 0xfa, 0x7b, 0x31, 0x28, 0xed, 0xe1, - 0x01, 0xd1, 0xe8, 0xf0, 0x70, 0xc7, 0xb3, 0xd4, 0x38, 0x48, 0x2d, 0x58, - 0x43, 0x91, 0x75, 0x40, 0xba, 0xce, 0x87, 0xf0, 0x64, 0x67, 0x6b, 0x3c, - 0x4a, 0x4e, 0x72, 0x39, 0x77, 0xa3, 0x5b, 0xbc, 0xac, 0xd0, 0x9f, 0x85, - 0x0c, 0x8d, 0xf6, 0x35, 0x06, 0x1f, 0xf1, 0xa6, 0xa7, 0xe0, 0xda, 0x3b, - 0x11, 0x9c, 0xf7, 0xa7, 0xa1, 0xd1, 0xa5, 0x5a, 0x6e, 0x3b, 0x1f, 0x60, - 0x7c, 0xc9, 0x33, 0xec, 0x77, 0xd3, 0x5b, 0x5d, 0x51, 0x24, 0x3a, 0xbc, - 0x63, 0x2b, 0x75, 0x6e, 0x51, 0xfa, 0x1b, 0xa6, 0x7b, 0xbb, 0xf5, 0x06, - 0x71, 0xfb, 0x17, 0x54, 0x87, 0x11, 0x8d, 0xdd, 0x1b, 0x7b, 0xf9, 0xd6, - 0x7d, 0xe9, 0x9c, 0xe6, 0xde, 0x5c, 0x33, 0xf6, 0x09, 0x53, 0x73, 0x3b, - 0x3b, 0x63, 0xed, 0x9b, 0x7c, 0xdc, 0xae, 0xd1, 0xe9, 0x5a, 0xa9, 0x63, - 0x52, 0xef, 0xed, 0x8b, 0xd9, 0x6d, 0x86, 0x00, 0xe9, 0x35, 0x3d, 0x64, - 0xc2, 0xf0, 0x8d, 0x97, 0x08, 0x82, 0x1e, 0x7c, 0x61, 0x96, 0x74, 0x87, - 0x23, 0xaa, 0xe0, 0x3a, 0x43, 0x31, 0x66, 0x39, 0xea, 0x1c, 0x0f, 0xf2, - 0x33, 0x3e, 0x3e, 0x1c, 0xf8, 0x74, 0x72, 0x43, 0x8d, 0x99, 0x78, 0x49, - 0x82, 0xf4, 0xa2, 0xe9, 0x5e, 0x13, 0x2b, 0xbe, 0x82, 0x72, 0x0f, 0xd0, - 0x7d, 0x36, 0x7c, 0x74, 0x75, 0x8c, 0x6d, 0x68, 0x2d, 0x34, 0xe2, 0xae, - 0x1f, 0x19, 0x36, 0x0c, 0x67, 0xe4, 0x99, 0xca, 0x43, 0x43, 0x61, 0x14, - 0x0f, 0xf0, 0x2b, 0xc0, 0x86, 0xea, 0xf0, 0x58, 0x8c, 0xb4, 0x75, 0x38, - 0xe5, 0x13, 0xb7, 0xb7, 0x5a, 0xc3, 0xfc, 0xb9, 0x48, 0x77, 0xf8, 0xc4, - 0x5d, 0x2e, 0x01, 0x06, 0x8b, 0xaf, 0x98, 0xee, 0x0e, 0x6b, 0x48, 0xfc, - 0x8e, 0x03, 0xca, 0x99, 0xb2, 0x87, 0x82, 0x3b, 0x6e, 0x2e, 0x4a, 0x24, - 0x98, 0x7d, 0xbc, 0x30, 0xd5, 0x97, 0x12, 0xc1, 0xe8, 0x57, 0x60, 0xc8, - 0xb9, 0xeb, 0x11, 0x8a, 0x7e, 0xff, 0x2a, 0xb8, 0xf6, 0xc9, 0x7b, 0x47, - 0xe0, 0x1a, 0xe7, 0x2d, 0xbe, 0xef, 0x63, 0x0d, 0xcc, 0xde, 0xaf, 0x10, - 0x7f, 0x2e, 0xfb, 0xb6, 0x7a, 0xd5, 0x27, 0x7c, 0x10, 0x23, 0x07, 0xac, - 0xcb, 0xf4, 0x76, 0x4a, 0xb0, 0x99, 0xa9, 0x17, 0x6d, 0xaf, 0xf7, 0x76, - 0xc5, 0xb5, 0x0c, 0x4c, 0xfd, 0x9d, 0x66, 0x71, 0xd7, 0x8f, 0xf7, 0xfa, - 0xa1, 0x0b, 0xdc, 0xd6, 0x3b, 0xb8, 0x5d, 0xdc, 0xdb, 0x5b, 0x18, 0x3c, - 0xfd, 0x52, 0xb7, 0x48, 0xf2, 0x69, 0x13, 0x4e, 0x42, 0x85, 0x30, 0x6b, - 0xcc, 0xf2, 0xc9, 0x9a, 0x7e, 0xa2, 0x0b, 0xbd, 0xf3, 0x2c, 0x2d, 0x91, - 0x92, 0x8f, 0x88, 0xa3, 0x45, 0xc0, 0xa5, 0x3b, 0xae, 0xd0, 0xf5, 0xb8, - 0x1f, 0xec, 0xe0, 0x3e, 0x9a, 0x7e, 0xed, 0x7b, 0x89, 0xe9, 0x36, 0xb9, - 0x63, 0x5a, 0xfa, 0xce, 0x2d, 0xf8, 0x16, 0x8d, 0x63, 0x6a, 0x67, 0x9c, - 0xbf, 0x35, 0xd4, 0xf8, 0xb6, 0xf9, 0xb8, 0x7f, 0x3e, 0x29, 0xfd, 0x31, - 0x3f, 0x58, 0x74, 0x72, 0xd4, 0x33, 0x9b, 0x77, 0x3d, 0xc8, 0x27, 0x5f, - 0xa4, 0x31, 0xb4, 0x48, 0x03, 0xf5, 0xcd, 0xc8, 0x6f, 0x33, 0xc9, 0x0d, - 0x89, 0xfc, 0xe0, 0x5b, 0xf1, 0x04, 0xd5, 0x4e, 0x5e, 0xf1, 0x34, 0x55, - 0xf2, 0x1b, 0x78, 0x34, 0xde, 0x84, 0x71, 0x66, 0x17, 0xc5, 0x99, 0x25, - 0xc4, 0xb9, 0x5b, 0x61, 0xcd, 0x2e, 0x84, 0x33, 0xeb, 0xed, 0x2a, 0xd0, - 0xd9, 0x79, 0x06, 0x02, 0xcf, 0x28, 0xf1, 0x46, 0x2d, 0xa4, 0xdd, 0xeb, - 0x35, 0x2e, 0x83, 0x3b, 0x5f, 0x49, 0xd1, 0x02, 0x46, 0xc6, 0x19, 0x72, - 0x53, 0xf8, 0x68, 0x59, 0xb2, 0x56, 0x7c, 0xb0, 0xd1, 0x1b, 0x46, 0x67, - 0x2b, 0xd8, 0x3c, 0xe3, 0xed, 0x92, 0xb4, 0x16, 0xfc, 0xf1, 0xc6, 0xca, - 0x2f, 0x1a, 0x9a, 0xd5, 0xec, 0xfd, 0xdf, 0x7f, 0xc9, 0x34, 0xf9, 0x08, - 0xb0, 0x9a, 0x13, 0x0d, 0x02, 0xcb, 0xd0, 0x89, 0xfc, 0x11, 0x13, 0xe9, - 0x0b, 0xbf, 0x6d, 0x32, 0x70, 0x4c, 0xc1, 0x2e, 0x7a, 0x18, 0xa0, 0xe8, - 0x81, 0xea, 0x84, 0x47, 0xfc, 0xef, 0x7c, 0x10, 0xa4, 0xc2, 0x53, 0xd0, - 0x3f, 0x46, 0xd3, 0x8c, 0x97, 0xd8, 0x90, 0x0e, 0xa0, 0x91, 0x10, 0x05, - 0xb2, 0xd8, 0x87, 0x15, 0xfb, 0x89, 0x94, 0xf8, 0x4d, 0xde, 0x22, 0x89, - 0x47, 0x37, 0x9a, 0xc6, 0x79, 0xef, 0x3e, 0x6f, 0x3a, 0x63, 0x05, 0x18, - 0x5e, 0xf1, 0xcb, 0x56, 0x9d, 0x94, 0xd1, 0x37, 0x9e, 0xc5, 0xf0, 0x30, - 0x53, 0x3f, 0x2f, 0x90, 0x8a, 0x4c, 0x30, 0x4a, 0x2d, 0x24, 0xaf, 0xa1, - 0x6d, 0xe0, 0x20, 0xb1, 0xea, 0xd1, 0x3d, 0x30, 0x98, 0x68, 0x14, 0xef, - 0x8e, 0x8c, 0xce, 0x83, 0x8e, 0x40, 0x00, 0xba, 0x78, 0xff, 0x0a, 0x4f, - 0x62, 0x9d, 0xe9, 0x70, 0x20, 0x47, 0x2c, 0xc4, 0x58, 0x4e, 0x03, 0xda, - 0xc3, 0xef, 0x6f, 0x1e, 0xcf, 0x07, 0x18, 0x71, 0x4a, 0x17, 0x80, 0x07, - 0xdd, 0x08, 0x3c, 0x94, 0x00, 0xee, 0x03, 0x60, 0x84, 0x05, 0x58, 0x0e, - 0xc3, 0x47, 0x4e, 0xdb, 0x94, 0xbe, 0xdd, 0x0c, 0xce, 0x31, 0x6a, 0x6c, - 0x29, 0xfd, 0x14, 0xbe, 0x71, 0xfb, 0xd9, 0x71, 0x1e, 0xe1, 0x32, 0xde, - 0xa7, 0xa1, 0xbb, 0xeb, 0xd2, 0x34, 0x6a, 0x69, 0x30, 0x9d, 0x6c, 0xad, - 0xd2, 0x74, 0x31, 0xe3, 0x3a, 0x17, 0x43, 0x9f, 0xbe, 0x92, 0x9a, 0xce, - 0x63, 0x1c, 0x2f, 0x0e, 0x8b, 0xbf, 0x18, 0xe0, 0xc5, 0x08, 0x47, 0x1e, - 0x5a, 0xc7, 0xbb, 0xf0, 0xd1, 0x15, 0x52, 0x67, 0x3b, 0x07, 0xbe, 0xca, - 0xf0, 0xec, 0x7d, 0x10, 0x7f, 0x35, 0xd0, 0xed, 0xc2, 0x36, 0x8d, 0xde, - 0x48, 0x77, 0xa6, 0x29, 0xd8, 0xee, 0xf3, 0x53, 0x6a, 0x5d, 0x75, 0xf1, - 0xb9, 0xee, 0xa7, 0x99, 0x98, 0xc6, 0x4f, 0x64, 0x87, 0x63, 0x37, 0x66, - 0x3d, 0x81, 0x72, 0xc6, 0x61, 0x44, 0x8a, 0xdc, 0x56, 0x5d, 0x03, 0x17, - 0x7d, 0x49, 0xc1, 0xb8, 0xe2, 0x91, 0x2e, 0x21, 0xb8, 0x8c, 0x0b, 0x2b, - 0xdf, 0x1b, 0xe8, 0x64, 0xa5, 0x05, 0xdb, 0x7d, 0xee, 0x0f, 0x2d, 0x05, - 0xdb, 0x7f, 0x1e, 0x87, 0x4b, 0xd6, 0x8a, 0xef, 0x0d, 0x5c, 0x2e, 0xe9, - 0x34, 0x8d, 0x8b, 0x91, 0x8b, 0x58, 0xa9, 0x4e, 0xa7, 0x33, 0x74, 0x99, - 0xf1, 0x57, 0xbe, 0x37, 0xd0, 0x4d, 0xa9, 0x9d, 0xdd, 0xaf, 0x5f, 0xa3, - 0xa8, 0x8f, 0x97, 0x93, 0x41, 0x95, 0xef, 0xdd, 0x5a, 0xf3, 0x72, 0x09, - 0xb4, 0x6b, 0xfc, 0x8f, 0x91, 0x2e, 0x23, 0xeb, 0xbe, 0x69, 0xe0, 0xfe, - 0x5b, 0x49, 0xe3, 0xc5, 0x47, 0xd7, 0xe8, 0xdc, 0xfb, 0xc4, 0x36, 0x81, - 0xf0, 0xc5, 0x77, 0xf1, 0xbd, 0xe1, 0x7c, 0xef, 0x5d, 0x23, 0xdb, 0x3e, - 0xd7, 0x01, 0x8b, 0xa0, 0x2a, 0x75, 0xea, 0xcb, 0x69, 0xba, 0x94, 0xd2, - 0x38, 0xd5, 0x4d, 0x54, 0x6d, 0xee, 0x97, 0x72, 0x1a, 0x42, 0xd2, 0x4b, - 0xa9, 0x03, 0x91, 0xb6, 0x18, 0xb2, 0x0d, 0x37, 0xbd, 0x94, 0x0a, 0xf8, - 0xcc, 0x58, 0x65, 0x25, 0x65, 0x7b, 0xbf, 0xd9, 0x64, 0x17, 0x4f, 0xd9, - 0x39, 0xe2, 0x75, 0x4f, 0x60, 0xeb, 0xc2, 0x64, 0xc1, 0xdc, 0x7e, 0x51, - 0x87, 0x63, 0xaf, 0x6d, 0x38, 0x7e, 0xd4, 0x65, 0x6d, 0x90, 0x0b, 0xb1, - 0x59, 0x31, 0xe0, 0x33, 0x48, 0x40, 0x15, 0xb0, 0x5f, 0xc0, 0x11, 0x3b, - 0xbe, 0xb3, 0x9a, 0xb6, 0x57, 0x42, 0x77, 0xb2, 0x79, 0x87, 0x01, 0x49, - 0x96, 0x78, 0x79, 0xdc, 0x10, 0x3c, 0x98, 0x78, 0xea, 0x61, 0x8b, 0x13, - 0xc1, 0x1b, 0x3a, 0xfc, 0x8d, 0xc7, 0x80, 0xb7, 0x09, 0x66, 0x60, 0x63, - 0xc1, 0x19, 0xcb, 0x2d, 0x77, 0xf1, 0xc8, 0x7f, 0x36, 0x9c, 0x9b, 0x46, - 0x12, 0x67, 0x39, 0xcc, 0xbe, 0x78, 0xf3, 0xc8, 0x65, 0x7f, 0x16, 0x9e, - 0x08, 0xed, 0xb7, 0xe8, 0x19, 0x11, 0xce, 0x37, 0x6b, 0x81, 0x77, 0x82, - 0x03, 0xe7, 0xab, 0x1c, 0x9d, 0xd3, 0x28, 0x1c, 0x8f, 0x38, 0x01, 0xbe, - 0x06, 0x39, 0x64, 0x51, 0x4e, 0x0e, 0x72, 0x11, 0x55, 0x6f, 0xe4, 0x28, - 0x85, 0x31, 0x35, 0xee, 0x86, 0x74, 0x56, 0x75, 0xc3, 0x83, 0x25, 0xf7, - 0xd3, 0x01, 0x3d, 0xc5, 0x43, 0xe3, 0x1c, 0xd2, 0x08, 0xb2, 0xd7, 0x71, - 0x28, 0x1b, 0x14, 0x64, 0x61, 0x24, 0x0d, 0x3e, 0x80, 0x00, 0x6e, 0xcf, - 0xaf, 0x6c, 0x18, 0xc6, 0x1c, 0x02, 0x78, 0xa0, 0xb7, 0x46, 0xeb, 0x39, - 0x60, 0x51, 0xc6, 0x11, 0xbd, 0xe4, 0xc3, 0x4f, 0xa4, 0x9d, 0xa9, 0x89, - 0x12, 0x4f, 0x36, 0xbc, 0x7b, 0xe7, 0xc4, 0xfb, 0x14, 0x62, 0xd9, 0x47, - 0x27, 0x34, 0x2a, 0x8d, 0x9e, 0xba, 0xb2, 0xbc, 0xf9, 0x63, 0x35, 0x5b, - 0x3c, 0x1f, 0x03, 0x90, 0x3e, 0xa0, 0xaf, 0x21, 0xe2, 0xfa, 0x1a, 0x99, - 0x61, 0x2f, 0x4a, 0x1c, 0x35, 0x7a, 0x32, 0x6f, 0xbb, 0xb1, 0x6f, 0x3b, - 0x51, 0x18, 0xc8, 0xa3, 0xd4, 0x5d, 0x38, 0xda, 0x62, 0x69, 0x15, 0x87, - 0x0d, 0x8f, 0xbb, 0x3b, 0xcd, 0xb7, 0x43, 0x8c, 0x04, 0x9b, 0x9f, 0x07, - 0x01, 0x47, 0x5f, 0x24, 0xee, 0x12, 0xd0, 0x6f, 0xf5, 0x84, 0x8f, 0x6d, - 0xb1, 0xf0, 0xe7, 0xfa, 0xd4, 0x71, 0x8a, 0x67, 0xb7, 0x00, 0xf8, 0x02, - 0x56, 0x00, 0x77, 0x02, 0x8f, 0x93, 0x93, 0xfa, 0xf0, 0x6b, 0xc3, 0x28, - 0x8f, 0xc6, 0xf3, 0x3d, 0x0a, 0xcc, 0x3a, 0xdc, 0x5f, 0xa2, 0x4f, 0x12, - 0x9e, 0x8b, 0x15, 0x7a, 0xa8, 0x5c, 0xe2, 0xb6, 0xa5, 0xaf, 0x92, 0x55, - 0x46, 0x9e, 0xfa, 0xca, 0xb3, 0x01, 0xbc, 0x21, 0x4d, 0x90, 0x1f, 0x22, - 0x91, 0x4c, 0xab, 0x12, 0x60, 0x2d, 0x5e, 0x26, 0x21, 0xde, 0x6f, 0xe0, - 0x95, 0x73, 0xe1, 0xb3, 0x43, 0x10, 0xc4, 0x36, 0x0e, 0xf7, 0x71, 0x0f, - 0x57, 0x4f, 0x15, 0x1a, 0x3d, 0xbb, 0x03, 0x84, 0x77, 0x97, 0x4e, 0x81, - 0x71, 0xf6, 0x02, 0xca, 0x17, 0xc5, 0x02, 0x78, 0xc4, 0xf7, 0xe1, 0xee, - 0x84, 0xa1, 0xda, 0xf1, 0xfe, 0xa8, 0xd6, 0x28, 0x54, 0xcc, 0x2a, 0x98, - 0x2b, 0xa8, 0x55, 0x2c, 0x7c, 0xaf, 0x4f, 0xad, 0x11, 0xbb, 0x5d, 0x3c, - 0x28, 0x08, 0x5a, 0x94, 0x2b, 0x7a, 0x65, 0x1a, 0xe0, 0xa4, 0x81, 0xed, - 0x50, 0xcf, 0x6b, 0xc0, 0x55, 0xc4, 0x7e, 0xe7, 0x33, 0x33, 0x9b, 0xc5, - 0x21, 0xc6, 0xa6, 0xc0, 0xd8, 0x2d, 0xdb, 0x76, 0x34, 0x1d, 0x16, 0x4c, - 0x9c, 0x75, 0xe0, 0x00, 0x7e, 0x47, 0x53, 0x81, 0x83, 0x78, 0xf7, 0x9a, - 0xf9, 0xdc, 0xd9, 0x32, 0xc5, 0x27, 0x30, 0x16, 0x73, 0x2a, 0xed, 0x3b, - 0x30, 0x3c, 0xda, 0x5d, 0x51, 0x18, 0xf6, 0xba, 0xd7, 0xba, 0x5f, 0x8e, - 0xcc, 0x23, 0xb6, 0x8e, 0x78, 0xa9, 0x99, 0x0d, 0xb5, 0xa0, 0x4e, 0x49, - 0x3b, 0xae, 0xba, 0x72, 0xc4, 0x6a, 0xc8, 0x87, 0xb3, 0x67, 0xa8, 0x8a, - 0xee, 0x07, 0xdc, 0xe9, 0x77, 0x2d, 0xbe, 0xff, 0x4b, 0x78, 0x53, 0x2e, - 0xfd, 0x60, 0x5e, 0x63, 0x84, 0x31, 0xfb, 0xb5, 0x49, 0x90, 0xa9, 0x68, - 0x76, 0x7f, 0x89, 0xff, 0xfd, 0xf7, 0x6f, 0x18, 0x56, 0x53, 0x6e, 0x37, - 0xee, 0x5b, 0x0b, 0x7c, 0xe7, 0xfb, 0xfb, 0x04, 0x4e, 0xe5, 0x00, 0xc1, - 0x24, 0xf5, 0x91, 0x88, 0x76, 0xa8, 0xd8, 0xba, 0x35, 0x6a, 0xc3, 0x62, - 0xaa, 0xf3, 0x50, 0x48, 0x2d, 0x55, 0x41, 0x60, 0x98, 0x08, 0x6b, 0x9f, - 0xa0, 0x6f, 0x2a, 0x32, 0xfc, 0x36, 0x53, 0xab, 0x8d, 0x82, 0x09, 0x4b, - 0xce, 0x02, 0xdb, 0x16, 0x14, 0x83, 0x66, 0x87, 0x28, 0x3b, 0x0e, 0x99, - 0x3e, 0xc0, 0xb7, 0xcc, 0x10, 0xdc, 0xdf, 0x8f, 0xe1, 0x9b, 0x74, 0x0c, - 0x37, 0x46, 0xe9, 0x8f, 0xb2, 0xfe, 0x65, 0x3d, 0x86, 0x00, 0xe4, 0x93, - 0x11, 0xe1, 0x21, 0x36, 0xc6, 0xf0, 0xfe, 0x7e, 0x2f, 0xe9, 0x6b, 0x24, - 0xd2, 0xf6, 0x6b, 0x45, 0xfe, 0x7d, 0xc5, 0xf3, 0x28, 0x0e, 0x30, 0xc6, - 0x26, 0x74, 0x8f, 0x15, 0x0e, 0x08, 0xf9, 0x50, 0x00, 0xb6, 0x17, 0x9a, - 0x31, 0xa2, 0x79, 0x9c, 0x1c, 0x2d, 0x36, 0xff, 0x12, 0xda, 0x87, 0xd3, - 0x01, 0x8a, 0xb1, 0x50, 0xf1, 0xb0, 0x9f, 0xcc, 0x01, 0x2b, 0x6c, 0x37, - 0x3e, 0xe5, 0x4d, 0x74, 0xd0, 0x7d, 0x33, 0x4b, 0x97, 0xb0, 0x1d, 0xf3, - 0x10, 0xb0, 0xa1, 0x71, 0xa1, 0x9e, 0x77, 0xe0, 0x40, 0xb8, 0x8f, 0x4f, - 0x90, 0x9a, 0x66, 0x2c, 0x01, 0x3b, 0xcc, 0x88, 0x11, 0x9c, 0x78, 0x3c, - 0x18, 0xb9, 0xc7, 0x48, 0xe5, 0xe1, 0x29, 0xfa, 0x18, 0xe5, 0xf3, 0x23, - 0x24, 0x79, 0xff, 0x1b, 0x78, 0xcc, 0xf0, 0x9f, 0x8d, 0x93, 0xa9, 0xcc, - 0xd6, 0x0a, 0xc3, 0x31, 0xd7, 0x7c, 0x56, 0x9b, 0xcf, 0xa7, 0xb2, 0xea, - 0x79, 0x30, 0xf7, 0x41, 0xb2, 0x0a, 0x09, 0xe0, 0x21, 0xc8, 0xbf, 0xca, - 0x45, 0x9a, 0xa8, 0x58, 0x91, 0x7a, 0x08, 0xe0, 0xe9, 0x3d, 0x22, 0xba, - 0x9c, 0x26, 0xbd, 0xb8, 0xf7, 0x8f, 0x9a, 0x6f, 0x96, 0x90, 0x89, 0x25, - 0xd3, 0xd4, 0x84, 0x10, 0x4c, 0x23, 0xbe, 0x4e, 0xa8, 0xe0, 0x20, 0x85, - 0xea, 0xb1, 0x25, 0xe8, 0xce, 0x37, 0x2a, 0x66, 0xf6, 0x1c, 0x84, 0x98, - 0x56, 0xf3, 0x6d, 0x1c, 0x0e, 0xd2, 0xe4, 0xfa, 0x36, 0x59, 0x96, 0xf9, - 0xbc, 0x89, 0x9c, 0x24, 0x91, 0x3b, 0xf3, 0xe8, 0xf2, 0x7b, 0x0d, 0xae, - 0x8c, 0x37, 0xb5, 0x97, 0xa7, 0x02, 0xb9, 0xe0, 0xd4, 0x36, 0x63, 0x2d, - 0x69, 0x47, 0x4e, 0xb9, 0xab, 0x45, 0x5c, 0x94, 0x36, 0xb2, 0xba, 0xf2, - 0x19, 0x26, 0x80, 0x91, 0x8a, 0x20, 0xad, 0xaf, 0x9c, 0x54, 0x02, 0x9c, - 0xcf, 0x84, 0xf4, 0xc0, 0x37, 0x9c, 0xe8, 0x4d, 0x41, 0xd1, 0x26, 0x1a, - 0x7c, 0x32, 0x27, 0x41, 0x46, 0xda, 0x2f, 0xcf, 0xb6, 0x9a, 0x10, 0xdc, - 0x1e, 0xe8, 0xb7, 0xea, 0x4f, 0x54, 0xac, 0x3b, 0x07, 0xcd, 0x5e, 0xba, - 0xba, 0x87, 0x16, 0x8d, 0xc1, 0xa3, 0x42, 0x46, 0x3e, 0xac, 0x30, 0xe5, - 0x03, 0x75, 0x23, 0xd6, 0x6c, 0xda, 0xa8, 0x42, 0xcc, 0x08, 0x6d, 0xf8, - 0xb0, 0xa3, 0xa2, 0x1d, 0x94, 0x37, 0x44, 0xb0, 0x4b, 0x4d, 0x5e, 0x20, - 0x0e, 0xa4, 0xc1, 0x47, 0x83, 0x0d, 0x03, 0xe3, 0xc4, 0x5c, 0x43, 0x49, - 0xff, 0x66, 0x72, 0x7c, 0xdf, 0x94, 0xc6, 0xdf, 0xf1, 0xe8, 0xa2, 0x41, - 0xaf, 0xa6, 0xdf, 0xb0, 0xfa, 0xcd, 0x91, 0xde, 0x3f, 0xd6, 0x97, 0xd3, - 0x8b, 0xc9, 0xf9, 0x61, 0x76, 0x9d, 0xdf, 0xc3, 0x24, 0x1b, 0xbf, 0x0c, - 0xe2, 0x2f, 0x95, 0x5f, 0x2a, 0xd2, 0xfe, 0x8d, 0x50, 0xfc, 0xfe, 0xe2, - 0xfe, 0xfb, 0xbf, 0xbb, 0x05, 0x6e, 0x1c, 0xaa, 0x28, 0x37, 0xc7, 0x27, - 0x80, 0x7d, 0x1d, 0x6f, 0x36, 0x9e, 0xf8, 0x37, 0x8e, 0x2b, 0x14, 0x36, - 0x7b, 0x23, 0xda, 0x83, 0x11, 0x8f, 0x92, 0xfd, 0x1b, 0xff, 0x1d, 0x8b, - 0xf7, 0x0b, 0xc2, 0xee, 0xc2, 0x3f, 0x1d, 0x27, 0x23, 0xf0, 0x47, 0xc8, - 0x88, 0xad, 0x89, 0xfe, 0x87, 0xed, 0x62, 0x6b, 0x54, 0x41, 0xd3, 0x4d, - 0x24, 0x2a, 0x0a, 0x70, 0xdd, 0xb3, 0x03, 0x97, 0xa9, 0x9e, 0x52, 0x6f, - 0x0a, 0x8f, 0x21, 0x25, 0x05, 0x10, 0x5b, 0x1c, 0xab, 0xee, 0x0f, 0x94, - 0x8a, 0xd1, 0xca, 0x30, 0x54, 0xfa, 0x06, 0xa3, 0x0b, 0x9b, 0x06, 0x23, - 0xd0, 0xb0, 0xbe, 0xbb, 0x3c, 0x5a, 0x24, 0xc9, 0x42, 0x1f, 0x77, 0x96, - 0x14, 0x58, 0x38, 0x51, 0x6e, 0xa8, 0x7c, 0x46, 0x32, 0x82, 0x08, 0x79, - 0xb8, 0x24, 0x36, 0xd4, 0x26, 0x48, 0x54, 0xdf, 0x32, 0xfa, 0x46, 0xae, - 0xf9, 0xb1, 0x98, 0xcd, 0xd1, 0x6b, 0x94, 0xc1, 0x6c, 0x0e, 0x20, 0xb2, - 0x25, 0x9c, 0x28, 0xf4, 0x81, 0xc5, 0x46, 0xa6, 0xad, 0x7a, 0xa8, 0xf4, - 0x8c, 0x78, 0x90, 0xe4, 0x1f, 0x0e, 0x63, 0x41, 0xb9, 0xe1, 0x2a, 0xed, - 0x3f, 0xdd, 0xba, 0xff, 0xc7, 0xe0, 0xef, 0x03, 0x15, 0x5d, 0x84, 0x33, - 0xa4, 0xc3, 0x2e, 0x06, 0x70, 0x06, 0x1c, 0x74, 0xa3, 0x4f, 0xfb, 0x4e, - 0x8f, 0xf6, 0x28, 0x64, 0x44, 0x4f, 0x52, 0xa6, 0xe6, 0xce, 0x38, 0x5a, - 0x15, 0x1f, 0xbf, 0x99, 0xa3, 0xa6, 0xd2, 0x19, 0xa3, 0x9e, 0x9e, 0x2e, - 0xa0, 0x25, 0xc0, 0x29, 0x14, 0xf4, 0x5b, 0x11, 0xf1, 0x72, 0x68, 0x0e, - 0xb3, 0x99, 0x4b, 0x83, 0xe5, 0x11, 0xf2, 0x31, 0xdd, 0x90, 0xa9, 0x09, - 0x5d, 0x22, 0x08, 0xd5, 0xaf, 0x2f, 0xb3, 0x9b, 0x9e, 0xf8, 0xcb, 0x30, - 0x08, 0x16, 0x81, 0x08, 0x19, 0xba, 0xf4, 0xdc, 0x50, 0xee, 0x13, 0x8b, - 0x13, 0x84, 0x03, 0x40, 0x51, 0x67, 0x87, 0x9b, 0x0f, 0x3b, 0x09, 0x8b, - 0x43, 0xe2, 0xd9, 0xf8, 0x7f, 0x36, 0x03, 0xb0, 0xbf, 0xcd, 0xe4, 0xde, - 0x09, 0x00, 0x79, 0x9d, 0xe6, 0x55, 0x51, 0x46, 0x7e, 0xe0, 0xca, 0xf3, - 0x44, 0xc2, 0xb8, 0xe0, 0xd2, 0xb1, 0x54, 0x76, 0x91, 0x02, 0x3b, 0xc1, - 0x01, 0xf5, 0x1f, 0x02, 0xcd, 0x3b, 0x96, 0xff, 0x70, 0xe5, 0x11, 0x0a, - 0xdc, 0x5d, 0x4a, 0x7a, 0x43, 0x5a, 0x13, 0xe0, 0x8f, 0x29, 0x6b, 0x42, - 0x1b, 0x65, 0x60, 0xdb, 0xd0, 0x50, 0x40, 0xec, 0x06, 0x3c, 0xc6, 0x36, - 0xd2, 0xed, 0x40, 0x34, 0x0e, 0x63, 0x36, 0xb8, 0xf8, 0x81, 0xa9, 0x8f, - 0x65, 0x68, 0xfa, 0x45, 0x3b, 0x6a, 0x9e, 0x67, 0x5e, 0x7c, 0x35, 0x7a, - 0xc3, 0xff, 0x86, 0x54, 0xcc, 0x4a, 0x26, 0x92, 0x93, 0x94, 0x89, 0x91, - 0x6f, 0x2f, 0xdd, 0x9a, 0xff, 0x87, 0x47, 0x06, 0xa3, 0x2b, 0xcf, 0x18, - 0x14, 0x64, 0x75, 0xd7, 0x24, 0x6a, 0x43, 0x0d, 0x66, 0xaa, 0xe8, 0x24, - 0xc5, 0x7b, 0x27, 0x87, 0xb7, 0xfd, 0xc6, 0xb0, 0xab, 0xc5, 0x91, 0x7f, - 0xb9, 0x9e, 0x75, 0x01, 0xd4, 0xea, 0xe5, 0xbf, 0xfc, 0x78, 0xad, 0x07, - 0x7c, 0x1b, 0xf1, 0x87, 0x86, 0xf2, 0xc9, 0x08, 0x13, 0x0f, 0xfd, 0x99, - 0x82, 0xfe, 0x5a, 0xa8, 0x24, 0x11, 0xd4, 0x27, 0x92, 0x3b, 0x8e, 0xe7, - 0xff, 0xcb, 0x69, 0x51, 0xa0, 0x55, 0x30, 0x49, 0x4e, 0xd2, 0x5d, 0x6a, - 0xd4, 0x6f, 0x62, 0x99, 0xf0, 0xe6, 0x3f, 0x27, 0xc9, 0xa8, 0x23, 0x50, - 0x09, 0x23, 0xc2, 0x52, 0xb1, 0x4e, 0xa5, 0xfd, 0xcb, 0x96, 0x18, 0x48, - 0x48, 0xfa, 0xf4, 0x1e, 0x55, 0x3f, 0xb8, 0x7c, 0x0e, 0x55, 0xf5, 0x24, - 0xbf, 0xf1, 0xda, 0x2e, 0xa2, 0x8e, 0xc1, 0x48, 0xbe, 0x34, 0x23, 0xe0, - 0xdc, 0xfb, 0x69, 0x52, 0xb4, 0x55, 0x92, 0x8c, 0xc4, 0x07, 0x14, 0x16, - 0x26, 0x04, 0xaf, 0x35, 0x1a, 0x2d, 0x0f, 0xb4, 0x35, 0xb9, 0x40, 0x8e, - 0x3a, 0xa8, 0xcd, 0x05, 0x40, 0xd0, 0x7e, 0x59, 0xda, 0xda, 0xcc, 0xc4, - 0xc8, 0x8b, 0x8e, 0x6c, 0x6c, 0x05, 0x32, 0x9d, 0xe1, 0x83, 0x05, 0x46, - 0x76, 0xdf, 0xf3, 0x11, 0x84, 0x16, 0xea, 0x70, 0xde, 0xe5, 0xad, 0xd7, - 0xcb, 0x7c, 0xa0, 0x9c, 0xe6, 0x03, 0xb1, 0x39, 0x18, 0x6c, 0x86, 0xe0, - 0xc0, 0xf9, 0xa2, 0xa0, 0xe3, 0x36, 0x06, 0x64, 0xf1, 0x0d, 0xb8, 0x57, - 0x18, 0x9d, 0x54, 0xb0, 0xa3, 0xbb, 0xc1, 0xdc, 0x24, 0x6d, 0x3a, 0x6c, - 0xed, 0x05, 0xb9, 0x4a, 0x4a, 0x8c, 0x78, 0x1d, 0x72, 0xd0, 0xd3, 0xf2, - 0xe3, 0x57, 0x63, 0x84, 0x3c, 0x85, 0xbe, 0xf1, 0x47, 0xb8, 0xa0, 0x7f, - 0x72, 0x94, 0x6e, 0x34, 0xd6, 0xb5, 0x0d, 0x76, 0xe5, 0xf5, 0xac, 0xad, - 0x6c, 0x3e, 0xb1, 0x84, 0xfd, 0xdf, 0x3f, 0x73, 0xf6, 0x40, 0x26, 0x1e, - 0xd6, 0x48, 0xbc, 0x40, 0x46, 0x28, 0x49, 0x87, 0xc4, 0x03, 0x9d, 0x8e, - 0x2c, 0x42, 0x0d, 0x2d, 0x82, 0xa3, 0x1b, 0xc3, 0x90, 0xef, 0x78, 0xe0, - 0x3f, 0x70, 0x77, 0x00, 0x80, 0x5a, 0xcf, 0x51, 0x6a, 0x11, 0x51, 0x15, - 0x89, 0xb3, 0x8c, 0xbc, 0xa5, 0xad, 0xe6, 0x53, 0x88, 0x45, 0x8e, 0x57, - 0xb7, 0x23, 0x82, 0x97, 0x7b, 0xdc, 0xc6, 0x65, 0x2a, 0xcf, 0x44, 0xc2, - 0x04, 0x37, 0xfa, 0x46, 0x14, 0x9e, 0xf8, 0x5b, 0xc4, 0x41, 0x9e, 0x38, - 0xaf, 0x75, 0xec, 0x84, 0x69, 0xd9, 0x48, 0x99, 0xe1, 0xa2, 0x88, 0xd1, - 0x53, 0x3d, 0xc2, 0xf1, 0xac, 0x83, 0x4d, 0x83, 0x96, 0x95, 0x07, 0x87, - 0x06, 0x50, 0x0b, 0x89, 0x17, 0xc5, 0x68, 0x47, 0x8e, 0x7f, 0x52, 0x98, - 0x52, 0xf6, 0x1d, 0xb9, 0x4f, 0xba, 0x93, 0xca, 0xcc, 0x9b, 0x6f, 0x33, - 0xff, 0xb3, 0xd2, 0x83, 0xc8, 0xce, 0xb7, 0x28, 0x76, 0x84, 0x85, 0x34, - 0x53, 0x3d, 0xd0, 0x84, 0x1c, 0x7c, 0x72, 0x09, 0x24, 0xfc, 0x9a, 0x57, - 0x5f, 0x91, 0x07, 0x2c, 0x6c, 0x67, 0x8e, 0xe5, 0x9e, 0xff, 0xab, 0xc7, - 0x3e, 0x09, 0x94, 0x58, 0x0b, 0x3a, 0xcb, 0x83, 0x22, 0x1f, 0x44, 0x9e, - 0x27, 0x82, 0xb4, 0x24, 0xdd, 0xf7, 0x13, 0x62, 0xb1, 0x39, 0x30, 0xa2, - 0x87, 0x9b, 0x0b, 0xdd, 0xe3, 0x6c, 0x83, 0x64, 0x74, 0x5d, 0x5d, 0xe4, - 0x04, 0x4a, 0xb4, 0xf8, 0x66, 0xc1, 0x34, 0xaa, 0x41, 0x3e, 0x76, 0xbc, - 0xa8, 0x22, 0x20, 0x18, 0xe6, 0x1c, 0x2b, 0x83, 0x52, 0x06, 0x2a, 0xbc, - 0xdc, 0xc5, 0xfc, 0xc1, 0x5a, 0xce, 0xbf, 0xb8, 0x78, 0x87, 0x2b, 0xf6, - 0xc8, 0x93, 0x82, 0xd9, 0x32, 0x6f, 0x52, 0x89, 0x89, 0xb3, 0xd7, 0x64, - 0x56, 0x27, 0xf1, 0x3a, 0x05, 0x39, 0x1a, 0x64, 0xd9, 0x60, 0x86, 0x49, - 0x2a, 0x10, 0xe8, 0x77, 0x16, 0x42, 0x52, 0xe1, 0x56, 0x1f, 0xce, 0xee, - 0x0a, 0x33, 0xf8, 0x3a, 0x7f, 0xe4, 0xb4, 0x6a, 0x78, 0xc9, 0xa3, 0x4c, - 0xb0, 0x58, 0x72, 0x09, 0xb6, 0x34, 0xd4, 0x19, 0xcb, 0x8c, 0xc6, 0xa6, - 0xb7, 0x8b, 0x3b, 0x0b, 0xdd, 0x53, 0xc6, 0xce, 0x47, 0x93, 0x26, 0xce, - 0xfd, 0x74, 0x03, 0xcc, 0x03, 0xf6, 0xf1, 0x07, 0x67, 0xcb, 0x77, 0x8f, - 0x20, 0xf6, 0x9a, 0xab, 0x2b, 0x64, 0xe4, 0xc1, 0xcf, 0x3e, 0xd4, 0xc3, - 0x71, 0xef, 0xff, 0xac, 0x64, 0xbf, 0x87, 0x1b, 0xfe, 0x83, 0x20, 0xb6, - 0xfd, 0x40, 0xca, 0xf0, 0xb4, 0xea, 0x0e, 0x18, 0x5a, 0x99, 0xc6, 0x0e, - 0xeb, 0x7e, 0x41, 0x7e, 0x0f, 0x9b, 0xdc, 0x1b, 0xc2, 0x14, 0x1f, 0x9f, - 0x1f, 0x60, 0xbe, 0xf0, 0xff, 0x4a, 0xe7, 0xf8, 0x02, 0xd8, 0x2d, 0x11, - 0xdf, 0x78, 0xae, 0xd3, 0x94, 0xc3, 0x94, 0xd7, 0x41, 0x93, 0x69, 0x80, - 0xb7, 0x09, 0x66, 0xad, 0xc9, 0x85, 0xc2, 0xec, 0x0f, 0x60, 0xb1, 0x0b, - 0x88, 0xc2, 0xff, 0xc6, 0x1d, 0x12, 0x28, 0x18, 0x9f, 0x83, 0x52, 0x0a, - 0x05, 0x56, 0x46, 0xdf, 0x6a, 0x09, 0x44, 0x30, 0x8c, 0x17, 0x72, 0x4b, - 0x9b, 0x9f, 0xd8, 0x7b, 0x0f, 0xff, 0x46, 0x5c, 0x7b, 0x7f, 0x2b, 0x7e, - 0x6f, 0x8b, 0x3c, 0x08, 0x56, 0x62, 0x08, 0x12, 0x15, 0x1b, 0xaa, 0x6a, - 0xa9, 0x10, 0x33, 0xf0, 0x37, 0xde, 0xd6, 0xa7, 0x0a, 0x71, 0xfc, 0x23, - 0xd1, 0xfe, 0xca, 0xf0, 0x71, 0x22, 0x37, 0x62, 0x3f, 0x8d, 0x4b, 0x33, - 0x60, 0xe6, 0x81, 0x64, 0xc1, 0x50, 0x14, 0xc0, 0x63, 0x33, 0x25, 0x2a, - 0x4c, 0x83, 0x89, 0xb1, 0x35, 0x75, 0x60, 0x24, 0xa6, 0x88, 0xcd, 0x84, - 0xbd, 0x47, 0x23, 0x58, 0xd0, 0x35, 0x62, 0xdd, 0x11, 0xc8, 0x3a, 0x48, - 0x7d, 0x93, 0x30, 0xa6, 0xd3, 0x26, 0x19, 0x09, 0x15, 0xd1, 0xab, 0xdd, - 0xfc, 0x66, 0x12, 0xce, 0x38, 0x19, 0x30, 0x12, 0x30, 0xaf, 0x30, 0xcb, - 0x03, 0xa1, 0xd6, 0x38, 0x0d, 0x96, 0x69, 0xc8, 0x6d, 0x1b, 0x77, 0x52, - 0x79, 0xdb, 0x14, 0x01, 0x60, 0x95, 0x87, 0x33, 0x96, 0xb1, 0x64, 0x7d, - 0x1b, 0x47, 0x98, 0x63, 0x3e, 0x2d, 0xc3, 0x7c, 0xde, 0x99, 0xf8, 0xf4, - 0xd8, 0x26, 0x57, 0xd3, 0x0b, 0x53, 0xc6, 0xf7, 0x40, 0x5b, 0x36, 0xdc, - 0x92, 0x8a, 0x31, 0x5b, 0x80, 0xa4, 0x4f, 0xff, 0xe0, 0x0f, 0x37, 0x65, - 0xdf, 0x38, 0xb4, 0xf4, 0xc6, 0x1d, 0xa4, 0x42, 0x32, 0x32, 0x05, 0x97, - 0xfd, 0x85, 0x29, 0x17, 0xd0, 0x2f, 0x4a, 0x46, 0x46, 0x3a, 0x3d, 0x05, - 0x16, 0x27, 0x31, 0x83, 0x73, 0x8e, 0xe1, 0x23, 0xfa, 0xad, 0xfa, 0x50, - 0x70, 0x0a, 0x75, 0x1e, 0x75, 0xc5, 0xfa, 0x3d, 0x30, 0x39, 0xd7, 0xfc, - 0xa6, 0x4a, 0x2b, 0x2b, 0x53, 0x73, 0x3d, 0xde, 0x22, 0x08, 0x3e, 0x76, - 0x72, 0x94, 0x82, 0xc5, 0x97, 0x69, 0x80, 0xde, 0xc7, 0x44, 0x8a, 0x75, - 0x19, 0x50, 0x99, 0xa4, 0x1b, 0x85, 0x59, 0x6c, 0xea, 0xc3, 0x82, 0x3d, - 0xb0, 0x56, 0x94, 0xfc, 0xdf, 0xdb, 0x63, 0x4e, 0x21, 0xd6, 0x46, 0xd6, - 0x81, 0xa4, 0x24, 0xaa, 0x36, 0x4f, 0xa7, 0x7b, 0x1b, 0xdd, 0xa1, 0xa2, - 0xe2, 0x5f, 0x4e, 0xad, 0x10, 0x13, 0xc5, 0xc9, 0x7a, 0x32, 0xd3, 0x39, - 0x33, 0xfc, 0x84, 0x55, 0x77, 0xe6, 0x9d, 0x35, 0x61, 0xbd, 0xf2, 0x4d, - 0xb8, 0x55, 0xcd, 0x9d, 0x49, 0x06, 0x70, 0xb2, 0x44, 0xc2, 0xde, 0x86, - 0xee, 0xd6, 0xc8, 0x6b, 0xa0, 0xca, 0xc8, 0x5a, 0x75, 0x28, 0x62, 0xe7, - 0x24, 0xbe, 0x1c, 0x3b, 0x4c, 0x21, 0x70, 0xbb, 0x55, 0x79, 0x79, 0x69, - 0x48, 0x6f, 0x71, 0x03, 0x7a, 0x51, 0xb0, 0x41, 0x16, 0x0e, 0x97, 0x10, - 0x9c, 0x61, 0xcc, 0xd0, 0xee, 0xe0, 0x97, 0x1e, 0xec, 0x43, 0x5d, 0xc7, - 0x05, 0x83, 0xc0, 0x26, 0xd9, 0xc6, 0xb2, 0x24, 0xd1, 0x5d, 0x8d, 0xc5, - 0x7e, 0xa7, 0xf9, 0x17, 0xef, 0x6d, 0x12, 0x99, 0x25, 0x7e, 0x78, 0xe1, - 0xc0, 0x32, 0xe9, 0x94, 0xde, 0x2c, 0x21, 0x9e, 0xd9, 0xfb, 0x89, 0x25, - 0x3a, 0xa3, 0xbf, 0xa3, 0x8d, 0xdd, 0xb9, 0x4a, 0xf5, 0xb6, 0x96, 0x19, - 0xe1, 0x3f, 0x98, 0xe4, 0x68, 0xc4, 0xdf, 0x36, 0x59, 0x82, 0xc2, 0x8f, - 0x27, 0x2b, 0xd0, 0x89, 0x2c, 0xfa, 0xb5, 0x66, 0x8a, 0x85, 0xc2, 0xca, - 0xce, 0xf6, 0x86, 0xb9, 0x5f, 0x64, 0x9d, 0x35, 0x68, 0x77, 0xfb, 0xa1, - 0xae, 0x8c, 0x03, 0xfe, 0x16, 0x9f, 0xf1, 0x86, 0xe6, 0x70, 0xc4, 0x66, - 0x86, 0xa9, 0xec, 0x40, 0x8d, 0x4e, 0x48, 0xce, 0xf1, 0x2e, 0x79, 0x2b, - 0x00, 0x36, 0x4d, 0x7e, 0xdb, 0xa0, 0xd5, 0xfe, 0x0f, 0x7e, 0xc2, 0x08, - 0xc4, 0xc6, 0x2a, 0xef, 0x71, 0xfc, 0x82, 0x02, 0x4b, 0xc8, 0x7f, 0x53, - 0x70, 0xda, 0x1e, 0xf4, 0x96, 0xe9, 0xbc, 0x00, 0xfa, 0x17, 0x60, 0xdc, - 0xb5, 0x32, 0xca, 0xd2, 0x68, 0x44, 0xae, 0x8f, 0x92, 0x97, 0xe3, 0xb2, - 0x54, 0x44, 0xd4, 0x96, 0x19, 0x74, 0x23, 0x2b, 0x66, 0xb8, 0xa0, 0x1b, - 0x46, 0xe2, 0x06, 0xb6, 0x57, 0x5e, 0x10, 0x1e, 0x6a, 0x23, 0x0c, 0xd1, - 0x0e, 0x8f, 0x30, 0xcf, 0xc1, 0xc9, 0x7b, 0x7c, 0x61, 0x8e, 0x05, 0x3d, - 0x14, 0x80, 0xa8, 0x34, 0x63, 0xda, 0xa7, 0x8c, 0xe8, 0x4f, 0x36, 0xe5, - 0x27, 0x79, 0x53, 0x85, 0x7f, 0x78, 0xb3, 0x5b, 0x64, 0x27, 0x61, 0x5e, - 0x70, 0x66, 0x6e, 0x6a, 0x46, 0x86, 0x18, 0xe1, 0x34, 0xdf, 0x00, 0x2d, - 0xac, 0x9c, 0x26, 0x02, 0x24, 0x3a, 0xb6, 0xf2, 0x93, 0xe2, 0x39, 0xd1, - 0x11, 0x79, 0x3a, 0x7d, 0x50, 0x6c, 0xc7, 0x19, 0x96, 0x00, 0x16, 0x74, - 0x1e, 0x38, 0x6d, 0x08, 0xd5, 0x7a, 0x79, 0xaa, 0xe8, 0xa3, 0xdf, 0x48, - 0x8e, 0x89, 0x44, 0x71, 0x5f, 0xf8, 0xb1, 0x75, 0x03, 0x23, 0x24, 0x9d, - 0x90, 0xa2, 0xb2, 0x9a, 0x3a, 0x21, 0x37, 0x0c, 0xad, 0x56, 0x2c, 0x70, - 0x1f, 0x12, 0x5b, 0x10, 0x00, 0x56, 0x52, 0x9f, 0x28, 0x86, 0x3c, 0x84, - 0x74, 0xdf, 0x55, 0x3a, 0x9d, 0x51, 0x14, 0x0a, 0x37, 0xdf, 0x9c, 0xd6, - 0x86, 0x86, 0xec, 0x9e, 0xdc, 0x11, 0x9b, 0x59, 0x2d, 0x47, 0x60, 0x14, - 0x56, 0x07, 0x6c, 0x24, 0x88, 0x1b, 0x18, 0x15, 0x57, 0xc7, 0xc5, 0xbd, - 0x60, 0x35, 0xde, 0x83, 0xf1, 0x8e, 0xa4, 0xe2, 0xaa, 0x5f, 0x3d, 0x8c, - 0xc0, 0xdd, 0xa8, 0xb0, 0xfd, 0xc1, 0x72, 0x05, 0x13, 0xa3, 0xf8, 0xb2, - 0xdc, 0x1b, 0x97, 0x1c, 0x13, 0x33, 0xbe, 0x48, 0xc1, 0x8d, 0x75, 0xea, - 0xcf, 0xe3, 0xe6, 0x84, 0x8d, 0x28, 0xef, 0x6a, 0x80, 0x30, 0x66, 0x4a, - 0xda, 0xb2, 0xf8, 0xa7, 0x25, 0xf3, 0x53, 0xa6, 0xf2, 0x64, 0xc6, 0x14, - 0xce, 0x29, 0x01, 0x14, 0x7e, 0xac, 0x64, 0x88, 0xcc, 0x58, 0x7f, 0x33, - 0x78, 0x3e, 0x19, 0x63, 0x9b, 0x8e, 0xd2, 0xb1, 0x9d, 0x79, 0x68, 0xea, - 0x81, 0xbc, 0xdd, 0x65, 0x79, 0xef, 0xf2, 0x6b, 0xcf, 0xaf, 0xf1, 0x27, - 0x6f, 0xd2, 0xf6, 0xf6, 0x64, 0xf4, 0x58, 0x80, 0xb0, 0x37, 0x04, 0x82, - 0xdc, 0x34, 0x22, 0x37, 0x1b, 0x26, 0x7f, 0xb0, 0xcf, 0x89, 0xd1, 0xe4, - 0x14, 0xe4, 0x81, 0x19, 0x5a, 0x83, 0x6c, 0x1d, 0x46, 0x9c, 0xa9, 0x44, - 0x50, 0x70, 0xf2, 0x0f, 0x31, 0xf9, 0x30, 0x78, 0xdf, 0x2a, 0x98, 0x3f, - 0xff, 0xbd, 0x19, 0x91, 0xd3, 0xaa, 0x23, 0xfa, 0xeb, 0xf1, 0x7c, 0x65, - 0x3a, 0x77, 0xaa, 0x6e, 0x9e, 0x0b, 0xfb, 0x0f, 0x51, 0xb8, 0x76, 0xae, - 0x87, 0x8e, 0xc5, 0x62, 0x22, 0x0e, 0x09, 0x4d, 0xa0, 0x1e, 0xea, 0xd3, - 0xa5, 0x20, 0x18, 0xfa, 0x1e, 0xe8, 0xaa, 0xcd, 0xb3, 0xcc, 0xd1, 0x2f, - 0x0b, 0x89, 0xf9, 0xf9, 0x85, 0xe3, 0xf0, 0xff, 0xbd, 0x2d, 0xbf, 0x9e, - 0x96, 0x37, 0x4f, 0x73, 0x02, 0xed, 0xf2, 0x6b, 0x78, 0x70, 0xc8, 0xf0, - 0xe2, 0x20, 0x04, 0xea, 0x06, 0xc2, 0xb1, 0xc2, 0xab, 0x0e, 0x16, 0x0c, - 0x6d, 0x34, 0x3c, 0xe3, 0xc8, 0xd4, 0x1b, 0x0b, 0xcd, 0x50, 0xfc, 0x1b, - 0x3b, 0xab, 0x97, 0xfa, 0x62, 0x23, 0x9b, 0x0d, 0x00, 0x5e, 0x40, 0x45, - 0x8e, 0xec, 0x54, 0x0a, 0x9d, 0x3f, 0xd1, 0xcc, 0xbd, 0x46, 0x5a, 0x18, - 0x1f, 0x58, 0xa9, 0x10, 0x4d, 0x72, 0x2a, 0x3d, 0xe6, 0x61, 0x7f, 0x32, - 0x3c, 0xf9, 0x1f, 0xcc, 0x1c, 0x1b, 0xfe, 0xff, 0xbd, 0xd3, 0x00, 0x67, - 0xd4, 0x3f, 0x27, 0x08, 0x4e, 0x36, 0x72, 0x83, 0x58, 0x43, 0x90, 0x63, - 0xff, 0x0d, 0xba, 0xa4, 0x37, 0x20, 0xf5, 0xd3, 0x8e, 0xee, 0x16, 0x94, - 0x3d, 0x43, 0x52, 0xfb, 0x99, 0x6e, 0x19, 0x4d, 0x43, 0xba, 0xbf, 0x6f, - 0xd8, 0xef, 0x10, 0x98, 0x26, 0x01, 0xe5, 0x82, 0xa1, 0x47, 0xfe, 0x5e, - 0x08, 0x68, 0xf3, 0xfe, 0xce, 0x5f, 0x5f, 0xa4, 0xd6, 0x97, 0x7d, 0x0b, - 0xe8, 0x9d, 0x47, 0x42, 0x8a, 0xbd, 0x02, 0xda, 0x39, 0x10, 0x32, 0x80, - 0x42, 0x67, 0xe4, 0xfb, 0xc5, 0xf6, 0x17, 0x2d, 0x54, 0xe2, 0xaa, 0x3e, - 0x08, 0xab, 0x0c, 0xa8, 0xaf, 0xe3, 0x03, 0x33, 0x22, 0x0f, 0x34, 0x38, - 0xa6, 0x9e, 0x50, 0x17, 0x2e, 0x43, 0x0b, 0x04, 0x1a, 0x4f, 0x27, 0xdf, - 0x58, 0x7a, 0x33, 0xc8, 0xd9, 0xff, 0x9b, 0x15, 0x2e, 0x59, 0x93, 0x3e, - 0x20, 0x8f, 0x12, 0x0d, 0xdb, 0xd4, 0x7d, 0x7a, 0x1e, 0x2f, 0x87, 0x85, - 0x15, 0x0b, 0xb9, 0x61, 0xdd, 0x59, 0x82, 0x7a, 0xcc, 0x68, 0x53, 0x18, - 0x5a, 0x2c, 0xf9, 0xc8, 0x9d, 0x09, 0x12, 0x78, 0x40, 0xe0, 0xcf, 0x94, - 0xfe, 0x41, 0xb5, 0xaf, 0x63, 0xd0, 0x42, 0xe0, 0x24, 0x31, 0xf1, 0x48, - 0xb1, 0x6a, 0x75, 0x17, 0xa3, 0x76, 0x17, 0xc8, 0x74, 0xc3, 0x48, 0x16, - 0xa5, 0x17, 0x99, 0xca, 0x80, 0xc9, 0x20, 0xdd, 0xe5, 0x86, 0xbd, 0xe8, - 0xf1, 0x20, 0xb8, 0x63, 0xcb, 0x20, 0xe9, 0x23, 0xe4, 0x03, 0x39, 0x3a, - 0xef, 0x93, 0xd0, 0xe3, 0x5c, 0x04, 0x9e, 0xc3, 0xc1, 0xe4, 0x9b, 0x32, - 0x05, 0xf6, 0x05, 0x9a, 0x09, 0xac, 0x8e, 0xb0, 0x54, 0x18, 0x92, 0x86, - 0x96, 0x39, 0x80, 0xb8, 0x81, 0x2c, 0xa0, 0x2c, 0x9c, 0xb0, 0x87, 0x38, - 0xca, 0x01, 0x19, 0x9e, 0xc7, 0xe7, 0xd0, 0x7c, 0xf4, 0x16, 0x54, 0xc8, - 0x83, 0x3d, 0x67, 0xff, 0xb8, 0x0e, 0xb8, 0x5a, 0x22, 0x68, 0x5d, 0x85, - 0x6b, 0xe2, 0xdd, 0x4c, 0x22, 0xed, 0xb1, 0x02, 0xed, 0x4a, 0xf1, 0xfc, - 0xf1, 0x08, 0x7f, 0x32, 0x7a, 0x22, 0x03, 0xdf, 0xc3, 0x4e, 0x20, 0x45, - 0x3e, 0xed, 0x8a, 0xf6, 0xae, 0xc2, 0x32, 0xdf, 0x70, 0x9b, 0x90, 0x79, - 0x38, 0x73, 0xc2, 0x93, 0xd4, 0xb8, 0x24, 0xcd, 0x1f, 0x18, 0x77, 0x0c, - 0x69, 0x4c, 0xb1, 0x06, 0x10, 0x97, 0xc3, 0xc5, 0x30, 0x34, 0x0b, 0x26, - 0x47, 0xa4, 0x98, 0x3b, 0x71, 0xb1, 0xec, 0x89, 0xab, 0x43, 0x4b, 0xc7, - 0xb0, 0xeb, 0x37, 0xee, 0x35, 0xe2, 0xcb, 0xc3, 0xcb, 0xe5, 0xf2, 0xf8, - 0x87, 0xea, 0x6a, 0x74, 0xf2, 0xef, 0xbe, 0x96, 0xe5, 0xf0, 0x49, 0x50, - 0x75, 0xca, 0x78, 0xc1, 0x1a, 0x2c, 0x28, 0xad, 0x17, 0xce, 0x4f, 0x48, - 0xf8, 0x2c, 0xb9, 0x43, 0x3f, 0x48, 0x70, 0xe1, 0xe4, 0x53, 0xe3, 0x4f, - 0xb2, 0xde, 0x3f, 0x71, 0xa0, 0xea, 0xf6, 0xb7, 0x24, 0xa1, 0x52, 0xc4, - 0x2d, 0xd2, 0x63, 0xf5, 0xa0, 0x77, 0xfe, 0xea, 0xf8, 0xc5, 0x69, 0xef, - 0x09, 0x1d, 0x37, 0x8f, 0xbc, 0xa5, 0xf7, 0x68, 0x3e, 0xb9, 0xcf, 0x41, - 0xa0, 0x7c, 0x5b, 0x9e, 0x77, 0x1e, 0x8b, 0x20, 0x62, 0x7d, 0x5f, 0x9e, - 0x9c, 0xff, 0x19, 0xf5, 0x5a, 0x20, 0x20, 0x3f, 0x9f, 0x14, 0x13, 0xfc, - 0x96, 0x94, 0xca, 0x2d, 0xd2, 0xe9, 0xc9, 0x21, 0x0d, 0x68, 0x4d, 0x58, - 0xeb, 0xc6, 0xde, 0x6e, 0xc5, 0x50, 0xf8, 0xbe, 0x2a, 0x0b, 0x9f, 0x91, - 0xa8, 0xcf, 0x6d, 0xe1, 0x90, 0xcb, 0xd0, 0xb7, 0x3b, 0x2c, 0x13, 0x6f, - 0x2a, 0x83, 0x95, 0x76, 0x82, 0xea, 0xec, 0x9b, 0xc5, 0xd5, 0x2a, 0xaa, - 0x6a, 0x2b, 0x8d, 0xb1, 0xe8, 0x64, 0xaa, 0xe1, 0xee, 0xc6, 0x7e, 0x07, - 0xb2, 0x51, 0xb2, 0x50, 0x8e, 0x1d, 0x16, 0xc0, 0x1c, 0x68, 0x83, 0xfd, - 0xe0, 0x60, 0xd1, 0xdb, 0x28, 0xcd, 0x70, 0x52, 0xb9, 0x41, 0x1f, 0x07, - 0x9e, 0x30, 0xd7, 0x4b, 0xe5, 0x4d, 0x45, 0x0e, 0xf2, 0xf2, 0x27, 0xe8, - 0x2a, 0xd6, 0x3a, 0xa5, 0x6f, 0xee, 0x26, 0x83, 0x61, 0x5f, 0x8a, 0xf3, - 0x48, 0x50, 0x5f, 0x54, 0x18, 0xcb, 0x6d, 0x66, 0x3a, 0xb5, 0x87, 0xd5, - 0x85, 0x7d, 0x65, 0x01, 0x0c, 0xdb, 0x59, 0x77, 0x86, 0x99, 0xb9, 0xed, - 0x9f, 0x81, 0x65, 0x7c, 0xfb, 0x66, 0xb3, 0x0f, 0xbd, 0x1d, 0xfb, 0x8b, - 0x13, 0x26, 0xa7, 0x69, 0xbf, 0x0d, 0x48, 0x59, 0x88, 0x0d, 0x5f, 0x82, - 0xd2, 0xb2, 0xd0, 0xce, 0xca, 0x46, 0x6c, 0xb3, 0xdb, 0x47, 0x60, 0x9e, - 0xfc, 0x7c, 0xab, 0x26, 0x5a, 0x0d, 0x7a, 0x8a, 0xd2, 0x1a, 0xfd, 0xc0, - 0xcc, 0x0c, 0xd4, 0x2b, 0xc7, 0xce, 0x1e, 0x17, 0xeb, 0xf4, 0x93, 0xc8, - 0xe2, 0xa4, 0xb5, 0xfd, 0xfb, 0x9e, 0xbe, 0x95, 0x93, 0x3b, 0xa3, 0x85, - 0xa9, 0x43, 0xfa, 0x46, 0xaa, 0x9d, 0x98, 0x43, 0xa5, 0xd3, 0xa0, 0x59, - 0x9e, 0x86, 0x1b, 0xae, 0x53, 0xc3, 0x0a, 0xee, 0x32, 0x7f, 0x0d, 0x05, - 0x7d, 0xdc, 0x84, 0x49, 0xc6, 0x42, 0xca, 0x66, 0x7f, 0x1a, 0x7e, 0xd0, - 0xc8, 0x4c, 0xe3, 0x80, 0x85, 0x32, 0xa3, 0xb7, 0x2d, 0x8d, 0x8c, 0xaf, - 0x0d, 0xa4, 0x5f, 0x3b, 0x09, 0x46, 0x86, 0x9c, 0x07, 0x35, 0x7c, 0x07, - 0xc3, 0x59, 0xda, 0x84, 0x8c, 0x24, 0xd9, 0x56, 0x17, 0x23, 0xfb, 0xc6, - 0x34, 0x0c, 0x03, 0xb2, 0xc9, 0x47, 0xea, 0x5a, 0x20, 0x98, 0x72, 0xfe, - 0xa2, 0x6a, 0xe9, 0xc2, 0x8c, 0x9d, 0x8e, 0xff, 0xc7, 0xd6, 0xb7, 0x6e, - 0xb7, 0xeb, 0xf3, 0xcc, 0x7e, 0xff, 0xdf, 0x25, 0x49, 0x9c, 0x84, 0x5f, - 0x01, 0xf3, 0x18, 0x48, 0x4b, 0xaf, 0x7e, 0x6b, 0x66, 0x24, 0xdb, 0xf4, - 0xdd, 0x6b, 0xb5, 0xd6, 0xc8, 0xf1, 0x09, 0x1f, 0xe5, 0x93, 0x8c, 0x8d, - 0x24, 0x23, 0xe8, 0x76, 0x27, 0xca, 0x22, 0x66, 0x6b, 0xed, 0x81, 0xc2, - 0x87, 0xba, 0x4b, 0xb3, 0x58, 0x38, 0xe8, 0x2e, 0x83, 0x46, 0x56, 0xd1, - 0x53, 0xe0, 0x9b, 0x8f, 0x3e, 0x1a, 0x7c, 0xc1, 0xa0, 0x92, 0x67, 0xa3, - 0x2b, 0x8d, 0x55, 0xae, 0x6d, 0xa2, 0x21, 0xef, 0x2b, 0x57, 0xeb, 0x0d, - 0xd0, 0x1a, 0x62, 0x04, 0x4c, 0x85, 0xf4, 0xa9, 0xb9, 0xbb, 0x0c, 0xdf, - 0x0c, 0x24, 0x0d, 0x55, 0xc7, 0x02, 0x19, 0x06, 0x66, 0xf3, 0xa7, 0x74, - 0x2b, 0x18, 0x74, 0x70, 0xaf, 0x15, 0xc6, 0x9d, 0x91, 0xa5, 0x24, 0x19, - 0x0c, 0x4b, 0x0d, 0x72, 0x98, 0xd6, 0xe1, 0xe1, 0x74, 0x11, 0x1d, 0xd3, - 0x9d, 0x2e, 0x20, 0x37, 0xa0, 0x35, 0xc5, 0x67, 0xe1, 0xb0, 0x02, 0xcd, - 0xe2, 0x24, 0xf1, 0x8b, 0x78, 0x74, 0x41, 0x84, 0xeb, 0xb1, 0x0e, 0xd9, - 0x70, 0x09, 0xa3, 0xf9, 0x2f, 0xac, 0xf5, 0x8b, 0x2e, 0x08, 0x91, 0xb2, - 0x22, 0x19, 0xf8, 0x4e, 0xfc, 0x54, 0x93, 0x98, 0xe0, 0x0c, 0x3d, 0xf9, - 0xc2, 0x7d, 0x1b, 0x79, 0xcb, 0xb7, 0x9b, 0xd2, 0x9a, 0x6f, 0x10, 0x91, - 0x31, 0x78, 0x2c, 0x36, 0xea, 0xda, 0x24, 0x1a, 0x6b, 0x0d, 0x4b, 0xf6, - 0xdc, 0xc6, 0xa6, 0x4d, 0x58, 0x44, 0x6e, 0x67, 0x7e, 0x43, 0x9e, 0xdc, - 0x3f, 0x72, 0x00, 0x8f, 0x82, 0x7d, 0xe1, 0xf0, 0x3a, 0x4c, 0xba, 0xd9, - 0x5f, 0x65, 0x50, 0x44, 0xbb, 0x67, 0x0e, 0x0e, 0xf0, 0xf8, 0x6f, 0x4a, - 0x6b, 0x8e, 0xad, 0x3f, 0x87, 0x2f, 0x02, 0x2f, 0xa6, 0xbc, 0x73, 0xc9, - 0xdf, 0x80, 0xa2, 0xff, 0x6e, 0xc5, 0x01, 0x1c, 0xed, 0xd8, 0x98, 0x24, - 0x93, 0x21, 0x7e, 0xc7, 0x75, 0x06, 0x60, 0xcc, 0xa7, 0x2e, 0x2e, 0x7d, - 0x82, 0x15, 0xe8, 0xf2, 0x1b, 0xd2, 0x09, 0x3d, 0xc1, 0x58, 0x04, 0x58, - 0x6c, 0xf6, 0xcc, 0x24, 0x93, 0x72, 0x6b, 0xbb, 0xc3, 0x5b, 0x30, 0x5e, - 0x30, 0xc4, 0x88, 0xfd, 0x90, 0x66, 0x07, 0x03, 0xe4, 0x8a, 0x38, 0x4c, - 0x51, 0x33, 0x97, 0xb7, 0x32, 0xea, 0x02, 0xca, 0x21, 0xdb, 0x80, 0x60, - 0x3e, 0xf3, 0x43, 0xfd, 0x76, 0x7e, 0x64, 0xac, 0x33, 0x66, 0x54, 0xbc, - 0xfc, 0xdc, 0x07, 0x9a, 0x14, 0x69, 0x4d, 0x60, 0xb1, 0xc6, 0x9c, 0xdf, - 0x13, 0x0d, 0xac, 0xff, 0x18, 0xb0, 0xf1, 0x7f, 0x39, 0x6d, 0x84, 0x86, - 0x3b, 0x8e, 0x95, 0x99, 0x8b, 0x5c, 0xa0, 0xd6, 0x31, 0x67, 0xc6, 0x64, - 0x51, 0x73, 0xbd, 0x20, 0x4f, 0x26, 0x16, 0xff, 0x82, 0xe2, 0x27, 0x0c, - 0xa5, 0x96, 0xa5, 0x19, 0x03, 0xbf, 0x19, 0x84, 0x90, 0x20, 0xad, 0x79, - 0xe6, 0x05, 0x41, 0x2f, 0x7e, 0xf6, 0x0c, 0xc8, 0x87, 0xca, 0x0c, 0x95, - 0x56, 0x9c, 0x4e, 0x5a, 0xdd, 0x43, 0xcf, 0x8f, 0xed, 0x2c, 0x18, 0x58, - 0x82, 0x42, 0xd7, 0x95, 0x73, 0x19, 0xfe, 0xb1, 0x81, 0xa3, 0x26, 0xe0, - 0x4c, 0x1b, 0x7e, 0x5f, 0xa9, 0x53, 0x1a, 0xe0, 0x0d, 0x03, 0xc3, 0x62, - 0x5e, 0xff, 0x21, 0x91, 0x5c, 0xd8, 0xca, 0x88, 0xa3, 0x0c, 0x0f, 0x2c, - 0xb8, 0x41, 0xff, 0xa3, 0x19, 0x4f, 0xc9, 0xd4, 0x99, 0xf3, 0xd1, 0x5c, - 0x94, 0x48, 0xad, 0x3d, 0xa1, 0x2f, 0xc9, 0xec, 0x6d, 0xf2, 0x86, 0x14, - 0xec, 0x32, 0x58, 0xe6, 0x56, 0x73, 0x86, 0x1b, 0x1d, 0xec, 0xdf, 0x10, - 0x3d, 0x48, 0x10, 0xea, 0x01, 0xb5, 0xfd, 0xc3, 0x1d, 0x9e, 0x0e, 0xce, - 0x1c, 0xf3, 0xb1, 0x16, 0xc8, 0xa9, 0x19, 0xb7, 0xba, 0xd0, 0x68, 0x0c, - 0xd0, 0xa3, 0x75, 0x43, 0x08, 0xf0, 0xfb, 0xcd, 0xcc, 0xfe, 0xf6, 0x80, - 0x57, 0xeb, 0xe3, 0x8c, 0x94, 0x01, 0xa1, 0x6a, 0xdc, 0x36, 0x99, 0x91, - 0x26, 0x67, 0xfe, 0x46, 0xac, 0xba, 0x21, 0x13, 0xb1, 0xc4, 0xcf, 0x19, - 0x1f, 0x6f, 0x3a, 0x7e, 0x15, 0x5e, 0xf4, 0x34, 0x82, 0xe0, 0x11, 0x71, - 0x49, 0x33, 0x27, 0x72, 0xb8, 0x7b, 0x48, 0xf6, 0xd0, 0xf4, 0xc2, 0x1a, - 0xdd, 0x6b, 0xb3, 0x8e, 0x01, 0xe1, 0x63, 0x27, 0xd9, 0x4c, 0x09, 0x69, - 0x85, 0xce, 0xc6, 0x8f, 0x55, 0x8a, 0x82, 0xef, 0x87, 0x6a, 0x11, 0x16, - 0xa7, 0x72, 0x85, 0x67, 0x48, 0xcd, 0x44, 0xa1, 0x14, 0xb8, 0x3c, 0xd4, - 0x14, 0x6d, 0x02, 0x49, 0xa5, 0xbb, 0x00, 0x15, 0xd1, 0xc3, 0xb9, 0x52, - 0x94, 0xdc, 0xec, 0xfb, 0xec, 0x03, 0x0e, 0x8d, 0x60, 0x07, 0xee, 0x67, - 0x9a, 0x79, 0xc0, 0xc0, 0x72, 0xe6, 0x81, 0x65, 0x97, 0xc3, 0x97, 0x5f, - 0x8e, 0x17, 0xd2, 0x75, 0x7c, 0x61, 0x12, 0x06, 0xc5, 0x71, 0x30, 0xec, - 0x5b, 0x91, 0x95, 0xf0, 0x85, 0x84, 0xde, 0x28, 0xb1, 0x1e, 0x33, 0x5e, - 0x67, 0x36, 0x6a, 0x73, 0x3a, 0x2c, 0x73, 0x02, 0xfd, 0x72, 0xbc, 0x8b, - 0x7c, 0x3e, 0xa0, 0xc7, 0x68, 0xcf, 0x7c, 0x6a, 0xff, 0x0b, 0xf7, 0xf5, - 0xbe, 0x50, 0x73, 0x54, 0x67, 0xac, 0x4b, 0x61, 0x06, 0x1f, 0x05, 0xf5, - 0xde, 0x4c, 0x65, 0xd9, 0x51, 0x30, 0x85, 0x53, 0xc1, 0x1c, 0x9f, 0x61, - 0xb3, 0x2a, 0xfc, 0x61, 0x77, 0xf2, 0x8d, 0x83, 0xe5, 0x20, 0x50, 0xe0, - 0x6e, 0xa4, 0xec, 0xa8, 0x54, 0xdf, 0x58, 0x24, 0xb4, 0xee, 0x02, 0xd5, - 0xca, 0xfa, 0x6f, 0xfb, 0xe5, 0x64, 0xef, 0xca, 0xa5, 0x34, 0x9c, 0x91, - 0x45, 0x72, 0x4e, 0xa4, 0xf2, 0xf4, 0x15, 0xf1, 0x13, 0xed, 0xfb, 0x9c, - 0x46, 0x99, 0x0b, 0xcd, 0x1f, 0x98, 0x58, 0x37, 0x3f, 0xe7, 0x90, 0x03, - 0xcf, 0xf5, 0x0d, 0xf9, 0x6e, 0x1a, 0x95, 0x2c, 0xb2, 0x04, 0x0c, 0x70, - 0x67, 0x11, 0x9c, 0xc7, 0x7f, 0xd3, 0x7f, 0x16, 0xe7, 0x34, 0xf0, 0x20, - 0x15, 0x74, 0xd4, 0xe2, 0xc0, 0x08, 0x66, 0xf6, 0x46, 0x1f, 0xc3, 0x22, - 0x90, 0x9e, 0xae, 0x63, 0x0b, 0x78, 0x92, 0x29, 0xe7, 0x3a, 0xc5, 0x20, - 0x20, 0xb7, 0xdd, 0xeb, 0x36, 0xc1, 0x55, 0x7b, 0xeb, 0x02, 0x1d, 0xfd, - 0x76, 0x2e, 0x2c, 0x3d, 0xf5, 0xc0, 0xac, 0x40, 0xf7, 0x6b, 0xbb, 0x80, - 0x4a, 0xee, 0x93, 0xa8, 0x01, 0xb0, 0xfb, 0x5d, 0x36, 0x9d, 0x0f, 0x25, - 0xc3, 0x3f, 0x45, 0xd7, 0xd5, 0xb0, 0x23, 0x50, 0x99, 0x53, 0xd0, 0xc5, - 0x77, 0xe1, 0x22, 0x5a, 0x37, 0x25, 0xc1, 0x1d, 0xc5, 0x49, 0xe7, 0xf2, - 0x08, 0xa7, 0x47, 0xf1, 0xcf, 0xca, 0xda, 0xd5, 0x32, 0x84, 0x4b, 0xc3, - 0x9c, 0x7a, 0x02, 0x27, 0x59, 0x99, 0x2c, 0x05, 0x92, 0x9d, 0x2a, 0x69, - 0x56, 0x8d, 0x04, 0xce, 0xc2, 0x93, 0x88, 0x15, 0x71, 0xc1, 0xab, 0x72, - 0xd6, 0x65, 0x2d, 0x08, 0xe5, 0x8e, 0x7f, 0xbe, 0x9c, 0x06, 0xa7, 0xf7, - 0x44, 0x83, 0xf7, 0x83, 0xa8, 0x16, 0x46, 0x52, 0x33, 0x60, 0x91, 0xd9, - 0xb2, 0xb2, 0x3e, 0xdb, 0x4c, 0xb8, 0x0c, 0xa2, 0x3b, 0x13, 0x73, 0x4f, - 0xdf, 0xe1, 0x8f, 0x22, 0xb5, 0x80, 0x02, 0xb5, 0xd9, 0x05, 0x09, 0x76, - 0xe7, 0xb0, 0x91, 0xdb, 0xe1, 0x33, 0x18, 0x1d, 0x75, 0x98, 0x06, 0xdf, - 0x4b, 0x9d, 0xa4, 0x98, 0x68, 0x42, 0xd5, 0x85, 0x31, 0x60, 0xcf, 0xb8, - 0xde, 0x4f, 0x9a, 0x24, 0x00, 0x89, 0x04, 0xa0, 0x6f, 0x9c, 0x37, 0x63, - 0x66, 0xdc, 0x75, 0x32, 0x7a, 0xe2, 0x91, 0xc2, 0x12, 0xb4, 0x22, 0x3a, - 0x2e, 0x71, 0xfd, 0x3c, 0xb0, 0xd2, 0x86, 0xcd, 0x00, 0xe6, 0xca, 0x3e, - 0x4c, 0x37, 0x6b, 0xe4, 0x8b, 0xf0, 0x2c, 0x12, 0x3f, 0xed, 0x41, 0x3d, - 0x80, 0x5d, 0xdb, 0x76, 0x67, 0xc3, 0xee, 0x12, 0x82, 0x4c, 0xab, 0x07, - 0x36, 0x1d, 0xb8, 0xd9, 0xb7, 0x4d, 0xd8, 0x0d, 0x27, 0xf7, 0x84, 0xf8, - 0xa9, 0x10, 0xb8, 0x5a, 0x47, 0xa0, 0xa1, 0x87, 0x70, 0x49, 0x4e, 0x5b, - 0x9d, 0x34, 0x6e, 0x2d, 0x79, 0x4f, 0xe1, 0x4d, 0xb3, 0x2e, 0x41, 0xd2, - 0x43, 0x65, 0x73, 0x40, 0xc0, 0x23, 0xad, 0xb9, 0x7b, 0x2c, 0x98, 0xc7, - 0x4f, 0x03, 0x0a, 0x28, 0x9a, 0x23, 0xd7, 0x56, 0x44, 0x66, 0x56, 0x6c, - 0x20, 0xac, 0x81, 0x01, 0x8d, 0x74, 0x2d, 0x07, 0x6f, 0x15, 0xac, 0xd9, - 0x6d, 0x24, 0x2c, 0xa0, 0x07, 0x66, 0x42, 0x46, 0x14, 0xec, 0x84, 0xeb, - 0x72, 0x02, 0xf4, 0x52, 0x94, 0xfe, 0x07, 0x03, 0xd3, 0x69, 0x37, 0x82, - 0x83, 0x5e, 0xcf, 0xa7, 0xa4, 0x64, 0xc1, 0xed, 0x4d, 0x10, 0xb1, 0x9c, - 0x21, 0x88, 0x02, 0x7f, 0xf1, 0x5b, 0x1f, 0xd6, 0x33, 0x7d, 0xa5, 0x6a, - 0x39, 0x59, 0x63, 0x25, 0xe0, 0xfc, 0x8b, 0xc0, 0xa4, 0x17, 0x03, 0xe9, - 0x63, 0x83, 0x66, 0x2d, 0x9a, 0xf4, 0xe1, 0x75, 0x67, 0x01, 0xe5, 0xd0, - 0x8b, 0xdf, 0xa9, 0xec, 0x36, 0x73, 0x20, 0x41, 0x3a, 0x5e, 0xaf, 0x81, - 0x49, 0x24, 0xf5, 0x88, 0x5e, 0xee, 0x2e, 0x5c, 0x8c, 0x8b, 0x13, 0x7c, - 0x03, 0x34, 0x13, 0xaf, 0xcc, 0xfd, 0x97, 0x9f, 0x85, 0x07, 0x62, 0xbc, - 0xaf, 0x83, 0xdf, 0x0e, 0x9b, 0x37, 0x0b, 0x62, 0xc4, 0xff, 0xbd, 0xf5, - 0x36, 0xe3, 0x5d, 0x55, 0xb4, 0x9d, 0xb9, 0x36, 0x4c, 0x87, 0x4c, 0x83, - 0x99, 0xfe, 0x61, 0xae, 0xfe, 0x1f, 0xe0, 0x4d, 0x13, 0xd9, 0xf9, 0x95, - 0x68, 0x3c, 0x8b, 0x9a, 0xf5, 0x57, 0xe2, 0x91, 0xb2, 0x69, 0x50, 0xcb, - 0xf8, 0xc2, 0x6e, 0x42, 0xa1, 0x13, 0x78, 0x51, 0xfe, 0x7d, 0x6d, 0xf8, - 0x52, 0x4c, 0x81, 0x48, 0xd6, 0xc1, 0x66, 0x20, 0xbf, 0xb4, 0x9a, 0x22, - 0x7e, 0x2c, 0xc9, 0xec, 0xef, 0x53, 0xe8, 0x9d, 0xad, 0x3b, 0x15, 0x9c, - 0xd2, 0x8b, 0x10, 0xe9, 0x9d, 0x09, 0x06, 0x9e, 0x61, 0x9e, 0x70, 0x26, - 0x15, 0xc6, 0x63, 0x70, 0xe2, 0x1f, 0xe5, 0x8f, 0xb3, 0x12, 0x30, 0x5d, - 0xf3, 0x0d, 0xab, 0x59, 0x0e, 0x16, 0xd2, 0xac, 0xdf, 0xf1, 0x16, 0x87, - 0xdb, 0x6c, 0xfe, 0x53, 0x92, 0xe2, 0x41, 0x3e, 0xe0, 0xf2, 0x9f, 0x2b, - 0xa8, 0x72, 0x3a, 0xf2, 0xa9, 0xd7, 0x77, 0x70, 0x77, 0x0c, 0xee, 0xc2, - 0x51, 0xcb, 0xe7, 0xa8, 0x22, 0x3c, 0x6e, 0x10, 0x92, 0xad, 0xb3, 0xfe, - 0x9d, 0xb3, 0xae, 0x6f, 0x43, 0xd5, 0x15, 0x03, 0x1e, 0x97, 0x20, 0xa5, - 0x5a, 0x84, 0x53, 0x7f, 0x05, 0x8f, 0xe8, 0xb5, 0x87, 0x9d, 0xf7, 0xae, - 0xb3, 0x26, 0x76, 0x13, 0xf7, 0xb3, 0x5e, 0x69, 0x14, 0x5e, 0x69, 0xb0, - 0x99, 0x81, 0x0c, 0x23, 0x8b, 0x62, 0xc6, 0xfe, 0x22, 0xc8, 0xcd, 0x3b, - 0x36, 0x2c, 0xe4, 0x2d, 0x4e, 0xf5, 0x8b, 0x47, 0xb9, 0xea, 0xc0, 0x76, - 0x45, 0x1e, 0x6a, 0xf6, 0x5f, 0x33, 0xaf, 0x70, 0x56, 0x74, 0x06, 0xd4, - 0xd0, 0x31, 0xaf, 0x6b, 0x76, 0x50, 0x92, 0x7e, 0x2b, 0xbc, 0x33, 0xd1, - 0xf0, 0xe9, 0xe9, 0x31, 0x49, 0xf2, 0x21, 0xe4, 0x57, 0x2e, 0x03, 0xaa, - 0x76, 0xcf, 0xeb, 0xa9, 0x31, 0x67, 0xf6, 0x8f, 0x5c, 0x58, 0x89, 0x55, - 0x19, 0xcd, 0xfc, 0xa7, 0xcf, 0x30, 0x34, 0x71, 0x84, 0xc2, 0xdb, 0xf9, - 0x6c, 0xbd, 0x8b, 0x86, 0x0f, 0x90, 0x4d, 0xd4, 0x7f, 0xde, 0xbd, 0x9d, - 0x2f, 0x75, 0x9c, 0xc0, 0x1b, 0xf7, 0x91, 0xd5, 0x0b, 0x2d, 0x1e, 0x78, - 0x81, 0x67, 0x11, 0x3f, 0x1c, 0x4e, 0x3c, 0x82, 0x07, 0x9e, 0x9d, 0x12, - 0xc0, 0x39, 0x33, 0x00, 0xbe, 0x20, 0x52, 0x91, 0x8f, 0xff, 0xce, 0x2c, - 0xc2, 0x7e, 0x34, 0x0f, 0x50, 0x1f, 0xb6, 0x3c, 0xbc, 0x53, 0xc2, 0xea, - 0xdc, 0x16, 0x9d, 0xb3, 0x31, 0x54, 0x00, 0x26, 0x54, 0x1e, 0x15, 0xa8, - 0x4a, 0x0b, 0x97, 0xb3, 0x42, 0x6f, 0x9e, 0xc6, 0x1c, 0x3c, 0x14, 0x08, - 0xa8, 0x2e, 0x14, 0x94, 0x83, 0x1f, 0x80, 0x87, 0x4d, 0x55, 0x4c, 0x0d, - 0x55, 0xcf, 0xc6, 0x45, 0xa2, 0x8a, 0xc6, 0xe3, 0xe5, 0x21, 0x85, 0xf4, - 0x15, 0x95, 0x0a, 0x55, 0xc2, 0x86, 0xdf, 0x11, 0x3e, 0xaf, 0xdd, 0x12, - 0x7c, 0x79, 0x80, 0x1b, 0xa6, 0xe7, 0x6f, 0x77, 0x37, 0xd5, 0x9f, 0x23, - 0x65, 0x00, 0x3a, 0xcd, 0x0f, 0xee, 0x7b, 0x18, 0xbd, 0x68, 0xe9, 0xec, - 0x95, 0x28, 0x90, 0xd9, 0xec, 0xcf, 0xe9, 0x34, 0x1c, 0xcf, 0x0a, 0xe4, - 0xf0, 0xc5, 0xe3, 0x66, 0x44, 0xd0, 0x6b, 0x4a, 0x60, 0x9d, 0xda, 0x7f, - 0x55, 0x4f, 0x1c, 0x41, 0x90, 0x3d, 0xa8, 0x7b, 0x39, 0xc6, 0xe8, 0x58, - 0xf5, 0xaa, 0xa6, 0x87, 0x09, 0xc8, 0x13, 0x50, 0x64, 0xb2, 0x5b, 0x92, - 0x8c, 0xea, 0x93, 0x63, 0x3d, 0x0e, 0x28, 0x80, 0xe7, 0xa8, 0x11, 0xc5, - 0x93, 0xd5, 0xd3, 0xd7, 0x01, 0x6f, 0x61, 0x8f, 0xb7, 0x6c, 0x78, 0xec, - 0x47, 0x2e, 0x78, 0x29, 0x06, 0x54, 0x2d, 0x8f, 0x34, 0xea, 0xe4, 0xfe, - 0xd6, 0x75, 0x32, 0x87, 0x1c, 0x1d, 0x21, 0x39, 0xc9, 0xe5, 0x61, 0x5d, - 0x7e, 0x1b, 0xc8, 0x8d, 0xc5, 0xb8, 0xb7, 0x9c, 0x4a, 0x1c, 0x72, 0x7e, - 0x1d, 0x8a, 0x2f, 0xf7, 0x11, 0x67, 0x6e, 0xfa, 0x57, 0xa8, 0x92, 0x73, - 0x86, 0x4e, 0xb4, 0x61, 0x32, 0xe1, 0xfc, 0x03, 0x4c, 0x8d, 0x9c, 0xeb, - 0xf8, 0x18, 0x58, 0xc5, 0xd6, 0xd0, 0x8c, 0x41, 0xd8, 0x4e, 0x10, 0x81, - 0x75, 0xf1, 0x61, 0x1d, 0xc5, 0x12, 0xaf, 0xca, 0xf9, 0x55, 0xb5, 0xc5, - 0x08, 0xa3, 0xe3, 0x70, 0xb7, 0x6e, 0xb2, 0xdb, 0xe4, 0xcb, 0x25, 0x35, - 0xcb, 0x13, 0xf2, 0xf8, 0xc9, 0xef, 0xe0, 0x4c, 0x50, 0x24, 0xab, 0x44, - 0x95, 0x7b, 0x52, 0xe6, 0x02, 0x9c, 0xa4, 0xc8, 0x23, 0xfd, 0xa6, 0xc6, - 0x54, 0x1e, 0x4c, 0x4e, 0xa1, 0x38, 0x40, 0x2d, 0x8b, 0x9b, 0x23, 0xd1, - 0x91, 0x75, 0x82, 0x97, 0x22, 0xb1, 0xaa, 0x3c, 0xa9, 0xc6, 0x7a, 0x37, - 0x53, 0x6a, 0x69, 0x96, 0xaf, 0x36, 0xd2, 0x97, 0xaf, 0x6d, 0x65, 0xa1, - 0x9b, 0x78, 0xf9, 0x03, 0x42, 0xad, 0x33, 0x02, 0x1a, 0x1a, 0x04, 0xd4, - 0x20, 0x71, 0x6f, 0x53, 0x81, 0x31, 0xc7, 0x24, 0x0f, 0x97, 0xcf, 0x40, - 0x53, 0xaf, 0x2c, 0x18, 0x3a, 0xad, 0x52, 0x53, 0xa6, 0xba, 0x70, 0xa7, - 0x33, 0xde, 0x8d, 0x03, 0x62, 0x9a, 0xaf, 0x52, 0x0a, 0x2e, 0x1c, 0x59, - 0x8f, 0x09, 0xfa, 0x13, 0x6c, 0x48, 0x5c, 0x95, 0xe9, 0xbc, 0x69, 0x03, - 0xd8, 0x99, 0x16, 0x11, 0xfc, 0x6e, 0xc3, 0x8b, 0xad, 0xcc, 0x1a, 0x72, - 0x21, 0x19, 0x3f, 0xdd, 0x14, 0x41, 0x85, 0xc4, 0x9a, 0xe8, 0xad, 0x42, - 0x0a, 0x30, 0x41, 0xbf, 0xe4, 0xe1, 0x8b, 0x85, 0x2a, 0xd7, 0x1b, 0x45, - 0x33, 0x23, 0x7c, 0xde, 0x03, 0x28, 0xcb, 0x94, 0xd7, 0xdd, 0x49, 0xac, - 0x02, 0x4d, 0x2c, 0x8c, 0x9d, 0xe2, 0xc8, 0x7e, 0x77, 0x93, 0xc1, 0xf1, - 0x8a, 0xd7, 0x4b, 0x40, 0x62, 0xb4, 0x01, 0x28, 0xdc, 0x92, 0x25, 0x5e, - 0x10, 0x67, 0x58, 0xbb, 0x0f, 0xe8, 0x7b, 0x14, 0xf4, 0x55, 0x67, 0x33, - 0x55, 0xbd, 0xc5, 0xa4, 0x8c, 0xb7, 0xc1, 0x44, 0x35, 0x85, 0x31, 0x50, - 0xb5, 0xea, 0x80, 0x43, 0x76, 0x50, 0x98, 0xd9, 0xdf, 0x49, 0xa6, 0x93, - 0xe2, 0xc4, 0xc1, 0x28, 0x53, 0x49, 0x21, 0xc3, 0x67, 0xa0, 0x41, 0xf9, - 0x40, 0x17, 0x8b, 0x7c, 0x1f, 0xb5, 0xea, 0x00, 0x44, 0x69, 0x74, 0x8f, - 0x4c, 0x21, 0xd0, 0xa0, 0xee, 0x75, 0x66, 0xa7, 0xdc, 0xb4, 0xbb, 0xf3, - 0xa2, 0x11, 0x82, 0x8b, 0xcb, 0x20, 0xe3, 0x3d, 0x05, 0xf5, 0xd9, 0x0b, - 0xb0, 0x47, 0x4f, 0x34, 0x22, 0xfc, 0xe3, 0xd1, 0x66, 0x45, 0xc0, 0x55, - 0xc4, 0x38, 0x42, 0xa8, 0x3e, 0x6a, 0xe3, 0x3d, 0x1e, 0x2e, 0x3d, 0x1c, - 0x6a, 0x35, 0xc7, 0x83, 0x0e, 0x5f, 0xef, 0xde, 0xdb, 0x4b, 0x1f, 0x6e, - 0x54, 0x71, 0x09, 0xe0, 0x48, 0xdb, 0x97, 0x38, 0x15, 0x27, 0x36, 0x1e, - 0x77, 0x65, 0xe8, 0xa1, 0x41, 0xd8, 0x37, 0xb4, 0x05, 0xa0, 0xea, 0x97, - 0xf0, 0xd1, 0x4f, 0xdb, 0xc8, 0xba, 0x1b, 0xa0, 0xdd, 0xfd, 0x3f, 0x8a, - 0x47, 0xbe, 0x68, 0x4c, 0x23, 0xd5, 0x20, 0x41, 0xa8, 0x4d, 0x8c, 0x09, - 0x2f, 0x22, 0xc8, 0xb4, 0x31, 0xf4, 0x7d, 0x32, 0x5b, 0x8f, 0xa2, 0x51, - 0xd6, 0xe6, 0xaf, 0x06, 0x7c, 0x24, 0xe3, 0x21, 0x4e, 0x12, 0x4f, 0x9a, - 0x17, 0x3d, 0x16, 0x30, 0xac, 0x5c, 0xd8, 0xd7, 0xe0, 0x22, 0xbb, 0xd4, - 0x31, 0x9f, 0x3c, 0xe0, 0x66, 0x36, 0xdf, 0x2a, 0x82, 0x0f, 0xfe, 0x07, - 0x1a, 0xb7, 0x4c, 0xc2, 0xee, 0x0c, 0x1b, 0xff, 0xa9, 0x08, 0xa9, 0x8f, - 0xff, 0x44, 0xc6, 0x7e, 0x62, 0x02, 0xf9, 0xb1, 0xd1, 0x8e, 0x2e, 0xa4, - 0x77, 0x9c, 0xeb, 0xfa, 0x32, 0x95, 0x7d, 0x9f, 0x18, 0x65, 0x3e, 0x6d, - 0x8c, 0xf9, 0xb4, 0x3e, 0x07, 0x5b, 0x89, 0x8c, 0xd8, 0x9d, 0x63, 0x06, - 0x81, 0x25, 0xd6, 0x47, 0x6b, 0x3a, 0xdf, 0x3c, 0xb9, 0x3e, 0xb5, 0x3b, - 0x3d, 0x01, 0x55, 0x5a, 0xdf, 0x71, 0x96, 0xda, 0xe0, 0x6b, 0x54, 0xec, - 0x00, 0xfe, 0xab, 0x3e, 0xd0, 0x7b, 0xdd, 0xef, 0x4e, 0xde, 0xf8, 0x9e, - 0x23, 0xb0, 0x3a, 0xed, 0xfe, 0x56, 0x9e, 0x7f, 0xd3, 0x40, 0x4e, 0xaa, - 0x86, 0x7f, 0x6f, 0xb8, 0xde, 0x67, 0xf4, 0xa4, 0xfb, 0x9f, 0xc8, 0x83, - 0x1f, 0x69, 0x92, 0x0c, 0xe0, 0xe1, 0xfe, 0xa8, 0xe0, 0x7f, 0x9c, 0x3d, - 0xb5, 0x92, 0x6d, 0x80, 0x1b, 0xf3, 0x7a, 0x3f, 0x8a, 0xa6, 0xf2, 0xf8, - 0x4c, 0xde, 0xd6, 0x4f, 0xaf, 0x1b, 0x5e, 0x0b, 0x4e, 0xec, 0xdb, 0x83, - 0xc8, 0x73, 0xd6, 0x87, 0x9d, 0x21, 0x3b, 0x9c, 0x7c, 0x9e, 0x03, 0xe0, - 0x40, 0xf1, 0xd7, 0xfa, 0xf2, 0xcb, 0xbe, 0xea, 0x17, 0xc5, 0xb5, 0xa3, - 0x24, 0x7f, 0xa3, 0xa3, 0xff, 0xb5, 0x79, 0x98, 0x13, 0x46, 0xf3, 0x1b, - 0x35, 0xe4, 0xf7, 0xd4, 0x62, 0xf2, 0x64, 0x53, 0x89, 0x9b, 0x45, 0x79, - 0xb7, 0x3f, 0x2b, 0x11, 0xfb, 0x29, 0x81, 0x74, 0x2a, 0x15, 0xc8, 0x20, - 0x19, 0xd8, 0x87, 0xd0, 0x19, 0x2b, 0x57, 0x38, 0x29, 0xa2, 0xaa, 0x68, - 0x90, 0x49, 0x37, 0xba, 0xf2, 0x85, 0x11, 0x20, 0xc9, 0x3f, 0x06, 0xb8, - 0xff, 0x4f, 0xcd, 0xb4, 0x30, 0x98, 0x05, 0x46, 0x35, 0x37, 0x35, 0xf0, - 0xce, 0x1a, 0x42, 0x0d, 0x8e, 0x11, 0xc1, 0xb3, 0x15, 0x1a, 0x19, 0xf9, - 0xc7, 0xf7, 0x7f, 0x01, 0x51, 0xd8, 0x21, 0xa1, 0x3f, 0xda, 0x7d, 0x79, - 0xc0, 0x5f, 0x92, 0x96, 0xbd, 0xda, 0xb0, 0xca, 0x78, 0x38, 0x93, 0xbe, - 0x67, 0x91, 0x3d, 0x4f, 0x67, 0x83, 0xb2, 0x28, 0xd2, 0x50, 0x3f, 0xce, - 0x13, 0xb3, 0x3e, 0xa1, 0xf1, 0x31, 0xc0, 0x4b, 0x96, 0x32, 0xe2, 0xb5, - 0x3d, 0x61, 0xb7, 0xf3, 0x60, 0xb6, 0x24, 0x93, 0xc7, 0x35, 0x88, 0x20, - 0x0b, 0x37, 0x24, 0xe7, 0x5b, 0xf2, 0xcc, 0xd9, 0x9c, 0x7f, 0xd3, 0xf4, - 0x30, 0xf8, 0xb5, 0xbb, 0x67, 0x3b, 0x68, 0x04, 0x06, 0x2c, 0xd9, 0xc9, - 0xf1, 0xc4, 0xf5, 0x62, 0xe7, 0xb8, 0x27, 0xe0, 0xb8, 0x7e, 0x34, 0x18, - 0xbf, 0xc6, 0xea, 0x5c, 0x94, 0x84, 0xee, 0x07, 0xb7, 0x80, 0x35, 0x3d, - 0x08, 0x5c, 0xbe, 0x7a, 0xac, 0x48, 0x3e, 0x69, 0x71, 0xe2, 0x09, 0xfd, - 0x84, 0x3d, 0xa3, 0x52, 0xf3, 0x4b, 0x26, 0x99, 0xc3, 0xef, 0x8d, 0x8e, - 0x6f, 0xfc, 0xe9, 0xe6, 0xeb, 0xbe, 0x53, 0xc2, 0x6a, 0x6c, 0x42, 0x0f, - 0xc3, 0x8a, 0x08, 0xf6, 0x1c, 0x67, 0x02, 0x06, 0x05, 0x52, 0x07, 0x68, - 0x72, 0x27, 0xe9, 0x61, 0xe2, 0x2a, 0x67, 0xa4, 0x86, 0xbf, 0xe9, 0x11, - 0xbb, 0x97, 0x5e, 0x43, 0x81, 0xc7, 0xa5, 0x02, 0x15, 0xc1, 0x7d, 0xa7, - 0x41, 0xa1, 0xd3, 0x35, 0xd5, 0x39, 0x1d, 0x14, 0x26, 0xc7, 0x88, 0xfa, - 0x04, 0xcf, 0xd4, 0xde, 0xdf, 0xe1, 0x53, 0x10, 0x25, 0x05, 0x2d, 0x01, - 0xe2, 0xc7, 0x73, 0xc7, 0x19, 0x1f, 0xed, 0xe7, 0xd0, 0x84, 0x0b, 0xc0, - 0xe4, 0xa2, 0x5c, 0x4a, 0x18, 0xee, 0x53, 0x7a, 0x72, 0xde, 0x9f, 0x98, - 0x1b, 0xad, 0x44, 0x58, 0x10, 0x89, 0xcb, 0x3d, 0xe9, 0x49, 0xdd, 0x33, - 0xa0, 0x6a, 0xeb, 0x06, 0xfc, 0x95, 0x0f, 0x40, 0xb8, 0x40, 0x00, 0x38, - 0xdc, 0x41, 0xc2, 0x2b, 0x2e, 0x04, 0xf2, 0xf6, 0xd2, 0xf5, 0x16, 0x81, - 0xdd, 0xdd, 0xd4, 0xa5, 0x8d, 0xf4, 0xd2, 0x87, 0x81, 0x04, 0xf5, 0x6f, - 0x78, 0x75, 0x4e, 0xb2, 0x13, 0xc4, 0x69, 0x22, 0xe5, 0xc3, 0x89, 0x07, - 0x9c, 0x34, 0x56, 0x25, 0xa5, 0xe9, 0x05, 0xdd, 0xed, 0x33, 0x17, 0x0a, - 0x1a, 0x0e, 0x97, 0xc5, 0x93, 0xc0, 0x12, 0xc7, 0x72, 0x8d, 0xbe, 0xd7, - 0x17, 0x6e, 0x92, 0x8d, 0xbf, 0x25, 0xac, 0x24, 0xe1, 0xa7, 0xaa, 0x20, - 0x07, 0x50, 0xe9, 0x31, 0xb2, 0x68, 0xf2, 0x6e, 0x78, 0x9b, 0x6a, 0x3a, - 0x89, 0x95, 0x46, 0x87, 0xf1, 0x29, 0x64, 0xa1, 0x5a, 0x3a, 0xf0, 0x11, - 0xbe, 0x99, 0x2c, 0x13, 0x37, 0xe7, 0xa0, 0x9e, 0x8f, 0x63, 0xa7, 0x1d, - 0xb3, 0xb2, 0x11, 0x0f, 0x54, 0x61, 0x6e, 0x7f, 0xd8, 0xb9, 0xc1, 0x1a, - 0x66, 0x97, 0xcd, 0x13, 0x6b, 0xf6, 0x4b, 0x2d, 0xfa, 0x55, 0x72, 0xa6, - 0x7b, 0xa8, 0x94, 0x20, 0x51, 0x6e, 0x79, 0x8b, 0x8a, 0xfa, 0xfe, 0xc6, - 0xa7, 0xbc, 0x0f, 0xd4, 0xe8, 0x11, 0xff, 0x26, 0xb6, 0xe2, 0x0c, 0xa4, - 0xa1, 0xed, 0xad, 0x1d, 0xef, 0x06, 0xb1, 0xea, 0x3f, 0xf9, 0xc9, 0x53, - 0x50, 0x7d, 0x20, 0xe9, 0x14, 0xb9, 0x4c, 0x2e, 0xf0, 0x0e, 0x65, 0xce, - 0xcf, 0x8a, 0x6c, 0xa4, 0x67, 0x1d, 0xe4, 0xa1, 0x74, 0x23, 0x27, 0xb7, - 0x21, 0x04, 0x58, 0x93, 0x95, 0xf2, 0x99, 0xf1, 0xcf, 0xb3, 0x8a, 0x6b, - 0x86, 0x26, 0x05, 0x55, 0x20, 0x42, 0x39, 0xe4, 0x07, 0xe3, 0x95, 0x85, - 0x47, 0x12, 0xf0, 0xde, 0x68, 0xc6, 0x8b, 0x55, 0xa0, 0x98, 0x4b, 0xb8, - 0x54, 0x90, 0x96, 0x17, 0x04, 0x4e, 0x12, 0x4d, 0x6d, 0x08, 0x23, 0xc5, - 0xc0, 0x8a, 0x78, 0xd1, 0xf3, 0x41, 0x00, 0x9e, 0xa5, 0x8b, 0x2a, 0x05, - 0x44, 0x4b, 0xbc, 0x5c, 0x02, 0xc3, 0x9d, 0x42, 0x50, 0x9c, 0x1c, 0xb0, - 0xff, 0x86, 0x2e, 0x95, 0x2c, 0x0a, 0x7b, 0x2e, 0x7f, 0xea, 0xbe, 0x6a, - 0x50, 0x45, 0x97, 0x77, 0x59, 0xa9, 0x77, 0xb7, 0x09, 0x9e, 0x14, 0xa9, - 0x09, 0xae, 0x2e, 0x3e, 0x57, 0x46, 0x05, 0x1d, 0x9c, 0xcf, 0x4c, 0x1a, - 0x1f, 0x4e, 0x37, 0xa8, 0x26, 0x03, 0xce, 0xbc, 0xba, 0x35, 0x41, 0x43, - 0x91, 0x75, 0x69, 0x07, 0xed, 0x4a, 0x9d, 0xde, 0x38, 0x3e, 0x85, 0x36, - 0x9f, 0xfa, 0x11, 0xbb, 0x5d, 0xed, 0xf2, 0xd6, 0xdd, 0xb5, 0xb9, 0x1c, - 0xce, 0xd5, 0x7d, 0x29, 0x72, 0x8b, 0x08, 0x7c, 0x72, 0xd2, 0x43, 0x45, - 0xd4, 0xc5, 0xf2, 0xd4, 0x31, 0x4f, 0xb8, 0x0b, 0x79, 0x89, 0x38, 0x6c, - 0x41, 0xf0, 0x70, 0xe9, 0x84, 0xd7, 0x78, 0x39, 0x9a, 0x6d, 0x37, 0x6e, - 0xae, 0x88, 0xaa, 0xaa, 0x6f, 0x94, 0xee, 0xf4, 0x66, 0x87, 0x91, 0x35, - 0x3d, 0x12, 0x16, 0x2d, 0x71, 0xf5, 0x36, 0x39, 0xf1, 0xc6, 0xb7, 0x6d, - 0x72, 0xb2, 0xb1, 0x65, 0x72, 0x8d, 0x02, 0x3a, 0x0c, 0x6f, 0xa3, 0x47, - 0xb7, 0x9d, 0xf0, 0xb7, 0x4b, 0x0a, 0x4a, 0xad, 0xc7, 0xc6, 0xc9, 0x13, - 0x66, 0xc7, 0xae, 0x3a, 0x0d, 0x52, 0x01, 0x0f, 0xc5, 0x09, 0xfa, 0x88, - 0x06, 0xa8, 0x5a, 0x09, 0xa4, 0x9a, 0x00, 0xb4, 0x4a, 0xa0, 0x26, 0xae, - 0x94, 0xfd, 0xeb, 0xbe, 0x1f, 0x14, 0x02, 0x76, 0x48, 0x4a, 0xe9, 0xc0, - 0xff, 0x9d, 0x67, 0x64, 0x43, 0x41, 0x0b, 0xe9, 0x1e, 0x34, 0x50, 0xbe, - 0xf1, 0x6c, 0x15, 0xe1, 0x1d, 0xf2, 0xa8, 0xc3, 0x33, 0x7e, 0x47, 0xe7, - 0x5f, 0xc3, 0x01, 0xe7, 0x1f, 0x6a, 0x8c, 0x4e, 0x33, 0x13, 0x4e, 0x11, - 0x43, 0x0e, 0x1b, 0xf4, 0x93, 0x6e, 0xe5, 0x61, 0xf2, 0xaa, 0xf7, 0x5d, - 0x78, 0x4d, 0x4b, 0x04, 0xb9, 0xb6, 0x04, 0xac, 0x79, 0x4c, 0x35, 0xf4, - 0x82, 0xbc, 0xa8, 0x30, 0x07, 0xae, 0xbf, 0xe3, 0x6e, 0x54, 0x24, 0x72, - 0x37, 0x79, 0x34, 0x62, 0xd3, 0x92, 0x88, 0x23, 0xe4, 0xf8, 0x81, 0x0c, - 0x3d, 0xbe, 0xda, 0x97, 0x7e, 0xb5, 0x2f, 0xfd, 0xaa, 0x5f, 0xfa, 0x75, - 0xf9, 0x52, 0x72, 0x2d, 0x95, 0x5f, 0xfd, 0x87, 0x7f, 0xb5, 0x0f, 0xff, - 0xca, 0x41, 0x51, 0x65, 0xea, 0xef, 0x9d, 0xbf, 0xee, 0x93, 0xbe, 0xda, - 0x27, 0x7d, 0xb5, 0xb0, 0x5a, 0xd2, 0xbf, 0x22, 0xc1, 0xe8, 0xbd, 0x3e, - 0xea, 0x6f, 0x3e, 0x12, 0x2d, 0x3f, 0x83, 0x96, 0x92, 0x1d, 0x0c, 0x8e, - 0xe4, 0x11, 0x28, 0x93, 0xe2, 0xc4, 0x6b, 0x82, 0x06, 0x1a, 0x30, 0x1a, - 0x3b, 0x7c, 0xe2, 0x92, 0x3e, 0x49, 0xe6, 0xa4, 0x60, 0x7c, 0x13, 0x14, - 0xc0, 0x9b, 0xe1, 0xc7, 0x79, 0x09, 0xec, 0xd4, 0xb0, 0xc5, 0x98, 0x47, - 0x5c, 0xc0, 0x58, 0x88, 0xe4, 0x62, 0xac, 0x43, 0xe9, 0x67, 0x8c, 0x51, - 0x94, 0xdb, 0x4b, 0x66, 0xba, 0x60, 0x51, 0x75, 0x5f, 0x3a, 0x74, 0x37, - 0x6c, 0x08, 0x9f, 0xfc, 0x9a, 0x50, 0x7a, 0x74, 0xd7, 0xed, 0xa1, 0xd4, - 0x9d, 0x93, 0xf4, 0xcd, 0xac, 0xf9, 0x1e, 0x37, 0xd5, 0xd1, 0xef, 0xd1, - 0xdb, 0x1c, 0xc6, 0xbb, 0x9f, 0xc4, 0xc2, 0xfd, 0x89, 0xe7, 0x80, 0x09, - 0x29, 0xb4, 0x92, 0xfa, 0x11, 0xc2, 0x8e, 0x0b, 0x27, 0xb5, 0x63, 0x72, - 0x26, 0xec, 0x17, 0xa7, 0x7c, 0xd2, 0x7e, 0xe3, 0xd1, 0x44, 0x58, 0x74, - 0x7e, 0x61, 0x61, 0xc8, 0x06, 0x17, 0x8b, 0x86, 0xfd, 0x3b, 0xfe, 0x6c, - 0x1a, 0x61, 0xa3, 0x58, 0xbd, 0x91, 0x67, 0x88, 0x2f, 0xe2, 0x4c, 0x54, - 0xd1, 0xa1, 0x7b, 0x4a, 0x13, 0x6e, 0xf4, 0x4d, 0x5a, 0x59, 0x1c, 0xe1, - 0xde, 0x75, 0xf7, 0x1a, 0x48, 0x77, 0xa8, 0xd6, 0x07, 0x98, 0x64, 0xb2, - 0x98, 0x01, 0x50, 0x4c, 0xa3, 0xef, 0x55, 0x83, 0xb6, 0x5f, 0xe2, 0x27, - 0xfd, 0x50, 0xba, 0x3d, 0xeb, 0x60, 0xfb, 0x9f, 0xe6, 0x06, 0xf7, 0x0a, - 0x99, 0x50, 0xc1, 0xdf, 0xab, 0xdf, 0xdf, 0xe6, 0x57, 0xf5, 0x81, 0xb8, - 0x73, 0xc2, 0x32, 0x04, 0xda, 0xf5, 0x68, 0x7a, 0x87, 0x6b, 0x64, 0xfe, - 0xea, 0xa8, 0x63, 0xbe, 0x4b, 0x24, 0xcc, 0x68, 0x51, 0x6b, 0x61, 0x86, - 0x77, 0x21, 0x75, 0xab, 0xe4, 0xdc, 0x55, 0x44, 0x8a, 0xb9, 0x9d, 0x27, - 0xde, 0xa7, 0x79, 0x06, 0x90, 0xe7, 0xe8, 0xe6, 0x46, 0xdd, 0x5f, 0x24, - 0x65, 0x1f, 0x2d, 0x50, 0x1c, 0x64, 0x07, 0xbb, 0x96, 0xea, 0x2b, 0xf4, - 0xd8, 0xee, 0xed, 0x49, 0x1d, 0x67, 0xea, 0x70, 0x34, 0x72, 0x1b, 0x61, - 0x84, 0x38, 0x6b, 0x86, 0x42, 0xa6, 0x1c, 0x4f, 0xd2, 0x2d, 0x45, 0x89, - 0xaf, 0x80, 0x79, 0x00, 0x54, 0x6b, 0x5a, 0xe5, 0x4e, 0x62, 0xa6, 0xfc, - 0x4d, 0xfb, 0x2f, 0xa5, 0xf3, 0x0b, 0x83, 0xee, 0x3b, 0xa2, 0xd5, 0xe4, - 0x1c, 0xa7, 0xd5, 0xd7, 0x91, 0x57, 0x16, 0xb8, 0xef, 0xe4, 0x1f, 0xab, - 0xdc, 0x47, 0x3d, 0x7a, 0xa0, 0x63, 0xb1, 0x71, 0x98, 0xc6, 0x5d, 0x7d, - 0xec, 0x98, 0x6e, 0xcf, 0x32, 0x98, 0xd8, 0x35, 0x31, 0xd9, 0xd8, 0xce, - 0x1a, 0x4d, 0x28, 0xe5, 0xa8, 0x31, 0x26, 0x19, 0xb1, 0x20, 0x39, 0x26, - 0xdf, 0x55, 0x1a, 0xb9, 0x3b, 0x45, 0x9b, 0x42, 0x43, 0x21, 0x1d, 0x34, - 0x6c, 0xc4, 0xe4, 0x8d, 0xeb, 0x8a, 0x91, 0xee, 0x67, 0xa2, 0x71, 0x9b, - 0x38, 0x6b, 0x02, 0xc2, 0x5d, 0xa5, 0x00, 0x8a, 0xed, 0x99, 0x5e, 0x87, - 0x2a, 0xfc, 0x33, 0xb5, 0x09, 0x2d, 0x98, 0xba, 0xab, 0x4a, 0x66, 0x51, - 0x58, 0x85, 0xe6, 0xa6, 0x59, 0x95, 0x21, 0xac, 0xb2, 0x11, 0x48, 0x76, - 0x1c, 0x9f, 0x3b, 0x37, 0xf0, 0x46, 0xbe, 0x01, 0x0f, 0xc2, 0x39, 0x37, - 0x8e, 0xad, 0x72, 0x89, 0xc5, 0x01, 0x44, 0x0b, 0xad, 0xe1, 0xc2, 0x7c, - 0x90, 0x78, 0x21, 0xbd, 0x5c, 0x38, 0x0e, 0x4d, 0xe8, 0x00, 0x08, 0x89, - 0x3b, 0x5f, 0x30, 0xfd, 0x1b, 0xb0, 0xfa, 0xb5, 0xc4, 0x2f, 0x3e, 0xd9, - 0x8b, 0x4d, 0x31, 0x51, 0xd5, 0x66, 0x42, 0x7d, 0xaa, 0x41, 0xbe, 0x72, - 0xe4, 0xc8, 0x6f, 0xda, 0x4e, 0xf5, 0x0c, 0x61, 0xa0, 0x7a, 0x5e, 0x5b, - 0x16, 0x54, 0xcd, 0x43, 0x58, 0x23, 0xe9, 0x32, 0xca, 0xb8, 0x0e, 0x55, - 0x17, 0x5e, 0x6f, 0x81, 0x42, 0xef, 0x2a, 0x39, 0x4d, 0x60, 0xc7, 0xd7, - 0x32, 0x4c, 0x39, 0xd1, 0x8e, 0x19, 0xfb, 0xba, 0x54, 0xd4, 0x97, 0xaa, - 0xe9, 0x8b, 0xe7, 0x72, 0x40, 0x6b, 0xbd, 0x01, 0xc4, 0x29, 0x18, 0x75, - 0xbc, 0xd6, 0xe9, 0x65, 0xb9, 0xc4, 0x09, 0x24, 0x12, 0xda, 0x2a, 0x03, - 0xbf, 0x5a, 0x57, 0xf7, 0xd5, 0x96, 0x15, 0xad, 0x54, 0x3b, 0xfb, 0x74, - 0xf9, 0x61, 0x1a, 0xb5, 0xcf, 0xde, 0x4a, 0x5e, 0x15, 0x9f, 0x8b, 0xec, - 0xa3, 0xd7, 0xf7, 0x2f, 0xb7, 0x3b, 0xb0, 0x3e, 0x36, 0x4e, 0x32, 0xee, - 0x30, 0x51, 0x2c, 0x13, 0x82, 0x9d, 0x07, 0x76, 0xd3, 0x46, 0xf5, 0x3d, - 0xd8, 0x0d, 0xe6, 0x89, 0x7b, 0x4d, 0xe5, 0x1d, 0x32, 0x02, 0x5c, 0x68, - 0x87, 0x79, 0x90, 0x49, 0x34, 0x38, 0x90, 0x1a, 0xe5, 0x05, 0x07, 0x80, - 0x28, 0x7d, 0x47, 0x8c, 0x7f, 0x4e, 0xfa, 0x8d, 0x87, 0xab, 0x26, 0xae, - 0xf5, 0x2a, 0xec, 0xa4, 0x90, 0x74, 0x85, 0x87, 0xe8, 0x98, 0x9e, 0x87, - 0xbc, 0x7c, 0x0f, 0xe1, 0xd9, 0xcb, 0x61, 0x4e, 0x4c, 0xef, 0x18, 0xa9, - 0x19, 0x77, 0x99, 0x5d, 0xb6, 0xcc, 0x63, 0xed, 0x40, 0xe7, 0x3a, 0x4a, - 0x02, 0xd6, 0x4a, 0x32, 0x8f, 0x1e, 0xea, 0xd8, 0x57, 0x0c, 0x1e, 0x55, - 0x33, 0xb2, 0x38, 0x69, 0xdd, 0xcc, 0x5c, 0x3b, 0x19, 0x3c, 0xfe, 0xa6, - 0x54, 0x66, 0x2f, 0xeb, 0x39, 0xf3, 0xa5, 0x30, 0xa0, 0x55, 0x1e, 0xb9, - 0x67, 0x63, 0x44, 0xfa, 0xce, 0x85, 0x22, 0x8a, 0x55, 0x25, 0xe3, 0xea, - 0x52, 0x26, 0xbc, 0x99, 0xc1, 0x8c, 0x84, 0xe5, 0xc2, 0x42, 0xf1, 0x3e, - 0x1d, 0xd5, 0x0d, 0x52, 0x06, 0x57, 0xbd, 0x19, 0x11, 0x77, 0xcb, 0x61, - 0xae, 0x72, 0x7d, 0xc7, 0x82, 0xec, 0x40, 0xb4, 0x2b, 0x8c, 0x07, 0xa7, - 0x62, 0xb8, 0xd0, 0x40, 0x07, 0xd8, 0x19, 0x55, 0xca, 0x96, 0xe4, 0x81, - 0xa6, 0x68, 0xd5, 0x8e, 0x22, 0x73, 0x8c, 0x6d, 0xe7, 0xa7, 0xc4, 0xed, - 0x67, 0xa0, 0xdf, 0xce, 0xbe, 0xa2, 0x9b, 0x1f, 0xde, 0x01, 0x84, 0x82, - 0x1d, 0x55, 0x35, 0xab, 0x2e, 0xbe, 0x67, 0xc1, 0xeb, 0x0b, 0x72, 0xea, - 0xe6, 0x93, 0x2b, 0x56, 0xe3, 0xe2, 0xbf, 0x6e, 0xfe, 0x33, 0xbd, 0xbd, - 0x06, 0x99, 0x33, 0xc9, 0x9d, 0x25, 0x8d, 0x15, 0x0b, 0xb9, 0xc5, 0x2a, - 0x00, 0x93, 0x8f, 0x39, 0x19, 0x4c, 0x67, 0x16, 0x29, 0x8f, 0xf3, 0xf7, - 0xa6, 0x48, 0x70, 0x5c, 0x4f, 0x80, 0x05, 0x27, 0x80, 0xeb, 0xfe, 0x4b, - 0xc7, 0x31, 0xb3, 0xde, 0x03, 0x7d, 0x8e, 0x91, 0x21, 0xca, 0x54, 0x4f, - 0xcf, 0x17, 0x0d, 0xcf, 0xb4, 0x2f, 0x75, 0x90, 0x52, 0x92, 0x30, 0xf1, - 0x49, 0x7f, 0xf6, 0x9c, 0x0b, 0x39, 0x6e, 0x48, 0x72, 0xbf, 0x82, 0x6f, - 0xd4, 0x8b, 0xc1, 0x22, 0x57, 0x72, 0xc4, 0xae, 0x73, 0xe1, 0x9d, 0xe0, - 0x12, 0xc8, 0x53, 0xb7, 0x49, 0x86, 0xc1, 0xf0, 0xfa, 0x10, 0x65, 0x44, - 0xbe, 0x61, 0x30, 0x2a, 0x61, 0x3b, 0x05, 0x98, 0xc5, 0x73, 0x75, 0xff, - 0x7e, 0x7b, 0x75, 0x38, 0xd7, 0xf7, 0xc8, 0xf1, 0x8a, 0x25, 0x92, 0x17, - 0x4e, 0x61, 0x71, 0x57, 0x81, 0x15, 0x2b, 0x2b, 0x5d, 0x31, 0x97, 0x36, - 0xc0, 0x7e, 0xb2, 0xa1, 0xda, 0x18, 0x9a, 0x8a, 0xae, 0x29, 0x34, 0x7e, - 0x4f, 0x9d, 0xae, 0xef, 0x29, 0x94, 0x7d, 0x4f, 0xec, 0x1f, 0x57, 0x2e, - 0x84, 0x8d, 0x6b, 0x1d, 0xec, 0x56, 0xc9, 0xf3, 0x78, 0x87, 0x1b, 0x26, - 0x3a, 0xbe, 0xbb, 0xc0, 0xbb, 0x70, 0x9a, 0x00, 0xc8, 0x09, 0x80, 0x01, - 0xcd, 0xc2, 0x1c, 0x60, 0x7d, 0x64, 0xfb, 0xc3, 0xee, 0xc1, 0x52, 0x34, - 0x34, 0xa8, 0x5b, 0x89, 0x40, 0x33, 0x63, 0x31, 0xc1, 0xff, 0x67, 0x74, - 0x14, 0xa7, 0xa7, 0x0c, 0x53, 0xa7, 0xa5, 0x02, 0x5b, 0x59, 0xe1, 0xb4, - 0xfa, 0x6b, 0x84, 0x35, 0x67, 0x45, 0xb1, 0x23, 0x4b, 0xff, 0x87, 0xff, - 0x23, 0xbe, 0xcc, 0xa6, 0xab, 0x78, 0x3b, 0x4f, 0x35, 0x40, 0x4c, 0xf7, - 0x8b, 0x46, 0x6d, 0x1d, 0x3c, 0x03, 0xd9, 0x42, 0x20, 0xc2, 0x96, 0xab, - 0xec, 0xf8, 0xcd, 0x20, 0x54, 0xe2, 0x16, 0xb8, 0x86, 0xe1, 0x0f, 0x21, - 0x08, 0xaa, 0x45, 0x11, 0xfd, 0xa6, 0xb0, 0xf4, 0x32, 0x00, 0x3c, 0x04, - 0xdc, 0x7d, 0xc8, 0x25, 0x14, 0xe9, 0x8a, 0x0e, 0xce, 0x8c, 0x65, 0xb4, - 0x79, 0xd1, 0xf2, 0xe0, 0x52, 0x81, 0x31, 0x2b, 0xf4, 0xf6, 0x4d, 0x54, - 0x20, 0x3b, 0x41, 0xb3, 0x06, 0x0c, 0x86, 0xbc, 0x75, 0x43, 0x18, 0x70, - 0xc0, 0x9d, 0x06, 0xeb, 0xc9, 0x16, 0x83, 0xb1, 0x37, 0x57, 0xde, 0xd1, - 0xe2, 0xe1, 0x9b, 0xcd, 0x39, 0xe6, 0xb2, 0x40, 0x67, 0x59, 0x1d, 0xa8, - 0xa5, 0x6c, 0x7d, 0x07, 0xba, 0x0f, 0x58, 0x31, 0x30, 0x42, 0x46, 0xf2, - 0x98, 0x42, 0xf7, 0x97, 0x07, 0x04, 0x3a, 0xa9, 0x7a, 0xef, 0xa4, 0xea, - 0xbd, 0x49, 0xd5, 0x7b, 0x93, 0xaa, 0xdb, 0x6e, 0xa4, 0xc3, 0xdf, 0xab, - 0xdf, 0xdf, 0xe6, 0x37, 0x52, 0x41, 0x55, 0x94, 0x1d, 0xd3, 0xb9, 0x57, - 0x69, 0x10, 0x69, 0xc8, 0xc5, 0x5c, 0x83, 0x57, 0x56, 0x5e, 0xe2, 0xbc, - 0x32, 0x73, 0x6d, 0x49, 0x01, 0xbc, 0xdd, 0x22, 0x72, 0x61, 0xa7, 0xb2, - 0x5f, 0xd0, 0x2c, 0x53, 0x07, 0x6b, 0x1b, 0x54, 0x82, 0xde, 0xad, 0x12, - 0xe3, 0xba, 0x80, 0x93, 0x61, 0x1d, 0x7e, 0xc2, 0x4a, 0x03, 0x8a, 0xa1, - 0xb9, 0xc6, 0xce, 0x13, 0x83, 0xd9, 0xfd, 0x43, 0xfd, 0x6a, 0x9c, 0x32, - 0x00, 0xbf, 0xbe, 0xd5, 0xbd, 0x13, 0xe6, 0x06, 0xd5, 0xb6, 0x00, 0x9b, - 0x65, 0x89, 0xfe, 0x02, 0x8b, 0x72, 0xc9, 0xbf, 0x34, 0x6f, 0x91, 0x0e, - 0x57, 0xc9, 0x4f, 0x1c, 0x67, 0x1a, 0x1c, 0x7b, 0x64, 0xbb, 0x0f, 0x3a, - 0x0e, 0x9b, 0x0b, 0x1f, 0x18, 0xf6, 0xf7, 0x21, 0x45, 0xfe, 0x82, 0xca, - 0x23, 0x3d, 0x32, 0x23, 0x10, 0x99, 0x1e, 0xf3, 0x57, 0x20, 0x57, 0x13, - 0xee, 0xb8, 0x4e, 0x07, 0xf6, 0x99, 0x55, 0x1f, 0x8b, 0x48, 0xa4, 0x4a, - 0x99, 0xa7, 0xdf, 0xd5, 0x7b, 0x4d, 0x14, 0xd8, 0x5d, 0x1a, 0x11, 0x94, - 0x5f, 0xbc, 0x32, 0xa5, 0xd6, 0xb8, 0x1f, 0x34, 0xca, 0x4b, 0x1d, 0x3c, - 0x51, 0x1b, 0xc2, 0x2b, 0x7b, 0x06, 0xa3, 0x9a, 0x46, 0x14, 0x0e, 0xf4, - 0x1b, 0x53, 0xf3, 0x69, 0x32, 0xd7, 0xa7, 0x93, 0x2d, 0x3e, 0x9d, 0x2c, - 0xf6, 0x49, 0x97, 0x1f, 0x6e, 0xd6, 0xab, 0x32, 0xcd, 0x9f, 0x26, 0x96, - 0x7d, 0xea, 0x5a, 0xea, 0xf8, 0xf1, 0xf6, 0xf6, 0x69, 0x3e, 0xc4, 0x96, - 0x18, 0xc5, 0x3e, 0xfd, 0x64, 0xe5, 0x13, 0x5b, 0x2a, 0x40, 0xda, 0xeb, - 0x22, 0xe2, 0x8d, 0x15, 0x42, 0xf7, 0xa2, 0x5d, 0x3e, 0xde, 0x89, 0xa1, - 0xe9, 0x63, 0xc7, 0x27, 0xf1, 0x9e, 0x96, 0x81, 0xe8, 0x79, 0x3e, 0xb5, - 0xb7, 0xf9, 0xd4, 0x2d, 0xd1, 0xf1, 0x53, 0x62, 0x52, 0xfd, 0xa1, 0xeb, - 0x6f, 0x76, 0x9e, 0x3f, 0xbc, 0x8c, 0xac, 0x12, 0x04, 0x66, 0x85, 0xc7, - 0x6a, 0x9d, 0x54, 0xb2, 0x8a, 0xf8, 0xc0, 0xf2, 0xfb, 0x8b, 0x1e, 0xd6, - 0x2a, 0x96, 0x4e, 0x14, 0xe2, 0xd4, 0xce, 0x7f, 0x5a, 0xf9, 0x30, 0x4f, - 0x16, 0x00, 0x14, 0xa7, 0xc3, 0x7c, 0xd0, 0x80, 0x7d, 0xf6, 0x43, 0xa7, - 0x46, 0xf9, 0x92, 0xbf, 0x00, 0x2b, 0x6f, 0xc6, 0x17, 0x9b, 0x21, 0x67, - 0xde, 0xe4, 0xa0, 0xc6, 0x0f, 0x86, 0xe7, 0x24, 0x2e, 0x9d, 0xc0, 0x40, - 0xde, 0x33, 0xd0, 0x45, 0xae, 0x17, 0x0f, 0x14, 0xf3, 0x5d, 0xec, 0x6c, - 0x66, 0xdf, 0xec, 0xca, 0x71, 0xf2, 0x00, 0x20, 0x82, 0xd8, 0xdf, 0xad, - 0x8b, 0xcc, 0xda, 0x6a, 0xca, 0x37, 0xfc, 0xfb, 0x67, 0x4b, 0x3d, 0x1c, - 0xc8, 0x29, 0x33, 0x38, 0x56, 0x1b, 0x01, 0xc4, 0x71, 0x4b, 0x34, 0x7c, - 0x30, 0x34, 0x34, 0xa1, 0x29, 0x90, 0xf2, 0x7b, 0x6c, 0x26, 0x07, 0x1d, - 0x0d, 0x06, 0x32, 0x8d, 0x69, 0x10, 0x11, 0x17, 0xbe, 0xb6, 0xbb, 0xa6, - 0x2c, 0x86, 0x76, 0x45, 0xb4, 0xc5, 0xe2, 0x24, 0x20, 0x87, 0xae, 0x7c, - 0x0b, 0xf5, 0x55, 0x84, 0x49, 0xe4, 0x60, 0xc2, 0x65, 0x52, 0x65, 0x1b, - 0xee, 0x0e, 0xd3, 0xa0, 0x8b, 0x7b, 0xd7, 0xd9, 0x8a, 0x61, 0xf0, 0x77, - 0xef, 0x68, 0x05, 0x76, 0x07, 0xa8, 0x25, 0x04, 0xbf, 0xbd, 0x8f, 0xdf, - 0xf0, 0xe1, 0x99, 0x75, 0x97, 0x44, 0x1e, 0x4f, 0xab, 0x4c, 0xfe, 0xb0, - 0x8a, 0xd1, 0x37, 0x0d, 0x46, 0xcb, 0x4e, 0xd3, 0x08, 0x13, 0x76, 0x1f, - 0xff, 0xe3, 0xf5, 0x67, 0x18, 0x14, 0xa9, 0x32, 0x6e, 0x99, 0xff, 0xfc, - 0xe7, 0x2f, 0x80, 0x92, 0x30, 0x0d, 0x5f, 0x50, 0xc0, 0x09, 0xba, 0x1c, - 0xe2, 0xb3, 0x53, 0x3d, 0x40, 0x51, 0x11, 0xeb, 0x7e, 0x30, 0xca, 0x25, - 0x5e, 0x37, 0x37, 0x92, 0x69, 0x40, 0x9a, 0x32, 0xe2, 0x3f, 0x65, 0xff, - 0x56, 0x6d, 0x6c, 0x83, 0xc6, 0xa3, 0x96, 0x62, 0xe2, 0x3b, 0x08, 0x3f, - 0xa9, 0x83, 0xf1, 0xc9, 0x62, 0xc3, 0x07, 0xef, 0x73, 0xf1, 0xc9, 0xd2, - 0x9a, 0x05, 0x2a, 0x8f, 0xbb, 0x97, 0x07, 0xcf, 0xae, 0xe7, 0xbb, 0x63, - 0xe5, 0xaf, 0x64, 0xf5, 0x78, 0xda, 0xd4, 0x5f, 0x35, 0x1d, 0xdd, 0xa1, - 0x4e, 0x40, 0x40, 0x87, 0x05, 0x8c, 0x85, 0xa6, 0x37, 0x8d, 0x47, 0xcc, - 0x8b, 0x32, 0x77, 0x06, 0xb3, 0x76, 0x06, 0x8d, 0xe8, 0xe3, 0x5c, 0xbd, - 0x9a, 0x81, 0xd1, 0x13, 0xc1, 0x7f, 0xde, 0xdb, 0x62, 0x0f, 0x9e, 0xf5, - 0x09, 0x6c, 0x10, 0x9a, 0xe2, 0x1b, 0x89, 0x96, 0xf4, 0xdc, 0x25, 0x85, - 0x63, 0x75, 0x2f, 0xbf, 0x84, 0x86, 0x90, 0xaa, 0x0d, 0x4a, 0x13, 0xbe, - 0x21, 0x1d, 0x9c, 0xc8, 0x4c, 0x81, 0x76, 0xad, 0x49, 0x34, 0x09, 0x37, - 0xc8, 0xe2, 0xae, 0xbb, 0x73, 0xd9, 0x77, 0xe7, 0xb2, 0xdb, 0x43, 0x20, - 0x84, 0x19, 0x75, 0xec, 0xd5, 0xae, 0x00, 0x00, 0x8f, 0x8a, 0xd8, 0xcf, - 0x51, 0xe7, 0x16, 0x8a, 0x72, 0xea, 0x45, 0x99, 0xbd, 0x82, 0x70, 0xed, - 0x82, 0x7c, 0x7e, 0xfd, 0x63, 0xf7, 0xf0, 0xf2, 0x8f, 0xc8, 0x34, 0x24, - 0x67, 0x0a, 0x68, 0x44, 0x0e, 0x7c, 0x3a, 0x84, 0xbe, 0x27, 0xa0, 0x59, - 0xdd, 0x93, 0x80, 0xda, 0x82, 0xb0, 0x1c, 0xae, 0x83, 0x4d, 0x6d, 0x14, - 0x0f, 0x55, 0x9a, 0x3b, 0xf4, 0x55, 0x66, 0xa1, 0xec, 0x50, 0x3f, 0x51, - 0xf7, 0x8f, 0x03, 0x86, 0xb1, 0xa6, 0xa2, 0x28, 0x8a, 0x2e, 0x18, 0x3a, - 0xf2, 0x1c, 0xe2, 0x96, 0x6d, 0xd6, 0x05, 0xe6, 0x29, 0x47, 0x8f, 0x07, - 0xa9, 0xd6, 0x8c, 0x3b, 0x9e, 0x27, 0x00, 0xf2, 0x9d, 0x8c, 0xfc, 0x45, - 0x85, 0xd5, 0xff, 0xa1, 0x53, 0x69, 0xe7, 0xbe, 0x23, 0xd8, 0x89, 0x42, - 0xf1, 0x7f, 0xd1, 0xe3, 0xa0, 0x37, 0xce, 0x5e, 0x3b, 0x62, 0x09, 0xc7, - 0x6a, 0x52, 0x8c, 0x4d, 0x84, 0x9e, 0xd3, 0x4b, 0xaa, 0xa0, 0xd0, 0xec, - 0x3a, 0x47, 0xce, 0xcd, 0x60, 0x2e, 0x4e, 0x30, 0x6b, 0x3e, 0x89, 0x31, - 0xe2, 0x3d, 0x84, 0xb8, 0xc4, 0x43, 0xf0, 0x4d, 0x1a, 0x29, 0x5f, 0x58, - 0x65, 0x30, 0x83, 0xcb, 0xf2, 0xef, 0x6b, 0xd4, 0x86, 0xde, 0x3c, 0x25, - 0x4f, 0xb0, 0x28, 0x14, 0xaf, 0x4e, 0x02, 0x31, 0x3f, 0x01, 0xcb, 0x8d, - 0x5d, 0x03, 0x7e, 0x4c, 0x1c, 0x28, 0xe9, 0x27, 0xe5, 0x22, 0x69, 0x75, - 0xee, 0xa7, 0xc6, 0x72, 0x67, 0xa5, 0xc5, 0x1d, 0x82, 0x5c, 0x34, 0x31, - 0x05, 0x33, 0x25, 0xad, 0xc9, 0x03, 0xf7, 0x5f, 0xac, 0xd3, 0x8b, 0x19, - 0xe7, 0x5d, 0x05, 0xa0, 0x5e, 0x0e, 0xd9, 0x80, 0xda, 0x95, 0x39, 0x24, - 0xe4, 0x27, 0x8d, 0x41, 0x26, 0x3e, 0x35, 0x63, 0x1c, 0xb4, 0x76, 0xa2, - 0x7d, 0xa9, 0x9c, 0xd5, 0xb7, 0x65, 0xef, 0xc4, 0xf2, 0x17, 0xf3, 0x3f, - 0xcb, 0x50, 0xb2, 0x99, 0x25, 0x78, 0xa3, 0x47, 0xf1, 0xb2, 0xec, 0x74, - 0x72, 0x39, 0x43, 0xc4, 0x63, 0x73, 0x36, 0xf1, 0x4d, 0x7d, 0x25, 0x95, - 0xbf, 0x94, 0x00, 0xf2, 0xb0, 0x41, 0xd5, 0x0b, 0x17, 0x0d, 0x0d, 0x7b, - 0x98, 0x8c, 0x4c, 0x0d, 0x5d, 0x41, 0xe1, 0xfc, 0xbf, 0x9f, 0xb5, 0x07, - 0x5e, 0x75, 0xa1, 0x40, 0x4a, 0xf6, 0x69, 0xe7, 0xce, 0x34, 0x09, 0xc5, - 0x83, 0x50, 0x2d, 0xef, 0x63, 0xde, 0x94, 0xff, 0x87, 0xff, 0x63, 0x68, - 0x0a, 0x1a, 0x9d, 0x65, 0x59, 0x6a, 0x45, 0xc7, 0x08, 0x84, 0x28, 0x03, - 0xdc, 0xf5, 0xe4, 0xc1, 0x6b, 0x1c, 0xba, 0x66, 0xb2, 0xca, 0xa3, 0x56, - 0xb6, 0xf2, 0x98, 0xc2, 0x4e, 0x93, 0x89, 0x7a, 0x04, 0x5b, 0x09, 0x2b, - 0x2f, 0x5d, 0x3d, 0x27, 0x62, 0x16, 0xe1, 0x2d, 0x43, 0x27, 0xde, 0x7b, - 0x96, 0x91, 0xfa, 0x95, 0x00, 0xb8, 0x68, 0x83, 0xb7, 0xb7, 0x61, 0x2e, - 0x11, 0x07, 0x3b, 0x30, 0x1a, 0xed, 0x8a, 0x3c, 0x96, 0xe0, 0x26, 0x9a, - 0xf0, 0x41, 0x0b, 0xf6, 0xc9, 0x8c, 0xcb, 0x03, 0xa6, 0x0a, 0xdf, 0x49, - 0xf7, 0x79, 0x45, 0x4e, 0x52, 0xa5, 0x98, 0x4b, 0xe4, 0x99, 0xab, 0x2d, - 0xf9, 0x78, 0xcc, 0xf9, 0x60, 0x06, 0x1e, 0x91, 0x5b, 0xc7, 0xc3, 0xe6, - 0x5f, 0x3a, 0x21, 0x94, 0xa1, 0x9e, 0xc5, 0x4c, 0xd6, 0x89, 0x83, 0x89, - 0xc3, 0xfe, 0xad, 0x19, 0xea, 0x3d, 0x39, 0x5a, 0x1d, 0xeb, 0x9d, 0xcf, - 0x7b, 0xca, 0x82, 0x2e, 0x4b, 0xab, 0xc8, 0x92, 0x08, 0xcc, 0x94, 0xf4, - 0x97, 0xe3, 0x41, 0xfa, 0x49, 0x15, 0xca, 0x06, 0x92, 0x10, 0x16, 0x0d, - 0xf3, 0x66, 0x40, 0x61, 0x17, 0x74, 0x7c, 0x38, 0x70, 0x1c, 0xaa, 0xd9, - 0x07, 0xe5, 0xba, 0xf6, 0xa4, 0xce, 0xd4, 0x3d, 0xa7, 0x03, 0xfc, 0xd2, - 0xaf, 0x08, 0xb1, 0x93, 0x6d, 0x73, 0x2f, 0xdb, 0x1a, 0xa3, 0x63, 0x55, - 0x06, 0x74, 0x07, 0x1a, 0xa8, 0xcd, 0xfb, 0x72, 0x93, 0x72, 0x01, 0x35, - 0xd4, 0x03, 0xd4, 0xe2, 0x50, 0x52, 0x3e, 0xd0, 0x5b, 0xf1, 0x55, 0xad, - 0x18, 0x4d, 0xfb, 0xdc, 0x6f, 0x56, 0x9a, 0x6f, 0xde, 0x99, 0x05, 0xc5, - 0x9a, 0x8b, 0x91, 0xc2, 0x0e, 0x85, 0x54, 0xc3, 0xc3, 0xb7, 0x75, 0xa7, - 0x38, 0x20, 0xab, 0x46, 0xfc, 0xad, 0xdb, 0x06, 0x46, 0xd5, 0x0c, 0x8c, - 0x7a, 0x2f, 0xf2, 0x5d, 0xd3, 0xf4, 0xed, 0x14, 0xad, 0xe8, 0x07, 0x8f, - 0x85, 0x60, 0x55, 0xc2, 0x91, 0x3a, 0xf4, 0x33, 0xe4, 0xa1, 0x33, 0xe4, - 0xa1, 0xb3, 0x0e, 0x50, 0xa7, 0x4e, 0x78, 0xe5, 0x5f, 0xaa, 0x3a, 0x98, - 0xcc, 0x6a, 0xb3, 0xc1, 0x08, 0x8e, 0xec, 0xef, 0xc0, 0xc5, 0x86, 0xe3, - 0xf6, 0x5f, 0xdc, 0x1c, 0x20, 0x89, 0x88, 0xa1, 0x39, 0xd4, 0x0c, 0x74, - 0x1c, 0x66, 0xea, 0x0d, 0x52, 0x47, 0xaa, 0x6d, 0x8e, 0x73, 0x71, 0xc8, - 0xac, 0x07, 0x0a, 0xd1, 0xe0, 0xb8, 0x0f, 0xdc, 0x33, 0xe0, 0xb6, 0xf3, - 0xe1, 0xcb, 0x0f, 0x87, 0x5f, 0x50, 0xc3, 0x5b, 0x9d, 0xfe, 0x23, 0x22, - 0xbb, 0x8f, 0xb8, 0xbb, 0x03, 0xa2, 0x60, 0xee, 0x21, 0xee, 0x1b, 0xa2, - 0x3c, 0x2d, 0xca, 0xe5, 0x1b, 0x41, 0x0c, 0x32, 0xd0, 0xaa, 0x06, 0x63, - 0x4c, 0x22, 0xe1, 0xe5, 0xab, 0x15, 0xef, 0x71, 0xef, 0xde, 0x7f, 0xd0, - 0x0b, 0x79, 0x66, 0x1e, 0x75, 0x1b, 0xc9, 0x31, 0xbf, 0xe2, 0x81, 0xff, - 0xf1, 0xde, 0x8e, 0x1e, 0x40, 0x8d, 0xeb, 0x74, 0x30, 0x81, 0xd8, 0x56, - 0x30, 0x03, 0x89, 0x44, 0x46, 0x1e, 0xaf, 0xd7, 0xe0, 0x94, 0xa9, 0x33, - 0x99, 0x81, 0xdc, 0x06, 0xfd, 0x41, 0x46, 0x91, 0x0f, 0x3e, 0x5f, 0x74, - 0xa6, 0x86, 0xf9, 0x92, 0xa4, 0x7b, 0x7c, 0x61, 0x8e, 0xe3, 0x8b, 0x1b, - 0xce, 0xa0, 0x41, 0x1e, 0xbc, 0xe5, 0x79, 0xf0, 0x30, 0xea, 0x01, 0x55, - 0xe7, 0x27, 0x29, 0x63, 0x69, 0x82, 0x91, 0xc9, 0x6a, 0x66, 0xcc, 0x37, - 0xa8, 0xc5, 0x04, 0xe5, 0xcf, 0xb3, 0xde, 0x95, 0x10, 0x60, 0x9b, 0x0f, - 0xe4, 0xb1, 0xcc, 0x37, 0x1d, 0x7c, 0xeb, 0x20, 0xfa, 0x21, 0x32, 0xac, - 0x91, 0x42, 0xbc, 0x22, 0x45, 0xa8, 0x8b, 0x05, 0x06, 0x51, 0xd4, 0x53, - 0x43, 0x23, 0x43, 0x4b, 0xf4, 0x31, 0x2e, 0xda, 0x38, 0x21, 0x42, 0x87, - 0x73, 0x70, 0xae, 0x13, 0xe5, 0x6d, 0x4c, 0xf4, 0xda, 0xc4, 0x9e, 0x29, - 0x73, 0x77, 0x8f, 0xe1, 0xd0, 0xfd, 0xa5, 0xcc, 0x08, 0x66, 0xd4, 0xf4, - 0x03, 0x97, 0x97, 0xa0, 0x6f, 0x76, 0xc1, 0x31, 0x91, 0xb4, 0xfb, 0x39, - 0x7e, 0x69, 0xa0, 0x05, 0xd1, 0xf4, 0xad, 0xaa, 0xa2, 0x25, 0x8a, 0x0e, - 0xc5, 0xf0, 0x76, 0x48, 0x38, 0x3f, 0x16, 0x2e, 0xdc, 0x1c, 0x8b, 0x2f, - 0xa9, 0xc7, 0x2b, 0xfa, 0xd3, 0xc1, 0x11, 0x85, 0x07, 0x97, 0x83, 0xc5, - 0x39, 0x19, 0xf6, 0xdc, 0x71, 0x9c, 0x19, 0xf4, 0x4d, 0xd1, 0x11, 0x48, - 0x67, 0x98, 0x80, 0xb4, 0x07, 0xc5, 0x8b, 0x75, 0x07, 0x4f, 0x8c, 0x1e, - 0xd5, 0xe3, 0x8b, 0x86, 0x62, 0x7a, 0xc9, 0x26, 0x39, 0x61, 0x80, 0x2f, - 0x4f, 0xb7, 0x95, 0x22, 0x4d, 0xaf, 0x0a, 0x04, 0x3b, 0xc1, 0xc9, 0x1f, - 0xbe, 0xd4, 0x0d, 0x1c, 0x6c, 0x73, 0x0b, 0x77, 0x5b, 0x0e, 0x2e, 0x9c, - 0x1f, 0x5a, 0x49, 0x3c, 0x56, 0x5d, 0x27, 0x04, 0xa5, 0x7c, 0x6d, 0x00, - 0x09, 0x41, 0x24, 0xc5, 0x53, 0x4f, 0x15, 0xd4, 0x53, 0x3c, 0x8e, 0x3a, - 0xe9, 0xd8, 0x9e, 0x75, 0xd1, 0xd1, 0xb0, 0x74, 0x82, 0xf1, 0xd8, 0xba, - 0x51, 0xf1, 0xa8, 0x59, 0x88, 0x1e, 0x42, 0x7a, 0x6a, 0x45, 0x2a, 0x50, - 0xb5, 0x02, 0xd2, 0x0c, 0xdd, 0x60, 0x3d, 0x78, 0x8c, 0x23, 0xd6, 0x12, - 0xcf, 0x78, 0xd8, 0x3a, 0xec, 0x6a, 0x53, 0xdb, 0x76, 0xf7, 0x51, 0x52, - 0xf5, 0x5c, 0x03, 0xec, 0x5a, 0x1d, 0x5e, 0xd6, 0x46, 0xb6, 0xec, 0x83, - 0x0e, 0xd2, 0x1d, 0xcc, 0xdc, 0x3d, 0xe9, 0x1c, 0xf2, 0xa1, 0x65, 0x53, - 0x92, 0x3a, 0xd9, 0x3b, 0xa8, 0x92, 0x45, 0x6e, 0x75, 0xff, 0x06, 0x80, - 0xeb, 0xaa, 0xc2, 0x35, 0xa6, 0x3d, 0xed, 0x1e, 0xcc, 0x9b, 0x07, 0x21, - 0x8f, 0xdd, 0xed, 0xe5, 0x1d, 0x95, 0x2f, 0x4e, 0x36, 0x1f, 0x3f, 0x88, - 0xf7, 0xe7, 0xc0, 0x6e, 0xbd, 0x5a, 0xdd, 0x0f, 0x16, 0x8b, 0x54, 0xaf, - 0x09, 0xc3, 0xdd, 0xd1, 0x37, 0xf0, 0x1f, 0xa8, 0x90, 0x9c, 0xac, 0xf9, - 0x7e, 0x5b, 0x34, 0xdf, 0x90, 0x8b, 0xbe, 0xed, 0xdf, 0x02, 0x3e, 0xef, - 0xf8, 0x1f, 0x12, 0x4d, 0xbc, 0x55, 0xcd, 0x0b, 0x1c, 0x15, 0x9f, 0xc0, - 0x5c, 0x70, 0x3f, 0x51, 0x39, 0x4f, 0xed, 0x2e, 0x1b, 0x59, 0xd0, 0xdc, - 0x40, 0xe3, 0xce, 0xc7, 0xa9, 0xf3, 0x3a, 0xe7, 0x9d, 0x6f, 0x0e, 0x39, - 0x1d, 0xe5, 0xd3, 0x1a, 0x18, 0xac, 0x1e, 0x0f, 0xa6, 0xf8, 0xc4, 0xff, - 0x6b, 0x48, 0xb4, 0x83, 0x5a, 0x50, 0x9a, 0xc3, 0x23, 0x68, 0x6c, 0xf6, - 0x06, 0xc7, 0xda, 0x45, 0xc6, 0xaa, 0xe8, 0x85, 0x69, 0xce, 0x42, 0xd9, - 0x1e, 0xb9, 0x7c, 0xf1, 0x15, 0x47, 0x68, 0x88, 0xb5, 0x6e, 0x1e, 0x30, - 0x37, 0x2f, 0x36, 0x0c, 0x5b, 0x9d, 0x6e, 0x9e, 0xf8, 0xc8, 0x64, 0x75, - 0x5b, 0xad, 0xfd, 0x90, 0x8c, 0x70, 0x9c, 0x92, 0x21, 0xb7, 0x0d, 0x45, - 0xe7, 0x88, 0x4e, 0x6f, 0xaa, 0xa4, 0xbb, 0x28, 0x8b, 0x93, 0x77, 0x5d, - 0xce, 0x9a, 0x50, 0xeb, 0x81, 0xba, 0x2b, 0xf8, 0xbc, 0x78, 0x68, 0x86, - 0xe4, 0x82, 0xb3, 0xb4, 0x09, 0x1d, 0x70, 0x5d, 0x72, 0x10, 0x33, 0x07, - 0xd8, 0x1d, 0xb4, 0x50, 0xe2, 0x47, 0xfe, 0xb4, 0xb9, 0xae, 0x0e, 0xa0, - 0x45, 0x66, 0xfa, 0x2f, 0xe2, 0xdf, 0xfc, 0x14, 0x9a, 0x81, 0xdf, 0x53, - 0x00, 0x97, 0xc2, 0xcc, 0xac, 0x17, 0x5c, 0xcf, 0xdd, 0xc4, 0xb9, 0xf9, - 0x3f, 0xfb, 0xaa, 0x79, 0x30, 0x11, 0x68, 0x86, 0xfa, 0x01, 0xe0, 0x3b, - 0xfe, 0xf1, 0x50, 0x38, 0xc8, 0x63, 0x98, 0x83, 0x8e, 0x43, 0x45, 0x36, - 0x28, 0x02, 0xfe, 0xef, 0x10, 0xc5, 0x4b, 0x66, 0x0e, 0x2c, 0x9d, 0x00, - 0xdf, 0x30, 0xef, 0x03, 0xa4, 0x12, 0x82, 0x70, 0x41, 0xf7, 0xb1, 0xf4, - 0x07, 0xf8, 0xa0, 0x06, 0x93, 0x99, 0x17, 0xef, 0x67, 0xdd, 0xb5, 0x6f, - 0x68, 0x54, 0x68, 0xbe, 0x10, 0x6d, 0xe8, 0x39, 0x14, 0x5e, 0xd9, 0xc3, - 0x84, 0x73, 0xc0, 0x5a, 0x3f, 0x01, 0x1d, 0xbd, 0xf1, 0x88, 0x19, 0x27, - 0xa5, 0xf7, 0x78, 0x2d, 0x6c, 0x96, 0x8e, 0x67, 0x17, 0xd2, 0x9c, 0xeb, - 0x7f, 0xf1, 0x50, 0xdf, 0x9e, 0x84, 0xb7, 0x9e, 0x01, 0x10, 0x42, 0x1e, - 0x6b, 0x8e, 0x3b, 0x33, 0x27, 0xde, 0xd0, 0x92, 0x0a, 0xba, 0x73, 0x26, - 0x30, 0x7e, 0x91, 0xf9, 0x55, 0x08, 0x78, 0x1d, 0xdd, 0xba, 0xd9, 0x19, - 0x23, 0xdd, 0xac, 0xfb, 0xf9, 0x13, 0x81, 0x45, 0xf2, 0xed, 0xa0, 0xba, - 0x98, 0x18, 0x8e, 0x4c, 0x06, 0x9d, 0x59, 0x04, 0xf7, 0xa2, 0xac, 0xe6, - 0x45, 0x12, 0x3d, 0x25, 0x07, 0x2e, 0xcb, 0xbc, 0x8d, 0x99, 0x13, 0x78, - 0x32, 0xf5, 0x70, 0x62, 0xc7, 0xb9, 0xeb, 0xfb, 0xc4, 0x63, 0xb5, 0x3d, - 0xa3, 0x55, 0x5c, 0x59, 0xe4, 0x6d, 0x76, 0x74, 0xea, 0xfb, 0x8a, 0x1a, - 0x02, 0x11, 0xde, 0xb9, 0x0d, 0x84, 0xd3, 0x28, 0xc2, 0x78, 0xed, 0x53, - 0x82, 0x1f, 0x59, 0x7f, 0x2e, 0x4e, 0x98, 0x4b, 0xf9, 0x0d, 0x7a, 0x2c, - 0xfd, 0xce, 0xa1, 0x5b, 0xec, 0xee, 0x0c, 0x3a, 0x9d, 0xb8, 0xf0, 0x42, - 0x6e, 0x71, 0x72, 0x58, 0x6e, 0xc4, 0xd7, 0x2c, 0x07, 0xde, 0x56, 0x5c, - 0x3c, 0x71, 0xf6, 0x65, 0xaf, 0x14, 0xf0, 0xdc, 0x6a, 0x88, 0xeb, 0x16, - 0xc9, 0x5b, 0x77, 0x2f, 0x33, 0x3c, 0x6e, 0x9e, 0xf9, 0xbe, 0xe7, 0x31, - 0x37, 0xde, 0x3d, 0xe3, 0x45, 0x97, 0xf0, 0x81, 0xce, 0x5e, 0x87, 0xcb, - 0xc1, 0x52, 0x8d, 0xf2, 0xcc, 0xe7, 0x94, 0x9c, 0x44, 0x0d, 0xf1, 0x64, - 0x42, 0xe6, 0xf9, 0x0f, 0xef, 0xb5, 0x3c, 0x0f, 0x12, 0x28, 0x27, 0x5c, - 0x88, 0x66, 0x99, 0x70, 0xf5, 0x78, 0xf0, 0x84, 0x06, 0xdb, 0xf4, 0x2c, - 0xdd, 0x02, 0x46, 0x4c, 0xe8, 0x57, 0xd5, 0x7a, 0xa4, 0x19, 0x7a, 0xfe, - 0x26, 0x86, 0xf8, 0xd0, 0x81, 0x0b, 0x03, 0x33, 0xa3, 0x7e, 0x84, 0x2f, - 0x13, 0x36, 0x49, 0x92, 0x4c, 0x4f, 0xbd, 0xd0, 0xb8, 0x0b, 0x8f, 0x78, - 0x2b, 0x24, 0x80, 0xea, 0xa8, 0x61, 0xb7, 0xe2, 0x53, 0x84, 0x86, 0xec, - 0x63, 0x41, 0x74, 0x35, 0x65, 0xf6, 0xbb, 0x1f, 0xf3, 0x90, 0x26, 0x0c, - 0x7a, 0xf8, 0x29, 0xe1, 0xbd, 0x44, 0x91, 0x91, 0x35, 0x02, 0xa3, 0x15, - 0x6a, 0xda, 0xf3, 0xa9, 0xb3, 0x40, 0x86, 0x46, 0xa8, 0xda, 0x31, 0xba, - 0x8f, 0x60, 0x5f, 0xf8, 0xe7, 0xa5, 0x96, 0x00, 0xf2, 0xe8, 0x10, 0xc1, - 0xbf, 0x1e, 0x50, 0x26, 0x0e, 0x40, 0x37, 0x7c, 0xdd, 0x75, 0x1e, 0x28, - 0xa7, 0x82, 0x64, 0xba, 0x19, 0xef, 0x32, 0x47, 0xa6, 0xec, 0x35, 0x4e, - 0x2b, 0xc9, 0xe6, 0xa5, 0x08, 0xc4, 0xad, 0xaf, 0x80, 0xde, 0x74, 0xc5, - 0x30, 0x0f, 0x02, 0x72, 0x0e, 0x6c, 0x2c, 0x1b, 0xcf, 0xcb, 0x37, 0x47, - 0x0d, 0xe1, 0x51, 0x89, 0xc3, 0x91, 0x2f, 0xbe, 0x10, 0xcb, 0xf3, 0x92, - 0x54, 0x73, 0x08, 0x9a, 0x95, 0x7b, 0x48, 0xbb, 0x13, 0x55, 0x34, 0xa2, - 0x2d, 0x2a, 0x84, 0x38, 0x66, 0x8e, 0x60, 0xf8, 0xa9, 0xe1, 0xec, 0xd6, - 0x55, 0xd7, 0xde, 0xc6, 0xf9, 0xde, 0xf3, 0x6f, 0xf5, 0x9c, 0x83, 0xf2, - 0x51, 0xcc, 0x6d, 0x2f, 0xe1, 0x23, 0x27, 0x5c, 0x74, 0xf0, 0xc9, 0x8d, - 0x5b, 0xe1, 0x8e, 0x69, 0x74, 0x81, 0xaf, 0xa6, 0xa3, 0xd0, 0x99, 0xf7, - 0x69, 0x13, 0xb3, 0xc7, 0xb9, 0x0c, 0x73, 0x4b, 0xb4, 0xab, 0xd2, 0x68, - 0x4c, 0x0b, 0x3f, 0x12, 0x93, 0xad, 0xe5, 0x74, 0x1e, 0x7c, 0x8b, 0x2b, - 0x38, 0xa4, 0xa0, 0x4b, 0xb9, 0x3f, 0xda, 0xf7, 0x7f, 0xd3, 0x56, 0xdc, - 0x49, 0x3b, 0xdc, 0x13, 0x1c, 0x85, 0xf1, 0x60, 0xf4, 0xb9, 0x23, 0xd6, - 0x3c, 0x9a, 0x3d, 0x97, 0x9d, 0x80, 0xa0, 0x44, 0x9d, 0x40, 0xa5, 0xa0, - 0x8a, 0xb2, 0xaa, 0xda, 0x40, 0x69, 0x09, 0x08, 0x12, 0x6a, 0xbd, 0x5c, - 0xba, 0x91, 0x96, 0xe1, 0xdf, 0xf0, 0x76, 0xb4, 0xb0, 0x5f, 0x26, 0x1a, - 0x05, 0xf0, 0x9e, 0x28, 0xd1, 0xce, 0xba, 0x01, 0x0d, 0xb2, 0x5e, 0x45, - 0xdf, 0x5e, 0xdd, 0xdf, 0xe9, 0x1b, 0x8d, 0xf9, 0x4d, 0x15, 0x44, 0x46, - 0x27, 0xad, 0xdb, 0x18, 0xc2, 0x82, 0xee, 0x49, 0xb0, 0x30, 0x51, 0x6f, - 0xac, 0x1e, 0x18, 0xd9, 0x12, 0xf3, 0x13, 0x97, 0x05, 0xa8, 0xdc, 0x0f, - 0x06, 0xab, 0x30, 0x9e, 0x51, 0x74, 0xc2, 0x15, 0x3a, 0x87, 0x69, 0x78, - 0x04, 0x84, 0x7c, 0x2a, 0xe8, 0x55, 0x76, 0x7c, 0x54, 0x3b, 0xab, 0x4e, - 0x3c, 0x4f, 0x6b, 0xd8, 0x2a, 0xc2, 0x7f, 0xd4, 0x8a, 0x0f, 0xa3, 0x55, - 0xa3, 0x71, 0xba, 0xb1, 0xf1, 0x19, 0xb5, 0x79, 0x0a, 0xe8, 0x9d, 0x77, - 0x58, 0x8b, 0x30, 0xb7, 0x8b, 0x66, 0xbd, 0xb3, 0x06, 0x22, 0xef, 0x13, - 0xf3, 0x70, 0x9c, 0xd4, 0xfe, 0xc7, 0x69, 0xd3, 0xc0, 0x64, 0x02, 0x43, - 0x74, 0x36, 0x5c, 0x07, 0xc2, 0x81, 0xe8, 0x5b, 0xd1, 0xa8, 0x3c, 0x2e, - 0x5c, 0x1a, 0x08, 0xe0, 0xbf, 0xea, 0xfc, 0x09, 0x10, 0x1f, 0x41, 0x02, - 0xd8, 0x64, 0x7a, 0x4a, 0xed, 0x9b, 0x52, 0xf2, 0x1f, 0xa8, 0xfe, 0x4f, - 0x10, 0x0f, 0xe3, 0x09, 0x94, 0xc4, 0x7e, 0xd2, 0xc6, 0xbf, 0xa1, 0x86, - 0x05, 0x98, 0x1d, 0x26, 0x4d, 0xe6, 0x88, 0xf3, 0x1a, 0x34, 0x82, 0xb7, - 0xaa, 0x71, 0x67, 0x8e, 0x6f, 0x3e, 0x57, 0x9a, 0xa1, 0x0d, 0x04, 0x9a, - 0x5e, 0x0c, 0xfc, 0x82, 0xc5, 0xc3, 0x53, 0x88, 0xeb, 0x5f, 0x38, 0xfd, - 0xc7, 0x90, 0xcd, 0x74, 0xf7, 0xff, 0xf4, 0xc8, 0x87, 0x01, 0x9b, 0x79, - 0xa8, 0x4f, 0xff, 0x4a, 0x4f, 0x7d, 0x8d, 0xba, 0x3a, 0x68, 0x0d, 0x19, - 0x9f, 0xbb, 0xe7, 0xcc, 0x57, 0x3a, 0x56, 0x92, 0xef, 0xc4, 0x53, 0x59, - 0xb8, 0xa4, 0x48, 0x9d, 0xa9, 0x7e, 0x5b, 0xd1, 0x88, 0xcd, 0x9e, 0x41, - 0x68, 0xb5, 0x41, 0xfd, 0x19, 0x8a, 0x80, 0xe7, 0xc5, 0xf0, 0x8c, 0xc1, - 0x6d, 0xcb, 0x65, 0xf5, 0xb6, 0x00, 0xa5, 0x43, 0xb2, 0xbd, 0xbf, 0xd5, - 0x4d, 0x40, 0xc7, 0x8f, 0xdb, 0xc4, 0x6e, 0x6b, 0x65, 0x4e, 0x87, 0xec, - 0x03, 0x07, 0xf9, 0x7f, 0x0c, 0xeb, 0x3e, 0xd4, 0xd0, 0x1e, 0xba, 0xbe, - 0x4a, 0x88, 0xa7, 0x34, 0x66, 0x8d, 0x94, 0xc6, 0xcd, 0xec, 0x86, 0xa3, - 0x9b, 0xa0, 0x12, 0x9a, 0x31, 0x3e, 0x89, 0x5a, 0x1f, 0x40, 0xac, 0x39, - 0x2d, 0x8a, 0x5c, 0x22, 0xdc, 0xc4, 0xb2, 0x31, 0xf3, 0xf0, 0xb4, 0xa1, - 0xe0, 0xe5, 0x03, 0xeb, 0xd8, 0xa2, 0xfa, 0xc5, 0xe6, 0xc1, 0x2d, 0xb8, - 0x15, 0x5a, 0x57, 0x2c, 0x4d, 0x35, 0xfa, 0xd5, 0xcf, 0x93, 0x00, 0x17, - 0xff, 0xbe, 0xf2, 0x95, 0x14, 0xeb, 0x66, 0x92, 0xea, 0x38, 0xb5, 0x8f, - 0x50, 0x5c, 0x26, 0x56, 0xe0, 0x99, 0xe5, 0x5a, 0x23, 0x75, 0x06, 0x08, - 0xf4, 0x51, 0xfb, 0x9e, 0x29, 0xc9, 0x26, 0x0e, 0x9a, 0x04, 0xd6, 0x37, - 0xa6, 0xd6, 0xcd, 0xe0, 0xd2, 0x8b, 0xfb, 0x8e, 0xe0, 0x9e, 0x69, 0xd8, - 0xbc, 0x6a, 0x4d, 0xd0, 0x9a, 0x51, 0xe3, 0x1f, 0x69, 0xe8, 0x87, 0xee, - 0x09, 0x1d, 0x70, 0xb2, 0x7b, 0xe9, 0xa4, 0xa9, 0x20, 0x6b, 0x88, 0x8e, - 0x2a, 0xca, 0x0a, 0xb2, 0x21, 0x01, 0x66, 0xe2, 0xa4, 0x3a, 0x78, 0x05, - 0xb8, 0x29, 0x06, 0x1c, 0x5a, 0x9b, 0x07, 0xb6, 0xc5, 0xc9, 0xb3, 0xb8, - 0xcb, 0x5a, 0xaa, 0x13, 0x00, 0x4d, 0xad, 0x95, 0x93, 0x69, 0x69, 0x9f, - 0x52, 0x4d, 0xad, 0x67, 0x01, 0x3e, 0x90, 0x6d, 0x78, 0xd2, 0xcd, 0x1e, - 0x77, 0x96, 0x25, 0x05, 0x52, 0xcd, 0x3d, 0x89, 0xb3, 0x19, 0x52, 0xe7, - 0xc4, 0x98, 0xe7, 0x4d, 0xc5, 0x40, 0xc1, 0x2a, 0x42, 0xcd, 0xf7, 0xbb, - 0xf9, 0x0c, 0xe6, 0x91, 0x4b, 0x97, 0x0b, 0x79, 0x39, 0x31, 0x77, 0x67, - 0x21, 0xd6, 0x07, 0x57, 0x80, 0x0b, 0x4a, 0x41, 0xf9, 0x26, 0x8c, 0x5f, - 0xf4, 0xe5, 0x8c, 0x9d, 0x6a, 0xa2, 0x40, 0xdf, 0x83, 0x88, 0xc4, 0x91, - 0x78, 0xb4, 0x4a, 0xe8, 0x45, 0x9a, 0x27, 0x11, 0xf7, 0xb0, 0x69, 0xb4, - 0x9a, 0x3e, 0x83, 0x46, 0xe7, 0x09, 0x97, 0xe6, 0x6b, 0x16, 0x7c, 0x4c, - 0x76, 0x52, 0xd1, 0x7c, 0xe3, 0x47, 0x7c, 0x15, 0x3b, 0x76, 0x09, 0x66, - 0x38, 0x60, 0x39, 0x43, 0x13, 0x0e, 0x1d, 0xcf, 0xfc, 0xd8, 0x99, 0xf7, - 0x14, 0x67, 0x1c, 0x92, 0x92, 0x39, 0x39, 0x91, 0xd8, 0x41, 0xc4, 0x7c, - 0x07, 0x8a, 0x46, 0x28, 0x2c, 0x5b, 0x66, 0xfa, 0x3c, 0x27, 0xd9, 0xd7, - 0xd0, 0x32, 0x8b, 0x60, 0x9e, 0x15, 0xd5, 0x9c, 0x5d, 0x08, 0x12, 0xda, - 0x03, 0xed, 0xf2, 0x9c, 0x29, 0xf4, 0x82, 0x6a, 0x51, 0x00, 0xf8, 0xf0, - 0x80, 0x18, 0x0b, 0x5f, 0xd1, 0x9f, 0x98, 0x7a, 0x3c, 0xcb, 0x0e, 0x2a, - 0x09, 0x01, 0x6e, 0xd9, 0x4e, 0x17, 0x9f, 0x27, 0xe0, 0x90, 0xa3, 0xb7, - 0xb5, 0x85, 0x3a, 0x9b, 0x9c, 0x2a, 0x5b, 0x09, 0x7d, 0x6c, 0x81, 0x52, - 0x47, 0x9a, 0xa3, 0x02, 0xf1, 0x60, 0xe4, 0x6c, 0xe7, 0x67, 0x2d, 0xb7, - 0xcc, 0x14, 0x62, 0x06, 0xeb, 0x64, 0x0f, 0x1a, 0x3f, 0x8c, 0xd0, 0x64, - 0x4a, 0x38, 0xae, 0x4a, 0xc1, 0x03, 0xd3, 0xbb, 0x43, 0x88, 0x1f, 0x01, - 0x85, 0x35, 0xac, 0x6d, 0x78, 0x3f, 0x46, 0xb1, 0x3d, 0x86, 0x7d, 0xa0, - 0xa4, 0x01, 0x24, 0x5f, 0xa3, 0xcc, 0x9b, 0x07, 0x32, 0x4e, 0x2a, 0x53, - 0x43, 0xf9, 0xae, 0x50, 0x38, 0x66, 0x2e, 0x8f, 0xec, 0x81, 0x72, 0x2d, - 0x25, 0x80, 0x32, 0xd5, 0x70, 0xf1, 0x5f, 0xf1, 0xb8, 0x4f, 0x09, 0xf8, - 0xa5, 0x30, 0x35, 0xd7, 0x5a, 0x1e, 0x45, 0xa3, 0xdf, 0xf2, 0x38, 0xaa, - 0x28, 0xb2, 0x3c, 0x4e, 0x7d, 0x3a, 0x5d, 0x26, 0xae, 0xf1, 0x07, 0x68, - 0x8d, 0x4f, 0xbc, 0x7e, 0x7a, 0xd9, 0x2c, 0xf8, 0x14, 0x70, 0x91, 0x11, - 0x28, 0x6d, 0x81, 0xc6, 0x6a, 0x87, 0x09, 0xc9, 0x34, 0x05, 0xef, 0xe6, - 0xf4, 0x7d, 0x94, 0x5f, 0xa5, 0xc7, 0x8b, 0xe9, 0x35, 0x39, 0xcd, 0x32, - 0x17, 0xff, 0x15, 0x5a, 0xbe, 0x29, 0x39, 0x2c, 0x2f, 0xe8, 0x88, 0x00, - 0xe0, 0x16, 0x16, 0x29, 0xa5, 0x83, 0xe5, 0x7d, 0xa8, 0xc4, 0xd9, 0x24, - 0xa8, 0x73, 0x17, 0xe4, 0x8e, 0xed, 0x15, 0x21, 0xcd, 0x61, 0x08, 0x3c, - 0xa7, 0xb8, 0x74, 0x2d, 0x0a, 0x15, 0xf3, 0x7b, 0xc3, 0x91, 0x23, 0xe4, - 0xb2, 0x90, 0x6e, 0x42, 0x07, 0xf4, 0x46, 0x4a, 0x75, 0xcf, 0xa4, 0xaa, - 0xf5, 0xa0, 0x8a, 0x26, 0x2b, 0x01, 0x5e, 0x21, 0xc6, 0x95, 0x73, 0xa5, - 0x4f, 0xc7, 0x64, 0x05, 0xc6, 0x36, 0x61, 0x39, 0x25, 0x33, 0xb3, 0xd2, - 0xfc, 0x53, 0xbd, 0x84, 0x9e, 0x6f, 0xd0, 0xba, 0x5c, 0x0e, 0x1c, 0xa7, - 0xb1, 0x89, 0x03, 0xa9, 0xe2, 0x2e, 0x6a, 0x0b, 0x8b, 0x74, 0x65, 0xcd, - 0x52, 0x7d, 0x23, 0xe2, 0xd1, 0x2c, 0x29, 0xbe, 0x7d, 0xc1, 0x11, 0xa0, - 0x16, 0xec, 0x52, 0x77, 0x16, 0x66, 0xbf, 0x56, 0x0e, 0x1a, 0x1f, 0x57, - 0xd5, 0x29, 0x13, 0xab, 0x3f, 0x5a, 0x16, 0xf5, 0x47, 0x4b, 0x4e, 0xdc, - 0x06, 0x02, 0x0a, 0x41, 0x5a, 0xf2, 0xca, 0x02, 0x2d, 0x88, 0x93, 0xc7, - 0xbc, 0xf2, 0xda, 0xb7, 0x01, 0x2d, 0x83, 0x2c, 0x54, 0x6e, 0x4b, 0xba, - 0x92, 0xdf, 0xd4, 0xcf, 0x2f, 0x0a, 0xb3, 0x49, 0x7a, 0x8b, 0xf7, 0xbb, - 0xcb, 0x56, 0x75, 0x5c, 0x88, 0x39, 0x1b, 0x52, 0x3f, 0x69, 0xe2, 0x53, - 0xe2, 0x00, 0x23, 0xac, 0xad, 0x47, 0xc0, 0x23, 0xb9, 0xf0, 0xac, 0x39, - 0x96, 0x99, 0xab, 0x28, 0x5e, 0xc4, 0x25, 0x9d, 0x9c, 0xa8, 0x69, 0xef, - 0x7c, 0x08, 0xc5, 0xdd, 0xe2, 0xd8, 0xa2, 0x1a, 0xc4, 0xce, 0xc7, 0x4e, - 0xee, 0x81, 0x77, 0x2d, 0x71, 0x2c, 0x3b, 0xe5, 0x5b, 0xdc, 0xe5, 0x54, - 0x05, 0xc0, 0x42, 0x9c, 0xc8, 0x1a, 0xbf, 0x60, 0x31, 0x09, 0x40, 0x55, - 0x61, 0x8f, 0x68, 0xa6, 0x54, 0xc3, 0x88, 0x64, 0xef, 0x6a, 0xae, 0x7c, - 0xf1, 0x11, 0x94, 0x02, 0xf4, 0x82, 0x0d, 0x0a, 0x4a, 0xfb, 0x0b, 0x2f, - 0xed, 0x11, 0x3c, 0x65, 0x72, 0x78, 0x3f, 0x2b, 0x3e, 0xbc, 0x61, 0x42, - 0x4b, 0x38, 0x08, 0xd4, 0x8f, 0x7a, 0xfe, 0xe1, 0x11, 0x6f, 0xcf, 0x3d, - 0x6f, 0x09, 0xea, 0x8f, 0x4c, 0xce, 0x2b, 0xe3, 0xca, 0x14, 0x7d, 0x53, - 0x0e, 0x5d, 0xce, 0x75, 0x1a, 0x39, 0x5a, 0x2f, 0xbf, 0xb5, 0x5e, 0x23, - 0x39, 0xaa, 0xca, 0xeb, 0xaa, 0xb4, 0xfe, 0xef, 0xf0, 0x0e, 0xd0, 0x2a, - 0x9b, 0xcc, 0x69, 0xd2, 0x64, 0xf6, 0x7f, 0x07, 0xb3, 0x80, 0x9f, 0x52, - 0xa0, 0x57, 0x22, 0xe8, 0x5e, 0x81, 0x2a, 0x05, 0xde, 0x65, 0x52, 0x99, - 0x40, 0x82, 0x23, 0xd9, 0x2a, 0x7d, 0x8f, 0x94, 0x22, 0x0d, 0xaa, 0xe3, - 0x2c, 0x50, 0x45, 0xba, 0x54, 0xc0, 0x2f, 0x29, 0x52, 0x98, 0x02, 0xf0, - 0x49, 0xec, 0x3d, 0x0b, 0x0e, 0x47, 0xd5, 0x79, 0x64, 0x51, 0x4f, 0x0a, - 0x72, 0xb5, 0x2c, 0x4e, 0x37, 0x51, 0x7d, 0x51, 0xb9, 0xd3, 0x18, 0x7c, - 0xaa, 0x5b, 0xee, 0xac, 0x17, 0x20, 0xcc, 0x02, 0x02, 0xf9, 0xbc, 0xc7, - 0xfe, 0x09, 0xf0, 0xdb, 0xed, 0xde, 0x69, 0x1b, 0x02, 0xf8, 0x2f, 0x7e, - 0x60, 0x9a, 0xd8, 0x27, 0x0c, 0x86, 0x56, 0xf5, 0xb0, 0x05, 0xfa, 0x27, - 0x5f, 0x5a, 0xc7, 0x0a, 0xcc, 0x89, 0x2a, 0x4b, 0xa7, 0xe0, 0xee, 0xb3, - 0x27, 0x24, 0x69, 0x64, 0x2e, 0x29, 0x37, 0x27, 0xbf, 0xbf, 0xcc, 0x1d, - 0xa6, 0x9b, 0xc2, 0x27, 0x9e, 0x19, 0xd0, 0x82, 0x03, 0xd1, 0x5e, 0xed, - 0x76, 0xb7, 0x3b, 0xff, 0xd3, 0x59, 0x50, 0x9a, 0x6c, 0x5b, 0xe5, 0xc5, - 0xe6, 0x0d, 0x52, 0x33, 0x07, 0x2a, 0xd1, 0x06, 0xf7, 0x42, 0xa5, 0x69, - 0x0e, 0x22, 0xe8, 0x23, 0x45, 0x88, 0xec, 0x68, 0xcd, 0xbc, 0x73, 0xfe, - 0xc8, 0xa6, 0xee, 0x3f, 0xd8, 0xc4, 0xc1, 0x57, 0x8c, 0xca, 0xf8, 0x18, - 0xa1, 0x83, 0x83, 0xf0, 0x85, 0x33, 0xfa, 0x04, 0xf1, 0x15, 0xe3, 0xbf, - 0x43, 0x63, 0x6e, 0x19, 0x25, 0x9e, 0x94, 0x71, 0x09, 0xf2, 0x48, 0x0e, - 0x4a, 0xd8, 0x44, 0x12, 0x7d, 0x66, 0x54, 0xc6, 0x3a, 0xcb, 0xb1, 0x0a, - 0x9c, 0x95, 0xf9, 0xf6, 0xdd, 0xfa, 0x44, 0x9b, 0xc8, 0x28, 0x67, 0xbf, - 0x68, 0xf0, 0xdc, 0x04, 0x40, 0x95, 0xa0, 0x8b, 0xa6, 0x33, 0xe5, 0x8b, - 0xad, 0x11, 0xa4, 0x8d, 0x71, 0xe2, 0xaa, 0x84, 0x09, 0xb6, 0x3a, 0xf6, - 0xba, 0x62, 0x68, 0x9d, 0x34, 0x19, 0x2c, 0x5f, 0xef, 0xac, 0x5f, 0xe3, - 0x37, 0xb6, 0xbe, 0xf2, 0xc5, 0x6d, 0x64, 0x82, 0x58, 0x5c, 0x2a, 0x5f, - 0x9c, 0x2e, 0x15, 0x56, 0x2c, 0x8d, 0xdd, 0xec, 0x77, 0x83, 0x5a, 0x9f, - 0xf1, 0x15, 0x8c, 0x6f, 0x92, 0x91, 0xd1, 0x57, 0x72, 0x6e, 0x22, 0x14, - 0x36, 0x79, 0x53, 0xf2, 0x67, 0xf6, 0xa6, 0x85, 0x37, 0x83, 0x08, 0x7c, - 0x08, 0x28, 0x4a, 0x59, 0x3e, 0x9e, 0xde, 0x38, 0x8b, 0xfa, 0x5f, 0x90, - 0xa0, 0xfa, 0x46, 0x02, 0x2f, 0x79, 0xb4, 0x6d, 0xf6, 0x2a, 0x25, 0xda, - 0x32, 0x68, 0xfd, 0x51, 0xd3, 0x21, 0x01, 0x2f, 0x00, 0x2b, 0xfe, 0x57, - 0x03, 0x5d, 0x4e, 0x3a, 0xdf, 0xf2, 0x52, 0x8b, 0x20, 0xa5, 0x50, 0xe8, - 0x06, 0xb9, 0xa9, 0x7f, 0x05, 0x7c, 0x0e, 0xfc, 0x0a, 0x05, 0xbf, 0x25, - 0x1f, 0x4b, 0x1d, 0xd1, 0x37, 0x57, 0x85, 0xcd, 0xa4, 0x8c, 0x4a, 0xea, - 0x20, 0x06, 0x2f, 0x83, 0xd1, 0xd2, 0xa0, 0x8b, 0xc0, 0x85, 0xfb, 0xb2, - 0x59, 0x0d, 0xf1, 0x83, 0x2a, 0xe0, 0x8e, 0x75, 0xf4, 0x10, 0x88, 0xba, - 0xce, 0x01, 0x16, 0xec, 0x6b, 0xb9, 0x08, 0x58, 0xac, 0x3a, 0xc9, 0x1e, - 0x03, 0xc1, 0x40, 0x51, 0x80, 0x2f, 0x7b, 0x88, 0x44, 0x4f, 0xb1, 0xd7, - 0x71, 0xce, 0xe1, 0x1e, 0x30, 0x52, 0xb5, 0xab, 0x34, 0x20, 0xdc, 0xfb, - 0x6f, 0x78, 0xc7, 0xd8, 0x3d, 0x73, 0x8a, 0x54, 0x7c, 0x5c, 0xc0, 0xc4, - 0x51, 0xf4, 0x2c, 0x4e, 0x1e, 0x79, 0x76, 0xd4, 0xd6, 0xd7, 0xc8, 0x1d, - 0x61, 0xdf, 0x26, 0xc7, 0xc1, 0x9d, 0x8e, 0x49, 0x71, 0x5d, 0xb8, 0xcd, - 0x59, 0x8a, 0x04, 0x3b, 0xfd, 0xf4, 0x3b, 0xae, 0xac, 0x99, 0xf8, 0x61, - 0xb3, 0xec, 0x1a, 0x7d, 0x16, 0xb8, 0xdd, 0x69, 0xa8, 0xf5, 0x6d, 0xdc, - 0x93, 0x20, 0x98, 0xf4, 0xa3, 0x73, 0xac, 0x75, 0x58, 0x28, 0x18, 0x97, - 0x28, 0x60, 0x71, 0x2a, 0x7d, 0xc7, 0x35, 0x77, 0xb5, 0x1e, 0xc8, 0x32, - 0xdc, 0xde, 0xaf, 0x51, 0xab, 0x31, 0x44, 0x02, 0x9c, 0xb7, 0x6c, 0xff, - 0x38, 0x6e, 0x6e, 0x5f, 0x34, 0x06, 0x1d, 0xf3, 0x22, 0x5c, 0x2a, 0x54, - 0x38, 0x78, 0x5c, 0xc3, 0x6d, 0xd4, 0x96, 0xb6, 0xcc, 0x2d, 0x88, 0x8a, - 0x98, 0x3a, 0xc5, 0x9c, 0x17, 0x7e, 0xef, 0xa6, 0xea, 0xbf, 0xf1, 0xe2, - 0x85, 0x53, 0xb5, 0xa9, 0x80, 0xb4, 0xe6, 0x87, 0x6c, 0xd8, 0x5e, 0x10, - 0x78, 0x55, 0x5a, 0x1c, 0x78, 0xe0, 0x9b, 0x65, 0xda, 0xc1, 0xfe, 0x77, - 0xdb, 0xbc, 0x93, 0x30, 0x70, 0x04, 0xdd, 0xe4, 0x6f, 0xf4, 0x8c, 0xda, - 0xc6, 0xa7, 0x48, 0xe4, 0xd5, 0x16, 0x47, 0x1f, 0x84, 0x3d, 0xd7, 0xb6, - 0x4e, 0x32, 0xdb, 0x36, 0x2e, 0x27, 0x0e, 0x2b, 0x7f, 0x61, 0x28, 0x78, - 0xc4, 0x4f, 0xf4, 0x87, 0xc4, 0x0f, 0x08, 0xfb, 0x5b, 0xaf, 0x22, 0xaa, - 0x32, 0x40, 0xb1, 0xfd, 0x2b, 0xce, 0xa5, 0x65, 0xc0, 0x2a, 0xef, 0x81, - 0x09, 0xc9, 0x06, 0xd8, 0x27, 0x47, 0x84, 0xa3, 0x4b, 0xe6, 0x64, 0xf4, - 0xfa, 0x95, 0x18, 0xc5, 0xe7, 0x2b, 0x77, 0x3c, 0x43, 0x29, 0x52, 0x8b, - 0x7a, 0x1f, 0x9f, 0x4f, 0x51, 0xdf, 0x63, 0x00, 0xe2, 0x51, 0x83, 0xc1, - 0x7f, 0x97, 0xa4, 0x64, 0x40, 0x9f, 0x61, 0x7d, 0x57, 0xb9, 0x8f, 0x8b, - 0xf6, 0x77, 0x8c, 0x7d, 0x78, 0x38, 0x79, 0x7c, 0x74, 0x5f, 0x98, 0x71, - 0x04, 0xc5, 0x3d, 0xba, 0x1e, 0x5a, 0xc1, 0xf4, 0x23, 0x04, 0x35, 0xea, - 0x91, 0x86, 0xc3, 0x9b, 0x08, 0xb2, 0x8d, 0x03, 0x22, 0x5e, 0x96, 0xc5, - 0xe7, 0xec, 0xac, 0x79, 0x66, 0x4a, 0xff, 0x4d, 0x83, 0xea, 0xc1, 0xc9, - 0xe5, 0xaf, 0x40, 0x3f, 0x02, 0xc9, 0x7d, 0x76, 0xa5, 0x03, 0x4e, 0xd3, - 0x5c, 0xbe, 0xd2, 0xf1, 0x15, 0x4e, 0xea, 0xea, 0x17, 0x71, 0x71, 0x07, - 0xb1, 0x6e, 0x6a, 0xf0, 0x5b, 0xe5, 0xc0, 0xee, 0xc3, 0xba, 0x96, 0x41, - 0x22, 0xe2, 0x9e, 0xb4, 0x16, 0x49, 0xaa, 0x9f, 0x8a, 0xcc, 0x27, 0x66, - 0xe9, 0x23, 0x5b, 0x29, 0x2f, 0xcd, 0x4c, 0x15, 0xb4, 0x2e, 0x21, 0xf8, - 0xf0, 0x53, 0x3b, 0xa5, 0xc0, 0x7b, 0xc3, 0xac, 0x68, 0x8e, 0x7f, 0xff, - 0x04, 0xf0, 0xdb, 0x05, 0x10, 0xdf, 0x89, 0x4b, 0x72, 0x1e, 0xe7, 0xd2, - 0x05, 0xbb, 0x44, 0x40, 0x67, 0x38, 0x64, 0xbe, 0xbe, 0xf5, 0x0c, 0x91, - 0xd6, 0x0f, 0x82, 0xd3, 0xcf, 0x34, 0xc7, 0xe9, 0xc1, 0xcf, 0xc5, 0x73, - 0x4a, 0xa2, 0x0f, 0xce, 0x29, 0xea, 0xda, 0x87, 0x8f, 0xb2, 0xbb, 0x16, - 0x50, 0x55, 0xde, 0x90, 0xa3, 0xe9, 0x9a, 0x8b, 0x00, 0xbb, 0xaa, 0xe2, - 0x5e, 0xd4, 0x58, 0xa1, 0xac, 0xaf, 0xa8, 0x50, 0x85, 0x6a, 0x22, 0x9d, - 0x55, 0x76, 0x8a, 0x39, 0x05, 0xef, 0x4e, 0x92, 0x07, 0xc0, 0xcb, 0xef, - 0x42, 0x6d, 0x63, 0x2b, 0x38, 0x55, 0x1b, 0x9b, 0x35, 0xfb, 0x7d, 0x47, - 0x31, 0x71, 0xb4, 0x9d, 0xdc, 0x9c, 0x17, 0x47, 0xac, 0x30, 0xc5, 0xfd, - 0xe7, 0x25, 0xdc, 0xe7, 0x98, 0xac, 0x02, 0xd6, 0xe6, 0x07, 0xc6, 0x9b, - 0x1c, 0x9e, 0x7d, 0x36, 0x93, 0x2f, 0x6c, 0xd2, 0xcb, 0xee, 0x26, 0x23, - 0x8f, 0x4c, 0x89, 0x5c, 0xd9, 0xbd, 0xe6, 0xa1, 0x4d, 0x90, 0x46, 0x5e, - 0xec, 0xbe, 0xd4, 0xb1, 0x1f, 0x75, 0x5b, 0x78, 0x8f, 0x83, 0x26, 0x82, - 0x4b, 0x75, 0xa0, 0xa0, 0x0f, 0x5f, 0xf5, 0xdd, 0x7f, 0xd9, 0x13, 0xef, - 0x14, 0x2e, 0xcd, 0xa4, 0xdf, 0xe3, 0x86, 0x9f, 0x8e, 0x07, 0x8d, 0x29, - 0xf6, 0xb2, 0x08, 0x3d, 0x9c, 0x43, 0x72, 0xf1, 0x51, 0x77, 0x06, 0x8e, - 0xe9, 0x83, 0x31, 0xed, 0xd0, 0x9a, 0xd0, 0x11, 0x7b, 0x2a, 0x87, 0xaf, - 0xa2, 0x1c, 0x1c, 0xa0, 0x43, 0xe9, 0x20, 0x11, 0x7f, 0xde, 0x74, 0xa3, - 0xd1, 0x10, 0x05, 0xcf, 0x8f, 0x6e, 0xf1, 0xce, 0xd4, 0x7e, 0x0e, 0x13, - 0x71, 0x7d, 0xf8, 0xc2, 0x39, 0x87, 0x60, 0x8c, 0xec, 0xdf, 0x9a, 0xa2, - 0x7e, 0x7f, 0xb5, 0x29, 0xea, 0xb7, 0xd6, 0xbf, 0x50, 0x08, 0x3f, 0x3e, - 0x7d, 0x01, 0x1d, 0xd7, 0xf4, 0x20, 0x9c, 0x65, 0x0e, 0x4e, 0xbc, 0x61, - 0xfc, 0x8c, 0x75, 0xd1, 0xf3, 0x07, 0x57, 0x80, 0x9d, 0xfe, 0xf6, 0x96, - 0x6a, 0x19, 0x86, 0x0e, 0x0f, 0x83, 0x33, 0x93, 0x9f, 0x71, 0xe3, 0x43, - 0x53, 0x82, 0x78, 0x64, 0x89, 0xe8, 0x87, 0x16, 0xdf, 0x89, 0x12, 0xca, - 0x89, 0xd8, 0x4e, 0x57, 0x7e, 0x46, 0x84, 0x0f, 0x3e, 0xb5, 0x8d, 0x71, - 0x52, 0x83, 0x14, 0x2b, 0xf7, 0xc9, 0x7a, 0x66, 0x26, 0x0f, 0x06, 0x12, - 0xe9, 0xa3, 0xce, 0x1c, 0xfd, 0xf2, 0xb9, 0x6a, 0xe5, 0xe3, 0x5c, 0xb9, - 0x03, 0x70, 0xf2, 0xc6, 0xc0, 0x3c, 0xfc, 0xe2, 0x30, 0x39, 0xd3, 0xf5, - 0xab, 0x9d, 0x95, 0x5f, 0xf5, 0x6c, 0xbf, 0x31, 0x2d, 0xf8, 0x7d, 0x64, - 0x06, 0xce, 0x8d, 0x80, 0xdf, 0x2a, 0x07, 0xff, 0x46, 0x3d, 0xfc, 0xad, - 0xdd, 0xe9, 0xef, 0xc1, 0xcc, 0xf9, 0x3d, 0x0a, 0x05, 0xd9, 0x5f, 0x85, - 0x74, 0xfb, 0x6f, 0xb6, 0x16, 0x93, 0x78, 0x99, 0x7b, 0x66, 0xbf, 0x0f, - 0x1d, 0x7a, 0xdf, 0x4e, 0xa8, 0xb9, 0x55, 0x70, 0xfb, 0xe6, 0x26, 0x07, - 0x9a, 0x89, 0xee, 0x75, 0x03, 0x46, 0x9d, 0x4b, 0xe8, 0xba, 0x92, 0x56, - 0x8f, 0x49, 0x64, 0x37, 0xd6, 0x5f, 0x79, 0x7c, 0x0b, 0x80, 0x87, 0xaf, - 0x0c, 0x44, 0x2d, 0x81, 0xde, 0xbb, 0x24, 0x82, 0x76, 0x20, 0x5a, 0x47, - 0x37, 0xb1, 0xad, 0x6b, 0x16, 0x5f, 0xb1, 0x9b, 0xeb, 0x58, 0xea, 0x4d, - 0x6d, 0x58, 0x44, 0x64, 0x68, 0xb8, 0x69, 0xd8, 0x26, 0xa5, 0xc6, 0xc6, - 0x8d, 0x2a, 0xc1, 0x3a, 0x37, 0xd5, 0xe4, 0x53, 0x97, 0x95, 0xd3, 0x3e, - 0xba, 0xad, 0xb6, 0x30, 0xe1, 0xe2, 0x60, 0xf4, 0x63, 0x64, 0x33, 0x94, - 0xe4, 0xc1, 0xe0, 0x21, 0xd4, 0x99, 0x8a, 0xea, 0x94, 0x89, 0x7b, 0xfd, - 0x78, 0x2a, 0x61, 0x00, 0x45, 0xbd, 0x4a, 0xf7, 0x61, 0x3e, 0xa9, 0x46, - 0x1c, 0xf1, 0xa1, 0x6f, 0x83, 0xa2, 0x26, 0x3c, 0x04, 0x18, 0xc0, 0xfb, - 0x9e, 0xca, 0x79, 0x30, 0x62, 0xd9, 0xf9, 0x3a, 0xae, 0xb6, 0x68, 0xb9, - 0x8e, 0xf6, 0x40, 0x51, 0xc3, 0x9d, 0x63, 0xc2, 0x01, 0x73, 0x7d, 0xe6, - 0xd7, 0x79, 0xc9, 0x21, 0xcd, 0x67, 0x13, 0x4c, 0x12, 0xf6, 0x6b, 0xd8, - 0x75, 0xe0, 0x0e, 0x9d, 0x19, 0x36, 0x88, 0x78, 0xb2, 0x63, 0x4d, 0x08, - 0x07, 0x23, 0x58, 0x3d, 0xd3, 0x03, 0x4f, 0x74, 0x83, 0x4c, 0x32, 0xb5, - 0xc8, 0x29, 0xc4, 0xb0, 0xf1, 0x5a, 0x63, 0x3d, 0x31, 0x6f, 0xec, 0x38, - 0xc8, 0xc4, 0x2e, 0x03, 0x28, 0x5f, 0xfa, 0x64, 0xb2, 0x2a, 0xb3, 0x8b, - 0x59, 0x9c, 0x52, 0x97, 0xa8, 0x3b, 0xd8, 0xbb, 0x70, 0xfc, 0x43, 0x89, - 0xb6, 0x0b, 0xf7, 0xdb, 0x73, 0x68, 0x26, 0x0e, 0xd4, 0xe6, 0x9c, 0x51, - 0xfc, 0x77, 0x99, 0x83, 0x17, 0xf6, 0xa3, 0xca, 0x3c, 0x80, 0xfa, 0xea, - 0x07, 0xbb, 0x2d, 0x90, 0x4c, 0xd2, 0xa7, 0xb8, 0x4f, 0xf0, 0xa2, 0x2f, - 0xcb, 0x77, 0x75, 0xbf, 0x06, 0xf7, 0x16, 0xd6, 0xde, 0x0e, 0xc6, 0x3a, - 0xeb, 0xe9, 0x62, 0xe5, 0x78, 0x40, 0x29, 0x33, 0x48, 0xa2, 0xc7, 0x83, - 0xfd, 0x9c, 0x68, 0x84, 0x80, 0xf3, 0xa8, 0xed, 0xbb, 0x0e, 0x48, 0x18, - 0x98, 0xf3, 0xb1, 0xbb, 0x48, 0xe9, 0xcb, 0x43, 0x4e, 0xe5, 0x8b, 0x15, - 0x33, 0xe1, 0xa1, 0xb8, 0x81, 0xb9, 0xe6, 0x25, 0xe6, 0x73, 0x5d, 0xa3, - 0xee, 0x14, 0xcc, 0xcb, 0x5a, 0xc6, 0x2e, 0xca, 0x2d, 0x16, 0xa8, 0xfa, - 0x8b, 0x23, 0x35, 0xc0, 0xfa, 0x90, 0x78, 0xdc, 0x11, 0xe8, 0x91, 0x28, - 0x15, 0x00, 0xf9, 0x41, 0x19, 0x83, 0x71, 0x30, 0xc6, 0xa0, 0x1e, 0x92, - 0x04, 0xd2, 0x0b, 0x92, 0x40, 0x7c, 0xe8, 0x5a, 0x87, 0xd5, 0x66, 0xa9, - 0x0a, 0x54, 0x08, 0x53, 0x6f, 0x09, 0x81, 0xf1, 0xe1, 0xe1, 0x4d, 0xb9, - 0x4f, 0xc5, 0xe4, 0x4f, 0xb0, 0x75, 0xf8, 0xee, 0x0c, 0xce, 0x23, 0x6d, - 0x1d, 0xde, 0xa3, 0x55, 0xd0, 0x62, 0xab, 0x9e, 0x4c, 0xac, 0x2f, 0x84, - 0x51, 0x7f, 0x5f, 0x83, 0x2e, 0xc6, 0x12, 0x61, 0x14, 0x17, 0x95, 0x45, - 0x19, 0x64, 0xc1, 0x31, 0xdf, 0xa8, 0x0e, 0x02, 0x12, 0x75, 0xc7, 0x6c, - 0x9c, 0x6d, 0x3f, 0x68, 0x55, 0x5c, 0xac, 0x12, 0xb5, 0xeb, 0x60, 0x81, - 0x23, 0xf9, 0xd9, 0x3d, 0x50, 0xbe, 0x67, 0x09, 0xc0, 0xf7, 0x2c, 0x0d, - 0xbc, 0x94, 0x30, 0xbd, 0xf6, 0x4c, 0x80, 0xba, 0xfa, 0xc2, 0x83, 0x9c, - 0x46, 0xca, 0x18, 0x04, 0x41, 0xd7, 0x06, 0x3a, 0xb2, 0xaf, 0x1b, 0x7d, - 0xe7, 0xc5, 0x00, 0xd3, 0x20, 0xbb, 0x8d, 0x59, 0x83, 0x04, 0xb1, 0x36, - 0x4d, 0x03, 0xd4, 0x70, 0x09, 0xcd, 0xac, 0x35, 0xb5, 0x3b, 0xe2, 0x5b, - 0x06, 0xb2, 0xc1, 0xeb, 0xf9, 0x3c, 0x93, 0x50, 0xb1, 0x57, 0x17, 0x67, - 0x4f, 0x41, 0x8c, 0xa8, 0xa4, 0xcc, 0xed, 0xc9, 0x17, 0xb7, 0x00, 0xfc, - 0x50, 0x15, 0xe1, 0x43, 0x1f, 0x0d, 0x38, 0x7b, 0x90, 0x91, 0xaa, 0x41, - 0x4f, 0x12, 0x00, 0xe1, 0xa9, 0x13, 0x06, 0xc7, 0xe9, 0x1a, 0x95, 0x2e, - 0xc1, 0x64, 0x73, 0x9a, 0xd2, 0xae, 0xdf, 0xd2, 0xef, 0xa8, 0x2d, 0xb3, - 0x34, 0x8d, 0x14, 0xab, 0x93, 0x3f, 0x30, 0x0f, 0x90, 0x43, 0x32, 0x72, - 0xcc, 0xa6, 0x05, 0xe8, 0xc9, 0x23, 0xda, 0x03, 0xb1, 0x4e, 0x4f, 0x7c, - 0xbc, 0x7c, 0xe6, 0x78, 0xee, 0x2b, 0x81, 0xb8, 0x0a, 0xf7, 0x9c, 0x8e, - 0x3a, 0xb5, 0x4e, 0xbe, 0xc5, 0x41, 0xca, 0x12, 0x9f, 0xa6, 0x1c, 0xd5, - 0x66, 0x8a, 0xcb, 0x02, 0xd8, 0x7d, 0x7b, 0x24, 0x45, 0x9e, 0x55, 0x81, - 0x79, 0xc5, 0xce, 0x7f, 0x19, 0xeb, 0x2f, 0x4a, 0x40, 0x7e, 0x78, 0xa7, - 0x6c, 0xa8, 0x0c, 0xf3, 0xd0, 0xd0, 0x5e, 0x5d, 0x30, 0x7d, 0x14, 0x03, - 0x8d, 0xd8, 0x8c, 0x79, 0x7f, 0x7b, 0x31, 0x79, 0x58, 0x0c, 0xba, 0x2d, - 0x70, 0x01, 0xbf, 0xf8, 0xbb, 0xea, 0xf6, 0xb4, 0xb7, 0xb1, 0x72, 0x52, - 0x75, 0x9b, 0x76, 0x69, 0x47, 0x31, 0x84, 0xe3, 0xd1, 0xb4, 0xc3, 0x07, - 0xf1, 0x2c, 0xbb, 0x88, 0xf7, 0x8d, 0x33, 0xd6, 0x55, 0x52, 0x80, 0xfa, - 0xb9, 0xe8, 0x1e, 0xd1, 0xfb, 0xcd, 0x32, 0x46, 0xfa, 0xca, 0xdd, 0xc0, - 0x4a, 0xa6, 0x8e, 0xab, 0xe0, 0x96, 0x07, 0xf3, 0x6c, 0xce, 0x97, 0x79, - 0x4d, 0xe5, 0x53, 0xe9, 0x98, 0xbd, 0xe1, 0xdf, 0x3f, 0x0e, 0x7f, 0xab, - 0xc3, 0xcb, 0x2f, 0xd5, 0x9a, 0x91, 0x6f, 0xc3, 0x7b, 0x34, 0x89, 0x06, - 0x72, 0xa4, 0xd5, 0x1b, 0x1e, 0xa8, 0x04, 0xa5, 0x38, 0xc0, 0xf3, 0x5e, - 0x3c, 0xee, 0xa5, 0x4f, 0xe1, 0x96, 0xe1, 0x28, 0x84, 0x75, 0xb5, 0xb0, - 0x2d, 0x94, 0x66, 0x0d, 0x20, 0x31, 0xd8, 0xf3, 0x6b, 0xdb, 0xe3, 0x62, - 0xf9, 0x9d, 0x0b, 0x4e, 0xb6, 0x7d, 0xd4, 0x01, 0xe8, 0xa8, 0x08, 0x74, - 0x95, 0xde, 0xb5, 0x6b, 0x4e, 0x18, 0xee, 0xd4, 0xdd, 0x2a, 0x70, 0x1e, - 0xf7, 0x25, 0x60, 0xce, 0x2d, 0xa3, 0x9f, 0xf1, 0x15, 0x84, 0xda, 0x9f, - 0x54, 0x71, 0xbe, 0xdf, 0x0f, 0xfd, 0xb2, 0x35, 0x0d, 0x7f, 0x62, 0x65, - 0xef, 0x0b, 0x42, 0x06, 0xd6, 0x81, 0x6b, 0x12, 0x40, 0x6f, 0xef, 0x22, - 0x17, 0x1d, 0xc9, 0x00, 0x2d, 0xef, 0xe1, 0xe5, 0x76, 0xd0, 0xa8, 0xe8, - 0xc1, 0x40, 0xb7, 0xda, 0x8f, 0xa0, 0xfc, 0xfa, 0xee, 0x8c, 0xdb, 0x88, - 0xbc, 0xed, 0x13, 0xd9, 0x74, 0x70, 0x8a, 0xe5, 0x88, 0x7c, 0x27, 0xa3, - 0x2f, 0xbf, 0x08, 0x55, 0xe4, 0xaa, 0x1b, 0x3e, 0xbd, 0x48, 0x8d, 0x31, - 0x3e, 0x4a, 0x0a, 0xed, 0x81, 0xe4, 0xc5, 0x77, 0xc8, 0x01, 0x30, 0x59, - 0xa4, 0x3e, 0x4d, 0xce, 0xd8, 0xa8, 0xff, 0x6b, 0x51, 0xc6, 0xaa, 0x21, - 0x2f, 0x6d, 0xe4, 0x5e, 0x0e, 0x1a, 0xa8, 0x3d, 0x2a, 0xc1, 0x03, 0xdb, - 0xe3, 0x74, 0x74, 0xd2, 0x62, 0xc5, 0xc3, 0x4e, 0x0c, 0x78, 0x4d, 0x58, - 0xae, 0x16, 0x7c, 0x7b, 0x66, 0xaf, 0x25, 0xdf, 0x06, 0xcd, 0xd3, 0xd3, - 0xff, 0xfe, 0xc3, 0x2b, 0x6e, 0xb8, 0xd7, 0x83, 0x64, 0x63, 0xb7, 0xc0, - 0x0c, 0xee, 0xfc, 0x28, 0xd5, 0xc6, 0xac, 0xfb, 0xb0, 0x04, 0x52, 0xda, - 0x08, 0xf3, 0x7a, 0x78, 0x1c, 0x78, 0x29, 0x21, 0x14, 0x48, 0x90, 0x2b, - 0x4e, 0x5a, 0x5d, 0x15, 0x57, 0x7f, 0x38, 0x49, 0x71, 0x8d, 0x91, 0x33, - 0x84, 0x86, 0x4b, 0x30, 0x7b, 0x05, 0x5d, 0x7b, 0x92, 0xc5, 0xec, 0xc9, - 0xe1, 0xa6, 0xb5, 0xd1, 0xb1, 0xc9, 0xcb, 0xc6, 0x74, 0xe2, 0x6b, 0xc1, - 0xae, 0x68, 0xdf, 0xe8, 0xaa, 0xc5, 0xec, 0x4c, 0x3e, 0xc2, 0x9d, 0x52, - 0x44, 0x33, 0xf1, 0x11, 0x0f, 0x00, 0xce, 0x9f, 0x5b, 0xf5, 0x2f, 0x2f, - 0x6e, 0xe2, 0x11, 0x89, 0x58, 0x8d, 0x2f, 0x2b, 0x01, 0xe6, 0xfe, 0xcc, - 0x6a, 0x25, 0x6e, 0x8c, 0x30, 0xb8, 0xe1, 0x83, 0x0d, 0x4a, 0xe6, 0x3c, - 0xfa, 0x5f, 0xf6, 0x38, 0x85, 0xf2, 0x06, 0xee, 0x2d, 0xdd, 0x75, 0xd8, - 0x31, 0xe9, 0x0e, 0x53, 0x17, 0xd9, 0x17, 0x0d, 0x15, 0x0b, 0xdb, 0x85, - 0xd6, 0xd6, 0x8d, 0xe8, 0x5b, 0x74, 0x08, 0x4d, 0x97, 0x68, 0x66, 0x3c, - 0x79, 0xcf, 0x99, 0xba, 0x01, 0xa8, 0xfe, 0xfe, 0x52, 0x87, 0x57, 0xd8, - 0x49, 0x96, 0xfc, 0x9b, 0xd5, 0x85, 0x17, 0x3c, 0xf7, 0x45, 0x09, 0x07, - 0x48, 0xb2, 0x5e, 0x81, 0x42, 0x84, 0x2f, 0x7d, 0x0f, 0xa1, 0x5a, 0xac, - 0x61, 0xe8, 0x05, 0xe3, 0xf9, 0x27, 0x6e, 0x02, 0xa5, 0xed, 0x4e, 0xe9, - 0x16, 0x44, 0xe5, 0xbe, 0xe1, 0xe8, 0xeb, 0x46, 0x50, 0x4f, 0xb7, 0x92, - 0x45, 0xaf, 0x79, 0xe2, 0x86, 0x41, 0xe2, 0xa4, 0xd2, 0x2c, 0xfc, 0x40, - 0x33, 0x13, 0x05, 0xee, 0x7d, 0xb2, 0x53, 0xda, 0xa8, 0xef, 0xcd, 0xab, - 0xa5, 0x98, 0x70, 0xa2, 0xe5, 0xb8, 0x84, 0x75, 0x55, 0x33, 0x4a, 0xba, - 0xa5, 0x84, 0x47, 0x09, 0xc1, 0x1c, 0xaf, 0x61, 0xd8, 0x02, 0x71, 0x7c, - 0xdc, 0xde, 0xd4, 0x30, 0x34, 0xe3, 0x44, 0xe7, 0xa9, 0x33, 0xb0, 0x69, - 0x63, 0x76, 0x47, 0xd1, 0x8b, 0xe3, 0x57, 0x0a, 0xce, 0x15, 0xed, 0x81, - 0x7e, 0x2f, 0x8e, 0x55, 0x5b, 0xb7, 0x45, 0x93, 0x56, 0x13, 0xde, 0x6f, - 0x6c, 0xa5, 0x9b, 0xb0, 0x4b, 0x6c, 0x9b, 0xe4, 0x35, 0x7d, 0x65, 0xf6, - 0xda, 0xb0, 0xb9, 0xdc, 0xd6, 0x41, 0x85, 0x80, 0x23, 0x5e, 0x0c, 0x3f, - 0x44, 0x82, 0x2d, 0x9b, 0x90, 0xb4, 0x97, 0xf0, 0xff, 0x82, 0xde, 0x77, - 0x82, 0x05, 0x2a, 0x18, 0xb6, 0xb9, 0x31, 0x0a, 0xc0, 0x47, 0xe2, 0xcd, - 0xd5, 0x9e, 0x44, 0x17, 0xb8, 0xf9, 0x13, 0x5c, 0x15, 0x85, 0x57, 0x32, - 0x72, 0xa1, 0x78, 0xa5, 0x22, 0x45, 0xdf, 0x10, 0xdd, 0xa6, 0x21, 0xe8, - 0x6e, 0x27, 0x70, 0xd1, 0x6d, 0x73, 0x2d, 0x29, 0x40, 0x78, 0xdb, 0xc5, - 0xd3, 0xe7, 0x2a, 0x6e, 0x01, 0xe3, 0xb4, 0x68, 0xe2, 0x52, 0xee, 0x34, - 0x4a, 0xb2, 0x71, 0xc6, 0x9d, 0xe3, 0x05, 0x19, 0xac, 0x58, 0x38, 0xac, - 0xd6, 0x5e, 0xc6, 0xb8, 0xfd, 0xca, 0x10, 0x98, 0x1c, 0xad, 0x47, 0x83, - 0x46, 0xed, 0xda, 0x58, 0xb1, 0xb7, 0x2d, 0x69, 0xb9, 0x36, 0xe1, 0xe5, - 0x8f, 0xa3, 0xc8, 0xf1, 0xb8, 0x38, 0x09, 0xdf, 0xde, 0x9d, 0x6d, 0x1b, - 0xef, 0x4c, 0x01, 0x1c, 0x1e, 0x20, 0x8f, 0xbc, 0x24, 0x2d, 0x23, 0x1b, - 0x19, 0xb1, 0x0c, 0x84, 0xc3, 0xce, 0x78, 0x34, 0xc7, 0x10, 0x04, 0x08, - 0x1f, 0x5b, 0xf0, 0x8a, 0xa8, 0x77, 0x0e, 0x82, 0x0c, 0x72, 0xc7, 0xb1, - 0x97, 0xf5, 0x90, 0x83, 0xbb, 0x9e, 0xcf, 0x0a, 0x58, 0xdc, 0x01, 0x14, - 0x37, 0xf9, 0xf1, 0x63, 0xb0, 0xe3, 0xb2, 0xe0, 0xf5, 0xc7, 0x0b, 0x53, - 0x03, 0x2b, 0x3c, 0x77, 0x6f, 0xe8, 0x99, 0x66, 0xee, 0x96, 0x18, 0x34, - 0xe1, 0x1c, 0x6a, 0x6e, 0x08, 0xdd, 0x06, 0x7d, 0x9e, 0xa7, 0xaa, 0xab, - 0x0d, 0xfb, 0xa0, 0x34, 0xd7, 0x27, 0x87, 0xc8, 0xa4, 0x35, 0x9c, 0x5e, - 0x0e, 0xde, 0xa7, 0x5d, 0xb3, 0x72, 0x90, 0x18, 0x90, 0x1d, 0xff, 0xa6, - 0xc0, 0xb5, 0x85, 0xec, 0x75, 0xae, 0x4a, 0xf4, 0xdb, 0xdb, 0xe7, 0xbb, - 0xda, 0x14, 0x71, 0x68, 0x08, 0xe8, 0xd9, 0xe6, 0xb1, 0xde, 0x03, 0x10, - 0xc7, 0x3e, 0x8a, 0x28, 0x64, 0x28, 0x32, 0x6d, 0x96, 0x0d, 0x96, 0x8a, - 0x64, 0x08, 0xa5, 0xb7, 0x82, 0x90, 0xd7, 0xb5, 0x84, 0xd4, 0xb6, 0x1d, - 0xa9, 0x7b, 0xda, 0x87, 0x9a, 0x79, 0x7f, 0xd6, 0x66, 0x2f, 0x36, 0xca, - 0x85, 0xd9, 0x53, 0x3b, 0x27, 0x0f, 0xb2, 0xf6, 0x00, 0x5c, 0x95, 0x5c, - 0xdf, 0x17, 0xa6, 0xd6, 0x86, 0xd6, 0x58, 0x30, 0xa1, 0xe2, 0x8d, 0xe1, - 0x14, 0x95, 0x66, 0x7d, 0x3b, 0xe1, 0x89, 0x37, 0xa2, 0x5c, 0x2a, 0xe8, - 0x16, 0x2e, 0x68, 0xb1, 0xad, 0x5a, 0xac, 0x25, 0x57, 0x9a, 0x97, 0x32, - 0x78, 0xbe, 0xe1, 0x6a, 0x43, 0x05, 0x9c, 0x8d, 0x07, 0xac, 0xd6, 0xe1, - 0x7f, 0xd2, 0x09, 0x39, 0x87, 0x4a, 0xb7, 0x2e, 0xa4, 0x84, 0x5b, 0xd7, - 0xf2, 0x45, 0xbc, 0x9d, 0xf7, 0x77, 0x74, 0x13, 0x7b, 0x9d, 0xc2, 0x19, - 0xea, 0x2b, 0xec, 0xd6, 0x49, 0xd1, 0xe4, 0x22, 0x07, 0x76, 0xec, 0x1d, - 0x3a, 0x7c, 0x27, 0x49, 0x99, 0x84, 0xd5, 0x01, 0x61, 0x72, 0xec, 0xcd, - 0x1d, 0xb3, 0xfa, 0xe9, 0x08, 0xb1, 0x63, 0x1f, 0x98, 0x73, 0x0d, 0x29, - 0x90, 0x1f, 0xeb, 0xa7, 0x15, 0xfb, 0x6f, 0x56, 0xb1, 0x51, 0x7b, 0xb9, - 0x6e, 0x3d, 0x35, 0x6e, 0x73, 0xcc, 0xef, 0xf0, 0x58, 0x2f, 0xa3, 0x09, - 0xd5, 0x3f, 0x89, 0x78, 0x13, 0x23, 0x0a, 0x9f, 0xb9, 0xde, 0x51, 0xe9, - 0x98, 0x33, 0x38, 0xd5, 0x4e, 0xf6, 0xa4, 0xff, 0x5d, 0xbb, 0x54, 0x6f, - 0xe5, 0x52, 0xb1, 0x09, 0x00, 0xa1, 0x8f, 0x41, 0xbe, 0xd1, 0x84, 0x27, - 0x2f, 0xce, 0x37, 0xe6, 0xff, 0x8e, 0x6c, 0x0c, 0x7c, 0xd9, 0x5c, 0x5e, - 0x39, 0xff, 0x1e, 0xc2, 0xda, 0x6b, 0xcc, 0x9b, 0xe3, 0xa1, 0xf7, 0x6d, - 0x86, 0x5e, 0x93, 0x3b, 0x4c, 0x4b, 0xcc, 0x3f, 0x77, 0x9c, 0xad, 0x08, - 0x98, 0x65, 0x3e, 0x9c, 0xf4, 0x35, 0x0a, 0xac, 0x86, 0x32, 0xc2, 0xdf, - 0x0a, 0x6b, 0xe2, 0xa1, 0x76, 0x2a, 0xfd, 0x44, 0x1a, 0xf3, 0x8f, 0xc4, - 0x36, 0xa0, 0xd3, 0x46, 0xb1, 0xdf, 0xb4, 0x54, 0x16, 0x7b, 0x3d, 0xf2, - 0xae, 0xa0, 0xcf, 0xc9, 0xc9, 0x50, 0x41, 0x4d, 0xdd, 0x59, 0x97, 0x61, - 0x84, 0xdd, 0xe3, 0x39, 0xf5, 0x61, 0x9e, 0x38, 0x9d, 0x9e, 0xee, 0xef, - 0x1c, 0xfe, 0x1f, 0x79, 0x1d, 0x1c, 0x36, 0x37, 0xef, 0xb4, 0x5a, 0x31, - 0xe6, 0xca, 0x2f, 0x56, 0x2a, 0xd0, 0x4b, 0xde, 0x5c, 0xe0, 0x3c, 0xe4, - 0x2d, 0x45, 0x64, 0xb8, 0x49, 0x89, 0x16, 0x78, 0x89, 0x69, 0xb5, 0x72, - 0x50, 0x72, 0xd4, 0x62, 0xb0, 0xa9, 0xa1, 0xbb, 0xbe, 0xc1, 0x54, 0x69, - 0x6a, 0xcf, 0xad, 0x00, 0x95, 0x32, 0x93, 0x96, 0xe6, 0xa0, 0xf4, 0xe0, - 0x2d, 0xa3, 0x0c, 0x93, 0xa6, 0x0b, 0xde, 0xb9, 0x97, 0xda, 0xad, 0xf8, - 0xd5, 0x3c, 0xa1, 0x4d, 0xd4, 0x87, 0x7e, 0xe8, 0x94, 0x68, 0x4b, 0x66, - 0xe4, 0x54, 0x28, 0xc5, 0x1b, 0x87, 0x8b, 0x19, 0x7b, 0xc8, 0x3a, 0x7b, - 0x27, 0x6d, 0xf0, 0xde, 0x0d, 0xcc, 0x28, 0x3d, 0x5c, 0x95, 0x7b, 0x58, - 0xb3, 0x50, 0xff, 0x56, 0x70, 0xf9, 0xca, 0x51, 0x2c, 0xf4, 0x38, 0xac, - 0xeb, 0x3c, 0xc6, 0xb7, 0x79, 0x8e, 0x31, 0xb5, 0x9d, 0xfb, 0x63, 0x6c, - 0x86, 0x78, 0x50, 0x2b, 0x61, 0xe2, 0xf0, 0x8d, 0x10, 0x7e, 0x25, 0xcc, - 0xfd, 0x56, 0x61, 0xce, 0x6a, 0x91, 0x26, 0xc4, 0x00, 0xfc, 0xa8, 0xdf, - 0xe3, 0x77, 0x70, 0x82, 0xe6, 0xf3, 0x8b, 0x83, 0x53, 0x72, 0xfa, 0x9b, - 0xf7, 0x91, 0xb2, 0xa3, 0x23, 0x7c, 0xeb, 0xd3, 0xfe, 0xac, 0xb2, 0x5a, - 0xdf, 0xfc, 0x02, 0x31, 0x9b, 0x97, 0xb9, 0x40, 0x35, 0x1e, 0xed, 0x6f, - 0xc0, 0x9a, 0xfa, 0x38, 0x70, 0xb1, 0x61, 0xf4, 0x4b, 0x44, 0x98, 0xaa, - 0xf2, 0xc0, 0xbe, 0x19, 0xdf, 0x37, 0xef, 0x91, 0x79, 0xba, 0x78, 0xbc, - 0xeb, 0xa2, 0xd4, 0xa8, 0xfd, 0x49, 0x28, 0x2a, 0xc6, 0x05, 0xe7, 0x79, - 0xd4, 0xbb, 0xff, 0xa4, 0x22, 0x34, 0x0b, 0xc3, 0x28, 0x79, 0x80, 0xf0, - 0xfb, 0x1e, 0xe5, 0xb3, 0xb1, 0xa8, 0x1c, 0xe4, 0x71, 0x93, 0x3b, 0x7e, - 0x33, 0xb1, 0x8e, 0xf7, 0x24, 0x3b, 0x6e, 0x0f, 0xe6, 0xe5, 0x97, 0xa4, - 0xc0, 0xdd, 0xf0, 0xaa, 0xad, 0x44, 0x17, 0xb1, 0x7a, 0x05, 0xd2, 0x99, - 0xda, 0xb9, 0x90, 0x0d, 0x6b, 0x9f, 0xc2, 0x09, 0xd7, 0x53, 0x0c, 0x8d, - 0x55, 0xa2, 0x5d, 0x32, 0x1c, 0x87, 0x9e, 0x8b, 0x9f, 0xda, 0x9d, 0x20, - 0xb2, 0xa3, 0x4d, 0x51, 0x46, 0x0f, 0xa3, 0xde, 0xef, 0x1b, 0x2f, 0xf7, - 0xfb, 0x6a, 0x1c, 0x97, 0x2b, 0x7f, 0x6e, 0xb1, 0x84, 0x73, 0x9f, 0x55, - 0x0b, 0x2f, 0xd8, 0xaf, 0x3e, 0x38, 0x0b, 0x90, 0xc5, 0x1a, 0x3e, 0xf2, - 0x36, 0x07, 0xc2, 0xa5, 0xd9, 0x9b, 0x33, 0x85, 0x4f, 0x1f, 0x5d, 0x98, - 0x38, 0x16, 0x41, 0xab, 0x83, 0xd3, 0xd1, 0xb1, 0x5e, 0x29, 0x04, 0x7a, - 0xa4, 0x5d, 0x8f, 0xbc, 0x88, 0xc3, 0x7e, 0xa7, 0x9f, 0xe4, 0x77, 0x9e, - 0x87, 0x0c, 0x3b, 0x1b, 0x5f, 0x4f, 0x15, 0xf6, 0xa4, 0x3d, 0xce, 0xf8, - 0x82, 0xee, 0x2e, 0x22, 0x59, 0xde, 0x47, 0xca, 0xcb, 0x5f, 0x0b, 0xde, - 0xfe, 0xaf, 0xe5, 0x6b, 0x96, 0x73, 0xfd, 0xcc, 0xb4, 0x7c, 0xc6, 0x12, - 0x17, 0x17, 0x60, 0xf1, 0xd4, 0x4a, 0x27, 0xe1, 0xc8, 0xd5, 0x0f, 0xc1, - 0xc9, 0xf3, 0xe0, 0x99, 0x4d, 0xd0, 0xf4, 0xaf, 0x8e, 0x25, 0x5e, 0xc7, - 0xfe, 0xe1, 0xaf, 0x5a, 0x8a, 0x3a, 0xfa, 0x36, 0xde, 0x2f, 0x15, 0xa3, - 0x0a, 0x4c, 0x63, 0x77, 0x4d, 0x52, 0x38, 0xf3, 0xe0, 0x2f, 0x30, 0x9e, - 0x7a, 0xda, 0x87, 0x3d, 0x18, 0x7f, 0x85, 0x57, 0x5c, 0x5a, 0xa2, 0x26, - 0xbc, 0x3d, 0xf4, 0x78, 0x5e, 0x56, 0xcc, 0x18, 0x49, 0x92, 0xf6, 0xc8, - 0x80, 0x1e, 0x7d, 0x5f, 0x39, 0x70, 0xd9, 0x9c, 0xa0, 0x1b, 0x31, 0x1b, - 0xdb, 0x25, 0xff, 0x3a, 0x76, 0x76, 0x36, 0xad, 0x5e, 0xf9, 0x20, 0xe9, - 0x30, 0x52, 0xa8, 0x26, 0x7f, 0xa7, 0xa6, 0x90, 0x4b, 0x95, 0xc0, 0x19, - 0xfa, 0xb1, 0xf7, 0x63, 0x35, 0x87, 0x9b, 0xb4, 0xbf, 0x5d, 0xe9, 0xbb, - 0x6e, 0x31, 0xe2, 0x20, 0x71, 0x37, 0x74, 0xbc, 0xdc, 0x0d, 0x05, 0x97, - 0x31, 0x23, 0x1f, 0xa3, 0xae, 0xae, 0xd6, 0x36, 0xad, 0x0b, 0xeb, 0xab, - 0xbe, 0x59, 0x85, 0x4d, 0xcd, 0x82, 0xce, 0xae, 0xba, 0x2a, 0x7e, 0x3e, - 0x52, 0x5c, 0xe8, 0x9a, 0x14, 0xab, 0xfb, 0xa7, 0x82, 0x79, 0xe9, 0x60, - 0x8b, 0xf8, 0x1d, 0xf5, 0x14, 0xa8, 0xcf, 0xb3, 0xc6, 0x9f, 0x9d, 0x45, - 0x97, 0x09, 0xc1, 0x97, 0xe8, 0xa4, 0xaa, 0xd0, 0xe7, 0x4c, 0x4d, 0x55, - 0x19, 0xe3, 0xab, 0x57, 0x74, 0x16, 0x7c, 0xeb, 0x43, 0xec, 0x16, 0x95, - 0x6f, 0x3d, 0xa3, 0xeb, 0x5b, 0xcf, 0x4b, 0xf1, 0x14, 0x3d, 0x15, 0xe6, - 0xd8, 0xfc, 0x3f, 0x8e, 0xae, 0x0d, 0x7a, 0x64, 0x3e, 0x66, 0x04, 0xac, - 0xf9, 0xb5, 0xb5, 0x7e, 0x61, 0x43, 0xeb, 0x7b, 0x04, 0x7e, 0xb5, 0x26, - 0xb4, 0xa5, 0x9a, 0x19, 0x36, 0x49, 0xc3, 0xf2, 0x97, 0x33, 0x1c, 0x7c, - 0x88, 0xd6, 0x68, 0x97, 0x7b, 0x5f, 0x5b, 0xfa, 0x9d, 0x84, 0xb1, 0x5d, - 0xd8, 0x0d, 0x18, 0x13, 0x52, 0xf2, 0xb5, 0x75, 0xd8, 0x5c, 0x6e, 0x7f, - 0x5f, 0xd2, 0xdb, 0xee, 0xf3, 0x92, 0x3d, 0xb0, 0x3e, 0x13, 0x31, 0x7c, - 0x8f, 0x3c, 0x18, 0x03, 0xec, 0xdb, 0x0f, 0x84, 0x35, 0x65, 0xae, 0xce, - 0x33, 0xf0, 0x19, 0x68, 0xf1, 0x45, 0x3a, 0xe7, 0xdc, 0xb5, 0xf6, 0x2b, - 0x80, 0xb4, 0x61, 0x21, 0xe4, 0x8d, 0x58, 0xf3, 0x98, 0xf1, 0xce, 0xa3, - 0x07, 0xca, 0xdf, 0xc7, 0x00, 0x1d, 0x72, 0x4b, 0x76, 0x06, 0xeb, 0x9e, - 0xe3, 0xe3, 0xc6, 0xc3, 0x7c, 0x46, 0xf9, 0xd8, 0xb3, 0x01, 0xeb, 0x66, - 0x79, 0x40, 0x70, 0x7c, 0x3c, 0x70, 0xa4, 0x75, 0x7c, 0x70, 0x9d, 0x74, - 0xc4, 0xa6, 0x61, 0xbc, 0xbc, 0x17, 0x1c, 0x07, 0xd2, 0x80, 0xca, 0x75, - 0x72, 0xd2, 0x9c, 0x21, 0xe6, 0xed, 0xe1, 0x3f, 0xf4, 0xa6, 0x90, 0x90, - 0x2e, 0xd4, 0x11, 0xfa, 0xe7, 0x00, 0xc6, 0x15, 0x37, 0x63, 0x18, 0xb1, - 0x09, 0x2e, 0x13, 0xfd, 0xb2, 0xd2, 0x9b, 0xc9, 0xdf, 0x5e, 0x07, 0xc9, - 0xe8, 0x67, 0x53, 0x0d, 0xa9, 0x79, 0x3e, 0x26, 0x8f, 0x09, 0x2f, 0x64, - 0x81, 0x68, 0xa4, 0x79, 0x2c, 0x11, 0x68, 0x7c, 0xf8, 0x9a, 0x55, 0x7d, - 0x71, 0xc3, 0xf9, 0x4d, 0xca, 0xd1, 0xdf, 0x08, 0x0e, 0x54, 0xe1, 0x16, - 0x64, 0x54, 0x48, 0x6a, 0xb6, 0xf2, 0x54, 0x13, 0xaa, 0x61, 0x3e, 0x58, - 0x44, 0x8f, 0xb8, 0x4d, 0x68, 0xe8, 0xa0, 0xf6, 0x71, 0x43, 0xbb, 0x0a, - 0xf5, 0xb1, 0xf3, 0x38, 0xec, 0xf8, 0xf8, 0xc6, 0x53, 0x5f, 0xa0, 0x50, - 0x70, 0xe4, 0x94, 0xb5, 0xc1, 0xd0, 0xe2, 0x99, 0x74, 0x72, 0x75, 0x76, - 0x64, 0x2e, 0x23, 0xe5, 0x2f, 0x1e, 0x75, 0x90, 0x02, 0x7c, 0xf5, 0xbb, - 0xd0, 0xa4, 0xe5, 0x5f, 0xfb, 0x2a, 0x83, 0xbe, 0x0b, 0x4a, 0x24, 0x76, - 0x51, 0x4f, 0xad, 0xcd, 0xe0, 0xf0, 0x1d, 0x5f, 0x36, 0x0d, 0x00, 0x81, - 0xa3, 0x2f, 0x65, 0xcd, 0xd7, 0x07, 0x52, 0x13, 0xb3, 0x5c, 0x97, 0xef, - 0x46, 0x1d, 0x56, 0xe5, 0x7b, 0x08, 0x66, 0x3e, 0xd2, 0x37, 0x89, 0x47, - 0xc7, 0xe8, 0xa7, 0xe4, 0x4e, 0x52, 0x6d, 0xbd, 0x78, 0xd4, 0x88, 0x9f, - 0x3e, 0x39, 0xbb, 0x79, 0xe1, 0x4d, 0xcf, 0xac, 0xc0, 0x47, 0x9b, 0x27, - 0x2f, 0x1a, 0xea, 0x80, 0xd9, 0x19, 0xf0, 0xcd, 0x04, 0x90, 0x5d, 0xa6, - 0xd6, 0xe5, 0x85, 0xf6, 0x88, 0x91, 0x4a, 0xdf, 0x2f, 0x4c, 0xac, 0x05, - 0x04, 0x3b, 0x37, 0xb8, 0x57, 0xf8, 0xdb, 0x39, 0xf2, 0xc8, 0x8c, 0xaa, - 0xc4, 0xb4, 0xf4, 0x33, 0x4e, 0x5f, 0x34, 0x94, 0xe2, 0x2f, 0xea, 0x9f, - 0x01, 0xa8, 0x91, 0x7d, 0x69, 0xed, 0x92, 0x80, 0xde, 0x70, 0x91, 0xd2, - 0xcc, 0x0d, 0x87, 0x3f, 0x44, 0x3d, 0xf2, 0x2f, 0x1d, 0x04, 0x01, 0xe0, - 0x29, 0x23, 0x02, 0x8e, 0x7b, 0xec, 0x16, 0xa6, 0xc9, 0xcf, 0xba, 0x19, - 0xba, 0xf3, 0x36, 0x90, 0x01, 0x5e, 0xcb, 0xc7, 0xe1, 0xda, 0x67, 0x3a, - 0x74, 0xda, 0x96, 0x0c, 0xf6, 0xbc, 0x1c, 0x4e, 0x5a, 0x47, 0x02, 0x6e, - 0x4f, 0xa4, 0x06, 0x7b, 0x3a, 0x5a, 0xfc, 0x5b, 0xf0, 0x56, 0xd5, 0xc3, - 0x03, 0xf1, 0xde, 0x69, 0xf2, 0xc2, 0x98, 0xfc, 0xdc, 0xf8, 0xa8, 0xdb, - 0x77, 0x23, 0x4f, 0x9a, 0x56, 0xe9, 0x71, 0xd2, 0x33, 0x2b, 0x0e, 0xe4, - 0x6c, 0xe4, 0xb2, 0x90, 0x83, 0x45, 0x28, 0xcd, 0xfe, 0x9b, 0x07, 0x3a, - 0x86, 0x40, 0x32, 0x4d, 0xba, 0xeb, 0x4f, 0x50, 0xfc, 0xab, 0xc6, 0x90, - 0x06, 0x0c, 0xc6, 0x70, 0x2f, 0x18, 0x51, 0x68, 0x8c, 0xe7, 0x60, 0xfb, - 0xdf, 0x65, 0xd0, 0x15, 0x0c, 0x67, 0x75, 0x8c, 0x05, 0xce, 0x9e, 0x4d, - 0xaa, 0xe7, 0x93, 0x5f, 0xfa, 0x75, 0xe0, 0xb1, 0x61, 0xdd, 0x05, 0x54, - 0x42, 0x88, 0x1f, 0x71, 0x10, 0xe5, 0x53, 0x71, 0x8e, 0x29, 0x76, 0xe8, - 0x64, 0x92, 0xdb, 0xf9, 0xf8, 0x48, 0x6d, 0x8b, 0x9c, 0x0f, 0x01, 0x96, - 0xe4, 0xa1, 0x40, 0x22, 0xdb, 0x5f, 0xc9, 0xc3, 0xaa, 0x43, 0x0c, 0x70, - 0x1d, 0x4a, 0x8c, 0xf1, 0x8e, 0x77, 0x9a, 0xd6, 0xf8, 0x5d, 0xd7, 0x96, - 0x01, 0xc6, 0xb0, 0x39, 0x14, 0x4a, 0x6d, 0x23, 0x53, 0xed, 0x2f, 0xa6, - 0xe9, 0xfb, 0xcd, 0x0b, 0x6d, 0x40, 0x5c, 0x4f, 0x02, 0x28, 0xde, 0x4f, - 0x4d, 0xac, 0x7f, 0xad, 0xd1, 0x65, 0x95, 0x1b, 0x8e, 0x8c, 0xe7, 0x41, - 0x75, 0xbf, 0x24, 0x35, 0x31, 0x32, 0x72, 0x36, 0xab, 0x30, 0x99, 0xcd, - 0x73, 0xbd, 0xc7, 0xa0, 0x7b, 0xd5, 0x78, 0x94, 0x81, 0x1e, 0x66, 0xd7, - 0x0e, 0x80, 0xfc, 0x56, 0x8b, 0x40, 0xc6, 0x23, 0x4b, 0x67, 0x1e, 0xef, - 0x07, 0xa1, 0x43, 0x24, 0x1d, 0x8b, 0xd9, 0x66, 0xbc, 0x69, 0x16, 0xd6, - 0x29, 0x9b, 0x6d, 0xe8, 0x94, 0xcd, 0xc8, 0xb7, 0xe5, 0x67, 0x7d, 0xab, - 0xf6, 0xdc, 0x8c, 0xd4, 0xbd, 0x8f, 0xb1, 0x7b, 0xd1, 0x1d, 0x33, 0xf6, - 0xe8, 0xc8, 0x97, 0xe4, 0xd7, 0x8a, 0xbc, 0x48, 0xa1, 0x48, 0x60, 0x0a, - 0xaa, 0xb5, 0x03, 0x61, 0x93, 0xf5, 0xf1, 0x58, 0x0e, 0xd7, 0x44, 0xdc, - 0xc6, 0x85, 0x26, 0x67, 0xce, 0x0a, 0xdd, 0x09, 0x2a, 0x3a, 0xf3, 0xd9, - 0xa0, 0xb5, 0xd3, 0x55, 0x61, 0xb1, 0x07, 0xc3, 0xa9, 0x25, 0x17, 0x0f, - 0xfc, 0xfe, 0x1b, 0xde, 0x0f, 0x40, 0x05, 0x92, 0xd0, 0x97, 0x2a, 0xf2, - 0x28, 0xfe, 0x88, 0x82, 0xcb, 0x78, 0xa3, 0xc8, 0x87, 0x23, 0x40, 0x37, - 0xa7, 0xb3, 0x68, 0x9e, 0xd7, 0x43, 0xf9, 0x6f, 0xb3, 0xe4, 0xe2, 0x9f, - 0xab, 0x4b, 0x5d, 0x78, 0x9c, 0x40, 0xe6, 0xe0, 0x64, 0x8a, 0xe0, 0x79, - 0x74, 0x0e, 0xb4, 0x75, 0x72, 0x64, 0x3c, 0xa0, 0xb9, 0x8f, 0x7a, 0x8e, - 0x6c, 0xd1, 0x99, 0x38, 0xbd, 0x71, 0x00, 0xe2, 0xbf, 0xaf, 0xea, 0x7c, - 0x96, 0x38, 0x17, 0xc7, 0x5b, 0x8a, 0xee, 0x63, 0xeb, 0xce, 0xa5, 0x06, - 0xeb, 0x81, 0x54, 0xad, 0x54, 0xce, 0x30, 0x3f, 0xe3, 0xc7, 0x8f, 0xfb, - 0xff, 0xa8, 0xd0, 0xbf, 0x68, 0x78, 0xcf, 0x89, 0x13, 0x89, 0x7e, 0x66, - 0xd9, 0x30, 0xe5, 0xe9, 0x65, 0xa1, 0x1c, 0xb0, 0x2c, 0x0c, 0xc4, 0x77, - 0xf3, 0x71, 0xd9, 0x5e, 0x8e, 0x50, 0xed, 0xa7, 0x0a, 0x36, 0xfe, 0xc6, - 0x70, 0xb5, 0xbe, 0x1c, 0xc3, 0xe0, 0x72, 0x24, 0xd5, 0xa6, 0x43, 0xb1, - 0xc6, 0xf5, 0x78, 0x43, 0x7b, 0x90, 0xa8, 0x50, 0x87, 0x3a, 0xfb, 0x85, - 0xd9, 0x78, 0xb2, 0xdb, 0xce, 0xbc, 0x78, 0xeb, 0xab, 0xe7, 0x94, 0x6c, - 0xac, 0x49, 0xfa, 0x92, 0x08, 0x20, 0x83, 0x2a, 0x43, 0xbf, 0x10, 0x63, - 0x2c, 0x0f, 0x2b, 0x8f, 0x5a, 0x57, 0x53, 0xb7, 0x01, 0xf5, 0x26, 0x38, - 0x5e, 0x3a, 0xd6, 0xe1, 0x88, 0xed, 0x13, 0x57, 0x44, 0x98, 0x5b, 0xa5, - 0xc8, 0x0b, 0x7b, 0x16, 0x33, 0x5b, 0x9d, 0x37, 0xa6, 0xab, 0xf4, 0x05, - 0xeb, 0x15, 0x4c, 0xcb, 0xd6, 0x5f, 0x9a, 0x07, 0xd7, 0x6e, 0xca, 0x83, - 0xfb, 0x53, 0x1a, 0x66, 0xf3, 0x81, 0xba, 0x57, 0x26, 0x06, 0x8c, 0x16, - 0x21, 0x36, 0x5e, 0xfa, 0xae, 0xbe, 0xa6, 0xfa, 0x5e, 0xa7, 0x38, 0xbf, - 0x54, 0x40, 0x9c, 0x5b, 0xe0, 0x6d, 0x61, 0x61, 0xab, 0xfa, 0xb6, 0x1a, - 0x3e, 0x89, 0xd7, 0x35, 0xb5, 0x39, 0x2f, 0x58, 0xef, 0xfb, 0x01, 0x4b, - 0x7a, 0x27, 0xbf, 0x1f, 0xd8, 0xf3, 0x71, 0x68, 0xca, 0xec, 0x0a, 0x24, - 0xe6, 0x54, 0x23, 0x2c, 0x7b, 0x77, 0xb4, 0xd7, 0x78, 0x9b, 0x60, 0x97, - 0x8e, 0xe9, 0x3f, 0xe1, 0xe0, 0x36, 0x4c, 0xad, 0xe9, 0xdb, 0xcd, 0x24, - 0x45, 0x55, 0x3c, 0xc1, 0x31, 0x3b, 0xb6, 0xf4, 0x40, 0x2c, 0xc3, 0x7d, - 0x09, 0x3c, 0x3f, 0x39, 0xf5, 0x11, 0x04, 0x2b, 0xb7, 0xf7, 0xc1, 0x07, - 0x43, 0x5c, 0xa7, 0xf0, 0x0b, 0x33, 0x86, 0xf1, 0x62, 0x69, 0xf3, 0xc1, - 0x17, 0xc3, 0xd4, 0x24, 0x9c, 0x61, 0x3e, 0x60, 0x37, 0x57, 0x59, 0xc8, - 0x7d, 0x5d, 0x0f, 0xe6, 0x1d, 0x71, 0x1b, 0xf8, 0xb4, 0x8a, 0xb3, 0x51, - 0x87, 0x65, 0xb7, 0xcc, 0x86, 0x73, 0x01, 0x7a, 0xfb, 0x85, 0x10, 0xbd, - 0x42, 0xf7, 0x8b, 0x05, 0xec, 0x6d, 0x4a, 0xcc, 0xda, 0xfd, 0x84, 0xd9, - 0x8f, 0x43, 0xcd, 0x1c, 0xe2, 0xa7, 0x92, 0x6a, 0x82, 0x08, 0xcf, 0x0a, - 0xf7, 0x40, 0xf1, 0xd9, 0x07, 0x9d, 0xe9, 0x92, 0xb3, 0x51, 0x49, 0x29, - 0x46, 0x5d, 0xd1, 0x3c, 0x31, 0xce, 0x60, 0xba, 0x57, 0x31, 0xf2, 0xeb, - 0xf8, 0x10, 0x33, 0x96, 0x2a, 0xfa, 0x6e, 0x8f, 0xac, 0x14, 0x33, 0x4c, - 0xbe, 0x61, 0x0c, 0xda, 0x6e, 0x33, 0x1b, 0x03, 0x65, 0x68, 0x5e, 0xbd, - 0xdc, 0x6d, 0x77, 0xe0, 0x04, 0x9c, 0x96, 0xb8, 0x70, 0x32, 0xe0, 0xae, - 0x51, 0x2c, 0x20, 0x9b, 0xef, 0xd6, 0xae, 0x48, 0x00, 0x33, 0xa1, 0xd8, - 0x14, 0x9b, 0x6b, 0x0c, 0x4f, 0x5c, 0x59, 0x71, 0x58, 0xf5, 0x27, 0x08, - 0x2b, 0xf9, 0xcf, 0x14, 0x1d, 0xf8, 0xf6, 0xa4, 0x7c, 0xb9, 0x75, 0xba, - 0x15, 0xc8, 0xec, 0x07, 0x47, 0x85, 0xcd, 0x5f, 0x02, 0x07, 0xc2, 0xc3, - 0x1e, 0x1e, 0x12, 0x70, 0x9c, 0x56, 0x75, 0x8e, 0xe1, 0xb6, 0x2a, 0xf0, - 0xc6, 0xcd, 0x4c, 0xa8, 0x70, 0x61, 0xe8, 0x6f, 0x5d, 0xae, 0x19, 0xa1, - 0x65, 0x77, 0xd9, 0x2f, 0x15, 0x60, 0x5c, 0x9e, 0x49, 0xaf, 0xae, 0x8b, - 0x41, 0x3a, 0x94, 0xdf, 0xce, 0x74, 0x0e, 0x8d, 0x55, 0xe8, 0xe3, 0xb5, - 0xd0, 0xa9, 0x80, 0xa4, 0x67, 0xf0, 0x9c, 0xe5, 0x3e, 0xfc, 0x1f, 0x1b, - 0x79, 0xfe, 0x97, 0x63, 0xe8, 0xdd, 0xbe, 0xac, 0x0b, 0xd6, 0xeb, 0xc3, - 0xf3, 0x18, 0x57, 0x77, 0xf1, 0xb2, 0x88, 0x4f, 0xb5, 0x37, 0xbd, 0x2c, - 0x05, 0x90, 0x5b, 0x8a, 0xe7, 0xee, 0x22, 0x7f, 0x70, 0x45, 0xb0, 0xb5, - 0x9e, 0x65, 0xa8, 0xef, 0x19, 0x82, 0xcb, 0x9e, 0xf0, 0x4c, 0x83, 0xcf, - 0x64, 0xb1, 0x28, 0xb1, 0x00, 0xe5, 0x8d, 0x2a, 0xd6, 0xa2, 0x0c, 0x9c, - 0x4b, 0xb5, 0x3b, 0xd5, 0xcc, 0xda, 0xea, 0xc7, 0x16, 0xeb, 0x1a, 0xd8, - 0x08, 0x96, 0xcc, 0xbb, 0x49, 0x61, 0xb7, 0xff, 0xbc, 0x36, 0xc8, 0xa5, - 0x95, 0xd6, 0x55, 0xac, 0x43, 0xbb, 0x50, 0xc9, 0x47, 0x53, 0xba, 0x26, - 0x65, 0x9c, 0xb2, 0x5e, 0x05, 0xb1, 0xf2, 0xa0, 0xa8, 0x28, 0x47, 0xa1, - 0x8d, 0x97, 0x0a, 0xe3, 0xa3, 0x57, 0x64, 0x91, 0xd7, 0x8b, 0xa6, 0x50, - 0x22, 0xf0, 0xe6, 0x78, 0x74, 0xc7, 0x25, 0xea, 0x39, 0x50, 0xc4, 0x87, - 0x25, 0xf1, 0xc3, 0xc5, 0x21, 0x72, 0xc6, 0x8c, 0x2d, 0x71, 0x58, 0x1c, - 0x2f, 0x17, 0x6e, 0x1b, 0x94, 0x8e, 0x03, 0x2f, 0x3f, 0x55, 0x87, 0xff, - 0x3b, 0xf2, 0x7e, 0x61, 0x14, 0x60, 0x5d, 0x2d, 0x31, 0x74, 0xff, 0xd2, - 0xaf, 0x25, 0x75, 0x35, 0x0d, 0xef, 0xfd, 0x0e, 0x15, 0x23, 0xae, 0x70, - 0x8e, 0x97, 0x50, 0xeb, 0x23, 0x51, 0xbd, 0x8d, 0x3b, 0x38, 0xa6, 0x00, - 0xfc, 0x99, 0xf2, 0xdf, 0xe6, 0x89, 0xdb, 0xa2, 0x0a, 0xa1, 0xfe, 0xfb, - 0x1b, 0xef, 0xe4, 0x6c, 0x0e, 0xec, 0x59, 0xb7, 0x69, 0x9a, 0x48, 0xaa, - 0xb6, 0x1b, 0x59, 0x02, 0x3a, 0x34, 0x2b, 0x0f, 0x48, 0xfd, 0xc4, 0xc6, - 0x1b, 0xfa, 0x46, 0xd7, 0x14, 0x52, 0xfc, 0x86, 0xc5, 0x94, 0x5a, 0x22, - 0x64, 0xe4, 0x63, 0x4f, 0x6c, 0x7a, 0xdc, 0xf4, 0x33, 0xa2, 0x00, 0x4f, - 0xa8, 0x84, 0xbd, 0x34, 0x3c, 0x7a, 0xdb, 0x87, 0xaf, 0xbe, 0xeb, 0xd9, - 0x35, 0xff, 0x22, 0x5d, 0x7a, 0xcb, 0x22, 0xc0, 0x8f, 0xdc, 0x6f, 0x94, - 0x5b, 0xb6, 0xfd, 0x9e, 0x07, 0x05, 0xe2, 0x0f, 0xdb, 0xcf, 0x21, 0x42, - 0xe1, 0x46, 0x55, 0x51, 0xc2, 0x71, 0x79, 0x30, 0x2b, 0xcc, 0xe2, 0xde, - 0x6d, 0xe8, 0xd3, 0xd5, 0xee, 0x48, 0x48, 0xe1, 0x6d, 0xf9, 0xc6, 0xe2, - 0xbc, 0xb9, 0x7f, 0x96, 0xdf, 0x18, 0x01, 0x18, 0xc3, 0xfb, 0x51, 0x63, - 0x29, 0x9d, 0x16, 0x51, 0xe3, 0x79, 0x6f, 0x03, 0x0a, 0x13, 0xbc, 0xe8, - 0x1b, 0xef, 0x39, 0x76, 0xb8, 0xf8, 0x67, 0x59, 0xe3, 0xcd, 0xf4, 0xd8, - 0x82, 0xd0, 0x47, 0x13, 0x21, 0x76, 0x19, 0x45, 0x66, 0xd0, 0xd7, 0x10, - 0xf6, 0x3e, 0x83, 0xdd, 0xf5, 0xdd, 0x26, 0x17, 0x8c, 0x3e, 0x8e, 0x38, - 0x54, 0xcb, 0x8c, 0x93, 0x60, 0xed, 0x71, 0x98, 0xb9, 0x3e, 0x0e, 0x33, - 0x6b, 0x1b, 0x09, 0xc7, 0x87, 0xde, 0x19, 0x7a, 0x2f, 0xf4, 0x6b, 0xfe, - 0xca, 0x58, 0x42, 0xc5, 0x91, 0xa3, 0xd1, 0x0f, 0xcc, 0x8d, 0xbc, 0x7d, - 0x0f, 0x73, 0xa4, 0x6e, 0x18, 0x06, 0x58, 0xdc, 0x8c, 0x84, 0xc8, 0xe0, - 0x14, 0x6c, 0xdf, 0x75, 0x01, 0x64, 0xdc, 0x7f, 0xb5, 0x80, 0xf1, 0x53, - 0xb7, 0x86, 0x01, 0x6b, 0x71, 0xff, 0xd4, 0x2e, 0xfc, 0x87, 0x5f, 0xf1, - 0xd3, 0x7a, 0x99, 0x9f, 0xbc, 0xfa, 0x14, 0xc1, 0x11, 0xfd, 0x7a, 0xde, - 0xfc, 0xf2, 0x5c, 0xde, 0xf8, 0xfb, 0xcb, 0xd8, 0x40, 0x74, 0x03, 0xd0, - 0x7a, 0x8c, 0x2f, 0x23, 0x56, 0x4c, 0xae, 0x70, 0x68, 0x32, 0x81, 0xd0, - 0xb2, 0x01, 0xfb, 0x4a, 0xdc, 0x58, 0xd2, 0x48, 0xbf, 0x70, 0xb2, 0xbc, - 0xe0, 0xc9, 0x6b, 0xae, 0x92, 0xda, 0x97, 0xe6, 0x01, 0xff, 0x0b, 0x0c, - 0x0b, 0x20, 0xdf, 0xf0, 0xcf, 0xf3, 0x9c, 0x46, 0xea, 0xfd, 0x19, 0xe2, - 0xd9, 0x29, 0x9d, 0xdd, 0x31, 0xc8, 0xf0, 0x59, 0x8b, 0x98, 0x10, 0x88, - 0x91, 0x4f, 0xff, 0x64, 0x82, 0xdf, 0xfe, 0xf7, 0x5f, 0xfd, 0x1e, 0xc7, - 0xb6, 0x84, 0x18, 0xa0, 0x6a, 0x16, 0x34, 0x64, 0xe4, 0x3b, 0xee, 0xdb, - 0xc3, 0xc7, 0x1d, 0x7a, 0x70, 0x70, 0x6b, 0x73, 0x22, 0xb5, 0xb6, 0x80, - 0x87, 0x3a, 0x84, 0x36, 0xa7, 0x27, 0xa9, 0xd5, 0x32, 0xaa, 0x06, 0x9d, - 0xf3, 0xc3, 0xd7, 0x1d, 0x79, 0x0c, 0xdb, 0x8c, 0x49, 0x26, 0x03, 0x87, - 0x7c, 0x81, 0xea, 0x08, 0x10, 0x36, 0x33, 0xcd, 0x52, 0xef, 0x04, 0x88, - 0x51, 0x8a, 0x1f, 0xa1, 0x35, 0x2e, 0x90, 0x0e, 0x10, 0x82, 0x5b, 0xda, - 0x77, 0x8b, 0xf3, 0xe0, 0x8a, 0x16, 0x43, 0x84, 0x3c, 0x1d, 0xa5, 0x8d, - 0x04, 0xce, 0x55, 0xc7, 0x35, 0xce, 0x4d, 0x6e, 0x47, 0x3c, 0xe5, 0x01, - 0xfa, 0xac, 0xcf, 0xd0, 0x06, 0x37, 0xd5, 0x04, 0xb2, 0x2f, 0x59, 0x1e, - 0x15, 0x46, 0xd0, 0xbe, 0x6d, 0x6a, 0xc0, 0x57, 0x17, 0x70, 0x70, 0x98, - 0xfa, 0x8d, 0xb0, 0x51, 0xf4, 0xae, 0xde, 0xf1, 0xc2, 0xb5, 0xd1, 0x63, - 0xd2, 0xab, 0x7b, 0x82, 0x11, 0x48, 0xc8, 0xa6, 0x40, 0xee, 0x8c, 0x21, - 0x3c, 0xb5, 0x9a, 0x97, 0x91, 0x7d, 0x2f, 0x2b, 0x10, 0xee, 0xd9, 0xe0, - 0xf9, 0x0b, 0x18, 0xfa, 0xe5, 0x40, 0x5e, 0x4b, 0x87, 0x9b, 0x91, 0xef, - 0x2f, 0x10, 0xe6, 0xff, 0xfb, 0xa0, 0x15, 0x94, 0x0f, 0x41, 0x73, 0x2c, - 0x6a, 0x72, 0x1e, 0x13, 0xa3, 0xd6, 0xc2, 0x5c, 0x1e, 0x65, 0xe7, 0x8f, - 0x84, 0x11, 0x79, 0x72, 0xc7, 0x4d, 0x55, 0x3f, 0x43, 0x9c, 0xc9, 0xff, - 0x20, 0xbe, 0x1b, 0x45, 0x5f, 0x99, 0xbf, 0x36, 0xd6, 0x0f, 0xc4, 0xc0, - 0x0a, 0x32, 0x45, 0xd1, 0xf3, 0x1e, 0x44, 0xae, 0x9f, 0x07, 0xc9, 0x17, - 0x27, 0xeb, 0xa8, 0x6b, 0xc0, 0x0c, 0x93, 0x0f, 0x98, 0xe0, 0xe9, 0xe1, - 0xcb, 0x5f, 0x86, 0x5c, 0xaa, 0x23, 0x7a, 0x91, 0x7e, 0xf3, 0x34, 0x1a, - 0x57, 0x76, 0xa4, 0x73, 0xb3, 0x06, 0xe7, 0x0a, 0x38, 0x0d, 0xbc, 0x39, - 0x95, 0x35, 0xb0, 0x71, 0x02, 0x0d, 0x10, 0xa3, 0x17, 0x31, 0xbf, 0x65, - 0xaa, 0xb9, 0x25, 0xc7, 0x3c, 0x99, 0x8f, 0x37, 0x34, 0x42, 0x61, 0x04, - 0x1e, 0xd2, 0xe8, 0xca, 0x91, 0x9c, 0x7c, 0x42, 0xd7, 0x73, 0x50, 0x56, - 0x0c, 0x9e, 0xca, 0x87, 0x79, 0xcf, 0x58, 0x7e, 0xa6, 0x23, 0x3c, 0x84, - 0x63, 0xc4, 0x23, 0xc3, 0x25, 0xbb, 0x2c, 0x57, 0xe7, 0x4d, 0x1d, 0x23, - 0x51, 0x5a, 0xc6, 0x0e, 0x33, 0x30, 0xfe, 0x27, 0x1a, 0xe8, 0xf2, 0x49, - 0xea, 0x9a, 0x26, 0xb9, 0x3a, 0x7f, 0x88, 0x07, 0x3d, 0x66, 0xac, 0xf6, - 0x93, 0x40, 0x60, 0xca, 0xb3, 0xaa, 0x3d, 0x52, 0x8d, 0xb5, 0x17, 0x33, - 0x5c, 0x21, 0x53, 0xe6, 0x79, 0x69, 0xbe, 0xb0, 0xbf, 0x89, 0xca, 0x9b, - 0x81, 0x85, 0x57, 0x14, 0xb1, 0x3f, 0x40, 0x93, 0x37, 0x34, 0x45, 0xc3, - 0x49, 0xf1, 0x7b, 0xda, 0x82, 0xa7, 0xc0, 0x43, 0xe1, 0x2b, 0x34, 0xbf, - 0x6d, 0x4c, 0xe4, 0xc7, 0x0a, 0x0c, 0xff, 0xea, 0x0b, 0x97, 0x87, 0x4c, - 0x26, 0x83, 0x1d, 0x1e, 0x46, 0xf4, 0x97, 0xbb, 0x4a, 0xb1, 0x1e, 0x9b, - 0xa5, 0x8d, 0xd2, 0x41, 0x6d, 0xa0, 0x4b, 0x3a, 0x65, 0x52, 0x6b, 0xa0, - 0x83, 0x4d, 0x08, 0xf3, 0xac, 0x97, 0xbe, 0x38, 0x9d, 0x41, 0x27, 0x3f, - 0xc1, 0x0d, 0xec, 0x27, 0x41, 0x1d, 0xaa, 0x26, 0x19, 0xd6, 0x40, 0x91, - 0xc5, 0x7a, 0x00, 0x6c, 0x39, 0x66, 0x4e, 0x4e, 0x3c, 0x79, 0xaf, 0x9c, - 0x95, 0xa6, 0x17, 0x97, 0x20, 0x44, 0x5b, 0x5f, 0xe3, 0xac, 0x07, 0x41, - 0x3c, 0x07, 0xf4, 0x92, 0x5a, 0x46, 0x65, 0xf9, 0xe8, 0x49, 0x71, 0x17, - 0xfe, 0xcd, 0x63, 0x04, 0x34, 0xaa, 0x95, 0x93, 0x7a, 0xb7, 0x86, 0x23, - 0x22, 0x1e, 0x06, 0x4b, 0xc8, 0x7b, 0xd7, 0xe5, 0x2b, 0x05, 0x69, 0xbd, - 0x08, 0xb8, 0x35, 0x33, 0x48, 0x5f, 0x67, 0x31, 0xa0, 0xab, 0xac, 0x06, - 0xb6, 0x40, 0x8b, 0xc7, 0x96, 0x6f, 0xd6, 0xa5, 0xeb, 0x0c, 0x1d, 0x99, - 0x9d, 0x1e, 0xfc, 0xc4, 0x27, 0x00, 0xa6, 0x65, 0xac, 0x5f, 0xc0, 0x78, - 0x5e, 0x43, 0x85, 0x88, 0x01, 0x9a, 0x2d, 0x74, 0xc9, 0x7e, 0x4a, 0xb0, - 0xc7, 0x2d, 0xc4, 0xfe, 0x08, 0x61, 0xb0, 0xa9, 0x41, 0xff, 0x78, 0x31, - 0xee, 0x63, 0xf2, 0xdf, 0xb5, 0x68, 0xeb, 0xa8, 0x06, 0x90, 0xa9, 0x14, - 0x80, 0x68, 0x0f, 0x6a, 0x45, 0xfd, 0xf0, 0xcf, 0x89, 0xf1, 0x0b, 0x2f, - 0x70, 0xba, 0x62, 0x13, 0xe0, 0xb3, 0x86, 0x6a, 0xc8, 0x7f, 0x3f, 0x55, - 0x29, 0x6d, 0x60, 0xba, 0xef, 0xe7, 0xd4, 0xc1, 0x88, 0x4b, 0x9c, 0x5c, - 0xfb, 0x6d, 0x8e, 0x40, 0x7b, 0x24, 0xfc, 0xa1, 0x9f, 0x53, 0xd4, 0x75, - 0x43, 0xb2, 0x79, 0x8e, 0x93, 0xdf, 0x3a, 0x33, 0x26, 0x66, 0x34, 0x82, - 0x72, 0x50, 0x4f, 0x42, 0x0a, 0x87, 0xff, 0x57, 0x5a, 0xaa, 0x53, 0xae, - 0x8d, 0x0b, 0xac, 0xef, 0x86, 0x54, 0x7d, 0xba, 0x03, 0x8a, 0x60, 0x38, - 0x29, 0x32, 0xf0, 0x3e, 0x26, 0x7d, 0xcb, 0xfb, 0xbc, 0x95, 0xf1, 0xe1, - 0xf0, 0x21, 0x15, 0xb3, 0x86, 0xdd, 0xea, 0x8b, 0x8a, 0x2c, 0x0c, 0x4c, - 0x92, 0x91, 0x85, 0xa2, 0x01, 0x12, 0x9f, 0x8e, 0xce, 0xf8, 0x7d, 0xf4, - 0xca, 0xc1, 0xa7, 0x0f, 0x3d, 0xb9, 0x26, 0x1d, 0x79, 0x79, 0xf8, 0x2d, - 0xae, 0x40, 0x77, 0x87, 0xe5, 0x4b, 0xc0, 0x03, 0x99, 0xfd, 0x3c, 0xe6, - 0x1c, 0x5c, 0xb3, 0x6f, 0x67, 0xb2, 0x78, 0x14, 0x42, 0xdd, 0x90, 0xb6, - 0xc9, 0x73, 0x64, 0xd4, 0xea, 0x87, 0x81, 0x08, 0xa9, 0xec, 0xdb, 0xa1, - 0x7f, 0x3d, 0x4e, 0x5b, 0x79, 0x73, 0x0e, 0xdc, 0xf5, 0x20, 0x3c, 0x42, - 0x9e, 0x2a, 0x8a, 0x8f, 0xb5, 0x99, 0x5b, 0x0d, 0x34, 0x7b, 0xf5, 0x76, - 0x25, 0xf0, 0x0e, 0x3d, 0xf0, 0xdc, 0x37, 0x78, 0xb1, 0x9e, 0xfc, 0xb5, - 0xf6, 0x13, 0x82, 0x7b, 0xc0, 0xea, 0xf3, 0x6c, 0x39, 0x85, 0xa9, 0x9b, - 0x3f, 0x36, 0x4f, 0x76, 0xab, 0xa9, 0xf7, 0x73, 0xe2, 0x01, 0xf5, 0xcd, - 0x85, 0x1b, 0x9c, 0x00, 0x3a, 0x5d, 0x6e, 0x68, 0x1b, 0xee, 0x77, 0xa8, - 0x83, 0xf5, 0xc4, 0x6e, 0xc9, 0xeb, 0xd4, 0x16, 0x8d, 0x0b, 0xbd, 0xef, - 0xdb, 0x11, 0xcf, 0x77, 0x0a, 0x6b, 0xc6, 0x53, 0x1b, 0xa7, 0xf3, 0x9e, - 0x70, 0x71, 0x53, 0x73, 0x9a, 0x5f, 0xed, 0xa7, 0xd9, 0x37, 0xb7, 0xc5, - 0xac, 0xbb, 0x5a, 0x39, 0x79, 0x93, 0xf7, 0xc3, 0x9d, 0x8e, 0x4f, 0x01, - 0x64, 0xcf, 0xe7, 0x3d, 0x2f, 0x6d, 0xac, 0x22, 0xab, 0x40, 0xf6, 0xe2, - 0x03, 0x00, 0x1e, 0x92, 0x7c, 0x4d, 0xa7, 0xd7, 0xef, 0x3d, 0xbe, 0x7f, - 0xd7, 0xa2, 0x62, 0xd6, 0x73, 0xb9, 0x04, 0x1f, 0x1c, 0xa3, 0xbb, 0xf7, - 0x58, 0x0e, 0x7e, 0x3c, 0x1b, 0x18, 0x03, 0xcf, 0x52, 0x13, 0x64, 0x85, - 0xe4, 0x63, 0xfd, 0xc2, 0x29, 0x95, 0x7c, 0x23, 0x4b, 0x36, 0xcf, 0x83, - 0xee, 0xb1, 0x04, 0xe3, 0xb4, 0x8c, 0x6c, 0x14, 0xaf, 0xe0, 0xab, 0x4a, - 0xa8, 0xd9, 0xec, 0xc9, 0x2b, 0x3f, 0x8a, 0x85, 0xd4, 0x46, 0x06, 0x17, - 0x06, 0x16, 0xff, 0x65, 0x74, 0xe9, 0x23, 0xd4, 0x8b, 0x59, 0xd5, 0x8d, - 0x0e, 0xe0, 0xe8, 0x2e, 0xcc, 0x34, 0x4e, 0x29, 0xf8, 0xf5, 0xdb, 0x7d, - 0xea, 0x98, 0x73, 0x15, 0x78, 0xb2, 0xc4, 0x11, 0x13, 0x1c, 0x52, 0x12, - 0x1d, 0x49, 0x17, 0x1a, 0x37, 0x6e, 0xff, 0x00, 0x60, 0xe2, 0x69, 0xf4, - 0x3e, 0x4c, 0x4f, 0x02, 0x1b, 0x00, 0x49, 0xbd, 0xf3, 0x37, 0xe0, 0x17, - 0xd9, 0xeb, 0x03, 0x53, 0x40, 0x7a, 0x97, 0xbb, 0x22, 0x8d, 0x88, 0x79, - 0xf9, 0xdf, 0xc1, 0xd9, 0xae, 0xa1, 0xe2, 0x23, 0xa6, 0x21, 0x0d, 0xc6, - 0x96, 0x57, 0x36, 0xb7, 0x70, 0xc4, 0x75, 0x41, 0x02, 0x05, 0xb2, 0xe9, - 0x0e, 0x5b, 0xa0, 0xe2, 0x30, 0xfb, 0xaf, 0xa3, 0x92, 0xe6, 0xfb, 0x57, - 0x86, 0x7c, 0xe0, 0xe5, 0x48, 0x97, 0xb5, 0x66, 0x6e, 0xf4, 0x2e, 0x09, - 0x24, 0x97, 0x67, 0xfe, 0x9e, 0x08, 0xde, 0x89, 0x9f, 0x5b, 0x3c, 0x7d, - 0x45, 0xfb, 0xf2, 0x06, 0x22, 0x00, 0x25, 0xcd, 0x1a, 0x00, 0x37, 0x67, - 0x81, 0xbe, 0x3d, 0x23, 0x55, 0xee, 0x39, 0xc4, 0x55, 0x0c, 0x67, 0x6b, - 0x88, 0x95, 0xd4, 0x2e, 0xc0, 0x57, 0xb1, 0xcc, 0x94, 0xcc, 0xba, 0xae, - 0xfc, 0x94, 0xd0, 0x94, 0xc6, 0x94, 0x51, 0xa2, 0xf5, 0x4d, 0x72, 0xdc, - 0xf2, 0x77, 0x32, 0x66, 0x7f, 0x94, 0x56, 0x1c, 0x0b, 0xf5, 0x62, 0xc3, - 0x82, 0x95, 0x82, 0x07, 0xdd, 0x57, 0x54, 0x57, 0x52, 0x06, 0xda, 0xdf, - 0xf4, 0x30, 0x0f, 0xd1, 0x04, 0x9d, 0xad, 0xf6, 0xe1, 0xd4, 0x6e, 0x97, - 0x8b, 0xe6, 0x55, 0x25, 0xae, 0xa3, 0x01, 0xa9, 0x96, 0x97, 0x87, 0x6a, - 0x52, 0xa1, 0x32, 0x85, 0x2c, 0x11, 0x84, 0xcf, 0xf4, 0x92, 0xfa, 0x37, - 0x72, 0xd1, 0x06, 0xd9, 0x50, 0x42, 0x9f, 0x63, 0x2e, 0x2f, 0x79, 0x50, - 0xdf, 0x53, 0xc6, 0xdb, 0xb1, 0x44, 0xec, 0xea, 0xc7, 0xca, 0x7c, 0x6a, - 0x98, 0x28, 0xe4, 0xb4, 0x27, 0x64, 0xd3, 0xed, 0xfb, 0x9d, 0x41, 0xcb, - 0x4d, 0x08, 0x2b, 0x00, 0xf2, 0xac, 0xfc, 0x89, 0x17, 0xc8, 0x08, 0xfd, - 0x17, 0xb6, 0xe4, 0x82, 0x43, 0x7f, 0x93, 0x6e, 0xa2, 0x81, 0x51, 0x63, - 0xc7, 0x89, 0xf4, 0xa5, 0x02, 0x0f, 0x12, 0x8f, 0x58, 0xd4, 0xa1, 0x10, - 0xdc, 0x14, 0xb4, 0xba, 0xad, 0x73, 0xf0, 0x60, 0x3c, 0xa2, 0x90, 0x22, - 0x1d, 0x6a, 0xe6, 0x5c, 0x56, 0x7f, 0x16, 0xb7, 0xfe, 0xf4, 0xf7, 0xd7, - 0x16, 0xd5, 0xde, 0xfd, 0xc0, 0x76, 0x2d, 0x55, 0x57, 0x99, 0x87, 0x56, - 0x60, 0x32, 0x2d, 0x8c, 0x78, 0x87, 0xd2, 0x7b, 0x36, 0xeb, 0x52, 0xdb, - 0x6e, 0xd9, 0x39, 0x9f, 0x01, 0x89, 0x9a, 0x55, 0xf6, 0x97, 0x6a, 0xb3, - 0x40, 0x45, 0xca, 0x2f, 0xad, 0x09, 0x92, 0xf2, 0xf0, 0x2d, 0x50, 0x37, - 0xc1, 0x20, 0x97, 0xdc, 0xe5, 0x96, 0x82, 0xca, 0xc2, 0x67, 0xc8, 0x65, - 0x9f, 0x79, 0xb8, 0x06, 0xcb, 0xd1, 0x5c, 0x19, 0xcb, 0xe5, 0x50, 0xb2, - 0xbe, 0x35, 0xf0, 0x6d, 0x03, 0xfb, 0x65, 0x10, 0xe5, 0xb0, 0xd0, 0x4e, - 0xa4, 0x9b, 0xd2, 0xb8, 0x30, 0x38, 0x50, 0x93, 0x62, 0xb6, 0x99, 0xda, - 0x07, 0x24, 0xdf, 0x93, 0x26, 0x32, 0x52, 0xba, 0x94, 0x79, 0x8b, 0x25, - 0x57, 0xe0, 0x9d, 0x09, 0x8b, 0x7a, 0xdb, 0x6e, 0xbc, 0x6b, 0x05, 0x70, - 0x2c, 0xea, 0x25, 0x36, 0xaa, 0xf1, 0xc8, 0xf5, 0xe6, 0x8a, 0x21, 0xeb, - 0x58, 0xbd, 0x85, 0x55, 0x7c, 0x36, 0x46, 0x1f, 0x83, 0x44, 0xb1, 0x9a, - 0x2a, 0x31, 0x3b, 0x9b, 0x20, 0xbb, 0xd3, 0xfd, 0x2d, 0xd5, 0x0b, 0x59, - 0xab, 0x49, 0x24, 0x2e, 0xbb, 0x02, 0xba, 0x77, 0x43, 0xde, 0x23, 0x10, - 0xd6, 0x2d, 0x33, 0xb1, 0x63, 0xc7, 0x78, 0x7f, 0xb1, 0xb3, 0x27, 0xda, - 0x63, 0x02, 0xef, 0xf9, 0x1e, 0x57, 0x12, 0xf1, 0xb6, 0xe7, 0x50, 0xed, - 0x3e, 0xc9, 0x49, 0x1f, 0xae, 0xeb, 0x7d, 0xca, 0xbb, 0x27, 0x3e, 0xe3, - 0x28, 0x16, 0x7f, 0x91, 0x2f, 0x0b, 0xe8, 0x28, 0x0e, 0x8b, 0x4c, 0x1b, - 0x70, 0x5d, 0xfc, 0x24, 0xf3, 0x15, 0x48, 0xeb, 0x3a, 0x8e, 0xfc, 0x83, - 0x8c, 0x39, 0x14, 0x5a, 0xb9, 0x53, 0xd5, 0x95, 0x90, 0x87, 0xe4, 0x3a, - 0xd1, 0x09, 0x5b, 0x90, 0x80, 0x2a, 0x5f, 0x63, 0x1e, 0x2e, 0x5f, 0xef, - 0xd1, 0x67, 0x02, 0x54, 0xa1, 0x65, 0xf7, 0x9b, 0xd2, 0x04, 0xbf, 0x9d, - 0x2d, 0xcf, 0xab, 0x00, 0x50, 0xad, 0x64, 0x56, 0x17, 0x88, 0xb3, 0xd5, - 0x3e, 0x82, 0x01, 0x32, 0x11, 0xac, 0x13, 0xd0, 0x5e, 0xa3, 0xe5, 0xc0, - 0xcc, 0xca, 0x72, 0x3c, 0x79, 0x5e, 0x3d, 0x1f, 0xff, 0xf0, 0x78, 0x48, - 0x3e, 0x74, 0x22, 0xc8, 0xe8, 0x43, 0x66, 0x34, 0x8e, 0xa3, 0x4d, 0xe7, - 0x8f, 0x98, 0xcf, 0x1f, 0x75, 0x42, 0xcf, 0x67, 0x98, 0x40, 0xd4, 0x73, - 0x53, 0xef, 0x0c, 0x4c, 0x77, 0xb7, 0x3c, 0xa4, 0xa2, 0x2f, 0x1f, 0xd4, - 0xb2, 0x5e, 0x41, 0x72, 0xd7, 0x8e, 0xc3, 0x35, 0x35, 0xb1, 0xd7, 0x91, - 0x5d, 0xfc, 0x26, 0x49, 0x41, 0x0c, 0x75, 0xb2, 0x03, 0xa7, 0xdb, 0xc0, - 0x69, 0xd5, 0xb1, 0x44, 0xc4, 0x5e, 0x1a, 0xd0, 0x5d, 0x53, 0x44, 0xdd, - 0x82, 0x6d, 0xd2, 0x4c, 0x5f, 0xd2, 0xd2, 0x12, 0x29, 0xc8, 0x2e, 0x19, - 0x0d, 0x88, 0xea, 0x40, 0xeb, 0x1b, 0x7d, 0x42, 0xf2, 0xbc, 0x51, 0x99, - 0x06, 0x40, 0x72, 0xe2, 0x5d, 0x1c, 0x9e, 0x84, 0xe5, 0x01, 0xdd, 0x7c, - 0x58, 0x57, 0xa2, 0x34, 0xb2, 0x15, 0x98, 0x69, 0x92, 0x48, 0xd2, 0x34, - 0x96, 0x4c, 0xce, 0x95, 0x79, 0x72, 0x59, 0xe7, 0xd8, 0xdf, 0x35, 0xa6, - 0xfd, 0xbd, 0x52, 0x15, 0x1e, 0x91, 0x94, 0x84, 0x01, 0x7e, 0x73, 0xa3, - 0xc9, 0x10, 0x0b, 0xe9, 0xd3, 0xd6, 0xaf, 0x3e, 0xdd, 0xe2, 0x55, 0x7b, - 0xf3, 0x6f, 0xee, 0xdf, 0xfc, 0x9b, 0xf3, 0xa5, 0xfe, 0x7f, 0xa2, 0x42, - 0x70, 0x0f, 0x32, 0x4b, 0x24, 0x31, 0xd3, 0x5b, 0xa1, 0xa1, 0x98, 0x69, - 0x4b, 0xe4, 0xf8, 0xd6, 0xb7, 0x7f, 0x73, 0x75, 0x34, 0xff, 0xe0, 0xf3, - 0x7f, 0xe8, 0xc7, 0x4c, 0xbd, 0x2e, 0x3b, 0x67, 0xa8, 0xac, 0xf1, 0xae, - 0xf5, 0xf7, 0x57, 0xba, 0x5c, 0x2d, 0x07, 0x57, 0xf3, 0x87, 0xa1, 0x64, - 0x7d, 0xaf, 0x16, 0x31, 0x4f, 0xd5, 0x60, 0x11, 0x19, 0xc1, 0x19, 0xdf, - 0x6d, 0x54, 0x6f, 0x96, 0x0b, 0x12, 0xf2, 0x2c, 0x5d, 0xbb, 0xa5, 0x62, - 0x7f, 0xe1, 0xdf, 0x7e, 0xd9, 0xd9, 0x97, 0xee, 0xf6, 0xd1, 0x36, 0xb8, - 0x1e, 0x77, 0x9f, 0x21, 0xd7, 0xf7, 0xf0, 0x80, 0x38, 0x3a, 0x1a, 0x55, - 0x8d, 0x35, 0x40, 0xf6, 0x8b, 0xc6, 0x50, 0x11, 0x82, 0x21, 0x61, 0x87, - 0x6a, 0x48, 0x1a, 0x9a, 0x1d, 0xe8, 0x47, 0x5c, 0x8c, 0xde, 0x89, 0xa4, - 0x41, 0xc6, 0xa6, 0x2d, 0xc7, 0x1d, 0x84, 0xc2, 0x7f, 0x2f, 0xb0, 0xc3, - 0x2a, 0xae, 0x32, 0x19, 0xc6, 0x66, 0x09, 0x08, 0xb3, 0xde, 0xc0, 0x67, - 0xdc, 0x2c, 0x85, 0x1a, 0xa4, 0x8e, 0x3b, 0x46, 0x25, 0x98, 0xb1, 0x47, - 0x75, 0xf0, 0x9c, 0x3b, 0xf4, 0x3b, 0x1d, 0x8f, 0x3b, 0x23, 0x7c, 0x44, - 0x9b, 0x3a, 0xb0, 0xf0, 0xf4, 0xe8, 0xb0, 0x74, 0xd6, 0x10, 0xaa, 0xd4, - 0x0e, 0x5f, 0x9a, 0x3a, 0xf4, 0x64, 0xb7, 0xd1, 0xd7, 0xc1, 0x96, 0x79, - 0x50, 0x57, 0xf5, 0xf1, 0x90, 0x62, 0xa0, 0xe3, 0xb1, 0xb2, 0x83, 0x37, - 0x7a, 0xac, 0x90, 0xc2, 0x8f, 0x07, 0x24, 0xa1, 0xe3, 0xb1, 0x7d, 0x8d, - 0x52, 0xd4, 0x6b, 0x70, 0xf2, 0x93, 0x1b, 0x0e, 0x59, 0xce, 0x78, 0xf6, - 0xb2, 0x34, 0x7b, 0x49, 0x7b, 0x47, 0x72, 0x19, 0xfc, 0x48, 0x1b, 0xa4, - 0x9d, 0x23, 0xfd, 0xfe, 0xf2, 0xd3, 0x9f, 0xcf, 0x4a, 0xd8, 0x86, 0x0d, - 0x29, 0x75, 0x4f, 0x68, 0x81, 0x3e, 0x10, 0x9e, 0xb4, 0x66, 0xe0, 0x45, - 0x40, 0x48, 0xf7, 0x87, 0x9e, 0x76, 0x03, 0xc5, 0xa3, 0x76, 0x4e, 0x39, - 0xac, 0x08, 0xaa, 0x78, 0xd8, 0x09, 0x1d, 0xff, 0xf6, 0xe1, 0x0d, 0xb9, - 0xe6, 0xd0, 0x9b, 0x06, 0x58, 0x3d, 0x45, 0xdf, 0x75, 0x4c, 0x5e, 0xed, - 0x0e, 0x9e, 0x57, 0xa4, 0xc4, 0x7e, 0xe0, 0x55, 0x3c, 0x11, 0x25, 0x64, - 0x7a, 0x91, 0xb5, 0x2a, 0xaa, 0x95, 0xc5, 0x43, 0xe7, 0x18, 0x48, 0x9c, - 0x8f, 0xf5, 0x96, 0x43, 0xab, 0x86, 0x78, 0x55, 0x90, 0x5f, 0xa3, 0xe5, - 0xeb, 0x43, 0x07, 0xe7, 0x0e, 0x9e, 0x74, 0x5b, 0x02, 0xec, 0xc3, 0xf7, - 0x72, 0x3a, 0x53, 0x8e, 0x9b, 0x7c, 0xab, 0x54, 0x5d, 0x17, 0xc5, 0x31, - 0x49, 0x43, 0x1d, 0x28, 0x7b, 0x62, 0x74, 0x86, 0x9e, 0x84, 0x7d, 0xbc, - 0xe9, 0xa8, 0x08, 0xa1, 0x94, 0x8b, 0x02, 0xde, 0xa9, 0x41, 0xe7, 0xe5, - 0xcc, 0x1b, 0x1a, 0xa1, 0xa7, 0xca, 0x50, 0x87, 0xac, 0x30, 0x97, 0x6b, - 0x04, 0x35, 0x46, 0x10, 0x8f, 0x35, 0x98, 0xb8, 0x8b, 0x41, 0x86, 0xcf, - 0x12, 0xa7, 0xa1, 0xd4, 0xb8, 0x71, 0xc5, 0xb7, 0x04, 0x2c, 0xe1, 0xc7, - 0x8f, 0xf7, 0x12, 0x1f, 0xd2, 0xa1, 0x0c, 0xfc, 0x40, 0x15, 0x5e, 0xd5, - 0xb9, 0x81, 0x4f, 0xa8, 0x1f, 0x81, 0x7f, 0xde, 0x03, 0x9e, 0xc4, 0x23, - 0xf3, 0x1c, 0xba, 0xab, 0xe1, 0xb4, 0x98, 0x28, 0x74, 0x13, 0xf2, 0x1c, - 0x28, 0x10, 0x55, 0xda, 0x3e, 0xdc, 0xda, 0x2b, 0xb5, 0x50, 0xcd, 0x0f, - 0xad, 0x7a, 0x00, 0xfd, 0x4b, 0x1e, 0xb6, 0xa6, 0xfa, 0x44, 0xbc, 0xc2, - 0x72, 0x50, 0x5b, 0x95, 0x6b, 0x68, 0x11, 0xa3, 0x6a, 0x09, 0x38, 0xd6, - 0x82, 0xa8, 0x8c, 0xce, 0xfe, 0xd1, 0x42, 0x63, 0x39, 0x60, 0x2c, 0x4c, - 0x00, 0x4b, 0xb3, 0xbd, 0x23, 0xe8, 0x28, 0x5a, 0x82, 0x8b, 0x54, 0x5d, - 0x8e, 0xc9, 0xd3, 0xa2, 0x25, 0x6a, 0xc5, 0xa9, 0xcb, 0xd1, 0x47, 0x37, - 0xb7, 0xd8, 0x2b, 0xfa, 0x09, 0xe4, 0x1b, 0x0a, 0x95, 0xd9, 0x6b, 0x32, - 0xd7, 0xb8, 0xfb, 0xea, 0x4c, 0x7c, 0xcb, 0xaa, 0xeb, 0x0e, 0x73, 0x0d, - 0x18, 0x87, 0x97, 0x7c, 0x9a, 0x42, 0x16, 0xe7, 0x44, 0x3d, 0x7c, 0xcd, - 0xd0, 0x88, 0xb0, 0xbe, 0x70, 0x29, 0x8a, 0xdd, 0x97, 0xc9, 0x89, 0x8f, - 0xa8, 0x26, 0x86, 0xba, 0x71, 0x15, 0x36, 0x75, 0x5a, 0x4e, 0x06, 0x6a, - 0x28, 0x23, 0x51, 0x9f, 0xd1, 0x9f, 0x03, 0x25, 0xf7, 0x3d, 0x78, 0x11, - 0x71, 0x51, 0x0e, 0xb2, 0xe6, 0x31, 0x4b, 0xbb, 0xb3, 0x9f, 0x78, 0x26, - 0x39, 0x49, 0x3b, 0xa1, 0xf8, 0xe0, 0x82, 0x36, 0xde, 0xa1, 0x34, 0x13, - 0xbc, 0x9e, 0xa9, 0x33, 0xfa, 0x38, 0x16, 0xbe, 0x9e, 0x73, 0xf0, 0x41, - 0x8f, 0x03, 0x6a, 0xb4, 0x56, 0x97, 0xcc, 0x2b, 0x13, 0x32, 0xce, 0xd1, - 0xbd, 0xdc, 0x13, 0xd8, 0x67, 0x86, 0xc6, 0x7a, 0xef, 0xe8, 0x8b, 0xa2, - 0xc7, 0xc2, 0x57, 0x76, 0x0e, 0x4d, 0x5b, 0x0f, 0xfd, 0x44, 0x3d, 0x35, - 0x46, 0xfe, 0x61, 0x61, 0xeb, 0xa0, 0x33, 0x4d, 0x5b, 0x0f, 0x6e, 0xe1, - 0x1e, 0x31, 0xff, 0x3b, 0x0a, 0xc7, 0x67, 0x92, 0x0a, 0x5a, 0x7e, 0x99, - 0x7c, 0xc6, 0x2f, 0x2f, 0x2c, 0x81, 0x22, 0x5d, 0x2d, 0x7c, 0xfd, 0x90, - 0x41, 0xa1, 0xe9, 0x97, 0xf9, 0x28, 0x4e, 0x22, 0xf1, 0xc0, 0x0a, 0x4c, - 0x35, 0x89, 0x5b, 0x2d, 0x30, 0x99, 0xa8, 0xc2, 0xfc, 0x2c, 0x45, 0x2a, - 0xd1, 0x8f, 0x22, 0x89, 0x99, 0x39, 0xb3, 0x41, 0x88, 0x9c, 0x1c, 0xa8, - 0x09, 0xe2, 0x3c, 0x53, 0x45, 0xbb, 0x93, 0x70, 0xf3, 0xe1, 0x79, 0x6f, - 0xbc, 0x63, 0xf9, 0x20, 0x99, 0x92, 0x13, 0x4a, 0x5e, 0x86, 0x72, 0x75, - 0x91, 0xb5, 0x57, 0xc3, 0xa3, 0x75, 0xbe, 0x6c, 0x27, 0xec, 0x7d, 0x06, - 0xb1, 0x97, 0xf5, 0x96, 0xea, 0x0c, 0xce, 0x31, 0x5d, 0x28, 0x99, 0x9a, - 0x6f, 0x1b, 0x65, 0xc6, 0x70, 0x58, 0xda, 0xfc, 0x0b, 0x42, 0xb2, 0x31, - 0xa4, 0xeb, 0xef, 0x07, 0xef, 0x10, 0xc3, 0x1c, 0x94, 0xb4, 0xaa, 0x57, - 0x4d, 0x30, 0x9c, 0xfb, 0xf4, 0xca, 0x81, 0x56, 0xd1, 0xc1, 0x74, 0xc9, - 0x18, 0xef, 0x35, 0x1d, 0xff, 0xf4, 0xb5, 0x5f, 0x34, 0x70, 0xea, 0x8d, - 0x1b, 0xb5, 0x86, 0x71, 0xf8, 0x1f, 0x64, 0xd2, 0x13, 0xa4, 0xc4, 0xbb, - 0x13, 0x8d, 0x14, 0x40, 0xac, 0xb3, 0x1b, 0x1e, 0xce, 0x25, 0x89, 0x34, - 0x7c, 0xb9, 0x46, 0x1f, 0x43, 0x1a, 0x07, 0xb7, 0xaf, 0xa2, 0x0c, 0xa7, - 0x9c, 0x7b, 0x6c, 0xcc, 0xc7, 0xff, 0x1d, 0x83, 0x3e, 0x79, 0x53, 0x19, - 0x6c, 0x92, 0x39, 0x42, 0x20, 0x14, 0x18, 0xb3, 0x10, 0x5b, 0xf4, 0xb6, - 0x6b, 0xc8, 0x96, 0x02, 0x00, 0x23, 0xf4, 0x1e, 0xe7, 0xfb, 0xb1, 0x0d, - 0x7b, 0xb4, 0x6b, 0xcf, 0x47, 0xa7, 0x66, 0xe4, 0xe0, 0xed, 0x7b, 0xd2, - 0x45, 0xae, 0x4a, 0x3d, 0x27, 0x72, 0xe8, 0x85, 0x93, 0xa3, 0xf1, 0x1c, - 0x1d, 0xcd, 0xe4, 0xfe, 0xd9, 0xb1, 0xd7, 0x57, 0x6e, 0x04, 0xd9, 0xa8, - 0xf7, 0x18, 0xb8, 0xf7, 0xbe, 0x4b, 0xd8, 0xa9, 0x4a, 0xc1, 0xd5, 0xc6, - 0x9b, 0xcc, 0xe9, 0xf7, 0x59, 0x8e, 0x9d, 0x71, 0xfa, 0xc1, 0x01, 0x03, - 0x0a, 0xcc, 0x88, 0xf7, 0xe8, 0x36, 0x9d, 0x6d, 0xcb, 0xab, 0xce, 0xcd, - 0x81, 0x7e, 0x9b, 0x3d, 0xf3, 0x69, 0xd7, 0xc0, 0x7d, 0xd8, 0x9f, 0x91, - 0xdf, 0x37, 0x87, 0xfc, 0xdf, 0x50, 0x8f, 0x68, 0x88, 0x3f, 0x83, 0x4c, - 0x59, 0xa7, 0x5e, 0xc8, 0x18, 0xb5, 0xd9, 0xae, 0xf5, 0x44, 0x23, 0x44, - 0xc2, 0xd3, 0xaf, 0xc4, 0xfa, 0xa3, 0xcf, 0xa0, 0x13, 0x4c, 0xa8, 0xca, - 0x5d, 0xf4, 0xc3, 0x9e, 0x03, 0xf8, 0x0d, 0xef, 0xf3, 0xee, 0x7a, 0x20, - 0x0c, 0xec, 0x54, 0x0e, 0x41, 0xa0, 0xbb, 0xde, 0xe7, 0xbd, 0xbf, 0x57, - 0x69, 0x9c, 0x4d, 0xaa, 0xfd, 0xdc, 0xa8, 0x31, 0x93, 0x4c, 0xaf, 0x81, - 0x67, 0xd4, 0x3f, 0x03, 0xd0, 0x3f, 0xf1, 0xcb, 0xa0, 0x24, 0xf6, 0x81, - 0x66, 0x0a, 0x49, 0x40, 0xbc, 0x1f, 0x74, 0x3e, 0xac, 0x93, 0xd0, 0x8f, - 0x69, 0xea, 0x2f, 0x8a, 0x9f, 0x89, 0xd5, 0x89, 0xc4, 0x33, 0x09, 0x78, - 0x77, 0xa7, 0xa1, 0xd1, 0x03, 0x30, 0x46, 0x22, 0x60, 0xa6, 0xdc, 0xaa, - 0xd3, 0x19, 0xa1, 0x4e, 0xf9, 0x7d, 0x42, 0x7b, 0xef, 0x21, 0x46, 0xcb, - 0x47, 0xb8, 0x4a, 0x7c, 0x62, 0x03, 0xf1, 0xcc, 0x2d, 0x07, 0xa4, 0x1a, - 0xc4, 0x77, 0x27, 0x3a, 0x0e, 0xd2, 0xba, 0xb3, 0x8a, 0xbd, 0xe9, 0x10, - 0x31, 0x68, 0x41, 0x1e, 0xb2, 0xcc, 0x54, 0x87, 0x74, 0xfa, 0x06, 0xcc, - 0x99, 0x6d, 0x7a, 0xc3, 0xd4, 0x70, 0xeb, 0x43, 0x43, 0xda, 0x59, 0x6f, - 0x9c, 0x07, 0x3a, 0x78, 0x01, 0xe4, 0x6c, 0xf1, 0xd4, 0x8f, 0xc9, 0xef, - 0xee, 0x82, 0x7a, 0xcf, 0x85, 0x97, 0xaf, 0x73, 0x16, 0xf0, 0xfc, 0xd6, - 0xb7, 0x73, 0xa2, 0x1e, 0x15, 0x40, 0x4c, 0x2b, 0xf7, 0xd0, 0xae, 0x79, - 0xb2, 0xea, 0x9a, 0x29, 0xdb, 0x4d, 0x51, 0x28, 0xc3, 0xac, 0x88, 0xfc, - 0x33, 0x75, 0xe7, 0xea, 0xf4, 0x5b, 0x56, 0xa0, 0x0a, 0x05, 0x07, 0xdf, - 0x94, 0x49, 0xae, 0x70, 0xbf, 0x08, 0xba, 0xe0, 0x01, 0x48, 0xe5, 0x74, - 0x00, 0xe8, 0x27, 0xf9, 0x7a, 0x2a, 0x49, 0x76, 0x7b, 0x68, 0x62, 0xac, - 0x15, 0x26, 0xb8, 0x33, 0xb0, 0xdf, 0x09, 0x6e, 0x8c, 0x6a, 0x71, 0x65, - 0xe9, 0x50, 0x57, 0x7b, 0x89, 0x68, 0x16, 0xe4, 0x5e, 0xe1, 0xad, 0xe9, - 0x73, 0x93, 0x2f, 0xc4, 0xb9, 0x41, 0x79, 0x3a, 0x17, 0x09, 0x1d, 0x9e, - 0x44, 0xa9, 0x93, 0xcf, 0x4e, 0xdf, 0xdc, 0x3d, 0xa5, 0x41, 0x9a, 0xc4, - 0x7b, 0x5f, 0xc7, 0xd5, 0x1d, 0x16, 0x9c, 0x52, 0x45, 0x73, 0xa0, 0x70, - 0xda, 0x46, 0x77, 0x71, 0xcc, 0x0d, 0x43, 0x5c, 0x7a, 0x3a, 0xd1, 0xa1, - 0x99, 0xd1, 0x05, 0x08, 0x46, 0xeb, 0x60, 0x82, 0xbf, 0x0e, 0xf3, 0xdd, - 0x2b, 0xf7, 0xde, 0xad, 0x21, 0x92, 0x89, 0x6d, 0xb2, 0xca, 0x9c, 0xc2, - 0x93, 0x93, 0xc8, 0x53, 0xc7, 0xd1, 0xbd, 0x54, 0x3e, 0xfc, 0x7a, 0x76, - 0xef, 0xef, 0xd8, 0xde, 0xaa, 0xf0, 0x2e, 0xbc, 0xe6, 0x14, 0xd6, 0x80, - 0xfc, 0xd6, 0xc0, 0x1e, 0x01, 0xd2, 0xf4, 0xd3, 0x55, 0xae, 0x9f, 0xa8, - 0xf0, 0x3f, 0xb9, 0xa1, 0x4a, 0xfc, 0x7c, 0x93, 0xe3, 0xc3, 0x21, 0x3a, - 0x99, 0x44, 0xf8, 0x19, 0x79, 0xdd, 0xff, 0x17, 0x9d, 0xff, 0x2f, 0x24, - 0xa0, 0xff, 0x96, 0xff, 0x96, 0x81, 0x27, 0x83, 0x8c, 0xe4, 0x9b, 0x4c, - 0x14, 0x14, 0x01, 0x52, 0x44, 0xc0, 0x41, 0x10, 0xca, 0xd3, 0x70, 0x73, - 0x68, 0xa1, 0xb6, 0x74, 0x6c, 0xfe, 0xc3, 0x17, 0x10, 0x94, 0x34, 0xd8, - 0xf0, 0x62, 0xe0, 0x63, 0xc1, 0x2f, 0x03, 0x15, 0x10, 0x2d, 0x78, 0xe3, - 0xd2, 0x95, 0xcd, 0x2d, 0x5c, 0xc3, 0x34, 0xd3, 0xba, 0x63, 0x23, 0xa3, - 0xf5, 0xd9, 0x0b, 0x16, 0x3d, 0x60, 0xdc, 0x0a, 0xc6, 0xed, 0x45, 0x6f, - 0xf5, 0x81, 0x3c, 0x47, 0x46, 0x32, 0x4e, 0xec, 0xdb, 0x01, 0xea, 0x83, - 0xff, 0x0b, 0xd6, 0x61, 0xa0, 0xaf, 0x7b, 0xe1, 0x33, 0xb7, 0xd0, 0xa5, - 0xfb, 0x95, 0x69, 0xfd, 0xc1, 0x27, 0x8a, 0xf2, 0xba, 0x80, 0x20, 0xbe, - 0x23, 0x1e, 0x82, 0x58, 0x38, 0xdb, 0x5e, 0xac, 0xe3, 0xf3, 0x95, 0xe4, - 0x65, 0x98, 0x63, 0xa8, 0x03, 0xdc, 0x76, 0x59, 0x9d, 0x77, 0xa5, 0x67, - 0x26, 0x9b, 0x3a, 0x27, 0xe9, 0x41, 0x73, 0xa5, 0x9e, 0x8b, 0x85, 0x0a, - 0x54, 0x60, 0x6e, 0x98, 0xcf, 0x03, 0xec, 0xd8, 0xe1, 0xa0, 0xe2, 0x0a, - 0xe4, 0x05, 0x9e, 0xf2, 0xc0, 0x3b, 0x3d, 0x8b, 0x32, 0x63, 0xc1, 0xc3, - 0x78, 0x7a, 0xd4, 0x4f, 0xef, 0xa8, 0x2d, 0xba, 0x61, 0x65, 0xe4, 0x0b, - 0xeb, 0xf2, 0x46, 0x97, 0x53, 0xa6, 0x26, 0x99, 0x0b, 0xf4, 0x25, 0xf2, - 0xa6, 0xf0, 0x52, 0x1f, 0xdc, 0x71, 0x54, 0x64, 0x57, 0x75, 0x5a, 0x81, - 0xf1, 0x3b, 0x42, 0x80, 0xbc, 0x84, 0xb9, 0x0c, 0xcc, 0x98, 0x15, 0xcf, - 0x9d, 0x2d, 0x4a, 0xd8, 0xaa, 0x82, 0xa5, 0x52, 0x89, 0xff, 0x7a, 0xe5, - 0x12, 0xc2, 0x0d, 0xe5, 0xc9, 0xc1, 0x49, 0x30, 0x32, 0xe6, 0x15, 0x83, - 0xf9, 0x82, 0xb7, 0x61, 0x7c, 0x41, 0x67, 0x81, 0x86, 0x95, 0xc4, 0xe8, - 0xd7, 0x95, 0x01, 0x2a, 0x96, 0x55, 0xce, 0x57, 0xc6, 0x65, 0xcd, 0x07, - 0x33, 0x9a, 0x8a, 0x60, 0x59, 0xee, 0x49, 0xf9, 0x5f, 0xee, 0x3c, 0x8f, - 0x39, 0x37, 0xb8, 0x07, 0x64, 0x3d, 0x2a, 0xf7, 0xb0, 0x69, 0xba, 0x09, - 0xc8, 0x41, 0xb9, 0x8f, 0x42, 0xca, 0xcc, 0x65, 0x52, 0x34, 0x90, 0x06, - 0xef, 0xc2, 0xd5, 0xcb, 0x76, 0x2e, 0xae, 0xa2, 0x85, 0x2c, 0x7a, 0xa1, - 0x00, 0xde, 0x55, 0x04, 0xdb, 0x33, 0x2e, 0x52, 0x04, 0x37, 0x57, 0xc4, - 0x64, 0x3d, 0x68, 0x64, 0x94, 0x6b, 0x79, 0xbd, 0x55, 0x6d, 0x0b, 0x2a, - 0x67, 0xd1, 0x7b, 0xcd, 0x02, 0x1e, 0x40, 0xa1, 0x96, 0x57, 0x47, 0x59, - 0x3f, 0xba, 0x9e, 0xc8, 0x05, 0x73, 0x51, 0x13, 0xea, 0x8d, 0x7e, 0xbf, - 0xd9, 0x42, 0x36, 0x49, 0x15, 0x02, 0xac, 0x7d, 0x5b, 0x13, 0x64, 0x8c, - 0xd1, 0x6c, 0xc4, 0x01, 0x7f, 0x4e, 0x51, 0x6b, 0x36, 0x77, 0x12, 0xfd, - 0x94, 0x43, 0xfe, 0x84, 0x2d, 0xf0, 0x82, 0x27, 0xb9, 0x79, 0xc4, 0xc6, - 0xe3, 0xc6, 0x51, 0x2c, 0x3e, 0xc5, 0x6e, 0xf0, 0x60, 0xcd, 0xde, 0xe2, - 0x8a, 0x0b, 0x14, 0x1e, 0xda, 0x7f, 0xa4, 0x61, 0x8f, 0xf8, 0x77, 0xff, - 0x82, 0x3d, 0xf6, 0xa7, 0xa0, 0x8c, 0x89, 0x4b, 0x7d, 0xff, 0x2d, 0xd5, - 0xcd, 0xc8, 0xdb, 0xc2, 0x1b, 0xf3, 0x21, 0x98, 0xb9, 0xc3, 0x7b, 0xc3, - 0x0a, 0x5d, 0xf8, 0xf7, 0x4f, 0x00, 0xbf, 0x35, 0x00, 0x2e, 0xe1, 0x2f, - 0x4d, 0x59, 0x2e, 0x61, 0x84, 0xf9, 0x89, 0x00, 0x3f, 0x1e, 0x1a, 0xb2, - 0x71, 0x8f, 0xc4, 0xb9, 0x3e, 0x80, 0x45, 0xca, 0xda, 0x17, 0x6a, 0x5a, - 0xff, 0x87, 0x75, 0xaa, 0x85, 0x5a, 0xd6, 0x3d, 0x34, 0x4d, 0xc4, 0x6a, - 0xfc, 0x62, 0x15, 0xfd, 0x51, 0x6a, 0xf2, 0x63, 0xba, 0x16, 0xf0, 0xf7, - 0xea, 0xe1, 0x37, 0x3c, 0x24, 0x91, 0xea, 0x2b, 0x7b, 0x4b, 0x08, 0x88, - 0x54, 0x1e, 0x77, 0xd8, 0x50, 0xa1, 0x9c, 0x48, 0xa4, 0xe5, 0xe0, 0x23, - 0xdb, 0x43, 0x20, 0xba, 0xb5, 0x79, 0x3a, 0x9b, 0x85, 0x4d, 0x77, 0x06, - 0x27, 0x1e, 0x33, 0x26, 0x46, 0x47, 0xb4, 0xca, 0x83, 0x61, 0xed, 0x0a, - 0xb9, 0x0e, 0xb3, 0xc4, 0x3c, 0x82, 0x2a, 0xc4, 0x90, 0x3e, 0xf8, 0x1f, - 0x8a, 0x4c, 0x36, 0x6f, 0xd6, 0xd0, 0x4f, 0x9a, 0x64, 0x72, 0xc9, 0x0c, - 0x68, 0xdf, 0x65, 0xff, 0x0d, 0xd3, 0xe6, 0xbf, 0xb2, 0xe6, 0x1d, 0x1b, - 0x82, 0x97, 0xcc, 0xd6, 0x59, 0x92, 0x99, 0xa2, 0x9c, 0xea, 0xd1, 0x7d, - 0x87, 0xac, 0x3c, 0x9f, 0x0f, 0x1d, 0xc2, 0xf8, 0x1e, 0x6e, 0x32, 0x7d, - 0xa0, 0x81, 0xdd, 0x2f, 0x86, 0x97, 0x34, 0x48, 0xb1, 0x38, 0x00, 0x17, - 0xe0, 0x0d, 0xec, 0x6e, 0x73, 0xc3, 0x3f, 0x4e, 0xb3, 0x82, 0xe2, 0x74, - 0xb4, 0x11, 0xa6, 0x07, 0xa4, 0x16, 0xa3, 0x18, 0x94, 0x09, 0xd1, 0x6f, - 0x6f, 0xfd, 0x1b, 0xd6, 0x5a, 0x40, 0x15, 0x8c, 0x7c, 0x4c, 0xd0, 0x27, - 0xc0, 0x8b, 0xb0, 0x3d, 0x66, 0x69, 0x06, 0xdb, 0x39, 0xe4, 0x2d, 0xe0, - 0xfe, 0xe7, 0x50, 0xf0, 0x1c, 0xdc, 0x35, 0x5c, 0x2d, 0x8a, 0x04, 0x46, - 0xd4, 0xa8, 0x8b, 0x66, 0xf0, 0x16, 0x3c, 0xc0, 0x1d, 0xfa, 0xc0, 0x88, - 0xa0, 0xd5, 0x11, 0xd7, 0x7f, 0x80, 0x39, 0xb4, 0x18, 0xe5, 0x83, 0x44, - 0x04, 0x18, 0xeb, 0x40, 0xd9, 0xa3, 0x1a, 0xd0, 0xd2, 0x3d, 0xd0, 0x3e, - 0x8a, 0x52, 0xe9, 0xa6, 0x81, 0x92, 0x20, 0xca, 0x02, 0x64, 0x99, 0x37, - 0x9d, 0xeb, 0x63, 0x9f, 0x98, 0xa4, 0x88, 0xa5, 0x62, 0x9d, 0xe1, 0x11, - 0xf4, 0x7e, 0xc4, 0xb1, 0xdb, 0xf2, 0x66, 0x43, 0x69, 0xb8, 0x59, 0x47, - 0x24, 0x71, 0xdd, 0x93, 0x8c, 0xc4, 0xcd, 0x0a, 0xc3, 0x4d, 0x08, 0x9e, - 0xce, 0xf0, 0x50, 0x8e, 0x30, 0x95, 0xfa, 0x08, 0x6e, 0x1e, 0xb6, 0x94, - 0x2e, 0x08, 0xc6, 0x8f, 0xae, 0xa8, 0x20, 0x30, 0x7f, 0xde, 0xf5, 0xbd, - 0x3b, 0xde, 0xd1, 0x6a, 0xb9, 0xae, 0x43, 0x90, 0x8e, 0xe0, 0x0e, 0x97, - 0xfb, 0x17, 0xed, 0x8f, 0x80, 0x3c, 0xb1, 0x64, 0x07, 0x10, 0xc5, 0x0a, - 0x95, 0xdb, 0x4e, 0x78, 0x6b, 0xc8, 0x61, 0x19, 0x9e, 0xbb, 0xe3, 0xa7, - 0x2a, 0x1f, 0xe1, 0x31, 0x39, 0xd2, 0xad, 0x7e, 0x61, 0xbd, 0x06, 0x15, - 0x18, 0x43, 0x43, 0xea, 0xa6, 0x5f, 0xc6, 0x58, 0x65, 0x67, 0xc9, 0xf6, - 0x6b, 0x99, 0x0b, 0xd6, 0x19, 0x43, 0x68, 0x21, 0x2e, 0xa2, 0xaa, 0x4e, - 0x02, 0xfa, 0xe8, 0x57, 0xd7, 0x19, 0x8a, 0x51, 0x66, 0xbe, 0x6a, 0x87, - 0xe8, 0x90, 0x55, 0xcc, 0x1b, 0x1e, 0x68, 0x51, 0x50, 0xd0, 0x0b, 0xd3, - 0x62, 0x22, 0x57, 0x02, 0xc5, 0x3d, 0x00, 0x67, 0xe5, 0x73, 0x1a, 0xb1, - 0x2d, 0xed, 0x80, 0x43, 0x10, 0xe1, 0x18, 0xed, 0xde, 0xb9, 0xa9, 0xa6, - 0xc9, 0xc6, 0xca, 0xa1, 0xfd, 0x08, 0x8e, 0x99, 0x43, 0x14, 0x1f, 0x44, - 0xac, 0xf0, 0x4b, 0x34, 0x0c, 0x2c, 0xce, 0x2d, 0x50, 0xc3, 0x20, 0xf3, - 0xc6, 0x9f, 0x05, 0x34, 0x0c, 0x38, 0x33, 0x45, 0x69, 0x91, 0x3d, 0x4a, - 0x43, 0xbd, 0xb3, 0xa3, 0x73, 0x87, 0xab, 0x80, 0xac, 0x65, 0x28, 0x0d, - 0x89, 0x4f, 0x09, 0x07, 0x70, 0xcd, 0xdc, 0xc4, 0x1c, 0xb8, 0xc2, 0xb9, - 0x24, 0x2a, 0xcc, 0xbb, 0x73, 0x00, 0x11, 0x9e, 0x70, 0x47, 0xf4, 0x2d, - 0xce, 0x26, 0xa0, 0xcc, 0x5e, 0x40, 0x26, 0xb8, 0xd3, 0x38, 0x54, 0x19, - 0x04, 0x6a, 0x52, 0xe2, 0x9e, 0x58, 0x09, 0x66, 0xbe, 0xb1, 0x8e, 0x63, - 0xfa, 0xff, 0x2d, 0x94, 0xb5, 0x52, 0xb6, 0x4e, 0x6d, 0xad, 0xba, 0xce, - 0x8c, 0xd7, 0x75, 0xbe, 0x7b, 0x07, 0x55, 0x9e, 0x8d, 0xdb, 0xc9, 0x41, - 0x65, 0xa6, 0x2f, 0xcb, 0x5e, 0x58, 0xff, 0xd5, 0x62, 0xfc, 0x01, 0x7a, - 0xd8, 0xe4, 0x95, 0xc9, 0xcf, 0xed, 0xe2, 0x97, 0x31, 0xe3, 0x8c, 0x0b, - 0x38, 0xdb, 0x98, 0xbd, 0xbb, 0xd2, 0xe1, 0xbc, 0xc5, 0xd7, 0xd9, 0xe6, - 0x8a, 0x76, 0x47, 0xf8, 0x0c, 0xcc, 0x22, 0x46, 0xfa, 0x96, 0x41, 0x11, - 0x38, 0xb9, 0x32, 0x16, 0x07, 0xee, 0x57, 0x1a, 0xf8, 0x1c, 0xec, 0xf5, - 0x13, 0x2a, 0xb7, 0x57, 0x8e, 0x01, 0xaf, 0xc5, 0x33, 0x03, 0x97, 0x5c, - 0x22, 0x23, 0x36, 0x1c, 0xcb, 0x04, 0x30, 0x41, 0xe4, 0x14, 0x2d, 0x1e, - 0x0e, 0x8f, 0x74, 0x19, 0x3d, 0x31, 0x86, 0xdf, 0xf4, 0x7d, 0x2b, 0x95, - 0x06, 0x57, 0xb0, 0x11, 0xa1, 0x2e, 0xac, 0xae, 0x5d, 0x2e, 0x10, 0x85, - 0x00, 0xe2, 0x90, 0xa8, 0xc1, 0x7c, 0x93, 0x68, 0x51, 0x22, 0xd0, 0xfa, - 0x16, 0xac, 0x39, 0x11, 0x87, 0x47, 0x88, 0xb4, 0x2e, 0x45, 0x5d, 0x88, - 0x5a, 0x06, 0x20, 0xf4, 0xd7, 0x8b, 0x88, 0xb5, 0x74, 0x23, 0xb8, 0x05, - 0xf0, 0xd8, 0xa5, 0xf0, 0x4c, 0x9a, 0x14, 0xa9, 0xdf, 0x59, 0xd0, 0x8b, - 0x21, 0x60, 0x6e, 0x81, 0x31, 0xd3, 0x41, 0x5d, 0x6e, 0x90, 0x0e, 0xc6, - 0x1a, 0xc6, 0xc6, 0x45, 0x04, 0xe1, 0x2b, 0xc4, 0x4c, 0xba, 0x32, 0x67, - 0x85, 0x3f, 0x9a, 0x4f, 0x1b, 0x3b, 0xf2, 0xd3, 0xd4, 0x4b, 0xad, 0x2e, - 0xe2, 0xa6, 0x75, 0x3f, 0x16, 0xa5, 0x1e, 0xeb, 0xd3, 0x66, 0x26, 0x46, - 0x05, 0x85, 0x80, 0x0b, 0x34, 0x42, 0x7b, 0x45, 0x2a, 0x10, 0x16, 0x60, - 0xb6, 0x29, 0x81, 0x71, 0x63, 0x87, 0x5e, 0xa4, 0xad, 0x63, 0x2b, 0x9f, - 0x63, 0x92, 0x9f, 0x58, 0x9f, 0x16, 0x86, 0xdd, 0x76, 0x1f, 0xbd, 0x47, - 0xd9, 0xec, 0xd3, 0xb8, 0x5d, 0x41, 0x66, 0xa3, 0x91, 0xa6, 0xa2, 0x76, - 0xc6, 0xb2, 0xd8, 0x54, 0x74, 0x1b, 0x0f, 0x16, 0x90, 0x2a, 0x2e, 0xfc, - 0xa6, 0x67, 0x37, 0x8c, 0xea, 0xa3, 0xf6, 0xed, 0xc0, 0xf4, 0x2c, 0xe9, - 0x51, 0x9d, 0x45, 0x3a, 0xdf, 0x44, 0x0a, 0x29, 0xb2, 0x61, 0xf7, 0xce, - 0xf9, 0xa0, 0xc1, 0x0c, 0x3c, 0x6a, 0xc1, 0x76, 0x8b, 0x3b, 0x64, 0x3c, - 0xdd, 0x86, 0x7e, 0xbc, 0x1c, 0x8f, 0x56, 0xf2, 0x26, 0xef, 0x4d, 0x7c, - 0xc5, 0x91, 0x70, 0x4f, 0x4e, 0xdd, 0x19, 0xa6, 0x31, 0x75, 0xc4, 0x32, - 0x56, 0xeb, 0x6b, 0x84, 0x5a, 0xd9, 0x22, 0xa4, 0xa6, 0x60, 0x56, 0xbc, - 0x3b, 0xb3, 0xbf, 0xb7, 0x52, 0x1c, 0xf9, 0x39, 0x9a, 0xc4, 0xe3, 0xbf, - 0xbd, 0x26, 0x4f, 0x59, 0x54, 0x60, 0x43, 0x6f, 0xbc, 0x19, 0xf3, 0xd6, - 0x84, 0x09, 0x7c, 0x4b, 0x53, 0xab, 0xd0, 0x47, 0xe9, 0x02, 0x8c, 0x5f, - 0xe7, 0x9a, 0x20, 0x7d, 0xa3, 0x0b, 0xad, 0x81, 0x3a, 0x1f, 0x51, 0x15, - 0x0f, 0xd7, 0xcf, 0x74, 0x09, 0xb8, 0xda, 0x84, 0x0b, 0xef, 0x13, 0x0e, - 0x0e, 0xe7, 0x90, 0x6c, 0x25, 0x5e, 0x80, 0x87, 0x3e, 0xc9, 0xa5, 0xe1, - 0x88, 0xb8, 0xa6, 0x7d, 0xf3, 0xad, 0x8e, 0xc6, 0x84, 0xd7, 0xda, 0xb9, - 0x1c, 0xb5, 0x7e, 0x03, 0x69, 0xad, 0xb1, 0xe2, 0x70, 0x22, 0xd9, 0xf0, - 0xd8, 0xd4, 0xe5, 0x1f, 0x4c, 0xe9, 0x2e, 0x11, 0xbf, 0xc1, 0xb9, 0x42, - 0x56, 0x0c, 0xc1, 0x2a, 0x34, 0x1a, 0x9b, 0xb0, 0x13, 0x4c, 0x04, 0x2d, - 0xd6, 0x04, 0xf1, 0x13, 0xa5, 0x19, 0x87, 0xae, 0x0a, 0x78, 0x49, 0x9f, - 0x54, 0xa8, 0x9e, 0x62, 0xd1, 0xda, 0x48, 0xfa, 0xbe, 0xf3, 0x38, 0xb3, - 0x01, 0x08, 0xd9, 0xe9, 0xfb, 0xc9, 0xb7, 0x90, 0x63, 0x0c, 0xfe, 0x7e, - 0x15, 0x9e, 0x5d, 0x31, 0x34, 0x9d, 0xdf, 0x89, 0xc0, 0x9f, 0xae, 0x34, - 0x14, 0x8e, 0x64, 0x0c, 0x7c, 0xdc, 0x13, 0xe8, 0x86, 0xd3, 0x03, 0x04, - 0x3c, 0x2b, 0x23, 0x74, 0x8a, 0x42, 0x53, 0x12, 0xd1, 0x5d, 0x25, 0x2b, - 0xa0, 0x14, 0x6c, 0xb1, 0xfd, 0x0b, 0xfc, 0x48, 0xc3, 0xe4, 0xd6, 0xbc, - 0xe6, 0x43, 0x80, 0x85, 0x09, 0xa3, 0x63, 0x8d, 0xb9, 0x6b, 0xea, 0x60, - 0xf6, 0x08, 0x69, 0x1e, 0x5e, 0xd2, 0x60, 0x28, 0x46, 0xde, 0x66, 0xdd, - 0x8b, 0x00, 0x5c, 0x87, 0xb5, 0x47, 0x78, 0xb5, 0xae, 0x32, 0xe1, 0x9c, - 0x4c, 0x88, 0x4c, 0xc6, 0x46, 0xca, 0x75, 0xf1, 0x15, 0xc8, 0x6f, 0xa1, - 0x0a, 0x2a, 0xff, 0x36, 0xde, 0x47, 0x24, 0x6a, 0x5e, 0x31, 0x6f, 0x79, - 0xd7, 0x44, 0xd3, 0xaf, 0x4a, 0xfd, 0x07, 0x65, 0xf0, 0x1a, 0x46, 0x2b, - 0xb9, 0x17, 0xeb, 0xfc, 0xeb, 0x1b, 0xf2, 0xcc, 0x38, 0x70, 0x70, 0x23, - 0xb1, 0xc1, 0x18, 0x1d, 0xcd, 0x78, 0xc3, 0xff, 0x8d, 0x8b, 0x37, 0x46, - 0x99, 0x35, 0x26, 0xd8, 0xe0, 0x1a, 0xef, 0x32, 0xde, 0xef, 0x3e, 0x9f, - 0xc4, 0x56, 0x20, 0x63, 0x31, 0x80, 0x0a, 0x43, 0x55, 0x79, 0x8b, 0x3b, - 0xc2, 0x45, 0x5f, 0x11, 0xbd, 0x02, 0x21, 0xac, 0xf1, 0x4b, 0xda, 0x1a, - 0x41, 0x96, 0xc1, 0x5d, 0x6b, 0xc9, 0xc9, 0x41, 0x21, 0x72, 0x59, 0x12, - 0xaf, 0x0a, 0x8e, 0x4a, 0x09, 0x50, 0x4d, 0x22, 0x99, 0x0a, 0x58, 0x79, - 0x47, 0xbc, 0x3f, 0xef, 0xd5, 0x15, 0x27, 0x5e, 0xe0, 0xe7, 0xf1, 0xd0, - 0xc9, 0xa6, 0x45, 0xbe, 0xba, 0xeb, 0x65, 0xc6, 0x20, 0x43, 0x34, 0x65, - 0x18, 0x93, 0x74, 0x1d, 0x13, 0xe4, 0xff, 0x78, 0xe3, 0xc4, 0x0c, 0x74, - 0xf2, 0x50, 0x48, 0xb5, 0x8c, 0xaf, 0x17, 0x6b, 0x97, 0x68, 0x08, 0x54, - 0xd4, 0x12, 0x85, 0xd4, 0x72, 0x0e, 0x0b, 0x13, 0x97, 0x08, 0x05, 0xa6, - 0xe3, 0xd6, 0xd0, 0x2d, 0x5c, 0x49, 0x3f, 0x09, 0xe1, 0x93, 0x5d, 0x35, - 0xd0, 0x0b, 0x7a, 0xaa, 0x88, 0x54, 0xf9, 0x78, 0xae, 0x38, 0x39, 0xd5, - 0x0b, 0x9a, 0xc4, 0xff, 0x06, 0x0f, 0x65, 0x82, 0x22, 0x2b, 0x22, 0xbe, - 0xa3, 0x1b, 0x28, 0xce, 0x56, 0x90, 0x2f, 0xbc, 0x46, 0x1f, 0x50, 0x59, - 0x60, 0x78, 0xc3, 0x93, 0x0b, 0x01, 0xa1, 0xac, 0x44, 0x70, 0xac, 0x96, - 0xb8, 0x02, 0x23, 0xa4, 0xba, 0x05, 0xf8, 0x3d, 0x50, 0x77, 0x93, 0x70, - 0x8a, 0x54, 0xa0, 0x08, 0x5f, 0xa5, 0xcf, 0xd0, 0x2a, 0xc2, 0x1a, 0xc2, - 0x9a, 0x3f, 0x10, 0xbb, 0x85, 0x31, 0xa6, 0x3a, 0x02, 0xbb, 0x03, 0x06, - 0xf1, 0x05, 0x55, 0xb8, 0x5e, 0xa8, 0x5f, 0x5f, 0x07, 0xa2, 0x84, 0x8f, - 0xc9, 0x6a, 0xea, 0x7f, 0x50, 0xdf, 0x62, 0xff, 0x55, 0xa6, 0x26, 0xfc, - 0xc6, 0xb8, 0x6d, 0x28, 0x53, 0x63, 0xc7, 0x21, 0x6b, 0x91, 0x51, 0x15, - 0x71, 0x81, 0xf6, 0x87, 0x9c, 0xd7, 0x0e, 0xb2, 0xdf, 0x54, 0x8a, 0x6c, - 0xaa, 0xcb, 0x95, 0xaa, 0x91, 0x22, 0xd3, 0x5d, 0x56, 0x2b, 0x0e, 0xca, - 0x00, 0xf0, 0x09, 0x76, 0x02, 0x7a, 0x58, 0xdc, 0x7c, 0x0f, 0xb3, 0x2a, - 0xe6, 0xc2, 0x2f, 0xb5, 0xc9, 0x1a, 0x9b, 0x40, 0x96, 0x10, 0x36, 0x62, - 0x0d, 0x70, 0xb4, 0xa9, 0xcd, 0x8d, 0xaa, 0xb7, 0xc9, 0xb0, 0xcd, 0x1b, - 0x99, 0x74, 0xab, 0x76, 0x19, 0xf1, 0x9c, 0x04, 0x7e, 0xe1, 0xfa, 0x1e, - 0xbf, 0x61, 0xc7, 0xe4, 0x16, 0x94, 0x4e, 0xd9, 0x4a, 0x47, 0x9e, 0x10, - 0x64, 0x3a, 0x77, 0x5e, 0x3d, 0x11, 0x1d, 0xfd, 0x37, 0xf1, 0xca, 0xac, - 0x56, 0xae, 0xfb, 0xa5, 0x14, 0xf0, 0x64, 0x9f, 0xff, 0xee, 0xfe, 0xab, - 0x96, 0x5c, 0x32, 0x58, 0xc9, 0xc6, 0xb4, 0x3f, 0x58, 0x5c, 0x4e, 0xa2, - 0x90, 0x2c, 0xfe, 0x95, 0x96, 0x0a, 0x5a, 0x90, 0xba, 0x5e, 0xf3, 0x87, - 0xff, 0xed, 0xf9, 0xe9, 0xc4, 0x93, 0x0e, 0xce, 0xd5, 0x27, 0xd4, 0xc5, - 0xa5, 0xb2, 0x35, 0xec, 0x5f, 0x4b, 0x48, 0xad, 0xc8, 0x52, 0xa5, 0x3d, - 0xd8, 0xe4, 0xf2, 0x19, 0xfe, 0x5d, 0xb1, 0x36, 0xf1, 0xd6, 0x32, 0x24, - 0x6f, 0xd9, 0xe9, 0xe9, 0x3f, 0x42, 0x51, 0x22, 0x3f, 0xa0, 0x0b, 0x4c, - 0x15, 0x24, 0x44, 0x35, 0xde, 0x47, 0x5e, 0xc6, 0x13, 0xd7, 0x90, 0x90, - 0x64, 0xea, 0x4a, 0x5d, 0xb0, 0xde, 0x9f, 0xbd, 0x6b, 0xcb, 0x37, 0x6d, - 0x4d, 0x2e, 0x71, 0xcd, 0xd7, 0x80, 0x76, 0xee, 0x09, 0x54, 0xf5, 0x80, - 0x70, 0xfe, 0x70, 0x89, 0x07, 0x99, 0x78, 0xeb, 0xcf, 0x8c, 0x7d, 0xb0, - 0xda, 0x37, 0xa5, 0x06, 0x59, 0xd1, 0x1b, 0xb3, 0x93, 0x19, 0x27, 0xbc, - 0x31, 0x14, 0x48, 0xd5, 0xce, 0x98, 0x03, 0x6b, 0x52, 0xa0, 0x1e, 0xc0, - 0x51, 0x96, 0xa0, 0x3e, 0x0c, 0x8b, 0xe1, 0xaf, 0xf5, 0x09, 0x9e, 0x85, - 0x57, 0x25, 0x49, 0xe0, 0xe2, 0x41, 0xe8, 0xeb, 0x38, 0xba, 0xe5, 0x0a, - 0x02, 0x77, 0x29, 0x76, 0x77, 0x0c, 0x3a, 0xa1, 0x26, 0xec, 0x25, 0xbf, - 0xf0, 0x2f, 0x03, 0x99, 0x4e, 0x02, 0x16, 0x8d, 0x8f, 0x4a, 0xb9, 0x68, - 0xb6, 0x21, 0x0f, 0x9c, 0x8e, 0x28, 0x02, 0x8e, 0xd5, 0x32, 0x9e, 0x30, - 0x5b, 0x30, 0xaa, 0x71, 0x58, 0x31, 0xe3, 0x21, 0x53, 0x39, 0x31, 0xf3, - 0x46, 0xa4, 0x53, 0xa4, 0x70, 0x96, 0xfc, 0x46, 0x61, 0x1d, 0xde, 0x65, - 0xde, 0xb5, 0x3b, 0x5e, 0x31, 0x25, 0x63, 0x28, 0x05, 0x75, 0xd1, 0x24, - 0xe0, 0xee, 0x50, 0xa5, 0x2b, 0x28, 0x7f, 0xd8, 0x55, 0x27, 0x95, 0x73, - 0x2b, 0xa8, 0x45, 0x4e, 0xfc, 0x72, 0x1b, 0x90, 0xc4, 0x44, 0x01, 0xee, - 0x74, 0x55, 0xac, 0xdf, 0x43, 0x90, 0x13, 0x84, 0x1d, 0x94, 0xf5, 0x2f, - 0x0f, 0xd7, 0x0f, 0x4b, 0xb6, 0x3e, 0x86, 0x46, 0x8e, 0x8d, 0xd0, 0xb3, - 0xc0, 0xd8, 0x7f, 0x55, 0x4a, 0x06, 0x47, 0x35, 0xec, 0x95, 0x29, 0x6d, - 0xc5, 0x02, 0x3c, 0x94, 0x8c, 0x5e, 0xf8, 0xf1, 0xf1, 0x6a, 0xb1, 0x34, - 0xbd, 0x11, 0x62, 0xf3, 0x54, 0x57, 0xa6, 0x2b, 0x7f, 0xfd, 0x55, 0x09, - 0x27, 0x57, 0x6e, 0x75, 0xe5, 0x21, 0x2c, 0xb4, 0x58, 0xee, 0xdc, 0xda, - 0x79, 0xe5, 0xf9, 0xdf, 0x12, 0x4c, 0x9a, 0xdb, 0x62, 0x8c, 0xdb, 0x2c, - 0xbd, 0x63, 0x28, 0xe5, 0x08, 0x91, 0xad, 0xd9, 0x34, 0xfe, 0xb8, 0x7c, - 0x13, 0x8e, 0xd1, 0xcc, 0x6d, 0x97, 0x01, 0x36, 0xf7, 0xf4, 0xf0, 0xea, - 0x4f, 0x66, 0x4a, 0x5d, 0x7e, 0xdd, 0xef, 0xf1, 0xf9, 0x77, 0xa8, 0x13, - 0x19, 0x3a, 0x77, 0xeb, 0x7e, 0x71, 0x26, 0x45, 0x17, 0x62, 0xa8, 0x07, - 0xe6, 0x12, 0x45, 0x9e, 0x71, 0x6d, 0x7e, 0xef, 0x0b, 0x06, 0x96, 0xeb, - 0xe0, 0x47, 0x96, 0xdc, 0x02, 0x23, 0x3a, 0x11, 0x2e, 0x2d, 0xd5, 0xe0, - 0x8e, 0x39, 0x2e, 0x8f, 0x5f, 0xf8, 0xfe, 0xab, 0xc6, 0x47, 0xd0, 0xc8, - 0xe2, 0xfb, 0xff, 0x0e, 0x1c, 0x8d, 0x6e, 0x29, 0x6e, 0xbc, 0xd6, 0x75, - 0x65, 0x37, 0xc6, 0x15, 0xe9, 0xe0, 0xad, 0xd1, 0x5e, 0x42, 0xc6, 0xa5, - 0x01, 0xa8, 0xc6, 0x20, 0xd3, 0x12, 0x51, 0xcf, 0xd7, 0x37, 0x2e, 0x97, - 0xca, 0xd4, 0x44, 0xf0, 0xc8, 0x47, 0xcf, 0xb4, 0x80, 0x8f, 0x6a, 0xdf, - 0x57, 0x23, 0x6a, 0xc5, 0xea, 0x6a, 0x8a, 0xf8, 0xeb, 0xcf, 0x35, 0x5e, - 0x70, 0x5e, 0x51, 0x00, 0x3d, 0x01, 0x0f, 0x6b, 0x0e, 0xca, 0xd1, 0x87, - 0x15, 0x52, 0xf3, 0xfa, 0x76, 0xfd, 0x28, 0xce, 0xd4, 0xf2, 0x22, 0xee, - 0x3e, 0xf9, 0xf1, 0x6f, 0xb8, 0xd7, 0xba, 0xf9, 0xf8, 0x87, 0x43, 0xe3, - 0xb5, 0x8c, 0x1e, 0xff, 0x8e, 0x4b, 0x63, 0xa3, 0xda, 0xae, 0x4b, 0x7a, - 0xff, 0x49, 0x81, 0x47, 0xc5, 0xbd, 0xd7, 0xad, 0x26, 0x91, 0x4a, 0x4f, - 0x7a, 0x6f, 0xb2, 0x98, 0xba, 0x54, 0x84, 0xee, 0x14, 0x32, 0xb9, 0x7d, - 0x68, 0x6e, 0x4d, 0xe5, 0x91, 0xcb, 0x52, 0xad, 0xfb, 0x54, 0x7e, 0x86, - 0xc5, 0xd5, 0xd9, 0x04, 0x8b, 0x13, 0x43, 0x7d, 0x33, 0xa2, 0x3e, 0x31, - 0x74, 0x05, 0x7f, 0xed, 0x8e, 0xf2, 0xc7, 0xaa, 0xec, 0x2d, 0xd7, 0x9c, - 0xf3, 0x34, 0x7f, 0xac, 0x43, 0xeb, 0xf1, 0x2e, 0x57, 0xcf, 0x27, 0x56, - 0x75, 0x6b, 0x22, 0x6d, 0x0c, 0x9d, 0xc6, 0x0b, 0xbb, 0xc4, 0x57, 0x1b, - 0x76, 0xa5, 0x3c, 0x8d, 0xab, 0x0e, 0x5f, 0xc9, 0xc9, 0xe2, 0xeb, 0xfe, - 0x60, 0x5e, 0xa5, 0x6b, 0x68, 0xaf, 0xa0, 0x36, 0xfd, 0xa8, 0x1f, 0x3b, - 0x8d, 0x69, 0xa9, 0xa0, 0x85, 0x56, 0x15, 0xa5, 0x89, 0x59, 0x3a, 0x0f, - 0x5f, 0xd2, 0x17, 0x48, 0x5c, 0x35, 0xa8, 0x89, 0x83, 0x20, 0x74, 0x6d, - 0x69, 0x55, 0x93, 0x1a, 0x98, 0xf9, 0x36, 0xbe, 0x6a, 0x35, 0x36, 0xe6, - 0x9a, 0x9d, 0x78, 0xa2, 0xac, 0x2b, 0x62, 0xb2, 0x5d, 0x01, 0xe3, 0xe9, - 0xb1, 0x16, 0x52, 0xbe, 0x64, 0xfb, 0x6c, 0x93, 0xd7, 0xdb, 0x35, 0xb0, - 0xaa, 0x3c, 0x0c, 0xdc, 0x32, 0xf8, 0x82, 0x44, 0xfd, 0x9d, 0x36, 0xbd, - 0x07, 0xea, 0x16, 0x6c, 0x28, 0x52, 0xb1, 0x8c, 0x5d, 0x16, 0x2f, 0x0b, - 0x9e, 0x60, 0x68, 0x1c, 0x64, 0xe0, 0x3e, 0xc9, 0xcb, 0x72, 0x4c, 0x35, - 0x89, 0x0b, 0xde, 0x21, 0xa8, 0xbf, 0x80, 0xb9, 0x44, 0xb7, 0xf3, 0x9c, - 0x66, 0x0d, 0x8c, 0x4a, 0xc0, 0xb0, 0xef, 0x9b, 0xb9, 0x21, 0x5d, 0xe2, - 0x90, 0xa6, 0x78, 0x9b, 0xdd, 0xf6, 0xf1, 0xd0, 0xa2, 0xef, 0x1b, 0x61, - 0x51, 0x6a, 0xc5, 0x00, 0xb7, 0xfd, 0x71, 0xbf, 0x3c, 0xfa, 0x9f, 0x97, - 0xd6, 0x83, 0xaf, 0x3c, 0x5c, 0x7b, 0x71, 0x4c, 0x8b, 0x2e, 0xec, 0xa9, - 0x6f, 0xc1, 0xab, 0x6b, 0x62, 0xaa, 0xdf, 0x09, 0x85, 0x76, 0xf7, 0xb1, - 0x77, 0xe0, 0x7c, 0x57, 0x0b, 0xaa, 0xd2, 0xbb, 0x4b, 0x3c, 0x4d, 0x31, - 0x9e, 0xf3, 0xb8, 0xe4, 0x73, 0x4d, 0x8a, 0x5b, 0xd5, 0x80, 0xca, 0x0d, - 0xd2, 0x74, 0x6c, 0x5e, 0xc1, 0xe2, 0xa5, 0x3b, 0xa5, 0x97, 0xe8, 0xac, - 0x59, 0xd4, 0xe4, 0xe1, 0xac, 0x68, 0x57, 0x95, 0x4b, 0xc1, 0xb1, 0x5d, - 0x87, 0xf9, 0x55, 0x33, 0xc5, 0x19, 0xc5, 0x1b, 0x0a, 0xf8, 0x5a, 0x88, - 0xe8, 0xf4, 0x5b, 0x0e, 0x06, 0x77, 0x36, 0x2e, 0x5d, 0x7e, 0x4b, 0xdd, - 0x6f, 0x05, 0xc3, 0xf3, 0xa5, 0x26, 0x87, 0x65, 0x4d, 0x94, 0x59, 0x70, - 0x4b, 0xbf, 0x42, 0x09, 0x40, 0xc6, 0xad, 0x38, 0x55, 0xec, 0x19, 0x84, - 0x67, 0x81, 0xa3, 0xcf, 0xd8, 0xb6, 0xe1, 0x98, 0xdc, 0x73, 0x68, 0x07, - 0x6c, 0x4c, 0x97, 0x15, 0x50, 0x33, 0x72, 0xa9, 0x0b, 0xd4, 0x1f, 0x08, - 0x8b, 0x9e, 0x6f, 0x29, 0xd9, 0x70, 0x08, 0xfc, 0x8f, 0xfb, 0x79, 0xec, - 0x86, 0x53, 0x1e, 0x74, 0x18, 0x9a, 0xf3, 0xda, 0x7b, 0x6f, 0x5b, 0xbe, - 0x8f, 0x57, 0x9f, 0xb9, 0xaf, 0x17, 0xc6, 0x2e, 0x2d, 0x07, 0xb7, 0x63, - 0x6e, 0xfd, 0x32, 0xf4, 0x39, 0x2d, 0xaf, 0x9a, 0x69, 0x50, 0x01, 0xe9, - 0xdf, 0xb9, 0xe3, 0x10, 0x68, 0x4d, 0xdd, 0xae, 0xac, 0x6c, 0x51, 0xec, - 0x97, 0x6c, 0x84, 0xc2, 0xa3, 0x56, 0x48, 0xfb, 0x5e, 0x35, 0x9f, 0x88, - 0xc5, 0x15, 0xd0, 0x4b, 0xde, 0xd8, 0xd0, 0xd4, 0x85, 0x05, 0xae, 0x2b, - 0xa4, 0x03, 0xab, 0xa6, 0x7b, 0x5f, 0xf3, 0xc3, 0xa6, 0x7a, 0xa0, 0xee, - 0xc5, 0x3f, 0x55, 0x0f, 0x57, 0x8d, 0xf2, 0xa5, 0xa5, 0x7f, 0x86, 0x6b, - 0x86, 0x7e, 0xac, 0xf3, 0xbc, 0x54, 0x07, 0x5a, 0x78, 0xaa, 0x6f, 0x38, - 0xfc, 0x3a, 0x69, 0xd4, 0xbb, 0xb1, 0xf3, 0x94, 0x50, 0x6f, 0xcc, 0x02, - 0xc5, 0x79, 0xfe, 0xa9, 0x36, 0xff, 0xc5, 0x53, 0x15, 0x2d, 0x96, 0xdb, - 0xb0, 0xc9, 0x7f, 0xb2, 0x14, 0x9c, 0x42, 0xe1, 0x13, 0xba, 0x1f, 0x3f, - 0x2a, 0xa4, 0x1b, 0x56, 0x49, 0x5e, 0x1c, 0xd7, 0xdd, 0x11, 0xd4, 0xca, - 0x56, 0x81, 0xc6, 0xd9, 0xb1, 0xf5, 0x93, 0xb0, 0xf9, 0xe4, 0xa9, 0x3a, - 0x18, 0xfb, 0x4d, 0x66, 0xf0, 0xd3, 0x78, 0x61, 0x97, 0x5e, 0x96, 0xbe, - 0x4d, 0x38, 0xa4, 0xd4, 0xbe, 0x14, 0x7c, 0xaa, 0x3b, 0x73, 0xe4, 0xb1, - 0xd2, 0xd8, 0xe7, 0x56, 0x58, 0x29, 0x75, 0x13, 0x54, 0x89, 0x11, 0xe5, - 0x21, 0xea, 0xd9, 0x2d, 0xe7, 0xfa, 0x88, 0x3a, 0x59, 0x1c, 0x44, 0x89, - 0x9f, 0xb8, 0xd8, 0x3a, 0xea, 0x87, 0x52, 0x3d, 0xfb, 0x3d, 0x32, 0xc2, - 0xfc, 0xbd, 0x39, 0x3c, 0xf2, 0x19, 0x4d, 0xf8, 0x86, 0xb3, 0xea, 0x4b, - 0x37, 0x13, 0x82, 0xcd, 0xcb, 0x47, 0x54, 0x13, 0x88, 0xcf, 0xb0, 0xbe, - 0x63, 0xb0, 0xe6, 0x5c, 0x16, 0xd8, 0xda, 0x79, 0x13, 0x06, 0xef, 0x03, - 0x94, 0xc8, 0xea, 0x0c, 0xb8, 0xb3, 0x7b, 0xcc, 0x76, 0xc4, 0x75, 0x42, - 0xa9, 0xf1, 0xfd, 0x43, 0x84, 0xb2, 0xd9, 0xaf, 0x7c, 0xb9, 0x55, 0xed, - 0x15, 0xc1, 0x2f, 0x0d, 0x35, 0x6b, 0x9b, 0x28, 0x5f, 0x06, 0x43, 0x6a, - 0xed, 0xd4, 0x37, 0x72, 0x85, 0xf4, 0xd5, 0xc5, 0xba, 0xa7, 0x57, 0xf7, - 0x94, 0x95, 0xac, 0x70, 0xdd, 0xf8, 0x5e, 0x53, 0x7d, 0x6c, 0x75, 0xec, - 0x23, 0xd3, 0xfc, 0x92, 0x69, 0x35, 0xdd, 0xbf, 0x3a, 0x41, 0x6d, 0x7d, - 0x73, 0x85, 0x5c, 0x2c, 0x97, 0xef, 0xf0, 0x27, 0x35, 0xa7, 0xce, 0x63, - 0xa1, 0xb2, 0xaf, 0x8b, 0x23, 0xf6, 0x87, 0x1e, 0x6d, 0xea, 0xaf, 0x06, - 0x87, 0x85, 0x96, 0xa5, 0x8c, 0x79, 0xfb, 0x7b, 0x2d, 0x8e, 0x27, 0xbd, - 0x25, 0x27, 0x6e, 0x5e, 0xc3, 0x0b, 0xb5, 0xe2, 0x5c, 0x62, 0xc5, 0x1d, - 0xb4, 0xfd, 0x8f, 0xcd, 0x86, 0x3b, 0xc6, 0xd1, 0xa6, 0xc4, 0x7b, 0x1a, - 0xf4, 0x5a, 0x8b, 0x20, 0x06, 0x8c, 0x4b, 0x06, 0xbf, 0x0f, 0xcd, 0x87, - 0x1d, 0xbd, 0xb2, 0x27, 0x40, 0xf7, 0x88, 0x7a, 0x97, 0xb0, 0xe9, 0x4a, - 0x1d, 0xec, 0xcc, 0x77, 0x13, 0x9a, 0x8b, 0xbd, 0xfb, 0x79, 0x1f, 0x7f, - 0x93, 0xc3, 0x0f, 0x84, 0x40, 0x61, 0x54, 0xaa, 0x4b, 0x7e, 0x68, 0x3b, - 0xb5, 0x95, 0xd3, 0x55, 0x8d, 0x2a, 0x6d, 0x3a, 0x71, 0xe0, 0x3e, 0xe5, - 0x4d, 0x53, 0xf1, 0xe5, 0x9e, 0x87, 0xd7, 0xd1, 0x77, 0x46, 0x6e, 0x51, - 0xfd, 0xe5, 0x61, 0xea, 0xab, 0x74, 0xc6, 0xf3, 0x9b, 0xf1, 0x13, 0x70, - 0x57, 0xfc, 0xb9, 0xf6, 0xd7, 0x06, 0x97, 0xb1, 0x05, 0xf1, 0xc2, 0x1a, - 0x4d, 0x0d, 0xc1, 0x1f, 0x41, 0xa9, 0xbf, 0x76, 0x93, 0x8a, 0x60, 0xce, - 0x60, 0xb6, 0xce, 0xd5, 0x76, 0x89, 0x6b, 0x0c, 0xf1, 0x16, 0x90, 0xd3, - 0xc5, 0x08, 0x02, 0x8a, 0x3b, 0x72, 0x57, 0x01, 0x61, 0xb1, 0xf6, 0x72, - 0x06, 0x6c, 0xd2, 0xbd, 0xff, 0xdd, 0x85, 0xd7, 0x3b, 0x75, 0x58, 0x75, - 0xf6, 0xc7, 0x35, 0xce, 0xa9, 0xbd, 0x02, 0xdc, 0xf8, 0xae, 0xfa, 0x70, - 0xb9, 0x04, 0xe4, 0x36, 0xc4, 0x78, 0x08, 0xa6, 0x2d, 0x6c, 0x90, 0xc5, - 0xfd, 0x84, 0x3e, 0x14, 0xd9, 0xd4, 0xdf, 0xfb, 0x62, 0xcc, 0x97, 0x79, - 0x36, 0xa6, 0xc0, 0x7c, 0x6e, 0xb8, 0x73, 0x8d, 0x85, 0x95, 0x56, 0x5f, - 0xc9, 0x3f, 0xfe, 0xa4, 0x89, 0x2f, 0xa6, 0xf6, 0x61, 0xce, 0x54, 0x28, - 0xdb, 0x07, 0x32, 0xee, 0x7d, 0x10, 0x50, 0xc8, 0xd6, 0xd5, 0x58, 0xb3, - 0xc1, 0x15, 0xa2, 0x8b, 0x07, 0xb7, 0xf8, 0xa4, 0x3f, 0xae, 0xb6, 0x08, - 0xc4, 0x04, 0xca, 0xad, 0xf7, 0xb1, 0xa6, 0xbd, 0x95, 0x2b, 0xb8, 0xf1, - 0x8f, 0x6f, 0xaa, 0x0f, 0xad, 0x65, 0x18, 0xec, 0xd9, 0xd8, 0x71, 0x1b, - 0xfa, 0x9f, 0x53, 0x1f, 0xb8, 0x5f, 0x7f, 0xed, 0xb8, 0xbd, 0x31, 0xf7, - 0xf6, 0xe5, 0x2b, 0x16, 0xd4, 0x2e, 0xb1, 0x76, 0x0d, 0x61, 0xbe, 0x4a, - 0x9f, 0x9d, 0xc5, 0x35, 0xa1, 0x9c, 0x3f, 0x5d, 0x0a, 0x70, 0xed, 0xa6, - 0x54, 0x54, 0x52, 0x3c, 0xfd, 0xe1, 0x72, 0x13, 0x4f, 0x7b, 0x25, 0xc6, - 0x64, 0x2d, 0xe1, 0xc3, 0xd4, 0xb2, 0x9f, 0x3a, 0x8d, 0x7d, 0x9c, 0x26, - 0xb7, 0x70, 0xad, 0xb8, 0x79, 0xaf, 0x56, 0x5d, 0x00, 0x0b, 0xdf, 0x2d, - 0x8b, 0xf4, 0x2c, 0xf7, 0x3e, 0x39, 0xd6, 0x38, 0x7a, 0xa6, 0xaf, 0xe0, - 0xe2, 0xfa, 0xaf, 0x5b, 0xee, 0xb8, 0x3b, 0x55, 0xf3, 0xd2, 0x86, 0xb3, - 0xb9, 0xaf, 0xbc, 0x10, 0x63, 0xb7, 0xbf, 0xfc, 0x25, 0x2f, 0x7c, 0x00, - 0xec, 0xc7, 0xfc, 0x6a, 0xd9, 0x45, 0xfc, 0x18, 0xbb, 0x2f, 0x7e, 0xe4, - 0x6b, 0x1c, 0xb8, 0x79, 0xdc, 0xf9, 0x85, 0x1a, 0xdf, 0x6b, 0x14, 0xc7, - 0xdd, 0x57, 0x01, 0x8c, 0x79, 0xa6, 0xc7, 0xa5, 0x32, 0x2f, 0xcf, 0xbe, - 0x2f, 0x10, 0xb7, 0xf7, 0xd5, 0xbf, 0x59, 0x75, 0x91, 0x3c, 0xbb, 0xe9, - 0x2c, 0xd9, 0x6e, 0x1a, 0x4d, 0x7e, 0xbb, 0x5f, 0xf8, 0xdc, 0x26, 0xdd, - 0xce, 0xd6, 0xaa, 0x2f, 0xae, 0xc5, 0x56, 0xf2, 0x72, 0x29, 0xee, 0x57, - 0xda, 0x7a, 0xae, 0x1c, 0x5d, 0x6a, 0xc5, 0x9d, 0x8d, 0x6b, 0xe1, 0x18, - 0x73, 0x69, 0x94, 0xcb, 0xbf, 0xe3, 0xd5, 0x7f, 0x15, 0xd8, 0x2e, 0xdc, - 0x7f, 0xd0, 0x82, 0xdb, 0x58, 0x9c, 0x12, 0xab, 0x6b, 0x4a, 0xe0, 0xc7, - 0x4f, 0x97, 0x7e, 0x68, 0xa4, 0xef, 0xb8, 0xe3, 0x76, 0xc9, 0x2f, 0x1e, - 0x64, 0xb8, 0x4a, 0x22, 0xb4, 0xfc, 0x6b, 0x11, 0x1a, 0x5b, 0x9d, 0xc7, - 0xc9, 0xb2, 0x2b, 0x7f, 0x5c, 0x9b, 0xfc, 0xb2, 0xb5, 0x0c, 0xdf, 0xd2, - 0xff, 0xfa, 0x7c, 0x10, 0x7b, 0x2d, 0xb6, 0x66, 0x77, 0x09, 0xa2, 0x7c, - 0x2e, 0xb1, 0x8c, 0x7f, 0x6a, 0x43, 0x3f, 0x95, 0x01, 0x6b, 0x92, 0xcd, - 0xe3, 0xf2, 0x7b, 0x9b, 0x81, 0x80, 0xe3, 0x7c, 0xaa, 0xd6, 0xad, 0xad, - 0xf5, 0xe2, 0x54, 0x99, 0x34, 0xf6, 0xdc, 0x71, 0x19, 0x0a, 0x42, 0xdf, - 0xf4, 0xf5, 0x03, 0x8f, 0xf9, 0x52, 0x8d, 0xfa, 0x19, 0x4e, 0x65, 0x2f, - 0x3e, 0x6c, 0x6e, 0xb3, 0x57, 0xf8, 0x6a, 0x4e, 0xc9, 0x5c, 0xf2, 0x7b, - 0x1f, 0xe6, 0xcb, 0xb8, 0xb2, 0xe0, 0x01, 0xcd, 0x69, 0xf8, 0x1b, 0x9e, - 0x59, 0xe2, 0xf1, 0xa5, 0xf4, 0xc7, 0x73, 0x42, 0xcc, 0x97, 0xf4, 0xbb, - 0xd5, 0xf4, 0xd7, 0xf7, 0x7e, 0xfc, 0xf5, 0xba, 0x5c, 0x22, 0xdd, 0x2e, - 0x95, 0x7b, 0x6f, 0xab, 0x39, 0xce, 0xfd, 0xf1, 0x6d, 0xed, 0xac, 0x65, - 0xb7, 0xb8, 0xe6, 0x7a, 0x39, 0x86, 0xcb, 0x8f, 0xc7, 0x35, 0xe8, 0xe5, - 0x12, 0xf4, 0xf2, 0x37, 0xe8, 0x32, 0xe8, 0xb0, 0x69, 0x70, 0x7d, 0xfd, - 0x37, 0x16, 0x4b, 0x9a, 0x17, 0x8b, 0xa2, 0x9d, 0x45, 0x67, 0x39, 0x13, - 0xec, 0x7e, 0xfe, 0x33, 0x33, 0xac, 0x76, 0xb5, 0x72, 0xec, 0xe5, 0xd2, - 0x86, 0x76, 0x9c, 0x6b, 0xfe, 0x53, 0x46, 0x1f, 0xbc, 0x21, 0xde, 0x9c, - 0x38, 0x7b, 0x36, 0x76, 0xbb, 0x0e, 0xd5, 0xb2, 0xba, 0x78, 0xd8, 0x86, - 0xab, 0x87, 0x96, 0x44, 0x2c, 0x24, 0x5e, 0x8b, 0x50, 0x36, 0x7f, 0x02, - 0x3c, 0xfb, 0xf0, 0x2e, 0x59, 0xf0, 0xb1, 0x0e, 0xa1, 0x6b, 0x60, 0xd8, - 0x4f, 0xed, 0xf2, 0xbb, 0xb2, 0xb5, 0x63, 0x93, 0x4d, 0x7c, 0x3f, 0x94, - 0xcd, 0xf7, 0xf5, 0xaf, 0xac, 0x17, 0xc1, 0x04, 0x6c, 0xea, 0x42, 0x2f, - 0xa5, 0x97, 0xb8, 0x82, 0xd3, 0xb2, 0x0b, 0xf9, 0x5e, 0xe4, 0x34, 0x76, - 0x5b, 0xf3, 0xd2, 0xf5, 0xe3, 0x36, 0xa3, 0xbb, 0xca, 0x74, 0x05, 0x9b, - 0xd1, 0x7d, 0xf1, 0x94, 0x72, 0xc4, 0x02, 0xaf, 0x33, 0x97, 0xcc, 0x71, - 0x9b, 0xe9, 0xaf, 0x8f, 0xc6, 0x6e, 0x73, 0xff, 0xdc, 0xe6, 0xc5, 0x2a, - 0x5d, 0xd9, 0xfa, 0xfb, 0xbe, 0x0f, 0x31, 0xd3, 0xc8, 0xc7, 0xff, 0xc9, - 0xaf, 0xe3, 0x92, 0x5f, 0x9f, 0x74, 0x99, 0x06, 0x40, 0x87, 0x75, 0x9f, - 0x7e, 0xf1, 0x91, 0xdc, 0xd2, 0xf6, 0x53, 0x80, 0xfb, 0x2f, 0x21, 0x3b, - 0xf5, 0x1e, 0x1f, 0x7f, 0x26, 0x31, 0xb4, 0xf1, 0x68, 0x0d, 0x5f, 0x66, - 0xe7, 0xd6, 0x49, 0x6b, 0xcb, 0x2d, 0x42, 0x1b, 0xf7, 0x8b, 0x84, 0x79, - 0x4c, 0x97, 0x5e, 0xe5, 0x98, 0xd6, 0xbe, 0x97, 0x23, 0xdb, 0xc5, 0xa4, - 0x1b, 0xef, 0x17, 0x07, 0xfd, 0xa6, 0x46, 0x28, 0x9d, 0x24, 0x9c, 0x6f, - 0x97, 0x09, 0xd3, 0x71, 0x5d, 0x14, 0xc6, 0xc5, 0xa0, 0xd8, 0xec, 0x14, - 0x73, 0x71, 0x0b, 0x8d, 0x32, 0xd1, 0x8b, 0x3f, 0x86, 0x4e, 0x24, 0x79, - 0xf8, 0xa9, 0x6d, 0xa2, 0x57, 0xea, 0xa3, 0x78, 0xa4, 0xe1, 0xd9, 0xf0, - 0x6d, 0xf0, 0xca, 0x61, 0x90, 0x6f, 0x5c, 0xd5, 0x10, 0xd2, 0xcd, 0x33, - 0xeb, 0x91, 0xb0, 0xb3, 0xe5, 0xd9, 0x1e, 0xcc, 0x19, 0xcc, 0x74, 0xbf, - 0xcc, 0xa7, 0x60, 0x55, 0x75, 0x04, 0x8a, 0x4f, 0xe3, 0x1e, 0xa8, 0xdf, - 0x00, 0x03, 0xbf, 0xfe, 0x61, 0xda, 0x87, 0x3f, 0x70, 0x29, 0xf6, 0xb8, - 0x24, 0xbb, 0xc9, 0x6b, 0xc2, 0x17, 0xc7, 0x36, 0xf3, 0xeb, 0x43, 0x36, - 0x36, 0x3e, 0xeb, 0x9e, 0x2f, 0xbf, 0xe4, 0x6b, 0x5e, 0x3c, 0x2e, 0x69, - 0x8f, 0xa7, 0x01, 0xc9, 0x3c, 0x87, 0xa9, 0xff, 0xad, 0x3e, 0x08, 0x51, - 0xb9, 0xae, 0xfa, 0x85, 0x45, 0x0b, 0xf8, 0xc9, 0xb3, 0x5a, 0x42, 0x7d, - 0xa0, 0xe9, 0x7e, 0xfd, 0xcc, 0x67, 0xba, 0xd7, 0x7c, 0x7e, 0x72, 0x51, - 0xae, 0x7a, 0x5b, 0xb6, 0xd4, 0xe0, 0x9f, 0xc8, 0x96, 0xcb, 0x96, 0x8e, - 0xdb, 0x5c, 0xc3, 0x2d, 0xad, 0xcc, 0x9e, 0xe3, 0x70, 0xc1, 0x7b, 0xe7, - 0x6e, 0xe4, 0x79, 0xcc, 0x08, 0x78, 0x9c, 0xaa, 0xbc, 0x07, 0xae, 0x5f, - 0x42, 0x24, 0x1f, 0xb9, 0xca, 0xad, 0x96, 0x3e, 0x3a, 0xf0, 0xd7, 0x04, - 0x4c, 0x7d, 0xe6, 0x4d, 0x97, 0x4c, 0xc8, 0x9d, 0x18, 0x29, 0xb6, 0xc6, - 0x81, 0x4d, 0x7c, 0xdf, 0xc1, 0xae, 0x5c, 0x1f, 0x91, 0xdb, 0x54, 0xcf, - 0x2f, 0x1b, 0xc1, 0x3a, 0xd6, 0x7b, 0x19, 0xe8, 0x0c, 0x7f, 0xf9, 0xc2, - 0x8f, 0xe3, 0xea, 0x04, 0x2b, 0xa6, 0x97, 0x86, 0x04, 0xc5, 0xe2, 0xb7, - 0x3f, 0xd1, 0xb8, 0x4d, 0xf3, 0xc4, 0x73, 0xaa, 0xfd, 0xef, 0x4b, 0xba, - 0xfc, 0x6c, 0x42, 0x58, 0x5b, 0x0e, 0x80, 0xc5, 0xff, 0x89, 0xe2, 0x93, - 0xca, 0xd0, 0xfd, 0xce, 0xa7, 0x52, 0x88, 0x75, 0x7a, 0x97, 0xa8, 0xd7, - 0xb9, 0xee, 0x36, 0xf7, 0x96, 0x1b, 0x73, 0xb7, 0xc5, 0x0e, 0x8e, 0xc2, - 0x57, 0x5f, 0x40, 0x61, 0xd5, 0xd7, 0x0c, 0xb7, 0xbb, 0x16, 0x0e, 0x8e, - 0x91, 0x3b, 0xda, 0x7a, 0xeb, 0xad, 0x06, 0xd5, 0x3d, 0x2b, 0x41, 0x3e, - 0x3f, 0x72, 0xa9, 0x75, 0x13, 0xba, 0x4c, 0xbc, 0x07, 0x7b, 0x24, 0xee, - 0x98, 0xf4, 0xa9, 0x58, 0xff, 0xcc, 0xb5, 0xdd, 0xa6, 0x7e, 0xfb, 0xda, - 0x6d, 0x09, 0x88, 0x4b, 0x97, 0xdf, 0x5a, 0x75, 0xec, 0xa6, 0xb3, 0x0f, - 0xbe, 0x35, 0x31, 0xf4, 0xec, 0x36, 0xd6, 0x96, 0xb3, 0x96, 0xe1, 0xd3, - 0xff, 0x06, 0x65, 0x30, 0x35, 0x39, 0x97, 0x4d, 0x17, 0xf2, 0xdb, 0xd6, - 0x71, 0x63, 0xef, 0xb3, 0x5c, 0x3a, 0x6e, 0xa8, 0xe5, 0xe8, 0xab, 0x0e, - 0xb9, 0x6e, 0xd2, 0x8a, 0xf9, 0x1b, 0xc5, 0xfb, 0x3e, 0x6f, 0x2f, 0x12, - 0xfe, 0x23, 0x69, 0x13, 0x20, 0xbe, 0x8f, 0xbb, 0x00, 0x8d, 0xab, 0x8f, - 0xb1, 0xf4, 0xec, 0x25, 0xb0, 0x63, 0x7a, 0xb6, 0xb7, 0xc1, 0x68, 0xb5, - 0x5f, 0xb7, 0x7e, 0x64, 0xd1, 0x1a, 0x6d, 0x27, 0x88, 0x3e, 0x54, 0xd3, - 0xfb, 0xd4, 0xec, 0x3c, 0xa6, 0x3a, 0x34, 0xc7, 0xa5, 0x1f, 0xd8, 0x3a, - 0x8b, 0x3e, 0x11, 0xb2, 0xac, 0x4d, 0xeb, 0x93, 0xa6, 0xbc, 0xb6, 0x08, - 0x3f, 0x7d, 0xe6, 0x7e, 0xae, 0xb5, 0xfe, 0x93, 0x8f, 0xae, 0xaf, 0xf9, - 0x41, 0x72, 0x22, 0xd5, 0x60, 0x7a, 0xb7, 0x23, 0x4f, 0x90, 0x74, 0x83, - 0xae, 0xd9, 0xac, 0x78, 0x41, 0xbe, 0x77, 0x73, 0x7f, 0x4b, 0x37, 0xb2, - 0x98, 0xae, 0x3a, 0x90, 0xc9, 0x65, 0xec, 0xbd, 0x3f, 0xd9, 0x07, 0xee, - 0x5d, 0xf2, 0xcc, 0xaa, 0xcd, 0x82, 0xc1, 0x51, 0x1a, 0xee, 0x3e, 0xd5, - 0xac, 0x8e, 0x6b, 0xcf, 0x2a, 0x9b, 0xf0, 0xcf, 0x49, 0x6a, 0x97, 0xf7, - 0x6e, 0xd1, 0xbb, 0xef, 0xe6, 0xb1, 0x0f, 0xec, 0x06, 0xf5, 0x45, 0xd5, - 0xed, 0x0e, 0x19, 0x1e, 0x5f, 0x2d, 0x29, 0xed, 0x80, 0xcb, 0x63, 0x5c, - 0xa1, 0x79, 0xc1, 0x9b, 0x80, 0x75, 0x23, 0xaf, 0x4b, 0x84, 0xdb, 0x65, - 0x4f, 0x1a, 0x7c, 0xb7, 0x85, 0x07, 0xb6, 0x53, 0x56, 0x2b, 0x9b, 0x1b, - 0xf4, 0x2f, 0x75, 0x2e, 0x4c, 0x30, 0x58, 0x7a, 0xb6, 0x2d, 0x7a, 0x3e, - 0xf8, 0x2c, 0x54, 0x3f, 0xdf, 0xa0, 0x4d, 0xed, 0xa9, 0xf0, 0x0a, 0xd4, - 0x78, 0xa9, 0x2f, 0x78, 0x0c, 0xaa, 0x5c, 0x06, 0x1e, 0x3c, 0x8c, 0xf4, - 0x3a, 0x4a, 0x1f, 0x21, 0x37, 0xac, 0x8e, 0x6b, 0xa2, 0xf0, 0xb4, 0xd0, - 0xab, 0xf4, 0x01, 0xf5, 0x33, 0x73, 0x9c, 0xa6, 0x4a, 0x78, 0xe4, 0xb9, - 0x0b, 0xc5, 0x1f, 0x8b, 0x11, 0x83, 0x13, 0x74, 0x7b, 0x1f, 0xe9, 0x5a, - 0xb7, 0x13, 0xc0, 0xf4, 0xab, 0x31, 0xe4, 0x4b, 0xe7, 0xb5, 0xcd, 0x16, - 0xc0, 0xe5, 0xee, 0x17, 0xad, 0x3f, 0x5d, 0xd2, 0xb9, 0xf5, 0xf5, 0xc5, - 0xb8, 0x75, 0xe8, 0x4e, 0x04, 0xc1, 0x26, 0xf7, 0x25, 0xd7, 0xbd, 0xe7, - 0x1d, 0xfc, 0x62, 0x13, 0xbf, 0xed, 0x7d, 0xe9, 0x0e, 0x47, 0x1c, 0xd6, - 0xb8, 0x06, 0xb3, 0xe7, 0xd2, 0xfb, 0xea, 0x67, 0x5d, 0x8d, 0xbf, 0xe4, - 0xb2, 0xf5, 0xbf, 0xb7, 0x56, 0x4a, 0xfd, 0x8c, 0xaa, 0x72, 0x67, 0xe5, - 0xae, 0x6b, 0xde, 0x0f, 0x2c, 0xa4, 0xd5, 0xdc, 0xfa, 0x8c, 0x17, 0xd9, - 0x82, 0x7c, 0x73, 0x77, 0x2d, 0xdb, 0x0f, 0xb4, 0xd0, 0x3a, 0x3c, 0xa6, - 0x16, 0x23, 0x4f, 0xa6, 0x5d, 0x98, 0x1a, 0x57, 0x3e, 0x6e, 0x21, 0x61, - 0x5a, 0xbf, 0xf9, 0x55, 0xa1, 0x6f, 0xb3, 0x3d, 0x8e, 0x38, 0xf2, 0x26, - 0xe8, 0xa9, 0x40, 0x37, 0xd8, 0x98, 0xcb, 0xb6, 0xba, 0xd8, 0xfa, 0xdb, - 0x65, 0x00, 0xbc, 0x6e, 0x9f, 0xe0, 0x41, 0xd9, 0x52, 0x99, 0x1b, 0xf4, - 0xa7, 0x45, 0x8a, 0x2b, 0x47, 0x7f, 0x7a, 0x57, 0x5d, 0xb0, 0x9f, 0x54, - 0x80, 0xa9, 0xfe, 0xeb, 0x4b, 0x64, 0x60, 0xac, 0x6b, 0x69, 0xd5, 0xcf, - 0xb8, 0x31, 0x8e, 0xab, 0x10, 0xb7, 0x80, 0xbb, 0xce, 0x43, 0xb8, 0xe5, - 0x66, 0x7a, 0x65, 0x91, 0x92, 0x2e, 0x6b, 0x18, 0xe9, 0x5f, 0x13, 0x95, - 0x92, 0x2f, 0xd9, 0x37, 0x4f, 0x7e, 0xb9, 0xca, 0xd3, 0x07, 0xa9, 0xaa, - 0x82, 0xea, 0xe7, 0x2a, 0x62, 0xa6, 0xa9, 0x4a, 0x98, 0x7a, 0x1f, 0xfe, - 0x52, 0x17, 0xfc, 0xc9, 0xf8, 0xe9, 0x94, 0xac, 0x64, 0xec, 0xa7, 0xfb, - 0xed, 0xd2, 0xf7, 0xa4, 0xe9, 0xd2, 0xf6, 0x53, 0x4c, 0x00, 0xa1, 0xc1, - 0xe8, 0xd5, 0x59, 0xdb, 0x7c, 0x38, 0x9a, 0xad, 0x31, 0x6d, 0xfd, 0x2a, - 0x4d, 0xd0, 0xaa, 0xd8, 0x39, 0xbc, 0x66, 0x07, 0x16, 0x0e, 0xbb, 0x63, - 0x1e, 0x09, 0x0f, 0x8c, 0x7e, 0xf5, 0x2c, 0x8f, 0xad, 0xd7, 0x81, 0x0e, - 0x16, 0xd0, 0xd6, 0xd3, 0x78, 0x48, 0x15, 0xcd, 0x79, 0xd7, 0x20, 0x52, - 0x3c, 0x5e, 0x5c, 0x71, 0x73, 0xd6, 0x4e, 0x42, 0x25, 0xa9, 0x78, 0xad, - 0xd5, 0x31, 0x49, 0xaf, 0x6b, 0x4b, 0xdf, 0x3a, 0x16, 0x9d, 0x3c, 0x70, - 0x58, 0xdd, 0x59, 0x7f, 0x7d, 0xb6, 0x64, 0x74, 0x9b, 0x44, 0x60, 0xfa, - 0x92, 0xc5, 0x41, 0xb5, 0xea, 0xb0, 0xdf, 0x6d, 0x32, 0x86, 0xc7, 0x37, - 0xda, 0x8f, 0x8f, 0xdc, 0x75, 0xda, 0x60, 0xbf, 0x1b, 0xe3, 0x7b, 0xbe, - 0x09, 0x2b, 0xaa, 0xf7, 0xce, 0xd1, 0x2b, 0x5e, 0x57, 0x13, 0x57, 0x35, - 0x9d, 0x92, 0xdd, 0xaf, 0x07, 0x29, 0x78, 0x44, 0xcb, 0x83, 0xd9, 0x6b, - 0xe6, 0x2c, 0x7b, 0x71, 0xbb, 0x8b, 0xf4, 0x97, 0x96, 0xcf, 0x78, 0x69, - 0x58, 0xcb, 0x65, 0x98, 0x4f, 0xff, 0xeb, 0xd7, 0xfc, 0xc8, 0x75, 0x6e, - 0xff, 0xd7, 0xa9, 0x66, 0x72, 0xbe, 0xc3, 0xe6, 0xed, 0xa6, 0xcb, 0xfb, - 0x62, 0x43, 0x51, 0xdc, 0x85, 0x55, 0xb8, 0x65, 0xa8, 0xd9, 0xd5, 0x2d, - 0x9a, 0xa4, 0x82, 0x77, 0x58, 0xfb, 0xd4, 0x94, 0xe3, 0xd1, 0x4d, 0x4d, - 0xc4, 0x56, 0xc7, 0x47, 0x9d, 0x72, 0x26, 0xfd, 0xbc, 0x61, 0x23, 0xd4, - 0xb7, 0xcc, 0xb0, 0xba, 0x72, 0xf8, 0x78, 0x80, 0x05, 0xbc, 0xdb, 0xa5, - 0xc2, 0xf1, 0xa5, 0xc0, 0xfe, 0xcb, 0xb6, 0x43, 0x7b, 0x9b, 0x49, 0xbf, - 0xe3, 0xa9, 0xf3, 0x26, 0x7e, 0x90, 0x8d, 0x2c, 0x81, 0xb6, 0xb5, 0xb6, - 0xea, 0x13, 0x6c, 0x73, 0xfa, 0xee, 0xe5, 0x9e, 0x24, 0x7d, 0x1c, 0x50, - 0x37, 0xc4, 0x97, 0xf6, 0xfb, 0x6f, 0xfb, 0x0c, 0xf7, 0x2e, 0xfb, 0x2c, - 0x77, 0x2e, 0x5c, 0xbf, 0xd4, 0x64, 0xec, 0xd6, 0xc3, 0xae, 0x26, 0x7f, - 0xe2, 0x8b, 0xba, 0x75, 0x2f, 0xc3, 0x2d, 0x01, 0x1f, 0x1f, 0xd4, 0x5c, - 0xe2, 0x4b, 0x3f, 0x90, 0x92, 0xda, 0xc6, 0x85, 0x78, 0xf7, 0xf7, 0x33, - 0x40, 0xff, 0x66, 0x8b, 0xf6, 0xe7, 0xde, 0x49, 0xe2, 0xc6, 0xa5, 0xed, - 0x12, 0xf7, 0x4f, 0xec, 0x37, 0xb7, 0xfa, 0xf2, 0x73, 0xbf, 0x2e, 0xd4, - 0x98, 0x45, 0xdb, 0x8c, 0x31, 0x06, 0xab, 0x2b, 0x5d, 0x80, 0xc7, 0x76, - 0x75, 0xcc, 0xf5, 0xf3, 0xf8, 0x15, 0x8d, 0xf1, 0xda, 0xbf, 0xfd, 0xa4, - 0xb6, 0xb6, 0x6c, 0x4c, 0xb9, 0xfb, 0x64, 0x2b, 0x70, 0x09, 0xa6, 0x39, - 0xa2, 0xee, 0xc9, 0x4b, 0xa2, 0x71, 0x64, 0xae, 0xfb, 0xdd, 0xb9, 0xe8, - 0x00, 0x7e, 0xde, 0xfd, 0xcc, 0x24, 0xfd, 0x74, 0x22, 0xbe, 0x33, 0xfb, - 0xd8, 0xba, 0x95, 0x9f, 0x75, 0xb8, 0xcc, 0xe6, 0xdd, 0x22, 0x3c, 0x93, - 0xe9, 0xe3, 0xc6, 0xb3, 0x84, 0x2d, 0x38, 0xe7, 0xce, 0xc6, 0x5d, 0x24, - 0x16, 0xb3, 0xea, 0x9a, 0xed, 0x0f, 0x97, 0xed, 0x7b, 0x2e, 0xfc, 0x4d, - 0x79, 0xec, 0x53, 0xbc, 0x4e, 0xf9, 0x4f, 0xa4, 0xd7, 0x2f, 0x6a, 0xdb, - 0x81, 0x86, 0xcb, 0xdf, 0x22, 0xed, 0xf6, 0xf5, 0x20, 0xd5, 0x2f, 0x97, - 0x85, 0x38, 0xda, 0x5c, 0xbf, 0x57, 0x16, 0x7f, 0x1c, 0x74, 0xfe, 0xaf, - 0xa1, 0xff, 0x99, 0xa2, 0xd0, 0xa2, 0xad, 0xd4, 0x19, 0x3b, 0x2e, 0x5d, - 0x6d, 0xec, 0x04, 0x29, 0x63, 0x4a, 0x5f, 0x51, 0xb9, 0xd6, 0x7d, 0x61, - 0xaf, 0xfd, 0xc6, 0x0f, 0x36, 0x0b, 0xbb, 0x78, 0x8e, 0x5b, 0x9b, 0xb0, - 0x57, 0xce, 0x23, 0x3d, 0xa6, 0x96, 0x3d, 0xcf, 0x01, 0x07, 0xd1, 0xba, - 0x90, 0x9e, 0xd0, 0xb7, 0xe0, 0xe9, 0x7b, 0x32, 0x05, 0x97, 0xdf, 0xfe, - 0x9c, 0x8d, 0x7d, 0xe2, 0x54, 0xb1, 0x1a, 0xda, 0x73, 0xb0, 0x79, 0x80, - 0xf2, 0x19, 0x37, 0xa6, 0xae, 0xeb, 0xe6, 0xcf, 0x61, 0x86, 0xb6, 0x2e, - 0x22, 0x64, 0xc7, 0xdd, 0xe1, 0x3e, 0x6c, 0x6e, 0x6b, 0xf5, 0xb9, 0xed, - 0x91, 0x07, 0xdb, 0xbc, 0x6f, 0xf7, 0x1a, 0x0d, 0x5f, 0x39, 0xed, 0x9b, - 0xd1, 0x13, 0x62, 0xc5, 0xe3, 0x1a, 0xdd, 0xde, 0x85, 0xb5, 0xf7, 0x01, - 0x7d, 0xae, 0xdb, 0xfb, 0xb4, 0x70, 0x59, 0xe0, 0x69, 0xdd, 0x9a, 0xfb, - 0xe9, 0x96, 0xcb, 0xfe, 0x2c, 0x96, 0x89, 0xed, 0x02, 0xb0, 0x26, 0xbc, - 0x3c, 0xea, 0x8f, 0xe9, 0xf2, 0x13, 0x65, 0xbd, 0x3e, 0x5d, 0xa9, 0x49, - 0x7f, 0x4f, 0x88, 0x1e, 0x97, 0x44, 0x6b, 0xc6, 0x30, 0xf4, 0x71, 0x95, - 0xb9, 0xbf, 0x5c, 0x60, 0x7c, 0xbe, 0xff, 0xf1, 0x92, 0x5b, 0x78, 0x65, - 0xef, 0x7d, 0x7e, 0xba, 0xa3, 0xa5, 0x60, 0xc7, 0x47, 0xe3, 0x2e, 0x3d, - 0xc4, 0x13, 0xa7, 0xc6, 0xba, 0xa3, 0x56, 0xcf, 0xd6, 0xb1, 0x12, 0x5e, - 0x0b, 0x7c, 0xc4, 0xf2, 0x8f, 0x47, 0x82, 0xcb, 0x65, 0xea, 0x83, 0x38, - 0x6d, 0xba, 0x4c, 0xbc, 0x9f, 0x7a, 0x6b, 0x9d, 0x48, 0x3a, 0x60, 0x05, - 0xbb, 0xd1, 0x0d, 0x9a, 0x29, 0xfc, 0x62, 0x25, 0x99, 0xad, 0x25, 0x7f, - 0x6c, 0xe7, 0x6f, 0x9f, 0xd3, 0xf0, 0xfa, 0x93, 0x86, 0x09, 0x5a, 0xe7, - 0xbc, 0x3a, 0x1b, 0xf3, 0x35, 0x76, 0xbf, 0xe0, 0x86, 0x4e, 0x94, 0x5c, - 0x70, 0xee, 0xd0, 0xfa, 0xb3, 0x2e, 0x6f, 0xc9, 0x76, 0x85, 0x35, 0x8d, - 0xe5, 0xcf, 0x0c, 0xea, 0x69, 0x32, 0xdf, 0x7e, 0x74, 0x09, 0x39, 0x5a, - 0x58, 0x47, 0x9f, 0xbb, 0x93, 0x6e, 0x07, 0x09, 0xd4, 0xf0, 0x8f, 0x5c, - 0xba, 0x55, 0xb5, 0x27, 0x1e, 0xf7, 0x07, 0xa5, 0xc6, 0x07, 0x6e, 0x28, - 0xdf, 0xba, 0xd3, 0x3b, 0xc6, 0xa6, 0x4e, 0xa6, 0x02, 0x3b, 0xd6, 0x31, - 0x0b, 0x9c, 0xd7, 0xfe, 0x5c, 0x9e, 0x69, 0xdc, 0x9b, 0xab, 0x39, 0x68, - 0xed, 0xa3, 0xc5, 0x74, 0x5e, 0xdb, 0x6a, 0x25, 0xd7, 0x2a, 0xfb, 0xe5, - 0xae, 0xb0, 0xe8, 0xb2, 0xc1, 0x6c, 0x3a, 0x21, 0xf0, 0x99, 0xff, 0x1c, - 0xd2, 0xe2, 0x23, 0xc1, 0xd7, 0x3a, 0x5d, 0xac, 0x7c, 0xba, 0x00, 0xc8, - 0x46, 0xf8, 0x78, 0xf0, 0xba, 0xcf, 0x74, 0xaa, 0x9c, 0x5a, 0x1a, 0x77, - 0x3c, 0xba, 0xe2, 0xaa, 0xac, 0xff, 0x9a, 0xd2, 0x43, 0x87, 0x6f, 0x00, - 0xa3, 0x9a, 0x94, 0x6e, 0x53, 0x39, 0x18, 0x77, 0xdf, 0xd5, 0x5b, 0x2c, - 0x3c, 0xd4, 0x92, 0x20, 0xd3, 0xd2, 0xd7, 0x6d, 0xb1, 0x8b, 0xe9, 0x7e, - 0x1a, 0x5b, 0x08, 0xc7, 0xd6, 0x1d, 0xc8, 0x78, 0x1e, 0xaf, 0xcb, 0x0a, - 0xf1, 0xf3, 0x80, 0x06, 0xb8, 0xba, 0x7d, 0xf1, 0x3c, 0xb0, 0x83, 0xe1, - 0x2f, 0xe0, 0xb8, 0xcd, 0xa5, 0xd3, 0xa8, 0x22, 0x01, 0x9b, 0xc1, 0x6b, - 0x28, 0xe5, 0x88, 0xdf, 0xc4, 0x74, 0x19, 0xfa, 0x1a, 0x82, 0xd4, 0xe8, - 0x5e, 0xdc, 0x49, 0xeb, 0x57, 0x93, 0xb0, 0x28, 0x81, 0x8d, 0xd6, 0xca, - 0x5e, 0xc6, 0x99, 0xd7, 0x34, 0xa8, 0x86, 0xbc, 0x26, 0x28, 0x5e, 0x17, - 0x54, 0xbd, 0x7b, 0xe1, 0x29, 0x42, 0xd1, 0xa7, 0xda, 0xe7, 0x0b, 0x6b, - 0x24, 0x75, 0x06, 0x2c, 0x2e, 0x3e, 0xcc, 0xda, 0xd9, 0xbd, 0x3f, 0xca, - 0x09, 0xbe, 0xed, 0xe9, 0x88, 0xeb, 0x12, 0x65, 0x83, 0xd4, 0xe1, 0x0b, - 0xd7, 0x8e, 0x23, 0x41, 0xd4, 0xe4, 0x2b, 0xb0, 0x5e, 0x04, 0x46, 0x4e, - 0x68, 0xfa, 0x1a, 0x06, 0x8b, 0x6b, 0x0d, 0xa3, 0x76, 0xec, 0xbd, 0x77, - 0xf0, 0xa9, 0x09, 0x48, 0xaf, 0xa1, 0x5c, 0x93, 0xd0, 0xbd, 0x3d, 0x0e, - 0xfe, 0x40, 0x1b, 0xdb, 0x93, 0xd2, 0x74, 0xb4, 0x13, 0xb8, 0x86, 0x75, - 0xb0, 0xfa, 0x75, 0xec, 0xd4, 0x89, 0x55, 0x7d, 0x9c, 0xf3, 0x32, 0xa8, - 0x10, 0x75, 0xa8, 0xad, 0x15, 0xa3, 0xf3, 0xad, 0xb2, 0x5f, 0x4f, 0xbd, - 0x91, 0xeb, 0xee, 0xf2, 0xe0, 0xd8, 0x22, 0x8e, 0xbd, 0x74, 0x0e, 0xb0, - 0xd6, 0x37, 0xac, 0xc2, 0xe5, 0xcf, 0xe9, 0x48, 0xd9, 0x78, 0x44, 0xbf, - 0xd0, 0xd9, 0xd6, 0xfd, 0xe6, 0x2f, 0x2f, 0x13, 0x5e, 0x2a, 0x02, 0xa4, - 0xf1, 0xc7, 0x35, 0x95, 0x6e, 0xd3, 0x56, 0x7a, 0xf1, 0x9c, 0xc8, 0x1f, - 0x17, 0xb1, 0xfa, 0xfc, 0xc6, 0x6b, 0x4f, 0x4e, 0xfb, 0x62, 0x11, 0x5f, - 0x39, 0x2e, 0xf2, 0x5c, 0x7e, 0xe7, 0xc2, 0x0e, 0xde, 0x72, 0xed, 0xec, - 0x70, 0x43, 0xcf, 0xf2, 0x26, 0x62, 0x71, 0xb6, 0x4f, 0x2c, 0xf4, 0xa7, - 0xd4, 0x54, 0xe0, 0x31, 0x89, 0xb7, 0x55, 0x47, 0x55, 0xc3, 0xf7, 0x61, - 0x4d, 0x3c, 0xdc, 0x01, 0x7b, 0x4b, 0x32, 0x7c, 0xd9, 0xf6, 0x32, 0x9e, - 0x37, 0x26, 0x97, 0x3f, 0xaf, 0x8a, 0x57, 0x1b, 0x85, 0x0e, 0x81, 0x80, - 0x2f, 0x78, 0xb5, 0xf4, 0x8d, 0x0f, 0x6a, 0x8c, 0xea, 0xc2, 0x1a, 0x71, - 0xa2, 0xb1, 0xcb, 0x18, 0xf2, 0xe3, 0x85, 0xc7, 0x82, 0x50, 0x5f, 0x4a, - 0xae, 0x47, 0xbd, 0xa2, 0xfd, 0xed, 0xf8, 0x68, 0x4b, 0xd3, 0xc1, 0xed, - 0xcd, 0xe5, 0x65, 0xb9, 0x80, 0x7c, 0xd7, 0xbb, 0xd8, 0xd4, 0x0c, 0x6f, - 0x74, 0xb7, 0x02, 0x1b, 0xe7, 0x6b, 0xb2, 0xe6, 0x3f, 0xc7, 0xcf, 0xc7, - 0x19, 0x79, 0xe5, 0x35, 0x39, 0x18, 0x77, 0x3a, 0xb7, 0x25, 0x42, 0x63, - 0xda, 0xe2, 0x81, 0x33, 0x2d, 0x4e, 0x1c, 0xed, 0x8b, 0xf0, 0x81, 0x7f, - 0xbb, 0xdf, 0x56, 0x3f, 0xb2, 0x02, 0x34, 0xd6, 0x85, 0x4c, 0x70, 0x9d, - 0x68, 0x2d, 0xb6, 0xfb, 0x31, 0x5d, 0x17, 0xf7, 0xdd, 0xa6, 0x77, 0x50, - 0xfe, 0x7c, 0xc6, 0x9a, 0xfa, 0x55, 0x6f, 0xf1, 0x7d, 0x66, 0xe3, 0x4c, - 0x60, 0xe7, 0xbf, 0x5f, 0x4a, 0x1b, 0xe7, 0x8b, 0x9c, 0x3f, 0xea, 0x1c, - 0x60, 0xe3, 0x7c, 0xa3, 0xe4, 0x9a, 0x9e, 0x6a, 0xd9, 0xc5, 0x50, 0xe2, - 0xcd, 0x0f, 0xb1, 0x98, 0x0f, 0x5c, 0x92, 0x78, 0x5c, 0x8b, 0x62, 0x3d, - 0x2e, 0x5d, 0xc0, 0xe8, 0x27, 0xff, 0x3a, 0x2f, 0x7f, 0x8f, 0x8c, 0x8f, - 0x38, 0xbb, 0x77, 0x39, 0x72, 0xe3, 0x87, 0x5b, 0xf7, 0xc0, 0x7b, 0x4b, - 0xc0, 0x72, 0x9f, 0xfa, 0x9a, 0xd3, 0x9f, 0xed, 0x1b, 0xff, 0x1e, 0xed, - 0x1b, 0x79, 0xc4, 0x60, 0x8b, 0x48, 0xae, 0xcb, 0xdb, 0x23, 0xf7, 0x15, - 0x5a, 0xb8, 0x58, 0x10, 0xed, 0x56, 0x29, 0x47, 0xad, 0x53, 0x7e, 0x3a, - 0xb6, 0xad, 0x89, 0x82, 0xd3, 0xe3, 0xdb, 0x7d, 0xad, 0x70, 0xcb, 0xcb, - 0x77, 0x98, 0xd0, 0xd9, 0x18, 0xc8, 0xfd, 0x7d, 0xeb, 0x71, 0x8b, 0x2e, - 0xb3, 0x28, 0xf3, 0x97, 0xf8, 0xb5, 0x2d, 0x84, 0x04, 0xd3, 0x07, 0x7d, - 0x15, 0x16, 0x47, 0x88, 0x73, 0xf3, 0x3c, 0x5c, 0x82, 0x97, 0xcd, 0x74, - 0x75, 0xd4, 0x85, 0x39, 0x1d, 0xed, 0x8b, 0x5c, 0x12, 0xea, 0x73, 0xef, - 0xd9, 0x4d, 0xb1, 0xc6, 0x3f, 0x43, 0xb6, 0xf3, 0xcd, 0xf1, 0xdf, 0xc1, - 0x20, 0x6c, 0x6a, 0x04, 0xc1, 0xc6, 0xaf, 0x6d, 0x0f, 0x7b, 0xfc, 0x3f, - 0x3d, 0x70, 0xb5, 0x69, 0xe1, 0xff, 0x3b, 0xfe, 0x64, 0xad, 0x59, 0xb8, - 0xdb, 0xdc, 0x9f, 0x2e, 0x1f, 0x71, 0xea, 0x6e, 0x0f, 0x54, 0x3a, 0xeb, - 0x6e, 0xea, 0x5e, 0x39, 0x0f, 0x01, 0x27, 0xde, 0x8f, 0xce, 0xe9, 0xdf, - 0xbd, 0xba, 0x91, 0xa7, 0xf7, 0xab, 0xe7, 0xcb, 0xf6, 0x06, 0x58, 0x9e, - 0xad, 0xee, 0x86, 0x36, 0xd9, 0x8d, 0x5d, 0x85, 0xd9, 0xa1, 0x01, 0xf0, - 0xcf, 0xea, 0xc8, 0xc5, 0xb6, 0x2f, 0x25, 0x58, 0xeb, 0x65, 0x8d, 0x60, - 0xaf, 0x5b, 0xa9, 0x57, 0xab, 0x16, 0xd6, 0xb3, 0xcf, 0x53, 0xce, 0xad, - 0xf7, 0xfd, 0xff, 0x63, 0xb1, 0x5f, 0x62, 0x5a, 0xf3, 0x74, 0xf9, 0x96, - 0x72, 0xe9, 0x28, 0x68, 0x51, 0xd2, 0xfe, 0x37, 0xd9, 0xb0, 0xbb, 0x64, - 0x90, 0xd9, 0xf1, 0x34, 0xd2, 0xe3, 0x62, 0xf5, 0x69, 0x1b, 0x96, 0x3d, - 0x5f, 0xe5, 0xc0, 0xde, 0xb2, 0x59, 0x41, 0xf5, 0x4e, 0xfa, 0x53, 0x00, - 0x3b, 0xfa, 0xa1, 0xb2, 0xfd, 0x7f, 0xec, 0xae, 0x71, 0x1e, 0xe3, 0xd5, - 0xdf, 0xe7, 0x3a, 0xf5, 0x85, 0x85, 0xf5, 0x28, 0xfd, 0xd7, 0xc8, 0xa2, - 0xcb, 0x7f, 0xe8, 0xa5, 0xe8, 0xba, 0xa7, 0x72, 0x1d, 0xc6, 0x47, 0xd7, - 0x07, 0x7b, 0xb1, 0x49, 0xb8, 0xc8, 0xda, 0x05, 0x1a, 0x36, 0x7d, 0xa8, - 0xa5, 0xbb, 0x83, 0x02, 0x6e, 0xbf, 0x7a, 0xb8, 0x8a, 0x4e, 0xb2, 0xf0, - 0xc2, 0xfd, 0x87, 0x77, 0x42, 0x24, 0x06, 0x58, 0xad, 0xcf, 0x01, 0xf8, - 0x1b, 0x9e, 0x2e, 0xc5, 0xe2, 0xe5, 0x3d, 0x38, 0xaa, 0xbe, 0xc2, 0xab, - 0x8e, 0x5d, 0xf0, 0x3a, 0xf1, 0x10, 0x53, 0xa0, 0xeb, 0xf9, 0x07, 0x74, - 0x49, 0x8f, 0x8b, 0xcc, 0x34, 0xf1, 0x71, 0x8c, 0xd1, 0x25, 0x55, 0xe7, - 0x2e, 0xbf, 0x3f, 0xfd, 0x97, 0xb9, 0x13, 0xef, 0xda, 0x7b, 0x31, 0x64, - 0xfe, 0x77, 0x74, 0xfb, 0x01, 0xba, 0x11, 0xeb, 0x49, 0x24, 0x9e, 0x5a, - 0x60, 0x60, 0xdb, 0xd8, 0x8e, 0x53, 0x10, 0xaf, 0xde, 0xe3, 0xf8, 0xba, - 0xc6, 0xfd, 0x33, 0x76, 0x9b, 0xd2, 0x53, 0xbe, 0x77, 0xf8, 0xa5, 0x85, - 0x13, 0xbf, 0xe4, 0x1a, 0x49, 0xb9, 0x5e, 0x79, 0x85, 0xc2, 0x90, 0x22, - 0xf0, 0x09, 0x70, 0xc6, 0xc2, 0xc6, 0x74, 0xdc, 0x20, 0xc6, 0x69, 0x4c, - 0x10, 0x73, 0x89, 0xfc, 0x68, 0x37, 0xe5, 0xa7, 0xfa, 0x8c, 0x94, 0x98, - 0xeb, 0xd0, 0x3d, 0x1d, 0x2f, 0xf8, 0xbe, 0xf8, 0x85, 0x5e, 0x87, 0x56, - 0xad, 0xc8, 0xd7, 0xa9, 0x82, 0xb8, 0xde, 0x75, 0x5c, 0xf4, 0xa2, 0x28, - 0xd4, 0xff, 0x72, 0x5e, 0x04, 0x4d, 0xb2, 0x5e, 0xae, 0x78, 0x17, 0xd0, - 0x9a, 0x77, 0xf4, 0x53, 0xf3, 0xf0, 0x2f, 0x47, 0x79, 0x60, 0xfe, 0x7b, - 0xf9, 0x94, 0x99, 0x57, 0x9b, 0x9b, 0x53, 0xe7, 0xce, 0xc6, 0x35, 0x9f, - 0x53, 0xdf, 0x69, 0x39, 0xdf, 0xc2, 0x99, 0xe1, 0x5c, 0xb3, 0x4f, 0x13, - 0xb4, 0xba, 0x6d, 0x0a, 0xc8, 0xa8, 0xcf, 0xfe, 0xac, 0x6c, 0x58, 0x34, - 0xbf, 0xcb, 0x81, 0x35, 0x33, 0x9f, 0xae, 0x37, 0xd6, 0x45, 0xf9, 0x50, - 0x9a, 0x15, 0xe8, 0x92, 0x8a, 0x02, 0xe5, 0xfa, 0xa9, 0xc7, 0xff, 0x9f, - 0x9f, 0xfb, 0x74, 0x96, 0xfe, 0x18, 0xf5, 0x3c, 0xe0, 0x79, 0x92, 0x6e, - 0x86, 0x18, 0x16, 0x35, 0x80, 0x2d, 0xd2, 0x2c, 0xa5, 0xf7, 0x84, 0xfb, - 0x3b, 0xe9, 0x6d, 0xeb, 0xf8, 0xdc, 0xdd, 0x0b, 0x69, 0xa6, 0xde, 0xe0, - 0xf6, 0x9d, 0xf8, 0xa4, 0x16, 0x32, 0xbe, 0xc8, 0x83, 0x4d, 0xc3, 0x76, - 0xd9, 0xd5, 0x0c, 0x8b, 0xd6, 0xf0, 0xe7, 0x84, 0x11, 0xa1, 0x2f, 0xe2, - 0xd9, 0xa6, 0x2b, 0x2d, 0x6c, 0xce, 0x5d, 0xfa, 0xaa, 0x86, 0x57, 0x46, - 0x2e, 0x5d, 0x9c, 0x76, 0xd7, 0x1b, 0x0a, 0xbd, 0x0d, 0xd8, 0x44, 0x43, - 0xe5, 0xf6, 0x42, 0x4e, 0xae, 0x9e, 0x01, 0xa0, 0x3d, 0x8b, 0x29, 0x8b, - 0x77, 0x7e, 0x5c, 0x52, 0xd0, 0x4b, 0xc6, 0x33, 0x8f, 0x12, 0x46, 0x28, - 0xdd, 0x53, 0x49, 0x64, 0x5d, 0xdd, 0x20, 0xe1, 0xd8, 0x0b, 0xf1, 0x33, - 0x9e, 0x21, 0xba, 0x4c, 0xe4, 0xe7, 0x71, 0x83, 0xde, 0xa0, 0xcf, 0x1f, - 0xab, 0xae, 0x6f, 0x9e, 0x2f, 0x7d, 0xc1, 0x9c, 0xbb, 0x5f, 0xf2, 0xe3, - 0x72, 0xa8, 0x8b, 0xfc, 0xd2, 0xb8, 0xfe, 0xc1, 0x7c, 0x5a, 0xd4, 0xb7, - 0xeb, 0xc5, 0x55, 0xb4, 0x77, 0x41, 0xb6, 0x88, 0xfa, 0x13, 0x9d, 0xf5, - 0xd1, 0x44, 0xe2, 0xcf, 0xa5, 0x9a, 0xf5, 0x0f, 0xe5, 0x81, 0xbf, 0xbe, - 0xd2, 0x44, 0x9b, 0xed, 0x92, 0x91, 0x17, 0x61, 0x79, 0xbe, 0x8a, 0xca, - 0x97, 0x67, 0x54, 0xc4, 0x37, 0x79, 0xf4, 0xf2, 0xc2, 0x42, 0xe5, 0xbd, - 0xe1, 0x4b, 0xcb, 0x7a, 0x07, 0xb7, 0xc6, 0xb5, 0x12, 0x68, 0x8a, 0xc8, - 0x81, 0x2f, 0xfb, 0xa1, 0xff, 0x47, 0x71, 0xb7, 0xac, 0x5a, 0x25, 0xeb, - 0x54, 0x6c, 0x93, 0x39, 0x4a, 0xef, 0xb7, 0x6a, 0xd3, 0xae, 0x5c, 0x73, - 0xda, 0x6b, 0x94, 0xae, 0xfc, 0x94, 0xae, 0x0e, 0x6a, 0xa4, 0xe9, 0x7a, - 0xb1, 0xf6, 0xff, 0x28, 0x5e, 0x6e, 0x56, 0x0a, 0x2e, 0xf5, 0x7e, 0x9b, - 0xf2, 0xdc, 0xc6, 0x55, 0x77, 0x9d, 0x34, 0xf6, 0x47, 0xdf, 0x6d, 0xb3, - 0xe8, 0x92, 0x75, 0xd5, 0x7a, 0x5b, 0x2d, 0x5a, 0x64, 0xe5, 0x73, 0x49, - 0x54, 0xd5, 0x7c, 0x09, 0xa6, 0x29, 0x1f, 0xcc, 0x4b, 0xd3, 0x19, 0x56, - 0xb1, 0x32, 0xaa, 0xab, 0xcd, 0xa1, 0x6a, 0x68, 0xb9, 0x68, 0x04, 0x32, - 0xae, 0x34, 0x15, 0x0c, 0xcb, 0x65, 0xdd, 0x72, 0xc9, 0x97, 0xaa, 0x83, - 0x87, 0xb7, 0xfb, 0x99, 0xbe, 0x55, 0xa3, 0xd2, 0x6d, 0x6f, 0x2e, 0x38, - 0x10, 0x71, 0xf9, 0xdd, 0x84, 0x04, 0x6f, 0xa7, 0x0b, 0xb4, 0x20, 0x36, - 0x87, 0x50, 0xb6, 0xd5, 0x77, 0x26, 0x6e, 0xd3, 0x6a, 0x42, 0xbe, 0x75, - 0x7b, 0x56, 0xf9, 0xc6, 0x03, 0x0d, 0x7d, 0xd0, 0x6e, 0x15, 0x0c, 0xce, - 0x10, 0xf9, 0x17, 0x18, 0x83, 0x9b, 0x2b, 0xd5, 0xeb, 0xe5, 0x1e, 0x0b, - 0xd8, 0xba, 0x5d, 0xef, 0x4c, 0x1f, 0xe9, 0xff, 0x11, 0xc9, 0xf3, 0xed, - 0xb2, 0x4f, 0x9d, 0xef, 0xdd, 0x4c, 0xd0, 0x98, 0x63, 0xf5, 0x51, 0x5c, - 0xb8, 0x46, 0xf3, 0xb0, 0xb6, 0xfc, 0xbc, 0x1c, 0x4e, 0x83, 0x55, 0xcf, - 0x3e, 0x71, 0x52, 0x57, 0xfd, 0x27, 0xf1, 0x25, 0x1d, 0x38, 0x01, 0xd2, - 0x2d, 0xca, 0xe4, 0xee, 0x8c, 0x01, 0x76, 0xa0, 0xfb, 0x70, 0xd6, 0x21, - 0xb6, 0x1e, 0xf0, 0xd8, 0x2d, 0x9a, 0x57, 0xfb, 0x49, 0xfc, 0xe5, 0x73, - 0xd6, 0x5e, 0xec, 0xce, 0x6b, 0x7f, 0x90, 0x31, 0xb8, 0x8b, 0xeb, 0x92, - 0xaf, 0xf2, 0xc5, 0xf5, 0x6e, 0x82, 0x1e, 0x80, 0xfe, 0xed, 0xf8, 0xb1, - 0xdf, 0x29, 0xc9, 0x65, 0x19, 0xda, 0x1b, 0xe4, 0x0b, 0x5f, 0x89, 0xbf, - 0xfc, 0x7e, 0xec, 0xd3, 0xf0, 0xad, 0x61, 0x0f, 0x62, 0x92, 0x5e, 0xf1, - 0x30, 0xfc, 0xed, 0x87, 0x84, 0xf1, 0xe6, 0x7a, 0x73, 0x6d, 0x4c, 0x17, - 0x17, 0x3e, 0xbc, 0xaf, 0x11, 0xe2, 0x55, 0xeb, 0x57, 0xbc, 0x2b, 0x22, - 0x40, 0xd1, 0x5f, 0xf0, 0x7a, 0x92, 0xce, 0xf9, 0x56, 0xbb, 0x65, 0x31, - 0x5d, 0xa2, 0x98, 0x3a, 0xe5, 0x30, 0xc6, 0xad, 0x17, 0xff, 0x6b, 0x8d, - 0xcd, 0x23, 0x28, 0xc3, 0x03, 0xfa, 0x72, 0x5b, 0xfb, 0x81, 0x95, 0xc9, - 0x31, 0xd1, 0x30, 0xc9, 0x9e, 0x3e, 0xfe, 0x81, 0xd9, 0xea, 0x8d, 0x07, - 0x28, 0x21, 0xa1, 0x96, 0xaf, 0x45, 0xea, 0x48, 0x1c, 0x8d, 0xdc, 0x66, - 0x8b, 0x0f, 0x28, 0x35, 0xea, 0xd2, 0x5d, 0xe0, 0x22, 0x87, 0x73, 0x2f, - 0xd5, 0xd7, 0x55, 0xdb, 0x09, 0x2c, 0x6a, 0x10, 0xdb, 0x56, 0xaf, 0x70, - 0x83, 0x61, 0xfd, 0xe8, 0x72, 0x60, 0xbf, 0x6e, 0x7d, 0xad, 0x78, 0x2e, - 0x40, 0xa0, 0x1e, 0x4f, 0x59, 0x13, 0x4f, 0x99, 0xba, 0x70, 0xb2, 0xa6, - 0x69, 0xf7, 0x75, 0xda, 0x7e, 0x9e, 0x68, 0x38, 0x5d, 0x0e, 0x16, 0xbb, - 0x45, 0x4d, 0x93, 0xf6, 0x6b, 0x3d, 0x21, 0x36, 0x0f, 0x4d, 0x97, 0x4b, - 0x25, 0xd5, 0xa6, 0x2b, 0x1d, 0xb7, 0x0a, 0xff, 0xe5, 0xcf, 0x69, 0xff, - 0x6a, 0xd3, 0x05, 0x31, 0xae, 0xb5, 0x0b, 0x69, 0x6c, 0xfc, 0xca, 0xa5, - 0x8e, 0x4b, 0x94, 0xdd, 0x4a, 0x08, 0xb8, 0xee, 0x22, 0xa2, 0xb3, 0x35, - 0xb9, 0x31, 0x2b, 0x92, 0x46, 0xd2, 0x2e, 0x8e, 0x6e, 0x0d, 0x10, 0x5c, - 0xba, 0xe4, 0x00, 0xf8, 0x2e, 0x82, 0x3f, 0x5a, 0x96, 0xc2, 0xe6, 0xfa, - 0xfb, 0xe5, 0x03, 0x57, 0x8a, 0x56, 0x47, 0xd3, 0x7b, 0x40, 0xbb, 0x4b, - 0xb6, 0x82, 0x3f, 0xba, 0x64, 0x93, 0xfd, 0xf3, 0x73, 0xf3, 0xbc, 0x75, - 0x27, 0x1f, 0xc8, 0x76, 0x07, 0xcc, 0x79, 0xc8, 0xb1, 0xad, 0x65, 0x34, - 0xb6, 0x7a, 0xce, 0xcb, 0xb5, 0x01, 0x9a, 0x95, 0xcf, 0xa7, 0x83, 0x3d, - 0x86, 0x3f, 0x5f, 0xd0, 0x5d, 0x52, 0xab, 0x5c, 0x84, 0x87, 0x79, 0x77, - 0xef, 0xb6, 0xbb, 0x93, 0x15, 0x9c, 0x27, 0xdc, 0x86, 0xb7, 0xbc, 0x49, - 0x73, 0xaf, 0x71, 0x97, 0xf3, 0x6c, 0xc6, 0x5d, 0x16, 0x90, 0x9c, 0xef, - 0xea, 0xd1, 0x65, 0xc6, 0x4a, 0xee, 0xfa, 0x63, 0x24, 0x68, 0xea, 0x2f, - 0x39, 0xac, 0xd3, 0xd1, 0xc6, 0xda, 0x35, 0x6b, 0xba, 0xb0, 0x66, 0x3e, - 0x67, 0xd9, 0x3a, 0x47, 0xac, 0x71, 0xd4, 0xa2, 0x81, 0x22, 0x65, 0x4d, - 0x14, 0x79, 0xdf, 0xea, 0xd2, 0x18, 0x74, 0x10, 0x7c, 0xbb, 0xb2, 0x7d, - 0x38, 0x6b, 0x5f, 0xc8, 0xe0, 0x2e, 0xbf, 0x96, 0x0e, 0x5e, 0x9a, 0x2b, - 0xce, 0x84, 0x2e, 0xfb, 0xd5, 0xad, 0x55, 0x8f, 0x53, 0x63, 0xb0, 0x75, - 0xfd, 0xdd, 0xe8, 0x17, 0x5c, 0x57, 0x3e, 0xd6, 0x3d, 0xaf, 0xb9, 0xdd, - 0xd6, 0x5d, 0xb9, 0x30, 0xd7, 0x2f, 0x38, 0x54, 0x9b, 0x2e, 0xcb, 0xdc, - 0xea, 0xaf, 0x93, 0xe9, 0x8f, 0x03, 0x95, 0x39, 0xce, 0xd1, 0xff, 0x3f, - 0xb6, 0xae, 0x75, 0xbb, 0x61, 0x95, 0x57, 0xfe, 0xdf, 0x6f, 0xe9, 0x24, - 0x34, 0x61, 0xd7, 0x31, 0xfe, 0x7c, 0x49, 0x9b, 0x3e, 0xfd, 0x61, 0x66, - 0x24, 0x10, 0xd9, 0x67, 0xad, 0x36, 0x8c, 0x30, 0xc6, 0xdc, 0x11, 0x20, - 0xa4, 0x98, 0x3c, 0xd0, 0x6b, 0x58, 0xdd, 0x57, 0x8f, 0xdb, 0x20, 0x1e, - 0x5f, 0x3d, 0xbe, 0xc6, 0xb2, 0x33, 0x8f, 0x98, 0x82, 0x78, 0x53, 0xc5, - 0xa9, 0x20, 0x2f, 0xb3, 0xc2, 0x9c, 0xc5, 0xe9, 0x70, 0x0d, 0xd7, 0x7c, - 0x30, 0xe1, 0x5d, 0xde, 0x3e, 0x41, 0x6c, 0x14, 0xc5, 0xbf, 0x74, 0x2a, - 0xc4, 0xb9, 0x7f, 0x0c, 0x8c, 0xee, 0x33, 0x24, 0x63, 0xd0, 0x41, 0x48, - 0x3a, 0xb0, 0x1e, 0x9c, 0x5c, 0x6d, 0x0d, 0x5a, 0x71, 0x90, 0x52, 0x03, - 0xd5, 0x37, 0xb0, 0x9c, 0x0a, 0xf5, 0x82, 0x2d, 0xe5, 0x0f, 0x8f, 0x36, - 0xcc, 0xc1, 0x36, 0x47, 0x4c, 0x57, 0x25, 0x7b, 0x4c, 0x45, 0x97, 0xdf, - 0x3a, 0x79, 0x6e, 0x1f, 0x64, 0xa8, 0xec, 0x72, 0x3b, 0xaf, 0x9e, 0xf7, - 0x12, 0xae, 0x31, 0x39, 0x15, 0xbf, 0x5f, 0x86, 0x6d, 0xeb, 0x4a, 0x7f, - 0x4d, 0x4b, 0x7c, 0x5c, 0xc9, 0xf0, 0x2c, 0x34, 0xba, 0x46, 0x85, 0xda, - 0x29, 0x51, 0xde, 0x95, 0xe4, 0x58, 0xd4, 0xf2, 0x98, 0x87, 0xf8, 0xf3, - 0xd1, 0x25, 0x13, 0x69, 0x89, 0xf6, 0xa3, 0x29, 0x6f, 0x25, 0x0a, 0x5c, - 0x55, 0x32, 0xb0, 0x8b, 0x2b, 0x94, 0x9c, 0xd3, 0x08, 0x8b, 0xe7, 0x1c, - 0x5b, 0x4d, 0x43, 0xc9, 0x88, 0x8f, 0x6d, 0x29, 0x02, 0x19, 0xa2, 0xc6, - 0xee, 0xd0, 0xd1, 0x9f, 0xfd, 0xc6, 0x47, 0x51, 0x90, 0x75, 0xdd, 0xa8, - 0x65, 0xb3, 0x55, 0x33, 0xf8, 0xb8, 0xa8, 0x96, 0x94, 0x5e, 0x25, 0x86, - 0x86, 0x49, 0xe8, 0x40, 0x8f, 0x32, 0x94, 0x2b, 0xd4, 0xbe, 0xde, 0xa7, - 0xc5, 0x65, 0x7d, 0x8c, 0x8e, 0x8f, 0xf3, 0x31, 0x06, 0x97, 0x28, 0x53, - 0x9c, 0xe2, 0xab, 0x27, 0x6e, 0xe7, 0x96, 0x2d, 0x52, 0x9e, 0x97, 0x78, - 0x55, 0x65, 0x85, 0x2a, 0xd9, 0x7e, 0xf8, 0x08, 0x32, 0xde, 0x43, 0x07, - 0x1d, 0x67, 0x0f, 0xdb, 0x4c, 0xed, 0x78, 0xeb, 0x45, 0x04, 0x6a, 0xcc, - 0xf5, 0x31, 0xd4, 0x06, 0x6d, 0x94, 0x3b, 0xdc, 0x63, 0x17, 0x2a, 0x51, - 0xfe, 0x8a, 0xe4, 0xb9, 0x7f, 0x50, 0x43, 0xa5, 0x1f, 0x51, 0xe2, 0x2a, - 0xd0, 0x9e, 0x92, 0x57, 0xbe, 0xb5, 0x26, 0xfe, 0x0a, 0x9b, 0x7a, 0x8d, - 0x1c, 0x62, 0xfb, 0xcd, 0xcf, 0x96, 0x89, 0xb3, 0x6d, 0x8b, 0xaf, 0xe7, - 0x25, 0xae, 0xbd, 0x45, 0x7a, 0xb8, 0xb3, 0xe6, 0xbb, 0xb5, 0xdc, 0x73, - 0xde, 0x43, 0xb0, 0x65, 0xd8, 0xbb, 0x37, 0x3a, 0x3c, 0x6e, 0xf2, 0xf6, - 0xeb, 0x19, 0xb5, 0x4f, 0xad, 0xd0, 0x7a, 0x33, 0x68, 0x98, 0x33, 0x9f, - 0x14, 0xf1, 0x66, 0x44, 0xa8, 0xbf, 0x73, 0x14, 0xd3, 0xae, 0xf4, 0x3a, - 0x88, 0xe8, 0x55, 0x8f, 0xbd, 0xb3, 0x0a, 0x50, 0x7a, 0xdf, 0x73, 0xb8, - 0x85, 0xdb, 0xcd, 0x2b, 0x54, 0xd9, 0xf7, 0x1d, 0x45, 0x0a, 0xe3, 0xc6, - 0x88, 0xff, 0xd7, 0xb7, 0x0f, 0x2a, 0x5c, 0x8e, 0x8f, 0x8d, 0x23, 0x88, - 0xcc, 0x79, 0x54, 0x86, 0xdf, 0x0d, 0x7b, 0x1c, 0xbc, 0x43, 0xde, 0xdf, - 0xc0, 0x0d, 0x80, 0x4e, 0x51, 0x09, 0x9e, 0x60, 0x1c, 0x18, 0xb6, 0x91, - 0x7d, 0xc7, 0x3e, 0xcd, 0xf8, 0x34, 0x7d, 0x3c, 0x1e, 0x52, 0xbd, 0x8d, - 0x5b, 0x13, 0x9d, 0x3c, 0x06, 0xb2, 0x45, 0xf6, 0xb9, 0x71, 0x01, 0x85, - 0x57, 0x03, 0x56, 0x8f, 0x82, 0xda, 0xf9, 0x98, 0x0a, 0x92, 0x21, 0x15, - 0xa6, 0x95, 0x5e, 0xc8, 0xc6, 0x2f, 0xca, 0xf5, 0x5a, 0x32, 0x52, 0x4f, - 0x42, 0x97, 0xf6, 0x25, 0x1c, 0x3e, 0xbd, 0x0f, 0x47, 0xaa, 0xee, 0x31, - 0x7c, 0x67, 0x77, 0xf6, 0x7a, 0x4b, 0x97, 0x34, 0x37, 0x30, 0xb7, 0x48, - 0x44, 0xf4, 0x6e, 0xb9, 0xe9, 0x2a, 0xee, 0xd1, 0xfa, 0x4f, 0xf4, 0xb0, - 0xef, 0x5c, 0x53, 0x1d, 0x01, 0x1c, 0xae, 0x3d, 0x41, 0x1f, 0xcc, 0xb8, - 0x7b, 0xb4, 0xf4, 0x5d, 0xc3, 0x83, 0x36, 0x19, 0x68, 0xf2, 0x4f, 0xfd, - 0x6b, 0x81, 0x41, 0x27, 0xd5, 0xc5, 0xea, 0xb6, 0x70, 0x75, 0x17, 0xd8, - 0x36, 0x15, 0x05, 0x43, 0x32, 0xa0, 0x03, 0x2d, 0x90, 0x51, 0x57, 0x12, - 0xc8, 0xec, 0x6f, 0x0d, 0x6a, 0x8a, 0x40, 0xd7, 0x71, 0x76, 0x1e, 0x4a, - 0xd4, 0xbd, 0x62, 0x99, 0xca, 0x2f, 0x0f, 0x5f, 0xf0, 0xf3, 0x33, 0xc8, - 0x93, 0x4f, 0xcb, 0x3d, 0xf0, 0x6d, 0xd5, 0xc7, 0x6e, 0xae, 0x87, 0x18, - 0xce, 0xa8, 0x0a, 0x00, 0x77, 0xd1, 0x9f, 0xa1, 0x14, 0xa1, 0x9e, 0x25, - 0xa6, 0x21, 0x4c, 0xc2, 0x03, 0x8f, 0xb3, 0xa5, 0xa8, 0x54, 0x65, 0x1b, - 0xae, 0xc6, 0x3a, 0x15, 0x2b, 0xe3, 0xab, 0xdf, 0xdf, 0xd8, 0xc6, 0x9b, - 0xb3, 0x95, 0xdc, 0x62, 0x3b, 0xfe, 0xbc, 0xcd, 0x56, 0x7d, 0xce, 0x56, - 0xd6, 0x5f, 0x67, 0x2c, 0xeb, 0xf1, 0x16, 0x2d, 0x69, 0x4b, 0xce, 0x7d, - 0xd8, 0x91, 0xdd, 0x52, 0x54, 0x8b, 0x5a, 0xa9, 0x70, 0x8a, 0xba, 0x25, - 0x93, 0x54, 0x08, 0x3e, 0xd0, 0x4e, 0x1f, 0x2e, 0x2e, 0x54, 0x8f, 0xf1, - 0x92, 0x02, 0x3c, 0x30, 0x47, 0x04, 0x8f, 0x7f, 0x63, 0xf6, 0xc3, 0x29, - 0x96, 0x54, 0x1f, 0xf4, 0xbc, 0xc4, 0x0f, 0x4b, 0x9f, 0x47, 0xc0, 0xad, - 0xd4, 0xe7, 0xe9, 0x37, 0x86, 0xf3, 0xa3, 0xfd, 0x0a, 0xf3, 0xd0, 0x42, - 0xc6, 0xa5, 0x03, 0xe9, 0x56, 0x3f, 0xd8, 0xe7, 0x6b, 0x31, 0x8c, 0x47, - 0x4b, 0xf0, 0x58, 0xa0, 0xca, 0xf8, 0xd1, 0x33, 0xc0, 0xbd, 0xf7, 0x18, - 0x77, 0xf5, 0x68, 0xe8, 0x79, 0x09, 0x3d, 0x32, 0x2c, 0x11, 0x37, 0xbf, - 0x97, 0xdb, 0x1f, 0x9e, 0x63, 0x95, 0x2c, 0xb7, 0xd0, 0xfa, 0x97, 0xf4, - 0xe3, 0x15, 0x39, 0xb2, 0x15, 0x60, 0x89, 0xf3, 0xe6, 0x68, 0x1b, 0xfc, - 0xb1, 0xce, 0x0f, 0xb4, 0x5d, 0x48, 0x17, 0xf2, 0x32, 0x5e, 0x71, 0x2e, - 0xdd, 0xd2, 0x60, 0xd4, 0x3b, 0x50, 0x2d, 0x5c, 0x57, 0xf8, 0x0c, 0xea, - 0xc8, 0x31, 0xe6, 0x0f, 0x09, 0xd7, 0x2d, 0x51, 0x4d, 0x55, 0x2f, 0xa2, - 0x61, 0xbf, 0x7b, 0x4b, 0xff, 0x55, 0x71, 0x1a, 0xfc, 0x62, 0xad, 0x7c, - 0xb2, 0xe5, 0xd1, 0xc7, 0xeb, 0x3f, 0xfa, 0x8c, 0x6f, 0xfe, 0x3f, 0x91, - 0xed, 0x21, 0xa2, 0xbc, 0x7b, 0x91, 0x8e, 0x2c, 0x73, 0xa7, 0x87, 0x08, - 0xcf, 0x38, 0xe3, 0xe1, 0x6e, 0xca, 0x16, 0x32, 0x28, 0xed, 0xd6, 0x21, - 0xb8, 0xa9, 0xbb, 0x0e, 0xc1, 0x5b, 0x4f, 0xdc, 0xaf, 0xb1, 0x19, 0x54, - 0x9e, 0xd2, 0x32, 0x52, 0xbb, 0xcd, 0x65, 0xee, 0x65, 0x3c, 0xac, 0x3f, - 0x44, 0xfa, 0x93, 0x7e, 0x27, 0xd1, 0x89, 0x77, 0x20, 0x0e, 0xc7, 0xf7, - 0x25, 0xbe, 0x9f, 0xe7, 0x1c, 0xdf, 0x9a, 0x73, 0x7c, 0x6d, 0x0f, 0x95, - 0x0b, 0x6a, 0xa8, 0x9a, 0x78, 0xc7, 0x91, 0xd4, 0x6b, 0xfa, 0x78, 0xfc, - 0xea, 0x87, 0x68, 0x50, 0x51, 0x82, 0xd1, 0x74, 0x08, 0x21, 0x9f, 0x58, - 0x19, 0xd0, 0x63, 0x32, 0x36, 0x00, 0xf3, 0x19, 0x02, 0x45, 0x91, 0x0b, - 0x90, 0x25, 0x36, 0xf0, 0xa0, 0x79, 0x88, 0x44, 0x0e, 0x35, 0x18, 0x35, - 0x0a, 0x81, 0x8a, 0x6a, 0x56, 0x40, 0xef, 0xe3, 0xd4, 0x13, 0x6f, 0x46, - 0x81, 0x1a, 0xa6, 0x09, 0x98, 0xd2, 0xff, 0x20, 0x43, 0xd8, 0xbe, 0xf6, - 0x33, 0x22, 0x36, 0x9a, 0xa3, 0x2b, 0x0c, 0x05, 0x11, 0x5b, 0x8c, 0x78, - 0xe3, 0x9e, 0xfd, 0x63, 0x18, 0xca, 0x0f, 0x4c, 0x17, 0x8f, 0x18, 0xba, - 0x44, 0xed, 0xe7, 0xdb, 0x78, 0xf5, 0x07, 0x8b, 0xce, 0x79, 0xa0, 0x96, - 0x7b, 0x0a, 0x70, 0x73, 0x1c, 0x26, 0x21, 0x6e, 0xc9, 0xc4, 0xf2, 0x97, - 0x47, 0x2c, 0xfe, 0xb0, 0x87, 0x53, 0x89, 0x1c, 0xf1, 0xcb, 0x1b, 0x33, - 0x61, 0x63, 0x7a, 0x46, 0x09, 0x07, 0xd1, 0x21, 0x59, 0xb1, 0x1d, 0x3d, - 0xde, 0x92, 0x41, 0xa8, 0xe0, 0x78, 0x88, 0x7d, 0xca, 0xc5, 0x87, 0xa5, - 0x16, 0x3f, 0x8c, 0x6b, 0xf4, 0x33, 0xac, 0xba, 0x24, 0xe8, 0xd1, 0x95, - 0x77, 0xff, 0x70, 0x3f, 0x9d, 0xdf, 0xcc, 0x00, 0x0d, 0x90, 0x94, 0xa9, - 0x85, 0x23, 0xbe, 0xed, 0x1c, 0x0e, 0xcf, 0x20, 0x40, 0x6c, 0x4c, 0x5c, - 0x90, 0x3c, 0xdc, 0x06, 0xb9, 0x43, 0xc8, 0xab, 0xd8, 0xba, 0x7f, 0x9f, - 0xae, 0x54, 0x8d, 0xe9, 0x8b, 0xe3, 0x1d, 0xf6, 0xb1, 0xdb, 0xf1, 0x3e, - 0x28, 0xf0, 0xa8, 0xa9, 0x11, 0xf3, 0x78, 0xaf, 0xb3, 0xae, 0xc7, 0x4c, - 0x5b, 0xed, 0x3e, 0xa8, 0xa8, 0xde, 0xa7, 0x39, 0xb9, 0x3b, 0x7a, 0x87, - 0x2f, 0xcd, 0x1f, 0x92, 0x02, 0xf0, 0x89, 0x39, 0x13, 0xed, 0x89, 0xae, - 0xd4, 0x2b, 0x10, 0xcb, 0xc7, 0xf1, 0x8b, 0x7c, 0x3e, 0x44, 0x67, 0x9b, - 0xe7, 0xbb, 0x53, 0x31, 0xb8, 0xa7, 0xa4, 0xef, 0x14, 0xec, 0xe0, 0x98, - 0xf2, 0x40, 0xb7, 0x50, 0xeb, 0xc7, 0xf6, 0x22, 0x96, 0x52, 0x43, 0xe6, - 0xc2, 0x52, 0x17, 0x84, 0x97, 0xf0, 0x91, 0x07, 0xc9, 0x05, 0x78, 0xec, - 0x5f, 0x53, 0x48, 0x4a, 0x3c, 0x43, 0xdf, 0xaf, 0x38, 0xc8, 0xb4, 0x18, - 0xaf, 0x0f, 0xec, 0xdf, 0x39, 0x2c, 0x5e, 0xb3, 0xe1, 0xcc, 0xcd, 0xf4, - 0xb5, 0xa9, 0xc9, 0xd4, 0xe5, 0x30, 0x8e, 0x52, 0xf5, 0xee, 0x7f, 0x38, - 0xf0, 0x3d, 0x72, 0xba, 0x95, 0x98, 0xeb, 0x02, 0xf2, 0x16, 0x1e, 0xf6, - 0x63, 0x24, 0x23, 0x5e, 0xf1, 0xd5, 0x3a, 0xd6, 0xbc, 0x1b, 0x3c, 0x7a, - 0xc0, 0x76, 0xca, 0xb5, 0xa7, 0xdb, 0xd8, 0x30, 0xf7, 0xcf, 0x7b, 0x5c, - 0x7b, 0xba, 0x0f, 0xd7, 0x56, 0x76, 0x5e, 0x13, 0x0e, 0x64, 0xfe, 0xf3, - 0x56, 0x19, 0xef, 0xfe, 0xee, 0xf1, 0xe2, 0xfb, 0xee, 0x0a, 0x64, 0xf6, - 0x71, 0xae, 0xdd, 0x3f, 0xa6, 0x59, 0xd2, 0x7d, 0x0f, 0xd0, 0xc9, 0xe1, - 0xf1, 0x31, 0xe4, 0x50, 0x1e, 0x31, 0xfc, 0x11, 0x56, 0x38, 0xf0, 0x38, - 0x87, 0xe8, 0xce, 0x21, 0x67, 0xa6, 0x2a, 0x6d, 0xf4, 0xea, 0xb5, 0x64, - 0x84, 0xbd, 0x0c, 0x9e, 0x26, 0x26, 0x9d, 0x74, 0x4c, 0x7b, 0x64, 0x7a, - 0xa0, 0x0a, 0x6f, 0x14, 0xa7, 0x37, 0x1f, 0x7f, 0x1b, 0x4a, 0x5a, 0x8e, - 0x18, 0x7e, 0x33, 0x3d, 0x28, 0xfb, 0x28, 0x34, 0x8b, 0xc9, 0xb6, 0x76, - 0xe5, 0xe1, 0xcb, 0xe6, 0x13, 0xbf, 0x5d, 0xbd, 0x22, 0x09, 0x5b, 0x83, - 0x3e, 0x64, 0x0f, 0xbb, 0xf1, 0x24, 0x3c, 0xa2, 0x47, 0x93, 0x08, 0x81, - 0xd0, 0xc5, 0x6a, 0x10, 0xf5, 0xd3, 0x82, 0x1b, 0xa1, 0xf0, 0x10, 0xb3, - 0xf9, 0xa2, 0x4c, 0x46, 0xfa, 0xa0, 0xc7, 0xe7, 0x2d, 0x53, 0xd9, 0x6d, - 0x2a, 0x12, 0xbf, 0xfc, 0x03, 0x50, 0x4d, 0xde, 0x12, 0x91, 0x29, 0xa1, - 0x61, 0x8a, 0x82, 0xf7, 0x1c, 0xd5, 0x81, 0x8a, 0x1a, 0x63, 0xc4, 0x7d, - 0x96, 0xad, 0xc3, 0xfe, 0x60, 0x58, 0x33, 0x75, 0x0d, 0xe7, 0xfb, 0xb3, - 0xd8, 0x4d, 0xff, 0xbd, 0x5c, 0xfa, 0x1d, 0xfc, 0x1d, 0xe7, 0x91, 0xb6, - 0x61, 0xf5, 0xa1, 0x02, 0x5d, 0x64, 0x28, 0xcd, 0x72, 0xcd, 0x6d, 0x7c, - 0x37, 0x22, 0x84, 0x9c, 0x63, 0xb8, 0x16, 0xe3, 0x7c, 0xcb, 0xfe, 0x55, - 0xe6, 0xa7, 0x27, 0xb4, 0x7c, 0x5e, 0x23, 0x93, 0xc2, 0xc3, 0x96, 0x72, - 0x50, 0x63, 0x9e, 0xeb, 0x5c, 0x35, 0x24, 0xa7, 0x4f, 0x5d, 0x1f, 0x0c, - 0x90, 0xc8, 0x21, 0xe8, 0xab, 0xb5, 0x5f, 0x62, 0xcb, 0xc3, 0x0a, 0xd9, - 0x92, 0xa1, 0x67, 0xe1, 0xd8, 0x14, 0x77, 0x94, 0x48, 0xac, 0x1f, 0x2d, - 0x17, 0x67, 0x80, 0x3d, 0xd3, 0x30, 0x92, 0x67, 0x79, 0x5b, 0x53, 0x2c, - 0x1a, 0x50, 0x43, 0xc2, 0xcd, 0xa3, 0xbf, 0xf8, 0x11, 0x2d, 0xee, 0xfb, - 0xc7, 0x78, 0xa3, 0x60, 0x6c, 0x23, 0x43, 0x6f, 0x87, 0xe5, 0xa0, 0x38, - 0x3c, 0xac, 0x79, 0x59, 0x7c, 0x70, 0x5d, 0x83, 0x78, 0x1a, 0x74, 0x44, - 0xe6, 0xa3, 0xa3, 0x30, 0x60, 0x92, 0x3e, 0x63, 0x14, 0xdb, 0x70, 0xcb, - 0xc3, 0x3c, 0x3a, 0x09, 0x35, 0x8e, 0xc3, 0xad, 0x87, 0x7d, 0x1d, 0x45, - 0x7b, 0x07, 0xcb, 0x28, 0xfb, 0xc0, 0x5b, 0x06, 0x1b, 0x3f, 0x15, 0xae, - 0x36, 0xb9, 0xd6, 0xd1, 0xf6, 0x68, 0x9e, 0x7d, 0xf9, 0x89, 0x06, 0x1b, - 0xe2, 0x21, 0x11, 0x46, 0xb2, 0x83, 0xcd, 0xdd, 0x83, 0x8e, 0x6d, 0xff, - 0xc0, 0x76, 0x6a, 0x2b, 0xe6, 0x4a, 0x0d, 0x0f, 0x65, 0x30, 0x0b, 0x60, - 0xa8, 0x71, 0x70, 0xb0, 0x77, 0x4b, 0xd1, 0xd6, 0x3c, 0xb7, 0xec, 0x75, - 0x4b, 0x09, 0x06, 0x1f, 0xd9, 0xd1, 0x3f, 0xfd, 0xdb, 0xe7, 0x6d, 0xcc, - 0xfe, 0x79, 0xb3, 0xef, 0x42, 0x9c, 0x68, 0xa8, 0xff, 0xe3, 0x3d, 0x64, - 0xe1, 0xbc, 0xfc, 0x47, 0x2b, 0x69, 0xf5, 0xfb, 0xd7, 0x76, 0x7b, 0x0d, - 0x8e, 0x31, 0x9c, 0x51, 0x3c, 0xc3, 0xa9, 0xd0, 0x22, 0xdc, 0xc7, 0xf3, - 0x5e, 0xe9, 0xa0, 0x64, 0x75, 0xc7, 0x96, 0xea, 0x33, 0x92, 0x51, 0x17, - 0x83, 0x91, 0x71, 0x3a, 0xaa, 0x3e, 0x7d, 0x41, 0xe4, 0xd4, 0xf0, 0xb9, - 0x51, 0x6e, 0xa1, 0x7a, 0x84, 0xa3, 0x1e, 0xa3, 0xd6, 0xf8, 0x34, 0xdf, - 0xde, 0x0d, 0xf6, 0x43, 0x50, 0x90, 0x50, 0x5c, 0x1a, 0x7a, 0x55, 0xf7, - 0x09, 0x5f, 0x33, 0xaf, 0x18, 0x21, 0x7d, 0x86, 0x24, 0x0d, 0x4b, 0x93, - 0x4a, 0x1f, 0x71, 0x26, 0x20, 0xd9, 0xbf, 0x71, 0x8c, 0x8f, 0xe6, 0xd4, - 0x9f, 0x04, 0xa6, 0xbf, 0x92, 0x81, 0xe1, 0x76, 0x2a, 0x7e, 0xf4, 0x7a, - 0x1d, 0x61, 0x0b, 0x7a, 0xfd, 0xb8, 0x65, 0x0f, 0x1f, 0x63, 0x35, 0x4d, - 0x45, 0xc1, 0x7e, 0x86, 0xef, 0x7c, 0x7d, 0x9c, 0xc1, 0x99, 0x4f, 0x2b, - 0x26, 0xa8, 0x45, 0xb2, 0x46, 0x5a, 0xeb, 0xd5, 0xe2, 0xb9, 0x07, 0xbd, - 0x46, 0x4e, 0xc5, 0x2f, 0x5a, 0xd7, 0x3f, 0x9f, 0xd8, 0xd7, 0x10, 0xc4, - 0xc1, 0x6f, 0xee, 0xa9, 0x1c, 0xad, 0xa3, 0x80, 0x1e, 0x0f, 0x40, 0x9b, - 0x4f, 0x4c, 0x19, 0xbd, 0xbc, 0xa6, 0x07, 0x89, 0x97, 0x46, 0xc6, 0x54, - 0x6c, 0x5f, 0x93, 0xe7, 0x02, 0xfa, 0x9a, 0x6f, 0xfe, 0xe6, 0xd6, 0x96, - 0x2c, 0xc2, 0x5e, 0x3a, 0xfb, 0x87, 0xec, 0x42, 0xf3, 0x89, 0x69, 0x90, - 0xd7, 0x27, 0xdd, 0x9b, 0x7f, 0x3b, 0x3b, 0x21, 0x5c, 0x7a, 0x02, 0x45, - 0xc5, 0xf4, 0xed, 0x41, 0xf6, 0x76, 0xff, 0xc9, 0x4f, 0x93, 0x4a, 0x80, - 0xc6, 0x44, 0x1a, 0x63, 0xd3, 0x99, 0xf3, 0xfe, 0x7e, 0x7e, 0xe8, 0xc2, - 0xaa, 0x3e, 0xcf, 0x64, 0xb7, 0x3e, 0x2a, 0x86, 0x4d, 0xde, 0xfc, 0xe7, - 0xef, 0x3e, 0xcd, 0x44, 0xaf, 0xf0, 0x87, 0xca, 0x88, 0xfd, 0x5d, 0x17, - 0x92, 0xdb, 0x70, 0xd2, 0x0d, 0xaf, 0xd2, 0x45, 0x4c, 0x2a, 0x19, 0xb5, - 0x20, 0x56, 0x12, 0xa6, 0xb5, 0x25, 0xe7, 0x72, 0xf0, 0xf8, 0xb7, 0x21, - 0x2f, 0xa6, 0x03, 0xa6, 0x8d, 0x62, 0xfd, 0x1f, 0xbc, 0xa4, 0x3a, 0x47, - 0x7a, 0xd1, 0xb1, 0xd0, 0x31, 0xfd, 0x9a, 0x13, 0xaa, 0x9a, 0x54, 0x0c, - 0xdd, 0x37, 0xed, 0x2a, 0x56, 0xbe, 0x8e, 0x8f, 0xab, 0x50, 0x46, 0x87, - 0xb7, 0xe0, 0xe1, 0x61, 0xaf, 0x8f, 0x41, 0x1e, 0xf6, 0x48, 0xe9, 0xa8, - 0x8b, 0xc5, 0xd9, 0x1f, 0x8b, 0xb2, 0x39, 0x13, 0xea, 0x7b, 0x07, 0xc9, - 0x50, 0xd3, 0x06, 0xdc, 0xf9, 0x71, 0x2a, 0xf8, 0xed, 0x49, 0x1a, 0xac, - 0x2d, 0x1d, 0xa3, 0xb1, 0x25, 0x56, 0xa8, 0x45, 0xbb, 0xec, 0x31, 0xd4, - 0xb8, 0x25, 0x65, 0x6a, 0x0c, 0x62, 0x3c, 0xf2, 0x98, 0x3f, 0x83, 0xf4, - 0xcf, 0x6e, 0xbc, 0x63, 0xd8, 0xc7, 0x2b, 0xd8, 0xba, 0xb5, 0x99, 0xe2, - 0x28, 0xf3, 0xd8, 0x89, 0xe5, 0x61, 0x4d, 0x4b, 0x44, 0x8b, 0x28, 0x1c, - 0x86, 0x1c, 0x94, 0xfa, 0x53, 0x7a, 0x71, 0x31, 0x35, 0x26, 0x48, 0x74, - 0x88, 0x12, 0xa3, 0xd3, 0x47, 0x80, 0xe3, 0x3f, 0x01, 0xfc, 0x23, 0xdb, - 0x24, 0x6e, 0x92, 0x60, 0x73, 0x94, 0xe3, 0xf3, 0x3c, 0x1c, 0xd3, 0x1c, - 0x18, 0x65, 0x6e, 0x1e, 0xf3, 0x20, 0x80, 0x8f, 0x9d, 0x9d, 0x63, 0x10, - 0xb9, 0xc3, 0x4e, 0xe9, 0x30, 0xce, 0xd3, 0x63, 0x94, 0x2e, 0x70, 0x2f, - 0x1f, 0xf0, 0x45, 0xc7, 0x1d, 0x73, 0xfa, 0xc4, 0x1d, 0x6d, 0x7a, 0xe4, - 0xe1, 0x85, 0xb6, 0xf8, 0x70, 0xea, 0x18, 0xd2, 0x30, 0x2c, 0x85, 0xe8, - 0x13, 0xef, 0x17, 0xd0, 0x23, 0x4c, 0x67, 0x46, 0x1f, 0x6d, 0x7b, 0x8d, - 0x1e, 0x94, 0x12, 0xfb, 0x0f, 0xfd, 0x1e, 0xe9, 0xf1, 0xb3, 0x1f, 0x63, - 0x65, 0xf7, 0x1b, 0xbe, 0x1c, 0xe5, 0x03, 0xab, 0x07, 0x2c, 0xb6, 0x6f, - 0x1d, 0x37, 0xe2, 0x3f, 0xeb, 0x5d, 0x78, 0xb5, 0x7b, 0x6e, 0x24, 0xec, - 0x2b, 0x69, 0x87, 0xa0, 0x99, 0xb0, 0x2d, 0x95, 0xa0, 0x8c, 0x2c, 0xed, - 0x76, 0x97, 0xfc, 0x70, 0xfb, 0x29, 0xd0, 0xfa, 0x1c, 0x1a, 0xea, 0x76, - 0x4e, 0x2d, 0x43, 0xa7, 0xf7, 0x0f, 0xdc, 0x07, 0x37, 0xa0, 0x2b, 0x9f, - 0x07, 0xcc, 0x0d, 0x0e, 0xb7, 0xfa, 0x8e, 0xf7, 0x3a, 0xb4, 0x83, 0xf7, - 0x86, 0x81, 0xe4, 0x3f, 0x3e, 0xe1, 0x8d, 0xf3, 0x82, 0x6b, 0x24, 0x91, - 0xb5, 0x3f, 0xe7, 0xeb, 0x70, 0x62, 0x7d, 0xd2, 0x34, 0xd9, 0xe0, 0x51, - 0x1b, 0x68, 0xbc, 0x68, 0x7d, 0x8e, 0x2b, 0x28, 0x90, 0x5d, 0x25, 0xe9, - 0x09, 0x39, 0x4c, 0xdb, 0x80, 0x32, 0x7c, 0x18, 0xc6, 0xcd, 0xf9, 0x16, - 0x67, 0xde, 0xdb, 0xdb, 0x47, 0x33, 0x2b, 0xd7, 0xee, 0x87, 0x9e, 0x0b, - 0xf5, 0xb0, 0xb5, 0xc6, 0xdf, 0xe9, 0xe1, 0xb9, 0x53, 0xeb, 0x06, 0xc5, - 0x10, 0x2d, 0x72, 0xa8, 0x7a, 0x33, 0x0d, 0x1b, 0xe7, 0x6e, 0x73, 0xb3, - 0x09, 0xf7, 0x9d, 0x76, 0x7c, 0x7c, 0xee, 0x23, 0x87, 0x7c, 0xf6, 0xd1, - 0x9a, 0xb0, 0xb3, 0x84, 0xe7, 0x71, 0xf4, 0x91, 0xe2, 0x35, 0xb5, 0x95, - 0xe4, 0x0b, 0xe6, 0x25, 0xfb, 0xf0, 0xf3, 0x82, 0x16, 0x93, 0x39, 0x92, - 0xb1, 0xa2, 0x40, 0x4a, 0x2a, 0xe7, 0x15, 0x34, 0x49, 0x08, 0x1f, 0x3d, - 0x50, 0xd4, 0x2a, 0x4f, 0xca, 0x92, 0x44, 0x1c, 0x82, 0x0d, 0x7d, 0x1d, - 0x7b, 0x9b, 0x96, 0xb8, 0xda, 0xc4, 0xdb, 0x02, 0x43, 0x54, 0x0c, 0xb6, - 0xc5, 0x15, 0xa4, 0xc8, 0xde, 0xa6, 0x49, 0xb7, 0x5c, 0x86, 0xa3, 0x90, - 0x57, 0xd7, 0x70, 0xfe, 0x1a, 0x6f, 0xbe, 0xbf, 0x26, 0x57, 0x31, 0xf8, - 0x4a, 0xf7, 0x74, 0xb8, 0x0e, 0x63, 0x11, 0xed, 0x75, 0xa3, 0xfa, 0x28, - 0xf0, 0xa2, 0xca, 0x9b, 0x9e, 0x90, 0x0f, 0x0d, 0x38, 0x95, 0x1e, 0xcc, - 0x5c, 0x81, 0x1e, 0xa8, 0x23, 0xa8, 0x85, 0xc4, 0xae, 0xc1, 0xc0, 0xac, - 0xcb, 0xc3, 0x63, 0xde, 0x2e, 0xbd, 0x38, 0xd2, 0x28, 0x22, 0xf0, 0x4a, - 0x1f, 0xd7, 0xc3, 0x64, 0x91, 0x7e, 0x8c, 0x0a, 0xbb, 0x43, 0x3d, 0x9d, - 0x5b, 0x94, 0xfd, 0x72, 0xb2, 0x87, 0xde, 0x7d, 0x25, 0xf2, 0x4a, 0x66, - 0xbb, 0xdf, 0x20, 0x2e, 0x5a, 0xdb, 0x3b, 0x9c, 0xb8, 0xc3, 0x27, 0x86, - 0x1a, 0xc9, 0xc1, 0xde, 0x91, 0x08, 0xf1, 0x5d, 0xaf, 0xfa, 0x9d, 0xb1, - 0xe0, 0x33, 0x8e, 0x38, 0xed, 0xa5, 0x7b, 0xdf, 0x09, 0x31, 0xa2, 0x37, - 0x28, 0xb4, 0x48, 0xdb, 0xcf, 0x26, 0x1e, 0xf3, 0x97, 0x07, 0x46, 0xe6, - 0x15, 0x16, 0xa7, 0xaf, 0x5c, 0xe6, 0x21, 0x65, 0x65, 0x38, 0x1d, 0x26, - 0xdd, 0xdf, 0xeb, 0x56, 0xbc, 0x5e, 0x79, 0x0b, 0x2f, 0x6d, 0xc7, 0x99, - 0x1a, 0x1a, 0x3e, 0xbc, 0xf7, 0x4b, 0x5f, 0x22, 0xe2, 0xa3, 0x31, 0x64, - 0x6c, 0x29, 0xb9, 0x4b, 0x57, 0x13, 0xf7, 0x60, 0x61, 0x01, 0x02, 0x7d, - 0xf4, 0x5d, 0x7c, 0xd8, 0xa8, 0x18, 0x67, 0x09, 0x95, 0x48, 0xdc, 0xfb, - 0x3a, 0xe9, 0x1e, 0x70, 0x8e, 0xd5, 0x5f, 0xe2, 0xf9, 0xea, 0x2b, 0xa8, - 0x16, 0xc6, 0x3e, 0xfd, 0x25, 0x86, 0x8b, 0x3b, 0x21, 0x2f, 0xdf, 0xa4, - 0x87, 0x02, 0xc8, 0x96, 0xaa, 0x1f, 0x2d, 0x13, 0x7e, 0xd2, 0xf4, 0xed, - 0x01, 0x7f, 0x1e, 0x36, 0x62, 0xfd, 0x94, 0xcd, 0x98, 0x96, 0xbf, 0x34, - 0x05, 0x59, 0xc8, 0x22, 0xbb, 0xce, 0x70, 0x4c, 0x76, 0xbc, 0x7c, 0xf3, - 0x47, 0x77, 0xa9, 0xca, 0x77, 0xe6, 0xe3, 0x85, 0x3f, 0xb7, 0x89, 0x7e, - 0xb6, 0xf3, 0x00, 0x25, 0xa5, 0xb7, 0x64, 0x80, 0xe7, 0x08, 0xd2, 0xd0, - 0x61, 0xf7, 0xf6, 0x56, 0x76, 0xe2, 0x3a, 0xc0, 0xd7, 0x69, 0x94, 0x16, - 0x39, 0x41, 0xc1, 0xec, 0x79, 0x5a, 0x1f, 0x9b, 0x91, 0xb4, 0x6a, 0x6d, - 0x6a, 0x8b, 0x60, 0x21, 0xbd, 0x6c, 0xb3, 0xac, 0x24, 0x50, 0x1f, 0x0c, - 0xee, 0x51, 0x70, 0x48, 0x93, 0x56, 0x18, 0x2f, 0xcf, 0x7e, 0xd7, 0x22, - 0x5c, 0xb4, 0x18, 0xef, 0x44, 0x6f, 0xcf, 0x72, 0x95, 0x32, 0xc5, 0x8d, - 0x93, 0x5c, 0xfd, 0xad, 0x0d, 0x00, 0x37, 0xb6, 0x35, 0x65, 0x56, 0x3a, - 0x49, 0xe6, 0xda, 0x10, 0x53, 0xdc, 0xf0, 0xd2, 0xc8, 0xe6, 0xba, 0x05, - 0x7e, 0x51, 0x4b, 0x27, 0x54, 0x16, 0x15, 0xfc, 0x24, 0x8f, 0x10, 0xc8, - 0xdf, 0x14, 0x56, 0x84, 0x78, 0x83, 0x25, 0xb4, 0xa7, 0xcb, 0x74, 0x37, - 0x97, 0xd9, 0xdd, 0xa1, 0x6e, 0x29, 0x09, 0xdd, 0x59, 0xc8, 0x7b, 0x2d, - 0xa9, 0x74, 0x55, 0xe0, 0x9f, 0x47, 0xa2, 0xf8, 0x49, 0x45, 0xfa, 0xda, - 0x9e, 0x18, 0xe4, 0xc1, 0x1f, 0x45, 0xed, 0xc9, 0xdb, 0x2d, 0x44, 0xb9, - 0xa7, 0x6e, 0x65, 0x7a, 0x0f, 0xc6, 0xa7, 0xf7, 0xe8, 0x6d, 0x16, 0xa7, - 0xeb, 0xd2, 0x7a, 0xbe, 0xb3, 0x2e, 0x88, 0xe4, 0x55, 0xae, 0x72, 0x5a, - 0x18, 0x1c, 0x03, 0x59, 0x20, 0x99, 0xd3, 0xc6, 0x46, 0x09, 0xea, 0x29, - 0xf0, 0x44, 0x71, 0xec, 0x3b, 0x34, 0x3e, 0xc1, 0xb1, 0x9b, 0x6d, 0x6d, - 0xfc, 0x3e, 0xb8, 0x20, 0x66, 0x05, 0x1d, 0xe9, 0xa2, 0x26, 0x77, 0x40, - 0x69, 0xbd, 0x7c, 0xbc, 0xe3, 0x1e, 0xd1, 0x1c, 0x38, 0x88, 0x83, 0xee, - 0x3a, 0x69, 0xc3, 0xf6, 0xa0, 0xa1, 0xfb, 0x87, 0x67, 0x9d, 0x75, 0xe1, - 0x58, 0x67, 0x40, 0x70, 0x18, 0x32, 0x0e, 0xd2, 0x20, 0xcc, 0xd7, 0xe8, - 0xce, 0x9a, 0xe3, 0x0c, 0x1d, 0x59, 0xac, 0xb9, 0x7f, 0xc8, 0x5a, 0xf3, - 0x31, 0xd8, 0x87, 0xab, 0xd4, 0x92, 0x05, 0xd0, 0x0e, 0x24, 0x13, 0x5b, - 0xf9, 0x1e, 0x6e, 0xc1, 0x2a, 0x3f, 0xb0, 0x9e, 0x0e, 0x55, 0x24, 0x07, - 0x9f, 0x61, 0x4f, 0x86, 0xce, 0x83, 0xce, 0x33, 0x35, 0x81, 0x29, 0xc7, - 0xc1, 0x9f, 0x49, 0x00, 0x66, 0xba, 0x4e, 0xfe, 0x6c, 0xca, 0x09, 0xaf, - 0x09, 0x31, 0xd5, 0xf1, 0xc2, 0x10, 0x15, 0x88, 0x9c, 0x2f, 0x18, 0x51, - 0x44, 0xaa, 0x5f, 0xf8, 0x27, 0xc0, 0x0d, 0x3e, 0x75, 0xab, 0x76, 0x06, - 0xf5, 0x62, 0x1b, 0x02, 0x37, 0xca, 0x52, 0x06, 0x38, 0x0e, 0x43, 0xbd, - 0x73, 0x91, 0x38, 0x04, 0xe6, 0x49, 0x2e, 0x93, 0x55, 0xfb, 0x16, 0x49, - 0x25, 0x47, 0x63, 0x23, 0x51, 0xb9, 0xe4, 0x72, 0xe5, 0x32, 0xf3, 0xc7, - 0x0a, 0xe9, 0x07, 0xef, 0xff, 0xe0, 0xa5, 0xdf, 0x50, 0x74, 0x6f, 0x2d, - 0x4d, 0xde, 0xd3, 0x59, 0x7f, 0xa1, 0x34, 0xf4, 0x9f, 0xa5, 0x66, 0xa7, - 0x3e, 0xa9, 0xa1, 0xab, 0x97, 0xc9, 0xd1, 0x9d, 0x17, 0xfc, 0x5f, 0x10, - 0xdf, 0x79, 0xe1, 0xd4, 0x7f, 0x5e, 0xb8, 0x1d, 0x0a, 0x60, 0xad, 0xec, - 0xbc, 0x26, 0x28, 0x1e, 0x01, 0x78, 0xc0, 0xff, 0x6a, 0x12, 0x26, 0x04, - 0xca, 0x87, 0x20, 0x26, 0x3a, 0xa0, 0x6c, 0x8e, 0x3d, 0x28, 0xf6, 0x72, - 0x45, 0xee, 0xb3, 0xd0, 0x46, 0x3d, 0x21, 0xa4, 0xe1, 0x9f, 0x8e, 0x5d, - 0xb2, 0x92, 0xd4, 0x5e, 0xf9, 0x28, 0xff, 0x0e, 0x08, 0x87, 0x47, 0xf4, - 0x3f, 0x9a, 0xbf, 0x7d, 0x44, 0x34, 0x0d, 0xe7, 0x63, 0x2b, 0x91, 0x85, - 0x71, 0xde, 0x38, 0x7f, 0xc2, 0x84, 0x27, 0xd8, 0xb6, 0x07, 0xe0, 0x92, - 0x6b, 0x2f, 0x38, 0xef, 0xdc, 0xeb, 0xc1, 0xd6, 0x0e, 0x8a, 0xc5, 0xcd, - 0x8a, 0x9d, 0xdf, 0xf8, 0xa9, 0x15, 0xf2, 0xf8, 0xe7, 0xe3, 0x8a, 0x58, - 0xa4, 0x58, 0x71, 0xcd, 0x83, 0x99, 0x27, 0x71, 0x23, 0x1f, 0x2c, 0x9c, - 0xcc, 0x17, 0x27, 0x36, 0x86, 0xca, 0xa6, 0xc8, 0x55, 0xb6, 0xf3, 0x5c, - 0x1b, 0xef, 0x09, 0x23, 0x71, 0x74, 0x18, 0x1e, 0x4e, 0x03, 0xab, 0x1a, - 0x7a, 0xc5, 0xd0, 0x7b, 0x46, 0x60, 0x99, 0x7a, 0x5e, 0xf6, 0xef, 0xfa, - 0x3e, 0xd0, 0x8d, 0x29, 0xa5, 0xa9, 0x7d, 0xbf, 0xc1, 0x46, 0xd7, 0x12, - 0xfd, 0x74, 0xe3, 0x23, 0x40, 0x9d, 0xdf, 0x01, 0x65, 0xe3, 0x0d, 0xa1, - 0x18, 0x07, 0x42, 0x6f, 0x46, 0xe7, 0x33, 0xdb, 0x2f, 0x2f, 0xf8, 0x06, - 0xcc, 0xcc, 0x0b, 0x37, 0xa3, 0xfa, 0x81, 0x66, 0x44, 0x4f, 0xeb, 0x15, - 0xe7, 0x73, 0x51, 0x02, 0x3d, 0xc1, 0x48, 0x54, 0xe5, 0xba, 0xa7, 0x6f, - 0xb9, 0x4a, 0x25, 0x45, 0x7c, 0xc8, 0x7d, 0x01, 0x16, 0x3a, 0x6c, 0x91, - 0xcb, 0x83, 0xca, 0xcf, 0xce, 0xa5, 0x07, 0x5d, 0x38, 0x5f, 0x9e, 0x75, - 0x09, 0xfd, 0x40, 0x88, 0x0d, 0x91, 0x52, 0xae, 0x8d, 0x92, 0x58, 0x13, - 0xf4, 0xaa, 0x01, 0x6d, 0xe6, 0xbc, 0xdd, 0xe5, 0x7c, 0x54, 0xa1, 0x8e, - 0x4a, 0x4f, 0xd3, 0xe8, 0x2f, 0x17, 0x81, 0x91, 0x09, 0x1f, 0x36, 0xcf, - 0x43, 0x23, 0x64, 0x75, 0x2b, 0x3b, 0xfa, 0xad, 0xe7, 0xf7, 0x89, 0x19, - 0x38, 0x1e, 0x13, 0x07, 0x55, 0x18, 0x79, 0x3d, 0x15, 0x88, 0xc3, 0xe5, - 0x79, 0x3c, 0x29, 0x72, 0x04, 0x17, 0x1f, 0x38, 0xea, 0xd2, 0x0e, 0x99, - 0x3c, 0x38, 0xf7, 0xc2, 0xe1, 0x48, 0x02, 0x60, 0x45, 0xd3, 0x6e, 0x19, - 0xda, 0x15, 0xc3, 0xa5, 0x23, 0x95, 0xe9, 0x78, 0xf3, 0x70, 0xbc, 0x76, - 0x78, 0x1e, 0x75, 0x94, 0x52, 0x82, 0x0e, 0xa5, 0xcf, 0xb9, 0x1b, 0x22, - 0xa6, 0xe0, 0x87, 0x85, 0x57, 0xc7, 0xaa, 0xf7, 0x84, 0x6e, 0xfd, 0x9e, - 0x96, 0x3f, 0x38, 0x35, 0x43, 0xf3, 0x63, 0xda, 0x56, 0x62, 0x9f, 0x90, - 0x88, 0xca, 0x6a, 0x30, 0x43, 0xa1, 0xd5, 0x5b, 0xf0, 0x80, 0xac, 0x36, - 0x3a, 0x6a, 0x25, 0xca, 0xfa, 0xa8, 0xa3, 0x10, 0xc2, 0xd4, 0x0c, 0xbc, - 0xe7, 0xfb, 0x63, 0xca, 0xe6, 0x9e, 0x70, 0x91, 0x05, 0xec, 0xc9, 0xe9, - 0x77, 0x32, 0x27, 0x61, 0x7c, 0x26, 0x9a, 0x51, 0x3b, 0xef, 0x3a, 0xf5, - 0xdd, 0xa9, 0x91, 0xe9, 0x4d, 0xf9, 0x69, 0xbc, 0xc3, 0x79, 0xae, 0xfc, - 0x53, 0xa6, 0xaf, 0xfa, 0xff, 0x8d, 0xff, 0x67, 0xa9, 0x79, 0xa9, 0x6e, - 0x7d, 0xb7, 0xd4, 0x8e, 0x5a, 0xff, 0xd9, 0x09, 0xaa, 0x3b, 0xe3, 0xb0, - 0xa1, 0xba, 0x5c, 0x94, 0x97, 0x09, 0x5b, 0x77, 0x30, 0x02, 0x5b, 0x7f, - 0xf8, 0x7f, 0x9d, 0x6a, 0x17, 0x2e, 0x14, 0xf9, 0xaa, 0xbf, 0x78, 0x03, - 0x15, 0x53, 0x63, 0xbf, 0xd4, 0xbf, 0xa9, 0xfe, 0xc3, 0xbd, 0xd5, 0xa0, - 0x97, 0x54, 0x5b, 0x26, 0x7f, 0x91, 0xbb, 0x0a, 0xae, 0xb5, 0x41, 0xf5, - 0xbb, 0x9c, 0x86, 0xea, 0xe8, 0x5b, 0xdb, 0x50, 0x25, 0x6c, 0x84, 0x28, - 0xb0, 0x9a, 0xbb, 0x7f, 0xd3, 0xad, 0x79, 0xa8, 0x0e, 0xfb, 0x4e, 0x75, - 0xdf, 0xf8, 0xe2, 0xe5, 0xeb, 0x74, 0x1b, 0x71, 0xb5, 0xa0, 0xf0, 0x7f, - 0xf0, 0xe7, 0x54, 0x2c, 0xff, 0xfe, 0xa3, 0xcb, 0xa0, 0xff, 0xf4, 0x3b, - 0xa1, 0x0d, 0xf9, 0xdc, 0x1e, 0x3c, 0x6c, 0x86, 0x2f, 0xc3, 0x99, 0x84, - 0x53, 0x4a, 0xb5, 0xe3, 0xa3, 0xe3, 0x16, 0x47, 0x9b, 0xd3, 0x45, 0x16, - 0xa4, 0xef, 0xdf, 0x26, 0x77, 0xed, 0x98, 0xde, 0x33, 0x4b, 0xf0, 0x32, - 0xfb, 0xa3, 0x39, 0xdf, 0x07, 0xa8, 0x40, 0x39, 0xd8, 0x83, 0x20, 0x69, - 0x0c, 0x84, 0x70, 0x32, 0xd7, 0x82, 0x3a, 0x8f, 0x40, 0xc2, 0xde, 0xff, - 0xdf, 0xa9, 0xd4, 0xcd, 0x66, 0x0f, 0xde, 0x3e, 0xf0, 0x72, 0x99, 0x6d, - 0x12, 0xcd, 0xb7, 0xb5, 0xfd, 0x4a, 0xf1, 0xae, 0xc2, 0x64, 0xa8, 0x79, - 0xfe, 0xef, 0x44, 0x6c, 0xcf, 0xf3, 0xe8, 0x11, 0xc4, 0xb9, 0xb0, 0x5c, - 0x0a, 0xbc, 0xea, 0x02, 0x87, 0xbf, 0xac, 0xaf, 0xcd, 0x64, 0x81, 0x2b, - 0x2a, 0x2d, 0x8f, 0x78, 0x80, 0x18, 0x94, 0x3a, 0xdc, 0xd0, 0xc5, 0x2e, - 0x4e, 0x43, 0x2a, 0xea, 0x46, 0xf8, 0x13, 0xaf, 0x0f, 0xbf, 0xd1, 0x8b, - 0x4b, 0xba, 0xd7, 0x96, 0xad, 0x66, 0xcc, 0xce, 0xee, 0xf5, 0xb6, 0xea, - 0x15, 0xd5, 0xea, 0xb6, 0x5d, 0x01, 0x8e, 0xf7, 0x7f, 0x1d, 0x97, 0xcd, - 0xdf, 0x60, 0xb1, 0x0a, 0x90, 0xc9, 0xeb, 0xd7, 0x83, 0x0b, 0x8e, 0x80, - 0x30, 0xf3, 0x54, 0x50, 0x60, 0xa6, 0xd5, 0xc0, 0xd1, 0xbe, 0x70, 0x4c, - 0x57, 0x16, 0x41, 0xe5, 0x90, 0x0f, 0x73, 0x36, 0xe9, 0x6c, 0x68, 0x84, - 0xc2, 0xd5, 0x7e, 0x7f, 0x7d, 0x3b, 0x0a, 0xef, 0xeb, 0xc6, 0xa6, 0x21, - 0x4f, 0xe0, 0x01, 0x59, 0x48, 0x9b, 0x3b, 0x3a, 0xd9, 0x8a, 0x5e, 0xa7, - 0x7b, 0x4a, 0x76, 0x33, 0xfc, 0x11, 0xb0, 0x15, 0x6a, 0x27, 0x8f, 0x7f, - 0x3e, 0x2f, 0x35, 0x77, 0xba, 0x7d, 0xe3, 0xb4, 0x76, 0xdc, 0x2f, 0x5f, - 0x54, 0x8c, 0x1b, 0x0f, 0x9b, 0xc0, 0xde, 0xdf, 0x3d, 0x4c, 0xcd, 0x2a, - 0x50, 0xab, 0x15, 0x42, 0xc6, 0x00, 0x5b, 0x54, 0xee, 0xeb, 0x47, 0x51, - 0xf1, 0x0a, 0x75, 0xc5, 0x7e, 0x0c, 0x5e, 0x39, 0xf4, 0xba, 0xb2, 0xc4, - 0x3f, 0x36, 0x03, 0xaa, 0x5b, 0xa7, 0x07, 0xfd, 0xea, 0xa9, 0x80, 0xf8, - 0xcd, 0x40, 0xe1, 0xdb, 0x8d, 0x52, 0x9c, 0x57, 0x53, 0xe3, 0xe5, 0xa0, - 0x85, 0xca, 0xeb, 0x49, 0x5f, 0x93, 0xb5, 0x31, 0xe4, 0x79, 0xb9, 0x5e, - 0x9b, 0x0a, 0x5e, 0x61, 0x64, 0x97, 0xc0, 0x3e, 0x49, 0x74, 0x18, 0x6a, - 0xef, 0xac, 0xdc, 0xa9, 0x6a, 0x77, 0xbf, 0xc3, 0xc5, 0x6f, 0xc2, 0x6c, - 0xb1, 0x98, 0xad, 0xcf, 0x72, 0x4d, 0x68, 0x11, 0xf8, 0x9d, 0xc8, 0x70, - 0x13, 0xd2, 0x72, 0xa5, 0xa0, 0xce, 0x7f, 0x09, 0xcb, 0xdd, 0x5d, 0x5b, - 0xef, 0x04, 0xca, 0x83, 0x90, 0x17, 0x28, 0x60, 0x21, 0xfd, 0x9b, 0xe2, - 0x26, 0xe1, 0x16, 0x44, 0xa9, 0xf7, 0x1e, 0x33, 0x8f, 0x5f, 0x00, 0xcc, - 0xfa, 0x8f, 0xc3, 0x43, 0xc8, 0xe6, 0x9c, 0x8e, 0x99, 0xd1, 0xc7, 0x96, - 0xf4, 0x8b, 0x27, 0xdf, 0x8c, 0x09, 0xaa, 0x2b, 0x2a, 0x53, 0xc5, 0x9b, - 0x64, 0xf5, 0x17, 0xa1, 0x60, 0x2c, 0x06, 0xcb, 0x0b, 0x20, 0xfd, 0xde, - 0x99, 0x92, 0x63, 0x7a, 0xa4, 0x1b, 0xd7, 0xc3, 0x8e, 0xcd, 0xfb, 0x99, - 0x54, 0xb6, 0x38, 0x91, 0x97, 0x73, 0x9f, 0x1d, 0x40, 0xf8, 0xc3, 0xca, - 0xf6, 0x50, 0x79, 0x1e, 0xd0, 0xa1, 0xf1, 0x16, 0x28, 0x16, 0x03, 0x8e, - 0xa4, 0x8b, 0xc2, 0x1c, 0x09, 0x07, 0x92, 0x40, 0x2f, 0xc5, 0xf1, 0x42, - 0xea, 0xd8, 0x09, 0x71, 0xbc, 0x34, 0xab, 0x54, 0x8e, 0xa6, 0x17, 0xb0, - 0xe2, 0x72, 0xa5, 0xc4, 0x10, 0xa7, 0x8b, 0x4a, 0xc1, 0xf6, 0x57, 0x0b, - 0x47, 0xea, 0xc9, 0x28, 0xca, 0x17, 0x2e, 0x08, 0x00, 0xdc, 0x11, 0x98, - 0x5d, 0x39, 0x10, 0x6a, 0x15, 0x75, 0xba, 0x2e, 0x37, 0xb9, 0x2c, 0x76, - 0x9c, 0x31, 0x58, 0x4c, 0xcd, 0x68, 0x59, 0x81, 0x3d, 0x84, 0x0c, 0xe7, - 0x5c, 0x45, 0xc2, 0x45, 0x02, 0x29, 0xea, 0xb2, 0x0b, 0xb9, 0x8b, 0x68, - 0x6a, 0x8c, 0x37, 0x34, 0xf5, 0x3a, 0xba, 0x55, 0x74, 0x83, 0x31, 0x7a, - 0xb8, 0x6c, 0x1a, 0x37, 0xc9, 0x8a, 0x56, 0x57, 0xe5, 0x74, 0xbb, 0x91, - 0x7b, 0x2f, 0xfa, 0x47, 0x93, 0xea, 0x07, 0xfb, 0x15, 0xd2, 0xa3, 0x58, - 0x91, 0x13, 0x20, 0xdb, 0x37, 0x9e, 0xb8, 0x81, 0x2b, 0x21, 0xcc, 0x9a, - 0xe2, 0x01, 0x7d, 0x9e, 0x22, 0xae, 0x79, 0x7d, 0x3b, 0xac, 0x05, 0xbe, - 0x2b, 0x32, 0x50, 0x68, 0x84, 0x11, 0x7b, 0x30, 0xf2, 0x5d, 0x06, 0xd9, - 0x36, 0x09, 0x6b, 0x93, 0xda, 0xe8, 0xcd, 0x34, 0x48, 0x17, 0x82, 0xc6, - 0xb4, 0x0f, 0xcd, 0x08, 0x95, 0x3e, 0x11, 0xe6, 0x3d, 0xf3, 0x87, 0x65, - 0x4c, 0xb7, 0xa6, 0xa8, 0x46, 0x80, 0x9b, 0x1a, 0x8c, 0x15, 0x37, 0x25, - 0x6a, 0xda, 0x13, 0x76, 0xec, 0x90, 0xf1, 0xb4, 0x38, 0x9b, 0x6c, 0xf0, - 0x4d, 0xf0, 0xac, 0xcb, 0xc4, 0x52, 0xc7, 0x9d, 0xba, 0x0a, 0xaf, 0x2e, - 0x04, 0x66, 0xa6, 0x3b, 0xca, 0x97, 0x32, 0x5b, 0xb5, 0x98, 0x66, 0xc1, - 0xca, 0x1f, 0xc9, 0x75, 0x0f, 0x64, 0xdc, 0x10, 0x9a, 0x28, 0xcd, 0x28, - 0xe1, 0xb5, 0xf3, 0x85, 0x6c, 0x7c, 0x4d, 0x35, 0xf6, 0xaf, 0x2f, 0x30, - 0x3c, 0x5f, 0x5f, 0x17, 0x70, 0xa4, 0x54, 0xd9, 0x80, 0xee, 0x2d, 0x35, - 0x0e, 0x56, 0x33, 0xae, 0xd3, 0x41, 0x0a, 0x1d, 0xec, 0x69, 0x1f, 0x70, - 0x68, 0x4c, 0x48, 0x4f, 0x79, 0x75, 0x91, 0xa0, 0x98, 0x87, 0x66, 0x25, - 0x2a, 0x7e, 0xf8, 0x67, 0xd0, 0xff, 0x20, 0xc2, 0xdc, 0x3c, 0xcd, 0xd0, - 0xc6, 0xeb, 0x38, 0xed, 0xa9, 0x61, 0x5f, 0x05, 0x77, 0xba, 0x87, 0xf3, - 0xed, 0x3c, 0xa3, 0x97, 0xc3, 0x91, 0x7f, 0x33, 0x0f, 0xcf, 0x8f, 0xe2, - 0x9f, 0x6b, 0xd5, 0x54, 0x29, 0xa5, 0xd8, 0x55, 0x54, 0x57, 0x38, 0x4f, - 0x2b, 0x9c, 0x75, 0xcb, 0x8a, 0x10, 0xdb, 0x94, 0x9e, 0xb1, 0x3d, 0xc9, - 0xab, 0xae, 0x35, 0x04, 0xb2, 0xe5, 0x65, 0x5f, 0x3d, 0xc8, 0x41, 0xa6, - 0xf2, 0xab, 0x76, 0x4c, 0x45, 0x58, 0x3d, 0xef, 0x53, 0x4d, 0xf3, 0xfd, - 0x56, 0x30, 0xac, 0x90, 0xf7, 0xa9, 0x4c, 0x30, 0x7c, 0x20, 0xa9, 0x8f, - 0x3b, 0x9e, 0xff, 0x94, 0xc7, 0x13, 0xff, 0x38, 0xbf, 0xa8, 0x8e, 0x35, - 0xf2, 0xac, 0x46, 0x5f, 0x57, 0xa0, 0xec, 0xbf, 0x79, 0xbe, 0x64, 0x8c, - 0x4e, 0x79, 0xbe, 0xa2, 0x07, 0x57, 0xa7, 0x8e, 0x8c, 0x0f, 0x82, 0x73, - 0x85, 0xc3, 0x77, 0xe6, 0xba, 0x9a, 0x9c, 0x6f, 0x02, 0x3b, 0x9f, 0x1a, - 0x0b, 0x56, 0x5b, 0x58, 0x63, 0xf1, 0xf2, 0xfc, 0x54, 0x14, 0x3b, 0xf6, - 0xb7, 0xe0, 0x7e, 0x67, 0xd1, 0x07, 0xdb, 0x09, 0x94, 0x02, 0x3e, 0x0a, - 0x81, 0xce, 0xbe, 0x0a, 0x8c, 0x3e, 0x66, 0x4c, 0x6b, 0xdf, 0xfc, 0x5f, - 0xeb, 0x28, 0x80, 0x5c, 0x7e, 0x63, 0x63, 0xa4, 0x3a, 0x1b, 0x7c, 0x0f, - 0xfd, 0xf8, 0x98, 0x06, 0x91, 0x33, 0xfc, 0x72, 0xdb, 0xad, 0xba, 0x3f, - 0xd0, 0x7b, 0x56, 0x59, 0x0d, 0x68, 0x23, 0x6d, 0xe5, 0x5f, 0x49, 0x35, - 0x2d, 0x82, 0xf2, 0x7c, 0x63, 0xd3, 0x02, 0x84, 0xbd, 0x85, 0xfb, 0x18, - 0x70, 0xea, 0x08, 0x8f, 0xfd, 0x97, 0x8a, 0xbe, 0xb2, 0x3b, 0x7c, 0x20, - 0xca, 0xfb, 0xf1, 0xdc, 0xf6, 0xd7, 0x00, 0x9f, 0xd3, 0x76, 0xe7, 0xd1, - 0x35, 0x29, 0x88, 0xef, 0x33, 0xf0, 0x96, 0xdd, 0xcc, 0x64, 0x20, 0xd8, - 0xe5, 0xea, 0x60, 0x56, 0x27, 0x89, 0x3a, 0x8f, 0xdf, 0x80, 0x51, 0xf8, - 0xb3, 0x8b, 0xd8, 0x0a, 0x15, 0xdd, 0x00, 0x43, 0x3b, 0x9a, 0xf3, 0x65, - 0x5a, 0x18, 0xa4, 0x72, 0xba, 0x30, 0xe5, 0xef, 0xe0, 0x4d, 0x54, 0x0b, - 0x70, 0x4a, 0x4c, 0x3b, 0xf0, 0x8c, 0x25, 0xa2, 0xe0, 0x1b, 0x6a, 0xb0, - 0x30, 0x5e, 0x81, 0x5a, 0xeb, 0xe7, 0x96, 0x46, 0x94, 0xd9, 0xde, 0x5d, - 0x77, 0x08, 0x1b, 0x13, 0xba, 0x68, 0xf5, 0xcd, 0xde, 0xc7, 0x0a, 0xcb, - 0x3e, 0x71, 0x6e, 0x7a, 0xb3, 0xe0, 0xe7, 0x95, 0xf4, 0xcb, 0xc3, 0x30, - 0xa2, 0xc3, 0x80, 0xf2, 0x3f, 0x23, 0x28, 0x52, 0xcb, 0x21, 0x05, 0xa7, - 0x4a, 0x3b, 0xde, 0xab, 0x4b, 0xad, 0x8c, 0x56, 0xf9, 0x9c, 0x6e, 0x75, - 0x5d, 0xb6, 0x00, 0x70, 0x70, 0xe4, 0x1e, 0x43, 0xfd, 0x45, 0x21, 0xe1, - 0xb7, 0xce, 0x2b, 0x4b, 0x01, 0x3c, 0x6f, 0x5a, 0x4b, 0xd5, 0x85, 0xeb, - 0x84, 0x5f, 0x8e, 0xff, 0x4f, 0xdb, 0xb6, 0x82, 0xe2, 0x28, 0xfe, 0x1c, - 0x8c, 0x83, 0x51, 0xe4, 0x2b, 0xa7, 0xcb, 0x70, 0xde, 0xd2, 0xd4, 0xbe, - 0x14, 0xda, 0x3a, 0x56, 0x2b, 0x07, 0xf4, 0xe1, 0xf5, 0xb9, 0x64, 0xfe, - 0x40, 0x85, 0x39, 0x3b, 0x15, 0x30, 0xc6, 0xad, 0x27, 0x14, 0xef, 0xda, - 0x85, 0x0c, 0x10, 0x5f, 0x76, 0x89, 0x00, 0xd8, 0x5a, 0x40, 0x45, 0x6b, - 0x39, 0x9a, 0x6f, 0xbb, 0xee, 0x0e, 0x02, 0xfa, 0xc2, 0x85, 0x5c, 0xf6, - 0x19, 0xf8, 0xe5, 0xdf, 0x7c, 0xf5, 0x33, 0xb4, 0xf2, 0xe4, 0x10, 0x8b, - 0xf2, 0x35, 0x84, 0xe6, 0xf1, 0x64, 0x02, 0x95, 0x72, 0xac, 0x50, 0xc1, - 0x9c, 0x24, 0xc7, 0x7b, 0x03, 0xdf, 0x69, 0xe5, 0x2c, 0xb4, 0xf0, 0x3c, - 0x06, 0x9a, 0x6b, 0x38, 0x66, 0x2d, 0x52, 0x3a, 0x5c, 0x68, 0x7e, 0x14, - 0xf6, 0x5d, 0x55, 0x15, 0xb0, 0x12, 0xcb, 0xd0, 0xd5, 0xc5, 0xd3, 0x1b, - 0xeb, 0x4b, 0x4a, 0xed, 0x61, 0x24, 0xaa, 0xe6, 0xeb, 0xe9, 0x00, 0x19, - 0x5c, 0xda, 0x24, 0x58, 0x51, 0x1d, 0x9a, 0x56, 0x84, 0x4e, 0x19, 0x77, - 0xe2, 0xd1, 0x49, 0x07, 0x42, 0xdf, 0x05, 0xfd, 0x14, 0x77, 0x67, 0x22, - 0xe9, 0xbc, 0x42, 0x49, 0x8d, 0x3b, 0x9a, 0xbc, 0x82, 0xee, 0x1d, 0x88, - 0xc8, 0x68, 0x4b, 0xb9, 0xa1, 0x2b, 0xe1, 0xa2, 0x5f, 0x8d, 0x14, 0x94, - 0xb5, 0x28, 0x0b, 0x47, 0xca, 0xfa, 0x8b, 0x28, 0x66, 0x1e, 0x4f, 0xfc, - 0x03, 0xad, 0x3e, 0xe0, 0x62, 0x2d, 0x73, 0x20, 0xb8, 0x23, 0x44, 0xd8, - 0xf6, 0x80, 0x3a, 0xf5, 0x76, 0xbc, 0xd6, 0x49, 0x10, 0x1f, 0xad, 0x13, - 0x14, 0x72, 0xc9, 0x81, 0x76, 0xd9, 0xe7, 0x89, 0x9b, 0xb4, 0x36, 0x87, - 0xeb, 0x55, 0x9f, 0xce, 0x17, 0x8b, 0xee, 0xd9, 0xe1, 0xf1, 0x4f, 0x9f, - 0xb0, 0x17, 0xb4, 0x98, 0xe5, 0x7d, 0x7d, 0x30, 0xda, 0xea, 0xb6, 0x2a, - 0x35, 0x02, 0x56, 0x1b, 0x41, 0xfc, 0xf2, 0x07, 0x75, 0xa0, 0xf3, 0x89, - 0x52, 0xbe, 0xea, 0x3f, 0x8d, 0xe9, 0x15, 0xea, 0x98, 0x66, 0xfd, 0x94, - 0xca, 0x0c, 0xb2, 0xa5, 0x96, 0x19, 0xd2, 0x36, 0x0b, 0x00, 0xfb, 0x1a, - 0x9c, 0x07, 0x1c, 0x7e, 0x95, 0x37, 0xe5, 0xab, 0x53, 0xbb, 0xf8, 0x37, - 0x9c, 0x15, 0x1b, 0x07, 0x68, 0x19, 0xf5, 0xd7, 0x9a, 0xb7, 0xdc, 0x3a, - 0x98, 0xf0, 0x03, 0x6c, 0x52, 0x07, 0xbf, 0x50, 0x3b, 0x36, 0x23, 0x04, - 0xde, 0x09, 0xa0, 0x2e, 0x85, 0x2e, 0xf4, 0xbd, 0x12, 0x28, 0x86, 0x3a, - 0x86, 0x60, 0x30, 0x2e, 0x1c, 0xa9, 0x6a, 0x1d, 0xac, 0xd3, 0x3f, 0x65, - 0x50, 0x1c, 0x64, 0x14, 0x2a, 0x04, 0xc8, 0x5a, 0x8c, 0x29, 0x55, 0x2a, - 0x4c, 0xd4, 0x3a, 0x59, 0xc0, 0x19, 0x3f, 0x7e, 0x60, 0x5f, 0xd6, 0x2b, - 0x39, 0xb0, 0x35, 0x41, 0x2d, 0x9d, 0x79, 0x25, 0xb6, 0x97, 0xea, 0x40, - 0xc7, 0xb8, 0x73, 0x05, 0x95, 0x64, 0x1b, 0xad, 0x2e, 0xce, 0xb1, 0xfe, - 0xa1, 0xb1, 0x67, 0xfd, 0xfa, 0xf2, 0x15, 0x78, 0xb9, 0xfd, 0xd3, 0xed, - 0x44, 0x37, 0x64, 0xf3, 0xf8, 0xa0, 0xb3, 0xd9, 0xa9, 0xf6, 0x2a, 0xc7, - 0x59, 0x68, 0xb8, 0x99, 0x93, 0xdc, 0xca, 0x54, 0xea, 0xa5, 0x3a, 0xda, - 0x4c, 0x0e, 0x58, 0xeb, 0x58, 0x4d, 0x2a, 0xfa, 0xb2, 0x7b, 0x6c, 0x8f, - 0x8c, 0xed, 0x65, 0x66, 0xe6, 0xc1, 0x53, 0x4c, 0x66, 0x42, 0x10, 0x0c, - 0x02, 0xa1, 0xb5, 0x1a, 0xc3, 0xf2, 0x3d, 0xf8, 0xca, 0x51, 0x3b, 0xf3, - 0xb3, 0x01, 0xb4, 0x9b, 0x06, 0xaf, 0x1d, 0xb3, 0xe6, 0x8c, 0xa8, 0x1c, - 0xde, 0x32, 0x3d, 0xbd, 0x7b, 0xba, 0x67, 0xff, 0x44, 0xa3, 0xdf, 0x9d, - 0xfa, 0x08, 0x6c, 0x6c, 0xad, 0x93, 0xd6, 0xbf, 0x23, 0x39, 0xc4, 0x05, - 0x0f, 0x04, 0xe7, 0xb6, 0x3f, 0x15, 0x63, 0x5d, 0xd1, 0xea, 0xa5, 0x21, - 0xeb, 0x9f, 0xa6, 0x29, 0xab, 0x55, 0xd9, 0x87, 0xe6, 0x2c, 0xc6, 0xf6, - 0xc0, 0x3a, 0xc0, 0x60, 0xb1, 0x9d, 0x6f, 0xa3, 0xea, 0x50, 0x53, 0x3c, - 0x54, 0xc1, 0x9d, 0x39, 0x6d, 0x7f, 0xad, 0xec, 0x07, 0xf8, 0x15, 0x59, - 0x1b, 0x4c, 0x65, 0xdf, 0x50, 0x28, 0xc6, 0x5a, 0xaf, 0x68, 0x92, 0xab, - 0x9f, 0xdd, 0x43, 0x39, 0x97, 0x14, 0xe2, 0x18, 0xda, 0x1d, 0x1c, 0x04, - 0xdb, 0x71, 0x6a, 0x84, 0x6c, 0x38, 0xf8, 0x1f, 0x7a, 0x6b, 0xef, 0x6d, - 0x6a, 0xe5, 0x51, 0xa6, 0x69, 0xfc, 0xf2, 0x7c, 0x34, 0xf1, 0x9e, 0xa0, - 0xfb, 0xeb, 0x43, 0xf1, 0x97, 0x91, 0x6c, 0x53, 0xa3, 0xfe, 0x2f, 0xa7, - 0x95, 0xf4, 0xf3, 0xae, 0xd6, 0xbe, 0x43, 0x54, 0xf7, 0x41, 0x80, 0xb8, - 0xa0, 0x16, 0x08, 0xae, 0x29, 0xb0, 0x14, 0x60, 0x4a, 0x35, 0xbe, 0xad, - 0x3c, 0x6e, 0xa5, 0x03, 0x3b, 0x4a, 0x06, 0x9e, 0x0e, 0x0e, 0x03, 0xce, - 0xb1, 0x82, 0x38, 0xf5, 0xd4, 0xc8, 0xb6, 0x0d, 0x40, 0x9c, 0x18, 0x45, - 0x6b, 0x1e, 0x44, 0x9b, 0x45, 0xd3, 0x5a, 0xc9, 0x51, 0x8e, 0x37, 0xdb, - 0x87, 0xe9, 0x38, 0xa8, 0x00, 0x6b, 0xa0, 0x7f, 0xb4, 0x86, 0xab, 0x3f, - 0xb5, 0xc7, 0x54, 0xdf, 0xff, 0x9d, 0x90, 0xde, 0xf8, 0x07, 0x39, 0x47, - 0x0f, 0xad, 0xeb, 0xe6, 0x87, 0x7e, 0x13, 0x9d, 0x59, 0x8e, 0x5f, 0x57, - 0x70, 0xac, 0xa2, 0xd1, 0x22, 0x1b, 0x33, 0xa7, 0x7e, 0x93, 0x39, 0x5c, - 0xad, 0x10, 0x6d, 0xf6, 0x3c, 0x71, 0x0b, 0x99, 0xf0, 0x3c, 0x50, 0x42, - 0x10, 0x1b, 0x2c, 0xe6, 0x22, 0xab, 0x3e, 0x06, 0x58, 0xc7, 0xa6, 0x03, - 0xe6, 0x85, 0x40, 0xfb, 0x54, 0x9b, 0xed, 0x62, 0x6d, 0xb8, 0xa1, 0x5b, - 0xc7, 0xe5, 0xed, 0x82, 0x7f, 0xd3, 0x0d, 0xb5, 0x07, 0xcc, 0x74, 0x8a, - 0xb0, 0x48, 0xb9, 0x7b, 0x8a, 0x5f, 0x8c, 0x67, 0x72, 0x91, 0xc2, 0x2b, - 0xfe, 0x91, 0xe9, 0x2b, 0x59, 0x45, 0x32, 0x6a, 0x50, 0x2d, 0x01, 0x4e, - 0x5a, 0x2e, 0x0b, 0x55, 0x90, 0x9c, 0x4d, 0x85, 0x3e, 0x38, 0x03, 0x62, - 0x85, 0xd5, 0x11, 0x6b, 0xa3, 0x11, 0xfa, 0xb2, 0x53, 0xa5, 0x3f, 0xf2, - 0x07, 0xf9, 0x66, 0x4e, 0x88, 0x11, 0x86, 0x02, 0x6c, 0x48, 0x68, 0x54, - 0x7b, 0xd2, 0x43, 0xc5, 0x37, 0x66, 0x39, 0xbb, 0x9c, 0xc3, 0x40, 0x0b, - 0x5c, 0x59, 0x2b, 0x84, 0xc0, 0xb7, 0x6e, 0x92, 0xf0, 0x17, 0x10, 0xeb, - 0xbe, 0xdd, 0xb8, 0xa5, 0xbd, 0xdd, 0xe4, 0x6f, 0xe6, 0x28, 0x0d, 0xdd, - 0x0c, 0x6c, 0x1a, 0x41, 0x24, 0x4d, 0xde, 0x80, 0xb2, 0x71, 0xd3, 0x8f, - 0xbf, 0x56, 0xf8, 0xb3, 0x34, 0x9a, 0x8c, 0xb4, 0xfe, 0xc1, 0x49, 0xe2, - 0x32, 0x16, 0x58, 0xc5, 0xda, 0xd7, 0xb4, 0x48, 0xda, 0x12, 0xe7, 0xd6, - 0x0d, 0xdc, 0xff, 0xf6, 0xb5, 0x81, 0x59, 0x80, 0x7a, 0x3d, 0xfd, 0x4e, - 0x72, 0xb8, 0x54, 0x20, 0xb0, 0xa7, 0x10, 0xc9, 0x13, 0x6a, 0x07, 0x51, - 0x46, 0xb1, 0x4f, 0x39, 0x3c, 0x1a, 0x3c, 0xec, 0xc5, 0xdc, 0x47, 0x0a, - 0x91, 0x1e, 0xba, 0x85, 0xfd, 0x1b, 0x03, 0x78, 0x87, 0x14, 0xc1, 0x32, - 0x42, 0x06, 0xda, 0xbc, 0x2f, 0x8a, 0x86, 0x45, 0x3c, 0x8a, 0xb6, 0xc6, - 0x20, 0xd1, 0x2a, 0xf3, 0xde, 0xf6, 0xb1, 0x08, 0x2d, 0x4e, 0x1e, 0x49, - 0x4f, 0x2b, 0x56, 0x15, 0xd7, 0x7d, 0xf0, 0xb2, 0x80, 0xa7, 0xa5, 0xf0, - 0xcf, 0xca, 0xe2, 0x8f, 0x0c, 0xe0, 0x76, 0xe7, 0x7a, 0x7c, 0xcb, 0x38, - 0x19, 0xd8, 0x32, 0xd6, 0xff, 0x3a, 0x15, 0x8a, 0xba, 0x08, 0x85, 0x4d, - 0x63, 0x50, 0xb1, 0x4b, 0x96, 0x70, 0xa1, 0xba, 0x9e, 0x88, 0xde, 0x95, - 0x95, 0xc9, 0x72, 0xf9, 0xca, 0x3d, 0xbb, 0x63, 0x03, 0x8e, 0xb0, 0xc7, - 0x48, 0xcc, 0xb6, 0x9c, 0x1f, 0xf2, 0xe1, 0x9e, 0xf8, 0x46, 0x29, 0xbe, - 0xb2, 0x11, 0x63, 0xe7, 0xac, 0xfe, 0xa0, 0xc7, 0x92, 0xcb, 0xdf, 0xea, - 0xb4, 0x76, 0xfe, 0xe3, 0x7a, 0x11, 0xff, 0x19, 0x15, 0x24, 0x36, 0xca, - 0xbe, 0xd0, 0x77, 0x8b, 0x21, 0x82, 0x91, 0x1d, 0x66, 0xfd, 0x62, 0xc8, - 0xa5, 0xa3, 0x62, 0x00, 0x62, 0xeb, 0x16, 0xf0, 0xb2, 0x76, 0xea, 0xed, - 0xd8, 0x18, 0x5c, 0x11, 0xdc, 0xca, 0x32, 0xa8, 0x1e, 0x4b, 0xbc, 0x3d, - 0x20, 0xf1, 0x7d, 0xfa, 0x77, 0x7c, 0xf6, 0x34, 0x82, 0xdf, 0x37, 0xd6, - 0x72, 0xb3, 0x1a, 0xbf, 0x36, 0x48, 0x4f, 0x32, 0x13, 0x5b, 0x4f, 0x85, - 0x0f, 0xcf, 0x9b, 0x8f, 0xc8, 0xd0, 0xcc, 0x63, 0x1b, 0xc9, 0xdb, 0x4a, - 0x26, 0x91, 0x0e, 0xd7, 0xf5, 0x44, 0x0f, 0x8d, 0x91, 0xeb, 0xc3, 0xc7, - 0x46, 0xac, 0x00, 0x19, 0x3a, 0x5b, 0xc9, 0xad, 0xca, 0xf7, 0xa6, 0x71, - 0x55, 0xa3, 0x5e, 0xfd, 0xdd, 0xd4, 0x97, 0x76, 0xec, 0x14, 0xe1, 0x79, - 0x1d, 0x61, 0x33, 0x77, 0xd5, 0x20, 0x6b, 0x71, 0x65, 0x54, 0x35, 0x13, - 0xdc, 0x10, 0xdc, 0x3a, 0xde, 0x92, 0x63, 0x2c, 0x4d, 0xde, 0x46, 0x68, - 0x35, 0xba, 0x71, 0x82, 0x5f, 0xac, 0x59, 0x3a, 0xc1, 0x7c, 0x91, 0xf8, - 0xb5, 0x8a, 0x11, 0x61, 0xef, 0xa6, 0xd5, 0x40, 0xef, 0x1f, 0x20, 0xda, - 0xdc, 0xd5, 0xa9, 0xd6, 0xaf, 0xe0, 0xe3, 0x1b, 0xbf, 0x8d, 0xb0, 0xa0, - 0x8f, 0xf7, 0xcd, 0xf6, 0xa8, 0x40, 0xad, 0x53, 0xba, 0xb5, 0xd4, 0xac, - 0x1f, 0xd8, 0x13, 0x06, 0x4d, 0xcb, 0x35, 0x33, 0x87, 0xe5, 0x60, 0x5d, - 0xb0, 0x7f, 0x4b, 0xb4, 0x4d, 0xbf, 0x39, 0x60, 0xfb, 0xc4, 0xba, 0x73, - 0x09, 0xa0, 0xea, 0xe9, 0x0d, 0xc2, 0xd0, 0xb4, 0x74, 0x5c, 0x1a, 0x6e, - 0x1f, 0x36, 0xfe, 0x8b, 0xb0, 0xdd, 0x26, 0x15, 0x79, 0x4c, 0x47, 0x47, - 0xc9, 0xc3, 0xd7, 0x57, 0x3d, 0x6f, 0x7e, 0x16, 0x0a, 0x62, 0x2b, 0x0c, - 0x50, 0x39, 0x4f, 0xbc, 0x8e, 0x15, 0x47, 0xa5, 0x71, 0x49, 0x17, 0xbf, - 0x4d, 0x96, 0xd4, 0x71, 0x71, 0x6f, 0x5b, 0xfc, 0x35, 0x8c, 0x55, 0x84, - 0x08, 0x6b, 0x6f, 0x22, 0x2c, 0x95, 0xbc, 0xb9, 0xcf, 0x41, 0xd9, 0x10, - 0x03, 0xb4, 0xe9, 0x72, 0xef, 0x93, 0xe5, 0x6e, 0x9c, 0xf4, 0xce, 0x05, - 0x02, 0x0e, 0xe3, 0x25, 0x35, 0x53, 0x61, 0xea, 0x90, 0xa5, 0x50, 0x9d, - 0xdb, 0xa6, 0xce, 0x51, 0xe1, 0x66, 0xab, 0xf5, 0xfd, 0x69, 0x8e, 0xf7, - 0x80, 0xbd, 0xb1, 0xae, 0x15, 0x59, 0xe8, 0x13, 0xb3, 0x0b, 0x9d, 0x5a, - 0x2b, 0xfb, 0x32, 0x5d, 0xce, 0xad, 0x0e, 0x47, 0xd8, 0xbc, 0xe4, 0x26, - 0xd3, 0xbe, 0xb2, 0xe5, 0x93, 0x33, 0xd9, 0x77, 0xce, 0xce, 0xfb, 0xae, - 0xfd, 0x84, 0xca, 0xb4, 0x91, 0x2b, 0xd9, 0x83, 0x75, 0x66, 0x11, 0xfc, - 0x56, 0x05, 0xbc, 0x86, 0x03, 0x6e, 0x93, 0x5b, 0x7d, 0xfb, 0xe1, 0xb3, - 0x65, 0x45, 0x01, 0x6a, 0xaa, 0xc4, 0xcd, 0x92, 0xca, 0xf6, 0x29, 0xc5, - 0xc2, 0x7a, 0xdc, 0x86, 0xa4, 0x86, 0x9d, 0x21, 0xac, 0x1e, 0x65, 0x42, - 0xbd, 0xb5, 0x18, 0x7c, 0x3b, 0x19, 0x10, 0x1d, 0xc8, 0xbd, 0xaf, 0xdd, - 0xbb, 0x75, 0x09, 0x10, 0xb5, 0xbe, 0x98, 0x56, 0xc1, 0xec, 0x61, 0x34, - 0x64, 0x01, 0x61, 0xdb, 0x57, 0x2e, 0xac, 0x19, 0x3a, 0xf1, 0x86, 0xfd, - 0x3b, 0x8f, 0x63, 0x25, 0xff, 0xe9, 0xc8, 0xde, 0xb3, 0x45, 0x22, 0xe1, - 0xcc, 0x93, 0x77, 0xe1, 0xe2, 0xb5, 0x54, 0x09, 0x70, 0x88, 0x0d, 0xb5, - 0x6f, 0x7b, 0xb1, 0x64, 0x2b, 0x33, 0x8e, 0xf3, 0x04, 0x1c, 0xe0, 0xab, - 0xab, 0x12, 0x9a, 0x95, 0x70, 0x68, 0x8d, 0x87, 0xeb, 0xd1, 0x42, 0xd8, - 0x76, 0x4f, 0x0d, 0x3d, 0x1d, 0xfd, 0xb5, 0x42, 0x24, 0xa5, 0x97, 0x2b, - 0xc4, 0x40, 0x67, 0x80, 0xab, 0x58, 0x61, 0x05, 0xcc, 0xd7, 0x87, 0x5c, - 0xaa, 0x60, 0xc0, 0xc8, 0xe6, 0xbb, 0xf8, 0x14, 0xe4, 0x63, 0x1d, 0x1c, - 0x2a, 0x88, 0xa3, 0x2e, 0xca, 0x91, 0x83, 0xa3, 0x60, 0xdf, 0x6c, 0x49, - 0xe7, 0x36, 0x71, 0xcd, 0xc2, 0xc0, 0xb8, 0xd8, 0xfe, 0x86, 0xb5, 0x31, - 0x2b, 0xe2, 0xe8, 0xf1, 0x26, 0xc9, 0xf9, 0xe4, 0x88, 0x01, 0xec, 0xc9, - 0x67, 0x4c, 0x5e, 0x98, 0xb5, 0xf7, 0x3d, 0xc0, 0x50, 0x8d, 0xf1, 0xec, - 0xb5, 0x3d, 0x5a, 0x01, 0x1f, 0xde, 0xdf, 0x0e, 0x9f, 0x40, 0xea, 0x62, - 0x74, 0xe3, 0xef, 0x0b, 0x31, 0xb1, 0x3f, 0x1c, 0x28, 0xd9, 0x83, 0xd2, - 0x79, 0x70, 0x37, 0x99, 0x84, 0x2e, 0xe7, 0x74, 0x81, 0xa9, 0xb2, 0xea, - 0x62, 0x37, 0x88, 0x0c, 0x38, 0xee, 0x04, 0x6a, 0xf3, 0xec, 0xac, 0x05, - 0x76, 0x6a, 0xdb, 0xe1, 0x64, 0x37, 0x3e, 0x57, 0x06, 0x00, 0xff, 0xfc, - 0x0f, 0xe4, 0x47, 0x66, 0xfc, 0x32, 0xfa, 0xca, 0x60, 0xa3, 0xfd, 0x9f, - 0xc7, 0x65, 0x82, 0x80, 0x43, 0x75, 0xf3, 0xed, 0xa6, 0x07, 0x97, 0xca, - 0x86, 0xc9, 0xeb, 0xcc, 0xb3, 0x76, 0x91, 0x80, 0x37, 0xe4, 0x9e, 0xb2, - 0x2a, 0xcd, 0x65, 0x04, 0xe2, 0x9c, 0xaa, 0x5b, 0xf3, 0xc7, 0xd7, 0xae, - 0x6c, 0x3b, 0x90, 0x66, 0xc1, 0xf4, 0x4e, 0x77, 0xdf, 0x2d, 0x9a, 0xeb, - 0xa6, 0xb0, 0xd0, 0xa3, 0x06, 0x20, 0x03, 0xec, 0x57, 0xc6, 0x78, 0xfb, - 0xd1, 0x35, 0x0a, 0x87, 0xf6, 0x8a, 0xd7, 0x26, 0xd0, 0x4f, 0x9a, 0xf8, - 0xfc, 0x8b, 0xc7, 0x40, 0xd5, 0xd5, 0x56, 0xb5, 0x01, 0xbd, 0x4b, 0xb3, - 0x8f, 0xf6, 0xee, 0x57, 0x3e, 0xcc, 0xb1, 0x4c, 0x57, 0xbe, 0x46, 0x3b, - 0x4f, 0x80, 0xe5, 0x47, 0xee, 0xf9, 0x0b, 0xf7, 0xbe, 0x95, 0x73, 0x35, - 0xf0, 0x83, 0x3a, 0xaf, 0xe8, 0x24, 0x97, 0x0f, 0x29, 0x9c, 0x93, 0xdf, - 0x93, 0x10, 0x4e, 0x39, 0x3d, 0xfe, 0xef, 0x7c, 0xd4, 0x2a, 0x40, 0x75, - 0x1c, 0xb3, 0x6d, 0x43, 0x0b, 0xb5, 0xc3, 0x00, 0x2a, 0x72, 0xfe, 0xa7, - 0xe9, 0x73, 0x26, 0x90, 0x93, 0x98, 0xb4, 0x39, 0xdb, 0x4b, 0x9c, 0xb4, - 0xe1, 0xbe, 0xcc, 0x03, 0xe2, 0x93, 0x05, 0xf2, 0x3d, 0x34, 0x51, 0xc3, - 0xc0, 0x1e, 0xa5, 0x9f, 0x86, 0x9c, 0x87, 0x34, 0x21, 0x0b, 0x1d, 0xee, - 0x8a, 0xcb, 0xab, 0x10, 0xda, 0xe1, 0xcc, 0x55, 0xa4, 0x6b, 0xd9, 0xcd, - 0xe7, 0xdc, 0xdc, 0xb5, 0xac, 0xac, 0xe7, 0x9a, 0x67, 0x01, 0x06, 0xa9, - 0x4b, 0x3e, 0xbc, 0xc5, 0xef, 0x6d, 0xd6, 0x56, 0xe0, 0xb6, 0x11, 0xee, - 0x34, 0x05, 0x4b, 0x00, 0xd9, 0xb2, 0x5e, 0x79, 0xbf, 0x7b, 0x43, 0x8f, - 0x96, 0xde, 0x8d, 0x82, 0x54, 0x42, 0x4a, 0xed, 0x2e, 0x73, 0xd8, 0x44, - 0x4a, 0xe4, 0xae, 0xf2, 0xa8, 0x2c, 0xbf, 0x5c, 0x8f, 0x72, 0xff, 0xce, - 0x16, 0x80, 0x63, 0x4c, 0x75, 0xd7, 0x69, 0x91, 0x5b, 0xbe, 0xfd, 0x84, - 0xa4, 0x52, 0x3e, 0x12, 0x03, 0x6e, 0xe9, 0xd0, 0x71, 0x6f, 0x25, 0x7e, - 0x2c, 0x7f, 0x04, 0xf2, 0x83, 0x28, 0x27, 0xdc, 0x9f, 0x5a, 0xbb, 0xfe, - 0xfe, 0xcf, 0xa4, 0x84, 0x69, 0x23, 0x4a, 0x2e, 0x43, 0xff, 0xb1, 0xd3, - 0xfc, 0xd5, 0xce, 0x88, 0xbe, 0xf9, 0x32, 0x2e, 0xe5, 0xe5, 0x4b, 0x0a, - 0x5e, 0x78, 0xb0, 0xf9, 0x82, 0x37, 0x1e, 0x7c, 0xbc, 0x74, 0xc2, 0xfc, - 0x39, 0x12, 0xbd, 0x6c, 0x1d, 0xfb, 0xe2, 0xf8, 0xe9, 0xc2, 0x17, 0xaf, - 0xa4, 0x1f, 0x1d, 0xce, 0x54, 0xf0, 0x03, 0xeb, 0x88, 0x04, 0xe4, 0xf5, - 0x70, 0x4b, 0xe1, 0x52, 0xa7, 0x9c, 0xd5, 0x83, 0x83, 0x3c, 0xea, 0x50, - 0xd6, 0xaa, 0x82, 0x5e, 0x98, 0x25, 0x59, 0x1f, 0xa2, 0xfa, 0xae, 0x05, - 0x6f, 0x39, 0x60, 0xa3, 0x79, 0x9b, 0x7a, 0x0c, 0x57, 0x30, 0x77, 0xe7, - 0xe0, 0x71, 0xb6, 0x2b, 0xd8, 0xf2, 0x90, 0xd4, 0xbd, 0x70, 0xf0, 0x3e, - 0x8f, 0x10, 0xef, 0xed, 0x96, 0xc3, 0xb3, 0xaf, 0x2f, 0x4a, 0x1b, 0x09, - 0x66, 0xbf, 0x1b, 0x36, 0xd0, 0x31, 0x51, 0x5f, 0x5f, 0x73, 0x7c, 0xfb, - 0x0e, 0xcb, 0x89, 0xd3, 0x40, 0xc7, 0xcd, 0x17, 0x7a, 0xb9, 0xde, 0x01, - 0x52, 0x33, 0xb4, 0xc0, 0xf4, 0x3c, 0x3f, 0x2f, 0x41, 0x80, 0x8d, 0x3e, - 0x8b, 0x29, 0x15, 0x17, 0x91, 0x63, 0x7a, 0x96, 0x5f, 0xde, 0x53, 0x71, - 0x3c, 0xbc, 0xb6, 0x56, 0xe6, 0x8f, 0x0a, 0xac, 0x9c, 0x4a, 0xed, 0x18, - 0x70, 0xf0, 0x88, 0x29, 0x5b, 0x5d, 0xc7, 0x56, 0x0c, 0xf5, 0x88, 0x87, - 0x9c, 0xf4, 0x3c, 0x3a, 0xde, 0x60, 0x29, 0x28, 0x5e, 0x64, 0x94, 0x2f, - 0x65, 0x9a, 0xb3, 0x37, 0x33, 0x18, 0x66, 0x77, 0x2b, 0x5a, 0x81, 0x8a, - 0x6f, 0xec, 0x4d, 0x1f, 0x93, 0x93, 0xae, 0x39, 0x87, 0xf4, 0x71, 0xb8, - 0x8d, 0x3b, 0x23, 0x4d, 0xa9, 0x52, 0xa0, 0x42, 0x6c, 0x97, 0xda, 0x0d, - 0xdc, 0x9e, 0x26, 0xe9, 0x3a, 0xe0, 0xa2, 0x1b, 0x18, 0x6c, 0x52, 0x56, - 0xa4, 0x15, 0xe5, 0x85, 0xf3, 0x92, 0x40, 0x1b, 0xac, 0x41, 0xce, 0x1a, - 0x2c, 0x79, 0xb1, 0x86, 0x93, 0x86, 0xa3, 0xe1, 0x03, 0xb8, 0x8b, 0xe0, - 0x83, 0xa5, 0x68, 0x0f, 0x79, 0xd6, 0x95, 0x48, 0xac, 0x97, 0x0b, 0x9a, - 0x07, 0x36, 0x0f, 0x0c, 0xa7, 0xe1, 0x09, 0x57, 0x3b, 0xc4, 0x9c, 0xbd, - 0x88, 0xfa, 0x18, 0x24, 0x72, 0x9e, 0x7b, 0x73, 0x69, 0xa4, 0xbf, 0x76, - 0x1e, 0xbd, 0xd0, 0x8d, 0xfa, 0xeb, 0xb5, 0x7e, 0x39, 0x67, 0xb3, 0xe3, - 0x2b, 0x8a, 0x45, 0x1e, 0x12, 0x77, 0xe5, 0x8c, 0x44, 0xd0, 0x74, 0xe1, - 0x3b, 0x79, 0x0d, 0x04, 0x6f, 0xa5, 0xec, 0x3d, 0x5e, 0xf7, 0xfa, 0x1b, - 0xbc, 0x3e, 0xe3, 0xd6, 0x78, 0x40, 0x10, 0x0b, 0x0f, 0x74, 0x3f, 0x93, - 0xa5, 0xc7, 0xae, 0xa9, 0x49, 0xf8, 0x9c, 0x62, 0xd8, 0xd3, 0xb5, 0x81, - 0x1b, 0x19, 0x3e, 0x78, 0x7e, 0x7c, 0x50, 0xec, 0xee, 0x87, 0x17, 0x55, - 0x5b, 0xc4, 0x74, 0xd6, 0x25, 0xe8, 0xdd, 0x1a, 0x07, 0x4f, 0x18, 0xfb, - 0x2d, 0x81, 0xee, 0x65, 0x5f, 0x7b, 0xa4, 0x69, 0x0d, 0x4f, 0xd2, 0xf5, - 0xdb, 0x10, 0x38, 0x8c, 0x50, 0xfd, 0xd7, 0xbc, 0xd5, 0x71, 0x48, 0xda, - 0xd2, 0xfd, 0x33, 0xf9, 0x15, 0x8a, 0x93, 0x44, 0x4c, 0x04, 0x8e, 0x7d, - 0xfb, 0xeb, 0x54, 0x12, 0x63, 0x55, 0x5a, 0x89, 0x57, 0x68, 0x8f, 0x30, - 0x5c, 0xd8, 0xb7, 0x82, 0xe8, 0xd1, 0x76, 0xfa, 0x45, 0xe1, 0x6a, 0xb6, - 0x30, 0xa5, 0x3b, 0x0d, 0xb4, 0xf2, 0xe4, 0x19, 0x3a, 0xc1, 0x5c, 0xc2, - 0x50, 0x7a, 0xd5, 0x31, 0xa5, 0x10, 0x66, 0xeb, 0xfc, 0x51, 0x4c, 0x05, - 0xd7, 0xf6, 0xfb, 0x77, 0xca, 0x73, 0x6d, 0x9a, 0x84, 0x9a, 0xc7, 0x91, - 0x87, 0x6e, 0x08, 0x3f, 0x68, 0xf9, 0xf3, 0xc6, 0xda, 0xe9, 0x77, 0xa7, - 0xd3, 0x6f, 0x2b, 0x15, 0x1c, 0x09, 0x2e, 0xc7, 0x90, 0x28, 0x1c, 0x12, - 0x36, 0x7c, 0xfb, 0xf8, 0x22, 0xed, 0x64, 0xf7, 0xc8, 0x5d, 0x7d, 0xd3, - 0x50, 0xe1, 0x83, 0x66, 0x0b, 0xf7, 0x91, 0xc8, 0x20, 0x58, 0xf7, 0xc1, - 0x63, 0x48, 0xfa, 0xc2, 0xb9, 0x7b, 0x3a, 0xfe, 0x3f, 0xbf, 0x90, 0x04, - 0x2a, 0x7e, 0x18, 0x82, 0xc4, 0x71, 0xec, 0xaa, 0x6b, 0xde, 0x61, 0x24, - 0x33, 0x9f, 0xcf, 0x24, 0xc1, 0xaf, 0x0d, 0x6f, 0xd7, 0x70, 0x6f, 0xba, - 0xd1, 0xf9, 0x72, 0x7e, 0x78, 0x8c, 0x49, 0xab, 0xcb, 0x6c, 0xaf, 0xd8, - 0x12, 0x5a, 0x47, 0x5d, 0x7b, 0x8f, 0x9f, 0xa2, 0x7d, 0xbd, 0x1e, 0xd1, - 0x7e, 0xcc, 0x39, 0x3c, 0x3d, 0xb7, 0x71, 0xb4, 0x92, 0xcf, 0xee, 0x15, - 0xf4, 0x4a, 0xc7, 0xf8, 0xf4, 0xdd, 0x31, 0xf4, 0x99, 0xf6, 0x16, 0x4e, - 0x6a, 0x08, 0xcb, 0x93, 0xd8, 0xd8, 0x70, 0xfb, 0xd1, 0x2c, 0xa9, 0xf2, - 0x73, 0x8b, 0xe5, 0x04, 0xe9, 0xbc, 0x30, 0x8f, 0x5e, 0x4f, 0xea, 0x94, - 0x09, 0xcf, 0x37, 0x33, 0x91, 0x0c, 0x0a, 0xbb, 0xbc, 0x47, 0xcf, 0xc7, - 0x2d, 0x4d, 0x5b, 0x20, 0xae, 0x53, 0x6f, 0x26, 0x95, 0x8a, 0xcd, 0xde, - 0xc9, 0x50, 0xf5, 0xb7, 0xd4, 0xae, 0x08, 0x8a, 0xfc, 0xfa, 0x98, 0xff, - 0xaa, 0x4f, 0x8e, 0x95, 0x0e, 0x5b, 0xed, 0x97, 0xb1, 0xa9, 0x34, 0xaf, - 0x1e, 0xcb, 0x2c, 0x85, 0xe3, 0x9d, 0xf8, 0x08, 0x3e, 0xb6, 0x52, 0x88, - 0x43, 0xf1, 0x08, 0xbc, 0xd1, 0x41, 0xa9, 0xa7, 0x3c, 0x9a, 0x29, 0x47, - 0x23, 0x3f, 0xd9, 0x8c, 0x1b, 0xec, 0xcd, 0x8f, 0x1e, 0x76, 0x3d, 0x7e, - 0xf4, 0xcb, 0x5b, 0xea, 0x70, 0x4c, 0xc3, 0x87, 0x64, 0x29, 0xfd, 0x5e, - 0x69, 0x2e, 0x6b, 0x6b, 0xaa, 0x95, 0x2e, 0xb1, 0x79, 0xdf, 0xf2, 0xd7, - 0xd7, 0x19, 0xc6, 0x23, 0xd1, 0x2d, 0xd1, 0x39, 0xb0, 0x66, 0x95, 0x30, - 0x63, 0x4a, 0x81, 0x0a, 0xa5, 0x9a, 0xe7, 0x33, 0x84, 0xa5, 0xf0, 0x91, - 0x9b, 0x85, 0x73, 0xaf, 0x2d, 0xa5, 0xf8, 0xc2, 0x1e, 0xb9, 0x82, 0x1b, - 0xad, 0x29, 0x07, 0xf2, 0xd5, 0xec, 0x4f, 0x74, 0x3a, 0x6c, 0xab, 0x74, - 0x3f, 0x6f, 0x53, 0xe5, 0x1e, 0x4d, 0x1b, 0x07, 0x2f, 0x6b, 0xb2, 0xb7, - 0x62, 0x8c, 0xc1, 0xad, 0x32, 0x81, 0x87, 0xa3, 0xac, 0x5d, 0x4e, 0x11, - 0x3a, 0xb4, 0x17, 0xfe, 0xb1, 0xf1, 0xf5, 0xb6, 0x51, 0x48, 0x05, 0xe8, - 0x6d, 0x5e, 0x09, 0x12, 0x12, 0xed, 0x2b, 0x6a, 0xbc, 0x47, 0xa0, 0xf7, - 0x1c, 0x88, 0xc3, 0x5f, 0xba, 0x9d, 0x21, 0xed, 0xe9, 0xeb, 0x8b, 0xeb, - 0x24, 0xc1, 0x91, 0x6f, 0xae, 0xb3, 0xeb, 0xbd, 0x71, 0x0c, 0x22, 0x42, - 0xec, 0x4f, 0x2a, 0x8a, 0xde, 0x3b, 0x77, 0x95, 0x9e, 0x76, 0xeb, 0x2c, - 0x84, 0x59, 0x1f, 0x93, 0xb3, 0xa0, 0x24, 0xc6, 0x72, 0xa9, 0x5e, 0x73, - 0x79, 0x87, 0x08, 0x22, 0x0b, 0x5e, 0x7d, 0x1f, 0x35, 0x3d, 0x93, 0x95, - 0x5a, 0x5a, 0x5e, 0x43, 0x4b, 0x87, 0x96, 0x98, 0xc0, 0xd2, 0xa6, 0xdf, - 0x6b, 0x37, 0x0f, 0xd0, 0x3c, 0x7a, 0xb5, 0xa7, 0xdf, 0xc0, 0x47, 0xa6, - 0xdf, 0x75, 0xea, 0xcc, 0xaa, 0x51, 0x31, 0xe3, 0xbf, 0x54, 0x2b, 0x1a, - 0x73, 0xfb, 0x4b, 0x23, 0x2b, 0x92, 0x7a, 0x12, 0x5d, 0x17, 0xba, 0xf1, - 0xf3, 0x75, 0x71, 0x19, 0x1e, 0x7e, 0x76, 0xaa, 0xf4, 0xdb, 0x34, 0xd0, - 0x47, 0xb2, 0x7f, 0xe0, 0x0b, 0x77, 0xe2, 0x3d, 0xed, 0x12, 0x9a, 0x0a, - 0x99, 0xfd, 0xc2, 0x38, 0x15, 0xa9, 0x63, 0xe0, 0x53, 0xbf, 0x9c, 0xfd, - 0xfa, 0x9a, 0xa0, 0x7d, 0xad, 0x73, 0x1e, 0x5f, 0xf5, 0x8b, 0x79, 0x0c, - 0xb9, 0x1f, 0xc1, 0x24, 0xa9, 0xbc, 0x5e, 0x65, 0x1b, 0x78, 0x97, 0xaf, - 0xda, 0x92, 0x86, 0x97, 0x52, 0x32, 0x17, 0x66, 0xf5, 0x96, 0x16, 0x39, - 0x4a, 0x74, 0x0e, 0xd4, 0x2b, 0xf6, 0x43, 0xec, 0x35, 0x5e, 0x43, 0x9c, - 0x94, 0x75, 0x11, 0x08, 0x81, 0x30, 0x8d, 0x5b, 0x11, 0xd6, 0xe5, 0x90, - 0xb7, 0xfa, 0xaf, 0xca, 0x62, 0xe4, 0x5b, 0x08, 0x75, 0xb6, 0xb9, 0x9f, - 0x38, 0x44, 0x00, 0x83, 0xf9, 0x02, 0x4b, 0x78, 0x01, 0x42, 0x25, 0x81, - 0xaf, 0xa2, 0xa2, 0x68, 0x47, 0x7d, 0xdd, 0x4b, 0x3a, 0xe6, 0xb3, 0xf6, - 0xc2, 0x0f, 0xca, 0x33, 0x57, 0xeb, 0xea, 0x3b, 0x3c, 0x49, 0x89, 0xe2, - 0x96, 0xc2, 0xff, 0x0b, 0xa9, 0xdb, 0xce, 0x7b, 0xe7, 0xa3, 0x2b, 0x95, - 0x07, 0x76, 0xff, 0x6b, 0xeb, 0x96, 0xc5, 0x41, 0xdf, 0xa7, 0xad, 0x35, - 0x50, 0xe9, 0xcd, 0x1e, 0x78, 0x27, 0x7a, 0xf5, 0xc9, 0x0a, 0x02, 0x3c, - 0x3d, 0x72, 0x51, 0x2d, 0x6a, 0x6a, 0x4d, 0xba, 0xc6, 0xfe, 0x13, 0x7c, - 0x42, 0x43, 0xbc, 0xcf, 0xd3, 0x5f, 0xba, 0x35, 0xe8, 0xec, 0xdd, 0x7d, - 0x2e, 0xb4, 0x49, 0xe1, 0xa1, 0xa2, 0xaa, 0x00, 0xf3, 0x38, 0x06, 0xe6, - 0xfb, 0x3e, 0x28, 0xce, 0x6f, 0x3e, 0x54, 0xfc, 0x27, 0x6a, 0x18, 0x7e, - 0x40, 0x1e, 0x91, 0x4a, 0xb7, 0xf8, 0x30, 0xd8, 0x61, 0x94, 0x47, 0xd9, - 0x07, 0x8a, 0x3b, 0x52, 0x15, 0x3e, 0xea, 0xc2, 0xb2, 0xbf, 0xf7, 0x80, - 0xa9, 0xac, 0xbd, 0x95, 0x60, 0x25, 0x43, 0x9d, 0x3f, 0xb8, 0x18, 0x68, - 0x14, 0xd5, 0xea, 0x07, 0xca, 0xd7, 0x75, 0x80, 0x63, 0xb8, 0x57, 0xa4, - 0xe6, 0x35, 0x66, 0xfa, 0x01, 0x49, 0xbd, 0xf0, 0xb8, 0x0c, 0xe3, 0xad, - 0xc8, 0xb7, 0xe1, 0x3d, 0xf4, 0x8d, 0xc7, 0x79, 0xef, 0x35, 0x20, 0xf3, - 0xf9, 0xed, 0xc9, 0x33, 0xf6, 0xbc, 0x7c, 0x33, 0x9d, 0xff, 0x22, 0x82, - 0xff, 0x60, 0x1c, 0x9f, 0x5e, 0xd1, 0x4c, 0x3d, 0x3d, 0x64, 0xa7, 0x7e, - 0xa8, 0xed, 0x6e, 0x22, 0x37, 0x50, 0xc3, 0xf3, 0xae, 0xe9, 0xc5, 0x68, - 0x69, 0xb7, 0xee, 0x69, 0xff, 0xaf, 0xb1, 0xf6, 0x4f, 0xdf, 0x98, 0xfe, - 0x60, 0x20, 0x5d, 0x74, 0x33, 0x6c, 0xee, 0x99, 0xea, 0x3e, 0x7f, 0x43, - 0x38, 0x37, 0x70, 0xee, 0xa4, 0x59, 0x38, 0xef, 0xaf, 0x7d, 0xd8, 0x3c, - 0x97, 0xef, 0xd7, 0x1c, 0xa9, 0xa6, 0x93, 0x6d, 0x20, 0xdf, 0x4e, 0x9a, - 0xf2, 0x05, 0xa3, 0xfa, 0x3d, 0x99, 0x48, 0xc7, 0xc2, 0x09, 0xa6, 0xb5, - 0x7b, 0x3a, 0x82, 0xdf, 0x90, 0x92, 0x0f, 0x33, 0xdc, 0xee, 0xb9, 0xec, - 0xe9, 0x83, 0x1e, 0x7b, 0x8d, 0xf9, 0x79, 0xb1, 0xe2, 0xf8, 0x31, 0xd9, - 0x6e, 0x81, 0x13, 0x81, 0x4d, 0x1a, 0xec, 0x6c, 0xcb, 0x03, 0xca, 0x34, - 0x5a, 0x17, 0x08, 0x66, 0x9e, 0x41, 0xfe, 0x1b, 0xb4, 0x22, 0x90, 0x2e, - 0xfd, 0x38, 0x8b, 0xe4, 0x3b, 0xb6, 0xee, 0x4a, 0x0e, 0x81, 0xcf, 0xdb, - 0x07, 0x73, 0xf9, 0x9d, 0x52, 0x5f, 0xc9, 0x7d, 0x67, 0x9b, 0x73, 0x66, - 0xa8, 0x6e, 0x6a, 0x9f, 0x9c, 0xa7, 0x16, 0x62, 0x9e, 0xf6, 0x6b, 0x1e, - 0x27, 0xed, 0x79, 0x3a, 0x6f, 0x31, 0xec, 0x2b, 0x8e, 0xd2, 0xf3, 0xf4, - 0xdb, 0x31, 0x99, 0x99, 0x9e, 0x71, 0x6d, 0x10, 0x13, 0x04, 0x83, 0xcd, - 0xf2, 0x78, 0xc5, 0x3e, 0x39, 0x97, 0xaf, 0x23, 0x52, 0xcd, 0x16, 0x73, - 0x20, 0xc3, 0x63, 0xc9, 0x5c, 0x0a, 0x86, 0x9a, 0x9a, 0x8b, 0x36, 0x23, - 0x2b, 0x38, 0x43, 0x22, 0xec, 0x32, 0xb8, 0xb0, 0x14, 0x43, 0x13, 0xcb, - 0x6e, 0x73, 0xcf, 0xd7, 0xf9, 0xb1, 0x76, 0xac, 0x1e, 0x8f, 0x48, 0xc4, - 0x14, 0x9e, 0xbf, 0xe7, 0xd6, 0xf7, 0x65, 0x1a, 0xa9, 0x98, 0x6b, 0x97, - 0x5e, 0xc6, 0xf6, 0x42, 0x9f, 0x36, 0xca, 0x42, 0x87, 0x75, 0x9a, 0x0d, - 0x5a, 0xb3, 0x91, 0xcd, 0xe0, 0x58, 0xb1, 0x66, 0x29, 0xd8, 0x60, 0xbb, - 0x4b, 0xf7, 0xa2, 0xe5, 0xb9, 0x25, 0x12, 0x8d, 0x85, 0x79, 0xa6, 0xf4, - 0x1d, 0x1e, 0xcc, 0x31, 0xeb, 0xa3, 0xc9, 0x5f, 0xf9, 0x6c, 0x23, 0x9b, - 0xf1, 0x84, 0x82, 0xb1, 0xd6, 0x2a, 0x49, 0xf5, 0x67, 0x79, 0x89, 0x9b, - 0xa8, 0xb2, 0x9d, 0x1b, 0xfb, 0x12, 0x7c, 0x7c, 0x1c, 0xad, 0xf8, 0x23, - 0xff, 0x95, 0x9d, 0x5f, 0x86, 0x4f, 0x8d, 0x56, 0x6f, 0xe9, 0x05, 0xeb, - 0xb4, 0xc3, 0x5b, 0xb0, 0x44, 0x1b, 0x72, 0xf0, 0x69, 0x70, 0x96, 0x7e, - 0x71, 0x82, 0x82, 0x49, 0xd6, 0xda, 0x99, 0xe3, 0x77, 0x82, 0x11, 0xd7, - 0x48, 0xc6, 0x77, 0xb6, 0x61, 0x12, 0x0b, 0xe0, 0xfc, 0xdc, 0x3c, 0x6a, - 0x5e, 0x56, 0x2d, 0x4b, 0xbe, 0xfa, 0x7e, 0xec, 0x52, 0xe2, 0x80, 0xda, - 0x15, 0x83, 0x04, 0x2a, 0x46, 0x14, 0x34, 0x27, 0x90, 0x8e, 0xf7, 0xca, - 0xe1, 0x11, 0x2e, 0xd9, 0x8a, 0x0a, 0xad, 0xbc, 0x5d, 0xa8, 0x25, 0x1e, - 0xb5, 0x75, 0xca, 0x0f, 0xf7, 0x2a, 0x87, 0x9a, 0xfe, 0xb8, 0xba, 0x22, - 0x9f, 0x8f, 0x61, 0xa2, 0x8b, 0xee, 0x75, 0x42, 0xa9, 0x1b, 0x25, 0x86, - 0xba, 0x87, 0x25, 0x6e, 0x94, 0x7a, 0x81, 0x4f, 0x30, 0xed, 0x09, 0x1a, - 0x66, 0x3b, 0x63, 0x9d, 0x04, 0x83, 0x97, 0x81, 0x1c, 0x1f, 0x07, 0x59, - 0x3c, 0x7a, 0x05, 0x90, 0xbb, 0x09, 0x2c, 0x79, 0x41, 0xf0, 0xac, 0x2d, - 0xd3, 0xdc, 0xb6, 0x25, 0x71, 0xfa, 0x68, 0x2d, 0xeb, 0x47, 0x29, 0xac, - 0x5c, 0xcc, 0xf4, 0x0b, 0xbb, 0xf2, 0xa2, 0xa1, 0xc3, 0xf6, 0xc6, 0xbe, - 0xf7, 0x62, 0x59, 0xf3, 0xb8, 0x5f, 0xb2, 0x42, 0xe1, 0x50, 0xa4, 0x82, - 0x75, 0x42, 0xf9, 0xa4, 0xd0, 0xed, 0x41, 0x1d, 0x43, 0x87, 0xa3, 0x8f, - 0x95, 0x02, 0x6f, 0x8e, 0x01, 0xc8, 0xd4, 0x60, 0x2c, 0x90, 0xc1, 0xa2, - 0xa0, 0x7c, 0xd6, 0x38, 0x23, 0x88, 0xec, 0xb9, 0x8c, 0x26, 0x06, 0xe5, - 0xb1, 0x8f, 0x5b, 0x75, 0xba, 0x2b, 0xf0, 0xee, 0x18, 0x15, 0x10, 0xa8, - 0x10, 0xf0, 0x67, 0x1c, 0x94, 0xe8, 0x11, 0x77, 0x66, 0x78, 0xae, 0x10, - 0x5a, 0xe7, 0xda, 0x8c, 0xfb, 0x18, 0x15, 0xaf, 0x54, 0xca, 0x67, 0xd8, - 0x33, 0x6b, 0xf4, 0x6b, 0x88, 0x83, 0x7e, 0xe7, 0x90, 0x09, 0x88, 0xf7, - 0x4f, 0x3a, 0xbf, 0xef, 0x2f, 0x77, 0x6b, 0x73, 0x46, 0x9b, 0x35, 0xb7, - 0x4e, 0xc5, 0x08, 0xdc, 0x7e, 0x5b, 0x24, 0x8f, 0x21, 0xc0, 0x3a, 0x90, - 0x03, 0x1e, 0x77, 0x64, 0x3e, 0x0c, 0xa1, 0x99, 0xd7, 0x11, 0xf6, 0x80, - 0xa3, 0xbd, 0x33, 0xa3, 0x5f, 0xbc, 0xd1, 0x1a, 0x5f, 0x78, 0xc5, 0xb2, - 0xea, 0x46, 0xcc, 0x48, 0x37, 0x53, 0x64, 0xa2, 0x96, 0x38, 0x62, 0x8c, - 0x76, 0xbb, 0xe4, 0x93, 0xc3, 0xf6, 0xc8, 0x36, 0x05, 0x18, 0xa6, 0xb1, - 0x4f, 0xdb, 0x57, 0xf4, 0x4b, 0x21, 0x95, 0xdb, 0xc0, 0x72, 0x6f, 0x81, - 0xb1, 0xed, 0x16, 0x8c, 0x44, 0x35, 0xab, 0x45, 0x46, 0xce, 0x69, 0x78, - 0x1a, 0xed, 0x16, 0xc9, 0xeb, 0x9e, 0x83, 0x3c, 0x9c, 0x7c, 0x62, 0xb3, - 0x6d, 0x36, 0x77, 0x9c, 0xb8, 0x87, 0x2d, 0xbf, 0xd1, 0xf0, 0x8e, 0x7c, - 0x70, 0xa1, 0x26, 0x90, 0x83, 0x6d, 0x98, 0x4f, 0xaf, 0x21, 0x21, 0xbc, - 0x23, 0x7e, 0x8b, 0x1e, 0xb8, 0xc6, 0x3c, 0x84, 0x68, 0xd6, 0x43, 0x44, - 0xc7, 0xad, 0x26, 0x88, 0x71, 0xf4, 0xa0, 0x3a, 0xf2, 0x25, 0xaa, 0xeb, - 0xe0, 0x61, 0x74, 0x80, 0x50, 0x61, 0x3b, 0x8e, 0x24, 0x11, 0x1f, 0x95, - 0xa1, 0xed, 0x6c, 0x50, 0xcb, 0xd3, 0x29, 0xd7, 0xce, 0x22, 0x62, 0xb6, - 0x4f, 0xb8, 0x49, 0x89, 0x38, 0x5a, 0xee, 0xd3, 0x2d, 0xe0, 0x60, 0x80, - 0x41, 0x1e, 0x47, 0x3b, 0x31, 0x0c, 0xa6, 0x12, 0x48, 0x52, 0x67, 0x6d, - 0x1c, 0x66, 0xcc, 0xc7, 0xab, 0x1b, 0x06, 0x11, 0x3e, 0xc6, 0x91, 0x6e, - 0xbf, 0xc0, 0xa8, 0xb3, 0x0d, 0x41, 0x7b, 0x0a, 0x1c, 0xe2, 0x9e, 0x3c, - 0xc1, 0xd1, 0xb2, 0x80, 0x79, 0x1c, 0xd9, 0x66, 0x0b, 0xff, 0x4e, 0xf0, - 0x6a, 0x91, 0x6d, 0x69, 0x09, 0x44, 0x1e, 0x13, 0xd1, 0xb5, 0xec, 0x77, - 0xba, 0x87, 0x6e, 0x4c, 0x53, 0xd0, 0xbf, 0x2f, 0xf2, 0x95, 0xb6, 0xf8, - 0xda, 0x2b, 0xf5, 0xd4, 0x3f, 0xb2, 0xed, 0xa6, 0xed, 0xbc, 0x00, 0x08, - 0xd0, 0xb6, 0x35, 0xf6, 0xdc, 0x17, 0x20, 0xc4, 0xbd, 0x97, 0x51, 0x35, - 0x7e, 0x1a, 0xc9, 0xde, 0x65, 0x3f, 0x14, 0xe7, 0xd3, 0xeb, 0xfb, 0x3f, - 0xa5, 0x0e, 0x9f, 0x58, 0xec, 0xdf, 0x2d, 0x29, 0xbc, 0x05, 0xe4, 0x70, - 0xe0, 0xb9, 0xf7, 0x39, 0x25, 0xdb, 0x55, 0xdc, 0x23, 0x8f, 0xb7, 0x3f, - 0x71, 0x49, 0xa6, 0x93, 0x1d, 0x55, 0xfe, 0x3a, 0x10, 0xb5, 0x58, 0x7a, - 0xf9, 0x92, 0x8a, 0x0f, 0xf3, 0x07, 0xf3, 0xd6, 0x35, 0xd5, 0x07, 0x2f, - 0x70, 0x66, 0x71, 0x62, 0xd8, 0xcb, 0x39, 0x3b, 0xe8, 0x13, 0xf7, 0xa0, - 0xc4, 0xde, 0x3c, 0x86, 0xe9, 0xc3, 0x95, 0xd7, 0x87, 0xe1, 0x28, 0xaa, - 0xa0, 0x1f, 0xe8, 0xd0, 0x87, 0xab, 0x5f, 0xdc, 0x8a, 0xd8, 0x57, 0x5f, - 0xd6, 0x40, 0x03, 0xbd, 0xc0, 0xff, 0xce, 0x34, 0x3d, 0x87, 0x42, 0x83, - 0x6c, 0x7c, 0xa4, 0x96, 0x9b, 0xa1, 0x3a, 0xe4, 0x61, 0x87, 0x2d, 0x3c, - 0x1b, 0x06, 0x41, 0xb0, 0xa5, 0x5f, 0x91, 0x1a, 0x36, 0x3c, 0x1b, 0x1d, - 0x93, 0x77, 0x40, 0xc6, 0xc6, 0x60, 0xb9, 0x7e, 0xfb, 0x7e, 0x4d, 0x25, - 0xce, 0xf8, 0x99, 0x6d, 0x1a, 0x4e, 0x7b, 0x77, 0x0a, 0xa5, 0xb4, 0xb6, - 0x66, 0xd4, 0x3b, 0x52, 0x43, 0xe0, 0x12, 0x0b, 0x32, 0x6a, 0x84, 0xa7, - 0x47, 0xd7, 0x8a, 0x1e, 0xc8, 0x3e, 0xf1, 0x36, 0xcd, 0xe3, 0x22, 0xbe, - 0x86, 0x89, 0x94, 0xba, 0xba, 0xf7, 0xe3, 0x43, 0x36, 0x81, 0x2a, 0xbb, - 0x3d, 0x40, 0xec, 0x4b, 0x95, 0x68, 0x11, 0x0d, 0x1a, 0xb4, 0x07, 0xaf, - 0x58, 0xfa, 0x67, 0xad, 0xa8, 0x8f, 0x96, 0xf1, 0x13, 0xb7, 0xf7, 0xf7, - 0x37, 0xa4, 0x45, 0x3e, 0x36, 0x9e, 0x47, 0x2d, 0xd3, 0xee, 0x63, 0x19, - 0x84, 0x62, 0x82, 0xe0, 0xbf, 0x1d, 0x81, 0xf8, 0xed, 0xd5, 0xd5, 0x34, - 0x43, 0x7b, 0xf2, 0xea, 0x42, 0x7d, 0x48, 0x07, 0x54, 0x0b, 0x5c, 0xff, - 0x1f, 0x9f, 0x16, 0x1c, 0xcc, 0x58, 0x7c, 0x16, 0x98, 0x9f, 0x23, 0x08, - 0x53, 0x40, 0x81, 0xdf, 0xb1, 0x8d, 0xe9, 0x7f, 0xa4, 0xca, 0x6a, 0x86, - 0xa6, 0x0e, 0x21, 0xe6, 0xef, 0xf0, 0x38, 0x30, 0x93, 0x10, 0xdb, 0xaa, - 0x6d, 0x23, 0x76, 0x31, 0x08, 0x66, 0xc6, 0x65, 0x32, 0x04, 0x6c, 0xfd, - 0x98, 0xa1, 0xe2, 0xd3, 0xd8, 0xf5, 0x63, 0x68, 0x53, 0xba, 0x9f, 0x23, - 0xd0, 0x67, 0x23, 0x12, 0x31, 0xcc, 0x38, 0x1b, 0x1d, 0xd9, 0x06, 0xcd, - 0xae, 0x44, 0x5a, 0x94, 0x2d, 0xe7, 0x0f, 0x5d, 0x7a, 0x30, 0xd4, 0x37, - 0x32, 0x90, 0xdf, 0x6f, 0x43, 0xe7, 0x28, 0x33, 0x41, 0x1d, 0xbf, 0x83, - 0x87, 0x2f, 0x5a, 0xa5, 0xcc, 0x36, 0x94, 0x0a, 0xe4, 0x95, 0xe2, 0x26, - 0x3b, 0x4d, 0x5b, 0xc5, 0xd6, 0xd3, 0x6d, 0x5d, 0x89, 0xda, 0xf2, 0x48, - 0x79, 0x63, 0x7c, 0xa5, 0x07, 0x8f, 0xd6, 0x53, 0xa4, 0x42, 0xbc, 0x41, - 0xd3, 0xaa, 0xd3, 0xe7, 0x50, 0x0e, 0xaf, 0x9c, 0x7e, 0x0c, 0x7c, 0xcc, - 0xd7, 0xd2, 0x09, 0x1a, 0xe2, 0x2a, 0xf3, 0xe1, 0x27, 0x41, 0x3f, 0x71, - 0xa3, 0xa3, 0x69, 0xc0, 0x34, 0x62, 0xb6, 0x3d, 0xd1, 0xda, 0xda, 0x17, - 0xab, 0x3b, 0xc0, 0x38, 0x26, 0xfe, 0x3c, 0xd2, 0xfc, 0x1c, 0x3c, 0x72, - 0x60, 0x07, 0x7e, 0xf2, 0x7c, 0x8b, 0xc4, 0x3c, 0x84, 0xf4, 0x1d, 0x90, - 0xbf, 0x61, 0x0f, 0x29, 0x83, 0x73, 0x83, 0xbb, 0xfa, 0xa2, 0x21, 0xaa, - 0x0c, 0x05, 0xd5, 0x2e, 0x92, 0x19, 0x86, 0x30, 0x76, 0x9d, 0x72, 0x70, - 0xe7, 0xaf, 0x66, 0x0d, 0xf2, 0x2b, 0x34, 0xe6, 0xcb, 0x43, 0x21, 0x68, - 0xdc, 0xa3, 0xa8, 0xa3, 0xb0, 0x62, 0xe5, 0xf4, 0x55, 0x82, 0x6a, 0xd2, - 0x4e, 0xf5, 0xef, 0xf0, 0x5e, 0xd6, 0x0b, 0xd2, 0x64, 0x3f, 0x54, 0xe5, - 0x57, 0x7e, 0x66, 0xfc, 0x43, 0x28, 0xe7, 0xa7, 0x6f, 0xfd, 0xff, 0xb0, - 0x60, 0xf0, 0xab, 0xeb, 0x51, 0xbf, 0xf5, 0x6f, 0xa2, 0xa6, 0x37, 0xb8, - 0x48, 0xc2, 0xef, 0xa4, 0xeb, 0x22, 0xbf, 0x17, 0x88, 0x43, 0xfe, 0x5e, - 0x27, 0x4c, 0x99, 0xbf, 0x10, 0x49, 0xfb, 0x4d, 0x6f, 0xf8, 0x7f, 0xb1, - 0x1c, 0x7e, 0xef, 0xbc, 0xc0, 0xf5, 0xcb, 0xdd, 0x62, 0xb8, 0xbc, 0xc9, - 0x50, 0x57, 0xa7, 0x14, 0x4d, 0xfc, 0x95, 0xaa, 0x3c, 0xba, 0xca, 0xfb, - 0xaf, 0x3f, 0xcf, 0x26, 0xd5, 0xad, 0x85, 0xac, 0x8f, 0x65, 0x71, 0x59, - 0x4b, 0x8c, 0x64, 0x56, 0x50, 0xc4, 0x19, 0x5b, 0x64, 0x4f, 0xfb, 0x3d, - 0xf4, 0xd4, 0x63, 0x9a, 0x99, 0x93, 0x3a, 0x95, 0x71, 0xbc, 0xfa, 0x3d, - 0x26, 0x08, 0x66, 0xfc, 0x2a, 0x50, 0xed, 0x57, 0x77, 0x5c, 0x6a, 0xf8, - 0x7d, 0x4f, 0xd8, 0x50, 0x40, 0x4b, 0x17, 0x81, 0x8b, 0x54, 0xd5, 0x9d, - 0x6f, 0xe9, 0xf1, 0x66, 0xd2, 0xde, 0x97, 0xb4, 0xfc, 0xd9, 0xe3, 0x76, - 0xbb, 0xa1, 0xc2, 0x07, 0x8f, 0x5e, 0xe8, 0x6d, 0x99, 0x7a, 0xb7, 0x4c, - 0xbd, 0x79, 0xd3, 0x80, 0x8e, 0xca, 0x50, 0xa8, 0x3f, 0x94, 0xe8, 0x3d, - 0xa1, 0x31, 0x2f, 0xc2, 0xca, 0xdf, 0xfb, 0x31, 0xa5, 0x27, 0xf4, 0x87, - 0x40, 0x11, 0x22, 0xc8, 0x76, 0x79, 0xe1, 0xf7, 0x8d, 0x61, 0x83, 0x00, - 0x62, 0xc5, 0xaa, 0x91, 0xf7, 0x5e, 0x9b, 0x38, 0xdd, 0x73, 0x5e, 0xad, - 0xc0, 0xdf, 0x07, 0xad, 0xd9, 0xbd, 0xaf, 0xb3, 0x85, 0x39, 0x0a, 0x65, - 0xbf, 0x05, 0x6a, 0x04, 0xf5, 0x93, 0x6f, 0xc9, 0xc0, 0xf3, 0x8c, 0xf4, - 0x2d, 0x71, 0x5f, 0x3a, 0xd7, 0xc9, 0xc4, 0x22, 0x49, 0x71, 0x22, 0x25, - 0xa2, 0x88, 0x31, 0xd1, 0x8f, 0xc4, 0x8d, 0xff, 0xea, 0x5f, 0xb9, 0x26, - 0x69, 0xac, 0xf9, 0xe3, 0x48, 0x55, 0x7f, 0x99, 0x00, 0xb8, 0xcc, 0x4c, - 0x05, 0xc5, 0xa4, 0xeb, 0x00, 0xed, 0x82, 0xf1, 0xfa, 0xcf, 0x3a, 0xd5, - 0xbf, 0xba, 0x02, 0x5e, 0xa7, 0x0b, 0xaf, 0x08, 0x54, 0xae, 0x05, 0x3e, - 0xd0, 0x41, 0x00, 0x27, 0xf1, 0xe7, 0x49, 0x83, 0x3b, 0x40, 0xfa, 0x35, - 0x56, 0x13, 0xf0, 0x67, 0x7a, 0xc3, 0x55, 0xe8, 0xc7, 0x84, 0x53, 0x26, - 0x82, 0xca, 0x0c, 0x12, 0xe4, 0xe5, 0xbb, 0x08, 0xec, 0x99, 0x6e, 0x65, - 0x96, 0x04, 0xde, 0x94, 0x12, 0x27, 0x9a, 0x29, 0x68, 0x4d, 0x58, 0x19, - 0xf9, 0xdb, 0xa6, 0xc8, 0xde, 0x58, 0x97, 0xfc, 0x33, 0xdc, 0x72, 0x36, - 0x02, 0x5d, 0xae, 0xc1, 0xc3, 0x61, 0xf9, 0xa7, 0xdd, 0x81, 0x16, 0x68, - 0xa1, 0x14, 0xe6, 0x9b, 0x3f, 0x18, 0xaa, 0xe4, 0xa2, 0x44, 0x57, 0x69, - 0xf0, 0xa3, 0xa3, 0x40, 0x0f, 0xdc, 0xb9, 0x21, 0xf2, 0xe7, 0x28, 0x63, - 0xb8, 0x38, 0x40, 0xd5, 0x93, 0xdd, 0x23, 0xab, 0x4b, 0x10, 0x68, 0xee, - 0x05, 0x84, 0x22, 0x89, 0x3a, 0x33, 0x10, 0xe2, 0x70, 0x1c, 0x88, 0x31, - 0x5a, 0xc2, 0xf1, 0xe8, 0x36, 0x31, 0xca, 0xdb, 0x74, 0xe2, 0xf5, 0xdb, - 0x4d, 0x5f, 0xb0, 0x28, 0xe0, 0x5c, 0x0a, 0x24, 0x98, 0x85, 0xa9, 0xce, - 0x43, 0x70, 0xa3, 0x5b, 0xae, 0x7a, 0xeb, 0xad, 0x5f, 0xec, 0x6a, 0x2e, - 0x82, 0x3f, 0x0f, 0x25, 0xe8, 0x96, 0x9a, 0x27, 0x06, 0x83, 0xea, 0xcc, - 0xf6, 0xd2, 0x32, 0xf1, 0x4b, 0x45, 0x1f, 0xde, 0xf8, 0x8c, 0x2a, 0x62, - 0xaa, 0xbb, 0x4f, 0x3f, 0x70, 0xce, 0x69, 0x2f, 0x88, 0x3a, 0x31, 0xbb, - 0x49, 0x57, 0xe9, 0x70, 0x43, 0x67, 0xba, 0x43, 0x26, 0x1e, 0x08, 0xf2, - 0x8a, 0x47, 0x47, 0xf2, 0xcc, 0x93, 0xeb, 0x0b, 0xeb, 0xd4, 0x4e, 0x5c, - 0x2e, 0x10, 0x8d, 0xb3, 0x58, 0x8c, 0xd0, 0xeb, 0xed, 0xea, 0x04, 0x89, - 0xd9, 0xe3, 0x2f, 0x4f, 0xdc, 0x8f, 0x2a, 0xed, 0x41, 0xed, 0x45, 0x75, - 0x3e, 0x04, 0x86, 0x3a, 0x8b, 0xea, 0x2c, 0xa7, 0x5c, 0xe6, 0x31, 0x41, - 0x67, 0x06, 0x0d, 0xc9, 0xeb, 0x57, 0x6d, 0x4f, 0x57, 0x02, 0xad, 0xd0, - 0x49, 0xb0, 0xf8, 0xee, 0x9e, 0x9f, 0xb0, 0xa1, 0xb7, 0xaa, 0x2d, 0xdc, - 0x13, 0x06, 0x45, 0x73, 0x37, 0x46, 0x59, 0x2b, 0x82, 0x2e, 0x0b, 0xe8, - 0x5e, 0x6e, 0x93, 0x1c, 0x74, 0xb0, 0x0a, 0xb8, 0xe1, 0x6d, 0x00, 0xb5, - 0xf5, 0x28, 0xfc, 0x49, 0x58, 0x40, 0x55, 0xc0, 0xcb, 0xb0, 0xeb, 0x94, - 0x5b, 0xc6, 0xf2, 0x9d, 0x15, 0x9c, 0xbf, 0xf9, 0xc3, 0xe4, 0xe4, 0x99, - 0x3f, 0x95, 0x2b, 0xa0, 0x3b, 0x43, 0x50, 0x54, 0x88, 0x57, 0x03, 0x56, - 0x35, 0xa0, 0xbe, 0x79, 0x08, 0x8c, 0x03, 0x0c, 0xbd, 0x0c, 0x61, 0xac, - 0x6f, 0x9f, 0xfc, 0x56, 0x5a, 0xfe, 0xe4, 0xef, 0xa5, 0x4e, 0x18, 0x02, - 0x14, 0xdc, 0x26, 0xb4, 0x37, 0x0e, 0xb5, 0xb5, 0xbc, 0xb0, 0xd6, 0x32, - 0x3d, 0x37, 0x25, 0x8b, 0x1b, 0xf0, 0x8c, 0x67, 0x9f, 0xf4, 0xbb, 0x14, - 0xba, 0x73, 0x42, 0xd8, 0x7f, 0xa7, 0x27, 0xbc, 0xbf, 0x13, 0xfb, 0x38, - 0xd2, 0x3b, 0x4f, 0x17, 0x76, 0xd1, 0x59, 0xe3, 0xc3, 0x8c, 0x15, 0x03, - 0xdd, 0xca, 0xc6, 0x3e, 0x16, 0xcf, 0x75, 0x25, 0x4b, 0x2d, 0xd0, 0x07, - 0xac, 0xf7, 0x07, 0xaf, 0x4b, 0xbb, 0x83, 0x1f, 0xe9, 0xf6, 0xb4, 0xd4, - 0xc2, 0x73, 0xe2, 0x4a, 0xe3, 0x49, 0x63, 0xf0, 0xee, 0xe7, 0xa1, 0xa4, - 0x5a, 0xa9, 0x87, 0x70, 0x55, 0x4b, 0x46, 0x2d, 0x9a, 0x2c, 0xca, 0xd2, - 0x3c, 0x8e, 0xf2, 0xfc, 0x78, 0xc3, 0xbd, 0xda, 0x4b, 0xc8, 0xc6, 0x90, - 0x94, 0xde, 0x5e, 0x49, 0xe9, 0x46, 0x9b, 0x08, 0xde, 0x38, 0x31, 0x18, - 0x63, 0x0d, 0xf1, 0xe1, 0x0c, 0x24, 0x59, 0x4f, 0x00, 0xdd, 0x75, 0x4f, - 0x35, 0x7a, 0x0e, 0x30, 0xc6, 0xb2, 0x0c, 0x79, 0xfd, 0x2b, 0xe3, 0xd3, - 0xbf, 0x12, 0x9e, 0xf2, 0xe2, 0x32, 0x90, 0xa5, 0x73, 0xf9, 0x16, 0xa3, - 0x45, 0xfc, 0xbf, 0xd3, 0xea, 0x88, 0xc8, 0x7c, 0x9b, 0xfc, 0x89, 0x11, - 0xc6, 0x68, 0x8a, 0x9a, 0x7b, 0x37, 0x21, 0x07, 0x42, 0xc7, 0xf7, 0x5f, - 0x44, 0x2c, 0xdd, 0xff, 0x54, 0xde, 0x5e, 0x16, 0xf3, 0x8b, 0x1a, 0xa2, - 0x0c, 0x79, 0x7a, 0x5f, 0x49, 0xd2, 0x03, 0xc0, 0x7f, 0x7f, 0x68, 0x63, - 0x73, 0x62, 0x8a, 0xd3, 0x58, 0x4b, 0xad, 0x19, 0xd9, 0x8b, 0x63, 0xb3, - 0x4a, 0x5f, 0xd6, 0xec, 0x3e, 0xda, 0xd2, 0xd0, 0x94, 0x62, 0x4b, 0xfa, - 0x7f, 0x1a, 0xd2, 0x7f, 0xda, 0xd1, 0x47, 0x33, 0x1a, 0x5a, 0xd1, 0x67, - 0x23, 0xfa, 0x6f, 0x1b, 0xaa, 0x2d, 0xc2, 0x9c, 0xde, 0x4c, 0x52, 0xd0, - 0xfd, 0x2d, 0xd2, 0xee, 0x44, 0x76, 0xc2, 0x1e, 0x78, 0x03, 0x4a, 0x43, - 0x8c, 0x43, 0x9b, 0x49, 0xfe, 0xe5, 0xa1, 0xe5, 0xf4, 0x86, 0x33, 0xb4, - 0x13, 0xdd, 0x1e, 0x1b, 0x22, 0x5b, 0xfb, 0x28, 0x0b, 0x0a, 0x37, 0x24, - 0x03, 0x3d, 0xb4, 0xaa, 0xa1, 0x51, 0x81, 0x38, 0xc3, 0x33, 0x6f, 0x62, - 0x49, 0xe4, 0x51, 0xcc, 0x55, 0x33, 0xf8, 0xda, 0x38, 0x60, 0xcc, 0xf9, - 0x7b, 0x62, 0x36, 0xf3, 0x73, 0xdd, 0x93, 0xde, 0xcc, 0x75, 0x56, 0xc7, - 0x3d, 0xa3, 0x06, 0xb3, 0xfb, 0xdf, 0xcd, 0xe9, 0x25, 0xd7, 0x08, 0x0b, - 0x01, 0xf5, 0x24, 0x06, 0xdc, 0x6f, 0x9f, 0xcc, 0x6f, 0x87, 0x84, 0x79, - 0x05, 0xdf, 0xe0, 0x29, 0x66, 0x96, 0x05, 0x86, 0x23, 0xb5, 0xc6, 0xd9, - 0xc4, 0xe1, 0x01, 0x95, 0xe2, 0xea, 0x84, 0x56, 0xdd, 0x12, 0x5e, 0x27, - 0x19, 0x8d, 0xbf, 0xb3, 0x5b, 0x3b, 0x36, 0x58, 0xf4, 0xb2, 0x2d, 0x18, - 0x09, 0x2d, 0x6a, 0x3d, 0x21, 0x7e, 0xb6, 0x57, 0x9e, 0xfa, 0xd8, 0x93, - 0xab, 0x11, 0x3d, 0xf3, 0x4f, 0x00, 0x30, 0xa5, 0x9e, 0x73, 0xb8, 0xc9, - 0x01, 0x67, 0x9d, 0x99, 0xd2, 0x0e, 0xe6, 0x77, 0xa8, 0xbb, 0x3e, 0xdf, - 0x2a, 0x70, 0x2c, 0x44, 0xe0, 0xd4, 0x68, 0x44, 0x43, 0xbd, 0x12, 0x01, - 0x14, 0x74, 0xc1, 0x7d, 0x41, 0x46, 0x11, 0x68, 0xe5, 0x4f, 0xe8, 0xd9, - 0x6b, 0xec, 0xd8, 0x6b, 0x4b, 0xec, 0x9a, 0xf5, 0x7b, 0x34, 0x9f, 0x1d, - 0x37, 0x3a, 0x52, 0x43, 0x79, 0x11, 0x3e, 0xdc, 0x93, 0xb1, 0x1d, 0xde, - 0xb3, 0x0f, 0x5b, 0xea, 0x55, 0x78, 0xde, 0x26, 0xd3, 0x01, 0x45, 0xc2, - 0x1a, 0xed, 0xbb, 0xf5, 0x59, 0x90, 0xcf, 0x89, 0x03, 0x0f, 0xd0, 0x3a, - 0xed, 0x74, 0x92, 0xdf, 0x7c, 0x30, 0x62, 0x33, 0x50, 0xe8, 0x3e, 0x54, - 0x67, 0x02, 0xc9, 0x1e, 0x3e, 0xd4, 0xc4, 0xb0, 0xf7, 0x78, 0x27, 0x67, - 0x00, 0xb1, 0x8e, 0xea, 0x2c, 0xb0, 0xd7, 0x24, 0xf7, 0x21, 0xfa, 0x26, - 0xf2, 0x30, 0xd6, 0x61, 0x99, 0x4c, 0x91, 0x16, 0xd4, 0x5e, 0x42, 0x61, - 0x1b, 0xdd, 0xed, 0xc6, 0x9b, 0x3e, 0xc0, 0x8f, 0xe9, 0x57, 0x2e, 0x74, - 0x27, 0x59, 0xbf, 0x83, 0x8a, 0xa6, 0xa7, 0xc3, 0xcd, 0x47, 0xb9, 0x05, - 0x2a, 0x24, 0x77, 0x07, 0xba, 0x89, 0x8a, 0x23, 0x41, 0xf7, 0x60, 0xcd, - 0x19, 0xf4, 0xd8, 0x41, 0xe8, 0x7a, 0x51, 0xa5, 0x94, 0xb4, 0xca, 0x0c, - 0x9e, 0x7c, 0x08, 0x5d, 0x11, 0x72, 0x9f, 0x79, 0x72, 0x70, 0x55, 0xe5, - 0x01, 0x4b, 0x0d, 0x11, 0x70, 0x97, 0x97, 0x22, 0xa5, 0xb7, 0xca, 0x36, - 0x99, 0x9b, 0xe4, 0x9e, 0x9b, 0xdc, 0x9f, 0x9b, 0x62, 0xb0, 0x5f, 0xe8, - 0x12, 0x5f, 0xc5, 0xc1, 0x2e, 0xe9, 0xfe, 0xde, 0xc8, 0xa0, 0x2f, 0x69, - 0xd6, 0xaf, 0x73, 0x9e, 0x4b, 0xb2, 0x3e, 0xb9, 0x48, 0x05, 0x3d, 0x41, - 0xf7, 0x6a, 0x7e, 0xc7, 0x21, 0xee, 0x71, 0x31, 0x36, 0x55, 0x01, 0xee, - 0x4c, 0x4a, 0xef, 0xcb, 0xb8, 0x50, 0xa9, 0xe2, 0xc0, 0xee, 0x3c, 0x56, - 0x7a, 0x15, 0x42, 0xa7, 0xd0, 0x2c, 0x24, 0x8e, 0x79, 0x51, 0x52, 0x78, - 0x05, 0x98, 0x6e, 0xcd, 0xf2, 0x9d, 0x15, 0xbe, 0x88, 0x99, 0x5f, 0xfe, - 0xc5, 0xaa, 0x40, 0x85, 0x30, 0xa7, 0xf3, 0x9b, 0xaa, 0x88, 0xf8, 0x29, - 0xd3, 0x07, 0x55, 0xd1, 0x33, 0xff, 0xca, 0x6b, 0x11, 0x57, 0xb7, 0x28, - 0x79, 0x1e, 0xc3, 0x92, 0xbf, 0x95, 0x10, 0x2b, 0xf4, 0xa2, 0x25, 0xcb, - 0x52, 0xb0, 0xad, 0x07, 0x77, 0x13, 0x9b, 0xb3, 0xac, 0x79, 0xe5, 0x8b, - 0xad, 0x85, 0x2d, 0xba, 0x50, 0xae, 0x7c, 0x6b, 0x43, 0xf8, 0xd9, 0x61, - 0xf3, 0x65, 0x2c, 0xd4, 0xdf, 0xa4, 0xb7, 0xd8, 0x5b, 0x96, 0x63, 0xd2, - 0x2d, 0x6e, 0xc2, 0xb9, 0xa8, 0xe6, 0x6c, 0x23, 0xce, 0x89, 0xfa, 0xa1, - 0x16, 0xc6, 0x09, 0xbd, 0xac, 0xa4, 0x1f, 0x8f, 0x64, 0x9f, 0xc4, 0x2e, - 0xda, 0x62, 0x40, 0x8f, 0x72, 0x92, 0x83, 0xeb, 0xea, 0x42, 0xb3, 0xb9, - 0xbb, 0xe9, 0x4b, 0x05, 0x31, 0x5b, 0xe8, 0xa2, 0xdf, 0x2f, 0x0b, 0x53, - 0xfa, 0x77, 0xc3, 0xec, 0x14, 0xa7, 0x98, 0xc8, 0x8d, 0xf4, 0x19, 0x06, - 0xb3, 0x5f, 0x7e, 0xa6, 0x86, 0xf2, 0x75, 0xeb, 0xde, 0x2d, 0xb0, 0x69, - 0x08, 0x20, 0x3e, 0xb4, 0xda, 0x04, 0x54, 0x2d, 0x1e, 0xf6, 0x86, 0x54, - 0xaf, 0x03, 0xd1, 0x6c, 0x22, 0xc0, 0xfb, 0x67, 0xb2, 0x38, 0x54, 0x53, - 0x7f, 0x4c, 0x15, 0x46, 0x35, 0xae, 0x55, 0x39, 0x9a, 0xd1, 0x65, 0xe6, - 0x8c, 0x53, 0xe6, 0x5c, 0x90, 0x0c, 0xb4, 0x11, 0x7e, 0x25, 0xf7, 0xb1, - 0xc8, 0xff, 0x87, 0xbf, 0x6f, 0xc6, 0xc1, 0xdb, 0x75, 0xff, 0xc8, 0x82, - 0x05, 0x7f, 0x2f, 0x5a, 0x40, 0x11, 0x6d, 0x8e, 0xac, 0x4b, 0xac, 0xba, - 0xdd, 0xd4, 0xe0, 0x5b, 0xe0, 0x8a, 0x7d, 0x0d, 0x22, 0x8f, 0xe4, 0x5e, - 0x39, 0x6a, 0xa1, 0xc7, 0x64, 0x0d, 0xd8, 0xb0, 0xfa, 0xcf, 0x9a, 0xda, - 0x90, 0x59, 0xe1, 0xf7, 0x02, 0xfd, 0x88, 0x84, 0x3f, 0x89, 0x47, 0x2e, - 0xc2, 0xc5, 0xbe, 0x8f, 0x35, 0x3f, 0x9f, 0x67, 0x8d, 0x60, 0x2b, 0xd5, - 0x00, 0x04, 0x74, 0xd8, 0x42, 0x89, 0xe4, 0xe2, 0x60, 0x57, 0xa1, 0x13, - 0x1f, 0x7a, 0x9f, 0x8d, 0x67, 0x55, 0xa1, 0xae, 0x3e, 0xdb, 0xac, 0x45, - 0x4d, 0x66, 0x85, 0x96, 0xaf, 0x94, 0x35, 0x75, 0xad, 0x2b, 0xcb, 0x7c, - 0xdd, 0x32, 0x67, 0x15, 0xa8, 0x19, 0x82, 0xf3, 0xde, 0x7a, 0x33, 0x30, - 0xe2, 0x2d, 0xc8, 0xe0, 0x78, 0x93, 0xc5, 0xb9, 0x4d, 0x97, 0x49, 0x69, - 0x82, 0x4a, 0xb0, 0xd2, 0xe0, 0xac, 0x65, 0xe3, 0x66, 0x55, 0x57, 0xdd, - 0x32, 0x4f, 0x0e, 0x9a, 0x0f, 0xb7, 0xa6, 0x99, 0x56, 0x91, 0xfe, 0x4e, - 0x09, 0x35, 0x6a, 0x64, 0xda, 0x1c, 0x17, 0xae, 0xc0, 0x1c, 0x72, 0x79, - 0xb2, 0x61, 0x79, 0xf2, 0xad, 0x68, 0xa1, 0xaa, 0x3f, 0xeb, 0x45, 0xaa, - 0xca, 0xf0, 0x24, 0x5d, 0xeb, 0x3c, 0xea, 0x7b, 0x4b, 0x4e, 0x3f, 0x8b, - 0xde, 0x86, 0x52, 0x60, 0x03, 0x5b, 0x59, 0x3c, 0x45, 0xd7, 0xba, 0xae, - 0x4b, 0x1d, 0x6d, 0x0d, 0xc6, 0x00, 0x9e, 0xe6, 0x2b, 0xa6, 0x2c, 0xa1, - 0x77, 0xff, 0xe6, 0x7b, 0xf7, 0x09, 0x61, 0x9b, 0xec, 0xbb, 0x37, 0x8b, - 0xe8, 0x96, 0x6d, 0x17, 0x00, 0xf0, 0xfe, 0x34, 0xb0, 0x9b, 0x4f, 0xb1, - 0x77, 0xb8, 0xbc, 0xa3, 0xeb, 0xdb, 0xf8, 0x81, 0xb4, 0x96, 0x45, 0xda, - 0x6b, 0x08, 0x76, 0x7f, 0xca, 0x4a, 0x90, 0x76, 0x9a, 0xb2, 0x54, 0xb1, - 0x43, 0x0b, 0x6a, 0x03, 0xfa, 0x08, 0x8d, 0x03, 0xc6, 0x22, 0xe9, 0xa3, - 0x38, 0xf0, 0xe9, 0xaf, 0xde, 0xe7, 0xec, 0x89, 0xa6, 0x66, 0x5d, 0xf3, - 0x2d, 0x77, 0x7b, 0xcb, 0xaa, 0x09, 0xca, 0xf3, 0xac, 0x08, 0x7c, 0x94, - 0x31, 0xe4, 0x2f, 0x53, 0xdf, 0xca, 0x14, 0xb0, 0x95, 0x63, 0xdb, 0x65, - 0x03, 0x41, 0x1d, 0x34, 0x00, 0x75, 0x2d, 0xa3, 0xa2, 0x9d, 0x31, 0x97, - 0x4c, 0xf6, 0xb5, 0x98, 0xde, 0x39, 0xe5, 0xd5, 0xd3, 0x3b, 0x07, 0x38, - 0x4f, 0xbf, 0x06, 0x6a, 0xaf, 0xc7, 0xe8, 0x7e, 0x6b, 0x64, 0xdf, 0x28, - 0x70, 0xfa, 0xd9, 0xf1, 0xdf, 0xf8, 0x4c, 0xaa, 0x39, 0x48, 0xf9, 0x9c, - 0xb3, 0xe1, 0xbe, 0x6a, 0x08, 0xf5, 0xde, 0x2d, 0x6f, 0xda, 0x68, 0x13, - 0x8a, 0xd1, 0xbc, 0xbd, 0xe1, 0x8a, 0xb9, 0x0f, 0xd0, 0x23, 0x84, 0xe4, - 0x9b, 0xca, 0xe4, 0x99, 0xae, 0x9a, 0xf6, 0x01, 0x6f, 0x9c, 0x21, 0xb7, - 0xc9, 0x96, 0x4f, 0x9b, 0x69, 0xa2, 0x26, 0xca, 0xfe, 0xc2, 0xd2, 0xaa, - 0xf7, 0x59, 0xcc, 0xd9, 0xac, 0xe0, 0x89, 0xbc, 0xa6, 0x45, 0xf8, 0x07, - 0x71, 0x6f, 0xf3, 0xfa, 0x76, 0xac, 0x38, 0x69, 0x1c, 0xca, 0x1a, 0x1d, - 0x47, 0x2e, 0x28, 0x63, 0xb5, 0xb8, 0x65, 0xc3, 0x01, 0x08, 0xa6, 0x19, - 0x3d, 0x9f, 0xab, 0xe5, 0xc6, 0x1f, 0x3d, 0xb6, 0xc9, 0x1a, 0xaf, 0xe0, - 0xd6, 0xb1, 0xbf, 0xf1, 0xd8, 0x7c, 0x54, 0xa8, 0x73, 0x8d, 0x33, 0xd6, - 0x24, 0x5a, 0x10, 0x9f, 0x82, 0x2b, 0x2c, 0xb7, 0x16, 0x00, 0x6a, 0x5f, - 0x2c, 0xc0, 0x56, 0xbe, 0x92, 0xc4, 0xa2, 0xd4, 0x75, 0x87, 0x95, 0x4d, - 0x8d, 0xdf, 0x53, 0x4f, 0xf5, 0xfd, 0xf6, 0x3e, 0x54, 0x8e, 0x58, 0x49, - 0xec, 0xde, 0x44, 0xf7, 0x70, 0x65, 0xab, 0xd1, 0xf9, 0xd6, 0x1f, 0x5a, - 0x69, 0xe1, 0x78, 0xa0, 0x8d, 0x84, 0x8d, 0x7c, 0x37, 0xc2, 0x53, 0xbe, - 0xdb, 0x50, 0x52, 0x79, 0x67, 0xf3, 0x90, 0x9e, 0x18, 0xc2, 0xf7, 0x32, - 0xb5, 0xd6, 0x49, 0xa2, 0x0d, 0x1b, 0xdd, 0xde, 0x6c, 0xa7, 0x0e, 0x6b, - 0x3c, 0x47, 0xcd, 0xf5, 0xb5, 0x21, 0x85, 0x38, 0x1e, 0xde, 0xb4, 0x8e, - 0xc7, 0x9b, 0xda, 0x8a, 0xae, 0xc6, 0x63, 0x42, 0x9f, 0x5a, 0x29, 0xab, - 0x95, 0xfb, 0x81, 0xcb, 0x1b, 0xd0, 0xd4, 0xbd, 0x0c, 0x64, 0x4b, 0xee, - 0x6b, 0xb2, 0x02, 0x79, 0x79, 0xfb, 0xfa, 0x2b, 0x9c, 0x96, 0xb7, 0xcb, - 0x79, 0xfd, 0xd6, 0xb8, 0x74, 0x25, 0xa7, 0x08, 0x47, 0x93, 0x19, 0xee, - 0x4a, 0x4c, 0x9c, 0x49, 0x78, 0x6b, 0x82, 0x1f, 0xaa, 0xbc, 0xb7, 0x33, - 0xf4, 0xc0, 0x89, 0x5b, 0xbe, 0x9b, 0xdd, 0x67, 0x06, 0x9a, 0x35, 0xe7, - 0x70, 0x5a, 0xdd, 0x60, 0x9d, 0x86, 0x8e, 0x4d, 0x54, 0xb8, 0xe5, 0xc0, - 0x68, 0x6e, 0x41, 0x48, 0x5b, 0xa4, 0xfc, 0x83, 0xf9, 0x76, 0x51, 0xaa, - 0x95, 0xa4, 0xe6, 0x9b, 0xee, 0x32, 0xd9, 0x44, 0x58, 0xc4, 0xde, 0x6e, - 0x29, 0x6b, 0x62, 0xaa, 0x2b, 0xf8, 0xc7, 0xfb, 0x69, 0x50, 0xaf, 0x2b, - 0x49, 0x90, 0xbe, 0xd0, 0x60, 0x92, 0x42, 0xd9, 0x13, 0x1f, 0x61, 0x90, - 0xed, 0x1e, 0xed, 0xf3, 0xd5, 0x07, 0xf7, 0xfd, 0x05, 0x5b, 0x6b, 0xa9, - 0x5c, 0x80, 0xa5, 0xc1, 0xa3, 0x0a, 0xe3, 0x2e, 0x62, 0x90, 0xab, 0x3e, - 0x9b, 0x4e, 0xfc, 0xe2, 0x76, 0x0c, 0xdd, 0x39, 0x69, 0xf1, 0xb2, 0xdd, - 0x5b, 0xcb, 0xbc, 0xab, 0x5f, 0x55, 0xc7, 0x4a, 0xdd, 0x58, 0x09, 0x48, - 0xfa, 0x5b, 0xdd, 0x67, 0x15, 0x63, 0x75, 0xb4, 0x01, 0x0a, 0x64, 0x25, - 0x93, 0x13, 0x93, 0x60, 0xaf, 0x88, 0x51, 0x87, 0x93, 0xbd, 0x44, 0x1d, - 0xf3, 0xb4, 0x89, 0xb4, 0xc5, 0xa9, 0x5c, 0x7f, 0xf3, 0x87, 0x49, 0x15, - 0xf7, 0xbc, 0xd9, 0xa6, 0xf8, 0xf6, 0x4d, 0x0b, 0x71, 0x00, 0x3a, 0x00, - 0xd8, 0x64, 0xa7, 0x10, 0xc0, 0x7e, 0xdf, 0xe6, 0xe8, 0x43, 0x75, 0x31, - 0xed, 0x8d, 0xc0, 0xe0, 0x64, 0x9b, 0xa8, 0x03, 0x6d, 0xe9, 0xd6, 0xea, - 0x1a, 0x0e, 0x6d, 0xf6, 0x10, 0x9e, 0xe6, 0xd5, 0x1b, 0x40, 0x81, 0x9a, - 0x27, 0x1f, 0xb3, 0x45, 0xb4, 0x47, 0xb6, 0x53, 0xb0, 0x49, 0xc7, 0x95, - 0x7a, 0x7e, 0xb1, 0x79, 0xb4, 0x70, 0x45, 0xb4, 0xa9, 0x8b, 0x1a, 0xff, - 0x51, 0x1d, 0xb9, 0xd2, 0x66, 0x3b, 0x09, 0x4b, 0x97, 0xac, 0xa0, 0xa2, - 0xf8, 0xdf, 0xa9, 0x0a, 0x29, 0x6d, 0x26, 0xaf, 0xab, 0x3a, 0x25, 0xb1, - 0xf8, 0x14, 0x89, 0x13, 0x20, 0x86, 0x5e, 0x35, 0x89, 0xe1, 0x22, 0x16, - 0x5c, 0x7f, 0x17, 0xae, 0x3a, 0x0e, 0xb3, 0xd4, 0xe7, 0xb6, 0x30, 0xfc, - 0x6f, 0xea, 0x6d, 0x5b, 0x6b, 0x57, 0x5b, 0xf9, 0xb6, 0x40, 0xc5, 0x1d, - 0x5b, 0x79, 0x6d, 0x4c, 0xc6, 0x9e, 0xae, 0x72, 0x18, 0xe7, 0x9e, 0x9f, - 0xc1, 0xf4, 0xb5, 0x7b, 0xf0, 0x9b, 0xb6, 0xab, 0xbb, 0xed, 0x8b, 0xaa, - 0xdc, 0x6a, 0x7c, 0x2f, 0xb6, 0x6e, 0xda, 0x18, 0xfd, 0x61, 0x27, 0x3e, - 0x9b, 0xf6, 0xb2, 0xa1, 0x5a, 0x64, 0xd3, 0xd3, 0x47, 0xed, 0x64, 0x75, - 0xe1, 0xbc, 0xbe, 0x1b, 0x15, 0x18, 0x05, 0xd1, 0x5a, 0x19, 0x8a, 0x90, - 0x02, 0x5b, 0x50, 0x59, 0xbf, 0xad, 0x4b, 0xa1, 0xcf, 0xac, 0xde, 0x6a, - 0x8c, 0x38, 0x3a, 0xf6, 0x59, 0x93, 0xd4, 0xc7, 0x5b, 0x39, 0x32, 0xf9, - 0xf2, 0x9a, 0x3d, 0x9a, 0x06, 0xa4, 0x42, 0x32, 0x86, 0x92, 0x8f, 0xe5, - 0xcb, 0xc9, 0x67, 0xa4, 0xda, 0x37, 0x48, 0xfd, 0xfd, 0xe7, 0xe5, 0x3f, - 0x7f, 0x59, 0xbd, 0xe0, 0xc0, 0x5e, 0x79, 0x03, 0xdb, 0xbb, 0x41, 0xef, - 0x4f, 0x87, 0x4d, 0xce, 0x47, 0xee, 0x31, 0x1d, 0xad, 0xf7, 0x1d, 0xcd, - 0x9c, 0x53, 0x23, 0xbc, 0x93, 0x60, 0x9b, 0x6a, 0x69, 0xa0, 0x45, 0xa7, - 0x2d, 0x11, 0x08, 0x78, 0x6c, 0xee, 0xb6, 0x67, 0x16, 0xff, 0x96, 0x6f, - 0x56, 0x8f, 0x44, 0x75, 0xa4, 0xb7, 0x74, 0x9d, 0x9b, 0x84, 0x5c, 0x0c, - 0xb7, 0x04, 0xc9, 0xe7, 0x6d, 0x25, 0x01, 0x73, 0x0e, 0x74, 0x55, 0x6b, - 0x75, 0x42, 0x38, 0xdd, 0xb5, 0xe1, 0x05, 0xd0, 0x02, 0xbf, 0x14, 0xf6, - 0x45, 0xdb, 0x0f, 0xda, 0xd5, 0xd9, 0xaf, 0x9c, 0x8a, 0x39, 0xcc, 0xef, - 0x09, 0x7c, 0x08, 0x1b, 0xe9, 0xce, 0xd5, 0xf6, 0xee, 0x07, 0x84, 0x3b, - 0x0e, 0x08, 0xbf, 0x09, 0xbe, 0xf5, 0x80, 0xbe, 0xb5, 0x67, 0x40, 0xcd, - 0x0f, 0x33, 0x57, 0x09, 0x1e, 0x92, 0xc0, 0x5d, 0xc4, 0x2e, 0x57, 0x66, - 0xb3, 0x4f, 0x0b, 0x95, 0xb8, 0x82, 0x19, 0x9d, 0x84, 0x3d, 0x00, 0xb7, - 0x03, 0xf7, 0x5d, 0x6d, 0x99, 0xae, 0x06, 0xa8, 0x0a, 0xad, 0x6c, 0x2b, - 0xda, 0x92, 0x9e, 0xd2, 0xe6, 0xe1, 0x6a, 0x7b, 0x7f, 0xd0, 0x45, 0x26, - 0xe7, 0x49, 0xa5, 0x7a, 0xd9, 0x3c, 0x6d, 0x25, 0xb7, 0xd3, 0x16, 0xe4, - 0x4d, 0x48, 0x1e, 0xb9, 0xed, 0xb1, 0x51, 0x61, 0x52, 0x4b, 0x98, 0x4a, - 0x56, 0x7c, 0xc9, 0xf6, 0xfe, 0xe7, 0x43, 0x72, 0xdb, 0xc8, 0x9e, 0x51, - 0x52, 0x9b, 0x96, 0xbf, 0x24, 0x9a, 0x8e, 0x08, 0xd2, 0x2f, 0x15, 0xb6, - 0x90, 0xc2, 0x7c, 0x27, 0xc5, 0x4a, 0x8d, 0x41, 0x00, 0x2a, 0xfe, 0x9d, - 0x32, 0x10, 0x2b, 0xb8, 0x0e, 0xfe, 0x26, 0xfd, 0xfa, 0x3a, 0x76, 0x3f, - 0x94, 0xc1, 0xc3, 0x77, 0x76, 0x76, 0xf1, 0x90, 0x34, 0x8d, 0x29, 0xf7, - 0xdc, 0x6c, 0xbb, 0xcc, 0xb1, 0xb1, 0x08, 0x24, 0x7b, 0x67, 0x32, 0xf2, - 0xd9, 0xe0, 0xdf, 0xf8, 0xe4, 0xcf, 0xe2, 0xcd, 0x57, 0x18, 0x6c, 0x13, - 0x7a, 0xa4, 0x06, 0xce, 0xad, 0xc3, 0xdd, 0xbc, 0xe7, 0xd9, 0xc0, 0xd3, - 0x5c, 0x2f, 0x80, 0xc3, 0x12, 0x50, 0x36, 0x73, 0x26, 0x0b, 0x09, 0x14, - 0x93, 0x24, 0xfa, 0x19, 0xf0, 0xd1, 0xf1, 0xdf, 0x10, 0xee, 0xf0, 0x18, - 0xac, 0xf3, 0x50, 0xe7, 0x99, 0x2a, 0xf2, 0x00, 0x47, 0x2d, 0x20, 0xfa, - 0xf4, 0x55, 0x2b, 0xe1, 0xdd, 0x51, 0x73, 0x91, 0xac, 0x43, 0x87, 0xe6, - 0x95, 0x93, 0xd0, 0x54, 0x03, 0x09, 0xb8, 0xd5, 0x4e, 0xef, 0xe9, 0xda, - 0xa1, 0x77, 0x45, 0x12, 0xbe, 0x23, 0xb4, 0x95, 0x3e, 0x13, 0xe3, 0xdb, - 0x94, 0x07, 0xa7, 0x8c, 0xc3, 0x3a, 0xea, 0xa1, 0x16, 0x4b, 0x65, 0x75, - 0xad, 0xad, 0x51, 0xcf, 0x42, 0x32, 0xc0, 0x52, 0x51, 0x35, 0x1e, 0xed, - 0x36, 0xed, 0x2e, 0x6a, 0xf1, 0xf2, 0x00, 0xf6, 0x77, 0x37, 0x18, 0x0c, - 0x55, 0x78, 0xa6, 0x71, 0xe4, 0x6a, 0x8e, 0x47, 0x5d, 0x0f, 0xde, 0xec, - 0x31, 0xa0, 0x06, 0x3a, 0x08, 0x6b, 0xd1, 0x19, 0x4e, 0x5c, 0xa0, 0x59, - 0x52, 0x05, 0x21, 0xf5, 0x90, 0x0d, 0xd8, 0x6c, 0x40, 0x15, 0xd2, 0x62, - 0x47, 0xbb, 0x16, 0x48, 0x1d, 0x4d, 0xfc, 0xe3, 0x27, 0x14, 0xe6, 0x01, - 0x21, 0x8a, 0xd2, 0xde, 0x72, 0xc7, 0x68, 0x75, 0xe0, 0x43, 0x97, 0x42, - 0x4c, 0x5f, 0x96, 0xa7, 0x97, 0x5c, 0x09, 0x0e, 0xa2, 0xcc, 0x39, 0xd8, - 0x43, 0x0f, 0xb6, 0xba, 0xda, 0x72, 0x76, 0xeb, 0xc6, 0x2d, 0x7c, 0x51, - 0x9c, 0x95, 0x2b, 0x8b, 0x65, 0x45, 0x7b, 0xee, 0x72, 0x37, 0x55, 0x9d, - 0x90, 0xd5, 0x8d, 0x08, 0x8d, 0x5c, 0x46, 0x58, 0xc3, 0x31, 0xea, 0x2d, - 0x68, 0x87, 0xe0, 0x86, 0x8c, 0x3b, 0x34, 0xca, 0x6a, 0x42, 0x44, 0x7f, - 0xfb, 0x9a, 0xdb, 0x37, 0x6c, 0xa6, 0xa7, 0x09, 0xc0, 0xc5, 0x62, 0x9c, - 0x4b, 0x63, 0x41, 0x61, 0x10, 0xb0, 0xb8, 0x3f, 0x79, 0x80, 0x76, 0xf9, - 0x03, 0x50, 0x65, 0x5a, 0x1d, 0xed, 0xf5, 0x01, 0x3d, 0x2d, 0x35, 0xad, - 0x9c, 0xb7, 0x62, 0x1e, 0x36, 0xd5, 0x03, 0x79, 0xae, 0x8a, 0x1f, 0x94, - 0x13, 0xfe, 0x35, 0xd8, 0x92, 0x5a, 0xfc, 0xe5, 0xee, 0xc7, 0x2d, 0xce, - 0xc3, 0x9a, 0xac, 0x9f, 0x0b, 0x00, 0x58, 0xfb, 0xb0, 0x71, 0xe5, 0x30, - 0xd3, 0xbb, 0x86, 0x9e, 0x93, 0x31, 0x91, 0x90, 0x51, 0xa6, 0xc3, 0x68, - 0xce, 0xc0, 0xda, 0x9d, 0xa8, 0xce, 0x53, 0x33, 0xc9, 0x69, 0x3b, 0xe1, - 0x10, 0x09, 0xa4, 0x3b, 0xdf, 0x94, 0x8f, 0x13, 0xe2, 0xbf, 0x1c, 0xfe, - 0xcf, 0x85, 0x95, 0x06, 0xc7, 0x87, 0x8d, 0x53, 0x4b, 0x1f, 0x38, 0xca, - 0x2b, 0x90, 0xf2, 0x0a, 0xd4, 0xc7, 0x0d, 0x51, 0x2d, 0xb0, 0x8a, 0x93, - 0xe8, 0x6f, 0x08, 0xa2, 0x12, 0xa9, 0x23, 0xc0, 0xff, 0xb8, 0x89, 0x7d, - 0xea, 0x95, 0x17, 0xfe, 0x27, 0xfe, 0xf0, 0x2b, 0xb6, 0x90, 0x7a, 0x25, - 0x9b, 0x6b, 0x74, 0x1c, 0x0a, 0x21, 0x6d, 0xc6, 0xf4, 0xf2, 0x9d, 0xba, - 0x57, 0xb6, 0xdf, 0x3b, 0x9d, 0xa2, 0x50, 0xe2, 0x71, 0x35, 0xa9, 0xbe, - 0x2c, 0x51, 0xd8, 0xb5, 0xd4, 0x3c, 0xf1, 0x83, 0xd2, 0xf8, 0xb1, 0xaa, - 0xfb, 0x59, 0x2e, 0x5b, 0x11, 0x8b, 0xf6, 0xb3, 0x98, 0xb3, 0x3f, 0xb8, - 0xd5, 0xf3, 0xa3, 0x97, 0xb0, 0xe9, 0xf1, 0xfb, 0x43, 0xe7, 0x2d, 0xb9, - 0x80, 0xb7, 0x14, 0xf9, 0x54, 0x70, 0x63, 0x8f, 0x7a, 0x73, 0x14, 0x11, - 0x83, 0xfe, 0x9e, 0x0b, 0xb7, 0xe2, 0xdf, 0x4f, 0x9f, 0x15, 0x0c, 0x59, - 0x5d, 0xbf, 0x2d, 0x43, 0xef, 0x25, 0x3f, 0xcd, 0xb1, 0xf6, 0xfd, 0x2e, - 0x5f, 0x5f, 0x74, 0x38, 0x7e, 0x61, 0x73, 0x10, 0xe9, 0x7c, 0x23, 0xf0, - 0x9f, 0x26, 0xda, 0x3a, 0x74, 0x5c, 0x6b, 0x90, 0x6b, 0x1d, 0x01, 0x71, - 0xd0, 0x51, 0x5f, 0xaa, 0x9e, 0x38, 0xad, 0x49, 0x3c, 0xc8, 0xc5, 0x6f, - 0x9f, 0xd7, 0x41, 0xdd, 0xe4, 0xf4, 0x69, 0x30, 0x75, 0x19, 0x24, 0x83, - 0x2c, 0x39, 0x60, 0x4d, 0x18, 0x09, 0x1a, 0xce, 0xf9, 0x7b, 0x81, 0x9a, - 0x40, 0x22, 0x0b, 0xed, 0x4d, 0xa2, 0x42, 0x7f, 0x09, 0xea, 0x82, 0xe8, - 0xa2, 0x34, 0xe4, 0x42, 0x1d, 0x95, 0x41, 0x17, 0xc6, 0x6b, 0xe4, 0x13, - 0xf0, 0x0b, 0x02, 0x7b, 0xd5, 0x65, 0x0c, 0xd0, 0x21, 0xb8, 0x42, 0x6f, - 0x15, 0x7e, 0x5a, 0xfc, 0xf1, 0x4d, 0x86, 0x7d, 0x42, 0x05, 0x21, 0x00, - 0x43, 0xc3, 0x8a, 0xa8, 0x1c, 0x86, 0x80, 0xca, 0xe2, 0x15, 0xfa, 0x11, - 0xf1, 0x33, 0xeb, 0x37, 0x19, 0x45, 0xe1, 0x1d, 0x00, 0xb1, 0xf8, 0x40, - 0xed, 0x2b, 0xbc, 0x50, 0x2a, 0x60, 0xd2, 0x62, 0xc4, 0x3f, 0x64, 0x05, - 0x2a, 0x7a, 0x72, 0x43, 0x3c, 0xb9, 0x14, 0x70, 0x45, 0x3b, 0xf9, 0x6a, - 0xb9, 0xca, 0xe6, 0x9e, 0xf4, 0x7b, 0x55, 0x1a, 0xa8, 0xb7, 0x5b, 0x11, - 0xed, 0x45, 0x3d, 0x27, 0xa9, 0x88, 0x5e, 0x89, 0xe1, 0x5f, 0xf8, 0xbd, - 0xa0, 0xc6, 0x68, 0x0c, 0x98, 0x8e, 0x0a, 0xf3, 0xa2, 0xed, 0xf5, 0x74, - 0x65, 0x1e, 0xaf, 0xd7, 0xe9, 0x46, 0x2b, 0x6b, 0x84, 0x9c, 0xc3, 0x08, - 0x3c, 0x29, 0x15, 0x6f, 0xe6, 0xd7, 0xac, 0x85, 0x92, 0x7a, 0x65, 0xb8, - 0xc8, 0x2a, 0xab, 0x44, 0x32, 0x59, 0x49, 0x82, 0x85, 0x74, 0x0f, 0xb9, - 0x2c, 0xf7, 0x2b, 0x47, 0x7d, 0x3a, 0x3e, 0x6f, 0x1a, 0xc1, 0x5e, 0x46, - 0x5c, 0xec, 0xc5, 0xd6, 0x8b, 0xb1, 0x33, 0x62, 0x25, 0x77, 0x35, 0xf6, - 0x40, 0x50, 0x01, 0x4f, 0x57, 0x42, 0x21, 0x8c, 0x59, 0x9c, 0xcd, 0x90, - 0xc2, 0x4f, 0x6a, 0x1c, 0x84, 0x14, 0x6d, 0x32, 0xc8, 0x86, 0x41, 0x88, - 0x21, 0xc1, 0x51, 0x0f, 0x2b, 0x30, 0xeb, 0xf7, 0x8b, 0x39, 0xc2, 0x5e, - 0x07, 0x1d, 0xd6, 0x08, 0x1c, 0xf5, 0x22, 0xc2, 0x3e, 0x0f, 0x1b, 0xe9, - 0x5f, 0xb0, 0x6a, 0x33, 0x49, 0x30, 0xb9, 0xf4, 0x30, 0x79, 0xac, 0x2e, - 0x8e, 0x95, 0x6e, 0x9a, 0x7b, 0xe1, 0x1e, 0xfa, 0x34, 0x2f, 0xf4, 0xb0, - 0x76, 0x1c, 0x5a, 0xb4, 0x41, 0x6e, 0x8b, 0x8a, 0x80, 0x2e, 0x72, 0xd3, - 0xec, 0xae, 0x1f, 0x35, 0x82, 0x62, 0xad, 0xf3, 0xfc, 0xb1, 0xd8, 0x07, - 0xb2, 0xe6, 0x7e, 0x81, 0xac, 0x64, 0xe4, 0x3b, 0x3b, 0x7c, 0xba, 0xe9, - 0x2a, 0x2d, 0x40, 0xb9, 0xe2, 0x16, 0x9c, 0xde, 0xd0, 0xe1, 0x74, 0xba, - 0xcd, 0x6c, 0xf5, 0x70, 0x98, 0x64, 0xcf, 0x4d, 0x17, 0x17, 0x8b, 0xd2, - 0x62, 0x15, 0x5f, 0x95, 0x93, 0xa6, 0xaf, 0x1a, 0xd8, 0x36, 0x95, 0x53, - 0xd3, 0xad, 0xdf, 0x45, 0x1c, 0x92, 0x1b, 0xcc, 0x59, 0x61, 0xb9, 0x0f, - 0xbf, 0xb2, 0x18, 0xbc, 0xa6, 0xf4, 0x3d, 0x55, 0x96, 0x1f, 0x40, 0x25, - 0x69, 0x7b, 0x59, 0x89, 0xcd, 0x2a, 0xa9, 0xe1, 0xa7, 0xda, 0x2e, 0x15, - 0x78, 0xad, 0xfd, 0xe2, 0x87, 0x00, 0x52, 0x5a, 0x49, 0x4f, 0x35, 0x9d, - 0x24, 0xdc, 0x73, 0xdf, 0xe9, 0x66, 0x91, 0x61, 0xb0, 0x4a, 0xc7, 0x0f, - 0x17, 0xf4, 0xb8, 0xa8, 0x72, 0x73, 0x3f, 0x08, 0xf6, 0xd3, 0xed, 0x83, - 0x44, 0xfa, 0x01, 0xcb, 0x9f, 0x90, 0x80, 0xbb, 0xf1, 0xe8, 0x00, 0xbf, - 0x70, 0x90, 0x35, 0xaa, 0xe0, 0x61, 0x8b, 0xbd, 0xff, 0xa8, 0x95, 0xc0, - 0x37, 0x57, 0x9e, 0x0a, 0xe2, 0x5b, 0x3c, 0xd6, 0x48, 0xff, 0xba, 0x8e, - 0xa7, 0xb5, 0xe6, 0x8d, 0xbf, 0x08, 0xcf, 0xcd, 0x9a, 0xf4, 0x0d, 0x71, - 0xb4, 0x34, 0x2b, 0xc1, 0xb5, 0xb0, 0xcd, 0x9e, 0x0d, 0x0e, 0xbf, 0xf8, - 0x73, 0x7d, 0x6b, 0x0c, 0x9a, 0xed, 0x8c, 0x2c, 0xcd, 0x5f, 0xf8, 0x81, - 0xa5, 0xb2, 0x95, 0x8a, 0x9b, 0x16, 0xba, 0x8c, 0x71, 0xce, 0x5c, 0x24, - 0x25, 0xeb, 0x42, 0xb5, 0x6d, 0xdc, 0xb1, 0xb1, 0x26, 0xc0, 0xaf, 0x49, - 0xc4, 0x02, 0x27, 0xc4, 0x2a, 0x6b, 0x58, 0xb2, 0x2e, 0xac, 0xd8, 0x79, - 0x3e, 0x4d, 0x39, 0xa5, 0x63, 0x2b, 0x00, 0x08, 0x45, 0xc0, 0xe1, 0x06, - 0x4a, 0x82, 0x1c, 0xef, 0x64, 0x6e, 0xeb, 0xb5, 0x95, 0x60, 0xe3, 0x99, - 0xcb, 0xc1, 0x67, 0x87, 0x1a, 0xbc, 0xdb, 0xbb, 0x04, 0x62, 0xbd, 0xcc, - 0xea, 0x22, 0x33, 0x27, 0xcf, 0xf4, 0x7c, 0x5a, 0xea, 0x9f, 0xeb, 0x23, - 0xdf, 0x15, 0x3d, 0x21, 0xe3, 0xc2, 0x83, 0x25, 0xac, 0x1d, 0xe2, 0x55, - 0x59, 0x12, 0x4c, 0xa9, 0xcc, 0x1d, 0xd0, 0xbd, 0xd3, 0x51, 0xea, 0xcc, - 0x53, 0xdd, 0x64, 0x91, 0xaa, 0x57, 0x80, 0x4c, 0xda, 0x3a, 0xf6, 0x72, - 0xe3, 0x5d, 0x8d, 0x7f, 0x4c, 0x73, 0xd5, 0xdb, 0x40, 0xf3, 0xb3, 0x63, - 0x12, 0x47, 0x9a, 0x63, 0x13, 0x54, 0x4a, 0xb0, 0x7e, 0x96, 0xc4, 0xdb, - 0xb5, 0x44, 0x47, 0x33, 0xae, 0xe3, 0x54, 0x9b, 0x29, 0x49, 0x7a, 0x4b, - 0x27, 0x61, 0x89, 0x4b, 0xd4, 0xb2, 0xe1, 0x0b, 0x52, 0xa7, 0xcb, 0xd2, - 0xf1, 0x2b, 0x8d, 0xcf, 0x5e, 0xe1, 0x03, 0x5c, 0x53, 0x10, 0xb6, 0x6e, - 0xa4, 0x12, 0xb8, 0x9f, 0x4a, 0x93, 0xd9, 0xf3, 0x5b, 0x29, 0x33, 0x3d, - 0xbb, 0xdb, 0x46, 0x0b, 0x51, 0x39, 0x40, 0x65, 0x2a, 0x2f, 0x3b, 0xa5, - 0x37, 0x1d, 0x89, 0xd7, 0xea, 0x94, 0x52, 0x90, 0x0f, 0x2f, 0xe2, 0x7c, - 0xb8, 0x81, 0xe5, 0x4a, 0xd8, 0x61, 0x69, 0x5a, 0xa4, 0x73, 0xa7, 0x02, - 0x72, 0xb7, 0x74, 0xbc, 0xf8, 0x96, 0x49, 0xbf, 0x57, 0x5c, 0x45, 0x14, - 0x54, 0x6d, 0x2c, 0x59, 0xbf, 0xa1, 0x8f, 0x2e, 0x54, 0x0b, 0xc4, 0x18, - 0x17, 0xa5, 0x7a, 0x29, 0x5e, 0xa9, 0xcb, 0x5b, 0xbf, 0xd7, 0xcd, 0xc3, - 0x56, 0xae, 0xe6, 0x3d, 0xd9, 0x33, 0x3f, 0xab, 0x25, 0xd6, 0xa4, 0x6b, - 0x08, 0xbd, 0xb3, 0x8b, 0xad, 0xb9, 0x35, 0x47, 0x00, 0x8f, 0x79, 0x3d, - 0x77, 0xb1, 0x25, 0xcb, 0x3e, 0xf1, 0xdb, 0xbb, 0xca, 0x6f, 0xb7, 0x92, - 0xdb, 0x6d, 0x6b, 0xc8, 0x91, 0xe7, 0x0c, 0x17, 0x82, 0x2c, 0xc4, 0x21, - 0xa6, 0x65, 0x81, 0x9a, 0x50, 0x18, 0x75, 0x5b, 0xb1, 0xc9, 0x36, 0x9b, - 0x0f, 0x3b, 0xde, 0x02, 0x63, 0xa6, 0x72, 0xa6, 0xeb, 0x21, 0x53, 0x94, - 0x22, 0xeb, 0x2c, 0x6d, 0xed, 0xee, 0x08, 0x80, 0xc7, 0x5a, 0x40, 0x66, - 0xe8, 0x94, 0x78, 0x86, 0x85, 0x6e, 0xa2, 0x67, 0xda, 0x5a, 0x0c, 0x4f, - 0x8d, 0xd4, 0xcb, 0xd1, 0x9b, 0x1d, 0xe1, 0x83, 0x82, 0xfb, 0x75, 0x46, - 0x79, 0x6a, 0x20, 0x59, 0x68, 0x20, 0x55, 0xee, 0xdd, 0x13, 0xb5, 0x72, - 0xdf, 0x95, 0xa8, 0xc7, 0x68, 0x32, 0x41, 0xdc, 0xff, 0xe5, 0xfc, 0xbf, - 0x98, 0xd5, 0x54, 0x22, 0xee, 0x11, 0x38, 0xa4, 0x91, 0x41, 0x61, 0xda, - 0x27, 0x6d, 0x71, 0x34, 0x73, 0xa5, 0xa4, 0x8e, 0xc7, 0xec, 0x99, 0x38, - 0x3c, 0x3b, 0xc9, 0xbe, 0x21, 0x7d, 0xd0, 0xab, 0x5f, 0xbb, 0x2c, 0x84, - 0xd4, 0xff, 0xac, 0xa6, 0x70, 0xd4, 0x69, 0xc7, 0x2c, 0xca, 0x90, 0xba, - 0x99, 0xef, 0xdc, 0x9e, 0xef, 0x6a, 0x75, 0xc6, 0x36, 0x54, 0x97, 0x17, - 0x27, 0x80, 0x7a, 0x1d, 0xd5, 0x94, 0x9a, 0x83, 0x5e, 0x84, 0x2e, 0xf5, - 0xa7, 0x1a, 0x3a, 0xb9, 0x09, 0x42, 0x57, 0xa9, 0x3d, 0x67, 0x36, 0x14, - 0x1a, 0x1b, 0x26, 0xe8, 0xf7, 0x3d, 0x49, 0xa1, 0x18, 0x18, 0xa7, 0xad, - 0xd8, 0x92, 0x1d, 0x47, 0x4b, 0xf2, 0x19, 0xfa, 0xe0, 0x93, 0x39, 0xa8, - 0x0b, 0x34, 0x15, 0x9a, 0xc5, 0x42, 0x73, 0x5f, 0x29, 0x1f, 0x56, 0x07, - 0x12, 0x16, 0xda, 0xaa, 0x81, 0x65, 0xa5, 0x97, 0xe6, 0x39, 0x38, 0xd7, - 0x82, 0x05, 0x1a, 0x61, 0xf3, 0xbb, 0x43, 0x45, 0x91, 0x61, 0x6d, 0x25, - 0x12, 0x3e, 0x29, 0x64, 0x4c, 0xb8, 0x3f, 0x36, 0x4d, 0x0a, 0x2b, 0xc5, - 0x15, 0x38, 0x87, 0x08, 0x6e, 0x0a, 0xe2, 0xbc, 0x2a, 0x0d, 0x29, 0xc9, - 0xd1, 0xfe, 0x00, 0xee, 0xc2, 0xdd, 0xc4, 0xd3, 0x01, 0xc9, 0xe5, 0x6e, - 0x31, 0xdd, 0x3e, 0x22, 0x8b, 0x52, 0x9a, 0x00, 0xff, 0x86, 0x07, 0x7f, - 0xed, 0x81, 0x86, 0x76, 0x2a, 0x3f, 0xa6, 0xfb, 0xbc, 0x34, 0x01, 0xa9, - 0x46, 0x71, 0x38, 0xdb, 0x2e, 0xb6, 0xed, 0x23, 0x84, 0x39, 0x16, 0x3a, - 0x60, 0x93, 0xb9, 0x6a, 0x84, 0x30, 0x19, 0xd4, 0xa7, 0x6c, 0x51, 0x9b, - 0xa3, 0x3e, 0x9e, 0x52, 0xb9, 0xaa, 0xbb, 0xaa, 0x17, 0xc2, 0x6c, 0xd1, - 0xd5, 0x94, 0xb9, 0xdb, 0x76, 0x08, 0x9d, 0x6c, 0x83, 0xb7, 0x68, 0x25, - 0x94, 0xf0, 0x35, 0x3e, 0x79, 0xf9, 0x6b, 0x0f, 0xfd, 0x5a, 0x42, 0x1e, - 0x73, 0xcb, 0x47, 0xbb, 0xf9, 0xd2, 0x70, 0xe3, 0x80, 0x45, 0x17, 0xef, - 0x98, 0xdd, 0x07, 0x7d, 0x75, 0x32, 0x8f, 0xbc, 0xda, 0x8e, 0x4a, 0xc3, - 0xfa, 0x60, 0xe9, 0x25, 0x48, 0xac, 0xf2, 0xab, 0x3c, 0xdc, 0xee, 0xbe, - 0x82, 0x1a, 0xe5, 0x44, 0x85, 0xc4, 0x9f, 0xb4, 0xb8, 0xb5, 0x52, 0x23, - 0xe2, 0xc9, 0xb5, 0x19, 0x85, 0xec, 0xf4, 0xea, 0xed, 0xd4, 0x6f, 0x98, - 0xd4, 0x44, 0xf5, 0x72, 0x49, 0xf7, 0x98, 0x11, 0xa3, 0x14, 0x23, 0x09, - 0x7b, 0x2b, 0x79, 0x80, 0x6c, 0xcc, 0xcb, 0x86, 0x31, 0x7d, 0xf2, 0x48, - 0xa1, 0xd9, 0x5a, 0x45, 0x06, 0xc4, 0x6a, 0x50, 0x72, 0x1b, 0xd9, 0xc3, - 0x59, 0x4c, 0x06, 0xd5, 0xc1, 0x3a, 0xd5, 0xdf, 0xea, 0x99, 0xfc, 0x6a, - 0xb6, 0xf4, 0x8d, 0x88, 0x0f, 0x8a, 0xc0, 0xf6, 0x2a, 0x5b, 0x43, 0xa7, - 0x60, 0x50, 0x64, 0x27, 0x52, 0x11, 0x64, 0x7d, 0xbf, 0xb3, 0x72, 0xc2, - 0xf6, 0x3e, 0x0e, 0xc1, 0xac, 0x9e, 0xbe, 0x64, 0x7d, 0x07, 0xc8, 0x8a, - 0x16, 0x6e, 0xf3, 0xd8, 0x14, 0x5d, 0xe5, 0x76, 0x9b, 0x5e, 0x0f, 0xd2, - 0x5e, 0x71, 0x77, 0xb0, 0x71, 0x1c, 0x8a, 0x2a, 0x2f, 0xc8, 0xa9, 0x78, - 0x63, 0xeb, 0x72, 0x89, 0x8b, 0xf6, 0x79, 0x7a, 0x30, 0x5c, 0xe6, 0x0f, - 0xd6, 0x29, 0x02, 0x6a, 0xda, 0x99, 0x07, 0x42, 0x3a, 0x01, 0x03, 0xb5, - 0xdb, 0x48, 0x5b, 0xe1, 0x79, 0x57, 0x7a, 0xb2, 0x09, 0xfd, 0x10, 0xa5, - 0xa7, 0x40, 0xd1, 0x68, 0x44, 0x74, 0x0a, 0x75, 0x19, 0x4c, 0x27, 0xce, - 0xa7, 0xe3, 0x55, 0x20, 0xb9, 0x6c, 0x29, 0x89, 0xc5, 0xea, 0x35, 0xd3, - 0xde, 0x6a, 0x0b, 0xfd, 0x28, 0x95, 0x99, 0x6a, 0xd4, 0xac, 0x41, 0x06, - 0xc8, 0x5a, 0x47, 0xa6, 0x09, 0x07, 0x02, 0xe8, 0x16, 0xf7, 0x80, 0x6f, - 0xcd, 0x99, 0x40, 0x8b, 0x9d, 0xa6, 0x53, 0xa9, 0xd9, 0xa6, 0xe7, 0xb7, - 0x5c, 0xec, 0x39, 0xd0, 0xe9, 0x9e, 0x0e, 0xca, 0xe1, 0xae, 0x26, 0x88, - 0x2d, 0x9b, 0x94, 0xb3, 0x21, 0xcb, 0xed, 0x3d, 0xc9, 0xeb, 0x6e, 0xd1, - 0xeb, 0x80, 0x4c, 0xc0, 0xe3, 0xf2, 0xf3, 0x5c, 0xe8, 0x49, 0xd3, 0x6f, - 0x68, 0x29, 0x79, 0x3e, 0xed, 0x8d, 0x59, 0xd2, 0x17, 0xd0, 0x67, 0x96, - 0xbc, 0x20, 0x4c, 0xcc, 0xc3, 0x91, 0x35, 0xe0, 0xfc, 0x7c, 0xef, 0x1e, - 0x39, 0xe5, 0x39, 0x3a, 0xd1, 0x41, 0xaf, 0x43, 0x12, 0xf6, 0x80, 0x23, - 0x3a, 0x1c, 0x1b, 0x69, 0x2a, 0xca, 0x5a, 0x83, 0x39, 0xf4, 0x6f, 0x38, - 0x75, 0x04, 0xaa, 0x25, 0x1a, 0xa4, 0xf5, 0x11, 0xe0, 0x5b, 0x8b, 0xab, - 0x8d, 0xe6, 0xa0, 0xcc, 0x20, 0x11, 0x09, 0x3f, 0x70, 0x6d, 0xd8, 0x13, - 0x84, 0x63, 0x85, 0x06, 0x5b, 0x9a, 0x65, 0x61, 0xc4, 0x1e, 0x60, 0x73, - 0xbb, 0xad, 0x99, 0x2b, 0x59, 0x8b, 0xc7, 0xa2, 0x82, 0xc8, 0xd1, 0xdb, - 0x90, 0xc9, 0x9f, 0x10, 0xbf, 0x0f, 0x4b, 0x04, 0x6d, 0x01, 0xed, 0x0d, - 0x2a, 0x2c, 0xf7, 0xf9, 0xb8, 0x53, 0xb8, 0x5d, 0x05, 0x5a, 0x0b, 0xda, - 0x1f, 0x61, 0xf8, 0x22, 0xd5, 0x87, 0x2f, 0xd7, 0x54, 0x42, 0xb8, 0x7a, - 0x3b, 0xb2, 0x53, 0x50, 0xa0, 0xbd, 0x88, 0x2d, 0x13, 0x45, 0xd5, 0x0f, - 0x8f, 0x86, 0x3d, 0x71, 0xbc, 0xf0, 0x67, 0x85, 0xbf, 0x1f, 0xde, 0xa4, - 0xc0, 0x03, 0x09, 0xc1, 0x1c, 0xa8, 0x17, 0xce, 0x81, 0xa6, 0xe3, 0xb8, - 0xb4, 0xda, 0xc5, 0x44, 0xe9, 0x05, 0x85, 0x62, 0xfa, 0x36, 0x24, 0x8e, - 0xca, 0xd0, 0xa4, 0x02, 0xf8, 0xc9, 0x77, 0x73, 0x97, 0x6f, 0x7d, 0xe1, - 0xdf, 0xa6, 0x95, 0xde, 0x08, 0xcf, 0xd4, 0xbf, 0x3a, 0xf2, 0x20, 0x60, - 0xfe, 0xbf, 0x8d, 0x8f, 0xde, 0x6c, 0x2d, 0xed, 0xfb, 0x53, 0xdb, 0x5c, - 0xae, 0xa7, 0xd7, 0x33, 0x93, 0xf4, 0x9c, 0xbe, 0xb6, 0xa2, 0xa6, 0xf2, - 0x84, 0x04, 0xfd, 0x5b, 0x68, 0xf1, 0x59, 0x48, 0xb0, 0xfb, 0xb6, 0x51, - 0xf5, 0x09, 0xc1, 0xe2, 0xc5, 0x1a, 0xe3, 0xd3, 0xd9, 0x3a, 0xa8, 0xff, - 0xea, 0xd5, 0xf0, 0x8c, 0x7b, 0x88, 0xa0, 0x5a, 0xff, 0x80, 0xca, 0x30, - 0xfb, 0x40, 0xf2, 0x41, 0xf5, 0x89, 0xf5, 0x8a, 0x66, 0x6e, 0xda, 0x26, - 0x0e, 0xf1, 0x90, 0x0c, 0x31, 0xe5, 0x36, 0xef, 0x11, 0xbe, 0xc2, 0x93, - 0xa3, 0x4f, 0x02, 0xcf, 0xf3, 0x88, 0x89, 0x39, 0x8f, 0x21, 0x35, 0x67, - 0x5b, 0xae, 0x36, 0x6c, 0x7d, 0xe6, 0x79, 0x5a, 0x2a, 0x17, 0xdb, 0x2e, - 0x83, 0x66, 0xad, 0x38, 0x49, 0x54, 0xf2, 0x3b, 0x1d, 0xb9, 0x93, 0x9c, - 0x5e, 0x16, 0x65, 0x03, 0xb5, 0x4d, 0xef, 0x30, 0x75, 0xb8, 0x49, 0xc5, - 0xd5, 0xcc, 0xd7, 0xac, 0xd2, 0x4a, 0x65, 0x03, 0x62, 0xbf, 0xf2, 0x6b, - 0x84, 0xf9, 0xbe, 0x9d, 0x85, 0xc2, 0x45, 0xdb, 0xc6, 0x62, 0x48, 0x72, - 0x41, 0x6e, 0x38, 0x21, 0x8f, 0x1e, 0x9e, 0xb0, 0xd5, 0xda, 0xc7, 0x1a, - 0x16, 0x9b, 0x46, 0x28, 0xad, 0x15, 0x9f, 0x6d, 0x7a, 0x16, 0xd1, 0xdf, - 0xad, 0x94, 0xd5, 0x11, 0x71, 0x78, 0xff, 0x8c, 0xef, 0xfb, 0xdb, 0xb0, - 0x60, 0xfa, 0x67, 0x03, 0x3b, 0x14, 0xab, 0xf7, 0xa6, 0x4a, 0x6a, 0x73, - 0x64, 0xe1, 0xeb, 0x22, 0x63, 0xb7, 0x46, 0x69, 0x4d, 0x67, 0x3b, 0xa1, - 0x33, 0x88, 0xe1, 0x54, 0x54, 0xbc, 0xba, 0xbb, 0x4a, 0xb3, 0x8b, 0x7f, - 0x9d, 0x58, 0x1f, 0xdf, 0x93, 0x45, 0x45, 0xdd, 0x29, 0x9e, 0x56, 0x11, - 0x2d, 0x38, 0xa6, 0x2c, 0x0d, 0x39, 0x3b, 0x0c, 0xf2, 0xa9, 0x79, 0xed, - 0xf9, 0xf9, 0xf4, 0xe7, 0xbb, 0xaf, 0x6d, 0x25, 0x74, 0x41, 0x67, 0x72, - 0x37, 0xb4, 0x17, 0x97, 0xc5, 0x10, 0x0a, 0x1b, 0x15, 0x4e, 0x3f, 0x03, - 0x3e, 0x3a, 0xb6, 0x24, 0x96, 0x61, 0x3f, 0x43, 0x74, 0x8c, 0x7a, 0xee, - 0xe1, 0x62, 0x18, 0xcf, 0x6a, 0x09, 0x0a, 0xfc, 0x22, 0x1d, 0x1f, 0x27, - 0xc7, 0xbc, 0x3f, 0x40, 0xa5, 0x28, 0x8d, 0x9b, 0x95, 0x35, 0x80, 0x57, - 0x0a, 0xd8, 0x53, 0xec, 0x94, 0xd2, 0xbc, 0x42, 0x51, 0x78, 0x6c, 0xeb, - 0xf0, 0xf1, 0x3a, 0x26, 0x1e, 0x9f, 0x45, 0xa6, 0x91, 0x64, 0xfb, 0xe2, - 0x59, 0x97, 0xba, 0xe1, 0x19, 0xc9, 0x50, 0x9c, 0x95, 0xee, 0x2d, 0x84, - 0xd4, 0x66, 0x28, 0xf6, 0x7c, 0xd7, 0x7d, 0xe6, 0xf0, 0x15, 0x22, 0x98, - 0xbf, 0xac, 0x47, 0x60, 0x9b, 0x79, 0x48, 0xb3, 0x3c, 0x14, 0x43, 0x1b, - 0xb0, 0x0e, 0x28, 0x76, 0xf0, 0xd4, 0x19, 0xa1, 0x02, 0x11, 0xa1, 0xa2, - 0x04, 0xee, 0xe9, 0x22, 0xd5, 0xfc, 0x7d, 0xb8, 0x3d, 0xc0, 0x5d, 0xf3, - 0xf9, 0xc9, 0x25, 0xd7, 0x76, 0xee, 0x9a, 0x88, 0x75, 0x00, 0x55, 0x79, - 0x4b, 0xfe, 0xb4, 0x94, 0xbf, 0x86, 0x84, 0xbf, 0x92, 0x6b, 0x02, 0x37, - 0xc2, 0x43, 0x25, 0x69, 0xff, 0x16, 0xb4, 0x11, 0x88, 0xca, 0x2f, 0x7a, - 0x71, 0xbc, 0x3e, 0x6b, 0xe7, 0x15, 0x08, 0xfe, 0x53, 0xe6, 0x02, 0x77, - 0xc1, 0x27, 0x3a, 0x3f, 0x74, 0x30, 0x3c, 0x41, 0xc2, 0xe2, 0xfd, 0x4f, - 0xd7, 0x1f, 0xe7, 0x08, 0x39, 0xb2, 0x1f, 0x5b, 0x70, 0xc2, 0xcc, 0x30, - 0x27, 0x9c, 0xbd, 0xad, 0xcd, 0x77, 0x97, 0xa5, 0x03, 0xfa, 0xea, 0x6a, - 0xc6, 0x48, 0xcf, 0xd6, 0x81, 0x04, 0xfb, 0x6d, 0xc4, 0xb4, 0xf3, 0x2c, - 0x91, 0xdb, 0x89, 0x4c, 0x8e, 0x96, 0xf0, 0xf5, 0x57, 0x1d, 0x09, 0x77, - 0x2f, 0xc8, 0x6c, 0x1f, 0xda, 0x66, 0x3d, 0x26, 0x8a, 0x4c, 0xa4, 0xc3, - 0xce, 0x80, 0x58, 0xb9, 0xb8, 0x96, 0xc1, 0xfe, 0x0b, 0xf5, 0x2b, 0x0b, - 0xdd, 0xad, 0x81, 0x5d, 0xdb, 0xa2, 0x95, 0x47, 0xbc, 0x69, 0xe0, 0x39, - 0x8c, 0x35, 0x84, 0x7b, 0x1a, 0x72, 0x09, 0x8f, 0xe4, 0xf2, 0x3e, 0xa9, - 0x8b, 0xfb, 0xa4, 0x20, 0xed, 0x03, 0xcc, 0x36, 0xc0, 0xc5, 0xc2, 0x41, - 0x61, 0x2f, 0x58, 0xfb, 0xfd, 0xf2, 0xdb, 0xe2, 0x24, 0xd4, 0xcb, 0x0e, - 0x88, 0xb6, 0x49, 0x2d, 0x5e, 0xa0, 0x24, 0x9e, 0x00, 0xf2, 0x06, 0x53, - 0xff, 0x16, 0xf0, 0x6e, 0x8e, 0x1f, 0xc1, 0x1b, 0x61, 0x21, 0xef, 0xf3, - 0x9b, 0x7c, 0xe2, 0xb1, 0x99, 0x2c, 0xb3, 0xa1, 0xe0, 0x29, 0xe9, 0xec, - 0x46, 0xd8, 0x8b, 0xf6, 0xe1, 0xba, 0x16, 0x3c, 0xed, 0xad, 0x39, 0x35, - 0xe4, 0xdb, 0x5d, 0xed, 0x9c, 0x19, 0x48, 0xc3, 0xc2, 0x71, 0xb4, 0xe6, - 0x0d, 0x3d, 0x4f, 0x3a, 0x76, 0xab, 0xe8, 0xab, 0xdc, 0xb5, 0x4a, 0x80, - 0x2d, 0xef, 0x47, 0x0b, 0xc1, 0xb2, 0x38, 0x4d, 0x90, 0xd0, 0x10, 0xe3, - 0x3b, 0x17, 0x55, 0xcb, 0xb9, 0x1c, 0x6c, 0x22, 0xd8, 0x94, 0xff, 0x51, - 0xc5, 0xfe, 0x90, 0xb5, 0xfe, 0x69, 0x5b, 0x92, 0xda, 0x52, 0xff, 0x51, - 0x93, 0x7e, 0x53, 0xae, 0x34, 0xbd, 0xa1, 0xb9, 0xf2, 0x9f, 0xf5, 0xab, - 0xfe, 0x61, 0x8d, 0x58, 0x0b, 0xe9, 0xab, 0xfe, 0xd7, 0xbf, 0xc7, 0x74, - 0xb5, 0xad, 0x1d, 0x2c, 0x25, 0x50, 0xee, 0x0f, 0xc6, 0x8a, 0xdf, 0x5b, - 0xc2, 0xd0, 0x5c, 0x91, 0x4c, 0xc4, 0x3b, 0x32, 0x1d, 0x0a, 0x8d, 0x6c, - 0x44, 0xf0, 0x97, 0x35, 0x7d, 0x42, 0x3f, 0xe3, 0x7a, 0x50, 0x6c, 0x3d, - 0x35, 0xb0, 0x35, 0xb4, 0x1b, 0xda, 0xc5, 0x78, 0x12, 0xff, 0xca, 0xdd, - 0xc8, 0x6f, 0x3e, 0x70, 0xe9, 0x50, 0x6c, 0xad, 0xc3, 0xc3, 0xa0, 0x83, - 0x93, 0x91, 0x2c, 0xc6, 0x18, 0x61, 0x81, 0xbf, 0x59, 0xae, 0xa0, 0x8e, - 0xfb, 0x3e, 0x3d, 0x03, 0x7c, 0x3b, 0x96, 0x59, 0x41, 0x10, 0x45, 0xbf, - 0xed, 0xed, 0x63, 0xd2, 0xc7, 0x08, 0xa6, 0xbb, 0xb6, 0xe5, 0x23, 0xa9, - 0xef, 0x36, 0xfa, 0xed, 0x94, 0x81, 0xc2, 0xb7, 0x6b, 0xd7, 0xb9, 0x9a, - 0x0d, 0x5c, 0xa3, 0xec, 0x3d, 0x40, 0x19, 0x4e, 0x0f, 0xcf, 0x20, 0x29, - 0xb2, 0xc7, 0x00, 0xa0, 0xdf, 0x8d, 0xf2, 0x5a, 0x12, 0x61, 0x4d, 0xae, - 0x93, 0x3d, 0xe0, 0x5a, 0x92, 0x52, 0xdb, 0xa8, 0x10, 0x52, 0xd2, 0xe1, - 0x56, 0x4f, 0xf0, 0xd1, 0x7b, 0xef, 0x5a, 0x0d, 0x26, 0x37, 0x2d, 0x4a, - 0x7c, 0xf3, 0x23, 0x18, 0x04, 0x74, 0xc2, 0xd6, 0x00, 0x81, 0xea, 0xcf, - 0x42, 0x0c, 0xac, 0xc0, 0x9d, 0x01, 0xed, 0x6b, 0xb5, 0xa4, 0xfe, 0xe5, - 0xc1, 0xa3, 0x08, 0xf0, 0x5a, 0x0f, 0x3f, 0x99, 0x7d, 0xe0, 0xec, 0xe4, - 0x29, 0x57, 0xa6, 0x13, 0x05, 0xb9, 0x65, 0xf6, 0x80, 0x42, 0x07, 0x8e, - 0x09, 0x60, 0x7a, 0xae, 0x13, 0x07, 0x1f, 0xc2, 0xc4, 0x63, 0xd0, 0x87, - 0x34, 0x34, 0x99, 0x27, 0xae, 0xdb, 0x73, 0x4f, 0xb5, 0x2c, 0xc1, 0x27, - 0x7d, 0x10, 0x43, 0x80, 0x3f, 0x8f, 0x31, 0x1d, 0x36, 0xb4, 0x11, 0x73, - 0x70, 0xab, 0x08, 0x5b, 0x0e, 0xf6, 0x9d, 0xfc, 0x4b, 0xe7, 0xc9, 0x1d, - 0x4d, 0x0f, 0x19, 0x76, 0x4c, 0x3b, 0xe5, 0x91, 0x17, 0x2b, 0x20, 0xa0, - 0xed, 0xcd, 0x9a, 0xd0, 0x6e, 0x35, 0x1d, 0xcf, 0x95, 0x17, 0x31, 0x90, - 0xec, 0xdc, 0x27, 0xfb, 0x62, 0x5d, 0xf8, 0xb0, 0x17, 0x1a, 0x12, 0xe7, - 0x13, 0xa8, 0x23, 0x52, 0xc7, 0xbb, 0x51, 0x21, 0x46, 0x93, 0x09, 0x07, - 0x5c, 0xb5, 0x23, 0x41, 0xa9, 0xd4, 0x09, 0x0a, 0xf2, 0x5b, 0x1e, 0xea, - 0xa8, 0x1e, 0x72, 0x44, 0x13, 0xeb, 0x44, 0xe2, 0x8f, 0x89, 0xa8, 0x7e, - 0xc6, 0xf6, 0xb7, 0xab, 0xc7, 0x7b, 0x36, 0x67, 0xbc, 0x49, 0x24, 0xaf, - 0xb9, 0x47, 0x5d, 0xa9, 0xf0, 0x8e, 0xab, 0xb0, 0x11, 0x75, 0x45, 0x59, - 0x79, 0x71, 0xbc, 0xe7, 0x5b, 0xe6, 0xe6, 0x5c, 0x19, 0xde, 0xe8, 0x5b, - 0x78, 0x9d, 0x7c, 0xe2, 0x22, 0xfa, 0x7b, 0xae, 0x0b, 0xb1, 0xc9, 0xbc, - 0xbf, 0x31, 0x7a, 0x9d, 0xea, 0xa7, 0xa0, 0xdb, 0x36, 0x1f, 0x29, 0xec, - 0x6b, 0x78, 0x60, 0x95, 0x05, 0xb6, 0x26, 0xf8, 0x38, 0xe3, 0x9f, 0x75, - 0x97, 0xb9, 0x19, 0xfa, 0xa0, 0xc4, 0x38, 0xec, 0x8f, 0xe3, 0x67, 0xba, - 0xe0, 0x70, 0x12, 0xe0, 0x96, 0x6a, 0xcd, 0x9c, 0x7a, 0x44, 0xc3, 0x89, - 0x1c, 0xc1, 0x80, 0xa9, 0xdf, 0x41, 0x35, 0xd1, 0xc8, 0xb7, 0x08, 0x97, - 0x33, 0x34, 0x2c, 0x5f, 0x36, 0x76, 0x7d, 0xdb, 0xb0, 0x2a, 0x35, 0xc3, - 0x8e, 0x8c, 0xbe, 0x96, 0xd7, 0x15, 0xe2, 0x66, 0x42, 0xf6, 0xd1, 0x19, - 0xc6, 0xd7, 0x3c, 0xb6, 0xda, 0x49, 0x16, 0x1d, 0x55, 0x80, 0xb8, 0xbf, - 0x17, 0x45, 0x6d, 0x26, 0x58, 0x1d, 0xf2, 0x64, 0xdb, 0xb1, 0xbf, 0x69, - 0x0d, 0x23, 0xe3, 0x26, 0xb5, 0x32, 0x89, 0xbb, 0xa4, 0x93, 0xd0, 0x6e, - 0x4e, 0xd1, 0x34, 0xd8, 0xb1, 0xce, 0x61, 0x9c, 0xee, 0x9b, 0x1c, 0xcd, - 0xc7, 0x39, 0xf4, 0xee, 0x11, 0x23, 0xf0, 0x1c, 0x8a, 0xf8, 0xfb, 0x0c, - 0xfb, 0x17, 0xc3, 0x2a, 0x75, 0x87, 0x79, 0x1d, 0xad, 0xa4, 0x61, 0xd9, - 0x59, 0xee, 0xc9, 0xc8, 0x9e, 0x36, 0x8e, 0xe5, 0xbf, 0x7f, 0x70, 0x41, - 0xfa, 0x62, 0x63, 0x16, 0x54, 0xc8, 0x74, 0xd3, 0xa5, 0xa2, 0x51, 0x27, - 0xcf, 0x4b, 0xf4, 0xe0, 0x86, 0x82, 0xc3, 0x9e, 0xf8, 0xe6, 0x71, 0x04, - 0xe2, 0xef, 0xe3, 0xe9, 0x9b, 0x10, 0x57, 0xd4, 0xe8, 0x04, 0x3d, 0x75, - 0xdd, 0xc3, 0xc9, 0xc2, 0x61, 0x4d, 0xe5, 0xaf, 0x38, 0x4a, 0x9d, 0x13, - 0x35, 0x5a, 0x01, 0x5a, 0x92, 0x70, 0xe0, 0x9b, 0xf5, 0x18, 0x5c, 0xca, - 0x79, 0xb5, 0x5e, 0x31, 0xe3, 0x2c, 0xfc, 0x31, 0xbf, 0xaf, 0xc7, 0xa4, - 0x3a, 0x02, 0x14, 0xb2, 0x69, 0xb5, 0x5c, 0x69, 0xe0, 0x80, 0x30, 0x5d, - 0x12, 0x1d, 0x8d, 0x53, 0xe5, 0xbb, 0x3f, 0x59, 0xf8, 0xd3, 0x6c, 0xbf, - 0x92, 0xb0, 0x4c, 0x55, 0x74, 0xb6, 0x7b, 0xb0, 0x0f, 0x75, 0x8a, 0xfa, - 0xcb, 0x5c, 0xec, 0x86, 0xdd, 0xcf, 0xa7, 0x5e, 0x61, 0x7b, 0xba, 0xdc, - 0xda, 0xa4, 0x50, 0x78, 0xa5, 0x8b, 0x8e, 0xc9, 0x55, 0x18, 0xde, 0x1d, - 0xd9, 0xeb, 0xee, 0x63, 0xab, 0xfa, 0x8a, 0x8a, 0x7e, 0xb9, 0xff, 0x69, - 0xcc, 0xd9, 0x40, 0x5b, 0xea, 0xa2, 0xc7, 0x5b, 0x3e, 0x3d, 0x70, 0x08, - 0xd6, 0x38, 0xb9, 0x46, 0xf8, 0xa7, 0x87, 0x77, 0x67, 0x73, 0x54, 0x21, - 0xa5, 0x9f, 0x5d, 0x1a, 0xb6, 0x60, 0xb6, 0x93, 0x02, 0xa8, 0x3c, 0x81, - 0xad, 0xd9, 0xec, 0x95, 0x2d, 0xb5, 0x83, 0x8c, 0x4e, 0x16, 0x0b, 0xde, - 0x4b, 0xa6, 0x1c, 0x60, 0x6d, 0x2d, 0xdf, 0x3e, 0xc2, 0x1a, 0xda, 0x1a, - 0x6c, 0x1f, 0xaf, 0x98, 0x1f, 0xdf, 0xd2, 0x2e, 0x17, 0xea, 0xac, 0x00, - 0xf6, 0xbb, 0x06, 0x0f, 0x02, 0x4b, 0xf7, 0x4e, 0x86, 0x6d, 0x71, 0x28, - 0xa1, 0xa1, 0x66, 0x34, 0xdc, 0x91, 0x86, 0x72, 0xc3, 0xa5, 0x87, 0xee, - 0xcd, 0xdf, 0xe8, 0xbf, 0x91, 0xb6, 0x61, 0x95, 0x1a, 0xb3, 0x16, 0x8f, - 0xa2, 0x47, 0x96, 0xbb, 0x5f, 0xfb, 0x58, 0x31, 0x35, 0x00, 0x8d, 0xae, - 0x03, 0x99, 0x25, 0xdf, 0x89, 0xf6, 0x48, 0x1b, 0xc0, 0x86, 0x4f, 0x98, - 0xc7, 0x6b, 0xa9, 0x2f, 0xd4, 0xaa, 0x9c, 0x3d, 0x29, 0x2a, 0xd4, 0x5d, - 0xa5, 0x22, 0x5b, 0x73, 0x4e, 0x8f, 0x79, 0x28, 0x3a, 0x5e, 0x75, 0xdc, - 0x93, 0xb5, 0xf5, 0x0a, 0x21, 0xc9, 0xb1, 0x55, 0xf0, 0x3d, 0x87, 0xef, - 0x82, 0xf2, 0xf8, 0x58, 0x21, 0x66, 0xab, 0x19, 0xc8, 0xea, 0xf0, 0xb0, - 0x4f, 0x1c, 0x45, 0xbf, 0x57, 0x08, 0xec, 0x2a, 0x57, 0x95, 0x48, 0xf3, - 0x6c, 0x48, 0x6b, 0x95, 0x81, 0x20, 0xbf, 0x48, 0x72, 0xd3, 0x68, 0x62, - 0x38, 0xb4, 0xe0, 0xc1, 0xc3, 0x83, 0x94, 0xe7, 0x5a, 0x34, 0xac, 0x36, - 0x2a, 0xb7, 0x54, 0x16, 0x58, 0xcd, 0x33, 0x1d, 0xcd, 0x03, 0xad, 0x0d, - 0xba, 0xe0, 0x53, 0x5a, 0x0c, 0x6b, 0xee, 0xb1, 0xad, 0x1e, 0xe8, 0xdc, - 0x74, 0x33, 0x0c, 0xc4, 0x2d, 0xef, 0x50, 0xa0, 0x74, 0xdf, 0x7a, 0x69, - 0xc0, 0x6f, 0x2f, 0xae, 0x0d, 0x5b, 0x3e, 0xd2, 0x1c, 0xd0, 0x60, 0x2b, - 0x22, 0x27, 0x3d, 0xff, 0xb7, 0x53, 0x5a, 0xff, 0xd3, 0x48, 0xf6, 0x88, - 0x3a, 0x4f, 0x5c, 0xa9, 0x34, 0x4f, 0x6e, 0x00, 0xd2, 0xe8, 0xca, 0x3f, - 0x6e, 0x1e, 0xd6, 0x28, 0xef, 0x48, 0xd5, 0xa3, 0x6d, 0x54, 0x92, 0xc2, - 0x56, 0xac, 0x81, 0x4d, 0x52, 0xa8, 0x9d, 0xca, 0xfe, 0xf0, 0x2b, 0x43, - 0xb1, 0xb6, 0x3f, 0x14, 0x15, 0x1e, 0x86, 0xf8, 0xbe, 0x66, 0x5e, 0xe3, - 0x10, 0xe4, 0x89, 0xaf, 0xe0, 0x59, 0xb6, 0xa1, 0x92, 0xac, 0x1b, 0x12, - 0x24, 0x47, 0x6d, 0x28, 0x39, 0xda, 0x68, 0x25, 0x24, 0x05, 0x81, 0x4e, - 0x7a, 0xd5, 0x87, 0xc1, 0xeb, 0x18, 0x23, 0xaf, 0x69, 0x3f, 0x37, 0x8b, - 0x96, 0xe7, 0x25, 0xf1, 0x69, 0x0e, 0xc7, 0xc4, 0xa0, 0xff, 0x85, 0x32, - 0x5e, 0x67, 0x19, 0x23, 0x6d, 0xb5, 0x41, 0xb9, 0xcd, 0x6c, 0x85, 0x8d, - 0x4d, 0xf8, 0x98, 0x86, 0x4e, 0x7b, 0x42, 0xba, 0xcf, 0x3b, 0x78, 0xac, - 0x5b, 0xf6, 0xc6, 0x52, 0x39, 0x14, 0xc4, 0xd8, 0x3a, 0x66, 0x5f, 0x2a, - 0x16, 0xad, 0x88, 0xe0, 0x40, 0x8d, 0x01, 0x81, 0x0f, 0xa9, 0x84, 0x5b, - 0x9b, 0x2e, 0x8c, 0xf4, 0x34, 0x86, 0x02, 0x82, 0x92, 0x85, 0x98, 0xc2, - 0x4e, 0xc7, 0x00, 0xad, 0x7f, 0x07, 0xda, 0x9f, 0x17, 0x3b, 0xac, 0x26, - 0x61, 0x36, 0x28, 0x5a, 0x22, 0x4e, 0x2e, 0x91, 0x01, 0x2d, 0x1d, 0x8b, - 0x04, 0x0a, 0x1f, 0x32, 0x9c, 0xde, 0x1b, 0x9e, 0x0c, 0xd3, 0x0b, 0xda, - 0x51, 0x51, 0xc7, 0xad, 0xb0, 0xc1, 0xa9, 0x78, 0xa8, 0x36, 0x57, 0x1f, - 0x7d, 0xde, 0x20, 0xfc, 0xcf, 0x50, 0x53, 0x7b, 0xa4, 0x07, 0x84, 0xd5, - 0x6d, 0xa1, 0x21, 0x93, 0x6b, 0x2d, 0xd4, 0xa7, 0x27, 0x9a, 0x85, 0xdf, - 0xda, 0x2b, 0x06, 0x4b, 0x8f, 0x67, 0x98, 0x94, 0x8e, 0x61, 0x52, 0x22, - 0x55, 0x96, 0x65, 0xaa, 0xcd, 0x7b, 0x6a, 0x55, 0x05, 0xbf, 0xed, 0x96, - 0xb6, 0x48, 0xb5, 0x98, 0xb9, 0x6d, 0x39, 0x94, 0xa5, 0x6b, 0x4f, 0x24, - 0x3e, 0xa6, 0x56, 0x97, 0xc0, 0x9d, 0xc0, 0x89, 0x62, 0xeb, 0xed, 0xe1, - 0x6a, 0x2f, 0x48, 0xbb, 0xc3, 0x4b, 0xd8, 0x15, 0x80, 0x0c, 0xa4, 0x7d, - 0x0b, 0x3a, 0x3f, 0x6e, 0x6d, 0x8e, 0x96, 0x2a, 0x8d, 0x69, 0x6d, 0x2b, - 0xeb, 0xe6, 0xd3, 0x1a, 0x8d, 0x48, 0x7f, 0xbb, 0x2c, 0xa7, 0x07, 0xfb, - 0x28, 0x4b, 0xc8, 0x8b, 0xed, 0x79, 0x6f, 0xe5, 0x42, 0xfd, 0x38, 0x1d, - 0xb6, 0xba, 0xc4, 0x6d, 0x61, 0x43, 0x6d, 0xb4, 0x01, 0x82, 0x12, 0xc8, - 0x56, 0x46, 0xd5, 0x63, 0x8c, 0xfc, 0xed, 0x29, 0xa8, 0x9c, 0xdd, 0x35, - 0x3e, 0xb2, 0xf9, 0x14, 0x1f, 0xd5, 0x1d, 0x71, 0x3a, 0x3e, 0x32, 0x38, - 0x66, 0x4a, 0x48, 0x34, 0x9e, 0xc4, 0xa9, 0xb7, 0xb0, 0x3e, 0x8d, 0x7b, - 0xce, 0xf4, 0x48, 0x94, 0x28, 0xd6, 0x96, 0xc6, 0xc6, 0x51, 0x68, 0xe3, - 0x92, 0xd6, 0x79, 0x51, 0xaa, 0x55, 0xcf, 0x86, 0xc8, 0xf9, 0x6c, 0x41, - 0x58, 0xcb, 0x09, 0x45, 0x45, 0xdd, 0x2d, 0x61, 0x21, 0x0a, 0x54, 0xae, - 0x6f, 0x5f, 0xd5, 0x61, 0x3d, 0x75, 0x65, 0x14, 0x15, 0xe1, 0xf4, 0x9b, - 0xd1, 0x1e, 0xd0, 0x70, 0x09, 0x00, 0x31, 0xef, 0xc7, 0xfb, 0x8a, 0x20, - 0x92, 0x6c, 0x24, 0xc1, 0xb7, 0x85, 0xdb, 0x47, 0xdf, 0x6d, 0xf3, 0xa2, - 0xa2, 0xe7, 0xfb, 0xca, 0x6d, 0xc8, 0xba, 0xc0, 0x9b, 0xf4, 0x7b, 0xb5, - 0x2d, 0x21, 0x1e, 0xfa, 0xe1, 0x8a, 0xfc, 0x64, 0xa4, 0x35, 0x86, 0x0a, - 0xca, 0x75, 0xe6, 0x2e, 0x6c, 0xc3, 0xe2, 0x26, 0xde, 0xdc, 0x48, 0x70, - 0x60, 0x2f, 0x89, 0xe9, 0x07, 0xf0, 0x6e, 0x48, 0xcc, 0x1e, 0x0c, 0xd4, - 0x77, 0x05, 0xde, 0xbc, 0xf7, 0xd5, 0xe6, 0x2a, 0x90, 0xde, 0x5e, 0x81, - 0x7f, 0xa9, 0x3b, 0x05, 0x5a, 0x3b, 0xb5, 0xb7, 0x58, 0x91, 0xbe, 0xca, - 0x69, 0xf0, 0xcd, 0x60, 0x7b, 0xd3, 0x03, 0xe9, 0x58, 0x39, 0xde, 0xb9, - 0xb2, 0x83, 0xe3, 0x43, 0xb3, 0x61, 0x0e, 0x36, 0xc0, 0x1a, 0x09, 0x0d, - 0xd9, 0xc2, 0x8b, 0x54, 0x8b, 0xc0, 0x22, 0x85, 0x7e, 0x1b, 0xf3, 0xe2, - 0x3d, 0xa3, 0x16, 0xc0, 0x6f, 0x1d, 0x09, 0x7b, 0xcb, 0x03, 0xd1, 0x4b, - 0x7e, 0xcf, 0xad, 0xe8, 0x2b, 0x8c, 0x3d, 0xa8, 0xd3, 0xf6, 0x94, 0x07, - 0xc1, 0xa6, 0x94, 0xa0, 0x3a, 0x38, 0x80, 0xbe, 0xdb, 0x0a, 0xfd, 0x7d, - 0x74, 0x9d, 0x73, 0x0f, 0x6a, 0x74, 0xbd, 0x99, 0xf7, 0xa0, 0x5e, 0x8e, - 0x1e, 0x25, 0x2d, 0xb6, 0xde, 0x79, 0x1f, 0x7d, 0x87, 0x56, 0x44, 0x98, - 0x6a, 0x02, 0x6d, 0x6f, 0x8e, 0xcf, 0x3a, 0x33, 0xff, 0x3e, 0x86, 0x60, - 0xb5, 0x4e, 0x6d, 0x51, 0xff, 0x8e, 0xdf, 0x5d, 0xcc, 0xa9, 0x4d, 0xa3, - 0x3d, 0x1d, 0xd4, 0xc3, 0x45, 0x0f, 0x7b, 0x07, 0x8a, 0x4e, 0xbf, 0xdb, - 0xab, 0xd8, 0x36, 0x79, 0x0a, 0x82, 0xf3, 0x19, 0x5e, 0x74, 0x0f, 0x7b, - 0x11, 0xe2, 0x70, 0xf6, 0x96, 0x66, 0x8c, 0x0c, 0x1b, 0xf3, 0x70, 0x88, - 0x17, 0x29, 0x43, 0x73, 0x11, 0x74, 0xba, 0x07, 0xdd, 0xa2, 0x5f, 0x58, - 0xf6, 0x64, 0x80, 0x9d, 0x3f, 0x3b, 0xef, 0xd6, 0x50, 0xbc, 0x84, 0xbe, - 0x7f, 0x7f, 0x20, 0x2f, 0x77, 0x4a, 0xad, 0xe5, 0xcb, 0x5c, 0xbe, 0xc1, - 0x7e, 0xe6, 0x0b, 0xf6, 0xc4, 0xff, 0xe1, 0x9e, 0x41, 0xc6, 0x3d, 0xbc, - 0xfa, 0x73, 0xc3, 0xa0, 0x06, 0x19, 0xe0, 0x4c, 0x69, 0x4e, 0x9c, 0xcc, - 0xe9, 0x01, 0xe4, 0xc1, 0xe9, 0x30, 0x75, 0xd7, 0xe9, 0x4d, 0xdb, 0x22, - 0x1a, 0x23, 0xf2, 0x15, 0x0d, 0x71, 0xc6, 0x4d, 0x3d, 0x40, 0xf6, 0x57, - 0x03, 0x8a, 0xe4, 0x4a, 0x2d, 0x6c, 0x72, 0x95, 0x72, 0xcc, 0x1f, 0x59, - 0x1f, 0x7f, 0x40, 0x89, 0xfc, 0x9d, 0xcf, 0xbf, 0x27, 0xa9, 0x13, 0x02, - 0x6a, 0x2f, 0x7f, 0xb7, 0x8f, 0x7e, 0x43, 0xfc, 0x8c, 0x0e, 0xdf, 0xe6, - 0x5d, 0x07, 0x3a, 0xd8, 0x91, 0x30, 0xf0, 0x93, 0x70, 0xfd, 0x20, 0x4b, - 0x2b, 0x2d, 0x1d, 0x0b, 0xa5, 0x44, 0xf1, 0x94, 0x1e, 0x4e, 0xb1, 0xef, - 0xac, 0xa5, 0x05, 0xc5, 0xd6, 0x8f, 0x3c, 0x7f, 0xb2, 0x9e, 0x2e, 0x2a, - 0x9a, 0xa5, 0x7d, 0x0b, 0x6c, 0x6e, 0x66, 0x0c, 0xe5, 0x0b, 0x3a, 0x62, - 0x88, 0x24, 0x29, 0x93, 0xaf, 0xce, 0x9c, 0x40, 0x41, 0xd5, 0x9d, 0x0e, - 0x2e, 0x8a, 0x2c, 0x0a, 0x74, 0xe8, 0x37, 0x29, 0xe4, 0x4f, 0x9d, 0xee, - 0x00, 0x74, 0x5e, 0x9c, 0xaf, 0x5a, 0x6c, 0x80, 0xf1, 0xb0, 0x96, 0x90, - 0xaf, 0xce, 0xf3, 0x19, 0x5a, 0x1f, 0x82, 0x32, 0x95, 0x67, 0x53, 0x7f, - 0xf3, 0xf8, 0xfb, 0xf0, 0xf0, 0x7a, 0xd1, 0x7d, 0x4b, 0xb9, 0xf7, 0xa2, - 0xc4, 0x01, 0xe3, 0xc2, 0x70, 0x08, 0x13, 0xde, 0x87, 0xc4, 0x7e, 0xb6, - 0x0b, 0x13, 0xd9, 0x54, 0xe7, 0xe6, 0xdb, 0x9d, 0x69, 0x82, 0xd3, 0x83, - 0x22, 0xe2, 0x74, 0x99, 0x4c, 0xb3, 0x78, 0xc5, 0xac, 0xd3, 0x44, 0x55, - 0xc7, 0x70, 0x74, 0x4b, 0xd3, 0x91, 0xf9, 0x52, 0xe3, 0x3c, 0xae, 0x03, - 0x83, 0xab, 0x52, 0xa6, 0x13, 0xcd, 0xd2, 0x56, 0x97, 0x47, 0x46, 0x99, - 0x27, 0xe7, 0x19, 0x82, 0xdc, 0x0b, 0x7d, 0xf9, 0xde, 0x76, 0x75, 0xb7, - 0x49, 0x13, 0x66, 0x99, 0x7a, 0x04, 0x60, 0x38, 0x2d, 0xac, 0xa8, 0xc7, - 0xbd, 0xfe, 0xfe, 0xc5, 0x45, 0x13, 0x48, 0xf1, 0xfd, 0xb6, 0x2c, 0x80, - 0x87, 0x57, 0x96, 0x20, 0x83, 0x7d, 0x51, 0xbf, 0x17, 0xce, 0x39, 0x32, - 0xee, 0x15, 0x20, 0xda, 0x3b, 0x37, 0xfe, 0xe8, 0xd8, 0x85, 0x70, 0x62, - 0x1d, 0xbe, 0x11, 0x2a, 0x13, 0x40, 0x3f, 0x9c, 0x59, 0xf3, 0x5d, 0x6a, - 0x36, 0xab, 0xcb, 0x3b, 0x48, 0xf9, 0x4e, 0x4f, 0xdd, 0x85, 0xa9, 0x2e, - 0xcb, 0xed, 0xae, 0x02, 0xad, 0x4e, 0xeb, 0x43, 0xf7, 0xbb, 0x9e, 0xbf, - 0xad, 0x0b, 0xdc, 0x79, 0x2d, 0xa0, 0x3a, 0x16, 0xeb, 0x33, 0x29, 0x41, - 0x3a, 0xe0, 0x94, 0xeb, 0x55, 0x71, 0xc7, 0x5e, 0xc4, 0x24, 0x20, 0xfa, - 0xdc, 0xe5, 0x30, 0x28, 0x25, 0xf7, 0xf3, 0x7d, 0x57, 0x1f, 0xb8, 0x63, - 0x75, 0xa4, 0xfa, 0x10, 0xb4, 0x0f, 0x90, 0x6d, 0xad, 0x0e, 0xf4, 0xc3, - 0x03, 0x50, 0xdd, 0x78, 0x75, 0xad, 0x47, 0xe1, 0xba, 0x39, 0xa5, 0x57, - 0xeb, 0x8f, 0x92, 0xf6, 0x6d, 0x35, 0xf6, 0x0d, 0xe1, 0x59, 0xf6, 0x65, - 0xc5, 0xfa, 0x8d, 0x2b, 0x34, 0xb8, 0xdb, 0xc6, 0xf7, 0xe7, 0x89, 0xc8, - 0x6e, 0xc7, 0x19, 0x60, 0x8c, 0xf3, 0x74, 0xe2, 0x97, 0x6f, 0xce, 0xb0, - 0xa2, 0x7f, 0x13, 0x50, 0xb8, 0xc4, 0x1f, 0xcc, 0x8f, 0x70, 0x56, 0x39, - 0x3b, 0x1d, 0xc9, 0xcb, 0x66, 0x5c, 0x0d, 0x22, 0x63, 0x4e, 0xa4, 0xb7, - 0xee, 0xb8, 0xe6, 0x75, 0x25, 0xda, 0xf2, 0xd3, 0x5d, 0x0b, 0x95, 0xf9, - 0xc3, 0xdc, 0x32, 0x8b, 0x3a, 0xff, 0xa3, 0xc3, 0x0c, 0xcd, 0x33, 0x2f, - 0x91, 0x60, 0x24, 0x63, 0x31, 0x56, 0x17, 0x82, 0x3d, 0xfc, 0xe8, 0xcc, - 0xe3, 0x1a, 0xb8, 0x3f, 0xe6, 0x5c, 0xc9, 0x84, 0x55, 0xe8, 0xc9, 0xa1, - 0x76, 0x07, 0x8d, 0x05, 0xae, 0x4d, 0xac, 0x02, 0x3d, 0x3a, 0x2c, 0x09, - 0xae, 0x7c, 0x02, 0xc8, 0x0e, 0x6e, 0x01, 0xb3, 0x39, 0x4a, 0x1b, 0xaf, - 0xcd, 0xd0, 0xd1, 0x60, 0x39, 0x9f, 0x96, 0xd0, 0x53, 0xa5, 0xc2, 0x62, - 0xc0, 0x26, 0x1d, 0xf9, 0x32, 0x97, 0xc8, 0xce, 0xcf, 0xec, 0x80, 0x32, - 0x8a, 0xf9, 0xb9, 0xf2, 0x07, 0x77, 0x48, 0x67, 0x22, 0xbe, 0xfd, 0xa4, - 0xde, 0x3e, 0xb6, 0x84, 0x65, 0xba, 0x92, 0xcf, 0xaa, 0xe0, 0x8b, 0x8c, - 0x4d, 0xd6, 0x9d, 0x8d, 0xea, 0x6c, 0xf2, 0xb6, 0x4a, 0x5b, 0x2e, 0x54, - 0x11, 0x5a, 0x19, 0xd2, 0xc7, 0x85, 0x17, 0xcd, 0x88, 0x8a, 0xee, 0xa1, - 0x02, 0xeb, 0x34, 0x18, 0x48, 0xe1, 0xaf, 0xe7, 0x2e, 0x99, 0x40, 0x15, - 0xc7, 0x92, 0xa6, 0x55, 0x5f, 0x5f, 0x92, 0x79, 0xb0, 0x34, 0xeb, 0xbc, - 0xc6, 0x0a, 0x5e, 0xbe, 0x2c, 0xfe, 0xaf, 0x34, 0x1d, 0x16, 0x85, 0x95, - 0xd3, 0x42, 0xbb, 0xbf, 0xab, 0x4a, 0x66, 0xe1, 0x34, 0x81, 0xfb, 0x14, - 0xba, 0x15, 0x93, 0x4d, 0x11, 0x62, 0xf6, 0x0e, 0xb9, 0xd8, 0x47, 0xd5, - 0x29, 0x97, 0x4c, 0x2d, 0xaf, 0x99, 0xa3, 0xfa, 0xf2, 0xcd, 0xcb, 0x81, - 0xd0, 0x06, 0x2d, 0x87, 0x51, 0x7d, 0xd7, 0xb9, 0xe5, 0x20, 0x60, 0x74, - 0xd8, 0x22, 0xcd, 0xbc, 0x09, 0x61, 0xee, 0x6c, 0xc0, 0x3a, 0xda, 0xb2, - 0x28, 0x71, 0x52, 0xa7, 0x4d, 0x57, 0x01, 0xf8, 0x76, 0x91, 0x78, 0x3a, - 0x36, 0x61, 0xe9, 0xac, 0x9b, 0xe6, 0x91, 0xc5, 0xd5, 0xbe, 0x57, 0xb4, - 0x96, 0x06, 0x8f, 0x8d, 0x1a, 0x13, 0xb9, 0x10, 0xae, 0x3f, 0x93, 0x7e, - 0x6f, 0x64, 0x12, 0x89, 0x8a, 0x5c, 0x76, 0x23, 0xdc, 0x08, 0x10, 0xad, - 0xb8, 0xd9, 0x23, 0x16, 0xeb, 0x9b, 0xcb, 0xcf, 0x23, 0xb1, 0x8e, 0x17, - 0x1b, 0x74, 0x17, 0xa9, 0x51, 0xcd, 0x38, 0x50, 0xab, 0x3f, 0x38, 0xdb, - 0xc5, 0xa9, 0x3b, 0x9d, 0x85, 0x3f, 0xbc, 0x95, 0x95, 0xbd, 0x99, 0x36, - 0x59, 0x01, 0x70, 0x8d, 0x19, 0xea, 0x02, 0xb3, 0x74, 0x7c, 0xe3, 0xea, - 0xd9, 0x3f, 0xd2, 0xec, 0x58, 0x7f, 0xae, 0x5c, 0x5d, 0x56, 0x60, 0x95, - 0x03, 0x60, 0x6b, 0x19, 0xe0, 0x53, 0x41, 0x6d, 0x3e, 0xe4, 0xfe, 0x24, - 0x7e, 0xed, 0x84, 0x08, 0xd0, 0x0e, 0xca, 0x08, 0x1d, 0x48, 0x07, 0x55, - 0x86, 0x28, 0x42, 0x31, 0xbf, 0x43, 0xbf, 0x87, 0x28, 0xeb, 0x5f, 0xd6, - 0x06, 0xa8, 0x87, 0x2f, 0x51, 0xeb, 0x41, 0xc5, 0x7c, 0xa0, 0x71, 0x6d, - 0xb5, 0x0f, 0xaa, 0x6d, 0x43, 0x51, 0x94, 0x44, 0x2b, 0x2a, 0x84, 0x5d, - 0x1f, 0x14, 0xcb, 0xff, 0x4e, 0xfe, 0x4c, 0xfa, 0xe5, 0x21, 0x39, 0x81, - 0xc9, 0x9f, 0x88, 0x63, 0xcd, 0x52, 0x37, 0x93, 0xa5, 0x04, 0xb2, 0x3a, - 0x77, 0xbe, 0xb0, 0x41, 0xff, 0x26, 0x5d, 0x26, 0x6b, 0xcb, 0x3c, 0xe0, - 0xc3, 0x5b, 0x64, 0xaa, 0x28, 0x43, 0x90, 0x4d, 0xff, 0x1a, 0x5c, 0x46, - 0xb5, 0x95, 0xd3, 0xb2, 0x01, 0x75, 0x6f, 0xf5, 0x07, 0x31, 0xee, 0xba, - 0xcc, 0x09, 0xd7, 0x19, 0x4e, 0xe1, 0x8d, 0x00, 0x73, 0xb0, 0xcd, 0xdb, - 0x8d, 0xd0, 0x38, 0x50, 0x49, 0x36, 0xd0, 0xfd, 0x61, 0xd1, 0x63, 0x15, - 0xaa, 0xb5, 0x78, 0x9d, 0xfc, 0xb2, 0x5e, 0xb1, 0x15, 0x2f, 0x9e, 0x54, - 0xd6, 0xaa, 0x08, 0x6d, 0xbc, 0xa9, 0x27, 0xc5, 0xb9, 0x30, 0xcb, 0x34, - 0xd3, 0x29, 0xee, 0x24, 0x77, 0x59, 0x82, 0x7b, 0x4f, 0x15, 0x79, 0x59, - 0x16, 0x32, 0x9b, 0xe7, 0x31, 0x3d, 0xa8, 0x07, 0x32, 0x1f, 0xd2, 0x58, - 0x0a, 0x8b, 0x45, 0x90, 0x17, 0x02, 0xf3, 0x9e, 0x4d, 0x6b, 0x83, 0x5c, - 0xb5, 0x85, 0x0a, 0xbf, 0xd4, 0x20, 0x8f, 0x76, 0x9d, 0x58, 0xf0, 0x2e, - 0xa0, 0x09, 0x04, 0x7a, 0x1e, 0x7c, 0x3a, 0xa6, 0xce, 0x87, 0x43, 0x60, - 0x2d, 0x06, 0xbc, 0x65, 0x74, 0x5b, 0x69, 0x15, 0xdb, 0x98, 0x01, 0x21, - 0x50, 0x88, 0x72, 0x72, 0x1c, 0x80, 0x78, 0xa7, 0x1f, 0xad, 0x7d, 0xd0, - 0x1c, 0x34, 0x8f, 0x9e, 0x0a, 0x6a, 0x4b, 0xa8, 0x23, 0x68, 0x17, 0x78, - 0xaa, 0x84, 0x92, 0xd0, 0xec, 0x2d, 0x02, 0xf7, 0xbb, 0x4f, 0xf9, 0xb0, - 0xe4, 0xaa, 0x50, 0xa8, 0xfd, 0x3f, 0x1f, 0x2a, 0x18, 0xaf, 0x06, 0x88, - 0xda, 0xa9, 0x76, 0x81, 0x42, 0x6a, 0x4f, 0x48, 0x84, 0xab, 0xb3, 0x1d, - 0x6f, 0x5f, 0xfb, 0xe6, 0x17, 0x73, 0xf8, 0xf2, 0x91, 0xff, 0x97, 0x9d, - 0xf8, 0x97, 0x03, 0xd4, 0x9f, 0x4e, 0xac, 0xf3, 0xdf, 0x1f, 0x7f, 0x26, - 0xfe, 0x26, 0xee, 0x01, 0x54, 0x80, 0x2a, 0xab, 0xe5, 0xfa, 0x5d, 0xdf, - 0xfa, 0xae, 0x51, 0xd4, 0xd7, 0xea, 0xb2, 0xb7, 0x89, 0x72, 0x11, 0x7b, - 0xb6, 0x40, 0xa0, 0x2b, 0xc3, 0xc5, 0xb0, 0x2e, 0x17, 0x39, 0x95, 0x1a, - 0x7a, 0xfc, 0x5e, 0x8a, 0x5c, 0x66, 0xd0, 0x80, 0x96, 0x90, 0x24, 0xc8, - 0x72, 0xcc, 0x54, 0x04, 0x39, 0x35, 0xa0, 0x21, 0x71, 0x96, 0x6d, 0x0b, - 0x1e, 0xe7, 0xd2, 0xb1, 0xa1, 0x99, 0xa8, 0x25, 0xe0, 0x5b, 0xbf, 0x16, - 0x84, 0x4b, 0x6c, 0xb9, 0x18, 0xa5, 0x2a, 0x87, 0x40, 0x2e, 0x79, 0x9e, - 0xee, 0x8c, 0x5d, 0x89, 0xbd, 0x67, 0xd7, 0x39, 0xe4, 0xf8, 0xd9, 0xe1, - 0xe1, 0xf0, 0x2d, 0x50, 0xdc, 0xb0, 0x89, 0x51, 0xda, 0x94, 0x6f, 0x98, - 0xda, 0xc3, 0x8c, 0xaa, 0xdc, 0xc0, 0xaf, 0x11, 0x6d, 0xb7, 0xa6, 0x52, - 0x67, 0x32, 0x87, 0x1f, 0xcc, 0x2a, 0x98, 0xcc, 0x54, 0x65, 0xbf, 0xad, - 0xd8, 0x2c, 0x77, 0x12, 0xed, 0x56, 0x58, 0x30, 0x37, 0x8d, 0xda, 0x9b, - 0x65, 0x4e, 0x80, 0x4e, 0x06, 0xfb, 0xe3, 0xc8, 0x0b, 0x32, 0x2f, 0xfd, - 0x2a, 0x04, 0x74, 0xcd, 0x1f, 0xf6, 0x2d, 0xbd, 0xa4, 0x26, 0x30, 0x2b, - 0xce, 0xc5, 0x94, 0x7c, 0x01, 0x79, 0x39, 0x2f, 0x56, 0xd0, 0xd4, 0xd9, - 0x40, 0x47, 0xc5, 0x49, 0x70, 0x30, 0xbd, 0x8b, 0xfd, 0x2a, 0x9c, 0x3d, - 0x86, 0xe8, 0x16, 0x77, 0x37, 0x88, 0xeb, 0xea, 0xf9, 0x39, 0xcd, 0x46, - 0x14, 0x65, 0x90, 0x52, 0x0b, 0xec, 0xf1, 0x15, 0x7f, 0x15, 0xd5, 0xc9, - 0x92, 0x6d, 0xd5, 0xd1, 0xa0, 0x9e, 0xbb, 0xfc, 0xbc, 0xc1, 0xcd, 0x7c, - 0x7d, 0x67, 0x6f, 0xe6, 0x1a, 0x8a, 0x3a, 0xf4, 0x15, 0xe8, 0xdb, 0xf3, - 0xf5, 0xed, 0xaf, 0x69, 0x85, 0x5c, 0x41, 0xb1, 0xab, 0x0e, 0x80, 0x77, - 0xca, 0x1d, 0x1b, 0x6e, 0x1f, 0x2e, 0xe1, 0xc3, 0xa5, 0x7f, 0xb8, 0xf4, - 0x0f, 0x17, 0xde, 0xcb, 0x20, 0x90, 0xa8, 0x38, 0x44, 0x82, 0x1e, 0xc9, - 0x02, 0x2a, 0xf2, 0x83, 0x77, 0x42, 0x09, 0x5a, 0x61, 0x7a, 0x54, 0x87, - 0x6b, 0xfb, 0xad, 0x98, 0x93, 0xfa, 0x2c, 0x45, 0x15, 0xda, 0xb7, 0xc7, - 0xaf, 0x02, 0xaa, 0x99, 0xec, 0xcf, 0xc9, 0x1c, 0x09, 0x37, 0x11, 0xde, - 0xd3, 0xdc, 0xd0, 0xe2, 0x9e, 0x26, 0x85, 0x42, 0xcc, 0xa2, 0x61, 0x87, - 0x27, 0x69, 0x29, 0xde, 0x9f, 0xd9, 0x02, 0x94, 0x1e, 0x19, 0x0c, 0x22, - 0xfb, 0x37, 0x4c, 0x73, 0x23, 0xa1, 0x04, 0x90, 0x08, 0x6d, 0x77, 0xdc, - 0xb0, 0x35, 0xed, 0xfd, 0x59, 0x3c, 0x32, 0xbb, 0x19, 0x48, 0xbc, 0x73, - 0xef, 0xca, 0x99, 0x6f, 0xb9, 0x76, 0x63, 0xda, 0x18, 0xf1, 0xe6, 0x9d, - 0xbd, 0x61, 0xba, 0xcd, 0x1c, 0x83, 0xe2, 0x28, 0x7a, 0x27, 0xe2, 0xd9, - 0xca, 0xde, 0x0a, 0xb2, 0x1d, 0xb5, 0x18, 0xfc, 0x1b, 0x9f, 0xfc, 0xf9, - 0x07, 0xb2, 0x7d, 0x32, 0x7b, 0xe9, 0x12, 0x9d, 0xf6, 0xb4, 0xd7, 0xed, - 0x7e, 0xf4, 0xca, 0xdd, 0x7d, 0xe7, 0x74, 0xa6, 0x7a, 0xa1, 0xd9, 0x80, - 0xa2, 0x67, 0xd5, 0x1e, 0xea, 0x24, 0xc7, 0x65, 0xd2, 0x00, 0xa2, 0x62, - 0x3c, 0x12, 0x56, 0x16, 0x70, 0x5d, 0xbc, 0x8d, 0x72, 0x14, 0xd2, 0xd8, - 0x41, 0xa8, 0xae, 0x01, 0x71, 0x45, 0x65, 0xee, 0x50, 0x5d, 0x59, 0x1a, - 0x0e, 0xef, 0x03, 0xd2, 0x8f, 0xd3, 0x0d, 0x36, 0x10, 0xdd, 0xcd, 0xcd, - 0x7e, 0xa1, 0x45, 0x54, 0x2f, 0x92, 0x23, 0xac, 0x92, 0x49, 0x69, 0x13, - 0xf3, 0xe6, 0x11, 0x94, 0x96, 0x85, 0xbc, 0xb4, 0x0c, 0x56, 0xec, 0x71, - 0xd1, 0xf8, 0xaf, 0xa3, 0x8f, 0x98, 0xcd, 0xc7, 0xd2, 0x69, 0xe4, 0xdf, - 0x7f, 0x02, 0xfc, 0x0d, 0x01, 0xda, 0x34, 0x84, 0x4b, 0x69, 0x16, 0x10, - 0xe5, 0x61, 0x65, 0xe6, 0xb9, 0x7e, 0x87, 0x41, 0xf4, 0x78, 0xcb, 0xa0, - 0xd8, 0xf1, 0x10, 0xf5, 0x7d, 0x6e, 0x26, 0xb3, 0x07, 0x8a, 0x93, 0x29, - 0x80, 0xb5, 0xd5, 0xf3, 0xa6, 0x41, 0xec, 0x3d, 0xe9, 0xf7, 0xea, 0xc5, - 0x64, 0x8b, 0x59, 0x00, 0x2e, 0xb9, 0x00, 0xa8, 0x3a, 0x6c, 0x36, 0x5d, - 0x2a, 0x70, 0xcb, 0x0f, 0x93, 0x64, 0xb5, 0xd3, 0x0c, 0xd5, 0x03, 0x4b, - 0x31, 0x34, 0x40, 0xb1, 0xa7, 0xf7, 0x4d, 0x1a, 0xa5, 0x2b, 0xb4, 0xf5, - 0x53, 0x45, 0x56, 0x9f, 0x6f, 0x53, 0x75, 0x42, 0xa4, 0xfa, 0x7a, 0xaf, - 0xaa, 0xd9, 0x37, 0x6c, 0x0c, 0xd9, 0xb3, 0xca, 0xf2, 0xb3, 0xa4, 0xdf, - 0x7b, 0xe5, 0x35, 0xd4, 0x17, 0xdf, 0x52, 0xa2, 0x5d, 0xc1, 0xf1, 0xf0, - 0xa4, 0x4b, 0x41, 0x4a, 0x05, 0x3f, 0x9b, 0x2e, 0x2e, 0x0b, 0x7a, 0xd6, - 0x30, 0x23, 0xd3, 0x0a, 0xc7, 0xec, 0x31, 0xd3, 0x00, 0xe4, 0xbd, 0x01, - 0xcb, 0x04, 0x85, 0xd5, 0x38, 0x9d, 0x48, 0x6c, 0x2d, 0x7a, 0xab, 0x9d, - 0xe3, 0xe4, 0xfa, 0xd6, 0xbd, 0x2d, 0xae, 0x7d, 0x88, 0x22, 0x5e, 0xf5, - 0x9b, 0xcd, 0x7a, 0x3b, 0xc0, 0xa1, 0x5f, 0xbd, 0x73, 0xe1, 0x4f, 0xd2, - 0x6f, 0x0e, 0xe6, 0x7c, 0x1a, 0xfd, 0xec, 0xf8, 0x6f, 0x7c, 0xe6, 0x51, - 0x5f, 0xc0, 0x65, 0x1e, 0x8a, 0x83, 0x1e, 0xd8, 0x7e, 0x5a, 0xa8, 0xf3, - 0xaa, 0x9d, 0xa3, 0x12, 0xb0, 0xb5, 0x26, 0xde, 0x73, 0xa5, 0xe3, 0xee, - 0x66, 0xee, 0x21, 0xb7, 0x90, 0xce, 0xe0, 0xce, 0xaa, 0x53, 0x74, 0xd7, - 0x0e, 0x88, 0x5b, 0xe2, 0x86, 0x8f, 0xe9, 0xd7, 0x51, 0x9b, 0x92, 0xdd, - 0x0a, 0x36, 0xed, 0x5d, 0x77, 0xbe, 0x6f, 0xb0, 0x87, 0x6d, 0xb6, 0xb0, - 0xe1, 0x28, 0x39, 0x3c, 0xfe, 0xb6, 0xf7, 0x4b, 0xbf, 0xd4, 0x25, 0x33, - 0x20, 0xf8, 0x9d, 0x8c, 0xe4, 0xee, 0xfd, 0x8c, 0xf1, 0xef, 0xae, 0x96, - 0x52, 0xc7, 0xe7, 0xb2, 0x4f, 0x1c, 0x8f, 0x92, 0x2e, 0x62, 0x42, 0x66, - 0x8c, 0x26, 0x02, 0x28, 0x3c, 0x86, 0x31, 0xd8, 0xa6, 0xa5, 0x3a, 0x6a, - 0x4d, 0x72, 0xf2, 0xfe, 0x36, 0xa0, 0x38, 0x4e, 0xa8, 0xc8, 0xa4, 0xa4, - 0x0c, 0xf1, 0x62, 0xee, 0x8a, 0xbb, 0x45, 0xa5, 0xfb, 0x4b, 0x18, 0x08, - 0xdb, 0x19, 0x9a, 0x09, 0x21, 0x97, 0x8b, 0x4b, 0x17, 0x3e, 0x08, 0xa6, - 0xdf, 0x36, 0xb3, 0xa6, 0x5f, 0x25, 0xe5, 0x97, 0x3d, 0x8e, 0x31, 0xe4, - 0xce, 0xe6, 0x05, 0xe6, 0x95, 0x76, 0x90, 0xe5, 0xd7, 0xda, 0x18, 0x37, - 0x75, 0xfb, 0x51, 0xf9, 0x0c, 0xbe, 0x52, 0x47, 0x97, 0xa6, 0x0c, 0xa0, - 0x32, 0x43, 0x3b, 0xd5, 0x0e, 0xcd, 0xd9, 0xe6, 0x6b, 0xeb, 0xf1, 0x59, - 0xef, 0x53, 0x75, 0xc5, 0x5c, 0xd8, 0x7a, 0xcb, 0x4d, 0xad, 0xbc, 0xdc, - 0x42, 0xe3, 0x2e, 0x5c, 0x46, 0xcf, 0x50, 0x9f, 0x84, 0x2d, 0x0f, 0x7e, - 0x05, 0x2c, 0x6d, 0xfd, 0xe9, 0x7c, 0x73, 0x25, 0xb4, 0xfd, 0x31, 0xdb, - 0xda, 0x77, 0x86, 0x99, 0x4a, 0x73, 0xa8, 0x15, 0x9e, 0xa8, 0x3d, 0x11, - 0x5f, 0x65, 0xc8, 0x98, 0x27, 0x50, 0xfb, 0x63, 0x62, 0xab, 0x27, 0xd6, - 0x0e, 0x13, 0xad, 0x77, 0xc0, 0xf9, 0xe1, 0x8f, 0x45, 0xf6, 0x63, 0x7e, - 0x16, 0xd1, 0x4f, 0x88, 0xe6, 0xa7, 0x45, 0x82, 0x90, 0x98, 0x25, 0x4e, - 0xed, 0x85, 0xc1, 0xf5, 0x29, 0x90, 0xaa, 0x7b, 0x5b, 0xea, 0xcf, 0x3b, - 0x7f, 0x7c, 0xda, 0x3c, 0x25, 0x82, 0xcd, 0x93, 0x9b, 0xfa, 0xa3, 0x8c, - 0x9d, 0xcf, 0x8b, 0x7e, 0x27, 0xec, 0x50, 0x00, 0x58, 0x98, 0x8b, 0xda, - 0x7b, 0x05, 0x32, 0x5b, 0x40, 0xc4, 0x41, 0x02, 0x60, 0x57, 0x1c, 0x17, - 0xff, 0xd2, 0xf3, 0x62, 0xb1, 0x72, 0xbf, 0x78, 0xe6, 0x55, 0xd5, 0xfa, - 0x5b, 0xfc, 0x2e, 0x02, 0xb1, 0xaa, 0xfe, 0x7c, 0xae, 0xf6, 0x09, 0x6e, - 0x41, 0xcc, 0x27, 0x84, 0x0b, 0x2d, 0x31, 0x8b, 0xa5, 0xd0, 0xea, 0xf4, - 0x84, 0x04, 0xf7, 0xcc, 0xa6, 0x7d, 0x46, 0xd5, 0x7f, 0x46, 0xa5, 0xfe, - 0xe0, 0xe9, 0x48, 0x9f, 0x88, 0xfa, 0xff, 0x8c, 0xb2, 0xc0, 0x59, 0x56, - 0xb2, 0xd9, 0x30, 0x68, 0x30, 0x0b, 0xbf, 0x9e, 0xc6, 0x83, 0xfb, 0x74, - 0xd5, 0x6d, 0xac, 0x95, 0xe0, 0x21, 0xb4, 0x98, 0xa3, 0xb9, 0xf3, 0x7c, - 0xe5, 0x36, 0xf9, 0x1b, 0x56, 0x89, 0xbd, 0x7c, 0x73, 0x62, 0xd6, 0xc4, - 0xf0, 0xd6, 0x85, 0xf9, 0xfa, 0x8e, 0x6e, 0xea, 0xe1, 0x77, 0x32, 0xc7, - 0x79, 0x10, 0x27, 0x76, 0x87, 0xe5, 0x4a, 0xe1, 0x59, 0x23, 0xac, 0x03, - 0x1b, 0xe5, 0xc7, 0x31, 0x9d, 0x7c, 0x77, 0x42, 0x3c, 0x96, 0x51, 0x96, - 0x3e, 0xa3, 0xec, 0x10, 0xd0, 0xa8, 0x76, 0xe2, 0x05, 0xda, 0xa5, 0xa1, - 0xd9, 0xdf, 0xeb, 0xd4, 0x97, 0x25, 0x62, 0x4e, 0xd2, 0xd5, 0xf9, 0x18, - 0xb1, 0x98, 0x96, 0x7f, 0x92, 0x5d, 0x80, 0x85, 0xa4, 0x5b, 0x4d, 0xd2, - 0xfe, 0xde, 0xe0, 0x65, 0x87, 0x02, 0xf4, 0x0b, 0xd9, 0x69, 0x7c, 0xb2, - 0x46, 0x9a, 0x21, 0x1d, 0x1c, 0x77, 0x0c, 0xf5, 0x08, 0x97, 0xcf, 0x34, - 0x54, 0x2e, 0x61, 0xa6, 0x0e, 0x47, 0x93, 0x7e, 0xa8, 0xc9, 0xc1, 0x49, - 0x26, 0x4c, 0x79, 0x5e, 0xa7, 0xff, 0x84, 0xe6, 0xd0, 0x58, 0xd7, 0x51, - 0xb5, 0xb5, 0x17, 0x53, 0x19, 0x56, 0xba, 0xca, 0x30, 0xd8, 0x08, 0xc1, - 0xd0, 0x5d, 0x6c, 0x57, 0xb7, 0xf8, 0x12, 0xa5, 0x5c, 0xc9, 0x06, 0x70, - 0xb7, 0xd0, 0x0e, 0x5e, 0xe8, 0x88, 0x29, 0x20, 0xe4, 0xce, 0x41, 0xd1, - 0xdd, 0xbd, 0xbb, 0x21, 0x53, 0x62, 0x52, 0x60, 0x52, 0x70, 0x63, 0x40, - 0x1c, 0xc4, 0x80, 0x89, 0x8f, 0x98, 0xed, 0xb7, 0x91, 0x4e, 0x51, 0x95, - 0x42, 0xe1, 0xb9, 0x06, 0xda, 0x4f, 0xb9, 0x49, 0x01, 0x4f, 0xb1, 0xb3, - 0x8d, 0x42, 0xb3, 0x80, 0x85, 0x6a, 0x9f, 0xe8, 0xea, 0x66, 0x74, 0xc1, - 0x59, 0x87, 0xf2, 0x72, 0x6b, 0xa7, 0xb0, 0x82, 0x0c, 0xce, 0x01, 0xdf, - 0x18, 0xf4, 0x72, 0xf3, 0x51, 0xbf, 0x40, 0x81, 0xd2, 0xc6, 0x27, 0x9a, - 0xdf, 0xf8, 0x6d, 0xc3, 0x16, 0x94, 0x5b, 0x12, 0x40, 0x7b, 0x30, 0xcf, - 0x50, 0x6e, 0xd4, 0x74, 0x41, 0xa7, 0x7b, 0x42, 0x08, 0xb4, 0xb4, 0xf3, - 0xf5, 0x42, 0x91, 0xbe, 0xc2, 0x32, 0xc3, 0x3d, 0x1c, 0xb6, 0x49, 0x47, - 0x2a, 0x2b, 0x27, 0x98, 0x75, 0x23, 0xde, 0x0e, 0x0d, 0x29, 0x53, 0x26, - 0x5d, 0x09, 0x77, 0xb7, 0x78, 0xd4, 0xb9, 0x8b, 0xfa, 0x1f, 0x16, 0x1c, - 0xe5, 0x4e, 0x0b, 0x81, 0x75, 0x21, 0x43, 0x0f, 0x8c, 0x2d, 0x50, 0x51, - 0xcc, 0x8c, 0x56, 0x36, 0x0c, 0xdf, 0x60, 0xba, 0x1e, 0xe7, 0x71, 0x7e, - 0x4f, 0xd8, 0x6a, 0x2b, 0x19, 0xff, 0x77, 0xbb, 0x92, 0x59, 0xf2, 0x77, - 0xe6, 0x9c, 0x43, 0xe0, 0x8b, 0x3d, 0x11, 0xe8, 0x36, 0xba, 0xe2, 0x14, - 0x68, 0xbe, 0x33, 0xf3, 0xe7, 0xc4, 0x2f, 0x24, 0x97, 0x99, 0xca, 0xba, - 0x02, 0xaf, 0xd3, 0x1a, 0x3f, 0xc0, 0xbd, 0xd4, 0x2c, 0x78, 0xe8, 0x77, - 0x9a, 0xe5, 0x26, 0x73, 0x8c, 0x97, 0x22, 0xf6, 0x47, 0x9b, 0x5c, 0x6c, - 0xe9, 0xeb, 0xa3, 0x86, 0x2d, 0x0a, 0x15, 0x1f, 0x37, 0x57, 0x7d, 0xdc, - 0x07, 0xa5, 0x25, 0x3e, 0xd0, 0x0f, 0x4d, 0x4a, 0x94, 0xf6, 0xcb, 0xf8, - 0x78, 0x19, 0x91, 0x4e, 0xa3, 0x15, 0xd1, 0xb7, 0x6b, 0x0f, 0xae, 0xa8, - 0x56, 0x1e, 0x23, 0xe1, 0x58, 0x5c, 0xb8, 0xf9, 0x5c, 0x7c, 0xa6, 0x61, - 0x9d, 0xcf, 0xd3, 0x95, 0x0d, 0xa2, 0xba, 0x6c, 0x3a, 0xb8, 0x2c, 0x6a, - 0x23, 0x4e, 0x91, 0x26, 0x66, 0x9f, 0xef, 0x4b, 0x54, 0xcc, 0x2c, 0x42, - 0x62, 0x4b, 0xa5, 0xe9, 0x67, 0x2e, 0x7e, 0xd5, 0xb4, 0x44, 0x3d, 0xcc, - 0x20, 0x6c, 0xe4, 0x70, 0xc8, 0xd1, 0xc2, 0x56, 0x47, 0xdc, 0x00, 0xac, - 0x3f, 0xec, 0xd0, 0x70, 0x44, 0x5e, 0x31, 0x62, 0x57, 0xf7, 0x5f, 0x9b, - 0x6b, 0x60, 0xf4, 0x5d, 0xca, 0x66, 0x80, 0x54, 0x33, 0xb3, 0x89, 0x29, - 0xd2, 0xb2, 0x31, 0x73, 0x61, 0x21, 0xdf, 0xfc, 0x2c, 0x18, 0x4d, 0xd6, - 0xcb, 0xcc, 0x1d, 0x15, 0x3a, 0x2a, 0x53, 0x20, 0x59, 0x61, 0x25, 0xae, - 0x3d, 0x05, 0xcb, 0x4b, 0xc0, 0xb7, 0x39, 0x8f, 0x96, 0xba, 0x3c, 0x0e, - 0x88, 0xc1, 0xa3, 0x8e, 0x72, 0xa9, 0xfb, 0x62, 0xee, 0x60, 0x2f, 0x9b, - 0xb1, 0xef, 0x89, 0xdf, 0xff, 0xbc, 0x38, 0xbe, 0x60, 0xbf, 0x0f, 0xfb, - 0xcc, 0xa1, 0xdf, 0xe4, 0x95, 0x93, 0xd1, 0x59, 0x94, 0x6c, 0xa9, 0xb4, - 0xef, 0xe5, 0x99, 0x5d, 0x52, 0x59, 0x50, 0x9b, 0x1c, 0xc2, 0xc5, 0x81, - 0xc5, 0xc1, 0xfc, 0xfc, 0xcb, 0x68, 0xbe, 0x59, 0x42, 0xac, 0x74, 0x6d, - 0x8a, 0xc1, 0xfd, 0xce, 0x92, 0xec, 0x01, 0x5e, 0xe4, 0x70, 0xcc, 0xc4, - 0x69, 0x54, 0x51, 0x98, 0xb4, 0x98, 0xa3, 0x11, 0x98, 0xba, 0x4a, 0xf5, - 0x46, 0x62, 0x95, 0xe1, 0x72, 0xd3, 0xd1, 0xd2, 0x36, 0x37, 0x35, 0x20, - 0x86, 0xcb, 0x66, 0x50, 0xc3, 0x15, 0xd1, 0x5f, 0x0c, 0xd2, 0xa2, 0xcd, - 0x3f, 0x85, 0xf9, 0xd0, 0xf1, 0x78, 0x75, 0x6d, 0x94, 0xa1, 0xf6, 0x31, - 0x55, 0xe4, 0x0c, 0x2b, 0x9d, 0x87, 0xa1, 0xd6, 0xd7, 0x48, 0x58, 0xc8, - 0x16, 0xf1, 0x5b, 0xc7, 0x04, 0x40, 0x16, 0x2f, 0xcb, 0xc6, 0xb6, 0x3b, - 0x5c, 0x16, 0xa0, 0xba, 0x10, 0x2a, 0x93, 0x8f, 0x27, 0x91, 0x7a, 0x7a, - 0xa4, 0xf5, 0xa2, 0x40, 0x98, 0xff, 0x9e, 0x2c, 0xac, 0xe9, 0x53, 0x35, - 0xa0, 0xe1, 0x6d, 0xd6, 0x4f, 0xed, 0x3f, 0x6f, 0xc4, 0x00, 0xf5, 0xaf, - 0x49, 0x3e, 0x4f, 0xae, 0xba, 0x85, 0x16, 0x43, 0x50, 0x77, 0xa1, 0xb8, - 0x88, 0xed, 0xdd, 0xca, 0xf7, 0x9e, 0xbb, 0xa0, 0xd4, 0x28, 0x11, 0x35, - 0x65, 0x1d, 0xa2, 0x1e, 0x9d, 0x82, 0xbd, 0x9e, 0xab, 0x55, 0x2e, 0x09, - 0x65, 0xe9, 0x7d, 0x39, 0xa5, 0x34, 0x49, 0xd0, 0xae, 0xa0, 0x54, 0xc2, - 0x34, 0xbf, 0x03, 0xd5, 0x9e, 0x62, 0x43, 0x74, 0x25, 0x70, 0x81, 0x2e, - 0x39, 0xdc, 0x2d, 0xf7, 0x6f, 0x17, 0xf1, 0x05, 0x9c, 0xa7, 0x9b, 0x01, - 0xef, 0x23, 0xef, 0xca, 0x1e, 0xd6, 0x98, 0x6f, 0x2a, 0x88, 0x37, 0x6f, - 0x08, 0x71, 0x10, 0xac, 0xb8, 0x2e, 0x60, 0x65, 0x0d, 0xad, 0x12, 0x41, - 0x8d, 0x15, 0x29, 0x5a, 0x44, 0xfb, 0xa0, 0x54, 0x10, 0xb7, 0x81, 0xc0, - 0xe1, 0x89, 0xc5, 0x80, 0x53, 0x7a, 0xc1, 0xf4, 0xbc, 0x6c, 0x6f, 0xab, - 0x96, 0x77, 0xf2, 0x76, 0xf1, 0xee, 0xf7, 0x6c, 0x2a, 0x71, 0x9f, 0xe6, - 0xc9, 0x80, 0x0f, 0x0b, 0x6f, 0xed, 0x5c, 0x01, 0xb4, 0x50, 0x2e, 0xc3, - 0x63, 0xf8, 0xb0, 0x5c, 0xdd, 0x53, 0x4b, 0xc2, 0xdd, 0xb2, 0x56, 0x5d, - 0x2b, 0x11, 0x63, 0x76, 0x1c, 0xd9, 0xd7, 0xbb, 0x54, 0x0f, 0x88, 0xf7, - 0x12, 0xa0, 0x3e, 0xea, 0xaa, 0xb9, 0x00, 0x4d, 0x64, 0xaf, 0x41, 0x85, - 0xc8, 0xad, 0x8d, 0xd4, 0xf1, 0x7b, 0xdd, 0x3c, 0x91, 0x4f, 0x2e, 0x79, - 0x5d, 0x6a, 0x52, 0xae, 0x97, 0xdd, 0x33, 0xc5, 0xa1, 0xf5, 0x6d, 0x6a, - 0x44, 0x1c, 0xb5, 0x50, 0x6f, 0x4a, 0x72, 0x54, 0xd4, 0xf5, 0x85, 0x80, - 0x80, 0xac, 0x7a, 0x39, 0xfc, 0xa3, 0xcb, 0x5b, 0x25, 0xb6, 0xea, 0x77, - 0xb2, 0x54, 0x35, 0x3d, 0x4f, 0xc4, 0xc7, 0x64, 0x4d, 0x1c, 0x02, 0xfb, - 0x56, 0x1f, 0x82, 0x4b, 0xc7, 0x96, 0xf5, 0x55, 0x97, 0x31, 0x0c, 0xd9, - 0x6b, 0x99, 0x1a, 0x7c, 0x81, 0x20, 0x59, 0x67, 0x9e, 0x4b, 0xb2, 0x98, - 0x8a, 0xfb, 0xe0, 0x0a, 0x52, 0xab, 0x4c, 0xca, 0x85, 0xa2, 0x01, 0x88, - 0x3a, 0xde, 0x1a, 0xf9, 0xb5, 0xf9, 0x53, 0xdd, 0xed, 0x51, 0xdb, 0x9a, - 0x62, 0xdd, 0x69, 0xf6, 0x7a, 0xf3, 0x04, 0xef, 0xc9, 0xaa, 0x7c, 0x5f, - 0x27, 0x4b, 0xd5, 0x7e, 0xbc, 0x5b, 0xd1, 0xe2, 0x56, 0x78, 0x0b, 0x5a, - 0x71, 0xd1, 0xe6, 0x9a, 0x28, 0xbb, 0x22, 0x40, 0x62, 0x87, 0xde, 0x36, - 0xee, 0x51, 0x83, 0x6c, 0xca, 0xca, 0x8c, 0x30, 0x45, 0xa2, 0xa4, 0xea, - 0xe2, 0xe7, 0xb0, 0xda, 0x68, 0xf2, 0xa2, 0x7a, 0x66, 0x26, 0xe3, 0x0c, - 0x57, 0x06, 0x57, 0xb2, 0xd7, 0x43, 0xb3, 0x75, 0x3b, 0x71, 0x0e, 0x0f, - 0x87, 0xfe, 0xdc, 0xfb, 0x62, 0xb7, 0xcd, 0x56, 0x89, 0x73, 0xd9, 0x71, - 0xc9, 0xc1, 0xd3, 0x7e, 0x6e, 0x7e, 0x77, 0x8c, 0x84, 0xd5, 0xd2, 0x6b, - 0xb2, 0x9b, 0xd7, 0xc0, 0x99, 0xb7, 0xdf, 0x1c, 0xad, 0xef, 0x6d, 0xab, - 0xf3, 0xc3, 0xcd, 0xab, 0xab, 0x32, 0xda, 0x87, 0x0f, 0x52, 0xb2, 0x22, - 0x23, 0xa0, 0xcd, 0xfb, 0xf2, 0xe4, 0x61, 0x4d, 0x75, 0x6e, 0x72, 0xa4, - 0x6d, 0x1c, 0xd6, 0xcc, 0xf4, 0xf8, 0x42, 0x6f, 0xfd, 0xd4, 0x6e, 0x61, - 0x65, 0x0a, 0xb3, 0xd6, 0x74, 0x90, 0xe6, 0xe7, 0x17, 0xe5, 0x1c, 0x20, - 0xe1, 0xec, 0x47, 0x8c, 0x0d, 0x2b, 0xd7, 0x4f, 0x5e, 0xee, 0xaa, 0x0e, - 0x83, 0xb7, 0x25, 0x52, 0x33, 0xf2, 0x5b, 0x20, 0x53, 0x50, 0x7f, 0x26, - 0x19, 0x4b, 0x04, 0x5a, 0x18, 0xff, 0xca, 0xf6, 0x55, 0x9d, 0x45, 0x8e, - 0x96, 0x6e, 0x45, 0x59, 0xaf, 0xbf, 0xd8, 0x90, 0xad, 0x2e, 0x0c, 0x3e, - 0xf3, 0xac, 0xa7, 0xf8, 0x5d, 0x38, 0x82, 0x16, 0xfc, 0x16, 0xae, 0xad, - 0x43, 0xc5, 0xf6, 0xb7, 0xf8, 0xa5, 0xe5, 0xa6, 0x83, 0x6e, 0x15, 0x15, - 0xa7, 0xda, 0x85, 0x3b, 0x4e, 0xd5, 0x61, 0xf3, 0xa8, 0x4c, 0x29, 0xe7, - 0xcc, 0x76, 0x76, 0x50, 0x16, 0xc6, 0x70, 0xf0, 0x87, 0xcb, 0x62, 0x8e, - 0x64, 0x0b, 0x8e, 0x81, 0xa9, 0x38, 0xc7, 0x9c, 0x44, 0xa5, 0xbb, 0x80, - 0x5f, 0x9c, 0x4a, 0xed, 0xe8, 0x06, 0xee, 0x4c, 0x67, 0x4e, 0xd4, 0x8c, - 0x09, 0x33, 0xb1, 0xb2, 0x88, 0x08, 0xc4, 0x5c, 0xb2, 0x6f, 0x2d, 0x6f, - 0x9d, 0xcf, 0x17, 0x4a, 0xd2, 0x71, 0x85, 0x5a, 0x7f, 0xd8, 0x4a, 0xcb, - 0xd7, 0x31, 0xd1, 0x8f, 0xb3, 0x3e, 0x59, 0xbd, 0x32, 0x6b, 0xef, 0x51, - 0x11, 0x58, 0xe9, 0x94, 0xcd, 0x36, 0x32, 0x2b, 0xb2, 0x9c, 0xf3, 0xc0, - 0x1b, 0xbf, 0x3c, 0xdd, 0x2c, 0x05, 0x2a, 0x10, 0xca, 0x2a, 0xa5, 0x73, - 0x62, 0xf8, 0xa8, 0xab, 0x95, 0x2e, 0x07, 0x8c, 0xf5, 0x7e, 0xf2, 0x11, - 0x4b, 0x8b, 0x82, 0x1d, 0x72, 0xff, 0x9d, 0xf8, 0xb4, 0x49, 0x19, 0x41, - 0x26, 0x71, 0xa3, 0xc3, 0xa1, 0x69, 0x05, 0x8b, 0xc3, 0xee, 0xbc, 0x6a, - 0x23, 0xa5, 0xac, 0x38, 0xfb, 0xc7, 0xaf, 0x45, 0xbf, 0x9a, 0x2f, 0xdb, - 0x0d, 0x1c, 0x1d, 0xb4, 0x56, 0xf8, 0xd6, 0xaf, 0x24, 0x3f, 0x80, 0xfc, - 0x09, 0x57, 0x29, 0xeb, 0xa9, 0xc3, 0x45, 0x82, 0xc0, 0xb4, 0xae, 0xdd, - 0x94, 0x88, 0xe1, 0xe3, 0xdd, 0xe0, 0xdf, 0x18, 0xea, 0xaf, 0x85, 0xea, - 0xde, 0x6a, 0x8e, 0x6b, 0xd0, 0x79, 0xce, 0x21, 0x7d, 0xbb, 0xa4, 0x89, - 0xfa, 0x12, 0x0b, 0xec, 0x2c, 0xf1, 0xb8, 0xc7, 0x51, 0x8f, 0x95, 0x1e, - 0x8b, 0x74, 0x5c, 0x16, 0xf1, 0xb1, 0xdb, 0xf5, 0x94, 0x88, 0x4a, 0xd9, - 0xd8, 0xbc, 0x37, 0x0b, 0xa9, 0xe1, 0x80, 0x4b, 0xcd, 0xed, 0xfb, 0x4a, - 0xf5, 0xe0, 0x26, 0xc3, 0x56, 0x1d, 0xe3, 0x6a, 0xb6, 0xc6, 0xc5, 0x6f, - 0xdf, 0x2a, 0xf8, 0x6d, 0xf1, 0x1d, 0x0f, 0xc0, 0x3e, 0x4f, 0x6d, 0xfd, - 0x1c, 0xab, 0xb4, 0xb6, 0x1e, 0x1a, 0x7a, 0x9d, 0x34, 0xde, 0x1a, 0x30, - 0x84, 0x96, 0x86, 0x5a, 0xb9, 0x89, 0xfc, 0x1b, 0xc8, 0xe2, 0x37, 0xb9, - 0x8c, 0x94, 0xd6, 0x40, 0x11, 0xfc, 0x82, 0xaf, 0x57, 0xb6, 0xcd, 0x95, - 0xb5, 0x55, 0x28, 0xd5, 0x84, 0x00, 0xda, 0x26, 0x52, 0x5b, 0xdb, 0xac, - 0x93, 0x6c, 0x62, 0x24, 0xb6, 0x63, 0x32, 0xa9, 0x22, 0x40, 0xb5, 0xd3, - 0xed, 0xa8, 0x23, 0x85, 0x78, 0xe6, 0x4d, 0xf6, 0x15, 0xe4, 0x86, 0x7c, - 0x1c, 0x16, 0xa1, 0xed, 0x44, 0x11, 0xf5, 0x47, 0xde, 0xcc, 0xb7, 0xe3, - 0x8b, 0xb2, 0x0a, 0x00, 0xc6, 0xaa, 0x6f, 0xa6, 0xce, 0x02, 0x4d, 0x7e, - 0xb2, 0x67, 0xe2, 0xa4, 0x37, 0x1c, 0xca, 0x9b, 0x87, 0x72, 0xe0, 0x7a, - 0x21, 0x2a, 0x9a, 0x5b, 0x0d, 0xe0, 0x68, 0x5e, 0xc7, 0x3e, 0x15, 0x97, - 0x59, 0xa3, 0xd2, 0x56, 0x87, 0xfb, 0x7c, 0x34, 0xa0, 0xb6, 0x23, 0x7c, - 0x5a, 0x9c, 0xdb, 0xf4, 0xb6, 0x0c, 0x6f, 0x3a, 0x80, 0x00, 0xf2, 0x38, - 0xd1, 0x86, 0x51, 0x2b, 0xa0, 0x76, 0xda, 0xc5, 0xd5, 0x3d, 0xaa, 0xfa, - 0xcb, 0xd1, 0x6f, 0xe7, 0x70, 0x86, 0xcb, 0x54, 0x5f, 0xff, 0xf4, 0x4b, - 0x55, 0x04, 0xd2, 0xdc, 0x02, 0xb8, 0xb9, 0xdf, 0xe6, 0xcc, 0xed, 0xde, - 0xc7, 0xd5, 0xdd, 0xc7, 0x55, 0xad, 0x33, 0xea, 0xaf, 0xdd, 0x1d, 0x32, - 0xe8, 0xc7, 0xc5, 0x22, 0xd9, 0xd4, 0x0d, 0xe5, 0xf1, 0x81, 0xf6, 0x37, - 0x41, 0x31, 0xda, 0xae, 0x9e, 0x05, 0x58, 0x51, 0xeb, 0xdb, 0xec, 0x9d, - 0xfa, 0xf6, 0x31, 0x5d, 0xb0, 0x5f, 0xb1, 0x08, 0x5f, 0xcd, 0x8f, 0x15, - 0x07, 0x91, 0x11, 0x70, 0x70, 0x5a, 0xb5, 0xed, 0xc7, 0x05, 0xea, 0xdb, - 0xe1, 0x42, 0x3e, 0x8e, 0xae, 0xa2, 0xb9, 0xc0, 0x7a, 0xa3, 0xe5, 0xea, - 0x90, 0x78, 0x01, 0xc1, 0x6b, 0x12, 0xe0, 0x49, 0x3f, 0xc1, 0xf3, 0x79, - 0x2e, 0x96, 0xb3, 0x4a, 0x2d, 0xb0, 0x9e, 0x28, 0xb1, 0x02, 0xd1, 0x50, - 0xb4, 0x25, 0xc2, 0xf8, 0x4c, 0x8e, 0xd0, 0xc6, 0x65, 0x4a, 0xa9, 0xd7, - 0xdb, 0x90, 0xe2, 0x48, 0xbf, 0x4d, 0x2b, 0x50, 0xa5, 0xa0, 0xff, 0x43, - 0xa5, 0x73, 0xd4, 0x9e, 0x76, 0x3b, 0x35, 0xf9, 0xed, 0x95, 0xa7, 0x7f, - 0xf6, 0xe6, 0xb9, 0x1f, 0x2a, 0x09, 0x0d, 0xed, 0x70, 0x3c, 0x41, 0x19, - 0xc6, 0x90, 0x4d, 0x37, 0xa3, 0xf2, 0xa2, 0xf5, 0x1c, 0x94, 0xa3, 0x40, - 0xa9, 0x81, 0x1b, 0xaa, 0x86, 0x47, 0xe5, 0x17, 0x17, 0x25, 0x65, 0x3e, - 0x2d, 0x77, 0x5a, 0xc5, 0xc2, 0xe5, 0x88, 0x41, 0x50, 0xfb, 0xf3, 0xdd, - 0x9f, 0xb6, 0x6c, 0x44, 0xcb, 0x00, 0x20, 0x61, 0xbc, 0x45, 0xca, 0x17, - 0xed, 0xb3, 0xd1, 0xe7, 0x30, 0x9f, 0xdd, 0x1b, 0xe4, 0x7e, 0x2c, 0xe5, - 0xb0, 0xb2, 0x8e, 0xcd, 0xad, 0x3e, 0xaf, 0xfc, 0xfb, 0x1a, 0xc8, 0xa7, - 0x86, 0x06, 0x35, 0x72, 0xbe, 0x7f, 0x86, 0x31, 0x00, 0x82, 0x67, 0x37, - 0x4b, 0xd1, 0x7e, 0x85, 0xea, 0x36, 0x83, 0x27, 0x94, 0xc2, 0xdb, 0x07, - 0xf6, 0x7c, 0x5f, 0x2c, 0xcc, 0xa9, 0x83, 0x74, 0x47, 0x2d, 0xf9, 0x7d, - 0x60, 0x16, 0xb6, 0x0a, 0xf0, 0xaf, 0x4a, 0xdf, 0x19, 0x95, 0x51, 0x60, - 0x37, 0xbb, 0x74, 0x3d, 0x5f, 0x25, 0x28, 0xf9, 0x32, 0xc9, 0xc8, 0x02, - 0x2b, 0xa2, 0x77, 0x5e, 0xa5, 0x27, 0xb4, 0x6e, 0x01, 0xd8, 0x45, 0x06, - 0x2a, 0xc9, 0x91, 0xf7, 0x98, 0xec, 0x4d, 0x1a, 0xd1, 0xa4, 0xab, 0x36, - 0xd8, 0xd6, 0xc0, 0x15, 0xa0, 0x6b, 0x1e, 0x97, 0xc4, 0x33, 0xa6, 0x0a, - 0x4a, 0xd6, 0xce, 0x84, 0x35, 0x5d, 0x1a, 0x9a, 0x81, 0x38, 0x36, 0x43, - 0x5b, 0x3b, 0x32, 0xeb, 0x31, 0x85, 0x66, 0x63, 0x0e, 0xf3, 0x69, 0x86, - 0xb7, 0x8c, 0xf0, 0x2f, 0x88, 0x60, 0x9e, 0x89, 0xa9, 0x4e, 0x5f, 0xd0, - 0x37, 0x8c, 0x49, 0x79, 0x36, 0xb5, 0xaf, 0xe9, 0xf3, 0x27, 0x77, 0x01, - 0x39, 0x4a, 0x57, 0xa4, 0x44, 0x68, 0xae, 0x80, 0x73, 0xa1, 0xeb, 0xdb, - 0x1f, 0x3e, 0x34, 0xd2, 0x75, 0x0f, 0xb5, 0x4f, 0x28, 0xc1, 0xff, 0x96, - 0xab, 0xa1, 0xb5, 0x36, 0x78, 0xdb, 0xec, 0x22, 0xb2, 0x50, 0xb2, 0x21, - 0x54, 0x3c, 0xe5, 0xf3, 0x64, 0xb9, 0x9f, 0x4d, 0x0e, 0x18, 0xe8, 0xbb, - 0x21, 0x4e, 0x87, 0x07, 0x0e, 0x41, 0xe0, 0xaa, 0x6d, 0x1f, 0x3d, 0x4b, - 0x85, 0x05, 0x5b, 0xa7, 0x2f, 0xba, 0x9a, 0xf8, 0x6a, 0x73, 0xac, 0x0d, - 0x0c, 0x9b, 0x7f, 0x07, 0x36, 0x53, 0x98, 0x41, 0x93, 0xd9, 0x2a, 0x87, - 0x1a, 0x00, 0x5b, 0x80, 0xd7, 0xb5, 0x45, 0x65, 0xbb, 0x93, 0x12, 0x23, - 0x2d, 0x87, 0xaa, 0x8c, 0xb3, 0xf3, 0xc9, 0x04, 0x9e, 0x37, 0xcd, 0x85, - 0x27, 0x86, 0xd7, 0xd3, 0xb6, 0x45, 0xa8, 0xfa, 0x17, 0xbf, 0xc6, 0x3f, - 0xe2, 0x42, 0x1e, 0x6b, 0xef, 0x94, 0x2a, 0x73, 0xb9, 0x4a, 0xf6, 0xb9, - 0xdc, 0xf4, 0x45, 0x80, 0x59, 0xae, 0x5e, 0xea, 0x2a, 0xb1, 0x2a, 0xae, - 0x8d, 0x83, 0x6d, 0xd6, 0x5a, 0xec, 0xb9, 0xad, 0x66, 0x52, 0x02, 0xd0, - 0xf6, 0x19, 0xcf, 0x7d, 0xb7, 0x2d, 0xec, 0xd3, 0x46, 0x54, 0xb8, 0xfc, - 0x88, 0x72, 0x03, 0x2d, 0x50, 0x88, 0xee, 0x87, 0x5f, 0xfe, 0xd1, 0x77, - 0x7e, 0xfc, 0x57, 0xe2, 0xe4, 0x40, 0xed, 0xec, 0x12, 0x84, 0xd7, 0xdb, - 0x4f, 0xd4, 0x83, 0x5f, 0x7e, 0x7e, 0x70, 0x9e, 0xc5, 0xa1, 0xf6, 0x8d, - 0x3d, 0x4c, 0xa4, 0xfc, 0xef, 0xef, 0xc4, 0xb4, 0x36, 0x11, 0xd6, 0xef, - 0xd4, 0x2e, 0x08, 0x83, 0x20, 0xe0, 0x75, 0x21, 0xfd, 0x85, 0x73, 0x91, - 0xff, 0xfd, 0xb3, 0xd6, 0xaf, 0x6d, 0x13, 0xb6, 0xf9, 0x30, 0x2e, 0xc3, - 0xf8, 0x2b, 0x51, 0x96, 0xb5, 0x28, 0xa0, 0x9d, 0x4e, 0x37, 0xd0, 0xe8, - 0x84, 0xbe, 0x2c, 0x2a, 0x35, 0xb0, 0x39, 0x3a, 0x9f, 0x86, 0x7c, 0xf2, - 0xe5, 0xdd, 0x87, 0x6d, 0x4a, 0x50, 0x80, 0x7b, 0xc8, 0x6c, 0x50, 0xa5, - 0x6e, 0xb9, 0x45, 0x9b, 0xbe, 0x68, 0x9c, 0xbd, 0x82, 0xd9, 0x07, 0x1e, - 0xc3, 0x85, 0xaf, 0x27, 0xcc, 0x07, 0x1b, 0x3f, 0x05, 0x25, 0xf0, 0xab, - 0x21, 0xcd, 0x47, 0x15, 0x61, 0x04, 0xb1, 0x90, 0x75, 0xac, 0xc7, 0xd6, - 0x22, 0x90, 0xfb, 0x94, 0x66, 0x8e, 0x41, 0x94, 0xc6, 0xa4, 0xca, 0x75, - 0x98, 0x5a, 0x05, 0x4b, 0xc4, 0xa8, 0x65, 0xc1, 0x69, 0x7b, 0xef, 0xee, - 0x47, 0x45, 0x06, 0x83, 0xef, 0xce, 0x94, 0x3f, 0xe8, 0xf1, 0x38, 0xf1, - 0x9b, 0x79, 0xed, 0x83, 0xae, 0x2c, 0xd1, 0x6c, 0xda, 0xb2, 0xa2, 0x43, - 0x1d, 0xe6, 0xd9, 0x3f, 0xf2, 0xef, 0xc2, 0xc4, 0xaa, 0x23, 0xc1, 0x04, - 0x2e, 0xf6, 0xa3, 0x66, 0x15, 0x1a, 0x63, 0xd4, 0xf3, 0x85, 0x93, 0xe4, - 0x66, 0x62, 0x5d, 0x1b, 0x85, 0x31, 0x64, 0x34, 0x16, 0x0a, 0x56, 0x6e, - 0x0f, 0x0f, 0xf6, 0xad, 0xdf, 0xc6, 0xc2, 0x83, 0xd0, 0x84, 0xb2, 0x4d, - 0x2c, 0x75, 0x25, 0x63, 0x4f, 0x75, 0x15, 0xff, 0xcc, 0xaa, 0x28, 0x26, - 0xdf, 0xc2, 0x98, 0x9c, 0x24, 0x15, 0xdb, 0x5f, 0x39, 0x92, 0x00, 0x52, - 0x0a, 0x67, 0xa3, 0x25, 0x21, 0x86, 0x62, 0x26, 0x5f, 0xae, 0xbb, 0x7f, - 0x9b, 0x7e, 0x16, 0xfd, 0xea, 0xe9, 0xaf, 0xda, 0xcd, 0x5b, 0xd4, 0x3b, - 0x34, 0x62, 0x52, 0xbd, 0xe9, 0x6e, 0x69, 0xba, 0xa0, 0xaf, 0x29, 0x96, - 0x34, 0x5d, 0x71, 0x7f, 0x34, 0x52, 0x16, 0xe8, 0x0a, 0x86, 0xa0, 0xb8, - 0x42, 0x45, 0xf3, 0xc0, 0x81, 0xb3, 0xe9, 0x00, 0x95, 0x0f, 0xfa, 0xbb, - 0xa3, 0x10, 0x09, 0x8e, 0x3c, 0xe3, 0x9b, 0xe7, 0x1e, 0x28, 0x8e, 0xa2, - 0x04, 0x3d, 0x26, 0x13, 0x49, 0x04, 0xfc, 0x5e, 0xca, 0x0f, 0xc5, 0x13, - 0xfa, 0x53, 0xf7, 0xea, 0x3e, 0x2d, 0x2f, 0xd7, 0xff, 0x9d, 0x13, 0x25, - 0xaf, 0xfd, 0xdb, 0x52, 0x88, 0xd8, 0x3e, 0x66, 0xa4, 0x73, 0x69, 0xe6, - 0x75, 0x90, 0x87, 0x06, 0xd1, 0x43, 0x8e, 0x81, 0xfc, 0x76, 0x3d, 0x84, - 0x52, 0x60, 0x87, 0x38, 0x19, 0x5c, 0x8f, 0x9e, 0x93, 0xdb, 0x2d, 0x07, - 0xbc, 0xf9, 0xbb, 0xb7, 0x54, 0xd3, 0x74, 0x7d, 0x77, 0x7c, 0xf4, 0x78, - 0x6f, 0x90, 0x33, 0xf3, 0xb4, 0xde, 0x78, 0x6f, 0xbb, 0x65, 0xea, 0xf6, - 0xef, 0x59, 0x99, 0x89, 0x46, 0x3d, 0x21, 0x45, 0xd4, 0x14, 0x4e, 0x0e, - 0x3e, 0x65, 0x73, 0x8f, 0x2d, 0x35, 0x68, 0x6c, 0x29, 0x09, 0x9e, 0x23, - 0x3a, 0x55, 0xd6, 0x80, 0xe3, 0xf7, 0xea, 0x30, 0x2c, 0x13, 0x2d, 0x20, - 0xa8, 0x22, 0x6f, 0xef, 0x85, 0xee, 0x1e, 0x16, 0xff, 0x2b, 0x7b, 0xa2, - 0x5f, 0xe5, 0xda, 0x72, 0x07, 0x6c, 0x45, 0x03, 0xf6, 0xc6, 0xd2, 0x15, - 0x18, 0xbf, 0x4a, 0x7d, 0x35, 0x3d, 0xd4, 0x24, 0xf2, 0x6d, 0x7a, 0xe5, - 0xc3, 0x89, 0x39, 0xfb, 0xfb, 0x46, 0x84, 0x80, 0xdb, 0x33, 0x92, 0x75, - 0x26, 0xec, 0x14, 0x6d, 0xbd, 0x19, 0x71, 0xc7, 0xdd, 0xf9, 0x1e, 0xb2, - 0x92, 0xa9, 0x17, 0x85, 0x51, 0xa1, 0x66, 0xef, 0x39, 0xd4, 0x20, 0x6c, - 0xba, 0xb4, 0x1c, 0xdf, 0xb7, 0xbe, 0xe9, 0x52, 0xc9, 0xf9, 0x9e, 0xa8, - 0xba, 0x1e, 0xb0, 0xf2, 0x98, 0xfd, 0xa5, 0x99, 0x82, 0x1c, 0x16, 0x68, - 0x2e, 0xbd, 0xca, 0x70, 0xe5, 0x24, 0x3c, 0x39, 0xf7, 0xfe, 0x86, 0xca, - 0x0b, 0x33, 0x62, 0x8f, 0xe7, 0x59, 0x3f, 0x31, 0x85, 0x3c, 0x3e, 0x2f, - 0x39, 0xe0, 0x59, 0xd1, 0xa0, 0xcb, 0x49, 0x5b, 0x5e, 0x25, 0x16, 0x1a, - 0xdc, 0xe5, 0xd6, 0x08, 0xa8, 0xa5, 0x4e, 0x96, 0xd7, 0x9e, 0x7e, 0xa3, - 0x2d, 0x28, 0x06, 0x10, 0x6f, 0xc1, 0x2b, 0x6c, 0x26, 0xb5, 0x94, 0x51, - 0x3b, 0x7e, 0xea, 0x8d, 0x62, 0x0d, 0x02, 0x28, 0x24, 0x31, 0x9f, 0xb6, - 0x58, 0xd7, 0xfa, 0xf3, 0x70, 0x33, 0x0e, 0xa2, 0xcb, 0x25, 0x86, 0xde, - 0xca, 0xcb, 0x3a, 0xd3, 0xea, 0x82, 0x71, 0x15, 0x6f, 0x18, 0x28, 0x7b, - 0xda, 0x36, 0xd8, 0x0a, 0x6e, 0xd4, 0x5e, 0x53, 0x09, 0x89, 0xcf, 0xee, - 0x51, 0x1b, 0xde, 0xc5, 0x0a, 0x09, 0xcb, 0xa0, 0x9e, 0xb8, 0x1d, 0x72, - 0x55, 0x9e, 0xf2, 0xe3, 0x88, 0x83, 0xc6, 0xab, 0x96, 0x36, 0x3f, 0x7c, - 0xa9, 0xe3, 0xed, 0x76, 0xae, 0x87, 0x5a, 0x25, 0xd4, 0x74, 0x4d, 0x7d, - 0xe9, 0x5e, 0x3d, 0xd2, 0x9c, 0xd3, 0x57, 0x43, 0x2f, 0x95, 0xd0, 0x85, - 0xb7, 0xd8, 0xe4, 0x92, 0xcd, 0x23, 0x84, 0xc9, 0x1f, 0xff, 0x36, 0xc8, - 0x2f, 0x9c, 0x21, 0xf9, 0xd3, 0x3a, 0xdd, 0xf9, 0x17, 0x93, 0x2f, 0x4b, - 0x2b, 0xce, 0x8a, 0x07, 0x07, 0x32, 0x93, 0x72, 0x5f, 0x59, 0x09, 0xce, - 0x4f, 0x15, 0x6c, 0x5b, 0xd1, 0xa5, 0x33, 0x10, 0x6f, 0xef, 0x6e, 0x97, - 0x53, 0xe2, 0x57, 0x95, 0xe3, 0x9f, 0xe6, 0x6b, 0x18, 0x2b, 0xaf, 0xb5, - 0xc2, 0xa7, 0xca, 0xd7, 0x0b, 0x2f, 0xc1, 0x52, 0x11, 0xe9, 0x5b, 0xed, - 0x3d, 0xca, 0xa5, 0x11, 0xde, 0x5a, 0x2b, 0xb9, 0xd8, 0x67, 0xae, 0x13, - 0xe6, 0x7b, 0xad, 0x4e, 0x48, 0xf5, 0xa1, 0x0c, 0x4a, 0x5c, 0x43, 0xc1, - 0x5c, 0xa7, 0xb3, 0xc5, 0x0d, 0xa5, 0x80, 0x2a, 0x65, 0xc1, 0x77, 0x83, - 0x8a, 0xa6, 0xf2, 0x05, 0x97, 0x6d, 0x1a, 0x88, 0xfe, 0xee, 0x42, 0x8d, - 0x93, 0x44, 0x36, 0x06, 0x08, 0xd9, 0x9c, 0x9f, 0x64, 0x36, 0xa0, 0xab, - 0x2a, 0x70, 0x14, 0x9f, 0x97, 0xcd, 0x3e, 0x89, 0xb5, 0xd1, 0xe2, 0xf8, - 0x08, 0xfa, 0x5a, 0xe1, 0xd1, 0x7a, 0x76, 0xe5, 0x9d, 0x9e, 0xb8, 0x24, - 0xd3, 0xa2, 0x78, 0xe4, 0xf9, 0xe6, 0xc5, 0x7b, 0x7d, 0x14, 0x1b, 0xae, - 0xae, 0x75, 0x46, 0xd5, 0xa7, 0x5d, 0x56, 0x65, 0x23, 0x43, 0xe4, 0x4f, - 0x79, 0x4f, 0xe2, 0xfa, 0xee, 0x44, 0x1f, 0xab, 0x1b, 0xdf, 0xb4, 0x04, - 0xca, 0x52, 0x0f, 0x22, 0x77, 0xff, 0x58, 0xa6, 0x79, 0x1b, 0xea, 0x33, - 0x9b, 0xef, 0x1e, 0xe2, 0xdd, 0x79, 0x28, 0xe0, 0x48, 0x5c, 0x0d, 0x09, - 0x7f, 0x27, 0x7e, 0x16, 0x06, 0xf6, 0xfe, 0x3a, 0x3d, 0x4f, 0xf9, 0xe9, - 0xd5, 0x00, 0xac, 0xc6, 0x0c, 0x09, 0xfa, 0x7d, 0x2c, 0xaa, 0x39, 0x49, - 0xca, 0x1c, 0x50, 0x02, 0xf5, 0x40, 0x65, 0xf7, 0x06, 0x53, 0xae, 0x43, - 0x53, 0x28, 0x57, 0x2f, 0x9d, 0x12, 0x47, 0x48, 0x28, 0x2b, 0xcc, 0x9d, - 0xd0, 0x0a, 0x8d, 0x68, 0xc1, 0x85, 0x70, 0x6f, 0x32, 0x38, 0x11, 0x5d, - 0xfb, 0x8e, 0x86, 0x7c, 0xfa, 0xb0, 0x6f, 0x94, 0x15, 0x1e, 0x88, 0x7b, - 0x7b, 0xaf, 0x8d, 0x92, 0xb8, 0x79, 0xbc, 0x35, 0x10, 0x52, 0x20, 0xfb, - 0xd8, 0x8e, 0xc2, 0x83, 0xe7, 0x65, 0x3a, 0x3a, 0xf2, 0x52, 0x29, 0x10, - 0xdf, 0x1a, 0x42, 0xd5, 0x69, 0xb5, 0x53, 0x4f, 0xb1, 0x71, 0x84, 0xa9, - 0xbd, 0x02, 0x56, 0xf7, 0x1a, 0x5f, 0x6a, 0x06, 0xc3, 0x45, 0xc1, 0xaa, - 0x4d, 0x7c, 0x9a, 0xe7, 0x0f, 0xd2, 0xcb, 0x05, 0x57, 0xf8, 0x42, 0x1b, - 0x12, 0x1d, 0x42, 0xf6, 0xb9, 0x43, 0xd4, 0xf8, 0xd1, 0x61, 0xa8, 0x0d, - 0x1e, 0xaf, 0x21, 0xc6, 0x30, 0xc1, 0x81, 0x3c, 0xe7, 0x40, 0x55, 0xae, - 0x3f, 0xb5, 0x3e, 0xc1, 0x6d, 0xfd, 0xb9, 0x67, 0x73, 0xe1, 0xc1, 0x66, - 0xf8, 0xe2, 0x12, 0xe6, 0x01, 0x52, 0x5b, 0x84, 0xc3, 0x8b, 0x5b, 0x3b, - 0x49, 0x36, 0x8f, 0x90, 0x86, 0xe5, 0x1a, 0xab, 0x71, 0x91, 0xa2, 0x21, - 0xcf, 0x65, 0x5d, 0xcf, 0x3d, 0x63, 0x7d, 0xc0, 0x5a, 0xd4, 0x3e, 0xd0, - 0x39, 0x12, 0xe7, 0xf5, 0x83, 0xf2, 0x46, 0xb1, 0x7c, 0xa5, 0x18, 0xeb, - 0xd7, 0x90, 0x80, 0xaf, 0x7c, 0x1f, 0x9a, 0x46, 0xd8, 0xbd, 0x32, 0x32, - 0x70, 0x13, 0xa0, 0x71, 0x33, 0xcc, 0x9b, 0xea, 0xf2, 0x15, 0x53, 0x7f, - 0x4f, 0xa1, 0xb9, 0x40, 0xa9, 0xd0, 0x11, 0xfb, 0x33, 0x6d, 0xb7, 0x38, - 0xfa, 0x1b, 0xfc, 0xff, 0xbc, 0x0d, 0x2c, 0x4b, 0x6c, 0xfa, 0x4b, 0x65, - 0xe4, 0x77, 0x4f, 0xc7, 0x9e, 0xae, 0x43, 0x32, 0xf7, 0x9e, 0xc4, 0x1d, - 0x3b, 0x3e, 0xc3, 0x33, 0x1c, 0x3d, 0x0d, 0x1e, 0x7e, 0xe3, 0xad, 0x53, - 0xbd, 0x74, 0x60, 0x3b, 0xe0, 0x0c, 0xb1, 0x1d, 0xdb, 0x50, 0x92, 0xfb, - 0x39, 0x1f, 0xd3, 0x07, 0xdd, 0xdf, 0x3d, 0x9f, 0x29, 0xe0, 0xd8, 0x24, - 0x8e, 0xca, 0xd7, 0x0d, 0xd9, 0x87, 0x47, 0xed, 0x9e, 0x4b, 0xea, 0xc5, - 0xa7, 0x1d, 0x95, 0x25, 0x50, 0xa1, 0xe4, 0x8f, 0x9e, 0x79, 0xdb, 0x41, - 0x34, 0x9c, 0x2f, 0x67, 0x7c, 0x6b, 0xcb, 0xaf, 0xde, 0x33, 0x16, 0x69, - 0xe6, 0x75, 0x08, 0x9d, 0xce, 0xfe, 0xb1, 0xd7, 0xf0, 0x31, 0x3c, 0x99, - 0x3e, 0xe8, 0x48, 0xbd, 0x43, 0x9c, 0xaf, 0x1c, 0x0a, 0xa4, 0xb4, 0x1e, - 0xbb, 0x5a, 0xcc, 0x5b, 0x89, 0xad, 0xb4, 0x6f, 0xc6, 0x35, 0xaa, 0xb7, - 0x7e, 0x70, 0x33, 0x3c, 0x0a, 0x6b, 0x91, 0x63, 0xd3, 0xde, 0x8b, 0x73, - 0x03, 0x2f, 0x12, 0x5e, 0xad, 0x54, 0x7f, 0xf5, 0x5c, 0x68, 0x8a, 0xbb, - 0x41, 0x1f, 0xf3, 0xa8, 0x55, 0xcd, 0xde, 0xd9, 0x2a, 0x17, 0x72, 0x34, - 0xff, 0xa4, 0xe1, 0x6a, 0xcb, 0x6d, 0x5d, 0x0c, 0x33, 0x8e, 0x75, 0x52, - 0xef, 0x2f, 0x74, 0xae, 0xf5, 0xda, 0x5d, 0x72, 0xb3, 0xa7, 0x85, 0xdf, - 0x76, 0x8b, 0xef, 0xdc, 0x74, 0xd5, 0xa6, 0xc2, 0x77, 0x9d, 0x0e, 0xb8, - 0x00, 0xd6, 0x17, 0xea, 0x32, 0x67, 0xd2, 0xb0, 0x5c, 0x51, 0x2f, 0x8a, - 0xca, 0x1c, 0x7d, 0x7b, 0xf2, 0x6b, 0x6b, 0x9c, 0xcc, 0x6d, 0x4f, 0x6d, - 0x55, 0x0e, 0xa4, 0x4f, 0xf0, 0xd2, 0x00, 0x1d, 0x13, 0x61, 0x26, 0x96, - 0xa8, 0x3e, 0xb6, 0x41, 0x27, 0x2b, 0x79, 0x20, 0x63, 0x59, 0x6e, 0x89, - 0x47, 0xf9, 0x00, 0x17, 0x5b, 0x0f, 0x08, 0x59, 0xc0, 0x8b, 0x16, 0x0c, - 0x15, 0xf8, 0x37, 0x92, 0x1b, 0x30, 0x12, 0x6e, 0xe5, 0x7d, 0x23, 0x8f, - 0xd0, 0x02, 0xb5, 0x39, 0xf5, 0x86, 0x29, 0xb2, 0xf7, 0x2e, 0x90, 0x61, - 0x92, 0xb8, 0xd1, 0x48, 0x64, 0xa0, 0x7a, 0xd7, 0xb9, 0xa5, 0xaf, 0x89, - 0xfb, 0x59, 0x84, 0x69, 0x6a, 0xe8, 0xda, 0x90, 0x35, 0x02, 0xc2, 0xdd, - 0x61, 0x1b, 0xe6, 0x6f, 0xe4, 0x21, 0x9d, 0xa3, 0x02, 0xd5, 0x27, 0xd4, - 0x5b, 0x82, 0x70, 0x85, 0xf7, 0xe9, 0x4a, 0xd1, 0xc4, 0x24, 0xd0, 0x6c, - 0x85, 0x98, 0xb8, 0xf2, 0x48, 0x01, 0xb7, 0x57, 0xa1, 0x54, 0x74, 0x1b, - 0xe8, 0x25, 0x8d, 0x24, 0x34, 0x48, 0x78, 0xd4, 0x33, 0x8a, 0xcb, 0xf1, - 0x3c, 0x19, 0x38, 0x7b, 0xf9, 0x3c, 0xfd, 0x60, 0x4c, 0xc4, 0x12, 0x97, - 0x9e, 0xb7, 0x24, 0xc3, 0xfa, 0x96, 0x0e, 0x33, 0xfd, 0xe7, 0x54, 0x9f, - 0xe0, 0x6e, 0x89, 0x9b, 0xde, 0x01, 0x16, 0xff, 0x26, 0x1a, 0x5c, 0x8e, - 0x11, 0x86, 0x49, 0x0c, 0x54, 0x68, 0xce, 0x75, 0x18, 0x1c, 0xa8, 0xfd, - 0x6a, 0xa3, 0x09, 0x20, 0xf6, 0xc2, 0xfb, 0x13, 0x53, 0xf0, 0xee, 0xb8, - 0x3f, 0xb0, 0xde, 0x69, 0x1f, 0xc7, 0x61, 0x81, 0x5d, 0xd7, 0x1b, 0x48, - 0x6f, 0xba, 0xf2, 0x09, 0xaf, 0x63, 0x2c, 0x8d, 0xe4, 0x16, 0x1b, 0x44, - 0x5c, 0x84, 0x80, 0xca, 0x8b, 0xa7, 0xe1, 0x48, 0x31, 0x58, 0x1f, 0xa8, - 0x6e, 0x54, 0xb7, 0x3e, 0x7c, 0x42, 0x1e, 0xfe, 0xe2, 0x2b, 0xcd, 0x65, - 0xed, 0x71, 0xbe, 0x4a, 0x0b, 0x98, 0xa7, 0xbb, 0xc9, 0x7e, 0x6d, 0xb2, - 0x64, 0xda, 0x58, 0x2c, 0x52, 0x73, 0x63, 0x0c, 0x40, 0xb6, 0x18, 0x62, - 0x6b, 0xae, 0xa3, 0xde, 0xf8, 0x56, 0x7c, 0x12, 0x38, 0x8b, 0x5b, 0xf6, - 0xb9, 0xf6, 0x96, 0x93, 0x45, 0x53, 0x57, 0xe1, 0x18, 0x5c, 0xec, 0xcd, - 0x30, 0x33, 0xde, 0xf2, 0xf7, 0xe4, 0xdf, 0x0a, 0x8c, 0xde, 0x2d, 0x73, - 0x8f, 0xa2, 0x17, 0x0f, 0xe8, 0x5e, 0x92, 0x76, 0x39, 0x1f, 0x68, 0x9d, - 0xcb, 0x73, 0x0a, 0xd0, 0xaa, 0x2a, 0x6f, 0x31, 0xb2, 0x2d, 0xf5, 0x24, - 0xed, 0xc3, 0x62, 0x1d, 0xf4, 0xb8, 0x50, 0x85, 0xcf, 0xee, 0xad, 0x21, - 0xef, 0x91, 0x7f, 0x01, 0xf9, 0x98, 0x36, 0x1b, 0xdc, 0x2a, 0xd1, 0xd9, - 0x60, 0x50, 0x9a, 0xb2, 0x46, 0x2a, 0xbe, 0x5a, 0x07, 0xea, 0x80, 0x71, - 0x6e, 0x3a, 0x3e, 0xdd, 0xf6, 0x1e, 0xd5, 0x2b, 0x6d, 0x3d, 0x09, 0xa5, - 0x75, 0xb9, 0x8c, 0x86, 0x3b, 0x34, 0x80, 0xee, 0xd3, 0x32, 0xd8, 0xcc, - 0x90, 0x91, 0xaa, 0x8c, 0xc7, 0xd5, 0xe3, 0xbd, 0x9f, 0x79, 0xef, 0x78, - 0xf7, 0x6f, 0xcb, 0x7e, 0x29, 0x21, 0xb6, 0x7f, 0xb4, 0x1c, 0xad, 0x84, - 0xa9, 0x7b, 0x23, 0x36, 0x83, 0xfd, 0x1d, 0xf7, 0x27, 0x7d, 0xaa, 0x04, - 0xd5, 0x6f, 0x11, 0x3b, 0xed, 0x49, 0xc7, 0xc9, 0xea, 0xdc, 0x71, 0x67, - 0x03, 0x45, 0xe7, 0x90, 0xa7, 0xf5, 0x3c, 0xa6, 0x1e, 0xc5, 0x79, 0x4c, - 0xe3, 0x33, 0x4f, 0x6d, 0x98, 0x20, 0xa1, 0x73, 0x12, 0x73, 0xc8, 0xd7, - 0x74, 0x8d, 0x5e, 0x65, 0x0e, 0xad, 0x06, 0xdb, 0xcc, 0x91, 0xda, 0xfa, - 0xf7, 0x07, 0x36, 0xa2, 0xd1, 0xad, 0x48, 0xa1, 0x4e, 0xe6, 0x68, 0xb8, - 0x97, 0x1c, 0x4d, 0x55, 0xf8, 0x08, 0x96, 0x5f, 0xb1, 0x24, 0x5e, 0xb9, - 0x15, 0xde, 0xcb, 0x2c, 0xb2, 0x09, 0x87, 0x20, 0x90, 0x53, 0x08, 0xb0, - 0x15, 0xdb, 0x42, 0x41, 0x63, 0xc2, 0x42, 0x4b, 0xcc, 0x96, 0xe3, 0x82, - 0x8a, 0xf6, 0xcf, 0x95, 0xa1, 0x1d, 0x94, 0xd8, 0x06, 0x4a, 0x7c, 0xb0, - 0xb8, 0x27, 0x38, 0xd5, 0xe6, 0x7b, 0x5e, 0x8e, 0x06, 0x2c, 0x9d, 0xdb, - 0xf4, 0x75, 0x18, 0xf8, 0x71, 0x2f, 0x1e, 0x61, 0x01, 0xf8, 0xbe, 0x36, - 0xa0, 0x4f, 0x98, 0xe7, 0xb0, 0xee, 0xb8, 0x9d, 0xfb, 0x37, 0xdd, 0xf7, - 0x62, 0x37, 0x48, 0xc1, 0x73, 0xb4, 0x4f, 0x76, 0x5e, 0x04, 0xd3, 0x62, - 0x7b, 0x2b, 0x7d, 0xf9, 0x14, 0x58, 0x11, 0x05, 0x14, 0xb6, 0x14, 0xce, - 0x11, 0x60, 0x7e, 0xf8, 0x1e, 0xd6, 0x83, 0x22, 0xfb, 0x68, 0x95, 0xe6, - 0xa1, 0x3b, 0x38, 0x69, 0x1f, 0x82, 0x51, 0x38, 0x18, 0xbd, 0xf2, 0xa7, - 0x75, 0x79, 0xb7, 0xc1, 0x74, 0xa3, 0x17, 0x74, 0xf5, 0x28, 0x6e, 0x87, - 0x19, 0x14, 0x37, 0xfe, 0xe1, 0x2e, 0x3e, 0x2d, 0xd5, 0x19, 0xac, 0xbf, - 0x4d, 0xcb, 0x41, 0x06, 0xe7, 0xf2, 0x4e, 0x29, 0xe0, 0xe0, 0xdf, 0xe3, - 0x5b, 0xc3, 0xbb, 0x9e, 0xa6, 0xa5, 0x37, 0xd0, 0xfa, 0x91, 0x3e, 0x82, - 0x54, 0xa2, 0xd8, 0x89, 0x9e, 0x11, 0x71, 0x84, 0xc0, 0x4c, 0x39, 0xbd, - 0x3c, 0x8a, 0x5a, 0x97, 0x7b, 0x7c, 0x04, 0xd2, 0x1e, 0xb9, 0xfb, 0x15, - 0x1b, 0x54, 0x5a, 0xfe, 0x0d, 0xc9, 0x5a, 0x60, 0xe7, 0x38, 0x3c, 0x23, - 0x7b, 0xd5, 0xdf, 0x34, 0x32, 0x3e, 0xef, 0x5b, 0x6e, 0x69, 0x81, 0xf1, - 0xfa, 0x4e, 0x41, 0x24, 0x2a, 0x50, 0xda, 0x8e, 0xf3, 0x98, 0x8e, 0x71, - 0x77, 0x2e, 0x51, 0xf0, 0x36, 0x4f, 0x9a, 0x2c, 0xb9, 0x82, 0xf4, 0x52, - 0xd6, 0xf5, 0x48, 0x00, 0xac, 0x20, 0x7a, 0x85, 0x2d, 0xc3, 0x84, 0x96, - 0xa0, 0x14, 0xf8, 0x69, 0x2d, 0xeb, 0x7f, 0xe7, 0x14, 0x37, 0x34, 0xa0, - 0xb0, 0xbf, 0x07, 0x6c, 0x5b, 0x96, 0x29, 0xcc, 0x03, 0x29, 0x0c, 0x17, - 0x95, 0x03, 0x98, 0x56, 0x7d, 0x7b, 0xdf, 0x35, 0x42, 0x41, 0x00, 0x9c, - 0x47, 0xc0, 0x22, 0x28, 0x0a, 0x90, 0x02, 0xf6, 0x37, 0xb1, 0x67, 0xec, - 0xb1, 0xbf, 0xa6, 0x35, 0x6c, 0x31, 0x38, 0x69, 0xd5, 0xe4, 0x16, 0x67, - 0x00, 0xfb, 0x1e, 0x47, 0x9d, 0x94, 0x35, 0x26, 0xd9, 0xc6, 0x5a, 0xfa, - 0x0d, 0x0d, 0xe2, 0x77, 0x1a, 0x5a, 0x33, 0x49, 0x2b, 0xcd, 0xdf, 0xc0, - 0x9d, 0x56, 0x22, 0xec, 0xad, 0x54, 0xaa, 0x33, 0x60, 0x95, 0x38, 0xb7, - 0x4e, 0x34, 0x53, 0x4d, 0x4e, 0x58, 0xda, 0x7e, 0x63, 0xe3, 0xfc, 0x7d, - 0x4c, 0x7d, 0x6b, 0xa3, 0x52, 0xd9, 0xf8, 0x64, 0x83, 0xe3, 0x03, 0x8f, - 0x20, 0x6c, 0xcd, 0xa7, 0xdf, 0x75, 0x5a, 0xfa, 0x37, 0x69, 0x8c, 0xde, - 0x2a, 0x42, 0xc4, 0x11, 0x9e, 0x85, 0x11, 0xe1, 0x97, 0x26, 0xb2, 0x9c, - 0x1f, 0x24, 0xb9, 0x37, 0xb8, 0xe5, 0x10, 0x3d, 0x6d, 0xf9, 0xb5, 0x28, - 0xf3, 0x16, 0x63, 0xec, 0x8a, 0x13, 0x44, 0x96, 0x90, 0x92, 0x30, 0xab, - 0x90, 0xea, 0x9f, 0xf2, 0xf3, 0x61, 0x12, 0x81, 0x87, 0x4c, 0xbf, 0x47, - 0xfb, 0x10, 0x8e, 0xd1, 0xfa, 0xeb, 0x07, 0xb5, 0x11, 0x75, 0x9e, 0xa4, - 0xfa, 0x6c, 0xbd, 0xea, 0xb8, 0x2f, 0xfc, 0x05, 0x03, 0xf1, 0x74, 0xb6, - 0x30, 0x30, 0x3a, 0xa9, 0x92, 0xfb, 0xb2, 0xe9, 0xf8, 0x6b, 0xb2, 0x2d, - 0x76, 0x17, 0x68, 0x01, 0x7a, 0xe6, 0x66, 0x63, 0x1f, 0xe4, 0xcb, 0xfd, - 0x5f, 0xa6, 0xa3, 0x7a, 0xc3, 0xd2, 0x41, 0xed, 0xc6, 0x87, 0x4d, 0xb8, - 0x96, 0xad, 0x0a, 0xcf, 0xa5, 0xaf, 0xa9, 0xa0, 0x33, 0xab, 0x8f, 0x9c, - 0xa4, 0xfa, 0xc0, 0x19, 0x36, 0x41, 0x08, 0x8f, 0xdc, 0xb6, 0x7a, 0xbf, - 0x60, 0x05, 0x6e, 0x89, 0x30, 0x46, 0xb9, 0xf5, 0x79, 0x9b, 0xd4, 0x66, - 0xe8, 0x88, 0x5f, 0x3a, 0x86, 0xcd, 0xc6, 0x2f, 0xf4, 0x20, 0xdb, 0xdc, - 0xff, 0x4a, 0xe7, 0xcd, 0x84, 0x60, 0x2a, 0x31, 0xec, 0xb6, 0x38, 0xd5, - 0x59, 0x49, 0xfa, 0xb4, 0x91, 0xea, 0xab, 0xcd, 0x41, 0x5f, 0xf9, 0xd7, - 0x1c, 0x7f, 0x75, 0x6e, 0x65, 0xd5, 0x16, 0x8b, 0x75, 0x04, 0xbc, 0xc7, - 0xb8, 0x4a, 0xd8, 0xb9, 0x01, 0x11, 0x76, 0x63, 0xbe, 0xca, 0x50, 0x6e, - 0xbd, 0x6d, 0xc0, 0x02, 0x46, 0x5b, 0xb5, 0x56, 0xe2, 0xbc, 0x09, 0xa4, - 0x5d, 0x57, 0x57, 0x81, 0xa1, 0xc6, 0xce, 0x77, 0xca, 0xbe, 0x20, 0xef, - 0xdc, 0xc7, 0x47, 0x9a, 0x19, 0xf5, 0x58, 0xcf, 0xcd, 0x2e, 0xc3, 0x6e, - 0x75, 0xf9, 0xe5, 0xdd, 0x5a, 0xeb, 0x36, 0x0f, 0x83, 0x3b, 0xf0, 0xbe, - 0xf7, 0x7c, 0x5f, 0x42, 0xe5, 0xf9, 0x3d, 0x2b, 0xa1, 0xb6, 0x0d, 0x60, - 0x02, 0x50, 0xfe, 0xf6, 0x66, 0x57, 0x70, 0x36, 0xa9, 0xe3, 0x8e, 0xdb, - 0xb8, 0xf7, 0x9a, 0xcc, 0xb6, 0x2f, 0x72, 0xdf, 0xca, 0x8f, 0xd6, 0xc9, - 0xf7, 0x73, 0xe2, 0x7d, 0xba, 0x14, 0x08, 0x95, 0xe3, 0xfd, 0xf4, 0x6f, - 0x9c, 0xb9, 0x9d, 0xc8, 0x56, 0xac, 0x25, 0xec, 0x03, 0xa7, 0x06, 0xd7, - 0x69, 0x15, 0xae, 0x6c, 0xa2, 0x65, 0x07, 0x26, 0x63, 0x70, 0x7b, 0xb0, - 0x6f, 0x08, 0xcb, 0xe7, 0x6d, 0xf0, 0x65, 0x9b, 0x38, 0x8f, 0x09, 0x92, - 0x4c, 0x44, 0x69, 0xda, 0x6c, 0xf5, 0xfe, 0x48, 0xbe, 0x52, 0x0f, 0x9b, - 0x97, 0x90, 0xef, 0x6e, 0x5b, 0xeb, 0x22, 0x3c, 0x4f, 0x12, 0xed, 0xb7, - 0xd5, 0x58, 0x93, 0xf3, 0xaf, 0xd0, 0x4b, 0xc1, 0xe5, 0x6a, 0x84, 0xfc, - 0x2b, 0xe0, 0x94, 0x74, 0xd4, 0xf2, 0x90, 0x64, 0x98, 0x8a, 0x18, 0xf2, - 0x63, 0x0a, 0x6b, 0x97, 0x6a, 0xb7, 0x54, 0x07, 0xed, 0xc9, 0xdc, 0x65, - 0x2c, 0xce, 0x1c, 0x76, 0xb3, 0xb3, 0x2c, 0x4b, 0x02, 0x50, 0xbf, 0x75, - 0x0f, 0x84, 0x4d, 0xe9, 0xb0, 0xfa, 0xcd, 0xbe, 0x2f, 0x02, 0x10, 0xc3, - 0x3d, 0x43, 0xa6, 0xf2, 0xf3, 0x99, 0xef, 0xf1, 0x9d, 0x75, 0xca, 0xad, - 0x3b, 0xe6, 0xe7, 0x6a, 0x2c, 0x92, 0x90, 0xd7, 0x8b, 0x51, 0xe1, 0xa5, - 0x30, 0xf0, 0xe5, 0x61, 0xa3, 0x17, 0x54, 0x5d, 0x4f, 0xb4, 0x18, 0xb9, - 0x95, 0x4b, 0xc3, 0x6b, 0x24, 0xe2, 0x6e, 0x46, 0x8e, 0xdb, 0xb1, 0x90, - 0x28, 0xd8, 0xe2, 0x64, 0x57, 0x3d, 0x36, 0x29, 0xe2, 0x07, 0xc6, 0x96, - 0x4a, 0x1f, 0x18, 0x32, 0xf7, 0x6a, 0xc7, 0x12, 0x93, 0x97, 0xca, 0x1a, - 0x44, 0x5c, 0xfc, 0xe7, 0xe5, 0x36, 0x06, 0x1d, 0x17, 0x04, 0x19, 0xfb, - 0xb7, 0x21, 0xc9, 0x61, 0x5b, 0x05, 0xc4, 0x7c, 0x0f, 0xf1, 0x9c, 0xbb, - 0xb1, 0x12, 0xd0, 0x30, 0x17, 0x82, 0x85, 0xf1, 0xae, 0x12, 0xf3, 0xf0, - 0x28, 0x1c, 0x09, 0x83, 0x3a, 0x7b, 0x40, 0x18, 0x31, 0xf5, 0xb9, 0xcc, - 0xa9, 0x1e, 0xf4, 0x01, 0x59, 0xc5, 0x56, 0x07, 0x68, 0x11, 0xc6, 0x31, - 0x18, 0x6e, 0x01, 0x07, 0x59, 0x82, 0xbc, 0x0c, 0xbb, 0x0f, 0xb8, 0xe6, - 0xb8, 0x05, 0xa2, 0xae, 0x73, 0xc3, 0x9b, 0x32, 0x07, 0x38, 0x50, 0x6a, - 0xa5, 0x50, 0x2a, 0x37, 0x85, 0x43, 0x3d, 0xd0, 0xf9, 0x83, 0xde, 0x62, - 0x39, 0xed, 0xe7, 0xf0, 0xb0, 0x9f, 0x86, 0xf2, 0xee, 0x64, 0x1d, 0x35, - 0x53, 0xa0, 0x97, 0x1e, 0xf2, 0xc0, 0x21, 0x6f, 0x6f, 0x3e, 0xa4, 0x1f, - 0x32, 0xd4, 0xe5, 0x64, 0x5b, 0xba, 0x92, 0xb4, 0x2e, 0x4e, 0x5c, 0xdd, - 0x58, 0x60, 0x07, 0x2c, 0xe4, 0x41, 0x05, 0x02, 0x89, 0xc0, 0x54, 0xe5, - 0xb8, 0x1d, 0x2b, 0xa2, 0x78, 0x35, 0x62, 0xcc, 0xc8, 0xf7, 0x21, 0xa8, - 0x3c, 0xbc, 0x20, 0x5e, 0xe1, 0x48, 0xb8, 0x52, 0x43, 0x15, 0x51, 0xb0, - 0x20, 0x50, 0x73, 0x68, 0xfa, 0xdb, 0x16, 0xa3, 0xdd, 0xf7, 0xb3, 0x95, - 0x48, 0xc5, 0x04, 0xff, 0x9e, 0x41, 0x7c, 0x84, 0xc4, 0xe6, 0x28, 0xf8, - 0xda, 0x21, 0xe0, 0xbf, 0xb8, 0x59, 0x11, 0xb6, 0x45, 0x20, 0x85, 0x31, - 0x74, 0x81, 0x6f, 0x34, 0xfb, 0xed, 0x8e, 0xab, 0x66, 0xa2, 0x5d, 0x40, - 0x05, 0x04, 0x0c, 0x09, 0xcd, 0x06, 0x94, 0xb1, 0xd9, 0xf6, 0x32, 0x66, - 0x6b, 0x54, 0x70, 0x7d, 0x9e, 0x99, 0xdb, 0x76, 0xe9, 0xec, 0x32, 0x4c, - 0x40, 0xc6, 0x07, 0xcc, 0xd3, 0x4f, 0x97, 0xda, 0x49, 0xb3, 0xf7, 0xd2, - 0xd0, 0xe8, 0xe7, 0xce, 0x34, 0xe0, 0x0c, 0x4d, 0x27, 0x59, 0x41, 0xdd, - 0x04, 0x88, 0x7e, 0x38, 0xaf, 0x1d, 0xc2, 0xf0, 0x24, 0x4c, 0x59, 0xb8, - 0xdc, 0x69, 0x5c, 0xdb, 0x9c, 0x9f, 0xe6, 0x88, 0x7d, 0x9c, 0x21, 0x39, - 0x70, 0x0b, 0x21, 0x29, 0xb5, 0xe0, 0x9f, 0xcd, 0xb1, 0x52, 0xe7, 0x32, - 0x99, 0x6b, 0x69, 0xb6, 0xe3, 0x7f, 0xb8, 0x2a, 0x8c, 0xf3, 0xf7, 0x1c, - 0xce, 0x9c, 0xf9, 0xa9, 0xe7, 0xd4, 0x86, 0x9c, 0xe7, 0xc4, 0x76, 0xeb, - 0x55, 0x68, 0xea, 0x61, 0x00, 0x16, 0x9f, 0x51, 0x61, 0x73, 0x0e, 0xac, - 0x48, 0xfb, 0xea, 0x93, 0x2a, 0xab, 0xec, 0x99, 0x8b, 0xf1, 0x02, 0xdb, - 0x65, 0x6a, 0x40, 0xdb, 0xf5, 0xf0, 0xb5, 0x00, 0xdc, 0xc6, 0xfe, 0x3f, - 0x99, 0x9b, 0x9e, 0x02, 0xdc, 0xad, 0xf1, 0x27, 0xbf, 0xd9, 0x76, 0x47, - 0x9f, 0x52, 0xe1, 0xe2, 0xed, 0xe5, 0x89, 0xad, 0xb8, 0xc5, 0x51, 0x6f, - 0x1c, 0xa0, 0x70, 0x6a, 0xdc, 0x33, 0x24, 0x8f, 0xf1, 0xb1, 0x5a, 0xc6, - 0xb3, 0xae, 0x4a, 0x21, 0x45, 0xa6, 0x69, 0xe7, 0x99, 0x16, 0x63, 0x29, - 0x9f, 0xbd, 0x0f, 0x3d, 0xf3, 0x6d, 0x71, 0x46, 0xa8, 0xe2, 0xfd, 0x7c, - 0xda, 0xc9, 0x8c, 0xad, 0x71, 0x9f, 0xb9, 0x91, 0x5b, 0xf3, 0xf0, 0xd6, - 0x25, 0xd1, 0xe4, 0xb6, 0xd1, 0x19, 0x48, 0x6b, 0x74, 0x1f, 0xd2, 0xcc, - 0xa3, 0x87, 0x7d, 0x73, 0xc9, 0x3e, 0x12, 0x3f, 0xf3, 0xbe, 0x71, 0x9f, - 0x36, 0x72, 0x92, 0xcf, 0x6c, 0xd9, 0xb4, 0xc9, 0xf3, 0x99, 0x7f, 0x3d, - 0x45, 0xbf, 0xde, 0x46, 0xa0, 0x16, 0x2b, 0x76, 0xa0, 0x27, 0xf5, 0x83, - 0xca, 0xb5, 0xc0, 0x41, 0x40, 0x09, 0x7a, 0x0d, 0x74, 0x41, 0x74, 0x63, - 0xf9, 0x78, 0x7b, 0xad, 0xf8, 0x92, 0x7b, 0xb1, 0x96, 0x0f, 0x59, 0x80, - 0xe7, 0x79, 0xbb, 0x49, 0x46, 0x06, 0x67, 0xb7, 0xdd, 0xf7, 0xc8, 0xe2, - 0x5a, 0x96, 0x74, 0x0f, 0x83, 0x63, 0xa5, 0x4a, 0x18, 0xda, 0x5d, 0x88, - 0x11, 0x20, 0xcc, 0x9c, 0x4b, 0xdb, 0x34, 0x58, 0x4c, 0xc8, 0x32, 0x95, - 0x0b, 0xb6, 0x43, 0x17, 0x27, 0xfe, 0xed, 0x7d, 0xb1, 0x5c, 0xe6, 0xd0, - 0x13, 0x2a, 0x55, 0x96, 0xbb, 0x9d, 0x8f, 0x94, 0xcb, 0x0e, 0x73, 0xa5, - 0xed, 0x2d, 0x52, 0x3d, 0xe4, 0x30, 0xc2, 0x97, 0x0b, 0x36, 0xa6, 0x1a, - 0xf1, 0x8a, 0x9d, 0xa5, 0x5c, 0xc3, 0x4c, 0x0e, 0xe5, 0x14, 0xe1, 0x0c, - 0x0f, 0xe4, 0xea, 0x0c, 0x96, 0x11, 0x47, 0xc7, 0x43, 0xb0, 0xdc, 0x9b, - 0xa7, 0xd1, 0x9b, 0xe3, 0x7e, 0x52, 0x5b, 0xbe, 0xbe, 0xc6, 0xa3, 0x66, - 0x78, 0x28, 0x5c, 0x10, 0x2e, 0xc3, 0x75, 0xa6, 0x1e, 0x39, 0x09, 0x35, - 0xee, 0xe2, 0xaa, 0x5d, 0x01, 0x23, 0x17, 0x50, 0x20, 0x41, 0x14, 0xde, - 0x27, 0xe5, 0xef, 0xb4, 0x40, 0xbe, 0x65, 0x49, 0xe3, 0x14, 0xad, 0xe4, - 0xea, 0xa8, 0x1b, 0x4f, 0x59, 0xcb, 0x69, 0xc2, 0xcf, 0x15, 0x42, 0x3c, - 0xed, 0xb1, 0x15, 0x4e, 0x4a, 0x6c, 0xfd, 0x6b, 0x38, 0xdf, 0x21, 0xd6, - 0x37, 0x2a, 0xec, 0xb9, 0x07, 0xb1, 0x98, 0xec, 0x1f, 0x8e, 0x34, 0x72, - 0xdc, 0x66, 0xa2, 0x47, 0x24, 0x96, 0xde, 0xb5, 0x60, 0x81, 0x5d, 0xc5, - 0xbb, 0x4e, 0x7d, 0x2a, 0x5a, 0xa7, 0xb6, 0x3b, 0x53, 0x17, 0xc8, 0x75, - 0xd1, 0xa0, 0x06, 0xb9, 0xe2, 0xc6, 0x6c, 0x48, 0x4c, 0xb0, 0xbf, 0x0b, - 0x2a, 0x7c, 0x24, 0x6e, 0xba, 0xae, 0xbc, 0xe7, 0x6e, 0x88, 0xb7, 0xc6, - 0x81, 0xa8, 0x33, 0xc6, 0x8a, 0x23, 0xdc, 0x86, 0xd9, 0x52, 0x2c, 0x62, - 0x3b, 0x6a, 0x31, 0xc8, 0x6b, 0x29, 0xae, 0xff, 0xa7, 0xfb, 0xb4, 0xa0, - 0x47, 0x8a, 0xd2, 0x51, 0x4d, 0x8a, 0x37, 0x35, 0xe9, 0x7a, 0xf6, 0xfa, - 0xa1, 0x38, 0x37, 0x17, 0x34, 0x31, 0xa3, 0x30, 0x00, 0x25, 0x6e, 0x32, - 0x54, 0xf2, 0x69, 0x7b, 0xd4, 0x80, 0x25, 0xf8, 0x8f, 0x52, 0x6a, 0xe0, - 0x62, 0xdb, 0x56, 0x2a, 0x88, 0x30, 0xd1, 0xcb, 0x86, 0xa5, 0xee, 0x15, - 0x54, 0xea, 0xbc, 0xe8, 0xd8, 0xa3, 0x82, 0xb8, 0x5f, 0xb9, 0x9e, 0x56, - 0x1a, 0x67, 0x3c, 0x69, 0x58, 0xcf, 0x75, 0x92, 0x0b, 0x36, 0xc7, 0x52, - 0x62, 0x98, 0x29, 0xe7, 0xbe, 0x53, 0x1c, 0x40, 0xfe, 0xa7, 0x65, 0x93, - 0xb5, 0xa7, 0xff, 0x9d, 0xa5, 0xf7, 0xad, 0x8d, 0xea, 0xc1, 0xac, 0x80, - 0x20, 0xb7, 0x17, 0xda, 0xe0, 0x16, 0x8e, 0x1e, 0x25, 0xab, 0x33, 0x1b, - 0xfc, 0x2e, 0x2e, 0x82, 0xf5, 0x21, 0x37, 0xe3, 0xc2, 0x26, 0xb7, 0x18, - 0x49, 0x59, 0xae, 0x79, 0x6e, 0xc5, 0xe2, 0x1e, 0x39, 0x04, 0xb9, 0x85, - 0xbd, 0x9e, 0x61, 0xe1, 0x8f, 0x15, 0xf4, 0x12, 0x5e, 0xfd, 0x3a, 0x77, - 0x4f, 0xc4, 0x7d, 0x10, 0x19, 0xad, 0xcc, 0x4c, 0x1f, 0xaf, 0xc4, 0x73, - 0x8c, 0xd8, 0x9b, 0x77, 0xe0, 0x36, 0x30, 0x67, 0x5f, 0x1b, 0x77, 0x8c, - 0x71, 0xfd, 0x88, 0x54, 0xd9, 0xf6, 0x06, 0x5f, 0xfe, 0xd5, 0x3a, 0x02, - 0xa7, 0xf8, 0xd5, 0xa5, 0x15, 0x8a, 0xaf, 0x7b, 0xfe, 0x3b, 0x91, 0xa0, - 0xc8, 0x8d, 0xe5, 0x04, 0xcc, 0x5b, 0xc8, 0x10, 0xa5, 0x01, 0xfb, 0x47, - 0xe3, 0x69, 0x00, 0x4e, 0xde, 0xd3, 0x70, 0xa2, 0x05, 0x9f, 0x1c, 0xbf, - 0x8e, 0xc3, 0xbf, 0x28, 0x8b, 0x04, 0xce, 0x76, 0x9b, 0x72, 0x8b, 0x9c, - 0x87, 0x02, 0x2d, 0x74, 0x9d, 0xb4, 0x0c, 0xbd, 0x86, 0x02, 0xaa, 0xe3, - 0xe0, 0x3d, 0x39, 0xdc, 0x5a, 0x01, 0xd3, 0xec, 0xb4, 0x41, 0x63, 0x89, - 0x81, 0xf6, 0xfe, 0x9e, 0xef, 0x98, 0x50, 0x25, 0x5d, 0x0a, 0x3d, 0x0d, - 0x36, 0x6a, 0x7d, 0xc9, 0xb6, 0xe1, 0x7a, 0x70, 0x3f, 0xd0, 0xdf, 0xca, - 0x7b, 0xb2, 0x63, 0x36, 0x06, 0xdd, 0x27, 0xfd, 0x5e, 0x61, 0x2a, 0x59, - 0xc5, 0xb0, 0x1b, 0x97, 0x03, 0x77, 0x13, 0xc0, 0x26, 0x45, 0x6c, 0xd1, - 0x9f, 0x07, 0x29, 0xb0, 0x31, 0x71, 0x37, 0x8e, 0x68, 0xbf, 0xbc, 0xaf, - 0xa7, 0x9d, 0x23, 0x56, 0x5c, 0xb4, 0x89, 0x4a, 0x94, 0x27, 0x83, 0xb6, - 0x8a, 0x17, 0x32, 0xc6, 0x49, 0x84, 0xa2, 0xb8, 0xb6, 0x89, 0x10, 0x2b, - 0xa1, 0x8b, 0x85, 0xb6, 0xeb, 0x49, 0xdb, 0x78, 0x38, 0x6b, 0x44, 0x9f, - 0x4d, 0xdc, 0xc3, 0x72, 0xbc, 0x27, 0x95, 0x52, 0x75, 0x37, 0xb1, 0x6a, - 0x15, 0x99, 0xc0, 0xd5, 0x1e, 0x59, 0xde, 0xbd, 0xdf, 0x48, 0x70, 0x7d, - 0x56, 0xff, 0xc7, 0xd6, 0xd5, 0xef, 0x3b, 0xea, 0xfa, 0xcc, 0xff, 0xf7, - 0x2e, 0x6d, 0x4b, 0x5b, 0xb7, 0x2a, 0x7e, 0x51, 0xdb, 0xe3, 0xb9, 0xfa, - 0x27, 0x33, 0x93, 0x00, 0xdd, 0xdf, 0xf3, 0xd9, 0x3d, 0x64, 0x42, 0x11, - 0x91, 0xd7, 0xf0, 0x96, 0x10, 0xd4, 0xe2, 0x65, 0xad, 0xba, 0xfc, 0xc3, - 0xb6, 0x05, 0xb3, 0xaf, 0x4a, 0x57, 0x99, 0x2a, 0x01, 0x55, 0x9f, 0xff, - 0xe5, 0xf7, 0xe0, 0x53, 0xbc, 0x73, 0xaf, 0xab, 0x99, 0x64, 0x5a, 0x88, - 0xfe, 0x3b, 0xbb, 0xdd, 0xc3, 0xed, 0xab, 0x17, 0xdd, 0xfa, 0x61, 0x89, - 0x22, 0x41, 0x9f, 0xea, 0x4e, 0x42, 0x70, 0xe6, 0x9d, 0x82, 0xf1, 0x9c, - 0x6e, 0xbd, 0x38, 0x2e, 0xba, 0xb4, 0xce, 0x63, 0x7b, 0x0e, 0x37, 0x0d, - 0x84, 0x86, 0xbc, 0x60, 0xa5, 0x43, 0xad, 0x70, 0xe6, 0xd1, 0xc2, 0xc5, - 0x25, 0x52, 0xe8, 0x3a, 0xad, 0xfb, 0xe3, 0x84, 0x7b, 0x43, 0xd1, 0x29, - 0x6c, 0xb1, 0x13, 0x66, 0x80, 0xb7, 0x47, 0x08, 0x24, 0xf6, 0xe1, 0xee, - 0x99, 0x17, 0x20, 0x2c, 0xc6, 0xd5, 0xdc, 0x74, 0x46, 0xb1, 0xe5, 0x5e, - 0xe9, 0xc9, 0x77, 0x33, 0xde, 0xa4, 0x22, 0x52, 0xad, 0xb9, 0x7b, 0x04, - 0xdc, 0x57, 0x95, 0x5e, 0x53, 0x7f, 0x9c, 0x72, 0xdb, 0x5c, 0xc7, 0x1b, - 0xa0, 0x27, 0x6e, 0x93, 0x64, 0xfc, 0x35, 0xe6, 0x6d, 0x9b, 0x2f, 0xf3, - 0x01, 0x94, 0x97, 0x50, 0x67, 0x2b, 0x0b, 0xac, 0xee, 0x79, 0x13, 0x1d, - 0x1e, 0xd6, 0xe5, 0x57, 0x80, 0xae, 0xc7, 0xdf, 0x36, 0x29, 0x58, 0x45, - 0xd7, 0x31, 0xcc, 0xab, 0x03, 0x9c, 0x1a, 0xbe, 0xf5, 0xb8, 0x7f, 0x62, - 0x4f, 0x9a, 0x14, 0x42, 0xa9, 0xea, 0xd8, 0x9f, 0xa7, 0x6c, 0x1e, 0x9e, - 0x0c, 0x9b, 0x4d, 0x25, 0x07, 0xfd, 0xca, 0xa6, 0x58, 0x9d, 0xaa, 0x35, - 0x0c, 0x1b, 0xf3, 0x2a, 0x81, 0x9d, 0x97, 0xb9, 0x09, 0x4a, 0x14, 0x25, - 0x7b, 0x37, 0x47, 0xc7, 0xe3, 0x31, 0xb9, 0xaf, 0xcd, 0x70, 0xbb, 0xde, - 0x67, 0x3b, 0x7a, 0xe1, 0xd5, 0xb8, 0x4e, 0xa8, 0x33, 0x4e, 0x72, 0x57, - 0xf7, 0x73, 0xdf, 0xc4, 0xc5, 0xad, 0xfd, 0xaf, 0xdd, 0x36, 0x02, 0xd8, - 0xfe, 0xc0, 0xc4, 0x76, 0xd4, 0x5b, 0x24, 0xdb, 0x71, 0xef, 0x4f, 0xbf, - 0x80, 0xad, 0xa9, 0x86, 0x96, 0xbe, 0xad, 0x3d, 0x33, 0x7e, 0x35, 0xe2, - 0x38, 0x90, 0xd6, 0x9f, 0x46, 0x23, 0x3e, 0xbe, 0x3e, 0x89, 0x4a, 0xea, - 0xf7, 0x6e, 0x45, 0xea, 0xdb, 0xeb, 0xac, 0x5e, 0xad, 0x87, 0x0e, 0xd6, - 0xf3, 0xff, 0xf8, 0x3e, 0xfd, 0x4e, 0x3e, 0x1e, 0x8b, 0xc1, 0xcb, 0x20, - 0xa6, 0x86, 0x11, 0x5d, 0x09, 0x49, 0x87, 0x57, 0x36, 0x63, 0xc9, 0xd9, - 0x98, 0x77, 0xf2, 0x10, 0x1b, 0xf7, 0x7c, 0xfa, 0xcf, 0xa1, 0x9e, 0x8c, - 0xfa, 0x0e, 0x1b, 0xb0, 0xae, 0xff, 0x30, 0xdd, 0x57, 0x7d, 0x06, 0x99, - 0xb0, 0x30, 0x78, 0xce, 0x6e, 0x93, 0x4e, 0xf8, 0xe9, 0x2b, 0xb2, 0xc0, - 0xbb, 0xd7, 0xde, 0xd3, 0xb5, 0xc3, 0x17, 0x9d, 0xd9, 0xd0, 0x04, 0xc4, - 0xf2, 0xb2, 0xab, 0x4c, 0xd0, 0x2e, 0x7d, 0xbf, 0x3b, 0xf2, 0xa3, 0xda, - 0xd4, 0x3c, 0x56, 0x01, 0xbf, 0x00, 0x27, 0xfb, 0x5a, 0x4d, 0xad, 0xc5, - 0xbb, 0xd7, 0x4f, 0xdc, 0x63, 0xc5, 0x60, 0x6f, 0x1f, 0x43, 0x5d, 0x66, - 0x7b, 0xa0, 0x06, 0x52, 0x43, 0xf1, 0x61, 0xd2, 0xd4, 0xd3, 0x1e, 0xdb, - 0xbb, 0x1f, 0xba, 0xca, 0x48, 0x6e, 0xaf, 0x69, 0x2a, 0x0b, 0x55, 0x78, - 0x44, 0x0f, 0xd3, 0x79, 0x28, 0x6f, 0x9b, 0x47, 0x8b, 0x0e, 0xad, 0xc7, - 0xb3, 0x0a, 0x37, 0xd3, 0x82, 0x2a, 0x6b, 0x9e, 0x71, 0x0e, 0x60, 0xa7, - 0x81, 0x8e, 0xfa, 0x14, 0x36, 0x8d, 0xbc, 0x03, 0xd8, 0xf3, 0x4b, 0xd3, - 0x43, 0x6f, 0xa5, 0x3b, 0xed, 0x2b, 0x46, 0x37, 0xba, 0xc7, 0xc9, 0x0c, - 0xb6, 0x3b, 0x17, 0xf9, 0x68, 0x71, 0xae, 0x0d, 0xbd, 0x64, 0xfb, 0x36, - 0x43, 0x8f, 0xae, 0x48, 0xc0, 0xf6, 0x1f, 0x0d, 0xfe, 0x6b, 0x31, 0x78, - 0xc7, 0x65, 0x2f, 0x76, 0x22, 0xfb, 0xf7, 0x28, 0x4f, 0xd6, 0x73, 0x67, - 0x6f, 0xc9, 0x3f, 0x2d, 0x06, 0xff, 0xe4, 0x5f, 0x3d, 0x77, 0x7c, 0xef, - 0xe6, 0xbc, 0x87, 0x6b, 0x8f, 0xaf, 0x5d, 0x73, 0x7f, 0x0f, 0x34, 0xba, - 0x12, 0x71, 0x55, 0x8d, 0x28, 0x0e, 0xf7, 0xee, 0x87, 0x7a, 0x51, 0xcb, - 0xf0, 0xd1, 0x45, 0x50, 0xc6, 0x2f, 0xa6, 0x6e, 0x9b, 0xbd, 0xd3, 0xa3, - 0x5b, 0x4a, 0x6c, 0xd7, 0xd7, 0x00, 0xbd, 0x8c, 0xbb, 0x25, 0xc4, 0xf7, - 0xf7, 0x58, 0xaa, 0xf5, 0x44, 0x1f, 0x72, 0xc0, 0x78, 0xf9, 0xd8, 0x80, - 0xf8, 0x95, 0x25, 0xdd, 0x01, 0x8e, 0x10, 0xca, 0xde, 0xd6, 0xcb, 0x56, - 0x11, 0xd2, 0x26, 0xd5, 0x2d, 0xeb, 0xd1, 0x15, 0xb4, 0xa6, 0xd9, 0x3a, - 0x06, 0xa0, 0xbd, 0x02, 0x4f, 0x7d, 0xf4, 0x13, 0x6f, 0x99, 0x73, 0x00, - 0x68, 0xdb, 0x2a, 0xd8, 0x11, 0x86, 0x74, 0xe0, 0x21, 0x54, 0xe7, 0x3f, - 0xbc, 0xfa, 0xb2, 0x0b, 0x6a, 0x3e, 0xf7, 0x49, 0xd3, 0x35, 0xeb, 0xf8, - 0x23, 0x2c, 0xf7, 0x74, 0x39, 0xfd, 0x69, 0x8d, 0xc0, 0xc6, 0x98, 0xe9, - 0xd6, 0xaa, 0xe3, 0xa7, 0xdd, 0x8e, 0xf8, 0xba, 0xbb, 0x68, 0x9c, 0x8f, - 0x9c, 0x3f, 0x4c, 0xbf, 0x1c, 0x26, 0x61, 0x1c, 0xa4, 0x97, 0x97, 0x80, - 0xba, 0x8c, 0x8a, 0x64, 0x47, 0xe8, 0x50, 0x69, 0xf7, 0xff, 0xfc, 0xd2, - 0xa8, 0xdb, 0xdf, 0x2a, 0xa1, 0x19, 0xad, 0xb8, 0xe5, 0x2d, 0x51, 0x29, - 0x85, 0x06, 0xde, 0x56, 0x9e, 0xbe, 0xa7, 0xca, 0x1f, 0xb8, 0x6d, 0x85, - 0x52, 0x95, 0x70, 0xf4, 0x8e, 0x31, 0x76, 0x49, 0x8c, 0xba, 0x7a, 0x73, - 0xc0, 0x50, 0x82, 0x50, 0x62, 0x57, 0x9e, 0xd4, 0xbf, 0x6c, 0xec, 0x75, - 0x7c, 0x96, 0xce, 0xa8, 0x1c, 0xf0, 0x9b, 0xfa, 0xd3, 0x30, 0xf1, 0x9c, - 0xe4, 0x93, 0x6a, 0x4c, 0xfe, 0xde, 0x04, 0x83, 0x67, 0x38, 0x44, 0x45, - 0xc3, 0xaf, 0x37, 0x85, 0x8e, 0x37, 0xfb, 0x37, 0xcd, 0xe3, 0x3a, 0x78, - 0x3c, 0xfd, 0x2d, 0x40, 0x71, 0x9e, 0x5b, 0x8e, 0xf7, 0x86, 0x77, 0xbd, - 0xb1, 0x06, 0xd6, 0x7b, 0x74, 0x63, 0x3f, 0x97, 0x8e, 0x51, 0x7d, 0xec, - 0xb8, 0xfa, 0x65, 0x18, 0x4f, 0xa3, 0x8f, 0x12, 0x77, 0xe8, 0x65, 0x25, - 0x6f, 0x7a, 0x86, 0xaa, 0xec, 0x41, 0xf9, 0x0e, 0x55, 0x29, 0x10, 0xaa, - 0x75, 0x21, 0xa2, 0xd1, 0x14, 0xa2, 0x5a, 0x2f, 0x9c, 0x79, 0x38, 0x8c, - 0xd7, 0x2d, 0xd7, 0xfa, 0x33, 0xcc, 0xc1, 0xf8, 0x6b, 0xc5, 0xb4, 0x30, - 0x58, 0xeb, 0x48, 0x01, 0x2b, 0xf0, 0x84, 0x01, 0xaa, 0xfc, 0xa5, 0x93, - 0x16, 0xa3, 0x68, 0x1b, 0x91, 0xc7, 0x2f, 0xa1, 0xda, 0xd5, 0x35, 0x8a, - 0xfa, 0xcf, 0x91, 0xa8, 0x3d, 0x96, 0x70, 0x05, 0xdd, 0x9b, 0x4d, 0x6c, - 0x8c, 0x13, 0x51, 0x23, 0xcc, 0x3c, 0x6f, 0x02, 0x1e, 0x7f, 0xad, 0xee, - 0xa3, 0x36, 0x10, 0x46, 0x9f, 0xef, 0xe0, 0x8a, 0xcc, 0xed, 0xc5, 0x9c, - 0x52, 0x69, 0x6d, 0xa8, 0x26, 0xdc, 0x07, 0x34, 0x18, 0x40, 0xd1, 0xbb, - 0x96, 0xc7, 0x82, 0x6e, 0x35, 0x52, 0xfa, 0xa6, 0xe3, 0x55, 0xd4, 0xa4, - 0xea, 0x5b, 0xf6, 0xd3, 0xa4, 0x60, 0xd4, 0x74, 0x89, 0x6a, 0xf8, 0xe8, - 0x27, 0xac, 0xb2, 0x28, 0xd8, 0xe8, 0xb7, 0x55, 0x1c, 0xe9, 0x09, 0x4f, - 0xf5, 0x6f, 0x92, 0x7b, 0xf7, 0x35, 0xdb, 0x80, 0x0a, 0xe5, 0x8c, 0xb2, - 0x00, 0x71, 0xe6, 0x81, 0xce, 0x85, 0xca, 0x07, 0x63, 0x8a, 0x91, 0x71, - 0xe9, 0x76, 0x4a, 0xbc, 0x47, 0x6f, 0x0c, 0xf5, 0xaa, 0x19, 0x5d, 0x30, - 0x2f, 0xd2, 0x37, 0x9b, 0xc8, 0x7b, 0x19, 0x7d, 0x5a, 0xef, 0xcf, 0x5c, - 0xe8, 0xb0, 0x7c, 0x14, 0xe4, 0xd2, 0xca, 0x2a, 0x4b, 0xd5, 0x3e, 0xe9, - 0x43, 0x94, 0xb9, 0xde, 0xae, 0xed, 0x39, 0x62, 0x2a, 0x2b, 0xf6, 0xfc, - 0xcf, 0x17, 0xf7, 0x8e, 0xc8, 0xa6, 0xa4, 0x17, 0xe4, 0x4d, 0x97, 0x99, - 0xf2, 0x95, 0x8e, 0x6c, 0x9f, 0x00, 0xcc, 0x17, 0x55, 0xa1, 0xfc, 0x75, - 0xf3, 0x8c, 0xa6, 0xb6, 0x44, 0x77, 0xa8, 0x78, 0xe3, 0x6c, 0x21, 0x5f, - 0x2f, 0x4e, 0xd3, 0x4d, 0x6d, 0xc7, 0x50, 0x92, 0x78, 0x41, 0xa4, 0xbc, - 0xa2, 0x95, 0xed, 0x41, 0x2f, 0x53, 0xb9, 0xe4, 0xb6, 0x97, 0x95, 0xeb, - 0x09, 0x6f, 0x18, 0x73, 0x8a, 0x03, 0x16, 0x19, 0x8a, 0xe2, 0x15, 0x12, - 0xe6, 0xb5, 0x3d, 0x57, 0xda, 0x15, 0x29, 0xc0, 0xba, 0x6f, 0x05, 0x1b, - 0x23, 0x5e, 0x84, 0x39, 0x6e, 0x2a, 0xbd, 0xe3, 0x11, 0x5d, 0x06, 0x0a, - 0x66, 0xa9, 0xa2, 0x6d, 0x88, 0x20, 0x59, 0xb7, 0x27, 0x1a, 0xf2, 0xdc, - 0xbd, 0x96, 0xa1, 0x3f, 0x46, 0xdc, 0xf1, 0xb5, 0xdb, 0x69, 0x7e, 0x9e, - 0x7e, 0x5e, 0xd4, 0x0c, 0xd4, 0x1e, 0x4c, 0xff, 0x3c, 0x94, 0xea, 0x03, - 0xb0, 0xbe, 0x29, 0xc5, 0xc7, 0x64, 0x6e, 0x43, 0xf2, 0xac, 0x37, 0xdc, - 0x60, 0xed, 0x53, 0x9d, 0x39, 0x1d, 0x46, 0x1c, 0xb5, 0xac, 0x0d, 0xbb, - 0x7e, 0xd2, 0x8a, 0x15, 0xf6, 0xf0, 0xb3, 0xe0, 0xd2, 0xd4, 0x7b, 0x4d, - 0x01, 0x6b, 0x1a, 0x8f, 0x52, 0xd3, 0x24, 0x18, 0xb9, 0x20, 0xae, 0xbe, - 0x40, 0x6c, 0x44, 0x15, 0x53, 0x56, 0x62, 0x3e, 0x7d, 0xbb, 0xc9, 0x75, - 0xce, 0x46, 0xed, 0x26, 0x0a, 0x83, 0xe5, 0x93, 0xd6, 0x25, 0xaa, 0x6c, - 0x6f, 0x45, 0xe3, 0x68, 0xc6, 0xc6, 0x72, 0x71, 0xb0, 0x07, 0xf5, 0xb4, - 0xc9, 0x36, 0x7a, 0xcd, 0xbe, 0xce, 0x54, 0x7a, 0xc9, 0xaa, 0xcb, 0x26, - 0xe8, 0x8e, 0x25, 0x16, 0x5f, 0x1a, 0xc7, 0x88, 0xd2, 0xf2, 0x7b, 0xea, - 0x1d, 0x9c, 0x4e, 0x31, 0x8a, 0x3b, 0x9d, 0x61, 0xa9, 0x71, 0xde, 0x07, - 0xdf, 0x4b, 0x32, 0xb4, 0x45, 0x3c, 0x77, 0xed, 0x9e, 0xf4, 0x78, 0x17, - 0x8e, 0x83, 0x00, 0x80, 0x4e, 0x6b, 0x6d, 0x76, 0xd8, 0x29, 0xfd, 0xfe, - 0xf2, 0x9b, 0xbf, 0xf9, 0xdf, 0x7f, 0xc3, 0x4c, 0x91, 0xa2, 0xda, 0x28, - 0x84, 0xbc, 0x38, 0xc4, 0x8c, 0x5f, 0x5c, 0x94, 0xcd, 0xdd, 0x4d, 0xf2, - 0x19, 0x6a, 0x73, 0x34, 0xc7, 0x7b, 0xfd, 0x52, 0x2a, 0xea, 0x14, 0xf5, - 0xb0, 0xbb, 0x93, 0xae, 0xc7, 0x21, 0x37, 0xb5, 0xec, 0x19, 0xbd, 0x6b, - 0x25, 0x2a, 0xd9, 0xa3, 0xe0, 0x7e, 0x49, 0x0b, 0x04, 0x41, 0xa6, 0x32, - 0x38, 0xc8, 0x13, 0x20, 0x22, 0x3d, 0xb6, 0x16, 0xf8, 0xa8, 0xf9, 0x75, - 0x74, 0x7b, 0x14, 0x1a, 0x77, 0xff, 0xe5, 0x95, 0x0f, 0x32, 0xe0, 0x0b, - 0xca, 0x15, 0x6f, 0xf5, 0x56, 0x9c, 0x72, 0x32, 0x9e, 0x07, 0x54, 0xdd, - 0xab, 0x21, 0xd5, 0x13, 0xf6, 0x44, 0x7b, 0x13, 0x2c, 0x5d, 0x21, 0x6f, - 0x71, 0x8b, 0xee, 0x0d, 0xe9, 0x05, 0x25, 0x5e, 0x5a, 0x5a, 0x71, 0x06, - 0xf6, 0x92, 0x6b, 0xec, 0xde, 0xd8, 0xfe, 0xa7, 0xde, 0xbf, 0xfb, 0x0c, - 0xf1, 0xfe, 0x2b, 0x17, 0xda, 0xf5, 0xce, 0x6e, 0xcd, 0xbd, 0xe2, 0x3e, - 0x54, 0x17, 0x47, 0x3b, 0xf5, 0x97, 0xff, 0xea, 0xcc, 0x19, 0xa9, 0x97, - 0x67, 0x5b, 0x0b, 0x08, 0xe8, 0xd1, 0xfc, 0x4d, 0x5d, 0x73, 0xf9, 0x1b, - 0x4b, 0x6f, 0x86, 0xf8, 0xeb, 0x44, 0xc3, 0x21, 0x42, 0x73, 0x07, 0x92, - 0x90, 0x7b, 0xac, 0x9b, 0xf3, 0xad, 0xb4, 0xab, 0xfc, 0xed, 0x95, 0xc1, - 0x86, 0x52, 0x27, 0xd8, 0x8a, 0x8b, 0x5f, 0x56, 0x2f, 0x87, 0x89, 0x73, - 0xd6, 0x7e, 0xef, 0xa7, 0x7a, 0xd5, 0x08, 0xc5, 0xef, 0x0d, 0x77, 0x61, - 0x47, 0x59, 0x2b, 0x06, 0xba, 0xb7, 0x95, 0x69, 0x37, 0x03, 0x0b, 0xfa, - 0xe3, 0x1f, 0x68, 0xa8, 0x46, 0x98, 0xe3, 0x98, 0x65, 0xc0, 0x68, 0x28, - 0xad, 0x3b, 0x9d, 0x7c, 0x1a, 0x40, 0xe0, 0xca, 0x11, 0x1c, 0xd7, 0xdf, - 0xfd, 0x1e, 0x20, 0xb1, 0x47, 0xbc, 0x3c, 0x5a, 0x12, 0xb2, 0x96, 0x95, - 0x05, 0x4a, 0xa0, 0xe8, 0x20, 0xea, 0x76, 0x1f, 0x85, 0xc0, 0x3c, 0xbb, - 0x61, 0x3e, 0x74, 0x7b, 0x8b, 0x2e, 0x97, 0x3b, 0x2a, 0x82, 0x3b, 0x0d, - 0x7d, 0x55, 0xee, 0xd9, 0x85, 0xdf, 0x9f, 0x3e, 0x2c, 0xb7, 0x63, 0xd1, - 0xd8, 0xa3, 0xb9, 0xfa, 0x11, 0x5b, 0xe1, 0xae, 0xb3, 0xc5, 0xaa, 0x46, - 0x04, 0xf2, 0x08, 0x7d, 0xf6, 0x03, 0xfb, 0xfa, 0x92, 0x46, 0x76, 0xe7, - 0xa2, 0x4b, 0x9f, 0x73, 0xbc, 0x3b, 0x76, 0x7c, 0x88, 0x5a, 0x25, 0x9c, - 0x57, 0x57, 0x1c, 0x4f, 0xe8, 0x61, 0x9b, 0x9e, 0x00, 0xe0, 0x1a, 0xf4, - 0x98, 0x5a, 0x36, 0x89, 0xf1, 0xb7, 0xe3, 0xa4, 0x90, 0xd0, 0x09, 0xe9, - 0x57, 0x5f, 0xb5, 0x0c, 0x1a, 0x12, 0xda, 0x80, 0xbb, 0x7c, 0xad, 0xec, - 0xe6, 0x3a, 0xca, 0xb6, 0x6e, 0x7b, 0x49, 0xab, 0x09, 0x07, 0x82, 0x0f, - 0xb9, 0xcf, 0x2c, 0xc9, 0xcc, 0xf5, 0x76, 0x69, 0xbb, 0x2a, 0xe8, 0x35, - 0xf5, 0xbd, 0x9a, 0x7c, 0x6e, 0xdf, 0x6c, 0x14, 0x5c, 0xd3, 0xbd, 0x90, - 0xa9, 0x3e, 0x56, 0x45, 0xbf, 0x1c, 0x50, 0x8b, 0xee, 0x7a, 0xfa, 0x82, - 0x8d, 0xf4, 0x6a, 0x58, 0xb1, 0x2e, 0x52, 0x69, 0xc9, 0xf7, 0x30, 0x80, - 0x53, 0xf2, 0x3a, 0x60, 0x19, 0x54, 0xdf, 0xe1, 0x78, 0x17, 0x36, 0x61, - 0xe9, 0xd0, 0x21, 0x7d, 0x63, 0x1e, 0x5d, 0x17, 0x4c, 0xae, 0x25, 0x16, - 0xac, 0x77, 0xa9, 0x82, 0x35, 0x36, 0x31, 0x7b, 0x30, 0x91, 0x1a, 0xe2, - 0xec, 0x6f, 0x7f, 0x1c, 0x6a, 0xa5, 0x44, 0x87, 0x3f, 0xb8, 0xb8, 0xd7, - 0x5a, 0x9f, 0xde, 0x4d, 0x5a, 0xdf, 0x23, 0x62, 0x88, 0x6c, 0xca, 0x0b, - 0x40, 0xff, 0x8e, 0xe4, 0x0f, 0xc9, 0x2e, 0x3d, 0xc1, 0x16, 0x09, 0x4e, - 0xa5, 0x26, 0x56, 0x8a, 0x99, 0x60, 0xa4, 0x5f, 0x52, 0x3f, 0xc0, 0xe6, - 0x20, 0x5d, 0xfd, 0xa7, 0xb4, 0x8d, 0x1e, 0xeb, 0x53, 0x9d, 0xd1, 0x4a, - 0x5d, 0x18, 0x43, 0xcd, 0x01, 0x67, 0x6b, 0xac, 0x30, 0x34, 0x2f, 0xbd, - 0x38, 0xd8, 0x9c, 0x8e, 0xb3, 0xe5, 0x79, 0x65, 0x2d, 0xb9, 0xa5, 0xe7, - 0xa9, 0x3a, 0x48, 0x7e, 0x77, 0xb8, 0xf7, 0xf2, 0xc7, 0xea, 0xbd, 0xde, - 0xaa, 0xd5, 0xe4, 0xbc, 0x4a, 0x21, 0x39, 0xc0, 0xe2, 0xe5, 0x5e, 0xb5, - 0x1e, 0x56, 0xd8, 0x97, 0x49, 0xf8, 0x74, 0xe5, 0xe2, 0x5e, 0xff, 0x06, - 0xd9, 0xff, 0x0d, 0xe1, 0x9f, 0x2a, 0x66, 0xae, 0x6f, 0xd3, 0x46, 0x54, - 0x76, 0x35, 0x87, 0x04, 0x63, 0x4b, 0x80, 0x61, 0x55, 0xbc, 0x55, 0x3f, - 0x56, 0x85, 0x4c, 0x80, 0xb0, 0x52, 0xa0, 0x87, 0x6d, 0xea, 0x5e, 0xbd, - 0xc7, 0x4e, 0x39, 0x93, 0xd8, 0x18, 0xd6, 0xc8, 0x9c, 0x8e, 0x72, 0x5d, - 0x3a, 0xcf, 0xeb, 0x1e, 0xc3, 0x65, 0xbb, 0x7a, 0x0e, 0xad, 0xc4, 0x4e, - 0x86, 0x34, 0x54, 0xe4, 0x55, 0xc7, 0xf5, 0xf8, 0x12, 0x3d, 0xd3, 0x0f, - 0xee, 0xa2, 0x54, 0xde, 0xc5, 0x77, 0xee, 0xb2, 0xaa, 0x26, 0x11, 0xea, - 0xc5, 0xda, 0x32, 0xd3, 0x1b, 0xbe, 0xb7, 0xcc, 0xd4, 0x8a, 0xb7, 0x61, - 0x0c, 0x55, 0x40, 0xc0, 0xfe, 0x8b, 0x75, 0x89, 0xde, 0x49, 0xc0, 0x7c, - 0x54, 0xd8, 0x43, 0x73, 0x8f, 0xf1, 0xd8, 0xd5, 0x18, 0xdb, 0x02, 0x77, - 0xee, 0x57, 0xea, 0x34, 0x3d, 0x87, 0x5d, 0x70, 0xff, 0xdc, 0xad, 0x9d, - 0xc5, 0x17, 0x0e, 0xef, 0xe9, 0xdc, 0x53, 0x43, 0xcd, 0xb3, 0x13, 0xe4, - 0x9c, 0xff, 0xfa, 0x71, 0x6e, 0xf8, 0xb7, 0x0b, 0x18, 0xea, 0xf2, 0x2b, - 0xfb, 0x3c, 0x79, 0x41, 0x2e, 0x0a, 0x7a, 0x1b, 0x67, 0x9d, 0xeb, 0xc9, - 0xdb, 0x34, 0xbc, 0xdd, 0x8f, 0xe8, 0x8c, 0x38, 0x73, 0xb4, 0xeb, 0x8d, - 0xea, 0xa2, 0x41, 0xa1, 0x36, 0x36, 0x8d, 0x8a, 0x67, 0x75, 0x29, 0x40, - 0x67, 0x13, 0x5b, 0x1f, 0xdd, 0x4e, 0x27, 0x0a, 0x1e, 0xe1, 0xeb, 0x73, - 0x73, 0xc2, 0xae, 0x55, 0x6c, 0xab, 0x8c, 0x2e, 0x39, 0xf2, 0x14, 0xeb, - 0xa7, 0x48, 0xec, 0x3e, 0x3c, 0x60, 0xbc, 0x4c, 0x12, 0x82, 0x71, 0x5b, - 0xd0, 0x31, 0x90, 0xe7, 0x1d, 0x80, 0x9b, 0x42, 0x11, 0xe7, 0x2b, 0x57, - 0xd2, 0x23, 0xe9, 0xa5, 0x28, 0x6d, 0xd1, 0x01, 0x5d, 0x25, 0x98, 0x63, - 0xff, 0xe2, 0xfd, 0x19, 0x39, 0xb9, 0x3f, 0xa9, 0x12, 0xbb, 0x05, 0x12, - 0x1b, 0xe1, 0x30, 0x9b, 0x4b, 0x0d, 0xd6, 0xa7, 0xc0, 0x78, 0x26, 0x58, - 0x72, 0xa2, 0xfe, 0x48, 0x91, 0x30, 0x40, 0x93, 0x22, 0x9a, 0x0a, 0xa6, - 0x0c, 0xb5, 0xd6, 0xec, 0x81, 0xbc, 0x04, 0x2a, 0xcb, 0x97, 0xed, 0x14, - 0x96, 0x3c, 0xaa, 0x1d, 0x33, 0x7b, 0x0f, 0xe7, 0xd8, 0x03, 0x85, 0xf8, - 0xb4, 0xbb, 0xae, 0x7b, 0x22, 0xab, 0xec, 0x53, 0xc5, 0x6b, 0xaa, 0x48, - 0x65, 0x59, 0x33, 0x72, 0x57, 0x63, 0xdb, 0x7d, 0xf7, 0x3e, 0xb7, 0x1b, - 0xa8, 0x01, 0xe3, 0x95, 0x5f, 0x42, 0xde, 0x5e, 0x4b, 0x5c, 0xc8, 0x4b, - 0x43, 0x4c, 0x74, 0x06, 0xe2, 0x94, 0x08, 0x2d, 0x81, 0x18, 0x1d, 0x97, - 0xa0, 0xf5, 0x8d, 0xe3, 0x22, 0x5d, 0xda, 0xc0, 0xb9, 0xce, 0x4e, 0x0d, - 0x47, 0x00, 0x9c, 0x79, 0xeb, 0x2b, 0x90, 0xfb, 0x78, 0xcc, 0xd6, 0xc6, - 0xcf, 0xa5, 0x62, 0x19, 0xdb, 0x03, 0x8e, 0x94, 0xb6, 0x83, 0x7f, 0x64, - 0x54, 0xc1, 0x4c, 0xd2, 0x81, 0xdc, 0xe9, 0xde, 0x62, 0x3c, 0x9f, 0x9f, - 0x83, 0x4c, 0xfa, 0x00, 0x46, 0xb5, 0xb1, 0x4a, 0x60, 0x03, 0xfc, 0xe0, - 0xaf, 0x74, 0xc3, 0x38, 0x40, 0x85, 0xda, 0x42, 0x88, 0x23, 0x6b, 0x9a, - 0x71, 0x5d, 0x30, 0x1e, 0x69, 0xfe, 0x2a, 0x4a, 0x2c, 0x36, 0x94, 0x5b, - 0x64, 0x1a, 0x96, 0x10, 0x04, 0x1e, 0x51, 0x92, 0xed, 0x93, 0x72, 0x3b, - 0xe0, 0x0e, 0xe6, 0xf0, 0x91, 0x84, 0x0a, 0x70, 0x1f, 0x87, 0x8f, 0x76, - 0x7c, 0xa1, 0xc0, 0x3c, 0xd8, 0x50, 0x58, 0x1c, 0x4b, 0x6b, 0x3d, 0xa0, - 0x3f, 0xb4, 0x24, 0xf5, 0x09, 0x7b, 0xff, 0x39, 0x39, 0xf6, 0x88, 0x00, - 0x53, 0xc8, 0xe7, 0xb0, 0x82, 0x34, 0xf9, 0x7c, 0x77, 0xcf, 0x6e, 0x1e, - 0x33, 0xe0, 0xee, 0x30, 0x6a, 0x16, 0xb4, 0xea, 0xd7, 0x03, 0x00, 0xc6, - 0x42, 0xb9, 0x6c, 0xa0, 0x34, 0x79, 0x98, 0x5a, 0x34, 0xf9, 0xc7, 0xa5, - 0x6b, 0x43, 0xe7, 0x14, 0xaf, 0x90, 0x42, 0x74, 0xa1, 0x4e, 0x64, 0x0e, - 0xf6, 0xac, 0x4c, 0x0d, 0x75, 0x74, 0xa1, 0x70, 0x25, 0xa7, 0xc9, 0x56, - 0xba, 0xa1, 0x13, 0xa3, 0x40, 0x77, 0x5f, 0x47, 0xd8, 0xab, 0x6e, 0x3d, - 0x37, 0x67, 0xb2, 0xdb, 0x85, 0xc7, 0xa4, 0x14, 0x1c, 0x4b, 0x16, 0x04, - 0xa7, 0x92, 0x7e, 0xd4, 0x78, 0xa9, 0xe0, 0xd6, 0x5b, 0x04, 0x8e, 0xf9, - 0xaa, 0x04, 0xdf, 0x74, 0xba, 0x71, 0xfb, 0xdd, 0x8f, 0xd8, 0x6d, 0xcf, - 0x02, 0xd0, 0x05, 0x34, 0x43, 0x71, 0x18, 0x02, 0x78, 0x97, 0xb2, 0x05, - 0x0f, 0xef, 0x21, 0x0a, 0x17, 0xe9, 0xda, 0x15, 0x32, 0xc1, 0x2a, 0xef, - 0xc6, 0x45, 0x53, 0x03, 0xf5, 0xf7, 0xa5, 0xed, 0xa5, 0x57, 0xce, 0x93, - 0x14, 0xfb, 0x14, 0x8e, 0xfe, 0xf9, 0xa1, 0x49, 0x3d, 0xe2, 0x23, 0xe6, - 0x2d, 0x8b, 0xee, 0x31, 0x5b, 0xeb, 0xce, 0x5b, 0x39, 0x6e, 0x03, 0xc1, - 0x1b, 0x56, 0x6f, 0x1e, 0x8d, 0x73, 0xf5, 0x10, 0x86, 0x54, 0x48, 0xa0, - 0xd1, 0x39, 0x7c, 0xe8, 0x78, 0xd0, 0x8f, 0xf4, 0x6d, 0x17, 0x9c, 0x8b, - 0xe6, 0x8b, 0xd9, 0xba, 0x7e, 0xb8, 0xd6, 0x1f, 0xd1, 0xfd, 0xb4, 0x63, - 0xe3, 0xc0, 0x9e, 0x7a, 0x6e, 0x62, 0x20, 0x42, 0x84, 0xd1, 0x9c, 0xe0, - 0x88, 0xfc, 0xc2, 0x19, 0xe2, 0x93, 0xb4, 0x69, 0x56, 0x3c, 0x3a, 0xf1, - 0xea, 0xe8, 0x05, 0xab, 0x83, 0x49, 0x35, 0x57, 0xc7, 0x77, 0x09, 0xdc, - 0xa7, 0x90, 0xe0, 0x0b, 0x8e, 0x7a, 0x39, 0x4d, 0xe8, 0x14, 0x82, 0x41, - 0x38, 0x50, 0x8d, 0x7c, 0xb8, 0x85, 0xdd, 0x19, 0x66, 0xac, 0xbc, 0xe2, - 0x11, 0xf3, 0xfb, 0xcf, 0x8f, 0xbf, 0xed, 0x47, 0x56, 0xa9, 0x83, 0x7b, - 0x8d, 0x07, 0xb5, 0xcb, 0x17, 0xed, 0xce, 0x9c, 0x2d, 0x6b, 0x4f, 0xeb, - 0xc9, 0x25, 0x1a, 0xc1, 0x82, 0x81, 0x85, 0x37, 0x4f, 0x93, 0xeb, 0x66, - 0xb9, 0x9a, 0x2f, 0x01, 0xb1, 0x6d, 0x00, 0xf8, 0xc0, 0x2e, 0x78, 0x12, - 0x60, 0x03, 0xf5, 0x98, 0x03, 0xd2, 0x6f, 0x96, 0x9a, 0x42, 0x00, 0x08, - 0x0d, 0x80, 0xd7, 0x27, 0x05, 0x47, 0x13, 0x5b, 0xe0, 0xb8, 0x65, 0xa5, - 0xcd, 0x04, 0x0d, 0x85, 0x34, 0x50, 0x5b, 0x6a, 0x30, 0x88, 0x2a, 0xe1, - 0xbe, 0x14, 0xdc, 0x61, 0xf6, 0xb1, 0x9e, 0x0c, 0x65, 0x69, 0xa0, 0xb4, - 0xca, 0xdc, 0xb0, 0xff, 0x90, 0xbf, 0xb5, 0x30, 0xba, 0x17, 0xe6, 0xa0, - 0x0f, 0x0e, 0x62, 0xf2, 0x40, 0x65, 0x38, 0x8a, 0xa7, 0x00, 0x1e, 0x8b, - 0xac, 0xa0, 0x88, 0x59, 0x79, 0xa7, 0xf0, 0xaa, 0xd1, 0x9f, 0x5e, 0x4d, - 0x71, 0x35, 0x59, 0x2d, 0x27, 0x0b, 0xa6, 0x02, 0x4d, 0x66, 0x43, 0xc7, - 0x1e, 0xf1, 0x94, 0x34, 0x61, 0xc5, 0xa4, 0xa0, 0xf7, 0x6a, 0x6f, 0xbe, - 0x66, 0x6c, 0x90, 0x3a, 0x84, 0xe5, 0xe8, 0xca, 0xd0, 0xc2, 0x98, 0x30, - 0xb4, 0xa3, 0x6c, 0x35, 0x31, 0xd7, 0x33, 0xf5, 0x8c, 0x4d, 0x35, 0x58, - 0xcf, 0xc8, 0xde, 0x74, 0x80, 0xbb, 0xb1, 0x25, 0x5e, 0x84, 0x23, 0x7c, - 0xe1, 0xfd, 0x48, 0x4b, 0x4d, 0xe4, 0x33, 0xcd, 0xd6, 0x3b, 0x8f, 0x53, - 0x7d, 0x06, 0xa6, 0xb5, 0x06, 0xcc, 0x4d, 0x6f, 0x5e, 0x30, 0xff, 0xf8, - 0xb5, 0xb4, 0x4f, 0xc3, 0xa5, 0xe5, 0x09, 0x14, 0x82, 0x74, 0x1f, 0x6a, - 0xb3, 0xce, 0x6b, 0x7b, 0x1e, 0x9c, 0xdb, 0xf1, 0x11, 0x7f, 0xc8, 0x7a, - 0x72, 0x63, 0xe2, 0x17, 0x13, 0x35, 0xba, 0xec, 0xe4, 0x29, 0xf5, 0xb3, - 0x32, 0xe8, 0xda, 0x82, 0xa9, 0x87, 0xc3, 0xc5, 0xc2, 0x56, 0x67, 0xc5, - 0x1c, 0xaa, 0x1a, 0x6e, 0x29, 0x9e, 0x8f, 0xfd, 0xe8, 0x53, 0xb9, 0x9c, - 0x73, 0x43, 0x5f, 0xde, 0x55, 0x44, 0xa0, 0x07, 0x36, 0xee, 0x5c, 0x9a, - 0x10, 0x2f, 0xab, 0x29, 0xc2, 0x6e, 0xd7, 0x8d, 0x8c, 0xaf, 0x60, 0x57, - 0x7c, 0x36, 0x5c, 0x56, 0x36, 0x53, 0xb1, 0x6e, 0xfe, 0x9a, 0xcc, 0x9b, - 0x83, 0xe7, 0x66, 0x33, 0xf0, 0x6d, 0xfc, 0x23, 0x5b, 0x3a, 0x1b, 0xf6, - 0x92, 0x36, 0x6c, 0x1a, 0xcb, 0x38, 0x3d, 0x1b, 0xc5, 0x08, 0x53, 0x48, - 0x94, 0x10, 0x00, 0xe7, 0x24, 0x03, 0xde, 0x1b, 0xce, 0x44, 0x5e, 0x47, - 0xdd, 0x57, 0x13, 0xe3, 0x75, 0x25, 0x33, 0x47, 0xf2, 0x95, 0x71, 0xe1, - 0x30, 0x3b, 0xe4, 0x33, 0xae, 0xc0, 0xfa, 0xef, 0xc5, 0x03, 0xd2, 0x96, - 0x10, 0xec, 0x97, 0xf0, 0xd5, 0xe0, 0x76, 0x6b, 0x5f, 0x8e, 0x93, 0x13, - 0xa8, 0x6d, 0x71, 0xaf, 0x6a, 0xe1, 0x2e, 0x98, 0x53, 0x30, 0x3b, 0xb1, - 0x14, 0x60, 0x40, 0xbb, 0x6e, 0xc1, 0xf3, 0x78, 0x56, 0x85, 0x67, 0x7d, - 0xab, 0x58, 0x76, 0x58, 0x64, 0x2f, 0x63, 0xeb, 0x02, 0x1a, 0x1f, 0xb1, - 0x5f, 0x61, 0xaa, 0xe8, 0x5a, 0xa3, 0xea, 0xd4, 0x91, 0xf4, 0x7c, 0xf7, - 0xde, 0x5b, 0x19, 0xe6, 0x21, 0x70, 0xb5, 0x99, 0x48, 0xd6, 0xea, 0xea, - 0xbb, 0xd9, 0x08, 0x97, 0x57, 0xd8, 0x19, 0x12, 0xd7, 0x47, 0x5d, 0x6d, - 0x33, 0x90, 0xab, 0x52, 0x14, 0x39, 0x9a, 0x75, 0xa8, 0x21, 0x23, 0x71, - 0x93, 0x2e, 0xfa, 0x76, 0x89, 0x09, 0x03, 0x34, 0x8d, 0xd9, 0xff, 0xf4, - 0x87, 0x8c, 0x09, 0x67, 0xc9, 0x0d, 0xc2, 0xac, 0xee, 0x9c, 0x67, 0x75, - 0xfc, 0xd6, 0x73, 0x35, 0x0a, 0x37, 0x83, 0x49, 0x0c, 0xf3, 0x41, 0x5d, - 0xda, 0x57, 0xaa, 0x33, 0xaa, 0xb0, 0x3d, 0x03, 0xee, 0x3b, 0x21, 0xe1, - 0x73, 0x76, 0x7c, 0xc5, 0xb8, 0x84, 0x39, 0x5c, 0xbf, 0x7e, 0x7e, 0x5a, - 0x49, 0xd6, 0x04, 0x91, 0xfb, 0x27, 0xbe, 0xf0, 0xaa, 0x4f, 0xd0, 0x20, - 0x8c, 0x60, 0xbf, 0x26, 0x42, 0x9f, 0x96, 0xe4, 0x2d, 0x87, 0xae, 0x65, - 0xb1, 0x47, 0xd1, 0xc9, 0x51, 0x72, 0x6e, 0xa1, 0x67, 0xeb, 0xd9, 0xfe, - 0x1d, 0xb2, 0xb0, 0x89, 0x85, 0xa9, 0x9a, 0x0e, 0x79, 0xfd, 0xcb, 0xfb, - 0x03, 0xa5, 0xaf, 0x04, 0xa5, 0xcf, 0xc9, 0xc2, 0x7e, 0x91, 0xf5, 0xdf, - 0x46, 0x2b, 0x6b, 0x44, 0xf6, 0x3c, 0x0d, 0x1d, 0xd0, 0x42, 0x1f, 0x27, - 0x0e, 0x99, 0x46, 0xb5, 0x30, 0xfe, 0xdd, 0xea, 0xa7, 0x57, 0xee, 0x0c, - 0x6c, 0x1f, 0x8a, 0xc6, 0x29, 0x06, 0x13, 0xd8, 0x99, 0x4c, 0x96, 0xc1, - 0x2d, 0x61, 0x54, 0x54, 0x6e, 0x0d, 0x88, 0xd0, 0xf8, 0x24, 0x80, 0x8c, - 0x0c, 0x63, 0x58, 0x7d, 0xb0, 0x97, 0x01, 0x9a, 0x06, 0xa7, 0xd5, 0x4e, - 0x88, 0xb8, 0xfa, 0xce, 0xd3, 0x87, 0x8b, 0xdd, 0x04, 0x79, 0x13, 0x5d, - 0x9d, 0x31, 0x31, 0x02, 0xb1, 0x63, 0xc2, 0xe0, 0xea, 0x95, 0x20, 0xe2, - 0x73, 0x9a, 0xe0, 0xab, 0x28, 0xbb, 0x95, 0xce, 0x0e, 0x7a, 0x0e, 0xd8, - 0x87, 0x54, 0x3f, 0x01, 0x06, 0x9d, 0x0e, 0x29, 0x6a, 0xf0, 0x71, 0xc1, - 0x9f, 0x96, 0xc9, 0x74, 0x2e, 0xfe, 0xb8, 0x4c, 0x7f, 0xfc, 0x64, 0xfc, - 0xf2, 0xe7, 0xeb, 0x88, 0x3c, 0x31, 0xb3, 0x45, 0x48, 0xcf, 0x4c, 0xb1, - 0x52, 0x42, 0xc8, 0x39, 0x30, 0x90, 0x2c, 0xeb, 0x09, 0x71, 0x21, 0x52, - 0x50, 0x0b, 0x4e, 0x07, 0x6c, 0x6b, 0x1c, 0xd7, 0x2b, 0x65, 0x76, 0x1e, - 0xbb, 0xa7, 0xca, 0x79, 0xda, 0xe3, 0xe5, 0x63, 0x37, 0x6d, 0xd8, 0x8a, - 0x7e, 0x68, 0x01, 0xd4, 0xaf, 0xe5, 0x90, 0x28, 0xc8, 0x14, 0x61, 0x78, - 0x74, 0xf1, 0xf0, 0x83, 0x79, 0xa0, 0xbc, 0x09, 0x75, 0x54, 0x3b, 0x9e, - 0x07, 0x94, 0xa8, 0x82, 0x14, 0xdf, 0xd6, 0x16, 0x62, 0xfa, 0x53, 0x59, - 0x79, 0x20, 0x44, 0x80, 0xc5, 0x72, 0xe0, 0x4c, 0x9b, 0x39, 0x17, 0x6a, - 0xcf, 0x06, 0x18, 0x71, 0x22, 0xf3, 0xd0, 0xb5, 0x15, 0x92, 0x93, 0x14, - 0x39, 0x09, 0x13, 0xc1, 0xc7, 0x63, 0xa0, 0x82, 0xad, 0xe3, 0x71, 0xcb, - 0x64, 0x2b, 0x5f, 0x53, 0x00, 0xa4, 0x9f, 0xfc, 0x97, 0x48, 0xc9, 0x63, - 0x19, 0xba, 0x53, 0x7a, 0x62, 0x99, 0xb0, 0xd1, 0x57, 0x31, 0x0f, 0x28, - 0xb2, 0xa1, 0xfc, 0x73, 0xfc, 0x45, 0x3a, 0x5f, 0x87, 0x39, 0x48, 0xd7, - 0x74, 0x85, 0x4d, 0x3a, 0xca, 0xb6, 0x15, 0xd3, 0xe0, 0x3b, 0x78, 0xa6, - 0x74, 0x1a, 0xe1, 0xe0, 0x90, 0xc3, 0x31, 0xd1, 0x4e, 0x3a, 0xc8, 0x49, - 0xa2, 0xd9, 0xc4, 0xa1, 0x19, 0xed, 0x31, 0xad, 0x74, 0xfc, 0x0c, 0xac, - 0xa1, 0x71, 0x77, 0x92, 0x14, 0xcc, 0x10, 0x73, 0x66, 0x5a, 0x65, 0x8a, - 0xf7, 0x98, 0xa8, 0x45, 0xfc, 0x98, 0xb6, 0xa1, 0x88, 0xc4, 0xac, 0x4a, - 0x98, 0xe5, 0x0a, 0x94, 0xf5, 0xb3, 0xc2, 0xa6, 0x0b, 0xf5, 0x9c, 0x01, - 0xfd, 0x55, 0x72, 0xb6, 0x30, 0x77, 0x69, 0x30, 0x87, 0x5f, 0xae, 0x7e, - 0xfc, 0x54, 0x1c, 0xca, 0x6a, 0x71, 0x92, 0xd3, 0xaf, 0xef, 0xce, 0x16, - 0x9b, 0x73, 0xf5, 0x87, 0xc3, 0x4f, 0x9a, 0x19, 0x33, 0xc6, 0x47, 0xda, - 0xc4, 0x87, 0x00, 0xcd, 0xf3, 0x98, 0x79, 0x84, 0x89, 0x04, 0xcf, 0xa0, - 0x2f, 0xa3, 0xad, 0xcb, 0x05, 0xe7, 0x97, 0x26, 0x32, 0x2a, 0xb1, 0x79, - 0xe5, 0x71, 0x19, 0xd1, 0x8d, 0x5a, 0xf3, 0x0c, 0x73, 0xba, 0x6d, 0xf4, - 0x43, 0x15, 0xfd, 0x58, 0xd9, 0x3f, 0xa0, 0xb4, 0xfd, 0x30, 0xa9, 0xcf, - 0xab, 0x0d, 0x90, 0xe7, 0x27, 0xe1, 0xc7, 0x3d, 0x69, 0x8f, 0x9c, 0xa0, - 0x90, 0xc6, 0x2a, 0x04, 0x55, 0x03, 0xd0, 0x24, 0x4e, 0xa0, 0x5a, 0x29, - 0x70, 0x80, 0xd0, 0x25, 0x1d, 0xc7, 0xfd, 0x0f, 0xed, 0xf1, 0xc3, 0xf3, - 0x3b, 0x0e, 0x1c, 0x72, 0xcb, 0x13, 0xe4, 0x41, 0xc7, 0xdb, 0xc7, 0xf2, - 0xa0, 0x1b, 0x35, 0x73, 0x89, 0xa6, 0xda, 0x6e, 0xbd, 0x1c, 0xfd, 0xde, - 0xe7, 0x01, 0x35, 0xf4, 0xe6, 0x0c, 0x72, 0x9f, 0x24, 0x23, 0x63, 0x5f, - 0xf4, 0xdc, 0xc2, 0x72, 0x5b, 0xb4, 0x84, 0x72, 0x28, 0x82, 0xc0, 0xba, - 0xf5, 0x28, 0xc0, 0x73, 0x55, 0x07, 0xad, 0xb6, 0x1f, 0xc8, 0x6e, 0x5c, - 0xac, 0x39, 0x56, 0x37, 0x72, 0x76, 0xac, 0x30, 0xcd, 0x02, 0x77, 0xe2, - 0xe2, 0xc5, 0x21, 0xc3, 0x53, 0x24, 0xaa, 0x84, 0x40, 0x6c, 0x78, 0x34, - 0x40, 0x05, 0x97, 0x27, 0x9a, 0x00, 0xee, 0x39, 0x2b, 0xac, 0x2b, 0x42, - 0xb6, 0x89, 0x3a, 0xa2, 0x28, 0xd6, 0xe5, 0xc4, 0x56, 0x70, 0xbb, 0xb2, - 0x73, 0x94, 0x1b, 0xbf, 0x42, 0x0d, 0x31, 0xee, 0x6b, 0x1e, 0xe5, 0xce, - 0xee, 0x05, 0x84, 0x81, 0x1e, 0x83, 0x5c, 0xcf, 0xde, 0x12, 0x77, 0x2c, - 0x88, 0x28, 0x32, 0x70, 0x28, 0x03, 0xd1, 0x99, 0xc1, 0x2c, 0xbc, 0x30, - 0x8c, 0x1a, 0xb7, 0x46, 0xf5, 0x83, 0xb7, 0xc2, 0x83, 0xb6, 0x9d, 0x04, - 0xbf, 0x1d, 0x7a, 0x94, 0x89, 0x8e, 0xe2, 0x9a, 0xc6, 0x74, 0x88, 0xf2, - 0x89, 0x29, 0x4b, 0x33, 0x04, 0x0d, 0x53, 0xec, 0x41, 0xf9, 0xd4, 0xaa, - 0xf4, 0x1a, 0x81, 0xce, 0x84, 0xdd, 0x71, 0x44, 0x4d, 0x8d, 0xfa, 0x95, - 0xe1, 0x92, 0x99, 0x68, 0x3b, 0xb1, 0x47, 0xbe, 0x95, 0x73, 0xd1, 0xe1, - 0xee, 0xa2, 0x90, 0x34, 0x74, 0x4f, 0x1a, 0xbc, 0x12, 0xe4, 0xb9, 0xb6, - 0xb9, 0xcb, 0xa4, 0xc5, 0xa9, 0x28, 0x43, 0x92, 0x63, 0x8f, 0x12, 0x97, - 0xa7, 0x81, 0x3c, 0xd0, 0xc1, 0xba, 0x08, 0xfa, 0xe6, 0x7e, 0xce, 0x51, - 0xea, 0xfd, 0xdc, 0xa3, 0xb5, 0x57, 0x9b, 0xec, 0x3e, 0xf9, 0xe6, 0xaa, - 0x63, 0x93, 0x50, 0x99, 0xab, 0x43, 0x98, 0x6c, 0xc4, 0x5b, 0xb4, 0xb3, - 0xed, 0x29, 0xe3, 0x43, 0x02, 0xbb, 0xc0, 0x73, 0x18, 0x0b, 0x51, 0x12, - 0x89, 0x04, 0x72, 0x2c, 0xaa, 0xd8, 0x3b, 0xc1, 0xed, 0xb9, 0xf2, 0xdb, - 0x36, 0xcc, 0x89, 0x40, 0x51, 0x07, 0x17, 0x5f, 0x4a, 0x38, 0x14, 0x76, - 0x53, 0xc7, 0xd9, 0x59, 0xbe, 0x21, 0x46, 0xf2, 0x68, 0x2f, 0x0b, 0x94, - 0x6b, 0x6d, 0xc7, 0x2e, 0x0d, 0x2e, 0x0a, 0x03, 0x86, 0x9b, 0x4b, 0x40, - 0xd8, 0x3f, 0xe0, 0x07, 0x05, 0x3e, 0x03, 0xd7, 0x73, 0xa3, 0xce, 0x2e, - 0x0a, 0xe5, 0x67, 0x62, 0x89, 0x3c, 0xd1, 0x30, 0x28, 0xa1, 0xf6, 0x01, - 0xb3, 0x2a, 0xe6, 0x24, 0x61, 0xbd, 0x83, 0x56, 0x8e, 0x48, 0xc4, 0x66, - 0xba, 0xa7, 0x5c, 0x75, 0x67, 0x06, 0x8a, 0x5a, 0xcb, 0xef, 0xef, 0x14, - 0x0b, 0x63, 0xc4, 0xde, 0xf6, 0x01, 0x8b, 0x68, 0xcb, 0xab, 0xdf, 0x5f, - 0xb7, 0x40, 0xf2, 0xb1, 0x9f, 0x3e, 0x16, 0x0c, 0xa6, 0x2b, 0xcf, 0x41, - 0x13, 0xed, 0xf3, 0xba, 0xf8, 0xfd, 0x0d, 0xa0, 0x8c, 0xe3, 0xc6, 0x89, - 0x38, 0x3a, 0xf2, 0x13, 0x6c, 0xd8, 0xde, 0x3d, 0x53, 0x13, 0x75, 0x80, - 0xb9, 0x77, 0xda, 0x7e, 0xf2, 0xad, 0x54, 0xb1, 0x8a, 0xfe, 0x11, 0xb1, - 0x3f, 0xb0, 0x9a, 0x0f, 0x97, 0xad, 0xeb, 0x44, 0xa1, 0x9d, 0x7f, 0x39, - 0x2d, 0x38, 0xb9, 0xbf, 0x61, 0x6e, 0x89, 0x45, 0x7f, 0x60, 0x54, 0x94, - 0x93, 0xf3, 0x66, 0x04, 0x69, 0x93, 0x82, 0x93, 0x92, 0x21, 0xfd, 0xfa, - 0xb7, 0x63, 0xbb, 0x70, 0x44, 0x65, 0xd2, 0xdb, 0x4c, 0xd4, 0xc3, 0x9a, - 0xaf, 0xd2, 0x90, 0x4b, 0x79, 0xa6, 0x00, 0x59, 0x68, 0x1b, 0x6c, 0x5c, - 0x5c, 0x7e, 0x08, 0x71, 0x2e, 0xff, 0xea, 0xe9, 0xf5, 0xd4, 0xd7, 0xf5, - 0xe0, 0xd3, 0x04, 0x34, 0x4c, 0xfe, 0x06, 0x42, 0x4a, 0x9f, 0x27, 0xac, - 0xad, 0x57, 0xca, 0xba, 0x72, 0x72, 0x71, 0x11, 0x6e, 0xcd, 0xb6, 0x32, - 0x94, 0xc7, 0xa9, 0x73, 0x68, 0x86, 0x7f, 0x79, 0xc2, 0x41, 0x80, 0x35, - 0x44, 0x30, 0x0b, 0xca, 0x71, 0xbc, 0xf8, 0xaa, 0x06, 0xa1, 0xde, 0x83, - 0xf3, 0xe9, 0xcc, 0x30, 0x9d, 0x54, 0x9f, 0x85, 0xaa, 0xa0, 0x1b, 0xcc, - 0xe9, 0xb0, 0x8a, 0xd5, 0xc6, 0x71, 0xfa, 0x78, 0xda, 0xf7, 0x4f, 0x63, - 0x4b, 0xda, 0x78, 0xf3, 0x34, 0x98, 0x18, 0xfc, 0x83, 0x79, 0x9c, 0xa3, - 0xb9, 0xf3, 0x0e, 0x38, 0xb7, 0xc0, 0x7b, 0x90, 0x4d, 0x34, 0x87, 0x95, - 0xd6, 0x13, 0x27, 0x03, 0x9d, 0x98, 0xac, 0x91, 0xe4, 0x05, 0x2b, 0x10, - 0x9a, 0x89, 0x9d, 0x7e, 0x2a, 0x2f, 0x09, 0xba, 0x42, 0x67, 0x9d, 0x27, - 0x31, 0x0f, 0x5e, 0xe6, 0x2a, 0x2e, 0x94, 0xc2, 0x3e, 0x1e, 0x75, 0x61, - 0xa4, 0x8a, 0x3d, 0x8a, 0x87, 0xc7, 0x5b, 0x27, 0x81, 0x67, 0xb3, 0x88, - 0x7d, 0x96, 0x2e, 0x37, 0x6a, 0x5e, 0xf0, 0xe4, 0x84, 0x47, 0xe4, 0xb3, - 0xdd, 0x93, 0x3b, 0x86, 0x57, 0x7f, 0xdc, 0xa7, 0x79, 0x42, 0xca, 0x29, - 0xa1, 0xab, 0x20, 0x2c, 0xb8, 0x4e, 0x47, 0xf1, 0xd8, 0x6a, 0xfe, 0xc5, - 0xe4, 0x04, 0x88, 0xeb, 0x1a, 0xfe, 0x0e, 0xe5, 0x13, 0x17, 0x1e, 0x40, - 0x9e, 0x58, 0x5e, 0x88, 0x0f, 0x31, 0x6e, 0xef, 0x62, 0x90, 0x99, 0x79, - 0xff, 0x2d, 0x52, 0x86, 0x5d, 0x0d, 0x81, 0x63, 0xba, 0xc7, 0x83, 0x34, - 0xae, 0x1a, 0x4c, 0x9b, 0x74, 0x9d, 0x5a, 0x73, 0x57, 0x96, 0xfc, 0x78, - 0xe5, 0x01, 0x88, 0x48, 0x7f, 0xce, 0x49, 0xbf, 0x96, 0xe7, 0x78, 0x15, - 0xcd, 0xbb, 0xff, 0x58, 0x9e, 0xc7, 0x94, 0xbd, 0x6a, 0x14, 0xaf, 0x9a, - 0x34, 0x6a, 0xaa, 0xa2, 0xde, 0xbb, 0x49, 0x38, 0x98, 0xc5, 0x09, 0xfb, - 0x13, 0x37, 0x92, 0x7a, 0xa2, 0x71, 0xfc, 0x44, 0xeb, 0xfe, 0x41, 0xe7, - 0x75, 0x62, 0x0e, 0xf9, 0xdf, 0x9f, 0xff, 0x86, 0xdb, 0x68, 0xce, 0xdd, - 0xfe, 0xac, 0xfa, 0xfe, 0x67, 0x93, 0x97, 0xdb, 0x60, 0x64, 0xff, 0xf3, - 0x5f, 0xfa, 0xf3, 0xdf, 0xf3, 0xcf, 0x7f, 0xe3, 0xc5, 0xc4, 0x8a, 0xff, - 0xf0, 0x13, 0x56, 0x07, 0xcb, 0x9f, 0xff, 0xa6, 0x3f, 0xff, 0x59, 0x7e, - 0xfc, 0xf9, 0x6f, 0xfd, 0xf3, 0x9f, 0x71, 0x16, 0xce, 0xfa, 0xbe, 0xff, - 0x76, 0x83, 0xc7, 0x1f, 0x18, 0x4d, 0x79, 0x41, 0x64, 0x27, 0xb0, 0x46, - 0x8b, 0x5e, 0xdf, 0xf0, 0x8d, 0x8e, 0x75, 0x03, 0x22, 0x8f, 0xd0, 0x70, - 0x20, 0x76, 0xc1, 0x75, 0xa7, 0x80, 0x30, 0x40, 0x15, 0xcc, 0xee, 0x00, - 0xcb, 0x46, 0xc8, 0x45, 0x71, 0xe1, 0xbb, 0xc7, 0x43, 0x38, 0x4b, 0x51, - 0x51, 0x0d, 0x85, 0xd1, 0x94, 0xd0, 0x44, 0x4c, 0xa7, 0x93, 0x27, 0x00, - 0xea, 0x12, 0x2c, 0x1f, 0x88, 0x47, 0x1e, 0xbe, 0xa1, 0xfe, 0x84, 0xea, - 0xb1, 0x6e, 0x01, 0xcf, 0x6b, 0x24, 0x4d, 0xb8, 0x74, 0x0c, 0xaa, 0xaf, - 0xb8, 0xc7, 0x50, 0x01, 0xd6, 0x9f, 0x85, 0xd1, 0x26, 0xe2, 0x46, 0x8b, - 0xfb, 0xd4, 0xb8, 0x26, 0xda, 0xc4, 0x13, 0x86, 0xfa, 0x82, 0xfa, 0xee, - 0x15, 0x96, 0xf0, 0x86, 0x9e, 0xf1, 0x4f, 0xe3, 0xdd, 0x5a, 0x87, 0x9b, - 0x6f, 0x10, 0x3a, 0x17, 0x16, 0x7b, 0xc5, 0xc6, 0xc5, 0x8f, 0x9e, 0x3b, - 0x83, 0xab, 0x5f, 0x9d, 0xe3, 0x71, 0x6c, 0x66, 0x79, 0xe0, 0x63, 0x4d, - 0xb7, 0x86, 0xd0, 0xef, 0x3b, 0xe3, 0x92, 0x4e, 0xe5, 0xf6, 0x0a, 0xd5, - 0x09, 0x18, 0x97, 0x94, 0xd9, 0xbc, 0xd2, 0x56, 0x01, 0xf7, 0x19, 0x8c, - 0xe1, 0x64, 0xce, 0xe8, 0x83, 0x8e, 0x32, 0xeb, 0x01, 0xbb, 0x37, 0x00, - 0x56, 0x77, 0x41, 0xc6, 0xeb, 0x93, 0x84, 0x19, 0x31, 0xfa, 0x0e, 0x8b, - 0x41, 0xb7, 0xfe, 0x89, 0x9b, 0xdf, 0x0c, 0xde, 0xdd, 0xff, 0x76, 0xce, - 0x07, 0xd6, 0xe0, 0x8a, 0x90, 0x9a, 0xee, 0x7f, 0x2e, 0xcb, 0x83, 0xce, - 0x72, 0x43, 0x54, 0x33, 0x66, 0xc6, 0xdd, 0x0e, 0xa3, 0x32, 0x1e, 0x42, - 0x80, 0x33, 0x45, 0x00, 0x8f, 0x4c, 0xb2, 0xcb, 0x1d, 0x44, 0x54, 0x16, - 0xcb, 0x5e, 0x5f, 0x63, 0x70, 0x6f, 0xbb, 0x2f, 0xee, 0xf1, 0x0f, 0x7b, - 0x3a, 0xf8, 0xad, 0x89, 0x86, 0x8d, 0x5b, 0xbd, 0x65, 0x57, 0x71, 0xc4, - 0x15, 0xf6, 0x06, 0x19, 0x7b, 0x79, 0xd1, 0xf5, 0xfa, 0x0b, 0xea, 0xfe, - 0x45, 0x67, 0x73, 0x1c, 0x62, 0x0e, 0x17, 0x2f, 0x2c, 0xd1, 0xaa, 0x4a, - 0x19, 0x23, 0xc4, 0xe9, 0x64, 0xf6, 0x5f, 0x76, 0xb9, 0xc9, 0x49, 0x09, - 0x0a, 0x51, 0xc7, 0x21, 0x6f, 0x8e, 0x38, 0xbe, 0xa5, 0x86, 0x5b, 0x60, - 0x9b, 0x8f, 0xab, 0xce, 0x56, 0xc6, 0x5b, 0x03, 0x6d, 0xb9, 0xeb, 0xf3, - 0x00, 0xa5, 0x11, 0xce, 0x19, 0x37, 0xd1, 0xf8, 0xc5, 0x45, 0x1d, 0x29, - 0x34, 0x39, 0xe9, 0x60, 0x1d, 0xae, 0x35, 0x2d, 0xd6, 0xc9, 0xde, 0xef, - 0xce, 0x78, 0x4c, 0xe3, 0xe4, 0xbf, 0x66, 0x91, 0x5f, 0x27, 0xa3, 0x3e, - 0x6a, 0x53, 0x07, 0xa2, 0x1c, 0xc1, 0x76, 0xce, 0x1f, 0xda, 0x6f, 0x2a, - 0x6a, 0xe8, 0x5e, 0xd4, 0x54, 0x25, 0xa3, 0xf2, 0x08, 0xad, 0x32, 0xff, - 0x71, 0x4e, 0xf7, 0xcb, 0x38, 0x74, 0x1d, 0x93, 0xc0, 0xf9, 0x74, 0xcf, - 0xaa, 0x9c, 0xfb, 0x5e, 0x78, 0xff, 0x80, 0x2f, 0x7f, 0x47, 0xa6, 0xf0, - 0xf1, 0xd3, 0xf3, 0xf0, 0xc4, 0xb5, 0x5b, 0x03, 0x89, 0x59, 0x9e, 0x86, - 0x2d, 0x2a, 0x71, 0xe2, 0x86, 0x48, 0x76, 0x84, 0x7e, 0xf6, 0x80, 0x59, - 0x42, 0xba, 0xd7, 0xe1, 0x95, 0x84, 0x30, 0xd7, 0x22, 0xe0, 0x96, 0x1c, - 0x11, 0xe7, 0x5a, 0x44, 0xca, 0x5c, 0xaa, 0x06, 0x8d, 0x48, 0xbd, 0x36, - 0x24, 0x2c, 0x14, 0x60, 0xdd, 0x8f, 0xd1, 0x60, 0x4f, 0xe4, 0x52, 0x5b, - 0x6e, 0xd2, 0x24, 0x58, 0xa0, 0x4e, 0x4b, 0xc0, 0x26, 0xf5, 0x4a, 0xc8, - 0x9e, 0x9d, 0x9f, 0x6c, 0x48, 0xe6, 0x54, 0x01, 0x55, 0xaa, 0x2a, 0x1a, - 0x2b, 0x0b, 0x6c, 0xc2, 0xf1, 0xf5, 0xcc, 0xc4, 0xc4, 0x18, 0x14, 0xc2, - 0x4b, 0xd6, 0x6f, 0x83, 0x06, 0x88, 0x8d, 0xbe, 0xc6, 0xb7, 0x14, 0xc9, - 0xa3, 0xb4, 0x1f, 0xbb, 0x08, 0x96, 0x41, 0xbd, 0x43, 0xf4, 0x27, 0x7d, - 0x77, 0x92, 0xf6, 0x8d, 0x7d, 0x45, 0xda, 0x7f, 0x59, 0x05, 0xd3, 0x91, - 0xe4, 0x32, 0x20, 0xa2, 0x1b, 0x2f, 0x17, 0xe5, 0x08, 0x2d, 0x32, 0x82, - 0xbc, 0x9e, 0x54, 0x26, 0x44, 0x38, 0xba, 0x17, 0xfa, 0x08, 0x21, 0x4f, - 0x11, 0x2e, 0x4a, 0xe1, 0xd6, 0x85, 0x10, 0x2b, 0x1b, 0xc0, 0xe8, 0x83, - 0x18, 0xf0, 0x9e, 0x56, 0xa1, 0x0f, 0x6e, 0x37, 0xde, 0xda, 0x83, 0xbc, - 0x5d, 0x0c, 0x95, 0x4b, 0x74, 0x6e, 0xfa, 0x66, 0x9b, 0x49, 0x1c, 0x0b, - 0xfa, 0x8c, 0x31, 0xe6, 0x23, 0x15, 0xf2, 0xe7, 0x24, 0xcd, 0xaf, 0x42, - 0x4e, 0xd5, 0xed, 0x8e, 0x3a, 0x14, 0x43, 0x10, 0x2f, 0x49, 0x5c, 0x7f, - 0x12, 0xa0, 0x07, 0x9b, 0x85, 0x0d, 0x25, 0x72, 0x87, 0x51, 0x54, 0x11, - 0x4d, 0xea, 0xa5, 0x8d, 0x7a, 0x1d, 0xd2, 0x9d, 0x35, 0x01, 0x16, 0x90, - 0x51, 0x5c, 0x4a, 0x23, 0x72, 0xd7, 0x1f, 0xdd, 0x3d, 0x20, 0x13, 0xc2, - 0xa0, 0x0b, 0x94, 0x18, 0xb0, 0x83, 0xa2, 0xd2, 0x75, 0xbd, 0x7e, 0x09, - 0xe1, 0x18, 0xf8, 0x1a, 0xa4, 0x35, 0x31, 0xe3, 0x0e, 0x93, 0xd8, 0x09, - 0xc4, 0x5b, 0x57, 0xc2, 0xab, 0x31, 0x81, 0x7d, 0x28, 0x19, 0x97, 0xe7, - 0x79, 0xa3, 0x34, 0x06, 0xcc, 0xe6, 0x0a, 0x2d, 0x81, 0x11, 0x75, 0xd0, - 0xac, 0x1f, 0xb2, 0xf2, 0x18, 0xb4, 0xfe, 0x32, 0x39, 0xa9, 0x1e, 0x95, - 0xea, 0x32, 0x19, 0xf1, 0xcf, 0x50, 0x7f, 0xc7, 0xf8, 0xd3, 0x44, 0x90, - 0xc6, 0x9f, 0xce, 0xa5, 0xef, 0xef, 0x30, 0x0f, 0x6f, 0xfc, 0xd2, 0xc7, - 0xef, 0xc2, 0x03, 0x19, 0x1f, 0x96, 0x89, 0xdb, 0xd0, 0xdb, 0xb1, 0x8a, - 0x62, 0x13, 0xd1, 0xe7, 0xee, 0x83, 0x67, 0xeb, 0x3e, 0x4c, 0x4e, 0xe3, - 0x97, 0xe4, 0x64, 0xdb, 0x6a, 0x4c, 0xbb, 0x67, 0x92, 0x77, 0x7b, 0x04, - 0x2e, 0x3e, 0x54, 0xbc, 0x3f, 0xc5, 0x85, 0xef, 0x51, 0xb3, 0x76, 0xef, - 0x14, 0x45, 0x83, 0x3f, 0x94, 0x8b, 0xec, 0xe5, 0xd8, 0x9c, 0xc6, 0x75, - 0x6d, 0x43, 0xe2, 0xb8, 0x7a, 0x3b, 0x1e, 0x57, 0x08, 0x73, 0x6a, 0x84, - 0xa3, 0xaa, 0x76, 0xa9, 0x43, 0xf1, 0xa8, 0x6a, 0xb3, 0x45, 0x8d, 0x52, - 0x4d, 0xf5, 0x06, 0xb6, 0xf3, 0xbe, 0x0e, 0x11, 0x94, 0x88, 0xfc, 0x91, - 0xa5, 0x3e, 0xff, 0x98, 0x5d, 0xcd, 0x79, 0x8c, 0x6e, 0x13, 0x00, 0x16, - 0x5b, 0x0d, 0xfd, 0xe4, 0xa8, 0xfb, 0xbf, 0x74, 0xea, 0x60, 0x31, 0xfe, - 0xfe, 0x06, 0x8d, 0x3d, 0xe1, 0xca, 0x78, 0x82, 0xd8, 0x37, 0xe6, 0x1b, - 0xb4, 0xa3, 0xed, 0x0d, 0x21, 0x9e, 0xcc, 0x9c, 0xce, 0x23, 0xbd, 0x5f, - 0x2f, 0x7c, 0x3c, 0x53, 0x90, 0x0b, 0x8b, 0x30, 0xd3, 0x9f, 0xe3, 0x7b, - 0xa8, 0x8e, 0x01, 0xe2, 0xfb, 0x8c, 0xf0, 0xd6, 0xe6, 0x49, 0xcc, 0x5a, - 0x07, 0x12, 0xc7, 0xd7, 0xc9, 0xe1, 0x03, 0xcb, 0x9f, 0x32, 0x5c, 0xf0, - 0x67, 0x85, 0x09, 0xd7, 0x06, 0x06, 0x23, 0x17, 0xab, 0x5a, 0x20, 0x96, - 0x20, 0x90, 0x51, 0xee, 0xe2, 0x04, 0xb2, 0xab, 0x10, 0xbe, 0x99, 0xc8, - 0xc3, 0xe1, 0xdd, 0x02, 0x6c, 0xb8, 0x82, 0x39, 0x80, 0x55, 0x48, 0x80, - 0x29, 0x39, 0xe1, 0x3a, 0x82, 0x20, 0x1f, 0xe3, 0x6b, 0xb4, 0x94, 0x41, - 0xc0, 0x94, 0x02, 0x25, 0x10, 0x6d, 0x02, 0xf0, 0xe6, 0x33, 0x1c, 0xae, - 0xe5, 0x10, 0x48, 0x89, 0x20, 0xe0, 0x23, 0x33, 0xa2, 0x6b, 0x7a, 0xe6, - 0xf0, 0x9a, 0x9d, 0x28, 0xa5, 0x00, 0x2e, 0xca, 0x90, 0x39, 0x26, 0xfd, - 0xac, 0xa7, 0x8a, 0x16, 0x2a, 0x01, 0x71, 0xc8, 0xe7, 0x45, 0xf4, 0x19, - 0x90, 0x1a, 0x1b, 0x8e, 0x8e, 0xfb, 0x7d, 0x20, 0xe2, 0x4a, 0x25, 0xc1, - 0x26, 0xb2, 0x0b, 0xf8, 0xc1, 0x99, 0x40, 0x3b, 0xd1, 0x82, 0x41, 0x95, - 0x40, 0x1f, 0x73, 0xf5, 0x1f, 0x18, 0xf9, 0x4b, 0xeb, 0xbe, 0x40, 0x69, - 0x77, 0x92, 0x94, 0x02, 0x43, 0x9b, 0x53, 0xfd, 0xc2, 0x3e, 0xda, 0x80, - 0x92, 0x0e, 0x1b, 0x01, 0x07, 0x03, 0x7a, 0xa6, 0x60, 0x44, 0xf9, 0x03, - 0x83, 0xab, 0x18, 0x98, 0x8b, 0xdc, 0x99, 0xa5, 0x68, 0x40, 0xfb, 0xd3, - 0x06, 0x6f, 0x53, 0x72, 0x4f, 0x98, 0x41, 0x07, 0xd1, 0x22, 0x88, 0xa1, - 0x51, 0xfe, 0xb2, 0x1a, 0xe2, 0xc0, 0x7f, 0xf0, 0xfc, 0xba, 0xc9, 0x94, - 0x31, 0xc0, 0x35, 0x3e, 0xf5, 0x56, 0xeb, 0xb1, 0xf0, 0x72, 0x13, 0x48, - 0x93, 0x53, 0xff, 0x61, 0x52, 0x9c, 0xd7, 0x63, 0xf2, 0xdc, 0xba, 0x8d, - 0x23, 0xdd, 0x2c, 0xb7, 0x1e, 0x6e, 0xab, 0xdc, 0x5b, 0xd5, 0x00, 0xdc, - 0xb1, 0x6b, 0xea, 0xfd, 0x0f, 0xeb, 0x3f, 0xb7, 0xed, 0xe3, 0x8e, 0x8d, - 0xdf, 0x4a, 0x1e, 0x6e, 0xd7, 0xa1, 0xfe, 0x16, 0x6c, 0xd2, 0x67, 0x60, - 0xf1, 0xe3, 0xe2, 0xdf, 0xa6, 0x8d, 0xe6, 0x08, 0xe9, 0x4c, 0xf1, 0x78, - 0xbe, 0xed, 0x73, 0xd1, 0xab, 0x6d, 0x44, 0x93, 0x4d, 0xb5, 0x3a, 0x1b, - 0xc3, 0x4b, 0x3b, 0x81, 0x22, 0xdd, 0xb1, 0x92, 0xd0, 0x18, 0x8f, 0x7c, - 0x2c, 0x11, 0xe7, 0xb8, 0xf1, 0x00, 0x9d, 0x98, 0x49, 0x3d, 0xbc, 0x70, - 0xee, 0x5f, 0xdd, 0x7f, 0x6e, 0xfb, 0xd6, 0xe9, 0xd0, 0x28, 0xdd, 0x31, - 0xf5, 0x17, 0x8c, 0x23, 0x5b, 0xff, 0xf3, 0x59, 0x13, 0x3e, 0xc7, 0x3b, - 0x30, 0xe7, 0xc8, 0xa5, 0x4f, 0xb1, 0x66, 0x21, 0x01, 0x23, 0x2f, 0xe6, - 0xf1, 0x5a, 0xfa, 0x9f, 0x70, 0xd9, 0x00, 0x02, 0x23, 0x99, 0x55, 0x9b, - 0x52, 0xc2, 0xd4, 0x00, 0xe3, 0x10, 0x83, 0x5a, 0xc0, 0xaf, 0xe2, 0x6c, - 0xbc, 0x3f, 0x56, 0x2b, 0xeb, 0xe8, 0x67, 0x29, 0x04, 0xa1, 0x87, 0xcc, - 0x21, 0xe4, 0xbb, 0xbd, 0x56, 0x96, 0xd8, 0x28, 0x26, 0x83, 0xb3, 0x82, - 0x2d, 0xf7, 0x9d, 0xab, 0x51, 0xef, 0x2c, 0xa5, 0xbd, 0x0f, 0xdc, 0xa5, - 0x2c, 0xd8, 0xee, 0x57, 0x1e, 0x38, 0x14, 0x57, 0x77, 0x93, 0x3b, 0xf6, - 0x6c, 0xcc, 0x5c, 0xb1, 0xd4, 0x05, 0x88, 0x89, 0xbe, 0x45, 0x78, 0xd9, - 0xa8, 0xfd, 0x2d, 0x8a, 0xa5, 0xf9, 0x78, 0xa4, 0x6f, 0x92, 0x4d, 0x19, - 0xe3, 0x71, 0x1c, 0x2a, 0xa6, 0x1f, 0xb8, 0x99, 0x9d, 0xd9, 0x4d, 0xd5, - 0xe0, 0x60, 0x27, 0x64, 0x52, 0x14, 0x9c, 0x94, 0x48, 0x46, 0x79, 0x45, - 0x0f, 0x0d, 0x94, 0x37, 0x47, 0x3e, 0x4a, 0x02, 0x4f, 0xc9, 0x49, 0xb0, - 0x9b, 0x1e, 0x2c, 0x43, 0x46, 0xa7, 0xb6, 0x59, 0x8d, 0xfc, 0x43, 0x93, - 0x0e, 0x85, 0x76, 0x4e, 0x8d, 0x3c, 0xf0, 0x37, 0xd0, 0x99, 0xb5, 0x9d, - 0x69, 0xf0, 0x22, 0xef, 0x4b, 0x9e, 0x10, 0x92, 0xdd, 0xdc, 0xc3, 0xbb, - 0xfd, 0xc7, 0x23, 0x45, 0xef, 0x4d, 0x6d, 0x30, 0x46, 0x46, 0x3a, 0x26, - 0x19, 0xb0, 0xdb, 0xc2, 0xd9, 0xec, 0x3f, 0x34, 0xa4, 0x4c, 0x92, 0x0f, - 0x46, 0xb1, 0xca, 0xd6, 0xb8, 0xa1, 0x5d, 0x71, 0xd3, 0x66, 0x93, 0xd1, - 0x0f, 0x76, 0xd3, 0x40, 0xd5, 0x09, 0x82, 0xce, 0x4e, 0xf1, 0x20, 0x93, - 0x3f, 0xde, 0xe8, 0xf0, 0xf9, 0x71, 0xa2, 0x73, 0x1d, 0xc4, 0xb8, 0x1f, - 0xcd, 0xaa, 0x17, 0x69, 0x9a, 0x20, 0x9d, 0x54, 0x6f, 0xc6, 0x09, 0xfd, - 0x42, 0x05, 0x1e, 0x1a, 0x30, 0x02, 0x6a, 0x10, 0x20, 0x55, 0x8a, 0x47, - 0x6f, 0xec, 0xcc, 0x89, 0x71, 0xb9, 0xa8, 0xe3, 0x33, 0x30, 0x16, 0x07, - 0xf9, 0x43, 0x6a, 0x1d, 0x09, 0xfb, 0x7a, 0x68, 0x41, 0x1e, 0xf4, 0x84, - 0x49, 0x8b, 0x2b, 0x01, 0x8d, 0x2e, 0x13, 0xe0, 0x36, 0xba, 0x7e, 0x8c, - 0x71, 0x62, 0x5c, 0xea, 0x3c, 0x07, 0x8c, 0xae, 0xb4, 0x3b, 0xf2, 0x54, - 0x2d, 0xca, 0x35, 0xe8, 0xeb, 0x55, 0x76, 0x8c, 0xcb, 0x67, 0xd8, 0x3d, - 0xd8, 0x27, 0xe9, 0xdb, 0x37, 0xf1, 0x9b, 0x12, 0xba, 0xe9, 0xd1, 0xbf, - 0xf8, 0x1b, 0x9e, 0x74, 0x11, 0xff, 0x2b, 0xd1, 0x91, 0x8b, 0x83, 0x65, - 0x04, 0x78, 0xf0, 0x35, 0xd2, 0xa9, 0x95, 0x87, 0x65, 0xc9, 0xdf, 0x4d, - 0x72, 0x63, 0x88, 0x69, 0x3a, 0xaf, 0x3c, 0x7c, 0x4f, 0x88, 0x9f, 0x91, - 0x14, 0xea, 0x3c, 0x2a, 0x30, 0x22, 0x3b, 0x88, 0x30, 0xec, 0x7c, 0xa9, - 0x3b, 0x05, 0x60, 0x60, 0xaa, 0x05, 0x80, 0x6a, 0x06, 0x0a, 0x2f, 0x29, - 0xb1, 0xd6, 0xcf, 0x23, 0x1d, 0xc6, 0xd5, 0x16, 0x4c, 0x8c, 0xf9, 0xcb, - 0x31, 0x8e, 0xb7, 0x1f, 0x41, 0x5a, 0xb2, 0x66, 0xfd, 0x0e, 0xfb, 0xef, - 0xec, 0x25, 0xe6, 0x95, 0x0e, 0x15, 0x95, 0x11, 0xb0, 0x9a, 0xcc, 0xeb, - 0xf8, 0xd2, 0xaf, 0x1e, 0x1f, 0x76, 0x71, 0x8c, 0x6c, 0xcf, 0x01, 0x1a, - 0x27, 0x22, 0xae, 0x4d, 0x3f, 0xee, 0xac, 0x44, 0x33, 0x1b, 0xa0, 0x3a, - 0x4e, 0x2b, 0x4c, 0xb9, 0x8c, 0x95, 0x74, 0x4c, 0x81, 0xb2, 0x80, 0xaa, - 0xc7, 0x82, 0x69, 0x32, 0x48, 0x48, 0x33, 0x40, 0x1e, 0x3f, 0xd4, 0x61, - 0xc7, 0x8e, 0x2d, 0x39, 0x36, 0x08, 0xd6, 0x1f, 0x18, 0xc5, 0x26, 0xc9, - 0x73, 0xfc, 0xcc, 0x42, 0x59, 0x1e, 0xee, 0xde, 0xa9, 0x08, 0x58, 0x58, - 0x64, 0xd5, 0xd3, 0xc8, 0xb1, 0xe5, 0x45, 0x47, 0x3f, 0xbc, 0x22, 0x82, - 0x6d, 0xf0, 0x36, 0xb5, 0x78, 0xd3, 0x5b, 0xb6, 0x3c, 0x3b, 0x91, 0xbf, - 0xaa, 0xcc, 0xa2, 0x0e, 0x05, 0x73, 0x3e, 0x9e, 0x23, 0xb6, 0xce, 0x00, - 0x72, 0xe1, 0xda, 0x1d, 0x3a, 0x10, 0xc7, 0xef, 0x81, 0xce, 0x4a, 0x97, - 0x40, 0xd6, 0x94, 0x99, 0x53, 0x6b, 0xda, 0xd4, 0x4a, 0x6d, 0x94, 0xa3, - 0xcb, 0x56, 0x69, 0x84, 0x25, 0xb2, 0x46, 0x4e, 0xac, 0xaa, 0x36, 0xeb, - 0xc8, 0x6e, 0x77, 0xb5, 0x91, 0x0d, 0x99, 0xba, 0xae, 0x3c, 0x08, 0x01, - 0x10, 0x84, 0xa1, 0x56, 0x55, 0x58, 0x29, 0x42, 0x72, 0xea, 0xaf, 0x5d, - 0x0b, 0x47, 0x69, 0xb5, 0xc3, 0x75, 0xbb, 0x0e, 0x9a, 0x57, 0x18, 0x96, - 0x94, 0xb2, 0x72, 0x0d, 0x55, 0xb4, 0xfb, 0x82, 0x9d, 0xdf, 0x56, 0x92, - 0x64, 0xd6, 0xb6, 0x05, 0x47, 0xac, 0xb4, 0x95, 0xa8, 0x0a, 0x45, 0x49, - 0xde, 0xf0, 0x21, 0xdb, 0x05, 0xc7, 0x50, 0x8d, 0x5e, 0x29, 0x29, 0x6f, - 0x2e, 0xcc, 0x13, 0x6d, 0xec, 0x64, 0xd5, 0xd4, 0x36, 0xd5, 0x0e, 0xdc, - 0xab, 0x1d, 0x98, 0x34, 0x47, 0x0c, 0xc1, 0xf7, 0x6c, 0x18, 0xf3, 0x98, - 0xb4, 0x6d, 0xa5, 0xa3, 0x5d, 0x62, 0xa0, 0x4b, 0x2a, 0x8e, 0x14, 0xc9, - 0xda, 0x9a, 0x8b, 0xbf, 0x43, 0x85, 0xb5, 0xe1, 0x68, 0x42, 0xa1, 0x7a, - 0xe0, 0x3f, 0x85, 0xdd, 0xca, 0x3e, 0xd0, 0xf1, 0x15, 0x0b, 0xc2, 0x5a, - 0xa3, 0xf7, 0x41, 0x23, 0xc3, 0xce, 0x94, 0xab, 0xd1, 0xed, 0xc3, 0x3a, - 0x39, 0xd8, 0x33, 0x67, 0xdc, 0xc0, 0xea, 0xd2, 0x41, 0x7c, 0x48, 0xdd, - 0xaf, 0x6e, 0xb1, 0xa9, 0x70, 0x09, 0x82, 0x2e, 0x1b, 0x21, 0xbf, 0x67, - 0x4f, 0xdd, 0x0b, 0x53, 0xff, 0x46, 0xac, 0x0b, 0x81, 0xf0, 0x85, 0xd0, - 0x52, 0xaa, 0x28, 0xe4, 0x5a, 0x2d, 0x7e, 0x89, 0x72, 0xb0, 0xc0, 0x7e, - 0x17, 0xdc, 0xfa, 0xf0, 0x33, 0x2b, 0x35, 0xcf, 0xed, 0xa5, 0xd5, 0xa1, - 0xde, 0x26, 0x81, 0x86, 0x60, 0x5f, 0xc5, 0xa4, 0xc1, 0xfa, 0x41, 0x24, - 0x89, 0xf0, 0x03, 0x28, 0x56, 0x9a, 0x5b, 0x55, 0x0c, 0x35, 0x2e, 0xeb, - 0xa9, 0xf0, 0x5b, 0xd4, 0xa5, 0xed, 0x5f, 0x17, 0xe0, 0x1b, 0x9f, 0x4a, - 0xc7, 0xcc, 0x0d, 0xeb, 0x93, 0xbf, 0x6e, 0xc4, 0x37, 0xbe, 0x7b, 0x28, - 0x3e, 0x69, 0xf2, 0xf4, 0x49, 0x5a, 0xdf, 0xb7, 0xcb, 0x20, 0xde, 0x0b, - 0x23, 0xf2, 0x4b, 0x4b, 0x2a, 0x02, 0xfe, 0x29, 0x9e, 0x67, 0xfb, 0x94, - 0x2e, 0xf9, 0x27, 0x90, 0x0f, 0x3c, 0xc0, 0x3e, 0xa8, 0x01, 0xae, 0x5e, - 0x2a, 0x06, 0xb7, 0x45, 0x9d, 0x3a, 0xb0, 0xc9, 0x19, 0x2b, 0xa1, 0xde, - 0x1d, 0x69, 0x70, 0xef, 0xc3, 0x5b, 0xf4, 0x71, 0x6d, 0x8d, 0xe4, 0xc0, - 0xb2, 0xa7, 0x91, 0x4f, 0x9e, 0x54, 0x73, 0xde, 0x61, 0x50, 0x48, 0x10, - 0x29, 0x7a, 0xa7, 0x29, 0x28, 0xd3, 0xf2, 0x4e, 0x3e, 0xac, 0xbe, 0xa3, - 0xcc, 0x0c, 0xc4, 0x33, 0x49, 0x21, 0xe8, 0x3b, 0x3e, 0x32, 0x93, 0xf9, - 0x56, 0x96, 0x40, 0x33, 0xd2, 0x48, 0xea, 0x2d, 0xe7, 0x1d, 0xa7, 0x4b, - 0xca, 0xf0, 0xf1, 0xce, 0xe3, 0xc3, 0x37, 0x98, 0x1b, 0x52, 0xe0, 0xa7, - 0x75, 0xfd, 0x1f, 0xa7, 0xf8, 0x86, 0x93, 0x63, 0xda, 0xd9, 0x8d, 0x9c, - 0xe7, 0xc4, 0xda, 0x7a, 0xf2, 0x93, 0xcd, 0xa5, 0x70, 0xf7, 0xcb, 0x2e, - 0x46, 0xc5, 0xf4, 0x9b, 0x33, 0x5d, 0x61, 0xad, 0x1d, 0x0b, 0x8d, 0x1c, - 0xe6, 0x0c, 0x79, 0x35, 0xb5, 0x39, 0xbb, 0x65, 0xc5, 0xd5, 0x32, 0x5b, - 0x93, 0x41, 0xa3, 0xd3, 0x00, 0xf1, 0xe4, 0xba, 0xda, 0x2b, 0xae, 0x6f, - 0x8b, 0xc1, 0x7e, 0x33, 0xde, 0x1a, 0xc2, 0x96, 0x8b, 0x6e, 0xf3, 0xc1, - 0x90, 0x3f, 0xee, 0x2d, 0x6a, 0x04, 0x21, 0xa3, 0x8b, 0xfa, 0xc4, 0x13, - 0x6f, 0x24, 0x44, 0xfd, 0x81, 0xcf, 0x51, 0x55, 0xf0, 0x89, 0xdd, 0x1a, - 0xc3, 0xdc, 0x31, 0x3a, 0x76, 0xaa, 0xad, 0xc1, 0x87, 0x32, 0x78, 0xe5, - 0x59, 0xfa, 0x3a, 0x09, 0x2f, 0x36, 0x4c, 0x08, 0x80, 0x6b, 0xfe, 0xea, - 0x9e, 0x52, 0x74, 0x7f, 0x0e, 0x06, 0x1e, 0x48, 0x69, 0xdc, 0xd9, 0xb3, - 0x0d, 0xbf, 0xdb, 0xfb, 0xd9, 0xa2, 0xac, 0x12, 0xd6, 0xae, 0x00, 0x78, - 0xdd, 0xff, 0x65, 0x23, 0x3c, 0x18, 0x17, 0x72, 0x8c, 0xb9, 0xd5, 0x94, - 0xdd, 0xf4, 0x79, 0x37, 0x5f, 0x54, 0x6f, 0x0a, 0x70, 0x85, 0x1e, 0xa4, - 0x7f, 0xa1, 0x06, 0x2d, 0x3e, 0xf4, 0x46, 0x0d, 0xfa, 0x2d, 0x62, 0xa8, - 0xcd, 0xf7, 0x48, 0x00, 0x6b, 0xb0, 0x50, 0x72, 0x26, 0xbc, 0xd7, 0x1c, - 0xb8, 0xe5, 0x5a, 0x46, 0xb7, 0xdc, 0x45, 0x0b, 0xbd, 0xce, 0xa3, 0x5b, - 0xc9, 0x22, 0x9f, 0xdb, 0x4b, 0x9a, 0x05, 0x32, 0x30, 0x61, 0x88, 0x0a, - 0xf8, 0xa7, 0xe9, 0x4e, 0xab, 0xac, 0x52, 0x63, 0xf2, 0x72, 0x68, 0xd5, - 0x15, 0x17, 0xe6, 0x64, 0xc8, 0x61, 0x2e, 0x03, 0xf4, 0xf0, 0xd7, 0xe1, - 0xdc, 0xdf, 0xa3, 0xfe, 0x5e, 0x35, 0x37, 0xe2, 0x4a, 0xea, 0x63, 0x60, - 0x7c, 0x26, 0x78, 0x2d, 0xcd, 0x73, 0x7c, 0xd4, 0x94, 0xb7, 0xfe, 0x2b, - 0x45, 0xdf, 0xe5, 0x77, 0x5a, 0x45, 0x3d, 0x90, 0x0a, 0x05, 0xfd, 0x56, - 0x2b, 0x22, 0x72, 0xd1, 0x7d, 0xa7, 0xe8, 0xc4, 0x0c, 0x4c, 0x5d, 0x62, - 0x26, 0x37, 0x1d, 0x4d, 0xd8, 0x65, 0x8a, 0x31, 0x35, 0xb7, 0x27, 0xbd, - 0x6c, 0xa5, 0x82, 0xa1, 0x17, 0xf1, 0xde, 0xd9, 0x0f, 0x0a, 0xbe, 0x3e, - 0xea, 0xb5, 0x67, 0x52, 0x32, 0xf8, 0xf0, 0x8c, 0x2f, 0x6d, 0x59, 0x34, - 0x87, 0xd9, 0x35, 0xe0, 0xb4, 0xdc, 0x1a, 0xe6, 0x93, 0x71, 0xb4, 0x1c, - 0x70, 0x6c, 0x4f, 0x2d, 0x4b, 0xfa, 0xe9, 0x98, 0xbc, 0xf7, 0x4c, 0xbd, - 0x36, 0x0f, 0xb6, 0x9a, 0x70, 0x34, 0x66, 0x55, 0x9c, 0xab, 0x4f, 0xab, - 0x13, 0xe4, 0x90, 0xa1, 0x96, 0xf1, 0xba, 0xb6, 0x0c, 0xe8, 0x94, 0x36, - 0x92, 0xfb, 0x8a, 0xa5, 0xbf, 0x33, 0x4d, 0x1e, 0xa2, 0x37, 0x06, 0x5f, - 0xe2, 0x6a, 0xa4, 0x46, 0x2c, 0xee, 0x36, 0x77, 0x11, 0x15, 0x2a, 0x35, - 0x2e, 0x49, 0x65, 0xdd, 0xd4, 0x2e, 0x91, 0x83, 0xa1, 0x9d, 0x9b, 0xa3, - 0x88, 0xbd, 0xe0, 0xd6, 0x02, 0xd3, 0x04, 0x31, 0xc7, 0x9f, 0xa5, 0x84, - 0x58, 0x43, 0xec, 0xe3, 0xb5, 0xeb, 0x56, 0xca, 0xc7, 0x22, 0x89, 0xd2, - 0x90, 0x69, 0xd3, 0x22, 0xcd, 0xb7, 0x22, 0x5d, 0xb5, 0xd8, 0xba, 0x4d, - 0x0f, 0xb1, 0xca, 0xa0, 0x4d, 0x8a, 0xa6, 0x81, 0xa8, 0x29, 0xf9, 0x74, - 0x58, 0xe2, 0x1d, 0x54, 0xf8, 0x1d, 0xef, 0xdf, 0xa8, 0xab, 0xb5, 0xfd, - 0xd4, 0x55, 0x59, 0xa8, 0x15, 0x1d, 0xa7, 0xfe, 0xb7, 0xad, 0xb6, 0xcf, - 0x8d, 0xba, 0x5c, 0xdb, 0x4f, 0x96, 0xa9, 0xed, 0xb1, 0xd0, 0xca, 0x29, - 0xa6, 0xb4, 0x67, 0x42, 0xc5, 0x4f, 0x30, 0x4c, 0x2f, 0xa4, 0xa3, 0x84, - 0xd1, 0xd6, 0xed, 0xa6, 0x8a, 0x19, 0x97, 0xc6, 0x94, 0xd6, 0x0f, 0x1e, - 0x38, 0x0b, 0xe9, 0x34, 0xbc, 0x20, 0x9d, 0xec, 0x5d, 0x81, 0x1f, 0x9c, - 0xe7, 0xb7, 0x9e, 0xfb, 0x9d, 0x3f, 0xca, 0xf9, 0x8f, 0x8d, 0xbb, 0x9e, - 0x37, 0x17, 0xfc, 0x0d, 0x72, 0xd1, 0x44, 0x08, 0xd6, 0x5d, 0xed, 0x91, - 0x1a, 0xb1, 0x44, 0x3c, 0x11, 0x5a, 0x7b, 0x4d, 0x97, 0x0b, 0xfd, 0xd3, - 0x95, 0xee, 0x84, 0xdd, 0x34, 0x02, 0x09, 0xb7, 0x8e, 0x62, 0xa4, 0x36, - 0x29, 0xb6, 0xec, 0x4f, 0x50, 0x4c, 0x29, 0xcd, 0xe5, 0xf8, 0x73, 0xc9, - 0x1b, 0x63, 0x72, 0x6b, 0x54, 0x40, 0xbf, 0xf4, 0x68, 0xab, 0x61, 0xe9, - 0x62, 0x32, 0x9f, 0xff, 0x88, 0x23, 0x16, 0x13, 0x01, 0x63, 0x3c, 0xf6, - 0xdd, 0x59, 0xc9, 0x1e, 0x4c, 0x89, 0x49, 0xbb, 0xd8, 0x57, 0xf3, 0x6c, - 0x6e, 0xdc, 0xd9, 0x71, 0x9e, 0x17, 0x60, 0x5b, 0x6d, 0x33, 0xae, 0xae, - 0x3c, 0x19, 0xb3, 0x50, 0xaf, 0x56, 0xfd, 0x6d, 0xf1, 0x37, 0xb8, 0xda, - 0xae, 0xdf, 0xf6, 0x0b, 0xce, 0x11, 0x77, 0x01, 0xd7, 0x8a, 0xca, 0xe5, - 0x28, 0x7d, 0x40, 0xf1, 0x1e, 0x8d, 0x0f, 0x00, 0x57, 0xbd, 0x2d, 0x41, - 0x2d, 0xb4, 0x53, 0x76, 0x33, 0xd0, 0x9b, 0xde, 0x6a, 0xb7, 0xb8, 0x5a, - 0xbb, 0x5d, 0xa9, 0x7a, 0x00, 0x1f, 0x85, 0xa0, 0x18, 0xed, 0xd2, 0xbe, - 0x2d, 0xf9, 0x27, 0xd7, 0x16, 0x7c, 0x8d, 0xfb, 0x94, 0x82, 0xe5, 0xeb, - 0x2b, 0x92, 0xbf, 0xdf, 0x86, 0x3f, 0xae, 0x80, 0x56, 0x3b, 0xd1, 0x15, - 0xa9, 0x32, 0x54, 0x26, 0x82, 0x7b, 0x6a, 0x7b, 0x83, 0x13, 0x85, 0x76, - 0xa5, 0x9d, 0x34, 0x8f, 0xd8, 0xaf, 0x37, 0x8e, 0x06, 0x66, 0xf9, 0xa0, - 0xd6, 0x1c, 0x12, 0x44, 0x85, 0xb7, 0xbf, 0x41, 0x90, 0xf1, 0x43, 0xf3, - 0x1e, 0xc9, 0x18, 0xc5, 0x42, 0xe8, 0xbf, 0xe1, 0x28, 0x55, 0x64, 0x90, - 0x73, 0xf1, 0x02, 0xb1, 0x91, 0x1a, 0xe7, 0x94, 0x54, 0x32, 0xf1, 0x54, - 0xe9, 0xcb, 0x7f, 0x8c, 0xc4, 0x8e, 0xaa, 0x56, 0xd2, 0xc7, 0x7c, 0xaf, - 0xa8, 0xfe, 0xc8, 0x43, 0xb3, 0x15, 0x66, 0x41, 0x7d, 0xcf, 0xcb, 0xfb, - 0x9d, 0x50, 0x70, 0x5f, 0x12, 0xb7, 0x69, 0x24, 0xc0, 0x84, 0x86, 0x35, - 0xa2, 0x3a, 0x00, 0xe8, 0xca, 0x5d, 0x9f, 0x7b, 0xd5, 0x40, 0x95, 0xb0, - 0x3f, 0xa1, 0xae, 0x33, 0x8c, 0x5c, 0x40, 0x09, 0x3e, 0x14, 0x8e, 0xd4, - 0x80, 0xf9, 0x4b, 0xd8, 0xa2, 0x4e, 0x7d, 0x8d, 0xab, 0x4d, 0xbd, 0xbe, - 0xe3, 0xdf, 0x68, 0x1b, 0x64, 0x52, 0x07, 0x6b, 0xf0, 0x5f, 0xe5, 0x55, - 0xf6, 0x4d, 0x81, 0xe4, 0x8a, 0xdf, 0x62, 0xa9, 0x2c, 0xf8, 0x88, 0xd4, - 0xb5, 0xc2, 0xa5, 0xf6, 0x6b, 0x5e, 0xda, 0x08, 0x2f, 0xf6, 0xb7, 0x67, - 0x4b, 0xcf, 0x1c, 0x1d, 0x37, 0x5f, 0xba, 0x6f, 0xa7, 0x21, 0x80, 0x3a, - 0xfe, 0x7d, 0xd9, 0x05, 0xa8, 0xac, 0xa7, 0x79, 0x6e, 0xa2, 0x13, 0x99, - 0xbd, 0x7b, 0x68, 0xf4, 0x6e, 0xc2, 0x30, 0x4e, 0x66, 0x6f, 0x11, 0x6a, - 0x1d, 0xbb, 0xdc, 0x6b, 0xe6, 0xc4, 0xc4, 0x1d, 0xad, 0xc4, 0xc3, 0xbd, - 0x42, 0x66, 0x88, 0x68, 0x17, 0xb5, 0xa1, 0x16, 0xe6, 0x3a, 0x4e, 0x5d, - 0x83, 0x75, 0xbe, 0x35, 0xd9, 0xce, 0x84, 0x41, 0xe5, 0x94, 0x74, 0x1a, - 0x0d, 0xeb, 0x22, 0xba, 0x59, 0x8b, 0xed, 0xd9, 0xd0, 0x0a, 0x4c, 0xae, - 0x17, 0xc9, 0xc0, 0x42, 0x26, 0xeb, 0xf9, 0x56, 0x39, 0xb0, 0xb7, 0xef, - 0xb7, 0x2c, 0xc4, 0x76, 0xe5, 0x65, 0x82, 0xc5, 0xa8, 0x63, 0x26, 0x95, - 0xab, 0x8c, 0x4e, 0x1a, 0x10, 0x6e, 0xe9, 0xda, 0x7f, 0x21, 0x75, 0x9c, - 0x7f, 0xf1, 0x75, 0x74, 0x04, 0x87, 0x73, 0x72, 0xfd, 0xaf, 0x55, 0x65, - 0x84, 0xb3, 0x61, 0xc7, 0xa5, 0x67, 0xbb, 0x2a, 0x03, 0xed, 0x80, 0xfd, - 0xa7, 0x40, 0x21, 0x84, 0x23, 0x98, 0x9c, 0xed, 0x7f, 0x69, 0x23, 0xa0, - 0x71, 0xa1, 0x11, 0xd7, 0x99, 0xf2, 0x48, 0xf5, 0x93, 0x43, 0xd5, 0xad, - 0x33, 0x67, 0xcb, 0x8c, 0xf7, 0xd8, 0x62, 0xa0, 0x98, 0x72, 0x95, 0x51, - 0x15, 0x01, 0x6f, 0xb8, 0xb9, 0x2a, 0x4c, 0x02, 0x73, 0x2c, 0x51, 0x8b, - 0x8e, 0xb5, 0x7e, 0xb5, 0xf6, 0xf3, 0x12, 0xad, 0x57, 0x7f, 0x95, 0xf6, - 0xbb, 0xe6, 0x2e, 0xed, 0x5a, 0x1b, 0x50, 0x07, 0x0b, 0x31, 0x4e, 0x89, - 0x20, 0x3a, 0x1d, 0xc5, 0x5b, 0x4a, 0xa7, 0xcd, 0xd0, 0x59, 0xb5, 0xc4, - 0x2a, 0x2a, 0xf4, 0xb6, 0xb1, 0x1b, 0xe7, 0x81, 0x8e, 0x5b, 0x37, 0x82, - 0x95, 0x23, 0x3a, 0x25, 0xa0, 0xfa, 0xf8, 0x49, 0x9b, 0x6a, 0x5d, 0x73, - 0xa4, 0x37, 0xc5, 0x0e, 0x4c, 0xb4, 0x1e, 0xea, 0xfd, 0x77, 0x3f, 0x21, - 0xe8, 0xd5, 0x39, 0xd8, 0x48, 0x58, 0xe8, 0x21, 0x01, 0x1c, 0xe5, 0xf6, - 0x9d, 0x4f, 0xac, 0x79, 0x00, 0xf1, 0x34, 0x05, 0x50, 0x96, 0x8b, 0x61, - 0x4a, 0xa8, 0x38, 0xd1, 0x98, 0x2e, 0xfd, 0x19, 0x85, 0x47, 0x5e, 0x7f, - 0x48, 0x39, 0xc8, 0xc3, 0x8e, 0x4f, 0x9b, 0xc3, 0x5d, 0x8f, 0xb5, 0xab, - 0x82, 0xce, 0xb4, 0xfc, 0x3a, 0xc2, 0xc6, 0x0e, 0xb0, 0x5b, 0xeb, 0x21, - 0x8c, 0x6a, 0x70, 0x6c, 0x91, 0xe9, 0x40, 0xf8, 0x72, 0x14, 0xfe, 0xad, - 0xd6, 0xa7, 0x5b, 0x4c, 0x12, 0xb9, 0xbc, 0x99, 0x6e, 0x5a, 0x24, 0x37, - 0xca, 0xad, 0x17, 0xa3, 0x25, 0x49, 0x28, 0xb9, 0xc1, 0xdc, 0xe9, 0x8b, - 0xe0, 0x50, 0x88, 0x03, 0x75, 0xe6, 0x06, 0x7b, 0x91, 0x20, 0x5c, 0x41, - 0x37, 0x7a, 0x48, 0xc1, 0xb1, 0xc1, 0x1b, 0x3f, 0xbb, 0xee, 0x6b, 0x26, - 0xe6, 0xca, 0x2d, 0xf1, 0xdb, 0x6f, 0x21, 0x64, 0xdd, 0xda, 0x28, 0x74, - 0xc3, 0xc0, 0x50, 0xbf, 0xf5, 0x86, 0xea, 0xd8, 0x98, 0x6e, 0x36, 0x79, - 0x83, 0x09, 0xe8, 0xda, 0xf1, 0x88, 0xab, 0x15, 0x11, 0x2c, 0x0b, 0xe2, - 0x86, 0x05, 0xd9, 0xb1, 0x3e, 0xd2, 0xcd, 0x95, 0x6e, 0xbd, 0xb1, 0x33, - 0xb1, 0x51, 0x79, 0x1d, 0x2b, 0xde, 0x99, 0x8d, 0xb6, 0x05, 0xab, 0x52, - 0x6d, 0x40, 0x7f, 0x64, 0x19, 0xfd, 0x93, 0xaa, 0x99, 0x68, 0x32, 0x18, - 0x23, 0xdb, 0xc3, 0x21, 0xcb, 0xdf, 0x3a, 0x43, 0x18, 0xe4, 0x3a, 0xf1, - 0xdb, 0x2d, 0xfd, 0x7b, 0xb4, 0xcd, 0x48, 0x32, 0xb8, 0x93, 0x99, 0xc5, - 0xdd, 0x1d, 0x10, 0xac, 0x7a, 0xa4, 0x1b, 0x0c, 0x76, 0xd6, 0x11, 0xea, - 0xa6, 0xd5, 0x26, 0xa3, 0xa1, 0x05, 0x10, 0x58, 0x9b, 0xed, 0x30, 0x4f, - 0x46, 0xf7, 0x1e, 0x66, 0x61, 0x23, 0x80, 0xf9, 0x44, 0x0f, 0xda, 0x4c, - 0xf8, 0xd3, 0x18, 0xbf, 0x96, 0x82, 0x80, 0xf6, 0xf4, 0x68, 0xd9, 0x30, - 0x6e, 0x97, 0xa3, 0xd4, 0x19, 0x78, 0x33, 0x64, 0xff, 0x65, 0xa4, 0xbe, - 0xb7, 0x3a, 0x5f, 0xcd, 0xc9, 0x57, 0xdc, 0xc6, 0x1d, 0x18, 0x73, 0xaf, - 0xbd, 0xb4, 0x5b, 0x76, 0xef, 0xca, 0xb2, 0x33, 0xf5, 0x2e, 0xc3, 0xec, - 0xd8, 0xde, 0xbf, 0xb4, 0x5f, 0x9b, 0x6d, 0xc4, 0x7f, 0xcc, 0xbd, 0x77, - 0x36, 0xd9, 0x9b, 0x49, 0x76, 0x43, 0xd0, 0x2b, 0x48, 0x83, 0x4f, 0xaa, - 0xc9, 0x11, 0x53, 0x9e, 0xbc, 0xe1, 0x08, 0xf1, 0x63, 0xf2, 0xa1, 0x8d, - 0x11, 0xb7, 0xaa, 0xee, 0xb4, 0xaf, 0x69, 0x36, 0xad, 0x20, 0x41, 0xdb, - 0xbd, 0xc1, 0x2a, 0xd3, 0x9f, 0x30, 0xb7, 0x5e, 0xad, 0xad, 0xd3, 0xd8, - 0xfa, 0xb6, 0x35, 0xa4, 0xa6, 0xc6, 0xbb, 0x1b, 0x46, 0xb7, 0x27, 0x37, - 0x06, 0x0c, 0xbc, 0x54, 0xb0, 0xd0, 0xac, 0xc2, 0x5f, 0x76, 0x69, 0xeb, - 0x06, 0xe2, 0xec, 0x41, 0x1a, 0x4d, 0x49, 0xc7, 0x56, 0xf5, 0xc1, 0xb4, - 0xf4, 0x1c, 0xec, 0xd8, 0x40, 0x06, 0x95, 0x79, 0x1d, 0x7e, 0x1c, 0x79, - 0x8c, 0x47, 0xb4, 0x78, 0x68, 0xd5, 0xf4, 0xaf, 0x3d, 0xd6, 0xe9, 0xcf, - 0xb7, 0xed, 0x77, 0x70, 0xef, 0x71, 0x64, 0x8d, 0x3a, 0x7e, 0xbd, 0xb1, - 0x7e, 0xb8, 0x6b, 0x6c, 0x54, 0x03, 0xc6, 0x8d, 0xf7, 0x08, 0x4b, 0xb2, - 0x49, 0x0c, 0x3e, 0x83, 0x5d, 0x4b, 0xed, 0x42, 0xd0, 0x43, 0x5c, 0xe5, - 0x1d, 0x8b, 0x45, 0xc9, 0x07, 0x9a, 0xa4, 0x5b, 0x9f, 0xbd, 0xd1, 0x78, - 0x58, 0x8a, 0xa7, 0xc3, 0xcf, 0x4c, 0x77, 0xaf, 0xe2, 0xe9, 0x25, 0x7e, - 0xfa, 0xd3, 0x19, 0x90, 0x27, 0x94, 0x77, 0xaa, 0x1d, 0x65, 0x6f, 0x52, - 0xfe, 0x1f, 0x8b, 0xf2, 0x6e, 0x23, 0xbe, 0xbd, 0x09, 0xdc, 0xab, 0x71, - 0x6d, 0x08, 0x05, 0xde, 0xc2, 0x7b, 0x6c, 0xb5, 0x3e, 0x35, 0x61, 0xcb, - 0xda, 0xfe, 0x73, 0xd0, 0xa2, 0x46, 0x67, 0x18, 0xbe, 0x70, 0x91, 0xb8, - 0xd9, 0x81, 0x77, 0x58, 0x7f, 0x0b, 0x2b, 0xf0, 0xff, 0x1a, 0x81, 0xff, - 0xb6, 0xfb, 0x2e, 0xee, 0x53, 0xf1, 0xa3, 0x0f, 0xf6, 0xb7, 0x7b, 0x55, - 0xb3, 0xf5, 0xfe, 0xaf, 0x6d, 0xf7, 0x2f, 0xd3, 0xee, 0x9d, 0x3d, 0xf6, - 0x30, 0xc7, 0xfe, 0x6d, 0x8d, 0x9d, 0xdc, 0xd2, 0xfa, 0xa9, 0x6a, 0x58, - 0xbd, 0xb3, 0xab, 0x4e, 0x53, 0xe9, 0x43, 0xbb, 0xf7, 0xdb, 0x99, 0x51, - 0xff, 0xb2, 0xa2, 0x4e, 0xdb, 0xe8, 0xd7, 0xa3, 0x63, 0xa6, 0x9e, 0x89, - 0xec, 0xe3, 0x44, 0x22, 0xfd, 0x5c, 0x87, 0x56, 0x72, 0xd5, 0x9e, 0xf9, - 0x97, 0x71, 0xf2, 0xde, 0x02, 0xf9, 0xb7, 0x49, 0x70, 0x71, 0xad, 0xa2, - 0xd2, 0x3e, 0x78, 0xe9, 0xb8, 0x6e, 0xb5, 0xaf, 0x5b, 0xec, 0xeb, 0x2c, - 0x87, 0x77, 0x86, 0xc3, 0xbf, 0x4c, 0x85, 0x17, 0x56, 0xc2, 0x6a, 0xb1, - 0xbb, 0x8a, 0x0c, 0xf7, 0x9a, 0x2d, 0xf7, 0x3a, 0x6c, 0xdf, 0xa1, 0x99, - 0xba, 0x9f, 0x52, 0xca, 0xa3, 0x32, 0xdc, 0x33, 0xab, 0x86, 0xb9, 0x1c, - 0xe1, 0x4e, 0x73, 0xd8, 0xe6, 0xfe, 0xd3, 0x19, 0xe9, 0x16, 0x2e, 0x01, - 0x3a, 0xdb, 0x0c, 0xc6, 0xdf, 0x21, 0x48, 0xc0, 0xa8, 0x57, 0x74, 0x58, - 0xd5, 0xc0, 0x97, 0xa0, 0x92, 0xc3, 0x47, 0x6b, 0x77, 0x48, 0x63, 0xb8, - 0x5e, 0xf2, 0xf7, 0xd6, 0x70, 0xee, 0xdf, 0xf3, 0x16, 0x67, 0xd5, 0x66, - 0xc8, 0xc4, 0xe9, 0x11, 0xe7, 0x3a, 0x04, 0x75, 0xe6, 0x64, 0x76, 0x91, - 0x1f, 0x27, 0x35, 0xe2, 0x9f, 0xaf, 0x78, 0x7f, 0xba, 0x68, 0x7f, 0xaa, - 0x77, 0x2e, 0x4d, 0x5e, 0x33, 0xee, 0xe3, 0xaf, 0x3a, 0xc2, 0x2b, 0x97, - 0x7b, 0x92, 0xe2, 0x7c, 0xb7, 0xed, 0x5d, 0x5b, 0xb4, 0xb8, 0xda, 0xa2, - 0x9b, 0xe1, 0xef, 0x8a, 0xdf, 0xdf, 0xbf, 0x79, 0x29, 0x19, 0xd6, 0x4b, - 0x72, 0xd1, 0x41, 0xb3, 0x2f, 0x33, 0xe1, 0xe4, 0xbe, 0x44, 0xb9, 0x7b, - 0xa7, 0x6b, 0xca, 0xb9, 0xee, 0x87, 0xee, 0x25, 0x65, 0xe8, 0xb2, 0x8e, - 0x7a, 0xa7, 0x6a, 0xd6, 0x05, 0x57, 0xda, 0x6f, 0xcd, 0xbf, 0x8c, 0x2d, - 0x06, 0x9f, 0xea, 0x12, 0x45, 0x81, 0xc2, 0x4c, 0x80, 0xfb, 0xa6, 0x76, - 0xd3, 0x31, 0xec, 0x93, 0x47, 0x20, 0x1b, 0xab, 0x5d, 0xce, 0x72, 0x5c, - 0x53, 0x29, 0xce, 0x5f, 0x38, 0x2e, 0xd1, 0xb5, 0x05, 0x66, 0x92, 0x0e, - 0xce, 0x71, 0x41, 0x9c, 0x8e, 0xaa, 0x97, 0x61, 0x75, 0xb9, 0xc2, 0xb3, - 0xc2, 0x58, 0x49, 0xb9, 0xc7, 0xc2, 0x15, 0x40, 0x24, 0xc7, 0xd7, 0x36, - 0xa1, 0x93, 0x59, 0x3f, 0x75, 0x5b, 0x0c, 0xf7, 0x36, 0xb1, 0x34, 0xc8, - 0xdf, 0x1f, 0xf1, 0xe1, 0x50, 0x50, 0x33, 0x38, 0x65, 0xe0, 0x47, 0x5d, - 0xd1, 0x90, 0x3e, 0x90, 0xd6, 0x0a, 0x1e, 0x43, 0xb9, 0x85, 0x75, 0x09, - 0xae, 0xc2, 0x53, 0x80, 0x7f, 0xa4, 0x5a, 0x90, 0x91, 0x5c, 0x19, 0x5f, - 0xef, 0x60, 0x9d, 0x4d, 0x76, 0x66, 0xd9, 0x2b, 0xc3, 0x7c, 0xf2, 0xf5, - 0xfd, 0x07, 0x6c, 0xcb, 0xd4, 0x3e, 0xe6, 0xf1, 0x18, 0x90, 0x11, 0x0f, - 0x69, 0x0b, 0x06, 0x98, 0x83, 0x2c, 0x41, 0xf7, 0x0a, 0xea, 0x53, 0xdc, - 0xf3, 0x34, 0xe2, 0x5c, 0xdd, 0x9d, 0xac, 0x58, 0xcf, 0xf8, 0x6a, 0x98, - 0x40, 0x85, 0xa5, 0x65, 0x9b, 0xd8, 0x65, 0xaf, 0xb0, 0x85, 0x89, 0xf5, - 0xaf, 0xce, 0x9c, 0x9f, 0x33, 0x7c, 0x90, 0x62, 0xf7, 0x43, 0xed, 0xf4, - 0x01, 0x15, 0xf8, 0x5d, 0xed, 0x7e, 0xcc, 0x4c, 0x5d, 0xa6, 0x63, 0x6f, - 0x7a, 0x12, 0x98, 0x94, 0x45, 0x6a, 0x82, 0x5c, 0x54, 0xc3, 0x07, 0x5f, - 0x87, 0x13, 0x8a, 0xf1, 0xa4, 0x6f, 0x11, 0xa7, 0x47, 0xeb, 0x2c, 0xbf, - 0x14, 0x53, 0x3b, 0x9b, 0x3d, 0x4c, 0x2f, 0x2a, 0x81, 0xed, 0xca, 0x0e, - 0xa6, 0x69, 0xfe, 0xf9, 0x35, 0xa2, 0xa6, 0x09, 0xfb, 0xde, 0x82, 0x7d, - 0xc5, 0xfc, 0xb4, 0x36, 0x41, 0x13, 0x6c, 0xb5, 0x43, 0xac, 0x62, 0xe9, - 0xe6, 0x6d, 0xdd, 0x7a, 0x11, 0x61, 0xf6, 0x00, 0x87, 0x7e, 0x2c, 0xdd, - 0x1e, 0xce, 0x53, 0x79, 0x5f, 0x59, 0x37, 0x61, 0x2f, 0xa4, 0xfa, 0x4d, - 0xc4, 0x77, 0xb8, 0x55, 0x7b, 0x01, 0x0f, 0x96, 0x2f, 0x99, 0x9b, 0x24, - 0xb8, 0xed, 0xf7, 0xbd, 0x64, 0x4a, 0xc5, 0x7e, 0x5f, 0x6c, 0xb7, 0xeb, - 0x34, 0x5e, 0x9f, 0x1b, 0xae, 0xa8, 0x32, 0xba, 0x7f, 0x8c, 0xd2, 0x9b, - 0x07, 0x06, 0x24, 0x9b, 0x23, 0xfc, 0xe9, 0xcc, 0xd3, 0xff, 0x63, 0x94, - 0xfe, 0x1f, 0x9b, 0xf4, 0xb4, 0x06, 0x0f, 0x3d, 0x45, 0x1d, 0xdb, 0x0d, - 0x88, 0x63, 0xbf, 0xee, 0xd3, 0x59, 0x91, 0x17, 0x83, 0xb5, 0x22, 0xaf, - 0x01, 0x94, 0x48, 0xed, 0x1d, 0xc7, 0xa3, 0x2d, 0x57, 0x8d, 0xcb, 0x75, - 0x28, 0xcb, 0xff, 0xc3, 0xa9, 0x5a, 0x37, 0xdb, 0xf2, 0xb2, 0x06, 0xaf, - 0x4f, 0x5a, 0xba, 0xb9, 0x1b, 0x99, 0xbd, 0xbe, 0xe1, 0x96, 0x31, 0xf9, - 0xed, 0x22, 0xec, 0x65, 0xa1, 0xce, 0x40, 0x7c, 0x6f, 0x1f, 0xfe, 0xcb, - 0x3c, 0x7c, 0xb5, 0x0e, 0x3f, 0xf6, 0xf9, 0xdd, 0xac, 0xc4, 0x0b, 0x6f, - 0x7b, 0xf7, 0xcb, 0x38, 0x75, 0x39, 0xb5, 0xb4, 0x11, 0x93, 0x47, 0xbd, - 0xba, 0xf7, 0x91, 0xd3, 0x07, 0xdc, 0xdb, 0x47, 0xfd, 0x3d, 0xd8, 0xc8, - 0xc6, 0x25, 0x77, 0x0b, 0xa9, 0x54, 0x1f, 0xec, 0xfe, 0x6d, 0xa3, 0xa5, - 0xb3, 0xf3, 0x2e, 0x66, 0xec, 0xde, 0xdb, 0xd9, 0x79, 0xaf, 0x6c, 0x7d, - 0x35, 0xb8, 0x9e, 0xd9, 0xd3, 0x17, 0xd7, 0x3d, 0xa4, 0x0a, 0x3d, 0x7e, - 0xad, 0x3d, 0x8d, 0x5f, 0x4b, 0x4f, 0xcd, 0x2a, 0xbc, 0x63, 0xff, 0xa6, - 0x7e, 0x52, 0x57, 0x2d, 0xbc, 0x3b, 0xac, 0x6f, 0xfb, 0x32, 0xf6, 0xee, - 0x1e, 0x55, 0xeb, 0x6e, 0xf0, 0x55, 0x4e, 0x94, 0x29, 0xf8, 0xba, 0x3a, - 0xd5, 0x2c, 0xc3, 0x13, 0x43, 0x0e, 0x7a, 0xb6, 0x98, 0x9b, 0x51, 0x06, - 0xda, 0x70, 0x1f, 0x6a, 0x0e, 0xf7, 0x11, 0xf4, 0x56, 0xe2, 0xbf, 0x8c, - 0xc2, 0xcb, 0x26, 0xfc, 0x23, 0x77, 0x9f, 0xf0, 0x1e, 0xbb, 0x74, 0x36, - 0x9b, 0xf0, 0x5f, 0x26, 0xe1, 0x61, 0x05, 0x9e, 0x4e, 0x6e, 0x79, 0xaf, - 0x8d, 0x05, 0xe8, 0xb2, 0x67, 0x77, 0x43, 0x10, 0x3e, 0x0a, 0xf2, 0x37, - 0xfb, 0xd1, 0xae, 0xce, 0x74, 0x7c, 0x67, 0x2f, 0xfe, 0x5f, 0xa3, 0xf0, - 0xe0, 0xd9, 0x27, 0x86, 0xa0, 0x83, 0xae, 0x83, 0x6a, 0xef, 0x0b, 0x41, - 0x37, 0x36, 0x4e, 0x43, 0x13, 0x35, 0x26, 0xef, 0x51, 0x6a, 0xca, 0x3a, - 0x23, 0xac, 0x62, 0x6a, 0x47, 0x4b, 0x46, 0xa3, 0x8a, 0xc3, 0xbd, 0xc2, - 0x88, 0x37, 0x7b, 0x5c, 0x87, 0x42, 0xfd, 0x68, 0x28, 0x01, 0xa8, 0xd1, - 0xff, 0x74, 0xef, 0xfe, 0x19, 0xe5, 0xc7, 0xa7, 0xd3, 0xb0, 0x75, 0x69, - 0x4c, 0x83, 0xa7, 0xbc, 0x2d, 0xa1, 0xc0, 0xec, 0x57, 0x3b, 0xc9, 0xc1, - 0x69, 0x98, 0x13, 0xff, 0x62, 0x22, 0x3e, 0x3d, 0x76, 0x31, 0xc5, 0x0e, - 0xad, 0xc9, 0xee, 0x72, 0x99, 0xa4, 0x91, 0x42, 0x37, 0x88, 0x5e, 0x33, - 0x06, 0x79, 0x3b, 0x78, 0x8c, 0x49, 0x5b, 0x01, 0x82, 0x3f, 0x8e, 0x94, - 0x12, 0x02, 0xcf, 0x0b, 0xc7, 0x7b, 0xe0, 0x2d, 0xde, 0xfb, 0xe8, 0xb6, - 0xe5, 0x26, 0xb6, 0x56, 0x97, 0xb1, 0x82, 0xf1, 0x82, 0x84, 0x71, 0xfb, - 0xa1, 0x9c, 0x8e, 0xd2, 0x9f, 0x6f, 0x73, 0xf7, 0x5f, 0xf6, 0xed, 0x69, - 0xde, 0xfe, 0xf6, 0xc7, 0xad, 0xdc, 0x83, 0xd4, 0xe2, 0xaf, 0x26, 0x72, - 0x05, 0xa3, 0x50, 0x90, 0xc4, 0x79, 0x30, 0x71, 0xae, 0x3b, 0x56, 0x02, - 0x6d, 0x4f, 0xaa, 0x5a, 0x8e, 0xb4, 0x54, 0x36, 0xf3, 0x84, 0x90, 0xdb, - 0xbb, 0xa7, 0x49, 0x7b, 0xaf, 0x4a, 0xdf, 0xd6, 0xee, 0x69, 0xe1, 0x3e, - 0x82, 0x14, 0x25, 0xb8, 0xda, 0xbc, 0x6f, 0x26, 0xef, 0x85, 0x5a, 0xf5, - 0x94, 0xfd, 0x7b, 0x37, 0x7b, 0xff, 0xd5, 0x71, 0xe2, 0x4c, 0x28, 0x56, - 0x37, 0x7b, 0xf3, 0xf6, 0x6e, 0xdd, 0xbe, 0x8d, 0xd7, 0x64, 0xe3, 0x81, - 0x74, 0x63, 0xfc, 0xf6, 0xa4, 0x8b, 0x31, 0x80, 0xd1, 0xdf, 0x54, 0xac, - 0x1f, 0x50, 0x70, 0x9c, 0x55, 0x2b, 0xd6, 0x6e, 0x7e, 0x3d, 0x73, 0xe4, - 0xed, 0xc6, 0x73, 0x2a, 0x13, 0x8c, 0xf6, 0xc3, 0xc9, 0x77, 0xad, 0x45, - 0xe2, 0x5a, 0x6a, 0xea, 0xcc, 0x9c, 0xe8, 0xdd, 0xfb, 0x57, 0xa8, 0x85, - 0xec, 0xee, 0x80, 0x09, 0x6d, 0x08, 0x56, 0xd0, 0xf9, 0xa9, 0xd6, 0xba, - 0x89, 0x41, 0x01, 0xb6, 0xa4, 0x79, 0xf1, 0x54, 0xe7, 0x4b, 0x3f, 0x37, - 0x9b, 0xf3, 0xcd, 0xd7, 0x22, 0xe6, 0xef, 0xed, 0xa8, 0x39, 0xeb, 0xb8, - 0x2b, 0x56, 0x11, 0xd3, 0xde, 0xb6, 0x86, 0xc4, 0x76, 0xcf, 0x73, 0x8d, - 0xd1, 0x13, 0xe0, 0xcc, 0xde, 0xf0, 0x77, 0x30, 0x4f, 0x0a, 0x2c, 0x2c, - 0x8c, 0x1d, 0xd2, 0xb3, 0x38, 0x01, 0xe9, 0x16, 0x98, 0x9d, 0x36, 0x91, - 0x8b, 0x6c, 0xd7, 0x60, 0x61, 0x99, 0xa1, 0xc1, 0x78, 0x47, 0xb7, 0xff, - 0x3a, 0xe7, 0x7e, 0xfb, 0x75, 0xf6, 0x73, 0x0f, 0xa4, 0x6a, 0x5f, 0x06, - 0x6b, 0xef, 0x31, 0x67, 0xb5, 0xd4, 0x19, 0x2b, 0xd7, 0xfd, 0xc4, 0x5c, - 0x96, 0x9f, 0x5b, 0xa4, 0x47, 0x27, 0x7f, 0x07, 0xd3, 0x0a, 0xec, 0x68, - 0x02, 0xf9, 0x32, 0xd4, 0xc2, 0x5f, 0x70, 0x2a, 0x2d, 0x1e, 0x5a, 0xb8, - 0x19, 0x42, 0xef, 0x9b, 0xd7, 0x37, 0x00, 0x09, 0x60, 0x86, 0x7e, 0xdf, - 0x99, 0x92, 0xdd, 0x52, 0x8f, 0x07, 0x98, 0x74, 0x40, 0xf7, 0x57, 0x72, - 0xf9, 0x62, 0x7d, 0x18, 0x8b, 0x85, 0x20, 0x3b, 0x88, 0xb0, 0x49, 0x7b, - 0xb4, 0x46, 0x73, 0x5b, 0x22, 0x5d, 0x92, 0x8e, 0x0f, 0x18, 0xd5, 0xaf, - 0x0f, 0x46, 0xc4, 0xfe, 0x12, 0x3a, 0x16, 0x3c, 0x99, 0x63, 0xd4, 0x1d, - 0x6a, 0x52, 0xa2, 0x22, 0x00, 0x86, 0xc8, 0x9d, 0x9c, 0xb6, 0x60, 0x62, - 0xda, 0xd5, 0x9e, 0xee, 0xe8, 0x8b, 0xc1, 0xbe, 0xfa, 0x7c, 0x9d, 0x83, - 0x09, 0xeb, 0x11, 0x44, 0xa5, 0xf5, 0x56, 0x4b, 0x7e, 0xb7, 0xf0, 0xef, - 0xc8, 0xba, 0xfc, 0x59, 0x9c, 0xd4, 0x02, 0x5a, 0x36, 0x2b, 0xfd, 0x41, - 0x86, 0x37, 0x7d, 0xe5, 0x61, 0xe9, 0x46, 0x21, 0xdf, 0xe7, 0x59, 0xfc, - 0x57, 0xbd, 0x69, 0x57, 0x37, 0xbc, 0x1c, 0xd3, 0xf4, 0x95, 0xb0, 0x7e, - 0xb9, 0xc8, 0x86, 0x59, 0xf4, 0x16, 0xf9, 0x32, 0xb5, 0x22, 0xca, 0x97, - 0x66, 0xad, 0xd8, 0xb8, 0xeb, 0xf5, 0x58, 0x7b, 0xa6, 0xee, 0x51, 0xe4, - 0x6e, 0x5f, 0xc3, 0x24, 0xad, 0x67, 0xea, 0xaa, 0xbb, 0x2c, 0xfb, 0x6b, - 0xd4, 0xf9, 0xb2, 0xf2, 0x5f, 0x59, 0xff, 0x69, 0xec, 0x66, 0x5e, 0x18, - 0x25, 0xd7, 0xe1, 0xd1, 0x72, 0x7b, 0x1d, 0xc6, 0x7e, 0x8b, 0x0a, 0x2c, - 0x1f, 0x03, 0x50, 0x37, 0xbb, 0xb6, 0xed, 0x06, 0x1c, 0x43, 0x67, 0x87, - 0xd0, 0xec, 0xfc, 0x03, 0x6f, 0x9b, 0xba, 0xd2, 0x55, 0x9b, 0x20, 0x61, - 0xd2, 0x1f, 0x86, 0xfa, 0x87, 0x6e, 0xf7, 0x53, 0x5c, 0x7b, 0x55, 0x72, - 0x71, 0x7e, 0x4d, 0xfd, 0x68, 0xbf, 0xc6, 0xa4, 0x61, 0xc5, 0x81, 0x00, - 0xc5, 0x8b, 0x03, 0x99, 0xca, 0x10, 0x87, 0x67, 0xc0, 0xe2, 0xa0, 0xad, - 0x00, 0xac, 0xa9, 0x1e, 0x1d, 0x5c, 0x71, 0xab, 0x3a, 0xe4, 0xae, 0x95, - 0x2a, 0x6e, 0xb7, 0x6f, 0xe6, 0xdd, 0x12, 0x53, 0xee, 0x39, 0x1a, 0x96, - 0x98, 0xb9, 0xc5, 0x12, 0xfd, 0x07, 0x61, 0xd1, 0xcb, 0x8b, 0x4f, 0xe7, - 0x57, 0x5a, 0x77, 0x15, 0xf0, 0x13, 0xe5, 0x82, 0xf1, 0xa6, 0x4e, 0x27, - 0x81, 0xb1, 0x1c, 0xd4, 0x57, 0x9f, 0xd9, 0xdb, 0x0c, 0xa4, 0xd6, 0xdf, - 0x55, 0x62, 0xc5, 0x3a, 0xc5, 0x49, 0x42, 0xdc, 0x21, 0xad, 0x8f, 0x19, - 0xf6, 0xf8, 0x4c, 0x6a, 0x18, 0x05, 0xac, 0xbe, 0x05, 0xad, 0x3f, 0xaa, - 0x3e, 0xae, 0xf9, 0x6b, 0xde, 0xb7, 0xc2, 0xca, 0xc4, 0xff, 0x7a, 0x54, - 0x86, 0xab, 0xe9, 0xab, 0x1b, 0xb6, 0x16, 0xf2, 0x68, 0xfc, 0x13, 0x79, - 0x07, 0x87, 0x24, 0x1a, 0x0b, 0x70, 0xeb, 0x39, 0x65, 0x4a, 0x83, 0xb4, - 0x7e, 0x77, 0xa6, 0x05, 0xd0, 0x53, 0x70, 0xab, 0xf3, 0x27, 0x67, 0xb2, - 0x07, 0xdf, 0xfb, 0x74, 0x1c, 0xb5, 0x22, 0xb1, 0x9a, 0xf2, 0x9c, 0x99, - 0xe7, 0x85, 0x9f, 0x39, 0x6b, 0xb5, 0x24, 0x3c, 0x5a, 0x75, 0xea, 0x8f, - 0xa5, 0xad, 0x9d, 0x15, 0xf2, 0x7f, 0xd8, 0x58, 0x69, 0xf8, 0xd7, 0x6f, - 0xff, 0xf2, 0xe3, 0x02, 0x6c, 0xcf, 0xb6, 0xb7, 0xf8, 0x4e, 0x45, 0x37, - 0x27, 0x5c, 0xbf, 0x67, 0xf8, 0x6b, 0x9d, 0xe1, 0xd3, 0x0a, 0xa7, 0x2a, - 0x87, 0x90, 0x3f, 0x39, 0xaa, 0xc4, 0xdd, 0x08, 0x24, 0x91, 0xe7, 0x34, - 0xb4, 0x8b, 0x90, 0x66, 0xb9, 0x43, 0xa7, 0x46, 0x20, 0x3c, 0xfc, 0x11, - 0xc0, 0xae, 0x08, 0xc8, 0x77, 0xa3, 0xd7, 0x5a, 0x8d, 0x15, 0x12, 0xf7, - 0x47, 0x4b, 0xd6, 0x30, 0xfe, 0x16, 0xb0, 0xcf, 0xd7, 0x6e, 0xc6, 0xb1, - 0x7e, 0x1b, 0x82, 0xa3, 0x47, 0xdc, 0x46, 0x03, 0x6e, 0xe6, 0x86, 0xc8, - 0xe6, 0xbb, 0xe8, 0x9e, 0x3c, 0x33, 0xbf, 0x86, 0xc7, 0x7a, 0x2e, 0x90, - 0x3b, 0xde, 0x2b, 0xaf, 0x53, 0x1b, 0xa5, 0x2a, 0xcd, 0x0a, 0x86, 0xee, - 0x7c, 0x48, 0xf3, 0x51, 0x4a, 0x2b, 0x3b, 0xf7, 0xdc, 0xef, 0xff, 0x04, - 0xff, 0xed, 0x83, 0xd7, 0x1f, 0x9b, 0x34, 0x46, 0xcd, 0x93, 0xde, 0xb4, - 0xa1, 0x9f, 0xb1, 0x38, 0x88, 0x5f, 0xa7, 0xbe, 0x28, 0x3b, 0xbd, 0x83, - 0xe4, 0xda, 0xb8, 0x52, 0x95, 0xe1, 0xc5, 0x6f, 0x7d, 0x1f, 0x76, 0xf4, - 0x4b, 0x37, 0xdd, 0xa1, 0x91, 0xff, 0xf0, 0xf7, 0xa5, 0x45, 0x05, 0x3c, - 0x94, 0x12, 0x70, 0x63, 0x98, 0x57, 0xbe, 0x3d, 0x7e, 0x9d, 0x7a, 0x8e, - 0x38, 0xfa, 0x33, 0xd0, 0x15, 0x33, 0xe9, 0x95, 0x53, 0x15, 0xc6, 0x2d, - 0x6f, 0x66, 0x33, 0x40, 0x17, 0x97, 0x2a, 0x5a, 0x77, 0x1b, 0x36, 0x61, - 0x57, 0x6e, 0x23, 0xfd, 0x5a, 0x22, 0xfb, 0x5a, 0x0e, 0x82, 0xd8, 0xa2, - 0x59, 0x45, 0x1d, 0x00, 0xf1, 0xc8, 0xc6, 0x3b, 0x07, 0x46, 0x34, 0xd8, - 0x1b, 0x3d, 0x05, 0xae, 0x55, 0xce, 0xd4, 0x06, 0xae, 0x80, 0xcd, 0xb9, - 0x71, 0x6c, 0xdd, 0x1a, 0x13, 0x4c, 0x60, 0x09, 0x1c, 0x24, 0x9c, 0xdb, - 0xb4, 0xcd, 0x4d, 0xeb, 0x5f, 0x06, 0x92, 0xfe, 0x08, 0xf1, 0x96, 0xc6, - 0x5f, 0xad, 0x75, 0x6f, 0xdd, 0xe6, 0xd6, 0x16, 0xbd, 0x3f, 0x8f, 0x6f, - 0x7a, 0x79, 0x6e, 0xdd, 0x19, 0x99, 0x8d, 0x66, 0x92, 0x5a, 0xfd, 0xd8, - 0xa8, 0x53, 0x20, 0x82, 0x75, 0x2b, 0x6d, 0xe0, 0x3c, 0x9f, 0xb6, 0x7e, - 0xb0, 0xb3, 0x9a, 0xa1, 0x3b, 0x3e, 0xa9, 0x1f, 0xab, 0x81, 0x6b, 0x2f, - 0xb8, 0xd1, 0x0c, 0xfa, 0xee, 0x48, 0xe2, 0xe6, 0x16, 0xeb, 0x74, 0x00, - 0xf5, 0x68, 0x0f, 0xf7, 0xe9, 0x30, 0x4b, 0xad, 0xfc, 0xa1, 0x6b, 0x8c, - 0x69, 0x73, 0xe3, 0x06, 0x81, 0xce, 0x40, 0x7b, 0x05, 0x3e, 0xbb, 0xdd, - 0x74, 0x37, 0x10, 0xf4, 0xf0, 0xf0, 0x07, 0x27, 0xae, 0xfd, 0xf6, 0xf8, - 0xd6, 0x8e, 0x13, 0x19, 0x1c, 0x6b, 0xd4, 0xfa, 0x6d, 0xe9, 0x2b, 0xde, - 0x46, 0x15, 0xaa, 0xf1, 0x29, 0xe3, 0xda, 0xe6, 0x12, 0xdd, 0x21, 0x56, - 0xc2, 0x3d, 0x90, 0xbf, 0x7f, 0xdb, 0x5b, 0x8f, 0x21, 0xae, 0x56, 0x76, - 0xb2, 0xef, 0x6f, 0xae, 0x05, 0xec, 0xfa, 0xa7, 0x8d, 0xea, 0xa8, 0x01, - 0x2c, 0xed, 0x45, 0x09, 0xa2, 0xd5, 0xb9, 0xda, 0x58, 0x78, 0x74, 0xe8, - 0x2b, 0xc1, 0xd8, 0xf8, 0xae, 0xef, 0xfd, 0xda, 0x05, 0xe7, 0x16, 0xf8, - 0x17, 0xd3, 0x1e, 0xa9, 0x4d, 0xc5, 0x98, 0x4e, 0x7a, 0x17, 0xd7, 0xc7, - 0xd0, 0x15, 0x6c, 0x9e, 0xde, 0xfe, 0x48, 0xf4, 0x15, 0x5b, 0x3b, 0xf5, - 0xb3, 0xe5, 0x38, 0x5b, 0x63, 0xdd, 0xfc, 0x25, 0xf2, 0xcc, 0xe4, 0x33, - 0xea, 0xc2, 0x68, 0x50, 0x5a, 0xf5, 0xb4, 0x46, 0xd8, 0x5d, 0xa8, 0xd8, - 0x4c, 0x3e, 0xf5, 0x47, 0x00, 0xba, 0x9a, 0xc8, 0x52, 0x36, 0xb9, 0xe7, - 0xeb, 0xa3, 0x57, 0x6f, 0x25, 0xa0, 0x5d, 0xea, 0xd7, 0x58, 0x82, 0x21, - 0xea, 0x23, 0xf9, 0xda, 0xbc, 0xe2, 0x82, 0x5a, 0xf7, 0xd4, 0x97, 0xb4, - 0xd7, 0xaf, 0xb6, 0x09, 0xeb, 0xab, 0x1c, 0xc6, 0x13, 0x75, 0x97, 0x06, - 0x4b, 0xb6, 0x4c, 0x38, 0x74, 0x52, 0xd5, 0x6a, 0xbb, 0xe6, 0x7f, 0xf1, - 0xee, 0x70, 0x4b, 0x15, 0x94, 0x40, 0x5d, 0xcd, 0x11, 0xdb, 0xa5, 0x26, - 0xc7, 0xf8, 0x2d, 0xf8, 0xfe, 0xfa, 0x25, 0x97, 0x86, 0xea, 0xe3, 0xaa, - 0xff, 0x68, 0xc2, 0xb1, 0xd3, 0xa0, 0xe6, 0xa8, 0x9c, 0x6a, 0x8d, 0xbf, - 0x5b, 0x1e, 0x34, 0x7c, 0xf8, 0xfc, 0x51, 0xd0, 0x85, 0xb6, 0xa8, 0xdd, - 0x3b, 0x35, 0x26, 0x77, 0x8f, 0x76, 0x79, 0x6b, 0xe5, 0x59, 0x60, 0xb8, - 0xa3, 0x70, 0x4b, 0xb7, 0xf5, 0x93, 0xc6, 0xad, 0x5f, 0x5c, 0x5d, 0x67, - 0xfc, 0x6a, 0x0d, 0x5f, 0xf5, 0x1f, 0x36, 0x83, 0xba, 0x8f, 0xdf, 0xdb, - 0x32, 0x5d, 0xc5, 0x1a, 0xeb, 0xc0, 0x7a, 0xd2, 0xdc, 0x1d, 0xc6, 0xee, - 0x8c, 0xbb, 0xf8, 0xd4, 0x7e, 0xd2, 0x97, 0x95, 0xb1, 0xdb, 0xa1, 0x13, - 0x1b, 0xb1, 0x13, 0x77, 0xa9, 0xe2, 0xa6, 0x97, 0x9e, 0x3f, 0xb8, 0x52, - 0xb1, 0x1d, 0x97, 0xb6, 0xb0, 0xb7, 0x61, 0x24, 0xad, 0xb2, 0x83, 0x71, - 0x6d, 0x31, 0xc1, 0x98, 0xfe, 0xa0, 0x0e, 0x58, 0x5c, 0xca, 0x19, 0x5b, - 0x60, 0x1e, 0x44, 0xc7, 0x11, 0x3e, 0x12, 0x6d, 0x32, 0x1a, 0xc5, 0x54, - 0x5d, 0xa8, 0x3d, 0xbb, 0x76, 0x12, 0x15, 0xae, 0xc4, 0x73, 0x9b, 0x80, - 0x77, 0xe3, 0xbd, 0x6e, 0x61, 0x5a, 0xd4, 0x12, 0x15, 0x8c, 0xe7, 0x51, - 0xc7, 0xeb, 0x5d, 0x5b, 0xdf, 0x93, 0x38, 0xa7, 0x2a, 0x74, 0x6c, 0x6b, - 0x15, 0x14, 0xb7, 0x73, 0x86, 0x29, 0xe9, 0x56, 0xda, 0xe7, 0xe2, 0x26, - 0x8f, 0x7c, 0x73, 0x86, 0x14, 0xd7, 0x43, 0x49, 0x98, 0xfe, 0x3d, 0xb2, - 0x7b, 0xf7, 0x95, 0x27, 0x6c, 0x63, 0x44, 0x04, 0xc2, 0xd9, 0xbd, 0x79, - 0xaf, 0x60, 0x1f, 0xca, 0x4d, 0xf5, 0x8d, 0x68, 0x4f, 0x15, 0xc5, 0x23, - 0x7e, 0xc8, 0x10, 0xc0, 0x2b, 0xe9, 0xde, 0x96, 0x20, 0x77, 0xc8, 0x8f, - 0x7a, 0x88, 0xab, 0x63, 0xe8, 0xe6, 0x44, 0x22, 0x80, 0x90, 0x3e, 0x9c, - 0x8c, 0xf7, 0xb8, 0x7b, 0x5a, 0x75, 0x9e, 0xde, 0x25, 0xb2, 0x9d, 0xb5, - 0x96, 0xfa, 0x01, 0x6c, 0x3a, 0x21, 0x4d, 0x42, 0x40, 0x3a, 0xda, 0xfd, - 0x75, 0xc7, 0x82, 0x4c, 0xf5, 0x95, 0x0d, 0x0c, 0x67, 0xd8, 0xe4, 0x74, - 0x6b, 0x91, 0xa4, 0xf3, 0xf2, 0x94, 0xc9, 0xaa, 0x83, 0x03, 0x65, 0xa5, - 0xf7, 0x8c, 0xa0, 0xae, 0x1e, 0xa1, 0x62, 0xa5, 0x66, 0x39, 0xe4, 0xd7, - 0x0e, 0x1c, 0x01, 0x87, 0x5f, 0xe4, 0x8a, 0x4f, 0x4e, 0xa1, 0x8d, 0xca, - 0xd3, 0x19, 0x73, 0x95, 0x3d, 0xc7, 0x8e, 0xc2, 0x9e, 0x0f, 0x97, 0x91, - 0x79, 0x22, 0xb4, 0x35, 0x14, 0xb1, 0x11, 0x8a, 0x3b, 0xd3, 0xdf, 0xbf, - 0x7d, 0x33, 0x5d, 0xb0, 0xda, 0x56, 0xf6, 0xba, 0x4d, 0x4d, 0xdd, 0x07, - 0x5d, 0xdd, 0x27, 0x7f, 0x4f, 0xa5, 0x83, 0x5e, 0x6f, 0xc9, 0x4e, 0x43, - 0x1f, 0xae, 0xb5, 0x20, 0xa9, 0x50, 0xe8, 0x37, 0xa2, 0xf6, 0xa2, 0xcd, - 0xb2, 0xfa, 0xc6, 0x6e, 0x47, 0x60, 0xf7, 0x43, 0x91, 0xfd, 0x19, 0x2e, - 0xc3, 0xe9, 0x1d, 0xbe, 0xbe, 0x1a, 0xbc, 0x73, 0xfa, 0xb0, 0x97, 0xdc, - 0x7d, 0x07, 0xec, 0x85, 0xd7, 0x14, 0xe5, 0x76, 0x06, 0x7f, 0xa7, 0xdd, - 0xef, 0xd1, 0x1f, 0xbb, 0x6b, 0xa2, 0x0b, 0x54, 0x4f, 0x2d, 0xec, 0x94, - 0xfa, 0x5b, 0x75, 0xed, 0xac, 0xf5, 0x92, 0x5b, 0x79, 0xe5, 0x10, 0xc8, - 0xa2, 0xa2, 0x1e, 0x18, 0xe0, 0x18, 0xb7, 0x02, 0xd6, 0xe0, 0xff, 0x0c, - 0x50, 0x7b, 0x69, 0xf3, 0xbe, 0x9d, 0x36, 0x9f, 0x6a, 0xcc, 0xb1, 0xa1, - 0xb4, 0x6f, 0x5e, 0xdb, 0x8e, 0xc2, 0xeb, 0xe4, 0xe9, 0xf8, 0x92, 0x63, - 0x68, 0x91, 0x2a, 0xa8, 0xba, 0x03, 0x87, 0xbb, 0xa0, 0x6a, 0xc8, 0x01, - 0xe3, 0x3c, 0x75, 0x23, 0xb9, 0x72, 0x28, 0xf0, 0xa3, 0x5b, 0xc9, 0x07, - 0xf6, 0xa4, 0x99, 0xe4, 0xdb, 0xf0, 0xd7, 0x69, 0x13, 0xde, 0x2c, 0x71, - 0xc1, 0xe0, 0x8d, 0xbf, 0xe1, 0xda, 0x6e, 0xea, 0xa2, 0x38, 0xda, 0x6a, - 0x78, 0x7f, 0xc2, 0xe7, 0x3d, 0xcc, 0x3a, 0xb8, 0x08, 0xe0, 0x65, 0xfa, - 0xe6, 0xed, 0xfb, 0x00, 0x4a, 0xfe, 0x7b, 0x58, 0xfb, 0xcb, 0x39, 0xef, - 0xaf, 0x65, 0x94, 0xf7, 0xf7, 0x32, 0xca, 0x3b, 0x96, 0x51, 0x00, 0x5a, - 0xbd, 0x79, 0xb7, 0x53, 0xe9, 0xef, 0xf4, 0x68, 0xbb, 0x53, 0xef, 0xa4, - 0xab, 0xd2, 0x38, 0x39, 0xd9, 0xfc, 0xa6, 0x6e, 0x7f, 0xf2, 0x5d, 0x37, - 0x46, 0x0c, 0x15, 0xbd, 0xd1, 0xd7, 0x75, 0x0d, 0x3c, 0x52, 0xd0, 0x36, - 0x2c, 0x92, 0xd5, 0x03, 0xd0, 0x88, 0xd5, 0xa2, 0x55, 0xa3, 0x26, 0xd5, - 0xcf, 0xa5, 0x3b, 0x52, 0x1a, 0x9c, 0xbf, 0x2a, 0x9a, 0x8b, 0xa3, 0xea, - 0x79, 0x73, 0xe9, 0xf7, 0x1d, 0xa7, 0x80, 0x22, 0x17, 0x9c, 0xad, 0x69, - 0x28, 0xf1, 0xcc, 0xe8, 0xd1, 0xf4, 0x75, 0x04, 0xd5, 0xca, 0x09, 0xdb, - 0x0a, 0x40, 0x84, 0xef, 0x44, 0x12, 0x71, 0x5d, 0xde, 0x46, 0x65, 0x74, - 0x54, 0x1f, 0xc9, 0xa2, 0x7b, 0x78, 0xec, 0x7d, 0x1c, 0x31, 0x9d, 0x78, - 0x8f, 0xed, 0xe2, 0x0d, 0xb6, 0xf8, 0xba, 0x32, 0x6c, 0x52, 0xfa, 0xdb, - 0x47, 0x95, 0xf7, 0xd7, 0x16, 0x30, 0x2e, 0x15, 0x37, 0xec, 0x69, 0x8e, - 0xb3, 0x9a, 0x02, 0x5e, 0x55, 0xc6, 0xad, 0x95, 0x1c, 0x66, 0x82, 0xdd, - 0x53, 0x47, 0xbf, 0x8c, 0xfa, 0xe6, 0x6e, 0xfb, 0xf6, 0xcd, 0x76, 0xbf, - 0xbe, 0xfb, 0xd4, 0xbd, 0xfd, 0x85, 0xef, 0x58, 0x2d, 0x71, 0xa8, 0xb7, - 0xbc, 0x3d, 0xc1, 0xef, 0xaf, 0x1c, 0xc6, 0x0e, 0x5b, 0x4c, 0x20, 0xde, - 0x38, 0x4d, 0x0a, 0x9a, 0xaf, 0x5d, 0xb4, 0x60, 0x5a, 0xde, 0xb6, 0xad, - 0xa0, 0x37, 0x15, 0xb0, 0x90, 0x28, 0xe6, 0x26, 0xbf, 0x07, 0x1c, 0xea, - 0x81, 0xa0, 0xe6, 0x73, 0x76, 0x9c, 0x2f, 0x12, 0x34, 0x76, 0xef, 0xb9, - 0xdf, 0xf8, 0xd1, 0x53, 0xae, 0x43, 0xbb, 0xef, 0x7c, 0xaa, 0xdb, 0x79, - 0xab, 0x9a, 0x1e, 0xfe, 0x14, 0xac, 0x39, 0x2c, 0x81, 0x94, 0x8c, 0x8f, - 0x6e, 0x2d, 0x7e, 0x8a, 0xf7, 0x25, 0x3f, 0x7f, 0xca, 0xdd, 0xfe, 0x5f, - 0xfe, 0x94, 0xc7, 0x1f, 0x08, 0x28, 0xe6, 0x84, 0x66, 0x18, 0x9b, 0xe8, - 0x3d, 0x87, 0xcb, 0xcd, 0x95, 0x25, 0x3b, 0x3e, 0x61, 0x28, 0xc5, 0xb0, - 0x54, 0x6e, 0x3d, 0xa9, 0x86, 0xcf, 0x08, 0x4c, 0x83, 0x99, 0xb8, 0x71, - 0xe5, 0x6f, 0xab, 0x1b, 0x1f, 0x75, 0xc8, 0x67, 0x4d, 0x9a, 0x02, 0xb5, - 0xf7, 0x40, 0x25, 0xb7, 0x39, 0x3c, 0x43, 0xfa, 0xe4, 0x34, 0x19, 0x86, - 0x8f, 0xae, 0x22, 0x18, 0x7f, 0x9f, 0x29, 0xd3, 0xb9, 0xf0, 0x5c, 0xab, - 0x81, 0x50, 0xb2, 0x24, 0x78, 0x12, 0xf8, 0xe1, 0x2b, 0xa1, 0x22, 0xbf, - 0x35, 0xfd, 0x08, 0xf8, 0xc0, 0x0c, 0x04, 0xcd, 0xca, 0x00, 0x3b, 0x0d, - 0xdd, 0x10, 0x71, 0x8a, 0x26, 0xe0, 0xa1, 0x76, 0x9a, 0x78, 0xe2, 0xab, - 0x19, 0x9a, 0x2d, 0x99, 0x44, 0xe9, 0x22, 0xa0, 0x06, 0xa8, 0x67, 0x52, - 0x0a, 0x0f, 0x37, 0x90, 0x13, 0x70, 0xab, 0xbe, 0x35, 0x89, 0xd2, 0xf4, - 0xc4, 0x20, 0x7a, 0xf5, 0xf8, 0xc8, 0x34, 0x7d, 0x6b, 0x68, 0x91, 0x01, - 0x05, 0xa0, 0xce, 0xd6, 0x2b, 0xd9, 0x6d, 0xcf, 0x1e, 0x46, 0x12, 0x87, - 0x81, 0x2c, 0xf7, 0x0a, 0x6b, 0x34, 0x82, 0x35, 0x47, 0xc6, 0x25, 0xde, - 0x67, 0x88, 0xc6, 0x1c, 0x1d, 0x17, 0xcf, 0xe7, 0x26, 0xa6, 0x3c, 0x9b, - 0x94, 0xf2, 0x1c, 0x7f, 0xf3, 0xc5, 0x13, 0xf0, 0x9b, 0xf5, 0x7e, 0x7e, - 0x9d, 0x71, 0x38, 0x02, 0x0c, 0x3a, 0x27, 0xa7, 0x34, 0xe6, 0x45, 0x08, - 0x9b, 0x38, 0x02, 0xc7, 0x26, 0xe0, 0x66, 0xb4, 0x88, 0x75, 0x5f, 0x02, - 0xca, 0x56, 0x9e, 0xf9, 0x26, 0x95, 0xe2, 0x40, 0xd4, 0xef, 0x4a, 0xc0, - 0xf7, 0xe5, 0x5b, 0xbe, 0x52, 0x57, 0xfc, 0xae, 0x9f, 0x33, 0x2c, 0xbf, - 0xa8, 0x44, 0x8c, 0x99, 0xaa, 0xf7, 0x52, 0xd1, 0xca, 0x29, 0xff, 0x33, - 0xcf, 0x17, 0xb9, 0x5f, 0x19, 0x66, 0x7c, 0x68, 0x23, 0x17, 0xc3, 0xe4, - 0x1b, 0x60, 0x0a, 0x61, 0xcf, 0x4d, 0x00, 0x16, 0xba, 0x58, 0x46, 0xc7, - 0x65, 0x28, 0x88, 0xe8, 0x98, 0xdd, 0x1d, 0x9c, 0x78, 0xb5, 0x38, 0x61, - 0x62, 0x49, 0xef, 0x3e, 0x67, 0x77, 0x35, 0x9f, 0x7a, 0x9e, 0xf5, 0x87, - 0xfd, 0x39, 0x3b, 0x51, 0x1d, 0x20, 0x62, 0x79, 0x9c, 0xd4, 0xec, 0x80, - 0x43, 0x6e, 0x94, 0x6f, 0x46, 0xdc, 0xaa, 0x06, 0xc1, 0xe9, 0xb5, 0xf1, - 0x82, 0xbf, 0x61, 0x82, 0xb1, 0x53, 0x00, 0x2c, 0xa7, 0x8e, 0x97, 0x4a, - 0xb9, 0xab, 0x65, 0x94, 0x11, 0x80, 0xe8, 0x4c, 0x34, 0xa1, 0x0e, 0x5e, - 0x8f, 0x97, 0x07, 0x94, 0x8f, 0x00, 0x98, 0x50, 0x33, 0x70, 0xf5, 0xdc, - 0x20, 0x4d, 0x8c, 0xb3, 0xad, 0x18, 0x13, 0x24, 0x3b, 0x99, 0xc5, 0xff, - 0x92, 0x97, 0x8e, 0x26, 0x18, 0x51, 0x81, 0xa3, 0x83, 0xdb, 0xb4, 0xa5, - 0x42, 0x97, 0x2a, 0x9a, 0x1c, 0x30, 0x84, 0xeb, 0x75, 0x30, 0x20, 0xa5, - 0x4f, 0xd6, 0x06, 0x16, 0xb9, 0x59, 0x6b, 0x01, 0xbc, 0x21, 0x02, 0x45, - 0x51, 0xa1, 0x46, 0x60, 0x74, 0x65, 0x79, 0xa4, 0x3b, 0x75, 0x59, 0x01, - 0x9e, 0x24, 0x13, 0x23, 0x7d, 0x49, 0xe3, 0x1e, 0x94, 0xa0, 0x3e, 0x87, - 0x0f, 0x40, 0xe6, 0xd9, 0xbe, 0x11, 0x26, 0x91, 0x40, 0x78, 0x2d, 0x66, - 0x6c, 0x3a, 0x0c, 0xc6, 0xdb, 0x4d, 0xf2, 0x89, 0x01, 0x26, 0x55, 0x37, - 0x4d, 0x46, 0x67, 0x1e, 0x49, 0xae, 0x8e, 0x98, 0x03, 0xad, 0x79, 0x72, - 0xbf, 0x9d, 0x72, 0x37, 0x10, 0xb5, 0x46, 0x8d, 0x37, 0x9f, 0x0b, 0x38, - 0x28, 0x81, 0xfc, 0xe4, 0x80, 0x33, 0xb1, 0x92, 0x34, 0xde, 0x3c, 0xca, - 0x89, 0x1f, 0x70, 0xcb, 0x3b, 0xcb, 0x12, 0x17, 0x82, 0x5f, 0xac, 0x08, - 0x23, 0x8e, 0x7a, 0x8c, 0x69, 0x5e, 0x47, 0x32, 0x9b, 0x27, 0xe1, 0x6e, - 0x75, 0x4d, 0x56, 0xde, 0x0d, 0xfb, 0x20, 0x01, 0x1d, 0xab, 0x70, 0xf4, - 0xd2, 0xfb, 0x5d, 0xea, 0xc2, 0x46, 0x2e, 0x9c, 0xc1, 0xf5, 0xb2, 0xb8, - 0xfb, 0xe5, 0x19, 0x07, 0x12, 0x18, 0xc6, 0x78, 0x4a, 0x3a, 0xb2, 0x8c, - 0xfa, 0x7b, 0x50, 0x96, 0xd8, 0xd6, 0x64, 0x8d, 0xc1, 0x3d, 0xfd, 0xa2, - 0x2f, 0x87, 0xad, 0x13, 0xa8, 0x21, 0x32, 0x70, 0xdc, 0xf4, 0x23, 0xa5, - 0x9a, 0x51, 0x06, 0x8d, 0x0a, 0xce, 0x8f, 0x0f, 0x17, 0xaa, 0xac, 0xe2, - 0x51, 0xf2, 0xf6, 0xc5, 0xc6, 0x55, 0x61, 0x08, 0x0c, 0xdb, 0x0c, 0x40, - 0xf3, 0x22, 0x69, 0xaf, 0xc2, 0x64, 0x88, 0x1d, 0x1b, 0x23, 0xcb, 0x45, - 0xae, 0x3f, 0x97, 0xa9, 0xf6, 0x17, 0xe0, 0xa8, 0x5e, 0x47, 0xf8, 0x6d, - 0x37, 0x89, 0x7b, 0xe3, 0xdf, 0x97, 0x41, 0xc7, 0xd0, 0x6f, 0x85, 0xca, - 0x80, 0xe3, 0x20, 0xc8, 0x3f, 0xdc, 0xb2, 0x90, 0x0e, 0x5a, 0x11, 0x66, - 0x3b, 0x22, 0x62, 0xbd, 0xe6, 0x2c, 0x7c, 0x8c, 0x06, 0x6a, 0x13, 0x42, - 0x2f, 0xc7, 0x79, 0x65, 0xe2, 0x66, 0x48, 0xf1, 0xa0, 0xde, 0xa7, 0x8e, - 0xf3, 0xf1, 0xa7, 0xb0, 0xde, 0xe2, 0xaa, 0x23, 0xf1, 0x8d, 0x0e, 0xcc, - 0x48, 0x31, 0x51, 0xcc, 0x9d, 0xc5, 0xf5, 0xa8, 0x11, 0xf0, 0xb9, 0xe5, - 0x71, 0xcb, 0x6f, 0x01, 0xbe, 0x68, 0xb1, 0x8c, 0x54, 0x00, 0xeb, 0x87, - 0x36, 0x82, 0x2a, 0xaf, 0x8e, 0xb8, 0x61, 0xa6, 0x8d, 0x2f, 0x42, 0x85, - 0x73, 0x25, 0xa4, 0x85, 0xc1, 0x98, 0xa8, 0xe5, 0xb1, 0x71, 0x36, 0x0e, - 0xc0, 0x13, 0xa7, 0x00, 0x11, 0x66, 0x8f, 0x9f, 0xa4, 0x5d, 0x8d, 0x4a, - 0x7a, 0x46, 0x5c, 0x22, 0x19, 0xb3, 0x82, 0xc8, 0x42, 0x31, 0x68, 0x2b, - 0xbc, 0x55, 0x57, 0xfd, 0xc6, 0x35, 0xea, 0xdc, 0x3a, 0x46, 0x8f, 0xca, - 0x5b, 0xc5, 0xc8, 0x4f, 0x6c, 0x54, 0x91, 0xa7, 0xf4, 0x3e, 0xae, 0x4d, - 0xab, 0x91, 0xe1, 0x29, 0x39, 0x29, 0x4e, 0xf1, 0x86, 0x95, 0xba, 0x69, - 0xc6, 0x75, 0x63, 0x63, 0x5d, 0xb7, 0xc5, 0xe7, 0xa9, 0x98, 0x2f, 0x32, - 0xd9, 0x94, 0x57, 0x60, 0x30, 0x0c, 0x6e, 0x15, 0x1e, 0x5d, 0xbf, 0xd9, - 0xb8, 0xbd, 0xe8, 0x28, 0xcc, 0x2b, 0xba, 0x89, 0xcd, 0xdb, 0x12, 0x2e, - 0xfc, 0x20, 0x0e, 0xbc, 0x88, 0x9d, 0x00, 0x13, 0xb7, 0x77, 0x67, 0x17, - 0xb0, 0xf5, 0x06, 0xd5, 0xd2, 0x08, 0xad, 0xe5, 0xe8, 0x11, 0xb6, 0x94, - 0x9c, 0x70, 0x8f, 0xc9, 0xd1, 0x5c, 0xd1, 0x1e, 0x28, 0x84, 0xc2, 0x71, - 0xff, 0xa5, 0x13, 0xaf, 0x7f, 0xe3, 0x8f, 0x12, 0x93, 0xe4, 0x43, 0xb8, - 0x4d, 0x31, 0x15, 0x39, 0x7c, 0x02, 0x65, 0x2c, 0xb8, 0x17, 0xde, 0xdb, - 0x01, 0xd2, 0xa5, 0x2b, 0x43, 0xbb, 0x5c, 0x85, 0x18, 0x39, 0x08, 0x8e, - 0x26, 0x65, 0xd1, 0xff, 0x44, 0x9c, 0x96, 0x9c, 0xaa, 0x04, 0x6d, 0xb6, - 0x58, 0xed, 0x03, 0xb0, 0xaf, 0xf5, 0x47, 0xfa, 0xed, 0x72, 0xa7, 0xa4, - 0xc5, 0xf0, 0x25, 0xc9, 0xef, 0x32, 0xb1, 0xc6, 0x1a, 0xb2, 0x39, 0x9d, - 0xba, 0x1f, 0x62, 0xee, 0x5c, 0x18, 0x6a, 0xf9, 0x92, 0xa1, 0x7b, 0x5f, - 0x1b, 0x07, 0x80, 0xae, 0x2e, 0xd5, 0xa0, 0x95, 0xaf, 0xbf, 0x40, 0xb5, - 0xc9, 0x00, 0x3b, 0x3f, 0x50, 0xaa, 0xec, 0xcb, 0x03, 0x9d, 0xa2, 0x1f, - 0x3d, 0x90, 0x0d, 0x4b, 0x99, 0x04, 0x2d, 0x22, 0x5f, 0x2e, 0xf2, 0xbc, - 0xb0, 0xc3, 0xc9, 0xd2, 0x37, 0x9b, 0xa1, 0x0d, 0x21, 0xfb, 0x2f, 0xf2, - 0xa0, 0x92, 0x65, 0xa3, 0x13, 0x7f, 0xe1, 0x08, 0x6d, 0x64, 0x97, 0x5b, - 0x73, 0x3f, 0xdb, 0x60, 0xec, 0x1d, 0x48, 0xbe, 0xe2, 0x6f, 0xd0, 0xc4, - 0xcd, 0x00, 0x96, 0xac, 0x88, 0x28, 0x78, 0xe9, 0xdb, 0xaf, 0x2f, 0xe4, - 0x0c, 0xd6, 0x9b, 0x00, 0x95, 0x76, 0xe9, 0x4d, 0xcb, 0x32, 0x09, 0x11, - 0x73, 0xf3, 0x5c, 0x75, 0xb4, 0x12, 0xd5, 0x5f, 0x5c, 0x33, 0x91, 0x61, - 0x8d, 0xa0, 0x06, 0xc6, 0x78, 0xfd, 0x4b, 0x7d, 0xa7, 0x01, 0xf6, 0x9a, - 0x46, 0x0b, 0x87, 0xcc, 0xcc, 0xe1, 0xe8, 0xae, 0x58, 0x35, 0xda, 0xe5, - 0xab, 0xfd, 0xfb, 0x43, 0xbd, 0x74, 0x59, 0x2b, 0xc1, 0x24, 0x7e, 0x3e, - 0xdc, 0x30, 0x7f, 0x84, 0xe1, 0xd3, 0x9d, 0x85, 0x9c, 0xf9, 0xa7, 0x4b, - 0x50, 0x59, 0xb7, 0x12, 0xb3, 0x85, 0xa7, 0x4c, 0xed, 0xc0, 0xb5, 0x91, - 0x76, 0x1c, 0x44, 0xab, 0x2f, 0xf6, 0x6c, 0x7c, 0x08, 0x79, 0x1d, 0xdf, - 0xfd, 0xea, 0x02, 0x70, 0xb0, 0x2e, 0xe4, 0xf5, 0x6c, 0x17, 0xb8, 0xea, - 0xc8, 0xac, 0x87, 0x39, 0xf3, 0x03, 0x53, 0x05, 0xb8, 0xcc, 0x37, 0xd8, - 0xca, 0xf4, 0xe1, 0x3e, 0xd7, 0x33, 0xea, 0x42, 0x3c, 0x62, 0x93, 0xff, - 0xb2, 0xd6, 0xe0, 0x98, 0x9a, 0x4a, 0x6c, 0x9a, 0xbc, 0x68, 0xa6, 0x49, - 0x8a, 0x9a, 0x08, 0xca, 0x9f, 0x5a, 0x29, 0xa7, 0xc9, 0x35, 0x48, 0x0a, - 0xd5, 0x7e, 0xc6, 0xd8, 0x19, 0x77, 0xdc, 0xf2, 0xe4, 0x75, 0x7d, 0x92, - 0x4a, 0x47, 0x28, 0xd7, 0x70, 0x6b, 0x88, 0xa0, 0x7f, 0xc7, 0x3f, 0x6e, - 0xb1, 0xe5, 0x4f, 0xb5, 0xdc, 0x42, 0xb0, 0x37, 0x35, 0xb7, 0xce, 0xb2, - 0x13, 0xa8, 0x78, 0x6e, 0xb8, 0x56, 0xc0, 0x79, 0x38, 0x58, 0x7e, 0x33, - 0x75, 0x03, 0x66, 0x2d, 0x5d, 0xe0, 0x7e, 0x7c, 0xfd, 0xe6, 0xf9, 0x7c, - 0xe1, 0x97, 0x85, 0x25, 0xae, 0xea, 0xb3, 0x48, 0x31, 0x2f, 0xe8, 0xe4, - 0x84, 0xb5, 0x0e, 0x60, 0x52, 0x00, 0x05, 0xe6, 0x96, 0x1e, 0x07, 0x8a, - 0x6c, 0x03, 0x43, 0x62, 0xfd, 0xe2, 0x69, 0x20, 0xdc, 0x35, 0x1f, 0xf9, - 0x2c, 0x95, 0x5e, 0x41, 0xbd, 0x15, 0xe5, 0x38, 0xee, 0x2f, 0x9b, 0xc3, - 0x54, 0xe4, 0xbb, 0x6a, 0x64, 0xbe, 0x4b, 0x5a, 0xc9, 0x30, 0x1e, 0x86, - 0x7c, 0xc9, 0x72, 0x54, 0x3e, 0x19, 0xda, 0xe6, 0x8d, 0xcc, 0x74, 0xf4, - 0xe0, 0xac, 0xe1, 0xd0, 0x00, 0x34, 0x5f, 0x83, 0x46, 0x35, 0xcf, 0xb3, - 0xee, 0x6b, 0xe5, 0xd0, 0xa2, 0x95, 0x33, 0x2b, 0x52, 0xf6, 0xd6, 0xce, - 0x26, 0x9a, 0x75, 0x48, 0x22, 0xe7, 0xf0, 0x1b, 0xe9, 0x76, 0x5d, 0x0c, - 0x18, 0x85, 0xc4, 0x09, 0xe5, 0x97, 0x23, 0x95, 0x5a, 0xde, 0x35, 0x34, - 0x19, 0x40, 0xfa, 0x58, 0xf7, 0xd6, 0xe4, 0x92, 0x5a, 0xa0, 0x52, 0xa1, - 0xbe, 0x71, 0x8d, 0x23, 0x8e, 0x42, 0xe1, 0x29, 0x8f, 0xa2, 0x78, 0x3e, - 0x7a, 0xd3, 0x2a, 0x91, 0x2d, 0xaf, 0xf1, 0x4d, 0x52, 0x3f, 0x98, 0x79, - 0xea, 0x11, 0xee, 0x34, 0x28, 0xdf, 0xcb, 0x7f, 0x1c, 0x0e, 0x28, 0xd9, - 0x62, 0x7a, 0x94, 0xa1, 0x22, 0xd0, 0x1c, 0xa6, 0xc3, 0xa6, 0xbf, 0xa3, - 0xf4, 0xbd, 0x19, 0x94, 0x0e, 0x5f, 0x02, 0x4c, 0x45, 0x00, 0xf0, 0x86, - 0x0d, 0x16, 0xa0, 0x39, 0xf0, 0xa8, 0x27, 0xd8, 0xd2, 0x85, 0x6f, 0x36, - 0x8a, 0x9b, 0xcf, 0xa4, 0xec, 0x46, 0xb6, 0xe4, 0xfd, 0xc9, 0x96, 0x28, - 0x97, 0xc1, 0x2e, 0xdb, 0x34, 0x38, 0xd5, 0x93, 0xf3, 0xe0, 0xfd, 0x0b, - 0xa0, 0x62, 0xb7, 0x39, 0xab, 0xc2, 0x38, 0xbb, 0xcb, 0xf5, 0xf7, 0x49, - 0xb0, 0xcf, 0x9c, 0xe2, 0xe4, 0x2d, 0xbe, 0x75, 0x83, 0xd2, 0x50, 0xf6, - 0x41, 0x62, 0x6d, 0x40, 0x9c, 0x94, 0x64, 0x95, 0x15, 0x76, 0x47, 0x44, - 0xa0, 0x36, 0xd9, 0x75, 0xcc, 0x82, 0x65, 0x20, 0x0c, 0xa4, 0xf5, 0xa4, - 0x59, 0xf6, 0xcd, 0x02, 0x2e, 0x14, 0xe0, 0x18, 0xa0, 0x2a, 0xea, 0xfe, - 0x80, 0xf4, 0xa7, 0x32, 0xdf, 0x47, 0xd5, 0xc4, 0x1d, 0x13, 0x7f, 0xae, - 0x39, 0x59, 0xc1, 0xc3, 0xc9, 0x74, 0xac, 0x5b, 0x7a, 0x2b, 0xab, 0x3d, - 0xa2, 0x5c, 0xae, 0xba, 0xf6, 0x9a, 0xf5, 0x15, 0x38, 0x46, 0xe9, 0x12, - 0x56, 0xd6, 0x10, 0x9d, 0x77, 0xdc, 0x35, 0x25, 0xa5, 0xf9, 0x10, 0xeb, - 0x43, 0xc0, 0x1d, 0x1a, 0x28, 0xa0, 0xde, 0x0e, 0x84, 0xf8, 0x21, 0x57, - 0xe7, 0xa3, 0x00, 0xa4, 0x14, 0x27, 0x90, 0x1e, 0x7e, 0x3c, 0xa5, 0x8c, - 0x8f, 0xc8, 0x69, 0x0c, 0x8a, 0x06, 0x25, 0x51, 0x09, 0x31, 0xc3, 0x0c, - 0xf9, 0xfc, 0x00, 0x50, 0xdb, 0x42, 0xc0, 0x1a, 0x8d, 0x8d, 0xaa, 0x65, - 0x1f, 0x2e, 0x50, 0xf2, 0xbc, 0x1d, 0xc9, 0xcd, 0xc5, 0x62, 0xaa, 0xeb, - 0xb9, 0x45, 0x6c, 0xde, 0x03, 0x90, 0xb2, 0x6a, 0xf8, 0x9d, 0x28, 0x51, - 0x0f, 0x02, 0xc9, 0xa0, 0x7f, 0xa4, 0xa6, 0x6f, 0xb9, 0xb5, 0x6e, 0xc6, - 0x18, 0x35, 0x29, 0x00, 0xd5, 0xcb, 0x63, 0xe9, 0x1e, 0xda, 0x28, 0xfd, - 0x03, 0x1d, 0xab, 0xa8, 0xb7, 0x32, 0xb1, 0x58, 0xc5, 0xf5, 0xf4, 0x6d, - 0xed, 0x5d, 0x9b, 0xd2, 0xb2, 0xed, 0xf5, 0x47, 0x39, 0x49, 0xae, 0x47, - 0x09, 0xc0, 0x33, 0x0b, 0xf9, 0xf0, 0x5c, 0xdd, 0xc5, 0x78, 0x32, 0x76, - 0xcf, 0xa3, 0xdd, 0x55, 0xc9, 0x3b, 0x62, 0x54, 0x3f, 0x7f, 0x8a, 0xce, - 0x7c, 0xe6, 0xb7, 0x42, 0xbd, 0x5b, 0x77, 0xfe, 0xc1, 0x1f, 0x5f, 0xf1, - 0xb9, 0x50, 0x29, 0x40, 0xfe, 0xc4, 0x05, 0x60, 0x43, 0x67, 0xfb, 0x76, - 0x32, 0x88, 0xf8, 0xc3, 0xdc, 0xfc, 0x70, 0x5c, 0xe4, 0xb1, 0x8b, 0xfc, - 0xf1, 0xa1, 0xe0, 0xe4, 0x69, 0x8c, 0x7c, 0x76, 0xcb, 0x7b, 0xd9, 0x8d, - 0xde, 0x3a, 0xd8, 0x1d, 0xfc, 0x76, 0x3f, 0xb3, 0x03, 0xfa, 0xf5, 0x1a, - 0x42, 0x1d, 0xff, 0x65, 0xb5, 0x07, 0x56, 0x7b, 0x29, 0xce, 0x6d, 0x18, - 0xe1, 0xe6, 0xaa, 0x41, 0x9b, 0xfc, 0x5f, 0xd0, 0x0b, 0x1b, 0xa5, 0x0e, - 0xcf, 0x43, 0x8a, 0x9e, 0x0e, 0xc9, 0x3b, 0x24, 0xaa, 0x4b, 0x87, 0x4f, - 0xc7, 0x41, 0xd1, 0xe4, 0x0f, 0xa9, 0xca, 0x27, 0x91, 0x14, 0x65, 0xf0, - 0x84, 0x7b, 0xe3, 0xf9, 0xcb, 0xe3, 0xc2, 0x5f, 0x9b, 0x06, 0xd3, 0xe3, - 0xa2, 0xbe, 0x81, 0x94, 0x9d, 0x8b, 0xa1, 0xec, 0x3e, 0xb1, 0xb8, 0x78, - 0x5c, 0x6c, 0xbe, 0xb9, 0x48, 0x19, 0xeb, 0x71, 0x91, 0x49, 0xad, 0x72, - 0xf8, 0x9b, 0xb8, 0xf4, 0x44, 0x32, 0x44, 0x94, 0xc5, 0x2d, 0x56, 0x0a, - 0xb2, 0x37, 0xc3, 0x3e, 0x25, 0x5b, 0xde, 0xc1, 0xe4, 0x70, 0xfd, 0xdd, - 0x5c, 0x25, 0x9e, 0x5f, 0x02, 0x5b, 0x24, 0x0e, 0x30, 0x90, 0xc7, 0x91, - 0xa8, 0xe3, 0xc6, 0x69, 0x2c, 0x12, 0x74, 0xbb, 0xd1, 0x61, 0x16, 0x80, - 0xa8, 0x97, 0x23, 0x94, 0xb8, 0x4b, 0xb8, 0x72, 0x08, 0xa1, 0x71, 0x5f, - 0x96, 0xe7, 0x51, 0x35, 0x3d, 0xb8, 0x31, 0x5f, 0x28, 0xe7, 0x88, 0x9f, - 0x4c, 0xec, 0x60, 0x97, 0x71, 0xf0, 0xce, 0x2c, 0xa8, 0x6f, 0x6a, 0x3b, - 0xa8, 0x8b, 0xa0, 0x5c, 0x4e, 0x3f, 0xee, 0x2d, 0x4b, 0x30, 0x2d, 0x86, - 0xb5, 0x5e, 0xba, 0xfa, 0x44, 0x52, 0xd6, 0x81, 0xc3, 0x27, 0xd0, 0x50, - 0x45, 0x71, 0xe0, 0x5c, 0xee, 0xf1, 0xe0, 0x67, 0x6b, 0x7a, 0xeb, 0xf6, - 0x7a, 0x8d, 0xfa, 0x3c, 0x10, 0x46, 0x47, 0xe0, 0x44, 0x06, 0x6a, 0xb3, - 0xf3, 0xe8, 0x0e, 0x8b, 0x70, 0x35, 0x40, 0x2b, 0x01, 0x87, 0x7a, 0x6e, - 0x16, 0x01, 0x8e, 0xdd, 0xb3, 0xcc, 0xb8, 0x3c, 0x74, 0xb8, 0xce, 0x64, - 0x1a, 0xb8, 0x2b, 0xbc, 0x88, 0xc5, 0x4f, 0xb1, 0x41, 0x56, 0xef, 0x95, - 0x16, 0x64, 0x23, 0x78, 0xe7, 0x6c, 0x0d, 0x36, 0x2f, 0xfe, 0x03, 0x15, - 0x0a, 0xc3, 0x4e, 0x2d, 0x1c, 0x66, 0xff, 0x1c, 0xa2, 0xba, 0x90, 0xde, - 0xb9, 0x78, 0xcb, 0x35, 0xf0, 0x60, 0x5f, 0x7e, 0x2c, 0x1a, 0xb7, 0x0f, - 0xea, 0x39, 0x66, 0xaf, 0xe1, 0x84, 0xa1, 0xbc, 0xd2, 0xb1, 0xdc, 0xed, - 0x43, 0x66, 0x5e, 0xec, 0x3b, 0x14, 0xd5, 0x4b, 0x41, 0x3d, 0xe4, 0x82, - 0xb6, 0x16, 0x6f, 0x5c, 0x32, 0x73, 0x77, 0xf1, 0x77, 0xb1, 0x7f, 0x01, - 0x20, 0xf7, 0x25, 0x82, 0x1e, 0xdf, 0x12, 0xe8, 0xd1, 0x0b, 0xa0, 0xc7, - 0x97, 0xc0, 0x79, 0x7c, 0xc9, 0x9b, 0xc7, 0x12, 0x2b, 0x41, 0x40, 0xd1, - 0xf4, 0x8f, 0x85, 0x63, 0xf9, 0x41, 0x7d, 0xc2, 0xc7, 0x3a, 0x42, 0x35, - 0xe8, 0xe1, 0x3a, 0x81, 0x8f, 0xd2, 0x35, 0x76, 0x31, 0x73, 0x80, 0xdd, - 0xc1, 0x1e, 0xe1, 0x58, 0xa8, 0xfd, 0x25, 0x6c, 0x76, 0xb1, 0xb0, 0x18, - 0xea, 0xa4, 0x90, 0x28, 0x53, 0xb7, 0xa7, 0xb7, 0xd4, 0x8d, 0x0e, 0x47, - 0xde, 0x63, 0x93, 0xd3, 0x64, 0xc8, 0xa3, 0xbb, 0x29, 0xe1, 0x98, 0x2d, - 0x0c, 0xb0, 0x85, 0xa8, 0x48, 0x15, 0x01, 0x91, 0x58, 0x6f, 0x4b, 0x3d, - 0xec, 0xec, 0x46, 0xa9, 0x94, 0x4e, 0xcd, 0x17, 0xa2, 0xf6, 0x9d, 0x13, - 0xf1, 0x0a, 0xe3, 0x87, 0xba, 0xb4, 0x62, 0xb8, 0x89, 0x59, 0x87, 0x0e, - 0x10, 0xa2, 0xbb, 0x85, 0x5b, 0x5f, 0xb6, 0xb7, 0x0c, 0xe4, 0x84, 0x12, - 0x2a, 0x41, 0xce, 0xe4, 0x2b, 0x80, 0x27, 0x24, 0xf1, 0x33, 0xbf, 0xd0, - 0x40, 0x4e, 0x13, 0xe7, 0xb6, 0x3f, 0x26, 0xf6, 0x6c, 0x03, 0xc5, 0xaf, - 0xcd, 0x52, 0x76, 0xa3, 0x65, 0x0c, 0x20, 0x9b, 0xd7, 0x6d, 0x34, 0x26, - 0xb2, 0x90, 0x9e, 0xa2, 0xe6, 0x01, 0x62, 0x5f, 0x83, 0x0d, 0x43, 0x7a, - 0x4d, 0x49, 0x2e, 0x9b, 0xbf, 0x21, 0xdc, 0x30, 0x00, 0xd9, 0xe5, 0x62, - 0x80, 0x26, 0xc0, 0xde, 0x80, 0x01, 0xfd, 0x5a, 0x92, 0x5c, 0xa8, 0xf3, - 0x23, 0x8c, 0xc5, 0x34, 0xeb, 0x74, 0xf0, 0xe7, 0xef, 0xbd, 0x5e, 0x0e, - 0x44, 0x73, 0x85, 0x62, 0x34, 0xac, 0x54, 0x06, 0xdc, 0x2b, 0xc4, 0xa4, - 0x2a, 0xe0, 0xfd, 0xac, 0x50, 0xb3, 0x9c, 0x8e, 0x2b, 0xed, 0xb7, 0xa5, - 0x21, 0x7f, 0x23, 0x19, 0xaf, 0x1b, 0xce, 0xe6, 0xaf, 0x18, 0xf2, 0x57, - 0x0c, 0xd9, 0x53, 0x12, 0x87, 0x05, 0x84, 0xc3, 0xef, 0x40, 0x9e, 0x5e, - 0x25, 0x79, 0x01, 0x94, 0x5b, 0xde, 0x55, 0x3d, 0x7b, 0x8e, 0x9f, 0xf5, - 0x4c, 0xb3, 0x13, 0xe8, 0x08, 0x14, 0xe2, 0xda, 0x1d, 0x21, 0x83, 0xbc, - 0xe8, 0x78, 0x36, 0xbc, 0xae, 0x93, 0x4d, 0xc9, 0xfe, 0xb8, 0x3e, 0x70, - 0x10, 0x48, 0xf0, 0xa0, 0xa8, 0xba, 0x1b, 0x4d, 0x88, 0x80, 0x48, 0x11, - 0x7b, 0x43, 0xf5, 0xf5, 0x8d, 0xfd, 0xfe, 0x55, 0xd9, 0x10, 0x2c, 0x2b, - 0x0f, 0x79, 0x4a, 0xbc, 0x40, 0xd8, 0xe7, 0x4a, 0x0d, 0x15, 0xc1, 0x29, - 0x3d, 0x52, 0x45, 0xf5, 0xee, 0x14, 0x3d, 0x94, 0x9e, 0xc2, 0x63, 0x74, - 0x81, 0xf4, 0x12, 0x08, 0xd7, 0xd7, 0x7d, 0xfc, 0xe2, 0xea, 0x73, 0x7c, - 0xdd, 0x6d, 0xf8, 0x8f, 0xd5, 0x8c, 0x0b, 0xb6, 0x22, 0x17, 0xe5, 0x84, - 0xe0, 0x23, 0x10, 0x96, 0xf9, 0x1c, 0x9a, 0x3c, 0x21, 0x14, 0x59, 0x24, - 0xd3, 0xf1, 0x4e, 0x4f, 0x07, 0x9c, 0x2a, 0x19, 0x7c, 0x0e, 0xaf, 0x81, - 0x54, 0xdc, 0x01, 0x77, 0xa4, 0x53, 0x58, 0x9e, 0x37, 0x4f, 0x90, 0x34, - 0x99, 0x6c, 0xc3, 0xdd, 0x72, 0x02, 0x24, 0x49, 0x7b, 0x27, 0xd0, 0x2b, - 0xa5, 0x55, 0x5f, 0x79, 0x4f, 0x32, 0x32, 0x07, 0xe4, 0xcf, 0xdd, 0x13, - 0x3f, 0x4f, 0x23, 0x11, 0xa8, 0x74, 0x18, 0x6c, 0x52, 0x16, 0x0b, 0x0a, - 0x85, 0xef, 0x0b, 0xa3, 0xe6, 0xc4, 0x78, 0x43, 0x9f, 0x00, 0xe7, 0xda, - 0x65, 0xe3, 0x43, 0xaa, 0xda, 0x01, 0xe6, 0xcc, 0x74, 0x3c, 0x54, 0x11, - 0x98, 0xeb, 0x8f, 0x74, 0x41, 0x67, 0x05, 0x04, 0xad, 0xb2, 0x1b, 0x15, - 0x7e, 0x83, 0xe0, 0xfa, 0x12, 0xbf, 0xf8, 0x81, 0x26, 0x8c, 0x14, 0x83, - 0x3e, 0xc7, 0x8b, 0xb9, 0x2a, 0xc5, 0x91, 0x2f, 0x1b, 0x27, 0x3a, 0x94, - 0xbe, 0x00, 0x22, 0xe7, 0x46, 0x65, 0xdc, 0x38, 0x79, 0x8b, 0x96, 0xb1, - 0x05, 0x50, 0xcd, 0xc2, 0x80, 0x72, 0x90, 0xf8, 0x69, 0xa5, 0x31, 0xe8, - 0x8d, 0x96, 0x10, 0xd8, 0xc2, 0x46, 0x56, 0x40, 0x73, 0x55, 0xb5, 0x0d, - 0xd0, 0x84, 0x1c, 0x91, 0x5b, 0x8e, 0x23, 0x5e, 0x87, 0x03, 0x97, 0xfb, - 0x0d, 0xef, 0x2c, 0x8d, 0xd7, 0x80, 0x9c, 0x7e, 0x11, 0xf2, 0x65, 0x2f, - 0xf2, 0xaf, 0x8c, 0xf0, 0x48, 0xf1, 0x34, 0x0c, 0x33, 0x89, 0xaf, 0x83, - 0x01, 0xf6, 0xb9, 0x36, 0x45, 0xae, 0x99, 0xd4, 0x2e, 0x37, 0x91, 0xe8, - 0x59, 0x3f, 0x83, 0x4e, 0x38, 0x92, 0x30, 0xab, 0xa6, 0xeb, 0x93, 0x35, - 0x88, 0x45, 0x31, 0xa5, 0x2e, 0xee, 0xb4, 0xd2, 0x2d, 0x34, 0xac, 0x49, - 0x94, 0xf9, 0x41, 0x30, 0xbd, 0x41, 0x17, 0x46, 0x39, 0x5f, 0x82, 0x8f, - 0xb1, 0x4c, 0x42, 0x33, 0xcb, 0x5d, 0xc0, 0x5b, 0xf4, 0x94, 0xa8, 0xde, - 0x28, 0xfb, 0x0f, 0x35, 0x1a, 0x64, 0xd3, 0xc4, 0x2d, 0x12, 0x51, 0x1c, - 0xc6, 0x17, 0xcc, 0x65, 0x61, 0xce, 0x18, 0x3c, 0x27, 0xf5, 0x79, 0x7e, - 0x9e, 0x55, 0x60, 0x57, 0xed, 0x9a, 0x6a, 0x6f, 0x07, 0xfd, 0x88, 0x22, - 0x9e, 0xf8, 0x71, 0xc9, 0xed, 0xb7, 0xf7, 0xe0, 0xc4, 0x3b, 0x2d, 0x42, - 0x16, 0xa4, 0x4d, 0x43, 0x93, 0x88, 0x26, 0x26, 0x84, 0x4c, 0x17, 0xaf, - 0x53, 0x80, 0xe6, 0x4f, 0x64, 0xef, 0xc4, 0x98, 0x4d, 0x86, 0x81, 0x08, - 0x4a, 0x28, 0x57, 0x71, 0x1a, 0x91, 0x06, 0x7c, 0xe1, 0xa4, 0xe1, 0x04, - 0x26, 0x79, 0x37, 0x6e, 0xbd, 0xc1, 0x0d, 0xc2, 0x5c, 0x31, 0x69, 0x60, - 0xd7, 0xa7, 0xad, 0x0c, 0xb9, 0x8e, 0x57, 0xfd, 0xbe, 0x8e, 0x0f, 0x1b, - 0x13, 0x70, 0x10, 0x4d, 0xb6, 0x97, 0x1f, 0xae, 0x5a, 0xcd, 0x39, 0xee, - 0x72, 0x3a, 0x36, 0x11, 0xb3, 0xfb, 0x25, 0x77, 0xcc, 0x0f, 0xe8, 0xa6, - 0x91, 0x61, 0xe2, 0x17, 0xed, 0xb0, 0xcd, 0x20, 0x50, 0xb8, 0x3e, 0x4c, - 0x18, 0x59, 0xb2, 0x43, 0x43, 0x3b, 0xa9, 0x9a, 0xd6, 0xb4, 0x53, 0xdb, - 0x69, 0x11, 0x7c, 0x1e, 0xec, 0x85, 0x1c, 0x29, 0x67, 0xf6, 0x4a, 0x14, - 0x81, 0x37, 0x9a, 0x69, 0xd7, 0x88, 0x0b, 0x84, 0xa5, 0x3f, 0x01, 0x36, - 0x91, 0x69, 0x8f, 0xea, 0x3f, 0xe1, 0x38, 0x97, 0xa8, 0x0f, 0xd9, 0xc0, - 0x15, 0xac, 0x2a, 0xde, 0x7d, 0x8d, 0x22, 0x04, 0xf2, 0x07, 0x54, 0x19, - 0xb1, 0x98, 0xf2, 0xaa, 0x88, 0xdf, 0x07, 0x19, 0xbf, 0x6b, 0x0c, 0x60, - 0x55, 0x17, 0x8e, 0x07, 0xcb, 0xe9, 0xa8, 0x42, 0xb4, 0x98, 0xf8, 0xf2, - 0x83, 0x13, 0x7e, 0xaf, 0x51, 0xce, 0xb0, 0x37, 0x9e, 0x0e, 0x7f, 0xfb, - 0xbb, 0x6b, 0x15, 0xed, 0xdc, 0x30, 0x19, 0x76, 0x48, 0x93, 0xf4, 0xca, - 0x13, 0x44, 0xac, 0xef, 0x7a, 0x8a, 0xb3, 0x63, 0x98, 0xce, 0xb7, 0x1e, - 0xf1, 0x07, 0x54, 0xcf, 0xdf, 0x59, 0x2e, 0xfc, 0x66, 0xeb, 0x97, 0x47, - 0xd2, 0xbf, 0x74, 0x29, 0x37, 0xcc, 0x31, 0x22, 0x19, 0xd8, 0xb8, 0x99, - 0x66, 0xf0, 0x32, 0xc8, 0xe5, 0x53, 0x97, 0x4c, 0xf7, 0xb8, 0xca, 0xf3, - 0x40, 0x79, 0xcd, 0xe9, 0xf5, 0x24, 0xf1, 0x04, 0xcf, 0xf7, 0xcc, 0x50, - 0xd8, 0x87, 0x03, 0xd9, 0xd2, 0x42, 0xaa, 0xe8, 0xac, 0x62, 0x91, 0xfc, - 0xde, 0xd8, 0x2f, 0xce, 0x6a, 0x09, 0x33, 0xab, 0x14, 0x6e, 0x36, 0xf2, - 0x35, 0x2b, 0x1d, 0x66, 0xd6, 0xbc, 0x3e, 0x55, 0x8a, 0xdc, 0x3d, 0x12, - 0x51, 0x18, 0xef, 0x37, 0xe7, 0xcd, 0x13, 0xbf, 0x71, 0xa0, 0x99, 0x4d, - 0x12, 0xc5, 0x1b, 0x96, 0x96, 0xc5, 0xd6, 0x64, 0xac, 0xc5, 0x22, 0x4d, - 0x0b, 0x55, 0x04, 0x76, 0x99, 0xbb, 0xf4, 0x1a, 0x04, 0x83, 0x65, 0xfc, - 0x80, 0xd6, 0xc2, 0xba, 0xc2, 0x76, 0x9f, 0xd3, 0x61, 0x7d, 0x80, 0xa7, - 0x76, 0x7c, 0xd4, 0x3d, 0xd8, 0x1b, 0xd6, 0x01, 0x98, 0x97, 0x3b, 0x4a, - 0x20, 0xa6, 0xe5, 0x46, 0x87, 0x7d, 0x10, 0xc8, 0x47, 0xbd, 0x36, 0x4c, - 0xd4, 0x52, 0x34, 0x5b, 0x6e, 0x1a, 0x80, 0x41, 0x97, 0x97, 0x00, 0xce, - 0x0f, 0x34, 0xa4, 0x97, 0xdd, 0x60, 0x28, 0x26, 0xc6, 0x51, 0xe3, 0xd8, - 0xae, 0x16, 0xaa, 0x03, 0x14, 0x55, 0x28, 0xa8, 0x31, 0x3c, 0x98, 0x7d, - 0xde, 0x2f, 0x83, 0x78, 0xc6, 0x2d, 0x37, 0x6f, 0x4c, 0x06, 0xd8, 0xeb, - 0x2c, 0xb7, 0xc7, 0x34, 0x78, 0x84, 0x0f, 0xae, 0x60, 0x10, 0xb2, 0x9e, - 0x60, 0xe5, 0x44, 0x0f, 0x3d, 0xcf, 0x81, 0x74, 0x7c, 0x7b, 0x84, 0x53, - 0x56, 0xea, 0xd4, 0x29, 0x2f, 0xb7, 0x95, 0x4a, 0xc2, 0x89, 0xc6, 0x86, - 0x14, 0xc6, 0xd7, 0xa1, 0x01, 0xb7, 0x3c, 0xac, 0x02, 0x9c, 0x2a, 0x3b, - 0x2a, 0xca, 0xa4, 0x0f, 0xec, 0x05, 0x13, 0x54, 0x1f, 0x35, 0xc0, 0xa5, - 0x96, 0xdc, 0x63, 0x90, 0xb4, 0xb1, 0x3c, 0xbc, 0x17, 0x5d, 0x1e, 0x85, - 0xf5, 0x7c, 0x79, 0x1c, 0x5f, 0x65, 0xfa, 0x90, 0x55, 0xcb, 0xa1, 0xc3, - 0x35, 0x8e, 0x63, 0xec, 0x22, 0x04, 0xd3, 0x15, 0xf7, 0x83, 0x36, 0x27, - 0x79, 0x63, 0x02, 0x0b, 0x96, 0x57, 0x56, 0x3f, 0x37, 0x5c, 0x09, 0xc0, - 0x11, 0x6a, 0x19, 0xbb, 0x06, 0x2f, 0x46, 0xe5, 0x3c, 0xd6, 0xb6, 0xcf, - 0x13, 0x23, 0x3d, 0xf3, 0xfb, 0xc5, 0x28, 0xed, 0x5e, 0x5f, 0xb0, 0x9e, - 0x6f, 0x64, 0x39, 0x87, 0x8d, 0xb9, 0xbe, 0xe1, 0x5c, 0x97, 0xa7, 0x9d, - 0x9f, 0xbf, 0xab, 0xe6, 0x58, 0x4d, 0xdc, 0x44, 0xf9, 0x34, 0x36, 0x96, - 0xaf, 0x43, 0x20, 0x44, 0x8d, 0xac, 0x5d, 0x87, 0xbf, 0xf9, 0x20, 0x5d, - 0xbc, 0x9a, 0xad, 0x89, 0x1f, 0xb1, 0x72, 0x01, 0xc1, 0x69, 0x8a, 0x5a, - 0x64, 0x1c, 0xc7, 0x37, 0x37, 0x44, 0x43, 0x10, 0x3f, 0xc5, 0xb8, 0x48, - 0xc0, 0xdf, 0xea, 0x4c, 0x09, 0x58, 0x15, 0x6a, 0xcd, 0x31, 0xbf, 0x59, - 0x6d, 0x94, 0xbd, 0x76, 0x79, 0x69, 0x7c, 0x5f, 0x24, 0x62, 0xf9, 0xe1, - 0x6b, 0xa4, 0x57, 0x47, 0x4b, 0x00, 0xe4, 0x5d, 0x62, 0xc2, 0xb2, 0x62, - 0xe5, 0x74, 0x83, 0xfd, 0x9b, 0xfa, 0x15, 0xaa, 0x55, 0x6b, 0xf4, 0x0c, - 0x04, 0x2a, 0x15, 0x40, 0xf6, 0x86, 0xeb, 0x1a, 0x85, 0xb2, 0x96, 0x21, - 0xcd, 0xcc, 0xc1, 0xb5, 0x54, 0x80, 0x5d, 0x33, 0x52, 0x93, 0xac, 0x97, - 0xf0, 0x9b, 0x3c, 0x05, 0x58, 0xe6, 0x9e, 0x1c, 0x3c, 0x4f, 0xf9, 0xb9, - 0xb8, 0xb7, 0x7a, 0x12, 0x60, 0x08, 0x72, 0x11, 0x58, 0xe4, 0xb2, 0xfb, - 0x87, 0x8d, 0x1f, 0x90, 0xeb, 0xc0, 0x44, 0xc0, 0x24, 0x31, 0xbb, 0x37, - 0x5c, 0xd7, 0x18, 0x48, 0x61, 0x3d, 0x6b, 0xc1, 0x61, 0x2d, 0x32, 0x57, - 0xfe, 0xd2, 0xb3, 0xab, 0xd0, 0x4d, 0xd1, 0x64, 0x9c, 0xcd, 0xcd, 0x68, - 0x36, 0x11, 0x64, 0xbc, 0x65, 0x8d, 0xd9, 0x86, 0xa7, 0x34, 0x87, 0x37, - 0xd7, 0x00, 0x88, 0xc2, 0x07, 0x67, 0x9e, 0x6a, 0xc8, 0xf5, 0x69, 0xf2, - 0x44, 0xc5, 0xe3, 0xe4, 0xb1, 0xe3, 0x64, 0x12, 0xd3, 0xc9, 0x2f, 0xb9, - 0xb1, 0xef, 0x2d, 0x5e, 0xbf, 0x0b, 0x2d, 0xab, 0x81, 0xa2, 0x6e, 0x8d, - 0x1e, 0xce, 0xba, 0x3f, 0x74, 0x34, 0xe5, 0x01, 0x6d, 0xf3, 0x01, 0x58, - 0xe1, 0x1d, 0x79, 0x97, 0x52, 0x38, 0x64, 0x15, 0xe6, 0x19, 0x65, 0xfb, - 0xe2, 0xb6, 0xab, 0x0c, 0x65, 0x56, 0x96, 0x42, 0x89, 0xb3, 0xac, 0xb4, - 0x19, 0xb5, 0x41, 0x1f, 0xff, 0x35, 0xa9, 0x24, 0x0c, 0xfe, 0xb2, 0x4e, - 0x14, 0x13, 0xc0, 0xdd, 0x30, 0xde, 0x06, 0xe5, 0x3f, 0xd0, 0xa2, 0xac, - 0xfa, 0x55, 0x34, 0xa6, 0x80, 0x28, 0x7f, 0x25, 0x68, 0x15, 0x76, 0xf9, - 0x88, 0x97, 0x89, 0xd8, 0x18, 0xcb, 0xf6, 0x92, 0x51, 0x99, 0x4d, 0x5d, - 0xdb, 0x66, 0xb3, 0xe1, 0x53, 0xd4, 0x66, 0x09, 0xf4, 0xd9, 0xb9, 0x6a, - 0x65, 0x4d, 0x94, 0x03, 0x07, 0x74, 0xce, 0x8a, 0xd4, 0xe5, 0x88, 0x8d, - 0x46, 0x7d, 0x50, 0x25, 0x68, 0x86, 0x06, 0x64, 0xf2, 0xca, 0x22, 0xa4, - 0x36, 0xbf, 0x8f, 0x6d, 0x08, 0xdf, 0xfb, 0x51, 0x26, 0x2e, 0x2c, 0x00, - 0x25, 0xff, 0x59, 0x9c, 0x92, 0xbf, 0x43, 0x03, 0x8e, 0x4f, 0x61, 0x76, - 0xd8, 0x35, 0x1b, 0xee, 0x42, 0x2b, 0x2b, 0x9b, 0x01, 0xaf, 0x76, 0x2e, - 0xd0, 0x18, 0xe9, 0xd3, 0x36, 0x96, 0xd6, 0xbf, 0x90, 0xf1, 0x88, 0x8a, - 0x64, 0x01, 0xeb, 0x7d, 0x62, 0x01, 0xb4, 0x32, 0xb9, 0xf6, 0x59, 0xf0, - 0x18, 0xfd, 0x81, 0xed, 0x7e, 0xc6, 0x0a, 0xf2, 0xc6, 0xe1, 0x13, 0xa4, - 0xb0, 0x2f, 0xd9, 0xb9, 0x51, 0x69, 0x94, 0x86, 0x95, 0x8c, 0xee, 0x94, - 0x77, 0x6d, 0x70, 0xe9, 0xbe, 0x59, 0xd7, 0x5e, 0x04, 0x34, 0x4e, 0xed, - 0xa1, 0xb5, 0xc8, 0x61, 0x76, 0xcf, 0x65, 0xa4, 0xcc, 0x46, 0xc4, 0xaa, - 0xb5, 0x9f, 0x83, 0x49, 0x74, 0xcf, 0xa1, 0xc1, 0x51, 0x70, 0xca, 0x2f, - 0x79, 0x16, 0xb9, 0xe3, 0xa0, 0x5a, 0x0d, 0x78, 0x13, 0xc5, 0xc6, 0xe2, - 0xc8, 0xd1, 0xf3, 0x60, 0x27, 0x65, 0xae, 0xcf, 0xba, 0x88, 0x7e, 0x04, - 0x24, 0x4e, 0x1c, 0x9a, 0x5d, 0x1f, 0xac, 0x74, 0x47, 0x2a, 0x17, 0x6a, - 0x26, 0x13, 0x7e, 0x95, 0x81, 0xf3, 0xbf, 0x43, 0x72, 0xd6, 0xf1, 0x60, - 0x18, 0x36, 0xdc, 0xa3, 0xb0, 0xf8, 0x8f, 0x92, 0x55, 0x24, 0x07, 0x07, - 0xf5, 0xc3, 0xe7, 0x8a, 0x07, 0xec, 0x28, 0xa8, 0x3e, 0xbc, 0xf1, 0xd7, - 0x15, 0x3d, 0x84, 0xb6, 0x0e, 0xf2, 0xb1, 0x37, 0xcc, 0xfc, 0xcd, 0x04, - 0x0b, 0x63, 0x7f, 0x2b, 0xdb, 0xde, 0xbe, 0x7a, 0xf2, 0xd6, 0x64, 0xe4, - 0x9d, 0xfa, 0x78, 0xd2, 0x94, 0xf9, 0x2c, 0x93, 0xf6, 0x56, 0xb8, 0x31, - 0x17, 0x9f, 0xf5, 0x01, 0xfa, 0x44, 0xc8, 0xe0, 0x51, 0x82, 0xb6, 0x9f, - 0x8f, 0xfa, 0x3b, 0xcb, 0xe0, 0xcd, 0x2b, 0x3f, 0xa4, 0x8c, 0xd6, 0x9f, - 0xc9, 0x47, 0x78, 0x1f, 0xb5, 0x86, 0xbc, 0xf9, 0x62, 0x4c, 0xdf, 0x3e, - 0xbe, 0x24, 0xf0, 0xc1, 0x01, 0x9c, 0x8d, 0x40, 0x22, 0xfb, 0x47, 0xc2, - 0xc5, 0x07, 0x4a, 0xa0, 0xfe, 0xe8, 0xd6, 0xa6, 0xb9, 0xde, 0x17, 0x7c, - 0x24, 0x5d, 0x7c, 0xa4, 0x05, 0xd7, 0xc0, 0xec, 0xb1, 0x9c, 0x0c, 0x86, - 0xe2, 0xf9, 0xb1, 0xdf, 0xf0, 0x45, 0x3f, 0xe3, 0xbd, 0x28, 0x4b, 0x7f, - 0x24, 0x68, 0xfd, 0xd4, 0xf6, 0x2f, 0xa4, 0x1a, 0xfd, 0xb3, 0x1f, 0x94, - 0x4a, 0x15, 0xc1, 0xa9, 0xd1, 0xe7, 0x44, 0x82, 0xce, 0x93, 0x95, 0xe2, - 0x37, 0x51, 0x9a, 0xb2, 0x29, 0xf9, 0x75, 0x90, 0x73, 0x61, 0x27, 0x07, - 0x10, 0xe3, 0xdd, 0x95, 0xf6, 0x79, 0x03, 0x72, 0x34, 0xc7, 0xf1, 0x61, - 0x76, 0xeb, 0x06, 0xea, 0xc1, 0x13, 0x63, 0xe8, 0x73, 0xbf, 0xe7, 0xa9, - 0x01, 0xbe, 0xf3, 0x3a, 0xc8, 0x99, 0x70, 0x98, 0x1a, 0xa8, 0x9d, 0x9b, - 0x27, 0x83, 0x5e, 0x1c, 0xf4, 0xe1, 0xb4, 0x38, 0x71, 0xf6, 0xa3, 0xc7, - 0x09, 0x54, 0x35, 0x8c, 0x71, 0xa1, 0xec, 0xca, 0xb9, 0x32, 0x5c, 0x59, - 0xc0, 0x25, 0x5c, 0xe2, 0x50, 0xa5, 0xb8, 0x43, 0xaf, 0x49, 0x8a, 0xb6, - 0x7e, 0x0b, 0x32, 0x17, 0xee, 0x57, 0xb4, 0x34, 0x8e, 0x41, 0x80, 0x79, - 0xa1, 0xa8, 0x3f, 0x38, 0x69, 0x13, 0x97, 0xf0, 0x8c, 0x34, 0x65, 0x0e, - 0xa0, 0x84, 0x0a, 0xcf, 0x21, 0x91, 0x54, 0x4f, 0xc5, 0x33, 0x33, 0xd5, - 0x9e, 0x11, 0x49, 0x38, 0xbe, 0x52, 0x7c, 0x87, 0x3b, 0x3a, 0x89, 0xc9, - 0xd7, 0xd5, 0x05, 0x5f, 0xd1, 0xda, 0x67, 0x05, 0xab, 0x88, 0x89, 0x7f, - 0xbf, 0x7f, 0xfa, 0x6d, 0x3f, 0xf9, 0x22, 0xbe, 0x73, 0x5d, 0x19, 0x2d, - 0x50, 0xae, 0x2c, 0x8a, 0xce, 0xf8, 0x3a, 0x70, 0x75, 0x1d, 0x74, 0x8b, - 0xa8, 0xf6, 0x9a, 0x45, 0x5c, 0x23, 0x79, 0x08, 0x85, 0xdf, 0x9a, 0xe4, - 0x3e, 0xd8, 0x75, 0x04, 0x62, 0x43, 0x25, 0x43, 0xbb, 0xca, 0x84, 0x9f, - 0x67, 0x52, 0x66, 0x58, 0x8d, 0xd4, 0xa1, 0xd7, 0xd3, 0x39, 0x76, 0x0e, - 0xd7, 0x61, 0x75, 0x51, 0xc2, 0xd0, 0xa1, 0x8a, 0xc1, 0x94, 0x14, 0xd5, - 0x45, 0xc8, 0x0e, 0x69, 0xbc, 0x55, 0xa8, 0xdc, 0x0b, 0xa5, 0x67, 0x82, - 0x91, 0xa8, 0xa2, 0xc5, 0x16, 0x1c, 0xfd, 0xbc, 0x62, 0x53, 0x8f, 0xa8, - 0xe5, 0x41, 0x60, 0xff, 0x98, 0xe2, 0xbe, 0x77, 0xb9, 0xc1, 0x51, 0xaf, - 0x31, 0x50, 0x27, 0x83, 0x55, 0x2e, 0x2b, 0x10, 0xd6, 0x5a, 0x17, 0x25, - 0x95, 0x33, 0x32, 0x89, 0x22, 0x70, 0x93, 0x08, 0xeb, 0x64, 0x79, 0xab, - 0x99, 0xf8, 0x71, 0x6a, 0xa2, 0x79, 0x10, 0x85, 0x8c, 0xe1, 0x5e, 0xda, - 0x76, 0x00, 0xdc, 0xe5, 0xb2, 0x9f, 0x55, 0x22, 0xc0, 0xb4, 0x26, 0xb8, - 0xeb, 0x4c, 0x8b, 0x23, 0xff, 0x8c, 0x63, 0x95, 0xab, 0x1f, 0xfc, 0xf2, - 0xc7, 0x76, 0x4d, 0xac, 0x89, 0xb4, 0xeb, 0x9e, 0x03, 0xa0, 0x3b, 0x40, - 0x6e, 0xc9, 0x65, 0x5d, 0x8f, 0xfd, 0x12, 0x3d, 0x53, 0x37, 0x4f, 0xa4, - 0xfa, 0x9b, 0x6e, 0x13, 0x5d, 0xa9, 0xbd, 0xe3, 0x1a, 0x54, 0x65, 0x6d, - 0x90, 0x0d, 0x14, 0x99, 0x78, 0xc7, 0x57, 0xdf, 0xe1, 0x0b, 0xf0, 0x84, - 0xe4, 0x49, 0x0a, 0x71, 0x60, 0x21, 0x7a, 0xc3, 0x4d, 0x37, 0xae, 0x4f, - 0x5f, 0x51, 0x2f, 0x54, 0xf0, 0xcf, 0x04, 0x1d, 0xdf, 0x81, 0x99, 0x45, - 0x20, 0x6d, 0x22, 0x10, 0x2c, 0x53, 0xe9, 0x78, 0x16, 0xf4, 0x67, 0xfc, - 0x97, 0x22, 0xdf, 0xf2, 0x8b, 0x6f, 0x7e, 0x8e, 0xd6, 0x1b, 0xf3, 0x6b, - 0x9f, 0x38, 0xb5, 0x3a, 0x12, 0x68, 0x46, 0xe5, 0xa0, 0x35, 0x1d, 0xf0, - 0xca, 0xd0, 0x27, 0xcf, 0x15, 0xbe, 0xf4, 0x98, 0xde, 0xa2, 0x8c, 0x03, - 0x91, 0x90, 0x18, 0x90, 0x95, 0x4d, 0x38, 0xcf, 0xa9, 0xc3, 0x3e, 0xec, - 0x1a, 0xff, 0x2b, 0xd7, 0x85, 0x55, 0xc2, 0xc7, 0x30, 0x9f, 0x01, 0x51, - 0x75, 0x23, 0x64, 0x7e, 0xa8, 0x47, 0xe0, 0x81, 0xf5, 0xf3, 0x9a, 0x94, - 0x1d, 0x62, 0x72, 0x0b, 0xb5, 0xec, 0x0e, 0xd6, 0x67, 0x49, 0x4b, 0xea, - 0x19, 0xb6, 0x69, 0x71, 0x67, 0x7d, 0x5a, 0xad, 0x8c, 0x87, 0xdb, 0x9f, - 0xe7, 0xac, 0x20, 0x26, 0x0b, 0x73, 0xbd, 0xc1, 0x10, 0x8e, 0xfd, 0x2d, - 0x42, 0xb3, 0x8d, 0x04, 0xf2, 0xc4, 0x56, 0xe8, 0x06, 0xe3, 0xa3, 0xd3, - 0xce, 0x0f, 0x98, 0x99, 0x9d, 0xf3, 0x21, 0xef, 0xc5, 0xe7, 0x14, 0x42, - 0x9b, 0xc0, 0xf1, 0xeb, 0x5e, 0xe3, 0xee, 0xb1, 0x2c, 0x38, 0xfd, 0x43, - 0x5a, 0x5e, 0x2a, 0x70, 0x9c, 0xe8, 0xf7, 0x50, 0xf9, 0xf7, 0x57, 0x7e, - 0x59, 0x1d, 0x3d, 0xa9, 0xea, 0x0d, 0x90, 0x46, 0x5f, 0x62, 0xed, 0x67, - 0xa5, 0x8e, 0xf3, 0x52, 0xb1, 0x6e, 0x63, 0x50, 0xc1, 0x18, 0x3a, 0xe4, - 0x95, 0x27, 0x27, 0x5c, 0x17, 0x10, 0xf2, 0x64, 0x10, 0x9e, 0x8e, 0x50, - 0xde, 0x37, 0xc7, 0x5a, 0x28, 0x25, 0xd4, 0x79, 0x07, 0xe1, 0xb1, 0x82, - 0x25, 0xa2, 0xe2, 0x9c, 0xdd, 0x51, 0x99, 0x2b, 0xd4, 0x2a, 0x43, 0xc7, - 0xd4, 0xd4, 0xc3, 0x63, 0x8f, 0x78, 0x68, 0x00, 0x5c, 0x0d, 0x09, 0xac, - 0xd6, 0x5c, 0x09, 0x77, 0x37, 0xc7, 0x27, 0x8e, 0x3b, 0x7e, 0x82, 0xa7, - 0x06, 0x33, 0x83, 0x8b, 0xff, 0xec, 0x49, 0xc5, 0xbe, 0x1a, 0x37, 0xab, - 0xae, 0x4f, 0x1a, 0x6a, 0x05, 0x1d, 0x45, 0x4e, 0x4e, 0x21, 0xae, 0x4f, - 0x5c, 0xf6, 0x05, 0xe1, 0x03, 0x87, 0x5e, 0x7b, 0x9c, 0xf4, 0xfb, 0xb0, - 0x12, 0x9c, 0x0b, 0xce, 0xf1, 0x1b, 0x42, 0xf0, 0x71, 0x98, 0x2d, 0x0d, - 0x27, 0xd1, 0xce, 0xd9, 0xb1, 0x03, 0x2e, 0xb1, 0x5e, 0x7d, 0x46, 0x7b, - 0xe5, 0x42, 0x2f, 0xb3, 0x5f, 0x08, 0xd1, 0x99, 0x40, 0x7b, 0x4d, 0x02, - 0xec, 0xbe, 0x47, 0xe8, 0x2e, 0x43, 0x6a, 0x47, 0x0b, 0x51, 0xfb, 0x13, - 0x30, 0xfe, 0xfb, 0xd2, 0x74, 0xe0, 0x37, 0x2e, 0x97, 0xca, 0xc4, 0x32, - 0xf1, 0x15, 0xa6, 0x1c, 0xf5, 0xb2, 0x5c, 0x53, 0xe7, 0x37, 0x79, 0x80, - 0xf8, 0x78, 0xc6, 0xa4, 0xc7, 0x13, 0x42, 0xcc, 0xdf, 0x8a, 0xc9, 0x72, - 0xde, 0x3e, 0x81, 0x39, 0x68, 0xe0, 0x64, 0xd0, 0xf4, 0xa7, 0x2a, 0xc5, - 0x20, 0xe0, 0x6a, 0xcf, 0x75, 0x7c, 0xbf, 0x11, 0x72, 0x82, 0xe5, 0x6b, - 0xbc, 0x77, 0x52, 0xe7, 0x87, 0x85, 0x76, 0x91, 0x58, 0xed, 0x25, 0x9e, - 0xc3, 0xd3, 0xe6, 0x62, 0x67, 0x30, 0xd1, 0xe2, 0xa7, 0xe8, 0xc7, 0x08, - 0xc2, 0x2b, 0xfb, 0xaa, 0x14, 0xb1, 0x75, 0xd6, 0x93, 0xc7, 0x95, 0xa9, - 0x3d, 0xaf, 0xc7, 0x7b, 0xf7, 0x50, 0xfd, 0x25, 0xf2, 0x03, 0xd8, 0x3e, - 0x90, 0x22, 0x4b, 0xc5, 0x11, 0x15, 0x55, 0xbd, 0x70, 0xd4, 0x00, 0x57, - 0x53, 0x93, 0xf7, 0xea, 0xd7, 0xc7, 0xad, 0x49, 0x98, 0xc3, 0xda, 0x0b, - 0x92, 0x55, 0x57, 0xe6, 0x10, 0xb1, 0x67, 0xcf, 0x16, 0xa3, 0x13, 0x24, - 0xdb, 0x6b, 0x66, 0xef, 0x98, 0x69, 0xf0, 0x0b, 0x94, 0x96, 0x95, 0x84, - 0x7e, 0x48, 0x14, 0x1b, 0xa8, 0xd2, 0x91, 0x5d, 0x90, 0xca, 0x90, 0xa3, - 0x6c, 0x82, 0xce, 0xf1, 0x1c, 0x0c, 0x0d, 0xd7, 0x0a, 0x32, 0xdc, 0x7c, - 0xf1, 0xdf, 0x54, 0xdd, 0x70, 0xf7, 0x25, 0x29, 0x2e, 0xf6, 0x74, 0x59, - 0xb1, 0xb8, 0x30, 0x66, 0x94, 0x5b, 0x8e, 0x57, 0x1d, 0xff, 0xc3, 0x38, - 0xfa, 0x47, 0x3b, 0xfa, 0x70, 0xf3, 0xa4, 0xfb, 0x3b, 0xc2, 0x15, 0x61, - 0x42, 0xcf, 0x4e, 0xb0, 0xe2, 0x2b, 0x19, 0x89, 0x1e, 0xd4, 0xea, 0xc5, - 0xa8, 0x70, 0x21, 0xfc, 0x28, 0xf2, 0x4b, 0x72, 0x43, 0xb6, 0x34, 0x78, - 0xad, 0xc8, 0x09, 0x76, 0xe0, 0xfc, 0xc1, 0xb6, 0x1b, 0x07, 0x66, 0x1d, - 0x3c, 0x04, 0xbf, 0xaf, 0xe8, 0xd5, 0x65, 0x91, 0xeb, 0x4f, 0x2c, 0xb1, - 0xa9, 0x0e, 0x66, 0x1d, 0xac, 0x23, 0xd7, 0x33, 0x11, 0xe3, 0xea, 0xf9, - 0x49, 0xe0, 0x12, 0xaf, 0x33, 0x2c, 0x7e, 0x2c, 0x29, 0x5e, 0x23, 0x0f, - 0x76, 0xbd, 0xc2, 0x45, 0x0d, 0xa3, 0xab, 0x3c, 0x0e, 0xcb, 0x77, 0xd6, - 0x7f, 0x9f, 0xb5, 0x80, 0x52, 0xd4, 0x26, 0x75, 0x0f, 0x4f, 0xb6, 0x7a, - 0x41, 0x1c, 0xb1, 0xa0, 0xeb, 0xbf, 0xee, 0x4f, 0x27, 0x9c, 0x26, 0x5d, - 0xfd, 0xb8, 0x15, 0x41, 0xed, 0x04, 0x29, 0x75, 0xc1, 0x80, 0x28, 0x18, - 0xfe, 0x0d, 0x97, 0x8b, 0x73, 0xec, 0x92, 0x61, 0xc1, 0x3d, 0x24, 0x4b, - 0xd8, 0xf5, 0xe6, 0x94, 0xe6, 0x1a, 0x36, 0xbd, 0x81, 0x16, 0xba, 0xab, - 0x5c, 0xef, 0xbd, 0xb1, 0x54, 0xa4, 0x89, 0x41, 0xd1, 0x7a, 0xa9, 0x68, - 0x94, 0x08, 0x25, 0x98, 0x78, 0x64, 0xf4, 0x60, 0x35, 0xdc, 0xda, 0xde, - 0xc7, 0xfb, 0x01, 0x00, 0x26, 0x93, 0xb4, 0x87, 0x77, 0x2f, 0x74, 0x21, - 0x85, 0x8c, 0x4f, 0x30, 0xd0, 0x1e, 0xff, 0x2c, 0x15, 0xcb, 0x60, 0x24, - 0x40, 0x92, 0xcb, 0xc1, 0x8b, 0x34, 0xfc, 0x6f, 0x22, 0x8b, 0x13, 0x65, - 0x16, 0x50, 0x76, 0x4a, 0x25, 0x63, 0x80, 0x1f, 0xb9, 0x17, 0xcd, 0x46, - 0x0c, 0xdd, 0x74, 0x70, 0x9f, 0x38, 0xa8, 0x96, 0x21, 0x81, 0x56, 0x6d, - 0xc0, 0x01, 0x6a, 0xc5, 0xf7, 0xca, 0xab, 0x58, 0xac, 0xe2, 0xb8, 0x6b, - 0xe5, 0x49, 0x1f, 0x2f, 0xee, 0x51, 0x59, 0x1f, 0x98, 0x70, 0xfb, 0x84, - 0xee, 0xec, 0x79, 0x3a, 0xfa, 0x31, 0x20, 0x42, 0x5e, 0x69, 0x02, 0x5a, - 0xd4, 0x47, 0x14, 0x7f, 0x66, 0xdd, 0x9d, 0xf8, 0x4e, 0x01, 0x31, 0x4e, - 0xb2, 0x44, 0x96, 0x8c, 0x3a, 0x0e, 0x23, 0xe4, 0x97, 0x33, 0x1b, 0xe3, - 0x9f, 0xcf, 0xab, 0xe6, 0xf4, 0x67, 0x25, 0x2a, 0xf9, 0xae, 0x96, 0x47, - 0xd0, 0x66, 0x28, 0x25, 0x33, 0x74, 0x56, 0x86, 0xe0, 0x7c, 0xb5, 0x46, - 0x45, 0x3f, 0xe7, 0x26, 0x10, 0x05, 0x78, 0xc4, 0x44, 0xd4, 0xd0, 0x27, - 0x6b, 0x94, 0xe6, 0x29, 0xac, 0x4d, 0x9b, 0xf8, 0x57, 0x3f, 0xe7, 0xd4, - 0x90, 0x62, 0xa0, 0xba, 0x8b, 0xf6, 0x4a, 0xe3, 0x59, 0x1c, 0x87, 0x57, - 0x92, 0x63, 0xad, 0x07, 0x41, 0x9c, 0xe9, 0xc2, 0x56, 0x4d, 0x06, 0x62, - 0x34, 0x7e, 0xf1, 0x00, 0x4c, 0x4a, 0x15, 0x36, 0x01, 0x56, 0xec, 0xef, - 0x3f, 0x6c, 0x0b, 0xe9, 0xf1, 0x50, 0xb3, 0xdd, 0x76, 0xe5, 0x84, 0xfd, - 0x7a, 0x60, 0x6f, 0xf0, 0x7a, 0x4c, 0x37, 0x9e, 0x5d, 0x3b, 0x1d, 0xc7, - 0x2c, 0xf5, 0x98, 0xb8, 0xe9, 0x67, 0x74, 0x92, 0x1b, 0x5c, 0xfc, 0xec, - 0xbd, 0xf0, 0xc1, 0x89, 0xc0, 0x81, 0x29, 0xa8, 0xa8, 0x92, 0x0a, 0xe0, - 0xd2, 0x08, 0xa0, 0x0a, 0x8e, 0x99, 0x75, 0xcc, 0x91, 0xb1, 0x47, 0xed, - 0x7e, 0x39, 0xc9, 0x38, 0xbc, 0x49, 0x91, 0x2e, 0x5c, 0x98, 0xbc, 0x1e, - 0x9c, 0x3e, 0x1d, 0xa5, 0x44, 0x66, 0x10, 0xb6, 0x8c, 0x3a, 0xca, 0x3b, - 0x9a, 0x0c, 0x7b, 0x93, 0x63, 0x1f, 0xe4, 0xb2, 0x34, 0x8e, 0xbd, 0xbe, - 0x60, 0x17, 0x9f, 0x9a, 0x64, 0x70, 0xf8, 0x89, 0x61, 0xa0, 0x7d, 0x4a, - 0x41, 0x61, 0x47, 0x92, 0x98, 0x3f, 0x9d, 0x31, 0x87, 0x38, 0x29, 0x05, - 0xa8, 0xd3, 0x33, 0x9c, 0x7f, 0x33, 0xab, 0x81, 0x41, 0x0e, 0xfe, 0x27, - 0x37, 0xf4, 0xed, 0xa3, 0xd2, 0xf0, 0x87, 0x27, 0x50, 0xf9, 0x85, 0x26, - 0x77, 0x65, 0x0e, 0xcc, 0x00, 0x10, 0x6e, 0x61, 0xba, 0xf7, 0x41, 0x52, - 0x38, 0x0c, 0x26, 0x9c, 0xb6, 0xc0, 0x47, 0x1b, 0xe0, 0x35, 0x33, 0x41, - 0x76, 0x80, 0xa0, 0x9f, 0x89, 0x94, 0x46, 0x77, 0x0d, 0xd8, 0xd4, 0xf1, - 0x16, 0xdd, 0x05, 0x8c, 0x46, 0xc1, 0x19, 0xf4, 0xd3, 0xa4, 0x47, 0x55, - 0x3a, 0x46, 0x35, 0xcd, 0x84, 0x89, 0x5a, 0x38, 0xc3, 0xe2, 0x44, 0x2d, - 0x14, 0xb0, 0x30, 0x39, 0xb3, 0x1e, 0x9b, 0x6b, 0xa4, 0x73, 0x9b, 0x8f, - 0x19, 0x03, 0x13, 0x2d, 0x04, 0x21, 0x5a, 0xca, 0x72, 0x99, 0x11, 0x3f, - 0x03, 0x01, 0xe3, 0xb3, 0x85, 0x41, 0xfe, 0x3b, 0x78, 0x90, 0x81, 0x4a, - 0xbf, 0xda, 0xc2, 0x0b, 0x59, 0xbd, 0xa3, 0x5c, 0xab, 0xe5, 0x06, 0x71, - 0x7e, 0x92, 0x04, 0x46, 0x5d, 0x39, 0xdf, 0x07, 0xe0, 0x98, 0xe0, 0x80, - 0x2d, 0x3a, 0xc1, 0x42, 0xfd, 0x34, 0x09, 0x70, 0xa8, 0x34, 0x30, 0x5e, - 0x5f, 0x11, 0x0f, 0xef, 0x85, 0x6d, 0xb2, 0x07, 0xbb, 0x7d, 0x5b, 0x80, - 0x75, 0x76, 0xea, 0x18, 0xa5, 0xc4, 0xcd, 0xc1, 0x1a, 0xe2, 0xcb, 0x3c, - 0xd7, 0xe3, 0x7d, 0xbb, 0x26, 0xc7, 0x06, 0xd4, 0x27, 0xc0, 0x48, 0xea, - 0x22, 0xa2, 0xd7, 0xe3, 0xa0, 0x1e, 0x08, 0x7b, 0x60, 0xa3, 0x96, 0x01, - 0xcf, 0xc8, 0xbf, 0x8b, 0x5f, 0x2a, 0x76, 0x94, 0x05, 0x51, 0x95, 0x68, - 0x3e, 0x14, 0xe4, 0x9a, 0xe1, 0x86, 0x59, 0x81, 0xad, 0x1a, 0xc8, 0xac, - 0x88, 0x32, 0x69, 0x63, 0x18, 0xe6, 0x09, 0x67, 0x3a, 0xea, 0xfe, 0x50, - 0x35, 0x01, 0xe9, 0xe8, 0x1d, 0x9f, 0x7c, 0xcd, 0x17, 0x5a, 0xe1, 0x65, - 0xed, 0xa0, 0x21, 0xc1, 0xa0, 0xc5, 0x41, 0x76, 0xea, 0xab, 0xc2, 0xc4, - 0x1b, 0x2b, 0x5f, 0x8d, 0x5b, 0x87, 0xce, 0x60, 0x70, 0x0e, 0xa2, 0x30, - 0xe8, 0x3e, 0xb0, 0xe7, 0x10, 0xc4, 0x5d, 0xdd, 0x8a, 0xcf, 0x86, 0xbc, - 0x72, 0x5d, 0xa9, 0xe1, 0x25, 0x40, 0x0e, 0x14, 0x91, 0xf3, 0x51, 0x46, - 0x12, 0x5f, 0x1a, 0xb1, 0x44, 0x60, 0x5e, 0xf8, 0x6f, 0x4b, 0x52, 0xcd, - 0x63, 0xee, 0x19, 0xc5, 0x93, 0xf9, 0x09, 0x54, 0x78, 0xd9, 0xc2, 0x8b, - 0x4d, 0xdd, 0x4f, 0x73, 0x83, 0x7b, 0x85, 0xfb, 0x59, 0xe1, 0xef, 0xf7, - 0xb3, 0xbf, 0xfe, 0xec, 0xa2, 0xfd, 0x17, 0x58, 0x8f, 0x53, 0xe8, 0x1b, - 0xab, 0xc2, 0x2d, 0x0c, 0x68, 0x10, 0xea, 0x41, 0x5c, 0xb2, 0x35, 0x97, - 0xdb, 0x39, 0x20, 0x90, 0x8a, 0x92, 0x1f, 0xe9, 0x0d, 0x50, 0xc3, 0xea, - 0xee, 0xab, 0x1f, 0x1d, 0xed, 0x79, 0xbe, 0x63, 0xac, 0xc1, 0xba, 0xf1, - 0xc3, 0xed, 0x5d, 0x6d, 0xd5, 0x86, 0x95, 0xa3, 0x5a, 0xf2, 0xe0, 0x4a, - 0xc0, 0xc9, 0x93, 0xdb, 0x0d, 0x2a, 0xe9, 0xc6, 0x6a, 0xd8, 0xad, 0x63, - 0x9b, 0x30, 0x41, 0xb5, 0xd7, 0x9b, 0x6a, 0x72, 0xe2, 0x15, 0x3b, 0xd0, - 0xab, 0x9a, 0x32, 0xc0, 0x26, 0xc0, 0x37, 0x87, 0xd5, 0x2a, 0xa0, 0xae, - 0x9b, 0x70, 0xd3, 0x55, 0x00, 0xea, 0x68, 0x92, 0xce, 0xe8, 0x03, 0x40, - 0x51, 0x17, 0x80, 0x07, 0x78, 0x29, 0x9e, 0xd9, 0x49, 0xed, 0xcb, 0xa0, - 0xa5, 0x96, 0xe1, 0xe8, 0xef, 0x5f, 0x61, 0x13, 0x5d, 0x3f, 0x79, 0x92, - 0x12, 0x97, 0xbc, 0x13, 0xcf, 0x7e, 0xa5, 0x87, 0xe7, 0xe9, 0xa3, 0xcf, - 0xd2, 0x07, 0xa4, 0x1e, 0x58, 0xf1, 0x08, 0x75, 0x82, 0xb5, 0x36, 0x37, - 0xed, 0x82, 0x1d, 0x56, 0xbe, 0x8b, 0x65, 0x15, 0x7a, 0x1c, 0xa3, 0xef, - 0x97, 0xa6, 0x11, 0x7f, 0x57, 0x5e, 0x4e, 0x06, 0x40, 0xc7, 0x0e, 0x9b, - 0x13, 0x1b, 0xac, 0x4d, 0xf0, 0x60, 0xa7, 0x83, 0x53, 0x68, 0xcc, 0xa5, - 0x02, 0x7d, 0x85, 0x30, 0x7f, 0x66, 0xed, 0x19, 0xd5, 0xef, 0x8c, 0x5c, - 0x09, 0x49, 0x5e, 0x31, 0x47, 0x6e, 0x88, 0x25, 0xdd, 0x01, 0x05, 0x9d, - 0xe5, 0x56, 0xa0, 0x8b, 0x70, 0x15, 0x62, 0xcd, 0xaf, 0x61, 0x8f, 0x62, - 0xae, 0x0b, 0x6a, 0x64, 0xa6, 0xa0, 0x51, 0xb1, 0x9c, 0x89, 0xdf, 0xfd, - 0x64, 0x27, 0xb1, 0xcf, 0x64, 0x0c, 0x73, 0x6c, 0x4e, 0x5e, 0xe7, 0xc7, - 0x5f, 0x25, 0xeb, 0xd7, 0x93, 0xf5, 0xab, 0xaf, 0xfb, 0x55, 0x20, 0x9e, - 0x4c, 0x4b, 0x13, 0x54, 0x0a, 0xeb, 0xb4, 0x93, 0xe1, 0x27, 0x5d, 0x2b, - 0x4b, 0xf4, 0x95, 0xd5, 0xc4, 0x92, 0x60, 0x0a, 0xa0, 0xec, 0xef, 0x2d, - 0x2d, 0x05, 0xa7, 0x8a, 0x0a, 0xac, 0x3a, 0x03, 0xd4, 0x05, 0xe0, 0xeb, - 0xa7, 0xb4, 0xa8, 0x47, 0x9a, 0x30, 0x77, 0x09, 0x50, 0x7d, 0x58, 0xaf, - 0xb1, 0x20, 0x7f, 0x4b, 0xdb, 0x19, 0x30, 0x2f, 0x7b, 0xe0, 0xc8, 0xbd, - 0xa9, 0x5f, 0x8d, 0x6c, 0x9c, 0xb2, 0x6a, 0xea, 0x56, 0x27, 0xc9, 0x4c, - 0x1c, 0xa9, 0xa7, 0x38, 0xd3, 0x2d, 0x48, 0x4d, 0x0f, 0xd5, 0xe3, 0x4e, - 0xe7, 0xa9, 0xa1, 0xd8, 0x80, 0xc6, 0x6d, 0x03, 0xe7, 0xba, 0x74, 0xf3, - 0x5e, 0xf3, 0xe9, 0x9a, 0xcb, 0x74, 0x87, 0x72, 0x70, 0xaf, 0xc3, 0xd3, - 0xbd, 0xfa, 0xb6, 0x43, 0x3b, 0x60, 0xac, 0xad, 0xb4, 0xd1, 0xd2, 0x78, - 0x9c, 0xf0, 0xbf, 0xfa, 0x7e, 0xbf, 0xf1, 0x1f, 0xc9, 0x17, 0x92, 0xca, - 0x70, 0xb4, 0x8b, 0xe3, 0xe6, 0xb4, 0x9d, 0x7c, 0xdd, 0x7b, 0x90, 0xcb, - 0xda, 0x38, 0x71, 0x99, 0x18, 0xa7, 0x6f, 0xa9, 0x50, 0x9f, 0xdb, 0x8b, - 0x40, 0x6c, 0xd9, 0xb8, 0x05, 0xc8, 0x45, 0xce, 0x14, 0x77, 0x03, 0xf7, - 0x8a, 0xf9, 0xd4, 0xe0, 0x73, 0x68, 0xe8, 0xcb, 0x1f, 0x5b, 0xc5, 0x0a, - 0xee, 0x24, 0xae, 0x5d, 0x57, 0x28, 0xe7, 0x84, 0xc1, 0x92, 0x3e, 0x74, - 0x6a, 0x81, 0xfd, 0x6d, 0xba, 0x8f, 0x6e, 0x60, 0xa4, 0x33, 0xf4, 0x15, - 0xc3, 0xd8, 0x1b, 0xd4, 0xb2, 0xf5, 0x1e, 0x0b, 0xe5, 0x07, 0xb6, 0x8d, - 0xc6, 0xed, 0xce, 0x3d, 0xd8, 0xe9, 0x02, 0x8d, 0x33, 0xcb, 0x62, 0xa6, - 0x0e, 0x89, 0xfa, 0x34, 0x96, 0x47, 0xac, 0xd4, 0xe7, 0xd6, 0x17, 0x9a, - 0x1f, 0x74, 0xf7, 0x10, 0x59, 0x27, 0x08, 0xa3, 0xfc, 0x8a, 0x8c, 0x87, - 0x99, 0xa7, 0xbc, 0xf9, 0x4f, 0x63, 0xb9, 0x4e, 0x0d, 0x56, 0x2b, 0x3a, - 0xf2, 0x78, 0x37, 0x25, 0x51, 0xf4, 0xc0, 0x32, 0x04, 0xa6, 0xd6, 0xc2, - 0xd5, 0x17, 0x32, 0x23, 0xc1, 0xd2, 0xba, 0xee, 0xca, 0xe6, 0x12, 0x5c, - 0xb5, 0x60, 0x16, 0x3c, 0xad, 0x73, 0x7d, 0xb3, 0xac, 0xd2, 0x64, 0xb7, - 0xee, 0x18, 0xa8, 0x7c, 0xdc, 0x48, 0x88, 0x9f, 0x70, 0x0e, 0xbf, 0xb2, - 0xb5, 0x17, 0xee, 0x7b, 0xc0, 0x18, 0xa1, 0x67, 0x9c, 0xb6, 0x1c, 0x5d, - 0x38, 0x98, 0xc7, 0x1b, 0xcc, 0xf0, 0x97, 0x3e, 0xde, 0x9b, 0x0d, 0x11, - 0xa7, 0xa3, 0x7b, 0x5a, 0xbe, 0xca, 0xc4, 0xcd, 0x89, 0xf6, 0x1e, 0xdd, - 0x9e, 0x06, 0xf9, 0x69, 0xd4, 0x5c, 0x8e, 0xcc, 0x1a, 0x5a, 0x24, 0xc5, - 0xc2, 0x2a, 0x4c, 0xc0, 0x6a, 0x9c, 0x85, 0xfc, 0x38, 0xf8, 0x8a, 0x94, - 0x98, 0xf5, 0x39, 0x2c, 0x5f, 0x69, 0x1a, 0xaf, 0x7e, 0x7e, 0x6f, 0xea, - 0xfc, 0x3a, 0xe8, 0xaa, 0x93, 0x1a, 0xd3, 0x27, 0x5a, 0x72, 0xb7, 0x40, - 0xbb, 0xd7, 0x40, 0x9f, 0xa2, 0xcd, 0x4b, 0xc0, 0x83, 0xda, 0x1a, 0xf5, - 0x88, 0xa5, 0x79, 0xca, 0xde, 0x4b, 0xce, 0x23, 0x57, 0xeb, 0x6a, 0x74, - 0xe9, 0xe7, 0x5b, 0xfc, 0x82, 0x4f, 0x98, 0xeb, 0x8b, 0xc2, 0xab, 0x76, - 0xf5, 0xc0, 0xdc, 0xc7, 0xf6, 0xa1, 0x26, 0xf2, 0x1f, 0x9d, 0xbe, 0x7f, - 0x79, 0x2d, 0x5e, 0x81, 0x89, 0x22, 0x8a, 0xfb, 0x74, 0xf8, 0x39, 0x20, - 0x30, 0x98, 0x0e, 0x78, 0x33, 0x1e, 0xef, 0xc7, 0xf2, 0x25, 0x1e, 0xcd, - 0xe3, 0x63, 0x1a, 0x7e, 0xf5, 0xae, 0x47, 0x56, 0x65, 0x7c, 0xf0, 0x6e, - 0x1c, 0xd0, 0x53, 0xee, 0x50, 0xdf, 0xf7, 0xc4, 0xec, 0x7d, 0x69, 0x79, - 0xf0, 0xcc, 0x9b, 0x2b, 0xc6, 0x23, 0xc7, 0x5b, 0x3e, 0x1e, 0xaf, 0x2c, - 0xc4, 0x4e, 0x8d, 0xfd, 0xaf, 0x4b, 0x13, 0x6d, 0x2f, 0xf5, 0x85, 0x34, - 0x1d, 0x3f, 0x1a, 0x21, 0x67, 0x34, 0xc9, 0xf1, 0xbb, 0xb6, 0xce, 0x58, - 0xfb, 0x4a, 0xdf, 0x6c, 0xc4, 0x34, 0xb7, 0x92, 0x9c, 0xcf, 0xee, 0x16, - 0x0a, 0x3c, 0x96, 0xa1, 0x04, 0xe5, 0xe1, 0x4d, 0xc1, 0xd3, 0xc1, 0xd6, - 0xaa, 0x7e, 0xf7, 0x45, 0x82, 0x2d, 0xdd, 0x0b, 0x74, 0xf7, 0x76, 0x69, - 0xe9, 0xc0, 0xb1, 0x97, 0x2e, 0x8a, 0x68, 0xb7, 0x00, 0xb7, 0x86, 0x6a, - 0x3c, 0x32, 0x5c, 0x50, 0x43, 0x83, 0x6b, 0x71, 0x1d, 0x35, 0x67, 0xb2, - 0x94, 0x6b, 0x76, 0x65, 0x0c, 0xdb, 0x00, 0xef, 0xaf, 0xfc, 0xa8, 0x9d, - 0xe3, 0x08, 0xf5, 0x7a, 0xf5, 0xc9, 0x15, 0x86, 0x13, 0x22, 0x48, 0x74, - 0xc8, 0x23, 0x14, 0x6b, 0x57, 0x6f, 0x93, 0x9b, 0x3c, 0x23, 0xa0, 0xcb, - 0x78, 0x3a, 0xb9, 0x81, 0xe6, 0x1c, 0x14, 0x22, 0x7b, 0x62, 0xa1, 0xb5, - 0xbf, 0x4f, 0x02, 0x74, 0xf7, 0x27, 0x47, 0x3b, 0xb5, 0x66, 0x10, 0xa7, - 0xc1, 0x5b, 0x27, 0x9a, 0x6a, 0x2f, 0x3a, 0xc2, 0xa7, 0xcc, 0xed, 0xa8, - 0xb8, 0x3c, 0xde, 0x2d, 0xf3, 0x56, 0x58, 0xf8, 0x7a, 0x36, 0x53, 0x86, - 0xf4, 0xfb, 0xfa, 0x46, 0x6e, 0xc3, 0xea, 0x46, 0x9e, 0xd8, 0xb5, 0xc9, - 0xe0, 0x60, 0x8b, 0xf5, 0xbc, 0x83, 0x77, 0x4a, 0x2b, 0xf4, 0x4b, 0x5c, - 0xfd, 0x97, 0x6f, 0xb5, 0xe4, 0x5f, 0x5e, 0xf5, 0xe9, 0x92, 0xef, 0xf5, - 0x30, 0x62, 0xe5, 0xbb, 0x5f, 0xbf, 0xac, 0xb2, 0xb9, 0x5f, 0x1f, 0xfe, - 0xc0, 0xd5, 0xbd, 0xfe, 0x77, 0x9b, 0xcd, 0xbe, 0xbd, 0x85, 0x41, 0x8b, - 0x76, 0x5f, 0x09, 0xcb, 0xd0, 0x55, 0x5d, 0xac, 0xd9, 0x55, 0x9c, 0x2e, - 0x69, 0x6a, 0x68, 0x8a, 0x1a, 0x18, 0x5c, 0x97, 0x19, 0x6e, 0x2d, 0xb2, - 0xc1, 0xfe, 0xdd, 0x6e, 0xff, 0x47, 0xd0, 0x55, 0xa6, 0x8b, 0xe9, 0xf4, - 0x1e, 0xbb, 0x47, 0xaf, 0x26, 0x58, 0x5e, 0x55, 0x81, 0xa6, 0xd8, 0xaa, - 0x5d, 0xed, 0x9b, 0x8d, 0x8e, 0x85, 0x0a, 0x68, 0xbe, 0x52, 0x76, 0x74, - 0x6d, 0x5c, 0x5e, 0x6d, 0x22, 0x08, 0x5c, 0xbe, 0x3e, 0x64, 0x7b, 0xf2, - 0x5c, 0x05, 0xd0, 0x34, 0xf8, 0x78, 0xba, 0xe5, 0xeb, 0xd8, 0xc5, 0xe1, - 0xdc, 0xee, 0xdc, 0x94, 0xe6, 0x5a, 0x32, 0xe2, 0x5a, 0x64, 0x79, 0x5e, - 0xdc, 0xee, 0x30, 0xd9, 0x35, 0xb5, 0x6b, 0x47, 0x3d, 0xdf, 0xe5, 0x95, - 0x2b, 0xd7, 0x12, 0x84, 0x96, 0x89, 0xee, 0xd0, 0x28, 0xfc, 0xf6, 0xf1, - 0x7e, 0x6f, 0x1c, 0x76, 0xb1, 0x97, 0xa1, 0x5b, 0x54, 0x4c, 0xb8, 0x16, - 0x88, 0x29, 0x3f, 0x4a, 0x38, 0x52, 0xac, 0x13, 0xb0, 0x00, 0xc5, 0xef, - 0x87, 0x08, 0x2f, 0xdb, 0x8a, 0xa2, 0xf7, 0x9c, 0x68, 0x1e, 0x6d, 0x34, - 0xd8, 0xfb, 0x1b, 0x6c, 0xf0, 0x78, 0xf3, 0x22, 0x2f, 0x90, 0x09, 0x6c, - 0xf7, 0xc1, 0x53, 0xfa, 0x19, 0x9b, 0x6c, 0x92, 0x75, 0x8f, 0x21, 0xcd, - 0x6b, 0x5d, 0x62, 0xc1, 0xd7, 0xd2, 0xcf, 0xfa, 0x36, 0x68, 0xce, 0x90, - 0xa0, 0xeb, 0x12, 0xf0, 0xe2, 0xf3, 0x15, 0x52, 0x9f, 0x70, 0xeb, 0x20, - 0x07, 0x46, 0xd7, 0x24, 0xc2, 0x00, 0x37, 0xdc, 0x64, 0xdc, 0x68, 0xcc, - 0x85, 0xa4, 0xb6, 0x4c, 0xc0, 0xa7, 0x9e, 0x78, 0x2a, 0x2e, 0x23, 0x50, - 0x2d, 0x63, 0x28, 0x6a, 0x12, 0x26, 0x30, 0x8e, 0x94, 0x14, 0x9e, 0x8d, - 0x83, 0x05, 0x17, 0xad, 0xd9, 0x18, 0x20, 0xd1, 0xf3, 0x75, 0xe6, 0xed, - 0x28, 0xf2, 0xd2, 0xd9, 0x7f, 0x18, 0x3e, 0x48, 0x01, 0x6b, 0xe9, 0x2c, - 0xf0, 0x6c, 0x61, 0xf1, 0x61, 0x68, 0x50, 0x09, 0x68, 0x3a, 0x1a, 0xc9, - 0x68, 0xd1, 0x4e, 0xfa, 0xde, 0xbb, 0x17, 0x8f, 0xbe, 0x7f, 0x2f, 0xf8, - 0xee, 0x1e, 0xa8, 0x1d, 0x45, 0xaf, 0x22, 0x3e, 0xb8, 0xfa, 0x48, 0xec, - 0x82, 0x55, 0xa6, 0xe8, 0x11, 0xff, 0x42, 0x5f, 0x94, 0x36, 0x74, 0xf4, - 0x4b, 0x13, 0xce, 0x76, 0xbf, 0xec, 0x15, 0xfa, 0x3b, 0x3b, 0x25, 0x3b, - 0x64, 0x19, 0x76, 0x8f, 0xb2, 0xd8, 0xa5, 0xfe, 0x52, 0x68, 0x77, 0xfb, - 0x5c, 0x95, 0xab, 0x55, 0x19, 0x03, 0x7e, 0x3c, 0x11, 0x6b, 0x0a, 0x8e, - 0xbe, 0x92, 0xd3, 0xbc, 0x3c, 0xd2, 0xb1, 0xbb, 0x13, 0xd7, 0xb3, 0xdf, - 0x11, 0xf8, 0x3b, 0x83, 0xfd, 0xed, 0xe2, 0x5b, 0x58, 0x81, 0x05, 0xa2, - 0xbe, 0x29, 0x6f, 0x56, 0xd6, 0x21, 0x8c, 0x34, 0xb5, 0xac, 0xc8, 0xd4, - 0xc2, 0xa2, 0x7a, 0xfd, 0x6f, 0xa6, 0x22, 0xc5, 0x2f, 0xc8, 0xb4, 0x39, - 0xdc, 0x2b, 0x7c, 0x7f, 0x3d, 0xc9, 0x62, 0x20, 0x2a, 0x23, 0x3a, 0x4e, - 0xee, 0x3a, 0x99, 0xeb, 0x87, 0x7b, 0xd2, 0x9a, 0xf9, 0xfe, 0xf5, 0x78, - 0x1d, 0xa0, 0xdc, 0x17, 0x84, 0xf1, 0x09, 0x38, 0x83, 0x5c, 0x2f, 0xc1, - 0x75, 0x8f, 0xed, 0x56, 0xc0, 0xf9, 0x3d, 0x96, 0x86, 0xd4, 0xc6, 0x56, - 0xd8, 0x78, 0x49, 0xd8, 0x6f, 0xf6, 0x54, 0xee, 0xa8, 0xef, 0xf1, 0xf0, - 0x82, 0x01, 0xd3, 0xbd, 0x15, 0xbf, 0x75, 0x1e, 0x69, 0x56, 0x7a, 0x0c, - 0x77, 0xd0, 0x33, 0x65, 0xef, 0x62, 0x12, 0xc4, 0x56, 0x17, 0x18, 0x13, - 0xaf, 0x3c, 0xec, 0xac, 0x17, 0x53, 0x49, 0x18, 0xc0, 0x81, 0xa3, 0x8a, - 0x21, 0xe6, 0xac, 0xbb, 0xbf, 0xfc, 0x50, 0x36, 0xec, 0xc7, 0x5a, 0xc3, - 0xc9, 0x22, 0x0c, 0x9f, 0x3e, 0x26, 0x5f, 0x6b, 0x25, 0x2a, 0xee, 0xa7, - 0xb5, 0xf7, 0xf4, 0xdf, 0x7f, 0x70, 0x8e, 0xfe, 0xfa, 0x98, 0x58, 0xa6, - 0x11, 0xca, 0x42, 0x9c, 0x0c, 0xa2, 0xaa, 0x6d, 0x02, 0xc5, 0x51, 0x28, - 0x64, 0x25, 0xe7, 0x76, 0xb9, 0x2a, 0xf6, 0x22, 0x0d, 0x2e, 0x97, 0xca, - 0xd4, 0xfc, 0x16, 0xcb, 0x6f, 0xf9, 0xef, 0x18, 0x15, 0x3a, 0x33, 0xb7, - 0x10, 0xb8, 0x10, 0xf0, 0x00, 0x1f, 0xc1, 0x48, 0x97, 0x33, 0x77, 0x4e, - 0xd3, 0xdb, 0x20, 0x4c, 0x16, 0xb1, 0x94, 0x1b, 0x4e, 0x71, 0x25, 0x5a, - 0xe6, 0x04, 0x59, 0x34, 0x1a, 0x09, 0x14, 0x47, 0x2c, 0x7f, 0x1a, 0xc0, - 0x5a, 0x95, 0x78, 0x8c, 0xdf, 0x11, 0x53, 0xf2, 0xc1, 0x08, 0xfb, 0x0c, - 0xe6, 0xf0, 0x02, 0x9f, 0xae, 0xf7, 0x47, 0x08, 0x4e, 0xa2, 0xcd, 0xd5, - 0xc7, 0x0a, 0x68, 0x93, 0xd4, 0x19, 0x3e, 0x3e, 0xb2, 0x31, 0xd0, 0x74, - 0x5c, 0x6d, 0x8d, 0xa5, 0x0e, 0x83, 0xa5, 0x0e, 0x81, 0xbd, 0x71, 0x39, - 0x70, 0xd7, 0x31, 0x28, 0xcb, 0x90, 0x7a, 0xdc, 0xbd, 0xa2, 0x96, 0xb1, - 0x5e, 0x18, 0xa9, 0x38, 0x22, 0xe1, 0x29, 0x01, 0x50, 0x26, 0x91, 0xab, - 0x53, 0x65, 0x8c, 0x75, 0x0e, 0x47, 0xca, 0x80, 0x7a, 0x44, 0x22, 0x15, - 0x7f, 0xd5, 0xa2, 0x08, 0x97, 0x87, 0xa2, 0x68, 0xd5, 0xa1, 0x8c, 0xb1, - 0xaa, 0x5f, 0xfe, 0xc6, 0xe7, 0xfe, 0xad, 0x5f, 0x38, 0x2b, 0xc5, 0xb3, - 0xab, 0x5f, 0x75, 0xa8, 0x0e, 0xb4, 0xb4, 0xb9, 0x7e, 0x09, 0x61, 0x96, - 0x5a, 0x66, 0x48, 0x74, 0x2e, 0x20, 0xc5, 0x25, 0x02, 0xec, 0xfc, 0x53, - 0xd7, 0x52, 0x3c, 0x10, 0x9a, 0x97, 0x88, 0x75, 0x05, 0xa1, 0x9f, 0x85, - 0xf2, 0xa8, 0x1d, 0xd4, 0xcf, 0x29, 0x45, 0x2b, 0x3b, 0xa3, 0x2e, 0x0f, - 0xd7, 0x91, 0xcb, 0x7e, 0xc5, 0xea, 0x3a, 0x67, 0xdf, 0x05, 0xf7, 0x4d, - 0x1d, 0x44, 0x18, 0xcb, 0xa9, 0x18, 0x72, 0x4b, 0x69, 0x42, 0x85, 0xe1, - 0x42, 0x75, 0x2e, 0x98, 0x8c, 0x52, 0x1e, 0x65, 0x7b, 0x53, 0x15, 0x2d, - 0x6f, 0x95, 0xe9, 0xdb, 0xb3, 0x42, 0x02, 0xa1, 0x49, 0xbd, 0x6c, 0x19, - 0xa4, 0xad, 0xe7, 0x73, 0xb6, 0xf6, 0x7d, 0xe4, 0xfd, 0x76, 0xa0, 0x18, - 0x2d, 0x6f, 0x11, 0x7a, 0x00, 0x5d, 0x06, 0x04, 0xea, 0x1f, 0x6b, 0x11, - 0x72, 0x32, 0x6a, 0x54, 0x6d, 0x09, 0xe0, 0x50, 0xf5, 0x7e, 0xdb, 0xf8, - 0x64, 0x43, 0xb8, 0x0f, 0xac, 0x60, 0xb3, 0xc2, 0x60, 0x0d, 0x09, 0xe4, - 0x4a, 0x93, 0x64, 0x40, 0xd6, 0xce, 0x78, 0x61, 0x2f, 0x98, 0xeb, 0x50, - 0x2e, 0xd9, 0x65, 0x09, 0xf0, 0x4f, 0xa7, 0xf9, 0x47, 0x0b, 0x6b, 0xc0, - 0x50, 0x47, 0xe4, 0xa9, 0x20, 0xeb, 0x95, 0x62, 0x93, 0x61, 0x99, 0x35, - 0x89, 0xdb, 0x22, 0xa5, 0xb1, 0x7d, 0x81, 0x15, 0x1d, 0x66, 0x0d, 0x80, - 0x0e, 0x80, 0x00, 0xee, 0x24, 0x92, 0x72, 0x76, 0x39, 0x3c, 0xa6, 0x90, - 0x76, 0x9d, 0x9a, 0x48, 0x5a, 0x95, 0xd8, 0x7d, 0xa3, 0x3a, 0x61, 0xfb, - 0x2d, 0xed, 0x5a, 0x3a, 0xdc, 0x35, 0x24, 0xef, 0xbe, 0x37, 0x83, 0xfd, - 0xb9, 0x96, 0xe5, 0xe0, 0xa2, 0x50, 0xab, 0xf1, 0x15, 0x41, 0x3d, 0xc4, - 0x9b, 0xbb, 0x69, 0xe7, 0x06, 0xb0, 0x11, 0x0c, 0x5d, 0x07, 0x6f, 0xec, - 0x83, 0x48, 0xe0, 0x79, 0x53, 0xda, 0x32, 0xf7, 0xa2, 0x0d, 0x31, 0x43, - 0x9b, 0x88, 0x2e, 0x17, 0x10, 0x9d, 0xa4, 0x85, 0x5a, 0x54, 0x84, 0xd4, - 0x39, 0x52, 0x2b, 0xb5, 0xde, 0x0f, 0x05, 0xd4, 0xf1, 0x2b, 0xc8, 0x47, - 0x6b, 0x6f, 0xda, 0x39, 0xfa, 0x60, 0x9d, 0x6e, 0x22, 0x28, 0x72, 0xfd, - 0x57, 0x7d, 0xd5, 0x4f, 0xdf, 0xd5, 0xff, 0xf4, 0x03, 0xcf, 0xcf, 0x3d, - 0xe3, 0xe2, 0x72, 0xfa, 0xd9, 0x35, 0x33, 0xfa, 0xd9, 0x55, 0x15, 0x7f, - 0x94, 0xab, 0x3f, 0xbb, 0x76, 0x1b, 0x7e, 0xda, 0x00, 0xf3, 0xc3, 0x45, - 0x6b, 0x73, 0x11, 0xcd, 0xec, 0x78, 0xf2, 0xd0, 0x1e, 0x42, 0xfb, 0xcf, - 0x0e, 0xf6, 0x40, 0x3e, 0x8a, 0x58, 0x4f, 0x82, 0xb3, 0x92, 0x98, 0x6b, - 0xe2, 0xa8, 0xe5, 0x9d, 0xea, 0x7a, 0x8d, 0xfe, 0xfe, 0xd9, 0x2c, 0xad, - 0x8f, 0xe1, 0xa2, 0x7b, 0xa4, 0x0f, 0x6b, 0x5f, 0x0f, 0x28, 0xe8, 0xe4, - 0x55, 0xbe, 0x67, 0x3b, 0xbd, 0xfd, 0xe4, 0xe5, 0x75, 0xb8, 0x78, 0x89, - 0x68, 0x01, 0xb8, 0xd1, 0xf1, 0x16, 0x01, 0xc4, 0x4b, 0xa7, 0x06, 0x50, - 0x91, 0x09, 0xa8, 0x21, 0xc5, 0x27, 0x14, 0x70, 0x9b, 0x68, 0x68, 0xdc, - 0xd8, 0xa1, 0x07, 0x29, 0x34, 0x84, 0x91, 0x7e, 0x9c, 0xf8, 0x7b, 0xf2, - 0xc7, 0xfb, 0xc1, 0x86, 0xd9, 0xd1, 0x34, 0xf6, 0x74, 0xa6, 0xc5, 0x99, - 0x3f, 0xda, 0xe1, 0x37, 0x78, 0x30, 0xd6, 0xfb, 0x2e, 0xd7, 0x5f, 0x76, - 0xdf, 0xb9, 0xe9, 0xf7, 0x1c, 0xc8, 0xd9, 0x94, 0x1b, 0xa7, 0x3e, 0x08, - 0x55, 0x6f, 0x9e, 0xed, 0xd4, 0x89, 0x41, 0x1d, 0xca, 0x78, 0x0e, 0x4c, - 0xc3, 0x93, 0x43, 0xca, 0x73, 0x78, 0xc1, 0xac, 0xfe, 0x4b, 0x88, 0xab, - 0xb5, 0x4f, 0xdd, 0xf9, 0x7e, 0x4a, 0xc7, 0x17, 0x28, 0x73, 0xf2, 0xc5, - 0x6d, 0xf9, 0xe7, 0xa0, 0xec, 0x9b, 0x74, 0x83, 0xf8, 0xe9, 0x47, 0xc5, - 0x49, 0x77, 0xa7, 0x9f, 0x78, 0xe1, 0xf4, 0x19, 0x18, 0x11, 0xdf, 0xc3, - 0x05, 0xd0, 0xa7, 0xb6, 0x7c, 0x49, 0xd8, 0x49, 0x38, 0xe2, 0xa3, 0xbc, - 0x44, 0xfa, 0xe4, 0x89, 0x18, 0x3e, 0x3e, 0x27, 0xb9, 0x77, 0x9b, 0xfd, - 0xdf, 0x22, 0xce, 0xf9, 0x2b, 0xfb, 0xe7, 0x79, 0x50, 0x69, 0x51, 0x8d, - 0x8b, 0xa8, 0xff, 0xc0, 0x6c, 0x99, 0xd7, 0x9c, 0x83, 0x7a, 0x80, 0xe2, - 0xa5, 0x09, 0x25, 0x0f, 0xf2, 0x39, 0xf8, 0xc4, 0x72, 0x2b, 0xe7, 0x4d, - 0x89, 0x5b, 0x6e, 0xa7, 0x93, 0x07, 0x54, 0xbd, 0x02, 0xbe, 0xe4, 0xae, - 0x63, 0xba, 0x32, 0x55, 0xcb, 0xa2, 0x20, 0x7b, 0x72, 0x3a, 0x8a, 0x1c, - 0xca, 0x32, 0xb6, 0x4d, 0x92, 0x1d, 0xea, 0x5e, 0x0c, 0xae, 0x49, 0x6e, - 0x9f, 0xfa, 0xc2, 0x92, 0x2d, 0x49, 0xee, 0xb5, 0x64, 0x1d, 0x34, 0x00, - 0x73, 0xc7, 0x5d, 0x28, 0xc7, 0x4f, 0x3f, 0x71, 0xf6, 0xd4, 0x96, 0xfc, - 0x53, 0xdd, 0x14, 0x95, 0x6d, 0x90, 0xbc, 0xe4, 0x6a, 0x67, 0x9d, 0xc8, - 0xb7, 0xa7, 0x0c, 0xaf, 0xba, 0x8c, 0x01, 0x14, 0x3e, 0xa3, 0xde, 0xb7, - 0xd6, 0x54, 0xac, 0xdb, 0xd3, 0x4f, 0x92, 0x55, 0xc6, 0x4b, 0xbe, 0xac, - 0xfc, 0x8c, 0xed, 0xc9, 0x4d, 0x94, 0xe7, 0x40, 0xdd, 0x65, 0x4e, 0xaf, - 0x83, 0x70, 0x1c, 0xce, 0x7e, 0xe2, 0xf6, 0x89, 0x3f, 0xf7, 0x0e, 0x0f, - 0xea, 0x42, 0x05, 0xd2, 0x4b, 0xdf, 0xfe, 0x3b, 0x5b, 0xc6, 0x87, 0xbf, - 0x7c, 0x58, 0x09, 0xf0, 0x1a, 0x6c, 0x49, 0xe3, 0xac, 0x8f, 0xc2, 0xf0, - 0x76, 0xd3, 0x53, 0xc6, 0x04, 0x08, 0xf4, 0x12, 0xa3, 0xbc, 0x62, 0x0a, - 0x30, 0xa5, 0xc7, 0xe6, 0xa8, 0x06, 0xfa, 0x68, 0xf3, 0x18, 0x73, 0x67, - 0xc9, 0x42, 0x40, 0x41, 0x3c, 0x2f, 0x00, 0x23, 0xd0, 0x33, 0x9e, 0xe4, - 0x66, 0xc4, 0x33, 0x5d, 0x06, 0xf1, 0x17, 0x35, 0x15, 0x52, 0x0f, 0x72, - 0x7d, 0x5a, 0xd7, 0xcc, 0xa8, 0x6e, 0x74, 0x54, 0x26, 0x29, 0xc5, 0x7b, - 0xf4, 0x40, 0x62, 0xc5, 0x48, 0xd0, 0x58, 0x00, 0x37, 0xfa, 0x15, 0x83, - 0x38, 0xa9, 0x26, 0x74, 0xd3, 0x17, 0xa4, 0x55, 0x97, 0x45, 0x80, 0x2c, - 0x41, 0x11, 0x1f, 0xb1, 0xbf, 0x33, 0xb5, 0x7b, 0x11, 0x60, 0xa2, 0x26, - 0x12, 0xf2, 0x58, 0x54, 0xc0, 0x52, 0x1f, 0xf0, 0x6a, 0x60, 0x88, 0xda, - 0xf8, 0x84, 0x92, 0xd2, 0x9c, 0x6a, 0x9e, 0x51, 0xc3, 0x80, 0x91, 0x5d, - 0xae, 0x3f, 0xfd, 0x48, 0x38, 0xf7, 0xfc, 0x4c, 0xf5, 0x4b, 0x59, 0xec, - 0xe6, 0xaa, 0xaf, 0x48, 0xe3, 0xc4, 0x32, 0x82, 0x92, 0x57, 0xd0, 0x97, - 0xc8, 0x74, 0xe3, 0x01, 0xe9, 0x27, 0xf7, 0x9d, 0x74, 0x28, 0x02, 0x6e, - 0x68, 0x44, 0x01, 0x96, 0xea, 0x10, 0xa1, 0xe2, 0x88, 0x46, 0x3e, 0x1c, - 0x29, 0x07, 0x0d, 0xf9, 0x05, 0x37, 0xc3, 0x7b, 0xa3, 0x0d, 0x75, 0xad, - 0xc7, 0xf8, 0x51, 0xcf, 0xb3, 0xad, 0x25, 0x5d, 0x63, 0x7f, 0xfa, 0xb6, - 0x12, 0xa8, 0xbf, 0x7d, 0x1e, 0xd8, 0xf3, 0xc0, 0x7a, 0xc4, 0xc8, 0x45, - 0xc9, 0xa7, 0xb2, 0x18, 0xa0, 0x5c, 0x94, 0x03, 0xce, 0xb1, 0x5d, 0x49, - 0x6c, 0x25, 0x11, 0xd5, 0xb1, 0xf0, 0x67, 0x94, 0xa4, 0xd5, 0xb1, 0x05, - 0xad, 0x3d, 0xf1, 0xea, 0xd7, 0x93, 0xa3, 0x2d, 0x23, 0xf9, 0x5c, 0x8a, - 0xca, 0x64, 0xc4, 0x14, 0xe1, 0x39, 0x5e, 0x98, 0x87, 0xe3, 0xc5, 0xeb, - 0x12, 0x94, 0x81, 0xdb, 0xb8, 0x46, 0x3f, 0x4e, 0x5d, 0x9e, 0xa3, 0x37, - 0x53, 0x9e, 0x49, 0x87, 0x7b, 0x73, 0x12, 0xbe, 0xdd, 0x6e, 0x36, 0x58, - 0x7d, 0xd0, 0x78, 0x8f, 0x2b, 0x2a, 0x82, 0x8f, 0x60, 0x1e, 0xda, 0xfa, - 0x7c, 0x8e, 0x2f, 0x76, 0xbb, 0x20, 0x4c, 0xc7, 0x6b, 0xa3, 0x2f, 0xc6, - 0xfa, 0x81, 0x49, 0x8e, 0x33, 0xff, 0x9c, 0xab, 0x3c, 0xb5, 0x35, 0x65, - 0x84, 0x5d, 0x26, 0x2b, 0xcf, 0xb8, 0x50, 0x79, 0x32, 0xc0, 0x6d, 0x64, - 0xc0, 0x45, 0x49, 0xd2, 0x8e, 0x96, 0x68, 0xf5, 0xe0, 0xcb, 0x97, 0x9a, - 0xa6, 0xe5, 0xe5, 0x71, 0xe8, 0x86, 0xa2, 0x01, 0xdd, 0xb9, 0x00, 0x10, - 0x59, 0xe3, 0x86, 0xba, 0x61, 0x16, 0x1e, 0x66, 0xef, 0xe6, 0xf8, 0xe9, - 0x24, 0x22, 0x79, 0x5f, 0x8e, 0x31, 0x72, 0x43, 0xe2, 0x35, 0xdf, 0xbe, - 0xde, 0xa5, 0x4e, 0x18, 0x70, 0x1a, 0xf4, 0x2c, 0x2d, 0x7c, 0xd3, 0xb4, - 0x1d, 0x8b, 0x18, 0x34, 0xde, 0xb1, 0xea, 0x30, 0x7a, 0x98, 0xbd, 0x03, - 0xc0, 0x18, 0xa5, 0xdf, 0x56, 0x95, 0x8d, 0xf7, 0xbc, 0x52, 0xaa, 0x2c, - 0x90, 0xf5, 0x83, 0x06, 0x58, 0xa3, 0x3c, 0x71, 0x08, 0x50, 0x12, 0xeb, - 0x03, 0x90, 0x56, 0x9d, 0x0c, 0x9e, 0x9e, 0x72, 0x13, 0xc6, 0x12, 0xdf, - 0x55, 0xe4, 0x7a, 0x01, 0x97, 0x5d, 0xae, 0xee, 0x03, 0x03, 0xf9, 0x6b, - 0xca, 0xee, 0xfa, 0x5c, 0x1c, 0x56, 0xef, 0xcd, 0xe2, 0x79, 0x2b, 0x0e, - 0x1b, 0xe3, 0x35, 0x42, 0x06, 0x54, 0xf8, 0x8d, 0x77, 0xec, 0x9f, 0xe3, - 0x9b, 0x8e, 0xea, 0xda, 0x5b, 0xd7, 0xdd, 0x9f, 0xe3, 0xdb, 0x5d, 0xb5, - 0x9d, 0xf1, 0xcd, 0x61, 0xf0, 0x95, 0xf7, 0x5f, 0x16, 0x79, 0xdc, 0x83, - 0xc0, 0x45, 0x06, 0x94, 0x99, 0xae, 0x2c, 0x3c, 0x95, 0x85, 0x99, 0xd5, - 0x81, 0xf7, 0x9b, 0x9e, 0x52, 0xee, 0x0b, 0xaa, 0x44, 0xe6, 0xa6, 0x0c, - 0x96, 0x0c, 0x74, 0x8b, 0x32, 0xf4, 0xad, 0x0a, 0x42, 0x39, 0xd1, 0xf1, - 0xbe, 0xd6, 0xc0, 0xa4, 0xb6, 0x9f, 0x93, 0xae, 0xef, 0x19, 0x98, 0xb8, - 0x9c, 0x6f, 0x20, 0xbe, 0x3d, 0xa7, 0xfa, 0xe9, 0xd9, 0x3d, 0x58, 0xe7, - 0x1c, 0x51, 0xc2, 0xc8, 0x6e, 0x22, 0x8c, 0x50, 0x3a, 0x84, 0x9e, 0xf9, - 0xce, 0x9a, 0x9e, 0x1f, 0xc7, 0xe2, 0x44, 0x25, 0x9d, 0x3d, 0xd5, 0x7f, - 0x51, 0xff, 0xa9, 0xda, 0xe7, 0xe9, 0x5f, 0x98, 0x99, 0x28, 0x16, 0x6d, - 0x8c, 0x79, 0x8a, 0x5d, 0x47, 0xaa, 0x8d, 0xea, 0x5a, 0xc4, 0x13, 0x37, - 0x95, 0xf4, 0x6b, 0x1c, 0x71, 0x36, 0x38, 0x59, 0x83, 0xeb, 0xa0, 0xa7, - 0xc6, 0xab, 0x1c, 0x46, 0xef, 0x9b, 0x53, 0x85, 0x59, 0x23, 0xc0, 0xae, - 0x9e, 0x38, 0xb3, 0x4b, 0xf6, 0x1f, 0x4d, 0xca, 0x93, 0x88, 0x68, 0x30, - 0x7b, 0x0c, 0xc5, 0x49, 0x92, 0x3b, 0x79, 0x16, 0xc4, 0x67, 0xcb, 0x34, - 0x2e, 0x41, 0x74, 0x35, 0x06, 0x75, 0x28, 0x86, 0x08, 0x5a, 0x64, 0x3d, - 0x24, 0x8f, 0x1d, 0x02, 0xe8, 0xd8, 0xa9, 0x50, 0xfd, 0xf5, 0xee, 0xc5, - 0x56, 0xf6, 0xa7, 0x6a, 0x24, 0x90, 0x17, 0x4f, 0xe1, 0x49, 0x6a, 0x52, - 0x8f, 0x37, 0x4a, 0xb6, 0x40, 0x83, 0xec, 0x2a, 0xf4, 0xe1, 0xaa, 0x3a, - 0x10, 0x9a, 0x07, 0x65, 0x3f, 0x8d, 0x6f, 0x50, 0x4f, 0xca, 0x78, 0x76, - 0xf9, 0x45, 0x2e, 0x1d, 0xde, 0x90, 0x01, 0x16, 0xbe, 0x80, 0xa7, 0xad, - 0x9f, 0x92, 0x39, 0xf3, 0x9b, 0xf5, 0x11, 0x24, 0x7a, 0x01, 0x60, 0x3d, - 0x61, 0xc0, 0x4b, 0xc7, 0x90, 0x8f, 0x7b, 0x80, 0x4b, 0x56, 0x0c, 0xea, - 0xf9, 0x5d, 0x87, 0x25, 0x41, 0xe4, 0xce, 0x47, 0x07, 0x85, 0x0c, 0xdc, - 0x24, 0x87, 0xf9, 0xf0, 0x02, 0x52, 0x2b, 0xec, 0x27, 0x8a, 0xfc, 0xd3, - 0xbc, 0x3c, 0xd1, 0x9f, 0xbf, 0xc7, 0x1c, 0xa5, 0xf8, 0xf1, 0x42, 0xfa, - 0xd4, 0xe3, 0x8a, 0x86, 0xf3, 0xbd, 0x2d, 0xc9, 0x18, 0x1b, 0xf2, 0x61, - 0xfe, 0xac, 0x51, 0xc9, 0x3f, 0xba, 0xf0, 0xf2, 0x44, 0x78, 0xac, 0xfb, - 0x3d, 0xf1, 0xfe, 0x62, 0xb3, 0x0a, 0x5c, 0x63, 0x36, 0xb0, 0x72, 0x21, - 0xf3, 0x89, 0x14, 0xfb, 0xa7, 0xf1, 0x70, 0x3d, 0x5c, 0x65, 0x18, 0x67, - 0x9f, 0x70, 0x6f, 0x2c, 0x0f, 0x00, 0x7f, 0x9f, 0xc1, 0xf6, 0x72, 0x63, - 0x66, 0xcf, 0xd2, 0x32, 0xa6, 0x97, 0x13, 0xc5, 0x40, 0xdb, 0x5c, 0x2c, - 0x28, 0x1a, 0xe7, 0x22, 0xe5, 0x4c, 0xa2, 0x8c, 0x2f, 0x71, 0xd3, 0x14, - 0xd1, 0x8c, 0xb8, 0x98, 0x49, 0xe2, 0xcf, 0x2e, 0x0a, 0xb1, 0xbc, 0x54, - 0xf9, 0x80, 0xf4, 0x0b, 0xd7, 0xf1, 0x8d, 0x1c, 0x4c, 0xee, 0x71, 0x91, - 0x7b, 0x51, 0x67, 0x2f, 0x35, 0x9c, 0x8a, 0x73, 0x47, 0xfe, 0x59, 0x93, - 0x1d, 0x67, 0x7e, 0xaa, 0xa4, 0x85, 0x90, 0x51, 0xa1, 0xe4, 0xf2, 0x8f, - 0x1b, 0x22, 0x8d, 0xa2, 0x3f, 0xee, 0x4c, 0xec, 0xf1, 0x78, 0x90, 0xf0, - 0x21, 0x9f, 0x4c, 0x1c, 0x1a, 0xad, 0xa4, 0x16, 0x11, 0x74, 0x0f, 0x8a, - 0x06, 0xa5, 0xa2, 0x92, 0x36, 0x41, 0xa3, 0xbb, 0x97, 0xfa, 0x61, 0x62, - 0x7a, 0x22, 0x55, 0x9a, 0x8d, 0xb2, 0xd6, 0x1d, 0x3e, 0x8c, 0x1c, 0xf5, - 0x5e, 0xe1, 0xd3, 0xcf, 0xdc, 0x8a, 0xea, 0x70, 0x2c, 0xef, 0x0d, 0x3d, - 0x4f, 0xff, 0x98, 0x53, 0x53, 0x8a, 0x53, 0xdd, 0xb0, 0x75, 0x30, 0xe3, - 0xc0, 0xa3, 0x18, 0x5c, 0x68, 0x1b, 0x71, 0x8f, 0x97, 0xea, 0xb9, 0x01, - 0xb1, 0xd8, 0x83, 0x0b, 0x46, 0x88, 0xd8, 0x68, 0xe6, 0xd1, 0x16, 0xa8, - 0x00, 0xc3, 0x8e, 0x35, 0xd7, 0xd5, 0xb0, 0x9b, 0xa0, 0x49, 0xbb, 0xa3, - 0x13, 0x48, 0xa3, 0xf3, 0x78, 0x51, 0x2d, 0x1b, 0x2f, 0x27, 0x62, 0xbe, - 0x5e, 0xb9, 0xf6, 0x0c, 0x44, 0x07, 0x3b, 0x12, 0x38, 0x5b, 0x66, 0x42, - 0x04, 0x74, 0x1e, 0x83, 0xaa, 0xa9, 0x43, 0x61, 0x37, 0x43, 0x70, 0xa6, - 0x4b, 0xa2, 0xce, 0x98, 0x50, 0xa2, 0xe0, 0x48, 0x65, 0xea, 0xfc, 0xa0, - 0x7a, 0x66, 0x15, 0xe6, 0x3d, 0x58, 0x55, 0xa5, 0xc4, 0x64, 0xbc, 0xdd, - 0x70, 0xa6, 0x8c, 0xab, 0x2f, 0xe6, 0x68, 0xe4, 0x22, 0x90, 0xaf, 0x97, - 0x15, 0xd1, 0xa2, 0x30, 0x57, 0xff, 0xc9, 0x06, 0x0d, 0xe4, 0x9b, 0x21, - 0xd5, 0x68, 0x00, 0xa5, 0xe0, 0x96, 0x5e, 0xa3, 0xff, 0xe4, 0xa7, 0x6c, - 0x89, 0xfc, 0x79, 0x36, 0x30, 0xe8, 0xfe, 0x55, 0xde, 0xdc, 0x70, 0x69, - 0xe8, 0xac, 0xb0, 0xae, 0x1d, 0x36, 0xee, 0x74, 0x66, 0x6a, 0x0f, 0xf0, - 0x6e, 0x8b, 0x47, 0x13, 0x67, 0xc9, 0x84, 0xb1, 0xd6, 0x27, 0x04, 0xbb, - 0x42, 0x80, 0xa1, 0xdd, 0x0e, 0xf0, 0xc9, 0x5e, 0x94, 0x08, 0xbd, 0x32, - 0xc0, 0xc4, 0xdc, 0xbf, 0xb9, 0x22, 0x31, 0x80, 0xd5, 0x63, 0xc6, 0xf6, - 0xff, 0xcb, 0x11, 0x15, 0xab, 0x13, 0x7e, 0xc6, 0xb5, 0x43, 0x4a, 0xa8, - 0x64, 0x70, 0x81, 0xc9, 0x81, 0x52, 0xed, 0xf7, 0x83, 0x03, 0x45, 0x78, - 0x3f, 0xf4, 0x22, 0xfb, 0x25, 0xdb, 0x48, 0xe5, 0x7e, 0x23, 0x96, 0x90, - 0x90, 0x7a, 0x6d, 0x7a, 0x8d, 0x58, 0x40, 0x04, 0xd9, 0x76, 0x12, 0x16, - 0x13, 0x9b, 0xf5, 0x78, 0xa7, 0x4e, 0x3d, 0x1f, 0xa5, 0x20, 0xb9, 0x41, - 0xe2, 0x65, 0x35, 0x7c, 0x28, 0xeb, 0x94, 0xe7, 0x7e, 0xa2, 0x1b, 0xb4, - 0x49, 0x98, 0xe4, 0xc6, 0x86, 0xe3, 0x12, 0xc7, 0xf8, 0xc0, 0x1c, 0x0e, - 0x6e, 0x2c, 0x4f, 0xe2, 0x28, 0x07, 0xdd, 0xcc, 0xa0, 0xf3, 0x20, 0x37, - 0x7e, 0x8c, 0x6b, 0xaa, 0x86, 0xa8, 0x89, 0xc4, 0x0b, 0xe1, 0xc1, 0x1f, - 0x79, 0x8c, 0x84, 0x44, 0xb9, 0x4a, 0x44, 0xb1, 0x8c, 0xe6, 0x83, 0x79, - 0x3c, 0x91, 0x88, 0xeb, 0xcb, 0x86, 0xa2, 0x9e, 0x3d, 0xb8, 0xd3, 0x87, - 0x23, 0x8c, 0x38, 0xcb, 0xa3, 0x36, 0x53, 0x99, 0xb3, 0x31, 0x91, 0x8a, - 0xe0, 0x62, 0xbb, 0xc6, 0x7d, 0x84, 0x72, 0x71, 0x32, 0x38, 0x4d, 0x4e, - 0xb9, 0x1c, 0xe8, 0x28, 0x3b, 0x52, 0xe4, 0xd4, 0xa1, 0xbb, 0x8d, 0xcc, - 0x5f, 0x96, 0x38, 0xbb, 0xaf, 0xf1, 0xc5, 0x28, 0x74, 0x7b, 0x9f, 0x77, - 0x2b, 0x47, 0xdf, 0x28, 0x16, 0x2d, 0x02, 0x3e, 0x84, 0x1a, 0x84, 0x5d, - 0x1d, 0xd0, 0x1f, 0xb8, 0x36, 0xf8, 0x69, 0xad, 0x75, 0xa4, 0x19, 0x7d, - 0x91, 0xca, 0xfb, 0x97, 0x4c, 0xb2, 0x5a, 0x20, 0x70, 0x97, 0x4e, 0x7f, - 0x67, 0xbe, 0x03, 0x61, 0x61, 0x13, 0x60, 0xf2, 0xc0, 0xf1, 0x83, 0x9a, - 0x27, 0x80, 0xda, 0x00, 0x4e, 0xc8, 0x0c, 0x4e, 0xf9, 0xcb, 0x8b, 0xce, - 0xe0, 0xed, 0x70, 0x7a, 0x45, 0x25, 0x98, 0x5e, 0xb5, 0x0e, 0x4c, 0x2f, - 0xef, 0x38, 0x0c, 0x50, 0x10, 0x56, 0x7b, 0xb6, 0x2a, 0x71, 0x41, 0xc7, - 0x6f, 0x40, 0x7d, 0xa5, 0xdf, 0x33, 0xc6, 0x0c, 0xc3, 0x15, 0xf1, 0x12, - 0x47, 0x84, 0x99, 0xce, 0xcf, 0xa0, 0x17, 0xed, 0x74, 0xea, 0x27, 0xec, - 0xae, 0xe3, 0x69, 0x9c, 0xa0, 0x43, 0x9b, 0xef, 0x38, 0x78, 0x2d, 0x6e, - 0xe4, 0xc1, 0x41, 0xb8, 0xda, 0x14, 0x19, 0x35, 0xd7, 0x23, 0xf1, 0x09, - 0x36, 0x71, 0xf5, 0xd4, 0x84, 0x92, 0x50, 0x1b, 0x01, 0x84, 0x9a, 0x8f, - 0x10, 0x46, 0x7a, 0xde, 0xd0, 0x8d, 0x4c, 0x2d, 0x89, 0xc4, 0xbc, 0x9b, - 0x43, 0xe4, 0xfd, 0x1e, 0x21, 0x55, 0xf4, 0x76, 0x58, 0x2d, 0x13, 0xac, - 0x96, 0x37, 0x08, 0x75, 0x08, 0x5f, 0xd0, 0x73, 0x0a, 0x90, 0x4b, 0x6b, - 0x06, 0xdb, 0x96, 0x49, 0x63, 0x28, 0xd4, 0x43, 0x1e, 0x1f, 0xd9, 0x82, - 0x66, 0xf6, 0x9e, 0xb0, 0xce, 0xc3, 0x6b, 0x30, 0xe3, 0x2c, 0x77, 0x8c, - 0x8f, 0x9e, 0xc7, 0x38, 0x97, 0x02, 0x98, 0x44, 0x7c, 0xe9, 0xdd, 0x60, - 0xdd, 0x97, 0x88, 0x7b, 0xa8, 0xe3, 0x6c, 0x92, 0x2f, 0x73, 0x16, 0xfb, - 0x21, 0xb8, 0xee, 0x47, 0xa0, 0x97, 0xf2, 0xca, 0xb5, 0x11, 0xf6, 0xf7, - 0x18, 0xf1, 0x69, 0x77, 0x67, 0x57, 0xf0, 0x75, 0xf2, 0x2d, 0x42, 0xc2, - 0x4d, 0x41, 0x68, 0x5f, 0xd5, 0x80, 0xa7, 0xf8, 0x30, 0xf9, 0x86, 0x9f, - 0x23, 0x74, 0x84, 0x67, 0x71, 0xea, 0x85, 0x4a, 0x98, 0xdd, 0x13, 0xa7, - 0x20, 0x3c, 0x5e, 0x31, 0x2d, 0xcd, 0x08, 0x6b, 0x3d, 0xc1, 0xc5, 0xc1, - 0xb2, 0x9b, 0x5c, 0xb1, 0xb2, 0xa2, 0xdb, 0x14, 0x45, 0xf5, 0x12, 0x80, - 0x69, 0x41, 0xb3, 0x8a, 0x46, 0x0d, 0xac, 0x28, 0x97, 0xeb, 0xb8, 0x62, - 0x50, 0x87, 0x58, 0xcd, 0x48, 0xf8, 0x0c, 0x4e, 0xc8, 0x37, 0xe0, 0x03, - 0x2a, 0x19, 0x8f, 0x4b, 0x90, 0xcf, 0x41, 0xce, 0x82, 0x1b, 0xb5, 0x75, - 0xb9, 0x67, 0x5e, 0x2d, 0x17, 0x48, 0xfb, 0x2e, 0x1c, 0xc7, 0x28, 0xb0, - 0x51, 0x15, 0x6b, 0xfe, 0xc4, 0x53, 0x4d, 0x14, 0x2f, 0x5a, 0xc9, 0xb0, - 0x90, 0x57, 0x45, 0xcc, 0x93, 0xeb, 0xaf, 0x53, 0x1d, 0x40, 0x2a, 0xf6, - 0x07, 0xb8, 0xee, 0x2d, 0xaa, 0x8f, 0x78, 0x84, 0xbe, 0x54, 0x58, 0x18, - 0xe2, 0xd5, 0x23, 0x80, 0x95, 0xb3, 0x37, 0x43, 0xf5, 0xa8, 0x52, 0xe0, - 0xd8, 0x7d, 0x72, 0xbe, 0xbe, 0xf2, 0x90, 0xb6, 0xc2, 0x71, 0x61, 0x62, - 0x9e, 0x83, 0x8f, 0x98, 0xcb, 0xf8, 0x28, 0xca, 0x72, 0x4e, 0x2b, 0x23, - 0x38, 0x2d, 0xf1, 0xc7, 0x97, 0x8d, 0x34, 0x55, 0xd0, 0xbd, 0x89, 0x1e, - 0x8f, 0xb3, 0xd4, 0x57, 0x49, 0x32, 0x74, 0xb9, 0xd0, 0x88, 0xa6, 0x5c, - 0x5c, 0x08, 0x60, 0x82, 0xbb, 0x31, 0x46, 0x62, 0xdb, 0xa8, 0x63, 0x1b, - 0x23, 0x75, 0x68, 0xc7, 0x2f, 0x30, 0xe3, 0x07, 0xaa, 0xa1, 0x69, 0x39, - 0x6a, 0xf4, 0x87, 0xef, 0xcf, 0x01, 0xb5, 0x0a, 0x73, 0xb8, 0xab, 0x4d, - 0x3c, 0x20, 0x9e, 0x71, 0xf5, 0x91, 0x17, 0x6a, 0x60, 0x9c, 0x28, 0x71, - 0x40, 0x71, 0xef, 0x56, 0x0c, 0x2c, 0x33, 0x90, 0xf1, 0x27, 0x56, 0x26, - 0x69, 0x3d, 0x96, 0xab, 0xf6, 0xeb, 0xb0, 0x3a, 0x3c, 0x4a, 0xdf, 0x15, - 0x67, 0xf3, 0xa3, 0xca, 0x81, 0x87, 0xe5, 0xc7, 0xb8, 0xf8, 0x6c, 0x33, - 0x07, 0xaa, 0x5a, 0x1d, 0x2d, 0x8b, 0x70, 0x81, 0xc6, 0x28, 0x6a, 0x98, - 0x0d, 0xd0, 0xc8, 0xe8, 0x72, 0x90, 0xe1, 0xae, 0xcd, 0x1f, 0x85, 0xa7, - 0xfe, 0xd4, 0x11, 0x77, 0x45, 0xf9, 0x3a, 0xad, 0xd6, 0xc1, 0x96, 0x12, - 0xaf, 0x31, 0x1a, 0xc0, 0x87, 0xba, 0x6c, 0x09, 0xa2, 0xb3, 0xdb, 0x84, - 0xb5, 0x1b, 0xf5, 0xbd, 0x6a, 0x6f, 0xe6, 0xbb, 0x5f, 0x1e, 0x81, 0x2e, - 0xb9, 0x83, 0x9b, 0xa7, 0x23, 0x66, 0x82, 0x7f, 0x36, 0x15, 0xf1, 0xae, - 0x55, 0xa1, 0xd1, 0xe6, 0x7c, 0x0a, 0xe5, 0xfb, 0xa0, 0x38, 0x4c, 0x32, - 0xa8, 0x7e, 0xef, 0xb4, 0x4d, 0x81, 0xa9, 0xb1, 0xaf, 0xab, 0x8c, 0x3e, - 0x6b, 0x83, 0x25, 0x26, 0x2f, 0x05, 0xed, 0x56, 0x8d, 0xaa, 0x45, 0xfb, - 0x51, 0xdf, 0xf4, 0xfb, 0xb2, 0x29, 0x05, 0x83, 0xfe, 0xea, 0xee, 0xd6, - 0xf8, 0xe1, 0x92, 0x3c, 0x0e, 0x43, 0x8c, 0x3f, 0xdc, 0x1e, 0x1a, 0x7f, - 0xb0, 0xe1, 0x33, 0xfe, 0xac, 0x3e, 0x30, 0xfe, 0xec, 0xee, 0x32, 0x27, - 0x49, 0x15, 0x80, 0x85, 0xfc, 0xdb, 0x35, 0xa4, 0x5f, 0x7e, 0xe0, 0x6f, - 0xe8, 0x45, 0x18, 0x71, 0x7e, 0xd4, 0x9c, 0x3e, 0x04, 0x93, 0xfb, 0x1b, - 0x39, 0xa3, 0xdb, 0x01, 0x23, 0x94, 0x2c, 0x98, 0xff, 0x5f, 0xa8, 0xa2, - 0xb4, 0x24, 0xbd, 0x78, 0xdf, 0x1f, 0xae, 0xe2, 0x79, 0x41, 0xfe, 0x7b, - 0x71, 0xa0, 0x85, 0xeb, 0x12, 0x06, 0xe0, 0x9c, 0x2f, 0xec, 0x5a, 0x81, - 0x57, 0x7e, 0xce, 0x4b, 0x0b, 0xca, 0x50, 0x0f, 0xc6, 0x1f, 0x12, 0xa4, - 0x96, 0x57, 0xba, 0x85, 0x6e, 0xe3, 0x97, 0x6e, 0xc0, 0xbe, 0xb8, 0x94, - 0xfa, 0x42, 0x4e, 0xbc, 0x78, 0x29, 0xc3, 0xdc, 0x07, 0xfd, 0x47, 0x86, - 0xf7, 0x06, 0xed, 0xa0, 0x36, 0xd3, 0xca, 0x2b, 0xaa, 0x89, 0x0f, 0xea, - 0x20, 0x11, 0xe8, 0x09, 0xb2, 0xd2, 0xe1, 0x04, 0xf8, 0xe5, 0x9a, 0x48, - 0x5e, 0x4d, 0x13, 0x09, 0x20, 0x2f, 0xc4, 0xd3, 0x46, 0x26, 0x8c, 0x75, - 0xd1, 0xb2, 0x1f, 0x01, 0x1f, 0xdf, 0x95, 0xbc, 0x1d, 0xb7, 0xdf, 0xbc, - 0xb7, 0x22, 0xa7, 0x1b, 0xc6, 0x84, 0x7a, 0xf9, 0x7e, 0x8d, 0xdb, 0x62, - 0x2f, 0xea, 0xe0, 0x78, 0xe1, 0x62, 0xae, 0xa2, 0xfa, 0x28, 0xc4, 0x07, - 0x03, 0x1a, 0xaa, 0xe3, 0xcb, 0xb7, 0x08, 0x8d, 0xfa, 0x13, 0x23, 0xfe, - 0x06, 0xdf, 0xe0, 0x0a, 0xc4, 0xa7, 0xaa, 0x86, 0x05, 0x43, 0x2e, 0x0a, - 0x3a, 0x92, 0x1f, 0x6d, 0x37, 0x1a, 0xb8, 0xe4, 0x0b, 0xc8, 0x8d, 0x6d, - 0xcf, 0x28, 0x35, 0x71, 0x19, 0xa5, 0xbc, 0xfc, 0xe2, 0x5a, 0xec, 0x8b, - 0x46, 0xf8, 0x40, 0xf5, 0xf6, 0xf1, 0xaf, 0xf4, 0x53, 0x11, 0xb8, 0xd7, - 0x54, 0xfb, 0xe7, 0x17, 0x45, 0x94, 0x97, 0x2c, 0xd0, 0x39, 0x55, 0x6f, - 0x0c, 0xfc, 0x15, 0x2c, 0x9e, 0xd5, 0x66, 0xe5, 0x6b, 0x54, 0xce, 0x8f, - 0xda, 0x54, 0x02, 0x45, 0x33, 0x21, 0x55, 0xc0, 0x39, 0xae, 0x56, 0xb3, - 0xf5, 0xbe, 0xa0, 0x98, 0x8d, 0x42, 0x44, 0xa0, 0xf6, 0xab, 0x8a, 0xcd, - 0x7a, 0x5c, 0x4e, 0x84, 0x5e, 0x30, 0x06, 0x07, 0x77, 0x51, 0xc4, 0xbe, - 0x32, 0xfa, 0x62, 0x47, 0xe8, 0x8f, 0xe4, 0x9a, 0x89, 0x2b, 0x2d, 0x57, - 0x01, 0xfc, 0x55, 0x39, 0xc4, 0x8e, 0xf7, 0xcb, 0xfb, 0xac, 0x97, 0x77, - 0x5a, 0x2f, 0x5f, 0xa5, 0x7c, 0x8d, 0x25, 0x3e, 0x05, 0x47, 0xf4, 0x9f, - 0x15, 0x28, 0x70, 0x29, 0x0a, 0x5c, 0xdc, 0x75, 0xdf, 0xdd, 0x1f, 0xa1, - 0x6f, 0x53, 0x5c, 0x4f, 0x46, 0xb9, 0xfd, 0x56, 0x48, 0x6a, 0x8b, 0x30, - 0x02, 0x57, 0xaa, 0x22, 0x5e, 0xd9, 0x0a, 0x90, 0xe5, 0x94, 0x95, 0x65, - 0xba, 0x2c, 0xff, 0x82, 0x78, 0xf9, 0xea, 0x2e, 0xed, 0xbe, 0xfc, 0xd2, - 0xee, 0x8b, 0x97, 0x76, 0xe1, 0x5e, 0xb1, 0x6c, 0x0b, 0xd0, 0x85, 0x61, - 0xde, 0x98, 0x2b, 0xf9, 0xe9, 0xc5, 0x49, 0x39, 0xce, 0x2b, 0x23, 0x0d, - 0x08, 0x70, 0xea, 0xa1, 0xd3, 0x95, 0x8a, 0x12, 0x28, 0xed, 0x67, 0xe2, - 0xef, 0x7f, 0x5d, 0x27, 0xfb, 0xcb, 0x5a, 0x03, 0xdb, 0x2e, 0xa9, 0xfb, - 0x68, 0xea, 0x03, 0xc0, 0x2c, 0xc4, 0x5d, 0xd9, 0x8d, 0x94, 0xb3, 0xb6, - 0xd7, 0xe9, 0x96, 0xc9, 0x0c, 0x49, 0x2b, 0xb7, 0x51, 0x5d, 0xff, 0x04, - 0xf0, 0xdb, 0xf7, 0x06, 0x3f, 0xbe, 0x1a, 0xf8, 0x3a, 0x95, 0xe5, 0x67, - 0x5c, 0xf8, 0x16, 0x62, 0x7a, 0x26, 0x1c, 0xfe, 0x99, 0x3c, 0x31, 0xa0, - 0xca, 0xd0, 0x69, 0xe0, 0x6f, 0xde, 0xbb, 0x4f, 0x83, 0xff, 0x3c, 0xa1, - 0xaf, 0x9e, 0x5c, 0xf5, 0xaa, 0x68, 0x1d, 0xe6, 0xa6, 0x41, 0xf1, 0x2d, - 0xb1, 0x8b, 0xcb, 0xe5, 0x6e, 0x73, 0x54, 0x23, 0x26, 0xbf, 0xed, 0x6f, - 0x54, 0x6b, 0x70, 0x00, 0x12, 0x2d, 0xa6, 0x61, 0xa3, 0x4b, 0x4f, 0xf6, - 0x01, 0xba, 0x3c, 0x3f, 0x0d, 0xfe, 0x76, 0xed, 0x81, 0x51, 0xa3, 0x93, - 0xc7, 0x1c, 0x89, 0xdf, 0xa5, 0x47, 0x79, 0x82, 0x6e, 0x3b, 0x0f, 0x2c, - 0xd4, 0x63, 0x5f, 0xbe, 0x0b, 0x96, 0x93, 0x39, 0x9d, 0xb4, 0x85, 0x1b, - 0x5b, 0x96, 0x81, 0x3d, 0xe6, 0x77, 0xf8, 0xa1, 0xc0, 0x41, 0x45, 0x6a, - 0x95, 0x33, 0x9c, 0x61, 0x4a, 0xf4, 0xac, 0x90, 0xc9, 0x37, 0xb9, 0x0c, - 0x1d, 0xf8, 0x94, 0x14, 0x7f, 0x1a, 0xa2, 0xbf, 0x9f, 0x12, 0xbd, 0x79, - 0xc5, 0x91, 0x24, 0x36, 0x82, 0x27, 0xbf, 0xd2, 0x37, 0x71, 0x23, 0x6e, - 0xe2, 0xee, 0x1b, 0xe3, 0xf2, 0xd2, 0x9b, 0xa8, 0xaa, 0xc2, 0xe3, 0x70, - 0xad, 0x15, 0x00, 0x4d, 0x52, 0x99, 0x7c, 0x03, 0x2d, 0x42, 0x7f, 0xd2, - 0xe0, 0xe8, 0x54, 0x5b, 0x9e, 0xd8, 0xe3, 0x4f, 0x29, 0xed, 0x2d, 0x22, - 0x25, 0x2f, 0xbd, 0x3d, 0x3e, 0x8e, 0x00, 0x24, 0x8a, 0x45, 0x55, 0x50, - 0x0a, 0xbe, 0xe3, 0x19, 0x36, 0x18, 0x92, 0x27, 0x4d, 0x7a, 0x6c, 0x13, - 0x33, 0x85, 0x8b, 0x3c, 0x93, 0xf6, 0x89, 0x68, 0x8c, 0x6d, 0xd1, 0x8c, - 0xc4, 0x0d, 0xb3, 0x91, 0x7a, 0x14, 0x30, 0xb7, 0x1a, 0xe3, 0xe1, 0x34, - 0x2a, 0xdb, 0x63, 0x9d, 0x61, 0x8a, 0xa9, 0xfe, 0xc4, 0x83, 0x7c, 0xea, - 0x1d, 0xe0, 0xaa, 0x67, 0x07, 0xf2, 0x8a, 0x33, 0xae, 0x5a, 0x2a, 0x05, - 0xd0, 0x82, 0xaa, 0xa1, 0xd7, 0xe2, 0xbf, 0x2d, 0x39, 0xfb, 0x8f, 0xba, - 0x10, 0x39, 0x79, 0x0f, 0x24, 0x2a, 0xad, 0xbb, 0xd3, 0x58, 0x35, 0x4e, - 0x18, 0xf4, 0xcd, 0x45, 0x20, 0x9e, 0x10, 0x00, 0xe0, 0x08, 0x0a, 0xe0, - 0x55, 0x14, 0x88, 0x33, 0x3e, 0xa2, 0xc2, 0x4b, 0xe1, 0x13, 0xfa, 0xb2, - 0x92, 0x1c, 0xf0, 0x13, 0x3c, 0x35, 0xef, 0xfc, 0x86, 0x2d, 0x48, 0x8b, - 0xee, 0x42, 0xe7, 0xe2, 0x15, 0x12, 0x1b, 0x0e, 0x26, 0xd2, 0xb0, 0x02, - 0x82, 0x24, 0xf9, 0x4a, 0x13, 0xbf, 0x2e, 0x3e, 0x49, 0xcf, 0xf9, 0x94, - 0xf9, 0x35, 0xb9, 0xda, 0xcd, 0xdc, 0x5c, 0x81, 0x9d, 0x43, 0x6d, 0x05, - 0x4c, 0x58, 0x8f, 0x47, 0xef, 0x31, 0x65, 0xf4, 0xa0, 0x70, 0x6b, 0x10, - 0x3e, 0xce, 0x56, 0x44, 0x2d, 0xfd, 0x70, 0xeb, 0x38, 0x32, 0xc9, 0x7e, - 0x96, 0xd1, 0x43, 0x23, 0x2a, 0x41, 0x7d, 0x94, 0x9b, 0x85, 0x24, 0xd5, - 0x8b, 0x67, 0x7c, 0x48, 0xa6, 0xea, 0xf7, 0xb9, 0xd2, 0xd0, 0x24, 0x90, - 0xd6, 0x2e, 0xeb, 0x71, 0x0a, 0x03, 0x2b, 0x97, 0x9a, 0x0c, 0x68, 0x0a, - 0x3e, 0x61, 0xe6, 0x3d, 0x71, 0xc5, 0xf5, 0x96, 0x1e, 0xa1, 0xf8, 0x60, - 0x3a, 0xd4, 0x1c, 0x0e, 0x3a, 0x18, 0x36, 0x27, 0xa8, 0x7b, 0x36, 0x67, - 0xe0, 0x35, 0x5a, 0x03, 0x77, 0x18, 0x4c, 0x05, 0x78, 0x50, 0xf0, 0x71, - 0x80, 0x0e, 0x7c, 0x3a, 0x3c, 0xdb, 0x60, 0x8f, 0xa7, 0xb6, 0xca, 0x43, - 0xb5, 0x11, 0xe4, 0xa1, 0x4e, 0x04, 0x50, 0xa5, 0x43, 0x75, 0x4b, 0x14, - 0x58, 0xcc, 0x89, 0x22, 0x21, 0xd2, 0xc9, 0x15, 0xe1, 0xd6, 0xa1, 0x1d, - 0x73, 0x97, 0xd2, 0x79, 0xca, 0x4a, 0x80, 0xb7, 0xda, 0x83, 0xe7, 0xe1, - 0x04, 0x4e, 0x27, 0xaa, 0xb2, 0x3c, 0x94, 0x33, 0x1d, 0xad, 0x2c, 0x3a, - 0x13, 0x2b, 0xdb, 0x74, 0x06, 0x45, 0x7f, 0x3d, 0xb3, 0x6a, 0xcf, 0xde, - 0xfd, 0x8a, 0x62, 0xc9, 0x76, 0x86, 0xb6, 0xc3, 0x47, 0x12, 0xe0, 0x06, - 0x23, 0x40, 0xed, 0x9d, 0xc0, 0xac, 0x50, 0x03, 0x0a, 0xb0, 0x7d, 0x98, - 0xb0, 0x99, 0xfa, 0xea, 0xe1, 0x72, 0x14, 0x9a, 0x69, 0x11, 0x7a, 0x83, - 0x1e, 0xf4, 0xc7, 0x2d, 0xa8, 0xff, 0xa2, 0xdd, 0x12, 0x1c, 0x47, 0xd1, - 0x5b, 0xd9, 0xe5, 0xce, 0x83, 0xea, 0xc4, 0x5c, 0x4f, 0x49, 0xcc, 0x4d, - 0x85, 0xdd, 0xcc, 0xeb, 0x50, 0x73, 0xa2, 0x22, 0x60, 0x47, 0x0c, 0x92, - 0xaa, 0xae, 0xe8, 0x39, 0x61, 0x21, 0x7f, 0xf6, 0xeb, 0x94, 0xa0, 0xf5, - 0x07, 0xed, 0x8f, 0x8b, 0xe2, 0x53, 0x30, 0x79, 0x9d, 0x61, 0x2d, 0x79, - 0x01, 0x4d, 0x11, 0xe7, 0x38, 0x41, 0xcf, 0x8c, 0xd6, 0x0b, 0xe6, 0x11, - 0xd5, 0x7a, 0xf6, 0x4d, 0xc9, 0x19, 0x05, 0x67, 0x0e, 0xd3, 0xa9, 0x21, - 0x4c, 0x0b, 0x1d, 0xbc, 0x7a, 0xc0, 0x38, 0x0d, 0x6c, 0xae, 0x71, 0x19, - 0x18, 0x5e, 0x5c, 0xe4, 0x99, 0xb3, 0x6f, 0xed, 0xcf, 0x99, 0x0e, 0x6a, - 0x25, 0x5c, 0x13, 0x31, 0x79, 0x02, 0x13, 0xf8, 0x99, 0x83, 0x72, 0x9c, - 0x00, 0xd4, 0x98, 0x45, 0x74, 0x68, 0x77, 0x01, 0xb8, 0x75, 0xb9, 0xe0, - 0xdc, 0x73, 0xdb, 0x23, 0xac, 0xbf, 0xe7, 0xc5, 0xe8, 0x58, 0x1a, 0x26, - 0x81, 0x3e, 0x14, 0xce, 0x9a, 0xdf, 0x85, 0x13, 0x3a, 0xc2, 0xea, 0xe7, - 0x1d, 0x29, 0xf1, 0x18, 0xbf, 0xc6, 0x2b, 0xb2, 0x7f, 0x47, 0x49, 0x97, - 0xc2, 0x38, 0xa1, 0x92, 0xf8, 0xa2, 0xd2, 0x2e, 0x54, 0x3b, 0x3f, 0x5b, - 0x03, 0x8a, 0x6c, 0xb6, 0x66, 0xa0, 0xac, 0x3f, 0xbc, 0xc7, 0x98, 0xcf, - 0x9d, 0xc7, 0x32, 0x17, 0xa6, 0x0f, 0xae, 0x16, 0xf0, 0x96, 0x41, 0xa2, - 0xa9, 0xd1, 0x03, 0xee, 0x83, 0x0e, 0xe7, 0xf1, 0xec, 0x2a, 0x16, 0xca, - 0x14, 0x4b, 0x35, 0xe8, 0x41, 0xe4, 0x87, 0x1d, 0x96, 0xb0, 0xee, 0xb1, - 0x70, 0x0d, 0x1a, 0x2e, 0x4d, 0x4a, 0x3b, 0xda, 0xdd, 0x2f, 0x1e, 0x34, - 0x84, 0xa6, 0x0a, 0xa0, 0x91, 0x08, 0x68, 0x96, 0xe4, 0x05, 0x48, 0x13, - 0x91, 0x44, 0x12, 0x4f, 0x81, 0x24, 0x52, 0x2d, 0x43, 0x2c, 0xed, 0x2d, - 0xc3, 0x7a, 0xf1, 0x2f, 0x58, 0x6f, 0x56, 0x8b, 0x33, 0xc3, 0xad, 0x92, - 0x8d, 0x0c, 0x70, 0x7b, 0x24, 0xf4, 0xdd, 0x89, 0xd6, 0xf0, 0x6b, 0x8b, - 0xa3, 0x9d, 0x4e, 0x59, 0x42, 0x02, 0x59, 0xd8, 0x79, 0x2f, 0xaa, 0xca, - 0x0b, 0x0e, 0xe9, 0x90, 0x2a, 0xe9, 0x3e, 0xd7, 0x58, 0x06, 0xa5, 0xf5, - 0x37, 0xc6, 0xf1, 0x25, 0x0d, 0x2f, 0xaa, 0xe0, 0x05, 0x60, 0x88, 0xd4, - 0x92, 0xca, 0xbd, 0x04, 0xb8, 0xfa, 0x21, 0xdc, 0xa0, 0xb5, 0x03, 0x36, - 0x86, 0x6f, 0x49, 0xe9, 0x37, 0x69, 0x44, 0x5a, 0x78, 0x16, 0x65, 0xc1, - 0x8e, 0xcb, 0xc2, 0x11, 0x67, 0xf1, 0xd1, 0x53, 0x14, 0x41, 0x1d, 0x23, - 0xf0, 0xe8, 0x26, 0xd0, 0x0c, 0x49, 0xf1, 0x17, 0xe8, 0xd8, 0xbc, 0xa6, - 0xf0, 0xe3, 0x89, 0x87, 0xc5, 0x17, 0xd9, 0x17, 0xd9, 0xe7, 0x76, 0x2a, - 0xb4, 0x26, 0xb9, 0x5e, 0x62, 0x5a, 0x92, 0x20, 0xf1, 0x09, 0xd0, 0xe2, - 0x82, 0xbb, 0x68, 0x7d, 0x47, 0xcb, 0xda, 0x91, 0x3f, 0xfa, 0x06, 0x28, - 0x81, 0x10, 0x86, 0xbe, 0xc5, 0x6d, 0xfb, 0x12, 0xc4, 0x03, 0x80, 0x98, - 0x0e, 0x2e, 0x10, 0xc4, 0x1f, 0xb2, 0x35, 0x69, 0x0c, 0x26, 0x6b, 0xda, - 0xdc, 0x5f, 0xb2, 0x5a, 0xd7, 0xc2, 0x2d, 0xf0, 0xc5, 0x75, 0x89, 0x89, - 0x46, 0xaa, 0x34, 0xc8, 0x2f, 0xaa, 0x3f, 0x3c, 0x05, 0xe6, 0x91, 0xe7, - 0x5f, 0x05, 0x2e, 0x3c, 0xf1, 0xe3, 0x56, 0xa4, 0xb7, 0x45, 0xe1, 0xf6, - 0x16, 0x8e, 0xb5, 0x06, 0xdb, 0x27, 0xe6, 0x48, 0xa9, 0x13, 0x40, 0xaa, - 0xa0, 0x28, 0xd9, 0x1f, 0xaf, 0xde, 0x06, 0x26, 0xce, 0x88, 0x80, 0xd8, - 0xc3, 0x2f, 0xd8, 0xb1, 0x5d, 0x45, 0x0b, 0x65, 0x37, 0x43, 0x37, 0x6d, - 0x56, 0x12, 0x65, 0x79, 0xdd, 0x23, 0xf2, 0xbb, 0x4e, 0xcd, 0x00, 0x4d, - 0x6a, 0x3d, 0x75, 0x17, 0x77, 0xf1, 0x1d, 0x5b, 0xd2, 0x4d, 0x11, 0xc4, - 0xfc, 0xde, 0xe0, 0xaa, 0xfa, 0x8c, 0x9d, 0x5a, 0x0d, 0xce, 0x82, 0x4a, - 0xbc, 0x0e, 0x79, 0x11, 0xe4, 0x54, 0x41, 0x11, 0x9a, 0x28, 0x89, 0x01, - 0xc9, 0x12, 0xc1, 0xe2, 0xba, 0x99, 0x96, 0xb6, 0xe5, 0xb9, 0xd8, 0xc0, - 0xab, 0x0a, 0x7d, 0x78, 0x5d, 0x3a, 0x5a, 0x5d, 0x3a, 0xa2, 0x2e, 0xc5, - 0xd4, 0x07, 0x80, 0x27, 0xe6, 0x97, 0xe8, 0x66, 0x16, 0x6c, 0x57, 0xe6, - 0x41, 0x0b, 0x6b, 0xa0, 0x1c, 0x6c, 0xb3, 0x1a, 0x07, 0x4d, 0x22, 0x64, - 0xb4, 0x60, 0xf4, 0xe7, 0x00, 0xca, 0x58, 0x20, 0xbc, 0xd3, 0xa8, 0x6a, - 0x5e, 0x86, 0x8e, 0x59, 0xda, 0x8f, 0x21, 0x76, 0x61, 0x2b, 0x43, 0x3f, - 0x3d, 0x9a, 0x87, 0xec, 0x48, 0x1b, 0x81, 0xd8, 0x2a, 0xbb, 0xd1, 0x5b, - 0xf6, 0x21, 0x3c, 0x5f, 0x42, 0x44, 0xcd, 0x97, 0x22, 0x75, 0xe4, 0x00, - 0xff, 0x1d, 0xa8, 0xb6, 0xf9, 0xaa, 0x74, 0x5d, 0xa5, 0x51, 0x2a, 0x5f, - 0xaf, 0x22, 0x4d, 0xb3, 0x39, 0x71, 0x08, 0xa5, 0x7e, 0xd1, 0xce, 0x97, - 0x3c, 0xda, 0x25, 0xbc, 0x76, 0x01, 0x4f, 0x68, 0x4f, 0x15, 0x9d, 0x81, - 0x7e, 0xbf, 0x9e, 0xfa, 0xf5, 0xf7, 0x24, 0x0f, 0x60, 0xa5, 0xe9, 0xab, - 0x59, 0x60, 0xaa, 0x56, 0x51, 0x32, 0x54, 0x52, 0x01, 0x34, 0x39, 0xc1, - 0x2a, 0x28, 0x2e, 0xde, 0x5d, 0x3d, 0x04, 0x6e, 0x06, 0x5c, 0x87, 0xa9, - 0x31, 0xdb, 0xdc, 0xe1, 0xbd, 0x62, 0x8f, 0xdd, 0x6f, 0x5e, 0x01, 0xae, - 0xec, 0xbf, 0x02, 0xd1, 0xf3, 0x45, 0xe7, 0x86, 0xf0, 0x4a, 0xa3, 0x0b, - 0x1d, 0x3e, 0xa9, 0x04, 0x61, 0x91, 0x62, 0x0b, 0x36, 0xc6, 0xbb, 0xcc, - 0x9d, 0x9a, 0x7c, 0x65, 0x2d, 0x45, 0x4b, 0xcd, 0xb7, 0x81, 0x8e, 0x67, - 0x45, 0x1c, 0x76, 0x37, 0x30, 0xb3, 0xca, 0x65, 0x1c, 0x4e, 0x66, 0xd3, - 0xcb, 0xb7, 0x5b, 0xdc, 0xc1, 0xcd, 0x52, 0x65, 0x0c, 0x6b, 0xd6, 0x7a, - 0xec, 0x3e, 0xd0, 0x41, 0x28, 0x1c, 0x83, 0x26, 0x81, 0xfd, 0x75, 0xa4, - 0xe6, 0xbe, 0xf3, 0xc7, 0x5d, 0x8d, 0x13, 0x40, 0x6b, 0x5f, 0x86, 0xb4, - 0x79, 0x6c, 0x40, 0x83, 0x8a, 0x01, 0x56, 0x9b, 0xbb, 0x6f, 0x5d, 0x65, - 0x1c, 0x35, 0x2e, 0xf2, 0xd1, 0x22, 0x50, 0xe6, 0x26, 0x7d, 0x46, 0x4e, - 0x60, 0x6c, 0xcb, 0xbe, 0x09, 0x96, 0xb1, 0x6b, 0x43, 0x5a, 0x06, 0x11, - 0xf4, 0xb2, 0xf9, 0x2f, 0x5e, 0xfc, 0x37, 0x1f, 0x98, 0x59, 0x52, 0x60, - 0x30, 0x47, 0x1f, 0x4e, 0xca, 0xac, 0x7d, 0x41, 0x78, 0x61, 0x79, 0xe9, - 0xf0, 0x04, 0x49, 0x21, 0x5d, 0xe4, 0xde, 0x82, 0xcd, 0x22, 0xfc, 0xf2, - 0xa9, 0xd9, 0x9a, 0xcb, 0xa1, 0x54, 0x27, 0x87, 0x4a, 0x1d, 0x82, 0x1a, - 0xac, 0x56, 0x27, 0xcc, 0x76, 0xe5, 0x7b, 0x53, 0xdc, 0x1e, 0xf3, 0x6d, - 0x6c, 0xd4, 0x1b, 0x11, 0xb1, 0x16, 0x0e, 0x85, 0x4f, 0x02, 0xa6, 0x20, - 0x5d, 0xfd, 0x6d, 0xb8, 0x3c, 0xba, 0xa5, 0x3f, 0xdd, 0x35, 0x52, 0xa1, - 0xf6, 0x42, 0x72, 0x8a, 0xbc, 0xde, 0x2d, 0xcd, 0xae, 0x11, 0xc4, 0x11, - 0xa6, 0x2a, 0x06, 0x5c, 0xcd, 0x1d, 0x50, 0xe1, 0xb2, 0x52, 0x9e, 0xee, - 0xca, 0x5a, 0xa3, 0x3b, 0x8f, 0xdd, 0x1a, 0x4a, 0xd6, 0x67, 0x64, 0x21, - 0xed, 0x55, 0x66, 0xee, 0xda, 0xe4, 0xd2, 0x50, 0x24, 0x1a, 0x1c, 0xb7, - 0x89, 0x32, 0x26, 0x8b, 0x8f, 0xec, 0xa0, 0x78, 0x3a, 0xc7, 0x1b, 0xcd, - 0xdd, 0x44, 0xd3, 0x0d, 0xbe, 0x36, 0x5f, 0x79, 0x5c, 0xeb, 0x97, 0x90, - 0xd5, 0x97, 0x84, 0xed, 0x0f, 0x20, 0x1c, 0x3e, 0xba, 0x09, 0x1e, 0xf2, - 0xba, 0x43, 0x4b, 0xc2, 0xd2, 0x41, 0xcf, 0x2c, 0xa8, 0x0d, 0xb8, 0xd6, - 0xd8, 0xa6, 0xfc, 0xdf, 0xa1, 0x9b, 0x3b, 0xce, 0x28, 0x11, 0x10, 0x88, - 0x8c, 0xf0, 0x4c, 0x15, 0xe8, 0x16, 0x0f, 0xbb, 0xca, 0xa7, 0x3c, 0xd5, - 0x8f, 0xe2, 0xae, 0x13, 0x6d, 0xc6, 0xb0, 0xad, 0x85, 0xf5, 0xf2, 0x0d, - 0xba, 0x67, 0x5b, 0x01, 0xf0, 0xb3, 0xb3, 0x57, 0x0a, 0x68, 0xd8, 0x84, - 0x15, 0x15, 0x20, 0x1e, 0x7a, 0xcd, 0x13, 0xba, 0x06, 0x46, 0x77, 0xb4, - 0xac, 0x38, 0xba, 0x5c, 0x50, 0x75, 0x39, 0x54, 0x34, 0x47, 0xc4, 0x7a, - 0xec, 0x51, 0xaa, 0x6f, 0x3a, 0xf5, 0x75, 0x6f, 0xdd, 0xc8, 0xcd, 0xda, - 0xab, 0x34, 0x92, 0xa7, 0x53, 0xbd, 0x13, 0x76, 0xfb, 0x72, 0x6c, 0x92, - 0x67, 0xd7, 0x52, 0xa2, 0x74, 0x35, 0x95, 0x25, 0x84, 0x6e, 0x7a, 0xc3, - 0x71, 0x52, 0xbb, 0x02, 0xb3, 0x6b, 0x67, 0x4a, 0x98, 0xb3, 0x9e, 0x3c, - 0xb7, 0x1e, 0x7b, 0xbe, 0xc4, 0xfe, 0x18, 0x21, 0xe4, 0x5c, 0xd8, 0x1d, - 0xdf, 0x86, 0x63, 0xe2, 0x4b, 0xd4, 0x4f, 0xd8, 0x9c, 0x4b, 0x36, 0x71, - 0xf2, 0xbc, 0xc0, 0x4a, 0x93, 0x1f, 0x44, 0xa9, 0x9c, 0x7f, 0x48, 0x65, - 0x73, 0x17, 0xd4, 0x93, 0x1e, 0x0c, 0x63, 0x5d, 0xbc, 0x24, 0x3b, 0x86, - 0xdf, 0x51, 0xaf, 0x4e, 0x07, 0x84, 0x2f, 0x62, 0x5e, 0x06, 0xef, 0xa4, - 0xa9, 0x3e, 0x01, 0xae, 0x3a, 0x04, 0xdd, 0x8c, 0x03, 0xe1, 0x6e, 0x7c, - 0x5e, 0x6e, 0xaa, 0xfd, 0xd4, 0x19, 0x46, 0x8d, 0x61, 0x57, 0x59, 0x20, - 0xd2, 0x70, 0xc6, 0x8a, 0xb2, 0x3c, 0x24, 0x53, 0x18, 0xd0, 0xec, 0x16, - 0x20, 0x24, 0x43, 0xc3, 0x2f, 0xc8, 0x40, 0x46, 0xbd, 0xfb, 0x04, 0x28, - 0xf1, 0x5b, 0xac, 0xe0, 0xc1, 0x84, 0x09, 0x7d, 0xb8, 0x39, 0x45, 0x92, - 0xe4, 0x6f, 0xa8, 0x8d, 0x5f, 0xe4, 0x7e, 0x1b, 0xc7, 0xcf, 0xc9, 0x97, - 0x23, 0x0b, 0x44, 0x4f, 0x84, 0xc3, 0x05, 0x6c, 0xbc, 0x4b, 0x77, 0x91, - 0x3d, 0xfb, 0xc9, 0xb1, 0x6c, 0xc3, 0x04, 0xd2, 0xce, 0x54, 0x61, 0xfd, - 0x8f, 0x32, 0x97, 0xa6, 0x0a, 0x31, 0x97, 0x01, 0xc5, 0x9e, 0x8d, 0x3f, - 0x99, 0xf7, 0xa6, 0xa6, 0x0e, 0x8c, 0x1b, 0x36, 0x68, 0x62, 0x1a, 0x44, - 0xa3, 0xac, 0x45, 0xf7, 0xec, 0x06, 0x6e, 0x42, 0x45, 0xb0, 0x68, 0xfd, - 0xa5, 0x53, 0x5e, 0x51, 0x79, 0xff, 0x1c, 0xb2, 0xec, 0xe1, 0xd6, 0x67, - 0x96, 0xc1, 0x43, 0xe8, 0xd8, 0xce, 0xdb, 0xc9, 0xbc, 0xa6, 0xdd, 0x1d, - 0xb8, 0x7e, 0x10, 0x21, 0x22, 0x59, 0x6b, 0x1a, 0x68, 0x53, 0x31, 0x3b, - 0x02, 0x65, 0x77, 0x85, 0xdd, 0x44, 0xb6, 0x9f, 0x72, 0xa1, 0xc3, 0x0c, - 0x86, 0x3a, 0x38, 0xf6, 0xf6, 0xe5, 0x12, 0x84, 0x5d, 0x68, 0xb9, 0xba, - 0x0c, 0x02, 0x80, 0xa4, 0x94, 0x5b, 0xed, 0x67, 0x70, 0x32, 0x9e, 0xb1, - 0x26, 0x1f, 0xf6, 0x8a, 0x4f, 0x82, 0x1c, 0xa4, 0x1a, 0xf0, 0xf1, 0xd4, - 0xef, 0xec, 0xee, 0x70, 0x10, 0x1a, 0x57, 0xab, 0x12, 0x7f, 0xd2, 0x48, - 0x57, 0xf2, 0x85, 0xd5, 0xcd, 0x64, 0xca, 0x7d, 0x94, 0x46, 0x1b, 0xc3, - 0xba, 0x6a, 0x0b, 0xe0, 0xc7, 0x2e, 0x08, 0xd9, 0x1b, 0xf8, 0x19, 0xa2, - 0x5c, 0x56, 0xcf, 0xac, 0x42, 0xc5, 0xb2, 0x46, 0xe2, 0xeb, 0x0b, 0xaf, - 0x04, 0x92, 0xe8, 0x15, 0x06, 0x5a, 0x2d, 0xa4, 0xcc, 0x25, 0xd1, 0xd9, - 0x0f, 0x57, 0x82, 0xc8, 0x7e, 0x27, 0x50, 0xc4, 0xca, 0xde, 0x13, 0x61, - 0xb1, 0x52, 0x10, 0xdd, 0x81, 0xc2, 0x2b, 0xbf, 0x0e, 0xfc, 0x5d, 0x34, - 0xde, 0x1c, 0xd6, 0xc0, 0x37, 0x5a, 0x24, 0x21, 0xe4, 0x64, 0x14, 0x28, - 0x44, 0xb5, 0x03, 0xa6, 0x81, 0xd0, 0x42, 0x0e, 0x4d, 0x50, 0x33, 0xac, - 0xb1, 0xe5, 0x83, 0xd1, 0xb4, 0x4d, 0x10, 0xcd, 0x98, 0xe1, 0x86, 0x40, - 0x70, 0xb8, 0xb9, 0x30, 0xb7, 0x97, 0x4e, 0xda, 0xea, 0x1f, 0xcd, 0x19, - 0x57, 0x39, 0x26, 0xcc, 0xa0, 0x13, 0xe9, 0x9c, 0x0c, 0x91, 0x49, 0x40, - 0x77, 0xf5, 0xe3, 0xc6, 0xe1, 0xca, 0x08, 0x5f, 0xbd, 0xd2, 0xd1, 0xa1, - 0x31, 0x03, 0x3c, 0xa6, 0x62, 0xf4, 0x3e, 0x8a, 0x8e, 0xd4, 0x9b, 0x90, - 0x75, 0x19, 0xcc, 0xc8, 0x4c, 0x6d, 0x88, 0x06, 0xb6, 0x35, 0x2b, 0x28, - 0x2f, 0xf3, 0x91, 0x74, 0xe9, 0x77, 0x8b, 0x44, 0x10, 0x30, 0xc2, 0x67, - 0x3d, 0x1c, 0xa8, 0x69, 0x1c, 0xbe, 0x79, 0x65, 0xd5, 0x76, 0x70, 0x7b, - 0x21, 0x01, 0x55, 0xf8, 0xc7, 0xc6, 0x6b, 0x2e, 0x36, 0x8b, 0x91, 0x41, - 0x5c, 0x00, 0x85, 0x52, 0x99, 0x81, 0x48, 0x07, 0xa3, 0x26, 0xdb, 0x70, - 0xd3, 0xa0, 0x47, 0x85, 0x3c, 0x98, 0xe3, 0xa5, 0xb2, 0x95, 0xc6, 0xfa, - 0x8d, 0xb8, 0x2e, 0xc0, 0xf2, 0xcf, 0x2f, 0x91, 0x54, 0x3f, 0x6d, 0x02, - 0xa0, 0xf5, 0xb4, 0x40, 0xf1, 0xe8, 0x8a, 0xd5, 0x71, 0x80, 0x4f, 0x8a, - 0x94, 0x7c, 0x52, 0x4d, 0x89, 0x53, 0x1b, 0x8b, 0xb0, 0x9b, 0x8d, 0x75, - 0xdd, 0xc4, 0x73, 0x58, 0x81, 0x58, 0xaf, 0x71, 0xe1, 0xd3, 0x09, 0xef, - 0x79, 0x10, 0xa9, 0xff, 0x78, 0xbf, 0x9e, 0x19, 0x83, 0xe3, 0x9b, 0x27, - 0x93, 0x61, 0x2b, 0x7e, 0x23, 0x41, 0x64, 0xbe, 0x3b, 0xa8, 0x09, 0xde, - 0x49, 0xa0, 0x63, 0xb7, 0x98, 0xc3, 0x31, 0x00, 0x0f, 0xad, 0xb1, 0x12, - 0xe1, 0xe7, 0xf3, 0xc2, 0xbd, 0xd3, 0x4c, 0x45, 0x6e, 0x56, 0x20, 0x30, - 0x35, 0xb9, 0x52, 0xce, 0x83, 0xab, 0xf3, 0x85, 0x40, 0xd7, 0xc2, 0x5b, - 0x6e, 0x80, 0x1c, 0x0f, 0x00, 0xa4, 0xcc, 0x73, 0x95, 0x38, 0x08, 0xa2, - 0x6e, 0x94, 0x88, 0x2b, 0x90, 0x40, 0x3a, 0x6b, 0x07, 0x45, 0x35, 0x2e, - 0x38, 0x03, 0x22, 0xf7, 0xd6, 0xfe, 0x72, 0xf9, 0xea, 0x57, 0x00, 0x57, - 0xde, 0xe7, 0x83, 0x2b, 0x39, 0x8f, 0x08, 0xed, 0x62, 0xd5, 0x15, 0x6d, - 0x10, 0x2d, 0x04, 0x1b, 0xc2, 0x6e, 0xf6, 0x3a, 0x24, 0x8f, 0x4d, 0x3f, - 0x9b, 0xd8, 0xa0, 0x78, 0x1e, 0x4f, 0x5c, 0x04, 0x05, 0x7a, 0xd2, 0x95, - 0xef, 0x34, 0xc9, 0xf5, 0x9e, 0x15, 0x50, 0xcf, 0x4d, 0x2b, 0x37, 0xbe, - 0x57, 0x7d, 0x9b, 0x8d, 0x8c, 0x0c, 0x68, 0x25, 0xfa, 0x23, 0x5a, 0xdc, - 0xe3, 0xa1, 0x78, 0x96, 0xd1, 0xf9, 0x97, 0x1e, 0xf7, 0x53, 0x15, 0xab, - 0x9b, 0x2e, 0xa1, 0xc1, 0x33, 0xcc, 0x42, 0xd7, 0x81, 0x5c, 0x91, 0x31, - 0xe8, 0xb5, 0x2a, 0x83, 0x59, 0x35, 0xcb, 0x23, 0xc1, 0x4a, 0xc8, 0x3a, - 0x48, 0xed, 0x35, 0xec, 0x64, 0xdd, 0x44, 0xa2, 0x59, 0x6b, 0xc7, 0x7b, - 0xf5, 0x3d, 0x33, 0xd0, 0xba, 0xbe, 0x03, 0x66, 0x0a, 0x5f, 0x6e, 0xa8, - 0x02, 0xe8, 0x87, 0xc9, 0x13, 0xa4, 0xde, 0x4f, 0xd4, 0x0d, 0x6f, 0x8a, - 0x79, 0x0e, 0x1f, 0xc5, 0xbb, 0x4b, 0xf1, 0xe0, 0x3a, 0xe8, 0xce, 0xf2, - 0x4a, 0xe9, 0x06, 0x6e, 0x96, 0xfa, 0xa2, 0x80, 0xbb, 0x43, 0x97, 0x98, - 0x88, 0x43, 0x81, 0xf9, 0x3a, 0xf0, 0xd7, 0xfd, 0xfa, 0xd4, 0x89, 0xb3, - 0x95, 0x1d, 0x36, 0x26, 0x62, 0x22, 0xad, 0xf0, 0xf7, 0xb1, 0x9e, 0x12, - 0x5d, 0xb9, 0xec, 0x7a, 0x1b, 0x54, 0xd0, 0xc4, 0xf1, 0xf0, 0x1e, 0x67, - 0xb7, 0x0c, 0xf3, 0x8c, 0x83, 0x51, 0x2f, 0x58, 0x3f, 0xb2, 0xbe, 0xca, - 0x92, 0x92, 0xb5, 0x34, 0x77, 0xe9, 0x99, 0x6c, 0x56, 0x5e, 0xa5, 0x43, - 0x70, 0xd6, 0xe8, 0x4f, 0x47, 0x25, 0xa8, 0x57, 0x53, 0x56, 0xfc, 0x95, - 0x3b, 0x48, 0xab, 0xaf, 0xf2, 0x82, 0x7a, 0xc5, 0xc3, 0x9d, 0x36, 0x36, - 0x1c, 0xa0, 0x39, 0x82, 0xce, 0x14, 0xfd, 0x81, 0x34, 0x5b, 0x5f, 0xd3, - 0x95, 0x4e, 0x3f, 0x97, 0x0e, 0x76, 0x6e, 0x70, 0xaf, 0x90, 0x99, 0x90, - 0xbe, 0x66, 0xd1, 0x62, 0xeb, 0x0f, 0xcd, 0xf3, 0xff, 0xd8, 0xba, 0xde, - 0xed, 0x86, 0x51, 0x5f, 0xf9, 0x7d, 0xdf, 0xd2, 0x49, 0x48, 0xe2, 0xad, - 0x63, 0xbc, 0x18, 0x37, 0x4d, 0x9f, 0xfe, 0x6a, 0x66, 0x24, 0xc0, 0xfd, - 0xdd, 0x73, 0x5a, 0x6b, 0x44, 0x30, 0x60, 0xfe, 0x0a, 0x10, 0x22, 0x39, - 0xd9, 0x45, 0xbb, 0xb4, 0x2f, 0x4e, 0x09, 0xbe, 0xc2, 0x0c, 0x87, 0x80, - 0x6b, 0xe4, 0x10, 0xb6, 0x86, 0xc5, 0x85, 0x3a, 0x3c, 0x63, 0x10, 0x06, - 0x5e, 0x52, 0xd0, 0xbd, 0xfb, 0xab, 0x52, 0x99, 0x16, 0x6a, 0x86, 0x50, - 0x07, 0xd6, 0x03, 0x77, 0xfb, 0xd2, 0x42, 0xa5, 0xbd, 0xed, 0xc9, 0xe1, - 0x61, 0x44, 0xd1, 0xf6, 0xb5, 0xb5, 0x99, 0xd0, 0x21, 0xe3, 0x91, 0xd8, - 0x50, 0x9f, 0xdb, 0xf5, 0x0a, 0x72, 0xc0, 0xe5, 0x29, 0x2e, 0xea, 0xb8, - 0x43, 0xc6, 0x4d, 0xca, 0x3e, 0xcb, 0x97, 0x93, 0xc4, 0xd3, 0x86, 0xb7, - 0xe7, 0x89, 0xe9, 0x61, 0xb5, 0x5a, 0x46, 0xee, 0x69, 0x62, 0xf5, 0xe9, - 0xd5, 0x70, 0xe8, 0xef, 0xd3, 0xc5, 0x57, 0xdd, 0xe4, 0xa2, 0x51, 0x5e, - 0xf8, 0x94, 0xce, 0x53, 0x82, 0x6c, 0xac, 0xaa, 0xe7, 0x9f, 0xc3, 0x65, - 0xf0, 0x33, 0xce, 0x87, 0x47, 0xa7, 0x53, 0x7c, 0x30, 0x1e, 0x75, 0x0e, - 0xe9, 0xf4, 0x33, 0x98, 0xa8, 0x4b, 0xce, 0x46, 0x04, 0x87, 0xbe, 0xab, - 0x4d, 0x10, 0xfe, 0x1a, 0x3f, 0x72, 0xde, 0xcb, 0x4d, 0x5a, 0x83, 0x9b, - 0x94, 0x64, 0x48, 0xc6, 0x8a, 0x90, 0x70, 0xd7, 0x8a, 0x37, 0x17, 0x61, - 0x75, 0x25, 0x60, 0xb8, 0xe2, 0xb5, 0x71, 0xdd, 0x1a, 0x4f, 0xad, 0x58, - 0x10, 0x71, 0x27, 0x37, 0x50, 0xbc, 0x70, 0xf3, 0x50, 0x6e, 0x4d, 0x26, - 0xd8, 0xba, 0x5d, 0x58, 0xc1, 0x47, 0x67, 0xb2, 0x93, 0x96, 0x03, 0xe9, - 0xb6, 0x37, 0xe4, 0xe3, 0x08, 0x91, 0xa7, 0xe1, 0x9d, 0x3c, 0x76, 0x3d, - 0xe9, 0x71, 0x56, 0x60, 0x4b, 0x6a, 0x85, 0xa7, 0xd7, 0x16, 0x68, 0x31, - 0x7a, 0x72, 0x96, 0x45, 0xbb, 0x78, 0x9b, 0x2f, 0xe0, 0x82, 0x42, 0x61, - 0xd9, 0x91, 0xd2, 0xbe, 0x78, 0xcc, 0xcb, 0xe1, 0x7d, 0xbc, 0xa6, 0x4b, - 0x9b, 0xeb, 0x0f, 0x6f, 0x29, 0x42, 0x33, 0x21, 0xca, 0x0f, 0x6e, 0x6c, - 0x29, 0x33, 0x72, 0x55, 0xf0, 0xf2, 0x70, 0xe3, 0x43, 0x1b, 0x2f, 0x02, - 0xc2, 0xd3, 0x86, 0x43, 0x0e, 0x49, 0x80, 0xaa, 0x1b, 0xb8, 0x64, 0xe3, - 0x99, 0xae, 0x53, 0x60, 0x76, 0xfe, 0x42, 0xf1, 0xaa, 0x95, 0x9a, 0xf4, - 0xed, 0x9d, 0x69, 0x0b, 0x6a, 0xc1, 0xe7, 0x75, 0xf4, 0xeb, 0xda, 0x74, - 0x8d, 0x1b, 0x5f, 0x05, 0x37, 0x5f, 0x1b, 0x1b, 0x26, 0xa7, 0x9d, 0xfd, - 0xcd, 0x3d, 0x76, 0x63, 0x54, 0x8d, 0xca, 0xcb, 0x25, 0x6e, 0xc2, 0x35, - 0xc0, 0x39, 0x15, 0xa7, 0x34, 0xc4, 0x2d, 0x95, 0x8e, 0x23, 0xfe, 0xf2, - 0xd1, 0x02, 0xda, 0x66, 0xc5, 0x8d, 0x7d, 0x39, 0x61, 0x4a, 0xe4, 0xdb, - 0x73, 0x82, 0x39, 0x37, 0xaf, 0xb9, 0x64, 0xd4, 0xf5, 0x10, 0x42, 0xf0, - 0x36, 0x94, 0x0a, 0x27, 0x4b, 0x8a, 0xe6, 0x39, 0x3d, 0x56, 0x07, 0x71, - 0xc7, 0x09, 0xae, 0x40, 0x75, 0xa2, 0xc5, 0x1b, 0x22, 0x6f, 0xf1, 0xcf, - 0xd1, 0x96, 0x6b, 0xe7, 0xd4, 0x98, 0x9e, 0x83, 0x2d, 0x57, 0xf8, 0x88, - 0x7e, 0x4b, 0xb6, 0xc2, 0x40, 0x68, 0xef, 0x2b, 0xdc, 0x5c, 0x0b, 0x57, - 0x70, 0x17, 0x50, 0xce, 0x09, 0x0c, 0xbf, 0xb7, 0x9a, 0x6c, 0x98, 0xd7, - 0x4c, 0x09, 0x78, 0x7a, 0xe7, 0xd5, 0x3b, 0x4d, 0x48, 0x93, 0xf9, 0x05, - 0xe3, 0xf1, 0x6b, 0x70, 0xd2, 0x94, 0x05, 0x86, 0xfc, 0xf1, 0x2c, 0xb8, - 0x76, 0x50, 0x45, 0xd7, 0x30, 0xa3, 0xfe, 0x3c, 0x5e, 0xed, 0x1b, 0x1d, - 0xb3, 0x43, 0xeb, 0xcc, 0x27, 0x38, 0x1b, 0xc3, 0x7a, 0x7a, 0xcc, 0x81, - 0xf9, 0x4a, 0x05, 0xf7, 0x8d, 0xc7, 0x58, 0x32, 0x41, 0xd2, 0xd3, 0x17, - 0xaf, 0x09, 0xb9, 0x07, 0x00, 0x14, 0x2e, 0x12, 0x83, 0x37, 0x58, 0xa3, - 0x51, 0xdb, 0xe5, 0x36, 0xce, 0x06, 0x05, 0xea, 0xc9, 0x69, 0x72, 0xca, - 0x42, 0x92, 0xfa, 0x03, 0x49, 0x1c, 0x0d, 0x22, 0xe3, 0x4d, 0x6d, 0xbe, - 0xb9, 0xa6, 0x0a, 0x91, 0x8f, 0xab, 0x38, 0x63, 0xb1, 0x24, 0x5d, 0x40, - 0x2d, 0xc5, 0x5a, 0x3c, 0xf5, 0xaa, 0x9e, 0x77, 0x3e, 0xee, 0x2d, 0x0d, - 0x8f, 0x55, 0xbe, 0x1e, 0x99, 0xef, 0x7f, 0x25, 0x3d, 0x6f, 0x12, 0x66, - 0xe7, 0xd8, 0xaa, 0x03, 0x92, 0xa8, 0x64, 0x60, 0xe5, 0xb4, 0x6a, 0xd3, - 0xa9, 0x01, 0x23, 0x2d, 0x30, 0x7d, 0x80, 0x6f, 0x4d, 0x03, 0xcc, 0xdc, - 0xb5, 0x0b, 0x24, 0x3f, 0x8b, 0x54, 0x32, 0x80, 0xa4, 0xaf, 0x04, 0xa4, - 0xde, 0x69, 0xe6, 0x5d, 0x0d, 0x72, 0xaa, 0x8c, 0x75, 0x9d, 0xf4, 0xd4, - 0x95, 0x67, 0x44, 0x72, 0xbf, 0xfa, 0x14, 0x65, 0x83, 0xb9, 0xfe, 0x14, - 0xd4, 0x23, 0x5e, 0x7d, 0x9b, 0x45, 0xda, 0xd6, 0xdb, 0xec, 0xdf, 0xb8, - 0x0e, 0x1b, 0xb4, 0x9b, 0x6e, 0x22, 0x35, 0x62, 0xd3, 0xff, 0x1f, 0x81, - 0xf6, 0x0b, 0xcb, 0x65, 0x5d, 0xdb, 0x3a, 0x22, 0x19, 0xff, 0x5a, 0x17, - 0x55, 0x49, 0x3d, 0x84, 0xd5, 0xcb, 0xd8, 0x80, 0x53, 0x2f, 0x22, 0x2e, - 0xa8, 0x18, 0xe1, 0xed, 0xb6, 0xa0, 0x7b, 0x04, 0xd7, 0x12, 0xdf, 0xf5, - 0x62, 0x8d, 0xa9, 0xcf, 0x61, 0x6c, 0x9b, 0x57, 0xaf, 0x10, 0x14, 0x0d, - 0xec, 0x79, 0x0d, 0x36, 0xb9, 0x43, 0x24, 0x0e, 0x8b, 0x33, 0x6a, 0xfa, - 0x82, 0x4d, 0x44, 0xe2, 0xe2, 0x22, 0x9e, 0x7a, 0x21, 0x4a, 0xb0, 0xd0, - 0x3e, 0xb0, 0xd1, 0xe8, 0x6a, 0x0d, 0x55, 0x27, 0x4d, 0xde, 0x99, 0xcb, - 0xdc, 0x02, 0x9d, 0x65, 0x34, 0x8c, 0x68, 0xcc, 0xc2, 0x02, 0xa5, 0xda, - 0x41, 0x84, 0x6b, 0x0e, 0xfa, 0xb8, 0xe0, 0x5e, 0x23, 0x53, 0x07, 0xc6, - 0x93, 0x2f, 0xe6, 0xf7, 0x6f, 0x28, 0xbf, 0x63, 0x28, 0xdd, 0x6b, 0x17, - 0xd2, 0xb0, 0xfb, 0x5f, 0x83, 0x7a, 0x96, 0x03, 0x36, 0x6c, 0x92, 0xd1, - 0x94, 0x54, 0x9f, 0x1c, 0x6b, 0xd9, 0x43, 0x6c, 0xfb, 0x25, 0x9a, 0xff, - 0x2c, 0x55, 0x70, 0xa1, 0x68, 0xf4, 0x73, 0x97, 0x5b, 0x0c, 0xae, 0x58, - 0xc7, 0xd7, 0xde, 0xd3, 0x36, 0xab, 0xc9, 0x15, 0x6f, 0xbf, 0xbc, 0x0e, - 0xc0, 0x88, 0x8f, 0xee, 0x02, 0x0a, 0xa2, 0x0b, 0xf8, 0x5e, 0xbb, 0x6b, - 0x9f, 0xee, 0x1b, 0x73, 0xf7, 0x72, 0xaa, 0x4d, 0x7d, 0x7e, 0x73, 0xe5, - 0xe5, 0xcd, 0xf5, 0x16, 0x41, 0x35, 0xb4, 0x50, 0x6d, 0x08, 0xcf, 0xb4, - 0x5e, 0x8e, 0xc2, 0xcf, 0xfc, 0xb6, 0x87, 0x36, 0x0c, 0xa1, 0x53, 0x89, - 0xeb, 0xdb, 0xae, 0x61, 0x0d, 0xcc, 0x1d, 0x62, 0x54, 0x5f, 0x6c, 0xd2, - 0xa0, 0x99, 0xae, 0xa0, 0xd6, 0x47, 0x88, 0x7d, 0x6c, 0x5f, 0x5c, 0xe9, - 0x83, 0x20, 0x1a, 0x04, 0x35, 0xef, 0x70, 0xd1, 0xcd, 0x9d, 0x4b, 0x7b, - 0xdb, 0xa2, 0x49, 0x1f, 0x88, 0xf7, 0x3b, 0xd0, 0x03, 0x8b, 0x75, 0x2d, - 0x31, 0xe3, 0x9a, 0x1a, 0x5d, 0x28, 0x44, 0x11, 0x1c, 0x8e, 0x7a, 0x22, - 0xd3, 0x2a, 0xcd, 0x77, 0xa2, 0xc3, 0x81, 0x65, 0xfb, 0x83, 0x17, 0x4d, - 0x62, 0xb5, 0x58, 0x06, 0x6c, 0x36, 0xd7, 0x22, 0xf3, 0xcd, 0xfd, 0x4d, - 0x9a, 0xaa, 0x24, 0xee, 0x5c, 0x77, 0x11, 0x9d, 0x66, 0x21, 0xd2, 0x2f, - 0x99, 0x9a, 0x44, 0x46, 0x8b, 0x08, 0x75, 0x45, 0xb6, 0x45, 0xf7, 0x27, - 0x6d, 0xcb, 0x11, 0x4a, 0x2d, 0x9b, 0xda, 0x6a, 0xbe, 0x1d, 0x2f, 0x75, - 0x39, 0xb1, 0x17, 0x04, 0x20, 0x0f, 0xd0, 0x7b, 0xf8, 0x76, 0x17, 0x9d, - 0xa7, 0x23, 0xf2, 0x79, 0x3d, 0x34, 0x3e, 0x9e, 0x93, 0x7e, 0xff, 0x4a, - 0xf1, 0xbb, 0x21, 0x3f, 0x19, 0x0d, 0x1b, 0xad, 0x51, 0xd3, 0xb3, 0xcc, - 0x49, 0x82, 0x1e, 0x58, 0xe8, 0xdf, 0x1b, 0xfe, 0x11, 0xc2, 0xe8, 0x3f, - 0xcb, 0x55, 0x69, 0x30, 0x42, 0x8d, 0x89, 0xcd, 0x6f, 0xc4, 0x04, 0x45, - 0x87, 0xdb, 0x1c, 0xe7, 0xd5, 0x69, 0xdc, 0x57, 0x06, 0xc6, 0x26, 0x04, - 0xec, 0x01, 0xb3, 0x5f, 0x0d, 0x0a, 0xd0, 0xa8, 0x42, 0x69, 0xe7, 0x59, - 0xfe, 0x5a, 0xf8, 0x04, 0xaf, 0xaa, 0x47, 0x63, 0x40, 0x78, 0xaa, 0xbb, - 0xe3, 0x82, 0x2f, 0x9e, 0x51, 0x4d, 0xb8, 0x1b, 0xbf, 0x71, 0x09, 0x78, - 0x8b, 0x37, 0x56, 0xaf, 0x6e, 0x40, 0xd4, 0x61, 0x06, 0x8a, 0xde, 0xd9, - 0xaf, 0xc4, 0x13, 0x55, 0x37, 0x61, 0x50, 0x0b, 0x17, 0x39, 0xaf, 0x3d, - 0x5c, 0x7a, 0x3a, 0xd9, 0x88, 0x75, 0xd6, 0x53, 0x5c, 0xdc, 0x64, 0x30, - 0x90, 0x7d, 0xfa, 0x21, 0xc8, 0x0c, 0x8b, 0xa5, 0x4f, 0xdc, 0xaf, 0xae, - 0x0b, 0x1c, 0x89, 0x3e, 0xca, 0x9a, 0x38, 0x94, 0x09, 0xd4, 0x65, 0x33, - 0x30, 0x21, 0x9a, 0x09, 0x2b, 0x96, 0x26, 0x25, 0xe6, 0x76, 0x87, 0x9b, - 0xc3, 0x08, 0x03, 0x46, 0x4e, 0x9f, 0xb9, 0x85, 0xa2, 0x0b, 0x6c, 0x84, - 0x66, 0xf7, 0x53, 0xdc, 0x49, 0xf1, 0xab, 0x76, 0xe2, 0x14, 0xfb, 0xd1, - 0xbf, 0xac, 0xce, 0x03, 0x6c, 0x73, 0x11, 0x1c, 0x59, 0x77, 0x72, 0xf5, - 0x92, 0x35, 0xf8, 0x8a, 0xe0, 0x80, 0x96, 0xe1, 0xc5, 0xbd, 0x1d, 0xed, - 0x26, 0x27, 0x9d, 0x4f, 0xc1, 0xa8, 0x88, 0xdd, 0x48, 0x1b, 0x31, 0xd3, - 0xc7, 0x70, 0xc7, 0x4e, 0xde, 0x18, 0xe9, 0x7a, 0x6e, 0x50, 0x0a, 0xbc, - 0x35, 0x57, 0x4f, 0x79, 0xed, 0x89, 0x8d, 0x7e, 0x17, 0x2b, 0x91, 0x8b, - 0x68, 0x72, 0xe2, 0x23, 0x9c, 0xaf, 0x3e, 0x6e, 0x48, 0x14, 0xaf, 0x12, - 0xdb, 0xa8, 0x15, 0x8b, 0xa7, 0xba, 0xb9, 0x42, 0x31, 0xa0, 0x68, 0x3b, - 0x60, 0xc3, 0x12, 0x9c, 0x83, 0xeb, 0xf3, 0x91, 0x76, 0x2a, 0x10, 0x93, - 0xb1, 0x8e, 0xf2, 0xc5, 0x31, 0x8c, 0x1b, 0xb2, 0x5b, 0x99, 0x1f, 0x7a, - 0xf6, 0x53, 0x9f, 0xe0, 0xbc, 0x13, 0xa0, 0x19, 0x3e, 0x68, 0x56, 0x10, - 0x45, 0xa7, 0x27, 0xfc, 0xe5, 0x28, 0x05, 0x2d, 0x0e, 0x9e, 0xd3, 0xb4, - 0x37, 0xb8, 0xd4, 0x80, 0x5a, 0xdb, 0x20, 0xf4, 0xcf, 0x2b, 0x73, 0x53, - 0x68, 0x76, 0xfc, 0x70, 0xa4, 0xd1, 0x96, 0x48, 0x9d, 0x3f, 0xe0, 0x90, - 0x26, 0x19, 0xa4, 0x24, 0x74, 0xd9, 0x10, 0xe7, 0xd1, 0x97, 0x48, 0xc2, - 0xd7, 0xd2, 0x82, 0x52, 0x38, 0xfe, 0x4c, 0x4e, 0x9e, 0xf1, 0x4e, 0xdd, - 0x3d, 0x4c, 0xdf, 0xa0, 0xdf, 0x0a, 0x6f, 0x05, 0x27, 0x89, 0x84, 0x1d, - 0x72, 0x70, 0x91, 0xad, 0x68, 0x9d, 0x11, 0x87, 0xdd, 0xb7, 0x43, 0x47, - 0xf3, 0x37, 0x1d, 0x50, 0xdf, 0x0e, 0xde, 0x56, 0x40, 0xa0, 0xa7, 0xc6, - 0x3a, 0x9b, 0xce, 0xcd, 0x41, 0x3d, 0xcc, 0x63, 0xf5, 0xb5, 0x26, 0xf6, - 0xe7, 0xde, 0x91, 0x1e, 0x83, 0xad, 0x43, 0x63, 0xd4, 0xa5, 0x82, 0x7e, - 0x44, 0xe7, 0x70, 0xd0, 0x77, 0x48, 0x37, 0xd2, 0x48, 0x75, 0x77, 0x55, - 0x83, 0xa3, 0xae, 0x58, 0xbd, 0xde, 0x74, 0x41, 0x14, 0xa7, 0xeb, 0x9f, - 0x87, 0xf6, 0xc9, 0xfe, 0xb3, 0x3f, 0x4b, 0x36, 0x2c, 0x6d, 0xfe, 0x77, - 0x40, 0x37, 0x1d, 0x4f, 0xdd, 0x96, 0x06, 0x4b, 0x9b, 0x38, 0xb7, 0x64, - 0xf4, 0xa6, 0xe7, 0xcd, 0x9d, 0x75, 0x85, 0xb4, 0x81, 0x85, 0x7d, 0x3a, - 0x80, 0x9b, 0x55, 0x17, 0x54, 0x7a, 0x81, 0x17, 0x27, 0xfe, 0x22, 0xad, - 0xdb, 0x19, 0xc5, 0x36, 0x27, 0x89, 0x9a, 0x0b, 0x60, 0x66, 0x25, 0x17, - 0x4a, 0x2d, 0x80, 0x7e, 0xfd, 0x81, 0x31, 0x25, 0x39, 0xb9, 0x53, 0x9a, - 0x26, 0x54, 0x0d, 0x22, 0x1c, 0xfc, 0x15, 0xa7, 0xaa, 0x1d, 0x06, 0xdb, - 0xe0, 0x0b, 0xbc, 0xf7, 0x68, 0x6b, 0x73, 0x55, 0x03, 0x74, 0xc0, 0xb5, - 0x6e, 0xe2, 0x79, 0xf0, 0x10, 0xfa, 0xe7, 0xc6, 0xbc, 0xf5, 0xd4, 0xac, - 0x04, 0x48, 0x62, 0x3d, 0xd0, 0x97, 0x13, 0x0f, 0xee, 0x2d, 0x9d, 0xbb, - 0xff, 0x8e, 0x34, 0x7d, 0x39, 0xd1, 0x2f, 0x49, 0xdf, 0xeb, 0xd7, 0x60, - 0x01, 0xbc, 0xda, 0x92, 0xaa, 0x71, 0x89, 0xbb, 0x80, 0x00, 0xbf, 0xfe, - 0xbb, 0x5b, 0x4a, 0x15, 0x6a, 0x4b, 0x16, 0xd8, 0xcb, 0x31, 0x39, 0xfd, - 0xa0, 0xe7, 0x99, 0x05, 0x38, 0x33, 0x47, 0x5c, 0x53, 0xcd, 0xc0, 0x83, - 0xcb, 0xc5, 0x06, 0x16, 0x0f, 0x73, 0x56, 0xb9, 0xe8, 0xee, 0x18, 0xd1, - 0xfe, 0x4b, 0xa0, 0x55, 0x67, 0xa7, 0x81, 0xae, 0x4f, 0x51, 0xcf, 0x22, - 0x9e, 0x62, 0x69, 0xd1, 0xc3, 0xb8, 0x38, 0x0f, 0xf1, 0x00, 0x26, 0x27, - 0xba, 0xb8, 0xb6, 0xc1, 0xf8, 0xd5, 0xf3, 0x75, 0xd6, 0xc9, 0x61, 0x02, - 0xb5, 0x4a, 0x40, 0x2e, 0x6e, 0x3b, 0x88, 0xec, 0xf4, 0xa3, 0x28, 0xff, - 0xb1, 0x81, 0xd9, 0xf3, 0x17, 0x4f, 0x66, 0x3a, 0xef, 0x67, 0xc7, 0xde, - 0x1d, 0xee, 0x8a, 0xfb, 0x07, 0x49, 0xa1, 0x51, 0xf1, 0xe4, 0xb4, 0x09, - 0xd1, 0xce, 0x21, 0x94, 0x6e, 0x75, 0x5c, 0xe8, 0x9b, 0x4a, 0xa3, 0xc2, - 0xbf, 0x27, 0xef, 0xbf, 0xee, 0xdd, 0x83, 0x83, 0xf5, 0x89, 0x8f, 0x23, - 0xf6, 0xf5, 0xb5, 0x2f, 0xef, 0x02, 0xf2, 0x13, 0xaa, 0xb5, 0x16, 0x3e, - 0x9f, 0xae, 0xc4, 0x2b, 0x3d, 0xd5, 0xea, 0xca, 0xc6, 0xa2, 0xed, 0x87, - 0xbb, 0x2e, 0x43, 0x04, 0x94, 0x7d, 0x20, 0x43, 0x95, 0xb1, 0xc9, 0xee, - 0x80, 0xa8, 0xab, 0x65, 0x55, 0xee, 0x47, 0xd8, 0x33, 0xce, 0x4e, 0x34, - 0x38, 0xd5, 0xf1, 0x07, 0x8d, 0x4f, 0xc6, 0x62, 0x31, 0x1c, 0xc4, 0x85, - 0xee, 0x3a, 0xac, 0xe8, 0x01, 0xa3, 0x17, 0x30, 0xaa, 0x78, 0xa0, 0x06, - 0x5e, 0xfd, 0x9a, 0x57, 0x50, 0xff, 0x40, 0xa6, 0xf3, 0x91, 0xf4, 0x74, - 0xcd, 0x73, 0x42, 0x6d, 0xc1, 0x00, 0xca, 0x3e, 0x4c, 0x95, 0xa6, 0x97, - 0x91, 0xfb, 0xd2, 0x32, 0xd1, 0xd5, 0xc7, 0x2b, 0x2f, 0x90, 0x57, 0x2b, - 0x11, 0x76, 0xaf, 0x0f, 0x1a, 0x19, 0x03, 0x60, 0xbe, 0x3e, 0x5c, 0x2f, - 0xb7, 0x4e, 0xd1, 0xf7, 0x13, 0x29, 0x0d, 0xab, 0x94, 0x0f, 0x1c, 0x7d, - 0x1c, 0x45, 0x4c, 0xd1, 0xdb, 0xc0, 0xdc, 0xe4, 0x50, 0xbe, 0xf3, 0x3a, - 0x16, 0x91, 0x6c, 0x54, 0x81, 0xf6, 0x91, 0x18, 0xba, 0x22, 0x7a, 0x4a, - 0x1f, 0x1a, 0x48, 0xbd, 0x09, 0x10, 0x27, 0xd0, 0x04, 0x5c, 0xde, 0xab, - 0x9c, 0x0f, 0xd4, 0xb0, 0x83, 0x68, 0x73, 0x13, 0xdc, 0xfe, 0xa2, 0xcc, - 0x5f, 0x94, 0x57, 0x46, 0x5e, 0xdd, 0xe5, 0xd5, 0xf3, 0x1b, 0x75, 0xc6, - 0xdd, 0x5b, 0x82, 0x96, 0x2f, 0x3d, 0xdd, 0xc7, 0xa2, 0xa7, 0xe7, 0xb7, - 0xeb, 0xc0, 0x57, 0x1a, 0x49, 0xac, 0xf1, 0x0a, 0xcf, 0x7c, 0xd7, 0x89, - 0xeb, 0xec, 0x15, 0xb7, 0xdf, 0x39, 0x99, 0x9c, 0x66, 0xd5, 0x11, 0x22, - 0x2f, 0x61, 0x62, 0x7e, 0xc7, 0x8b, 0xe6, 0x55, 0x48, 0xbd, 0x08, 0x80, - 0x5a, 0x2b, 0x06, 0x5b, 0xdc, 0xc7, 0x9a, 0xe5, 0xb0, 0x25, 0x0f, 0x70, - 0x4b, 0x5e, 0xe7, 0xa4, 0x98, 0x5d, 0xa3, 0x38, 0x56, 0xf5, 0x47, 0x04, - 0x9e, 0xe0, 0xf5, 0xe6, 0xc5, 0x4e, 0x30, 0x34, 0x2a, 0xe7, 0xdd, 0x3f, - 0xa5, 0x74, 0x50, 0x9d, 0x3b, 0x05, 0xf2, 0xc2, 0x36, 0xa0, 0xba, 0xe2, - 0xa6, 0xe0, 0x09, 0x0e, 0xf7, 0xa3, 0xe5, 0x0d, 0x22, 0x1d, 0xcc, 0x07, - 0xc4, 0xdd, 0x1f, 0x4c, 0xb8, 0x1a, 0xca, 0xfa, 0xcc, 0xee, 0x49, 0xb7, - 0x6c, 0x10, 0x54, 0x77, 0x99, 0x03, 0x28, 0x7b, 0xd6, 0xdf, 0xc9, 0xc9, - 0xcc, 0x96, 0xbb, 0xa5, 0x45, 0x0d, 0x67, 0x4b, 0xcc, 0x82, 0xed, 0xa9, - 0xe7, 0xc7, 0xe4, 0x8d, 0x7c, 0xbd, 0x1e, 0x7b, 0x63, 0x69, 0xa5, 0xec, - 0xd3, 0xd8, 0x52, 0x9e, 0x5a, 0xe3, 0x72, 0x5e, 0xf3, 0x30, 0x63, 0xd4, - 0xc2, 0xb6, 0x45, 0xdf, 0xad, 0x87, 0x0b, 0x4c, 0x55, 0x5d, 0x64, 0xd5, - 0x1d, 0x83, 0x5e, 0x0a, 0x1a, 0x78, 0x40, 0x0f, 0x65, 0x8c, 0xef, 0x03, - 0x01, 0xb8, 0x46, 0xb8, 0xc1, 0xaf, 0xe6, 0x7d, 0xac, 0xcd, 0xba, 0x76, - 0x1f, 0x54, 0xf2, 0x65, 0x8d, 0xdd, 0x37, 0x03, 0xa5, 0xc7, 0xe0, 0x95, - 0xb2, 0xd4, 0x48, 0xd4, 0x77, 0x2b, 0xa4, 0x12, 0x56, 0x1a, 0xab, 0x6f, - 0xc2, 0xd5, 0xd8, 0x60, 0xaa, 0xb8, 0xb3, 0xd0, 0x7d, 0xd1, 0x42, 0x80, - 0x00, 0x43, 0xe4, 0xcf, 0xaa, 0x1c, 0xfc, 0xda, 0xea, 0xcf, 0xd6, 0x51, - 0x84, 0x68, 0x05, 0x34, 0x26, 0xb8, 0xa6, 0x65, 0xee, 0x58, 0x86, 0x3e, - 0xea, 0xe4, 0xe9, 0xc3, 0xa1, 0x63, 0xe5, 0x45, 0xf5, 0x49, 0x5f, 0xa0, - 0xe8, 0xe4, 0xea, 0x7d, 0x2a, 0x6a, 0xad, 0xf5, 0x99, 0x56, 0x95, 0xb5, - 0x16, 0x24, 0x6b, 0xfb, 0x22, 0x50, 0x0f, 0x8f, 0xe8, 0x13, 0x30, 0x2c, - 0xc0, 0x55, 0x57, 0xb5, 0xaa, 0x6e, 0xc7, 0x5d, 0x54, 0xd5, 0x41, 0x68, - 0xf6, 0xb8, 0x63, 0xb5, 0x13, 0xfb, 0x4e, 0x3e, 0x15, 0xac, 0x5c, 0x14, - 0x0f, 0xf4, 0x54, 0x30, 0x50, 0x1f, 0xf4, 0x78, 0xa0, 0x86, 0xf6, 0x14, - 0x52, 0x54, 0xb1, 0x91, 0x82, 0xd3, 0xd8, 0x5e, 0x3b, 0xeb, 0xe1, 0xbc, - 0xd4, 0x33, 0xaa, 0x1b, 0x37, 0x01, 0x55, 0x64, 0x87, 0x3b, 0xc7, 0x60, - 0x75, 0x84, 0x49, 0x1b, 0xc2, 0x2d, 0x3d, 0xfc, 0x53, 0x8f, 0xd2, 0x43, - 0xff, 0xf6, 0xe7, 0xee, 0x44, 0xe6, 0x18, 0x2a, 0xa4, 0x96, 0x3a, 0x7d, - 0x2e, 0x1e, 0xd2, 0x47, 0x19, 0xe0, 0x67, 0x1a, 0x2b, 0xb2, 0x52, 0xdd, - 0x9f, 0x3d, 0xbb, 0x72, 0x51, 0x4d, 0xcd, 0x90, 0x6d, 0x0d, 0x0b, 0x9c, - 0x95, 0xb2, 0x0c, 0x9e, 0x2e, 0xb5, 0x57, 0x5c, 0xea, 0xd9, 0x3a, 0x5f, - 0x30, 0x0f, 0x77, 0x65, 0x1c, 0x61, 0xaa, 0x13, 0x80, 0x39, 0x42, 0xda, - 0x43, 0x7d, 0xe9, 0xa9, 0xdd, 0x9b, 0xea, 0x37, 0x7c, 0x82, 0xce, 0xc9, - 0x69, 0xf7, 0xea, 0x9d, 0x40, 0x82, 0xb5, 0xd6, 0x25, 0x82, 0x7f, 0x79, - 0xa5, 0x30, 0x54, 0x51, 0xfb, 0x9b, 0xf7, 0x8d, 0xe6, 0x23, 0x0c, 0xf8, - 0x48, 0xc9, 0xf3, 0x33, 0xa2, 0x19, 0x76, 0xf1, 0xdd, 0x4d, 0xf7, 0x5f, - 0x56, 0x5c, 0xa8, 0xe9, 0xde, 0x6a, 0x6c, 0x30, 0x13, 0x9b, 0xb8, 0x3c, - 0xbb, 0x87, 0xb6, 0x5f, 0x51, 0xb9, 0x6f, 0x65, 0x53, 0xb8, 0x31, 0xaf, - 0x38, 0xa6, 0xf3, 0x64, 0x4e, 0xe5, 0x86, 0x10, 0x9e, 0x3e, 0xa8, 0xa4, - 0x5e, 0xdd, 0x0d, 0xfa, 0xde, 0x96, 0x43, 0xcf, 0x9d, 0x24, 0xc3, 0x37, - 0x00, 0x52, 0x2f, 0x08, 0x14, 0x5e, 0x81, 0x3d, 0x00, 0x97, 0x1a, 0x4c, - 0x90, 0xe2, 0xac, 0xab, 0x86, 0x31, 0xd2, 0xea, 0xc7, 0x18, 0x2b, 0x8f, - 0x2c, 0x06, 0xf5, 0x21, 0x98, 0x98, 0x47, 0x71, 0x4e, 0x4c, 0x19, 0xb9, - 0x16, 0xca, 0xe2, 0xa7, 0x72, 0xa0, 0xe9, 0xe6, 0xe5, 0x49, 0xa0, 0xa1, - 0xd1, 0x8f, 0x59, 0x80, 0xee, 0x91, 0x6a, 0xd6, 0xbb, 0xf4, 0x60, 0x4c, - 0x0f, 0xed, 0x7f, 0x00, 0xbc, 0x3e, 0xca, 0xbc, 0x87, 0xc9, 0xf8, 0x07, - 0xdf, 0x51, 0x19, 0xcc, 0x91, 0xf4, 0x85, 0x3f, 0x2b, 0xb5, 0xd0, 0xd8, - 0xf4, 0x06, 0xa3, 0xfb, 0x68, 0xbc, 0xe0, 0x58, 0x47, 0x5e, 0x91, 0x97, - 0xaf, 0xd7, 0x24, 0xa2, 0x34, 0x80, 0x32, 0x51, 0xaf, 0x5d, 0x91, 0xbe, - 0x34, 0x97, 0xc2, 0x4d, 0x15, 0x4f, 0x11, 0xd6, 0x71, 0x52, 0xbd, 0x02, - 0x14, 0x30, 0xeb, 0xe9, 0xeb, 0x96, 0x75, 0xdc, 0xa6, 0xa9, 0xc3, 0xb6, - 0x0c, 0xb0, 0xd7, 0x89, 0xd5, 0x55, 0x2b, 0x1d, 0xa9, 0xef, 0x10, 0x96, - 0x47, 0xff, 0x02, 0x56, 0xca, 0xed, 0x52, 0x5c, 0x6f, 0xcf, 0xb0, 0xf5, - 0xf6, 0x0b, 0x3f, 0x61, 0xbb, 0xd1, 0x8a, 0x31, 0x81, 0x46, 0x54, 0x47, - 0xa5, 0x41, 0x2f, 0x0a, 0xc3, 0x71, 0xdc, 0xd6, 0x98, 0xfb, 0xd4, 0xc2, - 0x7a, 0xba, 0x19, 0x1d, 0xc1, 0x5c, 0x95, 0xb6, 0x2d, 0x32, 0xc9, 0x46, - 0x29, 0x4d, 0xd9, 0x0c, 0xbe, 0x7a, 0x0a, 0x74, 0x01, 0x8c, 0x60, 0x72, - 0xa2, 0x5f, 0xc2, 0xba, 0x04, 0xa0, 0xf2, 0x11, 0x07, 0x03, 0x32, 0x73, - 0x6e, 0xab, 0x99, 0x9e, 0xf9, 0x33, 0x16, 0x88, 0x54, 0xe6, 0xca, 0xe5, - 0x92, 0xf2, 0xc5, 0xcb, 0xc9, 0xe0, 0x15, 0x0d, 0x78, 0x0a, 0xa6, 0x6f, - 0xa6, 0x3b, 0xaf, 0x6b, 0x84, 0x3b, 0x13, 0xbf, 0x3c, 0x5a, 0xee, 0x82, - 0x29, 0xea, 0x15, 0x04, 0x55, 0x2c, 0x81, 0xe3, 0x85, 0x99, 0xaa, 0xab, - 0x27, 0x46, 0x9d, 0x39, 0x78, 0x5f, 0x64, 0x16, 0x9e, 0xaf, 0x6d, 0xa3, - 0x9a, 0x0e, 0x9b, 0x64, 0x3f, 0xc2, 0x27, 0x97, 0xa3, 0x02, 0xd7, 0x53, - 0x74, 0xdd, 0xa1, 0x79, 0xe9, 0x49, 0xdc, 0x6a, 0x8b, 0x7c, 0x6b, 0x03, - 0x45, 0x70, 0x39, 0x98, 0xe8, 0x94, 0x03, 0x7b, 0x55, 0x71, 0x2e, 0x82, - 0xad, 0x32, 0xd1, 0x20, 0x9c, 0x5f, 0xdd, 0x53, 0xed, 0xf9, 0x83, 0xdd, - 0xfa, 0xfe, 0x7d, 0x51, 0xff, 0x04, 0xc3, 0x4f, 0x5c, 0x23, 0x87, 0x3d, - 0xca, 0x87, 0xda, 0x48, 0x99, 0x75, 0xdf, 0x32, 0x51, 0x08, 0xa0, 0xc0, - 0x36, 0x45, 0xea, 0x5d, 0x76, 0x69, 0x93, 0xa4, 0x54, 0x4e, 0x8e, 0xbf, - 0x7f, 0x3c, 0x35, 0x99, 0x2e, 0xb9, 0xc0, 0x11, 0x3b, 0x68, 0x0e, 0x5a, - 0x04, 0xeb, 0x05, 0x9b, 0xcf, 0x4a, 0x42, 0x54, 0xd3, 0xe2, 0xa6, 0xb2, - 0x80, 0xbc, 0x86, 0x15, 0x09, 0x63, 0xa0, 0xb5, 0x07, 0xbd, 0xc6, 0xfd, - 0xe1, 0xc0, 0xde, 0xe1, 0x18, 0x78, 0x7a, 0xa7, 0xea, 0xd0, 0xd3, 0xcb, - 0x7d, 0xcf, 0x2a, 0x2b, 0x25, 0x46, 0xe2, 0xbd, 0x3a, 0x28, 0xd7, 0x56, - 0x25, 0xb5, 0x3e, 0x7b, 0xbd, 0x30, 0xdc, 0xca, 0xc6, 0xb1, 0x67, 0xbb, - 0x73, 0xf2, 0xe5, 0xc9, 0xfc, 0xb6, 0xb9, 0xab, 0xea, 0xfa, 0x9b, 0x0f, - 0xef, 0x7d, 0x41, 0x3d, 0x02, 0xc0, 0x18, 0x86, 0xde, 0x17, 0x7d, 0xd4, - 0x7b, 0x53, 0xa5, 0x78, 0x73, 0x21, 0x10, 0xb6, 0x0e, 0x2b, 0x3b, 0x52, - 0x13, 0x58, 0x98, 0x33, 0xf3, 0x85, 0x0b, 0xef, 0xa0, 0x7c, 0x61, 0xbe, - 0x78, 0x4e, 0xcd, 0xec, 0xb6, 0xec, 0x39, 0xe9, 0xe2, 0x16, 0x40, 0x4a, - 0x25, 0x58, 0x0f, 0x8d, 0x4f, 0x20, 0xfe, 0xd8, 0x40, 0xca, 0xa0, 0xd8, - 0x55, 0xdb, 0xb3, 0x97, 0x97, 0x6f, 0x7e, 0x80, 0x72, 0x11, 0x18, 0x20, - 0x86, 0x20, 0x83, 0xff, 0x52, 0x1e, 0x90, 0x11, 0xc0, 0x29, 0xde, 0x5e, - 0xe2, 0x0d, 0x49, 0xdd, 0x06, 0x68, 0xd8, 0x0e, 0x40, 0x57, 0xee, 0x02, - 0x55, 0x97, 0x30, 0x0d, 0x2a, 0xd9, 0x46, 0x37, 0xd1, 0x77, 0xf3, 0xe4, - 0x23, 0x98, 0x21, 0x68, 0xf7, 0x11, 0xe2, 0x5e, 0xab, 0xae, 0x02, 0xd4, - 0xef, 0xb9, 0x32, 0xe4, 0xf1, 0xaa, 0xce, 0x82, 0xb4, 0x02, 0x75, 0xa3, - 0x71, 0xed, 0x77, 0x17, 0xd8, 0x04, 0x5b, 0x6d, 0x74, 0xb6, 0xfb, 0x52, - 0x9b, 0x98, 0x97, 0x8b, 0x9e, 0x1a, 0xea, 0x01, 0x60, 0xa1, 0x68, 0x11, - 0xf6, 0xbc, 0x5e, 0x2e, 0x79, 0x70, 0x95, 0x53, 0xe2, 0xa1, 0x18, 0x07, - 0xaa, 0xdf, 0xb1, 0x11, 0x0b, 0x70, 0x99, 0x0b, 0x05, 0x99, 0x18, 0x43, - 0xb0, 0x23, 0xab, 0x85, 0xf1, 0xda, 0xec, 0x65, 0x56, 0x5a, 0x31, 0xb3, - 0xe7, 0x67, 0x7a, 0xf0, 0xab, 0xd8, 0xed, 0xd1, 0xec, 0x55, 0x2f, 0x22, - 0x70, 0x6c, 0x9d, 0x32, 0x87, 0xa5, 0xc0, 0xba, 0x91, 0xac, 0xda, 0xad, - 0x64, 0x11, 0xce, 0x4e, 0x29, 0x1c, 0xce, 0xec, 0x1a, 0xb0, 0x1a, 0xcb, - 0x65, 0xdb, 0xea, 0xeb, 0xad, 0xb5, 0xaf, 0xa0, 0x0a, 0x3e, 0x3a, 0x93, - 0x45, 0xb8, 0x2e, 0x5c, 0xdd, 0x2a, 0x93, 0x68, 0xd6, 0x4f, 0x5f, 0x32, - 0xf5, 0x0a, 0xa4, 0x3a, 0x6b, 0x20, 0x56, 0x21, 0xe6, 0xb5, 0x15, 0xaf, - 0x21, 0xc9, 0xf4, 0x58, 0x14, 0x6a, 0xe5, 0xb9, 0x7a, 0xfa, 0xd9, 0xa8, - 0xec, 0xb9, 0x88, 0x70, 0x66, 0x3f, 0x6b, 0x52, 0x35, 0x6f, 0x8c, 0x67, - 0xf3, 0x39, 0xd1, 0xbc, 0x0d, 0x9f, 0xba, 0xf5, 0x4f, 0xdd, 0x0e, 0x95, - 0x43, 0x99, 0x2e, 0x5e, 0x11, 0x55, 0x99, 0xc6, 0x19, 0xcf, 0x5c, 0xb6, - 0x6e, 0x3a, 0x6d, 0xe0, 0xd4, 0x8a, 0x8d, 0x97, 0xa7, 0xa2, 0xaa, 0x59, - 0xd5, 0xa2, 0xfc, 0x98, 0x29, 0x81, 0x17, 0xab, 0xa1, 0xa8, 0xab, 0x82, - 0x7c, 0x9d, 0x87, 0xb7, 0xaa, 0x0c, 0x0c, 0xd4, 0x05, 0x1e, 0xf3, 0xc4, - 0x47, 0xd5, 0x53, 0x2f, 0xe3, 0xd0, 0xa5, 0x4d, 0x02, 0xae, 0x13, 0xd4, - 0x86, 0x2a, 0x97, 0xa5, 0xf1, 0xd4, 0x7a, 0x0d, 0x80, 0x8e, 0x09, 0x00, - 0x5e, 0x8a, 0x6b, 0x22, 0x89, 0xd1, 0x91, 0xcb, 0x8e, 0x55, 0xb5, 0xdc, - 0x98, 0x32, 0xa8, 0xcf, 0xfc, 0x0c, 0xb5, 0x55, 0x1f, 0x62, 0x16, 0x4f, - 0xee, 0x2d, 0x59, 0xb0, 0x06, 0x7a, 0x38, 0x88, 0xa5, 0x44, 0x31, 0xfe, - 0xf3, 0xbf, 0x7e, 0x94, 0x0f, 0x58, 0x42, 0x5b, 0x46, 0x03, 0x5f, 0xc2, - 0x4d, 0x45, 0x6e, 0xa0, 0xcc, 0x2d, 0x46, 0x9f, 0x87, 0x19, 0xaa, 0x53, - 0x0f, 0xdf, 0xc5, 0x4f, 0x6d, 0x03, 0x42, 0x1d, 0xe8, 0x43, 0xc2, 0x27, - 0x3b, 0xaa, 0x8c, 0x1e, 0xcb, 0x37, 0x4a, 0x9d, 0x89, 0x7e, 0x2b, 0xbb, - 0x7d, 0xa2, 0xca, 0x33, 0xe0, 0x94, 0x86, 0x84, 0x92, 0x50, 0x11, 0x61, - 0xe2, 0xad, 0x7d, 0x31, 0x99, 0xbc, 0x9a, 0x96, 0xa4, 0xb7, 0x79, 0x9e, - 0x96, 0xc1, 0x93, 0x45, 0x4b, 0x2a, 0xed, 0x6c, 0x61, 0x85, 0xa3, 0x23, - 0xff, 0xa0, 0xd5, 0x7d, 0x57, 0xf7, 0x51, 0xb5, 0x17, 0x58, 0x4f, 0xc7, - 0x6c, 0xea, 0x70, 0xce, 0xa6, 0xb6, 0x83, 0x36, 0xb5, 0x73, 0xac, 0xf5, - 0x7e, 0xd0, 0xe6, 0x25, 0xe7, 0x7c, 0x9b, 0x12, 0xfb, 0x41, 0xc0, 0x14, - 0xd4, 0x5d, 0x24, 0x5b, 0xa9, 0x01, 0xd9, 0x13, 0x8b, 0x85, 0xd1, 0x5e, - 0xc0, 0x7a, 0x7d, 0xb2, 0x7e, 0x51, 0x53, 0x4a, 0xa2, 0x00, 0xcf, 0x86, - 0x78, 0xb8, 0x95, 0xc8, 0x15, 0xb7, 0x03, 0x7b, 0x81, 0xac, 0x29, 0xaa, - 0xcb, 0xaa, 0x0d, 0x4d, 0x80, 0xa1, 0xad, 0x18, 0x67, 0x5d, 0xaa, 0x72, - 0xcd, 0x61, 0x71, 0x5f, 0x1e, 0x58, 0x9b, 0x4d, 0x19, 0x86, 0x41, 0xd2, - 0x16, 0xb0, 0x4b, 0xd2, 0x40, 0x6a, 0x25, 0x8e, 0x9a, 0x67, 0x35, 0x98, - 0xb6, 0xbf, 0x58, 0x71, 0x80, 0x85, 0xe4, 0x4b, 0x4f, 0x79, 0x64, 0xef, - 0xea, 0x47, 0x8b, 0x2d, 0x1b, 0xaf, 0xde, 0x56, 0xd8, 0x55, 0x34, 0xd7, - 0xc7, 0xc4, 0xcf, 0xdc, 0x3c, 0xf2, 0x6d, 0xfc, 0x82, 0x2d, 0xd6, 0x35, - 0xac, 0x0c, 0xbe, 0xdd, 0xff, 0xd6, 0x7b, 0x52, 0x32, 0x4d, 0xbe, 0xc9, - 0x6e, 0x8c, 0xa4, 0xba, 0xc5, 0xed, 0x1a, 0x16, 0xb7, 0x01, 0x54, 0xcf, - 0x36, 0xf9, 0x7b, 0xcb, 0x1c, 0x83, 0x90, 0xbc, 0x96, 0x21, 0xd4, 0x68, - 0x97, 0x05, 0xb6, 0x12, 0x8c, 0x24, 0xde, 0x64, 0x2b, 0x18, 0x93, 0x5f, - 0x83, 0x61, 0x08, 0xbc, 0xca, 0xea, 0x14, 0x89, 0xb7, 0x9b, 0xa2, 0xa6, - 0x51, 0xfc, 0xea, 0xa4, 0xea, 0x99, 0x68, 0x13, 0x39, 0xed, 0xe0, 0xea, - 0xa0, 0x30, 0x9e, 0xfe, 0xe6, 0x6b, 0xfc, 0x6a, 0x95, 0x52, 0xf9, 0xc4, - 0xaa, 0x11, 0xa1, 0x72, 0xb6, 0x7c, 0x6a, 0x8a, 0x32, 0x13, 0xf6, 0x2f, - 0xac, 0x9d, 0x7e, 0xb1, 0xce, 0x47, 0x95, 0xd1, 0x1a, 0x2b, 0x8f, 0x59, - 0x54, 0xaa, 0x0d, 0xc0, 0xd6, 0x71, 0xc4, 0xc4, 0xc9, 0x9b, 0x3d, 0x7d, - 0x82, 0x1d, 0x79, 0xfc, 0xf6, 0x0c, 0x78, 0xeb, 0x9c, 0xb1, 0x01, 0xbc, - 0x8d, 0x9f, 0x90, 0x4d, 0x3b, 0x15, 0xb8, 0x00, 0xa3, 0x39, 0x94, 0xb0, - 0x7e, 0x66, 0xe8, 0xee, 0x94, 0x96, 0x66, 0xd4, 0x53, 0x38, 0xb3, 0x0e, - 0xbf, 0xdc, 0x33, 0xb4, 0xac, 0xa3, 0x51, 0xc8, 0x8d, 0xe6, 0x9a, 0x6a, - 0x63, 0xfb, 0x6f, 0x6b, 0xba, 0x8d, 0x8c, 0x87, 0xe2, 0x3e, 0x4f, 0xaf, - 0xf5, 0x97, 0xbe, 0x14, 0xf1, 0xcb, 0xf7, 0xa0, 0x71, 0x07, 0xdc, 0x23, - 0xb5, 0x5f, 0x7d, 0xd0, 0x2c, 0xd4, 0xaa, 0xf7, 0xee, 0x48, 0x4c, 0xfc, - 0xde, 0x87, 0x28, 0x72, 0x45, 0x9f, 0xb9, 0xe9, 0xf9, 0xec, 0x01, 0x10, - 0x2b, 0xef, 0x8b, 0xdb, 0x47, 0xa8, 0xd2, 0x75, 0xc7, 0xe5, 0x72, 0x93, - 0x93, 0x47, 0x52, 0x1a, 0x6c, 0x3e, 0xac, 0x05, 0x25, 0xc1, 0xbd, 0x06, - 0xcc, 0xcd, 0xf1, 0x68, 0x48, 0x51, 0x52, 0xe4, 0x00, 0xd9, 0xb7, 0xe4, - 0x2e, 0xf3, 0x75, 0x4c, 0x5d, 0x1d, 0xd4, 0xb3, 0xc9, 0x3e, 0x82, 0xb6, - 0xf9, 0x6c, 0xe3, 0x3c, 0x80, 0xd8, 0xd4, 0x0a, 0x5c, 0x03, 0x1e, 0x21, - 0x66, 0x80, 0xdb, 0x26, 0x55, 0x75, 0xe0, 0xd0, 0x49, 0x24, 0xd3, 0x26, - 0x1c, 0xc6, 0x78, 0xe6, 0x56, 0x7f, 0xeb, 0xdb, 0x8a, 0xce, 0xa3, 0x7c, - 0xeb, 0xe9, 0xfa, 0x7c, 0x84, 0x5e, 0x9f, 0x0d, 0xb6, 0x95, 0x4d, 0xc3, - 0x3a, 0xaf, 0x00, 0x24, 0x7f, 0x5a, 0xa3, 0x2a, 0x92, 0x1f, 0x41, 0x7a, - 0xf1, 0xfb, 0x46, 0x1a, 0xc1, 0xdc, 0x1d, 0x5f, 0x4e, 0xe2, 0xb7, 0xd7, - 0xf8, 0x9b, 0x17, 0x8e, 0x21, 0xcd, 0x5d, 0x88, 0x24, 0x82, 0x03, 0xaa, - 0x86, 0x17, 0xad, 0xdf, 0x94, 0xe4, 0x5e, 0x52, 0xe5, 0x99, 0x15, 0xa2, - 0xe8, 0x83, 0x80, 0xc3, 0x04, 0x54, 0x63, 0x22, 0x74, 0xeb, 0x3b, 0x7e, - 0x29, 0x93, 0xdb, 0x3c, 0xfb, 0xa1, 0x32, 0x23, 0x88, 0x5a, 0x9f, 0x9a, - 0xd9, 0x4a, 0xe1, 0x36, 0x49, 0x29, 0x5c, 0x2f, 0x28, 0x98, 0x6b, 0xb7, - 0x05, 0x67, 0x72, 0x36, 0xf7, 0x58, 0xb5, 0x68, 0x43, 0xf6, 0x6b, 0x1e, - 0xb9, 0xd7, 0xe7, 0x9a, 0xf6, 0x81, 0xa1, 0xbc, 0x4e, 0x06, 0x2a, 0xc1, - 0xc1, 0x7a, 0x04, 0xfb, 0x3e, 0xf4, 0x2e, 0xe5, 0x64, 0xfa, 0x4f, 0xac, - 0x27, 0x51, 0xe2, 0x6f, 0x49, 0x56, 0xec, 0x4b, 0x03, 0x5f, 0x30, 0x5f, - 0xc4, 0xe0, 0xf4, 0x79, 0x73, 0xab, 0x6a, 0x9a, 0x7d, 0x14, 0x37, 0x2c, - 0x0e, 0xd0, 0x7f, 0x71, 0x01, 0xad, 0x48, 0x3c, 0x0e, 0xc9, 0xc2, 0x68, - 0x76, 0x3a, 0xd4, 0xe0, 0x79, 0xbc, 0xc2, 0xb9, 0xe2, 0x28, 0x21, 0x09, - 0xcd, 0x4c, 0x57, 0x58, 0xa4, 0x6f, 0xf5, 0x06, 0xb8, 0xd7, 0x81, 0xe0, - 0xbc, 0x08, 0x8c, 0xf5, 0xfe, 0xab, 0xcc, 0xe1, 0xc3, 0x7f, 0x69, 0x1a, - 0x0b, 0xc4, 0x57, 0x1c, 0x01, 0x4b, 0xce, 0x34, 0x8f, 0xd2, 0x50, 0x68, - 0xb0, 0xd7, 0x39, 0xea, 0x29, 0x2c, 0xb7, 0xe6, 0x71, 0x1e, 0x7e, 0xe8, - 0x11, 0xb8, 0xa5, 0x7f, 0xc3, 0x5b, 0x10, 0xbd, 0xd0, 0x86, 0x30, 0x42, - 0xf7, 0xbf, 0xb5, 0x5f, 0x6b, 0xf2, 0x52, 0x75, 0xd8, 0x9c, 0xbd, 0xed, - 0xcd, 0xf1, 0x49, 0x18, 0x8a, 0x4a, 0xbe, 0x24, 0x11, 0xde, 0xbc, 0xe3, - 0x20, 0xf2, 0xd1, 0x6d, 0x59, 0x08, 0xa8, 0x1e, 0xe5, 0x8b, 0x34, 0xfb, - 0x63, 0x7d, 0x03, 0x0e, 0x31, 0x01, 0x0e, 0xfc, 0x71, 0x2c, 0xc3, 0x8b, - 0x38, 0xbe, 0x30, 0xad, 0xda, 0x87, 0x91, 0x29, 0x73, 0x10, 0x4f, 0x77, - 0x88, 0x0b, 0x45, 0x52, 0x58, 0xa1, 0x60, 0xc5, 0x89, 0x78, 0x91, 0x08, - 0xa5, 0xc9, 0x55, 0xc1, 0xf1, 0x5b, 0x9e, 0x1d, 0x12, 0xcc, 0x3f, 0x8e, - 0xa2, 0xa7, 0x35, 0x28, 0x49, 0x14, 0x28, 0xb2, 0xd3, 0x60, 0x6c, 0xf1, - 0x00, 0xfb, 0x50, 0x0a, 0xf8, 0x59, 0x52, 0x43, 0xbe, 0x5c, 0xc4, 0xab, - 0xe5, 0xa7, 0x06, 0xd6, 0x8e, 0x5a, 0x12, 0xaa, 0x77, 0xfc, 0x94, 0xa2, - 0xa0, 0x61, 0x04, 0x2b, 0xc2, 0x6a, 0x18, 0xce, 0x78, 0x1e, 0x6d, 0xcf, - 0xe4, 0x34, 0xfb, 0xb7, 0x6c, 0xcf, 0xe8, 0x06, 0x25, 0x31, 0xe8, 0x4e, - 0x03, 0x23, 0xde, 0x35, 0x1d, 0xd7, 0xda, 0xae, 0x9f, 0x1e, 0xb8, 0xda, - 0xb8, 0xd4, 0xd1, 0xd8, 0xf4, 0x8e, 0x9b, 0x1a, 0x56, 0x98, 0x11, 0xc2, - 0xe9, 0x89, 0x49, 0xe4, 0x15, 0xfc, 0xd0, 0x12, 0x60, 0x15, 0x49, 0x61, - 0x2a, 0x57, 0x42, 0x0c, 0x2c, 0x1f, 0x28, 0x28, 0xaa, 0x07, 0x13, 0x54, - 0x4a, 0x60, 0xff, 0xab, 0xc2, 0xf8, 0xc8, 0xcd, 0x69, 0x11, 0x8d, 0x1a, - 0x7b, 0x5c, 0xb4, 0xb9, 0x6d, 0xd4, 0xfa, 0x96, 0x70, 0xa4, 0xbe, 0x07, - 0x89, 0xcb, 0x7a, 0x01, 0xf5, 0x3a, 0xc3, 0xba, 0xb9, 0xfc, 0x71, 0xdc, - 0x78, 0xe9, 0x04, 0x29, 0xab, 0x84, 0x80, 0xef, 0x26, 0x1c, 0x32, 0x50, - 0x29, 0xea, 0xcb, 0x22, 0xc7, 0xcd, 0x85, 0xd4, 0xe3, 0x66, 0xd3, 0x98, - 0x5d, 0x2f, 0xb7, 0x4b, 0x2e, 0x89, 0x15, 0xcd, 0x9c, 0x9d, 0xb4, 0xef, - 0x3f, 0x6e, 0x91, 0xa0, 0xa6, 0x6b, 0x2d, 0xc8, 0x88, 0xbd, 0x61, 0xd0, - 0x82, 0xa4, 0x46, 0xa1, 0x43, 0x79, 0x78, 0xbc, 0x36, 0x3d, 0x25, 0xc4, - 0xb8, 0x69, 0xa9, 0x7a, 0x34, 0x23, 0x9d, 0x80, 0x5f, 0x6b, 0xcc, 0xba, - 0xfc, 0xe6, 0x08, 0xa3, 0xf1, 0x15, 0x38, 0x88, 0x68, 0xcf, 0xa4, 0xe7, - 0x7d, 0xba, 0xce, 0xfe, 0x59, 0x64, 0xbc, 0xb5, 0x1d, 0x1b, 0xd5, 0x30, - 0x5b, 0x5a, 0x37, 0x57, 0x86, 0x21, 0x6a, 0x8e, 0xec, 0xed, 0x74, 0x16, - 0x55, 0x2e, 0xe5, 0x91, 0xf4, 0x3a, 0xe5, 0x67, 0xf8, 0x57, 0xe5, 0xfe, - 0x40, 0xdd, 0x80, 0x59, 0x6c, 0x68, 0xa8, 0x32, 0x1f, 0x8d, 0x59, 0x9f, - 0x41, 0xb7, 0xe1, 0x13, 0x8b, 0x76, 0x1f, 0xaf, 0x72, 0x7e, 0xbc, 0x01, - 0xf4, 0x77, 0xf0, 0xf4, 0xeb, 0x9e, 0x62, 0x95, 0xd6, 0x50, 0x74, 0x03, - 0x01, 0x15, 0x7f, 0x6e, 0xef, 0x63, 0xa6, 0xa3, 0x56, 0x03, 0xac, 0xf8, - 0xb3, 0x4d, 0x88, 0xb5, 0x4e, 0xf9, 0x51, 0x9b, 0xf8, 0x50, 0xe4, 0xfb, - 0xf8, 0xa2, 0xe8, 0x47, 0x42, 0xf2, 0xa7, 0x70, 0xb1, 0xe5, 0xb0, 0xbf, - 0x36, 0xb6, 0x1c, 0x93, 0xc4, 0x04, 0xd0, 0xd0, 0xc0, 0x3b, 0x26, 0xdd, - 0x71, 0x8d, 0xaa, 0x7a, 0x5c, 0x26, 0xab, 0x88, 0x55, 0x20, 0xde, 0x31, - 0x38, 0xde, 0x1e, 0x6f, 0xbc, 0xd5, 0x46, 0xd6, 0x7f, 0xc0, 0xa4, 0xad, - 0x46, 0x40, 0xcf, 0x6f, 0xc1, 0xee, 0xb9, 0x0c, 0xee, 0x65, 0xfc, 0xe1, - 0xc0, 0xb6, 0xb9, 0x72, 0xc7, 0x58, 0x9a, 0x71, 0x06, 0x7d, 0xb9, 0x75, - 0xeb, 0xfe, 0x4b, 0x73, 0xc9, 0xee, 0xe5, 0x3b, 0x5f, 0x23, 0xd6, 0x34, - 0x78, 0xbc, 0xdf, 0x17, 0xbf, 0x7d, 0xd8, 0x98, 0x47, 0x10, 0x2a, 0x2b, - 0x08, 0x29, 0xcd, 0x8f, 0x47, 0x81, 0x95, 0xbc, 0x78, 0xeb, 0xc9, 0xe7, - 0xf2, 0xb0, 0xa1, 0x4b, 0xb7, 0x38, 0x81, 0xd3, 0x7d, 0xd6, 0xcd, 0xcf, - 0x82, 0xab, 0x3c, 0x3c, 0xe0, 0xe5, 0xa5, 0xe9, 0x1a, 0x60, 0xa5, 0x1d, - 0xce, 0x40, 0x83, 0x7f, 0xad, 0xb6, 0x2a, 0xe2, 0xc1, 0x08, 0x78, 0xe3, - 0x5a, 0x2e, 0x0c, 0x72, 0x2d, 0xb8, 0x8a, 0x53, 0xe1, 0xfd, 0x47, 0xb0, - 0xf1, 0xe2, 0x36, 0x5e, 0x19, 0x4f, 0x1e, 0xfb, 0x69, 0x91, 0xaa, 0x6d, - 0xc3, 0x69, 0xf9, 0x50, 0x94, 0x1a, 0x1c, 0x3c, 0xe4, 0x02, 0x3b, 0x6c, - 0x71, 0x91, 0x3b, 0x78, 0x5c, 0x96, 0x97, 0xae, 0xfa, 0x5c, 0xaa, 0xd2, - 0x83, 0xbe, 0x3c, 0x87, 0x8b, 0x6b, 0x3b, 0x02, 0x56, 0xdd, 0x57, 0xe0, - 0x90, 0xcb, 0x63, 0x2d, 0x92, 0x32, 0x4a, 0xbe, 0xc6, 0xef, 0x7b, 0x7a, - 0x5d, 0x96, 0xc8, 0x7b, 0x71, 0x1f, 0xc7, 0xb9, 0x9d, 0x67, 0x34, 0xd6, - 0xfa, 0xcd, 0x66, 0x3f, 0x9c, 0x2c, 0xce, 0xfc, 0x7f, 0x46, 0xac, 0xde, - 0xca, 0x78, 0xeb, 0x81, 0x86, 0xba, 0x08, 0x6e, 0xe9, 0x09, 0x80, 0xf5, - 0xd9, 0x08, 0x04, 0x58, 0xe9, 0xbf, 0xc0, 0x5e, 0x5b, 0x6a, 0x08, 0x43, - 0xa7, 0xc3, 0x37, 0x45, 0x24, 0x30, 0x8b, 0x76, 0x8f, 0x01, 0x31, 0x1f, - 0x23, 0xf5, 0x9f, 0xf6, 0x14, 0xf4, 0xe5, 0x75, 0xe6, 0x32, 0x29, 0xbe, - 0x4b, 0x92, 0xbe, 0x0e, 0xba, 0xf0, 0x49, 0x2e, 0xd2, 0x20, 0x02, 0x98, - 0x1f, 0x5c, 0x70, 0x02, 0xd4, 0x74, 0x9b, 0xe8, 0x35, 0xdf, 0x3a, 0xd2, - 0xcf, 0x36, 0x06, 0x4d, 0x68, 0x97, 0x97, 0xeb, 0xd4, 0x15, 0xcc, 0xc1, - 0x6d, 0xba, 0xad, 0xb5, 0x41, 0xd5, 0x5c, 0x67, 0x22, 0x43, 0x70, 0x0f, - 0xaf, 0x87, 0x74, 0xf5, 0xa4, 0x5e, 0x79, 0x6c, 0x56, 0x74, 0x56, 0xcc, - 0x57, 0xdf, 0x42, 0x74, 0x94, 0x1d, 0xd5, 0xa0, 0xfe, 0x1e, 0x26, 0x3a, - 0xc5, 0x63, 0x39, 0x22, 0xb0, 0xe8, 0x10, 0xae, 0x54, 0xba, 0x01, 0xdd, - 0x22, 0x93, 0xaf, 0x8a, 0xe7, 0x39, 0xcd, 0x3a, 0xa6, 0x43, 0x1c, 0x56, - 0x25, 0xc9, 0xe8, 0xb8, 0x34, 0xa1, 0xb6, 0x66, 0x08, 0xf7, 0x40, 0x73, - 0xba, 0x0b, 0xe0, 0x2c, 0xa7, 0x7f, 0x05, 0x0e, 0x3f, 0xf9, 0x2d, 0xf9, - 0xe0, 0xca, 0x95, 0x7a, 0x66, 0x80, 0x9e, 0x8e, 0xf9, 0x7b, 0xd8, 0xf2, - 0x30, 0x7e, 0x99, 0x82, 0x7a, 0xce, 0x2d, 0x2d, 0xf1, 0x30, 0x56, 0x7b, - 0xb8, 0x63, 0x2a, 0x5f, 0x0d, 0xb4, 0xdc, 0xc3, 0xb5, 0x17, 0xfe, 0xf5, - 0x80, 0x3f, 0x8e, 0x78, 0xd1, 0x86, 0x21, 0x08, 0x54, 0x57, 0xaf, 0x46, - 0x8d, 0x69, 0x2f, 0xe7, 0xd7, 0xcb, 0x4f, 0xf6, 0x0f, 0xcc, 0xf8, 0xab, - 0x0d, 0x41, 0x3d, 0x99, 0xc6, 0xcf, 0x38, 0xe0, 0xf6, 0x39, 0x73, 0xa3, - 0xff, 0xd9, 0xaf, 0x40, 0x1e, 0xb9, 0x1e, 0x7c, 0xf0, 0xc3, 0x1b, 0x36, - 0xc8, 0xed, 0x63, 0x0c, 0xb8, 0x13, 0xa2, 0x35, 0x07, 0xe7, 0xdb, 0xaf, - 0xab, 0x95, 0xe5, 0xf0, 0xe3, 0x3a, 0x14, 0xad, 0x31, 0x69, 0x88, 0x3b, - 0x38, 0x59, 0xee, 0x19, 0x5d, 0x22, 0x35, 0xeb, 0x1d, 0x77, 0x3a, 0x5c, - 0xe3, 0xd7, 0xbb, 0x4d, 0x11, 0x87, 0x31, 0xa2, 0xb9, 0x2c, 0x63, 0x7c, - 0xeb, 0x90, 0xd2, 0x75, 0xc7, 0xa8, 0xdd, 0xde, 0xdf, 0x87, 0x73, 0xc9, - 0x72, 0xc0, 0x75, 0xd9, 0x2d, 0xe3, 0x69, 0x4c, 0xb7, 0x9c, 0x5e, 0xe7, - 0xa6, 0xf4, 0xe8, 0x70, 0x2c, 0x1d, 0xf5, 0x1c, 0x5a, 0x6b, 0xf2, 0x5a, - 0x9e, 0x69, 0xe6, 0x7b, 0x6d, 0x8c, 0xcd, 0xb0, 0x4f, 0xb8, 0xc5, 0x65, - 0x5c, 0xbe, 0x4a, 0x5f, 0x03, 0x7c, 0x81, 0xc2, 0x7d, 0x8f, 0xa8, 0xd4, - 0xa4, 0x4a, 0x82, 0x6b, 0x89, 0x04, 0x0e, 0x6d, 0x64, 0x03, 0x7e, 0x7b, - 0xfe, 0x94, 0x34, 0x9c, 0xb0, 0x25, 0x9f, 0xbe, 0x1c, 0xe0, 0x10, 0x4d, - 0x0b, 0xae, 0x44, 0xea, 0x4a, 0xde, 0x5b, 0x0b, 0x8d, 0xe5, 0x73, 0xc0, - 0x12, 0xb5, 0xf3, 0x68, 0x03, 0x9e, 0xc3, 0xf6, 0x8d, 0xd0, 0x3c, 0xf6, - 0xcf, 0x3a, 0x4e, 0xa7, 0x1a, 0xcc, 0xe1, 0xa3, 0xdb, 0x84, 0x02, 0x31, - 0xa8, 0x1b, 0x6c, 0x52, 0xb1, 0x98, 0x6e, 0x69, 0xba, 0x2a, 0x21, 0x42, - 0x1e, 0xd7, 0xcd, 0x55, 0x44, 0x80, 0x2e, 0x08, 0x32, 0x9c, 0x4d, 0xb4, - 0x6b, 0xfd, 0x2b, 0xae, 0x55, 0x7e, 0xb4, 0x17, 0x96, 0x61, 0x08, 0xc5, - 0x05, 0x51, 0xd1, 0x7c, 0x6f, 0xe9, 0x85, 0xb2, 0x2a, 0xc3, 0x8f, 0xc3, - 0x40, 0x7a, 0x83, 0xcd, 0xfe, 0x1a, 0xbd, 0xaa, 0x71, 0x98, 0x81, 0x0f, - 0x30, 0x47, 0x32, 0xb7, 0x1c, 0xce, 0x47, 0x75, 0x27, 0x9b, 0x78, 0xf9, - 0xfd, 0x5a, 0xe0, 0xbe, 0x55, 0x00, 0xb7, 0x79, 0xfc, 0x8c, 0x79, 0x5a, - 0x7c, 0x48, 0x33, 0xb8, 0x69, 0xa5, 0x15, 0xf8, 0xfa, 0xf4, 0x75, 0x31, - 0x30, 0xee, 0xb5, 0xb4, 0x66, 0x1e, 0x38, 0xf2, 0xf7, 0x36, 0xfb, 0xce, - 0x9f, 0xc3, 0xf5, 0xda, 0x92, 0x1f, 0x6c, 0x2f, 0x68, 0x38, 0x61, 0x76, - 0x2d, 0xfc, 0x8d, 0x0a, 0xd7, 0x7e, 0x89, 0x55, 0x19, 0xc3, 0xb9, 0x45, - 0x06, 0x63, 0x5f, 0xcf, 0x7c, 0x85, 0xae, 0x80, 0xa6, 0x2b, 0x7f, 0xdc, - 0x94, 0x4a, 0x98, 0xea, 0x9a, 0x3c, 0x97, 0xca, 0xa1, 0x12, 0xbd, 0x1d, - 0x63, 0xf3, 0x32, 0x4e, 0x39, 0x70, 0xf4, 0xe4, 0x1d, 0xe9, 0xd6, 0x7f, - 0x56, 0x81, 0xa6, 0xeb, 0x93, 0x7d, 0x7f, 0x6a, 0x83, 0xa3, 0xd0, 0xac, - 0xb7, 0xd3, 0xfd, 0x9e, 0x4e, 0xdf, 0x93, 0x90, 0x83, 0x1e, 0x5e, 0x5a, - 0xda, 0x00, 0xc8, 0xa3, 0x4e, 0xfb, 0xc0, 0x62, 0xd2, 0xed, 0x31, 0x6c, - 0x59, 0x99, 0x95, 0xfe, 0x8b, 0xd3, 0x6f, 0x07, 0x06, 0x84, 0x6b, 0x13, - 0x55, 0x52, 0xd1, 0xa8, 0x96, 0xca, 0xd0, 0x89, 0x9b, 0x30, 0xf2, 0x4c, - 0x51, 0xc3, 0xcd, 0x23, 0x2e, 0x0f, 0x8d, 0x73, 0x30, 0xe6, 0xf0, 0xc3, - 0x25, 0x23, 0xfd, 0xf8, 0x83, 0x35, 0x76, 0xf7, 0xf8, 0x53, 0x61, 0x68, - 0xbb, 0x77, 0x3c, 0xe1, 0x10, 0x2f, 0x4a, 0x29, 0x9d, 0x94, 0xc6, 0x12, - 0x88, 0xfc, 0x65, 0xa1, 0x8f, 0xe0, 0x6b, 0x56, 0x56, 0xdf, 0xb1, 0x1a, - 0xe6, 0x63, 0x19, 0x0c, 0x53, 0x0d, 0x79, 0xe1, 0xa6, 0x2b, 0x01, 0x1e, - 0xde, 0x3e, 0x6d, 0xea, 0xb4, 0x07, 0x5c, 0xb2, 0x07, 0x0b, 0xe0, 0x4d, - 0xd9, 0x70, 0x99, 0x04, 0x0e, 0x8d, 0xc9, 0xf7, 0x7e, 0x32, 0x0a, 0x4c, - 0x49, 0x11, 0x97, 0x60, 0x54, 0xba, 0x3b, 0x97, 0xdc, 0x44, 0x47, 0xef, - 0xaf, 0x53, 0xb7, 0x72, 0x47, 0xa7, 0xc1, 0x82, 0xbb, 0x97, 0xa9, 0x95, - 0x93, 0xe1, 0x97, 0x92, 0x84, 0x0b, 0x74, 0x22, 0x7c, 0x13, 0xaf, 0x7b, - 0x13, 0xbd, 0x1f, 0xbd, 0x16, 0x3f, 0x78, 0xbe, 0x7a, 0x1d, 0xca, 0xc2, - 0x5d, 0x86, 0x7e, 0xc4, 0x84, 0xe5, 0x93, 0x64, 0xf7, 0xa0, 0xa5, 0x18, - 0x52, 0x8d, 0xae, 0x8f, 0x05, 0x8b, 0x15, 0x5e, 0x08, 0x60, 0x06, 0x19, - 0xf7, 0x91, 0x6f, 0x22, 0xed, 0x1e, 0xa7, 0x60, 0x94, 0x61, 0x81, 0xe3, - 0xdb, 0x6d, 0xe6, 0xa3, 0x8e, 0xca, 0xc0, 0x3a, 0x86, 0xe3, 0xf5, 0xe6, - 0x51, 0xb8, 0x58, 0x6e, 0x40, 0x7d, 0xcc, 0xe3, 0xa3, 0x12, 0x30, 0xaa, - 0xc4, 0x3c, 0x27, 0x09, 0x2a, 0x4f, 0xd9, 0xaf, 0xe5, 0xcb, 0x52, 0xbf, - 0x11, 0xf5, 0xc2, 0x01, 0xc4, 0x81, 0x84, 0x4a, 0xb5, 0x67, 0xf1, 0xef, - 0x69, 0x76, 0x29, 0xe5, 0xe9, 0x6a, 0x71, 0x40, 0xc5, 0x5f, 0x2d, 0x6c, - 0x3b, 0xcf, 0xb9, 0xec, 0x47, 0x7c, 0x08, 0x2e, 0xfb, 0xfc, 0xc5, 0x69, - 0xb2, 0xa5, 0xbb, 0xb8, 0xf0, 0xf1, 0xfc, 0xbc, 0xd2, 0xea, 0xfd, 0x20, - 0x6e, 0x21, 0xac, 0x4f, 0x1d, 0xbd, 0x02, 0x47, 0xbd, 0x0d, 0xd6, 0x0c, - 0xeb, 0x94, 0x1b, 0x65, 0xaa, 0xe7, 0xc5, 0xdf, 0xc1, 0x0d, 0x49, 0xd1, - 0x63, 0xcc, 0x32, 0x37, 0x03, 0x70, 0xef, 0x2d, 0x12, 0xcc, 0xd1, 0x25, - 0x8c, 0x60, 0xbd, 0x52, 0xe3, 0x6e, 0x0b, 0x5c, 0xb8, 0x3e, 0xfc, 0x8c, - 0x09, 0x51, 0x15, 0xb6, 0x01, 0xb6, 0xff, 0x40, 0x4b, 0x11, 0x2a, 0x8d, - 0xc6, 0x44, 0x71, 0x60, 0x03, 0x79, 0xed, 0x5e, 0x2d, 0xe1, 0x10, 0x05, - 0xc2, 0x73, 0xc5, 0x38, 0xbd, 0x38, 0x2e, 0x79, 0xe8, 0x7e, 0x66, 0x9b, - 0xaa, 0xaa, 0x1c, 0x67, 0x2a, 0x8a, 0x1d, 0x97, 0x7f, 0xf9, 0xc0, 0x31, - 0x67, 0x49, 0xb2, 0xd2, 0x64, 0x33, 0xea, 0xbd, 0x34, 0xe8, 0xb0, 0x56, - 0xee, 0x0e, 0x03, 0xec, 0x35, 0x5f, 0xac, 0x77, 0x98, 0xce, 0xa8, 0x96, - 0xfc, 0x9b, 0xe7, 0x10, 0xc9, 0xfe, 0xd5, 0x6a, 0x95, 0x01, 0x99, 0x58, - 0x77, 0x10, 0x1f, 0xf6, 0xef, 0xd1, 0x1b, 0x04, 0xb1, 0xbe, 0xe9, 0xdf, - 0xa1, 0x6d, 0x7c, 0x79, 0x55, 0x01, 0xa5, 0x16, 0xf0, 0x71, 0xc1, 0x8d, - 0x0d, 0x9a, 0x9b, 0x0a, 0x85, 0x95, 0x44, 0x58, 0x1e, 0x9c, 0x3c, 0xe2, - 0x25, 0xb9, 0x24, 0x8e, 0xde, 0xf3, 0x28, 0xe1, 0xf8, 0x98, 0xf7, 0xde, - 0x84, 0x82, 0xf5, 0xee, 0x03, 0x4b, 0x0a, 0xa9, 0x21, 0xa5, 0x64, 0x99, - 0x6d, 0x0e, 0x5a, 0x66, 0x35, 0xe0, 0xc6, 0x44, 0xf2, 0x71, 0x4c, 0x74, - 0xf5, 0x68, 0x34, 0x22, 0xd8, 0x24, 0x07, 0xf3, 0xf2, 0xc9, 0xb3, 0xb7, - 0xb1, 0x55, 0xdc, 0x49, 0x1c, 0xa3, 0xdc, 0x1b, 0x49, 0xc1, 0xf4, 0xb6, - 0xbb, 0x7b, 0x72, 0x71, 0x2d, 0x99, 0xc2, 0xd1, 0xe0, 0x6b, 0x3d, 0x58, - 0x2d, 0x43, 0x9f, 0xb0, 0x1c, 0x3f, 0x2d, 0x84, 0xd7, 0xa4, 0x14, 0x78, - 0x67, 0x63, 0x44, 0xe7, 0x0f, 0x1a, 0x8c, 0x44, 0xfb, 0x0d, 0x46, 0x04, - 0xd9, 0x3d, 0xe8, 0xc6, 0xd2, 0x40, 0xe1, 0xb8, 0x3f, 0x55, 0xad, 0x42, - 0x29, 0x18, 0x48, 0xab, 0xac, 0x40, 0x3f, 0x3a, 0x26, 0x63, 0x30, 0x4d, - 0xab, 0x17, 0xd2, 0x2b, 0x41, 0xff, 0xad, 0x36, 0xd8, 0x12, 0x17, 0xf7, - 0xa5, 0x03, 0xbe, 0x2e, 0x1e, 0x58, 0x2a, 0x8f, 0x90, 0x3f, 0x81, 0x87, - 0x31, 0x04, 0x96, 0x17, 0xff, 0xb2, 0x1e, 0xd2, 0xac, 0xb9, 0x21, 0x56, - 0x20, 0x50, 0x72, 0x43, 0x9f, 0x39, 0x88, 0xee, 0x84, 0xbd, 0xaa, 0xe2, - 0x56, 0x37, 0x99, 0x3d, 0x00, 0x2e, 0xf5, 0xe1, 0xf3, 0xe1, 0xd7, 0x61, - 0x22, 0xa4, 0xbe, 0xc1, 0x04, 0xbe, 0x79, 0x73, 0x1f, 0x07, 0x16, 0xf0, - 0x09, 0x79, 0xa7, 0x62, 0xef, 0x57, 0xa8, 0x4e, 0x70, 0x40, 0x17, 0x29, - 0x64, 0xc2, 0x35, 0x77, 0x51, 0x6a, 0xcd, 0xee, 0x76, 0xd8, 0xfc, 0x46, - 0xdd, 0xe0, 0x7a, 0xc4, 0xc7, 0xae, 0x47, 0xc5, 0xf1, 0xf6, 0xa1, 0xf0, - 0xf2, 0x65, 0x19, 0x97, 0x16, 0xf2, 0x65, 0xc7, 0x75, 0x6b, 0x03, 0x9b, - 0xc7, 0x89, 0x44, 0xbe, 0xd4, 0x63, 0xef, 0xdc, 0xfd, 0x3e, 0x2b, 0xe3, - 0x84, 0x4a, 0x83, 0x2e, 0x45, 0xe4, 0x6d, 0x1a, 0xc3, 0xde, 0x28, 0xcb, - 0x0d, 0x3c, 0x94, 0x65, 0xd8, 0x62, 0x60, 0x51, 0xf0, 0x3a, 0xf4, 0xf0, - 0xb9, 0x78, 0x03, 0xa2, 0xd9, 0x40, 0x17, 0x52, 0x85, 0xe3, 0x3b, 0x3b, - 0xe7, 0xad, 0x2e, 0x97, 0xf1, 0x47, 0xaf, 0x3f, 0x18, 0x51, 0x76, 0x17, - 0x48, 0xf2, 0x8f, 0x77, 0x43, 0x30, 0x24, 0xe6, 0x79, 0xbf, 0x4d, 0x0f, - 0xda, 0xee, 0x05, 0x5a, 0x35, 0x41, 0x85, 0x25, 0x2e, 0x5f, 0x7e, 0x23, - 0x63, 0xc3, 0x74, 0x88, 0x37, 0x10, 0x52, 0x83, 0x36, 0xf9, 0xb7, 0x31, - 0xa3, 0xaf, 0x8f, 0x80, 0x3e, 0xd4, 0xa8, 0x77, 0x29, 0x42, 0xd1, 0x06, - 0x36, 0xbf, 0x42, 0x29, 0x50, 0x0a, 0xef, 0x35, 0xd6, 0x8f, 0x36, 0x9b, - 0x7c, 0xb4, 0x60, 0xd1, 0xb9, 0xf5, 0x4f, 0xdc, 0xd2, 0xcd, 0xfa, 0x27, - 0xd5, 0x15, 0x98, 0xa4, 0x39, 0xfa, 0x3a, 0x5b, 0xb0, 0x2d, 0x40, 0x58, - 0x23, 0x64, 0x7d, 0xc5, 0xd5, 0x39, 0x26, 0x4c, 0xaa, 0x86, 0xc0, 0x4c, - 0x48, 0x55, 0xd6, 0xe2, 0x5c, 0x84, 0x4a, 0xc2, 0xad, 0x52, 0xc8, 0x75, - 0xde, 0xab, 0x47, 0x06, 0x7b, 0xbe, 0xab, 0xa6, 0x39, 0xdb, 0xe2, 0x6d, - 0x6b, 0xf3, 0xfe, 0x40, 0xb6, 0xb7, 0x8d, 0xe6, 0xb4, 0xca, 0x07, 0xd5, - 0x09, 0x40, 0xb7, 0x41, 0x54, 0xd0, 0x29, 0x60, 0xd0, 0xbd, 0xd1, 0xde, - 0xa6, 0x3b, 0xd7, 0x72, 0xc7, 0x5c, 0xf6, 0x2b, 0x76, 0x58, 0xc8, 0x99, - 0xe0, 0x88, 0x4d, 0xb3, 0x72, 0x62, 0xe2, 0x4b, 0x60, 0x54, 0xf2, 0xfa, - 0x87, 0x89, 0x68, 0x4b, 0xba, 0xfb, 0xb0, 0xe2, 0xd0, 0x3b, 0xda, 0x0d, - 0xc7, 0x13, 0xd7, 0xbd, 0x35, 0x6f, 0x1c, 0x3d, 0xbd, 0xce, 0x9b, 0x6a, - 0xae, 0x31, 0x11, 0xd5, 0x9c, 0x4b, 0xe4, 0x23, 0x70, 0x4b, 0x5e, 0xc9, - 0x38, 0x6f, 0xe6, 0xf0, 0xda, 0x52, 0x96, 0xc7, 0x21, 0xd3, 0xd8, 0x7b, - 0xeb, 0xc5, 0x1b, 0xd3, 0x12, 0xea, 0xfc, 0xfc, 0xd7, 0x61, 0x7c, 0x7d, - 0xae, 0x63, 0x6f, 0x6d, 0x2e, 0x35, 0x0d, 0x91, 0xd5, 0xf4, 0x27, 0xba, - 0xef, 0xd9, 0xfb, 0x32, 0xcb, 0xfa, 0x76, 0x89, 0x26, 0xb8, 0xb2, 0x48, - 0x68, 0x1a, 0x84, 0x71, 0x97, 0x79, 0x04, 0x21, 0xe2, 0x2a, 0xc7, 0x8a, - 0x8b, 0xca, 0x52, 0x23, 0x3e, 0xe1, 0x4f, 0xe0, 0x6b, 0x24, 0xa8, 0x4c, - 0x92, 0x3b, 0xb9, 0x53, 0x4f, 0xd0, 0x06, 0x3f, 0x43, 0x3e, 0xd3, 0x2a, - 0xe9, 0x92, 0xfc, 0xd8, 0x14, 0x98, 0x48, 0xbf, 0x90, 0xc2, 0x4c, 0xc3, - 0x32, 0x42, 0x49, 0xb1, 0x26, 0x5b, 0xfc, 0x00, 0x05, 0xd1, 0xd0, 0x3f, - 0x94, 0xd4, 0xeb, 0x15, 0x76, 0x74, 0xbb, 0xaf, 0xa8, 0x65, 0xa5, 0xaf, - 0x4d, 0x61, 0x83, 0x32, 0x9a, 0x06, 0x71, 0x4b, 0xbb, 0x0f, 0x06, 0xd8, - 0x48, 0x6b, 0x9e, 0xb3, 0x2a, 0xb5, 0x65, 0x2d, 0xec, 0x66, 0xfa, 0x5b, - 0x64, 0xda, 0x6b, 0xf9, 0xa8, 0x3e, 0x52, 0x15, 0xef, 0xce, 0x41, 0xf9, - 0x49, 0xfb, 0x24, 0x87, 0x1d, 0x67, 0x2a, 0xfc, 0xed, 0x7d, 0x7a, 0x6d, - 0xe1, 0x5a, 0xe7, 0xd2, 0x8f, 0xf5, 0xd3, 0xe1, 0xe8, 0x53, 0x62, 0xcc, - 0x7c, 0x6e, 0x1e, 0x22, 0xf0, 0x2b, 0x90, 0xb7, 0xa7, 0x61, 0xa5, 0x04, - 0x0d, 0xc3, 0xfb, 0x74, 0x87, 0x51, 0x07, 0xd4, 0x64, 0x5a, 0x88, 0x60, - 0xbc, 0xc2, 0xef, 0xe9, 0x8a, 0x33, 0xb7, 0xca, 0xf0, 0xc6, 0xb4, 0xf7, - 0xbc, 0x91, 0xec, 0x5d, 0xd4, 0xda, 0x79, 0xc5, 0xa6, 0x7f, 0x44, 0x7a, - 0x44, 0x47, 0xb4, 0xa3, 0x2c, 0xd5, 0x5b, 0xec, 0xe3, 0xaa, 0x13, 0x98, - 0x63, 0x18, 0x5a, 0xf6, 0xb4, 0xb9, 0xff, 0xff, 0xda, 0xf2, 0xbb, 0x09, - 0x9b, 0x3e, 0xfd, 0xc2, 0xba, 0xce, 0x3c, 0x38, 0x93, 0xf1, 0xa8, 0xfc, - 0xb5, 0xb7, 0x7f, 0xe0, 0x93, 0x47, 0x95, 0x00, 0xec, 0x6d, 0x2d, 0xda, - 0x5a, 0xaa, 0xfd, 0xa3, 0x74, 0x7f, 0xb9, 0x81, 0x7e, 0x23, 0x77, 0x67, - 0x14, 0x1e, 0xee, 0x87, 0x08, 0x77, 0xaf, 0x9b, 0x38, 0x30, 0xd5, 0x2e, - 0x6b, 0x11, 0xdb, 0x87, 0x70, 0x72, 0xcd, 0x9f, 0x87, 0xb1, 0xb4, 0x0e, - 0x86, 0x7a, 0xf8, 0x2d, 0xc0, 0xdf, 0xa9, 0x34, 0xd0, 0xf2, 0x52, 0xd7, - 0xb6, 0x18, 0x88, 0xc9, 0xb0, 0x2c, 0xad, 0x83, 0xba, 0x88, 0xb6, 0x7b, - 0x3d, 0x0d, 0xbb, 0xb2, 0x40, 0xcd, 0xc8, 0xa7, 0x31, 0x9b, 0x37, 0xc2, - 0xd1, 0x3c, 0x60, 0xe7, 0x86, 0xb4, 0x76, 0xcb, 0x80, 0xce, 0x78, 0xf6, - 0xba, 0x1a, 0x08, 0xd0, 0x1f, 0x1b, 0x17, 0xe6, 0xd4, 0x4e, 0x89, 0x1b, - 0xae, 0x3e, 0x14, 0xc6, 0xd1, 0x41, 0xa1, 0xd3, 0x09, 0x41, 0x39, 0xd5, - 0xb9, 0xad, 0x4c, 0x34, 0xd6, 0xe3, 0x75, 0xb6, 0x85, 0x2f, 0xfe, 0xcf, - 0xcb, 0xde, 0xea, 0xc5, 0x7d, 0xa7, 0x11, 0x0f, 0x2f, 0xf6, 0x97, 0xe6, - 0x1a, 0x93, 0x14, 0xe2, 0xfe, 0x43, 0xd6, 0x6c, 0x81, 0xda, 0x5b, 0x0d, - 0x68, 0x17, 0x5a, 0x8c, 0x27, 0x2a, 0x3a, 0xda, 0xfd, 0xa4, 0x18, 0xe3, - 0xbc, 0x57, 0xe0, 0xbe, 0x0d, 0x6c, 0xcc, 0xb1, 0x5c, 0x25, 0x31, 0x19, - 0xba, 0xc7, 0xcb, 0x06, 0xbd, 0xc8, 0x88, 0xc2, 0x71, 0x7b, 0x36, 0x57, - 0x40, 0x77, 0x7e, 0xf5, 0xa6, 0x77, 0x6c, 0x30, 0x44, 0x7f, 0x1d, 0xb3, - 0xc5, 0xe2, 0xf1, 0x0c, 0xfb, 0xac, 0x7d, 0xc0, 0x0a, 0x26, 0x5e, 0xfc, - 0xac, 0x1a, 0xac, 0x2b, 0x15, 0xa1, 0xaa, 0xe0, 0x8f, 0x2a, 0x89, 0xae, - 0xde, 0x04, 0x6d, 0xd2, 0x7d, 0x97, 0xec, 0x6b, 0xda, 0x5a, 0x47, 0x47, - 0x1c, 0x11, 0x57, 0x5c, 0xb6, 0xa2, 0x52, 0xae, 0xb0, 0x84, 0xbb, 0x36, - 0xd8, 0x96, 0xd6, 0x6a, 0xfa, 0x51, 0x18, 0xcf, 0x32, 0x6b, 0xd2, 0x5c, - 0xe7, 0x3e, 0xec, 0xd4, 0xe1, 0xc8, 0xb6, 0x73, 0x9e, 0x9e, 0xb9, 0xaa, - 0xa6, 0xd7, 0xc1, 0xf3, 0xe2, 0x5f, 0x09, 0xad, 0xc3, 0xab, 0xc0, 0x26, - 0x61, 0x1f, 0xc0, 0x5d, 0xaa, 0x06, 0x5a, 0x03, 0x1a, 0x44, 0x6b, 0xf6, - 0xe6, 0xce, 0x35, 0xd8, 0x01, 0x46, 0xa4, 0x65, 0x7a, 0x26, 0x49, 0xdd, - 0x50, 0xf4, 0xda, 0x97, 0xa3, 0x6d, 0x5a, 0x0d, 0xfc, 0xa7, 0xf1, 0xe7, - 0x5d, 0xb1, 0x5a, 0x7c, 0xda, 0x0f, 0xb0, 0xc7, 0x4c, 0xac, 0x31, 0xd1, - 0x70, 0xdd, 0xc1, 0x43, 0xd1, 0xf1, 0x24, 0xa0, 0xf9, 0xbc, 0x59, 0x57, - 0xd1, 0xe3, 0x3a, 0xd8, 0x96, 0xa1, 0xec, 0xa0, 0x00, 0x70, 0xe6, 0x58, - 0x53, 0x6d, 0xf4, 0xf0, 0xcf, 0xc6, 0x1e, 0xb6, 0xbe, 0x3b, 0x56, 0xae, - 0x08, 0x5a, 0xfc, 0x3c, 0x36, 0x72, 0x5c, 0x8e, 0x95, 0x8b, 0x66, 0x91, - 0xfa, 0x63, 0xd5, 0x6a, 0xe8, 0x81, 0x0b, 0x65, 0x8a, 0xa6, 0x7a, 0x47, - 0xb9, 0x38, 0xc1, 0xbc, 0xb3, 0xc5, 0x29, 0xbe, 0xa6, 0x8e, 0x7f, 0xc7, - 0xdf, 0x54, 0x0c, 0x07, 0x0b, 0x84, 0x6e, 0xdf, 0x93, 0x5f, 0x12, 0x02, - 0xb8, 0xfb, 0xe6, 0x9e, 0x90, 0xf7, 0x0b, 0xdf, 0x49, 0x82, 0xc3, 0x77, - 0x9f, 0xfc, 0x7f, 0xf7, 0x99, 0x10, 0x61, 0x6f, 0xc0, 0x62, 0xbd, 0x97, - 0xc0, 0x3d, 0xdb, 0xd8, 0x3d, 0xad, 0xa9, 0x71, 0x25, 0xd0, 0x38, 0x0a, - 0x7e, 0x9b, 0xec, 0x11, 0x83, 0xcb, 0xf7, 0x7c, 0x55, 0x87, 0x4a, 0x10, - 0xf9, 0xf2, 0x8d, 0x59, 0x9e, 0x27, 0x03, 0xa6, 0xa7, 0x86, 0x0f, 0x16, - 0xff, 0x3b, 0xf2, 0x65, 0xec, 0xeb, 0xde, 0x0a, 0x8e, 0x47, 0x41, 0xd6, - 0x8e, 0x22, 0x64, 0x2a, 0x95, 0x19, 0x99, 0x55, 0x52, 0xa1, 0x4d, 0x21, - 0xe4, 0xb3, 0xd8, 0x5f, 0xea, 0x07, 0x1f, 0xd7, 0x2b, 0xf7, 0x84, 0xaf, - 0xd7, 0x74, 0xb3, 0x16, 0xc4, 0xfe, 0xc3, 0xb0, 0xb4, 0xc6, 0x81, 0x74, - 0xaa, 0x0c, 0x88, 0x31, 0x93, 0x36, 0x43, 0x37, 0x62, 0x95, 0x46, 0xc1, - 0x96, 0x69, 0x64, 0xbb, 0x26, 0x81, 0x78, 0x0f, 0x6a, 0xf6, 0x35, 0xec, - 0x2b, 0x37, 0xc3, 0x9a, 0x87, 0x71, 0x67, 0x0c, 0xdc, 0x67, 0x51, 0x8f, - 0xf5, 0x9c, 0xa7, 0x5f, 0x2a, 0x6a, 0x43, 0x33, 0xa4, 0x38, 0x49, 0x01, - 0x3e, 0xa2, 0x55, 0xbb, 0x82, 0x40, 0x4e, 0x8f, 0x12, 0xd4, 0xfd, 0xf2, - 0x1e, 0x73, 0xd2, 0x43, 0x11, 0x1e, 0x7e, 0x13, 0x40, 0x40, 0x05, 0x15, - 0xf3, 0x4a, 0x28, 0xc3, 0xc5, 0xb7, 0x7d, 0xc5, 0xf5, 0x1b, 0x47, 0x28, - 0xc9, 0x1f, 0x7e, 0x6e, 0x05, 0x54, 0x12, 0xd7, 0xb5, 0x68, 0x59, 0x84, - 0x07, 0x5f, 0xed, 0xa9, 0xbd, 0x49, 0x6c, 0x7d, 0x90, 0xf7, 0xa2, 0xbc, - 0xf9, 0xfd, 0x1f, 0x5a, 0xc9, 0x72, 0x78, 0xe3, 0x23, 0xae, 0x50, 0x39, - 0xa8, 0xa5, 0x86, 0xe7, 0xc9, 0x04, 0xd7, 0xc1, 0xc3, 0xf1, 0x5a, 0xe9, - 0xa6, 0x30, 0x01, 0xfb, 0x09, 0x83, 0x18, 0x4d, 0x56, 0xdf, 0x03, 0x48, - 0x7f, 0xf7, 0xbb, 0xdb, 0x7f, 0x38, 0x38, 0x81, 0xf5, 0x6f, 0x34, 0xfc, - 0xe3, 0x44, 0x89, 0xba, 0x37, 0x33, 0x0a, 0x06, 0xa5, 0x7e, 0xec, 0x80, - 0xfa, 0xc3, 0x0d, 0xab, 0x09, 0x90, 0xd3, 0xd8, 0x7d, 0x3f, 0x2d, 0xbc, - 0x1a, 0xe7, 0x19, 0xf6, 0x60, 0xfd, 0xb4, 0xa7, 0x0e, 0x81, 0x02, 0xc5, - 0xc2, 0xe1, 0xa3, 0x4b, 0x28, 0x06, 0x37, 0xcd, 0xd0, 0x1e, 0x0f, 0x18, - 0x09, 0x8f, 0xae, 0x5d, 0x5c, 0x09, 0xd4, 0x57, 0x2b, 0x9c, 0x6d, 0x9f, - 0x2c, 0x5e, 0x31, 0x3e, 0x4e, 0xcb, 0xd9, 0x0f, 0xc6, 0x3a, 0xdb, 0xc3, - 0xcf, 0xc8, 0x1c, 0xb1, 0x13, 0xaa, 0x45, 0xb3, 0x59, 0x0f, 0xdf, 0x53, - 0x56, 0xd7, 0xe2, 0xd7, 0xa5, 0x1e, 0xbe, 0x77, 0xf0, 0x35, 0x7f, 0x26, - 0x5c, 0x24, 0x7c, 0x7c, 0x7d, 0xb1, 0x89, 0x7c, 0x7d, 0xa9, 0x6a, 0x2d, - 0xad, 0x2f, 0xf4, 0x81, 0x15, 0xd7, 0xa1, 0x1c, 0xd8, 0x7f, 0x92, 0xfc, - 0x6c, 0x2c, 0xce, 0x22, 0xfe, 0x36, 0x6e, 0x35, 0xa9, 0xcd, 0xb7, 0xc3, - 0xc1, 0x55, 0xde, 0x7b, 0x1f, 0xec, 0xf6, 0x19, 0xbd, 0x1a, 0x37, 0x04, - 0x63, 0x9d, 0x62, 0xf7, 0x58, 0x68, 0xaf, 0x73, 0x7a, 0xb5, 0x5f, 0x6b, - 0xd0, 0xde, 0x3e, 0xc0, 0x79, 0xd2, 0xac, 0x96, 0xe6, 0x9f, 0xee, 0x3e, - 0xbb, 0xef, 0xbc, 0xf6, 0xa4, 0xc4, 0x56, 0x92, 0x50, 0xbc, 0x97, 0xd7, - 0x70, 0x63, 0xef, 0x0e, 0xf0, 0x4a, 0xf5, 0x39, 0xb9, 0x33, 0x5b, 0x15, - 0xc8, 0xd0, 0x1d, 0x91, 0xad, 0x0e, 0x7a, 0xaf, 0x05, 0x6e, 0xf0, 0xe4, - 0x5d, 0x2f, 0x4e, 0x57, 0x84, 0x93, 0xcd, 0xda, 0x4d, 0x62, 0x8d, 0xcf, - 0xe7, 0xd9, 0xd2, 0x9e, 0x55, 0x54, 0x92, 0x1b, 0xf2, 0xca, 0xf8, 0x31, - 0xb3, 0xc4, 0xb6, 0xdc, 0x32, 0x76, 0xc8, 0xae, 0x58, 0x0e, 0x20, 0x18, - 0xf2, 0x07, 0xac, 0x27, 0x8e, 0xf0, 0x77, 0x60, 0xdb, 0xab, 0xe8, 0x79, - 0x1c, 0x8d, 0x79, 0xb8, 0x3d, 0xe7, 0x08, 0x73, 0xc8, 0x45, 0x32, 0x83, - 0x7b, 0x0f, 0x2f, 0xaf, 0xcd, 0x55, 0xcd, 0x9c, 0x70, 0xc8, 0x4b, 0x1e, - 0x03, 0xf5, 0x98, 0x94, 0xad, 0xa0, 0x43, 0x08, 0x6d, 0x53, 0x94, 0x18, - 0x19, 0x1e, 0xf8, 0x94, 0xf0, 0x53, 0x2e, 0x83, 0x55, 0xa0, 0x95, 0xfd, - 0x3c, 0xc8, 0x14, 0x54, 0xe9, 0xac, 0x6d, 0x95, 0x75, 0xa9, 0xad, 0x2d, - 0x22, 0x81, 0x2f, 0xd8, 0xb7, 0x39, 0x74, 0xb6, 0xc5, 0xda, 0x35, 0x1e, - 0xd0, 0x0f, 0xc4, 0xb3, 0x35, 0x41, 0xaa, 0x01, 0x88, 0xf6, 0x77, 0x81, - 0xdb, 0xe0, 0x25, 0x8e, 0xcd, 0x57, 0xb0, 0x06, 0xfa, 0x3d, 0x79, 0xf9, - 0x6d, 0x5e, 0x3c, 0xdc, 0xf6, 0xa3, 0xff, 0xd0, 0x6e, 0xf5, 0x25, 0x5e, - 0x7a, 0x6c, 0xed, 0xee, 0x18, 0xe1, 0x14, 0x48, 0xc7, 0xdd, 0x04, 0x79, - 0x3c, 0x8d, 0x50, 0xa7, 0xc6, 0x0c, 0xce, 0xd5, 0x89, 0x47, 0xe8, 0xdb, - 0xfd, 0x00, 0x0c, 0x37, 0xf3, 0xe1, 0xe9, 0xdd, 0xf8, 0x50, 0x2f, 0x64, - 0x74, 0x98, 0x02, 0x22, 0x8d, 0xeb, 0x85, 0x1a, 0xfe, 0xa0, 0x3a, 0xe3, - 0x2c, 0xa4, 0xfe, 0x63, 0xbd, 0x50, 0x25, 0x1c, 0x94, 0xba, 0xe7, 0x06, - 0x78, 0x19, 0x8c, 0x51, 0xbf, 0xcc, 0x05, 0xe8, 0x4d, 0x22, 0x35, 0xf3, - 0x03, 0x86, 0x20, 0x57, 0xa7, 0x8c, 0xdf, 0xa6, 0x2a, 0x0c, 0xff, 0xd6, - 0xfa, 0x74, 0x83, 0x7c, 0xe5, 0xa6, 0x65, 0xc8, 0xf5, 0x96, 0x1f, 0x22, - 0xef, 0x35, 0xa8, 0x12, 0x72, 0xf3, 0x95, 0x1d, 0xd8, 0xe8, 0x5b, 0x1b, - 0xa4, 0x3e, 0xdd, 0xb1, 0xfa, 0xe0, 0xb5, 0x86, 0x02, 0xfc, 0xb1, 0xba, - 0x51, 0x2e, 0x00, 0xa5, 0xe9, 0x81, 0x85, 0x0d, 0x00, 0x1e, 0x05, 0x82, - 0x11, 0x68, 0x92, 0x61, 0x2c, 0x5f, 0x5d, 0xa7, 0xd8, 0xe4, 0x3e, 0x3e, - 0x5a, 0x34, 0x3c, 0xe3, 0x67, 0x84, 0x77, 0x81, 0x18, 0xd5, 0xec, 0x65, - 0x55, 0x09, 0x59, 0xa5, 0xd3, 0xce, 0xd7, 0x4a, 0xcb, 0x58, 0x04, 0xda, - 0xf9, 0x5e, 0x4f, 0x86, 0xe9, 0x8c, 0xa5, 0xdd, 0x12, 0xd0, 0xec, 0xfe, - 0x5c, 0x17, 0xd8, 0x90, 0x7a, 0xee, 0x55, 0x95, 0x1b, 0x84, 0x6f, 0xe8, - 0x6c, 0xc4, 0xb1, 0x72, 0xe7, 0xcc, 0xa6, 0x9c, 0xb0, 0x4d, 0x21, 0xfb, - 0xfc, 0x98, 0xb0, 0xf4, 0xda, 0xbb, 0x9d, 0x46, 0x4c, 0x72, 0xdc, 0x7c, - 0xfe, 0xff, 0xdc, 0xbc, 0x3a, 0xd2, 0x61, 0xa7, 0xd0, 0x3e, 0x7a, 0xd9, - 0xa1, 0x56, 0xd9, 0xc3, 0x04, 0x3b, 0xfe, 0x8c, 0x02, 0x54, 0xb9, 0x81, - 0xbd, 0xf2, 0x64, 0xc3, 0x18, 0xe2, 0x55, 0xba, 0x0f, 0xc3, 0x2b, 0xd0, - 0x16, 0x6a, 0xeb, 0xa2, 0x74, 0x98, 0x87, 0x08, 0xae, 0x5f, 0x6b, 0x7e, - 0xe3, 0x4e, 0xe9, 0xd1, 0x03, 0xae, 0x37, 0x9a, 0xc7, 0x40, 0x87, 0x01, - 0x30, 0xf8, 0x21, 0x88, 0xe3, 0x14, 0xdf, 0x0d, 0x8a, 0x56, 0xe7, 0xef, - 0xbe, 0xdd, 0xc6, 0xd0, 0x6e, 0x90, 0xd6, 0xcf, 0xaf, 0xfc, 0xd1, 0x56, - 0x74, 0xb7, 0xbf, 0x59, 0x4a, 0xa7, 0xd1, 0x4b, 0x2e, 0xeb, 0x90, 0x6c, - 0x13, 0x69, 0x6e, 0x1f, 0x74, 0xa0, 0xd7, 0x78, 0xc1, 0x04, 0x91, 0xbe, - 0x6d, 0x2c, 0x87, 0xa6, 0xdb, 0x28, 0x36, 0xe4, 0x8a, 0x8d, 0x87, 0x16, - 0x25, 0xc5, 0x10, 0x3f, 0x70, 0xe6, 0x63, 0x78, 0xf3, 0xd1, 0xd5, 0x4f, - 0x36, 0x1a, 0xb4, 0x1e, 0x55, 0x1b, 0xe9, 0xf2, 0xd5, 0x17, 0xb1, 0xc8, - 0x2f, 0xb8, 0x46, 0xa4, 0x45, 0xb5, 0xa8, 0xea, 0x01, 0xbe, 0x2e, 0x63, - 0x6e, 0x88, 0x6b, 0x9d, 0x00, 0x9c, 0x56, 0x13, 0x29, 0x86, 0x7a, 0xb5, - 0x76, 0x1d, 0x3f, 0x67, 0xfb, 0x6f, 0x9b, 0x1f, 0xef, 0x13, 0x83, 0x95, - 0xde, 0xd3, 0xf7, 0xe2, 0xea, 0xa1, 0x14, 0xf1, 0x96, 0xdb, 0x71, 0x8e, - 0xa7, 0x50, 0x27, 0xbe, 0x25, 0xb1, 0x70, 0x17, 0x71, 0x1e, 0xa3, 0xa6, - 0xd5, 0xe0, 0x21, 0xbc, 0xbd, 0x6f, 0x7f, 0x8a, 0xa5, 0x3a, 0x62, 0x6a, - 0x6c, 0x9f, 0xd1, 0x93, 0xc7, 0x94, 0x76, 0x7f, 0x0e, 0x45, 0x54, 0x61, - 0x52, 0xec, 0xcc, 0xff, 0x4f, 0x23, 0x81, 0x52, 0xe3, 0x6d, 0x1a, 0xbc, - 0xf4, 0x69, 0xed, 0xc0, 0x9f, 0xea, 0x63, 0xd3, 0x59, 0x04, 0xf3, 0x8d, - 0x3c, 0xea, 0xbf, 0xe9, 0x74, 0xfb, 0xc1, 0x9b, 0x5d, 0x7f, 0xa7, 0x28, - 0x84, 0x0b, 0xee, 0x04, 0xbb, 0x0f, 0xf8, 0xfb, 0x9c, 0x0a, 0x9c, 0xb1, - 0xe6, 0xa5, 0x82, 0xc1, 0x7c, 0xc7, 0xed, 0x5e, 0x74, 0x90, 0xda, 0x22, - 0x10, 0x37, 0x20, 0x87, 0x16, 0x7a, 0x59, 0xfc, 0x22, 0x21, 0x32, 0x83, - 0x7b, 0x5e, 0x46, 0x5f, 0xf9, 0x75, 0x71, 0xa4, 0x9b, 0x76, 0x1c, 0x8e, - 0x5f, 0x75, 0x29, 0x47, 0xe4, 0xec, 0x75, 0xba, 0xe8, 0x58, 0xac, 0x98, - 0x25, 0xf5, 0x28, 0x4e, 0xca, 0x8f, 0xe2, 0x87, 0x63, 0xa5, 0xe1, 0xb2, - 0x7d, 0x02, 0x6f, 0xa7, 0x3e, 0x8b, 0xfc, 0xf8, 0xdd, 0xe6, 0x20, 0x63, - 0xc5, 0xce, 0x8c, 0xc1, 0xf0, 0x8a, 0x29, 0x41, 0x9b, 0x14, 0xc5, 0x01, - 0x03, 0x39, 0x1c, 0xa3, 0xc7, 0xef, 0x53, 0x5b, 0xc1, 0x76, 0xab, 0x96, - 0x8c, 0xc8, 0x14, 0xa8, 0x36, 0x9d, 0x2b, 0x3c, 0x2c, 0x03, 0x3c, 0xda, - 0x07, 0x3d, 0xe7, 0xef, 0x69, 0x29, 0x67, 0x0f, 0x96, 0xe4, 0xff, 0x71, - 0xa0, 0x64, 0x41, 0x7c, 0xd2, 0x6b, 0xdc, 0x78, 0x6d, 0xda, 0xfc, 0x6a, - 0xb0, 0xbd, 0x93, 0xb1, 0x63, 0x71, 0xeb, 0xa5, 0x78, 0xb5, 0x42, 0x38, - 0x75, 0xc7, 0x7f, 0x54, 0x0f, 0x9b, 0x8b, 0xaf, 0x02, 0x0f, 0x7c, 0xab, - 0x6d, 0x74, 0x28, 0xc3, 0xb2, 0x95, 0xdc, 0x70, 0xdb, 0xed, 0x29, 0x94, - 0x6d, 0x49, 0x3f, 0x3d, 0xd7, 0x8d, 0xf7, 0xed, 0x94, 0xd1, 0x4b, 0x69, - 0x53, 0x5e, 0x3a, 0xac, 0x5d, 0x29, 0x60, 0xe0, 0xbf, 0x87, 0x50, 0xe8, - 0xd2, 0x53, 0xb2, 0xde, 0xcf, 0x5f, 0x67, 0x7c, 0xd7, 0x82, 0x71, 0x97, - 0xb3, 0x76, 0x61, 0x77, 0x94, 0x70, 0x32, 0xf0, 0x43, 0x2c, 0x63, 0x27, - 0x79, 0x85, 0x6d, 0xe1, 0xfd, 0x14, 0xe6, 0xb0, 0x60, 0x1d, 0x0e, 0xe5, - 0x7b, 0x3a, 0xb7, 0xd0, 0xae, 0x50, 0xe8, 0x4c, 0x99, 0x2f, 0xc7, 0x29, - 0x14, 0x99, 0x2c, 0x10, 0x53, 0x6e, 0x7f, 0xf2, 0x73, 0xd4, 0x25, 0x84, - 0x03, 0xf6, 0xac, 0x22, 0xb0, 0x22, 0xd9, 0x4c, 0x90, 0xd6, 0xae, 0x3a, - 0x3e, 0x85, 0xd2, 0xd4, 0x03, 0xc9, 0x94, 0x3f, 0x15, 0xea, 0xa3, 0xcd, - 0x41, 0xc2, 0xf5, 0xfc, 0xe6, 0xcd, 0x4f, 0x45, 0x12, 0xa7, 0x4b, 0x0d, - 0x74, 0x3d, 0x25, 0x0a, 0x6a, 0x7e, 0xd7, 0xb9, 0xfd, 0xd8, 0x32, 0xf0, - 0x96, 0xba, 0x3a, 0x06, 0xd9, 0xa6, 0xff, 0x27, 0x8e, 0x0b, 0x9b, 0x43, - 0x64, 0xc9, 0xe5, 0x60, 0xe1, 0x93, 0x16, 0x20, 0x9d, 0xd6, 0x7d, 0x08, - 0x3a, 0x34, 0xff, 0xc8, 0x7c, 0xa7, 0x25, 0x6f, 0xbd, 0x73, 0xa5, 0x76, - 0x5f, 0x3b, 0x3a, 0xef, 0x2e, 0x79, 0x08, 0x6a, 0x36, 0x79, 0x64, 0xf9, - 0xf3, 0xa9, 0xf3, 0xb6, 0xe0, 0x94, 0x79, 0x44, 0x40, 0x9d, 0xbe, 0xe1, - 0x8d, 0x3d, 0xce, 0x2c, 0x88, 0xeb, 0x1a, 0x2e, 0xce, 0x9f, 0x8b, 0x15, - 0xba, 0x7b, 0xb7, 0xd4, 0xbe, 0xa6, 0x6b, 0xf2, 0x6d, 0xbc, 0x97, 0xa8, - 0x55, 0xdd, 0x41, 0x4f, 0x8f, 0xdc, 0xd8, 0x26, 0x6f, 0x5a, 0xe5, 0x00, - 0x2a, 0xb4, 0xb1, 0x1a, 0xb5, 0xe8, 0x86, 0x35, 0xca, 0x15, 0x57, 0x1a, - 0x87, 0x03, 0x74, 0x67, 0xc6, 0x32, 0xbd, 0x1d, 0xe3, 0x6a, 0xe3, 0x06, - 0x65, 0x3a, 0xdc, 0x5b, 0xe8, 0xdf, 0x96, 0xac, 0xf1, 0x8c, 0xbf, 0xfd, - 0x51, 0xe1, 0x93, 0xd3, 0x28, 0x2d, 0xa4, 0xe8, 0xfe, 0xd2, 0x32, 0x5d, - 0xf2, 0x59, 0xc8, 0x62, 0xa1, 0x76, 0x9f, 0xe2, 0x3e, 0x8d, 0x1b, 0x25, - 0x09, 0xee, 0xbf, 0x8d, 0x7d, 0xb0, 0x1c, 0x96, 0x53, 0x68, 0x79, 0x6c, - 0x52, 0x09, 0x53, 0xf3, 0x81, 0xdb, 0x9e, 0x32, 0x57, 0x47, 0xee, 0xa4, - 0x51, 0x48, 0x87, 0x3b, 0xee, 0x13, 0x1c, 0x1d, 0x70, 0xbc, 0x6d, 0xe0, - 0x5d, 0xd1, 0x10, 0x70, 0xd8, 0xca, 0x6b, 0x6c, 0x14, 0x0a, 0xee, 0xa6, - 0xbf, 0x2c, 0xa7, 0xe1, 0x3b, 0xf9, 0x94, 0x44, 0xf0, 0x5c, 0x73, 0xd2, - 0xf7, 0xd8, 0xf9, 0xa4, 0x1f, 0x08, 0x3c, 0x43, 0xd0, 0x5d, 0x11, 0x91, - 0x1c, 0x74, 0xe2, 0x47, 0xdf, 0xce, 0x7f, 0x1a, 0x3f, 0x9f, 0xdf, 0xbe, - 0xce, 0x75, 0xfc, 0xa4, 0x9f, 0xeb, 0x70, 0x0a, 0x83, 0x0e, 0xa3, 0x58, - 0x92, 0x7e, 0xb6, 0x69, 0xe8, 0x5a, 0x8d, 0xe5, 0xbd, 0x4a, 0x27, 0x07, - 0x6c, 0x56, 0xb6, 0xde, 0xc0, 0x1c, 0xb4, 0xbf, 0x24, 0x7c, 0xea, 0x87, - 0x83, 0x3f, 0x55, 0x8c, 0x1f, 0x09, 0xc8, 0x27, 0xa7, 0x9a, 0x4e, 0x71, - 0x56, 0x14, 0x5b, 0x14, 0x71, 0xd3, 0x93, 0x24, 0x2e, 0x3e, 0x36, 0x59, - 0x85, 0x3b, 0x4e, 0xa3, 0x8d, 0x1c, 0xfa, 0x5b, 0x29, 0x05, 0x78, 0x4d, - 0x4b, 0xc7, 0xb8, 0x8d, 0x62, 0xf0, 0x34, 0x7e, 0xda, 0x7d, 0xc6, 0x36, - 0xed, 0xc9, 0xc1, 0xb7, 0xb8, 0x88, 0xd7, 0x5e, 0x47, 0xa9, 0x93, 0x3c, - 0x7c, 0x40, 0x57, 0xc9, 0x24, 0x53, 0x03, 0xfc, 0x38, 0x58, 0x52, 0xc8, - 0x1f, 0x77, 0x0c, 0x65, 0x2d, 0xfc, 0x45, 0x6a, 0xb5, 0x01, 0x7b, 0xba, - 0x96, 0x63, 0xc4, 0x11, 0x4c, 0x3e, 0xc9, 0xe3, 0xf7, 0xbc, 0xb4, 0x6c, - 0xc1, 0xc8, 0x34, 0xd4, 0xa7, 0x51, 0x83, 0xd3, 0xd9, 0xf9, 0x76, 0x1e, - 0xba, 0xee, 0x58, 0x7e, 0x1a, 0xab, 0xf6, 0xa0, 0x9e, 0x49, 0xae, 0x97, - 0xc7, 0x63, 0xf2, 0x65, 0x7b, 0xe2, 0x65, 0xfa, 0xe9, 0x18, 0xfa, 0x19, - 0x3d, 0x4c, 0x9c, 0xa5, 0x2f, 0xb9, 0x77, 0xb1, 0x8f, 0xb9, 0xf5, 0x4b, - 0x0f, 0x9c, 0xb5, 0x38, 0x75, 0x30, 0x0f, 0x5c, 0x4f, 0xdd, 0x99, 0x3c, - 0x88, 0x61, 0x50, 0xc6, 0x3c, 0x5a, 0x37, 0xff, 0x28, 0x3d, 0x94, 0xf3, - 0xc1, 0x76, 0x77, 0x3a, 0x4b, 0x4c, 0x8f, 0x03, 0x47, 0x92, 0x6a, 0x14, - 0xff, 0xe3, 0x08, 0xf7, 0x4f, 0x14, 0xd0, 0x33, 0x4d, 0xcd, 0x12, 0xbc, - 0xf3, 0x4d, 0xce, 0xc7, 0xbe, 0xdd, 0xfe, 0x69, 0x38, 0x07, 0xf2, 0x04, - 0x3c, 0x6d, 0x8a, 0xad, 0x65, 0x7c, 0x30, 0x30, 0xe9, 0xdd, 0x3e, 0x96, - 0xdc, 0x10, 0x28, 0x0e, 0x1e, 0x86, 0x2c, 0x08, 0x4d, 0xcc, 0xab, 0x2c, - 0x73, 0x83, 0xa5, 0xda, 0x65, 0xf7, 0x8a, 0xcb, 0x42, 0xce, 0x03, 0xd5, - 0xfc, 0xe2, 0xd8, 0x34, 0xf2, 0x38, 0x49, 0x75, 0x2a, 0x40, 0x28, 0x5f, - 0xc4, 0xe6, 0xa6, 0xd8, 0xe5, 0x54, 0x79, 0xe1, 0x70, 0x9c, 0x9b, 0x9e, - 0x39, 0x75, 0xe1, 0xe9, 0x6f, 0x60, 0xc5, 0xf5, 0x07, 0xc5, 0x61, 0xb9, - 0xbd, 0x55, 0xf7, 0xc6, 0x7f, 0x82, 0xb7, 0xc1, 0x13, 0x62, 0xf4, 0xe0, - 0xe3, 0x36, 0x5f, 0x6b, 0xaf, 0x4c, 0xe0, 0xef, 0x5d, 0xcd, 0xc2, 0x5d, - 0xac, 0x97, 0x8b, 0x6b, 0x4b, 0xfe, 0x3a, 0xf5, 0xf7, 0x46, 0xb9, 0x0d, - 0xec, 0xf2, 0x38, 0x05, 0x82, 0x9c, 0x3a, 0x57, 0x24, 0x77, 0x6c, 0x69, - 0xfb, 0x13, 0xed, 0xdf, 0xb6, 0x3a, 0x53, 0xb2, 0x6b, 0xc5, 0xe6, 0x0a, - 0xaa, 0x83, 0x7f, 0xb6, 0xa5, 0xe1, 0x77, 0xe8, 0x21, 0xff, 0x89, 0x10, - 0x2a, 0xc8, 0x83, 0x8f, 0x99, 0x1b, 0xd0, 0xbd, 0x24, 0x4e, 0x32, 0x8b, - 0xb1, 0x87, 0xdf, 0x1a, 0x2d, 0x76, 0xcd, 0xd7, 0x31, 0x3e, 0x5f, 0x2e, - 0x38, 0x97, 0xd3, 0xa8, 0x59, 0x21, 0x87, 0xae, 0x08, 0x40, 0xbe, 0x2a, - 0xfb, 0x3f, 0x67, 0xbe, 0x0e, 0xec, 0x7e, 0x0a, 0xb0, 0x8e, 0xa2, 0x8f, - 0xb1, 0x36, 0x21, 0x2b, 0x7f, 0xeb, 0xd3, 0xb9, 0x3f, 0x9d, 0xd7, 0xef, - 0x76, 0x83, 0x35, 0x79, 0xbf, 0xe1, 0x96, 0x18, 0xbb, 0xb9, 0xa7, 0xb9, - 0xd0, 0xbf, 0xb0, 0xb6, 0x74, 0x9b, 0x87, 0xef, 0xe6, 0x57, 0x9f, 0xdb, - 0x6a, 0xac, 0x96, 0xf8, 0x57, 0x78, 0xe3, 0xa0, 0x40, 0x70, 0xce, 0x61, - 0xd8, 0x54, 0x1e, 0xde, 0x5b, 0xfe, 0x08, 0xc4, 0x0b, 0xee, 0x4c, 0x9a, - 0x65, 0x4b, 0x56, 0xfc, 0x9a, 0x3a, 0xf2, 0x96, 0xbc, 0xe4, 0x29, 0x7e, - 0xd6, 0x1d, 0xfe, 0x2d, 0xad, 0xd6, 0xa1, 0xfe, 0x95, 0x60, 0xad, 0xc4, - 0x5b, 0x7f, 0xd3, 0x87, 0x0b, 0xed, 0xc9, 0x11, 0xe8, 0x42, 0x1c, 0xc7, - 0x90, 0x15, 0xcf, 0x6f, 0xef, 0x26, 0x20, 0x0f, 0xe3, 0x0a, 0x36, 0x35, - 0xfc, 0x78, 0x03, 0x38, 0x28, 0x89, 0xb5, 0x24, 0x72, 0x0a, 0xd4, 0x13, - 0xf3, 0x9a, 0x7f, 0xfa, 0x58, 0x3a, 0xa8, 0x6d, 0x92, 0x2b, 0x79, 0x2c, - 0xc5, 0x57, 0xae, 0x43, 0x8e, 0xbf, 0xa8, 0xcf, 0xed, 0x0c, 0x6e, 0xc3, - 0xee, 0xf9, 0xb5, 0xfe, 0x0f, 0x1e, 0x5a, 0x5d, 0x77, 0xa8, 0xcd, 0xa1, - 0x9d, 0x5b, 0x1f, 0xf8, 0x1e, 0xef, 0x9a, 0xb8, 0x89, 0x18, 0x11, 0xaf, - 0xe9, 0x61, 0x42, 0x57, 0xaf, 0x8c, 0xeb, 0xb9, 0xc1, 0xac, 0x7f, 0xc6, - 0x22, 0x28, 0x8c, 0x9e, 0x2a, 0xda, 0x9a, 0xbf, 0x7d, 0x05, 0x70, 0x45, - 0x1f, 0x79, 0xca, 0xc9, 0x50, 0x1a, 0xf5, 0xc4, 0x67, 0x9c, 0x14, 0xe9, - 0x31, 0xe5, 0xcb, 0xa9, 0x65, 0x41, 0x9f, 0x74, 0x14, 0xc1, 0x32, 0x94, - 0x37, 0xd6, 0x93, 0x68, 0x99, 0xad, 0x13, 0x5a, 0xcf, 0x9d, 0xa0, 0x94, - 0x46, 0x4f, 0xb1, 0xba, 0xb6, 0x68, 0x0f, 0xa8, 0xdd, 0xf5, 0x4c, 0xae, - 0xb4, 0xf5, 0x82, 0x93, 0x5a, 0x28, 0xf9, 0xc7, 0x74, 0x5e, 0x2f, 0x80, - 0x66, 0x68, 0xef, 0x06, 0xf3, 0x51, 0xb7, 0x23, 0xf0, 0xcf, 0x50, 0xc7, - 0x42, 0x3f, 0x94, 0xf0, 0x63, 0x99, 0x39, 0x04, 0x01, 0xa5, 0xd0, 0xbd, - 0x8d, 0x15, 0xce, 0xb5, 0xd2, 0x81, 0xa2, 0xe7, 0xf4, 0x68, 0x3f, 0xd6, - 0x21, 0x7b, 0xa0, 0xd9, 0x39, 0xe7, 0x7a, 0x62, 0xfa, 0x7b, 0x94, 0x90, - 0x86, 0x58, 0x52, 0xd9, 0x1b, 0x1e, 0x54, 0x35, 0xc1, 0xf6, 0xe1, 0x7e, - 0x3b, 0x67, 0xd4, 0x86, 0x43, 0x8e, 0xe7, 0x91, 0x63, 0xe3, 0x41, 0xf1, - 0x13, 0xff, 0x79, 0x45, 0x7e, 0xb9, 0x56, 0xe6, 0xb8, 0xc4, 0x73, 0x52, - 0xd4, 0x24, 0x3f, 0xe6, 0xbc, 0xb8, 0xef, 0x53, 0x78, 0xfb, 0xd9, 0xc3, - 0xbb, 0x05, 0x8e, 0xb3, 0xd2, 0x91, 0x64, 0x9b, 0x9e, 0x4c, 0x7f, 0xda, - 0x34, 0xd7, 0xf3, 0xc6, 0xf6, 0x63, 0x0e, 0xc8, 0xcd, 0x21, 0x30, 0x0e, - 0xaa, 0x43, 0x9b, 0xda, 0x78, 0x98, 0x20, 0x8d, 0xcc, 0xc9, 0x37, 0xef, - 0x8d, 0x69, 0x3c, 0xd5, 0xe1, 0xfb, 0xbb, 0x47, 0x19, 0x2b, 0xe3, 0x76, - 0xf4, 0xee, 0xd2, 0xb5, 0x1c, 0x89, 0x6e, 0x67, 0xc9, 0xdf, 0x46, 0xdd, - 0x21, 0x8a, 0x82, 0xd3, 0x6e, 0x83, 0xac, 0x6e, 0xfc, 0x92, 0xce, 0xbf, - 0xe7, 0x10, 0x80, 0x85, 0xa7, 0xf1, 0xc7, 0xc7, 0x9f, 0x65, 0x60, 0x29, - 0x32, 0x8e, 0x7c, 0x3b, 0x43, 0x4e, 0xee, 0x75, 0xac, 0xe9, 0xec, 0x9f, - 0x17, 0x31, 0x8c, 0xf1, 0xeb, 0x5a, 0xd5, 0x31, 0x8f, 0x9a, 0xdb, 0x58, - 0x0b, 0xe0, 0x98, 0xc7, 0x43, 0x51, 0xa3, 0xdb, 0x1f, 0x8f, 0xdd, 0x26, - 0x0c, 0x1d, 0x68, 0x05, 0xea, 0x54, 0x70, 0xb0, 0x52, 0x3d, 0xdf, 0xdb, - 0x88, 0xb9, 0x4f, 0xf7, 0x34, 0xfe, 0x78, 0x6f, 0xb5, 0xd3, 0x1a, 0xc2, - 0xf4, 0xa7, 0x29, 0xef, 0xd3, 0x1c, 0x89, 0x87, 0x7e, 0xe4, 0xde, 0xba, - 0xf0, 0xe0, 0x7c, 0x8f, 0x8d, 0x2e, 0xeb, 0xe3, 0x18, 0x3a, 0xed, 0x7d, - 0x1a, 0x31, 0xee, 0x02, 0x78, 0x05, 0x63, 0xcd, 0xe8, 0x3e, 0x96, 0xd3, - 0x49, 0x97, 0x12, 0x3c, 0x16, 0x12, 0xa3, 0xbb, 0xff, 0x33, 0x76, 0xef, - 0x69, 0xea, 0x89, 0xa0, 0x26, 0xe4, 0x88, 0x07, 0x6f, 0x64, 0xc7, 0xaa, - 0x4f, 0x9d, 0xc8, 0x13, 0xdf, 0x3a, 0x22, 0x83, 0x6d, 0xd0, 0xd8, 0xd3, - 0xa9, 0x8e, 0x60, 0xbb, 0x75, 0x18, 0xaa, 0x77, 0x0e, 0xfc, 0x7d, 0x1f, - 0x70, 0x70, 0xea, 0x81, 0xad, 0x7f, 0x5b, 0x1d, 0xf5, 0x2b, 0x87, 0x31, - 0xa1, 0xf1, 0xf5, 0xcc, 0x8f, 0xb1, 0x9c, 0xd7, 0xc7, 0xa1, 0x7d, 0xf9, - 0xd7, 0xe1, 0xbb, 0x97, 0xa9, 0x98, 0x73, 0x25, 0xda, 0xc7, 0xa9, 0xe3, - 0x9e, 0xa0, 0xa2, 0x38, 0xfe, 0x08, 0x15, 0xe3, 0x16, 0x9f, 0x95, 0x62, - 0xaf, 0xa6, 0xbb, 0xc9, 0xc7, 0x63, 0x53, 0xdc, 0x21, 0x1b, 0x0f, 0x9e, - 0xe7, 0xdf, 0x88, 0xf6, 0xd5, 0xae, 0x51, 0x20, 0x2b, 0x4d, 0x49, 0xa2, - 0x25, 0xbd, 0x86, 0xe2, 0x27, 0x3b, 0x7a, 0x64, 0xf0, 0x63, 0x1e, 0x62, - 0x23, 0xbe, 0xfd, 0x3a, 0x5c, 0x94, 0x4e, 0x87, 0xa6, 0x1b, 0x19, 0xcc, - 0x59, 0x0e, 0x3a, 0xdf, 0xd3, 0x47, 0x97, 0xda, 0xfa, 0x74, 0x5e, 0xaf, - 0xd0, 0xa0, 0xdf, 0xa3, 0xe0, 0x5c, 0x69, 0xa8, 0xa6, 0x01, 0x0e, 0xb5, - 0x7c, 0x34, 0x19, 0xea, 0x0e, 0x23, 0xd3, 0xd7, 0xcb, 0xbb, 0x62, 0xa2, - 0x98, 0xd1, 0xfc, 0x94, 0x3b, 0xcd, 0xe3, 0xde, 0xda, 0xa8, 0xbd, 0x48, - 0xf6, 0x73, 0x5e, 0x1e, 0x1b, 0x94, 0xf1, 0xc8, 0x8d, 0x9a, 0x2d, 0x74, - 0x08, 0xdd, 0x08, 0x31, 0xc3, 0x70, 0x63, 0x33, 0xe7, 0xad, 0xb4, 0x9e, - 0x7c, 0x3f, 0x78, 0x93, 0x67, 0x4b, 0xb2, 0xb3, 0xa7, 0xa4, 0xbd, 0x6d, - 0x3a, 0x3d, 0xb0, 0x9f, 0x17, 0x2e, 0xf6, 0x8e, 0x88, 0x06, 0x75, 0x47, - 0xb2, 0xb2, 0x18, 0x0e, 0x5c, 0xfd, 0x7a, 0x74, 0xe1, 0x12, 0x3a, 0x9b, - 0xe4, 0x7c, 0x8a, 0x6d, 0x7e, 0xb7, 0xb1, 0x98, 0x4f, 0xeb, 0x12, 0x50, - 0x11, 0xf8, 0xea, 0x5a, 0x56, 0x74, 0x81, 0x65, 0xe1, 0xc7, 0x90, 0x0d, - 0x12, 0xac, 0x87, 0x00, 0x5c, 0x61, 0x83, 0xb0, 0xed, 0x0d, 0xd4, 0x3e, - 0x8a, 0x55, 0x6c, 0x9d, 0xdd, 0x3e, 0x8d, 0x59, 0xb1, 0x34, 0x73, 0x4b, - 0xe3, 0xb4, 0xba, 0x36, 0xed, 0x76, 0x30, 0x47, 0x0b, 0xd0, 0x55, 0xf5, - 0x1c, 0x7d, 0x1a, 0xfc, 0x66, 0x6f, 0xd7, 0xdf, 0x1f, 0x54, 0xf9, 0xc0, - 0x95, 0x61, 0xab, 0xee, 0x7b, 0x5a, 0x8e, 0x14, 0x70, 0x1f, 0xe2, 0xb4, - 0xce, 0x60, 0x90, 0x2c, 0xbe, 0xd3, 0x3a, 0x4c, 0xeb, 0x07, 0x1d, 0x3a, - 0x72, 0x3f, 0xc3, 0xf7, 0x5a, 0xab, 0xae, 0x7f, 0xa5, 0x79, 0xb9, 0xc5, - 0xcb, 0x30, 0xe1, 0xd5, 0x07, 0x21, 0x63, 0x73, 0xf9, 0xe3, 0x7b, 0x1f, - 0x42, 0xdb, 0x63, 0x45, 0x4d, 0xba, 0x77, 0x2d, 0x09, 0x73, 0x1d, 0xbf, - 0xf0, 0x1b, 0x42, 0x48, 0x7b, 0xeb, 0x3d, 0xb5, 0x15, 0x67, 0xbf, 0x91, - 0x4d, 0xb0, 0x2c, 0xb7, 0x65, 0x98, 0xf6, 0x7f, 0xa6, 0x6b, 0xac, 0x7e, - 0xfe, 0xda, 0x7c, 0x7c, 0x48, 0xc4, 0x20, 0xe3, 0x01, 0x2a, 0x09, 0xfd, - 0x58, 0x35, 0xb6, 0x23, 0x40, 0xd8, 0x4a, 0xb7, 0xae, 0xa1, 0x27, 0xfb, - 0x5d, 0x24, 0xae, 0xf3, 0xb0, 0xf1, 0x00, 0x4b, 0x0b, 0x8c, 0x9c, 0xfb, - 0x09, 0x9b, 0xfa, 0x84, 0x91, 0x9b, 0x0e, 0x9b, 0x97, 0x88, 0xb0, 0x5b, - 0x54, 0x30, 0xd8, 0x86, 0x70, 0xc2, 0xda, 0xfd, 0xe0, 0xce, 0xe8, 0xda, - 0xe0, 0xf0, 0x82, 0x87, 0x67, 0xc2, 0xcb, 0x30, 0x92, 0x8b, 0x1d, 0xe2, - 0x08, 0xed, 0x70, 0x08, 0xc3, 0x4e, 0x54, 0x5f, 0x47, 0x11, 0x6d, 0x38, - 0x22, 0xbf, 0x8d, 0x6b, 0x7d, 0xdb, 0x30, 0x1e, 0x32, 0x10, 0x9b, 0x41, - 0xc4, 0x51, 0xc5, 0x3f, 0xac, 0x0f, 0x2a, 0x65, 0xfa, 0x33, 0x35, 0xa1, - 0xc3, 0x30, 0x13, 0x19, 0xf8, 0x2a, 0x9e, 0x87, 0x50, 0x9c, 0x49, 0x2f, - 0x1b, 0xfa, 0x07, 0xfc, 0x71, 0xd4, 0xbe, 0x07, 0x5b, 0x65, 0x4e, 0x59, - 0x3a, 0xff, 0xd9, 0x3f, 0xcf, 0x45, 0x17, 0xea, 0x8d, 0xd1, 0xbe, 0x21, - 0xb4, 0x56, 0xd9, 0x2e, 0xca, 0x35, 0x05, 0xe0, 0x76, 0x5a, 0x47, 0x85, - 0x90, 0x97, 0xce, 0x11, 0x65, 0xbd, 0x87, 0x3e, 0xb9, 0x0d, 0x4f, 0xae, - 0x6a, 0x5d, 0xee, 0x7c, 0x48, 0xd8, 0x23, 0x2d, 0x0e, 0xaa, 0x0a, 0xa6, - 0xdc, 0x5d, 0xe5, 0xc4, 0x80, 0x4c, 0xcf, 0x05, 0x72, 0x9f, 0xc4, 0x52, - 0x57, 0x21, 0xa3, 0x97, 0x60, 0x2b, 0x25, 0x1c, 0xd3, 0x2c, 0x37, 0x7f, - 0xc1, 0x15, 0x47, 0xca, 0x7d, 0x56, 0x9c, 0xe1, 0x6d, 0x4b, 0xbc, 0x53, - 0xc6, 0x90, 0x5b, 0xd9, 0xe3, 0x8d, 0xa6, 0x87, 0x7f, 0x99, 0xcc, 0x4d, - 0x89, 0x32, 0xe3, 0x88, 0x22, 0xac, 0x87, 0x66, 0x95, 0x25, 0x7a, 0xd1, - 0xd2, 0x27, 0x5d, 0x5d, 0xdd, 0x07, 0x9b, 0x5e, 0x0a, 0xf7, 0x85, 0x4d, - 0x8d, 0xa1, 0x22, 0xc9, 0xc1, 0x7f, 0x83, 0x5e, 0x19, 0x13, 0xbc, 0xea, - 0x78, 0x38, 0xa7, 0x2f, 0xcd, 0x0e, 0xb5, 0xb1, 0x8b, 0x44, 0x02, 0x68, - 0x1c, 0xee, 0x41, 0x35, 0x14, 0x72, 0x50, 0x60, 0x05, 0xd4, 0xf0, 0x50, - 0x02, 0x0d, 0xaf, 0xab, 0x3c, 0x4b, 0x8a, 0x3a, 0x63, 0xf0, 0x72, 0x54, - 0x75, 0xb3, 0x8e, 0xf5, 0x5e, 0x49, 0xfd, 0x88, 0x2e, 0x2c, 0x57, 0xdc, - 0x5c, 0x13, 0x53, 0xf7, 0xe7, 0x1d, 0xdc, 0xcb, 0xd7, 0xc7, 0x0a, 0xb9, - 0x94, 0x58, 0x86, 0x35, 0x7e, 0xc3, 0x47, 0x0b, 0x01, 0xd0, 0xf3, 0x5a, - 0x63, 0x47, 0xa9, 0xb4, 0x4e, 0x7d, 0x94, 0x6f, 0x3e, 0x12, 0x94, 0x88, - 0xd5, 0x4c, 0x8d, 0xf9, 0xb8, 0x57, 0x43, 0xec, 0x4b, 0x04, 0x22, 0x8e, - 0xef, 0xf9, 0xbb, 0x37, 0x4b, 0x72, 0x8b, 0x03, 0xf7, 0x0c, 0xe0, 0x9e, - 0x77, 0x9c, 0x45, 0xf3, 0x80, 0x89, 0xbb, 0xc4, 0x6d, 0x3e, 0xf0, 0x5c, - 0x70, 0xbf, 0xdf, 0x41, 0x11, 0xbd, 0x4d, 0xbb, 0xc4, 0x15, 0x21, 0xff, - 0x06, 0xa2, 0xe1, 0xed, 0xcd, 0xcf, 0xf5, 0x12, 0xfc, 0x71, 0x57, 0x06, - 0x08, 0x36, 0x29, 0x91, 0x2c, 0x6d, 0xe3, 0x39, 0x2c, 0x1d, 0xe9, 0xcd, - 0x18, 0xc6, 0xff, 0x8c, 0xe0, 0xa3, 0x5a, 0xc4, 0xbe, 0xa3, 0x8d, 0xee, - 0x71, 0x2f, 0x97, 0x90, 0xf7, 0x86, 0xbb, 0x0e, 0x1e, 0x24, 0x87, 0xad, - 0x1b, 0x1d, 0x36, 0xce, 0x68, 0x5a, 0x8c, 0xf5, 0xa0, 0x39, 0x14, 0x9d, - 0xc7, 0xd7, 0xa5, 0x46, 0x24, 0x9e, 0x75, 0x95, 0x95, 0xa5, 0x6a, 0x61, - 0xd8, 0x05, 0x99, 0xdf, 0xe4, 0x02, 0x91, 0x00, 0xbe, 0xf8, 0x8d, 0xab, - 0x0f, 0xed, 0x41, 0x6d, 0xe3, 0x37, 0x2e, 0xf4, 0x92, 0xdd, 0x5b, 0x1f, - 0x54, 0x8c, 0x70, 0x44, 0x31, 0xba, 0x3b, 0x98, 0xf9, 0x5c, 0xe8, 0x47, - 0xd5, 0xfd, 0x4d, 0xfd, 0x15, 0x79, 0x07, 0xd2, 0xe5, 0x83, 0xc2, 0x32, - 0x92, 0xfc, 0x9e, 0xa0, 0xc8, 0xf7, 0xa6, 0xa4, 0xf7, 0xf6, 0xeb, 0xb4, - 0x40, 0x17, 0x6e, 0x5f, 0x1a, 0x62, 0x4a, 0x18, 0xf0, 0x2a, 0x53, 0x00, - 0x06, 0xc2, 0xb8, 0xe9, 0x7b, 0xf2, 0x8b, 0xb1, 0x0d, 0xec, 0x5f, 0x8a, - 0x7e, 0xf3, 0x20, 0xca, 0xf4, 0xaf, 0x13, 0xb6, 0x08, 0x47, 0x8c, 0x51, - 0xa1, 0xa0, 0x93, 0x7a, 0x73, 0x17, 0x05, 0x4f, 0x7f, 0xa9, 0x5d, 0xc1, - 0x03, 0xfc, 0xcb, 0xb5, 0x87, 0x37, 0xae, 0x31, 0x0e, 0x75, 0x6a, 0x37, - 0x8d, 0xfc, 0xa6, 0xdd, 0xd9, 0xb7, 0x2b, 0xd7, 0xbd, 0xfd, 0xa6, 0xc4, - 0xb7, 0x6c, 0xb3, 0xe2, 0x1e, 0xd4, 0xa0, 0xf6, 0x91, 0x37, 0xa2, 0xaa, - 0xa7, 0xec, 0x5b, 0x11, 0xc1, 0xec, 0xe3, 0xdb, 0x17, 0xdc, 0x41, 0x23, - 0x62, 0x83, 0xfb, 0x13, 0x56, 0x19, 0x81, 0x64, 0x5c, 0xfe, 0x4d, 0xd5, - 0x6a, 0xc3, 0xb8, 0x96, 0xc3, 0xc8, 0xa6, 0xcb, 0x09, 0xde, 0x6e, 0x61, - 0x19, 0xb4, 0xf5, 0x05, 0x60, 0x82, 0xe8, 0x8a, 0xb6, 0x06, 0xe5, 0x5c, - 0x2f, 0x3a, 0x96, 0x21, 0x38, 0x7b, 0x00, 0x6e, 0x7f, 0x58, 0x88, 0xad, - 0x14, 0x90, 0x1b, 0x04, 0x82, 0x73, 0x0a, 0xfa, 0xa6, 0x09, 0xd2, 0x77, - 0x9c, 0xeb, 0x06, 0x50, 0x05, 0x00, 0xf0, 0x2f, 0x0d, 0xb1, 0x14, 0x68, - 0xd7, 0xc7, 0xa4, 0xf6, 0x31, 0x8b, 0xdf, 0x65, 0x08, 0x04, 0xb3, 0x0f, - 0xd1, 0x3c, 0xdf, 0x61, 0xaf, 0xf9, 0x9d, 0x74, 0xd9, 0xd6, 0xdb, 0xa6, - 0x3a, 0x08, 0x78, 0xbe, 0x2b, 0x97, 0x8c, 0x32, 0x19, 0x46, 0x55, 0xbd, - 0x0c, 0xf8, 0xab, 0x30, 0xeb, 0x6b, 0x0f, 0x55, 0x4d, 0xbf, 0x82, 0xe0, - 0x3d, 0xf3, 0x6e, 0xb7, 0x2a, 0xa4, 0x90, 0x05, 0xe2, 0xa5, 0x97, 0xf4, - 0xf5, 0xde, 0xbc, 0xd9, 0x9d, 0x6f, 0xac, 0x49, 0x4f, 0xaf, 0x6b, 0x8e, - 0xd4, 0x72, 0xc0, 0x6d, 0x2c, 0x36, 0x98, 0x4c, 0x55, 0x11, 0xc8, 0x78, - 0xaa, 0xc2, 0xe0, 0xc8, 0x28, 0x7a, 0x99, 0x4a, 0x40, 0xa9, 0x7a, 0x02, - 0xc7, 0xfd, 0x77, 0xc0, 0xcd, 0xb5, 0xcd, 0x1d, 0xde, 0x7e, 0xf7, 0xc0, - 0x7b, 0x96, 0x39, 0xee, 0xb7, 0xec, 0xf3, 0x93, 0x44, 0x64, 0x80, 0x0b, - 0xb5, 0x14, 0x85, 0x35, 0x76, 0xbe, 0xc3, 0x84, 0xbf, 0x03, 0xdc, 0x5b, - 0x40, 0xf8, 0x98, 0xb1, 0xb4, 0x4c, 0xa8, 0x12, 0x02, 0x92, 0x95, 0x24, - 0xc2, 0x4f, 0xbc, 0xee, 0x6f, 0x7f, 0xa7, 0xc5, 0x89, 0x37, 0x54, 0x83, - 0xfc, 0xb4, 0xdf, 0x5f, 0xa6, 0x08, 0xa6, 0xfd, 0xdf, 0xb9, 0x6b, 0x48, - 0xbf, 0x33, 0xb7, 0xd5, 0xdf, 0x2c, 0x60, 0xd5, 0x74, 0x7b, 0x5e, 0xa2, - 0xfe, 0x03, 0xf3, 0x5c, 0x13, 0x90, 0xdf, 0x7d, 0x06, 0xe8, 0xa5, 0x6f, - 0x48, 0xa9, 0x12, 0xf0, 0x3c, 0x36, 0x06, 0xf7, 0x80, 0x77, 0x14, 0x41, - 0xed, 0xcd, 0xf3, 0x7e, 0xf2, 0xed, 0xf7, 0x7c, 0x00, 0x7a, 0xaa, 0xdd, - 0xb8, 0xf7, 0x5b, 0xc6, 0xbd, 0x61, 0x36, 0xf9, 0x73, 0x99, 0xb4, 0xe9, - 0x24, 0xc0, 0x1e, 0xe1, 0x73, 0x75, 0x65, 0x75, 0x00, 0x1e, 0x6a, 0xfb, - 0x5c, 0xf5, 0xe0, 0x13, 0xbd, 0x28, 0x9e, 0x54, 0x10, 0x32, 0x40, 0x75, - 0x6f, 0x22, 0xee, 0x9a, 0x7f, 0x92, 0x0e, 0xfc, 0x7c, 0xd0, 0xc2, 0x78, - 0x4f, 0xb3, 0x3d, 0xa6, 0x0b, 0x55, 0x7c, 0x88, 0xe6, 0xa0, 0x21, 0x80, - 0x8a, 0xbb, 0xff, 0xe1, 0x99, 0x12, 0xa0, 0x25, 0x39, 0xf0, 0x7b, 0x7e, - 0x1a, 0xa6, 0x1d, 0x4a, 0x72, 0x38, 0x73, 0x29, 0xb0, 0x13, 0x24, 0x19, - 0x99, 0x34, 0x04, 0x4b, 0xfd, 0x3d, 0x58, 0x70, 0xc8, 0x00, 0x87, 0x0c, - 0x0c, 0x27, 0xeb, 0x3f, 0x7e, 0x7e, 0xee, 0xb3, 0x60, 0xdd, 0x19, 0x4f, - 0xff, 0x86, 0xe5, 0xbb, 0xdf, 0x1a, 0x01, 0x86, 0x8e, 0x78, 0xed, 0x75, - 0x99, 0x69, 0xda, 0x9d, 0x40, 0x91, 0xbd, 0x2e, 0xd0, 0xb0, 0x21, 0xe9, - 0x0b, 0x78, 0xce, 0x36, 0xd4, 0x12, 0x23, 0xee, 0xd5, 0x50, 0x75, 0xe4, - 0x57, 0x0b, 0x38, 0xc6, 0x07, 0x5a, 0x53, 0xad, 0x53, 0xf8, 0x25, 0x1e, - 0x98, 0x32, 0x46, 0x45, 0xbe, 0xc7, 0x40, 0xf6, 0xf7, 0xc4, 0x32, 0x3c, - 0x4c, 0x85, 0xe3, 0xfe, 0x77, 0xe7, 0xea, 0x99, 0x9f, 0xd7, 0x86, 0xa8, - 0xec, 0xdd, 0xa6, 0xcf, 0x06, 0x9e, 0x3c, 0x4c, 0x0a, 0x90, 0x57, 0x9d, - 0x32, 0x11, 0x86, 0xce, 0xae, 0xa3, 0x9e, 0x04, 0xb1, 0xb5, 0xc1, 0xdf, - 0xd3, 0x2f, 0x1e, 0xe0, 0xc7, 0xf3, 0x6f, 0x5b, 0xf2, 0x55, 0xc1, 0xb9, - 0x35, 0xd1, 0x0f, 0xf7, 0x38, 0x75, 0xf7, 0xa1, 0xb0, 0xbb, 0xd6, 0xdc, - 0x68, 0xbb, 0x80, 0x81, 0xac, 0x42, 0x5a, 0x27, 0x6c, 0xd1, 0x06, 0xdc, - 0x69, 0xe0, 0x66, 0x22, 0xf3, 0xc8, 0xbc, 0xfc, 0xd6, 0xd0, 0x02, 0x33, - 0x56, 0x42, 0x0f, 0xff, 0x71, 0xdb, 0x93, 0x53, 0x7f, 0x75, 0xab, 0x29, - 0xe8, 0x2a, 0xa4, 0xeb, 0x69, 0x01, 0xea, 0xb3, 0xe4, 0x9b, 0xbf, 0x48, - 0x26, 0x5e, 0xfa, 0xf1, 0x5b, 0x78, 0x1c, 0x32, 0xc5, 0x84, 0x7a, 0xf1, - 0x47, 0xde, 0x74, 0x1d, 0xba, 0x28, 0x7f, 0xc0, 0xed, 0x56, 0x41, 0xa1, - 0x2c, 0xe5, 0x66, 0x95, 0xe5, 0x70, 0x5f, 0x78, 0x48, 0x4a, 0xcc, 0x90, - 0xbf, 0xc1, 0xb3, 0x8c, 0x82, 0x79, 0x75, 0xfc, 0xfb, 0xc7, 0xe3, 0xef, - 0xe0, 0x31, 0xec, 0x39, 0x07, 0x1b, 0xc2, 0x97, 0xf8, 0xd3, 0x8f, 0x2d, - 0x29, 0xda, 0x45, 0x13, 0xc8, 0xf1, 0x6d, 0xe6, 0xb3, 0x47, 0x03, 0x9c, - 0x8b, 0x43, 0xf9, 0xc5, 0x9a, 0xa5, 0x27, 0x0a, 0xa2, 0xb9, 0xa2, 0xf8, - 0x54, 0x7f, 0xfb, 0xc6, 0x87, 0xcd, 0x7f, 0x3e, 0x5e, 0xab, 0x9d, 0x61, - 0x4b, 0xa6, 0x10, 0xee, 0xaf, 0xdc, 0x06, 0xf0, 0xca, 0x0d, 0x57, 0x27, - 0x8a, 0xff, 0x86, 0x85, 0x0f, 0x2d, 0xef, 0x2c, 0x0d, 0x44, 0xb8, 0x3e, - 0x5b, 0x21, 0x52, 0x2f, 0xf9, 0x81, 0x7e, 0xfd, 0x8b, 0x6e, 0xe9, 0x7a, - 0xcb, 0xbc, 0x0f, 0x04, 0xf0, 0xa9, 0x82, 0x05, 0x60, 0xe5, 0x35, 0x14, - 0xb5, 0x6c, 0xc5, 0x4c, 0x87, 0xed, 0x79, 0xed, 0x69, 0x83, 0x1e, 0x83, - 0x22, 0x21, 0xaa, 0x8e, 0xe4, 0x3f, 0xfc, 0x0c, 0xf5, 0xf0, 0x41, 0xe9, - 0xed, 0xb3, 0xb6, 0x6b, 0xef, 0x3f, 0x28, 0x1b, 0x47, 0x5f, 0x56, 0x55, - 0xf4, 0x35, 0x99, 0x99, 0x93, 0xd3, 0x57, 0x52, 0xba, 0xad, 0xc5, 0xbc, - 0x82, 0x52, 0xf6, 0x16, 0x1c, 0x8a, 0x0e, 0xac, 0xdc, 0xb7, 0x67, 0x7d, - 0x4e, 0xcb, 0x4b, 0xf1, 0xe5, 0xa8, 0xd2, 0xd8, 0xb6, 0x52, 0xf2, 0xb2, - 0xc9, 0xc8, 0x91, 0x8b, 0x86, 0x1b, 0xfc, 0xf6, 0x37, 0xbe, 0x75, 0xe1, - 0xc9, 0x67, 0xc5, 0x5d, 0xc3, 0xfe, 0xc1, 0x75, 0xe2, 0x95, 0x4b, 0x9f, - 0xb6, 0x3b, 0x09, 0xf4, 0x43, 0xd2, 0xf3, 0x22, 0xcc, 0x49, 0x05, 0xaa, - 0x0d, 0xf6, 0xda, 0x28, 0x56, 0x95, 0x11, 0xbd, 0xcf, 0x50, 0xa3, 0xc5, - 0x8e, 0x3f, 0xbd, 0x1a, 0x6c, 0x6f, 0xb0, 0xa3, 0x5d, 0xeb, 0xa9, 0x29, - 0xd4, 0x53, 0x7d, 0xaf, 0xbd, 0xb6, 0xeb, 0x14, 0xeb, 0x87, 0xfd, 0x3c, - 0x7a, 0x2f, 0x26, 0x4e, 0x20, 0xbc, 0x8b, 0x4b, 0x81, 0x7e, 0x47, 0xf7, - 0xde, 0x25, 0x07, 0xf7, 0x09, 0xcc, 0xcc, 0x40, 0x47, 0x66, 0x04, 0x51, - 0xf1, 0xb2, 0x7b, 0xa7, 0xc9, 0xa9, 0xf5, 0xaa, 0xba, 0x29, 0x16, 0x1c, - 0xf2, 0xaa, 0xf8, 0x50, 0xc3, 0xab, 0x86, 0x3e, 0x30, 0xb5, 0x19, 0x03, - 0x27, 0x23, 0xd1, 0x5a, 0x24, 0xc9, 0xe4, 0xf9, 0xee, 0xb8, 0xa5, 0x36, - 0x78, 0x7e, 0x5e, 0x30, 0xc3, 0x4b, 0x2d, 0x9c, 0xe1, 0x9c, 0x54, 0xe3, - 0x87, 0x97, 0xe2, 0x5b, 0xc0, 0x9d, 0x43, 0x1f, 0xc2, 0x3e, 0x87, 0xd0, - 0xde, 0xe7, 0xd1, 0xaa, 0xcf, 0xef, 0xc7, 0x02, 0xa8, 0x13, 0xee, 0xab, - 0xb0, 0xf9, 0x3d, 0xfe, 0x69, 0xd7, 0x11, 0xb4, 0x38, 0xb1, 0x06, 0x6a, - 0x54, 0xea, 0xd5, 0x06, 0x4c, 0x8e, 0xc2, 0xb3, 0xe8, 0xb9, 0x4e, 0xd0, - 0x0a, 0x05, 0xdc, 0xf5, 0x94, 0xda, 0x03, 0xd6, 0xa0, 0xf8, 0xf0, 0x97, - 0x96, 0x49, 0x4f, 0x8e, 0xc3, 0xba, 0x69, 0x9b, 0xcf, 0xe9, 0x10, 0x45, - 0x6f, 0xf9, 0x14, 0xc4, 0xdd, 0x65, 0x04, 0x9c, 0x26, 0x11, 0xed, 0x5b, - 0xb6, 0xf4, 0x77, 0xd8, 0xbc, 0x28, 0x6c, 0xdd, 0x59, 0x13, 0x37, 0x73, - 0x8b, 0x5a, 0xd7, 0x04, 0x90, 0xf5, 0x2d, 0xb9, 0xe8, 0x99, 0x82, 0x56, - 0xd1, 0x99, 0xa1, 0xea, 0x98, 0xaa, 0x01, 0x77, 0xe7, 0xc1, 0x6c, 0xcf, - 0xcd, 0x60, 0x7f, 0x47, 0x76, 0x84, 0x0c, 0xda, 0xa4, 0xac, 0xe9, 0x39, - 0x5d, 0x81, 0x90, 0x10, 0xf4, 0x42, 0x7c, 0xba, 0x54, 0xdc, 0x70, 0xf9, - 0x10, 0xcf, 0x7a, 0xee, 0xaf, 0xe4, 0x20, 0xae, 0x8a, 0x05, 0x27, 0x19, - 0x29, 0xd0, 0xf6, 0x14, 0xec, 0x01, 0x7d, 0xa6, 0xe3, 0x87, 0xed, 0x93, - 0xcc, 0x15, 0x6b, 0x49, 0x93, 0x70, 0xf7, 0xfe, 0x89, 0x0b, 0x40, 0x3a, - 0x83, 0x3a, 0xd5, 0x39, 0xa5, 0xe3, 0xb3, 0x7c, 0xaa, 0x22, 0xfd, 0x0c, - 0xe1, 0xf7, 0x74, 0x7e, 0xf8, 0x99, 0x46, 0x61, 0xce, 0x87, 0xe3, 0x9e, - 0xb8, 0x35, 0x79, 0x8c, 0x7e, 0x6b, 0x9b, 0x61, 0xbf, 0x7f, 0x85, 0xe8, - 0x90, 0x49, 0x6a, 0x5e, 0x88, 0xee, 0xf7, 0xa1, 0x57, 0xdd, 0xd4, 0x02, - 0x32, 0x87, 0xc7, 0x2f, 0x56, 0x02, 0x4d, 0x3e, 0x49, 0x55, 0x7a, 0x57, - 0x66, 0x25, 0xdf, 0xe4, 0x25, 0xd7, 0x46, 0x33, 0x1f, 0x14, 0xe8, 0x0c, - 0xe8, 0xaa, 0x00, 0x74, 0x6a, 0xff, 0xa8, 0x67, 0x73, 0x82, 0x45, 0xc8, - 0xea, 0x1b, 0x78, 0xa0, 0xed, 0xd4, 0x14, 0x98, 0x03, 0x04, 0x75, 0xe1, - 0xb6, 0x65, 0xc6, 0xcb, 0x6a, 0xcc, 0x7b, 0xf9, 0x44, 0x78, 0x54, 0x55, - 0x90, 0xa6, 0x0d, 0x04, 0x95, 0xcf, 0x38, 0xdb, 0x38, 0xb3, 0x46, 0x25, - 0x4f, 0xc4, 0xfd, 0x3e, 0x15, 0x86, 0x70, 0x87, 0x76, 0x21, 0x29, 0x0d, - 0xd7, 0x00, 0xe0, 0xcb, 0xef, 0x0c, 0x17, 0x9f, 0xf3, 0x58, 0x68, 0x17, - 0x64, 0x76, 0xc8, 0x3b, 0x7c, 0x88, 0x33, 0xbf, 0xf1, 0xf1, 0x4a, 0xac, - 0x05, 0x56, 0x2a, 0xf0, 0xfd, 0xc4, 0x05, 0xdf, 0x46, 0x90, 0x23, 0xcf, - 0x9d, 0x01, 0x82, 0xc0, 0x66, 0xb9, 0x4d, 0x00, 0x1e, 0x7c, 0x4c, 0x7c, - 0x2e, 0x38, 0x2a, 0x58, 0x15, 0xe7, 0xbc, 0x5c, 0x94, 0x63, 0x00, 0x6c, - 0x34, 0xb8, 0xe4, 0x4e, 0x0d, 0x78, 0x56, 0xf6, 0xce, 0x0b, 0xd7, 0xbe, - 0x02, 0xc8, 0x49, 0x19, 0x3e, 0x2b, 0x45, 0x20, 0x2d, 0xc3, 0x70, 0xc1, - 0x1d, 0xd4, 0x86, 0x81, 0x72, 0x71, 0xc2, 0x75, 0x4d, 0x40, 0xdd, 0x78, - 0x21, 0xb4, 0x39, 0x58, 0x70, 0xb2, 0x12, 0xa8, 0x4c, 0xfe, 0xdb, 0xfe, - 0x35, 0xcb, 0xfb, 0xbe, 0xb1, 0x9d, 0x19, 0xa8, 0xd9, 0x93, 0xf9, 0x6e, - 0x69, 0xc0, 0xfc, 0xf4, 0x1f, 0x9a, 0xa3, 0xc6, 0x63, 0x2c, 0xb4, 0x79, - 0x63, 0x81, 0xfe, 0x6b, 0xff, 0x5f, 0x13, 0x1f, 0x6c, 0x56, 0x5f, 0x09, - 0x57, 0x54, 0x90, 0x7e, 0x33, 0x0c, 0xd5, 0xaf, 0x2f, 0x86, 0x80, 0xdc, - 0x58, 0x26, 0xd4, 0x10, 0x00, 0xd4, 0x0c, 0x7e, 0x9b, 0x4d, 0x5a, 0x35, - 0x71, 0xe3, 0xa5, 0xec, 0xd5, 0x49, 0xba, 0x11, 0xc8, 0x75, 0xd7, 0xf3, - 0xc5, 0x38, 0x17, 0xd5, 0xa1, 0x85, 0xb7, 0xd8, 0x91, 0x66, 0xbe, 0x34, - 0xc7, 0xef, 0xed, 0xda, 0x45, 0xe2, 0xfa, 0xcc, 0xee, 0xda, 0x36, 0x58, - 0xfd, 0xb6, 0x77, 0x10, 0x18, 0xfb, 0x24, 0x98, 0x99, 0x14, 0x9e, 0xc5, - 0x05, 0xbd, 0x64, 0xbe, 0xce, 0x5b, 0xa3, 0x41, 0xe3, 0x3d, 0x9c, 0x05, - 0x14, 0x99, 0x9b, 0xd3, 0xe7, 0x99, 0x45, 0x3d, 0xfe, 0xe5, 0xc3, 0x75, - 0x14, 0x43, 0x8a, 0xf9, 0xf8, 0xe2, 0x93, 0x9e, 0xdf, 0x09, 0xa5, 0x8a, - 0xda, 0xfa, 0xf2, 0x8e, 0xf6, 0x35, 0x39, 0x59, 0x6f, 0xc7, 0x44, 0x50, - 0x82, 0xb0, 0x3c, 0x00, 0xb2, 0xd3, 0x43, 0x94, 0x19, 0x48, 0x7a, 0x73, - 0xb0, 0xcb, 0xe7, 0xae, 0xe7, 0x93, 0x01, 0x5c, 0xd8, 0xe7, 0xbd, 0xd0, - 0x83, 0x06, 0x9d, 0x02, 0x28, 0x04, 0x21, 0xc6, 0x9e, 0x7a, 0x9e, 0xbd, - 0xfa, 0xa6, 0x30, 0x98, 0xa1, 0xd0, 0x5f, 0x6c, 0x70, 0xaf, 0x17, 0x7d, - 0x6d, 0x49, 0x65, 0xf6, 0xda, 0x54, 0x1e, 0x36, 0x81, 0x08, 0x32, 0xb1, - 0xb5, 0xbe, 0x36, 0x46, 0x0c, 0x47, 0xb6, 0x1b, 0x19, 0x07, 0x34, 0xca, - 0x3b, 0x48, 0x40, 0xf5, 0xfb, 0x2d, 0x21, 0x3b, 0x58, 0xdb, 0x57, 0xb6, - 0x1f, 0x1b, 0xdd, 0x97, 0x2c, 0x8a, 0xc5, 0xf1, 0xb0, 0x8c, 0x42, 0xea, - 0xe9, 0x5d, 0x9b, 0x0e, 0xba, 0x70, 0x4b, 0x2f, 0xd7, 0x42, 0x44, 0x74, - 0xca, 0x54, 0xf8, 0x15, 0x01, 0xa8, 0x46, 0xe1, 0xf2, 0x45, 0x3e, 0x9b, - 0x9d, 0x31, 0x70, 0xea, 0xda, 0xa1, 0x92, 0xa0, 0x30, 0x50, 0xf2, 0xab, - 0xba, 0xe6, 0x55, 0xd7, 0xe6, 0x62, 0xff, 0x92, 0x8f, 0x49, 0x4f, 0x56, - 0x16, 0x48, 0x94, 0xb7, 0x7f, 0x7c, 0x6b, 0xb3, 0x6a, 0x83, 0x92, 0x94, - 0x42, 0x30, 0x2f, 0xbd, 0xd7, 0x53, 0xbe, 0x57, 0x35, 0x75, 0x5e, 0x6f, - 0x51, 0x7d, 0x1d, 0x91, 0x17, 0xe2, 0xaf, 0x4e, 0x98, 0x11, 0x3b, 0x1d, - 0xab, 0x14, 0x96, 0x84, 0xfa, 0xa8, 0x27, 0x4e, 0xef, 0x53, 0x56, 0x6c, - 0x5e, 0x7e, 0x47, 0x2f, 0xec, 0x14, 0xd7, 0xa8, 0x7a, 0x38, 0x06, 0xc4, - 0x84, 0xe0, 0x02, 0x13, 0xa3, 0xdb, 0xc4, 0x87, 0xcd, 0xbf, 0x33, 0x01, - 0x4e, 0xd4, 0x12, 0xc0, 0x33, 0x3b, 0x8e, 0x2d, 0xa9, 0x42, 0x47, 0x49, - 0x6b, 0x33, 0x9b, 0x95, 0x72, 0x4b, 0x9e, 0x1f, 0x5b, 0xaa, 0x0a, 0x2d, - 0xf1, 0xba, 0x28, 0x5c, 0xba, 0x6f, 0x33, 0xbf, 0x7c, 0x61, 0x17, 0xbb, - 0x3d, 0xd5, 0x9d, 0x6f, 0x3a, 0xaf, 0x6c, 0x60, 0xce, 0xd7, 0x49, 0xd4, - 0x53, 0xbd, 0xcd, 0x0c, 0x99, 0x15, 0x8b, 0x2b, 0xa8, 0x24, 0x95, 0x44, - 0x59, 0xb1, 0xf1, 0xb4, 0xac, 0x28, 0xdd, 0xe9, 0x75, 0x57, 0x17, 0xc5, - 0xff, 0xe9, 0x36, 0xe3, 0x9e, 0x33, 0x42, 0xab, 0xfd, 0xc8, 0xb3, 0x89, - 0x8c, 0x7d, 0x32, 0x2b, 0x05, 0xb5, 0x91, 0x97, 0x25, 0x1c, 0x21, 0xcd, - 0x05, 0xaa, 0x8e, 0x0e, 0xff, 0xd5, 0xdf, 0xfc, 0xc1, 0xc5, 0x14, 0x40, - 0x97, 0x9c, 0xf7, 0x27, 0x41, 0x39, 0x1c, 0xe0, 0xa6, 0x3f, 0xa6, 0xdd, - 0x06, 0x77, 0x19, 0xad, 0xad, 0x12, 0x71, 0x60, 0x82, 0xc6, 0xc3, 0x66, - 0x51, 0xdb, 0xb3, 0x3a, 0x49, 0x4a, 0xed, 0xcc, 0xce, 0x11, 0xda, 0x94, - 0xcc, 0xd8, 0xa2, 0x47, 0x94, 0x59, 0xb1, 0x9a, 0xb4, 0x31, 0xe7, 0x4b, - 0xe6, 0x03, 0xc7, 0x19, 0x08, 0xbe, 0xf8, 0x64, 0x60, 0x1b, 0x1f, 0x7a, - 0x7d, 0x9b, 0xa0, 0xf3, 0x48, 0xa4, 0x00, 0xc6, 0xac, 0xb0, 0x31, 0xcb, - 0x1d, 0xd9, 0x95, 0x96, 0xa2, 0x5d, 0x4b, 0x22, 0xa5, 0xa6, 0x28, 0x83, - 0xcb, 0xce, 0xc2, 0x32, 0x22, 0x67, 0x5c, 0xde, 0x5c, 0x61, 0x2c, 0x7c, - 0x67, 0xbd, 0x09, 0xc2, 0xd8, 0x3d, 0xdd, 0x9e, 0xf1, 0x75, 0x94, 0xbd, - 0x4a, 0x95, 0xc8, 0x57, 0x42, 0xd8, 0xf0, 0xed, 0x7d, 0x81, 0x5f, 0xb5, - 0xdb, 0xc2, 0xa5, 0x58, 0x2b, 0x96, 0x39, 0x64, 0x1a, 0xf6, 0x5c, 0xfb, - 0x97, 0xdb, 0x06, 0xec, 0xd0, 0x1b, 0x8f, 0xb1, 0xb3, 0x5f, 0x99, 0x05, - 0x86, 0x37, 0xcf, 0x78, 0xa9, 0xee, 0xac, 0x52, 0xfb, 0xce, 0xa1, 0x1e, - 0x44, 0xef, 0xef, 0xba, 0x88, 0x8f, 0xa8, 0x92, 0xb0, 0x6b, 0xdf, 0xab, - 0x3f, 0x43, 0x7d, 0x80, 0xcc, 0xd0, 0xb9, 0x45, 0xfc, 0x35, 0x3a, 0x76, - 0xf4, 0x77, 0x20, 0x74, 0xae, 0xf9, 0x98, 0x50, 0xdf, 0xb1, 0xc2, 0x87, - 0x33, 0x4e, 0x3e, 0x08, 0x81, 0xe5, 0x07, 0x01, 0xec, 0x30, 0x40, 0x0c, - 0xd8, 0x42, 0xa8, 0xca, 0xe1, 0x5a, 0x95, 0x22, 0x50, 0x1f, 0xf4, 0x6a, - 0xcd, 0xd9, 0x89, 0xff, 0x94, 0xb3, 0x6a, 0x23, 0xfa, 0x78, 0x6d, 0xdf, - 0x19, 0x65, 0x6d, 0x38, 0x70, 0x0d, 0xd4, 0x22, 0x19, 0xe7, 0x28, 0xbc, - 0x4f, 0xf3, 0x13, 0xf0, 0xbf, 0x83, 0x85, 0x77, 0x54, 0xde, 0xdf, 0xcd, - 0x3c, 0x36, 0xfc, 0x10, 0xf1, 0x55, 0xb8, 0x8e, 0x6b, 0xc3, 0x1f, 0xa1, - 0x97, 0xa2, 0xa9, 0x71, 0x5f, 0x77, 0xc3, 0xad, 0x58, 0x8d, 0xc7, 0xb4, - 0xb8, 0x4e, 0xdf, 0xf8, 0x4f, 0xac, 0xb2, 0xb4, 0xe8, 0x8c, 0x17, 0x31, - 0x16, 0xbe, 0xe3, 0x38, 0xbd, 0x41, 0x39, 0xae, 0x08, 0xfc, 0xbd, 0xf1, - 0x49, 0x67, 0x16, 0xd4, 0xfb, 0xc3, 0x5f, 0x7f, 0xf0, 0xdf, 0x07, 0x9b, - 0x9f, 0x61, 0xac, 0xf9, 0x89, 0x38, 0x7f, 0x24, 0x76, 0xfd, 0x3c, 0xb8, - 0xcf, 0xa1, 0x3c, 0xfc, 0x99, 0xf9, 0xb8, 0x72, 0x1e, 0x04, 0xdd, 0x4d, - 0x1d, 0xfa, 0x0b, 0xcc, 0xb0, 0x5a, 0xa5, 0xfa, 0x99, 0x43, 0xe4, 0x91, - 0x5c, 0xfc, 0xa3, 0x06, 0xfb, 0x33, 0xbf, 0x59, 0x88, 0x3f, 0x8a, 0x05, - 0xa7, 0xa9, 0xe4, 0x1d, 0xc8, 0x43, 0xd3, 0x11, 0x2b, 0x03, 0xdb, 0xe4, - 0x09, 0x36, 0xa0, 0x24, 0xc0, 0xf9, 0xc3, 0x4e, 0xf2, 0xf7, 0xd7, 0x9e, - 0x96, 0x90, 0x8b, 0x05, 0x6e, 0x83, 0xac, 0x4d, 0x20, 0x78, 0xeb, 0x32, - 0x17, 0xc1, 0xbf, 0xb1, 0x6e, 0xf7, 0x0b, 0x6c, 0x6f, 0x5b, 0xac, 0x10, - 0xc7, 0xd3, 0xe4, 0x83, 0x51, 0xb2, 0xd9, 0xc8, 0x57, 0x12, 0x45, 0x8b, - 0x4a, 0xba, 0x1b, 0xd5, 0xa9, 0xea, 0x3c, 0x30, 0x23, 0x34, 0x70, 0x6c, - 0x4e, 0x38, 0xa6, 0xa4, 0xc9, 0x3b, 0x52, 0x18, 0x47, 0xc0, 0x23, 0xa1, - 0x46, 0x11, 0xd1, 0x98, 0x43, 0x85, 0x2d, 0xe9, 0x0a, 0x23, 0x0b, 0x55, - 0xb7, 0xee, 0x81, 0xd0, 0xbc, 0x0b, 0x80, 0x2a, 0x38, 0xae, 0xd6, 0x63, - 0x23, 0x4a, 0x13, 0xe5, 0x26, 0x10, 0x26, 0x8c, 0xbf, 0x75, 0x8d, 0x74, - 0x30, 0xb4, 0xa1, 0x40, 0x80, 0xdb, 0xba, 0xaa, 0x4b, 0x69, 0x46, 0x5a, - 0x1b, 0x4a, 0x61, 0xec, 0x02, 0xa8, 0x37, 0x26, 0x63, 0xd8, 0x69, 0x27, - 0xeb, 0x8d, 0x87, 0x00, 0xd9, 0x54, 0x49, 0x14, 0x4e, 0x34, 0x55, 0x5d, - 0xb0, 0x06, 0xf2, 0x54, 0x3c, 0x3e, 0xa7, 0x74, 0xe0, 0xdf, 0xce, 0xc4, - 0x46, 0x3b, 0xc5, 0xbe, 0xd5, 0x8b, 0xdf, 0xf5, 0xab, 0x40, 0x7f, 0x99, - 0x11, 0x57, 0x34, 0x77, 0xfc, 0x0c, 0xf9, 0x1b, 0xeb, 0x4b, 0x1e, 0xf5, - 0xf5, 0x69, 0x85, 0xc2, 0x16, 0x04, 0x88, 0x59, 0x89, 0xa8, 0x16, 0x5a, - 0x1a, 0xd3, 0x7d, 0xfb, 0x8c, 0x45, 0x30, 0xdc, 0x70, 0x3d, 0x08, 0x91, - 0x5f, 0xd4, 0x28, 0x1c, 0x73, 0x36, 0x32, 0xd1, 0xcc, 0x82, 0x09, 0xf7, - 0xae, 0xbc, 0xc5, 0xb5, 0xe0, 0x08, 0x94, 0xa6, 0x8d, 0x4d, 0xd6, 0xbd, - 0xf1, 0x9b, 0x6e, 0x37, 0x78, 0xef, 0x77, 0x6d, 0x01, 0x33, 0xcd, 0x78, - 0x8b, 0x9f, 0x99, 0x54, 0xaa, 0xa9, 0xed, 0x25, 0xc1, 0x44, 0x9c, 0xe4, - 0x2a, 0x6c, 0xd2, 0x5d, 0x74, 0xc5, 0x6a, 0xc5, 0xfe, 0x1c, 0xdf, 0xa9, - 0x38, 0xab, 0x4d, 0xf1, 0x04, 0x9b, 0x6a, 0x7a, 0xca, 0x43, 0xf5, 0x3a, - 0x96, 0x60, 0x03, 0x0e, 0x07, 0x02, 0x00, 0xb3, 0x8b, 0xdc, 0x0e, 0xd9, - 0x23, 0x10, 0x33, 0x15, 0x77, 0xfc, 0xe3, 0x81, 0xf7, 0x60, 0x70, 0x01, - 0x84, 0x03, 0xa7, 0x11, 0x49, 0x58, 0x29, 0xe6, 0x3e, 0x09, 0x73, 0x9f, - 0xf4, 0xe5, 0x2b, 0x66, 0x86, 0x34, 0x66, 0x1a, 0xcd, 0xcd, 0xba, 0xa2, - 0x75, 0xbf, 0x13, 0x1f, 0x6d, 0xed, 0x0e, 0xcc, 0x8b, 0x25, 0xbf, 0x40, - 0xac, 0x83, 0x92, 0x2b, 0x27, 0x79, 0xc6, 0x1e, 0xb5, 0x67, 0x34, 0x8b, - 0x7a, 0x49, 0x38, 0xbc, 0x0c, 0x5d, 0x2c, 0xef, 0x36, 0xfe, 0xba, 0xec, - 0xee, 0xc4, 0x5b, 0x05, 0x01, 0x6f, 0x07, 0xc9, 0x7d, 0x5e, 0x5e, 0x04, - 0x0f, 0x3d, 0x27, 0x91, 0x35, 0x7b, 0x54, 0xe9, 0x81, 0xa5, 0x73, 0x02, - 0x4a, 0x84, 0x02, 0x98, 0xbc, 0x07, 0x4a, 0x1e, 0x60, 0x9f, 0xbb, 0x07, - 0xc3, 0x1e, 0x38, 0x18, 0x05, 0xc2, 0x39, 0xb5, 0x87, 0xfc, 0xa2, 0xe4, - 0xcb, 0x1b, 0x15, 0x70, 0x49, 0x8e, 0x2a, 0x01, 0x38, 0xd5, 0x69, 0xa2, - 0xa2, 0xd7, 0x5e, 0x99, 0x62, 0x69, 0xe2, 0x39, 0x43, 0x5c, 0x09, 0xe1, - 0x9f, 0xd8, 0x6b, 0x98, 0xb0, 0x7c, 0x67, 0x77, 0xe1, 0x9e, 0xc2, 0x80, - 0xf5, 0xab, 0xa7, 0xbd, 0x27, 0x2f, 0xf6, 0x0d, 0x02, 0xe7, 0xfe, 0x81, - 0xda, 0x38, 0x70, 0x74, 0xca, 0x73, 0xf2, 0x3d, 0xa9, 0xb8, 0x8b, 0xf9, - 0x15, 0xc8, 0x7d, 0xe4, 0xe2, 0x61, 0x16, 0xdd, 0x3f, 0x0e, 0x5c, 0x26, - 0x25, 0xdc, 0x17, 0x51, 0x1c, 0x45, 0xec, 0xba, 0xe9, 0x50, 0x88, 0xd6, - 0x7f, 0x09, 0x3d, 0xbb, 0xa8, 0x35, 0x11, 0x8b, 0xe5, 0x74, 0xc0, 0x70, - 0x7b, 0xe2, 0x5b, 0xbd, 0x49, 0xba, 0xae, 0x03, 0x08, 0x55, 0xfc, 0x35, - 0xa4, 0xb4, 0xf1, 0x9e, 0xb5, 0x9a, 0x11, 0x02, 0x50, 0xd9, 0x2f, 0x74, - 0x85, 0xe9, 0x72, 0x5c, 0x14, 0x32, 0x56, 0x35, 0xf7, 0xe4, 0x03, 0xb8, - 0xf3, 0xef, 0x32, 0xb7, 0x20, 0x3f, 0xed, 0x0b, 0xac, 0x62, 0xee, 0x19, - 0x2a, 0x0f, 0xc1, 0x6c, 0xb9, 0x28, 0x0c, 0xd7, 0xa3, 0x73, 0xe8, 0xa5, - 0x39, 0x04, 0x82, 0x96, 0xbf, 0xdc, 0xc5, 0xdc, 0x75, 0xeb, 0xb8, 0xa1, - 0xb9, 0x87, 0xa0, 0xc6, 0xef, 0x7d, 0xe4, 0xb2, 0xb4, 0x01, 0x62, 0xa1, - 0xd4, 0x67, 0x44, 0xc2, 0x04, 0x0c, 0x40, 0x17, 0x6f, 0x50, 0x86, 0xb8, - 0x56, 0x22, 0xa4, 0xd8, 0x81, 0xfa, 0xaf, 0x1e, 0x26, 0xa4, 0x87, 0xc8, - 0xa1, 0x85, 0xf9, 0x72, 0x1a, 0xf7, 0x71, 0x16, 0x1b, 0x17, 0x36, 0x11, - 0xf9, 0x30, 0x9a, 0x16, 0x2d, 0x5b, 0x89, 0x7a, 0x72, 0x77, 0xfa, 0x7e, - 0x5d, 0xb8, 0x12, 0x81, 0xee, 0x69, 0x38, 0x04, 0x40, 0x5e, 0x1d, 0xec, - 0x6b, 0xe3, 0x83, 0xaf, 0x83, 0x4c, 0x41, 0xbd, 0xdf, 0x20, 0xa6, 0x7c, - 0x2a, 0x58, 0x63, 0xd0, 0x10, 0xa7, 0x8e, 0xf3, 0xb5, 0x71, 0xb6, 0x2e, - 0x7a, 0x0c, 0xb1, 0x6c, 0x9a, 0x26, 0x25, 0x9a, 0xde, 0x15, 0x91, 0x3f, - 0xb5, 0x1a, 0x9b, 0x93, 0xea, 0x59, 0xa2, 0xbf, 0x17, 0x6e, 0xaf, 0xe7, - 0xd2, 0xc7, 0x31, 0x70, 0x6d, 0xaa, 0xe5, 0x9c, 0x27, 0x3b, 0x0f, 0xf9, - 0x23, 0xae, 0xfd, 0x90, 0xdd, 0x38, 0x7d, 0x51, 0xe8, 0xb5, 0x7b, 0xab, - 0xbd, 0xab, 0x36, 0xa6, 0x04, 0xe2, 0x64, 0x9c, 0x5d, 0xe8, 0xda, 0xa4, - 0xa1, 0xb4, 0x0e, 0xa3, 0xe5, 0xca, 0xa5, 0x1a, 0x90, 0x83, 0x33, 0x39, - 0x43, 0x5a, 0x0c, 0x02, 0x10, 0xcf, 0xd9, 0xb1, 0x0c, 0x82, 0x8a, 0x30, - 0xf6, 0x95, 0xcd, 0xc0, 0xed, 0xec, 0xf8, 0x29, 0xb5, 0xa1, 0x48, 0xfc, - 0xd4, 0x9a, 0x1f, 0x57, 0x3b, 0xff, 0x50, 0x86, 0xa4, 0x48, 0x41, 0x4b, - 0xe0, 0xce, 0xa9, 0x17, 0x21, 0x35, 0x33, 0x5c, 0x71, 0x42, 0x2e, 0x3d, - 0xb3, 0xc4, 0xb5, 0xb7, 0x7a, 0x66, 0x89, 0x6b, 0x3f, 0x2c, 0x5c, 0x02, - 0x22, 0x6c, 0xe1, 0xb8, 0xbf, 0xc2, 0x71, 0x63, 0x4d, 0x97, 0xb1, 0x16, - 0x91, 0x65, 0x67, 0x03, 0x34, 0xba, 0x7b, 0xed, 0x31, 0xfe, 0x75, 0xc8, - 0x85, 0x2c, 0xbb, 0x84, 0xb6, 0x6e, 0xd8, 0x97, 0x0d, 0xdb, 0xaa, 0x61, - 0x5a, 0x91, 0x5d, 0x6a, 0x15, 0x9a, 0x89, 0x1b, 0xf1, 0x1f, 0x50, 0x57, - 0x56, 0x25, 0x27, 0xfb, 0x4f, 0x58, 0xde, 0xd4, 0xaf, 0x59, 0xbc, 0x37, - 0x28, 0x03, 0xe5, 0xe9, 0x1d, 0x24, 0xf5, 0x73, 0xdd, 0x13, 0x37, 0x7b, - 0x0d, 0x6c, 0xfa, 0x4e, 0x23, 0x74, 0xdf, 0x5c, 0x7f, 0xcd, 0x60, 0x49, - 0x90, 0x41, 0xd6, 0xdd, 0x46, 0x0a, 0xcf, 0xef, 0x7d, 0x98, 0x8c, 0xb4, - 0xb3, 0x83, 0xe3, 0x3d, 0x37, 0x75, 0x3c, 0x33, 0x4a, 0xe6, 0x84, 0x9b, - 0x97, 0x68, 0xd6, 0xd0, 0x1a, 0x1b, 0xf1, 0xfa, 0x4f, 0x1c, 0x41, 0x04, - 0x75, 0x56, 0xdf, 0xc3, 0x4c, 0xab, 0xda, 0x2d, 0x00, 0x78, 0x38, 0x8d, - 0xe2, 0xf3, 0x40, 0x2a, 0x2c, 0x8f, 0x61, 0x32, 0x6a, 0xf0, 0xa5, 0xa5, - 0x3d, 0xda, 0xc1, 0x54, 0x9f, 0xb2, 0x1e, 0xfa, 0xfa, 0xa1, 0x61, 0xae, - 0x6a, 0xb7, 0x36, 0xe9, 0xb7, 0x2e, 0xeb, 0x1f, 0xee, 0x88, 0xad, 0xcc, - 0xb8, 0x8d, 0x82, 0x2a, 0x7b, 0x71, 0x49, 0x2a, 0xfd, 0x0e, 0x4f, 0xc3, - 0x4f, 0xb6, 0x0d, 0x23, 0xca, 0x65, 0x03, 0x59, 0xc8, 0x66, 0x3b, 0x14, - 0x19, 0x10, 0x31, 0x2c, 0xc4, 0x16, 0x08, 0xda, 0xc9, 0xc7, 0x2e, 0x5e, - 0xef, 0x5d, 0xa9, 0xfb, 0xcd, 0xba, 0x02, 0x23, 0x71, 0xb1, 0x03, 0xd8, - 0xb8, 0x8f, 0x43, 0x1f, 0x39, 0x01, 0x5f, 0x0c, 0x91, 0x2b, 0x16, 0x20, - 0xfc, 0x96, 0xc2, 0xa6, 0x53, 0xae, 0x14, 0xba, 0x8c, 0x20, 0x83, 0x60, - 0xfe, 0x8b, 0xe3, 0xa7, 0x01, 0xfb, 0x0c, 0x46, 0x99, 0x6e, 0x99, 0x44, - 0xdb, 0x81, 0xea, 0x84, 0xca, 0x43, 0xfa, 0xdf, 0xcc, 0xd5, 0x60, 0xfc, - 0xd3, 0x1a, 0xcb, 0x7c, 0x2f, 0x0f, 0x45, 0xa6, 0xc7, 0xf4, 0xf0, 0x57, - 0x24, 0xe3, 0x15, 0xda, 0xdf, 0x8a, 0x72, 0x2d, 0xa3, 0x35, 0x2e, 0x67, - 0x23, 0xcc, 0x97, 0xab, 0x48, 0x0b, 0xfa, 0xc7, 0xcb, 0x24, 0x95, 0xa3, - 0x2e, 0x34, 0x04, 0x17, 0x61, 0x1e, 0x1e, 0x5a, 0x9d, 0xbc, 0x14, 0x81, - 0xf9, 0x15, 0x2f, 0x85, 0xc8, 0x18, 0xf4, 0xd9, 0xab, 0xc7, 0x97, 0x4f, - 0xd2, 0x6d, 0xd9, 0x3c, 0x57, 0xa0, 0x9f, 0x9d, 0x99, 0x5f, 0x7c, 0x91, - 0x65, 0xa8, 0x83, 0x57, 0xa2, 0x1a, 0x4a, 0x0b, 0xf5, 0xfd, 0x48, 0xb5, - 0xd2, 0xe9, 0x26, 0x8a, 0x49, 0xb7, 0xf8, 0x29, 0x12, 0x53, 0x6c, 0xaa, - 0xc5, 0x1c, 0xb6, 0x2c, 0x5e, 0x92, 0xff, 0xaa, 0xd2, 0x28, 0x43, 0x5b, - 0x30, 0x06, 0x3b, 0xc8, 0x87, 0x63, 0xe5, 0x1f, 0x4e, 0x30, 0x05, 0xf2, - 0x08, 0xfc, 0xce, 0xab, 0xde, 0x63, 0x0d, 0x4e, 0xaf, 0x33, 0x5b, 0x4f, - 0xac, 0xca, 0xa0, 0xb1, 0xbf, 0xe7, 0xf7, 0xf5, 0xa3, 0xf2, 0xab, 0x8c, - 0xa3, 0x87, 0xb8, 0xd4, 0x7f, 0x78, 0x35, 0x54, 0x03, 0xfd, 0x9e, 0x3c, - 0xff, 0xba, 0x67, 0x06, 0xd9, 0x3a, 0x81, 0x52, 0xe3, 0x06, 0x98, 0xca, - 0x13, 0x03, 0xda, 0xc6, 0x0b, 0x48, 0xbf, 0xbf, 0xbc, 0x26, 0xbc, 0xf2, - 0x42, 0x2d, 0xed, 0x83, 0xa4, 0x9d, 0x6d, 0x85, 0x0b, 0x22, 0x11, 0x07, - 0x0c, 0x60, 0x4d, 0x41, 0xb1, 0x47, 0x03, 0xfd, 0xf1, 0xaa, 0xb1, 0x08, - 0x17, 0xdb, 0xf1, 0xd9, 0x2a, 0x1d, 0x0e, 0xc2, 0xa8, 0x73, 0xd8, 0xab, - 0xd7, 0xb0, 0x5d, 0x93, 0x11, 0x9f, 0x84, 0x19, 0xd9, 0x49, 0x66, 0x75, - 0x1d, 0xe3, 0x79, 0x63, 0xe7, 0xdc, 0x1f, 0xed, 0x55, 0xb2, 0xd1, 0x0b, - 0x2b, 0xf8, 0x59, 0x6f, 0xbf, 0xa8, 0xdc, 0x08, 0xe4, 0xef, 0x65, 0xee, - 0x5d, 0xad, 0x0a, 0xf2, 0x60, 0x1b, 0xab, 0xdd, 0xf0, 0xb1, 0x98, 0xdf, - 0x81, 0x61, 0xc1, 0x1b, 0xfd, 0x90, 0x94, 0x9a, 0x9f, 0xe9, 0xe6, 0xb9, - 0x5d, 0xfb, 0x24, 0x90, 0x4d, 0xd6, 0xe7, 0x3f, 0x20, 0x17, 0xae, 0xd7, - 0x40, 0x0a, 0xd4, 0xf3, 0x62, 0x63, 0xc3, 0x55, 0x5f, 0x0e, 0xae, 0x68, - 0x22, 0x03, 0x7b, 0x5d, 0x93, 0x2a, 0x10, 0x60, 0x6a, 0x28, 0x2e, 0xaf, - 0xec, 0x5c, 0xb6, 0x60, 0x3f, 0xcb, 0xd9, 0x47, 0x0e, 0xc3, 0x96, 0xee, - 0x94, 0x39, 0x19, 0x03, 0xfc, 0x48, 0xdf, 0x83, 0x8c, 0xbb, 0xdd, 0xe0, - 0xe3, 0xe5, 0xc9, 0xb9, 0x7d, 0xbc, 0x29, 0x1a, 0xbe, 0x2f, 0xc7, 0xff, - 0x04, 0xff, 0xd0, 0xd7, 0x13, 0x34, 0x59, 0xa6, 0xf2, 0x3a, 0x93, 0x97, - 0x10, 0x73, 0x21, 0x82, 0x00, 0x13, 0x6f, 0x3c, 0x3f, 0x37, 0x17, 0x18, - 0x9d, 0x31, 0x21, 0xdc, 0xaa, 0xdf, 0xe2, 0x2e, 0x4b, 0x7b, 0xc9, 0xdb, - 0x78, 0x2d, 0xbe, 0x9c, 0x20, 0xe0, 0x39, 0x0b, 0x5c, 0xbb, 0x33, 0x12, - 0x07, 0x3b, 0xfb, 0x7b, 0xfb, 0xaa, 0xb8, 0xb4, 0xa6, 0x31, 0xe7, 0xcc, - 0xd8, 0x70, 0x19, 0xd2, 0x14, 0x38, 0xcf, 0x37, 0x8f, 0x6a, 0xcb, 0xb7, - 0x06, 0xc2, 0xe9, 0xb3, 0x44, 0xda, 0x4b, 0x94, 0x0a, 0x8e, 0x07, 0x44, - 0xe0, 0x10, 0x99, 0x31, 0x63, 0x3c, 0x5e, 0x9d, 0x8f, 0x9f, 0x7c, 0x5e, - 0x00, 0x18, 0x0a, 0x6f, 0xe4, 0x7a, 0x3b, 0x6a, 0x8c, 0xc7, 0xf6, 0x1b, - 0x79, 0x9c, 0xbd, 0x78, 0x75, 0x58, 0x18, 0xe8, 0xc3, 0x1a, 0xa3, 0xaf, - 0x8e, 0x63, 0x47, 0x35, 0xbd, 0xed, 0xff, 0x07, 0x0b, 0xe7, 0xb0, 0xab, - 0x8e, 0xc7, 0x45, 0xc3, 0xe4, 0x4f, 0xe5, 0x56, 0x82, 0xd1, 0x23, 0xba, - 0x18, 0x87, 0xf2, 0xc6, 0xe1, 0xf1, 0x6e, 0x61, 0x59, 0xcf, 0xf8, 0xb0, - 0xef, 0xd3, 0xde, 0xea, 0x73, 0xe2, 0x63, 0x41, 0xe3, 0xeb, 0x73, 0x3f, - 0x3a, 0xf0, 0x03, 0x89, 0x5c, 0xc6, 0x20, 0x46, 0xf5, 0x07, 0x80, 0x3d, - 0x3b, 0x2d, 0x4c, 0x38, 0xd7, 0x76, 0x9a, 0x47, 0x5e, 0x3f, 0xbb, 0xeb, - 0x7c, 0xd3, 0x8d, 0xb4, 0xc0, 0x4b, 0x84, 0x0e, 0xd9, 0x9f, 0x9b, 0xcf, - 0xc0, 0x1e, 0x38, 0x37, 0xae, 0x9e, 0xdc, 0xc9, 0xc1, 0xb3, 0xe6, 0x58, - 0xe5, 0x77, 0x8e, 0xa3, 0xac, 0xca, 0xf6, 0xe9, 0x5b, 0x21, 0xe3, 0x61, - 0x2d, 0x32, 0x5d, 0xc0, 0x01, 0xb7, 0x73, 0x2c, 0xec, 0x98, 0xe3, 0xc3, - 0x73, 0xa2, 0x4b, 0x61, 0x42, 0xd8, 0x2b, 0x90, 0xf8, 0x6f, 0x47, 0x53, - 0xab, 0x70, 0xa6, 0x70, 0x26, 0x28, 0xcc, 0xb3, 0x15, 0x1d, 0xc3, 0x4f, - 0xc2, 0x75, 0xf2, 0x05, 0xb3, 0xcd, 0xd7, 0x89, 0xab, 0xe4, 0xa8, 0x6d, - 0x06, 0x20, 0x96, 0x85, 0x0a, 0x8a, 0x42, 0x21, 0x95, 0x76, 0x93, 0xf7, - 0x33, 0xdd, 0xa5, 0x7e, 0x46, 0xee, 0xf7, 0xef, 0xef, 0xfe, 0x85, 0x62, - 0xb9, 0x8a, 0xe4, 0xd8, 0x5d, 0x6b, 0x28, 0x4d, 0x19, 0x77, 0x51, 0xcf, - 0xf2, 0x4c, 0xd8, 0x16, 0xb1, 0xa7, 0x4a, 0x20, 0x25, 0x4e, 0xf0, 0x9e, - 0xe9, 0x5e, 0xf5, 0xc4, 0xde, 0xc7, 0x1d, 0x90, 0x95, 0x24, 0xf9, 0x3b, - 0x1e, 0x86, 0x7f, 0xce, 0x22, 0xe9, 0xf3, 0x99, 0x5e, 0x0c, 0xea, 0x45, - 0x2f, 0x2b, 0xb3, 0x13, 0xe4, 0xc6, 0x36, 0xfd, 0x4c, 0x99, 0x77, 0x10, - 0x2b, 0x00, 0x98, 0xc1, 0x60, 0x22, 0x15, 0x50, 0x63, 0xf5, 0x81, 0xce, - 0xc6, 0x6f, 0x5e, 0xb1, 0x88, 0x76, 0xa1, 0xdb, 0xec, 0x4e, 0x37, 0xdf, - 0xce, 0x31, 0xf8, 0xf0, 0x95, 0x05, 0x41, 0xfd, 0xbc, 0xe8, 0xc9, 0xfb, - 0x87, 0x88, 0xf2, 0xc3, 0xf3, 0x25, 0x0f, 0x1a, 0xa4, 0x8d, 0x55, 0x39, - 0x10, 0xff, 0x9e, 0x7f, 0xfa, 0xed, 0x3f, 0x1d, 0x29, 0x90, 0xc2, 0xf4, - 0x55, 0x71, 0xa2, 0xf5, 0xda, 0x10, 0x6b, 0xa8, 0xa3, 0xab, 0x60, 0x86, - 0x8a, 0x90, 0x7f, 0x95, 0x16, 0x7b, 0x0d, 0xf8, 0x62, 0x09, 0xd0, 0x73, - 0x7a, 0x34, 0xb4, 0x06, 0xf2, 0xba, 0x0e, 0xf8, 0x59, 0x96, 0xc8, 0x3f, - 0xa5, 0xc6, 0x84, 0x46, 0xff, 0xe2, 0x72, 0xc9, 0xa2, 0xe9, 0xe5, 0xb4, - 0xb6, 0x2a, 0x20, 0x66, 0x17, 0x1c, 0xbf, 0xb9, 0xb4, 0x2f, 0x2e, 0x2d, - 0x1c, 0x45, 0xbb, 0xe7, 0x9e, 0x52, 0xe1, 0xda, 0x30, 0x7d, 0x58, 0x73, - 0x4e, 0x47, 0x84, 0x0a, 0xf1, 0x49, 0x1e, 0x0a, 0x74, 0x2c, 0x6f, 0x8e, - 0xe4, 0x11, 0x86, 0x1a, 0x08, 0xe6, 0x73, 0x93, 0x80, 0xa1, 0x68, 0xf7, - 0x3a, 0x2b, 0x6b, 0x88, 0xf5, 0xdb, 0x6b, 0x58, 0x99, 0x23, 0xbb, 0x3c, - 0x3a, 0x93, 0x9c, 0x2c, 0x4e, 0x4f, 0x3e, 0xfd, 0xdb, 0x08, 0x22, 0x79, - 0x58, 0x61, 0x57, 0x8e, 0xb9, 0x8c, 0xc9, 0x65, 0x99, 0x69, 0x3d, 0xbf, - 0x99, 0x71, 0xef, 0xb8, 0x2f, 0x47, 0x35, 0xde, 0xc7, 0x19, 0xf2, 0xb8, - 0x2a, 0x27, 0xbe, 0xb3, 0x71, 0xca, 0x30, 0xf0, 0x51, 0x36, 0xc0, 0xf9, - 0xe0, 0x7a, 0x80, 0x18, 0xbf, 0x2f, 0x57, 0x1c, 0x6c, 0xe3, 0xc8, 0xbe, - 0x92, 0xf3, 0x61, 0x78, 0x55, 0x2c, 0xcf, 0x73, 0xf7, 0x96, 0xd0, 0x5c, - 0x4e, 0x09, 0x71, 0xa7, 0x08, 0xe2, 0x31, 0x41, 0xaf, 0xf9, 0xe4, 0xa3, - 0xcd, 0x3e, 0x9c, 0xeb, 0xfd, 0x2f, 0xf9, 0xe1, 0x23, 0x4f, 0x3f, 0xb4, - 0xab, 0x08, 0xc5, 0x2e, 0x4d, 0x20, 0x13, 0x8b, 0x1b, 0xf3, 0x9b, 0x2a, - 0x97, 0x9c, 0x3e, 0x3d, 0x16, 0x9b, 0x46, 0x60, 0xa9, 0xfb, 0xfa, 0xcf, - 0x69, 0x15, 0x6c, 0x5c, 0x01, 0x13, 0xce, 0xad, 0x2c, 0xb2, 0x74, 0x8e, - 0x03, 0xe7, 0x75, 0xc0, 0xbb, 0xfd, 0x97, 0x73, 0x64, 0xdb, 0xe0, 0x79, - 0xe1, 0xe8, 0xda, 0xd3, 0xe6, 0x2b, 0x73, 0xc2, 0x33, 0x55, 0xf7, 0x9c, - 0xd1, 0x75, 0x2c, 0xce, 0xd4, 0xf3, 0x17, 0x41, 0xb8, 0x1c, 0x60, 0x2f, - 0x06, 0x6d, 0xb7, 0x3b, 0xfc, 0x69, 0x9f, 0x38, 0xd6, 0xeb, 0x17, 0xb4, - 0x67, 0x5b, 0x65, 0x6e, 0xe3, 0x16, 0x60, 0x66, 0xb5, 0xde, 0xa7, 0x83, - 0x8b, 0x73, 0xcf, 0x28, 0x89, 0xca, 0x8a, 0x76, 0x48, 0x91, 0x54, 0x88, - 0x41, 0xd9, 0x18, 0xfe, 0x9c, 0x27, 0xef, 0x1a, 0xe7, 0x69, 0xcf, 0xbb, - 0xe8, 0x21, 0xfa, 0x1b, 0x3f, 0xd0, 0xec, 0x39, 0xcc, 0xc7, 0x7d, 0xf1, - 0xe4, 0x8a, 0x23, 0x0d, 0x50, 0xb3, 0x14, 0xa9, 0x40, 0x79, 0xf3, 0x68, - 0x43, 0xc9, 0xf1, 0x92, 0xa6, 0xbb, 0x90, 0x8f, 0x12, 0xb0, 0xe2, 0x5a, - 0x69, 0xe1, 0x98, 0x45, 0x33, 0x63, 0xa5, 0xf0, 0x19, 0xbf, 0xf1, 0x54, - 0x09, 0xe8, 0x53, 0xcf, 0x8b, 0xca, 0x66, 0x7e, 0xf4, 0xfc, 0x20, 0x6e, - 0x39, 0x80, 0x43, 0x0f, 0xf6, 0x7c, 0x5d, 0x94, 0xc4, 0x57, 0x68, 0xec, - 0x09, 0x16, 0x76, 0x01, 0x01, 0x3d, 0x6c, 0x70, 0xda, 0x94, 0x75, 0x3c, - 0xf3, 0x03, 0x60, 0x16, 0x06, 0x67, 0xff, 0x7c, 0x9b, 0x00, 0x4f, 0x68, - 0xac, 0xe4, 0x8b, 0xb0, 0xc9, 0xe7, 0xfa, 0xbc, 0xd5, 0xa6, 0xb0, 0xdd, - 0xd9, 0xf0, 0xbf, 0xf3, 0x23, 0x70, 0x38, 0x7f, 0xf5, 0x89, 0xeb, 0x73, - 0x76, 0xd1, 0x60, 0x5e, 0xbf, 0x22, 0x60, 0xcf, 0xc5, 0x35, 0x7c, 0xe4, - 0x69, 0xb9, 0xe6, 0x27, 0x07, 0x0d, 0xe0, 0x5b, 0x32, 0x01, 0x35, 0x89, - 0x91, 0xdd, 0x7b, 0x4a, 0x7d, 0x9d, 0x9d, 0x83, 0xc5, 0x7c, 0x69, 0x1a, - 0x99, 0xf8, 0xe5, 0x62, 0x93, 0x4f, 0x17, 0x64, 0xa0, 0x80, 0x60, 0x82, - 0xbf, 0xcb, 0x3c, 0xc6, 0x7d, 0xa6, 0xf6, 0x0e, 0x30, 0xda, 0x2c, 0x19, - 0x9f, 0xe2, 0x18, 0xba, 0x1f, 0x5c, 0xc2, 0x36, 0xa4, 0x24, 0x35, 0xff, - 0x31, 0x03, 0x07, 0x9c, 0x1b, 0xf5, 0xdf, 0x3e, 0xf2, 0xbc, 0xd1, 0xd6, - 0x50, 0x83, 0x5e, 0x80, 0x30, 0x3d, 0xbb, 0x36, 0xd0, 0x9d, 0x3c, 0x06, - 0x93, 0xa0, 0x5b, 0x45, 0xcc, 0xed, 0xa8, 0x3e, 0x98, 0x03, 0xf3, 0xe8, - 0xc5, 0x21, 0x76, 0x16, 0x9f, 0x73, 0x91, 0xce, 0x12, 0xae, 0xa7, 0xad, - 0x4e, 0x94, 0x70, 0x03, 0x83, 0xc0, 0x35, 0x17, 0xde, 0x26, 0x44, 0xc0, - 0x9a, 0xb6, 0x57, 0x55, 0x12, 0x50, 0x6d, 0xf4, 0x49, 0x5b, 0xc3, 0x9e, - 0xac, 0xfa, 0x59, 0x19, 0x86, 0x8d, 0x51, 0x0e, 0x10, 0x99, 0xc5, 0x95, - 0x31, 0x05, 0xba, 0xba, 0xec, 0x09, 0xc6, 0x46, 0xce, 0x87, 0x3c, 0x92, - 0x41, 0x8f, 0xd0, 0x7e, 0xda, 0x47, 0x7f, 0x1d, 0xff, 0x90, 0xb0, 0xc3, - 0xcf, 0x3c, 0x8e, 0xcc, 0x8f, 0xf3, 0x35, 0xb5, 0xa7, 0x2f, 0x27, 0x19, - 0x5d, 0xf5, 0x94, 0xfa, 0x1c, 0x91, 0xea, 0xb7, 0x21, 0x6f, 0x5d, 0x86, - 0x86, 0x4f, 0xcc, 0xea, 0x8c, 0x65, 0x10, 0xe0, 0x52, 0x62, 0x91, 0xd2, - 0x1d, 0xee, 0x54, 0xd2, 0x70, 0xe6, 0x91, 0xdb, 0xaa, 0xec, 0x68, 0x40, - 0x20, 0x18, 0xae, 0x43, 0x38, 0xe6, 0x71, 0x41, 0x30, 0x1b, 0x9e, 0xb0, - 0xd7, 0x39, 0x46, 0x79, 0xec, 0xd4, 0xe9, 0x7b, 0x16, 0xce, 0x25, 0x8d, - 0xec, 0x92, 0xb7, 0x01, 0x54, 0xc1, 0x61, 0x15, 0x99, 0xe4, 0x1d, 0x35, - 0xbc, 0x28, 0xf1, 0x7e, 0x77, 0x9e, 0xc0, 0x9d, 0x31, 0x0a, 0x41, 0xcf, - 0x84, 0x70, 0x1e, 0x5e, 0x90, 0x7a, 0x0d, 0xe0, 0x16, 0x2f, 0x55, 0x27, - 0xde, 0x0f, 0xe1, 0x60, 0x17, 0x9f, 0x37, 0x18, 0xf7, 0xde, 0x75, 0xb0, - 0x9b, 0x85, 0x51, 0xb0, 0x1f, 0xa8, 0x1e, 0xdc, 0x24, 0x93, 0x41, 0x86, - 0xb6, 0x11, 0x91, 0x53, 0x1c, 0x01, 0x75, 0x88, 0x84, 0xfa, 0x31, 0xaa, - 0x33, 0x2e, 0x94, 0xf6, 0x28, 0x76, 0xab, 0x17, 0x4c, 0xfc, 0x4c, 0xd9, - 0xb4, 0xf0, 0x44, 0x5c, 0xcb, 0x0e, 0xb0, 0xda, 0xc3, 0xd5, 0xc5, 0x52, - 0x22, 0x7a, 0x75, 0xde, 0x5a, 0x1a, 0xe6, 0x4d, 0x9e, 0x25, 0xfe, 0x97, - 0xac, 0x2f, 0xc9, 0x71, 0x14, 0x51, 0x98, 0x67, 0x32, 0x02, 0x6a, 0x26, - 0x60, 0x33, 0x60, 0x3e, 0x5f, 0x97, 0x56, 0x05, 0x0b, 0x8d, 0x20, 0x3b, - 0xc8, 0x30, 0x97, 0x3c, 0xef, 0x8d, 0xd3, 0x58, 0x40, 0x9c, 0xe2, 0x40, - 0x90, 0xf3, 0x6a, 0xe6, 0x84, 0xd6, 0x11, 0x71, 0xa3, 0x43, 0x5c, 0x8c, - 0xa5, 0x64, 0xb6, 0xe7, 0x92, 0x2e, 0x2e, 0x57, 0xcb, 0x81, 0x23, 0x5e, - 0x7b, 0xb5, 0x7b, 0x3d, 0x04, 0x94, 0x5d, 0x6a, 0x2a, 0x3c, 0x04, 0x42, - 0xea, 0x4d, 0xad, 0xe4, 0x3a, 0x02, 0x7d, 0x3b, 0x6a, 0xdb, 0x51, 0x03, - 0x52, 0x3f, 0xc1, 0xe0, 0x7b, 0x6a, 0xc8, 0xab, 0x7f, 0xe1, 0x71, 0x56, - 0x52, 0x6f, 0xe0, 0x45, 0x37, 0x42, 0x08, 0xd0, 0xf3, 0xe1, 0x21, 0x1d, - 0xca, 0xb9, 0xa3, 0x79, 0x54, 0x60, 0x5a, 0x92, 0x7c, 0x1e, 0x28, 0xbf, - 0xe3, 0xc1, 0xc7, 0x83, 0x75, 0x06, 0x94, 0xc3, 0xcf, 0xf1, 0x2f, 0x1a, - 0xe5, 0xb1, 0xcc, 0x4e, 0xd8, 0x10, 0xad, 0x23, 0xd7, 0x93, 0x81, 0x19, - 0xa5, 0x36, 0x27, 0xc0, 0x4a, 0x0d, 0x57, 0x22, 0x46, 0x6c, 0x80, 0x3b, - 0x7f, 0x82, 0xfb, 0xb5, 0x70, 0x50, 0x05, 0xac, 0x6a, 0x1e, 0x06, 0xa5, - 0x78, 0xfc, 0xc4, 0x45, 0x12, 0xf6, 0xd4, 0x72, 0xb8, 0xa8, 0x34, 0x58, - 0x1d, 0xe7, 0xa5, 0x76, 0xfc, 0x13, 0xd0, 0xca, 0x77, 0xeb, 0x38, 0x1f, - 0xcd, 0x7f, 0x0f, 0xc5, 0x7b, 0x06, 0xe2, 0x8d, 0xfa, 0x10, 0xc2, 0x56, - 0x2d, 0xdf, 0xdd, 0x17, 0xee, 0xc4, 0x5b, 0xfa, 0x6f, 0xd2, 0x6a, 0x0b, - 0x46, 0xa5, 0x18, 0x0c, 0x9b, 0xdd, 0xc1, 0xd5, 0x46, 0x81, 0xbb, 0x82, - 0xf9, 0x20, 0x8f, 0xde, 0xae, 0x41, 0xfd, 0x7c, 0xeb, 0x72, 0x4d, 0xac, - 0x81, 0x4c, 0x57, 0xb5, 0x9a, 0xcf, 0x4b, 0x4f, 0x5d, 0xc5, 0x42, 0xe4, - 0x94, 0xdd, 0xfc, 0x47, 0xd3, 0xf6, 0x4f, 0x99, 0x5c, 0x88, 0xfc, 0x94, - 0x10, 0x90, 0x3f, 0x56, 0xe9, 0x6f, 0xc9, 0xf7, 0x1c, 0xc0, 0xd9, 0x84, - 0xd1, 0xa4, 0x2c, 0x1f, 0x65, 0xc8, 0x63, 0x3e, 0x17, 0xbf, 0xda, 0x58, - 0x16, 0xcd, 0x81, 0xdc, 0xf8, 0x4b, 0xee, 0x3f, 0x68, 0x3b, 0x10, 0x68, - 0x8f, 0xdf, 0xb1, 0x9f, 0x1b, 0xe8, 0x27, 0x04, 0xb9, 0xe0, 0x06, 0x6f, - 0x10, 0x30, 0xfc, 0xdd, 0x1f, 0xff, 0x08, 0x6e, 0xaa, 0x83, 0xe8, 0x2b, - 0xac, 0x6e, 0x69, 0x98, 0x9c, 0xed, 0x8f, 0xeb, 0xba, 0x33, 0x67, 0x4c, - 0xf6, 0xcc, 0xa1, 0x43, 0x06, 0xa1, 0x94, 0x27, 0x87, 0x94, 0xdd, 0xb3, - 0xb2, 0xce, 0x65, 0xa6, 0xf9, 0x2a, 0x81, 0x60, 0x76, 0x9d, 0x73, 0xd0, - 0x26, 0x0a, 0x19, 0xa3, 0x7a, 0x03, 0x40, 0x35, 0x65, 0x0c, 0x49, 0xf3, - 0xed, 0x02, 0x61, 0x85, 0x1a, 0x6f, 0x45, 0xf4, 0x83, 0xc3, 0xac, 0x78, - 0xc1, 0xa4, 0x06, 0x56, 0x04, 0x03, 0x3a, 0xaa, 0x00, 0xd0, 0x3a, 0xaa, - 0xf9, 0xe6, 0x5b, 0xf1, 0xd0, 0x1d, 0xc2, 0xaa, 0xaa, 0x51, 0xbf, 0x03, - 0x5e, 0xb0, 0xa3, 0x0f, 0xe8, 0x1c, 0xaf, 0x49, 0x13, 0xc8, 0x68, 0x65, - 0x1f, 0x36, 0x27, 0xb5, 0x4e, 0xa3, 0xb8, 0xb0, 0x84, 0x2f, 0x25, 0x74, - 0x42, 0x08, 0x12, 0xda, 0x93, 0x1a, 0xdb, 0xe6, 0xc4, 0xec, 0x9b, 0xf5, - 0x3b, 0xf7, 0x16, 0x66, 0xdf, 0x5c, 0x20, 0x65, 0xf9, 0x53, 0x37, 0xd0, - 0x1e, 0x9c, 0x73, 0x1a, 0xe5, 0x1b, 0x14, 0xd2, 0xf0, 0x4c, 0x9f, 0x24, - 0xa0, 0xe1, 0x01, 0xa8, 0xe7, 0x0e, 0xec, 0x77, 0xad, 0xf2, 0xf9, 0xac, - 0xdd, 0x4d, 0x8b, 0x23, 0x40, 0x6f, 0x66, 0xc5, 0x83, 0xeb, 0x48, 0xf3, - 0x43, 0x4f, 0xed, 0x44, 0xce, 0xd0, 0x46, 0x9a, 0xbf, 0x50, 0x6a, 0x5f, - 0x18, 0xf8, 0xa1, 0xc5, 0x8d, 0x46, 0x3d, 0x5b, 0x4b, 0x63, 0xf9, 0x2d, - 0x17, 0xdc, 0x90, 0x67, 0xf4, 0xc6, 0x5f, 0xf4, 0xf0, 0x44, 0x2c, 0x49, - 0x3f, 0x29, 0x53, 0x5c, 0x79, 0x9a, 0x76, 0x17, 0x6e, 0xbb, 0x5e, 0x56, - 0xc1, 0x80, 0x50, 0x95, 0x14, 0x9a, 0xeb, 0x54, 0xac, 0x04, 0x60, 0xce, - 0xe0, 0xb2, 0x7d, 0x3e, 0x55, 0x5a, 0x4b, 0xe5, 0xd1, 0x60, 0x93, 0xeb, - 0xa4, 0xed, 0x6c, 0x22, 0x29, 0xeb, 0x0b, 0x48, 0x22, 0x65, 0x80, 0x20, - 0xfe, 0x06, 0xa0, 0xe2, 0x07, 0xfa, 0x57, 0xc5, 0x01, 0xe8, 0xc5, 0x0e, - 0x28, 0x85, 0x27, 0xc2, 0x08, 0xfe, 0x52, 0x92, 0x13, 0x06, 0x4f, 0x06, - 0x06, 0xec, 0xf8, 0x63, 0xfa, 0xd2, 0x01, 0xf7, 0x80, 0x1e, 0x7e, 0x5a, - 0xa2, 0x1e, 0xbc, 0x92, 0x6b, 0xd9, 0x03, 0x2d, 0xae, 0xbe, 0xc4, 0x2b, - 0xd4, 0xf1, 0xdc, 0xa7, 0xef, 0x40, 0x3a, 0x4f, 0x1e, 0xb0, 0xc9, 0x1c, - 0xd8, 0xa3, 0xd3, 0x42, 0xa4, 0xa1, 0x48, 0x5d, 0xf2, 0xeb, 0xe8, 0x60, - 0xf9, 0x90, 0x86, 0x88, 0x09, 0xe2, 0x05, 0x4f, 0x43, 0xac, 0xc3, 0xcc, - 0xaf, 0x6e, 0xb4, 0x07, 0x0c, 0x57, 0x2f, 0x58, 0x65, 0x4c, 0x74, 0xcc, - 0xc8, 0xb9, 0x55, 0x2d, 0x6d, 0xc5, 0x2a, 0x3f, 0x9e, 0x5c, 0x6b, 0x94, - 0x05, 0x0e, 0x11, 0xf6, 0xab, 0x6c, 0xcd, 0x33, 0xcf, 0x8c, 0xd8, 0x93, - 0xad, 0x6a, 0x55, 0x77, 0x0a, 0x3b, 0xac, 0xac, 0x09, 0x8c, 0xd8, 0xaf, - 0xc3, 0x21, 0xd0, 0xaf, 0x12, 0xd0, 0xe6, 0x35, 0xf2, 0x44, 0x82, 0xfd, - 0xbc, 0x7a, 0xf3, 0x5d, 0xfd, 0xc8, 0xc8, 0xbc, 0xaa, 0xe4, 0x25, 0xe6, - 0xcf, 0x6b, 0xf7, 0xbf, 0xfa, 0xef, 0xd6, 0x46, 0xd8, 0x3b, 0xac, 0x54, - 0x0f, 0x33, 0xf2, 0xa2, 0xd2, 0xfd, 0xec, 0xd7, 0xdc, 0x54, 0x0e, 0x28, - 0xf3, 0xea, 0x1d, 0x80, 0xf6, 0x22, 0x8d, 0xd8, 0x8b, 0xc3, 0x79, 0x9f, - 0xee, 0xc0, 0xea, 0x35, 0x9e, 0x55, 0x80, 0xad, 0x55, 0x9f, 0x06, 0x3b, - 0x64, 0xad, 0xd5, 0xc1, 0x35, 0xa3, 0x3a, 0xa0, 0x64, 0x54, 0xe5, 0x40, - 0x8a, 0xd7, 0x36, 0xde, 0x3d, 0x64, 0x54, 0xaa, 0x7a, 0xa0, 0x24, 0x68, - 0x2b, 0x52, 0xb3, 0x9a, 0xa5, 0xaa, 0xcc, 0x73, 0xf3, 0x64, 0xf7, 0xf8, - 0x38, 0xd8, 0x3d, 0x60, 0x7b, 0x76, 0x45, 0xe5, 0x59, 0x7a, 0xc2, 0x73, - 0xe1, 0x1e, 0xfe, 0x41, 0x97, 0xb1, 0x3f, 0xb2, 0x91, 0x32, 0x2b, 0x9f, - 0x0a, 0xf2, 0x00, 0xfa, 0xbf, 0xb0, 0xf0, 0xfa, 0x8d, 0xe1, 0x79, 0xde, - 0xb9, 0xaa, 0x0a, 0x03, 0xd7, 0x24, 0x6f, 0x16, 0x33, 0x35, 0x71, 0x67, - 0xbf, 0xbc, 0x8a, 0x80, 0x2d, 0xae, 0xba, 0x38, 0x4d, 0xc0, 0xac, 0x30, - 0x90, 0x31, 0x09, 0x76, 0x58, 0x35, 0x11, 0x9f, 0xab, 0xfa, 0x4e, 0xa5, - 0xae, 0xde, 0x45, 0xd8, 0xfa, 0xeb, 0xd3, 0x19, 0x95, 0x0f, 0x7b, 0x74, - 0xb6, 0x6a, 0xcf, 0xe9, 0x3a, 0x7f, 0x9f, 0x60, 0xa6, 0xef, 0x45, 0xfd, - 0x29, 0x05, 0x1c, 0x3c, 0x21, 0x27, 0x2a, 0x1c, 0xad, 0x76, 0xcf, 0x55, - 0xdf, 0x57, 0x5f, 0x52, 0x61, 0xc4, 0xd6, 0x00, 0x0b, 0x36, 0xec, 0x25, - 0x02, 0xd1, 0x7d, 0x0c, 0x7f, 0x88, 0xc0, 0x43, 0x3e, 0x2e, 0xed, 0xc7, - 0xb8, 0xa3, 0xb3, 0xce, 0xbf, 0xca, 0x93, 0xdf, 0x5f, 0x63, 0xa0, 0xce, - 0x6e, 0xdf, 0xfd, 0xd2, 0x7c, 0x1f, 0x26, 0x68, 0xf1, 0xf0, 0xe5, 0xdd, - 0x1c, 0xf2, 0x35, 0xc0, 0x82, 0x99, 0x88, 0x81, 0xd6, 0x91, 0x1a, 0xf6, - 0x3a, 0x27, 0x84, 0x71, 0xda, 0xd0, 0x47, 0x4f, 0x4a, 0x8f, 0x79, 0xc2, - 0xc7, 0x64, 0xd7, 0x42, 0xcc, 0x5d, 0x5d, 0x18, 0x30, 0x94, 0x98, 0x31, - 0xef, 0xc5, 0xa4, 0x13, 0x67, 0xa3, 0x44, 0xb5, 0x26, 0x9a, 0xa1, 0x5c, - 0x94, 0x4d, 0xce, 0x99, 0x40, 0xf2, 0xe3, 0x81, 0x1c, 0xc9, 0x17, 0x84, - 0x7f, 0xbd, 0x52, 0xf5, 0x3c, 0x4b, 0x1d, 0x34, 0x5f, 0xb5, 0x22, 0x15, - 0xf5, 0x36, 0xfb, 0xf9, 0x58, 0x80, 0xee, 0x84, 0x35, 0x15, 0x26, 0xf1, - 0xba, 0xe3, 0xf3, 0xb1, 0xde, 0x91, 0x6f, 0x18, 0xb0, 0xb2, 0x8f, 0x88, - 0x99, 0x0a, 0x85, 0x94, 0xe6, 0x21, 0x39, 0x67, 0xb4, 0xf2, 0x6c, 0xbd, - 0xdc, 0x06, 0x22, 0x41, 0x3e, 0x27, 0x09, 0x71, 0x19, 0x92, 0x3d, 0xfc, - 0xa0, 0xd6, 0xc2, 0x66, 0x2b, 0x31, 0xd2, 0xfc, 0xc0, 0xff, 0xc4, 0x07, - 0x0f, 0xe5, 0x98, 0xe8, 0x8c, 0x1a, 0xe2, 0x5f, 0xed, 0x92, 0xa3, 0x51, - 0x14, 0x0f, 0x09, 0x22, 0xe6, 0xf2, 0x6c, 0x46, 0xfa, 0xf0, 0xe6, 0xf3, - 0xb8, 0xd8, 0xbf, 0x01, 0xc6, 0xc4, 0x41, 0x04, 0xcf, 0xea, 0x84, 0x01, - 0x00, 0x54, 0xfd, 0x00, 0x05, 0x74, 0x0f, 0x7e, 0x5e, 0xde, 0xec, 0x66, - 0xf2, 0x17, 0xbf, 0xeb, 0x2b, 0xad, 0x7a, 0xaa, 0x2c, 0xbe, 0x22, 0x57, - 0xda, 0xd0, 0x65, 0x68, 0xe5, 0x86, 0x7e, 0x5e, 0xf4, 0x80, 0xff, 0xe5, - 0x92, 0x79, 0x80, 0xd1, 0xc0, 0x51, 0x7d, 0xea, 0xcf, 0xa9, 0xae, 0x4c, - 0x30, 0xfb, 0x52, 0xd4, 0xc9, 0x1e, 0xb3, 0x38, 0x4e, 0x57, 0xba, 0x39, - 0xb9, 0x0e, 0x15, 0x7d, 0xe7, 0x6a, 0x70, 0xa8, 0xaa, 0x39, 0xce, 0x3c, - 0xe2, 0xf6, 0x67, 0xf6, 0xaf, 0x79, 0xe9, 0x49, 0x50, 0xfe, 0x2c, 0x7e, - 0xe2, 0xcb, 0x80, 0xab, 0xf4, 0x1a, 0x8a, 0x51, 0x07, 0xf7, 0x1d, 0x28, - 0xe1, 0x0b, 0xd3, 0x75, 0xf0, 0xe1, 0xfe, 0x8f, 0xa4, 0x10, 0x0f, 0xff, - 0x8c, 0xa3, 0xc5, 0x71, 0xb0, 0x2e, 0x2c, 0xc7, 0x87, 0x84, 0x4f, 0xa4, - 0x12, 0x27, 0xf6, 0xde, 0x5f, 0x0d, 0x30, 0x82, 0x17, 0xcc, 0xe4, 0x7c, - 0x08, 0x56, 0x3e, 0xd1, 0xbe, 0xb3, 0x10, 0xc9, 0x85, 0x0f, 0xac, 0x98, - 0x73, 0x4e, 0x34, 0x39, 0xd5, 0x6f, 0x99, 0x6f, 0x5e, 0xa2, 0xa9, 0xbc, - 0xd8, 0x2f, 0x52, 0x92, 0x44, 0xc1, 0x51, 0x57, 0x34, 0xbf, 0xee, 0x6a, - 0x3d, 0xa4, 0xaa, 0x22, 0x84, 0xbd, 0xad, 0x69, 0x2f, 0x2b, 0x73, 0xea, - 0x82, 0x27, 0xcf, 0x37, 0xe4, 0x97, 0x9f, 0xb0, 0xcc, 0x6d, 0x7d, 0x34, - 0xf7, 0xd5, 0x51, 0x2c, 0x50, 0x17, 0x1c, 0xc0, 0xca, 0x7e, 0xe8, 0x28, - 0xbf, 0x2a, 0x7a, 0x31, 0x42, 0x37, 0xa8, 0x5c, 0xdb, 0xb4, 0x37, 0xaf, - 0xd8, 0x38, 0x56, 0x1a, 0x57, 0x93, 0x02, 0x6f, 0x93, 0x40, 0xeb, 0x75, - 0xf3, 0xca, 0x5d, 0x12, 0x29, 0xf9, 0xe4, 0xb5, 0xad, 0xd5, 0x0b, 0xca, - 0x83, 0xea, 0x24, 0xcf, 0x25, 0xd9, 0x53, 0xd9, 0xb5, 0xaa, 0x76, 0x83, - 0x78, 0x67, 0x02, 0xb8, 0x8b, 0xb2, 0xd3, 0xa4, 0xc9, 0x41, 0x3e, 0x3d, - 0x25, 0x3a, 0xaf, 0x97, 0xd7, 0xfe, 0xf9, 0xea, 0xa6, 0x33, 0x16, 0x38, - 0xf3, 0xaa, 0xb6, 0xb0, 0x32, 0x70, 0x9d, 0x13, 0xc2, 0x85, 0x78, 0x7a, - 0x42, 0x0c, 0xca, 0xeb, 0xf8, 0x66, 0xeb, 0x02, 0x56, 0x1e, 0x42, 0x24, - 0x59, 0x38, 0x05, 0x48, 0x27, 0xee, 0x13, 0x9c, 0x26, 0x04, 0xc2, 0xb9, - 0xfd, 0x40, 0x81, 0x20, 0xaf, 0x12, 0x01, 0x32, 0xf7, 0xd0, 0x55, 0x66, - 0x68, 0x30, 0x3f, 0xa4, 0x8c, 0x25, 0x2f, 0xd1, 0x97, 0xa3, 0xfc, 0xf8, - 0x79, 0x79, 0x71, 0xf5, 0x1f, 0xa1, 0x70, 0x94, 0xd2, 0xb7, 0x01, 0x6b, - 0x8b, 0xe8, 0x29, 0xc4, 0xe1, 0xab, 0xb2, 0x12, 0xac, 0x36, 0x90, 0xb1, - 0xcf, 0xc9, 0xd6, 0x6a, 0xc8, 0xcf, 0xd5, 0x00, 0x0e, 0x25, 0x63, 0xdc, - 0xa6, 0x23, 0x1b, 0x84, 0x9c, 0x2f, 0x00, 0x0d, 0x5d, 0x83, 0x71, 0x5a, - 0x9a, 0x31, 0x24, 0x1e, 0xbb, 0x52, 0x58, 0x7b, 0xc8, 0x9b, 0x36, 0x89, - 0x8d, 0xfe, 0xea, 0xe9, 0xdb, 0x53, 0x79, 0x83, 0x21, 0xb7, 0x45, 0x88, - 0xab, 0x0e, 0x99, 0xda, 0x47, 0x59, 0xcd, 0x6e, 0xbb, 0xf3, 0x5c, 0xa5, - 0xb0, 0x5f, 0xad, 0x00, 0xc8, 0xa0, 0x9e, 0xb2, 0x11, 0x05, 0xc4, 0x9c, - 0x82, 0x18, 0xc0, 0xfb, 0xad, 0xf9, 0x8c, 0x2a, 0xb7, 0x7d, 0xad, 0xac, - 0xc6, 0xdb, 0xf0, 0x2d, 0x9b, 0x4c, 0xa2, 0x03, 0x58, 0x8f, 0x1a, 0xc3, - 0xc5, 0xa6, 0xba, 0xb4, 0xbd, 0x34, 0xa0, 0x6c, 0x2f, 0x98, 0xa5, 0x47, - 0xd5, 0xde, 0xd8, 0xe3, 0x6e, 0x7d, 0xef, 0x36, 0x30, 0xc3, 0x6f, 0x9a, - 0x3c, 0x79, 0x8b, 0xce, 0x6f, 0xd3, 0x01, 0x0d, 0x51, 0x39, 0x30, 0x82, - 0x2c, 0x01, 0xc7, 0x55, 0xc2, 0xb3, 0x9f, 0xa7, 0xca, 0x9b, 0xce, 0xc2, - 0xe2, 0xde, 0x43, 0x3c, 0x82, 0x51, 0x77, 0xb2, 0xed, 0x26, 0xe5, 0x32, - 0xf4, 0x3d, 0xfb, 0x0f, 0x9c, 0xba, 0x18, 0xfd, 0x54, 0x18, 0x42, 0xf3, - 0xd4, 0x53, 0x13, 0x9e, 0x9d, 0x1d, 0x27, 0x7d, 0x39, 0xee, 0xa1, 0x06, - 0x82, 0xa2, 0x90, 0xe0, 0x95, 0x8f, 0xa7, 0x9e, 0xea, 0x12, 0x0d, 0xc4, - 0x69, 0x4f, 0xe0, 0x39, 0x80, 0xce, 0x2f, 0x64, 0xac, 0x74, 0x29, 0x58, - 0xdc, 0xfc, 0x00, 0xe2, 0xdb, 0x5b, 0x36, 0x7b, 0xe5, 0x83, 0x4f, 0xf4, - 0x32, 0x4c, 0x1d, 0x91, 0xfc, 0xaf, 0x13, 0x5b, 0xbb, 0x51, 0xae, 0x2c, - 0x1a, 0xf0, 0x2e, 0x4d, 0xe1, 0xf0, 0xac, 0x79, 0x2e, 0x5b, 0x92, 0x2f, - 0x50, 0x15, 0x00, 0xee, 0x66, 0x02, 0xf1, 0x2f, 0xfa, 0x4f, 0x0d, 0xb9, - 0xd0, 0x4d, 0x1b, 0x46, 0x46, 0x5d, 0x1e, 0x27, 0xf2, 0x1c, 0x28, 0x3b, - 0x25, 0xba, 0xcc, 0x79, 0x30, 0x9e, 0x4c, 0xcf, 0x3e, 0xeb, 0xd9, 0x06, - 0x15, 0x5d, 0x9d, 0x0d, 0xfa, 0xc5, 0x27, 0x63, 0x67, 0xa0, 0xca, 0xa2, - 0xaa, 0xf6, 0x5d, 0xa4, 0xd4, 0xcb, 0xb7, 0x2b, 0x74, 0x99, 0x16, 0xb6, - 0xd8, 0x42, 0xb9, 0x2b, 0x80, 0x02, 0xb2, 0x41, 0x51, 0x51, 0x12, 0x58, - 0x4b, 0x5b, 0x16, 0x71, 0xfe, 0x36, 0xb6, 0xad, 0xf8, 0xad, 0xf5, 0x90, - 0xc5, 0x50, 0xc1, 0x98, 0x2b, 0x48, 0x55, 0x99, 0x87, 0xda, 0xf2, 0xce, - 0x7b, 0x26, 0x41, 0x71, 0xce, 0x84, 0x90, 0x8b, 0xd5, 0xd4, 0xfd, 0xaf, - 0xcd, 0x54, 0xa4, 0xf3, 0x1f, 0x07, 0xb1, 0x27, 0x2b, 0x86, 0x05, 0x58, - 0x71, 0x0e, 0x89, 0xdd, 0x08, 0xcc, 0x2b, 0xf0, 0xe9, 0x2f, 0xfa, 0x5e, - 0x9d, 0xb7, 0x7f, 0xd8, 0x4a, 0x27, 0xa7, 0xaa, 0x68, 0xe2, 0xf1, 0xb4, - 0xbc, 0x5a, 0x70, 0x55, 0x13, 0x8f, 0x7c, 0x5c, 0x59, 0x32, 0x20, 0xec, - 0x17, 0x0f, 0xab, 0x3c, 0x7d, 0x60, 0x3e, 0xdc, 0x2a, 0x15, 0x91, 0x16, - 0xae, 0x81, 0xfc, 0xcd, 0xa7, 0x16, 0xb1, 0x81, 0xe6, 0xfe, 0x42, 0x9b, - 0x78, 0x81, 0xd1, 0x0e, 0x21, 0x90, 0xd6, 0x00, 0x80, 0x62, 0x2c, 0x3b, - 0x5a, 0x4d, 0x3c, 0x1e, 0x4f, 0xcd, 0xa9, 0x81, 0xe6, 0x24, 0x1a, 0x81, - 0x3c, 0xd8, 0x18, 0x0f, 0x75, 0x1e, 0x07, 0x3d, 0x15, 0x9e, 0x84, 0xcf, - 0xb8, 0x75, 0x7d, 0xd1, 0xe1, 0x30, 0xac, 0xd0, 0x2f, 0x4a, 0x8c, 0x7f, - 0x97, 0x36, 0xd3, 0x49, 0x6b, 0x50, 0x0e, 0x8d, 0x07, 0xed, 0xf7, 0x2b, - 0x05, 0x61, 0xbe, 0x9e, 0xd0, 0xaa, 0xe9, 0xee, 0x48, 0xfe, 0x78, 0x08, - 0x85, 0x3f, 0x2a, 0x47, 0x71, 0xa3, 0x3b, 0x5b, 0x18, 0xc0, 0x4e, 0xf4, - 0xd6, 0x00, 0x02, 0x73, 0x73, 0x31, 0x61, 0x25, 0x13, 0x10, 0x26, 0xc2, - 0x40, 0xd4, 0x01, 0xbe, 0x59, 0x71, 0xc3, 0x02, 0x9a, 0xcc, 0xe2, 0xf2, - 0xa9, 0xe6, 0xf1, 0xd6, 0x34, 0x1b, 0x94, 0x81, 0x4a, 0x0e, 0x7b, 0x7b, - 0x62, 0xdf, 0xaf, 0xbc, 0xf2, 0x57, 0x7a, 0x5d, 0xe5, 0x45, 0xb9, 0xf6, - 0x5e, 0xf7, 0x2b, 0x8f, 0x91, 0x02, 0x51, 0x73, 0x0d, 0xc0, 0x03, 0x5d, - 0xf7, 0x2d, 0x65, 0xee, 0xcd, 0x02, 0xfb, 0xd4, 0xc7, 0xe0, 0x3b, 0x29, - 0x6d, 0xd8, 0x8d, 0x07, 0xd5, 0x0a, 0x46, 0x7e, 0x73, 0x7e, 0xcd, 0x31, - 0xe9, 0x67, 0x4a, 0x2f, 0xb6, 0xef, 0x9f, 0xc9, 0xa4, 0xb9, 0x17, 0xfb, - 0xa6, 0x9f, 0xc9, 0x77, 0x51, 0xf2, 0x4f, 0xfc, 0x28, 0x43, 0xac, 0x7d, - 0x51, 0x8b, 0xeb, 0x59, 0x4b, 0xd0, 0xe8, 0x42, 0x9d, 0x89, 0xdf, 0x35, - 0x61, 0xf8, 0x51, 0x98, 0x73, 0xec, 0xf9, 0xe7, 0x1f, 0xf5, 0x1d, 0x3f, - 0xdc, 0x27, 0x55, 0xcf, 0x26, 0xfc, 0x11, 0xc2, 0x39, 0x08, 0x7f, 0x17, - 0x2e, 0x3c, 0x35, 0x96, 0x69, 0x9d, 0xc1, 0x3e, 0x7a, 0xb3, 0x57, 0x31, - 0x80, 0x60, 0xb8, 0xd8, 0xac, 0xf0, 0xed, 0x37, 0x93, 0x32, 0x71, 0xc5, - 0xc4, 0xf4, 0x0f, 0x35, 0xcb, 0xa0, 0x89, 0x87, 0xea, 0x25, 0x45, 0x49, - 0x3c, 0x9b, 0x44, 0x2a, 0x26, 0x2a, 0xbe, 0x73, 0xee, 0x5e, 0x9c, 0x88, - 0x7d, 0xa6, 0x29, 0xe8, 0x12, 0x40, 0xad, 0x8a, 0x18, 0xe9, 0x17, 0xa0, - 0x20, 0x40, 0xa8, 0xc5, 0x5d, 0x42, 0xa8, 0x84, 0xac, 0x30, 0xca, 0x13, - 0xef, 0xc6, 0x36, 0xaa, 0x98, 0x76, 0x5c, 0xc3, 0x59, 0x09, 0x10, 0x62, - 0xaa, 0x9f, 0x9b, 0x6b, 0x9c, 0xff, 0xb2, 0xf8, 0xdb, 0x94, 0xc5, 0x01, - 0x3e, 0x17, 0x1c, 0xcc, 0x75, 0x9f, 0x11, 0x38, 0x6b, 0x9c, 0x8e, 0xb9, - 0x17, 0x5f, 0x48, 0x05, 0x95, 0xed, 0x35, 0xc1, 0x36, 0x8c, 0x82, 0x63, - 0x35, 0x01, 0xa0, 0xf5, 0xbc, 0x2a, 0x0d, 0xc6, 0xc2, 0x9b, 0x4a, 0x14, - 0x60, 0xed, 0x39, 0xd7, 0x3e, 0x9f, 0xe3, 0x03, 0x28, 0x8f, 0x5a, 0x51, - 0xd5, 0x4e, 0x93, 0x71, 0x3c, 0xd5, 0x03, 0x14, 0x6d, 0xc4, 0x90, 0xa8, - 0xae, 0x02, 0xc2, 0xa4, 0x7c, 0x9d, 0x27, 0x67, 0x3c, 0x6e, 0x43, 0x5e, - 0x5d, 0x71, 0xd6, 0x36, 0x22, 0x11, 0x72, 0xad, 0x9e, 0x91, 0xad, 0x9d, - 0xed, 0x8c, 0x12, 0x84, 0x6b, 0x0e, 0xd4, 0xd0, 0x89, 0x67, 0x0f, 0x93, - 0xc8, 0xc3, 0x81, 0x05, 0xef, 0xa0, 0x43, 0xad, 0x20, 0xeb, 0xa1, 0x3c, - 0x26, 0xa4, 0xf2, 0xf9, 0x8f, 0x8c, 0x58, 0x7b, 0x20, 0x0f, 0xde, 0xd9, - 0xb1, 0xa6, 0x7f, 0xc2, 0xb4, 0x35, 0x68, 0x57, 0x4d, 0x22, 0x63, 0x82, - 0x54, 0xfc, 0xa0, 0x6f, 0x78, 0xe4, 0xcd, 0xdf, 0x3e, 0xe8, 0x67, 0x5e, - 0x2e, 0xcb, 0xf4, 0xab, 0x7c, 0x69, 0x16, 0x2b, 0x8a, 0x9b, 0xac, 0x80, - 0x12, 0xaf, 0xac, 0x59, 0x10, 0xf9, 0x88, 0x0e, 0x9c, 0x92, 0x53, 0xe7, - 0xbd, 0x8c, 0xe7, 0x55, 0x5d, 0x06, 0x90, 0x67, 0xdf, 0xbc, 0xca, 0x40, - 0x05, 0x90, 0x04, 0x46, 0x43, 0x55, 0x4f, 0x7d, 0x1c, 0x68, 0x1b, 0xb8, - 0xc4, 0x46, 0xf1, 0x84, 0x45, 0x5c, 0x87, 0x59, 0x0d, 0x81, 0xb9, 0x66, - 0xf3, 0x11, 0xbe, 0xfd, 0x8a, 0x18, 0x5f, 0xaf, 0xe4, 0x89, 0x06, 0x6a, - 0x50, 0xad, 0xce, 0x7a, 0x30, 0xd9, 0x27, 0x28, 0x30, 0xfe, 0xe9, 0xbf, - 0xe1, 0x4a, 0x0d, 0x7f, 0x57, 0x70, 0x70, 0xf6, 0x72, 0x7c, 0x95, 0xac, - 0xaa, 0xf4, 0xe2, 0x1a, 0xb1, 0x4f, 0x16, 0x41, 0x9e, 0xa2, 0x0f, 0xa5, - 0x66, 0x65, 0xfd, 0x32, 0xf9, 0x5d, 0xae, 0xd0, 0x60, 0x6f, 0x23, 0x68, - 0xe3, 0x15, 0x3e, 0x99, 0x33, 0x17, 0x9f, 0xbe, 0xfa, 0x13, 0xf5, 0x9a, - 0x77, 0xb9, 0x37, 0xce, 0xc3, 0xd9, 0x5b, 0x45, 0x47, 0xbf, 0xeb, 0xba, - 0x8c, 0xb2, 0x65, 0xae, 0x6d, 0xb6, 0x6e, 0xd7, 0xdc, 0xd3, 0x19, 0x56, - 0xce, 0x07, 0x15, 0xb7, 0x3f, 0xae, 0xaf, 0xff, 0x71, 0xa9, 0x7f, 0x5d, - 0x7e, 0xc7, 0x37, 0x9f, 0xba, 0x68, 0x52, 0x8c, 0x75, 0xac, 0x65, 0xfc, - 0x11, 0xea, 0xd9, 0x27, 0x87, 0x32, 0x5f, 0x9a, 0x67, 0x9d, 0xfc, 0x3a, - 0x9f, 0xc6, 0x22, 0x47, 0xe3, 0x80, 0xe3, 0x5b, 0x47, 0xf9, 0x1e, 0x58, - 0xb4, 0xa1, 0xd2, 0x60, 0x77, 0x4f, 0x23, 0x5e, 0x5a, 0x33, 0x6b, 0xcc, - 0x10, 0x44, 0x5a, 0x55, 0xf8, 0x86, 0x22, 0x0d, 0x77, 0x27, 0xd8, 0xc2, - 0x0d, 0x6f, 0xf7, 0x9b, 0xd3, 0x61, 0xc5, 0x20, 0xf8, 0xa5, 0xc3, 0x3d, - 0x35, 0x9c, 0x06, 0xd8, 0xf2, 0xfc, 0x9e, 0x4a, 0x94, 0xd2, 0x1d, 0xda, - 0xed, 0xfd, 0xd5, 0x92, 0x06, 0xf7, 0x39, 0x62, 0x9d, 0x1f, 0xa7, 0xcf, - 0x27, 0x3f, 0x7c, 0xce, 0x7d, 0x5e, 0xea, 0xf9, 0xf7, 0x9f, 0x8e, 0x71, - 0x6b, 0x9d, 0x50, 0xbb, 0xa5, 0xa4, 0xb1, 0x2d, 0x32, 0xde, 0x9d, 0xfa, - 0x1a, 0x99, 0x08, 0xfa, 0xd8, 0x9b, 0x27, 0xd7, 0x94, 0x02, 0x7e, 0x84, - 0xc5, 0x71, 0x72, 0x71, 0x07, 0x84, 0x18, 0x5c, 0xbf, 0x16, 0x1f, 0x3a, - 0xa7, 0x11, 0xd6, 0x5e, 0x8f, 0x2d, 0xef, 0x86, 0x9f, 0x16, 0x6a, 0x33, - 0x0d, 0x89, 0x6b, 0x2e, 0x91, 0x4d, 0xbe, 0x27, 0x46, 0x58, 0x83, 0x6a, - 0xed, 0x5c, 0xb8, 0xbf, 0xda, 0xed, 0xbb, 0x04, 0xdb, 0x8a, 0x89, 0x8a, - 0xfb, 0xe3, 0x6f, 0x25, 0xde, 0xf2, 0x12, 0x80, 0x49, 0x86, 0xb1, 0x5c, - 0xc9, 0x2f, 0x43, 0x70, 0x8b, 0x16, 0x10, 0x1d, 0xb6, 0x48, 0x97, 0x9e, - 0x52, 0x37, 0xca, 0x43, 0x98, 0xaf, 0xa3, 0x9f, 0xe3, 0xda, 0x3f, 0x59, - 0x4c, 0xc4, 0x72, 0xac, 0x53, 0x71, 0x2c, 0x05, 0xea, 0xe1, 0xb5, 0xd7, - 0xac, 0x7b, 0xf7, 0x9c, 0xd9, 0xfb, 0xac, 0xa2, 0x39, 0x74, 0xaf, 0xfd, - 0x8a, 0xc7, 0xc1, 0x61, 0xf0, 0x4c, 0x93, 0xdc, 0x1d, 0xb7, 0xe4, 0x38, - 0x37, 0xf8, 0x8b, 0xaf, 0xc4, 0xb2, 0xcb, 0xa0, 0xcd, 0x4f, 0xa7, 0x63, - 0xbf, 0x46, 0xc6, 0xbf, 0x8e, 0x73, 0x86, 0x91, 0x1f, 0x33, 0x0c, 0x0e, - 0xe3, 0xab, 0x2d, 0xe0, 0xec, 0xd5, 0x6d, 0x73, 0x02, 0xbb, 0x19, 0x91, - 0x00, 0x32, 0x43, 0x6d, 0xc1, 0xd9, 0x92, 0x53, 0x0d, 0xdf, 0x60, 0x71, - 0xfb, 0x36, 0x3a, 0xcc, 0xa7, 0x9f, 0xf3, 0x7a, 0x8b, 0x78, 0x0c, 0x9f, - 0x72, 0x8c, 0xe6, 0xf6, 0x47, 0xaf, 0xfb, 0x74, 0xfe, 0x79, 0x8f, 0x2c, - 0x32, 0xd8, 0x03, 0x19, 0xab, 0xd8, 0x56, 0xf2, 0xb5, 0xa5, 0x8d, 0x77, - 0xcb, 0x9e, 0x33, 0xe8, 0xdc, 0x20, 0x0e, 0xec, 0x7b, 0xaf, 0x75, 0x1e, - 0x3c, 0x9c, 0x9c, 0x86, 0x1e, 0xf5, 0xb8, 0xb9, 0x08, 0x23, 0xd8, 0xfc, - 0xe3, 0x76, 0x88, 0x91, 0x1d, 0x3b, 0x36, 0x5d, 0x32, 0x41, 0xec, 0x79, - 0xcb, 0x1c, 0xdd, 0xdc, 0xb4, 0x8c, 0x21, 0x1d, 0x70, 0x80, 0x92, 0xe8, - 0x6f, 0x72, 0xea, 0x52, 0x1f, 0xd1, 0xee, 0x28, 0xc7, 0xd1, 0x00, 0x71, - 0x92, 0x16, 0x81, 0x36, 0x57, 0xa9, 0x29, 0x6e, 0x9a, 0xa5, 0xd0, 0x28, - 0x8b, 0x67, 0x00, 0xf2, 0x82, 0x63, 0xdb, 0xb6, 0x3f, 0x7d, 0x7d, 0x27, - 0xb0, 0x8f, 0xf9, 0xdb, 0xb1, 0x62, 0x35, 0xb1, 0x50, 0x91, 0x43, 0x0a, - 0x31, 0xfe, 0xae, 0x9e, 0xb5, 0x4a, 0x0b, 0xa8, 0x4c, 0x47, 0x48, 0x8c, - 0x87, 0xe4, 0xc5, 0xc3, 0x6d, 0xee, 0x05, 0xec, 0xc3, 0xcc, 0x37, 0x1f, - 0x5c, 0xb4, 0x90, 0x62, 0x0d, 0x9e, 0x3e, 0x6c, 0x7f, 0xb7, 0xc1, 0xbd, - 0x67, 0x0d, 0xaf, 0xdd, 0x08, 0xb7, 0xea, 0x83, 0x3a, 0xae, 0xcf, 0x60, - 0xa9, 0x7f, 0x67, 0xc9, 0xc3, 0xef, 0x45, 0xcf, 0xa1, 0x42, 0xbc, 0x3d, - 0x28, 0x32, 0x9f, 0x97, 0xcd, 0x05, 0x98, 0x42, 0x19, 0x6a, 0xe8, 0x42, - 0x89, 0xf8, 0x8f, 0x50, 0xf8, 0x68, 0xb6, 0x87, 0x42, 0xc5, 0x07, 0xd4, - 0x7f, 0xd4, 0xca, 0x3c, 0xc0, 0x8b, 0x1a, 0x32, 0x40, 0x7e, 0x7c, 0xd5, - 0x2f, 0x19, 0x71, 0x3a, 0xb4, 0x26, 0xe3, 0xf5, 0x8e, 0xd6, 0xec, 0x1c, - 0x34, 0x27, 0x45, 0x54, 0xf5, 0xe4, 0xe2, 0x00, 0x80, 0xd7, 0x43, 0x43, - 0xfc, 0xfd, 0x82, 0x39, 0x32, 0x1d, 0xa0, 0xd6, 0x8d, 0x62, 0x49, 0xb7, - 0x74, 0x8d, 0xb9, 0xaa, 0x46, 0xab, 0x94, 0x9e, 0xbe, 0x5a, 0x64, 0x70, - 0x10, 0xbd, 0x93, 0x6f, 0x12, 0x00, 0x68, 0x69, 0xbb, 0xc0, 0x2a, 0x00, - 0xaa, 0x5b, 0xba, 0x4f, 0x4f, 0x92, 0x2c, 0x0f, 0x38, 0x68, 0xe0, 0x34, - 0x2b, 0x25, 0xb1, 0x2f, 0x5c, 0xd2, 0x97, 0x24, 0xfc, 0xa4, 0xc5, 0x0d, - 0x51, 0x6d, 0xba, 0x15, 0xda, 0x4b, 0xa4, 0x58, 0x93, 0xa8, 0x9e, 0x18, - 0x80, 0xfe, 0x70, 0xa9, 0xf9, 0x90, 0xe3, 0x12, 0xdc, 0xd2, 0xcb, 0x17, - 0xf5, 0x88, 0xb2, 0xa8, 0xde, 0x3b, 0xb4, 0x70, 0x47, 0x34, 0xbc, 0x17, - 0xdf, 0xc0, 0xf3, 0xb1, 0x24, 0xde, 0xf1, 0x01, 0x2a, 0x4a, 0x02, 0x89, - 0xa7, 0x89, 0xc2, 0xad, 0x6b, 0xef, 0xe1, 0xda, 0xb2, 0x36, 0x4a, 0x01, - 0x3f, 0x9c, 0xaa, 0xa5, 0xa5, 0xed, 0xa9, 0x9a, 0x95, 0xb6, 0xde, 0x37, - 0xa5, 0x0d, 0xeb, 0xcb, 0x53, 0x47, 0x32, 0x02, 0x1a, 0xac, 0x1f, 0x44, - 0xc5, 0x15, 0x5d, 0x9c, 0x03, 0xfe, 0xe3, 0x47, 0x83, 0xf1, 0xf4, 0x52, - 0xd6, 0x52, 0xa5, 0x68, 0x94, 0x10, 0x70, 0xe4, 0x19, 0xbf, 0xf1, 0x7b, - 0xe2, 0x2e, 0x81, 0x01, 0xad, 0x55, 0xe3, 0x3a, 0x85, 0x5a, 0x20, 0xc2, - 0xcc, 0x43, 0x0d, 0x9a, 0x6d, 0xae, 0xe8, 0xb3, 0x24, 0xc2, 0xcf, 0x92, - 0x97, 0x64, 0xf2, 0xbb, 0x4d, 0xd8, 0xae, 0x14, 0x36, 0x66, 0x0a, 0xb3, - 0x33, 0x36, 0xc3, 0x5e, 0x04, 0x0f, 0xf9, 0x5d, 0xf8, 0x94, 0x55, 0x2d, - 0x82, 0xb6, 0xe9, 0x16, 0x9c, 0x7f, 0x6e, 0x70, 0x2c, 0x83, 0xd9, 0xcf, - 0x56, 0x18, 0xf8, 0x89, 0xe3, 0x73, 0x25, 0x74, 0x68, 0x01, 0xb2, 0x13, - 0x05, 0x7b, 0xd1, 0x7c, 0xcc, 0xa8, 0x4b, 0x9d, 0x42, 0x95, 0x48, 0xbf, - 0x24, 0x2e, 0x91, 0x03, 0xf8, 0x4c, 0x6c, 0xbe, 0x84, 0xcb, 0x59, 0x5b, - 0x1b, 0x0e, 0x9a, 0xd3, 0x13, 0x9d, 0x94, 0xa5, 0xcd, 0x45, 0x87, 0xba, - 0x00, 0xf2, 0x2b, 0xf3, 0x30, 0x52, 0xe6, 0x27, 0x5e, 0x86, 0x2f, 0xb9, - 0xd8, 0xa8, 0xbc, 0x04, 0x50, 0x9e, 0x19, 0x6a, 0xd4, 0xa7, 0x20, 0xb8, - 0x2a, 0x5c, 0x83, 0x37, 0x10, 0x7f, 0xbd, 0xfa, 0x73, 0xdb, 0x45, 0xcb, - 0xa4, 0x65, 0x56, 0x2c, 0xd1, 0x44, 0x79, 0x03, 0x52, 0xe2, 0x24, 0x38, - 0xb9, 0x76, 0x39, 0x5c, 0xec, 0xef, 0x89, 0xcd, 0xdd, 0x67, 0x73, 0xf4, - 0x68, 0xdb, 0x49, 0x34, 0xc7, 0x99, 0xa5, 0xdd, 0x34, 0x67, 0xc3, 0xb5, - 0x1f, 0x1f, 0x0b, 0x97, 0x76, 0x1c, 0x2b, 0x1c, 0xce, 0x87, 0xb4, 0xe0, - 0x9a, 0xaf, 0x1f, 0x15, 0x04, 0x4c, 0x5e, 0x7e, 0x9a, 0x6b, 0xac, 0xa1, - 0x04, 0xf3, 0x71, 0xf8, 0x0a, 0x0f, 0xd0, 0xd3, 0xbd, 0x75, 0x3c, 0x7c, - 0x68, 0xde, 0xaa, 0x8c, 0x42, 0x90, 0xe9, 0xce, 0xbe, 0x7a, 0x30, 0xc3, - 0x90, 0x91, 0x57, 0x03, 0xc0, 0xd7, 0x54, 0x07, 0x18, 0x3f, 0x7c, 0xe9, - 0xa9, 0xae, 0x77, 0x6e, 0x86, 0x2b, 0x09, 0x63, 0xa7, 0x04, 0x8c, 0x36, - 0x64, 0x03, 0x69, 0x60, 0x82, 0x12, 0x91, 0xaf, 0x3a, 0xcc, 0xd7, 0xc5, - 0x53, 0x89, 0x99, 0xdd, 0xa1, 0xb0, 0x73, 0x75, 0xe2, 0xd5, 0xf5, 0x5a, - 0x72, 0x8b, 0x17, 0x2f, 0x12, 0x7c, 0xd4, 0xdb, 0x73, 0xb0, 0x9c, 0x6f, - 0xea, 0x6b, 0xe7, 0xbf, 0x9a, 0x97, 0xe6, 0x72, 0x28, 0xd0, 0x38, 0xcc, - 0x57, 0x30, 0x31, 0xf7, 0x88, 0x12, 0x67, 0x75, 0xb3, 0x12, 0x98, 0xfc, - 0x64, 0x5b, 0x20, 0xbe, 0x2d, 0x91, 0xf0, 0xe5, 0xe9, 0xb8, 0x2f, 0x41, - 0x8a, 0x68, 0x5b, 0xd6, 0x04, 0x73, 0x60, 0x17, 0xa3, 0x35, 0x31, 0x1e, - 0x18, 0xf4, 0x3a, 0xa1, 0xc3, 0x83, 0xff, 0x53, 0xe2, 0x77, 0xb7, 0x29, - 0x05, 0x54, 0x1c, 0x3d, 0x26, 0x3d, 0x7d, 0x1e, 0x80, 0xcb, 0x3d, 0x25, - 0x01, 0xb8, 0xbe, 0xb8, 0xa8, 0x76, 0xbd, 0x0c, 0x2f, 0x9f, 0x6b, 0x8a, - 0x58, 0x8c, 0xd9, 0xe4, 0x1a, 0x69, 0x7a, 0x64, 0x3d, 0x57, 0x27, 0xc9, - 0x69, 0xec, 0x5f, 0x35, 0x46, 0x52, 0x40, 0xe3, 0x3e, 0xce, 0x78, 0x92, - 0xb4, 0x0d, 0x58, 0xe6, 0x26, 0xa5, 0xcc, 0xed, 0xf8, 0x62, 0x99, 0xe7, - 0x7c, 0x1b, 0xbf, 0x09, 0x2c, 0xd5, 0xd4, 0x56, 0xcf, 0x87, 0x2f, 0x3e, - 0x29, 0xbc, 0xb7, 0x32, 0x11, 0x17, 0x6d, 0x6b, 0xb9, 0xc8, 0x11, 0x8a, - 0xb1, 0x04, 0xd0, 0x5d, 0x6f, 0x1d, 0x11, 0x0c, 0x40, 0xba, 0xbf, 0x45, - 0xcf, 0x78, 0x0d, 0x80, 0x0b, 0x2f, 0xf3, 0x12, 0xf9, 0xb8, 0x98, 0x94, - 0xa0, 0x64, 0x45, 0x8b, 0x80, 0x1a, 0x13, 0xbd, 0x6b, 0xc6, 0x05, 0x3d, - 0xa0, 0x1a, 0xa8, 0x83, 0xa7, 0x75, 0xbb, 0x9e, 0x3d, 0xaf, 0xb1, 0x91, - 0x8a, 0x41, 0x2e, 0xcf, 0xcd, 0xa1, 0x64, 0xcf, 0xd0, 0x57, 0x04, 0xf9, - 0xf2, 0x5a, 0xfd, 0xca, 0xb7, 0xf6, 0x89, 0x7e, 0x92, 0xc7, 0x81, 0x7f, - 0x8b, 0x9f, 0xf9, 0x28, 0x7d, 0xc2, 0xe5, 0xc1, 0x46, 0xf7, 0xce, 0xd6, - 0x7f, 0x49, 0xeb, 0xaf, 0xc7, 0x4f, 0x1e, 0x77, 0xd5, 0xab, 0x8f, 0x24, - 0xeb, 0x65, 0xbe, 0x36, 0x87, 0xd0, 0x5b, 0x1f, 0xd8, 0xcf, 0xa2, 0x94, - 0xf3, 0xfc, 0x67, 0xd4, 0x5e, 0xfe, 0xda, 0x36, 0xb0, 0x8b, 0xae, 0x7d, - 0x04, 0xfd, 0x52, 0x3f, 0x0e, 0xaa, 0x2f, 0x02, 0x2a, 0xfe, 0x9b, 0x32, - 0x96, 0x15, 0x49, 0xf2, 0xc1, 0xac, 0xb8, 0xb2, 0x4e, 0x83, 0x13, 0xf0, - 0x75, 0x49, 0x1b, 0xb3, 0x9f, 0xd4, 0x2c, 0xea, 0xa2, 0xb1, 0xbd, 0x30, - 0x57, 0x79, 0xdc, 0x70, 0xe5, 0x78, 0x7c, 0xf7, 0x26, 0x3f, 0xb0, 0xae, - 0xb3, 0xb6, 0x14, 0xea, 0x52, 0xc1, 0x96, 0x87, 0xd8, 0xf2, 0xf3, 0x3c, - 0xee, 0x1f, 0xe5, 0xf5, 0xac, 0xdf, 0xd7, 0x4a, 0xc6, 0xb5, 0xe3, 0x01, - 0x3f, 0x2e, 0x95, 0x84, 0x05, 0x32, 0x00, 0xa5, 0x10, 0x54, 0x22, 0xc8, - 0xdc, 0xaf, 0x07, 0x73, 0x26, 0xa2, 0xf4, 0x53, 0xb0, 0x86, 0xf2, 0xcd, - 0x89, 0xb3, 0xb0, 0x9f, 0x00, 0xca, 0x96, 0xe5, 0x42, 0x9a, 0xeb, 0x1f, - 0x61, 0xc9, 0x24, 0xe2, 0xaa, 0x1f, 0x75, 0x22, 0x06, 0xb8, 0xa3, 0x65, - 0xe8, 0x3d, 0x53, 0x9c, 0xe0, 0xc6, 0x41, 0x61, 0x15, 0xc7, 0x2a, 0x24, - 0xa5, 0x7f, 0x5e, 0x35, 0x0a, 0xba, 0x4f, 0x57, 0xec, 0xd0, 0x79, 0xde, - 0xed, 0x4f, 0x58, 0x76, 0x83, 0x55, 0xd1, 0xc9, 0x5c, 0xbe, 0xa6, 0x58, - 0x0a, 0x87, 0x4b, 0x8a, 0x06, 0x20, 0x8b, 0x1b, 0x46, 0xf3, 0xb5, 0x4e, - 0xbd, 0x6d, 0xee, 0xde, 0x8b, 0x43, 0xac, 0x61, 0xda, 0x76, 0x19, 0x09, - 0x73, 0xf8, 0xab, 0x60, 0x6a, 0x3b, 0x17, 0x0a, 0x66, 0x56, 0x9a, 0x79, - 0xd2, 0x21, 0x92, 0xd0, 0x6e, 0xa9, 0x68, 0x8c, 0xea, 0x28, 0xc3, 0x84, - 0x22, 0x93, 0x8a, 0x90, 0x48, 0x69, 0x8b, 0x13, 0x91, 0x8e, 0xe4, 0xf1, - 0xe9, 0x8d, 0x83, 0x8a, 0xa7, 0xc9, 0x91, 0x2a, 0x55, 0xf5, 0x56, 0x5b, - 0x95, 0xf0, 0xea, 0x2d, 0x70, 0x58, 0x70, 0x12, 0x56, 0x9b, 0x39, 0x5e, - 0x6a, 0x50, 0xa0, 0xc9, 0x5d, 0xbe, 0xe7, 0x0e, 0xbc, 0x2e, 0x1c, 0x90, - 0x82, 0xf4, 0xb5, 0xed, 0x7c, 0x71, 0x40, 0xe6, 0xcb, 0xb7, 0x4a, 0xec, - 0x7b, 0x34, 0x43, 0x10, 0xec, 0xab, 0x41, 0x55, 0x07, 0xc0, 0xc8, 0xa5, - 0x6f, 0xa5, 0x36, 0x6b, 0x71, 0x33, 0x33, 0xc7, 0x32, 0x44, 0x58, 0x35, - 0x1a, 0x40, 0xa7, 0xc9, 0x49, 0x50, 0x6b, 0x02, 0xea, 0xa8, 0x8c, 0x99, - 0x79, 0xa8, 0x83, 0x83, 0x01, 0xb7, 0x0c, 0x0c, 0x68, 0xbe, 0x07, 0xc0, - 0xb3, 0x5e, 0xff, 0xb0, 0x8d, 0x5b, 0xb5, 0xab, 0x03, 0x54, 0xd2, 0xbc, - 0xe7, 0xc9, 0xf3, 0x17, 0x5f, 0x9d, 0x3d, 0xc5, 0x9a, 0x43, 0x65, 0xf6, - 0xb4, 0x59, 0x22, 0x7e, 0x96, 0xf2, 0x65, 0xc9, 0x52, 0x33, 0x01, 0xe5, - 0x6c, 0x41, 0x1a, 0x2d, 0xd4, 0xd9, 0xbf, 0x85, 0x44, 0x00, 0x85, 0x12, - 0xe6, 0x3c, 0x81, 0xca, 0x2d, 0xbf, 0x78, 0xae, 0x10, 0x32, 0x5a, 0xf4, - 0x93, 0xb9, 0x9d, 0x5f, 0x33, 0xc8, 0xb2, 0xcf, 0x14, 0xa3, 0x6c, 0xc2, - 0xff, 0xfc, 0x37, 0xf9, 0xe0, 0xea, 0x01, 0x29, 0x2e, 0xed, 0xea, 0x83, - 0xba, 0xc4, 0x96, 0xf3, 0x5e, 0xdd, 0xdf, 0x36, 0xa5, 0xac, 0x62, 0x12, - 0x54, 0xde, 0x6e, 0x93, 0x8a, 0x43, 0x75, 0xcb, 0x9e, 0xcd, 0x0f, 0x0e, - 0x42, 0xeb, 0xc4, 0x55, 0xe1, 0x61, 0xd0, 0x45, 0x95, 0x1b, 0xd8, 0xed, - 0x60, 0x11, 0xff, 0xe6, 0x08, 0x9f, 0xe3, 0xb7, 0xf4, 0x03, 0x8a, 0x2b, - 0x08, 0xb4, 0xd2, 0x76, 0xfe, 0x77, 0xe4, 0xa5, 0xfc, 0x4e, 0x3d, 0x6b, - 0x05, 0xe0, 0x79, 0x1b, 0xbb, 0xfc, 0x40, 0xdb, 0x44, 0x4d, 0x21, 0x42, - 0xdf, 0x43, 0xc1, 0x5e, 0xbf, 0x1f, 0xad, 0x2b, 0x59, 0x85, 0x5c, 0x9f, - 0x5b, 0xac, 0x44, 0xe5, 0xea, 0xcb, 0xd8, 0xd9, 0x97, 0x75, 0x72, 0xfd, - 0x30, 0x5b, 0x0f, 0x93, 0xb8, 0xb9, 0x6f, 0x09, 0xc8, 0x66, 0x41, 0xea, - 0x5b, 0x84, 0x62, 0x5c, 0xc3, 0xa3, 0x31, 0x6a, 0x48, 0xe4, 0x9a, 0x73, - 0x9f, 0xf9, 0x8b, 0x6d, 0xda, 0x19, 0xe4, 0xfb, 0xdc, 0x0b, 0x3b, 0xa6, - 0x24, 0xeb, 0xd5, 0x7d, 0x2b, 0x87, 0x8f, 0x2d, 0x58, 0xcd, 0x34, 0xb2, - 0x2f, 0x3a, 0x1a, 0xdd, 0xb9, 0x31, 0x8e, 0xfb, 0xbb, 0xf9, 0xfc, 0xd6, - 0xd3, 0x4d, 0x20, 0x01, 0xfa, 0x47, 0x1b, 0xd0, 0x87, 0x70, 0x31, 0x40, - 0x56, 0xa7, 0x8b, 0x76, 0x35, 0x49, 0x1a, 0x2f, 0x84, 0x7a, 0x70, 0xf8, - 0xbc, 0xef, 0xd0, 0x34, 0xf1, 0x60, 0x1b, 0x3d, 0x28, 0x0f, 0xda, 0x53, - 0x33, 0x1f, 0x03, 0x37, 0x3f, 0xa0, 0x02, 0x1c, 0x74, 0xf6, 0xdf, 0x94, - 0x19, 0x7e, 0x39, 0x97, 0x80, 0xb6, 0x03, 0x0e, 0x5c, 0x1e, 0xbf, 0x7a, - 0x88, 0x47, 0xb4, 0xfa, 0xe3, 0xc6, 0xf3, 0x26, 0xe5, 0x48, 0x27, 0xf3, - 0x49, 0xc6, 0x2f, 0x4a, 0xf7, 0x11, 0xf9, 0x76, 0xdc, 0xef, 0x49, 0x84, - 0xdf, 0x79, 0x30, 0x1a, 0xd5, 0x85, 0x83, 0x12, 0xc8, 0xb1, 0x78, 0x4d, - 0x02, 0x7e, 0x29, 0x93, 0x78, 0x98, 0x02, 0x4f, 0x89, 0xc3, 0x00, 0x35, - 0xa8, 0xd2, 0x07, 0xe4, 0x52, 0x1b, 0x71, 0xf7, 0xa7, 0xb3, 0x7f, 0x86, - 0x77, 0xee, 0x0f, 0x02, 0xae, 0x6d, 0x6c, 0x3a, 0x30, 0x21, 0x76, 0xe4, - 0x0b, 0x17, 0x04, 0x3e, 0x8e, 0x1d, 0xdc, 0xdc, 0xb0, 0x67, 0x04, 0xed, - 0xb6, 0x8f, 0x0d, 0xac, 0xc9, 0xa9, 0x07, 0xe4, 0x53, 0xdc, 0x83, 0x77, - 0x0f, 0x12, 0x54, 0x3d, 0xfb, 0x92, 0x8b, 0x31, 0x17, 0x3f, 0xb2, 0xc2, - 0xa3, 0x2b, 0x29, 0xa8, 0x37, 0xdf, 0xe1, 0xb7, 0x3e, 0x7a, 0x1c, 0x4d, - 0x01, 0x53, 0xf0, 0xd1, 0x99, 0x61, 0x01, 0xe3, 0xf0, 0x45, 0x64, 0xa3, - 0xd0, 0x19, 0x7a, 0x0e, 0xaf, 0x30, 0x66, 0xb6, 0x9c, 0x63, 0xd4, 0x40, - 0x2a, 0x9f, 0x1e, 0xd6, 0x87, 0x82, 0xe1, 0x47, 0x55, 0xf1, 0xb3, 0x4d, - 0xf7, 0x65, 0xfa, 0x56, 0xbb, 0x32, 0xc6, 0xe6, 0x65, 0x9a, 0xf4, 0x04, - 0x8e, 0x7e, 0xcd, 0xf8, 0xb2, 0xbb, 0xb6, 0xa1, 0x31, 0x54, 0xd1, 0x14, - 0x9d, 0x7f, 0x9b, 0x93, 0xce, 0x21, 0x19, 0xa6, 0x86, 0x11, 0xa1, 0x34, - 0x72, 0x0a, 0x67, 0x5d, 0xd2, 0x31, 0xd9, 0xd1, 0xb3, 0xef, 0x30, 0xc7, - 0xf9, 0x22, 0x4d, 0xdf, 0xbc, 0xa1, 0x4b, 0x10, 0x9d, 0x20, 0x6e, 0xf5, - 0x0c, 0xba, 0xcb, 0xcf, 0x5c, 0x31, 0xd2, 0x42, 0x1d, 0x05, 0x8a, 0x27, - 0x7b, 0x16, 0x3c, 0x56, 0xda, 0xb4, 0xdd, 0x0f, 0xab, 0x58, 0x46, 0xad, - 0xee, 0x1c, 0xd4, 0x6d, 0x3e, 0x26, 0x19, 0x87, 0x3e, 0x2e, 0xf8, 0x27, - 0xe0, 0xe6, 0xcc, 0xc1, 0x9b, 0x25, 0x90, 0x09, 0xb4, 0x8b, 0x67, 0x8f, - 0x95, 0x72, 0xd6, 0xe1, 0xbf, 0xe2, 0x14, 0x8e, 0xb3, 0xd7, 0xd3, 0xc5, - 0x0c, 0xdd, 0xe5, 0xf7, 0xec, 0x32, 0x8f, 0xf0, 0xef, 0x4f, 0x7f, 0x5f, - 0x1f, 0xe6, 0xc0, 0xe1, 0xf2, 0xd7, 0xc7, 0x6f, 0x8f, 0x9e, 0x7b, 0xcd, - 0x81, 0x59, 0x06, 0x60, 0x5a, 0x7a, 0x5d, 0x19, 0xe6, 0xb8, 0xcc, 0x77, - 0x58, 0xde, 0x33, 0x8a, 0x8a, 0x78, 0x5c, 0xb8, 0x9c, 0x70, 0xf4, 0xf9, - 0xff, 0xd1, 0x6e, 0x8e, 0x00, 0x4a, 0x22, 0x5c, 0x91, 0x31, 0xe0, 0xc7, - 0xa3, 0x8f, 0xeb, 0xf3, 0x80, 0x57, 0x75, 0x0c, 0x87, 0x4e, 0xb0, 0x1c, - 0x36, 0x63, 0x3c, 0xa0, 0x04, 0x72, 0xdc, 0x91, 0x10, 0x28, 0xd2, 0xa2, - 0x35, 0xe3, 0x97, 0xbb, 0x1e, 0xf4, 0x7c, 0xc7, 0xd1, 0xa2, 0x80, 0x4a, - 0x83, 0x6e, 0x72, 0xab, 0x87, 0xe6, 0x58, 0xc7, 0xc3, 0xa6, 0x2d, 0x46, - 0x50, 0x40, 0x2e, 0xb0, 0x22, 0x27, 0x5d, 0xf1, 0x41, 0x49, 0x5a, 0xd0, - 0x22, 0xf0, 0x0c, 0x1b, 0x07, 0xc0, 0xd2, 0x5c, 0x39, 0x16, 0xf9, 0x58, - 0xe6, 0x4b, 0x22, 0x78, 0xa3, 0xfa, 0x1c, 0x58, 0x4d, 0xbb, 0xa0, 0x3b, - 0x21, 0xd2, 0x44, 0xfd, 0xf0, 0xb5, 0xb6, 0xa3, 0x1f, 0x02, 0x3e, 0xfc, - 0x48, 0x84, 0x75, 0x2d, 0xcd, 0x20, 0xd7, 0x11, 0xe7, 0x11, 0x8e, 0x76, - 0x1e, 0xe1, 0x88, 0x3d, 0x55, 0x1d, 0x3d, 0x3b, 0xb8, 0xf4, 0x66, 0xcf, - 0x83, 0x64, 0xe3, 0x43, 0x63, 0xcf, 0xf1, 0x3a, 0xb0, 0xed, 0x4f, 0xd2, - 0xb5, 0x90, 0xc0, 0x42, 0x12, 0x39, 0x50, 0x6d, 0x8f, 0x61, 0xad, 0x13, - 0xb7, 0x7a, 0xa2, 0x2f, 0x31, 0xca, 0x0a, 0xc9, 0x20, 0xd6, 0x34, 0x7a, - 0xe8, 0x16, 0x9c, 0x0f, 0x2e, 0xbf, 0x61, 0x49, 0x46, 0x47, 0x06, 0x0e, - 0xda, 0x75, 0x3f, 0x70, 0x3c, 0x99, 0xe2, 0x18, 0x11, 0x1a, 0x18, 0x01, - 0xc6, 0x62, 0x01, 0xfd, 0x26, 0x7e, 0xbe, 0x4e, 0x4e, 0xc2, 0x75, 0x11, - 0x65, 0xc9, 0xd0, 0xd2, 0xfb, 0xe1, 0x3a, 0x99, 0xde, 0xab, 0x91, 0x28, - 0xe2, 0xd5, 0x87, 0x15, 0x43, 0xc8, 0x85, 0x8d, 0x76, 0xeb, 0x8f, 0x38, - 0xe8, 0x78, 0x50, 0x02, 0x77, 0xcd, 0x20, 0x5c, 0x74, 0xbb, 0x8a, 0xa0, - 0xf3, 0x35, 0x0a, 0xb3, 0x4c, 0xbc, 0x9c, 0x17, 0x0c, 0x97, 0x0e, 0x54, - 0x2b, 0x82, 0x71, 0x6f, 0x91, 0xf7, 0x40, 0xfe, 0xd9, 0xe5, 0xa2, 0xac, - 0x2d, 0xd4, 0xe1, 0x3f, 0x68, 0x75, 0x02, 0x4f, 0xca, 0x86, 0x04, 0x7e, - 0x71, 0x2e, 0x99, 0xbb, 0x47, 0x41, 0x73, 0x04, 0x2e, 0xcf, 0x82, 0xfd, - 0x37, 0xf9, 0xcb, 0x1b, 0xad, 0xfb, 0x02, 0xf1, 0x2a, 0xe6, 0xd3, 0xcb, - 0xf2, 0x12, 0x63, 0xda, 0x51, 0x78, 0x86, 0x18, 0xf7, 0xec, 0x56, 0xde, - 0x75, 0xeb, 0xe9, 0xb9, 0xab, 0x11, 0xf9, 0xbd, 0xd6, 0x00, 0x2d, 0xd5, - 0x8f, 0x9e, 0xea, 0x87, 0x32, 0xbe, 0x3c, 0x94, 0x02, 0xd5, 0xad, 0xf2, - 0x95, 0x3e, 0x4e, 0x34, 0x8a, 0x1c, 0xd8, 0x9d, 0x64, 0xd9, 0x94, 0x17, - 0x17, 0x95, 0xa1, 0x11, 0x75, 0x61, 0xe7, 0x0b, 0xc4, 0x8b, 0x5f, 0x09, - 0x75, 0x37, 0x26, 0xa1, 0x94, 0x39, 0x09, 0x30, 0x8c, 0x1f, 0x32, 0x4f, - 0x4d, 0xc2, 0xc0, 0xd7, 0x27, 0x77, 0x42, 0xa0, 0x3e, 0xc5, 0x62, 0x35, - 0xca, 0x2f, 0x5e, 0x3d, 0xf2, 0x95, 0x6a, 0xef, 0xa0, 0x1e, 0x8d, 0xe4, - 0x08, 0x03, 0x1b, 0x57, 0x10, 0x0c, 0xec, 0xd9, 0xe3, 0xda, 0x37, 0x65, - 0xfa, 0xba, 0xeb, 0x38, 0x14, 0x91, 0x7a, 0x85, 0xb2, 0xfa, 0xce, 0xa4, - 0xa1, 0x43, 0x11, 0xf0, 0x5e, 0x7a, 0x7e, 0xe7, 0xfa, 0x2e, 0xb4, 0x5e, - 0x79, 0xc0, 0x60, 0x5a, 0xf5, 0x02, 0xdc, 0x68, 0x94, 0xca, 0xa8, 0x4d, - 0x35, 0x6e, 0x72, 0x61, 0x56, 0xfd, 0x77, 0x48, 0xcb, 0xef, 0x90, 0xb5, - 0x33, 0x12, 0x69, 0x62, 0x19, 0x74, 0x2d, 0xa4, 0xa3, 0xd4, 0x25, 0x88, - 0x34, 0xe2, 0x08, 0x6f, 0x94, 0x28, 0x08, 0xe3, 0x8d, 0x8a, 0xc6, 0xd3, - 0x3c, 0x30, 0xbc, 0x6f, 0x2c, 0xad, 0x1f, 0x3b, 0x67, 0x0b, 0xb8, 0xb8, - 0x96, 0xe4, 0x8b, 0x0f, 0x7e, 0xf9, 0xbe, 0x63, 0x5d, 0x1f, 0xc3, 0x35, - 0xfd, 0xed, 0xca, 0xd7, 0x9d, 0xf6, 0x02, 0x49, 0xf8, 0xc2, 0xce, 0xf6, - 0xce, 0xa1, 0xfa, 0x80, 0x91, 0xde, 0x87, 0xc0, 0x8a, 0xeb, 0x52, 0x0e, - 0xeb, 0x3c, 0x34, 0x1c, 0x1d, 0xaa, 0x72, 0xb2, 0x9d, 0x06, 0xb0, 0xb3, - 0xb6, 0x54, 0x56, 0x10, 0x0e, 0x42, 0x3f, 0x54, 0xcb, 0x3c, 0xc0, 0x7f, - 0x28, 0xd7, 0xbd, 0x27, 0x99, 0xb1, 0x17, 0x2d, 0x00, 0x28, 0xb8, 0xb7, - 0xaf, 0x44, 0xbf, 0x27, 0x1d, 0x07, 0x79, 0x4f, 0x1f, 0x5d, 0x4b, 0xe9, - 0x62, 0x0c, 0x9e, 0x5e, 0x29, 0x75, 0x69, 0x69, 0xe5, 0xbd, 0xa2, 0x85, - 0xf4, 0x57, 0x74, 0xf9, 0x4e, 0x4e, 0x5e, 0xb9, 0x01, 0x4e, 0x90, 0xde, - 0x09, 0xf7, 0xcf, 0x1a, 0x81, 0x94, 0xf8, 0x9e, 0x75, 0xda, 0xfc, 0x3d, - 0x53, 0x64, 0x7d, 0xc7, 0x29, 0xc3, 0xf7, 0xac, 0x27, 0x52, 0x33, 0xbb, - 0xa0, 0xfd, 0x86, 0x0a, 0x0c, 0x37, 0x7c, 0x78, 0x8f, 0x27, 0x9f, 0xf4, - 0xb4, 0xde, 0x75, 0x0b, 0x2d, 0xe0, 0x43, 0x3f, 0x7c, 0x79, 0x28, 0x71, - 0x3e, 0xca, 0x66, 0xe7, 0xee, 0xa2, 0x58, 0x07, 0x89, 0x08, 0x8c, 0x7e, - 0xaa, 0x7c, 0x37, 0x14, 0x24, 0xdf, 0x48, 0x77, 0xbe, 0x0b, 0x7a, 0x5f, - 0xf3, 0x76, 0x31, 0xe4, 0x73, 0xd5, 0x6a, 0xcf, 0xe7, 0x4a, 0xc5, 0x6b, - 0x9c, 0x1a, 0xfc, 0x58, 0x2c, 0xb8, 0x2d, 0xd2, 0x64, 0x7f, 0xbc, 0xf2, - 0x59, 0x64, 0x1a, 0xe3, 0xe3, 0x83, 0xe4, 0x47, 0x47, 0xec, 0x70, 0x07, - 0xe1, 0xea, 0x84, 0x93, 0x30, 0x21, 0x1a, 0x78, 0x73, 0x38, 0x07, 0xc4, - 0x6c, 0x89, 0xc0, 0x12, 0xf9, 0xd9, 0xfe, 0x91, 0x9e, 0xb1, 0x3d, 0xa8, - 0x59, 0x68, 0xf4, 0x4a, 0x3d, 0x88, 0x0f, 0x6d, 0x3a, 0x3a, 0x40, 0xab, - 0x2d, 0xf4, 0xde, 0x4e, 0x06, 0xc1, 0xc2, 0xae, 0x6b, 0x7e, 0xb8, 0xb1, - 0xdd, 0x70, 0x0d, 0xbb, 0xbb, 0x83, 0xcd, 0x5d, 0x87, 0xee, 0xfc, 0x74, - 0x95, 0x76, 0x20, 0x9f, 0x20, 0x11, 0xee, 0xee, 0xc8, 0x39, 0xad, 0x28, - 0xbf, 0x8d, 0x08, 0xcd, 0x50, 0xd7, 0x89, 0x91, 0x38, 0x3d, 0xf8, 0x46, - 0xd3, 0xe0, 0x16, 0x54, 0x15, 0x02, 0x96, 0xaf, 0x61, 0x9b, 0x97, 0x8c, - 0x52, 0x34, 0x7f, 0xb9, 0x03, 0xb3, 0x0b, 0x36, 0x66, 0x3f, 0x83, 0xda, - 0xf6, 0xa7, 0xab, 0x6d, 0x7f, 0xba, 0xda, 0xf6, 0x67, 0x6b, 0xe9, 0x7d, - 0xdb, 0x23, 0x96, 0xc7, 0x3e, 0x54, 0x11, 0xea, 0x31, 0x8b, 0xa5, 0xec, - 0x28, 0x4c, 0xf1, 0x59, 0xf0, 0xb7, 0x41, 0x3f, 0xd7, 0x25, 0x1c, 0x43, - 0x2b, 0xb9, 0x8f, 0x28, 0x22, 0x2c, 0x0c, 0x23, 0xf3, 0x71, 0xf5, 0xc3, - 0x22, 0x3c, 0x03, 0xac, 0x53, 0xef, 0x82, 0x02, 0x38, 0x93, 0xcf, 0xed, - 0xa0, 0x0f, 0x4a, 0xf8, 0xd7, 0xda, 0x1e, 0x04, 0x91, 0x5f, 0x94, 0xea, - 0xaf, 0x8b, 0x9f, 0xbf, 0x14, 0x3f, 0x21, 0x7d, 0xfe, 0x86, 0xf4, 0xf9, - 0xeb, 0xd2, 0xe7, 0xaf, 0x4b, 0x9f, 0xbf, 0x21, 0x7d, 0xfe, 0x62, 0x8d, - 0x72, 0x07, 0xc5, 0xdf, 0xf3, 0x9f, 0xe3, 0x1f, 0x13, 0xba, 0x70, 0x51, - 0xbb, 0x91, 0xff, 0x0e, 0x57, 0x30, 0xfe, 0xe7, 0xb8, 0xfe, 0x73, 0xa0, - 0x94, 0x0e, 0x1a, 0x41, 0x87, 0xb1, 0xbf, 0xe3, 0xe6, 0xb3, 0xfe, 0xe3, - 0xae, 0xcc, 0x3a, 0x1e, 0x56, 0x3a, 0xf6, 0xf4, 0x07, 0xbf, 0xf3, 0x78, - 0xb4, 0xd9, 0xe6, 0xf1, 0xc4, 0x39, 0x9f, 0xe3, 0x69, 0x52, 0xed, 0x3f, - 0x26, 0x35, 0x1d, 0x38, 0x2b, 0xa8, 0x63, 0x6e, 0x07, 0xce, 0xa5, 0x51, - 0x23, 0xe0, 0xf8, 0xc2, 0xd7, 0x1e, 0x5f, 0xf8, 0x9f, 0x3f, 0x19, 0xc4, - 0x06, 0x35, 0xeb, 0x43, 0x0e, 0xbe, 0xbb, 0xa0, 0x91, 0xf3, 0xa9, 0x62, - 0x26, 0x8c, 0x2c, 0x3d, 0x30, 0xff, 0xc5, 0x93, 0xd7, 0x08, 0x1c, 0xda, - 0xcf, 0x34, 0x19, 0x04, 0x6e, 0x6b, 0xc6, 0x62, 0x1a, 0x92, 0x8f, 0x2b, - 0x25, 0x67, 0xac, 0xdb, 0x1f, 0x0b, 0x9b, 0xad, 0xc9, 0x3b, 0x33, 0x5f, - 0x03, 0x71, 0x73, 0xc6, 0xce, 0x58, 0xee, 0x12, 0x61, 0x44, 0x9e, 0x79, - 0x30, 0xd3, 0xd8, 0x8c, 0x07, 0x0d, 0x0c, 0x5a, 0x38, 0x34, 0x57, 0x4b, - 0xde, 0x6a, 0xde, 0xb3, 0xc1, 0xc5, 0x03, 0x16, 0xe6, 0x9a, 0xd3, 0xc8, - 0x29, 0xe5, 0x86, 0x50, 0x0e, 0x0e, 0xaa, 0x00, 0x6f, 0x0b, 0x72, 0xdf, - 0x38, 0x7c, 0xda, 0xd6, 0x85, 0xe5, 0x82, 0x3d, 0x8e, 0x30, 0xac, 0xd4, - 0x5d, 0xbc, 0x14, 0x1a, 0x2f, 0xf3, 0x3e, 0x67, 0xfe, 0xe3, 0x3c, 0xd5, - 0xe8, 0x7a, 0x80, 0xce, 0x7a, 0x68, 0xeb, 0xd4, 0xf5, 0x23, 0xe5, 0x90, - 0xfc, 0x97, 0x5d, 0xf6, 0xa1, 0x1c, 0x63, 0x68, 0x17, 0x6c, 0xe6, 0xf2, - 0xc9, 0x7e, 0x6b, 0x99, 0xd7, 0x31, 0x34, 0xd8, 0x4d, 0x7c, 0xc4, 0xbf, - 0x0b, 0xed, 0x30, 0x4e, 0xb0, 0xe8, 0x49, 0x7f, 0x04, 0x90, 0x94, 0x65, - 0xb5, 0xc0, 0x9e, 0x73, 0x5b, 0x71, 0x75, 0x06, 0x61, 0x98, 0xac, 0x3b, - 0xe9, 0xf9, 0x48, 0x41, 0x5b, 0xa1, 0x53, 0x10, 0x5e, 0xf4, 0x3b, 0xb7, - 0x56, 0x4d, 0xfa, 0x9d, 0xbe, 0xec, 0x09, 0x5b, 0xf4, 0xff, 0x40, 0xc8, - 0xb5, 0x7f, 0x2c, 0xad, 0x1a, 0xb1, 0x4c, 0x80, 0xad, 0xd6, 0x5b, 0xcc, - 0x19, 0xc1, 0x41, 0x2d, 0xb1, 0x31, 0x50, 0xe0, 0x77, 0xfd, 0x1c, 0xb0, - 0x36, 0x7e, 0x6e, 0x3e, 0x6f, 0x25, 0x0b, 0x35, 0xf9, 0x16, 0x31, 0x1d, - 0xa0, 0xb0, 0xea, 0xcb, 0x04, 0x70, 0x38, 0xf6, 0xe1, 0xf5, 0x2b, 0xaf, - 0xa0, 0xf7, 0x51, 0xa2, 0xf3, 0xcb, 0x1f, 0x0f, 0x18, 0x17, 0xc4, 0x74, - 0xd5, 0x21, 0xf2, 0x96, 0xcd, 0xe7, 0xd7, 0xe5, 0x30, 0xbe, 0x0f, 0xf9, - 0x7c, 0xaa, 0xa7, 0x38, 0x8f, 0x66, 0x94, 0x5b, 0x2c, 0xf4, 0x80, 0x7b, - 0x0a, 0xaf, 0xd6, 0xa0, 0x07, 0x0d, 0x2c, 0xb8, 0x14, 0x1a, 0xe7, 0x19, - 0x3e, 0xeb, 0x36, 0x21, 0x99, 0x23, 0x37, 0x78, 0xbf, 0x59, 0x92, 0x1b, - 0x86, 0xb1, 0xa6, 0xe1, 0xa7, 0xd7, 0x5c, 0xc6, 0xe4, 0xdd, 0xa4, 0x0c, - 0x35, 0x38, 0xe4, 0xf3, 0xef, 0xb9, 0xe8, 0x06, 0x7b, 0x60, 0x98, 0x0e, - 0x6e, 0x3f, 0x7c, 0x4f, 0x34, 0x6e, 0x3c, 0xa6, 0xe9, 0x1b, 0x27, 0xd6, - 0xca, 0xd9, 0x25, 0x0c, 0xaf, 0x92, 0xb3, 0xae, 0xb7, 0x7d, 0xe5, 0xfd, - 0x3e, 0xc6, 0x73, 0xbf, 0x5b, 0x3d, 0x1a, 0x4a, 0xe9, 0x21, 0xe5, 0xb8, - 0x9e, 0x70, 0xd8, 0x1c, 0x1a, 0xd9, 0x9a, 0x4e, 0xe9, 0x7c, 0x4d, 0xbf, - 0xfd, 0x65, 0xab, 0x95, 0x8f, 0x63, 0x48, 0xc6, 0x0b, 0x76, 0x47, 0x46, - 0x7e, 0x3e, 0xbd, 0xda, 0x15, 0x82, 0x83, 0x1b, 0x7e, 0xcc, 0xe3, 0xf7, - 0xbc, 0x8e, 0x7d, 0xa8, 0x96, 0x96, 0x8a, 0xe9, 0x31, 0xfc, 0xaa, 0x0d, - 0xfd, 0xc6, 0xcd, 0x2f, 0x0f, 0xd2, 0xd0, 0xe8, 0x0b, 0x37, 0xa3, 0x8f, - 0x51, 0xac, 0x3f, 0x63, 0xda, 0x34, 0xbc, 0xfd, 0x62, 0x70, 0x06, 0x37, - 0x28, 0x71, 0x91, 0x4d, 0xd3, 0x32, 0xbe, 0xbb, 0x71, 0xf7, 0xa3, 0xa7, - 0xde, 0xf9, 0xd1, 0x03, 0xe6, 0xea, 0x03, 0x5b, 0xd2, 0x75, 0x3e, 0xd5, - 0x46, 0x38, 0x3d, 0xb1, 0xd3, 0x7a, 0x72, 0xca, 0x13, 0x0e, 0x8a, 0xf4, - 0x70, 0x5b, 0x12, 0xca, 0x6d, 0xcc, 0xd9, 0xa2, 0xcb, 0x2a, 0x4e, 0x01, - 0x96, 0xb6, 0xa4, 0x64, 0xcc, 0x8e, 0x25, 0x98, 0x31, 0x41, 0x58, 0xbc, - 0x1a, 0x7d, 0x5b, 0x21, 0x9f, 0x42, 0x34, 0x39, 0xf8, 0x35, 0xe4, 0x31, - 0x15, 0x38, 0x5a, 0xc1, 0x56, 0x5c, 0x9d, 0x37, 0x24, 0xcb, 0xf9, 0x1e, - 0x7a, 0x6d, 0xc6, 0xda, 0x9d, 0x19, 0xa3, 0xaa, 0xec, 0x09, 0xce, 0x0e, - 0xd0, 0x37, 0x18, 0x5c, 0x0e, 0x3e, 0x6e, 0xd3, 0x75, 0x2c, 0x12, 0x2e, - 0x96, 0x75, 0x2f, 0xb0, 0x01, 0x59, 0x9b, 0x7c, 0x31, 0xb8, 0x78, 0xa2, - 0x0e, 0xd9, 0x5f, 0x3a, 0xe5, 0xc9, 0x37, 0x73, 0xa1, 0xa5, 0xfb, 0xfb, - 0x4f, 0xa6, 0x7c, 0xcf, 0xed, 0x13, 0xbf, 0x21, 0x67, 0x0d, 0x3e, 0xc9, - 0x0e, 0x3e, 0xf3, 0x7b, 0x64, 0xa1, 0x41, 0xd4, 0xf0, 0x90, 0xed, 0xef, - 0xaf, 0x76, 0x4a, 0xe5, 0x80, 0x72, 0xf9, 0xd7, 0xf0, 0xd2, 0x05, 0x46, - 0xbb, 0x86, 0x5a, 0x7d, 0xc1, 0xb5, 0x56, 0x6b, 0x63, 0xf6, 0x67, 0x0f, - 0xe7, 0x32, 0xde, 0x62, 0x43, 0xd6, 0x66, 0x24, 0xc3, 0x9b, 0x69, 0x81, - 0xcd, 0x35, 0x07, 0x98, 0xe6, 0x05, 0xec, 0x25, 0x78, 0xb1, 0x02, 0x39, - 0x71, 0xe9, 0x8e, 0xa3, 0xa1, 0xcb, 0xe0, 0xf0, 0x9d, 0x35, 0x25, 0x26, - 0x37, 0x3f, 0x56, 0x7d, 0xfa, 0x05, 0x7a, 0x24, 0x43, 0x5c, 0x96, 0x25, - 0x23, 0x57, 0xea, 0x13, 0xe7, 0xb3, 0x0d, 0x2e, 0xba, 0xfe, 0x2f, 0x7e, - 0xc1, 0xba, 0x63, 0xab, 0x31, 0x17, 0x9d, 0x42, 0x1c, 0xd8, 0x7d, 0x1f, - 0x3e, 0x6f, 0xc9, 0xf9, 0x36, 0x37, 0xe6, 0xd8, 0x9f, 0x43, 0x4a, 0x71, - 0x08, 0x7d, 0xf0, 0x9a, 0x39, 0x81, 0x18, 0x52, 0x60, 0x92, 0x77, 0x83, - 0xb9, 0x29, 0x4a, 0x80, 0x83, 0xb5, 0x9b, 0xdb, 0xc0, 0x9d, 0xb2, 0x0c, - 0xfc, 0x3c, 0x86, 0xfb, 0x19, 0x5e, 0x85, 0x3a, 0x5d, 0xc7, 0xbf, 0xbd, - 0x54, 0xa8, 0x1b, 0x37, 0x7e, 0x25, 0x4c, 0xa4, 0x9c, 0x78, 0x2b, 0x88, - 0x8e, 0xc3, 0x74, 0x09, 0x99, 0x65, 0x81, 0x9d, 0xca, 0xce, 0xd7, 0x8e, - 0x71, 0xfc, 0xbb, 0x33, 0x90, 0xf3, 0x96, 0x96, 0x1d, 0x07, 0xae, 0x5b, - 0xe8, 0x09, 0x87, 0xd9, 0xf9, 0x13, 0xf7, 0x6a, 0xd0, 0x0a, 0xf8, 0xd6, - 0x99, 0x75, 0xee, 0xb8, 0xdf, 0x7a, 0x1c, 0xec, 0x6f, 0x67, 0xb7, 0x53, - 0x2b, 0x33, 0x1e, 0x02, 0xf3, 0xc9, 0xe1, 0x1c, 0x7f, 0x59, 0xe7, 0xef, - 0xb1, 0x37, 0xb6, 0x99, 0xd1, 0xd1, 0xea, 0x11, 0x96, 0x9c, 0x1e, 0xb9, - 0x0c, 0xcd, 0xf2, 0x8a, 0xdb, 0x2a, 0x97, 0x68, 0x95, 0x57, 0x6b, 0xc5, - 0x63, 0x8b, 0x34, 0xfe, 0x14, 0x7a, 0x9a, 0x86, 0x9e, 0xfd, 0x4a, 0x63, - 0xfe, 0xa7, 0x9f, 0xa1, 0x11, 0xb7, 0x9e, 0x5d, 0x78, 0x8d, 0x27, 0xc3, - 0xa6, 0xb2, 0x7e, 0x6f, 0xb4, 0xe2, 0x7b, 0x19, 0x93, 0x1f, 0x42, 0xc7, - 0xe6, 0xf0, 0x28, 0x23, 0x98, 0xc3, 0x5e, 0x4f, 0x4c, 0x84, 0x93, 0x52, - 0x19, 0x83, 0x49, 0xa9, 0xb4, 0xcc, 0x7d, 0xce, 0xcb, 0xad, 0xd7, 0x1c, - 0x63, 0xbf, 0xa7, 0x65, 0xcc, 0x1c, 0x39, 0x28, 0x98, 0xa3, 0x2c, 0x83, - 0xd7, 0x79, 0xe2, 0x93, 0x87, 0x3b, 0x31, 0xc9, 0x23, 0x73, 0x88, 0x96, - 0xab, 0x89, 0xf9, 0x43, 0x28, 0x70, 0x78, 0x5d, 0x75, 0xf7, 0x4a, 0xb0, - 0xbc, 0x49, 0xa6, 0x79, 0xf8, 0x6e, 0x5f, 0x0d, 0x18, 0xce, 0xcb, 0x79, - 0xe0, 0x34, 0xbe, 0x9f, 0xba, 0x26, 0x5b, 0xfc, 0x25, 0x58, 0x42, 0xb1, - 0x49, 0xe0, 0x98, 0x1b, 0x10, 0x35, 0xf1, 0x9c, 0xd6, 0x56, 0x19, 0xc9, - 0x75, 0xfc, 0x9d, 0x4a, 0x63, 0xb4, 0x7f, 0x7f, 0x60, 0xd9, 0xaa, 0x8b, - 0x1a, 0xd7, 0x8c, 0x2b, 0x88, 0xae, 0x5d, 0x52, 0xbb, 0xe6, 0x93, 0x18, - 0xc4, 0x13, 0x15, 0xad, 0x8d, 0xea, 0x3c, 0xc5, 0xc0, 0xbe, 0xee, 0x50, - 0x6f, 0x1e, 0x92, 0x94, 0x5f, 0xaf, 0xbc, 0x0e, 0x8c, 0xdf, 0x8b, 0xf4, - 0x3d, 0x7a, 0x38, 0xea, 0x1f, 0x97, 0xed, 0xd4, 0x77, 0xd2, 0x61, 0x8f, - 0x8c, 0x6c, 0x4c, 0x97, 0x03, 0xe1, 0x96, 0xea, 0xfc, 0x27, 0x8c, 0x65, - 0x82, 0xc9, 0x12, 0x76, 0x8e, 0x64, 0xd3, 0xc9, 0xbf, 0x4d, 0xa3, 0x46, - 0x6e, 0xfe, 0x13, 0x9f, 0x0f, 0xec, 0xff, 0xaf, 0x63, 0x4b, 0xc7, 0xdf, - 0xd1, 0x9f, 0x6e, 0xb4, 0x54, 0xd8, 0x6b, 0xac, 0x39, 0x1d, 0xe7, 0x0c, - 0x41, 0x03, 0x50, 0x08, 0x38, 0xbe, 0xb2, 0x9f, 0x7f, 0x6b, 0x67, 0xb6, - 0x3c, 0xef, 0x9b, 0xc3, 0x5f, 0x2f, 0x43, 0x9e, 0xaf, 0x38, 0xad, 0x35, - 0x24, 0x62, 0xe5, 0x49, 0x8b, 0xa1, 0x00, 0xe9, 0xd0, 0x18, 0xcc, 0xf6, - 0x86, 0x08, 0x1e, 0x65, 0x90, 0x21, 0x8c, 0xb7, 0xb2, 0x1f, 0x2f, 0x64, - 0x09, 0xb7, 0xbc, 0x9e, 0x13, 0xba, 0x5f, 0xff, 0x78, 0x49, 0xd7, 0xd2, - 0x3a, 0x28, 0xb0, 0x98, 0x79, 0xa5, 0x3f, 0x5e, 0x78, 0x6a, 0x66, 0x4c, - 0xe9, 0x9e, 0x97, 0x53, 0x42, 0x77, 0x18, 0xab, 0x18, 0x83, 0x81, 0x7d, - 0x95, 0x61, 0xd2, 0x06, 0x37, 0xbf, 0x68, 0xe7, 0x14, 0x8e, 0xdf, 0x9e, - 0xf3, 0x27, 0x42, 0xdd, 0x7b, 0x33, 0x86, 0xef, 0x2e, 0xcb, 0x9f, 0x57, - 0xeb, 0xf1, 0xe7, 0xbd, 0xbf, 0x19, 0x30, 0x5e, 0x48, 0xd0, 0x1d, 0x28, - 0xdb, 0x83, 0x39, 0xc9, 0xcc, 0x57, 0x19, 0x33, 0x88, 0x9a, 0xb7, 0xfe, - 0x95, 0x94, 0xe0, 0x74, 0xbc, 0xa6, 0x3f, 0xf9, 0xf7, 0xcd, 0x38, 0xc7, - 0x92, 0xa7, 0xa6, 0xf8, 0x18, 0xa7, 0x1c, 0xc6, 0xb4, 0x7f, 0xdb, 0x24, - 0x7f, 0x0c, 0x98, 0xba, 0x77, 0xa7, 0xa8, 0x72, 0xb9, 0xcd, 0xa7, 0x96, - 0x02, 0xf5, 0x9b, 0x3a, 0xf4, 0x27, 0xf0, 0xd0, 0x23, 0x25, 0xd3, 0x7f, - 0xb2, 0xa9, 0xe7, 0x39, 0xb8, 0x70, 0x69, 0xfe, 0xcb, 0xb1, 0xd5, 0xa1, - 0x2a, 0x92, 0x3f, 0xa5, 0x91, 0x2e, 0x8d, 0x3b, 0x4e, 0x73, 0x5b, 0x3a, - 0xd4, 0xff, 0xe1, 0xf7, 0x4f, 0xc0, 0xde, 0x8b, 0x65, 0x13, 0x0d, 0x1b, - 0xfe, 0x4e, 0x63, 0x47, 0x9b, 0x3f, 0x81, 0xca, 0x74, 0x6f, 0xd3, 0xd9, - 0x2b, 0xb5, 0xd0, 0x7b, 0xd2, 0xc5, 0x7a, 0xba, 0xad, 0xc7, 0x3a, 0x0f, - 0x23, 0xe6, 0x30, 0x4a, 0x4c, 0xd7, 0x72, 0xdc, 0xd2, 0x80, 0xe3, 0xb5, - 0x23, 0xb5, 0xcc, 0x61, 0xd1, 0x47, 0x45, 0x8d, 0x33, 0xee, 0x82, 0x3d, - 0x98, 0xe3, 0x32, 0x8e, 0xaa, 0x58, 0x6c, 0xf9, 0x6e, 0x95, 0x9b, 0x67, - 0xca, 0x58, 0x45, 0x30, 0xb5, 0x1f, 0x5f, 0x3a, 0xf5, 0x7d, 0x1c, 0x5d, - 0x6e, 0x13, 0x0d, 0x4b, 0xc9, 0xe9, 0xc6, 0x7b, 0x39, 0x23, 0xcf, 0x6f, - 0xe9, 0xca, 0x2b, 0x18, 0x88, 0x74, 0xc8, 0x4e, 0x70, 0x9c, 0xd6, 0x1a, - 0x3f, 0x8e, 0x29, 0xb7, 0x74, 0x4f, 0xd3, 0xf8, 0xfd, 0x72, 0x18, 0xc2, - 0xbc, 0xa7, 0xeb, 0xe9, 0xf5, 0x3b, 0xe6, 0x06, 0x67, 0xff, 0xa7, 0xde, - 0xd1, 0x1d, 0xc6, 0x37, 0xe6, 0x75, 0x0c, 0x0f, 0x7a, 0x76, 0xe9, 0xcc, - 0x8e, 0xbe, 0xb5, 0x27, 0x74, 0xfd, 0x90, 0xc1, 0x92, 0xc5, 0xf0, 0x2e, - 0x3a, 0xee, 0x51, 0xa2, 0x30, 0x17, 0x9c, 0xd9, 0x9b, 0x86, 0xf0, 0xdc, - 0x61, 0x0c, 0xf1, 0x34, 0xe7, 0xbd, 0x25, 0x5a, 0x2c, 0xab, 0x5d, 0xa4, - 0x6a, 0x2e, 0xbf, 0xa3, 0xcb, 0x8a, 0x15, 0x8f, 0xf1, 0xab, 0xdc, 0xe9, - 0x14, 0xf2, 0xeb, 0x28, 0x9d, 0x59, 0xe7, 0x93, 0x7f, 0x5c, 0xe0, 0x19, - 0xab, 0x4c, 0x74, 0xd8, 0x98, 0x71, 0xd1, 0x88, 0x83, 0x1f, 0xde, 0xd8, - 0xce, 0x93, 0x75, 0x5c, 0x7e, 0x75, 0xbd, 0x4a, 0x93, 0xd7, 0x39, 0x9a, - 0x65, 0x7e, 0xfd, 0x75, 0x28, 0xc1, 0x61, 0x57, 0x43, 0xf0, 0xf6, 0xaf, - 0x4d, 0xb7, 0x06, 0x8f, 0xda, 0x06, 0x6b, 0xb8, 0x39, 0xcf, 0xb5, 0x7f, - 0x73, 0xc1, 0x25, 0x5e, 0x02, 0x58, 0x0e, 0xc7, 0x06, 0x9a, 0xac, 0x5d, - 0xe2, 0xea, 0xf7, 0xfb, 0x3d, 0x98, 0x72, 0x89, 0x08, 0x2f, 0x3a, 0x43, - 0x12, 0xf8, 0xab, 0xa1, 0x57, 0x43, 0x35, 0x10, 0xd4, 0xac, 0x1c, 0x7e, - 0xa7, 0x45, 0xf3, 0xf2, 0xe0, 0x06, 0x76, 0xd6, 0x92, 0xab, 0x30, 0xed, - 0xb6, 0x0e, 0x18, 0x7b, 0x70, 0x6e, 0x7f, 0xf3, 0x36, 0x5f, 0x53, 0xc3, - 0x11, 0x72, 0xae, 0xb0, 0x2f, 0xe4, 0x18, 0xfa, 0x3d, 0xcd, 0x58, 0xa7, - 0x00, 0x0f, 0xb4, 0x07, 0xc4, 0x99, 0x0b, 0xc7, 0xdc, 0xa2, 0x89, 0x14, - 0xe8, 0xea, 0xc9, 0xc0, 0x8f, 0xe9, 0x36, 0xb7, 0x04, 0xd1, 0x2e, 0x8c, - 0xe0, 0x71, 0x0b, 0x30, 0x2f, 0x3d, 0xc5, 0x47, 0x81, 0x62, 0x84, 0x63, - 0xda, 0x53, 0x95, 0x5d, 0xd0, 0x69, 0x6b, 0x80, 0x57, 0xd7, 0x3b, 0x53, - 0x74, 0xa8, 0x21, 0xb8, 0x1a, 0x68, 0x6f, 0x6e, 0x7b, 0x4b, 0x17, 0xcc, - 0xc4, 0x04, 0x3a, 0x9a, 0x87, 0x34, 0xf7, 0xbc, 0xbb, 0x72, 0xf7, 0xd6, - 0xf1, 0x73, 0x7a, 0xb5, 0x62, 0x72, 0x66, 0xe9, 0x31, 0xe3, 0x98, 0x89, - 0xf9, 0xce, 0xdd, 0x03, 0xb7, 0xff, 0x83, 0x89, 0xd4, 0x3e, 0x35, 0x2d, - 0x15, 0x6c, 0xef, 0xe2, 0xba, 0x18, 0xc1, 0xb9, 0x5c, 0xa3, 0xf8, 0x6d, - 0x7e, 0x30, 0xdb, 0x44, 0xeb, 0xc4, 0x14, 0x2f, 0x17, 0x28, 0xb4, 0xf7, - 0x0c, 0xbe, 0x2e, 0x53, 0x73, 0x4f, 0xe5, 0x6b, 0x80, 0x54, 0xaa, 0x09, - 0x43, 0xaa, 0x53, 0xfb, 0x05, 0x4a, 0x64, 0x1d, 0x0e, 0xe1, 0x1c, 0x35, - 0x8a, 0xf0, 0x9a, 0x79, 0x49, 0xcd, 0xda, 0xb8, 0xda, 0x51, 0x7f, 0x21, - 0xcb, 0x08, 0x51, 0x7c, 0xa7, 0x09, 0x9b, 0xbe, 0x10, 0x1f, 0x6c, 0x6b, - 0x17, 0x7f, 0x65, 0x1a, 0x77, 0xd2, 0x56, 0x6a, 0x63, 0x35, 0xb5, 0x6b, - 0x91, 0xe6, 0xaf, 0x86, 0xb6, 0x1e, 0x2a, 0xfa, 0xe7, 0xd5, 0x45, 0x4f, - 0x39, 0x94, 0x7d, 0xc0, 0xb5, 0xd5, 0xae, 0x2b, 0xf7, 0x62, 0x1d, 0x0e, - 0xae, 0x30, 0x79, 0xe6, 0xf0, 0xe8, 0x1e, 0x3e, 0x5b, 0xc0, 0x23, 0xf2, - 0xcc, 0xa6, 0x27, 0x0d, 0x95, 0xfe, 0x29, 0xd8, 0x58, 0x15, 0xbc, 0xd9, - 0xec, 0x37, 0x92, 0x6b, 0xb8, 0xd7, 0x9c, 0x1b, 0x1a, 0xa1, 0x25, 0xba, - 0x67, 0x80, 0xbb, 0x9c, 0x1c, 0x66, 0x0f, 0x1e, 0x62, 0x01, 0xad, 0xa9, - 0x39, 0x17, 0x6d, 0x02, 0xc6, 0x9a, 0xe7, 0x36, 0x0e, 0xba, 0x03, 0xe5, - 0x9d, 0xc8, 0xf2, 0xdb, 0xdc, 0x92, 0x92, 0x7b, 0x41, 0xdc, 0x72, 0x24, - 0x23, 0xef, 0xed, 0xe7, 0x88, 0x16, 0x76, 0x3c, 0x84, 0x30, 0xa0, 0x37, - 0x38, 0xaf, 0x03, 0x6c, 0x6d, 0xc8, 0x38, 0x18, 0xc3, 0x6e, 0xcc, 0x3b, - 0x95, 0x3d, 0x98, 0x43, 0x4a, 0xe9, 0xe4, 0x52, 0x6b, 0xe1, 0xbc, 0x8f, - 0xf1, 0xd3, 0x3f, 0x33, 0xe1, 0xca, 0xfd, 0xd6, 0xa1, 0xa6, 0x9f, 0x2d, - 0xef, 0x1a, 0x98, 0x6f, 0xb2, 0x77, 0x4a, 0x70, 0x6f, 0xdd, 0x48, 0xe8, - 0xa3, 0x34, 0x26, 0xbe, 0xe9, 0x8e, 0x2b, 0x12, 0xbd, 0x9b, 0x37, 0x66, - 0xb9, 0xd2, 0xa2, 0x97, 0x73, 0x3c, 0xeb, 0x2c, 0x9c, 0xda, 0x75, 0xd2, - 0x8d, 0x6f, 0xf1, 0xdd, 0xd3, 0xd0, 0x4f, 0xde, 0x61, 0x03, 0x49, 0x68, - 0xc6, 0x39, 0x30, 0x87, 0xb5, 0x57, 0xef, 0x3b, 0x2e, 0xe7, 0x69, 0x90, - 0x7a, 0x21, 0xce, 0x40, 0x07, 0xa7, 0xc1, 0x21, 0xb2, 0x25, 0xbf, 0x1d, - 0xe5, 0x5c, 0x5b, 0x26, 0x82, 0x69, 0x4d, 0x09, 0x93, 0x05, 0x47, 0xa5, - 0x07, 0x0f, 0xc8, 0x13, 0x5f, 0xce, 0x26, 0x13, 0x24, 0xdb, 0xf0, 0x72, - 0x2f, 0xdc, 0x58, 0x76, 0x8c, 0x4d, 0x7a, 0xc1, 0xc3, 0xbf, 0xf9, 0x31, - 0x35, 0x63, 0xa6, 0xce, 0xe7, 0xa5, 0xe3, 0x72, 0x69, 0xe8, 0x96, 0xd6, - 0xc1, 0xbd, 0x97, 0x91, 0xe4, 0x83, 0xa5, 0x31, 0x15, 0x7b, 0x61, 0x9e, - 0xde, 0x07, 0x16, 0xb4, 0x1c, 0x2e, 0x39, 0x06, 0x83, 0x47, 0xfb, 0xd2, - 0x47, 0x64, 0xc5, 0x23, 0xb7, 0xb0, 0x73, 0x9f, 0x07, 0x37, 0x76, 0x88, - 0x8d, 0x7c, 0x94, 0x2b, 0x2e, 0xd7, 0xef, 0x88, 0x06, 0xf0, 0x4e, 0x5c, - 0xef, 0xc2, 0x1e, 0x61, 0x69, 0x22, 0xb8, 0x16, 0x41, 0xc9, 0x2d, 0xb5, - 0x25, 0xbf, 0x97, 0x0e, 0x5b, 0xca, 0x8f, 0x29, 0xba, 0x58, 0xc2, 0xb9, - 0xf9, 0x3f, 0xd6, 0x96, 0x25, 0x58, 0x56, 0xae, 0x01, 0x5f, 0xaf, 0xee, - 0xbc, 0xde, 0x06, 0x79, 0x09, 0xfc, 0xa3, 0xe5, 0xce, 0x33, 0x61, 0x61, - 0x2c, 0xf0, 0xe2, 0x29, 0xe5, 0x15, 0x0d, 0x8e, 0x76, 0x9a, 0xad, 0x10, - 0x03, 0x0b, 0x52, 0xfd, 0x55, 0xe8, 0xc1, 0xbe, 0xa6, 0xd9, 0xd3, 0xf5, - 0x3c, 0x3c, 0x6b, 0x61, 0x12, 0xb5, 0x1c, 0x3d, 0xbb, 0x66, 0x18, 0x71, - 0xeb, 0xdd, 0xdd, 0x7c, 0x16, 0x67, 0x64, 0x30, 0x54, 0xf0, 0x7b, 0x4c, - 0x26, 0x8c, 0xe4, 0xa6, 0x1a, 0x78, 0x6e, 0x15, 0xe2, 0x5f, 0x6c, 0xf2, - 0xe7, 0xc6, 0x78, 0x29, 0xfe, 0x9b, 0x2f, 0x97, 0x96, 0xb5, 0xff, 0xe6, - 0x39, 0x22, 0xff, 0xf7, 0x68, 0x0d, 0xfb, 0xdf, 0x83, 0x6a, 0x19, 0xc4, - 0x63, 0x6d, 0xfb, 0x6a, 0xef, 0x01, 0xdd, 0xa2, 0x86, 0x2c, 0xd8, 0x0f, - 0x0b, 0x3f, 0x60, 0x8e, 0x81, 0x8b, 0xe6, 0x46, 0xf3, 0xef, 0x8e, 0x8c, - 0x94, 0x96, 0xfa, 0x45, 0x37, 0xc9, 0x3b, 0xee, 0x50, 0xad, 0x3b, 0x98, - 0x47, 0xab, 0x2d, 0x5c, 0x5b, 0x0d, 0x1c, 0x59, 0xba, 0xb4, 0x3e, 0xdf, - 0xd0, 0xe1, 0x77, 0xa8, 0x3a, 0x7f, 0x6f, 0x9e, 0xef, 0xcd, 0xad, 0x75, - 0x74, 0xcb, 0xdc, 0x3f, 0x6a, 0xc1, 0x6e, 0x49, 0xc0, 0x35, 0x0d, 0xb2, - 0x1d, 0xd8, 0x56, 0x9a, 0x60, 0x3a, 0x6c, 0xef, 0x7a, 0x85, 0x58, 0x5a, - 0xa3, 0x5d, 0xf2, 0xed, 0xd1, 0x7f, 0x6f, 0x23, 0x51, 0xaf, 0x07, 0xd2, - 0xc8, 0x76, 0xa8, 0x5b, 0xbf, 0x9d, 0x89, 0xde, 0xc1, 0xd0, 0xfe, 0x8c, - 0xd6, 0xea, 0x4c, 0x4b, 0x87, 0x5b, 0x27, 0x75, 0x1c, 0xd9, 0xf3, 0x4a, - 0x53, 0x6f, 0x39, 0x2f, 0x98, 0x90, 0x69, 0x55, 0xe0, 0x95, 0x96, 0x26, - 0xee, 0xbd, 0x64, 0xcb, 0xd9, 0xf1, 0x3a, 0xc0, 0x79, 0x08, 0x95, 0x5c, - 0x69, 0xaf, 0xc4, 0x08, 0xfa, 0xca, 0x3d, 0x6b, 0x5e, 0x18, 0xa4, 0x07, - 0xd8, 0x46, 0x97, 0xd7, 0xb1, 0x2f, 0x81, 0xd7, 0xd6, 0xfd, 0xad, 0xb9, - 0x36, 0x04, 0x7b, 0x59, 0xcf, 0x5e, 0xfb, 0x71, 0x87, 0xa9, 0xa7, 0x7b, - 0xed, 0xe3, 0xfc, 0x7a, 0xf0, 0x68, 0x47, 0x44, 0x97, 0x61, 0x2c, 0x27, - 0xd2, 0x07, 0xed, 0xfa, 0xfe, 0x8b, 0x75, 0x74, 0xeb, 0x38, 0x2f, 0x71, - 0x97, 0x61, 0x5e, 0x52, 0xb6, 0xe9, 0xda, 0x8b, 0x7b, 0x6b, 0x49, 0xdd, - 0x34, 0x2b, 0x6c, 0xee, 0x21, 0x4c, 0xf2, 0x88, 0xd1, 0x75, 0xde, 0x4e, - 0x21, 0x94, 0xda, 0x72, 0x6b, 0x6b, 0xfd, 0xd2, 0x36, 0x0d, 0xe3, 0xe0, - 0x16, 0xd5, 0x63, 0xc3, 0x0a, 0x41, 0x17, 0xa8, 0xb6, 0x56, 0x49, 0xb7, - 0x79, 0x19, 0x0a, 0x8f, 0x37, 0xf0, 0x38, 0x5a, 0x7b, 0xe1, 0x6d, 0x4b, - 0x94, 0xb4, 0xce, 0x93, 0x3b, 0x8c, 0xd1, 0x7d, 0x8b, 0x39, 0xc1, 0xd6, - 0xdb, 0xf0, 0x96, 0xb7, 0xb6, 0x85, 0x2e, 0xbe, 0x84, 0x94, 0x07, 0x6b, - 0x09, 0x2d, 0xc2, 0x6c, 0x4d, 0x88, 0xba, 0x5f, 0xce, 0xc6, 0xeb, 0x85, - 0xf3, 0xd5, 0xc6, 0x60, 0x43, 0x29, 0x35, 0x8e, 0x2a, 0xdf, 0x9d, 0x69, - 0x43, 0xad, 0xcd, 0x2c, 0x9a, 0xf0, 0x85, 0xeb, 0x02, 0x90, 0x61, 0x4b, - 0x63, 0x5b, 0x24, 0x25, 0xcb, 0xba, 0xcb, 0xc0, 0x0d, 0x09, 0xc5, 0x21, - 0x90, 0x3a, 0xfc, 0xda, 0xec, 0x34, 0x34, 0x87, 0x6d, 0xf8, 0x95, 0xcb, - 0xbf, 0xe2, 0x6c, 0xf4, 0x8c, 0xec, 0x2e, 0xb2, 0x57, 0x23, 0xac, 0x93, - 0xfa, 0x81, 0x97, 0x57, 0xc0, 0x61, 0x6a, 0x6f, 0xdc, 0xa3, 0x45, 0x01, - 0xbc, 0x37, 0xa5, 0x0b, 0xb9, 0xe0, 0x3b, 0x9b, 0x75, 0x19, 0xb9, 0x51, - 0x6d, 0x2c, 0x70, 0x94, 0x94, 0x0d, 0x4a, 0xad, 0xc7, 0xc3, 0x81, 0xbb, - 0x40, 0x4d, 0xce, 0x2b, 0xb9, 0xb7, 0x36, 0x5e, 0xfd, 0x16, 0x28, 0x92, - 0x45, 0xad, 0x32, 0xc1, 0xa3, 0x85, 0x7f, 0xb4, 0x77, 0x76, 0xec, 0xbe, - 0x63, 0x9d, 0x2c, 0x58, 0x9b, 0x80, 0x9f, 0xc4, 0xa7, 0x7d, 0x6a, 0xc7, - 0x9c, 0x9c, 0xff, 0x6e, 0x39, 0xbf, 0x0f, 0x1d, 0x2c, 0x14, 0x04, 0xa3, - 0x29, 0x1a, 0x86, 0x7d, 0x50, 0xc7, 0x39, 0x66, 0x8b, 0xb2, 0xe4, 0xd3, - 0x71, 0xc8, 0xca, 0x7b, 0x8a, 0x52, 0xdd, 0xdb, 0x1c, 0x75, 0xe7, 0xa5, - 0x7b, 0x81, 0x4d, 0x08, 0xe7, 0x09, 0xea, 0x33, 0xdb, 0x47, 0xf5, 0xbd, - 0x15, 0xda, 0x9e, 0x7a, 0x7e, 0xec, 0x12, 0x80, 0x22, 0x46, 0x2c, 0x6d, - 0xae, 0xb5, 0x33, 0x73, 0xff, 0xa5, 0xb9, 0xfe, 0xd4, 0xf6, 0x9d, 0x30, - 0x8c, 0xd6, 0xa7, 0x35, 0xc6, 0x42, 0x59, 0xeb, 0xd6, 0xb8, 0xd2, 0xa6, - 0xde, 0xd0, 0x89, 0x5c, 0xda, 0x0f, 0xd4, 0x9d, 0x71, 0x58, 0x06, 0x18, - 0x51, 0xc0, 0x76, 0x72, 0xa0, 0xfe, 0x7b, 0x39, 0x5c, 0xc0, 0xa2, 0x75, - 0x4d, 0x47, 0x6d, 0x28, 0x31, 0xb8, 0x0e, 0xdd, 0x33, 0xd8, 0x14, 0x11, - 0x36, 0x29, 0x61, 0xff, 0x8a, 0x4e, 0xc7, 0x50, 0x8b, 0xee, 0x2b, 0x32, - 0x6d, 0x49, 0x29, 0xa4, 0xfc, 0xbd, 0x0d, 0x29, 0xfb, 0x72, 0xf4, 0x5c, - 0xc8, 0x57, 0xa9, 0x5c, 0x89, 0x89, 0x69, 0x05, 0xb5, 0x59, 0x1d, 0xe1, - 0x02, 0x82, 0x96, 0xb9, 0xb9, 0xc5, 0x91, 0x8f, 0xe6, 0xf7, 0x88, 0x41, - 0x79, 0xcf, 0xd4, 0x67, 0x7d, 0x44, 0x92, 0x42, 0xd2, 0xdb, 0xb7, 0xf6, - 0x15, 0x5b, 0xcc, 0x8a, 0xd1, 0xe6, 0xac, 0xa1, 0x07, 0xd3, 0x3e, 0x63, - 0x9b, 0xbb, 0x5c, 0xb5, 0x6f, 0xbd, 0x51, 0xc0, 0xb8, 0xca, 0x11, 0x91, - 0xd3, 0x7a, 0x7a, 0xc0, 0x10, 0x33, 0xf6, 0x3e, 0x58, 0xe0, 0x66, 0xda, - 0xad, 0xc1, 0xf3, 0x4a, 0x4f, 0xb8, 0x0c, 0x6b, 0x3d, 0x72, 0xea, 0x51, - 0x39, 0x77, 0xfa, 0xbd, 0x0e, 0x33, 0x32, 0x63, 0x5b, 0x58, 0xe9, 0xd5, - 0x50, 0x8b, 0x11, 0x06, 0x9e, 0x6f, 0x27, 0x66, 0xa8, 0xb5, 0x75, 0x96, - 0x72, 0xbb, 0x73, 0x65, 0x48, 0x74, 0x99, 0xb6, 0x01, 0xb6, 0x1e, 0x6a, - 0x87, 0x99, 0x8e, 0x57, 0xc7, 0x3d, 0x55, 0xa5, 0x49, 0x23, 0x83, 0x46, - 0x94, 0xd8, 0x03, 0x57, 0x44, 0xc4, 0x07, 0x1d, 0x21, 0x88, 0xec, 0xc7, - 0xd6, 0x3a, 0x7a, 0xe0, 0x5e, 0x9e, 0xc7, 0x30, 0x95, 0xda, 0xdf, 0x3d, - 0x51, 0xef, 0x9e, 0x93, 0xc3, 0x57, 0xbd, 0x53, 0xef, 0xa2, 0x76, 0x9c, - 0x9e, 0x12, 0xac, 0x5d, 0x04, 0xa9, 0x53, 0x1f, 0x1a, 0xeb, 0xb4, 0x7c, - 0x05, 0xda, 0xfa, 0x40, 0x55, 0x65, 0x1d, 0x25, 0x98, 0xde, 0x86, 0xe3, - 0xf2, 0xfa, 0xce, 0xd4, 0x86, 0xdb, 0x27, 0xea, 0xb0, 0xad, 0xc3, 0xb6, - 0x38, 0xe2, 0x77, 0x30, 0x05, 0x53, 0xc6, 0x45, 0x07, 0xdd, 0x79, 0xe3, - 0xb8, 0x35, 0x39, 0x9b, 0xf5, 0x07, 0x68, 0xd1, 0xd0, 0x4e, 0xbd, 0x60, - 0x6e, 0x91, 0x44, 0x6d, 0xae, 0xa5, 0x8f, 0x05, 0xdd, 0xd8, 0x8a, 0xb3, - 0xad, 0xaf, 0xab, 0xb4, 0x42, 0xe0, 0xf0, 0x68, 0x30, 0x9a, 0x3c, 0x8f, - 0x2e, 0x04, 0x8a, 0xa5, 0xb4, 0xda, 0xa7, 0xe7, 0x54, 0x21, 0x16, 0x92, - 0xa6, 0x26, 0xf1, 0xb1, 0xb7, 0xfc, 0x3a, 0x6a, 0xb7, 0x14, 0x47, 0x87, - 0xef, 0x69, 0x89, 0xb6, 0xfe, 0x0d, 0x1d, 0x95, 0x25, 0x30, 0x96, 0xb7, - 0x23, 0x0b, 0xbe, 0xd3, 0x23, 0x8d, 0x03, 0x10, 0x77, 0x37, 0x96, 0x93, - 0x43, 0x13, 0x95, 0xbe, 0xdb, 0x30, 0x6c, 0xbd, 0x66, 0x34, 0xdb, 0xef, - 0x39, 0xb5, 0xb1, 0xe5, 0x1b, 0xb6, 0x5b, 0xa2, 0xa2, 0x7c, 0xe7, 0xd6, - 0xa9, 0xbc, 0x5b, 0x93, 0x7c, 0x4f, 0x4d, 0xc8, 0x23, 0xec, 0xc2, 0xcb, - 0x9b, 0x73, 0xca, 0xc0, 0xb5, 0xd7, 0x83, 0xf7, 0xf4, 0xdd, 0x5e, 0xfe, - 0x6e, 0xe9, 0xa6, 0xe5, 0x4f, 0x47, 0x21, 0xf9, 0xc2, 0xe6, 0xa8, 0x7f, - 0xe4, 0xbb, 0x7b, 0x9c, 0xdb, 0x42, 0xd4, 0xbb, 0xcd, 0xb5, 0xfd, 0xe6, - 0x8c, 0x86, 0x5b, 0xa7, 0x6a, 0x4c, 0x74, 0xe2, 0xef, 0xd6, 0xf8, 0x5c, - 0xa7, 0x98, 0xf8, 0xd3, 0x7b, 0xf9, 0x0f, 0x8e, 0xb0, 0x12, 0xfd, 0xb6, - 0xa1, 0x0b, 0x28, 0xa4, 0x1d, 0xe2, 0x61, 0x95, 0x8a, 0x03, 0xdf, 0xa9, - 0x9b, 0x71, 0xeb, 0x75, 0xc3, 0x24, 0x6c, 0xbc, 0xf5, 0x83, 0x3c, 0x54, - 0x45, 0x4e, 0xfc, 0x79, 0xd9, 0x5b, 0xad, 0x7c, 0xfe, 0x7f, 0x9c, 0x86, - 0x40, 0xeb, 0xf9, 0x36, 0x78, 0x77, 0x2a, 0x63, 0x1f, 0x78, 0xde, 0x36, - 0x0b, 0x7e, 0x78, 0xe1, 0xfb, 0xb4, 0xe0, 0xf6, 0x6d, 0x3d, 0x6f, 0x63, - 0xde, 0x6d, 0xbf, 0xc3, 0x06, 0xce, 0x74, 0xda, 0xbd, 0xf8, 0xa9, 0x23, - 0x3b, 0x4f, 0x38, 0xb3, 0x36, 0x3a, 0xdc, 0xef, 0x67, 0x6d, 0x25, 0xbf, - 0x66, 0x73, 0xe0, 0xff, 0xa8, 0xc8, 0xdd, 0x66, 0xce, 0x19, 0x46, 0x35, - 0x91, 0x9b, 0x8f, 0xb5, 0xf3, 0xbe, 0xc9, 0x82, 0xd8, 0x10, 0xfe, 0x1f, - 0xbd, 0x48, 0x3a, 0x1c, 0xa3, 0xca, 0xcb, 0x6d, 0x1e, 0xb5, 0xf7, 0x8c, - 0x3b, 0xcd, 0x89, 0x7d, 0x19, 0x22, 0x7b, 0x65, 0xc2, 0x86, 0xfa, 0x10, - 0x7a, 0x3e, 0x2e, 0x63, 0x48, 0x26, 0x35, 0xee, 0x2d, 0x27, 0x8e, 0xcb, - 0x98, 0x0e, 0xe8, 0x0c, 0xab, 0x2d, 0x0c, 0xd2, 0xb3, 0x9f, 0x1a, 0x03, - 0x1a, 0x8b, 0xe2, 0xb4, 0xa9, 0x74, 0x3b, 0xa9, 0x22, 0xdd, 0x3e, 0xbd, - 0x2a, 0x24, 0x4c, 0xe7, 0x1a, 0x06, 0xaa, 0x8d, 0x63, 0x7b, 0xa5, 0xb2, - 0x87, 0xbb, 0xdc, 0xcf, 0xbb, 0x44, 0xe0, 0x3b, 0x1c, 0xf3, 0x3b, 0x3d, - 0x28, 0xb2, 0xb6, 0x18, 0x13, 0xa7, 0xde, 0x7d, 0x03, 0x27, 0xf5, 0x0b, - 0x3c, 0xc1, 0x9c, 0x5e, 0xc5, 0xa4, 0x6d, 0xe0, 0xb0, 0x74, 0xd7, 0x3f, - 0xeb, 0xb4, 0x94, 0x97, 0xb0, 0xcd, 0x7d, 0x1d, 0x94, 0x49, 0xd2, 0xfa, - 0x2f, 0x3c, 0xb7, 0xcf, 0x36, 0x6f, 0x4f, 0x0b, 0x7b, 0xe2, 0x46, 0x72, - 0x5a, 0xbf, 0xe7, 0xc1, 0xeb, 0x7f, 0xc7, 0x1f, 0xa6, 0xbf, 0xf5, 0x5f, - 0x57, 0x95, 0x31, 0x3c, 0x7f, 0xe7, 0xbe, 0xa5, 0x27, 0x69, 0x3a, 0x18, - 0x2a, 0x7b, 0xf7, 0xdf, 0x78, 0x4a, 0x6f, 0xfc, 0x6a, 0xeb, 0x2e, 0x87, - 0x4f, 0xf9, 0x6e, 0xfa, 0x43, 0x80, 0x43, 0x91, 0xa7, 0x1f, 0x6e, 0xde, - 0xe5, 0x41, 0x5b, 0x6f, 0x70, 0xea, 0xe9, 0xfa, 0x09, 0xe5, 0x99, 0xee, - 0x30, 0xd7, 0xd3, 0x3b, 0xe7, 0x9c, 0xfc, 0x79, 0x42, 0x1d, 0x4f, 0xd5, - 0x24, 0xfd, 0x6c, 0xd3, 0x7a, 0xfa, 0x11, 0x53, 0x93, 0xf1, 0xe5, 0x6d, - 0xdc, 0x84, 0x03, 0x7b, 0x3b, 0x29, 0x82, 0x9a, 0x0b, 0xce, 0x39, 0x8c, - 0x01, 0x9c, 0x9b, 0x14, 0x46, 0xf9, 0xf1, 0x85, 0xfb, 0x34, 0x2f, 0x3d, - 0xaf, 0x8c, 0xab, 0x83, 0xb2, 0xdc, 0x7d, 0xb2, 0x89, 0xfd, 0x1c, 0x9a, - 0x2d, 0x77, 0xe9, 0xf4, 0x14, 0x87, 0xf3, 0xed, 0x14, 0xcc, 0xf7, 0x49, - 0xcb, 0x16, 0xfc, 0xa9, 0x6e, 0xdf, 0xad, 0x04, 0x14, 0x8a, 0xd5, 0xdf, - 0x21, 0x06, 0x54, 0xdc, 0xf6, 0x79, 0xe2, 0x86, 0x77, 0xd2, 0x89, 0x19, - 0x13, 0x9a, 0xa8, 0x07, 0x35, 0x24, 0x20, 0x69, 0x79, 0x81, 0xb0, 0xd4, - 0x16, 0x22, 0x2e, 0xf6, 0x0a, 0x88, 0xae, 0xa4, 0xe5, 0xdd, 0x7d, 0x2e, - 0xaf, 0x06, 0x6b, 0x43, 0x3f, 0xee, 0x19, 0xa7, 0xd7, 0xdb, 0x36, 0xf7, - 0x1d, 0xca, 0xfd, 0x3d, 0x95, 0xcb, 0x5c, 0xce, 0x5d, 0xcf, 0x3d, 0xfb, - 0xc6, 0x13, 0x80, 0x57, 0xfb, 0x7b, 0x5e, 0x5b, 0x54, 0xc3, 0xcd, 0x16, - 0x07, 0x5b, 0xc3, 0xf8, 0x91, 0xb8, 0x41, 0x37, 0xa5, 0xe9, 0xe4, 0x32, - 0xea, 0x5e, 0x91, 0x1d, 0xea, 0x21, 0xf8, 0xf9, 0xfb, 0xec, 0xff, 0x75, - 0x52, 0xa9, 0x84, 0xae, 0xcf, 0x49, 0xe9, 0x89, 0x0e, 0x83, 0xba, 0xc1, - 0xfd, 0xa4, 0xd0, 0xa7, 0x5e, 0x79, 0xf0, 0x5d, 0xa6, 0x47, 0xac, 0x1b, - 0x62, 0x7d, 0x79, 0x0c, 0xd9, 0xdc, 0xbf, 0x1a, 0x4e, 0xd3, 0xa0, 0x24, - 0x78, 0x87, 0xc5, 0xa2, 0x31, 0x50, 0xb0, 0x3d, 0x07, 0xcb, 0xec, 0x87, - 0xfe, 0x02, 0xf7, 0x1f, 0xbe, 0xf3, 0xf2, 0x7f, 0x64, 0x5d, 0xe9, 0xb6, - 0xb3, 0x2c, 0xb3, 0xfc, 0xbf, 0xef, 0xd2, 0x24, 0x6c, 0xc3, 0xbb, 0x8d, - 0xf8, 0xe1, 0x90, 0xc7, 0x5c, 0xfd, 0xe9, 0xaa, 0x6a, 0x06, 0x73, 0xd6, - 0x4a, 0xe8, 0x6a, 0x44, 0x64, 0xa6, 0x99, 0x9a, 0xfe, 0xe3, 0x3c, 0xce, - 0xe1, 0x0e, 0x81, 0xcb, 0x83, 0xbd, 0xed, 0xc3, 0x43, 0x2b, 0xd6, 0xd2, - 0x07, 0x4c, 0x7b, 0x50, 0xdb, 0x41, 0x34, 0xe2, 0xa3, 0x6b, 0x16, 0x96, - 0xc5, 0x80, 0x41, 0x70, 0xfb, 0xd4, 0x38, 0xec, 0x75, 0xab, 0xe4, 0xc8, - 0xfd, 0x13, 0x5d, 0x6f, 0xc5, 0x99, 0xed, 0xb2, 0x7b, 0x40, 0x5b, 0x73, - 0xda, 0x93, 0x5a, 0xbc, 0x34, 0xe5, 0xdd, 0x1e, 0x40, 0xcd, 0x7d, 0xe1, - 0x62, 0xbf, 0x45, 0x6d, 0xfc, 0xda, 0x3e, 0x36, 0x4e, 0xfb, 0x46, 0xa5, - 0x5d, 0xf2, 0x46, 0x5c, 0x7b, 0xca, 0x89, 0xee, 0x56, 0x04, 0x0a, 0xdf, - 0x3e, 0x95, 0x2f, 0xfb, 0x54, 0x46, 0x34, 0xda, 0xad, 0x84, 0x80, 0xd5, - 0x89, 0x41, 0xe1, 0x4b, 0x59, 0x40, 0x9b, 0x3f, 0xf4, 0xeb, 0xf6, 0x23, - 0x4a, 0x2b, 0x27, 0xb7, 0x6b, 0xe6, 0x8d, 0xbb, 0xca, 0x30, 0x29, 0xa7, - 0x97, 0xc7, 0x3d, 0xea, 0x01, 0x8e, 0x3c, 0x48, 0x95, 0x1b, 0x7d, 0xdf, - 0x37, 0xcc, 0x14, 0x94, 0x0f, 0x73, 0x22, 0xbc, 0x0b, 0xe6, 0x73, 0x88, - 0x75, 0x7b, 0x1f, 0x66, 0xc3, 0xdb, 0x99, 0x1c, 0x63, 0x8b, 0xb2, 0x48, - 0xe0, 0xad, 0xdf, 0x9a, 0xfd, 0xa4, 0x9a, 0x2a, 0x3d, 0x41, 0xab, 0xf1, - 0xec, 0xb8, 0xa3, 0xe1, 0xf0, 0x68, 0x31, 0x86, 0xd2, 0xc5, 0x6e, 0x4b, - 0x07, 0xd4, 0xc4, 0xb4, 0x08, 0x3e, 0xe3, 0x74, 0x89, 0x30, 0x06, 0xf8, - 0x65, 0x34, 0xd7, 0xa6, 0xd9, 0x9f, 0xa9, 0x16, 0x14, 0x1c, 0x7f, 0xee, - 0x19, 0x1e, 0x8d, 0xed, 0xde, 0x87, 0xa2, 0x90, 0x12, 0x56, 0x68, 0xb5, - 0xad, 0x71, 0x02, 0xd3, 0x70, 0x97, 0x0e, 0x38, 0x96, 0x59, 0x53, 0x37, - 0xe2, 0x2f, 0x5d, 0x65, 0x90, 0xfd, 0x79, 0x16, 0xa5, 0xb4, 0xb1, 0xf1, - 0x9e, 0xb8, 0x09, 0xcd, 0x35, 0x88, 0x39, 0x50, 0xbb, 0x16, 0x7d, 0x84, - 0xd6, 0x8e, 0x9b, 0x11, 0xb3, 0xe1, 0x89, 0xbe, 0x3a, 0x44, 0x3a, 0x74, - 0x23, 0x83, 0x28, 0xb5, 0xbd, 0x57, 0xb6, 0x5d, 0xde, 0x50, 0x6d, 0xce, - 0x0a, 0xaf, 0xaf, 0x96, 0x30, 0x8f, 0xdc, 0x42, 0xd1, 0xa5, 0x62, 0xd5, - 0x9a, 0x25, 0x5f, 0x3a, 0x1d, 0x5a, 0xe0, 0xac, 0x8b, 0xdb, 0xfa, 0x34, - 0x8f, 0xaf, 0x61, 0xbc, 0x08, 0xa5, 0xf1, 0xf5, 0xc2, 0xba, 0x5c, 0x6b, - 0x93, 0x70, 0x1a, 0x0c, 0xd3, 0xcb, 0x8d, 0x5f, 0xc2, 0x65, 0xc7, 0x7e, - 0xb5, 0xe8, 0xfc, 0x58, 0xbe, 0x1a, 0xb6, 0xf8, 0x52, 0x77, 0xd7, 0x5e, - 0x9a, 0xef, 0xbd, 0x8c, 0x17, 0x67, 0xca, 0x46, 0x5d, 0xb8, 0xe6, 0xcb, - 0x16, 0x18, 0x1c, 0xc9, 0x1c, 0x5e, 0xdd, 0x26, 0xbd, 0x58, 0xca, 0x74, - 0x67, 0x11, 0xf2, 0xd5, 0x82, 0xa7, 0xd5, 0x7a, 0x2f, 0xff, 0xdb, 0x2f, - 0x51, 0x9f, 0xfb, 0x00, 0xce, 0x73, 0xba, 0xef, 0xfd, 0xc3, 0xef, 0x93, - 0x31, 0xd1, 0xfa, 0xff, 0xc7, 0xe5, 0x75, 0x5f, 0xca, 0xed, 0x5d, 0xf4, - 0x32, 0x24, 0xee, 0xbc, 0xe3, 0x6a, 0xfa, 0x3e, 0x5c, 0x6c, 0xac, 0x91, - 0xfd, 0x72, 0x03, 0x9b, 0x96, 0x78, 0xd8, 0x66, 0x00, 0x7d, 0x63, 0x8f, - 0xde, 0xe2, 0x2b, 0x0f, 0x60, 0x75, 0xd9, 0x4a, 0x16, 0xb1, 0x6d, 0xee, - 0xde, 0xbb, 0x38, 0x90, 0xc4, 0xbd, 0xb7, 0x47, 0xdc, 0x5a, 0x3f, 0xed, - 0x25, 0xa9, 0xdf, 0x35, 0x1d, 0x53, 0x29, 0x79, 0xc9, 0x3b, 0xec, 0x8b, - 0x6a, 0x2d, 0xb0, 0x1c, 0xb8, 0xd9, 0xd8, 0xa7, 0xdf, 0xef, 0x1a, 0x57, - 0xbd, 0xcd, 0x17, 0xca, 0xe1, 0xc0, 0xf9, 0x5a, 0x94, 0xb7, 0xa1, 0x36, - 0x37, 0xb1, 0x0b, 0xb3, 0x86, 0x73, 0xee, 0xcd, 0x41, 0x63, 0x28, 0xfb, - 0xf3, 0xa3, 0x94, 0xc1, 0x76, 0xc1, 0x2b, 0x16, 0x7a, 0xa9, 0x70, 0xaf, - 0x9e, 0xd9, 0x3a, 0xc6, 0x7d, 0x15, 0xf3, 0xf9, 0xf6, 0xe5, 0xd3, 0x7c, - 0xa9, 0x5f, 0xeb, 0x42, 0x2f, 0x16, 0x3e, 0xfc, 0x97, 0xee, 0xa9, 0x8e, - 0x4c, 0xb0, 0x61, 0xe8, 0xba, 0x85, 0x18, 0x36, 0x15, 0x5a, 0x49, 0x88, - 0xf5, 0xc9, 0x1f, 0xf6, 0x49, 0x16, 0x1c, 0xbb, 0x2e, 0xf7, 0x8f, 0xd7, - 0x4a, 0x75, 0x6c, 0x7a, 0xb7, 0x7c, 0x01, 0x57, 0x9a, 0x2a, 0x4a, 0xfd, - 0x5d, 0x89, 0x9b, 0x70, 0xec, 0xa7, 0x76, 0xd0, 0x13, 0x0e, 0x8f, 0xb4, - 0x80, 0x4c, 0xfd, 0xa1, 0x0c, 0x2b, 0x75, 0xcf, 0x7e, 0x08, 0x88, 0x85, - 0xb5, 0xf6, 0xec, 0xa8, 0xbb, 0xf2, 0x4c, 0x56, 0xbb, 0x6e, 0xdd, 0x9c, - 0x62, 0xbf, 0xd5, 0xdf, 0xb8, 0xf0, 0xc5, 0x4e, 0xf1, 0xa9, 0xe1, 0x3b, - 0x98, 0x6a, 0xff, 0xea, 0x72, 0x15, 0x67, 0x7c, 0xc7, 0x8b, 0x97, 0x47, - 0x6b, 0xb4, 0xa1, 0x6e, 0x87, 0x29, 0x3f, 0xa5, 0x5e, 0x52, 0x82, 0x3a, - 0x9d, 0x2f, 0xb6, 0x7b, 0xe5, 0x74, 0x09, 0x75, 0xda, 0xef, 0x2d, 0xf6, - 0x7b, 0x51, 0x1e, 0x09, 0xfc, 0xc0, 0xb1, 0xc6, 0xf6, 0xc5, 0x7d, 0xdc, - 0x6f, 0x97, 0x84, 0xc3, 0x39, 0x9f, 0x8e, 0x3d, 0xfb, 0xcd, 0xfb, 0xd6, - 0x00, 0x7e, 0x9d, 0x9b, 0xc2, 0xd2, 0x5d, 0x68, 0xe2, 0x49, 0x59, 0xbf, - 0xe3, 0xed, 0x6b, 0xad, 0x7a, 0x6b, 0x2d, 0xaf, 0x0b, 0xb5, 0x59, 0xb4, - 0x1c, 0x78, 0x0d, 0xbd, 0x07, 0x98, 0x3a, 0xbd, 0xb0, 0x4d, 0x00, 0x79, - 0x0d, 0x19, 0xbb, 0xbb, 0xfa, 0xaf, 0xc3, 0xa2, 0xe3, 0xb5, 0xd2, 0xd7, - 0x79, 0x2d, 0x8b, 0xc6, 0xad, 0x17, 0x81, 0x5e, 0x16, 0x35, 0x3b, 0xb8, - 0x1a, 0x18, 0x7b, 0xef, 0x6c, 0xcc, 0x37, 0xb7, 0xfa, 0x08, 0x3e, 0xf6, - 0x9e, 0x63, 0x37, 0x4c, 0x13, 0xaa, 0x8c, 0x87, 0xa2, 0xc7, 0xfb, 0xd5, - 0x87, 0xbe, 0x9d, 0x25, 0x7b, 0x29, 0xa7, 0x50, 0xb8, 0x87, 0xcd, 0x67, - 0x9d, 0x27, 0xd0, 0xde, 0xd6, 0xc7, 0x29, 0xfe, 0x6b, 0x01, 0x4c, 0x0f, - 0x5e, 0x3d, 0x45, 0xbf, 0x78, 0x13, 0x5d, 0xe7, 0x2e, 0xd5, 0xae, 0xcb, - 0xe0, 0x2d, 0xb6, 0x77, 0x72, 0xab, 0x94, 0x38, 0x29, 0x77, 0xaf, 0xce, - 0xc4, 0xd4, 0x47, 0x17, 0xf1, 0xed, 0x75, 0xae, 0xd7, 0xad, 0x91, 0xb0, - 0xe8, 0x9c, 0xcf, 0x43, 0x2f, 0x34, 0xe1, 0xac, 0xd4, 0xd8, 0xe2, 0xe9, - 0x6c, 0x4d, 0x67, 0xac, 0x1c, 0x57, 0x88, 0xc3, 0x9a, 0x2d, 0x4d, 0xc5, - 0xf7, 0x7d, 0x8f, 0x8d, 0xf0, 0x2f, 0xa2, 0xce, 0x1c, 0xac, 0x0d, 0xb0, - 0xda, 0x3d, 0xc5, 0xab, 0xc5, 0xde, 0xdb, 0xe4, 0xa3, 0x7f, 0xc1, 0xc9, - 0xbe, 0xd5, 0x24, 0x81, 0x8c, 0x52, 0xec, 0x63, 0x27, 0xd5, 0xcc, 0x14, - 0x35, 0x2a, 0x83, 0xd5, 0xbd, 0x3e, 0xdc, 0xfb, 0xab, 0x6f, 0x1a, 0xd2, - 0xed, 0xd1, 0x1f, 0x11, 0x4d, 0xb7, 0xb0, 0x36, 0x6c, 0x75, 0x37, 0xf6, - 0x4e, 0xa1, 0x91, 0x37, 0x74, 0x5c, 0xdb, 0xd9, 0x69, 0x1c, 0x06, 0xfb, - 0xbd, 0x63, 0xcc, 0xf1, 0xb4, 0xce, 0x31, 0xdd, 0x2e, 0x5e, 0xdd, 0xef, - 0xfb, 0xe2, 0x73, 0xc9, 0x97, 0xe2, 0x99, 0x1e, 0x89, 0x57, 0x75, 0x5f, - 0x6d, 0x3a, 0xee, 0xf7, 0xba, 0x71, 0x96, 0x0b, 0xc5, 0xfd, 0xfb, 0x97, - 0x9a, 0x8e, 0x1d, 0x45, 0x1d, 0xb7, 0x48, 0x2c, 0x09, 0x8d, 0xbf, 0x8e, - 0xc1, 0x61, 0x91, 0x2e, 0x2d, 0x07, 0x16, 0x5a, 0xbd, 0x43, 0xc2, 0x1d, - 0x65, 0x35, 0x99, 0x16, 0xdd, 0x7b, 0x03, 0xf0, 0x75, 0xb6, 0x62, 0x09, - 0xe1, 0x68, 0xb5, 0x1b, 0xdb, 0x57, 0xfb, 0x82, 0xbf, 0x60, 0xa2, 0x3c, - 0xf6, 0x7c, 0xe6, 0x4c, 0x45, 0xcb, 0x9e, 0x85, 0x1b, 0xae, 0xea, 0xbd, - 0x07, 0xb4, 0xb8, 0xce, 0x1b, 0xc1, 0xe2, 0x22, 0x89, 0xa8, 0x97, 0x76, - 0xb0, 0xc4, 0x5e, 0x8c, 0x81, 0xcd, 0xde, 0x4f, 0xa3, 0x2c, 0x9c, 0x85, - 0xbe, 0xf2, 0xbd, 0x57, 0x91, 0x8b, 0x15, 0xeb, 0xff, 0xf6, 0xea, 0xc0, - 0xd7, 0xa1, 0x96, 0xd8, 0x9f, 0x25, 0x5b, 0x70, 0x5d, 0xfa, 0xa3, 0x31, - 0x1c, 0xd6, 0xf4, 0x29, 0x6f, 0x76, 0x7b, 0x3f, 0x65, 0xc0, 0xeb, 0x96, - 0xdb, 0xd9, 0xb0, 0xeb, 0x01, 0x12, 0x70, 0x2a, 0x0b, 0x4b, 0x7f, 0x80, - 0x6c, 0xa1, 0xaa, 0xf0, 0xca, 0x98, 0x50, 0xd9, 0xbc, 0xe7, 0x85, 0x01, - 0x3d, 0xbf, 0x34, 0x59, 0x9d, 0x4c, 0xff, 0x2c, 0x37, 0xb4, 0x5d, 0xda, - 0x17, 0x2d, 0x3f, 0xb7, 0xc4, 0xd0, 0x82, 0x79, 0x67, 0xc1, 0x11, 0x78, - 0x77, 0xea, 0xb5, 0x5a, 0x4c, 0xdf, 0x4e, 0xbe, 0x1c, 0x4c, 0xed, 0xf1, - 0xd9, 0x9f, 0xac, 0xc2, 0xa1, 0xd8, 0x4b, 0x4b, 0xc0, 0x53, 0xb2, 0x5f, - 0xec, 0x82, 0x1d, 0xc7, 0xe1, 0xcb, 0xe6, 0xcb, 0xcd, 0xda, 0x3f, 0x4f, - 0x5f, 0x5e, 0x3c, 0x6c, 0x40, 0xf2, 0x6d, 0xf1, 0xe5, 0xe2, 0x2b, 0x12, - 0xb0, 0xd8, 0xfa, 0x78, 0xba, 0x45, 0xef, 0xe4, 0xf7, 0x72, 0x98, 0xd8, - 0x2c, 0xfe, 0x43, 0xc7, 0x5b, 0x1b, 0xf2, 0x85, 0xea, 0xe0, 0x5b, 0x93, - 0xb0, 0x40, 0xd5, 0x7a, 0xee, 0x1f, 0x5b, 0xfa, 0x5e, 0x66, 0xa6, 0xcb, - 0xc2, 0xfb, 0xc5, 0x53, 0x6e, 0x19, 0xdd, 0x2f, 0x8e, 0xbe, 0xce, 0x97, - 0xc0, 0xa6, 0xee, 0xee, 0x5f, 0x32, 0xa7, 0x03, 0xfb, 0x3c, 0x83, 0x38, - 0x72, 0xe5, 0x1b, 0xfc, 0xfa, 0x1a, 0xce, 0x17, 0x34, 0xce, 0x5a, 0xa2, - 0xf1, 0xf2, 0x1d, 0xed, 0x5e, 0x38, 0xc2, 0xb7, 0x45, 0x49, 0x24, 0x28, - 0x69, 0xea, 0x1e, 0xfe, 0xc6, 0x4b, 0x12, 0x8a, 0x9f, 0x7a, 0x07, 0x7b, - 0x97, 0x6d, 0xe9, 0x6b, 0x52, 0xdd, 0x6c, 0xa6, 0xf8, 0xdb, 0xe2, 0x85, - 0x83, 0x51, 0x97, 0xba, 0xcc, 0xcd, 0x13, 0x8d, 0x59, 0xe2, 0x35, 0x51, - 0xd2, 0x3a, 0xc4, 0x7b, 0xc7, 0x2d, 0xd7, 0xa4, 0x4e, 0x47, 0xba, 0x1c, - 0x24, 0x33, 0x9b, 0x7f, 0xe5, 0xdc, 0xf8, 0xb2, 0x9b, 0x0c, 0x74, 0x29, - 0x21, 0x3c, 0xac, 0x31, 0x7d, 0xdb, 0xd4, 0x91, 0x4c, 0xe1, 0xea, 0xc3, - 0x96, 0xeb, 0xd8, 0xc8, 0xf3, 0x28, 0xae, 0xb6, 0x5c, 0x5b, 0x09, 0x4c, - 0x0b, 0x63, 0x54, 0xdc, 0xf8, 0x70, 0x99, 0xf5, 0xc1, 0x15, 0x8e, 0x5f, - 0x53, 0xb6, 0xd6, 0xa1, 0xdc, 0xcb, 0xac, 0x56, 0xfe, 0x3a, 0xc4, 0x69, - 0xfc, 0x45, 0x01, 0x00, 0x2e, 0xaa, 0xa8, 0x50, 0x77, 0x4b, 0x38, 0xea, - 0xa0, 0x4f, 0x2e, 0x60, 0xd7, 0x48, 0x49, 0x67, 0xcc, 0x40, 0x2b, 0xb4, - 0x7e, 0x8f, 0x43, 0x01, 0x5d, 0x38, 0x72, 0xc0, 0xde, 0xfc, 0xfe, 0xe3, - 0x5f, 0xe7, 0x45, 0x0a, 0x5f, 0x3c, 0xc2, 0xa1, 0xb5, 0xcb, 0xb1, 0x6b, - 0xb3, 0xda, 0x75, 0xd6, 0xa8, 0x5a, 0x94, 0x20, 0x86, 0xaf, 0xc5, 0x97, - 0x1c, 0xbe, 0xca, 0x05, 0x2d, 0xba, 0x79, 0x46, 0xdc, 0x40, 0x3e, 0x77, - 0x43, 0x39, 0xe3, 0xbb, 0x99, 0x79, 0x71, 0xdd, 0x87, 0x79, 0x39, 0x8c, - 0xba, 0xb0, 0xca, 0x9c, 0x95, 0xe9, 0xbd, 0x79, 0x61, 0x37, 0x63, 0xff, - 0x9d, 0x57, 0xda, 0x3a, 0x7f, 0x2e, 0x12, 0x3b, 0xea, 0x76, 0x54, 0xf8, - 0xa5, 0x28, 0xa0, 0x7d, 0x5f, 0x47, 0x0b, 0xfb, 0xc4, 0x5a, 0xfa, 0xd7, - 0xb4, 0x81, 0x59, 0xa0, 0xff, 0xd8, 0xff, 0x3f, 0x42, 0xd8, 0xef, 0xcc, - 0x39, 0xae, 0x96, 0xeb, 0xd5, 0x22, 0x5d, 0xe7, 0x1f, 0x8a, 0xd5, 0xd5, - 0xfb, 0xaf, 0xca, 0x6c, 0x56, 0x97, 0xd3, 0x60, 0xd8, 0xa1, 0x1b, 0x3b, - 0x05, 0x06, 0xe4, 0x37, 0xae, 0x28, 0x2a, 0x14, 0xbd, 0x6f, 0x58, 0x20, - 0x0c, 0x0d, 0x3d, 0xda, 0x83, 0x34, 0xed, 0x9d, 0x17, 0xab, 0x49, 0x74, - 0xf7, 0x4b, 0x34, 0xd7, 0xeb, 0xc2, 0x81, 0x5b, 0x5c, 0x5d, 0xa4, 0xaf, - 0x64, 0x90, 0x4d, 0x17, 0xd2, 0x75, 0x73, 0x72, 0x79, 0x8f, 0x7b, 0x16, - 0xf4, 0xe4, 0xaa, 0x8e, 0x80, 0x4d, 0xe4, 0x78, 0x09, 0x06, 0x07, 0xb8, - 0xdd, 0x37, 0x5c, 0x4f, 0x16, 0xd1, 0x55, 0x56, 0xe7, 0x11, 0xef, 0xee, - 0xd5, 0x6e, 0x8e, 0x18, 0xea, 0xde, 0xfb, 0x2a, 0x18, 0xd3, 0xd6, 0x73, - 0x4b, 0xf5, 0x3d, 0xdd, 0xda, 0x30, 0x99, 0x2a, 0x5f, 0x8d, 0xec, 0x7d, - 0x78, 0xf6, 0x5e, 0x76, 0xc8, 0x7b, 0x15, 0x82, 0xb9, 0x23, 0x6a, 0xba, - 0x2c, 0x86, 0xad, 0xc3, 0xa3, 0xa2, 0xba, 0x80, 0x06, 0xc8, 0xf4, 0x5c, - 0x71, 0xb5, 0xde, 0xc5, 0xf5, 0xd8, 0xdc, 0x74, 0xc5, 0x14, 0xcc, 0xd5, - 0xdd, 0xd4, 0xd0, 0x75, 0xf4, 0x88, 0x43, 0xb1, 0xdb, 0x97, 0x52, 0x14, - 0xd9, 0xf9, 0x54, 0xae, 0x33, 0xf2, 0x96, 0x77, 0x49, 0xb7, 0xa1, 0xc0, - 0x3a, 0xcc, 0xe5, 0xc9, 0x16, 0xfb, 0xcf, 0x6f, 0x7d, 0x2d, 0x05, 0xdb, - 0x8f, 0x49, 0xeb, 0xce, 0xaf, 0xd4, 0x79, 0xc4, 0xad, 0x5f, 0xa1, 0x41, - 0x4d, 0x68, 0xac, 0xc3, 0xd1, 0x47, 0xf1, 0xe8, 0xdf, 0xc0, 0x52, 0x4f, - 0xe5, 0xac, 0xbf, 0xef, 0xf2, 0xca, 0xd8, 0x5c, 0x47, 0x0f, 0x2b, 0x26, - 0x37, 0x5b, 0x6e, 0xac, 0xf7, 0x3c, 0x48, 0xc5, 0xa4, 0x61, 0x6e, 0xfd, - 0xea, 0x83, 0x1a, 0x86, 0x4e, 0x17, 0x2b, 0xf8, 0xeb, 0xb2, 0x99, 0x36, - 0x84, 0x5d, 0xf8, 0xd6, 0x39, 0xac, 0xe1, 0xd1, 0xfa, 0xdb, 0xf5, 0x6b, - 0x89, 0xcc, 0xf8, 0xbd, 0x9f, 0xb1, 0x22, 0x7f, 0xf1, 0xe9, 0x22, 0x4a, - 0xaf, 0x21, 0xb4, 0xc6, 0x6b, 0x0d, 0xd3, 0xef, 0xf7, 0x81, 0x14, 0xd8, - 0x35, 0x49, 0x7c, 0x65, 0xdb, 0x52, 0xd3, 0xff, 0xda, 0xd2, 0x90, 0xbd, - 0x7c, 0x6a, 0x5e, 0xf7, 0xde, 0xa7, 0xef, 0x23, 0xae, 0x6b, 0xb8, 0x1e, - 0xb9, 0x16, 0xdf, 0x45, 0x2d, 0xb7, 0x81, 0xd2, 0x7a, 0x19, 0x72, 0xfa, - 0x66, 0xb7, 0xcb, 0xbb, 0xd0, 0x8a, 0xf7, 0xb8, 0x70, 0xde, 0x51, 0xad, - 0xa8, 0xa7, 0xd5, 0xdd, 0xb3, 0xf5, 0x5a, 0x86, 0x97, 0x36, 0x45, 0x62, - 0x5c, 0x5e, 0x2a, 0xae, 0x20, 0xbd, 0x9b, 0x83, 0x1c, 0xde, 0x8f, 0xc6, - 0x44, 0x68, 0xe9, 0xa8, 0x69, 0xf1, 0x2c, 0x07, 0x42, 0x57, 0x5e, 0xcd, - 0x51, 0x99, 0x7e, 0x96, 0x6a, 0x35, 0x51, 0xa1, 0x0a, 0xd8, 0xc6, 0xb4, - 0x26, 0x7d, 0xc5, 0xbe, 0xa9, 0xeb, 0xd9, 0xe5, 0x35, 0xf6, 0xa5, 0x29, - 0x5e, 0x94, 0xd5, 0xac, 0xbe, 0xf5, 0xb8, 0xb1, 0x7d, 0x50, 0xe2, 0xdc, - 0x27, 0xfb, 0x5f, 0x9c, 0x3a, 0x7f, 0x8c, 0xeb, 0x59, 0x69, 0x08, 0xeb, - 0x5c, 0x4f, 0x55, 0xce, 0x5b, 0x27, 0x5c, 0x67, 0xeb, 0x70, 0x1f, 0xc7, - 0xae, 0x14, 0x4c, 0x35, 0xae, 0xaf, 0x54, 0x27, 0x90, 0x0c, 0xa7, 0x7a, - 0x5c, 0x76, 0x7d, 0xed, 0xb5, 0x54, 0xcd, 0xd8, 0x44, 0xdf, 0x5e, 0x9e, - 0xdb, 0x93, 0x74, 0x6b, 0x51, 0x48, 0xf7, 0x58, 0x66, 0x22, 0xd7, 0xf4, - 0xbb, 0x55, 0x6b, 0xcb, 0xc6, 0xb9, 0x31, 0xd7, 0x65, 0x51, 0x1d, 0xdc, - 0x2e, 0xe9, 0x09, 0xa6, 0x83, 0xcd, 0xcd, 0xde, 0x15, 0x93, 0x34, 0xf5, - 0x1d, 0xf0, 0x9a, 0x5e, 0x7d, 0x10, 0xa0, 0xed, 0xaa, 0x32, 0x73, 0xdf, - 0x2a, 0xaf, 0xb8, 0xf4, 0x96, 0xd3, 0x1c, 0x6d, 0x8e, 0xae, 0xb3, 0xf3, - 0x56, 0x24, 0x2d, 0xdf, 0xe3, 0xee, 0x15, 0x87, 0x9b, 0xdb, 0x0b, 0x9d, - 0xf7, 0x7b, 0x9f, 0x0d, 0x58, 0xb1, 0x6c, 0xb8, 0x06, 0xe8, 0x2a, 0xac, - 0x61, 0x7b, 0x61, 0x95, 0x7c, 0x57, 0x6c, 0xb4, 0x2e, 0x42, 0x97, 0xf5, - 0x7e, 0x17, 0xed, 0x22, 0xdc, 0x7e, 0xd8, 0xbf, 0x58, 0x55, 0x43, 0x82, - 0x81, 0x9a, 0xbb, 0x8a, 0xa1, 0xe7, 0xbf, 0x79, 0x33, 0x85, 0x4e, 0x37, - 0x08, 0x3a, 0xcc, 0xaf, 0x22, 0xb9, 0x5c, 0x74, 0x79, 0xad, 0xcb, 0x65, - 0x18, 0x8e, 0xf1, 0x2e, 0x2e, 0x4f, 0xa9, 0x39, 0xdd, 0xcb, 0xed, 0xd8, - 0xca, 0x18, 0x1b, 0x6e, 0x1f, 0x31, 0xb9, 0x64, 0xef, 0x87, 0xca, 0xb8, - 0x32, 0xe1, 0x81, 0x15, 0xf8, 0x8e, 0xef, 0x56, 0xc9, 0x58, 0xea, 0x2b, - 0x8e, 0xbf, 0xbf, 0x15, 0xa7, 0xb9, 0xb9, 0x49, 0xdc, 0xa7, 0x5f, 0x98, - 0xbd, 0xf9, 0xc5, 0x6d, 0xcf, 0x8d, 0x0b, 0x97, 0x9a, 0x52, 0x76, 0x1f, - 0x62, 0x71, 0xe7, 0xde, 0xde, 0xd9, 0x6f, 0xb7, 0xd4, 0x7d, 0x73, 0xef, - 0x67, 0x0d, 0x7c, 0x2b, 0x62, 0x65, 0x96, 0x2e, 0x62, 0x7b, 0x6e, 0x89, - 0xbe, 0x9d, 0xdd, 0x72, 0xe9, 0xba, 0xdf, 0xfa, 0x4b, 0x0b, 0xf7, 0xee, - 0x6a, 0xbc, 0x92, 0x13, 0xfb, 0xad, 0xad, 0xbc, 0x1a, 0x43, 0x41, 0xa3, - 0x73, 0x4e, 0xbd, 0x66, 0x0d, 0x75, 0x25, 0x49, 0x16, 0xbd, 0xdb, 0xdf, - 0xeb, 0x88, 0x73, 0x85, 0xa6, 0xe5, 0xb5, 0xcf, 0x45, 0x94, 0xc4, 0xdc, - 0x71, 0xad, 0x46, 0xe3, 0x4e, 0x8a, 0xfe, 0xd1, 0x75, 0x4c, 0x29, 0x85, - 0xb9, 0x97, 0xf1, 0x0d, 0xad, 0x70, 0xe5, 0xce, 0xd5, 0xe6, 0x72, 0x9e, - 0x9f, 0x36, 0xd7, 0x49, 0x42, 0x5a, 0xad, 0x57, 0x81, 0x97, 0x9b, 0x39, - 0xbb, 0x77, 0x96, 0xab, 0x8a, 0x8f, 0xb5, 0x0f, 0x57, 0x9b, 0xef, 0x5b, - 0xf7, 0x55, 0x53, 0x41, 0xb5, 0x31, 0x2c, 0x16, 0xdd, 0x9b, 0xeb, 0x65, - 0x9b, 0x89, 0xf3, 0x7d, 0x1a, 0xb2, 0x8e, 0x74, 0x41, 0x79, 0x5f, 0x76, - 0xb2, 0xad, 0xe7, 0x8c, 0x0b, 0x99, 0x3a, 0x59, 0x6b, 0x1b, 0xea, 0xca, - 0xef, 0x86, 0x6d, 0x24, 0xcd, 0xaf, 0x6d, 0xa8, 0x85, 0x0f, 0x2a, 0x1f, - 0xfa, 0x03, 0xe4, 0xe4, 0xd7, 0x3e, 0x41, 0xb1, 0x19, 0xb4, 0x06, 0x9c, - 0xcc, 0x14, 0xba, 0x47, 0x7d, 0x90, 0xc4, 0x17, 0x87, 0x6b, 0xe7, 0xac, - 0xeb, 0x9f, 0xb7, 0x4b, 0xf1, 0xde, 0xba, 0xcd, 0x61, 0xd8, 0x5e, 0xfa, - 0xd7, 0x85, 0xf2, 0xd9, 0x86, 0x88, 0xd8, 0x6e, 0xda, 0xcd, 0xbd, 0xa1, - 0xe6, 0x75, 0x7d, 0x8b, 0xb3, 0x2d, 0x5c, 0xe0, 0x5b, 0xd2, 0x40, 0x93, - 0x56, 0xbd, 0x2b, 0x9e, 0xec, 0x7e, 0x91, 0x7b, 0xa1, 0x64, 0xb3, 0x69, - 0x4b, 0xd8, 0xe2, 0xa3, 0xc1, 0x6e, 0x51, 0xda, 0x98, 0x5a, 0x8d, 0x20, - 0x33, 0x76, 0xed, 0xe9, 0x86, 0x23, 0x7c, 0xfd, 0xf7, 0x53, 0xae, 0x03, - 0x65, 0xe1, 0xf6, 0xe0, 0x92, 0xb4, 0x7d, 0xa8, 0x52, 0xa7, 0x6b, 0x8b, - 0x9b, 0xea, 0xba, 0xf8, 0x89, 0x6d, 0xfe, 0xf7, 0x97, 0x47, 0x93, 0xed, - 0xef, 0x65, 0xa6, 0x45, 0xbb, 0xab, 0x58, 0x6c, 0xbb, 0xf3, 0xb5, 0xf0, - 0x5d, 0xe1, 0xdf, 0xae, 0x17, 0xb2, 0xba, 0x45, 0x77, 0x9f, 0x68, 0x6f, - 0x33, 0x5d, 0xde, 0xba, 0x68, 0x96, 0xfb, 0xbe, 0x8c, 0x91, 0x36, 0xfd, - 0x5d, 0x81, 0xb2, 0xe8, 0x45, 0xbd, 0x0d, 0x97, 0xe2, 0x35, 0xfc, 0x6a, - 0x0a, 0x0c, 0x71, 0x68, 0xa8, 0x7d, 0xaa, 0x0d, 0x32, 0x74, 0x39, 0x80, - 0xd3, 0x2e, 0x13, 0x8b, 0x4e, 0x74, 0x87, 0xcd, 0xba, 0x57, 0x73, 0x0e, - 0x8b, 0x4b, 0x09, 0xee, 0x35, 0x99, 0xef, 0xb3, 0xab, 0x41, 0x6d, 0xae, - 0xaf, 0x5a, 0x47, 0xe7, 0x9d, 0x97, 0xfd, 0x17, 0xa6, 0xd7, 0x57, 0xb3, - 0xaf, 0xe1, 0xca, 0xb5, 0x90, 0xed, 0x6b, 0xed, 0xcb, 0xf6, 0x4e, 0xd7, - 0x94, 0xe1, 0xbe, 0x9f, 0xda, 0xff, 0x5d, 0x16, 0x5a, 0x8e, 0xa1, 0x9f, - 0x1f, 0x3a, 0xb8, 0x3b, 0x68, 0x6b, 0x5c, 0x0d, 0xc4, 0x31, 0xc4, 0xb9, - 0xc2, 0x7e, 0x86, 0xd5, 0xb8, 0xbe, 0x48, 0x1c, 0xc3, 0x92, 0xea, 0xde, - 0x1a, 0x31, 0xdd, 0xb3, 0xdc, 0x8f, 0x58, 0x8e, 0x7a, 0xaa, 0x1e, 0x05, - 0xa4, 0x5b, 0xf5, 0x76, 0xb6, 0x73, 0xd8, 0xb4, 0xe7, 0x1c, 0xfd, 0x76, - 0x9d, 0x03, 0xca, 0x1f, 0x3a, 0xff, 0xbf, 0x14, 0x3a, 0x1e, 0xe1, 0xba, - 0x95, 0xe6, 0x80, 0x92, 0x82, 0xb5, 0xf9, 0x9a, 0x1f, 0x55, 0xd8, 0x38, - 0x70, 0xfe, 0x23, 0xf6, 0x41, 0xb8, 0x2a, 0xbd, 0x3a, 0xb8, 0xf1, 0xf6, - 0xe2, 0x15, 0x06, 0x58, 0xfd, 0x73, 0xf2, 0xf5, 0x6d, 0x2c, 0x60, 0x5e, - 0xdc, 0xff, 0xbb, 0xec, 0x2a, 0xe3, 0xb6, 0xeb, 0x2b, 0x7f, 0xe1, 0x2e, - 0x83, 0x62, 0x6b, 0x7d, 0x31, 0x93, 0xda, 0xea, 0x11, 0x94, 0xa2, 0xf6, - 0x81, 0x8b, 0x97, 0xda, 0x8e, 0x9d, 0xaf, 0xfd, 0xc3, 0xad, 0xa5, 0x57, - 0xb4, 0x6a, 0x51, 0x33, 0x87, 0x4c, 0xf7, 0xd6, 0xb6, 0x7f, 0xa9, 0xb2, - 0x39, 0xe2, 0x71, 0x4d, 0xbf, 0xd8, 0x34, 0xff, 0x1d, 0x26, 0xb1, 0x5e, - 0x64, 0xbd, 0xe3, 0x22, 0x69, 0x1e, 0xe9, 0x6b, 0xc1, 0x14, 0x16, 0x97, - 0xfe, 0x13, 0x7b, 0x0a, 0x2f, 0x9e, 0xef, 0xd3, 0x58, 0x25, 0xfc, 0xf7, - 0xf0, 0xd7, 0x15, 0x6c, 0x6b, 0xb0, 0x72, 0xdd, 0x7c, 0xf3, 0xbe, 0x76, - 0x31, 0xdc, 0x60, 0xde, 0xb1, 0xb8, 0x71, 0xaa, 0x56, 0x6d, 0x3f, 0xbd, - 0xf0, 0x7e, 0xc6, 0x57, 0xbf, 0xa4, 0xf7, 0x7e, 0xa6, 0xee, 0xc6, 0x1a, - 0xe3, 0xb1, 0x13, 0x3c, 0x56, 0xa6, 0x6a, 0xca, 0x7b, 0xf7, 0x63, 0x87, - 0xf7, 0x65, 0xe8, 0x60, 0xc3, 0x22, 0x2d, 0x42, 0xbf, 0xe3, 0xaa, 0xd3, - 0xad, 0xef, 0x36, 0x9d, 0x6e, 0xb0, 0x0f, 0x52, 0xec, 0xe7, 0x58, 0xde, - 0xdc, 0xe4, 0xf0, 0xbe, 0x4c, 0x9b, 0xbd, 0x53, 0x1f, 0xa1, 0xd4, 0x69, - 0x9a, 0xe1, 0x26, 0xf6, 0xda, 0x33, 0xbc, 0x3b, 0xc1, 0xee, 0x6d, 0x39, - 0xd5, 0x7f, 0xc4, 0x7a, 0xe4, 0x6e, 0x7d, 0xf7, 0x54, 0x8c, 0xca, 0x07, - 0x70, 0x81, 0x49, 0x73, 0xbc, 0xd8, 0x6f, 0x00, 0x1d, 0xce, 0xc1, 0x4c, - 0xbf, 0xc2, 0x9f, 0x60, 0x03, 0xc1, 0xfe, 0x5a, 0xd6, 0xcb, 0xa5, 0x6a, - 0xdd, 0x58, 0xa0, 0x72, 0x03, 0x0f, 0xef, 0x38, 0x5e, 0xa7, 0x87, 0x0f, - 0x5e, 0x8b, 0x6d, 0x54, 0x1a, 0x03, 0x96, 0xd1, 0xcf, 0x4e, 0x2c, 0xe5, - 0x8c, 0xf5, 0x82, 0x3d, 0x5d, 0x98, 0xfc, 0x22, 0xe0, 0x23, 0x57, 0x00, - 0x4e, 0xb0, 0x4a, 0xa7, 0x79, 0xc5, 0x27, 0x60, 0xc6, 0x69, 0xaa, 0x05, - 0x27, 0x89, 0x8d, 0xe8, 0x48, 0xf0, 0x52, 0xf4, 0x38, 0x2f, 0x38, 0x96, - 0x4b, 0xb0, 0x50, 0xbd, 0xc5, 0xca, 0xfb, 0x40, 0xf7, 0x05, 0xba, 0x8e, - 0x69, 0x9d, 0xa3, 0xf4, 0x78, 0x60, 0xe6, 0x2e, 0x3b, 0x69, 0x25, 0xcc, - 0xd8, 0x54, 0x53, 0x56, 0x0c, 0x1d, 0x51, 0xd9, 0xc8, 0x52, 0x34, 0x8f, - 0xef, 0xb8, 0xc7, 0x18, 0xd1, 0xd1, 0xc1, 0x2d, 0x23, 0x13, 0x46, 0x37, - 0xcb, 0xf5, 0xe0, 0x10, 0xd8, 0xbc, 0x15, 0x5a, 0xed, 0x78, 0x15, 0x96, - 0x81, 0xb7, 0xc2, 0xbf, 0xea, 0xec, 0xc2, 0x82, 0xa3, 0x33, 0x20, 0x16, - 0xbb, 0xb7, 0x28, 0xcf, 0xaa, 0x2c, 0x1b, 0x86, 0x98, 0x08, 0x83, 0xee, - 0x9c, 0xdd, 0x97, 0xd6, 0x33, 0x9b, 0x2d, 0xaa, 0xc7, 0x04, 0xc2, 0xdb, - 0x3f, 0x40, 0x71, 0xb2, 0x88, 0x2b, 0xb7, 0x01, 0x74, 0x1e, 0xa6, 0x93, - 0x0a, 0xf1, 0x0c, 0x32, 0xac, 0xa0, 0x73, 0x79, 0xc8, 0xb1, 0x64, 0x1e, - 0x1a, 0xbf, 0x8b, 0xaf, 0x5a, 0xca, 0x1b, 0xc3, 0x3d, 0x2f, 0x95, 0x3b, - 0x85, 0xa5, 0x7d, 0x1b, 0x48, 0xf7, 0x51, 0x00, 0x9e, 0x0c, 0x4e, 0x8e, - 0x3f, 0x3e, 0x8b, 0x84, 0x7b, 0x2d, 0xbc, 0xcc, 0x03, 0xd6, 0x7d, 0x36, - 0x62, 0x5e, 0x05, 0x6c, 0x0e, 0xca, 0x2b, 0x6c, 0x7e, 0x08, 0x3e, 0xf5, - 0x85, 0x58, 0x75, 0x33, 0xb9, 0x0e, 0x14, 0x1c, 0x47, 0xb2, 0x5e, 0x9e, - 0x06, 0x66, 0x7b, 0xb1, 0x98, 0xe4, 0x91, 0x30, 0xe4, 0x34, 0xc9, 0xb4, - 0x91, 0x25, 0x93, 0x06, 0x70, 0xe1, 0x21, 0xbc, 0x1c, 0x94, 0x22, 0x9e, - 0x74, 0x61, 0xa6, 0xc9, 0x0c, 0x27, 0x49, 0xbc, 0xdc, 0x91, 0xd7, 0x8e, - 0xba, 0xc5, 0x5a, 0x19, 0x5c, 0xc6, 0xe3, 0x34, 0x08, 0xe4, 0xc1, 0x29, - 0xd4, 0x9a, 0x14, 0x57, 0x99, 0x7a, 0xe8, 0x05, 0x8b, 0x7a, 0xec, 0xc6, - 0x9c, 0x95, 0xf1, 0x37, 0x5c, 0x31, 0x10, 0xaf, 0xd7, 0xe0, 0xe6, 0x08, - 0x98, 0xf7, 0x54, 0xb2, 0x50, 0xda, 0xd9, 0x31, 0xd5, 0xa6, 0x27, 0x2d, - 0x73, 0x23, 0xef, 0x89, 0xdf, 0xeb, 0xd5, 0x8d, 0xbb, 0xb4, 0x79, 0x63, - 0x27, 0x61, 0x9e, 0x7f, 0x75, 0x86, 0x45, 0x97, 0x5b, 0xec, 0xbc, 0xca, - 0x8d, 0x09, 0x97, 0x78, 0x67, 0x2a, 0x9c, 0xa5, 0x07, 0x55, 0x9d, 0xe3, - 0x06, 0xb7, 0x17, 0x55, 0xde, 0xef, 0x8a, 0x3c, 0xa9, 0xf2, 0x98, 0x97, - 0x02, 0x80, 0x9c, 0xa3, 0x12, 0xb6, 0xc6, 0x20, 0x61, 0xe4, 0xc6, 0xb7, - 0xff, 0x0d, 0x14, 0x76, 0x7f, 0xa0, 0x49, 0x05, 0x3d, 0xd7, 0xe0, 0xc8, - 0x83, 0x44, 0x7f, 0xa1, 0x90, 0x14, 0xa7, 0x44, 0x57, 0x9e, 0x11, 0x72, - 0x3d, 0x80, 0x9d, 0x80, 0xb2, 0xb6, 0x8b, 0xa5, 0x79, 0xd9, 0xd7, 0x8e, - 0xc3, 0x1f, 0x5b, 0xfc, 0xf1, 0x93, 0x4f, 0x30, 0xa5, 0x6d, 0x1b, 0xe3, - 0xe1, 0xdb, 0x40, 0xc5, 0x42, 0xeb, 0x56, 0xcf, 0x59, 0xac, 0x3b, 0xfe, - 0xbf, 0x38, 0x12, 0x03, 0xc0, 0xb6, 0xe3, 0x22, 0xda, 0x18, 0xb3, 0x54, - 0xb7, 0x79, 0xf1, 0xe7, 0x16, 0x8f, 0xd5, 0x6a, 0x9d, 0xbd, 0xb3, 0x59, - 0xa0, 0xe1, 0xfd, 0xc6, 0xca, 0xc6, 0xc1, 0xc2, 0x04, 0x6a, 0x55, 0x6a, - 0x8c, 0x7c, 0xc6, 0x78, 0xa0, 0x17, 0x7f, 0xe0, 0x38, 0x07, 0xbb, 0xf3, - 0xb6, 0x05, 0xad, 0xf4, 0xee, 0xfd, 0xe1, 0x2c, 0x62, 0x7c, 0x68, 0xc3, - 0x55, 0x84, 0xee, 0x2e, 0xf3, 0x22, 0x19, 0xd2, 0x5d, 0xb7, 0x15, 0xec, - 0x1b, 0xef, 0xbd, 0x45, 0x7a, 0xf8, 0x4d, 0x0e, 0xa4, 0x0a, 0xf6, 0x81, - 0x7b, 0xb3, 0xcd, 0xcc, 0xe9, 0x60, 0x15, 0x39, 0x50, 0xea, 0x4d, 0x36, - 0xe2, 0x8b, 0x07, 0x37, 0xe5, 0x1e, 0x3c, 0x61, 0x82, 0x72, 0x64, 0xa8, - 0x14, 0xc2, 0xa3, 0x78, 0x7e, 0x40, 0x01, 0x3d, 0xad, 0x20, 0xda, 0xf1, - 0xea, 0x80, 0x8b, 0x90, 0x77, 0xfc, 0x1c, 0x83, 0xfd, 0x86, 0x87, 0x19, - 0x77, 0xfc, 0xb9, 0x50, 0x4e, 0xaa, 0xa6, 0x0b, 0x90, 0xf1, 0x29, 0x00, - 0x75, 0xf6, 0x80, 0x4e, 0xac, 0xb9, 0xda, 0x17, 0xdc, 0x3f, 0xb2, 0x44, - 0x12, 0x0c, 0x4e, 0xe3, 0x50, 0xc0, 0xa7, 0xbe, 0x48, 0xbd, 0x2b, 0x00, - 0x38, 0x51, 0x56, 0x2c, 0x89, 0xf5, 0xfa, 0xce, 0x77, 0x76, 0x24, 0x2d, - 0x65, 0xd1, 0x29, 0xfc, 0xf4, 0x32, 0x29, 0xb0, 0x15, 0x4a, 0x13, 0x45, - 0x87, 0x5b, 0x9a, 0x1f, 0x15, 0xa0, 0x8c, 0x01, 0x67, 0xbc, 0xc6, 0x2d, - 0xed, 0x05, 0x20, 0x7c, 0x45, 0x6e, 0x05, 0x8a, 0x89, 0x04, 0x8c, 0x55, - 0x69, 0x7c, 0x0d, 0xb7, 0x9e, 0xf6, 0xe9, 0xe3, 0x16, 0xf0, 0x20, 0x22, - 0x4c, 0xf1, 0xc0, 0x85, 0xa3, 0xc7, 0xf0, 0x5f, 0x86, 0xeb, 0x3f, 0x1c, - 0x45, 0x43, 0x26, 0x21, 0xff, 0xb0, 0xb9, 0x90, 0x06, 0x05, 0x32, 0x46, - 0x46, 0x38, 0x71, 0xdb, 0x5f, 0xe3, 0xce, 0x9f, 0xb2, 0x0f, 0xb1, 0xdc, - 0x00, 0x49, 0xba, 0x29, 0xb1, 0x6c, 0x18, 0x57, 0x9c, 0x6f, 0x32, 0x07, - 0x11, 0xec, 0x80, 0x18, 0xda, 0xb3, 0xca, 0xa2, 0x64, 0x75, 0x36, 0xf4, - 0x2d, 0xb6, 0xfc, 0xab, 0x1a, 0x1c, 0x09, 0x95, 0x96, 0x65, 0x12, 0x10, - 0x48, 0x1f, 0xc5, 0xbd, 0x32, 0xb8, 0x34, 0xbc, 0x3a, 0xb5, 0xb2, 0x84, - 0xf2, 0x45, 0xc4, 0x57, 0x92, 0xb2, 0x70, 0x62, 0xd6, 0x20, 0x8d, 0xd6, - 0xea, 0x36, 0xe5, 0x96, 0xa9, 0x9d, 0xc4, 0x0f, 0x66, 0xa7, 0x6b, 0x79, - 0xde, 0x8e, 0xf1, 0x90, 0x29, 0x2f, 0xec, 0x9e, 0xdd, 0xd3, 0x2e, 0x57, - 0xad, 0x29, 0x20, 0xa7, 0x47, 0x4a, 0x84, 0x23, 0xc8, 0xf4, 0xa4, 0x41, - 0x89, 0x77, 0xca, 0xe2, 0x7e, 0x0c, 0x2f, 0x29, 0x18, 0x3b, 0x70, 0x7a, - 0x15, 0xc6, 0x13, 0xdb, 0xaa, 0x01, 0x70, 0x3e, 0x5b, 0x54, 0xc9, 0x05, - 0x5b, 0x68, 0x9b, 0xdf, 0x82, 0x80, 0x7a, 0x47, 0x41, 0x96, 0xa9, 0x79, - 0xe0, 0x44, 0x22, 0xd0, 0x63, 0x90, 0x39, 0x39, 0x71, 0x1f, 0xe8, 0x7c, - 0xa4, 0x41, 0x6d, 0x31, 0x05, 0xa8, 0x1a, 0x60, 0x33, 0xf4, 0xe0, 0x94, - 0x85, 0x9c, 0xa7, 0x50, 0xb2, 0x03, 0x4e, 0xc0, 0x1f, 0xea, 0xef, 0x8c, - 0xbc, 0x14, 0x1e, 0xac, 0x10, 0xba, 0x1b, 0xc2, 0xe2, 0x6a, 0x53, 0x89, - 0x5e, 0x4a, 0xf6, 0x2d, 0x35, 0xfb, 0x16, 0xa6, 0x1c, 0x3a, 0x36, 0xbf, - 0xcd, 0x5c, 0xcc, 0xb6, 0x25, 0x21, 0xbf, 0x3e, 0x4a, 0xd8, 0xa7, 0x2e, - 0xc4, 0xd4, 0x0c, 0x23, 0x53, 0xdc, 0x68, 0x00, 0x70, 0x19, 0x9b, 0x81, - 0xd9, 0xb3, 0x93, 0xce, 0x3f, 0xe8, 0xdd, 0xe8, 0xe0, 0xb3, 0x73, 0xdc, - 0x3c, 0xc7, 0x2a, 0x3c, 0x82, 0x02, 0x77, 0xac, 0x31, 0xae, 0x21, 0x0f, - 0xc0, 0x24, 0x49, 0x46, 0xdb, 0xba, 0x4e, 0x98, 0xa8, 0x97, 0x74, 0x5a, - 0x87, 0x5a, 0x97, 0x31, 0x21, 0x19, 0xc5, 0x30, 0x47, 0x65, 0x1b, 0xa8, - 0x3e, 0x93, 0xb9, 0x9d, 0x7e, 0x10, 0x4a, 0xf7, 0x30, 0x05, 0x87, 0x6b, - 0x5c, 0x2b, 0x72, 0x1f, 0xef, 0x6a, 0x10, 0x8f, 0x36, 0x18, 0x20, 0x1c, - 0x9b, 0x5f, 0x8c, 0x55, 0xe6, 0xc6, 0x24, 0xd0, 0xf9, 0xa1, 0x00, 0x47, - 0x85, 0x2e, 0xdd, 0x93, 0x89, 0x9b, 0xee, 0x26, 0xf9, 0x47, 0xd3, 0xd4, - 0x5e, 0x4f, 0xfe, 0x75, 0x6e, 0x2f, 0x72, 0x94, 0xd6, 0xb5, 0xbc, 0x51, - 0x52, 0xd0, 0xd2, 0xec, 0x5e, 0x1c, 0xac, 0x9e, 0x26, 0xd1, 0xef, 0x8d, - 0x01, 0xfc, 0x07, 0x53, 0x05, 0x1d, 0x84, 0xf5, 0x3a, 0x73, 0x73, 0x27, - 0xdf, 0xc1, 0xf5, 0xad, 0xa0, 0x6c, 0xb5, 0x32, 0xca, 0x54, 0xa1, 0xf2, - 0xbd, 0xc4, 0x97, 0x55, 0x06, 0x71, 0x5c, 0xef, 0x65, 0x0b, 0x53, 0xc5, - 0x35, 0x9b, 0xc0, 0xb3, 0xd4, 0xb3, 0xa2, 0xae, 0xde, 0x8d, 0x18, 0x4a, - 0xd4, 0xb9, 0x96, 0x6b, 0x83, 0xd6, 0x59, 0x30, 0xc4, 0x6b, 0x7a, 0xe0, - 0x08, 0x40, 0xf5, 0x47, 0xac, 0x3f, 0x8a, 0xf3, 0x33, 0xde, 0x62, 0xe1, - 0xa6, 0x38, 0x36, 0x67, 0x64, 0x76, 0xd6, 0x49, 0x1b, 0x6c, 0xa5, 0x6a, - 0xaf, 0xc5, 0xf7, 0x0e, 0xfb, 0xcb, 0x3a, 0x3e, 0xaf, 0x06, 0x7c, 0x4d, - 0x3a, 0x6f, 0xed, 0xc7, 0x9d, 0x45, 0x54, 0x43, 0x56, 0x5f, 0x34, 0x3d, - 0x5c, 0xf3, 0xf4, 0x51, 0x66, 0xcb, 0x01, 0xd8, 0xcc, 0xc3, 0x83, 0x4d, - 0x1d, 0xa1, 0x40, 0xed, 0xc6, 0x9c, 0xe1, 0x07, 0x77, 0xea, 0x5a, 0x63, - 0x3e, 0x3a, 0x54, 0x51, 0xc5, 0xa5, 0x75, 0x34, 0x99, 0xc6, 0x7e, 0xc2, - 0xfa, 0x18, 0x74, 0x73, 0xdf, 0x31, 0xa0, 0x37, 0x45, 0xf8, 0x72, 0xa1, - 0x08, 0x01, 0x8f, 0xcf, 0x1f, 0xb7, 0x9f, 0xc3, 0x4c, 0x9c, 0x20, 0x86, - 0x01, 0xd7, 0xc1, 0xd3, 0x54, 0xfa, 0xf0, 0x44, 0xee, 0x68, 0x3e, 0x20, - 0x6b, 0xbf, 0xbe, 0x2d, 0x20, 0x7c, 0x1f, 0x01, 0x8d, 0xcf, 0x00, 0x4a, - 0x61, 0xe8, 0x08, 0x18, 0x19, 0x1d, 0x61, 0xc4, 0x1f, 0xe1, 0xe3, 0x29, - 0x6f, 0xe8, 0xc7, 0x13, 0x52, 0x5f, 0x51, 0x21, 0x9b, 0xad, 0x76, 0x10, - 0xfc, 0x08, 0x50, 0xe2, 0xc1, 0x1a, 0x15, 0x9e, 0x14, 0x4b, 0x48, 0x55, - 0x10, 0x42, 0x9c, 0x7e, 0xca, 0x1c, 0xcc, 0x81, 0xab, 0xca, 0x60, 0x14, - 0x86, 0x85, 0x32, 0x44, 0xbf, 0xe0, 0x0c, 0x88, 0xed, 0x70, 0x40, 0x5d, - 0x08, 0x50, 0x81, 0x36, 0x93, 0xf2, 0xf6, 0x78, 0x81, 0x52, 0xd0, 0xc2, - 0x54, 0xc1, 0x83, 0xc6, 0xfa, 0x97, 0xe4, 0x9a, 0xbd, 0x5c, 0xb0, 0x62, - 0xc1, 0xa4, 0x99, 0x62, 0x0d, 0xa4, 0xe5, 0x02, 0x73, 0x12, 0x3b, 0x64, - 0xee, 0xcd, 0x52, 0x5e, 0xa7, 0x7b, 0x5c, 0xc2, 0x23, 0x38, 0x94, 0xb3, - 0xf4, 0xa0, 0x78, 0xcb, 0x4d, 0xce, 0xd9, 0xc9, 0x2a, 0xba, 0x39, 0xe1, - 0xa7, 0xe4, 0x03, 0xcb, 0x20, 0x6e, 0xfb, 0xda, 0x9c, 0x04, 0x85, 0xc7, - 0x90, 0x86, 0xd3, 0x07, 0x06, 0x08, 0x30, 0xd4, 0x24, 0x85, 0x52, 0x5e, - 0xa0, 0x38, 0x94, 0x69, 0x67, 0x03, 0x50, 0x27, 0x59, 0x64, 0xa3, 0xff, - 0x04, 0xac, 0xcb, 0x58, 0x39, 0x2a, 0x2d, 0x1a, 0x71, 0x69, 0xd1, 0x82, - 0xeb, 0x8e, 0x26, 0x4a, 0x7a, 0x7b, 0xa7, 0x5f, 0x41, 0x7e, 0x05, 0xca, - 0x83, 0x02, 0x4a, 0xfc, 0x39, 0x68, 0x6b, 0x54, 0x96, 0xb3, 0x5c, 0x03, - 0xd3, 0xcf, 0xce, 0x38, 0x2b, 0x1f, 0xcd, 0x8b, 0x72, 0xcd, 0x54, 0xe3, - 0x4e, 0xc7, 0xee, 0x42, 0xec, 0x5a, 0x4b, 0x24, 0x8e, 0xb1, 0xaa, 0x60, - 0x74, 0xdb, 0x3a, 0xda, 0x4c, 0x5b, 0x37, 0xcf, 0x06, 0xc8, 0x37, 0x62, - 0x1f, 0x2e, 0x5c, 0x20, 0x3e, 0xc8, 0xba, 0xf3, 0x94, 0x27, 0x39, 0x38, - 0x2d, 0x27, 0xb3, 0x78, 0xd0, 0xa6, 0xe9, 0xc0, 0xac, 0xfe, 0x85, 0xce, - 0x8e, 0x21, 0x57, 0x1f, 0x08, 0xca, 0xa2, 0xa9, 0x1a, 0xd7, 0xa9, 0x31, - 0x28, 0x58, 0xb1, 0xde, 0xaa, 0x3f, 0x2e, 0x72, 0x3b, 0xba, 0x58, 0x9b, - 0x6c, 0xec, 0x55, 0xad, 0x63, 0x55, 0xd1, 0x8a, 0x45, 0x1f, 0x2b, 0x59, - 0xed, 0xab, 0xe3, 0x29, 0xfd, 0x6f, 0x57, 0x95, 0x6a, 0x9c, 0x42, 0x9a, - 0xbd, 0x87, 0xe1, 0x94, 0x63, 0x9b, 0x4c, 0xba, 0x4e, 0x41, 0x1a, 0xa7, - 0xbc, 0x56, 0xdd, 0xe9, 0x27, 0xbc, 0xc4, 0x31, 0x9c, 0x59, 0xd2, 0x07, - 0xb2, 0xd3, 0xc7, 0x81, 0x8e, 0x85, 0x6e, 0x34, 0xda, 0x31, 0x96, 0xc2, - 0x31, 0x6d, 0x04, 0x5f, 0x15, 0x6d, 0x05, 0xc9, 0xe7, 0x5b, 0x3b, 0xb7, - 0x52, 0x38, 0x7f, 0x4d, 0x25, 0xde, 0x06, 0xde, 0x4a, 0x72, 0x6c, 0x8c, - 0x17, 0xf9, 0x6d, 0x35, 0x10, 0xb3, 0xa5, 0xee, 0xd1, 0x43, 0x02, 0x36, - 0x14, 0x54, 0xaa, 0x44, 0x09, 0x50, 0xf7, 0x09, 0x18, 0xeb, 0x2b, 0x44, - 0xc7, 0x1c, 0x57, 0xa1, 0x59, 0x84, 0x6d, 0x18, 0xa9, 0x5e, 0x53, 0x42, - 0x83, 0x76, 0x49, 0xa1, 0x30, 0x8c, 0xe1, 0x96, 0xd8, 0x90, 0x86, 0xac, - 0x26, 0x22, 0x8f, 0xd3, 0xc0, 0xe7, 0xf1, 0x51, 0xb6, 0xc7, 0x5e, 0x27, - 0x6a, 0x0b, 0x57, 0x6b, 0x5b, 0xd6, 0xa1, 0xb9, 0x83, 0x2a, 0xf1, 0x70, - 0xc0, 0x59, 0x5d, 0x45, 0xc8, 0x9e, 0x48, 0x46, 0x92, 0x28, 0xc3, 0xdb, - 0xcd, 0xf1, 0x8a, 0x73, 0x4a, 0x9f, 0xff, 0xa3, 0x2e, 0x1d, 0x03, 0x7f, - 0x56, 0x80, 0x16, 0xc5, 0xc3, 0x1a, 0x2f, 0x81, 0x97, 0x5a, 0x4f, 0xeb, - 0xa2, 0x21, 0x95, 0x44, 0x87, 0x51, 0x1f, 0x7b, 0xc5, 0xfb, 0x5e, 0x8b, - 0xac, 0x38, 0x4f, 0x87, 0x97, 0xee, 0xf7, 0x22, 0x9a, 0xea, 0xf3, 0x42, - 0xba, 0x57, 0xba, 0xba, 0x81, 0x33, 0x7e, 0x24, 0x98, 0xc5, 0xfb, 0xe1, - 0x69, 0xd1, 0xcb, 0x95, 0xbb, 0xbd, 0xcd, 0xab, 0xe7, 0x3e, 0xdd, 0xf3, - 0xe9, 0xe2, 0x7a, 0xba, 0x3c, 0xab, 0xc8, 0x6b, 0x91, 0x01, 0xa5, 0xa1, - 0x55, 0xe7, 0xd5, 0xcb, 0x47, 0xe2, 0x75, 0xa9, 0x07, 0x4e, 0xdf, 0x0f, - 0xca, 0x41, 0x1b, 0x88, 0x0f, 0x4e, 0xcb, 0xa4, 0x7a, 0xe1, 0x3c, 0x01, - 0x69, 0xb1, 0xb2, 0x43, 0xbf, 0x4c, 0x97, 0xf7, 0x93, 0xe5, 0x3a, 0x3d, - 0x75, 0x48, 0x69, 0x13, 0x17, 0x7a, 0x3d, 0x0c, 0xab, 0x85, 0x61, 0x10, - 0xe8, 0x8b, 0xe4, 0x5a, 0x33, 0x78, 0xf5, 0xfa, 0xb1, 0x96, 0x27, 0xcc, - 0x58, 0xe5, 0xab, 0x8c, 0x70, 0x93, 0x0f, 0x04, 0x4a, 0x7f, 0x41, 0x7f, - 0x63, 0x0b, 0xff, 0x48, 0x2c, 0x0b, 0x57, 0x07, 0xca, 0x54, 0x02, 0xd7, - 0xbb, 0xd6, 0xd8, 0xfa, 0x5a, 0x2c, 0x15, 0x77, 0x8b, 0x23, 0x3f, 0xba, - 0xed, 0x30, 0x31, 0x8e, 0x24, 0x0d, 0x32, 0x11, 0x88, 0x55, 0xa9, 0x06, - 0x32, 0x17, 0xde, 0xfd, 0x29, 0x31, 0x5d, 0xfb, 0xc2, 0xb2, 0x2e, 0x34, - 0xf8, 0x5d, 0x10, 0xca, 0x12, 0x00, 0xab, 0xd3, 0x4d, 0x45, 0x6c, 0x5d, - 0x22, 0x47, 0x81, 0x00, 0xa8, 0x30, 0x26, 0x7a, 0xd2, 0x25, 0xbf, 0xc1, - 0xbe, 0xc9, 0x84, 0x23, 0x77, 0xb1, 0xc5, 0x9b, 0xda, 0x1f, 0x43, 0x63, - 0xa1, 0xea, 0xb7, 0x57, 0x09, 0x37, 0xc1, 0x75, 0x58, 0x03, 0xf8, 0x3b, - 0xb8, 0xfa, 0x9a, 0x01, 0xf2, 0x96, 0x71, 0xdd, 0x0f, 0x49, 0x1a, 0x02, - 0x2a, 0xce, 0x78, 0x03, 0x3a, 0x59, 0x68, 0xba, 0x1c, 0xa1, 0x34, 0xe3, - 0x7c, 0x87, 0x68, 0x1d, 0xd0, 0x72, 0x4b, 0x17, 0x1f, 0x26, 0x1a, 0xc4, - 0xff, 0x4a, 0xcc, 0xfb, 0xf5, 0x11, 0xe3, 0x8a, 0xd8, 0x6e, 0x88, 0xce, - 0x90, 0x01, 0x0c, 0x1a, 0x50, 0xe9, 0xde, 0x80, 0x11, 0x0f, 0xfb, 0x6e, - 0x6b, 0x12, 0xe2, 0x80, 0x3d, 0x5f, 0xa0, 0x13, 0x0c, 0xcc, 0x19, 0x60, - 0x0c, 0x71, 0x87, 0x43, 0xa9, 0x38, 0x3c, 0xac, 0xab, 0x46, 0x4a, 0x45, - 0x0c, 0x24, 0x25, 0x0b, 0x01, 0x62, 0x07, 0x94, 0x10, 0xfb, 0x45, 0x81, - 0x53, 0x40, 0xb7, 0x3f, 0x57, 0x58, 0x5f, 0xe7, 0x45, 0xb0, 0x8e, 0x10, - 0x0d, 0xa2, 0x44, 0x1a, 0x0b, 0xe1, 0xf8, 0x04, 0xc8, 0x2a, 0x13, 0x41, - 0x19, 0x1e, 0x58, 0xbe, 0xe4, 0x99, 0x5f, 0x87, 0x0e, 0x1e, 0x9a, 0xac, - 0x6d, 0x04, 0x9b, 0x83, 0xd8, 0x10, 0xab, 0xf7, 0x65, 0xe1, 0x88, 0x3a, - 0xcf, 0x60, 0x8c, 0xd8, 0xe3, 0xc5, 0xc0, 0x3a, 0xde, 0x08, 0x73, 0x18, - 0xab, 0x35, 0x6e, 0xa3, 0x95, 0xe3, 0x9c, 0xce, 0x42, 0x79, 0x2c, 0x0e, - 0xb7, 0x3a, 0x9e, 0x26, 0x86, 0x73, 0x7e, 0x80, 0x12, 0xf2, 0xe8, 0x40, - 0x09, 0x7a, 0xc7, 0x76, 0x0d, 0x35, 0xa4, 0xd6, 0xbb, 0xbe, 0xb6, 0x4a, - 0x57, 0xbd, 0x60, 0x72, 0xbb, 0x13, 0x1e, 0xec, 0x13, 0xac, 0xed, 0x8d, - 0x73, 0x8c, 0x30, 0xe1, 0xe7, 0xf2, 0xe0, 0xe3, 0x0f, 0x52, 0x21, 0x10, - 0x7e, 0x1d, 0xe8, 0x4b, 0x5a, 0x2f, 0x2e, 0xa8, 0x8b, 0xba, 0xa6, 0x59, - 0x8c, 0xe6, 0x62, 0xc1, 0x11, 0x55, 0xe4, 0xb6, 0x72, 0x8f, 0x03, 0xa0, - 0x7f, 0x61, 0x1f, 0x26, 0x87, 0x3b, 0x26, 0x9d, 0x70, 0x8e, 0x5c, 0xa6, - 0x8d, 0xe6, 0xff, 0x84, 0x4a, 0x36, 0xbb, 0xec, 0x8d, 0x6e, 0x87, 0x21, - 0x7d, 0x9c, 0x78, 0x81, 0x2f, 0x87, 0xf7, 0x8f, 0x2b, 0x4a, 0x02, 0xf9, - 0xd5, 0x3a, 0x10, 0x20, 0x8b, 0xbf, 0x51, 0x29, 0x59, 0x3c, 0xe2, 0xc8, - 0x88, 0x8c, 0x68, 0x51, 0x60, 0x7a, 0xa1, 0x22, 0xda, 0x1a, 0x52, 0x9e, - 0x0a, 0x7b, 0xbc, 0xc6, 0xd9, 0xbf, 0x2e, 0x90, 0x0b, 0xd2, 0x07, 0x04, - 0x59, 0xfe, 0x46, 0xa6, 0xd9, 0xc8, 0x51, 0xff, 0xcf, 0x65, 0xcd, 0x10, - 0x0c, 0x04, 0xe3, 0xf8, 0xe4, 0x88, 0x3c, 0x3e, 0x77, 0x0a, 0xee, 0x0c, - 0x0b, 0x34, 0xa7, 0xe2, 0xed, 0xd2, 0x18, 0x43, 0xe9, 0x7c, 0x6d, 0x95, - 0xc8, 0xf0, 0x93, 0x93, 0x5e, 0x98, 0x06, 0x2c, 0x6f, 0x11, 0x30, 0x41, - 0x49, 0xfd, 0x79, 0x9c, 0x0b, 0xad, 0xcf, 0x62, 0xf1, 0x13, 0xb0, 0x85, - 0x86, 0xec, 0x29, 0x30, 0x87, 0xea, 0x35, 0x2f, 0xd1, 0x26, 0x0c, 0xee, - 0x57, 0x68, 0x7e, 0x79, 0x37, 0xc2, 0xf3, 0xe6, 0x46, 0x10, 0x88, 0x17, - 0xe7, 0xef, 0x22, 0x07, 0x1f, 0xf1, 0xb5, 0x00, 0xcf, 0x32, 0xa0, 0x5d, - 0xa8, 0x02, 0xa5, 0x1e, 0x2f, 0x6f, 0xfb, 0xd1, 0x11, 0xe6, 0xd2, 0x34, - 0x74, 0xc7, 0x99, 0xc1, 0x78, 0xdd, 0xc7, 0xea, 0x6a, 0x89, 0xbf, 0x30, - 0x13, 0xf6, 0xb2, 0xe8, 0x7a, 0xa8, 0x08, 0x42, 0x4f, 0x1f, 0x4d, 0x57, - 0x72, 0x09, 0x3c, 0x0e, 0x95, 0x96, 0x4f, 0x03, 0xe7, 0x24, 0x0f, 0xc3, - 0xa4, 0x36, 0x48, 0x32, 0xb8, 0x91, 0x93, 0x32, 0x8e, 0x55, 0xae, 0xb2, - 0xe6, 0xd1, 0xb0, 0xf2, 0xd5, 0xb5, 0x00, 0x28, 0x10, 0x89, 0x46, 0x69, - 0x31, 0x8a, 0xec, 0x1c, 0x5d, 0x56, 0x16, 0xe5, 0x13, 0x2a, 0x1b, 0x35, - 0xaa, 0x28, 0x9d, 0x93, 0x4c, 0xa8, 0x84, 0x39, 0x11, 0x65, 0x67, 0x4b, - 0x34, 0xcf, 0xc9, 0x44, 0xc0, 0x4f, 0xb5, 0x0f, 0xdb, 0xb3, 0x73, 0x85, - 0xb3, 0xab, 0x80, 0x69, 0xa2, 0x31, 0xc8, 0xac, 0xa9, 0xd8, 0x2d, 0x3e, - 0xf3, 0x7a, 0x4e, 0x95, 0x6c, 0xde, 0xd3, 0x09, 0xc2, 0xac, 0x4c, 0x53, - 0xf4, 0x56, 0x12, 0x48, 0xe7, 0x5f, 0x89, 0xdd, 0x2e, 0x49, 0x33, 0xbe, - 0x63, 0xbe, 0xcf, 0x83, 0x3d, 0xf8, 0x22, 0xbb, 0xbf, 0x68, 0x6d, 0x21, - 0x1e, 0xe3, 0xf6, 0x93, 0x93, 0xf4, 0xc5, 0x0a, 0x95, 0x83, 0x6c, 0xcb, - 0x5c, 0x58, 0xcc, 0x23, 0xad, 0x47, 0x7e, 0x16, 0x44, 0x81, 0x24, 0x62, - 0x5a, 0xe4, 0x91, 0xdd, 0x5f, 0xcc, 0xea, 0x11, 0x4c, 0x98, 0xec, 0x5e, - 0x8e, 0x54, 0xfb, 0x2c, 0xa0, 0xf7, 0xa2, 0x04, 0x6a, 0x02, 0xd9, 0xf0, - 0x2d, 0xef, 0x73, 0x62, 0xf6, 0xf6, 0x9c, 0x9d, 0x3e, 0xcc, 0xa1, 0x38, - 0xdb, 0xf6, 0xe0, 0xa4, 0x4d, 0x6e, 0x72, 0x65, 0x7e, 0xad, 0x0e, 0xd2, - 0x9a, 0x7e, 0x2e, 0xab, 0xf5, 0xb8, 0xd2, 0x54, 0x52, 0x63, 0xcc, 0x7b, - 0x49, 0xc9, 0xcc, 0x02, 0xcf, 0xff, 0x40, 0x83, 0x39, 0xbd, 0xde, 0x71, - 0x42, 0x81, 0x20, 0x60, 0xf4, 0xc1, 0xa9, 0x5a, 0x67, 0x70, 0x92, 0xe7, - 0x4e, 0xae, 0x44, 0x63, 0x2d, 0x67, 0xeb, 0x00, 0x6b, 0xf1, 0x11, 0xcc, - 0x72, 0x90, 0xd6, 0xe0, 0xb4, 0xbc, 0x42, 0x05, 0xbd, 0x05, 0xdc, 0x9b, - 0x5d, 0xf5, 0x67, 0x9f, 0xab, 0xcb, 0xb5, 0xfa, 0xae, 0xd0, 0xd2, 0xaf, - 0x56, 0xd3, 0x24, 0x95, 0x91, 0x94, 0x9d, 0xec, 0xe0, 0x78, 0x81, 0x8f, - 0xc0, 0x56, 0x5c, 0xa8, 0xa0, 0xaf, 0x32, 0x37, 0x46, 0x6a, 0xef, 0xe4, - 0x55, 0xe7, 0x14, 0xfe, 0xdd, 0x07, 0x39, 0x42, 0x9f, 0x8b, 0x13, 0xf5, - 0x24, 0xf4, 0x60, 0xeb, 0xdf, 0xdf, 0xea, 0xeb, 0x9b, 0x0f, 0x96, 0x08, - 0x18, 0xcc, 0xad, 0xf7, 0x65, 0xeb, 0x3c, 0xf1, 0xa1, 0xaf, 0x21, 0x8a, - 0xe7, 0x18, 0x1a, 0x70, 0x8d, 0x0f, 0x6b, 0x34, 0x9a, 0xec, 0x25, 0x60, - 0xdc, 0xb7, 0x58, 0x7d, 0x28, 0x02, 0x06, 0x64, 0xca, 0x8d, 0xa5, 0x6f, - 0xeb, 0xaa, 0x39, 0x64, 0x5e, 0x16, 0x6a, 0xa9, 0x86, 0xe4, 0x0e, 0x8c, - 0x5a, 0x14, 0x31, 0xf4, 0x5c, 0x45, 0xbb, 0x01, 0x8e, 0xd8, 0xda, 0x3c, - 0xf9, 0xa8, 0x10, 0x94, 0x55, 0x85, 0xb4, 0x8b, 0x41, 0xd6, 0x37, 0x95, - 0x08, 0x1b, 0x8b, 0x7d, 0xd9, 0xd6, 0x21, 0x07, 0x62, 0x18, 0xc6, 0x7e, - 0x73, 0x87, 0x38, 0x7e, 0x10, 0xf3, 0xdf, 0xb1, 0xd0, 0xc0, 0x70, 0x1f, - 0x3e, 0xcf, 0x13, 0x71, 0x77, 0x3c, 0x77, 0x81, 0xb8, 0xd3, 0x5a, 0xc6, - 0xac, 0xd2, 0xfa, 0xf0, 0xc3, 0xa1, 0x3f, 0x5f, 0x86, 0xae, 0x4f, 0x3a, - 0xda, 0x4c, 0x41, 0xc3, 0xca, 0x4e, 0xb1, 0x0c, 0xd6, 0x3f, 0xb6, 0xee, - 0xff, 0x42, 0x3d, 0xe0, 0x7e, 0xc4, 0x0f, 0xfe, 0x6a, 0x35, 0x3f, 0xa5, - 0x16, 0x7c, 0xd4, 0x4d, 0x81, 0x48, 0x4e, 0x00, 0xd2, 0x78, 0xd4, 0x60, - 0xb5, 0xab, 0x56, 0xf4, 0xfb, 0xb3, 0xa2, 0x31, 0xb3, 0x5e, 0xe6, 0xe7, - 0xb0, 0x6c, 0x48, 0x77, 0xfc, 0x87, 0x9b, 0x4c, 0x24, 0x16, 0xe8, 0x2e, - 0x41, 0x13, 0x2a, 0xc7, 0x58, 0xaa, 0x05, 0x5e, 0x05, 0x6c, 0x0e, 0xb6, - 0xe2, 0xa6, 0x24, 0xbe, 0x18, 0x04, 0xaa, 0x6a, 0x2b, 0xe3, 0x71, 0x39, - 0x99, 0xee, 0x24, 0xd0, 0x12, 0x3b, 0x67, 0x24, 0x0f, 0x38, 0x2e, 0x8f, - 0xc5, 0xa4, 0xfc, 0xf3, 0xb5, 0xbd, 0xe6, 0x48, 0x8f, 0x3f, 0x0b, 0x78, - 0x1a, 0xc3, 0x4a, 0xc9, 0x9b, 0xfa, 0x82, 0xa5, 0x96, 0x91, 0xa6, 0x67, - 0x03, 0x60, 0x9d, 0xca, 0x01, 0xd3, 0x1a, 0x22, 0x70, 0x3c, 0xbb, 0xf8, - 0xc3, 0x3b, 0x3a, 0xf5, 0xf1, 0x48, 0xd9, 0x25, 0xc5, 0xfa, 0x3a, 0xd3, - 0x40, 0xf7, 0x52, 0x1f, 0x9c, 0xee, 0x2e, 0xcd, 0xbc, 0x98, 0x5a, 0xa7, - 0x0a, 0xcb, 0xd7, 0xa7, 0x3a, 0x96, 0x73, 0xa8, 0x44, 0x98, 0x6c, 0xc8, - 0xe3, 0x23, 0x25, 0x61, 0xa6, 0x21, 0x50, 0x2a, 0xb4, 0xcc, 0x59, 0x55, - 0x8e, 0x6e, 0xf9, 0xed, 0x58, 0x3e, 0xc4, 0x95, 0x29, 0x92, 0x9b, 0xc9, - 0x6f, 0x0e, 0xf5, 0x81, 0xa4, 0x77, 0xb1, 0x41, 0xc4, 0xbd, 0x61, 0x48, - 0x89, 0x50, 0x03, 0x60, 0x8e, 0x41, 0xd4, 0xbf, 0x8e, 0xbd, 0xaa, 0x9b, - 0xde, 0xde, 0xa0, 0xce, 0xbf, 0xe0, 0x8a, 0xf6, 0x57, 0x70, 0x52, 0x2d, - 0x6a, 0xa7, 0x7b, 0xdd, 0xd3, 0x04, 0x76, 0xae, 0x5a, 0x49, 0x2a, 0xa7, - 0xef, 0x10, 0x9f, 0x5f, 0xcc, 0xe6, 0x4c, 0x70, 0x9f, 0x17, 0xeb, 0x3c, - 0xb2, 0xfc, 0x2d, 0xb1, 0x3d, 0x18, 0xec, 0x43, 0x72, 0x91, 0x81, 0xf4, - 0x8f, 0x44, 0x53, 0x52, 0xe9, 0xc5, 0x17, 0x5f, 0x1c, 0x53, 0x1a, 0xc1, - 0x40, 0x83, 0x44, 0xb5, 0x13, 0x70, 0xcf, 0x25, 0xe1, 0xc0, 0xe0, 0x9d, - 0xf4, 0x48, 0xc9, 0x89, 0x42, 0x70, 0x99, 0x85, 0x4a, 0x65, 0x16, 0x2a, - 0xe1, 0xd8, 0x37, 0xc6, 0x90, 0x49, 0xc3, 0xe2, 0xc4, 0x61, 0x31, 0x25, - 0xb5, 0x54, 0x46, 0xc8, 0x04, 0x8a, 0x53, 0x1d, 0x04, 0xa7, 0x4d, 0x51, - 0x60, 0xa9, 0x54, 0x92, 0xb9, 0x38, 0x9e, 0x76, 0x6a, 0xfe, 0x24, 0xc5, - 0xd9, 0x2a, 0x8d, 0x30, 0x13, 0xa7, 0x3f, 0xec, 0xfb, 0x36, 0xdc, 0xc0, - 0xc3, 0x37, 0xfe, 0xfc, 0x2e, 0x45, 0x6a, 0xc6, 0xf7, 0x54, 0xae, 0x9d, - 0x92, 0x6c, 0x48, 0x21, 0xcc, 0x5a, 0x35, 0x36, 0x93, 0xbb, 0x7d, 0x5e, - 0x37, 0x97, 0xa7, 0xb3, 0x66, 0xf0, 0xf1, 0xbd, 0xdd, 0xa4, 0xe3, 0x5d, - 0x05, 0xcd, 0x4b, 0xa9, 0x73, 0xf0, 0x64, 0xaf, 0x25, 0xd0, 0xd1, 0x56, - 0x10, 0x02, 0x2e, 0xf4, 0xb9, 0xbc, 0xf6, 0xa9, 0xaf, 0xd5, 0x62, 0xba, - 0x77, 0xc5, 0x74, 0x9f, 0xf8, 0xb9, 0xd1, 0xc7, 0xb6, 0x42, 0xed, 0xc3, - 0xe4, 0xe4, 0xc3, 0xe8, 0x85, 0x42, 0x68, 0x3b, 0x7f, 0xba, 0x9d, 0x6e, - 0x84, 0x0a, 0x01, 0x57, 0xa8, 0xf7, 0x69, 0xf1, 0x49, 0x24, 0xa0, 0x12, - 0xb8, 0xb5, 0x22, 0xd5, 0xcc, 0xc3, 0x7e, 0x56, 0x15, 0xde, 0x3f, 0x6f, - 0x6b, 0xbb, 0xec, 0xcf, 0x73, 0x56, 0xef, 0xe1, 0xfe, 0x47, 0x23, 0xd0, - 0x54, 0xa9, 0x7c, 0x0f, 0x0f, 0xfc, 0x1f, 0x7c, 0xae, 0xcb, 0x81, 0xde, - 0x83, 0x73, 0x11, 0xc6, 0xcb, 0x44, 0x22, 0x23, 0x26, 0x45, 0x9b, 0x89, - 0x29, 0x18, 0x91, 0x8d, 0x4e, 0xe0, 0xd3, 0x2f, 0xd1, 0xef, 0x2f, 0x8d, - 0x48, 0x9b, 0xdf, 0x49, 0xc4, 0xbf, 0xf0, 0xcb, 0x4a, 0x06, 0x2a, 0xa7, - 0x0c, 0xe3, 0x5b, 0x76, 0x63, 0x6b, 0x81, 0xde, 0xcc, 0x4d, 0x98, 0xae, - 0xb2, 0xd5, 0xe0, 0x38, 0xd0, 0x84, 0x60, 0x0c, 0x5a, 0x1a, 0x7c, 0x60, - 0x4b, 0x46, 0x11, 0xf7, 0x68, 0xe4, 0xcd, 0x2e, 0x0e, 0x20, 0x65, 0x0b, - 0x42, 0x19, 0x0c, 0xa0, 0x9c, 0x57, 0xd7, 0xc5, 0x71, 0x73, 0xdb, 0x9c, - 0x72, 0x72, 0xf9, 0x3d, 0x50, 0xb1, 0xb7, 0x11, 0xab, 0x1d, 0xef, 0x21, - 0x22, 0x7e, 0x51, 0xc9, 0x18, 0x67, 0x1a, 0xf2, 0x29, 0xce, 0x19, 0xbd, - 0x3e, 0xc0, 0x9b, 0xa7, 0x18, 0x7f, 0xa4, 0xf7, 0x96, 0xe6, 0x0d, 0x82, - 0xbd, 0x94, 0xdf, 0xf2, 0xf6, 0xa4, 0xa6, 0x07, 0xb7, 0x22, 0xa5, 0xb8, - 0x2e, 0x4a, 0x20, 0x9d, 0xf4, 0xd9, 0xe8, 0x16, 0xaa, 0x2b, 0x06, 0x0e, - 0xf2, 0x7f, 0x48, 0x10, 0xe6, 0x60, 0xdb, 0xff, 0x08, 0x3c, 0xd3, 0xcc, - 0x32, 0xa3, 0x1f, 0x59, 0x34, 0xc6, 0xca, 0xac, 0xf5, 0x6f, 0x86, 0xa6, - 0x07, 0xa7, 0x4a, 0x09, 0x70, 0x4c, 0x19, 0x88, 0x86, 0x02, 0x30, 0xfd, - 0xe1, 0xae, 0x8d, 0x4d, 0xe8, 0x3d, 0x9c, 0x04, 0xf4, 0x6f, 0xfa, 0x2b, - 0xf6, 0xe9, 0x70, 0x0b, 0x7f, 0x3e, 0xd1, 0x18, 0x64, 0xde, 0x0a, 0xd5, - 0xa3, 0xe1, 0x29, 0x92, 0x99, 0x7a, 0xd3, 0xa4, 0x79, 0x5b, 0x20, 0x16, - 0x21, 0x36, 0xd1, 0xa4, 0xb8, 0xfc, 0x46, 0xde, 0x4e, 0xbc, 0xad, 0x49, - 0xc0, 0x03, 0xd5, 0x9e, 0x2d, 0x43, 0x79, 0x78, 0x3e, 0x4c, 0xee, 0x07, - 0x9a, 0x15, 0x2c, 0xc8, 0xc2, 0x46, 0xb6, 0x8f, 0x4c, 0xba, 0xb2, 0xda, - 0x5f, 0x8a, 0xf7, 0x2b, 0xd0, 0xf8, 0x4d, 0x3b, 0xe8, 0x8b, 0x8e, 0x5f, - 0x8b, 0xb5, 0x86, 0x22, 0x4b, 0xa0, 0x67, 0x06, 0xf9, 0x80, 0x26, 0xf3, - 0x6c, 0xd6, 0x3c, 0xb6, 0x00, 0x14, 0x9a, 0x39, 0x64, 0x7c, 0xe6, 0x87, - 0xc8, 0xa8, 0x02, 0x31, 0x47, 0x2c, 0xbc, 0x81, 0xb2, 0x94, 0xcd, 0x5e, - 0xde, 0x67, 0x65, 0x21, 0x94, 0x04, 0xd6, 0x22, 0xbe, 0x58, 0xe7, 0x8d, - 0x57, 0x17, 0xac, 0x61, 0x30, 0x1f, 0x2d, 0xae, 0xab, 0x09, 0x2c, 0x6f, - 0xc2, 0x0d, 0x59, 0xb5, 0xd8, 0xc3, 0xd5, 0x6d, 0x16, 0xdd, 0xb6, 0xf2, - 0xc6, 0xc4, 0x4f, 0x24, 0xd9, 0x98, 0xb4, 0xf9, 0x46, 0x23, 0x32, 0x51, - 0xb3, 0xd7, 0x6f, 0x31, 0x0f, 0x16, 0x06, 0x10, 0xd6, 0x1a, 0x00, 0x8a, - 0x38, 0x84, 0xd9, 0x49, 0xb5, 0xc1, 0xf1, 0x6b, 0x02, 0x2f, 0x67, 0x06, - 0x70, 0xeb, 0x80, 0x40, 0x7a, 0xfd, 0x54, 0x05, 0xe6, 0xb8, 0x9a, 0x9b, - 0x06, 0x6f, 0xa0, 0x69, 0xe8, 0xc5, 0xa8, 0xe7, 0x50, 0x5c, 0xff, 0xba, - 0x3b, 0xe8, 0xa2, 0xe1, 0x93, 0x67, 0x60, 0xb5, 0xd2, 0x3d, 0x36, 0x00, - 0x25, 0x6b, 0x32, 0xd7, 0x82, 0xde, 0xb8, 0xa1, 0xe4, 0x3d, 0xe4, 0x2e, - 0x91, 0x74, 0xf1, 0x09, 0xa9, 0xa2, 0xf4, 0x52, 0xb8, 0x5f, 0xe6, 0x55, - 0x2e, 0x3b, 0x34, 0xc1, 0x57, 0x90, 0xe6, 0xd1, 0x9d, 0x10, 0xa9, 0xf8, - 0xf8, 0x7c, 0x38, 0x40, 0x25, 0xfd, 0x57, 0xd4, 0x04, 0x68, 0x6b, 0x9c, - 0xd1, 0x45, 0xb9, 0x86, 0x2d, 0x62, 0x74, 0xad, 0x02, 0xc7, 0xab, 0x33, - 0x68, 0x6f, 0x39, 0xc0, 0xb6, 0x30, 0x73, 0x0b, 0x91, 0xd3, 0x3a, 0xce, - 0x75, 0x3e, 0x84, 0x8a, 0x72, 0x41, 0xa9, 0x22, 0xe6, 0x47, 0x0e, 0x0f, - 0x91, 0xd9, 0x89, 0xbb, 0x8c, 0xc5, 0x7b, 0x0f, 0x0f, 0xef, 0xbb, 0x00, - 0xd5, 0x6b, 0xab, 0x8a, 0x41, 0xc9, 0x8b, 0x95, 0xb5, 0x17, 0x84, 0x8e, - 0xd6, 0xcd, 0x01, 0x43, 0x86, 0xe3, 0x22, 0x46, 0x99, 0xdc, 0x6b, 0xd5, - 0xa2, 0x47, 0xac, 0xba, 0xbb, 0x3e, 0x6f, 0xd0, 0x19, 0x2c, 0xe4, 0x55, - 0x13, 0xe8, 0x3d, 0x11, 0x94, 0xd6, 0x6a, 0xe5, 0x9d, 0xe4, 0xa0, 0xf4, - 0x1c, 0x44, 0xd9, 0x0d, 0xf4, 0x4e, 0x0d, 0xcb, 0x91, 0x7b, 0x58, 0xf2, - 0x97, 0xd7, 0x8f, 0x93, 0xaa, 0x05, 0x59, 0x9f, 0xaa, 0xb9, 0x46, 0x55, - 0x56, 0xd6, 0x27, 0x37, 0xcd, 0x12, 0x41, 0x39, 0x3a, 0x68, 0xf5, 0x75, - 0xa1, 0x51, 0xfd, 0x5a, 0x5a, 0xdb, 0xcf, 0x3b, 0xf8, 0x0b, 0x55, 0xc0, - 0xbc, 0xc6, 0x59, 0x2b, 0x6a, 0xf1, 0xfa, 0x63, 0x13, 0x63, 0x78, 0x72, - 0xcf, 0x0d, 0x25, 0xb7, 0x2a, 0x5e, 0x6c, 0xa1, 0xb4, 0x28, 0x80, 0x71, - 0xf2, 0xb7, 0x15, 0x91, 0x2d, 0xbc, 0x43, 0xd4, 0xb3, 0xb2, 0xa1, 0x17, - 0x38, 0x87, 0x49, 0x14, 0x8e, 0xe0, 0xdf, 0x36, 0x20, 0x90, 0xdb, 0xfd, - 0xe9, 0xed, 0xbc, 0xa1, 0xbb, 0x12, 0xdd, 0x10, 0x6e, 0x53, 0x2b, 0xca, - 0xcd, 0x2f, 0x7b, 0xd0, 0xc9, 0x74, 0xe5, 0x70, 0xc3, 0x8d, 0x79, 0x7f, - 0xc5, 0x95, 0x62, 0x6f, 0x40, 0x69, 0x66, 0x40, 0x57, 0x03, 0x10, 0x6e, - 0xde, 0x1e, 0x1a, 0x7c, 0xab, 0x6a, 0xa8, 0x98, 0x6d, 0xbc, 0x4c, 0x52, - 0xe0, 0x96, 0xd5, 0x41, 0x01, 0xee, 0xac, 0x46, 0x1b, 0xaf, 0xdc, 0x4b, - 0xb9, 0x83, 0xea, 0xa1, 0x9c, 0xdb, 0x7b, 0x76, 0x57, 0x25, 0x05, 0xe6, - 0xb6, 0x6d, 0x87, 0x1e, 0x54, 0x5d, 0x12, 0x47, 0x50, 0x3e, 0xfc, 0xab, - 0x8e, 0x00, 0x48, 0xc5, 0x67, 0xe3, 0x75, 0x63, 0xb3, 0xbf, 0x5a, 0x32, - 0x70, 0x2b, 0xb5, 0x12, 0xa0, 0x66, 0xe5, 0xc6, 0xcb, 0x99, 0x7e, 0x0b, - 0x6a, 0x69, 0x52, 0x0a, 0x9a, 0x80, 0x17, 0xfa, 0xcd, 0xef, 0x33, 0x12, - 0x0a, 0x53, 0x72, 0x17, 0xeb, 0x7d, 0x58, 0x3c, 0xd0, 0xd0, 0xf1, 0xeb, - 0x08, 0x52, 0x52, 0x45, 0x1e, 0xd8, 0xf5, 0x2f, 0x56, 0xb8, 0x78, 0x0a, - 0x73, 0x95, 0xc6, 0x2f, 0x98, 0x27, 0xab, 0x2a, 0x02, 0x10, 0x8a, 0x67, - 0x90, 0x48, 0xf8, 0x94, 0x6f, 0x78, 0x69, 0xe3, 0xf0, 0x59, 0xc4, 0x1b, - 0xe2, 0xcd, 0x87, 0x09, 0xef, 0xc1, 0x44, 0x5a, 0x38, 0xdd, 0x25, 0x10, - 0x1c, 0xc1, 0x4b, 0xc8, 0x11, 0xa8, 0xaa, 0x13, 0x00, 0x5a, 0xf6, 0x02, - 0x91, 0xb5, 0x20, 0x23, 0xab, 0x9b, 0xb6, 0xb4, 0x91, 0x72, 0x39, 0x10, - 0xa8, 0x78, 0x78, 0x84, 0x44, 0x19, 0xeb, 0x08, 0x08, 0xdc, 0x51, 0x92, - 0x15, 0x6d, 0xc2, 0x1b, 0x5d, 0xef, 0x3f, 0xfc, 0x6f, 0x21, 0xb3, 0x70, - 0xfe, 0xbb, 0x45, 0x66, 0xca, 0x3f, 0xbe, 0xfa, 0xaf, 0x38, 0xfe, 0xb7, - 0x4c, 0x6a, 0xba, 0xfe, 0x79, 0xcc, 0xfe, 0xbd, 0x95, 0x27, 0xff, 0x78, - 0x89, 0x9c, 0xe2, 0x7d, 0xfa, 0xbb, 0xe7, 0xef, 0xa0, 0x3c, 0x3e, 0x75, - 0x93, 0x16, 0x40, 0x90, 0xe0, 0x70, 0xae, 0x34, 0x14, 0xfe, 0xf3, 0x33, - 0x26, 0x4c, 0x14, 0xbd, 0xad, 0xfe, 0xde, 0x7f, 0xde, 0xe6, 0x6d, 0x80, - 0x3c, 0x82, 0x37, 0x0c, 0xe0, 0x70, 0x3c, 0xc1, 0xa5, 0xe9, 0xee, 0x74, - 0x07, 0x03, 0x97, 0xce, 0x5a, 0x70, 0x24, 0x28, 0x36, 0x13, 0x0d, 0xfa, - 0x3a, 0x6d, 0x4f, 0x27, 0xd5, 0xfd, 0xdc, 0x7c, 0xf4, 0x2f, 0xce, 0xc5, - 0x87, 0x05, 0xa5, 0x83, 0x24, 0xe8, 0x89, 0x21, 0x24, 0x0e, 0x81, 0xba, - 0xd7, 0x30, 0xd4, 0x33, 0x45, 0x7e, 0xa7, 0x05, 0x4f, 0x87, 0x14, 0x1f, - 0xd1, 0x3f, 0xf9, 0xaa, 0xfd, 0x9b, 0x8a, 0xa5, 0x18, 0x0a, 0xac, 0xa3, - 0xbd, 0xa5, 0xc5, 0xe5, 0xed, 0xf7, 0x8a, 0x39, 0xed, 0xfc, 0x02, 0xeb, - 0xed, 0x6a, 0xc7, 0x78, 0xc8, 0xc0, 0xdf, 0xd9, 0xc3, 0x09, 0x37, 0x1f, - 0x4a, 0x6a, 0x01, 0x43, 0x5c, 0x5b, 0x0b, 0xd3, 0xbd, 0xd9, 0x12, 0x6b, - 0x2b, 0xcd, 0xb1, 0x60, 0x57, 0x8a, 0x75, 0x9a, 0x42, 0x44, 0x45, 0x33, - 0x0c, 0x1f, 0x85, 0xff, 0x86, 0xff, 0x4d, 0xfe, 0xdd, 0xe8, 0xe8, 0x86, - 0x8b, 0x06, 0x41, 0x25, 0x83, 0x8a, 0xb2, 0xf8, 0x85, 0x9b, 0xae, 0x59, - 0x00, 0x60, 0xb1, 0x0d, 0x3e, 0x42, 0x08, 0x8f, 0x30, 0x55, 0x80, 0x00, - 0xe0, 0xba, 0x37, 0x33, 0xd5, 0x6f, 0xb3, 0x6c, 0x99, 0x41, 0xdf, 0xca, - 0xc9, 0x6a, 0xa0, 0x3f, 0x5d, 0x14, 0x66, 0x90, 0xae, 0xfe, 0xd8, 0xb9, - 0x18, 0x0d, 0x0c, 0x19, 0xa9, 0x3f, 0x9e, 0x25, 0x49, 0x87, 0x80, 0x7d, - 0x6e, 0x20, 0x74, 0xb8, 0xe8, 0xe9, 0x52, 0x7d, 0x54, 0x2c, 0x79, 0x23, - 0xa6, 0x08, 0x9c, 0xa1, 0xd1, 0x0a, 0x11, 0x3a, 0x9d, 0x49, 0x9f, 0x7e, - 0x91, 0x2c, 0x31, 0xdd, 0xbb, 0xdf, 0x20, 0x95, 0x2f, 0x5e, 0x0a, 0x8f, - 0x8e, 0x5a, 0x8b, 0x24, 0x96, 0x87, 0x33, 0xf9, 0x90, 0xef, 0x59, 0x8e, - 0x06, 0xd1, 0xe2, 0xc8, 0x9a, 0x47, 0x11, 0x04, 0x04, 0xe7, 0x7d, 0x9e, - 0x21, 0x52, 0x78, 0x09, 0xff, 0x71, 0xf4, 0x15, 0x20, 0xbf, 0x87, 0x49, - 0x9d, 0x82, 0xd1, 0x56, 0xbe, 0xa6, 0x47, 0x2b, 0x3e, 0x93, 0x92, 0xc1, - 0xb5, 0x89, 0x03, 0x24, 0xf2, 0x12, 0xad, 0x48, 0x31, 0x60, 0x34, 0x84, - 0x1b, 0x80, 0x70, 0x86, 0xe9, 0x16, 0x14, 0xae, 0x69, 0xe2, 0x45, 0x06, - 0x02, 0xc5, 0x4a, 0x02, 0x18, 0x00, 0xa6, 0x4e, 0x04, 0x28, 0xc2, 0xe9, - 0xc2, 0x5f, 0x4d, 0x14, 0x83, 0x29, 0x41, 0x99, 0xb4, 0x42, 0x05, 0xb4, - 0xaa, 0x20, 0x18, 0x58, 0xbc, 0x10, 0x4e, 0xab, 0x07, 0x9e, 0x0e, 0xd8, - 0x4a, 0x7a, 0x82, 0x4e, 0xef, 0xb8, 0x99, 0x28, 0x4b, 0xcf, 0x10, 0x2c, - 0x5c, 0xec, 0x4b, 0x93, 0xee, 0x67, 0xef, 0xdb, 0x4c, 0x1a, 0x35, 0xe1, - 0xff, 0xc1, 0xd1, 0x07, 0x15, 0x68, 0xab, 0x7b, 0xc3, 0x4a, 0x64, 0x64, - 0x3d, 0xcf, 0x36, 0xfe, 0x9b, 0x7e, 0x01, 0x8a, 0xc5, 0x5c, 0xca, 0x23, - 0x6e, 0xd4, 0x01, 0x71, 0x07, 0xd6, 0x9a, 0xe3, 0xbb, 0xab, 0x57, 0xcd, - 0x95, 0xcc, 0xd6, 0x55, 0x11, 0xe9, 0x80, 0xc8, 0x05, 0x95, 0xe1, 0x77, - 0x65, 0x5f, 0x84, 0x8a, 0xd7, 0xba, 0xa9, 0x11, 0x0c, 0x5e, 0xa5, 0x4b, - 0x55, 0xda, 0xb6, 0x96, 0x31, 0xf6, 0xb7, 0xef, 0x3e, 0xa5, 0x97, 0xcf, - 0x28, 0xe2, 0x00, 0xf3, 0xc6, 0xcc, 0x25, 0xe2, 0xe0, 0x4e, 0x68, 0xf6, - 0xa7, 0x72, 0xca, 0xaf, 0x3c, 0x87, 0x17, 0x8d, 0x17, 0xaa, 0x08, 0xa8, - 0xdb, 0xe2, 0x06, 0xc4, 0xf4, 0x90, 0x77, 0x26, 0xc0, 0x92, 0xf2, 0x0e, - 0x20, 0xa3, 0x99, 0x5c, 0xfe, 0x95, 0xc9, 0xae, 0x07, 0x20, 0x16, 0x2a, - 0xd1, 0xf7, 0xc9, 0x4d, 0x9e, 0x46, 0xb6, 0x39, 0x31, 0x04, 0xbb, 0x25, - 0xea, 0x93, 0xed, 0x27, 0xee, 0xb5, 0x92, 0x89, 0x8b, 0x54, 0x08, 0x74, - 0x0d, 0x26, 0xa1, 0x6a, 0xb6, 0xea, 0x39, 0xcc, 0x1b, 0x16, 0xa6, 0xde, - 0x3d, 0xa6, 0xf7, 0xe4, 0x50, 0x68, 0x80, 0xee, 0xd0, 0xed, 0x2d, 0x58, - 0x1e, 0x7a, 0x91, 0x02, 0x8c, 0x85, 0x32, 0x6e, 0x06, 0x98, 0xef, 0x00, - 0x6b, 0x45, 0x4a, 0x6b, 0x22, 0x1f, 0x35, 0x1b, 0xfe, 0xb8, 0x67, 0xae, - 0x01, 0xdc, 0xe0, 0x44, 0x47, 0x13, 0xa3, 0x92, 0xd1, 0x77, 0x06, 0x21, - 0x2b, 0x69, 0x4f, 0x45, 0x8d, 0x1d, 0xde, 0x33, 0x6c, 0xda, 0x86, 0x08, - 0xb4, 0xc9, 0x17, 0x5a, 0x9f, 0xd4, 0x9a, 0x0d, 0x50, 0xfb, 0x9b, 0x27, - 0x12, 0x32, 0x3e, 0x30, 0x8a, 0x7a, 0xe2, 0x46, 0x2f, 0x9a, 0x7c, 0x05, - 0x74, 0x13, 0x9d, 0x8a, 0x05, 0x8a, 0x27, 0xb3, 0x23, 0x8e, 0x2f, 0xcb, - 0x4a, 0x2b, 0x88, 0x3d, 0x83, 0x6f, 0xc4, 0x17, 0x8d, 0x1b, 0xa5, 0xc3, - 0x27, 0xf4, 0x54, 0x67, 0xbd, 0xfc, 0x5a, 0x83, 0x9e, 0x57, 0xcd, 0xa1, - 0x6f, 0x4a, 0xc8, 0x66, 0x58, 0xfa, 0xf1, 0x43, 0x0c, 0x71, 0xd9, 0x42, - 0x69, 0x68, 0xb9, 0x53, 0xaa, 0x33, 0xc0, 0x2b, 0x2e, 0x01, 0x54, 0x08, - 0x48, 0xd7, 0x79, 0xe8, 0xd8, 0x4d, 0x54, 0x89, 0x1c, 0xa1, 0x0c, 0xa0, - 0x84, 0x74, 0x59, 0x52, 0xca, 0x6f, 0xf6, 0xe2, 0xc6, 0xe4, 0x81, 0x1f, - 0x5e, 0x56, 0x99, 0xe8, 0xf7, 0x40, 0xb7, 0xc1, 0x9f, 0x63, 0x8f, 0xec, - 0xfd, 0xe9, 0x90, 0xed, 0xb7, 0x21, 0x4d, 0x81, 0x18, 0xf0, 0xd2, 0x11, - 0x75, 0x17, 0xe7, 0x26, 0x88, 0xdd, 0xd3, 0xc1, 0xe1, 0x18, 0x47, 0xa1, - 0x05, 0x17, 0xc0, 0x11, 0xe1, 0xe8, 0xa3, 0xd0, 0xe9, 0x44, 0x7d, 0xd0, - 0x33, 0x2a, 0x4e, 0xab, 0x6a, 0x0f, 0xe8, 0x29, 0x2a, 0x52, 0x53, 0x0e, - 0xc8, 0xe3, 0xb5, 0x6e, 0x32, 0x3d, 0x43, 0x38, 0x3d, 0xc2, 0x07, 0xb4, - 0xc7, 0x25, 0x52, 0x2c, 0x12, 0x11, 0x82, 0x7f, 0xb1, 0xe3, 0xbd, 0xe7, - 0x05, 0xe9, 0xc3, 0x5b, 0xc0, 0xd5, 0xdf, 0x02, 0xbb, 0x83, 0x07, 0x8e, - 0x07, 0x10, 0x79, 0x21, 0x01, 0xf2, 0x20, 0x1a, 0x52, 0xe0, 0x75, 0xe7, - 0x85, 0x03, 0x16, 0x1f, 0xa0, 0x12, 0x86, 0xb0, 0xbe, 0x70, 0x52, 0x8a, - 0x70, 0xe3, 0x29, 0x03, 0x87, 0x59, 0xcd, 0x40, 0xc4, 0x05, 0x60, 0x4a, - 0x67, 0xa0, 0xe2, 0xf7, 0xbb, 0xbe, 0xcf, 0x6b, 0x8a, 0x88, 0xf4, 0xb5, - 0xf2, 0xa0, 0x95, 0x56, 0xdc, 0x46, 0xe5, 0x52, 0x06, 0x30, 0x6b, 0x26, - 0x29, 0x14, 0x24, 0x11, 0x67, 0x35, 0x3e, 0x5c, 0xcd, 0x91, 0x2b, 0xf8, - 0x95, 0x1e, 0x54, 0x97, 0xcd, 0x93, 0xac, 0xbf, 0xfa, 0x8a, 0xa1, 0x8b, - 0x14, 0xc6, 0x43, 0xae, 0x6a, 0xc3, 0x1c, 0xe5, 0x9f, 0xeb, 0xc9, 0x57, - 0x70, 0x6c, 0x25, 0x9f, 0x89, 0x69, 0xa5, 0x0b, 0xb5, 0x41, 0x19, 0x95, - 0xc4, 0x95, 0x4e, 0x52, 0x7e, 0xd2, 0x4b, 0x67, 0xca, 0x13, 0xcd, 0x4d, - 0xe6, 0x14, 0x5c, 0x2c, 0x7d, 0xba, 0x73, 0xb8, 0x61, 0x5b, 0xc1, 0x31, - 0xec, 0xf3, 0x64, 0x5d, 0x8c, 0xf6, 0x43, 0x3c, 0xa0, 0x1d, 0xc8, 0xc3, - 0x17, 0xd5, 0xcc, 0x92, 0xa8, 0xbd, 0x88, 0xbc, 0x9c, 0x56, 0xc4, 0x2f, - 0x93, 0x05, 0xc3, 0x54, 0x03, 0x45, 0xd6, 0x1a, 0xd5, 0x2d, 0x7e, 0x86, - 0x70, 0x48, 0xed, 0xad, 0x9b, 0xec, 0x41, 0xc8, 0x28, 0x43, 0x21, 0x12, - 0xa0, 0x27, 0x00, 0xdd, 0x48, 0x50, 0xb1, 0xe3, 0x03, 0xe9, 0x0b, 0x53, - 0x6e, 0x90, 0xb7, 0xd1, 0xbb, 0xe3, 0xe8, 0x2f, 0x4a, 0x24, 0xc1, 0xdd, - 0x6b, 0x30, 0xb0, 0xf7, 0x01, 0x94, 0xfb, 0x5a, 0x00, 0x9a, 0xc8, 0x80, - 0x8a, 0xa1, 0x89, 0xa1, 0xe8, 0xdf, 0xf2, 0x89, 0x4c, 0xa3, 0x0a, 0xdf, - 0xa8, 0xf9, 0x23, 0xb5, 0x7f, 0x71, 0xd4, 0x4c, 0xa7, 0x10, 0x7c, 0xf5, - 0xf8, 0x4c, 0x8f, 0xfb, 0xa0, 0x46, 0x0d, 0x67, 0x6d, 0x6f, 0x81, 0xfd, - 0x1c, 0x8f, 0xdd, 0xfa, 0x77, 0xa6, 0xc7, 0x2f, 0x0e, 0xb6, 0x10, 0x70, - 0x08, 0x16, 0x27, 0x89, 0x69, 0x11, 0x47, 0x83, 0x7f, 0x83, 0x03, 0xb7, - 0xa9, 0x2f, 0xa9, 0xec, 0x71, 0xe8, 0xdb, 0x8e, 0x31, 0xbf, 0x63, 0xe9, - 0x3c, 0x21, 0xab, 0xbd, 0xd8, 0xed, 0xba, 0xd4, 0x16, 0x35, 0x77, 0xc7, - 0x93, 0x2c, 0x63, 0x75, 0x13, 0x39, 0x06, 0xc1, 0x6e, 0x8c, 0x42, 0xdc, - 0x6d, 0x42, 0xe3, 0x7c, 0x23, 0x5c, 0xaa, 0x25, 0x62, 0x0f, 0xad, 0x5f, - 0x20, 0x0b, 0xc9, 0x7c, 0x47, 0xd1, 0x27, 0xd1, 0x4c, 0x6c, 0xa4, 0xd8, - 0x10, 0x5d, 0x6c, 0x20, 0x95, 0x60, 0xca, 0x56, 0x25, 0xea, 0x60, 0x17, - 0xe8, 0x0d, 0x93, 0x09, 0xa2, 0x9e, 0xae, 0x86, 0x71, 0x2d, 0x89, 0x10, - 0x0e, 0x40, 0x02, 0xdc, 0xd9, 0xf1, 0xe5, 0x82, 0x99, 0x78, 0xf5, 0xaa, - 0x12, 0x3f, 0xa5, 0x0d, 0xa2, 0x71, 0x2c, 0xc0, 0xc4, 0x18, 0x01, 0x78, - 0xb8, 0xe7, 0xc7, 0x58, 0x1e, 0x3e, 0x35, 0x09, 0x1a, 0xe7, 0x22, 0xd6, - 0xc6, 0xd9, 0xd3, 0xba, 0x1d, 0xfe, 0x05, 0xfe, 0x4f, 0x57, 0x41, 0x03, - 0x4a, 0x8e, 0x07, 0x08, 0x4e, 0x30, 0xa2, 0xd7, 0x27, 0x5e, 0xd1, 0xfd, - 0x4d, 0x6f, 0x27, 0x93, 0x97, 0x06, 0xe0, 0x85, 0x33, 0x4f, 0x84, 0x6b, - 0x71, 0xb8, 0xc4, 0x45, 0x76, 0xd9, 0x5f, 0xc9, 0x35, 0x90, 0x9a, 0x16, - 0x01, 0xb0, 0x46, 0x31, 0x28, 0xf6, 0x7e, 0x55, 0x25, 0x21, 0x1b, 0x77, - 0x80, 0x8d, 0x8d, 0x3a, 0xd0, 0xee, 0x55, 0x6c, 0x7e, 0xb0, 0xa8, 0xcd, - 0x8f, 0x7a, 0xc0, 0x58, 0x0c, 0x53, 0x95, 0xdf, 0x2b, 0x95, 0x18, 0x28, - 0xde, 0x6e, 0x7a, 0x2b, 0x8c, 0x25, 0x72, 0x42, 0x56, 0x8a, 0xc4, 0xd4, - 0x40, 0x11, 0x7a, 0x02, 0x49, 0xa9, 0x22, 0x91, 0xfb, 0xb4, 0x5a, 0x9b, - 0x21, 0x40, 0x41, 0xd6, 0xdd, 0x8d, 0x12, 0xa7, 0x70, 0x2d, 0x74, 0xb1, - 0x69, 0xd9, 0xa5, 0x1a, 0x82, 0x99, 0xd7, 0x5a, 0xcf, 0xc0, 0x30, 0xc9, - 0xc6, 0x92, 0x39, 0x23, 0x2f, 0x9d, 0x14, 0xc8, 0x94, 0x7e, 0xe3, 0xec, - 0x11, 0xfd, 0x53, 0x2e, 0x18, 0xb1, 0x21, 0x20, 0xbf, 0xa2, 0xfc, 0xa0, - 0xad, 0x6a, 0xf8, 0x3c, 0x77, 0x39, 0x99, 0x60, 0xb4, 0x06, 0x31, 0xce, - 0x5e, 0x96, 0x30, 0xbd, 0x52, 0x52, 0x04, 0x98, 0x6a, 0xa9, 0x9c, 0xa9, - 0x2e, 0xc6, 0x92, 0x0f, 0x18, 0x51, 0xf9, 0xea, 0x91, 0x38, 0xee, 0xd2, - 0x2c, 0xf0, 0x25, 0xa8, 0x90, 0x6d, 0xb9, 0x96, 0xac, 0x0f, 0x2c, 0xd4, - 0xc8, 0xb1, 0x7e, 0x43, 0xc5, 0xee, 0x7c, 0x77, 0x1e, 0x50, 0xc9, 0x93, - 0x83, 0xc4, 0x31, 0xec, 0x84, 0xd1, 0x9b, 0xb9, 0x6f, 0x86, 0xb4, 0x0d, - 0x1f, 0x74, 0xd9, 0xbd, 0x26, 0x0b, 0x96, 0xb7, 0x65, 0xb3, 0x42, 0xdb, - 0x31, 0x11, 0xa7, 0xb5, 0x44, 0xcb, 0xc7, 0xcb, 0x6a, 0x00, 0xa0, 0x5a, - 0x62, 0x81, 0xb5, 0x20, 0x94, 0x27, 0xf5, 0xd9, 0x52, 0x77, 0x00, 0x65, - 0x07, 0xea, 0x9b, 0xb1, 0x6e, 0xaf, 0x2e, 0xaa, 0x1f, 0x0f, 0x01, 0x23, - 0xcf, 0x30, 0xe9, 0xc8, 0x74, 0x6b, 0x0a, 0x11, 0x0c, 0x2f, 0x34, 0x4a, - 0x3a, 0x70, 0x3c, 0x3a, 0xfc, 0xf4, 0x6a, 0x12, 0xa0, 0x24, 0xe1, 0x8d, - 0xbd, 0x22, 0x3f, 0xba, 0xf3, 0x8f, 0xa6, 0x4f, 0x58, 0x45, 0xce, 0xb9, - 0x9d, 0x02, 0xde, 0x2e, 0xb3, 0x61, 0x81, 0x52, 0xa0, 0x11, 0xfa, 0x46, - 0x7f, 0x28, 0x3e, 0x7a, 0xe3, 0xb6, 0x3d, 0x1f, 0x56, 0x1b, 0x21, 0x4c, - 0x3a, 0x64, 0xf0, 0x04, 0x5b, 0x39, 0x10, 0x3f, 0x57, 0x4e, 0x6f, 0x86, - 0x5c, 0x0b, 0x66, 0x19, 0xc8, 0x13, 0x14, 0x9f, 0x5d, 0x9b, 0x01, 0x20, - 0x67, 0x3a, 0x7b, 0xdc, 0xfb, 0xcd, 0xc0, 0x76, 0x59, 0xe6, 0x52, 0x0e, - 0xfa, 0xf9, 0xf4, 0x0b, 0x5a, 0xec, 0xb7, 0xf6, 0x3d, 0x5f, 0x69, 0x95, - 0xa2, 0x88, 0x62, 0x07, 0x11, 0x0c, 0x2b, 0x45, 0x33, 0x09, 0xec, 0x3e, - 0xf8, 0x53, 0x0a, 0x22, 0x41, 0xba, 0x58, 0x56, 0xfc, 0xa1, 0x25, 0x36, - 0xb7, 0x2f, 0xc3, 0x56, 0xc2, 0xb9, 0xf0, 0x65, 0x06, 0x66, 0x8c, 0x66, - 0x20, 0x34, 0x19, 0xc9, 0x6a, 0xf9, 0x88, 0x6b, 0xb4, 0x81, 0x58, 0x6e, - 0x12, 0xc7, 0xd1, 0x89, 0xff, 0x9a, 0x13, 0xa9, 0x21, 0x38, 0x45, 0x9f, - 0x66, 0x04, 0xfe, 0xd2, 0x13, 0x0c, 0xd4, 0xcc, 0xe0, 0xeb, 0xd3, 0xaf, - 0xe4, 0x2b, 0x03, 0x4f, 0x5e, 0x1c, 0x0b, 0x54, 0x45, 0x1d, 0xc3, 0x2c, - 0xa8, 0x46, 0x71, 0x1e, 0xc3, 0x29, 0x16, 0x3f, 0x1d, 0xc6, 0x0e, 0xee, - 0x72, 0xb0, 0xde, 0xd8, 0x44, 0x26, 0xee, 0xc5, 0x4e, 0xb3, 0xbb, 0x40, - 0xe4, 0xb0, 0x46, 0x9e, 0x9d, 0x44, 0xb9, 0x61, 0x82, 0x68, 0x7a, 0x19, - 0xa6, 0x8a, 0x06, 0x50, 0x0b, 0xc2, 0xcb, 0xd7, 0x75, 0x89, 0xfe, 0xd8, - 0xe3, 0xa4, 0x76, 0xcb, 0x02, 0x71, 0x43, 0xde, 0xad, 0xa5, 0xd7, 0x8d, - 0x06, 0x24, 0x3e, 0xb4, 0x13, 0x32, 0x7f, 0x13, 0xc6, 0x2e, 0x58, 0x90, - 0x1f, 0x40, 0x9c, 0xaa, 0x08, 0x90, 0x78, 0xeb, 0x91, 0xca, 0x42, 0x13, - 0x41, 0x4b, 0x4b, 0x2e, 0x3b, 0x71, 0x5c, 0x4b, 0xa8, 0x99, 0x80, 0x54, - 0x2e, 0xb1, 0x24, 0xac, 0x9b, 0x3f, 0x8c, 0x99, 0xe9, 0x3b, 0x9d, 0xd4, - 0x32, 0xa2, 0xf8, 0xa5, 0xc7, 0x4d, 0xf1, 0x37, 0x90, 0xf4, 0x25, 0xa0, - 0x7f, 0xa4, 0xf7, 0x81, 0x9a, 0xbb, 0x84, 0x39, 0x28, 0x21, 0x70, 0x49, - 0xae, 0xe0, 0xe6, 0x82, 0x13, 0xca, 0x40, 0xa9, 0x00, 0xd5, 0x39, 0x22, - 0x17, 0xc8, 0x80, 0xf7, 0xad, 0xd0, 0xad, 0x59, 0x6d, 0xc5, 0x1f, 0x34, - 0x03, 0xc3, 0xc3, 0x61, 0x0d, 0x6b, 0x98, 0xb5, 0xc4, 0x64, 0x70, 0xcc, - 0x1a, 0x4d, 0x1a, 0x7c, 0x86, 0xb7, 0xfb, 0xf0, 0xac, 0x76, 0xb1, 0xbe, - 0xe3, 0x29, 0x04, 0x90, 0x15, 0xa0, 0xa9, 0xba, 0x52, 0x46, 0x93, 0xb6, - 0x50, 0xf2, 0xce, 0x78, 0x80, 0x25, 0xa8, 0xeb, 0x03, 0xa4, 0x0c, 0x04, - 0xc0, 0xed, 0x2f, 0x40, 0x79, 0xc7, 0xc8, 0x90, 0x80, 0x05, 0x36, 0xb1, - 0x4f, 0x7d, 0x0b, 0x71, 0x8a, 0x19, 0x00, 0x8d, 0x12, 0x68, 0xf9, 0xd2, - 0xb6, 0x6b, 0xb6, 0xc1, 0x60, 0xa9, 0x49, 0x86, 0x92, 0x87, 0xac, 0xac, - 0x6a, 0x3b, 0x2c, 0x89, 0xa1, 0xc6, 0x93, 0xf5, 0xdc, 0x0c, 0x39, 0x98, - 0x68, 0x38, 0xfe, 0x85, 0x8e, 0x1a, 0x80, 0xb1, 0xce, 0x16, 0x56, 0xc6, - 0x3d, 0x99, 0x4a, 0x87, 0x6b, 0xb0, 0x96, 0x55, 0xd4, 0x83, 0xdb, 0xbe, - 0x31, 0x42, 0xd3, 0x32, 0x28, 0xc3, 0xa6, 0xb5, 0x02, 0x8f, 0x86, 0x97, - 0x4c, 0x52, 0xf9, 0x06, 0x0d, 0x22, 0xa0, 0x8a, 0x39, 0x16, 0x56, 0x53, - 0x2a, 0x43, 0x72, 0xf4, 0xd7, 0x1c, 0xa3, 0x9a, 0x41, 0x41, 0xcc, 0xe8, - 0x2d, 0xb1, 0xba, 0xe7, 0x22, 0x7d, 0xa5, 0x5c, 0x73, 0xc8, 0xe7, 0x3c, - 0x8d, 0xb6, 0xd6, 0xcd, 0x98, 0x05, 0x3b, 0x36, 0x01, 0x7c, 0xfc, 0xa4, - 0x24, 0xca, 0x55, 0x91, 0x9a, 0x70, 0x59, 0x59, 0x33, 0x86, 0xb2, 0x1e, - 0xa8, 0x26, 0x95, 0x80, 0xfc, 0xa3, 0x9a, 0x44, 0x2c, 0x49, 0x9b, 0xff, - 0x7c, 0x95, 0x91, 0x68, 0x77, 0xe4, 0x61, 0x00, 0x55, 0x56, 0x11, 0x96, - 0xa6, 0x20, 0xff, 0xf5, 0x61, 0xfb, 0xd3, 0x2e, 0x00, 0xbf, 0x28, 0xd6, - 0xa9, 0xd6, 0x1f, 0x0c, 0x73, 0x08, 0x6c, 0x74, 0x89, 0xe1, 0x2e, 0xbf, - 0xb5, 0x94, 0x85, 0xae, 0xf0, 0xa9, 0xb4, 0xf9, 0xd3, 0xe1, 0x4b, 0x20, - 0x4d, 0x74, 0x02, 0x94, 0x4f, 0xb1, 0x49, 0x6c, 0x1a, 0x7b, 0x0a, 0x66, - 0xf0, 0xe8, 0xcd, 0xeb, 0x3e, 0xac, 0xfc, 0xc4, 0x4b, 0xf1, 0x79, 0x79, - 0x8b, 0x99, 0x5f, 0x9a, 0xbc, 0xab, 0x0a, 0x7e, 0x80, 0x32, 0x27, 0x6e, - 0x0d, 0x88, 0x5d, 0x39, 0xf1, 0x6a, 0xc0, 0x6b, 0x7e, 0x2e, 0x75, 0x2b, - 0xf3, 0x34, 0x33, 0xa9, 0xb7, 0x23, 0xd6, 0xf4, 0x68, 0xad, 0x30, 0x15, - 0xa5, 0x77, 0x44, 0xb2, 0xb0, 0xc8, 0xb6, 0x76, 0x28, 0xaf, 0xd8, 0xed, - 0x41, 0xb0, 0xc9, 0x7b, 0x32, 0x75, 0x0e, 0x1e, 0xb0, 0x4b, 0x3f, 0xb5, - 0xea, 0x66, 0xba, 0xc3, 0xdd, 0x0b, 0xd3, 0x1b, 0x7b, 0x5d, 0xde, 0x8b, - 0xc5, 0xd1, 0x88, 0xc4, 0x01, 0xe8, 0x8a, 0x7b, 0x82, 0xf8, 0x32, 0xba, - 0xdf, 0x7a, 0x4d, 0xca, 0x24, 0xc9, 0xdc, 0x9f, 0x4d, 0x3d, 0x46, 0x32, - 0xfd, 0x93, 0x28, 0x65, 0x74, 0x18, 0xf4, 0xa4, 0x8c, 0x8f, 0xb3, 0x55, - 0x69, 0x96, 0xc9, 0xec, 0x75, 0x1b, 0x54, 0xe9, 0xc7, 0xc5, 0xd6, 0x5c, - 0xe6, 0x22, 0xb3, 0x8f, 0x28, 0x40, 0xa7, 0x0a, 0xf4, 0x4d, 0x1e, 0x57, - 0x11, 0x29, 0xed, 0x68, 0x2e, 0x03, 0x35, 0x01, 0x95, 0x56, 0x9f, 0xb5, - 0xca, 0x2e, 0x91, 0x66, 0x97, 0x2c, 0x45, 0xeb, 0x8b, 0xeb, 0x26, 0x53, - 0xcb, 0x3f, 0x99, 0x13, 0x19, 0x6e, 0xa5, 0xb9, 0x72, 0x20, 0xae, 0xe7, - 0x01, 0xf2, 0x89, 0x42, 0x16, 0x3d, 0x4a, 0x3e, 0x25, 0x00, 0xe5, 0x4d, - 0x9a, 0xd9, 0x15, 0xaa, 0x96, 0xc5, 0xaa, 0x66, 0x18, 0x18, 0xb4, 0xae, - 0x35, 0x0c, 0xa9, 0xc8, 0x19, 0xd9, 0x57, 0x76, 0xf2, 0x39, 0x07, 0x7e, - 0x5a, 0x5a, 0x6a, 0xdf, 0xbb, 0xb5, 0x30, 0xea, 0x39, 0x79, 0x95, 0xb1, - 0x7a, 0xbd, 0x3d, 0x63, 0x5b, 0xdd, 0x9b, 0x4a, 0x9d, 0xcc, 0xdc, 0x3e, - 0x51, 0x2b, 0x52, 0x84, 0x04, 0xf6, 0x26, 0xb6, 0x70, 0x9c, 0x70, 0x7d, - 0xce, 0x96, 0xbc, 0x27, 0xe5, 0x8e, 0x7f, 0x3f, 0xff, 0x06, 0xec, 0xbb, - 0xb3, 0xd8, 0xc1, 0x1d, 0xd5, 0xc2, 0x0c, 0x0d, 0x40, 0x02, 0x26, 0xc4, - 0x7e, 0x7e, 0x81, 0xd9, 0x1f, 0x16, 0x8b, 0x58, 0x2c, 0xa8, 0xa3, 0x06, - 0x32, 0x8e, 0xb8, 0xd7, 0xe0, 0x60, 0x79, 0x9e, 0x16, 0x0f, 0x61, 0xae, - 0xed, 0xe9, 0x43, 0xdb, 0xcf, 0xbf, 0xbb, 0xfd, 0xec, 0xc9, 0xe3, 0xe7, - 0x9f, 0x0d, 0x57, 0x8c, 0xc1, 0x11, 0x55, 0x98, 0xe9, 0x9e, 0x4f, 0x8b, - 0x08, 0xd0, 0x23, 0x0e, 0xe3, 0xcc, 0x89, 0x08, 0x72, 0xf6, 0x8d, 0xc0, - 0x30, 0x19, 0x33, 0x0e, 0xaf, 0x53, 0x00, 0x55, 0xc2, 0x5d, 0x8c, 0x38, - 0xb5, 0xef, 0xbe, 0x50, 0x2d, 0x0e, 0x80, 0xdc, 0x2f, 0x4f, 0x74, 0x1c, - 0x42, 0xd8, 0x33, 0x51, 0x10, 0x5d, 0x43, 0xaf, 0x4e, 0x7e, 0x09, 0xf9, - 0x81, 0x52, 0xc0, 0xe5, 0x39, 0x8c, 0x05, 0x61, 0x0a, 0xf3, 0xe5, 0x8e, - 0xed, 0x39, 0x22, 0xe1, 0x88, 0x91, 0x86, 0xce, 0x21, 0xec, 0xae, 0x25, - 0x40, 0x68, 0xa2, 0xfd, 0xa8, 0x8c, 0x29, 0xf0, 0x50, 0x10, 0x98, 0x84, - 0x6b, 0x99, 0x2c, 0x34, 0x78, 0x9c, 0x06, 0x06, 0x2c, 0xff, 0xfc, 0x7b, - 0xff, 0xfc, 0x3b, 0x27, 0x58, 0x9f, 0x36, 0x84, 0xa7, 0x89, 0x24, 0xc5, - 0xae, 0xfd, 0x28, 0x90, 0x68, 0xdc, 0x71, 0x9c, 0x09, 0x80, 0xe1, 0x6b, - 0xc8, 0xca, 0x54, 0xc5, 0x27, 0xe1, 0x44, 0x13, 0x61, 0x0f, 0x8e, 0x92, - 0x7b, 0xb4, 0x3a, 0xd9, 0x32, 0xf3, 0xe7, 0xa4, 0xa2, 0x19, 0x14, 0x7b, - 0x87, 0x7c, 0xff, 0xc4, 0xfb, 0xb4, 0x63, 0xbd, 0x03, 0xb1, 0xf0, 0x9f, - 0x3f, 0xe7, 0x70, 0xbb, 0xc1, 0xc4, 0x5a, 0x29, 0x4d, 0x14, 0x6b, 0x82, - 0xd2, 0xe6, 0x92, 0x59, 0xaf, 0x9c, 0x1a, 0xd3, 0x13, 0x6d, 0xc8, 0x69, - 0x4d, 0xf5, 0xa9, 0xfd, 0x66, 0x27, 0x37, 0x6a, 0xd1, 0x44, 0xea, 0x9d, - 0x03, 0x9e, 0xfe, 0xfd, 0x0d, 0x66, 0x82, 0x83, 0x5c, 0x76, 0x0e, 0x4b, - 0xfa, 0xa3, 0x49, 0xbc, 0xd0, 0xb0, 0xf0, 0x9c, 0x43, 0xa6, 0x6b, 0x1b, - 0xc4, 0x51, 0x3b, 0xe7, 0x0f, 0xcf, 0x5f, 0xc0, 0x40, 0x7c, 0x49, 0x19, - 0x2e, 0xa3, 0xf9, 0x45, 0xca, 0xf9, 0x4c, 0x00, 0x85, 0xc4, 0xfa, 0xb1, - 0x2d, 0x32, 0x38, 0xf9, 0xb5, 0xdb, 0x40, 0x09, 0x80, 0xf6, 0xe9, 0x28, - 0xa3, 0xbe, 0x13, 0x1b, 0x40, 0xdc, 0x35, 0x46, 0xee, 0xe7, 0xb0, 0x62, - 0xd5, 0xdf, 0xe8, 0x36, 0x8c, 0x4f, 0xda, 0x6f, 0x78, 0x6f, 0x87, 0xbf, - 0xbb, 0x42, 0xb8, 0x6f, 0x11, 0xc1, 0x37, 0x39, 0xdd, 0x0c, 0xad, 0x03, - 0x1b, 0x98, 0x45, 0x14, 0xf0, 0x37, 0x17, 0xdb, 0xce, 0xc1, 0xbe, 0x62, - 0x4e, 0x0d, 0x3d, 0xd6, 0x9f, 0x33, 0x68, 0xb1, 0xe1, 0x2c, 0x8b, 0xa1, - 0x27, 0xa6, 0xfd, 0x61, 0xb0, 0xcf, 0x04, 0xa8, 0xd6, 0xf4, 0x2c, 0xf8, - 0x1e, 0x18, 0x03, 0x96, 0x49, 0x34, 0xd5, 0xd2, 0x9e, 0x61, 0x1c, 0x69, - 0x30, 0xe0, 0x61, 0x7a, 0x64, 0x39, 0x9b, 0xe0, 0x0b, 0x67, 0x7c, 0x44, - 0x38, 0x5e, 0x2f, 0x30, 0x57, 0x18, 0x20, 0x88, 0x3b, 0x66, 0x82, 0x11, - 0x3e, 0x35, 0x33, 0x22, 0x66, 0x0a, 0xe3, 0xea, 0xd0, 0xbf, 0x08, 0xc8, - 0xd9, 0x67, 0x87, 0x9a, 0x4a, 0x15, 0xa3, 0xc8, 0x0a, 0xa2, 0x8b, 0x33, - 0xc8, 0x64, 0x40, 0xde, 0x62, 0x3f, 0x95, 0x99, 0x09, 0x7f, 0x05, 0x17, - 0x24, 0x23, 0x00, 0xf9, 0x86, 0x27, 0x56, 0x82, 0x0e, 0x52, 0x6c, 0x62, - 0x18, 0xce, 0x86, 0xfc, 0xc3, 0xd4, 0x36, 0x77, 0x84, 0x86, 0x3c, 0x4d, - 0xb4, 0x54, 0x84, 0xc6, 0xde, 0x31, 0x4e, 0xed, 0x08, 0xb2, 0x7f, 0x17, - 0xf4, 0x34, 0xde, 0x22, 0x0c, 0x38, 0xb5, 0xb4, 0x31, 0x1c, 0x2d, 0x90, - 0xbd, 0xa6, 0xbd, 0x33, 0xa2, 0x74, 0x60, 0xda, 0xde, 0x08, 0x2a, 0xe7, - 0x99, 0x6e, 0xf6, 0x7f, 0xe0, 0xcf, 0xb5, 0x14, 0x52, 0x07, 0x28, 0xd5, - 0xe9, 0x21, 0x66, 0x1c, 0x60, 0x3c, 0x69, 0x58, 0x1b, 0x0c, 0x1a, 0x69, - 0xcc, 0x24, 0xb2, 0xc2, 0x32, 0x04, 0x6a, 0x38, 0x6f, 0xab, 0x87, 0xf1, - 0xeb, 0xb9, 0x64, 0xd0, 0x12, 0x14, 0x23, 0x92, 0x33, 0xf1, 0x05, 0xea, - 0x0f, 0x39, 0xb1, 0x9c, 0x72, 0x4a, 0x74, 0x3a, 0xad, 0xcf, 0x1e, 0x35, - 0x24, 0x21, 0x54, 0x09, 0x01, 0x62, 0x95, 0x05, 0x72, 0x67, 0xeb, 0x0f, - 0x95, 0x05, 0xfe, 0x5c, 0x54, 0x06, 0x9e, 0x8b, 0x5a, 0xe1, 0x33, 0x1b, - 0x86, 0xcc, 0x8f, 0x46, 0xd0, 0x01, 0xac, 0x85, 0x50, 0xe9, 0x37, 0xe8, - 0x59, 0x15, 0x71, 0x36, 0xe1, 0xc8, 0x87, 0x94, 0xd6, 0x9d, 0x3b, 0x72, - 0x6e, 0xbf, 0xdf, 0xcd, 0x05, 0x14, 0x7d, 0xc0, 0x0c, 0x34, 0x38, 0x5f, - 0x72, 0xee, 0xd0, 0x25, 0x3b, 0xe1, 0xa1, 0xc5, 0xf7, 0xf3, 0xf3, 0x19, - 0x4c, 0x2e, 0xc4, 0x21, 0xe9, 0x60, 0xf0, 0x3e, 0x6c, 0xfb, 0x0c, 0xfa, - 0x67, 0xc6, 0xe3, 0x11, 0x41, 0xb8, 0xb0, 0xf3, 0x19, 0xa2, 0x8d, 0xcd, - 0xd6, 0x1d, 0x20, 0xc3, 0xe5, 0xdf, 0xf0, 0xa4, 0xb9, 0xc1, 0xdc, 0x57, - 0x6b, 0x23, 0x3e, 0x56, 0x35, 0xad, 0x7e, 0x82, 0x46, 0x99, 0xb3, 0xd5, - 0xf5, 0x0a, 0xe2, 0xcf, 0x47, 0x83, 0xf7, 0xcf, 0xe0, 0x4a, 0xb4, 0x3f, - 0xec, 0x7c, 0xac, 0x69, 0xb3, 0x38, 0x18, 0xe6, 0x3e, 0xee, 0x0f, 0x36, - 0xf7, 0x59, 0xcf, 0x9b, 0x80, 0xac, 0xea, 0xe2, 0x23, 0xbc, 0x8b, 0x17, - 0xdf, 0xcc, 0xe1, 0x06, 0x8f, 0xf3, 0x2f, 0x8c, 0x0f, 0x0f, 0xdb, 0x7d, - 0xb0, 0x95, 0x68, 0x1f, 0x01, 0xfe, 0xd9, 0xff, 0xb4, 0xfe, 0xef, 0x83, - 0xf5, 0x3a, 0x18, 0x26, 0xd7, 0x89, 0x58, 0x7e, 0x10, 0xf8, 0x48, 0xef, - 0xc3, 0x7e, 0xed, 0xc3, 0x73, 0xcb, 0x34, 0x29, 0xde, 0x10, 0xe9, 0x69, - 0x1e, 0x58, 0x33, 0x0c, 0x59, 0x7c, 0xc3, 0x1d, 0xaa, 0xf2, 0x2c, 0x3c, - 0x01, 0x36, 0x8f, 0x34, 0xd0, 0x37, 0x0b, 0x4e, 0xe0, 0xb7, 0x4a, 0x2c, - 0xc3, 0x6b, 0xdd, 0x0e, 0xb8, 0x9a, 0x71, 0x7a, 0xee, 0x03, 0x35, 0x14, - 0x30, 0xd1, 0xd9, 0x7d, 0x82, 0xf4, 0xd7, 0x7c, 0x82, 0x75, 0x05, 0x70, - 0xba, 0xf0, 0x46, 0x00, 0x03, 0x39, 0xd1, 0xa0, 0xcf, 0x99, 0xf2, 0xc8, - 0x07, 0x73, 0xab, 0x9f, 0xee, 0xbe, 0x90, 0x0f, 0xd4, 0x79, 0x7c, 0xc2, - 0x6e, 0xcd, 0xc7, 0xcf, 0xe7, 0x69, 0xee, 0xe3, 0x8d, 0x4a, 0x8c, 0x09, - 0xcc, 0x29, 0x56, 0xdf, 0x3e, 0x71, 0xfc, 0x98, 0x6c, 0x2f, 0x52, 0xa6, - 0xf9, 0x0a, 0x67, 0x1f, 0x8c, 0x48, 0x28, 0x4c, 0x33, 0x5b, 0xa5, 0xfb, - 0x44, 0xcf, 0xa5, 0x38, 0xdf, 0x69, 0xa0, 0xc9, 0x04, 0x8d, 0x4e, 0xff, - 0x24, 0xc7, 0x00, 0x7a, 0x9f, 0xd6, 0x20, 0x3d, 0x2b, 0xcc, 0x09, 0xfc, - 0x8b, 0x3c, 0x9d, 0x80, 0x46, 0x1a, 0x83, 0xbc, 0x36, 0x8a, 0xa0, 0xce, - 0xff, 0x21, 0x8b, 0xad, 0x3b, 0xde, 0x11, 0x9e, 0xb9, 0x79, 0x0d, 0x91, - 0x02, 0x04, 0x3b, 0x69, 0x65, 0xb5, 0xe0, 0xbf, 0xf0, 0x03, 0xf9, 0x8e, - 0x4d, 0xab, 0x27, 0x11, 0x43, 0x0c, 0xa2, 0x60, 0x02, 0xf1, 0x55, 0x02, - 0x94, 0x1b, 0xa2, 0x13, 0x21, 0xd8, 0x14, 0x3c, 0x8e, 0xe8, 0x90, 0x88, - 0x44, 0x78, 0x9d, 0x4a, 0xe0, 0x8c, 0x7e, 0x98, 0x19, 0x56, 0x1e, 0xcc, - 0x6b, 0x0b, 0x5d, 0x1a, 0xf0, 0x0f, 0x34, 0x15, 0x4a, 0xd8, 0x9b, 0x68, - 0x63, 0xe9, 0x92, 0x68, 0x1d, 0x36, 0x6e, 0x4b, 0xfe, 0x24, 0x2c, 0x40, - 0x7c, 0x12, 0xef, 0x9c, 0x31, 0x6a, 0xed, 0x83, 0x4c, 0x30, 0x7e, 0xae, - 0xff, 0x03, 0x65, 0x69, 0x30, 0x69, 0x17, 0x38, 0x1d, 0xf9, 0xd1, 0x5c, - 0x8a, 0x11, 0x54, 0xc0, 0x4f, 0xc2, 0x37, 0x21, 0x2a, 0xbd, 0x0a, 0x8d, - 0xdc, 0x06, 0x47, 0x06, 0xad, 0x88, 0x81, 0x31, 0xa4, 0xb1, 0x50, 0x4f, - 0xe3, 0x04, 0xe9, 0x89, 0xc1, 0x81, 0x95, 0xf6, 0x4e, 0x08, 0x2b, 0x3f, - 0x52, 0xe7, 0xd2, 0x5a, 0xca, 0x0f, 0x06, 0xbe, 0x30, 0x38, 0x5f, 0x2f, - 0xa0, 0x8f, 0xf8, 0xfe, 0x7a, 0x21, 0xda, 0xe8, 0x90, 0x1a, 0x40, 0xca, - 0xc8, 0x67, 0x07, 0xac, 0x87, 0x89, 0x91, 0x4a, 0x92, 0xf2, 0x0c, 0x48, - 0x4e, 0x73, 0xe0, 0x2e, 0x5c, 0x4e, 0x13, 0xc2, 0x16, 0x62, 0xa2, 0x73, - 0x93, 0x3b, 0x6b, 0x7a, 0xfe, 0x36, 0xf9, 0x82, 0x95, 0x58, 0xa6, 0x3a, - 0xef, 0xba, 0x7a, 0x09, 0x24, 0xea, 0xad, 0xda, 0x2b, 0xc7, 0xb7, 0xfc, - 0x74, 0xe2, 0x07, 0x7a, 0x43, 0xef, 0xcf, 0x19, 0x67, 0xb5, 0x80, 0x21, - 0x03, 0x91, 0xfe, 0x43, 0xbd, 0x49, 0x99, 0x0d, 0xd8, 0x87, 0xae, 0x8d, - 0x9c, 0x90, 0x2d, 0x3f, 0xd6, 0xe2, 0x3d, 0xa9, 0xae, 0x8b, 0x08, 0x6d, - 0xfa, 0x67, 0x1f, 0x3f, 0xd8, 0x60, 0xfc, 0xf3, 0x79, 0x47, 0x6d, 0x2f, - 0xf8, 0x70, 0xfa, 0x2f, 0x33, 0xc7, 0xce, 0xd1, 0x84, 0x18, 0x0b, 0x2e, - 0x23, 0x78, 0x8e, 0x10, 0xbd, 0x40, 0x3c, 0x02, 0x86, 0xca, 0x03, 0x0f, - 0x9c, 0xa1, 0xad, 0x10, 0x64, 0xf3, 0xf9, 0xc2, 0x52, 0xbe, 0x11, 0x88, - 0xba, 0x85, 0x06, 0xbd, 0xf4, 0xf2, 0x34, 0x06, 0x38, 0x8b, 0x95, 0xa4, - 0x0f, 0x20, 0xd8, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x36, - 0x58, 0xb0, 0x6a, 0xb5, 0x09, 0x00, - }, - "words/dict/nouns.txt", - ) -} - -// Asset loads and returns the asset for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func Asset(name string) ([]byte, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - return f() - } - return nil, fmt.Errorf("Asset %s not found", name) -} - -// AssetNames returns the names of the assets. -func AssetNames() []string { - names := make([]string, 0, len(_bindata)) - for name := range _bindata { - names = append(names, name) - } - return names -} - -// _bindata is a table, holding each asset generator, mapped to its name. -var _bindata = map[string]func() ([]byte, error){ - "words/dict/adjectives.txt": words_dict_adjectives_txt, - "words/dict/nouns.txt": words_dict_nouns_txt, -} - -// AssetDir returns the file names below a certain -// directory embedded in the file by go-bindata. -// For example if you run go-bindata on data/... and data contains the -// following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png -// then AssetDir("data") would return []string{"foo.txt", "img"} -// AssetDir("data/img") would return []string{"a.png", "b.png"} -// AssetDir("foo.txt") and AssetDir("notexist") would return an error -// AssetDir("") will return []string{"data"}. -func AssetDir(name string) ([]string, error) { - node := _bintree - if len(name) != 0 { - cannonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(cannonicalName, "/") - for _, p := range pathList { - node = node.Children[p] - if node == nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - } - } - if node.Func != nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - rv := make([]string, 0, len(node.Children)) - for name := range node.Children { - rv = append(rv, name) - } - return rv, nil -} - -type _bintree_t struct { - Func func() ([]byte, error) - Children map[string]*_bintree_t -} - -var _bintree = &_bintree_t{nil, map[string]*_bintree_t{ - "words": &_bintree_t{nil, map[string]*_bintree_t{ - "dict": &_bintree_t{nil, map[string]*_bintree_t{ - "adjectives.txt": &_bintree_t{words_dict_adjectives_txt, map[string]*_bintree_t{}}, - "nouns.txt": &_bintree_t{words_dict_nouns_txt, map[string]*_bintree_t{}}, - }}, - }}, -}} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils.go b/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils.go deleted file mode 100644 index 17ef1fb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils.go +++ /dev/null @@ -1,91 +0,0 @@ -package fileutils - -import ( - "io" - "io/ioutil" - "os" - "path" - "path/filepath" -) - -func Open(path string) (file *os.File, err error) { - err = os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm) - if err != nil { - return - } - - return os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) -} - -func Create(path string) (file *os.File, err error) { - err = os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm) - if err != nil { - return - } - - return os.Create(path) -} - -func CopyPathToPath(fromPath, toPath string) (err error) { - srcFileInfo, err := os.Stat(fromPath) - if err != nil { - return err - } - - if srcFileInfo.IsDir() { - err = os.MkdirAll(toPath, srcFileInfo.Mode()) - if err != nil { - return err - } - - files, err := ioutil.ReadDir(fromPath) - if err != nil { - return err - } - - for _, file := range files { - err = CopyPathToPath(path.Join(fromPath, file.Name()), path.Join(toPath, file.Name())) - if err != nil { - return err - } - } - } else { - var dst *os.File - dst, err = Create(toPath) - if err != nil { - return err - } - defer dst.Close() - - dst.Chmod(srcFileInfo.Mode()) - - err = CopyPathToWriter(fromPath, dst) - } - return err -} - -func CopyPathToWriter(originalFilePath string, targetWriter io.Writer) (err error) { - originalFile, err := os.Open(originalFilePath) - if err != nil { - return - } - defer originalFile.Close() - - _, err = io.Copy(targetWriter, originalFile) - if err != nil { - return - } - - return -} - -func CopyReaderToPath(src io.Reader, targetPath string) (err error) { - destFile, err := Create(targetPath) - if err != nil { - return - } - defer destFile.Close() - - _, err = io.Copy(destFile, src) - return -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_notwin.go b/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_notwin.go deleted file mode 100644 index 13bd3ab..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_notwin.go +++ /dev/null @@ -1,13 +0,0 @@ -// - -// +build !windows - -package fileutils - -import ( - "os" -) - -func IsRegular(f os.FileInfo) bool { - return f.Mode().IsRegular() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_test.go deleted file mode 100644 index 6cd6174..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_test.go +++ /dev/null @@ -1,193 +0,0 @@ -package fileutils_test - -import ( - "io/ioutil" - "os" - "path" - "path/filepath" - - "github.com/cloudfoundry/gofileutils/fileutils" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Fileutils File", func() { - var fixturePath = filepath.Clean("../fixtures/fileutils/supervirus.zsh") - var fixtureBytes []byte - - BeforeEach(func() { - var err error - fixtureBytes, err = ioutil.ReadFile(fixturePath) - Expect(err).NotTo(HaveOccurred()) - }) - - Describe("Open", func() { - It("opens an existing file", func() { - fd, err := fileutils.Open(fixturePath) - Expect(err).NotTo(HaveOccurred()) - - fileBytes, err := ioutil.ReadAll(fd) - Expect(err).NotTo(HaveOccurred()) - fd.Close() - - Expect(fileBytes).To(Equal(fixtureBytes)) - }) - - It("creates a non-existing file and all intermediary directories", func() { - filePath := fileutils.TempPath("open_test") - - fd, err := fileutils.Open(filePath) - Expect(err).NotTo(HaveOccurred()) - - _, err = fd.WriteString("Never Gonna Give You Up") - Expect(err).NotTo(HaveOccurred()) - fd.Close() - - fileBytes, err := ioutil.ReadFile(filePath) - Expect(err).NotTo(HaveOccurred()) - Expect(string(fileBytes)).To(Equal("Never Gonna Give You Up")) - }) - }) - - Describe("Create", func() { - It("truncates an existing file", func() { - tmpFile, err := ioutil.TempFile("", "create_test") - Expect(err).NotTo(HaveOccurred()) - _, err = tmpFile.WriteString("Never Gonna Give You Up") - Expect(err).NotTo(HaveOccurred()) - filePath := tmpFile.Name() - tmpFile.Close() - - fd, err := fileutils.Create(filePath) - Expect(err).NotTo(HaveOccurred()) - - fileBytes, err := ioutil.ReadAll(fd) - Expect(err).NotTo(HaveOccurred()) - Expect(len(fileBytes)).To(Equal(0)) - fd.Close() - }) - - It("creates a non-existing file and all intermediary directories", func() { - filePath := fileutils.TempPath("create_test") - - fd, err := fileutils.Create(filePath) - Expect(err).NotTo(HaveOccurred()) - - _, err = fd.WriteString("Never Gonna Let You Down") - Expect(err).NotTo(HaveOccurred()) - fd.Close() - - fileBytes, err := ioutil.ReadFile(filePath) - Expect(err).NotTo(HaveOccurred()) - Expect(string(fileBytes)).To(Equal("Never Gonna Let You Down")) - }) - }) - - Describe("CopyPathToPath", func() { - var destPath string - - BeforeEach(func() { - destPath = fileutils.TempPath("copy_test") - }) - - Describe("when the source is a file", func() { - BeforeEach(func() { - err := fileutils.CopyPathToPath(fixturePath, destPath) - Expect(err).NotTo(HaveOccurred()) - }) - - It("copies the file contents", func() { - fileBytes, err := ioutil.ReadFile(destPath) - Expect(err).NotTo(HaveOccurred()) - - fixtureBytes, err := ioutil.ReadFile(fixturePath) - Expect(err).NotTo(HaveOccurred()) - Expect(fileBytes).To(Equal(fixtureBytes)) - }) - - It("preserves the file mode", func() { - fileInfo, err := os.Stat(destPath) - Expect(err).NotTo(HaveOccurred()) - - expectedFileInfo, err := os.Stat(fixturePath) - Expect(err).NotTo(HaveOccurred()) - - Expect(fileInfo.Mode()).To(Equal(expectedFileInfo.Mode())) - }) - }) - - Describe("when the source is a directory", func() { - dirPath := filepath.Join(filepath.Dir(fixturePath), "some-dir") - - BeforeEach(func() { - destPath = filepath.Join(destPath, "some-other-dir") - err := fileutils.CopyPathToPath(dirPath, destPath) - Expect(err).NotTo(HaveOccurred()) - }) - - It("creates a directory at the destination path", func() { - fileInfo, err := os.Stat(destPath) - Expect(err).NotTo(HaveOccurred()) - Expect(fileInfo.IsDir()).To(BeTrue()) - }) - - It("copies all of the files from the src directory", func() { - fileInfo, err := os.Stat(path.Join(destPath, "some-file")) - Expect(err).NotTo(HaveOccurred()) - Expect(fileInfo.IsDir()).To(BeFalse()) - }) - - It("preserves the directory's mode", func() { - fileInfo, err := os.Stat(destPath) - Expect(err).NotTo(HaveOccurred()) - - expectedFileInfo, err := os.Stat(dirPath) - Expect(err).NotTo(HaveOccurred()) - - Expect(fileInfo.Mode()).To(Equal(expectedFileInfo.Mode())) - }) - }) - }) - - Describe("CopyPathToWriter", func() { - var destPath string - - BeforeEach(func() { - destFile, err := ioutil.TempFile("", "copy_test") - Expect(err).NotTo(HaveOccurred()) - defer destFile.Close() - - destPath = destFile.Name() - - err = fileutils.CopyPathToWriter(fixturePath, destFile) - Expect(err).NotTo(HaveOccurred()) - }) - - It("copies the file contents", func() { - fileBytes, err := ioutil.ReadFile(destPath) - Expect(err).NotTo(HaveOccurred()) - - Expect(fileBytes).To(Equal(fixtureBytes)) - }) - }) - - Describe("CopyReaderToPath", func() { - var destPath = fileutils.TempPath("copy_test") - - BeforeEach(func() { - fixtureReader, err := os.Open(fixturePath) - Expect(err).NotTo(HaveOccurred()) - defer fixtureReader.Close() - - err = fileutils.CopyReaderToPath(fixtureReader, destPath) - Expect(err).NotTo(HaveOccurred()) - }) - - It("copies the file contents", func() { - fileBytes, err := ioutil.ReadFile(destPath) - Expect(err).NotTo(HaveOccurred()) - - Expect(fileBytes).To(Equal(fixtureBytes)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_windows.go b/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_windows.go deleted file mode 100644 index a19d75b..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/file_utils_windows.go +++ /dev/null @@ -1,20 +0,0 @@ -package fileutils - -import ( - "os" - "syscall" -) - -const ( - FILE_ATTRIBUTE_REPARSE_POINT = 0x0400 -) - -func IsRegular(f os.FileInfo) bool { - if fileattrs, ok := f.Sys().(*syscall.Win32FileAttributeData); ok { - println("FILEATTRS", f.Name(), fileattrs.FileAttributes) - if fileattrs.FileAttributes&FILE_ATTRIBUTE_REPARSE_POINT != 0 { - return false - } - } - return f.Mode().IsRegular() -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/fileutils_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/fileutils_suite_test.go deleted file mode 100644 index b2400c9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/fileutils_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package fileutils_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestApp(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Fileutils Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/temp_utils.go b/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/temp_utils.go deleted file mode 100644 index 5ae91bf..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/temp_utils.go +++ /dev/null @@ -1,61 +0,0 @@ -package fileutils - -import ( - "io/ioutil" - "os" - "path/filepath" - "strconv" - "sync" - "time" -) - -func TempDir(namePrefix string, cb func(tmpDir string, err error)) { - tmpDir, err := ioutil.TempDir("", namePrefix) - - defer func() { - os.RemoveAll(tmpDir) - }() - - cb(tmpDir, err) -} - -func TempFile(namePrefix string, cb func(tmpFile *os.File, err error)) { - tmpFile, err := ioutil.TempFile("", namePrefix) - - defer func() { - tmpFile.Close() - os.Remove(tmpFile.Name()) - }() - - cb(tmpFile, err) -} - -// TempPath generates a random file path in tmp, but does -// NOT create the actual directory -func TempPath(namePrefix string) string { - return filepath.Join(os.TempDir(), namePrefix, nextSuffix()) -} - -// copied from http://golang.org/src/pkg/io/ioutil/tempfile.go -// Random number state. -// We generate random temporary file names so that there's a good -// chance the file doesn't exist yet - keeps the number of tries in -// TempFile to a minimum. -var rand uint32 -var randmu sync.Mutex - -func reseed() uint32 { - return uint32(time.Now().UnixNano() + int64(os.Getpid())) -} - -func nextSuffix() string { - randmu.Lock() - r := rand - if r == 0 { - r = reseed() - } - r = r*1664525 + 1013904223 // constants from Numerical Recipes - rand = r - randmu.Unlock() - return strconv.Itoa(int(1e9 + r%1e9))[1:] -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/.gitignore b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/.gitignore deleted file mode 100644 index 357f028..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.coverprofile -.idea diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/.travis.yml b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/.travis.yml deleted file mode 100644 index 19cc327..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: go -notifications: - email: - - cf-lamb@pivotallabs.com - -before_install: -- 'if [[ "${TRAVIS_GO_VERSION}" =~ 1.[2-3] ]]; then go get code.google.com/p/go.tools/cmd/cover; else go get golang.org/x/tools/cmd/cover; fi' -- go get github.com/mattn/goveralls -- go get github.com/onsi/ginkgo/ginkgo - -after_success: -- 'echo "mode: set" > all.coverprofile' -- 'find . -name "*.coverprofile" -exec grep -v mode: {} >> all.coverprofile \;' -- PATH=$HOME/gopath/bin:$PATH goveralls -coverprofile=all.coverprofile -repotoken=$COVERALLS_TOKEN - -install: -- go get -d -v -t ./... - -script: PATH=$HOME/gopath/bin:$PATH ginkgo --race --randomizeAllSpecs --failOnPending --skipMeasurements --cover - -go: -- 1.2 -- 1.3 -- 1.4 -- tip - -matrix: - allow_failures: - - go: 1.3 - - go: tip - -env: - global: - secure: B8pgLMTc+VaGra0bpSOvNLkbxADjrsIylF6wCNQNnLRzUeqtfnJy+M1nz8y4MEalc6hxj5iuwfn67K5AQo8vTkAzE/n+jxxL2pKa0VZS0yLiYxMoWdcOhu7yWNRY6u9t2P0bpJ9zrLN2AjKo+V2FtadNMK0O3yFhEmFzNDEBQ1g= diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/LICENSE b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/LICENSE deleted file mode 100644 index e661c8d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/LICENSE +++ /dev/null @@ -1,295 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -======================================================================= - -cf-loggregatorlib - -cf-loggregatorlib : includes a number of subcomponents with -separate copyright notices and license terms. The product that -includes this file does not necessarily use all the open source -subcomponents referred to below. Your use of the source -code for the these subcomponents is subject to the terms and -conditions of the following license. - - -SECTION 1: BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES - - >>> gogoprotobuf-402a137c079e420e1f2fd3fb11ec6789a203de58 - >>> testify-f3d115a59739ad0ffb3b132c74894bb100228e52 - - - - ---------------- SECTION 1: BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES ---------- - -BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES are applicable to the following component(s). - - ->>> gogoprotobuf-402a137c079e420e1f2fd3fb11ec6789a203de58 - -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -http://code.google.com/p/goprotobuf/ - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ->>> testify-f3d115a59739ad0ffb3b132c74894bb100228e52 - -Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell - -Please consider promoting this project if you find it useful. - -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. - - - -=========================================================================== -To the extent any open source components are licensed under the -GPL and/or LGPL, or other similar licenses that require the -source code and/or modifications to source code to be made -available (as would be noted above), you may obtain a copy of -the source code corresponding to the binaries for such open -source components and modifications thereto, if any, (the -"Source Files"), by downloading the Source Files from VMware's website at -http://www.vmware.com/download/open_source.html, or by sending a request, -with your name and address to: Pivotal Software Inc, 1900 S. Norfolk Street #125, -San Mateo, CA 94403, Attention: General Counsel. All such requests should clearly -specify: OPEN SOURCE FILES REQUEST, -Attention General Counsel. Pivotal Software Inc, shall mail a copy of the -Source Files to you on a CD or equivalent physical medium. This -offer to obtain a copy of the Source Files is valid for three -years from the date you acquired this Software product. -Alternatively, the Source Files may accompany the Pivotal Software Inc, product. - -[CFLOGGREGATORLIB11152013SS120413] diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/README.md b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/README.md deleted file mode 100644 index 013ea0c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/README.md +++ /dev/null @@ -1,40 +0,0 @@ -#loggregator_consumer - -[![Build Status](https://travis-ci.org/cloudfoundry/loggregator_consumer.svg?branch=master)](https://travis-ci.org/cloudfoundry/loggregator_consumer) [![GoDoc](https://godoc.org/github.com/cloudfoundry/loggregator_consumer?status.png)](https://godoc.org/github.com/cloudfoundry/loggregator_consumer) [![Coverage Status](https://coveralls.io/repos/cloudfoundry/loggregator_consumer/badge.png)](https://coveralls.io/r/cloudfoundry/loggregator_consumer) - -Loggregator consumer is a library that allows an application developer to set up -a connection to a loggregator server, and begin receiving log messages from it. -It includes the ability to tail logs as well as get the recent logs. - -#WARNING -This library does not work with Go 1.3 through 1.3.2, due to a bug in the standard libraries. - -Usage ------------------- -See the included sample application. In order to use the sample, you will have to export the following environment variables: - -* CF_ACCESS_TOKEN - You can get this value from reading the AccessToken looking at your cf configuration file (`$ cat ~/.cf/config.json`). Example: - - ``` -export CF_ACCESS_TOKEN="bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI3YmM2MzllOC0wZGM0LTQ4YzItYTAzYS0xYjkyYzRhMWFlZTIiLCJzdWIiOiI5YTc5MTVkOS04MDc1LTQ3OTUtOTBmOS02MGM0MTU0YTJlMDkiLCJzY29wZSI6WyJzY2ltLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLmFkbWluIiwicGFzc3dvcmQud3JpdGUiLCJzY2ltLndyaXRlIiwib3BlbmlkIiwiY2xvdWRfY29udHJvbGxlci53cml0ZSIsImNsb3VkX2NvbnRyb2xsZXIucmVhZCJdLCJjbGllbnRfaWQiOiJjZiIsImNpZCI6ImNmIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjlhNzkxNWQ5LTgwNzUtNDc5NS05MGY5LTYwYzQxNTRhMmUwOSIsInVzZXJfbmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbiIsImlhdCI6MTQwNDg0NzU3NywiZXhwIjoxNDA0ODQ4MTc3LCJpc3MiOiJodHRwczovL3VhYS4xMC4yNDQuMC4zNC54aXAuaW8vb2F1dGgvdG9rZW4iLCJhdWQiOlsic2NpbSIsIm9wZW5pZCIsImNsb3VkX2NvbnRyb2xsZXIiLCJwYXNzd29yZCJdfQ.mAaOJthCotW763lf9fysygqdES_Mz1KFQ3HneKbwY4VJx-ARuxxiLh8l_8Srx7NJBwGlyEtfYOCBcIdvyeDCiQ0wT78Zw7ZJYFjnJ5-ZkDy5NbMqHbImDFkHRnPzKFjJHip39jyjAZpkFcrZ8_pUD8XxZraqJ4zEf6LFdAHKFBM" -``` -* APP_GUID - You can get this value from running `$ CF_TRACE=true cf app dora` and then extracting the app guid from the request URL. Example: - -``` -export APP_GUID=55fdb274-d6c9-4b8c-9b1f-9b7e7f3a346c -``` - -Then you can run the sample app like this: - -``` -export GOPATH=`pwd` -export PATH=$PATH:$GOPATH/bin -go get github.com/cloudfoundry/loggregator_consumer/sample_consumer -sample_consumer -``` - -Development ------------------ - -Use `go get -d -v -t ./... && ginkgo --race --randomizeAllSpecs --failOnPending --skipMeasurements --cover` to -run the tests. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer.go deleted file mode 100644 index 1a02150..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer.go +++ /dev/null @@ -1,412 +0,0 @@ -// Package loggregator_consumer provides a simple, channel-based API for clients to communicate with -// loggregator servers. -package loggregator_consumer - -import ( - "bufio" - "bytes" - "crypto/tls" - "errors" - "fmt" - "github.com/cloudfoundry/loggregatorlib/logmessage" - noaa_errors "github.com/cloudfoundry/noaa/errors" - "github.com/gogo/protobuf/proto" - "github.com/gorilla/websocket" - "io/ioutil" - "mime/multipart" - "net" - "net/http" - "net/url" - "regexp" - "sort" - "strings" - "time" -) - -var ( - // KeepAlive sets the interval between keep-alive messages sent by the client to loggregator. - KeepAlive = 25 * time.Second - boundaryRegexp = regexp.MustCompile("boundary=(.*)") - ErrNotFound = errors.New("/recent path not found or has issues") - ErrBadResponse = errors.New("bad server response") - ErrBadRequest = errors.New("bad client request") -) - -/* LoggregatorConsumer represents the actions that can be performed against a loggregator server. - */ -type LoggregatorConsumer interface { - - // Tail listens indefinitely for log messages. It returns two channels; the first is populated - // with log messages, while the second contains errors (e.g. from parsing messages). It returns - // immediately. Call Close() to terminate the connection when you are finished listening. - // - // Messages are presented in the order received from the loggregator server. Chronological or - // other ordering is not guaranteed. It is the responsibility of the consumer of these channels - // to provide any desired sorting mechanism. - Tail(appGuid string, authToken string) (<-chan *logmessage.LogMessage, error) - - // Recent connects to loggregator via its 'recent' endpoint and returns a slice of recent messages. - // It does not guarantee any order of the messages; they are in the order returned by loggregator. - // - // The SortRecent method is provided to sort the data returned by this method. - Recent(appGuid string, authToken string) ([]*logmessage.LogMessage, error) - - // Close terminates the websocket connection to loggregator. - Close() error - - // SetOnConnectCallback sets a callback function to be called with the websocket connection is established. - SetOnConnectCallback(func()) - - // SetDebugPrinter enables logging of the websocket handshake - SetDebugPrinter(DebugPrinter) -} - -type DebugPrinter interface { - Print(title, dump string) -} - -type nullDebugPrinter struct { -} - -func (nullDebugPrinter) Print(title, body string) { -} - -type consumer struct { - endpoint string - tlsConfig *tls.Config - ws *websocket.Conn - callback func() - proxy func(*http.Request) (*url.URL, error) - debugPrinter DebugPrinter -} - -/* New creates a new consumer to a loggregator endpoint. - */ -func New(endpoint string, tlsConfig *tls.Config, proxy func(*http.Request) (*url.URL, error)) LoggregatorConsumer { - return &consumer{endpoint: endpoint, tlsConfig: tlsConfig, proxy: proxy, debugPrinter: nullDebugPrinter{}} -} - -/* SetDebugPrinter enables logging of the websocket handshake - */ -func (cnsmr *consumer) SetDebugPrinter(debugPrinter DebugPrinter) { - cnsmr.debugPrinter = debugPrinter -} - -/* -Tail listens indefinitely for log messages. It returns two channels; the first is populated -with log messages, while the second contains errors (e.g. from parsing messages). It returns immediately. -Call Close() to terminate the connection when you are finished listening. - -Messages are presented in the order received from the loggregator server. Chronological or other ordering -is not guaranteed. It is the responsibility of the consumer of these channels to provide any desired sorting -mechanism. -*/ -func (cnsmr *consumer) Tail(appGuid string, authToken string) (<-chan *logmessage.LogMessage, error) { - incomingChan := make(chan *logmessage.LogMessage) - var err error - - tailPath := fmt.Sprintf("/tail/?app=%s", appGuid) - cnsmr.ws, err = cnsmr.establishWebsocketConnection(tailPath, authToken) - - if err == nil { - go cnsmr.sendKeepAlive(KeepAlive) - - go func() { - defer close(incomingChan) - cnsmr.listenForMessages(incomingChan) - }() - } - - return incomingChan, err -} - -/* -Recent connects to loggregator via its 'recent' http(s) endpoint and returns a slice of recent messages. -If the new http 'recent' endpoint isn't supported (ie you are connecting to an older loggregator server), -we will fallback to the old Websocket 'dump' endpoint. - -It does not guarantee any order of the messages; they are in the order returned by loggregator. - -The SortRecent method is provided to sort the data returned by this method. -*/ -func (cnsmr *consumer) Recent(appGuid string, authToken string) ([]*logmessage.LogMessage, error) { - messages, err := cnsmr.httpRecent(appGuid, authToken) - if err != ErrBadRequest { - return messages, err - } else { - return cnsmr.dump(appGuid, authToken) - } -} - -/* -httpRecent connects to loggregator via its 'recent' http(s) endpoint and returns a slice of recent messages. -It does not guarantee any order of the messages; they are in the order returned by loggregator. -*/ -func (cnsmr *consumer) httpRecent(appGuid string, authToken string) ([]*logmessage.LogMessage, error) { - endpointUrl, err := url.ParseRequestURI(cnsmr.endpoint) - if err != nil { - return nil, err - } - - scheme := "https" - - if endpointUrl.Scheme == "ws" { - scheme = "http" - } - - recentPath := fmt.Sprintf("%s://%s/recent?app=%s", scheme, endpointUrl.Host, appGuid) - transport := &http.Transport{Proxy: cnsmr.proxy, TLSClientConfig: cnsmr.tlsConfig} - client := &http.Client{Transport: transport} - - req, _ := http.NewRequest("GET", recentPath, nil) - req.Header.Set("Authorization", authToken) - - resp, err := client.Do(req) - if err != nil { - return nil, errors.New(fmt.Sprintf("Error dialing loggregator server: %s.\nPlease ask your Cloud Foundry Operator to check the platform configuration (loggregator endpoint is %s).", err.Error(), cnsmr.endpoint)) - } - defer resp.Body.Close() - if resp.StatusCode == http.StatusUnauthorized { - data, _ := ioutil.ReadAll(resp.Body) - return nil, noaa_errors.NewUnauthorizedError(string(data)) - } - - if resp.StatusCode == http.StatusBadRequest { - return nil, ErrBadRequest - } - - if resp.StatusCode != http.StatusOK { - return nil, ErrNotFound - } - - contentType := resp.Header.Get("Content-Type") - - if len(strings.TrimSpace(contentType)) == 0 { - return nil, ErrBadResponse - } - - matches := boundaryRegexp.FindStringSubmatch(contentType) - - if len(matches) != 2 || len(strings.TrimSpace(matches[1])) == 0 { - return nil, ErrBadResponse - } - - reader := multipart.NewReader(resp.Body, matches[1]) - - var buffer bytes.Buffer - messages := make([]*logmessage.LogMessage, 0, 200) - - for part, loopErr := reader.NextPart(); loopErr == nil; part, loopErr = reader.NextPart() { - buffer.Reset() - - msg := new(logmessage.LogMessage) - _, err := buffer.ReadFrom(part) - if err != nil { - break - } - proto.Unmarshal(buffer.Bytes(), msg) - messages = append(messages, msg) - } - - return messages, err -} - -/* -dump connects to loggregator via its 'dump' ws(s) endpoint and returns a slice of recent messages. It does not -guarantee any order of the messages; they are in the order returned by loggregator. - -The SortRecent method is provided to sort the data returned by this method. -*/ -func (cnsmr *consumer) dump(appGuid string, authToken string) ([]*logmessage.LogMessage, error) { - var err error - - dumpPath := fmt.Sprintf("/dump/?app=%s", appGuid) - cnsmr.ws, err = cnsmr.establishWebsocketConnection(dumpPath, authToken) - - if err != nil { - return nil, err - } - - messages := []*logmessage.LogMessage{} - messageChan := make(chan *logmessage.LogMessage) - - go func() { - err = cnsmr.listenForMessages(messageChan) - close(messageChan) - }() - -drainLoop: - for { - select { - case msg, ok := <-messageChan: - if !ok { - break drainLoop - } - - messages = append(messages, msg) - } - } - - return messages, nil -} - -/* Close terminates the websocket connection to loggregator. - */ -func (cnsmr *consumer) Close() error { - if cnsmr.ws == nil { - return errors.New("connection does not exist") - } - - return cnsmr.ws.Close() -} - -func (cnsmr *consumer) SetOnConnectCallback(cb func()) { - cnsmr.callback = cb -} - -/* -SortRecent sorts a slice of LogMessages by timestamp. The sort is stable, so -messages with the same timestamp are sorted in the order that they are received. - -The input slice is sorted; the return value is simply a pointer to the same slice. -*/ -func SortRecent(messages []*logmessage.LogMessage) []*logmessage.LogMessage { - sort.Stable(logMessageSlice(messages)) - return messages -} - -type logMessageSlice []*logmessage.LogMessage - -func (lms logMessageSlice) Len() int { - return len(lms) -} - -func (lms logMessageSlice) Less(i, j int) bool { - return *(lms[i]).Timestamp < *(lms[j]).Timestamp -} - -func (lms logMessageSlice) Swap(i, j int) { - lms[i], lms[j] = lms[j], lms[i] -} - -func (cnsmr *consumer) sendKeepAlive(interval time.Duration) { - for { - err := cnsmr.ws.WriteMessage(websocket.TextMessage, []byte("I'm alive!")) - if err != nil { - return - } - time.Sleep(interval) - } -} - -func (cnsmr *consumer) listenForMessages(msgChan chan<- *logmessage.LogMessage) error { - defer cnsmr.ws.Close() - - for { - var data []byte - - _, data, err := cnsmr.ws.ReadMessage() - if err != nil { - return err - } - - msg, msgErr := logmessage.ParseMessage(data) - if msgErr != nil { - continue - } - - msgChan <- msg.GetLogMessage() - } -} - -func headersString(header http.Header) string { - var result string - for name, values := range header { - result += name + ": " + strings.Join(values, ", ") + "\n" - } - return result -} - -func (cnsmr *consumer) establishWebsocketConnection(path string, authToken string) (*websocket.Conn, error) { - header := http.Header{"Origin": []string{"http://localhost"}, "Authorization": []string{authToken}} - - dialer := websocket.Dialer{NetDial: cnsmr.proxyDial, TLSClientConfig: cnsmr.tlsConfig} - - url := cnsmr.endpoint + path - - cnsmr.debugPrinter.Print("WEBSOCKET REQUEST:", - "GET "+path+" HTTP/1.1\n"+ - "Host: "+cnsmr.endpoint+"\n"+ - "Upgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Version: 13\nSec-WebSocket-Key: [HIDDEN]\n"+ - headersString(header)) - - ws, resp, err := dialer.Dial(url, header) - - if resp != nil { - cnsmr.debugPrinter.Print("WEBSOCKET RESPONSE:", - resp.Proto+" "+resp.Status+"\n"+ - headersString(resp.Header)) - } - - if resp != nil && resp.StatusCode == http.StatusUnauthorized { - bodyData, _ := ioutil.ReadAll(resp.Body) - err = noaa_errors.NewUnauthorizedError(string(bodyData)) - return ws, err - } - - if err == nil && cnsmr.callback != nil { - cnsmr.callback() - } - - if err != nil { - return nil, errors.New(fmt.Sprintf("Error dialing loggregator server: %s.\nPlease ask your Cloud Foundry Operator to check the platform configuration (loggregator endpoint is %s).", err.Error(), cnsmr.endpoint)) - } - - return ws, err -} - -func (cnsmr *consumer) proxyDial(network, addr string) (net.Conn, error) { - targetUrl, err := url.Parse("http://" + addr) - if err != nil { - return nil, err - } - - proxy := cnsmr.proxy - if proxy == nil { - proxy = http.ProxyFromEnvironment - } - - proxyUrl, err := proxy(&http.Request{URL: targetUrl}) - if err != nil { - return nil, err - } - if proxyUrl == nil { - return net.Dial(network, addr) - } - - proxyConn, err := net.Dial(network, proxyUrl.Host) - if err != nil { - return nil, err - } - - connectReq := &http.Request{ - Method: "CONNECT", - URL: targetUrl, - Host: targetUrl.Host, - Header: make(http.Header), - } - connectReq.Write(proxyConn) - - connectResp, err := http.ReadResponse(bufio.NewReader(proxyConn), connectReq) - if err != nil { - proxyConn.Close() - return nil, err - } - if connectResp.StatusCode != http.StatusOK { - f := strings.SplitN(connectResp.Status, " ", 2) - proxyConn.Close() - return nil, errors.New(f[1]) - } - - return proxyConn, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer_proxy_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer_proxy_test.go deleted file mode 100644 index 81839f6..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer_proxy_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package loggregator_consumer_test - -import ( - "bytes" - "crypto/tls" - "errors" - consumer "github.com/cloudfoundry/loggregator_consumer" - "github.com/cloudfoundry/loggregatorlib/loggertesthelper" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/loggregatorlib/server/handlers" - "github.com/elazarl/goproxy" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "log" - "net/http" - "net/http/httptest" - "net/url" - "time" -) - -var _ = Describe("Loggregator Consumer behind a Proxy", func() { - var ( - connection consumer.LoggregatorConsumer - endpoint string - testServer *httptest.Server - tlsSettings *tls.Config - consumerProxyFunc func(*http.Request) (*url.URL, error) - - appGuid string - authToken string - incomingChan <-chan *logmessage.LogMessage - messagesToSend chan []byte - testProxyServer *httptest.Server - goProxyHandler *goproxy.ProxyHttpServer - - err error - ) - - BeforeEach(func() { - messagesToSend = make(chan []byte, 256) - - testServer = httptest.NewServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - endpoint = "ws://" + testServer.Listener.Addr().String() - goProxyHandler = goproxy.NewProxyHttpServer() - goProxyHandler.Logger = log.New(bytes.NewBufferString(""), "", 0) - testProxyServer = httptest.NewServer(goProxyHandler) - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return url.Parse(testProxyServer.URL) - } - }) - - AfterEach(func() { - consumerProxyFunc = nil - if testProxyServer != nil { - testProxyServer.Close() - } - if testServer != nil { - testServer.Close() - } - }) - - Describe("Tail", func() { - - AfterEach(func() { - close(messagesToSend) - }) - - perform := func() { - connection = consumer.New(endpoint, tlsSettings, consumerProxyFunc) - incomingChan, err = connection.Tail(appGuid, authToken) - } - - It("connects using valid URL to running consumerProxyFunc server", func() { - messagesToSend <- marshalMessage(createMessage("hello", 0)) - perform() - - message := <-incomingChan - - Expect(message.Message).To(Equal([]byte("hello"))) - }) - - It("connects using valid URL to a stopped consumerProxyFunc server", func() { - testProxyServer.Close() - - perform() - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("connection refused")) - }) - - It("connects using invalid URL", func() { - errMsg := "Invalid consumerProxyFunc URL" - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return nil, errors.New(errMsg) - } - - perform() - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring(errMsg)) - }) - - It("connects to a consumerProxyFunc server rejecting CONNECT requests", func() { - goProxyHandler.OnRequest().HandleConnect(goproxy.AlwaysReject) - - perform() - - Expect(err).To(HaveOccurred()) - }) - - It("connects to a non-consumerProxyFunc server", func() { - nonProxyServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - http.Error(w, "Go away, I am not a consumerProxyFunc!", http.StatusBadRequest) - })) - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return url.Parse(nonProxyServer.URL) - } - - perform() - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring(http.StatusText(http.StatusBadRequest))) - }) - }) - - Describe("Recent", func() { - var httpTestServer *httptest.Server - var incomingMessages []*logmessage.LogMessage - - perform := func() { - close(messagesToSend) - connection = consumer.New(endpoint, tlsSettings, consumerProxyFunc) - incomingMessages, err = connection.Recent(appGuid, authToken) - } - - BeforeEach(func() { - httpTestServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())) - endpoint = "ws://" + httpTestServer.Listener.Addr().String() - }) - - AfterEach(func() { - httpTestServer.Close() - }) - - It("returns messages from the server", func() { - messagesToSend <- marshalMessage(createMessage("test-message-0", 0)) - messagesToSend <- marshalMessage(createMessage("test-message-1", 0)) - - perform() - - Expect(err).NotTo(HaveOccurred()) - Expect(incomingMessages).To(HaveLen(2)) - Expect(incomingMessages[0].Message).To(Equal([]byte("test-message-0"))) - Expect(incomingMessages[1].Message).To(Equal([]byte("test-message-1"))) - }) - - It("connects using failing proxyFunc", func() { - errMsg := "Invalid consumerProxyFunc URL" - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return nil, errors.New(errMsg) - } - - perform() - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring(errMsg)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer_test.go deleted file mode 100644 index ec26a94..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/consumer_test.go +++ /dev/null @@ -1,696 +0,0 @@ -package loggregator_consumer_test - -import ( - "bytes" - "code.google.com/p/go.net/websocket" - "crypto/tls" - "fmt" - consumer "github.com/cloudfoundry/loggregator_consumer" - "github.com/cloudfoundry/loggregatorlib/loggertesthelper" - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/cloudfoundry/loggregatorlib/server/handlers" - noaa_errors "github.com/cloudfoundry/noaa/errors" - "github.com/gogo/protobuf/proto" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "log" - "net/http" - "net/http/httptest" - "net/url" - "sync" - "sync/atomic" - "time" -) - -var _ = Describe("Loggregator Consumer", func() { - var ( - connection consumer.LoggregatorConsumer - endpoint string - testServer *httptest.Server - fakeHandler *FakeHandler - tlsSettings *tls.Config - consumerProxyFunc func(*http.Request) (*url.URL, error) - - appGuid string - authToken string - incomingChan <-chan *logmessage.LogMessage - messagesToSend chan []byte - - err error - ) - - BeforeSuite(func() { - buf := &bytes.Buffer{} - log.SetOutput(buf) - }) - - BeforeEach(func() { - messagesToSend = make(chan []byte, 256) - }) - - AfterEach(func() { - if testServer != nil { - testServer.Close() - } - }) - - Describe("SetOnConnectCallback", func() { - BeforeEach(func() { - testServer = httptest.NewServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - endpoint = "ws://" + testServer.Listener.Addr().String() - close(messagesToSend) - }) - - It("sets a callback and calls it when connecting", func() { - called := false - cb := func() { called = true } - - connection = consumer.New(endpoint, tlsSettings, nil) - connection.SetOnConnectCallback(cb) - connection.Tail(appGuid, authToken) - - Eventually(func() bool { return called }).Should(BeTrue()) - }) - - Context("when the connection fails", func() { - It("does not call the callback", func() { - endpoint = "!!!bad-endpoint" - - called := false - cb := func() { called = true } - - connection = consumer.New(endpoint, tlsSettings, nil) - connection.SetOnConnectCallback(cb) - connection.Tail(appGuid, authToken) - - Consistently(func() bool { return called }).Should(BeFalse()) - }) - }) - - Context("when authorization fails", func() { - var failer authFailer - var endpoint string - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("does not call the callback", func() { - called := false - cb := func() { called = true } - - connection = consumer.New(endpoint, tlsSettings, nil) - connection.SetOnConnectCallback(cb) - connection.Tail(appGuid, authToken) - - Consistently(func() bool { return called }).Should(BeFalse()) - }) - - }) - }) - - var startFakeTrafficController = func() { - fakeHandler = &FakeHandler{innerHandler: handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())} - testServer = httptest.NewServer(fakeHandler) - endpoint = "ws://" + testServer.Listener.Addr().String() - appGuid = "app-guid" - } - - Describe("Debug Printing", func() { - var debugPrinter *fakeDebugPrinter - - BeforeEach(func() { - startFakeTrafficController() - - debugPrinter = &fakeDebugPrinter{} - connection = consumer.New(endpoint, tlsSettings, consumerProxyFunc) - connection.SetDebugPrinter(debugPrinter) - }) - - It("includes websocket handshake", func() { - close(messagesToSend) - connection.Tail(appGuid, authToken) - - Expect(debugPrinter.Messages[0].Body).To(ContainSubstring("Sec-WebSocket-Version: 13")) - }) - - It("does not include messages sent or received", func() { - messagesToSend <- marshalMessage(createMessage("hello", 0)) - - close(messagesToSend) - connection.Tail(appGuid, authToken) - - Expect(debugPrinter.Messages[0].Body).ToNot(ContainSubstring("hello")) - }) - }) - - Describe("Tail", func() { - perform := func() { - connection = consumer.New(endpoint, tlsSettings, consumerProxyFunc) - incomingChan, err = connection.Tail(appGuid, authToken) - } - - BeforeEach(func() { - startFakeTrafficController() - }) - - Context("when there is no TLS Config or consumerProxyFunc setting", func() { - Context("when the connection can be established", func() { - It("receives messages on the incoming channel", func(done Done) { - messagesToSend <- marshalMessage(createMessage("hello", 0)) - - perform() - message := <-incomingChan - - Expect(message.Message).To(Equal([]byte("hello"))) - close(messagesToSend) - - close(done) - }) - - It("closes the channel after the server closes the connection", func(done Done) { - perform() - close(messagesToSend) - - Eventually(incomingChan).Should(BeClosed()) - - close(done) - }) - - It("sends a keepalive to the server", func() { - messageCountingServer := &messageCountingHandler{} - testServer := httptest.NewServer(websocket.Handler(messageCountingServer.handle)) - defer testServer.Close() - - consumer.KeepAlive = 10 * time.Millisecond - - connection = consumer.New("ws://"+testServer.Listener.Addr().String(), tlsSettings, consumerProxyFunc) - incomingChan, err = connection.Tail(appGuid, authToken) - defer connection.Close() - - Eventually(messageCountingServer.count).Should(BeNumerically("~", 10, 2)) - }) - - It("sends messages for a specific app", func() { - appGuid = "the-app-guid" - perform() - close(messagesToSend) - - Eventually(fakeHandler.getLastURL).Should(ContainSubstring("/tail/?app=the-app-guid")) - }) - - It("sends an Authorization header with an access token", func() { - authToken = "auth-token" - perform() - close(messagesToSend) - - Eventually(fakeHandler.getAuthHeader).Should(Equal("auth-token")) - }) - - Context("when the message fails to parse", func() { - It("skips that message but continues to read messages", func(done Done) { - messagesToSend <- []byte{0} - messagesToSend <- marshalMessage(createMessage("hello", 0)) - perform() - close(messagesToSend) - - message := <-incomingChan - - Expect(message.Message).To(Equal([]byte("hello"))) - - close(done) - }) - }) - }) - - Context("when the connection cannot be established", func() { - BeforeEach(func() { - endpoint = "!!!bad-endpoint" - }) - - It("returns an error", func(done Done) { - perform() - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Please ask your Cloud Foundry Operator")) - - close(done) - }) - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a helpful error message", func() { - perform() - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - Expect(err).To(BeAssignableToTypeOf(&noaa_errors.UnauthorizedError{})) - }) - }) - }) - - Context("when SSL settings are passed in", func() { - BeforeEach(func() { - // fakeHandler = &FakeHandler{innerHandler: } - testServer = httptest.NewTLSServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - endpoint = "wss://" + testServer.Listener.Addr().String() - - tlsSettings = &tls.Config{InsecureSkipVerify: true} - }) - - It("connects using those settings", func() { - perform() - close(messagesToSend) - - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("Close", func() { - BeforeEach(func() { - fakeHandler = &FakeHandler{innerHandler: handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())} - testServer = httptest.NewServer(fakeHandler) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - Context("when a connection is not open", func() { - It("returns an error", func() { - connection = consumer.New(endpoint, nil, nil) - err := connection.Close() - - Expect(err.Error()).To(Equal("connection does not exist")) - }) - }) - - Context("when a connection is open", func() { - It("closes any open channels", func(done Done) { - connection = consumer.New(endpoint, nil, nil) - incomingChan, err := connection.Tail("app-guid", "auth-token") - close(messagesToSend) - - Eventually(fakeHandler.wasCalled).Should(BeTrue()) - - connection.Close() - - Expect(err).NotTo(HaveOccurred()) - Eventually(incomingChan).Should(BeClosed()) - - close(done) - }) - }) - }) - - Describe("Recent with http", func() { - var ( - appGuid = "appGuid" - authToken = "authToken" - receivedLogMessages []*logmessage.LogMessage - recentError error - ) - - perform := func() { - close(messagesToSend) - connection = consumer.New(endpoint, nil, nil) - receivedLogMessages, recentError = connection.Recent(appGuid, authToken) - } - - Context("when the connection cannot be established", func() { - It("invalid endpoints return error", func() { - endpoint = "invalid-endpoint" - perform() - - Expect(recentError).ToNot(BeNil()) - }) - }) - - Context("when the connection can be established", func() { - - BeforeEach(func() { - testServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns messages from the server", func() { - messagesToSend <- marshalMessage(createMessage("test-message-0", 0)) - messagesToSend <- marshalMessage(createMessage("test-message-1", 0)) - - perform() - - Expect(recentError).NotTo(HaveOccurred()) - Expect(receivedLogMessages).To(HaveLen(2)) - Expect(receivedLogMessages[0].Message).To(Equal([]byte("test-message-0"))) - Expect(receivedLogMessages[1].Message).To(Equal([]byte("test-message-1"))) - }) - }) - - Context("when the content type is missing", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/recent", func(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Content-Type", "") - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(consumer.ErrBadResponse)) - }) - - }) - - Context("when the content length is unknown", func() { - BeforeEach(func() { - fakeHandler = &FakeHandler{contentLen: "-1", innerHandler: handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())} - testServer = httptest.NewServer(fakeHandler) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it handles that without throwing an error", func() { - messagesToSend <- marshalMessage(createMessage("bad-content-length", 0)) - perform() - - Expect(recentError).NotTo(HaveOccurred()) - Expect(receivedLogMessages).To(HaveLen(1)) - }) - - }) - - Context("when the content type doesn't have a boundary", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/recent", func(resp http.ResponseWriter, req *http.Request) { - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(consumer.ErrBadResponse)) - }) - - }) - - Context("when the content type's boundary is blank", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/recent", func(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Content-Type", "boundary=") - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(consumer.ErrBadResponse)) - }) - - }) - - Context("when the path is not found", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/recent", func(resp http.ResponseWriter, req *http.Request) { - resp.WriteHeader(http.StatusNotFound) - }) - testServer = httptest.NewServer(serverMux) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a not found reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(consumer.ErrNotFound)) - }) - - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - serverMux := http.NewServeMux() - serverMux.Handle("/recent", failer) - testServer = httptest.NewServer(serverMux) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a helpful error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - Expect(recentError).To(BeAssignableToTypeOf(&noaa_errors.UnauthorizedError{})) - }) - }) - }) - - Describe("Recent", func() { - var ( - appGuid string - authToken string - logMessages []*logmessage.LogMessage - recentError error - ) - - perform := func() { - close(messagesToSend) - connection = consumer.New(endpoint, nil, nil) - logMessages, recentError = connection.Recent(appGuid, authToken) - } - - BeforeEach(func() { - fakeHandler = &FakeHandler{innerHandler: handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())} - testServer = httptest.NewServer(fakeHandler) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - Context("when the connection cannot be established", func() { - It("returns an error", func() { - endpoint = "invalid-endpoint" - perform() - - Expect(recentError).ToNot(BeNil()) - }) - }) - - Context("when the connection can be established", func() { - It("connects to the loggregator server", func() { - perform() - - Expect(fakeHandler.wasCalled()).To(BeTrue()) - }) - - It("returns messages from the server", func() { - messagesToSend <- marshalMessage(createMessage("test-message-0", 0)) - messagesToSend <- marshalMessage(createMessage("test-message-1", 0)) - perform() - - Expect(logMessages).To(HaveLen(2)) - Expect(logMessages[0].Message).To(Equal([]byte("test-message-0"))) - Expect(logMessages[1].Message).To(Equal([]byte("test-message-1"))) - }) - - It("calls the right path on the loggregator endpoint", func() { - appGuid = "app-guid" - perform() - - Expect(fakeHandler.getLastURL()).To(ContainSubstring("/dump/?app=app-guid")) - }) - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - endpoint = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a helpful error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - }) - }) - }) - - Describe("SortRecent", func() { - var messages []*logmessage.LogMessage - - BeforeEach(func() { - messages = []*logmessage.LogMessage{createMessage("hello", 2), createMessage("konnichiha", 1)} - }) - - It("sorts messages", func() { - sortedMessages := consumer.SortRecent(messages) - - Expect(*sortedMessages[0].Timestamp).To(Equal(int64(1))) - Expect(*sortedMessages[1].Timestamp).To(Equal(int64(2))) - }) - - It("sorts using a stable algorithm", func() { - messages = append(messages, createMessage("guten tag", 1)) - - sortedMessages := consumer.SortRecent(messages) - - Expect(sortedMessages[0].Message).To(Equal([]byte("konnichiha"))) - Expect(sortedMessages[1].Message).To(Equal([]byte("guten tag"))) - Expect(sortedMessages[2].Message).To(Equal([]byte("hello"))) - }) - }) -}) - -func createMessage(message string, timestamp int64) *logmessage.LogMessage { - messageType := logmessage.LogMessage_OUT - sourceName := "DEA" - - if timestamp == 0 { - timestamp = time.Now().UnixNano() - } - - return &logmessage.LogMessage{ - Message: []byte(message), - AppId: proto.String("my-app-guid"), - MessageType: &messageType, - SourceName: &sourceName, - Timestamp: proto.Int64(timestamp), - } -} - -func marshalMessage(message *logmessage.LogMessage) []byte { - data, err := proto.Marshal(message) - if err != nil { - log.Println(err.Error()) - } - - return data -} - -type authFailer struct { - Message string -} - -func (failer authFailer) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - rw.Header().Set("WWW-Authenticate", "Basic") - rw.WriteHeader(http.StatusUnauthorized) - fmt.Fprintf(rw, "You are not authorized. %s", failer.Message) -} - -type messageCountingHandler struct { - msgCount int32 -} - -func (mch *messageCountingHandler) handle(conn *websocket.Conn) { - buffer := make([]byte, 1024) - var err error - for err == nil { - _, err = conn.Read(buffer) - if err == nil { - atomic.AddInt32(&mch.msgCount, 1) - } - } -} - -func (mch *messageCountingHandler) count() int32 { - return atomic.LoadInt32(&mch.msgCount) -} - -type FakeHandler struct { - innerHandler http.Handler - called bool - lastURL string - authHeader string - contentLen string - sync.RWMutex -} - -func (fh *FakeHandler) getAuthHeader() string { - fh.RLock() - defer fh.RUnlock() - return fh.authHeader -} - -func (fh *FakeHandler) setAuthHeader(authHeader string) { - fh.Lock() - defer fh.Unlock() - fh.authHeader = authHeader -} - -func (fh *FakeHandler) getLastURL() string { - fh.RLock() - defer fh.RUnlock() - return fh.lastURL -} - -func (fh *FakeHandler) setLastURL(url string) { - fh.Lock() - defer fh.Unlock() - fh.lastURL = url -} - -func (fh *FakeHandler) call() { - fh.Lock() - defer fh.Unlock() - fh.called = true -} - -func (fh *FakeHandler) wasCalled() bool { - fh.RLock() - defer fh.RUnlock() - return fh.called -} - -func (fh *FakeHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - fh.setLastURL(r.URL.String()) - fh.setAuthHeader(r.Header.Get("Authorization")) - fh.call() - if len(fh.contentLen) > 0 { - rw.Header().Set("Content-Length", fh.contentLen) - } - fh.innerHandler.ServeHTTP(rw, r) -} - -type fakeDebugPrinter struct { - Messages []*fakeDebugPrinterMessage -} - -type fakeDebugPrinterMessage struct { - Title, Body string -} - -func (p *fakeDebugPrinter) Print(title, body string) { - message := &fakeDebugPrinterMessage{title, body} - p.Messages = append(p.Messages, message) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/integration_test/integration_test_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/integration_test/integration_test_suite_test.go deleted file mode 100644 index b9c7560..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/integration_test/integration_test_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestIntegrationTest(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "IntegrationTest Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/integration_test/loggregator_consumer_smoke_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/integration_test/loggregator_consumer_smoke_test.go deleted file mode 100644 index 1a73c27..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/integration_test/loggregator_consumer_smoke_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package integration_test - -import ( - "crypto/tls" - "encoding/json" - consumer "github.com/cloudfoundry/loggregator_consumer" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "os" - - "io/ioutil" - "strings" -) - -var _ = Describe("LoggregatorConsumer:", func() { - var appGuid, authToken string - var connection consumer.LoggregatorConsumer - - BeforeEach(func() { - var err error - appGuid = os.Getenv("TEST_APP_GUID") - loggregatorEndpoint := os.Getenv("LOGGREGATOR_ENDPOINT") - - connection = consumer.New(loggregatorEndpoint, &tls.Config{InsecureSkipVerify: true}, nil) - authToken, err = getAuthToken() - Expect(err).NotTo(HaveOccurred()) - - }) - - AfterEach(func() { - connection.Close() - }) - - It("should return data for recent", func() { - messages, err := connection.Recent(appGuid, authToken) - Expect(err).NotTo(HaveOccurred()) - Expect(messages).To(ContainElement(ContainSubstring("Tick"))) - }) - - It("should return data for tail", func(done Done) { - messagesChan, err := connection.Tail(appGuid, authToken) - Expect(err).NotTo(HaveOccurred()) - - for m := range messagesChan { - if strings.Contains(string(m.GetMessage()), "Tick") { - break - } - } - - close(done) - }, 2) - -}) - -type Config struct { - AccessToken string -} - -func getAuthToken() (string, error) { - bytes, err := ioutil.ReadFile(os.ExpandEnv("$HOME/.cf/config.json")) - if err != nil { - return "", err - } - - var config Config - err = json.Unmarshal(bytes, &config) - if err != nil { - return "", err - } - - return config.AccessToken, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/loggregator_consumer_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/loggregator_consumer_suite_test.go deleted file mode 100644 index 175f51e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/loggregator_consumer_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package loggregator_consumer_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestLoggregator_consumer(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Loggregator_consumer Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/sample_consumer/main.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/sample_consumer/main.go deleted file mode 100644 index 39320ef..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregator_consumer/sample_consumer/main.go +++ /dev/null @@ -1,38 +0,0 @@ -package main - -import ( - "crypto/tls" - "fmt" - consumer "github.com/cloudfoundry/loggregator_consumer" - "os" -) - -var LoggregatorAddress = "wss://loggregator.10.244.0.34.xip.io:443" -var appGuid = os.Getenv("APP_GUID") -var authToken = os.Getenv("CF_ACCESS_TOKEN") - -func main() { - connection := consumer.New(LoggregatorAddress, &tls.Config{InsecureSkipVerify: true}, nil) - - messages, err := connection.Recent(appGuid, authToken) - - if err != nil { - fmt.Printf("===== Error getting recent messages: %v\n", err) - } else { - fmt.Println("===== Recent messages") - for _, msg := range messages { - fmt.Println(msg) - } - } - - fmt.Println("===== Tailing messages") - msgChan, err := connection.Tail(appGuid, authToken) - - if err != nil { - fmt.Printf("===== Error tailing: %v\n", err) - } else { - for msg := range msgChan { - fmt.Printf("%v \n", msg) - } - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/dump.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/dump.go deleted file mode 100644 index 65418a3..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/dump.go +++ /dev/null @@ -1,40 +0,0 @@ -package logmessage - -import ( - "bytes" - "encoding/binary" - - "github.com/gogo/protobuf/proto" -) - -func DumpMessage(msg Message, buffer *bytes.Buffer) { - binary.Write(buffer, binary.BigEndian, msg.GetRawMessageLength()) - buffer.Write(msg.GetRawMessage()) -} - -func ParseDumpedLogMessages(b []byte) (messages []*LogMessage, err error) { - buffer := bytes.NewBuffer(b) - var length uint32 - for buffer.Len() > 0 { - lengthBytes := bytes.NewBuffer(buffer.Next(4)) - err = binary.Read(lengthBytes, binary.BigEndian, &length) - if err != nil { - return - } - - msgBytes := buffer.Next(int(length)) - var msg *LogMessage - msg, err = parseLogMessage(msgBytes) - if err != nil { - return - } - messages = append(messages, msg) - } - return -} - -func parseLogMessage(data []byte) (logMessage *LogMessage, err error) { - logMessage = new(LogMessage) - err = proto.Unmarshal(data, logMessage) - return logMessage, err -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/log_message.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/log_message.pb.go deleted file mode 100644 index 01cb047..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/log_message.pb.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: log_message.proto -// DO NOT EDIT! - -package logmessage - -import proto "github.com/gogo/protobuf/proto" -import json "encoding/json" -import math "math" - -// Reference proto, json, and math imports to suppress error if they are not otherwise used. -var _ = proto.Marshal -var _ = &json.SyntaxError{} -var _ = math.Inf - -type LogMessage_MessageType int32 - -const ( - LogMessage_OUT LogMessage_MessageType = 1 - LogMessage_ERR LogMessage_MessageType = 2 -) - -var LogMessage_MessageType_name = map[int32]string{ - 1: "OUT", - 2: "ERR", -} -var LogMessage_MessageType_value = map[string]int32{ - "OUT": 1, - "ERR": 2, -} - -func (x LogMessage_MessageType) Enum() *LogMessage_MessageType { - p := new(LogMessage_MessageType) - *p = x - return p -} -func (x LogMessage_MessageType) String() string { - return proto.EnumName(LogMessage_MessageType_name, int32(x)) -} -func (x LogMessage_MessageType) MarshalJSON() ([]byte, error) { - return json.Marshal(x.String()) -} -func (x *LogMessage_MessageType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(LogMessage_MessageType_value, data, "LogMessage_MessageType") - if err != nil { - return err - } - *x = LogMessage_MessageType(value) - return nil -} - -type LogMessage struct { - Message []byte `protobuf:"bytes,1,req,name=message" json:"message,omitempty"` - MessageType *LogMessage_MessageType `protobuf:"varint,2,req,name=message_type,enum=logmessage.LogMessage_MessageType" json:"message_type,omitempty"` - Timestamp *int64 `protobuf:"zigzag64,3,req,name=timestamp" json:"timestamp,omitempty"` - AppId *string `protobuf:"bytes,4,req,name=app_id" json:"app_id,omitempty"` - SourceId *string `protobuf:"bytes,6,opt,name=source_id" json:"source_id,omitempty"` - DrainUrls []string `protobuf:"bytes,7,rep,name=drain_urls" json:"drain_urls,omitempty"` - SourceName *string `protobuf:"bytes,8,opt,name=source_name" json:"source_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *LogMessage) Reset() { *m = LogMessage{} } -func (m *LogMessage) String() string { return proto.CompactTextString(m) } -func (*LogMessage) ProtoMessage() {} - -func (m *LogMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *LogMessage) GetMessageType() LogMessage_MessageType { - if m != nil && m.MessageType != nil { - return *m.MessageType - } - return 0 -} - -func (m *LogMessage) GetTimestamp() int64 { - if m != nil && m.Timestamp != nil { - return *m.Timestamp - } - return 0 -} - -func (m *LogMessage) GetAppId() string { - if m != nil && m.AppId != nil { - return *m.AppId - } - return "" -} - -func (m *LogMessage) GetSourceId() string { - if m != nil && m.SourceId != nil { - return *m.SourceId - } - return "" -} - -func (m *LogMessage) GetDrainUrls() []string { - if m != nil { - return m.DrainUrls - } - return nil -} - -func (m *LogMessage) GetSourceName() string { - if m != nil && m.SourceName != nil { - return *m.SourceName - } - return "" -} - -type LogEnvelope struct { - RoutingKey *string `protobuf:"bytes,1,req,name=routing_key" json:"routing_key,omitempty"` - Signature []byte `protobuf:"bytes,2,req,name=signature" json:"signature,omitempty"` - LogMessage *LogMessage `protobuf:"bytes,3,req,name=log_message" json:"log_message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *LogEnvelope) Reset() { *m = LogEnvelope{} } -func (m *LogEnvelope) String() string { return proto.CompactTextString(m) } -func (*LogEnvelope) ProtoMessage() {} - -func (m *LogEnvelope) GetRoutingKey() string { - if m != nil && m.RoutingKey != nil { - return *m.RoutingKey - } - return "" -} - -func (m *LogEnvelope) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -func (m *LogEnvelope) GetLogMessage() *LogMessage { - if m != nil { - return m.LogMessage - } - return nil -} - -func init() { - proto.RegisterEnum("logmessage.LogMessage_MessageType", LogMessage_MessageType_name, LogMessage_MessageType_value) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/log_message.proto b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/log_message.proto deleted file mode 100644 index 58bae4e..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/log_message.proto +++ /dev/null @@ -1,22 +0,0 @@ -package logmessage; - -message LogMessage { - enum MessageType { - OUT = 1; - ERR = 2; - } - - required bytes message = 1; - required MessageType message_type = 2; - required sint64 timestamp = 3; - required string app_id = 4; - optional string source_id = 6; - repeated string drain_urls = 7; - optional string source_name = 8; -} - -message LogEnvelope { - required string routing_key = 1; - required bytes signature = 2; - required LogMessage log_message = 3; -} \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/message.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/message.go deleted file mode 100644 index 3ee024c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/message.go +++ /dev/null @@ -1,99 +0,0 @@ -package logmessage - -import ( - "errors" - "time" - - "github.com/cloudfoundry/loggregatorlib/signature" - "github.com/gogo/protobuf/proto" -) - -type Message struct { - logMessage *LogMessage - rawMessage []byte - rawMessageLength uint32 -} - -func NewMessage(logMessage *LogMessage, data []byte) *Message { - return &Message{logMessage, data, uint32(len(data))} -} - -func GenerateMessage(messageType LogMessage_MessageType, messageString, appId, sourceName string) (*Message, error) { - currentTime := time.Now() - logMessage := &LogMessage{ - Message: []byte(messageString), - AppId: &appId, - MessageType: &messageType, - SourceName: proto.String(sourceName), - Timestamp: proto.Int64(currentTime.UnixNano()), - } - - lmBytes, err := proto.Marshal(logMessage) - if err != nil { - return nil, err - } - return NewMessage(logMessage, lmBytes), nil -} - -func ParseMessage(data []byte) (*Message, error) { - logMessage, err := parseLogMessage(data) - return &Message{logMessage, data, uint32(len(data))}, err -} - -func ParseEnvelope(data []byte, secret string) (message *Message, err error) { - message = &Message{} - logEnvelope := &LogEnvelope{} - - if err := proto.Unmarshal(data, logEnvelope); err != nil { - return nil, err - } - if !logEnvelope.VerifySignature(secret) { - return nil, errors.New("Invalid Envelope Signature") - } - - //we pull out the LogMessage from the LogEnvelope and re-marshal it - //because the rawMessage should not contain the information in the logEnvelope - message.rawMessage, err = proto.Marshal(logEnvelope.LogMessage) - if err != nil { - return nil, err - } - - message.logMessage = logEnvelope.LogMessage - message.rawMessageLength = uint32(len(message.rawMessage)) - return message, nil -} - -func (m *Message) GetLogMessage() *LogMessage { - return m.logMessage -} - -func (m *Message) GetRawMessage() []byte { - return m.rawMessage -} - -func (m *Message) GetRawMessageLength() uint32 { - return m.rawMessageLength -} - -func (e *LogEnvelope) VerifySignature(sharedSecret string) bool { - messageDigest, err := signature.Decrypt(sharedSecret, e.GetSignature()) - if err != nil { - return false - } - - expectedDigest := e.logMessageDigest() - return string(messageDigest) == string(expectedDigest) -} - -func (e *LogEnvelope) SignEnvelope(sharedSecret string) error { - signature, err := signature.Encrypt(sharedSecret, e.logMessageDigest()) - if err == nil { - e.Signature = signature - } - - return err -} - -func (e *LogEnvelope) logMessageDigest() []byte { - return signature.DigestBytes(e.LogMessage.GetMessage()) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/message_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/message_test.go deleted file mode 100644 index ce953b5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/message_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package logmessage - -import ( - "testing" - "time" - - "github.com/gogo/protobuf/proto" - "github.com/stretchr/testify/assert" -) - -func TestGenerateMessageReturnsMessage(t *testing.T) { - message, err := GenerateMessage(LogMessage_ERR, "myMessage", "123appID", "DEA") - assert.NoError(t, err) - - assert.Equal(t, *message.GetLogMessage().AppId, "123appID") - assert.Equal(t, *message.GetLogMessage().SourceName, "DEA") - assert.Equal(t, *message.GetLogMessage().MessageType, LogMessage_ERR) - assert.Equal(t, message.GetLogMessage().Message, []byte("myMessage")) -} - -func TestEnvelopeExtractionForMessageFails(t *testing.T) { - appMessageString := "AppMessage" - - unmarshalledMessage := NewLogMessageWithSourceName(t, appMessageString, "App", "myApp") - marshalledMessage := MarshallLogMessage(t, unmarshalledMessage) - - _, err := ParseEnvelope(marshalledMessage, "") - assert.Error(t, err) -} - -func TestExtractionFromEnvelopeWithValidSignature(t *testing.T) { - appMessageString := "AppMessage" - - unmarshalledMessage := NewLogMessageWithSourceName(t, appMessageString, "App", "myApp") - marshalledMessage := MarshallLogMessage(t, unmarshalledMessage) - marshalledEnvelope := MarshalledLogEnvelope(t, unmarshalledMessage, "some secret") - - message, err := ParseEnvelope(marshalledEnvelope, "some secret") - assert.NoError(t, err) - - assert.Equal(t, 36, len(message.GetRawMessage())) - assert.Equal(t, marshalledMessage, message.GetRawMessage()) - assert.Equal(t, unmarshalledMessage, message.GetLogMessage()) - assert.Equal(t, "App", message.logMessage.GetSourceName()) -} - -func TestExtractionFromEnvelopeWithInvalidSignature(t *testing.T) { - appMessageString := "AppMessage" - - unmarshalledMessage := NewLogMessageWithSourceName(t, appMessageString, "App", "myApp") - marshalledEnvelope := MarshalledLogEnvelope(t, unmarshalledMessage, "some secret") - - _, err := ParseEnvelope(marshalledEnvelope, "invalid secret") - assert.NotNil(t, err) - -} - -func TestExtractEnvelopeFromRawBytes(t *testing.T) { - //This allows us to verify that the same extraction can be done on the Ruby side - data := []uint8{10, 9, 109, 121, 95, 97, 112, 112, 95, 105, 100, 18, 64, 200, 50, 155, 229, 192, 81, 84, 207, 6, 73, 170, 77, 69, 0, 228, 210, 19, 158, 158, 196, 167, 164, 202, 189, 124, 54, 25, 26, 200, 250, 65, 64, 213, 183, 116, 76, 142, 82, 219, 61, 103, 39, 98, 171, 3, 123, 48, 162, 232, 216, 69, 38, 151, 75, 36, 40, 253, 162, 1, 9, 40, 219, 229, 55, 26, 43, 10, 12, 72, 101, 108, 108, 111, 32, 116, 104, 101, 114, 101, 33, 16, 1, 24, 224, 151, 169, 222, 161, 217, 246, 177, 38, 34, 9, 109, 121, 95, 97, 112, 112, 95, 105, 100, 40, 1, 50, 2, 52, 50} - receivedEnvelope := &LogEnvelope{} - err := proto.Unmarshal(data, receivedEnvelope) - assert.NoError(t, err) - assert.Equal(t, receivedEnvelope.GetLogMessage().GetMessage(), []byte("Hello there!")) - assert.Equal(t, receivedEnvelope.GetLogMessage().GetAppId(), "my_app_id") - assert.Equal(t, receivedEnvelope.GetRoutingKey(), "my_app_id") - assert.Equal(t, receivedEnvelope.GetLogMessage().GetSourceId(), "42") - - assert.True(t, receivedEnvelope.VerifySignature("secret")) -} - -func TestThatSignatureValidatesWhenItMatches(t *testing.T) { - secret := "super-secret" - logMessage := NewLogMessageWithSourceName(t, "the logs", "App", "appid") - - envelope := &LogEnvelope{ - LogMessage: logMessage, - RoutingKey: proto.String(*logMessage.AppId), - } - envelope.SignEnvelope(secret) - - assert.True(t, envelope.VerifySignature(secret)) -} - -func TestThatSignatureDoesNotValidateWhenItDoesntMatch(t *testing.T) { - envelope := &LogEnvelope{ - LogMessage: &LogMessage{}, - RoutingKey: proto.String("app_id"), - Signature: []byte{0, 1, 2}, //some bad signature - } - - assert.False(t, envelope.VerifySignature("super-secret")) -} - -func TestThatSignatureDoesNotValidateWhenSecretIsIncorrect(t *testing.T) { - secret := "super-secret" - logMessage := NewLogMessageWithSourceName(t, "the logs", "App", "appid") - - envelope := &LogEnvelope{ - LogMessage: logMessage, - RoutingKey: proto.String(*logMessage.AppId), - } - envelope.SignEnvelope(secret) - - assert.False(t, envelope.VerifySignature(secret+"not the right secret")) -} - -func NewLogMessageWithSourceName(t *testing.T, messageString, sourceName, appId string) *LogMessage { - currentTime := time.Now() - - messageType := LogMessage_OUT - protoMessage := &LogMessage{ - Message: []byte(messageString), - AppId: proto.String(appId), - MessageType: &messageType, - Timestamp: proto.Int64(currentTime.UnixNano()), - SourceName: proto.String(sourceName), - } - return protoMessage -} - -func MarshallLogMessage(t *testing.T, unmarshalledMessage *LogMessage) []byte { - message, err := proto.Marshal(unmarshalledMessage) - assert.NoError(t, err) - - return message -} - -func MarshalledLogEnvelope(t *testing.T, unmarshalledMessage *LogMessage, secret string) []byte { - envelope := &LogEnvelope{ - LogMessage: unmarshalledMessage, - RoutingKey: proto.String(*unmarshalledMessage.AppId), - } - envelope.SignEnvelope(secret) - - marshalledEnvelope, err := proto.Marshal(envelope) - assert.NoError(t, err) - - return marshalledEnvelope -} - -func UnmarshalLogEnvelope(t *testing.T, data []byte) *LogEnvelope { - logEnvelope := new(LogEnvelope) - err := proto.Unmarshal(data, logEnvelope) - assert.NoError(t, err) - return logEnvelope -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/testhelpers/logmessage_testhelper.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/testhelpers/logmessage_testhelper.go deleted file mode 100644 index b8900e1..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/logmessage/testhelpers/logmessage_testhelper.go +++ /dev/null @@ -1,157 +0,0 @@ -package testhelpers - -import ( - "testing" - "time" - - "github.com/cloudfoundry/loggregatorlib/logmessage" - "github.com/gogo/protobuf/proto" - "github.com/stretchr/testify/assert" -) - -func MarshalledErrorLogMessage(t *testing.T, messageString string, appId, sourceId string) []byte { - messageType := logmessage.LogMessage_ERR - sourceName := "DEA" - protoMessage := generateLogMessage(messageString, appId, messageType, sourceName, sourceId) - - return marshalProtoBuf(t, protoMessage) -} - -func MarshalledLogMessage(t *testing.T, messageString string, appId string) []byte { - messageType := logmessage.LogMessage_OUT - sourceName := "DEA" - protoMessage := generateLogMessage(messageString, appId, messageType, sourceName, "") - - return marshalProtoBuf(t, protoMessage) -} - -func MarshalledDrainedLogMessage(t *testing.T, messageString string, appId string, drainUrls ...string) []byte { - messageType := logmessage.LogMessage_OUT - sourceName := "App" - protoMessage := generateLogMessage(messageString, appId, messageType, sourceName, "") - protoMessage.DrainUrls = drainUrls - - return marshalProtoBuf(t, protoMessage) -} - -func MarshalledDrainedNonWardenLogMessage(t *testing.T, messageString string, appId string, drainUrls ...string) []byte { - messageType := logmessage.LogMessage_OUT - sourceName := "DEA" - protoMessage := generateLogMessage(messageString, appId, messageType, sourceName, "") - protoMessage.DrainUrls = drainUrls - - return marshalProtoBuf(t, protoMessage) -} - -func NewLogMessage(messageString, appId string) *logmessage.LogMessage { - messageType := logmessage.LogMessage_OUT - sourceName := "App" - - return generateLogMessage(messageString, appId, messageType, sourceName, "") -} - -func NewMessageWithError(messageString, appId string) (*logmessage.Message, error) { - logMessage := generateLogMessage(messageString, appId, logmessage.LogMessage_OUT, "App", "") - - marshalledLogMessage, err := proto.Marshal(logMessage) - - return logmessage.NewMessage(logMessage, marshalledLogMessage), err -} - -func NewMessage(t *testing.T, messageString, appId string) *logmessage.Message { - logMessage := generateLogMessage(messageString, appId, logmessage.LogMessage_OUT, "App", "") - - marshalledLogMessage, err := proto.Marshal(logMessage) - assert.NoError(t, err) - - return logmessage.NewMessage(logMessage, marshalledLogMessage) -} - -func NewMessageFromLogMessage(t *testing.T, logMessage *logmessage.LogMessage) *logmessage.Message { - marshalledLogMessage, err := proto.Marshal(logMessage) - assert.NoError(t, err) - - return logmessage.NewMessage(logMessage, marshalledLogMessage) -} - -func NewMessageWithSyslogDrain(t *testing.T, messageString, appId string, syslogDrains ...string) *logmessage.Message { - logMessage := generateLogMessage(messageString, appId, logmessage.LogMessage_OUT, "App", "") - logMessage.DrainUrls = syslogDrains - - marshalledLogMessage, err := proto.Marshal(logMessage) - assert.NoError(t, err) - - return logmessage.NewMessage(logMessage, marshalledLogMessage) -} - -func NewMessageWithSourceId(t *testing.T, messageString, appId, sourceId string) *logmessage.Message { - logMessage := generateLogMessage(messageString, appId, logmessage.LogMessage_OUT, "App", sourceId) - - marshalledLogMessage, err := proto.Marshal(logMessage) - assert.NoError(t, err) - - return logmessage.NewMessage(logMessage, marshalledLogMessage) -} - -func NewErrMessageWithSourceId(t *testing.T, messageString, appId, sourceId string) *logmessage.Message { - logMessage := generateLogMessage(messageString, appId, logmessage.LogMessage_ERR, "App", sourceId) - - marshalledLogMessage, err := proto.Marshal(logMessage) - assert.NoError(t, err) - - return logmessage.NewMessage(logMessage, marshalledLogMessage) -} - -func MarshalledLogEnvelopeForMessage(t *testing.T, msg, appName, secret string, drainUrls ...string) []byte { - logMessage := NewLogMessage(msg, appName) - logMessage.DrainUrls = drainUrls - return MarshalledLogEnvelope(t, logMessage, secret) -} - -func MarshalledLogEnvelope(t *testing.T, unmarshalledMessage *logmessage.LogMessage, secret string) []byte { - envelope := &logmessage.LogEnvelope{ - LogMessage: unmarshalledMessage, - RoutingKey: proto.String(*unmarshalledMessage.AppId), - } - envelope.SignEnvelope(secret) - - return marshalProtoBuf(t, envelope) -} - -func AssertProtoBufferMessageEquals(t *testing.T, expectedMessage string, actual []byte) { - receivedMessage := assertProtoBufferMessageNoError(t, actual) - assert.Equal(t, receivedMessage, expectedMessage) -} - -func AssertProtoBufferMessageContains(t *testing.T, expectedMessage string, actual []byte) { - receivedMessage := assertProtoBufferMessageNoError(t, actual) - assert.Contains(t, receivedMessage, expectedMessage) -} - -func assertProtoBufferMessageNoError(t *testing.T, actual []byte) string { - receivedMessage := &logmessage.LogMessage{} - err := proto.Unmarshal(actual, receivedMessage) - assert.NoError(t, err) - return string(receivedMessage.GetMessage()) -} - -func generateLogMessage(messageString, appId string, messageType logmessage.LogMessage_MessageType, sourceName, sourceId string) *logmessage.LogMessage { - currentTime := time.Now() - logMessage := &logmessage.LogMessage{ - Message: []byte(messageString), - AppId: proto.String(appId), - MessageType: &messageType, - SourceName: proto.String(sourceName), - SourceId: proto.String(sourceId), - Timestamp: proto.Int64(currentTime.UnixNano()), - } - - return logMessage -} - -func marshalProtoBuf(t *testing.T, pb proto.Message) []byte { - marshalledProtoBuf, err := proto.Marshal(pb) - assert.NoError(t, err) - - return marshalledProtoBuf -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/signature_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/signature_suite_test.go deleted file mode 100644 index 3237b9c..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/signature_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package signature - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSignature(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Signature Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/symmetric.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/symmetric.go deleted file mode 100644 index 9fa0309..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/symmetric.go +++ /dev/null @@ -1,131 +0,0 @@ -//Original source: https://github.com/gokyle/marchat - -package signature - -import ( - "crypto/aes" - "crypto/cipher" - "crypto/rand" - "crypto/sha256" - "fmt" - "io" -) - -const KeySize = 16 - -var ( - ErrPadding = fmt.Errorf("invalid padding") - ErrRandomFailure = fmt.Errorf("failed to read enough random data") - ErrInvalidIV = fmt.Errorf("invalid IV") -) - -func Decrypt(key string, encryptedMessage []byte) ([]byte, error) { - cypher, err := aes.NewCipher(getEncryptionKey(key)) - if err != nil { - return nil, err - } - - clonedEncryptedMessage := make([]byte, len(encryptedMessage)) - copy(clonedEncryptedMessage, encryptedMessage) - - if len(clonedEncryptedMessage) < aes.BlockSize { - return nil, ErrInvalidIV - } - - iv := clonedEncryptedMessage[:aes.BlockSize] - message := clonedEncryptedMessage[aes.BlockSize:] - cbc := cipher.NewCBCDecrypter(cypher, iv) - cbc.CryptBlocks(message, message) - return unpadBuffer(message) -} - -func DigestBytes(message []byte) []byte { - hasher := sha256.New() - hasher.Write(message) - hashedKey := hasher.Sum(nil) - - return hashedKey -} - -func Encrypt(key string, message []byte) ([]byte, error) { - cypher, err := aes.NewCipher(getEncryptionKey(key)) - if err != nil { - return nil, err - } - - iv, err := generateIV() - if err != nil { - return nil, err - } - - paddedMessage, err := padBuffer(message) - if err != nil { - return nil, err - } - - cbc := cipher.NewCBCEncrypter(cypher, iv) - cbc.CryptBlocks(paddedMessage, paddedMessage) - encryptedMessage := append(iv, paddedMessage...) - - return encryptedMessage, nil -} - -func getEncryptionKey(key string) []byte { - hasher := sha256.New() - io.WriteString(hasher, key) - hashedKey := hasher.Sum(nil) - return []byte(hashedKey)[:16] -} - -func generateIV() ([]byte, error) { - return random(aes.BlockSize) -} - -func random(size int) ([]byte, error) { - randomBytes := make([]byte, size) - n, err := rand.Read(randomBytes) - if err != nil { - return []byte{}, err - } else if size != n { - err = ErrRandomFailure - } - return randomBytes, err -} - -func padBuffer(message []byte) ([]byte, error) { - messageLen := len(message) - - paddedMessage := make([]byte, messageLen) - copy(paddedMessage, message) - - if len(paddedMessage) != messageLen { - return paddedMessage, ErrPadding - } - - bytesToPad := aes.BlockSize - messageLen%aes.BlockSize - - paddedMessage = append(paddedMessage, 0x80) - for i := 1; i < bytesToPad; i++ { - paddedMessage = append(paddedMessage, 0x0) - } - return paddedMessage, nil -} - -func unpadBuffer(paddedMessage []byte) ([]byte, error) { - message := paddedMessage - var paddedMessageLen int - origLen := len(message) - - for paddedMessageLen = origLen - 1; paddedMessageLen >= 0; paddedMessageLen-- { - if message[paddedMessageLen] == 0x80 { - break - } - - if message[paddedMessageLen] != 0x0 || (origLen-paddedMessageLen) > aes.BlockSize { - err := ErrPadding - return nil, err - } - } - message = message[:paddedMessageLen] - return message, nil -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/symmetric_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/symmetric_test.go deleted file mode 100644 index 70ce615..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/loggregatorlib/signature/symmetric_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package signature - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Encryption", func() { - var message = []byte("Super secret message that no one should read") - - It("encrypts and decrypts with a 'long' key", func() { - key := "aaaaaaaaaaaaaaaa" - encrypted, err := Encrypt(key, message) - Expect(err).NotTo(HaveOccurred()) - - decrypted, err := Decrypt(key, encrypted) - Expect(err).NotTo(HaveOccurred()) - - Expect(decrypted).To(Equal(message)) - Expect(encrypted).NotTo(Equal(message)) - }) - - It("encrypts and decrypts with a 'short' key", func() { - key := "short key" - encrypted, err := Encrypt(key, message) - Expect(err).NotTo(HaveOccurred()) - - decrypted, err := Decrypt(key, encrypted) - Expect(err).NotTo(HaveOccurred()) - - Expect(decrypted).To(Equal(message)) - Expect(encrypted).NotTo(Equal(message)) - }) - - It("fails to decrypt with the wrong key", func() { - key := "short key" - encrypted, err := Encrypt(key, message) - Expect(err).NotTo(HaveOccurred()) - - _, err = Decrypt("wrong key", encrypted) - Expect(err).To(HaveOccurred()) - }) - - It("is non-deterministic", func() { - key := "aaaaaaaaaaaaaaaa" - encrypted1, err := Encrypt(key, message) - Expect(err).NotTo(HaveOccurred()) - - encrypted2, err := Encrypt(key, message) - Expect(err).NotTo(HaveOccurred()) - - Expect(encrypted1).NotTo(Equal(encrypted2)) - }) - - It("correctly computes a digest", func() { - Expect(DigestBytes([]byte("some-key"))).To(Equal([]byte{0x68, 0x2f, 0x66, 0x97, 0xfa, 0x93, 0xec, 0xa6, 0xc8, 0x1, 0xa2, 0x32, 0x51, 0x9a, 0x9, 0xe3, 0xfe, 0xc, 0x5c, 0x33, 0x94, 0x65, 0xee, 0x53, 0xc3, 0xf9, 0xed, 0xf9, 0x2f, 0xd0, 0x1f, 0x35})) - }) - - It("deterministically computes the actual encryption key", func() { - key := "12345" - Expect(getEncryptionKey(key)).To(Equal([]byte{0x59, 0x94, 0x47, 0x1a, 0xbb, 0x1, 0x11, 0x2a, 0xfc, 0xc1, 0x81, 0x59, 0xf6, 0xcc, 0x74, 0xb4})) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/.gitignore b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/.gitignore deleted file mode 100644 index 11cd96f..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.coverprofile -src/ -pkg/ -.idea -*.iml diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/.travis.yml b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/.travis.yml deleted file mode 100644 index 8672387..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: go -notifications: - email: - - cf-lamb@pivotallabs.com -before_install: -- go get golang.org/x/tools/cmd/cover golang.org/x/tools/cmd/vet -- go get github.com/mattn/goveralls -- go get github.com/onsi/ginkgo/ginkgo -after_success: -- 'echo "mode: set" > all.coverprofile' -- 'find . -name "*.coverprofile" -exec grep -v mode: {} >> all.coverprofile \;' -- PATH=$HOME/gopath/bin:$PATH goveralls -coverprofile=all.coverprofile -repotoken=$COVERALLS_TOKEN -install: -- go get -d -v -t ./... - -script: PATH=$HOME/gopath/bin:$PATH bin/test - -go: -- 1.4 -- tip - -matrix: - allow_failures: - - go: tip - -env: - global: - secure: wulSvmmwbaIe8APoYwTjN6zLFdIXYrazmBTOuFpyui0BUpxmKdXJ/hEMVVI0p3BvehYkKU+xVrjjBc3/IZgUXFybM9MwYQ+CH4wtsMSp0ndHnzkYGaxut1kUXb+e5edjJ5bOi9Xy9qGxeH9rqpl/F1z4piGnujd2jJjVTlwVXGM= diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/README.md b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/README.md deleted file mode 100644 index 2485feb..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/README.md +++ /dev/null @@ -1,76 +0,0 @@ -#NOAA - -[![Build Status](https://travis-ci.org/cloudfoundry/noaa.svg?branch=master)](https://travis-ci.org/cloudfoundry/noaa) -[![Coverage Status](https://coveralls.io/repos/cloudfoundry/noaa/badge.png)](https://coveralls.io/r/cloudfoundry/noaa) -[![GoDoc](https://godoc.org/github.com/cloudfoundry/noaa?status.png)](https://godoc.org/github.com/cloudfoundry/noaa) - -NOAA is a client library to consume metric and log messages from Doppler. - -##WARNING - -This library does not work with Go 1.3 through 1.3.3, due to a bug in the standard libraries. - -##Usage - -See the included sample applications. In order to use the samples, you will have to export the following environment variable: - -* `CF_ACCESS_TOKEN` - You can get this value by executing (`$ cf oauth-token`). Example: - -```bash -export CF_ACCESS_TOKEN="bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI3YmM2MzllOC0wZGM0LTQ4YzItYTAzYS0xYjkyYzRhMWFlZTIiLCJzdWIiOiI5YTc5MTVkOS04MDc1LTQ3OTUtOTBmOS02MGM0MTU0YTJlMDkiLCJzY29wZSI6WyJzY2ltLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLmFkbWluIiwicGFzc3dvcmQud3JpdGUiLCJzY2ltLndyaXRlIiwib3BlbmlkIiwiY2xvdWRfY29udHJvbGxlci53cml0ZSIsImNsb3VkX2NvbnRyb2xsZXIucmVhZCJdLCJjbGllbnRfaWQiOiJjZiIsImNpZCI6ImNmIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjlhNzkxNWQ5LTgwNzUtNDc5NS05MGY5LTYwYzQxNTRhMmUwOSIsInVzZXJfbmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbiIsImlhdCI6MTQwNDg0NzU3NywiZXhwIjoxNDA0ODQ4MTc3LCJpc3MiOiJodHRwczovL3VhYS4xMC4yNDQuMC4zNC54aXAuaW8vb2F1dGgvdG9rZW4iLCJhdWQiOlsic2NpbSIsIm9wZW5pZCIsImNsb3VkX2NvbnRyb2xsZXIiLCJwYXNzd29yZCJdfQ.mAaOJthCotW763lf9fysygqdES_Mz1KFQ3HneKbwY4VJx-ARuxxiLh8l_8Srx7NJBwGlyEtfYOCBcIdvyeDCiQ0wT78Zw7ZJYFjnJ5-ZkDy5NbMqHbImDFkHRnPzKFjJHip39jyjAZpkFcrZ8_pUD8XxZraqJ4zEf6LFdAHKFBM" -``` - -* `DOPPLER_ADDR` - It is based on your environment. Example: - -```bash -export DOPPLER_ADDR="wss://doppler.10.244.0.34.xip.io:443" -``` - -###Application logs - -The `sample/main.go` application streams logs for a particular app. The following environment variable needs to be set: - -* `APP_GUID` - You can get this value from running `$ cf app APP --guid`. Example: - -``` -export APP_GUID=55fdb274-d6c9-4b8c-9b1f-9b7e7f3a346c -``` - -Then you can run the sample app like this: - -``` -go build -o bin/sample sample/main.go -bin/sample -``` - -###Logs and metrics firehose - -The `firehose_sample/main.go` application streams metrics data and logs for all apps. - -You can run the firehose sample app like this: - -``` -go build -o bin/firehose_sample firehose_sample/main.go -bin/firehose_sample -``` - -Multiple subscribers may connect to the firehose endpoint, each with a unique subscription_id (configurable in `main.go`). Each subscriber (in practice, a pool of clients with a common subscription_id) receives the entire stream. For each subscription_id, all data will be distributed evenly among that subscriber's client pool. - - -###Container metrics - -The `container_metrics_sample/main.go` application streams container metrics for the specified appId. - -You can run the container metrics sample app like this: - -``` -go build -o bin/containermetrics_sample container_metrics_sample/main.go -bin/containermetrics_sample -``` - -For more information to setup a test environment in order to pull container metrics look at the README.md in the container_metrics_sample. - -##Development - -Use `go get -d -v -t ./... && ginkgo --race --randomizeAllSpecs --failOnPending --skipMeasurements --cover` to -run the tests. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/bin/test b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/bin/test deleted file mode 100644 index fc99068..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/bin/test +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -e - -SCRIPT_DIR=`dirname $0` -cd ${SCRIPT_DIR}/.. - -echo "Go formatting..." -go fmt ./... - -echo "Go vetting..." -go vet ./... - -echo "Recursive ginkgo... ${*:+(with parameter(s) }$*${*:+)}" -ginkgo -r --race --randomizeAllSpecs --failOnPending -cover $* diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer.go deleted file mode 100644 index 13a5815..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer.go +++ /dev/null @@ -1,460 +0,0 @@ -package noaa - -import ( - "bufio" - "bytes" - "crypto/tls" - "errors" - "fmt" - "io/ioutil" - "mime/multipart" - "net" - "net/http" - "net/url" - "regexp" - "strings" - "sync" - "time" - - noaa_errors "github.com/cloudfoundry/noaa/errors" - "github.com/cloudfoundry/sonde-go/events" - "github.com/gogo/protobuf/proto" - "github.com/gorilla/websocket" -) - -var ( - // KeepAlive sets the interval between keep-alive messages sent by the client to loggregator. - KeepAlive = 25 * time.Second - reconnectTimeout = 500 * time.Millisecond - boundaryRegexp = regexp.MustCompile("boundary=(.*)") - ErrNotOK = errors.New("unknown issue when making HTTP request to Loggregator") - ErrNotFound = ErrNotOK // NotFound isn't an accurate description of how this is used; please use ErrNotOK instead - ErrBadResponse = errors.New("bad server response") - ErrBadRequest = errors.New("bad client request") - ErrLostConnection = errors.New("remote server terminated connection unexpectedly") -) - -// Consumer represents the actions that can be performed against traffic controller. -type Consumer struct { - trafficControllerUrl string - tlsConfig *tls.Config - ws *websocket.Conn - callback func() - proxy func(*http.Request) (*url.URL, error) - debugPrinter DebugPrinter - sync.RWMutex - stopChan chan struct{} -} - -// NewConsumer creates a new consumer to a traffic controller. -func NewConsumer(trafficControllerUrl string, tlsConfig *tls.Config, proxy func(*http.Request) (*url.URL, error)) *Consumer { - return &Consumer{trafficControllerUrl: trafficControllerUrl, tlsConfig: tlsConfig, proxy: proxy, debugPrinter: nullDebugPrinter{}, stopChan: make(chan struct{})} -} - -// TailingLogs behaves exactly as TailingLogsWithoutReconnect, except that it retries 5 times if the connection -// to the remote server is lost and returns all errors from each attempt on errorChan. -func (cnsmr *Consumer) TailingLogs(appGuid string, authToken string, outputChan chan<- *events.LogMessage, errorChan chan<- error) { - action := func() error { - return cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, outputChan) - } - - cnsmr.retryAction(action, errorChan) -} - -// TailingLogsWithoutReconnect listens indefinitely for log messages only; other event types are dropped. -// -// If you wish to be able to terminate the listen early, run TailingLogsWithoutReconnect in a Goroutine and -// call Close() when you are finished listening. -// -// Messages are presented in the order received from the loggregator server. Chronological or -// other ordering is not guaranteed. It is the responsibility of the consumer of these channels -// to provide any desired sorting mechanism. -func (cnsmr *Consumer) TailingLogsWithoutReconnect(appGuid string, authToken string, outputChan chan<- *events.LogMessage) error { - allEvents := make(chan *events.Envelope) - - streamPath := fmt.Sprintf("/apps/%s/stream", appGuid) - errChan := make(chan error) - go func() { - err := cnsmr.stream(streamPath, authToken, allEvents) - errChan <- err - close(errChan) - }() - - go func() { - defer close(allEvents) - - for event := range allEvents { - if *event.EventType == events.Envelope_LogMessage { - outputChan <- event.GetLogMessage() - } - } - }() - - return <-errChan -} - -// Stream behaves exactly as StreamWithoutReconnect, except that it retries 5 times if the connection -// to the remote server is lost. -func (cnsmr *Consumer) Stream(appGuid string, authToken string, outputChan chan<- *events.Envelope, errorChan chan<- error) { - action := func() error { - return cnsmr.StreamWithoutReconnect(appGuid, authToken, outputChan) - } - - cnsmr.retryAction(action, errorChan) -} - -// StreamWithoutReconnect listens indefinitely for all log and event messages. -// -// If you wish to be able to terminate the listen early, run StreamWithoutReconnect in a Goroutine and -// call Close() when you are finished listening. -// -// Messages are presented in the order received from the loggregator server. Chronological or other ordering -// is not guaranteed. It is the responsibility of the consumer of these channels to provide any desired sorting -// mechanism. -func (cnsmr *Consumer) StreamWithoutReconnect(appGuid string, authToken string, outputChan chan<- *events.Envelope) error { - streamPath := fmt.Sprintf("/apps/%s/stream", appGuid) - return cnsmr.stream(streamPath, authToken, outputChan) -} - -// Firehose behaves exactly as FirehoseWithoutReconnect, except that it retries 5 times if the connection -// to the remote server is lost. -func (cnsmr *Consumer) Firehose(subscriptionId string, authToken string, outputChan chan<- *events.Envelope, errorChan chan<- error) { - action := func() error { - return cnsmr.FirehoseWithoutReconnect(subscriptionId, authToken, outputChan) - } - - cnsmr.retryAction(action, errorChan) -} - -// FirehoseWithoutReconnect streams all data. All clients with the same subscriptionId will receive a proportionate share of the -// message stream. Each pool of clients will receive the entire stream. -// -// If you wish to be able to terminate the listen early, run FirehoseWithoutReconnect in a Goroutine and -// call Close() when you are finished listening. -// -// Messages are presented in the order received from the loggregator server. Chronological or other ordering -// is not guaranteed. It is the responsibility of the consumer of these channels to provide any desired sorting -// mechanism. -func (cnsmr *Consumer) FirehoseWithoutReconnect(subscriptionId string, authToken string, outputChan chan<- *events.Envelope) error { - streamPath := "/firehose/" + subscriptionId - return cnsmr.stream(streamPath, authToken, outputChan) -} - -func (cnsmr *Consumer) stream(streamPath string, authToken string, outputChan chan<- *events.Envelope) error { - var err error - - cnsmr.Lock() - cnsmr.ws, err = cnsmr.establishWebsocketConnection(streamPath, authToken) - cnsmr.Unlock() - - if err != nil { - return err - } - - return cnsmr.listenForMessages(outputChan) -} - -func makeError(err error, code int32) *events.Envelope { - return &events.Envelope{ - EventType: events.Envelope_Error.Enum(), - Error: &events.Error{ - Source: proto.String("NOAA"), - Code: &code, - Message: proto.String(err.Error()), - }, - } -} - -// RecentLogs connects to traffic controller via its 'recentlogs' http(s) endpoint and returns a slice of recent messages. -// It does not guarantee any order of the messages; they are in the order returned by traffic controller. -// -// The SortRecent method is provided to sort the data returned by this method. -func (cnsmr *Consumer) RecentLogs(appGuid string, authToken string) ([]*events.LogMessage, error) { - envelopes, err := cnsmr.readEnvelopesFromTrafficController(appGuid, authToken, "recentlogs") - - if err != nil { - return nil, err - } - - messages := make([]*events.LogMessage, 0, 200) - for _, envelope := range envelopes { - messages = append(messages, envelope.GetLogMessage()) - } - - return messages, err -} - -// ContainerMetrics connects to traffic controller via its 'containermetrics' http(s) endpoint and returns the most recent messages for an app. -// The returned metrics will be sorted by InstanceIndex. -func (cnsmr *Consumer) ContainerMetrics(appGuid string, authToken string) ([]*events.ContainerMetric, error) { - envelopes, err := cnsmr.readEnvelopesFromTrafficController(appGuid, authToken, "containermetrics") - - if err != nil { - return nil, err - } - - messages := make([]*events.ContainerMetric, 0, 200) - - for _, envelope := range envelopes { - if envelope.GetEventType() == events.Envelope_LogMessage { - return []*events.ContainerMetric{}, errors.New(fmt.Sprintf("Upstream error: %s", envelope.GetLogMessage().GetMessage())) - } - - messages = append(messages, envelope.GetContainerMetric()) - } - - SortContainerMetrics(messages) - - return messages, err -} - -func (cnsmr *Consumer) readEnvelopesFromTrafficController(appGuid string, authToken string, endpoint string) ([]*events.Envelope, error) { - trafficControllerUrl, err := url.ParseRequestURI(cnsmr.trafficControllerUrl) - if err != nil { - return nil, err - } - - scheme := "https" - - if trafficControllerUrl.Scheme == "ws" { - scheme = "http" - } - - recentPath := fmt.Sprintf("%s://%s/apps/%s/%s", scheme, trafficControllerUrl.Host, appGuid, endpoint) - transport := &http.Transport{Proxy: cnsmr.proxy, TLSClientConfig: cnsmr.tlsConfig} - client := &http.Client{Transport: transport} - - req, _ := http.NewRequest("GET", recentPath, nil) - req.Header.Set("Authorization", authToken) - - resp, err := client.Do(req) - - if err != nil { - return nil, errors.New(fmt.Sprintf("Error dialing traffic controller server: %s.\nPlease ask your Cloud Foundry Operator to check the platform configuration (traffic controller endpoint is %s).", err.Error(), cnsmr.trafficControllerUrl)) - } - - defer resp.Body.Close() - - err = checkForErrors(resp) - if err != nil { - return nil, err - } - - reader, err := getMultipartReader(resp) - if err != nil { - return nil, err - } - - var envelopes []*events.Envelope - var buffer bytes.Buffer - - for part, loopErr := reader.NextPart(); loopErr == nil; part, loopErr = reader.NextPart() { - buffer.Reset() - - _, err := buffer.ReadFrom(part) - if err != nil { - break - } - - envelope := new(events.Envelope) - proto.Unmarshal(buffer.Bytes(), envelope) - - envelopes = append(envelopes, envelope) - } - - return envelopes, nil -} - -func checkForErrors(resp *http.Response) error { - if resp.StatusCode == http.StatusUnauthorized { - data, _ := ioutil.ReadAll(resp.Body) - return noaa_errors.NewUnauthorizedError(string(data)) - } - - if resp.StatusCode == http.StatusBadRequest { - return ErrBadRequest - } - - if resp.StatusCode != http.StatusOK { - return ErrNotOK - } - return nil -} - -func getMultipartReader(resp *http.Response) (*multipart.Reader, error) { - contentType := resp.Header.Get("Content-Type") - - if len(strings.TrimSpace(contentType)) == 0 { - return nil, ErrBadResponse - } - - matches := boundaryRegexp.FindStringSubmatch(contentType) - - if len(matches) != 2 || len(strings.TrimSpace(matches[1])) == 0 { - return nil, ErrBadResponse - } - reader := multipart.NewReader(resp.Body, matches[1]) - return reader, nil -} - -// Close terminates the websocket connection to traffic controller. -func (cnsmr *Consumer) Close() error { - cnsmr.Lock() - defer cnsmr.Unlock() - defer close(cnsmr.stopChan) - if cnsmr.ws == nil { - return errors.New("connection does not exist") - } - - cnsmr.ws.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""), time.Time{}) - return cnsmr.ws.Close() -} - -// SetOnConnectCallback sets a callback function to be called with the websocket connection is established. -func (cnsmr *Consumer) SetOnConnectCallback(cb func()) { - cnsmr.callback = cb -} - -// SetDebugPrinter enables logging of the websocket handshake. -func (cnsmr *Consumer) SetDebugPrinter(debugPrinter DebugPrinter) { - cnsmr.debugPrinter = debugPrinter -} - -func (cnsmr *Consumer) listenForMessages(msgChan chan<- *events.Envelope) error { - defer cnsmr.ws.Close() - - for { - _, data, err := cnsmr.ws.ReadMessage() - if err != nil { - return err - } - - envelope := &events.Envelope{} - err = proto.Unmarshal(data, envelope) - if err != nil { - continue - } - - msgChan <- envelope - } -} - -func headersString(header http.Header) string { - var result string - for name, values := range header { - result += name + ": " + strings.Join(values, ", ") + "\n" - } - return result -} - -func (cnsmr *Consumer) establishWebsocketConnection(path string, authToken string) (*websocket.Conn, error) { - header := http.Header{"Origin": []string{"http://localhost"}, "Authorization": []string{authToken}} - - dialer := websocket.Dialer{NetDial: cnsmr.proxyDial, TLSClientConfig: cnsmr.tlsConfig} - - url := cnsmr.trafficControllerUrl + path - - cnsmr.debugPrinter.Print("WEBSOCKET REQUEST:", - "GET "+path+" HTTP/1.1\n"+ - "Host: "+cnsmr.trafficControllerUrl+"\n"+ - "Upgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Version: 13\nSec-WebSocket-Key: [HIDDEN]\n"+ - headersString(header)) - - ws, resp, err := dialer.Dial(url, header) - - if resp != nil { - cnsmr.debugPrinter.Print("WEBSOCKET RESPONSE:", - resp.Proto+" "+resp.Status+"\n"+ - headersString(resp.Header)) - } - - if resp != nil && resp.StatusCode == http.StatusUnauthorized { - bodyData, _ := ioutil.ReadAll(resp.Body) - err = noaa_errors.NewUnauthorizedError(string(bodyData)) - return ws, err - } - - if err == nil && cnsmr.callback != nil { - cnsmr.callback() - } - - if err != nil { - - return nil, errors.New(fmt.Sprintf("Error dialing traffic controller server: %s.\nPlease ask your Cloud Foundry Operator to check the platform configuration (traffic controller is %s).", err.Error(), cnsmr.trafficControllerUrl)) - } - - return ws, err -} - -func (cnsmr *Consumer) proxyDial(network, addr string) (net.Conn, error) { - targetUrl, err := url.Parse("http://" + addr) - if err != nil { - return nil, err - } - - proxy := cnsmr.proxy - if proxy == nil { - proxy = http.ProxyFromEnvironment - } - - proxyUrl, err := proxy(&http.Request{URL: targetUrl}) - if err != nil { - return nil, err - } - if proxyUrl == nil { - return net.Dial(network, addr) - } - - proxyConn, err := net.Dial(network, proxyUrl.Host) - if err != nil { - return nil, err - } - - connectReq := &http.Request{ - Method: "CONNECT", - URL: targetUrl, - Host: targetUrl.Host, - Header: make(http.Header), - } - connectReq.Write(proxyConn) - - connectResp, err := http.ReadResponse(bufio.NewReader(proxyConn), connectReq) - if err != nil { - proxyConn.Close() - return nil, err - } - if connectResp.StatusCode != http.StatusOK { - f := strings.SplitN(connectResp.Status, " ", 2) - proxyConn.Close() - return nil, errors.New(f[1]) - } - - return proxyConn, nil -} - -func (cnsmr *Consumer) retryAction(action func() error, errorChan chan<- error) { - reconnectAttempts := 0 - - oldConnectCallback := cnsmr.callback - defer func() { cnsmr.callback = oldConnectCallback }() - - defer close(errorChan) - - cnsmr.callback = func() { - reconnectAttempts = 0 - if oldConnectCallback != nil { - oldConnectCallback() - } - } - - for ; reconnectAttempts < 5; reconnectAttempts++ { - select { - case <-cnsmr.stopChan: - return - default: - } - - errorChan <- action() - time.Sleep(reconnectTimeout) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer_proxy_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer_proxy_test.go deleted file mode 100644 index b22bee5..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer_proxy_test.go +++ /dev/null @@ -1,200 +0,0 @@ -package noaa_test - -import ( - "bytes" - "crypto/tls" - "errors" - "log" - "net/http" - "net/http/httptest" - "net/url" - "strings" - "time" - - "github.com/cloudfoundry/loggregatorlib/loggertesthelper" - "github.com/cloudfoundry/loggregatorlib/server/handlers" - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/sonde-go/events" - "github.com/elazarl/goproxy" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Noaa behind a Proxy", func() { - var ( - connection *noaa.Consumer - endpoint string - testServer *httptest.Server - tlsSettings *tls.Config - consumerProxyFunc func(*http.Request) (*url.URL, error) - - appGuid string - authToken string - incomingChan chan *events.Envelope - messagesToSend chan []byte - testProxyServer *httptest.Server - goProxyHandler *goproxy.ProxyHttpServer - - err error - ) - - BeforeEach(func() { - messagesToSend = make(chan []byte, 256) - - testServer = httptest.NewServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - endpoint = "ws://" + testServer.Listener.Addr().String() - goProxyHandler = goproxy.NewProxyHttpServer() - goProxyHandler.Logger = log.New(bytes.NewBufferString(""), "", 0) - testProxyServer = httptest.NewServer(goProxyHandler) - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return url.Parse(testProxyServer.URL) - } - }) - - AfterEach(func() { - consumerProxyFunc = nil - if testProxyServer != nil { - testProxyServer.Close() - } - if testServer != nil { - testServer.Close() - } - }) - - Describe("StreamWithoutReconnect", func() { - var errorChan chan error - var finishedChan chan struct{} - - BeforeEach(func() { - errorChan = make(chan error, 10) - finishedChan = make(chan struct{}) - incomingChan = make(chan *events.Envelope) - }) - - AfterEach(func() { - close(messagesToSend) - <-finishedChan - }) - - perform := func() { - connection = noaa.NewConsumer(endpoint, tlsSettings, consumerProxyFunc) - - go func() { - errorChan <- connection.StreamWithoutReconnect(appGuid, authToken, incomingChan) - close(finishedChan) - }() - } - - It("connects using valid URL to running consumerProxyFunc server", func() { - messagesToSend <- marshalMessage(createMessage("hello", 0)) - perform() - - message := <-incomingChan - - Expect(message.GetLogMessage().GetMessage()).To(Equal([]byte("hello"))) - }) - - It("connects using valid URL to a stopped consumerProxyFunc server", func() { - testProxyServer.Close() - - perform() - - for { - select { - case err := <-errorChan: - if strings.Contains(err.Error(), "connection refused") { - return - } - case <-time.After(time.Second): - Fail("never received an error") - } - } - }) - - It("connects using invalid URL", func() { - errMsg := "Invalid consumerProxyFunc URL" - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return nil, errors.New(errMsg) - } - - perform() - - var err error - Eventually(errorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring(errMsg)) - }) - - It("connects to a consumerProxyFunc server rejecting CONNECT requests", func() { - goProxyHandler.OnRequest().HandleConnect(goproxy.AlwaysReject) - - perform() - - var err error - Eventually(errorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Error dialing traffic controller server")) - }) - - It("connects to a non-consumerProxyFunc server", func() { - nonProxyServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - http.Error(w, "Go away, I am not a consumerProxyFunc!", http.StatusBadRequest) - })) - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return url.Parse(nonProxyServer.URL) - } - - perform() - - var err error - Eventually(errorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring(http.StatusText(http.StatusBadRequest))) - }) - }) - - Describe("RecentLogs", func() { - var httpTestServer *httptest.Server - var incomingMessages []*events.LogMessage - - perform := func() { - close(messagesToSend) - connection = noaa.NewConsumer(endpoint, tlsSettings, consumerProxyFunc) - incomingMessages, err = connection.RecentLogs(appGuid, authToken) - } - - BeforeEach(func() { - httpTestServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())) - endpoint = "ws://" + httpTestServer.Listener.Addr().String() - }) - - AfterEach(func() { - httpTestServer.Close() - }) - - It("returns messages from the server", func() { - messagesToSend <- marshalMessage(createMessage("test-message-0", 0)) - messagesToSend <- marshalMessage(createMessage("test-message-1", 0)) - - perform() - - Expect(err).NotTo(HaveOccurred()) - Expect(incomingMessages).To(HaveLen(2)) - Expect(incomingMessages[0].GetMessage()).To(Equal([]byte("test-message-0"))) - Expect(incomingMessages[1].GetMessage()).To(Equal([]byte("test-message-1"))) - }) - - It("connects using failing proxyFunc", func() { - errMsg := "Invalid consumerProxyFunc URL" - consumerProxyFunc = func(*http.Request) (*url.URL, error) { - return nil, errors.New(errMsg) - } - - perform() - - Expect(err).To(HaveOccurred(), "THIS WILL FAIL ON GOLANG 1.3 - 1.3.3 DUE TO BUG IN STANDARD LIBRARY (see https://code.google.com/p/go/issues/detail?id=8755)") - Expect(err.Error()).To(ContainSubstring(errMsg)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer_test.go deleted file mode 100644 index b9ac869..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/consumer_test.go +++ /dev/null @@ -1,1372 +0,0 @@ -package noaa_test - -import ( - "bytes" - "crypto/tls" - "fmt" - "log" - "net/http" - "net/http/httptest" - "net/url" - "sync" - "time" - - "github.com/cloudfoundry/loggregatorlib/loggertesthelper" - "github.com/cloudfoundry/loggregatorlib/server/handlers" - "github.com/cloudfoundry/noaa" - noaa_errors "github.com/cloudfoundry/noaa/errors" - "github.com/cloudfoundry/sonde-go/events" - "github.com/gogo/protobuf/proto" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Noaa", func() { - var ( - cnsmr *noaa.Consumer - trafficControllerUrl string - testServer *httptest.Server - fakeHandler *FakeHandler - tlsSettings *tls.Config - consumerProxyFunc func(*http.Request) (*url.URL, error) - - appGuid string - authToken string - messagesToSend chan []byte - - err error - ) - - BeforeSuite(func() { - buf := &bytes.Buffer{} - log.SetOutput(buf) - }) - - BeforeEach(func() { - messagesToSend = make(chan []byte, 256) - }) - - AfterEach(func() { - if testServer != nil { - testServer.Close() - } - }) - - Describe("SetOnConnectCallback", func() { - BeforeEach(func() { - testServer = httptest.NewServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - close(messagesToSend) - }) - - It("sets a callback and calls it when connecting", func() { - called := false - cb := func() { called = true } - - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, nil) - cnsmr.SetOnConnectCallback(cb) - - logChan := make(chan *events.LogMessage, 100) - cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, logChan) - - Eventually(func() bool { return called }).Should(BeTrue()) - }) - - Context("when the connection fails", func() { - It("does not call the callback", func() { - trafficControllerUrl = "!!!bad-url" - - called := false - cb := func() { called = true } - - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, nil) - cnsmr.SetOnConnectCallback(cb) - logChan := make(chan *events.LogMessage, 100) - cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, logChan) - - Consistently(func() bool { return called }).Should(BeFalse()) - }) - }) - - Context("when authorization fails", func() { - var failer authFailer - var trafficControllerUrl string - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("does not call the callback", func() { - called := false - cb := func() { called = true } - - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, nil) - cnsmr.SetOnConnectCallback(cb) - logChan := make(chan *events.LogMessage, 100) - cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, logChan) - - Consistently(func() bool { return called }).Should(BeFalse()) - }) - - }) - }) - - var startFakeTrafficController = func() { - fakeHandler = &FakeHandler{ - InputChan: make(chan []byte, 10), - GenerateHandler: func(input chan []byte) http.Handler { - return handlers.NewWebsocketHandler(input, 100*time.Millisecond, loggertesthelper.Logger()) - }, - } - - testServer = httptest.NewServer(fakeHandler) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - appGuid = "app-guid" - } - - Describe("Debug Printing", func() { - var debugPrinter *fakeDebugPrinter - - BeforeEach(func() { - startFakeTrafficController() - - debugPrinter = &fakeDebugPrinter{} - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - cnsmr.SetDebugPrinter(debugPrinter) - }) - - It("includes websocket handshake", func() { - fakeHandler.Close() - - logChan := make(chan *events.LogMessage, 100) - cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, logChan) - - Eventually(func() int { return len(debugPrinter.Messages) }).Should(BeNumerically(">=", 1)) - Expect(debugPrinter.Messages[0].Body).To(ContainSubstring("Sec-WebSocket-Version: 13")) - }) - - It("does not include messages sent or received", func() { - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - - fakeHandler.Close() - logChan := make(chan *events.LogMessage, 100) - cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, logChan) - - Eventually(func() int { return len(debugPrinter.Messages) }).Should(BeNumerically(">=", 1)) - Expect(debugPrinter.Messages[0].Body).ToNot(ContainSubstring("hello")) - }) - }) - - Describe("TailingLogsWithoutReconnect", func() { - var logMessageChan chan *events.LogMessage - var errorChan chan error - var finishedChan chan struct{} - - perform := func() { - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - - errorChan = make(chan error, 10) - logMessageChan = make(chan *events.LogMessage) - go func() { - errorChan <- cnsmr.TailingLogsWithoutReconnect(appGuid, authToken, logMessageChan) - close(finishedChan) - }() - } - - BeforeEach(func() { - finishedChan = make(chan struct{}) - startFakeTrafficController() - }) - - AfterEach(func() { - cnsmr.Close() - <-finishedChan - }) - - Context("when there is no TLS Config or consumerProxyFunc setting", func() { - Context("when the connection can be established", func() { - It("receives messages on the incoming channel", func(done Done) { - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - - perform() - message := <-logMessageChan - - Expect(message.GetMessage()).To(Equal([]byte("hello"))) - fakeHandler.Close() - - close(done) - }) - - It("does not include metrics", func(done Done) { - fakeHandler.InputChan <- marshalMessage(createContainerMetric(int32(1), int64(2))) - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - - perform() - message := <-logMessageChan - - Expect(message.GetMessage()).To(Equal([]byte("hello"))) - fakeHandler.Close() - - close(done) - }) - - It("sends messages for a specific app", func() { - appGuid = "the-app-guid" - perform() - fakeHandler.Close() - - Eventually(fakeHandler.getLastURL).Should(ContainSubstring("/apps/the-app-guid/stream")) - }) - - It("sends an Authorization header with an access token", func() { - authToken = "auth-token" - perform() - fakeHandler.Close() - - Eventually(fakeHandler.getAuthHeader).Should(Equal("auth-token")) - }) - - Context("when remote connection dies unexpectedly", func() { - It("receives a message on the error channel", func(done Done) { - perform() - fakeHandler.Close() - - var err error - Eventually(errorChan).Should(Receive(&err)) - Expect(err.Error()).To(ContainSubstring("EOF")) - - close(done) - }) - }) - - Context("when the message fails to parse", func() { - It("skips that message but continues to read messages", func(done Done) { - fakeHandler.InputChan <- []byte{0} - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - perform() - fakeHandler.Close() - - message := <-logMessageChan - - Expect(message.GetMessage()).To(Equal([]byte("hello"))) - - close(done) - }) - }) - }) - - Context("when the connection cannot be established", func() { - BeforeEach(func() { - trafficControllerUrl = "!!!bad-url" - }) - - It("receives an error on errChan", func(done Done) { - perform() - - var err error - Eventually(errorChan).Should(Receive(&err)) - Expect(err.Error()).To(ContainSubstring("Please ask your Cloud Foundry Operator")) - - close(done) - }) - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a helpful error message", func() { - perform() - - var err error - Eventually(errorChan).Should(Receive(&err)) - Expect(err.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - }) - }) - }) - - Context("when SSL settings are passed in", func() { - BeforeEach(func() { - testServer = httptest.NewTLSServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - trafficControllerUrl = "wss://" + testServer.Listener.Addr().String() - - tlsSettings = &tls.Config{InsecureSkipVerify: true} - }) - - It("connects using those settings", func() { - perform() - close(messagesToSend) - - Expect(err).NotTo(HaveOccurred()) - }) - }) - - Context("when error source is not NOAA", func() { - It("does not pass on the error", func(done Done) { - fakeHandler.InputChan <- marshalMessage(createError("foreign error")) - - perform() - - Consistently(errorChan).Should(BeEmpty()) - fakeHandler.Close() - - close(done) - }) - - It("continues to process log messages", func() { - fakeHandler.InputChan <- marshalMessage(createError("foreign error")) - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - - perform() - fakeHandler.Close() - - Eventually(logMessageChan).Should(Receive()) - }) - }) - }) - - Describe("TailingLogs", func() { - var logMessageChan chan *events.LogMessage - var errorChan chan error - var doneChan chan struct{} - - perform := func() { - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - logMessageChan = make(chan *events.LogMessage) - errorChan = make(chan error, 10) - doneChan = make(chan struct{}) - go func() { - cnsmr.TailingLogs(appGuid, authToken, logMessageChan, errorChan) - close(doneChan) - }() - } - - BeforeEach(func() { - startFakeTrafficController() - }) - - It("attempts to connect five times", func() { - fakeHandler.fail = true - perform() - - fakeHandler.Close() - - Eventually(errorChan, 3).Should(HaveLen(5)) - Eventually(doneChan, 10).Should(BeClosed()) - }) - - It("waits 500ms before reconnecting", func() { - perform() - - fakeHandler.Close() - start := time.Now() - Eventually(errorChan, 3).Should(HaveLen(5)) - end := time.Now() - Expect(end).To(BeTemporally(">=", start.Add(4*500*time.Millisecond))) - cnsmr.Close() - Eventually(doneChan, 5).Should(BeClosed()) - }) - - It("resets the attempt counter after a successful connection", func(done Done) { - perform() - - fakeHandler.InputChan <- marshalMessage(createMessage("message 1", 0)) - Eventually(logMessageChan).Should(Receive()) - - fakeHandler.Close() - - expectedErrorCount := 4 - Eventually(errorChan, 3*time.Second).Should(HaveLen(expectedErrorCount)) - fakeHandler.Reset() - - for i := 0; i < expectedErrorCount; i++ { - <-errorChan - } - - fakeHandler.InputChan <- marshalMessage(createMessage("message 2", 0)) - - Eventually(logMessageChan).Should(Receive()) - fakeHandler.Close() - Eventually(errorChan, 3).Should(HaveLen(5)) - - cnsmr.Close() - Eventually(doneChan, 5).Should(BeClosed()) - close(done) - }, 10) - - It("will not attempt reconnect if consumer is closed", func() { - fakeHandler.fail = true - - perform() - Eventually(errorChan).Should(Receive()) - Expect(fakeHandler.wasCalled()).To(BeTrue()) - fakeHandler.Reset() - cnsmr.Close() - - Eventually(errorChan).Should(BeClosed()) - Consistently(fakeHandler.wasCalled, 2).Should(BeFalse()) - Eventually(doneChan, 5).Should(BeClosed()) - }) - }) - - Describe("StreamWithoutReconnect", func() { - var incomingChan chan *events.Envelope - var streamErrorChan chan error - var finishedChan chan struct{} - - perform := func() { - streamErrorChan = make(chan error, 10) - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - go func() { - streamErrorChan <- cnsmr.StreamWithoutReconnect(appGuid, authToken, incomingChan) - close(finishedChan) - }() - } - - BeforeEach(func() { - incomingChan = make(chan *events.Envelope) - finishedChan = make(chan struct{}) - startFakeTrafficController() - }) - - AfterEach(func() { - cnsmr.Close() - <-finishedChan - }) - - Context("when there is no TLS Config or consumerProxyFunc setting", func() { - Context("when the connection can be established", func() { - It("receives messages on the incoming channel", func(done Done) { - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - - perform() - message := <-incomingChan - - Expect(message.GetLogMessage().GetMessage()).To(Equal([]byte("hello"))) - fakeHandler.Close() - - close(done) - }) - - It("sends messages for a specific app", func() { - appGuid = "the-app-guid" - perform() - fakeHandler.Close() - - Eventually(fakeHandler.getLastURL).Should(ContainSubstring("/apps/the-app-guid/stream")) - }) - - It("sends an Authorization header with an access token", func() { - authToken = "auth-token" - perform() - fakeHandler.Close() - - Eventually(fakeHandler.getAuthHeader).Should(Equal("auth-token")) - }) - - Context("when the message fails to parse", func() { - It("skips that message but continues to read messages", func(done Done) { - fakeHandler.InputChan <- []byte{0} - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - perform() - fakeHandler.Close() - - message := <-incomingChan - - Expect(message.GetLogMessage().GetMessage()).To(Equal([]byte("hello"))) - - close(done) - }) - }) - }) - - Context("when the connection cannot be established", func() { - BeforeEach(func() { - trafficControllerUrl = "!!!bad-url" - }) - - It("returns an error", func(done Done) { - perform() - - var err error - Eventually(streamErrorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Please ask your Cloud Foundry Operator")) - - close(done) - }) - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a helpful error message", func() { - perform() - - var err error - Eventually(streamErrorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - }) - }) - }) - - Context("when SSL settings are passed in", func() { - BeforeEach(func() { - testServer = httptest.NewTLSServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - trafficControllerUrl = "wss://" + testServer.Listener.Addr().String() - - tlsSettings = &tls.Config{InsecureSkipVerify: true} - }) - - It("connects using those settings", func() { - perform() - close(messagesToSend) - - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) - - Describe("Stream", func() { - var envelopeChan chan *events.Envelope - var errorChan chan error - var doneChan chan struct{} - - perform := func() { - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - envelopeChan = make(chan *events.Envelope) - errorChan = make(chan error, 10) - doneChan = make(chan struct{}) - go func() { - cnsmr.Stream(appGuid, authToken, envelopeChan, errorChan) - close(doneChan) - }() - } - - BeforeEach(func() { - startFakeTrafficController() - }) - - It("attempts to connect five times", func() { - fakeHandler.fail = true - perform() - - fakeHandler.Close() - - Eventually(errorChan, 3).Should(HaveLen(5)) - Eventually(doneChan, 10).Should(BeClosed()) - }) - - It("waits 500ms before reconnecting", func() { - perform() - - fakeHandler.Close() - start := time.Now() - Eventually(errorChan, 3).Should(HaveLen(5)) - end := time.Now() - Expect(end).To(BeTemporally(">=", start.Add(4*500*time.Millisecond))) - cnsmr.Close() - Eventually(doneChan).Should(BeClosed()) - }) - - It("resets the attempt counter after a successful connection", func(done Done) { - perform() - - fakeHandler.InputChan <- marshalMessage(createMessage("message 1", 0)) - Eventually(envelopeChan).Should(Receive()) - - fakeHandler.Close() - - expectedErrorCount := 4 - Eventually(errorChan, 3*time.Second).Should(HaveLen(expectedErrorCount)) - fakeHandler.Reset() - - for i := 0; i < expectedErrorCount; i++ { - <-errorChan - } - - fakeHandler.InputChan <- marshalMessage(createMessage("message 2", 0)) - - Eventually(envelopeChan).Should(Receive()) - fakeHandler.Close() - Eventually(errorChan, 3).Should(HaveLen(5)) - - cnsmr.Close() - Eventually(doneChan).Should(BeClosed()) - close(done) - }, 10) - }) - - Describe("Close", func() { - var incomingChan chan *events.Envelope - var streamErrorChan chan error - - perform := func() { - streamErrorChan = make(chan error, 10) - cnsmr = noaa.NewConsumer(trafficControllerUrl, nil, nil) - go func() { - streamErrorChan <- cnsmr.StreamWithoutReconnect(appGuid, authToken, incomingChan) - }() - } - - BeforeEach(func() { - incomingChan = make(chan *events.Envelope) - startFakeTrafficController() - }) - - Context("when a connection is not open", func() { - It("returns an error", func() { - cnsmr = noaa.NewConsumer(trafficControllerUrl, nil, nil) - err := cnsmr.Close() - - Expect(err.Error()).To(Equal("connection does not exist")) - }) - }) - - Context("when a connection is open", func() { - It("terminates the blocking function call", func(done Done) { - perform() - fakeHandler.Close() - - Eventually(fakeHandler.wasCalled).Should(BeTrue()) - connErr := cnsmr.Close() - Expect(connErr.Error()).To(ContainSubstring("use of closed network connection")) - - var err error - Eventually(streamErrorChan).Should(Receive(&err)) - Expect(err.Error()).To(ContainSubstring("EOF")) - - close(done) - }) - }) - }) - - Describe("RecentLogs", func() { - var ( - appGuid = "appGuid" - authToken = "authToken" - receivedLogMessages []*events.LogMessage - recentError error - ) - - perform := func() { - close(messagesToSend) - cnsmr = noaa.NewConsumer(trafficControllerUrl, nil, nil) - receivedLogMessages, recentError = cnsmr.RecentLogs(appGuid, authToken) - } - - Context("when the connection cannot be established", func() { - It("invalid urls return error", func() { - trafficControllerUrl = "invalid-url" - perform() - - Expect(recentError).ToNot(BeNil()) - }) - }) - - Context("when the connection can be established", func() { - BeforeEach(func() { - testServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns messages from the server", func() { - messagesToSend <- marshalMessage(createMessage("test-message-0", 0)) - messagesToSend <- marshalMessage(createMessage("test-message-1", 0)) - - perform() - - Expect(recentError).NotTo(HaveOccurred()) - Expect(receivedLogMessages).To(HaveLen(2)) - Expect(receivedLogMessages[0].GetMessage()).To(Equal([]byte("test-message-0"))) - Expect(receivedLogMessages[1].GetMessage()).To(Equal([]byte("test-message-1"))) - }) - }) - - Context("when the content type is missing", func() { - BeforeEach(func() { - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/recentlogs", func(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Content-Type", "") - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrBadResponse)) - }) - }) - - Context("when the content length is unknown", func() { - BeforeEach(func() { - fakeHandler = &FakeHandler{ - contentLen: "-1", - InputChan: make(chan []byte, 10), - GenerateHandler: func(input chan []byte) http.Handler { - return handlers.NewHttpHandler(input, loggertesthelper.Logger()) - }, - } - testServer = httptest.NewServer(fakeHandler) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("does not throw an error", func() { - fakeHandler.InputChan <- marshalMessage(createMessage("bad-content-length", 0)) - fakeHandler.Close() - perform() - - Expect(recentError).NotTo(HaveOccurred()) - Expect(receivedLogMessages).To(HaveLen(1)) - }) - - }) - - Context("when the content type doesn't have a boundary", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/recentlogs", func(resp http.ResponseWriter, req *http.Request) { - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrBadResponse)) - }) - - }) - - Context("when the content type's boundary is blank", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/recentlogs", func(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Content-Type", "boundary=") - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrBadResponse)) - }) - - }) - - Context("when the path is not found", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/recentlogs", func(resp http.ResponseWriter, req *http.Request) { - resp.WriteHeader(http.StatusNotFound) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a not found reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrNotFound)) - }) - - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - serverMux := http.NewServeMux() - serverMux.Handle("/apps/appGuid/recentlogs", failer) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a helpful error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - Expect(recentError).To(BeAssignableToTypeOf(&noaa_errors.UnauthorizedError{})) - }) - }) - }) - - Describe("ContainerMetrics", func() { - var ( - appGuid = "appGuid" - authToken = "authToken" - receivedContainerMetrics []*events.ContainerMetric - recentError error - ) - - perform := func() { - close(messagesToSend) - cnsmr = noaa.NewConsumer(trafficControllerUrl, nil, nil) - receivedContainerMetrics, recentError = cnsmr.ContainerMetrics(appGuid, authToken) - } - - Context("when the connection cannot be established", func() { - It("invalid urls return error", func() { - trafficControllerUrl = "invalid-url" - perform() - - Expect(recentError).ToNot(BeNil()) - }) - }) - - Context("when the connection can be established", func() { - BeforeEach(func() { - testServer = httptest.NewServer(handlers.NewHttpHandler(messagesToSend, loggertesthelper.Logger())) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - Context("with a successful connection", func() { - It("returns messages from the server", func() { - messagesToSend <- marshalMessage(createContainerMetric(2, 2000)) - messagesToSend <- marshalMessage(createContainerMetric(1, 1000)) - - perform() - - Expect(recentError).NotTo(HaveOccurred()) - Expect(receivedContainerMetrics).To(HaveLen(2)) - Expect(receivedContainerMetrics[0].GetInstanceIndex()).To(Equal(int32(1))) - Expect(receivedContainerMetrics[1].GetInstanceIndex()).To(Equal(int32(2))) - }) - }) - - Context("when trafficcontroller returns an error as a log message", func() { - It("returns the error", func() { - messagesToSend <- marshalMessage(createContainerMetric(2, 2000)) - messagesToSend <- marshalMessage(createMessage("an error occurred", 2000)) - - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(MatchError("Upstream error: an error occurred")) - }) - }) - }) - - Context("when the content type is missing", func() { - BeforeEach(func() { - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/containermetrics", func(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Content-Type", "") - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrBadResponse)) - }) - }) - - Context("when the content length is unknown", func() { - BeforeEach(func() { - fakeHandler = &FakeHandler{ - contentLen: "-1", - InputChan: make(chan []byte, 10), - GenerateHandler: func(input chan []byte) http.Handler { - return handlers.NewHttpHandler(input, loggertesthelper.Logger()) - }, - } - testServer = httptest.NewServer(fakeHandler) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("does not throw an error", func() { - fakeHandler.InputChan <- marshalMessage(createContainerMetric(2, 2000)) - fakeHandler.Close() - perform() - - Expect(recentError).NotTo(HaveOccurred()) - Expect(receivedContainerMetrics).To(HaveLen(1)) - }) - - }) - - Context("when the content type doesn't have a boundary", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/containermetrics", func(resp http.ResponseWriter, req *http.Request) { - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrBadResponse)) - }) - - }) - - Context("when the content type's boundary is blank", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/containermetrics", func(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Content-Type", "boundary=") - resp.Write([]byte("OK")) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a bad reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrBadResponse)) - }) - - }) - - Context("when the path is not found", func() { - BeforeEach(func() { - - serverMux := http.NewServeMux() - serverMux.HandleFunc("/apps/appGuid/containermetrics", func(resp http.ResponseWriter, req *http.Request) { - resp.WriteHeader(http.StatusNotFound) - }) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a not found reponse error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError).To(Equal(noaa.ErrNotFound)) - }) - - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - serverMux := http.NewServeMux() - serverMux.Handle("/apps/appGuid/containermetrics", failer) - testServer = httptest.NewServer(serverMux) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("returns a helpful error message", func() { - perform() - - Expect(recentError).To(HaveOccurred()) - Expect(recentError.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - Expect(recentError).To(BeAssignableToTypeOf(&noaa_errors.UnauthorizedError{})) - }) - }) - }) - - Describe("Firehose", func() { - var envelopeChan chan *events.Envelope - var errorChan chan error - var doneChan chan struct{} - - perform := func() { - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - envelopeChan = make(chan *events.Envelope) - errorChan = make(chan error, 10) - doneChan = make(chan struct{}) - go func() { - cnsmr.Firehose("subscription-id", authToken, envelopeChan, errorChan) - close(doneChan) - }() - } - - BeforeEach(func() { - startFakeTrafficController() - }) - - It("attempts to connect five times", func() { - fakeHandler.fail = true - perform() - - fakeHandler.Close() - - Eventually(errorChan, 3).Should(HaveLen(5)) - Eventually(doneChan, 10).Should(BeClosed()) - }) - - It("waits 500ms before reconnecting", func() { - perform() - - fakeHandler.Close() - start := time.Now() - Eventually(errorChan, 3).Should(HaveLen(5)) - end := time.Now() - Expect(end).To(BeTemporally(">=", start.Add(4*500*time.Millisecond))) - cnsmr.Close() - Eventually(doneChan).Should(BeClosed()) - }) - - It("resets the attempt counter after a successful connection", func(done Done) { - perform() - - fakeHandler.InputChan <- marshalMessage(createMessage("message 1", 0)) - Eventually(envelopeChan).Should(Receive()) - - fakeHandler.Close() - - expectedErrorCount := 4 - Eventually(errorChan, 3*time.Second).Should(HaveLen(expectedErrorCount)) - fakeHandler.Reset() - - for i := 0; i < expectedErrorCount; i++ { - <-errorChan - } - - fakeHandler.InputChan <- marshalMessage(createMessage("message 2", 0)) - - Eventually(envelopeChan).Should(Receive()) - fakeHandler.Close() - Eventually(errorChan, 3).Should(HaveLen(5)) - - cnsmr.Close() - Eventually(doneChan).Should(BeClosed()) - close(done) - }, 10) - }) - - Describe("FirehoseWithoutReconnect", func() { - var incomingChan chan *events.Envelope - var streamErrorChan chan error - var finishedChan chan struct{} - - perform := func() { - streamErrorChan = make(chan error, 10) - cnsmr = noaa.NewConsumer(trafficControllerUrl, tlsSettings, consumerProxyFunc) - go func() { - streamErrorChan <- cnsmr.FirehoseWithoutReconnect("subscription-id", authToken, incomingChan) - close(finishedChan) - }() - } - - BeforeEach(func() { - incomingChan = make(chan *events.Envelope) - finishedChan = make(chan struct{}) - startFakeTrafficController() - }) - - AfterEach(func() { - <-finishedChan - }) - - Context("when there is no TLS Config or consumerProxyFunc setting", func() { - Context("when the connection can be established", func() { - It("receives messages on the incoming channel", func(done Done) { - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - - perform() - message := <-incomingChan - - Expect(message.GetLogMessage().GetMessage()).To(Equal([]byte("hello"))) - fakeHandler.Close() - - close(done) - }) - - It("receives messages from the full firehose", func() { - perform() - fakeHandler.Close() - - Eventually(fakeHandler.getLastURL).Should(ContainSubstring("/firehose/subscription-id")) - }) - - It("sends an Authorization header with an access token", func() { - authToken = "auth-token" - perform() - fakeHandler.Close() - - Eventually(fakeHandler.getAuthHeader).Should(Equal("auth-token")) - }) - - Context("when the message fails to parse", func() { - It("skips that message but continues to read messages", func(done Done) { - fakeHandler.InputChan <- []byte{0} - fakeHandler.InputChan <- marshalMessage(createMessage("hello", 0)) - perform() - fakeHandler.Close() - - message := <-incomingChan - - Expect(message.GetLogMessage().GetMessage()).To(Equal([]byte("hello"))) - - close(done) - }) - }) - }) - - Context("when the connection cannot be established", func() { - BeforeEach(func() { - trafficControllerUrl = "!!!bad-url" - }) - - It("returns an error", func(done Done) { - perform() - - var err error - Eventually(streamErrorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("Please ask your Cloud Foundry Operator")) - - close(done) - }) - }) - - Context("when the authorization fails", func() { - var failer authFailer - - BeforeEach(func() { - failer = authFailer{Message: "Helpful message"} - testServer = httptest.NewServer(failer) - trafficControllerUrl = "ws://" + testServer.Listener.Addr().String() - }) - - It("it returns a helpful error message", func() { - perform() - - var err error - Eventually(streamErrorChan).Should(Receive(&err)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("You are not authorized. Helpful message")) - }) - }) - }) - - Context("when SSL settings are passed in", func() { - BeforeEach(func() { - testServer = httptest.NewTLSServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond, loggertesthelper.Logger())) - trafficControllerUrl = "wss://" + testServer.Listener.Addr().String() - - tlsSettings = &tls.Config{InsecureSkipVerify: true} - }) - - It("connects using those settings", func() { - perform() - close(messagesToSend) - - Expect(err).NotTo(HaveOccurred()) - }) - }) - }) -}) - -func createMessage(message string, timestamp int64) *events.Envelope { - if timestamp == 0 { - timestamp = time.Now().UnixNano() - } - - logMessage := createLogMessage(message, timestamp) - - return &events.Envelope{ - LogMessage: logMessage, - EventType: events.Envelope_LogMessage.Enum(), - Origin: proto.String("fake-origin-1"), - Timestamp: proto.Int64(timestamp), - } -} - -func createContainerMetric(instanceIndex int32, timestamp int64) *events.Envelope { - if timestamp == 0 { - timestamp = time.Now().UnixNano() - } - - cm := &events.ContainerMetric{ - ApplicationId: proto.String("appId"), - InstanceIndex: proto.Int32(instanceIndex), - CpuPercentage: proto.Float64(1), - MemoryBytes: proto.Uint64(2), - DiskBytes: proto.Uint64(3), - } - - return &events.Envelope{ - ContainerMetric: cm, - EventType: events.Envelope_ContainerMetric.Enum(), - Origin: proto.String("fake-origin-1"), - Timestamp: proto.Int64(timestamp), - } -} - -func createError(message string) *events.Envelope { - timestamp := time.Now().UnixNano() - - err := &events.Error{ - Message: &message, - Source: proto.String("foreign"), - Code: proto.Int32(42), - } - - return &events.Envelope{ - Error: err, - EventType: events.Envelope_Error.Enum(), - Origin: proto.String("fake-origin-1"), - Timestamp: proto.Int64(timestamp), - } -} - -func createLogMessage(message string, timestamp int64) *events.LogMessage { - return &events.LogMessage{ - Message: []byte(message), - MessageType: events.LogMessage_OUT.Enum(), - AppId: proto.String("my-app-guid"), - SourceType: proto.String("DEA"), - Timestamp: proto.Int64(timestamp), - } -} - -func marshalMessage(message *events.Envelope) []byte { - data, err := proto.Marshal(message) - if err != nil { - println(err.Error()) - } - - return data -} - -type authFailer struct { - Message string -} - -func (failer authFailer) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - rw.Header().Set("WWW-Authenticate", "Basic") - rw.WriteHeader(http.StatusUnauthorized) - fmt.Fprintf(rw, "You are not authorized. %s", failer.Message) -} - -type FakeHandler struct { - GenerateHandler func(chan []byte) http.Handler - InputChan chan []byte - called bool - lastURL string - authHeader string - contentLen string - fail bool - sync.RWMutex -} - -func (fh *FakeHandler) getAuthHeader() string { - fh.RLock() - defer fh.RUnlock() - return fh.authHeader -} - -func (fh *FakeHandler) setAuthHeader(authHeader string) { - fh.Lock() - defer fh.Unlock() - fh.authHeader = authHeader -} - -func (fh *FakeHandler) getLastURL() string { - fh.RLock() - defer fh.RUnlock() - return fh.lastURL -} - -func (fh *FakeHandler) setLastURL(url string) { - fh.Lock() - defer fh.Unlock() - fh.lastURL = url -} - -func (fh *FakeHandler) call() { - fh.Lock() - defer fh.Unlock() - fh.called = true -} - -func (fh *FakeHandler) wasCalled() bool { - fh.RLock() - defer fh.RUnlock() - return fh.called -} - -func (fh *FakeHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - fh.setLastURL(r.URL.String()) - fh.setAuthHeader(r.Header.Get("Authorization")) - fh.call() - if len(fh.contentLen) > 0 { - rw.Header().Set("Content-Length", fh.contentLen) - } - - fh.Lock() - defer fh.Unlock() - - if fh.fail { - return - } - - handler := fh.GenerateHandler(fh.InputChan) - handler.ServeHTTP(rw, r) -} - -func (fh *FakeHandler) Close() { - close(fh.InputChan) -} - -func (fh *FakeHandler) Reset() { - fh.Lock() - defer fh.Unlock() - - fh.InputChan = make(chan []byte) - fh.called = false -} - -type fakeDebugPrinter struct { - Messages []*fakeDebugPrinterMessage -} - -type fakeDebugPrinterMessage struct { - Title, Body string -} - -func (p *fakeDebugPrinter) Print(title, body string) { - message := &fakeDebugPrinterMessage{title, body} - p.Messages = append(p.Messages, message) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/README.md b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/README.md deleted file mode 100644 index f933f02..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/README.md +++ /dev/null @@ -1,49 +0,0 @@ -#Container Metrics Sample - -##Overview -We can use Dropsonde to send container metrics to metron which will emit them to Doppler; which is then polled by traffic controller. The endpoint on the traffic controller should report the latest container metric for each instance of the specified app. - -`main.go` connects to the traffic controller and polls the container metrics endpoint. - -`consumer_metrics_sample/emitter/main.go` is a sample app that emits container metrics to metron using the dropsonde library. - -##To see containter metrics: -1. Run - - cf api api.the-env - cf login admin - cf push some-app - cf app some-app --guid - -1. Copy out the guid value from the last bash line -1. Paste the guid into the container_metrics_emitter.go and main.go as the appId value at the top of the files -1. In the main.go update the DopplerAddress value by replacing '10.244.0.34.xip.io' with the value for the environment you are testing. -1. Start the listener - - export CF_ACCESS_TOKEN=`cf oauth-token | tail -n 1` - go run consumer/main.go - -1. Set the appId in `emitter/main.go` to the correct appId. - -1. Now build the container_metrics_emitter.go in a new bash window with: - - GOPATH=~/go GOOS=linux go build emitter/main.go - -1. Move the container_metrics_emitter executable onto a machine with metron running inside your cf deployment - - ssh-add keyfile - scp container_metrics_emitter vcap@bosh.the-env:container_metrics_emitter - ssh -A vcap@bosh.the-env - -1. You can get a vm ip by doing bosh vms and selecting an ip - - scp container_metrics_emitter vcap@some.vm.ip:container_metrics_emitter - ssh vcap@some.vm.ip - ./container_metrics_emitter - -1. You should now see metrics appearing in the listener window - -###Things to look for: -1. the diskBytes value should be increasing. -1. the diskBytes value should be skipping some numbers, this is b/c we are listening on a three second window, but publishing on a one second window and are only returning the most recent result -1. there should be only entries for the applicationId you entered with multiple instance indexes diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/consumer/main.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/consumer/main.go deleted file mode 100644 index e2b4326..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/consumer/main.go +++ /dev/null @@ -1,43 +0,0 @@ -package main - -import ( - "crypto/tls" - "fmt" - "os" - "time" - - "github.com/cloudfoundry/noaa" -) - -var dopplerAddress = os.Getenv("DOPPLER_ADDR") -var appId = os.Getenv("APP_GUID") -var authToken = os.Getenv("CF_ACCESS_TOKEN") - -func main() { - connection := noaa.NewConsumer(dopplerAddress, &tls.Config{InsecureSkipVerify: true}, nil) - connection.SetDebugPrinter(ConsoleDebugPrinter{}) - - fmt.Println("===== Streaming ContainerMetrics (will only succeed if you have admin credentials)") - - for { - containerMetrics, err := connection.ContainerMetrics(appId, authToken) - - for _, cm := range containerMetrics { - fmt.Printf("%v \n", cm) - } - - if err != nil { - fmt.Fprintf(os.Stderr, "%v\n", err.Error()) - } - - time.Sleep(3 * time.Second) - } - -} - -type ConsoleDebugPrinter struct{} - -func (c ConsoleDebugPrinter) Print(title, dump string) { - println(title) - println(dump) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/emitter/main.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/emitter/main.go deleted file mode 100644 index cf701dd..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/container_metrics_sample/emitter/main.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -import ( - "github.com/cloudfoundry/dropsonde" - "github.com/cloudfoundry/dropsonde/metrics" - "time" -) - -func main() { - appID := "60a13b0f-fce7-4c02-b92a-d43d583877ed" - err := dropsonde.Initialize("localhost:3457", "METRIC-TEST", "z1", "0") - if err != nil { - println(err.Error()) - } - - var i uint64 - i = 0 - for { - println("emitting metric at counter: ", i) - metrics.SendContainerMetric(appID, 0, 42.42, 1234, i) - metrics.SendContainerMetric(appID, 1, 11.41, 1234, i) - metrics.SendContainerMetric(appID, 2, 11.41, 1234, i) - metrics.SendContainerMetric("donotseethis", 2, 11.41, 1234, i) - i++ - time.Sleep(1 * time.Second) - } -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/debug_printer.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/debug_printer.go deleted file mode 100644 index 58f096a..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/debug_printer.go +++ /dev/null @@ -1,11 +0,0 @@ -package noaa - -type DebugPrinter interface { - Print(title, dump string) -} - -type nullDebugPrinter struct { -} - -func (nullDebugPrinter) Print(title, body string) { -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/firehose_sample/main.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/firehose_sample/main.go deleted file mode 100644 index 9c94006..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/firehose_sample/main.go +++ /dev/null @@ -1,44 +0,0 @@ -package main - -import ( - "crypto/tls" - "fmt" - "os" - - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/sonde-go/events" -) - -var dopplerAddress = os.Getenv("DOPPLER_ADDR") -var authToken = os.Getenv("CF_ACCESS_TOKEN") - -const firehoseSubscriptionId = "firehose-a" - -func main() { - connection := noaa.NewConsumer(dopplerAddress, &tls.Config{InsecureSkipVerify: true}, nil) - connection.SetDebugPrinter(ConsoleDebugPrinter{}) - - fmt.Println("===== Streaming Firehose (will only succeed if you have admin credentials)") - - msgChan := make(chan *events.Envelope) - go func() { - defer close(msgChan) - errorChan := make(chan error) - go connection.Firehose(firehoseSubscriptionId, authToken, msgChan, errorChan) - - for err := range errorChan { - fmt.Fprintf(os.Stderr, "%v\n", err.Error()) - } - }() - - for msg := range msgChan { - fmt.Printf("%v \n", msg) - } -} - -type ConsoleDebugPrinter struct{} - -func (c ConsoleDebugPrinter) Print(title, dump string) { - println(title) - println(dump) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/noaa_suite_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/noaa_suite_test.go deleted file mode 100644 index 0bb2fe4..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/noaa_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package noaa_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestNoaa(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Noaa Suite") -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sample/main.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sample/main.go deleted file mode 100644 index a8bcd02..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sample/main.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "crypto/tls" - "fmt" - "os" - - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/sonde-go/events" -) - -var dopplerAddress = os.Getenv("DOPPLER_ADDR") -var appGuid = os.Getenv("APP_GUID") -var authToken = os.Getenv("CF_ACCESS_TOKEN") - -func main() { - connection := noaa.NewConsumer(dopplerAddress, &tls.Config{InsecureSkipVerify: true}, nil) - connection.SetDebugPrinter(ConsoleDebugPrinter{}) - - messages, err := connection.RecentLogs(appGuid, authToken) - - if err != nil { - fmt.Printf("===== Error getting recent messages: %v\n", err) - } else { - fmt.Println("===== Recent logs") - for _, msg := range messages { - fmt.Println(msg) - } - } - - fmt.Println("===== Streaming metrics") - msgChan := make(chan *events.Envelope) - go func() { - defer close(msgChan) - errorChan := make(chan error) - go connection.Stream(appGuid, authToken, msgChan, errorChan) - - for err := range errorChan { - fmt.Fprintf(os.Stderr, "%v\n", err.Error()) - } - }() - - for msg := range msgChan { - fmt.Printf("%v \n", msg) - } -} - -type ConsoleDebugPrinter struct{} - -func (c ConsoleDebugPrinter) Print(title, dump string) { - println(title) - println(dump) -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_container_metrics_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_container_metrics_test.go deleted file mode 100644 index 8d000b9..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_container_metrics_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package noaa_test - -import ( - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/sonde-go/events" - "github.com/gogo/protobuf/proto" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("SortContainerMetrics", func() { - var messages []*events.ContainerMetric - - BeforeEach(func() { - messages = []*events.ContainerMetric{ - &events.ContainerMetric{ - ApplicationId: proto.String("appId"), - InstanceIndex: proto.Int32(2), - }, - &events.ContainerMetric{ - ApplicationId: proto.String("appId"), - InstanceIndex: proto.Int32(1), - }, - } - }) - - It("sorts container metrics by instance index", func() { - sortedMessages := noaa.SortContainerMetrics(messages) - - Expect(sortedMessages[0].GetInstanceIndex()).To(Equal(int32(1))) - Expect(sortedMessages[1].GetInstanceIndex()).To(Equal(int32(2))) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_recent_test.go b/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_recent_test.go deleted file mode 100644 index ec539bc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_recent_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package noaa_test - -import ( - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/sonde-go/events" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("SortRecent", func() { - var messages []*events.LogMessage - - BeforeEach(func() { - messages = []*events.LogMessage{createLogMessage("hello", 2), createLogMessage("konnichiha", 1)} - }) - - It("sorts messages", func() { - sortedMessages := noaa.SortRecent(messages) - - Expect(*sortedMessages[0].Timestamp).To(Equal(int64(1))) - Expect(*sortedMessages[1].Timestamp).To(Equal(int64(2))) - }) - - It("sorts using a stable algorithm", func() { - messages = append(messages, createLogMessage("guten tag", 1)) - - sortedMessages := noaa.SortRecent(messages) - - Expect(sortedMessages[0].GetMessage()).To(Equal([]byte("konnichiha"))) - Expect(sortedMessages[1].GetMessage()).To(Equal([]byte("guten tag"))) - Expect(sortedMessages[2].GetMessage()).To(Equal([]byte("hello"))) - }) -}) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/envelope.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/envelope.pb.go deleted file mode 100644 index 9af0efc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/envelope.pb.go +++ /dev/null @@ -1,974 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: envelope.proto -// DO NOT EDIT! - -/* - Package events is a generated protocol buffer package. - - It is generated from these files: - envelope.proto - error.proto - http.proto - log.proto - metric.proto - uuid.proto - - It has these top-level messages: - Envelope -*/ -package events - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" - -import io "io" -import fmt "fmt" -import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -// / Type of the wrapped event. -type Envelope_EventType int32 - -const ( - // Removed Heartbeat at position 1 - Envelope_HttpStart Envelope_EventType = 2 - Envelope_HttpStop Envelope_EventType = 3 - Envelope_HttpStartStop Envelope_EventType = 4 - Envelope_LogMessage Envelope_EventType = 5 - Envelope_ValueMetric Envelope_EventType = 6 - Envelope_CounterEvent Envelope_EventType = 7 - Envelope_Error Envelope_EventType = 8 - Envelope_ContainerMetric Envelope_EventType = 9 -) - -var Envelope_EventType_name = map[int32]string{ - 2: "HttpStart", - 3: "HttpStop", - 4: "HttpStartStop", - 5: "LogMessage", - 6: "ValueMetric", - 7: "CounterEvent", - 8: "Error", - 9: "ContainerMetric", -} -var Envelope_EventType_value = map[string]int32{ - "HttpStart": 2, - "HttpStop": 3, - "HttpStartStop": 4, - "LogMessage": 5, - "ValueMetric": 6, - "CounterEvent": 7, - "Error": 8, - "ContainerMetric": 9, -} - -func (x Envelope_EventType) Enum() *Envelope_EventType { - p := new(Envelope_EventType) - *p = x - return p -} -func (x Envelope_EventType) String() string { - return proto.EnumName(Envelope_EventType_name, int32(x)) -} -func (x *Envelope_EventType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Envelope_EventType_value, data, "Envelope_EventType") - if err != nil { - return err - } - *x = Envelope_EventType(value) - return nil -} - -// / Envelope wraps an Event and adds metadata. -type Envelope struct { - Origin *string `protobuf:"bytes,1,req,name=origin" json:"origin,omitempty"` - EventType *Envelope_EventType `protobuf:"varint,2,req,name=eventType,enum=events.Envelope_EventType" json:"eventType,omitempty"` - Timestamp *int64 `protobuf:"varint,6,opt,name=timestamp" json:"timestamp,omitempty"` - Deployment *string `protobuf:"bytes,13,opt,name=deployment" json:"deployment,omitempty"` - Job *string `protobuf:"bytes,14,opt,name=job" json:"job,omitempty"` - Index *string `protobuf:"bytes,15,opt,name=index" json:"index,omitempty"` - Ip *string `protobuf:"bytes,16,opt,name=ip" json:"ip,omitempty"` - // Removed Heartbeat at position 3 - HttpStart *HttpStart `protobuf:"bytes,4,opt,name=httpStart" json:"httpStart,omitempty"` - HttpStop *HttpStop `protobuf:"bytes,5,opt,name=httpStop" json:"httpStop,omitempty"` - HttpStartStop *HttpStartStop `protobuf:"bytes,7,opt,name=httpStartStop" json:"httpStartStop,omitempty"` - LogMessage *LogMessage `protobuf:"bytes,8,opt,name=logMessage" json:"logMessage,omitempty"` - ValueMetric *ValueMetric `protobuf:"bytes,9,opt,name=valueMetric" json:"valueMetric,omitempty"` - CounterEvent *CounterEvent `protobuf:"bytes,10,opt,name=counterEvent" json:"counterEvent,omitempty"` - Error *Error `protobuf:"bytes,11,opt,name=error" json:"error,omitempty"` - ContainerMetric *ContainerMetric `protobuf:"bytes,12,opt,name=containerMetric" json:"containerMetric,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Envelope) Reset() { *m = Envelope{} } -func (m *Envelope) String() string { return proto.CompactTextString(m) } -func (*Envelope) ProtoMessage() {} - -func (m *Envelope) GetOrigin() string { - if m != nil && m.Origin != nil { - return *m.Origin - } - return "" -} - -func (m *Envelope) GetEventType() Envelope_EventType { - if m != nil && m.EventType != nil { - return *m.EventType - } - return Envelope_HttpStart -} - -func (m *Envelope) GetTimestamp() int64 { - if m != nil && m.Timestamp != nil { - return *m.Timestamp - } - return 0 -} - -func (m *Envelope) GetDeployment() string { - if m != nil && m.Deployment != nil { - return *m.Deployment - } - return "" -} - -func (m *Envelope) GetJob() string { - if m != nil && m.Job != nil { - return *m.Job - } - return "" -} - -func (m *Envelope) GetIndex() string { - if m != nil && m.Index != nil { - return *m.Index - } - return "" -} - -func (m *Envelope) GetIp() string { - if m != nil && m.Ip != nil { - return *m.Ip - } - return "" -} - -func (m *Envelope) GetHttpStart() *HttpStart { - if m != nil { - return m.HttpStart - } - return nil -} - -func (m *Envelope) GetHttpStop() *HttpStop { - if m != nil { - return m.HttpStop - } - return nil -} - -func (m *Envelope) GetHttpStartStop() *HttpStartStop { - if m != nil { - return m.HttpStartStop - } - return nil -} - -func (m *Envelope) GetLogMessage() *LogMessage { - if m != nil { - return m.LogMessage - } - return nil -} - -func (m *Envelope) GetValueMetric() *ValueMetric { - if m != nil { - return m.ValueMetric - } - return nil -} - -func (m *Envelope) GetCounterEvent() *CounterEvent { - if m != nil { - return m.CounterEvent - } - return nil -} - -func (m *Envelope) GetError() *Error { - if m != nil { - return m.Error - } - return nil -} - -func (m *Envelope) GetContainerMetric() *ContainerMetric { - if m != nil { - return m.ContainerMetric - } - return nil -} - -func init() { - proto.RegisterEnum("events.Envelope_EventType", Envelope_EventType_name, Envelope_EventType_value) -} -func (m *Envelope) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Origin", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Origin = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EventType", wireType) - } - var v Envelope_EventType - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (Envelope_EventType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.EventType = &v - hasFields[0] |= uint64(0x00000002) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Timestamp = &v - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Deployment", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Deployment = &s - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Job", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Job = &s - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Index = &s - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ip", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Ip = &s - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpStart", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HttpStart == nil { - m.HttpStart = &HttpStart{} - } - if err := m.HttpStart.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpStop", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HttpStop == nil { - m.HttpStop = &HttpStop{} - } - if err := m.HttpStop.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpStartStop", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HttpStartStop == nil { - m.HttpStartStop = &HttpStartStop{} - } - if err := m.HttpStartStop.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LogMessage", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LogMessage == nil { - m.LogMessage = &LogMessage{} - } - if err := m.LogMessage.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValueMetric", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ValueMetric == nil { - m.ValueMetric = &ValueMetric{} - } - if err := m.ValueMetric.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterEvent", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CounterEvent == nil { - m.CounterEvent = &CounterEvent{} - } - if err := m.CounterEvent.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Error == nil { - m.Error = &Error{} - } - if err := m.Error.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerMetric", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ContainerMetric == nil { - m.ContainerMetric = &ContainerMetric{} - } - if err := m.ContainerMetric.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipEnvelope(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("origin") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("eventType") - } - - return nil -} -func skipEnvelope(data []byte) (n int, err error) { - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if data[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - return iNdEx, nil - case 3: - for { - var wire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - if wireType == 4 { - break - } - next, err := skipEnvelope(data[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} -func (m *Envelope) Size() (n int) { - var l int - _ = l - if m.Origin != nil { - l = len(*m.Origin) - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.EventType != nil { - n += 1 + sovEnvelope(uint64(*m.EventType)) - } - if m.Timestamp != nil { - n += 1 + sovEnvelope(uint64(*m.Timestamp)) - } - if m.Deployment != nil { - l = len(*m.Deployment) - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.Job != nil { - l = len(*m.Job) - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.Index != nil { - l = len(*m.Index) - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.Ip != nil { - l = len(*m.Ip) - n += 2 + l + sovEnvelope(uint64(l)) - } - if m.HttpStart != nil { - l = m.HttpStart.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.HttpStop != nil { - l = m.HttpStop.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.HttpStartStop != nil { - l = m.HttpStartStop.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.LogMessage != nil { - l = m.LogMessage.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.ValueMetric != nil { - l = m.ValueMetric.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.CounterEvent != nil { - l = m.CounterEvent.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.Error != nil { - l = m.Error.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.ContainerMetric != nil { - l = m.ContainerMetric.Size() - n += 1 + l + sovEnvelope(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovEnvelope(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozEnvelope(x uint64) (n int) { - return sovEnvelope(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Envelope) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *Envelope) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Origin == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("origin") - } else { - data[i] = 0xa - i++ - i = encodeVarintEnvelope(data, i, uint64(len(*m.Origin))) - i += copy(data[i:], *m.Origin) - } - if m.EventType == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("eventType") - } else { - data[i] = 0x10 - i++ - i = encodeVarintEnvelope(data, i, uint64(*m.EventType)) - } - if m.HttpStart != nil { - data[i] = 0x22 - i++ - i = encodeVarintEnvelope(data, i, uint64(m.HttpStart.Size())) - n1, err := m.HttpStart.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.HttpStop != nil { - data[i] = 0x2a - i++ - i = encodeVarintEnvelope(data, i, uint64(m.HttpStop.Size())) - n2, err := m.HttpStop.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Timestamp != nil { - data[i] = 0x30 - i++ - i = encodeVarintEnvelope(data, i, uint64(*m.Timestamp)) - } - if m.HttpStartStop != nil { - data[i] = 0x3a - i++ - i = encodeVarintEnvelope(data, i, uint64(m.HttpStartStop.Size())) - n3, err := m.HttpStartStop.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.LogMessage != nil { - data[i] = 0x42 - i++ - i = encodeVarintEnvelope(data, i, uint64(m.LogMessage.Size())) - n4, err := m.LogMessage.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.ValueMetric != nil { - data[i] = 0x4a - i++ - i = encodeVarintEnvelope(data, i, uint64(m.ValueMetric.Size())) - n5, err := m.ValueMetric.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.CounterEvent != nil { - data[i] = 0x52 - i++ - i = encodeVarintEnvelope(data, i, uint64(m.CounterEvent.Size())) - n6, err := m.CounterEvent.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.Error != nil { - data[i] = 0x5a - i++ - i = encodeVarintEnvelope(data, i, uint64(m.Error.Size())) - n7, err := m.Error.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.ContainerMetric != nil { - data[i] = 0x62 - i++ - i = encodeVarintEnvelope(data, i, uint64(m.ContainerMetric.Size())) - n8, err := m.ContainerMetric.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.Deployment != nil { - data[i] = 0x6a - i++ - i = encodeVarintEnvelope(data, i, uint64(len(*m.Deployment))) - i += copy(data[i:], *m.Deployment) - } - if m.Job != nil { - data[i] = 0x72 - i++ - i = encodeVarintEnvelope(data, i, uint64(len(*m.Job))) - i += copy(data[i:], *m.Job) - } - if m.Index != nil { - data[i] = 0x7a - i++ - i = encodeVarintEnvelope(data, i, uint64(len(*m.Index))) - i += copy(data[i:], *m.Index) - } - if m.Ip != nil { - data[i] = 0x82 - i++ - data[i] = 0x1 - i++ - i = encodeVarintEnvelope(data, i, uint64(len(*m.Ip))) - i += copy(data[i:], *m.Ip) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Envelope(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Envelope(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintEnvelope(data []byte, offset int, v uint64) int { - for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - data[offset] = uint8(v) - return offset + 1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/error.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/error.pb.go deleted file mode 100644 index 32fddbc..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/error.pb.go +++ /dev/null @@ -1,361 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: error.proto -// DO NOT EDIT! - -package events - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" - -import io "io" -import fmt "fmt" -import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -// / An Error event represents an error in the originating process. -type Error struct { - Source *string `protobuf:"bytes,1,req,name=source" json:"source,omitempty"` - Code *int32 `protobuf:"varint,2,req,name=code" json:"code,omitempty"` - Message *string `protobuf:"bytes,3,req,name=message" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} - -func (m *Error) GetSource() string { - if m != nil && m.Source != nil { - return *m.Source - } - return "" -} - -func (m *Error) GetCode() int32 { - if m != nil && m.Code != nil { - return *m.Code - } - return 0 -} - -func (m *Error) GetMessage() string { - if m != nil && m.Message != nil { - return *m.Message - } - return "" -} - -func init() { -} -func (m *Error) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Source = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Code = &v - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Message = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000004) - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipError(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("source") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("code") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") - } - - return nil -} -func skipError(data []byte) (n int, err error) { - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if data[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - return iNdEx, nil - case 3: - for { - var wire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - if wireType == 4 { - break - } - next, err := skipError(data[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} -func (m *Error) Size() (n int) { - var l int - _ = l - if m.Source != nil { - l = len(*m.Source) - n += 1 + l + sovError(uint64(l)) - } - if m.Code != nil { - n += 1 + sovError(uint64(*m.Code)) - } - if m.Message != nil { - l = len(*m.Message) - n += 1 + l + sovError(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovError(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozError(x uint64) (n int) { - return sovError(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Error) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *Error) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Source == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("source") - } else { - data[i] = 0xa - i++ - i = encodeVarintError(data, i, uint64(len(*m.Source))) - i += copy(data[i:], *m.Source) - } - if m.Code == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("code") - } else { - data[i] = 0x10 - i++ - i = encodeVarintError(data, i, uint64(*m.Code)) - } - if m.Message == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") - } else { - data[i] = 0x1a - i++ - i = encodeVarintError(data, i, uint64(len(*m.Message))) - i += copy(data[i:], *m.Message) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Error(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Error(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintError(data []byte, offset int, v uint64) int { - for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - data[offset] = uint8(v) - return offset + 1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/http.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/http.pb.go deleted file mode 100644 index b37ee23..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/http.pb.go +++ /dev/null @@ -1,1867 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: http.proto -// DO NOT EDIT! - -package events - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" - -import io "io" -import fmt "fmt" -import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -// / Type of peer handling request. -type PeerType int32 - -const ( - PeerType_Client PeerType = 1 - PeerType_Server PeerType = 2 -) - -var PeerType_name = map[int32]string{ - 1: "Client", - 2: "Server", -} -var PeerType_value = map[string]int32{ - "Client": 1, - "Server": 2, -} - -func (x PeerType) Enum() *PeerType { - p := new(PeerType) - *p = x - return p -} -func (x PeerType) String() string { - return proto.EnumName(PeerType_name, int32(x)) -} -func (x *PeerType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(PeerType_value, data, "PeerType") - if err != nil { - return err - } - *x = PeerType(value) - return nil -} - -// / HTTP method. -type Method int32 - -const ( - Method_GET Method = 1 - Method_POST Method = 2 - Method_PUT Method = 3 - Method_DELETE Method = 4 - Method_HEAD Method = 5 -) - -var Method_name = map[int32]string{ - 1: "GET", - 2: "POST", - 3: "PUT", - 4: "DELETE", - 5: "HEAD", -} -var Method_value = map[string]int32{ - "GET": 1, - "POST": 2, - "PUT": 3, - "DELETE": 4, - "HEAD": 5, -} - -func (x Method) Enum() *Method { - p := new(Method) - *p = x - return p -} -func (x Method) String() string { - return proto.EnumName(Method_name, int32(x)) -} -func (x *Method) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Method_value, data, "Method") - if err != nil { - return err - } - *x = Method(value) - return nil -} - -// / An HttpStart event is emitted when a client sends a request (or immediately when a server receives the request). -type HttpStart struct { - Timestamp *int64 `protobuf:"varint,1,req,name=timestamp" json:"timestamp,omitempty"` - RequestId *UUID `protobuf:"bytes,2,req,name=requestId" json:"requestId,omitempty"` - PeerType *PeerType `protobuf:"varint,3,req,name=peerType,enum=events.PeerType" json:"peerType,omitempty"` - Method *Method `protobuf:"varint,4,req,name=method,enum=events.Method" json:"method,omitempty"` - Uri *string `protobuf:"bytes,5,req,name=uri" json:"uri,omitempty"` - RemoteAddress *string `protobuf:"bytes,6,req,name=remoteAddress" json:"remoteAddress,omitempty"` - UserAgent *string `protobuf:"bytes,7,req,name=userAgent" json:"userAgent,omitempty"` - ParentRequestId *UUID `protobuf:"bytes,8,opt,name=parentRequestId" json:"parentRequestId,omitempty"` - ApplicationId *UUID `protobuf:"bytes,9,opt,name=applicationId" json:"applicationId,omitempty"` - InstanceIndex *int32 `protobuf:"varint,10,opt,name=instanceIndex" json:"instanceIndex,omitempty"` - InstanceId *string `protobuf:"bytes,11,opt,name=instanceId" json:"instanceId,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *HttpStart) Reset() { *m = HttpStart{} } -func (m *HttpStart) String() string { return proto.CompactTextString(m) } -func (*HttpStart) ProtoMessage() {} - -func (m *HttpStart) GetTimestamp() int64 { - if m != nil && m.Timestamp != nil { - return *m.Timestamp - } - return 0 -} - -func (m *HttpStart) GetRequestId() *UUID { - if m != nil { - return m.RequestId - } - return nil -} - -func (m *HttpStart) GetPeerType() PeerType { - if m != nil && m.PeerType != nil { - return *m.PeerType - } - return PeerType_Client -} - -func (m *HttpStart) GetMethod() Method { - if m != nil && m.Method != nil { - return *m.Method - } - return Method_GET -} - -func (m *HttpStart) GetUri() string { - if m != nil && m.Uri != nil { - return *m.Uri - } - return "" -} - -func (m *HttpStart) GetRemoteAddress() string { - if m != nil && m.RemoteAddress != nil { - return *m.RemoteAddress - } - return "" -} - -func (m *HttpStart) GetUserAgent() string { - if m != nil && m.UserAgent != nil { - return *m.UserAgent - } - return "" -} - -func (m *HttpStart) GetParentRequestId() *UUID { - if m != nil { - return m.ParentRequestId - } - return nil -} - -func (m *HttpStart) GetApplicationId() *UUID { - if m != nil { - return m.ApplicationId - } - return nil -} - -func (m *HttpStart) GetInstanceIndex() int32 { - if m != nil && m.InstanceIndex != nil { - return *m.InstanceIndex - } - return 0 -} - -func (m *HttpStart) GetInstanceId() string { - if m != nil && m.InstanceId != nil { - return *m.InstanceId - } - return "" -} - -// / An HttpStop event is emitted when a client receives a response to its request (or when a server completes its handling and returns a response). -type HttpStop struct { - Timestamp *int64 `protobuf:"varint,1,req,name=timestamp" json:"timestamp,omitempty"` - Uri *string `protobuf:"bytes,2,req,name=uri" json:"uri,omitempty"` - RequestId *UUID `protobuf:"bytes,3,req,name=requestId" json:"requestId,omitempty"` - PeerType *PeerType `protobuf:"varint,4,req,name=peerType,enum=events.PeerType" json:"peerType,omitempty"` - StatusCode *int32 `protobuf:"varint,5,req,name=statusCode" json:"statusCode,omitempty"` - ContentLength *int64 `protobuf:"varint,6,req,name=contentLength" json:"contentLength,omitempty"` - ApplicationId *UUID `protobuf:"bytes,7,opt,name=applicationId" json:"applicationId,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *HttpStop) Reset() { *m = HttpStop{} } -func (m *HttpStop) String() string { return proto.CompactTextString(m) } -func (*HttpStop) ProtoMessage() {} - -func (m *HttpStop) GetTimestamp() int64 { - if m != nil && m.Timestamp != nil { - return *m.Timestamp - } - return 0 -} - -func (m *HttpStop) GetUri() string { - if m != nil && m.Uri != nil { - return *m.Uri - } - return "" -} - -func (m *HttpStop) GetRequestId() *UUID { - if m != nil { - return m.RequestId - } - return nil -} - -func (m *HttpStop) GetPeerType() PeerType { - if m != nil && m.PeerType != nil { - return *m.PeerType - } - return PeerType_Client -} - -func (m *HttpStop) GetStatusCode() int32 { - if m != nil && m.StatusCode != nil { - return *m.StatusCode - } - return 0 -} - -func (m *HttpStop) GetContentLength() int64 { - if m != nil && m.ContentLength != nil { - return *m.ContentLength - } - return 0 -} - -func (m *HttpStop) GetApplicationId() *UUID { - if m != nil { - return m.ApplicationId - } - return nil -} - -// / An HttpStartStop event represents the whole lifecycle of an HTTP request. -type HttpStartStop struct { - StartTimestamp *int64 `protobuf:"varint,1,req,name=startTimestamp" json:"startTimestamp,omitempty"` - StopTimestamp *int64 `protobuf:"varint,2,req,name=stopTimestamp" json:"stopTimestamp,omitempty"` - RequestId *UUID `protobuf:"bytes,3,req,name=requestId" json:"requestId,omitempty"` - PeerType *PeerType `protobuf:"varint,4,req,name=peerType,enum=events.PeerType" json:"peerType,omitempty"` - Method *Method `protobuf:"varint,5,req,name=method,enum=events.Method" json:"method,omitempty"` - Uri *string `protobuf:"bytes,6,req,name=uri" json:"uri,omitempty"` - RemoteAddress *string `protobuf:"bytes,7,req,name=remoteAddress" json:"remoteAddress,omitempty"` - UserAgent *string `protobuf:"bytes,8,req,name=userAgent" json:"userAgent,omitempty"` - StatusCode *int32 `protobuf:"varint,9,req,name=statusCode" json:"statusCode,omitempty"` - ContentLength *int64 `protobuf:"varint,10,req,name=contentLength" json:"contentLength,omitempty"` - ParentRequestId *UUID `protobuf:"bytes,11,opt,name=parentRequestId" json:"parentRequestId,omitempty"` - ApplicationId *UUID `protobuf:"bytes,12,opt,name=applicationId" json:"applicationId,omitempty"` - InstanceIndex *int32 `protobuf:"varint,13,opt,name=instanceIndex" json:"instanceIndex,omitempty"` - InstanceId *string `protobuf:"bytes,14,opt,name=instanceId" json:"instanceId,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *HttpStartStop) Reset() { *m = HttpStartStop{} } -func (m *HttpStartStop) String() string { return proto.CompactTextString(m) } -func (*HttpStartStop) ProtoMessage() {} - -func (m *HttpStartStop) GetStartTimestamp() int64 { - if m != nil && m.StartTimestamp != nil { - return *m.StartTimestamp - } - return 0 -} - -func (m *HttpStartStop) GetStopTimestamp() int64 { - if m != nil && m.StopTimestamp != nil { - return *m.StopTimestamp - } - return 0 -} - -func (m *HttpStartStop) GetRequestId() *UUID { - if m != nil { - return m.RequestId - } - return nil -} - -func (m *HttpStartStop) GetPeerType() PeerType { - if m != nil && m.PeerType != nil { - return *m.PeerType - } - return PeerType_Client -} - -func (m *HttpStartStop) GetMethod() Method { - if m != nil && m.Method != nil { - return *m.Method - } - return Method_GET -} - -func (m *HttpStartStop) GetUri() string { - if m != nil && m.Uri != nil { - return *m.Uri - } - return "" -} - -func (m *HttpStartStop) GetRemoteAddress() string { - if m != nil && m.RemoteAddress != nil { - return *m.RemoteAddress - } - return "" -} - -func (m *HttpStartStop) GetUserAgent() string { - if m != nil && m.UserAgent != nil { - return *m.UserAgent - } - return "" -} - -func (m *HttpStartStop) GetStatusCode() int32 { - if m != nil && m.StatusCode != nil { - return *m.StatusCode - } - return 0 -} - -func (m *HttpStartStop) GetContentLength() int64 { - if m != nil && m.ContentLength != nil { - return *m.ContentLength - } - return 0 -} - -func (m *HttpStartStop) GetParentRequestId() *UUID { - if m != nil { - return m.ParentRequestId - } - return nil -} - -func (m *HttpStartStop) GetApplicationId() *UUID { - if m != nil { - return m.ApplicationId - } - return nil -} - -func (m *HttpStartStop) GetInstanceIndex() int32 { - if m != nil && m.InstanceIndex != nil { - return *m.InstanceIndex - } - return 0 -} - -func (m *HttpStartStop) GetInstanceId() string { - if m != nil && m.InstanceId != nil { - return *m.InstanceId - } - return "" -} - -func init() { - proto.RegisterEnum("events.PeerType", PeerType_name, PeerType_value) - proto.RegisterEnum("events.Method", Method_name, Method_value) -} -func (m *HttpStart) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Timestamp = &v - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestId == nil { - m.RequestId = &UUID{} - } - if err := m.RequestId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerType", wireType) - } - var v PeerType - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (PeerType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.PeerType = &v - hasFields[0] |= uint64(0x00000004) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) - } - var v Method - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (Method(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Method = &v - hasFields[0] |= uint64(0x00000008) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Uri = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000010) - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RemoteAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.RemoteAddress = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000020) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserAgent", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.UserAgent = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000040) - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ParentRequestId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ParentRequestId == nil { - m.ParentRequestId = &UUID{} - } - if err := m.ParentRequestId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApplicationId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ApplicationId == nil { - m.ApplicationId = &UUID{} - } - if err := m.ApplicationId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceIndex", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.InstanceIndex = &v - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.InstanceId = &s - iNdEx = postIndex - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipHttp(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") - } - if hasFields[0]&uint64(0x00000008) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("method") - } - if hasFields[0]&uint64(0x00000010) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") - } - if hasFields[0]&uint64(0x00000020) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("remoteAddress") - } - if hasFields[0]&uint64(0x00000040) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("userAgent") - } - - return nil -} -func (m *HttpStop) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Timestamp = &v - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Uri = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestId == nil { - m.RequestId = &UUID{} - } - if err := m.RequestId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - hasFields[0] |= uint64(0x00000004) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerType", wireType) - } - var v PeerType - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (PeerType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.PeerType = &v - hasFields[0] |= uint64(0x00000008) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StatusCode", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.StatusCode = &v - hasFields[0] |= uint64(0x00000010) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ContentLength", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ContentLength = &v - hasFields[0] |= uint64(0x00000020) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApplicationId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ApplicationId == nil { - m.ApplicationId = &UUID{} - } - if err := m.ApplicationId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipHttp(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") - } - if hasFields[0]&uint64(0x00000008) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") - } - if hasFields[0]&uint64(0x00000010) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("statusCode") - } - if hasFields[0]&uint64(0x00000020) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("contentLength") - } - - return nil -} -func (m *HttpStartStop) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTimestamp", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.StartTimestamp = &v - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StopTimestamp", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.StopTimestamp = &v - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestId == nil { - m.RequestId = &UUID{} - } - if err := m.RequestId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - hasFields[0] |= uint64(0x00000004) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PeerType", wireType) - } - var v PeerType - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (PeerType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.PeerType = &v - hasFields[0] |= uint64(0x00000008) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) - } - var v Method - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (Method(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Method = &v - hasFields[0] |= uint64(0x00000010) - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Uri = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000020) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RemoteAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.RemoteAddress = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000040) - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserAgent", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.UserAgent = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000080) - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StatusCode", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.StatusCode = &v - hasFields[0] |= uint64(0x00000100) - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ContentLength", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ContentLength = &v - hasFields[0] |= uint64(0x00000200) - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ParentRequestId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ParentRequestId == nil { - m.ParentRequestId = &UUID{} - } - if err := m.ParentRequestId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApplicationId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ApplicationId == nil { - m.ApplicationId = &UUID{} - } - if err := m.ApplicationId.Unmarshal(data[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceIndex", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.InstanceIndex = &v - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.InstanceId = &s - iNdEx = postIndex - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipHttp(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("startTimestamp") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("stopTimestamp") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") - } - if hasFields[0]&uint64(0x00000008) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") - } - if hasFields[0]&uint64(0x00000010) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("method") - } - if hasFields[0]&uint64(0x00000020) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") - } - if hasFields[0]&uint64(0x00000040) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("remoteAddress") - } - if hasFields[0]&uint64(0x00000080) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("userAgent") - } - if hasFields[0]&uint64(0x00000100) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("statusCode") - } - if hasFields[0]&uint64(0x00000200) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("contentLength") - } - - return nil -} -func skipHttp(data []byte) (n int, err error) { - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if data[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - return iNdEx, nil - case 3: - for { - var wire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - if wireType == 4 { - break - } - next, err := skipHttp(data[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} -func (m *HttpStart) Size() (n int) { - var l int - _ = l - if m.Timestamp != nil { - n += 1 + sovHttp(uint64(*m.Timestamp)) - } - if m.RequestId != nil { - l = m.RequestId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.PeerType != nil { - n += 1 + sovHttp(uint64(*m.PeerType)) - } - if m.Method != nil { - n += 1 + sovHttp(uint64(*m.Method)) - } - if m.Uri != nil { - l = len(*m.Uri) - n += 1 + l + sovHttp(uint64(l)) - } - if m.RemoteAddress != nil { - l = len(*m.RemoteAddress) - n += 1 + l + sovHttp(uint64(l)) - } - if m.UserAgent != nil { - l = len(*m.UserAgent) - n += 1 + l + sovHttp(uint64(l)) - } - if m.ParentRequestId != nil { - l = m.ParentRequestId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.ApplicationId != nil { - l = m.ApplicationId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.InstanceIndex != nil { - n += 1 + sovHttp(uint64(*m.InstanceIndex)) - } - if m.InstanceId != nil { - l = len(*m.InstanceId) - n += 1 + l + sovHttp(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpStop) Size() (n int) { - var l int - _ = l - if m.Timestamp != nil { - n += 1 + sovHttp(uint64(*m.Timestamp)) - } - if m.Uri != nil { - l = len(*m.Uri) - n += 1 + l + sovHttp(uint64(l)) - } - if m.RequestId != nil { - l = m.RequestId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.PeerType != nil { - n += 1 + sovHttp(uint64(*m.PeerType)) - } - if m.StatusCode != nil { - n += 1 + sovHttp(uint64(*m.StatusCode)) - } - if m.ContentLength != nil { - n += 1 + sovHttp(uint64(*m.ContentLength)) - } - if m.ApplicationId != nil { - l = m.ApplicationId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpStartStop) Size() (n int) { - var l int - _ = l - if m.StartTimestamp != nil { - n += 1 + sovHttp(uint64(*m.StartTimestamp)) - } - if m.StopTimestamp != nil { - n += 1 + sovHttp(uint64(*m.StopTimestamp)) - } - if m.RequestId != nil { - l = m.RequestId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.PeerType != nil { - n += 1 + sovHttp(uint64(*m.PeerType)) - } - if m.Method != nil { - n += 1 + sovHttp(uint64(*m.Method)) - } - if m.Uri != nil { - l = len(*m.Uri) - n += 1 + l + sovHttp(uint64(l)) - } - if m.RemoteAddress != nil { - l = len(*m.RemoteAddress) - n += 1 + l + sovHttp(uint64(l)) - } - if m.UserAgent != nil { - l = len(*m.UserAgent) - n += 1 + l + sovHttp(uint64(l)) - } - if m.StatusCode != nil { - n += 1 + sovHttp(uint64(*m.StatusCode)) - } - if m.ContentLength != nil { - n += 1 + sovHttp(uint64(*m.ContentLength)) - } - if m.ParentRequestId != nil { - l = m.ParentRequestId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.ApplicationId != nil { - l = m.ApplicationId.Size() - n += 1 + l + sovHttp(uint64(l)) - } - if m.InstanceIndex != nil { - n += 1 + sovHttp(uint64(*m.InstanceIndex)) - } - if m.InstanceId != nil { - l = len(*m.InstanceId) - n += 1 + l + sovHttp(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovHttp(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozHttp(x uint64) (n int) { - return sovHttp(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *HttpStart) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *HttpStart) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Timestamp == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") - } else { - data[i] = 0x8 - i++ - i = encodeVarintHttp(data, i, uint64(*m.Timestamp)) - } - if m.RequestId == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") - } else { - data[i] = 0x12 - i++ - i = encodeVarintHttp(data, i, uint64(m.RequestId.Size())) - n1, err := m.RequestId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.PeerType == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") - } else { - data[i] = 0x18 - i++ - i = encodeVarintHttp(data, i, uint64(*m.PeerType)) - } - if m.Method == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("method") - } else { - data[i] = 0x20 - i++ - i = encodeVarintHttp(data, i, uint64(*m.Method)) - } - if m.Uri == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") - } else { - data[i] = 0x2a - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.Uri))) - i += copy(data[i:], *m.Uri) - } - if m.RemoteAddress == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("remoteAddress") - } else { - data[i] = 0x32 - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.RemoteAddress))) - i += copy(data[i:], *m.RemoteAddress) - } - if m.UserAgent == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("userAgent") - } else { - data[i] = 0x3a - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.UserAgent))) - i += copy(data[i:], *m.UserAgent) - } - if m.ParentRequestId != nil { - data[i] = 0x42 - i++ - i = encodeVarintHttp(data, i, uint64(m.ParentRequestId.Size())) - n2, err := m.ParentRequestId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.ApplicationId != nil { - data[i] = 0x4a - i++ - i = encodeVarintHttp(data, i, uint64(m.ApplicationId.Size())) - n3, err := m.ApplicationId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.InstanceIndex != nil { - data[i] = 0x50 - i++ - i = encodeVarintHttp(data, i, uint64(*m.InstanceIndex)) - } - if m.InstanceId != nil { - data[i] = 0x5a - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.InstanceId))) - i += copy(data[i:], *m.InstanceId) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpStop) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *HttpStop) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Timestamp == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") - } else { - data[i] = 0x8 - i++ - i = encodeVarintHttp(data, i, uint64(*m.Timestamp)) - } - if m.Uri == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") - } else { - data[i] = 0x12 - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.Uri))) - i += copy(data[i:], *m.Uri) - } - if m.RequestId == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") - } else { - data[i] = 0x1a - i++ - i = encodeVarintHttp(data, i, uint64(m.RequestId.Size())) - n4, err := m.RequestId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.PeerType == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") - } else { - data[i] = 0x20 - i++ - i = encodeVarintHttp(data, i, uint64(*m.PeerType)) - } - if m.StatusCode == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("statusCode") - } else { - data[i] = 0x28 - i++ - i = encodeVarintHttp(data, i, uint64(*m.StatusCode)) - } - if m.ContentLength == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("contentLength") - } else { - data[i] = 0x30 - i++ - i = encodeVarintHttp(data, i, uint64(*m.ContentLength)) - } - if m.ApplicationId != nil { - data[i] = 0x3a - i++ - i = encodeVarintHttp(data, i, uint64(m.ApplicationId.Size())) - n5, err := m.ApplicationId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpStartStop) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *HttpStartStop) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.StartTimestamp == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("startTimestamp") - } else { - data[i] = 0x8 - i++ - i = encodeVarintHttp(data, i, uint64(*m.StartTimestamp)) - } - if m.StopTimestamp == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("stopTimestamp") - } else { - data[i] = 0x10 - i++ - i = encodeVarintHttp(data, i, uint64(*m.StopTimestamp)) - } - if m.RequestId == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") - } else { - data[i] = 0x1a - i++ - i = encodeVarintHttp(data, i, uint64(m.RequestId.Size())) - n6, err := m.RequestId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.PeerType == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") - } else { - data[i] = 0x20 - i++ - i = encodeVarintHttp(data, i, uint64(*m.PeerType)) - } - if m.Method == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("method") - } else { - data[i] = 0x28 - i++ - i = encodeVarintHttp(data, i, uint64(*m.Method)) - } - if m.Uri == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") - } else { - data[i] = 0x32 - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.Uri))) - i += copy(data[i:], *m.Uri) - } - if m.RemoteAddress == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("remoteAddress") - } else { - data[i] = 0x3a - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.RemoteAddress))) - i += copy(data[i:], *m.RemoteAddress) - } - if m.UserAgent == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("userAgent") - } else { - data[i] = 0x42 - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.UserAgent))) - i += copy(data[i:], *m.UserAgent) - } - if m.StatusCode == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("statusCode") - } else { - data[i] = 0x48 - i++ - i = encodeVarintHttp(data, i, uint64(*m.StatusCode)) - } - if m.ContentLength == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("contentLength") - } else { - data[i] = 0x50 - i++ - i = encodeVarintHttp(data, i, uint64(*m.ContentLength)) - } - if m.ParentRequestId != nil { - data[i] = 0x5a - i++ - i = encodeVarintHttp(data, i, uint64(m.ParentRequestId.Size())) - n7, err := m.ParentRequestId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.ApplicationId != nil { - data[i] = 0x62 - i++ - i = encodeVarintHttp(data, i, uint64(m.ApplicationId.Size())) - n8, err := m.ApplicationId.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.InstanceIndex != nil { - data[i] = 0x68 - i++ - i = encodeVarintHttp(data, i, uint64(*m.InstanceIndex)) - } - if m.InstanceId != nil { - data[i] = 0x72 - i++ - i = encodeVarintHttp(data, i, uint64(len(*m.InstanceId))) - i += copy(data[i:], *m.InstanceId) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Http(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Http(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintHttp(data []byte, offset int, v uint64) int { - for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - data[offset] = uint8(v) - return offset + 1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/log.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/log.pb.go deleted file mode 100644 index 15fd586..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/log.pb.go +++ /dev/null @@ -1,510 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: log.proto -// DO NOT EDIT! - -package events - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" - -import io "io" -import fmt "fmt" -import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -// / MessageType stores the destination of the message (corresponding to STDOUT or STDERR). -type LogMessage_MessageType int32 - -const ( - LogMessage_OUT LogMessage_MessageType = 1 - LogMessage_ERR LogMessage_MessageType = 2 -) - -var LogMessage_MessageType_name = map[int32]string{ - 1: "OUT", - 2: "ERR", -} -var LogMessage_MessageType_value = map[string]int32{ - "OUT": 1, - "ERR": 2, -} - -func (x LogMessage_MessageType) Enum() *LogMessage_MessageType { - p := new(LogMessage_MessageType) - *p = x - return p -} -func (x LogMessage_MessageType) String() string { - return proto.EnumName(LogMessage_MessageType_name, int32(x)) -} -func (x *LogMessage_MessageType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(LogMessage_MessageType_value, data, "LogMessage_MessageType") - if err != nil { - return err - } - *x = LogMessage_MessageType(value) - return nil -} - -// / A LogMessage contains a "log line" and associated metadata. -type LogMessage struct { - Message []byte `protobuf:"bytes,1,req,name=message" json:"message,omitempty"` - MessageType *LogMessage_MessageType `protobuf:"varint,2,req,name=message_type,enum=events.LogMessage_MessageType" json:"message_type,omitempty"` - Timestamp *int64 `protobuf:"varint,3,req,name=timestamp" json:"timestamp,omitempty"` - AppId *string `protobuf:"bytes,4,opt,name=app_id" json:"app_id,omitempty"` - SourceType *string `protobuf:"bytes,5,opt,name=source_type" json:"source_type,omitempty"` - SourceInstance *string `protobuf:"bytes,6,opt,name=source_instance" json:"source_instance,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *LogMessage) Reset() { *m = LogMessage{} } -func (m *LogMessage) String() string { return proto.CompactTextString(m) } -func (*LogMessage) ProtoMessage() {} - -func (m *LogMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *LogMessage) GetMessageType() LogMessage_MessageType { - if m != nil && m.MessageType != nil { - return *m.MessageType - } - return LogMessage_OUT -} - -func (m *LogMessage) GetTimestamp() int64 { - if m != nil && m.Timestamp != nil { - return *m.Timestamp - } - return 0 -} - -func (m *LogMessage) GetAppId() string { - if m != nil && m.AppId != nil { - return *m.AppId - } - return "" -} - -func (m *LogMessage) GetSourceType() string { - if m != nil && m.SourceType != nil { - return *m.SourceType - } - return "" -} - -func (m *LogMessage) GetSourceInstance() string { - if m != nil && m.SourceInstance != nil { - return *m.SourceInstance - } - return "" -} - -func init() { - proto.RegisterEnum("events.LogMessage_MessageType", LogMessage_MessageType_name, LogMessage_MessageType_value) -} -func (m *LogMessage) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = append([]byte{}, data[iNdEx:postIndex]...) - iNdEx = postIndex - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MessageType", wireType) - } - var v LogMessage_MessageType - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (LogMessage_MessageType(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.MessageType = &v - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Timestamp = &v - hasFields[0] |= uint64(0x00000004) - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AppId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.AppId = &s - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceType", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.SourceType = &s - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceInstance", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.SourceInstance = &s - iNdEx = postIndex - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipLog(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("message_type") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") - } - - return nil -} -func skipLog(data []byte) (n int, err error) { - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if data[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - return iNdEx, nil - case 3: - for { - var wire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - if wireType == 4 { - break - } - next, err := skipLog(data[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} -func (m *LogMessage) Size() (n int) { - var l int - _ = l - if m.Message != nil { - l = len(m.Message) - n += 1 + l + sovLog(uint64(l)) - } - if m.MessageType != nil { - n += 1 + sovLog(uint64(*m.MessageType)) - } - if m.Timestamp != nil { - n += 1 + sovLog(uint64(*m.Timestamp)) - } - if m.AppId != nil { - l = len(*m.AppId) - n += 1 + l + sovLog(uint64(l)) - } - if m.SourceType != nil { - l = len(*m.SourceType) - n += 1 + l + sovLog(uint64(l)) - } - if m.SourceInstance != nil { - l = len(*m.SourceInstance) - n += 1 + l + sovLog(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovLog(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozLog(x uint64) (n int) { - return sovLog(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *LogMessage) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *LogMessage) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Message == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") - } else { - data[i] = 0xa - i++ - i = encodeVarintLog(data, i, uint64(len(m.Message))) - i += copy(data[i:], m.Message) - } - if m.MessageType == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("message_type") - } else { - data[i] = 0x10 - i++ - i = encodeVarintLog(data, i, uint64(*m.MessageType)) - } - if m.Timestamp == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") - } else { - data[i] = 0x18 - i++ - i = encodeVarintLog(data, i, uint64(*m.Timestamp)) - } - if m.AppId != nil { - data[i] = 0x22 - i++ - i = encodeVarintLog(data, i, uint64(len(*m.AppId))) - i += copy(data[i:], *m.AppId) - } - if m.SourceType != nil { - data[i] = 0x2a - i++ - i = encodeVarintLog(data, i, uint64(len(*m.SourceType))) - i += copy(data[i:], *m.SourceType) - } - if m.SourceInstance != nil { - data[i] = 0x32 - i++ - i = encodeVarintLog(data, i, uint64(len(*m.SourceInstance))) - i += copy(data[i:], *m.SourceInstance) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Log(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Log(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintLog(data []byte, offset int, v uint64) int { - for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - data[offset] = uint8(v) - return offset + 1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/metric.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/metric.pb.go deleted file mode 100644 index ad9c69d..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/metric.pb.go +++ /dev/null @@ -1,853 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: metric.proto -// DO NOT EDIT! - -package events - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" - -import io "io" -import fmt "fmt" -import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -// / A ValueMetric indicates the value of a metric at an instant in time. -type ValueMetric struct { - Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` - Value *float64 `protobuf:"fixed64,2,req,name=value" json:"value,omitempty"` - Unit *string `protobuf:"bytes,3,req,name=unit" json:"unit,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ValueMetric) Reset() { *m = ValueMetric{} } -func (m *ValueMetric) String() string { return proto.CompactTextString(m) } -func (*ValueMetric) ProtoMessage() {} - -func (m *ValueMetric) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *ValueMetric) GetValue() float64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -func (m *ValueMetric) GetUnit() string { - if m != nil && m.Unit != nil { - return *m.Unit - } - return "" -} - -// / A CounterEvent represents the increment of a counter. It contains only the change in the value; it is the responsibility of downstream consumers to maintain the value of the counter. -type CounterEvent struct { - Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` - Delta *uint64 `protobuf:"varint,2,req,name=delta" json:"delta,omitempty"` - Total *uint64 `protobuf:"varint,3,opt,name=total" json:"total,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *CounterEvent) Reset() { *m = CounterEvent{} } -func (m *CounterEvent) String() string { return proto.CompactTextString(m) } -func (*CounterEvent) ProtoMessage() {} - -func (m *CounterEvent) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *CounterEvent) GetDelta() uint64 { - if m != nil && m.Delta != nil { - return *m.Delta - } - return 0 -} - -func (m *CounterEvent) GetTotal() uint64 { - if m != nil && m.Total != nil { - return *m.Total - } - return 0 -} - -// / A ContainerMetric records resource usage of an app in a container. -type ContainerMetric struct { - ApplicationId *string `protobuf:"bytes,1,req,name=applicationId" json:"applicationId,omitempty"` - InstanceIndex *int32 `protobuf:"varint,2,req,name=instanceIndex" json:"instanceIndex,omitempty"` - CpuPercentage *float64 `protobuf:"fixed64,3,req,name=cpuPercentage" json:"cpuPercentage,omitempty"` - MemoryBytes *uint64 `protobuf:"varint,4,req,name=memoryBytes" json:"memoryBytes,omitempty"` - DiskBytes *uint64 `protobuf:"varint,5,req,name=diskBytes" json:"diskBytes,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ContainerMetric) Reset() { *m = ContainerMetric{} } -func (m *ContainerMetric) String() string { return proto.CompactTextString(m) } -func (*ContainerMetric) ProtoMessage() {} - -func (m *ContainerMetric) GetApplicationId() string { - if m != nil && m.ApplicationId != nil { - return *m.ApplicationId - } - return "" -} - -func (m *ContainerMetric) GetInstanceIndex() int32 { - if m != nil && m.InstanceIndex != nil { - return *m.InstanceIndex - } - return 0 -} - -func (m *ContainerMetric) GetCpuPercentage() float64 { - if m != nil && m.CpuPercentage != nil { - return *m.CpuPercentage - } - return 0 -} - -func (m *ContainerMetric) GetMemoryBytes() uint64 { - if m != nil && m.MemoryBytes != nil { - return *m.MemoryBytes - } - return 0 -} - -func (m *ContainerMetric) GetDiskBytes() uint64 { - if m != nil && m.DiskBytes != nil { - return *m.DiskBytes - } - return 0 -} - -func init() { -} -func (m *ValueMetric) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Name = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - iNdEx += 8 - v = uint64(data[iNdEx-8]) - v |= uint64(data[iNdEx-7]) << 8 - v |= uint64(data[iNdEx-6]) << 16 - v |= uint64(data[iNdEx-5]) << 24 - v |= uint64(data[iNdEx-4]) << 32 - v |= uint64(data[iNdEx-3]) << 40 - v |= uint64(data[iNdEx-2]) << 48 - v |= uint64(data[iNdEx-1]) << 56 - v2 := math.Float64frombits(v) - m.Value = &v2 - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Unit", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Unit = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000004) - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipMetric(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("value") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("unit") - } - - return nil -} -func (m *CounterEvent) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.Name = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Delta", wireType) - } - var v uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Delta = &v - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) - } - var v uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Total = &v - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipMetric(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("delta") - } - - return nil -} -func (m *ContainerMetric) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApplicationId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - postIndex := iNdEx + int(stringLen) - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(data[iNdEx:postIndex]) - m.ApplicationId = &s - iNdEx = postIndex - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceIndex", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.InstanceIndex = &v - hasFields[0] |= uint64(0x00000002) - case 3: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field CpuPercentage", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - iNdEx += 8 - v = uint64(data[iNdEx-8]) - v |= uint64(data[iNdEx-7]) << 8 - v |= uint64(data[iNdEx-6]) << 16 - v |= uint64(data[iNdEx-5]) << 24 - v |= uint64(data[iNdEx-4]) << 32 - v |= uint64(data[iNdEx-3]) << 40 - v |= uint64(data[iNdEx-2]) << 48 - v |= uint64(data[iNdEx-1]) << 56 - v2 := math.Float64frombits(v) - m.CpuPercentage = &v2 - hasFields[0] |= uint64(0x00000004) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MemoryBytes", wireType) - } - var v uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.MemoryBytes = &v - hasFields[0] |= uint64(0x00000008) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DiskBytes", wireType) - } - var v uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.DiskBytes = &v - hasFields[0] |= uint64(0x00000010) - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipMetric(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("applicationId") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("instanceIndex") - } - if hasFields[0]&uint64(0x00000004) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("cpuPercentage") - } - if hasFields[0]&uint64(0x00000008) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("memoryBytes") - } - if hasFields[0]&uint64(0x00000010) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("diskBytes") - } - - return nil -} -func skipMetric(data []byte) (n int, err error) { - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if data[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - return iNdEx, nil - case 3: - for { - var wire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - if wireType == 4 { - break - } - next, err := skipMetric(data[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} -func (m *ValueMetric) Size() (n int) { - var l int - _ = l - if m.Name != nil { - l = len(*m.Name) - n += 1 + l + sovMetric(uint64(l)) - } - if m.Value != nil { - n += 9 - } - if m.Unit != nil { - l = len(*m.Unit) - n += 1 + l + sovMetric(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CounterEvent) Size() (n int) { - var l int - _ = l - if m.Name != nil { - l = len(*m.Name) - n += 1 + l + sovMetric(uint64(l)) - } - if m.Delta != nil { - n += 1 + sovMetric(uint64(*m.Delta)) - } - if m.Total != nil { - n += 1 + sovMetric(uint64(*m.Total)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ContainerMetric) Size() (n int) { - var l int - _ = l - if m.ApplicationId != nil { - l = len(*m.ApplicationId) - n += 1 + l + sovMetric(uint64(l)) - } - if m.InstanceIndex != nil { - n += 1 + sovMetric(uint64(*m.InstanceIndex)) - } - if m.CpuPercentage != nil { - n += 9 - } - if m.MemoryBytes != nil { - n += 1 + sovMetric(uint64(*m.MemoryBytes)) - } - if m.DiskBytes != nil { - n += 1 + sovMetric(uint64(*m.DiskBytes)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovMetric(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozMetric(x uint64) (n int) { - return sovMetric(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ValueMetric) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *ValueMetric) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Name == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") - } else { - data[i] = 0xa - i++ - i = encodeVarintMetric(data, i, uint64(len(*m.Name))) - i += copy(data[i:], *m.Name) - } - if m.Value == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("value") - } else { - data[i] = 0x11 - i++ - i = encodeFixed64Metric(data, i, uint64(math.Float64bits(*m.Value))) - } - if m.Unit == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("unit") - } else { - data[i] = 0x1a - i++ - i = encodeVarintMetric(data, i, uint64(len(*m.Unit))) - i += copy(data[i:], *m.Unit) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CounterEvent) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *CounterEvent) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Name == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") - } else { - data[i] = 0xa - i++ - i = encodeVarintMetric(data, i, uint64(len(*m.Name))) - i += copy(data[i:], *m.Name) - } - if m.Delta == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("delta") - } else { - data[i] = 0x10 - i++ - i = encodeVarintMetric(data, i, uint64(*m.Delta)) - } - if m.Total != nil { - data[i] = 0x18 - i++ - i = encodeVarintMetric(data, i, uint64(*m.Total)) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ContainerMetric) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *ContainerMetric) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.ApplicationId == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("applicationId") - } else { - data[i] = 0xa - i++ - i = encodeVarintMetric(data, i, uint64(len(*m.ApplicationId))) - i += copy(data[i:], *m.ApplicationId) - } - if m.InstanceIndex == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("instanceIndex") - } else { - data[i] = 0x10 - i++ - i = encodeVarintMetric(data, i, uint64(*m.InstanceIndex)) - } - if m.CpuPercentage == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("cpuPercentage") - } else { - data[i] = 0x19 - i++ - i = encodeFixed64Metric(data, i, uint64(math.Float64bits(*m.CpuPercentage))) - } - if m.MemoryBytes == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("memoryBytes") - } else { - data[i] = 0x20 - i++ - i = encodeVarintMetric(data, i, uint64(*m.MemoryBytes)) - } - if m.DiskBytes == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("diskBytes") - } else { - data[i] = 0x28 - i++ - i = encodeVarintMetric(data, i, uint64(*m.DiskBytes)) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Metric(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Metric(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintMetric(data []byte, offset int, v uint64) int { - for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - data[offset] = uint8(v) - return offset + 1 -} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/uuid.pb.go b/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/uuid.pb.go deleted file mode 100644 index 1502322..0000000 --- a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/uuid.pb.go +++ /dev/null @@ -1,308 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: uuid.proto -// DO NOT EDIT! - -package events - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" - -import io "io" -import fmt "fmt" -import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -// / Type representing a 128-bit UUID. -// -// The bytes of the UUID should be packed in little-endian **byte** (not bit) order. For example, the UUID `f47ac10b-58cc-4372-a567-0e02b2c3d479` should be encoded as `UUID{ low: 0x7243cc580bc17af4, high: 0x79d4c3b2020e67a5 }` -type UUID struct { - Low *uint64 `protobuf:"varint,1,req,name=low" json:"low,omitempty"` - High *uint64 `protobuf:"varint,2,req,name=high" json:"high,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *UUID) Reset() { *m = UUID{} } -func (m *UUID) String() string { return proto.CompactTextString(m) } -func (*UUID) ProtoMessage() {} - -func (m *UUID) GetLow() uint64 { - if m != nil && m.Low != nil { - return *m.Low - } - return 0 -} - -func (m *UUID) GetHigh() uint64 { - if m != nil && m.High != nil { - return *m.High - } - return 0 -} - -func init() { -} -func (m *UUID) Unmarshal(data []byte) error { - var hasFields [1]uint64 - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Low", wireType) - } - var v uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Low = &v - hasFields[0] |= uint64(0x00000001) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field High", wireType) - } - var v uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.High = &v - hasFields[0] |= uint64(0x00000002) - default: - var sizeOfWire int - for { - sizeOfWire++ - wire >>= 7 - if wire == 0 { - break - } - } - iNdEx -= sizeOfWire - skippy, err := skipUuid(data[iNdEx:]) - if err != nil { - return err - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if hasFields[0]&uint64(0x00000001) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("low") - } - if hasFields[0]&uint64(0x00000002) == 0 { - return github_com_gogo_protobuf_proto.NewRequiredNotSetError("high") - } - - return nil -} -func skipUuid(data []byte) (n int, err error) { - l := len(data) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if data[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - return iNdEx, nil - case 3: - for { - var wire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - if wireType == 4 { - break - } - next, err := skipUuid(data[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} -func (m *UUID) Size() (n int) { - var l int - _ = l - if m.Low != nil { - n += 1 + sovUuid(uint64(*m.Low)) - } - if m.High != nil { - n += 1 + sovUuid(uint64(*m.High)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovUuid(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozUuid(x uint64) (n int) { - return sovUuid(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *UUID) Marshal() (data []byte, err error) { - size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) - if err != nil { - return nil, err - } - return data[:n], nil -} - -func (m *UUID) MarshalTo(data []byte) (n int, err error) { - var i int - _ = i - var l int - _ = l - if m.Low == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("low") - } else { - data[i] = 0x8 - i++ - i = encodeVarintUuid(data, i, uint64(*m.Low)) - } - if m.High == nil { - return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("high") - } else { - data[i] = 0x10 - i++ - i = encodeVarintUuid(data, i, uint64(*m.High)) - } - if m.XXX_unrecognized != nil { - i += copy(data[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeFixed64Uuid(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Uuid(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintUuid(data []byte, offset int, v uint64) int { - for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - data[offset] = uint8(v) - return offset + 1 -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/.travis.yml b/Godeps/_workspace/src/github.com/codegangsta/cli/.travis.yml deleted file mode 100644 index baf46ab..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: go -go: 1.1 - -script: -- go vet ./... -- go test -v ./... diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/LICENSE b/Godeps/_workspace/src/github.com/codegangsta/cli/LICENSE deleted file mode 100644 index 5515ccf..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (C) 2013 Jeremy Saenz -All Rights Reserved. - -MIT LICENSE - -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/Godeps/_workspace/src/github.com/codegangsta/cli/README.md b/Godeps/_workspace/src/github.com/codegangsta/cli/README.md deleted file mode 100644 index 5c83df6..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/README.md +++ /dev/null @@ -1,287 +0,0 @@ -[![Build Status](https://travis-ci.org/codegangsta/cli.png?branch=master)](https://travis-ci.org/codegangsta/cli) - -# cli.go -cli.go is simple, fast, and fun package for building command line apps in Go. The goal is to enable developers to write fast and distributable command line applications in an expressive way. - -You can view the API docs here: -http://godoc.org/github.com/codegangsta/cli - -## Overview -Command line apps are usually so tiny that there is absolutely no reason why your code should *not* be self-documenting. Things like generating help text and parsing command flags/options should not hinder productivity when writing a command line app. - -**This is where cli.go comes into play.** cli.go makes command line programming fun, organized, and expressive! - -## Installation -Make sure you have a working Go environment (go 1.1 is *required*). [See the install instructions](http://golang.org/doc/install.html). - -To install `cli.go`, simply run: -``` -$ go get github.com/codegangsta/cli -``` - -Make sure your `PATH` includes to the `$GOPATH/bin` directory so your commands can be easily used: -``` -export PATH=$PATH:$GOPATH/bin -``` - -## Getting Started -One of the philosophies behind cli.go is that an API should be playful and full of discovery. So a cli.go app can be as little as one line of code in `main()`. - -``` go -package main - -import ( - "os" - "github.com/codegangsta/cli" -) - -func main() { - cli.NewApp().Run(os.Args) -} -``` - -This app will run and show help text, but is not very useful. Let's give an action to execute and some help documentation: - -``` go -package main - -import ( - "os" - "github.com/codegangsta/cli" -) - -func main() { - app := cli.NewApp() - app.Name = "boom" - app.Usage = "make an explosive entrance" - app.Action = func(c *cli.Context) { - println("boom! I say!") - } - - app.Run(os.Args) -} -``` - -Running this already gives you a ton of functionality, plus support for things like subcommands and flags, which are covered below. - -## Example - -Being a programmer can be a lonely job. Thankfully by the power of automation that is not the case! Let's create a greeter app to fend off our demons of loneliness! - -``` go -/* greet.go */ -package main - -import ( - "os" - "github.com/codegangsta/cli" -) - -func main() { - app := cli.NewApp() - app.Name = "greet" - app.Usage = "fight the loneliness!" - app.Action = func(c *cli.Context) { - println("Hello friend!") - } - - app.Run(os.Args) -} -``` - -Install our command to the `$GOPATH/bin` directory: - -``` -$ go install -``` - -Finally run our new command: - -``` -$ greet -Hello friend! -``` - -cli.go also generates some bitchass help text: -``` -$ greet help -NAME: - greet - fight the loneliness! - -USAGE: - greet [global options] command [command options] [arguments...] - -VERSION: - 0.0.0 - -COMMANDS: - help, h Shows a list of commands or help for one command - -GLOBAL OPTIONS - --version Shows version information -``` - -### Arguments -You can lookup arguments by calling the `Args` function on `cli.Context`. - -``` go -... -app.Action = func(c *cli.Context) { - println("Hello", c.Args()[0]) -} -... -``` - -### Flags -Setting and querying flags is simple. -``` go -... -app.Flags = []cli.Flag { - cli.StringFlag{ - Name: "lang", - Value: "english", - Usage: "language for the greeting", - }, -} -app.Action = func(c *cli.Context) { - name := "someone" - if len(c.Args()) > 0 { - name = c.Args()[0] - } - if c.String("lang") == "spanish" { - println("Hola", name) - } else { - println("Hello", name) - } -} -... -``` - -#### Alternate Names - -You can set alternate (or short) names for flags by providing a comma-delimited list for the `Name`. e.g. - -``` go -app.Flags = []cli.Flag { - cli.StringFlag{ - Name: "lang, l", - Value: "english", - Usage: "language for the greeting", - }, -} -``` - -#### Values from the Environment - -You can also have the default value set from the environment via `EnvVar`. e.g. - -``` go -app.Flags = []cli.Flag { - cli.StringFlag{ - Name: "lang, l", - Value: "english", - Usage: "language for the greeting", - EnvVar: "APP_LANG", - }, -} -``` - -That flag can then be set with `--lang spanish` or `-l spanish`. Note that giving two different forms of the same flag in the same command invocation is an error. - -### Subcommands - -Subcommands can be defined for a more git-like command line app. -```go -... -app.Commands = []cli.Command{ - { - Name: "add", - ShortName: "a", - Usage: "add a task to the list", - Action: func(c *cli.Context) { - println("added task: ", c.Args().First()) - }, - }, - { - Name: "complete", - ShortName: "c", - Usage: "complete a task on the list", - Action: func(c *cli.Context) { - println("completed task: ", c.Args().First()) - }, - }, - { - Name: "template", - ShortName: "r", - Usage: "options for task templates", - Subcommands: []cli.Command{ - { - Name: "add", - Usage: "add a new template", - Action: func(c *cli.Context) { - println("new task template: ", c.Args().First()) - }, - }, - { - Name: "remove", - Usage: "remove an existing template", - Action: func(c *cli.Context) { - println("removed task template: ", c.Args().First()) - }, - }, - }, - }, -} -... -``` - -### Bash Completion - -You can enable completion commands by setting the `EnableBashCompletion` -flag on the `App` object. By default, this setting will only auto-complete to -show an app's subcommands, but you can write your own completion methods for -the App or its subcommands. -```go -... -var tasks = []string{"cook", "clean", "laundry", "eat", "sleep", "code"} -app := cli.NewApp() -app.EnableBashCompletion = true -app.Commands = []cli.Command{ - { - Name: "complete", - ShortName: "c", - Usage: "complete a task on the list", - Action: func(c *cli.Context) { - println("completed task: ", c.Args().First()) - }, - BashComplete: func(c *cli.Context) { - // This will complete if no args are passed - if len(c.Args()) > 0 { - return - } - for _, t := range tasks { - println(t) - } - }, - } -} -... -``` - -#### To Enable - -Source the `autocomplete/bash_autocomplete` file in your `.bashrc` file while -setting the `PROG` variable to the name of your program: - -`PROG=myprogram source /.../cli/autocomplete/bash_autocomplete` - - -## Contribution Guidelines -Feel free to put up a pull request to fix a bug or maybe add a feature. I will give it a code review and make sure that it does not break backwards compatibility. If I or any other collaborators agree that it is in line with the vision of the project, we will work with you to get the code into a mergeable state and merge it into the master branch. - -If you are have contributed something significant to the project, I will most likely add you as a collaborator. As a collaborator you are given the ability to merge others pull requests. It is very important that new code does not break existing code, so be careful about what code you do choose to merge. If you have any questions feel free to link @codegangsta to the issue in question and we can review it together. - -If you feel like you have contributed to the project but have not yet been added as a collaborator, I probably forgot to add you. Hit @codegangsta up over email and we will get it figured out. - -## About -cli.go is written by none other than the [Code Gangsta](http://codegangsta.io) diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/app.go b/Godeps/_workspace/src/github.com/codegangsta/cli/app.go deleted file mode 100644 index 66e541c..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/app.go +++ /dev/null @@ -1,246 +0,0 @@ -package cli - -import ( - "fmt" - "io/ioutil" - "os" - "time" -) - -// App is the main structure of a cli application. It is recomended that -// and app be created with the cli.NewApp() function -type App struct { - // The name of the program. Defaults to os.Args[0] - Name string - // Description of the program. - Usage string - // Version of the program - Version string - // List of commands to execute - Commands []Command - // List of flags to parse - Flags []Flag - // Boolean to enable bash completion commands - EnableBashCompletion bool - // Boolean to hide built-in help command - HideHelp bool - // An action to execute when the bash-completion flag is set - BashComplete func(context *Context) - // An action to execute before any subcommands are run, but after the context is ready - // If a non-nil error is returned, no subcommands are run - Before func(context *Context) error - // The action to execute when no subcommands are specified - Action func(context *Context) - // Execute this function if the proper command cannot be found - CommandNotFound func(context *Context, command string) - // Compilation date - Compiled time.Time - // Author - Author string - // Author e-mail - Email string -} - -// Tries to find out when this binary was compiled. -// Returns the current time if it fails to find it. -func compileTime() time.Time { - info, err := os.Stat(os.Args[0]) - if err != nil { - return time.Now() - } - return info.ModTime() -} - -// Creates a new cli Application with some reasonable defaults for Name, Usage, Version and Action. -func NewApp() *App { - return &App{ - Name: os.Args[0], - Usage: "A new cli application", - Version: "0.0.0", - BashComplete: DefaultAppComplete, - Action: helpCommand.Action, - Compiled: compileTime(), - } -} - -// Entry point to the cli app. Parses the arguments slice and routes to the proper flag/args combination -func (a *App) Run(arguments []string) error { - // append help to commands - if a.Command(helpCommand.Name) == nil && !a.HideHelp { - a.Commands = append(a.Commands, helpCommand) - a.appendFlag(HelpFlag) - } - - //append version/help flags - if a.EnableBashCompletion { - a.appendFlag(BashCompletionFlag) - } - a.appendFlag(VersionFlag) - - // parse flags - set := flagSet(a.Name, a.Flags) - set.SetOutput(ioutil.Discard) - err := set.Parse(arguments[1:]) - nerr := normalizeFlags(a.Flags, set) - if nerr != nil { - fmt.Println(nerr) - context := NewContext(a, set, set) - ShowAppHelp(context) - fmt.Println("") - return nerr - } - context := NewContext(a, set, set) - - if err != nil { - fmt.Printf("Incorrect Usage.\n\n") - ShowAppHelp(context) - fmt.Println("") - return err - } - - if checkCompletions(context) { - return nil - } - - if checkHelp(context) { - return nil - } - - if checkVersion(context) { - return nil - } - - if a.Before != nil { - err := a.Before(context) - if err != nil { - return err - } - } - - args := context.Args() - if args.Present() { - name := args.First() - c := a.Command(name) - if c != nil { - return c.Run(context) - } - } - - // Run default Action - a.Action(context) - return nil -} - -// Another entry point to the cli app, takes care of passing arguments and error handling -func (a *App) RunAndExitOnError() { - if err := a.Run(os.Args); err != nil { - os.Stderr.WriteString(fmt.Sprintln(err)) - os.Exit(1) - } -} - -// Invokes the subcommand given the context, parses ctx.Args() to generate command-specific flags -func (a *App) RunAsSubcommand(ctx *Context) error { - // append help to commands - if len(a.Commands) > 0 { - if a.Command(helpCommand.Name) == nil && !a.HideHelp { - a.Commands = append(a.Commands, helpCommand) - a.appendFlag(HelpFlag) - } - } - - // append flags - if a.EnableBashCompletion { - a.appendFlag(BashCompletionFlag) - } - - // parse flags - set := flagSet(a.Name, a.Flags) - set.SetOutput(ioutil.Discard) - err := set.Parse(ctx.Args().Tail()) - nerr := normalizeFlags(a.Flags, set) - context := NewContext(a, set, ctx.globalSet) - - if nerr != nil { - fmt.Println(nerr) - if len(a.Commands) > 0 { - ShowSubcommandHelp(context) - } else { - ShowCommandHelp(ctx, context.Args().First()) - } - fmt.Println("") - return nerr - } - - if err != nil { - fmt.Printf("Incorrect Usage.\n\n") - ShowSubcommandHelp(context) - return err - } - - if checkCompletions(context) { - return nil - } - - if len(a.Commands) > 0 { - if checkSubcommandHelp(context) { - return nil - } - } else { - if checkCommandHelp(ctx, context.Args().First()) { - return nil - } - } - - if a.Before != nil { - err := a.Before(context) - if err != nil { - return err - } - } - - args := context.Args() - if args.Present() { - name := args.First() - c := a.Command(name) - if c != nil { - return c.Run(context) - } - } - - // Run default Action - if len(a.Commands) > 0 { - a.Action(context) - } else { - a.Action(ctx) - } - - return nil -} - -// Returns the named command on App. Returns nil if the command does not exist -func (a *App) Command(name string) *Command { - for _, c := range a.Commands { - if c.HasName(name) { - return &c - } - } - - return nil -} - -func (a *App) hasFlag(flag Flag) bool { - for _, f := range a.Flags { - if flag == f { - return true - } - } - - return false -} - -func (a *App) appendFlag(flag Flag) { - if !a.hasFlag(flag) { - a.Flags = append(a.Flags, flag) - } -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/app_test.go b/Godeps/_workspace/src/github.com/codegangsta/cli/app_test.go deleted file mode 100644 index 81d1174..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/app_test.go +++ /dev/null @@ -1,423 +0,0 @@ -package cli_test - -import ( - "fmt" - "os" - "testing" - - "github.com/codegangsta/cli" -) - -func ExampleApp() { - // set args for examples sake - os.Args = []string{"greet", "--name", "Jeremy"} - - app := cli.NewApp() - app.Name = "greet" - app.Flags = []cli.Flag{ - cli.StringFlag{Name: "name", Value: "bob", Usage: "a name to say"}, - } - app.Action = func(c *cli.Context) { - fmt.Printf("Hello %v\n", c.String("name")) - } - app.Run(os.Args) - // Output: - // Hello Jeremy -} - -func ExampleAppSubcommand() { - // set args for examples sake - os.Args = []string{"say", "hi", "english", "--name", "Jeremy"} - app := cli.NewApp() - app.Name = "say" - app.Commands = []cli.Command{ - { - Name: "hello", - ShortName: "hi", - Usage: "use it to see a description", - Description: "This is how we describe hello the function", - Subcommands: []cli.Command{ - { - Name: "english", - ShortName: "en", - Usage: "sends a greeting in english", - Description: "greets someone in english", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "name", - Value: "Bob", - Usage: "Name of the person to greet", - }, - }, - Action: func(c *cli.Context) { - fmt.Println("Hello,", c.String("name")) - }, - }, - }, - }, - } - - app.Run(os.Args) - // Output: - // Hello, Jeremy -} - -func ExampleAppHelp() { - // set args for examples sake - os.Args = []string{"greet", "h", "describeit"} - - app := cli.NewApp() - app.Name = "greet" - app.Flags = []cli.Flag{ - cli.StringFlag{Name: "name", Value: "bob", Usage: "a name to say"}, - } - app.Commands = []cli.Command{ - { - Name: "describeit", - ShortName: "d", - Usage: "use it to see a description", - Description: "This is how we describe describeit the function", - Action: func(c *cli.Context) { - fmt.Printf("i like to describe things") - }, - }, - } - app.Run(os.Args) - // Output: - // NAME: - // describeit - use it to see a description - // - // USAGE: - // command describeit [arguments...] - // - // DESCRIPTION: - // This is how we describe describeit the function -} - -func ExampleAppBashComplete() { - // set args for examples sake - os.Args = []string{"greet", "--generate-bash-completion"} - - app := cli.NewApp() - app.Name = "greet" - app.EnableBashCompletion = true - app.Commands = []cli.Command{ - { - Name: "describeit", - ShortName: "d", - Usage: "use it to see a description", - Description: "This is how we describe describeit the function", - Action: func(c *cli.Context) { - fmt.Printf("i like to describe things") - }, - }, { - Name: "next", - Usage: "next example", - Description: "more stuff to see when generating bash completion", - Action: func(c *cli.Context) { - fmt.Printf("the next example") - }, - }, - } - - app.Run(os.Args) - // Output: - // describeit - // d - // next - // help - // h -} - -func TestApp_Run(t *testing.T) { - s := "" - - app := cli.NewApp() - app.Action = func(c *cli.Context) { - s = s + c.Args().First() - } - - err := app.Run([]string{"command", "foo"}) - expect(t, err, nil) - err = app.Run([]string{"command", "bar"}) - expect(t, err, nil) - expect(t, s, "foobar") -} - -var commandAppTests = []struct { - name string - expected bool -}{ - {"foobar", true}, - {"batbaz", true}, - {"b", true}, - {"f", true}, - {"bat", false}, - {"nothing", false}, -} - -func TestApp_Command(t *testing.T) { - app := cli.NewApp() - fooCommand := cli.Command{Name: "foobar", ShortName: "f"} - batCommand := cli.Command{Name: "batbaz", ShortName: "b"} - app.Commands = []cli.Command{ - fooCommand, - batCommand, - } - - for _, test := range commandAppTests { - expect(t, app.Command(test.name) != nil, test.expected) - } -} - -func TestApp_CommandWithArgBeforeFlags(t *testing.T) { - var parsedOption, firstArg string - - app := cli.NewApp() - command := cli.Command{ - Name: "cmd", - Flags: []cli.Flag{ - cli.StringFlag{Name: "option", Value: "", Usage: "some option"}, - }, - Action: func(c *cli.Context) { - parsedOption = c.String("option") - firstArg = c.Args().First() - }, - } - app.Commands = []cli.Command{command} - - app.Run([]string{"", "cmd", "my-arg", "--option", "my-option"}) - - expect(t, parsedOption, "my-option") - expect(t, firstArg, "my-arg") -} - -func TestApp_Float64Flag(t *testing.T) { - var meters float64 - - app := cli.NewApp() - app.Flags = []cli.Flag{ - cli.Float64Flag{Name: "height", Value: 1.5, Usage: "Set the height, in meters"}, - } - app.Action = func(c *cli.Context) { - meters = c.Float64("height") - } - - app.Run([]string{"", "--height", "1.93"}) - expect(t, meters, 1.93) -} - -func TestApp_ParseSliceFlags(t *testing.T) { - var parsedOption, firstArg string - var parsedIntSlice []int - var parsedStringSlice []string - - app := cli.NewApp() - command := cli.Command{ - Name: "cmd", - Flags: []cli.Flag{ - cli.IntSliceFlag{Name: "p", Value: &cli.IntSlice{}, Usage: "set one or more ip addr"}, - cli.StringSliceFlag{Name: "ip", Value: &cli.StringSlice{}, Usage: "set one or more ports to open"}, - }, - Action: func(c *cli.Context) { - parsedIntSlice = c.IntSlice("p") - parsedStringSlice = c.StringSlice("ip") - parsedOption = c.String("option") - firstArg = c.Args().First() - }, - } - app.Commands = []cli.Command{command} - - app.Run([]string{"", "cmd", "my-arg", "-p", "22", "-p", "80", "-ip", "8.8.8.8", "-ip", "8.8.4.4"}) - - IntsEquals := func(a, b []int) bool { - if len(a) != len(b) { - return false - } - for i, v := range a { - if v != b[i] { - return false - } - } - return true - } - - StrsEquals := func(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i, v := range a { - if v != b[i] { - return false - } - } - return true - } - var expectedIntSlice = []int{22, 80} - var expectedStringSlice = []string{"8.8.8.8", "8.8.4.4"} - - if !IntsEquals(parsedIntSlice, expectedIntSlice) { - t.Errorf("%v does not match %v", parsedIntSlice, expectedIntSlice) - } - - if !StrsEquals(parsedStringSlice, expectedStringSlice) { - t.Errorf("%v does not match %v", parsedStringSlice, expectedStringSlice) - } -} - -func TestApp_BeforeFunc(t *testing.T) { - beforeRun, subcommandRun := false, false - beforeError := fmt.Errorf("fail") - var err error - - app := cli.NewApp() - - app.Before = func(c *cli.Context) error { - beforeRun = true - s := c.String("opt") - if s == "fail" { - return beforeError - } - - return nil - } - - app.Commands = []cli.Command{ - cli.Command{ - Name: "sub", - Action: func(c *cli.Context) { - subcommandRun = true - }, - }, - } - - app.Flags = []cli.Flag{ - cli.StringFlag{Name: "opt"}, - } - - // run with the Before() func succeeding - err = app.Run([]string{"command", "--opt", "succeed", "sub"}) - - if err != nil { - t.Fatalf("Run error: %s", err) - } - - if beforeRun == false { - t.Errorf("Before() not executed when expected") - } - - if subcommandRun == false { - t.Errorf("Subcommand not executed when expected") - } - - // reset - beforeRun, subcommandRun = false, false - - // run with the Before() func failing - err = app.Run([]string{"command", "--opt", "fail", "sub"}) - - // should be the same error produced by the Before func - if err != beforeError { - t.Errorf("Run error expected, but not received") - } - - if beforeRun == false { - t.Errorf("Before() not executed when expected") - } - - if subcommandRun == true { - t.Errorf("Subcommand executed when NOT expected") - } - -} - -func TestAppHelpPrinter(t *testing.T) { - oldPrinter := cli.HelpPrinter - defer func() { - cli.HelpPrinter = oldPrinter - }() - - var wasCalled = false - cli.HelpPrinter = func(template string, data interface{}) { - wasCalled = true - } - - app := cli.NewApp() - app.Run([]string{"-h"}) - - if wasCalled == false { - t.Errorf("Help printer expected to be called, but was not") - } -} - -func TestAppVersionPrinter(t *testing.T) { - oldPrinter := cli.VersionPrinter - defer func() { - cli.VersionPrinter = oldPrinter - }() - - var wasCalled = false - cli.VersionPrinter = func(c *cli.Context) { - wasCalled = true - } - - app := cli.NewApp() - ctx := cli.NewContext(app, nil, nil) - cli.ShowVersion(ctx) - - if wasCalled == false { - t.Errorf("Version printer expected to be called, but was not") - } -} - -func TestAppCommandNotFound(t *testing.T) { - beforeRun, subcommandRun := false, false - app := cli.NewApp() - - app.CommandNotFound = func(c *cli.Context, command string) { - beforeRun = true - } - - app.Commands = []cli.Command{ - cli.Command{ - Name: "bar", - Action: func(c *cli.Context) { - subcommandRun = true - }, - }, - } - - app.Run([]string{"command", "foo"}) - - expect(t, beforeRun, true) - expect(t, subcommandRun, false) -} - -func TestGlobalFlagsInSubcommands(t *testing.T) { - subcommandRun := false - app := cli.NewApp() - - app.Flags = []cli.Flag{ - cli.BoolFlag{Name: "debug, d", Usage: "Enable debugging"}, - } - - app.Commands = []cli.Command{ - cli.Command{ - Name: "foo", - Subcommands: []cli.Command{ - { - Name: "bar", - Action: func(c *cli.Context) { - if c.GlobalBool("debug") { - subcommandRun = true - } - }, - }, - }, - }, - } - - app.Run([]string{"command", "-d", "foo", "bar"}) - - expect(t, subcommandRun, true) -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/autocomplete/bash_autocomplete b/Godeps/_workspace/src/github.com/codegangsta/cli/autocomplete/bash_autocomplete deleted file mode 100644 index 9b55dd9..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/autocomplete/bash_autocomplete +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/bash - -_cli_bash_autocomplete() { - local cur prev opts base - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" - opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) - COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) - return 0 - } - - complete -F _cli_bash_autocomplete $PROG \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/autocomplete/zsh_autocomplete b/Godeps/_workspace/src/github.com/codegangsta/cli/autocomplete/zsh_autocomplete deleted file mode 100644 index 5430a18..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/autocomplete/zsh_autocomplete +++ /dev/null @@ -1,5 +0,0 @@ -autoload -U compinit && compinit -autoload -U bashcompinit && bashcompinit - -script_dir=$(dirname $0) -source ${script_dir}/bash_autocomplete diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/cli.go b/Godeps/_workspace/src/github.com/codegangsta/cli/cli.go deleted file mode 100644 index b742545..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/cli.go +++ /dev/null @@ -1,19 +0,0 @@ -// Package cli provides a minimal framework for creating and organizing command line -// Go applications. cli is designed to be easy to understand and write, the most simple -// cli application can be written as follows: -// func main() { -// cli.NewApp().Run(os.Args) -// } -// -// Of course this application does not do much, so let's make this an actual application: -// func main() { -// app := cli.NewApp() -// app.Name = "greet" -// app.Usage = "say a greeting" -// app.Action = func(c *cli.Context) { -// println("Greetings") -// } -// -// app.Run(os.Args) -// } -package cli diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/cli_test.go b/Godeps/_workspace/src/github.com/codegangsta/cli/cli_test.go deleted file mode 100644 index 879a793..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/cli_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package cli_test - -import ( - "os" - - "github.com/codegangsta/cli" -) - -func Example() { - app := cli.NewApp() - app.Name = "todo" - app.Usage = "task list on the command line" - app.Commands = []cli.Command{ - { - Name: "add", - ShortName: "a", - Usage: "add a task to the list", - Action: func(c *cli.Context) { - println("added task: ", c.Args().First()) - }, - }, - { - Name: "complete", - ShortName: "c", - Usage: "complete a task on the list", - Action: func(c *cli.Context) { - println("completed task: ", c.Args().First()) - }, - }, - } - - app.Run(os.Args) -} - -func ExampleSubcommand() { - app := cli.NewApp() - app.Name = "say" - app.Commands = []cli.Command{ - { - Name: "hello", - ShortName: "hi", - Usage: "use it to see a description", - Description: "This is how we describe hello the function", - Subcommands: []cli.Command{ - { - Name: "english", - ShortName: "en", - Usage: "sends a greeting in english", - Description: "greets someone in english", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "name", - Value: "Bob", - Usage: "Name of the person to greet", - }, - }, - Action: func(c *cli.Context) { - println("Hello, ", c.String("name")) - }, - }, { - Name: "spanish", - ShortName: "sp", - Usage: "sends a greeting in spanish", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "surname", - Value: "Jones", - Usage: "Surname of the person to greet", - }, - }, - Action: func(c *cli.Context) { - println("Hola, ", c.String("surname")) - }, - }, { - Name: "french", - ShortName: "fr", - Usage: "sends a greeting in french", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "nickname", - Value: "Stevie", - Usage: "Nickname of the person to greet", - }, - }, - Action: func(c *cli.Context) { - println("Bonjour, ", c.String("nickname")) - }, - }, - }, - }, { - Name: "bye", - Usage: "says goodbye", - Action: func(c *cli.Context) { - println("bye") - }, - }, - } - - app.Run(os.Args) -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/command.go b/Godeps/_workspace/src/github.com/codegangsta/cli/command.go deleted file mode 100644 index 5622b38..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/command.go +++ /dev/null @@ -1,144 +0,0 @@ -package cli - -import ( - "fmt" - "io/ioutil" - "strings" -) - -// Command is a subcommand for a cli.App. -type Command struct { - // The name of the command - Name string - // short name of the command. Typically one character - ShortName string - // A short description of the usage of this command - Usage string - // A longer explanation of how the command works - Description string - // The function to call when checking for bash command completions - BashComplete func(context *Context) - // An action to execute before any sub-subcommands are run, but after the context is ready - // If a non-nil error is returned, no sub-subcommands are run - Before func(context *Context) error - // The function to call when this command is invoked - Action func(context *Context) - // List of child commands - Subcommands []Command - // List of flags to parse - Flags []Flag - // Treat all flags as normal arguments if true - SkipFlagParsing bool - // Boolean to hide built-in help command - HideHelp bool -} - -// Invokes the command given the context, parses ctx.Args() to generate command-specific flags -func (c Command) Run(ctx *Context) error { - - if len(c.Subcommands) > 0 || c.Before != nil { - return c.startApp(ctx) - } - - if !c.HideHelp { - // append help to flags - c.Flags = append( - c.Flags, - HelpFlag, - ) - } - - if ctx.App.EnableBashCompletion { - c.Flags = append(c.Flags, BashCompletionFlag) - } - - set := flagSet(c.Name, c.Flags) - set.SetOutput(ioutil.Discard) - - firstFlagIndex := -1 - for index, arg := range ctx.Args() { - if strings.HasPrefix(arg, "-") { - firstFlagIndex = index - break - } - } - - var err error - if firstFlagIndex > -1 && !c.SkipFlagParsing { - args := ctx.Args() - regularArgs := args[1:firstFlagIndex] - flagArgs := args[firstFlagIndex:] - err = set.Parse(append(flagArgs, regularArgs...)) - } else { - err = set.Parse(ctx.Args().Tail()) - } - - if err != nil { - fmt.Printf("Incorrect Usage.\n\n") - ShowCommandHelp(ctx, c.Name) - fmt.Println("") - return err - } - - nerr := normalizeFlags(c.Flags, set) - if nerr != nil { - fmt.Println(nerr) - fmt.Println("") - ShowCommandHelp(ctx, c.Name) - fmt.Println("") - return nerr - } - context := NewContext(ctx.App, set, ctx.globalSet) - - if checkCommandCompletions(context, c.Name) { - return nil - } - - if checkCommandHelp(context, c.Name) { - return nil - } - context.Command = c - c.Action(context) - return nil -} - -// Returns true if Command.Name or Command.ShortName matches given name -func (c Command) HasName(name string) bool { - return c.Name == name || c.ShortName == name -} - -func (c Command) startApp(ctx *Context) error { - app := NewApp() - - // set the name and usage - app.Name = fmt.Sprintf("%s %s", ctx.App.Name, c.Name) - if c.Description != "" { - app.Usage = c.Description - } else { - app.Usage = c.Usage - } - - // set CommandNotFound - app.CommandNotFound = ctx.App.CommandNotFound - - // set the flags and commands - app.Commands = c.Subcommands - app.Flags = c.Flags - app.HideHelp = c.HideHelp - - // bash completion - app.EnableBashCompletion = ctx.App.EnableBashCompletion - if c.BashComplete != nil { - app.BashComplete = c.BashComplete - } - - // set the actions - app.Before = c.Before - if c.Action != nil { - app.Action = c.Action - } else { - app.Action = helpSubcommand.Action - } - - return app.RunAsSubcommand(ctx) -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/command_test.go b/Godeps/_workspace/src/github.com/codegangsta/cli/command_test.go deleted file mode 100644 index c0f556a..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/command_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package cli_test - -import ( - "flag" - "testing" - - "github.com/codegangsta/cli" -) - -func TestCommandDoNotIgnoreFlags(t *testing.T) { - app := cli.NewApp() - set := flag.NewFlagSet("test", 0) - test := []string{"blah", "blah", "-break"} - set.Parse(test) - - c := cli.NewContext(app, set, set) - - command := cli.Command{ - Name: "test-cmd", - ShortName: "tc", - Usage: "this is for testing", - Description: "testing", - Action: func(_ *cli.Context) {}, - } - err := command.Run(c) - - expect(t, err.Error(), "flag provided but not defined: -break") -} - -func TestCommandIgnoreFlags(t *testing.T) { - app := cli.NewApp() - set := flag.NewFlagSet("test", 0) - test := []string{"blah", "blah"} - set.Parse(test) - - c := cli.NewContext(app, set, set) - - command := cli.Command{ - Name: "test-cmd", - ShortName: "tc", - Usage: "this is for testing", - Description: "testing", - Action: func(_ *cli.Context) {}, - SkipFlagParsing: true, - } - err := command.Run(c) - - expect(t, err, nil) -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/context.go b/Godeps/_workspace/src/github.com/codegangsta/cli/context.go deleted file mode 100644 index 8b44148..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/context.go +++ /dev/null @@ -1,315 +0,0 @@ -package cli - -import ( - "errors" - "flag" - "strconv" - "strings" - "time" -) - -// Context is a type that is passed through to -// each Handler action in a cli application. Context -// can be used to retrieve context-specific Args and -// parsed command-line options. -type Context struct { - App *App - Command Command - flagSet *flag.FlagSet - globalSet *flag.FlagSet - setFlags map[string]bool -} - -// Creates a new context. For use in when invoking an App or Command action. -func NewContext(app *App, set *flag.FlagSet, globalSet *flag.FlagSet) *Context { - return &Context{App: app, flagSet: set, globalSet: globalSet} -} - -// Looks up the value of a local int flag, returns 0 if no int flag exists -func (c *Context) Int(name string) int { - return lookupInt(name, c.flagSet) -} - -// Looks up the value of a local time.Duration flag, returns 0 if no time.Duration flag exists -func (c *Context) Duration(name string) time.Duration { - return lookupDuration(name, c.flagSet) -} - -// Looks up the value of a local float64 flag, returns 0 if no float64 flag exists -func (c *Context) Float64(name string) float64 { - return lookupFloat64(name, c.flagSet) -} - -// Looks up the value of a local bool flag, returns false if no bool flag exists -func (c *Context) Bool(name string) bool { - return lookupBool(name, c.flagSet) -} - -// Looks up the value of a local boolT flag, returns false if no bool flag exists -func (c *Context) BoolT(name string) bool { - return lookupBoolT(name, c.flagSet) -} - -// Looks up the value of a local string flag, returns "" if no string flag exists -func (c *Context) String(name string) string { - return lookupString(name, c.flagSet) -} - -// Looks up the value of a local string slice flag, returns nil if no string slice flag exists -func (c *Context) StringSlice(name string) []string { - return lookupStringSlice(name, c.flagSet) -} - -// Looks up the value of a local int slice flag, returns nil if no int slice flag exists -func (c *Context) IntSlice(name string) []int { - return lookupIntSlice(name, c.flagSet) -} - -// Looks up the value of a local generic flag, returns nil if no generic flag exists -func (c *Context) Generic(name string) interface{} { - return lookupGeneric(name, c.flagSet) -} - -// Looks up the value of a global int flag, returns 0 if no int flag exists -func (c *Context) GlobalInt(name string) int { - return lookupInt(name, c.globalSet) -} - -// Looks up the value of a global time.Duration flag, returns 0 if no time.Duration flag exists -func (c *Context) GlobalDuration(name string) time.Duration { - return lookupDuration(name, c.globalSet) -} - -// Looks up the value of a global bool flag, returns false if no bool flag exists -func (c *Context) GlobalBool(name string) bool { - return lookupBool(name, c.globalSet) -} - -// Looks up the value of a global string flag, returns "" if no string flag exists -func (c *Context) GlobalString(name string) string { - return lookupString(name, c.globalSet) -} - -// Looks up the value of a global string slice flag, returns nil if no string slice flag exists -func (c *Context) GlobalStringSlice(name string) []string { - return lookupStringSlice(name, c.globalSet) -} - -// Looks up the value of a global int slice flag, returns nil if no int slice flag exists -func (c *Context) GlobalIntSlice(name string) []int { - return lookupIntSlice(name, c.globalSet) -} - -// Looks up the value of a global generic flag, returns nil if no generic flag exists -func (c *Context) GlobalGeneric(name string) interface{} { - return lookupGeneric(name, c.globalSet) -} - -// Determines if the flag was actually set exists -func (c *Context) IsSet(name string) bool { - if c.setFlags == nil { - c.setFlags = make(map[string]bool) - c.flagSet.Visit(func(f *flag.Flag) { - c.setFlags[f.Name] = true - }) - } - return c.setFlags[name] == true -} - -// Returns a slice of flag names used in this context. -func (c *Context) FlagNames() (names []string) { - for _, flag := range c.Command.Flags { - name := strings.Split(flag.getName(), ",")[0] - if name == "help" { - continue - } - names = append(names, name) - } - return -} - -type Args []string - -// Returns the command line arguments associated with the context. -func (c *Context) Args() Args { - args := Args(c.flagSet.Args()) - return args -} - -// Returns the nth argument, or else a blank string -func (a Args) Get(n int) string { - if len(a) > n { - return a[n] - } - return "" -} - -// Returns the first argument, or else a blank string -func (a Args) First() string { - return a.Get(0) -} - -// Return the rest of the arguments (not the first one) -// or else an empty string slice -func (a Args) Tail() []string { - if len(a) >= 2 { - return []string(a)[1:] - } - return []string{} -} - -// Checks if there are any arguments present -func (a Args) Present() bool { - return len(a) != 0 -} - -// Swaps arguments at the given indexes -func (a Args) Swap(from, to int) error { - if from >= len(a) || to >= len(a) { - return errors.New("index out of range") - } - a[from], a[to] = a[to], a[from] - return nil -} - -func lookupInt(name string, set *flag.FlagSet) int { - f := set.Lookup(name) - if f != nil { - val, err := strconv.Atoi(f.Value.String()) - if err != nil { - return 0 - } - return val - } - - return 0 -} - -func lookupDuration(name string, set *flag.FlagSet) time.Duration { - f := set.Lookup(name) - if f != nil { - val, err := time.ParseDuration(f.Value.String()) - if err == nil { - return val - } - } - - return 0 -} - -func lookupFloat64(name string, set *flag.FlagSet) float64 { - f := set.Lookup(name) - if f != nil { - val, err := strconv.ParseFloat(f.Value.String(), 64) - if err != nil { - return 0 - } - return val - } - - return 0 -} - -func lookupString(name string, set *flag.FlagSet) string { - f := set.Lookup(name) - if f != nil { - return f.Value.String() - } - - return "" -} - -func lookupStringSlice(name string, set *flag.FlagSet) []string { - f := set.Lookup(name) - if f != nil { - return (f.Value.(*StringSlice)).Value() - - } - - return nil -} - -func lookupIntSlice(name string, set *flag.FlagSet) []int { - f := set.Lookup(name) - if f != nil { - return (f.Value.(*IntSlice)).Value() - - } - - return nil -} - -func lookupGeneric(name string, set *flag.FlagSet) interface{} { - f := set.Lookup(name) - if f != nil { - return f.Value - } - return nil -} - -func lookupBool(name string, set *flag.FlagSet) bool { - f := set.Lookup(name) - if f != nil { - val, err := strconv.ParseBool(f.Value.String()) - if err != nil { - return false - } - return val - } - - return false -} - -func lookupBoolT(name string, set *flag.FlagSet) bool { - f := set.Lookup(name) - if f != nil { - val, err := strconv.ParseBool(f.Value.String()) - if err != nil { - return true - } - return val - } - - return false -} - -func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) { - switch ff.Value.(type) { - case *StringSlice: - default: - set.Set(name, ff.Value.String()) - } -} - -func normalizeFlags(flags []Flag, set *flag.FlagSet) error { - visited := make(map[string]bool) - set.Visit(func(f *flag.Flag) { - visited[f.Name] = true - }) - for _, f := range flags { - parts := strings.Split(f.getName(), ",") - if len(parts) == 1 { - continue - } - var ff *flag.Flag - for _, name := range parts { - name = strings.Trim(name, " ") - if visited[name] { - if ff != nil { - return errors.New("Cannot use two forms of the same flag: " + name + " " + ff.Name) - } - ff = set.Lookup(name) - } - } - if ff == nil { - continue - } - for _, name := range parts { - name = strings.Trim(name, " ") - if !visited[name] { - copyFlag(name, ff, set) - } - } - } - return nil -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/context_test.go b/Godeps/_workspace/src/github.com/codegangsta/cli/context_test.go deleted file mode 100644 index b2d2412..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/context_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package cli_test - -import ( - "flag" - "testing" - "time" - - "github.com/codegangsta/cli" -) - -func TestNewContext(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Int("myflag", 12, "doc") - globalSet := flag.NewFlagSet("test", 0) - globalSet.Int("myflag", 42, "doc") - command := cli.Command{Name: "mycommand"} - c := cli.NewContext(nil, set, globalSet) - c.Command = command - expect(t, c.Int("myflag"), 12) - expect(t, c.GlobalInt("myflag"), 42) - expect(t, c.Command.Name, "mycommand") -} - -func TestContext_Int(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Int("myflag", 12, "doc") - c := cli.NewContext(nil, set, set) - expect(t, c.Int("myflag"), 12) -} - -func TestContext_Duration(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Duration("myflag", time.Duration(12*time.Second), "doc") - c := cli.NewContext(nil, set, set) - expect(t, c.Duration("myflag"), time.Duration(12*time.Second)) -} - -func TestContext_String(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.String("myflag", "hello world", "doc") - c := cli.NewContext(nil, set, set) - expect(t, c.String("myflag"), "hello world") -} - -func TestContext_Bool(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Bool("myflag", false, "doc") - c := cli.NewContext(nil, set, set) - expect(t, c.Bool("myflag"), false) -} - -func TestContext_BoolT(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Bool("myflag", true, "doc") - c := cli.NewContext(nil, set, set) - expect(t, c.BoolT("myflag"), true) -} - -func TestContext_Args(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Bool("myflag", false, "doc") - c := cli.NewContext(nil, set, set) - set.Parse([]string{"--myflag", "bat", "baz"}) - expect(t, len(c.Args()), 2) - expect(t, c.Bool("myflag"), true) -} - -func TestContext_IsSet(t *testing.T) { - set := flag.NewFlagSet("test", 0) - set.Bool("myflag", false, "doc") - set.String("otherflag", "hello world", "doc") - c := cli.NewContext(nil, set, set) - set.Parse([]string{"--myflag", "bat", "baz"}) - expect(t, c.IsSet("myflag"), true) - expect(t, c.IsSet("otherflag"), false) - expect(t, c.IsSet("bogusflag"), false) -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/flag.go b/Godeps/_workspace/src/github.com/codegangsta/cli/flag.go deleted file mode 100644 index b30bca3..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/flag.go +++ /dev/null @@ -1,410 +0,0 @@ -package cli - -import ( - "flag" - "fmt" - "os" - "strconv" - "strings" - "time" -) - -// This flag enables bash-completion for all commands and subcommands -var BashCompletionFlag = BoolFlag{ - Name: "generate-bash-completion", -} - -// This flag prints the version for the application -var VersionFlag = BoolFlag{ - Name: "version, v", - Usage: "print the version", -} - -// This flag prints the help for all commands and subcommands -var HelpFlag = BoolFlag{ - Name: "help, h", - Usage: "show help", -} - -// Flag is a common interface related to parsing flags in cli. -// For more advanced flag parsing techniques, it is recomended that -// this interface be implemented. -type Flag interface { - fmt.Stringer - // Apply Flag settings to the given flag set - Apply(*flag.FlagSet) - getName() string -} - -func flagSet(name string, flags []Flag) *flag.FlagSet { - set := flag.NewFlagSet(name, flag.ContinueOnError) - - for _, f := range flags { - f.Apply(set) - } - return set -} - -func eachName(longName string, fn func(string)) { - parts := strings.Split(longName, ",") - for _, name := range parts { - name = strings.Trim(name, " ") - fn(name) - } -} - -// Generic is a generic parseable type identified by a specific flag -type Generic interface { - Set(value string) error - String() string -} - -// GenericFlag is the flag type for types implementing Generic -type GenericFlag struct { - Name string - Value Generic - Usage string - EnvVar string -} - -func (f GenericFlag) String() string { - return withEnvHint(f.EnvVar, fmt.Sprintf("%s%s %v\t`%v` %s", prefixFor(f.Name), f.Name, f.Value, "-"+f.Name+" option -"+f.Name+" option", f.Usage)) -} - -func (f GenericFlag) Apply(set *flag.FlagSet) { - val := f.Value - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - val.Set(envVal) - } - } - - eachName(f.Name, func(name string) { - set.Var(f.Value, name, f.Usage) - }) -} - -func (f GenericFlag) getName() string { - return f.Name -} - -type StringSlice []string - -func (f *StringSlice) Set(value string) error { - *f = append(*f, value) - return nil -} - -func (f *StringSlice) String() string { - return fmt.Sprintf("%s", *f) -} - -func (f *StringSlice) Value() []string { - return *f -} - -type StringSliceFlag struct { - Name string - Value *StringSlice - Usage string - EnvVar string -} - -func (f StringSliceFlag) String() string { - firstName := strings.Trim(strings.Split(f.Name, ",")[0], " ") - pref := prefixFor(firstName) - return withEnvHint(f.EnvVar, fmt.Sprintf("%s '%v'\t%v", prefixedNames(f.Name), pref+firstName+" option "+pref+firstName+" option", f.Usage)) -} - -func (f StringSliceFlag) Apply(set *flag.FlagSet) { - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - newVal := &StringSlice{} - for _, s := range strings.Split(envVal, ",") { - newVal.Set(s) - } - f.Value = newVal - } - } - - eachName(f.Name, func(name string) { - set.Var(f.Value, name, f.Usage) - }) -} - -func (f StringSliceFlag) getName() string { - return f.Name -} - -type IntSlice []int - -func (f *IntSlice) Set(value string) error { - - tmp, err := strconv.Atoi(value) - if err != nil { - return err - } else { - *f = append(*f, tmp) - } - return nil -} - -func (f *IntSlice) String() string { - return fmt.Sprintf("%d", *f) -} - -func (f *IntSlice) Value() []int { - return *f -} - -type IntSliceFlag struct { - Name string - Value *IntSlice - Usage string - EnvVar string -} - -func (f IntSliceFlag) String() string { - firstName := strings.Trim(strings.Split(f.Name, ",")[0], " ") - pref := prefixFor(firstName) - return withEnvHint(f.EnvVar, fmt.Sprintf("%s '%v'\t%v", prefixedNames(f.Name), pref+firstName+" option "+pref+firstName+" option", f.Usage)) -} - -func (f IntSliceFlag) Apply(set *flag.FlagSet) { - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - newVal := &IntSlice{} - for _, s := range strings.Split(envVal, ",") { - err := newVal.Set(s) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - } - } - f.Value = newVal - } - } - - eachName(f.Name, func(name string) { - set.Var(f.Value, name, f.Usage) - }) -} - -func (f IntSliceFlag) getName() string { - return f.Name -} - -type BoolFlag struct { - Name string - Usage string - EnvVar string -} - -func (f BoolFlag) String() string { - return withEnvHint(f.EnvVar, fmt.Sprintf("%s\t%v", prefixedNames(f.Name), f.Usage)) -} - -func (f BoolFlag) Apply(set *flag.FlagSet) { - val := false - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - envValBool, err := strconv.ParseBool(envVal) - if err == nil { - val = envValBool - } - } - } - - eachName(f.Name, func(name string) { - set.Bool(name, val, f.Usage) - }) -} - -func (f BoolFlag) getName() string { - return f.Name -} - -type BoolTFlag struct { - Name string - Usage string - EnvVar string -} - -func (f BoolTFlag) String() string { - return withEnvHint(f.EnvVar, fmt.Sprintf("%s\t%v", prefixedNames(f.Name), f.Usage)) -} - -func (f BoolTFlag) Apply(set *flag.FlagSet) { - val := true - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - envValBool, err := strconv.ParseBool(envVal) - if err == nil { - val = envValBool - } - } - } - - eachName(f.Name, func(name string) { - set.Bool(name, val, f.Usage) - }) -} - -func (f BoolTFlag) getName() string { - return f.Name -} - -type StringFlag struct { - Name string - Value string - Usage string - EnvVar string -} - -func (f StringFlag) String() string { - var fmtString string - fmtString = "%s %v\t%v" - - if len(f.Value) > 0 { - fmtString = "%s '%v'\t%v" - } else { - fmtString = "%s %v\t%v" - } - - return withEnvHint(f.EnvVar, fmt.Sprintf(fmtString, prefixedNames(f.Name), f.Value, f.Usage)) -} - -func (f StringFlag) Apply(set *flag.FlagSet) { - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - f.Value = envVal - } - } - - eachName(f.Name, func(name string) { - set.String(name, f.Value, f.Usage) - }) -} - -func (f StringFlag) getName() string { - return f.Name -} - -type IntFlag struct { - Name string - Value int - Usage string - EnvVar string -} - -func (f IntFlag) String() string { - return withEnvHint(f.EnvVar, fmt.Sprintf("%s '%v'\t%v", prefixedNames(f.Name), f.Value, f.Usage)) -} - -func (f IntFlag) Apply(set *flag.FlagSet) { - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - envValInt, err := strconv.ParseUint(envVal, 10, 64) - if err == nil { - f.Value = int(envValInt) - } - } - } - - eachName(f.Name, func(name string) { - set.Int(name, f.Value, f.Usage) - }) -} - -func (f IntFlag) getName() string { - return f.Name -} - -type DurationFlag struct { - Name string - Value time.Duration - Usage string - EnvVar string -} - -func (f DurationFlag) String() string { - return withEnvHint(f.EnvVar, fmt.Sprintf("%s '%v'\t%v", prefixedNames(f.Name), f.Value, f.Usage)) -} - -func (f DurationFlag) Apply(set *flag.FlagSet) { - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - envValDuration, err := time.ParseDuration(envVal) - if err == nil { - f.Value = envValDuration - } - } - } - - eachName(f.Name, func(name string) { - set.Duration(name, f.Value, f.Usage) - }) -} - -func (f DurationFlag) getName() string { - return f.Name -} - -type Float64Flag struct { - Name string - Value float64 - Usage string - EnvVar string -} - -func (f Float64Flag) String() string { - return withEnvHint(f.EnvVar, fmt.Sprintf("%s '%v'\t%v", prefixedNames(f.Name), f.Value, f.Usage)) -} - -func (f Float64Flag) Apply(set *flag.FlagSet) { - if f.EnvVar != "" { - if envVal := os.Getenv(f.EnvVar); envVal != "" { - envValFloat, err := strconv.ParseFloat(envVal, 10) - if err == nil { - f.Value = float64(envValFloat) - } - } - } - - eachName(f.Name, func(name string) { - set.Float64(name, f.Value, f.Usage) - }) -} - -func (f Float64Flag) getName() string { - return f.Name -} - -func prefixFor(name string) (prefix string) { - if len(name) == 1 { - prefix = "-" - } else { - prefix = "--" - } - - return -} - -func prefixedNames(fullName string) (prefixed string) { - parts := strings.Split(fullName, ",") - for i, name := range parts { - name = strings.Trim(name, " ") - prefixed += prefixFor(name) + name - if i < len(parts)-1 { - prefixed += ", " - } - } - return -} - -func withEnvHint(envVar, str string) string { - envText := "" - if envVar != "" { - envText = fmt.Sprintf(" [$%s]", envVar) - } - return str + envText -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/flag_test.go b/Godeps/_workspace/src/github.com/codegangsta/cli/flag_test.go deleted file mode 100644 index bc5059c..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/flag_test.go +++ /dev/null @@ -1,587 +0,0 @@ -package cli_test - -import ( - "fmt" - "os" - "reflect" - "strings" - "testing" - - "github.com/codegangsta/cli" -) - -var boolFlagTests = []struct { - name string - expected string -}{ - {"help", "--help\t"}, - {"h", "-h\t"}, -} - -func TestBoolFlagHelpOutput(t *testing.T) { - - for _, test := range boolFlagTests { - flag := cli.BoolFlag{Name: test.name} - output := flag.String() - - if output != test.expected { - t.Errorf("%s does not match %s", output, test.expected) - } - } -} - -var stringFlagTests = []struct { - name string - value string - expected string -}{ - {"help", "", "--help \t"}, - {"h", "", "-h \t"}, - {"h", "", "-h \t"}, - {"test", "Something", "--test 'Something'\t"}, -} - -func TestStringFlagHelpOutput(t *testing.T) { - - for _, test := range stringFlagTests { - flag := cli.StringFlag{Name: test.name, Value: test.value} - output := flag.String() - - if output != test.expected { - t.Errorf("%s does not match %s", output, test.expected) - } - } -} - -func TestStringFlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_FOO", "derp") - for _, test := range stringFlagTests { - flag := cli.StringFlag{Name: test.name, Value: test.value, EnvVar: "APP_FOO"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_FOO]") { - t.Errorf("%s does not end with [$APP_FOO]", output) - } - } -} - -var stringSliceFlagTests = []struct { - name string - value *cli.StringSlice - expected string -}{ - {"help", func() *cli.StringSlice { - s := &cli.StringSlice{} - s.Set("") - return s - }(), "--help '--help option --help option'\t"}, - {"h", func() *cli.StringSlice { - s := &cli.StringSlice{} - s.Set("") - return s - }(), "-h '-h option -h option'\t"}, - {"h", func() *cli.StringSlice { - s := &cli.StringSlice{} - s.Set("") - return s - }(), "-h '-h option -h option'\t"}, - {"test", func() *cli.StringSlice { - s := &cli.StringSlice{} - s.Set("Something") - return s - }(), "--test '--test option --test option'\t"}, -} - -func TestStringSliceFlagHelpOutput(t *testing.T) { - - for _, test := range stringSliceFlagTests { - flag := cli.StringSliceFlag{Name: test.name, Value: test.value} - output := flag.String() - - if output != test.expected { - t.Errorf("%q does not match %q", output, test.expected) - } - } -} - -func TestStringSliceFlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_QWWX", "11,4") - for _, test := range stringSliceFlagTests { - flag := cli.StringSliceFlag{Name: test.name, Value: test.value, EnvVar: "APP_QWWX"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_QWWX]") { - t.Errorf("%q does not end with [$APP_QWWX]", output) - } - } -} - -var intFlagTests = []struct { - name string - expected string -}{ - {"help", "--help '0'\t"}, - {"h", "-h '0'\t"}, -} - -func TestIntFlagHelpOutput(t *testing.T) { - - for _, test := range intFlagTests { - flag := cli.IntFlag{Name: test.name} - output := flag.String() - - if output != test.expected { - t.Errorf("%s does not match %s", output, test.expected) - } - } -} - -func TestIntFlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_BAR", "2") - for _, test := range intFlagTests { - flag := cli.IntFlag{Name: test.name, EnvVar: "APP_BAR"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_BAR]") { - t.Errorf("%s does not end with [$APP_BAR]", output) - } - } -} - -var durationFlagTests = []struct { - name string - expected string -}{ - {"help", "--help '0'\t"}, - {"h", "-h '0'\t"}, -} - -func TestDurationFlagHelpOutput(t *testing.T) { - - for _, test := range durationFlagTests { - flag := cli.DurationFlag{Name: test.name} - output := flag.String() - - if output != test.expected { - t.Errorf("%s does not match %s", output, test.expected) - } - } -} - -func TestDurationFlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_BAR", "2h3m6s") - for _, test := range durationFlagTests { - flag := cli.DurationFlag{Name: test.name, EnvVar: "APP_BAR"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_BAR]") { - t.Errorf("%s does not end with [$APP_BAR]", output) - } - } -} - -var intSliceFlagTests = []struct { - name string - value *cli.IntSlice - expected string -}{ - {"help", &cli.IntSlice{}, "--help '--help option --help option'\t"}, - {"h", &cli.IntSlice{}, "-h '-h option -h option'\t"}, - {"h", &cli.IntSlice{}, "-h '-h option -h option'\t"}, - {"test", func() *cli.IntSlice { - i := &cli.IntSlice{} - i.Set("9") - return i - }(), "--test '--test option --test option'\t"}, -} - -func TestIntSliceFlagHelpOutput(t *testing.T) { - - for _, test := range intSliceFlagTests { - flag := cli.IntSliceFlag{Name: test.name, Value: test.value} - output := flag.String() - - if output != test.expected { - t.Errorf("%q does not match %q", output, test.expected) - } - } -} - -func TestIntSliceFlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_SMURF", "42,3") - for _, test := range intSliceFlagTests { - flag := cli.IntSliceFlag{Name: test.name, Value: test.value, EnvVar: "APP_SMURF"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_SMURF]") { - t.Errorf("%q does not end with [$APP_SMURF]", output) - } - } -} - -var float64FlagTests = []struct { - name string - expected string -}{ - {"help", "--help '0'\t"}, - {"h", "-h '0'\t"}, -} - -func TestFloat64FlagHelpOutput(t *testing.T) { - - for _, test := range float64FlagTests { - flag := cli.Float64Flag{Name: test.name} - output := flag.String() - - if output != test.expected { - t.Errorf("%s does not match %s", output, test.expected) - } - } -} - -func TestFloat64FlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_BAZ", "99.4") - for _, test := range float64FlagTests { - flag := cli.Float64Flag{Name: test.name, EnvVar: "APP_BAZ"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_BAZ]") { - t.Errorf("%s does not end with [$APP_BAZ]", output) - } - } -} - -var genericFlagTests = []struct { - name string - value cli.Generic - expected string -}{ - {"help", &Parser{}, "--help \t`-help option -help option` "}, - {"h", &Parser{}, "-h \t`-h option -h option` "}, - {"test", &Parser{}, "--test \t`-test option -test option` "}, -} - -func TestGenericFlagHelpOutput(t *testing.T) { - - for _, test := range genericFlagTests { - flag := cli.GenericFlag{Name: test.name} - output := flag.String() - - if output != test.expected { - t.Errorf("%q does not match %q", output, test.expected) - } - } -} - -func TestGenericFlagWithEnvVarHelpOutput(t *testing.T) { - - os.Setenv("APP_ZAP", "3") - for _, test := range genericFlagTests { - flag := cli.GenericFlag{Name: test.name, EnvVar: "APP_ZAP"} - output := flag.String() - - if !strings.HasSuffix(output, " [$APP_ZAP]") { - t.Errorf("%s does not end with [$APP_ZAP]", output) - } - } -} - -func TestParseMultiString(t *testing.T) { - (&cli.App{ - Flags: []cli.Flag{ - cli.StringFlag{Name: "serve, s"}, - }, - Action: func(ctx *cli.Context) { - if ctx.String("serve") != "10" { - t.Errorf("main name not set") - } - if ctx.String("s") != "10" { - t.Errorf("short name not set") - } - }, - }).Run([]string{"run", "-s", "10"}) -} - -func TestParseMultiStringFromEnv(t *testing.T) { - os.Setenv("APP_COUNT", "20") - (&cli.App{ - Flags: []cli.Flag{ - cli.StringFlag{Name: "count, c", EnvVar: "APP_COUNT"}, - }, - Action: func(ctx *cli.Context) { - if ctx.String("count") != "20" { - t.Errorf("main name not set") - } - if ctx.String("c") != "20" { - t.Errorf("short name not set") - } - }, - }).Run([]string{"run"}) -} - -func TestParseMultiStringSlice(t *testing.T) { - (&cli.App{ - Flags: []cli.Flag{ - cli.StringSliceFlag{Name: "serve, s", Value: &cli.StringSlice{}}, - }, - Action: func(ctx *cli.Context) { - if !reflect.DeepEqual(ctx.StringSlice("serve"), []string{"10", "20"}) { - t.Errorf("main name not set") - } - if !reflect.DeepEqual(ctx.StringSlice("s"), []string{"10", "20"}) { - t.Errorf("short name not set") - } - }, - }).Run([]string{"run", "-s", "10", "-s", "20"}) -} - -func TestParseMultiStringSliceFromEnv(t *testing.T) { - os.Setenv("APP_INTERVALS", "20,30,40") - - (&cli.App{ - Flags: []cli.Flag{ - cli.StringSliceFlag{Name: "intervals, i", Value: &cli.StringSlice{}, EnvVar: "APP_INTERVALS"}, - }, - Action: func(ctx *cli.Context) { - if !reflect.DeepEqual(ctx.StringSlice("intervals"), []string{"20", "30", "40"}) { - t.Errorf("main name not set from env") - } - if !reflect.DeepEqual(ctx.StringSlice("i"), []string{"20", "30", "40"}) { - t.Errorf("short name not set from env") - } - }, - }).Run([]string{"run"}) -} - -func TestParseMultiInt(t *testing.T) { - a := cli.App{ - Flags: []cli.Flag{ - cli.IntFlag{Name: "serve, s"}, - }, - Action: func(ctx *cli.Context) { - if ctx.Int("serve") != 10 { - t.Errorf("main name not set") - } - if ctx.Int("s") != 10 { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run", "-s", "10"}) -} - -func TestParseMultiIntFromEnv(t *testing.T) { - os.Setenv("APP_TIMEOUT_SECONDS", "10") - a := cli.App{ - Flags: []cli.Flag{ - cli.IntFlag{Name: "timeout, t", EnvVar: "APP_TIMEOUT_SECONDS"}, - }, - Action: func(ctx *cli.Context) { - if ctx.Int("timeout") != 10 { - t.Errorf("main name not set") - } - if ctx.Int("t") != 10 { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run"}) -} - -func TestParseMultiIntSlice(t *testing.T) { - (&cli.App{ - Flags: []cli.Flag{ - cli.IntSliceFlag{Name: "serve, s", Value: &cli.IntSlice{}}, - }, - Action: func(ctx *cli.Context) { - if !reflect.DeepEqual(ctx.IntSlice("serve"), []int{10, 20}) { - t.Errorf("main name not set") - } - if !reflect.DeepEqual(ctx.IntSlice("s"), []int{10, 20}) { - t.Errorf("short name not set") - } - }, - }).Run([]string{"run", "-s", "10", "-s", "20"}) -} - -func TestParseMultiIntSliceFromEnv(t *testing.T) { - os.Setenv("APP_INTERVALS", "20,30,40") - - (&cli.App{ - Flags: []cli.Flag{ - cli.IntSliceFlag{Name: "intervals, i", Value: &cli.IntSlice{}, EnvVar: "APP_INTERVALS"}, - }, - Action: func(ctx *cli.Context) { - if !reflect.DeepEqual(ctx.IntSlice("intervals"), []int{20, 30, 40}) { - t.Errorf("main name not set from env") - } - if !reflect.DeepEqual(ctx.IntSlice("i"), []int{20, 30, 40}) { - t.Errorf("short name not set from env") - } - }, - }).Run([]string{"run"}) -} - -func TestParseMultiFloat64(t *testing.T) { - a := cli.App{ - Flags: []cli.Flag{ - cli.Float64Flag{Name: "serve, s"}, - }, - Action: func(ctx *cli.Context) { - if ctx.Float64("serve") != 10.2 { - t.Errorf("main name not set") - } - if ctx.Float64("s") != 10.2 { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run", "-s", "10.2"}) -} - -func TestParseMultiFloat64FromEnv(t *testing.T) { - os.Setenv("APP_TIMEOUT_SECONDS", "15.5") - a := cli.App{ - Flags: []cli.Flag{ - cli.Float64Flag{Name: "timeout, t", EnvVar: "APP_TIMEOUT_SECONDS"}, - }, - Action: func(ctx *cli.Context) { - if ctx.Float64("timeout") != 15.5 { - t.Errorf("main name not set") - } - if ctx.Float64("t") != 15.5 { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run"}) -} - -func TestParseMultiBool(t *testing.T) { - a := cli.App{ - Flags: []cli.Flag{ - cli.BoolFlag{Name: "serve, s"}, - }, - Action: func(ctx *cli.Context) { - if ctx.Bool("serve") != true { - t.Errorf("main name not set") - } - if ctx.Bool("s") != true { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run", "--serve"}) -} - -func TestParseMultiBoolFromEnv(t *testing.T) { - os.Setenv("APP_DEBUG", "1") - a := cli.App{ - Flags: []cli.Flag{ - cli.BoolFlag{Name: "debug, d", EnvVar: "APP_DEBUG"}, - }, - Action: func(ctx *cli.Context) { - if ctx.Bool("debug") != true { - t.Errorf("main name not set from env") - } - if ctx.Bool("d") != true { - t.Errorf("short name not set from env") - } - }, - } - a.Run([]string{"run"}) -} - -func TestParseMultiBoolT(t *testing.T) { - a := cli.App{ - Flags: []cli.Flag{ - cli.BoolTFlag{Name: "serve, s"}, - }, - Action: func(ctx *cli.Context) { - if ctx.BoolT("serve") != true { - t.Errorf("main name not set") - } - if ctx.BoolT("s") != true { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run", "--serve"}) -} - -func TestParseMultiBoolTFromEnv(t *testing.T) { - os.Setenv("APP_DEBUG", "0") - a := cli.App{ - Flags: []cli.Flag{ - cli.BoolTFlag{Name: "debug, d", EnvVar: "APP_DEBUG"}, - }, - Action: func(ctx *cli.Context) { - if ctx.BoolT("debug") != false { - t.Errorf("main name not set from env") - } - if ctx.BoolT("d") != false { - t.Errorf("short name not set from env") - } - }, - } - a.Run([]string{"run"}) -} - -type Parser [2]string - -func (p *Parser) Set(value string) error { - parts := strings.Split(value, ",") - if len(parts) != 2 { - return fmt.Errorf("invalid format") - } - - (*p)[0] = parts[0] - (*p)[1] = parts[1] - - return nil -} - -func (p *Parser) String() string { - return fmt.Sprintf("%s,%s", p[0], p[1]) -} - -func TestParseGeneric(t *testing.T) { - a := cli.App{ - Flags: []cli.Flag{ - cli.GenericFlag{Name: "serve, s", Value: &Parser{}}, - }, - Action: func(ctx *cli.Context) { - if !reflect.DeepEqual(ctx.Generic("serve"), &Parser{"10", "20"}) { - t.Errorf("main name not set") - } - if !reflect.DeepEqual(ctx.Generic("s"), &Parser{"10", "20"}) { - t.Errorf("short name not set") - } - }, - } - a.Run([]string{"run", "-s", "10,20"}) -} - -func TestParseGenericFromEnv(t *testing.T) { - os.Setenv("APP_SERVE", "20,30") - a := cli.App{ - Flags: []cli.Flag{ - cli.GenericFlag{Name: "serve, s", Value: &Parser{}, EnvVar: "APP_SERVE"}, - }, - Action: func(ctx *cli.Context) { - if !reflect.DeepEqual(ctx.Generic("serve"), &Parser{"20", "30"}) { - t.Errorf("main name not set from env") - } - if !reflect.DeepEqual(ctx.Generic("s"), &Parser{"20", "30"}) { - t.Errorf("short name not set from env") - } - }, - } - a.Run([]string{"run"}) -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/help.go b/Godeps/_workspace/src/github.com/codegangsta/cli/help.go deleted file mode 100644 index 5020cb6..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/help.go +++ /dev/null @@ -1,224 +0,0 @@ -package cli - -import ( - "fmt" - "os" - "text/tabwriter" - "text/template" -) - -// The text template for the Default help topic. -// cli.go uses text/template to render templates. You can -// render custom help text by setting this variable. -var AppHelpTemplate = `NAME: - {{.Name}} - {{.Usage}} - -USAGE: - {{.Name}} {{if .Flags}}[global options] {{end}}command{{if .Flags}} [command options]{{end}} [arguments...] - -VERSION: - {{.Version}}{{if or .Author .Email}} - -AUTHOR:{{if .Author}} - {{.Author}}{{if .Email}} - <{{.Email}}>{{end}}{{else}} - {{.Email}}{{end}}{{end}} - -COMMANDS: - {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} - {{end}}{{if .Flags}} -GLOBAL OPTIONS: - {{range .Flags}}{{.}} - {{end}}{{end}} -` - -// The text template for the command help topic. -// cli.go uses text/template to render templates. You can -// render custom help text by setting this variable. -var CommandHelpTemplate = `NAME: - {{.Name}} - {{.Usage}} - -USAGE: - command {{.Name}}{{if .Flags}} [command options]{{end}} [arguments...]{{if .Description}} - -DESCRIPTION: - {{.Description}}{{end}}{{if .Flags}} - -OPTIONS: - {{range .Flags}}{{.}} - {{end}}{{ end }} -` - -// The text template for the subcommand help topic. -// cli.go uses text/template to render templates. You can -// render custom help text by setting this variable. -var SubcommandHelpTemplate = `NAME: - {{.Name}} - {{.Usage}} - -USAGE: - {{.Name}} command{{if .Flags}} [command options]{{end}} [arguments...] - -COMMANDS: - {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} - {{end}}{{if .Flags}} -OPTIONS: - {{range .Flags}}{{.}} - {{end}}{{end}} -` - -var helpCommand = Command{ - Name: "help", - ShortName: "h", - Usage: "Shows a list of commands or help for one command", - Action: func(c *Context) { - args := c.Args() - if args.Present() { - ShowCommandHelp(c, args.First()) - } else { - ShowAppHelp(c) - } - }, -} - -var helpSubcommand = Command{ - Name: "help", - ShortName: "h", - Usage: "Shows a list of commands or help for one command", - Action: func(c *Context) { - args := c.Args() - if args.Present() { - ShowCommandHelp(c, args.First()) - } else { - ShowSubcommandHelp(c) - } - }, -} - -// Prints help for the App -var HelpPrinter = printHelp - -// Prints version for the App -var VersionPrinter = printVersion - -func ShowAppHelp(c *Context) { - HelpPrinter(AppHelpTemplate, c.App) -} - -// Prints the list of subcommands as the default app completion method -func DefaultAppComplete(c *Context) { - for _, command := range c.App.Commands { - fmt.Println(command.Name) - if command.ShortName != "" { - fmt.Println(command.ShortName) - } - } -} - -// Prints help for the given command -func ShowCommandHelp(c *Context, command string) { - for _, c := range c.App.Commands { - if c.HasName(command) { - HelpPrinter(CommandHelpTemplate, c) - return - } - } - - if c.App.CommandNotFound != nil { - c.App.CommandNotFound(c, command) - } else { - fmt.Printf("No help topic for '%v'\n", command) - } -} - -// Prints help for the given subcommand -func ShowSubcommandHelp(c *Context) { - HelpPrinter(SubcommandHelpTemplate, c.App) -} - -// Prints the version number of the App -func ShowVersion(c *Context) { - VersionPrinter(c) -} - -func printVersion(c *Context) { - fmt.Printf("%v version %v\n", c.App.Name, c.App.Version) -} - -// Prints the lists of commands within a given context -func ShowCompletions(c *Context) { - a := c.App - if a != nil && a.BashComplete != nil { - a.BashComplete(c) - } -} - -// Prints the custom completions for a given command -func ShowCommandCompletions(ctx *Context, command string) { - c := ctx.App.Command(command) - if c != nil && c.BashComplete != nil { - c.BashComplete(ctx) - } -} - -func printHelp(templ string, data interface{}) { - w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) - t := template.Must(template.New("help").Parse(templ)) - err := t.Execute(w, data) - if err != nil { - panic(err) - } - w.Flush() -} - -func checkVersion(c *Context) bool { - if c.GlobalBool("version") { - ShowVersion(c) - return true - } - - return false -} - -func checkHelp(c *Context) bool { - if c.GlobalBool("h") || c.GlobalBool("help") { - ShowAppHelp(c) - return true - } - - return false -} - -func checkCommandHelp(c *Context, name string) bool { - if c.Bool("h") || c.Bool("help") { - ShowCommandHelp(c, name) - return true - } - - return false -} - -func checkSubcommandHelp(c *Context) bool { - if c.GlobalBool("h") || c.GlobalBool("help") { - ShowSubcommandHelp(c) - return true - } - - return false -} - -func checkCompletions(c *Context) bool { - if c.GlobalBool(BashCompletionFlag.Name) && c.App.EnableBashCompletion { - ShowCompletions(c) - return true - } - - return false -} - -func checkCommandCompletions(c *Context, name string) bool { - if c.Bool(BashCompletionFlag.Name) && c.App.EnableBashCompletion { - ShowCommandCompletions(c, name) - return true - } - - return false -} diff --git a/Godeps/_workspace/src/github.com/codegangsta/cli/helpers_test.go b/Godeps/_workspace/src/github.com/codegangsta/cli/helpers_test.go deleted file mode 100644 index cdc4feb..0000000 --- a/Godeps/_workspace/src/github.com/codegangsta/cli/helpers_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package cli_test - -import ( - "reflect" - "testing" -) - -/* Test Helpers */ -func expect(t *testing.T, a interface{}, b interface{}) { - if a != b { - t.Errorf("Expected %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a)) - } -} - -func refute(t *testing.T, a interface{}, b interface{}) { - if a == b { - t.Errorf("Did not expect %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a)) - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/Makefile b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/Makefile deleted file mode 100644 index ba28d87..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# Go support for Protocol Buffers - Google's data interchange format -# -# Copyright 2010 The Go Authors. All rights reserved. -# https://github.com/golang/protobuf -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -install: - go install - -test: install generate-test-pbs - go test - - -generate-test-pbs: - make install - make -C testdata - protoc-min-version --version="3.0.0" --proto_path=.:../../../../ proto3_proto/proto3.proto - make diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/all_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/all_test.go deleted file mode 100644 index 0445886..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/all_test.go +++ /dev/null @@ -1,2071 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "math" - "math/rand" - "reflect" - "runtime/debug" - "strings" - "testing" - "time" - - . "github.com/gogo/protobuf/proto" - . "github.com/gogo/protobuf/proto/testdata" -) - -var globalO *Buffer - -func old() *Buffer { - if globalO == nil { - globalO = NewBuffer(nil) - } - globalO.Reset() - return globalO -} - -func equalbytes(b1, b2 []byte, t *testing.T) { - if len(b1) != len(b2) { - t.Errorf("wrong lengths: 2*%d != %d", len(b1), len(b2)) - return - } - for i := 0; i < len(b1); i++ { - if b1[i] != b2[i] { - t.Errorf("bad byte[%d]:%x %x: %s %s", i, b1[i], b2[i], b1, b2) - } - } -} - -func initGoTestField() *GoTestField { - f := new(GoTestField) - f.Label = String("label") - f.Type = String("type") - return f -} - -// These are all structurally equivalent but the tag numbers differ. -// (It's remarkable that required, optional, and repeated all have -// 8 letters.) -func initGoTest_RequiredGroup() *GoTest_RequiredGroup { - return &GoTest_RequiredGroup{ - RequiredField: String("required"), - } -} - -func initGoTest_OptionalGroup() *GoTest_OptionalGroup { - return &GoTest_OptionalGroup{ - RequiredField: String("optional"), - } -} - -func initGoTest_RepeatedGroup() *GoTest_RepeatedGroup { - return &GoTest_RepeatedGroup{ - RequiredField: String("repeated"), - } -} - -func initGoTest(setdefaults bool) *GoTest { - pb := new(GoTest) - if setdefaults { - pb.F_BoolDefaulted = Bool(Default_GoTest_F_BoolDefaulted) - pb.F_Int32Defaulted = Int32(Default_GoTest_F_Int32Defaulted) - pb.F_Int64Defaulted = Int64(Default_GoTest_F_Int64Defaulted) - pb.F_Fixed32Defaulted = Uint32(Default_GoTest_F_Fixed32Defaulted) - pb.F_Fixed64Defaulted = Uint64(Default_GoTest_F_Fixed64Defaulted) - pb.F_Uint32Defaulted = Uint32(Default_GoTest_F_Uint32Defaulted) - pb.F_Uint64Defaulted = Uint64(Default_GoTest_F_Uint64Defaulted) - pb.F_FloatDefaulted = Float32(Default_GoTest_F_FloatDefaulted) - pb.F_DoubleDefaulted = Float64(Default_GoTest_F_DoubleDefaulted) - pb.F_StringDefaulted = String(Default_GoTest_F_StringDefaulted) - pb.F_BytesDefaulted = Default_GoTest_F_BytesDefaulted - pb.F_Sint32Defaulted = Int32(Default_GoTest_F_Sint32Defaulted) - pb.F_Sint64Defaulted = Int64(Default_GoTest_F_Sint64Defaulted) - } - - pb.Kind = GoTest_TIME.Enum() - pb.RequiredField = initGoTestField() - pb.F_BoolRequired = Bool(true) - pb.F_Int32Required = Int32(3) - pb.F_Int64Required = Int64(6) - pb.F_Fixed32Required = Uint32(32) - pb.F_Fixed64Required = Uint64(64) - pb.F_Uint32Required = Uint32(3232) - pb.F_Uint64Required = Uint64(6464) - pb.F_FloatRequired = Float32(3232) - pb.F_DoubleRequired = Float64(6464) - pb.F_StringRequired = String("string") - pb.F_BytesRequired = []byte("bytes") - pb.F_Sint32Required = Int32(-32) - pb.F_Sint64Required = Int64(-64) - pb.Requiredgroup = initGoTest_RequiredGroup() - - return pb -} - -func fail(msg string, b *bytes.Buffer, s string, t *testing.T) { - data := b.Bytes() - ld := len(data) - ls := len(s) / 2 - - fmt.Printf("fail %s ld=%d ls=%d\n", msg, ld, ls) - - // find the interesting spot - n - n := ls - if ld < ls { - n = ld - } - j := 0 - for i := 0; i < n; i++ { - bs := hex(s[j])*16 + hex(s[j+1]) - j += 2 - if data[i] == bs { - continue - } - n = i - break - } - l := n - 10 - if l < 0 { - l = 0 - } - h := n + 10 - - // find the interesting spot - n - fmt.Printf("is[%d]:", l) - for i := l; i < h; i++ { - if i >= ld { - fmt.Printf(" --") - continue - } - fmt.Printf(" %.2x", data[i]) - } - fmt.Printf("\n") - - fmt.Printf("sb[%d]:", l) - for i := l; i < h; i++ { - if i >= ls { - fmt.Printf(" --") - continue - } - bs := hex(s[j])*16 + hex(s[j+1]) - j += 2 - fmt.Printf(" %.2x", bs) - } - fmt.Printf("\n") - - t.Fail() - - // t.Errorf("%s: \ngood: %s\nbad: %x", msg, s, b.Bytes()) - // Print the output in a partially-decoded format; can - // be helpful when updating the test. It produces the output - // that is pasted, with minor edits, into the argument to verify(). - // data := b.Bytes() - // nesting := 0 - // for b.Len() > 0 { - // start := len(data) - b.Len() - // var u uint64 - // u, err := DecodeVarint(b) - // if err != nil { - // fmt.Printf("decode error on varint:", err) - // return - // } - // wire := u & 0x7 - // tag := u >> 3 - // switch wire { - // case WireVarint: - // v, err := DecodeVarint(b) - // if err != nil { - // fmt.Printf("decode error on varint:", err) - // return - // } - // fmt.Printf("\t\t\"%x\" // field %d, encoding %d, value %d\n", - // data[start:len(data)-b.Len()], tag, wire, v) - // case WireFixed32: - // v, err := DecodeFixed32(b) - // if err != nil { - // fmt.Printf("decode error on fixed32:", err) - // return - // } - // fmt.Printf("\t\t\"%x\" // field %d, encoding %d, value %d\n", - // data[start:len(data)-b.Len()], tag, wire, v) - // case WireFixed64: - // v, err := DecodeFixed64(b) - // if err != nil { - // fmt.Printf("decode error on fixed64:", err) - // return - // } - // fmt.Printf("\t\t\"%x\" // field %d, encoding %d, value %d\n", - // data[start:len(data)-b.Len()], tag, wire, v) - // case WireBytes: - // nb, err := DecodeVarint(b) - // if err != nil { - // fmt.Printf("decode error on bytes:", err) - // return - // } - // after_tag := len(data) - b.Len() - // str := make([]byte, nb) - // _, err = b.Read(str) - // if err != nil { - // fmt.Printf("decode error on bytes:", err) - // return - // } - // fmt.Printf("\t\t\"%x\" \"%x\" // field %d, encoding %d (FIELD)\n", - // data[start:after_tag], str, tag, wire) - // case WireStartGroup: - // nesting++ - // fmt.Printf("\t\t\"%x\"\t\t// start group field %d level %d\n", - // data[start:len(data)-b.Len()], tag, nesting) - // case WireEndGroup: - // fmt.Printf("\t\t\"%x\"\t\t// end group field %d level %d\n", - // data[start:len(data)-b.Len()], tag, nesting) - // nesting-- - // default: - // fmt.Printf("unrecognized wire type %d\n", wire) - // return - // } - // } -} - -func hex(c uint8) uint8 { - if '0' <= c && c <= '9' { - return c - '0' - } - if 'a' <= c && c <= 'f' { - return 10 + c - 'a' - } - if 'A' <= c && c <= 'F' { - return 10 + c - 'A' - } - return 0 -} - -func equal(b []byte, s string, t *testing.T) bool { - if 2*len(b) != len(s) { - // fail(fmt.Sprintf("wrong lengths: 2*%d != %d", len(b), len(s)), b, s, t) - fmt.Printf("wrong lengths: 2*%d != %d\n", len(b), len(s)) - return false - } - for i, j := 0, 0; i < len(b); i, j = i+1, j+2 { - x := hex(s[j])*16 + hex(s[j+1]) - if b[i] != x { - // fail(fmt.Sprintf("bad byte[%d]:%x %x", i, b[i], x), b, s, t) - fmt.Printf("bad byte[%d]:%x %x", i, b[i], x) - return false - } - } - return true -} - -func overify(t *testing.T, pb *GoTest, expected string) { - o := old() - err := o.Marshal(pb) - if err != nil { - fmt.Printf("overify marshal-1 err = %v", err) - o.DebugPrint("", o.Bytes()) - t.Fatalf("expected = %s", expected) - } - if !equal(o.Bytes(), expected, t) { - o.DebugPrint("overify neq 1", o.Bytes()) - t.Fatalf("expected = %s", expected) - } - - // Now test Unmarshal by recreating the original buffer. - pbd := new(GoTest) - err = o.Unmarshal(pbd) - if err != nil { - t.Fatalf("overify unmarshal err = %v", err) - o.DebugPrint("", o.Bytes()) - t.Fatalf("string = %s", expected) - } - o.Reset() - err = o.Marshal(pbd) - if err != nil { - t.Errorf("overify marshal-2 err = %v", err) - o.DebugPrint("", o.Bytes()) - t.Fatalf("string = %s", expected) - } - if !equal(o.Bytes(), expected, t) { - o.DebugPrint("overify neq 2", o.Bytes()) - t.Fatalf("string = %s", expected) - } -} - -// Simple tests for numeric encode/decode primitives (varint, etc.) -func TestNumericPrimitives(t *testing.T) { - for i := uint64(0); i < 1e6; i += 111 { - o := old() - if o.EncodeVarint(i) != nil { - t.Error("EncodeVarint") - break - } - x, e := o.DecodeVarint() - if e != nil { - t.Fatal("DecodeVarint") - } - if x != i { - t.Fatal("varint decode fail:", i, x) - } - - o = old() - if o.EncodeFixed32(i) != nil { - t.Fatal("encFixed32") - } - x, e = o.DecodeFixed32() - if e != nil { - t.Fatal("decFixed32") - } - if x != i { - t.Fatal("fixed32 decode fail:", i, x) - } - - o = old() - if o.EncodeFixed64(i*1234567) != nil { - t.Error("encFixed64") - break - } - x, e = o.DecodeFixed64() - if e != nil { - t.Error("decFixed64") - break - } - if x != i*1234567 { - t.Error("fixed64 decode fail:", i*1234567, x) - break - } - - o = old() - i32 := int32(i - 12345) - if o.EncodeZigzag32(uint64(i32)) != nil { - t.Fatal("EncodeZigzag32") - } - x, e = o.DecodeZigzag32() - if e != nil { - t.Fatal("DecodeZigzag32") - } - if x != uint64(uint32(i32)) { - t.Fatal("zigzag32 decode fail:", i32, x) - } - - o = old() - i64 := int64(i - 12345) - if o.EncodeZigzag64(uint64(i64)) != nil { - t.Fatal("EncodeZigzag64") - } - x, e = o.DecodeZigzag64() - if e != nil { - t.Fatal("DecodeZigzag64") - } - if x != uint64(i64) { - t.Fatal("zigzag64 decode fail:", i64, x) - } - } -} - -// fakeMarshaler is a simple struct implementing Marshaler and Message interfaces. -type fakeMarshaler struct { - b []byte - err error -} - -func (f fakeMarshaler) Marshal() ([]byte, error) { - return f.b, f.err -} - -func (f fakeMarshaler) String() string { - return fmt.Sprintf("Bytes: %v Error: %v", f.b, f.err) -} - -func (f fakeMarshaler) ProtoMessage() {} - -func (f fakeMarshaler) Reset() {} - -// Simple tests for proto messages that implement the Marshaler interface. -func TestMarshalerEncoding(t *testing.T) { - tests := []struct { - name string - m Message - want []byte - wantErr error - }{ - { - name: "Marshaler that fails", - m: fakeMarshaler{ - err: errors.New("some marshal err"), - b: []byte{5, 6, 7}, - }, - // Since there's an error, nothing should be written to buffer. - want: nil, - wantErr: errors.New("some marshal err"), - }, - { - name: "Marshaler that succeeds", - m: fakeMarshaler{ - b: []byte{0, 1, 2, 3, 4, 127, 255}, - }, - want: []byte{0, 1, 2, 3, 4, 127, 255}, - wantErr: nil, - }, - } - for _, test := range tests { - b := NewBuffer(nil) - err := b.Marshal(test.m) - if !reflect.DeepEqual(test.wantErr, err) { - t.Errorf("%s: got err %v wanted %v", test.name, err, test.wantErr) - } - if !reflect.DeepEqual(test.want, b.Bytes()) { - t.Errorf("%s: got bytes %v wanted %v", test.name, b.Bytes(), test.want) - } - } -} - -// Simple tests for bytes -func TestBytesPrimitives(t *testing.T) { - o := old() - bytes := []byte{'n', 'o', 'w', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ', 't', 'i', 'm', 'e'} - if o.EncodeRawBytes(bytes) != nil { - t.Error("EncodeRawBytes") - } - decb, e := o.DecodeRawBytes(false) - if e != nil { - t.Error("DecodeRawBytes") - } - equalbytes(bytes, decb, t) -} - -// Simple tests for strings -func TestStringPrimitives(t *testing.T) { - o := old() - s := "now is the time" - if o.EncodeStringBytes(s) != nil { - t.Error("enc_string") - } - decs, e := o.DecodeStringBytes() - if e != nil { - t.Error("dec_string") - } - if s != decs { - t.Error("string encode/decode fail:", s, decs) - } -} - -// Do we catch the "required bit not set" case? -func TestRequiredBit(t *testing.T) { - o := old() - pb := new(GoTest) - err := o.Marshal(pb) - if err == nil { - t.Error("did not catch missing required fields") - } else if strings.Index(err.Error(), "Kind") < 0 { - t.Error("wrong error type:", err) - } -} - -// Check that all fields are nil. -// Clearly silly, and a residue from a more interesting test with an earlier, -// different initialization property, but it once caught a compiler bug so -// it lives. -func checkInitialized(pb *GoTest, t *testing.T) { - if pb.F_BoolDefaulted != nil { - t.Error("New or Reset did not set boolean:", *pb.F_BoolDefaulted) - } - if pb.F_Int32Defaulted != nil { - t.Error("New or Reset did not set int32:", *pb.F_Int32Defaulted) - } - if pb.F_Int64Defaulted != nil { - t.Error("New or Reset did not set int64:", *pb.F_Int64Defaulted) - } - if pb.F_Fixed32Defaulted != nil { - t.Error("New or Reset did not set fixed32:", *pb.F_Fixed32Defaulted) - } - if pb.F_Fixed64Defaulted != nil { - t.Error("New or Reset did not set fixed64:", *pb.F_Fixed64Defaulted) - } - if pb.F_Uint32Defaulted != nil { - t.Error("New or Reset did not set uint32:", *pb.F_Uint32Defaulted) - } - if pb.F_Uint64Defaulted != nil { - t.Error("New or Reset did not set uint64:", *pb.F_Uint64Defaulted) - } - if pb.F_FloatDefaulted != nil { - t.Error("New or Reset did not set float:", *pb.F_FloatDefaulted) - } - if pb.F_DoubleDefaulted != nil { - t.Error("New or Reset did not set double:", *pb.F_DoubleDefaulted) - } - if pb.F_StringDefaulted != nil { - t.Error("New or Reset did not set string:", *pb.F_StringDefaulted) - } - if pb.F_BytesDefaulted != nil { - t.Error("New or Reset did not set bytes:", string(pb.F_BytesDefaulted)) - } - if pb.F_Sint32Defaulted != nil { - t.Error("New or Reset did not set int32:", *pb.F_Sint32Defaulted) - } - if pb.F_Sint64Defaulted != nil { - t.Error("New or Reset did not set int64:", *pb.F_Sint64Defaulted) - } -} - -// Does Reset() reset? -func TestReset(t *testing.T) { - pb := initGoTest(true) - // muck with some values - pb.F_BoolDefaulted = Bool(false) - pb.F_Int32Defaulted = Int32(237) - pb.F_Int64Defaulted = Int64(12346) - pb.F_Fixed32Defaulted = Uint32(32000) - pb.F_Fixed64Defaulted = Uint64(666) - pb.F_Uint32Defaulted = Uint32(323232) - pb.F_Uint64Defaulted = nil - pb.F_FloatDefaulted = nil - pb.F_DoubleDefaulted = Float64(0) - pb.F_StringDefaulted = String("gotcha") - pb.F_BytesDefaulted = []byte("asdfasdf") - pb.F_Sint32Defaulted = Int32(123) - pb.F_Sint64Defaulted = Int64(789) - pb.Reset() - checkInitialized(pb, t) -} - -// All required fields set, no defaults provided. -func TestEncodeDecode1(t *testing.T) { - pb := initGoTest(false) - overify(t, pb, - "0807"+ // field 1, encoding 0, value 7 - "220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField) - "5001"+ // field 10, encoding 0, value 1 - "5803"+ // field 11, encoding 0, value 3 - "6006"+ // field 12, encoding 0, value 6 - "6d20000000"+ // field 13, encoding 5, value 0x20 - "714000000000000000"+ // field 14, encoding 1, value 0x40 - "78a019"+ // field 15, encoding 0, value 0xca0 = 3232 - "8001c032"+ // field 16, encoding 0, value 0x1940 = 6464 - "8d0100004a45"+ // field 17, encoding 5, value 3232.0 - "9101000000000040b940"+ // field 18, encoding 1, value 6464.0 - "9a0106"+"737472696e67"+ // field 19, encoding 2, string "string" - "b304"+ // field 70, encoding 3, start group - "ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required" - "b404"+ // field 70, encoding 4, end group - "aa0605"+"6279746573"+ // field 101, encoding 2, string "bytes" - "b0063f"+ // field 102, encoding 0, 0x3f zigzag32 - "b8067f") // field 103, encoding 0, 0x7f zigzag64 -} - -// All required fields set, defaults provided. -func TestEncodeDecode2(t *testing.T) { - pb := initGoTest(true) - overify(t, pb, - "0807"+ // field 1, encoding 0, value 7 - "220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField) - "5001"+ // field 10, encoding 0, value 1 - "5803"+ // field 11, encoding 0, value 3 - "6006"+ // field 12, encoding 0, value 6 - "6d20000000"+ // field 13, encoding 5, value 32 - "714000000000000000"+ // field 14, encoding 1, value 64 - "78a019"+ // field 15, encoding 0, value 3232 - "8001c032"+ // field 16, encoding 0, value 6464 - "8d0100004a45"+ // field 17, encoding 5, value 3232.0 - "9101000000000040b940"+ // field 18, encoding 1, value 6464.0 - "9a0106"+"737472696e67"+ // field 19, encoding 2 string "string" - "c00201"+ // field 40, encoding 0, value 1 - "c80220"+ // field 41, encoding 0, value 32 - "d00240"+ // field 42, encoding 0, value 64 - "dd0240010000"+ // field 43, encoding 5, value 320 - "e1028002000000000000"+ // field 44, encoding 1, value 640 - "e8028019"+ // field 45, encoding 0, value 3200 - "f0028032"+ // field 46, encoding 0, value 6400 - "fd02e0659948"+ // field 47, encoding 5, value 314159.0 - "81030000000050971041"+ // field 48, encoding 1, value 271828.0 - "8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n" - "b304"+ // start group field 70 level 1 - "ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required" - "b404"+ // end group field 70 level 1 - "aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes" - "b0063f"+ // field 102, encoding 0, 0x3f zigzag32 - "b8067f"+ // field 103, encoding 0, 0x7f zigzag64 - "8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose" - "90193f"+ // field 402, encoding 0, value 63 - "98197f") // field 403, encoding 0, value 127 - -} - -// All default fields set to their default value by hand -func TestEncodeDecode3(t *testing.T) { - pb := initGoTest(false) - pb.F_BoolDefaulted = Bool(true) - pb.F_Int32Defaulted = Int32(32) - pb.F_Int64Defaulted = Int64(64) - pb.F_Fixed32Defaulted = Uint32(320) - pb.F_Fixed64Defaulted = Uint64(640) - pb.F_Uint32Defaulted = Uint32(3200) - pb.F_Uint64Defaulted = Uint64(6400) - pb.F_FloatDefaulted = Float32(314159) - pb.F_DoubleDefaulted = Float64(271828) - pb.F_StringDefaulted = String("hello, \"world!\"\n") - pb.F_BytesDefaulted = []byte("Bignose") - pb.F_Sint32Defaulted = Int32(-32) - pb.F_Sint64Defaulted = Int64(-64) - - overify(t, pb, - "0807"+ // field 1, encoding 0, value 7 - "220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField) - "5001"+ // field 10, encoding 0, value 1 - "5803"+ // field 11, encoding 0, value 3 - "6006"+ // field 12, encoding 0, value 6 - "6d20000000"+ // field 13, encoding 5, value 32 - "714000000000000000"+ // field 14, encoding 1, value 64 - "78a019"+ // field 15, encoding 0, value 3232 - "8001c032"+ // field 16, encoding 0, value 6464 - "8d0100004a45"+ // field 17, encoding 5, value 3232.0 - "9101000000000040b940"+ // field 18, encoding 1, value 6464.0 - "9a0106"+"737472696e67"+ // field 19, encoding 2 string "string" - "c00201"+ // field 40, encoding 0, value 1 - "c80220"+ // field 41, encoding 0, value 32 - "d00240"+ // field 42, encoding 0, value 64 - "dd0240010000"+ // field 43, encoding 5, value 320 - "e1028002000000000000"+ // field 44, encoding 1, value 640 - "e8028019"+ // field 45, encoding 0, value 3200 - "f0028032"+ // field 46, encoding 0, value 6400 - "fd02e0659948"+ // field 47, encoding 5, value 314159.0 - "81030000000050971041"+ // field 48, encoding 1, value 271828.0 - "8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n" - "b304"+ // start group field 70 level 1 - "ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required" - "b404"+ // end group field 70 level 1 - "aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes" - "b0063f"+ // field 102, encoding 0, 0x3f zigzag32 - "b8067f"+ // field 103, encoding 0, 0x7f zigzag64 - "8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose" - "90193f"+ // field 402, encoding 0, value 63 - "98197f") // field 403, encoding 0, value 127 - -} - -// All required fields set, defaults provided, all non-defaulted optional fields have values. -func TestEncodeDecode4(t *testing.T) { - pb := initGoTest(true) - pb.Table = String("hello") - pb.Param = Int32(7) - pb.OptionalField = initGoTestField() - pb.F_BoolOptional = Bool(true) - pb.F_Int32Optional = Int32(32) - pb.F_Int64Optional = Int64(64) - pb.F_Fixed32Optional = Uint32(3232) - pb.F_Fixed64Optional = Uint64(6464) - pb.F_Uint32Optional = Uint32(323232) - pb.F_Uint64Optional = Uint64(646464) - pb.F_FloatOptional = Float32(32.) - pb.F_DoubleOptional = Float64(64.) - pb.F_StringOptional = String("hello") - pb.F_BytesOptional = []byte("Bignose") - pb.F_Sint32Optional = Int32(-32) - pb.F_Sint64Optional = Int64(-64) - pb.Optionalgroup = initGoTest_OptionalGroup() - - overify(t, pb, - "0807"+ // field 1, encoding 0, value 7 - "1205"+"68656c6c6f"+ // field 2, encoding 2, string "hello" - "1807"+ // field 3, encoding 0, value 7 - "220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField) - "320d"+"0a056c6162656c120474797065"+ // field 6, encoding 2 (GoTestField) - "5001"+ // field 10, encoding 0, value 1 - "5803"+ // field 11, encoding 0, value 3 - "6006"+ // field 12, encoding 0, value 6 - "6d20000000"+ // field 13, encoding 5, value 32 - "714000000000000000"+ // field 14, encoding 1, value 64 - "78a019"+ // field 15, encoding 0, value 3232 - "8001c032"+ // field 16, encoding 0, value 6464 - "8d0100004a45"+ // field 17, encoding 5, value 3232.0 - "9101000000000040b940"+ // field 18, encoding 1, value 6464.0 - "9a0106"+"737472696e67"+ // field 19, encoding 2 string "string" - "f00101"+ // field 30, encoding 0, value 1 - "f80120"+ // field 31, encoding 0, value 32 - "800240"+ // field 32, encoding 0, value 64 - "8d02a00c0000"+ // field 33, encoding 5, value 3232 - "91024019000000000000"+ // field 34, encoding 1, value 6464 - "9802a0dd13"+ // field 35, encoding 0, value 323232 - "a002c0ba27"+ // field 36, encoding 0, value 646464 - "ad0200000042"+ // field 37, encoding 5, value 32.0 - "b1020000000000005040"+ // field 38, encoding 1, value 64.0 - "ba0205"+"68656c6c6f"+ // field 39, encoding 2, string "hello" - "c00201"+ // field 40, encoding 0, value 1 - "c80220"+ // field 41, encoding 0, value 32 - "d00240"+ // field 42, encoding 0, value 64 - "dd0240010000"+ // field 43, encoding 5, value 320 - "e1028002000000000000"+ // field 44, encoding 1, value 640 - "e8028019"+ // field 45, encoding 0, value 3200 - "f0028032"+ // field 46, encoding 0, value 6400 - "fd02e0659948"+ // field 47, encoding 5, value 314159.0 - "81030000000050971041"+ // field 48, encoding 1, value 271828.0 - "8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n" - "b304"+ // start group field 70 level 1 - "ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required" - "b404"+ // end group field 70 level 1 - "d305"+ // start group field 90 level 1 - "da0508"+"6f7074696f6e616c"+ // field 91, encoding 2, string "optional" - "d405"+ // end group field 90 level 1 - "aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes" - "b0063f"+ // field 102, encoding 0, 0x3f zigzag32 - "b8067f"+ // field 103, encoding 0, 0x7f zigzag64 - "ea1207"+"4269676e6f7365"+ // field 301, encoding 2, string "Bignose" - "f0123f"+ // field 302, encoding 0, value 63 - "f8127f"+ // field 303, encoding 0, value 127 - "8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose" - "90193f"+ // field 402, encoding 0, value 63 - "98197f") // field 403, encoding 0, value 127 - -} - -// All required fields set, defaults provided, all repeated fields given two values. -func TestEncodeDecode5(t *testing.T) { - pb := initGoTest(true) - pb.RepeatedField = []*GoTestField{initGoTestField(), initGoTestField()} - pb.F_BoolRepeated = []bool{false, true} - pb.F_Int32Repeated = []int32{32, 33} - pb.F_Int64Repeated = []int64{64, 65} - pb.F_Fixed32Repeated = []uint32{3232, 3333} - pb.F_Fixed64Repeated = []uint64{6464, 6565} - pb.F_Uint32Repeated = []uint32{323232, 333333} - pb.F_Uint64Repeated = []uint64{646464, 656565} - pb.F_FloatRepeated = []float32{32., 33.} - pb.F_DoubleRepeated = []float64{64., 65.} - pb.F_StringRepeated = []string{"hello", "sailor"} - pb.F_BytesRepeated = [][]byte{[]byte("big"), []byte("nose")} - pb.F_Sint32Repeated = []int32{32, -32} - pb.F_Sint64Repeated = []int64{64, -64} - pb.Repeatedgroup = []*GoTest_RepeatedGroup{initGoTest_RepeatedGroup(), initGoTest_RepeatedGroup()} - - overify(t, pb, - "0807"+ // field 1, encoding 0, value 7 - "220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField) - "2a0d"+"0a056c6162656c120474797065"+ // field 5, encoding 2 (GoTestField) - "2a0d"+"0a056c6162656c120474797065"+ // field 5, encoding 2 (GoTestField) - "5001"+ // field 10, encoding 0, value 1 - "5803"+ // field 11, encoding 0, value 3 - "6006"+ // field 12, encoding 0, value 6 - "6d20000000"+ // field 13, encoding 5, value 32 - "714000000000000000"+ // field 14, encoding 1, value 64 - "78a019"+ // field 15, encoding 0, value 3232 - "8001c032"+ // field 16, encoding 0, value 6464 - "8d0100004a45"+ // field 17, encoding 5, value 3232.0 - "9101000000000040b940"+ // field 18, encoding 1, value 6464.0 - "9a0106"+"737472696e67"+ // field 19, encoding 2 string "string" - "a00100"+ // field 20, encoding 0, value 0 - "a00101"+ // field 20, encoding 0, value 1 - "a80120"+ // field 21, encoding 0, value 32 - "a80121"+ // field 21, encoding 0, value 33 - "b00140"+ // field 22, encoding 0, value 64 - "b00141"+ // field 22, encoding 0, value 65 - "bd01a00c0000"+ // field 23, encoding 5, value 3232 - "bd01050d0000"+ // field 23, encoding 5, value 3333 - "c1014019000000000000"+ // field 24, encoding 1, value 6464 - "c101a519000000000000"+ // field 24, encoding 1, value 6565 - "c801a0dd13"+ // field 25, encoding 0, value 323232 - "c80195ac14"+ // field 25, encoding 0, value 333333 - "d001c0ba27"+ // field 26, encoding 0, value 646464 - "d001b58928"+ // field 26, encoding 0, value 656565 - "dd0100000042"+ // field 27, encoding 5, value 32.0 - "dd0100000442"+ // field 27, encoding 5, value 33.0 - "e1010000000000005040"+ // field 28, encoding 1, value 64.0 - "e1010000000000405040"+ // field 28, encoding 1, value 65.0 - "ea0105"+"68656c6c6f"+ // field 29, encoding 2, string "hello" - "ea0106"+"7361696c6f72"+ // field 29, encoding 2, string "sailor" - "c00201"+ // field 40, encoding 0, value 1 - "c80220"+ // field 41, encoding 0, value 32 - "d00240"+ // field 42, encoding 0, value 64 - "dd0240010000"+ // field 43, encoding 5, value 320 - "e1028002000000000000"+ // field 44, encoding 1, value 640 - "e8028019"+ // field 45, encoding 0, value 3200 - "f0028032"+ // field 46, encoding 0, value 6400 - "fd02e0659948"+ // field 47, encoding 5, value 314159.0 - "81030000000050971041"+ // field 48, encoding 1, value 271828.0 - "8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n" - "b304"+ // start group field 70 level 1 - "ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required" - "b404"+ // end group field 70 level 1 - "8305"+ // start group field 80 level 1 - "8a0508"+"7265706561746564"+ // field 81, encoding 2, string "repeated" - "8405"+ // end group field 80 level 1 - "8305"+ // start group field 80 level 1 - "8a0508"+"7265706561746564"+ // field 81, encoding 2, string "repeated" - "8405"+ // end group field 80 level 1 - "aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes" - "b0063f"+ // field 102, encoding 0, 0x3f zigzag32 - "b8067f"+ // field 103, encoding 0, 0x7f zigzag64 - "ca0c03"+"626967"+ // field 201, encoding 2, string "big" - "ca0c04"+"6e6f7365"+ // field 201, encoding 2, string "nose" - "d00c40"+ // field 202, encoding 0, value 32 - "d00c3f"+ // field 202, encoding 0, value -32 - "d80c8001"+ // field 203, encoding 0, value 64 - "d80c7f"+ // field 203, encoding 0, value -64 - "8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose" - "90193f"+ // field 402, encoding 0, value 63 - "98197f") // field 403, encoding 0, value 127 - -} - -// All required fields set, all packed repeated fields given two values. -func TestEncodeDecode6(t *testing.T) { - pb := initGoTest(false) - pb.F_BoolRepeatedPacked = []bool{false, true} - pb.F_Int32RepeatedPacked = []int32{32, 33} - pb.F_Int64RepeatedPacked = []int64{64, 65} - pb.F_Fixed32RepeatedPacked = []uint32{3232, 3333} - pb.F_Fixed64RepeatedPacked = []uint64{6464, 6565} - pb.F_Uint32RepeatedPacked = []uint32{323232, 333333} - pb.F_Uint64RepeatedPacked = []uint64{646464, 656565} - pb.F_FloatRepeatedPacked = []float32{32., 33.} - pb.F_DoubleRepeatedPacked = []float64{64., 65.} - pb.F_Sint32RepeatedPacked = []int32{32, -32} - pb.F_Sint64RepeatedPacked = []int64{64, -64} - - overify(t, pb, - "0807"+ // field 1, encoding 0, value 7 - "220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField) - "5001"+ // field 10, encoding 0, value 1 - "5803"+ // field 11, encoding 0, value 3 - "6006"+ // field 12, encoding 0, value 6 - "6d20000000"+ // field 13, encoding 5, value 32 - "714000000000000000"+ // field 14, encoding 1, value 64 - "78a019"+ // field 15, encoding 0, value 3232 - "8001c032"+ // field 16, encoding 0, value 6464 - "8d0100004a45"+ // field 17, encoding 5, value 3232.0 - "9101000000000040b940"+ // field 18, encoding 1, value 6464.0 - "9a0106"+"737472696e67"+ // field 19, encoding 2 string "string" - "9203020001"+ // field 50, encoding 2, 2 bytes, value 0, value 1 - "9a03022021"+ // field 51, encoding 2, 2 bytes, value 32, value 33 - "a203024041"+ // field 52, encoding 2, 2 bytes, value 64, value 65 - "aa0308"+ // field 53, encoding 2, 8 bytes - "a00c0000050d0000"+ // value 3232, value 3333 - "b20310"+ // field 54, encoding 2, 16 bytes - "4019000000000000a519000000000000"+ // value 6464, value 6565 - "ba0306"+ // field 55, encoding 2, 6 bytes - "a0dd1395ac14"+ // value 323232, value 333333 - "c20306"+ // field 56, encoding 2, 6 bytes - "c0ba27b58928"+ // value 646464, value 656565 - "ca0308"+ // field 57, encoding 2, 8 bytes - "0000004200000442"+ // value 32.0, value 33.0 - "d20310"+ // field 58, encoding 2, 16 bytes - "00000000000050400000000000405040"+ // value 64.0, value 65.0 - "b304"+ // start group field 70 level 1 - "ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required" - "b404"+ // end group field 70 level 1 - "aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes" - "b0063f"+ // field 102, encoding 0, 0x3f zigzag32 - "b8067f"+ // field 103, encoding 0, 0x7f zigzag64 - "b21f02"+ // field 502, encoding 2, 2 bytes - "403f"+ // value 32, value -32 - "ba1f03"+ // field 503, encoding 2, 3 bytes - "80017f") // value 64, value -64 -} - -// Test that we can encode empty bytes fields. -func TestEncodeDecodeBytes1(t *testing.T) { - pb := initGoTest(false) - - // Create our bytes - pb.F_BytesRequired = []byte{} - pb.F_BytesRepeated = [][]byte{{}} - pb.F_BytesOptional = []byte{} - - d, err := Marshal(pb) - if err != nil { - t.Error(err) - } - - pbd := new(GoTest) - if err := Unmarshal(d, pbd); err != nil { - t.Error(err) - } - - if pbd.F_BytesRequired == nil || len(pbd.F_BytesRequired) != 0 { - t.Error("required empty bytes field is incorrect") - } - if pbd.F_BytesRepeated == nil || len(pbd.F_BytesRepeated) == 1 && pbd.F_BytesRepeated[0] == nil { - t.Error("repeated empty bytes field is incorrect") - } - if pbd.F_BytesOptional == nil || len(pbd.F_BytesOptional) != 0 { - t.Error("optional empty bytes field is incorrect") - } -} - -// Test that we encode nil-valued fields of a repeated bytes field correctly. -// Since entries in a repeated field cannot be nil, nil must mean empty value. -func TestEncodeDecodeBytes2(t *testing.T) { - pb := initGoTest(false) - - // Create our bytes - pb.F_BytesRepeated = [][]byte{nil} - - d, err := Marshal(pb) - if err != nil { - t.Error(err) - } - - pbd := new(GoTest) - if err := Unmarshal(d, pbd); err != nil { - t.Error(err) - } - - if len(pbd.F_BytesRepeated) != 1 || pbd.F_BytesRepeated[0] == nil { - t.Error("Unexpected value for repeated bytes field") - } -} - -// All required fields set, defaults provided, all repeated fields given two values. -func TestSkippingUnrecognizedFields(t *testing.T) { - o := old() - pb := initGoTestField() - - // Marshal it normally. - o.Marshal(pb) - - // Now new a GoSkipTest record. - skip := &GoSkipTest{ - SkipInt32: Int32(32), - SkipFixed32: Uint32(3232), - SkipFixed64: Uint64(6464), - SkipString: String("skipper"), - Skipgroup: &GoSkipTest_SkipGroup{ - GroupInt32: Int32(75), - GroupString: String("wxyz"), - }, - } - - // Marshal it into same buffer. - o.Marshal(skip) - - pbd := new(GoTestField) - o.Unmarshal(pbd) - - // The __unrecognized field should be a marshaling of GoSkipTest - skipd := new(GoSkipTest) - - o.SetBuf(pbd.XXX_unrecognized) - o.Unmarshal(skipd) - - if *skipd.SkipInt32 != *skip.SkipInt32 { - t.Error("skip int32", skipd.SkipInt32) - } - if *skipd.SkipFixed32 != *skip.SkipFixed32 { - t.Error("skip fixed32", skipd.SkipFixed32) - } - if *skipd.SkipFixed64 != *skip.SkipFixed64 { - t.Error("skip fixed64", skipd.SkipFixed64) - } - if *skipd.SkipString != *skip.SkipString { - t.Error("skip string", *skipd.SkipString) - } - if *skipd.Skipgroup.GroupInt32 != *skip.Skipgroup.GroupInt32 { - t.Error("skip group int32", skipd.Skipgroup.GroupInt32) - } - if *skipd.Skipgroup.GroupString != *skip.Skipgroup.GroupString { - t.Error("skip group string", *skipd.Skipgroup.GroupString) - } -} - -// Check that unrecognized fields of a submessage are preserved. -func TestSubmessageUnrecognizedFields(t *testing.T) { - nm := &NewMessage{ - Nested: &NewMessage_Nested{ - Name: String("Nigel"), - FoodGroup: String("carbs"), - }, - } - b, err := Marshal(nm) - if err != nil { - t.Fatalf("Marshal of NewMessage: %v", err) - } - - // Unmarshal into an OldMessage. - om := new(OldMessage) - if err := Unmarshal(b, om); err != nil { - t.Fatalf("Unmarshal to OldMessage: %v", err) - } - exp := &OldMessage{ - Nested: &OldMessage_Nested{ - Name: String("Nigel"), - // normal protocol buffer users should not do this - XXX_unrecognized: []byte("\x12\x05carbs"), - }, - } - if !Equal(om, exp) { - t.Errorf("om = %v, want %v", om, exp) - } - - // Clone the OldMessage. - om = Clone(om).(*OldMessage) - if !Equal(om, exp) { - t.Errorf("Clone(om) = %v, want %v", om, exp) - } - - // Marshal the OldMessage, then unmarshal it into an empty NewMessage. - if b, err = Marshal(om); err != nil { - t.Fatalf("Marshal of OldMessage: %v", err) - } - t.Logf("Marshal(%v) -> %q", om, b) - nm2 := new(NewMessage) - if err := Unmarshal(b, nm2); err != nil { - t.Fatalf("Unmarshal to NewMessage: %v", err) - } - if !Equal(nm, nm2) { - t.Errorf("NewMessage round-trip: %v => %v", nm, nm2) - } -} - -// Check that an int32 field can be upgraded to an int64 field. -func TestNegativeInt32(t *testing.T) { - om := &OldMessage{ - Num: Int32(-1), - } - b, err := Marshal(om) - if err != nil { - t.Fatalf("Marshal of OldMessage: %v", err) - } - - // Check the size. It should be 11 bytes; - // 1 for the field/wire type, and 10 for the negative number. - if len(b) != 11 { - t.Errorf("%v marshaled as %q, wanted 11 bytes", om, b) - } - - // Unmarshal into a NewMessage. - nm := new(NewMessage) - if err := Unmarshal(b, nm); err != nil { - t.Fatalf("Unmarshal to NewMessage: %v", err) - } - want := &NewMessage{ - Num: Int64(-1), - } - if !Equal(nm, want) { - t.Errorf("nm = %v, want %v", nm, want) - } -} - -// Check that we can grow an array (repeated field) to have many elements. -// This test doesn't depend only on our encoding; for variety, it makes sure -// we create, encode, and decode the correct contents explicitly. It's therefore -// a bit messier. -// This test also uses (and hence tests) the Marshal/Unmarshal functions -// instead of the methods. -func TestBigRepeated(t *testing.T) { - pb := initGoTest(true) - - // Create the arrays - const N = 50 // Internally the library starts much smaller. - pb.Repeatedgroup = make([]*GoTest_RepeatedGroup, N) - pb.F_Sint64Repeated = make([]int64, N) - pb.F_Sint32Repeated = make([]int32, N) - pb.F_BytesRepeated = make([][]byte, N) - pb.F_StringRepeated = make([]string, N) - pb.F_DoubleRepeated = make([]float64, N) - pb.F_FloatRepeated = make([]float32, N) - pb.F_Uint64Repeated = make([]uint64, N) - pb.F_Uint32Repeated = make([]uint32, N) - pb.F_Fixed64Repeated = make([]uint64, N) - pb.F_Fixed32Repeated = make([]uint32, N) - pb.F_Int64Repeated = make([]int64, N) - pb.F_Int32Repeated = make([]int32, N) - pb.F_BoolRepeated = make([]bool, N) - pb.RepeatedField = make([]*GoTestField, N) - - // Fill in the arrays with checkable values. - igtf := initGoTestField() - igtrg := initGoTest_RepeatedGroup() - for i := 0; i < N; i++ { - pb.Repeatedgroup[i] = igtrg - pb.F_Sint64Repeated[i] = int64(i) - pb.F_Sint32Repeated[i] = int32(i) - s := fmt.Sprint(i) - pb.F_BytesRepeated[i] = []byte(s) - pb.F_StringRepeated[i] = s - pb.F_DoubleRepeated[i] = float64(i) - pb.F_FloatRepeated[i] = float32(i) - pb.F_Uint64Repeated[i] = uint64(i) - pb.F_Uint32Repeated[i] = uint32(i) - pb.F_Fixed64Repeated[i] = uint64(i) - pb.F_Fixed32Repeated[i] = uint32(i) - pb.F_Int64Repeated[i] = int64(i) - pb.F_Int32Repeated[i] = int32(i) - pb.F_BoolRepeated[i] = i%2 == 0 - pb.RepeatedField[i] = igtf - } - - // Marshal. - buf, _ := Marshal(pb) - - // Now test Unmarshal by recreating the original buffer. - pbd := new(GoTest) - Unmarshal(buf, pbd) - - // Check the checkable values - for i := uint64(0); i < N; i++ { - if pbd.Repeatedgroup[i] == nil { // TODO: more checking? - t.Error("pbd.Repeatedgroup bad") - } - var x uint64 - x = uint64(pbd.F_Sint64Repeated[i]) - if x != i { - t.Error("pbd.F_Sint64Repeated bad", x, i) - } - x = uint64(pbd.F_Sint32Repeated[i]) - if x != i { - t.Error("pbd.F_Sint32Repeated bad", x, i) - } - s := fmt.Sprint(i) - equalbytes(pbd.F_BytesRepeated[i], []byte(s), t) - if pbd.F_StringRepeated[i] != s { - t.Error("pbd.F_Sint32Repeated bad", pbd.F_StringRepeated[i], i) - } - x = uint64(pbd.F_DoubleRepeated[i]) - if x != i { - t.Error("pbd.F_DoubleRepeated bad", x, i) - } - x = uint64(pbd.F_FloatRepeated[i]) - if x != i { - t.Error("pbd.F_FloatRepeated bad", x, i) - } - x = pbd.F_Uint64Repeated[i] - if x != i { - t.Error("pbd.F_Uint64Repeated bad", x, i) - } - x = uint64(pbd.F_Uint32Repeated[i]) - if x != i { - t.Error("pbd.F_Uint32Repeated bad", x, i) - } - x = pbd.F_Fixed64Repeated[i] - if x != i { - t.Error("pbd.F_Fixed64Repeated bad", x, i) - } - x = uint64(pbd.F_Fixed32Repeated[i]) - if x != i { - t.Error("pbd.F_Fixed32Repeated bad", x, i) - } - x = uint64(pbd.F_Int64Repeated[i]) - if x != i { - t.Error("pbd.F_Int64Repeated bad", x, i) - } - x = uint64(pbd.F_Int32Repeated[i]) - if x != i { - t.Error("pbd.F_Int32Repeated bad", x, i) - } - if pbd.F_BoolRepeated[i] != (i%2 == 0) { - t.Error("pbd.F_BoolRepeated bad", x, i) - } - if pbd.RepeatedField[i] == nil { // TODO: more checking? - t.Error("pbd.RepeatedField bad") - } - } -} - -// Verify we give a useful message when decoding to the wrong structure type. -func TestTypeMismatch(t *testing.T) { - pb1 := initGoTest(true) - - // Marshal - o := old() - o.Marshal(pb1) - - // Now Unmarshal it to the wrong type. - pb2 := initGoTestField() - err := o.Unmarshal(pb2) - if err == nil { - t.Error("expected error, got no error") - } else if !strings.Contains(err.Error(), "bad wiretype") { - t.Error("expected bad wiretype error, got", err) - } -} - -func encodeDecode(t *testing.T, in, out Message, msg string) { - buf, err := Marshal(in) - if err != nil { - t.Fatalf("failed marshaling %v: %v", msg, err) - } - if err := Unmarshal(buf, out); err != nil { - t.Fatalf("failed unmarshaling %v: %v", msg, err) - } -} - -func TestPackedNonPackedDecoderSwitching(t *testing.T) { - np, p := new(NonPackedTest), new(PackedTest) - - // non-packed -> packed - np.A = []int32{0, 1, 1, 2, 3, 5} - encodeDecode(t, np, p, "non-packed -> packed") - if !reflect.DeepEqual(np.A, p.B) { - t.Errorf("failed non-packed -> packed; np.A=%+v, p.B=%+v", np.A, p.B) - } - - // packed -> non-packed - np.Reset() - p.B = []int32{3, 1, 4, 1, 5, 9} - encodeDecode(t, p, np, "packed -> non-packed") - if !reflect.DeepEqual(p.B, np.A) { - t.Errorf("failed packed -> non-packed; p.B=%+v, np.A=%+v", p.B, np.A) - } -} - -func TestProto1RepeatedGroup(t *testing.T) { - pb := &MessageList{ - Message: []*MessageList_Message{ - { - Name: String("blah"), - Count: Int32(7), - }, - // NOTE: pb.Message[1] is a nil - nil, - }, - } - - o := old() - err := o.Marshal(pb) - if err == nil || !strings.Contains(err.Error(), "repeated field Message has nil") { - t.Fatalf("unexpected or no error when marshaling: %v", err) - } -} - -// Test that enums work. Checks for a bug introduced by making enums -// named types instead of int32: newInt32FromUint64 would crash with -// a type mismatch in reflect.PointTo. -func TestEnum(t *testing.T) { - pb := new(GoEnum) - pb.Foo = FOO_FOO1.Enum() - o := old() - if err := o.Marshal(pb); err != nil { - t.Fatal("error encoding enum:", err) - } - pb1 := new(GoEnum) - if err := o.Unmarshal(pb1); err != nil { - t.Fatal("error decoding enum:", err) - } - if *pb1.Foo != FOO_FOO1 { - t.Error("expected 7 but got ", *pb1.Foo) - } -} - -// Enum types have String methods. Check that enum fields can be printed. -// We don't care what the value actually is, just as long as it doesn't crash. -func TestPrintingNilEnumFields(t *testing.T) { - pb := new(GoEnum) - fmt.Sprintf("%+v", pb) -} - -// Verify that absent required fields cause Marshal/Unmarshal to return errors. -func TestRequiredFieldEnforcement(t *testing.T) { - pb := new(GoTestField) - _, err := Marshal(pb) - if err == nil { - t.Error("marshal: expected error, got nil") - } else if strings.Index(err.Error(), "Label") < 0 { - t.Errorf("marshal: bad error type: %v", err) - } - - // A slightly sneaky, yet valid, proto. It encodes the same required field twice, - // so simply counting the required fields is insufficient. - // field 1, encoding 2, value "hi" - buf := []byte("\x0A\x02hi\x0A\x02hi") - err = Unmarshal(buf, pb) - if err == nil { - t.Error("unmarshal: expected error, got nil") - } else if strings.Index(err.Error(), "{Unknown}") < 0 { - t.Errorf("unmarshal: bad error type: %v", err) - } -} - -func TestTypedNilMarshal(t *testing.T) { - // A typed nil should return ErrNil and not crash. - _, err := Marshal((*GoEnum)(nil)) - if err != ErrNil { - t.Errorf("Marshal: got err %v, want ErrNil", err) - } -} - -// A type that implements the Marshaler interface, but is not nillable. -type nonNillableInt uint64 - -func (nni nonNillableInt) Marshal() ([]byte, error) { - return EncodeVarint(uint64(nni)), nil -} - -type NNIMessage struct { - nni nonNillableInt -} - -func (*NNIMessage) Reset() {} -func (*NNIMessage) String() string { return "" } -func (*NNIMessage) ProtoMessage() {} - -// A type that implements the Marshaler interface and is nillable. -type nillableMessage struct { - x uint64 -} - -func (nm *nillableMessage) Marshal() ([]byte, error) { - return EncodeVarint(nm.x), nil -} - -type NMMessage struct { - nm *nillableMessage -} - -func (*NMMessage) Reset() {} -func (*NMMessage) String() string { return "" } -func (*NMMessage) ProtoMessage() {} - -// Verify a type that uses the Marshaler interface, but has a nil pointer. -func TestNilMarshaler(t *testing.T) { - // Try a struct with a Marshaler field that is nil. - // It should be directly marshable. - nmm := new(NMMessage) - if _, err := Marshal(nmm); err != nil { - t.Error("unexpected error marshaling nmm: ", err) - } - - // Try a struct with a Marshaler field that is not nillable. - nnim := new(NNIMessage) - nnim.nni = 7 - var _ Marshaler = nnim.nni // verify it is truly a Marshaler - if _, err := Marshal(nnim); err != nil { - t.Error("unexpected error marshaling nnim: ", err) - } -} - -func TestAllSetDefaults(t *testing.T) { - // Exercise SetDefaults with all scalar field types. - m := &Defaults{ - // NaN != NaN, so override that here. - F_Nan: Float32(1.7), - } - expected := &Defaults{ - F_Bool: Bool(true), - F_Int32: Int32(32), - F_Int64: Int64(64), - F_Fixed32: Uint32(320), - F_Fixed64: Uint64(640), - F_Uint32: Uint32(3200), - F_Uint64: Uint64(6400), - F_Float: Float32(314159), - F_Double: Float64(271828), - F_String: String(`hello, "world!"` + "\n"), - F_Bytes: []byte("Bignose"), - F_Sint32: Int32(-32), - F_Sint64: Int64(-64), - F_Enum: Defaults_GREEN.Enum(), - F_Pinf: Float32(float32(math.Inf(1))), - F_Ninf: Float32(float32(math.Inf(-1))), - F_Nan: Float32(1.7), - StrZero: String(""), - } - SetDefaults(m) - if !Equal(m, expected) { - t.Errorf("SetDefaults failed\n got %v\nwant %v", m, expected) - } -} - -func TestSetDefaultsWithSetField(t *testing.T) { - // Check that a set value is not overridden. - m := &Defaults{ - F_Int32: Int32(12), - } - SetDefaults(m) - if v := m.GetF_Int32(); v != 12 { - t.Errorf("m.FInt32 = %v, want 12", v) - } -} - -func TestSetDefaultsWithSubMessage(t *testing.T) { - m := &OtherMessage{ - Key: Int64(123), - Inner: &InnerMessage{ - Host: String("gopher"), - }, - } - expected := &OtherMessage{ - Key: Int64(123), - Inner: &InnerMessage{ - Host: String("gopher"), - Port: Int32(4000), - }, - } - SetDefaults(m) - if !Equal(m, expected) { - t.Errorf("\n got %v\nwant %v", m, expected) - } -} - -func TestSetDefaultsWithRepeatedSubMessage(t *testing.T) { - m := &MyMessage{ - RepInner: []*InnerMessage{{}}, - } - expected := &MyMessage{ - RepInner: []*InnerMessage{{ - Port: Int32(4000), - }}, - } - SetDefaults(m) - if !Equal(m, expected) { - t.Errorf("\n got %v\nwant %v", m, expected) - } -} - -func TestSetDefaultWithRepeatedNonMessage(t *testing.T) { - m := &MyMessage{ - Pet: []string{"turtle", "wombat"}, - } - expected := Clone(m) - SetDefaults(m) - if !Equal(m, expected) { - t.Errorf("\n got %v\nwant %v", m, expected) - } -} - -func TestMaximumTagNumber(t *testing.T) { - m := &MaxTag{ - LastField: String("natural goat essence"), - } - buf, err := Marshal(m) - if err != nil { - t.Fatalf("proto.Marshal failed: %v", err) - } - m2 := new(MaxTag) - if err := Unmarshal(buf, m2); err != nil { - t.Fatalf("proto.Unmarshal failed: %v", err) - } - if got, want := m2.GetLastField(), *m.LastField; got != want { - t.Errorf("got %q, want %q", got, want) - } -} - -func TestJSON(t *testing.T) { - m := &MyMessage{ - Count: Int32(4), - Pet: []string{"bunny", "kitty"}, - Inner: &InnerMessage{ - Host: String("cauchy"), - }, - Bikeshed: MyMessage_GREEN.Enum(), - } - const expected = `{"count":4,"pet":["bunny","kitty"],"inner":{"host":"cauchy"},"bikeshed":1}` - - b, err := json.Marshal(m) - if err != nil { - t.Fatalf("json.Marshal failed: %v", err) - } - s := string(b) - if s != expected { - t.Errorf("got %s\nwant %s", s, expected) - } - - received := new(MyMessage) - if err := json.Unmarshal(b, received); err != nil { - t.Fatalf("json.Unmarshal failed: %v", err) - } - if !Equal(received, m) { - t.Fatalf("got %s, want %s", received, m) - } - - // Test unmarshalling of JSON with symbolic enum name. - const old = `{"count":4,"pet":["bunny","kitty"],"inner":{"host":"cauchy"},"bikeshed":"GREEN"}` - received.Reset() - if err := json.Unmarshal([]byte(old), received); err != nil { - t.Fatalf("json.Unmarshal failed: %v", err) - } - if !Equal(received, m) { - t.Fatalf("got %s, want %s", received, m) - } -} - -func TestBadWireType(t *testing.T) { - b := []byte{7<<3 | 6} // field 7, wire type 6 - pb := new(OtherMessage) - if err := Unmarshal(b, pb); err == nil { - t.Errorf("Unmarshal did not fail") - } else if !strings.Contains(err.Error(), "unknown wire type") { - t.Errorf("wrong error: %v", err) - } -} - -func TestBytesWithInvalidLength(t *testing.T) { - // If a byte sequence has an invalid (negative) length, Unmarshal should not panic. - b := []byte{2<<3 | WireBytes, 0xff, 0xff, 0xff, 0xff, 0xff, 0} - Unmarshal(b, new(MyMessage)) -} - -func TestLengthOverflow(t *testing.T) { - // Overflowing a length should not panic. - b := []byte{2<<3 | WireBytes, 1, 1, 3<<3 | WireBytes, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01} - Unmarshal(b, new(MyMessage)) -} - -func TestVarintOverflow(t *testing.T) { - // Overflowing a 64-bit length should not be allowed. - b := []byte{1<<3 | WireVarint, 0x01, 3<<3 | WireBytes, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01} - if err := Unmarshal(b, new(MyMessage)); err == nil { - t.Fatalf("Overflowed uint64 length without error") - } -} - -func TestUnmarshalFuzz(t *testing.T) { - const N = 1000 - seed := time.Now().UnixNano() - t.Logf("RNG seed is %d", seed) - rng := rand.New(rand.NewSource(seed)) - buf := make([]byte, 20) - for i := 0; i < N; i++ { - for j := range buf { - buf[j] = byte(rng.Intn(256)) - } - fuzzUnmarshal(t, buf) - } -} - -func TestMergeMessages(t *testing.T) { - pb := &MessageList{Message: []*MessageList_Message{{Name: String("x"), Count: Int32(1)}}} - data, err := Marshal(pb) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - - pb1 := new(MessageList) - if err := Unmarshal(data, pb1); err != nil { - t.Fatalf("first Unmarshal: %v", err) - } - if err := Unmarshal(data, pb1); err != nil { - t.Fatalf("second Unmarshal: %v", err) - } - if len(pb1.Message) != 1 { - t.Errorf("two Unmarshals produced %d Messages, want 1", len(pb1.Message)) - } - - pb2 := new(MessageList) - if err := UnmarshalMerge(data, pb2); err != nil { - t.Fatalf("first UnmarshalMerge: %v", err) - } - if err := UnmarshalMerge(data, pb2); err != nil { - t.Fatalf("second UnmarshalMerge: %v", err) - } - if len(pb2.Message) != 2 { - t.Errorf("two UnmarshalMerges produced %d Messages, want 2", len(pb2.Message)) - } -} - -func TestExtensionMarshalOrder(t *testing.T) { - m := &MyMessage{Count: Int(123)} - if err := SetExtension(m, E_Ext_More, &Ext{Data: String("alpha")}); err != nil { - t.Fatalf("SetExtension: %v", err) - } - if err := SetExtension(m, E_Ext_Text, String("aleph")); err != nil { - t.Fatalf("SetExtension: %v", err) - } - if err := SetExtension(m, E_Ext_Number, Int32(1)); err != nil { - t.Fatalf("SetExtension: %v", err) - } - - // Serialize m several times, and check we get the same bytes each time. - var orig []byte - for i := 0; i < 100; i++ { - b, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - if i == 0 { - orig = b - continue - } - if !bytes.Equal(b, orig) { - t.Errorf("Bytes differ on attempt #%d", i) - } - } -} - -// Many extensions, because small maps might not iterate differently on each iteration. -var exts = []*ExtensionDesc{ - E_X201, - E_X202, - E_X203, - E_X204, - E_X205, - E_X206, - E_X207, - E_X208, - E_X209, - E_X210, - E_X211, - E_X212, - E_X213, - E_X214, - E_X215, - E_X216, - E_X217, - E_X218, - E_X219, - E_X220, - E_X221, - E_X222, - E_X223, - E_X224, - E_X225, - E_X226, - E_X227, - E_X228, - E_X229, - E_X230, - E_X231, - E_X232, - E_X233, - E_X234, - E_X235, - E_X236, - E_X237, - E_X238, - E_X239, - E_X240, - E_X241, - E_X242, - E_X243, - E_X244, - E_X245, - E_X246, - E_X247, - E_X248, - E_X249, - E_X250, -} - -func TestMessageSetMarshalOrder(t *testing.T) { - m := &MyMessageSet{} - for _, x := range exts { - if err := SetExtension(m, x, &Empty{}); err != nil { - t.Fatalf("SetExtension: %v", err) - } - } - - buf, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - - // Serialize m several times, and check we get the same bytes each time. - for i := 0; i < 10; i++ { - b1, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - if !bytes.Equal(b1, buf) { - t.Errorf("Bytes differ on re-Marshal #%d", i) - } - - m2 := &MyMessageSet{} - if err := Unmarshal(buf, m2); err != nil { - t.Errorf("Unmarshal: %v", err) - } - b2, err := Marshal(m2) - if err != nil { - t.Errorf("re-Marshal: %v", err) - } - if !bytes.Equal(b2, buf) { - t.Errorf("Bytes differ on round-trip #%d", i) - } - } -} - -func TestUnmarshalMergesMessages(t *testing.T) { - // If a nested message occurs twice in the input, - // the fields should be merged when decoding. - a := &OtherMessage{ - Key: Int64(123), - Inner: &InnerMessage{ - Host: String("polhode"), - Port: Int32(1234), - }, - } - aData, err := Marshal(a) - if err != nil { - t.Fatalf("Marshal(a): %v", err) - } - b := &OtherMessage{ - Weight: Float32(1.2), - Inner: &InnerMessage{ - Host: String("herpolhode"), - Connected: Bool(true), - }, - } - bData, err := Marshal(b) - if err != nil { - t.Fatalf("Marshal(b): %v", err) - } - want := &OtherMessage{ - Key: Int64(123), - Weight: Float32(1.2), - Inner: &InnerMessage{ - Host: String("herpolhode"), - Port: Int32(1234), - Connected: Bool(true), - }, - } - got := new(OtherMessage) - if err := Unmarshal(append(aData, bData...), got); err != nil { - t.Fatalf("Unmarshal: %v", err) - } - if !Equal(got, want) { - t.Errorf("\n got %v\nwant %v", got, want) - } -} - -func TestEncodingSizes(t *testing.T) { - tests := []struct { - m Message - n int - }{ - {&Defaults{F_Int32: Int32(math.MaxInt32)}, 6}, - {&Defaults{F_Int32: Int32(math.MinInt32)}, 11}, - {&Defaults{F_Uint32: Uint32(uint32(math.MaxInt32) + 1)}, 6}, - {&Defaults{F_Uint32: Uint32(math.MaxUint32)}, 6}, - } - for _, test := range tests { - b, err := Marshal(test.m) - if err != nil { - t.Errorf("Marshal(%v): %v", test.m, err) - continue - } - if len(b) != test.n { - t.Errorf("Marshal(%v) yielded %d bytes, want %d bytes", test.m, len(b), test.n) - } - } -} - -func TestRequiredNotSetError(t *testing.T) { - pb := initGoTest(false) - pb.RequiredField.Label = nil - pb.F_Int32Required = nil - pb.F_Int64Required = nil - - expected := "0807" + // field 1, encoding 0, value 7 - "2206" + "120474797065" + // field 4, encoding 2 (GoTestField) - "5001" + // field 10, encoding 0, value 1 - "6d20000000" + // field 13, encoding 5, value 0x20 - "714000000000000000" + // field 14, encoding 1, value 0x40 - "78a019" + // field 15, encoding 0, value 0xca0 = 3232 - "8001c032" + // field 16, encoding 0, value 0x1940 = 6464 - "8d0100004a45" + // field 17, encoding 5, value 3232.0 - "9101000000000040b940" + // field 18, encoding 1, value 6464.0 - "9a0106" + "737472696e67" + // field 19, encoding 2, string "string" - "b304" + // field 70, encoding 3, start group - "ba0408" + "7265717569726564" + // field 71, encoding 2, string "required" - "b404" + // field 70, encoding 4, end group - "aa0605" + "6279746573" + // field 101, encoding 2, string "bytes" - "b0063f" + // field 102, encoding 0, 0x3f zigzag32 - "b8067f" // field 103, encoding 0, 0x7f zigzag64 - - o := old() - bytes, err := Marshal(pb) - if _, ok := err.(*RequiredNotSetError); !ok { - fmt.Printf("marshal-1 err = %v, want *RequiredNotSetError", err) - o.DebugPrint("", bytes) - t.Fatalf("expected = %s", expected) - } - if strings.Index(err.Error(), "RequiredField.Label") < 0 { - t.Errorf("marshal-1 wrong err msg: %v", err) - } - if !equal(bytes, expected, t) { - o.DebugPrint("neq 1", bytes) - t.Fatalf("expected = %s", expected) - } - - // Now test Unmarshal by recreating the original buffer. - pbd := new(GoTest) - err = Unmarshal(bytes, pbd) - if _, ok := err.(*RequiredNotSetError); !ok { - t.Fatalf("unmarshal err = %v, want *RequiredNotSetError", err) - o.DebugPrint("", bytes) - t.Fatalf("string = %s", expected) - } - if strings.Index(err.Error(), "RequiredField.{Unknown}") < 0 { - t.Errorf("unmarshal wrong err msg: %v", err) - } - bytes, err = Marshal(pbd) - if _, ok := err.(*RequiredNotSetError); !ok { - t.Errorf("marshal-2 err = %v, want *RequiredNotSetError", err) - o.DebugPrint("", bytes) - t.Fatalf("string = %s", expected) - } - if strings.Index(err.Error(), "RequiredField.Label") < 0 { - t.Errorf("marshal-2 wrong err msg: %v", err) - } - if !equal(bytes, expected, t) { - o.DebugPrint("neq 2", bytes) - t.Fatalf("string = %s", expected) - } -} - -func fuzzUnmarshal(t *testing.T, data []byte) { - defer func() { - if e := recover(); e != nil { - t.Errorf("These bytes caused a panic: %+v", data) - t.Logf("Stack:\n%s", debug.Stack()) - t.FailNow() - } - }() - - pb := new(MyMessage) - Unmarshal(data, pb) -} - -func TestMapFieldMarshal(t *testing.T) { - m := &MessageWithMap{ - NameMapping: map[int32]string{ - 1: "Rob", - 4: "Ian", - 8: "Dave", - }, - } - b, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - - // b should be the concatenation of these three byte sequences in some order. - parts := []string{ - "\n\a\b\x01\x12\x03Rob", - "\n\a\b\x04\x12\x03Ian", - "\n\b\b\x08\x12\x04Dave", - } - ok := false - for i := range parts { - for j := range parts { - if j == i { - continue - } - for k := range parts { - if k == i || k == j { - continue - } - try := parts[i] + parts[j] + parts[k] - if bytes.Equal(b, []byte(try)) { - ok = true - break - } - } - } - } - if !ok { - t.Fatalf("Incorrect Marshal output.\n got %q\nwant %q (or a permutation of that)", b, parts[0]+parts[1]+parts[2]) - } - t.Logf("FYI b: %q", b) - - (new(Buffer)).DebugPrint("Dump of b", b) -} - -func TestMapFieldRoundTrips(t *testing.T) { - m := &MessageWithMap{ - NameMapping: map[int32]string{ - 1: "Rob", - 4: "Ian", - 8: "Dave", - }, - MsgMapping: map[int64]*FloatingPoint{ - 0x7001: {F: Float64(2.0)}, - }, - ByteMapping: map[bool][]byte{ - false: []byte("that's not right!"), - true: []byte("aye, 'tis true!"), - }, - } - b, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - t.Logf("FYI b: %q", b) - m2 := new(MessageWithMap) - if err := Unmarshal(b, m2); err != nil { - t.Fatalf("Unmarshal: %v", err) - } - for _, pair := range [][2]interface{}{ - {m.NameMapping, m2.NameMapping}, - {m.MsgMapping, m2.MsgMapping}, - {m.ByteMapping, m2.ByteMapping}, - } { - if !reflect.DeepEqual(pair[0], pair[1]) { - t.Errorf("Map did not survive a round trip.\ninitial: %v\n final: %v", pair[0], pair[1]) - } - } -} - -// Benchmarks - -func testMsg() *GoTest { - pb := initGoTest(true) - const N = 1000 // Internally the library starts much smaller. - pb.F_Int32Repeated = make([]int32, N) - pb.F_DoubleRepeated = make([]float64, N) - for i := 0; i < N; i++ { - pb.F_Int32Repeated[i] = int32(i) - pb.F_DoubleRepeated[i] = float64(i) - } - return pb -} - -func bytesMsg() *GoTest { - pb := initGoTest(true) - buf := make([]byte, 4000) - for i := range buf { - buf[i] = byte(i) - } - pb.F_BytesDefaulted = buf - return pb -} - -func benchmarkMarshal(b *testing.B, pb Message, marshal func(Message) ([]byte, error)) { - d, _ := marshal(pb) - b.SetBytes(int64(len(d))) - b.ResetTimer() - for i := 0; i < b.N; i++ { - marshal(pb) - } -} - -func benchmarkBufferMarshal(b *testing.B, pb Message) { - p := NewBuffer(nil) - benchmarkMarshal(b, pb, func(pb0 Message) ([]byte, error) { - p.Reset() - err := p.Marshal(pb0) - return p.Bytes(), err - }) -} - -func benchmarkSize(b *testing.B, pb Message) { - benchmarkMarshal(b, pb, func(pb0 Message) ([]byte, error) { - Size(pb) - return nil, nil - }) -} - -func newOf(pb Message) Message { - in := reflect.ValueOf(pb) - if in.IsNil() { - return pb - } - return reflect.New(in.Type().Elem()).Interface().(Message) -} - -func benchmarkUnmarshal(b *testing.B, pb Message, unmarshal func([]byte, Message) error) { - d, _ := Marshal(pb) - b.SetBytes(int64(len(d))) - pbd := newOf(pb) - - b.ResetTimer() - for i := 0; i < b.N; i++ { - unmarshal(d, pbd) - } -} - -func benchmarkBufferUnmarshal(b *testing.B, pb Message) { - p := NewBuffer(nil) - benchmarkUnmarshal(b, pb, func(d []byte, pb0 Message) error { - p.SetBuf(d) - return p.Unmarshal(pb0) - }) -} - -// Benchmark{Marshal,BufferMarshal,Size,Unmarshal,BufferUnmarshal}{,Bytes} - -func BenchmarkMarshal(b *testing.B) { - benchmarkMarshal(b, testMsg(), Marshal) -} - -func BenchmarkBufferMarshal(b *testing.B) { - benchmarkBufferMarshal(b, testMsg()) -} - -func BenchmarkSize(b *testing.B) { - benchmarkSize(b, testMsg()) -} - -func BenchmarkUnmarshal(b *testing.B) { - benchmarkUnmarshal(b, testMsg(), Unmarshal) -} - -func BenchmarkBufferUnmarshal(b *testing.B) { - benchmarkBufferUnmarshal(b, testMsg()) -} - -func BenchmarkMarshalBytes(b *testing.B) { - benchmarkMarshal(b, bytesMsg(), Marshal) -} - -func BenchmarkBufferMarshalBytes(b *testing.B) { - benchmarkBufferMarshal(b, bytesMsg()) -} - -func BenchmarkSizeBytes(b *testing.B) { - benchmarkSize(b, bytesMsg()) -} - -func BenchmarkUnmarshalBytes(b *testing.B) { - benchmarkUnmarshal(b, bytesMsg(), Unmarshal) -} - -func BenchmarkBufferUnmarshalBytes(b *testing.B) { - benchmarkBufferUnmarshal(b, bytesMsg()) -} - -func BenchmarkUnmarshalUnrecognizedFields(b *testing.B) { - b.StopTimer() - pb := initGoTestField() - skip := &GoSkipTest{ - SkipInt32: Int32(32), - SkipFixed32: Uint32(3232), - SkipFixed64: Uint64(6464), - SkipString: String("skipper"), - Skipgroup: &GoSkipTest_SkipGroup{ - GroupInt32: Int32(75), - GroupString: String("wxyz"), - }, - } - - pbd := new(GoTestField) - p := NewBuffer(nil) - p.Marshal(pb) - p.Marshal(skip) - p2 := NewBuffer(nil) - - b.StartTimer() - for i := 0; i < b.N; i++ { - p2.SetBuf(p.Bytes()) - p2.Unmarshal(pbd) - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone_test.go deleted file mode 100644 index 34ef129..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone_test.go +++ /dev/null @@ -1,227 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "testing" - - "github.com/gogo/protobuf/proto" - - pb "github.com/gogo/protobuf/proto/testdata" -) - -var cloneTestMessage = &pb.MyMessage{ - Count: proto.Int32(42), - Name: proto.String("Dave"), - Pet: []string{"bunny", "kitty", "horsey"}, - Inner: &pb.InnerMessage{ - Host: proto.String("niles"), - Port: proto.Int32(9099), - Connected: proto.Bool(true), - }, - Others: []*pb.OtherMessage{ - { - Value: []byte("some bytes"), - }, - }, - Somegroup: &pb.MyMessage_SomeGroup{ - GroupField: proto.Int32(6), - }, - RepBytes: [][]byte{[]byte("sham"), []byte("wow")}, -} - -func init() { - ext := &pb.Ext{ - Data: proto.String("extension"), - } - if err := proto.SetExtension(cloneTestMessage, pb.E_Ext_More, ext); err != nil { - panic("SetExtension: " + err.Error()) - } -} - -func TestClone(t *testing.T) { - m := proto.Clone(cloneTestMessage).(*pb.MyMessage) - if !proto.Equal(m, cloneTestMessage) { - t.Errorf("Clone(%v) = %v", cloneTestMessage, m) - } - - // Verify it was a deep copy. - *m.Inner.Port++ - if proto.Equal(m, cloneTestMessage) { - t.Error("Mutating clone changed the original") - } - // Byte fields and repeated fields should be copied. - if &m.Pet[0] == &cloneTestMessage.Pet[0] { - t.Error("Pet: repeated field not copied") - } - if &m.Others[0] == &cloneTestMessage.Others[0] { - t.Error("Others: repeated field not copied") - } - if &m.Others[0].Value[0] == &cloneTestMessage.Others[0].Value[0] { - t.Error("Others[0].Value: bytes field not copied") - } - if &m.RepBytes[0] == &cloneTestMessage.RepBytes[0] { - t.Error("RepBytes: repeated field not copied") - } - if &m.RepBytes[0][0] == &cloneTestMessage.RepBytes[0][0] { - t.Error("RepBytes[0]: bytes field not copied") - } -} - -func TestCloneNil(t *testing.T) { - var m *pb.MyMessage - if c := proto.Clone(m); !proto.Equal(m, c) { - t.Errorf("Clone(%v) = %v", m, c) - } -} - -var mergeTests = []struct { - src, dst, want proto.Message -}{ - { - src: &pb.MyMessage{ - Count: proto.Int32(42), - }, - dst: &pb.MyMessage{ - Name: proto.String("Dave"), - }, - want: &pb.MyMessage{ - Count: proto.Int32(42), - Name: proto.String("Dave"), - }, - }, - { - src: &pb.MyMessage{ - Inner: &pb.InnerMessage{ - Host: proto.String("hey"), - Connected: proto.Bool(true), - }, - Pet: []string{"horsey"}, - Others: []*pb.OtherMessage{ - { - Value: []byte("some bytes"), - }, - }, - }, - dst: &pb.MyMessage{ - Inner: &pb.InnerMessage{ - Host: proto.String("niles"), - Port: proto.Int32(9099), - }, - Pet: []string{"bunny", "kitty"}, - Others: []*pb.OtherMessage{ - { - Key: proto.Int64(31415926535), - }, - { - // Explicitly test a src=nil field - Inner: nil, - }, - }, - }, - want: &pb.MyMessage{ - Inner: &pb.InnerMessage{ - Host: proto.String("hey"), - Connected: proto.Bool(true), - Port: proto.Int32(9099), - }, - Pet: []string{"bunny", "kitty", "horsey"}, - Others: []*pb.OtherMessage{ - { - Key: proto.Int64(31415926535), - }, - {}, - { - Value: []byte("some bytes"), - }, - }, - }, - }, - { - src: &pb.MyMessage{ - RepBytes: [][]byte{[]byte("wow")}, - }, - dst: &pb.MyMessage{ - Somegroup: &pb.MyMessage_SomeGroup{ - GroupField: proto.Int32(6), - }, - RepBytes: [][]byte{[]byte("sham")}, - }, - want: &pb.MyMessage{ - Somegroup: &pb.MyMessage_SomeGroup{ - GroupField: proto.Int32(6), - }, - RepBytes: [][]byte{[]byte("sham"), []byte("wow")}, - }, - }, - // Check that a scalar bytes field replaces rather than appends. - { - src: &pb.OtherMessage{Value: []byte("foo")}, - dst: &pb.OtherMessage{Value: []byte("bar")}, - want: &pb.OtherMessage{Value: []byte("foo")}, - }, - { - src: &pb.MessageWithMap{ - NameMapping: map[int32]string{6: "Nigel"}, - MsgMapping: map[int64]*pb.FloatingPoint{ - 0x4001: {F: proto.Float64(2.0)}, - }, - ByteMapping: map[bool][]byte{true: []byte("wowsa")}, - }, - dst: &pb.MessageWithMap{ - NameMapping: map[int32]string{ - 6: "Bruce", // should be overwritten - 7: "Andrew", - }, - }, - want: &pb.MessageWithMap{ - NameMapping: map[int32]string{ - 6: "Nigel", - 7: "Andrew", - }, - MsgMapping: map[int64]*pb.FloatingPoint{ - 0x4001: {F: proto.Float64(2.0)}, - }, - ByteMapping: map[bool][]byte{true: []byte("wowsa")}, - }, - }, -} - -func TestMerge(t *testing.T) { - for _, m := range mergeTests { - got := proto.Clone(m.dst) - proto.Merge(got, m.src) - if !proto.Equal(got, m.want) { - t.Errorf("Merge(%v, %v)\n got %v\nwant %v\n", m.dst, m.src, got, m.want) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode.go deleted file mode 100644 index 8bba594..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode.go +++ /dev/null @@ -1,826 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for decoding protocol buffer data to construct in-memory representations. - */ - -import ( - "errors" - "fmt" - "io" - "os" - "reflect" -) - -// errOverflow is returned when an integer is too large to be represented. -var errOverflow = errors.New("proto: integer overflow") - -// The fundamental decoders that interpret bytes on the wire. -// Those that take integer types all return uint64 and are -// therefore of type valueDecoder. - -// DecodeVarint reads a varint-encoded integer from the slice. -// It returns the integer and the number of bytes consumed, or -// zero if there is not enough. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func DecodeVarint(buf []byte) (x uint64, n int) { - // x, n already 0 - for shift := uint(0); shift < 64; shift += 7 { - if n >= len(buf) { - return 0, 0 - } - b := uint64(buf[n]) - n++ - x |= (b & 0x7F) << shift - if (b & 0x80) == 0 { - return x, n - } - } - - // The number is too large to represent in a 64-bit value. - return 0, 0 -} - -// DecodeVarint reads a varint-encoded integer from the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) DecodeVarint() (x uint64, err error) { - // x, err already 0 - - i := p.index - l := len(p.buf) - - for shift := uint(0); shift < 64; shift += 7 { - if i >= l { - err = io.ErrUnexpectedEOF - return - } - b := p.buf[i] - i++ - x |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - p.index = i - return - } - } - - // The number is too large to represent in a 64-bit value. - err = errOverflow - return -} - -// DecodeFixed64 reads a 64-bit integer from the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) DecodeFixed64() (x uint64, err error) { - // x, err already 0 - i := p.index + 8 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-8]) - x |= uint64(p.buf[i-7]) << 8 - x |= uint64(p.buf[i-6]) << 16 - x |= uint64(p.buf[i-5]) << 24 - x |= uint64(p.buf[i-4]) << 32 - x |= uint64(p.buf[i-3]) << 40 - x |= uint64(p.buf[i-2]) << 48 - x |= uint64(p.buf[i-1]) << 56 - return -} - -// DecodeFixed32 reads a 32-bit integer from the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) DecodeFixed32() (x uint64, err error) { - // x, err already 0 - i := p.index + 4 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-4]) - x |= uint64(p.buf[i-3]) << 8 - x |= uint64(p.buf[i-2]) << 16 - x |= uint64(p.buf[i-1]) << 24 - return -} - -// DecodeZigzag64 reads a zigzag-encoded 64-bit integer -// from the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) DecodeZigzag64() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) - return -} - -// DecodeZigzag32 reads a zigzag-encoded 32-bit integer -// from the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) DecodeZigzag32() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) - return -} - -// These are not ValueDecoders: they produce an array of bytes or a string. -// bytes, embedded messages - -// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { - n, err := p.DecodeVarint() - if err != nil { - return nil, err - } - - nb := int(n) - if nb < 0 { - return nil, fmt.Errorf("proto: bad byte length %d", nb) - } - end := p.index + nb - if end < p.index || end > len(p.buf) { - return nil, io.ErrUnexpectedEOF - } - - if !alloc { - // todo: check if can get more uses of alloc=false - buf = p.buf[p.index:end] - p.index += nb - return - } - - buf = make([]byte, nb) - copy(buf, p.buf[p.index:]) - p.index += nb - return -} - -// DecodeStringBytes reads an encoded string from the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) DecodeStringBytes() (s string, err error) { - buf, err := p.DecodeRawBytes(false) - if err != nil { - return - } - return string(buf), nil -} - -// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. -// If the protocol buffer has extensions, and the field matches, add it as an extension. -// Otherwise, if the XXX_unrecognized field exists, append the skipped data there. -func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error { - oi := o.index - - err := o.skip(t, tag, wire) - if err != nil { - return err - } - - if !unrecField.IsValid() { - return nil - } - - ptr := structPointer_Bytes(base, unrecField) - - // Add the skipped field to struct field - obuf := o.buf - - o.buf = *ptr - o.EncodeVarint(uint64(tag<<3 | wire)) - *ptr = append(o.buf, obuf[oi:o.index]...) - - o.buf = obuf - - return nil -} - -// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. -func (o *Buffer) skip(t reflect.Type, tag, wire int) error { - - var u uint64 - var err error - - switch wire { - case WireVarint: - _, err = o.DecodeVarint() - case WireFixed64: - _, err = o.DecodeFixed64() - case WireBytes: - _, err = o.DecodeRawBytes(false) - case WireFixed32: - _, err = o.DecodeFixed32() - case WireStartGroup: - for { - u, err = o.DecodeVarint() - if err != nil { - break - } - fwire := int(u & 0x7) - if fwire == WireEndGroup { - break - } - ftag := int(u >> 3) - err = o.skip(t, ftag, fwire) - if err != nil { - break - } - } - default: - err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t) - } - return err -} - -// Unmarshaler is the interface representing objects that can -// unmarshal themselves. The method should reset the receiver before -// decoding starts. The argument points to data that may be -// overwritten, so implementations should not keep references to the -// buffer. -type Unmarshaler interface { - Unmarshal([]byte) error -} - -// Unmarshal parses the protocol buffer representation in buf and places the -// decoded result in pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// Unmarshal resets pb before starting to unmarshal, so any -// existing data in pb is always removed. Use UnmarshalMerge -// to preserve and append to existing data. -func Unmarshal(buf []byte, pb Message) error { - pb.Reset() - return UnmarshalMerge(buf, pb) -} - -// UnmarshalMerge parses the protocol buffer representation in buf and -// writes the decoded result to pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// UnmarshalMerge merges into existing data in pb. -// Most code should use Unmarshal instead. -func UnmarshalMerge(buf []byte, pb Message) error { - // If the object can unmarshal itself, let it. - if u, ok := pb.(Unmarshaler); ok { - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// Unmarshal parses the protocol buffer representation in the -// Buffer and places the decoded result in pb. If the struct -// underlying pb does not match the data in the buffer, the results can be -// unpredictable. -func (p *Buffer) Unmarshal(pb Message) error { - // If the object can unmarshal itself, let it. - if u, ok := pb.(Unmarshaler); ok { - err := u.Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - - typ, base, err := getbase(pb) - if err != nil { - return err - } - - err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base) - - if collectStats { - stats.Decode++ - } - - return err -} - -// unmarshalType does the work of unmarshaling a structure. -func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error { - var state errorState - required, reqFields := prop.reqCount, uint64(0) - - var err error - for err == nil && o.index < len(o.buf) { - oi := o.index - var u uint64 - u, err = o.DecodeVarint() - if err != nil { - break - } - wire := int(u & 0x7) - if wire == WireEndGroup { - if is_group { - return nil // input is satisfied - } - return fmt.Errorf("proto: %s: wiretype end group for non-group", st) - } - tag := int(u >> 3) - if tag <= 0 { - return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire) - } - fieldnum, ok := prop.decoderTags.get(tag) - if !ok { - // Maybe it's an extension? - if prop.extendable { - if e := structPointer_Interface(base, st).(extendableProto); isExtensionField(e, int32(tag)) { - if err = o.skip(st, tag, wire); err == nil { - if ee, ok := e.(extensionsMap); ok { - ext := ee.ExtensionMap()[int32(tag)] // may be missing - ext.enc = append(ext.enc, o.buf[oi:o.index]...) - ee.ExtensionMap()[int32(tag)] = ext - } else if ee, ok := e.(extensionsBytes); ok { - ext := ee.GetExtensions() - *ext = append(*ext, o.buf[oi:o.index]...) - } - } - continue - } - } - err = o.skipAndSave(st, tag, wire, base, prop.unrecField) - continue - } - p := prop.Prop[fieldnum] - - if p.dec == nil { - fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name) - continue - } - dec := p.dec - if wire != WireStartGroup && wire != p.WireType { - if wire == WireBytes && p.packedDec != nil { - // a packable field - dec = p.packedDec - } else { - err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType) - continue - } - } - decErr := dec(o, p, base) - if decErr != nil && !state.shouldContinue(decErr, p) { - err = decErr - } - if err == nil && p.Required { - // Successfully decoded a required field. - if tag <= 64 { - // use bitmap for fields 1-64 to catch field reuse. - var mask uint64 = 1 << uint64(tag-1) - if reqFields&mask == 0 { - // new required field - reqFields |= mask - required-- - } - } else { - // This is imprecise. It can be fooled by a required field - // with a tag > 64 that is encoded twice; that's very rare. - // A fully correct implementation would require allocating - // a data structure, which we would like to avoid. - required-- - } - } - } - if err == nil { - if is_group { - return io.ErrUnexpectedEOF - } - if state.err != nil { - return state.err - } - if required > 0 { - // Not enough information to determine the exact field. If we use extra - // CPU, we could determine the field only if the missing required field - // has a tag <= 64 and we check reqFields. - return &RequiredNotSetError{"{Unknown}"} - } - } - return err -} - -// Individual type decoders -// For each, -// u is the decoded value, -// v is a pointer to the field (pointer) in the struct - -// Sizes of the pools to allocate inside the Buffer. -// The goal is modest amortization and allocation -// on at least 16-byte boundaries. -const ( - boolPoolSize = 16 - uint32PoolSize = 8 - uint64PoolSize = 4 -) - -// Decode a bool. -func (o *Buffer) dec_bool(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - if len(o.bools) == 0 { - o.bools = make([]bool, boolPoolSize) - } - o.bools[0] = u != 0 - *structPointer_Bool(base, p.field) = &o.bools[0] - o.bools = o.bools[1:] - return nil -} - -func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - *structPointer_BoolVal(base, p.field) = u != 0 - return nil -} - -// Decode an int32. -func (o *Buffer) dec_int32(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word32_Set(structPointer_Word32(base, p.field), o, uint32(u)) - return nil -} - -func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u)) - return nil -} - -// Decode an int64. -func (o *Buffer) dec_int64(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word64_Set(structPointer_Word64(base, p.field), o, u) - return nil -} - -func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word64Val_Set(structPointer_Word64Val(base, p.field), o, u) - return nil -} - -// Decode a string. -func (o *Buffer) dec_string(p *Properties, base structPointer) error { - s, err := o.DecodeStringBytes() - if err != nil { - return err - } - *structPointer_String(base, p.field) = &s - return nil -} - -func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error { - s, err := o.DecodeStringBytes() - if err != nil { - return err - } - *structPointer_StringVal(base, p.field) = s - return nil -} - -// Decode a slice of bytes ([]byte). -func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error { - b, err := o.DecodeRawBytes(true) - if err != nil { - return err - } - *structPointer_Bytes(base, p.field) = b - return nil -} - -// Decode a slice of bools ([]bool). -func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - v := structPointer_BoolSlice(base, p.field) - *v = append(*v, u != 0) - return nil -} - -// Decode a slice of bools ([]bool) in packed format. -func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error { - v := structPointer_BoolSlice(base, p.field) - - nn, err := o.DecodeVarint() - if err != nil { - return err - } - nb := int(nn) // number of bytes of encoded bools - - y := *v - for i := 0; i < nb; i++ { - u, err := p.valDec(o) - if err != nil { - return err - } - y = append(y, u != 0) - } - - *v = y - return nil -} - -// Decode a slice of int32s ([]int32). -func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - structPointer_Word32Slice(base, p.field).Append(uint32(u)) - return nil -} - -// Decode a slice of int32s ([]int32) in packed format. -func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error { - v := structPointer_Word32Slice(base, p.field) - - nn, err := o.DecodeVarint() - if err != nil { - return err - } - nb := int(nn) // number of bytes of encoded int32s - - fin := o.index + nb - if fin < o.index { - return errOverflow - } - for o.index < fin { - u, err := p.valDec(o) - if err != nil { - return err - } - v.Append(uint32(u)) - } - return nil -} - -// Decode a slice of int64s ([]int64). -func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - - structPointer_Word64Slice(base, p.field).Append(u) - return nil -} - -// Decode a slice of int64s ([]int64) in packed format. -func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error { - v := structPointer_Word64Slice(base, p.field) - - nn, err := o.DecodeVarint() - if err != nil { - return err - } - nb := int(nn) // number of bytes of encoded int64s - - fin := o.index + nb - if fin < o.index { - return errOverflow - } - for o.index < fin { - u, err := p.valDec(o) - if err != nil { - return err - } - v.Append(u) - } - return nil -} - -// Decode a slice of strings ([]string). -func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error { - s, err := o.DecodeStringBytes() - if err != nil { - return err - } - v := structPointer_StringSlice(base, p.field) - *v = append(*v, s) - return nil -} - -// Decode a slice of slice of bytes ([][]byte). -func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error { - b, err := o.DecodeRawBytes(true) - if err != nil { - return err - } - v := structPointer_BytesSlice(base, p.field) - *v = append(*v, b) - return nil -} - -// Decode a map field. -func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { - raw, err := o.DecodeRawBytes(false) - if err != nil { - return err - } - oi := o.index // index at the end of this map entry - o.index -= len(raw) // move buffer back to start of map entry - - mptr := structPointer_Map(base, p.field, p.mtype) // *map[K]V - if mptr.Elem().IsNil() { - mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem())) - } - v := mptr.Elem() // map[K]V - - // Prepare addressable doubly-indirect placeholders for the key and value types. - // See enc_new_map for why. - keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K - keybase := toStructPointer(keyptr.Addr()) // **K - - var valbase structPointer - var valptr reflect.Value - switch p.mtype.Elem().Kind() { - case reflect.Slice: - // []byte - var dummy []byte - valptr = reflect.ValueOf(&dummy) // *[]byte - valbase = toStructPointer(valptr) // *[]byte - case reflect.Ptr: - // message; valptr is **Msg; need to allocate the intermediate pointer - valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V - valptr.Set(reflect.New(valptr.Type().Elem())) - valbase = toStructPointer(valptr) - default: - // everything else - valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V - valbase = toStructPointer(valptr.Addr()) // **V - } - - // Decode. - // This parses a restricted wire format, namely the encoding of a message - // with two fields. See enc_new_map for the format. - for o.index < oi { - // tagcode for key and value properties are always a single byte - // because they have tags 1 and 2. - tagcode := o.buf[o.index] - o.index++ - switch tagcode { - case p.mkeyprop.tagcode[0]: - if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil { - return err - } - case p.mvalprop.tagcode[0]: - if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil { - return err - } - default: - // TODO: Should we silently skip this instead? - return fmt.Errorf("proto: bad map data tag %d", raw[0]) - } - } - - v.SetMapIndex(keyptr.Elem(), valptr.Elem()) - return nil -} - -// Decode a group. -func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error { - bas := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(bas) { - // allocate new nested message - bas = toStructPointer(reflect.New(p.stype)) - structPointer_SetStructPointer(base, p.field, bas) - } - return o.unmarshalType(p.stype, p.sprop, true, bas) -} - -// Decode an embedded message. -func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) { - raw, e := o.DecodeRawBytes(false) - if e != nil { - return e - } - - bas := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(bas) { - // allocate new nested message - bas = toStructPointer(reflect.New(p.stype)) - structPointer_SetStructPointer(base, p.field, bas) - } - - // If the object can unmarshal itself, let it. - if p.isUnmarshaler { - iv := structPointer_Interface(bas, p.stype) - return iv.(Unmarshaler).Unmarshal(raw) - } - - obuf := o.buf - oi := o.index - o.buf = raw - o.index = 0 - - err = o.unmarshalType(p.stype, p.sprop, false, bas) - o.buf = obuf - o.index = oi - - return err -} - -// Decode a slice of embedded messages. -func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error { - return o.dec_slice_struct(p, false, base) -} - -// Decode a slice of embedded groups. -func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error { - return o.dec_slice_struct(p, true, base) -} - -// Decode a slice of structs ([]*struct). -func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error { - v := reflect.New(p.stype) - bas := toStructPointer(v) - structPointer_StructPointerSlice(base, p.field).Append(bas) - - if is_group { - err := o.unmarshalType(p.stype, p.sprop, is_group, bas) - return err - } - - raw, err := o.DecodeRawBytes(false) - if err != nil { - return err - } - - // If the object can unmarshal itself, let it. - if p.isUnmarshaler { - iv := v.Interface() - return iv.(Unmarshaler).Unmarshal(raw) - } - - obuf := o.buf - oi := o.index - o.buf = raw - o.index = 0 - - err = o.unmarshalType(p.stype, p.sprop, is_group, bas) - - o.buf = obuf - o.index = oi - - return err -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode.go deleted file mode 100644 index d1abc33..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode.go +++ /dev/null @@ -1,1288 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - -import ( - "errors" - "fmt" - "reflect" - "sort" -) - -// RequiredNotSetError is the error returned if Marshal is called with -// a protocol buffer struct whose required fields have not -// all been initialized. It is also the error returned if Unmarshal is -// called with an encoded protocol buffer that does not include all the -// required fields. -// -// When printed, RequiredNotSetError reports the first unset required field in a -// message. If the field cannot be precisely determined, it is reported as -// "{Unknown}". -type RequiredNotSetError struct { - field string -} - -func (e *RequiredNotSetError) Error() string { - return fmt.Sprintf("proto: required field %q not set", e.field) -} - -var ( - // errRepeatedHasNil is the error returned if Marshal is called with - // a struct with a repeated field containing a nil element. - errRepeatedHasNil = errors.New("proto: repeated field has nil element") - - // ErrNil is the error returned if Marshal is called with nil. - ErrNil = errors.New("proto: Marshal called with nil") -) - -// The fundamental encoders that put bytes on the wire. -// Those that take integer types all accept uint64 and are -// therefore of type valueEncoder. - -const maxVarintBytes = 10 // maximum length of a varint - -// EncodeVarint returns the varint encoding of x. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -// Not used by the package itself, but helpful to clients -// wishing to use the same encoding. -func EncodeVarint(x uint64) []byte { - var buf [maxVarintBytes]byte - var n int - for n = 0; x > 127; n++ { - buf[n] = 0x80 | uint8(x&0x7F) - x >>= 7 - } - buf[n] = uint8(x) - n++ - return buf[0:n] -} - -// EncodeVarint writes a varint-encoded integer to the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) EncodeVarint(x uint64) error { - for x >= 1<<7 { - p.buf = append(p.buf, uint8(x&0x7f|0x80)) - x >>= 7 - } - p.buf = append(p.buf, uint8(x)) - return nil -} - -func sizeVarint(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} - -// EncodeFixed64 writes a 64-bit integer to the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) EncodeFixed64(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24), - uint8(x>>32), - uint8(x>>40), - uint8(x>>48), - uint8(x>>56)) - return nil -} - -func sizeFixed64(x uint64) int { - return 8 -} - -// EncodeFixed32 writes a 32-bit integer to the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) EncodeFixed32(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24)) - return nil -} - -func sizeFixed32(x uint64) int { - return 4 -} - -// EncodeZigzag64 writes a zigzag-encoded 64-bit integer -// to the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) EncodeZigzag64(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} - -func sizeZigzag64(x uint64) int { - return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} - -// EncodeZigzag32 writes a zigzag-encoded 32-bit integer -// to the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) EncodeZigzag32(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) -} - -func sizeZigzag32(x uint64) int { - return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) -} - -// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) EncodeRawBytes(b []byte) error { - p.EncodeVarint(uint64(len(b))) - p.buf = append(p.buf, b...) - return nil -} - -func sizeRawBytes(b []byte) int { - return sizeVarint(uint64(len(b))) + - len(b) -} - -// EncodeStringBytes writes an encoded string to the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) EncodeStringBytes(s string) error { - p.EncodeVarint(uint64(len(s))) - p.buf = append(p.buf, s...) - return nil -} - -func sizeStringBytes(s string) int { - return sizeVarint(uint64(len(s))) + - len(s) -} - -// Marshaler is the interface representing objects that can marshal themselves. -type Marshaler interface { - Marshal() ([]byte, error) -} - -// Marshal takes the protocol buffer -// and encodes it into the wire format, returning the data. -func Marshal(pb Message) ([]byte, error) { - // Can the object marshal itself? - if m, ok := pb.(Marshaler); ok { - return m.Marshal() - } - p := NewBuffer(nil) - err := p.Marshal(pb) - var state errorState - if err != nil && !state.shouldContinue(err, nil) { - return nil, err - } - if p.buf == nil && err == nil { - // Return a non-nil slice on success. - return []byte{}, nil - } - return p.buf, err -} - -// Marshal takes the protocol buffer -// and encodes it into the wire format, writing the result to the -// Buffer. -func (p *Buffer) Marshal(pb Message) error { - // Can the object marshal itself? - if m, ok := pb.(Marshaler); ok { - data, err := m.Marshal() - if err != nil { - return err - } - p.buf = append(p.buf, data...) - return nil - } - - t, base, err := getbase(pb) - if structPointer_IsNil(base) { - return ErrNil - } - if err == nil { - err = p.enc_struct(GetProperties(t.Elem()), base) - } - - if collectStats { - stats.Encode++ - } - - return err -} - -// Size returns the encoded size of a protocol buffer. -func Size(pb Message) (n int) { - // Can the object marshal itself? If so, Size is slow. - // TODO: add Size to Marshaler, or add a Sizer interface. - if m, ok := pb.(Marshaler); ok { - b, _ := m.Marshal() - return len(b) - } - - t, base, err := getbase(pb) - if structPointer_IsNil(base) { - return 0 - } - if err == nil { - n = size_struct(GetProperties(t.Elem()), base) - } - - if collectStats { - stats.Size++ - } - - return -} - -// Individual type encoders. - -// Encode a bool. -func (o *Buffer) enc_bool(p *Properties, base structPointer) error { - v := *structPointer_Bool(base, p.field) - if v == nil { - return ErrNil - } - x := 0 - if *v { - x = 1 - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error { - v := *structPointer_BoolVal(base, p.field) - if !v { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, 1) - return nil -} - -func size_bool(p *Properties, base structPointer) int { - v := *structPointer_Bool(base, p.field) - if v == nil { - return 0 - } - return len(p.tagcode) + 1 // each bool takes exactly one byte -} - -func size_proto3_bool(p *Properties, base structPointer) int { - v := *structPointer_BoolVal(base, p.field) - if !v { - return 0 - } - return len(p.tagcode) + 1 // each bool takes exactly one byte -} - -// Encode an int32. -func (o *Buffer) enc_int32(p *Properties, base structPointer) error { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return ErrNil - } - x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error { - v := structPointer_Word32Val(base, p.field) - x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range - if x == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func size_int32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return 0 - } - x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -func size_proto3_int32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32Val(base, p.field) - x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range - if x == 0 { - return 0 - } - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -// Encode a uint32. -// Exactly the same as int32, except for no sign extension. -func (o *Buffer) enc_uint32(p *Properties, base structPointer) error { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return ErrNil - } - x := word32_Get(v) - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error { - v := structPointer_Word32Val(base, p.field) - x := word32Val_Get(v) - if x == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func size_uint32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return 0 - } - x := word32_Get(v) - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -func size_proto3_uint32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32Val(base, p.field) - x := word32Val_Get(v) - if x == 0 { - return 0 - } - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -// Encode an int64. -func (o *Buffer) enc_int64(p *Properties, base structPointer) error { - v := structPointer_Word64(base, p.field) - if word64_IsNil(v) { - return ErrNil - } - x := word64_Get(v) - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, x) - return nil -} - -func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error { - v := structPointer_Word64Val(base, p.field) - x := word64Val_Get(v) - if x == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, x) - return nil -} - -func size_int64(p *Properties, base structPointer) (n int) { - v := structPointer_Word64(base, p.field) - if word64_IsNil(v) { - return 0 - } - x := word64_Get(v) - n += len(p.tagcode) - n += p.valSize(x) - return -} - -func size_proto3_int64(p *Properties, base structPointer) (n int) { - v := structPointer_Word64Val(base, p.field) - x := word64Val_Get(v) - if x == 0 { - return 0 - } - n += len(p.tagcode) - n += p.valSize(x) - return -} - -// Encode a string. -func (o *Buffer) enc_string(p *Properties, base structPointer) error { - v := *structPointer_String(base, p.field) - if v == nil { - return ErrNil - } - x := *v - o.buf = append(o.buf, p.tagcode...) - o.EncodeStringBytes(x) - return nil -} - -func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error { - v := *structPointer_StringVal(base, p.field) - if v == "" { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeStringBytes(v) - return nil -} - -func size_string(p *Properties, base structPointer) (n int) { - v := *structPointer_String(base, p.field) - if v == nil { - return 0 - } - x := *v - n += len(p.tagcode) - n += sizeStringBytes(x) - return -} - -func size_proto3_string(p *Properties, base structPointer) (n int) { - v := *structPointer_StringVal(base, p.field) - if v == "" { - return 0 - } - n += len(p.tagcode) - n += sizeStringBytes(v) - return -} - -// All protocol buffer fields are nillable, but be careful. -func isNil(v reflect.Value) bool { - switch v.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return v.IsNil() - } - return false -} - -// Encode a message struct. -func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error { - var state errorState - structp := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(structp) { - return ErrNil - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, err := m.Marshal() - if err != nil && !state.shouldContinue(err, nil) { - return err - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(data) - return nil - } - - o.buf = append(o.buf, p.tagcode...) - return o.enc_len_struct(p.sprop, structp, &state) -} - -func size_struct_message(p *Properties, base structPointer) int { - structp := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(structp) { - return 0 - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, _ := m.Marshal() - n0 := len(p.tagcode) - n1 := sizeRawBytes(data) - return n0 + n1 - } - - n0 := len(p.tagcode) - n1 := size_struct(p.sprop, structp) - n2 := sizeVarint(uint64(n1)) // size of encoded length - return n0 + n1 + n2 -} - -// Encode a group struct. -func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error { - var state errorState - b := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(b) { - return ErrNil - } - - o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) - err := o.enc_struct(p.sprop, b) - if err != nil && !state.shouldContinue(err, nil) { - return err - } - o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) - return state.err -} - -func size_struct_group(p *Properties, base structPointer) (n int) { - b := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(b) { - return 0 - } - - n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup)) - n += size_struct(p.sprop, b) - n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup)) - return -} - -// Encode a slice of bools ([]bool). -func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return ErrNil - } - for _, x := range s { - o.buf = append(o.buf, p.tagcode...) - v := uint64(0) - if x { - v = 1 - } - p.valEnc(o, v) - } - return nil -} - -func size_slice_bool(p *Properties, base structPointer) int { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return 0 - } - return l * (len(p.tagcode) + 1) // each bool takes exactly one byte -} - -// Encode a slice of bools ([]bool) in packed format. -func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(l)) // each bool takes exactly one byte - for _, x := range s { - v := uint64(0) - if x { - v = 1 - } - p.valEnc(o, v) - } - return nil -} - -func size_slice_packed_bool(p *Properties, base structPointer) (n int) { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return 0 - } - n += len(p.tagcode) - n += sizeVarint(uint64(l)) - n += l // each bool takes exactly one byte - return -} - -// Encode a slice of bytes ([]byte). -func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error { - s := *structPointer_Bytes(base, p.field) - if s == nil { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(s) - return nil -} - -func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error { - s := *structPointer_Bytes(base, p.field) - if len(s) == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(s) - return nil -} - -func size_slice_byte(p *Properties, base structPointer) (n int) { - s := *structPointer_Bytes(base, p.field) - if s == nil { - return 0 - } - n += len(p.tagcode) - n += sizeRawBytes(s) - return -} - -func size_proto3_slice_byte(p *Properties, base structPointer) (n int) { - s := *structPointer_Bytes(base, p.field) - if len(s) == 0 { - return 0 - } - n += len(p.tagcode) - n += sizeRawBytes(s) - return -} - -// Encode a slice of int32s ([]int32). -func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - p.valEnc(o, uint64(x)) - } - return nil -} - -func size_slice_int32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - for i := 0; i < l; i++ { - n += len(p.tagcode) - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - n += p.valSize(uint64(x)) - } - return -} - -// Encode a slice of int32s ([]int32) in packed format. -func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - // TODO: Reuse a Buffer. - buf := NewBuffer(nil) - for i := 0; i < l; i++ { - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - p.valEnc(buf, uint64(x)) - } - - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(len(buf.buf))) - o.buf = append(o.buf, buf.buf...) - return nil -} - -func size_slice_packed_int32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - var bufSize int - for i := 0; i < l; i++ { - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - bufSize += p.valSize(uint64(x)) - } - - n += len(p.tagcode) - n += sizeVarint(uint64(bufSize)) - n += bufSize - return -} - -// Encode a slice of uint32s ([]uint32). -// Exactly the same as int32, except for no sign extension. -func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - x := s.Index(i) - p.valEnc(o, uint64(x)) - } - return nil -} - -func size_slice_uint32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - for i := 0; i < l; i++ { - n += len(p.tagcode) - x := s.Index(i) - n += p.valSize(uint64(x)) - } - return -} - -// Encode a slice of uint32s ([]uint32) in packed format. -// Exactly the same as int32, except for no sign extension. -func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - // TODO: Reuse a Buffer. - buf := NewBuffer(nil) - for i := 0; i < l; i++ { - p.valEnc(buf, uint64(s.Index(i))) - } - - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(len(buf.buf))) - o.buf = append(o.buf, buf.buf...) - return nil -} - -func size_slice_packed_uint32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - var bufSize int - for i := 0; i < l; i++ { - bufSize += p.valSize(uint64(s.Index(i))) - } - - n += len(p.tagcode) - n += sizeVarint(uint64(bufSize)) - n += bufSize - return -} - -// Encode a slice of int64s ([]int64). -func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, s.Index(i)) - } - return nil -} - -func size_slice_int64(p *Properties, base structPointer) (n int) { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - for i := 0; i < l; i++ { - n += len(p.tagcode) - n += p.valSize(s.Index(i)) - } - return -} - -// Encode a slice of int64s ([]int64) in packed format. -func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - // TODO: Reuse a Buffer. - buf := NewBuffer(nil) - for i := 0; i < l; i++ { - p.valEnc(buf, s.Index(i)) - } - - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(len(buf.buf))) - o.buf = append(o.buf, buf.buf...) - return nil -} - -func size_slice_packed_int64(p *Properties, base structPointer) (n int) { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - var bufSize int - for i := 0; i < l; i++ { - bufSize += p.valSize(s.Index(i)) - } - - n += len(p.tagcode) - n += sizeVarint(uint64(bufSize)) - n += bufSize - return -} - -// Encode a slice of slice of bytes ([][]byte). -func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error { - ss := *structPointer_BytesSlice(base, p.field) - l := len(ss) - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(ss[i]) - } - return nil -} - -func size_slice_slice_byte(p *Properties, base structPointer) (n int) { - ss := *structPointer_BytesSlice(base, p.field) - l := len(ss) - if l == 0 { - return 0 - } - n += l * len(p.tagcode) - for i := 0; i < l; i++ { - n += sizeRawBytes(ss[i]) - } - return -} - -// Encode a slice of strings ([]string). -func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error { - ss := *structPointer_StringSlice(base, p.field) - l := len(ss) - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - o.EncodeStringBytes(ss[i]) - } - return nil -} - -func size_slice_string(p *Properties, base structPointer) (n int) { - ss := *structPointer_StringSlice(base, p.field) - l := len(ss) - n += l * len(p.tagcode) - for i := 0; i < l; i++ { - n += sizeStringBytes(ss[i]) - } - return -} - -// Encode a slice of message structs ([]*struct). -func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error { - var state errorState - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - - for i := 0; i < l; i++ { - structp := s.Index(i) - if structPointer_IsNil(structp) { - return errRepeatedHasNil - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, err := m.Marshal() - if err != nil && !state.shouldContinue(err, nil) { - return err - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(data) - continue - } - - o.buf = append(o.buf, p.tagcode...) - err := o.enc_len_struct(p.sprop, structp, &state) - if err != nil && !state.shouldContinue(err, nil) { - if err == ErrNil { - return errRepeatedHasNil - } - return err - } - } - return state.err -} - -func size_slice_struct_message(p *Properties, base structPointer) (n int) { - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - n += l * len(p.tagcode) - for i := 0; i < l; i++ { - structp := s.Index(i) - if structPointer_IsNil(structp) { - return // return the size up to this point - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, _ := m.Marshal() - n += len(p.tagcode) - n += sizeRawBytes(data) - continue - } - - n0 := size_struct(p.sprop, structp) - n1 := sizeVarint(uint64(n0)) // size of encoded length - n += n0 + n1 - } - return -} - -// Encode a slice of group structs ([]*struct). -func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error { - var state errorState - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - - for i := 0; i < l; i++ { - b := s.Index(i) - if structPointer_IsNil(b) { - return errRepeatedHasNil - } - - o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) - - err := o.enc_struct(p.sprop, b) - - if err != nil && !state.shouldContinue(err, nil) { - if err == ErrNil { - return errRepeatedHasNil - } - return err - } - - o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) - } - return state.err -} - -func size_slice_struct_group(p *Properties, base structPointer) (n int) { - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - - n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup)) - n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup)) - for i := 0; i < l; i++ { - b := s.Index(i) - if structPointer_IsNil(b) { - return // return size up to this point - } - - n += size_struct(p.sprop, b) - } - return -} - -// Encode an extension map. -func (o *Buffer) enc_map(p *Properties, base structPointer) error { - v := *structPointer_ExtMap(base, p.field) - if err := encodeExtensionMap(v); err != nil { - return err - } - // Fast-path for common cases: zero or one extensions. - if len(v) <= 1 { - for _, e := range v { - o.buf = append(o.buf, e.enc...) - } - return nil - } - - // Sort keys to provide a deterministic encoding. - keys := make([]int, 0, len(v)) - for k := range v { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, k := range keys { - o.buf = append(o.buf, v[int32(k)].enc...) - } - return nil -} - -func size_map(p *Properties, base structPointer) int { - v := *structPointer_ExtMap(base, p.field) - return sizeExtensionMap(v) -} - -// Encode a map field. -func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { - var state errorState // XXX: or do we need to plumb this through? - - /* - A map defined as - map map_field = N; - is encoded in the same way as - message MapFieldEntry { - key_type key = 1; - value_type value = 2; - } - repeated MapFieldEntry map_field = N; - */ - - v := structPointer_Map(base, p.field, p.mtype).Elem() // map[K]V - if v.Len() == 0 { - return nil - } - - keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) - - enc := func() error { - if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil { - return err - } - if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil { - return err - } - return nil - } - - keys := v.MapKeys() - sort.Sort(mapKeys(keys)) - for _, key := range keys { - val := v.MapIndex(key) - - keycopy.Set(key) - valcopy.Set(val) - - o.buf = append(o.buf, p.tagcode...) - if err := o.enc_len_thing(enc, &state); err != nil { - return err - } - } - return nil -} - -func size_new_map(p *Properties, base structPointer) int { - v := structPointer_Map(base, p.field, p.mtype).Elem() // map[K]V - - keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) - - n := 0 - for _, key := range v.MapKeys() { - val := v.MapIndex(key) - keycopy.Set(key) - valcopy.Set(val) - - // Tag codes for key and val are the responsibility of the sub-sizer. - keysize := p.mkeyprop.size(p.mkeyprop, keybase) - valsize := p.mvalprop.size(p.mvalprop, valbase) - entry := keysize + valsize - // Add on tag code and length of map entry itself. - n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry - } - return n -} - -// mapEncodeScratch returns a new reflect.Value matching the map's value type, -// and a structPointer suitable for passing to an encoder or sizer. -func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) { - // Prepare addressable doubly-indirect placeholders for the key and value types. - // This is needed because the element-type encoders expect **T, but the map iteration produces T. - - keycopy = reflect.New(mapType.Key()).Elem() // addressable K - keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K - keyptr.Set(keycopy.Addr()) // - keybase = toStructPointer(keyptr.Addr()) // **K - - // Value types are more varied and require special handling. - switch mapType.Elem().Kind() { - case reflect.Slice: - // []byte - var dummy []byte - valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte - valbase = toStructPointer(valcopy.Addr()) - case reflect.Ptr: - // message; the generated field type is map[K]*Msg (so V is *Msg), - // so we only need one level of indirection. - valcopy = reflect.New(mapType.Elem()).Elem() // addressable V - valbase = toStructPointer(valcopy.Addr()) - default: - // everything else - valcopy = reflect.New(mapType.Elem()).Elem() // addressable V - valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V - valptr.Set(valcopy.Addr()) // - valbase = toStructPointer(valptr.Addr()) // **V - } - return -} - -// Encode a struct. -func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { - var state errorState - // Encode fields in tag order so that decoders may use optimizations - // that depend on the ordering. - // https://developers.google.com/protocol-buffers/docs/encoding#order - for _, i := range prop.order { - p := prop.Prop[i] - if p.enc != nil { - err := p.enc(o, p, base) - if err != nil { - if err == ErrNil { - if p.Required && state.err == nil { - state.err = &RequiredNotSetError{p.Name} - } - } else if err == errRepeatedHasNil { - // Give more context to nil values in repeated fields. - return errors.New("repeated field " + p.OrigName + " has nil element") - } else if !state.shouldContinue(err, p) { - return err - } - } - } - } - - // Add unrecognized fields at the end. - if prop.unrecField.IsValid() { - v := *structPointer_Bytes(base, prop.unrecField) - if len(v) > 0 { - o.buf = append(o.buf, v...) - } - } - - return state.err -} - -func size_struct(prop *StructProperties, base structPointer) (n int) { - for _, i := range prop.order { - p := prop.Prop[i] - if p.size != nil { - n += p.size(p, base) - } - } - - // Add unrecognized fields at the end. - if prop.unrecField.IsValid() { - v := *structPointer_Bytes(base, prop.unrecField) - n += len(v) - } - - return -} - -var zeroes [20]byte // longer than any conceivable sizeVarint - -// Encode a struct, preceded by its encoded length (as a varint). -func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error { - return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state) -} - -// Encode something, preceded by its encoded length (as a varint). -func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error { - iLen := len(o.buf) - o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length - iMsg := len(o.buf) - err := enc() - if err != nil && !state.shouldContinue(err, nil) { - return err - } - lMsg := len(o.buf) - iMsg - lLen := sizeVarint(uint64(lMsg)) - switch x := lLen - (iMsg - iLen); { - case x > 0: // actual length is x bytes larger than the space we reserved - // Move msg x bytes right. - o.buf = append(o.buf, zeroes[:x]...) - copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) - case x < 0: // actual length is x bytes smaller than the space we reserved - // Move msg x bytes left. - copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) - o.buf = o.buf[:len(o.buf)+x] // x is negative - } - // Encode the length in the reserved space. - o.buf = o.buf[:iLen] - o.EncodeVarint(uint64(lMsg)) - o.buf = o.buf[:len(o.buf)+lMsg] - return state.err -} - -// errorState maintains the first error that occurs and updates that error -// with additional context. -type errorState struct { - err error -} - -// shouldContinue reports whether encoding should continue upon encountering the -// given error. If the error is RequiredNotSetError, shouldContinue returns true -// and, if this is the first appearance of that error, remembers it for future -// reporting. -// -// If prop is not nil, it may update any error with additional context about the -// field with the error. -func (s *errorState) shouldContinue(err error, prop *Properties) bool { - // Ignore unset required fields. - reqNotSet, ok := err.(*RequiredNotSetError) - if !ok { - return false - } - if s.err == nil { - if prop != nil { - err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field} - } - s.err = err - } - return true -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal.go deleted file mode 100644 index d8673a3..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal.go +++ /dev/null @@ -1,256 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Protocol buffer comparison. -// TODO: MessageSet. - -package proto - -import ( - "bytes" - "log" - "reflect" - "strings" -) - -/* -Equal returns true iff protocol buffers a and b are equal. -The arguments must both be pointers to protocol buffer structs. - -Equality is defined in this way: - - Two messages are equal iff they are the same type, - corresponding fields are equal, unknown field sets - are equal, and extensions sets are equal. - - Two set scalar fields are equal iff their values are equal. - If the fields are of a floating-point type, remember that - NaN != x for all x, including NaN. - - Two repeated fields are equal iff their lengths are the same, - and their corresponding elements are equal (a "bytes" field, - although represented by []byte, is not a repeated field) - - Two unset fields are equal. - - Two unknown field sets are equal if their current - encoded state is equal. - - Two extension sets are equal iff they have corresponding - elements that are pairwise equal. - - Every other combination of things are not equal. - -The return value is undefined if a and b are not protocol buffers. -*/ -func Equal(a, b Message) bool { - if a == nil || b == nil { - return a == b - } - v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) - if v1.Type() != v2.Type() { - return false - } - if v1.Kind() == reflect.Ptr { - if v1.IsNil() { - return v2.IsNil() - } - if v2.IsNil() { - return false - } - v1, v2 = v1.Elem(), v2.Elem() - } - if v1.Kind() != reflect.Struct { - return false - } - return equalStruct(v1, v2) -} - -// v1 and v2 are known to have the same type. -func equalStruct(v1, v2 reflect.Value) bool { - for i := 0; i < v1.NumField(); i++ { - f := v1.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - f1, f2 := v1.Field(i), v2.Field(i) - if f.Type.Kind() == reflect.Ptr { - if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { - // both unset - continue - } else if n1 != n2 { - // set/unset mismatch - return false - } - b1, ok := f1.Interface().(raw) - if ok { - b2 := f2.Interface().(raw) - // RawMessage - if !bytes.Equal(b1.Bytes(), b2.Bytes()) { - return false - } - continue - } - f1, f2 = f1.Elem(), f2.Elem() - } - if !equalAny(f1, f2) { - return false - } - } - - if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_extensions") - if !equalExtensions(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { - return false - } - } - - uf := v1.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return true - } - - u1 := uf.Bytes() - u2 := v2.FieldByName("XXX_unrecognized").Bytes() - if !bytes.Equal(u1, u2) { - return false - } - - return true -} - -// v1 and v2 are known to have the same type. -func equalAny(v1, v2 reflect.Value) bool { - if v1.Type() == protoMessageType { - m1, _ := v1.Interface().(Message) - m2, _ := v2.Interface().(Message) - return Equal(m1, m2) - } - switch v1.Kind() { - case reflect.Bool: - return v1.Bool() == v2.Bool() - case reflect.Float32, reflect.Float64: - return v1.Float() == v2.Float() - case reflect.Int32, reflect.Int64: - return v1.Int() == v2.Int() - case reflect.Map: - if v1.Len() != v2.Len() { - return false - } - for _, key := range v1.MapKeys() { - val2 := v2.MapIndex(key) - if !val2.IsValid() { - // This key was not found in the second map. - return false - } - if !equalAny(v1.MapIndex(key), val2) { - return false - } - } - return true - case reflect.Ptr: - return equalAny(v1.Elem(), v2.Elem()) - case reflect.Slice: - if v1.Type().Elem().Kind() == reflect.Uint8 { - // short circuit: []byte - if v1.IsNil() != v2.IsNil() { - return false - } - return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) - } - - if v1.Len() != v2.Len() { - return false - } - for i := 0; i < v1.Len(); i++ { - if !equalAny(v1.Index(i), v2.Index(i)) { - return false - } - } - return true - case reflect.String: - return v1.Interface().(string) == v2.Interface().(string) - case reflect.Struct: - return equalStruct(v1, v2) - case reflect.Uint32, reflect.Uint64: - return v1.Uint() == v2.Uint() - } - - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to compare %v", v1) - return false -} - -// base is the struct type that the extensions are based on. -// em1 and em2 are extension maps. -func equalExtensions(base reflect.Type, em1, em2 map[int32]Extension) bool { - if len(em1) != len(em2) { - return false - } - - for extNum, e1 := range em1 { - e2, ok := em2[extNum] - if !ok { - return false - } - - m1, m2 := e1.value, e2.value - - if m1 != nil && m2 != nil { - // Both are unencoded. - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2)) { - return false - } - continue - } - - // At least one is encoded. To do a semantically correct comparison - // we need to unmarshal them first. - var desc *ExtensionDesc - if m := extensionMaps[base]; m != nil { - desc = m[extNum] - } - if desc == nil { - log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) - continue - } - var err error - if m1 == nil { - m1, err = decodeExtension(e1.enc, desc) - } - if m2 == nil && err == nil { - m2, err = decodeExtension(e2.enc, desc) - } - if err != nil { - // The encoded form is invalid. - log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) - return false - } - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2)) { - return false - } - } - - return true -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal_test.go deleted file mode 100644 index ef60480..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal_test.go +++ /dev/null @@ -1,191 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "testing" - - . "github.com/gogo/protobuf/proto" - pb "github.com/gogo/protobuf/proto/testdata" -) - -// Four identical base messages. -// The init function adds extensions to some of them. -var messageWithoutExtension = &pb.MyMessage{Count: Int32(7)} -var messageWithExtension1a = &pb.MyMessage{Count: Int32(7)} -var messageWithExtension1b = &pb.MyMessage{Count: Int32(7)} -var messageWithExtension2 = &pb.MyMessage{Count: Int32(7)} - -// Two messages with non-message extensions. -var messageWithInt32Extension1 = &pb.MyMessage{Count: Int32(8)} -var messageWithInt32Extension2 = &pb.MyMessage{Count: Int32(8)} - -func init() { - ext1 := &pb.Ext{Data: String("Kirk")} - ext2 := &pb.Ext{Data: String("Picard")} - - // messageWithExtension1a has ext1, but never marshals it. - if err := SetExtension(messageWithExtension1a, pb.E_Ext_More, ext1); err != nil { - panic("SetExtension on 1a failed: " + err.Error()) - } - - // messageWithExtension1b is the unmarshaled form of messageWithExtension1a. - if err := SetExtension(messageWithExtension1b, pb.E_Ext_More, ext1); err != nil { - panic("SetExtension on 1b failed: " + err.Error()) - } - buf, err := Marshal(messageWithExtension1b) - if err != nil { - panic("Marshal of 1b failed: " + err.Error()) - } - messageWithExtension1b.Reset() - if err := Unmarshal(buf, messageWithExtension1b); err != nil { - panic("Unmarshal of 1b failed: " + err.Error()) - } - - // messageWithExtension2 has ext2. - if err := SetExtension(messageWithExtension2, pb.E_Ext_More, ext2); err != nil { - panic("SetExtension on 2 failed: " + err.Error()) - } - - if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(23)); err != nil { - panic("SetExtension on Int32-1 failed: " + err.Error()) - } - if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(24)); err != nil { - panic("SetExtension on Int32-2 failed: " + err.Error()) - } -} - -var EqualTests = []struct { - desc string - a, b Message - exp bool -}{ - {"different types", &pb.GoEnum{}, &pb.GoTestField{}, false}, - {"equal empty", &pb.GoEnum{}, &pb.GoEnum{}, true}, - {"nil vs nil", nil, nil, true}, - {"typed nil vs typed nil", (*pb.GoEnum)(nil), (*pb.GoEnum)(nil), true}, - {"typed nil vs empty", (*pb.GoEnum)(nil), &pb.GoEnum{}, false}, - {"different typed nil", (*pb.GoEnum)(nil), (*pb.GoTestField)(nil), false}, - - {"one set field, one unset field", &pb.GoTestField{Label: String("foo")}, &pb.GoTestField{}, false}, - {"one set field zero, one unset field", &pb.GoTest{Param: Int32(0)}, &pb.GoTest{}, false}, - {"different set fields", &pb.GoTestField{Label: String("foo")}, &pb.GoTestField{Label: String("bar")}, false}, - {"equal set", &pb.GoTestField{Label: String("foo")}, &pb.GoTestField{Label: String("foo")}, true}, - - {"repeated, one set", &pb.GoTest{F_Int32Repeated: []int32{2, 3}}, &pb.GoTest{}, false}, - {"repeated, different length", &pb.GoTest{F_Int32Repeated: []int32{2, 3}}, &pb.GoTest{F_Int32Repeated: []int32{2}}, false}, - {"repeated, different value", &pb.GoTest{F_Int32Repeated: []int32{2}}, &pb.GoTest{F_Int32Repeated: []int32{3}}, false}, - {"repeated, equal", &pb.GoTest{F_Int32Repeated: []int32{2, 4}}, &pb.GoTest{F_Int32Repeated: []int32{2, 4}}, true}, - {"repeated, nil equal nil", &pb.GoTest{F_Int32Repeated: nil}, &pb.GoTest{F_Int32Repeated: nil}, true}, - {"repeated, nil equal empty", &pb.GoTest{F_Int32Repeated: nil}, &pb.GoTest{F_Int32Repeated: []int32{}}, true}, - {"repeated, empty equal nil", &pb.GoTest{F_Int32Repeated: []int32{}}, &pb.GoTest{F_Int32Repeated: nil}, true}, - - { - "nested, different", - &pb.GoTest{RequiredField: &pb.GoTestField{Label: String("foo")}}, - &pb.GoTest{RequiredField: &pb.GoTestField{Label: String("bar")}}, - false, - }, - { - "nested, equal", - &pb.GoTest{RequiredField: &pb.GoTestField{Label: String("wow")}}, - &pb.GoTest{RequiredField: &pb.GoTestField{Label: String("wow")}}, - true, - }, - - {"bytes", &pb.OtherMessage{Value: []byte("foo")}, &pb.OtherMessage{Value: []byte("foo")}, true}, - {"bytes, empty", &pb.OtherMessage{Value: []byte{}}, &pb.OtherMessage{Value: []byte{}}, true}, - {"bytes, empty vs nil", &pb.OtherMessage{Value: []byte{}}, &pb.OtherMessage{Value: nil}, false}, - { - "repeated bytes", - &pb.MyMessage{RepBytes: [][]byte{[]byte("sham"), []byte("wow")}}, - &pb.MyMessage{RepBytes: [][]byte{[]byte("sham"), []byte("wow")}}, - true, - }, - - {"extension vs. no extension", messageWithoutExtension, messageWithExtension1a, false}, - {"extension vs. same extension", messageWithExtension1a, messageWithExtension1b, true}, - {"extension vs. different extension", messageWithExtension1a, messageWithExtension2, false}, - - {"int32 extension vs. itself", messageWithInt32Extension1, messageWithInt32Extension1, true}, - {"int32 extension vs. a different int32", messageWithInt32Extension1, messageWithInt32Extension2, false}, - - { - "message with group", - &pb.MyMessage{ - Count: Int32(1), - Somegroup: &pb.MyMessage_SomeGroup{ - GroupField: Int32(5), - }, - }, - &pb.MyMessage{ - Count: Int32(1), - Somegroup: &pb.MyMessage_SomeGroup{ - GroupField: Int32(5), - }, - }, - true, - }, - - { - "map same", - &pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}}, - &pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}}, - true, - }, - { - "map different entry", - &pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}}, - &pb.MessageWithMap{NameMapping: map[int32]string{2: "Rob"}}, - false, - }, - { - "map different key only", - &pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}}, - &pb.MessageWithMap{NameMapping: map[int32]string{2: "Ken"}}, - false, - }, - { - "map different value only", - &pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}}, - &pb.MessageWithMap{NameMapping: map[int32]string{1: "Rob"}}, - false, - }, -} - -func TestEqual(t *testing.T) { - for _, tc := range EqualTests { - if res := Equal(tc.a, tc.b); res != tc.exp { - t.Errorf("%v: Equal(%v, %v) = %v, want %v", tc.desc, tc.a, tc.b, res, tc.exp) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions.go deleted file mode 100644 index 50e04e5..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions.go +++ /dev/null @@ -1,481 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -/* - * Types and routines for supporting protocol buffer extensions. - */ - -import ( - "errors" - "fmt" - "reflect" - "strconv" - "sync" -) - -// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. -var ErrMissingExtension = errors.New("proto: missing extension") - -// ExtensionRange represents a range of message extensions for a protocol buffer. -// Used in code generated by the protocol compiler. -type ExtensionRange struct { - Start, End int32 // both inclusive -} - -// extendableProto is an interface implemented by any protocol buffer that may be extended. -type extendableProto interface { - Message - ExtensionRangeArray() []ExtensionRange -} - -type extensionsMap interface { - extendableProto - ExtensionMap() map[int32]Extension -} - -type extensionsBytes interface { - extendableProto - GetExtensions() *[]byte -} - -var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem() - -// ExtensionDesc represents an extension specification. -// Used in generated code from the protocol compiler. -type ExtensionDesc struct { - ExtendedType Message // nil pointer to the type that is being extended - ExtensionType interface{} // nil pointer to the extension type - Field int32 // field number - Name string // fully-qualified name of extension, for text formatting - Tag string // protobuf tag style -} - -func (ed *ExtensionDesc) repeated() bool { - t := reflect.TypeOf(ed.ExtensionType) - return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 -} - -// Extension represents an extension in a message. -type Extension struct { - // When an extension is stored in a message using SetExtension - // only desc and value are set. When the message is marshaled - // enc will be set to the encoded form of the message. - // - // When a message is unmarshaled and contains extensions, each - // extension will have only enc set. When such an extension is - // accessed using GetExtension (or GetExtensions) desc and value - // will be set. - desc *ExtensionDesc - value interface{} - enc []byte -} - -// SetRawExtension is for testing only. -func SetRawExtension(base extendableProto, id int32, b []byte) { - if ebase, ok := base.(extensionsMap); ok { - ebase.ExtensionMap()[id] = Extension{enc: b} - } else if ebase, ok := base.(extensionsBytes); ok { - clearExtension(base, id) - ext := ebase.GetExtensions() - *ext = append(*ext, b...) - } else { - panic("unreachable") - } -} - -// isExtensionField returns true iff the given field number is in an extension range. -func isExtensionField(pb extendableProto, field int32) bool { - for _, er := range pb.ExtensionRangeArray() { - if er.Start <= field && field <= er.End { - return true - } - } - return false -} - -// checkExtensionTypes checks that the given extension is valid for pb. -func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { - // Check the extended type. - if a, b := reflect.TypeOf(pb), reflect.TypeOf(extension.ExtendedType); a != b { - return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String()) - } - // Check the range. - if !isExtensionField(pb, extension.Field) { - return errors.New("proto: bad extension number; not in declared ranges") - } - return nil -} - -// extPropKey is sufficient to uniquely identify an extension. -type extPropKey struct { - base reflect.Type - field int32 -} - -var extProp = struct { - sync.RWMutex - m map[extPropKey]*Properties -}{ - m: make(map[extPropKey]*Properties), -} - -func extensionProperties(ed *ExtensionDesc) *Properties { - key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} - - extProp.RLock() - if prop, ok := extProp.m[key]; ok { - extProp.RUnlock() - return prop - } - extProp.RUnlock() - - extProp.Lock() - defer extProp.Unlock() - // Check again. - if prop, ok := extProp.m[key]; ok { - return prop - } - - prop := new(Properties) - prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) - extProp.m[key] = prop - return prop -} - -// encodeExtensionMap encodes any unmarshaled (unencoded) extensions in m. -func encodeExtensionMap(m map[int32]Extension) error { - for k, e := range m { - err := encodeExtension(&e) - if err != nil { - return err - } - m[k] = e - } - return nil -} - -func encodeExtension(e *Extension) error { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - return nil - } - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - et := reflect.TypeOf(e.desc.ExtensionType) - props := extensionProperties(e.desc) - - p := NewBuffer(nil) - // If e.value has type T, the encoder expects a *struct{ X T }. - // Pass a *T with a zero field and hope it all works out. - x := reflect.New(et) - x.Elem().Set(reflect.ValueOf(e.value)) - if err := props.enc(p, props, toStructPointer(x)); err != nil { - return err - } - e.enc = p.buf - return nil -} - -func sizeExtensionMap(m map[int32]Extension) (n int) { - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - et := reflect.TypeOf(e.desc.ExtensionType) - props := extensionProperties(e.desc) - - // If e.value has type T, the encoder expects a *struct{ X T }. - // Pass a *T with a zero field and hope it all works out. - x := reflect.New(et) - x.Elem().Set(reflect.ValueOf(e.value)) - n += props.size(props, toStructPointer(x)) - } - return -} - -// HasExtension returns whether the given extension is present in pb. -func HasExtension(pb extendableProto, extension *ExtensionDesc) bool { - // TODO: Check types, field numbers, etc.? - if epb, doki := pb.(extensionsMap); doki { - _, ok := epb.ExtensionMap()[extension.Field] - return ok - } else if epb, doki := pb.(extensionsBytes); doki { - ext := epb.GetExtensions() - buf := *ext - o := 0 - for o < len(buf) { - tag, n := DecodeVarint(buf[o:]) - fieldNum := int32(tag >> 3) - if int32(fieldNum) == extension.Field { - return true - } - wireType := int(tag & 0x7) - o += n - l, err := size(buf[o:], wireType) - if err != nil { - return false - } - o += l - } - return false - } - panic("unreachable") -} - -func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int { - ext := pb.GetExtensions() - for offset < len(*ext) { - tag, n1 := DecodeVarint((*ext)[offset:]) - fieldNum := int32(tag >> 3) - wireType := int(tag & 0x7) - n2, err := size((*ext)[offset+n1:], wireType) - if err != nil { - panic(err) - } - newOffset := offset + n1 + n2 - if fieldNum == theFieldNum { - *ext = append((*ext)[:offset], (*ext)[newOffset:]...) - return offset - } - offset = newOffset - } - return -1 -} - -func clearExtension(pb extendableProto, fieldNum int32) { - if epb, doki := pb.(extensionsMap); doki { - delete(epb.ExtensionMap(), fieldNum) - } else if epb, doki := pb.(extensionsBytes); doki { - offset := 0 - for offset != -1 { - offset = deleteExtension(epb, fieldNum, offset) - } - } else { - panic("unreachable") - } -} - -// ClearExtension removes the given extension from pb. -func ClearExtension(pb extendableProto, extension *ExtensionDesc) { - // TODO: Check types, field numbers, etc.? - clearExtension(pb, extension.Field) -} - -// GetExtension parses and returns the given extension of pb. -// If the extension is not present it returns ErrMissingExtension. -func GetExtension(pb extendableProto, extension *ExtensionDesc) (interface{}, error) { - if err := checkExtensionTypes(pb, extension); err != nil { - return nil, err - } - - if epb, doki := pb.(extensionsMap); doki { - emap := epb.ExtensionMap() - e, ok := emap[extension.Field] - if !ok { - return nil, ErrMissingExtension - } - if e.value != nil { - // Already decoded. Check the descriptor, though. - if e.desc != extension { - // This shouldn't happen. If it does, it means that - // GetExtension was called twice with two different - // descriptors with the same field number. - return nil, errors.New("proto: descriptor conflict") - } - return e.value, nil - } - - v, err := decodeExtension(e.enc, extension) - if err != nil { - return nil, err - } - - // Remember the decoded version and drop the encoded version. - // That way it is safe to mutate what we return. - e.value = v - e.desc = extension - e.enc = nil - emap[extension.Field] = e - return e.value, nil - } else if epb, doki := pb.(extensionsBytes); doki { - ext := epb.GetExtensions() - o := 0 - for o < len(*ext) { - tag, n := DecodeVarint((*ext)[o:]) - fieldNum := int32(tag >> 3) - wireType := int(tag & 0x7) - l, err := size((*ext)[o+n:], wireType) - if err != nil { - return nil, err - } - if int32(fieldNum) == extension.Field { - v, err := decodeExtension((*ext)[o:o+n+l], extension) - if err != nil { - return nil, err - } - return v, nil - } - o += n + l - } - } - panic("unreachable") -} - -// decodeExtension decodes an extension encoded in b. -func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { - o := NewBuffer(b) - - t := reflect.TypeOf(extension.ExtensionType) - rep := extension.repeated() - - props := extensionProperties(extension) - - // t is a pointer to a struct, pointer to basic type or a slice. - // Allocate a "field" to store the pointer/slice itself; the - // pointer/slice will be stored here. We pass - // the address of this field to props.dec. - // This passes a zero field and a *t and lets props.dec - // interpret it as a *struct{ x t }. - value := reflect.New(t).Elem() - - for { - // Discard wire type and field number varint. It isn't needed. - if _, err := o.DecodeVarint(); err != nil { - return nil, err - } - - if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil { - return nil, err - } - - if !rep || o.index >= len(o.buf) { - break - } - } - return value.Interface(), nil -} - -// GetExtensions returns a slice of the extensions present in pb that are also listed in es. -// The returned slice has the same length as es; missing extensions will appear as nil elements. -func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, ok := pb.(extendableProto) - if !ok { - err = errors.New("proto: not an extendable proto") - return - } - extensions = make([]interface{}, len(es)) - for i, e := range es { - extensions[i], err = GetExtension(epb, e) - if err == ErrMissingExtension { - err = nil - } - if err != nil { - return - } - } - return -} - -// SetExtension sets the specified extension of pb to the specified value. -func SetExtension(pb extendableProto, extension *ExtensionDesc, value interface{}) error { - if err := checkExtensionTypes(pb, extension); err != nil { - return err - } - typ := reflect.TypeOf(extension.ExtensionType) - if typ != reflect.TypeOf(value) { - return errors.New("proto: bad extension value type") - } - // nil extension values need to be caught early, because the - // encoder can't distinguish an ErrNil due to a nil extension - // from an ErrNil due to a missing field. Extensions are - // always optional, so the encoder would just swallow the error - // and drop all the extensions from the encoded message. - if reflect.ValueOf(value).IsNil() { - return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) - } - return setExtension(pb, extension, value) -} - -func setExtension(pb extendableProto, extension *ExtensionDesc, value interface{}) error { - if epb, doki := pb.(extensionsMap); doki { - epb.ExtensionMap()[extension.Field] = Extension{desc: extension, value: value} - } else if epb, doki := pb.(extensionsBytes); doki { - ClearExtension(pb, extension) - ext := epb.GetExtensions() - et := reflect.TypeOf(extension.ExtensionType) - props := extensionProperties(extension) - p := NewBuffer(nil) - x := reflect.New(et) - x.Elem().Set(reflect.ValueOf(value)) - if err := props.enc(p, props, toStructPointer(x)); err != nil { - return err - } - *ext = append(*ext, p.buf...) - } - return nil -} - -// A global registry of extensions. -// The generated code will register the generated descriptors by calling RegisterExtension. - -var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) - -// RegisterExtension is called from the generated code. -func RegisterExtension(desc *ExtensionDesc) { - st := reflect.TypeOf(desc.ExtendedType).Elem() - m := extensionMaps[st] - if m == nil { - m = make(map[int32]*ExtensionDesc) - extensionMaps[st] = m - } - if _, ok := m[desc.Field]; ok { - panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) - } - m[desc.Field] = desc -} - -// RegisteredExtensions returns a map of the registered extensions of a -// protocol buffer struct, indexed by the extension number. -// The argument pb should be a nil pointer to the struct type. -func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { - return extensionMaps[reflect.TypeOf(pb).Elem()] -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions_gogo.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions_gogo.go deleted file mode 100644 index bd55fb6..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions_gogo.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "bytes" - "errors" - "fmt" - "reflect" - "sort" - "strings" -) - -func GetBoolExtension(pb extendableProto, extension *ExtensionDesc, ifnotset bool) bool { - if reflect.ValueOf(pb).IsNil() { - return ifnotset - } - value, err := GetExtension(pb, extension) - if err != nil { - return ifnotset - } - if value == nil { - return ifnotset - } - if value.(*bool) == nil { - return ifnotset - } - return *(value.(*bool)) -} - -func (this *Extension) Equal(that *Extension) bool { - return bytes.Equal(this.enc, that.enc) -} - -func SizeOfExtensionMap(m map[int32]Extension) (n int) { - return sizeExtensionMap(m) -} - -type sortableMapElem struct { - field int32 - ext Extension -} - -func newSortableExtensionsFromMap(m map[int32]Extension) sortableExtensions { - s := make(sortableExtensions, 0, len(m)) - for k, v := range m { - s = append(s, &sortableMapElem{field: k, ext: v}) - } - return s -} - -type sortableExtensions []*sortableMapElem - -func (this sortableExtensions) Len() int { return len(this) } - -func (this sortableExtensions) Swap(i, j int) { this[i], this[j] = this[j], this[i] } - -func (this sortableExtensions) Less(i, j int) bool { return this[i].field < this[j].field } - -func (this sortableExtensions) String() string { - sort.Sort(this) - ss := make([]string, len(this)) - for i := range this { - ss[i] = fmt.Sprintf("%d: %v", this[i].field, this[i].ext) - } - return "map[" + strings.Join(ss, ",") + "]" -} - -func StringFromExtensionsMap(m map[int32]Extension) string { - return newSortableExtensionsFromMap(m).String() -} - -func StringFromExtensionsBytes(ext []byte) string { - m, err := BytesToExtensionsMap(ext) - if err != nil { - panic(err) - } - return StringFromExtensionsMap(m) -} - -func EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err error) { - if err := encodeExtensionMap(m); err != nil { - return 0, err - } - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - for _, k := range keys { - n += copy(data[n:], m[int32(k)].enc) - } - return n, nil -} - -func GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) { - if m[id].value == nil || m[id].desc == nil { - return m[id].enc, nil - } - if err := encodeExtensionMap(m); err != nil { - return nil, err - } - return m[id].enc, nil -} - -func size(buf []byte, wire int) (int, error) { - switch wire { - case WireVarint: - _, n := DecodeVarint(buf) - return n, nil - case WireFixed64: - return 8, nil - case WireBytes: - v, n := DecodeVarint(buf) - return int(v) + n, nil - case WireFixed32: - return 4, nil - case WireStartGroup: - offset := 0 - for { - u, n := DecodeVarint(buf[offset:]) - fwire := int(u & 0x7) - offset += n - if fwire == WireEndGroup { - return offset, nil - } - s, err := size(buf[offset:], wire) - if err != nil { - return 0, err - } - offset += s - } - } - return 0, fmt.Errorf("proto: can't get size for unknown wire type %d", wire) -} - -func BytesToExtensionsMap(buf []byte) (map[int32]Extension, error) { - m := make(map[int32]Extension) - i := 0 - for i < len(buf) { - tag, n := DecodeVarint(buf[i:]) - if n <= 0 { - return nil, fmt.Errorf("unable to decode varint") - } - fieldNum := int32(tag >> 3) - wireType := int(tag & 0x7) - l, err := size(buf[i+n:], wireType) - if err != nil { - return nil, err - } - end := i + int(l) + n - m[int32(fieldNum)] = Extension{enc: buf[i:end]} - i = end - } - return m, nil -} - -func NewExtension(e []byte) Extension { - ee := Extension{enc: make([]byte, len(e))} - copy(ee.enc, e) - return ee -} - -func (this Extension) GoString() string { - if this.enc == nil { - if err := encodeExtension(&this); err != nil { - panic(err) - } - } - return fmt.Sprintf("proto.NewExtension(%#v)", this.enc) -} - -func SetUnsafeExtension(pb extendableProto, fieldNum int32, value interface{}) error { - typ := reflect.TypeOf(pb).Elem() - ext, ok := extensionMaps[typ] - if !ok { - return fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String()) - } - desc, ok := ext[fieldNum] - if !ok { - return errors.New("proto: bad extension number; not in declared ranges") - } - return setExtension(pb, desc, value) -} - -func GetUnsafeExtension(pb extendableProto, fieldNum int32) (interface{}, error) { - typ := reflect.TypeOf(pb).Elem() - ext, ok := extensionMaps[typ] - if !ok { - return nil, fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String()) - } - desc, ok := ext[fieldNum] - if !ok { - return nil, fmt.Errorf("unregistered field number %d", fieldNum) - } - return GetExtension(pb, desc) -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions_test.go deleted file mode 100644 index f551927..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/extensions_test.go +++ /dev/null @@ -1,153 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2014 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "testing" - - "github.com/gogo/protobuf/proto" - pb "github.com/gogo/protobuf/proto/testdata" -) - -func TestGetExtensionsWithMissingExtensions(t *testing.T) { - msg := &pb.MyMessage{} - ext1 := &pb.Ext{} - if err := proto.SetExtension(msg, pb.E_Ext_More, ext1); err != nil { - t.Fatalf("Could not set ext1: %s", ext1) - } - exts, err := proto.GetExtensions(msg, []*proto.ExtensionDesc{ - pb.E_Ext_More, - pb.E_Ext_Text, - }) - if err != nil { - t.Fatalf("GetExtensions() failed: %s", err) - } - if exts[0] != ext1 { - t.Errorf("ext1 not in returned extensions: %T %v", exts[0], exts[0]) - } - if exts[1] != nil { - t.Errorf("ext2 in returned extensions: %T %v", exts[1], exts[1]) - } -} - -func TestGetExtensionStability(t *testing.T) { - check := func(m *pb.MyMessage) bool { - ext1, err := proto.GetExtension(m, pb.E_Ext_More) - if err != nil { - t.Fatalf("GetExtension() failed: %s", err) - } - ext2, err := proto.GetExtension(m, pb.E_Ext_More) - if err != nil { - t.Fatalf("GetExtension() failed: %s", err) - } - return ext1 == ext2 - } - msg := &pb.MyMessage{Count: proto.Int32(4)} - ext0 := &pb.Ext{} - if err := proto.SetExtension(msg, pb.E_Ext_More, ext0); err != nil { - t.Fatalf("Could not set ext1: %s", ext0) - } - if !check(msg) { - t.Errorf("GetExtension() not stable before marshaling") - } - bb, err := proto.Marshal(msg) - if err != nil { - t.Fatalf("Marshal() failed: %s", err) - } - msg1 := &pb.MyMessage{} - err = proto.Unmarshal(bb, msg1) - if err != nil { - t.Fatalf("Unmarshal() failed: %s", err) - } - if !check(msg1) { - t.Errorf("GetExtension() not stable after unmarshaling") - } -} - -func TestExtensionsRoundTrip(t *testing.T) { - msg := &pb.MyMessage{} - ext1 := &pb.Ext{ - Data: proto.String("hi"), - } - ext2 := &pb.Ext{ - Data: proto.String("there"), - } - exists := proto.HasExtension(msg, pb.E_Ext_More) - if exists { - t.Error("Extension More present unexpectedly") - } - if err := proto.SetExtension(msg, pb.E_Ext_More, ext1); err != nil { - t.Error(err) - } - if err := proto.SetExtension(msg, pb.E_Ext_More, ext2); err != nil { - t.Error(err) - } - e, err := proto.GetExtension(msg, pb.E_Ext_More) - if err != nil { - t.Error(err) - } - x, ok := e.(*pb.Ext) - if !ok { - t.Errorf("e has type %T, expected testdata.Ext", e) - } else if *x.Data != "there" { - t.Errorf("SetExtension failed to overwrite, got %+v, not 'there'", x) - } - proto.ClearExtension(msg, pb.E_Ext_More) - if _, err = proto.GetExtension(msg, pb.E_Ext_More); err != proto.ErrMissingExtension { - t.Errorf("got %v, expected ErrMissingExtension", e) - } - if _, err := proto.GetExtension(msg, pb.E_X215); err == nil { - t.Error("expected bad extension error, got nil") - } - if err := proto.SetExtension(msg, pb.E_X215, 12); err == nil { - t.Error("expected extension err") - } - if err := proto.SetExtension(msg, pb.E_Ext_More, 12); err == nil { - t.Error("expected some sort of type mismatch error, got nil") - } -} - -func TestNilExtension(t *testing.T) { - msg := &pb.MyMessage{ - Count: proto.Int32(1), - } - if err := proto.SetExtension(msg, pb.E_Ext_Text, proto.String("hello")); err != nil { - t.Fatal(err) - } - if err := proto.SetExtension(msg, pb.E_Ext_More, (*pb.Ext)(nil)); err == nil { - t.Error("expected SetExtension to fail due to a nil extension") - } else if want := "proto: SetExtension called with nil value of type *testdata.Ext"; err.Error() != want { - t.Errorf("expected error %v, got %v", want, err) - } - // Note: if the behavior of Marshal is ever changed to ignore nil extensions, update - // this test to verify that E_Ext_Text is properly propagated through marshal->unmarshal. -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib.go deleted file mode 100644 index 9e254e5..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib.go +++ /dev/null @@ -1,790 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* - Package proto converts data structures to and from the wire format of - protocol buffers. It works in concert with the Go source code generated - for .proto files by the protocol compiler. - - A summary of the properties of the protocol buffer interface - for a protocol buffer variable v: - - - Names are turned from camel_case to CamelCase for export. - - There are no methods on v to set fields; just treat - them as structure fields. - - There are getters that return a field's value if set, - and return the field's default value if unset. - The getters work even if the receiver is a nil message. - - The zero value for a struct is its correct initialization state. - All desired fields must be set before marshaling. - - A Reset() method will restore a protobuf struct to its zero state. - - Non-repeated fields are pointers to the values; nil means unset. - That is, optional or required field int32 f becomes F *int32. - - Repeated fields are slices. - - Helper functions are available to aid the setting of fields. - msg.Foo = proto.String("hello") // set field - - Constants are defined to hold the default values of all fields that - have them. They have the form Default_StructName_FieldName. - Because the getter methods handle defaulted values, - direct use of these constants should be rare. - - Enums are given type names and maps from names to values. - Enum values are prefixed by the enclosing message's name, or by the - enum's type name if it is a top-level enum. Enum types have a String - method, and a Enum method to assist in message construction. - - Nested messages, groups and enums have type names prefixed with the name of - the surrounding message type. - - Extensions are given descriptor names that start with E_, - followed by an underscore-delimited list of the nested messages - that contain it (if any) followed by the CamelCased name of the - extension field itself. HasExtension, ClearExtension, GetExtension - and SetExtension are functions for manipulating extensions. - - Marshal and Unmarshal are functions to encode and decode the wire format. - - The simplest way to describe this is to see an example. - Given file test.proto, containing - - package example; - - enum FOO { X = 17; } - - message Test { - required string label = 1; - optional int32 type = 2 [default=77]; - repeated int64 reps = 3; - optional group OptionalGroup = 4 { - required string RequiredField = 5; - } - } - - The resulting file, test.pb.go, is: - - package example - - import proto "github.com/gogo/protobuf/proto" - import math "math" - - type FOO int32 - const ( - FOO_X FOO = 17 - ) - var FOO_name = map[int32]string{ - 17: "X", - } - var FOO_value = map[string]int32{ - "X": 17, - } - - func (x FOO) Enum() *FOO { - p := new(FOO) - *p = x - return p - } - func (x FOO) String() string { - return proto.EnumName(FOO_name, int32(x)) - } - func (x *FOO) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FOO_value, data) - if err != nil { - return err - } - *x = FOO(value) - return nil - } - - type Test struct { - Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` - Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` - Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` - Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - XXX_unrecognized []byte `json:"-"` - } - func (m *Test) Reset() { *m = Test{} } - func (m *Test) String() string { return proto.CompactTextString(m) } - func (*Test) ProtoMessage() {} - const Default_Test_Type int32 = 77 - - func (m *Test) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" - } - - func (m *Test) GetType() int32 { - if m != nil && m.Type != nil { - return *m.Type - } - return Default_Test_Type - } - - func (m *Test) GetOptionalgroup() *Test_OptionalGroup { - if m != nil { - return m.Optionalgroup - } - return nil - } - - type Test_OptionalGroup struct { - RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` - } - func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } - func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } - - func (m *Test_OptionalGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" - } - - func init() { - proto.RegisterEnum("example.FOO", FOO_name, FOO_value) - } - - To create and play with a Test object: - - package main - - import ( - "log" - - "github.com/gogo/protobuf/proto" - pb "./example.pb" - ) - - func main() { - test := &pb.Test{ - Label: proto.String("hello"), - Type: proto.Int32(17), - Optionalgroup: &pb.Test_OptionalGroup{ - RequiredField: proto.String("good bye"), - }, - } - data, err := proto.Marshal(test) - if err != nil { - log.Fatal("marshaling error: ", err) - } - newTest := &pb.Test{} - err = proto.Unmarshal(data, newTest) - if err != nil { - log.Fatal("unmarshaling error: ", err) - } - // Now test and newTest contain the same data. - if test.GetLabel() != newTest.GetLabel() { - log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) - } - // etc. - } -*/ -package proto - -import ( - "encoding/json" - "fmt" - "log" - "reflect" - "strconv" - "sync" -) - -// Message is implemented by generated protocol buffer messages. -type Message interface { - Reset() - String() string - ProtoMessage() -} - -// Stats records allocation details about the protocol buffer encoders -// and decoders. Useful for tuning the library itself. -type Stats struct { - Emalloc uint64 // mallocs in encode - Dmalloc uint64 // mallocs in decode - Encode uint64 // number of encodes - Decode uint64 // number of decodes - Chit uint64 // number of cache hits - Cmiss uint64 // number of cache misses - Size uint64 // number of sizes -} - -// Set to true to enable stats collection. -const collectStats = false - -var stats Stats - -// GetStats returns a copy of the global Stats structure. -func GetStats() Stats { return stats } - -// A Buffer is a buffer manager for marshaling and unmarshaling -// protocol buffers. It may be reused between invocations to -// reduce memory usage. It is not necessary to use a Buffer; -// the global functions Marshal and Unmarshal create a -// temporary Buffer and are fine for most applications. -type Buffer struct { - buf []byte // encode/decode byte stream - index int // write point - - // pools of basic types to amortize allocation. - bools []bool - uint32s []uint32 - uint64s []uint64 - - // extra pools, only used with pointer_reflect.go - int32s []int32 - int64s []int64 - float32s []float32 - float64s []float64 -} - -// NewBuffer allocates a new Buffer and initializes its internal data to -// the contents of the argument slice. -func NewBuffer(e []byte) *Buffer { - return &Buffer{buf: e} -} - -// Reset resets the Buffer, ready for marshaling a new protocol buffer. -func (p *Buffer) Reset() { - p.buf = p.buf[0:0] // for reading/writing - p.index = 0 // for reading -} - -// SetBuf replaces the internal buffer with the slice, -// ready for unmarshaling the contents of the slice. -func (p *Buffer) SetBuf(s []byte) { - p.buf = s - p.index = 0 -} - -// Bytes returns the contents of the Buffer. -func (p *Buffer) Bytes() []byte { return p.buf } - -/* - * Helper routines for simplifying the creation of optional fields of basic type. - */ - -// Bool is a helper routine that allocates a new bool value -// to store v and returns a pointer to it. -func Bool(v bool) *bool { - return &v -} - -// Int32 is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it. -func Int32(v int32) *int32 { - return &v -} - -// Int is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it, but unlike Int32 -// its argument value is an int. -func Int(v int) *int32 { - p := new(int32) - *p = int32(v) - return p -} - -// Int64 is a helper routine that allocates a new int64 value -// to store v and returns a pointer to it. -func Int64(v int64) *int64 { - return &v -} - -// Float32 is a helper routine that allocates a new float32 value -// to store v and returns a pointer to it. -func Float32(v float32) *float32 { - return &v -} - -// Float64 is a helper routine that allocates a new float64 value -// to store v and returns a pointer to it. -func Float64(v float64) *float64 { - return &v -} - -// Uint32 is a helper routine that allocates a new uint32 value -// to store v and returns a pointer to it. -func Uint32(v uint32) *uint32 { - return &v -} - -// Uint64 is a helper routine that allocates a new uint64 value -// to store v and returns a pointer to it. -func Uint64(v uint64) *uint64 { - return &v -} - -// String is a helper routine that allocates a new string value -// to store v and returns a pointer to it. -func String(v string) *string { - return &v -} - -// EnumName is a helper function to simplify printing protocol buffer enums -// by name. Given an enum map and a value, it returns a useful string. -func EnumName(m map[int32]string, v int32) string { - s, ok := m[v] - if ok { - return s - } - return strconv.Itoa(int(v)) -} - -// UnmarshalJSONEnum is a helper function to simplify recovering enum int values -// from their JSON-encoded representation. Given a map from the enum's symbolic -// names to its int values, and a byte buffer containing the JSON-encoded -// value, it returns an int32 that can be cast to the enum type by the caller. -// -// The function can deal with both JSON representations, numeric and symbolic. -func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { - if data[0] == '"' { - // New style: enums are strings. - var repr string - if err := json.Unmarshal(data, &repr); err != nil { - return -1, err - } - val, ok := m[repr] - if !ok { - return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) - } - return val, nil - } - // Old style: enums are ints. - var val int32 - if err := json.Unmarshal(data, &val); err != nil { - return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) - } - return val, nil -} - -// DebugPrint dumps the encoded data in b in a debugging format with a header -// including the string s. Used in testing but made available for general debugging. -func (o *Buffer) DebugPrint(s string, b []byte) { - var u uint64 - - obuf := o.buf - index := o.index - o.buf = b - o.index = 0 - depth := 0 - - fmt.Printf("\n--- %s ---\n", s) - -out: - for { - for i := 0; i < depth; i++ { - fmt.Print(" ") - } - - index := o.index - if index == len(o.buf) { - break - } - - op, err := o.DecodeVarint() - if err != nil { - fmt.Printf("%3d: fetching op err %v\n", index, err) - break out - } - tag := op >> 3 - wire := op & 7 - - switch wire { - default: - fmt.Printf("%3d: t=%3d unknown wire=%d\n", - index, tag, wire) - break out - - case WireBytes: - var r []byte - - r, err = o.DecodeRawBytes(false) - if err != nil { - break out - } - fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) - if len(r) <= 6 { - for i := 0; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } else { - for i := 0; i < 3; i++ { - fmt.Printf(" %.2x", r[i]) - } - fmt.Printf(" ..") - for i := len(r) - 3; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } - fmt.Printf("\n") - - case WireFixed32: - u, err = o.DecodeFixed32() - if err != nil { - fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) - - case WireFixed64: - u, err = o.DecodeFixed64() - if err != nil { - fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) - break - - case WireVarint: - u, err = o.DecodeVarint() - if err != nil { - fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) - - case WireStartGroup: - if err != nil { - fmt.Printf("%3d: t=%3d start err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d start\n", index, tag) - depth++ - - case WireEndGroup: - depth-- - if err != nil { - fmt.Printf("%3d: t=%3d end err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d end\n", index, tag) - } - } - - if depth != 0 { - fmt.Printf("%3d: start-end not balanced %d\n", o.index, depth) - } - fmt.Printf("\n") - - o.buf = obuf - o.index = index -} - -// SetDefaults sets unset protocol buffer fields to their default values. -// It only modifies fields that are both unset and have defined defaults. -// It recursively sets default values in any non-nil sub-messages. -func SetDefaults(pb Message) { - setDefaults(reflect.ValueOf(pb), true, false) -} - -// v is a pointer to a struct. -func setDefaults(v reflect.Value, recur, zeros bool) { - v = v.Elem() - - defaultMu.RLock() - dm, ok := defaults[v.Type()] - defaultMu.RUnlock() - if !ok { - dm = buildDefaultMessage(v.Type()) - defaultMu.Lock() - defaults[v.Type()] = dm - defaultMu.Unlock() - } - - for _, sf := range dm.scalars { - f := v.Field(sf.index) - if !f.IsNil() { - // field already set - continue - } - dv := sf.value - if dv == nil && !zeros { - // no explicit default, and don't want to set zeros - continue - } - fptr := f.Addr().Interface() // **T - // TODO: Consider batching the allocations we do here. - switch sf.kind { - case reflect.Bool: - b := new(bool) - if dv != nil { - *b = dv.(bool) - } - *(fptr.(**bool)) = b - case reflect.Float32: - f := new(float32) - if dv != nil { - *f = dv.(float32) - } - *(fptr.(**float32)) = f - case reflect.Float64: - f := new(float64) - if dv != nil { - *f = dv.(float64) - } - *(fptr.(**float64)) = f - case reflect.Int32: - // might be an enum - if ft := f.Type(); ft != int32PtrType { - // enum - f.Set(reflect.New(ft.Elem())) - if dv != nil { - f.Elem().SetInt(int64(dv.(int32))) - } - } else { - // int32 field - i := new(int32) - if dv != nil { - *i = dv.(int32) - } - *(fptr.(**int32)) = i - } - case reflect.Int64: - i := new(int64) - if dv != nil { - *i = dv.(int64) - } - *(fptr.(**int64)) = i - case reflect.String: - s := new(string) - if dv != nil { - *s = dv.(string) - } - *(fptr.(**string)) = s - case reflect.Uint8: - // exceptional case: []byte - var b []byte - if dv != nil { - db := dv.([]byte) - b = make([]byte, len(db)) - copy(b, db) - } else { - b = []byte{} - } - *(fptr.(*[]byte)) = b - case reflect.Uint32: - u := new(uint32) - if dv != nil { - *u = dv.(uint32) - } - *(fptr.(**uint32)) = u - case reflect.Uint64: - u := new(uint64) - if dv != nil { - *u = dv.(uint64) - } - *(fptr.(**uint64)) = u - default: - log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) - } - } - - for _, ni := range dm.nested { - f := v.Field(ni) - // f is *T or []*T or map[T]*T - switch f.Kind() { - case reflect.Ptr: - if f.IsNil() { - continue - } - setDefaults(f, recur, zeros) - - case reflect.Slice: - for i := 0; i < f.Len(); i++ { - e := f.Index(i) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - - case reflect.Map: - for _, k := range f.MapKeys() { - e := f.MapIndex(k) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - } - } -} - -var ( - // defaults maps a protocol buffer struct type to a slice of the fields, - // with its scalar fields set to their proto-declared non-zero default values. - defaultMu sync.RWMutex - defaults = make(map[reflect.Type]defaultMessage) - - int32PtrType = reflect.TypeOf((*int32)(nil)) -) - -// defaultMessage represents information about the default values of a message. -type defaultMessage struct { - scalars []scalarField - nested []int // struct field index of nested messages -} - -type scalarField struct { - index int // struct field index - kind reflect.Kind // element type (the T in *T or []T) - value interface{} // the proto-declared default value, or nil -} - -// t is a struct type. -func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { - sprop := GetProperties(t) - for _, prop := range sprop.Prop { - fi, ok := sprop.decoderTags.get(prop.Tag) - if !ok { - // XXX_unrecognized - continue - } - ft := t.Field(fi).Type - - var canHaveDefault, nestedMessage bool - switch ft.Kind() { - case reflect.Ptr: - if ft.Elem().Kind() == reflect.Struct { - nestedMessage = true - } else { - canHaveDefault = true // proto2 scalar field - } - - case reflect.Slice: - switch ft.Elem().Kind() { - case reflect.Ptr: - nestedMessage = true // repeated message - case reflect.Uint8: - canHaveDefault = true // bytes field - } - - case reflect.Map: - if ft.Elem().Kind() == reflect.Ptr { - nestedMessage = true // map with message values - } - } - - if !canHaveDefault { - if nestedMessage { - dm.nested = append(dm.nested, fi) - } - continue - } - - sf := scalarField{ - index: fi, - kind: ft.Elem().Kind(), - } - - // scalar fields without defaults - if !prop.HasDefault { - dm.scalars = append(dm.scalars, sf) - continue - } - - // a scalar field: either *T or []byte - switch ft.Elem().Kind() { - case reflect.Bool: - x, err := strconv.ParseBool(prop.Default) - if err != nil { - log.Printf("proto: bad default bool %q: %v", prop.Default, err) - continue - } - sf.value = x - case reflect.Float32: - x, err := strconv.ParseFloat(prop.Default, 32) - if err != nil { - log.Printf("proto: bad default float32 %q: %v", prop.Default, err) - continue - } - sf.value = float32(x) - case reflect.Float64: - x, err := strconv.ParseFloat(prop.Default, 64) - if err != nil { - log.Printf("proto: bad default float64 %q: %v", prop.Default, err) - continue - } - sf.value = x - case reflect.Int32: - x, err := strconv.ParseInt(prop.Default, 10, 32) - if err != nil { - log.Printf("proto: bad default int32 %q: %v", prop.Default, err) - continue - } - sf.value = int32(x) - case reflect.Int64: - x, err := strconv.ParseInt(prop.Default, 10, 64) - if err != nil { - log.Printf("proto: bad default int64 %q: %v", prop.Default, err) - continue - } - sf.value = x - case reflect.String: - sf.value = prop.Default - case reflect.Uint8: - // []byte (not *uint8) - sf.value = []byte(prop.Default) - case reflect.Uint32: - x, err := strconv.ParseUint(prop.Default, 10, 32) - if err != nil { - log.Printf("proto: bad default uint32 %q: %v", prop.Default, err) - continue - } - sf.value = uint32(x) - case reflect.Uint64: - x, err := strconv.ParseUint(prop.Default, 10, 64) - if err != nil { - log.Printf("proto: bad default uint64 %q: %v", prop.Default, err) - continue - } - sf.value = x - default: - log.Printf("proto: unhandled def kind %v", ft.Elem().Kind()) - continue - } - - dm.scalars = append(dm.scalars, sf) - } - - return dm -} - -// Map fields may have key types of non-float scalars, strings and enums. -// The easiest way to sort them in some deterministic order is to use fmt. -// If this turns out to be inefficient we can always consider other options, -// such as doing a Schwartzian transform. - -type mapKeys []reflect.Value - -func (s mapKeys) Len() int { return len(s) } -func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s mapKeys) Less(i, j int) bool { - return fmt.Sprint(s[i].Interface()) < fmt.Sprint(s[j].Interface()) -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set_test.go deleted file mode 100644 index 7c29bcc..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2014 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "bytes" - "testing" -) - -func TestUnmarshalMessageSetWithDuplicate(t *testing.T) { - // Check that a repeated message set entry will be concatenated. - in := &MessageSet{ - Item: []*_MessageSet_Item{ - {TypeId: Int32(12345), Message: []byte("hoo")}, - {TypeId: Int32(12345), Message: []byte("hah")}, - }, - } - b, err := Marshal(in) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - t.Logf("Marshaled bytes: %q", b) - - m := make(map[int32]Extension) - if err := UnmarshalMessageSet(b, m); err != nil { - t.Fatalf("UnmarshalMessageSet: %v", err) - } - ext, ok := m[12345] - if !ok { - t.Fatalf("Didn't retrieve extension 12345; map is %v", m) - } - // Skip wire type/field number and length varints. - got := skipVarint(skipVarint(ext.enc)) - if want := []byte("hoohah"); !bytes.Equal(got, want) { - t.Errorf("Combined extension is %q, want %q", got, want) - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties_gogo.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties_gogo.go deleted file mode 100644 index 8daf9f7..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties_gogo.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "fmt" - "os" - "reflect" -) - -func (p *Properties) setCustomEncAndDec(typ reflect.Type) { - p.ctype = typ - if p.Repeated { - p.enc = (*Buffer).enc_custom_slice_bytes - p.dec = (*Buffer).dec_custom_slice_bytes - p.size = size_custom_slice_bytes - } else if typ.Kind() == reflect.Ptr { - p.enc = (*Buffer).enc_custom_bytes - p.dec = (*Buffer).dec_custom_bytes - p.size = size_custom_bytes - } else { - p.enc = (*Buffer).enc_custom_ref_bytes - p.dec = (*Buffer).dec_custom_ref_bytes - p.size = size_custom_ref_bytes - } -} - -func (p *Properties) setSliceOfNonPointerStructs(typ reflect.Type) { - t2 := typ.Elem() - p.sstype = typ - p.stype = t2 - p.isMarshaler = isMarshaler(t2) - p.isUnmarshaler = isUnmarshaler(t2) - p.enc = (*Buffer).enc_slice_ref_struct_message - p.dec = (*Buffer).dec_slice_ref_struct_message - p.size = size_slice_ref_struct_message - if p.Wire != "bytes" { - fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T \n", typ, t2) - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go deleted file mode 100644 index 2f2da46..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go +++ /dev/null @@ -1,122 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: proto3_proto/proto3.proto -// DO NOT EDIT! - -/* -Package proto3_proto is a generated protocol buffer package. - -It is generated from these files: - proto3_proto/proto3.proto - -It has these top-level messages: - Message - Nested - MessageWithMap -*/ -package proto3_proto - -import proto "github.com/gogo/protobuf/proto" -import testdata "github.com/gogo/protobuf/proto/testdata" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal - -type Message_Humour int32 - -const ( - Message_UNKNOWN Message_Humour = 0 - Message_PUNS Message_Humour = 1 - Message_SLAPSTICK Message_Humour = 2 - Message_BILL_BAILEY Message_Humour = 3 -) - -var Message_Humour_name = map[int32]string{ - 0: "UNKNOWN", - 1: "PUNS", - 2: "SLAPSTICK", - 3: "BILL_BAILEY", -} -var Message_Humour_value = map[string]int32{ - "UNKNOWN": 0, - "PUNS": 1, - "SLAPSTICK": 2, - "BILL_BAILEY": 3, -} - -func (x Message_Humour) String() string { - return proto.EnumName(Message_Humour_name, int32(x)) -} - -type Message struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Hilarity Message_Humour `protobuf:"varint,2,opt,name=hilarity,proto3,enum=proto3_proto.Message_Humour" json:"hilarity,omitempty"` - HeightInCm uint32 `protobuf:"varint,3,opt,name=height_in_cm,proto3" json:"height_in_cm,omitempty"` - Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` - ResultCount int64 `protobuf:"varint,7,opt,name=result_count,proto3" json:"result_count,omitempty"` - TrueScotsman bool `protobuf:"varint,8,opt,name=true_scotsman,proto3" json:"true_scotsman,omitempty"` - Score float32 `protobuf:"fixed32,9,opt,name=score,proto3" json:"score,omitempty"` - Key []uint64 `protobuf:"varint,5,rep,name=key" json:"key,omitempty"` - Nested *Nested `protobuf:"bytes,6,opt,name=nested" json:"nested,omitempty"` - Terrain map[string]*Nested `protobuf:"bytes,10,rep,name=terrain" json:"terrain,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` - Proto2Field *testdata.SubDefaults `protobuf:"bytes,11,opt,name=proto2_field" json:"proto2_field,omitempty"` - Proto2Value map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` -} - -func (m *Message) Reset() { *m = Message{} } -func (m *Message) String() string { return proto.CompactTextString(m) } -func (*Message) ProtoMessage() {} - -func (m *Message) GetNested() *Nested { - if m != nil { - return m.Nested - } - return nil -} - -func (m *Message) GetTerrain() map[string]*Nested { - if m != nil { - return m.Terrain - } - return nil -} - -func (m *Message) GetProto2Field() *testdata.SubDefaults { - if m != nil { - return m.Proto2Field - } - return nil -} - -func (m *Message) GetProto2Value() map[string]*testdata.SubDefaults { - if m != nil { - return m.Proto2Value - } - return nil -} - -type Nested struct { - Bunny string `protobuf:"bytes,1,opt,name=bunny,proto3" json:"bunny,omitempty"` -} - -func (m *Nested) Reset() { *m = Nested{} } -func (m *Nested) String() string { return proto.CompactTextString(m) } -func (*Nested) ProtoMessage() {} - -type MessageWithMap struct { - ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (m *MessageWithMap) Reset() { *m = MessageWithMap{} } -func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } -func (*MessageWithMap) ProtoMessage() {} - -func (m *MessageWithMap) GetByteMapping() map[bool][]byte { - if m != nil { - return m.ByteMapping - } - return nil -} - -func init() { - proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.proto b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.proto deleted file mode 100644 index ca67001..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.proto +++ /dev/null @@ -1,68 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2014 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package proto3_proto; - -import "github.com/gogo/protobuf/proto/testdata/test.proto"; - -message Message { - enum Humour { - UNKNOWN = 0; - PUNS = 1; - SLAPSTICK = 2; - BILL_BAILEY = 3; - } - - string name = 1; - Humour hilarity = 2; - uint32 height_in_cm = 3; - bytes data = 4; - int64 result_count = 7; - bool true_scotsman = 8; - float score = 9; - - repeated uint64 key = 5; - Nested nested = 6; - - map terrain = 10; - testdata.SubDefaults proto2_field = 11; - map proto2_value = 13; -} - -message Nested { - string bunny = 1; -} - -message MessageWithMap { - map byte_mapping = 1; -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_test.go deleted file mode 100644 index 6f9cddc..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_test.go +++ /dev/null @@ -1,125 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2014 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "testing" - - "github.com/gogo/protobuf/proto" - pb "github.com/gogo/protobuf/proto/proto3_proto" - tpb "github.com/gogo/protobuf/proto/testdata" -) - -func TestProto3ZeroValues(t *testing.T) { - tests := []struct { - desc string - m proto.Message - }{ - {"zero message", &pb.Message{}}, - {"empty bytes field", &pb.Message{Data: []byte{}}}, - } - for _, test := range tests { - b, err := proto.Marshal(test.m) - if err != nil { - t.Errorf("%s: proto.Marshal: %v", test.desc, err) - continue - } - if len(b) > 0 { - t.Errorf("%s: Encoding is non-empty: %q", test.desc, b) - } - } -} - -func TestRoundTripProto3(t *testing.T) { - m := &pb.Message{ - Name: "David", // (2 | 1<<3): 0x0a 0x05 "David" - Hilarity: pb.Message_PUNS, // (0 | 2<<3): 0x10 0x01 - HeightInCm: 178, // (0 | 3<<3): 0x18 0xb2 0x01 - Data: []byte("roboto"), // (2 | 4<<3): 0x20 0x06 "roboto" - ResultCount: 47, // (0 | 7<<3): 0x38 0x2f - TrueScotsman: true, // (0 | 8<<3): 0x40 0x01 - Score: 8.1, // (5 | 9<<3): 0x4d <8.1> - - Key: []uint64{1, 0xdeadbeef}, - Nested: &pb.Nested{ - Bunny: "Monty", - }, - } - t.Logf(" m: %v", m) - - b, err := proto.Marshal(m) - if err != nil { - t.Fatalf("proto.Marshal: %v", err) - } - t.Logf(" b: %q", b) - - m2 := new(pb.Message) - if err := proto.Unmarshal(b, m2); err != nil { - t.Fatalf("proto.Unmarshal: %v", err) - } - t.Logf("m2: %v", m2) - - if !proto.Equal(m, m2) { - t.Errorf("proto.Equal returned false:\n m: %v\nm2: %v", m, m2) - } -} - -func TestProto3SetDefaults(t *testing.T) { - in := &pb.Message{ - Terrain: map[string]*pb.Nested{ - "meadow": new(pb.Nested), - }, - Proto2Field: new(tpb.SubDefaults), - Proto2Value: map[string]*tpb.SubDefaults{ - "badlands": new(tpb.SubDefaults), - }, - } - - got := proto.Clone(in).(*pb.Message) - proto.SetDefaults(got) - - // There are no defaults in proto3. Everything should be the zero value, but - // we need to remember to set defaults for nested proto2 messages. - want := &pb.Message{ - Terrain: map[string]*pb.Nested{ - "meadow": new(pb.Nested), - }, - Proto2Field: &tpb.SubDefaults{N: proto.Int64(7)}, - Proto2Value: map[string]*tpb.SubDefaults{ - "badlands": {N: proto.Int64(7)}, - }, - } - - if !proto.Equal(got, want) { - t.Errorf("with in = %v\nproto.SetDefaults(in) =>\ngot %v\nwant %v", in, got, want) - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/size2_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/size2_test.go deleted file mode 100644 index a2729c3..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/size2_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -import ( - "testing" -) - -// This is a separate file and package from size_test.go because that one uses -// generated messages and thus may not be in package proto without having a circular -// dependency, whereas this file tests unexported details of size.go. - -func TestVarintSize(t *testing.T) { - // Check the edge cases carefully. - testCases := []struct { - n uint64 - size int - }{ - {0, 1}, - {1, 1}, - {127, 1}, - {128, 2}, - {16383, 2}, - {16384, 3}, - {1<<63 - 1, 9}, - {1 << 63, 10}, - } - for _, tc := range testCases { - size := sizeVarint(tc.n) - if size != tc.size { - t.Errorf("sizeVarint(%d) = %d, want %d", tc.n, size, tc.size) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/size_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/size_test.go deleted file mode 100644 index 457a479..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/size_test.go +++ /dev/null @@ -1,142 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "log" - "strings" - "testing" - - . "github.com/gogo/protobuf/proto" - proto3pb "github.com/gogo/protobuf/proto/proto3_proto" - pb "github.com/gogo/protobuf/proto/testdata" -) - -var messageWithExtension1 = &pb.MyMessage{Count: Int32(7)} - -// messageWithExtension2 is in equal_test.go. -var messageWithExtension3 = &pb.MyMessage{Count: Int32(8)} - -func init() { - if err := SetExtension(messageWithExtension1, pb.E_Ext_More, &pb.Ext{Data: String("Abbott")}); err != nil { - log.Panicf("SetExtension: %v", err) - } - if err := SetExtension(messageWithExtension3, pb.E_Ext_More, &pb.Ext{Data: String("Costello")}); err != nil { - log.Panicf("SetExtension: %v", err) - } - - // Force messageWithExtension3 to have the extension encoded. - Marshal(messageWithExtension3) - -} - -var SizeTests = []struct { - desc string - pb Message -}{ - {"empty", &pb.OtherMessage{}}, - // Basic types. - {"bool", &pb.Defaults{F_Bool: Bool(true)}}, - {"int32", &pb.Defaults{F_Int32: Int32(12)}}, - {"negative int32", &pb.Defaults{F_Int32: Int32(-1)}}, - {"small int64", &pb.Defaults{F_Int64: Int64(1)}}, - {"big int64", &pb.Defaults{F_Int64: Int64(1 << 20)}}, - {"negative int64", &pb.Defaults{F_Int64: Int64(-1)}}, - {"fixed32", &pb.Defaults{F_Fixed32: Uint32(71)}}, - {"fixed64", &pb.Defaults{F_Fixed64: Uint64(72)}}, - {"uint32", &pb.Defaults{F_Uint32: Uint32(123)}}, - {"uint64", &pb.Defaults{F_Uint64: Uint64(124)}}, - {"float", &pb.Defaults{F_Float: Float32(12.6)}}, - {"double", &pb.Defaults{F_Double: Float64(13.9)}}, - {"string", &pb.Defaults{F_String: String("niles")}}, - {"bytes", &pb.Defaults{F_Bytes: []byte("wowsa")}}, - {"bytes, empty", &pb.Defaults{F_Bytes: []byte{}}}, - {"sint32", &pb.Defaults{F_Sint32: Int32(65)}}, - {"sint64", &pb.Defaults{F_Sint64: Int64(67)}}, - {"enum", &pb.Defaults{F_Enum: pb.Defaults_BLUE.Enum()}}, - // Repeated. - {"empty repeated bool", &pb.MoreRepeated{Bools: []bool{}}}, - {"repeated bool", &pb.MoreRepeated{Bools: []bool{false, true, true, false}}}, - {"packed repeated bool", &pb.MoreRepeated{BoolsPacked: []bool{false, true, true, false, true, true, true}}}, - {"repeated int32", &pb.MoreRepeated{Ints: []int32{1, 12203, 1729, -1}}}, - {"repeated int32 packed", &pb.MoreRepeated{IntsPacked: []int32{1, 12203, 1729}}}, - {"repeated int64 packed", &pb.MoreRepeated{Int64SPacked: []int64{ - // Need enough large numbers to verify that the header is counting the number of bytes - // for the field, not the number of elements. - 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, - 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, - }}}, - {"repeated string", &pb.MoreRepeated{Strings: []string{"r", "ken", "gri"}}}, - {"repeated fixed", &pb.MoreRepeated{Fixeds: []uint32{1, 2, 3, 4}}}, - // Nested. - {"nested", &pb.OldMessage{Nested: &pb.OldMessage_Nested{Name: String("whatever")}}}, - {"group", &pb.GroupOld{G: &pb.GroupOld_G{X: Int32(12345)}}}, - // Other things. - {"unrecognized", &pb.MoreRepeated{XXX_unrecognized: []byte{13<<3 | 0, 4}}}, - {"extension (unencoded)", messageWithExtension1}, - {"extension (encoded)", messageWithExtension3}, - // proto3 message - {"proto3 empty", &proto3pb.Message{}}, - {"proto3 bool", &proto3pb.Message{TrueScotsman: true}}, - {"proto3 int64", &proto3pb.Message{ResultCount: 1}}, - {"proto3 uint32", &proto3pb.Message{HeightInCm: 123}}, - {"proto3 float", &proto3pb.Message{Score: 12.6}}, - {"proto3 string", &proto3pb.Message{Name: "Snezana"}}, - {"proto3 bytes", &proto3pb.Message{Data: []byte("wowsa")}}, - {"proto3 bytes, empty", &proto3pb.Message{Data: []byte{}}}, - {"proto3 enum", &proto3pb.Message{Hilarity: proto3pb.Message_PUNS}}, - {"proto3 map field with empty bytes", &proto3pb.MessageWithMap{ByteMapping: map[bool][]byte{false: {}}}}, - - {"map field", &pb.MessageWithMap{NameMapping: map[int32]string{1: "Rob", 7: "Andrew"}}}, - {"map field with message", &pb.MessageWithMap{MsgMapping: map[int64]*pb.FloatingPoint{0x7001: {F: Float64(2.0)}}}}, - {"map field with bytes", &pb.MessageWithMap{ByteMapping: map[bool][]byte{true: []byte("this time for sure")}}}, - {"map field with empty bytes", &pb.MessageWithMap{ByteMapping: map[bool][]byte{true: {}}}}, - - {"map field with big entry", &pb.MessageWithMap{NameMapping: map[int32]string{8: strings.Repeat("x", 125)}}}, - {"map field with big key and val", &pb.MessageWithMap{StrToStr: map[string]string{strings.Repeat("x", 70): strings.Repeat("y", 70)}}}, - {"map field with big numeric key", &pb.MessageWithMap{NameMapping: map[int32]string{0xf00d: "om nom nom"}}}, -} - -func TestSize(t *testing.T) { - for _, tc := range SizeTests { - size := Size(tc.pb) - b, err := Marshal(tc.pb) - if err != nil { - t.Errorf("%v: Marshal failed: %v", tc.desc, err) - continue - } - if size != len(b) { - t.Errorf("%v: Size(%v) = %d, want %d", tc.desc, tc.pb, size, len(b)) - t.Logf("%v: bytes: %#v", tc.desc, b) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/Makefile b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/Makefile deleted file mode 100644 index 1e676c3..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Go support for Protocol Buffers - Google's data interchange format -# -# Copyright 2010 The Go Authors. All rights reserved. -# https://github.com/golang/protobuf -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -all: regenerate - -regenerate: - go install github.com/gogo/protobuf/protoc-gen-gogo/version/protoc-min-version - protoc-min-version --version="3.0.0" --gogo_out=. test.proto - diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/golden_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/golden_test.go deleted file mode 100644 index 8e84515..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/golden_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Verify that the compiler output for test.proto is unchanged. - -package testdata - -import ( - "crypto/sha1" - "fmt" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "testing" -) - -// sum returns in string form (for easy comparison) the SHA-1 hash of the named file. -func sum(t *testing.T, name string) string { - data, err := ioutil.ReadFile(name) - if err != nil { - t.Fatal(err) - } - t.Logf("sum(%q): length is %d", name, len(data)) - hash := sha1.New() - _, err = hash.Write(data) - if err != nil { - t.Fatal(err) - } - return fmt.Sprintf("% x", hash.Sum(nil)) -} - -func run(t *testing.T, name string, args ...string) { - cmd := exec.Command(name, args...) - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err := cmd.Run() - if err != nil { - t.Fatal(err) - } -} - -func TestGolden(t *testing.T) { - // Compute the original checksum. - goldenSum := sum(t, "test.pb.go") - // Run the proto compiler. - run(t, "protoc", "--gogo_out="+os.TempDir(), "test.proto") - newFile := filepath.Join(os.TempDir(), "test.pb.go") - defer os.Remove(newFile) - // Compute the new checksum. - newSum := sum(t, newFile) - // Verify - if newSum != goldenSum { - run(t, "diff", "-u", "test.pb.go", newFile) - t.Fatal("Code generated by protoc-gen-go has changed; update test.pb.go") - } -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.pb.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.pb.go deleted file mode 100644 index ee3ad85..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.pb.go +++ /dev/null @@ -1,2397 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: test.proto -// DO NOT EDIT! - -/* -Package testdata is a generated protocol buffer package. - -It is generated from these files: - test.proto - -It has these top-level messages: - GoEnum - GoTestField - GoTest - GoSkipTest - NonPackedTest - PackedTest - MaxTag - OldMessage - NewMessage - InnerMessage - OtherMessage - MyMessage - Ext - MyMessageSet - Empty - MessageList - Strings - Defaults - SubDefaults - RepeatedEnum - MoreRepeated - GroupOld - GroupNew - FloatingPoint - MessageWithMap -*/ -package testdata - -import proto "github.com/gogo/protobuf/proto" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = math.Inf - -type FOO int32 - -const ( - FOO_FOO1 FOO = 1 -) - -var FOO_name = map[int32]string{ - 1: "FOO1", -} -var FOO_value = map[string]int32{ - "FOO1": 1, -} - -func (x FOO) Enum() *FOO { - p := new(FOO) - *p = x - return p -} -func (x FOO) String() string { - return proto.EnumName(FOO_name, int32(x)) -} -func (x *FOO) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FOO_value, data, "FOO") - if err != nil { - return err - } - *x = FOO(value) - return nil -} - -// An enum, for completeness. -type GoTest_KIND int32 - -const ( - GoTest_VOID GoTest_KIND = 0 - // Basic types - GoTest_BOOL GoTest_KIND = 1 - GoTest_BYTES GoTest_KIND = 2 - GoTest_FINGERPRINT GoTest_KIND = 3 - GoTest_FLOAT GoTest_KIND = 4 - GoTest_INT GoTest_KIND = 5 - GoTest_STRING GoTest_KIND = 6 - GoTest_TIME GoTest_KIND = 7 - // Groupings - GoTest_TUPLE GoTest_KIND = 8 - GoTest_ARRAY GoTest_KIND = 9 - GoTest_MAP GoTest_KIND = 10 - // Table types - GoTest_TABLE GoTest_KIND = 11 - // Functions - GoTest_FUNCTION GoTest_KIND = 12 -) - -var GoTest_KIND_name = map[int32]string{ - 0: "VOID", - 1: "BOOL", - 2: "BYTES", - 3: "FINGERPRINT", - 4: "FLOAT", - 5: "INT", - 6: "STRING", - 7: "TIME", - 8: "TUPLE", - 9: "ARRAY", - 10: "MAP", - 11: "TABLE", - 12: "FUNCTION", -} -var GoTest_KIND_value = map[string]int32{ - "VOID": 0, - "BOOL": 1, - "BYTES": 2, - "FINGERPRINT": 3, - "FLOAT": 4, - "INT": 5, - "STRING": 6, - "TIME": 7, - "TUPLE": 8, - "ARRAY": 9, - "MAP": 10, - "TABLE": 11, - "FUNCTION": 12, -} - -func (x GoTest_KIND) Enum() *GoTest_KIND { - p := new(GoTest_KIND) - *p = x - return p -} -func (x GoTest_KIND) String() string { - return proto.EnumName(GoTest_KIND_name, int32(x)) -} -func (x *GoTest_KIND) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(GoTest_KIND_value, data, "GoTest_KIND") - if err != nil { - return err - } - *x = GoTest_KIND(value) - return nil -} - -type MyMessage_Color int32 - -const ( - MyMessage_RED MyMessage_Color = 0 - MyMessage_GREEN MyMessage_Color = 1 - MyMessage_BLUE MyMessage_Color = 2 -) - -var MyMessage_Color_name = map[int32]string{ - 0: "RED", - 1: "GREEN", - 2: "BLUE", -} -var MyMessage_Color_value = map[string]int32{ - "RED": 0, - "GREEN": 1, - "BLUE": 2, -} - -func (x MyMessage_Color) Enum() *MyMessage_Color { - p := new(MyMessage_Color) - *p = x - return p -} -func (x MyMessage_Color) String() string { - return proto.EnumName(MyMessage_Color_name, int32(x)) -} -func (x *MyMessage_Color) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(MyMessage_Color_value, data, "MyMessage_Color") - if err != nil { - return err - } - *x = MyMessage_Color(value) - return nil -} - -type Defaults_Color int32 - -const ( - Defaults_RED Defaults_Color = 0 - Defaults_GREEN Defaults_Color = 1 - Defaults_BLUE Defaults_Color = 2 -) - -var Defaults_Color_name = map[int32]string{ - 0: "RED", - 1: "GREEN", - 2: "BLUE", -} -var Defaults_Color_value = map[string]int32{ - "RED": 0, - "GREEN": 1, - "BLUE": 2, -} - -func (x Defaults_Color) Enum() *Defaults_Color { - p := new(Defaults_Color) - *p = x - return p -} -func (x Defaults_Color) String() string { - return proto.EnumName(Defaults_Color_name, int32(x)) -} -func (x *Defaults_Color) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Defaults_Color_value, data, "Defaults_Color") - if err != nil { - return err - } - *x = Defaults_Color(value) - return nil -} - -type RepeatedEnum_Color int32 - -const ( - RepeatedEnum_RED RepeatedEnum_Color = 1 -) - -var RepeatedEnum_Color_name = map[int32]string{ - 1: "RED", -} -var RepeatedEnum_Color_value = map[string]int32{ - "RED": 1, -} - -func (x RepeatedEnum_Color) Enum() *RepeatedEnum_Color { - p := new(RepeatedEnum_Color) - *p = x - return p -} -func (x RepeatedEnum_Color) String() string { - return proto.EnumName(RepeatedEnum_Color_name, int32(x)) -} -func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(RepeatedEnum_Color_value, data, "RepeatedEnum_Color") - if err != nil { - return err - } - *x = RepeatedEnum_Color(value) - return nil -} - -type GoEnum struct { - Foo *FOO `protobuf:"varint,1,req,name=foo,enum=testdata.FOO" json:"foo,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoEnum) Reset() { *m = GoEnum{} } -func (m *GoEnum) String() string { return proto.CompactTextString(m) } -func (*GoEnum) ProtoMessage() {} - -func (m *GoEnum) GetFoo() FOO { - if m != nil && m.Foo != nil { - return *m.Foo - } - return FOO_FOO1 -} - -type GoTestField struct { - Label *string `protobuf:"bytes,1,req" json:"Label,omitempty"` - Type *string `protobuf:"bytes,2,req" json:"Type,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTestField) Reset() { *m = GoTestField{} } -func (m *GoTestField) String() string { return proto.CompactTextString(m) } -func (*GoTestField) ProtoMessage() {} - -func (m *GoTestField) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *GoTestField) GetType() string { - if m != nil && m.Type != nil { - return *m.Type - } - return "" -} - -type GoTest struct { - // Some typical parameters - Kind *GoTest_KIND `protobuf:"varint,1,req,enum=testdata.GoTest_KIND" json:"Kind,omitempty"` - Table *string `protobuf:"bytes,2,opt" json:"Table,omitempty"` - Param *int32 `protobuf:"varint,3,opt" json:"Param,omitempty"` - // Required, repeated and optional foreign fields. - RequiredField *GoTestField `protobuf:"bytes,4,req" json:"RequiredField,omitempty"` - RepeatedField []*GoTestField `protobuf:"bytes,5,rep" json:"RepeatedField,omitempty"` - OptionalField *GoTestField `protobuf:"bytes,6,opt" json:"OptionalField,omitempty"` - // Required fields of all basic types - F_BoolRequired *bool `protobuf:"varint,10,req,name=F_Bool_required" json:"F_Bool_required,omitempty"` - F_Int32Required *int32 `protobuf:"varint,11,req,name=F_Int32_required" json:"F_Int32_required,omitempty"` - F_Int64Required *int64 `protobuf:"varint,12,req,name=F_Int64_required" json:"F_Int64_required,omitempty"` - F_Fixed32Required *uint32 `protobuf:"fixed32,13,req,name=F_Fixed32_required" json:"F_Fixed32_required,omitempty"` - F_Fixed64Required *uint64 `protobuf:"fixed64,14,req,name=F_Fixed64_required" json:"F_Fixed64_required,omitempty"` - F_Uint32Required *uint32 `protobuf:"varint,15,req,name=F_Uint32_required" json:"F_Uint32_required,omitempty"` - F_Uint64Required *uint64 `protobuf:"varint,16,req,name=F_Uint64_required" json:"F_Uint64_required,omitempty"` - F_FloatRequired *float32 `protobuf:"fixed32,17,req,name=F_Float_required" json:"F_Float_required,omitempty"` - F_DoubleRequired *float64 `protobuf:"fixed64,18,req,name=F_Double_required" json:"F_Double_required,omitempty"` - F_StringRequired *string `protobuf:"bytes,19,req,name=F_String_required" json:"F_String_required,omitempty"` - F_BytesRequired []byte `protobuf:"bytes,101,req,name=F_Bytes_required" json:"F_Bytes_required,omitempty"` - F_Sint32Required *int32 `protobuf:"zigzag32,102,req,name=F_Sint32_required" json:"F_Sint32_required,omitempty"` - F_Sint64Required *int64 `protobuf:"zigzag64,103,req,name=F_Sint64_required" json:"F_Sint64_required,omitempty"` - // Repeated fields of all basic types - F_BoolRepeated []bool `protobuf:"varint,20,rep,name=F_Bool_repeated" json:"F_Bool_repeated,omitempty"` - F_Int32Repeated []int32 `protobuf:"varint,21,rep,name=F_Int32_repeated" json:"F_Int32_repeated,omitempty"` - F_Int64Repeated []int64 `protobuf:"varint,22,rep,name=F_Int64_repeated" json:"F_Int64_repeated,omitempty"` - F_Fixed32Repeated []uint32 `protobuf:"fixed32,23,rep,name=F_Fixed32_repeated" json:"F_Fixed32_repeated,omitempty"` - F_Fixed64Repeated []uint64 `protobuf:"fixed64,24,rep,name=F_Fixed64_repeated" json:"F_Fixed64_repeated,omitempty"` - F_Uint32Repeated []uint32 `protobuf:"varint,25,rep,name=F_Uint32_repeated" json:"F_Uint32_repeated,omitempty"` - F_Uint64Repeated []uint64 `protobuf:"varint,26,rep,name=F_Uint64_repeated" json:"F_Uint64_repeated,omitempty"` - F_FloatRepeated []float32 `protobuf:"fixed32,27,rep,name=F_Float_repeated" json:"F_Float_repeated,omitempty"` - F_DoubleRepeated []float64 `protobuf:"fixed64,28,rep,name=F_Double_repeated" json:"F_Double_repeated,omitempty"` - F_StringRepeated []string `protobuf:"bytes,29,rep,name=F_String_repeated" json:"F_String_repeated,omitempty"` - F_BytesRepeated [][]byte `protobuf:"bytes,201,rep,name=F_Bytes_repeated" json:"F_Bytes_repeated,omitempty"` - F_Sint32Repeated []int32 `protobuf:"zigzag32,202,rep,name=F_Sint32_repeated" json:"F_Sint32_repeated,omitempty"` - F_Sint64Repeated []int64 `protobuf:"zigzag64,203,rep,name=F_Sint64_repeated" json:"F_Sint64_repeated,omitempty"` - // Optional fields of all basic types - F_BoolOptional *bool `protobuf:"varint,30,opt,name=F_Bool_optional" json:"F_Bool_optional,omitempty"` - F_Int32Optional *int32 `protobuf:"varint,31,opt,name=F_Int32_optional" json:"F_Int32_optional,omitempty"` - F_Int64Optional *int64 `protobuf:"varint,32,opt,name=F_Int64_optional" json:"F_Int64_optional,omitempty"` - F_Fixed32Optional *uint32 `protobuf:"fixed32,33,opt,name=F_Fixed32_optional" json:"F_Fixed32_optional,omitempty"` - F_Fixed64Optional *uint64 `protobuf:"fixed64,34,opt,name=F_Fixed64_optional" json:"F_Fixed64_optional,omitempty"` - F_Uint32Optional *uint32 `protobuf:"varint,35,opt,name=F_Uint32_optional" json:"F_Uint32_optional,omitempty"` - F_Uint64Optional *uint64 `protobuf:"varint,36,opt,name=F_Uint64_optional" json:"F_Uint64_optional,omitempty"` - F_FloatOptional *float32 `protobuf:"fixed32,37,opt,name=F_Float_optional" json:"F_Float_optional,omitempty"` - F_DoubleOptional *float64 `protobuf:"fixed64,38,opt,name=F_Double_optional" json:"F_Double_optional,omitempty"` - F_StringOptional *string `protobuf:"bytes,39,opt,name=F_String_optional" json:"F_String_optional,omitempty"` - F_BytesOptional []byte `protobuf:"bytes,301,opt,name=F_Bytes_optional" json:"F_Bytes_optional,omitempty"` - F_Sint32Optional *int32 `protobuf:"zigzag32,302,opt,name=F_Sint32_optional" json:"F_Sint32_optional,omitempty"` - F_Sint64Optional *int64 `protobuf:"zigzag64,303,opt,name=F_Sint64_optional" json:"F_Sint64_optional,omitempty"` - // Default-valued fields of all basic types - F_BoolDefaulted *bool `protobuf:"varint,40,opt,name=F_Bool_defaulted,def=1" json:"F_Bool_defaulted,omitempty"` - F_Int32Defaulted *int32 `protobuf:"varint,41,opt,name=F_Int32_defaulted,def=32" json:"F_Int32_defaulted,omitempty"` - F_Int64Defaulted *int64 `protobuf:"varint,42,opt,name=F_Int64_defaulted,def=64" json:"F_Int64_defaulted,omitempty"` - F_Fixed32Defaulted *uint32 `protobuf:"fixed32,43,opt,name=F_Fixed32_defaulted,def=320" json:"F_Fixed32_defaulted,omitempty"` - F_Fixed64Defaulted *uint64 `protobuf:"fixed64,44,opt,name=F_Fixed64_defaulted,def=640" json:"F_Fixed64_defaulted,omitempty"` - F_Uint32Defaulted *uint32 `protobuf:"varint,45,opt,name=F_Uint32_defaulted,def=3200" json:"F_Uint32_defaulted,omitempty"` - F_Uint64Defaulted *uint64 `protobuf:"varint,46,opt,name=F_Uint64_defaulted,def=6400" json:"F_Uint64_defaulted,omitempty"` - F_FloatDefaulted *float32 `protobuf:"fixed32,47,opt,name=F_Float_defaulted,def=314159" json:"F_Float_defaulted,omitempty"` - F_DoubleDefaulted *float64 `protobuf:"fixed64,48,opt,name=F_Double_defaulted,def=271828" json:"F_Double_defaulted,omitempty"` - F_StringDefaulted *string `protobuf:"bytes,49,opt,name=F_String_defaulted,def=hello, \"world!\"\n" json:"F_String_defaulted,omitempty"` - F_BytesDefaulted []byte `protobuf:"bytes,401,opt,name=F_Bytes_defaulted,def=Bignose" json:"F_Bytes_defaulted,omitempty"` - F_Sint32Defaulted *int32 `protobuf:"zigzag32,402,opt,name=F_Sint32_defaulted,def=-32" json:"F_Sint32_defaulted,omitempty"` - F_Sint64Defaulted *int64 `protobuf:"zigzag64,403,opt,name=F_Sint64_defaulted,def=-64" json:"F_Sint64_defaulted,omitempty"` - // Packed repeated fields (no string or bytes). - F_BoolRepeatedPacked []bool `protobuf:"varint,50,rep,packed,name=F_Bool_repeated_packed" json:"F_Bool_repeated_packed,omitempty"` - F_Int32RepeatedPacked []int32 `protobuf:"varint,51,rep,packed,name=F_Int32_repeated_packed" json:"F_Int32_repeated_packed,omitempty"` - F_Int64RepeatedPacked []int64 `protobuf:"varint,52,rep,packed,name=F_Int64_repeated_packed" json:"F_Int64_repeated_packed,omitempty"` - F_Fixed32RepeatedPacked []uint32 `protobuf:"fixed32,53,rep,packed,name=F_Fixed32_repeated_packed" json:"F_Fixed32_repeated_packed,omitempty"` - F_Fixed64RepeatedPacked []uint64 `protobuf:"fixed64,54,rep,packed,name=F_Fixed64_repeated_packed" json:"F_Fixed64_repeated_packed,omitempty"` - F_Uint32RepeatedPacked []uint32 `protobuf:"varint,55,rep,packed,name=F_Uint32_repeated_packed" json:"F_Uint32_repeated_packed,omitempty"` - F_Uint64RepeatedPacked []uint64 `protobuf:"varint,56,rep,packed,name=F_Uint64_repeated_packed" json:"F_Uint64_repeated_packed,omitempty"` - F_FloatRepeatedPacked []float32 `protobuf:"fixed32,57,rep,packed,name=F_Float_repeated_packed" json:"F_Float_repeated_packed,omitempty"` - F_DoubleRepeatedPacked []float64 `protobuf:"fixed64,58,rep,packed,name=F_Double_repeated_packed" json:"F_Double_repeated_packed,omitempty"` - F_Sint32RepeatedPacked []int32 `protobuf:"zigzag32,502,rep,packed,name=F_Sint32_repeated_packed" json:"F_Sint32_repeated_packed,omitempty"` - F_Sint64RepeatedPacked []int64 `protobuf:"zigzag64,503,rep,packed,name=F_Sint64_repeated_packed" json:"F_Sint64_repeated_packed,omitempty"` - Requiredgroup *GoTest_RequiredGroup `protobuf:"group,70,req,name=RequiredGroup" json:"requiredgroup,omitempty"` - Repeatedgroup []*GoTest_RepeatedGroup `protobuf:"group,80,rep,name=RepeatedGroup" json:"repeatedgroup,omitempty"` - Optionalgroup *GoTest_OptionalGroup `protobuf:"group,90,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest) Reset() { *m = GoTest{} } -func (m *GoTest) String() string { return proto.CompactTextString(m) } -func (*GoTest) ProtoMessage() {} - -const Default_GoTest_F_BoolDefaulted bool = true -const Default_GoTest_F_Int32Defaulted int32 = 32 -const Default_GoTest_F_Int64Defaulted int64 = 64 -const Default_GoTest_F_Fixed32Defaulted uint32 = 320 -const Default_GoTest_F_Fixed64Defaulted uint64 = 640 -const Default_GoTest_F_Uint32Defaulted uint32 = 3200 -const Default_GoTest_F_Uint64Defaulted uint64 = 6400 -const Default_GoTest_F_FloatDefaulted float32 = 314159 -const Default_GoTest_F_DoubleDefaulted float64 = 271828 -const Default_GoTest_F_StringDefaulted string = "hello, \"world!\"\n" - -var Default_GoTest_F_BytesDefaulted []byte = []byte("Bignose") - -const Default_GoTest_F_Sint32Defaulted int32 = -32 -const Default_GoTest_F_Sint64Defaulted int64 = -64 - -func (m *GoTest) GetKind() GoTest_KIND { - if m != nil && m.Kind != nil { - return *m.Kind - } - return GoTest_VOID -} - -func (m *GoTest) GetTable() string { - if m != nil && m.Table != nil { - return *m.Table - } - return "" -} - -func (m *GoTest) GetParam() int32 { - if m != nil && m.Param != nil { - return *m.Param - } - return 0 -} - -func (m *GoTest) GetRequiredField() *GoTestField { - if m != nil { - return m.RequiredField - } - return nil -} - -func (m *GoTest) GetRepeatedField() []*GoTestField { - if m != nil { - return m.RepeatedField - } - return nil -} - -func (m *GoTest) GetOptionalField() *GoTestField { - if m != nil { - return m.OptionalField - } - return nil -} - -func (m *GoTest) GetF_BoolRequired() bool { - if m != nil && m.F_BoolRequired != nil { - return *m.F_BoolRequired - } - return false -} - -func (m *GoTest) GetF_Int32Required() int32 { - if m != nil && m.F_Int32Required != nil { - return *m.F_Int32Required - } - return 0 -} - -func (m *GoTest) GetF_Int64Required() int64 { - if m != nil && m.F_Int64Required != nil { - return *m.F_Int64Required - } - return 0 -} - -func (m *GoTest) GetF_Fixed32Required() uint32 { - if m != nil && m.F_Fixed32Required != nil { - return *m.F_Fixed32Required - } - return 0 -} - -func (m *GoTest) GetF_Fixed64Required() uint64 { - if m != nil && m.F_Fixed64Required != nil { - return *m.F_Fixed64Required - } - return 0 -} - -func (m *GoTest) GetF_Uint32Required() uint32 { - if m != nil && m.F_Uint32Required != nil { - return *m.F_Uint32Required - } - return 0 -} - -func (m *GoTest) GetF_Uint64Required() uint64 { - if m != nil && m.F_Uint64Required != nil { - return *m.F_Uint64Required - } - return 0 -} - -func (m *GoTest) GetF_FloatRequired() float32 { - if m != nil && m.F_FloatRequired != nil { - return *m.F_FloatRequired - } - return 0 -} - -func (m *GoTest) GetF_DoubleRequired() float64 { - if m != nil && m.F_DoubleRequired != nil { - return *m.F_DoubleRequired - } - return 0 -} - -func (m *GoTest) GetF_StringRequired() string { - if m != nil && m.F_StringRequired != nil { - return *m.F_StringRequired - } - return "" -} - -func (m *GoTest) GetF_BytesRequired() []byte { - if m != nil { - return m.F_BytesRequired - } - return nil -} - -func (m *GoTest) GetF_Sint32Required() int32 { - if m != nil && m.F_Sint32Required != nil { - return *m.F_Sint32Required - } - return 0 -} - -func (m *GoTest) GetF_Sint64Required() int64 { - if m != nil && m.F_Sint64Required != nil { - return *m.F_Sint64Required - } - return 0 -} - -func (m *GoTest) GetF_BoolRepeated() []bool { - if m != nil { - return m.F_BoolRepeated - } - return nil -} - -func (m *GoTest) GetF_Int32Repeated() []int32 { - if m != nil { - return m.F_Int32Repeated - } - return nil -} - -func (m *GoTest) GetF_Int64Repeated() []int64 { - if m != nil { - return m.F_Int64Repeated - } - return nil -} - -func (m *GoTest) GetF_Fixed32Repeated() []uint32 { - if m != nil { - return m.F_Fixed32Repeated - } - return nil -} - -func (m *GoTest) GetF_Fixed64Repeated() []uint64 { - if m != nil { - return m.F_Fixed64Repeated - } - return nil -} - -func (m *GoTest) GetF_Uint32Repeated() []uint32 { - if m != nil { - return m.F_Uint32Repeated - } - return nil -} - -func (m *GoTest) GetF_Uint64Repeated() []uint64 { - if m != nil { - return m.F_Uint64Repeated - } - return nil -} - -func (m *GoTest) GetF_FloatRepeated() []float32 { - if m != nil { - return m.F_FloatRepeated - } - return nil -} - -func (m *GoTest) GetF_DoubleRepeated() []float64 { - if m != nil { - return m.F_DoubleRepeated - } - return nil -} - -func (m *GoTest) GetF_StringRepeated() []string { - if m != nil { - return m.F_StringRepeated - } - return nil -} - -func (m *GoTest) GetF_BytesRepeated() [][]byte { - if m != nil { - return m.F_BytesRepeated - } - return nil -} - -func (m *GoTest) GetF_Sint32Repeated() []int32 { - if m != nil { - return m.F_Sint32Repeated - } - return nil -} - -func (m *GoTest) GetF_Sint64Repeated() []int64 { - if m != nil { - return m.F_Sint64Repeated - } - return nil -} - -func (m *GoTest) GetF_BoolOptional() bool { - if m != nil && m.F_BoolOptional != nil { - return *m.F_BoolOptional - } - return false -} - -func (m *GoTest) GetF_Int32Optional() int32 { - if m != nil && m.F_Int32Optional != nil { - return *m.F_Int32Optional - } - return 0 -} - -func (m *GoTest) GetF_Int64Optional() int64 { - if m != nil && m.F_Int64Optional != nil { - return *m.F_Int64Optional - } - return 0 -} - -func (m *GoTest) GetF_Fixed32Optional() uint32 { - if m != nil && m.F_Fixed32Optional != nil { - return *m.F_Fixed32Optional - } - return 0 -} - -func (m *GoTest) GetF_Fixed64Optional() uint64 { - if m != nil && m.F_Fixed64Optional != nil { - return *m.F_Fixed64Optional - } - return 0 -} - -func (m *GoTest) GetF_Uint32Optional() uint32 { - if m != nil && m.F_Uint32Optional != nil { - return *m.F_Uint32Optional - } - return 0 -} - -func (m *GoTest) GetF_Uint64Optional() uint64 { - if m != nil && m.F_Uint64Optional != nil { - return *m.F_Uint64Optional - } - return 0 -} - -func (m *GoTest) GetF_FloatOptional() float32 { - if m != nil && m.F_FloatOptional != nil { - return *m.F_FloatOptional - } - return 0 -} - -func (m *GoTest) GetF_DoubleOptional() float64 { - if m != nil && m.F_DoubleOptional != nil { - return *m.F_DoubleOptional - } - return 0 -} - -func (m *GoTest) GetF_StringOptional() string { - if m != nil && m.F_StringOptional != nil { - return *m.F_StringOptional - } - return "" -} - -func (m *GoTest) GetF_BytesOptional() []byte { - if m != nil { - return m.F_BytesOptional - } - return nil -} - -func (m *GoTest) GetF_Sint32Optional() int32 { - if m != nil && m.F_Sint32Optional != nil { - return *m.F_Sint32Optional - } - return 0 -} - -func (m *GoTest) GetF_Sint64Optional() int64 { - if m != nil && m.F_Sint64Optional != nil { - return *m.F_Sint64Optional - } - return 0 -} - -func (m *GoTest) GetF_BoolDefaulted() bool { - if m != nil && m.F_BoolDefaulted != nil { - return *m.F_BoolDefaulted - } - return Default_GoTest_F_BoolDefaulted -} - -func (m *GoTest) GetF_Int32Defaulted() int32 { - if m != nil && m.F_Int32Defaulted != nil { - return *m.F_Int32Defaulted - } - return Default_GoTest_F_Int32Defaulted -} - -func (m *GoTest) GetF_Int64Defaulted() int64 { - if m != nil && m.F_Int64Defaulted != nil { - return *m.F_Int64Defaulted - } - return Default_GoTest_F_Int64Defaulted -} - -func (m *GoTest) GetF_Fixed32Defaulted() uint32 { - if m != nil && m.F_Fixed32Defaulted != nil { - return *m.F_Fixed32Defaulted - } - return Default_GoTest_F_Fixed32Defaulted -} - -func (m *GoTest) GetF_Fixed64Defaulted() uint64 { - if m != nil && m.F_Fixed64Defaulted != nil { - return *m.F_Fixed64Defaulted - } - return Default_GoTest_F_Fixed64Defaulted -} - -func (m *GoTest) GetF_Uint32Defaulted() uint32 { - if m != nil && m.F_Uint32Defaulted != nil { - return *m.F_Uint32Defaulted - } - return Default_GoTest_F_Uint32Defaulted -} - -func (m *GoTest) GetF_Uint64Defaulted() uint64 { - if m != nil && m.F_Uint64Defaulted != nil { - return *m.F_Uint64Defaulted - } - return Default_GoTest_F_Uint64Defaulted -} - -func (m *GoTest) GetF_FloatDefaulted() float32 { - if m != nil && m.F_FloatDefaulted != nil { - return *m.F_FloatDefaulted - } - return Default_GoTest_F_FloatDefaulted -} - -func (m *GoTest) GetF_DoubleDefaulted() float64 { - if m != nil && m.F_DoubleDefaulted != nil { - return *m.F_DoubleDefaulted - } - return Default_GoTest_F_DoubleDefaulted -} - -func (m *GoTest) GetF_StringDefaulted() string { - if m != nil && m.F_StringDefaulted != nil { - return *m.F_StringDefaulted - } - return Default_GoTest_F_StringDefaulted -} - -func (m *GoTest) GetF_BytesDefaulted() []byte { - if m != nil && m.F_BytesDefaulted != nil { - return m.F_BytesDefaulted - } - return append([]byte(nil), Default_GoTest_F_BytesDefaulted...) -} - -func (m *GoTest) GetF_Sint32Defaulted() int32 { - if m != nil && m.F_Sint32Defaulted != nil { - return *m.F_Sint32Defaulted - } - return Default_GoTest_F_Sint32Defaulted -} - -func (m *GoTest) GetF_Sint64Defaulted() int64 { - if m != nil && m.F_Sint64Defaulted != nil { - return *m.F_Sint64Defaulted - } - return Default_GoTest_F_Sint64Defaulted -} - -func (m *GoTest) GetF_BoolRepeatedPacked() []bool { - if m != nil { - return m.F_BoolRepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Int32RepeatedPacked() []int32 { - if m != nil { - return m.F_Int32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Int64RepeatedPacked() []int64 { - if m != nil { - return m.F_Int64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Fixed32RepeatedPacked() []uint32 { - if m != nil { - return m.F_Fixed32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Fixed64RepeatedPacked() []uint64 { - if m != nil { - return m.F_Fixed64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Uint32RepeatedPacked() []uint32 { - if m != nil { - return m.F_Uint32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Uint64RepeatedPacked() []uint64 { - if m != nil { - return m.F_Uint64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_FloatRepeatedPacked() []float32 { - if m != nil { - return m.F_FloatRepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_DoubleRepeatedPacked() []float64 { - if m != nil { - return m.F_DoubleRepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Sint32RepeatedPacked() []int32 { - if m != nil { - return m.F_Sint32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Sint64RepeatedPacked() []int64 { - if m != nil { - return m.F_Sint64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetRequiredgroup() *GoTest_RequiredGroup { - if m != nil { - return m.Requiredgroup - } - return nil -} - -func (m *GoTest) GetRepeatedgroup() []*GoTest_RepeatedGroup { - if m != nil { - return m.Repeatedgroup - } - return nil -} - -func (m *GoTest) GetOptionalgroup() *GoTest_OptionalGroup { - if m != nil { - return m.Optionalgroup - } - return nil -} - -// Required, repeated, and optional groups. -type GoTest_RequiredGroup struct { - RequiredField *string `protobuf:"bytes,71,req" json:"RequiredField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest_RequiredGroup) Reset() { *m = GoTest_RequiredGroup{} } -func (m *GoTest_RequiredGroup) String() string { return proto.CompactTextString(m) } -func (*GoTest_RequiredGroup) ProtoMessage() {} - -func (m *GoTest_RequiredGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" -} - -type GoTest_RepeatedGroup struct { - RequiredField *string `protobuf:"bytes,81,req" json:"RequiredField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest_RepeatedGroup) Reset() { *m = GoTest_RepeatedGroup{} } -func (m *GoTest_RepeatedGroup) String() string { return proto.CompactTextString(m) } -func (*GoTest_RepeatedGroup) ProtoMessage() {} - -func (m *GoTest_RepeatedGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" -} - -type GoTest_OptionalGroup struct { - RequiredField *string `protobuf:"bytes,91,req" json:"RequiredField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest_OptionalGroup) Reset() { *m = GoTest_OptionalGroup{} } -func (m *GoTest_OptionalGroup) String() string { return proto.CompactTextString(m) } -func (*GoTest_OptionalGroup) ProtoMessage() {} - -func (m *GoTest_OptionalGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" -} - -// For testing skipping of unrecognized fields. -// Numbers are all big, larger than tag numbers in GoTestField, -// the message used in the corresponding test. -type GoSkipTest struct { - SkipInt32 *int32 `protobuf:"varint,11,req,name=skip_int32" json:"skip_int32,omitempty"` - SkipFixed32 *uint32 `protobuf:"fixed32,12,req,name=skip_fixed32" json:"skip_fixed32,omitempty"` - SkipFixed64 *uint64 `protobuf:"fixed64,13,req,name=skip_fixed64" json:"skip_fixed64,omitempty"` - SkipString *string `protobuf:"bytes,14,req,name=skip_string" json:"skip_string,omitempty"` - Skipgroup *GoSkipTest_SkipGroup `protobuf:"group,15,req,name=SkipGroup" json:"skipgroup,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoSkipTest) Reset() { *m = GoSkipTest{} } -func (m *GoSkipTest) String() string { return proto.CompactTextString(m) } -func (*GoSkipTest) ProtoMessage() {} - -func (m *GoSkipTest) GetSkipInt32() int32 { - if m != nil && m.SkipInt32 != nil { - return *m.SkipInt32 - } - return 0 -} - -func (m *GoSkipTest) GetSkipFixed32() uint32 { - if m != nil && m.SkipFixed32 != nil { - return *m.SkipFixed32 - } - return 0 -} - -func (m *GoSkipTest) GetSkipFixed64() uint64 { - if m != nil && m.SkipFixed64 != nil { - return *m.SkipFixed64 - } - return 0 -} - -func (m *GoSkipTest) GetSkipString() string { - if m != nil && m.SkipString != nil { - return *m.SkipString - } - return "" -} - -func (m *GoSkipTest) GetSkipgroup() *GoSkipTest_SkipGroup { - if m != nil { - return m.Skipgroup - } - return nil -} - -type GoSkipTest_SkipGroup struct { - GroupInt32 *int32 `protobuf:"varint,16,req,name=group_int32" json:"group_int32,omitempty"` - GroupString *string `protobuf:"bytes,17,req,name=group_string" json:"group_string,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoSkipTest_SkipGroup) Reset() { *m = GoSkipTest_SkipGroup{} } -func (m *GoSkipTest_SkipGroup) String() string { return proto.CompactTextString(m) } -func (*GoSkipTest_SkipGroup) ProtoMessage() {} - -func (m *GoSkipTest_SkipGroup) GetGroupInt32() int32 { - if m != nil && m.GroupInt32 != nil { - return *m.GroupInt32 - } - return 0 -} - -func (m *GoSkipTest_SkipGroup) GetGroupString() string { - if m != nil && m.GroupString != nil { - return *m.GroupString - } - return "" -} - -// For testing packed/non-packed decoder switching. -// A serialized instance of one should be deserializable as the other. -type NonPackedTest struct { - A []int32 `protobuf:"varint,1,rep,name=a" json:"a,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *NonPackedTest) Reset() { *m = NonPackedTest{} } -func (m *NonPackedTest) String() string { return proto.CompactTextString(m) } -func (*NonPackedTest) ProtoMessage() {} - -func (m *NonPackedTest) GetA() []int32 { - if m != nil { - return m.A - } - return nil -} - -type PackedTest struct { - B []int32 `protobuf:"varint,1,rep,packed,name=b" json:"b,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *PackedTest) Reset() { *m = PackedTest{} } -func (m *PackedTest) String() string { return proto.CompactTextString(m) } -func (*PackedTest) ProtoMessage() {} - -func (m *PackedTest) GetB() []int32 { - if m != nil { - return m.B - } - return nil -} - -type MaxTag struct { - // Maximum possible tag number. - LastField *string `protobuf:"bytes,536870911,opt,name=last_field" json:"last_field,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MaxTag) Reset() { *m = MaxTag{} } -func (m *MaxTag) String() string { return proto.CompactTextString(m) } -func (*MaxTag) ProtoMessage() {} - -func (m *MaxTag) GetLastField() string { - if m != nil && m.LastField != nil { - return *m.LastField - } - return "" -} - -type OldMessage struct { - Nested *OldMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"` - Num *int32 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *OldMessage) Reset() { *m = OldMessage{} } -func (m *OldMessage) String() string { return proto.CompactTextString(m) } -func (*OldMessage) ProtoMessage() {} - -func (m *OldMessage) GetNested() *OldMessage_Nested { - if m != nil { - return m.Nested - } - return nil -} - -func (m *OldMessage) GetNum() int32 { - if m != nil && m.Num != nil { - return *m.Num - } - return 0 -} - -type OldMessage_Nested struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *OldMessage_Nested) Reset() { *m = OldMessage_Nested{} } -func (m *OldMessage_Nested) String() string { return proto.CompactTextString(m) } -func (*OldMessage_Nested) ProtoMessage() {} - -func (m *OldMessage_Nested) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -// NewMessage is wire compatible with OldMessage; -// imagine it as a future version. -type NewMessage struct { - Nested *NewMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"` - // This is an int32 in OldMessage. - Num *int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *NewMessage) Reset() { *m = NewMessage{} } -func (m *NewMessage) String() string { return proto.CompactTextString(m) } -func (*NewMessage) ProtoMessage() {} - -func (m *NewMessage) GetNested() *NewMessage_Nested { - if m != nil { - return m.Nested - } - return nil -} - -func (m *NewMessage) GetNum() int64 { - if m != nil && m.Num != nil { - return *m.Num - } - return 0 -} - -type NewMessage_Nested struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - FoodGroup *string `protobuf:"bytes,2,opt,name=food_group" json:"food_group,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *NewMessage_Nested) Reset() { *m = NewMessage_Nested{} } -func (m *NewMessage_Nested) String() string { return proto.CompactTextString(m) } -func (*NewMessage_Nested) ProtoMessage() {} - -func (m *NewMessage_Nested) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *NewMessage_Nested) GetFoodGroup() string { - if m != nil && m.FoodGroup != nil { - return *m.FoodGroup - } - return "" -} - -type InnerMessage struct { - Host *string `protobuf:"bytes,1,req,name=host" json:"host,omitempty"` - Port *int32 `protobuf:"varint,2,opt,name=port,def=4000" json:"port,omitempty"` - Connected *bool `protobuf:"varint,3,opt,name=connected" json:"connected,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *InnerMessage) Reset() { *m = InnerMessage{} } -func (m *InnerMessage) String() string { return proto.CompactTextString(m) } -func (*InnerMessage) ProtoMessage() {} - -const Default_InnerMessage_Port int32 = 4000 - -func (m *InnerMessage) GetHost() string { - if m != nil && m.Host != nil { - return *m.Host - } - return "" -} - -func (m *InnerMessage) GetPort() int32 { - if m != nil && m.Port != nil { - return *m.Port - } - return Default_InnerMessage_Port -} - -func (m *InnerMessage) GetConnected() bool { - if m != nil && m.Connected != nil { - return *m.Connected - } - return false -} - -type OtherMessage struct { - Key *int64 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` - Weight *float32 `protobuf:"fixed32,3,opt,name=weight" json:"weight,omitempty"` - Inner *InnerMessage `protobuf:"bytes,4,opt,name=inner" json:"inner,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *OtherMessage) Reset() { *m = OtherMessage{} } -func (m *OtherMessage) String() string { return proto.CompactTextString(m) } -func (*OtherMessage) ProtoMessage() {} - -func (m *OtherMessage) GetKey() int64 { - if m != nil && m.Key != nil { - return *m.Key - } - return 0 -} - -func (m *OtherMessage) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *OtherMessage) GetWeight() float32 { - if m != nil && m.Weight != nil { - return *m.Weight - } - return 0 -} - -func (m *OtherMessage) GetInner() *InnerMessage { - if m != nil { - return m.Inner - } - return nil -} - -type MyMessage struct { - Count *int32 `protobuf:"varint,1,req,name=count" json:"count,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Quote *string `protobuf:"bytes,3,opt,name=quote" json:"quote,omitempty"` - Pet []string `protobuf:"bytes,4,rep,name=pet" json:"pet,omitempty"` - Inner *InnerMessage `protobuf:"bytes,5,opt,name=inner" json:"inner,omitempty"` - Others []*OtherMessage `protobuf:"bytes,6,rep,name=others" json:"others,omitempty"` - RepInner []*InnerMessage `protobuf:"bytes,12,rep,name=rep_inner" json:"rep_inner,omitempty"` - Bikeshed *MyMessage_Color `protobuf:"varint,7,opt,name=bikeshed,enum=testdata.MyMessage_Color" json:"bikeshed,omitempty"` - Somegroup *MyMessage_SomeGroup `protobuf:"group,8,opt,name=SomeGroup" json:"somegroup,omitempty"` - // This field becomes [][]byte in the generated code. - RepBytes [][]byte `protobuf:"bytes,10,rep,name=rep_bytes" json:"rep_bytes,omitempty"` - Bigfloat *float64 `protobuf:"fixed64,11,opt,name=bigfloat" json:"bigfloat,omitempty"` - XXX_extensions map[int32]proto.Extension `json:"-"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MyMessage) Reset() { *m = MyMessage{} } -func (m *MyMessage) String() string { return proto.CompactTextString(m) } -func (*MyMessage) ProtoMessage() {} - -var extRange_MyMessage = []proto.ExtensionRange{ - {100, 536870911}, -} - -func (*MyMessage) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_MyMessage -} -func (m *MyMessage) ExtensionMap() map[int32]proto.Extension { - if m.XXX_extensions == nil { - m.XXX_extensions = make(map[int32]proto.Extension) - } - return m.XXX_extensions -} - -func (m *MyMessage) GetCount() int32 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -func (m *MyMessage) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *MyMessage) GetQuote() string { - if m != nil && m.Quote != nil { - return *m.Quote - } - return "" -} - -func (m *MyMessage) GetPet() []string { - if m != nil { - return m.Pet - } - return nil -} - -func (m *MyMessage) GetInner() *InnerMessage { - if m != nil { - return m.Inner - } - return nil -} - -func (m *MyMessage) GetOthers() []*OtherMessage { - if m != nil { - return m.Others - } - return nil -} - -func (m *MyMessage) GetRepInner() []*InnerMessage { - if m != nil { - return m.RepInner - } - return nil -} - -func (m *MyMessage) GetBikeshed() MyMessage_Color { - if m != nil && m.Bikeshed != nil { - return *m.Bikeshed - } - return MyMessage_RED -} - -func (m *MyMessage) GetSomegroup() *MyMessage_SomeGroup { - if m != nil { - return m.Somegroup - } - return nil -} - -func (m *MyMessage) GetRepBytes() [][]byte { - if m != nil { - return m.RepBytes - } - return nil -} - -func (m *MyMessage) GetBigfloat() float64 { - if m != nil && m.Bigfloat != nil { - return *m.Bigfloat - } - return 0 -} - -type MyMessage_SomeGroup struct { - GroupField *int32 `protobuf:"varint,9,opt,name=group_field" json:"group_field,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MyMessage_SomeGroup) Reset() { *m = MyMessage_SomeGroup{} } -func (m *MyMessage_SomeGroup) String() string { return proto.CompactTextString(m) } -func (*MyMessage_SomeGroup) ProtoMessage() {} - -func (m *MyMessage_SomeGroup) GetGroupField() int32 { - if m != nil && m.GroupField != nil { - return *m.GroupField - } - return 0 -} - -type Ext struct { - Data *string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Ext) Reset() { *m = Ext{} } -func (m *Ext) String() string { return proto.CompactTextString(m) } -func (*Ext) ProtoMessage() {} - -func (m *Ext) GetData() string { - if m != nil && m.Data != nil { - return *m.Data - } - return "" -} - -var E_Ext_More = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: (*Ext)(nil), - Field: 103, - Name: "testdata.Ext.more", - Tag: "bytes,103,opt,name=more", -} - -var E_Ext_Text = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: (*string)(nil), - Field: 104, - Name: "testdata.Ext.text", - Tag: "bytes,104,opt,name=text", -} - -var E_Ext_Number = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: (*int32)(nil), - Field: 105, - Name: "testdata.Ext.number", - Tag: "varint,105,opt,name=number", -} - -type MyMessageSet struct { - XXX_extensions map[int32]proto.Extension `json:"-"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MyMessageSet) Reset() { *m = MyMessageSet{} } -func (m *MyMessageSet) String() string { return proto.CompactTextString(m) } -func (*MyMessageSet) ProtoMessage() {} - -func (m *MyMessageSet) Marshal() ([]byte, error) { - return proto.MarshalMessageSet(m.ExtensionMap()) -} -func (m *MyMessageSet) Unmarshal(buf []byte) error { - return proto.UnmarshalMessageSet(buf, m.ExtensionMap()) -} -func (m *MyMessageSet) MarshalJSON() ([]byte, error) { - return proto.MarshalMessageSetJSON(m.XXX_extensions) -} -func (m *MyMessageSet) UnmarshalJSON(buf []byte) error { - return proto.UnmarshalMessageSetJSON(buf, m.XXX_extensions) -} - -// ensure MyMessageSet satisfies proto.Marshaler and proto.Unmarshaler -var _ proto.Marshaler = (*MyMessageSet)(nil) -var _ proto.Unmarshaler = (*MyMessageSet)(nil) - -var extRange_MyMessageSet = []proto.ExtensionRange{ - {100, 2147483646}, -} - -func (*MyMessageSet) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_MyMessageSet -} -func (m *MyMessageSet) ExtensionMap() map[int32]proto.Extension { - if m.XXX_extensions == nil { - m.XXX_extensions = make(map[int32]proto.Extension) - } - return m.XXX_extensions -} - -type Empty struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *Empty) Reset() { *m = Empty{} } -func (m *Empty) String() string { return proto.CompactTextString(m) } -func (*Empty) ProtoMessage() {} - -type MessageList struct { - Message []*MessageList_Message `protobuf:"group,1,rep" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MessageList) Reset() { *m = MessageList{} } -func (m *MessageList) String() string { return proto.CompactTextString(m) } -func (*MessageList) ProtoMessage() {} - -func (m *MessageList) GetMessage() []*MessageList_Message { - if m != nil { - return m.Message - } - return nil -} - -type MessageList_Message struct { - Name *string `protobuf:"bytes,2,req,name=name" json:"name,omitempty"` - Count *int32 `protobuf:"varint,3,req,name=count" json:"count,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MessageList_Message) Reset() { *m = MessageList_Message{} } -func (m *MessageList_Message) String() string { return proto.CompactTextString(m) } -func (*MessageList_Message) ProtoMessage() {} - -func (m *MessageList_Message) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *MessageList_Message) GetCount() int32 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -type Strings struct { - StringField *string `protobuf:"bytes,1,opt,name=string_field" json:"string_field,omitempty"` - BytesField []byte `protobuf:"bytes,2,opt,name=bytes_field" json:"bytes_field,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Strings) Reset() { *m = Strings{} } -func (m *Strings) String() string { return proto.CompactTextString(m) } -func (*Strings) ProtoMessage() {} - -func (m *Strings) GetStringField() string { - if m != nil && m.StringField != nil { - return *m.StringField - } - return "" -} - -func (m *Strings) GetBytesField() []byte { - if m != nil { - return m.BytesField - } - return nil -} - -type Defaults struct { - // Default-valued fields of all basic types. - // Same as GoTest, but copied here to make testing easier. - F_Bool *bool `protobuf:"varint,1,opt,def=1" json:"F_Bool,omitempty"` - F_Int32 *int32 `protobuf:"varint,2,opt,def=32" json:"F_Int32,omitempty"` - F_Int64 *int64 `protobuf:"varint,3,opt,def=64" json:"F_Int64,omitempty"` - F_Fixed32 *uint32 `protobuf:"fixed32,4,opt,def=320" json:"F_Fixed32,omitempty"` - F_Fixed64 *uint64 `protobuf:"fixed64,5,opt,def=640" json:"F_Fixed64,omitempty"` - F_Uint32 *uint32 `protobuf:"varint,6,opt,def=3200" json:"F_Uint32,omitempty"` - F_Uint64 *uint64 `protobuf:"varint,7,opt,def=6400" json:"F_Uint64,omitempty"` - F_Float *float32 `protobuf:"fixed32,8,opt,def=314159" json:"F_Float,omitempty"` - F_Double *float64 `protobuf:"fixed64,9,opt,def=271828" json:"F_Double,omitempty"` - F_String *string `protobuf:"bytes,10,opt,def=hello, \"world!\"\n" json:"F_String,omitempty"` - F_Bytes []byte `protobuf:"bytes,11,opt,def=Bignose" json:"F_Bytes,omitempty"` - F_Sint32 *int32 `protobuf:"zigzag32,12,opt,def=-32" json:"F_Sint32,omitempty"` - F_Sint64 *int64 `protobuf:"zigzag64,13,opt,def=-64" json:"F_Sint64,omitempty"` - F_Enum *Defaults_Color `protobuf:"varint,14,opt,enum=testdata.Defaults_Color,def=1" json:"F_Enum,omitempty"` - // More fields with crazy defaults. - F_Pinf *float32 `protobuf:"fixed32,15,opt,def=inf" json:"F_Pinf,omitempty"` - F_Ninf *float32 `protobuf:"fixed32,16,opt,def=-inf" json:"F_Ninf,omitempty"` - F_Nan *float32 `protobuf:"fixed32,17,opt,def=nan" json:"F_Nan,omitempty"` - // Sub-message. - Sub *SubDefaults `protobuf:"bytes,18,opt,name=sub" json:"sub,omitempty"` - // Redundant but explicit defaults. - StrZero *string `protobuf:"bytes,19,opt,name=str_zero,def=" json:"str_zero,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Defaults) Reset() { *m = Defaults{} } -func (m *Defaults) String() string { return proto.CompactTextString(m) } -func (*Defaults) ProtoMessage() {} - -const Default_Defaults_F_Bool bool = true -const Default_Defaults_F_Int32 int32 = 32 -const Default_Defaults_F_Int64 int64 = 64 -const Default_Defaults_F_Fixed32 uint32 = 320 -const Default_Defaults_F_Fixed64 uint64 = 640 -const Default_Defaults_F_Uint32 uint32 = 3200 -const Default_Defaults_F_Uint64 uint64 = 6400 -const Default_Defaults_F_Float float32 = 314159 -const Default_Defaults_F_Double float64 = 271828 -const Default_Defaults_F_String string = "hello, \"world!\"\n" - -var Default_Defaults_F_Bytes []byte = []byte("Bignose") - -const Default_Defaults_F_Sint32 int32 = -32 -const Default_Defaults_F_Sint64 int64 = -64 -const Default_Defaults_F_Enum Defaults_Color = Defaults_GREEN - -var Default_Defaults_F_Pinf float32 = float32(math.Inf(1)) -var Default_Defaults_F_Ninf float32 = float32(math.Inf(-1)) -var Default_Defaults_F_Nan float32 = float32(math.NaN()) - -func (m *Defaults) GetF_Bool() bool { - if m != nil && m.F_Bool != nil { - return *m.F_Bool - } - return Default_Defaults_F_Bool -} - -func (m *Defaults) GetF_Int32() int32 { - if m != nil && m.F_Int32 != nil { - return *m.F_Int32 - } - return Default_Defaults_F_Int32 -} - -func (m *Defaults) GetF_Int64() int64 { - if m != nil && m.F_Int64 != nil { - return *m.F_Int64 - } - return Default_Defaults_F_Int64 -} - -func (m *Defaults) GetF_Fixed32() uint32 { - if m != nil && m.F_Fixed32 != nil { - return *m.F_Fixed32 - } - return Default_Defaults_F_Fixed32 -} - -func (m *Defaults) GetF_Fixed64() uint64 { - if m != nil && m.F_Fixed64 != nil { - return *m.F_Fixed64 - } - return Default_Defaults_F_Fixed64 -} - -func (m *Defaults) GetF_Uint32() uint32 { - if m != nil && m.F_Uint32 != nil { - return *m.F_Uint32 - } - return Default_Defaults_F_Uint32 -} - -func (m *Defaults) GetF_Uint64() uint64 { - if m != nil && m.F_Uint64 != nil { - return *m.F_Uint64 - } - return Default_Defaults_F_Uint64 -} - -func (m *Defaults) GetF_Float() float32 { - if m != nil && m.F_Float != nil { - return *m.F_Float - } - return Default_Defaults_F_Float -} - -func (m *Defaults) GetF_Double() float64 { - if m != nil && m.F_Double != nil { - return *m.F_Double - } - return Default_Defaults_F_Double -} - -func (m *Defaults) GetF_String() string { - if m != nil && m.F_String != nil { - return *m.F_String - } - return Default_Defaults_F_String -} - -func (m *Defaults) GetF_Bytes() []byte { - if m != nil && m.F_Bytes != nil { - return m.F_Bytes - } - return append([]byte(nil), Default_Defaults_F_Bytes...) -} - -func (m *Defaults) GetF_Sint32() int32 { - if m != nil && m.F_Sint32 != nil { - return *m.F_Sint32 - } - return Default_Defaults_F_Sint32 -} - -func (m *Defaults) GetF_Sint64() int64 { - if m != nil && m.F_Sint64 != nil { - return *m.F_Sint64 - } - return Default_Defaults_F_Sint64 -} - -func (m *Defaults) GetF_Enum() Defaults_Color { - if m != nil && m.F_Enum != nil { - return *m.F_Enum - } - return Default_Defaults_F_Enum -} - -func (m *Defaults) GetF_Pinf() float32 { - if m != nil && m.F_Pinf != nil { - return *m.F_Pinf - } - return Default_Defaults_F_Pinf -} - -func (m *Defaults) GetF_Ninf() float32 { - if m != nil && m.F_Ninf != nil { - return *m.F_Ninf - } - return Default_Defaults_F_Ninf -} - -func (m *Defaults) GetF_Nan() float32 { - if m != nil && m.F_Nan != nil { - return *m.F_Nan - } - return Default_Defaults_F_Nan -} - -func (m *Defaults) GetSub() *SubDefaults { - if m != nil { - return m.Sub - } - return nil -} - -func (m *Defaults) GetStrZero() string { - if m != nil && m.StrZero != nil { - return *m.StrZero - } - return "" -} - -type SubDefaults struct { - N *int64 `protobuf:"varint,1,opt,name=n,def=7" json:"n,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SubDefaults) Reset() { *m = SubDefaults{} } -func (m *SubDefaults) String() string { return proto.CompactTextString(m) } -func (*SubDefaults) ProtoMessage() {} - -const Default_SubDefaults_N int64 = 7 - -func (m *SubDefaults) GetN() int64 { - if m != nil && m.N != nil { - return *m.N - } - return Default_SubDefaults_N -} - -type RepeatedEnum struct { - Color []RepeatedEnum_Color `protobuf:"varint,1,rep,name=color,enum=testdata.RepeatedEnum_Color" json:"color,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *RepeatedEnum) Reset() { *m = RepeatedEnum{} } -func (m *RepeatedEnum) String() string { return proto.CompactTextString(m) } -func (*RepeatedEnum) ProtoMessage() {} - -func (m *RepeatedEnum) GetColor() []RepeatedEnum_Color { - if m != nil { - return m.Color - } - return nil -} - -type MoreRepeated struct { - Bools []bool `protobuf:"varint,1,rep,name=bools" json:"bools,omitempty"` - BoolsPacked []bool `protobuf:"varint,2,rep,packed,name=bools_packed" json:"bools_packed,omitempty"` - Ints []int32 `protobuf:"varint,3,rep,name=ints" json:"ints,omitempty"` - IntsPacked []int32 `protobuf:"varint,4,rep,packed,name=ints_packed" json:"ints_packed,omitempty"` - Int64SPacked []int64 `protobuf:"varint,7,rep,packed,name=int64s_packed" json:"int64s_packed,omitempty"` - Strings []string `protobuf:"bytes,5,rep,name=strings" json:"strings,omitempty"` - Fixeds []uint32 `protobuf:"fixed32,6,rep,name=fixeds" json:"fixeds,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MoreRepeated) Reset() { *m = MoreRepeated{} } -func (m *MoreRepeated) String() string { return proto.CompactTextString(m) } -func (*MoreRepeated) ProtoMessage() {} - -func (m *MoreRepeated) GetBools() []bool { - if m != nil { - return m.Bools - } - return nil -} - -func (m *MoreRepeated) GetBoolsPacked() []bool { - if m != nil { - return m.BoolsPacked - } - return nil -} - -func (m *MoreRepeated) GetInts() []int32 { - if m != nil { - return m.Ints - } - return nil -} - -func (m *MoreRepeated) GetIntsPacked() []int32 { - if m != nil { - return m.IntsPacked - } - return nil -} - -func (m *MoreRepeated) GetInt64SPacked() []int64 { - if m != nil { - return m.Int64SPacked - } - return nil -} - -func (m *MoreRepeated) GetStrings() []string { - if m != nil { - return m.Strings - } - return nil -} - -func (m *MoreRepeated) GetFixeds() []uint32 { - if m != nil { - return m.Fixeds - } - return nil -} - -type GroupOld struct { - G *GroupOld_G `protobuf:"group,101,opt" json:"g,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupOld) Reset() { *m = GroupOld{} } -func (m *GroupOld) String() string { return proto.CompactTextString(m) } -func (*GroupOld) ProtoMessage() {} - -func (m *GroupOld) GetG() *GroupOld_G { - if m != nil { - return m.G - } - return nil -} - -type GroupOld_G struct { - X *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupOld_G) Reset() { *m = GroupOld_G{} } -func (m *GroupOld_G) String() string { return proto.CompactTextString(m) } -func (*GroupOld_G) ProtoMessage() {} - -func (m *GroupOld_G) GetX() int32 { - if m != nil && m.X != nil { - return *m.X - } - return 0 -} - -type GroupNew struct { - G *GroupNew_G `protobuf:"group,101,opt" json:"g,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupNew) Reset() { *m = GroupNew{} } -func (m *GroupNew) String() string { return proto.CompactTextString(m) } -func (*GroupNew) ProtoMessage() {} - -func (m *GroupNew) GetG() *GroupNew_G { - if m != nil { - return m.G - } - return nil -} - -type GroupNew_G struct { - X *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"` - Y *int32 `protobuf:"varint,3,opt,name=y" json:"y,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupNew_G) Reset() { *m = GroupNew_G{} } -func (m *GroupNew_G) String() string { return proto.CompactTextString(m) } -func (*GroupNew_G) ProtoMessage() {} - -func (m *GroupNew_G) GetX() int32 { - if m != nil && m.X != nil { - return *m.X - } - return 0 -} - -func (m *GroupNew_G) GetY() int32 { - if m != nil && m.Y != nil { - return *m.Y - } - return 0 -} - -type FloatingPoint struct { - F *float64 `protobuf:"fixed64,1,req,name=f" json:"f,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *FloatingPoint) Reset() { *m = FloatingPoint{} } -func (m *FloatingPoint) String() string { return proto.CompactTextString(m) } -func (*FloatingPoint) ProtoMessage() {} - -func (m *FloatingPoint) GetF() float64 { - if m != nil && m.F != nil { - return *m.F - } - return 0 -} - -type MessageWithMap struct { - NameMapping map[int32]string `protobuf:"bytes,1,rep,name=name_mapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - MsgMapping map[int64]*FloatingPoint `protobuf:"bytes,2,rep,name=msg_mapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - ByteMapping map[bool][]byte `protobuf:"bytes,3,rep,name=byte_mapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - StrToStr map[string]string `protobuf:"bytes,4,rep,name=str_to_str" json:"str_to_str,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MessageWithMap) Reset() { *m = MessageWithMap{} } -func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } -func (*MessageWithMap) ProtoMessage() {} - -func (m *MessageWithMap) GetNameMapping() map[int32]string { - if m != nil { - return m.NameMapping - } - return nil -} - -func (m *MessageWithMap) GetMsgMapping() map[int64]*FloatingPoint { - if m != nil { - return m.MsgMapping - } - return nil -} - -func (m *MessageWithMap) GetByteMapping() map[bool][]byte { - if m != nil { - return m.ByteMapping - } - return nil -} - -func (m *MessageWithMap) GetStrToStr() map[string]string { - if m != nil { - return m.StrToStr - } - return nil -} - -var E_Greeting = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: ([]string)(nil), - Field: 106, - Name: "testdata.greeting", - Tag: "bytes,106,rep,name=greeting", -} - -var E_X201 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 201, - Name: "testdata.x201", - Tag: "bytes,201,opt,name=x201", -} - -var E_X202 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 202, - Name: "testdata.x202", - Tag: "bytes,202,opt,name=x202", -} - -var E_X203 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 203, - Name: "testdata.x203", - Tag: "bytes,203,opt,name=x203", -} - -var E_X204 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 204, - Name: "testdata.x204", - Tag: "bytes,204,opt,name=x204", -} - -var E_X205 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 205, - Name: "testdata.x205", - Tag: "bytes,205,opt,name=x205", -} - -var E_X206 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 206, - Name: "testdata.x206", - Tag: "bytes,206,opt,name=x206", -} - -var E_X207 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 207, - Name: "testdata.x207", - Tag: "bytes,207,opt,name=x207", -} - -var E_X208 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 208, - Name: "testdata.x208", - Tag: "bytes,208,opt,name=x208", -} - -var E_X209 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 209, - Name: "testdata.x209", - Tag: "bytes,209,opt,name=x209", -} - -var E_X210 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 210, - Name: "testdata.x210", - Tag: "bytes,210,opt,name=x210", -} - -var E_X211 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 211, - Name: "testdata.x211", - Tag: "bytes,211,opt,name=x211", -} - -var E_X212 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 212, - Name: "testdata.x212", - Tag: "bytes,212,opt,name=x212", -} - -var E_X213 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 213, - Name: "testdata.x213", - Tag: "bytes,213,opt,name=x213", -} - -var E_X214 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 214, - Name: "testdata.x214", - Tag: "bytes,214,opt,name=x214", -} - -var E_X215 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 215, - Name: "testdata.x215", - Tag: "bytes,215,opt,name=x215", -} - -var E_X216 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 216, - Name: "testdata.x216", - Tag: "bytes,216,opt,name=x216", -} - -var E_X217 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 217, - Name: "testdata.x217", - Tag: "bytes,217,opt,name=x217", -} - -var E_X218 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 218, - Name: "testdata.x218", - Tag: "bytes,218,opt,name=x218", -} - -var E_X219 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 219, - Name: "testdata.x219", - Tag: "bytes,219,opt,name=x219", -} - -var E_X220 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 220, - Name: "testdata.x220", - Tag: "bytes,220,opt,name=x220", -} - -var E_X221 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 221, - Name: "testdata.x221", - Tag: "bytes,221,opt,name=x221", -} - -var E_X222 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 222, - Name: "testdata.x222", - Tag: "bytes,222,opt,name=x222", -} - -var E_X223 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 223, - Name: "testdata.x223", - Tag: "bytes,223,opt,name=x223", -} - -var E_X224 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 224, - Name: "testdata.x224", - Tag: "bytes,224,opt,name=x224", -} - -var E_X225 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 225, - Name: "testdata.x225", - Tag: "bytes,225,opt,name=x225", -} - -var E_X226 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 226, - Name: "testdata.x226", - Tag: "bytes,226,opt,name=x226", -} - -var E_X227 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 227, - Name: "testdata.x227", - Tag: "bytes,227,opt,name=x227", -} - -var E_X228 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 228, - Name: "testdata.x228", - Tag: "bytes,228,opt,name=x228", -} - -var E_X229 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 229, - Name: "testdata.x229", - Tag: "bytes,229,opt,name=x229", -} - -var E_X230 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 230, - Name: "testdata.x230", - Tag: "bytes,230,opt,name=x230", -} - -var E_X231 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 231, - Name: "testdata.x231", - Tag: "bytes,231,opt,name=x231", -} - -var E_X232 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 232, - Name: "testdata.x232", - Tag: "bytes,232,opt,name=x232", -} - -var E_X233 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 233, - Name: "testdata.x233", - Tag: "bytes,233,opt,name=x233", -} - -var E_X234 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 234, - Name: "testdata.x234", - Tag: "bytes,234,opt,name=x234", -} - -var E_X235 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 235, - Name: "testdata.x235", - Tag: "bytes,235,opt,name=x235", -} - -var E_X236 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 236, - Name: "testdata.x236", - Tag: "bytes,236,opt,name=x236", -} - -var E_X237 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 237, - Name: "testdata.x237", - Tag: "bytes,237,opt,name=x237", -} - -var E_X238 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 238, - Name: "testdata.x238", - Tag: "bytes,238,opt,name=x238", -} - -var E_X239 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 239, - Name: "testdata.x239", - Tag: "bytes,239,opt,name=x239", -} - -var E_X240 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 240, - Name: "testdata.x240", - Tag: "bytes,240,opt,name=x240", -} - -var E_X241 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 241, - Name: "testdata.x241", - Tag: "bytes,241,opt,name=x241", -} - -var E_X242 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 242, - Name: "testdata.x242", - Tag: "bytes,242,opt,name=x242", -} - -var E_X243 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 243, - Name: "testdata.x243", - Tag: "bytes,243,opt,name=x243", -} - -var E_X244 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 244, - Name: "testdata.x244", - Tag: "bytes,244,opt,name=x244", -} - -var E_X245 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 245, - Name: "testdata.x245", - Tag: "bytes,245,opt,name=x245", -} - -var E_X246 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 246, - Name: "testdata.x246", - Tag: "bytes,246,opt,name=x246", -} - -var E_X247 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 247, - Name: "testdata.x247", - Tag: "bytes,247,opt,name=x247", -} - -var E_X248 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 248, - Name: "testdata.x248", - Tag: "bytes,248,opt,name=x248", -} - -var E_X249 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 249, - Name: "testdata.x249", - Tag: "bytes,249,opt,name=x249", -} - -var E_X250 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 250, - Name: "testdata.x250", - Tag: "bytes,250,opt,name=x250", -} - -func init() { - proto.RegisterEnum("testdata.FOO", FOO_name, FOO_value) - proto.RegisterEnum("testdata.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value) - proto.RegisterEnum("testdata.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value) - proto.RegisterEnum("testdata.Defaults_Color", Defaults_Color_name, Defaults_Color_value) - proto.RegisterEnum("testdata.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value) - proto.RegisterExtension(E_Ext_More) - proto.RegisterExtension(E_Ext_Text) - proto.RegisterExtension(E_Ext_Number) - proto.RegisterExtension(E_Greeting) - proto.RegisterExtension(E_X201) - proto.RegisterExtension(E_X202) - proto.RegisterExtension(E_X203) - proto.RegisterExtension(E_X204) - proto.RegisterExtension(E_X205) - proto.RegisterExtension(E_X206) - proto.RegisterExtension(E_X207) - proto.RegisterExtension(E_X208) - proto.RegisterExtension(E_X209) - proto.RegisterExtension(E_X210) - proto.RegisterExtension(E_X211) - proto.RegisterExtension(E_X212) - proto.RegisterExtension(E_X213) - proto.RegisterExtension(E_X214) - proto.RegisterExtension(E_X215) - proto.RegisterExtension(E_X216) - proto.RegisterExtension(E_X217) - proto.RegisterExtension(E_X218) - proto.RegisterExtension(E_X219) - proto.RegisterExtension(E_X220) - proto.RegisterExtension(E_X221) - proto.RegisterExtension(E_X222) - proto.RegisterExtension(E_X223) - proto.RegisterExtension(E_X224) - proto.RegisterExtension(E_X225) - proto.RegisterExtension(E_X226) - proto.RegisterExtension(E_X227) - proto.RegisterExtension(E_X228) - proto.RegisterExtension(E_X229) - proto.RegisterExtension(E_X230) - proto.RegisterExtension(E_X231) - proto.RegisterExtension(E_X232) - proto.RegisterExtension(E_X233) - proto.RegisterExtension(E_X234) - proto.RegisterExtension(E_X235) - proto.RegisterExtension(E_X236) - proto.RegisterExtension(E_X237) - proto.RegisterExtension(E_X238) - proto.RegisterExtension(E_X239) - proto.RegisterExtension(E_X240) - proto.RegisterExtension(E_X241) - proto.RegisterExtension(E_X242) - proto.RegisterExtension(E_X243) - proto.RegisterExtension(E_X244) - proto.RegisterExtension(E_X245) - proto.RegisterExtension(E_X246) - proto.RegisterExtension(E_X247) - proto.RegisterExtension(E_X248) - proto.RegisterExtension(E_X249) - proto.RegisterExtension(E_X250) -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.pb.go.golden b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.pb.go.golden deleted file mode 100644 index 0387853..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.pb.go.golden +++ /dev/null @@ -1,1737 +0,0 @@ -// Code generated by protoc-gen-gogo. -// source: test.proto -// DO NOT EDIT! - -package testdata - -import proto "github.com/gogo/protobuf/proto" -import json "encoding/json" -import math "math" - -import () - -// Reference proto, json, and math imports to suppress error if they are not otherwise used. -var _ = proto.Marshal -var _ = &json.SyntaxError{} -var _ = math.Inf - -type FOO int32 - -const ( - FOO_FOO1 FOO = 1 -) - -var FOO_name = map[int32]string{ - 1: "FOO1", -} -var FOO_value = map[string]int32{ - "FOO1": 1, -} - -func (x FOO) Enum() *FOO { - p := new(FOO) - *p = x - return p -} -func (x FOO) String() string { - return proto.EnumName(FOO_name, int32(x)) -} -func (x FOO) MarshalJSON() ([]byte, error) { - return json.Marshal(x.String()) -} -func (x *FOO) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FOO_value, data, "FOO") - if err != nil { - return err - } - *x = FOO(value) - return nil -} - -type GoTest_KIND int32 - -const ( - GoTest_VOID GoTest_KIND = 0 - GoTest_BOOL GoTest_KIND = 1 - GoTest_BYTES GoTest_KIND = 2 - GoTest_FINGERPRINT GoTest_KIND = 3 - GoTest_FLOAT GoTest_KIND = 4 - GoTest_INT GoTest_KIND = 5 - GoTest_STRING GoTest_KIND = 6 - GoTest_TIME GoTest_KIND = 7 - GoTest_TUPLE GoTest_KIND = 8 - GoTest_ARRAY GoTest_KIND = 9 - GoTest_MAP GoTest_KIND = 10 - GoTest_TABLE GoTest_KIND = 11 - GoTest_FUNCTION GoTest_KIND = 12 -) - -var GoTest_KIND_name = map[int32]string{ - 0: "VOID", - 1: "BOOL", - 2: "BYTES", - 3: "FINGERPRINT", - 4: "FLOAT", - 5: "INT", - 6: "STRING", - 7: "TIME", - 8: "TUPLE", - 9: "ARRAY", - 10: "MAP", - 11: "TABLE", - 12: "FUNCTION", -} -var GoTest_KIND_value = map[string]int32{ - "VOID": 0, - "BOOL": 1, - "BYTES": 2, - "FINGERPRINT": 3, - "FLOAT": 4, - "INT": 5, - "STRING": 6, - "TIME": 7, - "TUPLE": 8, - "ARRAY": 9, - "MAP": 10, - "TABLE": 11, - "FUNCTION": 12, -} - -func (x GoTest_KIND) Enum() *GoTest_KIND { - p := new(GoTest_KIND) - *p = x - return p -} -func (x GoTest_KIND) String() string { - return proto.EnumName(GoTest_KIND_name, int32(x)) -} -func (x GoTest_KIND) MarshalJSON() ([]byte, error) { - return json.Marshal(x.String()) -} -func (x *GoTest_KIND) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(GoTest_KIND_value, data, "GoTest_KIND") - if err != nil { - return err - } - *x = GoTest_KIND(value) - return nil -} - -type MyMessage_Color int32 - -const ( - MyMessage_RED MyMessage_Color = 0 - MyMessage_GREEN MyMessage_Color = 1 - MyMessage_BLUE MyMessage_Color = 2 -) - -var MyMessage_Color_name = map[int32]string{ - 0: "RED", - 1: "GREEN", - 2: "BLUE", -} -var MyMessage_Color_value = map[string]int32{ - "RED": 0, - "GREEN": 1, - "BLUE": 2, -} - -func (x MyMessage_Color) Enum() *MyMessage_Color { - p := new(MyMessage_Color) - *p = x - return p -} -func (x MyMessage_Color) String() string { - return proto.EnumName(MyMessage_Color_name, int32(x)) -} -func (x MyMessage_Color) MarshalJSON() ([]byte, error) { - return json.Marshal(x.String()) -} -func (x *MyMessage_Color) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(MyMessage_Color_value, data, "MyMessage_Color") - if err != nil { - return err - } - *x = MyMessage_Color(value) - return nil -} - -type Defaults_Color int32 - -const ( - Defaults_RED Defaults_Color = 0 - Defaults_GREEN Defaults_Color = 1 - Defaults_BLUE Defaults_Color = 2 -) - -var Defaults_Color_name = map[int32]string{ - 0: "RED", - 1: "GREEN", - 2: "BLUE", -} -var Defaults_Color_value = map[string]int32{ - "RED": 0, - "GREEN": 1, - "BLUE": 2, -} - -func (x Defaults_Color) Enum() *Defaults_Color { - p := new(Defaults_Color) - *p = x - return p -} -func (x Defaults_Color) String() string { - return proto.EnumName(Defaults_Color_name, int32(x)) -} -func (x Defaults_Color) MarshalJSON() ([]byte, error) { - return json.Marshal(x.String()) -} -func (x *Defaults_Color) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Defaults_Color_value, data, "Defaults_Color") - if err != nil { - return err - } - *x = Defaults_Color(value) - return nil -} - -type RepeatedEnum_Color int32 - -const ( - RepeatedEnum_RED RepeatedEnum_Color = 1 -) - -var RepeatedEnum_Color_name = map[int32]string{ - 1: "RED", -} -var RepeatedEnum_Color_value = map[string]int32{ - "RED": 1, -} - -func (x RepeatedEnum_Color) Enum() *RepeatedEnum_Color { - p := new(RepeatedEnum_Color) - *p = x - return p -} -func (x RepeatedEnum_Color) String() string { - return proto.EnumName(RepeatedEnum_Color_name, int32(x)) -} -func (x RepeatedEnum_Color) MarshalJSON() ([]byte, error) { - return json.Marshal(x.String()) -} -func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(RepeatedEnum_Color_value, data, "RepeatedEnum_Color") - if err != nil { - return err - } - *x = RepeatedEnum_Color(value) - return nil -} - -type GoEnum struct { - Foo *FOO `protobuf:"varint,1,req,name=foo,enum=testdata.FOO" json:"foo,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoEnum) Reset() { *m = GoEnum{} } -func (m *GoEnum) String() string { return proto.CompactTextString(m) } -func (*GoEnum) ProtoMessage() {} - -func (m *GoEnum) GetFoo() FOO { - if m != nil && m.Foo != nil { - return *m.Foo - } - return 0 -} - -type GoTestField struct { - Label *string `protobuf:"bytes,1,req" json:"Label,omitempty"` - Type *string `protobuf:"bytes,2,req" json:"Type,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTestField) Reset() { *m = GoTestField{} } -func (m *GoTestField) String() string { return proto.CompactTextString(m) } -func (*GoTestField) ProtoMessage() {} - -func (m *GoTestField) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *GoTestField) GetType() string { - if m != nil && m.Type != nil { - return *m.Type - } - return "" -} - -type GoTest struct { - Kind *GoTest_KIND `protobuf:"varint,1,req,enum=testdata.GoTest_KIND" json:"Kind,omitempty"` - Table *string `protobuf:"bytes,2,opt" json:"Table,omitempty"` - Param *int32 `protobuf:"varint,3,opt" json:"Param,omitempty"` - RequiredField *GoTestField `protobuf:"bytes,4,req" json:"RequiredField,omitempty"` - RepeatedField []*GoTestField `protobuf:"bytes,5,rep" json:"RepeatedField,omitempty"` - OptionalField *GoTestField `protobuf:"bytes,6,opt" json:"OptionalField,omitempty"` - F_BoolRequired *bool `protobuf:"varint,10,req,name=F_Bool_required" json:"F_Bool_required,omitempty"` - F_Int32Required *int32 `protobuf:"varint,11,req,name=F_Int32_required" json:"F_Int32_required,omitempty"` - F_Int64Required *int64 `protobuf:"varint,12,req,name=F_Int64_required" json:"F_Int64_required,omitempty"` - F_Fixed32Required *uint32 `protobuf:"fixed32,13,req,name=F_Fixed32_required" json:"F_Fixed32_required,omitempty"` - F_Fixed64Required *uint64 `protobuf:"fixed64,14,req,name=F_Fixed64_required" json:"F_Fixed64_required,omitempty"` - F_Uint32Required *uint32 `protobuf:"varint,15,req,name=F_Uint32_required" json:"F_Uint32_required,omitempty"` - F_Uint64Required *uint64 `protobuf:"varint,16,req,name=F_Uint64_required" json:"F_Uint64_required,omitempty"` - F_FloatRequired *float32 `protobuf:"fixed32,17,req,name=F_Float_required" json:"F_Float_required,omitempty"` - F_DoubleRequired *float64 `protobuf:"fixed64,18,req,name=F_Double_required" json:"F_Double_required,omitempty"` - F_StringRequired *string `protobuf:"bytes,19,req,name=F_String_required" json:"F_String_required,omitempty"` - F_BytesRequired []byte `protobuf:"bytes,101,req,name=F_Bytes_required" json:"F_Bytes_required,omitempty"` - F_Sint32Required *int32 `protobuf:"zigzag32,102,req,name=F_Sint32_required" json:"F_Sint32_required,omitempty"` - F_Sint64Required *int64 `protobuf:"zigzag64,103,req,name=F_Sint64_required" json:"F_Sint64_required,omitempty"` - F_BoolRepeated []bool `protobuf:"varint,20,rep,name=F_Bool_repeated" json:"F_Bool_repeated,omitempty"` - F_Int32Repeated []int32 `protobuf:"varint,21,rep,name=F_Int32_repeated" json:"F_Int32_repeated,omitempty"` - F_Int64Repeated []int64 `protobuf:"varint,22,rep,name=F_Int64_repeated" json:"F_Int64_repeated,omitempty"` - F_Fixed32Repeated []uint32 `protobuf:"fixed32,23,rep,name=F_Fixed32_repeated" json:"F_Fixed32_repeated,omitempty"` - F_Fixed64Repeated []uint64 `protobuf:"fixed64,24,rep,name=F_Fixed64_repeated" json:"F_Fixed64_repeated,omitempty"` - F_Uint32Repeated []uint32 `protobuf:"varint,25,rep,name=F_Uint32_repeated" json:"F_Uint32_repeated,omitempty"` - F_Uint64Repeated []uint64 `protobuf:"varint,26,rep,name=F_Uint64_repeated" json:"F_Uint64_repeated,omitempty"` - F_FloatRepeated []float32 `protobuf:"fixed32,27,rep,name=F_Float_repeated" json:"F_Float_repeated,omitempty"` - F_DoubleRepeated []float64 `protobuf:"fixed64,28,rep,name=F_Double_repeated" json:"F_Double_repeated,omitempty"` - F_StringRepeated []string `protobuf:"bytes,29,rep,name=F_String_repeated" json:"F_String_repeated,omitempty"` - F_BytesRepeated [][]byte `protobuf:"bytes,201,rep,name=F_Bytes_repeated" json:"F_Bytes_repeated,omitempty"` - F_Sint32Repeated []int32 `protobuf:"zigzag32,202,rep,name=F_Sint32_repeated" json:"F_Sint32_repeated,omitempty"` - F_Sint64Repeated []int64 `protobuf:"zigzag64,203,rep,name=F_Sint64_repeated" json:"F_Sint64_repeated,omitempty"` - F_BoolOptional *bool `protobuf:"varint,30,opt,name=F_Bool_optional" json:"F_Bool_optional,omitempty"` - F_Int32Optional *int32 `protobuf:"varint,31,opt,name=F_Int32_optional" json:"F_Int32_optional,omitempty"` - F_Int64Optional *int64 `protobuf:"varint,32,opt,name=F_Int64_optional" json:"F_Int64_optional,omitempty"` - F_Fixed32Optional *uint32 `protobuf:"fixed32,33,opt,name=F_Fixed32_optional" json:"F_Fixed32_optional,omitempty"` - F_Fixed64Optional *uint64 `protobuf:"fixed64,34,opt,name=F_Fixed64_optional" json:"F_Fixed64_optional,omitempty"` - F_Uint32Optional *uint32 `protobuf:"varint,35,opt,name=F_Uint32_optional" json:"F_Uint32_optional,omitempty"` - F_Uint64Optional *uint64 `protobuf:"varint,36,opt,name=F_Uint64_optional" json:"F_Uint64_optional,omitempty"` - F_FloatOptional *float32 `protobuf:"fixed32,37,opt,name=F_Float_optional" json:"F_Float_optional,omitempty"` - F_DoubleOptional *float64 `protobuf:"fixed64,38,opt,name=F_Double_optional" json:"F_Double_optional,omitempty"` - F_StringOptional *string `protobuf:"bytes,39,opt,name=F_String_optional" json:"F_String_optional,omitempty"` - F_BytesOptional []byte `protobuf:"bytes,301,opt,name=F_Bytes_optional" json:"F_Bytes_optional,omitempty"` - F_Sint32Optional *int32 `protobuf:"zigzag32,302,opt,name=F_Sint32_optional" json:"F_Sint32_optional,omitempty"` - F_Sint64Optional *int64 `protobuf:"zigzag64,303,opt,name=F_Sint64_optional" json:"F_Sint64_optional,omitempty"` - F_BoolDefaulted *bool `protobuf:"varint,40,opt,name=F_Bool_defaulted,def=1" json:"F_Bool_defaulted,omitempty"` - F_Int32Defaulted *int32 `protobuf:"varint,41,opt,name=F_Int32_defaulted,def=32" json:"F_Int32_defaulted,omitempty"` - F_Int64Defaulted *int64 `protobuf:"varint,42,opt,name=F_Int64_defaulted,def=64" json:"F_Int64_defaulted,omitempty"` - F_Fixed32Defaulted *uint32 `protobuf:"fixed32,43,opt,name=F_Fixed32_defaulted,def=320" json:"F_Fixed32_defaulted,omitempty"` - F_Fixed64Defaulted *uint64 `protobuf:"fixed64,44,opt,name=F_Fixed64_defaulted,def=640" json:"F_Fixed64_defaulted,omitempty"` - F_Uint32Defaulted *uint32 `protobuf:"varint,45,opt,name=F_Uint32_defaulted,def=3200" json:"F_Uint32_defaulted,omitempty"` - F_Uint64Defaulted *uint64 `protobuf:"varint,46,opt,name=F_Uint64_defaulted,def=6400" json:"F_Uint64_defaulted,omitempty"` - F_FloatDefaulted *float32 `protobuf:"fixed32,47,opt,name=F_Float_defaulted,def=314159" json:"F_Float_defaulted,omitempty"` - F_DoubleDefaulted *float64 `protobuf:"fixed64,48,opt,name=F_Double_defaulted,def=271828" json:"F_Double_defaulted,omitempty"` - F_StringDefaulted *string `protobuf:"bytes,49,opt,name=F_String_defaulted,def=hello, \"world!\"\n" json:"F_String_defaulted,omitempty"` - F_BytesDefaulted []byte `protobuf:"bytes,401,opt,name=F_Bytes_defaulted,def=Bignose" json:"F_Bytes_defaulted,omitempty"` - F_Sint32Defaulted *int32 `protobuf:"zigzag32,402,opt,name=F_Sint32_defaulted,def=-32" json:"F_Sint32_defaulted,omitempty"` - F_Sint64Defaulted *int64 `protobuf:"zigzag64,403,opt,name=F_Sint64_defaulted,def=-64" json:"F_Sint64_defaulted,omitempty"` - F_BoolRepeatedPacked []bool `protobuf:"varint,50,rep,packed,name=F_Bool_repeated_packed" json:"F_Bool_repeated_packed,omitempty"` - F_Int32RepeatedPacked []int32 `protobuf:"varint,51,rep,packed,name=F_Int32_repeated_packed" json:"F_Int32_repeated_packed,omitempty"` - F_Int64RepeatedPacked []int64 `protobuf:"varint,52,rep,packed,name=F_Int64_repeated_packed" json:"F_Int64_repeated_packed,omitempty"` - F_Fixed32RepeatedPacked []uint32 `protobuf:"fixed32,53,rep,packed,name=F_Fixed32_repeated_packed" json:"F_Fixed32_repeated_packed,omitempty"` - F_Fixed64RepeatedPacked []uint64 `protobuf:"fixed64,54,rep,packed,name=F_Fixed64_repeated_packed" json:"F_Fixed64_repeated_packed,omitempty"` - F_Uint32RepeatedPacked []uint32 `protobuf:"varint,55,rep,packed,name=F_Uint32_repeated_packed" json:"F_Uint32_repeated_packed,omitempty"` - F_Uint64RepeatedPacked []uint64 `protobuf:"varint,56,rep,packed,name=F_Uint64_repeated_packed" json:"F_Uint64_repeated_packed,omitempty"` - F_FloatRepeatedPacked []float32 `protobuf:"fixed32,57,rep,packed,name=F_Float_repeated_packed" json:"F_Float_repeated_packed,omitempty"` - F_DoubleRepeatedPacked []float64 `protobuf:"fixed64,58,rep,packed,name=F_Double_repeated_packed" json:"F_Double_repeated_packed,omitempty"` - F_Sint32RepeatedPacked []int32 `protobuf:"zigzag32,502,rep,packed,name=F_Sint32_repeated_packed" json:"F_Sint32_repeated_packed,omitempty"` - F_Sint64RepeatedPacked []int64 `protobuf:"zigzag64,503,rep,packed,name=F_Sint64_repeated_packed" json:"F_Sint64_repeated_packed,omitempty"` - Requiredgroup *GoTest_RequiredGroup `protobuf:"group,70,req,name=RequiredGroup" json:"requiredgroup,omitempty"` - Repeatedgroup []*GoTest_RepeatedGroup `protobuf:"group,80,rep,name=RepeatedGroup" json:"repeatedgroup,omitempty"` - Optionalgroup *GoTest_OptionalGroup `protobuf:"group,90,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest) Reset() { *m = GoTest{} } -func (m *GoTest) String() string { return proto.CompactTextString(m) } -func (*GoTest) ProtoMessage() {} - -const Default_GoTest_F_BoolDefaulted bool = true -const Default_GoTest_F_Int32Defaulted int32 = 32 -const Default_GoTest_F_Int64Defaulted int64 = 64 -const Default_GoTest_F_Fixed32Defaulted uint32 = 320 -const Default_GoTest_F_Fixed64Defaulted uint64 = 640 -const Default_GoTest_F_Uint32Defaulted uint32 = 3200 -const Default_GoTest_F_Uint64Defaulted uint64 = 6400 -const Default_GoTest_F_FloatDefaulted float32 = 314159 -const Default_GoTest_F_DoubleDefaulted float64 = 271828 -const Default_GoTest_F_StringDefaulted string = "hello, \"world!\"\n" - -var Default_GoTest_F_BytesDefaulted []byte = []byte("Bignose") - -const Default_GoTest_F_Sint32Defaulted int32 = -32 -const Default_GoTest_F_Sint64Defaulted int64 = -64 - -func (m *GoTest) GetKind() GoTest_KIND { - if m != nil && m.Kind != nil { - return *m.Kind - } - return 0 -} - -func (m *GoTest) GetTable() string { - if m != nil && m.Table != nil { - return *m.Table - } - return "" -} - -func (m *GoTest) GetParam() int32 { - if m != nil && m.Param != nil { - return *m.Param - } - return 0 -} - -func (m *GoTest) GetRequiredField() *GoTestField { - if m != nil { - return m.RequiredField - } - return nil -} - -func (m *GoTest) GetRepeatedField() []*GoTestField { - if m != nil { - return m.RepeatedField - } - return nil -} - -func (m *GoTest) GetOptionalField() *GoTestField { - if m != nil { - return m.OptionalField - } - return nil -} - -func (m *GoTest) GetF_BoolRequired() bool { - if m != nil && m.F_BoolRequired != nil { - return *m.F_BoolRequired - } - return false -} - -func (m *GoTest) GetF_Int32Required() int32 { - if m != nil && m.F_Int32Required != nil { - return *m.F_Int32Required - } - return 0 -} - -func (m *GoTest) GetF_Int64Required() int64 { - if m != nil && m.F_Int64Required != nil { - return *m.F_Int64Required - } - return 0 -} - -func (m *GoTest) GetF_Fixed32Required() uint32 { - if m != nil && m.F_Fixed32Required != nil { - return *m.F_Fixed32Required - } - return 0 -} - -func (m *GoTest) GetF_Fixed64Required() uint64 { - if m != nil && m.F_Fixed64Required != nil { - return *m.F_Fixed64Required - } - return 0 -} - -func (m *GoTest) GetF_Uint32Required() uint32 { - if m != nil && m.F_Uint32Required != nil { - return *m.F_Uint32Required - } - return 0 -} - -func (m *GoTest) GetF_Uint64Required() uint64 { - if m != nil && m.F_Uint64Required != nil { - return *m.F_Uint64Required - } - return 0 -} - -func (m *GoTest) GetF_FloatRequired() float32 { - if m != nil && m.F_FloatRequired != nil { - return *m.F_FloatRequired - } - return 0 -} - -func (m *GoTest) GetF_DoubleRequired() float64 { - if m != nil && m.F_DoubleRequired != nil { - return *m.F_DoubleRequired - } - return 0 -} - -func (m *GoTest) GetF_StringRequired() string { - if m != nil && m.F_StringRequired != nil { - return *m.F_StringRequired - } - return "" -} - -func (m *GoTest) GetF_BytesRequired() []byte { - if m != nil { - return m.F_BytesRequired - } - return nil -} - -func (m *GoTest) GetF_Sint32Required() int32 { - if m != nil && m.F_Sint32Required != nil { - return *m.F_Sint32Required - } - return 0 -} - -func (m *GoTest) GetF_Sint64Required() int64 { - if m != nil && m.F_Sint64Required != nil { - return *m.F_Sint64Required - } - return 0 -} - -func (m *GoTest) GetF_BoolRepeated() []bool { - if m != nil { - return m.F_BoolRepeated - } - return nil -} - -func (m *GoTest) GetF_Int32Repeated() []int32 { - if m != nil { - return m.F_Int32Repeated - } - return nil -} - -func (m *GoTest) GetF_Int64Repeated() []int64 { - if m != nil { - return m.F_Int64Repeated - } - return nil -} - -func (m *GoTest) GetF_Fixed32Repeated() []uint32 { - if m != nil { - return m.F_Fixed32Repeated - } - return nil -} - -func (m *GoTest) GetF_Fixed64Repeated() []uint64 { - if m != nil { - return m.F_Fixed64Repeated - } - return nil -} - -func (m *GoTest) GetF_Uint32Repeated() []uint32 { - if m != nil { - return m.F_Uint32Repeated - } - return nil -} - -func (m *GoTest) GetF_Uint64Repeated() []uint64 { - if m != nil { - return m.F_Uint64Repeated - } - return nil -} - -func (m *GoTest) GetF_FloatRepeated() []float32 { - if m != nil { - return m.F_FloatRepeated - } - return nil -} - -func (m *GoTest) GetF_DoubleRepeated() []float64 { - if m != nil { - return m.F_DoubleRepeated - } - return nil -} - -func (m *GoTest) GetF_StringRepeated() []string { - if m != nil { - return m.F_StringRepeated - } - return nil -} - -func (m *GoTest) GetF_BytesRepeated() [][]byte { - if m != nil { - return m.F_BytesRepeated - } - return nil -} - -func (m *GoTest) GetF_Sint32Repeated() []int32 { - if m != nil { - return m.F_Sint32Repeated - } - return nil -} - -func (m *GoTest) GetF_Sint64Repeated() []int64 { - if m != nil { - return m.F_Sint64Repeated - } - return nil -} - -func (m *GoTest) GetF_BoolOptional() bool { - if m != nil && m.F_BoolOptional != nil { - return *m.F_BoolOptional - } - return false -} - -func (m *GoTest) GetF_Int32Optional() int32 { - if m != nil && m.F_Int32Optional != nil { - return *m.F_Int32Optional - } - return 0 -} - -func (m *GoTest) GetF_Int64Optional() int64 { - if m != nil && m.F_Int64Optional != nil { - return *m.F_Int64Optional - } - return 0 -} - -func (m *GoTest) GetF_Fixed32Optional() uint32 { - if m != nil && m.F_Fixed32Optional != nil { - return *m.F_Fixed32Optional - } - return 0 -} - -func (m *GoTest) GetF_Fixed64Optional() uint64 { - if m != nil && m.F_Fixed64Optional != nil { - return *m.F_Fixed64Optional - } - return 0 -} - -func (m *GoTest) GetF_Uint32Optional() uint32 { - if m != nil && m.F_Uint32Optional != nil { - return *m.F_Uint32Optional - } - return 0 -} - -func (m *GoTest) GetF_Uint64Optional() uint64 { - if m != nil && m.F_Uint64Optional != nil { - return *m.F_Uint64Optional - } - return 0 -} - -func (m *GoTest) GetF_FloatOptional() float32 { - if m != nil && m.F_FloatOptional != nil { - return *m.F_FloatOptional - } - return 0 -} - -func (m *GoTest) GetF_DoubleOptional() float64 { - if m != nil && m.F_DoubleOptional != nil { - return *m.F_DoubleOptional - } - return 0 -} - -func (m *GoTest) GetF_StringOptional() string { - if m != nil && m.F_StringOptional != nil { - return *m.F_StringOptional - } - return "" -} - -func (m *GoTest) GetF_BytesOptional() []byte { - if m != nil { - return m.F_BytesOptional - } - return nil -} - -func (m *GoTest) GetF_Sint32Optional() int32 { - if m != nil && m.F_Sint32Optional != nil { - return *m.F_Sint32Optional - } - return 0 -} - -func (m *GoTest) GetF_Sint64Optional() int64 { - if m != nil && m.F_Sint64Optional != nil { - return *m.F_Sint64Optional - } - return 0 -} - -func (m *GoTest) GetF_BoolDefaulted() bool { - if m != nil && m.F_BoolDefaulted != nil { - return *m.F_BoolDefaulted - } - return Default_GoTest_F_BoolDefaulted -} - -func (m *GoTest) GetF_Int32Defaulted() int32 { - if m != nil && m.F_Int32Defaulted != nil { - return *m.F_Int32Defaulted - } - return Default_GoTest_F_Int32Defaulted -} - -func (m *GoTest) GetF_Int64Defaulted() int64 { - if m != nil && m.F_Int64Defaulted != nil { - return *m.F_Int64Defaulted - } - return Default_GoTest_F_Int64Defaulted -} - -func (m *GoTest) GetF_Fixed32Defaulted() uint32 { - if m != nil && m.F_Fixed32Defaulted != nil { - return *m.F_Fixed32Defaulted - } - return Default_GoTest_F_Fixed32Defaulted -} - -func (m *GoTest) GetF_Fixed64Defaulted() uint64 { - if m != nil && m.F_Fixed64Defaulted != nil { - return *m.F_Fixed64Defaulted - } - return Default_GoTest_F_Fixed64Defaulted -} - -func (m *GoTest) GetF_Uint32Defaulted() uint32 { - if m != nil && m.F_Uint32Defaulted != nil { - return *m.F_Uint32Defaulted - } - return Default_GoTest_F_Uint32Defaulted -} - -func (m *GoTest) GetF_Uint64Defaulted() uint64 { - if m != nil && m.F_Uint64Defaulted != nil { - return *m.F_Uint64Defaulted - } - return Default_GoTest_F_Uint64Defaulted -} - -func (m *GoTest) GetF_FloatDefaulted() float32 { - if m != nil && m.F_FloatDefaulted != nil { - return *m.F_FloatDefaulted - } - return Default_GoTest_F_FloatDefaulted -} - -func (m *GoTest) GetF_DoubleDefaulted() float64 { - if m != nil && m.F_DoubleDefaulted != nil { - return *m.F_DoubleDefaulted - } - return Default_GoTest_F_DoubleDefaulted -} - -func (m *GoTest) GetF_StringDefaulted() string { - if m != nil && m.F_StringDefaulted != nil { - return *m.F_StringDefaulted - } - return Default_GoTest_F_StringDefaulted -} - -func (m *GoTest) GetF_BytesDefaulted() []byte { - if m != nil && m.F_BytesDefaulted != nil { - return m.F_BytesDefaulted - } - return append([]byte(nil), Default_GoTest_F_BytesDefaulted...) -} - -func (m *GoTest) GetF_Sint32Defaulted() int32 { - if m != nil && m.F_Sint32Defaulted != nil { - return *m.F_Sint32Defaulted - } - return Default_GoTest_F_Sint32Defaulted -} - -func (m *GoTest) GetF_Sint64Defaulted() int64 { - if m != nil && m.F_Sint64Defaulted != nil { - return *m.F_Sint64Defaulted - } - return Default_GoTest_F_Sint64Defaulted -} - -func (m *GoTest) GetF_BoolRepeatedPacked() []bool { - if m != nil { - return m.F_BoolRepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Int32RepeatedPacked() []int32 { - if m != nil { - return m.F_Int32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Int64RepeatedPacked() []int64 { - if m != nil { - return m.F_Int64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Fixed32RepeatedPacked() []uint32 { - if m != nil { - return m.F_Fixed32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Fixed64RepeatedPacked() []uint64 { - if m != nil { - return m.F_Fixed64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Uint32RepeatedPacked() []uint32 { - if m != nil { - return m.F_Uint32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Uint64RepeatedPacked() []uint64 { - if m != nil { - return m.F_Uint64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_FloatRepeatedPacked() []float32 { - if m != nil { - return m.F_FloatRepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_DoubleRepeatedPacked() []float64 { - if m != nil { - return m.F_DoubleRepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Sint32RepeatedPacked() []int32 { - if m != nil { - return m.F_Sint32RepeatedPacked - } - return nil -} - -func (m *GoTest) GetF_Sint64RepeatedPacked() []int64 { - if m != nil { - return m.F_Sint64RepeatedPacked - } - return nil -} - -func (m *GoTest) GetRequiredgroup() *GoTest_RequiredGroup { - if m != nil { - return m.Requiredgroup - } - return nil -} - -func (m *GoTest) GetRepeatedgroup() []*GoTest_RepeatedGroup { - if m != nil { - return m.Repeatedgroup - } - return nil -} - -func (m *GoTest) GetOptionalgroup() *GoTest_OptionalGroup { - if m != nil { - return m.Optionalgroup - } - return nil -} - -type GoTest_RequiredGroup struct { - RequiredField *string `protobuf:"bytes,71,req" json:"RequiredField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest_RequiredGroup) Reset() { *m = GoTest_RequiredGroup{} } - -func (m *GoTest_RequiredGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" -} - -type GoTest_RepeatedGroup struct { - RequiredField *string `protobuf:"bytes,81,req" json:"RequiredField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest_RepeatedGroup) Reset() { *m = GoTest_RepeatedGroup{} } - -func (m *GoTest_RepeatedGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" -} - -type GoTest_OptionalGroup struct { - RequiredField *string `protobuf:"bytes,91,req" json:"RequiredField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoTest_OptionalGroup) Reset() { *m = GoTest_OptionalGroup{} } - -func (m *GoTest_OptionalGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" -} - -type GoSkipTest struct { - SkipInt32 *int32 `protobuf:"varint,11,req,name=skip_int32" json:"skip_int32,omitempty"` - SkipFixed32 *uint32 `protobuf:"fixed32,12,req,name=skip_fixed32" json:"skip_fixed32,omitempty"` - SkipFixed64 *uint64 `protobuf:"fixed64,13,req,name=skip_fixed64" json:"skip_fixed64,omitempty"` - SkipString *string `protobuf:"bytes,14,req,name=skip_string" json:"skip_string,omitempty"` - Skipgroup *GoSkipTest_SkipGroup `protobuf:"group,15,req,name=SkipGroup" json:"skipgroup,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoSkipTest) Reset() { *m = GoSkipTest{} } -func (m *GoSkipTest) String() string { return proto.CompactTextString(m) } -func (*GoSkipTest) ProtoMessage() {} - -func (m *GoSkipTest) GetSkipInt32() int32 { - if m != nil && m.SkipInt32 != nil { - return *m.SkipInt32 - } - return 0 -} - -func (m *GoSkipTest) GetSkipFixed32() uint32 { - if m != nil && m.SkipFixed32 != nil { - return *m.SkipFixed32 - } - return 0 -} - -func (m *GoSkipTest) GetSkipFixed64() uint64 { - if m != nil && m.SkipFixed64 != nil { - return *m.SkipFixed64 - } - return 0 -} - -func (m *GoSkipTest) GetSkipString() string { - if m != nil && m.SkipString != nil { - return *m.SkipString - } - return "" -} - -func (m *GoSkipTest) GetSkipgroup() *GoSkipTest_SkipGroup { - if m != nil { - return m.Skipgroup - } - return nil -} - -type GoSkipTest_SkipGroup struct { - GroupInt32 *int32 `protobuf:"varint,16,req,name=group_int32" json:"group_int32,omitempty"` - GroupString *string `protobuf:"bytes,17,req,name=group_string" json:"group_string,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GoSkipTest_SkipGroup) Reset() { *m = GoSkipTest_SkipGroup{} } - -func (m *GoSkipTest_SkipGroup) GetGroupInt32() int32 { - if m != nil && m.GroupInt32 != nil { - return *m.GroupInt32 - } - return 0 -} - -func (m *GoSkipTest_SkipGroup) GetGroupString() string { - if m != nil && m.GroupString != nil { - return *m.GroupString - } - return "" -} - -type NonPackedTest struct { - A []int32 `protobuf:"varint,1,rep,name=a" json:"a,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *NonPackedTest) Reset() { *m = NonPackedTest{} } -func (m *NonPackedTest) String() string { return proto.CompactTextString(m) } -func (*NonPackedTest) ProtoMessage() {} - -func (m *NonPackedTest) GetA() []int32 { - if m != nil { - return m.A - } - return nil -} - -type PackedTest struct { - B []int32 `protobuf:"varint,1,rep,packed,name=b" json:"b,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *PackedTest) Reset() { *m = PackedTest{} } -func (m *PackedTest) String() string { return proto.CompactTextString(m) } -func (*PackedTest) ProtoMessage() {} - -func (m *PackedTest) GetB() []int32 { - if m != nil { - return m.B - } - return nil -} - -type MaxTag struct { - LastField *string `protobuf:"bytes,536870911,opt,name=last_field" json:"last_field,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MaxTag) Reset() { *m = MaxTag{} } -func (m *MaxTag) String() string { return proto.CompactTextString(m) } -func (*MaxTag) ProtoMessage() {} - -func (m *MaxTag) GetLastField() string { - if m != nil && m.LastField != nil { - return *m.LastField - } - return "" -} - -type OldMessage struct { - Nested *OldMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *OldMessage) Reset() { *m = OldMessage{} } -func (m *OldMessage) String() string { return proto.CompactTextString(m) } -func (*OldMessage) ProtoMessage() {} - -func (m *OldMessage) GetNested() *OldMessage_Nested { - if m != nil { - return m.Nested - } - return nil -} - -type OldMessage_Nested struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *OldMessage_Nested) Reset() { *m = OldMessage_Nested{} } -func (m *OldMessage_Nested) String() string { return proto.CompactTextString(m) } -func (*OldMessage_Nested) ProtoMessage() {} - -func (m *OldMessage_Nested) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -type NewMessage struct { - Nested *NewMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *NewMessage) Reset() { *m = NewMessage{} } -func (m *NewMessage) String() string { return proto.CompactTextString(m) } -func (*NewMessage) ProtoMessage() {} - -func (m *NewMessage) GetNested() *NewMessage_Nested { - if m != nil { - return m.Nested - } - return nil -} - -type NewMessage_Nested struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - FoodGroup *string `protobuf:"bytes,2,opt,name=food_group" json:"food_group,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *NewMessage_Nested) Reset() { *m = NewMessage_Nested{} } -func (m *NewMessage_Nested) String() string { return proto.CompactTextString(m) } -func (*NewMessage_Nested) ProtoMessage() {} - -func (m *NewMessage_Nested) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *NewMessage_Nested) GetFoodGroup() string { - if m != nil && m.FoodGroup != nil { - return *m.FoodGroup - } - return "" -} - -type InnerMessage struct { - Host *string `protobuf:"bytes,1,req,name=host" json:"host,omitempty"` - Port *int32 `protobuf:"varint,2,opt,name=port,def=4000" json:"port,omitempty"` - Connected *bool `protobuf:"varint,3,opt,name=connected" json:"connected,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *InnerMessage) Reset() { *m = InnerMessage{} } -func (m *InnerMessage) String() string { return proto.CompactTextString(m) } -func (*InnerMessage) ProtoMessage() {} - -const Default_InnerMessage_Port int32 = 4000 - -func (m *InnerMessage) GetHost() string { - if m != nil && m.Host != nil { - return *m.Host - } - return "" -} - -func (m *InnerMessage) GetPort() int32 { - if m != nil && m.Port != nil { - return *m.Port - } - return Default_InnerMessage_Port -} - -func (m *InnerMessage) GetConnected() bool { - if m != nil && m.Connected != nil { - return *m.Connected - } - return false -} - -type OtherMessage struct { - Key *int64 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` - Weight *float32 `protobuf:"fixed32,3,opt,name=weight" json:"weight,omitempty"` - Inner *InnerMessage `protobuf:"bytes,4,opt,name=inner" json:"inner,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *OtherMessage) Reset() { *m = OtherMessage{} } -func (m *OtherMessage) String() string { return proto.CompactTextString(m) } -func (*OtherMessage) ProtoMessage() {} - -func (m *OtherMessage) GetKey() int64 { - if m != nil && m.Key != nil { - return *m.Key - } - return 0 -} - -func (m *OtherMessage) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *OtherMessage) GetWeight() float32 { - if m != nil && m.Weight != nil { - return *m.Weight - } - return 0 -} - -func (m *OtherMessage) GetInner() *InnerMessage { - if m != nil { - return m.Inner - } - return nil -} - -type MyMessage struct { - Count *int32 `protobuf:"varint,1,req,name=count" json:"count,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Quote *string `protobuf:"bytes,3,opt,name=quote" json:"quote,omitempty"` - Pet []string `protobuf:"bytes,4,rep,name=pet" json:"pet,omitempty"` - Inner *InnerMessage `protobuf:"bytes,5,opt,name=inner" json:"inner,omitempty"` - Others []*OtherMessage `protobuf:"bytes,6,rep,name=others" json:"others,omitempty"` - Bikeshed *MyMessage_Color `protobuf:"varint,7,opt,name=bikeshed,enum=testdata.MyMessage_Color" json:"bikeshed,omitempty"` - Somegroup *MyMessage_SomeGroup `protobuf:"group,8,opt,name=SomeGroup" json:"somegroup,omitempty"` - RepBytes [][]byte `protobuf:"bytes,10,rep,name=rep_bytes" json:"rep_bytes,omitempty"` - Bigfloat *float64 `protobuf:"fixed64,11,opt,name=bigfloat" json:"bigfloat,omitempty"` - XXX_extensions map[int32]proto.Extension `json:"-"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MyMessage) Reset() { *m = MyMessage{} } -func (m *MyMessage) String() string { return proto.CompactTextString(m) } -func (*MyMessage) ProtoMessage() {} - -var extRange_MyMessage = []proto.ExtensionRange{ - {100, 536870911}, -} - -func (*MyMessage) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_MyMessage -} -func (m *MyMessage) ExtensionMap() map[int32]proto.Extension { - if m.XXX_extensions == nil { - m.XXX_extensions = make(map[int32]proto.Extension) - } - return m.XXX_extensions -} - -func (m *MyMessage) GetCount() int32 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -func (m *MyMessage) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *MyMessage) GetQuote() string { - if m != nil && m.Quote != nil { - return *m.Quote - } - return "" -} - -func (m *MyMessage) GetPet() []string { - if m != nil { - return m.Pet - } - return nil -} - -func (m *MyMessage) GetInner() *InnerMessage { - if m != nil { - return m.Inner - } - return nil -} - -func (m *MyMessage) GetOthers() []*OtherMessage { - if m != nil { - return m.Others - } - return nil -} - -func (m *MyMessage) GetBikeshed() MyMessage_Color { - if m != nil && m.Bikeshed != nil { - return *m.Bikeshed - } - return 0 -} - -func (m *MyMessage) GetSomegroup() *MyMessage_SomeGroup { - if m != nil { - return m.Somegroup - } - return nil -} - -func (m *MyMessage) GetRepBytes() [][]byte { - if m != nil { - return m.RepBytes - } - return nil -} - -func (m *MyMessage) GetBigfloat() float64 { - if m != nil && m.Bigfloat != nil { - return *m.Bigfloat - } - return 0 -} - -type MyMessage_SomeGroup struct { - GroupField *int32 `protobuf:"varint,9,opt,name=group_field" json:"group_field,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MyMessage_SomeGroup) Reset() { *m = MyMessage_SomeGroup{} } - -func (m *MyMessage_SomeGroup) GetGroupField() int32 { - if m != nil && m.GroupField != nil { - return *m.GroupField - } - return 0 -} - -type Ext struct { - Data *string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Ext) Reset() { *m = Ext{} } -func (m *Ext) String() string { return proto.CompactTextString(m) } -func (*Ext) ProtoMessage() {} - -func (m *Ext) GetData() string { - if m != nil && m.Data != nil { - return *m.Data - } - return "" -} - -var E_Ext_More = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: (*Ext)(nil), - Field: 103, - Name: "testdata.Ext.more", - Tag: "bytes,103,opt,name=more", -} - -var E_Ext_Text = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: (*string)(nil), - Field: 104, - Name: "testdata.Ext.text", - Tag: "bytes,104,opt,name=text", -} - -var E_Ext_Number = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: (*int32)(nil), - Field: 105, - Name: "testdata.Ext.number", - Tag: "varint,105,opt,name=number", -} - -type MessageList struct { - Message []*MessageList_Message `protobuf:"group,1,rep" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MessageList) Reset() { *m = MessageList{} } -func (m *MessageList) String() string { return proto.CompactTextString(m) } -func (*MessageList) ProtoMessage() {} - -func (m *MessageList) GetMessage() []*MessageList_Message { - if m != nil { - return m.Message - } - return nil -} - -type MessageList_Message struct { - Name *string `protobuf:"bytes,2,req,name=name" json:"name,omitempty"` - Count *int32 `protobuf:"varint,3,req,name=count" json:"count,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MessageList_Message) Reset() { *m = MessageList_Message{} } - -func (m *MessageList_Message) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *MessageList_Message) GetCount() int32 { - if m != nil && m.Count != nil { - return *m.Count - } - return 0 -} - -type Strings struct { - StringField *string `protobuf:"bytes,1,opt,name=string_field" json:"string_field,omitempty"` - BytesField []byte `protobuf:"bytes,2,opt,name=bytes_field" json:"bytes_field,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Strings) Reset() { *m = Strings{} } -func (m *Strings) String() string { return proto.CompactTextString(m) } -func (*Strings) ProtoMessage() {} - -func (m *Strings) GetStringField() string { - if m != nil && m.StringField != nil { - return *m.StringField - } - return "" -} - -func (m *Strings) GetBytesField() []byte { - if m != nil { - return m.BytesField - } - return nil -} - -type Defaults struct { - F_Bool *bool `protobuf:"varint,1,opt,def=1" json:"F_Bool,omitempty"` - F_Int32 *int32 `protobuf:"varint,2,opt,def=32" json:"F_Int32,omitempty"` - F_Int64 *int64 `protobuf:"varint,3,opt,def=64" json:"F_Int64,omitempty"` - F_Fixed32 *uint32 `protobuf:"fixed32,4,opt,def=320" json:"F_Fixed32,omitempty"` - F_Fixed64 *uint64 `protobuf:"fixed64,5,opt,def=640" json:"F_Fixed64,omitempty"` - F_Uint32 *uint32 `protobuf:"varint,6,opt,def=3200" json:"F_Uint32,omitempty"` - F_Uint64 *uint64 `protobuf:"varint,7,opt,def=6400" json:"F_Uint64,omitempty"` - F_Float *float32 `protobuf:"fixed32,8,opt,def=314159" json:"F_Float,omitempty"` - F_Double *float64 `protobuf:"fixed64,9,opt,def=271828" json:"F_Double,omitempty"` - F_String *string `protobuf:"bytes,10,opt,def=hello, \"world!\"\n" json:"F_String,omitempty"` - F_Bytes []byte `protobuf:"bytes,11,opt,def=Bignose" json:"F_Bytes,omitempty"` - F_Sint32 *int32 `protobuf:"zigzag32,12,opt,def=-32" json:"F_Sint32,omitempty"` - F_Sint64 *int64 `protobuf:"zigzag64,13,opt,def=-64" json:"F_Sint64,omitempty"` - F_Enum *Defaults_Color `protobuf:"varint,14,opt,enum=testdata.Defaults_Color,def=1" json:"F_Enum,omitempty"` - F_Pinf *float32 `protobuf:"fixed32,15,opt,def=inf" json:"F_Pinf,omitempty"` - F_Ninf *float32 `protobuf:"fixed32,16,opt,def=-inf" json:"F_Ninf,omitempty"` - F_Nan *float32 `protobuf:"fixed32,17,opt,def=nan" json:"F_Nan,omitempty"` - Sub *SubDefaults `protobuf:"bytes,18,opt,name=sub" json:"sub,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Defaults) Reset() { *m = Defaults{} } -func (m *Defaults) String() string { return proto.CompactTextString(m) } -func (*Defaults) ProtoMessage() {} - -const Default_Defaults_F_Bool bool = true -const Default_Defaults_F_Int32 int32 = 32 -const Default_Defaults_F_Int64 int64 = 64 -const Default_Defaults_F_Fixed32 uint32 = 320 -const Default_Defaults_F_Fixed64 uint64 = 640 -const Default_Defaults_F_Uint32 uint32 = 3200 -const Default_Defaults_F_Uint64 uint64 = 6400 -const Default_Defaults_F_Float float32 = 314159 -const Default_Defaults_F_Double float64 = 271828 -const Default_Defaults_F_String string = "hello, \"world!\"\n" - -var Default_Defaults_F_Bytes []byte = []byte("Bignose") - -const Default_Defaults_F_Sint32 int32 = -32 -const Default_Defaults_F_Sint64 int64 = -64 -const Default_Defaults_F_Enum Defaults_Color = Defaults_GREEN - -var Default_Defaults_F_Pinf float32 = float32(math.Inf(1)) -var Default_Defaults_F_Ninf float32 = float32(math.Inf(-1)) -var Default_Defaults_F_Nan float32 = float32(math.NaN()) - -func (m *Defaults) GetF_Bool() bool { - if m != nil && m.F_Bool != nil { - return *m.F_Bool - } - return Default_Defaults_F_Bool -} - -func (m *Defaults) GetF_Int32() int32 { - if m != nil && m.F_Int32 != nil { - return *m.F_Int32 - } - return Default_Defaults_F_Int32 -} - -func (m *Defaults) GetF_Int64() int64 { - if m != nil && m.F_Int64 != nil { - return *m.F_Int64 - } - return Default_Defaults_F_Int64 -} - -func (m *Defaults) GetF_Fixed32() uint32 { - if m != nil && m.F_Fixed32 != nil { - return *m.F_Fixed32 - } - return Default_Defaults_F_Fixed32 -} - -func (m *Defaults) GetF_Fixed64() uint64 { - if m != nil && m.F_Fixed64 != nil { - return *m.F_Fixed64 - } - return Default_Defaults_F_Fixed64 -} - -func (m *Defaults) GetF_Uint32() uint32 { - if m != nil && m.F_Uint32 != nil { - return *m.F_Uint32 - } - return Default_Defaults_F_Uint32 -} - -func (m *Defaults) GetF_Uint64() uint64 { - if m != nil && m.F_Uint64 != nil { - return *m.F_Uint64 - } - return Default_Defaults_F_Uint64 -} - -func (m *Defaults) GetF_Float() float32 { - if m != nil && m.F_Float != nil { - return *m.F_Float - } - return Default_Defaults_F_Float -} - -func (m *Defaults) GetF_Double() float64 { - if m != nil && m.F_Double != nil { - return *m.F_Double - } - return Default_Defaults_F_Double -} - -func (m *Defaults) GetF_String() string { - if m != nil && m.F_String != nil { - return *m.F_String - } - return Default_Defaults_F_String -} - -func (m *Defaults) GetF_Bytes() []byte { - if m != nil && m.F_Bytes != nil { - return m.F_Bytes - } - return append([]byte(nil), Default_Defaults_F_Bytes...) -} - -func (m *Defaults) GetF_Sint32() int32 { - if m != nil && m.F_Sint32 != nil { - return *m.F_Sint32 - } - return Default_Defaults_F_Sint32 -} - -func (m *Defaults) GetF_Sint64() int64 { - if m != nil && m.F_Sint64 != nil { - return *m.F_Sint64 - } - return Default_Defaults_F_Sint64 -} - -func (m *Defaults) GetF_Enum() Defaults_Color { - if m != nil && m.F_Enum != nil { - return *m.F_Enum - } - return Default_Defaults_F_Enum -} - -func (m *Defaults) GetF_Pinf() float32 { - if m != nil && m.F_Pinf != nil { - return *m.F_Pinf - } - return Default_Defaults_F_Pinf -} - -func (m *Defaults) GetF_Ninf() float32 { - if m != nil && m.F_Ninf != nil { - return *m.F_Ninf - } - return Default_Defaults_F_Ninf -} - -func (m *Defaults) GetF_Nan() float32 { - if m != nil && m.F_Nan != nil { - return *m.F_Nan - } - return Default_Defaults_F_Nan -} - -func (m *Defaults) GetSub() *SubDefaults { - if m != nil { - return m.Sub - } - return nil -} - -type SubDefaults struct { - N *int64 `protobuf:"varint,1,opt,name=n,def=7" json:"n,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SubDefaults) Reset() { *m = SubDefaults{} } -func (m *SubDefaults) String() string { return proto.CompactTextString(m) } -func (*SubDefaults) ProtoMessage() {} - -const Default_SubDefaults_N int64 = 7 - -func (m *SubDefaults) GetN() int64 { - if m != nil && m.N != nil { - return *m.N - } - return Default_SubDefaults_N -} - -type RepeatedEnum struct { - Color []RepeatedEnum_Color `protobuf:"varint,1,rep,name=color,enum=testdata.RepeatedEnum_Color" json:"color,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *RepeatedEnum) Reset() { *m = RepeatedEnum{} } -func (m *RepeatedEnum) String() string { return proto.CompactTextString(m) } -func (*RepeatedEnum) ProtoMessage() {} - -func (m *RepeatedEnum) GetColor() []RepeatedEnum_Color { - if m != nil { - return m.Color - } - return nil -} - -type MoreRepeated struct { - Bools []bool `protobuf:"varint,1,rep,name=bools" json:"bools,omitempty"` - BoolsPacked []bool `protobuf:"varint,2,rep,packed,name=bools_packed" json:"bools_packed,omitempty"` - Ints []int32 `protobuf:"varint,3,rep,name=ints" json:"ints,omitempty"` - IntsPacked []int32 `protobuf:"varint,4,rep,packed,name=ints_packed" json:"ints_packed,omitempty"` - Strings []string `protobuf:"bytes,5,rep,name=strings" json:"strings,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MoreRepeated) Reset() { *m = MoreRepeated{} } -func (m *MoreRepeated) String() string { return proto.CompactTextString(m) } -func (*MoreRepeated) ProtoMessage() {} - -func (m *MoreRepeated) GetBools() []bool { - if m != nil { - return m.Bools - } - return nil -} - -func (m *MoreRepeated) GetBoolsPacked() []bool { - if m != nil { - return m.BoolsPacked - } - return nil -} - -func (m *MoreRepeated) GetInts() []int32 { - if m != nil { - return m.Ints - } - return nil -} - -func (m *MoreRepeated) GetIntsPacked() []int32 { - if m != nil { - return m.IntsPacked - } - return nil -} - -func (m *MoreRepeated) GetStrings() []string { - if m != nil { - return m.Strings - } - return nil -} - -type GroupOld struct { - G *GroupOld_G `protobuf:"group,1,opt" json:"g,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupOld) Reset() { *m = GroupOld{} } -func (m *GroupOld) String() string { return proto.CompactTextString(m) } -func (*GroupOld) ProtoMessage() {} - -func (m *GroupOld) GetG() *GroupOld_G { - if m != nil { - return m.G - } - return nil -} - -type GroupOld_G struct { - X *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupOld_G) Reset() { *m = GroupOld_G{} } - -func (m *GroupOld_G) GetX() int32 { - if m != nil && m.X != nil { - return *m.X - } - return 0 -} - -type GroupNew struct { - G *GroupNew_G `protobuf:"group,1,opt" json:"g,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupNew) Reset() { *m = GroupNew{} } -func (m *GroupNew) String() string { return proto.CompactTextString(m) } -func (*GroupNew) ProtoMessage() {} - -func (m *GroupNew) GetG() *GroupNew_G { - if m != nil { - return m.G - } - return nil -} - -type GroupNew_G struct { - X *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"` - Y *int32 `protobuf:"varint,3,opt,name=y" json:"y,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GroupNew_G) Reset() { *m = GroupNew_G{} } - -func (m *GroupNew_G) GetX() int32 { - if m != nil && m.X != nil { - return *m.X - } - return 0 -} - -func (m *GroupNew_G) GetY() int32 { - if m != nil && m.Y != nil { - return *m.Y - } - return 0 -} - -var E_Greeting = &proto.ExtensionDesc{ - ExtendedType: (*MyMessage)(nil), - ExtensionType: ([]string)(nil), - Field: 106, - Name: "testdata.greeting", - Tag: "bytes,106,rep,name=greeting", -} - -func init() { - proto.RegisterEnum("testdata.FOO", FOO_name, FOO_value) - proto.RegisterEnum("testdata.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value) - proto.RegisterEnum("testdata.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value) - proto.RegisterEnum("testdata.Defaults_Color", Defaults_Color_name, Defaults_Color_value) - proto.RegisterEnum("testdata.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value) - proto.RegisterExtension(E_Ext_More) - proto.RegisterExtension(E_Ext_Text) - proto.RegisterExtension(E_Ext_Number) - proto.RegisterExtension(E_Greeting) -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.proto b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.proto deleted file mode 100644 index 411634d..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/testdata/test.proto +++ /dev/null @@ -1,435 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// A feature-rich test file for the protocol compiler and libraries. - -syntax = "proto2"; - -package testdata; - -enum FOO { FOO1 = 1; }; - -message GoEnum { - required FOO foo = 1; -} - -message GoTestField { - required string Label = 1; - required string Type = 2; -} - -message GoTest { - // An enum, for completeness. - enum KIND { - VOID = 0; - - // Basic types - BOOL = 1; - BYTES = 2; - FINGERPRINT = 3; - FLOAT = 4; - INT = 5; - STRING = 6; - TIME = 7; - - // Groupings - TUPLE = 8; - ARRAY = 9; - MAP = 10; - - // Table types - TABLE = 11; - - // Functions - FUNCTION = 12; // last tag - }; - - // Some typical parameters - required KIND Kind = 1; - optional string Table = 2; - optional int32 Param = 3; - - // Required, repeated and optional foreign fields. - required GoTestField RequiredField = 4; - repeated GoTestField RepeatedField = 5; - optional GoTestField OptionalField = 6; - - // Required fields of all basic types - required bool F_Bool_required = 10; - required int32 F_Int32_required = 11; - required int64 F_Int64_required = 12; - required fixed32 F_Fixed32_required = 13; - required fixed64 F_Fixed64_required = 14; - required uint32 F_Uint32_required = 15; - required uint64 F_Uint64_required = 16; - required float F_Float_required = 17; - required double F_Double_required = 18; - required string F_String_required = 19; - required bytes F_Bytes_required = 101; - required sint32 F_Sint32_required = 102; - required sint64 F_Sint64_required = 103; - - // Repeated fields of all basic types - repeated bool F_Bool_repeated = 20; - repeated int32 F_Int32_repeated = 21; - repeated int64 F_Int64_repeated = 22; - repeated fixed32 F_Fixed32_repeated = 23; - repeated fixed64 F_Fixed64_repeated = 24; - repeated uint32 F_Uint32_repeated = 25; - repeated uint64 F_Uint64_repeated = 26; - repeated float F_Float_repeated = 27; - repeated double F_Double_repeated = 28; - repeated string F_String_repeated = 29; - repeated bytes F_Bytes_repeated = 201; - repeated sint32 F_Sint32_repeated = 202; - repeated sint64 F_Sint64_repeated = 203; - - // Optional fields of all basic types - optional bool F_Bool_optional = 30; - optional int32 F_Int32_optional = 31; - optional int64 F_Int64_optional = 32; - optional fixed32 F_Fixed32_optional = 33; - optional fixed64 F_Fixed64_optional = 34; - optional uint32 F_Uint32_optional = 35; - optional uint64 F_Uint64_optional = 36; - optional float F_Float_optional = 37; - optional double F_Double_optional = 38; - optional string F_String_optional = 39; - optional bytes F_Bytes_optional = 301; - optional sint32 F_Sint32_optional = 302; - optional sint64 F_Sint64_optional = 303; - - // Default-valued fields of all basic types - optional bool F_Bool_defaulted = 40 [default=true]; - optional int32 F_Int32_defaulted = 41 [default=32]; - optional int64 F_Int64_defaulted = 42 [default=64]; - optional fixed32 F_Fixed32_defaulted = 43 [default=320]; - optional fixed64 F_Fixed64_defaulted = 44 [default=640]; - optional uint32 F_Uint32_defaulted = 45 [default=3200]; - optional uint64 F_Uint64_defaulted = 46 [default=6400]; - optional float F_Float_defaulted = 47 [default=314159.]; - optional double F_Double_defaulted = 48 [default=271828.]; - optional string F_String_defaulted = 49 [default="hello, \"world!\"\n"]; - optional bytes F_Bytes_defaulted = 401 [default="Bignose"]; - optional sint32 F_Sint32_defaulted = 402 [default = -32]; - optional sint64 F_Sint64_defaulted = 403 [default = -64]; - - // Packed repeated fields (no string or bytes). - repeated bool F_Bool_repeated_packed = 50 [packed=true]; - repeated int32 F_Int32_repeated_packed = 51 [packed=true]; - repeated int64 F_Int64_repeated_packed = 52 [packed=true]; - repeated fixed32 F_Fixed32_repeated_packed = 53 [packed=true]; - repeated fixed64 F_Fixed64_repeated_packed = 54 [packed=true]; - repeated uint32 F_Uint32_repeated_packed = 55 [packed=true]; - repeated uint64 F_Uint64_repeated_packed = 56 [packed=true]; - repeated float F_Float_repeated_packed = 57 [packed=true]; - repeated double F_Double_repeated_packed = 58 [packed=true]; - repeated sint32 F_Sint32_repeated_packed = 502 [packed=true]; - repeated sint64 F_Sint64_repeated_packed = 503 [packed=true]; - - // Required, repeated, and optional groups. - required group RequiredGroup = 70 { - required string RequiredField = 71; - }; - - repeated group RepeatedGroup = 80 { - required string RequiredField = 81; - }; - - optional group OptionalGroup = 90 { - required string RequiredField = 91; - }; -} - -// For testing skipping of unrecognized fields. -// Numbers are all big, larger than tag numbers in GoTestField, -// the message used in the corresponding test. -message GoSkipTest { - required int32 skip_int32 = 11; - required fixed32 skip_fixed32 = 12; - required fixed64 skip_fixed64 = 13; - required string skip_string = 14; - required group SkipGroup = 15 { - required int32 group_int32 = 16; - required string group_string = 17; - } -} - -// For testing packed/non-packed decoder switching. -// A serialized instance of one should be deserializable as the other. -message NonPackedTest { - repeated int32 a = 1; -} - -message PackedTest { - repeated int32 b = 1 [packed=true]; -} - -message MaxTag { - // Maximum possible tag number. - optional string last_field = 536870911; -} - -message OldMessage { - message Nested { - optional string name = 1; - } - optional Nested nested = 1; - - optional int32 num = 2; -} - -// NewMessage is wire compatible with OldMessage; -// imagine it as a future version. -message NewMessage { - message Nested { - optional string name = 1; - optional string food_group = 2; - } - optional Nested nested = 1; - - // This is an int32 in OldMessage. - optional int64 num = 2; -} - -// Smaller tests for ASCII formatting. - -message InnerMessage { - required string host = 1; - optional int32 port = 2 [default=4000]; - optional bool connected = 3; -} - -message OtherMessage { - optional int64 key = 1; - optional bytes value = 2; - optional float weight = 3; - optional InnerMessage inner = 4; -} - -message MyMessage { - required int32 count = 1; - optional string name = 2; - optional string quote = 3; - repeated string pet = 4; - optional InnerMessage inner = 5; - repeated OtherMessage others = 6; - repeated InnerMessage rep_inner = 12; - - enum Color { - RED = 0; - GREEN = 1; - BLUE = 2; - }; - optional Color bikeshed = 7; - - optional group SomeGroup = 8 { - optional int32 group_field = 9; - } - - // This field becomes [][]byte in the generated code. - repeated bytes rep_bytes = 10; - - optional double bigfloat = 11; - - extensions 100 to max; -} - -message Ext { - extend MyMessage { - optional Ext more = 103; - optional string text = 104; - optional int32 number = 105; - } - - optional string data = 1; -} - -extend MyMessage { - repeated string greeting = 106; -} - -message MyMessageSet { - option message_set_wire_format = true; - extensions 100 to max; -} - -message Empty { -} - -extend MyMessageSet { - optional Empty x201 = 201; - optional Empty x202 = 202; - optional Empty x203 = 203; - optional Empty x204 = 204; - optional Empty x205 = 205; - optional Empty x206 = 206; - optional Empty x207 = 207; - optional Empty x208 = 208; - optional Empty x209 = 209; - optional Empty x210 = 210; - optional Empty x211 = 211; - optional Empty x212 = 212; - optional Empty x213 = 213; - optional Empty x214 = 214; - optional Empty x215 = 215; - optional Empty x216 = 216; - optional Empty x217 = 217; - optional Empty x218 = 218; - optional Empty x219 = 219; - optional Empty x220 = 220; - optional Empty x221 = 221; - optional Empty x222 = 222; - optional Empty x223 = 223; - optional Empty x224 = 224; - optional Empty x225 = 225; - optional Empty x226 = 226; - optional Empty x227 = 227; - optional Empty x228 = 228; - optional Empty x229 = 229; - optional Empty x230 = 230; - optional Empty x231 = 231; - optional Empty x232 = 232; - optional Empty x233 = 233; - optional Empty x234 = 234; - optional Empty x235 = 235; - optional Empty x236 = 236; - optional Empty x237 = 237; - optional Empty x238 = 238; - optional Empty x239 = 239; - optional Empty x240 = 240; - optional Empty x241 = 241; - optional Empty x242 = 242; - optional Empty x243 = 243; - optional Empty x244 = 244; - optional Empty x245 = 245; - optional Empty x246 = 246; - optional Empty x247 = 247; - optional Empty x248 = 248; - optional Empty x249 = 249; - optional Empty x250 = 250; -} - -message MessageList { - repeated group Message = 1 { - required string name = 2; - required int32 count = 3; - } -} - -message Strings { - optional string string_field = 1; - optional bytes bytes_field = 2; -} - -message Defaults { - enum Color { - RED = 0; - GREEN = 1; - BLUE = 2; - } - - // Default-valued fields of all basic types. - // Same as GoTest, but copied here to make testing easier. - optional bool F_Bool = 1 [default=true]; - optional int32 F_Int32 = 2 [default=32]; - optional int64 F_Int64 = 3 [default=64]; - optional fixed32 F_Fixed32 = 4 [default=320]; - optional fixed64 F_Fixed64 = 5 [default=640]; - optional uint32 F_Uint32 = 6 [default=3200]; - optional uint64 F_Uint64 = 7 [default=6400]; - optional float F_Float = 8 [default=314159.]; - optional double F_Double = 9 [default=271828.]; - optional string F_String = 10 [default="hello, \"world!\"\n"]; - optional bytes F_Bytes = 11 [default="Bignose"]; - optional sint32 F_Sint32 = 12 [default=-32]; - optional sint64 F_Sint64 = 13 [default=-64]; - optional Color F_Enum = 14 [default=GREEN]; - - // More fields with crazy defaults. - optional float F_Pinf = 15 [default=inf]; - optional float F_Ninf = 16 [default=-inf]; - optional float F_Nan = 17 [default=nan]; - - // Sub-message. - optional SubDefaults sub = 18; - - // Redundant but explicit defaults. - optional string str_zero = 19 [default=""]; -} - -message SubDefaults { - optional int64 n = 1 [default=7]; -} - -message RepeatedEnum { - enum Color { - RED = 1; - } - repeated Color color = 1; -} - -message MoreRepeated { - repeated bool bools = 1; - repeated bool bools_packed = 2 [packed=true]; - repeated int32 ints = 3; - repeated int32 ints_packed = 4 [packed=true]; - repeated int64 int64s_packed = 7 [packed=true]; - repeated string strings = 5; - repeated fixed32 fixeds = 6; -} - -// GroupOld and GroupNew have the same wire format. -// GroupNew has a new field inside a group. - -message GroupOld { - optional group G = 101 { - optional int32 x = 2; - } -} - -message GroupNew { - optional group G = 101 { - optional int32 x = 2; - optional int32 y = 3; - } -} - -message FloatingPoint { - required double f = 1; -} - -message MessageWithMap { - map name_mapping = 1; - map msg_mapping = 2; - map byte_mapping = 3; - map str_to_str = 4; -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text.go deleted file mode 100644 index 5d77a94..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text.go +++ /dev/null @@ -1,824 +0,0 @@ -// Extensions for Protocol Buffers to create more go like structures. -// -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto -// -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -// Functions for writing the text protocol buffer format. - -import ( - "bufio" - "bytes" - "encoding" - "fmt" - "io" - "log" - "math" - "os" - "reflect" - "sort" - "strings" -) - -var ( - newline = []byte("\n") - spaces = []byte(" ") - gtNewline = []byte(">\n") - endBraceNewline = []byte("}\n") - backslashN = []byte{'\\', 'n'} - backslashR = []byte{'\\', 'r'} - backslashT = []byte{'\\', 't'} - backslashDQ = []byte{'\\', '"'} - backslashBS = []byte{'\\', '\\'} - posInf = []byte("inf") - negInf = []byte("-inf") - nan = []byte("nan") -) - -type writer interface { - io.Writer - WriteByte(byte) error -} - -// textWriter is an io.Writer that tracks its indentation level. -type textWriter struct { - ind int - complete bool // if the current position is a complete line - compact bool // whether to write out as a one-liner - w writer -} - -func (w *textWriter) WriteString(s string) (n int, err error) { - if !strings.Contains(s, "\n") { - if !w.compact && w.complete { - w.writeIndent() - } - w.complete = false - return io.WriteString(w.w, s) - } - // WriteString is typically called without newlines, so this - // codepath and its copy are rare. We copy to avoid - // duplicating all of Write's logic here. - return w.Write([]byte(s)) -} - -func (w *textWriter) Write(p []byte) (n int, err error) { - newlines := bytes.Count(p, newline) - if newlines == 0 { - if !w.compact && w.complete { - w.writeIndent() - } - n, err = w.w.Write(p) - w.complete = false - return n, err - } - - frags := bytes.SplitN(p, newline, newlines+1) - if w.compact { - for i, frag := range frags { - if i > 0 { - if err := w.w.WriteByte(' '); err != nil { - return n, err - } - n++ - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - } - return n, nil - } - - for i, frag := range frags { - if w.complete { - w.writeIndent() - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - if i+1 < len(frags) { - if err := w.w.WriteByte('\n'); err != nil { - return n, err - } - n++ - } - } - w.complete = len(frags[len(frags)-1]) == 0 - return n, nil -} - -func (w *textWriter) WriteByte(c byte) error { - if w.compact && c == '\n' { - c = ' ' - } - if !w.compact && w.complete { - w.writeIndent() - } - err := w.w.WriteByte(c) - w.complete = c == '\n' - return err -} - -func (w *textWriter) indent() { w.ind++ } - -func (w *textWriter) unindent() { - if w.ind == 0 { - log.Printf("proto: textWriter unindented too far") - return - } - w.ind-- -} - -func writeName(w *textWriter, props *Properties) error { - if _, err := w.WriteString(props.OrigName); err != nil { - return err - } - if props.Wire != "group" { - return w.WriteByte(':') - } - return nil -} - -var ( - messageSetType = reflect.TypeOf((*MessageSet)(nil)).Elem() -) - -// raw is the interface satisfied by RawMessage. -type raw interface { - Bytes() []byte -} - -func writeStruct(w *textWriter, sv reflect.Value) error { - if sv.Type() == messageSetType { - return writeMessageSet(w, sv.Addr().Interface().(*MessageSet)) - } - - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < sv.NumField(); i++ { - fv := sv.Field(i) - props := sprops.Prop[i] - name := st.Field(i).Name - - if strings.HasPrefix(name, "XXX_") { - // There are two XXX_ fields: - // XXX_unrecognized []byte - // XXX_extensions map[int32]proto.Extension - // The first is handled here; - // the second is handled at the bottom of this function. - if name == "XXX_unrecognized" && !fv.IsNil() { - if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Field not filled in. This could be an optional field or - // a required field that wasn't filled in. Either way, there - // isn't anything we can show for it. - continue - } - if fv.Kind() == reflect.Slice && fv.IsNil() { - // Repeated field that is empty, or a bytes field that is unused. - continue - } - - if props.Repeated && fv.Kind() == reflect.Slice { - // Repeated field. - for j := 0; j < fv.Len(); j++ { - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - v := fv.Index(j) - if v.Kind() == reflect.Ptr && v.IsNil() { - // A nil message in a repeated field is not valid, - // but we can handle that more gracefully than panicking. - if _, err := w.Write([]byte("\n")); err != nil { - return err - } - continue - } - if len(props.Enum) > 0 { - if err := writeEnum(w, v, props); err != nil { - return err - } - } else if err := writeAny(w, v, props); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Map { - // Map fields are rendered as a repeated struct with key/value fields. - keys := fv.MapKeys() // TODO: should we sort these for deterministic output? - sort.Sort(mapKeys(keys)) - for _, key := range keys { - val := fv.MapIndex(key) - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - // open struct - if err := w.WriteByte('<'); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - // key - if _, err := w.WriteString("key:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := writeAny(w, key, props.mkeyprop); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - // value - if _, err := w.WriteString("value:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := writeAny(w, val, props.mvalprop); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - // close struct - w.unindent() - if err := w.WriteByte('>'); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { - // empty bytes field - continue - } - if props.proto3 && fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { - // proto3 non-repeated scalar field; skip if zero value - switch fv.Kind() { - case reflect.Bool: - if !fv.Bool() { - continue - } - case reflect.Int32, reflect.Int64: - if fv.Int() == 0 { - continue - } - case reflect.Uint32, reflect.Uint64: - if fv.Uint() == 0 { - continue - } - case reflect.Float32, reflect.Float64: - if fv.Float() == 0 { - continue - } - case reflect.String: - if fv.String() == "" { - continue - } - } - } - - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if b, ok := fv.Interface().(raw); ok { - if err := writeRaw(w, b.Bytes()); err != nil { - return err - } - continue - } - - if len(props.Enum) > 0 { - if err := writeEnum(w, fv, props); err != nil { - return err - } - } else if err := writeAny(w, fv, props); err != nil { - return err - } - - if err := w.WriteByte('\n'); err != nil { - return err - } - } - - // Extensions (the XXX_extensions field). - pv := sv.Addr() - if pv.Type().Implements(extendableProtoType) { - if err := writeExtensions(w, pv); err != nil { - return err - } - } - - return nil -} - -// writeRaw writes an uninterpreted raw message. -func writeRaw(w *textWriter, b []byte) error { - if err := w.WriteByte('<'); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - if err := writeUnknownStruct(w, b); err != nil { - return err - } - w.unindent() - if err := w.WriteByte('>'); err != nil { - return err - } - return nil -} - -// writeAny writes an arbitrary field. -func writeAny(w *textWriter, v reflect.Value, props *Properties) error { - v = reflect.Indirect(v) - - if props != nil && len(props.CustomType) > 0 { - var custom Marshaler = v.Interface().(Marshaler) - data, err := custom.Marshal() - if err != nil { - return err - } - if err := writeString(w, string(data)); err != nil { - return err - } - return nil - } - - // Floats have special cases. - if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { - x := v.Float() - var b []byte - switch { - case math.IsInf(x, 1): - b = posInf - case math.IsInf(x, -1): - b = negInf - case math.IsNaN(x): - b = nan - } - if b != nil { - _, err := w.Write(b) - return err - } - // Other values are handled below. - } - - // We don't attempt to serialise every possible value type; only those - // that can occur in protocol buffers. - switch v.Kind() { - case reflect.Slice: - // Should only be a []byte; repeated fields are handled in writeStruct. - if err := writeString(w, string(v.Bytes())); err != nil { - return err - } - case reflect.String: - if err := writeString(w, v.String()); err != nil { - return err - } - case reflect.Struct: - // Required/optional group/message. - var bra, ket byte = '<', '>' - if props != nil && props.Wire == "group" { - bra, ket = '{', '}' - } - if err := w.WriteByte(bra); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - if tm, ok := v.Interface().(encoding.TextMarshaler); ok { - text, err := tm.MarshalText() - if err != nil { - return err - } - if _, err = w.Write(text); err != nil { - return err - } - } else if err := writeStruct(w, v); err != nil { - return err - } - w.unindent() - if err := w.WriteByte(ket); err != nil { - return err - } - default: - _, err := fmt.Fprint(w, v.Interface()) - return err - } - return nil -} - -// equivalent to C's isprint. -func isprint(c byte) bool { - return c >= 0x20 && c < 0x7f -} - -// writeString writes a string in the protocol buffer text format. -// It is similar to strconv.Quote except we don't use Go escape sequences, -// we treat the string as a byte sequence, and we use octal escapes. -// These differences are to maintain interoperability with the other -// languages' implementations of the text format. -func writeString(w *textWriter, s string) error { - // use WriteByte here to get any needed indent - if err := w.WriteByte('"'); err != nil { - return err - } - // Loop over the bytes, not the runes. - for i := 0; i < len(s); i++ { - var err error - // Divergence from C++: we don't escape apostrophes. - // There's no need to escape them, and the C++ parser - // copes with a naked apostrophe. - switch c := s[i]; c { - case '\n': - _, err = w.w.Write(backslashN) - case '\r': - _, err = w.w.Write(backslashR) - case '\t': - _, err = w.w.Write(backslashT) - case '"': - _, err = w.w.Write(backslashDQ) - case '\\': - _, err = w.w.Write(backslashBS) - default: - if isprint(c) { - err = w.w.WriteByte(c) - } else { - _, err = fmt.Fprintf(w.w, "\\%03o", c) - } - } - if err != nil { - return err - } - } - return w.WriteByte('"') -} - -func writeMessageSet(w *textWriter, ms *MessageSet) error { - for _, item := range ms.Item { - id := *item.TypeId - if msd, ok := messageSetMap[id]; ok { - // Known message set type. - if _, err := fmt.Fprintf(w, "[%s]: <\n", msd.name); err != nil { - return err - } - w.indent() - - pb := reflect.New(msd.t.Elem()) - if err := Unmarshal(item.Message, pb.Interface().(Message)); err != nil { - if _, err := fmt.Fprintf(w, "/* bad message: %v */\n", err); err != nil { - return err - } - } else { - if err := writeStruct(w, pb.Elem()); err != nil { - return err - } - } - } else { - // Unknown type. - if _, err := fmt.Fprintf(w, "[%d]: <\n", id); err != nil { - return err - } - w.indent() - if err := writeUnknownStruct(w, item.Message); err != nil { - return err - } - } - w.unindent() - if _, err := w.Write(gtNewline); err != nil { - return err - } - } - return nil -} - -func writeUnknownStruct(w *textWriter, data []byte) (err error) { - if !w.compact { - if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { - return err - } - } - b := NewBuffer(data) - for b.index < len(b.buf) { - x, err := b.DecodeVarint() - if err != nil { - _, err := fmt.Fprintf(w, "/* %v */\n", err) - return err - } - wire, tag := x&7, x>>3 - if wire == WireEndGroup { - w.unindent() - if _, err := w.Write(endBraceNewline); err != nil { - return err - } - continue - } - if _, err := fmt.Fprint(w, tag); err != nil { - return err - } - if wire != WireStartGroup { - if err := w.WriteByte(':'); err != nil { - return err - } - } - if !w.compact || wire == WireStartGroup { - if err := w.WriteByte(' '); err != nil { - return err - } - } - switch wire { - case WireBytes: - buf, e := b.DecodeRawBytes(false) - if e == nil { - _, err = fmt.Fprintf(w, "%q", buf) - } else { - _, err = fmt.Fprintf(w, "/* %v */", e) - } - case WireFixed32: - x, err = b.DecodeFixed32() - err = writeUnknownInt(w, x, err) - case WireFixed64: - x, err = b.DecodeFixed64() - err = writeUnknownInt(w, x, err) - case WireStartGroup: - err = w.WriteByte('{') - w.indent() - case WireVarint: - x, err = b.DecodeVarint() - err = writeUnknownInt(w, x, err) - default: - _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) - } - if err != nil { - return err - } - if err = w.WriteByte('\n'); err != nil { - return err - } - } - return nil -} - -func writeUnknownInt(w *textWriter, x uint64, err error) error { - if err == nil { - _, err = fmt.Fprint(w, x) - } else { - _, err = fmt.Fprintf(w, "/* %v */", err) - } - return err -} - -type int32Slice []int32 - -func (s int32Slice) Len() int { return len(s) } -func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } -func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// writeExtensions writes all the extensions in pv. -// pv is assumed to be a pointer to a protocol message struct that is extendable. -func writeExtensions(w *textWriter, pv reflect.Value) error { - emap := extensionMaps[pv.Type().Elem()] - ep := pv.Interface().(extendableProto) - - // Order the extensions by ID. - // This isn't strictly necessary, but it will give us - // canonical output, which will also make testing easier. - var m map[int32]Extension - if em, ok := ep.(extensionsMap); ok { - m = em.ExtensionMap() - } else if em, ok := ep.(extensionsBytes); ok { - eb := em.GetExtensions() - var err error - m, err = BytesToExtensionsMap(*eb) - if err != nil { - return err - } - } - - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) - - for _, extNum := range ids { - ext := m[extNum] - var desc *ExtensionDesc - if emap != nil { - desc = emap[extNum] - } - if desc == nil { - // Unknown extension. - if err := writeUnknownStruct(w, ext.enc); err != nil { - return err - } - continue - } - - pb, err := GetExtension(ep, desc) - if err != nil { - if _, err := fmt.Fprintln(os.Stderr, "proto: failed getting extension: ", err); err != nil { - return err - } - continue - } - - // Repeated extensions will appear as a slice. - if !desc.repeated() { - if err := writeExtension(w, desc.Name, pb); err != nil { - return err - } - } else { - v := reflect.ValueOf(pb) - for i := 0; i < v.Len(); i++ { - if err := writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { - return err - } - } - } - } - return nil -} - -func writeExtension(w *textWriter, name string, pb interface{}) error { - if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := writeAny(w, reflect.ValueOf(pb), nil); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - return nil -} - -func (w *textWriter) writeIndent() { - if !w.complete { - return - } - remain := w.ind * 2 - for remain > 0 { - n := remain - if n > len(spaces) { - n = len(spaces) - } - w.w.Write(spaces[:n]) - remain -= n - } - w.complete = false -} - -func marshalText(w io.Writer, pb Message, compact bool) error { - val := reflect.ValueOf(pb) - if pb == nil || val.IsNil() { - w.Write([]byte("")) - return nil - } - var bw *bufio.Writer - ww, ok := w.(writer) - if !ok { - bw = bufio.NewWriter(w) - ww = bw - } - aw := &textWriter{ - w: ww, - complete: true, - compact: compact, - } - - if tm, ok := pb.(encoding.TextMarshaler); ok { - text, err := tm.MarshalText() - if err != nil { - return err - } - if _, err = aw.Write(text); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil - } - // Dereference the received pointer so we don't have outer < and >. - v := reflect.Indirect(val) - if err := writeStruct(aw, v); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil -} - -// MarshalText writes a given protocol buffer in text format. -// The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { - return marshalText(w, pb, false) -} - -// MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, false) - return buf.String() -} - -// CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return marshalText(w, pb, true) } - -// CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, true) - return buf.String() -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser.go deleted file mode 100644 index f769937..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser.go +++ /dev/null @@ -1,800 +0,0 @@ -// Extensions for Protocol Buffers to create more go like structures. -// -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto -// -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto - -// Functions for parsing the Text protocol buffer format. -// TODO: message sets. - -import ( - "encoding" - "errors" - "fmt" - "reflect" - "strconv" - "strings" - "unicode/utf8" -) - -type ParseError struct { - Message string - Line int // 1-based line number - Offset int // 0-based byte offset from start of input -} - -func (p *ParseError) Error() string { - if p.Line == 1 { - // show offset only for first line - return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) - } - return fmt.Sprintf("line %d: %v", p.Line, p.Message) -} - -type token struct { - value string - err *ParseError - line int // line number - offset int // byte number from start of input, not start of line - unquoted string // the unquoted version of value, if it was a quoted string -} - -func (t *token) String() string { - if t.err == nil { - return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) - } - return fmt.Sprintf("parse error: %v", t.err) -} - -type textParser struct { - s string // remaining input - done bool // whether the parsing is finished (success or error) - backed bool // whether back() was called - offset, line int - cur token -} - -func newTextParser(s string) *textParser { - p := new(textParser) - p.s = s - p.line = 1 - p.cur.line = 1 - return p -} - -func (p *textParser) errorf(format string, a ...interface{}) *ParseError { - pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} - p.cur.err = pe - p.done = true - return pe -} - -// Numbers and identifiers are matched by [-+._A-Za-z0-9] -func isIdentOrNumberChar(c byte) bool { - switch { - case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': - return true - case '0' <= c && c <= '9': - return true - } - switch c { - case '-', '+', '.', '_': - return true - } - return false -} - -func isWhitespace(c byte) bool { - switch c { - case ' ', '\t', '\n', '\r': - return true - } - return false -} - -func (p *textParser) skipWhitespace() { - i := 0 - for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { - if p.s[i] == '#' { - // comment; skip to end of line or input - for i < len(p.s) && p.s[i] != '\n' { - i++ - } - if i == len(p.s) { - break - } - } - if p.s[i] == '\n' { - p.line++ - } - i++ - } - p.offset += i - p.s = p.s[i:len(p.s)] - if len(p.s) == 0 { - p.done = true - } -} - -func (p *textParser) advance() { - // Skip whitespace - p.skipWhitespace() - if p.done { - return - } - - // Start of non-whitespace - p.cur.err = nil - p.cur.offset, p.cur.line = p.offset, p.line - p.cur.unquoted = "" - switch p.s[0] { - case '<', '>', '{', '}', ':', '[', ']', ';', ',': - // Single symbol - p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] - case '"', '\'': - // Quoted string - i := 1 - for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { - if p.s[i] == '\\' && i+1 < len(p.s) { - // skip escaped char - i++ - } - i++ - } - if i >= len(p.s) || p.s[i] != p.s[0] { - p.errorf("unmatched quote") - return - } - unq, err := unquoteC(p.s[1:i], rune(p.s[0])) - if err != nil { - p.errorf("invalid quoted string %v", p.s[0:i+1]) - return - } - p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] - p.cur.unquoted = unq - default: - i := 0 - for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { - i++ - } - if i == 0 { - p.errorf("unexpected byte %#x", p.s[0]) - return - } - p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] - } - p.offset += len(p.cur.value) -} - -var ( - errBadUTF8 = errors.New("proto: bad UTF-8") - errBadHex = errors.New("proto: bad hexadecimal") -) - -func unquoteC(s string, quote rune) (string, error) { - // This is based on C++'s tokenizer.cc. - // Despite its name, this is *not* parsing C syntax. - // For instance, "\0" is an invalid quoted string. - - // Avoid allocation in trivial cases. - simple := true - for _, r := range s { - if r == '\\' || r == quote { - simple = false - break - } - } - if simple { - return s, nil - } - - buf := make([]byte, 0, 3*len(s)/2) - for len(s) > 0 { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", errBadUTF8 - } - s = s[n:] - if r != '\\' { - if r < utf8.RuneSelf { - buf = append(buf, byte(r)) - } else { - buf = append(buf, string(r)...) - } - continue - } - - ch, tail, err := unescape(s) - if err != nil { - return "", err - } - buf = append(buf, ch...) - s = tail - } - return string(buf), nil -} - -func unescape(s string) (ch string, tail string, err error) { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", "", errBadUTF8 - } - s = s[n:] - switch r { - case 'a': - return "\a", s, nil - case 'b': - return "\b", s, nil - case 'f': - return "\f", s, nil - case 'n': - return "\n", s, nil - case 'r': - return "\r", s, nil - case 't': - return "\t", s, nil - case 'v': - return "\v", s, nil - case '?': - return "?", s, nil // trigraph workaround - case '\'', '"', '\\': - return string(r), s, nil - case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X': - if len(s) < 2 { - return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) - } - base := 8 - ss := s[:2] - s = s[2:] - if r == 'x' || r == 'X' { - base = 16 - } else { - ss = string(r) + ss - } - i, err := strconv.ParseUint(ss, base, 8) - if err != nil { - return "", "", err - } - return string([]byte{byte(i)}), s, nil - case 'u', 'U': - n := 4 - if r == 'U' { - n = 8 - } - if len(s) < n { - return "", "", fmt.Errorf(`\%c requires %d digits`, r, n) - } - - bs := make([]byte, n/2) - for i := 0; i < n; i += 2 { - a, ok1 := unhex(s[i]) - b, ok2 := unhex(s[i+1]) - if !ok1 || !ok2 { - return "", "", errBadHex - } - bs[i/2] = a<<4 | b - } - s = s[n:] - return string(bs), s, nil - } - return "", "", fmt.Errorf(`unknown escape \%c`, r) -} - -// Adapted from src/pkg/strconv/quote.go. -func unhex(b byte) (v byte, ok bool) { - switch { - case '0' <= b && b <= '9': - return b - '0', true - case 'a' <= b && b <= 'f': - return b - 'a' + 10, true - case 'A' <= b && b <= 'F': - return b - 'A' + 10, true - } - return 0, false -} - -// Back off the parser by one token. Can only be done between calls to next(). -// It makes the next advance() a no-op. -func (p *textParser) back() { p.backed = true } - -// Advances the parser and returns the new current token. -func (p *textParser) next() *token { - if p.backed || p.done { - p.backed = false - return &p.cur - } - p.advance() - if p.done { - p.cur.value = "" - } else if len(p.cur.value) > 0 && p.cur.value[0] == '"' { - // Look for multiple quoted strings separated by whitespace, - // and concatenate them. - cat := p.cur - for { - p.skipWhitespace() - if p.done || p.s[0] != '"' { - break - } - p.advance() - if p.cur.err != nil { - return &p.cur - } - cat.value += " " + p.cur.value - cat.unquoted += p.cur.unquoted - } - p.done = false // parser may have seen EOF, but we want to return cat - p.cur = cat - } - return &p.cur -} - -func (p *textParser) consumeToken(s string) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != s { - p.back() - return p.errorf("expected %q, found %q", s, tok.value) - } - return nil -} - -// Return a RequiredNotSetError indicating which required field was not set. -func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < st.NumField(); i++ { - if !isNil(sv.Field(i)) { - continue - } - - props := sprops.Prop[i] - if props.Required { - return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} - } - } - return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen -} - -// Returns the index in the struct for the named field, as well as the parsed tag properties. -func structFieldByName(st reflect.Type, name string) (int, *Properties, bool) { - sprops := GetProperties(st) - i, ok := sprops.decoderOrigNames[name] - if ok { - return i, sprops.Prop[i], true - } - return -1, nil, false -} - -// Consume a ':' from the input stream (if the next token is a colon), -// returning an error if a colon is needed but not present. -func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ":" { - // Colon is optional when the field is a group or message. - needColon := true - switch props.Wire { - case "group": - needColon = false - case "bytes": - // A "bytes" field is either a message, a string, or a repeated field; - // those three become *T, *string and []T respectively, so we can check for - // this field being a pointer to a non-string. - if typ.Kind() == reflect.Ptr { - // *T or *string - if typ.Elem().Kind() == reflect.String { - break - } - } else if typ.Kind() == reflect.Slice { - // []T or []*T - if typ.Elem().Kind() != reflect.Ptr { - break - } - } else if typ.Kind() == reflect.String { - // The proto3 exception is for a string field, - // which requires a colon. - break - } - needColon = false - } - if needColon { - return p.errorf("expected ':', found %q", tok.value) - } - p.back() - } - return nil -} - -func (p *textParser) readStruct(sv reflect.Value, terminator string) error { - st := sv.Type() - reqCount := GetProperties(st).reqCount - var reqFieldErr error - fieldSet := make(map[string]bool) - // A struct is a sequence of "name: value", terminated by one of - // '>' or '}', or the end of the input. A name may also be - // "[extension]". - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - if tok.value == "[" { - // Looks like an extension. - // - // TODO: Check whether we need to handle - // namespace rooted names (e.g. ".something.Foo"). - tok = p.next() - if tok.err != nil { - return tok.err - } - var desc *ExtensionDesc - // This could be faster, but it's functional. - // TODO: Do something smarter than a linear scan. - for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { - if d.Name == tok.value { - desc = d - break - } - } - if desc == nil { - return p.errorf("unrecognized extension %q", tok.value) - } - // Check the extension terminator. - tok = p.next() - if tok.err != nil { - return tok.err - } - if tok.value != "]" { - return p.errorf("unrecognized extension terminator %q", tok.value) - } - - props := &Properties{} - props.Parse(desc.Tag) - - typ := reflect.TypeOf(desc.ExtensionType) - if err := p.checkForColon(props, typ); err != nil { - return err - } - - rep := desc.repeated() - - // Read the extension structure, and set it in - // the value we're constructing. - var ext reflect.Value - if !rep { - ext = reflect.New(typ).Elem() - } else { - ext = reflect.New(typ.Elem()).Elem() - } - if err := p.readAny(ext, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - ep := sv.Addr().Interface().(extendableProto) - if !rep { - SetExtension(ep, desc, ext.Interface()) - } else { - old, err := GetExtension(ep, desc) - var sl reflect.Value - if err == nil { - sl = reflect.ValueOf(old) // existing slice - } else { - sl = reflect.MakeSlice(typ, 0, 1) - } - sl = reflect.Append(sl, ext) - SetExtension(ep, desc, sl.Interface()) - } - } else { - // This is a normal, non-extension field. - name := tok.value - fi, props, ok := structFieldByName(st, name) - if !ok { - return p.errorf("unknown field name %q in %v", name, st) - } - - dst := sv.Field(fi) - - if dst.Kind() == reflect.Map { - // Consume any colon. - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Construct the map if it doesn't already exist. - if dst.IsNil() { - dst.Set(reflect.MakeMap(dst.Type())) - } - key := reflect.New(dst.Type().Key()).Elem() - val := reflect.New(dst.Type().Elem()).Elem() - - // The map entry should be this sequence of tokens: - // < key : KEY value : VALUE > - // Technically the "key" and "value" could come in any order, - // but in practice they won't. - - tok := p.next() - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - if err := p.consumeToken("key"); err != nil { - return err - } - if err := p.consumeToken(":"); err != nil { - return err - } - if err := p.readAny(key, props.mkeyprop); err != nil { - return err - } - if err := p.consumeToken("value"); err != nil { - return err - } - if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { - return err - } - if err := p.readAny(val, props.mvalprop); err != nil { - return err - } - if err := p.consumeToken(terminator); err != nil { - return err - } - - dst.SetMapIndex(key, val) - continue - } - - // Check that it's not already set if it's not a repeated field. - if !props.Repeated && fieldSet[name] { - return p.errorf("non-repeated field %q was repeated", name) - } - - if err := p.checkForColon(props, st.Field(fi).Type); err != nil { - return err - } - - // Parse into the field. - fieldSet[name] = true - if err := p.readAny(dst, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } else if props.Required { - reqCount-- - } - } - - // For backward compatibility, permit a semicolon or comma after a field. - tok = p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ";" && tok.value != "," { - p.back() - } - } - - if reqCount > 0 { - return p.missingRequiredFieldError(sv) - } - return reqFieldErr -} - -func (p *textParser) readAny(v reflect.Value, props *Properties) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "" { - return p.errorf("unexpected EOF") - } - if len(props.CustomType) > 0 { - if props.Repeated { - t := reflect.TypeOf(v.Interface()) - if t.Kind() == reflect.Slice { - tc := reflect.TypeOf(new(Marshaler)) - ok := t.Elem().Implements(tc.Elem()) - if ok { - fv := v - flen := fv.Len() - if flen == fv.Cap() { - nav := reflect.MakeSlice(v.Type(), flen, 2*flen+1) - reflect.Copy(nav, fv) - fv.Set(nav) - } - fv.SetLen(flen + 1) - - // Read one. - p.back() - return p.readAny(fv.Index(flen), props) - } - } - } - if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr { - custom := reflect.New(props.ctype.Elem()).Interface().(Unmarshaler) - err := custom.Unmarshal([]byte(tok.unquoted)) - if err != nil { - return p.errorf("%v %v: %v", err, v.Type(), tok.value) - } - v.Set(reflect.ValueOf(custom)) - } else { - custom := reflect.New(reflect.TypeOf(v.Interface())).Interface().(Unmarshaler) - err := custom.Unmarshal([]byte(tok.unquoted)) - if err != nil { - return p.errorf("%v %v: %v", err, v.Type(), tok.value) - } - v.Set(reflect.Indirect(reflect.ValueOf(custom))) - } - return nil - } - switch fv := v; fv.Kind() { - case reflect.Slice: - at := v.Type() - if at.Elem().Kind() == reflect.Uint8 { - // Special case for []byte - if tok.value[0] != '"' && tok.value[0] != '\'' { - // Deliberately written out here, as the error after - // this switch statement would write "invalid []byte: ...", - // which is not as user-friendly. - return p.errorf("invalid string: %v", tok.value) - } - bytes := []byte(tok.unquoted) - fv.Set(reflect.ValueOf(bytes)) - return nil - } - // Repeated field. May already exist. - flen := fv.Len() - if flen == fv.Cap() { - nav := reflect.MakeSlice(at, flen, 2*flen+1) - reflect.Copy(nav, fv) - fv.Set(nav) - } - fv.SetLen(flen + 1) - - // Read one. - p.back() - return p.readAny(fv.Index(flen), props) - case reflect.Bool: - // Either "true", "false", 1 or 0. - switch tok.value { - case "true", "1": - fv.SetBool(true) - return nil - case "false", "0": - fv.SetBool(false) - return nil - } - case reflect.Float32, reflect.Float64: - v := tok.value - // Ignore 'f' for compatibility with output generated by C++, but don't - // remove 'f' when the value is "-inf" or "inf". - if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { - v = v[:len(v)-1] - } - if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { - fv.SetFloat(f) - return nil - } - case reflect.Int32: - if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { - fv.SetInt(x) - return nil - } - - if len(props.Enum) == 0 { - break - } - m, ok := enumValueMaps[props.Enum] - if !ok { - break - } - x, ok := m[tok.value] - if !ok { - break - } - fv.SetInt(int64(x)) - return nil - case reflect.Int64: - if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { - fv.SetInt(x) - return nil - } - - case reflect.Ptr: - // A basic field (indirected through pointer), or a repeated message/group - p.back() - fv.Set(reflect.New(fv.Type().Elem())) - return p.readAny(fv.Elem(), props) - case reflect.String: - if tok.value[0] == '"' || tok.value[0] == '\'' { - fv.SetString(tok.unquoted) - return nil - } - case reflect.Struct: - var terminator string - switch tok.value { - case "{": - terminator = "}" - case "<": - terminator = ">" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - // TODO: Handle nested messages which implement encoding.TextUnmarshaler. - return p.readStruct(fv, terminator) - case reflect.Uint32: - if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) - return nil - } - case reflect.Uint64: - if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { - fv.SetUint(x) - return nil - } - } - return p.errorf("invalid %v: %v", v.Type(), tok.value) -} - -// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb -// before starting to unmarshal, so any existing data in pb is always removed. -// If a required field is not set and no other error occurs, -// UnmarshalText returns *RequiredNotSetError. -func UnmarshalText(s string, pb Message) error { - if um, ok := pb.(encoding.TextUnmarshaler); ok { - err := um.UnmarshalText([]byte(s)) - return err - } - pb.Reset() - v := reflect.ValueOf(pb) - if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil { - return pe - } - return nil -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser_test.go deleted file mode 100644 index 0a376e0..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser_test.go +++ /dev/null @@ -1,511 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "math" - "reflect" - "testing" - - . "github.com/gogo/protobuf/proto" - proto3pb "github.com/gogo/protobuf/proto/proto3_proto" - . "github.com/gogo/protobuf/proto/testdata" -) - -type UnmarshalTextTest struct { - in string - err string // if "", no error expected - out *MyMessage -} - -func buildExtStructTest(text string) UnmarshalTextTest { - msg := &MyMessage{ - Count: Int32(42), - } - SetExtension(msg, E_Ext_More, &Ext{ - Data: String("Hello, world!"), - }) - return UnmarshalTextTest{in: text, out: msg} -} - -func buildExtDataTest(text string) UnmarshalTextTest { - msg := &MyMessage{ - Count: Int32(42), - } - SetExtension(msg, E_Ext_Text, String("Hello, world!")) - SetExtension(msg, E_Ext_Number, Int32(1729)) - return UnmarshalTextTest{in: text, out: msg} -} - -func buildExtRepStringTest(text string) UnmarshalTextTest { - msg := &MyMessage{ - Count: Int32(42), - } - if err := SetExtension(msg, E_Greeting, []string{"bula", "hola"}); err != nil { - panic(err) - } - return UnmarshalTextTest{in: text, out: msg} -} - -var unMarshalTextTests = []UnmarshalTextTest{ - // Basic - { - in: " count:42\n name:\"Dave\" ", - out: &MyMessage{ - Count: Int32(42), - Name: String("Dave"), - }, - }, - - // Empty quoted string - { - in: `count:42 name:""`, - out: &MyMessage{ - Count: Int32(42), - Name: String(""), - }, - }, - - // Quoted string concatenation - { - in: `count:42 name: "My name is "` + "\n" + `"elsewhere"`, - out: &MyMessage{ - Count: Int32(42), - Name: String("My name is elsewhere"), - }, - }, - - // Quoted string with escaped apostrophe - { - in: `count:42 name: "HOLIDAY - New Year\'s Day"`, - out: &MyMessage{ - Count: Int32(42), - Name: String("HOLIDAY - New Year's Day"), - }, - }, - - // Quoted string with single quote - { - in: `count:42 name: 'Roger "The Ramster" Ramjet'`, - out: &MyMessage{ - Count: Int32(42), - Name: String(`Roger "The Ramster" Ramjet`), - }, - }, - - // Quoted string with all the accepted special characters from the C++ test - { - in: `count:42 name: ` + "\"\\\"A string with \\' characters \\n and \\r newlines and \\t tabs and \\001 slashes \\\\ and multiple spaces\"", - out: &MyMessage{ - Count: Int32(42), - Name: String("\"A string with ' characters \n and \r newlines and \t tabs and \001 slashes \\ and multiple spaces"), - }, - }, - - // Quoted string with quoted backslash - { - in: `count:42 name: "\\'xyz"`, - out: &MyMessage{ - Count: Int32(42), - Name: String(`\'xyz`), - }, - }, - - // Quoted string with UTF-8 bytes. - { - in: "count:42 name: '\303\277\302\201\xAB'", - out: &MyMessage{ - Count: Int32(42), - Name: String("\303\277\302\201\xAB"), - }, - }, - - // Bad quoted string - { - in: `inner: < host: "\0" >` + "\n", - err: `line 1.15: invalid quoted string "\0"`, - }, - - // Number too large for int64 - { - in: "count: 1 others { key: 123456789012345678901 }", - err: "line 1.23: invalid int64: 123456789012345678901", - }, - - // Number too large for int32 - { - in: "count: 1234567890123", - err: "line 1.7: invalid int32: 1234567890123", - }, - - // Number in hexadecimal - { - in: "count: 0x2beef", - out: &MyMessage{ - Count: Int32(0x2beef), - }, - }, - - // Number in octal - { - in: "count: 024601", - out: &MyMessage{ - Count: Int32(024601), - }, - }, - - // Floating point number with "f" suffix - { - in: "count: 4 others:< weight: 17.0f >", - out: &MyMessage{ - Count: Int32(4), - Others: []*OtherMessage{ - { - Weight: Float32(17), - }, - }, - }, - }, - - // Floating point positive infinity - { - in: "count: 4 bigfloat: inf", - out: &MyMessage{ - Count: Int32(4), - Bigfloat: Float64(math.Inf(1)), - }, - }, - - // Floating point negative infinity - { - in: "count: 4 bigfloat: -inf", - out: &MyMessage{ - Count: Int32(4), - Bigfloat: Float64(math.Inf(-1)), - }, - }, - - // Number too large for float32 - { - in: "others:< weight: 12345678901234567890123456789012345678901234567890 >", - err: "line 1.17: invalid float32: 12345678901234567890123456789012345678901234567890", - }, - - // Number posing as a quoted string - { - in: `inner: < host: 12 >` + "\n", - err: `line 1.15: invalid string: 12`, - }, - - // Quoted string posing as int32 - { - in: `count: "12"`, - err: `line 1.7: invalid int32: "12"`, - }, - - // Quoted string posing a float32 - { - in: `others:< weight: "17.4" >`, - err: `line 1.17: invalid float32: "17.4"`, - }, - - // Enum - { - in: `count:42 bikeshed: BLUE`, - out: &MyMessage{ - Count: Int32(42), - Bikeshed: MyMessage_BLUE.Enum(), - }, - }, - - // Repeated field - { - in: `count:42 pet: "horsey" pet:"bunny"`, - out: &MyMessage{ - Count: Int32(42), - Pet: []string{"horsey", "bunny"}, - }, - }, - - // Repeated message with/without colon and <>/{} - { - in: `count:42 others:{} others{} others:<> others:{}`, - out: &MyMessage{ - Count: Int32(42), - Others: []*OtherMessage{ - {}, - {}, - {}, - {}, - }, - }, - }, - - // Missing colon for inner message - { - in: `count:42 inner < host: "cauchy.syd" >`, - out: &MyMessage{ - Count: Int32(42), - Inner: &InnerMessage{ - Host: String("cauchy.syd"), - }, - }, - }, - - // Missing colon for string field - { - in: `name "Dave"`, - err: `line 1.5: expected ':', found "\"Dave\""`, - }, - - // Missing colon for int32 field - { - in: `count 42`, - err: `line 1.6: expected ':', found "42"`, - }, - - // Missing required field - { - in: `name: "Pawel"`, - err: `proto: required field "testdata.MyMessage.count" not set`, - out: &MyMessage{ - Name: String("Pawel"), - }, - }, - - // Repeated non-repeated field - { - in: `name: "Rob" name: "Russ"`, - err: `line 1.12: non-repeated field "name" was repeated`, - }, - - // Group - { - in: `count: 17 SomeGroup { group_field: 12 }`, - out: &MyMessage{ - Count: Int32(17), - Somegroup: &MyMessage_SomeGroup{ - GroupField: Int32(12), - }, - }, - }, - - // Semicolon between fields - { - in: `count:3;name:"Calvin"`, - out: &MyMessage{ - Count: Int32(3), - Name: String("Calvin"), - }, - }, - // Comma between fields - { - in: `count:4,name:"Ezekiel"`, - out: &MyMessage{ - Count: Int32(4), - Name: String("Ezekiel"), - }, - }, - - // Extension - buildExtStructTest(`count: 42 [testdata.Ext.more]:`), - buildExtStructTest(`count: 42 [testdata.Ext.more] {data:"Hello, world!"}`), - buildExtDataTest(`count: 42 [testdata.Ext.text]:"Hello, world!" [testdata.Ext.number]:1729`), - buildExtRepStringTest(`count: 42 [testdata.greeting]:"bula" [testdata.greeting]:"hola"`), - - // Big all-in-one - { - in: "count:42 # Meaning\n" + - `name:"Dave" ` + - `quote:"\"I didn't want to go.\"" ` + - `pet:"bunny" ` + - `pet:"kitty" ` + - `pet:"horsey" ` + - `inner:<` + - ` host:"footrest.syd" ` + - ` port:7001 ` + - ` connected:true ` + - `> ` + - `others:<` + - ` key:3735928559 ` + - ` value:"\x01A\a\f" ` + - `> ` + - `others:<` + - " weight:58.9 # Atomic weight of Co\n" + - ` inner:<` + - ` host:"lesha.mtv" ` + - ` port:8002 ` + - ` >` + - `>`, - out: &MyMessage{ - Count: Int32(42), - Name: String("Dave"), - Quote: String(`"I didn't want to go."`), - Pet: []string{"bunny", "kitty", "horsey"}, - Inner: &InnerMessage{ - Host: String("footrest.syd"), - Port: Int32(7001), - Connected: Bool(true), - }, - Others: []*OtherMessage{ - { - Key: Int64(3735928559), - Value: []byte{0x1, 'A', '\a', '\f'}, - }, - { - Weight: Float32(58.9), - Inner: &InnerMessage{ - Host: String("lesha.mtv"), - Port: Int32(8002), - }, - }, - }, - }, - }, -} - -func TestUnmarshalText(t *testing.T) { - for i, test := range unMarshalTextTests { - pb := new(MyMessage) - err := UnmarshalText(test.in, pb) - if test.err == "" { - // We don't expect failure. - if err != nil { - t.Errorf("Test %d: Unexpected error: %v", i, err) - } else if !reflect.DeepEqual(pb, test.out) { - t.Errorf("Test %d: Incorrect populated \nHave: %v\nWant: %v", - i, pb, test.out) - } - } else { - // We do expect failure. - if err == nil { - t.Errorf("Test %d: Didn't get expected error: %v", i, test.err) - } else if err.Error() != test.err { - t.Errorf("Test %d: Incorrect error.\nHave: %v\nWant: %v", - i, err.Error(), test.err) - } else if _, ok := err.(*RequiredNotSetError); ok && test.out != nil && !reflect.DeepEqual(pb, test.out) { - t.Errorf("Test %d: Incorrect populated \nHave: %v\nWant: %v", - i, pb, test.out) - } - } - } -} - -func TestUnmarshalTextCustomMessage(t *testing.T) { - msg := &textMessage{} - if err := UnmarshalText("custom", msg); err != nil { - t.Errorf("Unexpected error from custom unmarshal: %v", err) - } - if UnmarshalText("not custom", msg) == nil { - t.Errorf("Didn't get expected error from custom unmarshal") - } -} - -// Regression test; this caused a panic. -func TestRepeatedEnum(t *testing.T) { - pb := new(RepeatedEnum) - if err := UnmarshalText("color: RED", pb); err != nil { - t.Fatal(err) - } - exp := &RepeatedEnum{ - Color: []RepeatedEnum_Color{RepeatedEnum_RED}, - } - if !Equal(pb, exp) { - t.Errorf("Incorrect populated \nHave: %v\nWant: %v", pb, exp) - } -} - -func TestProto3TextParsing(t *testing.T) { - m := new(proto3pb.Message) - const in = `name: "Wallace" true_scotsman: true` - want := &proto3pb.Message{ - Name: "Wallace", - TrueScotsman: true, - } - if err := UnmarshalText(in, m); err != nil { - t.Fatal(err) - } - if !Equal(m, want) { - t.Errorf("\n got %v\nwant %v", m, want) - } -} - -func TestMapParsing(t *testing.T) { - m := new(MessageWithMap) - const in = `name_mapping: name_mapping:` + - `msg_mapping:>` + - `msg_mapping>` + // no colon after "value" - `byte_mapping:` - want := &MessageWithMap{ - NameMapping: map[int32]string{ - 1: "Beatles", - 1234: "Feist", - }, - MsgMapping: map[int64]*FloatingPoint{ - -4: {F: Float64(2.0)}, - -2: {F: Float64(4.0)}, - }, - ByteMapping: map[bool][]byte{ - true: []byte("so be it"), - }, - } - if err := UnmarshalText(in, m); err != nil { - t.Fatal(err) - } - if !Equal(m, want) { - t.Errorf("\n got %v\nwant %v", m, want) - } -} - -var benchInput string - -func init() { - benchInput = "count: 4\n" - for i := 0; i < 1000; i++ { - benchInput += "pet: \"fido\"\n" - } - - // Check it is valid input. - pb := new(MyMessage) - err := UnmarshalText(benchInput, pb) - if err != nil { - panic("Bad benchmark input: " + err.Error()) - } -} - -func BenchmarkUnmarshalText(b *testing.B) { - pb := new(MyMessage) - for i := 0; i < b.N; i++ { - UnmarshalText(benchInput, pb) - } - b.SetBytes(int64(len(benchInput))) -} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_test.go b/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_test.go deleted file mode 100644 index 0018fa6..0000000 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_test.go +++ /dev/null @@ -1,436 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package proto_test - -import ( - "bytes" - "errors" - "io/ioutil" - "math" - "strings" - "testing" - - "github.com/gogo/protobuf/proto" - - proto3pb "github.com/gogo/protobuf/proto/proto3_proto" - pb "github.com/gogo/protobuf/proto/testdata" -) - -// textMessage implements the methods that allow it to marshal and unmarshal -// itself as text. -type textMessage struct { -} - -func (*textMessage) MarshalText() ([]byte, error) { - return []byte("custom"), nil -} - -func (*textMessage) UnmarshalText(bytes []byte) error { - if string(bytes) != "custom" { - return errors.New("expected 'custom'") - } - return nil -} - -func (*textMessage) Reset() {} -func (*textMessage) String() string { return "" } -func (*textMessage) ProtoMessage() {} - -func newTestMessage() *pb.MyMessage { - msg := &pb.MyMessage{ - Count: proto.Int32(42), - Name: proto.String("Dave"), - Quote: proto.String(`"I didn't want to go."`), - Pet: []string{"bunny", "kitty", "horsey"}, - Inner: &pb.InnerMessage{ - Host: proto.String("footrest.syd"), - Port: proto.Int32(7001), - Connected: proto.Bool(true), - }, - Others: []*pb.OtherMessage{ - { - Key: proto.Int64(0xdeadbeef), - Value: []byte{1, 65, 7, 12}, - }, - { - Weight: proto.Float32(6.022), - Inner: &pb.InnerMessage{ - Host: proto.String("lesha.mtv"), - Port: proto.Int32(8002), - }, - }, - }, - Bikeshed: pb.MyMessage_BLUE.Enum(), - Somegroup: &pb.MyMessage_SomeGroup{ - GroupField: proto.Int32(8), - }, - // One normally wouldn't do this. - // This is an undeclared tag 13, as a varint (wire type 0) with value 4. - XXX_unrecognized: []byte{13<<3 | 0, 4}, - } - ext := &pb.Ext{ - Data: proto.String("Big gobs for big rats"), - } - if err := proto.SetExtension(msg, pb.E_Ext_More, ext); err != nil { - panic(err) - } - greetings := []string{"adg", "easy", "cow"} - if err := proto.SetExtension(msg, pb.E_Greeting, greetings); err != nil { - panic(err) - } - - // Add an unknown extension. We marshal a pb.Ext, and fake the ID. - b, err := proto.Marshal(&pb.Ext{Data: proto.String("3G skiing")}) - if err != nil { - panic(err) - } - b = append(proto.EncodeVarint(201<<3|proto.WireBytes), b...) - proto.SetRawExtension(msg, 201, b) - - // Extensions can be plain fields, too, so let's test that. - b = append(proto.EncodeVarint(202<<3|proto.WireVarint), 19) - proto.SetRawExtension(msg, 202, b) - - return msg -} - -const text = `count: 42 -name: "Dave" -quote: "\"I didn't want to go.\"" -pet: "bunny" -pet: "kitty" -pet: "horsey" -inner: < - host: "footrest.syd" - port: 7001 - connected: true -> -others: < - key: 3735928559 - value: "\001A\007\014" -> -others: < - weight: 6.022 - inner: < - host: "lesha.mtv" - port: 8002 - > -> -bikeshed: BLUE -SomeGroup { - group_field: 8 -} -/* 2 unknown bytes */ -13: 4 -[testdata.Ext.more]: < - data: "Big gobs for big rats" -> -[testdata.greeting]: "adg" -[testdata.greeting]: "easy" -[testdata.greeting]: "cow" -/* 13 unknown bytes */ -201: "\t3G skiing" -/* 3 unknown bytes */ -202: 19 -` - -func TestMarshalText(t *testing.T) { - buf := new(bytes.Buffer) - if err := proto.MarshalText(buf, newTestMessage()); err != nil { - t.Fatalf("proto.MarshalText: %v", err) - } - s := buf.String() - if s != text { - t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v===\n", s, text) - } -} - -func TestMarshalTextCustomMessage(t *testing.T) { - buf := new(bytes.Buffer) - if err := proto.MarshalText(buf, &textMessage{}); err != nil { - t.Fatalf("proto.MarshalText: %v", err) - } - s := buf.String() - if s != "custom" { - t.Errorf("Got %q, expected %q", s, "custom") - } -} -func TestMarshalTextNil(t *testing.T) { - want := "" - tests := []proto.Message{nil, (*pb.MyMessage)(nil)} - for i, test := range tests { - buf := new(bytes.Buffer) - if err := proto.MarshalText(buf, test); err != nil { - t.Fatal(err) - } - if got := buf.String(); got != want { - t.Errorf("%d: got %q want %q", i, got, want) - } - } -} - -func TestMarshalTextUnknownEnum(t *testing.T) { - // The Color enum only specifies values 0-2. - m := &pb.MyMessage{Bikeshed: pb.MyMessage_Color(3).Enum()} - got := m.String() - const want = `bikeshed:3 ` - if got != want { - t.Errorf("\n got %q\nwant %q", got, want) - } -} - -func BenchmarkMarshalTextBuffered(b *testing.B) { - buf := new(bytes.Buffer) - m := newTestMessage() - for i := 0; i < b.N; i++ { - buf.Reset() - proto.MarshalText(buf, m) - } -} - -func BenchmarkMarshalTextUnbuffered(b *testing.B) { - w := ioutil.Discard - m := newTestMessage() - for i := 0; i < b.N; i++ { - proto.MarshalText(w, m) - } -} - -func compact(src string) string { - // s/[ \n]+/ /g; s/ $//; - dst := make([]byte, len(src)) - space, comment := false, false - j := 0 - for i := 0; i < len(src); i++ { - if strings.HasPrefix(src[i:], "/*") { - comment = true - i++ - continue - } - if comment && strings.HasPrefix(src[i:], "*/") { - comment = false - i++ - continue - } - if comment { - continue - } - c := src[i] - if c == ' ' || c == '\n' { - space = true - continue - } - if j > 0 && (dst[j-1] == ':' || dst[j-1] == '<' || dst[j-1] == '{') { - space = false - } - if c == '{' { - space = false - } - if space { - dst[j] = ' ' - j++ - space = false - } - dst[j] = c - j++ - } - if space { - dst[j] = ' ' - j++ - } - return string(dst[0:j]) -} - -var compactText = compact(text) - -func TestCompactText(t *testing.T) { - s := proto.CompactTextString(newTestMessage()) - if s != compactText { - t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v\n===\n", s, compactText) - } -} - -func TestStringEscaping(t *testing.T) { - testCases := []struct { - in *pb.Strings - out string - }{ - { - // Test data from C++ test (TextFormatTest.StringEscape). - // Single divergence: we don't escape apostrophes. - &pb.Strings{StringField: proto.String("\"A string with ' characters \n and \r newlines and \t tabs and \001 slashes \\ and multiple spaces")}, - "string_field: \"\\\"A string with ' characters \\n and \\r newlines and \\t tabs and \\001 slashes \\\\ and multiple spaces\"\n", - }, - { - // Test data from the same C++ test. - &pb.Strings{StringField: proto.String("\350\260\267\346\255\214")}, - "string_field: \"\\350\\260\\267\\346\\255\\214\"\n", - }, - { - // Some UTF-8. - &pb.Strings{StringField: proto.String("\x00\x01\xff\x81")}, - `string_field: "\000\001\377\201"` + "\n", - }, - } - - for i, tc := range testCases { - var buf bytes.Buffer - if err := proto.MarshalText(&buf, tc.in); err != nil { - t.Errorf("proto.MarsalText: %v", err) - continue - } - s := buf.String() - if s != tc.out { - t.Errorf("#%d: Got:\n%s\nExpected:\n%s\n", i, s, tc.out) - continue - } - - // Check round-trip. - pb := new(pb.Strings) - if err := proto.UnmarshalText(s, pb); err != nil { - t.Errorf("#%d: UnmarshalText: %v", i, err) - continue - } - if !proto.Equal(pb, tc.in) { - t.Errorf("#%d: Round-trip failed:\nstart: %v\n end: %v", i, tc.in, pb) - } - } -} - -// A limitedWriter accepts some output before it fails. -// This is a proxy for something like a nearly-full or imminently-failing disk, -// or a network connection that is about to die. -type limitedWriter struct { - b bytes.Buffer - limit int -} - -var outOfSpace = errors.New("proto: insufficient space") - -func (w *limitedWriter) Write(p []byte) (n int, err error) { - var avail = w.limit - w.b.Len() - if avail <= 0 { - return 0, outOfSpace - } - if len(p) <= avail { - return w.b.Write(p) - } - n, _ = w.b.Write(p[:avail]) - return n, outOfSpace -} - -func TestMarshalTextFailing(t *testing.T) { - // Try lots of different sizes to exercise more error code-paths. - for lim := 0; lim < len(text); lim++ { - buf := new(limitedWriter) - buf.limit = lim - err := proto.MarshalText(buf, newTestMessage()) - // We expect a certain error, but also some partial results in the buffer. - if err != outOfSpace { - t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v===\n", err, outOfSpace) - } - s := buf.b.String() - x := text[:buf.limit] - if s != x { - t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v===\n", s, x) - } - } -} - -func TestFloats(t *testing.T) { - tests := []struct { - f float64 - want string - }{ - {0, "0"}, - {4.7, "4.7"}, - {math.Inf(1), "inf"}, - {math.Inf(-1), "-inf"}, - {math.NaN(), "nan"}, - } - for _, test := range tests { - msg := &pb.FloatingPoint{F: &test.f} - got := strings.TrimSpace(msg.String()) - want := `f:` + test.want - if got != want { - t.Errorf("f=%f: got %q, want %q", test.f, got, want) - } - } -} - -func TestRepeatedNilText(t *testing.T) { - m := &pb.MessageList{ - Message: []*pb.MessageList_Message{ - nil, - { - Name: proto.String("Horse"), - }, - nil, - }, - } - want := `Message -Message { - name: "Horse" -} -Message -` - if s := proto.MarshalTextString(m); s != want { - t.Errorf(" got: %s\nwant: %s", s, want) - } -} - -func TestProto3Text(t *testing.T) { - tests := []struct { - m proto.Message - want string - }{ - // zero message - {&proto3pb.Message{}, ``}, - // zero message except for an empty byte slice - {&proto3pb.Message{Data: []byte{}}, ``}, - // trivial case - {&proto3pb.Message{Name: "Rob", HeightInCm: 175}, `name:"Rob" height_in_cm:175`}, - // empty map - {&pb.MessageWithMap{}, ``}, - // non-empty map; current map format is the same as a repeated struct - { - &pb.MessageWithMap{NameMapping: map[int32]string{1234: "Feist"}}, - `name_mapping:`, - }, - } - for _, test := range tests { - got := strings.TrimSpace(test.m.String()) - if got != test.want { - t.Errorf("\n got %s\nwant %s", got, test.want) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/README.md deleted file mode 100644 index 9ad75a0..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# Gorilla WebSocket - -Gorilla WebSocket is a [Go](http://golang.org/) implementation of the -[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. - -### Documentation - -* [API Reference](http://godoc.org/github.com/gorilla/websocket) -* [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) -* [File watch example](https://github.com/gorilla/websocket/tree/master/examples/filewatch) - -### Status - -The Gorilla WebSocket package provides a complete and tested implementation of -the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The -package API is stable. - -### Installation - - go get github.com/gorilla/websocket - -### Protocol Compliance - -The Gorilla WebSocket package passes the server tests in the [Autobahn Test -Suite](http://autobahn.ws/testsuite) using the application in the [examples/autobahn -subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn). - -### Gorilla WebSocket compared with other packages - - - - - - - - - - - - - - - - - - -
github.com/gorillagolang.org/x/net
RFC 6455 Features
Passes Autobahn Test SuiteYesNo
Receive fragmented messageYesNo, see note 1
Send close messageYesNo
Send pings and receive pongsYesNo
Get the type of a received data messageYesYes, see note 2
Other Features
Limit size of received messageYesNo
Read message using io.ReaderYesNo, see note 3
Write message using io.WriteCloserYesNo, see note 3
- -Notes: - -1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html). -2. The application can get the type of a received data message by implementing - a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal) - function. -3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries. - Read returns when the input buffer is full or a frame boundary is - encountered. Each call to Write sends a single frame message. The Gorilla - io.Reader and io.WriteCloser operate on a single WebSocket message. - diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/bench_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/bench_test.go deleted file mode 100644 index f66fc36..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/bench_test.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2014 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "testing" -) - -func BenchmarkMaskBytes(b *testing.B) { - var key [4]byte - data := make([]byte, 1024) - pos := 0 - for i := 0; i < b.N; i++ { - pos = maskBytes(key, pos, data) - } - b.SetBytes(int64(len(data))) -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/client.go b/Godeps/_workspace/src/github.com/gorilla/websocket/client.go deleted file mode 100644 index 93db8dd..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/client.go +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bytes" - "crypto/tls" - "errors" - "io" - "io/ioutil" - "net" - "net/http" - "net/url" - "strings" - "time" -) - -// ErrBadHandshake is returned when the server response to opening handshake is -// invalid. -var ErrBadHandshake = errors.New("websocket: bad handshake") - -// NewClient creates a new client connection using the given net connection. -// The URL u specifies the host and request URI. Use requestHeader to specify -// the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies -// (Cookie). Use the response.Header to get the selected subprotocol -// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). -// -// If the WebSocket handshake fails, ErrBadHandshake is returned along with a -// non-nil *http.Response so that callers can handle redirects, authentication, -// etc. -func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { - challengeKey, err := generateChallengeKey() - if err != nil { - return nil, nil, err - } - acceptKey := computeAcceptKey(challengeKey) - - c = newConn(netConn, false, readBufSize, writeBufSize) - p := c.writeBuf[:0] - p = append(p, "GET "...) - p = append(p, u.RequestURI()...) - p = append(p, " HTTP/1.1\r\nHost: "...) - p = append(p, u.Host...) - // "Upgrade" is capitalized for servers that do not use case insensitive - // comparisons on header tokens. - p = append(p, "\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: "...) - p = append(p, challengeKey...) - p = append(p, "\r\n"...) - for k, vs := range requestHeader { - for _, v := range vs { - p = append(p, k...) - p = append(p, ": "...) - p = append(p, v...) - p = append(p, "\r\n"...) - } - } - p = append(p, "\r\n"...) - - if _, err := netConn.Write(p); err != nil { - return nil, nil, err - } - - resp, err := http.ReadResponse(c.br, &http.Request{Method: "GET", URL: u}) - if err != nil { - return nil, nil, err - } - if resp.StatusCode != 101 || - !strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") || - !strings.EqualFold(resp.Header.Get("Connection"), "upgrade") || - resp.Header.Get("Sec-Websocket-Accept") != acceptKey { - return nil, resp, ErrBadHandshake - } - c.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") - return c, resp, nil -} - -// A Dialer contains options for connecting to WebSocket server. -type Dialer struct { - // NetDial specifies the dial function for creating TCP connections. If - // NetDial is nil, net.Dial is used. - NetDial func(network, addr string) (net.Conn, error) - - // TLSClientConfig specifies the TLS configuration to use with tls.Client. - // If nil, the default configuration is used. - TLSClientConfig *tls.Config - - // HandshakeTimeout specifies the duration for the handshake to complete. - HandshakeTimeout time.Duration - - // Input and output buffer sizes. If the buffer size is zero, then a - // default value of 4096 is used. - ReadBufferSize, WriteBufferSize int - - // Subprotocols specifies the client's requested subprotocols. - Subprotocols []string -} - -var errMalformedURL = errors.New("malformed ws or wss URL") - -// parseURL parses the URL. The url.Parse function is not used here because -// url.Parse mangles the path. -func parseURL(s string) (*url.URL, error) { - // From the RFC: - // - // ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ] - // wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ] - // - // We don't use the net/url parser here because the dialer interface does - // not provide a way for applications to work around percent deocding in - // the net/url parser. - - var u url.URL - switch { - case strings.HasPrefix(s, "ws://"): - u.Scheme = "ws" - s = s[len("ws://"):] - case strings.HasPrefix(s, "wss://"): - u.Scheme = "wss" - s = s[len("wss://"):] - default: - return nil, errMalformedURL - } - - u.Host = s - u.Opaque = "/" - if i := strings.Index(s, "/"); i >= 0 { - u.Host = s[:i] - u.Opaque = s[i:] - } - - if strings.Contains(u.Host, "@") { - // WebSocket URIs do not contain user information. - return nil, errMalformedURL - } - - return &u, nil -} - -func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { - hostPort = u.Host - hostNoPort = u.Host - if i := strings.LastIndex(u.Host, ":"); i > strings.LastIndex(u.Host, "]") { - hostNoPort = hostNoPort[:i] - } else { - if u.Scheme == "wss" { - hostPort += ":443" - } else { - hostPort += ":80" - } - } - return hostPort, hostNoPort -} - -// DefaultDialer is a dialer with all fields set to the default zero values. -var DefaultDialer *Dialer - -// Dial creates a new client connection. Use requestHeader to specify the -// origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). -// Use the response.Header to get the selected subprotocol -// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). -// -// If the WebSocket handshake fails, ErrBadHandshake is returned along with a -// non-nil *http.Response so that callers can handle redirects, authentication, -// etcetera. The response body may not contain the entire response and does not -// need to be closed by the application. -func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { - u, err := parseURL(urlStr) - if err != nil { - return nil, nil, err - } - - hostPort, hostNoPort := hostPortNoPort(u) - - if d == nil { - d = &Dialer{} - } - - var deadline time.Time - if d.HandshakeTimeout != 0 { - deadline = time.Now().Add(d.HandshakeTimeout) - } - - netDial := d.NetDial - if netDial == nil { - netDialer := &net.Dialer{Deadline: deadline} - netDial = netDialer.Dial - } - - netConn, err := netDial("tcp", hostPort) - if err != nil { - return nil, nil, err - } - - defer func() { - if netConn != nil { - netConn.Close() - } - }() - - if err := netConn.SetDeadline(deadline); err != nil { - return nil, nil, err - } - - if u.Scheme == "wss" { - cfg := d.TLSClientConfig - if cfg == nil { - cfg = &tls.Config{ServerName: hostNoPort} - } else if cfg.ServerName == "" { - shallowCopy := *cfg - cfg = &shallowCopy - cfg.ServerName = hostNoPort - } - tlsConn := tls.Client(netConn, cfg) - netConn = tlsConn - if err := tlsConn.Handshake(); err != nil { - return nil, nil, err - } - if !cfg.InsecureSkipVerify { - if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { - return nil, nil, err - } - } - } - - if len(d.Subprotocols) > 0 { - h := http.Header{} - for k, v := range requestHeader { - h[k] = v - } - h.Set("Sec-Websocket-Protocol", strings.Join(d.Subprotocols, ", ")) - requestHeader = h - } - - if len(requestHeader["Host"]) > 0 { - // This can be used to supply a Host: header which is different from - // the dial address. - u.Host = requestHeader.Get("Host") - - // Drop "Host" header - h := http.Header{} - for k, v := range requestHeader { - if k == "Host" { - continue - } - h[k] = v - } - requestHeader = h - } - - conn, resp, err := NewClient(netConn, u, requestHeader, d.ReadBufferSize, d.WriteBufferSize) - - if err != nil { - if err == ErrBadHandshake { - // Before closing the network connection on return from this - // function, slurp up some of the response to aid application - // debugging. - buf := make([]byte, 1024) - n, _ := io.ReadFull(resp.Body, buf) - resp.Body = ioutil.NopCloser(bytes.NewReader(buf[:n])) - } - return nil, resp, err - } - - netConn.SetDeadline(time.Time{}) - netConn = nil // to avoid close in defer. - return conn, resp, nil -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go deleted file mode 100644 index 749ef20..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "crypto/tls" - "crypto/x509" - "io" - "io/ioutil" - "net" - "net/http" - "net/http/httptest" - "net/url" - "reflect" - "strings" - "testing" - "time" -) - -var cstUpgrader = Upgrader{ - Subprotocols: []string{"p0", "p1"}, - ReadBufferSize: 1024, - WriteBufferSize: 1024, - Error: func(w http.ResponseWriter, r *http.Request, status int, reason error) { - http.Error(w, reason.Error(), status) - }, -} - -var cstDialer = Dialer{ - Subprotocols: []string{"p1", "p2"}, - ReadBufferSize: 1024, - WriteBufferSize: 1024, -} - -type cstHandler struct{ *testing.T } - -type cstServer struct { - *httptest.Server - URL string -} - -func newServer(t *testing.T) *cstServer { - var s cstServer - s.Server = httptest.NewServer(cstHandler{t}) - s.URL = makeWsProto(s.Server.URL) - return &s -} - -func newTLSServer(t *testing.T) *cstServer { - var s cstServer - s.Server = httptest.NewTLSServer(cstHandler{t}) - s.URL = makeWsProto(s.Server.URL) - return &s -} - -func (t cstHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if r.Method != "GET" { - t.Logf("method %s not allowed", r.Method) - http.Error(w, "method not allowed", 405) - return - } - subprotos := Subprotocols(r) - if !reflect.DeepEqual(subprotos, cstDialer.Subprotocols) { - t.Logf("subprotols=%v, want %v", subprotos, cstDialer.Subprotocols) - http.Error(w, "bad protocol", 400) - return - } - ws, err := cstUpgrader.Upgrade(w, r, http.Header{"Set-Cookie": {"sessionID=1234"}}) - if err != nil { - t.Logf("Upgrade: %v", err) - return - } - defer ws.Close() - - if ws.Subprotocol() != "p1" { - t.Logf("Subprotocol() = %s, want p1", ws.Subprotocol()) - ws.Close() - return - } - op, rd, err := ws.NextReader() - if err != nil { - t.Logf("NextReader: %v", err) - return - } - wr, err := ws.NextWriter(op) - if err != nil { - t.Logf("NextWriter: %v", err) - return - } - if _, err = io.Copy(wr, rd); err != nil { - t.Logf("NextWriter: %v", err) - return - } - if err := wr.Close(); err != nil { - t.Logf("Close: %v", err) - return - } -} - -func makeWsProto(s string) string { - return "ws" + strings.TrimPrefix(s, "http") -} - -func sendRecv(t *testing.T, ws *Conn) { - const message = "Hello World!" - if err := ws.SetWriteDeadline(time.Now().Add(time.Second)); err != nil { - t.Fatalf("SetWriteDeadline: %v", err) - } - if err := ws.WriteMessage(TextMessage, []byte(message)); err != nil { - t.Fatalf("WriteMessage: %v", err) - } - if err := ws.SetReadDeadline(time.Now().Add(time.Second)); err != nil { - t.Fatalf("SetReadDeadline: %v", err) - } - _, p, err := ws.ReadMessage() - if err != nil { - t.Fatalf("ReadMessage: %v", err) - } - if string(p) != message { - t.Fatalf("message=%s, want %s", p, message) - } -} - -func TestDial(t *testing.T) { - s := newServer(t) - defer s.Close() - - ws, _, err := cstDialer.Dial(s.URL, nil) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() - sendRecv(t, ws) -} - -func TestDialTLS(t *testing.T) { - s := newTLSServer(t) - defer s.Close() - - certs := x509.NewCertPool() - for _, c := range s.TLS.Certificates { - roots, err := x509.ParseCertificates(c.Certificate[len(c.Certificate)-1]) - if err != nil { - t.Fatalf("error parsing server's root cert: %v", err) - } - for _, root := range roots { - certs.AddCert(root) - } - } - - u, _ := url.Parse(s.URL) - d := cstDialer - d.NetDial = func(network, addr string) (net.Conn, error) { return net.Dial(network, u.Host) } - d.TLSClientConfig = &tls.Config{RootCAs: certs} - ws, _, err := d.Dial("wss://example.com/", nil) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() - sendRecv(t, ws) -} - -func xTestDialTLSBadCert(t *testing.T) { - // This test is deactivated because of noisy logging from the net/http package. - s := newTLSServer(t) - defer s.Close() - - ws, _, err := cstDialer.Dial(s.URL, nil) - if err == nil { - ws.Close() - t.Fatalf("Dial: nil") - } -} - -func xTestDialTLSNoVerify(t *testing.T) { - s := newTLSServer(t) - defer s.Close() - - d := cstDialer - d.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} - ws, _, err := d.Dial(s.URL, nil) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() - sendRecv(t, ws) -} - -func TestDialTimeout(t *testing.T) { - s := newServer(t) - defer s.Close() - - d := cstDialer - d.HandshakeTimeout = -1 - ws, _, err := d.Dial(s.URL, nil) - if err == nil { - ws.Close() - t.Fatalf("Dial: nil") - } -} - -func TestDialBadScheme(t *testing.T) { - s := newServer(t) - defer s.Close() - - ws, _, err := cstDialer.Dial(s.Server.URL, nil) - if err == nil { - ws.Close() - t.Fatalf("Dial: nil") - } -} - -func TestDialBadOrigin(t *testing.T) { - s := newServer(t) - defer s.Close() - - ws, resp, err := cstDialer.Dial(s.URL, http.Header{"Origin": {"bad"}}) - if err == nil { - ws.Close() - t.Fatalf("Dial: nil") - } - if resp == nil { - t.Fatalf("resp=nil, err=%v", err) - } - if resp.StatusCode != http.StatusForbidden { - t.Fatalf("status=%d, want %d", resp.StatusCode, http.StatusForbidden) - } -} - -func TestHandshake(t *testing.T) { - s := newServer(t) - defer s.Close() - - ws, resp, err := cstDialer.Dial(s.URL, http.Header{"Origin": {s.URL}}) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() - - var sessionID string - for _, c := range resp.Cookies() { - if c.Name == "sessionID" { - sessionID = c.Value - } - } - if sessionID != "1234" { - t.Error("Set-Cookie not received from the server.") - } - - if ws.Subprotocol() != "p1" { - t.Errorf("ws.Subprotocol() = %s, want p1", ws.Subprotocol()) - } - sendRecv(t, ws) -} - -func TestRespOnBadHandshake(t *testing.T) { - const expectedStatus = http.StatusGone - const expectedBody = "This is the response body." - - s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(expectedStatus) - io.WriteString(w, expectedBody) - })) - defer s.Close() - - ws, resp, err := cstDialer.Dial(makeWsProto(s.URL), nil) - if err == nil { - ws.Close() - t.Fatalf("Dial: nil") - } - - if resp == nil { - t.Fatalf("resp=nil, err=%v", err) - } - - if resp.StatusCode != expectedStatus { - t.Errorf("resp.StatusCode=%d, want %d", resp.StatusCode, expectedStatus) - } - - p, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("ReadFull(resp.Body) returned error %v", err) - } - - if string(p) != expectedBody { - t.Errorf("resp.Body=%s, want %s", p, expectedBody) - } -} - -// If the Host header is specified in `Dial()`, the server must receive it as -// the `Host:` header. -func TestHostHeader(t *testing.T) { - s := newServer(t) - defer s.Close() - - specifiedHost := make(chan string, 1) - origHandler := s.Server.Config.Handler - - // Capture the request Host header. - s.Server.Config.Handler = http.HandlerFunc( - func(w http.ResponseWriter, r *http.Request) { - specifiedHost <- r.Host - origHandler.ServeHTTP(w, r) - }) - - ws, resp, err := cstDialer.Dial(s.URL, http.Header{"Host": {"testhost"}}) - if err != nil { - t.Fatalf("Dial: %v", err) - } - defer ws.Close() - - if resp.StatusCode != http.StatusSwitchingProtocols { - t.Fatalf("resp.StatusCode = %v, want http.StatusSwitchingProtocols", resp.StatusCode) - } - - if gotHost := <-specifiedHost; gotHost != "testhost" { - t.Fatalf("gotHost = %q, want \"testhost\"", gotHost) - } - - sendRecv(t, ws) -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go deleted file mode 100644 index 07a9cb4..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "net/url" - "reflect" - "testing" -) - -var parseURLTests = []struct { - s string - u *url.URL -}{ - {"ws://example.com/", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/"}}, - {"ws://example.com", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/"}}, - {"ws://example.com:7777/", &url.URL{Scheme: "ws", Host: "example.com:7777", Opaque: "/"}}, - {"wss://example.com/", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/"}}, - {"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}}, - {"ss://example.com/a/b", nil}, - {"ws://webmaster@example.com/", nil}, -} - -func TestParseURL(t *testing.T) { - for _, tt := range parseURLTests { - u, err := parseURL(tt.s) - if tt.u != nil && err != nil { - t.Errorf("parseURL(%q) returned error %v", tt.s, err) - continue - } - if tt.u == nil && err == nil { - t.Errorf("parseURL(%q) did not return error", tt.s) - continue - } - if !reflect.DeepEqual(u, tt.u) { - t.Errorf("parseURL(%q) returned %v, want %v", tt.s, u, tt.u) - continue - } - } -} - -var hostPortNoPortTests = []struct { - u *url.URL - hostPort, hostNoPort string -}{ - {&url.URL{Scheme: "ws", Host: "example.com"}, "example.com:80", "example.com"}, - {&url.URL{Scheme: "wss", Host: "example.com"}, "example.com:443", "example.com"}, - {&url.URL{Scheme: "ws", Host: "example.com:7777"}, "example.com:7777", "example.com"}, - {&url.URL{Scheme: "wss", Host: "example.com:7777"}, "example.com:7777", "example.com"}, -} - -func TestHostPortNoPort(t *testing.T) { - for _, tt := range hostPortNoPortTests { - hostPort, hostNoPort := hostPortNoPort(tt.u) - if hostPort != tt.hostPort { - t.Errorf("hostPortNoPort(%v) returned hostPort %q, want %q", tt.u, hostPort, tt.hostPort) - } - if hostNoPort != tt.hostNoPort { - t.Errorf("hostPortNoPort(%v) returned hostNoPort %q, want %q", tt.u, hostNoPort, tt.hostNoPort) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go b/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go deleted file mode 100644 index e719f1c..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go +++ /dev/null @@ -1,825 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bufio" - "encoding/binary" - "errors" - "io" - "io/ioutil" - "math/rand" - "net" - "strconv" - "time" -) - -const ( - maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask - maxControlFramePayloadSize = 125 - finalBit = 1 << 7 - maskBit = 1 << 7 - writeWait = time.Second - - defaultReadBufferSize = 4096 - defaultWriteBufferSize = 4096 - - continuationFrame = 0 - noFrame = -1 -) - -// Close codes defined in RFC 6455, section 11.7. -const ( - CloseNormalClosure = 1000 - CloseGoingAway = 1001 - CloseProtocolError = 1002 - CloseUnsupportedData = 1003 - CloseNoStatusReceived = 1005 - CloseAbnormalClosure = 1006 - CloseInvalidFramePayloadData = 1007 - ClosePolicyViolation = 1008 - CloseMessageTooBig = 1009 - CloseMandatoryExtension = 1010 - CloseInternalServerErr = 1011 - CloseTLSHandshake = 1015 -) - -// The message types are defined in RFC 6455, section 11.8. -const ( - // TextMessage denotes a text data message. The text message payload is - // interpreted as UTF-8 encoded text data. - TextMessage = 1 - - // BinaryMessage denotes a binary data message. - BinaryMessage = 2 - - // CloseMessage denotes a close control message. The optional message - // payload contains a numeric code and text. Use the FormatCloseMessage - // function to format a close message payload. - CloseMessage = 8 - - // PingMessage denotes a ping control message. The optional message payload - // is UTF-8 encoded text. - PingMessage = 9 - - // PongMessage denotes a ping control message. The optional message payload - // is UTF-8 encoded text. - PongMessage = 10 -) - -// ErrCloseSent is returned when the application writes a message to the -// connection after sending a close message. -var ErrCloseSent = errors.New("websocket: close sent") - -// ErrReadLimit is returned when reading a message that is larger than the -// read limit set for the connection. -var ErrReadLimit = errors.New("websocket: read limit exceeded") - -// netError satisfies the net Error interface. -type netError struct { - msg string - temporary bool - timeout bool -} - -func (e *netError) Error() string { return e.msg } -func (e *netError) Temporary() bool { return e.temporary } -func (e *netError) Timeout() bool { return e.timeout } - -// closeError represents close frame. -type closeError struct { - code int - text string -} - -func (e *closeError) Error() string { - return "websocket: close " + strconv.Itoa(e.code) + " " + e.text -} - -var ( - errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true} - errUnexpectedEOF = &closeError{code: CloseAbnormalClosure, text: io.ErrUnexpectedEOF.Error()} - errBadWriteOpCode = errors.New("websocket: bad write message type") - errWriteClosed = errors.New("websocket: write closed") - errInvalidControlFrame = errors.New("websocket: invalid control frame") -) - -func hideTempErr(err error) error { - if e, ok := err.(net.Error); ok && e.Temporary() { - err = &netError{msg: e.Error(), timeout: e.Timeout()} - } - return err -} - -func isControl(frameType int) bool { - return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage -} - -func isData(frameType int) bool { - return frameType == TextMessage || frameType == BinaryMessage -} - -func maskBytes(key [4]byte, pos int, b []byte) int { - for i := range b { - b[i] ^= key[pos&3] - pos++ - } - return pos & 3 -} - -func newMaskKey() [4]byte { - n := rand.Uint32() - return [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)} -} - -// Conn represents a WebSocket connection. -type Conn struct { - conn net.Conn - isServer bool - subprotocol string - - // Write fields - mu chan bool // used as mutex to protect write to conn and closeSent - closeSent bool // true if close message was sent - - // Message writer fields. - writeErr error - writeBuf []byte // frame is constructed in this buffer. - writePos int // end of data in writeBuf. - writeFrameType int // type of the current frame. - writeSeq int // incremented to invalidate message writers. - writeDeadline time.Time - - // Read fields - readErr error - br *bufio.Reader - readRemaining int64 // bytes remaining in current frame. - readFinal bool // true the current message has more frames. - readSeq int // incremented to invalidate message readers. - readLength int64 // Message size. - readLimit int64 // Maximum message size. - readMaskPos int - readMaskKey [4]byte - handlePong func(string) error - handlePing func(string) error -} - -func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int) *Conn { - mu := make(chan bool, 1) - mu <- true - - if readBufferSize == 0 { - readBufferSize = defaultReadBufferSize - } - if writeBufferSize == 0 { - writeBufferSize = defaultWriteBufferSize - } - - c := &Conn{ - isServer: isServer, - br: bufio.NewReaderSize(conn, readBufferSize), - conn: conn, - mu: mu, - readFinal: true, - writeBuf: make([]byte, writeBufferSize+maxFrameHeaderSize), - writeFrameType: noFrame, - writePos: maxFrameHeaderSize, - } - c.SetPingHandler(nil) - c.SetPongHandler(nil) - return c -} - -// Subprotocol returns the negotiated protocol for the connection. -func (c *Conn) Subprotocol() string { - return c.subprotocol -} - -// Close closes the underlying network connection without sending or waiting for a close frame. -func (c *Conn) Close() error { - return c.conn.Close() -} - -// LocalAddr returns the local network address. -func (c *Conn) LocalAddr() net.Addr { - return c.conn.LocalAddr() -} - -// RemoteAddr returns the remote network address. -func (c *Conn) RemoteAddr() net.Addr { - return c.conn.RemoteAddr() -} - -// Write methods - -func (c *Conn) write(frameType int, deadline time.Time, bufs ...[]byte) error { - <-c.mu - defer func() { c.mu <- true }() - - if c.closeSent { - return ErrCloseSent - } else if frameType == CloseMessage { - c.closeSent = true - } - - c.conn.SetWriteDeadline(deadline) - for _, buf := range bufs { - if len(buf) > 0 { - n, err := c.conn.Write(buf) - if n != len(buf) { - // Close on partial write. - c.conn.Close() - } - if err != nil { - return err - } - } - } - return nil -} - -// WriteControl writes a control message with the given deadline. The allowed -// message types are CloseMessage, PingMessage and PongMessage. -func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { - if !isControl(messageType) { - return errBadWriteOpCode - } - if len(data) > maxControlFramePayloadSize { - return errInvalidControlFrame - } - - b0 := byte(messageType) | finalBit - b1 := byte(len(data)) - if !c.isServer { - b1 |= maskBit - } - - buf := make([]byte, 0, maxFrameHeaderSize+maxControlFramePayloadSize) - buf = append(buf, b0, b1) - - if c.isServer { - buf = append(buf, data...) - } else { - key := newMaskKey() - buf = append(buf, key[:]...) - buf = append(buf, data...) - maskBytes(key, 0, buf[6:]) - } - - d := time.Hour * 1000 - if !deadline.IsZero() { - d = deadline.Sub(time.Now()) - if d < 0 { - return errWriteTimeout - } - } - - timer := time.NewTimer(d) - select { - case <-c.mu: - timer.Stop() - case <-timer.C: - return errWriteTimeout - } - defer func() { c.mu <- true }() - - if c.closeSent { - return ErrCloseSent - } else if messageType == CloseMessage { - c.closeSent = true - } - - c.conn.SetWriteDeadline(deadline) - n, err := c.conn.Write(buf) - if n != 0 && n != len(buf) { - c.conn.Close() - } - return err -} - -// NextWriter returns a writer for the next message to send. The writer's -// Close method flushes the complete message to the network. -// -// There can be at most one open writer on a connection. NextWriter closes the -// previous writer if the application has not already done so. -// -// The NextWriter method and the writers returned from the method cannot be -// accessed by more than one goroutine at a time. -func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { - if c.writeErr != nil { - return nil, c.writeErr - } - - if c.writeFrameType != noFrame { - if err := c.flushFrame(true, nil); err != nil { - return nil, err - } - } - - if !isControl(messageType) && !isData(messageType) { - return nil, errBadWriteOpCode - } - - c.writeFrameType = messageType - return messageWriter{c, c.writeSeq}, nil -} - -func (c *Conn) flushFrame(final bool, extra []byte) error { - length := c.writePos - maxFrameHeaderSize + len(extra) - - // Check for invalid control frames. - if isControl(c.writeFrameType) && - (!final || length > maxControlFramePayloadSize) { - c.writeSeq++ - c.writeFrameType = noFrame - c.writePos = maxFrameHeaderSize - return errInvalidControlFrame - } - - b0 := byte(c.writeFrameType) - if final { - b0 |= finalBit - } - b1 := byte(0) - if !c.isServer { - b1 |= maskBit - } - - // Assume that the frame starts at beginning of c.writeBuf. - framePos := 0 - if c.isServer { - // Adjust up if mask not included in the header. - framePos = 4 - } - - switch { - case length >= 65536: - c.writeBuf[framePos] = b0 - c.writeBuf[framePos+1] = b1 | 127 - binary.BigEndian.PutUint64(c.writeBuf[framePos+2:], uint64(length)) - case length > 125: - framePos += 6 - c.writeBuf[framePos] = b0 - c.writeBuf[framePos+1] = b1 | 126 - binary.BigEndian.PutUint16(c.writeBuf[framePos+2:], uint16(length)) - default: - framePos += 8 - c.writeBuf[framePos] = b0 - c.writeBuf[framePos+1] = b1 | byte(length) - } - - if !c.isServer { - key := newMaskKey() - copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) - maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:c.writePos]) - if len(extra) > 0 { - c.writeErr = errors.New("websocket: internal error, extra used in client mode") - return c.writeErr - } - } - - // Write the buffers to the connection. - c.writeErr = c.write(c.writeFrameType, c.writeDeadline, c.writeBuf[framePos:c.writePos], extra) - - // Setup for next frame. - c.writePos = maxFrameHeaderSize - c.writeFrameType = continuationFrame - if final { - c.writeSeq++ - c.writeFrameType = noFrame - } - return c.writeErr -} - -type messageWriter struct { - c *Conn - seq int -} - -func (w messageWriter) err() error { - c := w.c - if c.writeSeq != w.seq { - return errWriteClosed - } - if c.writeErr != nil { - return c.writeErr - } - return nil -} - -func (w messageWriter) ncopy(max int) (int, error) { - n := len(w.c.writeBuf) - w.c.writePos - if n <= 0 { - if err := w.c.flushFrame(false, nil); err != nil { - return 0, err - } - n = len(w.c.writeBuf) - w.c.writePos - } - if n > max { - n = max - } - return n, nil -} - -func (w messageWriter) write(final bool, p []byte) (int, error) { - if err := w.err(); err != nil { - return 0, err - } - - if len(p) > 2*len(w.c.writeBuf) && w.c.isServer { - // Don't buffer large messages. - err := w.c.flushFrame(final, p) - if err != nil { - return 0, err - } - return len(p), nil - } - - nn := len(p) - for len(p) > 0 { - n, err := w.ncopy(len(p)) - if err != nil { - return 0, err - } - copy(w.c.writeBuf[w.c.writePos:], p[:n]) - w.c.writePos += n - p = p[n:] - } - return nn, nil -} - -func (w messageWriter) Write(p []byte) (int, error) { - return w.write(false, p) -} - -func (w messageWriter) WriteString(p string) (int, error) { - if err := w.err(); err != nil { - return 0, err - } - - nn := len(p) - for len(p) > 0 { - n, err := w.ncopy(len(p)) - if err != nil { - return 0, err - } - copy(w.c.writeBuf[w.c.writePos:], p[:n]) - w.c.writePos += n - p = p[n:] - } - return nn, nil -} - -func (w messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { - if err := w.err(); err != nil { - return 0, err - } - for { - if w.c.writePos == len(w.c.writeBuf) { - err = w.c.flushFrame(false, nil) - if err != nil { - break - } - } - var n int - n, err = r.Read(w.c.writeBuf[w.c.writePos:]) - w.c.writePos += n - nn += int64(n) - if err != nil { - if err == io.EOF { - err = nil - } - break - } - } - return nn, err -} - -func (w messageWriter) Close() error { - if err := w.err(); err != nil { - return err - } - return w.c.flushFrame(true, nil) -} - -// WriteMessage is a helper method for getting a writer using NextWriter, -// writing the message and closing the writer. -func (c *Conn) WriteMessage(messageType int, data []byte) error { - wr, err := c.NextWriter(messageType) - if err != nil { - return err - } - w := wr.(messageWriter) - if _, err := w.write(true, data); err != nil { - return err - } - if c.writeSeq == w.seq { - if err := c.flushFrame(true, nil); err != nil { - return err - } - } - return nil -} - -// SetWriteDeadline sets the write deadline on the underlying network -// connection. After a write has timed out, the websocket state is corrupt and -// all future writes will return an error. A zero value for t means writes will -// not time out. -func (c *Conn) SetWriteDeadline(t time.Time) error { - c.writeDeadline = t - return nil -} - -// Read methods - -// readFull is like io.ReadFull except that io.EOF is never returned. -func (c *Conn) readFull(p []byte) (err error) { - var n int - for n < len(p) && err == nil { - var nn int - nn, err = c.br.Read(p[n:]) - n += nn - } - if n == len(p) { - err = nil - } else if err == io.EOF { - err = errUnexpectedEOF - } - return -} - -func (c *Conn) advanceFrame() (int, error) { - - // 1. Skip remainder of previous frame. - - if c.readRemaining > 0 { - if _, err := io.CopyN(ioutil.Discard, c.br, c.readRemaining); err != nil { - return noFrame, err - } - } - - // 2. Read and parse first two bytes of frame header. - - var b [8]byte - if err := c.readFull(b[:2]); err != nil { - return noFrame, err - } - - final := b[0]&finalBit != 0 - frameType := int(b[0] & 0xf) - reserved := int((b[0] >> 4) & 0x7) - mask := b[1]&maskBit != 0 - c.readRemaining = int64(b[1] & 0x7f) - - if reserved != 0 { - return noFrame, c.handleProtocolError("unexpected reserved bits " + strconv.Itoa(reserved)) - } - - switch frameType { - case CloseMessage, PingMessage, PongMessage: - if c.readRemaining > maxControlFramePayloadSize { - return noFrame, c.handleProtocolError("control frame length > 125") - } - if !final { - return noFrame, c.handleProtocolError("control frame not final") - } - case TextMessage, BinaryMessage: - if !c.readFinal { - return noFrame, c.handleProtocolError("message start before final message frame") - } - c.readFinal = final - case continuationFrame: - if c.readFinal { - return noFrame, c.handleProtocolError("continuation after final message frame") - } - c.readFinal = final - default: - return noFrame, c.handleProtocolError("unknown opcode " + strconv.Itoa(frameType)) - } - - // 3. Read and parse frame length. - - switch c.readRemaining { - case 126: - if err := c.readFull(b[:2]); err != nil { - return noFrame, err - } - c.readRemaining = int64(binary.BigEndian.Uint16(b[:2])) - case 127: - if err := c.readFull(b[:8]); err != nil { - return noFrame, err - } - c.readRemaining = int64(binary.BigEndian.Uint64(b[:8])) - } - - // 4. Handle frame masking. - - if mask != c.isServer { - return noFrame, c.handleProtocolError("incorrect mask flag") - } - - if mask { - c.readMaskPos = 0 - if err := c.readFull(c.readMaskKey[:]); err != nil { - return noFrame, err - } - } - - // 5. For text and binary messages, enforce read limit and return. - - if frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage { - - c.readLength += c.readRemaining - if c.readLimit > 0 && c.readLength > c.readLimit { - c.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, ""), time.Now().Add(writeWait)) - return noFrame, ErrReadLimit - } - - return frameType, nil - } - - // 6. Read control frame payload. - - var payload []byte - if c.readRemaining > 0 { - payload = make([]byte, c.readRemaining) - c.readRemaining = 0 - if err := c.readFull(payload); err != nil { - return noFrame, err - } - if c.isServer { - maskBytes(c.readMaskKey, 0, payload) - } - } - - // 7. Process control frame payload. - - switch frameType { - case PongMessage: - if err := c.handlePong(string(payload)); err != nil { - return noFrame, err - } - case PingMessage: - if err := c.handlePing(string(payload)); err != nil { - return noFrame, err - } - case CloseMessage: - c.WriteControl(CloseMessage, []byte{}, time.Now().Add(writeWait)) - closeCode := CloseNoStatusReceived - closeText := "" - if len(payload) >= 2 { - closeCode = int(binary.BigEndian.Uint16(payload)) - closeText = string(payload[2:]) - } - switch closeCode { - case CloseNormalClosure, CloseGoingAway: - return noFrame, io.EOF - default: - return noFrame, &closeError{code: closeCode, text: closeText} - } - } - - return frameType, nil -} - -func (c *Conn) handleProtocolError(message string) error { - c.WriteControl(CloseMessage, FormatCloseMessage(CloseProtocolError, message), time.Now().Add(writeWait)) - return errors.New("websocket: " + message) -} - -// NextReader returns the next data message received from the peer. The -// returned messageType is either TextMessage or BinaryMessage. -// -// There can be at most one open reader on a connection. NextReader discards -// the previous message if the application has not already consumed it. -// -// The NextReader method and the readers returned from the method cannot be -// accessed by more than one goroutine at a time. -func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { - - c.readSeq++ - c.readLength = 0 - - for c.readErr == nil { - frameType, err := c.advanceFrame() - if err != nil { - c.readErr = hideTempErr(err) - break - } - if frameType == TextMessage || frameType == BinaryMessage { - return frameType, messageReader{c, c.readSeq}, nil - } - } - return noFrame, nil, c.readErr -} - -type messageReader struct { - c *Conn - seq int -} - -func (r messageReader) Read(b []byte) (int, error) { - - if r.seq != r.c.readSeq { - return 0, io.EOF - } - - for r.c.readErr == nil { - - if r.c.readRemaining > 0 { - if int64(len(b)) > r.c.readRemaining { - b = b[:r.c.readRemaining] - } - n, err := r.c.br.Read(b) - r.c.readErr = hideTempErr(err) - if r.c.isServer { - r.c.readMaskPos = maskBytes(r.c.readMaskKey, r.c.readMaskPos, b[:n]) - } - r.c.readRemaining -= int64(n) - return n, r.c.readErr - } - - if r.c.readFinal { - r.c.readSeq++ - return 0, io.EOF - } - - frameType, err := r.c.advanceFrame() - switch { - case err != nil: - r.c.readErr = hideTempErr(err) - case frameType == TextMessage || frameType == BinaryMessage: - r.c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader") - } - } - - err := r.c.readErr - if err == io.EOF && r.seq == r.c.readSeq { - err = errUnexpectedEOF - } - return 0, err -} - -// ReadMessage is a helper method for getting a reader using NextReader and -// reading from that reader to a buffer. -func (c *Conn) ReadMessage() (messageType int, p []byte, err error) { - var r io.Reader - messageType, r, err = c.NextReader() - if err != nil { - return messageType, nil, err - } - p, err = ioutil.ReadAll(r) - return messageType, p, err -} - -// SetReadDeadline sets the read deadline on the underlying network connection. -// After a read has timed out, the websocket connection state is corrupt and -// all future reads will return an error. A zero value for t means reads will -// not time out. -func (c *Conn) SetReadDeadline(t time.Time) error { - return c.conn.SetReadDeadline(t) -} - -// SetReadLimit sets the maximum size for a message read from the peer. If a -// message exceeds the limit, the connection sends a close frame to the peer -// and returns ErrReadLimit to the application. -func (c *Conn) SetReadLimit(limit int64) { - c.readLimit = limit -} - -// SetPingHandler sets the handler for ping messages received from the peer. -// The default ping handler sends a pong to the peer. -func (c *Conn) SetPingHandler(h func(string) error) { - if h == nil { - h = func(message string) error { - c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) - return nil - } - } - c.handlePing = h -} - -// SetPongHandler sets the handler for pong messages received from the peer. -// The default pong handler does nothing. -func (c *Conn) SetPongHandler(h func(string) error) { - if h == nil { - h = func(string) error { return nil } - } - c.handlePong = h -} - -// UnderlyingConn returns the internal net.Conn. This can be used to further -// modifications to connection specific flags. -func (c *Conn) UnderlyingConn() net.Conn { - return c.conn -} - -// FormatCloseMessage formats closeCode and text as a WebSocket close message. -func FormatCloseMessage(closeCode int, text string) []byte { - buf := make([]byte, 2+len(text)) - binary.BigEndian.PutUint16(buf, uint16(closeCode)) - copy(buf[2:], text) - return buf -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go deleted file mode 100644 index 1f1197e..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "net" - "testing" - "testing/iotest" - "time" -) - -var _ net.Error = errWriteTimeout - -type fakeNetConn struct { - io.Reader - io.Writer -} - -func (c fakeNetConn) Close() error { return nil } -func (c fakeNetConn) LocalAddr() net.Addr { return nil } -func (c fakeNetConn) RemoteAddr() net.Addr { return nil } -func (c fakeNetConn) SetDeadline(t time.Time) error { return nil } -func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil } -func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil } - -func TestFraming(t *testing.T) { - frameSizes := []int{0, 1, 2, 124, 125, 126, 127, 128, 129, 65534, 65535, 65536, 65537} - var readChunkers = []struct { - name string - f func(io.Reader) io.Reader - }{ - {"half", iotest.HalfReader}, - {"one", iotest.OneByteReader}, - {"asis", func(r io.Reader) io.Reader { return r }}, - } - - writeBuf := make([]byte, 65537) - for i := range writeBuf { - writeBuf[i] = byte(i) - } - - for _, isServer := range []bool{true, false} { - for _, chunker := range readChunkers { - - var connBuf bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &connBuf}, isServer, 1024, 1024) - rc := newConn(fakeNetConn{Reader: chunker.f(&connBuf), Writer: nil}, !isServer, 1024, 1024) - - for _, n := range frameSizes { - for _, iocopy := range []bool{true, false} { - name := fmt.Sprintf("s:%v, r:%s, n:%d c:%v", isServer, chunker.name, n, iocopy) - - w, err := wc.NextWriter(TextMessage) - if err != nil { - t.Errorf("%s: wc.NextWriter() returned %v", name, err) - continue - } - var nn int - if iocopy { - var n64 int64 - n64, err = io.Copy(w, bytes.NewReader(writeBuf[:n])) - nn = int(n64) - } else { - nn, err = w.Write(writeBuf[:n]) - } - if err != nil || nn != n { - t.Errorf("%s: w.Write(writeBuf[:n]) returned %d, %v", name, nn, err) - continue - } - err = w.Close() - if err != nil { - t.Errorf("%s: w.Close() returned %v", name, err) - continue - } - - opCode, r, err := rc.NextReader() - if err != nil || opCode != TextMessage { - t.Errorf("%s: NextReader() returned %d, r, %v", name, opCode, err) - continue - } - rbuf, err := ioutil.ReadAll(r) - if err != nil { - t.Errorf("%s: ReadFull() returned rbuf, %v", name, err) - continue - } - - if len(rbuf) != n { - t.Errorf("%s: len(rbuf) is %d, want %d", name, len(rbuf), n) - continue - } - - for i, b := range rbuf { - if byte(i) != b { - t.Errorf("%s: bad byte at offset %d", name, i) - break - } - } - } - } - } - } -} - -func TestControl(t *testing.T) { - const message = "this is a ping/pong messsage" - for _, isServer := range []bool{true, false} { - for _, isWriteControl := range []bool{true, false} { - name := fmt.Sprintf("s:%v, wc:%v", isServer, isWriteControl) - var connBuf bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &connBuf}, isServer, 1024, 1024) - rc := newConn(fakeNetConn{Reader: &connBuf, Writer: nil}, !isServer, 1024, 1024) - if isWriteControl { - wc.WriteControl(PongMessage, []byte(message), time.Now().Add(time.Second)) - } else { - w, err := wc.NextWriter(PongMessage) - if err != nil { - t.Errorf("%s: wc.NextWriter() returned %v", name, err) - continue - } - if _, err := w.Write([]byte(message)); err != nil { - t.Errorf("%s: w.Write() returned %v", name, err) - continue - } - if err := w.Close(); err != nil { - t.Errorf("%s: w.Close() returned %v", name, err) - continue - } - var actualMessage string - rc.SetPongHandler(func(s string) error { actualMessage = s; return nil }) - rc.NextReader() - if actualMessage != message { - t.Errorf("%s: pong=%q, want %q", name, actualMessage, message) - continue - } - } - } - } -} - -func TestCloseBeforeFinalFrame(t *testing.T) { - const bufSize = 512 - - var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, bufSize) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) - - w, _ := wc.NextWriter(BinaryMessage) - w.Write(make([]byte, bufSize+bufSize/2)) - wc.WriteControl(CloseMessage, FormatCloseMessage(CloseNormalClosure, ""), time.Now().Add(10*time.Second)) - w.Close() - - op, r, err := rc.NextReader() - if op != BinaryMessage || err != nil { - t.Fatalf("NextReader() returned %d, %v", op, err) - } - _, err = io.Copy(ioutil.Discard, r) - if err != errUnexpectedEOF { - t.Fatalf("io.Copy() returned %v, want %v", err, errUnexpectedEOF) - } - _, _, err = rc.NextReader() - if err != io.EOF { - t.Fatalf("NextReader() returned %v, want %v", err, io.EOF) - } -} - -func TestEOFBeforeFinalFrame(t *testing.T) { - const bufSize = 512 - - var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, bufSize) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) - - w, _ := wc.NextWriter(BinaryMessage) - w.Write(make([]byte, bufSize+bufSize/2)) - - op, r, err := rc.NextReader() - if op != BinaryMessage || err != nil { - t.Fatalf("NextReader() returned %d, %v", op, err) - } - _, err = io.Copy(ioutil.Discard, r) - if err != errUnexpectedEOF { - t.Fatalf("io.Copy() returned %v, want %v", err, errUnexpectedEOF) - } - _, _, err = rc.NextReader() - if err != errUnexpectedEOF { - t.Fatalf("NextReader() returned %v, want %v", err, errUnexpectedEOF) - } -} - -func TestReadLimit(t *testing.T) { - - const readLimit = 512 - message := make([]byte, readLimit+1) - - var b1, b2 bytes.Buffer - wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, readLimit-2) - rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) - rc.SetReadLimit(readLimit) - - // Send message at the limit with interleaved pong. - w, _ := wc.NextWriter(BinaryMessage) - w.Write(message[:readLimit-1]) - wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second)) - w.Write(message[:1]) - w.Close() - - // Send message larger than the limit. - wc.WriteMessage(BinaryMessage, message[:readLimit+1]) - - op, _, err := rc.NextReader() - if op != BinaryMessage || err != nil { - t.Fatalf("1: NextReader() returned %d, %v", op, err) - } - op, r, err := rc.NextReader() - if op != BinaryMessage || err != nil { - t.Fatalf("2: NextReader() returned %d, %v", op, err) - } - _, err = io.Copy(ioutil.Discard, r) - if err != ErrReadLimit { - t.Fatalf("io.Copy() returned %v", err) - } -} - -func TestUnderlyingConn(t *testing.T) { - var b1, b2 bytes.Buffer - fc := fakeNetConn{Reader: &b1, Writer: &b2} - c := newConn(fc, true, 1024, 1024) - ul := c.UnderlyingConn() - if ul != fc { - t.Fatalf("Underlying conn is not what it should be.") - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go b/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go deleted file mode 100644 index f52925d..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package websocket implements the WebSocket protocol defined in RFC 6455. -// -// Overview -// -// The Conn type represents a WebSocket connection. A server application uses -// the Upgrade function from an Upgrader object with a HTTP request handler -// to get a pointer to a Conn: -// -// var upgrader = websocket.Upgrader{ -// ReadBufferSize: 1024, -// WriteBufferSize: 1024, -// } -// -// func handler(w http.ResponseWriter, r *http.Request) { -// conn, err := upgrader.Upgrade(w, r, nil) -// if err != nil { -// log.Println(err) -// return -// } -// ... Use conn to send and receive messages. -// } -// -// Call the connection's WriteMessage and ReadMessage methods to send and -// receive messages as a slice of bytes. This snippet of code shows how to echo -// messages using these methods: -// -// for { -// messageType, p, err := conn.ReadMessage() -// if err != nil { -// return -// } -// if err = conn.WriteMessage(messageType, p); err != nil { -// return err -// } -// } -// -// In above snippet of code, p is a []byte and messageType is an int with value -// websocket.BinaryMessage or websocket.TextMessage. -// -// An application can also send and receive messages using the io.WriteCloser -// and io.Reader interfaces. To send a message, call the connection NextWriter -// method to get an io.WriteCloser, write the message to the writer and close -// the writer when done. To receive a message, call the connection NextReader -// method to get an io.Reader and read until io.EOF is returned. This snippet -// snippet shows how to echo messages using the NextWriter and NextReader -// methods: -// -// for { -// messageType, r, err := conn.NextReader() -// if err != nil { -// return -// } -// w, err := conn.NextWriter(messageType) -// if err != nil { -// return err -// } -// if _, err := io.Copy(w, r); err != nil { -// return err -// } -// if err := w.Close(); err != nil { -// return err -// } -// } -// -// Data Messages -// -// The WebSocket protocol distinguishes between text and binary data messages. -// Text messages are interpreted as UTF-8 encoded text. The interpretation of -// binary messages is left to the application. -// -// This package uses the TextMessage and BinaryMessage integer constants to -// identify the two data message types. The ReadMessage and NextReader methods -// return the type of the received message. The messageType argument to the -// WriteMessage and NextWriter methods specifies the type of a sent message. -// -// It is the application's responsibility to ensure that text messages are -// valid UTF-8 encoded text. -// -// Control Messages -// -// The WebSocket protocol defines three types of control messages: close, ping -// and pong. Call the connection WriteControl, WriteMessage or NextWriter -// methods to send a control message to the peer. -// -// Connections handle received ping and pong messages by invoking a callback -// function set with SetPingHandler and SetPongHandler methods. These callback -// functions can be invoked from the ReadMessage method, the NextReader method -// or from a call to the data message reader returned from NextReader. -// -// Connections handle received close messages by returning an error from the -// ReadMessage method, the NextReader method or from a call to the data message -// reader returned from NextReader. -// -// Concurrency -// -// Connections do not support concurrent calls to the write methods -// (NextWriter, SetWriteDeadline, WriteMessage) or concurrent calls to the read -// methods methods (NextReader, SetReadDeadline, ReadMessage). Connections do -// support a concurrent reader and writer. -// -// The Close and WriteControl methods can be called concurrently with all other -// methods. -// -// Read is Required -// -// The application must read the connection to process ping and close messages -// sent from the peer. If the application is not otherwise interested in -// messages from the peer, then the application should start a goroutine to read -// and discard messages from the peer. A simple example is: -// -// func readLoop(c *websocket.Conn) { -// for { -// if _, _, err := c.NextReader(); err != nil { -// c.Close() -// break -// } -// } -// } -// -// Origin Considerations -// -// Web browsers allow Javascript applications to open a WebSocket connection to -// any host. It's up to the server to enforce an origin policy using the Origin -// request header sent by the browser. -// -// The Upgrader calls the function specified in the CheckOrigin field to check -// the origin. If the CheckOrigin function returns false, then the Upgrade -// method fails the WebSocket handshake with HTTP status 403. -// -// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail -// the handshake if the Origin request header is present and not equal to the -// Host request header. -// -// An application can allow connections from any origin by specifying a -// function that always returns true: -// -// var upgrader = websocket.Upgrader{ -// CheckOrigin: func(r *http.Request) bool { return true }, -// } -// -// The deprecated Upgrade function does not enforce an origin policy. It's the -// application's responsibility to check the Origin header before calling -// Upgrade. -package websocket diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/README.md deleted file mode 100644 index 075ac15..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Test Server - -This package contains a server for the [Autobahn WebSockets Test Suite](http://autobahn.ws/testsuite). - -To test the server, run - - go run server.go - -and start the client test driver - - wstest -m fuzzingclient -s fuzzingclient.json - -When the client completes, it writes a report to reports/clients/index.html. diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/fuzzingclient.json b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/fuzzingclient.json deleted file mode 100644 index 27d5a5b..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/fuzzingclient.json +++ /dev/null @@ -1,14 +0,0 @@ - -{ - "options": {"failByDrop": false}, - "outdir": "./reports/clients", - "servers": [ - {"agent": "ReadAllWriteMessage", "url": "ws://localhost:9000/m", "options": {"version": 18}}, - {"agent": "ReadAllWrite", "url": "ws://localhost:9000/r", "options": {"version": 18}}, - {"agent": "CopyFull", "url": "ws://localhost:9000/f", "options": {"version": 18}}, - {"agent": "CopyWriterOnly", "url": "ws://localhost:9000/c", "options": {"version": 18}} - ], - "cases": ["*"], - "exclude-cases": [], - "exclude-agent-cases": {} -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go deleted file mode 100644 index d96ac84..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Command server is a test server for the Autobahn WebSockets Test Suite. -package main - -import ( - "errors" - "flag" - "github.com/gorilla/websocket" - "io" - "log" - "net/http" - "time" - "unicode/utf8" -) - -var upgrader = websocket.Upgrader{ - ReadBufferSize: 4096, - WriteBufferSize: 4096, - CheckOrigin: func(r *http.Request) bool { - return true - }, -} - -// echoCopy echoes messages from the client using io.Copy. -func echoCopy(w http.ResponseWriter, r *http.Request, writerOnly bool) { - conn, err := upgrader.Upgrade(w, r, nil) - if err != nil { - log.Println("Upgrade:", err) - return - } - defer conn.Close() - for { - mt, r, err := conn.NextReader() - if err != nil { - if err != io.EOF { - log.Println("NextReader:", err) - } - return - } - if mt == websocket.TextMessage { - r = &validator{r: r} - } - w, err := conn.NextWriter(mt) - if err != nil { - log.Println("NextWriter:", err) - return - } - if mt == websocket.TextMessage { - r = &validator{r: r} - } - if writerOnly { - _, err = io.Copy(struct{ io.Writer }{w}, r) - } else { - _, err = io.Copy(w, r) - } - if err != nil { - if err == errInvalidUTF8 { - conn.WriteControl(websocket.CloseMessage, - websocket.FormatCloseMessage(websocket.CloseInvalidFramePayloadData, ""), - time.Time{}) - } - log.Println("Copy:", err) - return - } - err = w.Close() - if err != nil { - log.Println("Close:", err) - return - } - } -} - -func echoCopyWriterOnly(w http.ResponseWriter, r *http.Request) { - echoCopy(w, r, true) -} - -func echoCopyFull(w http.ResponseWriter, r *http.Request) { - echoCopy(w, r, false) -} - -// echoReadAll echoes messages from the client by reading the entire message -// with ioutil.ReadAll. -func echoReadAll(w http.ResponseWriter, r *http.Request, writeMessage bool) { - conn, err := upgrader.Upgrade(w, r, nil) - if err != nil { - log.Println("Upgrade:", err) - return - } - defer conn.Close() - for { - mt, b, err := conn.ReadMessage() - if err != nil { - if err != io.EOF { - log.Println("NextReader:", err) - } - return - } - if mt == websocket.TextMessage { - if !utf8.Valid(b) { - conn.WriteControl(websocket.CloseMessage, - websocket.FormatCloseMessage(websocket.CloseInvalidFramePayloadData, ""), - time.Time{}) - log.Println("ReadAll: invalid utf8") - } - } - if writeMessage { - err = conn.WriteMessage(mt, b) - if err != nil { - log.Println("WriteMessage:", err) - } - } else { - w, err := conn.NextWriter(mt) - if err != nil { - log.Println("NextWriter:", err) - return - } - if _, err := w.Write(b); err != nil { - log.Println("Writer:", err) - return - } - if err := w.Close(); err != nil { - log.Println("Close:", err) - return - } - } - } -} - -func echoReadAllWriter(w http.ResponseWriter, r *http.Request) { - echoReadAll(w, r, false) -} - -func echoReadAllWriteMessage(w http.ResponseWriter, r *http.Request) { - echoReadAll(w, r, true) -} - -func serveHome(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/" { - http.Error(w, "Not found.", 404) - return - } - if r.Method != "GET" { - http.Error(w, "Method not allowed", 405) - return - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - io.WriteString(w, "Echo Server") -} - -var addr = flag.String("addr", ":9000", "http service address") - -func main() { - flag.Parse() - http.HandleFunc("/", serveHome) - http.HandleFunc("/c", echoCopyWriterOnly) - http.HandleFunc("/f", echoCopyFull) - http.HandleFunc("/r", echoReadAllWriter) - http.HandleFunc("/m", echoReadAllWriteMessage) - err := http.ListenAndServe(*addr, nil) - if err != nil { - log.Fatal("ListenAndServe: ", err) - } -} - -type validator struct { - state int - x rune - r io.Reader -} - -var errInvalidUTF8 = errors.New("invalid utf8") - -func (r *validator) Read(p []byte) (int, error) { - n, err := r.r.Read(p) - state := r.state - x := r.x - for _, b := range p[:n] { - state, x = decode(state, x, b) - if state == utf8Reject { - break - } - } - r.state = state - r.x = x - if state == utf8Reject || (err == io.EOF && state != utf8Accept) { - return n, errInvalidUTF8 - } - return n, err -} - -// UTF-8 decoder from http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ -// -// Copyright (c) 2008-2009 Bjoern Hoehrmann -// -// 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. -var utf8d = [...]byte{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7f - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9f - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // a0..bf - 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // c0..df - 0xa, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // e0..ef - 0xb, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // f0..ff - 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 - 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 - 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 - 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // s7..s8 -} - -const ( - utf8Accept = 0 - utf8Reject = 1 -) - -func decode(state int, x rune, b byte) (int, rune) { - t := utf8d[b] - if state != utf8Accept { - x = rune(b&0x3f) | (x << 6) - } else { - x = rune((0xff >> t) & b) - } - state = int(utf8d[256+state*16+int(t)]) - return state, x -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md deleted file mode 100644 index 08fc3e6..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Chat Example - -This application shows how to use use the -[websocket](https://github.com/gorilla/websocket) package and -[jQuery](http://jquery.com) to implement a simple web chat application. - -## Running the example - -The example requires a working Go development environment. The [Getting -Started](http://golang.org/doc/install) page describes how to install the -development environment. - -Once you have Go up and running, you can download, build and run the example -using the following commands. - - $ go get github.com/gorilla/websocket - $ cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/chat` - $ go run *.go - diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go deleted file mode 100644 index 7cc0496..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( - "github.com/gorilla/websocket" - "log" - "net/http" - "time" -) - -const ( - // Time allowed to write a message to the peer. - writeWait = 10 * time.Second - - // Time allowed to read the next pong message from the peer. - pongWait = 60 * time.Second - - // Send pings to peer with this period. Must be less than pongWait. - pingPeriod = (pongWait * 9) / 10 - - // Maximum message size allowed from peer. - maxMessageSize = 512 -) - -var upgrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, -} - -// connection is an middleman between the websocket connection and the hub. -type connection struct { - // The websocket connection. - ws *websocket.Conn - - // Buffered channel of outbound messages. - send chan []byte -} - -// readPump pumps messages from the websocket connection to the hub. -func (c *connection) readPump() { - defer func() { - h.unregister <- c - c.ws.Close() - }() - c.ws.SetReadLimit(maxMessageSize) - c.ws.SetReadDeadline(time.Now().Add(pongWait)) - c.ws.SetPongHandler(func(string) error { c.ws.SetReadDeadline(time.Now().Add(pongWait)); return nil }) - for { - _, message, err := c.ws.ReadMessage() - if err != nil { - break - } - h.broadcast <- message - } -} - -// write writes a message with the given message type and payload. -func (c *connection) write(mt int, payload []byte) error { - c.ws.SetWriteDeadline(time.Now().Add(writeWait)) - return c.ws.WriteMessage(mt, payload) -} - -// writePump pumps messages from the hub to the websocket connection. -func (c *connection) writePump() { - ticker := time.NewTicker(pingPeriod) - defer func() { - ticker.Stop() - c.ws.Close() - }() - for { - select { - case message, ok := <-c.send: - if !ok { - c.write(websocket.CloseMessage, []byte{}) - return - } - if err := c.write(websocket.TextMessage, message); err != nil { - return - } - case <-ticker.C: - if err := c.write(websocket.PingMessage, []byte{}); err != nil { - return - } - } - } -} - -// serverWs handles websocket requests from the peer. -func serveWs(w http.ResponseWriter, r *http.Request) { - if r.Method != "GET" { - http.Error(w, "Method not allowed", 405) - return - } - ws, err := upgrader.Upgrade(w, r, nil) - if err != nil { - log.Println(err) - return - } - c := &connection{send: make(chan []byte, 256), ws: ws} - h.register <- c - go c.writePump() - c.readPump() -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/home.html b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/home.html deleted file mode 100644 index 2959922..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/home.html +++ /dev/null @@ -1,92 +0,0 @@ - - - -Chat Example - - - - - -
-
- - -
- - diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/hub.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/hub.go deleted file mode 100644 index 449ba75..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/hub.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -// hub maintains the set of active connections and broadcasts messages to the -// connections. -type hub struct { - // Registered connections. - connections map[*connection]bool - - // Inbound messages from the connections. - broadcast chan []byte - - // Register requests from the connections. - register chan *connection - - // Unregister requests from connections. - unregister chan *connection -} - -var h = hub{ - broadcast: make(chan []byte), - register: make(chan *connection), - unregister: make(chan *connection), - connections: make(map[*connection]bool), -} - -func (h *hub) run() { - for { - select { - case c := <-h.register: - h.connections[c] = true - case c := <-h.unregister: - if _, ok := h.connections[c]; ok { - delete(h.connections, c) - close(c.send) - } - case m := <-h.broadcast: - for c := range h.connections { - select { - case c.send <- m: - default: - close(c.send) - delete(h.connections, c) - } - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/main.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/main.go deleted file mode 100644 index 3c4448d..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/main.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( - "flag" - "log" - "net/http" - "text/template" -) - -var addr = flag.String("addr", ":8080", "http service address") -var homeTempl = template.Must(template.ParseFiles("home.html")) - -func serveHome(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/" { - http.Error(w, "Not found", 404) - return - } - if r.Method != "GET" { - http.Error(w, "Method not allowed", 405) - return - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - homeTempl.Execute(w, r.Host) -} - -func main() { - flag.Parse() - go h.run() - http.HandleFunc("/", serveHome) - http.HandleFunc("/ws", serveWs) - err := http.ListenAndServe(*addr, nil) - if err != nil { - log.Fatal("ListenAndServe: ", err) - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/README.md deleted file mode 100644 index ca4931f..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# File Watch example. - -This example sends a file to the browser client for display whenever the file is modified. - - $ go get github.com/gorilla/websocket - $ cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/filewatch` - $ go run main.go - # Open http://localhost:8080/ . - # Modify the file to see it update in the browser. diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go deleted file mode 100644 index a2c7b85..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( - "flag" - "io/ioutil" - "log" - "net/http" - "os" - "strconv" - "text/template" - "time" - - "github.com/gorilla/websocket" -) - -const ( - // Time allowed to write the file to the client. - writeWait = 10 * time.Second - - // Time allowed to read the next pong message from the client. - pongWait = 60 * time.Second - - // Send pings to client with this period. Must be less than pongWait. - pingPeriod = (pongWait * 9) / 10 - - // Poll file for changes with this period. - filePeriod = 10 * time.Second -) - -var ( - addr = flag.String("addr", ":8080", "http service address") - homeTempl = template.Must(template.New("").Parse(homeHTML)) - filename string - upgrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, - } -) - -func readFileIfModified(lastMod time.Time) ([]byte, time.Time, error) { - fi, err := os.Stat(filename) - if err != nil { - return nil, lastMod, err - } - if !fi.ModTime().After(lastMod) { - return nil, lastMod, nil - } - p, err := ioutil.ReadFile(filename) - if err != nil { - return nil, fi.ModTime(), err - } - return p, fi.ModTime(), nil -} - -func reader(ws *websocket.Conn) { - defer ws.Close() - ws.SetReadLimit(512) - ws.SetReadDeadline(time.Now().Add(pongWait)) - ws.SetPongHandler(func(string) error { ws.SetReadDeadline(time.Now().Add(pongWait)); return nil }) - for { - _, _, err := ws.ReadMessage() - if err != nil { - break - } - } -} - -func writer(ws *websocket.Conn, lastMod time.Time) { - lastError := "" - pingTicker := time.NewTicker(pingPeriod) - fileTicker := time.NewTicker(filePeriod) - defer func() { - pingTicker.Stop() - fileTicker.Stop() - ws.Close() - }() - for { - select { - case <-fileTicker.C: - var p []byte - var err error - - p, lastMod, err = readFileIfModified(lastMod) - - if err != nil { - if s := err.Error(); s != lastError { - lastError = s - p = []byte(lastError) - } - } else { - lastError = "" - } - - if p != nil { - ws.SetWriteDeadline(time.Now().Add(writeWait)) - if err := ws.WriteMessage(websocket.TextMessage, p); err != nil { - return - } - } - case <-pingTicker.C: - ws.SetWriteDeadline(time.Now().Add(writeWait)) - if err := ws.WriteMessage(websocket.PingMessage, []byte{}); err != nil { - return - } - } - } -} - -func serveWs(w http.ResponseWriter, r *http.Request) { - ws, err := upgrader.Upgrade(w, r, nil) - if err != nil { - if _, ok := err.(websocket.HandshakeError); !ok { - log.Println(err) - } - return - } - - var lastMod time.Time - if n, err := strconv.ParseInt(r.FormValue("lastMod"), 16, 64); err != nil { - lastMod = time.Unix(0, n) - } - - go writer(ws, lastMod) - reader(ws) -} - -func serveHome(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/" { - http.Error(w, "Not found", 404) - return - } - if r.Method != "GET" { - http.Error(w, "Method not allowed", 405) - return - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - p, lastMod, err := readFileIfModified(time.Time{}) - if err != nil { - p = []byte(err.Error()) - lastMod = time.Unix(0, 0) - } - var v = struct { - Host string - Data string - LastMod string - }{ - r.Host, - string(p), - strconv.FormatInt(lastMod.UnixNano(), 16), - } - homeTempl.Execute(w, &v) -} - -func main() { - flag.Parse() - if flag.NArg() != 1 { - log.Fatal("filename not specified") - } - filename = flag.Args()[0] - http.HandleFunc("/", serveHome) - http.HandleFunc("/ws", serveWs) - if err := http.ListenAndServe(*addr, nil); err != nil { - log.Fatal(err) - } -} - -const homeHTML = ` - - - WebSocket Example - - -
{{.Data}}
- - - -` diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/json.go b/Godeps/_workspace/src/github.com/gorilla/websocket/json.go deleted file mode 100644 index 18e62f2..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/json.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "encoding/json" - "io" -) - -// WriteJSON is deprecated, use c.WriteJSON instead. -func WriteJSON(c *Conn, v interface{}) error { - return c.WriteJSON(v) -} - -// WriteJSON writes the JSON encoding of v to the connection. -// -// See the documentation for encoding/json Marshal for details about the -// conversion of Go values to JSON. -func (c *Conn) WriteJSON(v interface{}) error { - w, err := c.NextWriter(TextMessage) - if err != nil { - return err - } - err1 := json.NewEncoder(w).Encode(v) - err2 := w.Close() - if err1 != nil { - return err1 - } - return err2 -} - -// ReadJSON is deprecated, use c.ReadJSON instead. -func ReadJSON(c *Conn, v interface{}) error { - return c.ReadJSON(v) -} - -// ReadJSON reads the next JSON-encoded message from the connection and stores -// it in the value pointed to by v. -// -// See the documentation for the encoding/json Unmarshal function for details -// about the conversion of JSON to a Go value. -func (c *Conn) ReadJSON(v interface{}) error { - _, r, err := c.NextReader() - if err != nil { - return err - } - err = json.NewDecoder(r).Decode(v) - if err == io.EOF { - // Decode returns io.EOF when the message is empty or all whitespace. - // Convert to io.ErrUnexpectedEOF so that application can distinguish - // between an error reading the JSON value and the connection closing. - err = io.ErrUnexpectedEOF - } - return err -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go deleted file mode 100644 index 1b7a5ec..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bytes" - "encoding/json" - "io" - "reflect" - "testing" -) - -func TestJSON(t *testing.T) { - var buf bytes.Buffer - c := fakeNetConn{&buf, &buf} - wc := newConn(c, true, 1024, 1024) - rc := newConn(c, false, 1024, 1024) - - var actual, expect struct { - A int - B string - } - expect.A = 1 - expect.B = "hello" - - if err := wc.WriteJSON(&expect); err != nil { - t.Fatal("write", err) - } - - if err := rc.ReadJSON(&actual); err != nil { - t.Fatal("read", err) - } - - if !reflect.DeepEqual(&actual, &expect) { - t.Fatal("equal", actual, expect) - } -} - -func TestPartialJsonRead(t *testing.T) { - var buf bytes.Buffer - c := fakeNetConn{&buf, &buf} - wc := newConn(c, true, 1024, 1024) - rc := newConn(c, false, 1024, 1024) - - var v struct { - A int - B string - } - v.A = 1 - v.B = "hello" - - messageCount := 0 - - // Partial JSON values. - - data, err := json.Marshal(v) - if err != nil { - t.Fatal(err) - } - for i := len(data) - 1; i >= 0; i-- { - if err := wc.WriteMessage(TextMessage, data[:i]); err != nil { - t.Fatal(err) - } - messageCount++ - } - - // Whitespace. - - if err := wc.WriteMessage(TextMessage, []byte(" ")); err != nil { - t.Fatal(err) - } - messageCount++ - - // Close. - - if err := wc.WriteMessage(CloseMessage, FormatCloseMessage(CloseNormalClosure, "")); err != nil { - t.Fatal(err) - } - - for i := 0; i < messageCount; i++ { - err := rc.ReadJSON(&v) - if err != io.ErrUnexpectedEOF { - t.Error("read", i, err) - } - } - - err = rc.ReadJSON(&v) - if err != io.EOF { - t.Error("final", err) - } -} - -func TestDeprecatedJSON(t *testing.T) { - var buf bytes.Buffer - c := fakeNetConn{&buf, &buf} - wc := newConn(c, true, 1024, 1024) - rc := newConn(c, false, 1024, 1024) - - var actual, expect struct { - A int - B string - } - expect.A = 1 - expect.B = "hello" - - if err := WriteJSON(wc, &expect); err != nil { - t.Fatal("write", err) - } - - if err := ReadJSON(rc, &actual); err != nil { - t.Fatal("read", err) - } - - if !reflect.DeepEqual(&actual, &expect) { - t.Fatal("equal", actual, expect) - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/server.go b/Godeps/_workspace/src/github.com/gorilla/websocket/server.go deleted file mode 100644 index e56a004..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/server.go +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "bufio" - "errors" - "net" - "net/http" - "net/url" - "strings" - "time" -) - -// HandshakeError describes an error with the handshake from the peer. -type HandshakeError struct { - message string -} - -func (e HandshakeError) Error() string { return e.message } - -// Upgrader specifies parameters for upgrading an HTTP connection to a -// WebSocket connection. -type Upgrader struct { - // HandshakeTimeout specifies the duration for the handshake to complete. - HandshakeTimeout time.Duration - - // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer - // size is zero, then a default value of 4096 is used. The I/O buffer sizes - // do not limit the size of the messages that can be sent or received. - ReadBufferSize, WriteBufferSize int - - // Subprotocols specifies the server's supported protocols in order of - // preference. If this field is set, then the Upgrade method negotiates a - // subprotocol by selecting the first match in this list with a protocol - // requested by the client. - Subprotocols []string - - // Error specifies the function for generating HTTP error responses. If Error - // is nil, then http.Error is used to generate the HTTP response. - Error func(w http.ResponseWriter, r *http.Request, status int, reason error) - - // CheckOrigin returns true if the request Origin header is acceptable. If - // CheckOrigin is nil, the host in the Origin header must not be set or - // must match the host of the request. - CheckOrigin func(r *http.Request) bool -} - -func (u *Upgrader) returnError(w http.ResponseWriter, r *http.Request, status int, reason string) (*Conn, error) { - err := HandshakeError{reason} - if u.Error != nil { - u.Error(w, r, status, err) - } else { - http.Error(w, http.StatusText(status), status) - } - return nil, err -} - -// checkSameOrigin returns true if the origin is not set or is equal to the request host. -func checkSameOrigin(r *http.Request) bool { - origin := r.Header["Origin"] - if len(origin) == 0 { - return true - } - u, err := url.Parse(origin[0]) - if err != nil { - return false - } - return u.Host == r.Host -} - -func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { - if u.Subprotocols != nil { - clientProtocols := Subprotocols(r) - for _, serverProtocol := range u.Subprotocols { - for _, clientProtocol := range clientProtocols { - if clientProtocol == serverProtocol { - return clientProtocol - } - } - } - } else if responseHeader != nil { - return responseHeader.Get("Sec-Websocket-Protocol") - } - return "" -} - -// Upgrade upgrades the HTTP server connection to the WebSocket protocol. -// -// The responseHeader is included in the response to the client's upgrade -// request. Use the responseHeader to specify cookies (Set-Cookie) and the -// application negotiated subprotocol (Sec-Websocket-Protocol). -func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { - if values := r.Header["Sec-Websocket-Version"]; len(values) == 0 || values[0] != "13" { - return u.returnError(w, r, http.StatusBadRequest, "websocket: version != 13") - } - - if !tokenListContainsValue(r.Header, "Connection", "upgrade") { - return u.returnError(w, r, http.StatusBadRequest, "websocket: could not find connection header with token 'upgrade'") - } - - if !tokenListContainsValue(r.Header, "Upgrade", "websocket") { - return u.returnError(w, r, http.StatusBadRequest, "websocket: could not find upgrade header with token 'websocket'") - } - - checkOrigin := u.CheckOrigin - if checkOrigin == nil { - checkOrigin = checkSameOrigin - } - if !checkOrigin(r) { - return u.returnError(w, r, http.StatusForbidden, "websocket: origin not allowed") - } - - challengeKey := r.Header.Get("Sec-Websocket-Key") - if challengeKey == "" { - return u.returnError(w, r, http.StatusBadRequest, "websocket: key missing or blank") - } - - subprotocol := u.selectSubprotocol(r, responseHeader) - - var ( - netConn net.Conn - br *bufio.Reader - err error - ) - - h, ok := w.(http.Hijacker) - if !ok { - return u.returnError(w, r, http.StatusInternalServerError, "websocket: response does not implement http.Hijacker") - } - var rw *bufio.ReadWriter - netConn, rw, err = h.Hijack() - if err != nil { - return u.returnError(w, r, http.StatusInternalServerError, err.Error()) - } - br = rw.Reader - - if br.Buffered() > 0 { - netConn.Close() - return nil, errors.New("websocket: client sent data before handshake is complete") - } - - c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize) - c.subprotocol = subprotocol - - p := c.writeBuf[:0] - p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) - p = append(p, computeAcceptKey(challengeKey)...) - p = append(p, "\r\n"...) - if c.subprotocol != "" { - p = append(p, "Sec-Websocket-Protocol: "...) - p = append(p, c.subprotocol...) - p = append(p, "\r\n"...) - } - for k, vs := range responseHeader { - if k == "Sec-Websocket-Protocol" { - continue - } - for _, v := range vs { - p = append(p, k...) - p = append(p, ": "...) - for i := 0; i < len(v); i++ { - b := v[i] - if b <= 31 { - // prevent response splitting. - b = ' ' - } - p = append(p, b) - } - p = append(p, "\r\n"...) - } - } - p = append(p, "\r\n"...) - - // Clear deadlines set by HTTP server. - netConn.SetDeadline(time.Time{}) - - if u.HandshakeTimeout > 0 { - netConn.SetWriteDeadline(time.Now().Add(u.HandshakeTimeout)) - } - if _, err = netConn.Write(p); err != nil { - netConn.Close() - return nil, err - } - if u.HandshakeTimeout > 0 { - netConn.SetWriteDeadline(time.Time{}) - } - - return c, nil -} - -// Upgrade upgrades the HTTP server connection to the WebSocket protocol. -// -// This function is deprecated, use websocket.Upgrader instead. -// -// The application is responsible for checking the request origin before -// calling Upgrade. An example implementation of the same origin policy is: -// -// if req.Header.Get("Origin") != "http://"+req.Host { -// http.Error(w, "Origin not allowed", 403) -// return -// } -// -// If the endpoint supports subprotocols, then the application is responsible -// for negotiating the protocol used on the connection. Use the Subprotocols() -// function to get the subprotocols requested by the client. Use the -// Sec-Websocket-Protocol response header to specify the subprotocol selected -// by the application. -// -// The responseHeader is included in the response to the client's upgrade -// request. Use the responseHeader to specify cookies (Set-Cookie) and the -// negotiated subprotocol (Sec-Websocket-Protocol). -// -// The connection buffers IO to the underlying network connection. The -// readBufSize and writeBufSize parameters specify the size of the buffers to -// use. Messages can be larger than the buffers. -// -// If the request is not a valid WebSocket handshake, then Upgrade returns an -// error of type HandshakeError. Applications should handle this error by -// replying to the client with an HTTP error response. -func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) { - u := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize} - u.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { - // don't return errors to maintain backwards compatibility - } - u.CheckOrigin = func(r *http.Request) bool { - // allow all connections by default - return true - } - return u.Upgrade(w, r, responseHeader) -} - -// Subprotocols returns the subprotocols requested by the client in the -// Sec-Websocket-Protocol header. -func Subprotocols(r *http.Request) []string { - h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol")) - if h == "" { - return nil - } - protocols := strings.Split(h, ",") - for i := range protocols { - protocols[i] = strings.TrimSpace(protocols[i]) - } - return protocols -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/server_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/server_test.go deleted file mode 100644 index ead0776..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/server_test.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "net/http" - "reflect" - "testing" -) - -var subprotocolTests = []struct { - h string - protocols []string -}{ - {"", nil}, - {"foo", []string{"foo"}}, - {"foo,bar", []string{"foo", "bar"}}, - {"foo, bar", []string{"foo", "bar"}}, - {" foo, bar", []string{"foo", "bar"}}, - {" foo, bar ", []string{"foo", "bar"}}, -} - -func TestSubprotocols(t *testing.T) { - for _, st := range subprotocolTests { - r := http.Request{Header: http.Header{"Sec-Websocket-Protocol": {st.h}}} - protocols := Subprotocols(&r) - if !reflect.DeepEqual(st.protocols, protocols) { - t.Errorf("SubProtocols(%q) returned %#v, want %#v", st.h, protocols, st.protocols) - } - } -} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/util_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/util_test.go deleted file mode 100644 index 91f70ce..0000000 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/util_test.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package websocket - -import ( - "net/http" - "testing" -) - -var tokenListContainsValueTests = []struct { - value string - ok bool -}{ - {"WebSocket", true}, - {"WEBSOCKET", true}, - {"websocket", true}, - {"websockets", false}, - {"x websocket", false}, - {"websocket x", false}, - {"other,websocket,more", true}, - {"other, websocket, more", true}, -} - -func TestTokenListContainsValue(t *testing.T) { - for _, tt := range tokenListContainsValueTests { - h := http.Header{"Upgrade": {tt.value}} - ok := tokenListContainsValue(h, "Upgrade", "websocket") - if ok != tt.ok { - t.Errorf("tokenListContainsValue(h, n, %q) = %v, want %v", tt.value, ok, tt.ok) - } - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go deleted file mode 100644 index 0b619ae..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go +++ /dev/null @@ -1,158 +0,0 @@ -package bundle - -import ( - "fmt" - "testing" - - "github.com/nicksnyder/go-i18n/i18n/language" - "github.com/nicksnyder/go-i18n/i18n/translation" -) - -func TestMustLoadTranslationFile(t *testing.T) { - t.Skipf("not implemented") -} - -func TestLoadTranslationFile(t *testing.T) { - t.Skipf("not implemented") -} - -func TestParseTranslationFileBytes(t *testing.T) { - t.Skipf("not implemented") -} - -func TestAddTranslation(t *testing.T) { - t.Skipf("not implemented") -} - -func TestMustTfunc(t *testing.T) { - defer func() { - if r := recover(); r == nil { - t.Errorf("expected MustTfunc to panic") - } - }() - New().MustTfunc("invalid") -} - -func TestTfuncAndLanguage(t *testing.T) { - b := New() - translationID := "translation_id" - englishLanguage := languageWithTag("en-US") - frenchLanguage := languageWithTag("fr-FR") - spanishLanguage := languageWithTag("es") - chineseLanguage := languageWithTag("zh-hans-cn") - englishTranslation := addFakeTranslation(t, b, englishLanguage, translationID) - frenchTranslation := addFakeTranslation(t, b, frenchLanguage, translationID) - spanishTranslation := addFakeTranslation(t, b, spanishLanguage, translationID) - chineseTranslation := addFakeTranslation(t, b, chineseLanguage, translationID) - - tests := []struct { - languageIDs []string - result string - expectedLanguage *language.Language - }{ - { - []string{"invalid"}, - translationID, - nil, - }, - { - []string{"invalid", "invalid2"}, - translationID, - nil, - }, - { - []string{"invalid", "en-US"}, - englishTranslation, - englishLanguage, - }, - { - []string{"en-US", "invalid"}, - englishTranslation, - englishLanguage, - }, - { - []string{"en-US", "fr-FR"}, - englishTranslation, - englishLanguage, - }, - { - []string{"invalid", "es"}, - spanishTranslation, - spanishLanguage, - }, - { - []string{"zh-CN,fr-XX,es"}, - spanishTranslation, - spanishLanguage, - }, - { - []string{"fr"}, - frenchTranslation, - - // The language is still "fr" even though the translation is provided by "fr-FR" - languageWithTag("fr"), - }, - { - []string{"zh"}, - chineseTranslation, - - // The language is still "zh" even though the translation is provided by "zh-hans-cn" - languageWithTag("zh"), - }, - { - []string{"zh-hans"}, - chineseTranslation, - - // The language is still "zh-hans" even though the translation is provided by "zh-hans-cn" - languageWithTag("zh-hans"), - }, - { - []string{"zh-hans-cn"}, - chineseTranslation, - languageWithTag("zh-hans-cn"), - }, - } - - for i, test := range tests { - tf, lang, err := b.TfuncAndLanguage(test.languageIDs[0], test.languageIDs[1:]...) - if err != nil && test.expectedLanguage != nil { - t.Errorf("Tfunc(%v) = error{%q}; expected no error", test.languageIDs, err) - } - if err == nil && test.expectedLanguage == nil { - t.Errorf("Tfunc(%v) = nil error; expected error", test.languageIDs) - } - if result := tf(translationID); result != test.result { - t.Errorf("translation %d was %s; expected %s", i, result, test.result) - } - if (lang == nil && test.expectedLanguage != nil) || - (lang != nil && test.expectedLanguage == nil) || - (lang != nil && test.expectedLanguage != nil && lang.String() != test.expectedLanguage.String()) { - t.Errorf("lang %d was %s; expected %s", i, lang, test.expectedLanguage) - } - } -} - -func addFakeTranslation(t *testing.T, b *Bundle, lang *language.Language, translationID string) string { - translation := fakeTranslation(lang, translationID) - b.AddTranslation(lang, testNewTranslation(t, map[string]interface{}{ - "id": translationID, - "translation": translation, - })) - return translation -} - -func fakeTranslation(lang *language.Language, translationID string) string { - return fmt.Sprintf("%s(%s)", lang.Tag, translationID) -} - -func testNewTranslation(t *testing.T, data map[string]interface{}) translation.Translation { - translation, err := translation.NewTranslation(data) - if err != nil { - t.Fatal(err) - } - return translation -} - -func languageWithTag(tag string) *language.Language { - return language.MustParse(tag)[0] -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/example_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/example_test.go deleted file mode 100644 index c933f4a..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/example_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package i18n_test - -import ( - "fmt" - "github.com/nicksnyder/go-i18n/i18n" -) - -func Example() { - i18n.MustLoadTranslationFile("../goi18n/testdata/expected/en-us.all.json") - - T, _ := i18n.Tfunc("en-US") - - fmt.Println(T("program_greeting")) - fmt.Println(T("person_greeting", map[string]interface{}{ - "Person": "Bob", - })) - - fmt.Println(T("your_unread_email_count", 0)) - fmt.Println(T("your_unread_email_count", 1)) - fmt.Println(T("your_unread_email_count", 2)) - fmt.Println(T("my_height_in_meters", "1.7")) - - fmt.Println(T("person_unread_email_count", 0, map[string]interface{}{ - "Person": "Bob", - })) - fmt.Println(T("person_unread_email_count", 1, map[string]interface{}{ - "Person": "Bob", - })) - fmt.Println(T("person_unread_email_count", 2, map[string]interface{}{ - "Person": "Bob", - })) - - fmt.Println(T("person_unread_email_count_timeframe", 3, map[string]interface{}{ - "Person": "Bob", - "Timeframe": T("d_days", 0), - })) - fmt.Println(T("person_unread_email_count_timeframe", 3, map[string]interface{}{ - "Person": "Bob", - "Timeframe": T("d_days", 1), - })) - fmt.Println(T("person_unread_email_count_timeframe", 3, map[string]interface{}{ - "Person": "Bob", - "Timeframe": T("d_days", 2), - })) - - // Output: - // Hello world - // Hello Bob - // You have 0 unread emails. - // You have 1 unread email. - // You have 2 unread emails. - // I am 1.7 meters tall. - // Bob has 0 unread emails. - // Bob has 1 unread email. - // Bob has 2 unread emails. - // Bob has 3 unread emails in the past 0 days. - // Bob has 3 unread emails in the past 1 day. - // Bob has 3 unread emails in the past 2 days. -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/exampletemplate_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/exampletemplate_test.go deleted file mode 100644 index b968945..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/exampletemplate_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package i18n_test - -import ( - "github.com/nicksnyder/go-i18n/i18n" - "os" - "text/template" -) - -var funcMap = map[string]interface{}{ - "T": i18n.IdentityTfunc, -} - -var tmpl = template.Must(template.New("").Funcs(funcMap).Parse(` -{{T "program_greeting"}} -{{T "person_greeting" .}} -{{T "your_unread_email_count" 0}} -{{T "your_unread_email_count" 1}} -{{T "your_unread_email_count" 2}} -{{T "person_unread_email_count" 0 .}} -{{T "person_unread_email_count" 1 .}} -{{T "person_unread_email_count" 2 .}} -`)) - -func Example_template() { - i18n.MustLoadTranslationFile("../goi18n/testdata/expected/en-us.all.json") - - T, _ := i18n.Tfunc("en-US") - tmpl.Funcs(map[string]interface{}{ - "T": T, - }) - - tmpl.Execute(os.Stdout, map[string]interface{}{ - "Person": "Bob", - "Timeframe": T("d_days", 1), - }) - - // Output: - // Hello world - // Hello Bob - // You have 0 unread emails. - // You have 1 unread email. - // You have 2 unread emails. - // Bob has 0 unread emails. - // Bob has 1 unread email. - // Bob has 2 unread emails. -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/i18n.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/i18n.go deleted file mode 100644 index 2726efe..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/i18n.go +++ /dev/null @@ -1,139 +0,0 @@ -// Package i18n supports string translations with variable substitution and CLDR pluralization. -// It is intended to be used in conjunction with the goi18n command, although that is not strictly required. -// -// Initialization -// -// Your Go program should load translations during its initialization. -// i18n.MustLoadTranslationFile("path/to/fr-FR.all.json") -// If your translations are in a file format not supported by (Must)?LoadTranslationFile, -// then you can use the AddTranslation function to manually add translations. -// -// Fetching a translation -// -// Use Tfunc or MustTfunc to fetch a TranslateFunc that will return the translated string for a specific language. -// func handleRequest(w http.ResponseWriter, r *http.Request) { -// cookieLang := r.Cookie("lang") -// acceptLang := r.Header.Get("Accept-Language") -// defaultLang = "en-US" // known valid language -// T, err := i18n.Tfunc(cookieLang, acceptLang, defaultLang) -// fmt.Println(T("Hello world")) -// } -// -// Usually it is a good idea to identify strings by a generic id rather than the English translation, -// but the rest of this documentation will continue to use the English translation for readability. -// T("Hello world") // ok -// T("programGreeting") // better! -// -// Variables -// -// TranslateFunc supports strings that have variables using the text/template syntax. -// T("Hello {{.Person}}", map[string]interface{}{ -// "Person": "Bob", -// }) -// -// Pluralization -// -// TranslateFunc supports the pluralization of strings using the CLDR pluralization rules defined here: -// http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html -// T("You have {{.Count}} unread emails.", 2) -// T("I am {{.Count}} meters tall.", "1.7") -// -// Plural strings may also have variables. -// T("{{.Person}} has {{.Count}} unread emails", 2, map[string]interface{}{ -// "Person": "Bob", -// }) -// -// Sentences with multiple plural components can be supported with nesting. -// T("{{.Person}} has {{.Count}} unread emails in the past {{.Timeframe}}.", 3, map[string]interface{}{ -// "Person": "Bob", -// "Timeframe": T("{{.Count}} days", 2), -// }) -// -// Templates -// -// You can use the .Funcs() method of a text/template or html/template to register a TranslateFunc -// for usage inside of that template. -package i18n - -import ( - "github.com/nicksnyder/go-i18n/i18n/bundle" - "github.com/nicksnyder/go-i18n/i18n/language" - "github.com/nicksnyder/go-i18n/i18n/translation" -) - -// TranslateFunc returns the translation of the string identified by translationID. -// -// If translationID is a non-plural form, then the first variadic argument may be a map[string]interface{} -// that contains template data. -// -// If translationID is a plural form, then the first variadic argument must be an integer type -// (int, int8, int16, int32, int64) or a float formatted as a string (e.g. "123.45"). -// The second variadic argument may be a map[string]interface{} that contains template data. -type TranslateFunc func(translationID string, args ...interface{}) string - -// IdentityTfunc returns a TranslateFunc that always returns the translationID passed to it. -// -// It is a useful placeholder when parsing a text/template or html/template -// before the actual Tfunc is available. -func IdentityTfunc() TranslateFunc { - return func(translationID string, args ...interface{}) string { - return translationID - } -} - -var defaultBundle = bundle.New() - -// MustLoadTranslationFile is similar to LoadTranslationFile -// except it panics if an error happens. -func MustLoadTranslationFile(filename string) { - defaultBundle.MustLoadTranslationFile(filename) -} - -// LoadTranslationFile loads the translations from filename into memory. -// -// The language that the translations are associated with is parsed from the filename (e.g. en-US.json). -// -// Generally you should load translation files once during your program's initialization. -func LoadTranslationFile(filename string) error { - return defaultBundle.LoadTranslationFile(filename) -} - -// ParseTranslationFileBytes is similar to LoadTranslationFile except it parses the bytes in buf. -// -// It is useful for parsing translation files embedded with go-bindata. -func ParseTranslationFileBytes(filename string, buf []byte) error { - return defaultBundle.ParseTranslationFileBytes(filename, buf) -} - -// AddTranslation adds translations for a language. -// -// It is useful if your translations are in a format not supported by LoadTranslationFile. -func AddTranslation(lang *language.Language, translations ...translation.Translation) { - defaultBundle.AddTranslation(lang, translations...) -} - -// MustTfunc is similar to Tfunc except it panics if an error happens. -func MustTfunc(languageSource string, languageSources ...string) TranslateFunc { - return TranslateFunc(defaultBundle.MustTfunc(languageSource, languageSources...)) -} - -// Tfunc returns a TranslateFunc that will be bound to the first language which -// has a non-zero number of translations. -// -// It can parse languages from Accept-Language headers (RFC 2616). -func Tfunc(languageSource string, languageSources ...string) (TranslateFunc, error) { - tfunc, err := defaultBundle.Tfunc(languageSource, languageSources...) - return TranslateFunc(tfunc), err -} - -// MustTfuncAndLanguage is similar to TfuncAndLanguage except it panics if an error happens. -func MustTfuncAndLanguage(languageSource string, languageSources ...string) (TranslateFunc, *language.Language) { - tfunc, lang := defaultBundle.MustTfuncAndLanguage(languageSource, languageSources...) - return TranslateFunc(tfunc), lang -} - -// TfuncAndLanguage is similar to Tfunc except it also returns the language which TranslateFunc is bound to. -func TfuncAndLanguage(languageSource string, languageSources ...string) (TranslateFunc, *language.Language, error) { - tfunc, lang, err := defaultBundle.TfuncAndLanguage(languageSource, languageSources...) - return TranslateFunc(tfunc), lang, err -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/language_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/language_test.go deleted file mode 100644 index e9feb4b..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/language_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package language - -import ( - "reflect" - "testing" -) - -func TestParse(t *testing.T) { - tests := []struct { - src string - lang []*Language - }{ - {"en", []*Language{{"en", pluralSpecs["en"]}}}, - {"en-US", []*Language{{"en-us", pluralSpecs["en"]}}}, - {"en_US", []*Language{{"en-us", pluralSpecs["en"]}}}, - {"en-GB", []*Language{{"en-gb", pluralSpecs["en"]}}}, - {"zh-CN", []*Language{{"zh-cn", pluralSpecs["zh"]}}}, - {"zh-TW", []*Language{{"zh-tw", pluralSpecs["zh"]}}}, - {"pt-BR", []*Language{{"pt-br", pluralSpecs["pt-br"]}}}, - {"pt_BR", []*Language{{"pt-br", pluralSpecs["pt-br"]}}}, - {"pt-PT", []*Language{{"pt-pt", pluralSpecs["pt"]}}}, - {"pt_PT", []*Language{{"pt-pt", pluralSpecs["pt"]}}}, - {"zh-Hans-CN", []*Language{{"zh-hans-cn", pluralSpecs["zh"]}}}, - {"zh-Hant-TW", []*Language{{"zh-hant-tw", pluralSpecs["zh"]}}}, - {"en-US-en-US", []*Language{{"en-us-en-us", pluralSpecs["en"]}}}, - {".en-US..en-US.", []*Language{{"en-us", pluralSpecs["en"]}}}, - { - "it, xx-zz, xx-ZZ, zh, en-gb;q=0.8, en;q=0.7, es-ES;q=0.6, de-xx", - []*Language{ - {"it", pluralSpecs["it"]}, - {"zh", pluralSpecs["zh"]}, - {"en-gb", pluralSpecs["en"]}, - {"en", pluralSpecs["en"]}, - {"es-es", pluralSpecs["es"]}, - {"de-xx", pluralSpecs["de"]}, - }, - }, - { - "it-qq,xx,xx-zz,xx-ZZ,zh,en-gb;q=0.8,en;q=0.7,es-ES;q=0.6,de-xx", - []*Language{ - {"it-qq", pluralSpecs["it"]}, - {"zh", pluralSpecs["zh"]}, - {"en-gb", pluralSpecs["en"]}, - {"en", pluralSpecs["en"]}, - {"es-es", pluralSpecs["es"]}, - {"de-xx", pluralSpecs["de"]}, - }, - }, - {"en.json", []*Language{{"en", pluralSpecs["en"]}}}, - {"en-US.json", []*Language{{"en-us", pluralSpecs["en"]}}}, - {"en-us.json", []*Language{{"en-us", pluralSpecs["en"]}}}, - {"en-xx.json", []*Language{{"en-xx", pluralSpecs["en"]}}}, - {"xx-Yyen-US", nil}, - {"en US", nil}, - {"", nil}, - {"-", nil}, - {"_", nil}, - {"-en", nil}, - {"_en", nil}, - {"-en-", nil}, - {"_en_", nil}, - {"xx", nil}, - } - for _, test := range tests { - lang := Parse(test.src) - if !reflect.DeepEqual(lang, test.lang) { - t.Errorf("Parse(%q) = %q expected %q", test.src, lang, test.lang) - } - } -} - -func TestMatchingTags(t *testing.T) { - tests := []struct { - lang *Language - matches []string - }{ - {&Language{"zh-hans-cn", nil}, []string{"zh", "zh-hans", "zh-hans-cn"}}, - {&Language{"foo", nil}, []string{"foo"}}, - } - for _, test := range tests { - if actual := test.lang.MatchingTags(); !reflect.DeepEqual(test.matches, actual) { - t.Errorf("matchingTags(%q) = %q expected %q", test.lang.Tag, actual, test.matches) - } - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/operands.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/operands.go deleted file mode 100644 index e56534b..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/operands.go +++ /dev/null @@ -1,87 +0,0 @@ -package language - -import ( - "fmt" - "strconv" - "strings" -) - -// http://unicode.org/reports/tr35/tr35-numbers.html#Operands -type operands struct { - N float64 // absolute value of the source number (integer and decimals) - I int64 // integer digits of n - V int // number of visible fraction digits in n, with trailing zeros - W int // number of visible fraction digits in n, without trailing zeros - F int // visible fractional digits in n, with trailing zeros - T int // visible fractional digits in n, without trailing zeros -} - -func newOperands(v interface{}) (*operands, error) { - switch v := v.(type) { - case int: - return newOperandsInt64(int64(v)), nil - case int8: - return newOperandsInt64(int64(v)), nil - case int16: - return newOperandsInt64(int64(v)), nil - case int32: - return newOperandsInt64(int64(v)), nil - case int64: - return newOperandsInt64(v), nil - case string: - return newOperandsString(v) - case float32, float64: - return nil, fmt.Errorf("floats should be formatted into a string") - default: - return nil, fmt.Errorf("invalid type %T; expected integer or string", v) - } -} - -func newOperandsInt64(i int64) *operands { - if i < 0 { - i = -i - } - return &operands{float64(i), i, 0, 0, 0, 0} -} - -func newOperandsString(s string) (*operands, error) { - if s[0] == '-' { - s = s[1:] - } - n, err := strconv.ParseFloat(s, 64) - if err != nil { - return nil, err - } - ops := &operands{N: n} - parts := strings.SplitN(s, ".", 2) - ops.I, err = strconv.ParseInt(parts[0], 10, 64) - if err != nil { - return nil, err - } - if len(parts) == 1 { - return ops, nil - } - fraction := parts[1] - ops.V = len(fraction) - for i := ops.V - 1; i >= 0; i-- { - if fraction[i] != '0' { - ops.W = i + 1 - break - } - } - if ops.V > 0 { - f, err := strconv.ParseInt(fraction, 10, 0) - if err != nil { - return nil, err - } - ops.F = int(f) - } - if ops.W > 0 { - t, err := strconv.ParseInt(fraction[:ops.W], 10, 0) - if err != nil { - return nil, err - } - ops.T = int(t) - } - return ops, nil -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/operands_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/operands_test.go deleted file mode 100644 index 2903087..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/operands_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package language - -import ( - "reflect" - "testing" -) - -func TestNewOperands(t *testing.T) { - tests := []struct { - input interface{} - ops *operands - err bool - }{ - {int64(0), &operands{0.0, 0, 0, 0, 0, 0}, false}, - {int64(1), &operands{1.0, 1, 0, 0, 0, 0}, false}, - {"0", &operands{0.0, 0, 0, 0, 0, 0}, false}, - {"1", &operands{1.0, 1, 0, 0, 0, 0}, false}, - {"1.0", &operands{1.0, 1, 1, 0, 0, 0}, false}, - {"1.00", &operands{1.0, 1, 2, 0, 0, 0}, false}, - {"1.3", &operands{1.3, 1, 1, 1, 3, 3}, false}, - {"1.30", &operands{1.3, 1, 2, 1, 30, 3}, false}, - {"1.03", &operands{1.03, 1, 2, 2, 3, 3}, false}, - {"1.230", &operands{1.23, 1, 3, 2, 230, 23}, false}, - {"20.0230", &operands{20.023, 20, 4, 3, 230, 23}, false}, - {20.0230, nil, true}, - } - for _, test := range tests { - ops, err := newOperands(test.input) - if err != nil && !test.err { - t.Errorf("newOperands(%#v) unexpected error: %s", test.input, err) - } else if err == nil && test.err { - t.Errorf("newOperands(%#v) returned %#v; expected error", test.input, ops) - } else if !reflect.DeepEqual(ops, test.ops) { - t.Errorf("newOperands(%#v) returned %#v; expected %#v", test.input, ops, test.ops) - } - } -} - -func BenchmarkNewOperand(b *testing.B) { - for i := 0; i < b.N; i++ { - if _, err := newOperands("1234.56780000"); err != nil { - b.Fatal(err) - } - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/plural_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/plural_test.go deleted file mode 100644 index 6336d29..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/plural_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package language - -import ( - "testing" -) - -func TestNewPlural(t *testing.T) { - tests := []struct { - src string - plural Plural - err bool - }{ - {"zero", Zero, false}, - {"one", One, false}, - {"two", Two, false}, - {"few", Few, false}, - {"many", Many, false}, - {"other", Other, false}, - {"asdf", Invalid, true}, - } - for _, test := range tests { - plural, err := NewPlural(test.src) - wrongErr := (err != nil && !test.err) || (err == nil && test.err) - if plural != test.plural || wrongErr { - t.Errorf("NewPlural(%#v) returned %#v,%#v; expected %#v", test.src, plural, err, test.plural) - } - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/pluralspec.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/pluralspec.go deleted file mode 100644 index e742fa5..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/pluralspec.go +++ /dev/null @@ -1,405 +0,0 @@ -package language - -import ( - "strings" - "math" -) - -// PluralSpec defines the CLDR plural rules for a language. -// http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html -// http://unicode.org/reports/tr35/tr35-numbers.html#Operands -type PluralSpec struct { - Plurals map[Plural]struct{} - PluralFunc func(*operands) Plural -} - -// Plural returns the plural category for number as defined by -// the language's CLDR plural rules. -func (ps *PluralSpec) Plural(number interface{}) (Plural, error) { - ops, err := newOperands(number) - if err != nil { - return Invalid, err - } - return ps.PluralFunc(ops), nil -} - -// getPluralSpec returns the PluralSpec that matches the longest prefix of tag. -// It returns nil if no PluralSpec matches tag. -func getPluralSpec(tag string) *PluralSpec { - tag = NormalizeTag(tag) - subtag := tag - for { - if spec := pluralSpecs[subtag]; spec != nil { - return spec - } - end := strings.LastIndex(subtag, "-") - if end == -1 { - return nil - } - subtag = subtag[:end] - } -} - -// Alphabetical by English name. -var pluralSpecs = map[string]*PluralSpec{ - // Arabic - "ar": &PluralSpec{ - Plurals: newPluralSet(Zero, One, Two, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - if ops.W == 0 { - switch ops.I { - case 0: - return Zero - case 1: - return One - case 2: - return Two - default: - mod100 := ops.I % 100 - if mod100 >= 3 && mod100 <= 10 { - return Few - } - if mod100 >= 11 { - return Many - } - } - } - return Other - }, - }, - - // Belarusian - "be": &PluralSpec{ - Plurals: newPluralSet(One, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - mod10 := math.Mod(ops.N, 10) - mod100 := math.Mod(ops.N, 100) - if ops.T == 0 && mod10 == 1 && mod100 != 11 { - return One - } - if ops.T == 0 && mod10 >= 2 && mod10 <= 4 && !(mod100 >= 12 && mod100 <= 14) { - return Few - } - if (ops.T == 0 && mod10 == 0) || - (ops.T == 0 && mod10 >= 5 && mod10 <= 9) || - (ops.T == 0 && mod100 >= 11 && mod100 <= 14) { - return Many - } - return Other - }, - }, - - // Burmese - "my": &PluralSpec{ - Plurals: newPluralSet(Other), - PluralFunc: func(ops *operands) Plural { - return Other - }, - }, - - // Catalan - "ca": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // Chinese - // There is no need to distinguish between simplified and traditional - // since they have the same pluralization. - "zh": &PluralSpec{ - Plurals: newPluralSet(Other), - PluralFunc: func(ops *operands) Plural { - return Other - }, - }, - - // Czech - "cs": &PluralSpec{ - Plurals: newPluralSet(One, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - if ops.I >= 2 && ops.I <= 4 && ops.V == 0 { - return Few - } - if ops.V > 0 { - return Many - } - return Other - }, - }, - - // Danish - "da": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 || (ops.I == 0 && ops.T != 0) { - return One - } - return Other - }, - }, - - // Dutch - "nl": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // English - "en": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // French - "fr": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 0 || ops.I == 1 { - return One - } - return Other - }, - }, - - // German - "de": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // Icelandic - "is": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if (ops.T == 0 && ops.I % 10 == 1 && ops.I % 100 != 11) || ops.T != 0 { - return One - } - return Other - }, - }, - - // Indonesian - "id": &PluralSpec{ - Plurals: newPluralSet(Other), - PluralFunc: func(ops *operands) Plural { - return Other - }, - }, - - // Italian - "it": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // Korean - "ko": &PluralSpec{ - Plurals: newPluralSet(Other), - PluralFunc: func(ops *operands) Plural { - return Other - }, - }, - - // Japanese - "ja": &PluralSpec{ - Plurals: newPluralSet(Other), - PluralFunc: func(ops *operands) Plural { - return Other - }, - }, - - // Lithuanian - "lt": &PluralSpec{ - Plurals: newPluralSet(One, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - if ops.F != 0 { - return Many - } - mod100 := ops.I % 100 - if mod100 < 11 || mod100 > 19 { - switch ops.I % 10 { - case 0: - return Other - case 1: - return One - default: - return Few - } - } - return Other - }, - }, - - // Malay - "ms": &PluralSpec{ - Plurals: newPluralSet(Other), - PluralFunc: func(ops *operands) Plural { - return Other - }, - }, - - // Polish - "pl": &PluralSpec{ - Plurals: newPluralSet(One, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - if ops.V == 0 && ops.I == 1 { - return One - } - mod10 := ops.I % 10 - mod100 := ops.I % 100 - if ops.V == 0 && mod10 >= 2 && mod10 <= 4 && !(mod100 >= 12 && mod100 <= 14) { - return Few - } - if (ops.V == 0 && ops.I != 1 && mod10 >= 0 && mod10 <= 1) || - (ops.V == 0 && mod10 >= 5 && mod10 <= 9) || - (ops.V == 0 && mod100 >= 12 && mod100 <= 14) { - return Many - } - return Other - }, - }, - - // Portuguese (European) - "pt": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // Portuguese (Brazilian) - "pt-br": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if (ops.I == 1 && ops.V == 0) || (ops.I == 0 && ops.T == 1) { - return One - } - return Other - }, - }, - - // Russian - "ru": &PluralSpec{ - Plurals: newPluralSet(One, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - mod10 := ops.I % 10 - mod100 := ops.I % 100 - if ops.V == 0 && mod10 == 1 && mod100 != 11 { - return One - } - if ops.V == 0 && mod10 >= 2 && mod10 <= 4 && !(mod100 >= 12 && mod100 <= 14) { - return Few - } - if (ops.V == 0 && mod10 == 0) || - (ops.V == 0 && mod10 >= 5 && mod10 <= 9) || - (ops.V == 0 && mod100 >= 11 && mod100 <= 14) { - return Many - } - return Other - }, - }, - - // Spanish - "es": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.W == 0 { - return One - } - return Other - }, - }, - - // Bulgarian - "bg": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.W == 0 { - return One - } - return Other - }, - }, - - // Swedish - "sv": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if ops.I == 1 && ops.V == 0 { - return One - } - return Other - }, - }, - - // Turkish - "tr": &PluralSpec{ - Plurals: newPluralSet(One, Other), - PluralFunc: func(ops *operands) Plural { - if (ops.I == 1 && ops.W == 0) { - return One - } - return Other - }, - }, - - // Ukrainian - "uk": &PluralSpec{ - Plurals: newPluralSet(One, Few, Many, Other), - PluralFunc: func(ops *operands) Plural { - mod10 := ops.I % 10 - mod100 := ops.I % 100 - if ops.V == 0 && mod10 == 1 && mod100 != 11 { - return One - } - if ops.V == 0 && mod10 >= 2 && mod10 <= 4 && !(mod100 >= 12 && mod100 <= 14) { - return Few - } - if (ops.V == 0 && mod10 == 0) || - (ops.V == 0 && mod10 >= 5 && mod10 <= 9) || - (ops.V == 0 && mod100 >= 11 && mod100 <= 14) { - return Many - } - return Other - }, - }, -} - -func newPluralSet(plurals ...Plural) map[Plural]struct{} { - set := make(map[Plural]struct{}, len(plurals)) - for _, plural := range plurals { - set[plural] = struct{}{} - } - return set -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/pluralspec_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/pluralspec_test.go deleted file mode 100644 index 8a8fcfe..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/pluralspec_test.go +++ /dev/null @@ -1,531 +0,0 @@ -package language - -import ( - "fmt" - "testing" -) - -const onePlusEpsilon = "1.00000000000000000000000000000001" - -func TestGetPluralSpec(t *testing.T) { - tests := []struct { - src string - spec *PluralSpec - }{ - {"pl", pluralSpecs["pl"]}, - {"en", pluralSpecs["en"]}, - {"en-US", pluralSpecs["en"]}, - {"en_US", pluralSpecs["en"]}, - {"en-GB", pluralSpecs["en"]}, - {"zh-CN", pluralSpecs["zh"]}, - {"zh-TW", pluralSpecs["zh"]}, - {"pt-BR", pluralSpecs["pt-br"]}, - {"pt_BR", pluralSpecs["pt-br"]}, - {"pt-PT", pluralSpecs["pt"]}, - {"pt_PT", pluralSpecs["pt"]}, - {"zh-Hans-CN", pluralSpecs["zh"]}, - {"zh-Hant-TW", pluralSpecs["zh"]}, - {"zh-CN", pluralSpecs["zh"]}, - {"zh-TW", pluralSpecs["zh"]}, - {"zh-Hans", pluralSpecs["zh"]}, - {"zh-Hant", pluralSpecs["zh"]}, - {"ko-KR", pluralSpecs["ko"]}, - {"ko_KR", pluralSpecs["ko"]}, - {"ko-KP", pluralSpecs["ko"]}, - {"ko_KP", pluralSpecs["ko"]}, - {"en-US-en-US", pluralSpecs["en"]}, - {".en-US..en-US.", nil}, - {"zh, en-gb;q=0.8, en;q=0.7", nil}, - {"zh,en-gb;q=0.8,en;q=0.7", nil}, - {"xx, en-gb;q=0.8, en;q=0.7", nil}, - {"xx,en-gb;q=0.8,en;q=0.7", nil}, - {"xx-YY,xx;q=0.8,en-US,en;q=0.8,de;q=0.6,nl;q=0.4", nil}, - {"/foo/es/en.json", nil}, - {"xx-Yyen-US", nil}, - {"en US", nil}, - {"", nil}, - {"-", nil}, - {"_", nil}, - {".", nil}, - {"-en", nil}, - {"_en", nil}, - {"-en-", nil}, - {"_en_", nil}, - {"xx", nil}, - } - for _, test := range tests { - spec := getPluralSpec(test.src) - if spec != test.spec { - t.Errorf("getPluralSpec(%q) = %q expected %q", test.src, spec, test.spec) - } - } -} - -type pluralTest struct { - num interface{} - plural Plural -} - -func TestArabic(t *testing.T ) { - tests := []pluralTest{ - {0, Zero}, - {"0", Zero}, - {"0.0", Zero}, - {"0.00", Zero}, - {1, One}, - {"1", One}, - {"1.0", One}, - {"1.00", One}, - {onePlusEpsilon, Other}, - {2, Two}, - {"2", Two}, - {"2.0", Two}, - {"2.00", Two}, - {3, Few}, - {"3", Few}, - {"3.0", Few}, - {"3.00", Few}, - {10, Few}, - {"10", Few}, - {"10.0", Few}, - {"10.00", Few}, - {103, Few}, - {"103", Few}, - {"103.0", Few}, - {"103.00", Few}, - {110, Few}, - {"110", Few}, - {"110.0", Few}, - {"110.00", Few}, - {11, Many}, - {"11", Many}, - {"11.0", Many}, - {"11.00", Many}, - {99, Many}, - {"99", Many}, - {"99.0", Many}, - {"99.00", Many}, - {111, Many}, - {"111", Many}, - {"111.0", Many}, - {"111.00", Many}, - {199, Many}, - {"199", Many}, - {"199.0", Many}, - {"199.00", Many}, - {100, Other}, - {"100", Other}, - {"100.0", Other}, - {"100.00", Other}, - {102, Other}, - {"102", Other}, - {"102.0", Other}, - {"102.00", Other}, - {200, Other}, - {"200", Other}, - {"200.0", Other}, - {"200.00", Other}, - {202, Other}, - {"202", Other}, - {"202.0", Other}, - {"202.00", Other}, - } - tests = appendFloatTests(tests, 0.1, 0.9, Other) - tests = appendFloatTests(tests, 1.1, 1.9, Other) - tests = appendFloatTests(tests, 2.1, 2.9, Other) - tests = appendFloatTests(tests, 3.1, 3.9, Other) - tests = appendFloatTests(tests, 4.1, 4.9, Other) - runTests(t, "ar", tests) -} - -func TestBelarusian(t *testing.T) { - tests := []pluralTest{ - {0, Many}, - {1, One}, - {2, Few}, - {3, Few}, - {4, Few}, - {5, Many}, - {19, Many}, - {20, Many}, - {21, One}, - {11, Many}, - {52, Few}, - {101, One}, - {"0.1", Other}, - {"0.7", Other}, - {"1.5", Other}, - {"1.0", One}, - {onePlusEpsilon, Other}, - {"2.0", Few}, - {"10.0", Many}, - } - runTests(t, "be", tests) -} - -func TestBurmese(t *testing.T) { - tests := appendIntTests(nil, 0, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "my", tests) -} - -func TestCatalan(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {"0", Other}, - {1, One}, - {"1", One}, - {"1.0", Other}, - {onePlusEpsilon, Other}, - {2, Other}, - {"2", Other}, - } - tests = appendIntTests(tests, 2, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "ca", tests) -} - -func TestChinese(t *testing.T) { - tests := appendIntTests(nil, 0, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "zh", tests) -} - -func TestCzech(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {"0", Other}, - {1, One}, - {"1", One}, - {onePlusEpsilon, Many}, - {2, Few}, - {"2", Few}, - {3, Few}, - {"3", Few}, - {4, Few}, - {"4", Few}, - {5, Other}, - {"5", Other}, - } - tests = appendFloatTests(tests, 0, 10, Many) - runTests(t, "cs", tests) -} - -func TestDanish(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, One}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.1, 1.9, One) - tests = appendFloatTests(tests, 2.0, 10.0, Other) - runTests(t, "da", tests) -} - -func TestDutch(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 10.0, Other) - runTests(t, "nl", tests) -} - -func TestEnglish(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 10.0, Other) - runTests(t, "en", tests) -} - -func TestFrench(t *testing.T) { - tests := []pluralTest{ - {0, One}, - {1, One}, - {onePlusEpsilon, One}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 1.9, One) - tests = appendFloatTests(tests, 2.0, 10.0, Other) - runTests(t, "fr", tests) -} - -func TestGerman(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 10.0, Other) - runTests(t, "de", tests) -} - -func TestIcelandic(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {2, Other}, - {11, Other}, - {21, One}, - {111, Other}, - {"0.0", Other}, - {"0.1", One}, - {"2.0", Other}, - } - runTests(t, "is", tests) -} - -func TestIndonesian(t *testing.T) { - tests := appendIntTests(nil, 0, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "id", tests) -} - -func TestItalian(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 10.0, Other) - runTests(t, "it", tests) -} - -func TestKorean(t *testing.T) { - tests := appendIntTests(nil, 0, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "ko", tests) -} - -func TestJapanese(t *testing.T) { - tests := appendIntTests(nil, 0, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "ja", tests) -} - -func TestLithuanian(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {2, Few}, - {3, Few}, - {9, Few}, - {10, Other}, - {11, Other}, - {"0.1", Many}, - {"0.7", Many}, - {"1.0", One}, - {onePlusEpsilon, Many}, - {"2.0", Few}, - {"10.0", Other}, - } - runTests(t, "lt", tests) -} - -func TestMalay(t *testing.T) { - tests := appendIntTests(nil, 0, 10, Other) - tests = appendFloatTests(tests, 0, 10, Other) - runTests(t, "ms", tests) -} - -func TestPolish(t *testing.T) { - tests := []pluralTest{ - {0, Many}, - {1, One}, - {2, Few}, - {3, Few}, - {4, Few}, - {5, Many}, - {19, Many}, - {20, Many}, - {10, Many}, - {11, Many}, - {52, Few}, - {"0.1", Other}, - {"0.7", Other}, - {"1.5", Other}, - {"1.0", Other}, - {onePlusEpsilon, Other}, - {"2.0", Other}, - {"10.0", Other}, - } - runTests(t, "pl", tests) -} - -func TestPortuguese(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 10.0, Other) - runTests(t, "pt", tests) -} - -func TestPortugueseBrazilian(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {"0.0", Other}, - {"0.1", One}, - {"0.01", One}, - {1, One}, - {"1", One}, - {"1.1", Other}, - {"1.01", Other}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 2.0, 10.0, Other) - runTests(t, "pt-br", tests) -} - -func TestRussian(t *testing.T) { - tests := []pluralTest{ - {0, Many}, - {1, One}, - {2, Few}, - {3, Few}, - {4, Few}, - {5, Many}, - {19, Many}, - {20, Many}, - {21, One}, - {11, Many}, - {52, Few}, - {101, One}, - {"0.1", Other}, - {"0.7", Other}, - {"1.5", Other}, - {"1.0", Other}, - {onePlusEpsilon, Other}, - {"2.0", Other}, - {"10.0", Other}, - } - runTests(t, "ru", tests) -} - -func TestSpanish(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {"1", One}, - {"1.0", One}, - {"1.00", One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 0.9, Other) - tests = appendFloatTests(tests, 1.1, 10.0, Other) - runTests(t, "es", tests) -} - -func TestBulgarian(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {2, Other}, - {3, Other}, - {9, Other}, - {10, Other}, - {11, Other}, - {"0.1", Other}, - {"0.7", Other}, - {"1.0", One}, - {"1.001", Other}, - {onePlusEpsilon, Other}, - {"1.1", Other}, - {"2.0", Other}, - {"10.0", Other}, - } - runTests(t, "bg", tests) -} - -func TestSwedish(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {onePlusEpsilon, Other}, - {2, Other}, - } - tests = appendFloatTests(tests, 0.0, 10.0, Other) - runTests(t, "sv", tests) -} - -func TestTurkish(t *testing.T) { - tests := []pluralTest{ - {0, Other}, - {1, One}, - {"1", One}, - {"1.0", One}, - {"1.00", One}, - {"1.001", Other}, - {"1.100", Other}, - {"1.101", Other}, - {onePlusEpsilon, Other}, - {2, Other}, - {"0.7", Other}, - {"2.0", Other}, - } - runTests(t, "tr", tests) -} - -func TestUkrainian(t *testing.T) { - tests := []pluralTest{ - {0, Many}, - {1, One}, - {2, Few}, - {3, Few}, - {4, Few}, - {5, Many}, - {19, Many}, - {20, Many}, - {21, One}, - {11, Many}, - {52, Few}, - {101, One}, - {"0.1", Other}, - {"0.7", Other}, - {"1.5", Other}, - {"1.0", Other}, - {onePlusEpsilon, Other}, - {"2.0", Other}, - {"10.0", Other}, - } - runTests(t, "uk", tests) -} - -func appendIntTests(tests []pluralTest, from, to int, p Plural) []pluralTest { - for i := from; i <= to; i++ { - tests = append(tests, pluralTest{i, p}) - } - return tests -} - -func appendFloatTests(tests []pluralTest, from, to float64, p Plural) []pluralTest { - stride := 0.1 - format := "%.1f" - for f := from; f < to; f += stride { - tests = append(tests, pluralTest{fmt.Sprintf(format, f), p}) - } - tests = append(tests, pluralTest{fmt.Sprintf(format, to), p}) - return tests -} - -func runTests(t *testing.T, specID string, tests []pluralTest) { - spec := pluralSpecs[specID] - for _, test := range tests { - if plural, err := spec.Plural(test.num); plural != test.plural { - t.Errorf("%s: PluralCategory(%#v) returned %s, %v; expected %s", specID, test.num, plural, err, test.plural) - } - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation_test.go deleted file mode 100644 index ea7de7f..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation_test.go +++ /dev/null @@ -1,308 +0,0 @@ -package translation - -import ( - "reflect" - "testing" - - "github.com/nicksnyder/go-i18n/i18n/language" -) - -func mustTemplate(t *testing.T, src string) *template { - tmpl, err := newTemplate(src) - if err != nil { - t.Fatal(err) - } - return tmpl -} - -func pluralTranslationFixture(t *testing.T, id string, pluralCategories ...language.Plural) *pluralTranslation { - templates := make(map[language.Plural]*template, len(pluralCategories)) - for _, pc := range pluralCategories { - templates[pc] = mustTemplate(t, string(pc)) - } - return &pluralTranslation{id, templates} -} - -func verifyDeepEqual(t *testing.T, actual, expected interface{}) { - if !reflect.DeepEqual(actual, expected) { - t.Fatalf("\n%#v\nnot equal to expected value\n%#v", actual, expected) - } -} - -func TestPluralTranslationMerge(t *testing.T) { - pt := pluralTranslationFixture(t, "id", language.One, language.Other) - oneTemplate, otherTemplate := pt.templates[language.One], pt.templates[language.Other] - - pt.Merge(pluralTranslationFixture(t, "id")) - verifyDeepEqual(t, pt.templates, map[language.Plural]*template{ - language.One: oneTemplate, - language.Other: otherTemplate, - }) - - pt2 := pluralTranslationFixture(t, "id", language.One, language.Two) - pt.Merge(pt2) - verifyDeepEqual(t, pt.templates, map[language.Plural]*template{ - language.One: pt2.templates[language.One], - language.Two: pt2.templates[language.Two], - language.Other: otherTemplate, - }) -} - -/* Test implementations from old idea - -func TestCopy(t *testing.T) { - ls := &LocalizedString{ - ID: "id", - Translation: testingTemplate(t, "translation {{.Hello}}"), - Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, "plural {{.One}}"), - language.Other: testingTemplate(t, "plural {{.Other}}"), - }, - } - - c := ls.Copy() - delete(c.Translations, language.One) - if _, ok := ls.Translations[language.One]; !ok { - t.Errorf("deleting plural translation from copy deleted it from the original") - } - c.Translations[language.Two] = testingTemplate(t, "plural {{.Two}}") - if _, ok := ls.Translations[language.Two]; ok { - t.Errorf("adding plural translation to copy added it to the original") - } -} - -func TestNormalize(t *testing.T) { - oneTemplate := testingTemplate(t, "one {{.One}}") - ls := &LocalizedString{ - Translation: testingTemplate(t, "single {{.Single}}"), - Translations: map[language.Plural]*template{ - language.One: oneTemplate, - language.Two: testingTemplate(t, "two {{.Two}}"), - }, - } - ls.Normalize(LanguageWithCode("en")) - if ls.Translation != nil { - t.Errorf("ls.Translation is %#v; expected nil", ls.Translation) - } - if actual := ls.Translations[language.Two]; actual != nil { - t.Errorf("ls.Translation[language.Two] is %#v; expected nil", actual) - } - if actual := ls.Translations[language.One]; actual != oneTemplate { - t.Errorf("ls.Translations[language.One] is %#v; expected %#v", actual, oneTemplate) - } - if _, ok := ls.Translations[language.Other]; !ok { - t.Errorf("ls.Translations[language.Other] shouldn't be empty") - } -} - -func TestMergeTranslation(t *testing.T) { - ls := &LocalizedString{} - - translation := testingTemplate(t, "one {{.Hello}}") - ls.Merge(&LocalizedString{ - Translation: translation, - }) - if ls.Translation != translation { - t.Errorf("expected %#v; got %#v", translation, ls.Translation) - } - - ls.Merge(&LocalizedString{}) - if ls.Translation != translation { - t.Errorf("expected %#v; got %#v", translation, ls.Translation) - } - - translation = testingTemplate(t, "two {{.Hello}}") - ls.Merge(&LocalizedString{ - Translation: translation, - }) - if ls.Translation != translation { - t.Errorf("expected %#v; got %#v", translation, ls.Translation) - } -} - -func TestMergeTranslations(t *testing.T) { - ls := &LocalizedString{} - - oneTemplate := testingTemplate(t, "one {{.One}}") - otherTemplate := testingTemplate(t, "other {{.Other}}") - ls.Merge(&LocalizedString{ - Translations: map[language.Plural]*template{ - language.One: oneTemplate, - language.Other: otherTemplate, - }, - }) - if actual := ls.Translations[language.One]; actual != oneTemplate { - t.Errorf("ls.Translations[language.One] expected %#v; got %#v", oneTemplate, actual) - } - if actual := ls.Translations[language.Other]; actual != otherTemplate { - t.Errorf("ls.Translations[language.Other] expected %#v; got %#v", otherTemplate, actual) - } - - ls.Merge(&LocalizedString{ - Translations: map[language.Plural]*template{}, - }) - if actual := ls.Translations[language.One]; actual != oneTemplate { - t.Errorf("ls.Translations[language.One] expected %#v; got %#v", oneTemplate, actual) - } - if actual := ls.Translations[language.Other]; actual != otherTemplate { - t.Errorf("ls.Translations[language.Other] expected %#v; got %#v", otherTemplate, actual) - } - - twoTemplate := testingTemplate(t, "two {{.Two}}") - otherTemplate = testingTemplate(t, "second other {{.Other}}") - ls.Merge(&LocalizedString{ - Translations: map[language.Plural]*template{ - language.Two: twoTemplate, - language.Other: otherTemplate, - }, - }) - if actual := ls.Translations[language.One]; actual != oneTemplate { - t.Errorf("ls.Translations[language.One] expected %#v; got %#v", oneTemplate, actual) - } - if actual := ls.Translations[language.Two]; actual != twoTemplate { - t.Errorf("ls.Translations[language.Two] expected %#v; got %#v", twoTemplate, actual) - } - if actual := ls.Translations[language.Other]; actual != otherTemplate { - t.Errorf("ls.Translations[language.Other] expected %#v; got %#v", otherTemplate, actual) - } -} - -func TestMissingTranslations(t *testing.T) { - en := LanguageWithCode("en") - - tests := []struct { - localizedString *LocalizedString - language *Language - expected bool - }{ - { - &LocalizedString{}, - en, - true, - }, - { - &LocalizedString{Translation: testingTemplate(t, "single {{.Single}}")}, - en, - false, - }, - { - &LocalizedString{ - Translation: testingTemplate(t, "single {{.Single}}"), - Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, "one {{.One}}"), - }}, - en, - true, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, "one {{.One}}"), - }}, - en, - true, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: nil, - language.Other: nil, - }}, - en, - true, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, ""), - language.Other: testingTemplate(t, ""), - }}, - en, - true, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, "one {{.One}}"), - language.Other: testingTemplate(t, "other {{.Other}}"), - }}, - en, - false, - }, - } - - for _, tt := range tests { - if actual := tt.localizedString.MissingTranslations(tt.language); actual != tt.expected { - t.Errorf("expected %t got %t for %s, %#v", - tt.expected, actual, tt.language.code, tt.localizedString) - } - } -} - -func TestHasTranslations(t *testing.T) { - en := LanguageWithCode("en") - - tests := []struct { - localizedString *LocalizedString - language *Language - expected bool - }{ - { - &LocalizedString{}, - en, - false, - }, - { - &LocalizedString{Translation: testingTemplate(t, "single {{.Single}}")}, - en, - true, - }, - { - &LocalizedString{ - Translation: testingTemplate(t, "single {{.Single}}"), - Translations: map[language.Plural]*template{}}, - en, - false, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, "one {{.One}}"), - }}, - en, - true, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.Two: testingTemplate(t, "two {{.Two}}"), - }}, - en, - false, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: nil, - }}, - en, - false, - }, - { - &LocalizedString{Translations: map[language.Plural]*template{ - language.One: testingTemplate(t, ""), - }}, - en, - false, - }, - } - - for _, tt := range tests { - if actual := tt.localizedString.HasTranslations(tt.language); actual != tt.expected { - t.Errorf("expected %t got %t for %s, %#v", - tt.expected, actual, tt.language.code, tt.localizedString) - } - } -} - -func testingTemplate(t *testing.T, src string) *template { - tmpl, err := newTemplate(src) - if err != nil { - t.Fatal(err) - } - return tmpl -} -*/ diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/template_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/template_test.go deleted file mode 100644 index 73a9234..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/template_test.go +++ /dev/null @@ -1,146 +0,0 @@ -package translation - -import ( - "bytes" - "fmt" - //"launchpad.net/goyaml" - "testing" - gotemplate "text/template" -) - -func TestNilTemplate(t *testing.T) { - expected := "hello" - tmpl := &template{ - tmpl: nil, - src: expected, - } - if actual := tmpl.Execute(nil); actual != expected { - t.Errorf("Execute(nil) returned %s; expected %s", actual, expected) - } -} - -func TestMarshalText(t *testing.T) { - tmpl := &template{ - tmpl: gotemplate.Must(gotemplate.New("id").Parse("this is a {{.foo}} template")), - src: "boom", - } - expectedBuf := []byte(tmpl.src) - if buf, err := tmpl.MarshalText(); !bytes.Equal(buf, expectedBuf) || err != nil { - t.Errorf("MarshalText() returned %#v, %#v; expected %#v, nil", buf, err, expectedBuf) - } -} - -func TestUnmarshalText(t *testing.T) { - tmpl := &template{} - tmpl.UnmarshalText([]byte("hello {{.World}}")) - result := tmpl.Execute(map[string]string{ - "World": "world!", - }) - expected := "hello world!" - if result != expected { - t.Errorf("expected %#v; got %#v", expected, result) - } -} - -/* -func TestYAMLMarshal(t *testing.T) { - src := "hello {{.World}}" - tmpl, err := newTemplate(src) - if err != nil { - t.Fatal(err) - } - buf, err := goyaml.Marshal(tmpl) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf, []byte(src)) { - t.Fatalf(`expected "%s"; got "%s"`, src, buf) - } -} - -func TestYAMLUnmarshal(t *testing.T) { - buf := []byte(`Tmpl: "hello"`) - - var out struct { - Tmpl *template - } - var foo map[string]string - if err := goyaml.Unmarshal(buf, &foo); err != nil { - t.Fatal(err) - } - if out.Tmpl == nil { - t.Fatalf("out.Tmpl was nil") - } - if out.Tmpl.tmpl == nil { - t.Fatalf("out.Tmpl.tmpl was nil") - } - if expected := "hello {{.World}}"; out.Tmpl.src != expected { - t.Fatalf("expected %s; got %s", expected, out.Tmpl.src) - } -} - -func TestGetYAML(t *testing.T) { - src := "hello" - tmpl := &template{ - tmpl: nil, - src: src, - } - if tag, value := tmpl.GetYAML(); tag != "" || value != src { - t.Errorf("GetYAML() returned (%#v, %#v); expected (%#v, %#v)", tag, value, "", src) - } -} - -func TestSetYAML(t *testing.T) { - tmpl := &template{} - tmpl.SetYAML("tagDoesntMatter", "hello {{.World}}") - result := tmpl.Execute(map[string]string{ - "World": "world!", - }) - expected := "hello world!" - if result != expected { - t.Errorf("expected %#v; got %#v", expected, result) - } -} -*/ - -func BenchmarkExecuteNilTemplate(b *testing.B) { - template := &template{src: "hello world"} - b.ResetTimer() - for i := 0; i < b.N; i++ { - template.Execute(nil) - } -} - -func BenchmarkExecuteHelloWorldTemplate(b *testing.B) { - template, err := newTemplate("hello world") - if err != nil { - b.Fatal(err) - } - b.ResetTimer() - for i := 0; i < b.N; i++ { - template.Execute(nil) - } -} - -// Executing a simple template like this is ~6x slower than Sprintf -// but it is still only a few microseconds which should be sufficiently fast. -// The benefit is that we have nice semantic tags in the translation. -func BenchmarkExecuteHelloNameTemplate(b *testing.B) { - template, err := newTemplate("hello {{.Name}}") - if err != nil { - b.Fatal(err) - } - b.ResetTimer() - for i := 0; i < b.N; i++ { - template.Execute(map[string]string{ - "Name": "Nick", - }) - } -} - -func BenchmarkSprintf(b *testing.B) { - b.ResetTimer() - for i := 0; i < b.N; i++ { - fmt.Sprintf("hello %s", "nick") - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/translation.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/translation.go deleted file mode 100644 index d5d70d5..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/translation.go +++ /dev/null @@ -1,70 +0,0 @@ -// Package translation defines the interface for a translation. -package translation - -import ( - "fmt" - - "github.com/nicksnyder/go-i18n/i18n/language" -) - -// Translation is the interface that represents a translated string. -type Translation interface { - // MarshalInterface returns the object that should be used - // to serialize the translation. - MarshalInterface() interface{} - ID() string - Template(language.Plural) *template - UntranslatedCopy() Translation - Normalize(language *language.Language) Translation - Backfill(src Translation) Translation - Merge(Translation) Translation - Incomplete(l *language.Language) bool -} - -// SortableByID implements sort.Interface for a slice of translations. -type SortableByID []Translation - -func (a SortableByID) Len() int { return len(a) } -func (a SortableByID) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a SortableByID) Less(i, j int) bool { return a[i].ID() < a[j].ID() } - -// NewTranslation reflects on data to create a new Translation. -// -// data["id"] must be a string and data["translation"] must be either a string -// for a non-plural translation or a map[string]interface{} for a plural translation. -func NewTranslation(data map[string]interface{}) (Translation, error) { - id, ok := data["id"].(string) - if !ok { - return nil, fmt.Errorf(`missing "id" key`) - } - switch translation := data["translation"].(type) { - case string: - tmpl, err := newTemplate(translation) - if err != nil { - return nil, err - } - return &singleTranslation{id, tmpl}, nil - case map[string]interface{}: - templates := make(map[language.Plural]*template, len(translation)) - for k, v := range translation { - pc, err := language.NewPlural(k) - if err != nil { - return nil, err - } - str, ok := v.(string) - if !ok { - return nil, fmt.Errorf(`plural category "%s" has value of type %T; expected string`, pc, v) - } - tmpl, err := newTemplate(str) - if err != nil { - return nil, err - } - templates[pc] = tmpl - } - return &pluralTranslation{id, templates}, nil - case nil: - return nil, fmt.Errorf(`missing "translation" key`) - default: - return nil, fmt.Errorf(`unsupported type for "translation" key %T`, translation) - } -} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/translation_test.go b/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/translation_test.go deleted file mode 100644 index 7380d5a..0000000 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/translation_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package translation - -import ( - "sort" - "testing" -) - -// Check this here to avoid unnecessary import of sort package. -var _ = sort.Interface(make(SortableByID, 0, 0)) - -func TestNewSingleTranslation(t *testing.T) { - t.Skipf("not implemented") -} - -func TestNewPluralTranslation(t *testing.T) { - t.Skipf("not implemented") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/.travis.yml b/Godeps/_workspace/src/github.com/onsi/ginkgo/.travis.yml deleted file mode 100644 index 44018ac..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: go -go: - - 1.3 - - 1.4 - - tip - -install: - - go get -v ./... - - go get golang.org/x/tools/cmd/cover - - go get github.com/onsi/gomega - - go install github.com/onsi/ginkgo/ginkgo - - export PATH=$PATH:$HOME/gopath/bin - -script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --failOnPending --randomizeSuites --race diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/CHANGELOG.md b/Godeps/_workspace/src/github.com/onsi/ginkgo/CHANGELOG.md deleted file mode 100644 index ccba8ab..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/CHANGELOG.md +++ /dev/null @@ -1,135 +0,0 @@ -## HEAD - -Improvements: - -- `Skip(message)` can be used to skip the current test. - -Bug Fixes: - -- Ginkgo tests now fail when you `panic(nil)` (#167) - -## 1.2.0 5/31/2015 - -Improvements - -- `ginkgo -coverpkg` calls down to `go test -coverpkg` (#160) -- `ginkgo -afterSuiteHook COMMAND` invokes the passed-in `COMMAND` after a test suite completes (#152) -- Relaxed requirement for Go 1.4+. `ginkgo` now works with Go v1.3+ (#166) - -## 1.2.0-beta - -Ginkgo now requires Go 1.4+ - -Improvements: - -- Call reporters in reverse order when announcing spec completion -- allows custom reporters to emit output before the default reporter does. -- Improved focus behavior. Now, this: - - ```golang - FDescribe("Some describe", func() { - It("A", func() {}) - - FIt("B", func() {}) - }) - ``` - - will run `B` but *not* `A`. This tends to be a common usage pattern when in the thick of writing and debugging tests. -- When `SIGINT` is received, Ginkgo will emit the contents of the `GinkgoWriter` before running the `AfterSuite`. Useful for debugging stuck tests. -- When `--progress` is set, Ginkgo will write test progress (in particular, Ginkgo will say when it is about to run a BeforeEach, AfterEach, It, etc...) to the `GinkgoWriter`. This is useful for debugging stuck tests and tests that generate many logs. -- Improved output when an error occurs in a setup or teardown block. -- When `--dryRun` is set, Ginkgo will walk the spec tree and emit to its reporter *without* actually running anything. Best paired with `-v` to understand which specs will run in which order. -- Add `By` to help document long `It`s. `By` simply writes to the `GinkgoWriter`. -- Add support for precompiled tests: - - `ginkgo build ` will now compile the package, producing a file named `package.test` - - The compiled `package.test` file can be run directly. This runs the tests in series. - - To run precompiled tests in parallel, you can run: `ginkgo -p package.test` -- Support `bootstrap`ping and `generate`ing [Agouti](http://agouti.org) specs. -- `ginkgo generate` and `ginkgo bootstrap` now honor the package name already defined in a given directory -- The `ginkgo` CLI ignores `SIGQUIT`. Prevents its stack dump from interlacing with the underlying test suite's stack dump. -- The `ginkgo` CLI now compiles tests into a temporary directory instead of the package directory. This necessitates upgrading to Go v1.4+. -- `ginkgo -notify` now works on Linux - -Bug Fixes: - -- If --skipPackages is used and all packages are skipped, Ginkgo should exit 0. -- Fix tempfile leak when running in parallel -- Fix incorrect failure message when a panic occurs during a parallel test run -- Fixed an issue where a pending test within a focused context (or a focused test within a pending context) would skip all other tests. -- Be more consistent about handling SIGTERM as well as SIGINT -- When interupted while concurrently compiling test suites in the background, Ginkgo now cleans up the compiled artifacts. -- Fixed a long standing bug where `ginkgo -p` would hang if a process spawned by one of the Ginkgo parallel nodes does not exit. (Hooray!) - -## 1.1.0 (8/2/2014) - -No changes, just dropping the beta. - -## 1.1.0-beta (7/22/2014) -New Features: - -- `ginkgo watch` now monitors packages *and their dependencies* for changes. The depth of the dependency tree can be modified with the `-depth` flag. -- Test suites with a programmatic focus (`FIt`, `FDescribe`, etc...) exit with non-zero status code, evne when they pass. This allows CI systems to detect accidental commits of focused test suites. -- `ginkgo -p` runs the testsuite in parallel with an auto-detected number of nodes. -- `ginkgo -tags=TAG_LIST` passes a list of tags down to the `go build` command. -- `ginkgo --failFast` aborts the test suite after the first failure. -- `ginkgo generate file_1 file_2` can take multiple file arguments. -- Ginkgo now summarizes any spec failures that occured at the end of the test run. -- `ginkgo --randomizeSuites` will run tests *suites* in random order using the generated/passed-in seed. - -Improvements: - -- `ginkgo -skipPackage` now takes a comma-separated list of strings. If the *relative path* to a package matches one of the entries in the comma-separated list, that package is skipped. -- `ginkgo --untilItFails` no longer recompiles between attempts. -- Ginkgo now panics when a runnable node (`It`, `BeforeEach`, `JustBeforeEach`, `AfterEach`, `Measure`) is nested within another runnable node. This is always a mistake. Any test suites that panic because of this change should be fixed. - -Bug Fixes: - -- `ginkgo boostrap` and `ginkgo generate` no longer fail when dealing with `hyphen-separated-packages`. -- parallel specs are now better distributed across nodes - fixed a crashing bug where (for example) distributing 11 tests across 7 nodes would panic - -## 1.0.0 (5/24/2014) -New Features: - -- Add `GinkgoParallelNode()` - shorthand for `config.GinkgoConfig.ParallelNode` - -Improvements: - -- When compilation fails, the compilation output is rewritten to present a correct *relative* path. Allows ⌘-clicking in iTerm open the file in your text editor. -- `--untilItFails` and `ginkgo watch` now generate new random seeds between test runs, unless a particular random seed is specified. - -Bug Fixes: - -- `-cover` now generates a correctly combined coverprofile when running with in parallel with multiple `-node`s. -- Print out the contents of the `GinkgoWriter` when `BeforeSuite` or `AfterSuite` fail. -- Fix all remaining race conditions in Ginkgo's test suite. - -## 1.0.0-beta (4/14/2014) -Breaking changes: - -- `thirdparty/gomocktestreporter` is gone. Use `GinkgoT()` instead -- Modified the Reporter interface -- `watch` is now a subcommand, not a flag. - -DSL changes: - -- `BeforeSuite` and `AfterSuite` for setting up and tearing down test suites. -- `AfterSuite` is triggered on interrupt (`^C`) as well as exit. -- `SynchronizedBeforeSuite` and `SynchronizedAfterSuite` for setting up and tearing down singleton resources across parallel nodes. - -CLI changes: - -- `watch` is now a subcommand, not a flag -- `--nodot` flag can be passed to `ginkgo generate` and `ginkgo bootstrap` to avoid dot imports. This explicitly imports all exported identifiers in Ginkgo and Gomega. Refreshing this list can be done by running `ginkgo nodot` -- Additional arguments can be passed to specs. Pass them after the `--` separator -- `--skipPackage` flag takes a regexp and ignores any packages with package names passing said regexp. -- `--trace` flag prints out full stack traces when errors occur, not just the line at which the error occurs. - -Misc: - -- Start using semantic versioning -- Start maintaining changelog - -Major refactor: - -- Pull out Ginkgo's internal to `internal` -- Rename `example` everywhere to `spec` -- Much more! diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/config/config.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/config/config.go deleted file mode 100644 index 46ce16a..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/config/config.go +++ /dev/null @@ -1,170 +0,0 @@ -/* -Ginkgo accepts a number of configuration options. - -These are documented [here](http://onsi.github.io/ginkgo/#the_ginkgo_cli) - -You can also learn more via - - ginkgo help - -or (I kid you not): - - go test -asdf -*/ -package config - -import ( - "flag" - "time" - - "fmt" -) - -const VERSION = "1.2.0" - -type GinkgoConfigType struct { - RandomSeed int64 - RandomizeAllSpecs bool - FocusString string - SkipString string - SkipMeasurements bool - FailOnPending bool - FailFast bool - EmitSpecProgress bool - DryRun bool - - ParallelNode int - ParallelTotal int - SyncHost string - StreamHost string -} - -var GinkgoConfig = GinkgoConfigType{} - -type DefaultReporterConfigType struct { - NoColor bool - SlowSpecThreshold float64 - NoisyPendings bool - Succinct bool - Verbose bool - FullTrace bool -} - -var DefaultReporterConfig = DefaultReporterConfigType{} - -func processPrefix(prefix string) string { - if prefix != "" { - prefix = prefix + "." - } - return prefix -} - -func Flags(flagSet *flag.FlagSet, prefix string, includeParallelFlags bool) { - prefix = processPrefix(prefix) - flagSet.Int64Var(&(GinkgoConfig.RandomSeed), prefix+"seed", time.Now().Unix(), "The seed used to randomize the spec suite.") - flagSet.BoolVar(&(GinkgoConfig.RandomizeAllSpecs), prefix+"randomizeAllSpecs", false, "If set, ginkgo will randomize all specs together. By default, ginkgo only randomizes the top level Describe/Context groups.") - flagSet.BoolVar(&(GinkgoConfig.SkipMeasurements), prefix+"skipMeasurements", false, "If set, ginkgo will skip any measurement specs.") - flagSet.BoolVar(&(GinkgoConfig.FailOnPending), prefix+"failOnPending", false, "If set, ginkgo will mark the test suite as failed if any specs are pending.") - flagSet.BoolVar(&(GinkgoConfig.FailFast), prefix+"failFast", false, "If set, ginkgo will stop running a test suite after a failure occurs.") - flagSet.BoolVar(&(GinkgoConfig.DryRun), prefix+"dryRun", false, "If set, ginkgo will walk the test hierarchy without actually running anything. Best paired with -v.") - flagSet.StringVar(&(GinkgoConfig.FocusString), prefix+"focus", "", "If set, ginkgo will only run specs that match this regular expression.") - flagSet.StringVar(&(GinkgoConfig.SkipString), prefix+"skip", "", "If set, ginkgo will only run specs that do not match this regular expression.") - flagSet.BoolVar(&(GinkgoConfig.EmitSpecProgress), prefix+"progress", false, "If set, ginkgo will emit progress information as each spec runs to the GinkgoWriter.") - - if includeParallelFlags { - flagSet.IntVar(&(GinkgoConfig.ParallelNode), prefix+"parallel.node", 1, "This worker node's (one-indexed) node number. For running specs in parallel.") - flagSet.IntVar(&(GinkgoConfig.ParallelTotal), prefix+"parallel.total", 1, "The total number of worker nodes. For running specs in parallel.") - flagSet.StringVar(&(GinkgoConfig.SyncHost), prefix+"parallel.synchost", "", "The address for the server that will synchronize the running nodes.") - flagSet.StringVar(&(GinkgoConfig.StreamHost), prefix+"parallel.streamhost", "", "The address for the server that the running nodes should stream data to.") - } - - flagSet.BoolVar(&(DefaultReporterConfig.NoColor), prefix+"noColor", false, "If set, suppress color output in default reporter.") - flagSet.Float64Var(&(DefaultReporterConfig.SlowSpecThreshold), prefix+"slowSpecThreshold", 5.0, "(in seconds) Specs that take longer to run than this threshold are flagged as slow by the default reporter (default: 5 seconds).") - flagSet.BoolVar(&(DefaultReporterConfig.NoisyPendings), prefix+"noisyPendings", true, "If set, default reporter will shout about pending tests.") - flagSet.BoolVar(&(DefaultReporterConfig.Verbose), prefix+"v", false, "If set, default reporter print out all specs as they begin.") - flagSet.BoolVar(&(DefaultReporterConfig.Succinct), prefix+"succinct", false, "If set, default reporter prints out a very succinct report") - flagSet.BoolVar(&(DefaultReporterConfig.FullTrace), prefix+"trace", false, "If set, default reporter prints out the full stack trace when a failure occurs") -} - -func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultReporterConfigType) []string { - prefix = processPrefix(prefix) - result := make([]string, 0) - - if ginkgo.RandomSeed > 0 { - result = append(result, fmt.Sprintf("--%sseed=%d", prefix, ginkgo.RandomSeed)) - } - - if ginkgo.RandomizeAllSpecs { - result = append(result, fmt.Sprintf("--%srandomizeAllSpecs", prefix)) - } - - if ginkgo.SkipMeasurements { - result = append(result, fmt.Sprintf("--%sskipMeasurements", prefix)) - } - - if ginkgo.FailOnPending { - result = append(result, fmt.Sprintf("--%sfailOnPending", prefix)) - } - - if ginkgo.FailFast { - result = append(result, fmt.Sprintf("--%sfailFast", prefix)) - } - - if ginkgo.DryRun { - result = append(result, fmt.Sprintf("--%sdryRun", prefix)) - } - - if ginkgo.FocusString != "" { - result = append(result, fmt.Sprintf("--%sfocus=%s", prefix, ginkgo.FocusString)) - } - - if ginkgo.SkipString != "" { - result = append(result, fmt.Sprintf("--%sskip=%s", prefix, ginkgo.SkipString)) - } - - if ginkgo.EmitSpecProgress { - result = append(result, fmt.Sprintf("--%sprogress", prefix)) - } - - if ginkgo.ParallelNode != 0 { - result = append(result, fmt.Sprintf("--%sparallel.node=%d", prefix, ginkgo.ParallelNode)) - } - - if ginkgo.ParallelTotal != 0 { - result = append(result, fmt.Sprintf("--%sparallel.total=%d", prefix, ginkgo.ParallelTotal)) - } - - if ginkgo.StreamHost != "" { - result = append(result, fmt.Sprintf("--%sparallel.streamhost=%s", prefix, ginkgo.StreamHost)) - } - - if ginkgo.SyncHost != "" { - result = append(result, fmt.Sprintf("--%sparallel.synchost=%s", prefix, ginkgo.SyncHost)) - } - - if reporter.NoColor { - result = append(result, fmt.Sprintf("--%snoColor", prefix)) - } - - if reporter.SlowSpecThreshold > 0 { - result = append(result, fmt.Sprintf("--%sslowSpecThreshold=%.5f", prefix, reporter.SlowSpecThreshold)) - } - - if !reporter.NoisyPendings { - result = append(result, fmt.Sprintf("--%snoisyPendings=false", prefix)) - } - - if reporter.Verbose { - result = append(result, fmt.Sprintf("--%sv", prefix)) - } - - if reporter.Succinct { - result = append(result, fmt.Sprintf("--%ssuccinct", prefix)) - } - - if reporter.FullTrace { - result = append(result, fmt.Sprintf("--%strace", prefix)) - } - - return result -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go deleted file mode 100644 index d804fe0..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go +++ /dev/null @@ -1,182 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "os" - "path/filepath" - "strings" - "text/template" - - "go/build" - - "github.com/onsi/ginkgo/ginkgo/nodot" -) - -func BuildBootstrapCommand() *Command { - var agouti, noDot bool - flagSet := flag.NewFlagSet("bootstrap", flag.ExitOnError) - flagSet.BoolVar(&agouti, "agouti", false, "If set, bootstrap will generate a bootstrap file for writing Agouti tests") - flagSet.BoolVar(&noDot, "nodot", false, "If set, bootstrap will generate a bootstrap file that does not . import ginkgo and gomega") - - return &Command{ - Name: "bootstrap", - FlagSet: flagSet, - UsageCommand: "ginkgo bootstrap ", - Usage: []string{ - "Bootstrap a test suite for the current package", - "Accepts the following flags:", - }, - Command: func(args []string, additionalArgs []string) { - generateBootstrap(agouti, noDot) - }, - } -} - -var bootstrapText = `package {{.Package}}_test - -import ( - {{.GinkgoImport}} - {{.GomegaImport}} - - "testing" -) - -func Test{{.FormattedName}}(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "{{.FormattedName}} Suite") -} -` - -var agoutiBootstrapText = `package {{.Package}}_test - -import ( - {{.GinkgoImport}} - {{.GomegaImport}} - "github.com/sclevine/agouti" - - "testing" -) - -func Test{{.FormattedName}}(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "{{.FormattedName}} Suite") -} - -var agoutiDriver *agouti.WebDriver - -var _ = BeforeSuite(func() { - // Choose a WebDriver: - - agoutiDriver = agouti.PhantomJS() - // agoutiDriver = agouti.Selenium() - // agoutiDriver = agouti.ChromeDriver() - - Expect(agoutiDriver.Start()).To(Succeed()) -}) - -var _ = AfterSuite(func() { - Expect(agoutiDriver.Stop()).To(Succeed()) -}) -` - -type bootstrapData struct { - Package string - FormattedName string - GinkgoImport string - GomegaImport string -} - -func getPackageAndFormattedName() (string, string, string) { - path, err := os.Getwd() - if err != nil { - complainAndQuit("Could not get current working directory: \n" + err.Error()) - } - - dirName := strings.Replace(filepath.Base(path), "-", "_", -1) - dirName = strings.Replace(dirName, " ", "_", -1) - - pkg, err := build.ImportDir(path, 0) - packageName := pkg.Name - if err != nil { - packageName = dirName - } - - formattedName := prettifyPackageName(filepath.Base(path)) - return packageName, dirName, formattedName -} - -func prettifyPackageName(name string) string { - name = strings.Replace(name, "-", " ", -1) - name = strings.Replace(name, "_", " ", -1) - name = strings.Title(name) - name = strings.Replace(name, " ", "", -1) - return name -} - -func fileExists(path string) bool { - _, err := os.Stat(path) - if err == nil { - return true - } - return false -} - -func generateBootstrap(agouti bool, noDot bool) { - packageName, bootstrapFilePrefix, formattedName := getPackageAndFormattedName() - data := bootstrapData{ - Package: packageName, - FormattedName: formattedName, - GinkgoImport: `. "github.com/onsi/ginkgo"`, - GomegaImport: `. "github.com/onsi/gomega"`, - } - - if noDot { - data.GinkgoImport = `"github.com/onsi/ginkgo"` - data.GomegaImport = `"github.com/onsi/gomega"` - } - - targetFile := fmt.Sprintf("%s_suite_test.go", bootstrapFilePrefix) - if fileExists(targetFile) { - fmt.Printf("%s already exists.\n\n", targetFile) - os.Exit(1) - } else { - fmt.Printf("Generating ginkgo test suite bootstrap for %s in:\n\t%s\n", packageName, targetFile) - } - - f, err := os.Create(targetFile) - if err != nil { - complainAndQuit("Could not create file: " + err.Error()) - panic(err.Error()) - } - defer f.Close() - - var templateText string - if agouti { - templateText = agoutiBootstrapText - } else { - templateText = bootstrapText - } - - bootstrapTemplate, err := template.New("bootstrap").Parse(templateText) - if err != nil { - panic(err.Error()) - } - - buf := &bytes.Buffer{} - bootstrapTemplate.Execute(buf, data) - - if noDot { - contents, err := nodot.ApplyNoDot(buf.Bytes()) - if err != nil { - complainAndQuit("Failed to import nodot declarations: " + err.Error()) - } - fmt.Println("To update the nodot declarations in the future, switch to this directory and run:\n\tginkgo nodot") - buf = bytes.NewBuffer(contents) - } - - buf.WriteTo(f) - - goFmt(targetFile) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/build_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/build_command.go deleted file mode 100644 index bbba8a1..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/build_command.go +++ /dev/null @@ -1,68 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - "path/filepath" - - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" -) - -func BuildBuildCommand() *Command { - commandFlags := NewBuildCommandFlags(flag.NewFlagSet("build", flag.ExitOnError)) - interruptHandler := interrupthandler.NewInterruptHandler() - builder := &SpecBuilder{ - commandFlags: commandFlags, - interruptHandler: interruptHandler, - } - - return &Command{ - Name: "build", - FlagSet: commandFlags.FlagSet, - UsageCommand: "ginkgo build ", - Usage: []string{ - "Build the passed in (or the package in the current directory if left blank).", - "Accepts the following flags:", - }, - Command: builder.BuildSpecs, - } -} - -type SpecBuilder struct { - commandFlags *RunWatchAndBuildCommandFlags - interruptHandler *interrupthandler.InterruptHandler -} - -func (r *SpecBuilder) BuildSpecs(args []string, additionalArgs []string) { - r.commandFlags.computeNodes() - - suites, _ := findSuites(args, r.commandFlags.Recurse, r.commandFlags.SkipPackage, false) - - if len(suites) == 0 { - complainAndQuit("Found no test suites") - } - - passed := true - for _, suite := range suites { - runner := testrunner.New(suite, 1, false, r.commandFlags.Race, r.commandFlags.Cover, r.commandFlags.CoverPkg, r.commandFlags.Tags, nil) - fmt.Printf("Compiling %s...\n", suite.PackageName) - - path, _ := filepath.Abs(filepath.Join(suite.Path, fmt.Sprintf("%s.test", suite.PackageName))) - err := runner.CompileTo(path) - if err != nil { - fmt.Println(err.Error()) - passed = false - } else { - fmt.Printf(" compiled %s.test\n", suite.PackageName) - } - - runner.CleanUp() - } - - if passed { - os.Exit(0) - } - os.Exit(1) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go deleted file mode 100644 index 02e2b3b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go +++ /dev/null @@ -1,123 +0,0 @@ -package convert - -import ( - "fmt" - "go/ast" - "strings" - "unicode" -) - -/* - * Creates a func init() node - */ -func createVarUnderscoreBlock() *ast.ValueSpec { - valueSpec := &ast.ValueSpec{} - object := &ast.Object{Kind: 4, Name: "_", Decl: valueSpec, Data: 0} - ident := &ast.Ident{Name: "_", Obj: object} - valueSpec.Names = append(valueSpec.Names, ident) - return valueSpec -} - -/* - * Creates a Describe("Testing with ginkgo", func() { }) node - */ -func createDescribeBlock() *ast.CallExpr { - blockStatement := &ast.BlockStmt{List: []ast.Stmt{}} - - fieldList := &ast.FieldList{} - funcType := &ast.FuncType{Params: fieldList} - funcLit := &ast.FuncLit{Type: funcType, Body: blockStatement} - basicLit := &ast.BasicLit{Kind: 9, Value: "\"Testing with Ginkgo\""} - describeIdent := &ast.Ident{Name: "Describe"} - return &ast.CallExpr{Fun: describeIdent, Args: []ast.Expr{basicLit, funcLit}} -} - -/* - * Convenience function to return the name of the *testing.T param - * for a Test function that will be rewritten. This is useful because - * we will want to replace the usage of this named *testing.T inside the - * body of the function with a GinktoT. - */ -func namedTestingTArg(node *ast.FuncDecl) string { - return node.Type.Params.List[0].Names[0].Name // *exhale* -} - -/* - * Convenience function to return the block statement node for a Describe statement - */ -func blockStatementFromDescribe(desc *ast.CallExpr) *ast.BlockStmt { - var funcLit *ast.FuncLit - var found = false - - for _, node := range desc.Args { - switch node := node.(type) { - case *ast.FuncLit: - found = true - funcLit = node - break - } - } - - if !found { - panic("Error finding ast.FuncLit inside describe statement. Somebody done goofed.") - } - - return funcLit.Body -} - -/* convenience function for creating an It("TestNameHere") - * with all the body of the test function inside the anonymous - * func passed to It() - */ -func createItStatementForTestFunc(testFunc *ast.FuncDecl) *ast.ExprStmt { - blockStatement := &ast.BlockStmt{List: testFunc.Body.List} - fieldList := &ast.FieldList{} - funcType := &ast.FuncType{Params: fieldList} - funcLit := &ast.FuncLit{Type: funcType, Body: blockStatement} - - testName := rewriteTestName(testFunc.Name.Name) - basicLit := &ast.BasicLit{Kind: 9, Value: fmt.Sprintf("\"%s\"", testName)} - itBlockIdent := &ast.Ident{Name: "It"} - callExpr := &ast.CallExpr{Fun: itBlockIdent, Args: []ast.Expr{basicLit, funcLit}} - return &ast.ExprStmt{X: callExpr} -} - -/* -* rewrite test names to be human readable -* eg: rewrites "TestSomethingAmazing" as "something amazing" - */ -func rewriteTestName(testName string) string { - nameComponents := []string{} - currentString := "" - indexOfTest := strings.Index(testName, "Test") - if indexOfTest != 0 { - return testName - } - - testName = strings.Replace(testName, "Test", "", 1) - first, rest := testName[0], testName[1:] - testName = string(unicode.ToLower(rune(first))) + rest - - for _, rune := range testName { - if unicode.IsUpper(rune) { - nameComponents = append(nameComponents, currentString) - currentString = string(unicode.ToLower(rune)) - } else { - currentString += string(rune) - } - } - - return strings.Join(append(nameComponents, currentString), " ") -} - -func newGinkgoTFromIdent(ident *ast.Ident) *ast.CallExpr { - return &ast.CallExpr{ - Lparen: ident.NamePos + 1, - Rparen: ident.NamePos + 2, - Fun: &ast.Ident{Name: "GinkgoT"}, - } -} - -func newGinkgoTInterface() *ast.Ident { - return &ast.Ident{Name: "GinkgoTInterface"} -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/import.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/import.go deleted file mode 100644 index e226196..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/import.go +++ /dev/null @@ -1,91 +0,0 @@ -package convert - -import ( - "errors" - "fmt" - "go/ast" -) - -/* - * Given the root node of an AST, returns the node containing the - * import statements for the file. - */ -func importsForRootNode(rootNode *ast.File) (imports *ast.GenDecl, err error) { - for _, declaration := range rootNode.Decls { - decl, ok := declaration.(*ast.GenDecl) - if !ok || len(decl.Specs) == 0 { - continue - } - - _, ok = decl.Specs[0].(*ast.ImportSpec) - if ok { - imports = decl - return - } - } - - err = errors.New(fmt.Sprintf("Could not find imports for root node:\n\t%#v\n", rootNode)) - return -} - -/* - * Removes "testing" import, if present - */ -func removeTestingImport(rootNode *ast.File) { - importDecl, err := importsForRootNode(rootNode) - if err != nil { - panic(err.Error()) - } - - var index int - for i, importSpec := range importDecl.Specs { - importSpec := importSpec.(*ast.ImportSpec) - if importSpec.Path.Value == "\"testing\"" { - index = i - break - } - } - - importDecl.Specs = append(importDecl.Specs[:index], importDecl.Specs[index+1:]...) -} - -/* - * Adds import statements for onsi/ginkgo, if missing - */ -func addGinkgoImports(rootNode *ast.File) { - importDecl, err := importsForRootNode(rootNode) - if err != nil { - panic(err.Error()) - } - - if len(importDecl.Specs) == 0 { - // TODO: might need to create a import decl here - panic("unimplemented : expected to find an imports block") - } - - needsGinkgo := true - for _, importSpec := range importDecl.Specs { - importSpec, ok := importSpec.(*ast.ImportSpec) - if !ok { - continue - } - - if importSpec.Path.Value == "\"github.com/onsi/ginkgo\"" { - needsGinkgo = false - } - } - - if needsGinkgo { - importDecl.Specs = append(importDecl.Specs, createImport(".", "\"github.com/onsi/ginkgo\"")) - } -} - -/* - * convenience function to create an import statement - */ -func createImport(name, path string) *ast.ImportSpec { - return &ast.ImportSpec{ - Name: &ast.Ident{Name: name}, - Path: &ast.BasicLit{Kind: 9, Value: path}, - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go deleted file mode 100644 index ed09c46..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go +++ /dev/null @@ -1,127 +0,0 @@ -package convert - -import ( - "fmt" - "go/build" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "regexp" -) - -/* - * RewritePackage takes a name (eg: my-package/tools), finds its test files using - * Go's build package, and then rewrites them. A ginkgo test suite file will - * also be added for this package, and all of its child packages. - */ -func RewritePackage(packageName string) { - pkg, err := packageWithName(packageName) - if err != nil { - panic(fmt.Sprintf("unexpected error reading package: '%s'\n%s\n", packageName, err.Error())) - } - - for _, filename := range findTestsInPackage(pkg) { - rewriteTestsInFile(filename) - } - return -} - -/* - * Given a package, findTestsInPackage reads the test files in the directory, - * and then recurses on each child package, returning a slice of all test files - * found in this process. - */ -func findTestsInPackage(pkg *build.Package) (testfiles []string) { - for _, file := range append(pkg.TestGoFiles, pkg.XTestGoFiles...) { - testfiles = append(testfiles, filepath.Join(pkg.Dir, file)) - } - - dirFiles, err := ioutil.ReadDir(pkg.Dir) - if err != nil { - panic(fmt.Sprintf("unexpected error reading dir: '%s'\n%s\n", pkg.Dir, err.Error())) - } - - re := regexp.MustCompile(`^[._]`) - - for _, file := range dirFiles { - if !file.IsDir() { - continue - } - - if re.Match([]byte(file.Name())) { - continue - } - - packageName := filepath.Join(pkg.ImportPath, file.Name()) - subPackage, err := packageWithName(packageName) - if err != nil { - panic(fmt.Sprintf("unexpected error reading package: '%s'\n%s\n", packageName, err.Error())) - } - - testfiles = append(testfiles, findTestsInPackage(subPackage)...) - } - - addGinkgoSuiteForPackage(pkg) - goFmtPackage(pkg) - return -} - -/* - * Shells out to `ginkgo bootstrap` to create a test suite file - */ -func addGinkgoSuiteForPackage(pkg *build.Package) { - originalDir, err := os.Getwd() - if err != nil { - panic(err) - } - - suite_test_file := filepath.Join(pkg.Dir, pkg.Name+"_suite_test.go") - - _, err = os.Stat(suite_test_file) - if err == nil { - return // test file already exists, this should be a no-op - } - - err = os.Chdir(pkg.Dir) - if err != nil { - panic(err) - } - - output, err := exec.Command("ginkgo", "bootstrap").Output() - - if err != nil { - panic(fmt.Sprintf("error running 'ginkgo bootstrap'.\nstdout: %s\n%s\n", output, err.Error())) - } - - err = os.Chdir(originalDir) - if err != nil { - panic(err) - } -} - -/* - * Shells out to `go fmt` to format the package - */ -func goFmtPackage(pkg *build.Package) { - output, err := exec.Command("go", "fmt", pkg.ImportPath).Output() - - if err != nil { - fmt.Printf("Warning: Error running 'go fmt %s'.\nstdout: %s\n%s\n", pkg.ImportPath, output, err.Error()) - } -} - -/* - * Attempts to return a package with its test files already read. - * The ImportMode arg to build.Import lets you specify if you want go to read the - * buildable go files inside the package, but it fails if the package has no go files - */ -func packageWithName(name string) (pkg *build.Package, err error) { - pkg, err = build.Default.Import(name, ".", build.ImportMode(0)) - if err == nil { - return - } - - pkg, err = build.Default.Import(name, ".", build.ImportMode(1)) - return -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go deleted file mode 100644 index b33595c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go +++ /dev/null @@ -1,56 +0,0 @@ -package convert - -import ( - "go/ast" - "regexp" -) - -/* - * Given a root node, walks its top level statements and returns - * points to function nodes to rewrite as It statements. - * These functions, according to Go testing convention, must be named - * TestWithCamelCasedName and receive a single *testing.T argument. - */ -func findTestFuncs(rootNode *ast.File) (testsToRewrite []*ast.FuncDecl) { - testNameRegexp := regexp.MustCompile("^Test[0-9A-Z].+") - - ast.Inspect(rootNode, func(node ast.Node) bool { - if node == nil { - return false - } - - switch node := node.(type) { - case *ast.FuncDecl: - matches := testNameRegexp.MatchString(node.Name.Name) - - if matches && receivesTestingT(node) { - testsToRewrite = append(testsToRewrite, node) - } - } - - return true - }) - - return -} - -/* - * convenience function that looks at args to a function and determines if its - * params include an argument of type *testing.T - */ -func receivesTestingT(node *ast.FuncDecl) bool { - if len(node.Type.Params.List) != 1 { - return false - } - - base, ok := node.Type.Params.List[0].Type.(*ast.StarExpr) - if !ok { - return false - } - - intermediate := base.X.(*ast.SelectorExpr) - isTestingPackage := intermediate.X.(*ast.Ident).Name == "testing" - isTestingT := intermediate.Sel.Name == "T" - - return isTestingPackage && isTestingT -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go deleted file mode 100644 index 4b001a7..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go +++ /dev/null @@ -1,163 +0,0 @@ -package convert - -import ( - "bytes" - "fmt" - "go/ast" - "go/format" - "go/parser" - "go/token" - "io/ioutil" - "os" -) - -/* - * Given a file path, rewrites any tests in the Ginkgo format. - * First, we parse the AST, and update the imports declaration. - * Then, we walk the first child elements in the file, returning tests to rewrite. - * A top level init func is declared, with a single Describe func inside. - * Then the test functions to rewrite are inserted as It statements inside the Describe. - * Finally we walk the rest of the file, replacing other usages of *testing.T - * Once that is complete, we write the AST back out again to its file. - */ -func rewriteTestsInFile(pathToFile string) { - fileSet := token.NewFileSet() - rootNode, err := parser.ParseFile(fileSet, pathToFile, nil, 0) - if err != nil { - panic(fmt.Sprintf("Error parsing test file '%s':\n%s\n", pathToFile, err.Error())) - } - - addGinkgoImports(rootNode) - removeTestingImport(rootNode) - - varUnderscoreBlock := createVarUnderscoreBlock() - describeBlock := createDescribeBlock() - varUnderscoreBlock.Values = []ast.Expr{describeBlock} - - for _, testFunc := range findTestFuncs(rootNode) { - rewriteTestFuncAsItStatement(testFunc, rootNode, describeBlock) - } - - underscoreDecl := &ast.GenDecl{ - Tok: 85, // gah, magick numbers are needed to make this work - TokPos: 14, // this tricks Go into writing "var _ = Describe" - Specs: []ast.Spec{varUnderscoreBlock}, - } - - imports := rootNode.Decls[0] - tail := rootNode.Decls[1:] - rootNode.Decls = append(append([]ast.Decl{imports}, underscoreDecl), tail...) - rewriteOtherFuncsToUseGinkgoT(rootNode.Decls) - walkNodesInRootNodeReplacingTestingT(rootNode) - - var buffer bytes.Buffer - if err = format.Node(&buffer, fileSet, rootNode); err != nil { - panic(fmt.Sprintf("Error formatting ast node after rewriting tests.\n%s\n", err.Error())) - } - - fileInfo, err := os.Stat(pathToFile) - if err != nil { - panic(fmt.Sprintf("Error stat'ing file: %s\n", pathToFile)) - } - - ioutil.WriteFile(pathToFile, buffer.Bytes(), fileInfo.Mode()) - return -} - -/* - * Given a test func named TestDoesSomethingNeat, rewrites it as - * It("does something neat", func() { __test_body_here__ }) and adds it - * to the Describe's list of statements - */ -func rewriteTestFuncAsItStatement(testFunc *ast.FuncDecl, rootNode *ast.File, describe *ast.CallExpr) { - var funcIndex int = -1 - for index, child := range rootNode.Decls { - if child == testFunc { - funcIndex = index - break - } - } - - if funcIndex < 0 { - panic(fmt.Sprintf("Assert failed: Error finding index for test node %s\n", testFunc.Name.Name)) - } - - var block *ast.BlockStmt = blockStatementFromDescribe(describe) - block.List = append(block.List, createItStatementForTestFunc(testFunc)) - replaceTestingTsWithGinkgoT(block, namedTestingTArg(testFunc)) - - // remove the old test func from the root node's declarations - rootNode.Decls = append(rootNode.Decls[:funcIndex], rootNode.Decls[funcIndex+1:]...) - return -} - -/* - * walks nodes inside of a test func's statements and replaces the usage of - * it's named *testing.T param with GinkgoT's - */ -func replaceTestingTsWithGinkgoT(statementsBlock *ast.BlockStmt, testingT string) { - ast.Inspect(statementsBlock, func(node ast.Node) bool { - if node == nil { - return false - } - - keyValueExpr, ok := node.(*ast.KeyValueExpr) - if ok { - replaceNamedTestingTsInKeyValueExpression(keyValueExpr, testingT) - return true - } - - funcLiteral, ok := node.(*ast.FuncLit) - if ok { - replaceTypeDeclTestingTsInFuncLiteral(funcLiteral) - return true - } - - callExpr, ok := node.(*ast.CallExpr) - if !ok { - return true - } - replaceTestingTsInArgsLists(callExpr, testingT) - - funCall, ok := callExpr.Fun.(*ast.SelectorExpr) - if ok { - replaceTestingTsMethodCalls(funCall, testingT) - } - - return true - }) -} - -/* - * rewrite t.Fail() or any other *testing.T method by replacing with T().Fail() - * This function receives a selector expression (eg: t.Fail()) and - * the name of the *testing.T param from the function declaration. Rewrites the - * selector expression in place if the target was a *testing.T - */ -func replaceTestingTsMethodCalls(selectorExpr *ast.SelectorExpr, testingT string) { - ident, ok := selectorExpr.X.(*ast.Ident) - if !ok { - return - } - - if ident.Name == testingT { - selectorExpr.X = newGinkgoTFromIdent(ident) - } -} - -/* - * replaces usages of a named *testing.T param inside of a call expression - * with a new GinkgoT object - */ -func replaceTestingTsInArgsLists(callExpr *ast.CallExpr, testingT string) { - for index, arg := range callExpr.Args { - ident, ok := arg.(*ast.Ident) - if !ok { - continue - } - - if ident.Name == testingT { - callExpr.Args[index] = newGinkgoTFromIdent(ident) - } - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go deleted file mode 100644 index 418cdc4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go +++ /dev/null @@ -1,130 +0,0 @@ -package convert - -import ( - "go/ast" -) - -/* - * Rewrites any other top level funcs that receive a *testing.T param - */ -func rewriteOtherFuncsToUseGinkgoT(declarations []ast.Decl) { - for _, decl := range declarations { - decl, ok := decl.(*ast.FuncDecl) - if !ok { - continue - } - - for _, param := range decl.Type.Params.List { - starExpr, ok := param.Type.(*ast.StarExpr) - if !ok { - continue - } - - selectorExpr, ok := starExpr.X.(*ast.SelectorExpr) - if !ok { - continue - } - - xIdent, ok := selectorExpr.X.(*ast.Ident) - if !ok || xIdent.Name != "testing" { - continue - } - - if selectorExpr.Sel.Name != "T" { - continue - } - - param.Type = newGinkgoTInterface() - } - } -} - -/* - * Walks all of the nodes in the file, replacing *testing.T in struct - * and func literal nodes. eg: - * type foo struct { *testing.T } - * var bar = func(t *testing.T) { } - */ -func walkNodesInRootNodeReplacingTestingT(rootNode *ast.File) { - ast.Inspect(rootNode, func(node ast.Node) bool { - if node == nil { - return false - } - - switch node := node.(type) { - case *ast.StructType: - replaceTestingTsInStructType(node) - case *ast.FuncLit: - replaceTypeDeclTestingTsInFuncLiteral(node) - } - - return true - }) -} - -/* - * replaces named *testing.T inside a composite literal - */ -func replaceNamedTestingTsInKeyValueExpression(kve *ast.KeyValueExpr, testingT string) { - ident, ok := kve.Value.(*ast.Ident) - if !ok { - return - } - - if ident.Name == testingT { - kve.Value = newGinkgoTFromIdent(ident) - } -} - -/* - * replaces *testing.T params in a func literal with GinkgoT - */ -func replaceTypeDeclTestingTsInFuncLiteral(functionLiteral *ast.FuncLit) { - for _, arg := range functionLiteral.Type.Params.List { - starExpr, ok := arg.Type.(*ast.StarExpr) - if !ok { - continue - } - - selectorExpr, ok := starExpr.X.(*ast.SelectorExpr) - if !ok { - continue - } - - target, ok := selectorExpr.X.(*ast.Ident) - if !ok { - continue - } - - if target.Name == "testing" && selectorExpr.Sel.Name == "T" { - arg.Type = newGinkgoTInterface() - } - } -} - -/* - * Replaces *testing.T types inside of a struct declaration with a GinkgoT - * eg: type foo struct { *testing.T } - */ -func replaceTestingTsInStructType(structType *ast.StructType) { - for _, field := range structType.Fields.List { - starExpr, ok := field.Type.(*ast.StarExpr) - if !ok { - continue - } - - selectorExpr, ok := starExpr.X.(*ast.SelectorExpr) - if !ok { - continue - } - - xIdent, ok := selectorExpr.X.(*ast.Ident) - if !ok { - continue - } - - if xIdent.Name == "testing" && selectorExpr.Sel.Name == "T" { - field.Type = newGinkgoTInterface() - } - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert_command.go deleted file mode 100644 index 89e60d3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/convert_command.go +++ /dev/null @@ -1,44 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "github.com/onsi/ginkgo/ginkgo/convert" - "os" -) - -func BuildConvertCommand() *Command { - return &Command{ - Name: "convert", - FlagSet: flag.NewFlagSet("convert", flag.ExitOnError), - UsageCommand: "ginkgo convert /path/to/package", - Usage: []string{ - "Convert the package at the passed in path from an XUnit-style test to a Ginkgo-style test", - }, - Command: convertPackage, - } -} - -func convertPackage(args []string, additionalArgs []string) { - if len(args) != 1 { - println(fmt.Sprintf("usage: ginkgo convert /path/to/your/package")) - os.Exit(1) - } - - defer func() { - err := recover() - if err != nil { - switch err := err.(type) { - case error: - println(err.Error()) - case string: - println(err) - default: - println(fmt.Sprintf("unexpected error: %#v", err)) - } - os.Exit(1) - } - }() - - convert.RewritePackage(args[0]) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/generate_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/generate_command.go deleted file mode 100644 index 7dd3b4d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/generate_command.go +++ /dev/null @@ -1,164 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - "path/filepath" - "strings" - "text/template" -) - -func BuildGenerateCommand() *Command { - var agouti, noDot bool - flagSet := flag.NewFlagSet("generate", flag.ExitOnError) - flagSet.BoolVar(&agouti, "agouti", false, "If set, generate will generate a test file for writing Agouti tests") - flagSet.BoolVar(&noDot, "nodot", false, "If set, generate will generate a test file that does not . import ginkgo and gomega") - - return &Command{ - Name: "generate", - FlagSet: flagSet, - UsageCommand: "ginkgo generate ", - Usage: []string{ - "Generate a test file named filename_test.go", - "If the optional argument is omitted, a file named after the package in the current directory will be created.", - "Accepts the following flags:", - }, - Command: func(args []string, additionalArgs []string) { - generateSpec(args, agouti, noDot) - }, - } -} - -var specText = `package {{.Package}}_test - -import ( - . "{{.PackageImportPath}}" - - {{if .IncludeImports}}. "github.com/onsi/ginkgo"{{end}} - {{if .IncludeImports}}. "github.com/onsi/gomega"{{end}} -) - -var _ = Describe("{{.Subject}}", func() { - -}) -` - -var agoutiSpecText = `package {{.Package}}_test - -import ( - . "{{.PackageImportPath}}" - - {{if .IncludeImports}}. "github.com/onsi/ginkgo"{{end}} - {{if .IncludeImports}}. "github.com/onsi/gomega"{{end}} - . "github.com/sclevine/agouti/matchers" - "github.com/sclevine/agouti" -) - -var _ = Describe("{{.Subject}}", func() { - var page *agouti.Page - - BeforeEach(func() { - var err error - page, err = agoutiDriver.NewPage() - Expect(err).NotTo(HaveOccurred()) - }) - - AfterEach(func() { - Expect(page.Destroy()).To(Succeed()) - }) -}) -` - -type specData struct { - Package string - Subject string - PackageImportPath string - IncludeImports bool -} - -func generateSpec(args []string, agouti, noDot bool) { - if len(args) == 0 { - err := generateSpecForSubject("", agouti, noDot) - if err != nil { - fmt.Println(err.Error()) - fmt.Println("") - os.Exit(1) - } - fmt.Println("") - return - } - - var failed bool - for _, arg := range args { - err := generateSpecForSubject(arg, agouti, noDot) - if err != nil { - failed = true - fmt.Println(err.Error()) - } - } - fmt.Println("") - if failed { - os.Exit(1) - } -} - -func generateSpecForSubject(subject string, agouti, noDot bool) error { - packageName, specFilePrefix, formattedName := getPackageAndFormattedName() - if subject != "" { - subject = strings.Split(subject, ".go")[0] - subject = strings.Split(subject, "_test")[0] - specFilePrefix = subject - formattedName = prettifyPackageName(subject) - } - - data := specData{ - Package: packageName, - Subject: formattedName, - PackageImportPath: getPackageImportPath(), - IncludeImports: !noDot, - } - - targetFile := fmt.Sprintf("%s_test.go", specFilePrefix) - if fileExists(targetFile) { - return fmt.Errorf("%s already exists.", targetFile) - } else { - fmt.Printf("Generating ginkgo test for %s in:\n %s\n", data.Subject, targetFile) - } - - f, err := os.Create(targetFile) - if err != nil { - return err - } - defer f.Close() - - var templateText string - if agouti { - templateText = agoutiSpecText - } else { - templateText = specText - } - - specTemplate, err := template.New("spec").Parse(templateText) - if err != nil { - return err - } - - specTemplate.Execute(f, data) - goFmt(targetFile) - return nil -} - -func getPackageImportPath() string { - workingDir, err := os.Getwd() - if err != nil { - panic(err.Error()) - } - sep := string(filepath.Separator) - paths := strings.Split(workingDir, sep+"src"+sep) - if len(paths) == 1 { - fmt.Printf("\nCouldn't identify package import path.\n\n\tginkgo generate\n\nMust be run within a package directory under $GOPATH/src/...\nYou're going to have to change UNKNOWN_PACKAGE_PATH in the generated file...\n\n") - return "UNKNOWN_PACKAGE_PATH" - } - return filepath.ToSlash(paths[len(paths)-1]) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/help_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/help_command.go deleted file mode 100644 index a42d4f8..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/help_command.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "flag" - "fmt" -) - -func BuildHelpCommand() *Command { - return &Command{ - Name: "help", - FlagSet: flag.NewFlagSet("help", flag.ExitOnError), - UsageCommand: "ginkgo help ", - Usage: []string{ - "Print usage information. If a command is passed in, print usage information just for that command.", - }, - Command: printHelp, - } -} - -func printHelp(args []string, additionalArgs []string) { - if len(args) == 0 { - usage() - } else { - command, found := commandMatching(args[0]) - if !found { - complainAndQuit(fmt.Sprintf("Unknown command: %s", args[0])) - } - - usageForCommand(command, true) - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go deleted file mode 100644 index c15db0b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go +++ /dev/null @@ -1,52 +0,0 @@ -package interrupthandler - -import ( - "os" - "os/signal" - "sync" - "syscall" -) - -type InterruptHandler struct { - interruptCount int - lock *sync.Mutex - C chan bool -} - -func NewInterruptHandler() *InterruptHandler { - h := &InterruptHandler{ - lock: &sync.Mutex{}, - C: make(chan bool, 0), - } - - go h.handleInterrupt() - SwallowSigQuit() - - return h -} - -func (h *InterruptHandler) WasInterrupted() bool { - h.lock.Lock() - defer h.lock.Unlock() - - return h.interruptCount > 0 -} - -func (h *InterruptHandler) handleInterrupt() { - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) - - <-c - signal.Stop(c) - - h.lock.Lock() - h.interruptCount++ - if h.interruptCount == 1 { - close(h.C) - } else if h.interruptCount > 5 { - os.Exit(1) - } - h.lock.Unlock() - - go h.handleInterrupt() -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go deleted file mode 100644 index 14c9421..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go +++ /dev/null @@ -1,14 +0,0 @@ -// +build freebsd openbsd netbsd dragonfly darwin linux - -package interrupthandler - -import ( - "os" - "os/signal" - "syscall" -) - -func SwallowSigQuit() { - c := make(chan os.Signal, 1024) - signal.Notify(c, syscall.SIGQUIT) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go deleted file mode 100644 index 7f4a50e..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build windows - -package interrupthandler - -func SwallowSigQuit() { - //noop -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/main.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/main.go deleted file mode 100644 index b031b80..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/main.go +++ /dev/null @@ -1,291 +0,0 @@ -/* -The Ginkgo CLI - -The Ginkgo CLI is fully documented [here](http://onsi.github.io/ginkgo/#the_ginkgo_cli) - -You can also learn more by running: - - ginkgo help - -Here are some of the more commonly used commands: - -To install: - - go install github.com/onsi/ginkgo/ginkgo - -To run tests: - - ginkgo - -To run tests in all subdirectories: - - ginkgo -r - -To run tests in particular packages: - - ginkgo /path/to/package /path/to/another/package - -To pass arguments/flags to your tests: - - ginkgo -- - -To run tests in parallel - - ginkgo -p - -this will automatically detect the optimal number of nodes to use. Alternatively, you can specify the number of nodes with: - - ginkgo -nodes=N - -(note that you don't need to provide -p in this case). - -By default the Ginkgo CLI will spin up a server that the individual test processes send test output to. The CLI aggregates this output and then presents coherent test output, one test at a time, as each test completes. -An alternative is to have the parallel nodes run and stream interleaved output back. This useful for debugging, particularly in contexts where tests hang/fail to start. To get this interleaved output: - - ginkgo -nodes=N -stream=true - -On windows, the default value for stream is true. - -By default, when running multiple tests (with -r or a list of packages) Ginkgo will abort when a test fails. To have Ginkgo run subsequent test suites instead you can: - - ginkgo -keepGoing - -To monitor packages and rerun tests when changes occur: - - ginkgo watch <-r> - -passing `ginkgo watch` the `-r` flag will recursively detect all test suites under the current directory and monitor them. -`watch` does not detect *new* packages. Moreover, changes in package X only rerun the tests for package X, tests for packages -that depend on X are not rerun. - -[OSX & Linux only] To receive (desktop) notifications when a test run completes: - - ginkgo -notify - -this is particularly useful with `ginkgo watch`. Notifications are currently only supported on OS X and require that you `brew install terminal-notifier` - -Sometimes (to suss out race conditions/flakey tests, for example) you want to keep running a test suite until it fails. You can do this with: - - ginkgo -untilItFails - -To bootstrap a test suite: - - ginkgo bootstrap - -To generate a test file: - - ginkgo generate - -To bootstrap/generate test files without using "." imports: - - ginkgo bootstrap --nodot - ginkgo generate --nodot - -this will explicitly export all the identifiers in Ginkgo and Gomega allowing you to rename them to avoid collisions. When you pull to the latest Ginkgo/Gomega you'll want to run - - ginkgo nodot - -to refresh this list and pull in any new identifiers. In particular, this will pull in any new Gomega matchers that get added. - -To convert an existing XUnit style test suite to a Ginkgo-style test suite: - - ginkgo convert . - -To unfocus tests: - - ginkgo unfocus - -or - - ginkgo blur - -To compile a test suite: - - ginkgo build - -will output an executable file named `package.test`. This can be run directly or by invoking - - ginkgo - -To print out Ginkgo's version: - - ginkgo version - -To get more help: - - ginkgo help -*/ -package main - -import ( - "flag" - "fmt" - "os" - "os/exec" - "strings" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -const greenColor = "\x1b[32m" -const redColor = "\x1b[91m" -const defaultStyle = "\x1b[0m" -const lightGrayColor = "\x1b[37m" - -type Command struct { - Name string - AltName string - FlagSet *flag.FlagSet - Usage []string - UsageCommand string - Command func(args []string, additionalArgs []string) - SuppressFlagDocumentation bool - FlagDocSubstitute []string -} - -func (c *Command) Matches(name string) bool { - return c.Name == name || (c.AltName != "" && c.AltName == name) -} - -func (c *Command) Run(args []string, additionalArgs []string) { - c.FlagSet.Parse(args) - c.Command(c.FlagSet.Args(), additionalArgs) -} - -var DefaultCommand *Command -var Commands []*Command - -func init() { - DefaultCommand = BuildRunCommand() - Commands = append(Commands, BuildWatchCommand()) - Commands = append(Commands, BuildBuildCommand()) - Commands = append(Commands, BuildBootstrapCommand()) - Commands = append(Commands, BuildGenerateCommand()) - Commands = append(Commands, BuildNodotCommand()) - Commands = append(Commands, BuildConvertCommand()) - Commands = append(Commands, BuildUnfocusCommand()) - Commands = append(Commands, BuildVersionCommand()) - Commands = append(Commands, BuildHelpCommand()) -} - -func main() { - args := []string{} - additionalArgs := []string{} - - foundDelimiter := false - - for _, arg := range os.Args[1:] { - if !foundDelimiter { - if arg == "--" { - foundDelimiter = true - continue - } - } - - if foundDelimiter { - additionalArgs = append(additionalArgs, arg) - } else { - args = append(args, arg) - } - } - - if len(args) > 0 { - commandToRun, found := commandMatching(args[0]) - if found { - commandToRun.Run(args[1:], additionalArgs) - return - } - } - - DefaultCommand.Run(args, additionalArgs) -} - -func commandMatching(name string) (*Command, bool) { - for _, command := range Commands { - if command.Matches(name) { - return command, true - } - } - return nil, false -} - -func usage() { - fmt.Fprintf(os.Stderr, "Ginkgo Version %s\n\n", config.VERSION) - usageForCommand(DefaultCommand, false) - for _, command := range Commands { - fmt.Fprintf(os.Stderr, "\n") - usageForCommand(command, false) - } -} - -func usageForCommand(command *Command, longForm bool) { - fmt.Fprintf(os.Stderr, "%s\n%s\n", command.UsageCommand, strings.Repeat("-", len(command.UsageCommand))) - fmt.Fprintf(os.Stderr, "%s\n", strings.Join(command.Usage, "\n")) - if command.SuppressFlagDocumentation && !longForm { - fmt.Fprintf(os.Stderr, "%s\n", strings.Join(command.FlagDocSubstitute, "\n ")) - } else { - command.FlagSet.PrintDefaults() - } -} - -func complainAndQuit(complaint string) { - fmt.Fprintf(os.Stderr, "%s\nFor usage instructions:\n\tginkgo help\n", complaint) - os.Exit(1) -} - -func findSuites(args []string, recurse bool, skipPackage string, allowPrecompiled bool) ([]testsuite.TestSuite, []string) { - suites := []testsuite.TestSuite{} - - if len(args) > 0 { - for _, arg := range args { - if allowPrecompiled { - suite, err := testsuite.PrecompiledTestSuite(arg) - if err == nil { - suites = append(suites, suite) - continue - } - } - suites = append(suites, testsuite.SuitesInDir(arg, recurse)...) - } - } else { - suites = testsuite.SuitesInDir(".", recurse) - } - - skippedPackages := []string{} - if skipPackage != "" { - skipFilters := strings.Split(skipPackage, ",") - filteredSuites := []testsuite.TestSuite{} - for _, suite := range suites { - skip := false - for _, skipFilter := range skipFilters { - if strings.Contains(suite.Path, skipFilter) { - skip = true - break - } - } - if skip { - skippedPackages = append(skippedPackages, suite.Path) - } else { - filteredSuites = append(filteredSuites, suite) - } - } - suites = filteredSuites - } - - return suites, skippedPackages -} - -func goFmt(path string) { - err := exec.Command("go", "fmt", path).Run() - if err != nil { - complainAndQuit("Could not fmt: " + err.Error()) - } -} - -func pluralizedWord(singular, plural string, count int) string { - if count == 1 { - return singular - } - return plural -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go deleted file mode 100644 index 3f7237c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go +++ /dev/null @@ -1,194 +0,0 @@ -package nodot - -import ( - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "path/filepath" - "strings" -) - -func ApplyNoDot(data []byte) ([]byte, error) { - sections, err := generateNodotSections() - if err != nil { - return nil, err - } - - for _, section := range sections { - data = section.createOrUpdateIn(data) - } - - return data, nil -} - -type nodotSection struct { - name string - pkg string - declarations []string - types []string -} - -func (s nodotSection) createOrUpdateIn(data []byte) []byte { - renames := map[string]string{} - - contents := string(data) - - lines := strings.Split(contents, "\n") - - comment := "// Declarations for " + s.name - - newLines := []string{} - for _, line := range lines { - if line == comment { - continue - } - - words := strings.Split(line, " ") - lastWord := words[len(words)-1] - - if s.containsDeclarationOrType(lastWord) { - renames[lastWord] = words[1] - continue - } - - newLines = append(newLines, line) - } - - if len(newLines[len(newLines)-1]) > 0 { - newLines = append(newLines, "") - } - - newLines = append(newLines, comment) - - for _, typ := range s.types { - name, ok := renames[s.prefix(typ)] - if !ok { - name = typ - } - newLines = append(newLines, fmt.Sprintf("type %s %s", name, s.prefix(typ))) - } - - for _, decl := range s.declarations { - name, ok := renames[s.prefix(decl)] - if !ok { - name = decl - } - newLines = append(newLines, fmt.Sprintf("var %s = %s", name, s.prefix(decl))) - } - - newLines = append(newLines, "") - - newContents := strings.Join(newLines, "\n") - - return []byte(newContents) -} - -func (s nodotSection) prefix(declOrType string) string { - return s.pkg + "." + declOrType -} - -func (s nodotSection) containsDeclarationOrType(word string) bool { - for _, declaration := range s.declarations { - if s.prefix(declaration) == word { - return true - } - } - - for _, typ := range s.types { - if s.prefix(typ) == word { - return true - } - } - - return false -} - -func generateNodotSections() ([]nodotSection, error) { - sections := []nodotSection{} - - declarations, err := getExportedDeclerationsForPackage("github.com/onsi/ginkgo", "ginkgo_dsl.go", "GINKGO_VERSION", "GINKGO_PANIC") - if err != nil { - return nil, err - } - sections = append(sections, nodotSection{ - name: "Ginkgo DSL", - pkg: "ginkgo", - declarations: declarations, - types: []string{"Done", "Benchmarker"}, - }) - - declarations, err = getExportedDeclerationsForPackage("github.com/onsi/gomega", "gomega_dsl.go", "GOMEGA_VERSION") - if err != nil { - return nil, err - } - sections = append(sections, nodotSection{ - name: "Gomega DSL", - pkg: "gomega", - declarations: declarations, - }) - - declarations, err = getExportedDeclerationsForPackage("github.com/onsi/gomega", "matchers.go") - if err != nil { - return nil, err - } - sections = append(sections, nodotSection{ - name: "Gomega Matchers", - pkg: "gomega", - declarations: declarations, - }) - - return sections, nil -} - -func getExportedDeclerationsForPackage(pkgPath string, filename string, blacklist ...string) ([]string, error) { - pkg, err := build.Import(pkgPath, ".", 0) - if err != nil { - return []string{}, err - } - - declarations, err := getExportedDeclarationsForFile(filepath.Join(pkg.Dir, filename)) - if err != nil { - return []string{}, err - } - - blacklistLookup := map[string]bool{} - for _, declaration := range blacklist { - blacklistLookup[declaration] = true - } - - filteredDeclarations := []string{} - for _, declaration := range declarations { - if blacklistLookup[declaration] { - continue - } - filteredDeclarations = append(filteredDeclarations, declaration) - } - - return filteredDeclarations, nil -} - -func getExportedDeclarationsForFile(path string) ([]string, error) { - fset := token.NewFileSet() - tree, err := parser.ParseFile(fset, path, nil, 0) - if err != nil { - return []string{}, err - } - - declarations := []string{} - ast.FileExports(tree) - for _, decl := range tree.Decls { - switch x := decl.(type) { - case *ast.GenDecl: - switch s := x.Specs[0].(type) { - case *ast.ValueSpec: - declarations = append(declarations, s.Names[0].Name) - } - case *ast.FuncDecl: - declarations = append(declarations, x.Name.Name) - } - } - - return declarations, nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot_suite_test.go deleted file mode 100644 index ca4613e..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot_suite_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package nodot_test - -import ( - "github.com/onsi/ginkgo" - "github.com/onsi/gomega" - - "testing" -) - -func TestNodot(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Nodot Suite") -} - -// Declarations for Ginkgo DSL -type Done ginkgo.Done -type Benchmarker ginkgo.Benchmarker - -var GinkgoWriter = ginkgo.GinkgoWriter -var GinkgoParallelNode = ginkgo.GinkgoParallelNode -var GinkgoT = ginkgo.GinkgoT -var CurrentGinkgoTestDescription = ginkgo.CurrentGinkgoTestDescription -var RunSpecs = ginkgo.RunSpecs -var RunSpecsWithDefaultAndCustomReporters = ginkgo.RunSpecsWithDefaultAndCustomReporters -var RunSpecsWithCustomReporters = ginkgo.RunSpecsWithCustomReporters -var Fail = ginkgo.Fail -var GinkgoRecover = ginkgo.GinkgoRecover -var Describe = ginkgo.Describe -var FDescribe = ginkgo.FDescribe -var PDescribe = ginkgo.PDescribe -var XDescribe = ginkgo.XDescribe -var Context = ginkgo.Context -var FContext = ginkgo.FContext -var PContext = ginkgo.PContext -var XContext = ginkgo.XContext -var It = ginkgo.It -var FIt = ginkgo.FIt -var PIt = ginkgo.PIt -var XIt = ginkgo.XIt -var Measure = ginkgo.Measure -var FMeasure = ginkgo.FMeasure -var PMeasure = ginkgo.PMeasure -var XMeasure = ginkgo.XMeasure -var BeforeSuite = ginkgo.BeforeSuite -var AfterSuite = ginkgo.AfterSuite -var SynchronizedBeforeSuite = ginkgo.SynchronizedBeforeSuite -var SynchronizedAfterSuite = ginkgo.SynchronizedAfterSuite -var BeforeEach = ginkgo.BeforeEach -var JustBeforeEach = ginkgo.JustBeforeEach -var AfterEach = ginkgo.AfterEach - -// Declarations for Gomega DSL -var RegisterFailHandler = gomega.RegisterFailHandler -var RegisterTestingT = gomega.RegisterTestingT -var InterceptGomegaFailures = gomega.InterceptGomegaFailures -var Ω = gomega.Ω -var Expect = gomega.Expect -var ExpectWithOffset = gomega.ExpectWithOffset -var Eventually = gomega.Eventually -var EventuallyWithOffset = gomega.EventuallyWithOffset -var Consistently = gomega.Consistently -var ConsistentlyWithOffset = gomega.ConsistentlyWithOffset -var SetDefaultEventuallyTimeout = gomega.SetDefaultEventuallyTimeout -var SetDefaultEventuallyPollingInterval = gomega.SetDefaultEventuallyPollingInterval -var SetDefaultConsistentlyDuration = gomega.SetDefaultConsistentlyDuration -var SetDefaultConsistentlyPollingInterval = gomega.SetDefaultConsistentlyPollingInterval - -// Declarations for Gomega Matchers -var Equal = gomega.Equal -var BeEquivalentTo = gomega.BeEquivalentTo -var BeNil = gomega.BeNil -var BeTrue = gomega.BeTrue -var BeFalse = gomega.BeFalse -var HaveOccurred = gomega.HaveOccurred -var MatchError = gomega.MatchError -var BeClosed = gomega.BeClosed -var Receive = gomega.Receive -var MatchRegexp = gomega.MatchRegexp -var ContainSubstring = gomega.ContainSubstring -var MatchJSON = gomega.MatchJSON -var BeEmpty = gomega.BeEmpty -var HaveLen = gomega.HaveLen -var BeZero = gomega.BeZero -var ContainElement = gomega.ContainElement -var ConsistOf = gomega.ConsistOf -var HaveKey = gomega.HaveKey -var HaveKeyWithValue = gomega.HaveKeyWithValue -var BeNumerically = gomega.BeNumerically -var BeTemporally = gomega.BeTemporally -var BeAssignableToTypeOf = gomega.BeAssignableToTypeOf -var Panic = gomega.Panic diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot_test.go deleted file mode 100644 index 37260a8..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot/nodot_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package nodot_test - -import ( - . "github.com/onsi/ginkgo/ginkgo/nodot" - "strings" -) - -var _ = Describe("ApplyNoDot", func() { - var result string - - apply := func(input string) string { - output, err := ApplyNoDot([]byte(input)) - Ω(err).ShouldNot(HaveOccurred()) - return string(output) - } - - Context("when no declarations have been imported yet", func() { - BeforeEach(func() { - result = apply("") - }) - - It("should add headings for the various declarations", func() { - Ω(result).Should(ContainSubstring("// Declarations for Ginkgo DSL")) - Ω(result).Should(ContainSubstring("// Declarations for Gomega DSL")) - Ω(result).Should(ContainSubstring("// Declarations for Gomega Matchers")) - }) - - It("should import Ginkgo's declarations", func() { - Ω(result).Should(ContainSubstring("var It = ginkgo.It")) - Ω(result).Should(ContainSubstring("var XDescribe = ginkgo.XDescribe")) - }) - - It("should import Ginkgo's types", func() { - Ω(result).Should(ContainSubstring("type Done ginkgo.Done")) - Ω(result).Should(ContainSubstring("type Benchmarker ginkgo.Benchmarker")) - Ω(strings.Count(result, "type ")).Should(Equal(2)) - }) - - It("should import Gomega's DSL and matchers", func() { - Ω(result).Should(ContainSubstring("var Ω = gomega.Ω")) - Ω(result).Should(ContainSubstring("var ContainSubstring = gomega.ContainSubstring")) - Ω(result).Should(ContainSubstring("var Equal = gomega.Equal")) - }) - - It("should not import blacklisted things", func() { - Ω(result).ShouldNot(ContainSubstring("GINKGO_VERSION")) - Ω(result).ShouldNot(ContainSubstring("GINKGO_PANIC")) - Ω(result).ShouldNot(ContainSubstring("GOMEGA_VERSION")) - }) - }) - - It("should be idempotent (module empty lines - go fmt can fix those for us)", func() { - first := apply("") - second := apply(first) - first = strings.Trim(first, "\n") - second = strings.Trim(second, "\n") - Ω(first).Should(Equal(second)) - }) - - It("should not mess with other things in the input", func() { - result = apply("var MyThing = SomethingThatsMine") - Ω(result).Should(ContainSubstring("var MyThing = SomethingThatsMine")) - }) - - Context("when the user has redefined a name", func() { - It("should honor the redefinition", func() { - result = apply(` -var _ = gomega.Ω -var When = ginkgo.It - `) - - Ω(result).Should(ContainSubstring("var _ = gomega.Ω")) - Ω(result).ShouldNot(ContainSubstring("var Ω = gomega.Ω")) - - Ω(result).Should(ContainSubstring("var When = ginkgo.It")) - Ω(result).ShouldNot(ContainSubstring("var It = ginkgo.It")) - - Ω(result).Should(ContainSubstring("var Context = ginkgo.Context")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot_command.go deleted file mode 100644 index e1a2e13..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/nodot_command.go +++ /dev/null @@ -1,74 +0,0 @@ -package main - -import ( - "bufio" - "flag" - "github.com/onsi/ginkgo/ginkgo/nodot" - "io/ioutil" - "os" - "path/filepath" - "regexp" -) - -func BuildNodotCommand() *Command { - return &Command{ - Name: "nodot", - FlagSet: flag.NewFlagSet("bootstrap", flag.ExitOnError), - UsageCommand: "ginkgo nodot", - Usage: []string{ - "Update the nodot declarations in your test suite", - "Any missing declarations (from, say, a recently added matcher) will be added to your bootstrap file.", - "If you've renamed a declaration, that name will be honored and not overwritten.", - }, - Command: updateNodot, - } -} - -func updateNodot(args []string, additionalArgs []string) { - suiteFile, perm := findSuiteFile() - - data, err := ioutil.ReadFile(suiteFile) - if err != nil { - complainAndQuit("Failed to update nodot declarations: " + err.Error()) - } - - content, err := nodot.ApplyNoDot(data) - if err != nil { - complainAndQuit("Failed to update nodot declarations: " + err.Error()) - } - ioutil.WriteFile(suiteFile, content, perm) - - goFmt(suiteFile) -} - -func findSuiteFile() (string, os.FileMode) { - workingDir, err := os.Getwd() - if err != nil { - complainAndQuit("Could not find suite file for nodot: " + err.Error()) - } - - files, err := ioutil.ReadDir(workingDir) - if err != nil { - complainAndQuit("Could not find suite file for nodot: " + err.Error()) - } - - re := regexp.MustCompile(`RunSpecs\(|RunSpecsWithDefaultAndCustomReporters\(|RunSpecsWithCustomReporters\(`) - - for _, file := range files { - if file.IsDir() { - continue - } - path := filepath.Join(workingDir, file.Name()) - f, err := os.Open(path) - if err != nil { - complainAndQuit("Could not find suite file for nodot: " + err.Error()) - } - if re.MatchReader(bufio.NewReader(f)) { - return path, file.Mode() - } - } - - complainAndQuit("Could not find a suite file for nodot: you need a bootstrap file that call's Ginkgo's RunSpecs() command.\nTry running ginkgo bootstrap first.") - - return "", 0 -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/notifications.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/notifications.go deleted file mode 100644 index 368d61f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/notifications.go +++ /dev/null @@ -1,141 +0,0 @@ -package main - -import ( - "fmt" - "os" - "os/exec" - "regexp" - "runtime" - "strings" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type Notifier struct { - commandFlags *RunWatchAndBuildCommandFlags -} - -func NewNotifier(commandFlags *RunWatchAndBuildCommandFlags) *Notifier { - return &Notifier{ - commandFlags: commandFlags, - } -} - -func (n *Notifier) VerifyNotificationsAreAvailable() { - if n.commandFlags.Notify { - onLinux := (runtime.GOOS == "linux") - onOSX := (runtime.GOOS == "darwin") - if onOSX { - - _, err := exec.LookPath("terminal-notifier") - if err != nil { - fmt.Printf(`--notify requires terminal-notifier, which you don't seem to have installed. - -OSX: - -To remedy this: - - brew install terminal-notifier - -To learn more about terminal-notifier: - - https://github.com/alloy/terminal-notifier -`) - os.Exit(1) - } - - } else if onLinux { - - _, err := exec.LookPath("notify-send") - if err != nil { - fmt.Printf(`--notify requires terminal-notifier or notify-send, which you don't seem to have installed. - -Linux: - -Download and install notify-send for your distribution -`) - os.Exit(1) - } - - } - } -} - -func (n *Notifier) SendSuiteCompletionNotification(suite testsuite.TestSuite, suitePassed bool) { - if suitePassed { - n.SendNotification("Ginkgo [PASS]", fmt.Sprintf(`Test suite for "%s" passed.`, suite.PackageName)) - } else { - n.SendNotification("Ginkgo [FAIL]", fmt.Sprintf(`Test suite for "%s" failed.`, suite.PackageName)) - } -} - -func (n *Notifier) SendNotification(title string, subtitle string) { - - if n.commandFlags.Notify { - onLinux := (runtime.GOOS == "linux") - onOSX := (runtime.GOOS == "darwin") - - if onOSX { - - _, err := exec.LookPath("terminal-notifier") - if err == nil { - args := []string{"-title", title, "-subtitle", subtitle, "-group", "com.onsi.ginkgo"} - terminal := os.Getenv("TERM_PROGRAM") - if terminal == "iTerm.app" { - args = append(args, "-activate", "com.googlecode.iterm2") - } else if terminal == "Apple_Terminal" { - args = append(args, "-activate", "com.apple.Terminal") - } - - exec.Command("terminal-notifier", args...).Run() - } - - } else if onLinux { - - _, err := exec.LookPath("notify-send") - if err == nil { - args := []string{"-a", "ginkgo", title, subtitle} - exec.Command("notify-send", args...).Run() - } - - } - } -} - -func (n *Notifier) RunCommand(suite testsuite.TestSuite, suitePassed bool) { - - command := n.commandFlags.AfterSuiteHook - if command != "" { - - // Allow for string replacement to pass input to the command - passed := "[FAIL]" - if suitePassed { - passed = "[PASS]" - } - command = strings.Replace(command, "(ginkgo-suite-passed)", passed, -1) - command = strings.Replace(command, "(ginkgo-suite-name)", suite.PackageName, -1) - - // Must break command into parts - splitArgs := regexp.MustCompile(`'.+'|".+"|\S+`) - parts := splitArgs.FindAllString(command, -1) - - output, err := exec.Command(parts[0], parts[1:]...).CombinedOutput() - if err != nil { - fmt.Println("Post-suite command failed:") - if config.DefaultReporterConfig.NoColor { - fmt.Printf("\t%s\n", output) - } else { - fmt.Printf("\t%s%s%s\n", redColor, string(output), defaultStyle) - } - n.SendNotification("Ginkgo [ERROR]", fmt.Sprintf(`After suite command "%s" failed`, n.commandFlags.AfterSuiteHook)) - } else { - fmt.Println("Post-suite command succeeded:") - if config.DefaultReporterConfig.NoColor { - fmt.Printf("\t%s\n", output) - } else { - fmt.Printf("\t%s%s%s\n", greenColor, string(output), defaultStyle) - } - } - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/run_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/run_command.go deleted file mode 100644 index c5cf277..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/run_command.go +++ /dev/null @@ -1,192 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "math/rand" - "os" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" - "github.com/onsi/ginkgo/types" -) - -func BuildRunCommand() *Command { - commandFlags := NewRunCommandFlags(flag.NewFlagSet("ginkgo", flag.ExitOnError)) - notifier := NewNotifier(commandFlags) - interruptHandler := interrupthandler.NewInterruptHandler() - runner := &SpecRunner{ - commandFlags: commandFlags, - notifier: notifier, - interruptHandler: interruptHandler, - suiteRunner: NewSuiteRunner(notifier, interruptHandler), - } - - return &Command{ - Name: "", - FlagSet: commandFlags.FlagSet, - UsageCommand: "ginkgo -- ", - Usage: []string{ - "Run the tests in the passed in (or the package in the current directory if left blank).", - "Any arguments after -- will be passed to the test.", - "Accepts the following flags:", - }, - Command: runner.RunSpecs, - } -} - -type SpecRunner struct { - commandFlags *RunWatchAndBuildCommandFlags - notifier *Notifier - interruptHandler *interrupthandler.InterruptHandler - suiteRunner *SuiteRunner -} - -func (r *SpecRunner) RunSpecs(args []string, additionalArgs []string) { - r.commandFlags.computeNodes() - r.notifier.VerifyNotificationsAreAvailable() - - suites, skippedPackages := findSuites(args, r.commandFlags.Recurse, r.commandFlags.SkipPackage, true) - if len(skippedPackages) > 0 { - fmt.Println("Will skip:") - for _, skippedPackage := range skippedPackages { - fmt.Println(" " + skippedPackage) - } - } - - if len(skippedPackages) > 0 && len(suites) == 0 { - fmt.Println("All tests skipped! Exiting...") - os.Exit(0) - } - - if len(suites) == 0 { - complainAndQuit("Found no test suites") - } - - r.ComputeSuccinctMode(len(suites)) - - t := time.Now() - - runners := []*testrunner.TestRunner{} - for _, suite := range suites { - runners = append(runners, testrunner.New(suite, r.commandFlags.NumCPU, r.commandFlags.ParallelStream, r.commandFlags.Race, r.commandFlags.Cover, r.commandFlags.CoverPkg, r.commandFlags.Tags, additionalArgs)) - } - - numSuites := 0 - runResult := testrunner.PassingRunResult() - if r.commandFlags.UntilItFails { - iteration := 0 - for { - r.UpdateSeed() - randomizedRunners := r.randomizeOrder(runners) - runResult, numSuites = r.suiteRunner.RunSuites(randomizedRunners, r.commandFlags.NumCompilers, r.commandFlags.KeepGoing, nil) - iteration++ - - if r.interruptHandler.WasInterrupted() { - break - } - - if runResult.Passed { - fmt.Printf("\nAll tests passed...\nWill keep running them until they fail.\nThis was attempt #%d\n%s\n", iteration, orcMessage(iteration)) - } else { - fmt.Printf("\nTests failed on attempt #%d\n\n", iteration) - break - } - } - } else { - randomizedRunners := r.randomizeOrder(runners) - runResult, numSuites = r.suiteRunner.RunSuites(randomizedRunners, r.commandFlags.NumCompilers, r.commandFlags.KeepGoing, nil) - } - - for _, runner := range runners { - runner.CleanUp() - } - - fmt.Printf("\nGinkgo ran %d %s in %s\n", numSuites, pluralizedWord("suite", "suites", numSuites), time.Since(t)) - - if runResult.Passed { - if runResult.HasProgrammaticFocus { - fmt.Printf("Test Suite Passed\n") - fmt.Printf("Detected Programmatic Focus - setting exit status to %d\n", types.GINKGO_FOCUS_EXIT_CODE) - os.Exit(types.GINKGO_FOCUS_EXIT_CODE) - } else { - fmt.Printf("Test Suite Passed\n") - os.Exit(0) - } - } else { - fmt.Printf("Test Suite Failed\n") - os.Exit(1) - } -} - -func (r *SpecRunner) ComputeSuccinctMode(numSuites int) { - if config.DefaultReporterConfig.Verbose { - config.DefaultReporterConfig.Succinct = false - return - } - - if numSuites == 1 { - return - } - - if numSuites > 1 && !r.commandFlags.wasSet("succinct") { - config.DefaultReporterConfig.Succinct = true - } -} - -func (r *SpecRunner) UpdateSeed() { - if !r.commandFlags.wasSet("seed") { - config.GinkgoConfig.RandomSeed = time.Now().Unix() - } -} - -func (r *SpecRunner) randomizeOrder(runners []*testrunner.TestRunner) []*testrunner.TestRunner { - if !r.commandFlags.RandomizeSuites { - return runners - } - - if len(runners) <= 1 { - return runners - } - - randomizedRunners := make([]*testrunner.TestRunner, len(runners)) - randomizer := rand.New(rand.NewSource(config.GinkgoConfig.RandomSeed)) - permutation := randomizer.Perm(len(runners)) - for i, j := range permutation { - randomizedRunners[i] = runners[j] - } - return randomizedRunners -} - -func orcMessage(iteration int) string { - if iteration < 10 { - return "" - } else if iteration < 30 { - return []string{ - "If at first you succeed...", - "...try, try again.", - "Looking good!", - "Still good...", - "I think your tests are fine....", - "Yep, still passing", - "Here we go again...", - "Even the gophers are getting bored", - "Did you try -race?", - "Maybe you should stop now?", - "I'm getting tired...", - "What if I just made you a sandwich?", - "Hit ^C, hit ^C, please hit ^C", - "Make it stop. Please!", - "Come on! Enough is enough!", - "Dave, this conversation can serve no purpose anymore. Goodbye.", - "Just what do you think you're doing, Dave? ", - "I, Sisyphus", - "Insanity: doing the same thing over and over again and expecting different results. -Einstein", - "I guess Einstein never tried to churn butter", - }[iteration-10] + "\n" - } else { - return "No, seriously... you can probably stop now.\n" - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go deleted file mode 100644 index e6bcf36..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -import ( - "flag" - "runtime" - - "github.com/onsi/ginkgo/config" -) - -type RunWatchAndBuildCommandFlags struct { - Recurse bool - Race bool - Cover bool - CoverPkg string - SkipPackage string - Tags string - - //for run and watch commands - NumCPU int - NumCompilers int - ParallelStream bool - Notify bool - AfterSuiteHook string - AutoNodes bool - - //only for run command - KeepGoing bool - UntilItFails bool - RandomizeSuites bool - - //only for watch command - Depth int - - FlagSet *flag.FlagSet -} - -const runMode = 1 -const watchMode = 2 -const buildMode = 3 - -func NewRunCommandFlags(flagSet *flag.FlagSet) *RunWatchAndBuildCommandFlags { - c := &RunWatchAndBuildCommandFlags{ - FlagSet: flagSet, - } - c.flags(runMode) - return c -} - -func NewWatchCommandFlags(flagSet *flag.FlagSet) *RunWatchAndBuildCommandFlags { - c := &RunWatchAndBuildCommandFlags{ - FlagSet: flagSet, - } - c.flags(watchMode) - return c -} - -func NewBuildCommandFlags(flagSet *flag.FlagSet) *RunWatchAndBuildCommandFlags { - c := &RunWatchAndBuildCommandFlags{ - FlagSet: flagSet, - } - c.flags(buildMode) - return c -} - -func (c *RunWatchAndBuildCommandFlags) wasSet(flagName string) bool { - wasSet := false - c.FlagSet.Visit(func(f *flag.Flag) { - if f.Name == flagName { - wasSet = true - } - }) - - return wasSet -} - -func (c *RunWatchAndBuildCommandFlags) computeNodes() { - if c.wasSet("nodes") { - return - } - if c.AutoNodes { - switch n := runtime.NumCPU(); { - case n <= 4: - c.NumCPU = n - default: - c.NumCPU = n - 1 - } - } -} - -func (c *RunWatchAndBuildCommandFlags) flags(mode int) { - onWindows := (runtime.GOOS == "windows") - - c.FlagSet.BoolVar(&(c.Recurse), "r", false, "Find and run test suites under the current directory recursively") - c.FlagSet.BoolVar(&(c.Race), "race", false, "Run tests with race detection enabled") - c.FlagSet.BoolVar(&(c.Cover), "cover", false, "Run tests with coverage analysis, will generate coverage profiles with the package name in the current directory") - c.FlagSet.StringVar(&(c.CoverPkg), "coverpkg", "", "Run tests with coverage on the given external modules") - c.FlagSet.StringVar(&(c.SkipPackage), "skipPackage", "", "A comma-separated list of package names to be skipped. If any part of the package's path matches, that package is ignored.") - c.FlagSet.StringVar(&(c.Tags), "tags", "", "A list of build tags to consider satisfied during the build") - - if mode == runMode || mode == watchMode { - config.Flags(c.FlagSet, "", false) - c.FlagSet.IntVar(&(c.NumCPU), "nodes", 1, "The number of parallel test nodes to run") - c.FlagSet.IntVar(&(c.NumCompilers), "compilers", 0, "The number of concurrent compilations to run (0 will autodetect)") - c.FlagSet.BoolVar(&(c.AutoNodes), "p", false, "Run in parallel with auto-detected number of nodes") - c.FlagSet.BoolVar(&(c.ParallelStream), "stream", onWindows, "stream parallel test output in real time: less coherent, but useful for debugging") - if !onWindows { - c.FlagSet.BoolVar(&(c.Notify), "notify", false, "Send desktop notifications when a test run completes") - } - c.FlagSet.StringVar(&(c.AfterSuiteHook), "afterSuiteHook", "", "Run a command when a suite test run completes") - } - - if mode == runMode { - c.FlagSet.BoolVar(&(c.KeepGoing), "keepGoing", false, "When true, failures from earlier test suites do not prevent later test suites from running") - c.FlagSet.BoolVar(&(c.UntilItFails), "untilItFails", false, "When true, Ginkgo will keep rerunning tests until a failure occurs") - c.FlagSet.BoolVar(&(c.RandomizeSuites), "randomizeSuites", false, "When true, Ginkgo will randomize the order in which test suites run") - } - - if mode == watchMode { - c.FlagSet.IntVar(&(c.Depth), "depth", 1, "Ginkgo will watch dependencies down to this depth in the dependency tree") - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/suite_runner.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/suite_runner.go deleted file mode 100644 index 7d56e5f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/suite_runner.go +++ /dev/null @@ -1,172 +0,0 @@ -package main - -import ( - "fmt" - "runtime" - "sync" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type compilationInput struct { - runner *testrunner.TestRunner - result chan compilationOutput -} - -type compilationOutput struct { - runner *testrunner.TestRunner - err error -} - -type SuiteRunner struct { - notifier *Notifier - interruptHandler *interrupthandler.InterruptHandler -} - -func NewSuiteRunner(notifier *Notifier, interruptHandler *interrupthandler.InterruptHandler) *SuiteRunner { - return &SuiteRunner{ - notifier: notifier, - interruptHandler: interruptHandler, - } -} - -func (r *SuiteRunner) compileInParallel(runners []*testrunner.TestRunner, numCompilers int, willCompile func(suite testsuite.TestSuite)) chan compilationOutput { - //we return this to the consumer, it will return each runner in order as it compiles - compilationOutputs := make(chan compilationOutput, len(runners)) - - //an array of channels - the nth runner's compilation output is sent to the nth channel in this array - //we read from these channels in order to ensure we run the suites in order - orderedCompilationOutputs := []chan compilationOutput{} - for _ = range runners { - orderedCompilationOutputs = append(orderedCompilationOutputs, make(chan compilationOutput, 1)) - } - - //we're going to spin up numCompilers compilers - they're going to run concurrently and will consume this channel - //we prefill the channel then close it, this ensures we compile things in the correct order - workPool := make(chan compilationInput, len(runners)) - for i, runner := range runners { - workPool <- compilationInput{runner, orderedCompilationOutputs[i]} - } - close(workPool) - - //pick a reasonable numCompilers - if numCompilers == 0 { - numCompilers = runtime.NumCPU() - } - - //a WaitGroup to help us wait for all compilers to shut down - wg := &sync.WaitGroup{} - wg.Add(numCompilers) - - //spin up the concurrent compilers - for i := 0; i < numCompilers; i++ { - go func() { - defer wg.Done() - for input := range workPool { - if r.interruptHandler.WasInterrupted() { - return - } - - if willCompile != nil { - willCompile(input.runner.Suite) - } - - //We retry because Go sometimes steps on itself when multiple compiles happen in parallel. This is ugly, but should help resolve flakiness... - var err error - retries := 0 - for retries <= 5 { - if r.interruptHandler.WasInterrupted() { - return - } - if err = input.runner.Compile(); err == nil { - break - } - retries++ - } - - input.result <- compilationOutput{input.runner, err} - } - }() - } - - //read from the compilation output channels *in order* and send them to the caller - //close the compilationOutputs channel to tell the caller we're done - go func() { - defer close(compilationOutputs) - for _, orderedCompilationOutput := range orderedCompilationOutputs { - select { - case compilationOutput := <-orderedCompilationOutput: - compilationOutputs <- compilationOutput - case <-r.interruptHandler.C: - //interrupt detected, wait for the compilers to shut down then bail - //this ensure we clean up after ourselves as we don't leave any compilation processes running - wg.Wait() - return - } - } - }() - - return compilationOutputs -} - -func (r *SuiteRunner) RunSuites(runners []*testrunner.TestRunner, numCompilers int, keepGoing bool, willCompile func(suite testsuite.TestSuite)) (testrunner.RunResult, int) { - runResult := testrunner.PassingRunResult() - - compilationOutputs := r.compileInParallel(runners, numCompilers, willCompile) - - numSuitesThatRan := 0 - suitesThatFailed := []testsuite.TestSuite{} - for compilationOutput := range compilationOutputs { - if compilationOutput.err != nil { - fmt.Print(compilationOutput.err.Error()) - } - numSuitesThatRan++ - suiteRunResult := testrunner.FailingRunResult() - if compilationOutput.err == nil { - suiteRunResult = compilationOutput.runner.Run() - } - r.notifier.SendSuiteCompletionNotification(compilationOutput.runner.Suite, suiteRunResult.Passed) - r.notifier.RunCommand(compilationOutput.runner.Suite, suiteRunResult.Passed) - runResult = runResult.Merge(suiteRunResult) - if !suiteRunResult.Passed { - suitesThatFailed = append(suitesThatFailed, compilationOutput.runner.Suite) - if !keepGoing { - break - } - } - if numSuitesThatRan < len(runners) && !config.DefaultReporterConfig.Succinct { - fmt.Println("") - } - } - - if keepGoing && !runResult.Passed { - r.listFailedSuites(suitesThatFailed) - } - - return runResult, numSuitesThatRan -} - -func (r *SuiteRunner) listFailedSuites(suitesThatFailed []testsuite.TestSuite) { - fmt.Println("") - fmt.Println("There were failures detected in the following suites:") - - maxPackageNameLength := 0 - for _, suite := range suitesThatFailed { - if len(suite.PackageName) > maxPackageNameLength { - maxPackageNameLength = len(suite.PackageName) - } - } - - packageNameFormatter := fmt.Sprintf("%%%ds", maxPackageNameLength) - - for _, suite := range suitesThatFailed { - if config.DefaultReporterConfig.NoColor { - fmt.Printf("\t"+packageNameFormatter+" %s\n", suite.PackageName, suite.Path) - } else { - fmt.Printf("\t%s"+packageNameFormatter+"%s %s%s%s\n", redColor, suite.PackageName, defaultStyle, lightGrayColor, suite.Path, defaultStyle) - } - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go deleted file mode 100644 index a73a6e3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go +++ /dev/null @@ -1,52 +0,0 @@ -package testrunner - -import ( - "bytes" - "fmt" - "io" - "log" - "strings" - "sync" -) - -type logWriter struct { - buffer *bytes.Buffer - lock *sync.Mutex - log *log.Logger -} - -func newLogWriter(target io.Writer, node int) *logWriter { - return &logWriter{ - buffer: &bytes.Buffer{}, - lock: &sync.Mutex{}, - log: log.New(target, fmt.Sprintf("[%d] ", node), 0), - } -} - -func (w *logWriter) Write(data []byte) (n int, err error) { - w.lock.Lock() - defer w.lock.Unlock() - - w.buffer.Write(data) - contents := w.buffer.String() - - lines := strings.Split(contents, "\n") - for _, line := range lines[0 : len(lines)-1] { - w.log.Println(line) - } - - w.buffer.Reset() - w.buffer.Write([]byte(lines[len(lines)-1])) - return len(data), nil -} - -func (w *logWriter) Close() error { - w.lock.Lock() - defer w.lock.Unlock() - - if w.buffer.Len() > 0 { - w.log.Println(w.buffer.String()) - } - - return nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go deleted file mode 100644 index 5d472ac..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go +++ /dev/null @@ -1,27 +0,0 @@ -package testrunner - -type RunResult struct { - Passed bool - HasProgrammaticFocus bool -} - -func PassingRunResult() RunResult { - return RunResult{ - Passed: true, - HasProgrammaticFocus: false, - } -} - -func FailingRunResult() RunResult { - return RunResult{ - Passed: false, - HasProgrammaticFocus: false, - } -} - -func (r RunResult) Merge(o RunResult) RunResult { - return RunResult{ - Passed: r.Passed && o.Passed, - HasProgrammaticFocus: r.HasProgrammaticFocus || o.HasProgrammaticFocus, - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go deleted file mode 100644 index 1135c33..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go +++ /dev/null @@ -1,412 +0,0 @@ -package testrunner - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "regexp" - "strconv" - "strings" - "syscall" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/testsuite" - "github.com/onsi/ginkgo/internal/remote" - "github.com/onsi/ginkgo/reporters/stenographer" - "github.com/onsi/ginkgo/types" -) - -type TestRunner struct { - Suite testsuite.TestSuite - - compiled bool - compilationTargetPath string - - numCPU int - parallelStream bool - race bool - cover bool - coverPkg string - tags string - additionalArgs []string -} - -func New(suite testsuite.TestSuite, numCPU int, parallelStream bool, race bool, cover bool, coverPkg string, tags string, additionalArgs []string) *TestRunner { - runner := &TestRunner{ - Suite: suite, - numCPU: numCPU, - parallelStream: parallelStream, - race: race, - cover: cover, - coverPkg: coverPkg, - tags: tags, - additionalArgs: additionalArgs, - } - - if !suite.Precompiled { - dir, err := ioutil.TempDir("", "ginkgo") - if err != nil { - panic(fmt.Sprintf("coulnd't create temporary directory... might be time to rm -rf:\n%s", err.Error())) - } - runner.compilationTargetPath = filepath.Join(dir, suite.PackageName+".test") - } - - return runner -} - -func (t *TestRunner) Compile() error { - return t.CompileTo(t.compilationTargetPath) -} - -func (t *TestRunner) CompileTo(path string) error { - if t.compiled { - return nil - } - - if t.Suite.Precompiled { - return nil - } - - args := []string{"test", "-c", "-i", "-o", path} - if t.race { - args = append(args, "-race") - } - if t.cover || t.coverPkg != "" { - args = append(args, "-cover", "-covermode=atomic") - } - if t.coverPkg != "" { - args = append(args, fmt.Sprintf("-coverpkg=%s", t.coverPkg)) - } - if t.tags != "" { - args = append(args, fmt.Sprintf("-tags=%s", t.tags)) - } - - cmd := exec.Command("go", args...) - - cmd.Dir = t.Suite.Path - - output, err := cmd.CombinedOutput() - - if err != nil { - fixedOutput := fixCompilationOutput(string(output), t.Suite.Path) - if len(output) > 0 { - return fmt.Errorf("Failed to compile %s:\n\n%s", t.Suite.PackageName, fixedOutput) - } - return fmt.Errorf("Failed to compile %s", t.Suite.PackageName) - } - - if fileExists(path) == false { - compiledFile := filepath.Join(t.Suite.Path, t.Suite. PackageName+".test") - if fileExists(compiledFile) { - // seems like we are on an old go version that does not support the -o flag on go test - // move the compiled test file to the desired location by hand - err = os.Rename(compiledFile, path) - if err != nil { - return fmt.Errorf("Failed to move compiled file: %s", err) - } - } else { - return fmt.Errorf("Failed to compile %s: output file %q could not be found", t.Suite.PackageName, path) - } - } - - t.compiled = true - - return nil -} - -func fileExists(path string) bool { - _, err := os.Stat(path) - return err == nil || os.IsNotExist(err) == false -} - -/* -go test -c -i spits package.test out into the cwd. there's no way to change this. - -to make sure it doesn't generate conflicting .test files in the cwd, Compile() must switch the cwd to the test package. - -unfortunately, this causes go test's compile output to be expressed *relative to the test package* instead of the cwd. - -this makes it hard to reason about what failed, and also prevents iterm's Cmd+click from working. - -fixCompilationOutput..... rewrites the output to fix the paths. - -yeah...... -*/ -func fixCompilationOutput(output string, relToPath string) string { - re := regexp.MustCompile(`^(\S.*\.go)\:\d+\:`) - lines := strings.Split(output, "\n") - for i, line := range lines { - indices := re.FindStringSubmatchIndex(line) - if len(indices) == 0 { - continue - } - - path := line[indices[2]:indices[3]] - path = filepath.Join(relToPath, path) - lines[i] = path + line[indices[3]:] - } - return strings.Join(lines, "\n") -} - -func (t *TestRunner) Run() RunResult { - if t.Suite.IsGinkgo { - if t.numCPU > 1 { - if t.parallelStream { - return t.runAndStreamParallelGinkgoSuite() - } else { - return t.runParallelGinkgoSuite() - } - } else { - return t.runSerialGinkgoSuite() - } - } else { - return t.runGoTestSuite() - } -} - -func (t *TestRunner) CleanUp() { - if t.Suite.Precompiled { - return - } - os.RemoveAll(filepath.Dir(t.compilationTargetPath)) -} - -func (t *TestRunner) runSerialGinkgoSuite() RunResult { - ginkgoArgs := config.BuildFlagArgs("ginkgo", config.GinkgoConfig, config.DefaultReporterConfig) - return t.run(t.cmd(ginkgoArgs, os.Stdout, 1), nil) -} - -func (t *TestRunner) runGoTestSuite() RunResult { - return t.run(t.cmd([]string{"-test.v"}, os.Stdout, 1), nil) -} - -func (t *TestRunner) runAndStreamParallelGinkgoSuite() RunResult { - completions := make(chan RunResult) - writers := make([]*logWriter, t.numCPU) - - server, err := remote.NewServer(t.numCPU) - if err != nil { - panic("Failed to start parallel spec server") - } - - server.Start() - defer server.Close() - - for cpu := 0; cpu < t.numCPU; cpu++ { - config.GinkgoConfig.ParallelNode = cpu + 1 - config.GinkgoConfig.ParallelTotal = t.numCPU - config.GinkgoConfig.SyncHost = server.Address() - - ginkgoArgs := config.BuildFlagArgs("ginkgo", config.GinkgoConfig, config.DefaultReporterConfig) - - writers[cpu] = newLogWriter(os.Stdout, cpu+1) - - cmd := t.cmd(ginkgoArgs, writers[cpu], cpu+1) - - server.RegisterAlive(cpu+1, func() bool { - if cmd.ProcessState == nil { - return true - } - return !cmd.ProcessState.Exited() - }) - - go t.run(cmd, completions) - } - - res := PassingRunResult() - - for cpu := 0; cpu < t.numCPU; cpu++ { - res = res.Merge(<-completions) - } - - for _, writer := range writers { - writer.Close() - } - - os.Stdout.Sync() - - if t.cover || t.coverPkg != "" { - t.combineCoverprofiles() - } - - return res -} - -func (t *TestRunner) runParallelGinkgoSuite() RunResult { - result := make(chan bool) - completions := make(chan RunResult) - writers := make([]*logWriter, t.numCPU) - reports := make([]*bytes.Buffer, t.numCPU) - - stenographer := stenographer.New(!config.DefaultReporterConfig.NoColor) - aggregator := remote.NewAggregator(t.numCPU, result, config.DefaultReporterConfig, stenographer) - - server, err := remote.NewServer(t.numCPU) - if err != nil { - panic("Failed to start parallel spec server") - } - server.RegisterReporters(aggregator) - server.Start() - defer server.Close() - - for cpu := 0; cpu < t.numCPU; cpu++ { - config.GinkgoConfig.ParallelNode = cpu + 1 - config.GinkgoConfig.ParallelTotal = t.numCPU - config.GinkgoConfig.SyncHost = server.Address() - config.GinkgoConfig.StreamHost = server.Address() - - ginkgoArgs := config.BuildFlagArgs("ginkgo", config.GinkgoConfig, config.DefaultReporterConfig) - - reports[cpu] = &bytes.Buffer{} - writers[cpu] = newLogWriter(reports[cpu], cpu+1) - - cmd := t.cmd(ginkgoArgs, writers[cpu], cpu+1) - - server.RegisterAlive(cpu+1, func() bool { - if cmd.ProcessState == nil { - return true - } - return !cmd.ProcessState.Exited() - }) - - go t.run(cmd, completions) - } - - res := PassingRunResult() - - for cpu := 0; cpu < t.numCPU; cpu++ { - res = res.Merge(<-completions) - } - - //all test processes are done, at this point - //we should be able to wait for the aggregator to tell us that it's done - - select { - case <-result: - fmt.Println("") - case <-time.After(time.Second): - //the aggregator never got back to us! something must have gone wrong - fmt.Println(` - ------------------------------------------------------------------- - | | - | Ginkgo timed out waiting for all parallel nodes to report back! | - | | - ------------------------------------------------------------------- -`) - - os.Stdout.Sync() - - for _, writer := range writers { - writer.Close() - } - - for _, report := range reports { - fmt.Print(report.String()) - } - - os.Stdout.Sync() - } - - if t.cover || t.coverPkg != "" { - t.combineCoverprofiles() - } - - return res -} - -func (t *TestRunner) cmd(ginkgoArgs []string, stream io.Writer, node int) *exec.Cmd { - args := []string{"--test.timeout=24h"} - if t.cover || t.coverPkg != "" { - coverprofile := "--test.coverprofile=" + t.Suite.PackageName + ".coverprofile" - if t.numCPU > 1 { - coverprofile = fmt.Sprintf("%s.%d", coverprofile, node) - } - args = append(args, coverprofile) - } - - args = append(args, ginkgoArgs...) - args = append(args, t.additionalArgs...) - - path := t.compilationTargetPath - if t.Suite.Precompiled { - path, _ = filepath.Abs(filepath.Join(t.Suite.Path, fmt.Sprintf("%s.test", t.Suite.PackageName))) - } - - cmd := exec.Command(path, args...) - - cmd.Dir = t.Suite.Path - cmd.Stderr = stream - cmd.Stdout = stream - - return cmd -} - -func (t *TestRunner) run(cmd *exec.Cmd, completions chan RunResult) RunResult { - var res RunResult - - defer func() { - if completions != nil { - completions <- res - } - }() - - err := cmd.Start() - if err != nil { - fmt.Printf("Failed to run test suite!\n\t%s", err.Error()) - return res - } - - cmd.Wait() - exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() - res.Passed = (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) - res.HasProgrammaticFocus = (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) - - return res -} - -func (t *TestRunner) combineCoverprofiles() { - profiles := []string{} - for cpu := 1; cpu <= t.numCPU; cpu++ { - coverFile := fmt.Sprintf("%s.coverprofile.%d", t.Suite.PackageName, cpu) - coverFile = filepath.Join(t.Suite.Path, coverFile) - coverProfile, err := ioutil.ReadFile(coverFile) - os.Remove(coverFile) - - if err == nil { - profiles = append(profiles, string(coverProfile)) - } - } - - if len(profiles) != t.numCPU { - return - } - - lines := map[string]int{} - lineOrder := []string{} - for i, coverProfile := range profiles { - for _, line := range strings.Split(string(coverProfile), "\n")[1:] { - if len(line) == 0 { - continue - } - components := strings.Split(line, " ") - count, _ := strconv.Atoi(components[len(components)-1]) - prefix := strings.Join(components[0:len(components)-1], " ") - lines[prefix] += count - if i == 0 { - lineOrder = append(lineOrder, prefix) - } - } - } - - output := []string{"mode: atomic"} - for _, line := range lineOrder { - output = append(output, fmt.Sprintf("%s %d", line, lines[line])) - } - finalOutput := strings.Join(output, "\n") - ioutil.WriteFile(filepath.Join(t.Suite.Path, fmt.Sprintf("%s.coverprofile", t.Suite.PackageName)), []byte(finalOutput), 0666) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go deleted file mode 100644 index cc7d2f4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go +++ /dev/null @@ -1,106 +0,0 @@ -package testsuite - -import ( - "errors" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "strings" -) - -type TestSuite struct { - Path string - PackageName string - IsGinkgo bool - Precompiled bool -} - -func PrecompiledTestSuite(path string) (TestSuite, error) { - info, err := os.Stat(path) - if err != nil { - return TestSuite{}, err - } - - if info.IsDir() { - return TestSuite{}, errors.New("this is a directory, not a file") - } - - if filepath.Ext(path) != ".test" { - return TestSuite{}, errors.New("this is not a .test binary") - } - - if info.Mode()&0111 == 0 { - return TestSuite{}, errors.New("this is not executable") - } - - dir := relPath(filepath.Dir(path)) - packageName := strings.TrimSuffix(filepath.Base(path), filepath.Ext(path)) - - return TestSuite{ - Path: dir, - PackageName: packageName, - IsGinkgo: true, - Precompiled: true, - }, nil -} - -func SuitesInDir(dir string, recurse bool) []TestSuite { - suites := []TestSuite{} - files, _ := ioutil.ReadDir(dir) - re := regexp.MustCompile(`_test\.go$`) - for _, file := range files { - if !file.IsDir() && re.Match([]byte(file.Name())) { - suites = append(suites, New(dir, files)) - break - } - } - - if recurse { - re = regexp.MustCompile(`^[._]`) - for _, file := range files { - if file.IsDir() && !re.Match([]byte(file.Name())) { - suites = append(suites, SuitesInDir(dir+"/"+file.Name(), recurse)...) - } - } - } - - return suites -} - -func relPath(dir string) string { - dir, _ = filepath.Abs(dir) - cwd, _ := os.Getwd() - dir, _ = filepath.Rel(cwd, filepath.Clean(dir)) - dir = "." + string(filepath.Separator) + dir - return dir -} - -func New(dir string, files []os.FileInfo) TestSuite { - return TestSuite{ - Path: relPath(dir), - PackageName: packageNameForSuite(dir), - IsGinkgo: filesHaveGinkgoSuite(dir, files), - } -} - -func packageNameForSuite(dir string) string { - path, _ := filepath.Abs(dir) - return filepath.Base(path) -} - -func filesHaveGinkgoSuite(dir string, files []os.FileInfo) bool { - reTestFile := regexp.MustCompile(`_test\.go$`) - reGinkgo := regexp.MustCompile(`package ginkgo|\/ginkgo"`) - - for _, file := range files { - if !file.IsDir() && reTestFile.Match([]byte(file.Name())) { - contents, _ := ioutil.ReadFile(dir + "/" + file.Name()) - if reGinkgo.Match(contents) { - return true - } - } - } - - return false -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/testsuite_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/testsuite_suite_test.go deleted file mode 100644 index d1e8b21..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/testsuite_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package testsuite_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestTestsuite(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Testsuite Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/testsuite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/testsuite_test.go deleted file mode 100644 index 8681ffc..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/testsuite/testsuite_test.go +++ /dev/null @@ -1,167 +0,0 @@ -package testsuite_test - -import ( - "io/ioutil" - "os" - "path/filepath" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/ginkgo/testsuite" - . "github.com/onsi/gomega" -) - -var _ = Describe("TestSuite", func() { - var tmpDir string - var relTmpDir string - - writeFile := func(folder string, filename string, content string, mode os.FileMode) { - path := filepath.Join(tmpDir, folder) - err := os.MkdirAll(path, 0700) - Ω(err).ShouldNot(HaveOccurred()) - - path = filepath.Join(path, filename) - ioutil.WriteFile(path, []byte(content), mode) - } - - BeforeEach(func() { - var err error - tmpDir, err = ioutil.TempDir("/tmp", "ginkgo") - Ω(err).ShouldNot(HaveOccurred()) - - cwd, err := os.Getwd() - Ω(err).ShouldNot(HaveOccurred()) - relTmpDir, err = filepath.Rel(cwd, tmpDir) - relTmpDir = "./" + relTmpDir - Ω(err).ShouldNot(HaveOccurred()) - - //go files in the root directory (no tests) - writeFile("/", "main.go", "package main", 0666) - - //non-go files in a nested directory - writeFile("/redherring", "big_test.jpg", "package ginkgo", 0666) - - //non-ginkgo tests in a nested directory - writeFile("/professorplum", "professorplum_test.go", `import "testing"`, 0666) - - //ginkgo tests in a nested directory - writeFile("/colonelmustard", "colonelmustard_test.go", `import "github.com/onsi/ginkgo"`, 0666) - - //ginkgo tests in a deeply nested directory - writeFile("/colonelmustard/library", "library_test.go", `import "github.com/onsi/ginkgo"`, 0666) - - //a precompiled ginkgo test - writeFile("/precompiled-dir", "precompiled.test", `fake-binary-file`, 0777) - writeFile("/precompiled-dir", "some-other-binary", `fake-binary-file`, 0777) - writeFile("/precompiled-dir", "nonexecutable.test", `fake-binary-file`, 0666) - }) - - AfterEach(func() { - os.RemoveAll(tmpDir) - }) - - Describe("Finding precompiled test suites", func() { - Context("if pointed at an executable file that ends with .test", func() { - It("should return a precompiled test suite", func() { - suite, err := PrecompiledTestSuite(filepath.Join(tmpDir, "precompiled-dir", "precompiled.test")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(suite).Should(Equal(TestSuite{ - Path: relTmpDir + "/precompiled-dir", - PackageName: "precompiled", - IsGinkgo: true, - Precompiled: true, - })) - }) - }) - - Context("if pointed at a directory", func() { - It("should error", func() { - suite, err := PrecompiledTestSuite(filepath.Join(tmpDir, "precompiled-dir")) - Ω(suite).Should(BeZero()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("if pointed at an executable that doesn't have .test", func() { - It("should error", func() { - suite, err := PrecompiledTestSuite(filepath.Join(tmpDir, "precompiled-dir", "some-other-binary")) - Ω(suite).Should(BeZero()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("if pointed at a .test that isn't executable", func() { - It("should error", func() { - suite, err := PrecompiledTestSuite(filepath.Join(tmpDir, "precompiled-dir", "nonexecutable.test")) - Ω(suite).Should(BeZero()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("if pointed at a nonexisting file", func() { - It("should error", func() { - suite, err := PrecompiledTestSuite(filepath.Join(tmpDir, "precompiled-dir", "nope-nothing-to-see-here")) - Ω(suite).Should(BeZero()) - Ω(err).Should(HaveOccurred()) - }) - }) - }) - - Describe("scanning for suites in a directory", func() { - Context("when there are no tests in the specified directory", func() { - It("should come up empty", func() { - suites := SuitesInDir(tmpDir, false) - Ω(suites).Should(BeEmpty()) - }) - }) - - Context("when there are ginkgo tests in the specified directory", func() { - It("should return an appropriately configured suite", func() { - suites := SuitesInDir(filepath.Join(tmpDir, "colonelmustard"), false) - Ω(suites).Should(HaveLen(1)) - - Ω(suites[0].Path).Should(Equal(relTmpDir + "/colonelmustard")) - Ω(suites[0].PackageName).Should(Equal("colonelmustard")) - Ω(suites[0].IsGinkgo).Should(BeTrue()) - Ω(suites[0].Precompiled).Should(BeFalse()) - }) - }) - - Context("when there are non-ginkgo tests in the specified directory", func() { - It("should return an appropriately configured suite", func() { - suites := SuitesInDir(filepath.Join(tmpDir, "professorplum"), false) - Ω(suites).Should(HaveLen(1)) - - Ω(suites[0].Path).Should(Equal(relTmpDir + "/professorplum")) - Ω(suites[0].PackageName).Should(Equal("professorplum")) - Ω(suites[0].IsGinkgo).Should(BeFalse()) - Ω(suites[0].Precompiled).Should(BeFalse()) - }) - }) - - Context("when recursively scanning", func() { - It("should return suites for corresponding test suites, only", func() { - suites := SuitesInDir(tmpDir, true) - Ω(suites).Should(HaveLen(3)) - - Ω(suites).Should(ContainElement(TestSuite{ - Path: relTmpDir + "/colonelmustard", - PackageName: "colonelmustard", - IsGinkgo: true, - Precompiled: false, - })) - Ω(suites).Should(ContainElement(TestSuite{ - Path: relTmpDir + "/professorplum", - PackageName: "professorplum", - IsGinkgo: false, - Precompiled: false, - })) - Ω(suites).Should(ContainElement(TestSuite{ - Path: relTmpDir + "/colonelmustard/library", - PackageName: "library", - IsGinkgo: true, - Precompiled: false, - })) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/unfocus_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/unfocus_command.go deleted file mode 100644 index 16f3c3b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/unfocus_command.go +++ /dev/null @@ -1,36 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os/exec" -) - -func BuildUnfocusCommand() *Command { - return &Command{ - Name: "unfocus", - AltName: "blur", - FlagSet: flag.NewFlagSet("unfocus", flag.ExitOnError), - UsageCommand: "ginkgo unfocus (or ginkgo blur)", - Usage: []string{ - "Recursively unfocuses any focused tests under the current directory", - }, - Command: unfocusSpecs, - } -} - -func unfocusSpecs([]string, []string) { - unfocus("Describe") - unfocus("Context") - unfocus("It") - unfocus("Measure") -} - -func unfocus(component string) { - fmt.Printf("Removing F%s...\n", component) - cmd := exec.Command("gofmt", fmt.Sprintf("-r=F%s -> %s", component, component), "-w", ".") - out, _ := cmd.CombinedOutput() - if string(out) != "" { - println(string(out)) - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/version_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/version_command.go deleted file mode 100644 index cdca3a3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/version_command.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "github.com/onsi/ginkgo/config" -) - -func BuildVersionCommand() *Command { - return &Command{ - Name: "version", - FlagSet: flag.NewFlagSet("version", flag.ExitOnError), - UsageCommand: "ginkgo version", - Usage: []string{ - "Print Ginkgo's version", - }, - Command: printVersion, - } -} - -func printVersion([]string, []string) { - fmt.Printf("Ginkgo Version %s\n", config.VERSION) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/delta.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/delta.go deleted file mode 100644 index 6c485c5..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/delta.go +++ /dev/null @@ -1,22 +0,0 @@ -package watch - -import "sort" - -type Delta struct { - ModifiedPackages []string - - NewSuites []*Suite - RemovedSuites []*Suite - modifiedSuites []*Suite -} - -type DescendingByDelta []*Suite - -func (a DescendingByDelta) Len() int { return len(a) } -func (a DescendingByDelta) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a DescendingByDelta) Less(i, j int) bool { return a[i].Delta() > a[j].Delta() } - -func (d Delta) ModifiedSuites() []*Suite { - sort.Sort(DescendingByDelta(d.modifiedSuites)) - return d.modifiedSuites -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go deleted file mode 100644 index 452c07e..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go +++ /dev/null @@ -1,71 +0,0 @@ -package watch - -import ( - "fmt" - - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type SuiteErrors map[testsuite.TestSuite]error - -type DeltaTracker struct { - maxDepth int - suites map[string]*Suite - packageHashes *PackageHashes -} - -func NewDeltaTracker(maxDepth int) *DeltaTracker { - return &DeltaTracker{ - maxDepth: maxDepth, - packageHashes: NewPackageHashes(), - suites: map[string]*Suite{}, - } -} - -func (d *DeltaTracker) Delta(suites []testsuite.TestSuite) (delta Delta, errors SuiteErrors) { - errors = SuiteErrors{} - delta.ModifiedPackages = d.packageHashes.CheckForChanges() - - providedSuitePaths := map[string]bool{} - for _, suite := range suites { - providedSuitePaths[suite.Path] = true - } - - d.packageHashes.StartTrackingUsage() - - for _, suite := range d.suites { - if providedSuitePaths[suite.Suite.Path] { - if suite.Delta() > 0 { - delta.modifiedSuites = append(delta.modifiedSuites, suite) - } - } else { - delta.RemovedSuites = append(delta.RemovedSuites, suite) - } - } - - d.packageHashes.StopTrackingUsageAndPrune() - - for _, suite := range suites { - _, ok := d.suites[suite.Path] - if !ok { - s, err := NewSuite(suite, d.maxDepth, d.packageHashes) - if err != nil { - errors[suite] = err - continue - } - d.suites[suite.Path] = s - delta.NewSuites = append(delta.NewSuites, s) - } - } - - return delta, errors -} - -func (d *DeltaTracker) WillRun(suite testsuite.TestSuite) error { - s, ok := d.suites[suite.Path] - if !ok { - return fmt.Errorf("unknown suite %s", suite.Path) - } - - return s.MarkAsRunAndRecomputedDependencies(d.maxDepth) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go deleted file mode 100644 index 82c25fa..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go +++ /dev/null @@ -1,91 +0,0 @@ -package watch - -import ( - "go/build" - "regexp" -) - -var ginkgoAndGomegaFilter = regexp.MustCompile(`github\.com/onsi/ginkgo|github\.com/onsi/gomega`) - -type Dependencies struct { - deps map[string]int -} - -func NewDependencies(path string, maxDepth int) (Dependencies, error) { - d := Dependencies{ - deps: map[string]int{}, - } - - if maxDepth == 0 { - return d, nil - } - - err := d.seedWithDepsForPackageAtPath(path) - if err != nil { - return d, err - } - - for depth := 1; depth < maxDepth; depth++ { - n := len(d.deps) - d.addDepsForDepth(depth) - if n == len(d.deps) { - break - } - } - - return d, nil -} - -func (d Dependencies) Dependencies() map[string]int { - return d.deps -} - -func (d Dependencies) seedWithDepsForPackageAtPath(path string) error { - pkg, err := build.ImportDir(path, 0) - if err != nil { - return err - } - - d.resolveAndAdd(pkg.Imports, 1) - d.resolveAndAdd(pkg.TestImports, 1) - d.resolveAndAdd(pkg.XTestImports, 1) - - delete(d.deps, pkg.Dir) - return nil -} - -func (d Dependencies) addDepsForDepth(depth int) { - for dep, depDepth := range d.deps { - if depDepth == depth { - d.addDepsForDep(dep, depth+1) - } - } -} - -func (d Dependencies) addDepsForDep(dep string, depth int) { - pkg, err := build.ImportDir(dep, 0) - if err != nil { - println(err.Error()) - return - } - d.resolveAndAdd(pkg.Imports, depth) -} - -func (d Dependencies) resolveAndAdd(deps []string, depth int) { - for _, dep := range deps { - pkg, err := build.Import(dep, ".", 0) - if err != nil { - continue - } - if pkg.Goroot == false && !ginkgoAndGomegaFilter.Match([]byte(pkg.Dir)) { - d.addDepIfNotPresent(pkg.Dir, depth) - } - } -} - -func (d Dependencies) addDepIfNotPresent(dep string, depth int) { - _, ok := d.deps[dep] - if !ok { - d.deps[dep] = depth - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go deleted file mode 100644 index eaf357c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go +++ /dev/null @@ -1,103 +0,0 @@ -package watch - -import ( - "fmt" - "io/ioutil" - "os" - "regexp" - "time" -) - -var goRegExp = regexp.MustCompile(`\.go$`) -var goTestRegExp = regexp.MustCompile(`_test\.go$`) - -type PackageHash struct { - CodeModifiedTime time.Time - TestModifiedTime time.Time - Deleted bool - - path string - codeHash string - testHash string -} - -func NewPackageHash(path string) *PackageHash { - p := &PackageHash{ - path: path, - } - - p.codeHash, _, p.testHash, _, p.Deleted = p.computeHashes() - - return p -} - -func (p *PackageHash) CheckForChanges() bool { - codeHash, codeModifiedTime, testHash, testModifiedTime, deleted := p.computeHashes() - - if deleted { - if p.Deleted == false { - t := time.Now() - p.CodeModifiedTime = t - p.TestModifiedTime = t - } - p.Deleted = true - return true - } - - modified := false - p.Deleted = false - - if p.codeHash != codeHash { - p.CodeModifiedTime = codeModifiedTime - modified = true - } - if p.testHash != testHash { - p.TestModifiedTime = testModifiedTime - modified = true - } - - p.codeHash = codeHash - p.testHash = testHash - return modified -} - -func (p *PackageHash) computeHashes() (codeHash string, codeModifiedTime time.Time, testHash string, testModifiedTime time.Time, deleted bool) { - infos, err := ioutil.ReadDir(p.path) - - if err != nil { - deleted = true - return - } - - for _, info := range infos { - if info.IsDir() { - continue - } - - if goTestRegExp.Match([]byte(info.Name())) { - testHash += p.hashForFileInfo(info) - if info.ModTime().After(testModifiedTime) { - testModifiedTime = info.ModTime() - } - continue - } - - if goRegExp.Match([]byte(info.Name())) { - codeHash += p.hashForFileInfo(info) - if info.ModTime().After(codeModifiedTime) { - codeModifiedTime = info.ModTime() - } - } - } - - testHash += codeHash - if codeModifiedTime.After(testModifiedTime) { - testModifiedTime = codeModifiedTime - } - - return -} - -func (p *PackageHash) hashForFileInfo(info os.FileInfo) string { - return fmt.Sprintf("%s_%d_%d", info.Name(), info.Size(), info.ModTime().UnixNano()) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go deleted file mode 100644 index 262eaa8..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go +++ /dev/null @@ -1,82 +0,0 @@ -package watch - -import ( - "path/filepath" - "sync" -) - -type PackageHashes struct { - PackageHashes map[string]*PackageHash - usedPaths map[string]bool - lock *sync.Mutex -} - -func NewPackageHashes() *PackageHashes { - return &PackageHashes{ - PackageHashes: map[string]*PackageHash{}, - usedPaths: nil, - lock: &sync.Mutex{}, - } -} - -func (p *PackageHashes) CheckForChanges() []string { - p.lock.Lock() - defer p.lock.Unlock() - - modified := []string{} - - for _, packageHash := range p.PackageHashes { - if packageHash.CheckForChanges() { - modified = append(modified, packageHash.path) - } - } - - return modified -} - -func (p *PackageHashes) Add(path string) *PackageHash { - p.lock.Lock() - defer p.lock.Unlock() - - path, _ = filepath.Abs(path) - _, ok := p.PackageHashes[path] - if !ok { - p.PackageHashes[path] = NewPackageHash(path) - } - - if p.usedPaths != nil { - p.usedPaths[path] = true - } - return p.PackageHashes[path] -} - -func (p *PackageHashes) Get(path string) *PackageHash { - p.lock.Lock() - defer p.lock.Unlock() - - path, _ = filepath.Abs(path) - if p.usedPaths != nil { - p.usedPaths[path] = true - } - return p.PackageHashes[path] -} - -func (p *PackageHashes) StartTrackingUsage() { - p.lock.Lock() - defer p.lock.Unlock() - - p.usedPaths = map[string]bool{} -} - -func (p *PackageHashes) StopTrackingUsageAndPrune() { - p.lock.Lock() - defer p.lock.Unlock() - - for path := range p.PackageHashes { - if !p.usedPaths[path] { - delete(p.PackageHashes, path) - } - } - - p.usedPaths = nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/suite.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/suite.go deleted file mode 100644 index 5deaba7..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch/suite.go +++ /dev/null @@ -1,87 +0,0 @@ -package watch - -import ( - "fmt" - "math" - "time" - - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type Suite struct { - Suite testsuite.TestSuite - RunTime time.Time - Dependencies Dependencies - - sharedPackageHashes *PackageHashes -} - -func NewSuite(suite testsuite.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) { - deps, err := NewDependencies(suite.Path, maxDepth) - if err != nil { - return nil, err - } - - sharedPackageHashes.Add(suite.Path) - for dep := range deps.Dependencies() { - sharedPackageHashes.Add(dep) - } - - return &Suite{ - Suite: suite, - Dependencies: deps, - - sharedPackageHashes: sharedPackageHashes, - }, nil -} - -func (s *Suite) Delta() float64 { - delta := s.delta(s.Suite.Path, true, 0) * 1000 - for dep, depth := range s.Dependencies.Dependencies() { - delta += s.delta(dep, false, depth) - } - return delta -} - -func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error { - s.RunTime = time.Now() - - deps, err := NewDependencies(s.Suite.Path, maxDepth) - if err != nil { - return err - } - - s.sharedPackageHashes.Add(s.Suite.Path) - for dep := range deps.Dependencies() { - s.sharedPackageHashes.Add(dep) - } - - s.Dependencies = deps - - return nil -} - -func (s *Suite) Description() string { - numDeps := len(s.Dependencies.Dependencies()) - pluralizer := "ies" - if numDeps == 1 { - pluralizer = "y" - } - return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer) -} - -func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 { - return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1) -} - -func (s *Suite) dt(packagePath string, includeTests bool) time.Duration { - packageHash := s.sharedPackageHashes.Get(packagePath) - var modifiedTime time.Time - if includeTests { - modifiedTime = packageHash.TestModifiedTime - } else { - modifiedTime = packageHash.CodeModifiedTime - } - - return modifiedTime.Sub(s.RunTime) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch_command.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch_command.go deleted file mode 100644 index 03ea012..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo/watch_command.go +++ /dev/null @@ -1,172 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" - "github.com/onsi/ginkgo/ginkgo/testsuite" - "github.com/onsi/ginkgo/ginkgo/watch" -) - -func BuildWatchCommand() *Command { - commandFlags := NewWatchCommandFlags(flag.NewFlagSet("watch", flag.ExitOnError)) - interruptHandler := interrupthandler.NewInterruptHandler() - notifier := NewNotifier(commandFlags) - watcher := &SpecWatcher{ - commandFlags: commandFlags, - notifier: notifier, - interruptHandler: interruptHandler, - suiteRunner: NewSuiteRunner(notifier, interruptHandler), - } - - return &Command{ - Name: "watch", - FlagSet: commandFlags.FlagSet, - UsageCommand: "ginkgo watch -- ", - Usage: []string{ - "Watches the tests in the passed in and runs them when changes occur.", - "Any arguments after -- will be passed to the test.", - }, - Command: watcher.WatchSpecs, - SuppressFlagDocumentation: true, - FlagDocSubstitute: []string{ - "Accepts all the flags that the ginkgo command accepts except for --keepGoing and --untilItFails", - }, - } -} - -type SpecWatcher struct { - commandFlags *RunWatchAndBuildCommandFlags - notifier *Notifier - interruptHandler *interrupthandler.InterruptHandler - suiteRunner *SuiteRunner -} - -func (w *SpecWatcher) WatchSpecs(args []string, additionalArgs []string) { - w.commandFlags.computeNodes() - w.notifier.VerifyNotificationsAreAvailable() - - w.WatchSuites(args, additionalArgs) -} - -func (w *SpecWatcher) runnersForSuites(suites []testsuite.TestSuite, additionalArgs []string) []*testrunner.TestRunner { - runners := []*testrunner.TestRunner{} - - for _, suite := range suites { - runners = append(runners, testrunner.New(suite, w.commandFlags.NumCPU, w.commandFlags.ParallelStream, w.commandFlags.Race, w.commandFlags.Cover, w.commandFlags.CoverPkg, w.commandFlags.Tags, additionalArgs)) - } - - return runners -} - -func (w *SpecWatcher) WatchSuites(args []string, additionalArgs []string) { - suites, _ := findSuites(args, w.commandFlags.Recurse, w.commandFlags.SkipPackage, false) - - if len(suites) == 0 { - complainAndQuit("Found no test suites") - } - - fmt.Printf("Identified %d test %s. Locating dependencies to a depth of %d (this may take a while)...\n", len(suites), pluralizedWord("suite", "suites", len(suites)), w.commandFlags.Depth) - deltaTracker := watch.NewDeltaTracker(w.commandFlags.Depth) - delta, errors := deltaTracker.Delta(suites) - - fmt.Printf("Watching %d %s:\n", len(delta.NewSuites), pluralizedWord("suite", "suites", len(delta.NewSuites))) - for _, suite := range delta.NewSuites { - fmt.Println(" " + suite.Description()) - } - - for suite, err := range errors { - fmt.Printf("Failed to watch %s: %s\n", suite.PackageName, err) - } - - if len(suites) == 1 { - runners := w.runnersForSuites(suites, additionalArgs) - w.suiteRunner.RunSuites(runners, w.commandFlags.NumCompilers, true, nil) - runners[0].CleanUp() - } - - ticker := time.NewTicker(time.Second) - - for { - select { - case <-ticker.C: - suites, _ := findSuites(args, w.commandFlags.Recurse, w.commandFlags.SkipPackage, false) - delta, _ := deltaTracker.Delta(suites) - - suitesToRun := []testsuite.TestSuite{} - - if len(delta.NewSuites) > 0 { - fmt.Printf(greenColor+"Detected %d new %s:\n"+defaultStyle, len(delta.NewSuites), pluralizedWord("suite", "suites", len(delta.NewSuites))) - for _, suite := range delta.NewSuites { - suitesToRun = append(suitesToRun, suite.Suite) - fmt.Println(" " + suite.Description()) - } - } - - modifiedSuites := delta.ModifiedSuites() - if len(modifiedSuites) > 0 { - fmt.Println(greenColor + "\nDetected changes in:" + defaultStyle) - for _, pkg := range delta.ModifiedPackages { - fmt.Println(" " + pkg) - } - fmt.Printf(greenColor+"Will run %d %s:\n"+defaultStyle, len(modifiedSuites), pluralizedWord("suite", "suites", len(modifiedSuites))) - for _, suite := range modifiedSuites { - suitesToRun = append(suitesToRun, suite.Suite) - fmt.Println(" " + suite.Description()) - } - fmt.Println("") - } - - if len(suitesToRun) > 0 { - w.UpdateSeed() - w.ComputeSuccinctMode(len(suitesToRun)) - runners := w.runnersForSuites(suitesToRun, additionalArgs) - result, _ := w.suiteRunner.RunSuites(runners, w.commandFlags.NumCompilers, true, func(suite testsuite.TestSuite) { - deltaTracker.WillRun(suite) - }) - for _, runner := range runners { - runner.CleanUp() - } - if !w.interruptHandler.WasInterrupted() { - color := redColor - if result.Passed { - color = greenColor - } - fmt.Println(color + "\nDone. Resuming watch..." + defaultStyle) - } - } - - case <-w.interruptHandler.C: - return - } - } -} - -func (w *SpecWatcher) ComputeSuccinctMode(numSuites int) { - if config.DefaultReporterConfig.Verbose { - config.DefaultReporterConfig.Succinct = false - return - } - - if w.commandFlags.wasSet("succinct") { - return - } - - if numSuites == 1 { - config.DefaultReporterConfig.Succinct = false - } - - if numSuites > 1 { - config.DefaultReporterConfig.Succinct = true - } -} - -func (w *SpecWatcher) UpdateSeed() { - if !w.commandFlags.wasSet("seed") { - config.GinkgoConfig.RandomSeed = time.Now().Unix() - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/convert_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/convert_test.go deleted file mode 100644 index f4fd678..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/convert_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package integration_test - -import ( - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "strings" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ginkgo convert", func() { - var tmpDir string - - readConvertedFileNamed := func(pathComponents ...string) string { - pathToFile := filepath.Join(tmpDir, "convert_fixtures", filepath.Join(pathComponents...)) - bytes, err := ioutil.ReadFile(pathToFile) - ExpectWithOffset(1, err).NotTo(HaveOccurred()) - - return string(bytes) - } - - readGoldMasterNamed := func(filename string) string { - bytes, err := ioutil.ReadFile(filepath.Join("_fixtures", "convert_goldmasters", filename)) - Ω(err).ShouldNot(HaveOccurred()) - - return string(bytes) - } - - BeforeEach(func() { - var err error - - tmpDir, err = ioutil.TempDir("", "ginkgo-convert") - Ω(err).ShouldNot(HaveOccurred()) - - err = exec.Command("cp", "-r", filepath.Join("_fixtures", "convert_fixtures"), tmpDir).Run() - Ω(err).ShouldNot(HaveOccurred()) - }) - - JustBeforeEach(func() { - cwd, err := os.Getwd() - Ω(err).ShouldNot(HaveOccurred()) - - relPath, err := filepath.Rel(cwd, filepath.Join(tmpDir, "convert_fixtures")) - Ω(err).ShouldNot(HaveOccurred()) - - cmd := exec.Command(pathToGinkgo, "convert", relPath) - cmd.Env = os.Environ() - for i, env := range cmd.Env { - if strings.HasPrefix(env, "PATH") { - cmd.Env[i] = cmd.Env[i] + ":" + filepath.Dir(pathToGinkgo) - break - } - } - err = cmd.Run() - Ω(err).ShouldNot(HaveOccurred()) - }) - - AfterEach(func() { - err := os.RemoveAll(tmpDir) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("rewrites xunit tests as ginkgo tests", func() { - convertedFile := readConvertedFileNamed("xunit_test.go") - goldMaster := readGoldMasterNamed("xunit_test.go") - Ω(convertedFile).Should(Equal(goldMaster)) - }) - - It("rewrites all usages of *testing.T as mr.T()", func() { - convertedFile := readConvertedFileNamed("extra_functions_test.go") - goldMaster := readGoldMasterNamed("extra_functions_test.go") - Ω(convertedFile).Should(Equal(goldMaster)) - }) - - It("rewrites tests in the package dir that belong to other packages", func() { - convertedFile := readConvertedFileNamed("outside_package_test.go") - goldMaster := readGoldMasterNamed("outside_package_test.go") - Ω(convertedFile).Should(Equal(goldMaster)) - }) - - It("rewrites tests in nested packages", func() { - convertedFile := readConvertedFileNamed("nested", "nested_test.go") - goldMaster := readGoldMasterNamed("nested_test.go") - Ω(convertedFile).Should(Equal(goldMaster)) - }) - - Context("ginkgo test suite files", func() { - It("creates a ginkgo test suite file for the package you specified", func() { - testsuite := readConvertedFileNamed("convert_fixtures_suite_test.go") - goldMaster := readGoldMasterNamed("suite_test.go") - Ω(testsuite).Should(Equal(goldMaster)) - }) - - It("converts go tests in deeply nested packages (some may not contain go files)", func() { - testsuite := readConvertedFileNamed("nested_without_gofiles", "subpackage", "nested_subpackage_test.go") - goldMaster := readGoldMasterNamed("nested_subpackage_test.go") - Ω(testsuite).Should(Equal(goldMaster)) - }) - - It("creates ginkgo test suites for all nested packages", func() { - testsuite := readConvertedFileNamed("nested", "nested_suite_test.go") - goldMaster := readGoldMasterNamed("nested_suite_test.go") - Ω(testsuite).Should(Equal(goldMaster)) - }) - }) - - Context("with an existing test suite file", func() { - BeforeEach(func() { - goldMaster := readGoldMasterNamed("fixtures_suite_test.go") - err := ioutil.WriteFile(filepath.Join(tmpDir, "convert_fixtures", "tmp_suite_test.go"), []byte(goldMaster), 0600) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("gracefully handles existing test suite files", func() { - //nothing should have gone wrong! - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/coverage_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/coverage_test.go deleted file mode 100644 index 4a20b0d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/coverage_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package integration_test - -import ( - "os" - "os/exec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Coverage Specs", func() { - AfterEach(func() { - os.RemoveAll("./_fixtures/coverage_fixture/coverage_fixture.coverprofile") - }) - - It("runs coverage analysis in series and in parallel", func() { - session := startGinkgo("./_fixtures/coverage_fixture", "-cover") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - Ω(output).Should(ContainSubstring("coverage: 80.0% of statements")) - - serialCoverProfileOutput, err := exec.Command("go", "tool", "cover", "-func=./_fixtures/coverage_fixture/coverage_fixture.coverprofile").CombinedOutput() - Ω(err).ShouldNot(HaveOccurred()) - - os.RemoveAll("./_fixtures/coverage_fixture/coverage_fixture.coverprofile") - - Eventually(startGinkgo("./_fixtures/coverage_fixture", "-cover", "-nodes=4")).Should(gexec.Exit(0)) - - parallelCoverProfileOutput, err := exec.Command("go", "tool", "cover", "-func=./_fixtures/coverage_fixture/coverage_fixture.coverprofile").CombinedOutput() - Ω(err).ShouldNot(HaveOccurred()) - - Ω(parallelCoverProfileOutput).Should(Equal(serialCoverProfileOutput)) - }) - - It("runs coverage analysis on external packages in series and in parallel", func() { - session := startGinkgo("./_fixtures/coverage_fixture", "-coverpkg=github.com/onsi/ginkgo/integration/_fixtures/coverage_fixture,github.com/onsi/ginkgo/integration/_fixtures/coverage_fixture/external_coverage_fixture") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - Ω(output).Should(ContainSubstring("coverage: 71.4% of statements in github.com/onsi/ginkgo/integration/_fixtures/coverage_fixture, github.com/onsi/ginkgo/integration/_fixtures/coverage_fixture/external_coverage_fixture")) - - serialCoverProfileOutput, err := exec.Command("go", "tool", "cover", "-func=./_fixtures/coverage_fixture/coverage_fixture.coverprofile").CombinedOutput() - Ω(err).ShouldNot(HaveOccurred()) - - os.RemoveAll("./_fixtures/coverage_fixture/coverage_fixture.coverprofile") - - Eventually(startGinkgo("./_fixtures/coverage_fixture", "-coverpkg=github.com/onsi/ginkgo/integration/_fixtures/coverage_fixture,github.com/onsi/ginkgo/integration/_fixtures/coverage_fixture/external_coverage_fixture", "-nodes=4")).Should(gexec.Exit(0)) - - parallelCoverProfileOutput, err := exec.Command("go", "tool", "cover", "-func=./_fixtures/coverage_fixture/coverage_fixture.coverprofile").CombinedOutput() - Ω(err).ShouldNot(HaveOccurred()) - - Ω(parallelCoverProfileOutput).Should(Equal(serialCoverProfileOutput)) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/fail_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/fail_test.go deleted file mode 100644 index 8dcf5e4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/fail_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Failing Specs", func() { - var pathToTest string - - BeforeEach(func() { - pathToTest = tmpPath("failing") - copyIn("fail_fixture", pathToTest) - }) - - It("should fail in all the possible ways", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(output).ShouldNot(ContainSubstring("NEVER SEE THIS")) - - Ω(output).Should(ContainSubstring("a top level failure on line 9")) - Ω(output).Should(ContainSubstring("fail_fixture_test.go:9")) - Ω(output).Should(ContainSubstring("an async top level failure on line 14")) - Ω(output).Should(ContainSubstring("fail_fixture_test.go:14")) - Ω(output).Should(ContainSubstring("a top level goroutine failure on line 21")) - Ω(output).Should(ContainSubstring("fail_fixture_test.go:21")) - - Ω(output).Should(ContainSubstring("a sync failure")) - Ω(output).Should(MatchRegexp(`Test Panicked\n\s+a sync panic`)) - Ω(output).Should(ContainSubstring("a sync FAIL failure")) - Ω(output).Should(ContainSubstring("async timeout [It]")) - Ω(output).Should(ContainSubstring("Timed out")) - Ω(output).Should(ContainSubstring("an async failure")) - Ω(output).Should(MatchRegexp(`Test Panicked\n\s+an async panic`)) - Ω(output).Should(ContainSubstring("an async FAIL failure")) - Ω(output).Should(ContainSubstring("a goroutine FAIL failure")) - Ω(output).Should(ContainSubstring("a goroutine failure")) - Ω(output).Should(MatchRegexp(`Test Panicked\n\s+a goroutine panic`)) - Ω(output).Should(ContainSubstring("a measure failure")) - Ω(output).Should(ContainSubstring("a measure FAIL failure")) - Ω(output).Should(MatchRegexp(`Test Panicked\n\s+a measure panic`)) - - Ω(output).Should(ContainSubstring("0 Passed | 16 Failed")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/flags_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/flags_test.go deleted file mode 100644 index 0a23f59..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/flags_test.go +++ /dev/null @@ -1,176 +0,0 @@ -package integration_test - -import ( - "os" - "path/filepath" - "strings" - - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Flags Specs", func() { - var pathToTest string - - BeforeEach(func() { - pathToTest = tmpPath("flags") - copyIn("flags_tests", pathToTest) - }) - - getRandomOrders := func(output string) []int { - return []int{strings.Index(output, "RANDOM_A"), strings.Index(output, "RANDOM_B"), strings.Index(output, "RANDOM_C")} - } - - It("normally passes, runs measurements, prints out noisy pendings, does not randomize tests, and honors the programmatic focus", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Ran 3 samples:"), "has a measurement") - Ω(output).Should(ContainSubstring("10 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - Ω(output).Should(ContainSubstring("1 Pending")) - Ω(output).Should(ContainSubstring("2 Skipped")) - Ω(output).Should(ContainSubstring("[PENDING]")) - Ω(output).Should(ContainSubstring("marshmallow")) - Ω(output).Should(ContainSubstring("chocolate")) - Ω(output).Should(ContainSubstring("CUSTOM_FLAG: default")) - Ω(output).Should(ContainSubstring("Detected Programmatic Focus - setting exit status to %d", types.GINKGO_FOCUS_EXIT_CODE)) - Ω(output).ShouldNot(ContainSubstring("smores")) - Ω(output).ShouldNot(ContainSubstring("SLOW TEST")) - Ω(output).ShouldNot(ContainSubstring("should honor -slowSpecThreshold")) - - orders := getRandomOrders(output) - Ω(orders[0]).Should(BeNumerically("<", orders[1])) - Ω(orders[1]).Should(BeNumerically("<", orders[2])) - }) - - It("should run a coverprofile when passed -cover", func() { - session := startGinkgo(pathToTest, "--noColor", "--cover", "--focus=the focused set") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - _, err := os.Stat(filepath.Join(pathToTest, "flags.coverprofile")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(output).Should(ContainSubstring("coverage: ")) - }) - - It("should fail when there are pending tests and it is passed --failOnPending", func() { - session := startGinkgo(pathToTest, "--noColor", "--failOnPending") - Eventually(session).Should(gexec.Exit(1)) - }) - - It("should not print out pendings when --noisyPendings=false", func() { - session := startGinkgo(pathToTest, "--noColor", "--noisyPendings=false") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).ShouldNot(ContainSubstring("[PENDING]")) - Ω(output).Should(ContainSubstring("1 Pending")) - }) - - It("should override the programmatic focus when told to focus", func() { - session := startGinkgo(pathToTest, "--noColor", "--focus=smores") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("marshmallow")) - Ω(output).Should(ContainSubstring("chocolate")) - Ω(output).Should(ContainSubstring("smores")) - Ω(output).Should(ContainSubstring("3 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - Ω(output).Should(ContainSubstring("0 Pending")) - Ω(output).Should(ContainSubstring("10 Skipped")) - }) - - It("should override the programmatic focus when told to skip", func() { - session := startGinkgo(pathToTest, "--noColor", "--skip=marshmallow|failing") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).ShouldNot(ContainSubstring("marshmallow")) - Ω(output).Should(ContainSubstring("chocolate")) - Ω(output).Should(ContainSubstring("smores")) - Ω(output).Should(ContainSubstring("10 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - Ω(output).Should(ContainSubstring("1 Pending")) - Ω(output).Should(ContainSubstring("2 Skipped")) - }) - - It("should run the race detector when told to", func() { - session := startGinkgo(pathToTest, "--noColor", "--race") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("WARNING: DATA RACE")) - }) - - It("should randomize tests when told to", func() { - session := startGinkgo(pathToTest, "--noColor", "--randomizeAllSpecs", "--seed=21") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - orders := getRandomOrders(output) - Ω(orders[0]).ShouldNot(BeNumerically("<", orders[1])) - }) - - It("should skip measurements when told to", func() { - session := startGinkgo(pathToTest, "--skipMeasurements") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).ShouldNot(ContainSubstring("Ran 3 samples:"), "has a measurement") - Ω(output).Should(ContainSubstring("3 Skipped")) - }) - - It("should watch for slow specs", func() { - session := startGinkgo(pathToTest, "--slowSpecThreshold=0.05") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("SLOW TEST")) - Ω(output).Should(ContainSubstring("should honor -slowSpecThreshold")) - }) - - It("should pass additional arguments in", func() { - session := startGinkgo(pathToTest, "--", "--customFlag=madagascar") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("CUSTOM_FLAG: madagascar")) - }) - - It("should print out full stack traces for failures when told to", func() { - session := startGinkgo(pathToTest, "--focus=a failing test", "--trace") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Full Stack Trace")) - }) - - It("should fail fast when told to", func() { - pathToTest = tmpPath("fail") - copyIn("fail_fixture", pathToTest) - session := startGinkgo(pathToTest, "--failFast") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("1 Failed")) - Ω(output).Should(ContainSubstring("15 Skipped")) - }) - - It("should perform a dry run when told to", func() { - pathToTest = tmpPath("fail") - copyIn("fail_fixture", pathToTest) - session := startGinkgo(pathToTest, "--dryRun", "-v") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("synchronous failures")) - Ω(output).Should(ContainSubstring("16 Specs")) - Ω(output).Should(ContainSubstring("0 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/integration.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/integration.go deleted file mode 100644 index 76ab1b7..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/integration.go +++ /dev/null @@ -1 +0,0 @@ -package integration diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/integration_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/integration_suite_test.go deleted file mode 100644 index 0ad407c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/integration_suite_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package integration_test - -import ( - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" - - "testing" - "time" -) - -var tmpDir string -var pathToGinkgo string - -func TestIntegration(t *testing.T) { - SetDefaultEventuallyTimeout(15 * time.Second) - RegisterFailHandler(Fail) - RunSpecs(t, "Integration Suite") -} - -var _ = SynchronizedBeforeSuite(func() []byte { - pathToGinkgo, err := gexec.Build("github.com/onsi/ginkgo/ginkgo") - Ω(err).ShouldNot(HaveOccurred()) - return []byte(pathToGinkgo) -}, func(computedPathToGinkgo []byte) { - pathToGinkgo = string(computedPathToGinkgo) -}) - -var _ = BeforeEach(func() { - var err error - tmpDir, err = ioutil.TempDir("", "ginkgo-run") - Ω(err).ShouldNot(HaveOccurred()) -}) - -var _ = AfterEach(func() { - err := os.RemoveAll(tmpDir) - Ω(err).ShouldNot(HaveOccurred()) -}) - -var _ = SynchronizedAfterSuite(func() {}, func() { - gexec.CleanupBuildArtifacts() -}) - -func tmpPath(destination string) string { - return filepath.Join(tmpDir, destination) -} - -func copyIn(fixture string, destination string) { - err := os.MkdirAll(destination, 0777) - Ω(err).ShouldNot(HaveOccurred()) - - filepath.Walk(filepath.Join("_fixtures", fixture), func(path string, info os.FileInfo, err error) error { - if info.IsDir() { - return nil - } - - base := filepath.Base(path) - - src, err := os.Open(path) - Ω(err).ShouldNot(HaveOccurred()) - - dst, err := os.Create(filepath.Join(destination, base)) - Ω(err).ShouldNot(HaveOccurred()) - - _, err = io.Copy(dst, src) - Ω(err).ShouldNot(HaveOccurred()) - return nil - }) -} - -func ginkgoCommand(dir string, args ...string) *exec.Cmd { - cmd := exec.Command(pathToGinkgo, args...) - cmd.Dir = dir - - return cmd -} - -func startGinkgo(dir string, args ...string) *gexec.Session { - cmd := ginkgoCommand(dir, args...) - session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - return session -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/interrupt_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/interrupt_test.go deleted file mode 100644 index dc3bf28..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/interrupt_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package integration_test - -import ( - "os/exec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Interrupt", func() { - var pathToTest string - BeforeEach(func() { - pathToTest = tmpPath("hanging") - copyIn("hanging_suite", pathToTest) - }) - - Context("when interrupting a suite", func() { - var session *gexec.Session - BeforeEach(func() { - //we need to signal the actual process, so we must compile the test first - var err error - cmd := exec.Command("go", "test", "-c") - cmd.Dir = pathToTest - session, err = gexec.Start(cmd, GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - Eventually(session).Should(gexec.Exit(0)) - - //then run the compiled test directly - cmd = exec.Command("./hanging.test", "--test.v=true", "--ginkgo.noColor") - cmd.Dir = pathToTest - session, err = gexec.Start(cmd, GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Eventually(session).Should(gbytes.Say("Sleeping...")) - session.Interrupt() - Eventually(session, 1000).Should(gexec.Exit(1)) - }) - - It("should emit the contents of the GinkgoWriter", func() { - Ω(session).Should(gbytes.Say("Just beginning")) - Ω(session).Should(gbytes.Say("Almost there...")) - Ω(session).Should(gbytes.Say("Hanging Out")) - }) - - It("should run the AfterSuite", func() { - Ω(session).Should(gbytes.Say("Heading Out After Suite")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/precompiled_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/precompiled_test.go deleted file mode 100644 index d9b78e0..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/precompiled_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package integration_test - -import ( - "os" - "os/exec" - "path/filepath" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("ginkgo build", func() { - var pathToTest string - - BeforeEach(func() { - pathToTest = tmpPath("passing_ginkgo_tests") - copyIn("passing_ginkgo_tests", pathToTest) - session := startGinkgo(pathToTest, "build") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - Ω(output).Should(ContainSubstring("Compiling passing_ginkgo_tests")) - Ω(output).Should(ContainSubstring("compiled passing_ginkgo_tests.test")) - }) - - It("should build a test binary", func() { - _, err := os.Stat(filepath.Join(pathToTest, "passing_ginkgo_tests.test")) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should be possible to run the test binary directly", func() { - cmd := exec.Command("./passing_ginkgo_tests.test") - cmd.Dir = pathToTest - session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - Eventually(session).Should(gexec.Exit(0)) - Ω(session).Should(gbytes.Say("Running Suite: Passing_ginkgo_tests Suite")) - }) - - It("should be possible to run the test binary via ginkgo", func() { - session := startGinkgo(pathToTest, "./passing_ginkgo_tests.test") - Eventually(session).Should(gexec.Exit(0)) - Ω(session).Should(gbytes.Say("Running Suite: Passing_ginkgo_tests Suite")) - }) - - It("should be possible to run the test binary in parallel", func() { - session := startGinkgo(pathToTest, "--nodes=4", "--noColor", "./passing_ginkgo_tests.test") - Eventually(session).Should(gexec.Exit(0)) - Ω(session).Should(gbytes.Say("Running Suite: Passing_ginkgo_tests Suite")) - Ω(session).Should(gbytes.Say("Running in parallel across 4 nodes")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/progress_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/progress_test.go deleted file mode 100644 index 8589c33..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/progress_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Emitting progress", func() { - var pathToTest string - var session *gexec.Session - var args []string - - BeforeEach(func() { - args = []string{"--noColor"} - pathToTest = tmpPath("progress") - copyIn("progress_fixture", pathToTest) - }) - - JustBeforeEach(func() { - session = startGinkgo(pathToTest, args...) - Eventually(session).Should(gexec.Exit(0)) - }) - - Context("with the -progress flag, but no -v flag", func() { - BeforeEach(func() { - args = append(args, "-progress") - }) - - It("should not emit progress", func() { - Ω(session).ShouldNot(gbytes.Say("[bB]efore")) - }) - }) - - Context("with the -v flag", func() { - BeforeEach(func() { - args = append(args, "-v") - }) - - It("should not emit progress", func() { - Ω(session).ShouldNot(gbytes.Say(`\[BeforeEach\]`)) - Ω(session).Should(gbytes.Say(`>outer before<`)) - }) - }) - - Context("with the -progress flag and the -v flag", func() { - BeforeEach(func() { - args = append(args, "-progress", "-v") - }) - - It("should emit progress (by writing to the GinkgoWriter)", func() { - Ω(session).Should(gbytes.Say(`\[BeforeEach\] ProgressFixture`)) - Ω(session).Should(gbytes.Say(`>outer before<`)) - - Ω(session).Should(gbytes.Say(`\[BeforeEach\] Inner Context`)) - Ω(session).Should(gbytes.Say(`>inner before<`)) - - Ω(session).Should(gbytes.Say(`\[JustBeforeEach\] ProgressFixture`)) - Ω(session).Should(gbytes.Say(`>outer just before<`)) - - Ω(session).Should(gbytes.Say(`\[JustBeforeEach\] Inner Context`)) - Ω(session).Should(gbytes.Say(`>inner just before<`)) - - Ω(session).Should(gbytes.Say(`\[It\] should emit progress as it goes`)) - Ω(session).Should(gbytes.Say(`>it<`)) - - Ω(session).Should(gbytes.Say(`\[AfterEach\] Inner Context`)) - Ω(session).Should(gbytes.Say(`>inner after<`)) - - Ω(session).Should(gbytes.Say(`\[AfterEach\] ProgressFixture`)) - Ω(session).Should(gbytes.Say(`>outer after<`)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/run_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/run_test.go deleted file mode 100644 index 698f96b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/run_test.go +++ /dev/null @@ -1,373 +0,0 @@ -package integration_test - -import ( - "runtime" - "strings" - - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Running Specs", func() { - var pathToTest string - - Context("when pointed at the current directory", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - copyIn("passing_ginkgo_tests", pathToTest) - }) - - It("should run the tests in the working directory", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("••••")) - Ω(output).Should(ContainSubstring("SUCCESS! -- 4 Passed")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("when passed an explicit package to run", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - copyIn("passing_ginkgo_tests", pathToTest) - }) - - It("should run the ginkgo style tests", func() { - session := startGinkgo(tmpDir, "--noColor", pathToTest) - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("••••")) - Ω(output).Should(ContainSubstring("SUCCESS! -- 4 Passed")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("when passed a number of packages to run", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - otherPathToTest := tmpPath("other") - copyIn("passing_ginkgo_tests", pathToTest) - copyIn("more_ginkgo_tests", otherPathToTest) - }) - - It("should run the ginkgo style tests", func() { - session := startGinkgo(tmpDir, "--noColor", "--succinct=false", "ginkgo", "./other") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("when passed a number of packages to run, some of which have focused tests", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - otherPathToTest := tmpPath("other") - focusedPathToTest := tmpPath("focused") - copyIn("passing_ginkgo_tests", pathToTest) - copyIn("more_ginkgo_tests", otherPathToTest) - copyIn("focused_fixture", focusedPathToTest) - }) - - It("should exit with a status code of 2 and explain why", func() { - session := startGinkgo(tmpDir, "--noColor", "--succinct=false", "-r") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - Ω(output).Should(ContainSubstring("Detected Programmatic Focus - setting exit status to %d", types.GINKGO_FOCUS_EXIT_CODE)) - }) - }) - - Context("when told to skipPackages", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - otherPathToTest := tmpPath("other") - focusedPathToTest := tmpPath("focused") - copyIn("passing_ginkgo_tests", pathToTest) - copyIn("more_ginkgo_tests", otherPathToTest) - copyIn("focused_fixture", focusedPathToTest) - }) - - It("should skip packages that match the list", func() { - session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused", "-r") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Passing_ginkgo_tests Suite")) - Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite")) - Ω(output).ShouldNot(ContainSubstring("Focused_fixture Suite")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - - Context("when all packages are skipped", func() { - It("should not run anything, but still exit 0", func() { - session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused,ginkgo", "-r") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("All tests skipped!")) - Ω(output).ShouldNot(ContainSubstring("Passing_ginkgo_tests Suite")) - Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite")) - Ω(output).ShouldNot(ContainSubstring("Focused_fixture Suite")) - Ω(output).ShouldNot(ContainSubstring("Test Suite Passed")) - }) - }) - }) - - Context("when there are no tests to run", func() { - It("should exit 1", func() { - session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused", "-r") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Err.Contents()) - - Ω(output).Should(ContainSubstring("Found no test suites")) - }) - }) - - Context("when told to randomizeSuites", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - otherPathToTest := tmpPath("other") - copyIn("passing_ginkgo_tests", pathToTest) - copyIn("more_ginkgo_tests", otherPathToTest) - }) - - It("should skip packages that match the regexp", func() { - session := startGinkgo(tmpDir, "--noColor", "--randomizeSuites", "-r", "--seed=2") - Eventually(session).Should(gexec.Exit(0)) - - Ω(session).Should(gbytes.Say("More_ginkgo_tests Suite")) - Ω(session).Should(gbytes.Say("Passing_ginkgo_tests Suite")) - - session = startGinkgo(tmpDir, "--noColor", "--randomizeSuites", "-r", "--seed=3") - Eventually(session).Should(gexec.Exit(0)) - - Ω(session).Should(gbytes.Say("Passing_ginkgo_tests Suite")) - Ω(session).Should(gbytes.Say("More_ginkgo_tests Suite")) - }) - }) - - Context("when pointed at a package with xunit style tests", func() { - BeforeEach(func() { - pathToTest = tmpPath("xunit") - copyIn("xunit_tests", pathToTest) - }) - - It("should run the xunit style tests", func() { - session := startGinkgo(pathToTest) - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("--- PASS: TestAlwaysTrue")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("when pointed at a package with no tests", func() { - BeforeEach(func() { - pathToTest = tmpPath("no_tests") - copyIn("no_tests", pathToTest) - }) - - It("should fail", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(1)) - - Ω(session.Err.Contents()).Should(ContainSubstring("Found no test suites")) - }) - }) - - Context("when pointed at a package that fails to compile", func() { - BeforeEach(func() { - pathToTest = tmpPath("does_not_compile") - copyIn("does_not_compile", pathToTest) - }) - - It("should fail", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Failed to compile")) - }) - }) - - Context("when running in parallel", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - copyIn("passing_ginkgo_tests", pathToTest) - }) - - Context("with a specific number of -nodes", func() { - It("should use the specified number of nodes", func() { - session := startGinkgo(pathToTest, "--noColor", "-succinct", "-nodes=2") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs - 2 nodes •••• SUCCESS! \d+(\.\d+)?[muµ]s`)) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("with -p", func() { - It("it should autocompute the number of nodes", func() { - session := startGinkgo(pathToTest, "--noColor", "-succinct", "-p") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - nodes := runtime.NumCPU() - if nodes > 4 { - nodes = nodes - 1 - } - Ω(output).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs - %d nodes •••• SUCCESS! \d+(\.\d+)?[muµ]s`, nodes)) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - }) - - Context("when streaming in parallel", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - copyIn("passing_ginkgo_tests", pathToTest) - }) - - It("should print output in realtime", func() { - session := startGinkgo(pathToTest, "--noColor", "-stream", "-nodes=2") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring(`[1] Parallel test node 1/2.`)) - Ω(output).Should(ContainSubstring(`[2] Parallel test node 2/2.`)) - Ω(output).Should(ContainSubstring(`[1] SUCCESS!`)) - Ω(output).Should(ContainSubstring(`[2] SUCCESS!`)) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("when running recursively", func() { - BeforeEach(func() { - passingTest := tmpPath("A") - otherPassingTest := tmpPath("E") - copyIn("passing_ginkgo_tests", passingTest) - copyIn("more_ginkgo_tests", otherPassingTest) - }) - - Context("when all the tests pass", func() { - It("should run all the tests (in succinct mode) and succeed", func() { - session := startGinkgo(tmpDir, "--noColor", "-r") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - outputLines := strings.Split(output, "\n") - Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs •••• SUCCESS! \d+(\.\d+)?[muµ]s PASS`)) - Ω(outputLines[1]).Should(MatchRegexp(`\[\d+\] More_ginkgo_tests Suite - 2/2 specs •• SUCCESS! \d+(\.\d+)?[muµ]s PASS`)) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - }) - }) - - Context("when one of the packages has a failing tests", func() { - BeforeEach(func() { - failingTest := tmpPath("C") - copyIn("failing_ginkgo_tests", failingTest) - }) - - It("should fail and stop running tests", func() { - session := startGinkgo(tmpDir, "--noColor", "-r") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - outputLines := strings.Split(output, "\n") - Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs •••• SUCCESS! \d+(\.\d+)?[muµ]s PASS`)) - Ω(outputLines[1]).Should(MatchRegexp(`\[\d+\] Failing_ginkgo_tests Suite - 2/2 specs`)) - Ω(output).Should(ContainSubstring("• Failure")) - Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Test Suite Failed")) - - Ω(output).Should(ContainSubstring("Summarizing 1 Failure:")) - Ω(output).Should(ContainSubstring("[Fail] FailingGinkgoTests [It] should fail")) - }) - }) - - Context("when one of the packages fails to compile", func() { - BeforeEach(func() { - doesNotCompileTest := tmpPath("C") - copyIn("does_not_compile", doesNotCompileTest) - }) - - It("should fail and stop running tests", func() { - session := startGinkgo(tmpDir, "--noColor", "-r") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - outputLines := strings.Split(output, "\n") - Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs •••• SUCCESS! \d+(\.\d+)?[muµ]s PASS`)) - Ω(outputLines[1]).Should(ContainSubstring("Failed to compile C:")) - Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Test Suite Failed")) - }) - }) - - Context("when either is the case, but the keepGoing flag is set", func() { - BeforeEach(func() { - doesNotCompileTest := tmpPath("B") - copyIn("does_not_compile", doesNotCompileTest) - - failingTest := tmpPath("C") - copyIn("failing_ginkgo_tests", failingTest) - }) - - It("should soldier on", func() { - session := startGinkgo(tmpDir, "--noColor", "-r", "-keepGoing") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - outputLines := strings.Split(output, "\n") - Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs •••• SUCCESS! \d+(\.\d+)?[muµ]s PASS`)) - Ω(outputLines[1]).Should(ContainSubstring("Failed to compile B:")) - Ω(output).Should(MatchRegexp(`\[\d+\] Failing_ginkgo_tests Suite - 2/2 specs`)) - Ω(output).Should(ContainSubstring("• Failure")) - Ω(output).Should(MatchRegexp(`\[\d+\] More_ginkgo_tests Suite - 2/2 specs •• SUCCESS! \d+(\.\d+)?[muµ]s PASS`)) - Ω(output).Should(ContainSubstring("Test Suite Failed")) - }) - }) - }) - - Context("when told to keep going --untilItFails", func() { - BeforeEach(func() { - copyIn("eventually_failing", tmpDir) - }) - - It("should keep rerunning the tests, until a failure occurs", func() { - session := startGinkgo(tmpDir, "--untilItFails", "--noColor") - Eventually(session).Should(gexec.Exit(1)) - Ω(session).Should(gbytes.Say("This was attempt #1")) - Ω(session).Should(gbytes.Say("This was attempt #2")) - Ω(session).Should(gbytes.Say("Tests failed on attempt #3")) - - //it should change the random seed between each test - lines := strings.Split(string(session.Out.Contents()), "\n") - randomSeeds := []string{} - for _, line := range lines { - if strings.Contains(line, "Random Seed:") { - randomSeeds = append(randomSeeds, strings.Split(line, ": ")[1]) - } - } - Ω(randomSeeds[0]).ShouldNot(Equal(randomSeeds[1])) - Ω(randomSeeds[1]).ShouldNot(Equal(randomSeeds[2])) - Ω(randomSeeds[0]).ShouldNot(Equal(randomSeeds[2])) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/skip_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/skip_test.go deleted file mode 100644 index 59a12ee..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/skip_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Skipping Specs", func() { - var pathToTest string - - BeforeEach(func() { - pathToTest = tmpPath("skipping") - copyIn("skip_fixture", pathToTest) - }) - - It("should skip in all the possible ways", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).ShouldNot(ContainSubstring("NEVER SEE THIS")) - - Ω(output).Should(ContainSubstring("a top level skip on line 9")) - Ω(output).Should(ContainSubstring("skip_fixture_test.go:9")) - Ω(output).Should(ContainSubstring("an async top level skip on line 14")) - Ω(output).Should(ContainSubstring("skip_fixture_test.go:14")) - Ω(output).Should(ContainSubstring("a top level goroutine skip on line 21")) - Ω(output).Should(ContainSubstring("skip_fixture_test.go:21")) - - Ω(output).Should(ContainSubstring("a sync SKIP")) - Ω(output).Should(ContainSubstring("an async SKIP")) - Ω(output).Should(ContainSubstring("a goroutine SKIP")) - Ω(output).Should(ContainSubstring("a measure SKIP")) - - Ω(output).Should(ContainSubstring("S [SKIPPING] in Spec Setup (BeforeEach) [")) - Ω(output).Should(ContainSubstring("a BeforeEach SKIP")) - Ω(output).Should(ContainSubstring("S [SKIPPING] in Spec Teardown (AfterEach) [")) - Ω(output).Should(ContainSubstring("an AfterEach SKIP")) - - Ω(output).Should(ContainSubstring("0 Passed | 0 Failed | 0 Pending | 9 Skipped")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/subcommand_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/subcommand_test.go deleted file mode 100644 index 32dfa0e..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/subcommand_test.go +++ /dev/null @@ -1,364 +0,0 @@ -package integration_test - -import ( - "io/ioutil" - "os" - "path/filepath" - "strings" - - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Subcommand", func() { - Describe("ginkgo bootstrap", func() { - var pkgPath string - BeforeEach(func() { - pkgPath = tmpPath("foo") - os.Mkdir(pkgPath, 0777) - }) - - It("should generate a bootstrap file, as long as one does not exist", func() { - session := startGinkgo(pkgPath, "bootstrap") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_suite_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_test")) - Ω(content).Should(ContainSubstring("func TestFoo(t *testing.T) {")) - Ω(content).Should(ContainSubstring("RegisterFailHandler")) - Ω(content).Should(ContainSubstring("RunSpecs")) - - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`)) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`)) - - session = startGinkgo(pkgPath, "bootstrap") - Eventually(session).Should(gexec.Exit(1)) - output = session.Out.Contents() - Ω(output).Should(ContainSubstring("foo_suite_test.go already exists")) - }) - - It("should import nodot declarations when told to", func() { - session := startGinkgo(pkgPath, "bootstrap", "--nodot") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_suite_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_test")) - Ω(content).Should(ContainSubstring("func TestFoo(t *testing.T) {")) - Ω(content).Should(ContainSubstring("RegisterFailHandler")) - Ω(content).Should(ContainSubstring("RunSpecs")) - - Ω(content).Should(ContainSubstring("var It = ginkgo.It")) - Ω(content).Should(ContainSubstring("var Ω = gomega.Ω")) - - Ω(content).Should(ContainSubstring("\t" + `"github.com/onsi/ginkgo"`)) - Ω(content).Should(ContainSubstring("\t" + `"github.com/onsi/gomega"`)) - }) - - It("should generate an agouti bootstrap file when told to", func() { - session := startGinkgo(pkgPath, "bootstrap", "--agouti") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_suite_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_test")) - Ω(content).Should(ContainSubstring("func TestFoo(t *testing.T) {")) - Ω(content).Should(ContainSubstring("RegisterFailHandler")) - Ω(content).Should(ContainSubstring("RunSpecs")) - - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`)) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`)) - Ω(content).Should(ContainSubstring("\t" + `"github.com/sclevine/agouti"`)) - }) - }) - - Describe("nodot", func() { - It("should update the declarations in the bootstrap file", func() { - pkgPath := tmpPath("foo") - os.Mkdir(pkgPath, 0777) - - session := startGinkgo(pkgPath, "bootstrap", "--nodot") - Eventually(session).Should(gexec.Exit(0)) - - byteContent, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - - content := string(byteContent) - content = strings.Replace(content, "var It =", "var MyIt =", -1) - content = strings.Replace(content, "var Ω = gomega.Ω\n", "", -1) - - err = ioutil.WriteFile(filepath.Join(pkgPath, "foo_suite_test.go"), []byte(content), os.ModePerm) - Ω(err).ShouldNot(HaveOccurred()) - - session = startGinkgo(pkgPath, "nodot") - Eventually(session).Should(gexec.Exit(0)) - - byteContent, err = ioutil.ReadFile(filepath.Join(pkgPath, "foo_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(byteContent).Should(ContainSubstring("var MyIt = ginkgo.It")) - Ω(byteContent).ShouldNot(ContainSubstring("var It = ginkgo.It")) - Ω(byteContent).Should(ContainSubstring("var Ω = gomega.Ω")) - }) - }) - - Describe("ginkgo generate", func() { - var pkgPath string - - BeforeEach(func() { - pkgPath = tmpPath("foo_bar") - os.Mkdir(pkgPath, 0777) - }) - - Context("with no arguments", func() { - It("should generate a test file named after the package", func() { - session := startGinkgo(pkgPath, "generate") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_bar_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_bar_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("FooBar", func() {`)) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`)) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`)) - - session = startGinkgo(pkgPath, "generate") - Eventually(session).Should(gexec.Exit(1)) - output = session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_bar_test.go already exists")) - }) - }) - - Context("with an argument of the form: foo", func() { - It("should generate a test file named after the argument", func() { - session := startGinkgo(pkgPath, "generate", "baz_buzz") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("baz_buzz_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`)) - }) - }) - - Context("with an argument of the form: foo.go", func() { - It("should generate a test file named after the argument", func() { - session := startGinkgo(pkgPath, "generate", "baz_buzz.go") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("baz_buzz_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`)) - - }) - }) - - Context("with an argument of the form: foo_test", func() { - It("should generate a test file named after the argument", func() { - session := startGinkgo(pkgPath, "generate", "baz_buzz_test") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("baz_buzz_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`)) - }) - }) - - Context("with an argument of the form: foo_test.go", func() { - It("should generate a test file named after the argument", func() { - session := startGinkgo(pkgPath, "generate", "baz_buzz_test.go") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("baz_buzz_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_buzz_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("BazBuzz", func() {`)) - }) - }) - - Context("with multiple arguments", func() { - It("should generate a test file named after the argument", func() { - session := startGinkgo(pkgPath, "generate", "baz", "buzz") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("baz_test.go")) - Ω(output).Should(ContainSubstring("buzz_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "baz_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("Baz", func() {`)) - - content, err = ioutil.ReadFile(filepath.Join(pkgPath, "buzz_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring(`var _ = Describe("Buzz", func() {`)) - }) - }) - - Context("with nodot", func() { - It("should not import ginkgo or gomega", func() { - session := startGinkgo(pkgPath, "generate", "--nodot") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_bar_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_bar_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).ShouldNot(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`)) - Ω(content).ShouldNot(ContainSubstring("\t" + `. "github.com/onsi/gomega"`)) - }) - }) - - Context("with agouti", func() { - It("should generate an agouti test file", func() { - session := startGinkgo(pkgPath, "generate", "--agouti") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("foo_bar_test.go")) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "foo_bar_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package foo_bar_test")) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/ginkgo"`)) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/onsi/gomega"`)) - Ω(content).Should(ContainSubstring("\t" + `. "github.com/sclevine/agouti/matchers"`)) - Ω(content).Should(ContainSubstring("\t" + `"github.com/sclevine/agouti"`)) - Ω(content).Should(ContainSubstring("page, err = agoutiDriver.NewPage()")) - }) - }) - }) - - Describe("ginkgo bootstrap/generate", func() { - var pkgPath string - BeforeEach(func() { - pkgPath = tmpPath("some crazy-thing") - os.Mkdir(pkgPath, 0777) - }) - - Context("when the working directory is empty", func() { - It("generates correctly named bootstrap and generate files with a package name derived from the directory", func() { - session := startGinkgo(pkgPath, "bootstrap") - Eventually(session).Should(gexec.Exit(0)) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package some_crazy_thing_test")) - Ω(content).Should(ContainSubstring("SomeCrazyThing Suite")) - - session = startGinkgo(pkgPath, "generate") - Eventually(session).Should(gexec.Exit(0)) - - content, err = ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package some_crazy_thing_test")) - Ω(content).Should(ContainSubstring("SomeCrazyThing")) - }) - }) - - Context("when the working directory contains a file with a package name", func() { - BeforeEach(func() { - Ω(ioutil.WriteFile(filepath.Join(pkgPath, "foo.go"), []byte("package main\n\nfunc main() {}"), 0777)).Should(Succeed()) - }) - - It("generates correctly named bootstrap and generate files with the package name", func() { - session := startGinkgo(pkgPath, "bootstrap") - Eventually(session).Should(gexec.Exit(0)) - - content, err := ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_suite_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package main_test")) - Ω(content).Should(ContainSubstring("SomeCrazyThing Suite")) - - session = startGinkgo(pkgPath, "generate") - Eventually(session).Should(gexec.Exit(0)) - - content, err = ioutil.ReadFile(filepath.Join(pkgPath, "some_crazy_thing_test.go")) - Ω(err).ShouldNot(HaveOccurred()) - Ω(content).Should(ContainSubstring("package main_test")) - Ω(content).Should(ContainSubstring("SomeCrazyThing")) - }) - }) - }) - - Describe("ginkgo blur", func() { - It("should unfocus tests", func() { - pathToTest := tmpPath("focused") - copyIn("focused_fixture", pathToTest) - - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("3 Passed")) - Ω(output).Should(ContainSubstring("3 Skipped")) - - session = startGinkgo(pathToTest, "blur") - Eventually(session).Should(gexec.Exit(0)) - - session = startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output = session.Out.Contents() - Ω(output).Should(ContainSubstring("6 Passed")) - Ω(output).Should(ContainSubstring("0 Skipped")) - }) - }) - - Describe("ginkgo version", func() { - It("should print out the version info", func() { - session := startGinkgo("", "version") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(MatchRegexp(`Ginkgo Version \d+\.\d+\.\d+`)) - }) - }) - - Describe("ginkgo help", func() { - It("should print out usage information", func() { - session := startGinkgo("", "help") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Err.Contents()) - - Ω(output).Should(MatchRegexp(`Ginkgo Version \d+\.\d+\.\d+`)) - Ω(output).Should(ContainSubstring("ginkgo watch")) - Ω(output).Should(ContainSubstring("-succinct")) - Ω(output).Should(ContainSubstring("-nodes")) - Ω(output).Should(ContainSubstring("ginkgo generate")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/suite_command_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/suite_command_test.go deleted file mode 100644 index 4bd46f0..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/suite_command_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Suite Command Specs", func() { - var pathToTest string - - BeforeEach(func() { - pathToTest = tmpPath("suite_command") - copyIn("suite_command_tests", pathToTest) - }) - - It("Runs command after suite echoing out suite data, properly reporting suite name and passing status in successful command output", func() { - command := "-afterSuiteHook=echo THIS IS A (ginkgo-suite-passed) TEST OF THE (ginkgo-suite-name) SYSTEM, THIS IS ONLY A TEST" - expected := "THIS IS A [PASS] TEST OF THE suite_command SYSTEM, THIS IS ONLY A TEST" - session := startGinkgo(pathToTest, command) - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("1 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - Ω(output).Should(ContainSubstring("1 Pending")) - Ω(output).Should(ContainSubstring("0 Skipped")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - Ω(output).Should(ContainSubstring("Post-suite command succeeded:")) - Ω(output).Should(ContainSubstring(expected)) - }) - - It("Runs command after suite reporting that command failed", func() { - command := "-afterSuiteHook=exit 1" - session := startGinkgo(pathToTest, command) - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("1 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - Ω(output).Should(ContainSubstring("1 Pending")) - Ω(output).Should(ContainSubstring("0 Skipped")) - Ω(output).Should(ContainSubstring("Test Suite Passed")) - Ω(output).Should(ContainSubstring("Post-suite command failed:")) - }) - - It("Runs command after suite echoing out suite data, properly reporting suite name and failing status in successful command output", func() { - command := "-afterSuiteHook=echo THIS IS A (ginkgo-suite-passed) TEST OF THE (ginkgo-suite-name) SYSTEM, THIS IS ONLY A TEST" - expected := "THIS IS A [FAIL] TEST OF THE suite_command SYSTEM, THIS IS ONLY A TEST" - session := startGinkgo(pathToTest, "-failOnPending=true", command) - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("1 Passed")) - Ω(output).Should(ContainSubstring("0 Failed")) - Ω(output).Should(ContainSubstring("1 Pending")) - Ω(output).Should(ContainSubstring("0 Skipped")) - Ω(output).Should(ContainSubstring("Test Suite Failed")) - Ω(output).Should(ContainSubstring("Post-suite command succeeded:")) - Ω(output).Should(ContainSubstring(expected)) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/suite_setup_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/suite_setup_test.go deleted file mode 100644 index b9313db..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/suite_setup_test.go +++ /dev/null @@ -1,178 +0,0 @@ -package integration_test - -import ( - "strings" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("SuiteSetup", func() { - var pathToTest string - - Context("when the BeforeSuite and AfterSuite pass", func() { - BeforeEach(func() { - pathToTest = tmpPath("suite_setup") - copyIn("passing_suite_setup", pathToTest) - }) - - It("should run the BeforeSuite once, then run all the tests", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(strings.Count(output, "BEFORE SUITE")).Should(Equal(1)) - Ω(strings.Count(output, "AFTER SUITE")).Should(Equal(1)) - }) - - It("should run the BeforeSuite once per parallel node, then run all the tests", func() { - session := startGinkgo(pathToTest, "--noColor", "--nodes=2") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(strings.Count(output, "BEFORE SUITE")).Should(Equal(2)) - Ω(strings.Count(output, "AFTER SUITE")).Should(Equal(2)) - }) - }) - - Context("when the BeforeSuite fails", func() { - BeforeEach(func() { - pathToTest = tmpPath("suite_setup") - copyIn("failing_before_suite", pathToTest) - }) - - It("should run the BeforeSuite once, none of the tests, but it should run the AfterSuite", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(strings.Count(output, "BEFORE SUITE")).Should(Equal(1)) - Ω(strings.Count(output, "Test Panicked")).Should(Equal(1)) - Ω(strings.Count(output, "AFTER SUITE")).Should(Equal(1)) - Ω(output).ShouldNot(ContainSubstring("NEVER SEE THIS")) - }) - - It("should run the BeforeSuite once per parallel node, none of the tests, but it should run the AfterSuite for each node", func() { - session := startGinkgo(pathToTest, "--noColor", "--nodes=2") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(strings.Count(output, "BEFORE SUITE")).Should(Equal(2)) - Ω(strings.Count(output, "Test Panicked")).Should(Equal(2)) - Ω(strings.Count(output, "AFTER SUITE")).Should(Equal(2)) - Ω(output).ShouldNot(ContainSubstring("NEVER SEE THIS")) - }) - }) - - Context("when the AfterSuite fails", func() { - BeforeEach(func() { - pathToTest = tmpPath("suite_setup") - copyIn("failing_after_suite", pathToTest) - }) - - It("should run the BeforeSuite once, none of the tests, but it should run the AfterSuite", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(strings.Count(output, "BEFORE SUITE")).Should(Equal(1)) - Ω(strings.Count(output, "AFTER SUITE")).Should(Equal(1)) - Ω(strings.Count(output, "Test Panicked")).Should(Equal(1)) - Ω(strings.Count(output, "A TEST")).Should(Equal(2)) - }) - - It("should run the BeforeSuite once per parallel node, none of the tests, but it should run the AfterSuite for each node", func() { - session := startGinkgo(pathToTest, "--noColor", "--nodes=2") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(strings.Count(output, "BEFORE SUITE")).Should(Equal(2)) - Ω(strings.Count(output, "AFTER SUITE")).Should(Equal(2)) - Ω(strings.Count(output, "Test Panicked")).Should(Equal(2)) - Ω(strings.Count(output, "A TEST")).Should(Equal(2)) - }) - }) - - Context("With passing synchronized before and after suites", func() { - BeforeEach(func() { - pathToTest = tmpPath("suite_setup") - copyIn("synchronized_setup_tests", pathToTest) - }) - - Context("when run with one node", func() { - It("should do all the work on that one node", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("BEFORE_A_1\nBEFORE_B_1: DATA")) - Ω(output).Should(ContainSubstring("AFTER_A_1\nAFTER_B_1")) - }) - }) - - Context("when run across multiple nodes", func() { - It("should run the first BeforeSuite function (BEFORE_A) on node 1, the second (BEFORE_B) on all the nodes, the first AfterSuite (AFTER_A) on all the nodes, and then the second (AFTER_B) on Node 1 *after* everything else is finished", func() { - session := startGinkgo(pathToTest, "--noColor", "--nodes=3") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("BEFORE_A_1")) - Ω(output).Should(ContainSubstring("BEFORE_B_1: DATA")) - Ω(output).Should(ContainSubstring("BEFORE_B_2: DATA")) - Ω(output).Should(ContainSubstring("BEFORE_B_3: DATA")) - - Ω(output).ShouldNot(ContainSubstring("BEFORE_A_2")) - Ω(output).ShouldNot(ContainSubstring("BEFORE_A_3")) - - Ω(output).Should(ContainSubstring("AFTER_A_1")) - Ω(output).Should(ContainSubstring("AFTER_A_2")) - Ω(output).Should(ContainSubstring("AFTER_A_3")) - Ω(output).Should(ContainSubstring("AFTER_B_1")) - - Ω(output).ShouldNot(ContainSubstring("AFTER_B_2")) - Ω(output).ShouldNot(ContainSubstring("AFTER_B_3")) - }) - }) - - Context("when streaming across multiple nodes", func() { - It("should run the first BeforeSuite function (BEFORE_A) on node 1, the second (BEFORE_B) on all the nodes, the first AfterSuite (AFTER_A) on all the nodes, and then the second (AFTER_B) on Node 1 *after* everything else is finished", func() { - session := startGinkgo(pathToTest, "--noColor", "--nodes=3", "--stream") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("[1] BEFORE_A_1")) - Ω(output).Should(ContainSubstring("[1] BEFORE_B_1: DATA")) - Ω(output).Should(ContainSubstring("[2] BEFORE_B_2: DATA")) - Ω(output).Should(ContainSubstring("[3] BEFORE_B_3: DATA")) - - Ω(output).ShouldNot(ContainSubstring("BEFORE_A_2")) - Ω(output).ShouldNot(ContainSubstring("BEFORE_A_3")) - - Ω(output).Should(ContainSubstring("[1] AFTER_A_1")) - Ω(output).Should(ContainSubstring("[2] AFTER_A_2")) - Ω(output).Should(ContainSubstring("[3] AFTER_A_3")) - Ω(output).Should(ContainSubstring("[1] AFTER_B_1")) - - Ω(output).ShouldNot(ContainSubstring("AFTER_B_2")) - Ω(output).ShouldNot(ContainSubstring("AFTER_B_3")) - }) - }) - }) - - Context("With a failing synchronized before suite", func() { - BeforeEach(func() { - pathToTest = tmpPath("suite_setup") - copyIn("exiting_synchronized_setup_tests", pathToTest) - }) - - It("should fail and let the user know that node 1 disappeared prematurely", func() { - session := startGinkgo(pathToTest, "--noColor", "--nodes=3") - Eventually(session).Should(gexec.Exit(1)) - output := string(session.Out.Contents()) - - Ω(output).Should(ContainSubstring("Node 1 disappeared before completing BeforeSuite")) - Ω(output).Should(ContainSubstring("Ginkgo timed out waiting for all parallel nodes to report back!")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/tags_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/tags_test.go deleted file mode 100644 index 626635b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/tags_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Tags", func() { - var pathToTest string - BeforeEach(func() { - pathToTest = tmpPath("tags") - copyIn("tags_tests", pathToTest) - }) - - It("should honor the passed in -tags flag", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output := string(session.Out.Contents()) - Ω(output).Should(ContainSubstring("Ran 1 of 1 Specs")) - - session = startGinkgo(pathToTest, "--noColor", "-tags=complex_tests") - Eventually(session).Should(gexec.Exit(0)) - output = string(session.Out.Contents()) - Ω(output).Should(ContainSubstring("Ran 3 of 3 Specs")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/test_description_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/test_description_test.go deleted file mode 100644 index 70a8f04..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/test_description_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("TestDescription", func() { - var pathToTest string - - BeforeEach(func() { - pathToTest = tmpPath("test_description") - copyIn("test_description", pathToTest) - }) - - It("should capture and emit information about the current test", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(1)) - - Ω(session).Should(gbytes.Say("TestDescription should pass:false")) - Ω(session).Should(gbytes.Say("TestDescription should fail:true")) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/verbose_and_succinct_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/verbose_and_succinct_test.go deleted file mode 100644 index 470affd..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/verbose_and_succinct_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package integration_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Verbose And Succinct Mode", func() { - var pathToTest string - var otherPathToTest string - - Context("when running one package", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - copyIn("passing_ginkgo_tests", pathToTest) - }) - - It("should default to non-succinct mode", func() { - session := startGinkgo(pathToTest, "--noColor") - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - }) - }) - - Context("when running more than one package", func() { - BeforeEach(func() { - pathToTest = tmpPath("ginkgo") - copyIn("passing_ginkgo_tests", pathToTest) - otherPathToTest = tmpPath("more_ginkgo") - copyIn("more_ginkgo_tests", otherPathToTest) - }) - - Context("with no flags set", func() { - It("should default to succinct mode", func() { - session := startGinkgo(pathToTest, "--noColor", pathToTest, otherPathToTest) - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("] Passing_ginkgo_tests Suite - 4/4 specs •••• SUCCESS!")) - Ω(output).Should(ContainSubstring("] More_ginkgo_tests Suite - 2/2 specs •• SUCCESS!")) - }) - }) - - Context("with --succinct=false", func() { - It("should not be in succinct mode", func() { - session := startGinkgo(pathToTest, "--noColor", "--succinct=false", pathToTest, otherPathToTest) - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite")) - }) - }) - - Context("with -v", func() { - It("should not be in succinct mode, but should be verbose", func() { - session := startGinkgo(pathToTest, "--noColor", "-v", pathToTest, otherPathToTest) - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite")) - Ω(output).Should(ContainSubstring("should proxy strings")) - Ω(output).Should(ContainSubstring("should always pass")) - }) - - It("should emit output from Bys", func() { - session := startGinkgo(pathToTest, "--noColor", "-v", pathToTest) - Eventually(session).Should(gexec.Exit(0)) - output := session.Out.Contents() - - Ω(output).Should(ContainSubstring("emitting one By")) - Ω(output).Should(ContainSubstring("emitting another By")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/watch_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/watch_test.go deleted file mode 100644 index bbbcf36..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/integration/watch_test.go +++ /dev/null @@ -1,239 +0,0 @@ -package integration_test - -import ( - "io/ioutil" - "os" - "path/filepath" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" -) - -var _ = Describe("Watch", func() { - var rootPath string - var pathA string - var pathB string - var pathC string - var session *gexec.Session - - BeforeEach(func() { - rootPath = tmpPath("root") - pathA = filepath.Join(rootPath, "src", "github.com", "onsi", "A") - pathB = filepath.Join(rootPath, "src", "github.com", "onsi", "B") - pathC = filepath.Join(rootPath, "src", "github.com", "onsi", "C") - - err := os.MkdirAll(pathA, 0700) - Ω(err).ShouldNot(HaveOccurred()) - - err = os.MkdirAll(pathB, 0700) - Ω(err).ShouldNot(HaveOccurred()) - - err = os.MkdirAll(pathC, 0700) - Ω(err).ShouldNot(HaveOccurred()) - - copyIn(filepath.Join("watch_fixtures", "A"), pathA) - copyIn(filepath.Join("watch_fixtures", "B"), pathB) - copyIn(filepath.Join("watch_fixtures", "C"), pathC) - }) - - startGinkgoWithGopath := func(args ...string) *gexec.Session { - cmd := ginkgoCommand(rootPath, args...) - cmd.Env = append([]string{"GOPATH=" + rootPath + ":" + os.Getenv("GOPATH")}, os.Environ()...) - session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - return session - } - - modifyFile := func(path string) { - time.Sleep(time.Second) - content, err := ioutil.ReadFile(path) - Ω(err).ShouldNot(HaveOccurred()) - content = append(content, []byte("//")...) - err = ioutil.WriteFile(path, content, 0666) - Ω(err).ShouldNot(HaveOccurred()) - } - - modifyCode := func(pkgToModify string) { - modifyFile(filepath.Join(rootPath, "src", "github.com", "onsi", pkgToModify, pkgToModify+".go")) - } - - modifyTest := func(pkgToModify string) { - modifyFile(filepath.Join(rootPath, "src", "github.com", "onsi", pkgToModify, pkgToModify+"_test.go")) - } - - AfterEach(func() { - if session != nil { - session.Kill().Wait() - } - }) - - It("should be set up correctly", func() { - session = startGinkgoWithGopath("-r") - Eventually(session).Should(gexec.Exit(0)) - Ω(session.Out.Contents()).Should(ContainSubstring("A Suite")) - Ω(session.Out.Contents()).Should(ContainSubstring("B Suite")) - Ω(session.Out.Contents()).Should(ContainSubstring("C Suite")) - Ω(session.Out.Contents()).Should(ContainSubstring("Ginkgo ran 3 suites")) - }) - - Context("when watching just one test suite", func() { - It("should immediately run, and should rerun when the test suite changes", func() { - session = startGinkgoWithGopath("watch", "-succinct", pathA) - Eventually(session).Should(gbytes.Say("A Suite")) - modifyCode("A") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("A Suite")) - session.Kill().Wait() - }) - }) - - Context("when watching several test suites", func() { - It("should not immediately run, but should rerun a test when its code changes", func() { - session = startGinkgoWithGopath("watch", "-succinct", "-r") - Eventually(session).Should(gbytes.Say("Identified 3 test suites")) - Consistently(session).ShouldNot(gbytes.Say("A Suite|B Suite|C Suite")) - modifyCode("A") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("B Suite|C Suite")) - session.Kill().Wait() - }) - }) - - Describe("watching dependencies", func() { - Context("with a depth of 2", func() { - It("should watch down to that depth", func() { - session = startGinkgoWithGopath("watch", "-succinct", "-r", "-depth=2") - Eventually(session).Should(gbytes.Say("Identified 3 test suites")) - Eventually(session).Should(gbytes.Say(`A \[2 dependencies\]`)) - Eventually(session).Should(gbytes.Say(`B \[1 dependency\]`)) - Eventually(session).Should(gbytes.Say(`C \[0 dependencies\]`)) - - modifyCode("A") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("B Suite|C Suite")) - - modifyCode("B") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("B Suite")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("C Suite")) - - modifyCode("C") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("C Suite")) - Eventually(session).Should(gbytes.Say("B Suite")) - Eventually(session).Should(gbytes.Say("A Suite")) - }) - }) - - Context("with a depth of 1", func() { - It("should watch down to that depth", func() { - session = startGinkgoWithGopath("watch", "-succinct", "-r", "-depth=1") - Eventually(session).Should(gbytes.Say("Identified 3 test suites")) - Eventually(session).Should(gbytes.Say(`A \[1 dependency\]`)) - Eventually(session).Should(gbytes.Say(`B \[1 dependency\]`)) - Eventually(session).Should(gbytes.Say(`C \[0 dependencies\]`)) - - modifyCode("A") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("B Suite|C Suite")) - - modifyCode("B") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("B Suite")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("C Suite")) - - modifyCode("C") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("C Suite")) - Eventually(session).Should(gbytes.Say("B Suite")) - Consistently(session).ShouldNot(gbytes.Say("A Suite")) - }) - }) - - Context("with a depth of 0", func() { - It("should not watch any dependencies", func() { - session = startGinkgoWithGopath("watch", "-succinct", "-r", "-depth=0") - Eventually(session).Should(gbytes.Say("Identified 3 test suites")) - Eventually(session).Should(gbytes.Say(`A \[0 dependencies\]`)) - Eventually(session).Should(gbytes.Say(`B \[0 dependencies\]`)) - Eventually(session).Should(gbytes.Say(`C \[0 dependencies\]`)) - - modifyCode("A") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("B Suite|C Suite")) - - modifyCode("B") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("B Suite")) - Consistently(session).ShouldNot(gbytes.Say("A Suite|C Suite")) - - modifyCode("C") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("C Suite")) - Consistently(session).ShouldNot(gbytes.Say("A Suite|B Suite")) - }) - }) - - It("should not trigger dependents when tests are changed", func() { - session = startGinkgoWithGopath("watch", "-succinct", "-r", "-depth=2") - Eventually(session).Should(gbytes.Say("Identified 3 test suites")) - Eventually(session).Should(gbytes.Say(`A \[2 dependencies\]`)) - Eventually(session).Should(gbytes.Say(`B \[1 dependency\]`)) - Eventually(session).Should(gbytes.Say(`C \[0 dependencies\]`)) - - modifyTest("A") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("A Suite")) - Consistently(session).ShouldNot(gbytes.Say("B Suite|C Suite")) - - modifyTest("B") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("B Suite")) - Consistently(session).ShouldNot(gbytes.Say("A Suite|C Suite")) - - modifyTest("C") - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("C Suite")) - Consistently(session).ShouldNot(gbytes.Say("A Suite|B Suite")) - }) - }) - - Describe("when new test suite is added", func() { - It("should start monitoring that test suite", func() { - session = startGinkgoWithGopath("watch", "-succinct", "-r") - - Eventually(session).Should(gbytes.Say("Watching 3 suites")) - - pathD := filepath.Join(rootPath, "src", "github.com", "onsi", "D") - - err := os.MkdirAll(pathD, 0700) - Ω(err).ShouldNot(HaveOccurred()) - - copyIn(filepath.Join("watch_fixtures", "D"), pathD) - - Eventually(session).Should(gbytes.Say("Detected 1 new suite")) - Eventually(session).Should(gbytes.Say(`D \[1 dependency\]`)) - Eventually(session).Should(gbytes.Say("D Suite")) - - modifyCode("D") - - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("D Suite")) - - modifyCode("C") - - Eventually(session).Should(gbytes.Say("Detected changes in")) - Eventually(session).Should(gbytes.Say("C Suite")) - Eventually(session).Should(gbytes.Say("D Suite")) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location_suite_test.go deleted file mode 100644 index f06abf3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package codelocation_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCodelocation(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "CodeLocation Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location_test.go deleted file mode 100644 index 55a9e9d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package codelocation_test - -import ( - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - "runtime" -) - -var _ = Describe("CodeLocation", func() { - var ( - codeLocation types.CodeLocation - expectedFileName string - expectedLineNumber int - ) - - caller0 := func() { - codeLocation = codelocation.New(1) - } - - caller1 := func() { - _, expectedFileName, expectedLineNumber, _ = runtime.Caller(0) - expectedLineNumber += 2 - caller0() - } - - BeforeEach(func() { - caller1() - }) - - It("should use the passed in skip parameter to pick out the correct file & line number", func() { - Ω(codeLocation.FileName).Should(Equal(expectedFileName)) - Ω(codeLocation.LineNumber).Should(Equal(expectedLineNumber)) - }) - - Describe("stringer behavior", func() { - It("should stringify nicely", func() { - Ω(codeLocation.String()).Should(ContainSubstring("code_location_test.go:%d", expectedLineNumber)) - }) - }) - - //There's no better way than to test this private method as it - //goes out of its way to prune out ginkgo related code in the stack trace - Describe("PruneStack", func() { - It("should remove any references to ginkgo and pkg/testing and pkg/runtime", func() { - input := `/Skip/me -Skip: skip() -/Skip/me -Skip: skip() -/Users/whoever/gospace/src/github.com/onsi/ginkgo/whatever.go:10 (0x12314) -Something: Func() -/Users/whoever/gospace/src/github.com/onsi/ginkgo/whatever_else.go:10 (0x12314) -SomethingInternalToGinkgo: Func() -/usr/goroot/pkg/strings/oops.go:10 (0x12341) -Oops: BlowUp() -/Users/whoever/gospace/src/mycode/code.go:10 (0x12341) -MyCode: Func() -/Users/whoever/gospace/src/mycode/code_test.go:10 (0x12341) -MyCodeTest: Func() -/Users/whoever/gospace/src/mycode/code_suite_test.go:12 (0x37f08) -TestFoo: RunSpecs(t, "Foo Suite") -/usr/goroot/pkg/testing/testing.go:12 (0x37f08) -TestingT: Blah() -/usr/goroot/pkg/runtime/runtime.go:12 (0x37f08) -Something: Func() -` - prunedStack := codelocation.PruneStack(input, 1) - Ω(prunedStack).Should(Equal(`/usr/goroot/pkg/strings/oops.go:10 (0x12341) -Oops: BlowUp() -/Users/whoever/gospace/src/mycode/code.go:10 (0x12341) -MyCode: Func() -/Users/whoever/gospace/src/mycode/code_test.go:10 (0x12341) -MyCodeTest: Func() -/Users/whoever/gospace/src/mycode/code_suite_test.go:12 (0x37f08) -TestFoo: RunSpecs(t, "Foo Suite")`)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node_suite_test.go deleted file mode 100644 index c6fc314..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package containernode_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestContainernode(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Containernode Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node_test.go deleted file mode 100644 index b8d61b1..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node_test.go +++ /dev/null @@ -1,212 +0,0 @@ -package containernode_test - -import ( - "github.com/onsi/ginkgo/internal/leafnodes" - "math/rand" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/internal/codelocation" - . "github.com/onsi/ginkgo/internal/containernode" - "github.com/onsi/ginkgo/types" -) - -var _ = Describe("Container Node", func() { - var ( - codeLocation types.CodeLocation - container *ContainerNode - ) - - BeforeEach(func() { - codeLocation = codelocation.New(0) - container = New("description text", types.FlagTypeFocused, codeLocation) - }) - - Describe("creating a container node", func() { - It("can answer questions about itself", func() { - Ω(container.Text()).Should(Equal("description text")) - Ω(container.Flag()).Should(Equal(types.FlagTypeFocused)) - Ω(container.CodeLocation()).Should(Equal(codeLocation)) - }) - }) - - Describe("pushing setup nodes", func() { - It("can append setup nodes of various types and fetch them by type", func() { - befA := leafnodes.NewBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) - befB := leafnodes.NewBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) - aftA := leafnodes.NewAfterEachNode(func() {}, codelocation.New(0), 0, nil, 0) - aftB := leafnodes.NewAfterEachNode(func() {}, codelocation.New(0), 0, nil, 0) - jusBefA := leafnodes.NewJustBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) - jusBefB := leafnodes.NewJustBeforeEachNode(func() {}, codelocation.New(0), 0, nil, 0) - - container.PushSetupNode(befA) - container.PushSetupNode(befB) - container.PushSetupNode(aftA) - container.PushSetupNode(aftB) - container.PushSetupNode(jusBefA) - container.PushSetupNode(jusBefB) - - subject := leafnodes.NewItNode("subject", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - container.PushSubjectNode(subject) - - Ω(container.SetupNodesOfType(types.SpecComponentTypeBeforeEach)).Should(Equal([]leafnodes.BasicNode{befA, befB})) - Ω(container.SetupNodesOfType(types.SpecComponentTypeAfterEach)).Should(Equal([]leafnodes.BasicNode{aftA, aftB})) - Ω(container.SetupNodesOfType(types.SpecComponentTypeJustBeforeEach)).Should(Equal([]leafnodes.BasicNode{jusBefA, jusBefB})) - Ω(container.SetupNodesOfType(types.SpecComponentTypeIt)).Should(BeEmpty()) //subjects are not setup nodes - }) - }) - - Context("With appended containers and subject nodes", func() { - var ( - itA, itB, innerItA, innerItB leafnodes.SubjectNode - innerContainer *ContainerNode - ) - - BeforeEach(func() { - itA = leafnodes.NewItNode("Banana", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - itB = leafnodes.NewItNode("Apple", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - - innerItA = leafnodes.NewItNode("inner A", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - innerItB = leafnodes.NewItNode("inner B", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - - innerContainer = New("Orange", types.FlagTypeNone, codelocation.New(0)) - - container.PushSubjectNode(itA) - container.PushContainerNode(innerContainer) - innerContainer.PushSubjectNode(innerItA) - innerContainer.PushSubjectNode(innerItB) - container.PushSubjectNode(itB) - }) - - Describe("Collating", func() { - It("should return a collated set of containers and subject nodes in the correct order", func() { - collated := container.Collate() - Ω(collated).Should(HaveLen(4)) - - Ω(collated[0]).Should(Equal(CollatedNodes{ - Containers: []*ContainerNode{container}, - Subject: itA, - })) - - Ω(collated[1]).Should(Equal(CollatedNodes{ - Containers: []*ContainerNode{container, innerContainer}, - Subject: innerItA, - })) - - Ω(collated[2]).Should(Equal(CollatedNodes{ - Containers: []*ContainerNode{container, innerContainer}, - Subject: innerItB, - })) - - Ω(collated[3]).Should(Equal(CollatedNodes{ - Containers: []*ContainerNode{container}, - Subject: itB, - })) - }) - }) - - Describe("Backpropagating Programmatic Focus", func() { - //This allows inner focused specs to override the focus of outer focussed - //specs and more closely maps to what a developer wants to happen - //when debugging a test suite - - Context("when a parent is focused *and* an inner subject is focused", func() { - BeforeEach(func() { - container = New("description text", types.FlagTypeFocused, codeLocation) - itA = leafnodes.NewItNode("A", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - container.PushSubjectNode(itA) - - innerContainer = New("Orange", types.FlagTypeNone, codelocation.New(0)) - container.PushContainerNode(innerContainer) - innerItA = leafnodes.NewItNode("inner A", func() {}, types.FlagTypeFocused, codelocation.New(0), 0, nil, 0) - innerContainer.PushSubjectNode(innerItA) - }) - - It("should unfocus the parent", func() { - container.BackPropagateProgrammaticFocus() - - Ω(container.Flag()).Should(Equal(types.FlagTypeNone)) - Ω(itA.Flag()).Should(Equal(types.FlagTypeNone)) - Ω(innerContainer.Flag()).Should(Equal(types.FlagTypeNone)) - Ω(innerItA.Flag()).Should(Equal(types.FlagTypeFocused)) - }) - }) - - Context("when a parent is focused *and* an inner container is focused", func() { - BeforeEach(func() { - container = New("description text", types.FlagTypeFocused, codeLocation) - itA = leafnodes.NewItNode("A", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - container.PushSubjectNode(itA) - - innerContainer = New("Orange", types.FlagTypeFocused, codelocation.New(0)) - container.PushContainerNode(innerContainer) - innerItA = leafnodes.NewItNode("inner A", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - innerContainer.PushSubjectNode(innerItA) - }) - - It("should unfocus the parent", func() { - container.BackPropagateProgrammaticFocus() - - Ω(container.Flag()).Should(Equal(types.FlagTypeNone)) - Ω(itA.Flag()).Should(Equal(types.FlagTypeNone)) - Ω(innerContainer.Flag()).Should(Equal(types.FlagTypeFocused)) - Ω(innerItA.Flag()).Should(Equal(types.FlagTypeNone)) - }) - }) - - Context("when a parent is pending and a child is focused", func() { - BeforeEach(func() { - container = New("description text", types.FlagTypeFocused, codeLocation) - itA = leafnodes.NewItNode("A", func() {}, types.FlagTypeNone, codelocation.New(0), 0, nil, 0) - container.PushSubjectNode(itA) - - innerContainer = New("Orange", types.FlagTypePending, codelocation.New(0)) - container.PushContainerNode(innerContainer) - innerItA = leafnodes.NewItNode("inner A", func() {}, types.FlagTypeFocused, codelocation.New(0), 0, nil, 0) - innerContainer.PushSubjectNode(innerItA) - }) - - It("should not do anything", func() { - container.BackPropagateProgrammaticFocus() - - Ω(container.Flag()).Should(Equal(types.FlagTypeFocused)) - Ω(itA.Flag()).Should(Equal(types.FlagTypeNone)) - Ω(innerContainer.Flag()).Should(Equal(types.FlagTypePending)) - Ω(innerItA.Flag()).Should(Equal(types.FlagTypeFocused)) - }) - }) - }) - - Describe("Shuffling", func() { - var unshuffledCollation []CollatedNodes - BeforeEach(func() { - unshuffledCollation = container.Collate() - - r := rand.New(rand.NewSource(17)) - container.Shuffle(r) - }) - - It("should sort, and then shuffle, the top level contents of the container", func() { - shuffledCollation := container.Collate() - Ω(shuffledCollation).Should(HaveLen(len(unshuffledCollation))) - Ω(shuffledCollation).ShouldNot(Equal(unshuffledCollation)) - - for _, entry := range unshuffledCollation { - Ω(shuffledCollation).Should(ContainElement(entry)) - } - - innerAIndex, innerBIndex := 0, 0 - for i, entry := range shuffledCollation { - if entry.Subject == innerItA { - innerAIndex = i - } else if entry.Subject == innerItB { - innerBIndex = i - } - } - - Ω(innerAIndex).Should(Equal(innerBIndex - 1)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer_suite_test.go deleted file mode 100644 index 8dce7be..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package failer_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFailer(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Failer Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer_test.go deleted file mode 100644 index 65210a4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package failer_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/failer" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/types" -) - -var _ = Describe("Failer", func() { - var ( - failer *Failer - codeLocationA types.CodeLocation - codeLocationB types.CodeLocation - ) - - BeforeEach(func() { - codeLocationA = codelocation.New(0) - codeLocationB = codelocation.New(0) - failer = New() - }) - - Context("with no failures", func() { - It("should return success when drained", func() { - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - Ω(failure).Should(BeZero()) - Ω(state).Should(Equal(types.SpecStatePassed)) - }) - }) - - Describe("Skip", func() { - It("should handle failures", func() { - failer.Skip("something skipped", codeLocationA) - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "something skipped", - Location: codeLocationA, - ForwardedPanic: "", - ComponentType: types.SpecComponentTypeIt, - ComponentIndex: 3, - ComponentCodeLocation: codeLocationB, - })) - Ω(state).Should(Equal(types.SpecStateSkipped)) - }) - }) - - Describe("Fail", func() { - It("should handle failures", func() { - failer.Fail("something failed", codeLocationA) - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "something failed", - Location: codeLocationA, - ForwardedPanic: "", - ComponentType: types.SpecComponentTypeIt, - ComponentIndex: 3, - ComponentCodeLocation: codeLocationB, - })) - Ω(state).Should(Equal(types.SpecStateFailed)) - }) - }) - - Describe("Panic", func() { - It("should handle panics", func() { - failer.Panic(codeLocationA, "some forwarded panic") - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "Test Panicked", - Location: codeLocationA, - ForwardedPanic: "some forwarded panic", - ComponentType: types.SpecComponentTypeIt, - ComponentIndex: 3, - ComponentCodeLocation: codeLocationB, - })) - Ω(state).Should(Equal(types.SpecStatePanicked)) - }) - }) - - Describe("Timeout", func() { - It("should handle timeouts", func() { - failer.Timeout(codeLocationA) - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "Timed out", - Location: codeLocationA, - ForwardedPanic: "", - ComponentType: types.SpecComponentTypeIt, - ComponentIndex: 3, - ComponentCodeLocation: codeLocationB, - })) - Ω(state).Should(Equal(types.SpecStateTimedOut)) - }) - }) - - Context("when multiple failures are registered", func() { - BeforeEach(func() { - failer.Fail("something failed", codeLocationA) - failer.Fail("something else failed", codeLocationA) - }) - - It("should only report the first one when drained", func() { - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "something failed", - Location: codeLocationA, - ForwardedPanic: "", - ComponentType: types.SpecComponentTypeIt, - ComponentIndex: 3, - ComponentCodeLocation: codeLocationB, - })) - Ω(state).Should(Equal(types.SpecStateFailed)) - }) - - It("should report subsequent failures after being drained", func() { - failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - failer.Fail("yet another thing failed", codeLocationA) - - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "yet another thing failed", - Location: codeLocationA, - ForwardedPanic: "", - ComponentType: types.SpecComponentTypeIt, - ComponentIndex: 3, - ComponentCodeLocation: codeLocationB, - })) - Ω(state).Should(Equal(types.SpecStateFailed)) - }) - - It("should report sucess on subsequent drains if no errors occur", func() { - failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - failure, state := failer.Drain(types.SpecComponentTypeIt, 3, codeLocationB) - Ω(failure).Should(BeZero()) - Ω(state).Should(Equal(types.SpecStatePassed)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/it_node_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/it_node_test.go deleted file mode 100644 index 29fa0c6..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/it_node_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/leafnodes" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/types" -) - -var _ = Describe("It Nodes", func() { - It("should report the correct type, text, flag, and code location", func() { - codeLocation := codelocation.New(0) - it := NewItNode("my it node", func() {}, types.FlagTypeFocused, codeLocation, 0, nil, 3) - Ω(it.Type()).Should(Equal(types.SpecComponentTypeIt)) - Ω(it.Flag()).Should(Equal(types.FlagTypeFocused)) - Ω(it.Text()).Should(Equal("my it node")) - Ω(it.CodeLocation()).Should(Equal(codeLocation)) - Ω(it.Samples()).Should(Equal(1)) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/leaf_node_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/leaf_node_suite_test.go deleted file mode 100644 index a7ba9e0..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/leaf_node_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestLeafNode(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "LeafNode Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/measure_node_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/measure_node_test.go deleted file mode 100644 index 4dcd00b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/measure_node_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/leafnodes" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/internal/codelocation" - Failer "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/types" - "time" -) - -var _ = Describe("Measure Nodes", func() { - It("should report the correct type, text, flag, and code location", func() { - codeLocation := codelocation.New(0) - measure := NewMeasureNode("my measure node", func(b Benchmarker) {}, types.FlagTypeFocused, codeLocation, 10, nil, 3) - Ω(measure.Type()).Should(Equal(types.SpecComponentTypeMeasure)) - Ω(measure.Flag()).Should(Equal(types.FlagTypeFocused)) - Ω(measure.Text()).Should(Equal("my measure node")) - Ω(measure.CodeLocation()).Should(Equal(codeLocation)) - Ω(measure.Samples()).Should(Equal(10)) - }) - - Describe("benchmarking", func() { - var measure *MeasureNode - - Describe("Value", func() { - BeforeEach(func() { - measure = NewMeasureNode("the measurement", func(b Benchmarker) { - b.RecordValue("foo", 7, "info!") - b.RecordValue("foo", 2) - b.RecordValue("foo", 3) - b.RecordValue("bar", 0.3) - b.RecordValue("bar", 0.1) - b.RecordValue("bar", 0.5) - b.RecordValue("bar", 0.7) - }, types.FlagTypeFocused, codelocation.New(0), 1, Failer.New(), 3) - Ω(measure.Run()).Should(Equal(types.SpecStatePassed)) - }) - - It("records passed in values and reports on them", func() { - report := measure.MeasurementsReport() - Ω(report).Should(HaveLen(2)) - Ω(report["foo"].Name).Should(Equal("foo")) - Ω(report["foo"].Info).Should(Equal("info!")) - Ω(report["foo"].Order).Should(Equal(0)) - Ω(report["foo"].SmallestLabel).Should(Equal("Smallest")) - Ω(report["foo"].LargestLabel).Should(Equal(" Largest")) - Ω(report["foo"].AverageLabel).Should(Equal(" Average")) - Ω(report["foo"].Units).Should(Equal("")) - Ω(report["foo"].Results).Should(Equal([]float64{7, 2, 3})) - Ω(report["foo"].Smallest).Should(BeNumerically("==", 2)) - Ω(report["foo"].Largest).Should(BeNumerically("==", 7)) - Ω(report["foo"].Average).Should(BeNumerically("==", 4)) - Ω(report["foo"].StdDeviation).Should(BeNumerically("~", 2.16, 0.01)) - - Ω(report["bar"].Name).Should(Equal("bar")) - Ω(report["bar"].Info).Should(BeNil()) - Ω(report["bar"].SmallestLabel).Should(Equal("Smallest")) - Ω(report["bar"].Order).Should(Equal(1)) - Ω(report["bar"].LargestLabel).Should(Equal(" Largest")) - Ω(report["bar"].AverageLabel).Should(Equal(" Average")) - Ω(report["bar"].Units).Should(Equal("")) - Ω(report["bar"].Results).Should(Equal([]float64{0.3, 0.1, 0.5, 0.7})) - Ω(report["bar"].Smallest).Should(BeNumerically("==", 0.1)) - Ω(report["bar"].Largest).Should(BeNumerically("==", 0.7)) - Ω(report["bar"].Average).Should(BeNumerically("==", 0.4)) - Ω(report["bar"].StdDeviation).Should(BeNumerically("~", 0.22, 0.01)) - }) - }) - - Describe("Time", func() { - BeforeEach(func() { - measure = NewMeasureNode("the measurement", func(b Benchmarker) { - b.Time("foo", func() { - time.Sleep(100 * time.Millisecond) - }, "info!") - b.Time("foo", func() { - time.Sleep(200 * time.Millisecond) - }) - b.Time("foo", func() { - time.Sleep(170 * time.Millisecond) - }) - }, types.FlagTypeFocused, codelocation.New(0), 1, Failer.New(), 3) - Ω(measure.Run()).Should(Equal(types.SpecStatePassed)) - }) - - It("records passed in values and reports on them", func() { - report := measure.MeasurementsReport() - Ω(report).Should(HaveLen(1)) - Ω(report["foo"].Name).Should(Equal("foo")) - Ω(report["foo"].Info).Should(Equal("info!")) - Ω(report["foo"].SmallestLabel).Should(Equal("Fastest Time")) - Ω(report["foo"].LargestLabel).Should(Equal("Slowest Time")) - Ω(report["foo"].AverageLabel).Should(Equal("Average Time")) - Ω(report["foo"].Units).Should(Equal("s")) - Ω(report["foo"].Results).Should(HaveLen(3)) - Ω(report["foo"].Results[0]).Should(BeNumerically("~", 0.1, 0.01)) - Ω(report["foo"].Results[1]).Should(BeNumerically("~", 0.2, 0.01)) - Ω(report["foo"].Results[2]).Should(BeNumerically("~", 0.17, 0.01)) - Ω(report["foo"].Smallest).Should(BeNumerically("~", 0.1, 0.01)) - Ω(report["foo"].Largest).Should(BeNumerically("~", 0.2, 0.01)) - Ω(report["foo"].Average).Should(BeNumerically("~", 0.16, 0.01)) - Ω(report["foo"].StdDeviation).Should(BeNumerically("~", 0.04, 0.01)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/runner.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/runner.go deleted file mode 100644 index 003f851..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/runner.go +++ /dev/null @@ -1,113 +0,0 @@ -package leafnodes - -import ( - "fmt" - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/types" - "reflect" - "time" -) - -type runner struct { - isAsync bool - asyncFunc func(chan<- interface{}) - syncFunc func() - codeLocation types.CodeLocation - timeoutThreshold time.Duration - nodeType types.SpecComponentType - componentIndex int - failer *failer.Failer -} - -func newRunner(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, nodeType types.SpecComponentType, componentIndex int) *runner { - bodyType := reflect.TypeOf(body) - if bodyType.Kind() != reflect.Func { - panic(fmt.Sprintf("Expected a function but got something else at %v", codeLocation)) - } - - runner := &runner{ - codeLocation: codeLocation, - timeoutThreshold: timeout, - failer: failer, - nodeType: nodeType, - componentIndex: componentIndex, - } - - switch bodyType.NumIn() { - case 0: - runner.syncFunc = body.(func()) - return runner - case 1: - if !(bodyType.In(0).Kind() == reflect.Chan && bodyType.In(0).Elem().Kind() == reflect.Interface) { - panic(fmt.Sprintf("Must pass a Done channel to function at %v", codeLocation)) - } - - wrappedBody := func(done chan<- interface{}) { - bodyValue := reflect.ValueOf(body) - bodyValue.Call([]reflect.Value{reflect.ValueOf(done)}) - } - - runner.isAsync = true - runner.asyncFunc = wrappedBody - return runner - } - - panic(fmt.Sprintf("Too many arguments to function at %v", codeLocation)) -} - -func (r *runner) run() (outcome types.SpecState, failure types.SpecFailure) { - if r.isAsync { - return r.runAsync() - } else { - return r.runSync() - } -} - -func (r *runner) runAsync() (outcome types.SpecState, failure types.SpecFailure) { - done := make(chan interface{}, 1) - - go func() { - finished := false - - defer func() { - if e := recover(); e != nil || !finished { - r.failer.Panic(codelocation.New(2), e) - select { - case <-done: - break - default: - close(done) - } - } - }() - - r.asyncFunc(done) - finished = true - }() - - select { - case <-done: - case <-time.After(r.timeoutThreshold): - r.failer.Timeout(r.codeLocation) - } - - failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation) - return -} -func (r *runner) runSync() (outcome types.SpecState, failure types.SpecFailure) { - finished := false - - defer func() { - if e := recover(); e != nil || !finished { - r.failer.Panic(codelocation.New(2), e) - } - - failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation) - }() - - r.syncFunc() - finished = true - - return -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes_test.go deleted file mode 100644 index d5b9251..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - - . "github.com/onsi/ginkgo/internal/leafnodes" - - "github.com/onsi/ginkgo/internal/codelocation" -) - -var _ = Describe("Setup Nodes", func() { - Describe("BeforeEachNodes", func() { - It("should report the correct type and code location", func() { - codeLocation := codelocation.New(0) - beforeEach := NewBeforeEachNode(func() {}, codeLocation, 0, nil, 3) - Ω(beforeEach.Type()).Should(Equal(types.SpecComponentTypeBeforeEach)) - Ω(beforeEach.CodeLocation()).Should(Equal(codeLocation)) - }) - }) - - Describe("AfterEachNodes", func() { - It("should report the correct type and code location", func() { - codeLocation := codelocation.New(0) - afterEach := NewAfterEachNode(func() {}, codeLocation, 0, nil, 3) - Ω(afterEach.Type()).Should(Equal(types.SpecComponentTypeAfterEach)) - Ω(afterEach.CodeLocation()).Should(Equal(codeLocation)) - }) - }) - - Describe("JustBeforeEachNodes", func() { - It("should report the correct type and code location", func() { - codeLocation := codelocation.New(0) - justBeforeEach := NewJustBeforeEachNode(func() {}, codeLocation, 0, nil, 3) - Ω(justBeforeEach.Type()).Should(Equal(types.SpecComponentTypeJustBeforeEach)) - Ω(justBeforeEach.CodeLocation()).Should(Equal(codeLocation)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/shared_runner_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/shared_runner_test.go deleted file mode 100644 index f27fc55..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/shared_runner_test.go +++ /dev/null @@ -1,361 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/leafnodes" - . "github.com/onsi/gomega" - - "reflect" - "runtime" - "time" - - "github.com/onsi/ginkgo/internal/codelocation" - Failer "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/types" -) - -type runnable interface { - Run() (outcome types.SpecState, failure types.SpecFailure) - CodeLocation() types.CodeLocation -} - -func SynchronousSharedRunnerBehaviors(build func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable, componentType types.SpecComponentType, componentIndex int) { - var ( - outcome types.SpecState - failure types.SpecFailure - - failer *Failer.Failer - - componentCodeLocation types.CodeLocation - innerCodeLocation types.CodeLocation - - didRun bool - ) - - BeforeEach(func() { - failer = Failer.New() - componentCodeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - - didRun = false - }) - - Describe("synchronous functions", func() { - Context("when the function passes", func() { - BeforeEach(func() { - outcome, failure = build(func() { - didRun = true - }, 0, failer, componentCodeLocation).Run() - }) - - It("should have a succesful outcome", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStatePassed)) - Ω(failure).Should(BeZero()) - }) - }) - - Context("when a failure occurs", func() { - BeforeEach(func() { - outcome, failure = build(func() { - didRun = true - failer.Fail("bam", innerCodeLocation) - panic("should not matter") - }, 0, failer, componentCodeLocation).Run() - }) - - It("should return the failure", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStateFailed)) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "bam", - Location: innerCodeLocation, - ForwardedPanic: "", - ComponentIndex: componentIndex, - ComponentType: componentType, - ComponentCodeLocation: componentCodeLocation, - })) - }) - }) - - Context("when a panic occurs", func() { - BeforeEach(func() { - outcome, failure = build(func() { - didRun = true - innerCodeLocation = codelocation.New(0) - panic("ack!") - }, 0, failer, componentCodeLocation).Run() - }) - - It("should return the panic", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStatePanicked)) - Ω(failure.ForwardedPanic).Should(Equal("ack!")) - }) - }) - - Context("when a panic occurs with a nil value", func() { - BeforeEach(func() { - outcome, failure = build(func() { - didRun = true - innerCodeLocation = codelocation.New(0) - panic(nil) - }, 0, failer, componentCodeLocation).Run() - }) - - It("should return the nil-valued panic", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStatePanicked)) - Ω(failure.ForwardedPanic).Should(Equal("")) - }) - }) - - }) -} - -func AsynchronousSharedRunnerBehaviors(build func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable, componentType types.SpecComponentType, componentIndex int) { - var ( - outcome types.SpecState - failure types.SpecFailure - - failer *Failer.Failer - - componentCodeLocation types.CodeLocation - innerCodeLocation types.CodeLocation - - didRun bool - ) - - BeforeEach(func() { - failer = Failer.New() - componentCodeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - - didRun = false - }) - - Describe("asynchronous functions", func() { - var timeoutDuration time.Duration - - BeforeEach(func() { - timeoutDuration = time.Duration(1 * float64(time.Second)) - }) - - Context("when running", func() { - It("should run the function as a goroutine, and block until it's done", func() { - initialNumberOfGoRoutines := runtime.NumGoroutine() - numberOfGoRoutines := 0 - - build(func(done Done) { - didRun = true - numberOfGoRoutines = runtime.NumGoroutine() - close(done) - }, timeoutDuration, failer, componentCodeLocation).Run() - - Ω(didRun).Should(BeTrue()) - Ω(numberOfGoRoutines).Should(BeNumerically(">=", initialNumberOfGoRoutines+1)) - }) - }) - - Context("when the function passes", func() { - BeforeEach(func() { - outcome, failure = build(func(done Done) { - didRun = true - close(done) - }, timeoutDuration, failer, componentCodeLocation).Run() - }) - - It("should have a succesful outcome", func() { - Ω(didRun).Should(BeTrue()) - Ω(outcome).Should(Equal(types.SpecStatePassed)) - Ω(failure).Should(BeZero()) - }) - }) - - Context("when the function fails", func() { - BeforeEach(func() { - outcome, failure = build(func(done Done) { - didRun = true - failer.Fail("bam", innerCodeLocation) - time.Sleep(20 * time.Millisecond) - panic("doesn't matter") - close(done) - }, 10*time.Millisecond, failer, componentCodeLocation).Run() - }) - - It("should return the failure", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStateFailed)) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "bam", - Location: innerCodeLocation, - ForwardedPanic: "", - ComponentIndex: componentIndex, - ComponentType: componentType, - ComponentCodeLocation: componentCodeLocation, - })) - }) - }) - - Context("when the function times out", func() { - var guard chan struct{} - - BeforeEach(func() { - guard = make(chan struct{}) - outcome, failure = build(func(done Done) { - didRun = true - time.Sleep(20 * time.Millisecond) - close(guard) - panic("doesn't matter") - close(done) - }, 10*time.Millisecond, failer, componentCodeLocation).Run() - }) - - It("should return the timeout", func() { - <-guard - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStateTimedOut)) - Ω(failure).Should(Equal(types.SpecFailure{ - Message: "Timed out", - Location: componentCodeLocation, - ForwardedPanic: "", - ComponentIndex: componentIndex, - ComponentType: componentType, - ComponentCodeLocation: componentCodeLocation, - })) - }) - }) - - Context("when the function panics", func() { - BeforeEach(func() { - outcome, failure = build(func(done Done) { - didRun = true - innerCodeLocation = codelocation.New(0) - panic("ack!") - }, 100*time.Millisecond, failer, componentCodeLocation).Run() - }) - - It("should return the panic", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStatePanicked)) - Ω(failure.ForwardedPanic).Should(Equal("ack!")) - }) - }) - - Context("when the function panics with a nil value", func() { - BeforeEach(func() { - outcome, failure = build(func(done Done) { - didRun = true - innerCodeLocation = codelocation.New(0) - panic(nil) - }, 100*time.Millisecond, failer, componentCodeLocation).Run() - }) - - It("should return the nil-valued panic", func() { - Ω(didRun).Should(BeTrue()) - - Ω(outcome).Should(Equal(types.SpecStatePanicked)) - Ω(failure.ForwardedPanic).Should(Equal("")) - }) - }) - }) -} - -func InvalidSharedRunnerBehaviors(build func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable, componentType types.SpecComponentType) { - var ( - failer *Failer.Failer - componentCodeLocation types.CodeLocation - innerCodeLocation types.CodeLocation - ) - - BeforeEach(func() { - failer = Failer.New() - componentCodeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - }) - - Describe("invalid functions", func() { - Context("when passed something that's not a function", func() { - It("should panic", func() { - Ω(func() { - build("not a function", 0, failer, componentCodeLocation) - }).Should(Panic()) - }) - }) - - Context("when the function takes the wrong kind of argument", func() { - It("should panic", func() { - Ω(func() { - build(func(oops string) {}, 0, failer, componentCodeLocation) - }).Should(Panic()) - }) - }) - - Context("when the function takes more than one argument", func() { - It("should panic", func() { - Ω(func() { - build(func(done Done, oops string) {}, 0, failer, componentCodeLocation) - }).Should(Panic()) - }) - }) - }) -} - -var _ = Describe("Shared RunnableNode behavior", func() { - Describe("It Nodes", func() { - build := func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable { - return NewItNode("", body, types.FlagTypeFocused, componentCodeLocation, timeout, failer, 3) - } - - SynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeIt, 3) - AsynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeIt, 3) - InvalidSharedRunnerBehaviors(build, types.SpecComponentTypeIt) - }) - - Describe("Measure Nodes", func() { - build := func(body interface{}, _ time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable { - return NewMeasureNode("", func(Benchmarker) { - reflect.ValueOf(body).Call([]reflect.Value{}) - }, types.FlagTypeFocused, componentCodeLocation, 10, failer, 3) - } - - SynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeMeasure, 3) - }) - - Describe("BeforeEach Nodes", func() { - build := func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable { - return NewBeforeEachNode(body, componentCodeLocation, timeout, failer, 3) - } - - SynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeBeforeEach, 3) - AsynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeBeforeEach, 3) - InvalidSharedRunnerBehaviors(build, types.SpecComponentTypeBeforeEach) - }) - - Describe("AfterEach Nodes", func() { - build := func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable { - return NewAfterEachNode(body, componentCodeLocation, timeout, failer, 3) - } - - SynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeAfterEach, 3) - AsynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeAfterEach, 3) - InvalidSharedRunnerBehaviors(build, types.SpecComponentTypeAfterEach) - }) - - Describe("JustBeforeEach Nodes", func() { - build := func(body interface{}, timeout time.Duration, failer *Failer.Failer, componentCodeLocation types.CodeLocation) runnable { - return NewJustBeforeEachNode(body, componentCodeLocation, timeout, failer, 3) - } - - SynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeJustBeforeEach, 3) - AsynchronousSharedRunnerBehaviors(build, types.SpecComponentTypeJustBeforeEach, 3) - InvalidSharedRunnerBehaviors(build, types.SpecComponentTypeJustBeforeEach) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes_test.go deleted file mode 100644 index 246b329..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes_test.go +++ /dev/null @@ -1,230 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/onsi/ginkgo/internal/leafnodes" - - "time" - - "github.com/onsi/ginkgo/internal/codelocation" - Failer "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/types" -) - -var _ = Describe("SuiteNodes", func() { - Describe("BeforeSuite nodes", func() { - var befSuite SuiteNode - var failer *Failer.Failer - var codeLocation types.CodeLocation - var innerCodeLocation types.CodeLocation - var outcome bool - - BeforeEach(func() { - failer = Failer.New() - codeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - }) - - Context("when the body passes", func() { - BeforeEach(func() { - befSuite = NewBeforeSuiteNode(func() { - time.Sleep(10 * time.Millisecond) - }, codeLocation, 0, failer) - outcome = befSuite.Run(0, 0, "") - }) - - It("should return true when run and report as passed", func() { - Ω(outcome).Should(BeTrue()) - Ω(befSuite.Passed()).Should(BeTrue()) - }) - - It("should have the correct summary", func() { - summary := befSuite.Summary() - Ω(summary.ComponentType).Should(Equal(types.SpecComponentTypeBeforeSuite)) - Ω(summary.CodeLocation).Should(Equal(codeLocation)) - Ω(summary.State).Should(Equal(types.SpecStatePassed)) - Ω(summary.RunTime).Should(BeNumerically(">=", 10*time.Millisecond)) - Ω(summary.Failure).Should(BeZero()) - }) - }) - - Context("when the body fails", func() { - BeforeEach(func() { - befSuite = NewBeforeSuiteNode(func() { - failer.Fail("oops", innerCodeLocation) - }, codeLocation, 0, failer) - outcome = befSuite.Run(0, 0, "") - }) - - It("should return false when run and report as failed", func() { - Ω(outcome).Should(BeFalse()) - Ω(befSuite.Passed()).Should(BeFalse()) - }) - - It("should have the correct summary", func() { - summary := befSuite.Summary() - Ω(summary.State).Should(Equal(types.SpecStateFailed)) - Ω(summary.Failure.Message).Should(Equal("oops")) - Ω(summary.Failure.Location).Should(Equal(innerCodeLocation)) - Ω(summary.Failure.ForwardedPanic).Should(BeEmpty()) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeBeforeSuite)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - - Context("when the body times out", func() { - BeforeEach(func() { - befSuite = NewBeforeSuiteNode(func(done Done) { - }, codeLocation, time.Millisecond, failer) - outcome = befSuite.Run(0, 0, "") - }) - - It("should return false when run and report as failed", func() { - Ω(outcome).Should(BeFalse()) - Ω(befSuite.Passed()).Should(BeFalse()) - }) - - It("should have the correct summary", func() { - summary := befSuite.Summary() - Ω(summary.State).Should(Equal(types.SpecStateTimedOut)) - Ω(summary.Failure.ForwardedPanic).Should(BeEmpty()) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeBeforeSuite)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - - Context("when the body panics", func() { - BeforeEach(func() { - befSuite = NewBeforeSuiteNode(func() { - panic("bam") - }, codeLocation, 0, failer) - outcome = befSuite.Run(0, 0, "") - }) - - It("should return false when run and report as failed", func() { - Ω(outcome).Should(BeFalse()) - Ω(befSuite.Passed()).Should(BeFalse()) - }) - - It("should have the correct summary", func() { - summary := befSuite.Summary() - Ω(summary.State).Should(Equal(types.SpecStatePanicked)) - Ω(summary.Failure.ForwardedPanic).Should(Equal("bam")) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeBeforeSuite)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - }) - - Describe("AfterSuite nodes", func() { - var aftSuite SuiteNode - var failer *Failer.Failer - var codeLocation types.CodeLocation - var innerCodeLocation types.CodeLocation - var outcome bool - - BeforeEach(func() { - failer = Failer.New() - codeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - }) - - Context("when the body passes", func() { - BeforeEach(func() { - aftSuite = NewAfterSuiteNode(func() { - time.Sleep(10 * time.Millisecond) - }, codeLocation, 0, failer) - outcome = aftSuite.Run(0, 0, "") - }) - - It("should return true when run and report as passed", func() { - Ω(outcome).Should(BeTrue()) - Ω(aftSuite.Passed()).Should(BeTrue()) - }) - - It("should have the correct summary", func() { - summary := aftSuite.Summary() - Ω(summary.ComponentType).Should(Equal(types.SpecComponentTypeAfterSuite)) - Ω(summary.CodeLocation).Should(Equal(codeLocation)) - Ω(summary.State).Should(Equal(types.SpecStatePassed)) - Ω(summary.RunTime).Should(BeNumerically(">=", 10*time.Millisecond)) - Ω(summary.Failure).Should(BeZero()) - }) - }) - - Context("when the body fails", func() { - BeforeEach(func() { - aftSuite = NewAfterSuiteNode(func() { - failer.Fail("oops", innerCodeLocation) - }, codeLocation, 0, failer) - outcome = aftSuite.Run(0, 0, "") - }) - - It("should return false when run and report as failed", func() { - Ω(outcome).Should(BeFalse()) - Ω(aftSuite.Passed()).Should(BeFalse()) - }) - - It("should have the correct summary", func() { - summary := aftSuite.Summary() - Ω(summary.State).Should(Equal(types.SpecStateFailed)) - Ω(summary.Failure.Message).Should(Equal("oops")) - Ω(summary.Failure.Location).Should(Equal(innerCodeLocation)) - Ω(summary.Failure.ForwardedPanic).Should(BeEmpty()) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeAfterSuite)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - - Context("when the body times out", func() { - BeforeEach(func() { - aftSuite = NewAfterSuiteNode(func(done Done) { - }, codeLocation, time.Millisecond, failer) - outcome = aftSuite.Run(0, 0, "") - }) - - It("should return false when run and report as failed", func() { - Ω(outcome).Should(BeFalse()) - Ω(aftSuite.Passed()).Should(BeFalse()) - }) - - It("should have the correct summary", func() { - summary := aftSuite.Summary() - Ω(summary.State).Should(Equal(types.SpecStateTimedOut)) - Ω(summary.Failure.ForwardedPanic).Should(BeEmpty()) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeAfterSuite)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - - Context("when the body panics", func() { - BeforeEach(func() { - aftSuite = NewAfterSuiteNode(func() { - panic("bam") - }, codeLocation, 0, failer) - outcome = aftSuite.Run(0, 0, "") - }) - - It("should return false when run and report as failed", func() { - Ω(outcome).Should(BeFalse()) - Ω(aftSuite.Passed()).Should(BeFalse()) - }) - - It("should have the correct summary", func() { - summary := aftSuite.Summary() - Ω(summary.State).Should(Equal(types.SpecStatePanicked)) - Ω(summary.Failure.ForwardedPanic).Should(Equal("bam")) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeAfterSuite)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node_test.go deleted file mode 100644 index 4266a4b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node_test.go +++ /dev/null @@ -1,196 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/leafnodes" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - "sync" - - "github.com/onsi/gomega/ghttp" - "net/http" - - "github.com/onsi/ginkgo/internal/codelocation" - Failer "github.com/onsi/ginkgo/internal/failer" - "time" -) - -var _ = Describe("SynchronizedAfterSuiteNode", func() { - var failer *Failer.Failer - var node SuiteNode - var codeLocation types.CodeLocation - var innerCodeLocation types.CodeLocation - var outcome bool - var server *ghttp.Server - var things []string - var lock *sync.Mutex - - BeforeEach(func() { - things = []string{} - server = ghttp.NewServer() - codeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - failer = Failer.New() - lock = &sync.Mutex{} - }) - - AfterEach(func() { - server.Close() - }) - - newNode := func(bodyA interface{}, bodyB interface{}) SuiteNode { - return NewSynchronizedAfterSuiteNode(bodyA, bodyB, codeLocation, time.Millisecond, failer) - } - - ranThing := func(thing string) { - lock.Lock() - defer lock.Unlock() - things = append(things, thing) - } - - thingsThatRan := func() []string { - lock.Lock() - defer lock.Unlock() - return things - } - - Context("when not running in parallel", func() { - Context("when all is well", func() { - BeforeEach(func() { - node = newNode(func() { - ranThing("A") - }, func() { - ranThing("B") - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should run A, then B", func() { - Ω(thingsThatRan()).Should(Equal([]string{"A", "B"})) - }) - - It("should report success", func() { - Ω(outcome).Should(BeTrue()) - Ω(node.Passed()).Should(BeTrue()) - Ω(node.Summary().State).Should(Equal(types.SpecStatePassed)) - }) - }) - - Context("when A fails", func() { - BeforeEach(func() { - node = newNode(func() { - ranThing("A") - failer.Fail("bam", innerCodeLocation) - }, func() { - ranThing("B") - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should still run B", func() { - Ω(thingsThatRan()).Should(Equal([]string{"A", "B"})) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - Ω(node.Summary().State).Should(Equal(types.SpecStateFailed)) - }) - }) - - Context("when B fails", func() { - BeforeEach(func() { - node = newNode(func() { - ranThing("A") - }, func() { - ranThing("B") - failer.Fail("bam", innerCodeLocation) - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should run all the things", func() { - Ω(thingsThatRan()).Should(Equal([]string{"A", "B"})) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - Ω(node.Summary().State).Should(Equal(types.SpecStateFailed)) - }) - }) - }) - - Context("when running in parallel", func() { - Context("as the first node", func() { - BeforeEach(func() { - server.AppendHandlers(ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/RemoteAfterSuiteData"), - func(writer http.ResponseWriter, request *http.Request) { - ranThing("Request1") - }, - ghttp.RespondWithJSONEncoded(200, types.RemoteAfterSuiteData{false}), - ), ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/RemoteAfterSuiteData"), - func(writer http.ResponseWriter, request *http.Request) { - ranThing("Request2") - }, - ghttp.RespondWithJSONEncoded(200, types.RemoteAfterSuiteData{false}), - ), ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/RemoteAfterSuiteData"), - func(writer http.ResponseWriter, request *http.Request) { - ranThing("Request3") - }, - ghttp.RespondWithJSONEncoded(200, types.RemoteAfterSuiteData{true}), - )) - - node = newNode(func() { - ranThing("A") - }, func() { - ranThing("B") - }) - - outcome = node.Run(1, 3, server.URL()) - }) - - It("should run A and, when the server says its time, run B", func() { - Ω(thingsThatRan()).Should(Equal([]string{"A", "Request1", "Request2", "Request3", "B"})) - }) - - It("should report success", func() { - Ω(outcome).Should(BeTrue()) - Ω(node.Passed()).Should(BeTrue()) - Ω(node.Summary().State).Should(Equal(types.SpecStatePassed)) - }) - }) - - Context("as any other node", func() { - BeforeEach(func() { - node = newNode(func() { - ranThing("A") - }, func() { - ranThing("B") - }) - - outcome = node.Run(2, 3, server.URL()) - }) - - It("should run A, and not run B", func() { - Ω(thingsThatRan()).Should(Equal([]string{"A"})) - }) - - It("should not talk to the server", func() { - Ω(server.ReceivedRequests()).Should(BeEmpty()) - }) - - It("should report success", func() { - Ω(outcome).Should(BeTrue()) - Ω(node.Passed()).Should(BeTrue()) - Ω(node.Summary().State).Should(Equal(types.SpecStatePassed)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node_test.go deleted file mode 100644 index dbf2426..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node_test.go +++ /dev/null @@ -1,445 +0,0 @@ -package leafnodes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/leafnodes" - . "github.com/onsi/gomega" - - "github.com/onsi/gomega/ghttp" - "net/http" - - "github.com/onsi/ginkgo/internal/codelocation" - Failer "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/types" - "time" -) - -var _ = Describe("SynchronizedBeforeSuiteNode", func() { - var failer *Failer.Failer - var node SuiteNode - var codeLocation types.CodeLocation - var innerCodeLocation types.CodeLocation - var outcome bool - var server *ghttp.Server - - BeforeEach(func() { - server = ghttp.NewServer() - codeLocation = codelocation.New(0) - innerCodeLocation = codelocation.New(0) - failer = Failer.New() - }) - - AfterEach(func() { - server.Close() - }) - - newNode := func(bodyA interface{}, bodyB interface{}) SuiteNode { - return NewSynchronizedBeforeSuiteNode(bodyA, bodyB, codeLocation, time.Millisecond, failer) - } - - Describe("when not running in parallel", func() { - Context("when all is well", func() { - var data []byte - BeforeEach(func() { - data = nil - - node = newNode(func() []byte { - return []byte("my data") - }, func(d []byte) { - data = d - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should run A, then B passing the output from A to B", func() { - Ω(data).Should(Equal([]byte("my data"))) - }) - - It("should report success", func() { - Ω(outcome).Should(BeTrue()) - Ω(node.Passed()).Should(BeTrue()) - Ω(node.Summary().State).Should(Equal(types.SpecStatePassed)) - }) - }) - - Context("when A fails", func() { - var ranB bool - BeforeEach(func() { - ranB = false - node = newNode(func() []byte { - failer.Fail("boom", innerCodeLocation) - return nil - }, func([]byte) { - ranB = true - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should not run B", func() { - Ω(ranB).Should(BeFalse()) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - Ω(node.Summary().State).Should(Equal(types.SpecStateFailed)) - }) - }) - - Context("when B fails", func() { - BeforeEach(func() { - node = newNode(func() []byte { - return nil - }, func([]byte) { - failer.Fail("boom", innerCodeLocation) - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - Ω(node.Summary().State).Should(Equal(types.SpecStateFailed)) - }) - }) - - Context("when A times out", func() { - var ranB bool - BeforeEach(func() { - ranB = false - node = newNode(func(Done) []byte { - time.Sleep(time.Second) - return nil - }, func([]byte) { - ranB = true - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should not run B", func() { - Ω(ranB).Should(BeFalse()) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - Ω(node.Summary().State).Should(Equal(types.SpecStateTimedOut)) - }) - }) - - Context("when B times out", func() { - BeforeEach(func() { - node = newNode(func() []byte { - return nil - }, func([]byte, Done) { - time.Sleep(time.Second) - }) - - outcome = node.Run(1, 1, server.URL()) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - Ω(node.Summary().State).Should(Equal(types.SpecStateTimedOut)) - }) - }) - }) - - Describe("when running in parallel", func() { - var ranB bool - var parallelNode, parallelTotal int - BeforeEach(func() { - ranB = false - parallelNode, parallelTotal = 1, 3 - }) - - Context("as the first node, it runs A", func() { - var expectedState types.RemoteBeforeSuiteData - - BeforeEach(func() { - parallelNode, parallelTotal = 1, 3 - }) - - JustBeforeEach(func() { - server.AppendHandlers(ghttp.CombineHandlers( - ghttp.VerifyRequest("POST", "/BeforeSuiteState"), - ghttp.VerifyJSONRepresenting(expectedState), - )) - - outcome = node.Run(parallelNode, parallelTotal, server.URL()) - }) - - Context("when A succeeds", func() { - BeforeEach(func() { - expectedState = types.RemoteBeforeSuiteData{[]byte("my data"), types.RemoteBeforeSuiteStatePassed} - - node = newNode(func() []byte { - return []byte("my data") - }, func([]byte) { - ranB = true - }) - }) - - It("should post about A succeeding", func() { - Ω(server.ReceivedRequests()).Should(HaveLen(1)) - }) - - It("should run B", func() { - Ω(ranB).Should(BeTrue()) - }) - - It("should report success", func() { - Ω(outcome).Should(BeTrue()) - }) - }) - - Context("when A fails", func() { - BeforeEach(func() { - expectedState = types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStateFailed} - - node = newNode(func() []byte { - panic("BAM") - return []byte("my data") - }, func([]byte) { - ranB = true - }) - }) - - It("should post about A failing", func() { - Ω(server.ReceivedRequests()).Should(HaveLen(1)) - }) - - It("should not run B", func() { - Ω(ranB).Should(BeFalse()) - }) - - It("should report failure", func() { - Ω(outcome).Should(BeFalse()) - }) - }) - }) - - Context("as the Nth node", func() { - var statusCode int - var response interface{} - var ranA bool - var bData []byte - - BeforeEach(func() { - ranA = false - bData = nil - - statusCode = http.StatusOK - - server.AppendHandlers(ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/BeforeSuiteState"), - ghttp.RespondWith(http.StatusOK, string((types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStatePending}).ToJSON())), - ), ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/BeforeSuiteState"), - ghttp.RespondWith(http.StatusOK, string((types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStatePending}).ToJSON())), - ), ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/BeforeSuiteState"), - ghttp.RespondWithJSONEncodedPtr(&statusCode, &response), - )) - - node = newNode(func() []byte { - ranA = true - return nil - }, func(data []byte) { - bData = data - }) - - parallelNode, parallelTotal = 2, 3 - }) - - Context("when A on node1 succeeds", func() { - BeforeEach(func() { - response = types.RemoteBeforeSuiteData{[]byte("my data"), types.RemoteBeforeSuiteStatePassed} - outcome = node.Run(parallelNode, parallelTotal, server.URL()) - }) - - It("should not run A", func() { - Ω(ranA).Should(BeFalse()) - }) - - It("should poll for A", func() { - Ω(server.ReceivedRequests()).Should(HaveLen(3)) - }) - - It("should run B when the polling succeeds", func() { - Ω(bData).Should(Equal([]byte("my data"))) - }) - - It("should succeed", func() { - Ω(outcome).Should(BeTrue()) - Ω(node.Passed()).Should(BeTrue()) - }) - }) - - Context("when A on node1 fails", func() { - BeforeEach(func() { - response = types.RemoteBeforeSuiteData{[]byte("my data"), types.RemoteBeforeSuiteStateFailed} - outcome = node.Run(parallelNode, parallelTotal, server.URL()) - }) - - It("should not run A", func() { - Ω(ranA).Should(BeFalse()) - }) - - It("should poll for A", func() { - Ω(server.ReceivedRequests()).Should(HaveLen(3)) - }) - - It("should not run B", func() { - Ω(bData).Should(BeNil()) - }) - - It("should fail", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - - summary := node.Summary() - Ω(summary.State).Should(Equal(types.SpecStateFailed)) - Ω(summary.Failure.Message).Should(Equal("BeforeSuite on Node 1 failed")) - Ω(summary.Failure.Location).Should(Equal(codeLocation)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeBeforeSuite)) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - - Context("when node1 disappears", func() { - BeforeEach(func() { - response = types.RemoteBeforeSuiteData{[]byte("my data"), types.RemoteBeforeSuiteStateDisappeared} - outcome = node.Run(parallelNode, parallelTotal, server.URL()) - }) - - It("should not run A", func() { - Ω(ranA).Should(BeFalse()) - }) - - It("should poll for A", func() { - Ω(server.ReceivedRequests()).Should(HaveLen(3)) - }) - - It("should not run B", func() { - Ω(bData).Should(BeNil()) - }) - - It("should fail", func() { - Ω(outcome).Should(BeFalse()) - Ω(node.Passed()).Should(BeFalse()) - - summary := node.Summary() - Ω(summary.State).Should(Equal(types.SpecStateFailed)) - Ω(summary.Failure.Message).Should(Equal("Node 1 disappeared before completing BeforeSuite")) - Ω(summary.Failure.Location).Should(Equal(codeLocation)) - Ω(summary.Failure.ComponentType).Should(Equal(types.SpecComponentTypeBeforeSuite)) - Ω(summary.Failure.ComponentIndex).Should(Equal(0)) - Ω(summary.Failure.ComponentCodeLocation).Should(Equal(codeLocation)) - }) - }) - }) - }) - - Describe("construction", func() { - Describe("the first function", func() { - Context("when the first function returns a byte array", func() { - Context("and takes nothing", func() { - It("should be fine", func() { - Ω(func() { - newNode(func() []byte { return nil }, func([]byte) {}) - }).ShouldNot(Panic()) - }) - }) - - Context("and takes a done function", func() { - It("should be fine", func() { - Ω(func() { - newNode(func(Done) []byte { return nil }, func([]byte) {}) - }).ShouldNot(Panic()) - }) - }) - - Context("and takes more than one thing", func() { - It("should panic", func() { - Ω(func() { - newNode(func(Done, Done) []byte { return nil }, func([]byte) {}) - }).Should(Panic()) - }) - }) - - Context("and takes something else", func() { - It("should panic", func() { - Ω(func() { - newNode(func(bool) []byte { return nil }, func([]byte) {}) - }).Should(Panic()) - }) - }) - }) - - Context("when the first function does not return a byte array", func() { - It("should panic", func() { - Ω(func() { - newNode(func() {}, func([]byte) {}) - }).Should(Panic()) - - Ω(func() { - newNode(func() []int { return nil }, func([]byte) {}) - }).Should(Panic()) - }) - }) - }) - - Describe("the second function", func() { - Context("when the second function takes a byte array", func() { - It("should be fine", func() { - Ω(func() { - newNode(func() []byte { return nil }, func([]byte) {}) - }).ShouldNot(Panic()) - }) - }) - - Context("when it also takes a done channel", func() { - It("should be fine", func() { - Ω(func() { - newNode(func() []byte { return nil }, func([]byte, Done) {}) - }).ShouldNot(Panic()) - }) - }) - - Context("if it takes anything else", func() { - It("should panic", func() { - Ω(func() { - newNode(func() []byte { return nil }, func([]byte, chan bool) {}) - }).Should(Panic()) - - Ω(func() { - newNode(func() []byte { return nil }, func(string) {}) - }).Should(Panic()) - }) - }) - - Context("if it takes nothing at all", func() { - It("should panic", func() { - Ω(func() { - newNode(func() []byte { return nil }, func() {}) - }).Should(Panic()) - }) - }) - - Context("if it returns something", func() { - It("should panic", func() { - Ω(func() { - newNode(func() []byte { return nil }, func([]byte) []byte { return nil }) - }).Should(Panic()) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/aggregator_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/aggregator_test.go deleted file mode 100644 index 377a016..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/aggregator_test.go +++ /dev/null @@ -1,311 +0,0 @@ -package remote_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/config" - . "github.com/onsi/ginkgo/internal/remote" - st "github.com/onsi/ginkgo/reporters/stenographer" - "github.com/onsi/ginkgo/types" - "time" -) - -var _ = Describe("Aggregator", func() { - var ( - aggregator *Aggregator - reporterConfig config.DefaultReporterConfigType - stenographer *st.FakeStenographer - result chan bool - - ginkgoConfig1 config.GinkgoConfigType - ginkgoConfig2 config.GinkgoConfigType - - suiteSummary1 *types.SuiteSummary - suiteSummary2 *types.SuiteSummary - - beforeSummary *types.SetupSummary - afterSummary *types.SetupSummary - specSummary *types.SpecSummary - - suiteDescription string - ) - - BeforeEach(func() { - reporterConfig = config.DefaultReporterConfigType{ - NoColor: false, - SlowSpecThreshold: 0.1, - NoisyPendings: true, - Succinct: false, - Verbose: true, - } - stenographer = st.NewFakeStenographer() - result = make(chan bool, 1) - aggregator = NewAggregator(2, result, reporterConfig, stenographer) - - // - // now set up some fixture data - // - - ginkgoConfig1 = config.GinkgoConfigType{ - RandomSeed: 1138, - RandomizeAllSpecs: true, - ParallelNode: 1, - ParallelTotal: 2, - } - - ginkgoConfig2 = config.GinkgoConfigType{ - RandomSeed: 1138, - RandomizeAllSpecs: true, - ParallelNode: 2, - ParallelTotal: 2, - } - - suiteDescription = "My Parallel Suite" - - suiteSummary1 = &types.SuiteSummary{ - SuiteDescription: suiteDescription, - - NumberOfSpecsBeforeParallelization: 30, - NumberOfTotalSpecs: 17, - NumberOfSpecsThatWillBeRun: 15, - NumberOfPendingSpecs: 1, - NumberOfSkippedSpecs: 1, - } - - suiteSummary2 = &types.SuiteSummary{ - SuiteDescription: suiteDescription, - - NumberOfSpecsBeforeParallelization: 30, - NumberOfTotalSpecs: 13, - NumberOfSpecsThatWillBeRun: 8, - NumberOfPendingSpecs: 2, - NumberOfSkippedSpecs: 3, - } - - beforeSummary = &types.SetupSummary{ - State: types.SpecStatePassed, - CapturedOutput: "BeforeSuiteOutput", - } - - afterSummary = &types.SetupSummary{ - State: types.SpecStatePassed, - CapturedOutput: "AfterSuiteOutput", - } - - specSummary = &types.SpecSummary{ - State: types.SpecStatePassed, - CapturedOutput: "SpecOutput", - } - }) - - call := func(method string, args ...interface{}) st.FakeStenographerCall { - return st.NewFakeStenographerCall(method, args...) - } - - beginSuite := func() { - stenographer.Reset() - aggregator.SpecSuiteWillBegin(ginkgoConfig2, suiteSummary2) - aggregator.SpecSuiteWillBegin(ginkgoConfig1, suiteSummary1) - Eventually(func() interface{} { - return len(stenographer.Calls()) - }).Should(BeNumerically(">=", 3)) - } - - Describe("Announcing the beginning of the suite", func() { - Context("When one of the parallel-suites starts", func() { - BeforeEach(func() { - aggregator.SpecSuiteWillBegin(ginkgoConfig2, suiteSummary2) - }) - - It("should be silent", func() { - Consistently(func() interface{} { return stenographer.Calls() }).Should(BeEmpty()) - }) - }) - - Context("once all of the parallel-suites have started", func() { - BeforeEach(func() { - aggregator.SpecSuiteWillBegin(ginkgoConfig2, suiteSummary2) - aggregator.SpecSuiteWillBegin(ginkgoConfig1, suiteSummary1) - Eventually(func() interface{} { - return stenographer.Calls() - }).Should(HaveLen(3)) - }) - - It("should announce the beginning of the suite", func() { - Ω(stenographer.Calls()).Should(HaveLen(3)) - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuite", suiteDescription, ginkgoConfig1.RandomSeed, true, false))) - Ω(stenographer.Calls()[1]).Should(Equal(call("AnnounceNumberOfSpecs", 23, 30, false))) - Ω(stenographer.Calls()[2]).Should(Equal(call("AnnounceAggregatedParallelRun", 2, false))) - }) - }) - }) - - Describe("Announcing specs and before suites", func() { - Context("when the parallel-suites have not all started", func() { - BeforeEach(func() { - aggregator.BeforeSuiteDidRun(beforeSummary) - aggregator.AfterSuiteDidRun(afterSummary) - aggregator.SpecDidComplete(specSummary) - }) - - It("should not announce any specs", func() { - Consistently(func() interface{} { return stenographer.Calls() }).Should(BeEmpty()) - }) - - Context("when the parallel-suites subsequently start", func() { - BeforeEach(func() { - beginSuite() - }) - - It("should announce the specs, the before suites and the after suites", func() { - Eventually(func() interface{} { - return stenographer.Calls() - }).Should(ContainElement(call("AnnounceSuccesfulSpec", specSummary))) - - Ω(stenographer.Calls()).Should(ContainElement(call("AnnounceCapturedOutput", beforeSummary.CapturedOutput))) - Ω(stenographer.Calls()).Should(ContainElement(call("AnnounceCapturedOutput", afterSummary.CapturedOutput))) - }) - }) - }) - - Context("When the parallel-suites have all started", func() { - BeforeEach(func() { - beginSuite() - stenographer.Reset() - }) - - Context("When a spec completes", func() { - BeforeEach(func() { - aggregator.BeforeSuiteDidRun(beforeSummary) - aggregator.SpecDidComplete(specSummary) - aggregator.AfterSuiteDidRun(afterSummary) - Eventually(func() interface{} { - return stenographer.Calls() - }).Should(HaveLen(5)) - }) - - It("should announce the captured output of the BeforeSuite", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceCapturedOutput", beforeSummary.CapturedOutput))) - }) - - It("should announce that the spec will run (when in verbose mode)", func() { - Ω(stenographer.Calls()[1]).Should(Equal(call("AnnounceSpecWillRun", specSummary))) - }) - - It("should announce the captured stdout of the spec", func() { - Ω(stenographer.Calls()[2]).Should(Equal(call("AnnounceCapturedOutput", specSummary.CapturedOutput))) - }) - - It("should announce completion", func() { - Ω(stenographer.Calls()[3]).Should(Equal(call("AnnounceSuccesfulSpec", specSummary))) - }) - - It("should announce the captured output of the AfterSuite", func() { - Ω(stenographer.Calls()[4]).Should(Equal(call("AnnounceCapturedOutput", afterSummary.CapturedOutput))) - }) - }) - }) - }) - - Describe("Announcing the end of the suite", func() { - BeforeEach(func() { - beginSuite() - stenographer.Reset() - }) - - Context("When one of the parallel-suites ends", func() { - BeforeEach(func() { - aggregator.SpecSuiteDidEnd(suiteSummary2) - }) - - It("should be silent", func() { - Consistently(func() interface{} { return stenographer.Calls() }).Should(BeEmpty()) - }) - - It("should not notify the channel", func() { - Ω(result).Should(BeEmpty()) - }) - }) - - Context("once all of the parallel-suites end", func() { - BeforeEach(func() { - time.Sleep(200 * time.Millisecond) - - suiteSummary1.SuiteSucceeded = true - suiteSummary1.NumberOfPassedSpecs = 15 - suiteSummary1.NumberOfFailedSpecs = 0 - suiteSummary2.SuiteSucceeded = false - suiteSummary2.NumberOfPassedSpecs = 5 - suiteSummary2.NumberOfFailedSpecs = 3 - - aggregator.SpecSuiteDidEnd(suiteSummary2) - aggregator.SpecSuiteDidEnd(suiteSummary1) - Eventually(func() interface{} { - return stenographer.Calls() - }).Should(HaveLen(2)) - }) - - It("should announce the end of the suite", func() { - compositeSummary := stenographer.Calls()[1].Args[0].(*types.SuiteSummary) - - Ω(compositeSummary.SuiteSucceeded).Should(BeFalse()) - Ω(compositeSummary.NumberOfSpecsThatWillBeRun).Should(Equal(23)) - Ω(compositeSummary.NumberOfTotalSpecs).Should(Equal(30)) - Ω(compositeSummary.NumberOfPassedSpecs).Should(Equal(20)) - Ω(compositeSummary.NumberOfFailedSpecs).Should(Equal(3)) - Ω(compositeSummary.NumberOfPendingSpecs).Should(Equal(3)) - Ω(compositeSummary.NumberOfSkippedSpecs).Should(Equal(4)) - Ω(compositeSummary.RunTime.Seconds()).Should(BeNumerically(">", 0.2)) - }) - }) - - Context("when all the parallel-suites pass", func() { - BeforeEach(func() { - suiteSummary1.SuiteSucceeded = true - suiteSummary2.SuiteSucceeded = true - - aggregator.SpecSuiteDidEnd(suiteSummary2) - aggregator.SpecSuiteDidEnd(suiteSummary1) - Eventually(func() interface{} { - return stenographer.Calls() - }).Should(HaveLen(2)) - }) - - It("should report success", func() { - compositeSummary := stenographer.Calls()[1].Args[0].(*types.SuiteSummary) - - Ω(compositeSummary.SuiteSucceeded).Should(BeTrue()) - }) - - It("should notify the channel that it succeded", func(done Done) { - Ω(<-result).Should(BeTrue()) - close(done) - }) - }) - - Context("when one of the parallel-suites fails", func() { - BeforeEach(func() { - suiteSummary1.SuiteSucceeded = true - suiteSummary2.SuiteSucceeded = false - - aggregator.SpecSuiteDidEnd(suiteSummary2) - aggregator.SpecSuiteDidEnd(suiteSummary1) - Eventually(func() interface{} { - return stenographer.Calls() - }).Should(HaveLen(2)) - }) - - It("should report failure", func() { - compositeSummary := stenographer.Calls()[1].Args[0].(*types.SuiteSummary) - - Ω(compositeSummary.SuiteSucceeded).Should(BeFalse()) - }) - - It("should notify the channel that it failed", func(done Done) { - Ω(<-result).Should(BeFalse()) - close(done) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/fake_output_interceptor_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/fake_output_interceptor_test.go deleted file mode 100644 index a928f93..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/fake_output_interceptor_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package remote_test - -type fakeOutputInterceptor struct { - DidStartInterceptingOutput bool - DidStopInterceptingOutput bool - InterceptedOutput string -} - -func (interceptor *fakeOutputInterceptor) StartInterceptingOutput() error { - interceptor.DidStartInterceptingOutput = true - return nil -} - -func (interceptor *fakeOutputInterceptor) StopInterceptingAndReturnOutput() (string, error) { - interceptor.DidStopInterceptingOutput = true - return interceptor.InterceptedOutput, nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/fake_poster_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/fake_poster_test.go deleted file mode 100644 index 3543c59..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/fake_poster_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package remote_test - -import ( - "io" - "io/ioutil" - "net/http" -) - -type post struct { - url string - bodyType string - bodyContent []byte -} - -type fakePoster struct { - posts []post -} - -func newFakePoster() *fakePoster { - return &fakePoster{ - posts: make([]post, 0), - } -} - -func (poster *fakePoster) Post(url string, bodyType string, body io.Reader) (resp *http.Response, err error) { - bodyContent, _ := ioutil.ReadAll(body) - poster.posts = append(poster.posts, post{ - url: url, - bodyType: bodyType, - bodyContent: bodyContent, - }) - return nil, nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/forwarding_reporter_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/forwarding_reporter_test.go deleted file mode 100644 index e5f3b1e..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/forwarding_reporter_test.go +++ /dev/null @@ -1,180 +0,0 @@ -package remote_test - -import ( - "encoding/json" - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/config" - . "github.com/onsi/ginkgo/internal/remote" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" -) - -var _ = Describe("ForwardingReporter", func() { - var ( - reporter *ForwardingReporter - interceptor *fakeOutputInterceptor - poster *fakePoster - suiteSummary *types.SuiteSummary - specSummary *types.SpecSummary - setupSummary *types.SetupSummary - serverHost string - ) - - BeforeEach(func() { - serverHost = "http://127.0.0.1:7788" - - poster = newFakePoster() - - interceptor = &fakeOutputInterceptor{ - InterceptedOutput: "The intercepted output!", - } - - reporter = NewForwardingReporter(serverHost, poster, interceptor) - - suiteSummary = &types.SuiteSummary{ - SuiteDescription: "My Test Suite", - } - - setupSummary = &types.SetupSummary{ - State: types.SpecStatePassed, - } - - specSummary = &types.SpecSummary{ - ComponentTexts: []string{"My", "Spec"}, - State: types.SpecStatePassed, - } - }) - - Context("When a suite begins", func() { - BeforeEach(func() { - reporter.SpecSuiteWillBegin(config.GinkgoConfig, suiteSummary) - }) - - It("should start intercepting output", func() { - Ω(interceptor.DidStartInterceptingOutput).Should(BeTrue()) - }) - - It("should POST the SuiteSummary and Ginkgo Config to the Ginkgo server", func() { - Ω(poster.posts).Should(HaveLen(1)) - Ω(poster.posts[0].url).Should(Equal("http://127.0.0.1:7788/SpecSuiteWillBegin")) - Ω(poster.posts[0].bodyType).Should(Equal("application/json")) - - var sentData struct { - SentConfig config.GinkgoConfigType `json:"config"` - SentSuiteSummary *types.SuiteSummary `json:"suite-summary"` - } - - err := json.Unmarshal(poster.posts[0].bodyContent, &sentData) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(sentData.SentConfig).Should(Equal(config.GinkgoConfig)) - Ω(sentData.SentSuiteSummary).Should(Equal(suiteSummary)) - }) - }) - - Context("when a BeforeSuite completes", func() { - BeforeEach(func() { - reporter.BeforeSuiteDidRun(setupSummary) - }) - - It("should stop, then start intercepting output", func() { - Ω(interceptor.DidStopInterceptingOutput).Should(BeTrue()) - Ω(interceptor.DidStartInterceptingOutput).Should(BeTrue()) - }) - - It("should POST the SetupSummary to the Ginkgo server", func() { - Ω(poster.posts).Should(HaveLen(1)) - Ω(poster.posts[0].url).Should(Equal("http://127.0.0.1:7788/BeforeSuiteDidRun")) - Ω(poster.posts[0].bodyType).Should(Equal("application/json")) - - var summary *types.SetupSummary - err := json.Unmarshal(poster.posts[0].bodyContent, &summary) - Ω(err).ShouldNot(HaveOccurred()) - setupSummary.CapturedOutput = interceptor.InterceptedOutput - Ω(summary).Should(Equal(setupSummary)) - }) - }) - - Context("when an AfterSuite completes", func() { - BeforeEach(func() { - reporter.AfterSuiteDidRun(setupSummary) - }) - - It("should stop, then start intercepting output", func() { - Ω(interceptor.DidStopInterceptingOutput).Should(BeTrue()) - Ω(interceptor.DidStartInterceptingOutput).Should(BeTrue()) - }) - - It("should POST the SetupSummary to the Ginkgo server", func() { - Ω(poster.posts).Should(HaveLen(1)) - Ω(poster.posts[0].url).Should(Equal("http://127.0.0.1:7788/AfterSuiteDidRun")) - Ω(poster.posts[0].bodyType).Should(Equal("application/json")) - - var summary *types.SetupSummary - err := json.Unmarshal(poster.posts[0].bodyContent, &summary) - Ω(err).ShouldNot(HaveOccurred()) - setupSummary.CapturedOutput = interceptor.InterceptedOutput - Ω(summary).Should(Equal(setupSummary)) - }) - }) - - Context("When a spec will run", func() { - BeforeEach(func() { - reporter.SpecWillRun(specSummary) - }) - - It("should POST the SpecSummary to the Ginkgo server", func() { - Ω(poster.posts).Should(HaveLen(1)) - Ω(poster.posts[0].url).Should(Equal("http://127.0.0.1:7788/SpecWillRun")) - Ω(poster.posts[0].bodyType).Should(Equal("application/json")) - - var summary *types.SpecSummary - err := json.Unmarshal(poster.posts[0].bodyContent, &summary) - Ω(err).ShouldNot(HaveOccurred()) - Ω(summary).Should(Equal(specSummary)) - }) - - Context("When a spec completes", func() { - BeforeEach(func() { - specSummary.State = types.SpecStatePanicked - reporter.SpecDidComplete(specSummary) - }) - - It("should POST the SpecSummary to the Ginkgo server and include any intercepted output", func() { - Ω(poster.posts).Should(HaveLen(2)) - Ω(poster.posts[1].url).Should(Equal("http://127.0.0.1:7788/SpecDidComplete")) - Ω(poster.posts[1].bodyType).Should(Equal("application/json")) - - var summary *types.SpecSummary - err := json.Unmarshal(poster.posts[1].bodyContent, &summary) - Ω(err).ShouldNot(HaveOccurred()) - specSummary.CapturedOutput = interceptor.InterceptedOutput - Ω(summary).Should(Equal(specSummary)) - }) - - It("should stop, then start intercepting output", func() { - Ω(interceptor.DidStopInterceptingOutput).Should(BeTrue()) - Ω(interceptor.DidStartInterceptingOutput).Should(BeTrue()) - }) - }) - }) - - Context("When a suite ends", func() { - BeforeEach(func() { - reporter.SpecSuiteDidEnd(suiteSummary) - }) - - It("should POST the SuiteSummary to the Ginkgo server", func() { - Ω(poster.posts).Should(HaveLen(1)) - Ω(poster.posts[0].url).Should(Equal("http://127.0.0.1:7788/SpecSuiteDidEnd")) - Ω(poster.posts[0].bodyType).Should(Equal("application/json")) - - var summary *types.SuiteSummary - - err := json.Unmarshal(poster.posts[0].bodyContent, &summary) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(summary).Should(Equal(suiteSummary)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go deleted file mode 100644 index 181b227..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go +++ /dev/null @@ -1,52 +0,0 @@ -// +build freebsd openbsd netbsd dragonfly darwin linux - -package remote - -import ( - "errors" - "io/ioutil" - "os" - "syscall" -) - -func NewOutputInterceptor() OutputInterceptor { - return &outputInterceptor{} -} - -type outputInterceptor struct { - redirectFile *os.File - intercepting bool -} - -func (interceptor *outputInterceptor) StartInterceptingOutput() error { - if interceptor.intercepting { - return errors.New("Already intercepting output!") - } - interceptor.intercepting = true - - var err error - - interceptor.redirectFile, err = ioutil.TempFile("", "ginkgo-output") - if err != nil { - return err - } - - syscall.Dup2(int(interceptor.redirectFile.Fd()), 1) - syscall.Dup2(int(interceptor.redirectFile.Fd()), 2) - - return nil -} - -func (interceptor *outputInterceptor) StopInterceptingAndReturnOutput() (string, error) { - if !interceptor.intercepting { - return "", errors.New("Not intercepting output!") - } - - interceptor.redirectFile.Close() - output, err := ioutil.ReadFile(interceptor.redirectFile.Name()) - os.Remove(interceptor.redirectFile.Name()) - - interceptor.intercepting = false - - return string(output), err -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/remote_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/remote_suite_test.go deleted file mode 100644 index e6b4e9f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/remote_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package remote_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestRemote(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Remote Spec Forwarding Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/server_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/server_test.go deleted file mode 100644 index eb2eefe..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/server_test.go +++ /dev/null @@ -1,269 +0,0 @@ -package remote_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/remote" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/reporters" - "github.com/onsi/ginkgo/types" - - "bytes" - "encoding/json" - "net/http" -) - -var _ = Describe("Server", func() { - var ( - server *Server - ) - - BeforeEach(func() { - var err error - server, err = NewServer(3) - Ω(err).ShouldNot(HaveOccurred()) - - server.Start() - }) - - AfterEach(func() { - server.Close() - }) - - Describe("Streaming endpoints", func() { - var ( - reporterA, reporterB *reporters.FakeReporter - forwardingReporter *ForwardingReporter - - suiteSummary *types.SuiteSummary - setupSummary *types.SetupSummary - specSummary *types.SpecSummary - ) - - BeforeEach(func() { - reporterA = reporters.NewFakeReporter() - reporterB = reporters.NewFakeReporter() - - server.RegisterReporters(reporterA, reporterB) - - forwardingReporter = NewForwardingReporter(server.Address(), &http.Client{}, &fakeOutputInterceptor{}) - - suiteSummary = &types.SuiteSummary{ - SuiteDescription: "My Test Suite", - } - - setupSummary = &types.SetupSummary{ - State: types.SpecStatePassed, - } - - specSummary = &types.SpecSummary{ - ComponentTexts: []string{"My", "Spec"}, - State: types.SpecStatePassed, - } - }) - - It("should make its address available", func() { - Ω(server.Address()).Should(MatchRegexp(`http://127.0.0.1:\d{2,}`)) - }) - - Describe("/SpecSuiteWillBegin", func() { - It("should decode and forward the Ginkgo config and suite summary", func(done Done) { - forwardingReporter.SpecSuiteWillBegin(config.GinkgoConfig, suiteSummary) - Ω(reporterA.Config).Should(Equal(config.GinkgoConfig)) - Ω(reporterB.Config).Should(Equal(config.GinkgoConfig)) - Ω(reporterA.BeginSummary).Should(Equal(suiteSummary)) - Ω(reporterB.BeginSummary).Should(Equal(suiteSummary)) - close(done) - }) - }) - - Describe("/BeforeSuiteDidRun", func() { - It("should decode and forward the setup summary", func() { - forwardingReporter.BeforeSuiteDidRun(setupSummary) - Ω(reporterA.BeforeSuiteSummary).Should(Equal(setupSummary)) - Ω(reporterB.BeforeSuiteSummary).Should(Equal(setupSummary)) - }) - }) - - Describe("/AfterSuiteDidRun", func() { - It("should decode and forward the setup summary", func() { - forwardingReporter.AfterSuiteDidRun(setupSummary) - Ω(reporterA.AfterSuiteSummary).Should(Equal(setupSummary)) - Ω(reporterB.AfterSuiteSummary).Should(Equal(setupSummary)) - }) - }) - - Describe("/SpecWillRun", func() { - It("should decode and forward the spec summary", func(done Done) { - forwardingReporter.SpecWillRun(specSummary) - Ω(reporterA.SpecWillRunSummaries[0]).Should(Equal(specSummary)) - Ω(reporterB.SpecWillRunSummaries[0]).Should(Equal(specSummary)) - close(done) - }) - }) - - Describe("/SpecDidComplete", func() { - It("should decode and forward the spec summary", func(done Done) { - forwardingReporter.SpecDidComplete(specSummary) - Ω(reporterA.SpecSummaries[0]).Should(Equal(specSummary)) - Ω(reporterB.SpecSummaries[0]).Should(Equal(specSummary)) - close(done) - }) - }) - - Describe("/SpecSuiteDidEnd", func() { - It("should decode and forward the suite summary", func(done Done) { - forwardingReporter.SpecSuiteDidEnd(suiteSummary) - Ω(reporterA.EndSummary).Should(Equal(suiteSummary)) - Ω(reporterB.EndSummary).Should(Equal(suiteSummary)) - close(done) - }) - }) - }) - - Describe("Synchronization endpoints", func() { - Describe("GETting and POSTing BeforeSuiteState", func() { - getBeforeSuite := func() types.RemoteBeforeSuiteData { - resp, err := http.Get(server.Address() + "/BeforeSuiteState") - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - - r := types.RemoteBeforeSuiteData{} - decoder := json.NewDecoder(resp.Body) - err = decoder.Decode(&r) - Ω(err).ShouldNot(HaveOccurred()) - - return r - } - - postBeforeSuite := func(r types.RemoteBeforeSuiteData) { - resp, err := http.Post(server.Address()+"/BeforeSuiteState", "application/json", bytes.NewReader(r.ToJSON())) - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - } - - Context("when the first node's Alive has not been registered yet", func() { - It("should return pending", func() { - state := getBeforeSuite() - Ω(state).Should(Equal(types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStatePending})) - - state = getBeforeSuite() - Ω(state).Should(Equal(types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStatePending})) - }) - }) - - Context("when the first node is Alive but has not responded yet", func() { - BeforeEach(func() { - server.RegisterAlive(1, func() bool { - return true - }) - }) - - It("should return pending", func() { - state := getBeforeSuite() - Ω(state).Should(Equal(types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStatePending})) - - state = getBeforeSuite() - Ω(state).Should(Equal(types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStatePending})) - }) - }) - - Context("when the first node has responded", func() { - var state types.RemoteBeforeSuiteData - BeforeEach(func() { - server.RegisterAlive(1, func() bool { - return false - }) - - state = types.RemoteBeforeSuiteData{ - Data: []byte("my data"), - State: types.RemoteBeforeSuiteStatePassed, - } - postBeforeSuite(state) - }) - - It("should return the passed in state", func() { - returnedState := getBeforeSuite() - Ω(returnedState).Should(Equal(state)) - }) - }) - - Context("when the first node is no longer Alive and has not responded yet", func() { - BeforeEach(func() { - server.RegisterAlive(1, func() bool { - return false - }) - }) - - It("should return disappeared", func() { - state := getBeforeSuite() - Ω(state).Should(Equal(types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStateDisappeared})) - - state = getBeforeSuite() - Ω(state).Should(Equal(types.RemoteBeforeSuiteData{nil, types.RemoteBeforeSuiteStateDisappeared})) - }) - }) - }) - - Describe("GETting RemoteAfterSuiteData", func() { - getRemoteAfterSuiteData := func() bool { - resp, err := http.Get(server.Address() + "/RemoteAfterSuiteData") - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - - a := types.RemoteAfterSuiteData{} - decoder := json.NewDecoder(resp.Body) - err = decoder.Decode(&a) - Ω(err).ShouldNot(HaveOccurred()) - - return a.CanRun - } - - Context("when there are unregistered nodes", func() { - BeforeEach(func() { - server.RegisterAlive(2, func() bool { - return false - }) - }) - - It("should return false", func() { - Ω(getRemoteAfterSuiteData()).Should(BeFalse()) - }) - }) - - Context("when all none-node-1 nodes are still running", func() { - BeforeEach(func() { - server.RegisterAlive(2, func() bool { - return true - }) - - server.RegisterAlive(3, func() bool { - return false - }) - }) - - It("should return false", func() { - Ω(getRemoteAfterSuiteData()).Should(BeFalse()) - }) - }) - - Context("when all none-1 nodes are done", func() { - BeforeEach(func() { - server.RegisterAlive(2, func() bool { - return false - }) - - server.RegisterAlive(3, func() bool { - return false - }) - }) - - It("should return true", func() { - Ω(getRemoteAfterSuiteData()).Should(BeTrue()) - }) - - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/index_computer_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/index_computer_test.go deleted file mode 100644 index 0396d7b..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/index_computer_test.go +++ /dev/null @@ -1,149 +0,0 @@ -package spec_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/spec" - . "github.com/onsi/gomega" -) - -var _ = Describe("ParallelizedIndexRange", func() { - var startIndex, count int - - It("should return the correct index range for 4 tests on 2 nodes", func() { - startIndex, count = ParallelizedIndexRange(4, 2, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(4, 2, 2) - Ω(startIndex).Should(Equal(2)) - Ω(count).Should(Equal(2)) - }) - - It("should return the correct index range for 5 tests on 2 nodes", func() { - startIndex, count = ParallelizedIndexRange(5, 2, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(3)) - - startIndex, count = ParallelizedIndexRange(5, 2, 2) - Ω(startIndex).Should(Equal(3)) - Ω(count).Should(Equal(2)) - }) - - It("should return the correct index range for 5 tests on 3 nodes", func() { - startIndex, count = ParallelizedIndexRange(5, 3, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(5, 3, 2) - Ω(startIndex).Should(Equal(2)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(5, 3, 3) - Ω(startIndex).Should(Equal(4)) - Ω(count).Should(Equal(1)) - }) - - It("should return the correct index range for 5 tests on 4 nodes", func() { - startIndex, count = ParallelizedIndexRange(5, 4, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(5, 4, 2) - Ω(startIndex).Should(Equal(2)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 4, 3) - Ω(startIndex).Should(Equal(3)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 4, 4) - Ω(startIndex).Should(Equal(4)) - Ω(count).Should(Equal(1)) - }) - - It("should return the correct index range for 5 tests on 5 nodes", func() { - startIndex, count = ParallelizedIndexRange(5, 5, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 5, 2) - Ω(startIndex).Should(Equal(1)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 5, 3) - Ω(startIndex).Should(Equal(2)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 5, 4) - Ω(startIndex).Should(Equal(3)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 5, 5) - Ω(startIndex).Should(Equal(4)) - Ω(count).Should(Equal(1)) - }) - - It("should return the correct index range for 5 tests on 6 nodes", func() { - startIndex, count = ParallelizedIndexRange(5, 6, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 6, 2) - Ω(startIndex).Should(Equal(1)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 6, 3) - Ω(startIndex).Should(Equal(2)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 6, 4) - Ω(startIndex).Should(Equal(3)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 6, 5) - Ω(startIndex).Should(Equal(4)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(5, 6, 6) - Ω(count).Should(Equal(0)) - }) - - It("should return the correct index range for 5 tests on 7 nodes", func() { - startIndex, count = ParallelizedIndexRange(5, 7, 6) - Ω(count).Should(Equal(0)) - - startIndex, count = ParallelizedIndexRange(5, 7, 7) - Ω(count).Should(Equal(0)) - }) - - It("should return the correct index range for 11 tests on 7 nodes", func() { - startIndex, count = ParallelizedIndexRange(11, 7, 1) - Ω(startIndex).Should(Equal(0)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(11, 7, 2) - Ω(startIndex).Should(Equal(2)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(11, 7, 3) - Ω(startIndex).Should(Equal(4)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(11, 7, 4) - Ω(startIndex).Should(Equal(6)) - Ω(count).Should(Equal(2)) - - startIndex, count = ParallelizedIndexRange(11, 7, 5) - Ω(startIndex).Should(Equal(8)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(11, 7, 6) - Ω(startIndex).Should(Equal(9)) - Ω(count).Should(Equal(1)) - - startIndex, count = ParallelizedIndexRange(11, 7, 7) - Ω(startIndex).Should(Equal(10)) - Ω(count).Should(Equal(1)) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec_suite_test.go deleted file mode 100644 index 8681a72..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package spec_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSpec(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Spec Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec_test.go deleted file mode 100644 index 6d0f58c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec_test.go +++ /dev/null @@ -1,626 +0,0 @@ -package spec_test - -import ( - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" - - . "github.com/onsi/ginkgo/internal/spec" - - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/internal/containernode" - Failer "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/internal/leafnodes" - "github.com/onsi/ginkgo/types" -) - -var noneFlag = types.FlagTypeNone -var focusedFlag = types.FlagTypeFocused -var pendingFlag = types.FlagTypePending - -var _ = Describe("Spec", func() { - var ( - failer *Failer.Failer - codeLocation types.CodeLocation - nodesThatRan []string - spec *Spec - buffer *gbytes.Buffer - ) - - newBody := func(text string, fail bool) func() { - return func() { - nodesThatRan = append(nodesThatRan, text) - if fail { - failer.Fail(text, codeLocation) - } - } - } - - newIt := func(text string, flag types.FlagType, fail bool) *leafnodes.ItNode { - return leafnodes.NewItNode(text, newBody(text, fail), flag, codeLocation, 0, failer, 0) - } - - newItWithBody := func(text string, body interface{}) *leafnodes.ItNode { - return leafnodes.NewItNode(text, body, noneFlag, codeLocation, 0, failer, 0) - } - - newMeasure := func(text string, flag types.FlagType, fail bool, samples int) *leafnodes.MeasureNode { - return leafnodes.NewMeasureNode(text, func(Benchmarker) { - nodesThatRan = append(nodesThatRan, text) - if fail { - failer.Fail(text, codeLocation) - } - }, flag, codeLocation, samples, failer, 0) - } - - newBef := func(text string, fail bool) leafnodes.BasicNode { - return leafnodes.NewBeforeEachNode(newBody(text, fail), codeLocation, 0, failer, 0) - } - - newAft := func(text string, fail bool) leafnodes.BasicNode { - return leafnodes.NewAfterEachNode(newBody(text, fail), codeLocation, 0, failer, 0) - } - - newJusBef := func(text string, fail bool) leafnodes.BasicNode { - return leafnodes.NewJustBeforeEachNode(newBody(text, fail), codeLocation, 0, failer, 0) - } - - newContainer := func(text string, flag types.FlagType, setupNodes ...leafnodes.BasicNode) *containernode.ContainerNode { - c := containernode.New(text, flag, codeLocation) - for _, node := range setupNodes { - c.PushSetupNode(node) - } - return c - } - - containers := func(containers ...*containernode.ContainerNode) []*containernode.ContainerNode { - return containers - } - - BeforeEach(func() { - buffer = gbytes.NewBuffer() - failer = Failer.New() - codeLocation = codelocation.New(0) - nodesThatRan = []string{} - }) - - Describe("marking specs focused and pending", func() { - It("should satisfy various caes", func() { - cases := []struct { - ContainerFlags []types.FlagType - SubjectFlag types.FlagType - Pending bool - Focused bool - }{ - {[]types.FlagType{}, noneFlag, false, false}, - {[]types.FlagType{}, focusedFlag, false, true}, - {[]types.FlagType{}, pendingFlag, true, false}, - {[]types.FlagType{noneFlag}, noneFlag, false, false}, - {[]types.FlagType{focusedFlag}, noneFlag, false, true}, - {[]types.FlagType{pendingFlag}, noneFlag, true, false}, - {[]types.FlagType{noneFlag}, focusedFlag, false, true}, - {[]types.FlagType{focusedFlag}, focusedFlag, false, true}, - {[]types.FlagType{pendingFlag}, focusedFlag, true, true}, - {[]types.FlagType{noneFlag}, pendingFlag, true, false}, - {[]types.FlagType{focusedFlag}, pendingFlag, true, true}, - {[]types.FlagType{pendingFlag}, pendingFlag, true, false}, - {[]types.FlagType{focusedFlag, noneFlag}, noneFlag, false, true}, - {[]types.FlagType{noneFlag, focusedFlag}, noneFlag, false, true}, - {[]types.FlagType{pendingFlag, noneFlag}, noneFlag, true, false}, - {[]types.FlagType{noneFlag, pendingFlag}, noneFlag, true, false}, - {[]types.FlagType{focusedFlag, pendingFlag}, noneFlag, true, true}, - } - - for i, c := range cases { - subject := newIt("it node", c.SubjectFlag, false) - containers := []*containernode.ContainerNode{} - for _, flag := range c.ContainerFlags { - containers = append(containers, newContainer("container", flag)) - } - - spec := New(subject, containers, false) - Ω(spec.Pending()).Should(Equal(c.Pending), "Case %d: %#v", i, c) - Ω(spec.Focused()).Should(Equal(c.Focused), "Case %d: %#v", i, c) - - if c.Pending { - Ω(spec.Summary("").State).Should(Equal(types.SpecStatePending)) - } - } - }) - }) - - Describe("Skip", func() { - It("should be skipped", func() { - spec := New(newIt("it node", noneFlag, false), containers(newContainer("container", noneFlag)), false) - Ω(spec.Skipped()).Should(BeFalse()) - spec.Skip() - Ω(spec.Skipped()).Should(BeTrue()) - Ω(spec.Summary("").State).Should(Equal(types.SpecStateSkipped)) - }) - }) - - Describe("IsMeasurement", func() { - It("should be true if the subject is a measurement node", func() { - spec := New(newIt("it node", noneFlag, false), containers(newContainer("container", noneFlag)), false) - Ω(spec.IsMeasurement()).Should(BeFalse()) - Ω(spec.Summary("").IsMeasurement).Should(BeFalse()) - Ω(spec.Summary("").NumberOfSamples).Should(Equal(1)) - - spec = New(newMeasure("measure node", noneFlag, false, 10), containers(newContainer("container", noneFlag)), false) - Ω(spec.IsMeasurement()).Should(BeTrue()) - Ω(spec.Summary("").IsMeasurement).Should(BeTrue()) - Ω(spec.Summary("").NumberOfSamples).Should(Equal(10)) - }) - }) - - Describe("Passed", func() { - It("should pass when the subject passed", func() { - spec := New(newIt("it node", noneFlag, false), containers(), false) - spec.Run(buffer) - - Ω(spec.Passed()).Should(BeTrue()) - Ω(spec.Failed()).Should(BeFalse()) - Ω(spec.Summary("").State).Should(Equal(types.SpecStatePassed)) - Ω(spec.Summary("").Failure).Should(BeZero()) - }) - }) - - Describe("Failed", func() { - It("should be failed if the failure was panic", func() { - spec := New(newItWithBody("panicky it", func() { - panic("bam") - }), containers(), false) - spec.Run(buffer) - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(spec.Summary("").State).Should(Equal(types.SpecStatePanicked)) - Ω(spec.Summary("").Failure.Message).Should(Equal("Test Panicked")) - Ω(spec.Summary("").Failure.ForwardedPanic).Should(Equal("bam")) - }) - - It("should be failed if the failure was a timeout", func() { - spec := New(newItWithBody("sleepy it", func(done Done) {}), containers(), false) - spec.Run(buffer) - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(spec.Summary("").State).Should(Equal(types.SpecStateTimedOut)) - Ω(spec.Summary("").Failure.Message).Should(Equal("Timed out")) - }) - - It("should be failed if the failure was... a failure", func() { - spec := New(newItWithBody("failing it", func() { - failer.Fail("bam", codeLocation) - }), containers(), false) - spec.Run(buffer) - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(spec.Summary("").State).Should(Equal(types.SpecStateFailed)) - Ω(spec.Summary("").Failure.Message).Should(Equal("bam")) - }) - }) - - Describe("Concatenated string", func() { - It("should concatenate the texts of the containers and the subject", func() { - spec := New( - newIt("it node", noneFlag, false), - containers( - newContainer("outer container", noneFlag), - newContainer("inner container", noneFlag), - ), - false, - ) - - Ω(spec.ConcatenatedString()).Should(Equal("outer container inner container it node")) - }) - }) - - Describe("running it specs", func() { - Context("with just an it", func() { - Context("that succeeds", func() { - It("should run the it and report on its success", func() { - spec := New(newIt("it node", noneFlag, false), containers(), false) - spec.Run(buffer) - Ω(spec.Passed()).Should(BeTrue()) - Ω(spec.Failed()).Should(BeFalse()) - Ω(nodesThatRan).Should(Equal([]string{"it node"})) - }) - }) - - Context("that fails", func() { - It("should run the it and report on its success", func() { - spec := New(newIt("it node", noneFlag, true), containers(), false) - spec.Run(buffer) - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(spec.Summary("").Failure.Message).Should(Equal("it node")) - Ω(nodesThatRan).Should(Equal([]string{"it node"})) - }) - }) - }) - - Context("with a full set of setup nodes", func() { - var failingNodes map[string]bool - - BeforeEach(func() { - failingNodes = map[string]bool{} - }) - - JustBeforeEach(func() { - spec = New( - newIt("it node", noneFlag, failingNodes["it node"]), - containers( - newContainer("outer container", noneFlag, - newBef("outer bef A", failingNodes["outer bef A"]), - newBef("outer bef B", failingNodes["outer bef B"]), - newJusBef("outer jusbef A", failingNodes["outer jusbef A"]), - newJusBef("outer jusbef B", failingNodes["outer jusbef B"]), - newAft("outer aft A", failingNodes["outer aft A"]), - newAft("outer aft B", failingNodes["outer aft B"]), - ), - newContainer("inner container", noneFlag, - newBef("inner bef A", failingNodes["inner bef A"]), - newBef("inner bef B", failingNodes["inner bef B"]), - newJusBef("inner jusbef A", failingNodes["inner jusbef A"]), - newJusBef("inner jusbef B", failingNodes["inner jusbef B"]), - newAft("inner aft A", failingNodes["inner aft A"]), - newAft("inner aft B", failingNodes["inner aft B"]), - ), - ), - false, - ) - spec.Run(buffer) - }) - - Context("that all pass", func() { - It("should walk through the nodes in the correct order", func() { - Ω(spec.Passed()).Should(BeTrue()) - Ω(spec.Failed()).Should(BeFalse()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "inner bef A", - "inner bef B", - "outer jusbef A", - "outer jusbef B", - "inner jusbef A", - "inner jusbef B", - "it node", - "inner aft A", - "inner aft B", - "outer aft A", - "outer aft B", - })) - }) - }) - - Context("when the subject fails", func() { - BeforeEach(func() { - failingNodes["it node"] = true - }) - - It("should run the afters", func() { - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "inner bef A", - "inner bef B", - "outer jusbef A", - "outer jusbef B", - "inner jusbef A", - "inner jusbef B", - "it node", - "inner aft A", - "inner aft B", - "outer aft A", - "outer aft B", - })) - Ω(spec.Summary("").Failure.Message).Should(Equal("it node")) - }) - }) - - Context("when an inner before fails", func() { - BeforeEach(func() { - failingNodes["inner bef A"] = true - }) - - It("should not run any other befores, but it should run the subsequent afters", func() { - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "inner bef A", - "inner aft A", - "inner aft B", - "outer aft A", - "outer aft B", - })) - Ω(spec.Summary("").Failure.Message).Should(Equal("inner bef A")) - }) - }) - - Context("when an outer before fails", func() { - BeforeEach(func() { - failingNodes["outer bef B"] = true - }) - - It("should not run any other befores, but it should run the subsequent afters", func() { - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "outer aft A", - "outer aft B", - })) - Ω(spec.Summary("").Failure.Message).Should(Equal("outer bef B")) - }) - }) - - Context("when an after fails", func() { - BeforeEach(func() { - failingNodes["inner aft B"] = true - }) - - It("should run all other afters, but mark the test as failed", func() { - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "inner bef A", - "inner bef B", - "outer jusbef A", - "outer jusbef B", - "inner jusbef A", - "inner jusbef B", - "it node", - "inner aft A", - "inner aft B", - "outer aft A", - "outer aft B", - })) - Ω(spec.Summary("").Failure.Message).Should(Equal("inner aft B")) - }) - }) - - Context("when a just before each fails", func() { - BeforeEach(func() { - failingNodes["outer jusbef B"] = true - }) - - It("should run the afters, but not the subject", func() { - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "inner bef A", - "inner bef B", - "outer jusbef A", - "outer jusbef B", - "inner aft A", - "inner aft B", - "outer aft A", - "outer aft B", - })) - Ω(spec.Summary("").Failure.Message).Should(Equal("outer jusbef B")) - }) - }) - - Context("when an after fails after an earlier node has failed", func() { - BeforeEach(func() { - failingNodes["it node"] = true - failingNodes["inner aft B"] = true - }) - - It("should record the earlier failure", func() { - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "outer bef A", - "outer bef B", - "inner bef A", - "inner bef B", - "outer jusbef A", - "outer jusbef B", - "inner jusbef A", - "inner jusbef B", - "it node", - "inner aft A", - "inner aft B", - "outer aft A", - "outer aft B", - })) - Ω(spec.Summary("").Failure.Message).Should(Equal("it node")) - }) - }) - }) - }) - - Describe("running measurement specs", func() { - Context("when the measurement succeeds", func() { - It("should run N samples", func() { - spec = New( - newMeasure("measure node", noneFlag, false, 3), - containers( - newContainer("container", noneFlag, - newBef("bef A", false), - newJusBef("jusbef A", false), - newAft("aft A", false), - ), - ), - false, - ) - spec.Run(buffer) - - Ω(spec.Passed()).Should(BeTrue()) - Ω(spec.Failed()).Should(BeFalse()) - Ω(nodesThatRan).Should(Equal([]string{ - "bef A", - "jusbef A", - "measure node", - "aft A", - "bef A", - "jusbef A", - "measure node", - "aft A", - "bef A", - "jusbef A", - "measure node", - "aft A", - })) - }) - }) - - Context("when the measurement fails", func() { - It("should bail after the failure occurs", func() { - spec = New( - newMeasure("measure node", noneFlag, true, 3), - containers( - newContainer("container", noneFlag, - newBef("bef A", false), - newJusBef("jusbef A", false), - newAft("aft A", false), - ), - ), - false, - ) - spec.Run(buffer) - - Ω(spec.Passed()).Should(BeFalse()) - Ω(spec.Failed()).Should(BeTrue()) - Ω(nodesThatRan).Should(Equal([]string{ - "bef A", - "jusbef A", - "measure node", - "aft A", - })) - }) - }) - }) - - Describe("Summary", func() { - var ( - subjectCodeLocation types.CodeLocation - outerContainerCodeLocation types.CodeLocation - innerContainerCodeLocation types.CodeLocation - summary *types.SpecSummary - ) - - BeforeEach(func() { - subjectCodeLocation = codelocation.New(0) - outerContainerCodeLocation = codelocation.New(0) - innerContainerCodeLocation = codelocation.New(0) - - spec = New( - leafnodes.NewItNode("it node", func() { - time.Sleep(10 * time.Millisecond) - }, noneFlag, subjectCodeLocation, 0, failer, 0), - containers( - containernode.New("outer container", noneFlag, outerContainerCodeLocation), - containernode.New("inner container", noneFlag, innerContainerCodeLocation), - ), - false, - ) - - spec.Run(buffer) - Ω(spec.Passed()).Should(BeTrue()) - summary = spec.Summary("suite id") - }) - - It("should have the suite id", func() { - Ω(summary.SuiteID).Should(Equal("suite id")) - }) - - It("should have the component texts and code locations", func() { - Ω(summary.ComponentTexts).Should(Equal([]string{"outer container", "inner container", "it node"})) - Ω(summary.ComponentCodeLocations).Should(Equal([]types.CodeLocation{outerContainerCodeLocation, innerContainerCodeLocation, subjectCodeLocation})) - }) - - It("should have a runtime", func() { - Ω(summary.RunTime).Should(BeNumerically(">=", 10*time.Millisecond)) - }) - - It("should not be a measurement, or have a measurement summary", func() { - Ω(summary.IsMeasurement).Should(BeFalse()) - Ω(summary.Measurements).Should(BeEmpty()) - }) - }) - - Describe("Summaries for measurements", func() { - var summary *types.SpecSummary - - BeforeEach(func() { - spec = New(leafnodes.NewMeasureNode("measure node", func(b Benchmarker) { - b.RecordValue("a value", 7, "some info") - }, noneFlag, codeLocation, 4, failer, 0), containers(), false) - spec.Run(buffer) - Ω(spec.Passed()).Should(BeTrue()) - summary = spec.Summary("suite id") - }) - - It("should include the number of samples", func() { - Ω(summary.NumberOfSamples).Should(Equal(4)) - }) - - It("should be a measurement", func() { - Ω(summary.IsMeasurement).Should(BeTrue()) - }) - - It("should have the measurements report", func() { - Ω(summary.Measurements).Should(HaveKey("a value")) - - report := summary.Measurements["a value"] - Ω(report.Name).Should(Equal("a value")) - Ω(report.Info).Should(Equal("some info")) - Ω(report.Results).Should(Equal([]float64{7, 7, 7, 7})) - }) - }) - - Describe("When told to emit progress", func() { - It("should emit progress to the writer as it runs Befores, JustBefores, Afters, and Its", func() { - spec = New( - newIt("it node", noneFlag, false), - containers( - newContainer("outer container", noneFlag, - newBef("outer bef A", false), - newJusBef("outer jusbef A", false), - newAft("outer aft A", false), - ), - newContainer("inner container", noneFlag, - newBef("inner bef A", false), - newJusBef("inner jusbef A", false), - newAft("inner aft A", false), - ), - ), - true, - ) - spec.Run(buffer) - - Ω(buffer).Should(gbytes.Say(`\[BeforeEach\] outer container`)) - Ω(buffer).Should(gbytes.Say(`\[BeforeEach\] inner container`)) - Ω(buffer).Should(gbytes.Say(`\[JustBeforeEach\] outer container`)) - Ω(buffer).Should(gbytes.Say(`\[JustBeforeEach\] inner container`)) - Ω(buffer).Should(gbytes.Say(`\[It\] it node`)) - Ω(buffer).Should(gbytes.Say(`\[AfterEach\] inner container`)) - Ω(buffer).Should(gbytes.Say(`\[AfterEach\] outer container`)) - }) - - It("should emit progress to the writer as it runs Befores, JustBefores, Afters, and Measures", func() { - spec = New( - newMeasure("measure node", noneFlag, false, 2), - containers(), - true, - ) - spec.Run(buffer) - - Ω(buffer).Should(gbytes.Say(`\[Measure\] measure node`)) - Ω(buffer).Should(gbytes.Say(`\[Measure\] measure node`)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/specs_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/specs_test.go deleted file mode 100644 index ce9f5f3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/specs_test.go +++ /dev/null @@ -1,335 +0,0 @@ -package spec_test - -import ( - "math/rand" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/spec" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/internal/containernode" - "github.com/onsi/ginkgo/internal/leafnodes" - "github.com/onsi/ginkgo/types" -) - -var _ = Describe("Specs", func() { - var specs *Specs - - newSpec := func(text string, flag types.FlagType) *Spec { - subject := leafnodes.NewItNode(text, func() {}, flag, codelocation.New(0), 0, nil, 0) - return New(subject, []*containernode.ContainerNode{}, false) - } - - newMeasureSpec := func(text string, flag types.FlagType) *Spec { - subject := leafnodes.NewMeasureNode(text, func(Benchmarker) {}, flag, codelocation.New(0), 0, nil, 0) - return New(subject, []*containernode.ContainerNode{}, false) - } - - newSpecs := func(args ...interface{}) *Specs { - specs := []*Spec{} - for index := 0; index < len(args)-1; index += 2 { - specs = append(specs, newSpec(args[index].(string), args[index+1].(types.FlagType))) - } - return NewSpecs(specs) - } - - specTexts := func(specs *Specs) []string { - texts := []string{} - for _, spec := range specs.Specs() { - texts = append(texts, spec.ConcatenatedString()) - } - return texts - } - - willRunTexts := func(specs *Specs) []string { - texts := []string{} - for _, spec := range specs.Specs() { - if !(spec.Skipped() || spec.Pending()) { - texts = append(texts, spec.ConcatenatedString()) - } - } - return texts - } - - skippedTexts := func(specs *Specs) []string { - texts := []string{} - for _, spec := range specs.Specs() { - if spec.Skipped() { - texts = append(texts, spec.ConcatenatedString()) - } - } - return texts - } - - pendingTexts := func(specs *Specs) []string { - texts := []string{} - for _, spec := range specs.Specs() { - if spec.Pending() { - texts = append(texts, spec.ConcatenatedString()) - } - } - return texts - } - - Describe("Shuffling specs", func() { - It("should shuffle the specs using the passed in randomizer", func() { - specs17 := newSpecs("C", noneFlag, "A", noneFlag, "B", noneFlag) - specs17.Shuffle(rand.New(rand.NewSource(17))) - texts17 := specTexts(specs17) - - specs17Again := newSpecs("C", noneFlag, "A", noneFlag, "B", noneFlag) - specs17Again.Shuffle(rand.New(rand.NewSource(17))) - texts17Again := specTexts(specs17Again) - - specs15 := newSpecs("C", noneFlag, "A", noneFlag, "B", noneFlag) - specs15.Shuffle(rand.New(rand.NewSource(15))) - texts15 := specTexts(specs15) - - specsUnshuffled := newSpecs("C", noneFlag, "A", noneFlag, "B", noneFlag) - textsUnshuffled := specTexts(specsUnshuffled) - - Ω(textsUnshuffled).Should(Equal([]string{"C", "A", "B"})) - - Ω(texts17).Should(Equal(texts17Again)) - Ω(texts17).ShouldNot(Equal(texts15)) - Ω(texts17).ShouldNot(Equal(textsUnshuffled)) - Ω(texts15).ShouldNot(Equal(textsUnshuffled)) - - Ω(texts17).Should(HaveLen(3)) - Ω(texts17).Should(ContainElement("A")) - Ω(texts17).Should(ContainElement("B")) - Ω(texts17).Should(ContainElement("C")) - - Ω(texts15).Should(HaveLen(3)) - Ω(texts15).Should(ContainElement("A")) - Ω(texts15).Should(ContainElement("B")) - Ω(texts15).Should(ContainElement("C")) - }) - }) - - Describe("with no programmatic focus", func() { - BeforeEach(func() { - specs = newSpecs("A1", noneFlag, "A2", noneFlag, "B1", noneFlag, "B2", pendingFlag) - specs.ApplyFocus("", "", "") - }) - - It("should not report as having programmatic specs", func() { - Ω(specs.HasProgrammaticFocus()).Should(BeFalse()) - }) - }) - - Describe("Applying focus/skip", func() { - var description, focusString, skipString string - - BeforeEach(func() { - description, focusString, skipString = "", "", "" - }) - - JustBeforeEach(func() { - specs = newSpecs("A1", focusedFlag, "A2", noneFlag, "B1", focusedFlag, "B2", pendingFlag) - specs.ApplyFocus(description, focusString, skipString) - }) - - Context("with neither a focus string nor a skip string", func() { - It("should apply the programmatic focus", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"A1", "B1"})) - Ω(skippedTexts(specs)).Should(Equal([]string{"A2", "B2"})) - Ω(pendingTexts(specs)).Should(BeEmpty()) - }) - - It("should report as having programmatic specs", func() { - Ω(specs.HasProgrammaticFocus()).Should(BeTrue()) - }) - }) - - Context("with a focus regexp", func() { - BeforeEach(func() { - focusString = "A" - }) - - It("should override the programmatic focus", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"A1", "A2"})) - Ω(skippedTexts(specs)).Should(Equal([]string{"B1", "B2"})) - Ω(pendingTexts(specs)).Should(BeEmpty()) - }) - - It("should not report as having programmatic specs", func() { - Ω(specs.HasProgrammaticFocus()).Should(BeFalse()) - }) - }) - - Context("with a focus regexp", func() { - BeforeEach(func() { - focusString = "B" - }) - - It("should not override any pendings", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"B1"})) - Ω(skippedTexts(specs)).Should(Equal([]string{"A1", "A2"})) - Ω(pendingTexts(specs)).Should(Equal([]string{"B2"})) - }) - }) - - Context("with a description", func() { - BeforeEach(func() { - description = "C" - focusString = "C" - }) - - It("should include the description in the focus determination", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"A1", "A2", "B1"})) - Ω(skippedTexts(specs)).Should(BeEmpty()) - Ω(pendingTexts(specs)).Should(Equal([]string{"B2"})) - }) - }) - - Context("with a description", func() { - BeforeEach(func() { - description = "C" - skipString = "C" - }) - - It("should include the description in the focus determination", func() { - Ω(willRunTexts(specs)).Should(BeEmpty()) - Ω(skippedTexts(specs)).Should(Equal([]string{"A1", "A2", "B1", "B2"})) - Ω(pendingTexts(specs)).Should(BeEmpty()) - }) - }) - - Context("with a skip regexp", func() { - BeforeEach(func() { - skipString = "A" - }) - - It("should override the programmatic focus", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"B1"})) - Ω(skippedTexts(specs)).Should(Equal([]string{"A1", "A2"})) - Ω(pendingTexts(specs)).Should(Equal([]string{"B2"})) - }) - - It("should not report as having programmatic specs", func() { - Ω(specs.HasProgrammaticFocus()).Should(BeFalse()) - }) - }) - - Context("with both a focus and a skip regexp", func() { - BeforeEach(func() { - focusString = "1" - skipString = "B" - }) - - It("should AND the two", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"A1"})) - Ω(skippedTexts(specs)).Should(Equal([]string{"A2", "B1", "B2"})) - Ω(pendingTexts(specs)).Should(BeEmpty()) - }) - - It("should not report as having programmatic specs", func() { - Ω(specs.HasProgrammaticFocus()).Should(BeFalse()) - }) - }) - }) - - Describe("With a focused spec within a pending context and a pending spec within a focused context", func() { - BeforeEach(func() { - pendingInFocused := New( - leafnodes.NewItNode("PendingInFocused", func() {}, pendingFlag, codelocation.New(0), 0, nil, 0), - []*containernode.ContainerNode{ - containernode.New("", focusedFlag, codelocation.New(0)), - }, false) - - focusedInPending := New( - leafnodes.NewItNode("FocusedInPending", func() {}, focusedFlag, codelocation.New(0), 0, nil, 0), - []*containernode.ContainerNode{ - containernode.New("", pendingFlag, codelocation.New(0)), - }, false) - - specs = NewSpecs([]*Spec{ - newSpec("A", noneFlag), - newSpec("B", noneFlag), - pendingInFocused, - focusedInPending, - }) - specs.ApplyFocus("", "", "") - }) - - It("should not have a programmatic focus and should run all tests", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"A", "B"})) - Ω(skippedTexts(specs)).Should(BeEmpty()) - Ω(pendingTexts(specs)).Should(ConsistOf(ContainSubstring("PendingInFocused"), ContainSubstring("FocusedInPending"))) - }) - }) - - Describe("skipping measurements", func() { - BeforeEach(func() { - specs = NewSpecs([]*Spec{ - newSpec("A", noneFlag), - newSpec("B", noneFlag), - newSpec("C", pendingFlag), - newMeasureSpec("measurementA", noneFlag), - newMeasureSpec("measurementB", pendingFlag), - }) - }) - - It("should skip measurements", func() { - Ω(willRunTexts(specs)).Should(Equal([]string{"A", "B", "measurementA"})) - Ω(skippedTexts(specs)).Should(BeEmpty()) - Ω(pendingTexts(specs)).Should(Equal([]string{"C", "measurementB"})) - - specs.SkipMeasurements() - - Ω(willRunTexts(specs)).Should(Equal([]string{"A", "B"})) - Ω(skippedTexts(specs)).Should(Equal([]string{"measurementA", "measurementB"})) - Ω(pendingTexts(specs)).Should(Equal([]string{"C"})) - }) - }) - - Describe("when running tests in parallel", func() { - It("should select out a subset of the tests", func() { - specsNode1 := newSpecs("A", noneFlag, "B", noneFlag, "C", noneFlag, "D", noneFlag, "E", noneFlag) - specsNode2 := newSpecs("A", noneFlag, "B", noneFlag, "C", noneFlag, "D", noneFlag, "E", noneFlag) - specsNode3 := newSpecs("A", noneFlag, "B", noneFlag, "C", noneFlag, "D", noneFlag, "E", noneFlag) - - specsNode1.TrimForParallelization(3, 1) - specsNode2.TrimForParallelization(3, 2) - specsNode3.TrimForParallelization(3, 3) - - Ω(willRunTexts(specsNode1)).Should(Equal([]string{"A", "B"})) - Ω(willRunTexts(specsNode2)).Should(Equal([]string{"C", "D"})) - Ω(willRunTexts(specsNode3)).Should(Equal([]string{"E"})) - - Ω(specsNode1.Specs()).Should(HaveLen(2)) - Ω(specsNode2.Specs()).Should(HaveLen(2)) - Ω(specsNode3.Specs()).Should(HaveLen(1)) - - Ω(specsNode1.NumberOfOriginalSpecs()).Should(Equal(5)) - Ω(specsNode2.NumberOfOriginalSpecs()).Should(Equal(5)) - Ω(specsNode3.NumberOfOriginalSpecs()).Should(Equal(5)) - }) - - Context("when way too many nodes are used", func() { - It("should return 0 specs", func() { - specsNode1 := newSpecs("A", noneFlag, "B", noneFlag) - specsNode2 := newSpecs("A", noneFlag, "B", noneFlag) - specsNode3 := newSpecs("A", noneFlag, "B", noneFlag) - - specsNode1.TrimForParallelization(3, 1) - specsNode2.TrimForParallelization(3, 2) - specsNode3.TrimForParallelization(3, 3) - - Ω(willRunTexts(specsNode1)).Should(Equal([]string{"A"})) - Ω(willRunTexts(specsNode2)).Should(Equal([]string{"B"})) - Ω(willRunTexts(specsNode3)).Should(BeEmpty()) - - Ω(specsNode1.Specs()).Should(HaveLen(1)) - Ω(specsNode2.Specs()).Should(HaveLen(1)) - Ω(specsNode3.Specs()).Should(HaveLen(0)) - - Ω(specsNode1.NumberOfOriginalSpecs()).Should(Equal(2)) - Ω(specsNode2.NumberOfOriginalSpecs()).Should(Equal(2)) - Ω(specsNode3.NumberOfOriginalSpecs()).Should(Equal(2)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner_suite_test.go deleted file mode 100644 index c8388fb..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package specrunner_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestSpecRunner(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Spec Runner Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner_test.go deleted file mode 100644 index 99686d3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner_test.go +++ /dev/null @@ -1,623 +0,0 @@ -package specrunner_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/specrunner" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/internal/containernode" - Failer "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/internal/leafnodes" - "github.com/onsi/ginkgo/internal/spec" - Writer "github.com/onsi/ginkgo/internal/writer" - "github.com/onsi/ginkgo/reporters" -) - -var noneFlag = types.FlagTypeNone -var focusedFlag = types.FlagTypeFocused -var pendingFlag = types.FlagTypePending - -var _ = Describe("Spec Runner", func() { - var ( - reporter1 *reporters.FakeReporter - reporter2 *reporters.FakeReporter - failer *Failer.Failer - writer *Writer.FakeGinkgoWriter - - thingsThatRan []string - - runner *SpecRunner - ) - - newBefSuite := func(text string, fail bool) leafnodes.SuiteNode { - return leafnodes.NewBeforeSuiteNode(func() { - writer.AddEvent(text) - thingsThatRan = append(thingsThatRan, text) - if fail { - failer.Fail(text, codelocation.New(0)) - } - }, codelocation.New(0), 0, failer) - } - - newAftSuite := func(text string, fail bool) leafnodes.SuiteNode { - return leafnodes.NewAfterSuiteNode(func() { - writer.AddEvent(text) - thingsThatRan = append(thingsThatRan, text) - if fail { - failer.Fail(text, codelocation.New(0)) - } - }, codelocation.New(0), 0, failer) - } - - newSpec := func(text string, flag types.FlagType, fail bool) *spec.Spec { - subject := leafnodes.NewItNode(text, func() { - writer.AddEvent(text) - thingsThatRan = append(thingsThatRan, text) - if fail { - failer.Fail(text, codelocation.New(0)) - } - }, flag, codelocation.New(0), 0, failer, 0) - - return spec.New(subject, []*containernode.ContainerNode{}, false) - } - - newSpecWithBody := func(text string, body interface{}) *spec.Spec { - subject := leafnodes.NewItNode(text, body, noneFlag, codelocation.New(0), 0, failer, 0) - - return spec.New(subject, []*containernode.ContainerNode{}, false) - } - - newRunner := func(config config.GinkgoConfigType, beforeSuiteNode leafnodes.SuiteNode, afterSuiteNode leafnodes.SuiteNode, specs ...*spec.Spec) *SpecRunner { - return New("description", beforeSuiteNode, spec.NewSpecs(specs), afterSuiteNode, []reporters.Reporter{reporter1, reporter2}, writer, config) - } - - BeforeEach(func() { - reporter1 = reporters.NewFakeReporter() - reporter2 = reporters.NewFakeReporter() - writer = Writer.NewFake() - failer = Failer.New() - - thingsThatRan = []string{} - }) - - Describe("Running and Reporting", func() { - var specA, pendingSpec, anotherPendingSpec, failedSpec, specB, skippedSpec *spec.Spec - var willRunCalls, didCompleteCalls []string - var conf config.GinkgoConfigType - - JustBeforeEach(func() { - willRunCalls = []string{} - didCompleteCalls = []string{} - specA = newSpec("spec A", noneFlag, false) - pendingSpec = newSpec("pending spec", pendingFlag, false) - anotherPendingSpec = newSpec("another pending spec", pendingFlag, false) - failedSpec = newSpec("failed spec", noneFlag, true) - specB = newSpec("spec B", noneFlag, false) - skippedSpec = newSpec("skipped spec", noneFlag, false) - skippedSpec.Skip() - - reporter1.SpecWillRunStub = func(specSummary *types.SpecSummary) { - willRunCalls = append(willRunCalls, "Reporter1") - } - reporter2.SpecWillRunStub = func(specSummary *types.SpecSummary) { - willRunCalls = append(willRunCalls, "Reporter2") - } - - reporter1.SpecDidCompleteStub = func(specSummary *types.SpecSummary) { - didCompleteCalls = append(didCompleteCalls, "Reporter1") - } - reporter2.SpecDidCompleteStub = func(specSummary *types.SpecSummary) { - didCompleteCalls = append(didCompleteCalls, "Reporter2") - } - - runner = newRunner(conf, newBefSuite("BefSuite", false), newAftSuite("AftSuite", false), specA, pendingSpec, anotherPendingSpec, failedSpec, specB, skippedSpec) - runner.Run() - }) - - BeforeEach(func() { - conf = config.GinkgoConfigType{RandomSeed: 17} - }) - - It("should skip skipped/pending tests", func() { - Ω(thingsThatRan).Should(Equal([]string{"BefSuite", "spec A", "failed spec", "spec B", "AftSuite"})) - }) - - It("should report to any attached reporters", func() { - Ω(reporter1.Config).Should(Equal(reporter2.Config)) - Ω(reporter1.BeforeSuiteSummary).Should(Equal(reporter2.BeforeSuiteSummary)) - Ω(reporter1.BeginSummary).Should(Equal(reporter2.BeginSummary)) - Ω(reporter1.SpecWillRunSummaries).Should(Equal(reporter2.SpecWillRunSummaries)) - Ω(reporter1.SpecSummaries).Should(Equal(reporter2.SpecSummaries)) - Ω(reporter1.AfterSuiteSummary).Should(Equal(reporter2.AfterSuiteSummary)) - Ω(reporter1.EndSummary).Should(Equal(reporter2.EndSummary)) - }) - - It("should report that a spec did end in reverse order", func() { - Ω(willRunCalls[0:4]).Should(Equal([]string{"Reporter1", "Reporter2", "Reporter1", "Reporter2"})) - Ω(didCompleteCalls[0:4]).Should(Equal([]string{"Reporter2", "Reporter1", "Reporter2", "Reporter1"})) - }) - - It("should report the passed in config", func() { - Ω(reporter1.Config.RandomSeed).Should(BeNumerically("==", 17)) - }) - - It("should report the beginning of the suite", func() { - Ω(reporter1.BeginSummary.SuiteDescription).Should(Equal("description")) - Ω(reporter1.BeginSummary.SuiteID).Should(MatchRegexp("[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}")) - Ω(reporter1.BeginSummary.NumberOfSpecsBeforeParallelization).Should(Equal(6)) - Ω(reporter1.BeginSummary.NumberOfTotalSpecs).Should(Equal(6)) - Ω(reporter1.BeginSummary.NumberOfSpecsThatWillBeRun).Should(Equal(3)) - Ω(reporter1.BeginSummary.NumberOfPendingSpecs).Should(Equal(2)) - Ω(reporter1.BeginSummary.NumberOfSkippedSpecs).Should(Equal(1)) - }) - - It("should report the end of the suite", func() { - Ω(reporter1.EndSummary.SuiteDescription).Should(Equal("description")) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteID).Should(MatchRegexp("[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}")) - Ω(reporter1.EndSummary.NumberOfSpecsBeforeParallelization).Should(Equal(6)) - Ω(reporter1.EndSummary.NumberOfTotalSpecs).Should(Equal(6)) - Ω(reporter1.EndSummary.NumberOfSpecsThatWillBeRun).Should(Equal(3)) - Ω(reporter1.EndSummary.NumberOfPendingSpecs).Should(Equal(2)) - Ω(reporter1.EndSummary.NumberOfSkippedSpecs).Should(Equal(1)) - Ω(reporter1.EndSummary.NumberOfPassedSpecs).Should(Equal(2)) - Ω(reporter1.EndSummary.NumberOfFailedSpecs).Should(Equal(1)) - }) - - Context("when told to perform a dry run", func() { - BeforeEach(func() { - conf.DryRun = true - }) - - It("should report to the reporters", func() { - Ω(reporter1.Config).Should(Equal(reporter2.Config)) - Ω(reporter1.BeforeSuiteSummary).Should(Equal(reporter2.BeforeSuiteSummary)) - Ω(reporter1.BeginSummary).Should(Equal(reporter2.BeginSummary)) - Ω(reporter1.SpecWillRunSummaries).Should(Equal(reporter2.SpecWillRunSummaries)) - Ω(reporter1.SpecSummaries).Should(Equal(reporter2.SpecSummaries)) - Ω(reporter1.AfterSuiteSummary).Should(Equal(reporter2.AfterSuiteSummary)) - Ω(reporter1.EndSummary).Should(Equal(reporter2.EndSummary)) - }) - - It("should not actually run anything", func() { - Ω(thingsThatRan).Should(BeEmpty()) - }) - - It("report before and after suites as passed", func() { - Ω(reporter1.BeforeSuiteSummary.State).Should(Equal(types.SpecStatePassed)) - Ω(reporter1.AfterSuiteSummary.State).Should(Equal(types.SpecStatePassed)) - }) - - It("should report specs as passed", func() { - summaries := reporter1.SpecSummaries - Ω(summaries).Should(HaveLen(6)) - Ω(summaries[0].ComponentTexts).Should(ContainElement("spec A")) - Ω(summaries[0].State).Should(Equal(types.SpecStatePassed)) - Ω(summaries[1].ComponentTexts).Should(ContainElement("pending spec")) - Ω(summaries[1].State).Should(Equal(types.SpecStatePending)) - Ω(summaries[2].ComponentTexts).Should(ContainElement("another pending spec")) - Ω(summaries[2].State).Should(Equal(types.SpecStatePending)) - Ω(summaries[3].ComponentTexts).Should(ContainElement("failed spec")) - Ω(summaries[3].State).Should(Equal(types.SpecStatePassed)) - Ω(summaries[4].ComponentTexts).Should(ContainElement("spec B")) - Ω(summaries[4].State).Should(Equal(types.SpecStatePassed)) - Ω(summaries[5].ComponentTexts).Should(ContainElement("skipped spec")) - Ω(summaries[5].State).Should(Equal(types.SpecStateSkipped)) - }) - - It("should report the end of the suite", func() { - Ω(reporter1.EndSummary.SuiteDescription).Should(Equal("description")) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeTrue()) - Ω(reporter1.EndSummary.SuiteID).Should(MatchRegexp("[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}")) - Ω(reporter1.EndSummary.NumberOfSpecsBeforeParallelization).Should(Equal(6)) - Ω(reporter1.EndSummary.NumberOfTotalSpecs).Should(Equal(6)) - Ω(reporter1.EndSummary.NumberOfSpecsThatWillBeRun).Should(Equal(3)) - Ω(reporter1.EndSummary.NumberOfPendingSpecs).Should(Equal(2)) - Ω(reporter1.EndSummary.NumberOfSkippedSpecs).Should(Equal(1)) - Ω(reporter1.EndSummary.NumberOfPassedSpecs).Should(Equal(0)) - Ω(reporter1.EndSummary.NumberOfFailedSpecs).Should(Equal(0)) - }) - }) - }) - - Describe("reporting on specs", func() { - var proceed chan bool - var ready chan bool - var finished chan bool - BeforeEach(func() { - ready = make(chan bool) - proceed = make(chan bool) - finished = make(chan bool) - skippedSpec := newSpec("SKIP", noneFlag, false) - skippedSpec.Skip() - - runner = newRunner( - config.GinkgoConfigType{}, - newBefSuite("BefSuite", false), - newAftSuite("AftSuite", false), - skippedSpec, - newSpec("PENDING", pendingFlag, false), - newSpecWithBody("RUN", func() { - close(ready) - <-proceed - }), - ) - go func() { - runner.Run() - close(finished) - }() - }) - - It("should report about pending/skipped specs", func() { - <-ready - Ω(reporter1.SpecWillRunSummaries).Should(HaveLen(3)) - - Ω(reporter1.SpecWillRunSummaries[0].ComponentTexts[0]).Should(Equal("SKIP")) - Ω(reporter1.SpecWillRunSummaries[1].ComponentTexts[0]).Should(Equal("PENDING")) - Ω(reporter1.SpecWillRunSummaries[2].ComponentTexts[0]).Should(Equal("RUN")) - - Ω(reporter1.SpecSummaries[0].ComponentTexts[0]).Should(Equal("SKIP")) - Ω(reporter1.SpecSummaries[1].ComponentTexts[0]).Should(Equal("PENDING")) - Ω(reporter1.SpecSummaries).Should(HaveLen(2)) - - close(proceed) - <-finished - - Ω(reporter1.SpecSummaries).Should(HaveLen(3)) - Ω(reporter1.SpecSummaries[2].ComponentTexts[0]).Should(Equal("RUN")) - }) - }) - - Describe("Running BeforeSuite & AfterSuite", func() { - var success bool - var befSuite leafnodes.SuiteNode - var aftSuite leafnodes.SuiteNode - Context("with a nil BeforeSuite & AfterSuite", func() { - BeforeEach(func() { - runner = newRunner( - config.GinkgoConfigType{}, - nil, - nil, - newSpec("A", noneFlag, false), - newSpec("B", noneFlag, false), - ) - success = runner.Run() - }) - - It("should not report about the BeforeSuite", func() { - Ω(reporter1.BeforeSuiteSummary).Should(BeNil()) - }) - - It("should not report about the AfterSuite", func() { - Ω(reporter1.AfterSuiteSummary).Should(BeNil()) - }) - - It("should run the specs", func() { - Ω(thingsThatRan).Should(Equal([]string{"A", "B"})) - }) - }) - - Context("when the BeforeSuite & AfterSuite pass", func() { - BeforeEach(func() { - befSuite = newBefSuite("BefSuite", false) - aftSuite = newBefSuite("AftSuite", false) - runner = newRunner( - config.GinkgoConfigType{}, - befSuite, - aftSuite, - newSpec("A", noneFlag, false), - newSpec("B", noneFlag, false), - ) - success = runner.Run() - }) - - It("should run the BeforeSuite, the AfterSuite and the specs", func() { - Ω(thingsThatRan).Should(Equal([]string{"BefSuite", "A", "B", "AftSuite"})) - }) - - It("should report about the BeforeSuite", func() { - Ω(reporter1.BeforeSuiteSummary).Should(Equal(befSuite.Summary())) - }) - - It("should report about the AfterSuite", func() { - Ω(reporter1.AfterSuiteSummary).Should(Equal(aftSuite.Summary())) - }) - - It("should report success", func() { - Ω(success).Should(BeTrue()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeTrue()) - Ω(reporter1.EndSummary.NumberOfFailedSpecs).Should(Equal(0)) - }) - - It("should not dump the writer", func() { - Ω(writer.EventStream).ShouldNot(ContainElement("DUMP")) - }) - }) - - Context("when the BeforeSuite fails", func() { - BeforeEach(func() { - befSuite = newBefSuite("BefSuite", true) - aftSuite = newBefSuite("AftSuite", false) - - skipped := newSpec("Skipped", noneFlag, false) - skipped.Skip() - - runner = newRunner( - config.GinkgoConfigType{}, - befSuite, - aftSuite, - newSpec("A", noneFlag, false), - newSpec("B", noneFlag, false), - newSpec("Pending", pendingFlag, false), - skipped, - ) - success = runner.Run() - }) - - It("should not run the specs, but it should run the AfterSuite", func() { - Ω(thingsThatRan).Should(Equal([]string{"BefSuite", "AftSuite"})) - }) - - It("should report about the BeforeSuite", func() { - Ω(reporter1.BeforeSuiteSummary).Should(Equal(befSuite.Summary())) - }) - - It("should report about the AfterSuite", func() { - Ω(reporter1.AfterSuiteSummary).Should(Equal(aftSuite.Summary())) - }) - - It("should report failure", func() { - Ω(success).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - Ω(reporter1.EndSummary.NumberOfFailedSpecs).Should(Equal(2)) - Ω(reporter1.EndSummary.NumberOfSpecsThatWillBeRun).Should(Equal(2)) - }) - - It("should dump the writer", func() { - Ω(writer.EventStream).Should(ContainElement("DUMP")) - }) - }) - - Context("when some other test fails", func() { - BeforeEach(func() { - aftSuite = newBefSuite("AftSuite", false) - - runner = newRunner( - config.GinkgoConfigType{}, - nil, - aftSuite, - newSpec("A", noneFlag, true), - ) - success = runner.Run() - }) - - It("should still run the AfterSuite", func() { - Ω(thingsThatRan).Should(Equal([]string{"A", "AftSuite"})) - }) - - It("should report about the AfterSuite", func() { - Ω(reporter1.AfterSuiteSummary).Should(Equal(aftSuite.Summary())) - }) - - It("should report failure", func() { - Ω(success).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - Ω(reporter1.EndSummary.NumberOfFailedSpecs).Should(Equal(1)) - Ω(reporter1.EndSummary.NumberOfSpecsThatWillBeRun).Should(Equal(1)) - }) - }) - - Context("when the AfterSuite fails", func() { - BeforeEach(func() { - befSuite = newBefSuite("BefSuite", false) - aftSuite = newBefSuite("AftSuite", true) - runner = newRunner( - config.GinkgoConfigType{}, - befSuite, - aftSuite, - newSpec("A", noneFlag, false), - newSpec("B", noneFlag, false), - ) - success = runner.Run() - }) - - It("should run everything", func() { - Ω(thingsThatRan).Should(Equal([]string{"BefSuite", "A", "B", "AftSuite"})) - }) - - It("should report about the BeforeSuite", func() { - Ω(reporter1.BeforeSuiteSummary).Should(Equal(befSuite.Summary())) - }) - - It("should report about the AfterSuite", func() { - Ω(reporter1.AfterSuiteSummary).Should(Equal(aftSuite.Summary())) - }) - - It("should report failure", func() { - Ω(success).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - Ω(reporter1.EndSummary.NumberOfFailedSpecs).Should(Equal(0)) - }) - - It("should dump the writer", func() { - Ω(writer.EventStream).Should(ContainElement("DUMP")) - }) - }) - }) - - Describe("When instructed to fail fast", func() { - BeforeEach(func() { - conf := config.GinkgoConfigType{ - FailFast: true, - } - runner = newRunner(conf, nil, newAftSuite("after-suite", false), newSpec("passing", noneFlag, false), newSpec("failing", noneFlag, true), newSpec("dont-see", noneFlag, true), newSpec("dont-see", noneFlag, true)) - }) - - It("should return false, report failure, and not run anything past the failing test", func() { - Ω(runner.Run()).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - Ω(thingsThatRan).Should(Equal([]string{"passing", "failing", "after-suite"})) - }) - - It("should announce the subsequent specs as skipped", func() { - runner.Run() - Ω(reporter1.SpecSummaries).Should(HaveLen(4)) - Ω(reporter1.SpecSummaries[2].State).Should(Equal(types.SpecStateSkipped)) - Ω(reporter1.SpecSummaries[3].State).Should(Equal(types.SpecStateSkipped)) - }) - - It("should mark all subsequent specs as skipped", func() { - runner.Run() - Ω(reporter1.EndSummary.NumberOfSkippedSpecs).Should(Equal(2)) - }) - }) - - Describe("Marking failure and success", func() { - Context("when all tests pass", func() { - BeforeEach(func() { - runner = newRunner(config.GinkgoConfigType{}, nil, nil, newSpec("passing", noneFlag, false), newSpec("pending", pendingFlag, false)) - }) - - It("should return true and report success", func() { - Ω(runner.Run()).Should(BeTrue()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeTrue()) - }) - }) - - Context("when a test fails", func() { - BeforeEach(func() { - runner = newRunner(config.GinkgoConfigType{}, nil, nil, newSpec("failing", noneFlag, true), newSpec("pending", pendingFlag, false)) - }) - - It("should return false and report failure", func() { - Ω(runner.Run()).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - }) - }) - - Context("when there is a pending test, but pendings count as failures", func() { - BeforeEach(func() { - runner = newRunner(config.GinkgoConfigType{FailOnPending: true}, nil, nil, newSpec("passing", noneFlag, false), newSpec("pending", pendingFlag, false)) - }) - - It("should return false and report failure", func() { - Ω(runner.Run()).Should(BeFalse()) - Ω(reporter1.EndSummary.SuiteSucceeded).Should(BeFalse()) - }) - }) - }) - - Describe("Managing the writer", func() { - BeforeEach(func() { - runner = newRunner( - config.GinkgoConfigType{}, - nil, - nil, - newSpec("A", noneFlag, false), - newSpec("B", noneFlag, true), - newSpec("C", noneFlag, false), - ) - reporter1.SpecWillRunStub = func(specSummary *types.SpecSummary) { - writer.AddEvent("R1.WillRun") - } - reporter2.SpecWillRunStub = func(specSummary *types.SpecSummary) { - writer.AddEvent("R2.WillRun") - } - reporter1.SpecDidCompleteStub = func(specSummary *types.SpecSummary) { - writer.AddEvent("R1.DidComplete") - } - reporter2.SpecDidCompleteStub = func(specSummary *types.SpecSummary) { - writer.AddEvent("R2.DidComplete") - } - runner.Run() - }) - - It("should truncate between tests, but only dump if a test fails", func() { - Ω(writer.EventStream).Should(Equal([]string{ - "TRUNCATE", - "R1.WillRun", - "R2.WillRun", - "A", - "R2.DidComplete", - "R1.DidComplete", - "TRUNCATE", - "R1.WillRun", - "R2.WillRun", - "B", - "R2.DidComplete", - "DUMP", - "R1.DidComplete", - "TRUNCATE", - "R1.WillRun", - "R2.WillRun", - "C", - "R2.DidComplete", - "R1.DidComplete", - })) - }) - }) - - Describe("CurrentSpecSummary", func() { - It("should return the spec summary for the currently running spec", func() { - var summary *types.SpecSummary - runner = newRunner( - config.GinkgoConfigType{}, - nil, - nil, - newSpec("A", noneFlag, false), - newSpecWithBody("B", func() { - var ok bool - summary, ok = runner.CurrentSpecSummary() - Ω(ok).Should(BeTrue()) - }), - newSpec("C", noneFlag, false), - ) - runner.Run() - - Ω(summary.ComponentTexts).Should(Equal([]string{"B"})) - - summary, ok := runner.CurrentSpecSummary() - Ω(summary).Should(BeNil()) - Ω(ok).Should(BeFalse()) - }) - }) - - Context("When running tests in parallel", func() { - It("reports the correct number of specs before parallelization", func() { - specs := spec.NewSpecs([]*spec.Spec{ - newSpec("A", noneFlag, false), - newSpec("B", pendingFlag, false), - newSpec("C", noneFlag, false), - }) - specs.TrimForParallelization(2, 1) - runner = New("description", nil, specs, nil, []reporters.Reporter{reporter1, reporter2}, writer, config.GinkgoConfigType{}) - runner.Run() - - Ω(reporter1.EndSummary.NumberOfSpecsBeforeParallelization).Should(Equal(3)) - Ω(reporter1.EndSummary.NumberOfTotalSpecs).Should(Equal(2)) - Ω(reporter1.EndSummary.NumberOfSpecsThatWillBeRun).Should(Equal(1)) - Ω(reporter1.EndSummary.NumberOfPendingSpecs).Should(Equal(1)) - }) - }) - - Describe("generating a suite id", func() { - It("should generate an id randomly", func() { - runnerA := newRunner(config.GinkgoConfigType{}, nil, nil) - runnerA.Run() - IDA := reporter1.BeginSummary.SuiteID - - runnerB := newRunner(config.GinkgoConfigType{}, nil, nil) - runnerB.Run() - IDB := reporter1.BeginSummary.SuiteID - - IDRegexp := "[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}" - Ω(IDA).Should(MatchRegexp(IDRegexp)) - Ω(IDB).Should(MatchRegexp(IDRegexp)) - - Ω(IDA).ShouldNot(Equal(IDB)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite.go deleted file mode 100644 index a054602..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite.go +++ /dev/null @@ -1,171 +0,0 @@ -package suite - -import ( - "math/rand" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/internal/containernode" - "github.com/onsi/ginkgo/internal/failer" - "github.com/onsi/ginkgo/internal/leafnodes" - "github.com/onsi/ginkgo/internal/spec" - "github.com/onsi/ginkgo/internal/specrunner" - "github.com/onsi/ginkgo/internal/writer" - "github.com/onsi/ginkgo/reporters" - "github.com/onsi/ginkgo/types" -) - -type ginkgoTestingT interface { - Fail() -} - -type Suite struct { - topLevelContainer *containernode.ContainerNode - currentContainer *containernode.ContainerNode - containerIndex int - beforeSuiteNode leafnodes.SuiteNode - afterSuiteNode leafnodes.SuiteNode - runner *specrunner.SpecRunner - failer *failer.Failer - running bool -} - -func New(failer *failer.Failer) *Suite { - topLevelContainer := containernode.New("[Top Level]", types.FlagTypeNone, types.CodeLocation{}) - - return &Suite{ - topLevelContainer: topLevelContainer, - currentContainer: topLevelContainer, - failer: failer, - containerIndex: 1, - } -} - -func (suite *Suite) Run(t ginkgoTestingT, description string, reporters []reporters.Reporter, writer writer.WriterInterface, config config.GinkgoConfigType) (bool, bool) { - if config.ParallelTotal < 1 { - panic("ginkgo.parallel.total must be >= 1") - } - - if config.ParallelNode > config.ParallelTotal || config.ParallelNode < 1 { - panic("ginkgo.parallel.node is one-indexed and must be <= ginkgo.parallel.total") - } - - r := rand.New(rand.NewSource(config.RandomSeed)) - suite.topLevelContainer.Shuffle(r) - specs := suite.generateSpecs(description, config) - suite.runner = specrunner.New(description, suite.beforeSuiteNode, specs, suite.afterSuiteNode, reporters, writer, config) - - suite.running = true - success := suite.runner.Run() - if !success { - t.Fail() - } - return success, specs.HasProgrammaticFocus() -} - -func (suite *Suite) generateSpecs(description string, config config.GinkgoConfigType) *spec.Specs { - specsSlice := []*spec.Spec{} - suite.topLevelContainer.BackPropagateProgrammaticFocus() - for _, collatedNodes := range suite.topLevelContainer.Collate() { - specsSlice = append(specsSlice, spec.New(collatedNodes.Subject, collatedNodes.Containers, config.EmitSpecProgress)) - } - - specs := spec.NewSpecs(specsSlice) - - if config.RandomizeAllSpecs { - specs.Shuffle(rand.New(rand.NewSource(config.RandomSeed))) - } - - specs.ApplyFocus(description, config.FocusString, config.SkipString) - - if config.SkipMeasurements { - specs.SkipMeasurements() - } - - if config.ParallelTotal > 1 { - specs.TrimForParallelization(config.ParallelTotal, config.ParallelNode) - } - - return specs -} - -func (suite *Suite) CurrentRunningSpecSummary() (*types.SpecSummary, bool) { - return suite.runner.CurrentSpecSummary() -} - -func (suite *Suite) SetBeforeSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.beforeSuiteNode != nil { - panic("You may only call BeforeSuite once!") - } - suite.beforeSuiteNode = leafnodes.NewBeforeSuiteNode(body, codeLocation, timeout, suite.failer) -} - -func (suite *Suite) SetAfterSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.afterSuiteNode != nil { - panic("You may only call AfterSuite once!") - } - suite.afterSuiteNode = leafnodes.NewAfterSuiteNode(body, codeLocation, timeout, suite.failer) -} - -func (suite *Suite) SetSynchronizedBeforeSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.beforeSuiteNode != nil { - panic("You may only call BeforeSuite once!") - } - suite.beforeSuiteNode = leafnodes.NewSynchronizedBeforeSuiteNode(bodyA, bodyB, codeLocation, timeout, suite.failer) -} - -func (suite *Suite) SetSynchronizedAfterSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.afterSuiteNode != nil { - panic("You may only call AfterSuite once!") - } - suite.afterSuiteNode = leafnodes.NewSynchronizedAfterSuiteNode(bodyA, bodyB, codeLocation, timeout, suite.failer) -} - -func (suite *Suite) PushContainerNode(text string, body func(), flag types.FlagType, codeLocation types.CodeLocation) { - container := containernode.New(text, flag, codeLocation) - suite.currentContainer.PushContainerNode(container) - - previousContainer := suite.currentContainer - suite.currentContainer = container - suite.containerIndex++ - - body() - - suite.containerIndex-- - suite.currentContainer = previousContainer -} - -func (suite *Suite) PushItNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.running { - suite.failer.Fail("You may only call It from within a Describe or Context", codeLocation) - } - suite.currentContainer.PushSubjectNode(leafnodes.NewItNode(text, body, flag, codeLocation, timeout, suite.failer, suite.containerIndex)) -} - -func (suite *Suite) PushMeasureNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, samples int) { - if suite.running { - suite.failer.Fail("You may only call Measure from within a Describe or Context", codeLocation) - } - suite.currentContainer.PushSubjectNode(leafnodes.NewMeasureNode(text, body, flag, codeLocation, samples, suite.failer, suite.containerIndex)) -} - -func (suite *Suite) PushBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.running { - suite.failer.Fail("You may only call BeforeEach from within a Describe or Context", codeLocation) - } - suite.currentContainer.PushSetupNode(leafnodes.NewBeforeEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) -} - -func (suite *Suite) PushJustBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.running { - suite.failer.Fail("You may only call JustBeforeEach from within a Describe or Context", codeLocation) - } - suite.currentContainer.PushSetupNode(leafnodes.NewJustBeforeEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) -} - -func (suite *Suite) PushAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { - if suite.running { - suite.failer.Fail("You may only call AfterEach from within a Describe or Context", codeLocation) - } - suite.currentContainer.PushSetupNode(leafnodes.NewAfterEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite_suite_test.go deleted file mode 100644 index 06fe1d1..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite_suite_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package suite_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func Test(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Suite") -} - -var numBeforeSuiteRuns = 0 -var numAfterSuiteRuns = 0 - -var _ = BeforeSuite(func() { - numBeforeSuiteRuns++ -}) - -var _ = AfterSuite(func() { - numAfterSuiteRuns++ - Ω(numBeforeSuiteRuns).Should(Equal(1)) - Ω(numAfterSuiteRuns).Should(Equal(1)) -}) - -//Fakes -type fakeTestingT struct { - didFail bool -} - -func (fakeT *fakeTestingT) Fail() { - fakeT.didFail = true -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite_test.go deleted file mode 100644 index dd471b4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/suite/suite_test.go +++ /dev/null @@ -1,399 +0,0 @@ -package suite_test - -import ( - "bytes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/suite" - . "github.com/onsi/gomega" - - "math/rand" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/internal/codelocation" - Failer "github.com/onsi/ginkgo/internal/failer" - Writer "github.com/onsi/ginkgo/internal/writer" - "github.com/onsi/ginkgo/reporters" - "github.com/onsi/ginkgo/types" -) - -var _ = Describe("Suite", func() { - var ( - specSuite *Suite - fakeT *fakeTestingT - fakeR *reporters.FakeReporter - writer *Writer.FakeGinkgoWriter - failer *Failer.Failer - ) - - BeforeEach(func() { - writer = Writer.NewFake() - fakeT = &fakeTestingT{} - fakeR = reporters.NewFakeReporter() - failer = Failer.New() - specSuite = New(failer) - }) - - Describe("running a suite", func() { - var ( - runOrder []string - randomizeAllSpecs bool - randomSeed int64 - focusString string - parallelNode int - parallelTotal int - runResult bool - hasProgrammaticFocus bool - ) - - var f = func(runText string) func() { - return func() { - runOrder = append(runOrder, runText) - } - } - - BeforeEach(func() { - randomizeAllSpecs = false - randomSeed = 11 - parallelNode = 1 - parallelTotal = 1 - focusString = "" - - runOrder = make([]string, 0) - specSuite.SetBeforeSuiteNode(f("BeforeSuite"), codelocation.New(0), 0) - specSuite.PushBeforeEachNode(f("top BE"), codelocation.New(0), 0) - specSuite.PushJustBeforeEachNode(f("top JBE"), codelocation.New(0), 0) - specSuite.PushAfterEachNode(f("top AE"), codelocation.New(0), 0) - - specSuite.PushContainerNode("container", func() { - specSuite.PushBeforeEachNode(f("BE"), codelocation.New(0), 0) - specSuite.PushJustBeforeEachNode(f("JBE"), codelocation.New(0), 0) - specSuite.PushAfterEachNode(f("AE"), codelocation.New(0), 0) - specSuite.PushItNode("it", f("IT"), types.FlagTypeNone, codelocation.New(0), 0) - - specSuite.PushContainerNode("inner container", func() { - specSuite.PushItNode("inner it", f("inner IT"), types.FlagTypeNone, codelocation.New(0), 0) - }, types.FlagTypeNone, codelocation.New(0)) - }, types.FlagTypeNone, codelocation.New(0)) - - specSuite.PushContainerNode("container 2", func() { - specSuite.PushBeforeEachNode(f("BE 2"), codelocation.New(0), 0) - specSuite.PushItNode("it 2", f("IT 2"), types.FlagTypeNone, codelocation.New(0), 0) - }, types.FlagTypeNone, codelocation.New(0)) - - specSuite.PushItNode("top level it", f("top IT"), types.FlagTypeNone, codelocation.New(0), 0) - - specSuite.SetAfterSuiteNode(f("AfterSuite"), codelocation.New(0), 0) - }) - - JustBeforeEach(func() { - runResult, hasProgrammaticFocus = specSuite.Run(fakeT, "suite description", []reporters.Reporter{fakeR}, writer, config.GinkgoConfigType{ - RandomSeed: randomSeed, - RandomizeAllSpecs: randomizeAllSpecs, - FocusString: focusString, - ParallelNode: parallelNode, - ParallelTotal: parallelTotal, - }) - }) - - It("provides the config and suite description to the reporter", func() { - Ω(fakeR.Config.RandomSeed).Should(Equal(int64(randomSeed))) - Ω(fakeR.Config.RandomizeAllSpecs).Should(Equal(randomizeAllSpecs)) - Ω(fakeR.BeginSummary.SuiteDescription).Should(Equal("suite description")) - }) - - It("reports that the BeforeSuite node ran", func() { - Ω(fakeR.BeforeSuiteSummary).ShouldNot(BeNil()) - }) - - It("reports that the AfterSuite node ran", func() { - Ω(fakeR.AfterSuiteSummary).ShouldNot(BeNil()) - }) - - It("provides information about the current test", func() { - description := CurrentGinkgoTestDescription() - Ω(description.ComponentTexts).Should(Equal([]string{"Suite", "running a suite", "provides information about the current test"})) - Ω(description.FullTestText).Should(Equal("Suite running a suite provides information about the current test")) - Ω(description.TestText).Should(Equal("provides information about the current test")) - Ω(description.IsMeasurement).Should(BeFalse()) - Ω(description.FileName).Should(ContainSubstring("suite_test.go")) - Ω(description.LineNumber).Should(BeNumerically(">", 50)) - Ω(description.LineNumber).Should(BeNumerically("<", 150)) - Ω(description.Failed).Should(BeFalse()) - }) - - Measure("should run measurements", func(b Benchmarker) { - r := rand.New(rand.NewSource(time.Now().UnixNano())) - - runtime := b.Time("sleeping", func() { - sleepTime := time.Duration(r.Float64() * 0.01 * float64(time.Second)) - time.Sleep(sleepTime) - }) - Ω(runtime.Seconds()).Should(BeNumerically("<=", 0.015)) - Ω(runtime.Seconds()).Should(BeNumerically(">=", 0)) - - randomValue := r.Float64() * 10.0 - b.RecordValue("random value", randomValue) - Ω(randomValue).Should(BeNumerically("<=", 10.0)) - Ω(randomValue).Should(BeNumerically(">=", 0.0)) - }, 10) - - It("creates a node hierarchy, converts it to a spec collection, and runs it", func() { - Ω(runOrder).Should(Equal([]string{ - "BeforeSuite", - "top BE", "BE", "top JBE", "JBE", "IT", "AE", "top AE", - "top BE", "BE", "top JBE", "JBE", "inner IT", "AE", "top AE", - "top BE", "BE 2", "top JBE", "IT 2", "top AE", - "top BE", "top JBE", "top IT", "top AE", - "AfterSuite", - })) - }) - - Context("when told to randomize all specs", func() { - BeforeEach(func() { - randomizeAllSpecs = true - }) - - It("does", func() { - Ω(runOrder).Should(Equal([]string{ - "BeforeSuite", - "top BE", "top JBE", "top IT", "top AE", - "top BE", "BE", "top JBE", "JBE", "inner IT", "AE", "top AE", - "top BE", "BE", "top JBE", "JBE", "IT", "AE", "top AE", - "top BE", "BE 2", "top JBE", "IT 2", "top AE", - "AfterSuite", - })) - }) - }) - - Describe("with ginkgo.parallel.total > 1", func() { - BeforeEach(func() { - parallelTotal = 2 - randomizeAllSpecs = true - }) - - Context("for one worker", func() { - BeforeEach(func() { - parallelNode = 1 - }) - - It("should run a subset of tests", func() { - Ω(runOrder).Should(Equal([]string{ - "BeforeSuite", - "top BE", "top JBE", "top IT", "top AE", - "top BE", "BE", "top JBE", "JBE", "inner IT", "AE", "top AE", - "AfterSuite", - })) - }) - }) - - Context("for another worker", func() { - BeforeEach(func() { - parallelNode = 2 - }) - - It("should run a (different) subset of tests", func() { - Ω(runOrder).Should(Equal([]string{ - "BeforeSuite", - "top BE", "BE", "top JBE", "JBE", "IT", "AE", "top AE", - "top BE", "BE 2", "top JBE", "IT 2", "top AE", - "AfterSuite", - })) - }) - }) - }) - - Context("when provided with a filter", func() { - BeforeEach(func() { - focusString = `inner|\d` - }) - - It("converts the filter to a regular expression and uses it to filter the running specs", func() { - Ω(runOrder).Should(Equal([]string{ - "BeforeSuite", - "top BE", "BE", "top JBE", "JBE", "inner IT", "AE", "top AE", - "top BE", "BE 2", "top JBE", "IT 2", "top AE", - "AfterSuite", - })) - }) - - It("should not report a programmatic focus", func() { - Ω(hasProgrammaticFocus).Should(BeFalse()) - }) - }) - - Context("with a programatically focused spec", func() { - BeforeEach(func() { - specSuite.PushItNode("focused it", f("focused it"), types.FlagTypeFocused, codelocation.New(0), 0) - - specSuite.PushContainerNode("focused container", func() { - specSuite.PushItNode("inner focused it", f("inner focused it"), types.FlagTypeFocused, codelocation.New(0), 0) - specSuite.PushItNode("inner unfocused it", f("inner unfocused it"), types.FlagTypeNone, codelocation.New(0), 0) - }, types.FlagTypeFocused, codelocation.New(0)) - - }) - - It("should only run the focused test, applying backpropagation to favor most deeply focused leaf nodes", func() { - Ω(runOrder).Should(Equal([]string{ - "BeforeSuite", - "top BE", "top JBE", "focused it", "top AE", - "top BE", "top JBE", "inner focused it", "top AE", - "AfterSuite", - })) - }) - - It("should report a programmatic focus", func() { - Ω(hasProgrammaticFocus).Should(BeTrue()) - }) - }) - - Context("when the specs pass", func() { - It("doesn't report a failure", func() { - Ω(fakeT.didFail).Should(BeFalse()) - }) - - It("should return true", func() { - Ω(runResult).Should(BeTrue()) - }) - }) - - Context("when a spec fails", func() { - var location types.CodeLocation - BeforeEach(func() { - specSuite.PushItNode("top level it", func() { - location = codelocation.New(0) - failer.Fail("oops!", location) - }, types.FlagTypeNone, codelocation.New(0), 0) - }) - - It("should return false", func() { - Ω(runResult).Should(BeFalse()) - }) - - It("reports a failure", func() { - Ω(fakeT.didFail).Should(BeTrue()) - }) - - It("generates the correct failure data", func() { - Ω(fakeR.SpecSummaries[0].Failure.Message).Should(Equal("oops!")) - Ω(fakeR.SpecSummaries[0].Failure.Location).Should(Equal(location)) - }) - }) - - Context("when runnable nodes are nested within other runnable nodes", func() { - Context("when an It is nested", func() { - BeforeEach(func() { - specSuite.PushItNode("top level it", func() { - specSuite.PushItNode("nested it", f("oops"), types.FlagTypeNone, codelocation.New(0), 0) - }, types.FlagTypeNone, codelocation.New(0), 0) - }) - - It("should fail", func() { - Ω(fakeT.didFail).Should(BeTrue()) - }) - }) - - Context("when a Measure is nested", func() { - BeforeEach(func() { - specSuite.PushItNode("top level it", func() { - specSuite.PushMeasureNode("nested measure", func(Benchmarker) {}, types.FlagTypeNone, codelocation.New(0), 10) - }, types.FlagTypeNone, codelocation.New(0), 0) - }) - - It("should fail", func() { - Ω(fakeT.didFail).Should(BeTrue()) - }) - }) - - Context("when a BeforeEach is nested", func() { - BeforeEach(func() { - specSuite.PushItNode("top level it", func() { - specSuite.PushBeforeEachNode(f("nested bef"), codelocation.New(0), 0) - }, types.FlagTypeNone, codelocation.New(0), 0) - }) - - It("should fail", func() { - Ω(fakeT.didFail).Should(BeTrue()) - }) - }) - - Context("when a JustBeforeEach is nested", func() { - BeforeEach(func() { - specSuite.PushItNode("top level it", func() { - specSuite.PushJustBeforeEachNode(f("nested jbef"), codelocation.New(0), 0) - }, types.FlagTypeNone, codelocation.New(0), 0) - }) - - It("should fail", func() { - Ω(fakeT.didFail).Should(BeTrue()) - }) - }) - - Context("when a AfterEach is nested", func() { - BeforeEach(func() { - specSuite.PushItNode("top level it", func() { - specSuite.PushAfterEachNode(f("nested aft"), codelocation.New(0), 0) - }, types.FlagTypeNone, codelocation.New(0), 0) - }) - - It("should fail", func() { - Ω(fakeT.didFail).Should(BeTrue()) - }) - }) - }) - }) - - Describe("BeforeSuite", func() { - Context("when setting BeforeSuite more than once", func() { - It("should panic", func() { - specSuite.SetBeforeSuiteNode(func() {}, codelocation.New(0), 0) - - Ω(func() { - specSuite.SetBeforeSuiteNode(func() {}, codelocation.New(0), 0) - }).Should(Panic()) - - }) - }) - }) - - Describe("AfterSuite", func() { - Context("when setting AfterSuite more than once", func() { - It("should panic", func() { - specSuite.SetAfterSuiteNode(func() {}, codelocation.New(0), 0) - - Ω(func() { - specSuite.SetAfterSuiteNode(func() {}, codelocation.New(0), 0) - }).Should(Panic()) - }) - }) - }) - - Describe("By", func() { - It("writes to the GinkgoWriter", func() { - originalGinkgoWriter := GinkgoWriter - buffer := &bytes.Buffer{} - - GinkgoWriter = buffer - By("Saying Hello GinkgoWriter") - GinkgoWriter = originalGinkgoWriter - - Ω(buffer.String()).Should(ContainSubstring("STEP")) - Ω(buffer.String()).Should(ContainSubstring(": Saying Hello GinkgoWriter\n")) - }) - - It("calls the passed-in callback if present", func() { - a := 0 - By("calling the callback", func() { - a = 1 - }) - Ω(a).Should(Equal(1)) - }) - - It("panics if there is more than one callback", func() { - Ω(func() { - By("registering more than one callback", func() {}, func() {}) - }).Should(Panic()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer.go deleted file mode 100644 index 7678fc1..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer.go +++ /dev/null @@ -1,71 +0,0 @@ -package writer - -import ( - "bytes" - "io" - "sync" -) - -type WriterInterface interface { - io.Writer - - Truncate() - DumpOut() - DumpOutWithHeader(header string) -} - -type Writer struct { - buffer *bytes.Buffer - outWriter io.Writer - lock *sync.Mutex - stream bool -} - -func New(outWriter io.Writer) *Writer { - return &Writer{ - buffer: &bytes.Buffer{}, - lock: &sync.Mutex{}, - outWriter: outWriter, - stream: true, - } -} - -func (w *Writer) SetStream(stream bool) { - w.lock.Lock() - defer w.lock.Unlock() - w.stream = stream -} - -func (w *Writer) Write(b []byte) (n int, err error) { - w.lock.Lock() - defer w.lock.Unlock() - - if w.stream { - return w.outWriter.Write(b) - } else { - return w.buffer.Write(b) - } -} - -func (w *Writer) Truncate() { - w.lock.Lock() - defer w.lock.Unlock() - w.buffer.Reset() -} - -func (w *Writer) DumpOut() { - w.lock.Lock() - defer w.lock.Unlock() - if !w.stream { - w.buffer.WriteTo(w.outWriter) - } -} - -func (w *Writer) DumpOutWithHeader(header string) { - w.lock.Lock() - defer w.lock.Unlock() - if !w.stream && w.buffer.Len() > 0 { - w.outWriter.Write([]byte(header)) - w.buffer.WriteTo(w.outWriter) - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go deleted file mode 100644 index e206577..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package writer_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestWriter(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Writer Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer_test.go deleted file mode 100644 index 3e1d17c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/writer_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package writer_test - -import ( - "github.com/onsi/gomega/gbytes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/ginkgo/internal/writer" - . "github.com/onsi/gomega" -) - -var _ = Describe("Writer", func() { - var writer *Writer - var out *gbytes.Buffer - - BeforeEach(func() { - out = gbytes.NewBuffer() - writer = New(out) - }) - - It("should stream directly to the outbuffer by default", func() { - writer.Write([]byte("foo")) - Ω(out).Should(gbytes.Say("foo")) - }) - - It("should not emit the header when asked to DumpOutWitHeader", func() { - writer.Write([]byte("foo")) - writer.DumpOutWithHeader("my header") - Ω(out).ShouldNot(gbytes.Say("my header")) - Ω(out).Should(gbytes.Say("foo")) - }) - - Context("when told not to stream", func() { - BeforeEach(func() { - writer.SetStream(false) - }) - - It("should only write to the buffer when told to DumpOut", func() { - writer.Write([]byte("foo")) - Ω(out).ShouldNot(gbytes.Say("foo")) - writer.DumpOut() - Ω(out).Should(gbytes.Say("foo")) - }) - - It("should truncate the internal buffer when told to truncate", func() { - writer.Write([]byte("foo")) - writer.Truncate() - writer.DumpOut() - Ω(out).ShouldNot(gbytes.Say("foo")) - - writer.Write([]byte("bar")) - writer.DumpOut() - Ω(out).Should(gbytes.Say("bar")) - }) - - Describe("emitting a header", func() { - Context("when the buffer has content", func() { - It("should emit the header followed by the content", func() { - writer.Write([]byte("foo")) - writer.DumpOutWithHeader("my header") - - Ω(out).Should(gbytes.Say("my header")) - Ω(out).Should(gbytes.Say("foo")) - }) - }) - - Context("when the buffer has no content", func() { - It("should not emit the header", func() { - writer.DumpOutWithHeader("my header") - - Ω(out).ShouldNot(gbytes.Say("my header")) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/default_reporter_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/default_reporter_test.go deleted file mode 100644 index 7a877e8..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/default_reporter_test.go +++ /dev/null @@ -1,415 +0,0 @@ -package reporters_test - -import ( - "time" - - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/reporters" - st "github.com/onsi/ginkgo/reporters/stenographer" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" -) - -var _ = Describe("DefaultReporter", func() { - var ( - reporter *reporters.DefaultReporter - reporterConfig config.DefaultReporterConfigType - stenographer *st.FakeStenographer - - ginkgoConfig config.GinkgoConfigType - suite *types.SuiteSummary - spec *types.SpecSummary - ) - - BeforeEach(func() { - stenographer = st.NewFakeStenographer() - reporterConfig = config.DefaultReporterConfigType{ - NoColor: false, - SlowSpecThreshold: 0.1, - NoisyPendings: false, - Verbose: true, - FullTrace: true, - } - - reporter = reporters.NewDefaultReporter(reporterConfig, stenographer) - }) - - call := func(method string, args ...interface{}) st.FakeStenographerCall { - return st.NewFakeStenographerCall(method, args...) - } - - Describe("SpecSuiteWillBegin", func() { - BeforeEach(func() { - suite = &types.SuiteSummary{ - SuiteDescription: "A Sweet Suite", - NumberOfTotalSpecs: 10, - NumberOfSpecsThatWillBeRun: 8, - } - - ginkgoConfig = config.GinkgoConfigType{ - RandomSeed: 1138, - RandomizeAllSpecs: true, - } - }) - - Context("when a serial (non-parallel) suite begins", func() { - BeforeEach(func() { - ginkgoConfig.ParallelTotal = 1 - - reporter.SpecSuiteWillBegin(ginkgoConfig, suite) - }) - - It("should announce the suite, then announce the number of specs", func() { - Ω(stenographer.Calls()).Should(HaveLen(2)) - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuite", "A Sweet Suite", ginkgoConfig.RandomSeed, true, false))) - Ω(stenographer.Calls()[1]).Should(Equal(call("AnnounceNumberOfSpecs", 8, 10, false))) - }) - }) - - Context("when a parallel suite begins", func() { - BeforeEach(func() { - ginkgoConfig.ParallelTotal = 2 - ginkgoConfig.ParallelNode = 1 - suite.NumberOfSpecsBeforeParallelization = 20 - - reporter.SpecSuiteWillBegin(ginkgoConfig, suite) - }) - - It("should announce the suite, announce that it's a parallel run, then announce the number of specs", func() { - Ω(stenographer.Calls()).Should(HaveLen(3)) - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuite", "A Sweet Suite", ginkgoConfig.RandomSeed, true, false))) - Ω(stenographer.Calls()[1]).Should(Equal(call("AnnounceParallelRun", 1, 2, 10, 20, false))) - Ω(stenographer.Calls()[2]).Should(Equal(call("AnnounceNumberOfSpecs", 8, 10, false))) - }) - }) - }) - - Describe("BeforeSuiteDidRun", func() { - Context("when the BeforeSuite passes", func() { - It("should announce nothing", func() { - reporter.BeforeSuiteDidRun(&types.SetupSummary{ - State: types.SpecStatePassed, - }) - - Ω(stenographer.Calls()).Should(BeEmpty()) - }) - }) - - Context("when the BeforeSuite fails", func() { - It("should announce the failure", func() { - summary := &types.SetupSummary{ - State: types.SpecStateFailed, - } - reporter.BeforeSuiteDidRun(summary) - - Ω(stenographer.Calls()).Should(HaveLen(1)) - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceBeforeSuiteFailure", summary, false, true))) - }) - }) - }) - - Describe("AfterSuiteDidRun", func() { - Context("when the AfterSuite passes", func() { - It("should announce nothing", func() { - reporter.AfterSuiteDidRun(&types.SetupSummary{ - State: types.SpecStatePassed, - }) - - Ω(stenographer.Calls()).Should(BeEmpty()) - }) - }) - - Context("when the AfterSuite fails", func() { - It("should announce the failure", func() { - summary := &types.SetupSummary{ - State: types.SpecStateFailed, - } - reporter.AfterSuiteDidRun(summary) - - Ω(stenographer.Calls()).Should(HaveLen(1)) - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceAfterSuiteFailure", summary, false, true))) - }) - }) - }) - - Describe("SpecWillRun", func() { - Context("When running in verbose mode", func() { - Context("and the spec will run", func() { - BeforeEach(func() { - spec = &types.SpecSummary{} - reporter.SpecWillRun(spec) - }) - - It("should announce that the spec will run", func() { - Ω(stenographer.Calls()).Should(HaveLen(1)) - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecWillRun", spec))) - }) - }) - - Context("and the spec will not run", func() { - Context("because it is pending", func() { - BeforeEach(func() { - spec = &types.SpecSummary{ - State: types.SpecStatePending, - } - reporter.SpecWillRun(spec) - }) - - It("should announce nothing", func() { - Ω(stenographer.Calls()).Should(BeEmpty()) - }) - }) - - Context("because it is skipped", func() { - BeforeEach(func() { - spec = &types.SpecSummary{ - State: types.SpecStateSkipped, - } - reporter.SpecWillRun(spec) - }) - - It("should announce nothing", func() { - Ω(stenographer.Calls()).Should(BeEmpty()) - }) - }) - }) - }) - - Context("When running in verbose & succinct mode", func() { - BeforeEach(func() { - reporterConfig.Succinct = true - reporter = reporters.NewDefaultReporter(reporterConfig, stenographer) - spec = &types.SpecSummary{} - reporter.SpecWillRun(spec) - }) - - It("should announce nothing", func() { - Ω(stenographer.Calls()).Should(BeEmpty()) - }) - }) - - Context("When not running in verbose mode", func() { - BeforeEach(func() { - reporterConfig.Verbose = false - reporter = reporters.NewDefaultReporter(reporterConfig, stenographer) - spec = &types.SpecSummary{} - reporter.SpecWillRun(spec) - }) - - It("should announce nothing", func() { - Ω(stenographer.Calls()).Should(BeEmpty()) - }) - }) - }) - - Describe("SpecDidComplete", func() { - JustBeforeEach(func() { - reporter.SpecDidComplete(spec) - }) - - BeforeEach(func() { - spec = &types.SpecSummary{} - }) - - Context("When the spec passed", func() { - BeforeEach(func() { - spec.State = types.SpecStatePassed - }) - - Context("When the spec was a measurement", func() { - BeforeEach(func() { - spec.IsMeasurement = true - }) - - It("should announce the measurement", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuccesfulMeasurement", spec, false))) - }) - }) - - Context("When the spec is slow", func() { - BeforeEach(func() { - spec.RunTime = time.Second - }) - - It("should announce that it was slow", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuccesfulSlowSpec", spec, false))) - }) - }) - - Context("Otherwise", func() { - It("should announce the succesful spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuccesfulSpec", spec))) - }) - }) - }) - - Context("When the spec is pending", func() { - BeforeEach(func() { - spec.State = types.SpecStatePending - }) - - It("should announce the pending spec, succinctly", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnouncePendingSpec", spec, false))) - }) - }) - - Context("When the spec is skipped", func() { - BeforeEach(func() { - spec.State = types.SpecStateSkipped - }) - - It("should announce the skipped spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSkippedSpec", spec, false, true))) - }) - }) - - Context("When the spec timed out", func() { - BeforeEach(func() { - spec.State = types.SpecStateTimedOut - }) - - It("should announce the timedout spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecTimedOut", spec, false, true))) - }) - }) - - Context("When the spec panicked", func() { - BeforeEach(func() { - spec.State = types.SpecStatePanicked - }) - - It("should announce the panicked spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecPanicked", spec, false, true))) - }) - }) - - Context("When the spec failed", func() { - BeforeEach(func() { - spec.State = types.SpecStateFailed - }) - - It("should announce the failed spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecFailed", spec, false, true))) - }) - }) - - Context("in noisy pendings mode", func() { - BeforeEach(func() { - reporterConfig.Succinct = false - reporterConfig.NoisyPendings = true - reporter = reporters.NewDefaultReporter(reporterConfig, stenographer) - }) - - Context("When the spec is pending", func() { - BeforeEach(func() { - spec.State = types.SpecStatePending - }) - - It("should announce the pending spec, noisily", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnouncePendingSpec", spec, true))) - }) - }) - }) - - Context("in succinct mode", func() { - BeforeEach(func() { - reporterConfig.Succinct = true - reporter = reporters.NewDefaultReporter(reporterConfig, stenographer) - }) - - Context("When the spec passed", func() { - BeforeEach(func() { - spec.State = types.SpecStatePassed - }) - - Context("When the spec was a measurement", func() { - BeforeEach(func() { - spec.IsMeasurement = true - }) - - It("should announce the measurement", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuccesfulMeasurement", spec, true))) - }) - }) - - Context("When the spec is slow", func() { - BeforeEach(func() { - spec.RunTime = time.Second - }) - - It("should announce that it was slow", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuccesfulSlowSpec", spec, true))) - }) - }) - - Context("Otherwise", func() { - It("should announce the succesful spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSuccesfulSpec", spec))) - }) - }) - }) - - Context("When the spec is pending", func() { - BeforeEach(func() { - spec.State = types.SpecStatePending - }) - - It("should announce the pending spec, succinctly", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnouncePendingSpec", spec, false))) - }) - }) - - Context("When the spec is skipped", func() { - BeforeEach(func() { - spec.State = types.SpecStateSkipped - }) - - It("should announce the skipped spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSkippedSpec", spec, true, true))) - }) - }) - - Context("When the spec timed out", func() { - BeforeEach(func() { - spec.State = types.SpecStateTimedOut - }) - - It("should announce the timedout spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecTimedOut", spec, true, true))) - }) - }) - - Context("When the spec panicked", func() { - BeforeEach(func() { - spec.State = types.SpecStatePanicked - }) - - It("should announce the panicked spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecPanicked", spec, true, true))) - }) - }) - - Context("When the spec failed", func() { - BeforeEach(func() { - spec.State = types.SpecStateFailed - }) - - It("should announce the failed spec", func() { - Ω(stenographer.Calls()[0]).Should(Equal(call("AnnounceSpecFailed", spec, true, true))) - }) - }) - }) - }) - - Describe("SpecSuiteDidEnd", func() { - BeforeEach(func() { - suite = &types.SuiteSummary{} - reporter.SpecSuiteDidEnd(suite) - }) - - It("should announce the spec run's completion", func() { - Ω(stenographer.Calls()[1]).Should(Equal(call("AnnounceSpecRunCompletion", suite, false))) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/junit_reporter_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/junit_reporter_test.go deleted file mode 100644 index 744f383..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/junit_reporter_test.go +++ /dev/null @@ -1,241 +0,0 @@ -package reporters_test - -import ( - "encoding/xml" - "io/ioutil" - "os" - "time" - - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/reporters" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" -) - -var _ = Describe("JUnit Reporter", func() { - var ( - outputFile string - reporter Reporter - ) - - readOutputFile := func() reporters.JUnitTestSuite { - bytes, err := ioutil.ReadFile(outputFile) - Ω(err).ShouldNot(HaveOccurred()) - var suite reporters.JUnitTestSuite - err = xml.Unmarshal(bytes, &suite) - Ω(err).ShouldNot(HaveOccurred()) - return suite - } - - BeforeEach(func() { - f, err := ioutil.TempFile("", "output") - Ω(err).ShouldNot(HaveOccurred()) - f.Close() - outputFile = f.Name() - - reporter = reporters.NewJUnitReporter(outputFile) - - reporter.SpecSuiteWillBegin(config.GinkgoConfigType{}, &types.SuiteSummary{ - SuiteDescription: "My test suite", - NumberOfSpecsThatWillBeRun: 1, - }) - }) - - AfterEach(func() { - os.RemoveAll(outputFile) - }) - - Describe("a passing test", func() { - BeforeEach(func() { - beforeSuite := &types.SetupSummary{ - State: types.SpecStatePassed, - } - reporter.BeforeSuiteDidRun(beforeSuite) - - afterSuite := &types.SetupSummary{ - State: types.SpecStatePassed, - } - reporter.AfterSuiteDidRun(afterSuite) - - spec := &types.SpecSummary{ - ComponentTexts: []string{"[Top Level]", "A", "B", "C"}, - State: types.SpecStatePassed, - RunTime: 5 * time.Second, - } - reporter.SpecWillRun(spec) - reporter.SpecDidComplete(spec) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 0, - RunTime: 10 * time.Second, - }) - }) - - It("should record the test as passing", func() { - output := readOutputFile() - Ω(output.Tests).Should(Equal(1)) - Ω(output.Failures).Should(Equal(0)) - Ω(output.Time).Should(Equal(10.0)) - Ω(output.TestCases).Should(HaveLen(1)) - Ω(output.TestCases[0].Name).Should(Equal("A B C")) - Ω(output.TestCases[0].ClassName).Should(Equal("My test suite")) - Ω(output.TestCases[0].FailureMessage).Should(BeNil()) - Ω(output.TestCases[0].Skipped).Should(BeNil()) - Ω(output.TestCases[0].Time).Should(Equal(5.0)) - }) - }) - - Describe("when the BeforeSuite fails", func() { - var beforeSuite *types.SetupSummary - - BeforeEach(func() { - beforeSuite = &types.SetupSummary{ - State: types.SpecStateFailed, - RunTime: 3 * time.Second, - Failure: types.SpecFailure{ - Message: "failed to setup", - ComponentCodeLocation: codelocation.New(0), - }, - } - reporter.BeforeSuiteDidRun(beforeSuite) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 1, - RunTime: 10 * time.Second, - }) - }) - - It("should record the test as having failed", func() { - output := readOutputFile() - Ω(output.Tests).Should(Equal(1)) - Ω(output.Failures).Should(Equal(1)) - Ω(output.Time).Should(Equal(10.0)) - Ω(output.TestCases[0].Name).Should(Equal("BeforeSuite")) - Ω(output.TestCases[0].Time).Should(Equal(3.0)) - Ω(output.TestCases[0].ClassName).Should(Equal("My test suite")) - Ω(output.TestCases[0].FailureMessage.Type).Should(Equal("Failure")) - Ω(output.TestCases[0].FailureMessage.Message).Should(ContainSubstring("failed to setup")) - Ω(output.TestCases[0].FailureMessage.Message).Should(ContainSubstring(beforeSuite.Failure.ComponentCodeLocation.String())) - Ω(output.TestCases[0].Skipped).Should(BeNil()) - }) - }) - - Describe("when the AfterSuite fails", func() { - var afterSuite *types.SetupSummary - - BeforeEach(func() { - afterSuite = &types.SetupSummary{ - State: types.SpecStateFailed, - RunTime: 3 * time.Second, - Failure: types.SpecFailure{ - Message: "failed to setup", - ComponentCodeLocation: codelocation.New(0), - }, - } - reporter.AfterSuiteDidRun(afterSuite) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 1, - RunTime: 10 * time.Second, - }) - }) - - It("should record the test as having failed", func() { - output := readOutputFile() - Ω(output.Tests).Should(Equal(1)) - Ω(output.Failures).Should(Equal(1)) - Ω(output.Time).Should(Equal(10.0)) - Ω(output.TestCases[0].Name).Should(Equal("AfterSuite")) - Ω(output.TestCases[0].Time).Should(Equal(3.0)) - Ω(output.TestCases[0].ClassName).Should(Equal("My test suite")) - Ω(output.TestCases[0].FailureMessage.Type).Should(Equal("Failure")) - Ω(output.TestCases[0].FailureMessage.Message).Should(ContainSubstring("failed to setup")) - Ω(output.TestCases[0].FailureMessage.Message).Should(ContainSubstring(afterSuite.Failure.ComponentCodeLocation.String())) - Ω(output.TestCases[0].Skipped).Should(BeNil()) - }) - }) - - specStateCases := []struct { - state types.SpecState - message string - }{ - {types.SpecStateFailed, "Failure"}, - {types.SpecStateTimedOut, "Timeout"}, - {types.SpecStatePanicked, "Panic"}, - } - - for _, specStateCase := range specStateCases { - specStateCase := specStateCase - Describe("a failing test", func() { - var spec *types.SpecSummary - BeforeEach(func() { - spec = &types.SpecSummary{ - ComponentTexts: []string{"[Top Level]", "A", "B", "C"}, - State: specStateCase.state, - RunTime: 5 * time.Second, - Failure: types.SpecFailure{ - ComponentCodeLocation: codelocation.New(0), - Message: "I failed", - }, - } - reporter.SpecWillRun(spec) - reporter.SpecDidComplete(spec) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 1, - RunTime: 10 * time.Second, - }) - }) - - It("should record test as failing", func() { - output := readOutputFile() - Ω(output.Tests).Should(Equal(1)) - Ω(output.Failures).Should(Equal(1)) - Ω(output.Time).Should(Equal(10.0)) - Ω(output.TestCases[0].Name).Should(Equal("A B C")) - Ω(output.TestCases[0].ClassName).Should(Equal("My test suite")) - Ω(output.TestCases[0].FailureMessage.Type).Should(Equal(specStateCase.message)) - Ω(output.TestCases[0].FailureMessage.Message).Should(ContainSubstring("I failed")) - Ω(output.TestCases[0].FailureMessage.Message).Should(ContainSubstring(spec.Failure.ComponentCodeLocation.String())) - Ω(output.TestCases[0].Skipped).Should(BeNil()) - }) - }) - } - - for _, specStateCase := range []types.SpecState{types.SpecStatePending, types.SpecStateSkipped} { - specStateCase := specStateCase - Describe("a skipped test", func() { - var spec *types.SpecSummary - BeforeEach(func() { - spec = &types.SpecSummary{ - ComponentTexts: []string{"[Top Level]", "A", "B", "C"}, - State: specStateCase, - RunTime: 5 * time.Second, - } - reporter.SpecWillRun(spec) - reporter.SpecDidComplete(spec) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 0, - RunTime: 10 * time.Second, - }) - }) - - It("should record test as failing", func() { - output := readOutputFile() - Ω(output.Tests).Should(Equal(1)) - Ω(output.Failures).Should(Equal(0)) - Ω(output.Time).Should(Equal(10.0)) - Ω(output.TestCases[0].Name).Should(Equal("A B C")) - Ω(output.TestCases[0].Skipped).ShouldNot(BeNil()) - }) - }) - } -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/reporters_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/reporters_suite_test.go deleted file mode 100644 index cec5a4d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/reporters_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package reporters_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestReporters(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Reporters Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/teamcity_reporter_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/teamcity_reporter_test.go deleted file mode 100644 index de87732..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/teamcity_reporter_test.go +++ /dev/null @@ -1,213 +0,0 @@ -package reporters_test - -import ( - "bytes" - "fmt" - . "github.com/onsi/ginkgo" - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/internal/codelocation" - "github.com/onsi/ginkgo/reporters" - "github.com/onsi/ginkgo/types" - . "github.com/onsi/gomega" - "time" -) - -var _ = Describe("TeamCity Reporter", func() { - var ( - buffer bytes.Buffer - reporter Reporter - ) - - BeforeEach(func() { - buffer.Truncate(0) - reporter = reporters.NewTeamCityReporter(&buffer) - reporter.SpecSuiteWillBegin(config.GinkgoConfigType{}, &types.SuiteSummary{ - SuiteDescription: "Foo's test suite", - NumberOfSpecsThatWillBeRun: 1, - }) - }) - - Describe("a passing test", func() { - BeforeEach(func() { - beforeSuite := &types.SetupSummary{ - State: types.SpecStatePassed, - } - reporter.BeforeSuiteDidRun(beforeSuite) - - afterSuite := &types.SetupSummary{ - State: types.SpecStatePassed, - } - reporter.AfterSuiteDidRun(afterSuite) - - spec := &types.SpecSummary{ - ComponentTexts: []string{"[Top Level]", "A", "B", "C"}, - State: types.SpecStatePassed, - RunTime: 5 * time.Second, - } - reporter.SpecWillRun(spec) - reporter.SpecDidComplete(spec) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 0, - RunTime: 10 * time.Second, - }) - }) - - It("should record the test as passing", func() { - actual := buffer.String() - expected := - "##teamcity[testSuiteStarted name='Foo|'s test suite']" + - "##teamcity[testStarted name='A B C']" + - "##teamcity[testFinished name='A B C' duration='5000']" + - "##teamcity[testSuiteFinished name='Foo|'s test suite']" - Ω(actual).Should(Equal(expected)) - }) - }) - - Describe("when the BeforeSuite fails", func() { - var beforeSuite *types.SetupSummary - - BeforeEach(func() { - beforeSuite = &types.SetupSummary{ - State: types.SpecStateFailed, - RunTime: 3 * time.Second, - Failure: types.SpecFailure{ - Message: "failed to setup\n", - ComponentCodeLocation: codelocation.New(0), - }, - } - reporter.BeforeSuiteDidRun(beforeSuite) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 1, - RunTime: 10 * time.Second, - }) - }) - - It("should record the test as having failed", func() { - actual := buffer.String() - expected := fmt.Sprintf( - "##teamcity[testSuiteStarted name='Foo|'s test suite']"+ - "##teamcity[testStarted name='BeforeSuite']"+ - "##teamcity[testFailed name='BeforeSuite' message='%s' details='failed to setup|n']"+ - "##teamcity[testFinished name='BeforeSuite' duration='3000']"+ - "##teamcity[testSuiteFinished name='Foo|'s test suite']", beforeSuite.Failure.ComponentCodeLocation.String(), - ) - Ω(actual).Should(Equal(expected)) - }) - }) - - Describe("when the AfterSuite fails", func() { - var afterSuite *types.SetupSummary - - BeforeEach(func() { - afterSuite = &types.SetupSummary{ - State: types.SpecStateFailed, - RunTime: 3 * time.Second, - Failure: types.SpecFailure{ - Message: "failed to setup\n", - ComponentCodeLocation: codelocation.New(0), - }, - } - reporter.AfterSuiteDidRun(afterSuite) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 1, - RunTime: 10 * time.Second, - }) - }) - - It("should record the test as having failed", func() { - actual := buffer.String() - expected := fmt.Sprintf( - "##teamcity[testSuiteStarted name='Foo|'s test suite']"+ - "##teamcity[testStarted name='AfterSuite']"+ - "##teamcity[testFailed name='AfterSuite' message='%s' details='failed to setup|n']"+ - "##teamcity[testFinished name='AfterSuite' duration='3000']"+ - "##teamcity[testSuiteFinished name='Foo|'s test suite']", afterSuite.Failure.ComponentCodeLocation.String(), - ) - Ω(actual).Should(Equal(expected)) - }) - }) - specStateCases := []struct { - state types.SpecState - message string - }{ - {types.SpecStateFailed, "Failure"}, - {types.SpecStateTimedOut, "Timeout"}, - {types.SpecStatePanicked, "Panic"}, - } - - for _, specStateCase := range specStateCases { - specStateCase := specStateCase - Describe("a failing test", func() { - var spec *types.SpecSummary - BeforeEach(func() { - spec = &types.SpecSummary{ - ComponentTexts: []string{"[Top Level]", "A", "B", "C"}, - State: specStateCase.state, - RunTime: 5 * time.Second, - Failure: types.SpecFailure{ - ComponentCodeLocation: codelocation.New(0), - Message: "I failed", - }, - } - reporter.SpecWillRun(spec) - reporter.SpecDidComplete(spec) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 1, - RunTime: 10 * time.Second, - }) - }) - - It("should record test as failing", func() { - actual := buffer.String() - expected := - fmt.Sprintf("##teamcity[testSuiteStarted name='Foo|'s test suite']"+ - "##teamcity[testStarted name='A B C']"+ - "##teamcity[testFailed name='A B C' message='%s' details='I failed']"+ - "##teamcity[testFinished name='A B C' duration='5000']"+ - "##teamcity[testSuiteFinished name='Foo|'s test suite']", spec.Failure.ComponentCodeLocation.String()) - Ω(actual).Should(Equal(expected)) - }) - }) - } - - for _, specStateCase := range []types.SpecState{types.SpecStatePending, types.SpecStateSkipped} { - specStateCase := specStateCase - Describe("a skipped test", func() { - var spec *types.SpecSummary - BeforeEach(func() { - spec = &types.SpecSummary{ - ComponentTexts: []string{"[Top Level]", "A", "B", "C"}, - State: specStateCase, - RunTime: 5 * time.Second, - } - reporter.SpecWillRun(spec) - reporter.SpecDidComplete(spec) - - reporter.SpecSuiteDidEnd(&types.SuiteSummary{ - NumberOfSpecsThatWillBeRun: 1, - NumberOfFailedSpecs: 0, - RunTime: 10 * time.Second, - }) - }) - - It("should record test as ignored", func() { - actual := buffer.String() - expected := - "##teamcity[testSuiteStarted name='Foo|'s test suite']" + - "##teamcity[testStarted name='A B C']" + - "##teamcity[testIgnored name='A B C']" + - "##teamcity[testFinished name='A B C' duration='5000']" + - "##teamcity[testSuiteFinished name='Foo|'s test suite']" - Ω(actual).Should(Equal(expected)) - }) - }) - } -}) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types_suite_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types_suite_test.go deleted file mode 100644 index b026169..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package types_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestTypes(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Types Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types_test.go b/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types_test.go deleted file mode 100644 index 124b216..0000000 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package types_test - -import ( - . "github.com/onsi/ginkgo/types" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var specStates = []SpecState{ - SpecStatePassed, - SpecStateTimedOut, - SpecStatePanicked, - SpecStateFailed, - SpecStatePending, - SpecStateSkipped, -} - -func verifySpecSummary(caller func(SpecSummary) bool, trueStates ...SpecState) { - summary := SpecSummary{} - trueStateLookup := map[SpecState]bool{} - for _, state := range trueStates { - trueStateLookup[state] = true - summary.State = state - Ω(caller(summary)).Should(BeTrue()) - } - - for _, state := range specStates { - if trueStateLookup[state] { - continue - } - summary.State = state - Ω(caller(summary)).Should(BeFalse()) - } -} - -var _ = Describe("Types", func() { - Describe("SpecSummary", func() { - It("knows when it is in a failure-like state", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.HasFailureState() - }, SpecStateTimedOut, SpecStatePanicked, SpecStateFailed) - }) - - It("knows when it passed", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.Passed() - }, SpecStatePassed) - }) - - It("knows when it has failed", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.Failed() - }, SpecStateFailed) - }) - - It("knows when it has panicked", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.Panicked() - }, SpecStatePanicked) - }) - - It("knows when it has timed out", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.TimedOut() - }, SpecStateTimedOut) - }) - - It("knows when it is pending", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.Pending() - }, SpecStatePending) - }) - - It("knows when it is skipped", func() { - verifySpecSummary(func(summary SpecSummary) bool { - return summary.Skipped() - }, SpecStateSkipped) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/.gitignore b/Godeps/_workspace/src/github.com/onsi/gomega/.gitignore deleted file mode 100644 index 5514532..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.DS_Store -*.test -. diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/.travis.yml b/Godeps/_workspace/src/github.com/onsi/gomega/.travis.yml deleted file mode 100644 index 159b9e6..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: go -go: - - 1.4 - -install: - - go get -v ./... - - go get github.com/onsi/ginkgo - - go install github.com/onsi/ginkgo/ginkgo - -script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --failOnPending --randomizeSuites --race diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/CHANGELOG.md b/Godeps/_workspace/src/github.com/onsi/gomega/CHANGELOG.md deleted file mode 100644 index 752f52d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/CHANGELOG.md +++ /dev/null @@ -1,68 +0,0 @@ -## HEAD - -Improvements: - -- Added `BeSent` which attempts to send a value down a channel and fails if the attempt blocks. Can be paired with `Eventually` to safely send a value down a channel with a timeout. -- `Ω`, `Expect`, `Eventually`, and `Consistently` now immediately `panic` if there is no registered fail handler. This is always a mistake that can hide failing tests. -- `Receive()` no longer errors when passed a closed channel, it's perfectly fine to attempt to read from a closed channel so Ω(c).Should(Receive()) always fails and Ω(c).ShoudlNot(Receive()) always passes with a closed channel. -- Added `HavePrefix` and `HaveSuffix` matchers. -- `ghttp` can now handle concurrent requests. -- Added `Succeed` which allows one to write `Ω(MyFunction()).Should(Succeed())`. -- Improved `ghttp`'s behavior around failing assertions and panics: - - If a registered handler makes a failing assertion `ghttp` will return `500`. - - If a registered handler panics, `ghttp` will return `500` *and* fail the test. This is new behavior that may cause existing code to break. This code is almost certainly incorrect and creating a false positive. -- `ghttp` servers can take an `io.Writer`. `ghttp` will write a line to the writer when each request arrives. - -Bug Fixes: -- gexec: `session.Wait` now uses `EventuallyWithOffset` to get the right line number in the failure. -- `ContainElement` no longer bails if a passed-in matcher errors. - -## 1.0 (8/2/2014) - -No changes. Dropping "beta" from the version number. - -## 1.0.0-beta (7/8/2014) -Breaking Changes: - -- Changed OmegaMatcher interface. Instead of having `Match` return failure messages, two new methods `FailureMessage` and `NegatedFailureMessage` are called instead. -- Moved and renamed OmegaFailHandler to types.GomegaFailHandler and OmegaMatcher to types.GomegaMatcher. Any references to OmegaMatcher in any custom matchers will need to be changed to point to types.GomegaMatcher - -New Test-Support Features: - -- `ghttp`: supports testing http clients - - Provides a flexible fake http server - - Provides a collection of chainable http handlers that perform assertions. -- `gbytes`: supports making ordered assertions against streams of data - - Provides a `gbytes.Buffer` - - Provides a `Say` matcher to perform ordered assertions against output data -- `gexec`: supports testing external processes - - Provides support for building Go binaries - - Wraps and starts `exec.Cmd` commands - - Makes it easy to assert against stdout and stderr - - Makes it easy to send signals and wait for processes to exit - - Provides an `Exit` matcher to assert against exit code. - -DSL Changes: - -- `Eventually` and `Consistently` can accept `time.Duration` interval and polling inputs. -- The default timeouts for `Eventually` and `Consistently` are now configurable. - -New Matchers: - -- `ConsistOf`: order-independent assertion against the elements of an array/slice or keys of a map. -- `BeTemporally`: like `BeNumerically` but for `time.Time` -- `HaveKeyWithValue`: asserts a map has a given key with the given value. - -Updated Matchers: - -- `Receive` matcher can take a matcher as an argument and passes only if the channel under test receives an objet that satisfies the passed-in matcher. -- Matchers that implement `MatchMayChangeInTheFuture(actual interface{}) bool` can inform `Eventually` and/or `Consistently` when a match has no chance of changing status in the future. For example, `Receive` returns `false` when a channel is closed. - -Misc: - -- Start using semantic versioning -- Start maintaining changelog - -Major refactor: - -- Pull out Gomega's internal to `internal` diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/format/format_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/format/format_suite_test.go deleted file mode 100644 index 8e65a95..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/format/format_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package format_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFormat(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Format Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/format/format_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/format/format_test.go deleted file mode 100644 index fd926f5..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/format/format_test.go +++ /dev/null @@ -1,449 +0,0 @@ -package format_test - -import ( - "fmt" - "strings" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/format" - "github.com/onsi/gomega/types" -) - -//recursive struct - -type StringAlias string -type ByteAlias []byte -type IntAlias int - -type AStruct struct { - Exported string -} - -type SimpleStruct struct { - Name string - Enumeration int - Veritas bool - Data []byte - secret uint32 -} - -type ComplexStruct struct { - Strings []string - SimpleThings []*SimpleStruct - DataMaps map[int]ByteAlias -} - -type SecretiveStruct struct { - boolValue bool - intValue int - uintValue uint - uintptrValue uintptr - floatValue float32 - complexValue complex64 - chanValue chan bool - funcValue func() - pointerValue *int - sliceValue []string - byteSliceValue []byte - stringValue string - arrValue [3]int - byteArrValue [3]byte - mapValue map[string]int - structValue AStruct - interfaceValue interface{} -} - -type GoStringer struct { -} - -func (g GoStringer) GoString() string { - return "go-string" -} - -func (g GoStringer) String() string { - return "string" -} - -type Stringer struct { -} - -func (g Stringer) String() string { - return "string" -} - -var _ = Describe("Format", func() { - match := func(typeRepresentation string, valueRepresentation string, args ...interface{}) types.GomegaMatcher { - if len(args) > 0 { - valueRepresentation = fmt.Sprintf(valueRepresentation, args...) - } - return Equal(fmt.Sprintf("%s<%s>: %s", Indent, typeRepresentation, valueRepresentation)) - } - - matchRegexp := func(typeRepresentation string, valueRepresentation string, args ...interface{}) types.GomegaMatcher { - if len(args) > 0 { - valueRepresentation = fmt.Sprintf(valueRepresentation, args...) - } - return MatchRegexp(fmt.Sprintf("%s<%s>: %s", Indent, typeRepresentation, valueRepresentation)) - } - - hashMatchingRegexp := func(entries ...string) string { - entriesSwitch := "(" + strings.Join(entries, "|") + ")" - arr := make([]string, len(entries)) - for i := range arr { - arr[i] = entriesSwitch - } - return "{" + strings.Join(arr, ", ") + "}" - } - - Describe("Message", func() { - Context("with only an actual value", func() { - It("should print out an indented formatted representation of the value and the message", func() { - Ω(Message(3, "to be three.")).Should(Equal("Expected\n : 3\nto be three.")) - }) - }) - - Context("with an actual and an expected value", func() { - It("should print out an indented formatted representatino of both values, and the message", func() { - Ω(Message(3, "to equal", 4)).Should(Equal("Expected\n : 3\nto equal\n : 4")) - }) - }) - }) - - Describe("IndentString", func() { - It("should indent the string", func() { - Ω(IndentString("foo\n bar\nbaz", 2)).Should(Equal(" foo\n bar\n baz")) - }) - }) - - Describe("Object", func() { - Describe("formatting boolean values", func() { - It("should give the type and format values correctly", func() { - Ω(Object(true, 1)).Should(match("bool", "true")) - Ω(Object(false, 1)).Should(match("bool", "false")) - }) - }) - - Describe("formatting numbers", func() { - It("should give the type and format values correctly", func() { - Ω(Object(int(3), 1)).Should(match("int", "3")) - Ω(Object(int8(3), 1)).Should(match("int8", "3")) - Ω(Object(int16(3), 1)).Should(match("int16", "3")) - Ω(Object(int32(3), 1)).Should(match("int32", "3")) - Ω(Object(int64(3), 1)).Should(match("int64", "3")) - - Ω(Object(uint(3), 1)).Should(match("uint", "3")) - Ω(Object(uint8(3), 1)).Should(match("uint8", "3")) - Ω(Object(uint16(3), 1)).Should(match("uint16", "3")) - Ω(Object(uint32(3), 1)).Should(match("uint32", "3")) - Ω(Object(uint64(3), 1)).Should(match("uint64", "3")) - }) - - It("should handle uintptr differently", func() { - Ω(Object(uintptr(3), 1)).Should(match("uintptr", "0x3")) - }) - }) - - Describe("formatting channels", func() { - It("should give the type and format values correctly", func() { - c := make(chan<- bool, 3) - c <- true - c <- false - Ω(Object(c, 1)).Should(match("chan<- bool | len:2, cap:3", "%v", c)) - }) - }) - - Describe("formatting strings", func() { - It("should give the type and format values correctly", func() { - s := "a\nb\nc" - Ω(Object(s, 1)).Should(match("string", `a - b - c`)) - }) - }) - - Describe("formatting []byte slices", func() { - It("should present them as strings", func() { - b := []byte("a\nb\nc") - Ω(Object(b, 1)).Should(matchRegexp(`\[\]uint8 \| len:5, cap:\d+`, `a - b - c`)) - }) - }) - - Describe("formatting functions", func() { - It("should give the type and format values correctly", func() { - f := func(a string, b []int) ([]byte, error) { - return []byte("abc"), nil - } - Ω(Object(f, 1)).Should(match("func(string, []int) ([]uint8, error)", "%v", f)) - }) - }) - - Describe("formatting pointers", func() { - It("should give the type and dereference the value to format it correctly", func() { - a := 3 - Ω(Object(&a, 1)).Should(match(fmt.Sprintf("*int | %p", &a), "3")) - }) - - Context("when there are pointers to pointers...", func() { - It("should recursively deference the pointer until it gets to a value", func() { - a := 3 - var b *int - var c **int - var d ***int - b = &a - c = &b - d = &c - - Ω(Object(d, 1)).Should(match(fmt.Sprintf("***int | %p", d), "3")) - }) - }) - - Context("when the pointer points to nil", func() { - It("should say nil and not explode", func() { - var a *AStruct - Ω(Object(a, 1)).Should(match("*format_test.AStruct | 0x0", "nil")) - }) - }) - }) - - Describe("formatting arrays", func() { - It("should give the type and format values correctly", func() { - w := [3]string{"Jed Bartlet", "Toby Ziegler", "CJ Cregg"} - Ω(Object(w, 1)).Should(match("[3]string", `["Jed Bartlet", "Toby Ziegler", "CJ Cregg"]`)) - }) - - Context("with byte arrays", func() { - It("should give the type and format values correctly", func() { - w := [3]byte{17, 28, 19} - Ω(Object(w, 1)).Should(match("[3]uint8", `[17, 28, 19]`)) - }) - }) - }) - - Describe("formatting slices", func() { - It("should include the length and capacity in the type information", func() { - s := make([]bool, 3, 4) - Ω(Object(s, 1)).Should(match("[]bool | len:3, cap:4", "[false, false, false]")) - }) - - Context("when the slice contains long entries", func() { - It("should format the entries with newlines", func() { - w := []string{"Josiah Edward Bartlet", "Toby Ziegler", "CJ Cregg"} - expected := `[ - "Josiah Edward Bartlet", - "Toby Ziegler", - "CJ Cregg", - ]` - Ω(Object(w, 1)).Should(match("[]string | len:3, cap:3", expected)) - }) - }) - }) - - Describe("formatting maps", func() { - It("should include the length in the type information", func() { - m := make(map[int]bool, 5) - m[3] = true - m[4] = false - Ω(Object(m, 1)).Should(matchRegexp(`map\[int\]bool \| len:2`, hashMatchingRegexp("3: true", "4: false"))) - }) - - Context("when the slice contains long entries", func() { - It("should format the entries with newlines", func() { - m := map[string][]byte{} - m["Josiah Edward Bartlet"] = []byte("Martin Sheen") - m["Toby Ziegler"] = []byte("Richard Schiff") - m["CJ Cregg"] = []byte("Allison Janney") - expected := `{ - ("Josiah Edward Bartlet": "Martin Sheen"|"Toby Ziegler": "Richard Schiff"|"CJ Cregg": "Allison Janney"), - ("Josiah Edward Bartlet": "Martin Sheen"|"Toby Ziegler": "Richard Schiff"|"CJ Cregg": "Allison Janney"), - ("Josiah Edward Bartlet": "Martin Sheen"|"Toby Ziegler": "Richard Schiff"|"CJ Cregg": "Allison Janney"), - }` - Ω(Object(m, 1)).Should(matchRegexp(`map\[string\]\[\]uint8 \| len:3`, expected)) - }) - }) - }) - - Describe("formatting structs", func() { - It("should include the struct name and the field names", func() { - s := SimpleStruct{ - Name: "Oswald", - Enumeration: 17, - Veritas: true, - Data: []byte("datum"), - secret: 1983, - } - - Ω(Object(s, 1)).Should(match("format_test.SimpleStruct", `{Name: "Oswald", Enumeration: 17, Veritas: true, Data: "datum", secret: 1983}`)) - }) - - Context("when the struct contains long entries", func() { - It("should format the entries with new lines", func() { - s := &SimpleStruct{ - Name: "Mithrandir Gandalf Greyhame", - Enumeration: 2021, - Veritas: true, - Data: []byte("wizard"), - secret: 3, - } - - Ω(Object(s, 1)).Should(match(fmt.Sprintf("*format_test.SimpleStruct | %p", s), `{ - Name: "Mithrandir Gandalf Greyhame", - Enumeration: 2021, - Veritas: true, - Data: "wizard", - secret: 3, - }`)) - }) - }) - }) - - Describe("formatting nil values", func() { - It("should print out nil", func() { - Ω(Object(nil, 1)).Should(match("nil", "nil")) - var typedNil *AStruct - Ω(Object(typedNil, 1)).Should(match("*format_test.AStruct | 0x0", "nil")) - var c chan<- bool - Ω(Object(c, 1)).Should(match("chan<- bool | len:0, cap:0", "nil")) - var s []string - Ω(Object(s, 1)).Should(match("[]string | len:0, cap:0", "nil")) - var m map[string]bool - Ω(Object(m, 1)).Should(match("map[string]bool | len:0", "nil")) - }) - }) - - Describe("formatting aliased types", func() { - It("should print out the correct alias type", func() { - Ω(Object(StringAlias("alias"), 1)).Should(match("format_test.StringAlias", `alias`)) - Ω(Object(ByteAlias("alias"), 1)).Should(matchRegexp(`format_test\.ByteAlias \| len:5, cap:\d+`, `alias`)) - Ω(Object(IntAlias(3), 1)).Should(match("format_test.IntAlias", "3")) - }) - }) - - Describe("handling nested things", func() { - It("should produce a correctly nested representation", func() { - s := ComplexStruct{ - Strings: []string{"lots", "of", "short", "strings"}, - SimpleThings: []*SimpleStruct{ - {"short", 7, true, []byte("succinct"), 17}, - {"something longer", 427, true, []byte("designed to wrap around nicely"), 30}, - }, - DataMaps: map[int]ByteAlias{ - 17: ByteAlias("some substantially longer chunks of data"), - 1138: ByteAlias("that should make things wrap"), - }, - } - expected := `{ - Strings: \["lots", "of", "short", "strings"\], - SimpleThings: \[ - {Name: "short", Enumeration: 7, Veritas: true, Data: "succinct", secret: 17}, - { - Name: "something longer", - Enumeration: 427, - Veritas: true, - Data: "designed to wrap around nicely", - secret: 30, - }, - \], - DataMaps: { - (17: "some substantially longer chunks of data"|1138: "that should make things wrap"), - (17: "some substantially longer chunks of data"|1138: "that should make things wrap"), - }, - }` - Ω(Object(s, 1)).Should(matchRegexp(`format_test\.ComplexStruct`, expected)) - }) - }) - }) - - Describe("Handling unexported fields in structs", func() { - It("should handle all the various types correctly", func() { - a := int(5) - s := SecretiveStruct{ - boolValue: true, - intValue: 3, - uintValue: 4, - uintptrValue: 5, - floatValue: 6.0, - complexValue: complex(5.0, 3.0), - chanValue: make(chan bool, 2), - funcValue: func() {}, - pointerValue: &a, - sliceValue: []string{"string", "slice"}, - byteSliceValue: []byte("bytes"), - stringValue: "a string", - arrValue: [3]int{11, 12, 13}, - byteArrValue: [3]byte{17, 20, 32}, - mapValue: map[string]int{"a key": 20, "b key": 30}, - structValue: AStruct{"exported"}, - interfaceValue: map[string]int{"a key": 17}, - } - - expected := fmt.Sprintf(`{ - boolValue: true, - intValue: 3, - uintValue: 4, - uintptrValue: 0x5, - floatValue: 6, - complexValue: \(5\+3i\), - chanValue: %p, - funcValue: %p, - pointerValue: 5, - sliceValue: \["string", "slice"\], - byteSliceValue: "bytes", - stringValue: "a string", - arrValue: \[11, 12, 13\], - byteArrValue: \[17, 20, 32\], - mapValue: %s, - structValue: {Exported: "exported"}, - interfaceValue: {"a key": 17}, - }`, s.chanValue, s.funcValue, hashMatchingRegexp(`"a key": 20`, `"b key": 30`)) - - Ω(Object(s, 1)).Should(matchRegexp(`format_test\.SecretiveStruct`, expected)) - }) - }) - - Describe("Handling interfaces", func() { - It("should unpack the interface", func() { - outerHash := map[string]interface{}{} - innerHash := map[string]int{} - - innerHash["inner"] = 3 - outerHash["integer"] = 2 - outerHash["map"] = innerHash - - expected := hashMatchingRegexp(`"integer": 2`, `"map": {"inner": 3}`) - Ω(Object(outerHash, 1)).Should(matchRegexp(`map\[string\]interface {} \| len:2`, expected)) - }) - }) - - Describe("Handling recursive things", func() { - It("should not go crazy...", func() { - m := map[string]interface{}{} - m["integer"] = 2 - m["map"] = m - Ω(Object(m, 1)).Should(ContainSubstring("...")) - }) - }) - - Describe("When instructed to use the Stringer representation", func() { - BeforeEach(func() { - UseStringerRepresentation = true - }) - - AfterEach(func() { - UseStringerRepresentation = false - }) - - Context("when passed a GoStringer", func() { - It("should use what GoString() returns", func() { - Ω(Object(GoStringer{}, 1)).Should(ContainSubstring(": go-string")) - }) - }) - - Context("when passed a stringer", func() { - It("should use what String() returns", func() { - Ω(Object(Stringer{}, 1)).Should(ContainSubstring(": string")) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/buffer.go b/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/buffer.go deleted file mode 100644 index 8775b86..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/buffer.go +++ /dev/null @@ -1,229 +0,0 @@ -/* -Package gbytes provides a buffer that supports incrementally detecting input. - -You use gbytes.Buffer with the gbytes.Say matcher. When Say finds a match, it fastforwards the buffer's read cursor to the end of that match. - -Subsequent matches against the buffer will only operate against data that appears *after* the read cursor. - -The read cursor is an opaque implementation detail that you cannot access. You should use the Say matcher to sift through the buffer. You can always -access the entire buffer's contents with Contents(). - -*/ -package gbytes - -import ( - "errors" - "fmt" - "io" - "regexp" - "sync" - "time" -) - -/* -gbytes.Buffer implements an io.Writer and can be used with the gbytes.Say matcher. - -You should only use a gbytes.Buffer in test code. It stores all writes in an in-memory buffer - behavior that is inappropriate for production code! -*/ -type Buffer struct { - contents []byte - readCursor uint64 - lock *sync.Mutex - detectCloser chan interface{} - closed bool -} - -/* -NewBuffer returns a new gbytes.Buffer -*/ -func NewBuffer() *Buffer { - return &Buffer{ - lock: &sync.Mutex{}, - } -} - -/* -BufferWithBytes returns a new gbytes.Buffer seeded with the passed in bytes -*/ -func BufferWithBytes(bytes []byte) *Buffer { - return &Buffer{ - lock: &sync.Mutex{}, - contents: bytes, - } -} - -/* -Write implements the io.Writer interface -*/ -func (b *Buffer) Write(p []byte) (n int, err error) { - b.lock.Lock() - defer b.lock.Unlock() - - if b.closed { - return 0, errors.New("attempt to write to closed buffer") - } - - b.contents = append(b.contents, p...) - return len(p), nil -} - -/* -Read implements the io.Reader interface. It advances the -cursor as it reads. - -Returns an error if called after Close. -*/ -func (b *Buffer) Read(d []byte) (int, error) { - b.lock.Lock() - defer b.lock.Unlock() - - if b.closed { - return 0, errors.New("attempt to read from closed buffer") - } - - if uint64(len(b.contents)) <= b.readCursor { - return 0, io.EOF - } - - n := copy(d, b.contents[b.readCursor:]) - b.readCursor += uint64(n) - - return n, nil -} - -/* -Close signifies that the buffer will no longer be written to -*/ -func (b *Buffer) Close() error { - b.lock.Lock() - defer b.lock.Unlock() - - b.closed = true - - return nil -} - -/* -Closed returns true if the buffer has been closed -*/ -func (b *Buffer) Closed() bool { - b.lock.Lock() - defer b.lock.Unlock() - - return b.closed -} - -/* -Contents returns all data ever written to the buffer. -*/ -func (b *Buffer) Contents() []byte { - b.lock.Lock() - defer b.lock.Unlock() - - contents := make([]byte, len(b.contents)) - copy(contents, b.contents) - return contents -} - -/* -Detect takes a regular expression and returns a channel. - -The channel will receive true the first time data matching the regular expression is written to the buffer. -The channel is subsequently closed and the buffer's read-cursor is fast-forwarded to just after the matching region. - -You typically don't need to use Detect and should use the ghttp.Say matcher instead. Detect is useful, however, in cases where your code must -be branch and handle different outputs written to the buffer. - -For example, consider a buffer hooked up to the stdout of a client library. You may (or may not, depending on state outside of your control) need to authenticate the client library. - -You could do something like: - -select { -case <-buffer.Detect("You are not logged in"): - //log in -case <-buffer.Detect("Success"): - //carry on -case <-time.After(time.Second): - //welp -} -buffer.CancelDetects() - -You should always call CancelDetects after using Detect. This will close any channels that have not detected and clean up the goroutines that were spawned to support them. - -Finally, you can pass detect a format string followed by variadic arguments. This will construct the regexp using fmt.Sprintf. -*/ -func (b *Buffer) Detect(desired string, args ...interface{}) chan bool { - formattedRegexp := desired - if len(args) > 0 { - formattedRegexp = fmt.Sprintf(desired, args...) - } - re := regexp.MustCompile(formattedRegexp) - - b.lock.Lock() - defer b.lock.Unlock() - - if b.detectCloser == nil { - b.detectCloser = make(chan interface{}) - } - - closer := b.detectCloser - response := make(chan bool) - go func() { - ticker := time.NewTicker(10 * time.Millisecond) - defer ticker.Stop() - defer close(response) - for { - select { - case <-ticker.C: - b.lock.Lock() - data, cursor := b.contents[b.readCursor:], b.readCursor - loc := re.FindIndex(data) - b.lock.Unlock() - - if loc != nil { - response <- true - b.lock.Lock() - newCursorPosition := cursor + uint64(loc[1]) - if newCursorPosition >= b.readCursor { - b.readCursor = newCursorPosition - } - b.lock.Unlock() - return - } - case <-closer: - return - } - } - }() - - return response -} - -/* -CancelDetects cancels any pending detects and cleans up their goroutines. You should always call this when you're done with a set of Detect channels. -*/ -func (b *Buffer) CancelDetects() { - b.lock.Lock() - defer b.lock.Unlock() - - close(b.detectCloser) - b.detectCloser = nil -} - -func (b *Buffer) didSay(re *regexp.Regexp) (bool, []byte) { - b.lock.Lock() - defer b.lock.Unlock() - - unreadBytes := b.contents[b.readCursor:] - copyOfUnreadBytes := make([]byte, len(unreadBytes)) - copy(copyOfUnreadBytes, unreadBytes) - - loc := re.FindIndex(unreadBytes) - - if loc != nil { - b.readCursor += uint64(loc[1]) - return true, copyOfUnreadBytes - } else { - return false, copyOfUnreadBytes - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/buffer_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/buffer_test.go deleted file mode 100644 index b111138..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/buffer_test.go +++ /dev/null @@ -1,158 +0,0 @@ -package gbytes_test - -import ( - "io" - "time" - - . "github.com/onsi/gomega/gbytes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Buffer", func() { - var buffer *Buffer - - BeforeEach(func() { - buffer = NewBuffer() - }) - - Describe("dumping the entire contents of the buffer", func() { - It("should return everything that's been written", func() { - buffer.Write([]byte("abc")) - buffer.Write([]byte("def")) - Ω(buffer.Contents()).Should(Equal([]byte("abcdef"))) - - Ω(buffer).Should(Say("bcd")) - Ω(buffer.Contents()).Should(Equal([]byte("abcdef"))) - }) - }) - - Describe("creating a buffer with bytes", func() { - It("should create the buffer with the cursor set to the beginning", func() { - buffer := BufferWithBytes([]byte("abcdef")) - Ω(buffer.Contents()).Should(Equal([]byte("abcdef"))) - Ω(buffer).Should(Say("abc")) - Ω(buffer).ShouldNot(Say("abc")) - Ω(buffer).Should(Say("def")) - }) - }) - - Describe("reading from a buffer", func() { - It("should read the current contents of the buffer", func() { - buffer := BufferWithBytes([]byte("abcde")) - - dest := make([]byte, 3) - n, err := buffer.Read(dest) - Ω(err).ShouldNot(HaveOccurred()) - Ω(n).Should(Equal(3)) - Ω(string(dest)).Should(Equal("abc")) - - dest = make([]byte, 3) - n, err = buffer.Read(dest) - Ω(err).ShouldNot(HaveOccurred()) - Ω(n).Should(Equal(2)) - Ω(string(dest[:n])).Should(Equal("de")) - - n, err = buffer.Read(dest) - Ω(err).Should(Equal(io.EOF)) - Ω(n).Should(Equal(0)) - }) - - Context("after the buffer has been closed", func() { - It("returns an error", func() { - buffer := BufferWithBytes([]byte("abcde")) - - buffer.Close() - - dest := make([]byte, 3) - n, err := buffer.Read(dest) - Ω(err).Should(HaveOccurred()) - Ω(n).Should(Equal(0)) - }) - }) - }) - - Describe("detecting regular expressions", func() { - It("should fire the appropriate channel when the passed in pattern matches, then close it", func(done Done) { - go func() { - time.Sleep(10 * time.Millisecond) - buffer.Write([]byte("abcde")) - }() - - A := buffer.Detect("%s", "a.c") - B := buffer.Detect("def") - - var gotIt bool - select { - case gotIt = <-A: - case <-B: - Fail("should not have gotten here") - } - - Ω(gotIt).Should(BeTrue()) - Eventually(A).Should(BeClosed()) - - buffer.Write([]byte("f")) - Eventually(B).Should(Receive()) - Eventually(B).Should(BeClosed()) - - close(done) - }) - - It("should fast-forward the buffer upon detection", func(done Done) { - buffer.Write([]byte("abcde")) - <-buffer.Detect("abc") - Ω(buffer).ShouldNot(Say("abc")) - Ω(buffer).Should(Say("de")) - close(done) - }) - - It("should only fast-forward the buffer when the channel is read, and only if doing so would not rewind it", func(done Done) { - buffer.Write([]byte("abcde")) - A := buffer.Detect("abc") - time.Sleep(20 * time.Millisecond) //give the goroutine a chance to detect and write to the channel - Ω(buffer).Should(Say("abcd")) - <-A - Ω(buffer).ShouldNot(Say("d")) - Ω(buffer).Should(Say("e")) - Eventually(A).Should(BeClosed()) - close(done) - }) - - It("should be possible to cancel a detection", func(done Done) { - A := buffer.Detect("abc") - B := buffer.Detect("def") - buffer.CancelDetects() - buffer.Write([]byte("abcdef")) - Eventually(A).Should(BeClosed()) - Eventually(B).Should(BeClosed()) - - Ω(buffer).Should(Say("bcde")) - <-buffer.Detect("f") - close(done) - }) - }) - - Describe("closing the buffer", func() { - It("should error when further write attempts are made", func() { - _, err := buffer.Write([]byte("abc")) - Ω(err).ShouldNot(HaveOccurred()) - - buffer.Close() - - _, err = buffer.Write([]byte("def")) - Ω(err).Should(HaveOccurred()) - - Ω(buffer.Contents()).Should(Equal([]byte("abc"))) - }) - - It("should be closed", func() { - Ω(buffer.Closed()).Should(BeFalse()) - - buffer.Close() - - Ω(buffer.Closed()).Should(BeTrue()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go deleted file mode 100644 index 3a7dc06..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package gbytes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGbytes(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Gbytes Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/say_matcher.go b/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/say_matcher.go deleted file mode 100644 index ce5ebcb..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/say_matcher.go +++ /dev/null @@ -1,105 +0,0 @@ -package gbytes - -import ( - "fmt" - "regexp" - - "github.com/onsi/gomega/format" -) - -//Objects satisfying the BufferProvider can be used with the Say matcher. -type BufferProvider interface { - Buffer() *Buffer -} - -/* -Say is a Gomega matcher that operates on gbytes.Buffers: - - Ω(buffer).Should(Say("something")) - -will succeed if the unread portion of the buffer matches the regular expression "something". - -When Say succeeds, it fast forwards the gbytes.Buffer's read cursor to just after the succesful match. -Thus, subsequent calls to Say will only match against the unread portion of the buffer - -Say pairs very well with Eventually. To asser that a buffer eventually receives data matching "[123]-star" within 3 seconds you can: - - Eventually(buffer, 3).Should(Say("[123]-star")) - -Ditto with consistently. To assert that a buffer does not receive data matching "never-see-this" for 1 second you can: - - Consistently(buffer, 1).ShouldNot(Say("never-see-this")) - -In addition to bytes.Buffers, Say can operate on objects that implement the gbytes.BufferProvider interface. -In such cases, Say simply operates on the *gbytes.Buffer returned by Buffer() - -If the buffer is closed, the Say matcher will tell Eventually to abort. -*/ -func Say(expected string, args ...interface{}) *sayMatcher { - formattedRegexp := expected - if len(args) > 0 { - formattedRegexp = fmt.Sprintf(expected, args...) - } - return &sayMatcher{ - re: regexp.MustCompile(formattedRegexp), - } -} - -type sayMatcher struct { - re *regexp.Regexp - receivedSayings []byte -} - -func (m *sayMatcher) buffer(actual interface{}) (*Buffer, bool) { - var buffer *Buffer - - switch x := actual.(type) { - case *Buffer: - buffer = x - case BufferProvider: - buffer = x.Buffer() - default: - return nil, false - } - - return buffer, true -} - -func (m *sayMatcher) Match(actual interface{}) (success bool, err error) { - buffer, ok := m.buffer(actual) - if !ok { - return false, fmt.Errorf("Say must be passed a *gbytes.Buffer or BufferProvider. Got:\n%s", format.Object(actual, 1)) - } - - didSay, sayings := buffer.didSay(m.re) - m.receivedSayings = sayings - - return didSay, nil -} - -func (m *sayMatcher) FailureMessage(actual interface{}) (message string) { - return fmt.Sprintf( - "Got stuck at:\n%s\nWaiting for:\n%s", - format.IndentString(string(m.receivedSayings), 1), - format.IndentString(m.re.String(), 1), - ) -} - -func (m *sayMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return fmt.Sprintf( - "Saw:\n%s\nWhich matches the unexpected:\n%s", - format.IndentString(string(m.receivedSayings), 1), - format.IndentString(m.re.String(), 1), - ) -} - -func (m *sayMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { - switch x := actual.(type) { - case *Buffer: - return !x.Closed() - case BufferProvider: - return !x.Buffer().Closed() - default: - return true - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/say_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/say_matcher_test.go deleted file mode 100644 index d0ddf1f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gbytes/say_matcher_test.go +++ /dev/null @@ -1,163 +0,0 @@ -package gbytes_test - -import ( - "time" - . "github.com/onsi/gomega/gbytes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type speaker struct { - buffer *Buffer -} - -func (s *speaker) Buffer() *Buffer { - return s.buffer -} - -var _ = Describe("SayMatcher", func() { - var buffer *Buffer - - BeforeEach(func() { - buffer = NewBuffer() - buffer.Write([]byte("abc")) - }) - - Context("when actual is not a gexec Buffer, or a BufferProvider", func() { - It("should error", func() { - failures := InterceptGomegaFailures(func() { - Ω("foo").Should(Say("foo")) - }) - Ω(failures[0]).Should(ContainSubstring("*gbytes.Buffer")) - }) - }) - - Context("when a match is found", func() { - It("should succeed", func() { - Ω(buffer).Should(Say("abc")) - }) - - It("should support printf-like formatting", func() { - Ω(buffer).Should(Say("a%sc", "b")) - }) - - It("should use a regular expression", func() { - Ω(buffer).Should(Say("a.c")) - }) - - It("should fastforward the buffer", func() { - buffer.Write([]byte("def")) - Ω(buffer).Should(Say("abcd")) - Ω(buffer).Should(Say("ef")) - Ω(buffer).ShouldNot(Say("[a-z]")) - }) - }) - - Context("when no match is found", func() { - It("should not error", func() { - Ω(buffer).ShouldNot(Say("def")) - }) - - Context("when the buffer is closed", func() { - BeforeEach(func() { - buffer.Close() - }) - - It("should abort an eventually", func() { - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(buffer).Should(Say("def")) - }) - Eventually(buffer).ShouldNot(Say("def")) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - - t = time.Now() - Eventually(buffer).Should(Say("abc")) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - }) - - It("should abort a consistently", func() { - t := time.Now() - Consistently(buffer, 2.0).ShouldNot(Say("def")) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - }) - - It("should not error with a synchronous matcher", func() { - Ω(buffer).ShouldNot(Say("def")) - Ω(buffer).Should(Say("abc")) - }) - }) - }) - - Context("when a positive match fails", func() { - It("should report where it got stuck", func() { - Ω(buffer).Should(Say("abc")) - buffer.Write([]byte("def")) - failures := InterceptGomegaFailures(func() { - Ω(buffer).Should(Say("abc")) - }) - Ω(failures[0]).Should(ContainSubstring("Got stuck at:")) - Ω(failures[0]).Should(ContainSubstring("def")) - }) - }) - - Context("when a negative match fails", func() { - It("should report where it got stuck", func() { - failures := InterceptGomegaFailures(func() { - Ω(buffer).ShouldNot(Say("abc")) - }) - Ω(failures[0]).Should(ContainSubstring("Saw:")) - Ω(failures[0]).Should(ContainSubstring("Which matches the unexpected:")) - Ω(failures[0]).Should(ContainSubstring("abc")) - }) - }) - - Context("when a match is not found", func() { - It("should not fastforward the buffer", func() { - Ω(buffer).ShouldNot(Say("def")) - Ω(buffer).Should(Say("abc")) - }) - }) - - Context("a nice real-life example", func() { - It("should behave well", func() { - Ω(buffer).Should(Say("abc")) - go func() { - time.Sleep(10 * time.Millisecond) - buffer.Write([]byte("def")) - }() - Ω(buffer).ShouldNot(Say("def")) - Eventually(buffer).Should(Say("def")) - }) - }) - - Context("when actual is a BufferProvider", func() { - It("should use actual's buffer", func() { - s := &speaker{ - buffer: NewBuffer(), - } - - Ω(s).ShouldNot(Say("abc")) - - s.Buffer().Write([]byte("abc")) - Ω(s).Should(Say("abc")) - }) - - It("should abort an eventually", func() { - s := &speaker{ - buffer: NewBuffer(), - } - - s.buffer.Close() - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(s).Should(Say("def")) - }) - Ω(failures).Should(HaveLen(1)) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/build.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/build.go deleted file mode 100644 index 3e9bf9f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/build.go +++ /dev/null @@ -1,78 +0,0 @@ -package gexec - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "os/exec" - "path" - "path/filepath" - "runtime" -) - -var tmpDir string - -/* -Build uses go build to compile the package at packagePath. The resulting binary is saved off in a temporary directory. -A path pointing to this binary is returned. - -Build uses the $GOPATH set in your environment. It passes the variadic args on to `go build`. -*/ -func Build(packagePath string, args ...string) (compiledPath string, err error) { - return BuildIn(os.Getenv("GOPATH"), packagePath, args...) -} - -/* -BuildIn is identical to Build but allows you to specify a custom $GOPATH (the first argument). -*/ -func BuildIn(gopath string, packagePath string, args ...string) (compiledPath string, err error) { - tmpDir, err := temporaryDirectory() - if err != nil { - return "", err - } - - if len(gopath) == 0 { - return "", errors.New("$GOPATH not provided when building " + packagePath) - } - - executable := filepath.Join(tmpDir, path.Base(packagePath)) - if runtime.GOOS == "windows" { - executable = executable + ".exe" - } - - cmdArgs := append([]string{"build"}, args...) - cmdArgs = append(cmdArgs, "-o", executable, packagePath) - - build := exec.Command("go", cmdArgs...) - build.Env = append([]string{"GOPATH=" + gopath}, os.Environ()...) - - output, err := build.CombinedOutput() - if err != nil { - return "", fmt.Errorf("Failed to build %s:\n\nError:\n%s\n\nOutput:\n%s", packagePath, err, string(output)) - } - - return executable, nil -} - -/* -You should call CleanupBuildArtifacts before your test ends to clean up any temporary artifacts generated by -gexec. In Ginkgo this is typically done in an AfterSuite callback. -*/ -func CleanupBuildArtifacts() { - if tmpDir != "" { - os.RemoveAll(tmpDir) - } -} - -func temporaryDirectory() (string, error) { - var err error - if tmpDir == "" { - tmpDir, err = ioutil.TempDir("", "gexec_artifacts") - if err != nil { - return "", err - } - } - - return ioutil.TempDir(tmpDir, "g") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/exit_matcher.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/exit_matcher.go deleted file mode 100644 index e6f4329..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/exit_matcher.go +++ /dev/null @@ -1,88 +0,0 @@ -package gexec - -import ( - "fmt" - - "github.com/onsi/gomega/format" -) - -/* -The Exit matcher operates on a session: - - Ω(session).Should(Exit()) - -Exit passes if the session has already exited. - -If no status code is provided, then Exit will succeed if the session has exited regardless of exit code. -Otherwise, Exit will only succeed if the process has exited with the provided status code. - -Note that the process must have already exited. To wait for a process to exit, use Eventually: - - Eventually(session, 3).Should(Exit(0)) -*/ -func Exit(optionalExitCode ...int) *exitMatcher { - exitCode := -1 - if len(optionalExitCode) > 0 { - exitCode = optionalExitCode[0] - } - - return &exitMatcher{ - exitCode: exitCode, - } -} - -type exitMatcher struct { - exitCode int - didExit bool - actualExitCode int -} - -type Exiter interface { - ExitCode() int -} - -func (m *exitMatcher) Match(actual interface{}) (success bool, err error) { - exiter, ok := actual.(Exiter) - if !ok { - return false, fmt.Errorf("Exit must be passed a gexec.Exiter (Missing method ExitCode() int) Got:\n%s", format.Object(actual, 1)) - } - - m.actualExitCode = exiter.ExitCode() - - if m.actualExitCode == -1 { - return false, nil - } - - if m.exitCode == -1 { - return true, nil - } - return m.exitCode == m.actualExitCode, nil -} - -func (m *exitMatcher) FailureMessage(actual interface{}) (message string) { - if m.actualExitCode == -1 { - return "Expected process to exit. It did not." - } else { - return format.Message(m.actualExitCode, "to match exit code:", m.exitCode) - } -} - -func (m *exitMatcher) NegatedFailureMessage(actual interface{}) (message string) { - if m.actualExitCode == -1 { - return "you really shouldn't be able to see this!" - } else { - if m.exitCode == -1 { - return "Expected process not to exit. It did." - } else { - return format.Message(m.actualExitCode, "not to match exit code:", m.exitCode) - } - } -} - -func (m *exitMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { - session, ok := actual.(*Session) - if ok { - return session.ExitCode() == -1 - } - return true -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/exit_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/exit_matcher_test.go deleted file mode 100644 index 9f18e2d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/exit_matcher_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package gexec_test - -import ( - "os/exec" - "time" - . "github.com/onsi/gomega/gexec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type NeverExits struct{} - -func (e NeverExits) ExitCode() int { - return -1 -} - -var _ = Describe("ExitMatcher", func() { - var command *exec.Cmd - var session *Session - - BeforeEach(func() { - var err error - command = exec.Command(fireflyPath, "0") - session, err = Start(command, nil, nil) - Ω(err).ShouldNot(HaveOccurred()) - }) - - Describe("when passed something that is an Exiter", func() { - It("should act normally", func() { - failures := InterceptGomegaFailures(func() { - Ω(NeverExits{}).Should(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process to exit. It did not.")) - }) - }) - - Describe("when passed something that is not an Exiter", func() { - It("should error", func() { - failures := InterceptGomegaFailures(func() { - Ω("aardvark").Should(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Exit must be passed a gexec.Exiter")) - }) - }) - - Context("with no exit code", func() { - It("should say the right things when it fails", func() { - Ω(session).ShouldNot(Exit()) - - failures := InterceptGomegaFailures(func() { - Ω(session).Should(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process to exit. It did not.")) - - Eventually(session).Should(Exit()) - - Ω(session).Should(Exit()) - - failures = InterceptGomegaFailures(func() { - Ω(session).ShouldNot(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process not to exit. It did.")) - }) - }) - - Context("with an exit code", func() { - It("should say the right things when it fails", func() { - Ω(session).ShouldNot(Exit(0)) - Ω(session).ShouldNot(Exit(1)) - - failures := InterceptGomegaFailures(func() { - Ω(session).Should(Exit(0)) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process to exit. It did not.")) - - Eventually(session).Should(Exit(0)) - - Ω(session).Should(Exit(0)) - - failures = InterceptGomegaFailures(func() { - Ω(session).Should(Exit(1)) - }) - - Ω(failures[0]).Should(ContainSubstring("to match exit code:")) - - Ω(session).ShouldNot(Exit(1)) - - failures = InterceptGomegaFailures(func() { - Ω(session).ShouldNot(Exit(0)) - }) - - Ω(failures[0]).Should(ContainSubstring("not to match exit code:")) - }) - }) - - Describe("bailing out early", func() { - It("should bail out early once the process exits", func() { - t := time.Now() - - failures := InterceptGomegaFailures(func() { - Eventually(session).Should(Exit(1)) - }) - Ω(time.Since(t)).Should(BeNumerically("<=", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/gexec_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/gexec_suite_test.go deleted file mode 100644 index 87672aa..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/gexec_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package gexec_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" - - "testing" -) - -var fireflyPath string - -func TestGexec(t *testing.T) { - BeforeSuite(func() { - var err error - fireflyPath, err = gexec.Build("./_fixture/firefly") - Ω(err).ShouldNot(HaveOccurred()) - }) - - AfterSuite(func() { - gexec.CleanupBuildArtifacts() - }) - - RegisterFailHandler(Fail) - RunSpecs(t, "Gexec Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/prefixed_writer.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/prefixed_writer.go deleted file mode 100644 index 05e695a..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/prefixed_writer.go +++ /dev/null @@ -1,53 +0,0 @@ -package gexec - -import ( - "io" - "sync" -) - -/* -PrefixedWriter wraps an io.Writer, emiting the passed in prefix at the beginning of each new line. -This can be useful when running multiple gexec.Sessions concurrently - you can prefix the log output of each -session by passing in a PrefixedWriter: - -gexec.Start(cmd, NewPrefixedWriter("[my-cmd] ", GinkgoWriter), NewPrefixedWriter("[my-cmd] ", GinkgoWriter)) -*/ -type PrefixedWriter struct { - prefix []byte - writer io.Writer - lock *sync.Mutex - atStartOfLine bool -} - -func NewPrefixedWriter(prefix string, writer io.Writer) *PrefixedWriter { - return &PrefixedWriter{ - prefix: []byte(prefix), - writer: writer, - lock: &sync.Mutex{}, - atStartOfLine: true, - } -} - -func (w *PrefixedWriter) Write(b []byte) (int, error) { - w.lock.Lock() - defer w.lock.Unlock() - - toWrite := []byte{} - - for _, c := range b { - if w.atStartOfLine { - toWrite = append(toWrite, w.prefix...) - } - - toWrite = append(toWrite, c) - - w.atStartOfLine = c == '\n' - } - - _, err := w.writer.Write(toWrite) - if err != nil { - return 0, err - } - - return len(b), nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/prefixed_writer_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/prefixed_writer_test.go deleted file mode 100644 index 8657d0c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/prefixed_writer_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package gexec_test - -import ( - "bytes" - - . "github.com/onsi/gomega/gexec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("PrefixedWriter", func() { - var buffer *bytes.Buffer - var writer *PrefixedWriter - BeforeEach(func() { - buffer = &bytes.Buffer{} - writer = NewPrefixedWriter("[p]", buffer) - }) - - It("should emit the prefix on newlines", func() { - writer.Write([]byte("abc")) - writer.Write([]byte("def\n")) - writer.Write([]byte("hij\n")) - writer.Write([]byte("\n\n")) - writer.Write([]byte("klm\n\nnop")) - writer.Write([]byte("")) - writer.Write([]byte("qrs")) - writer.Write([]byte("\ntuv\nwx")) - writer.Write([]byte("yz\n\n")) - - Ω(buffer.String()).Should(Equal(`[p]abcdef -[p]hij -[p] -[p] -[p]klm -[p] -[p]nopqrs -[p]tuv -[p]wxyz -[p] -`)) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/session.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/session.go deleted file mode 100644 index 46e7122..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/session.go +++ /dev/null @@ -1,214 +0,0 @@ -/* -Package gexec provides support for testing external processes. -*/ -package gexec - -import ( - "io" - "os" - "os/exec" - "reflect" - "sync" - "syscall" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" -) - -const INVALID_EXIT_CODE = 254 - -type Session struct { - //The wrapped command - Command *exec.Cmd - - //A *gbytes.Buffer connected to the command's stdout - Out *gbytes.Buffer - - //A *gbytes.Buffer connected to the command's stderr - Err *gbytes.Buffer - - //A channel that will close when the command exits - Exited <-chan struct{} - - lock *sync.Mutex - exitCode int -} - -/* -Start starts the passed-in *exec.Cmd command. It wraps the command in a *gexec.Session. - -The session pipes the command's stdout and stderr to two *gbytes.Buffers available as properties on the session: session.Out and session.Err. -These buffers can be used with the gbytes.Say matcher to match against unread output: - - Ω(session.Out).Should(gbytes.Say("foo-out")) - Ω(session.Err).Should(gbytes.Say("foo-err")) - -In addition, Session satisfies the gbytes.BufferProvider interface and provides the stdout *gbytes.Buffer. This allows you to replace the first line, above, with: - - Ω(session).Should(gbytes.Say("foo-out")) - -When outWriter and/or errWriter are non-nil, the session will pipe stdout and/or stderr output both into the session *gybtes.Buffers and to the passed-in outWriter/errWriter. -This is useful for capturing the process's output or logging it to screen. In particular, when using Ginkgo it can be convenient to direct output to the GinkgoWriter: - - session, err := Start(command, GinkgoWriter, GinkgoWriter) - -This will log output when running tests in verbose mode, but - otherwise - will only log output when a test fails. - -The session wrapper is responsible for waiting on the *exec.Cmd command. You *should not* call command.Wait() yourself. -Instead, to assert that the command has exited you can use the gexec.Exit matcher: - - Ω(session).Should(gexec.Exit()) - -When the session exits it closes the stdout and stderr gbytes buffers. This will short circuit any -Eventuallys waiting fo the buffers to Say something. -*/ -func Start(command *exec.Cmd, outWriter io.Writer, errWriter io.Writer) (*Session, error) { - exited := make(chan struct{}) - - session := &Session{ - Command: command, - Out: gbytes.NewBuffer(), - Err: gbytes.NewBuffer(), - Exited: exited, - lock: &sync.Mutex{}, - exitCode: -1, - } - - var commandOut, commandErr io.Writer - - commandOut, commandErr = session.Out, session.Err - - if outWriter != nil && !reflect.ValueOf(outWriter).IsNil() { - commandOut = io.MultiWriter(commandOut, outWriter) - } - - if errWriter != nil && !reflect.ValueOf(errWriter).IsNil() { - commandErr = io.MultiWriter(commandErr, errWriter) - } - - command.Stdout = commandOut - command.Stderr = commandErr - - err := command.Start() - if err == nil { - go session.monitorForExit(exited) - } - - return session, err -} - -/* -Buffer implements the gbytes.BufferProvider interface and returns s.Out -This allows you to make gbytes.Say matcher assertions against stdout without having to reference .Out: - - Eventually(session).Should(gbytes.Say("foo")) -*/ -func (s *Session) Buffer() *gbytes.Buffer { - return s.Out -} - -/* -ExitCode returns the wrapped command's exit code. If the command hasn't exited yet, ExitCode returns -1. - -To assert that the command has exited it is more convenient to use the Exit matcher: - - Eventually(s).Should(gexec.Exit()) - -When the process exits because it has received a particular signal, the exit code will be 128+signal-value -(See http://www.tldp.org/LDP/abs/html/exitcodes.html and http://man7.org/linux/man-pages/man7/signal.7.html) - -*/ -func (s *Session) ExitCode() int { - s.lock.Lock() - defer s.lock.Unlock() - return s.exitCode -} - -/* -Wait waits until the wrapped command exits. It can be passed an optional timeout. -If the command does not exit within the timeout, Wait will trigger a test failure. - -Wait returns the session, making it possible to chain: - - session.Wait().Out.Contents() - -will wait for the command to exit then return the entirety of Out's contents. - -Wait uses eventually under the hood and accepts the same timeout/polling intervals that eventually does. -*/ -func (s *Session) Wait(timeout ...interface{}) *Session { - EventuallyWithOffset(1, s, timeout...).Should(Exit()) - return s -} - -/* -Kill sends the running command a SIGKILL signal. It does not wait for the process to exit. - -If the command has already exited, Kill returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Kill() *Session { - if s.ExitCode() != -1 { - return s - } - s.Command.Process.Kill() - return s -} - -/* -Interrupt sends the running command a SIGINT signal. It does not wait for the process to exit. - -If the command has already exited, Interrupt returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Interrupt() *Session { - return s.Signal(syscall.SIGINT) -} - -/* -Terminate sends the running command a SIGTERM signal. It does not wait for the process to exit. - -If the command has already exited, Terminate returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Terminate() *Session { - return s.Signal(syscall.SIGTERM) -} - -/* -Terminate sends the running command the passed in signal. It does not wait for the process to exit. - -If the command has already exited, Signal returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Signal(signal os.Signal) *Session { - if s.ExitCode() != -1 { - return s - } - s.Command.Process.Signal(signal) - return s -} - -func (s *Session) monitorForExit(exited chan<- struct{}) { - err := s.Command.Wait() - s.lock.Lock() - s.Out.Close() - s.Err.Close() - status := s.Command.ProcessState.Sys().(syscall.WaitStatus) - if status.Signaled() { - s.exitCode = 128 + int(status.Signal()) - } else { - exitStatus := status.ExitStatus() - if exitStatus == -1 && err != nil { - s.exitCode = INVALID_EXIT_CODE - } - s.exitCode = exitStatus - } - s.lock.Unlock() - - close(exited) -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/session_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/gexec/session_test.go deleted file mode 100644 index 13cc3cd..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/gexec/session_test.go +++ /dev/null @@ -1,178 +0,0 @@ -package gexec_test - -import ( - "os/exec" - "syscall" - "time" - - . "github.com/onsi/gomega/gbytes" - . "github.com/onsi/gomega/gexec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Session", func() { - var command *exec.Cmd - var session *Session - - var outWriter, errWriter *Buffer - - BeforeEach(func() { - outWriter = nil - errWriter = nil - }) - - JustBeforeEach(func() { - command = exec.Command(fireflyPath) - var err error - session, err = Start(command, outWriter, errWriter) - Ω(err).ShouldNot(HaveOccurred()) - }) - - Context("running a command", func() { - It("should start the process", func() { - Ω(command.Process).ShouldNot(BeNil()) - }) - - It("should wrap the process's stdout and stderr with gbytes buffers", func(done Done) { - Eventually(session.Out).Should(Say("We've done the impossible, and that makes us mighty")) - Eventually(session.Err).Should(Say("Ah, curse your sudden but inevitable betrayal!")) - defer session.Out.CancelDetects() - - select { - case <-session.Out.Detect("Can we maybe vote on the whole murdering people issue"): - Eventually(session).Should(Exit(0)) - case <-session.Out.Detect("I swear by my pretty floral bonnet, I will end you."): - Eventually(session).Should(Exit(1)) - case <-session.Out.Detect("My work's illegal, but at least it's honest."): - Eventually(session).Should(Exit(2)) - } - - close(done) - }) - - It("should satisfy the gbytes.BufferProvider interface, passing Stdout", func() { - Eventually(session).Should(Say("We've done the impossible, and that makes us mighty")) - Eventually(session).Should(Exit()) - }) - }) - - Describe("providing the exit code", func() { - It("should provide the app's exit code", func() { - Ω(session.ExitCode()).Should(Equal(-1)) - - Eventually(session).Should(Exit()) - Ω(session.ExitCode()).Should(BeNumerically(">=", 0)) - Ω(session.ExitCode()).Should(BeNumerically("<", 3)) - }) - }) - - Describe("wait", func() { - It("should wait till the command exits", func() { - Ω(session.ExitCode()).Should(Equal(-1)) - Ω(session.Wait().ExitCode()).Should(BeNumerically(">=", 0)) - Ω(session.Wait().ExitCode()).Should(BeNumerically("<", 3)) - }) - }) - - Describe("exited", func() { - It("should close when the command exits", func() { - Eventually(session.Exited).Should(BeClosed()) - Ω(session.ExitCode()).ShouldNot(Equal(-1)) - }) - }) - - Describe("kill", func() { - It("should kill the command and wait for it to exit", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Kill() - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 9)) - }) - }) - - Describe("interrupt", func() { - It("should interrupt the command", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Interrupt() - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 2)) - }) - }) - - Describe("terminate", func() { - It("should terminate the command", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Terminate() - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 15)) - }) - }) - - Describe("signal", func() { - It("should send the signal to the command", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Signal(syscall.SIGABRT) - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 6)) - }) - }) - - Context("when the command exits", func() { - It("should close the buffers", func() { - Eventually(session).Should(Exit()) - - Ω(session.Out.Closed()).Should(BeTrue()) - Ω(session.Err.Closed()).Should(BeTrue()) - - Ω(session.Out).Should(Say("We've done the impossible, and that makes us mighty")) - }) - - var So = It - - So("this means that eventually should short circuit", func() { - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(session).Should(Say("blah blah blah blah blah")) - }) - Ω(time.Since(t)).Should(BeNumerically("<=", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when wrapping out and err", func() { - BeforeEach(func() { - outWriter = NewBuffer() - errWriter = NewBuffer() - }) - - It("should route to both the provided writers and the gbytes buffers", func() { - Eventually(session.Out).Should(Say("We've done the impossible, and that makes us mighty")) - Eventually(session.Err).Should(Say("Ah, curse your sudden but inevitable betrayal!")) - - Ω(outWriter.Contents()).Should(ContainSubstring("We've done the impossible, and that makes us mighty")) - Ω(errWriter.Contents()).Should(ContainSubstring("Ah, curse your sudden but inevitable betrayal!")) - - Eventually(session).Should(Exit()) - - Ω(outWriter.Contents()).Should(Equal(session.Out.Contents())) - Ω(errWriter.Contents()).Should(Equal(session.Err.Contents())) - }) - }) - - Describe("when the command fails to start", func() { - It("should return an error", func() { - _, err := Start(exec.Command("agklsjdfas"), nil, nil) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/handlers.go b/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/handlers.go deleted file mode 100644 index c3b56a4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/handlers.go +++ /dev/null @@ -1,226 +0,0 @@ -package ghttp - -import ( - "encoding/base64" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "net/url" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/types" -) - -//CombineHandler takes variadic list of handlers and produces one handler -//that calls each handler in order. -func CombineHandlers(handlers ...http.HandlerFunc) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - for _, handler := range handlers { - handler(w, req) - } - } -} - -//VerifyRequest returns a handler that verifies that a request uses the specified method to connect to the specified path -//You may also pass in an optional rawQuery string which is tested against the request's `req.URL.RawQuery` -// -//For path, you may pass in a string, in which case strict equality will be applied -//Alternatively you can pass in a matcher (ContainSubstring("/foo") and MatchRegexp("/foo/[a-f0-9]+") for example) -func VerifyRequest(method string, path interface{}, rawQuery ...string) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - Ω(req.Method).Should(Equal(method), "Method mismatch") - switch p := path.(type) { - case types.GomegaMatcher: - Ω(req.URL.Path).Should(p, "Path mismatch") - default: - Ω(req.URL.Path).Should(Equal(path), "Path mismatch") - } - if len(rawQuery) > 0 { - values, err := url.ParseQuery(rawQuery[0]) - Ω(err).ShouldNot(HaveOccurred(), "Expected RawQuery is malformed") - - Ω(req.URL.Query()).Should(Equal(values), "RawQuery mismatch") - } - } -} - -//VerifyContentType returns a handler that verifies that a request has a Content-Type header set to the -//specified value -func VerifyContentType(contentType string) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - Ω(req.Header.Get("Content-Type")).Should(Equal(contentType)) - } -} - -//VerifyBasicAuth returns a handler that verifies the request contains a BasicAuth Authorization header -//matching the passed in username and password -func VerifyBasicAuth(username string, password string) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - auth := req.Header.Get("Authorization") - Ω(auth).ShouldNot(Equal(""), "Authorization header must be specified") - - decoded, err := base64.StdEncoding.DecodeString(auth[6:]) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(string(decoded)).Should(Equal(fmt.Sprintf("%s:%s", username, password)), "Authorization mismatch") - } -} - -//VerifyHeader returns a handler that verifies the request contains the passed in headers. -//The passed in header keys are first canonicalized via http.CanonicalHeaderKey. -// -//The request must contain *all* the passed in headers, but it is allowed to have additional headers -//beyond the passed in set. -func VerifyHeader(header http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - for key, values := range header { - key = http.CanonicalHeaderKey(key) - Ω(req.Header[key]).Should(Equal(values), "Header mismatch for key: %s", key) - } - } -} - -//VerifyHeaderKV returns a handler that verifies the request contains a header matching the passed in key and values -//(recall that a `http.Header` is a mapping from string (key) to []string (values)) -//It is a convenience wrapper around `VerifyHeader` that allows you to avoid having to create an `http.Header` object. -func VerifyHeaderKV(key string, values ...string) http.HandlerFunc { - return VerifyHeader(http.Header{key: values}) -} - -//VerifyJSON returns a handler that verifies that the body of the request is a valid JSON representation -//matching the passed in JSON string. It does this using Gomega's MatchJSON method -// -//VerifyJSON also verifies that the request's content type is application/json -func VerifyJSON(expectedJSON string) http.HandlerFunc { - return CombineHandlers( - VerifyContentType("application/json"), - func(w http.ResponseWriter, req *http.Request) { - body, err := ioutil.ReadAll(req.Body) - req.Body.Close() - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(MatchJSON(expectedJSON), "JSON Mismatch") - }, - ) -} - -//VerifyJSONRepresenting is similar to VerifyJSON. Instead of taking a JSON string, however, it -//takes an arbitrary JSON-encodable object and verifies that the requests's body is a JSON representation -//that matches the object -func VerifyJSONRepresenting(object interface{}) http.HandlerFunc { - data, err := json.Marshal(object) - Ω(err).ShouldNot(HaveOccurred()) - return CombineHandlers( - VerifyContentType("application/json"), - VerifyJSON(string(data)), - ) -} - -func copyHeader(src http.Header, dst http.Header) { - for key, value := range src { - dst[key] = value - } -} - -/* -RespondWith returns a handler that responds to a request with the specified status code and body - -Body may be a string or []byte - -Also, RespondWith can be given an optional http.Header. The headers defined therein will be added to the response headers. -*/ -func RespondWith(statusCode int, body interface{}, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - if len(optionalHeader) == 1 { - copyHeader(optionalHeader[0], w.Header()) - } - w.WriteHeader(statusCode) - switch x := body.(type) { - case string: - w.Write([]byte(x)) - case []byte: - w.Write(x) - default: - Ω(body).Should(BeNil(), "Invalid type for body. Should be string or []byte.") - } - } -} - -/* -RespondWithPtr returns a handler that responds to a request with the specified status code and body - -Unlike RespondWith, you pass RepondWithPtr a pointer to the status code and body allowing different tests -to share the same setup but specify different status codes and bodies. - -Also, RespondWithPtr can be given an optional http.Header. The headers defined therein will be added to the response headers. -Since the http.Header can be mutated after the fact you don't need to pass in a pointer. -*/ -func RespondWithPtr(statusCode *int, body interface{}, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - if len(optionalHeader) == 1 { - copyHeader(optionalHeader[0], w.Header()) - } - w.WriteHeader(*statusCode) - if body != nil { - switch x := (body).(type) { - case *string: - w.Write([]byte(*x)) - case *[]byte: - w.Write(*x) - default: - Ω(body).Should(BeNil(), "Invalid type for body. Should be string or []byte.") - } - } - } -} - -/* -RespondWithJSONEncoded returns a handler that responds to a request with the specified status code and a body -containing the JSON-encoding of the passed in object - -Also, RespondWithJSONEncoded can be given an optional http.Header. The headers defined therein will be added to the response headers. -*/ -func RespondWithJSONEncoded(statusCode int, object interface{}, optionalHeader ...http.Header) http.HandlerFunc { - data, err := json.Marshal(object) - Ω(err).ShouldNot(HaveOccurred()) - - var headers http.Header - if len(optionalHeader) == 1 { - headers = optionalHeader[0] - } else { - headers = make(http.Header) - } - if _, found := headers["Content-Type"]; !found { - headers["Content-Type"] = []string{"application/json"} - } - return RespondWith(statusCode, string(data), headers) -} - -/* -RespondWithJSONEncodedPtr behaves like RespondWithJSONEncoded but takes a pointer -to a status code and object. - -This allows different tests to share the same setup but specify different status codes and JSON-encoded -objects. - -Also, RespondWithJSONEncodedPtr can be given an optional http.Header. The headers defined therein will be added to the response headers. -Since the http.Header can be mutated after the fact you don't need to pass in a pointer. -*/ -func RespondWithJSONEncodedPtr(statusCode *int, object interface{}, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - data, err := json.Marshal(object) - Ω(err).ShouldNot(HaveOccurred()) - var headers http.Header - if len(optionalHeader) == 1 { - headers = optionalHeader[0] - } else { - headers = make(http.Header) - } - if _, found := headers["Content-Type"]; !found { - headers["Content-Type"] = []string{"application/json"} - } - copyHeader(headers, w.Header()) - w.WriteHeader(*statusCode) - w.Write(data) - } -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server.go b/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server.go deleted file mode 100644 index fde65be..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server.go +++ /dev/null @@ -1,368 +0,0 @@ -/* -Package ghttp supports testing HTTP clients by providing a test server (simply a thin wrapper around httptest's server) that supports -registering multiple handlers. Incoming requests are not routed between the different handlers -- rather it is merely the order of the handlers that matters. The first request is handled by the first -registered handler, the second request by the second handler, etc. - -The intent here is to have each handler *verify* that the incoming request is valid. To accomplish, ghttp -also provides a collection of bite-size handlers that each perform one aspect of request verification. These can -be composed together and registered with a ghttp server. The result is an expressive language for describing -the requests generated by the client under test. - -Here's a simple example, note that the server handler is only defined in one BeforeEach and then modified, as required, by the nested BeforeEaches. -A more comprehensive example is available at https://onsi.github.io/gomega/#_testing_http_clients - - var _ = Describe("A Sprockets Client", func() { - var server *ghttp.Server - var client *SprocketClient - BeforeEach(func() { - server = ghttp.NewServer() - client = NewSprocketClient(server.URL(), "skywalker", "tk427") - }) - - AfterEach(func() { - server.Close() - }) - - Describe("fetching sprockets", func() { - var statusCode int - var sprockets []Sprocket - BeforeEach(func() { - statusCode = http.StatusOK - sprockets = []Sprocket{} - server.AppendHandlers(ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/sprockets"), - ghttp.VerifyBasicAuth("skywalker", "tk427"), - ghttp.RespondWithJSONEncodedPtr(&statusCode, &sprockets), - )) - }) - - Context("when requesting all sprockets", func() { - Context("when the response is succesful", func() { - BeforeEach(func() { - sprockets = []Sprocket{ - NewSprocket("Alfalfa"), - NewSprocket("Banana"), - } - }) - - It("should return the returned sprockets", func() { - Ω(client.Sprockets()).Should(Equal(sprockets)) - }) - }) - - Context("when the response is missing", func() { - BeforeEach(func() { - statusCode = http.StatusNotFound - }) - - It("should return an empty list of sprockets", func() { - Ω(client.Sprockets()).Should(BeEmpty()) - }) - }) - - Context("when the response fails to authenticate", func() { - BeforeEach(func() { - statusCode = http.StatusUnauthorized - }) - - It("should return an AuthenticationError error", func() { - sprockets, err := client.Sprockets() - Ω(sprockets).Should(BeEmpty()) - Ω(err).Should(MatchError(AuthenticationError)) - }) - }) - - Context("when the response is a server failure", func() { - BeforeEach(func() { - statusCode = http.StatusInternalServerError - }) - - It("should return an InternalError error", func() { - sprockets, err := client.Sprockets() - Ω(sprockets).Should(BeEmpty()) - Ω(err).Should(MatchError(InternalError)) - }) - }) - }) - - Context("when requesting some sprockets", func() { - BeforeEach(func() { - sprockets = []Sprocket{ - NewSprocket("Alfalfa"), - NewSprocket("Banana"), - } - - server.WrapHandler(0, ghttp.VerifyRequest("GET", "/sprockets", "filter=FOOD")) - }) - - It("should make the request with a filter", func() { - Ω(client.Sprockets("food")).Should(Equal(sprockets)) - }) - }) - }) - }) -*/ -package ghttp - -import ( - "fmt" - "io" - "io/ioutil" - "net/http" - "net/http/httptest" - "reflect" - "regexp" - "strings" - "sync" - - . "github.com/onsi/gomega" -) - -func new() *Server { - return &Server{ - AllowUnhandledRequests: false, - UnhandledRequestStatusCode: http.StatusInternalServerError, - writeLock: &sync.Mutex{}, - } -} - -type routedHandler struct { - method string - pathRegexp *regexp.Regexp - path string - handler http.HandlerFunc -} - -// NewServer returns a new `*ghttp.Server` that wraps an `httptest` server. The server is started automatically. -func NewServer() *Server { - s := new() - s.HTTPTestServer = httptest.NewServer(s) - return s -} - -// NewUnstartedServer return a new, unstarted, `*ghttp.Server`. Useful for specifying a custom listener on `server.HTTPTestServer`. -func NewUnstartedServer() *Server { - s := new() - s.HTTPTestServer = httptest.NewUnstartedServer(s) - return s -} - -// NewTLSServer returns a new `*ghttp.Server` that wraps an `httptest` TLS server. The server is started automatically. -func NewTLSServer() *Server { - s := new() - s.HTTPTestServer = httptest.NewTLSServer(s) - return s -} - -type Server struct { - //The underlying httptest server - HTTPTestServer *httptest.Server - - //Defaults to false. If set to true, the Server will allow more requests than there are registered handlers. - AllowUnhandledRequests bool - - //The status code returned when receiving an unhandled request. - //Defaults to http.StatusInternalServerError. - //Only applies if AllowUnhandledRequests is true - UnhandledRequestStatusCode int - - //If provided, ghttp will log about each request received to the provided io.Writer - //Defaults to nil - //If you're using Ginkgo, set this to GinkgoWriter to get improved output during failures - Writer io.Writer - - receivedRequests []*http.Request - requestHandlers []http.HandlerFunc - routedHandlers []routedHandler - - writeLock *sync.Mutex - calls int -} - -//Start() starts an unstarted ghttp server. It is a catastrophic error to call Start more than once (thanks, httptest). -func (s *Server) Start() { - s.HTTPTestServer.Start() -} - -//URL() returns a url that will hit the server -func (s *Server) URL() string { - return s.HTTPTestServer.URL -} - -//Addr() returns the address on which the server is listening. -func (s *Server) Addr() string { - return s.HTTPTestServer.Listener.Addr().String() -} - -//Close() should be called at the end of each test. It spins down and cleans up the test server. -func (s *Server) Close() { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - server := s.HTTPTestServer - s.HTTPTestServer = nil - server.Close() -} - -//ServeHTTP() makes Server an http.Handler -//When the server receives a request it handles the request in the following order: -// -//1. If the request matches a handler registered with RouteToHandler, that handler is called. -//2. Otherwise, if there are handlers registered via AppendHandlers, those handlers are called in order. -//3. If all registered handlers have been called then: -// a) If AllowUnhandledRequests is true, the request will be handled with response code of UnhandledRequestStatusCode -// b) If AllowUnhandledRequests is false, the request will not be handled and the current test will be marked as failed. -func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { - s.writeLock.Lock() - defer func() { - e := recover() - if e != nil { - w.WriteHeader(http.StatusInternalServerError) - } - - //If the handler panics GHTTP will silently succeed. This is bad™. - //To catch this case we need to fail the test if the handler has panicked. - //However, if the handler is panicking because Ginkgo's causing it to panic (i.e. an asswertion failed) - //then we shouldn't double-report the error as this will confuse people. - - //So: step 1, if this is a Ginkgo panic - do nothing, Ginkgo's aware of the failure - eAsString, ok := e.(string) - if ok && strings.Contains(eAsString, "defer GinkgoRecover()") { - return - } - - //If we're here, we have to do step 2: assert that the error is nil. This assertion will - //allow us to fail the test suite (note: we can't call Fail since Gomega is not allowed to import Ginkgo). - //Since a failed assertion throws a panic, and we are likely in a goroutine, we need to defer within our defer! - defer func() { - recover() - }() - Ω(e).Should(BeNil(), "Handler Panicked") - }() - - if s.Writer != nil { - s.Writer.Write([]byte(fmt.Sprintf("GHTTP Received Request: %s - %s\n", req.Method, req.URL))) - } - - s.receivedRequests = append(s.receivedRequests, req) - if routedHandler, ok := s.handlerForRoute(req.Method, req.URL.Path); ok { - s.writeLock.Unlock() - routedHandler(w, req) - } else if s.calls < len(s.requestHandlers) { - h := s.requestHandlers[s.calls] - s.calls++ - s.writeLock.Unlock() - h(w, req) - } else { - s.writeLock.Unlock() - if s.AllowUnhandledRequests { - ioutil.ReadAll(req.Body) - req.Body.Close() - w.WriteHeader(s.UnhandledRequestStatusCode) - } else { - Ω(req).Should(BeNil(), "Received Unhandled Request") - } - } -} - -//ReceivedRequests is an array containing all requests received by the server (both handled and unhandled requests) -func (s *Server) ReceivedRequests() []*http.Request { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - return s.receivedRequests -} - -//RouteToHandler can be used to register handlers that will always handle requests that match -//the passed in method and path. -// -//The path may be either a string object or a *regexp.Regexp. -func (s *Server) RouteToHandler(method string, path interface{}, handler http.HandlerFunc) { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - rh := routedHandler{ - method: method, - handler: handler, - } - - switch p := path.(type) { - case *regexp.Regexp: - rh.pathRegexp = p - case string: - rh.path = p - default: - panic("path must be a string or a regular expression") - } - - for i, existingRH := range s.routedHandlers { - if existingRH.method == method && - reflect.DeepEqual(existingRH.pathRegexp, rh.pathRegexp) && - existingRH.path == rh.path { - s.routedHandlers[i] = rh - return - } - } - s.routedHandlers = append(s.routedHandlers, rh) -} - -func (s *Server) handlerForRoute(method string, path string) (http.HandlerFunc, bool) { - for _, rh := range s.routedHandlers { - if rh.method == method { - if rh.pathRegexp != nil { - if rh.pathRegexp.Match([]byte(path)) { - return rh.handler, true - } - } else if rh.path == path { - return rh.handler, true - } - } - } - - return nil, false -} - -//AppendHandlers will appends http.HandlerFuncs to the server's list of registered handlers. The first incoming request is handled by the first handler, the second by the second, etc... -func (s *Server) AppendHandlers(handlers ...http.HandlerFunc) { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.requestHandlers = append(s.requestHandlers, handlers...) -} - -//SetHandler overrides the registered handler at the passed in index with the passed in handler -//This is useful, for example, when a server has been set up in a shared context, but must be tweaked -//for a particular test. -func (s *Server) SetHandler(index int, handler http.HandlerFunc) { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.requestHandlers[index] = handler -} - -//GetHandler returns the handler registered at the passed in index. -func (s *Server) GetHandler(index int) http.HandlerFunc { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - return s.requestHandlers[index] -} - -//WrapHandler combines the passed in handler with the handler registered at the passed in index. -//This is useful, for example, when a server has been set up in a shared context but must be tweaked -//for a particular test. -// -//If the currently registered handler is A, and the new passed in handler is B then -//WrapHandler will generate a new handler that first calls A, then calls B, and assign it to index -func (s *Server) WrapHandler(index int, handler http.HandlerFunc) { - existingHandler := s.GetHandler(index) - s.SetHandler(index, CombineHandlers(existingHandler, handler)) -} - -func (s *Server) CloseClientConnections() { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.HTTPTestServer.CloseClientConnections() -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server_suite_test.go deleted file mode 100644 index 7c12360..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package ghttp_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGHTTP(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "GHTTP Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server_test.go deleted file mode 100644 index 4d55b0f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/ghttp/test_server_test.go +++ /dev/null @@ -1,779 +0,0 @@ -package ghttp_test - -import ( - "bytes" - "io/ioutil" - "net/http" - "net/url" - "regexp" - - "github.com/onsi/gomega/gbytes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/ghttp" -) - -var _ = Describe("TestServer", func() { - var ( - resp *http.Response - err error - s *Server - ) - - BeforeEach(func() { - s = NewServer() - }) - - AfterEach(func() { - s.Close() - }) - - Describe("closing client connections", func() { - It("closes", func() { - s.AppendHandlers( - func(w http.ResponseWriter, req *http.Request) { - w.Write([]byte("hello")) - }, - func(w http.ResponseWriter, req *http.Request) { - s.CloseClientConnections() - }, - ) - - resp, err := http.Get(s.URL()) - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(200)) - - body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("hello"))) - - resp, err = http.Get(s.URL()) - Ω(err).Should(HaveOccurred()) - Ω(resp).Should(BeNil()) - }) - }) - - Describe("allowing unhandled requests", func() { - Context("when true", func() { - BeforeEach(func() { - s.AllowUnhandledRequests = true - s.UnhandledRequestStatusCode = http.StatusForbidden - resp, err = http.Get(s.URL() + "/foo") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should allow unhandled requests and respond with the passed in status code", func() { - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusForbidden)) - - data, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(data).Should(BeEmpty()) - }) - - It("should record the requests", func() { - Ω(s.ReceivedRequests()).Should(HaveLen(1)) - Ω(s.ReceivedRequests()[0].URL.Path).Should(Equal("/foo")) - }) - }) - - Context("when false", func() { - It("should fail when attempting a request", func() { - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo") - }) - - Ω(failures[0]).Should(ContainSubstring("Received Unhandled Request")) - }) - }) - }) - - Describe("Managing Handlers", func() { - var called []string - BeforeEach(func() { - called = []string{} - s.RouteToHandler("GET", "/routed", func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r1") - }) - s.RouteToHandler("POST", regexp.MustCompile(`/routed\d`), func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r2") - }) - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) { - called = append(called, "A") - }, func(w http.ResponseWriter, req *http.Request) { - called = append(called, "B") - }) - }) - - It("should prefer routed handlers if there is a match", func() { - http.Get(s.URL() + "/routed") - http.Post(s.URL()+"/routed7", "application/json", nil) - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/routed") - http.Post(s.URL()+"/routed9", "application/json", nil) - http.Get(s.URL() + "/bar") - - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/routed/not/a/match") - http.Get(s.URL() + "/routed7") - http.Post(s.URL()+"/routed", "application/json", nil) - }) - - Ω(failures[0]).Should(ContainSubstring("Received Unhandled Request")) - Ω(failures).Should(HaveLen(4)) - - http.Post(s.URL()+"/routed3", "application/json", nil) - - Ω(called).Should(Equal([]string{"r1", "r2", "A", "r1", "r2", "B", "r2"})) - }) - - It("should override routed handlers when reregistered", func() { - s.RouteToHandler("GET", "/routed", func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r3") - }) - s.RouteToHandler("POST", regexp.MustCompile(`/routed\d`), func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r4") - }) - - http.Get(s.URL() + "/routed") - http.Post(s.URL()+"/routed7", "application/json", nil) - - Ω(called).Should(Equal([]string{"r3", "r4"})) - }) - - It("should call the appended handlers, in order, as requests come in", func() { - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"A"})) - - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"A", "B"})) - - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo") - }) - - Ω(failures[0]).Should(ContainSubstring("Received Unhandled Request")) - }) - - Describe("Overwriting an existing handler", func() { - BeforeEach(func() { - s.SetHandler(0, func(w http.ResponseWriter, req *http.Request) { - called = append(called, "C") - }) - }) - - It("should override the specified handler", func() { - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"C", "B"})) - }) - }) - - Describe("Getting an existing handler", func() { - It("should return the handler func", func() { - s.GetHandler(1)(nil, nil) - Ω(called).Should(Equal([]string{"B"})) - }) - }) - - Describe("Wrapping an existing handler", func() { - BeforeEach(func() { - s.WrapHandler(0, func(w http.ResponseWriter, req *http.Request) { - called = append(called, "C") - }) - }) - - It("should wrap the existing handler in a new handler", func() { - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"A", "C", "B"})) - }) - }) - }) - - Describe("When a handler fails", func() { - BeforeEach(func() { - s.UnhandledRequestStatusCode = http.StatusForbidden //just to be clear that 500s aren't coming from unhandled requests - }) - - Context("because the handler has panicked", func() { - BeforeEach(func() { - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) { - panic("bam") - }) - }) - - It("should respond with a 500 and make a failing assertion", func() { - var resp *http.Response - var err error - - failures := InterceptGomegaFailures(func() { - resp, err = http.Get(s.URL()) - }) - - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusInternalServerError)) - Ω(failures).Should(ConsistOf(ContainSubstring("Handler Panicked"))) - }) - }) - - Context("because an assertion has failed", func() { - BeforeEach(func() { - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) { - // Ω(true).Should(BeFalse()) <-- would be nice to do it this way, but the test just can't be written this way - - By("We're cheating a bit here -- we're throwing a GINKGO_PANIC which simulates a failed assertion") - panic(GINKGO_PANIC) - }) - }) - - It("should respond with a 500 and *not* make a failing assertion, instead relying on Ginkgo to have already been notified of the error", func() { - resp, err := http.Get(s.URL()) - - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusInternalServerError)) - }) - }) - }) - - Describe("Logging to the Writer", func() { - var buf *gbytes.Buffer - BeforeEach(func() { - buf = gbytes.NewBuffer() - s.Writer = buf - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) {}) - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) {}) - }) - - It("should write to the buffer when a request comes in", func() { - http.Get(s.URL() + "/foo") - Ω(buf).Should(gbytes.Say("GHTTP Received Request: GET - /foo\n")) - - http.Post(s.URL()+"/bar", "", nil) - Ω(buf).Should(gbytes.Say("GHTTP Received Request: POST - /bar\n")) - }) - }) - - Describe("Request Handlers", func() { - Describe("VerifyRequest", func() { - BeforeEach(func() { - s.AppendHandlers(VerifyRequest("GET", "/foo")) - }) - - It("should verify the method, path", func() { - resp, err = http.Get(s.URL() + "/foo?baz=bar") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the method, path", func() { - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo2") - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should verify the method, path", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/json", nil) - }) - Ω(failures).Should(HaveLen(1)) - }) - - Context("when passed a rawQuery", func() { - It("should also be possible to verify the rawQuery", func() { - s.SetHandler(0, VerifyRequest("GET", "/foo", "baz=bar")) - resp, err = http.Get(s.URL() + "/foo?baz=bar") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should match irregardless of query parameter ordering", func() { - s.SetHandler(0, VerifyRequest("GET", "/foo", "type=get&name=money")) - u, _ := url.Parse(s.URL() + "/foo") - u.RawQuery = url.Values{ - "type": []string{"get"}, - "name": []string{"money"}, - }.Encode() - - resp, err = http.Get(u.String()) - Ω(err).ShouldNot(HaveOccurred()) - }) - }) - - Context("when passed a matcher for path", func() { - It("should apply the matcher", func() { - s.SetHandler(0, VerifyRequest("GET", MatchRegexp(`/foo/[a-f]*/3`))) - resp, err = http.Get(s.URL() + "/foo/abcdefa/3") - Ω(err).ShouldNot(HaveOccurred()) - }) - }) - }) - - Describe("VerifyContentType", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyContentType("application/octet-stream"), - )) - }) - - It("should verify the content type", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Set("Content-Type", "application/octet-stream") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the content type", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Set("Content-Type", "application/json") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("Verify BasicAuth", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyBasicAuth("bob", "password"), - )) - }) - - It("should verify basic auth", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.SetBasicAuth("bob", "password") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify basic auth", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.SetBasicAuth("bob", "bassword") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should require basic auth header", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(ContainElement(ContainSubstring("Authorization header must be specified"))) - }) - }) - - Describe("VerifyHeader", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyHeader(http.Header{ - "accept": []string{"jpeg", "png"}, - "cache-control": []string{"omicron"}, - "Return-Path": []string{"hobbiton"}, - }), - )) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Accept", "jpeg") - req.Header.Add("Accept", "png") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Schmaccept", "jpeg") - req.Header.Add("Schmaccept", "png") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyHeaderKV", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyHeaderKV("accept", "jpeg", "png"), - VerifyHeaderKV("cache-control", "omicron"), - VerifyHeaderKV("Return-Path", "hobbiton"), - )) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Accept", "jpeg") - req.Header.Add("Accept", "png") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Accept", "jpeg") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyJSON", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyJSON(`{"a":3, "b":2}`), - )) - }) - - It("should verify the json body and the content type", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`{"b":2, "a":3}`))) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the json body and the content type", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`{"b":2, "a":4}`))) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should verify the json body and the content type", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/not-json", bytes.NewReader([]byte(`{"b":2, "a":3}`))) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyJSONRepresenting", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyJSONRepresenting([]int{1, 3, 5}), - )) - }) - - It("should verify the json body and the content type", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`[1,3,5]`))) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the json body and the content type", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`[1,3]`))) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("RespondWith", func() { - Context("without headers", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWith(http.StatusCreated, "sweet"), - ), CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWith(http.StatusOK, []byte("sour")), - )) - }) - - It("should return the response", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("sweet"))) - - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - - body, err = ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("sour"))) - }) - }) - - Context("with headers", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWith(http.StatusCreated, "sweet", http.Header{"X-Custom-Header": []string{"my header"}}), - )) - }) - - It("should return the headers too", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - Ω(ioutil.ReadAll(resp.Body)).Should(Equal([]byte("sweet"))) - Ω(resp.Header.Get("X-Custom-Header")).Should(Equal("my header")) - }) - }) - }) - - Describe("RespondWithPtr", func() { - var code int - var byteBody []byte - var stringBody string - BeforeEach(func() { - code = http.StatusOK - byteBody = []byte("sweet") - stringBody = "sour" - - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithPtr(&code, &byteBody), - ), CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithPtr(&code, &stringBody), - )) - }) - - It("should return the response", func() { - code = http.StatusCreated - byteBody = []byte("tasty") - stringBody = "treat" - - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("tasty"))) - - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err = ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("treat"))) - }) - - Context("when passed a nil body", func() { - BeforeEach(func() { - s.SetHandler(0, CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithPtr(&code, nil), - )) - }) - - It("should return an empty body and not explode", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(BeEmpty()) - - Ω(s.ReceivedRequests()).Should(HaveLen(1)) - }) - }) - }) - - Describe("RespondWithJSON", func() { - Context("when no optional headers are set", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncoded(http.StatusCreated, []int{1, 2, 3}), - )) - }) - - It("should return the response", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(MatchJSON("[1,2,3]")) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - }) - - Context("when optional headers are set", func() { - var headers http.Header - BeforeEach(func() { - headers = http.Header{"Stuff": []string{"things"}} - }) - - JustBeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncoded(http.StatusCreated, []int{1, 2, 3}, headers), - )) - }) - - It("should preserve those headers", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Stuff"]).Should(Equal([]string{"things"})) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - - Context("when setting the Content-Type explicitly", func() { - BeforeEach(func() { - headers["Content-Type"] = []string{"not-json"} - }) - - It("should use the Content-Type header that was explicitly set", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-json"})) - }) - }) - }) - }) - - Describe("RespondWithJSONPtr", func() { - type testObject struct { - Key string - Value string - } - - var code int - var object testObject - - Context("when no optional headers are set", func() { - BeforeEach(func() { - code = http.StatusOK - object = testObject{} - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncodedPtr(&code, &object), - )) - }) - - It("should return the response", func() { - code = http.StatusCreated - object = testObject{ - Key: "Jim", - Value: "Codes", - } - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(MatchJSON(`{"Key": "Jim", "Value": "Codes"}`)) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - }) - - Context("when optional headers are set", func() { - var headers http.Header - BeforeEach(func() { - headers = http.Header{"Stuff": []string{"things"}} - }) - - JustBeforeEach(func() { - code = http.StatusOK - object = testObject{} - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncodedPtr(&code, &object, headers), - )) - }) - - It("should preserve those headers", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Stuff"]).Should(Equal([]string{"things"})) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - - Context("when setting the Content-Type explicitly", func() { - BeforeEach(func() { - headers["Content-Type"] = []string{"not-json"} - }) - - It("should use the Content-Type header that was explicitly set", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-json"})) - }) - }) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go deleted file mode 100644 index dae47a4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package assertion_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAssertion(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Assertion Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion_test.go deleted file mode 100644 index de9eff2..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion_test.go +++ /dev/null @@ -1,252 +0,0 @@ -package assertion_test - -import ( - "errors" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/internal/assertion" - "github.com/onsi/gomega/internal/fakematcher" -) - -var _ = Describe("Assertion", func() { - var ( - a *Assertion - failureMessage string - failureCallerSkip int - matcher *fakematcher.FakeMatcher - ) - - input := "The thing I'm testing" - - var fakeFailHandler = func(message string, callerSkip ...int) { - failureMessage = message - if len(callerSkip) == 1 { - failureCallerSkip = callerSkip[0] - } - } - - BeforeEach(func() { - matcher = &fakematcher.FakeMatcher{} - failureMessage = "" - failureCallerSkip = 0 - a = New(input, fakeFailHandler, 1) - }) - - Context("when called", func() { - It("should pass the provided input value to the matcher", func() { - a.Should(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.ShouldNot(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.To(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.ToNot(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.NotTo(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - }) - }) - - Context("when the matcher succeeds", func() { - BeforeEach(func() { - matcher.MatchesToReturn = true - matcher.ErrToReturn = nil - }) - - Context("and a positive assertion is being made", func() { - It("should not call the failure callback", func() { - a.Should(matcher) - Ω(failureMessage).Should(Equal("")) - }) - - It("should be true", func() { - Ω(a.Should(matcher)).Should(BeTrue()) - }) - }) - - Context("and a negative assertion is being made", func() { - It("should call the failure callback", func() { - a.ShouldNot(matcher) - Ω(failureMessage).Should(Equal("negative: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - - It("should be false", func() { - Ω(a.ShouldNot(matcher)).Should(BeFalse()) - }) - }) - }) - - Context("when the matcher fails", func() { - BeforeEach(func() { - matcher.MatchesToReturn = false - matcher.ErrToReturn = nil - }) - - Context("and a positive assertion is being made", func() { - It("should call the failure callback", func() { - a.Should(matcher) - Ω(failureMessage).Should(Equal("positive: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - - It("should be false", func() { - Ω(a.Should(matcher)).Should(BeFalse()) - }) - }) - - Context("and a negative assertion is being made", func() { - It("should not call the failure callback", func() { - a.ShouldNot(matcher) - Ω(failureMessage).Should(Equal("")) - }) - - It("should be true", func() { - Ω(a.ShouldNot(matcher)).Should(BeTrue()) - }) - }) - }) - - Context("When reporting a failure", func() { - BeforeEach(func() { - matcher.MatchesToReturn = false - matcher.ErrToReturn = nil - }) - - Context("and there is an optional description", func() { - It("should append the description to the failure message", func() { - a.Should(matcher, "A description") - Ω(failureMessage).Should(Equal("A description\npositive: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - - Context("and there are multiple arguments to the optional description", func() { - It("should append the formatted description to the failure message", func() { - a.Should(matcher, "A description of [%d]", 3) - Ω(failureMessage).Should(Equal("A description of [3]\npositive: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - }) - - Context("When the matcher returns an error", func() { - BeforeEach(func() { - matcher.ErrToReturn = errors.New("Kaboom!") - }) - - Context("and a positive assertion is being made", func() { - It("should call the failure callback", func() { - matcher.MatchesToReturn = true - a.Should(matcher) - Ω(failureMessage).Should(Equal("Kaboom!")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - - Context("and a negative assertion is being made", func() { - It("should call the failure callback", func() { - matcher.MatchesToReturn = false - a.ShouldNot(matcher) - Ω(failureMessage).Should(Equal("Kaboom!")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - - It("should always be false", func() { - Ω(a.Should(matcher)).Should(BeFalse()) - Ω(a.ShouldNot(matcher)).Should(BeFalse()) - }) - }) - - Context("when there are extra parameters", func() { - It("(a simple example)", func() { - Ω(func() (string, int, error) { - return "foo", 0, nil - }()).Should(Equal("foo")) - }) - - Context("when the parameters are all nil or zero", func() { - It("should invoke the matcher", func() { - matcher.MatchesToReturn = true - matcher.ErrToReturn = nil - - var typedNil []string - a = New(input, fakeFailHandler, 1, 0, nil, typedNil) - - result := a.Should(matcher) - Ω(result).Should(BeTrue()) - Ω(matcher.ReceivedActual).Should(Equal(input)) - - Ω(failureMessage).Should(BeZero()) - }) - }) - - Context("when any of the parameters are not nil or zero", func() { - It("should call the failure callback", func() { - matcher.MatchesToReturn = false - matcher.ErrToReturn = nil - - a = New(input, fakeFailHandler, 1, errors.New("foo")) - result := a.Should(matcher) - Ω(result).Should(BeFalse()) - Ω(matcher.ReceivedActual).Should(BeZero(), "The matcher doesn't even get called") - Ω(failureMessage).Should(ContainSubstring("foo")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 1) - result = a.ShouldNot(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("1")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"}) - result = a.To(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("foo")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"}) - result = a.ToNot(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("foo")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"}) - result = a.NotTo(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("foo")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - }) - - Context("Making an assertion without a registered fail handler", func() { - It("should panic", func() { - defer func() { - e := recover() - RegisterFailHandler(Fail) - if e == nil { - Fail("expected a panic to have occured") - } - }() - - RegisterFailHandler(nil) - Ω(true).Should(BeTrue()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go deleted file mode 100644 index bdb0c3d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package asyncassertion_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAsyncAssertion(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "AsyncAssertion Suite") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go deleted file mode 100644 index 4288d4d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go +++ /dev/null @@ -1,345 +0,0 @@ -package asyncassertion_test - -import ( - "errors" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/internal/asyncassertion" -) - -var _ = Describe("Async Assertion", func() { - var ( - failureMessage string - callerSkip int - ) - - var fakeFailHandler = func(message string, skip ...int) { - failureMessage = message - callerSkip = skip[0] - } - - BeforeEach(func() { - failureMessage = "" - callerSkip = 0 - }) - - Describe("Eventually", func() { - Context("the positive case", func() { - It("should poll the function and matcher", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() int { - counter++ - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(BeNumerically("==", 5)) - Ω(failureMessage).Should(BeZero()) - }) - - It("should continue when the matcher errors", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() interface{} { - counter++ - if counter == 5 { - return "not-a-number" //this should cause the matcher to error - } - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(BeNumerically("==", 5), "My description %d", 2) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - - It("should be able to timeout", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() int { - counter++ - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(BeNumerically(">", 100), "My description %d", 2) - - Ω(counter).Should(BeNumerically(">", 8)) - Ω(counter).Should(BeNumerically("<=", 10)) - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(MatchRegexp(`\: \d`), "Should pass the correct value to the matcher message formatter.") - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("the negative case", func() { - It("should poll the function and matcher", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() int { - counter += 1 - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(BeNumerically("<", 3)) - - Ω(counter).Should(Equal(3)) - Ω(failureMessage).Should(BeZero()) - }) - - It("should timeout when the matcher errors", func() { - a := New(AsyncAssertionTypeEventually, func() interface{} { - return 0 //this should cause the matcher to error - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(HaveLen(0), "My description %d", 2) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring("Error:")) - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - - It("should be able to timeout", func() { - a := New(AsyncAssertionTypeEventually, func() int { - return 0 - }, fakeFailHandler, time.Duration(0.1*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(Equal(0), "My description %d", 2) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring(": 0"), "Should pass the correct value to the matcher message formatter.") - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("with a function that returns multiple values", func() { - It("should eventually succeed if the additional arguments are nil", func() { - i := 0 - Eventually(func() (int, error) { - i++ - return i, nil - }).Should(Equal(10)) - }) - - It("should eventually timeout if the additional arguments are not nil", func() { - i := 0 - a := New(AsyncAssertionTypeEventually, func() (int, error) { - i++ - return i, errors.New("bam") - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - a.Should(Equal(2)) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring("Error:")) - Ω(failureMessage).Should(ContainSubstring("bam")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("Making an assertion without a registered fail handler", func() { - It("should panic", func() { - defer func() { - e := recover() - RegisterFailHandler(Fail) - if e == nil { - Fail("expected a panic to have occured") - } - }() - - RegisterFailHandler(nil) - c := make(chan bool, 1) - c <- true - Eventually(c).Should(Receive()) - }) - }) - }) - - Describe("Consistently", func() { - Describe("The positive case", func() { - Context("when the matcher consistently passes for the duration", func() { - It("should pass", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() string { - calls++ - return "foo" - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(Equal("foo")) - Ω(calls).Should(BeNumerically(">", 8)) - Ω(calls).Should(BeNumerically("<=", 10)) - Ω(failureMessage).Should(BeZero()) - }) - }) - - Context("when the matcher fails at some point", func() { - It("should fail", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() interface{} { - calls++ - if calls > 5 { - return "bar" - } - return "foo" - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(Equal("foo")) - Ω(failureMessage).Should(ContainSubstring("to equal")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("when the matcher errors at some point", func() { - It("should fail", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() interface{} { - calls++ - if calls > 5 { - return 3 - } - return []int{1, 2, 3} - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(HaveLen(3)) - Ω(failureMessage).Should(ContainSubstring("HaveLen matcher expects")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - }) - - Describe("The negative case", func() { - Context("when the matcher consistently passes for the duration", func() { - It("should pass", func() { - c := make(chan bool) - a := New(AsyncAssertionTypeConsistently, c, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(Receive()) - Ω(failureMessage).Should(BeZero()) - }) - }) - - Context("when the matcher fails at some point", func() { - It("should fail", func() { - c := make(chan bool) - go func() { - time.Sleep(time.Duration(100 * time.Millisecond)) - c <- true - }() - - a := New(AsyncAssertionTypeConsistently, c, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(Receive()) - Ω(failureMessage).Should(ContainSubstring("not to receive anything")) - }) - }) - - Context("when the matcher errors at some point", func() { - It("should fail", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() interface{} { - calls++ - return calls - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(BeNumerically(">", 5)) - Ω(failureMessage).Should(ContainSubstring("not to be >")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - }) - - Context("with a function that returns multiple values", func() { - It("should consistently succeed if the additional arguments are nil", func() { - i := 2 - Consistently(func() (int, error) { - i++ - return i, nil - }).Should(BeNumerically(">=", 2)) - }) - - It("should eventually timeout if the additional arguments are not nil", func() { - i := 2 - a := New(AsyncAssertionTypeEventually, func() (int, error) { - i++ - return i, errors.New("bam") - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - a.Should(BeNumerically(">=", 2)) - - Ω(failureMessage).Should(ContainSubstring("Error:")) - Ω(failureMessage).Should(ContainSubstring("bam")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("Making an assertion without a registered fail handler", func() { - It("should panic", func() { - defer func() { - e := recover() - RegisterFailHandler(Fail) - if e == nil { - Fail("expected a panic to have occured") - } - }() - - RegisterFailHandler(nil) - c := make(chan bool) - Consistently(c).ShouldNot(Receive()) - }) - }) - }) - - Context("when passed a function with the wrong # or arguments & returns", func() { - It("should panic", func() { - Ω(func() { - New(AsyncAssertionTypeEventually, func() {}, fakeFailHandler, 0, 0, 1) - }).Should(Panic()) - - Ω(func() { - New(AsyncAssertionTypeEventually, func(a string) int { return 0 }, fakeFailHandler, 0, 0, 1) - }).Should(Panic()) - - Ω(func() { - New(AsyncAssertionTypeEventually, func() int { return 0 }, fakeFailHandler, 0, 0, 1) - }).ShouldNot(Panic()) - - Ω(func() { - New(AsyncAssertionTypeEventually, func() (int, error) { return 0, nil }, fakeFailHandler, 0, 0, 1) - }).ShouldNot(Panic()) - }) - }) - - Describe("bailing early", func() { - Context("when actual is a value", func() { - It("Eventually should bail out and fail early if the matcher says to", func() { - c := make(chan bool) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(c, 0.1).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically("<", 90*time.Millisecond)) - - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when actual is a function", func() { - It("should never bail early", func() { - c := make(chan bool) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(func() chan bool { - return c - }, 0.1).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically(">=", 90*time.Millisecond)) - - Ω(failures).Should(HaveLen(1)) - }) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go b/Godeps/_workspace/src/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go deleted file mode 100644 index 6e351a7..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go +++ /dev/null @@ -1,23 +0,0 @@ -package fakematcher - -import "fmt" - -type FakeMatcher struct { - ReceivedActual interface{} - MatchesToReturn bool - ErrToReturn error -} - -func (matcher *FakeMatcher) Match(actual interface{}) (bool, error) { - matcher.ReceivedActual = actual - - return matcher.MatchesToReturn, matcher.ErrToReturn -} - -func (matcher *FakeMatcher) FailureMessage(actual interface{}) string { - return fmt.Sprintf("positive: %v", actual) -} - -func (matcher *FakeMatcher) NegatedFailureMessage(actual interface{}) string { - return fmt.Sprintf("negative: %v", actual) -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go deleted file mode 100644 index b9fbd6c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package testingtsupport_test - -import ( - . "github.com/onsi/gomega" - - "testing" -) - -func TestTestingT(t *testing.T) { - RegisterTestingT(t) - Ω(true).Should(BeTrue()) -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go deleted file mode 100644 index d2280e0..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("AssignableToTypeOf", func() { - Context("When asserting assignability between types", func() { - It("should do the right thing", func() { - Ω(0).Should(BeAssignableToTypeOf(0)) - Ω(5).Should(BeAssignableToTypeOf(-1)) - Ω("foo").Should(BeAssignableToTypeOf("bar")) - Ω(struct{ Foo string }{}).Should(BeAssignableToTypeOf(struct{ Foo string }{})) - - Ω(0).ShouldNot(BeAssignableToTypeOf("bar")) - Ω(5).ShouldNot(BeAssignableToTypeOf(struct{ Foo string }{})) - Ω("foo").ShouldNot(BeAssignableToTypeOf(42)) - }) - }) - - Context("When asserting nil values", func() { - It("should error", func() { - success, err := (&AssignableToTypeOfMatcher{Expected: nil}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_directory_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_directory_test.go deleted file mode 100644 index e59d769..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_directory_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package matchers_test - -import ( - "io/ioutil" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeADirectoryMatcher", func() { - Context("when passed a string", func() { - It("should do the right thing", func() { - Ω("/dne/test").ShouldNot(BeADirectory()) - - tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpFile.Name()) - Ω(tmpFile.Name()).ShouldNot(BeADirectory()) - - tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpDir) - Ω(tmpDir).Should(BeADirectory()) - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - success, err := (&BeADirectoryMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeADirectoryMatcher{}).Match(true) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_regular_file_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_regular_file_test.go deleted file mode 100644 index 951e750..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_regular_file_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package matchers_test - -import ( - "io/ioutil" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeARegularFileMatcher", func() { - Context("when passed a string", func() { - It("should do the right thing", func() { - Ω("/dne/test").ShouldNot(BeARegularFile()) - - tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpFile.Name()) - Ω(tmpFile.Name()).Should(BeARegularFile()) - - tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpDir) - Ω(tmpDir).ShouldNot(BeARegularFile()) - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - success, err := (&BeARegularFileMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeARegularFileMatcher{}).Match(true) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_an_existing_file_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_an_existing_file_test.go deleted file mode 100644 index 775f7b6..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_an_existing_file_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package matchers_test - -import ( - "io/ioutil" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeAnExistingFileMatcher", func() { - Context("when passed a string", func() { - It("should do the right thing", func() { - Ω("/dne/test").ShouldNot(BeAnExistingFile()) - - tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpFile.Name()) - Ω(tmpFile.Name()).Should(BeAnExistingFile()) - - tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpDir) - Ω(tmpDir).Should(BeAnExistingFile()) - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - success, err := (&BeAnExistingFileMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeAnExistingFileMatcher{}).Match(true) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_closed_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_closed_matcher_test.go deleted file mode 100644 index b2c40c9..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_closed_matcher_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeClosedMatcher", func() { - Context("when passed a channel", func() { - It("should do the right thing", func() { - openChannel := make(chan bool) - Ω(openChannel).ShouldNot(BeClosed()) - - var openReaderChannel <-chan bool - openReaderChannel = openChannel - Ω(openReaderChannel).ShouldNot(BeClosed()) - - closedChannel := make(chan bool) - close(closedChannel) - - Ω(closedChannel).Should(BeClosed()) - - var closedReaderChannel <-chan bool - closedReaderChannel = closedChannel - Ω(closedReaderChannel).Should(BeClosed()) - }) - }) - - Context("when passed a send-only channel", func() { - It("should error", func() { - openChannel := make(chan bool) - var openWriterChannel chan<- bool - openWriterChannel = openChannel - - success, err := (&BeClosedMatcher{}).Match(openWriterChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - closedChannel := make(chan bool) - close(closedChannel) - - var closedWriterChannel chan<- bool - closedWriterChannel = closedChannel - - success, err = (&BeClosedMatcher{}).Match(closedWriterChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - var nilChannel chan bool - - success, err := (&BeClosedMatcher{}).Match(nilChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeClosedMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeClosedMatcher{}).Match(7) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_empty_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_empty_matcher_test.go deleted file mode 100644 index 541c1b9..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_empty_matcher_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeEmpty", func() { - Context("when passed a supported type", func() { - It("should do the right thing", func() { - Ω("").Should(BeEmpty()) - Ω(" ").ShouldNot(BeEmpty()) - - Ω([0]int{}).Should(BeEmpty()) - Ω([1]int{1}).ShouldNot(BeEmpty()) - - Ω([]int{}).Should(BeEmpty()) - Ω([]int{1}).ShouldNot(BeEmpty()) - - Ω(map[string]int{}).Should(BeEmpty()) - Ω(map[string]int{"a": 1}).ShouldNot(BeEmpty()) - - c := make(chan bool, 1) - Ω(c).Should(BeEmpty()) - c <- true - Ω(c).ShouldNot(BeEmpty()) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should be true", func() { - var nilSlice []int - Ω(nilSlice).Should(BeEmpty()) - - var nilMap map[int]string - Ω(nilMap).Should(BeEmpty()) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&BeEmptyMatcher{}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeEmptyMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go deleted file mode 100644 index def5104..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeEquivalentTo", func() { - Context("when asserting that nil is equivalent to nil", func() { - It("should error", func() { - success, err := (&BeEquivalentToMatcher{Expected: nil}).Match(nil) - - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("When asserting on nil", func() { - It("should do the right thing", func() { - Ω("foo").ShouldNot(BeEquivalentTo(nil)) - Ω(nil).ShouldNot(BeEquivalentTo(3)) - Ω([]int{1, 2}).ShouldNot(BeEquivalentTo(nil)) - }) - }) - - Context("When asserting on type aliases", func() { - It("should the right thing", func() { - Ω(StringAlias("foo")).Should(BeEquivalentTo("foo")) - Ω("foo").Should(BeEquivalentTo(StringAlias("foo"))) - Ω(StringAlias("foo")).ShouldNot(BeEquivalentTo("bar")) - Ω("foo").ShouldNot(BeEquivalentTo(StringAlias("bar"))) - }) - }) - - Context("When asserting on numbers", func() { - It("should convert actual to expected and do the right thing", func() { - Ω(5).Should(BeEquivalentTo(5)) - Ω(5.0).Should(BeEquivalentTo(5.0)) - Ω(5).Should(BeEquivalentTo(5.0)) - - Ω(5).ShouldNot(BeEquivalentTo("5")) - Ω(5).ShouldNot(BeEquivalentTo(3)) - - //Here be dragons! - Ω(5.1).Should(BeEquivalentTo(5)) - Ω(5).ShouldNot(BeEquivalentTo(5.1)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_false_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_false_matcher_test.go deleted file mode 100644 index 3965a2c..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_false_matcher_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeFalse", func() { - It("should handle true and false correctly", func() { - Ω(true).ShouldNot(BeFalse()) - Ω(false).Should(BeFalse()) - }) - - It("should only support booleans", func() { - success, err := (&BeFalseMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_nil_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_nil_matcher_test.go deleted file mode 100644 index 7533253..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_nil_matcher_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeNil", func() { - It("should succeed when passed nil", func() { - Ω(nil).Should(BeNil()) - }) - - It("should succeed when passed a typed nil", func() { - var a []int - Ω(a).Should(BeNil()) - }) - - It("should succeed when passing nil pointer", func() { - var f *struct{} - Ω(f).Should(BeNil()) - }) - - It("should not succeed when not passed nil", func() { - Ω(0).ShouldNot(BeNil()) - Ω(false).ShouldNot(BeNil()) - Ω("").ShouldNot(BeNil()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go deleted file mode 100644 index 43fdb1f..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeNumerically", func() { - Context("when passed a number", func() { - It("should support ==", func() { - Ω(uint32(5)).Should(BeNumerically("==", 5)) - Ω(float64(5.0)).Should(BeNumerically("==", 5)) - Ω(int8(5)).Should(BeNumerically("==", 5)) - }) - - It("should not have false positives", func() { - Ω(5.1).ShouldNot(BeNumerically("==", 5)) - Ω(5).ShouldNot(BeNumerically("==", 5.1)) - }) - - It("should support >", func() { - Ω(uint32(5)).Should(BeNumerically(">", 4)) - Ω(float64(5.0)).Should(BeNumerically(">", 4.9)) - Ω(int8(5)).Should(BeNumerically(">", 4)) - - Ω(uint32(5)).ShouldNot(BeNumerically(">", 5)) - Ω(float64(5.0)).ShouldNot(BeNumerically(">", 5.0)) - Ω(int8(5)).ShouldNot(BeNumerically(">", 5)) - }) - - It("should support <", func() { - Ω(uint32(5)).Should(BeNumerically("<", 6)) - Ω(float64(5.0)).Should(BeNumerically("<", 5.1)) - Ω(int8(5)).Should(BeNumerically("<", 6)) - - Ω(uint32(5)).ShouldNot(BeNumerically("<", 5)) - Ω(float64(5.0)).ShouldNot(BeNumerically("<", 5.0)) - Ω(int8(5)).ShouldNot(BeNumerically("<", 5)) - }) - - It("should support >=", func() { - Ω(uint32(5)).Should(BeNumerically(">=", 4)) - Ω(float64(5.0)).Should(BeNumerically(">=", 4.9)) - Ω(int8(5)).Should(BeNumerically(">=", 4)) - - Ω(uint32(5)).Should(BeNumerically(">=", 5)) - Ω(float64(5.0)).Should(BeNumerically(">=", 5.0)) - Ω(int8(5)).Should(BeNumerically(">=", 5)) - - Ω(uint32(5)).ShouldNot(BeNumerically(">=", 6)) - Ω(float64(5.0)).ShouldNot(BeNumerically(">=", 5.1)) - Ω(int8(5)).ShouldNot(BeNumerically(">=", 6)) - }) - - It("should support <=", func() { - Ω(uint32(5)).Should(BeNumerically("<=", 6)) - Ω(float64(5.0)).Should(BeNumerically("<=", 5.1)) - Ω(int8(5)).Should(BeNumerically("<=", 6)) - - Ω(uint32(5)).Should(BeNumerically("<=", 5)) - Ω(float64(5.0)).Should(BeNumerically("<=", 5.0)) - Ω(int8(5)).Should(BeNumerically("<=", 5)) - - Ω(uint32(5)).ShouldNot(BeNumerically("<=", 4)) - Ω(float64(5.0)).ShouldNot(BeNumerically("<=", 4.9)) - Ω(int8(5)).Should(BeNumerically("<=", 5)) - }) - - Context("when passed ~", func() { - Context("when passed a float", func() { - Context("and there is no precision parameter", func() { - It("should default to 1e-8", func() { - Ω(5.00000001).Should(BeNumerically("~", 5.00000002)) - Ω(5.00000001).ShouldNot(BeNumerically("~", 5.0000001)) - }) - }) - - Context("and there is a precision parameter", func() { - It("should use the precision parameter", func() { - Ω(5.1).Should(BeNumerically("~", 5.19, 0.1)) - Ω(5.1).Should(BeNumerically("~", 5.01, 0.1)) - Ω(5.1).ShouldNot(BeNumerically("~", 5.22, 0.1)) - Ω(5.1).ShouldNot(BeNumerically("~", 4.98, 0.1)) - }) - }) - }) - - Context("when passed an int/uint", func() { - Context("and there is no precision parameter", func() { - It("should just do strict equality", func() { - Ω(5).Should(BeNumerically("~", 5)) - Ω(5).ShouldNot(BeNumerically("~", 6)) - Ω(uint(5)).ShouldNot(BeNumerically("~", 6)) - }) - }) - - Context("and there is a precision parameter", func() { - It("should use precision paramter", func() { - Ω(5).Should(BeNumerically("~", 6, 2)) - Ω(5).ShouldNot(BeNumerically("~", 8, 2)) - Ω(uint(5)).Should(BeNumerically("~", 6, 1)) - }) - }) - }) - }) - }) - - Context("when passed a non-number", func() { - It("should error", func() { - success, err := (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{5}}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "=="}).Match(5) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "~", CompareTo: []interface{}{3.0, "foo"}}).Match(5.0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{"bar"}}).Match(5) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{"bar"}}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{nil}}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{0}}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed an unsupported comparator", func() { - It("should error", func() { - success, err := (&BeNumericallyMatcher{Comparator: "!=", CompareTo: []interface{}{5}}).Match(4) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_sent_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_sent_matcher_test.go deleted file mode 100644 index 381c2b4..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_sent_matcher_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package matchers_test - -import ( - "time" - . "github.com/onsi/gomega/matchers" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeSent", func() { - Context("when passed a channel and a matching type", func() { - Context("when the channel is ready to receive", func() { - It("should succeed and send the value down the channel", func() { - c := make(chan string) - d := make(chan string) - go func() { - val := <-c - d <- val - }() - - time.Sleep(10 * time.Millisecond) - - Ω(c).Should(BeSent("foo")) - Eventually(d).Should(Receive(Equal("foo"))) - }) - - It("should succeed (with a buffered channel)", func() { - c := make(chan string, 1) - Ω(c).Should(BeSent("foo")) - Ω(<-c).Should(Equal("foo")) - }) - }) - - Context("when the channel is not ready to receive", func() { - It("should fail and not send down the channel", func() { - c := make(chan string) - Ω(c).ShouldNot(BeSent("foo")) - Consistently(c).ShouldNot(Receive()) - }) - }) - - Context("when the channel is eventually ready to receive", func() { - It("should succeed", func() { - c := make(chan string) - d := make(chan string) - go func() { - time.Sleep(30 * time.Millisecond) - val := <-c - d <- val - }() - - Eventually(c).Should(BeSent("foo")) - Eventually(d).Should(Receive(Equal("foo"))) - }) - }) - - Context("when the channel is closed", func() { - It("should error", func() { - c := make(chan string) - close(c) - success, err := (&BeSentMatcher{Arg: "foo"}).Match(c) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - - It("should short-circuit Eventually", func() { - c := make(chan string) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(c, 10.0).Should(BeSent("foo")) - }) - Ω(failures).Should(HaveLen(1)) - Ω(time.Since(t)).Should(BeNumerically("<", time.Second)) - }) - }) - }) - - Context("when passed a channel and a non-matching type", func() { - It("should error", func() { - success, err := (&BeSentMatcher{Arg: "foo"}).Match(make(chan int, 1)) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a receive-only channel", func() { - It("should error", func() { - var c <-chan string - c = make(chan string, 1) - success, err := (&BeSentMatcher{Arg: "foo"}).Match(c) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a nonchannel", func() { - It("should error", func() { - success, err := (&BeSentMatcher{Arg: "foo"}).Match("bar") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go deleted file mode 100644 index feb33e5..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" - "time" -) - -var _ = Describe("BeTemporally", func() { - - var t0, t1, t2 time.Time - BeforeEach(func() { - t0 = time.Now() - t1 = t0.Add(time.Second) - t2 = t0.Add(-time.Second) - }) - - Context("When comparing times", func() { - - It("should support ==", func() { - Ω(t0).Should(BeTemporally("==", t0)) - Ω(t1).ShouldNot(BeTemporally("==", t0)) - Ω(t0).ShouldNot(BeTemporally("==", t1)) - Ω(t0).ShouldNot(BeTemporally("==", time.Time{})) - }) - - It("should support >", func() { - Ω(t0).Should(BeTemporally(">", t2)) - Ω(t0).ShouldNot(BeTemporally(">", t0)) - Ω(t2).ShouldNot(BeTemporally(">", t0)) - }) - - It("should support <", func() { - Ω(t0).Should(BeTemporally("<", t1)) - Ω(t0).ShouldNot(BeTemporally("<", t0)) - Ω(t1).ShouldNot(BeTemporally("<", t0)) - }) - - It("should support >=", func() { - Ω(t0).Should(BeTemporally(">=", t2)) - Ω(t0).Should(BeTemporally(">=", t0)) - Ω(t0).ShouldNot(BeTemporally(">=", t1)) - }) - - It("should support <=", func() { - Ω(t0).Should(BeTemporally("<=", t1)) - Ω(t0).Should(BeTemporally("<=", t0)) - Ω(t0).ShouldNot(BeTemporally("<=", t2)) - }) - - Context("when passed ~", func() { - Context("and there is no precision parameter", func() { - BeforeEach(func() { - t1 = t0.Add(time.Millisecond / 2) - t2 = t0.Add(-2 * time.Millisecond) - }) - It("should approximate", func() { - Ω(t0).Should(BeTemporally("~", t0)) - Ω(t0).Should(BeTemporally("~", t1)) - Ω(t0).ShouldNot(BeTemporally("~", t2)) - }) - }) - - Context("and there is a precision parameter", func() { - BeforeEach(func() { - t2 = t0.Add(3 * time.Second) - }) - It("should use precision paramter", func() { - d := 2 * time.Second - Ω(t0).Should(BeTemporally("~", t0, d)) - Ω(t0).Should(BeTemporally("~", t1, d)) - Ω(t0).ShouldNot(BeTemporally("~", t2, d)) - }) - }) - }) - }) - - Context("when passed a non-time", func() { - It("should error", func() { - success, err := (&BeTemporallyMatcher{Comparator: "==", CompareTo: t0}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeTemporallyMatcher{Comparator: "=="}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed an unsupported comparator", func() { - It("should error", func() { - success, err := (&BeTemporallyMatcher{Comparator: "!=", CompareTo: t0}).Match(t2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_true_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_true_matcher_test.go deleted file mode 100644 index ca32e56..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_true_matcher_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeTrue", func() { - It("should handle true and false correctly", func() { - Ω(true).Should(BeTrue()) - Ω(false).ShouldNot(BeTrue()) - }) - - It("should only support booleans", func() { - success, err := (&BeTrueMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_zero_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_zero_matcher_test.go deleted file mode 100644 index 8ec3643..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_zero_matcher_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeZero", func() { - It("should succeed if the passed in object is the zero value for its type", func() { - Ω(nil).Should(BeZero()) - - Ω("").Should(BeZero()) - Ω(" ").ShouldNot(BeZero()) - - Ω(0).Should(BeZero()) - Ω(1).ShouldNot(BeZero()) - - Ω(0.0).Should(BeZero()) - Ω(0.1).ShouldNot(BeZero()) - - // Ω([]int{}).Should(BeZero()) - Ω([]int{1}).ShouldNot(BeZero()) - - // Ω(map[string]int{}).Should(BeZero()) - Ω(map[string]int{"a": 1}).ShouldNot(BeZero()) - - Ω(myCustomType{}).Should(BeZero()) - Ω(myCustomType{s: "a"}).ShouldNot(BeZero()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/consist_of_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/consist_of_test.go deleted file mode 100644 index 0b230e3..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/consist_of_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ConsistOf", func() { - Context("with a slice", func() { - It("should do the right thing", func() { - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("baz", "bar", "foo")) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "bar", "foo", "foo")) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "foo")) - }) - }) - - Context("with an array", func() { - It("should do the right thing", func() { - Ω([3]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω([3]string{"foo", "bar", "baz"}).Should(ConsistOf("baz", "bar", "foo")) - Ω([3]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "bar", "foo", "foo")) - Ω([3]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "foo")) - }) - }) - - Context("with a map", func() { - It("should apply to the values", func() { - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).Should(ConsistOf("baz", "bar", "foo")) - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).ShouldNot(ConsistOf("baz", "bar", "foo", "foo")) - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).ShouldNot(ConsistOf("baz", "foo")) - }) - - }) - - Context("with anything else", func() { - It("should error", func() { - failures := InterceptGomegaFailures(func() { - Ω("foo").Should(ConsistOf("f", "o", "o")) - }) - - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when passed matchers", func() { - It("should pass if the matchers pass", func() { - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", MatchRegexp("^ba"), "baz")) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("foo", MatchRegexp("^ba"))) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("foo", MatchRegexp("^ba"), MatchRegexp("foo"))) - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", MatchRegexp("^ba"), MatchRegexp("^ba"))) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("foo", MatchRegexp("^ba"), MatchRegexp("turducken"))) - }) - - It("should not depend on the order of the matchers", func() { - Ω([][]int{[]int{1, 2}, []int{2}}).Should(ConsistOf(ContainElement(1), ContainElement(2))) - Ω([][]int{[]int{1, 2}, []int{2}}).Should(ConsistOf(ContainElement(2), ContainElement(1))) - }) - - Context("when a matcher errors", func() { - It("should soldier on", func() { - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf(BeFalse(), "foo", "bar")) - Ω([]interface{}{"foo", "bar", false}).Should(ConsistOf(BeFalse(), ContainSubstring("foo"), "bar")) - }) - }) - }) - - Context("when passed exactly one argument, and that argument is a slice", func() { - It("should match against the elements of that argument", func() { - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf([]string{"foo", "bar", "baz"})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_element_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_element_matcher_test.go deleted file mode 100644 index 38ee518..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_element_matcher_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("ContainElement", func() { - Context("when passed a supported type", func() { - Context("and expecting a non-matcher", func() { - It("should do the right thing", func() { - Ω([2]int{1, 2}).Should(ContainElement(2)) - Ω([2]int{1, 2}).ShouldNot(ContainElement(3)) - - Ω([]int{1, 2}).Should(ContainElement(2)) - Ω([]int{1, 2}).ShouldNot(ContainElement(3)) - - Ω(map[string]int{"foo": 1, "bar": 2}).Should(ContainElement(2)) - Ω(map[int]int{3: 1, 4: 2}).ShouldNot(ContainElement(3)) - - arr := make([]myCustomType, 2) - arr[0] = myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}} - arr[1] = myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "c"}} - Ω(arr).Should(ContainElement(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}})) - Ω(arr).ShouldNot(ContainElement(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"b", "c"}})) - }) - }) - - Context("and expecting a matcher", func() { - It("should pass each element through the matcher", func() { - Ω([]int{1, 2, 3}).Should(ContainElement(BeNumerically(">=", 3))) - Ω([]int{1, 2, 3}).ShouldNot(ContainElement(BeNumerically(">", 3))) - Ω(map[string]int{"foo": 1, "bar": 2}).Should(ContainElement(BeNumerically(">=", 2))) - Ω(map[string]int{"foo": 1, "bar": 2}).ShouldNot(ContainElement(BeNumerically(">", 2))) - }) - - It("should power through even if the matcher ever fails", func() { - Ω([]interface{}{1, 2, "3", 4}).Should(ContainElement(BeNumerically(">=", 3))) - }) - - It("should fail if the matcher fails", func() { - actual := []interface{}{1, 2, "3", "4"} - success, err := (&ContainElementMatcher{Element: BeNumerically(">=", 3)}).Match(actual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilSlice []int - Ω(nilSlice).ShouldNot(ContainElement(1)) - - var nilMap map[int]string - Ω(nilMap).ShouldNot(ContainElement("foo")) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&ContainElementMatcher{Element: 0}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ContainElementMatcher{Element: 0}).Match("abc") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ContainElementMatcher{Element: 0}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go deleted file mode 100644 index 6935168..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("ContainSubstringMatcher", func() { - Context("when actual is a string", func() { - It("should match against the string", func() { - Ω("Marvelous").Should(ContainSubstring("rve")) - Ω("Marvelous").ShouldNot(ContainSubstring("boo")) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω("Marvelous3").Should(ContainSubstring("velous%d", 3)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match agains the returned string", func() { - Ω(&myStringer{a: "Abc3"}).Should(ContainSubstring("bc3")) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&ContainSubstringMatcher{Substr: "2"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/equal_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/equal_matcher_test.go deleted file mode 100644 index ef0d137..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/equal_matcher_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package matchers_test - -import ( - "errors" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("Equal", func() { - Context("when asserting that nil equals nil", func() { - It("should error", func() { - success, err := (&EqualMatcher{Expected: nil}).Match(nil) - - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("When asserting equality between objects", func() { - It("should do the right thing", func() { - Ω(5).Should(Equal(5)) - Ω(5.0).Should(Equal(5.0)) - - Ω(5).ShouldNot(Equal("5")) - Ω(5).ShouldNot(Equal(5.0)) - Ω(5).ShouldNot(Equal(3)) - - Ω("5").Should(Equal("5")) - Ω([]int{1, 2}).Should(Equal([]int{1, 2})) - Ω([]int{1, 2}).ShouldNot(Equal([]int{2, 1})) - Ω(map[string]string{"a": "b", "c": "d"}).Should(Equal(map[string]string{"a": "b", "c": "d"})) - Ω(map[string]string{"a": "b", "c": "d"}).ShouldNot(Equal(map[string]string{"a": "b", "c": "e"})) - Ω(errors.New("foo")).Should(Equal(errors.New("foo"))) - Ω(errors.New("foo")).ShouldNot(Equal(errors.New("bar"))) - - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).Should(Equal(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "bar", n: 3, f: 2.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "foo", n: 2, f: 2.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "foo", n: 3, f: 3.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b", "c"}})) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_matcher_test.go deleted file mode 100644 index c663e30..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_matcher_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveKey", func() { - var ( - stringKeys map[string]int - intKeys map[int]string - objKeys map[*myCustomType]string - - customA *myCustomType - customB *myCustomType - ) - BeforeEach(func() { - stringKeys = map[string]int{"foo": 2, "bar": 3} - intKeys = map[int]string{2: "foo", 3: "bar"} - - customA = &myCustomType{s: "a", n: 2, f: 2.3, arr: []string{"ice", "cream"}} - customB = &myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}} - objKeys = map[*myCustomType]string{customA: "aardvark", customB: "kangaroo"} - }) - - Context("when passed a map", func() { - It("should do the right thing", func() { - Ω(stringKeys).Should(HaveKey("foo")) - Ω(stringKeys).ShouldNot(HaveKey("baz")) - - Ω(intKeys).Should(HaveKey(2)) - Ω(intKeys).ShouldNot(HaveKey(4)) - - Ω(objKeys).Should(HaveKey(customA)) - Ω(objKeys).Should(HaveKey(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}})) - Ω(objKeys).ShouldNot(HaveKey(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"apple", "pie"}})) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilMap map[int]string - Ω(nilMap).ShouldNot(HaveKey("foo")) - }) - }) - - Context("when the passed in key is actually a matcher", func() { - It("should pass each element through the matcher", func() { - Ω(stringKeys).Should(HaveKey(ContainSubstring("oo"))) - Ω(stringKeys).ShouldNot(HaveKey(ContainSubstring("foobar"))) - }) - - It("should fail if the matcher ever fails", func() { - actual := map[int]string{1: "a", 3: "b", 2: "c"} - success, err := (&HaveKeyMatcher{Key: ContainSubstring("ar")}).Match(actual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed something that is not a map", func() { - It("should error", func() { - success, err := (&HaveKeyMatcher{Key: "foo"}).Match([]string{"foo"}) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveKeyMatcher{Key: "foo"}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go deleted file mode 100644 index 06a2242..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveKeyWithValue", func() { - var ( - stringKeys map[string]int - intKeys map[int]string - objKeys map[*myCustomType]*myCustomType - - customA *myCustomType - customB *myCustomType - ) - BeforeEach(func() { - stringKeys = map[string]int{"foo": 2, "bar": 3} - intKeys = map[int]string{2: "foo", 3: "bar"} - - customA = &myCustomType{s: "a", n: 2, f: 2.3, arr: []string{"ice", "cream"}} - customB = &myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}} - objKeys = map[*myCustomType]*myCustomType{customA: customA, customB: customA} - }) - - Context("when passed a map", func() { - It("should do the right thing", func() { - Ω(stringKeys).Should(HaveKeyWithValue("foo", 2)) - Ω(stringKeys).ShouldNot(HaveKeyWithValue("foo", 1)) - Ω(stringKeys).ShouldNot(HaveKeyWithValue("baz", 2)) - Ω(stringKeys).ShouldNot(HaveKeyWithValue("baz", 1)) - - Ω(intKeys).Should(HaveKeyWithValue(2, "foo")) - Ω(intKeys).ShouldNot(HaveKeyWithValue(4, "foo")) - Ω(intKeys).ShouldNot(HaveKeyWithValue(2, "baz")) - - Ω(objKeys).Should(HaveKeyWithValue(customA, customA)) - Ω(objKeys).Should(HaveKeyWithValue(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}}, &myCustomType{s: "a", n: 2, f: 2.3, arr: []string{"ice", "cream"}})) - Ω(objKeys).ShouldNot(HaveKeyWithValue(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"apple", "pie"}}, customA)) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilMap map[int]string - Ω(nilMap).ShouldNot(HaveKeyWithValue("foo", "bar")) - }) - }) - - Context("when the passed in key or value is actually a matcher", func() { - It("should pass each element through the matcher", func() { - Ω(stringKeys).Should(HaveKeyWithValue(ContainSubstring("oo"), 2)) - Ω(intKeys).Should(HaveKeyWithValue(2, ContainSubstring("oo"))) - Ω(stringKeys).ShouldNot(HaveKeyWithValue(ContainSubstring("foobar"), 2)) - }) - - It("should fail if the matcher ever fails", func() { - actual := map[int]string{1: "a", 3: "b", 2: "c"} - success, err := (&HaveKeyWithValueMatcher{Key: ContainSubstring("ar"), Value: 2}).Match(actual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - otherActual := map[string]int{"a": 1, "b": 2, "c": 3} - success, err = (&HaveKeyWithValueMatcher{Key: "a", Value: ContainSubstring("1")}).Match(otherActual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed something that is not a map", func() { - It("should error", func() { - success, err := (&HaveKeyWithValueMatcher{Key: "foo", Value: "bar"}).Match([]string{"foo"}) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveKeyWithValueMatcher{Key: "foo", Value: "bar"}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_len_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_len_matcher_test.go deleted file mode 100644 index 1e6aa69..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_len_matcher_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveLen", func() { - Context("when passed a supported type", func() { - It("should do the right thing", func() { - Ω("").Should(HaveLen(0)) - Ω("AA").Should(HaveLen(2)) - - Ω([0]int{}).Should(HaveLen(0)) - Ω([2]int{1, 2}).Should(HaveLen(2)) - - Ω([]int{}).Should(HaveLen(0)) - Ω([]int{1, 2, 3}).Should(HaveLen(3)) - - Ω(map[string]int{}).Should(HaveLen(0)) - Ω(map[string]int{"a": 1, "b": 2, "c": 3, "d": 4}).Should(HaveLen(4)) - - c := make(chan bool, 3) - Ω(c).Should(HaveLen(0)) - c <- true - c <- true - Ω(c).Should(HaveLen(2)) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilSlice []int - Ω(nilSlice).Should(HaveLen(0)) - - var nilMap map[int]string - Ω(nilMap).Should(HaveLen(0)) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&HaveLenMatcher{Count: 0}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveLenMatcher{Count: 0}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_occurred_matcher.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_occurred_matcher.go deleted file mode 100644 index 3dfe9e1..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_occurred_matcher.go +++ /dev/null @@ -1,29 +0,0 @@ -package matchers - -import ( - "fmt" - "github.com/onsi/gomega/format" -) - -type HaveOccurredMatcher struct { -} - -func (matcher *HaveOccurredMatcher) Match(actual interface{}) (success bool, err error) { - if isNil(actual) { - return false, nil - } - - if isError(actual) { - return true, nil - } - - return false, fmt.Errorf("Expected an error. Got:\n%s", format.Object(actual, 1)) -} - -func (matcher *HaveOccurredMatcher) FailureMessage(actual interface{}) (message string) { - return fmt.Sprintf("Expected an error to have occured. Got:\n%s", format.Object(actual, 1)) -} - -func (matcher *HaveOccurredMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return fmt.Sprintf("Expected error:\n%s\n%s\n%s", format.Object(actual, 1), format.IndentString(actual.(error).Error(), 1), "not to have occurred") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go deleted file mode 100644 index 0fc35a9..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package matchers_test - -import ( - "errors" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -type CustomErr struct { - msg string -} - -func (e *CustomErr) Error() string { - return e.msg -} - -var _ = Describe("HaveOccurred", func() { - It("should succeed if matching an error", func() { - Ω(errors.New("Foo")).Should(HaveOccurred()) - }) - - It("should not succeed with nil", func() { - Ω(nil).ShouldNot(HaveOccurred()) - }) - - It("should only support errors and nil", func() { - success, err := (&HaveOccurredMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveOccurredMatcher{}).Match("") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - - It("should succeed with pointer types that conform to error interface", func() { - err := &CustomErr{"ohai"} - Ω(err).Should(HaveOccurred()) - }) - - It("should not succeed with nil pointers to types that conform to error interface", func() { - var err *CustomErr = nil - Ω(err).ShouldNot(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go deleted file mode 100644 index bec3f97..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HavePrefixMatcher", func() { - Context("when actual is a string", func() { - It("should match a string prefix", func() { - Ω("Ab").Should(HavePrefix("A")) - Ω("A").ShouldNot(HavePrefix("Ab")) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω("C3PO").Should(HavePrefix("C%dP", 3)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match against the returned string", func() { - Ω(&myStringer{a: "Ab"}).Should(HavePrefix("A")) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&HavePrefixMatcher{Prefix: "2"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go deleted file mode 100644 index 72e8975..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveSuffixMatcher", func() { - Context("when actual is a string", func() { - It("should match a string suffix", func() { - Ω("Ab").Should(HaveSuffix("b")) - Ω("A").ShouldNot(HaveSuffix("Ab")) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω("C3PO").Should(HaveSuffix("%dPO", 3)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match against the returned string", func() { - Ω(&myStringer{a: "Ab"}).Should(HaveSuffix("b")) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&HaveSuffixMatcher{Suffix: "2"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_error_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_error_matcher_test.go deleted file mode 100644 index 338b512..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_error_matcher_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package matchers_test - -import ( - "errors" - "fmt" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -type CustomError struct { -} - -func (c CustomError) Error() string { - return "an error" -} - -var _ = Describe("MatchErrorMatcher", func() { - Context("When asserting against an error", func() { - It("should succeed when matching with an error", func() { - err := errors.New("an error") - fmtErr := fmt.Errorf("an error") - customErr := CustomError{} - - Ω(err).Should(MatchError(errors.New("an error"))) - Ω(err).ShouldNot(MatchError(errors.New("another error"))) - - Ω(fmtErr).Should(MatchError(errors.New("an error"))) - Ω(customErr).Should(MatchError(CustomError{})) - }) - - It("should succeed when matching with a string", func() { - err := errors.New("an error") - fmtErr := fmt.Errorf("an error") - customErr := CustomError{} - - Ω(err).Should(MatchError("an error")) - Ω(err).ShouldNot(MatchError("another error")) - - Ω(fmtErr).Should(MatchError("an error")) - Ω(customErr).Should(MatchError("an error")) - }) - - Context("when passed a matcher", func() { - It("should pass if the matcher passes against the error string", func() { - err := errors.New("error 123 abc") - - Ω(err).Should(MatchError(MatchRegexp(`\d{3}`))) - }) - - It("should fail if the matcher fails against the error string", func() { - err := errors.New("no digits") - Ω(err).ShouldNot(MatchError(MatchRegexp(`\d`))) - }) - }) - - It("should fail when passed anything else", func() { - actualErr := errors.New("an error") - _, err := (&MatchErrorMatcher{ - Expected: []byte("an error"), - }).Match(actualErr) - Ω(err).Should(HaveOccurred()) - - _, err = (&MatchErrorMatcher{ - Expected: 3, - }).Match(actualErr) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed nil", func() { - It("should fail", func() { - _, err := (&MatchErrorMatcher{ - Expected: "an error", - }).Match(nil) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a non-error", func() { - It("should fail", func() { - _, err := (&MatchErrorMatcher{ - Expected: "an error", - }).Match("an error") - Ω(err).Should(HaveOccurred()) - - _, err = (&MatchErrorMatcher{ - Expected: "an error", - }).Match(3) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_json_matcher.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_json_matcher.go deleted file mode 100644 index efc5e15..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_json_matcher.go +++ /dev/null @@ -1,61 +0,0 @@ -package matchers - -import ( - "bytes" - "encoding/json" - "fmt" - "github.com/onsi/gomega/format" - "reflect" -) - -type MatchJSONMatcher struct { - JSONToMatch interface{} -} - -func (matcher *MatchJSONMatcher) Match(actual interface{}) (success bool, err error) { - actualString, expectedString, err := matcher.prettyPrint(actual) - if err != nil { - return false, err - } - - var aval interface{} - var eval interface{} - - // this is guarded by prettyPrint - json.Unmarshal([]byte(actualString), &aval) - json.Unmarshal([]byte(expectedString), &eval) - - return reflect.DeepEqual(aval, eval), nil -} - -func (matcher *MatchJSONMatcher) FailureMessage(actual interface{}) (message string) { - actualString, expectedString, _ := matcher.prettyPrint(actual) - return format.Message(actualString, "to match JSON of", expectedString) -} - -func (matcher *MatchJSONMatcher) NegatedFailureMessage(actual interface{}) (message string) { - actualString, expectedString, _ := matcher.prettyPrint(actual) - return format.Message(actualString, "not to match JSON of", expectedString) -} - -func (matcher *MatchJSONMatcher) prettyPrint(actual interface{}) (actualFormatted, expectedFormatted string, err error) { - actualString, aok := toString(actual) - expectedString, eok := toString(matcher.JSONToMatch) - - if !(aok && eok) { - return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1)) - } - - abuf := new(bytes.Buffer) - ebuf := new(bytes.Buffer) - - if err := json.Indent(abuf, []byte(actualString), "", " "); err != nil { - return "", "", err - } - - if err := json.Indent(ebuf, []byte(expectedString), "", " "); err != nil { - return "", "", err - } - - return abuf.String(), ebuf.String(), nil -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_json_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_json_matcher_test.go deleted file mode 100644 index c1924ba..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_json_matcher_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("MatchJSONMatcher", func() { - Context("When passed stringifiables", func() { - It("should succeed if the JSON matches", func() { - Ω("{}").Should(MatchJSON("{}")) - Ω(`{"a":1}`).Should(MatchJSON(`{"a":1}`)) - Ω(`{ - "a":1 - }`).Should(MatchJSON(`{"a":1}`)) - Ω(`{"a":1, "b":2}`).Should(MatchJSON(`{"b":2, "a":1}`)) - Ω(`{"a":1}`).ShouldNot(MatchJSON(`{"b":2, "a":1}`)) - }) - - It("should work with byte arrays", func() { - Ω([]byte("{}")).Should(MatchJSON([]byte("{}"))) - Ω("{}").Should(MatchJSON([]byte("{}"))) - Ω([]byte("{}")).Should(MatchJSON("{}")) - }) - }) - - Context("when either side is not valid JSON", func() { - It("should error", func() { - success, err := (&MatchJSONMatcher{JSONToMatch: `oops`}).Match(`{}`) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&MatchJSONMatcher{JSONToMatch: `{}`}).Match(`oops`) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when either side is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&MatchJSONMatcher{JSONToMatch: "{}"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&MatchJSONMatcher{JSONToMatch: 2}).Match("{}") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&MatchJSONMatcher{JSONToMatch: nil}).Match("{}") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&MatchJSONMatcher{JSONToMatch: 2}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go deleted file mode 100644 index bb521cc..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("MatchRegexp", func() { - Context("when actual is a string", func() { - It("should match against the string", func() { - Ω(" a2!bla").Should(MatchRegexp(`\d!`)) - Ω(" a2!bla").ShouldNot(MatchRegexp(`[A-Z]`)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match agains the returned string", func() { - Ω(&myStringer{a: "Abc3"}).Should(MatchRegexp(`[A-Z][a-z]+\d`)) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω(" a23!bla").Should(MatchRegexp(`\d%d!`, 3)) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&MatchRegexpMatcher{Regexp: `\d`}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when the passed in regexp fails to compile", func() { - It("should error", func() { - success, err := (&MatchRegexpMatcher{Regexp: "("}).Match("Foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go deleted file mode 100644 index 4bc6d9d..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package matchers_test - -import ( - "testing" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type myStringer struct { - a string -} - -func (s *myStringer) String() string { - return s.a -} - -type StringAlias string - -type myCustomType struct { - s string - n int - f float32 - arr []string -} - -func Test(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Gomega") -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/panic_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/panic_matcher_test.go deleted file mode 100644 index 17f3935..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/panic_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("Panic", func() { - Context("when passed something that's not a function that takes zero arguments and returns nothing", func() { - It("should error", func() { - success, err := (&PanicMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&PanicMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&PanicMatcher{}).Match(func(foo string) {}) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&PanicMatcher{}).Match(func() string { return "bar" }) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a function of the correct type", func() { - It("should call the function and pass if the function panics", func() { - Ω(func() { panic("ack!") }).Should(Panic()) - Ω(func() {}).ShouldNot(Panic()) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/receive_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/receive_matcher_test.go deleted file mode 100644 index 938c078..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/receive_matcher_test.go +++ /dev/null @@ -1,280 +0,0 @@ -package matchers_test - -import ( - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -type kungFuActor interface { - DrunkenMaster() bool -} - -type jackie struct { - name string -} - -func (j *jackie) DrunkenMaster() bool { - return true -} - -var _ = Describe("ReceiveMatcher", func() { - Context("with no argument", func() { - Context("for a buffered channel", func() { - It("should succeed", func() { - channel := make(chan bool, 1) - - Ω(channel).ShouldNot(Receive()) - - channel <- true - - Ω(channel).Should(Receive()) - }) - }) - - Context("for an unbuffered channel", func() { - It("should succeed (eventually)", func() { - channel := make(chan bool) - - Ω(channel).ShouldNot(Receive()) - - go func() { - time.Sleep(10 * time.Millisecond) - channel <- true - }() - - Eventually(channel).Should(Receive()) - }) - }) - }) - - Context("with a pointer argument", func() { - Context("of the correct type", func() { - It("should write the value received on the channel to the pointer", func() { - channel := make(chan int, 1) - - var value int - - Ω(channel).ShouldNot(Receive(&value)) - Ω(value).Should(BeZero()) - - channel <- 17 - - Ω(channel).Should(Receive(&value)) - Ω(value).Should(Equal(17)) - }) - }) - - Context("to various types of objects", func() { - It("should work", func() { - //channels of strings - stringChan := make(chan string, 1) - stringChan <- "foo" - - var s string - Ω(stringChan).Should(Receive(&s)) - Ω(s).Should(Equal("foo")) - - //channels of slices - sliceChan := make(chan []bool, 1) - sliceChan <- []bool{true, true, false} - - var sl []bool - Ω(sliceChan).Should(Receive(&sl)) - Ω(sl).Should(Equal([]bool{true, true, false})) - - //channels of channels - chanChan := make(chan chan bool, 1) - c := make(chan bool) - chanChan <- c - - var receivedC chan bool - Ω(chanChan).Should(Receive(&receivedC)) - Ω(receivedC).Should(Equal(c)) - - //channels of interfaces - jackieChan := make(chan kungFuActor, 1) - aJackie := &jackie{name: "Jackie Chan"} - jackieChan <- aJackie - - var theJackie kungFuActor - Ω(jackieChan).Should(Receive(&theJackie)) - Ω(theJackie).Should(Equal(aJackie)) - }) - }) - - Context("of the wrong type", func() { - It("should error", func() { - channel := make(chan int) - var incorrectType bool - - success, err := (&ReceiveMatcher{Arg: &incorrectType}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - var notAPointer int - success, err = (&ReceiveMatcher{Arg: notAPointer}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - }) - - Context("with a matcher", func() { - It("should defer to the underlying matcher", func() { - intChannel := make(chan int, 1) - intChannel <- 3 - Ω(intChannel).Should(Receive(Equal(3))) - - intChannel <- 2 - Ω(intChannel).ShouldNot(Receive(Equal(3))) - - stringChannel := make(chan []string, 1) - stringChannel <- []string{"foo", "bar", "baz"} - Ω(stringChannel).Should(Receive(ContainElement(ContainSubstring("fo")))) - - stringChannel <- []string{"foo", "bar", "baz"} - Ω(stringChannel).ShouldNot(Receive(ContainElement(ContainSubstring("archipelago")))) - }) - - It("should defer to the underlying matcher for the message", func() { - matcher := Receive(Equal(3)) - channel := make(chan int, 1) - channel <- 2 - matcher.Match(channel) - Ω(matcher.FailureMessage(channel)).Should(MatchRegexp(`Expected\s+: 2\s+to equal\s+: 3`)) - - channel <- 3 - matcher.Match(channel) - Ω(matcher.NegatedFailureMessage(channel)).Should(MatchRegexp(`Expected\s+: 3\s+not to equal\s+: 3`)) - }) - - It("should work just fine with Eventually", func() { - stringChannel := make(chan string) - - go func() { - time.Sleep(5 * time.Millisecond) - stringChannel <- "A" - time.Sleep(5 * time.Millisecond) - stringChannel <- "B" - }() - - Eventually(stringChannel).Should(Receive(Equal("B"))) - }) - - Context("if the matcher errors", func() { - It("should error", func() { - channel := make(chan int, 1) - channel <- 3 - success, err := (&ReceiveMatcher{Arg: ContainSubstring("three")}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("if nothing is received", func() { - It("should fail", func() { - channel := make(chan int, 1) - success, err := (&ReceiveMatcher{Arg: Equal(1)}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).ShouldNot(HaveOccurred()) - }) - }) - }) - - Context("When actual is a *closed* channel", func() { - Context("for a buffered channel", func() { - It("should work until it hits the end of the buffer", func() { - channel := make(chan bool, 1) - channel <- true - - close(channel) - - Ω(channel).Should(Receive()) - Ω(channel).ShouldNot(Receive()) - }) - }) - - Context("for an unbuffered channel", func() { - It("should always fail", func() { - channel := make(chan bool) - close(channel) - - Ω(channel).ShouldNot(Receive()) - }) - }) - }) - - Context("When actual is a send-only channel", func() { - It("should error", func() { - channel := make(chan bool) - - var writerChannel chan<- bool - writerChannel = channel - - success, err := (&ReceiveMatcher{}).Match(writerChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when acutal is a non-channel", func() { - It("should error", func() { - var nilChannel chan bool - - success, err := (&ReceiveMatcher{}).Match(nilChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ReceiveMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ReceiveMatcher{}).Match(3) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Describe("when used with eventually and a custom matcher", func() { - It("should return the matcher's error when a failing value is received on the channel, instead of the must receive something failure", func() { - failures := InterceptGomegaFailures(func() { - c := make(chan string, 0) - Eventually(c, 0.01).Should(Receive(Equal("hello"))) - }) - Ω(failures[0]).Should(ContainSubstring("When passed a matcher, ReceiveMatcher's channel *must* receive something.")) - - failures = InterceptGomegaFailures(func() { - c := make(chan string, 1) - c <- "hi" - Eventually(c, 0.01).Should(Receive(Equal("hello"))) - }) - Ω(failures[0]).Should(ContainSubstring(": hello")) - }) - }) - - Describe("Bailing early", func() { - It("should bail early when passed a closed channel", func() { - c := make(chan bool) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(c).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - - It("should bail early when passed a non-channel", func() { - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(3).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/succeed_matcher.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/succeed_matcher.go deleted file mode 100644 index f7dd853..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/succeed_matcher.go +++ /dev/null @@ -1,30 +0,0 @@ -package matchers - -import ( - "fmt" - - "github.com/onsi/gomega/format" -) - -type SucceedMatcher struct { -} - -func (matcher *SucceedMatcher) Match(actual interface{}) (success bool, err error) { - if actual == nil { - return true, nil - } - - if isError(actual) { - return false, nil - } - - return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1)) -} - -func (matcher *SucceedMatcher) FailureMessage(actual interface{}) (message string) { - return fmt.Sprintf("Expected success, but got an error:\n%s\n%s", format.Object(actual, 1), format.IndentString(actual.(error).Error(), 1)) -} - -func (matcher *SucceedMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return "Expected failure, but got no error." -} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/succeed_matcher_test.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/succeed_matcher_test.go deleted file mode 100644 index 3562e70..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/succeed_matcher_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package matchers_test - -import ( - "errors" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -func Erroring() error { - return errors.New("bam") -} - -func NotErroring() error { - return nil -} - -type AnyType struct{} - -func Invalid() *AnyType { - return nil -} - -var _ = Describe("Succeed", func() { - It("should succeed if the function succeeds", func() { - Ω(NotErroring()).Should(Succeed()) - }) - - It("should succeed (in the negated) if the function errored", func() { - Ω(Erroring()).ShouldNot(Succeed()) - }) - - It("should not if passed a non-error", func() { - success, err := (&SucceedMatcher{}).Match(Invalid()) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) -}) diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE deleted file mode 100644 index 8edd817..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2014 Amit Kumar Gupta - -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/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/util/util.go b/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/util/util.go deleted file mode 100644 index a24cd27..0000000 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/util/util.go +++ /dev/null @@ -1,7 +0,0 @@ -package util - -import "math" - -func Odd(n int) bool { - return math.Mod(float64(n), 2.0) == 1.0 -} diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/.travis.yml b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/.travis.yml deleted file mode 100644 index b19c2e5..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: go -go: - - 1.2 -before_install: -- go get github.com/onsi/ginkgo/... -- go get github.com/onsi/gomega/... -- go install github.com/onsi/ginkgo/ginkgo -script: PATH=$PATH:$HOME/gopath/bin ginkgo -r . -branches: - only: - - master diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/README.md b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/README.md deleted file mode 100644 index a591f1d..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Jibber Jabber [![Build Status](https://travis-ci.org/pivotal-cf-experimental/jibber_jabber.svg?branch=master)](https://travis-ci.org/pivotal-cf-experimental/jibber_jabber) -Jibber Jabber is a GoLang Library that can be used to detect an operating system's current language. - -### OS Support - -OSX and Linux via the `LC_ALL` and `LANG` environment variables. These are standard variables that are used in ALL versions of UNIX for language detection. - -Windows via [GetUserDefaultLocaleName](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318136.aspx) and [GetSystemDefaultLocaleName](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318122.aspx) system calls. These calls are supported in Windows Vista and up. - -# Usage -Add the following line to your go `import`: - -``` - "github.com/pivotal-cf-experimental/jibber_jabber" -``` - -### DetectIETF -`DetectIETF` will return the current locale as a string. The format of the locale will be the [ISO 639](http://en.wikipedia.org/wiki/ISO_639) two-letter language code, a DASH, then an [ISO 3166](http://en.wikipedia.org/wiki/ISO_3166-1) two-letter country code. - -``` - userLocale, err := jibber_jabber.DetectIETF() - println("Locale:", userLocale) -``` - -### DetectLanguage -`DetectLanguage` will return the current languge as a string. The format will be the [ISO 639](http://en.wikipedia.org/wiki/ISO_639) two-letter language code. - -``` - userLanguage, err := jibber_jabber.DetectLanguage() - println("Language:", userLanguage) -``` - -### DetectTerritory -`DetectTerritory` will return the current locale territory as a string. The format will be the [ISO 3166](http://en.wikipedia.org/wiki/ISO_3166-1) two-letter country code. - -``` - localeTerritory, err := jibber_jabber.DetectTerritory() - println("Territory:", localeTerritory) -``` - -### Errors -All the Detect commands will return an error if they are unable to read the Locale from the system. - -For Windows, additional error information is provided due to the nature of the system call being used. diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/ci/scripts/windows-64-test.bat b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/ci/scripts/windows-64-test.bat deleted file mode 100644 index b9a87bf..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/ci/scripts/windows-64-test.bat +++ /dev/null @@ -1,5 +0,0 @@ -git fetch -git checkout %GIT_COMMIT% - -SET GOPATH=%CD%\Godeps\_workspace;c:\Users\Administrator\go -c:\Go\bin\go test -v . diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber.go b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber.go deleted file mode 100644 index 45d288e..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber.go +++ /dev/null @@ -1,22 +0,0 @@ -package jibber_jabber - -import ( - "strings" -) - -const ( - COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE = "Could not detect Language" -) - -func splitLocale(locale string) (string, string) { - formattedLocale := strings.Split(locale, ".")[0] - formattedLocale = strings.Replace(formattedLocale, "-", "_", -1) - - pieces := strings.Split(formattedLocale, "_") - language := pieces[0] - territory := "" - if len(pieces) > 1 { - territory = strings.Split(formattedLocale, "_")[1] - } - return language, territory -} diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_suite_test.go b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_suite_test.go deleted file mode 100644 index 3da19c8..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package jibber_jabber_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestJibberJabber(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Jibber Jabber Suite") -} diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_unix.go b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_unix.go deleted file mode 100644 index 374d761..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_unix.go +++ /dev/null @@ -1,57 +0,0 @@ -// +build darwin freebsd linux netbsd openbsd - -package jibber_jabber - -import ( - "errors" - "os" - "strings" -) - -func getLangFromEnv() (locale string) { - locale = os.Getenv("LC_ALL") - if locale == "" { - locale = os.Getenv("LANG") - } - return -} - -func getUnixLocale() (unix_locale string, err error) { - unix_locale = getLangFromEnv() - if unix_locale == "" { - err = errors.New(COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE) - } - - return -} - -func DetectIETF() (locale string, err error) { - unix_locale, err := getUnixLocale() - if err == nil { - language, territory := splitLocale(unix_locale) - locale = language - if territory != "" { - locale = strings.Join([]string{language, territory}, "-") - } - } - - return -} - -func DetectLanguage() (language string, err error) { - unix_locale, err := getUnixLocale() - if err == nil { - language, _ = splitLocale(unix_locale) - } - - return -} - -func DetectTerritory() (territory string, err error) { - unix_locale, err := getUnixLocale() - if err == nil { - _, territory = splitLocale(unix_locale) - } - - return -} diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_unix_test.go b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_unix_test.go deleted file mode 100644 index a32e538..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_unix_test.go +++ /dev/null @@ -1,103 +0,0 @@ -// +build darwin freebsd linux netbsd openbsd - -package jibber_jabber_test - -import ( - . "github.com/pivotal-cf-experimental/jibber_jabber" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Unix", func() { - AfterEach(func() { - os.Setenv("LC_ALL", "") - os.Setenv("LANG", "en_US.UTF-8") - }) - - Describe("#DetectIETF", func() { - Context("Returns IETF encoded locale", func() { - It("should return the locale set to LC_ALL", func() { - os.Setenv("LC_ALL", "fr_FR.UTF-8") - result, _ := DetectIETF() - Ω(result).Should(Equal("fr-FR")) - }) - - It("should return the locale set to LANG if LC_ALL isn't set", func() { - os.Setenv("LANG", "fr_FR.UTF-8") - - result, _ := DetectIETF() - Ω(result).Should(Equal("fr-FR")) - }) - - It("should return an error if it cannot detect a locale", func() { - os.Setenv("LANG", "") - - _, err := DetectIETF() - Ω(err.Error()).Should(Equal(COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE)) - }) - }) - - Context("when the locale is simply 'fr'", func() { - BeforeEach(func() { - os.Setenv("LANG", "fr") - }) - - It("should return the locale without a territory", func() { - language, err := DetectIETF() - Ω(err).ShouldNot(HaveOccurred()) - Ω(language).Should(Equal("fr")) - }) - }) - }) - - Describe("#DetectLanguage", func() { - Context("Returns encoded language", func() { - It("should return the language set to LC_ALL", func() { - os.Setenv("LC_ALL", "fr_FR.UTF-8") - result, _ := DetectLanguage() - Ω(result).Should(Equal("fr")) - }) - - It("should return the language set to LANG if LC_ALL isn't set", func() { - os.Setenv("LANG", "fr_FR.UTF-8") - - result, _ := DetectLanguage() - Ω(result).Should(Equal("fr")) - }) - - It("should return an error if it cannot detect a language", func() { - os.Setenv("LANG", "") - - _, err := DetectLanguage() - Ω(err.Error()).Should(Equal(COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE)) - }) - }) - }) - - Describe("#DetectTerritory", func() { - Context("Returns encoded territory", func() { - It("should return the territory set to LC_ALL", func() { - os.Setenv("LC_ALL", "fr_FR.UTF-8") - result, _ := DetectTerritory() - Ω(result).Should(Equal("FR")) - }) - - It("should return the territory set to LANG if LC_ALL isn't set", func() { - os.Setenv("LANG", "fr_FR.UTF-8") - - result, _ := DetectTerritory() - Ω(result).Should(Equal("FR")) - }) - - It("should return an error if it cannot detect a territory", func() { - os.Setenv("LANG", "") - - _, err := DetectTerritory() - Ω(err.Error()).Should(Equal(COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE)) - }) - }) - }) - -}) diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_windows.go b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_windows.go deleted file mode 100644 index 7f14881..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_windows.go +++ /dev/null @@ -1,114 +0,0 @@ -// +build windows - -package jibber_jabber - -import ( - "errors" - "syscall" - "unsafe" -) - -const LOCALE_NAME_MAX_LENGTH uint32 = 85 - -var SUPPORTED_LOCALES = map[uintptr]string{ - 0x0407: "de-DE", - 0x0409: "en-US", - 0x0c0a: "es-ES", //or is it 0x040a - 0x040c: "fr-FR", - 0x0410: "it-IT", - 0x0411: "ja-JA", - //0x0412: "ko_KO", - Will add support for Korean when nicksnyder/go-i18n supports Korean - 0x0416: "pt-BR", - //0x0419: "ru_RU", - Will add support for Russian when nicksnyder/go-i18n supports Russian - 0x0804: "zh-CN", - 0x0c04: "zh-HK", - 0x0404: "zh-TW", -} - -func getWindowsLocaleFrom(sysCall string) (locale string, err error) { - buffer := make([]uint16, LOCALE_NAME_MAX_LENGTH) - - dll := syscall.MustLoadDLL("kernel32") - proc := dll.MustFindProc(sysCall) - r, _, dllError := proc.Call(uintptr(unsafe.Pointer(&buffer[0])), uintptr(LOCALE_NAME_MAX_LENGTH)) - if r == 0 { - err = errors.New(COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE + ":\n" + dllError.Error()) - return - } - - locale = syscall.UTF16ToString(buffer) - - return -} - -func getAllWindowsLocaleFrom(sysCall string) (string, error) { - dll, err := syscall.LoadDLL("kernel32") - if err != nil { - return "", errors.New("Could not find kernel32 dll") - } - - proc, err := dll.FindProc(sysCall) - if err != nil { - return "", err - } - - locale, _, dllError := proc.Call() - if locale == 0 { - return "", errors.New(COULD_NOT_DETECT_PACKAGE_ERROR_MESSAGE + ":\n" + dllError.Error()) - } - - return SUPPORTED_LOCALES[locale], nil -} - -func getWindowsLocale() (locale string, err error) { - dll, err := syscall.LoadDLL("kernel32") - if err != nil { - return "", errors.New("Could not find kernel32 dll") - } - - proc, err := dll.FindProc("GetVersion") - if err != nil { - return "", err - } - - v, _, _ := proc.Call() - windowsVersion := byte(v) - isVistaOrGreater := (windowsVersion >= 6) - - if isVistaOrGreater { - locale, err = getWindowsLocaleFrom("GetUserDefaultLocaleName") - if err != nil { - locale, err = getWindowsLocaleFrom("GetSystemDefaultLocaleName") - } - } else if !isVistaOrGreater { - locale, err = getAllWindowsLocaleFrom("GetUserDefaultLCID") - if err != nil { - locale, err = getAllWindowsLocaleFrom("GetSystemDefaultLCID") - } - } else { - panic(v) - } - return -} -func DetectIETF() (locale string, err error) { - locale, err = getWindowsLocale() - return -} - -func DetectLanguage() (language string, err error) { - windows_locale, err := getWindowsLocale() - if err == nil { - language, _ = splitLocale(windows_locale) - } - - return -} - -func DetectTerritory() (territory string, err error) { - windows_locale, err := getWindowsLocale() - if err == nil { - _, territory = splitLocale(windows_locale) - } - - return -} diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_windows_test.go b/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_windows_test.go deleted file mode 100644 index 7550644..0000000 --- a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/jibber_jabber_windows_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// +build windows - -package jibber_jabber_test - -import ( - . "github.com/pivotal-cf-experimental/jibber_jabber" - "regexp" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -const ( - LOCALE_REGEXP = "^[a-z]{2}-[A-Z]{2}$" - LANGUAGE_REGEXP = "^[a-z]{2}$" - TERRITORY_REGEXP = "^[A-Z]{2}$" -) - -var _ = Describe("Windows", func() { - BeforeEach(func() { - locale, err := DetectIETF() - Ω(err).Should(BeNil()) - Ω(locale).ShouldNot(BeNil()) - Ω(locale).ShouldNot(Equal("")) - }) - - Describe("#DetectIETF", func() { - It("detects correct IETF locale", func() { - locale, _ := DetectIETF() - matched, _ := regexp.MatchString(LOCALE_REGEXP, locale) - Ω(matched).Should(BeTrue()) - }) - }) - - Describe("#DetectLanguage", func() { - It("detects correct Language", func() { - language, _ := DetectLanguage() - matched, _ := regexp.MatchString(LANGUAGE_REGEXP, language) - Ω(matched).Should(BeTrue()) - }) - }) - - Describe("#DetectTerritory", func() { - It("detects correct Territory", func() { - territory, _ := DetectTerritory() - matched, _ := regexp.MatchString(TERRITORY_REGEXP, territory) - Ω(matched).Should(BeTrue()) - }) - }) -}) diff --git a/bin/linux64/cf-targets-plugin b/bin/linux64/cf-targets-plugin deleted file mode 100755 index 52dc051..0000000 Binary files a/bin/linux64/cf-targets-plugin and /dev/null differ diff --git a/bin/osx/cf-targets-plugin b/bin/osx/cf-targets-plugin deleted file mode 100755 index 60a6f92..0000000 Binary files a/bin/osx/cf-targets-plugin and /dev/null differ diff --git a/bin/win64/cf-targets-plugin.exe b/bin/win64/cf-targets-plugin.exe deleted file mode 100755 index fadbd77..0000000 Binary files a/bin/win64/cf-targets-plugin.exe and /dev/null differ diff --git a/cf_targets.go b/cf_targets.go index da4032d..ebd2571 100644 --- a/cf_targets.go +++ b/cf_targets.go @@ -11,8 +11,8 @@ import ( realos "os" "github.com/cloudfoundry/cli/cf/configuration" - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" - "github.com/cloudfoundry/cli/cf/configuration/core_config" + "github.com/cloudfoundry/cli/cf/configuration/confighelpers" + "github.com/cloudfoundry/cli/cf/configuration/coreconfig" "github.com/cloudfoundry/cli/plugin" ) @@ -55,13 +55,14 @@ func (*RealOS) WriteFile(path string, content []byte, mode realos.FileMode) erro var os OS func newTargetsPlugin() *TargetsPlugin { - targetsPath := filepath.Join(filepath.Dir(config_helpers.DefaultFilePath()), "targets") + configPath, _ := confighelpers.DefaultFilePath() + targetsPath := filepath.Join(filepath.Dir(configPath), "targets") os.Mkdir(targetsPath, 0700) return &TargetsPlugin{ - configPath: config_helpers.DefaultFilePath(), + configPath: configPath, targetsPath: targetsPath, currentPath: filepath.Join(targetsPath, "current"), - suffix: "." + filepath.Base(config_helpers.DefaultFilePath()), + suffix: "." + filepath.Base(configPath), } } @@ -173,7 +174,7 @@ func (c *TargetsPlugin) SetTargetCommand(args []string) { } targetName := flagSet.Arg(0) targetPath := c.targetPath(targetName) - if (!c.targetExists(targetPath)) { + if !c.targetExists(targetPath) { fmt.Println("Target", targetName, "does not exist.") panic(1) } @@ -274,8 +275,8 @@ func (c *TargetsPlugin) checkStatus() { name := c.getCurrent() - configData := core_config.NewData() - targetData := core_config.NewData() + configData := coreconfig.NewData() + targetData := coreconfig.NewData() err := currentConfig.Load(configData) c.checkError(err) @@ -286,9 +287,9 @@ func (c *TargetsPlugin) checkStatus() { needsUpdate := targetData.AccessToken != configData.AccessToken targetData.AccessToken = configData.AccessToken - currentContent, err := configData.JsonMarshalV3() + currentContent, err := configData.JSONMarshalV3() c.checkError(err) - savedContent, err := targetData.JsonMarshalV3() + savedContent, err := targetData.JSONMarshalV3() c.checkError(err) c.status = TargetStatus{true, name, !bytes.Equal(currentContent, savedContent), needsUpdate} } diff --git a/cf_targets_test.go b/cf_targets_test.go index 3bde1b7..79b6b86 100644 --- a/cf_targets_test.go +++ b/cf_targets_test.go @@ -3,9 +3,9 @@ package main import ( realos "os" - "github.com/cloudfoundry/cli/plugin/fakes" - . "github.com/cloudfoundry/cli/testhelpers/io" - . "github.com/cloudfoundry/cli/testhelpers/matchers" + fakes "github.com/cloudfoundry/cli/plugin/pluginfakes" + . "github.com/cloudfoundry/cli/util/testhelpers/io" + . "github.com/cloudfoundry/cli/util/testhelpers/matchers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) diff --git a/vendor/code.cloudfoundry.org/cli/LICENSE b/vendor/code.cloudfoundry.org/cli/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/code.cloudfoundry.org/cli/NOTICE b/vendor/code.cloudfoundry.org/cli/NOTICE new file mode 100644 index 0000000..4e6a3b3 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/NOTICE @@ -0,0 +1,11 @@ +Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +This project contains software that is Copyright (c) 2013-2015 Pivotal Software, Inc. + +This project is licensed to you under the Apache License, Version 2.0 (the "License"). + +You may not use this project except in compliance with the License. + +This project may include a number of subcomponents with separate copyright notices +and license terms. Your use of these subcomponents is subject to the terms and +conditions of the subcomponent's license, as noted in the LICENSE file. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder.go b/vendor/code.cloudfoundry.org/cli/cf/actors/brokerbuilder/broker_builder.go similarity index 82% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder.go rename to vendor/code.cloudfoundry.org/cli/cf/actors/brokerbuilder/broker_builder.go index b8ebec4..27f99f0 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/broker_builder/broker_builder.go +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/brokerbuilder/broker_builder.go @@ -1,11 +1,13 @@ -package broker_builder +package brokerbuilder import ( - "github.com/cloudfoundry/cli/cf/actors/service_builder" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" + "code.cloudfoundry.org/cli/cf/actors/servicebuilder" + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/models" ) +//go:generate counterfeiter . BrokerBuilder + type BrokerBuilder interface { AttachBrokersToServices([]models.ServiceOffering) ([]models.ServiceBroker, error) AttachSpecificBrokerToServices(string, []models.ServiceOffering) (models.ServiceBroker, error) @@ -16,10 +18,10 @@ type BrokerBuilder interface { type Builder struct { brokerRepo api.ServiceBrokerRepository - serviceBuilder service_builder.ServiceBuilder + serviceBuilder servicebuilder.ServiceBuilder } -func NewBuilder(broker api.ServiceBrokerRepository, serviceBuilder service_builder.ServiceBuilder) Builder { +func NewBuilder(broker api.ServiceBrokerRepository, serviceBuilder servicebuilder.ServiceBuilder) Builder { return Builder{ brokerRepo: broker, serviceBuilder: serviceBuilder, @@ -31,20 +33,20 @@ func (builder Builder) AttachBrokersToServices(services []models.ServiceOffering brokersMap := make(map[string]models.ServiceBroker) for _, service := range services { - if service.BrokerGuid == "" { + if service.BrokerGUID == "" { continue } - if broker, ok := brokersMap[service.BrokerGuid]; ok { + if broker, ok := brokersMap[service.BrokerGUID]; ok { broker.Services = append(broker.Services, service) - brokersMap[broker.Guid] = broker + brokersMap[broker.GUID] = broker } else { - broker, err := builder.brokerRepo.FindByGuid(service.BrokerGuid) + broker, err := builder.brokerRepo.FindByGUID(service.BrokerGUID) if err != nil { return nil, err } broker.Services = append(broker.Services, service) - brokersMap[service.BrokerGuid] = broker + brokersMap[service.BrokerGUID] = broker } } @@ -62,7 +64,7 @@ func (builder Builder) AttachSpecificBrokerToServices(brokerName string, service } for _, service := range services { - if service.BrokerGuid == broker.Guid { + if service.BrokerGUID == broker.GUID { broker.Services = append(broker.Services, service) } } @@ -72,20 +74,20 @@ func (builder Builder) AttachSpecificBrokerToServices(brokerName string, service func (builder Builder) GetAllServiceBrokers() ([]models.ServiceBroker, error) { brokers := []models.ServiceBroker{} - brokerGuids := []string{} + brokerGUIDs := []string{} var err error var services models.ServiceOfferings err = builder.brokerRepo.ListServiceBrokers(func(broker models.ServiceBroker) bool { brokers = append(brokers, broker) - brokerGuids = append(brokerGuids, broker.Guid) + brokerGUIDs = append(brokerGUIDs, broker.GUID) return true }) if err != nil { return nil, err } - services, err = builder.serviceBuilder.GetServicesForManyBrokers(brokerGuids) + services, err = builder.serviceBuilder.GetServicesForManyBrokers(brokerGUIDs) if err != nil { return nil, err } @@ -101,7 +103,7 @@ func (builder Builder) GetAllServiceBrokers() ([]models.ServiceBroker, error) { func (builder Builder) attachServiceOfferingsToBrokers(services models.ServiceOfferings, brokers []models.ServiceBroker) ([]models.ServiceBroker, error) { for _, service := range services { for index, broker := range brokers { - if broker.Guid == service.BrokerGuid { + if broker.GUID == service.BrokerGUID { brokers[index].Services = append(brokers[index].Services, service) break } @@ -115,7 +117,7 @@ func (builder Builder) GetBrokerWithAllServices(brokerName string) (models.Servi if err != nil { return models.ServiceBroker{}, err } - services, err := builder.serviceBuilder.GetServicesForBroker(broker.Guid) + services, err := builder.serviceBuilder.GetServicesForBroker(broker.GUID) if err != nil { return models.ServiceBroker{}, err } diff --git a/vendor/code.cloudfoundry.org/cli/cf/actors/planbuilder/plan_builder.go b/vendor/code.cloudfoundry.org/cli/cf/actors/planbuilder/plan_builder.go new file mode 100644 index 0000000..3bc1b19 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/planbuilder/plan_builder.go @@ -0,0 +1,232 @@ +package planbuilder + +import ( + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/api/organizations" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . PlanBuilder + +type PlanBuilder interface { + AttachOrgsToPlans([]models.ServicePlanFields) ([]models.ServicePlanFields, error) + AttachOrgToPlans([]models.ServicePlanFields, string) ([]models.ServicePlanFields, error) + GetPlansForServiceForOrg(string, string) ([]models.ServicePlanFields, error) + GetPlansForServiceWithOrgs(string) ([]models.ServicePlanFields, error) + GetPlansForManyServicesWithOrgs([]string) ([]models.ServicePlanFields, error) + GetPlansForService(string) ([]models.ServicePlanFields, error) + GetPlansVisibleToOrg(string) ([]models.ServicePlanFields, error) +} + +var ( + OrgToPlansVisibilityMap *map[string][]string + PlanToOrgsVisibilityMap *map[string][]string +) + +type Builder struct { + servicePlanRepo api.ServicePlanRepository + servicePlanVisibilityRepo api.ServicePlanVisibilityRepository + orgRepo organizations.OrganizationRepository +} + +func NewBuilder(plan api.ServicePlanRepository, vis api.ServicePlanVisibilityRepository, org organizations.OrganizationRepository) Builder { + return Builder{ + servicePlanRepo: plan, + servicePlanVisibilityRepo: vis, + orgRepo: org, + } +} + +func (builder Builder) AttachOrgToPlans(plans []models.ServicePlanFields, orgName string) ([]models.ServicePlanFields, error) { + visMap, err := builder.buildPlanToOrgVisibilityMap(orgName) + if err != nil { + return nil, err + } + for planIndex := range plans { + plan := &plans[planIndex] + plan.OrgNames = visMap[plan.GUID] + } + + return plans, nil +} + +func (builder Builder) AttachOrgsToPlans(plans []models.ServicePlanFields) ([]models.ServicePlanFields, error) { + visMap, err := builder.buildPlanToOrgsVisibilityMap() + if err != nil { + return nil, err + } + for planIndex := range plans { + plan := &plans[planIndex] + plan.OrgNames = visMap[plan.GUID] + } + + return plans, nil +} + +func (builder Builder) GetPlansForServiceForOrg(serviceGUID string, orgName string) ([]models.ServicePlanFields, error) { + plans, err := builder.servicePlanRepo.Search(map[string]string{"service_guid": serviceGUID}) + if err != nil { + return nil, err + } + + plans, err = builder.AttachOrgToPlans(plans, orgName) + if err != nil { + return nil, err + } + return plans, nil +} + +func (builder Builder) GetPlansForService(serviceGUID string) ([]models.ServicePlanFields, error) { + plans, err := builder.servicePlanRepo.Search(map[string]string{"service_guid": serviceGUID}) + if err != nil { + return nil, err + } + return plans, nil +} + +func (builder Builder) GetPlansForServiceWithOrgs(serviceGUID string) ([]models.ServicePlanFields, error) { + plans, err := builder.GetPlansForService(serviceGUID) + if err != nil { + return nil, err + } + + plans, err = builder.AttachOrgsToPlans(plans) + if err != nil { + return nil, err + } + return plans, nil +} + +func (builder Builder) GetPlansForManyServicesWithOrgs(serviceGUIDs []string) ([]models.ServicePlanFields, error) { + plans, err := builder.servicePlanRepo.ListPlansFromManyServices(serviceGUIDs) + if err != nil { + return nil, err + } + + plans, err = builder.AttachOrgsToPlans(plans) + if err != nil { + return nil, err + } + return plans, nil +} + +func (builder Builder) GetPlansVisibleToOrg(orgName string) ([]models.ServicePlanFields, error) { + var plansToReturn []models.ServicePlanFields + allPlans, err := builder.servicePlanRepo.Search(nil) + + planToOrgsVisMap, err := builder.buildPlanToOrgsVisibilityMap() + if err != nil { + return nil, err + } + + orgToPlansVisMap := builder.buildOrgToPlansVisibilityMap(planToOrgsVisMap) + + filterOrgPlans := orgToPlansVisMap[orgName] + + for _, plan := range allPlans { + if builder.containsGUID(filterOrgPlans, plan.GUID) { + plan.OrgNames = planToOrgsVisMap[plan.GUID] + plansToReturn = append(plansToReturn, plan) + } else if plan.Public { + plansToReturn = append(plansToReturn, plan) + } + } + + return plansToReturn, nil +} + +func (builder Builder) containsGUID(guidSlice []string, guid string) bool { + for _, g := range guidSlice { + if g == guid { + return true + } + } + return false +} + +func (builder Builder) buildPlanToOrgVisibilityMap(orgName string) (map[string][]string, error) { + // Since this map doesn't ever change, we memoize it for performance + orgLookup := make(map[string]string) + + org, err := builder.orgRepo.FindByName(orgName) + if err != nil { + return nil, err + } + orgLookup[org.GUID] = org.Name + + visibilities, err := builder.servicePlanVisibilityRepo.List() + if err != nil { + return nil, err + } + + visMap := make(map[string][]string) + for _, vis := range visibilities { + if _, exists := orgLookup[vis.OrganizationGUID]; exists { + visMap[vis.ServicePlanGUID] = append(visMap[vis.ServicePlanGUID], orgLookup[vis.OrganizationGUID]) + } + } + + return visMap, nil +} + +func (builder Builder) buildPlanToOrgsVisibilityMap() (map[string][]string, error) { + // Since this map doesn't ever change, we memoize it for performance + if PlanToOrgsVisibilityMap == nil { + orgLookup := make(map[string]string) + + visibilities, err := builder.servicePlanVisibilityRepo.List() + if err != nil { + return nil, err + } + + orgGUIDs := builder.getUniqueOrgGUIDsFromVisibilities(visibilities) + + orgs, err := builder.orgRepo.GetManyOrgsByGUID(orgGUIDs) + if err != nil { + return nil, err + } + + for _, org := range orgs { + orgLookup[org.GUID] = org.Name + } + + visMap := make(map[string][]string) + for _, vis := range visibilities { + visMap[vis.ServicePlanGUID] = append(visMap[vis.ServicePlanGUID], orgLookup[vis.OrganizationGUID]) + } + + PlanToOrgsVisibilityMap = &visMap + } + + return *PlanToOrgsVisibilityMap, nil +} + +func (builder Builder) getUniqueOrgGUIDsFromVisibilities(visibilities []models.ServicePlanVisibilityFields) (orgGUIDs []string) { + for _, visibility := range visibilities { + found := false + for _, orgGUID := range orgGUIDs { + if orgGUID == visibility.OrganizationGUID { + found = true + break + } + } + if !found { + orgGUIDs = append(orgGUIDs, visibility.OrganizationGUID) + } + } + return +} + +func (builder Builder) buildOrgToPlansVisibilityMap(planToOrgsMap map[string][]string) map[string][]string { + if OrgToPlansVisibilityMap == nil { + visMap := make(map[string][]string) + for planGUID, orgNames := range planToOrgsMap { + for _, orgName := range orgNames { + visMap[orgName] = append(visMap[orgName], planGUID) + } + } + OrgToPlansVisibilityMap = &visMap + } + + return *OrgToPlansVisibilityMap +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/actors/pluginrepo/plugin_repo.go b/vendor/code.cloudfoundry.org/cli/cf/actors/pluginrepo/plugin_repo.go new file mode 100644 index 0000000..6ed7545 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/pluginrepo/plugin_repo.go @@ -0,0 +1,70 @@ +package pluginrepo + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "strings" + + "code.cloudfoundry.org/cli/cf/models" + clipr "github.com/cloudfoundry-incubator/cli-plugin-repo/web" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +//go:generate counterfeiter . PluginRepo + +type PluginRepo interface { + GetPlugins([]models.PluginRepo) (map[string][]clipr.Plugin, []string) +} + +type pluginRepo struct{} + +func NewPluginRepo() PluginRepo { + return pluginRepo{} +} + +func (r pluginRepo) GetPlugins(repos []models.PluginRepo) (map[string][]clipr.Plugin, []string) { + var pluginList clipr.PluginsJson + repoError := []string{} + repoPlugins := make(map[string][]clipr.Plugin) + + for _, repo := range repos { + resp, err := http.Get(getListEndpoint(repo.URL)) + if err != nil { + repoError = append(repoError, fmt.Sprintf(T("Error requesting from")+" '%s' - %s", repo.Name, err.Error())) + continue + } else { + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + repoError = append(repoError, fmt.Sprintf(T("Error reading response from")+" '%s' - %s ", repo.Name, err.Error())) + continue + } + + pluginList = clipr.PluginsJson{Plugins: nil} + err = json.Unmarshal(body, &pluginList) + if err != nil { + repoError = append(repoError, fmt.Sprintf(T("Invalid json data from")+" '%s' - %s", repo.Name, err.Error())) + continue + } else if pluginList.Plugins == nil { + repoError = append(repoError, T("Invalid data from '{{.repoName}}' - plugin data does not exist", map[string]interface{}{"repoName": repo.Name})) + continue + } + + } + + repoPlugins[repo.Name] = pluginList.Plugins + } + + return repoPlugins, repoError +} + +func getListEndpoint(url string) string { + if strings.HasSuffix(url, "/") { + return url + "list" + } + return url + "/list" +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/actors/push.go b/vendor/code.cloudfoundry.org/cli/cf/actors/push.go new file mode 100644 index 0000000..8bbc091 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/push.go @@ -0,0 +1,212 @@ +package actors + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "runtime" + + "code.cloudfoundry.org/cli/cf/api/applicationbits" + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/appfiles" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/gofileutils/fileutils" +) + +const windowsPathPrefix = `\\?\` + +//go:generate counterfeiter . PushActor + +type PushActor interface { + UploadApp(appGUID string, zipFile *os.File, presentFiles []resources.AppFileResource) error + ProcessPath(dirOrZipFile string, f func(string) error) error + GatherFiles(localFiles []models.AppFileFields, appDir string, uploadDir string, useCache bool) ([]resources.AppFileResource, bool, error) + ValidateAppParams(apps []models.AppParams) []error + MapManifestRoute(routeName string, app models.Application, appParamsFromContext models.AppParams) error +} + +type PushActorImpl struct { + appBitsRepo applicationbits.Repository + appfiles appfiles.AppFiles + zipper appfiles.Zipper + routeActor RouteActor +} + +func NewPushActor(appBitsRepo applicationbits.Repository, zipper appfiles.Zipper, appfiles appfiles.AppFiles, routeActor RouteActor) PushActor { + return PushActorImpl{ + appBitsRepo: appBitsRepo, + appfiles: appfiles, + zipper: zipper, + routeActor: routeActor, + } +} + +// ProcessPath takes in a director of app files or a zip file which contains +// the app files. If given a zip file, it will extract the zip to a temporary +// location, call the provided callback with that location, and then clean up +// the location after the callback has been executed. +// +// This was done so that the caller of ProcessPath wouldn't need to know if it +// was a zip file or an app dir that it was given, and the caller would not be +// responsible for cleaning up the temporary directory ProcessPath creates when +// given a zip. +func (actor PushActorImpl) ProcessPath(dirOrZipFile string, f func(string) error) error { + if !actor.zipper.IsZipFile(dirOrZipFile) { + if filepath.IsAbs(dirOrZipFile) { + appDir, err := filepath.EvalSymlinks(dirOrZipFile) + if err != nil { + return err + } + err = f(appDir) + if err != nil { + return err + } + } else { + absPath, err := filepath.Abs(dirOrZipFile) + if err != nil { + return err + } + appDir, err := filepath.EvalSymlinks(absPath) + if err != nil { + return err + } + + err = f(appDir) + if err != nil { + return err + } + } + + return nil + } + + tempDir, err := ioutil.TempDir("", "unzipped-app") + if err != nil { + return err + } + + err = actor.zipper.Unzip(dirOrZipFile, tempDir) + if err != nil { + return err + } + + err = f(tempDir) + if err != nil { + return err + } + + err = os.RemoveAll(tempDir) + if err != nil { + return err + } + + return nil +} + +func (actor PushActorImpl) GatherFiles(localFiles []models.AppFileFields, appDir string, uploadDir string, useCache bool) ([]resources.AppFileResource, bool, error) { + appFileResource := []resources.AppFileResource{} + for _, file := range localFiles { + appFileResource = append(appFileResource, resources.AppFileResource{ + Path: file.Path, + Sha1: file.Sha1, + Size: file.Size, + }) + } + + var err error + // CC returns a list of files that it already has, so an empty list of + // remoteFiles is equivalent to not using resource caching at all + remoteFiles := []resources.AppFileResource{} + if useCache { + remoteFiles, err = actor.appBitsRepo.GetApplicationFiles(appFileResource) + if err != nil { + return []resources.AppFileResource{}, false, err + } + } + + filesToUpload := make([]models.AppFileFields, len(localFiles), len(localFiles)) + copy(filesToUpload, localFiles) + + for _, remoteFile := range remoteFiles { + for i, fileToUpload := range filesToUpload { + if remoteFile.Path == fileToUpload.Path { + filesToUpload = append(filesToUpload[:i], filesToUpload[i+1:]...) + } + } + } + + err = actor.appfiles.CopyFiles(filesToUpload, appDir, uploadDir) + if err != nil { + return []resources.AppFileResource{}, false, err + } + + _, err = os.Stat(filepath.Join(appDir, ".cfignore")) + if err == nil { + err = fileutils.CopyPathToPath(filepath.Join(appDir, ".cfignore"), filepath.Join(uploadDir, ".cfignore")) + if err != nil { + return []resources.AppFileResource{}, false, err + } + } + + for i := range remoteFiles { + fullPath, err := filepath.Abs(filepath.Join(appDir, remoteFiles[i].Path)) + if err != nil { + return []resources.AppFileResource{}, false, err + } + + if runtime.GOOS == "windows" { + fullPath = windowsPathPrefix + fullPath + } + fileInfo, err := os.Lstat(fullPath) + if err != nil { + return []resources.AppFileResource{}, false, err + } + fileMode := fileInfo.Mode() + + if runtime.GOOS == "windows" { + fileMode = fileMode | 0700 + } + + remoteFiles[i].Mode = fmt.Sprintf("%#o", fileMode) + } + + return remoteFiles, len(filesToUpload) > 0, nil +} + +func (actor PushActorImpl) UploadApp(appGUID string, zipFile *os.File, presentFiles []resources.AppFileResource) error { + return actor.appBitsRepo.UploadBits(appGUID, zipFile, presentFiles) +} + +func (actor PushActorImpl) ValidateAppParams(apps []models.AppParams) []error { + errs := []error{} + + for _, app := range apps { + appName := app.Name + + if app.Routes != nil { + if app.Hosts != nil { + errs = append(errs, fmt.Errorf(T("Application {{.AppName}} must not be configured with both 'routes' and 'host'/'hosts'", map[string]interface{}{"AppName": appName}))) + } + + if app.Domains != nil { + errs = append(errs, fmt.Errorf(T("Application {{.AppName}} must not be configured with both 'routes' and 'domain'/'domains'", map[string]interface{}{"AppName": appName}))) + } + + if app.NoHostname != nil { + errs = append(errs, fmt.Errorf(T("Application {{.AppName}} must not be configured with both 'routes' and 'no-hostname'", map[string]interface{}{"AppName": appName}))) + } + } + } + + if len(errs) > 0 { + return errs + } + + return nil +} + +func (actor PushActorImpl) MapManifestRoute(routeName string, app models.Application, appParamsFromContext models.AppParams) error { + return actor.routeActor.FindAndBindRoute(routeName, app, appParamsFromContext) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/actors/routes.go b/vendor/code.cloudfoundry.org/cli/cf/actors/routes.go new file mode 100644 index 0000000..aca2c4a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/routes.go @@ -0,0 +1,297 @@ +package actors + +import ( + "fmt" + "strconv" + "strings" + + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/util/words/generator" +) + +//go:generate counterfeiter . RouteActor + +const tcp = "tcp" + +type RouteActor interface { + CreateRandomTCPRoute(domain models.DomainFields) (models.Route, error) + FindOrCreateRoute(hostname string, domain models.DomainFields, path string, port int, useRandomPort bool) (models.Route, error) + BindRoute(app models.Application, route models.Route) error + UnbindAll(app models.Application) error + FindDomain(routeName string) (string, models.DomainFields, error) + FindPath(routeName string) (string, string) + FindPort(routeName string) (string, int, error) + FindAndBindRoute(routeName string, app models.Application, appParamsFromContext models.AppParams) error +} + +type routeActor struct { + ui terminal.UI + routeRepo api.RouteRepository + domainRepo api.DomainRepository +} + +func NewRouteActor(ui terminal.UI, routeRepo api.RouteRepository, domainRepo api.DomainRepository) routeActor { + return routeActor{ + ui: ui, + routeRepo: routeRepo, + domainRepo: domainRepo, + } +} + +func (routeActor routeActor) CreateRandomTCPRoute(domain models.DomainFields) (models.Route, error) { + routeActor.ui.Say(T("Creating random route for {{.Domain}}", map[string]interface{}{ + "Domain": terminal.EntityNameColor(domain.Name), + }) + "...") + + route, err := routeActor.routeRepo.Create("", domain, "", 0, true) + if err != nil { + return models.Route{}, err + } + + return route, nil +} + +func (routeActor routeActor) FindOrCreateRoute(hostname string, domain models.DomainFields, path string, port int, useRandomPort bool) (models.Route, error) { + var route models.Route + var err error + //if tcp route use random port should skip route lookup + if useRandomPort && domain.RouterGroupType == tcp { + err = new(errors.ModelNotFoundError) + } else { + route, err = routeActor.routeRepo.Find(hostname, domain, path, port) + } + + switch err.(type) { + case nil: + routeActor.ui.Say( + T("Using route {{.RouteURL}}", + map[string]interface{}{ + "RouteURL": terminal.EntityNameColor(route.URL()), + }), + ) + case *errors.ModelNotFoundError: + if useRandomPort && domain.RouterGroupType == tcp { + route, err = routeActor.CreateRandomTCPRoute(domain) + } else { + routeActor.ui.Say( + T("Creating route {{.Hostname}}...", + map[string]interface{}{ + "Hostname": terminal.EntityNameColor(domain.URLForHostAndPath(hostname, path, port)), + }), + ) + + route, err = routeActor.routeRepo.Create(hostname, domain, path, port, false) + } + + routeActor.ui.Ok() + routeActor.ui.Say("") + } + + return route, err +} + +func (routeActor routeActor) BindRoute(app models.Application, route models.Route) error { + if !app.HasRoute(route) { + routeActor.ui.Say(T( + "Binding {{.URL}} to {{.AppName}}...", + map[string]interface{}{ + "URL": terminal.EntityNameColor(route.URL()), + "AppName": terminal.EntityNameColor(app.Name), + }), + ) + + err := routeActor.routeRepo.Bind(route.GUID, app.GUID) + switch err := err.(type) { + case nil: + routeActor.ui.Ok() + routeActor.ui.Say("") + return nil + case errors.HTTPError: + if err.ErrorCode() == errors.InvalidRelation { + return errors.New(T( + "The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", + map[string]interface{}{ + "URL": route.URL(), + }), + ) + } + } + return err + } + return nil +} + +func (routeActor routeActor) UnbindAll(app models.Application) error { + for _, route := range app.Routes { + routeActor.ui.Say(T( + "Removing route {{.URL}}...", + map[string]interface{}{ + "URL": terminal.EntityNameColor(route.URL()), + }), + ) + err := routeActor.routeRepo.Unbind(route.GUID, app.GUID) + if err != nil { + return err + } + } + return nil +} + +func (routeActor routeActor) FindDomain(routeName string) (string, models.DomainFields, error) { + host, domain, continueSearch, err := parseRoute(routeName, routeActor.domainRepo.FindPrivateByName) + if continueSearch { + host, domain, _, err = parseRoute(routeName, routeActor.domainRepo.FindSharedByName) + } + return host, domain, err +} + +func (routeActor routeActor) FindPath(routeName string) (string, string) { + routeSlice := strings.Split(routeName, "/") + return routeSlice[0], strings.Join(routeSlice[1:], "/") +} + +func (routeActor routeActor) FindPort(routeName string) (string, int, error) { + var err error + routeSlice := strings.Split(routeName, ":") + port := 0 + if len(routeSlice) == 2 { + port, err = strconv.Atoi(routeSlice[1]) + if err != nil { + return "", 0, errors.New(T("Invalid port for route {{.RouteName}}", + map[string]interface{}{ + "RouteName": routeName, + }, + )) + } + } + return routeSlice[0], port, nil +} + +func (routeActor routeActor) replaceDomain(routeWithoutPathAndPort string, domain string) (string, error) { + _, flagDomain, err := routeActor.FindDomain(domain) + if err != nil { + return "", err + } + + switch { + case flagDomain.Shared && flagDomain.RouterGroupType == "": // Shared HTTP + host := strings.Split(routeWithoutPathAndPort, ".")[0] + routeWithoutPathAndPort = fmt.Sprintf("%s.%s", host, flagDomain.Name) + default: + routeWithoutPathAndPort = flagDomain.Name + } + + return routeWithoutPathAndPort, nil +} + +func (routeActor routeActor) FindAndBindRoute(routeName string, app models.Application, appParamsFromContext models.AppParams) error { + routeWithoutPath, path := routeActor.FindPath(routeName) + + routeWithoutPathAndPort, port, err := routeActor.FindPort(routeWithoutPath) + if err != nil { + return err + } + + if len(appParamsFromContext.Domains) == 1 { + routeWithoutPathAndPort, err = routeActor.replaceDomain(routeWithoutPathAndPort, appParamsFromContext.Domains[0]) + if err != nil { + return err + } + } + + hostname, domain, err := routeActor.FindDomain(routeWithoutPathAndPort) + if err != nil { + return err + } + + if appParamsFromContext.RoutePath != nil && *appParamsFromContext.RoutePath != "" && domain.RouterGroupType != tcp { + path = *appParamsFromContext.RoutePath + } + + if appParamsFromContext.UseRandomRoute && domain.RouterGroupType != tcp { + hostname = generator.NewWordGenerator().Babble() + } + + replaceHostname(domain.RouterGroupType, appParamsFromContext.Hosts, &hostname) + + err = validateRoute(domain.Name, domain.RouterGroupType, port, path) + if err != nil { + return err + } + + route, err := routeActor.FindOrCreateRoute(hostname, domain, path, port, appParamsFromContext.UseRandomRoute) + if err != nil { + return err + } + + return routeActor.BindRoute(app, route) +} + +func validateRoute(routeName string, domainType string, port int, path string) error { + if domainType == tcp && path != "" { + return fmt.Errorf(T("Path not allowed in TCP route {{.RouteName}}", + map[string]interface{}{ + "RouteName": routeName, + }, + )) + } + + if domainType == "" && port != 0 { + return fmt.Errorf(T("Port not allowed in HTTP route {{.RouteName}}", + map[string]interface{}{ + "RouteName": routeName, + }, + )) + } + + return nil +} + +func replaceHostname(domainType string, hosts []string, hostname *string) { + if domainType == "" && len(hosts) > 0 && hosts[0] != "" { + *hostname = hosts[0] + } +} + +func validateFoundDomain(domain models.DomainFields, err error) (bool, error) { + switch err.(type) { + case *errors.ModelNotFoundError: + return false, nil + case nil: + return true, nil + default: + return false, err + } +} + +func parseRoute(routeName string, findFunc func(domainName string) (models.DomainFields, error)) (string, models.DomainFields, bool, error) { + domain, err := findFunc(routeName) + found, err := validateFoundDomain(domain, err) + if err != nil { + return "", models.DomainFields{}, false, err + } + if found { + return "", domain, false, nil + } + + routeParts := strings.Split(routeName, ".") + domain, err = findFunc(strings.Join(routeParts[1:], ".")) + found, err = validateFoundDomain(domain, err) + if err != nil { + return "", models.DomainFields{}, false, err + } + if found { + return routeParts[0], domain, false, nil + } + + return "", models.DomainFields{}, true, fmt.Errorf(T( + "The route {{.RouteName}} did not match any existing domains.", + map[string]interface{}{ + "RouteName": routeName, + }, + )) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder.go b/vendor/code.cloudfoundry.org/cli/cf/actors/servicebuilder/service_builder.go similarity index 82% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder.go rename to vendor/code.cloudfoundry.org/cli/cf/actors/servicebuilder/service_builder.go index 52e1a2a..4c834fe 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/actors/service_builder/service_builder.go +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/servicebuilder/service_builder.go @@ -1,13 +1,15 @@ -package service_builder +package servicebuilder import ( "errors" - "github.com/cloudfoundry/cli/cf/actors/plan_builder" - "github.com/cloudfoundry/cli/cf/api" - "github.com/cloudfoundry/cli/cf/models" + "code.cloudfoundry.org/cli/cf/actors/planbuilder" + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/models" ) +//go:generate counterfeiter . ServiceBuilder + type ServiceBuilder interface { GetAllServices() ([]models.ServiceOffering, error) GetAllServicesWithPlans() ([]models.ServiceOffering, error) @@ -31,10 +33,10 @@ type ServiceBuilder interface { type Builder struct { serviceRepo api.ServiceRepository - planBuilder plan_builder.PlanBuilder + planBuilder planbuilder.PlanBuilder } -func NewBuilder(service api.ServiceRepository, planBuilder plan_builder.PlanBuilder) Builder { +func NewBuilder(service api.ServiceRepository, planBuilder planbuilder.PlanBuilder) Builder { return Builder{ serviceRepo: service, planBuilder: planBuilder, @@ -53,7 +55,7 @@ func (builder Builder) GetAllServicesWithPlans() ([]models.ServiceOffering, erro var plans []models.ServicePlanFields for index, service := range services { - plans, err = builder.planBuilder.GetPlansForService(service.Guid) + plans, err = builder.planBuilder.GetPlansForService(service.GUID) if err != nil { return []models.ServiceOffering{}, err } @@ -63,18 +65,18 @@ func (builder Builder) GetAllServicesWithPlans() ([]models.ServiceOffering, erro return services, err } -func (builder Builder) GetServicesForSpace(spaceGuid string) ([]models.ServiceOffering, error) { - return builder.serviceRepo.GetServiceOfferingsForSpace(spaceGuid) +func (builder Builder) GetServicesForSpace(spaceGUID string) ([]models.ServiceOffering, error) { + return builder.serviceRepo.GetServiceOfferingsForSpace(spaceGUID) } -func (builder Builder) GetServicesForSpaceWithPlans(spaceGuid string) ([]models.ServiceOffering, error) { - services, err := builder.GetServicesForSpace(spaceGuid) +func (builder Builder) GetServicesForSpaceWithPlans(spaceGUID string) ([]models.ServiceOffering, error) { + services, err := builder.GetServicesForSpace(spaceGUID) if err != nil { return []models.ServiceOffering{}, err } for index, service := range services { - services[index].Plans, err = builder.planBuilder.GetPlansForService(service.Guid) + services[index].Plans, err = builder.planBuilder.GetPlansForService(service.GUID) if err != nil { return []models.ServiceOffering{}, err } @@ -90,7 +92,7 @@ func (builder Builder) GetServiceByNameWithPlans(serviceLabel string) (models.Se } service := returnV2Service(services) - service.Plans, err = builder.planBuilder.GetPlansForService(service.Guid) + service.Plans, err = builder.planBuilder.GetPlansForService(service.GUID) if err != nil { return models.ServiceOffering{}, err } @@ -111,8 +113,8 @@ func (builder Builder) GetServiceByNameForOrg(serviceLabel, orgName string) (mod return service, nil } -func (builder Builder) GetServiceByNameForSpace(serviceLabel, spaceGuid string) (models.ServiceOffering, error) { - offerings, err := builder.serviceRepo.FindServiceOfferingsForSpaceByLabel(spaceGuid, serviceLabel) +func (builder Builder) GetServiceByNameForSpace(serviceLabel, spaceGUID string) (models.ServiceOffering, error) { + offerings, err := builder.serviceRepo.FindServiceOfferingsForSpaceByLabel(spaceGUID, serviceLabel) if err != nil { return models.ServiceOffering{}, err } @@ -126,13 +128,13 @@ func (builder Builder) GetServiceByNameForSpace(serviceLabel, spaceGuid string) return models.ServiceOffering{}, errors.New("Could not find service") } -func (builder Builder) GetServiceByNameForSpaceWithPlans(serviceLabel, spaceGuid string) (models.ServiceOffering, error) { - offering, err := builder.GetServiceByNameForSpace(serviceLabel, spaceGuid) +func (builder Builder) GetServiceByNameForSpaceWithPlans(serviceLabel, spaceGUID string) (models.ServiceOffering, error) { + offering, err := builder.GetServiceByNameForSpace(serviceLabel, spaceGUID) if err != nil { return models.ServiceOffering{}, err } - offering.Plans, err = builder.planBuilder.GetPlansForService(offering.Guid) + offering.Plans, err = builder.planBuilder.GetPlansForService(offering.GUID) if err != nil { return models.ServiceOffering{}, err } @@ -140,14 +142,14 @@ func (builder Builder) GetServiceByNameForSpaceWithPlans(serviceLabel, spaceGuid return offering, nil } -func (builder Builder) GetServicesByNameForSpaceWithPlans(serviceLabel, spaceGuid string) (models.ServiceOfferings, error) { - offerings, err := builder.serviceRepo.FindServiceOfferingsForSpaceByLabel(serviceLabel, spaceGuid) +func (builder Builder) GetServicesByNameForSpaceWithPlans(serviceLabel, spaceGUID string) (models.ServiceOfferings, error) { + offerings, err := builder.serviceRepo.FindServiceOfferingsForSpaceByLabel(serviceLabel, spaceGUID) if err != nil { return models.ServiceOfferings{}, err } for index, offering := range offerings { - offerings[index].Plans, err = builder.planBuilder.GetPlansForService(offering.Guid) + offerings[index].Plans, err = builder.planBuilder.GetPlansForService(offering.GUID) if err != nil { return models.ServiceOfferings{}, err } @@ -169,16 +171,16 @@ func (builder Builder) GetServiceByNameWithPlansWithOrgNames(serviceLabel string return service, nil } -func (builder Builder) GetServicesForManyBrokers(brokerGuids []string) ([]models.ServiceOffering, error) { - services, err := builder.serviceRepo.ListServicesFromManyBrokers(brokerGuids) +func (builder Builder) GetServicesForManyBrokers(brokerGUIDs []string) ([]models.ServiceOffering, error) { + services, err := builder.serviceRepo.ListServicesFromManyBrokers(brokerGUIDs) if err != nil { return nil, err } return builder.populateServicesWithPlansAndOrgs(services) } -func (builder Builder) GetServicesForBroker(brokerGuid string) ([]models.ServiceOffering, error) { - services, err := builder.serviceRepo.ListServicesFromBroker(brokerGuid) +func (builder Builder) GetServicesForBroker(brokerGUID string) ([]models.ServiceOffering, error) { + services, err := builder.serviceRepo.ListServicesFromBroker(brokerGUID) if err != nil { return nil, err } @@ -186,12 +188,12 @@ func (builder Builder) GetServicesForBroker(brokerGuid string) ([]models.Service } func (builder Builder) populateServicesWithPlansAndOrgs(services []models.ServiceOffering) ([]models.ServiceOffering, error) { - serviceGuids := []string{} + serviceGUIDs := []string{} for _, service := range services { - serviceGuids = append(serviceGuids, service.Guid) + serviceGUIDs = append(serviceGUIDs, service.GUID) } - plans, err := builder.planBuilder.GetPlansForManyServicesWithOrgs(serviceGuids) + plans, err := builder.planBuilder.GetPlansForManyServicesWithOrgs(serviceGUIDs) if err != nil { return nil, err } @@ -225,7 +227,7 @@ func (builder Builder) GetServicesVisibleToOrg(orgName string) ([]models.Service } func (builder Builder) attachPlansToServiceForOrg(service models.ServiceOffering, orgName string) (models.ServiceOffering, error) { - plans, err := builder.planBuilder.GetPlansForServiceForOrg(service.Guid, orgName) + plans, err := builder.planBuilder.GetPlansForServiceForOrg(service.GUID, orgName) if err != nil { return models.ServiceOffering{}, err } @@ -237,7 +239,7 @@ func (builder Builder) attachPlansToServiceForOrg(service models.ServiceOffering func (builder Builder) attachPlansToManyServices(services []models.ServiceOffering, plans []models.ServicePlanFields) ([]models.ServiceOffering, error) { for _, plan := range plans { for index, service := range services { - if service.Guid == plan.ServiceOfferingGuid { + if service.GUID == plan.ServiceOfferingGUID { services[index].Plans = append(service.Plans, plan) break } @@ -247,7 +249,7 @@ func (builder Builder) attachPlansToManyServices(services []models.ServiceOfferi } func (builder Builder) attachPlansToService(service models.ServiceOffering) (models.ServiceOffering, error) { - plans, err := builder.planBuilder.GetPlansForServiceWithOrgs(service.Guid) + plans, err := builder.planBuilder.GetPlansForServiceWithOrgs(service.GUID) if err != nil { return models.ServiceOffering{}, err } @@ -261,20 +263,20 @@ func (builder Builder) attachServicesToPlans(plans []models.ServicePlanFields) ( servicesMap := make(map[string]models.ServiceOffering) for _, plan := range plans { - if plan.ServiceOfferingGuid == "" { + if plan.ServiceOfferingGUID == "" { continue } - if service, ok := servicesMap[plan.ServiceOfferingGuid]; ok { + if service, ok := servicesMap[plan.ServiceOfferingGUID]; ok { service.Plans = append(service.Plans, plan) - servicesMap[service.Guid] = service + servicesMap[service.GUID] = service } else { - service, err := builder.serviceRepo.GetServiceOfferingByGuid(plan.ServiceOfferingGuid) + service, err := builder.serviceRepo.GetServiceOfferingByGUID(plan.ServiceOfferingGUID) if err != nil { return nil, err } service.Plans = append(service.Plans, plan) - servicesMap[service.Guid] = service + servicesMap[service.GUID] = service } } @@ -293,7 +295,7 @@ func (builder Builder) attachSpecificServiceToPlans(serviceName string, plans [] service := services[0] for _, plan := range plans { - if plan.ServiceOfferingGuid == service.Guid { + if plan.ServiceOfferingGUID == service.GUID { service.Plans = append(service.Plans, plan) } } diff --git a/vendor/code.cloudfoundry.org/cli/cf/actors/services.go b/vendor/code.cloudfoundry.org/cli/cf/actors/services.go new file mode 100644 index 0000000..3db4f71 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/services.go @@ -0,0 +1,109 @@ +package actors + +import ( + "code.cloudfoundry.org/cli/cf/actors/brokerbuilder" + "code.cloudfoundry.org/cli/cf/actors/servicebuilder" + "code.cloudfoundry.org/cli/cf/api/organizations" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . ServiceActor + +type ServiceActor interface { + FilterBrokers(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) +} + +type ServiceHandler struct { + orgRepo organizations.OrganizationRepository + brokerBuilder brokerbuilder.BrokerBuilder + serviceBuilder servicebuilder.ServiceBuilder +} + +func NewServiceHandler(org organizations.OrganizationRepository, brokerBuilder brokerbuilder.BrokerBuilder, serviceBuilder servicebuilder.ServiceBuilder) ServiceHandler { + return ServiceHandler{ + orgRepo: org, + brokerBuilder: brokerBuilder, + serviceBuilder: serviceBuilder, + } +} + +func (actor ServiceHandler) FilterBrokers(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) { + if orgFlag == "" { + return actor.getServiceBrokers(brokerFlag, serviceFlag) + } + _, err := actor.orgRepo.FindByName(orgFlag) + if err != nil { + return nil, err + } + return actor.buildBrokersVisibleFromOrg(brokerFlag, serviceFlag, orgFlag) +} + +func (actor ServiceHandler) getServiceBrokers(brokerName string, serviceName string) ([]models.ServiceBroker, error) { + if serviceName != "" { + broker, err := actor.brokerBuilder.GetBrokerWithSpecifiedService(serviceName) + if err != nil { + return nil, err + } + + if brokerName != "" { + if broker.Name != brokerName { + return nil, nil + } + } + return []models.ServiceBroker{broker}, nil + } + + if brokerName != "" && serviceName == "" { + broker, err := actor.brokerBuilder.GetBrokerWithAllServices(brokerName) + if err != nil { + return nil, err + } + return []models.ServiceBroker{broker}, nil + } + + return actor.brokerBuilder.GetAllServiceBrokers() +} + +func (actor ServiceHandler) buildBrokersVisibleFromOrg(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) { + if serviceFlag != "" && brokerFlag != "" { + service, err := actor.serviceBuilder.GetServiceVisibleToOrg(serviceFlag, orgFlag) + if err != nil { + return nil, err + } + broker, err := actor.brokerBuilder.AttachSpecificBrokerToServices(brokerFlag, []models.ServiceOffering{service}) + if err != nil { + return nil, err + } + return []models.ServiceBroker{broker}, nil + } + + if serviceFlag != "" && brokerFlag == "" { + service, err := actor.serviceBuilder.GetServiceVisibleToOrg(serviceFlag, orgFlag) + if err != nil { + return nil, err + } + return actor.brokerBuilder.AttachBrokersToServices([]models.ServiceOffering{service}) + } + + if serviceFlag == "" && brokerFlag != "" { + services, err := actor.serviceBuilder.GetServicesVisibleToOrg(orgFlag) + if err != nil { + return nil, err + } + broker, err := actor.brokerBuilder.AttachSpecificBrokerToServices(brokerFlag, services) + if err != nil { + return nil, err + } + return []models.ServiceBroker{broker}, nil + } + + if serviceFlag == "" && brokerFlag == "" { + services, err := actor.serviceBuilder.GetServicesVisibleToOrg(orgFlag) + if err != nil { + return nil, err + } + return actor.brokerBuilder.AttachBrokersToServices(services) + } + + return nil, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/actors/services_plans.go b/vendor/code.cloudfoundry.org/cli/cf/actors/services_plans.go new file mode 100644 index 0000000..d611080 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/actors/services_plans.go @@ -0,0 +1,251 @@ +package actors + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/api/organizations" + + "code.cloudfoundry.org/cli/cf/actors/planbuilder" + "code.cloudfoundry.org/cli/cf/actors/servicebuilder" + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . ServicePlanActor + +type ServicePlanActor interface { + FindServiceAccess(string, string) (ServiceAccess, error) + UpdateAllPlansForService(string, bool) error + UpdateOrgForService(string, string, bool) error + UpdateSinglePlanForService(string, string, bool) error + UpdatePlanAndOrgForService(string, string, string, bool) error +} + +type ServiceAccess int + +const ( + ServiceAccessError ServiceAccess = iota + AllPlansArePublic + AllPlansArePrivate + AllPlansAreLimited + SomePlansArePublicSomeAreLimited + SomePlansArePublicSomeArePrivate + SomePlansAreLimitedSomeArePrivate + SomePlansArePublicSomeAreLimitedSomeArePrivate +) + +type ServicePlanHandler struct { + servicePlanRepo api.ServicePlanRepository + servicePlanVisibilityRepo api.ServicePlanVisibilityRepository + orgRepo organizations.OrganizationRepository + serviceBuilder servicebuilder.ServiceBuilder + planBuilder planbuilder.PlanBuilder +} + +func NewServicePlanHandler(plan api.ServicePlanRepository, vis api.ServicePlanVisibilityRepository, org organizations.OrganizationRepository, planBuilder planbuilder.PlanBuilder, serviceBuilder servicebuilder.ServiceBuilder) ServicePlanHandler { + return ServicePlanHandler{ + servicePlanRepo: plan, + servicePlanVisibilityRepo: vis, + orgRepo: org, + serviceBuilder: serviceBuilder, + planBuilder: planBuilder, + } +} + +func (actor ServicePlanHandler) UpdateAllPlansForService(serviceName string, setPlanVisibility bool) error { + service, err := actor.serviceBuilder.GetServiceByNameWithPlans(serviceName) + if err != nil { + return err + } + + for _, plan := range service.Plans { + err = actor.updateSinglePlan(service, plan.Name, setPlanVisibility) + if err != nil { + return err + } + } + return nil +} + +func (actor ServicePlanHandler) UpdateOrgForService(serviceName string, orgName string, setPlanVisibility bool) error { + service, err := actor.serviceBuilder.GetServiceByNameWithPlans(serviceName) + if err != nil { + return err + } + + org, err := actor.orgRepo.FindByName(orgName) + if err != nil { + return err + } + + for _, plan := range service.Plans { + switch { + case plan.Public: + continue + case setPlanVisibility: + err = actor.servicePlanVisibilityRepo.Create(plan.GUID, org.GUID) + if err != nil { + return err + } + case !setPlanVisibility: + err = actor.deleteServicePlanVisibilities(map[string]string{"organization_guid": org.GUID, "service_plan_guid": plan.GUID}) + if err != nil { + return err + } + } + } + + return nil +} + +func (actor ServicePlanHandler) UpdatePlanAndOrgForService(serviceName, planName, orgName string, setPlanVisibility bool) error { + service, err := actor.serviceBuilder.GetServiceByNameWithPlans(serviceName) + if err != nil { + return err + } + + org, err := actor.orgRepo.FindByName(orgName) + if err != nil { + return err + } + + found := false + var servicePlan models.ServicePlanFields + for i, val := range service.Plans { + if val.Name == planName { + found = true + servicePlan = service.Plans[i] + } + } + if !found { + return fmt.Errorf("Service plan %s not found", planName) + } + + switch { + case servicePlan.Public: + return nil + case setPlanVisibility: + // Enable service access + err = actor.servicePlanVisibilityRepo.Create(servicePlan.GUID, org.GUID) + case !setPlanVisibility: + // Disable service access + err = actor.deleteServicePlanVisibilities(map[string]string{"organization_guid": org.GUID, "service_plan_guid": servicePlan.GUID}) + } + + return err +} + +func (actor ServicePlanHandler) UpdateSinglePlanForService(serviceName string, planName string, setPlanVisibility bool) error { + serviceOffering, err := actor.serviceBuilder.GetServiceByNameWithPlans(serviceName) + if err != nil { + return err + } + return actor.updateSinglePlan(serviceOffering, planName, setPlanVisibility) +} + +func (actor ServicePlanHandler) updateSinglePlan(serviceOffering models.ServiceOffering, planName string, setPlanVisibility bool) error { + var planToUpdate *models.ServicePlanFields + + for _, servicePlan := range serviceOffering.Plans { + if servicePlan.Name == planName { + planToUpdate = &servicePlan + break + } + } + + if planToUpdate == nil { + return fmt.Errorf("The plan %s could not be found for service %s", planName, serviceOffering.Label) + } + + return actor.updateServicePlanAvailability(serviceOffering.GUID, *planToUpdate, setPlanVisibility) +} + +func (actor ServicePlanHandler) deleteServicePlanVisibilities(queryParams map[string]string) error { + visibilities, err := actor.servicePlanVisibilityRepo.Search(queryParams) + if err != nil { + return err + } + + for _, visibility := range visibilities { + err = actor.servicePlanVisibilityRepo.Delete(visibility.GUID) + if err != nil { + return err + } + } + + return nil +} + +func (actor ServicePlanHandler) updateServicePlanAvailability(serviceGUID string, servicePlan models.ServicePlanFields, setPlanVisibility bool) error { + // We delete all service plan visibilities for the given Plan since the attribute public should function as a giant on/off + // switch for all orgs. Thus we need to clean up any visibilities laying around so that they don't carry over. + err := actor.deleteServicePlanVisibilities(map[string]string{"service_plan_guid": servicePlan.GUID}) + if err != nil { + return err + } + + if servicePlan.Public == setPlanVisibility { + return nil + } + + return actor.servicePlanRepo.Update(servicePlan, serviceGUID, setPlanVisibility) +} + +func (actor ServicePlanHandler) FindServiceAccess(serviceName string, orgName string) (ServiceAccess, error) { + service, err := actor.serviceBuilder.GetServiceByNameForOrg(serviceName, orgName) + if err != nil { + return ServiceAccessError, err + } + + publicBucket, limitedBucket, privateBucket := 0, 0, 0 + + for _, plan := range service.Plans { + if plan.Public { + publicBucket++ + } else if len(plan.OrgNames) > 0 { + limitedBucket++ + } else { + privateBucket++ + } + } + + if publicBucket > 0 && limitedBucket == 0 && privateBucket == 0 { + return AllPlansArePublic, nil + } + if publicBucket > 0 && limitedBucket > 0 && privateBucket == 0 { + return SomePlansArePublicSomeAreLimited, nil + } + if publicBucket > 0 && privateBucket > 0 && limitedBucket == 0 { + return SomePlansArePublicSomeArePrivate, nil + } + + if limitedBucket > 0 && publicBucket == 0 && privateBucket == 0 { + return AllPlansAreLimited, nil + } + if privateBucket > 0 && publicBucket == 0 && privateBucket == 0 { + return AllPlansArePrivate, nil + } + if limitedBucket > 0 && privateBucket > 0 && publicBucket == 0 { + return SomePlansAreLimitedSomeArePrivate, nil + } + return SomePlansArePublicSomeAreLimitedSomeArePrivate, nil +} + +type PlanAccess int + +const ( + PlanAccessError PlanAccess = iota + All + Limited + None +) + +func (actor ServicePlanHandler) findPlanAccess(plan models.ServicePlanFields) PlanAccess { + if plan.Public { + return All + } else if len(plan.OrgNames) > 0 { + return Limited + } else { + return None + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/app_summary.go b/vendor/code.cloudfoundry.org/cli/cf/api/app_summary.go new file mode 100644 index 0000000..a9cea7f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/app_summary.go @@ -0,0 +1,174 @@ +package api + +import ( + "fmt" + "strings" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +type ApplicationSummaries struct { + Apps []ApplicationFromSummary +} + +func (resource ApplicationSummaries) ToModels() (apps []models.ApplicationFields) { + for _, application := range resource.Apps { + apps = append(apps, application.ToFields()) + } + return +} + +type ApplicationFromSummary struct { + GUID string + Name string + Routes []RouteSummary + Services []ServicePlanSummary + Diego bool `json:"diego,omitempty"` + RunningInstances int `json:"running_instances"` + Memory int64 + Instances int + DiskQuota int64 `json:"disk_quota"` + AppPorts []int `json:"ports"` + URLs []string + EnvironmentVars map[string]interface{} `json:"environment_json,omitempty"` + HealthCheckTimeout int `json:"health_check_timeout"` + State string + DetectedStartCommand string `json:"detected_start_command"` + SpaceGUID string `json:"space_guid"` + StackGUID string `json:"stack_guid"` + Command string `json:"command"` + PackageState string `json:"package_state"` + PackageUpdatedAt *time.Time `json:"package_updated_at"` + Buildpack string +} + +func (resource ApplicationFromSummary) ToFields() (app models.ApplicationFields) { + app = models.ApplicationFields{} + app.GUID = resource.GUID + app.Name = resource.Name + app.Diego = resource.Diego + app.State = strings.ToLower(resource.State) + app.InstanceCount = resource.Instances + app.DiskQuota = resource.DiskQuota + app.RunningInstances = resource.RunningInstances + app.Memory = resource.Memory + app.SpaceGUID = resource.SpaceGUID + app.StackGUID = resource.StackGUID + app.PackageUpdatedAt = resource.PackageUpdatedAt + app.PackageState = resource.PackageState + app.DetectedStartCommand = resource.DetectedStartCommand + app.HealthCheckTimeout = resource.HealthCheckTimeout + app.BuildpackURL = resource.Buildpack + app.Command = resource.Command + app.AppPorts = resource.AppPorts + app.EnvironmentVars = resource.EnvironmentVars + + return +} + +func (resource ApplicationFromSummary) ToModel() models.Application { + var app models.Application + + app.ApplicationFields = resource.ToFields() + + routes := []models.RouteSummary{} + for _, route := range resource.Routes { + routes = append(routes, route.ToModel()) + } + app.Routes = routes + + services := []models.ServicePlanSummary{} + for _, service := range resource.Services { + services = append(services, service.ToModel()) + } + + app.Routes = routes + app.Services = services + + return app +} + +type RouteSummary struct { + GUID string + Host string + Path string + Port int + Domain DomainSummary +} + +func (resource RouteSummary) ToModel() (route models.RouteSummary) { + domain := models.DomainFields{} + domain.GUID = resource.Domain.GUID + domain.Name = resource.Domain.Name + domain.Shared = resource.Domain.OwningOrganizationGUID != "" + + route.GUID = resource.GUID + route.Host = resource.Host + route.Path = resource.Path + route.Port = resource.Port + route.Domain = domain + return +} + +func (resource ServicePlanSummary) ToModel() (route models.ServicePlanSummary) { + route.GUID = resource.GUID + route.Name = resource.Name + return +} + +type DomainSummary struct { + GUID string + Name string + OwningOrganizationGUID string +} + +//go:generate counterfeiter . AppSummaryRepository + +type AppSummaryRepository interface { + GetSummariesInCurrentSpace() (apps []models.Application, apiErr error) + GetSummary(appGUID string) (summary models.Application, apiErr error) +} + +type CloudControllerAppSummaryRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerAppSummaryRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerAppSummaryRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerAppSummaryRepository) GetSummariesInCurrentSpace() ([]models.Application, error) { + resources := new(ApplicationSummaries) + + path := fmt.Sprintf("%s/v2/spaces/%s/summary", repo.config.APIEndpoint(), repo.config.SpaceFields().GUID) + err := repo.gateway.GetResource(path, resources) + if err != nil { + return []models.Application{}, err + } + + apps := make([]models.Application, len(resources.Apps)) + for i, resource := range resources.Apps { + apps[i] = resource.ToModel() + } + + return apps, nil +} + +func (repo CloudControllerAppSummaryRepository) GetSummary(appGUID string) (summary models.Application, apiErr error) { + path := fmt.Sprintf("%s/v2/apps/%s/summary", repo.config.APIEndpoint(), appGUID) + summaryResponse := new(ApplicationFromSummary) + apiErr = repo.gateway.GetResource(path, summaryResponse) + if apiErr != nil { + return + } + + summary = summaryResponse.ToModel() + + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/appevents/app_events.go b/vendor/code.cloudfoundry.org/cli/cf/api/appevents/app_events.go new file mode 100644 index 0000000..b6427de --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/appevents/app_events.go @@ -0,0 +1,52 @@ +package appevents + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + RecentEvents(appGUID string, limit int64) ([]models.EventFields, error) +} + +type CloudControllerAppEventsRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerAppEventsRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerAppEventsRepository { + return CloudControllerAppEventsRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerAppEventsRepository) RecentEvents(appGUID string, limit int64) ([]models.EventFields, error) { + count := int64(0) + events := make([]models.EventFields, 0, limit) + apiErr := repo.listEvents(appGUID, limit, func(eventField models.EventFields) bool { + count++ + events = append(events, eventField) + return count < limit + }) + + return events, apiErr +} + +func (repo CloudControllerAppEventsRepository) listEvents(appGUID string, limit int64, cb func(models.EventFields) bool) error { + path := fmt.Sprintf("/v2/events?results-per-page=%d&order-direction=desc&q=actee:%s", limit, appGUID) + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.EventResourceNewV2{}, + + func(resource interface{}) bool { + return cb(resource.(resources.EventResource).ToFields()) + }) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/appfiles/app_files.go b/vendor/code.cloudfoundry.org/cli/cf/api/appfiles/app_files.go new file mode 100644 index 0000000..a2acf7e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/appfiles/app_files.go @@ -0,0 +1,36 @@ +package appfiles + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + ListFiles(appGUID string, instance int, path string) (files string, apiErr error) +} + +type CloudControllerAppFilesRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerAppFilesRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerAppFilesRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerAppFilesRepository) ListFiles(appGUID string, instance int, path string) (files string, apiErr error) { + url := fmt.Sprintf("%s/v2/apps/%s/instances/%d/files/%s", repo.config.APIEndpoint(), appGUID, instance, path) + request, apiErr := repo.gateway.NewRequest("GET", url, repo.config.AccessToken(), nil) + if apiErr != nil { + return + } + + files, _, apiErr = repo.gateway.PerformRequestForTextResponse(request) + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/appinstances/app_instances.go b/vendor/code.cloudfoundry.org/cli/cf/api/appinstances/app_instances.go new file mode 100644 index 0000000..c9aa2a0 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/appinstances/app_instances.go @@ -0,0 +1,113 @@ +package appinstances + +import ( + "fmt" + "strconv" + "strings" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +type InstancesAPIResponse map[string]InstanceAPIResponse + +type InstanceAPIResponse struct { + State string + Since float64 + Details string +} + +type StatsAPIResponse map[string]InstanceStatsAPIResponse + +type InstanceStatsAPIResponse struct { + Stats struct { + DiskQuota int64 `json:"disk_quota"` + MemQuota int64 `json:"mem_quota"` + Usage struct { + CPU float64 + Disk int64 + Mem int64 + } + } +} + +//go:generate counterfeiter . Repository + +type Repository interface { + GetInstances(appGUID string) (instances []models.AppInstanceFields, apiErr error) + DeleteInstance(appGUID string, instance int) error +} + +type CloudControllerAppInstancesRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerAppInstancesRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerAppInstancesRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerAppInstancesRepository) GetInstances(appGUID string) (instances []models.AppInstanceFields, err error) { + instancesResponse := InstancesAPIResponse{} + err = repo.gateway.GetResource( + fmt.Sprintf("%s/v2/apps/%s/instances", repo.config.APIEndpoint(), appGUID), + &instancesResponse) + if err != nil { + return + } + + instances = make([]models.AppInstanceFields, len(instancesResponse), len(instancesResponse)) + for k, v := range instancesResponse { + index, err := strconv.Atoi(k) + if err != nil { + continue + } + + instances[index] = models.AppInstanceFields{ + State: models.InstanceState(strings.ToLower(v.State)), + Details: v.Details, + Since: time.Unix(int64(v.Since), 0), + } + } + + return repo.updateInstancesWithStats(appGUID, instances) +} + +func (repo CloudControllerAppInstancesRepository) DeleteInstance(appGUID string, instance int) error { + err := repo.gateway.DeleteResource(repo.config.APIEndpoint(), fmt.Sprintf("/v2/apps/%s/instances/%d", appGUID, instance)) + if err != nil { + return err + } + return nil +} + +func (repo CloudControllerAppInstancesRepository) updateInstancesWithStats(guid string, instances []models.AppInstanceFields) (updatedInst []models.AppInstanceFields, apiErr error) { + path := fmt.Sprintf("%s/v2/apps/%s/stats", repo.config.APIEndpoint(), guid) + statsResponse := StatsAPIResponse{} + apiErr = repo.gateway.GetResource(path, &statsResponse) + if apiErr != nil { + return + } + + updatedInst = make([]models.AppInstanceFields, len(statsResponse), len(statsResponse)) + for k, v := range statsResponse { + index, err := strconv.Atoi(k) + if err != nil { + continue + } + + instance := instances[index] + instance.CPUUsage = v.Stats.Usage.CPU + instance.DiskQuota = v.Stats.DiskQuota + instance.DiskUsage = v.Stats.Usage.Disk + instance.MemQuota = v.Stats.MemQuota + instance.MemUsage = v.Stats.Usage.Mem + + updatedInst[index] = instance + } + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/applicationbits/application_bits.go b/vendor/code.cloudfoundry.org/cli/cf/api/applicationbits/application_bits.go new file mode 100644 index 0000000..ccb52d3 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/applicationbits/application_bits.go @@ -0,0 +1,183 @@ +package applicationbits + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "mime/multipart" + "net/textproto" + "os" + "time" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/net" + "code.cloudfoundry.org/gofileutils/fileutils" +) + +const ( + DefaultAppUploadBitsTimeout = 15 * time.Minute +) + +//go:generate counterfeiter . Repository + +type Repository interface { + GetApplicationFiles(appFilesRequest []resources.AppFileResource) ([]resources.AppFileResource, error) + UploadBits(appGUID string, zipFile *os.File, presentFiles []resources.AppFileResource) (apiErr error) +} + +type CloudControllerApplicationBitsRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerApplicationBitsRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerApplicationBitsRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerApplicationBitsRepository) UploadBits(appGUID string, zipFile *os.File, presentFiles []resources.AppFileResource) (apiErr error) { + apiURL := fmt.Sprintf("/v2/apps/%s/bits", appGUID) + fileutils.TempFile("requests", func(requestFile *os.File, err error) { + if err != nil { + apiErr = fmt.Errorf("%s: %s", T("Error creating tmp file: {{.Err}}", map[string]interface{}{"Err": err}), err.Error()) + return + } + + // json.Marshal represents a nil value as "null" instead of an empty slice "[]" + if presentFiles == nil { + presentFiles = []resources.AppFileResource{} + } + + presentFilesJSON, err := json.Marshal(presentFiles) + if err != nil { + apiErr = fmt.Errorf("%s: %s", T("Error marshaling JSON"), err.Error()) + return + } + + boundary, err := repo.writeUploadBody(zipFile, requestFile, presentFilesJSON) + if err != nil { + apiErr = fmt.Errorf("%s: %s", T("Error writing to tmp file: {{.Err}}", map[string]interface{}{"Err": err}), err.Error()) + return + } + + var request *net.Request + request, apiErr = repo.gateway.NewRequestForFile("PUT", repo.config.APIEndpoint()+apiURL, repo.config.AccessToken(), requestFile) + if apiErr != nil { + return + } + + contentType := fmt.Sprintf("multipart/form-data; boundary=%s", boundary) + request.HTTPReq.Header.Set("Content-Type", contentType) + + response := &resources.Resource{} + _, apiErr = repo.gateway.PerformPollingRequestForJSONResponse(repo.config.APIEndpoint(), request, response, DefaultAppUploadBitsTimeout) + if apiErr != nil { + return + } + }) + + return +} + +func (repo CloudControllerApplicationBitsRepository) GetApplicationFiles(appFilesToCheck []resources.AppFileResource) ([]resources.AppFileResource, error) { + integrityFieldsJSON, err := json.Marshal(mapAppFilesToIntegrityFields(appFilesToCheck)) + if err != nil { + apiErr := fmt.Errorf("%s: %s", T("Failed to create json for resource_match request"), err.Error()) + return nil, apiErr + } + + responseFieldsColl := []resources.IntegrityFields{} + apiErr := repo.gateway.UpdateResourceSync( + repo.config.APIEndpoint(), + "/v2/resource_match", + bytes.NewReader(integrityFieldsJSON), + &responseFieldsColl) + + if apiErr != nil { + return nil, apiErr + } + + return intersectAppFilesIntegrityFields(appFilesToCheck, responseFieldsColl), nil +} + +func mapAppFilesToIntegrityFields(in []resources.AppFileResource) (out []resources.IntegrityFields) { + for _, appFile := range in { + out = append(out, appFile.ToIntegrityFields()) + } + return out +} + +func intersectAppFilesIntegrityFields( + appFiles []resources.AppFileResource, + integrityFields []resources.IntegrityFields, +) (out []resources.AppFileResource) { + inputFiles := appFilesBySha(appFiles) + for _, responseFields := range integrityFields { + item, found := inputFiles[responseFields.Sha1] + if found { + out = append(out, item) + } + } + return out +} + +func appFilesBySha(in []resources.AppFileResource) (out map[string]resources.AppFileResource) { + out = map[string]resources.AppFileResource{} + for _, inputFileResource := range in { + out[inputFileResource.Sha1] = inputFileResource + } + return out +} + +func (repo CloudControllerApplicationBitsRepository) writeUploadBody(zipFile *os.File, body *os.File, presentResourcesJSON []byte) (boundary string, err error) { + writer := multipart.NewWriter(body) + defer writer.Close() + + boundary = writer.Boundary() + + part, err := writer.CreateFormField("resources") + if err != nil { + return + } + + _, err = io.Copy(part, bytes.NewBuffer(presentResourcesJSON)) + if err != nil { + return + } + + if zipFile != nil { + zipStats, zipErr := zipFile.Stat() + if zipErr != nil { + return + } + + if zipStats.Size() == 0 { + return + } + + part, zipErr = createZipPartWriter(zipStats, writer) + if zipErr != nil { + return + } + + _, zipErr = io.Copy(part, zipFile) + if zipErr != nil { + return + } + } + + return +} + +func createZipPartWriter(zipStats os.FileInfo, writer *multipart.Writer) (io.Writer, error) { + h := make(textproto.MIMEHeader) + h.Set("Content-Disposition", `form-data; name="application"; filename="application.zip"`) + h.Set("Content-Type", "application/zip") + h.Set("Content-Length", fmt.Sprintf("%d", zipStats.Size())) + h.Set("Content-Transfer-Encoding", "binary") + return writer.CreatePart(h) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/applications/applications.go b/vendor/code.cloudfoundry.org/cli/cf/api/applications/applications.go new file mode 100644 index 0000000..6132ec4 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/applications/applications.go @@ -0,0 +1,136 @@ +package applications + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + "strings" + + . "code.cloudfoundry.org/cli/cf/i18n" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + Create(params models.AppParams) (createdApp models.Application, apiErr error) + GetApp(appGUID string) (models.Application, error) + Read(name string) (app models.Application, apiErr error) + ReadFromSpace(name string, spaceGUID string) (app models.Application, apiErr error) + Update(appGUID string, params models.AppParams) (updatedApp models.Application, apiErr error) + Delete(appGUID string) (apiErr error) + ReadEnv(guid string) (*models.Environment, error) + CreateRestageRequest(guid string) (apiErr error) +} + +type CloudControllerRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerRepository) Create(params models.AppParams) (models.Application, error) { + appResource := resources.NewApplicationEntityFromAppParams(params) + data, err := json.Marshal(appResource) + if err != nil { + return models.Application{}, fmt.Errorf("%s: %s", T("Failed to marshal JSON"), err.Error()) + } + + resource := new(resources.ApplicationResource) + err = repo.gateway.CreateResource(repo.config.APIEndpoint(), "/v2/apps", bytes.NewReader(data), resource) + if err != nil { + return models.Application{}, err + } + + return resource.ToModel(), nil +} + +func (repo CloudControllerRepository) GetApp(appGUID string) (app models.Application, apiErr error) { + path := fmt.Sprintf("%s/v2/apps/%s", repo.config.APIEndpoint(), appGUID) + appResources := new(resources.ApplicationResource) + + apiErr = repo.gateway.GetResource(path, appResources) + if apiErr != nil { + return + } + + app = appResources.ToModel() + return +} + +func (repo CloudControllerRepository) Read(name string) (app models.Application, apiErr error) { + return repo.ReadFromSpace(name, repo.config.SpaceFields().GUID) +} + +func (repo CloudControllerRepository) ReadFromSpace(name string, spaceGUID string) (app models.Application, apiErr error) { + path := fmt.Sprintf("%s/v2/spaces/%s/apps?q=%s&inline-relations-depth=1", repo.config.APIEndpoint(), spaceGUID, url.QueryEscape("name:"+name)) + appResources := new(resources.PaginatedApplicationResources) + apiErr = repo.gateway.GetResource(path, appResources) + if apiErr != nil { + return + } + + if len(appResources.Resources) == 0 { + apiErr = errors.NewModelNotFoundError("App", name) + return + } + + res := appResources.Resources[0] + app = res.ToModel() + return +} + +func (repo CloudControllerRepository) Update(appGUID string, params models.AppParams) (updatedApp models.Application, apiErr error) { + appResource := resources.NewApplicationEntityFromAppParams(params) + data, err := json.Marshal(appResource) + if err != nil { + return models.Application{}, fmt.Errorf("%s: %s", T("Failed to marshal JSON"), err.Error()) + } + + path := fmt.Sprintf("/v2/apps/%s?inline-relations-depth=1", appGUID) + resource := new(resources.ApplicationResource) + apiErr = repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, bytes.NewReader(data), resource) + if apiErr != nil { + return + } + + updatedApp = resource.ToModel() + return +} + +func (repo CloudControllerRepository) Delete(appGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/apps/%s?recursive=true", appGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerRepository) ReadEnv(guid string) (*models.Environment, error) { + var ( + err error + ) + + path := fmt.Sprintf("%s/v2/apps/%s/env", repo.config.APIEndpoint(), guid) + appResource := models.NewEnvironment() + + err = repo.gateway.GetResource(path, appResource) + if err != nil { + return &models.Environment{}, err + } + + return appResource, err +} + +func (repo CloudControllerRepository) CreateRestageRequest(guid string) error { + path := fmt.Sprintf("/v2/apps/%s/restage", guid) + return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, strings.NewReader(""), nil) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/authentication/authentication.go b/vendor/code.cloudfoundry.org/cli/cf/api/authentication/authentication.go new file mode 100644 index 0000000..c877e4f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/authentication/authentication.go @@ -0,0 +1,239 @@ +package authentication + +import ( + "crypto/tls" + "encoding/base64" + "fmt" + "net/http" + "net/url" + "strings" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . TokenRefresher + +type TokenRefresher interface { + RefreshAuthToken() (updatedToken string, apiErr error) +} + +//go:generate counterfeiter . Repository + +type Repository interface { + net.RequestDumperInterface + + RefreshAuthToken() (updatedToken string, apiErr error) + Authenticate(credentials map[string]string) (apiErr error) + Authorize(token string) (string, error) + GetLoginPromptsAndSaveUAAServerURL() (map[string]coreconfig.AuthPrompt, error) +} + +type UAARepository struct { + config coreconfig.ReadWriter + gateway net.Gateway + dumper net.RequestDumper +} + +var ErrPreventRedirect = errors.New("prevent-redirect") + +func NewUAARepository(gateway net.Gateway, config coreconfig.ReadWriter, dumper net.RequestDumper) UAARepository { + return UAARepository{ + config: config, + gateway: gateway, + dumper: dumper, + } +} + +func (uaa UAARepository) Authorize(token string) (string, error) { + httpClient := &http.Client{ + CheckRedirect: func(req *http.Request, _ []*http.Request) error { + uaa.DumpRequest(req) + return ErrPreventRedirect + }, + Timeout: 30 * time.Second, + Transport: &http.Transport{ + DisableKeepAlives: true, + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: uaa.config.IsSSLDisabled(), + }, + Proxy: http.ProxyFromEnvironment, + TLSHandshakeTimeout: 10 * time.Second, + }, + } + + authorizeURL, err := url.Parse(uaa.config.UaaEndpoint()) + if err != nil { + return "", err + } + + values := url.Values{} + values.Set("response_type", "code") + values.Set("grant_type", "authorization_code") + values.Set("client_id", uaa.config.SSHOAuthClient()) + + authorizeURL.Path = "/oauth/authorize" + authorizeURL.RawQuery = values.Encode() + + authorizeReq, err := http.NewRequest("GET", authorizeURL.String(), nil) + if err != nil { + return "", err + } + + authorizeReq.Header.Add("authorization", token) + + resp, err := httpClient.Do(authorizeReq) + if resp != nil { + uaa.DumpResponse(resp) + } + if err == nil { + return "", errors.New(T("Authorization server did not redirect with one time code")) + } + + if netErr, ok := err.(*url.Error); !ok || netErr.Err != ErrPreventRedirect { + return "", errors.New(T("Error requesting one time code from server: {{.Error}}", map[string]interface{}{"Error": err.Error()})) + } + + loc, err := resp.Location() + if err != nil { + return "", errors.New(T("Error getting the redirected location: {{.Error}}", map[string]interface{}{"Error": err.Error()})) + } + + codes := loc.Query()["code"] + if len(codes) != 1 { + return "", errors.New(T("Unable to acquire one time code from authorization response")) + } + + return codes[0], nil +} + +func (uaa UAARepository) Authenticate(credentials map[string]string) error { + data := url.Values{ + "grant_type": {"password"}, + "scope": {""}, + } + for key, val := range credentials { + data[key] = []string{val} + } + + err := uaa.getAuthToken(data) + if err != nil { + httpError, ok := err.(errors.HTTPError) + if ok { + switch { + case httpError.StatusCode() == http.StatusUnauthorized: + return errors.New(T("Credentials were rejected, please try again.")) + case httpError.StatusCode() >= http.StatusInternalServerError: + return errors.New(T("The targeted API endpoint could not be reached.")) + } + } + + return err + } + + return nil +} + +func (uaa UAARepository) DumpRequest(req *http.Request) { + uaa.dumper.DumpRequest(req) +} + +func (uaa UAARepository) DumpResponse(res *http.Response) { + uaa.dumper.DumpResponse(res) +} + +type LoginResource struct { + Prompts map[string][]string + Links map[string]string +} + +var knownAuthPromptTypes = map[string]coreconfig.AuthPromptType{ + "text": coreconfig.AuthPromptTypeText, + "password": coreconfig.AuthPromptTypePassword, +} + +func (r *LoginResource) parsePrompts() (prompts map[string]coreconfig.AuthPrompt) { + prompts = make(map[string]coreconfig.AuthPrompt) + for key, val := range r.Prompts { + prompts[key] = coreconfig.AuthPrompt{ + Type: knownAuthPromptTypes[val[0]], + DisplayName: val[1], + } + } + return +} + +func (uaa UAARepository) GetLoginPromptsAndSaveUAAServerURL() (prompts map[string]coreconfig.AuthPrompt, apiErr error) { + url := fmt.Sprintf("%s/login", uaa.config.AuthenticationEndpoint()) + resource := &LoginResource{} + apiErr = uaa.gateway.GetResource(url, resource) + + prompts = resource.parsePrompts() + if resource.Links["uaa"] == "" { + uaa.config.SetUaaEndpoint(uaa.config.AuthenticationEndpoint()) + } else { + uaa.config.SetUaaEndpoint(resource.Links["uaa"]) + } + return +} + +func (uaa UAARepository) RefreshAuthToken() (string, error) { + data := url.Values{ + "refresh_token": {uaa.config.RefreshToken()}, + "grant_type": {"refresh_token"}, + "scope": {""}, + } + + apiErr := uaa.getAuthToken(data) + updatedToken := uaa.config.AccessToken() + + return updatedToken, apiErr +} + +func (uaa UAARepository) getAuthToken(data url.Values) error { + type uaaErrorResponse struct { + Code string `json:"error"` + Description string `json:"error_description"` + } + + type AuthenticationResponse struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + RefreshToken string `json:"refresh_token"` + Error uaaErrorResponse `json:"error"` + } + + path := fmt.Sprintf("%s/oauth/token", uaa.config.AuthenticationEndpoint()) + accessToken := "Basic " + base64.StdEncoding.EncodeToString([]byte(uaa.config.UAAOAuthClient()+":"+uaa.config.UAAOAuthClientSecret())) + request, err := uaa.gateway.NewRequest("POST", path, accessToken, strings.NewReader(data.Encode())) + if err != nil { + return fmt.Errorf("%s: %s", T("Failed to start oauth request"), err.Error()) + } + request.HTTPReq.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + response := new(AuthenticationResponse) + _, err = uaa.gateway.PerformRequestForJSONResponse(request, &response) + + switch err.(type) { + case nil: + case errors.HTTPError: + return err + case *errors.InvalidTokenError: + return errors.New(T("Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a -u -o -s ` to log back in and re-authenticate.")) + default: + return fmt.Errorf("%s: %s", T("auth request failed"), err.Error()) + } + + // TODO: get the actual status code + if response.Error.Code != "" { + return errors.NewHTTPError(0, response.Error.Code, response.Error.Description) + } + + uaa.config.SetAccessToken(fmt.Sprintf("%s %s", response.TokenType, response.AccessToken)) + uaa.config.SetRefreshToken(response.RefreshToken) + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/buildpack_bits.go b/vendor/code.cloudfoundry.org/cli/cf/api/buildpack_bits.go new file mode 100644 index 0000000..0625349 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/buildpack_bits.go @@ -0,0 +1,308 @@ +package api + +import ( + "archive/zip" + "crypto/tls" + "crypto/x509" + "fmt" + "io" + "io/ioutil" + "mime/multipart" + gonet "net" + "net/http" + "os" + "path" + "path/filepath" + "strings" + "time" + + "code.cloudfoundry.org/cli/cf/appfiles" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" + "code.cloudfoundry.org/gofileutils/fileutils" +) + +//go:generate counterfeiter . BuildpackBitsRepository + +type BuildpackBitsRepository interface { + UploadBuildpack(buildpack models.Buildpack, buildpackFile *os.File, zipFileName string) error + CreateBuildpackZipFile(buildpackPath string) (*os.File, string, error) +} + +type CloudControllerBuildpackBitsRepository struct { + config coreconfig.Reader + gateway net.Gateway + zipper appfiles.Zipper + TrustedCerts []tls.Certificate +} + +func NewCloudControllerBuildpackBitsRepository(config coreconfig.Reader, gateway net.Gateway, zipper appfiles.Zipper) (repo CloudControllerBuildpackBitsRepository) { + repo.config = config + repo.gateway = gateway + repo.zipper = zipper + return +} + +func zipErrorHelper(err error) error { + return fmt.Errorf("%s: %s", T("Couldn't write zip file"), err.Error()) +} + +func (repo CloudControllerBuildpackBitsRepository) CreateBuildpackZipFile(buildpackPath string) (*os.File, string, error) { + zipFileToUpload, err := ioutil.TempFile("", "buildpack-upload") + if err != nil { + return nil, "", fmt.Errorf("%s: %s", T("Couldn't create temp file for upload"), err.Error()) + } + + var buildpackFileName string + if isWebURL(buildpackPath) { + buildpackFileName = path.Base(buildpackPath) + repo.downloadBuildpack(buildpackPath, func(downloadFile *os.File, downloadErr error) { + if downloadErr != nil { + err = downloadErr + return + } + + downloadErr = normalizeBuildpackArchive(downloadFile, zipFileToUpload) + if downloadErr != nil { + err = downloadErr + return + } + }) + if err != nil { + return nil, "", zipErrorHelper(err) + } + } else { + buildpackFileName = filepath.Base(buildpackPath) + dir, err := filepath.Abs(buildpackPath) + if err != nil { + return nil, "", zipErrorHelper(err) + } + + buildpackFileName = filepath.Base(dir) + stats, err := os.Stat(dir) + if err != nil { + return nil, "", fmt.Errorf("%s: %s", T("Error opening buildpack file"), err.Error()) + } + + if stats.IsDir() { + buildpackFileName += ".zip" // FIXME: remove once #71167394 is fixed + err = repo.zipper.Zip(buildpackPath, zipFileToUpload) + if err != nil { + return nil, "", zipErrorHelper(err) + } + } else { + specifiedFile, err := os.Open(buildpackPath) + if err != nil { + return nil, "", fmt.Errorf("%s: %s", T("Couldn't open buildpack file"), err.Error()) + } + err = normalizeBuildpackArchive(specifiedFile, zipFileToUpload) + if err != nil { + return nil, "", zipErrorHelper(err) + } + } + } + + return zipFileToUpload, buildpackFileName, nil +} + +func normalizeBuildpackArchive(inputFile *os.File, outputFile *os.File) error { + stats, toplevelErr := inputFile.Stat() + if toplevelErr != nil { + return toplevelErr + } + + reader, toplevelErr := zip.NewReader(inputFile, stats.Size()) + if toplevelErr != nil { + return toplevelErr + } + + contents := reader.File + + parentPath, hasBuildpack := findBuildpackPath(contents) + + if !hasBuildpack { + return errors.New(T("Zip archive does not contain a buildpack")) + } + + writer := zip.NewWriter(outputFile) + + for _, file := range contents { + name := file.Name + if strings.HasPrefix(name, parentPath) { + relativeFilename := strings.TrimPrefix(name, parentPath+"/") + if relativeFilename == "" { + continue + } + + fileInfo := file.FileInfo() + header, err := zip.FileInfoHeader(fileInfo) + if err != nil { + return err + } + header.Name = relativeFilename + + w, err := writer.CreateHeader(header) + if err != nil { + return err + } + + r, err := file.Open() + if err != nil { + return err + } + + _, err = io.Copy(w, r) + if err != nil { + return err + } + + err = r.Close() + if err != nil { + return err + } + } + } + + toplevelErr = writer.Close() + if toplevelErr != nil { + return toplevelErr + } + + _, toplevelErr = outputFile.Seek(0, 0) + if toplevelErr != nil { + return toplevelErr + } + + return nil +} + +func findBuildpackPath(zipFiles []*zip.File) (parentPath string, foundBuildpack bool) { + needle := "bin/compile" + + for _, file := range zipFiles { + if strings.HasSuffix(file.Name, needle) { + foundBuildpack = true + parentPath = path.Join(file.Name, "..", "..") + if parentPath == "." { + parentPath = "" + } + return + } + } + return +} + +func isWebURL(path string) bool { + return strings.HasPrefix(path, "http://") || strings.HasPrefix(path, "https://") +} + +func (repo CloudControllerBuildpackBitsRepository) downloadBuildpack(url string, cb func(*os.File, error)) { + fileutils.TempFile("buildpack-download", func(tempfile *os.File, err error) { + if err != nil { + cb(nil, err) + return + } + + var certPool *x509.CertPool + if len(repo.TrustedCerts) > 0 { + certPool = x509.NewCertPool() + for _, tlsCert := range repo.TrustedCerts { + cert, _ := x509.ParseCertificate(tlsCert.Certificate[0]) + certPool.AddCert(cert) + } + } + + client := &http.Client{ + Transport: &http.Transport{ + Dial: (&gonet.Dialer{Timeout: 5 * time.Second}).Dial, + TLSClientConfig: &tls.Config{RootCAs: certPool}, + Proxy: http.ProxyFromEnvironment, + }, + } + + response, err := client.Get(url) + if err != nil { + cb(nil, err) + return + } + defer response.Body.Close() + + _, err = io.Copy(tempfile, response.Body) + if err != nil { + cb(nil, err) + return + } + + _, err = tempfile.Seek(0, 0) + if err != nil { + cb(nil, err) + return + } + + cb(tempfile, nil) + }) +} + +func (repo CloudControllerBuildpackBitsRepository) UploadBuildpack(buildpack models.Buildpack, buildpackFile *os.File, buildpackName string) error { + defer func() { + buildpackFile.Close() + os.Remove(buildpackFile.Name()) + }() + return repo.performMultiPartUpload( + fmt.Sprintf("%s/v2/buildpacks/%s/bits", repo.config.APIEndpoint(), buildpack.GUID), + "buildpack", + buildpackName, + buildpackFile) +} + +func (repo CloudControllerBuildpackBitsRepository) performMultiPartUpload(url string, fieldName string, fileName string, body io.Reader) error { + var capturedErr error + + fileutils.TempFile("requests", func(requestFile *os.File, err error) { + if err != nil { + capturedErr = err + return + } + + writer := multipart.NewWriter(requestFile) + part, err := writer.CreateFormFile(fieldName, fileName) + + if err != nil { + _ = writer.Close() + capturedErr = err + return + } + + _, err = io.Copy(part, body) + if err != nil { + capturedErr = fmt.Errorf("%s: %s", T("Error creating upload"), err.Error()) + return + } + + err = writer.Close() + if err != nil { + capturedErr = err + return + } + + var request *net.Request + request, err = repo.gateway.NewRequestForFile("PUT", url, repo.config.AccessToken(), requestFile) + if err != nil { + capturedErr = err + return + } + + contentType := fmt.Sprintf("multipart/form-data; boundary=%s", writer.Boundary()) + request.HTTPReq.Header.Set("Content-Type", contentType) + + _, err = repo.gateway.PerformRequest(request) + if err != nil { + capturedErr = err + } + }) + + return capturedErr +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/buildpacks.go b/vendor/code.cloudfoundry.org/cli/cf/api/buildpacks.go new file mode 100644 index 0000000..2f705b1 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/buildpacks.go @@ -0,0 +1,118 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . BuildpackRepository + +type BuildpackRepository interface { + FindByName(name string) (buildpack models.Buildpack, apiErr error) + ListBuildpacks(func(models.Buildpack) bool) error + Create(name string, position *int, enabled *bool, locked *bool) (createdBuildpack models.Buildpack, apiErr error) + Delete(buildpackGUID string) (apiErr error) + Update(buildpack models.Buildpack) (updatedBuildpack models.Buildpack, apiErr error) +} + +type CloudControllerBuildpackRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerBuildpackRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerBuildpackRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerBuildpackRepository) ListBuildpacks(cb func(models.Buildpack) bool) error { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + buildpacksPath, + resources.BuildpackResource{}, + func(resource interface{}) bool { + return cb(resource.(resources.BuildpackResource).ToFields()) + }) +} + +func (repo CloudControllerBuildpackRepository) FindByName(name string) (buildpack models.Buildpack, apiErr error) { + foundIt := false + apiErr = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("%s?q=%s", buildpacksPath, url.QueryEscape("name:"+name)), + resources.BuildpackResource{}, + func(resource interface{}) bool { + buildpack = resource.(resources.BuildpackResource).ToFields() + foundIt = true + return false + }) + + if !foundIt { + apiErr = errors.NewModelNotFoundError("Buildpack", name) + } + return +} + +func (repo CloudControllerBuildpackRepository) Create(name string, position *int, enabled *bool, locked *bool) (createdBuildpack models.Buildpack, apiErr error) { + entity := resources.BuildpackEntity{Name: name, Position: position, Enabled: enabled, Locked: locked} + body, err := json.Marshal(entity) + if err != nil { + apiErr = fmt.Errorf("%s: %s", T("Could not serialize information"), err.Error()) + return + } + + resource := new(resources.BuildpackResource) + apiErr = repo.gateway.CreateResource(repo.config.APIEndpoint(), buildpacksPath, bytes.NewReader(body), resource) + if apiErr != nil { + return + } + + createdBuildpack = resource.ToFields() + return +} + +func (repo CloudControllerBuildpackRepository) Delete(buildpackGUID string) (apiErr error) { + path := fmt.Sprintf("%s/%s", buildpacksPath, buildpackGUID) + apiErr = repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) + return +} + +func (repo CloudControllerBuildpackRepository) Update(buildpack models.Buildpack) (updatedBuildpack models.Buildpack, apiErr error) { + path := fmt.Sprintf("%s/%s", buildpacksPath, buildpack.GUID) + + entity := resources.BuildpackEntity{ + Name: buildpack.Name, + Position: buildpack.Position, + Enabled: buildpack.Enabled, + Key: "", + Filename: "", + Locked: buildpack.Locked, + } + + body, err := json.Marshal(entity) + if err != nil { + apiErr = fmt.Errorf("%s: %s", T("Could not serialize updates."), err.Error()) + return + } + + resource := new(resources.BuildpackResource) + apiErr = repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, bytes.NewReader(body), resource) + if apiErr != nil { + return + } + + updatedBuildpack = resource.ToFields() + return +} + +const buildpacksPath = "/v2/buildpacks" diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/copyapplicationsource/copy_application_source.go b/vendor/code.cloudfoundry.org/cli/cf/api/copyapplicationsource/copy_application_source.go new file mode 100644 index 0000000..57360a1 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/copyapplicationsource/copy_application_source.go @@ -0,0 +1,33 @@ +package copyapplicationsource + +import ( + "fmt" + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + CopyApplication(sourceAppGUID, targetAppGUID string) error +} + +type CloudControllerApplicationSourceRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerCopyApplicationSourceRepository(config coreconfig.Reader, gateway net.Gateway) *CloudControllerApplicationSourceRepository { + return &CloudControllerApplicationSourceRepository{ + config: config, + gateway: gateway, + } +} + +func (repo *CloudControllerApplicationSourceRepository) CopyApplication(sourceAppGUID, targetAppGUID string) error { + url := fmt.Sprintf("/v2/apps/%s/copy_bits", targetAppGUID) + body := fmt.Sprintf(`{"source_app_guid":"%s"}`, sourceAppGUID) + return repo.gateway.CreateResource(repo.config.APIEndpoint(), url, strings.NewReader(body), new(interface{})) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/curl.go b/vendor/code.cloudfoundry.org/cli/cf/api/curl.go new file mode 100644 index 0000000..aead9aa --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/curl.go @@ -0,0 +1,93 @@ +package api + +import ( + "bufio" + "fmt" + "io/ioutil" + "net/http" + "net/http/httputil" + "net/textproto" + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . CurlRepository + +type CurlRepository interface { + Request(method, path, header, body string) (resHeaders string, resBody string, apiErr error) +} + +type CloudControllerCurlRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerCurlRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerCurlRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerCurlRepository) Request(method, path, headerString, body string) (resHeaders, resBody string, err error) { + url := fmt.Sprintf("%s/%s", repo.config.APIEndpoint(), strings.TrimLeft(path, "/")) + + if method == "" && body != "" { + method = "POST" + } + + req, err := repo.gateway.NewRequest(method, url, repo.config.AccessToken(), strings.NewReader(body)) + if err != nil { + return + } + + err = mergeHeaders(req.HTTPReq.Header, headerString) + if err != nil { + err = fmt.Errorf("%s: %s", T("Error parsing headers"), err.Error()) + return + } + + res, err := repo.gateway.PerformRequest(req) + + if _, ok := err.(errors.HTTPError); ok { + err = nil + } + + if err != nil { + return + } + defer res.Body.Close() + + headerBytes, _ := httputil.DumpResponse(res, false) + resHeaders = string(headerBytes) + + bytes, err := ioutil.ReadAll(res.Body) + if err != nil { + err = fmt.Errorf("%s: %s", T("Error reading response"), err.Error()) + } + resBody = string(bytes) + + return +} + +func mergeHeaders(destination http.Header, headerString string) (err error) { + headerString = strings.TrimSpace(headerString) + headerString += "\n\n" + headerReader := bufio.NewReader(strings.NewReader(headerString)) + headers, err := textproto.NewReader(headerReader).ReadMIMEHeader() + if err != nil { + return + } + + for key, values := range headers { + destination.Del(key) + for _, value := range values { + destination.Add(key, value) + } + } + + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/domains.go b/vendor/code.cloudfoundry.org/cli/cf/api/domains.go new file mode 100644 index 0000000..28b64ab --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/domains.go @@ -0,0 +1,194 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + + . "code.cloudfoundry.org/cli/cf/i18n" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . DomainRepository + +type DomainRepository interface { + ListDomainsForOrg(orgGUID string, cb func(models.DomainFields) bool) error + FindSharedByName(name string) (domain models.DomainFields, apiErr error) + FindPrivateByName(name string) (domain models.DomainFields, apiErr error) + FindByNameInOrg(name string, owningOrgGUID string) (domain models.DomainFields, apiErr error) + Create(domainName string, owningOrgGUID string) (createdDomain models.DomainFields, apiErr error) + CreateSharedDomain(domainName string, routerGroupGUID string) (apiErr error) + Delete(domainGUID string) (apiErr error) + DeleteSharedDomain(domainGUID string) (apiErr error) + FirstOrDefault(orgGUID string, name *string) (domain models.DomainFields, error error) +} + +type CloudControllerDomainRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerDomainRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerDomainRepository { + return CloudControllerDomainRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerDomainRepository) ListDomainsForOrg(orgGUID string, cb func(models.DomainFields) bool) error { + path := fmt.Sprintf("/v2/organizations/%s/private_domains", orgGUID) + err := repo.listDomains(path, cb) + if err != nil { + return err + } + err = repo.listDomains("/v2/shared_domains?inline-relations-depth=1", cb) + return err +} + +func (repo CloudControllerDomainRepository) listDomains(path string, cb func(models.DomainFields) bool) error { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.DomainResource{}, + func(resource interface{}) bool { + return cb(resource.(resources.DomainResource).ToFields()) + }) +} + +func (repo CloudControllerDomainRepository) isOrgDomain(orgGUID string, domain models.DomainFields) bool { + return orgGUID == domain.OwningOrganizationGUID || domain.Shared +} + +func (repo CloudControllerDomainRepository) FindSharedByName(name string) (domain models.DomainFields, apiErr error) { + path := fmt.Sprintf("/v2/shared_domains?inline-relations-depth=1&q=name:%s", url.QueryEscape(name)) + return repo.findOneWithPath(path, name) +} + +func (repo CloudControllerDomainRepository) FindPrivateByName(name string) (domain models.DomainFields, apiErr error) { + path := fmt.Sprintf("/v2/private_domains?inline-relations-depth=1&q=name:%s", url.QueryEscape(name)) + return repo.findOneWithPath(path, name) +} + +func (repo CloudControllerDomainRepository) FindByNameInOrg(name string, orgGUID string) (models.DomainFields, error) { + path := fmt.Sprintf("/v2/organizations/%s/private_domains?inline-relations-depth=1&q=name:%s", orgGUID, url.QueryEscape(name)) + domain, err := repo.findOneWithPath(path, name) + + switch err.(type) { + case *errors.ModelNotFoundError: + domain, err = repo.FindSharedByName(name) + if err != nil { + return models.DomainFields{}, err + } + if !domain.Shared { + err = errors.NewModelNotFoundError("Domain", name) + } + } + + return domain, err +} + +func (repo CloudControllerDomainRepository) findOneWithPath(path, name string) (models.DomainFields, error) { + var domain models.DomainFields + + foundDomain := false + err := repo.listDomains(path, func(result models.DomainFields) bool { + domain = result + foundDomain = true + return false + }) + + if err == nil && !foundDomain { + err = errors.NewModelNotFoundError("Domain", name) + } + + return domain, err +} + +func (repo CloudControllerDomainRepository) Create(domainName string, owningOrgGUID string) (createdDomain models.DomainFields, err error) { + data, err := json.Marshal(resources.DomainEntity{ + Name: domainName, + OwningOrganizationGUID: owningOrgGUID, + Wildcard: true, + }) + + if err != nil { + return + } + + resource := new(resources.DomainResource) + err = repo.gateway.CreateResource( + repo.config.APIEndpoint(), + "/v2/private_domains", + bytes.NewReader(data), + resource) + + if err != nil { + return + } + + createdDomain = resource.ToFields() + return +} + +func (repo CloudControllerDomainRepository) CreateSharedDomain(domainName string, routerGroupGUID string) error { + data, err := json.Marshal(resources.DomainEntity{ + Name: domainName, + RouterGroupGUID: routerGroupGUID, + Wildcard: true, + }) + if err != nil { + return err + } + + return repo.gateway.CreateResource( + repo.config.APIEndpoint(), + "/v2/shared_domains", + bytes.NewReader(data), + ) +} + +func (repo CloudControllerDomainRepository) Delete(domainGUID string) error { + path := fmt.Sprintf("/v2/private_domains/%s?recursive=true", domainGUID) + return repo.gateway.DeleteResource( + repo.config.APIEndpoint(), + path) +} + +func (repo CloudControllerDomainRepository) DeleteSharedDomain(domainGUID string) error { + path := fmt.Sprintf("/v2/shared_domains/%s?recursive=true", domainGUID) + return repo.gateway.DeleteResource( + repo.config.APIEndpoint(), + path) +} + +func (repo CloudControllerDomainRepository) FirstOrDefault(orgGUID string, name *string) (domain models.DomainFields, error error) { + if name == nil { + domain, error = repo.defaultDomain(orgGUID) + } else { + domain, error = repo.FindByNameInOrg(*name, orgGUID) + } + return +} + +func (repo CloudControllerDomainRepository) defaultDomain(orgGUID string) (models.DomainFields, error) { + var foundDomain *models.DomainFields + err := repo.ListDomainsForOrg(orgGUID, func(domain models.DomainFields) bool { + foundDomain = &domain + return !domain.Shared + }) + if err != nil { + return models.DomainFields{}, err + } + + if foundDomain == nil { + return models.DomainFields{}, errors.New(T("Could not find a default domain")) + } + + return *foundDomain, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/endpoints.go b/vendor/code.cloudfoundry.org/cli/cf/api/endpoints.go new file mode 100644 index 0000000..ce3e085 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/endpoints.go @@ -0,0 +1,48 @@ +package api + +import ( + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/net" +) + +type RemoteInfoRepository struct { + gateway net.Gateway +} + +func NewEndpointRepository(gateway net.Gateway) RemoteInfoRepository { + r := RemoteInfoRepository{ + gateway: gateway, + } + return r +} + +func (repo RemoteInfoRepository) GetCCInfo(endpoint string) (*coreconfig.CCInfo, string, error) { + if strings.HasPrefix(endpoint, "http") { + serverResponse, err := repo.getCCAPIInfo(endpoint) + if err != nil { + return nil, "", err + } + + return serverResponse, endpoint, nil + } + + finalEndpoint := "https://" + endpoint + serverResponse, err := repo.getCCAPIInfo(finalEndpoint) + if err != nil { + return nil, "", err + } + + return serverResponse, finalEndpoint, nil +} + +func (repo RemoteInfoRepository) getCCAPIInfo(endpoint string) (*coreconfig.CCInfo, error) { + serverResponse := new(coreconfig.CCInfo) + err := repo.gateway.GetResource(endpoint+"/v2/info", &serverResponse) + if err != nil { + return nil, err + } + + return serverResponse, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/environmentvariablegroups/environment_variable_groups.go b/vendor/code.cloudfoundry.org/cli/cf/api/environmentvariablegroups/environment_variable_groups.go new file mode 100644 index 0000000..6a27f39 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/environmentvariablegroups/environment_variable_groups.go @@ -0,0 +1,95 @@ +package environmentvariablegroups + +import ( + "fmt" + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + ListRunning() (variables []models.EnvironmentVariable, apiErr error) + ListStaging() (variables []models.EnvironmentVariable, apiErr error) + SetStaging(string) error + SetRunning(string) error +} + +type CloudControllerRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerRepository) ListRunning() (variables []models.EnvironmentVariable, apiErr error) { + var rawResponse interface{} + url := fmt.Sprintf("%s/v2/config/environment_variable_groups/running", repo.config.APIEndpoint()) + apiErr = repo.gateway.GetResource(url, &rawResponse) + if apiErr != nil { + return + } + + variables, err := repo.marshalToEnvironmentVariables(rawResponse) + if err != nil { + return nil, err + } + + return variables, nil +} + +func (repo CloudControllerRepository) ListStaging() (variables []models.EnvironmentVariable, apiErr error) { + var rawResponse interface{} + url := fmt.Sprintf("%s/v2/config/environment_variable_groups/staging", repo.config.APIEndpoint()) + apiErr = repo.gateway.GetResource(url, &rawResponse) + if apiErr != nil { + return + } + + variables, err := repo.marshalToEnvironmentVariables(rawResponse) + if err != nil { + return nil, err + } + + return variables, nil +} + +func (repo CloudControllerRepository) SetStaging(stagingVars string) error { + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), "/v2/config/environment_variable_groups/staging", strings.NewReader(stagingVars)) +} + +func (repo CloudControllerRepository) SetRunning(runningVars string) error { + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), "/v2/config/environment_variable_groups/running", strings.NewReader(runningVars)) +} + +func (repo CloudControllerRepository) marshalToEnvironmentVariables(rawResponse interface{}) ([]models.EnvironmentVariable, error) { + var variables []models.EnvironmentVariable + for key, value := range rawResponse.(map[string]interface{}) { + stringvalue, err := repo.convertValueToString(value) + if err != nil { + return nil, err + } + variable := models.EnvironmentVariable{Name: key, Value: stringvalue} + variables = append(variables, variable) + } + return variables, nil +} + +func (repo CloudControllerRepository) convertValueToString(value interface{}) (string, error) { + stringvalue, ok := value.(string) + if !ok { + floatvalue, ok := value.(float64) + if !ok { + return "", fmt.Errorf("Attempted to read environment variable value of unknown type: %#v", value) + } + stringvalue = fmt.Sprintf("%d", int(floatvalue)) + } + return stringvalue, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/featureflags/feature_flags.go b/vendor/code.cloudfoundry.org/cli/cf/api/featureflags/feature_flags.go new file mode 100644 index 0000000..b93d563 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/featureflags/feature_flags.go @@ -0,0 +1,63 @@ +package featureflags + +import ( + "fmt" + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . FeatureFlagRepository + +type FeatureFlagRepository interface { + List() ([]models.FeatureFlag, error) + FindByName(string) (models.FeatureFlag, error) + Update(string, bool) error +} + +type CloudControllerFeatureFlagRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerFeatureFlagRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerFeatureFlagRepository { + return CloudControllerFeatureFlagRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerFeatureFlagRepository) List() ([]models.FeatureFlag, error) { + flags := []models.FeatureFlag{} + apiError := repo.gateway.GetResource( + fmt.Sprintf("%s/v2/config/feature_flags", repo.config.APIEndpoint()), + &flags) + + if apiError != nil { + return nil, apiError + } + + return flags, nil +} + +func (repo CloudControllerFeatureFlagRepository) FindByName(name string) (models.FeatureFlag, error) { + flag := models.FeatureFlag{} + apiError := repo.gateway.GetResource( + fmt.Sprintf("%s/v2/config/feature_flags/%s", repo.config.APIEndpoint(), name), + &flag) + + if apiError != nil { + return models.FeatureFlag{}, apiError + } + + return flag, nil +} + +func (repo CloudControllerFeatureFlagRepository) Update(flag string, set bool) error { + url := fmt.Sprintf("/v2/config/feature_flags/%s", flag) + body := fmt.Sprintf(`{"enabled": %v}`, set) + + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), url, strings.NewReader(body)) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/logs/logs_repository.go b/vendor/code.cloudfoundry.org/cli/cf/api/logs/logs_repository.go new file mode 100644 index 0000000..aba96b8 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/logs/logs_repository.go @@ -0,0 +1,27 @@ +package logs + +import "time" + +//go:generate counterfeiter . Loggable +type Loggable interface { + ToLog(loc *time.Location) string + ToSimpleLog() string + GetSourceName() string +} + +//go:generate counterfeiter . Repository + +type Repository interface { + RecentLogsFor(appGUID string) ([]Loggable, error) + TailLogsFor(appGUID string, onConnect func(), logChan chan<- Loggable, errChan chan<- error) + Close() +} + +const defaultBufferTime time.Duration = 25 * time.Millisecond + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_consumer.go b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_consumer.go new file mode 100644 index 0000000..a2d59d7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_consumer.go @@ -0,0 +1,17 @@ +package logs + +import ( + "github.com/cloudfoundry/noaa/consumer" + "github.com/cloudfoundry/sonde-go/events" +) + +// Should be satisfied automatically by *noaa.Consumer +//go:generate counterfeiter . NoaaConsumer + +type NoaaConsumer interface { + TailingLogs(string, string) (<-chan *events.LogMessage, <-chan error) + RecentLogs(appGUID string, authToken string) ([]*events.LogMessage, error) + Close() error + SetOnConnectCallback(cb func()) + RefreshTokenFrom(tr consumer.TokenRefresher) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_logs_repository.go b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_logs_repository.go new file mode 100644 index 0000000..382d791 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_logs_repository.go @@ -0,0 +1,135 @@ +package logs + +import ( + "errors" + "fmt" + "time" + + . "code.cloudfoundry.org/cli/cf/i18n" + + "code.cloudfoundry.org/cli/cf/api/authentication" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + + "github.com/cloudfoundry/noaa" + noaaerrors "github.com/cloudfoundry/noaa/errors" + "github.com/cloudfoundry/sonde-go/events" +) + +type NoaaLogsRepository struct { + config coreconfig.Reader + consumer NoaaConsumer + tokenRefresher authentication.TokenRefresher + messageQueue *NoaaMessageQueue + BufferTime time.Duration + retryTimeout time.Duration +} + +func NewNoaaLogsRepository(config coreconfig.Reader, consumer NoaaConsumer, tr authentication.TokenRefresher, retryTimeout time.Duration) *NoaaLogsRepository { + consumer.RefreshTokenFrom(tr) + return &NoaaLogsRepository{ + config: config, + consumer: consumer, + tokenRefresher: tr, + messageQueue: NewNoaaMessageQueue(), + BufferTime: defaultBufferTime, + retryTimeout: retryTimeout, + } +} + +func (repo *NoaaLogsRepository) Close() { + _ = repo.consumer.Close() +} + +func loggableMessagesFromNoaaMessages(messages []*events.LogMessage) []Loggable { + loggableMessages := make([]Loggable, len(messages)) + + for i, m := range messages { + loggableMessages[i] = NewNoaaLogMessage(m) + } + + return loggableMessages +} + +func (repo *NoaaLogsRepository) RecentLogsFor(appGUID string) ([]Loggable, error) { + logs, err := repo.consumer.RecentLogs(appGUID, repo.config.AccessToken()) + + if err != nil { + return loggableMessagesFromNoaaMessages(logs), err + } + return loggableMessagesFromNoaaMessages(noaa.SortRecent(logs)), err +} + +func (repo *NoaaLogsRepository) TailLogsFor(appGUID string, onConnect func(), logChan chan<- Loggable, errChan chan<- error) { + ticker := time.NewTicker(repo.BufferTime) + retryTimer := newUnstartedTimer() + + endpoint := repo.config.DopplerEndpoint() + if endpoint == "" { + errChan <- errors.New(T("No doppler loggregator endpoint found. Cannot retrieve logs.")) + return + } + + repo.consumer.SetOnConnectCallback(func() { + retryTimer.Stop() + onConnect() + }) + c, e := repo.consumer.TailingLogs(appGUID, repo.config.AccessToken()) + + go func() { + defer close(logChan) + defer close(errChan) + + timerRunning := false + for { + select { + case msg, ok := <-c: + if !ok { + ticker.Stop() + repo.flushMessages(logChan) + return + } + timerRunning = false + repo.messageQueue.PushMessage(msg) + case err := <-e: + if err != nil { + if _, ok := err.(noaaerrors.RetryError); ok { + if !timerRunning { + timerRunning = true + retryTimer.Reset(repo.retryTimeout) + } + continue + } + + errChan <- err + + ticker.Stop() + return + } + case <-retryTimer.C: + errChan <- fmt.Errorf("Timed out waiting for connection to Loggregator (%s).", repo.config.DopplerEndpoint()) + ticker.Stop() + return + } + } + }() + + go func() { + for range ticker.C { + repo.flushMessages(logChan) + } + }() +} + +func (repo *NoaaLogsRepository) flushMessages(c chan<- Loggable) { + repo.messageQueue.EnumerateAndClear(func(m *events.LogMessage) { + c <- NewNoaaLogMessage(m) + }) +} + +// newUnstartedTimer returns a *time.Timer that is in an unstarted +// state. +func newUnstartedTimer() *time.Timer { + timer := time.NewTimer(time.Second) + timer.Stop() + return timer +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_message.go b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_message.go new file mode 100644 index 0000000..3d49bd7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_message.go @@ -0,0 +1,81 @@ +package logs + +import ( + "fmt" + "strings" + "time" + "unicode/utf8" + + "code.cloudfoundry.org/cli/cf/terminal" + "github.com/cloudfoundry/sonde-go/events" +) + +type noaaLogMessage struct { + msg *events.LogMessage +} + +func NewNoaaLogMessage(m *events.LogMessage) *noaaLogMessage { + return &noaaLogMessage{ + msg: m, + } +} + +func (m *noaaLogMessage) ToSimpleLog() string { + msgText := string(m.msg.GetMessage()) + + return strings.TrimRight(msgText, "\r\n") +} + +func (m *noaaLogMessage) GetSourceName() string { + return m.msg.GetSourceType() +} + +func (m *noaaLogMessage) ToLog(loc *time.Location) string { + logMsg := m.msg + + sourceName := logMsg.GetSourceType() + sourceID := logMsg.GetSourceInstance() + t := time.Unix(0, logMsg.GetTimestamp()) + timeFormat := "2006-01-02T15:04:05.00-0700" + timeString := t.In(loc).Format(timeFormat) + + var logHeader string + + if sourceID == "" { + logHeader = fmt.Sprintf("%s [%s]", timeString, sourceName) + } else { + logHeader = fmt.Sprintf("%s [%s/%s]", timeString, sourceName, sourceID) + } + + coloredLogHeader := terminal.LogSysHeaderColor(logHeader) + + // Calculate padding + longestHeader := fmt.Sprintf("%s [HEALTH/10] ", timeFormat) + expectedHeaderLength := utf8.RuneCountInString(longestHeader) + headerPadding := strings.Repeat(" ", max(0, expectedHeaderLength-utf8.RuneCountInString(logHeader))) + + logHeader = logHeader + headerPadding + coloredLogHeader = coloredLogHeader + headerPadding + + msgText := string(logMsg.GetMessage()) + msgText = strings.TrimRight(msgText, "\r\n") + + msgLines := strings.Split(msgText, "\n") + contentPadding := strings.Repeat(" ", utf8.RuneCountInString(logHeader)) + coloringFunc := terminal.LogStdoutColor + logType := "OUT" + + if logMsg.GetMessageType() == events.LogMessage_ERR { + coloringFunc = terminal.LogStderrColor + logType = "ERR" + } + + logContent := fmt.Sprintf("%s %s", logType, msgLines[0]) + for _, msgLine := range msgLines[1:] { + logContent = fmt.Sprintf("%s\n%s%s", logContent, contentPadding, msgLine) + } + + logContent = coloringFunc(logContent) + + return fmt.Sprintf("%s%s", coloredLogHeader, logContent) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_message_queue.go b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_message_queue.go new file mode 100644 index 0000000..6377090 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/logs/noaa_message_queue.go @@ -0,0 +1,50 @@ +package logs + +import ( + "sort" + "sync" + + "github.com/cloudfoundry/sonde-go/events" +) + +type NoaaMessageQueue struct { + messages []*events.LogMessage + mutex sync.Mutex +} + +func NewNoaaMessageQueue() *NoaaMessageQueue { + return &NoaaMessageQueue{} +} + +func (pq *NoaaMessageQueue) PushMessage(message *events.LogMessage) { + pq.mutex.Lock() + defer pq.mutex.Unlock() + + pq.messages = append(pq.messages, message) +} + +// implement sort interface so we can sort messages as we receive them in PushMessage +func (pq *NoaaMessageQueue) Less(i, j int) bool { + return *pq.messages[i].Timestamp < *pq.messages[j].Timestamp +} + +func (pq *NoaaMessageQueue) Swap(i, j int) { + pq.messages[i], pq.messages[j] = pq.messages[j], pq.messages[i] +} + +func (pq *NoaaMessageQueue) Len() int { + return len(pq.messages) +} + +func (pq *NoaaMessageQueue) EnumerateAndClear(onMessage func(*events.LogMessage)) { + pq.mutex.Lock() + defer pq.mutex.Unlock() + + sort.Stable(pq) + + for _, x := range pq.messages { + onMessage(x) + } + + pq.messages = []*events.LogMessage{} +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/organizations/organizations.go b/vendor/code.cloudfoundry.org/cli/cf/api/organizations/organizations.go new file mode 100644 index 0000000..04ee3dd --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/organizations/organizations.go @@ -0,0 +1,116 @@ +package organizations + +import ( + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . OrganizationRepository + +type OrganizationRepository interface { + ListOrgs(limit int) ([]models.Organization, error) + GetManyOrgsByGUID(orgGUIDs []string) (orgs []models.Organization, apiErr error) + FindByName(name string) (org models.Organization, apiErr error) + Create(org models.Organization) (apiErr error) + Rename(orgGUID string, name string) (apiErr error) + Delete(orgGUID string) (apiErr error) + SharePrivateDomain(orgGUID string, domainGUID string) (apiErr error) + UnsharePrivateDomain(orgGUID string, domainGUID string) (apiErr error) +} + +type CloudControllerOrganizationRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerOrganizationRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerOrganizationRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerOrganizationRepository) ListOrgs(limit int) ([]models.Organization, error) { + orgs := []models.Organization{} + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + "/v2/organizations?order-by=name", + resources.OrganizationResource{}, + func(resource interface{}) bool { + if orgResource, ok := resource.(resources.OrganizationResource); ok { + orgs = append(orgs, orgResource.ToModel()) + return limit == 0 || len(orgs) < limit + } + return false + }, + ) + return orgs, err +} + +func (repo CloudControllerOrganizationRepository) GetManyOrgsByGUID(orgGUIDs []string) (orgs []models.Organization, err error) { + for _, orgGUID := range orgGUIDs { + url := fmt.Sprintf("%s/v2/organizations/%s", repo.config.APIEndpoint(), orgGUID) + orgResource := resources.OrganizationResource{} + err = repo.gateway.GetResource(url, &orgResource) + if err != nil { + return nil, err + } + orgs = append(orgs, orgResource.ToModel()) + } + return +} + +func (repo CloudControllerOrganizationRepository) FindByName(name string) (org models.Organization, apiErr error) { + found := false + apiErr = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/organizations?q=%s&inline-relations-depth=1", url.QueryEscape("name:"+strings.ToLower(name))), + resources.OrganizationResource{}, + func(resource interface{}) bool { + org = resource.(resources.OrganizationResource).ToModel() + found = true + return false + }) + + if apiErr == nil && !found { + apiErr = errors.NewModelNotFoundError("Organization", name) + } + + return +} + +func (repo CloudControllerOrganizationRepository) Create(org models.Organization) (apiErr error) { + data := fmt.Sprintf(`{"name":"%s"`, org.Name) + if org.QuotaDefinition.GUID != "" { + data = data + fmt.Sprintf(`, "quota_definition_guid":"%s"`, org.QuotaDefinition.GUID) + } + data = data + "}" + return repo.gateway.CreateResource(repo.config.APIEndpoint(), "/v2/organizations", strings.NewReader(data)) +} + +func (repo CloudControllerOrganizationRepository) Rename(orgGUID string, name string) (apiErr error) { + url := fmt.Sprintf("/v2/organizations/%s", orgGUID) + data := fmt.Sprintf(`{"name":"%s"}`, name) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), url, strings.NewReader(data)) +} + +func (repo CloudControllerOrganizationRepository) Delete(orgGUID string) (apiErr error) { + url := fmt.Sprintf("/v2/organizations/%s?recursive=true", orgGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), url) +} + +func (repo CloudControllerOrganizationRepository) SharePrivateDomain(orgGUID string, domainGUID string) error { + url := fmt.Sprintf("/v2/organizations/%s/private_domains/%s", orgGUID, domainGUID) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), url, nil) +} + +func (repo CloudControllerOrganizationRepository) UnsharePrivateDomain(orgGUID string, domainGUID string) error { + url := fmt.Sprintf("/v2/organizations/%s/private_domains/%s", orgGUID, domainGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), url) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/password/password.go b/vendor/code.cloudfoundry.org/cli/cf/api/password/password.go new file mode 100644 index 0000000..c87fbd1 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/password/password.go @@ -0,0 +1,40 @@ +package password + +import ( + "fmt" + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + UpdatePassword(old string, new string) error +} + +type CloudControllerRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerRepository) UpdatePassword(old string, new string) error { + uaaEndpoint := repo.config.UaaEndpoint() + if uaaEndpoint == "" { + return errors.New(T("UAA endpoint missing from config file")) + } + + url := fmt.Sprintf("/Users/%s/password", repo.config.UserGUID()) + body := fmt.Sprintf(`{"password":"%s","oldPassword":"%s"}`, new, old) + + return repo.gateway.UpdateResource(uaaEndpoint, url, strings.NewReader(body)) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/quotas/quotas.go b/vendor/code.cloudfoundry.org/cli/cf/api/quotas/quotas.go new file mode 100644 index 0000000..43ae02a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/quotas/quotas.go @@ -0,0 +1,93 @@ +package quotas + +import ( + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . QuotaRepository + +type QuotaRepository interface { + FindAll() (quotas []models.QuotaFields, apiErr error) + FindByName(name string) (quota models.QuotaFields, apiErr error) + + AssignQuotaToOrg(orgGUID, quotaGUID string) error + + // CRUD ahoy + Create(quota models.QuotaFields) error + Update(quota models.QuotaFields) error + Delete(quotaGUID string) error +} + +type CloudControllerQuotaRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerQuotaRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerQuotaRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerQuotaRepository) findAllWithPath(path string) ([]models.QuotaFields, error) { + var quotas []models.QuotaFields + apiErr := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.QuotaResource{}, + func(resource interface{}) bool { + if qr, ok := resource.(resources.QuotaResource); ok { + quotas = append(quotas, qr.ToFields()) + } + return true + }) + return quotas, apiErr +} + +func (repo CloudControllerQuotaRepository) FindAll() (quotas []models.QuotaFields, apiErr error) { + return repo.findAllWithPath("/v2/quota_definitions") +} + +func (repo CloudControllerQuotaRepository) FindByName(name string) (quota models.QuotaFields, apiErr error) { + path := fmt.Sprintf("/v2/quota_definitions?q=%s", url.QueryEscape("name:"+name)) + quotas, apiErr := repo.findAllWithPath(path) + if apiErr != nil { + return + } + + if len(quotas) == 0 { + apiErr = errors.NewModelNotFoundError("Quota", name) + return + } + + quota = quotas[0] + return +} + +func (repo CloudControllerQuotaRepository) Create(quota models.QuotaFields) error { + return repo.gateway.CreateResourceFromStruct(repo.config.APIEndpoint(), "/v2/quota_definitions", quota) +} + +func (repo CloudControllerQuotaRepository) Update(quota models.QuotaFields) error { + path := fmt.Sprintf("/v2/quota_definitions/%s", quota.GUID) + return repo.gateway.UpdateResourceFromStruct(repo.config.APIEndpoint(), path, quota) +} + +func (repo CloudControllerQuotaRepository) AssignQuotaToOrg(orgGUID, quotaGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/organizations/%s", orgGUID) + data := fmt.Sprintf(`{"quota_definition_guid":"%s"}`, quotaGUID) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(data)) +} + +func (repo CloudControllerQuotaRepository) Delete(quotaGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/quota_definitions/%s", quotaGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/repository_locator.go b/vendor/code.cloudfoundry.org/cli/cf/api/repository_locator.go new file mode 100644 index 0000000..9018a92 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/repository_locator.go @@ -0,0 +1,496 @@ +package api + +import ( + "crypto/tls" + "net/http" + "strconv" + "time" + + "code.cloudfoundry.org/cli/cf/api/appevents" + api_appfiles "code.cloudfoundry.org/cli/cf/api/appfiles" + "code.cloudfoundry.org/cli/cf/api/appinstances" + "code.cloudfoundry.org/cli/cf/api/applicationbits" + "code.cloudfoundry.org/cli/cf/api/applications" + "code.cloudfoundry.org/cli/cf/api/authentication" + "code.cloudfoundry.org/cli/cf/api/copyapplicationsource" + "code.cloudfoundry.org/cli/cf/api/environmentvariablegroups" + "code.cloudfoundry.org/cli/cf/api/featureflags" + "code.cloudfoundry.org/cli/cf/api/logs" + "code.cloudfoundry.org/cli/cf/api/organizations" + "code.cloudfoundry.org/cli/cf/api/password" + "code.cloudfoundry.org/cli/cf/api/quotas" + "code.cloudfoundry.org/cli/cf/api/securitygroups" + "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/running" + "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/staging" + securitygroupspaces "code.cloudfoundry.org/cli/cf/api/securitygroups/spaces" + "code.cloudfoundry.org/cli/cf/api/spacequotas" + "code.cloudfoundry.org/cli/cf/api/spaces" + "code.cloudfoundry.org/cli/cf/api/stacks" + "code.cloudfoundry.org/cli/cf/appfiles" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/net" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" + "code.cloudfoundry.org/cli/cf/v3/repository" + v3client "github.com/cloudfoundry/go-ccapi/v3/client" + "github.com/cloudfoundry/noaa/consumer" +) + +type RepositoryLocator struct { + authRepo authentication.Repository + curlRepo CurlRepository + endpointRepo coreconfig.EndpointRepository + organizationRepo organizations.OrganizationRepository + quotaRepo quotas.QuotaRepository + spaceRepo spaces.SpaceRepository + appRepo applications.Repository + appBitsRepo applicationbits.CloudControllerApplicationBitsRepository + appSummaryRepo AppSummaryRepository + appInstancesRepo appinstances.Repository + appEventsRepo appevents.Repository + appFilesRepo api_appfiles.Repository + domainRepo DomainRepository + routeRepo RouteRepository + routingAPIRepo RoutingAPIRepository + stackRepo stacks.StackRepository + serviceRepo ServiceRepository + serviceKeyRepo ServiceKeyRepository + serviceBindingRepo ServiceBindingRepository + routeServiceBindingRepo RouteServiceBindingRepository + serviceSummaryRepo ServiceSummaryRepository + userRepo UserRepository + passwordRepo password.Repository + logsRepo logs.Repository + authTokenRepo ServiceAuthTokenRepository + serviceBrokerRepo ServiceBrokerRepository + servicePlanRepo CloudControllerServicePlanRepository + servicePlanVisibilityRepo ServicePlanVisibilityRepository + userProvidedServiceInstanceRepo UserProvidedServiceInstanceRepository + buildpackRepo BuildpackRepository + buildpackBitsRepo BuildpackBitsRepository + securityGroupRepo securitygroups.SecurityGroupRepo + stagingSecurityGroupRepo staging.SecurityGroupsRepo + runningSecurityGroupRepo running.SecurityGroupsRepo + securityGroupSpaceBinder securitygroupspaces.SecurityGroupSpaceBinder + spaceQuotaRepo spacequotas.SpaceQuotaRepository + featureFlagRepo featureflags.FeatureFlagRepository + environmentVariableGroupRepo environmentvariablegroups.Repository + copyAppSourceRepo copyapplicationsource.Repository + + v3Repository repository.Repository +} + +const noaaRetryDefaultTimeout = 5 * time.Second + +func NewRepositoryLocator(config coreconfig.ReadWriter, gatewaysByName map[string]net.Gateway, logger trace.Printer, envDialTimeout string) (loc RepositoryLocator) { + cloudControllerGateway := gatewaysByName["cloud-controller"] + routingAPIGateway := gatewaysByName["routing-api"] + uaaGateway := gatewaysByName["uaa"] + loc.authRepo = authentication.NewUAARepository(uaaGateway, config, net.NewRequestDumper(logger)) + + // ensure gateway refreshers are set before passing them by value to repositories + cloudControllerGateway.SetTokenRefresher(loc.authRepo) + uaaGateway.SetTokenRefresher(loc.authRepo) + + loc.appBitsRepo = applicationbits.NewCloudControllerApplicationBitsRepository(config, cloudControllerGateway) + loc.appEventsRepo = appevents.NewCloudControllerAppEventsRepository(config, cloudControllerGateway) + loc.appFilesRepo = api_appfiles.NewCloudControllerAppFilesRepository(config, cloudControllerGateway) + loc.appRepo = applications.NewCloudControllerRepository(config, cloudControllerGateway) + loc.appSummaryRepo = NewCloudControllerAppSummaryRepository(config, cloudControllerGateway) + loc.appInstancesRepo = appinstances.NewCloudControllerAppInstancesRepository(config, cloudControllerGateway) + loc.authTokenRepo = NewCloudControllerServiceAuthTokenRepository(config, cloudControllerGateway) + loc.curlRepo = NewCloudControllerCurlRepository(config, cloudControllerGateway) + loc.domainRepo = NewCloudControllerDomainRepository(config, cloudControllerGateway) + loc.endpointRepo = NewEndpointRepository(cloudControllerGateway) + + tlsConfig := net.NewTLSConfig([]tls.Certificate{}, config.IsSSLDisabled()) + + var noaaRetryTimeout time.Duration + convertedTime, err := strconv.Atoi(envDialTimeout) + if err != nil { + noaaRetryTimeout = noaaRetryDefaultTimeout + } else { + noaaRetryTimeout = time.Duration(convertedTime) * 3 * time.Second + } + + consumer := consumer.New(config.DopplerEndpoint(), tlsConfig, http.ProxyFromEnvironment) + consumer.SetDebugPrinter(terminal.DebugPrinter{Logger: logger}) + loc.logsRepo = logs.NewNoaaLogsRepository(config, consumer, loc.authRepo, noaaRetryTimeout) + + loc.organizationRepo = organizations.NewCloudControllerOrganizationRepository(config, cloudControllerGateway) + loc.passwordRepo = password.NewCloudControllerRepository(config, uaaGateway) + loc.quotaRepo = quotas.NewCloudControllerQuotaRepository(config, cloudControllerGateway) + loc.routeRepo = NewCloudControllerRouteRepository(config, cloudControllerGateway) + loc.routeServiceBindingRepo = NewCloudControllerRouteServiceBindingRepository(config, cloudControllerGateway) + loc.routingAPIRepo = NewRoutingAPIRepository(config, routingAPIGateway) + loc.stackRepo = stacks.NewCloudControllerStackRepository(config, cloudControllerGateway) + loc.serviceRepo = NewCloudControllerServiceRepository(config, cloudControllerGateway) + loc.serviceKeyRepo = NewCloudControllerServiceKeyRepository(config, cloudControllerGateway) + loc.serviceBindingRepo = NewCloudControllerServiceBindingRepository(config, cloudControllerGateway) + loc.serviceBrokerRepo = NewCloudControllerServiceBrokerRepository(config, cloudControllerGateway) + loc.servicePlanRepo = NewCloudControllerServicePlanRepository(config, cloudControllerGateway) + loc.servicePlanVisibilityRepo = NewCloudControllerServicePlanVisibilityRepository(config, cloudControllerGateway) + loc.serviceSummaryRepo = NewCloudControllerServiceSummaryRepository(config, cloudControllerGateway) + loc.spaceRepo = spaces.NewCloudControllerSpaceRepository(config, cloudControllerGateway) + loc.userProvidedServiceInstanceRepo = NewCCUserProvidedServiceInstanceRepository(config, cloudControllerGateway) + loc.userRepo = NewCloudControllerUserRepository(config, uaaGateway, cloudControllerGateway) + loc.buildpackRepo = NewCloudControllerBuildpackRepository(config, cloudControllerGateway) + loc.buildpackBitsRepo = NewCloudControllerBuildpackBitsRepository(config, cloudControllerGateway, appfiles.ApplicationZipper{}) + loc.securityGroupRepo = securitygroups.NewSecurityGroupRepo(config, cloudControllerGateway) + loc.stagingSecurityGroupRepo = staging.NewSecurityGroupsRepo(config, cloudControllerGateway) + loc.runningSecurityGroupRepo = running.NewSecurityGroupsRepo(config, cloudControllerGateway) + loc.securityGroupSpaceBinder = securitygroupspaces.NewSecurityGroupSpaceBinder(config, cloudControllerGateway) + loc.spaceQuotaRepo = spacequotas.NewCloudControllerSpaceQuotaRepository(config, cloudControllerGateway) + loc.featureFlagRepo = featureflags.NewCloudControllerFeatureFlagRepository(config, cloudControllerGateway) + loc.environmentVariableGroupRepo = environmentvariablegroups.NewCloudControllerRepository(config, cloudControllerGateway) + loc.copyAppSourceRepo = copyapplicationsource.NewCloudControllerCopyApplicationSourceRepository(config, cloudControllerGateway) + + client := v3client.NewClient(config.APIEndpoint(), config.AuthenticationEndpoint(), config.AccessToken(), config.RefreshToken()) + loc.v3Repository = repository.NewRepository(config, client) + + return +} + +func (locator RepositoryLocator) SetAuthenticationRepository(repo authentication.Repository) RepositoryLocator { + locator.authRepo = repo + return locator +} + +func (locator RepositoryLocator) GetAuthenticationRepository() authentication.Repository { + return locator.authRepo +} + +func (locator RepositoryLocator) SetCurlRepository(repo CurlRepository) RepositoryLocator { + locator.curlRepo = repo + return locator +} + +func (locator RepositoryLocator) GetCurlRepository() CurlRepository { + return locator.curlRepo +} + +func (locator RepositoryLocator) GetEndpointRepository() coreconfig.EndpointRepository { + return locator.endpointRepo +} + +func (locator RepositoryLocator) SetEndpointRepository(e coreconfig.EndpointRepository) RepositoryLocator { + locator.endpointRepo = e + return locator +} + +func (locator RepositoryLocator) SetOrganizationRepository(repo organizations.OrganizationRepository) RepositoryLocator { + locator.organizationRepo = repo + return locator +} + +func (locator RepositoryLocator) GetOrganizationRepository() organizations.OrganizationRepository { + return locator.organizationRepo +} + +func (locator RepositoryLocator) SetQuotaRepository(repo quotas.QuotaRepository) RepositoryLocator { + locator.quotaRepo = repo + return locator +} + +func (locator RepositoryLocator) GetQuotaRepository() quotas.QuotaRepository { + return locator.quotaRepo +} + +func (locator RepositoryLocator) SetSpaceRepository(repo spaces.SpaceRepository) RepositoryLocator { + locator.spaceRepo = repo + return locator +} + +func (locator RepositoryLocator) GetSpaceRepository() spaces.SpaceRepository { + return locator.spaceRepo +} + +func (locator RepositoryLocator) SetApplicationRepository(repo applications.Repository) RepositoryLocator { + locator.appRepo = repo + return locator +} + +func (locator RepositoryLocator) GetApplicationRepository() applications.Repository { + return locator.appRepo +} + +func (locator RepositoryLocator) GetApplicationBitsRepository() applicationbits.Repository { + return locator.appBitsRepo +} + +func (locator RepositoryLocator) SetAppSummaryRepository(repo AppSummaryRepository) RepositoryLocator { + locator.appSummaryRepo = repo + return locator +} + +func (locator RepositoryLocator) SetUserRepository(repo UserRepository) RepositoryLocator { + locator.userRepo = repo + return locator +} + +func (locator RepositoryLocator) GetAppSummaryRepository() AppSummaryRepository { + return locator.appSummaryRepo +} + +func (locator RepositoryLocator) SetAppInstancesRepository(repo appinstances.Repository) RepositoryLocator { + locator.appInstancesRepo = repo + return locator +} + +func (locator RepositoryLocator) GetAppInstancesRepository() appinstances.Repository { + return locator.appInstancesRepo +} + +func (locator RepositoryLocator) SetAppEventsRepository(repo appevents.Repository) RepositoryLocator { + locator.appEventsRepo = repo + return locator +} + +func (locator RepositoryLocator) GetAppEventsRepository() appevents.Repository { + return locator.appEventsRepo +} + +func (locator RepositoryLocator) SetAppFileRepository(repo api_appfiles.Repository) RepositoryLocator { + locator.appFilesRepo = repo + return locator +} + +func (locator RepositoryLocator) GetAppFilesRepository() api_appfiles.Repository { + return locator.appFilesRepo +} + +func (locator RepositoryLocator) SetDomainRepository(repo DomainRepository) RepositoryLocator { + locator.domainRepo = repo + return locator +} + +func (locator RepositoryLocator) GetDomainRepository() DomainRepository { + return locator.domainRepo +} + +func (locator RepositoryLocator) SetRouteRepository(repo RouteRepository) RepositoryLocator { + locator.routeRepo = repo + return locator +} + +func (locator RepositoryLocator) GetRoutingAPIRepository() RoutingAPIRepository { + return locator.routingAPIRepo +} + +func (locator RepositoryLocator) SetRoutingAPIRepository(repo RoutingAPIRepository) RepositoryLocator { + locator.routingAPIRepo = repo + return locator +} + +func (locator RepositoryLocator) GetRouteRepository() RouteRepository { + return locator.routeRepo +} + +func (locator RepositoryLocator) SetStackRepository(repo stacks.StackRepository) RepositoryLocator { + locator.stackRepo = repo + return locator +} + +func (locator RepositoryLocator) GetStackRepository() stacks.StackRepository { + return locator.stackRepo +} + +func (locator RepositoryLocator) SetServiceRepository(repo ServiceRepository) RepositoryLocator { + locator.serviceRepo = repo + return locator +} + +func (locator RepositoryLocator) GetServiceRepository() ServiceRepository { + return locator.serviceRepo +} + +func (locator RepositoryLocator) SetServiceKeyRepository(repo ServiceKeyRepository) RepositoryLocator { + locator.serviceKeyRepo = repo + return locator +} + +func (locator RepositoryLocator) GetServiceKeyRepository() ServiceKeyRepository { + return locator.serviceKeyRepo +} + +func (locator RepositoryLocator) SetRouteServiceBindingRepository(repo RouteServiceBindingRepository) RepositoryLocator { + locator.routeServiceBindingRepo = repo + return locator +} + +func (locator RepositoryLocator) GetRouteServiceBindingRepository() RouteServiceBindingRepository { + return locator.routeServiceBindingRepo +} + +func (locator RepositoryLocator) SetServiceBindingRepository(repo ServiceBindingRepository) RepositoryLocator { + locator.serviceBindingRepo = repo + return locator +} + +func (locator RepositoryLocator) GetServiceBindingRepository() ServiceBindingRepository { + return locator.serviceBindingRepo +} + +func (locator RepositoryLocator) GetServiceSummaryRepository() ServiceSummaryRepository { + return locator.serviceSummaryRepo +} +func (locator RepositoryLocator) SetServiceSummaryRepository(repo ServiceSummaryRepository) RepositoryLocator { + locator.serviceSummaryRepo = repo + return locator +} + +func (locator RepositoryLocator) GetUserRepository() UserRepository { + return locator.userRepo +} + +func (locator RepositoryLocator) SetPasswordRepository(repo password.Repository) RepositoryLocator { + locator.passwordRepo = repo + return locator +} + +func (locator RepositoryLocator) GetPasswordRepository() password.Repository { + return locator.passwordRepo +} + +func (locator RepositoryLocator) SetLogsRepository(repo logs.Repository) RepositoryLocator { + locator.logsRepo = repo + return locator +} + +func (locator RepositoryLocator) GetLogsRepository() logs.Repository { + return locator.logsRepo +} + +func (locator RepositoryLocator) SetServiceAuthTokenRepository(repo ServiceAuthTokenRepository) RepositoryLocator { + locator.authTokenRepo = repo + return locator +} + +func (locator RepositoryLocator) GetServiceAuthTokenRepository() ServiceAuthTokenRepository { + return locator.authTokenRepo +} + +func (locator RepositoryLocator) SetServiceBrokerRepository(repo ServiceBrokerRepository) RepositoryLocator { + locator.serviceBrokerRepo = repo + return locator +} + +func (locator RepositoryLocator) GetServiceBrokerRepository() ServiceBrokerRepository { + return locator.serviceBrokerRepo +} + +func (locator RepositoryLocator) GetServicePlanRepository() ServicePlanRepository { + return locator.servicePlanRepo +} + +func (locator RepositoryLocator) SetUserProvidedServiceInstanceRepository(repo UserProvidedServiceInstanceRepository) RepositoryLocator { + locator.userProvidedServiceInstanceRepo = repo + return locator +} + +func (locator RepositoryLocator) GetUserProvidedServiceInstanceRepository() UserProvidedServiceInstanceRepository { + return locator.userProvidedServiceInstanceRepo +} + +func (locator RepositoryLocator) SetBuildpackRepository(repo BuildpackRepository) RepositoryLocator { + locator.buildpackRepo = repo + return locator +} + +func (locator RepositoryLocator) GetBuildpackRepository() BuildpackRepository { + return locator.buildpackRepo +} + +func (locator RepositoryLocator) SetBuildpackBitsRepository(repo BuildpackBitsRepository) RepositoryLocator { + locator.buildpackBitsRepo = repo + return locator +} + +func (locator RepositoryLocator) GetBuildpackBitsRepository() BuildpackBitsRepository { + return locator.buildpackBitsRepo +} + +func (locator RepositoryLocator) SetSecurityGroupRepository(repo securitygroups.SecurityGroupRepo) RepositoryLocator { + locator.securityGroupRepo = repo + return locator +} + +func (locator RepositoryLocator) GetSecurityGroupRepository() securitygroups.SecurityGroupRepo { + return locator.securityGroupRepo +} + +func (locator RepositoryLocator) SetStagingSecurityGroupRepository(repo staging.SecurityGroupsRepo) RepositoryLocator { + locator.stagingSecurityGroupRepo = repo + return locator +} + +func (locator RepositoryLocator) GetStagingSecurityGroupsRepository() staging.SecurityGroupsRepo { + return locator.stagingSecurityGroupRepo +} + +func (locator RepositoryLocator) SetRunningSecurityGroupRepository(repo running.SecurityGroupsRepo) RepositoryLocator { + locator.runningSecurityGroupRepo = repo + return locator +} + +func (locator RepositoryLocator) GetRunningSecurityGroupsRepository() running.SecurityGroupsRepo { + return locator.runningSecurityGroupRepo +} + +func (locator RepositoryLocator) SetSecurityGroupSpaceBinder(repo securitygroupspaces.SecurityGroupSpaceBinder) RepositoryLocator { + locator.securityGroupSpaceBinder = repo + return locator +} + +func (locator RepositoryLocator) GetSecurityGroupSpaceBinder() securitygroupspaces.SecurityGroupSpaceBinder { + return locator.securityGroupSpaceBinder +} + +func (locator RepositoryLocator) GetServicePlanVisibilityRepository() ServicePlanVisibilityRepository { + return locator.servicePlanVisibilityRepo +} + +func (locator RepositoryLocator) GetSpaceQuotaRepository() spacequotas.SpaceQuotaRepository { + return locator.spaceQuotaRepo +} + +func (locator RepositoryLocator) SetSpaceQuotaRepository(repo spacequotas.SpaceQuotaRepository) RepositoryLocator { + locator.spaceQuotaRepo = repo + return locator +} + +func (locator RepositoryLocator) SetFeatureFlagRepository(repo featureflags.FeatureFlagRepository) RepositoryLocator { + locator.featureFlagRepo = repo + return locator +} + +func (locator RepositoryLocator) GetFeatureFlagRepository() featureflags.FeatureFlagRepository { + return locator.featureFlagRepo +} + +func (locator RepositoryLocator) SetEnvironmentVariableGroupsRepository(repo environmentvariablegroups.Repository) RepositoryLocator { + locator.environmentVariableGroupRepo = repo + return locator +} + +func (locator RepositoryLocator) GetEnvironmentVariableGroupsRepository() environmentvariablegroups.Repository { + return locator.environmentVariableGroupRepo +} + +func (locator RepositoryLocator) SetCopyApplicationSourceRepository(repo copyapplicationsource.Repository) RepositoryLocator { + locator.copyAppSourceRepo = repo + return locator +} + +func (locator RepositoryLocator) GetCopyApplicationSourceRepository() copyapplicationsource.Repository { + return locator.copyAppSourceRepo +} + +func (locator RepositoryLocator) GetV3Repository() repository.Repository { + return locator.v3Repository +} + +func (locator RepositoryLocator) SetV3Repository(r repository.Repository) RepositoryLocator { + locator.v3Repository = r + return locator +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resource.go b/vendor/code.cloudfoundry.org/cli/cf/api/resource.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resource.go rename to vendor/code.cloudfoundry.org/cli/cf/api/resource.go diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/applications.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/applications.go new file mode 100644 index 0000000..76c3c81 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/applications.go @@ -0,0 +1,201 @@ +package resources + +import ( + "strings" + "time" + + "code.cloudfoundry.org/cli/cf/models" +) + +type PaginatedApplicationResources struct { + Resources []ApplicationResource +} + +type AppRouteEntity struct { + Host string + Domain struct { + Resource + Entity struct { + Name string + } + } +} + +type AppRouteResource struct { + Resource + Entity AppRouteEntity +} + +type IntegrityFields struct { + Sha1 string `json:"sha1"` + Size int64 `json:"size"` +} + +type AppFileResource struct { + Sha1 string `json:"sha1"` + Size int64 `json:"size"` + Path string `json:"fn"` + Mode string `json:"mode"` +} + +type ApplicationResource struct { + Resource + Entity ApplicationEntity +} + +type ApplicationEntity struct { + Name *string `json:"name,omitempty"` + Command *string `json:"command,omitempty"` + DetectedStartCommand *string `json:"detected_start_command,omitempty"` + State *string `json:"state,omitempty"` + SpaceGUID *string `json:"space_guid,omitempty"` + Instances *int `json:"instances,omitempty"` + Memory *int64 `json:"memory,omitempty"` + DiskQuota *int64 `json:"disk_quota,omitempty"` + StackGUID *string `json:"stack_guid,omitempty"` + Stack *StackResource `json:"stack,omitempty"` + Routes *[]AppRouteResource `json:"routes,omitempty"` + Buildpack *string `json:"buildpack,omitempty"` + DetectedBuildpack *string `json:"detected_buildpack,omitempty"` + EnvironmentJSON *map[string]interface{} `json:"environment_json,omitempty"` + HealthCheckType *string `json:"health_check_type,omitempty"` + HealthCheckTimeout *int `json:"health_check_timeout,omitempty"` + PackageState *string `json:"package_state,omitempty"` + StagingFailedReason *string `json:"staging_failed_reason,omitempty"` + Diego *bool `json:"diego,omitempty"` + DockerImage *string `json:"docker_image,omitempty"` + EnableSSH *bool `json:"enable_ssh,omitempty"` + PackageUpdatedAt *time.Time `json:"package_updated_at,omitempty"` + AppPorts *[]int `json:"ports,omitempty"` +} + +func (resource AppRouteResource) ToFields() (route models.RouteSummary) { + route.GUID = resource.Metadata.GUID + route.Host = resource.Entity.Host + return +} + +func (resource AppRouteResource) ToModel() (route models.RouteSummary) { + route.GUID = resource.Metadata.GUID + route.Host = resource.Entity.Host + route.Domain.GUID = resource.Entity.Domain.Metadata.GUID + route.Domain.Name = resource.Entity.Domain.Entity.Name + return +} + +func (resource AppFileResource) ToIntegrityFields() IntegrityFields { + return IntegrityFields{ + Sha1: resource.Sha1, + Size: resource.Size, + } +} + +func NewApplicationEntityFromAppParams(app models.AppParams) ApplicationEntity { + entity := ApplicationEntity{ + Buildpack: app.BuildpackURL, + Name: app.Name, + SpaceGUID: app.SpaceGUID, + Instances: app.InstanceCount, + Memory: app.Memory, + DiskQuota: app.DiskQuota, + StackGUID: app.StackGUID, + Command: app.Command, + HealthCheckType: app.HealthCheckType, + HealthCheckTimeout: app.HealthCheckTimeout, + DockerImage: app.DockerImage, + Diego: app.Diego, + EnableSSH: app.EnableSSH, + PackageUpdatedAt: app.PackageUpdatedAt, + AppPorts: app.AppPorts, + } + + if app.State != nil { + state := strings.ToUpper(*app.State) + entity.State = &state + } + + if app.EnvironmentVars != nil && *app.EnvironmentVars != nil { + entity.EnvironmentJSON = app.EnvironmentVars + } + + return entity +} + +func (resource ApplicationResource) ToFields() (app models.ApplicationFields) { + entity := resource.Entity + app.GUID = resource.Metadata.GUID + + if entity.Name != nil { + app.Name = *entity.Name + } + if entity.Memory != nil { + app.Memory = *entity.Memory + } + if entity.DiskQuota != nil { + app.DiskQuota = *entity.DiskQuota + } + if entity.Instances != nil { + app.InstanceCount = *entity.Instances + } + if entity.State != nil { + app.State = strings.ToLower(*entity.State) + } + if entity.EnvironmentJSON != nil { + app.EnvironmentVars = *entity.EnvironmentJSON + } + if entity.SpaceGUID != nil { + app.SpaceGUID = *entity.SpaceGUID + } + if entity.DetectedStartCommand != nil { + app.DetectedStartCommand = *entity.DetectedStartCommand + } + if entity.Command != nil { + app.Command = *entity.Command + } + if entity.PackageState != nil { + app.PackageState = *entity.PackageState + } + if entity.StagingFailedReason != nil { + app.StagingFailedReason = *entity.StagingFailedReason + } + if entity.DockerImage != nil { + app.DockerImage = *entity.DockerImage + } + if entity.Buildpack != nil { + app.Buildpack = *entity.Buildpack + } + if entity.DetectedBuildpack != nil { + app.DetectedBuildpack = *entity.DetectedBuildpack + } + if entity.HealthCheckType != nil { + app.HealthCheckType = *entity.HealthCheckType + } + if entity.Diego != nil { + app.Diego = *entity.Diego + } + if entity.EnableSSH != nil { + app.EnableSSH = *entity.EnableSSH + } + if entity.PackageUpdatedAt != nil { + app.PackageUpdatedAt = entity.PackageUpdatedAt + } + + return +} + +func (resource ApplicationResource) ToModel() (app models.Application) { + app.ApplicationFields = resource.ToFields() + + entity := resource.Entity + if entity.Stack != nil { + app.Stack = entity.Stack.ToFields() + } + + if entity.Routes != nil { + for _, routeResource := range *entity.Routes { + app.Routes = append(app.Routes, routeResource.ToModel()) + } + } + + return +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/auth_tokens.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/auth_tokens.go similarity index 82% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/auth_tokens.go rename to vendor/code.cloudfoundry.org/cli/cf/api/resources/auth_tokens.go index 236e07a..e39dd91 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/auth_tokens.go +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/auth_tokens.go @@ -1,6 +1,6 @@ package resources -import "github.com/cloudfoundry/cli/cf/models" +import "code.cloudfoundry.org/cli/cf/models" type PaginatedAuthTokenResources struct { Resources []AuthTokenResource @@ -17,7 +17,7 @@ type AuthTokenEntity struct { } func (resource AuthTokenResource) ToFields() (authToken models.ServiceAuthTokenFields) { - authToken.Guid = resource.Metadata.Guid + authToken.GUID = resource.Metadata.GUID authToken.Label = resource.Entity.Label authToken.Provider = resource.Entity.Provider return diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/buildpacks.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/buildpacks.go new file mode 100644 index 0000000..0cf5c6b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/buildpacks.go @@ -0,0 +1,29 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type BuildpackResource struct { + Resource + Entity BuildpackEntity +} + +type BuildpackEntity struct { + Name string `json:"name"` + Position *int `json:"position,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + Key string `json:"key,omitempty"` + Filename string `json:"filename,omitempty"` + Locked *bool `json:"locked,omitempty"` +} + +func (resource BuildpackResource) ToFields() models.Buildpack { + return models.Buildpack{ + GUID: resource.Metadata.GUID, + Name: resource.Entity.Name, + Position: resource.Entity.Position, + Enabled: resource.Entity.Enabled, + Key: resource.Entity.Key, + Filename: resource.Entity.Filename, + Locked: resource.Entity.Locked, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/domains.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/domains.go new file mode 100644 index 0000000..23de786 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/domains.go @@ -0,0 +1,29 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type DomainResource struct { + Resource + Entity DomainEntity +} + +type DomainEntity struct { + Name string `json:"name"` + OwningOrganizationGUID string `json:"owning_organization_guid,omitempty"` + SharedOrganizationsURL string `json:"shared_organizations_url,omitempty"` + RouterGroupGUID string `json:"router_group_guid,omitempty"` + RouterGroupType string `json:"router_group_type,omitempty"` + Wildcard bool `json:"wildcard"` +} + +func (resource DomainResource) ToFields() models.DomainFields { + privateDomain := resource.Entity.SharedOrganizationsURL != "" || resource.Entity.OwningOrganizationGUID != "" + return models.DomainFields{ + Name: resource.Entity.Name, + GUID: resource.Metadata.GUID, + OwningOrganizationGUID: resource.Entity.OwningOrganizationGUID, + Shared: !privateDomain, + RouterGroupGUID: resource.Entity.RouterGroupGUID, + RouterGroupType: resource.Entity.RouterGroupType, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/events.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/events.go new file mode 100644 index 0000000..d315e5a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/events.go @@ -0,0 +1,108 @@ +package resources + +import ( + "fmt" + "strconv" + "strings" + "time" + + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/util/generic" +) + +type EventResource interface { + ToFields() models.EventFields +} + +type EventResourceNewV2 struct { + Resource + Entity struct { + Timestamp time.Time + Type string + Actor string `json:"actor"` + ActorName string `json:"actor_name"` + Metadata map[string]interface{} + } +} + +type EventResourceOldV2 struct { + Resource + Entity struct { + Timestamp time.Time + ExitDescription string `json:"exit_description"` + ExitStatus int `json:"exit_status"` + InstanceIndex int `json:"instance_index"` + } +} + +func (resource EventResourceNewV2) ToFields() models.EventFields { + metadata := generic.NewMap(resource.Entity.Metadata) + if metadata.Has("request") { + metadata = generic.NewMap(metadata.Get("request")) + } + + return models.EventFields{ + GUID: resource.Metadata.GUID, + Name: resource.Entity.Type, + Timestamp: resource.Entity.Timestamp, + Description: formatDescription(metadata, knownMetadataKeys), + Actor: resource.Entity.Actor, + ActorName: resource.Entity.ActorName, + } +} + +func (resource EventResourceOldV2) ToFields() models.EventFields { + return models.EventFields{ + GUID: resource.Metadata.GUID, + Name: T("app crashed"), + Timestamp: resource.Entity.Timestamp, + Description: fmt.Sprintf(T("instance: {{.InstanceIndex}}, reason: {{.ExitDescription}}, exit_status: {{.ExitStatus}}", + map[string]interface{}{ + "InstanceIndex": resource.Entity.InstanceIndex, + "ExitDescription": resource.Entity.ExitDescription, + "ExitStatus": strconv.Itoa(resource.Entity.ExitStatus), + })), + } +} + +var knownMetadataKeys = []string{ + "index", + "reason", + "exit_description", + "exit_status", + "recursive", + "disk_quota", + "instances", + "memory", + "state", + "command", + "environment_json", +} + +func formatDescription(metadata generic.Map, keys []string) string { + parts := []string{} + for _, key := range keys { + value := metadata.Get(key) + if value != nil { + parts = append(parts, fmt.Sprintf("%s: %s", key, formatDescriptionPart(value))) + } + } + return strings.Join(parts, ", ") +} + +func formatDescriptionPart(val interface{}) string { + switch val := val.(type) { + case string: + return val + case float64: + return strconv.FormatFloat(val, byte('f'), -1, 64) + case bool: + if val { + return "true" + } + return "false" + default: + return fmt.Sprintf("%s", val) + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/feature_flags.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/feature_flags.go new file mode 100644 index 0000000..c800c49 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/feature_flags.go @@ -0,0 +1,14 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type FeatureFlagResource struct { + Entity models.FeatureFlag +} + +func (resource FeatureFlagResource) ToFields() (flag models.FeatureFlag) { + flag.Name = resource.Entity.Name + flag.Enabled = resource.Entity.Enabled + flag.ErrorMessage = resource.Entity.ErrorMessage + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/organizations.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/organizations.go new file mode 100644 index 0000000..de7677b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/organizations.go @@ -0,0 +1,47 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type OrganizationResource struct { + Resource + Entity OrganizationEntity +} + +type OrganizationEntity struct { + Name string `json:"name"` + QuotaDefinition QuotaResource `json:"quota_definition"` + Spaces []SpaceResource + Domains []DomainResource + SpaceQuotas []SpaceQuotaResource `json:"space_quota_definitions"` +} + +func (resource OrganizationResource) ToFields() (fields models.OrganizationFields) { + fields.Name = resource.Entity.Name + fields.GUID = resource.Metadata.GUID + + fields.QuotaDefinition = resource.Entity.QuotaDefinition.ToFields() + return +} + +func (resource OrganizationResource) ToModel() (org models.Organization) { + org.OrganizationFields = resource.ToFields() + + spaces := []models.SpaceFields{} + for _, s := range resource.Entity.Spaces { + spaces = append(spaces, s.ToFields()) + } + org.Spaces = spaces + + domains := []models.DomainFields{} + for _, d := range resource.Entity.Domains { + domains = append(domains, d.ToFields()) + } + org.Domains = domains + + spaceQuotas := []models.SpaceQuota{} + for _, sq := range resource.Entity.SpaceQuotas { + spaceQuotas = append(spaceQuotas, sq.ToModel()) + } + org.SpaceQuotas = spaceQuotas + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/quota_constants.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/quota_constants.go new file mode 100644 index 0000000..d0f205a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/quota_constants.go @@ -0,0 +1,5 @@ +package resources + +const UnlimitedAppInstances int = -1 +const UnlimitedReservedRoutePorts string = "-1" +const UnlimitedRoutes string = "-1" diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/quotas.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/quotas.go new file mode 100644 index 0000000..be32349 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/quotas.go @@ -0,0 +1,34 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type PaginatedQuotaResources struct { + Resources []QuotaResource +} + +type QuotaResource struct { + Resource + Entity models.QuotaResponse +} + +func (resource QuotaResource) ToFields() models.QuotaFields { + appInstanceLimit := UnlimitedAppInstances + if resource.Entity.AppInstanceLimit != "" { + i, err := resource.Entity.AppInstanceLimit.Int64() + if err == nil { + appInstanceLimit = int(i) + } + } + + return models.QuotaFields{ + GUID: resource.Metadata.GUID, + Name: resource.Entity.Name, + MemoryLimit: resource.Entity.MemoryLimit, + InstanceMemoryLimit: resource.Entity.InstanceMemoryLimit, + RoutesLimit: resource.Entity.RoutesLimit, + ServicesLimit: resource.Entity.ServicesLimit, + NonBasicServicesAllowed: resource.Entity.NonBasicServicesAllowed, + AppInstanceLimit: appInstanceLimit, + ReservedRoutePorts: resource.Entity.ReservedRoutePorts, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/resources.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/resources.go new file mode 100644 index 0000000..c1b5dab --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/resources.go @@ -0,0 +1,10 @@ +package resources + +type Metadata struct { + GUID string `json:"guid"` + URL string `json:"url,omitempty"` +} + +type Resource struct { + Metadata Metadata +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/routes.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/routes.go new file mode 100644 index 0000000..55e8ac4 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/routes.go @@ -0,0 +1,38 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type RouteResource struct { + Resource + Entity RouteEntity +} + +type RouteEntity struct { + Host string `json:"host"` + Domain DomainResource `json:"domain"` + Path string `json:"path"` + Port int `json:"port"` + Space SpaceResource `json:"space"` + Apps []ApplicationResource `json:"apps"` + ServiceInstance ServiceInstanceResource `json:"service_instance"` +} + +func (resource RouteResource) ToFields() (fields models.Route) { + fields.GUID = resource.Metadata.GUID + fields.Host = resource.Entity.Host + return +} + +func (resource RouteResource) ToModel() (route models.Route) { + route.Host = resource.Entity.Host + route.Path = resource.Entity.Path + route.Port = resource.Entity.Port + route.GUID = resource.Metadata.GUID + route.Domain = resource.Entity.Domain.ToFields() + route.Space = resource.Entity.Space.ToFields() + route.ServiceInstance = resource.Entity.ServiceInstance.ToFields() + for _, appResource := range resource.Entity.Apps { + route.Apps = append(route.Apps, appResource.ToFields()) + } + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/security_groups.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/security_groups.go new file mode 100644 index 0000000..5b4a58f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/security_groups.go @@ -0,0 +1,31 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type PaginatedSecurityGroupResources struct { + Resources []SecurityGroupResource +} + +type SecurityGroupResource struct { + Resource + Entity SecurityGroup +} + +type SecurityGroup struct { + models.SecurityGroupFields + Spaces []SpaceResource +} + +func (resource SecurityGroupResource) ToFields() (fields models.SecurityGroupFields) { + fields.Name = resource.Entity.Name + fields.Rules = resource.Entity.Rules + fields.SpaceURL = resource.Entity.SpaceURL + fields.GUID = resource.Metadata.GUID + + return +} + +func (resource SecurityGroupResource) ToModel() (asg models.SecurityGroup) { + asg.SecurityGroupFields = resource.ToFields() + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_bindings.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_bindings.go new file mode 100644 index 0000000..df28cd1 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_bindings.go @@ -0,0 +1,20 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type ServiceBindingResource struct { + Resource + Entity ServiceBindingEntity +} + +type ServiceBindingEntity struct { + AppGUID string `json:"app_guid"` +} + +func (resource ServiceBindingResource) ToFields() models.ServiceBindingFields { + return models.ServiceBindingFields{ + URL: resource.Metadata.URL, + GUID: resource.Metadata.GUID, + AppGUID: resource.Entity.AppGUID, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_brokers.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_brokers.go new file mode 100644 index 0000000..ad37ad9 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_brokers.go @@ -0,0 +1,25 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type ServiceBrokerResource struct { + Resource + Entity ServiceBrokerEntity +} + +type ServiceBrokerEntity struct { + GUID string + Name string + Password string `json:"auth_password"` + Username string `json:"auth_username"` + URL string `json:"broker_url"` +} + +func (resource ServiceBrokerResource) ToFields() (fields models.ServiceBroker) { + fields.Name = resource.Entity.Name + fields.GUID = resource.Metadata.GUID + fields.URL = resource.Entity.URL + fields.Username = resource.Entity.Username + fields.Password = resource.Entity.Password + return +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_instances.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_instances.go similarity index 84% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_instances.go rename to vendor/code.cloudfoundry.org/cli/cf/api/resources/service_instances.go index 5b8ee7a..13ed093 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_instances.go +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_instances.go @@ -1,6 +1,6 @@ package resources -import "github.com/cloudfoundry/cli/cf/models" +import "code.cloudfoundry.org/cli/cf/models" type PaginatedServiceInstanceResources struct { TotalResults int `json:"total_results"` @@ -21,8 +21,9 @@ type LastOperation struct { } type ServiceInstanceEntity struct { - Name string - DashboardUrl string `json:"dashboard_url"` + Name string `json:"name"` + DashboardURL string `json:"dashboard_url"` + Tags []string `json:"tags"` ServiceBindings []ServiceBindingResource `json:"service_bindings"` ServiceKeys []ServiceKeyResource `json:"service_keys"` ServicePlan ServicePlanResource `json:"service_plan"` @@ -31,9 +32,10 @@ type ServiceInstanceEntity struct { func (resource ServiceInstanceResource) ToFields() models.ServiceInstanceFields { return models.ServiceInstanceFields{ - Guid: resource.Metadata.Guid, + GUID: resource.Metadata.GUID, Name: resource.Entity.Name, - DashboardUrl: resource.Entity.DashboardUrl, + Tags: resource.Entity.Tags, + DashboardURL: resource.Entity.DashboardURL, LastOperation: models.LastOperationFields{ Type: resource.Entity.LastOperation.Type, State: resource.Entity.LastOperation.State, diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_keys.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_keys.go new file mode 100644 index 0000000..6727fe3 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_keys.go @@ -0,0 +1,37 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type ServiceKeyResource struct { + Resource + Entity ServiceKeyEntity +} + +type ServiceKeyEntity struct { + Name string `json:"name"` + ServiceInstanceGUID string `json:"service_instance_guid"` + ServiceInstanceURL string `json:"service_instance_url"` + Credentials map[string]interface{} `json:"credentials"` +} + +func (resource ServiceKeyResource) ToFields() models.ServiceKeyFields { + return models.ServiceKeyFields{ + Name: resource.Entity.Name, + URL: resource.Metadata.URL, + GUID: resource.Metadata.GUID, + } +} + +func (resource ServiceKeyResource) ToModel() models.ServiceKey { + return models.ServiceKey{ + Fields: models.ServiceKeyFields{ + Name: resource.Entity.Name, + GUID: resource.Metadata.GUID, + URL: resource.Metadata.URL, + + ServiceInstanceGUID: resource.Entity.ServiceInstanceGUID, + ServiceInstanceURL: resource.Entity.ServiceInstanceURL, + }, + Credentials: resource.Entity.Credentials, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_offerings.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_offerings.go new file mode 100644 index 0000000..5cc8cc2 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_offerings.go @@ -0,0 +1,86 @@ +package resources + +import ( + "encoding/json" + "strconv" + + "code.cloudfoundry.org/cli/cf/models" +) + +type PaginatedServiceOfferingResources struct { + Resources []ServiceOfferingResource +} + +type ServiceOfferingResource struct { + Resource + Entity ServiceOfferingEntity +} + +type ServiceOfferingEntity struct { + Label string `json:"label"` + Version string `json:"version"` + Description string `json:"description"` + Provider string `json:"provider"` + BrokerGUID string `json:"service_broker_guid"` + Requires []string `json:"requires"` + ServicePlans []ServicePlanResource `json:"service_plans"` + Extra ServiceOfferingExtra +} + +type ServiceOfferingExtra struct { + DocumentationURL string `json:"documentationURL"` +} + +func (resource ServiceOfferingResource) ToFields() models.ServiceOfferingFields { + return models.ServiceOfferingFields{ + Label: resource.Entity.Label, + Version: resource.Entity.Version, + Provider: resource.Entity.Provider, + Description: resource.Entity.Description, + BrokerGUID: resource.Entity.BrokerGUID, + GUID: resource.Metadata.GUID, + DocumentationURL: resource.Entity.Extra.DocumentationURL, + Requires: resource.Entity.Requires, + } +} + +func (resource ServiceOfferingResource) ToModel() models.ServiceOffering { + offering := models.ServiceOffering{ + ServiceOfferingFields: resource.ToFields(), + } + + for _, p := range resource.Entity.ServicePlans { + offering.Plans = append(offering.Plans, + models.ServicePlanFields{ + Name: p.Entity.Name, + GUID: p.Metadata.GUID, + }, + ) + } + + return offering +} + +type serviceOfferingExtra ServiceOfferingExtra + +func (resource *ServiceOfferingExtra) UnmarshalJSON(rawData []byte) error { + if string(rawData) == "null" { + return nil + } + + extra := serviceOfferingExtra{} + + unquoted, err := strconv.Unquote(string(rawData)) + if err != nil { + return err + } + + err = json.Unmarshal([]byte(unquoted), &extra) + if err != nil { + return err + } + + *resource = ServiceOfferingExtra(extra) + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_plan_visibility.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_plan_visibility.go new file mode 100644 index 0000000..939bb16 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_plan_visibility.go @@ -0,0 +1,15 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type ServicePlanVisibilityResource struct { + Resource + Entity models.ServicePlanVisibilityFields +} + +func (resource ServicePlanVisibilityResource) ToFields() (fields models.ServicePlanVisibilityFields) { + fields.GUID = resource.Metadata.GUID + fields.ServicePlanGUID = resource.Entity.ServicePlanGUID + fields.OrganizationGUID = resource.Entity.OrganizationGUID + return +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_plans.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_plans.go similarity index 75% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_plans.go rename to vendor/code.cloudfoundry.org/cli/cf/api/resources/service_plans.go index 5f66770..1e310d0 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/api/resources/service_plans.go +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/service_plans.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/cloudfoundry/cli/cf/models" + "code.cloudfoundry.org/cli/cf/models" ) type ServicePlanResource struct { @@ -17,7 +17,7 @@ type ServicePlanEntity struct { Public bool Active bool Description string `json:"description"` - ServiceOfferingGuid string `json:"service_guid"` + ServiceOfferingGUID string `json:"service_guid"` ServiceOffering ServiceOfferingResource `json:"service"` } @@ -28,22 +28,21 @@ type ServicePlanDescription struct { } func (resource ServicePlanResource) ToFields() (fields models.ServicePlanFields) { - fields.Guid = resource.Metadata.Guid + fields.GUID = resource.Metadata.GUID fields.Name = resource.Entity.Name fields.Free = resource.Entity.Free fields.Description = resource.Entity.Description fields.Public = resource.Entity.Public fields.Active = resource.Entity.Active - fields.ServiceOfferingGuid = resource.Entity.ServiceOfferingGuid + fields.ServiceOfferingGUID = resource.Entity.ServiceOfferingGUID return } func (planDesc ServicePlanDescription) String() string { if planDesc.ServiceProvider == "" { return fmt.Sprintf("%s %s", planDesc.ServiceLabel, planDesc.ServicePlanName) // v2 plan - } else { - return fmt.Sprintf("%s %s %s", planDesc.ServiceLabel, planDesc.ServiceProvider, planDesc.ServicePlanName) // v1 plan } + return fmt.Sprintf("%s %s %s", planDesc.ServiceLabel, planDesc.ServiceProvider, planDesc.ServicePlanName) // v1 plan } type ServiceMigrateV1ToV2Response struct { diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/space_quotas.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/space_quotas.go new file mode 100644 index 0000000..8a3d865 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/space_quotas.go @@ -0,0 +1,37 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type PaginatedSpaceQuotaResources struct { + Resources []SpaceQuotaResource +} + +type SpaceQuotaResource struct { + Resource + Entity models.SpaceQuotaResponse +} + +func (resource SpaceQuotaResource) ToModel() models.SpaceQuota { + entity := resource.Entity + + appInstanceLimit := UnlimitedAppInstances + if entity.AppInstanceLimit != "" { + i, err := entity.AppInstanceLimit.Int64() + if err == nil { + appInstanceLimit = int(i) + } + } + + return models.SpaceQuota{ + GUID: resource.Metadata.GUID, + Name: entity.Name, + MemoryLimit: entity.MemoryLimit, + InstanceMemoryLimit: entity.InstanceMemoryLimit, + RoutesLimit: entity.RoutesLimit, + ServicesLimit: entity.ServicesLimit, + NonBasicServicesAllowed: entity.NonBasicServicesAllowed, + OrgGUID: entity.OrgGUID, + AppInstanceLimit: appInstanceLimit, + ReservedRoutePortsLimit: entity.ReservedRoutePortsLimit, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/spaces.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/spaces.go new file mode 100644 index 0000000..e081c3f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/spaces.go @@ -0,0 +1,49 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type SpaceResource struct { + Resource + Entity SpaceEntity +} + +type SpaceEntity struct { + Name string + Organization OrganizationResource + Applications []ApplicationResource `json:"apps"` + Domains []DomainResource + ServiceInstances []ServiceInstanceResource `json:"service_instances"` + SecurityGroups []SecurityGroupResource `json:"security_groups"` + SpaceQuotaGUID string `json:"space_quota_definition_guid"` + AllowSSH bool `json:"allow_ssh"` +} + +func (resource SpaceResource) ToFields() (fields models.SpaceFields) { + fields.GUID = resource.Metadata.GUID + fields.Name = resource.Entity.Name + fields.AllowSSH = resource.Entity.AllowSSH + return +} + +func (resource SpaceResource) ToModel() (space models.Space) { + space.SpaceFields = resource.ToFields() + for _, app := range resource.Entity.Applications { + space.Applications = append(space.Applications, app.ToFields()) + } + + for _, domainResource := range resource.Entity.Domains { + space.Domains = append(space.Domains, domainResource.ToFields()) + } + + for _, serviceResource := range resource.Entity.ServiceInstances { + space.ServiceInstances = append(space.ServiceInstances, serviceResource.ToFields()) + } + + for _, securityGroupResource := range resource.Entity.SecurityGroups { + space.SecurityGroups = append(space.SecurityGroups, securityGroupResource.ToFields()) + } + + space.Organization = resource.Entity.Organization.ToFields() + space.SpaceQuotaGUID = resource.Entity.SpaceQuotaGUID + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/stacks.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/stacks.go new file mode 100644 index 0000000..fd11467 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/stacks.go @@ -0,0 +1,25 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type PaginatedStackResources struct { + Resources []StackResource +} + +type StackResource struct { + Resource + Entity StackEntity +} + +type StackEntity struct { + Name string + Description string +} + +func (resource StackResource) ToFields() *models.Stack { + return &models.Stack{ + GUID: resource.Metadata.GUID, + Name: resource.Entity.Name, + Description: resource.Entity.Description, + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/resources/users.go b/vendor/code.cloudfoundry.org/cli/cf/api/resources/users.go new file mode 100644 index 0000000..61cbd23 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/resources/users.go @@ -0,0 +1,60 @@ +package resources + +import "code.cloudfoundry.org/cli/cf/models" + +type UserResource struct { + Resource + Entity UserEntity +} + +type UserEntity struct { + Name string `json:"username,omitempty"` + Admin bool +} + +type UAAUserResources struct { + Resources []struct { + ID string + Username string + } +} + +func (resource UserResource) ToFields() models.UserFields { + return models.UserFields{ + GUID: resource.Metadata.GUID, + IsAdmin: resource.Entity.Admin, + Username: resource.Entity.Name, + } +} + +type UAAUserResourceEmail struct { + Value string `json:"value"` +} + +type UAAUserResourceName struct { + GivenName string `json:"givenName"` + FamilyName string `json:"familyName"` +} + +type UAAUserResource struct { + Username string `json:"userName"` + Emails []UAAUserResourceEmail `json:"emails"` + Password string `json:"password"` + Name UAAUserResourceName `json:"name"` +} + +func NewUAAUserResource(username, password string) UAAUserResource { + return UAAUserResource{ + Username: username, + Emails: []UAAUserResourceEmail{{Value: username}}, + Password: password, + Name: UAAUserResourceName{ + GivenName: username, + FamilyName: username, + }, + } +} + +type UAAUserFields struct { + ID string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/route_service_binding_repository.go b/vendor/code.cloudfoundry.org/cli/cf/api/route_service_binding_repository.go new file mode 100644 index 0000000..7a8c527 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/route_service_binding_repository.go @@ -0,0 +1,79 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "strings" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . RouteServiceBindingRepository + +type RouteServiceBindingRepository interface { + Bind(instanceGUID, routeGUID string, userProvided bool, parameters string) error + Unbind(instanceGUID, routeGUID string, userProvided bool) error +} + +type CloudControllerRouteServiceBindingRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerRouteServiceBindingRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerRouteServiceBindingRepository { + return CloudControllerRouteServiceBindingRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerRouteServiceBindingRepository) Bind( + instanceGUID string, + routeGUID string, + userProvided bool, + opaqueParams string, +) error { + var rs io.ReadSeeker + if opaqueParams != "" { + opaqueJSON := json.RawMessage(opaqueParams) + s := struct { + Parameters *json.RawMessage `json:"parameters"` + }{ + &opaqueJSON, + } + + jsonBytes, err := json.Marshal(s) + if err != nil { + return err + } + + rs = bytes.NewReader(jsonBytes) + } else { + rs = strings.NewReader("") + } + + return repo.gateway.UpdateResourceSync( + repo.config.APIEndpoint(), + getPath(instanceGUID, routeGUID, userProvided), + rs, + ) +} + +func (repo CloudControllerRouteServiceBindingRepository) Unbind(instanceGUID, routeGUID string, userProvided bool) error { + path := getPath(instanceGUID, routeGUID, userProvided) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func getPath(instanceGUID, routeGUID string, userProvided bool) string { + var resource string + if userProvided { + resource = "user_provided_service_instances" + } else { + resource = "service_instances" + } + + return fmt.Sprintf("/v2/%s/%s/routes/%s", resource, instanceGUID, routeGUID) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/routes.go b/vendor/code.cloudfoundry.org/cli/cf/api/routes.go new file mode 100644 index 0000000..931932a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/routes.go @@ -0,0 +1,208 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" + "github.com/google/go-querystring/query" +) + +//go:generate counterfeiter . RouteRepository + +type RouteRepository interface { + ListRoutes(cb func(models.Route) bool) (apiErr error) + ListAllRoutes(cb func(models.Route) bool) (apiErr error) + Find(host string, domain models.DomainFields, path string, port int) (route models.Route, apiErr error) + Create(host string, domain models.DomainFields, path string, port int, useRandomPort bool) (createdRoute models.Route, apiErr error) + CheckIfExists(host string, domain models.DomainFields, path string) (found bool, apiErr error) + CreateInSpace(host, path, domainGUID, spaceGUID string, port int, randomPort bool) (createdRoute models.Route, apiErr error) + Bind(routeGUID, appGUID string) (apiErr error) + Unbind(routeGUID, appGUID string) (apiErr error) + Delete(routeGUID string) (apiErr error) +} + +type CloudControllerRouteRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerRouteRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerRouteRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerRouteRepository) ListRoutes(cb func(models.Route) bool) (apiErr error) { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/spaces/%s/routes?inline-relations-depth=1", repo.config.SpaceFields().GUID), + resources.RouteResource{}, + func(resource interface{}) bool { + return cb(resource.(resources.RouteResource).ToModel()) + }) +} + +func (repo CloudControllerRouteRepository) ListAllRoutes(cb func(models.Route) bool) (apiErr error) { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/routes?q=organization_guid:%s&inline-relations-depth=1", repo.config.OrganizationFields().GUID), + resources.RouteResource{}, + func(resource interface{}) bool { + return cb(resource.(resources.RouteResource).ToModel()) + }) +} + +func normalizedPath(path string) string { + if path != "" && !strings.HasPrefix(path, `/`) { + return `/` + path + } + + return path +} + +func queryStringForRouteSearch(host, guid, path string, port int) string { + args := []string{ + fmt.Sprintf("host:%s", host), + fmt.Sprintf("domain_guid:%s", guid), + } + + if path != "" { + args = append(args, fmt.Sprintf("path:%s", normalizedPath(path))) + } + + if port != 0 { + args = append(args, fmt.Sprintf("port:%d", port)) + } + + return strings.Join(args, ";") +} + +func (repo CloudControllerRouteRepository) Find(host string, domain models.DomainFields, path string, port int) (models.Route, error) { + var route models.Route + queryString := queryStringForRouteSearch(host, domain.GUID, path, port) + + q := struct { + Query string `url:"q"` + InlineRelationsDepth int `url:"inline-relations-depth"` + }{queryString, 1} + + opt, _ := query.Values(q) + + found := false + apiErr := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/routes?%s", opt.Encode()), + resources.RouteResource{}, + func(resource interface{}) bool { + keepSearching := true + route = resource.(resources.RouteResource).ToModel() + if doesNotMatchVersionSpecificAttributes(route, path, port) { + return keepSearching + } + + found = true + return !keepSearching + }) + + if apiErr == nil && !found { + apiErr = errors.NewModelNotFoundError("Route", host) + } + + return route, apiErr +} + +func doesNotMatchVersionSpecificAttributes(route models.Route, path string, port int) bool { + return normalizedPath(route.Path) != normalizedPath(path) || route.Port != port +} + +func (repo CloudControllerRouteRepository) Create(host string, domain models.DomainFields, path string, port int, useRandomPort bool) (createdRoute models.Route, apiErr error) { + return repo.CreateInSpace(host, path, domain.GUID, repo.config.SpaceFields().GUID, port, useRandomPort) +} + +func (repo CloudControllerRouteRepository) CheckIfExists(host string, domain models.DomainFields, path string) (bool, error) { + path = normalizedPath(path) + + u, err := url.Parse(repo.config.APIEndpoint()) + if err != nil { + return false, err + } + + u.Path = fmt.Sprintf("/v2/routes/reserved/domain/%s/host/%s", domain.GUID, host) + if path != "" { + q := u.Query() + q.Set("path", path) + u.RawQuery = q.Encode() + } + + var rawResponse interface{} + err = repo.gateway.GetResource(u.String(), &rawResponse) + if err != nil { + if _, ok := err.(*errors.HTTPNotFoundError); ok { + return false, nil + } + return false, err + } + + return true, nil +} + +func (repo CloudControllerRouteRepository) CreateInSpace(host, path, domainGUID, spaceGUID string, port int, randomPort bool) (models.Route, error) { + path = normalizedPath(path) + + body := struct { + Host string `json:"host,omitempty"` + Path string `json:"path,omitempty"` + Port int `json:"port,omitempty"` + DomainGUID string `json:"domain_guid"` + SpaceGUID string `json:"space_guid"` + }{host, path, port, domainGUID, spaceGUID} + + data, err := json.Marshal(body) + if err != nil { + return models.Route{}, err + } + + q := struct { + GeneratePort bool `url:"generate_port,omitempty"` + InlineRelationsDepth int `url:"inline-relations-depth"` + }{randomPort, 1} + + opt, _ := query.Values(q) + uriFragment := "/v2/routes?" + opt.Encode() + + resource := new(resources.RouteResource) + err = repo.gateway.CreateResource( + repo.config.APIEndpoint(), + uriFragment, + bytes.NewReader(data), + resource, + ) + if err != nil { + return models.Route{}, err + } + + return resource.ToModel(), nil +} + +func (repo CloudControllerRouteRepository) Bind(routeGUID, appGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/apps/%s/routes/%s", appGUID, routeGUID) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, nil) +} + +func (repo CloudControllerRouteRepository) Unbind(routeGUID, appGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/apps/%s/routes/%s", appGUID, routeGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerRouteRepository) Delete(routeGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/routes/%s", routeGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/routing_api.go b/vendor/code.cloudfoundry.org/cli/cf/api/routing_api.go new file mode 100644 index 0000000..495136b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/routing_api.go @@ -0,0 +1,43 @@ +package api + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +type routingAPIRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +//go:generate counterfeiter . RoutingAPIRepository + +type RoutingAPIRepository interface { + ListRouterGroups(cb func(models.RouterGroup) bool) (apiErr error) +} + +func NewRoutingAPIRepository(config coreconfig.Reader, gateway net.Gateway) RoutingAPIRepository { + return routingAPIRepository{ + config: config, + gateway: gateway, + } +} + +func (r routingAPIRepository) ListRouterGroups(cb func(models.RouterGroup) bool) (apiErr error) { + routerGroups := models.RouterGroups{} + endpoint := fmt.Sprintf("%s/v1/router_groups", r.config.RoutingAPIEndpoint()) + apiErr = r.gateway.GetResource(endpoint, &routerGroups) + if apiErr != nil { + return apiErr + } + + for _, router := range routerGroups { + if cb(router) == false { + return + } + } + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/defaults.go b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/defaults.go new file mode 100644 index 0000000..57e0e08 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/defaults.go @@ -0,0 +1,44 @@ +package defaults + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +type DefaultSecurityGroupsRepoBase struct { + ConfigRepo coreconfig.Reader + Gateway net.Gateway +} + +func (repo *DefaultSecurityGroupsRepoBase) Bind(groupGUID string, path string) error { + updatedPath := fmt.Sprintf("%s/%s", path, groupGUID) + return repo.Gateway.UpdateResourceFromStruct(repo.ConfigRepo.APIEndpoint(), updatedPath, "") +} + +func (repo *DefaultSecurityGroupsRepoBase) List(path string) ([]models.SecurityGroupFields, error) { + groups := []models.SecurityGroupFields{} + + err := repo.Gateway.ListPaginatedResources( + repo.ConfigRepo.APIEndpoint(), + path, + resources.SecurityGroupResource{}, + func(resource interface{}) bool { + if securityGroupResource, ok := resource.(resources.SecurityGroupResource); ok { + groups = append(groups, securityGroupResource.ToFields()) + } + + return true + }, + ) + + return groups, err +} + +func (repo *DefaultSecurityGroupsRepoBase) Delete(groupGUID string, path string) error { + updatedPath := fmt.Sprintf("%s/%s", path, groupGUID) + return repo.Gateway.DeleteResource(repo.ConfigRepo.APIEndpoint(), updatedPath) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/running/running.go b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/running/running.go new file mode 100644 index 0000000..0d3ce65 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/running/running.go @@ -0,0 +1,44 @@ +package running + +import ( + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" + + . "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults" +) + +const urlPath = "/v2/config/running_security_groups" + +//go:generate counterfeiter . SecurityGroupsRepo + +type SecurityGroupsRepo interface { + BindToRunningSet(string) error + List() ([]models.SecurityGroupFields, error) + UnbindFromRunningSet(string) error +} + +type cloudControllerRunningSecurityGroupRepo struct { + repoBase DefaultSecurityGroupsRepoBase +} + +func NewSecurityGroupsRepo(configRepo coreconfig.Reader, gateway net.Gateway) SecurityGroupsRepo { + return &cloudControllerRunningSecurityGroupRepo{ + repoBase: DefaultSecurityGroupsRepoBase{ + ConfigRepo: configRepo, + Gateway: gateway, + }, + } +} + +func (repo *cloudControllerRunningSecurityGroupRepo) BindToRunningSet(groupGUID string) error { + return repo.repoBase.Bind(groupGUID, urlPath) +} + +func (repo *cloudControllerRunningSecurityGroupRepo) List() ([]models.SecurityGroupFields, error) { + return repo.repoBase.List(urlPath) +} + +func (repo *cloudControllerRunningSecurityGroupRepo) UnbindFromRunningSet(groupGUID string) error { + return repo.repoBase.Delete(groupGUID, urlPath) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/staging/staging.go b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/staging/staging.go new file mode 100644 index 0000000..bf5bc59 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/staging/staging.go @@ -0,0 +1,44 @@ +package staging + +import ( + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" + + . "code.cloudfoundry.org/cli/cf/api/securitygroups/defaults" +) + +const urlPath = "/v2/config/staging_security_groups" + +//go:generate counterfeiter . SecurityGroupsRepo + +type SecurityGroupsRepo interface { + BindToStagingSet(string) error + List() ([]models.SecurityGroupFields, error) + UnbindFromStagingSet(string) error +} + +type cloudControllerStagingSecurityGroupRepo struct { + repoBase DefaultSecurityGroupsRepoBase +} + +func NewSecurityGroupsRepo(configRepo coreconfig.Reader, gateway net.Gateway) SecurityGroupsRepo { + return &cloudControllerStagingSecurityGroupRepo{ + repoBase: DefaultSecurityGroupsRepoBase{ + ConfigRepo: configRepo, + Gateway: gateway, + }, + } +} + +func (repo *cloudControllerStagingSecurityGroupRepo) BindToStagingSet(groupGUID string) error { + return repo.repoBase.Bind(groupGUID, urlPath) +} + +func (repo *cloudControllerStagingSecurityGroupRepo) List() ([]models.SecurityGroupFields, error) { + return repo.repoBase.List(urlPath) +} + +func (repo *cloudControllerStagingSecurityGroupRepo) UnbindFromStagingSet(groupGUID string) error { + return repo.repoBase.Delete(groupGUID, urlPath) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/security_groups.go b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/security_groups.go new file mode 100644 index 0000000..0280ac6 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/security_groups.go @@ -0,0 +1,134 @@ +package securitygroups + +import ( + "fmt" + "net/url" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . SecurityGroupRepo + +type SecurityGroupRepo interface { + Create(name string, rules []map[string]interface{}) error + Update(guid string, rules []map[string]interface{}) error + Read(string) (models.SecurityGroup, error) + Delete(string) error + FindAll() ([]models.SecurityGroup, error) +} + +type cloudControllerSecurityGroupRepo struct { + gateway net.Gateway + config coreconfig.Reader +} + +func NewSecurityGroupRepo(config coreconfig.Reader, gateway net.Gateway) SecurityGroupRepo { + return cloudControllerSecurityGroupRepo{ + config: config, + gateway: gateway, + } +} + +func (repo cloudControllerSecurityGroupRepo) Create(name string, rules []map[string]interface{}) error { + path := "/v2/security_groups" + params := models.SecurityGroupParams{ + Name: name, + Rules: rules, + } + return repo.gateway.CreateResourceFromStruct(repo.config.APIEndpoint(), path, params) +} + +func (repo cloudControllerSecurityGroupRepo) Read(name string) (models.SecurityGroup, error) { + path := fmt.Sprintf("/v2/security_groups?q=%s", url.QueryEscape("name:"+name)) + group := models.SecurityGroup{} + foundGroup := false + + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.SecurityGroupResource{}, + func(resource interface{}) bool { + if asgr, ok := resource.(resources.SecurityGroupResource); ok { + group = asgr.ToModel() + foundGroup = true + } + + return false + }, + ) + if err != nil { + return group, err + } + + if !foundGroup { + return group, errors.NewModelNotFoundError("security group", name) + } + + err = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + group.SpaceURL+"?inline-relations-depth=1", + resources.SpaceResource{}, + func(resource interface{}) bool { + if asgr, ok := resource.(resources.SpaceResource); ok { + group.Spaces = append(group.Spaces, asgr.ToModel()) + return true + } + return false + }, + ) + + return group, err +} + +func (repo cloudControllerSecurityGroupRepo) Update(guid string, rules []map[string]interface{}) error { + url := fmt.Sprintf("/v2/security_groups/%s", guid) + return repo.gateway.UpdateResourceFromStruct(repo.config.APIEndpoint(), url, models.SecurityGroupParams{Rules: rules}) +} + +func (repo cloudControllerSecurityGroupRepo) FindAll() ([]models.SecurityGroup, error) { + path := "/v2/security_groups" + securityGroups := []models.SecurityGroup{} + + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.SecurityGroupResource{}, + func(resource interface{}) bool { + if securityGroupResource, ok := resource.(resources.SecurityGroupResource); ok { + securityGroups = append(securityGroups, securityGroupResource.ToModel()) + } + + return true + }, + ) + + if err != nil { + return nil, err + } + + for i := range securityGroups { + err = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + securityGroups[i].SpaceURL+"?inline-relations-depth=1", + resources.SpaceResource{}, + func(resource interface{}) bool { + if asgr, ok := resource.(resources.SpaceResource); ok { + securityGroups[i].Spaces = append(securityGroups[i].Spaces, asgr.ToModel()) + return true + } + return false + }, + ) + } + + return securityGroups, err +} + +func (repo cloudControllerSecurityGroupRepo) Delete(securityGroupGUID string) error { + path := fmt.Sprintf("/v2/security_groups/%s", securityGroupGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/spaces/space_binder.go b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/spaces/space_binder.go new file mode 100644 index 0000000..7d69636 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/securitygroups/spaces/space_binder.go @@ -0,0 +1,46 @@ +package spaces + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . SecurityGroupSpaceBinder + +type SecurityGroupSpaceBinder interface { + BindSpace(securityGroupGUID string, spaceGUID string) error + UnbindSpace(securityGroupGUID string, spaceGUID string) error +} + +type securityGroupSpaceBinder struct { + configRepo coreconfig.Reader + gateway net.Gateway +} + +func NewSecurityGroupSpaceBinder(configRepo coreconfig.Reader, gateway net.Gateway) (binder securityGroupSpaceBinder) { + return securityGroupSpaceBinder{ + configRepo: configRepo, + gateway: gateway, + } +} + +func (repo securityGroupSpaceBinder) BindSpace(securityGroupGUID string, spaceGUID string) error { + url := fmt.Sprintf("/v2/security_groups/%s/spaces/%s", + securityGroupGUID, + spaceGUID, + ) + + return repo.gateway.UpdateResourceFromStruct(repo.configRepo.APIEndpoint(), url, models.SecurityGroupParams{}) +} + +func (repo securityGroupSpaceBinder) UnbindSpace(securityGroupGUID string, spaceGUID string) error { + url := fmt.Sprintf("/v2/security_groups/%s/spaces/%s", + securityGroupGUID, + spaceGUID, + ) + + return repo.gateway.DeleteResource(repo.configRepo.APIEndpoint(), url) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_auth_tokens.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_auth_tokens.go new file mode 100644 index 0000000..6fb825d --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_auth_tokens.go @@ -0,0 +1,87 @@ +package api + +import ( + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServiceAuthTokenRepository + +type ServiceAuthTokenRepository interface { + FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error) + FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error) + Create(authToken models.ServiceAuthTokenFields) (apiErr error) + Update(authToken models.ServiceAuthTokenFields) (apiErr error) + Delete(authToken models.ServiceAuthTokenFields) (apiErr error) +} + +type CloudControllerServiceAuthTokenRepository struct { + gateway net.Gateway + config coreconfig.Reader +} + +func NewCloudControllerServiceAuthTokenRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceAuthTokenRepository) { + repo.gateway = gateway + repo.config = config + return +} + +func (repo CloudControllerServiceAuthTokenRepository) FindAll() (authTokens []models.ServiceAuthTokenFields, apiErr error) { + return repo.findAllWithPath("/v2/service_auth_tokens") +} + +func (repo CloudControllerServiceAuthTokenRepository) FindByLabelAndProvider(label, provider string) (authToken models.ServiceAuthTokenFields, apiErr error) { + path := fmt.Sprintf("/v2/service_auth_tokens?q=%s", url.QueryEscape("label:"+label+";provider:"+provider)) + authTokens, apiErr := repo.findAllWithPath(path) + if apiErr != nil { + return + } + + if len(authTokens) == 0 { + apiErr = errors.NewModelNotFoundError("Service Auth Token", label+" "+provider) + return + } + + authToken = authTokens[0] + return +} + +func (repo CloudControllerServiceAuthTokenRepository) findAllWithPath(path string) ([]models.ServiceAuthTokenFields, error) { + var authTokens []models.ServiceAuthTokenFields + apiErr := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.AuthTokenResource{}, + func(resource interface{}) bool { + if at, ok := resource.(resources.AuthTokenResource); ok { + authTokens = append(authTokens, at.ToFields()) + } + return true + }) + + return authTokens, apiErr +} + +func (repo CloudControllerServiceAuthTokenRepository) Create(authToken models.ServiceAuthTokenFields) (apiErr error) { + body := fmt.Sprintf(`{"label":"%s","provider":"%s","token":"%s"}`, authToken.Label, authToken.Provider, authToken.Token) + path := "/v2/service_auth_tokens" + return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} + +func (repo CloudControllerServiceAuthTokenRepository) Delete(authToken models.ServiceAuthTokenFields) (apiErr error) { + path := fmt.Sprintf("/v2/service_auth_tokens/%s", authToken.GUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerServiceAuthTokenRepository) Update(authToken models.ServiceAuthTokenFields) (apiErr error) { + body := fmt.Sprintf(`{"token":"%s"}`, authToken.Token) + path := fmt.Sprintf("/v2/service_auth_tokens/%s", authToken.GUID) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_bindings.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_bindings.go new file mode 100644 index 0000000..3abf3dd --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_bindings.go @@ -0,0 +1,79 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServiceBindingRepository + +type ServiceBindingRepository interface { + Create(instanceGUID string, appGUID string, paramsMap map[string]interface{}) error + Delete(instance models.ServiceInstance, appGUID string) (bool, error) + ListAllForService(instanceGUID string) ([]models.ServiceBindingFields, error) +} + +type CloudControllerServiceBindingRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServiceBindingRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceBindingRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerServiceBindingRepository) Create(instanceGUID, appGUID string, paramsMap map[string]interface{}) error { + path := "/v2/service_bindings" + request := models.ServiceBindingRequest{ + AppGUID: appGUID, + ServiceInstanceGUID: instanceGUID, + Params: paramsMap, + } + + jsonBytes, err := json.Marshal(request) + if err != nil { + return err + } + + return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, bytes.NewReader(jsonBytes)) +} + +func (repo CloudControllerServiceBindingRepository) Delete(instance models.ServiceInstance, appGUID string) (bool, error) { + var path string + for _, binding := range instance.ServiceBindings { + if binding.AppGUID == appGUID { + path = binding.URL + break + } + } + + if path == "" { + return false, nil + } + + return true, repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerServiceBindingRepository) ListAllForService(instanceGUID string) ([]models.ServiceBindingFields, error) { + serviceBindings := []models.ServiceBindingFields{} + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/service_instances/%s/service_bindings", instanceGUID), + resources.ServiceBindingResource{}, + func(resource interface{}) bool { + if serviceBindingResource, ok := resource.(resources.ServiceBindingResource); ok { + serviceBindings = append(serviceBindings, serviceBindingResource.ToFields()) + } + return true + }, + ) + return serviceBindings, err +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_brokers.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_brokers.go new file mode 100644 index 0000000..ffeaf32 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_brokers.go @@ -0,0 +1,116 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServiceBrokerRepository + +type ServiceBrokerRepository interface { + ListServiceBrokers(callback func(models.ServiceBroker) bool) error + FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error) + FindByGUID(guid string) (serviceBroker models.ServiceBroker, apiErr error) + Create(name, url, username, password, spaceGUID string) (apiErr error) + Update(serviceBroker models.ServiceBroker) (apiErr error) + Rename(guid, name string) (apiErr error) + Delete(guid string) (apiErr error) +} + +type CloudControllerServiceBrokerRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServiceBrokerRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceBrokerRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerServiceBrokerRepository) ListServiceBrokers(callback func(models.ServiceBroker) bool) error { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + "/v2/service_brokers", + resources.ServiceBrokerResource{}, + func(resource interface{}) bool { + callback(resource.(resources.ServiceBrokerResource).ToFields()) + return true + }) +} + +func (repo CloudControllerServiceBrokerRepository) FindByName(name string) (serviceBroker models.ServiceBroker, apiErr error) { + foundBroker := false + apiErr = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/service_brokers?q=%s", url.QueryEscape("name:"+name)), + resources.ServiceBrokerResource{}, + func(resource interface{}) bool { + serviceBroker = resource.(resources.ServiceBrokerResource).ToFields() + foundBroker = true + return false + }) + + if !foundBroker && (apiErr == nil) { + apiErr = errors.NewModelNotFoundError("Service Broker", name) + } + + return +} +func (repo CloudControllerServiceBrokerRepository) FindByGUID(guid string) (serviceBroker models.ServiceBroker, apiErr error) { + broker := new(resources.ServiceBrokerResource) + apiErr = repo.gateway.GetResource(repo.config.APIEndpoint()+fmt.Sprintf("/v2/service_brokers/%s", guid), broker) + serviceBroker = broker.ToFields() + return +} + +func (repo CloudControllerServiceBrokerRepository) Create(name, url, username, password, spaceGUID string) error { + path := "/v2/service_brokers" + args := struct { + Name string `json:"name"` + URL string `json:"broker_url"` + Username string `json:"auth_username"` + Password string `json:"auth_password"` + SpaceGUID string `json:"space_guid,omitempty"` + }{ + name, + url, + username, + password, + spaceGUID, + } + bs, err := json.Marshal(args) + if err != nil { + return err + } + return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, bytes.NewReader(bs)) +} + +func (repo CloudControllerServiceBrokerRepository) Update(serviceBroker models.ServiceBroker) (apiErr error) { + path := fmt.Sprintf("/v2/service_brokers/%s", serviceBroker.GUID) + body := fmt.Sprintf( + `{"broker_url":"%s","auth_username":"%s","auth_password":"%s"}`, + serviceBroker.URL, serviceBroker.Username, serviceBroker.Password, + ) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} + +func (repo CloudControllerServiceBrokerRepository) Rename(guid, name string) (apiErr error) { + path := fmt.Sprintf("/v2/service_brokers/%s", guid) + body := fmt.Sprintf(`{"name":"%s"}`, name) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} + +func (repo CloudControllerServiceBrokerRepository) Delete(guid string) (apiErr error) { + path := fmt.Sprintf("/v2/service_brokers/%s", guid) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_keys.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_keys.go new file mode 100644 index 0000000..98ca189 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_keys.go @@ -0,0 +1,108 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServiceKeyRepository + +type ServiceKeyRepository interface { + CreateServiceKey(serviceKeyGUID string, keyName string, params map[string]interface{}) error + ListServiceKeys(serviceKeyGUID string) ([]models.ServiceKey, error) + GetServiceKey(serviceKeyGUID string, keyName string) (models.ServiceKey, error) + DeleteServiceKey(serviceKeyGUID string) error +} + +type CloudControllerServiceKeyRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServiceKeyRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceKeyRepository) { + return CloudControllerServiceKeyRepository{ + config: config, + gateway: gateway, + } +} + +func (c CloudControllerServiceKeyRepository) CreateServiceKey(instanceGUID string, keyName string, params map[string]interface{}) error { + path := "/v2/service_keys" + + request := models.ServiceKeyRequest{ + Name: keyName, + ServiceInstanceGUID: instanceGUID, + Params: params, + } + jsonBytes, err := json.Marshal(request) + if err != nil { + return err + } + + err = c.gateway.CreateResource(c.config.APIEndpoint(), path, bytes.NewReader(jsonBytes)) + + if httpErr, ok := err.(errors.HTTPError); ok { + switch httpErr.ErrorCode() { + case errors.ServiceKeyNameTaken: + return errors.NewModelAlreadyExistsError("Service key", keyName) + case errors.UnbindableService: + return errors.NewUnbindableServiceError() + default: + return errors.New(httpErr.Error()) + } + } + + return nil +} + +func (c CloudControllerServiceKeyRepository) ListServiceKeys(instanceGUID string) ([]models.ServiceKey, error) { + path := fmt.Sprintf("/v2/service_instances/%s/service_keys", instanceGUID) + + return c.listServiceKeys(path) +} + +func (c CloudControllerServiceKeyRepository) GetServiceKey(instanceGUID string, keyName string) (models.ServiceKey, error) { + path := fmt.Sprintf("/v2/service_instances/%s/service_keys?q=%s", instanceGUID, url.QueryEscape("name:"+keyName)) + + serviceKeys, err := c.listServiceKeys(path) + if err != nil || len(serviceKeys) == 0 { + return models.ServiceKey{}, err + } + + return serviceKeys[0], nil +} + +func (c CloudControllerServiceKeyRepository) listServiceKeys(path string) ([]models.ServiceKey, error) { + serviceKeys := []models.ServiceKey{} + err := c.gateway.ListPaginatedResources( + c.config.APIEndpoint(), + path, + resources.ServiceKeyResource{}, + func(resource interface{}) bool { + serviceKey := resource.(resources.ServiceKeyResource).ToModel() + serviceKeys = append(serviceKeys, serviceKey) + return true + }) + + if err != nil { + if httpErr, ok := err.(errors.HTTPError); ok && httpErr.ErrorCode() == errors.NotAuthorized { + return []models.ServiceKey{}, errors.NewNotAuthorizedError() + } + return []models.ServiceKey{}, err + } + + return serviceKeys, nil +} + +func (c CloudControllerServiceKeyRepository) DeleteServiceKey(serviceKeyGUID string) error { + path := fmt.Sprintf("/v2/service_keys/%s", serviceKeyGUID) + return c.gateway.DeleteResource(c.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_plan.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_plan.go new file mode 100644 index 0000000..1cba204 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_plan.go @@ -0,0 +1,84 @@ +package api + +import ( + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServicePlanRepository + +type ServicePlanRepository interface { + Search(searchParameters map[string]string) ([]models.ServicePlanFields, error) + Update(models.ServicePlanFields, string, bool) error + ListPlansFromManyServices(serviceGUIDs []string) ([]models.ServicePlanFields, error) +} + +type CloudControllerServicePlanRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServicePlanRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerServicePlanRepository { + return CloudControllerServicePlanRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerServicePlanRepository) Update(servicePlan models.ServicePlanFields, serviceGUID string, public bool) error { + return repo.gateway.UpdateResource( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/service_plans/%s", servicePlan.GUID), + strings.NewReader(fmt.Sprintf(`{"public":%t}`, public)), + ) +} + +func (repo CloudControllerServicePlanRepository) ListPlansFromManyServices(serviceGUIDs []string) ([]models.ServicePlanFields, error) { + serviceGUIDsString := strings.Join(serviceGUIDs, ",") + plans := []models.ServicePlanFields{} + + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/service_plans?q=%s", url.QueryEscape("service_guid IN "+serviceGUIDsString)), + resources.ServicePlanResource{}, + func(resource interface{}) bool { + if plan, ok := resource.(resources.ServicePlanResource); ok { + plans = append(plans, plan.ToFields()) + } + return true + }) + return plans, err +} + +func (repo CloudControllerServicePlanRepository) Search(queryParams map[string]string) (plans []models.ServicePlanFields, err error) { + err = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + combineQueryParametersWithURI("/v2/service_plans", queryParams), + resources.ServicePlanResource{}, + func(resource interface{}) bool { + if sp, ok := resource.(resources.ServicePlanResource); ok { + plans = append(plans, sp.ToFields()) + } + return true + }) + return +} + +func combineQueryParametersWithURI(uri string, queryParams map[string]string) string { + if len(queryParams) == 0 { + return uri + } + + params := []string{} + for key, value := range queryParams { + params = append(params, url.QueryEscape(key+":"+value)) + } + + return uri + "?q=" + strings.Join(params, "%3B") +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_plan_visibility.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_plan_visibility.go new file mode 100644 index 0000000..f20e5ae --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_plan_visibility.go @@ -0,0 +1,72 @@ +package api + +import ( + "fmt" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServicePlanVisibilityRepository + +type ServicePlanVisibilityRepository interface { + Create(string, string) error + List() ([]models.ServicePlanVisibilityFields, error) + Delete(string) error + Search(map[string]string) ([]models.ServicePlanVisibilityFields, error) +} + +type CloudControllerServicePlanVisibilityRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServicePlanVisibilityRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerServicePlanVisibilityRepository { + return CloudControllerServicePlanVisibilityRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerServicePlanVisibilityRepository) Create(serviceGUID, orgGUID string) error { + url := "/v2/service_plan_visibilities" + data := fmt.Sprintf(`{"service_plan_guid":"%s", "organization_guid":"%s"}`, serviceGUID, orgGUID) + return repo.gateway.CreateResource(repo.config.APIEndpoint(), url, strings.NewReader(data)) +} + +func (repo CloudControllerServicePlanVisibilityRepository) List() (visibilities []models.ServicePlanVisibilityFields, err error) { + err = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + "/v2/service_plan_visibilities", + resources.ServicePlanVisibilityResource{}, + func(resource interface{}) bool { + if spv, ok := resource.(resources.ServicePlanVisibilityResource); ok { + visibilities = append(visibilities, spv.ToFields()) + } + return true + }) + return +} + +func (repo CloudControllerServicePlanVisibilityRepository) Delete(servicePlanGUID string) error { + path := fmt.Sprintf("/v2/service_plan_visibilities/%s", servicePlanGUID) + return repo.gateway.DeleteResourceSynchronously(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerServicePlanVisibilityRepository) Search(queryParams map[string]string) ([]models.ServicePlanVisibilityFields, error) { + var visibilities []models.ServicePlanVisibilityFields + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + combineQueryParametersWithURI("/v2/service_plan_visibilities", queryParams), + resources.ServicePlanVisibilityResource{}, + func(resource interface{}) bool { + if sp, ok := resource.(resources.ServicePlanVisibilityResource); ok { + visibilities = append(visibilities, sp.ToFields()) + } + return true + }) + return visibilities, err +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/service_summary.go b/vendor/code.cloudfoundry.org/cli/cf/api/service_summary.go new file mode 100644 index 0000000..88637ec --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/service_summary.go @@ -0,0 +1,120 @@ +package api + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +type ServiceInstancesSummaries struct { + Apps []ServiceInstanceSummaryApp + ServiceInstances []ServiceInstanceSummary `json:"services"` +} + +func (resource ServiceInstancesSummaries) ToModels() []models.ServiceInstance { + var instances []models.ServiceInstance + for _, instanceSummary := range resource.ServiceInstances { + applicationNames := resource.findApplicationNamesForInstance(instanceSummary.Name) + + planSummary := instanceSummary.ServicePlan + servicePlan := models.ServicePlanFields{} + servicePlan.Name = planSummary.Name + servicePlan.GUID = planSummary.GUID + + offeringSummary := planSummary.ServiceOffering + serviceOffering := models.ServiceOfferingFields{} + serviceOffering.Label = offeringSummary.Label + serviceOffering.Provider = offeringSummary.Provider + serviceOffering.Version = offeringSummary.Version + + instance := models.ServiceInstance{} + instance.Name = instanceSummary.Name + instance.LastOperation.Type = instanceSummary.LastOperation.Type + instance.LastOperation.State = instanceSummary.LastOperation.State + instance.LastOperation.Description = instanceSummary.LastOperation.Description + instance.ApplicationNames = applicationNames + instance.ServicePlan = servicePlan + instance.ServiceOffering = serviceOffering + + instances = append(instances, instance) + } + + return instances +} + +func (resource ServiceInstancesSummaries) findApplicationNamesForInstance(instanceName string) []string { + var applicationNames []string + for _, app := range resource.Apps { + for _, name := range app.ServiceNames { + if name == instanceName { + applicationNames = append(applicationNames, app.Name) + } + } + } + + return applicationNames +} + +type ServiceInstanceSummaryApp struct { + Name string + ServiceNames []string `json:"service_names"` +} + +type LastOperationSummary struct { + Type string `json:"type"` + State string `json:"state"` + Description string `json:"description"` +} + +type ServiceInstanceSummary struct { + Name string + LastOperation LastOperationSummary `json:"last_operation"` + ServicePlan ServicePlanSummary `json:"service_plan"` +} + +type ServicePlanSummary struct { + Name string + GUID string + ServiceOffering ServiceOfferingSummary `json:"service"` +} + +type ServiceOfferingSummary struct { + Label string + Provider string + Version string +} + +//go:generate counterfeiter . ServiceSummaryRepository + +type ServiceSummaryRepository interface { + GetSummariesInCurrentSpace() ([]models.ServiceInstance, error) +} + +type CloudControllerServiceSummaryRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServiceSummaryRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerServiceSummaryRepository { + return CloudControllerServiceSummaryRepository{ + config: config, + gateway: gateway, + } +} + +func (repo CloudControllerServiceSummaryRepository) GetSummariesInCurrentSpace() ([]models.ServiceInstance, error) { + var instances []models.ServiceInstance + path := fmt.Sprintf("%s/v2/spaces/%s/summary", repo.config.APIEndpoint(), repo.config.SpaceFields().GUID) + resource := new(ServiceInstancesSummaries) + + err := repo.gateway.GetResource(path, resource) + if err != nil { + return nil, err + } + + instances = resource.ToModels() + + return instances, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/services.go b/vendor/code.cloudfoundry.org/cli/cf/api/services.go new file mode 100644 index 0000000..207122a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/services.go @@ -0,0 +1,314 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . ServiceRepository + +type ServiceRepository interface { + PurgeServiceOffering(offering models.ServiceOffering) error + GetServiceOfferingByGUID(serviceGUID string) (offering models.ServiceOffering, apiErr error) + FindServiceOfferingsByLabel(name string) (offering models.ServiceOfferings, apiErr error) + FindServiceOfferingByLabelAndProvider(name, provider string) (offering models.ServiceOffering, apiErr error) + + FindServiceOfferingsForSpaceByLabel(spaceGUID, name string) (offering models.ServiceOfferings, apiErr error) + + GetAllServiceOfferings() (offerings models.ServiceOfferings, apiErr error) + GetServiceOfferingsForSpace(spaceGUID string) (offerings models.ServiceOfferings, apiErr error) + FindInstanceByName(name string) (instance models.ServiceInstance, apiErr error) + PurgeServiceInstance(instance models.ServiceInstance) error + CreateServiceInstance(name, planGUID string, params map[string]interface{}, tags []string) (apiErr error) + UpdateServiceInstance(instanceGUID, planGUID string, params map[string]interface{}, tags []string) (apiErr error) + RenameService(instance models.ServiceInstance, newName string) (apiErr error) + DeleteService(instance models.ServiceInstance) (apiErr error) + FindServicePlanByDescription(planDescription resources.ServicePlanDescription) (planGUID string, apiErr error) + ListServicesFromBroker(brokerGUID string) (services []models.ServiceOffering, err error) + ListServicesFromManyBrokers(brokerGUIDs []string) (services []models.ServiceOffering, err error) + GetServiceInstanceCountForServicePlan(v1PlanGUID string) (count int, apiErr error) + MigrateServicePlanFromV1ToV2(v1PlanGUID, v2PlanGUID string) (changedCount int, apiErr error) +} + +type CloudControllerServiceRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerServiceRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerServiceRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerServiceRepository) GetServiceOfferingByGUID(serviceGUID string) (models.ServiceOffering, error) { + offering := new(resources.ServiceOfferingResource) + apiErr := repo.gateway.GetResource(repo.config.APIEndpoint()+fmt.Sprintf("/v2/services/%s", serviceGUID), offering) + serviceOffering := offering.ToFields() + return models.ServiceOffering{ServiceOfferingFields: serviceOffering}, apiErr +} + +func (repo CloudControllerServiceRepository) GetServiceOfferingsForSpace(spaceGUID string) (models.ServiceOfferings, error) { + return repo.getServiceOfferings(fmt.Sprintf("/v2/spaces/%s/services", spaceGUID)) +} + +func (repo CloudControllerServiceRepository) FindServiceOfferingsForSpaceByLabel(spaceGUID, name string) (offerings models.ServiceOfferings, err error) { + offerings, err = repo.getServiceOfferings(fmt.Sprintf("/v2/spaces/%s/services?q=%s", spaceGUID, url.QueryEscape("label:"+name))) + + if httpErr, ok := err.(errors.HTTPError); ok && httpErr.ErrorCode() == errors.BadQueryParameter { + offerings, err = repo.findServiceOfferingsByPaginating(spaceGUID, name) + } + + if err == nil && len(offerings) == 0 { + err = errors.NewModelNotFoundError("Service offering", name) + } + + return +} + +func (repo CloudControllerServiceRepository) findServiceOfferingsByPaginating(spaceGUID, label string) (offerings models.ServiceOfferings, apiErr error) { + offerings, apiErr = repo.GetServiceOfferingsForSpace(spaceGUID) + if apiErr != nil { + return + } + + matchingOffering := models.ServiceOfferings{} + + for _, offering := range offerings { + if offering.Label == label { + matchingOffering = append(matchingOffering, offering) + } + } + return matchingOffering, nil +} + +func (repo CloudControllerServiceRepository) GetAllServiceOfferings() (models.ServiceOfferings, error) { + return repo.getServiceOfferings("/v2/services") +} + +func (repo CloudControllerServiceRepository) getServiceOfferings(path string) ([]models.ServiceOffering, error) { + var offerings []models.ServiceOffering + apiErr := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.ServiceOfferingResource{}, + func(resource interface{}) bool { + if so, ok := resource.(resources.ServiceOfferingResource); ok { + offerings = append(offerings, so.ToModel()) + } + return true + }) + + return offerings, apiErr +} + +func (repo CloudControllerServiceRepository) FindInstanceByName(name string) (instance models.ServiceInstance, apiErr error) { + path := fmt.Sprintf("%s/v2/spaces/%s/service_instances?return_user_provided_service_instances=true&q=%s&inline-relations-depth=1", repo.config.APIEndpoint(), repo.config.SpaceFields().GUID, url.QueryEscape("name:"+name)) + + responseJSON := new(resources.PaginatedServiceInstanceResources) + apiErr = repo.gateway.GetResource(path, responseJSON) + if apiErr != nil { + return + } + + if len(responseJSON.Resources) == 0 { + apiErr = errors.NewModelNotFoundError("Service instance", name) + return + } + + instanceResource := responseJSON.Resources[0] + instance = instanceResource.ToModel() + + if instanceResource.Entity.ServicePlan.Metadata.GUID != "" { + resource := &resources.ServiceOfferingResource{} + path = fmt.Sprintf("%s/v2/services/%s", repo.config.APIEndpoint(), instanceResource.Entity.ServicePlan.Entity.ServiceOfferingGUID) + apiErr = repo.gateway.GetResource(path, resource) + instance.ServiceOffering = resource.ToFields() + } + + return +} + +func (repo CloudControllerServiceRepository) CreateServiceInstance(name, planGUID string, params map[string]interface{}, tags []string) (err error) { + path := "/v2/service_instances?accepts_incomplete=true" + request := models.ServiceInstanceCreateRequest{ + Name: name, + PlanGUID: planGUID, + SpaceGUID: repo.config.SpaceFields().GUID, + Params: params, + Tags: tags, + } + + jsonBytes, err := json.Marshal(request) + if err != nil { + return err + } + + err = repo.gateway.CreateResource(repo.config.APIEndpoint(), path, bytes.NewReader(jsonBytes)) + + if httpErr, ok := err.(errors.HTTPError); ok && httpErr.ErrorCode() == errors.ServiceInstanceNameTaken { + serviceInstance, findInstanceErr := repo.FindInstanceByName(name) + + if findInstanceErr == nil && serviceInstance.ServicePlan.GUID == planGUID { + return errors.NewModelAlreadyExistsError("Service", name) + } + } + + return +} + +func (repo CloudControllerServiceRepository) UpdateServiceInstance(instanceGUID, planGUID string, params map[string]interface{}, tags []string) (err error) { + path := fmt.Sprintf("/v2/service_instances/%s?accepts_incomplete=true", instanceGUID) + request := models.ServiceInstanceUpdateRequest{ + PlanGUID: planGUID, + Params: params, + Tags: tags, + } + + jsonBytes, err := json.Marshal(request) + if err != nil { + return err + } + + err = repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, bytes.NewReader(jsonBytes)) + + return +} + +func (repo CloudControllerServiceRepository) RenameService(instance models.ServiceInstance, newName string) (apiErr error) { + body := fmt.Sprintf(`{"name":"%s"}`, newName) + path := fmt.Sprintf("/v2/service_instances/%s?accepts_incomplete=true", instance.GUID) + + if instance.IsUserProvided() { + path = fmt.Sprintf("/v2/user_provided_service_instances/%s", instance.GUID) + } + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} + +func (repo CloudControllerServiceRepository) DeleteService(instance models.ServiceInstance) (apiErr error) { + if len(instance.ServiceBindings) > 0 || len(instance.ServiceKeys) > 0 { + return errors.NewServiceAssociationError() + } + path := fmt.Sprintf("/v2/service_instances/%s?%s", instance.GUID, "accepts_incomplete=true") + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerServiceRepository) PurgeServiceOffering(offering models.ServiceOffering) error { + url := fmt.Sprintf("/v2/services/%s?purge=true", offering.GUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), url) +} + +func (repo CloudControllerServiceRepository) PurgeServiceInstance(instance models.ServiceInstance) error { + url := fmt.Sprintf("/v2/service_instances/%s?purge=true", instance.GUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), url) +} + +func (repo CloudControllerServiceRepository) FindServiceOfferingsByLabel(label string) (models.ServiceOfferings, error) { + path := fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:"+label)) + offerings, apiErr := repo.getServiceOfferings(path) + + if apiErr != nil { + return models.ServiceOfferings{}, apiErr + } else if len(offerings) == 0 { + apiErr = errors.NewModelNotFoundError("Service offering", label) + return models.ServiceOfferings{}, apiErr + } + + return offerings, apiErr +} + +func (repo CloudControllerServiceRepository) FindServiceOfferingByLabelAndProvider(label, provider string) (models.ServiceOffering, error) { + path := fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("label:"+label+";provider:"+provider)) + offerings, apiErr := repo.getServiceOfferings(path) + + if apiErr != nil { + return models.ServiceOffering{}, apiErr + } else if len(offerings) == 0 { + apiErr = errors.NewModelNotFoundError("Service offering", label+" "+provider) + return models.ServiceOffering{}, apiErr + } + + return offerings[0], apiErr +} + +func (repo CloudControllerServiceRepository) FindServicePlanByDescription(planDescription resources.ServicePlanDescription) (string, error) { + path := fmt.Sprintf("/v2/services?inline-relations-depth=1&q=%s", + url.QueryEscape("label:"+planDescription.ServiceLabel+";provider:"+planDescription.ServiceProvider)) + + offerings, err := repo.getServiceOfferings(path) + if err != nil { + return "", err + } + + for _, serviceOfferingResource := range offerings { + for _, servicePlanResource := range serviceOfferingResource.Plans { + if servicePlanResource.Name == planDescription.ServicePlanName { + return servicePlanResource.GUID, nil + } + } + } + + return "", errors.NewModelNotFoundError("Plan", planDescription.String()) +} + +func (repo CloudControllerServiceRepository) ListServicesFromManyBrokers(brokerGUIDs []string) ([]models.ServiceOffering, error) { + brokerGUIDsString := strings.Join(brokerGUIDs, ",") + services := []models.ServiceOffering{} + + err := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("service_broker_guid IN "+brokerGUIDsString)), + resources.ServiceOfferingResource{}, + func(resource interface{}) bool { + if service, ok := resource.(resources.ServiceOfferingResource); ok { + services = append(services, service.ToModel()) + } + return true + }) + return services, err +} + +func (repo CloudControllerServiceRepository) ListServicesFromBroker(brokerGUID string) (offerings []models.ServiceOffering, err error) { + err = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/services?q=%s", url.QueryEscape("service_broker_guid:"+brokerGUID)), + resources.ServiceOfferingResource{}, + func(resource interface{}) bool { + if offering, ok := resource.(resources.ServiceOfferingResource); ok { + offerings = append(offerings, offering.ToModel()) + } + return true + }) + return +} + +func (repo CloudControllerServiceRepository) MigrateServicePlanFromV1ToV2(v1PlanGUID, v2PlanGUID string) (changedCount int, apiErr error) { + path := fmt.Sprintf("/v2/service_plans/%s/service_instances", v1PlanGUID) + body := strings.NewReader(fmt.Sprintf(`{"service_plan_guid":"%s"}`, v2PlanGUID)) + response := new(resources.ServiceMigrateV1ToV2Response) + + apiErr = repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, body, response) + if apiErr != nil { + return + } + + changedCount = response.ChangedCount + return +} + +func (repo CloudControllerServiceRepository) GetServiceInstanceCountForServicePlan(v1PlanGUID string) (count int, apiErr error) { + path := fmt.Sprintf("%s/v2/service_plans/%s/service_instances?results-per-page=1", repo.config.APIEndpoint(), v1PlanGUID) + response := new(resources.PaginatedServiceInstanceResources) + apiErr = repo.gateway.GetResource(path, response) + count = response.TotalResults + return +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/spacequotas/space_quotas.go b/vendor/code.cloudfoundry.org/cli/cf/api/spacequotas/space_quotas.go new file mode 100644 index 0000000..727e8d7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/spacequotas/space_quotas.go @@ -0,0 +1,125 @@ +package spacequotas + +import ( + "fmt" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . SpaceQuotaRepository + +type SpaceQuotaRepository interface { + FindByName(name string) (quota models.SpaceQuota, apiErr error) + FindByOrg(guid string) (quota []models.SpaceQuota, apiErr error) + FindByGUID(guid string) (quota models.SpaceQuota, apiErr error) + FindByNameAndOrgGUID(spaceQuotaName string, orgGUID string) (quota models.SpaceQuota, apiErr error) + + AssociateSpaceWithQuota(spaceGUID string, quotaGUID string) error + UnassignQuotaFromSpace(spaceGUID string, quotaGUID string) error + + // CRUD ahoy + Create(quota models.SpaceQuota) error + Update(quota models.SpaceQuota) error + Delete(quotaGUID string) error +} + +type CloudControllerSpaceQuotaRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerSpaceQuotaRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerSpaceQuotaRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerSpaceQuotaRepository) findAllWithPath(path string) ([]models.SpaceQuota, error) { + var quotas []models.SpaceQuota + apiErr := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.SpaceQuotaResource{}, + func(resource interface{}) bool { + if qr, ok := resource.(resources.SpaceQuotaResource); ok { + quotas = append(quotas, qr.ToModel()) + } + return true + }) + return quotas, apiErr +} + +func (repo CloudControllerSpaceQuotaRepository) FindByName(name string) (quota models.SpaceQuota, apiErr error) { + return repo.FindByNameAndOrgGUID(name, repo.config.OrganizationFields().GUID) +} + +func (repo CloudControllerSpaceQuotaRepository) FindByNameAndOrgGUID(spaceQuotaName string, orgGUID string) (models.SpaceQuota, error) { + quotas, apiErr := repo.FindByOrg(orgGUID) + if apiErr != nil { + return models.SpaceQuota{}, apiErr + } + + for _, quota := range quotas { + if quota.Name == spaceQuotaName { + return quota, nil + } + } + + apiErr = errors.NewModelNotFoundError("Space Quota", spaceQuotaName) + return models.SpaceQuota{}, apiErr +} + +func (repo CloudControllerSpaceQuotaRepository) FindByOrg(guid string) ([]models.SpaceQuota, error) { + path := fmt.Sprintf("/v2/organizations/%s/space_quota_definitions", guid) + quotas, apiErr := repo.findAllWithPath(path) + if apiErr != nil { + return nil, apiErr + } + return quotas, nil +} + +func (repo CloudControllerSpaceQuotaRepository) FindByGUID(guid string) (quota models.SpaceQuota, apiErr error) { + quotas, apiErr := repo.FindByOrg(repo.config.OrganizationFields().GUID) + if apiErr != nil { + return + } + + for _, quota := range quotas { + if quota.GUID == guid { + return quota, nil + } + } + + apiErr = errors.NewModelNotFoundError("Space Quota", guid) + return models.SpaceQuota{}, apiErr +} + +func (repo CloudControllerSpaceQuotaRepository) Create(quota models.SpaceQuota) error { + path := "/v2/space_quota_definitions" + return repo.gateway.CreateResourceFromStruct(repo.config.APIEndpoint(), path, quota) +} + +func (repo CloudControllerSpaceQuotaRepository) Update(quota models.SpaceQuota) error { + path := fmt.Sprintf("/v2/space_quota_definitions/%s", quota.GUID) + return repo.gateway.UpdateResourceFromStruct(repo.config.APIEndpoint(), path, quota) +} + +func (repo CloudControllerSpaceQuotaRepository) AssociateSpaceWithQuota(spaceGUID string, quotaGUID string) error { + path := fmt.Sprintf("/v2/space_quota_definitions/%s/spaces/%s", quotaGUID, spaceGUID) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader("")) +} + +func (repo CloudControllerSpaceQuotaRepository) UnassignQuotaFromSpace(spaceGUID string, quotaGUID string) error { + path := fmt.Sprintf("/v2/space_quota_definitions/%s/spaces/%s", quotaGUID, spaceGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} + +func (repo CloudControllerSpaceQuotaRepository) Delete(quotaGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/space_quota_definitions/%s", quotaGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/spaces/spaces.go b/vendor/code.cloudfoundry.org/cli/cf/api/spaces/spaces.go new file mode 100644 index 0000000..0946195 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/spaces/spaces.go @@ -0,0 +1,121 @@ +package spaces + +import ( + "encoding/json" + "fmt" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . SpaceRepository + +type SpaceRepository interface { + ListSpaces(func(models.Space) bool) error + ListSpacesFromOrg(orgGUID string, spaceFunc func(models.Space) bool) error + FindByName(name string) (space models.Space, apiErr error) + FindByNameInOrg(name, orgGUID string) (space models.Space, apiErr error) + Create(name string, orgGUID string, spaceQuotaGUID string) (space models.Space, apiErr error) + Rename(spaceGUID, newName string) (apiErr error) + SetAllowSSH(spaceGUID string, allow bool) (apiErr error) + Delete(spaceGUID string) (apiErr error) +} + +type CloudControllerSpaceRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerSpaceRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerSpaceRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerSpaceRepository) ListSpaces(callback func(models.Space) bool) error { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/organizations/%s/spaces?order-by=name&inline-relations-depth=1", repo.config.OrganizationFields().GUID), + resources.SpaceResource{}, + func(resource interface{}) bool { + return callback(resource.(resources.SpaceResource).ToModel()) + }) +} + +func (repo CloudControllerSpaceRepository) ListSpacesFromOrg(orgGUID string, callback func(models.Space) bool) error { + return repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/organizations/%s/spaces?order-by=name&inline-relations-depth=1", orgGUID), + resources.SpaceResource{}, + func(resource interface{}) bool { + return callback(resource.(resources.SpaceResource).ToModel()) + }) +} + +func (repo CloudControllerSpaceRepository) FindByName(name string) (space models.Space, apiErr error) { + return repo.FindByNameInOrg(name, repo.config.OrganizationFields().GUID) +} + +func (repo CloudControllerSpaceRepository) FindByNameInOrg(name, orgGUID string) (space models.Space, apiErr error) { + foundSpace := false + apiErr = repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + fmt.Sprintf("/v2/organizations/%s/spaces?q=%s&inline-relations-depth=1", orgGUID, url.QueryEscape("name:"+strings.ToLower(name))), + resources.SpaceResource{}, + func(resource interface{}) bool { + space = resource.(resources.SpaceResource).ToModel() + foundSpace = true + return false + }) + + if !foundSpace { + apiErr = errors.NewModelNotFoundError("Space", name) + } + + return +} + +func (repo CloudControllerSpaceRepository) Create(name, orgGUID, spaceQuotaGUID string) (models.Space, error) { + var space models.Space + path := "/v2/spaces?inline-relations-depth=1" + + bodyMap := map[string]string{"name": name, "organization_guid": orgGUID} + if spaceQuotaGUID != "" { + bodyMap["space_quota_definition_guid"] = spaceQuotaGUID + } + + body, err := json.Marshal(bodyMap) + if err != nil { + return models.Space{}, err + } + + resource := new(resources.SpaceResource) + err = repo.gateway.CreateResource(repo.config.APIEndpoint(), path, strings.NewReader(string(body)), resource) + if err != nil { + return models.Space{}, err + } + space = resource.ToModel() + return space, nil +} + +func (repo CloudControllerSpaceRepository) Rename(spaceGUID, newName string) (apiErr error) { + path := fmt.Sprintf("/v2/spaces/%s", spaceGUID) + body := fmt.Sprintf(`{"name":"%s"}`, newName) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} + +func (repo CloudControllerSpaceRepository) SetAllowSSH(spaceGUID string, allow bool) (apiErr error) { + path := fmt.Sprintf("/v2/spaces/%s", spaceGUID) + body := fmt.Sprintf(`{"allow_ssh":%t}`, allow) + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, strings.NewReader(body)) +} + +func (repo CloudControllerSpaceRepository) Delete(spaceGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/spaces/%s?recursive=true", spaceGUID) + return repo.gateway.DeleteResource(repo.config.APIEndpoint(), path) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/stacks/stacks.go b/vendor/code.cloudfoundry.org/cli/cf/api/stacks/stacks.go new file mode 100644 index 0000000..0710f51 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/stacks/stacks.go @@ -0,0 +1,85 @@ +package stacks + +import ( + "fmt" + "net/url" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +//go:generate counterfeiter . StackRepository + +type StackRepository interface { + FindByName(name string) (stack models.Stack, apiErr error) + FindByGUID(guid string) (models.Stack, error) + FindAll() (stacks []models.Stack, apiErr error) +} + +type CloudControllerStackRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCloudControllerStackRepository(config coreconfig.Reader, gateway net.Gateway) (repo CloudControllerStackRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CloudControllerStackRepository) FindByGUID(guid string) (models.Stack, error) { + stackRequest := resources.StackResource{} + path := fmt.Sprintf("%s/v2/stacks/%s", repo.config.APIEndpoint(), guid) + err := repo.gateway.GetResource(path, &stackRequest) + if err != nil { + if errNotFound, ok := err.(*errors.HTTPNotFoundError); ok { + return models.Stack{}, errNotFound + } + + return models.Stack{}, fmt.Errorf(T("Error retrieving stacks: {{.Error}}", map[string]interface{}{ + "Error": err.Error(), + })) + } + + return *stackRequest.ToFields(), nil +} + +func (repo CloudControllerStackRepository) FindByName(name string) (stack models.Stack, apiErr error) { + path := fmt.Sprintf("/v2/stacks?q=%s", url.QueryEscape("name:"+name)) + stacks, apiErr := repo.findAllWithPath(path) + if apiErr != nil { + return + } + + if len(stacks) == 0 { + apiErr = errors.NewModelNotFoundError("Stack", name) + return + } + + stack = stacks[0] + return +} + +func (repo CloudControllerStackRepository) FindAll() (stacks []models.Stack, apiErr error) { + return repo.findAllWithPath("/v2/stacks") +} + +func (repo CloudControllerStackRepository) findAllWithPath(path string) ([]models.Stack, error) { + var stacks []models.Stack + apiErr := repo.gateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.StackResource{}, + func(resource interface{}) bool { + if sr, ok := resource.(resources.StackResource); ok { + stacks = append(stacks, *sr.ToFields()) + } + return true + }) + return stacks, apiErr +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/user_provided_service_instances.go b/vendor/code.cloudfoundry.org/cli/cf/api/user_provided_service_instances.go new file mode 100644 index 0000000..190aa21 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/user_provided_service_instances.go @@ -0,0 +1,79 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +//go:generate counterfeiter . UserProvidedServiceInstanceRepository + +type UserProvidedServiceInstanceRepository interface { + Create(name, drainURL string, routeServiceURL string, params map[string]interface{}) (apiErr error) + Update(serviceInstanceFields models.ServiceInstanceFields) (apiErr error) + GetSummaries() (models.UserProvidedServiceSummary, error) +} + +type CCUserProvidedServiceInstanceRepository struct { + config coreconfig.Reader + gateway net.Gateway +} + +func NewCCUserProvidedServiceInstanceRepository(config coreconfig.Reader, gateway net.Gateway) (repo CCUserProvidedServiceInstanceRepository) { + repo.config = config + repo.gateway = gateway + return +} + +func (repo CCUserProvidedServiceInstanceRepository) Create(name, drainURL string, routeServiceURL string, params map[string]interface{}) (apiErr error) { + path := "/v2/user_provided_service_instances" + + jsonBytes, err := json.Marshal(models.UserProvidedService{ + Name: name, + Credentials: params, + SpaceGUID: repo.config.SpaceFields().GUID, + SysLogDrainURL: drainURL, + RouteServiceURL: routeServiceURL, + }) + + if err != nil { + apiErr = fmt.Errorf("%s: %s", "Error parsing response", err.Error()) + return + } + + return repo.gateway.CreateResource(repo.config.APIEndpoint(), path, bytes.NewReader(jsonBytes)) +} + +func (repo CCUserProvidedServiceInstanceRepository) Update(serviceInstanceFields models.ServiceInstanceFields) (apiErr error) { + path := fmt.Sprintf("/v2/user_provided_service_instances/%s", serviceInstanceFields.GUID) + + reqBody := models.UserProvidedService{ + Credentials: serviceInstanceFields.Params, + SysLogDrainURL: serviceInstanceFields.SysLogDrainURL, + RouteServiceURL: serviceInstanceFields.RouteServiceURL, + } + jsonBytes, err := json.Marshal(reqBody) + if err != nil { + apiErr = fmt.Errorf("%s: %s", "Error parsing response", err.Error()) + return + } + + return repo.gateway.UpdateResource(repo.config.APIEndpoint(), path, bytes.NewReader(jsonBytes)) +} + +func (repo CCUserProvidedServiceInstanceRepository) GetSummaries() (models.UserProvidedServiceSummary, error) { + path := fmt.Sprintf("%s/v2/user_provided_service_instances", repo.config.APIEndpoint()) + + model := models.UserProvidedServiceSummary{} + + apiErr := repo.gateway.GetResource(path, &model) + if apiErr != nil { + return models.UserProvidedServiceSummary{}, apiErr + } + + return model, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api/users.go b/vendor/code.cloudfoundry.org/cli/cf/api/users.go new file mode 100644 index 0000000..8f1bae3 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api/users.go @@ -0,0 +1,416 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + neturl "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/api/resources" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/net" +) + +var orgRoleToPathMap = map[models.Role]string{ + models.RoleOrgUser: "users", + models.RoleOrgManager: "managers", + models.RoleBillingManager: "billing_managers", + models.RoleOrgAuditor: "auditors", +} + +var spaceRoleToPathMap = map[models.Role]string{ + models.RoleSpaceManager: "managers", + models.RoleSpaceDeveloper: "developers", + models.RoleSpaceAuditor: "auditors", +} + +type apiErrResponse struct { + Code int `json:"code,omitempty"` + ErrorCode string `json:"error_code,omitempty"` + Description string `json:"description,omitempty"` +} + +//go:generate counterfeiter . UserRepository + +type UserRepository interface { + FindByUsername(username string) (user models.UserFields, apiErr error) + FindAllByUsername(username string) (users []models.UserFields, apiErr error) + ListUsersInOrgForRole(orgGUID string, role models.Role) ([]models.UserFields, error) + ListUsersInOrgForRoleWithNoUAA(orgGUID string, role models.Role) ([]models.UserFields, error) + ListUsersInSpaceForRoleWithNoUAA(spaceGUID string, role models.Role) ([]models.UserFields, error) + Create(username, password string) (apiErr error) + Delete(userGUID string) (apiErr error) + SetOrgRoleByGUID(userGUID, orgGUID string, role models.Role) (apiErr error) + SetOrgRoleByUsername(username, orgGUID string, role models.Role) (apiErr error) + UnsetOrgRoleByGUID(userGUID, orgGUID string, role models.Role) (apiErr error) + UnsetOrgRoleByUsername(username, orgGUID string, role models.Role) (apiErr error) + SetSpaceRoleByGUID(userGUID, spaceGUID, orgGUID string, role models.Role) (apiErr error) + SetSpaceRoleByUsername(username, spaceGUID, orgGUID string, role models.Role) (apiErr error) + UnsetSpaceRoleByGUID(userGUID, spaceGUID string, role models.Role) (apiErr error) + UnsetSpaceRoleByUsername(userGUID, spaceGUID string, role models.Role) (apiErr error) +} + +type CloudControllerUserRepository struct { + config coreconfig.Reader + uaaGateway net.Gateway + ccGateway net.Gateway +} + +func NewCloudControllerUserRepository(config coreconfig.Reader, uaaGateway net.Gateway, ccGateway net.Gateway) (repo CloudControllerUserRepository) { + repo.config = config + repo.uaaGateway = uaaGateway + repo.ccGateway = ccGateway + return +} + +func (repo CloudControllerUserRepository) FindByUsername(username string) (user models.UserFields, apiErr error) { + users, apiErr := repo.FindAllByUsername(username) + if apiErr != nil { + return user, apiErr + } + user = users[0] + + return user, nil +} + +func (repo CloudControllerUserRepository) FindAllByUsername(username string) (users []models.UserFields, apiErr error) { + uaaEndpoint, apiErr := repo.getAuthEndpoint() + if apiErr != nil { + return users, apiErr + } + + usernameFilter := neturl.QueryEscape(fmt.Sprintf(`userName Eq "%s"`, username)) + path := fmt.Sprintf("%s/Users?attributes=id,userName&filter=%s", uaaEndpoint, usernameFilter) + users, apiErr = repo.updateOrFindUsersWithUAAPath([]models.UserFields{}, path) + + if apiErr != nil { + errType, ok := apiErr.(errors.HTTPError) + if ok { + if errType.StatusCode() == 403 { + return users, errors.NewAccessDeniedError() + } + } + return users, apiErr + } else if len(users) == 0 { + return users, errors.NewModelNotFoundError("User", username) + } + + return users, apiErr +} + +func (repo CloudControllerUserRepository) ListUsersInOrgForRole(orgGUID string, roleName models.Role) (users []models.UserFields, apiErr error) { + return repo.listUsersWithPath(fmt.Sprintf("/v2/organizations/%s/%s", orgGUID, orgRoleToPathMap[roleName])) +} + +func (repo CloudControllerUserRepository) ListUsersInOrgForRoleWithNoUAA(orgGUID string, roleName models.Role) (users []models.UserFields, apiErr error) { + return repo.listUsersWithPathWithNoUAA(fmt.Sprintf("/v2/organizations/%s/%s", orgGUID, orgRoleToPathMap[roleName])) +} + +func (repo CloudControllerUserRepository) ListUsersInSpaceForRoleWithNoUAA(spaceGUID string, roleName models.Role) (users []models.UserFields, apiErr error) { + return repo.listUsersWithPathWithNoUAA(fmt.Sprintf("/v2/spaces/%s/%s", spaceGUID, spaceRoleToPathMap[roleName])) +} + +func (repo CloudControllerUserRepository) listUsersWithPathWithNoUAA(path string) (users []models.UserFields, apiErr error) { + apiErr = repo.ccGateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.UserResource{}, + func(resource interface{}) bool { + user := resource.(resources.UserResource).ToFields() + users = append(users, user) + return true + }) + if apiErr != nil { + return + } + + return +} + +func (repo CloudControllerUserRepository) listUsersWithPath(path string) (users []models.UserFields, apiErr error) { + guidFilters := []string{} + + apiErr = repo.ccGateway.ListPaginatedResources( + repo.config.APIEndpoint(), + path, + resources.UserResource{}, + func(resource interface{}) bool { + user := resource.(resources.UserResource).ToFields() + users = append(users, user) + guidFilters = append(guidFilters, fmt.Sprintf(`ID eq "%s"`, user.GUID)) + return true + }) + if apiErr != nil { + return + } + + if len(guidFilters) == 0 { + return + } + + uaaEndpoint, apiErr := repo.getAuthEndpoint() + if apiErr != nil { + return + } + + filter := strings.Join(guidFilters, " or ") + usersURL := fmt.Sprintf("%s/Users?attributes=id,userName&filter=%s", uaaEndpoint, neturl.QueryEscape(filter)) + users, apiErr = repo.updateOrFindUsersWithUAAPath(users, usersURL) + return +} + +func (repo CloudControllerUserRepository) updateOrFindUsersWithUAAPath(ccUsers []models.UserFields, path string) (updatedUsers []models.UserFields, apiErr error) { + uaaResponse := new(resources.UAAUserResources) + apiErr = repo.uaaGateway.GetResource(path, uaaResponse) + if apiErr != nil { + return + } + + for _, uaaResource := range uaaResponse.Resources { + var ccUserFields models.UserFields + + for _, u := range ccUsers { + if u.GUID == uaaResource.ID { + ccUserFields = u + break + } + } + + updatedUsers = append(updatedUsers, models.UserFields{ + GUID: uaaResource.ID, + Username: uaaResource.Username, + IsAdmin: ccUserFields.IsAdmin, + }) + } + return +} + +func (repo CloudControllerUserRepository) Create(username, password string) (err error) { + uaaEndpoint, err := repo.getAuthEndpoint() + if err != nil { + return + } + + path := "/Users" + body, err := json.Marshal(resources.NewUAAUserResource(username, password)) + + if err != nil { + return + } + + createUserResponse := &resources.UAAUserFields{} + err = repo.uaaGateway.CreateResource(uaaEndpoint, path, bytes.NewReader(body), createUserResponse) + switch httpErr := err.(type) { + case nil: + case errors.HTTPError: + if httpErr.StatusCode() == http.StatusConflict { + err = errors.NewModelAlreadyExistsError("user", username) + return + } + return + default: + return + } + + path = "/v2/users" + body, err = json.Marshal(resources.Metadata{ + GUID: createUserResponse.ID, + }) + + if err != nil { + return + } + + return repo.ccGateway.CreateResource(repo.config.APIEndpoint(), path, bytes.NewReader(body)) +} + +func (repo CloudControllerUserRepository) Delete(userGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/users/%s", userGUID) + + apiErr = repo.ccGateway.DeleteResource(repo.config.APIEndpoint(), path) + + if httpErr, ok := apiErr.(errors.HTTPError); ok && httpErr.ErrorCode() != errors.UserNotFound { + return + } + uaaEndpoint, apiErr := repo.getAuthEndpoint() + if apiErr != nil { + return + } + + path = fmt.Sprintf("/Users/%s", userGUID) + return repo.uaaGateway.DeleteResource(uaaEndpoint, path) +} + +func (repo CloudControllerUserRepository) SetOrgRoleByGUID(userGUID string, orgGUID string, role models.Role) (err error) { + path, err := userGUIDPath(repo.config.APIEndpoint(), userGUID, orgGUID, role) + if err != nil { + return + } + err = repo.callAPI("PUT", path, nil) + if err != nil { + return + } + return repo.assocUserWithOrgByUserGUID(userGUID, orgGUID) +} + +func (repo CloudControllerUserRepository) UnsetOrgRoleByGUID(userGUID, orgGUID string, role models.Role) (err error) { + path, err := userGUIDPath(repo.config.APIEndpoint(), userGUID, orgGUID, role) + if err != nil { + return + } + return repo.callAPI("DELETE", path, nil) +} + +func (repo CloudControllerUserRepository) UnsetOrgRoleByUsername(username, orgGUID string, role models.Role) error { + rolePath, err := rolePath(role) + if err != nil { + return err + } + + path := fmt.Sprintf("%s/v2/organizations/%s/%s", repo.config.APIEndpoint(), orgGUID, rolePath) + + return repo.callAPI("DELETE", path, usernamePayload(username)) +} + +func (repo CloudControllerUserRepository) UnsetSpaceRoleByUsername(username, spaceGUID string, role models.Role) error { + rolePath := spaceRoleToPathMap[role] + path := fmt.Sprintf("%s/v2/spaces/%s/%s", repo.config.APIEndpoint(), spaceGUID, rolePath) + + return repo.callAPI("DELETE", path, usernamePayload(username)) +} + +func (repo CloudControllerUserRepository) SetOrgRoleByUsername(username string, orgGUID string, role models.Role) error { + rolePath, err := rolePath(role) + if err != nil { + return err + } + + path := fmt.Sprintf("%s/v2/organizations/%s/%s", repo.config.APIEndpoint(), orgGUID, rolePath) + err = repo.callAPI("PUT", path, usernamePayload(username)) + if err != nil { + return err + } + return repo.assocUserWithOrgByUsername(username, orgGUID, nil) +} + +func (repo CloudControllerUserRepository) callAPI(verb, path string, body io.ReadSeeker) (err error) { + request, err := repo.ccGateway.NewRequest(verb, path, repo.config.AccessToken(), body) + if err != nil { + return + } + _, err = repo.ccGateway.PerformRequest(request) + if err != nil { + return + } + return +} + +func userGUIDPath(apiEndpoint, userGUID, orgGUID string, role models.Role) (string, error) { + rolePath, err := rolePath(role) + if err != nil { + return "", err + } + + return fmt.Sprintf("%s/v2/organizations/%s/%s/%s", apiEndpoint, orgGUID, rolePath, userGUID), nil +} + +func (repo CloudControllerUserRepository) SetSpaceRoleByGUID(userGUID, spaceGUID, orgGUID string, role models.Role) error { + rolePath, found := spaceRoleToPathMap[role] + if !found { + return fmt.Errorf(T("Invalid Role {{.Role}}", map[string]interface{}{"Role": role})) + } + + err := repo.assocUserWithOrgByUserGUID(userGUID, orgGUID) + if err != nil { + return err + } + + path := fmt.Sprintf("/v2/spaces/%s/%s/%s", spaceGUID, rolePath, userGUID) + + return repo.ccGateway.UpdateResource(repo.config.APIEndpoint(), path, nil) +} + +func (repo CloudControllerUserRepository) SetSpaceRoleByUsername(username, spaceGUID, orgGUID string, role models.Role) (apiErr error) { + rolePath, apiErr := repo.checkSpaceRole(spaceGUID, role) + if apiErr != nil { + return + } + + setOrgRoleErr := apiErrResponse{} + apiErr = repo.assocUserWithOrgByUsername(username, orgGUID, &setOrgRoleErr) + if setOrgRoleErr.Code == 10003 { + //operator lacking the privilege to set org role + //user might already be in org, so ignoring error and attempt to set space role + } else if apiErr != nil { + return + } + + setSpaceRoleErr := apiErrResponse{} + apiErr = repo.ccGateway.UpdateResourceSync(repo.config.APIEndpoint(), rolePath, usernamePayload(username), &setSpaceRoleErr) + if setSpaceRoleErr.Code == 1002 { + return errors.New(T("Server error, error code: 1002, message: cannot set space role because user is not part of the org")) + } + + return apiErr +} + +func (repo CloudControllerUserRepository) UnsetSpaceRoleByGUID(userGUID, spaceGUID string, role models.Role) error { + rolePath, found := spaceRoleToPathMap[role] + if !found { + return fmt.Errorf(T("Invalid Role {{.Role}}", map[string]interface{}{"Role": role})) + } + + return repo.ccGateway.DeleteResource(repo.config.APIEndpoint(), rolePath) +} + +func (repo CloudControllerUserRepository) checkSpaceRole(spaceGUID string, role models.Role) (string, error) { + var apiErr error + + rolePath, found := spaceRoleToPathMap[role] + + if !found { + apiErr = fmt.Errorf(T("Invalid Role {{.Role}}", + map[string]interface{}{"Role": role})) + } + + apiPath := fmt.Sprintf("/v2/spaces/%s/%s", spaceGUID, rolePath) + return apiPath, apiErr +} + +func (repo CloudControllerUserRepository) assocUserWithOrgByUsername(username, orgGUID string, resource interface{}) (apiErr error) { + path := fmt.Sprintf("/v2/organizations/%s/users", orgGUID) + return repo.ccGateway.UpdateResourceSync(repo.config.APIEndpoint(), path, usernamePayload(username), resource) +} + +func (repo CloudControllerUserRepository) assocUserWithOrgByUserGUID(userGUID, orgGUID string) (apiErr error) { + path := fmt.Sprintf("/v2/organizations/%s/users/%s", orgGUID, userGUID) + return repo.ccGateway.UpdateResource(repo.config.APIEndpoint(), path, nil) +} + +func (repo CloudControllerUserRepository) getAuthEndpoint() (string, error) { + uaaEndpoint := repo.config.UaaEndpoint() + if uaaEndpoint == "" { + return "", errors.New(T("UAA endpoint missing from config file")) + } + return uaaEndpoint, nil +} + +func rolePath(role models.Role) (string, error) { + path, found := orgRoleToPathMap[role] + + if !found { + return "", fmt.Errorf(T("Invalid Role {{.Role}}", + map[string]interface{}{"Role": role})) + } + return path, nil +} + +func usernamePayload(username string) *strings.Reader { + return strings.NewReader(`{"username": "` + username + `"}`) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/api_versions.go b/vendor/code.cloudfoundry.org/cli/cf/api_versions.go new file mode 100644 index 0000000..8a90ca8 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/api_versions.go @@ -0,0 +1,18 @@ +package cf + +import "github.com/blang/semver" + +var ( + ReservedRoutePortsMinimumAPIVersion, _ = semver.Make("2.55.0") // #112023051 + TCPRoutingMinimumAPIVersion, _ = semver.Make("2.53.0") // #111475922 + MultipleAppPortsMinimumAPIVersion, _ = semver.Make("2.51.0") + SpaceAppInstanceLimitMinimumAPIVersion, _ = semver.Make("2.40.0") + SetRolesByUsernameMinimumAPIVersion, _ = semver.Make("2.37.0") + RoutePathMinimumAPIVersion, _ = semver.Make("2.36.0") + OrgAppInstanceLimitMinimumAPIVersion, _ = semver.Make("2.33.0") + ListUsersInOrgOrSpaceWithoutUAAMinimumAPIVersion, _ = semver.Make("2.21.0") + UpdateServicePlanMinimumAPIVersion, _ = semver.Make("2.16.0") + + ServiceAuthTokenMaximumAPIVersion, _ = semver.Make("2.46.0") + SpaceScopedMaximumAPIVersion, _ = semver.Make("2.47.0") +) diff --git a/vendor/code.cloudfoundry.org/cli/cf/app_constants.go b/vendor/code.cloudfoundry.org/cli/cf/app_constants.go new file mode 100644 index 0000000..99aefb1 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/app_constants.go @@ -0,0 +1,5 @@ +package cf + +var ( + Name = "cf" +) diff --git a/vendor/code.cloudfoundry.org/cli/cf/appfiles/app_files.go b/vendor/code.cloudfoundry.org/cli/cf/appfiles/app_files.go new file mode 100644 index 0000000..b4a7926 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/appfiles/app_files.go @@ -0,0 +1,211 @@ +package appfiles + +import ( + "crypto/sha1" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "runtime" + + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/gofileutils/fileutils" +) + +const windowsPathPrefix = `\\?\` + +//go:generate counterfeiter . AppFiles + +type AppFiles interface { + AppFilesInDir(dir string) (appFiles []models.AppFileFields, err error) + CopyFiles(appFiles []models.AppFileFields, fromDir, toDir string) (err error) + CountFiles(directory string) int64 + WalkAppFiles(dir string, onEachFile func(string, string) error) (err error) +} + +type ApplicationFiles struct{} + +func (appfiles ApplicationFiles) AppFilesInDir(dir string) ([]models.AppFileFields, error) { + appFiles := []models.AppFileFields{} + + fullDirPath, toplevelErr := filepath.Abs(dir) + if toplevelErr != nil { + return appFiles, toplevelErr + } + + toplevelErr = appfiles.WalkAppFiles(fullDirPath, func(fileName string, fullPath string) error { + fileInfo, err := os.Lstat(fullPath) + if err != nil { + return err + } + + appFile := models.AppFileFields{ + Path: filepath.ToSlash(fileName), + Size: fileInfo.Size(), + } + + if fileInfo.IsDir() { + appFile.Sha1 = "0" + appFile.Size = 0 + } else { + sha, err := appfiles.shaFile(fullPath) + if err != nil { + return err + } + appFile.Sha1 = sha + } + + appFiles = append(appFiles, appFile) + + return nil + }) + + return appFiles, toplevelErr +} + +func (appfiles ApplicationFiles) shaFile(fullPath string) (string, error) { + hash := sha1.New() + file, err := os.Open(fullPath) + if err != nil { + return "", err + } + defer file.Close() + + _, err = io.Copy(hash, file) + if err != nil { + return "", err + } + + return fmt.Sprintf("%x", hash.Sum(nil)), nil +} + +func (appfiles ApplicationFiles) CopyFiles(appFiles []models.AppFileFields, fromDir, toDir string) error { + for _, file := range appFiles { + err := func() error { + fromPath, err := filepath.Abs(filepath.Join(fromDir, file.Path)) + if err != nil { + return err + } + + if runtime.GOOS == "windows" { + fromPath = windowsPathPrefix + fromPath + } + + srcFileInfo, err := os.Stat(fromPath) + if err != nil { + return err + } + + toPath, err := filepath.Abs(filepath.Join(toDir, file.Path)) + if err != nil { + return err + } + + if runtime.GOOS == "windows" { + toPath = windowsPathPrefix + toPath + } + + if srcFileInfo.IsDir() { + err = os.MkdirAll(toPath, srcFileInfo.Mode()) + if err != nil { + return err + } + return nil + } + + return appfiles.copyFile(fromPath, toPath, srcFileInfo.Mode()) + }() + + if err != nil { + return err + } + } + + return nil +} + +func (appfiles ApplicationFiles) copyFile(srcPath string, dstPath string, fileMode os.FileMode) error { + dst, err := fileutils.Create(dstPath) + if err != nil { + return err + } + defer dst.Close() + + if runtime.GOOS != "windows" { + err = dst.Chmod(fileMode) + if err != nil { + return err + } + } + + src, err := os.Open(srcPath) + if err != nil { + return err + } + defer src.Close() + + _, err = io.Copy(dst, src) + if err != nil { + return err + } + + return nil +} + +func (appfiles ApplicationFiles) CountFiles(directory string) int64 { + var count int64 + appfiles.WalkAppFiles(directory, func(_, _ string) error { + count++ + return nil + }) + return count +} + +func (appfiles ApplicationFiles) WalkAppFiles(dir string, onEachFile func(string, string) error) error { + cfIgnore := loadIgnoreFile(dir) + walkFunc := func(fullPath string, f os.FileInfo, err error) error { + fileRelativePath, _ := filepath.Rel(dir, fullPath) + fileRelativeUnixPath := filepath.ToSlash(fileRelativePath) + + if err != nil && runtime.GOOS == "windows" { + f, err = os.Lstat(windowsPathPrefix + fullPath) + if err != nil { + return err + } + fullPath = windowsPathPrefix + fullPath + } + + if fullPath == dir { + return nil + } + + if cfIgnore.FileShouldBeIgnored(fileRelativeUnixPath) { + if err == nil && f.IsDir() { + return filepath.SkipDir + } + return nil + } + + if err != nil { + return err + } + + if !f.Mode().IsRegular() && !f.IsDir() { + return nil + } + + return onEachFile(fileRelativePath, fullPath) + } + + return filepath.Walk(dir, walkFunc) +} + +func loadIgnoreFile(dir string) CfIgnore { + fileContents, err := ioutil.ReadFile(filepath.Join(dir, ".cfignore")) + if err != nil { + return NewCfIgnore("") + } + + return NewCfIgnore(string(fileContents)) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/cf_ignore.go b/vendor/code.cloudfoundry.org/cli/cf/appfiles/cf_ignore.go similarity index 94% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/cf_ignore.go rename to vendor/code.cloudfoundry.org/cli/cf/appfiles/cf_ignore.go index e328c35..90851b8 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/app_files/cf_ignore.go +++ b/vendor/code.cloudfoundry.org/cli/cf/appfiles/cf_ignore.go @@ -1,12 +1,14 @@ -package app_files +package appfiles import ( "path" "strings" - "github.com/cloudfoundry/cli/glob" + "code.cloudfoundry.org/cli/util/glob" ) +//go:generate counterfeiter . CfIgnore + type CfIgnore interface { FileShouldBeIgnored(path string) bool } diff --git a/vendor/code.cloudfoundry.org/cli/cf/appfiles/zipper.go b/vendor/code.cloudfoundry.org/cli/cf/appfiles/zipper.go new file mode 100644 index 0000000..b82257a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/appfiles/zipper.go @@ -0,0 +1,309 @@ +package appfiles + +import ( + "archive/zip" + "bufio" + "bytes" + "io" + "os" + "path/filepath" + "runtime" + + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/gofileutils/fileutils" +) + +//go:generate counterfeiter . Zipper + +type Zipper interface { + Zip(dirToZip string, targetFile *os.File) (err error) + IsZipFile(path string) bool + Unzip(appDir string, destDir string) (err error) + GetZipSize(zipFile *os.File) (int64, error) +} + +type ApplicationZipper struct{} + +func (zipper ApplicationZipper) Zip(dirOrZipFilePath string, targetFile *os.File) error { + if zipper.IsZipFile(dirOrZipFilePath) { + zipFile, err := os.Open(dirOrZipFilePath) + if err != nil { + return err + } + defer zipFile.Close() + + _, err = io.Copy(targetFile, zipFile) + if err != nil { + return err + } + } else { + err := writeZipFile(dirOrZipFilePath, targetFile) + if err != nil { + return err + } + } + + _, err := targetFile.Seek(0, os.SEEK_SET) + if err != nil { + return err + } + + return nil +} + +func (zipper ApplicationZipper) IsZipFile(name string) bool { + f, err := os.Open(name) + if err != nil { + return false + } + + fi, err := f.Stat() + if err != nil { + return false + } + + if fi.IsDir() { + return false + } + + _, err = zip.OpenReader(name) + if err != nil && err == zip.ErrFormat { + return zipper.isZipWithOffsetFileHeaderLocation(name) + } + + return err == nil +} + +func (zipper ApplicationZipper) Unzip(name string, destDir string) error { + rc, err := zip.OpenReader(name) + + if err == nil { + defer rc.Close() + for _, f := range rc.File { + err = zipper.extractFile(f, destDir) + if err != nil { + return err + } + } + } + + if err == zip.ErrFormat { + loc, err := zipper.zipFileHeaderLocation(name) + if err != nil { + return err + } + + if loc > int64(-1) { + f, err := os.Open(name) + if err != nil { + return err + } + + defer f.Close() + + fi, err := f.Stat() + if err != nil { + return err + } + + readerAt := io.NewSectionReader(f, loc, fi.Size()) + r, err := zip.NewReader(readerAt, fi.Size()) + if err != nil { + return err + } + for _, f := range r.File { + err := zipper.extractFile(f, destDir) + if err != nil { + return err + } + } + } + } + + return nil +} + +func (zipper ApplicationZipper) GetZipSize(zipFile *os.File) (int64, error) { + zipFileSize := int64(0) + + stat, err := zipFile.Stat() + if err != nil { + return 0, err + } + + zipFileSize = int64(stat.Size()) + + return zipFileSize, nil +} + +func writeZipFile(dir string, targetFile *os.File) error { + isEmpty, err := fileutils.IsDirEmpty(dir) + if err != nil { + return err + } + + if isEmpty { + return errors.NewEmptyDirError(dir) + } + + writer := zip.NewWriter(targetFile) + defer writer.Close() + + appfiles := ApplicationFiles{} + return appfiles.WalkAppFiles(dir, func(fileName string, fullPath string) error { + fileInfo, err := os.Stat(fullPath) + if err != nil { + return err + } + + header, err := zip.FileInfoHeader(fileInfo) + if err != nil { + return err + } + + if runtime.GOOS == "windows" { + header.SetMode(header.Mode() | 0700) + } + + header.Name = filepath.ToSlash(fileName) + header.Method = zip.Deflate + + if fileInfo.IsDir() { + header.Name += "/" + } + + zipFilePart, err := writer.CreateHeader(header) + if err != nil { + return err + } + + if fileInfo.IsDir() { + return nil + } + + file, err := os.Open(fullPath) + if err != nil { + return err + } + defer file.Close() + + _, err = io.Copy(zipFilePart, file) + if err != nil { + return err + } + + return nil + }) +} + +func (zipper ApplicationZipper) zipFileHeaderLocation(name string) (int64, error) { + f, err := os.Open(name) + if err != nil { + return -1, err + } + + defer f.Close() + + // zip file header signature, 0x04034b50, reversed due to little-endian byte order + firstByte := byte(0x50) + restBytes := []byte{0x4b, 0x03, 0x04} + count := int64(-1) + foundAt := int64(-1) + + reader := bufio.NewReader(f) + + keepGoing := true + for keepGoing { + count++ + + b, err := reader.ReadByte() + if err != nil { + keepGoing = false + break + } + + if b == firstByte { + nextBytes, err := reader.Peek(3) + if err != nil { + keepGoing = false + } + if bytes.Compare(nextBytes, restBytes) == 0 { + foundAt = count + keepGoing = false + break + } + } + } + + return foundAt, nil +} + +func (zipper ApplicationZipper) isZipWithOffsetFileHeaderLocation(name string) bool { + loc, err := zipper.zipFileHeaderLocation(name) + if err != nil { + return false + } + + if loc > int64(-1) { + f, err := os.Open(name) + if err != nil { + return false + } + + defer f.Close() + + fi, err := f.Stat() + if err != nil { + return false + } + + readerAt := io.NewSectionReader(f, loc, fi.Size()) + _, err = zip.NewReader(readerAt, fi.Size()) + if err == nil { + return true + } + } + + return false +} + +func (zipper ApplicationZipper) extractFile(f *zip.File, destDir string) error { + if f.FileInfo().IsDir() { + err := os.MkdirAll(filepath.Join(destDir, f.Name), os.ModeDir|os.ModePerm) + if err != nil { + return err + } + return nil + } + + src, err := f.Open() + if err != nil { + return err + } + defer src.Close() + + destFilePath := filepath.Join(destDir, f.Name) + + err = os.MkdirAll(filepath.Dir(destFilePath), os.ModeDir|os.ModePerm) + if err != nil { + return err + } + + destFile, err := os.Create(destFilePath) + if err != nil { + return err + } + defer destFile.Close() + + _, err = io.Copy(destFile, src) + if err != nil { + return err + } + + err = os.Chmod(destFilePath, f.FileInfo().Mode()) + if err != nil { + return err + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/commandregistry/command.go b/vendor/code.cloudfoundry.org/cli/cf/commandregistry/command.go new file mode 100644 index 0000000..789f1b7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/commandregistry/command.go @@ -0,0 +1,27 @@ +package commandregistry + +import ( + "code.cloudfoundry.org/cli/cf/flags" + "code.cloudfoundry.org/cli/cf/requirements" +) + +//go:generate counterfeiter . Command + +type Command interface { + MetaData() CommandMetadata + SetDependency(deps Dependency, pluginCall bool) Command + Requirements(requirementsFactory requirements.Factory, context flags.FlagContext) ([]requirements.Requirement, error) + Execute(context flags.FlagContext) error +} + +type CommandMetadata struct { + Name string + ShortName string + Usage []string + Description string + Flags map[string]flags.FlagSet + SkipFlagParsing bool + TotalArgs int //Optional: number of required arguments to skip for flag verification + Hidden bool + Examples []string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/commandregistry/dependency.go b/vendor/code.cloudfoundry.org/cli/cf/commandregistry/dependency.go new file mode 100644 index 0000000..72e4989 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/commandregistry/dependency.go @@ -0,0 +1,155 @@ +package commandregistry + +import ( + "fmt" + "io" + "os" + "time" + + "path/filepath" + + "code.cloudfoundry.org/cli/cf/actors" + "code.cloudfoundry.org/cli/cf/actors/brokerbuilder" + "code.cloudfoundry.org/cli/cf/actors/planbuilder" + "code.cloudfoundry.org/cli/cf/actors/pluginrepo" + "code.cloudfoundry.org/cli/cf/actors/servicebuilder" + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/appfiles" + "code.cloudfoundry.org/cli/cf/configuration" + "code.cloudfoundry.org/cli/cf/configuration/confighelpers" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/configuration/pluginconfig" + "code.cloudfoundry.org/cli/cf/manifest" + "code.cloudfoundry.org/cli/cf/net" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" + "code.cloudfoundry.org/cli/plugin/models" + "code.cloudfoundry.org/cli/util" + "code.cloudfoundry.org/cli/util/words/generator" +) + +type Dependency struct { + UI terminal.UI + Config coreconfig.Repository + RepoLocator api.RepositoryLocator + PluginConfig pluginconfig.PluginConfiguration + ManifestRepo manifest.Repository + AppManifest manifest.App + Gateways map[string]net.Gateway + TeePrinter *terminal.TeePrinter + PluginRepo pluginrepo.PluginRepo + PluginModels *PluginModels + ServiceBuilder servicebuilder.ServiceBuilder + BrokerBuilder brokerbuilder.Builder + PlanBuilder planbuilder.PlanBuilder + ServiceHandler actors.ServiceActor + ServicePlanHandler actors.ServicePlanActor + WordGenerator generator.WordGenerator + AppZipper appfiles.Zipper + AppFiles appfiles.AppFiles + PushActor actors.PushActor + RouteActor actors.RouteActor + ChecksumUtil util.Sha1Checksum + WildcardDependency interface{} //use for injecting fakes + Logger trace.Printer +} + +type PluginModels struct { + Application *plugin_models.GetAppModel + AppsSummary *[]plugin_models.GetAppsModel + Organizations *[]plugin_models.GetOrgs_Model + Organization *plugin_models.GetOrg_Model + Spaces *[]plugin_models.GetSpaces_Model + Space *plugin_models.GetSpace_Model + OrgUsers *[]plugin_models.GetOrgUsers_Model + SpaceUsers *[]plugin_models.GetSpaceUsers_Model + Services *[]plugin_models.GetServices_Model + Service *plugin_models.GetService_Model + OauthToken *plugin_models.GetOauthToken_Model +} + +func NewDependency(writer io.Writer, logger trace.Printer, envDialTimeout string) Dependency { + deps := Dependency{} + deps.TeePrinter = terminal.NewTeePrinter(writer) + deps.UI = terminal.NewUI(os.Stdin, writer, deps.TeePrinter, logger) + + errorHandler := func(err error) { + if err != nil { + deps.UI.Failed(fmt.Sprintf("Config error: %s", err)) + } + } + + configPath, err := confighelpers.DefaultFilePath() + if err != nil { + errorHandler(err) + } + deps.Config = coreconfig.NewRepositoryFromFilepath(configPath, errorHandler) + + deps.ManifestRepo = manifest.NewDiskRepository() + deps.AppManifest = manifest.NewGenerator() + + pluginPath := filepath.Join(confighelpers.PluginRepoDir(), ".cf", "plugins") + deps.PluginConfig = pluginconfig.NewPluginConfig( + errorHandler, + configuration.NewDiskPersistor(filepath.Join(pluginPath, "config.json")), + pluginPath, + ) + + terminal.UserAskedForColors = deps.Config.ColorEnabled() + terminal.InitColorSupport() + + deps.Gateways = map[string]net.Gateway{ + "cloud-controller": net.NewCloudControllerGateway(deps.Config, time.Now, deps.UI, logger, envDialTimeout), + "uaa": net.NewUAAGateway(deps.Config, deps.UI, logger, envDialTimeout), + "routing-api": net.NewRoutingAPIGateway(deps.Config, time.Now, deps.UI, logger, envDialTimeout), + } + deps.RepoLocator = api.NewRepositoryLocator(deps.Config, deps.Gateways, logger, envDialTimeout) + + deps.PluginModels = &PluginModels{Application: nil} + + deps.PlanBuilder = planbuilder.NewBuilder( + deps.RepoLocator.GetServicePlanRepository(), + deps.RepoLocator.GetServicePlanVisibilityRepository(), + deps.RepoLocator.GetOrganizationRepository(), + ) + + deps.ServiceBuilder = servicebuilder.NewBuilder( + deps.RepoLocator.GetServiceRepository(), + deps.PlanBuilder, + ) + + deps.BrokerBuilder = brokerbuilder.NewBuilder( + deps.RepoLocator.GetServiceBrokerRepository(), + deps.ServiceBuilder, + ) + + deps.PluginRepo = pluginrepo.NewPluginRepo() + + deps.ServiceHandler = actors.NewServiceHandler( + deps.RepoLocator.GetOrganizationRepository(), + deps.BrokerBuilder, + deps.ServiceBuilder, + ) + + deps.ServicePlanHandler = actors.NewServicePlanHandler( + deps.RepoLocator.GetServicePlanRepository(), + deps.RepoLocator.GetServicePlanVisibilityRepository(), + deps.RepoLocator.GetOrganizationRepository(), + deps.PlanBuilder, + deps.ServiceBuilder, + ) + + deps.WordGenerator = generator.NewWordGenerator() + + deps.AppZipper = appfiles.ApplicationZipper{} + deps.AppFiles = appfiles.ApplicationFiles{} + + deps.RouteActor = actors.NewRouteActor(deps.UI, deps.RepoLocator.GetRouteRepository(), deps.RepoLocator.GetDomainRepository()) + deps.PushActor = actors.NewPushActor(deps.RepoLocator.GetApplicationBitsRepository(), deps.AppZipper, deps.AppFiles, deps.RouteActor) + + deps.ChecksumUtil = util.NewSha1Checksum("") + + deps.Logger = logger + + return deps +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/commandregistry/registry.go b/vendor/code.cloudfoundry.org/cli/cf/commandregistry/registry.go new file mode 100644 index 0000000..069f856 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/commandregistry/registry.go @@ -0,0 +1,168 @@ +package commandregistry + +import ( + "fmt" + "os" + "strings" + "unicode/utf8" + + "code.cloudfoundry.org/cli/cf" + "code.cloudfoundry.org/cli/cf/flags" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/util/configv3" + + . "code.cloudfoundry.org/cli/cf/terminal" +) + +var _ = initI18nFunc() +var Commands = NewRegistry() + +func initI18nFunc() bool { + config, err := configv3.LoadConfig() + if err != nil { + fmt.Println(FailureColor("FAILED")) + fmt.Println("Error read/writing config: ", err.Error()) + os.Exit(1) + } + T = Init(config) + return true +} + +type registry struct { + cmd map[string]Command + alias map[string]string +} + +func NewRegistry() *registry { + return ®istry{ + cmd: make(map[string]Command), + alias: make(map[string]string), + } +} + +func Register(cmd Command) { + m := cmd.MetaData() + Commands.cmd[m.Name] = cmd + + Commands.alias[m.ShortName] = m.Name +} + +func (r *registry) FindCommand(name string) Command { + if _, ok := r.cmd[name]; ok { + return r.cmd[name] + } + + if alias, exists := r.alias[name]; exists { + return r.cmd[alias] + } + + return nil +} + +func (r *registry) CommandExists(name string) bool { + if strings.TrimSpace(name) == "" { + return false + } + + var ok bool + + if _, ok = r.cmd[name]; !ok { + alias, exists := r.alias[name] + + if exists { + _, ok = r.cmd[alias] + } + } + + return ok +} + +func (r *registry) ListCommands() []string { + keys := make([]string, len(r.cmd)) + + i := 0 + for k := range r.cmd { + keys[i] = k + i++ + } + + return keys +} + +func (r *registry) SetCommand(cmd Command) { + r.cmd[cmd.MetaData().Name] = cmd +} + +func (r *registry) RemoveCommand(cmdName string) { + delete(r.cmd, cmdName) +} + +func (r *registry) TotalCommands() int { + return len(r.cmd) +} + +func (r *registry) MaxCommandNameLength() int { + maxNameLen := 0 + for name := range r.cmd { + if nameLen := utf8.RuneCountInString(name); nameLen > maxNameLen { + maxNameLen = nameLen + } + } + return maxNameLen +} + +func (r *registry) Metadatas() []CommandMetadata { + var m []CommandMetadata + + for _, c := range r.cmd { + m = append(m, c.MetaData()) + } + + return m +} + +func (r *registry) CommandUsage(cmdName string) string { + cmd := r.FindCommand(cmdName) + + return CLICommandUsagePresenter(cmd).Usage() +} + +type usagePresenter struct { + cmd Command +} + +func CLICommandUsagePresenter(cmd Command) *usagePresenter { + return &usagePresenter{ + cmd: cmd, + } +} + +func (u *usagePresenter) Usage() string { + metadata := u.cmd.MetaData() + + output := T("NAME:") + "\n" + output += " " + metadata.Name + " - " + metadata.Description + "\n\n" + + output += T("USAGE:") + "\n" + output += " " + strings.Replace(strings.Join(metadata.Usage, ""), "CF_NAME", cf.Name, -1) + "\n" + + if len(metadata.Examples) > 0 { + output += "\n" + output += fmt.Sprintf("%s:\n", T("EXAMPLES")) + for _, e := range metadata.Examples { + output += fmt.Sprintf(" %s\n", strings.Replace(e, "CF_NAME", cf.Name, -1)) + } + } + + if metadata.ShortName != "" { + output += "\n" + T("ALIAS:") + "\n" + output += " " + metadata.ShortName + "\n" + } + + if metadata.Flags != nil { + output += "\n" + T("OPTIONS:") + "\n" + output += flags.NewFlagContext(metadata.Flags).ShowUsage(3) + } + + return output +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor.go new file mode 100644 index 0000000..ff08a08 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor.go @@ -0,0 +1,90 @@ +package configuration + +import ( + "io/ioutil" + "os" +) + +const ( + filePermissions = 0600 + dirPermissions = 0700 +) + +//go:generate counterfeiter . Persistor + +type Persistor interface { + Delete() + Exists() bool + Load(DataInterface) error + Save(DataInterface) error +} + +//go:generate counterfeiter . DataInterface + +type DataInterface interface { + JSONMarshalV3() ([]byte, error) + JSONUnmarshalV3([]byte) error +} + +type DiskPersistor struct { + filePath string +} + +func NewDiskPersistor(path string) DiskPersistor { + return DiskPersistor{ + filePath: path, + } +} + +func (dp DiskPersistor) Exists() bool { + _, err := os.Stat(dp.filePath) + if err != nil && !os.IsExist(err) { + return false + } + return true +} + +func (dp DiskPersistor) Delete() { + _ = os.Remove(dp.filePath) +} + +func (dp DiskPersistor) Load(data DataInterface) error { + err := dp.read(data) + if os.IsPermission(err) { + return err + } + + if err != nil { + err = dp.write(data) + } + return err +} + +func (dp DiskPersistor) Save(data DataInterface) error { + return dp.write(data) +} + +func (dp DiskPersistor) read(data DataInterface) error { + err := dp.makeDirectory() + if err != nil { + return err + } + + jsonBytes, err := ioutil.ReadFile(dp.filePath) + if err != nil { + return err + } + + err = data.JSONUnmarshalV3(jsonBytes) + return err +} + +func (dp DiskPersistor) write(data DataInterface) error { + bytes, err := data.JSONMarshalV3() + if err != nil { + return err + } + + err = ioutil.WriteFile(dp.filePath, bytes, filePermissions) + return err +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor_unix.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor_unix.go new file mode 100644 index 0000000..b1d4520 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor_unix.go @@ -0,0 +1,12 @@ +// +build !windows + +package configuration + +import ( + "os" + "path/filepath" +) + +func (dp DiskPersistor) makeDirectory() error { + return os.MkdirAll(filepath.Dir(dp.filePath), dirPermissions) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor_win.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor_win.go new file mode 100644 index 0000000..859d252 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/config_disk_persistor_win.go @@ -0,0 +1,30 @@ +// +build windows + +package configuration + +import ( + "os" + "path/filepath" + "syscall" +) + +func (dp DiskPersistor) makeDirectory() error { + dir := filepath.Dir(dp.filePath) + + err := os.MkdirAll(dir, dirPermissions) + if err != nil { + return err + } + + p, err := syscall.UTF16PtrFromString(dir) + if err != nil { + return err + } + + attrs, err := syscall.GetFileAttributes(p) + if err != nil { + return err + } + + return syscall.SetFileAttributes(p, attrs|syscall.FILE_ATTRIBUTE_HIDDEN) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/confighelpers/config_helpers.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/confighelpers/config_helpers.go new file mode 100644 index 0000000..7cfe273 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/confighelpers/config_helpers.go @@ -0,0 +1,47 @@ +package confighelpers + +import ( + "fmt" + "os" + "path/filepath" + "runtime" +) + +func DefaultFilePath() (string, error) { + var homeDir string + + if os.Getenv("CF_HOME") != "" { + homeDir = os.Getenv("CF_HOME") + + if _, err := os.Stat(homeDir); os.IsNotExist(err) { + return "", fmt.Errorf("Error locating CF_HOME folder '%s'", homeDir) + } + } else { + homeDir = userHomeDir() + } + + return filepath.Join(homeDir, ".cf", "config.json"), nil +} + +// See: http://stackoverflow.com/questions/7922270/obtain-users-home-directory +// we can't cross compile using cgo and use user.Current() +var userHomeDir = func() string { + + if runtime.GOOS == "windows" { + home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") + if home == "" { + home = os.Getenv("USERPROFILE") + } + return home + } + + return os.Getenv("HOME") +} + +var PluginRepoDir = func() string { + if os.Getenv("CF_PLUGIN_HOME") != "" { + return os.Getenv("CF_PLUGIN_HOME") + } + + return userHomeDir() +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/access_token.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/access_token.go new file mode 100644 index 0000000..c0102f0 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/access_token.go @@ -0,0 +1,60 @@ +package coreconfig + +import ( + "encoding/base64" + "encoding/json" + "strings" +) + +type TokenInfo struct { + Username string `json:"user_name"` + Email string `json:"email"` + UserGUID string `json:"user_id"` +} + +func NewTokenInfo(accessToken string) (info TokenInfo) { + tokenJSON, err := DecodeAccessToken(accessToken) + if err != nil { + return TokenInfo{} + } + + info = TokenInfo{} + err = json.Unmarshal(tokenJSON, &info) + if err != nil { + return TokenInfo{} + } + + return info +} + +func DecodeAccessToken(accessToken string) (tokenJSON []byte, err error) { + tokenParts := strings.Split(accessToken, " ") + + if len(tokenParts) < 2 { + return + } + + token := tokenParts[1] + encodedParts := strings.Split(token, ".") + + if len(encodedParts) < 3 { + return + } + + encodedTokenJSON := encodedParts[1] + return base64Decode(encodedTokenJSON) +} + +func base64Decode(encodedData string) ([]byte, error) { + return base64.StdEncoding.DecodeString(restorePadding(encodedData)) +} + +func restorePadding(seg string) string { + switch len(seg) % 4 { + case 2: + seg = seg + "==" + case 3: + seg = seg + "=" + } + return seg +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/api_config_refresher.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/api_config_refresher.go new file mode 100644 index 0000000..cec12df --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/api_config_refresher.go @@ -0,0 +1,55 @@ +package coreconfig + +import ( + "strings" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +//go:generate counterfeiter . EndpointRepository + +type EndpointRepository interface { + GetCCInfo(string) (*CCInfo, string, error) +} + +type APIConfigRefresher struct { + EndpointRepo EndpointRepository + Config ReadWriter + Endpoint string +} + +func (a APIConfigRefresher) Refresh() (Warning, error) { + ccInfo, endpoint, err := a.EndpointRepo.GetCCInfo(a.Endpoint) + if err != nil { + return nil, err + } + + if endpoint != a.Config.APIEndpoint() { + a.Config.ClearSession() + } + + a.Config.SetAPIEndpoint(endpoint) + a.Config.SetAPIVersion(ccInfo.APIVersion) + a.Config.SetAuthenticationEndpoint(ccInfo.AuthorizationEndpoint) + a.Config.SetSSHOAuthClient(ccInfo.SSHOAuthClient) + a.Config.SetMinCLIVersion(ccInfo.MinCLIVersion) + a.Config.SetMinRecommendedCLIVersion(ccInfo.MinRecommendedCLIVersion) + + a.Config.SetDopplerEndpoint(ccInfo.DopplerEndpoint) + a.Config.SetRoutingAPIEndpoint(ccInfo.RoutingAPIEndpoint) + + if !strings.HasPrefix(endpoint, "https://") { + return new(insecureWarning), nil + } + return nil, nil +} + +type Warning interface { + Warn() string +} + +type insecureWarning struct{} + +func (w insecureWarning) Warn() string { + return T("Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n") +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/config_data.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/config_data.go new file mode 100644 index 0000000..8bda12b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/config_data.go @@ -0,0 +1,72 @@ +package coreconfig + +import ( + "encoding/json" + + "code.cloudfoundry.org/cli/cf/models" +) + +type AuthPromptType string + +const ( + AuthPromptTypeText AuthPromptType = "TEXT" + AuthPromptTypePassword AuthPromptType = "PASSWORD" +) + +type AuthPrompt struct { + Type AuthPromptType + DisplayName string +} + +type Data struct { + ConfigVersion int + Target string + APIVersion string + AuthorizationEndpoint string + DopplerEndPoint string + UaaEndpoint string + RoutingAPIEndpoint string + AccessToken string + UAAOAuthClient string + UAAOAuthClientSecret string + SSHOAuthClient string + RefreshToken string + OrganizationFields models.OrganizationFields + SpaceFields models.SpaceFields + SSLDisabled bool + AsyncTimeout uint + Trace string + ColorEnabled string + Locale string + PluginRepos []models.PluginRepo + MinCLIVersion string + MinRecommendedCLIVersion string +} + +func NewData() *Data { + data := new(Data) + + data.UAAOAuthClient = "cf" + data.UAAOAuthClientSecret = "" + + return data +} + +func (d *Data) JSONMarshalV3() ([]byte, error) { + d.ConfigVersion = 3 + return json.MarshalIndent(d, "", " ") +} + +func (d *Data) JSONUnmarshalV3(input []byte) error { + err := json.Unmarshal(input, d) + if err != nil { + return err + } + + if d.ConfigVersion != 3 { + *d = Data{} + return nil + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/config_repository.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/config_repository.go new file mode 100644 index 0000000..639a31d --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/coreconfig/config_repository.go @@ -0,0 +1,565 @@ +package coreconfig + +import ( + "sync" + + "code.cloudfoundry.org/cli/cf/configuration" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/version" + "github.com/blang/semver" +) + +type ConfigRepository struct { + CFCLIVersion string + data *Data + mutex *sync.RWMutex + initOnce *sync.Once + persistor configuration.Persistor + onError func(error) +} + +type CCInfo struct { + APIVersion string `json:"api_version"` + AuthorizationEndpoint string `json:"authorization_endpoint"` + DopplerEndpoint string `json:"doppler_logging_endpoint"` + MinCLIVersion string `json:"min_cli_version"` + MinRecommendedCLIVersion string `json:"min_recommended_cli_version"` + SSHOAuthClient string `json:"app_ssh_oauth_client"` + RoutingAPIEndpoint string `json:"routing_endpoint"` +} + +func NewRepositoryFromFilepath(filepath string, errorHandler func(error)) Repository { + if errorHandler == nil { + return nil + } + return NewRepositoryFromPersistor(configuration.NewDiskPersistor(filepath), errorHandler) +} + +func NewRepositoryFromPersistor(persistor configuration.Persistor, errorHandler func(error)) Repository { + data := NewData() + if !persistor.Exists() { + //set default plugin repo + data.PluginRepos = append(data.PluginRepos, models.PluginRepo{ + Name: "CF-Community", + URL: "https://plugins.cloudfoundry.org", + }) + } + + return &ConfigRepository{ + data: data, + mutex: new(sync.RWMutex), + initOnce: new(sync.Once), + persistor: persistor, + onError: errorHandler, + } +} + +type Reader interface { + APIEndpoint() string + APIVersion() string + HasAPIEndpoint() bool + + AuthenticationEndpoint() string + DopplerEndpoint() string + UaaEndpoint() string + RoutingAPIEndpoint() string + AccessToken() string + UAAOAuthClient() string + UAAOAuthClientSecret() string + SSHOAuthClient() string + RefreshToken() string + + OrganizationFields() models.OrganizationFields + HasOrganization() bool + + SpaceFields() models.SpaceFields + HasSpace() bool + + Username() string + UserGUID() string + UserEmail() string + IsLoggedIn() bool + IsSSLDisabled() bool + IsMinAPIVersion(semver.Version) bool + IsMinCLIVersion(string) bool + MinCLIVersion() string + MinRecommendedCLIVersion() string + CLIVersion() string + + AsyncTimeout() uint + Trace() string + + ColorEnabled() string + + Locale() string + + PluginRepos() []models.PluginRepo +} + +//go:generate counterfeiter . ReadWriter + +type ReadWriter interface { + Reader + ClearSession() + SetAPIEndpoint(string) + SetAPIVersion(string) + SetMinCLIVersion(string) + SetMinRecommendedCLIVersion(string) + SetAuthenticationEndpoint(string) + SetDopplerEndpoint(string) + SetUaaEndpoint(string) + SetRoutingAPIEndpoint(string) + SetAccessToken(string) + SetUAAOAuthClient(string) + SetUAAOAuthClientSecret(string) + SetSSHOAuthClient(string) + SetRefreshToken(string) + SetOrganizationFields(models.OrganizationFields) + SetSpaceFields(models.SpaceFields) + SetSSLDisabled(bool) + SetAsyncTimeout(uint) + SetTrace(string) + SetColorEnabled(string) + SetLocale(string) + SetPluginRepo(models.PluginRepo) + UnSetPluginRepo(int) + SetCLIVersion(string) +} + +//go:generate counterfeiter . Repository + +type Repository interface { + ReadWriter + Close() +} + +// ACCESS CONTROL + +func (c *ConfigRepository) init() { + c.initOnce.Do(func() { + err := c.persistor.Load(c.data) + if err != nil { + c.onError(err) + } + }) +} + +func (c *ConfigRepository) read(cb func()) { + c.mutex.RLock() + defer c.mutex.RUnlock() + c.init() + + cb() +} + +func (c *ConfigRepository) write(cb func()) { + c.mutex.Lock() + defer c.mutex.Unlock() + c.init() + + cb() + + err := c.persistor.Save(c.data) + if err != nil { + c.onError(err) + } +} + +// CLOSERS + +func (c *ConfigRepository) Close() { + c.read(func() { + // perform a read to ensure write lock has been cleared + }) +} + +// GETTERS + +func (c *ConfigRepository) APIVersion() (apiVersion string) { + c.read(func() { + apiVersion = c.data.APIVersion + }) + return +} + +func (c *ConfigRepository) AuthenticationEndpoint() (authEndpoint string) { + c.read(func() { + authEndpoint = c.data.AuthorizationEndpoint + }) + return +} + +func (c *ConfigRepository) DopplerEndpoint() (dopplerEndpoint string) { + c.read(func() { + dopplerEndpoint = c.data.DopplerEndPoint + }) + + return +} + +func (c *ConfigRepository) UaaEndpoint() (uaaEndpoint string) { + c.read(func() { + uaaEndpoint = c.data.UaaEndpoint + }) + return +} + +func (c *ConfigRepository) RoutingAPIEndpoint() (routingAPIEndpoint string) { + c.read(func() { + routingAPIEndpoint = c.data.RoutingAPIEndpoint + }) + return +} + +func (c *ConfigRepository) APIEndpoint() (apiEndpoint string) { + c.read(func() { + apiEndpoint = c.data.Target + }) + return +} + +func (c *ConfigRepository) HasAPIEndpoint() (hasEndpoint bool) { + c.read(func() { + hasEndpoint = c.data.APIVersion != "" && c.data.Target != "" + }) + return +} + +func (c *ConfigRepository) AccessToken() (accessToken string) { + c.read(func() { + accessToken = c.data.AccessToken + }) + return +} + +func (c *ConfigRepository) UAAOAuthClient() (clientID string) { + c.read(func() { + clientID = c.data.UAAOAuthClient + }) + return +} + +func (c *ConfigRepository) UAAOAuthClientSecret() (clientID string) { + c.read(func() { + clientID = c.data.UAAOAuthClientSecret + }) + return +} + +func (c *ConfigRepository) SSHOAuthClient() (clientID string) { + c.read(func() { + clientID = c.data.SSHOAuthClient + }) + return +} + +func (c *ConfigRepository) RefreshToken() (refreshToken string) { + c.read(func() { + refreshToken = c.data.RefreshToken + }) + return +} + +func (c *ConfigRepository) OrganizationFields() (org models.OrganizationFields) { + c.read(func() { + org = c.data.OrganizationFields + }) + return +} + +func (c *ConfigRepository) SpaceFields() (space models.SpaceFields) { + c.read(func() { + space = c.data.SpaceFields + }) + return +} + +func (c *ConfigRepository) UserEmail() (email string) { + c.read(func() { + email = NewTokenInfo(c.data.AccessToken).Email + }) + return +} + +func (c *ConfigRepository) UserGUID() (guid string) { + c.read(func() { + guid = NewTokenInfo(c.data.AccessToken).UserGUID + }) + return +} + +func (c *ConfigRepository) Username() (name string) { + c.read(func() { + name = NewTokenInfo(c.data.AccessToken).Username + }) + return +} + +func (c *ConfigRepository) IsLoggedIn() (loggedIn bool) { + c.read(func() { + loggedIn = c.data.AccessToken != "" + }) + return +} + +func (c *ConfigRepository) HasOrganization() (hasOrg bool) { + c.read(func() { + hasOrg = c.data.OrganizationFields.GUID != "" && c.data.OrganizationFields.Name != "" + }) + return +} + +func (c *ConfigRepository) HasSpace() (hasSpace bool) { + c.read(func() { + hasSpace = c.data.SpaceFields.GUID != "" && c.data.SpaceFields.Name != "" + }) + return +} + +func (c *ConfigRepository) IsSSLDisabled() (isSSLDisabled bool) { + c.read(func() { + isSSLDisabled = c.data.SSLDisabled + }) + return +} + +// SetCLIVersion should only be used in testing +func (c *ConfigRepository) SetCLIVersion(v string) { + c.CFCLIVersion = v +} + +func (c *ConfigRepository) CLIVersion() string { + if c.CFCLIVersion == "" { + return version.VersionString() + } else { + return c.CFCLIVersion + } +} + +func (c *ConfigRepository) IsMinAPIVersion(requiredVersion semver.Version) bool { + var apiVersion string + c.read(func() { + apiVersion = c.data.APIVersion + }) + + actualVersion, err := semver.Make(apiVersion) + if err != nil { + return false + } + return actualVersion.GTE(requiredVersion) +} + +func (c *ConfigRepository) IsMinCLIVersion(checkVersion string) bool { + if checkVersion == version.DefaultVersion { + return true + } + var minCLIVersion string + c.read(func() { + minCLIVersion = c.data.MinCLIVersion + }) + if minCLIVersion == "" { + return true + } + + actualVersion, err := semver.Make(checkVersion) + if err != nil { + return false + } + requiredVersion, err := semver.Make(minCLIVersion) + if err != nil { + return false + } + return actualVersion.GTE(requiredVersion) +} + +func (c *ConfigRepository) MinCLIVersion() (minCLIVersion string) { + c.read(func() { + minCLIVersion = c.data.MinCLIVersion + }) + return +} + +func (c *ConfigRepository) MinRecommendedCLIVersion() (minRecommendedCLIVersion string) { + c.read(func() { + minRecommendedCLIVersion = c.data.MinRecommendedCLIVersion + }) + return +} + +func (c *ConfigRepository) AsyncTimeout() (timeout uint) { + c.read(func() { + timeout = c.data.AsyncTimeout + }) + return +} + +func (c *ConfigRepository) Trace() (trace string) { + c.read(func() { + trace = c.data.Trace + }) + return +} + +func (c *ConfigRepository) ColorEnabled() (enabled string) { + c.read(func() { + enabled = c.data.ColorEnabled + }) + return +} + +func (c *ConfigRepository) Locale() (locale string) { + c.read(func() { + locale = c.data.Locale + }) + return +} + +func (c *ConfigRepository) PluginRepos() (repos []models.PluginRepo) { + c.read(func() { + repos = c.data.PluginRepos + }) + return +} + +// SETTERS + +func (c *ConfigRepository) ClearSession() { + c.write(func() { + c.data.AccessToken = "" + c.data.RefreshToken = "" + c.data.OrganizationFields = models.OrganizationFields{} + c.data.SpaceFields = models.SpaceFields{} + }) +} + +func (c *ConfigRepository) SetAPIEndpoint(endpoint string) { + c.write(func() { + c.data.Target = endpoint + }) +} + +func (c *ConfigRepository) SetAPIVersion(version string) { + c.write(func() { + c.data.APIVersion = version + }) +} + +func (c *ConfigRepository) SetMinCLIVersion(version string) { + c.write(func() { + c.data.MinCLIVersion = version + }) +} + +func (c *ConfigRepository) SetMinRecommendedCLIVersion(version string) { + c.write(func() { + c.data.MinRecommendedCLIVersion = version + }) +} + +func (c *ConfigRepository) SetAuthenticationEndpoint(endpoint string) { + c.write(func() { + c.data.AuthorizationEndpoint = endpoint + }) +} + +func (c *ConfigRepository) SetDopplerEndpoint(endpoint string) { + c.write(func() { + c.data.DopplerEndPoint = endpoint + }) +} + +func (c *ConfigRepository) SetUaaEndpoint(uaaEndpoint string) { + c.write(func() { + c.data.UaaEndpoint = uaaEndpoint + }) +} + +func (c *ConfigRepository) SetRoutingAPIEndpoint(routingAPIEndpoint string) { + c.write(func() { + c.data.RoutingAPIEndpoint = routingAPIEndpoint + }) +} + +func (c *ConfigRepository) SetAccessToken(token string) { + c.write(func() { + c.data.AccessToken = token + }) +} + +func (c *ConfigRepository) SetUAAOAuthClient(clientID string) { + c.write(func() { + c.data.UAAOAuthClient = clientID + }) +} + +func (c *ConfigRepository) SetUAAOAuthClientSecret(clientID string) { + c.write(func() { + c.data.UAAOAuthClientSecret = clientID + }) +} + +func (c *ConfigRepository) SetSSHOAuthClient(clientID string) { + c.write(func() { + c.data.SSHOAuthClient = clientID + }) +} + +func (c *ConfigRepository) SetRefreshToken(token string) { + c.write(func() { + c.data.RefreshToken = token + }) +} + +func (c *ConfigRepository) SetOrganizationFields(org models.OrganizationFields) { + c.write(func() { + c.data.OrganizationFields = org + }) +} + +func (c *ConfigRepository) SetSpaceFields(space models.SpaceFields) { + c.write(func() { + c.data.SpaceFields = space + }) +} + +func (c *ConfigRepository) SetSSLDisabled(disabled bool) { + c.write(func() { + c.data.SSLDisabled = disabled + }) +} + +func (c *ConfigRepository) SetAsyncTimeout(timeout uint) { + c.write(func() { + c.data.AsyncTimeout = timeout + }) +} + +func (c *ConfigRepository) SetTrace(value string) { + c.write(func() { + c.data.Trace = value + }) +} + +func (c *ConfigRepository) SetColorEnabled(enabled string) { + c.write(func() { + c.data.ColorEnabled = enabled + }) +} + +func (c *ConfigRepository) SetLocale(locale string) { + c.write(func() { + c.data.Locale = locale + }) +} + +func (c *ConfigRepository) SetPluginRepo(repo models.PluginRepo) { + c.write(func() { + c.data.PluginRepos = append(c.data.PluginRepos, repo) + }) +} + +func (c *ConfigRepository) UnSetPluginRepo(index int) { + c.write(func() { + c.data.PluginRepos = append(c.data.PluginRepos[:index], c.data.PluginRepos[index+1:]...) + }) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_config.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/pluginconfig/plugin_config.go similarity index 75% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_config.go rename to vendor/code.cloudfoundry.org/cli/cf/configuration/pluginconfig/plugin_config.go index bc0120b..92804b2 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/configuration/plugin_config/plugin_config.go +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/pluginconfig/plugin_config.go @@ -1,18 +1,19 @@ -package plugin_config +package pluginconfig import ( - "path/filepath" "sync" - "github.com/cloudfoundry/cli/cf/configuration" - "github.com/cloudfoundry/cli/cf/configuration/config_helpers" + "code.cloudfoundry.org/cli/cf/configuration" ) +//go:generate counterfeiter . PluginConfiguration + type PluginConfiguration interface { Plugins() map[string]PluginMetadata SetPlugin(string, PluginMetadata) GetPluginPath() string RemovePlugin(string) + ListCommands() []string } type PluginConfig struct { @@ -24,19 +25,17 @@ type PluginConfig struct { pluginPath string } -func NewPluginConfig(errorHandler func(error)) *PluginConfig { - pluginPath := filepath.Join(config_helpers.PluginRepoDir(), ".cf", "plugins") +func NewPluginConfig(errorHandler func(error), persistor configuration.Persistor, pluginPath string) *PluginConfig { return &PluginConfig{ data: NewData(), mutex: new(sync.RWMutex), initOnce: new(sync.Once), - persistor: configuration.NewDiskPersistor(filepath.Join(pluginPath, "config.json")), + persistor: persistor, onError: errorHandler, pluginPath: pluginPath, } } -/* getter methods */ func (c *PluginConfig) GetPluginPath() string { return c.pluginPath } @@ -46,7 +45,6 @@ func (c *PluginConfig) Plugins() map[string]PluginMetadata { return c.data.Plugins } -/* setter methods */ func (c *PluginConfig) SetPlugin(name string, metadata PluginMetadata) { if c.data.Plugins == nil { c.data.Plugins = make(map[string]PluginMetadata) @@ -62,7 +60,19 @@ func (c *PluginConfig) RemovePlugin(name string) { }) } -/* Functions that handel locking */ +func (c *PluginConfig) ListCommands() []string { + plugins := c.Plugins() + allCommands := []string{} + + for _, plugin := range plugins { + for _, command := range plugin.Commands { + allCommands = append(allCommands, command.Name) + } + } + + return allCommands +} + func (c *PluginConfig) init() { //only read from disk if it was never read c.initOnce.Do(func() { @@ -92,7 +102,6 @@ func (c *PluginConfig) write(cb func()) { } } -// CLOSERS func (c *PluginConfig) Close() { c.read() // perform a read to ensure write lock has been cleared diff --git a/vendor/code.cloudfoundry.org/cli/cf/configuration/pluginconfig/plugin_data.go b/vendor/code.cloudfoundry.org/cli/cf/configuration/pluginconfig/plugin_data.go new file mode 100644 index 0000000..9d9cebe --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/configuration/pluginconfig/plugin_data.go @@ -0,0 +1,31 @@ +package pluginconfig + +import ( + "encoding/json" + + "code.cloudfoundry.org/cli/plugin" +) + +type PluginData struct { + Plugins map[string]PluginMetadata +} + +type PluginMetadata struct { + Location string + Version plugin.VersionType + Commands []plugin.Command +} + +func NewData() *PluginData { + return &PluginData{ + Plugins: make(map[string]PluginMetadata), + } +} + +func (pd *PluginData) JSONMarshalV3() (output []byte, err error) { + return json.MarshalIndent(pd, "", " ") +} + +func (pd *PluginData) JSONUnmarshalV3(input []byte) (err error) { + return json.Unmarshal(input, pd) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/access_denied_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/access_denied_error.go similarity index 86% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/access_denied_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/access_denied_error.go index f3d693e..36fb366 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/access_denied_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/access_denied_error.go @@ -1,6 +1,6 @@ package errors -import . "github.com/cloudfoundry/cli/cf/i18n" +import . "code.cloudfoundry.org/cli/cf/i18n" type AccessDeniedError struct { } diff --git a/vendor/code.cloudfoundry.org/cli/cf/errors/cloud_controller_error_codes.go b/vendor/code.cloudfoundry.org/cli/cf/errors/cloud_controller_error_codes.go new file mode 100644 index 0000000..c1ead47 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/cloud_controller_error_codes.go @@ -0,0 +1,21 @@ +package errors + +const ( + MessageParseError = "1001" + InvalidRelation = "1002" + NotAuthorized = "10003" + BadQueryParameter = "10005" + UserNotFound = "20003" + OrganizationNameTaken = "30002" + SpaceNameTaken = "40002" + ServiceInstanceNameTaken = "60002" + ServiceBindingAppServiceTaken = "90003" + UnbindableService = "90005" + ServiceInstanceAlreadyBoundToSameRoute = "130008" + NotStaged = "170002" + InstancesError = "220001" + QuotaDefinitionNameTaken = "240002" + BuildpackNameTaken = "290001" + SecurityGroupNameTaken = "300005" + ServiceKeyNameTaken = "360001" +) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/empty_dir_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/empty_dir_error.go similarity index 84% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/empty_dir_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/empty_dir_error.go index 8be2530..8cca87a 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/empty_dir_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/empty_dir_error.go @@ -1,7 +1,7 @@ package errors import ( - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) type EmptyDirError struct { diff --git a/vendor/code.cloudfoundry.org/cli/cf/errors/error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/error.go new file mode 100644 index 0000000..c92a96e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/error.go @@ -0,0 +1,7 @@ +package errors + +import original "errors" + +func New(message string) error { + return original.New(message) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/exception.go b/vendor/code.cloudfoundry.org/cli/cf/errors/exception.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/exception.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/exception.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/gateway_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/gateway_error.go similarity index 89% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/gateway_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/gateway_error.go index 6eb6b48..22d908b 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/gateway_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/gateway_error.go @@ -2,7 +2,8 @@ package errors import ( "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" + + . "code.cloudfoundry.org/cli/cf/i18n" ) type AsyncTimeoutError struct { diff --git a/vendor/code.cloudfoundry.org/cli/cf/errors/http_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/http_error.go new file mode 100644 index 0000000..1fac065 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/http_error.go @@ -0,0 +1,55 @@ +package errors + +import ( + "fmt" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +//go:generate counterfeiter . HTTPError + +type HTTPError interface { + Error() string + StatusCode() int // actual HTTP status code + ErrorCode() string // error code returned in response body from CC or UAA +} + +type baseHTTPError struct { + statusCode int + apiErrorCode string + description string +} + +type HTTPNotFoundError struct { + baseHTTPError +} + +func NewHTTPError(statusCode int, code string, description string) error { + err := baseHTTPError{ + statusCode: statusCode, + apiErrorCode: code, + description: description, + } + switch statusCode { + case 404: + return &HTTPNotFoundError{err} + default: + return &err + } +} + +func (err *baseHTTPError) StatusCode() int { + return err.statusCode +} + +func (err *baseHTTPError) Error() string { + return fmt.Sprintf(T("Server error, status code: {{.ErrStatusCode}}, error code: {{.ErrAPIErrorCode}}, message: {{.ErrDescription}}", + map[string]interface{}{"ErrStatusCode": err.statusCode, + "ErrAPIErrorCode": err.apiErrorCode, + "ErrDescription": err.description}), + ) +} + +func (err *baseHTTPError) ErrorCode() string { + return err.apiErrorCode +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/invalid_ssl_cert_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/invalid_ssl_cert_error.go similarity index 90% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/invalid_ssl_cert_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/invalid_ssl_cert_error.go index 154f398..70f81d7 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/invalid_ssl_cert_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/invalid_ssl_cert_error.go @@ -1,7 +1,7 @@ package errors import ( - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) type InvalidSSLCert struct { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/invalid_token_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/invalid_token_error.go similarity index 87% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/invalid_token_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/invalid_token_error.go index 13a2f5e..4860758 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/invalid_token_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/invalid_token_error.go @@ -1,7 +1,7 @@ package errors import ( - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) type InvalidTokenError struct { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/model_already_exists_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/model_already_exists_error.go similarity index 92% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/model_already_exists_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/model_already_exists_error.go index 7dfadee..ef8b832 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/model_already_exists_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/model_already_exists_error.go @@ -2,7 +2,8 @@ package errors import ( "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" + + . "code.cloudfoundry.org/cli/cf/i18n" ) type ModelAlreadyExistsError struct { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/model_not_found_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/model_not_found_error.go similarity index 89% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/model_not_found_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/model_not_found_error.go index b860bff..d416119 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/model_not_found_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/model_not_found_error.go @@ -1,7 +1,7 @@ package errors import ( - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) type ModelNotFoundError struct { diff --git a/vendor/code.cloudfoundry.org/cli/cf/errors/not_authorized_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/not_authorized_error.go new file mode 100644 index 0000000..4e9160b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/not_authorized_error.go @@ -0,0 +1,16 @@ +package errors + +import ( + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type NotAuthorizedError struct { +} + +func NewNotAuthorizedError() error { + return &NotAuthorizedError{} +} + +func (err *NotAuthorizedError) Error() string { + return T("Server error, status code: 403, error code: 10003, message: You are not authorized to perform the requested action") +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/service_association_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/service_association_error.go similarity index 87% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/service_association_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/service_association_error.go index b263fac..46e3b0a 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/service_association_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/service_association_error.go @@ -1,7 +1,7 @@ package errors import ( - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) type ServiceAssociationError struct { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/unbindable_service_error.go b/vendor/code.cloudfoundry.org/cli/cf/errors/unbindable_service_error.go similarity index 86% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/unbindable_service_error.go rename to vendor/code.cloudfoundry.org/cli/cf/errors/unbindable_service_error.go index 7362e09..35a788a 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/errors/unbindable_service_error.go +++ b/vendor/code.cloudfoundry.org/cli/cf/errors/unbindable_service_error.go @@ -1,7 +1,7 @@ package errors import ( - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) type UnbindableServiceError struct { diff --git a/Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/LICENSE b/vendor/code.cloudfoundry.org/cli/cf/flags/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/pivotal-cf-experimental/jibber_jabber/LICENSE rename to vendor/code.cloudfoundry.org/cli/cf/flags/LICENSE diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/README.md b/vendor/code.cloudfoundry.org/cli/cf/flags/README.md new file mode 100644 index 0000000..26fc468 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/README.md @@ -0,0 +1,95 @@ +# flags - Golang command-line flag parser +[![GoDoc](https://godoc.org/github.com/cloudfoundry/cli/cf/flags?status.svg)](https://godoc.org/github.com/cloudfoundry/cli/cf/flags) + +- Fully tested, reliable +- Support flag ShortName (Alias) +- Catches any non-defined flags, and any invalid flag values +- Flags can come before or after the arguments. The followings are all valid inputs: +```bash +$ testapp -i 100 -m 500 arg1 arg2 # flags go first +$ testapp arg1 arg2 --i 100 -m 500 # flags go last +$ testapp arg1 -i 100 arg2 -m=500 # flags go in between arguments +``` +The parsed results for all 3 statements are identical: `i=100`, `Args=[arg1, arg2]`, `m=500` + +# Installation +```bash +go get github.com/cloudfoundry/cli/cf/flags # installs the flags library +``` + +# Usage +```Go +package main + +import "github.com/cloudfoundry/cli/cf/flags" + +func main(){ + fc := flags.New() + fc.NewStringFlag("password", "p", "flag for password") //name, short_name and usage of the string flag + fc.Parse(os.Args...) //parse the OS arguments + println("Flag 'password' is set: ", fc.IsSet("s")) + println("Flag 'password' value: ", fc.String("s")) +} +``` +Running the above code +``` +$ main -password abc +Flag 'password' is set: true +Flag 'password' value: abc +``` + +# Available Flag Constructor +Flags: String, Int, float64, Bool, String Slice +```Go +NewStringFlag(name string, short_name string, usage string) +NewStringFlagWithDefault(name string, short_name string, usage string, value string) +NewIntFlag(name string, short_name string, usage string) +NewIntFlagWithDefault(name string, short_name string, usage string, value int) +NewFloat64Flag(name string, short_name string, usage string) +NewFloat64FlagWithDefault(name string, short_name string, usage string, value float64) +NewStringSliceFlag(name string, short_name string, usage string) //this flag can be supplied more than 1 time +NewStringSliceFlagWithDefault(name string, short_name string, usage string, value []string) +NewBoolFlag(name string, short_name string, usage string) +``` + +# Functions for flags/args reading +```Go +IsSet(flag_name string)bool +String(flag_name string)string +Int(flag_name string)int +Float64(flag_name string)float64 +Bool(flag_name string)bool +StringSlice(flag_name string)[]string +Args()[]string +``` + +# Parsing flags and arguments +```Go +Parse(args ...string)error //returns error for any non-defined flags & invalid value for Int, Float64 and Bool flag. +``` +Sample Code +```Go +fc := flags.New() +fc.NewIntFlag("i", "", "Int flag name i") //set up a Int flag '-i' +fc.NewBoolFlag("verbose", "v", "Bool flag name verbose") //set up a bool flag '-verbose' +err := fc.Parse(os.Args...) //Parse() returns any error it finds during parsing +If err != nil { + fmt.Println("Parsing error:", err) +} +fmt.Println("Args:", fc.Args()) //Args() returns an array of all the arguments +fmt.Println("Verbose:", fc.Bool("verbose")) +fmt.Println("i:", fc.Int("i")) +``` +Running above +```bash +$ app arg_1 -i 100 arg_2 -verbose # run the code +Args: [arg_1 arg_2] +Verbose: true +i: 100 +``` + +# Special function +```Go +SkipFlagParsing(bool) //if set to true, all flags become arguments +ShowUsage(leadingSpace int)string //string containing all the flags and their usage text +``` diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/backwards_compatibility.go b/vendor/code.cloudfoundry.org/cli/cf/flags/backwards_compatibility.go new file mode 100644 index 0000000..b12d149 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/backwards_compatibility.go @@ -0,0 +1,27 @@ +package flags + +type backwardsCompatibilityType int + +type BackwardsCompatibilityFlag struct{} + +func (f *BackwardsCompatibilityFlag) Set(v string) {} + +func (f *BackwardsCompatibilityFlag) String() string { + return "" +} + +func (f *BackwardsCompatibilityFlag) GetName() string { + return "" +} + +func (f *BackwardsCompatibilityFlag) GetShortName() string { + return "" +} + +func (f *BackwardsCompatibilityFlag) GetValue() interface{} { + return backwardsCompatibilityType(1) +} + +func (f *BackwardsCompatibilityFlag) Visible() bool { + return false +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/bool.go b/vendor/code.cloudfoundry.org/cli/cf/flags/bool.go new file mode 100644 index 0000000..dddef7f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/bool.go @@ -0,0 +1,36 @@ +package flags + +import "strconv" + +type BoolFlag struct { + Name string + Value bool + Usage string + ShortName string + Hidden bool +} + +func (f *BoolFlag) Set(v string) { + b, _ := strconv.ParseBool(v) + f.Value = b +} + +func (f *BoolFlag) String() string { + return f.Usage +} + +func (f *BoolFlag) GetName() string { + return f.Name +} + +func (f *BoolFlag) GetShortName() string { + return f.ShortName +} + +func (f *BoolFlag) GetValue() interface{} { + return f.Value +} + +func (f *BoolFlag) Visible() bool { + return !f.Hidden +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/flag_constructor.go b/vendor/code.cloudfoundry.org/cli/cf/flags/flag_constructor.go new file mode 100644 index 0000000..7ed73b9 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/flag_constructor.go @@ -0,0 +1,41 @@ +package flags + +func (c *flagContext) NewStringFlag(name string, shortName string, usage string) { + c.cmdFlags[name] = &StringFlag{Name: name, ShortName: shortName, Usage: usage} +} + +func (c *flagContext) NewStringFlagWithDefault(name string, shortName string, usage string, value string) { + c.cmdFlags[name] = &StringFlag{Name: name, ShortName: shortName, Value: value, Usage: usage} +} + +func (c *flagContext) NewBoolFlag(name string, shortName string, usage string) { + c.cmdFlags[name] = &BoolFlag{Name: name, ShortName: shortName, Usage: usage} +} + +func (c *flagContext) NewIntFlag(name string, shortName string, usage string) { + c.cmdFlags[name] = &IntFlag{Name: name, ShortName: shortName, Usage: usage} +} + +func (c *flagContext) NewIntFlagWithDefault(name string, shortName string, usage string, value int) { + c.cmdFlags[name] = &IntFlag{Name: name, ShortName: shortName, Value: value, Usage: usage} +} + +func (c *flagContext) NewFloat64Flag(name string, shortName string, usage string) { + c.cmdFlags[name] = &Float64Flag{Name: name, ShortName: shortName, Usage: usage} +} + +func (c *flagContext) NewFloat64FlagWithDefault(name string, shortName string, usage string, value float64) { + c.cmdFlags[name] = &Float64Flag{Name: name, ShortName: shortName, Value: value, Usage: usage} +} + +func (c *flagContext) NewStringSliceFlag(name string, shortName string, usage string) { + c.cmdFlags[name] = &StringSliceFlag{Name: name, ShortName: shortName, Usage: usage} +} + +func (c *flagContext) NewStringSliceFlagWithDefault(name string, shortName string, usage string, value []string) { + c.cmdFlags[name] = &StringSliceFlag{Name: name, ShortName: shortName, Value: value, Usage: usage} +} + +func (c *flagContext) NewBackwardsCompatibilityFlag(name string, shortName string, usage string) { + c.cmdFlags["name"] = &BackwardsCompatibilityFlag{} +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/flags.go b/vendor/code.cloudfoundry.org/cli/cf/flags/flags.go new file mode 100644 index 0000000..76234a7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/flags.go @@ -0,0 +1,293 @@ +package flags + +import ( + "errors" + "fmt" + "strconv" + "strings" +) + +type FlagSet interface { + fmt.Stringer + GetName() string + GetShortName() string + GetValue() interface{} + Set(string) + Visible() bool +} + +type FlagContext interface { + Parse(...string) error + Args() []string + Int(string) int + Float64(string) float64 + Bool(string) bool + String(string) string + StringSlice(string) []string + IsSet(string) bool + SkipFlagParsing(bool) + NewStringFlag(name string, shortName string, usage string) + NewStringFlagWithDefault(name string, shortName string, usage string, value string) + NewBoolFlag(name string, shortName string, usage string) + NewIntFlag(name string, shortName string, usage string) + NewIntFlagWithDefault(name string, shortName string, usage string, value int) + NewFloat64Flag(name string, shortName string, usage string) + NewFloat64FlagWithDefault(name string, shortName string, usage string, value float64) + NewStringSliceFlag(name string, shortName string, usage string) + NewStringSliceFlagWithDefault(name string, shortName string, usage string, value []string) + ShowUsage(leadingSpace int) string +} + +type flagContext struct { + flagsets map[string]FlagSet + args []string + cmdFlags map[string]FlagSet //valid flags for command + cursor int + skipFlagParsing bool +} + +func New() FlagContext { + return &flagContext{ + flagsets: make(map[string]FlagSet), + cmdFlags: make(map[string]FlagSet), + cursor: 0, + } +} + +func NewFlagContext(cmdFlags map[string]FlagSet) FlagContext { + return &flagContext{ + flagsets: make(map[string]FlagSet), + cmdFlags: cmdFlags, + cursor: 0, + } +} + +func (c *flagContext) Parse(args ...string) error { + c.setDefaultFlagValueIfAny() + + for c.cursor <= len(args)-1 { + arg := args[c.cursor] + + if !c.skipFlagParsing && (strings.HasPrefix(arg, "-") || strings.HasPrefix(arg, "--")) { + flg := strings.TrimLeft(strings.TrimLeft(arg, "-"), "-") + + c.extractEqualSignIfAny(&flg, &args) + + flagset, ok := c.cmdFlags[flg] + if !ok { + flg = c.getFlagNameWithShortName(flg) + if flagset, ok = c.cmdFlags[flg]; !ok { + return errors.New("Invalid flag: " + arg) + } + } + + switch flagset.GetValue().(type) { + case bool: + c.flagsets[flg] = &BoolFlag{Name: flg, Value: c.getBoolFlagValue(args)} + case int: + v, err := c.getFlagValue(args) + if err != nil { + return err + } + i, err := strconv.ParseInt(v, 10, 32) + if err != nil { + return errors.New("Value for flag '" + flg + "' must be an integer") + } + c.flagsets[flg] = &IntFlag{Name: flg, Value: int(i)} + case float64: + v, err := c.getFlagValue(args) + if err != nil { + return err + } + i, err := strconv.ParseFloat(v, 64) + if err != nil { + return errors.New("Value for flag '" + flg + "' must be a float64") + } + c.flagsets[flg] = &Float64Flag{Name: flg, Value: float64(i)} + case string: + v, err := c.getFlagValue(args) + if err != nil { + return err + } + c.flagsets[flg] = &StringFlag{Name: flg, Value: v} + case []string: + v, err := c.getFlagValue(args) + if err != nil { + return err + } + if _, ok = c.flagsets[flg]; !ok { + c.flagsets[flg] = &StringSliceFlag{Name: flg, Value: []string{v}} + } else { + c.flagsets[flg].Set(v) + } + case backwardsCompatibilityType: + // do nothing + } + } else { + c.args = append(c.args, args[c.cursor]) + } + c.cursor++ + } + return nil +} + +func (c *flagContext) getFlagValue(args []string) (string, error) { + if c.cursor >= len(args)-1 { + return "", errors.New("No value provided for flag: " + args[c.cursor]) + } + + c.cursor++ + return args[c.cursor], nil +} + +func (c *flagContext) getBoolFlagValue(args []string) bool { + if c.cursor >= len(args)-1 { + return true + } + + b, err := strconv.ParseBool(args[c.cursor+1]) + if err == nil { + c.cursor++ + return b + } + return true +} + +func (c *flagContext) Args() []string { + return c.args +} + +func (c *flagContext) IsSet(k string) bool { + return c.isFlagProvided(&k) +} + +func (c *flagContext) Int(k string) int { + if !c.isFlagProvided(&k) { + return 0 + } + + v := c.flagsets[k].GetValue() + switch v.(type) { + case int: + return v.(int) + } + + return 0 +} + +func (c *flagContext) Float64(k string) float64 { + if !c.isFlagProvided(&k) { + return 0 + } + + v := c.flagsets[k].GetValue() + switch v.(type) { + case float64: + return v.(float64) + } + return 0 +} + +func (c *flagContext) String(k string) string { + if !c.isFlagProvided(&k) { + return "" + } + + v := c.flagsets[k].GetValue() + switch v.(type) { + case string: + return v.(string) + } + return "" +} + +func (c *flagContext) Bool(k string) bool { + if !c.isFlagProvided(&k) { + return false + } + + v := c.flagsets[k].GetValue() + switch v.(type) { + case bool: + return v.(bool) + } + + return false +} + +func (c *flagContext) StringSlice(k string) []string { + if !c.isFlagProvided(&k) { + return []string{} + } + + v := c.flagsets[k].GetValue() + switch v.(type) { + case []string: + return v.([]string) + } + return []string{} +} + +func (c *flagContext) SkipFlagParsing(skip bool) { + c.skipFlagParsing = skip +} + +func (c *flagContext) extractEqualSignIfAny(flg *string, args *[]string) { + if strings.Contains(*flg, "=") { + tmpAry := strings.SplitN(*flg, "=", 2) + *flg = tmpAry[0] + tmpArg := append((*args)[:c.cursor], tmpAry[1]) + *args = append(tmpArg, (*args)[c.cursor:]...) + } +} + +func (c *flagContext) setDefaultFlagValueIfAny() { + var v interface{} + + for flgName, flg := range c.cmdFlags { + v = flg.GetValue() + switch v.(type) { + case bool: + if v.(bool) != false { + c.flagsets[flgName] = &BoolFlag{Name: flgName, Value: v.(bool)} + } + case int: + if v.(int) != 0 { + c.flagsets[flgName] = &IntFlag{Name: flgName, Value: v.(int)} + } + case float64: + if v.(float64) != 0 { + c.flagsets[flgName] = &Float64Flag{Name: flgName, Value: v.(float64)} + } + case string: + if len(v.(string)) != 0 { + c.flagsets[flgName] = &StringFlag{Name: flgName, Value: v.(string)} + } + case []string: + if len(v.([]string)) != 0 { + c.flagsets[flgName] = &StringSliceFlag{Name: flgName, Value: v.([]string)} + } + } + } + +} + +func (c *flagContext) getFlagNameWithShortName(shortName string) string { + for n, f := range c.cmdFlags { + if f.GetShortName() == shortName { + return n + } + } + return "" +} + +func (c *flagContext) isFlagProvided(flg *string) bool { + if _, ok := c.flagsets[*flg]; !ok { + *flg = c.getFlagNameWithShortName(*flg) + if _, ok := c.flagsets[*flg]; !ok { + return false + } + } + + return true +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/flags_usage.go b/vendor/code.cloudfoundry.org/cli/cf/flags/flags_usage.go new file mode 100644 index 0000000..8d825e3 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/flags_usage.go @@ -0,0 +1,106 @@ +package flags + +import ( + "fmt" + "sort" + "strings" +) + +func (c *flagContext) ShowUsage(leadingSpace int) string { + displayFlags := flags{} + + for _, f := range c.cmdFlags { + if !f.Visible() { + continue + } + + d := flagPresenter{ + flagSet: f, + } + + displayFlags = append(displayFlags, d) + } + + return displayFlags.toString(strings.Repeat(" ", leadingSpace)) +} + +type flagPresenter struct { + flagSet FlagSet +} + +func (p *flagPresenter) line(l int) string { + flagList := p.flagList() + usage := p.usage() + spaces := strings.Repeat(" ", 6+(l-len(flagList))) + + return strings.TrimRight(fmt.Sprintf("%s%s%s", flagList, spaces, usage), " ") +} + +func (p *flagPresenter) flagList() string { + f := p.flagSet + var parts []string + + if f.GetName() != "" { + parts = append(parts, fmt.Sprintf("--%s", f.GetName())) + } + + if f.GetShortName() != "" { + parts = append(parts, fmt.Sprintf("-%s", f.GetShortName())) + } + + return strings.Join(parts, ", ") +} + +func (p *flagPresenter) usage() string { + return p.flagSet.String() +} + +func (p *flagPresenter) comparableString() string { + if p.flagSet.GetName() != "" { + return p.flagSet.GetName() + } + + return p.flagSet.GetShortName() +} + +type flags []flagPresenter + +func (f flags) Len() int { + return len(f) +} + +func (f flags) Less(i, j int) bool { + return (f[i].comparableString() < f[j].comparableString()) +} + +func (f flags) Swap(i, j int) { + f[i], f[j] = f[j], f[i] +} + +func (f flags) toString(prefix string) string { + sort.Sort(f) + + lines := make([]string, f.Len()) + maxLength := f.maxLineLength() + + for i, l := range f { + lines[i] = fmt.Sprintf("%s%s", prefix, l.line(maxLength)) + } + + return strings.Join(lines, "\n") +} + +func (f flags) maxLineLength() int { + var l int + + for _, x := range f { + + lPrime := len(x.flagList()) + + if lPrime > l { + l = lPrime + } + } + + return l +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/float64.go b/vendor/code.cloudfoundry.org/cli/cf/flags/float64.go new file mode 100644 index 0000000..dd8abf8 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/float64.go @@ -0,0 +1,36 @@ +package flags + +import "strconv" + +type Float64Flag struct { + Name string + Value float64 + Usage string + ShortName string + Hidden bool +} + +func (f *Float64Flag) Set(v string) { + i, _ := strconv.ParseFloat(v, 64) + f.Value = i +} + +func (f *Float64Flag) String() string { + return f.Usage +} + +func (f *Float64Flag) GetName() string { + return f.Name +} + +func (f *Float64Flag) GetShortName() string { + return f.ShortName +} + +func (f *Float64Flag) GetValue() interface{} { + return f.Value +} + +func (f *Float64Flag) Visible() bool { + return !f.Hidden +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/int.go b/vendor/code.cloudfoundry.org/cli/cf/flags/int.go new file mode 100644 index 0000000..79e08cd --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/int.go @@ -0,0 +1,40 @@ +package flags + +import "strconv" + +type IntFlag struct { + Name string + Value int + Usage string + ShortName string + Hidden bool +} + +func (f *IntFlag) Set(v string) { + i, _ := strconv.ParseInt(v, 10, 32) + f.Value = int(i) +} + +func (f *IntFlag) String() string { + return f.Usage +} + +func (f *IntFlag) GetName() string { + return f.Name +} + +func (f *IntFlag) GetShortName() string { + return f.ShortName +} + +func (f *IntFlag) GetValue() interface{} { + return f.Value +} + +func (f *IntFlag) Visible() bool { + return !f.Hidden +} + +func (f *IntFlag) SetVisibility(v bool) { + f.Hidden = !v +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/string.go b/vendor/code.cloudfoundry.org/cli/cf/flags/string.go new file mode 100644 index 0000000..791d149 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/string.go @@ -0,0 +1,33 @@ +package flags + +type StringFlag struct { + Name string + Value string + Usage string + ShortName string + Hidden bool +} + +func (f *StringFlag) Set(v string) { + f.Value = v +} + +func (f *StringFlag) String() string { + return f.Usage +} + +func (f *StringFlag) GetName() string { + return f.Name +} + +func (f *StringFlag) GetShortName() string { + return f.ShortName +} + +func (f *StringFlag) GetValue() interface{} { + return f.Value +} + +func (f *StringFlag) Visible() bool { + return !f.Hidden +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/flags/stringSlice.go b/vendor/code.cloudfoundry.org/cli/cf/flags/stringSlice.go new file mode 100644 index 0000000..bac7987 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/flags/stringSlice.go @@ -0,0 +1,34 @@ +package flags + +//StringSlice flag can be define multiple times in the arguments +type StringSliceFlag struct { + Name string + Value []string + Usage string + ShortName string + Hidden bool +} + +func (f *StringSliceFlag) Set(v string) { + f.Value = append(f.Value, v) +} + +func (f *StringSliceFlag) String() string { + return f.Usage +} + +func (f *StringSliceFlag) GetName() string { + return f.Name +} + +func (f *StringSliceFlag) GetShortName() string { + return f.ShortName +} + +func (f *StringSliceFlag) GetValue() interface{} { + return f.Value +} + +func (f *StringSliceFlag) Visible() bool { + return !f.Hidden +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/formatters/bools.go b/vendor/code.cloudfoundry.org/cli/cf/formatters/bools.go new file mode 100644 index 0000000..4ce3d0c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/formatters/bools.go @@ -0,0 +1,12 @@ +package formatters + +import ( + . "code.cloudfoundry.org/cli/cf/i18n" +) + +func Allowed(allowed bool) string { + if allowed { + return T("allowed") + } + return T("disallowed") +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bytes.go b/vendor/code.cloudfoundry.org/cli/cf/formatters/bytes.go similarity index 91% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bytes.go rename to vendor/code.cloudfoundry.org/cli/cf/formatters/bytes.go index 4957fa3..bdd76a6 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/bytes.go +++ b/vendor/code.cloudfoundry.org/cli/cf/formatters/bytes.go @@ -7,7 +7,7 @@ import ( "strconv" "strings" - . "github.com/cloudfoundry/cli/cf/i18n" + . "code.cloudfoundry.org/cli/cf/i18n" ) const ( @@ -37,6 +37,8 @@ func ByteSize(bytes int64) string { value = value / KILOBYTE case bytes == 0: return "0" + case bytes < KILOBYTE: + unit = "B" } stringValue := fmt.Sprintf("%.1f", value) @@ -72,7 +74,7 @@ func ToMegabytes(s string) (int64, error) { } var ( - bytesPattern *regexp.Regexp = regexp.MustCompile(`(?i)^(-?\d+)([KMGT])B?$`) + bytesPattern = regexp.MustCompile(`(?i)^(-?\d+)([KMGT])B?$`) ) func invalidByteQuantityError() error { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/memoryLimit.go b/vendor/code.cloudfoundry.org/cli/cf/formatters/memoryLimit.go similarity index 87% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/memoryLimit.go rename to vendor/code.cloudfoundry.org/cli/cf/formatters/memoryLimit.go index 3fa15d4..8017ea8 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/memoryLimit.go +++ b/vendor/code.cloudfoundry.org/cli/cf/formatters/memoryLimit.go @@ -4,7 +4,7 @@ import "strconv" func InstanceMemoryLimit(limit int64) string { if limit == -1 { - return "Unlimited" + return "unlimited" } return strconv.FormatInt(limit, 10) + "M" diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/string.go b/vendor/code.cloudfoundry.org/cli/cf/formatters/string.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/formatters/string.go rename to vendor/code.cloudfoundry.org/cli/cf/formatters/string.go diff --git a/vendor/code.cloudfoundry.org/cli/cf/i18n/README-i18n.md b/vendor/code.cloudfoundry.org/cli/cf/i18n/README-i18n.md new file mode 100644 index 0000000..ce4d105 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/i18n/README-i18n.md @@ -0,0 +1,48 @@ +# CLI i18n Support + +The CLI currently supports a variety of languages. These translations can be accessed by setting either LC_ALL or LANG in your environment, or by setting your locale within the cli via `cf config -locale your_LOCALE # (e.g. fr_FR)`. + +Translations only affect messages generated by the CLI. Responses from server side components (Cloud Controller, etc.) will be internationalized separately and are likely to be English. + +If you are interested in submitting translations for a currently unsupported language/locale, please communicate with us via the [cf-dev](https://lists.cloudfoundry.org/archives/list/cf-dev@lists.cloudfoundry.org/) mailing list. + +## How can you contribute? + +If you see typos, errors in grammar, ambiguous strings or English after setting your locale, please find the appropriate entry in the corresponding `cf/i18n/resources/_.all.json` file and submit a [pull request](https://help.github.com/articles/creating-a-pull-request/) with the fix(es). It is much better to submit small pull requests as you complete translations, rather than submitting a large one. This makes it much easier to rapidly merge your changes in. You can also report translations needing fixes as an issue in Github. + +Pull requests should only contain changes to "translation" values; the "id" value should not change as it is the key which is used to find the translations, and will always be English. For example: + +Given a missing translation for "Create an org": +``` +[ + { + "id":"Create an org", + "translation":"" + }, + ... +] +``` + +Adding the translation would look like: +``` +[ + { + "id":"Create an org", + "translation":"Créez un org" + }, + ... +] +``` + +Finally, it is also important not to translate the argument names in templated strings. Templated strings are the ones which contain arguments, e.g., `{{.Name}}` or `{{.Username}}` and so on. The arguments can move to a different location on the translated string, however, the arguments cannot change, should not be translated, and should not be removed or new ones added. So for instance, the following string is translated in French as follows: + +``` +[ + ..., + { + "id": "Creating quota {{.QuotaName}} as {{.Username}}...", + "translation": "Créez quota {{.QuotaName}} étant {{.Username}}..." + }, + ... +] +``` diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/excluded.json b/vendor/code.cloudfoundry.org/cli/cf/i18n/excluded.json similarity index 97% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/excluded.json rename to vendor/code.cloudfoundry.org/cli/cf/i18n/excluded.json index efaa032..ede5b16 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/i18n/excluded.json +++ b/vendor/code.cloudfoundry.org/cli/cf/i18n/excluded.json @@ -7,7 +7,7 @@ "\n\t", "extract_strings", "excluded.json", - "gi18n", + "i18n4go", ".en.json", ".extracted.json", "recursive:", diff --git a/vendor/code.cloudfoundry.org/cli/cf/i18n/i18n.go b/vendor/code.cloudfoundry.org/cli/cf/i18n/i18n.go new file mode 100644 index 0000000..ebc40e0 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/i18n/i18n.go @@ -0,0 +1,86 @@ +package i18n + +import ( + "fmt" + "os" + "path" + "strings" + + "code.cloudfoundry.org/cli/cf/resources" + go_i18n "github.com/nicksnyder/go-i18n/i18n" + "github.com/nicksnyder/go-i18n/i18n/language" +) + +const ( + defaultLocale = "en-us" + lang = "LANG" + lcAll = "LC_ALL" + resourceSuffix = ".all.json" + zhTW = "zh-tw" + zhHK = "zh-hk" + zhHant = "zh-hant" + hyphen = "-" + underscore = "_" +) + +var T go_i18n.TranslateFunc + +type LocalReader interface { + Locale() string +} + +func Init(config LocalReader) go_i18n.TranslateFunc { + loadAsset("cf/i18n/resources/" + defaultLocale + resourceSuffix) + defaultTfunc := go_i18n.MustTfunc(defaultLocale) + + assetNames := resources.AssetNames() + + sources := []string{ + config.Locale(), + os.Getenv(lcAll), + os.Getenv(lang), + } + + for _, source := range sources { + if source == "" { + continue + } + + for _, l := range language.Parse(source) { + if l.Tag == zhTW || l.Tag == zhHK { + l.Tag = zhHant + } + + for _, assetName := range assetNames { + assetLocale := strings.ToLower(strings.Replace(path.Base(assetName), underscore, hyphen, -1)) + if strings.HasPrefix(assetLocale, l.Tag) { + loadAsset(assetName) + + t := go_i18n.MustTfunc(l.Tag) + + return func(translationID string, args ...interface{}) string { + if translated := t(translationID, args...); translated != translationID { + return translated + } + + return defaultTfunc(translationID, args...) + } + } + } + } + } + + return defaultTfunc +} + +func loadAsset(assetName string) { + assetBytes, err := resources.Asset(assetName) + if err != nil { + panic(fmt.Sprintf("Could not load asset '%s': %s", assetName, err.Error())) + } + + err = go_i18n.ParseTranslationFileBytes(assetName, assetBytes) + if err != nil { + panic(fmt.Sprintf("Could not load translations '%s': %s", assetName, err.Error())) + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/i18n/locale.go b/vendor/code.cloudfoundry.org/cli/cf/i18n/locale.go new file mode 100644 index 0000000..4dc3027 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/i18n/locale.go @@ -0,0 +1,55 @@ +package i18n + +import ( + "path" + "strings" + + "code.cloudfoundry.org/cli/cf/resources" + "github.com/nicksnyder/go-i18n/i18n/language" +) + +func SupportedLocales() []string { + languages := supportedLanguages() + localeNames := make([]string, len(languages)) + + for i, l := range languages { + localeParts := strings.Split(l.String(), "-") + lang := localeParts[0] + regionOrScript := localeParts[1] + + switch len(regionOrScript) { + case 2: // Region + localeNames[i] = lang + "-" + strings.ToUpper(regionOrScript) + case 4: // Script + localeNames[i] = lang + "-" + strings.Title(regionOrScript) + default: + localeNames[i] = l.String() + } + } + + return localeNames +} + +func IsSupportedLocale(locale string) bool { + for _, supportedLanguage := range supportedLanguages() { + for _, l := range language.Parse(locale) { + if supportedLanguage.String() == l.String() { + return true + } + } + } + + return false +} + +func supportedLanguages() []*language.Language { + assetNames := resources.AssetNames() + languages := []*language.Language{} + + for _, assetName := range assetNames { + assetLocale := strings.TrimSuffix(path.Base(assetName), resourceSuffix) + languages = append(languages, language.Parse(assetLocale)...) + } + + return languages +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/example_manifest.yml b/vendor/code.cloudfoundry.org/cli/cf/manifest/example_manifest.yml similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/manifest/example_manifest.yml rename to vendor/code.cloudfoundry.org/cli/cf/manifest/example_manifest.yml diff --git a/vendor/code.cloudfoundry.org/cli/cf/manifest/generate_manifest.go b/vendor/code.cloudfoundry.org/cli/cf/manifest/generate_manifest.go new file mode 100644 index 0000000..7b2fb58 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/manifest/generate_manifest.go @@ -0,0 +1,247 @@ +package manifest + +import ( + "errors" + "fmt" + + "code.cloudfoundry.org/cli/cf/models" + + "gopkg.in/yaml.v2" + + "io" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +//go:generate counterfeiter . App + +type App interface { + BuildpackURL(string, string) + DiskQuota(string, int64) + Memory(string, int64) + Service(string, string) + StartCommand(string, string) + EnvironmentVars(string, string, string) + HealthCheckTimeout(string, int) + Instances(string, int) + Route(string, string, string, string, int) + GetContents() []models.Application + Stack(string, string) + AppPorts(string, []int) + Save(f io.Writer) error +} + +type Application struct { + Name string `yaml:"name"` + Instances int `yaml:"instances,omitempty"` + Memory string `yaml:"memory,omitempty"` + DiskQuota string `yaml:"disk_quota,omitempty"` + AppPorts []int `yaml:"app-ports,omitempty"` + Routes []map[string]string `yaml:"routes,omitempty"` + NoRoute bool `yaml:"no-route,omitempty"` + Buildpack string `yaml:"buildpack,omitempty"` + Command string `yaml:"command,omitempty"` + Env map[string]interface{} `yaml:"env,omitempty"` + Services []string `yaml:"services,omitempty"` + Stack string `yaml:"stack,omitempty"` + Timeout int `yaml:"timeout,omitempty"` +} + +type Applications struct { + Applications []Application `yaml:"applications"` +} + +type appManifest struct { + contents []models.Application +} + +func NewGenerator() App { + return &appManifest{} +} + +func (m *appManifest) Stack(appName string, stackName string) { + i := m.findOrCreateApplication(appName) + m.contents[i].Stack = &models.Stack{ + Name: stackName, + } +} + +func (m *appManifest) Memory(appName string, memory int64) { + i := m.findOrCreateApplication(appName) + m.contents[i].Memory = memory +} + +func (m *appManifest) DiskQuota(appName string, diskQuota int64) { + i := m.findOrCreateApplication(appName) + m.contents[i].DiskQuota = diskQuota +} + +func (m *appManifest) StartCommand(appName string, cmd string) { + i := m.findOrCreateApplication(appName) + m.contents[i].Command = cmd +} + +func (m *appManifest) BuildpackURL(appName string, url string) { + i := m.findOrCreateApplication(appName) + m.contents[i].BuildpackURL = url +} + +func (m *appManifest) HealthCheckTimeout(appName string, timeout int) { + i := m.findOrCreateApplication(appName) + m.contents[i].HealthCheckTimeout = timeout +} + +func (m *appManifest) Instances(appName string, instances int) { + i := m.findOrCreateApplication(appName) + m.contents[i].InstanceCount = instances +} + +func (m *appManifest) Service(appName string, name string) { + i := m.findOrCreateApplication(appName) + m.contents[i].Services = append(m.contents[i].Services, models.ServicePlanSummary{ + GUID: "", + Name: name, + }) +} + +func (m *appManifest) Route(appName, host, domain, path string, port int) { + i := m.findOrCreateApplication(appName) + m.contents[i].Routes = append(m.contents[i].Routes, models.RouteSummary{ + Host: host, + Domain: models.DomainFields{ + Name: domain, + }, + Path: path, + Port: port, + }) + +} + +func (m *appManifest) EnvironmentVars(appName string, key, value string) { + i := m.findOrCreateApplication(appName) + m.contents[i].EnvironmentVars[key] = value +} + +func (m *appManifest) AppPorts(appName string, appPorts []int) { + i := m.findOrCreateApplication(appName) + m.contents[i].AppPorts = appPorts +} + +func (m *appManifest) GetContents() []models.Application { + return m.contents +} + +func generateAppMap(app models.Application) (Application, error) { + if app.Stack == nil { + return Application{}, errors.New(T("required attribute 'stack' missing")) + } + + if app.Memory == 0 { + return Application{}, errors.New(T("required attribute 'memory' missing")) + } + + if app.DiskQuota == 0 { + return Application{}, errors.New(T("required attribute 'disk_quota' missing")) + } + + if app.InstanceCount == 0 { + return Application{}, errors.New(T("required attribute 'instances' missing")) + } + + var services []string + for _, s := range app.Services { + services = append(services, s.Name) + } + + var routes []map[string]string + for _, routeSummary := range app.Routes { + routes = append(routes, buildRoute(routeSummary)) + } + m := Application{ + Name: app.Name, + Services: services, + Buildpack: app.BuildpackURL, + Memory: fmt.Sprintf("%dM", app.Memory), + Command: app.Command, + Env: app.EnvironmentVars, + Timeout: app.HealthCheckTimeout, + Instances: app.InstanceCount, + DiskQuota: fmt.Sprintf("%dM", app.DiskQuota), + Stack: app.Stack.Name, + AppPorts: app.AppPorts, + Routes: routes, + } + + if len(app.Routes) == 0 { + m.NoRoute = true + + } + + return m, nil +} + +func (m *appManifest) Save(f io.Writer) error { + apps := Applications{} + + for _, app := range m.contents { + appMap, mapErr := generateAppMap(app) + if mapErr != nil { + return fmt.Errorf(T("Error saving manifest: {{.Error}}", map[string]interface{}{ + "Error": mapErr.Error(), + })) + } + apps.Applications = append(apps.Applications, appMap) + } + + contents, err := yaml.Marshal(apps) + if err != nil { + return err + } + + _, err = f.Write(contents) + if err != nil { + return err + } + + return nil +} + +func buildRoute(routeSummary models.RouteSummary) map[string]string { + var route string + if routeSummary.Host != "" { + route = fmt.Sprintf("%s.", routeSummary.Host) + } + + route = fmt.Sprintf("%s%s", route, routeSummary.Domain.Name) + + if routeSummary.Path != "" { + route = fmt.Sprintf("%s%s", route, routeSummary.Path) + } + + if routeSummary.Port != 0 { + route = fmt.Sprintf("%s:%d", route, routeSummary.Port) + } + + return map[string]string{ + "route": route, + } +} + +func (m *appManifest) findOrCreateApplication(name string) int { + for i, app := range m.contents { + if app.Name == name { + return i + } + } + m.addApplication(name) + return len(m.contents) - 1 +} + +func (m *appManifest) addApplication(name string) { + m.contents = append(m.contents, models.Application{ + ApplicationFields: models.ApplicationFields{ + Name: name, + EnvironmentVars: make(map[string]interface{}), + }, + }) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/manifest/manifest.go b/vendor/code.cloudfoundry.org/cli/cf/manifest/manifest.go new file mode 100644 index 0000000..c554a6f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/manifest/manifest.go @@ -0,0 +1,527 @@ +package manifest + +import ( + "errors" + "fmt" + "path/filepath" + "regexp" + "strconv" + "strings" + + . "code.cloudfoundry.org/cli/cf/i18n" + + "code.cloudfoundry.org/cli/cf/formatters" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/util/generic" + "code.cloudfoundry.org/cli/util/words/generator" +) + +type Manifest struct { + Path string + Data generic.Map +} + +func NewEmptyManifest() (m *Manifest) { + return &Manifest{Data: generic.NewMap()} +} + +func (m Manifest) Applications() ([]models.AppParams, error) { + rawData, err := expandProperties(m.Data, generator.NewWordGenerator()) + if err != nil { + return []models.AppParams{}, err + } + + data := generic.NewMap(rawData) + appMaps, err := m.getAppMaps(data) + if err != nil { + return []models.AppParams{}, err + } + + var apps []models.AppParams + var mapToAppErrs []error + for _, appMap := range appMaps { + app, err := mapToAppParams(filepath.Dir(m.Path), appMap) + if err != nil { + mapToAppErrs = append(mapToAppErrs, err) + continue + } + + apps = append(apps, app) + } + + if len(mapToAppErrs) > 0 { + message := "" + for i := range mapToAppErrs { + message = message + fmt.Sprintf("%s\n", mapToAppErrs[i].Error()) + } + return []models.AppParams{}, errors.New(message) + } + + return apps, nil +} + +func (m Manifest) getAppMaps(data generic.Map) ([]generic.Map, error) { + globalProperties := data.Except([]interface{}{"applications"}) + + var apps []generic.Map + var errs []error + if data.Has("applications") { + appMaps, ok := data.Get("applications").([]interface{}) + if !ok { + return []generic.Map{}, errors.New(T("Expected applications to be a list")) + } + + for _, appData := range appMaps { + if !generic.IsMappable(appData) { + errs = append(errs, fmt.Errorf(T("Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", + map[string]interface{}{"YmlSnippet": appData}))) + continue + } + + appMap := generic.DeepMerge(globalProperties, generic.NewMap(appData)) + apps = append(apps, appMap) + } + } else { + apps = append(apps, globalProperties) + } + + if len(errs) > 0 { + message := "" + for i := range errs { + message = message + fmt.Sprintf("%s\n", errs[i].Error()) + } + return []generic.Map{}, errors.New(message) + } + + return apps, nil +} + +var propertyRegex = regexp.MustCompile(`\${[\w-]+}`) + +func expandProperties(input interface{}, babbler generator.WordGenerator) (interface{}, error) { + var errs []error + var output interface{} + + switch input := input.(type) { + case string: + match := propertyRegex.FindStringSubmatch(input) + if match != nil { + if match[0] == "${random-word}" { + output = strings.Replace(input, "${random-word}", strings.ToLower(babbler.Babble()), -1) + } else { + err := fmt.Errorf(T("Property '{{.PropertyName}}' found in manifest. This feature is no longer supported. Please remove it and try again.", + map[string]interface{}{"PropertyName": match[0]})) + errs = append(errs, err) + } + } else { + output = input + } + case []interface{}: + outputSlice := make([]interface{}, len(input)) + for index, item := range input { + itemOutput, itemErr := expandProperties(item, babbler) + if itemErr != nil { + errs = append(errs, itemErr) + break + } + outputSlice[index] = itemOutput + } + output = outputSlice + case map[interface{}]interface{}: + outputMap := make(map[interface{}]interface{}) + for key, value := range input { + itemOutput, itemErr := expandProperties(value, babbler) + if itemErr != nil { + errs = append(errs, itemErr) + break + } + outputMap[key] = itemOutput + } + output = outputMap + case generic.Map: + outputMap := generic.NewMap() + generic.Each(input, func(key, value interface{}) { + itemOutput, itemErr := expandProperties(value, babbler) + if itemErr != nil { + errs = append(errs, itemErr) + return + } + outputMap.Set(key, itemOutput) + }) + output = outputMap + default: + output = input + } + + if len(errs) > 0 { + message := "" + for _, err := range errs { + message = message + fmt.Sprintf("%s\n", err.Error()) + } + return nil, errors.New(message) + } + + return output, nil +} + +func mapToAppParams(basePath string, yamlMap generic.Map) (models.AppParams, error) { + err := checkForNulls(yamlMap) + if err != nil { + return models.AppParams{}, err + } + + var appParams models.AppParams + var errs []error + appParams.BuildpackURL = stringValOrDefault(yamlMap, "buildpack", &errs) + appParams.DiskQuota = bytesVal(yamlMap, "disk_quota", &errs) + + domainAry := sliceOrNil(yamlMap, "domains", &errs) + if domain := stringVal(yamlMap, "domain", &errs); domain != nil { + if domainAry == nil { + domainAry = []string{*domain} + } else { + domainAry = append(domainAry, *domain) + } + } + appParams.Domains = removeDuplicatedValue(domainAry) + + hostsArr := sliceOrNil(yamlMap, "hosts", &errs) + if host := stringVal(yamlMap, "host", &errs); host != nil { + hostsArr = append(hostsArr, *host) + } + appParams.Hosts = removeDuplicatedValue(hostsArr) + + appParams.Name = stringVal(yamlMap, "name", &errs) + appParams.Path = stringVal(yamlMap, "path", &errs) + appParams.StackName = stringVal(yamlMap, "stack", &errs) + appParams.Command = stringValOrDefault(yamlMap, "command", &errs) + appParams.Memory = bytesVal(yamlMap, "memory", &errs) + appParams.InstanceCount = intVal(yamlMap, "instances", &errs) + appParams.HealthCheckTimeout = intVal(yamlMap, "timeout", &errs) + appParams.NoRoute = boolVal(yamlMap, "no-route", &errs) + appParams.NoHostname = boolOrNil(yamlMap, "no-hostname", &errs) + appParams.UseRandomRoute = boolVal(yamlMap, "random-route", &errs) + appParams.ServicesToBind = sliceOrNil(yamlMap, "services", &errs) + appParams.EnvironmentVars = envVarOrEmptyMap(yamlMap, &errs) + appParams.HealthCheckType = stringVal(yamlMap, "health-check-type", &errs) + appParams.AppPorts = intSliceVal(yamlMap, "app-ports", &errs) + appParams.Routes = parseRoutes(yamlMap, &errs) + + if appParams.Path != nil { + path := *appParams.Path + if filepath.IsAbs(path) { + path = filepath.Clean(path) + } else { + path = filepath.Join(basePath, path) + } + appParams.Path = &path + } + + if len(errs) > 0 { + message := "" + for _, err := range errs { + message = message + fmt.Sprintf("%s\n", err.Error()) + } + return models.AppParams{}, errors.New(message) + } + + return appParams, nil +} + +func removeDuplicatedValue(ary []string) []string { + if ary == nil { + return nil + } + + m := make(map[string]bool) + for _, v := range ary { + m[v] = true + } + + newAry := []string{} + for _, val := range ary { + if m[val] { + newAry = append(newAry, val) + m[val] = false + } + } + return newAry +} + +func checkForNulls(yamlMap generic.Map) error { + var errs []error + generic.Each(yamlMap, func(key interface{}, value interface{}) { + if key == "command" || key == "buildpack" { + return + } + if value == nil { + errs = append(errs, fmt.Errorf(T("{{.PropertyName}} should not be null", map[string]interface{}{"PropertyName": key}))) + } + }) + + if len(errs) > 0 { + message := "" + for i := range errs { + message = message + fmt.Sprintf("%s\n", errs[i].Error()) + } + return errors.New(message) + } + + return nil +} + +func stringVal(yamlMap generic.Map, key string, errs *[]error) *string { + val := yamlMap.Get(key) + if val == nil { + return nil + } + result, ok := val.(string) + if !ok { + *errs = append(*errs, fmt.Errorf(T("{{.PropertyName}} must be a string value", map[string]interface{}{"PropertyName": key}))) + return nil + } + return &result +} + +func stringValOrDefault(yamlMap generic.Map, key string, errs *[]error) *string { + if !yamlMap.Has(key) { + return nil + } + empty := "" + switch val := yamlMap.Get(key).(type) { + case string: + if val == "default" { + return &empty + } + return &val + case nil: + return &empty + default: + *errs = append(*errs, fmt.Errorf(T("{{.PropertyName}} must be a string or null value", map[string]interface{}{"PropertyName": key}))) + return nil + } +} + +func bytesVal(yamlMap generic.Map, key string, errs *[]error) *int64 { + yamlVal := yamlMap.Get(key) + if yamlVal == nil { + return nil + } + + stringVal := coerceToString(yamlVal) + value, err := formatters.ToMegabytes(stringVal) + if err != nil { + *errs = append(*errs, fmt.Errorf(T("Invalid value for '{{.PropertyName}}': {{.StringVal}}\n{{.Error}}", + map[string]interface{}{ + "PropertyName": key, + "Error": err.Error(), + "StringVal": stringVal, + }))) + return nil + } + return &value +} + +func intVal(yamlMap generic.Map, key string, errs *[]error) *int { + var ( + intVal int + err error + ) + + switch val := yamlMap.Get(key).(type) { + case string: + intVal, err = strconv.Atoi(val) + case int: + intVal = val + case int64: + intVal = int(val) + case nil: + return nil + default: + err = fmt.Errorf(T("Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", + map[string]interface{}{"PropertyName": key, "PropertyType": val})) + } + + if err != nil { + *errs = append(*errs, err) + return nil + } + + return &intVal +} + +func coerceToString(value interface{}) string { + return fmt.Sprintf("%v", value) +} + +func boolVal(yamlMap generic.Map, key string, errs *[]error) bool { + switch val := yamlMap.Get(key).(type) { + case nil: + return false + case bool: + return val + case string: + return val == "true" + default: + *errs = append(*errs, fmt.Errorf(T("Expected {{.PropertyName}} to be a boolean.", map[string]interface{}{"PropertyName": key}))) + return false + } +} + +func boolOrNil(yamlMap generic.Map, key string, errs *[]error) *bool { + result := false + switch val := yamlMap.Get(key).(type) { + case nil: + return nil + case bool: + return &val + case string: + result = val == "true" + return &result + default: + *errs = append(*errs, fmt.Errorf(T("Expected {{.PropertyName}} to be a boolean.", map[string]interface{}{"PropertyName": key}))) + return &result + } +} +func sliceOrNil(yamlMap generic.Map, key string, errs *[]error) []string { + if !yamlMap.Has(key) { + return nil + } + + var err error + stringSlice := []string{} + + sliceErr := fmt.Errorf(T("Expected {{.PropertyName}} to be a list of strings.", map[string]interface{}{"PropertyName": key})) + + switch input := yamlMap.Get(key).(type) { + case []interface{}: + for _, value := range input { + stringValue, ok := value.(string) + if !ok { + err = sliceErr + break + } + stringSlice = append(stringSlice, stringValue) + } + default: + err = sliceErr + } + + if err != nil { + *errs = append(*errs, err) + return []string{} + } + + return stringSlice +} + +func intSliceVal(yamlMap generic.Map, key string, errs *[]error) *[]int { + if !yamlMap.Has(key) { + return nil + } + + err := fmt.Errorf(T("Expected {{.PropertyName}} to be a list of integers.", map[string]interface{}{"PropertyName": key})) + + s, ok := yamlMap.Get(key).([]interface{}) + + if !ok { + *errs = append(*errs, err) + return nil + } + + var intSlice []int + + for _, el := range s { + intValue, ok := el.(int) + + if !ok { + *errs = append(*errs, err) + return nil + } + + intSlice = append(intSlice, intValue) + } + + return &intSlice +} + +func envVarOrEmptyMap(yamlMap generic.Map, errs *[]error) *map[string]interface{} { + key := "env" + switch envVars := yamlMap.Get(key).(type) { + case nil: + aMap := make(map[string]interface{}, 0) + return &aMap + case map[string]interface{}: + yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) + return envVarOrEmptyMap(yamlMap, errs) + case map[interface{}]interface{}: + yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) + return envVarOrEmptyMap(yamlMap, errs) + case generic.Map: + merrs := validateEnvVars(envVars) + if merrs != nil { + *errs = append(*errs, merrs...) + return nil + } + + result := make(map[string]interface{}, envVars.Count()) + generic.Each(envVars, func(key, value interface{}) { + result[key.(string)] = interfaceToString(value) + }) + + return &result + default: + *errs = append(*errs, fmt.Errorf(T("Expected {{.Name}} to be a set of key => value, but it was a {{.Type}}.", + map[string]interface{}{"Name": key, "Type": envVars}))) + return nil + } +} + +func validateEnvVars(input generic.Map) (errs []error) { + generic.Each(input, func(key, value interface{}) { + if value == nil { + errs = append(errs, fmt.Errorf(T("env var '{{.PropertyName}}' should not be null", + map[string]interface{}{"PropertyName": key}))) + } + }) + return +} + +func interfaceToString(value interface{}) string { + if f, ok := value.(float64); ok { + return strconv.FormatFloat(f, 'f', -1, 64) + } + + return fmt.Sprint(value) +} + +func parseRoutes(input generic.Map, errs *[]error) []models.ManifestRoute { + if !input.Has("routes") { + return nil + } + + genericRoutes, ok := input.Get("routes").([]interface{}) + if !ok { + *errs = append(*errs, fmt.Errorf(T("'routes' should be a list"))) + return nil + } + + manifestRoutes := []models.ManifestRoute{} + for _, genericRoute := range genericRoutes { + route, ok := genericRoute.(map[interface{}]interface{}) + if !ok { + *errs = append(*errs, fmt.Errorf(T("each route in 'routes' must have a 'route' property"))) + continue + } + + if routeVal, exist := route["route"]; exist { + manifestRoutes = append(manifestRoutes, models.ManifestRoute{ + Route: routeVal.(string), + }) + } else { + *errs = append(*errs, fmt.Errorf(T("each route in 'routes' must have a 'route' property"))) + } + } + + return manifestRoutes +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/manifest/manifest_disk_repository.go b/vendor/code.cloudfoundry.org/cli/cf/manifest/manifest_disk_repository.go new file mode 100644 index 0000000..a4a49b2 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/manifest/manifest_disk_repository.go @@ -0,0 +1,126 @@ +package manifest + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/util/generic" + "gopkg.in/yaml.v2" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + ReadManifest(string) (*Manifest, error) +} + +type DiskRepository struct{} + +func NewDiskRepository() (repo Repository) { + return DiskRepository{} +} + +func (repo DiskRepository) ReadManifest(inputPath string) (*Manifest, error) { + m := NewEmptyManifest() + manifestPath, err := repo.manifestPath(inputPath) + + if err != nil { + return m, fmt.Errorf("%s: %s", T("Error finding manifest"), err.Error()) + } + + m.Path = manifestPath + + mapp, err := repo.readAllYAMLFiles(manifestPath) + if err != nil { + return m, err + } + + m.Data = mapp + + return m, nil +} + +func (repo DiskRepository) readAllYAMLFiles(path string) (mergedMap generic.Map, err error) { + file, err := os.Open(filepath.Clean(path)) + if err != nil { + return + } + defer file.Close() + + mapp, err := parseManifest(file) + if err != nil { + return + } + + if !mapp.Has("inherit") { + mergedMap = mapp + return + } + + inheritedPath, ok := mapp.Get("inherit").(string) + if !ok { + err = errors.New(T("invalid inherit path in manifest")) + return + } + + if !filepath.IsAbs(inheritedPath) { + inheritedPath = filepath.Join(filepath.Dir(path), inheritedPath) + } + + inheritedMap, err := repo.readAllYAMLFiles(inheritedPath) + if err != nil { + return + } + + mergedMap = generic.DeepMerge(inheritedMap, mapp) + return +} + +func parseManifest(file io.Reader) (yamlMap generic.Map, err error) { + manifest, err := ioutil.ReadAll(file) + if err != nil { + return + } + + mmap := make(map[interface{}]interface{}) + err = yaml.Unmarshal(manifest, &mmap) + if err != nil { + return + } + + if !generic.IsMappable(mmap) || len(mmap) == 0 { + err = errors.New(T("Invalid manifest. Expected a map")) + return + } + + yamlMap = generic.NewMap(mmap) + + return +} + +func (repo DiskRepository) manifestPath(userSpecifiedPath string) (string, error) { + fileInfo, err := os.Stat(userSpecifiedPath) + if err != nil { + return "", err + } + + if fileInfo.IsDir() { + manifestPaths := []string{ + filepath.Join(userSpecifiedPath, "manifest.yml"), + filepath.Join(userSpecifiedPath, "manifest.yaml"), + } + var err error + for _, manifestPath := range manifestPaths { + if _, err = os.Stat(manifestPath); err == nil { + return manifestPath, err + } + } + return "", err + } + return userSpecifiedPath, nil +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_event.go b/vendor/code.cloudfoundry.org/cli/cf/models/app_event.go similarity index 78% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_event.go rename to vendor/code.cloudfoundry.org/cli/cf/models/app_event.go index 9bfa707..2292fea 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_event.go +++ b/vendor/code.cloudfoundry.org/cli/cf/models/app_event.go @@ -3,9 +3,10 @@ package models import "time" type EventFields struct { - Guid string + GUID string Name string Timestamp time.Time Description string + Actor string ActorName string } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_file.go b/vendor/code.cloudfoundry.org/cli/cf/models/app_file.go similarity index 86% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_file.go rename to vendor/code.cloudfoundry.org/cli/cf/models/app_file.go index 34544a7..33f23d3 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_file.go +++ b/vendor/code.cloudfoundry.org/cli/cf/models/app_file.go @@ -4,4 +4,5 @@ type AppFileFields struct { Path string Sha1 string Size int64 + Mode string } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_instance.go b/vendor/code.cloudfoundry.org/cli/cf/models/app_instance.go similarity index 93% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_instance.go rename to vendor/code.cloudfoundry.org/cli/cf/models/app_instance.go index 514c52d..3be7f8e 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/app_instance.go +++ b/vendor/code.cloudfoundry.org/cli/cf/models/app_instance.go @@ -16,7 +16,7 @@ type AppInstanceFields struct { State InstanceState Details string Since time.Time - CpuUsage float64 // percentage + CPUUsage float64 // percentage DiskQuota int64 // in bytes DiskUsage int64 MemQuota int64 diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/application.go b/vendor/code.cloudfoundry.org/cli/cf/models/application.go new file mode 100644 index 0000000..0270a12 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/application.go @@ -0,0 +1,206 @@ +package models + +import ( + "reflect" + "strings" + "time" +) + +type Application struct { + ApplicationFields + Stack *Stack + Routes []RouteSummary + Services []ServicePlanSummary +} + +func (model Application) HasRoute(route Route) bool { + for _, boundRoute := range model.Routes { + if boundRoute.GUID == route.GUID { + return true + } + } + return false +} + +func (model Application) ToParams() AppParams { + state := strings.ToUpper(model.State) + params := AppParams{ + GUID: &model.GUID, + Name: &model.Name, + BuildpackURL: &model.BuildpackURL, + Command: &model.Command, + DiskQuota: &model.DiskQuota, + InstanceCount: &model.InstanceCount, + HealthCheckType: &model.HealthCheckType, + Memory: &model.Memory, + State: &state, + SpaceGUID: &model.SpaceGUID, + EnvironmentVars: &model.EnvironmentVars, + DockerImage: &model.DockerImage, + } + + if model.Stack != nil { + params.StackGUID = &model.Stack.GUID + } + + return params +} + +type ApplicationFields struct { + GUID string + Name string + BuildpackURL string + Command string + Diego bool + DetectedStartCommand string + DiskQuota int64 // in Megabytes + EnvironmentVars map[string]interface{} + InstanceCount int + Memory int64 // in Megabytes + RunningInstances int + HealthCheckType string + HealthCheckTimeout int + State string + SpaceGUID string + StackGUID string + PackageUpdatedAt *time.Time + PackageState string + StagingFailedReason string + Buildpack string + DetectedBuildpack string + DockerImage string + EnableSSH bool + AppPorts []int +} + +const ( + ApplicationStateStopped = "stopped" + ApplicationStateStarted = "started" + ApplicationStateRunning = "running" + ApplicationStateCrashed = "crashed" + ApplicationStateFlapping = "flapping" + ApplicationStateDown = "down" + ApplicationStateStarting = "starting" +) + +type AppParams struct { + BuildpackURL *string + Command *string + DiskQuota *int64 + Domains []string + EnvironmentVars *map[string]interface{} + GUID *string + HealthCheckType *string + HealthCheckTimeout *int + DockerImage *string + Diego *bool + EnableSSH *bool + Hosts []string + RoutePath *string + InstanceCount *int + Memory *int64 + Name *string + NoHostname *bool + NoRoute bool + UseRandomRoute bool + UseRandomPort bool + Path *string + ServicesToBind []string + SpaceGUID *string + StackGUID *string + StackName *string + State *string + PackageUpdatedAt *time.Time + AppPorts *[]int + Routes []ManifestRoute +} + +func (app *AppParams) Merge(other *AppParams) { + if other.AppPorts != nil { + app.AppPorts = other.AppPorts + } + if other.BuildpackURL != nil { + app.BuildpackURL = other.BuildpackURL + } + if other.Command != nil { + app.Command = other.Command + } + if other.DiskQuota != nil { + app.DiskQuota = other.DiskQuota + } + if other.DockerImage != nil { + app.DockerImage = other.DockerImage + } + if other.Domains != nil { + app.Domains = other.Domains + } + if other.EnableSSH != nil { + app.EnableSSH = other.EnableSSH + } + if other.EnvironmentVars != nil { + app.EnvironmentVars = other.EnvironmentVars + } + if other.GUID != nil { + app.GUID = other.GUID + } + if other.HealthCheckType != nil { + app.HealthCheckType = other.HealthCheckType + } + if other.HealthCheckTimeout != nil { + app.HealthCheckTimeout = other.HealthCheckTimeout + } + if other.Hosts != nil { + app.Hosts = other.Hosts + } + if other.InstanceCount != nil { + app.InstanceCount = other.InstanceCount + } + if other.Memory != nil { + app.Memory = other.Memory + } + if other.Name != nil { + app.Name = other.Name + } + if other.Path != nil { + app.Path = other.Path + } + if other.RoutePath != nil { + app.RoutePath = other.RoutePath + } + if other.ServicesToBind != nil { + app.ServicesToBind = other.ServicesToBind + } + if other.SpaceGUID != nil { + app.SpaceGUID = other.SpaceGUID + } + if other.StackGUID != nil { + app.StackGUID = other.StackGUID + } + if other.StackName != nil { + app.StackName = other.StackName + } + if other.State != nil { + app.State = other.State + } + + app.NoRoute = app.NoRoute || other.NoRoute + noHostBool := app.IsNoHostnameTrue() || other.IsNoHostnameTrue() + app.NoHostname = &noHostBool + app.UseRandomRoute = app.UseRandomRoute || other.UseRandomRoute +} + +func (app *AppParams) IsEmpty() bool { + noHostBool := false + return reflect.DeepEqual(*app, AppParams{NoHostname: &noHostBool}) +} + +func (app *AppParams) IsHostEmpty() bool { + return app.Hosts == nil || len(app.Hosts) == 0 +} + +func (app *AppParams) IsNoHostnameTrue() bool { + if app.NoHostname == nil { + return false + } + return *app.NoHostname +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/buildpack.go b/vendor/code.cloudfoundry.org/cli/cf/models/buildpack.go new file mode 100644 index 0000000..8db5a8c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/buildpack.go @@ -0,0 +1,11 @@ +package models + +type Buildpack struct { + GUID string + Name string + Position *int + Enabled *bool + Key string + Filename string + Locked *bool +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/domain.go b/vendor/code.cloudfoundry.org/cli/cf/models/domain.go new file mode 100644 index 0000000..5f25e4f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/domain.go @@ -0,0 +1,19 @@ +package models + +type DomainFields struct { + GUID string + Name string + OwningOrganizationGUID string + RouterGroupGUID string + RouterGroupType string + Shared bool +} + +func (model DomainFields) URLForHostAndPath(host, path string, port int) string { + return (&RoutePresenter{ + Host: host, + Domain: model.Name, + Path: path, + Port: port, + }).URL() +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/environment.go b/vendor/code.cloudfoundry.org/cli/cf/models/environment.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/environment.go rename to vendor/code.cloudfoundry.org/cli/cf/models/environment.go diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/environment_variable.go b/vendor/code.cloudfoundry.org/cli/cf/models/environment_variable.go new file mode 100644 index 0000000..09872bc --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/environment_variable.go @@ -0,0 +1,22 @@ +package models + +import "strings" + +type EnvironmentVariable struct { + Name string + Value string +} + +type EnvironmentVariableList []EnvironmentVariable + +func (evl EnvironmentVariableList) Len() int { + return len(evl) +} + +func (evl EnvironmentVariableList) Swap(i, j int) { + evl[i], evl[j] = evl[j], evl[i] +} + +func (evl EnvironmentVariableList) Less(i, j int) bool { + return strings.Compare(strings.ToLower(evl[i].Name), strings.ToLower(evl[j].Name)) == -1 +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/feature_flag.go b/vendor/code.cloudfoundry.org/cli/cf/models/feature_flag.go new file mode 100644 index 0000000..f50389c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/feature_flag.go @@ -0,0 +1,7 @@ +package models + +type FeatureFlag struct { + Name string `json:"name"` + Enabled bool `json:"enabled"` + ErrorMessage string `json:"error_message"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/organization.go b/vendor/code.cloudfoundry.org/cli/cf/models/organization.go new file mode 100644 index 0000000..12ed3fa --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/organization.go @@ -0,0 +1,14 @@ +package models + +type OrganizationFields struct { + GUID string + Name string + QuotaDefinition QuotaFields +} + +type Organization struct { + OrganizationFields + Spaces []SpaceFields + Domains []DomainFields + SpaceQuotas []SpaceQuota +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/plugin_repo.go b/vendor/code.cloudfoundry.org/cli/cf/models/plugin_repo.go new file mode 100644 index 0000000..6e0398d --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/plugin_repo.go @@ -0,0 +1,6 @@ +package models + +type PluginRepo struct { + Name string + URL string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/quota.go b/vendor/code.cloudfoundry.org/cli/cf/models/quota.go new file mode 100644 index 0000000..77712d9 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/quota.go @@ -0,0 +1,27 @@ +package models + +import "encoding/json" + +type QuotaFields struct { + GUID string `json:"guid,omitempty"` + Name string `json:"name"` + MemoryLimit int64 `json:"memory_limit"` // in Megabytes + InstanceMemoryLimit int64 `json:"instance_memory_limit"` // in Megabytes + RoutesLimit int `json:"total_routes"` + ServicesLimit int `json:"total_services"` + NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` + AppInstanceLimit int `json:"app_instance_limit"` + ReservedRoutePorts json.Number `json:"total_reserved_route_ports,omitempty"` +} + +type QuotaResponse struct { + GUID string `json:"guid,omitempty"` + Name string `json:"name"` + MemoryLimit int64 `json:"memory_limit"` // in Megabytes + InstanceMemoryLimit int64 `json:"instance_memory_limit"` // in Megabytes + RoutesLimit int `json:"total_routes"` + ServicesLimit int `json:"total_services"` + NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` + AppInstanceLimit json.Number `json:"app_instance_limit"` + ReservedRoutePorts json.Number `json:"total_reserved_route_ports"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/role.go b/vendor/code.cloudfoundry.org/cli/cf/models/role.go new file mode 100644 index 0000000..da86c66 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/role.go @@ -0,0 +1,60 @@ +package models + +import "errors" + +type Role int + +const ( + RoleUnknown Role = iota - 1 + RoleOrgUser + RoleOrgManager + RoleBillingManager + RoleOrgAuditor + RoleSpaceManager + RoleSpaceDeveloper + RoleSpaceAuditor +) + +var ErrUnknownRole = errors.New("Unknown Role") + +func RoleFromString(roleString string) (Role, error) { + switch roleString { + case "OrgManager": + return RoleOrgManager, nil + case "BillingManager": + return RoleBillingManager, nil + case "OrgAuditor": + return RoleOrgAuditor, nil + case "SpaceManager": + return RoleSpaceManager, nil + case "SpaceDeveloper": + return RoleSpaceDeveloper, nil + case "SpaceAuditor": + return RoleSpaceAuditor, nil + default: + return RoleUnknown, ErrUnknownRole + } +} + +func (r Role) ToString() string { + switch r { + case RoleUnknown: + return "RoleUnknown" + case RoleOrgUser: + return "RoleOrgUser" + case RoleOrgManager: + return "RoleOrgManager" + case RoleBillingManager: + return "RoleBillingManager" + case RoleOrgAuditor: + return "RoleOrgAuditor" + case RoleSpaceManager: + return "RoleSpaceManager" + case RoleSpaceDeveloper: + return "RoleSpaceDeveloper" + case RoleSpaceAuditor: + return "RoleSpaceAuditor" + default: + return "" + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/route.go b/vendor/code.cloudfoundry.org/cli/cf/models/route.go new file mode 100644 index 0000000..f1dcb1a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/route.go @@ -0,0 +1,59 @@ +package models + +import ( + "fmt" + "net/url" + "strings" +) + +type Route struct { + GUID string + Host string + Domain DomainFields + Path string + Port int + + Space SpaceFields + Apps []ApplicationFields + ServiceInstance ServiceInstanceFields +} + +func (r Route) URL() string { + return (&RoutePresenter{ + Host: r.Host, + Domain: r.Domain.Name, + Path: r.Path, + Port: r.Port, + }).URL() +} + +type RoutePresenter struct { + Host string + Domain string + Path string + Port int +} + +func (r *RoutePresenter) URL() string { + var host string + if r.Host != "" { + host = r.Host + "." + r.Domain + } else { + host = r.Domain + } + + if r.Port != 0 { + host = fmt.Sprintf("%s:%d", host, r.Port) + } + + u := url.URL{ + Host: host, + Path: r.Path, + } + + return strings.TrimPrefix(u.String(), "//") // remove the empty scheme +} + +type ManifestRoute struct { + Route string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/route_summary.go b/vendor/code.cloudfoundry.org/cli/cf/models/route_summary.go new file mode 100644 index 0000000..20e7b9d --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/route_summary.go @@ -0,0 +1,18 @@ +package models + +type RouteSummary struct { + GUID string + Host string + Domain DomainFields + Path string + Port int +} + +func (r RouteSummary) URL() string { + return (&RoutePresenter{ + Host: r.Host, + Domain: r.Domain.Name, + Path: r.Path, + Port: r.Port, + }).URL() +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/router_group.go b/vendor/code.cloudfoundry.org/cli/cf/models/router_group.go new file mode 100644 index 0000000..38414d7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/router_group.go @@ -0,0 +1,9 @@ +package models + +type RouterGroups []RouterGroup + +type RouterGroup struct { + GUID string `json:"guid"` + Name string `json:"name"` + Type string `json:"type"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/security_group.go b/vendor/code.cloudfoundry.org/cli/cf/models/security_group.go new file mode 100644 index 0000000..ca23693 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/security_group.go @@ -0,0 +1,22 @@ +package models + +// represents just the attributes for an security group +type SecurityGroupFields struct { + Name string + GUID string + SpaceURL string `json:"spaces_url,omitempty"` + Rules []map[string]interface{} +} + +// represents the JSON that we send up to CC when the user creates / updates a record +type SecurityGroupParams struct { + Name string `json:"name,omitempty"` + GUID string `json:"guid,omitempty"` + Rules []map[string]interface{} `json:"rules"` +} + +// represents a fully instantiated model returned by the CC (e.g.: with its attributes and the fields for its child objects) +type SecurityGroup struct { + SecurityGroupFields + Spaces []Space +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_auth_token.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_auth_token.go similarity index 86% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_auth_token.go rename to vendor/code.cloudfoundry.org/cli/cf/models/service_auth_token.go index 2df5c3b..9b2b097 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_auth_token.go +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_auth_token.go @@ -1,7 +1,7 @@ package models type ServiceAuthTokenFields struct { - Guid string + GUID string Label string Provider string Token string diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/service_binding.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_binding.go new file mode 100644 index 0000000..248d8c6 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_binding.go @@ -0,0 +1,13 @@ +package models + +type ServiceBindingRequest struct { + AppGUID string `json:"app_guid"` + ServiceInstanceGUID string `json:"service_instance_guid"` + Params map[string]interface{} `json:"parameters,omitempty"` +} + +type ServiceBindingFields struct { + GUID string + URL string + AppGUID string +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_broker.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_broker.go similarity index 78% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_broker.go rename to vendor/code.cloudfoundry.org/cli/cf/models/service_broker.go index dc7aa79..23ea66b 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_broker.go +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_broker.go @@ -1,10 +1,10 @@ package models type ServiceBroker struct { - Guid string + GUID string Name string Username string Password string - Url string + URL string Services []ServiceOffering } diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/service_instance.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_instance.go new file mode 100644 index 0000000..ae2ccfe --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_instance.go @@ -0,0 +1,47 @@ +package models + +type LastOperationFields struct { + Type string + State string + Description string + CreatedAt string + UpdatedAt string +} + +type ServiceInstanceCreateRequest struct { + Name string `json:"name"` + SpaceGUID string `json:"space_guid"` + PlanGUID string `json:"service_plan_guid,omitempty"` + Params map[string]interface{} `json:"parameters,omitempty"` + Tags []string `json:"tags,omitempty"` +} + +type ServiceInstanceUpdateRequest struct { + PlanGUID string `json:"service_plan_guid,omitempty"` + Params map[string]interface{} `json:"parameters,omitempty"` + Tags []string `json:"tags"` +} + +type ServiceInstanceFields struct { + GUID string + Name string + LastOperation LastOperationFields + SysLogDrainURL string + RouteServiceURL string + ApplicationNames []string + Params map[string]interface{} + DashboardURL string + Tags []string +} + +type ServiceInstance struct { + ServiceInstanceFields + ServiceBindings []ServiceBindingFields + ServiceKeys []ServiceKeyFields + ServicePlan ServicePlanFields + ServiceOffering ServiceOfferingFields +} + +func (inst ServiceInstance) IsUserProvided() bool { + return inst.ServicePlan.GUID == "" +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/service_key.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_key.go new file mode 100644 index 0000000..ba48599 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_key.go @@ -0,0 +1,20 @@ +package models + +type ServiceKeyFields struct { + Name string + GUID string + URL string + ServiceInstanceGUID string + ServiceInstanceURL string +} + +type ServiceKeyRequest struct { + Name string `json:"name"` + ServiceInstanceGUID string `json:"service_instance_guid"` + Params map[string]interface{} `json:"parameters,omitempty"` +} + +type ServiceKey struct { + Fields ServiceKeyFields + Credentials map[string]interface{} +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_offering.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_offering.go similarity index 82% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_offering.go rename to vendor/code.cloudfoundry.org/cli/cf/models/service_offering.go index 658b718..efd8766 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/models/service_offering.go +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_offering.go @@ -1,13 +1,14 @@ package models type ServiceOfferingFields struct { - Guid string - BrokerGuid string + GUID string + BrokerGUID string Label string Provider string Version string Description string - DocumentationUrl string + DocumentationURL string + Requires []string } type ServiceOffering struct { diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/service_plan.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_plan.go new file mode 100644 index 0000000..4c7e65d --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_plan.go @@ -0,0 +1,34 @@ +package models + +type ServicePlanFields struct { + GUID string + Name string + Free bool + Public bool + Description string + Active bool + ServiceOfferingGUID string + OrgNames []string +} + +type ServicePlan struct { + ServicePlanFields + ServiceOffering ServiceOfferingFields +} + +type ServicePlanSummary struct { + GUID string + Name string +} + +func (servicePlanFields ServicePlanFields) OrgHasVisibility(orgName string) bool { + if servicePlanFields.Public { + return true + } + for _, org := range servicePlanFields.OrgNames { + if org == orgName { + return true + } + } + return false +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/service_plan_visibility.go b/vendor/code.cloudfoundry.org/cli/cf/models/service_plan_visibility.go new file mode 100644 index 0000000..b50bb41 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/service_plan_visibility.go @@ -0,0 +1,7 @@ +package models + +type ServicePlanVisibilityFields struct { + GUID string `json:"guid"` + ServicePlanGUID string `json:"service_plan_guid"` + OrganizationGUID string `json:"organization_guid"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/space.go b/vendor/code.cloudfoundry.org/cli/cf/models/space.go new file mode 100644 index 0000000..43e492a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/space.go @@ -0,0 +1,17 @@ +package models + +type SpaceFields struct { + GUID string + Name string + AllowSSH bool +} + +type Space struct { + SpaceFields + Organization OrganizationFields + Applications []ApplicationFields + ServiceInstances []ServiceInstanceFields + Domains []DomainFields + SecurityGroups []SecurityGroupFields + SpaceQuotaGUID string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/space_quota.go b/vendor/code.cloudfoundry.org/cli/cf/models/space_quota.go new file mode 100644 index 0000000..4edf299 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/space_quota.go @@ -0,0 +1,75 @@ +package models + +import ( + "encoding/json" + "strconv" + + "code.cloudfoundry.org/cli/cf/formatters" + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type SpaceQuota struct { + GUID string `json:"guid,omitempty"` + Name string `json:"name"` + MemoryLimit int64 `json:"memory_limit"` // in Megabytes + InstanceMemoryLimit int64 `json:"instance_memory_limit"` // in Megabytes + RoutesLimit int `json:"total_routes"` + ServicesLimit int `json:"total_services"` + NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` + OrgGUID string `json:"organization_guid"` + AppInstanceLimit int `json:"app_instance_limit"` + ReservedRoutePortsLimit json.Number `json:"total_reserved_route_ports,omitempty"` +} + +const UnlimitedDisplay = "unlimited" + +func (q SpaceQuota) FormattedMemoryLimit() string { + return formatters.ByteSize(q.MemoryLimit * formatters.MEGABYTE) +} + +func (q SpaceQuota) FormattedInstanceMemoryLimit() string { + if q.InstanceMemoryLimit == -1 { + return T(UnlimitedDisplay) + } + return formatters.ByteSize(q.InstanceMemoryLimit * formatters.MEGABYTE) +} + +func (q SpaceQuota) FormattedAppInstanceLimit() string { + appInstanceLimit := T(UnlimitedDisplay) + if q.AppInstanceLimit != -1 { //TODO - figure out how to use resources.UnlimitedAppInstances + appInstanceLimit = strconv.Itoa(q.AppInstanceLimit) + } + + return appInstanceLimit +} + +func (q SpaceQuota) FormattedServicesLimit() string { + servicesLimit := T(UnlimitedDisplay) + if q.ServicesLimit != -1 { + servicesLimit = strconv.Itoa(q.ServicesLimit) + } + + return servicesLimit +} + +func (q SpaceQuota) FormattedRoutePortsLimit() string { + reservedRoutePortsLimit := T(UnlimitedDisplay) + if q.ReservedRoutePortsLimit != "-1" { + reservedRoutePortsLimit = string(q.ReservedRoutePortsLimit) + } + + return reservedRoutePortsLimit +} + +type SpaceQuotaResponse struct { + GUID string `json:"guid,omitempty"` + Name string `json:"name"` + MemoryLimit int64 `json:"memory_limit"` // in Megabytes + InstanceMemoryLimit int64 `json:"instance_memory_limit"` // in Megabytes + RoutesLimit int `json:"total_routes"` + ServicesLimit int `json:"total_services"` + NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` + OrgGUID string `json:"organization_guid"` + AppInstanceLimit json.Number `json:"app_instance_limit"` + ReservedRoutePortsLimit json.Number `json:"total_reserved_route_ports"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/stack.go b/vendor/code.cloudfoundry.org/cli/cf/models/stack.go new file mode 100644 index 0000000..9e30f66 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/stack.go @@ -0,0 +1,7 @@ +package models + +type Stack struct { + GUID string + Name string + Description string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/user.go b/vendor/code.cloudfoundry.org/cli/cf/models/user.go new file mode 100644 index 0000000..afccd1f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/user.go @@ -0,0 +1,8 @@ +package models + +type UserFields struct { + GUID string + Username string + Password string + IsAdmin bool +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/models/user_provided_service.go b/vendor/code.cloudfoundry.org/cli/cf/models/user_provided_service.go new file mode 100644 index 0000000..55e1713 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/models/user_provided_service.go @@ -0,0 +1,18 @@ +package models + +type UserProvidedServiceSummary struct { + Total int `json:"total_results"` + Resources []UserProvidedServiceEntity `json:"resources"` +} + +type UserProvidedService struct { + Name string `json:"name,omitempty"` + Credentials map[string]interface{} `json:"credentials"` + SpaceGUID string `json:"space_guid,omitempty"` + SysLogDrainURL string `json:"syslog_drain_url"` + RouteServiceURL string `json:"route_service_url"` +} + +type UserProvidedServiceEntity struct { + UserProvidedService `json:"entity"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/cloud_controller_gateway.go b/vendor/code.cloudfoundry.org/cli/cf/net/cloud_controller_gateway.go new file mode 100644 index 0000000..0b6fb2e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/cloud_controller_gateway.go @@ -0,0 +1,44 @@ +package net + +import ( + "encoding/json" + "strconv" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" +) + +type ccErrorResponse struct { + Code int + Description string +} + +const invalidTokenCode = 1000 + +func cloudControllerErrorHandler(statusCode int, body []byte) error { + response := ccErrorResponse{} + _ = json.Unmarshal(body, &response) + + if response.Code == invalidTokenCode { + return errors.NewInvalidTokenError(response.Description) + } + + return errors.NewHTTPError(statusCode, strconv.Itoa(response.Code), response.Description) +} + +func NewCloudControllerGateway(config coreconfig.Reader, clock func() time.Time, ui terminal.UI, logger trace.Printer, envDialTimeout string) Gateway { + return Gateway{ + errHandler: cloudControllerErrorHandler, + config: config, + PollingThrottle: DefaultPollingThrottle, + warnings: &[]string{}, + Clock: clock, + ui: ui, + logger: logger, + PollingEnabled: true, + DialTimeout: dialTimeout(envDialTimeout), + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/gateway.go b/vendor/code.cloudfoundry.org/cli/cf/net/gateway.go new file mode 100644 index 0000000..f83413e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/gateway.go @@ -0,0 +1,470 @@ +package net + +import ( + "bytes" + "crypto/tls" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net" + "net/http" + "net/url" + "os" + "runtime" + "strconv" + "strings" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" + "code.cloudfoundry.org/cli/version" +) + +const ( + JobFinished = "finished" + JobFailed = "failed" + DefaultPollingThrottle = 5 * time.Second + DefaultDialTimeout = 5 * time.Second +) + +type JobResource struct { + Entity struct { + Status string + ErrorDetails struct { + Description string + } `json:"error_details"` + } +} + +type AsyncResource struct { + Metadata struct { + URL string + } +} + +type apiErrorHandler func(statusCode int, body []byte) error + +type tokenRefresher interface { + RefreshAuthToken() (string, error) +} + +type Request struct { + HTTPReq *http.Request + SeekableBody io.ReadSeeker +} + +type Gateway struct { + authenticator tokenRefresher + errHandler apiErrorHandler + PollingEnabled bool + PollingThrottle time.Duration + trustedCerts []tls.Certificate + config coreconfig.Reader + warnings *[]string + Clock func() time.Time + transport *http.Transport + ui terminal.UI + logger trace.Printer + DialTimeout time.Duration +} + +func (gateway *Gateway) AsyncTimeout() time.Duration { + if gateway.config.AsyncTimeout() > 0 { + return time.Duration(gateway.config.AsyncTimeout()) * time.Minute + } + + return 0 +} + +func (gateway *Gateway) SetTokenRefresher(auth tokenRefresher) { + gateway.authenticator = auth +} + +func (gateway Gateway) GetResource(url string, resource interface{}) (err error) { + request, err := gateway.NewRequest("GET", url, gateway.config.AccessToken(), nil) + if err != nil { + return + } + + _, err = gateway.PerformRequestForJSONResponse(request, resource) + return +} + +func (gateway Gateway) CreateResourceFromStruct(endpoint, url string, resource interface{}) error { + data, err := json.Marshal(resource) + if err != nil { + return err + } + + return gateway.CreateResource(endpoint, url, bytes.NewReader(data)) +} + +func (gateway Gateway) UpdateResourceFromStruct(endpoint, apiURL string, resource interface{}) error { + data, err := json.Marshal(resource) + if err != nil { + return err + } + + return gateway.UpdateResource(endpoint, apiURL, bytes.NewReader(data)) +} + +func (gateway Gateway) CreateResource(endpoint, apiURL string, body io.ReadSeeker, resource ...interface{}) error { + return gateway.createUpdateOrDeleteResource("POST", endpoint, apiURL, body, false, resource...) +} + +func (gateway Gateway) UpdateResource(endpoint, apiURL string, body io.ReadSeeker, resource ...interface{}) error { + return gateway.createUpdateOrDeleteResource("PUT", endpoint, apiURL, body, false, resource...) +} + +func (gateway Gateway) UpdateResourceSync(endpoint, apiURL string, body io.ReadSeeker, resource ...interface{}) error { + return gateway.createUpdateOrDeleteResource("PUT", endpoint, apiURL, body, true, resource...) +} + +func (gateway Gateway) DeleteResourceSynchronously(endpoint, apiURL string) error { + return gateway.createUpdateOrDeleteResource("DELETE", endpoint, apiURL, nil, true, &AsyncResource{}) +} + +func (gateway Gateway) DeleteResource(endpoint, apiURL string) error { + return gateway.createUpdateOrDeleteResource("DELETE", endpoint, apiURL, nil, false, &AsyncResource{}) +} + +func (gateway Gateway) ListPaginatedResources( + target string, + path string, + resource interface{}, + cb func(interface{}) bool, +) error { + for path != "" { + pagination := NewPaginatedResources(resource) + + apiErr := gateway.GetResource(fmt.Sprintf("%s%s", target, path), &pagination) + if apiErr != nil { + return apiErr + } + + resources, err := pagination.Resources() + if err != nil { + return fmt.Errorf("%s: %s", T("Error parsing JSON"), err.Error()) + } + + for _, resource := range resources { + if !cb(resource) { + return nil + } + } + + path = pagination.NextURL + } + + return nil +} + +func (gateway Gateway) createUpdateOrDeleteResource(verb, endpoint, apiURL string, body io.ReadSeeker, sync bool, optionalResource ...interface{}) error { + var resource interface{} + if len(optionalResource) > 0 { + resource = optionalResource[0] + } + + request, err := gateway.NewRequest(verb, endpoint+apiURL, gateway.config.AccessToken(), body) + if err != nil { + return err + } + + if resource == nil { + _, err = gateway.PerformRequest(request) + return err + } + + if gateway.PollingEnabled && !sync { + _, err = gateway.PerformPollingRequestForJSONResponse(endpoint, request, resource, gateway.AsyncTimeout()) + return err + } + + _, err = gateway.PerformRequestForJSONResponse(request, resource) + if err != nil { + return err + } + + return nil +} + +func (gateway Gateway) newRequest(request *http.Request, accessToken string, body io.ReadSeeker) *Request { + if accessToken != "" { + request.Header.Set("Authorization", accessToken) + } + + request.Header.Set("accept", "application/json") + request.Header.Set("Connection", "close") + request.Header.Set("content-type", "application/json") + request.Header.Set("User-Agent", "go-cli "+version.VersionString()+" / "+runtime.GOOS) + + return &Request{HTTPReq: request, SeekableBody: body} +} + +func (gateway Gateway) NewRequestForFile(method, fullURL, accessToken string, body *os.File) (*Request, error) { + progressReader := NewProgressReader(body, gateway.ui, 5*time.Second) + _, _ = progressReader.Seek(0, 0) + + fileStats, err := body.Stat() + if err != nil { + return nil, fmt.Errorf("%s: %s", T("Error getting file info"), err.Error()) + } + + request, err := http.NewRequest(method, fullURL, progressReader) + if err != nil { + return nil, fmt.Errorf("%s: %s", T("Error building request"), err.Error()) + } + + fileSize := fileStats.Size() + progressReader.SetTotalSize(fileSize) + request.ContentLength = fileSize + + if err != nil { + return nil, fmt.Errorf("%s: %s", T("Error building request"), err.Error()) + } + + return gateway.newRequest(request, accessToken, progressReader), nil +} + +func (gateway Gateway) NewRequest(method, path, accessToken string, body io.ReadSeeker) (*Request, error) { + request, err := http.NewRequest(method, path, body) + if err != nil { + return nil, fmt.Errorf("%s: %s", T("Error building request"), err.Error()) + } + return gateway.newRequest(request, accessToken, body), nil +} + +func (gateway Gateway) PerformRequest(request *Request) (*http.Response, error) { + return gateway.doRequestHandlingAuth(request) +} + +func (gateway Gateway) performRequestForResponseBytes(request *Request) ([]byte, http.Header, *http.Response, error) { + rawResponse, err := gateway.doRequestHandlingAuth(request) + if err != nil { + return nil, nil, rawResponse, err + } + defer rawResponse.Body.Close() + + bytes, err := ioutil.ReadAll(rawResponse.Body) + if err != nil { + return bytes, nil, rawResponse, fmt.Errorf("%s: %s", T("Error reading response"), err.Error()) + } + + return bytes, rawResponse.Header, rawResponse, nil +} + +func (gateway Gateway) PerformRequestForTextResponse(request *Request) (string, http.Header, error) { + bytes, headers, _, err := gateway.performRequestForResponseBytes(request) + return string(bytes), headers, err +} + +func (gateway Gateway) PerformRequestForJSONResponse(request *Request, response interface{}) (http.Header, error) { + bytes, headers, rawResponse, err := gateway.performRequestForResponseBytes(request) + if err != nil { + if rawResponse != nil && rawResponse.Body != nil { + b, _ := ioutil.ReadAll(rawResponse.Body) + _ = json.Unmarshal(b, &response) + } + return headers, err + } + + if rawResponse.StatusCode > 203 || strings.TrimSpace(string(bytes)) == "" { + return headers, nil + } + + err = json.Unmarshal(bytes, &response) + if err != nil { + return headers, fmt.Errorf("%s: %s", T("Invalid JSON response from server"), err.Error()) + } + + return headers, nil +} + +func (gateway Gateway) PerformPollingRequestForJSONResponse(endpoint string, request *Request, response interface{}, timeout time.Duration) (http.Header, error) { + query := request.HTTPReq.URL.Query() + query.Add("async", "true") + request.HTTPReq.URL.RawQuery = query.Encode() + + bytes, headers, rawResponse, err := gateway.performRequestForResponseBytes(request) + if err != nil { + return headers, err + } + defer rawResponse.Body.Close() + + if rawResponse.StatusCode > 203 || strings.TrimSpace(string(bytes)) == "" { + return headers, nil + } + + err = json.Unmarshal(bytes, &response) + if err != nil { + return headers, fmt.Errorf("%s: %s", T("Invalid JSON response from server"), err.Error()) + } + + asyncResource := &AsyncResource{} + err = json.Unmarshal(bytes, &asyncResource) + if err != nil { + return headers, fmt.Errorf("%s: %s", T("Invalid async response from server"), err.Error()) + } + + jobURL := asyncResource.Metadata.URL + if jobURL == "" { + return headers, nil + } + + if !strings.Contains(jobURL, "/jobs/") { + return headers, nil + } + + err = gateway.waitForJob(endpoint+jobURL, request.HTTPReq.Header.Get("Authorization"), timeout) + + return headers, err +} + +func (gateway Gateway) Warnings() []string { + return *gateway.warnings +} + +func (gateway Gateway) waitForJob(jobURL, accessToken string, timeout time.Duration) error { + startTime := gateway.Clock() + for true { + if gateway.Clock().Sub(startTime) > timeout && timeout != 0 { + return errors.NewAsyncTimeoutError(jobURL) + } + var request *Request + request, err := gateway.NewRequest("GET", jobURL, accessToken, nil) + response := &JobResource{} + _, err = gateway.PerformRequestForJSONResponse(request, response) + if err != nil { + return err + } + + switch response.Entity.Status { + case JobFinished: + return nil + case JobFailed: + return errors.New(response.Entity.ErrorDetails.Description) + } + + accessToken = request.HTTPReq.Header.Get("Authorization") + + time.Sleep(gateway.PollingThrottle) + } + return nil +} + +func (gateway Gateway) doRequestHandlingAuth(request *Request) (*http.Response, error) { + httpReq := request.HTTPReq + + if request.SeekableBody != nil { + httpReq.Body = ioutil.NopCloser(request.SeekableBody) + } + + // perform request + rawResponse, err := gateway.doRequestAndHandlerError(request) + if err == nil || gateway.authenticator == nil { + return rawResponse, err + } + + switch err.(type) { + case *errors.InvalidTokenError: + // refresh the auth token + var newToken string + newToken, err = gateway.authenticator.RefreshAuthToken() + if err != nil { + return rawResponse, err + } + + // reset the auth token and request body + httpReq.Header.Set("Authorization", newToken) + if request.SeekableBody != nil { + _, _ = request.SeekableBody.Seek(0, 0) + httpReq.Body = ioutil.NopCloser(request.SeekableBody) + } + + // make the request again + rawResponse, err = gateway.doRequestAndHandlerError(request) + } + + return rawResponse, err +} + +func (gateway Gateway) doRequestAndHandlerError(request *Request) (*http.Response, error) { + rawResponse, err := gateway.doRequest(request.HTTPReq) + if err != nil { + return rawResponse, WrapNetworkErrors(request.HTTPReq.URL.Host, err) + } + + if rawResponse.StatusCode > 299 { + defer rawResponse.Body.Close() + jsonBytes, _ := ioutil.ReadAll(rawResponse.Body) + rawResponse.Body = ioutil.NopCloser(bytes.NewBuffer(jsonBytes)) + err = gateway.errHandler(rawResponse.StatusCode, jsonBytes) + } + + return rawResponse, err +} + +func (gateway Gateway) doRequest(request *http.Request) (*http.Response, error) { + var response *http.Response + var err error + + if gateway.transport == nil { + makeHTTPTransport(&gateway) + } + + httpClient := NewHTTPClient(gateway.transport, NewRequestDumper(gateway.logger)) + + httpClient.DumpRequest(request) + + for i := 0; i < 3; i++ { + response, err = httpClient.Do(request) + if response == nil && err != nil { + continue + } else { + break + } + } + + if err != nil { + return response, err + } + + httpClient.DumpResponse(response) + + header := http.CanonicalHeaderKey("X-Cf-Warnings") + rawWarnings := response.Header[header] + for _, rawWarning := range rawWarnings { + warning, _ := url.QueryUnescape(rawWarning) + *gateway.warnings = append(*gateway.warnings, warning) + } + + return response, err +} + +func makeHTTPTransport(gateway *Gateway) { + gateway.transport = &http.Transport{ + Dial: (&net.Dialer{ + KeepAlive: 30 * time.Second, + Timeout: gateway.DialTimeout, + }).Dial, + TLSClientConfig: NewTLSConfig(gateway.trustedCerts, gateway.config.IsSSLDisabled()), + Proxy: http.ProxyFromEnvironment, + } +} + +func dialTimeout(envDialTimeout string) time.Duration { + dialTimeout := DefaultDialTimeout + if timeout, err := strconv.Atoi(envDialTimeout); err == nil { + dialTimeout = time.Duration(timeout) * time.Second + } + return dialTimeout +} + +func (gateway *Gateway) SetTrustedCerts(certificates []tls.Certificate) { + gateway.trustedCerts = certificates + makeHTTPTransport(gateway) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/http_client.go b/vendor/code.cloudfoundry.org/cli/cf/net/http_client.go new file mode 100644 index 0000000..50184e4 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/http_client.go @@ -0,0 +1,107 @@ +package net + +import ( + _ "crypto/sha512" // #82254112: http://bridge.grumpy-troll.org/2014/05/golang-tls-comodo/ + "crypto/x509" + "fmt" + "net" + "net/http" + "net/url" + "strings" + + "code.cloudfoundry.org/cli/cf/errors" + . "code.cloudfoundry.org/cli/cf/i18n" + "golang.org/x/net/websocket" +) + +//go:generate counterfeiter . HTTPClientInterface + +type HTTPClientInterface interface { + RequestDumperInterface + + Do(*http.Request) (*http.Response, error) + ExecuteCheckRedirect(req *http.Request, via []*http.Request) error +} + +type client struct { + *http.Client + dumper RequestDumper +} + +var NewHTTPClient = func(tr *http.Transport, dumper RequestDumper) HTTPClientInterface { + c := client{ + &http.Client{ + Transport: tr, + }, + dumper, + } + c.CheckRedirect = c.checkRedirect + + return &c +} + +func (cl *client) ExecuteCheckRedirect(req *http.Request, via []*http.Request) error { + return cl.CheckRedirect(req, via) +} + +func (cl *client) checkRedirect(req *http.Request, via []*http.Request) error { + if len(via) > 1 { + return errors.New(T("stopped after 1 redirect")) + } + + prevReq := via[len(via)-1] + cl.copyHeaders(prevReq, req, getBaseDomain(req.URL.String()) == getBaseDomain(via[0].URL.String())) + cl.dumper.DumpRequest(req) + + return nil +} + +func (cl *client) copyHeaders(from *http.Request, to *http.Request, sameDomain bool) { + for key, values := range from.Header { + // do not copy POST-specific headers + if key != "Content-Type" && key != "Content-Length" && !(!sameDomain && key == "Authorization") { + to.Header.Set(key, strings.Join(values, ",")) + } + } +} + +func (cl *client) DumpRequest(req *http.Request) { + cl.dumper.DumpRequest(req) +} + +func (cl *client) DumpResponse(res *http.Response) { + cl.dumper.DumpResponse(res) +} + +func WrapNetworkErrors(host string, err error) error { + var innerErr error + switch typedErr := err.(type) { + case *url.Error: + innerErr = typedErr.Err + case *websocket.DialError: + innerErr = typedErr.Err + } + + if innerErr != nil { + switch typedInnerErr := innerErr.(type) { + case x509.UnknownAuthorityError: + return errors.NewInvalidSSLCert(host, T("unknown authority")) + case x509.HostnameError: + return errors.NewInvalidSSLCert(host, T("not valid for the requested host")) + case x509.CertificateInvalidError: + return errors.NewInvalidSSLCert(host, "") + case *net.OpError: + if typedInnerErr.Op == "dial" { + return fmt.Errorf("%s: %s\n%s", T("Error performing request"), err.Error(), T("TIP: If you are behind a firewall and require an HTTP proxy, verify the https_proxy environment variable is correctly set. Else, check your network connection.")) + } + } + } + + return fmt.Errorf("%s: %s", T("Error performing request"), err.Error()) +} + +func getBaseDomain(host string) string { + hostURL, _ := url.Parse(host) + hostStrs := strings.Split(hostURL.Host, ".") + return hostStrs[len(hostStrs)-2] + "." + hostStrs[len(hostStrs)-1] +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/paginated_resources.go b/vendor/code.cloudfoundry.org/cli/cf/net/paginated_resources.go new file mode 100644 index 0000000..0b3907c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/paginated_resources.go @@ -0,0 +1,30 @@ +package net + +import ( + "encoding/json" + "reflect" +) + +func NewPaginatedResources(exampleResource interface{}) PaginatedResources { + return PaginatedResources{ + resourceType: reflect.TypeOf(exampleResource), + } +} + +type PaginatedResources struct { + NextURL string `json:"next_url"` + ResourcesBytes json.RawMessage `json:"resources"` + resourceType reflect.Type +} + +func (pr PaginatedResources) Resources() ([]interface{}, error) { + slicePtr := reflect.New(reflect.SliceOf(pr.resourceType)) + err := json.Unmarshal([]byte(pr.ResourcesBytes), slicePtr.Interface()) + slice := reflect.Indirect(slicePtr) + + contents := make([]interface{}, 0, slice.Len()) + for i := 0; i < slice.Len(); i++ { + contents = append(contents, slice.Index(i).Interface()) + } + return contents, err +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/progress_reader.go b/vendor/code.cloudfoundry.org/cli/cf/net/progress_reader.go similarity index 86% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/progress_reader.go rename to vendor/code.cloudfoundry.org/cli/cf/net/progress_reader.go index d1b9f90..8716caf 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/progress_reader.go +++ b/vendor/code.cloudfoundry.org/cli/cf/net/progress_reader.go @@ -3,10 +3,11 @@ package net import ( "io" "os" + "sync" "time" - "github.com/cloudfoundry/cli/cf/formatters" - "github.com/cloudfoundry/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/formatters" + "code.cloudfoundry.org/cli/cf/terminal" ) type ProgressReader struct { @@ -16,6 +17,7 @@ type ProgressReader struct { quit chan bool ui terminal.UI outputInterval time.Duration + mutex sync.RWMutex } func NewProgressReader(readSeeker io.ReadSeeker, ui terminal.UI, outputInterval time.Duration) *ProgressReader { @@ -23,6 +25,7 @@ func NewProgressReader(readSeeker io.ReadSeeker, ui terminal.UI, outputInterval ioReadSeeker: readSeeker, ui: ui, outputInterval: outputInterval, + mutex: sync.RWMutex{}, } } @@ -40,7 +43,9 @@ func (progressReader *ProgressReader) Read(p []byte) (int, error) { go progressReader.printProgress(progressReader.quit) } + progressReader.mutex.Lock() progressReader.bytesRead += int64(n) + progressReader.mutex.Unlock() if progressReader.total == progressReader.bytesRead { progressReader.quit <- true @@ -68,7 +73,9 @@ func (progressReader *ProgressReader) printProgress(quit chan bool) { progressReader.ui.Say("\rDone uploading") return case <-timer.C: + progressReader.mutex.RLock() progressReader.ui.PrintCapturingNoOutput("\r%s uploaded...", formatters.ByteSize(progressReader.bytesRead)) + progressReader.mutex.RUnlock() } } } diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/request_dumper.go b/vendor/code.cloudfoundry.org/cli/cf/net/request_dumper.go new file mode 100644 index 0000000..9d048e9 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/request_dumper.go @@ -0,0 +1,49 @@ +package net + +import ( + "net/http" + "net/http/httputil" + "strings" + "time" + + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" +) + +//go:generate counterfeiter . RequestDumperInterface + +type RequestDumperInterface interface { + DumpRequest(*http.Request) + DumpResponse(*http.Response) +} + +type RequestDumper struct { + printer trace.Printer +} + +func NewRequestDumper(printer trace.Printer) RequestDumper { + return RequestDumper{printer: printer} +} + +func (p RequestDumper) DumpRequest(req *http.Request) { + shouldDisplayBody := !strings.Contains(req.Header.Get("Content-Type"), "multipart/form-data") + dumpedRequest, err := httputil.DumpRequest(req, shouldDisplayBody) + if err != nil { + p.printer.Printf(T("Error dumping request\n{{.Err}}\n", map[string]interface{}{"Err": err})) + } else { + p.printer.Printf("\n%s [%s]\n%s\n", terminal.HeaderColor(T("REQUEST:")), time.Now().Format(time.RFC3339), trace.Sanitize(string(dumpedRequest))) + if !shouldDisplayBody { + p.printer.Println(T("[MULTIPART/FORM-DATA CONTENT HIDDEN]")) + } + } +} + +func (p RequestDumper) DumpResponse(res *http.Response) { + dumpedResponse, err := httputil.DumpResponse(res, true) + if err != nil { + p.printer.Printf(T("Error dumping response\n{{.Err}}\n", map[string]interface{}{"Err": err})) + } else { + p.printer.Printf("\n%s [%s]\n%s\n", terminal.HeaderColor(T("RESPONSE:")), time.Now().Format(time.RFC3339), trace.Sanitize(string(dumpedResponse))) + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/routing_api_gateway.go b/vendor/code.cloudfoundry.org/cli/cf/net/routing_api_gateway.go new file mode 100644 index 0000000..c186a87 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/routing_api_gateway.go @@ -0,0 +1,41 @@ +package net + +import ( + "encoding/json" + "net/http" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" +) + +type errorResponse struct { + Name string + Message string +} + +func errorHandler(statusCode int, body []byte) error { + response := errorResponse{} + err := json.Unmarshal(body, &response) + if err != nil { + return errors.NewHTTPError(http.StatusInternalServerError, "", "") + } + + return errors.NewHTTPError(statusCode, response.Name, response.Message) +} + +func NewRoutingAPIGateway(config coreconfig.Reader, clock func() time.Time, ui terminal.UI, logger trace.Printer, envDialTimeout string) Gateway { + return Gateway{ + errHandler: errorHandler, + config: config, + PollingThrottle: DefaultPollingThrottle, + warnings: &[]string{}, + Clock: clock, + ui: ui, + logger: logger, + PollingEnabled: true, + DialTimeout: dialTimeout(envDialTimeout), + } +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/ssl.go b/vendor/code.cloudfoundry.org/cli/cf/net/ssl.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/net/ssl.go rename to vendor/code.cloudfoundry.org/cli/cf/net/ssl.go diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/uaa_gateway.go b/vendor/code.cloudfoundry.org/cli/cf/net/uaa_gateway.go new file mode 100644 index 0000000..29d9105 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/uaa_gateway.go @@ -0,0 +1,41 @@ +package net + +import ( + "encoding/json" + "time" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/trace" +) + +type uaaErrorResponse struct { + Code string `json:"error"` + Description string `json:"error_description"` +} + +var uaaErrorHandler = func(statusCode int, body []byte) error { + response := uaaErrorResponse{} + _ = json.Unmarshal(body, &response) + + if response.Code == "invalid_token" { + return errors.NewInvalidTokenError(response.Description) + } + + return errors.NewHTTPError(statusCode, response.Code, response.Description) +} + +func NewUAAGateway(config coreconfig.Reader, ui terminal.UI, logger trace.Printer, envDialTimeout string) Gateway { + return Gateway{ + errHandler: uaaErrorHandler, + config: config, + PollingThrottle: DefaultPollingThrottle, + warnings: &[]string{}, + Clock: time.Now, + ui: ui, + logger: logger, + PollingEnabled: false, + DialTimeout: dialTimeout(envDialTimeout), + } +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/net/warnings_collector.go b/vendor/code.cloudfoundry.org/cli/cf/net/warnings_collector.go new file mode 100644 index 0000000..a55c6d9 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/net/warnings_collector.go @@ -0,0 +1,70 @@ +package net + +import ( + "fmt" + "os" + "strings" + + "code.cloudfoundry.org/cli/cf/terminal" +) + +const DeprecatedEndpointWarning = "Endpoint deprecated" + +type WarningsCollector struct { + ui terminal.UI + warningProducers []WarningProducer +} + +//go:generate counterfeiter . WarningProducer + +type WarningProducer interface { + Warnings() []string +} + +func NewWarningsCollector(ui terminal.UI, warningsProducers ...WarningProducer) WarningsCollector { + return WarningsCollector{ + ui: ui, + warningProducers: warningsProducers, + } +} + +func (warningsCollector WarningsCollector) PrintWarnings() error { + warnings := []string{} + for _, warningProducer := range warningsCollector.warningProducers { + for _, warning := range warningProducer.Warnings() { + if warning == DeprecatedEndpointWarning { + continue + } + warnings = append(warnings, warning) + } + } + + if os.Getenv("CF_RAISE_ERROR_ON_WARNINGS") != "" { + if len(warnings) > 0 { + return fmt.Errorf(strings.Join(warnings, "\n")) + } + } + + warnings = warningsCollector.removeDuplicates(warnings) + + for _, warning := range warnings { + warningsCollector.ui.Warn(warning) + } + + return nil +} + +func (warningsCollector WarningsCollector) removeDuplicates(stringArray []string) []string { + length := len(stringArray) - 1 + for i := 0; i < length; i++ { + for j := i + 1; j <= length; j++ { + if stringArray[i] == stringArray[j] { + stringArray[j] = stringArray[length] + stringArray = stringArray[0:length] + length-- + j-- + } + } + } + return stringArray +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/api_endpoint.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/api_endpoint.go new file mode 100644 index 0000000..299e2ab --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/api_endpoint.go @@ -0,0 +1,33 @@ +package requirements + +import ( + "fmt" + + "code.cloudfoundry.org/cli/cf" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/terminal" + "errors" +) + +type APIEndpointRequirement struct { + config coreconfig.Reader +} + +func NewAPIEndpointRequirement(config coreconfig.Reader) APIEndpointRequirement { + return APIEndpointRequirement{config} +} + +func (req APIEndpointRequirement) Execute() error { + if req.config.APIEndpoint() == "" { + loginTip := terminal.CommandColor(fmt.Sprintf(T("{{.CFName}} login", map[string]interface{}{"CFName": cf.Name}))) + apiTip := terminal.CommandColor(fmt.Sprintf(T("{{.CFName}} api", map[string]interface{}{"CFName": cf.Name}))) + return errors.New(T("No API endpoint set. Use '{{.LoginTip}}' or '{{.APITip}}' to target an endpoint.", + map[string]interface{}{ + "LoginTip": loginTip, + "APITip": apiTip, + })) + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/application.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/application.go new file mode 100644 index 0000000..2dcce2c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/application.go @@ -0,0 +1,41 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api/applications" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . ApplicationRequirement + +type ApplicationRequirement interface { + Requirement + GetApplication() models.Application +} + +type applicationAPIRequirement struct { + name string + appRepo applications.Repository + application models.Application +} + +func NewApplicationRequirement(name string, aR applications.Repository) *applicationAPIRequirement { + req := &applicationAPIRequirement{} + req.name = name + req.appRepo = aR + return req +} + +func (req *applicationAPIRequirement) Execute() error { + var apiErr error + req.application, apiErr = req.appRepo.Read(req.name) + + if apiErr != nil { + return apiErr + } + + return nil +} + +func (req *applicationAPIRequirement) GetApplication() models.Application { + return req.application +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/buildpack.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/buildpack.go new file mode 100644 index 0000000..d7cb4e0 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/buildpack.go @@ -0,0 +1,41 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . BuildpackRequirement + +type BuildpackRequirement interface { + Requirement + GetBuildpack() models.Buildpack +} + +type buildpackAPIRequirement struct { + name string + buildpackRepo api.BuildpackRepository + buildpack models.Buildpack +} + +func NewBuildpackRequirement(name string, bR api.BuildpackRepository) (req *buildpackAPIRequirement) { + req = new(buildpackAPIRequirement) + req.name = name + req.buildpackRepo = bR + return +} + +func (req *buildpackAPIRequirement) Execute() error { + var apiErr error + req.buildpack, apiErr = req.buildpackRepo.FindByName(req.name) + + if apiErr != nil { + return apiErr + } + + return nil +} + +func (req *buildpackAPIRequirement) GetBuildpack() models.Buildpack { + return req.buildpack +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/config_refreshing_requirement.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/config_refreshing_requirement.go new file mode 100644 index 0000000..329cbab --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/config_refreshing_requirement.go @@ -0,0 +1,36 @@ +package requirements + +import "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + +type configRefreshingRequirement struct { + requirement Requirement + configRefresher ConfigRefresher +} + +//go:generate counterfeiter . ConfigRefresher + +type ConfigRefresher interface { + Refresh() (coreconfig.Warning, error) +} + +func NewConfigRefreshingRequirement(requirement Requirement, configRefresher ConfigRefresher) configRefreshingRequirement { + return configRefreshingRequirement{ + requirement: requirement, + configRefresher: configRefresher, + } +} + +func (c configRefreshingRequirement) Execute() error { + err := c.requirement.Execute() + if err != nil { + // Do the config refresh + _, err = c.configRefresher.Refresh() + if err != nil { + return err + } + + return c.requirement.Execute() + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/dea_application.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/dea_application.go new file mode 100644 index 0000000..a17c7d7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/dea_application.go @@ -0,0 +1,49 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api/applications" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/terminal" +) + +//go:generate counterfeiter . DEAApplicationRequirement + +type DEAApplicationRequirement interface { + Requirement + GetApplication() models.Application +} + +type deaApplicationRequirement struct { + appName string + ui terminal.UI + appRepo applications.Repository + + application models.Application +} + +func NewDEAApplicationRequirement(name string, applicationRepo applications.Repository) DEAApplicationRequirement { + return &deaApplicationRequirement{ + appName: name, + appRepo: applicationRepo, + } +} + +func (req *deaApplicationRequirement) Execute() error { + app, err := req.appRepo.Read(req.appName) + if err != nil { + return err + } + + if app.Diego == true { + return errors.New("The app is running on the Diego backend, which does not support this command.") + } + + req.application = app + + return nil +} + +func (req *deaApplicationRequirement) GetApplication() models.Application { + return req.application +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/diego_application.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/diego_application.go new file mode 100644 index 0000000..0e962c1 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/diego_application.go @@ -0,0 +1,49 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api/applications" + "code.cloudfoundry.org/cli/cf/errors" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/terminal" +) + +//go:generate counterfeiter . DiegoApplicationRequirement + +type DiegoApplicationRequirement interface { + Requirement + GetApplication() models.Application +} + +type diegoApplicationRequirement struct { + appName string + ui terminal.UI + appRepo applications.Repository + + application models.Application +} + +func NewDiegoApplicationRequirement(name string, applicationRepo applications.Repository) DiegoApplicationRequirement { + return &diegoApplicationRequirement{ + appName: name, + appRepo: applicationRepo, + } +} + +func (req *diegoApplicationRequirement) Execute() error { + app, err := req.appRepo.Read(req.appName) + if err != nil { + return err + } + + if app.Diego == false { + return errors.New("The app is running on the DEA backend, which does not support this command.") + } + + req.application = app + + return nil +} + +func (req *diegoApplicationRequirement) GetApplication() models.Application { + return req.application +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/domain.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/domain.go new file mode 100644 index 0000000..1793592 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/domain.go @@ -0,0 +1,44 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . DomainRequirement + +type DomainRequirement interface { + Requirement + GetDomain() models.DomainFields +} + +type domainAPIRequirement struct { + name string + config coreconfig.Reader + domainRepo api.DomainRepository + domain models.DomainFields +} + +func NewDomainRequirement(name string, config coreconfig.Reader, domainRepo api.DomainRepository) (req *domainAPIRequirement) { + req = new(domainAPIRequirement) + req.name = name + req.config = config + req.domainRepo = domainRepo + return +} + +func (req *domainAPIRequirement) Execute() error { + var apiErr error + req.domain, apiErr = req.domainRepo.FindByNameInOrg(req.name, req.config.OrganizationFields().GUID) + + if apiErr != nil { + return apiErr + } + + return nil +} + +func (req *domainAPIRequirement) GetDomain() models.DomainFields { + return req.domain +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/factory.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/factory.go new file mode 100644 index 0000000..6fc8879 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/factory.go @@ -0,0 +1,173 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf" + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + . "code.cloudfoundry.org/cli/cf/i18n" + "github.com/blang/semver" +) + +//go:generate counterfeiter . Factory + +type Factory interface { + NewApplicationRequirement(name string) ApplicationRequirement + NewDEAApplicationRequirement(name string) DEAApplicationRequirement + NewDiegoApplicationRequirement(name string) DiegoApplicationRequirement + NewServiceInstanceRequirement(name string) ServiceInstanceRequirement + NewLoginRequirement() Requirement + NewRoutingAPIRequirement() Requirement + NewSpaceRequirement(name string) SpaceRequirement + NewTargetedSpaceRequirement() Requirement + NewTargetedOrgRequirement() TargetedOrgRequirement + NewOrganizationRequirement(name string) OrganizationRequirement + NewDomainRequirement(name string) DomainRequirement + NewUserRequirement(username string, wantGUID bool) UserRequirement + NewBuildpackRequirement(buildpack string) BuildpackRequirement + NewAPIEndpointRequirement() Requirement + NewMinAPIVersionRequirement(commandName string, requiredVersion semver.Version) Requirement + NewMaxAPIVersionRequirement(commandName string, maximumVersion semver.Version) Requirement + NewUsageRequirement(Usable, string, func() bool) Requirement + NewNumberArguments([]string, ...string) Requirement +} + +type apiRequirementFactory struct { + config coreconfig.ReadWriter + repoLocator api.RepositoryLocator +} + +func NewFactory(config coreconfig.ReadWriter, repoLocator api.RepositoryLocator) (factory apiRequirementFactory) { + return apiRequirementFactory{config, repoLocator} +} + +func (f apiRequirementFactory) NewApplicationRequirement(name string) ApplicationRequirement { + return NewApplicationRequirement( + name, + f.repoLocator.GetApplicationRepository(), + ) +} + +func (f apiRequirementFactory) NewDEAApplicationRequirement(name string) DEAApplicationRequirement { + return NewDEAApplicationRequirement( + name, + f.repoLocator.GetApplicationRepository(), + ) +} + +func (f apiRequirementFactory) NewDiegoApplicationRequirement(name string) DiegoApplicationRequirement { + return NewDiegoApplicationRequirement( + name, + f.repoLocator.GetApplicationRepository(), + ) +} + +func (f apiRequirementFactory) NewServiceInstanceRequirement(name string) ServiceInstanceRequirement { + return NewServiceInstanceRequirement( + name, + f.repoLocator.GetServiceRepository(), + ) +} + +func (f apiRequirementFactory) NewLoginRequirement() Requirement { + return NewLoginRequirement( + f.config, + ) +} + +func (f apiRequirementFactory) NewRoutingAPIRequirement() Requirement { + req := Requirements{ + f.NewMinAPIVersionRequirement(T("This command"), cf.TCPRoutingMinimumAPIVersion), + NewRoutingAPIRequirement( + f.config, + ), + } + + return req +} + +func (f apiRequirementFactory) NewSpaceRequirement(name string) SpaceRequirement { + return NewSpaceRequirement( + name, + f.repoLocator.GetSpaceRepository(), + ) +} + +func (f apiRequirementFactory) NewTargetedSpaceRequirement() Requirement { + return NewTargetedSpaceRequirement( + f.config, + ) +} + +func (f apiRequirementFactory) NewTargetedOrgRequirement() TargetedOrgRequirement { + return NewTargetedOrgRequirement( + f.config, + ) +} + +func (f apiRequirementFactory) NewOrganizationRequirement(name string) OrganizationRequirement { + return NewOrganizationRequirement( + name, + f.repoLocator.GetOrganizationRepository(), + ) +} + +func (f apiRequirementFactory) NewDomainRequirement(name string) DomainRequirement { + return NewDomainRequirement( + name, + f.config, + f.repoLocator.GetDomainRepository(), + ) +} + +func (f apiRequirementFactory) NewUserRequirement(username string, wantGUID bool) UserRequirement { + return NewUserRequirement( + username, + f.repoLocator.GetUserRepository(), + wantGUID, + ) +} + +func (f apiRequirementFactory) NewBuildpackRequirement(buildpack string) BuildpackRequirement { + return NewBuildpackRequirement( + buildpack, + f.repoLocator.GetBuildpackRepository(), + ) +} + +func (f apiRequirementFactory) NewAPIEndpointRequirement() Requirement { + return NewAPIEndpointRequirement( + f.config, + ) +} + +func (f apiRequirementFactory) NewMinAPIVersionRequirement(commandName string, requiredVersion semver.Version) Requirement { + r := NewMinAPIVersionRequirement( + f.config, + commandName, + requiredVersion, + ) + + refresher := coreconfig.APIConfigRefresher{ + Endpoint: f.config.APIEndpoint(), + EndpointRepo: f.repoLocator.GetEndpointRepository(), + Config: f.config, + } + + return NewConfigRefreshingRequirement(r, refresher) +} + +func (f apiRequirementFactory) NewMaxAPIVersionRequirement(commandName string, maximumVersion semver.Version) Requirement { + return NewMaxAPIVersionRequirement( + f.config, + commandName, + maximumVersion, + ) +} + +func (f apiRequirementFactory) NewUsageRequirement(cmd Usable, errorMessage string, pred func() bool) Requirement { + return NewUsageRequirement(cmd, errorMessage, pred) +} + +func (f apiRequirementFactory) NewNumberArguments(passedArgs []string, expectedArgs ...string) Requirement { + return NewNumberArguments(passedArgs, expectedArgs) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/failing.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/failing.go new file mode 100644 index 0000000..70e8ec2 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/failing.go @@ -0,0 +1,11 @@ +package requirements + +import "errors" + +type Failing struct { + Message string +} + +func (r Failing) Execute() error { + return errors.New(r.Message) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/login.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/login.go new file mode 100644 index 0000000..05e5431 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/login.go @@ -0,0 +1,30 @@ +package requirements + +import ( + "errors" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/terminal" +) + +type LoginRequirement struct { + config coreconfig.Reader + apiEndpointRequirement APIEndpointRequirement +} + +func NewLoginRequirement(config coreconfig.Reader) LoginRequirement { + return LoginRequirement{config, APIEndpointRequirement{config}} +} + +func (req LoginRequirement) Execute() error { + + if err := req.apiEndpointRequirement.Execute(); err != nil { + return err + } + + if !req.config.IsLoggedIn() { + return errors.New(terminal.NotLoggedInText()) + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/max_api_version.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/max_api_version.go new file mode 100644 index 0000000..8cebdb2 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/max_api_version.go @@ -0,0 +1,52 @@ +package requirements + +import ( + "errors" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "github.com/blang/semver" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type MaxAPIVersionRequirement struct { + config coreconfig.Reader + feature string + maximumVersion semver.Version +} + +func NewMaxAPIVersionRequirement( + config coreconfig.Reader, + feature string, + maximumVersion semver.Version, +) MaxAPIVersionRequirement { + return MaxAPIVersionRequirement{ + config: config, + feature: feature, + maximumVersion: maximumVersion, + } +} + +func (r MaxAPIVersionRequirement) Execute() error { + if r.config.APIVersion() == "" { + return errors.New(T("Unable to determine CC API Version. Please log in again.")) + } + + apiVersion, err := semver.Make(r.config.APIVersion()) + if err != nil { + return errors.New(T("Unable to parse CC API Version '{{.APIVersion}}'", map[string]interface{}{ + "APIVersion": r.config.APIVersion(), + })) + } + + if apiVersion.GT(r.maximumVersion) { + return errors.New(T(`{{.Feature}} only works up to CF API version {{.MaximumVersion}}. Your target is {{.APIVersion}}.`, + map[string]interface{}{ + "APIVersion": r.config.APIVersion(), + "Feature": r.feature, + "MaximumVersion": r.maximumVersion.String(), + })) + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/min_api_version.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/min_api_version.go new file mode 100644 index 0000000..783ac0f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/min_api_version.go @@ -0,0 +1,52 @@ +package requirements + +import ( + "errors" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "github.com/blang/semver" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type MinAPIVersionRequirement struct { + config coreconfig.Reader + feature string + requiredVersion semver.Version +} + +func NewMinAPIVersionRequirement( + config coreconfig.Reader, + feature string, + requiredVersion semver.Version, +) MinAPIVersionRequirement { + return MinAPIVersionRequirement{ + config: config, + feature: feature, + requiredVersion: requiredVersion, + } +} + +func (r MinAPIVersionRequirement) Execute() error { + if r.config.APIVersion() == "" { + return errors.New(T("Unable to determine CC API Version. Please log in again.")) + } + + apiVersion, err := semver.Make(r.config.APIVersion()) + if err != nil { + return errors.New(T("Unable to parse CC API Version '{{.APIVersion}}'", map[string]interface{}{ + "APIVersion": r.config.APIVersion(), + })) + } + + if apiVersion.LT(r.requiredVersion) { + return errors.New(T(`{{.Feature}} requires CF API version {{.RequiredVersion}}+. Your target is {{.APIVersion}}.`, + map[string]interface{}{ + "APIVersion": r.config.APIVersion(), + "Feature": r.feature, + "RequiredVersion": r.requiredVersion.String(), + })) + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/number_arguments.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/number_arguments.go new file mode 100644 index 0000000..36672da --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/number_arguments.go @@ -0,0 +1,37 @@ +package requirements + +import ( + "strings" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type NumberArguments struct { + passedArgs []string + expectedArgs []string +} + +func NewNumberArguments(passedArgs []string, expectedArgs []string) Requirement { + return NumberArguments{ + passedArgs: passedArgs, + expectedArgs: expectedArgs, + } +} + +func (r NumberArguments) Execute() error { + if len(r.passedArgs) != len(r.expectedArgs) { + return NumberArgumentsError{ExpectedArgs: r.expectedArgs} + } + + return nil +} + +type NumberArgumentsError struct { + ExpectedArgs []string +} + +func (e NumberArgumentsError) Error() string { + return T("Incorrect Usage. Requires {{.Arguments}}", map[string]string{ + "Arguments": strings.Join(e.ExpectedArgs, ", "), + }) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/organization.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/organization.go new file mode 100644 index 0000000..a52a921 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/organization.go @@ -0,0 +1,46 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api/organizations" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . OrganizationRequirement + +type OrganizationRequirement interface { + Requirement + SetOrganizationName(string) + GetOrganization() models.Organization +} + +type organizationAPIRequirement struct { + name string + orgRepo organizations.OrganizationRepository + org models.Organization +} + +func NewOrganizationRequirement(name string, sR organizations.OrganizationRepository) *organizationAPIRequirement { + req := &organizationAPIRequirement{} + req.name = name + req.orgRepo = sR + return req +} + +func (req *organizationAPIRequirement) Execute() error { + var apiErr error + req.org, apiErr = req.orgRepo.FindByName(req.name) + + if apiErr != nil { + return apiErr + } + + return nil +} + +func (req *organizationAPIRequirement) SetOrganizationName(name string) { + req.name = name +} + +func (req *organizationAPIRequirement) GetOrganization() models.Organization { + return req.org +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/passing.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/passing.go new file mode 100644 index 0000000..fd44508 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/passing.go @@ -0,0 +1,9 @@ +package requirements + +type Passing struct { + Type string +} + +func (r Passing) Execute() error { + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/requirement.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/requirement.go new file mode 100644 index 0000000..c4d26dd --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/requirement.go @@ -0,0 +1,7 @@ +package requirements + +//go:generate counterfeiter . Requirement + +type Requirement interface { + Execute() error +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/requirements.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/requirements.go new file mode 100644 index 0000000..526beab --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/requirements.go @@ -0,0 +1,16 @@ +package requirements + +type Requirements []Requirement + +func (r Requirements) Execute() error { + var err error + + for _, req := range r { + err = req.Execute() + if err != nil { + return err + } + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/routing_api.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/routing_api.go new file mode 100644 index 0000000..15e9189 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/routing_api.go @@ -0,0 +1,26 @@ +package requirements + +import ( + "errors" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type RoutingAPIRequirement struct { + config coreconfig.Reader +} + +func NewRoutingAPIRequirement(config coreconfig.Reader) RoutingAPIRequirement { + return RoutingAPIRequirement{ + config, + } +} + +func (req RoutingAPIRequirement) Execute() error { + if len(req.config.RoutingAPIEndpoint()) == 0 { + return errors.New(T("This command requires the Routing API. Your targeted endpoint reports it is not enabled.")) + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/service_instance.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/service_instance.go new file mode 100644 index 0000000..3536c1a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/service_instance.go @@ -0,0 +1,41 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . ServiceInstanceRequirement + +type ServiceInstanceRequirement interface { + Requirement + GetServiceInstance() models.ServiceInstance +} + +type serviceInstanceAPIRequirement struct { + name string + serviceRepo api.ServiceRepository + serviceInstance models.ServiceInstance +} + +func NewServiceInstanceRequirement(name string, sR api.ServiceRepository) (req *serviceInstanceAPIRequirement) { + req = new(serviceInstanceAPIRequirement) + req.name = name + req.serviceRepo = sR + return +} + +func (req *serviceInstanceAPIRequirement) Execute() error { + var apiErr error + req.serviceInstance, apiErr = req.serviceRepo.FindInstanceByName(req.name) + + if apiErr != nil { + return apiErr + } + + return nil +} + +func (req *serviceInstanceAPIRequirement) GetServiceInstance() models.ServiceInstance { + return req.serviceInstance +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/space.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/space.go new file mode 100644 index 0000000..4527cd9 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/space.go @@ -0,0 +1,46 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api/spaces" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . SpaceRequirement + +type SpaceRequirement interface { + Requirement + SetSpaceName(string) + GetSpace() models.Space +} + +type spaceAPIRequirement struct { + name string + spaceRepo spaces.SpaceRepository + space models.Space +} + +func NewSpaceRequirement(name string, sR spaces.SpaceRepository) *spaceAPIRequirement { + req := &spaceAPIRequirement{} + req.name = name + req.spaceRepo = sR + return req +} + +func (req *spaceAPIRequirement) SetSpaceName(name string) { + req.name = name +} + +func (req *spaceAPIRequirement) Execute() error { + var apiErr error + req.space, apiErr = req.spaceRepo.FindByName(req.name) + + if apiErr != nil { + return apiErr + } + + return nil +} + +func (req *spaceAPIRequirement) GetSpace() models.Space { + return req.space +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/targeted_organization.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/targeted_organization.go new file mode 100644 index 0000000..b08ef6f --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/targeted_organization.go @@ -0,0 +1,40 @@ +package requirements + +import ( + "errors" + "fmt" + + "code.cloudfoundry.org/cli/cf" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/cf/terminal" +) + +//go:generate counterfeiter . TargetedOrgRequirement + +type TargetedOrgRequirement interface { + Requirement + GetOrganizationFields() models.OrganizationFields +} + +type targetedOrgAPIRequirement struct { + config coreconfig.Reader +} + +func NewTargetedOrgRequirement(config coreconfig.Reader) TargetedOrgRequirement { + return targetedOrgAPIRequirement{config} +} + +func (req targetedOrgAPIRequirement) Execute() error { + if !req.config.HasOrganization() { + message := fmt.Sprintf(T("No org targeted, use '{{.Command}}' to target an org.", map[string]interface{}{"Command": terminal.CommandColor(cf.Name + " target -o ORG")})) + return errors.New(message) + } + + return nil +} + +func (req targetedOrgAPIRequirement) GetOrganizationFields() (org models.OrganizationFields) { + return req.config.OrganizationFields() +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/targeted_space.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/targeted_space.go new file mode 100644 index 0000000..7f0bc55 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/targeted_space.go @@ -0,0 +1,34 @@ +package requirements + +import ( + "fmt" + + "errors" + + "code.cloudfoundry.org/cli/cf" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/terminal" +) + +type TargetedSpaceRequirement struct { + config coreconfig.Reader +} + +func NewTargetedSpaceRequirement(config coreconfig.Reader) TargetedSpaceRequirement { + return TargetedSpaceRequirement{config} +} + +func (req TargetedSpaceRequirement) Execute() error { + if !req.config.HasOrganization() { + message := fmt.Sprintf(T("No org and space targeted, use '{{.Command}}' to target an org and space", map[string]interface{}{"Command": terminal.CommandColor(cf.Name + " target -o ORG -s SPACE")})) + return errors.New(message) + } + + if !req.config.HasSpace() { + message := fmt.Sprintf(T("No space targeted, use '{{.Command}}' to target a space.", map[string]interface{}{"Command": terminal.CommandColor("cf target -s")})) + return errors.New(message) + } + + return nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/usage_requirement.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/usage_requirement.go new file mode 100644 index 0000000..ac2f219 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/usage_requirement.go @@ -0,0 +1,30 @@ +package requirements + +import ( + "errors" + "fmt" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +type RequirementFunction func() error + +func (f RequirementFunction) Execute() error { + return f() +} + +func NewUsageRequirement(cmd Usable, errorMessage string, pred func() bool) Requirement { + return RequirementFunction(func() error { + if pred() { + m := fmt.Sprintf("%s. %s\n\n%s", T("Incorrect Usage"), errorMessage, cmd.Usage()) + + return errors.New(m) + } + + return nil + }) +} + +type Usable interface { + Usage() string +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/requirements/user.go b/vendor/code.cloudfoundry.org/cli/cf/requirements/user.go new file mode 100644 index 0000000..f7a354c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/requirements/user.go @@ -0,0 +1,52 @@ +package requirements + +import ( + "code.cloudfoundry.org/cli/cf/api" + "code.cloudfoundry.org/cli/cf/models" +) + +//go:generate counterfeiter . UserRequirement + +type UserRequirement interface { + Requirement + GetUser() models.UserFields +} + +type userAPIRequirement struct { + username string + userRepo api.UserRepository + wantGUID bool + + user models.UserFields +} + +func NewUserRequirement( + username string, + userRepo api.UserRepository, + wantGUID bool, +) *userAPIRequirement { + req := new(userAPIRequirement) + req.username = username + req.userRepo = userRepo + req.wantGUID = wantGUID + + return req +} + +func (req *userAPIRequirement) Execute() error { + if req.wantGUID { + var err error + req.user, err = req.userRepo.FindByUsername(req.username) + if err != nil { + return err + } + } else { + req.user = models.UserFields{Username: req.username} + } + + return nil +} + +func (req *userAPIRequirement) GetUser() models.UserFields { + return req.user +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/resources/i18n_resources.go b/vendor/code.cloudfoundry.org/cli/cf/resources/i18n_resources.go new file mode 100644 index 0000000..60af521 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/resources/i18n_resources.go @@ -0,0 +1,448 @@ +// Code generated by go-bindata. +// sources: +// cf/i18n/resources/de-de.all.json +// cf/i18n/resources/en-us.all.json +// cf/i18n/resources/es-es.all.json +// cf/i18n/resources/fr-fr.all.json +// cf/i18n/resources/it-it.all.json +// cf/i18n/resources/ja-jp.all.json +// cf/i18n/resources/ko-kr.all.json +// cf/i18n/resources/pt-br.all.json +// cf/i18n/resources/zh-hans.all.json +// cf/i18n/resources/zh-hant.all.json +// DO NOT EDIT! + +package resources + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _cfI18nResourcesDeDeAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xdd\x72\x23\xb7\x92\x20\x7c\xbf\x4f\x81\xed\x89\x2f\xd4\x3e\x21\xb2\x6d\x1f\xcf\xc6\x46\x4f\x6c\xcc\xb2\x25\xb6\x9a\xa7\xd5\x12\x87\x94\xda\xe3\xb6\x4e\xc8\x20\x2b\x49\xc2\x2a\x02\x75\x00\x94\x64\xa9\x8f\xf6\x6a\x9f\xe1\xbb\xda\x88\x73\xe3\x67\xf0\x95\xef\xf4\x62\x5f\x20\x01\xd4\x0f\x59\x28\x16\xff\xd4\x9e\xf9\x76\x36\xd6\x47\x5d\xac\xca\x4c\x24\x12\x89\x44\x22\x7f\x7e\xfc\x2f\x84\x7c\xfe\x2f\x84\x10\xf2\x82\x45\x2f\x5e\x93\x17\x57\xfc\x8a\x5f\xf4\xfa\xaf\xaf\xf8\x8b\x43\xfb\x5c\x4b\xca\x55\x4c\x35\x13\xbc\xf0\x02\xbe\xf1\x5f\x08\x79\x3c\xac\x82\xf0\x83\x48\x25\xf9\xcb\xf0\xfc\x8c\x28\x2d\x19\x9f\x12\x75\xcf\x35\xfd\x85\x30\x45\x18\xbf\xa5\x31\x8b\xda\x84\xf4\xa5\x48\x40\x16\x7e\xd2\x33\xa6\x5e\x13\x32\x9e\x10\x05\xba\x25\x53\xce\x19\x9f\xb6\x80\xdf\x32\x29\xf8\x1c\xb8\x6e\xdd\x52\xc9\xe8\x28\x86\xd6\x54\x8a\x34\x21\x07\x9f\xaf\x5e\x70\x3a\x87\xab\x17\xaf\xaf\x5e\xdc\xd2\x38\x85\xab\x17\x87\xcb\x8f\x1e\x0f\x6a\xc6\xd2\x9b\x49\x40\x52\x5b\x9f\x80\x8d\x67\xc0\x27\x22\x9e\x42\x46\x94\x26\x29\x9f\x3e\xfd\x1e\x6b\x36\x6d\x13\x72\xcc\x80\xdc\x08\x29\xe1\x46\x03\x19\xda\x77\x62\x9a\x6a\xd0\xaf\xf7\x42\xf6\x5e\x19\xac\x34\x9d\xfe\x07\x64\xf0\x4e\xc9\x0e\x30\xf8\x4f\xe4\x62\x06\x0a\x88\x02\x79\xcb\xc6\x40\x92\x98\x72\x45\x66\xf4\x16\x08\xe5\x84\x2a\x25\xc6\x8c\x6a\x88\xc8\x58\x28\xdd\x26\x47\x12\xa8\x36\xb3\x40\xb3\x2f\x18\x57\x9a\xf2\x31\x90\x3b\x16\xc7\x84\xf1\x71\x2a\x91\xfd\xf6\x8b\x20\xbb\xfe\x64\x38\xa0\x80\x93\xa1\x85\x93\xc4\x4f\xbf\x72\xe0\x44\x31\x1e\x91\xf7\x42\x69\xe0\xe4\x21\x9d\x82\x90\x11\x07\xdd\x26\x6f\x80\xcd\x49\x57\x2a\x0d\x71\x0c\x9c\x00\xe3\x20\xfd\xb7\x96\x84\x07\x32\xa1\xf8\x5b\x64\x00\x7b\x18\x94\xb7\x43\x63\xef\x24\x09\x51\x9a\x4a\x0d\x51\x8d\x12\x30\x6f\x4d\xc1\xbe\xa7\xc3\xaa\xc0\x01\xd3\x40\xc6\x33\xca\xa7\x10\x11\x2d\x3c\xf4\x43\x32\x4a\x35\xe1\x42\x03\xd1\x33\xaa\x09\xd3\x64\x46\x15\xf9\x3a\xe3\x9d\x6a\x07\x09\xa8\xc3\xf7\xf9\x73\xbb\x93\x24\x67\x74\x0e\x8f\x8f\xe4\x8e\x2a\x8f\x8f\xa4\xca\xcc\x91\x9b\x85\xf9\x9c\xf2\x88\xfc\xf4\xf9\x73\xfb\xc8\xfe\xfd\xf8\xf8\xd3\x8a\xf1\x96\x01\xa7\x32\x02\x32\x67\xda\x32\x76\x4e\xde\xc0\x04\x66\x71\xce\x94\xd7\xcb\xc0\x03\x44\x9f\x09\x42\x13\x46\x80\x47\x89\x60\x5c\x1b\x29\x0f\x4b\x48\x57\x39\xd4\x37\xc0\x38\xe9\xf4\x7b\xad\x2e\x8f\x92\x94\xdf\x68\x32\x01\xa5\xa7\x10\xc3\x54\x07\x27\x77\x20\x52\xc3\x6e\x41\x46\x40\x52\x3e\xa7\x49\x02\x91\xd1\x0c\x5c\x68\x32\x4e\xa5\x04\xae\xe3\x7b\xe2\x9e\x6b\x41\xf4\x0c\x08\x4d\x92\x98\x8d\x91\x84\x30\x59\x66\xe1\x22\xf0\x43\x12\x81\x04\x4e\x3e\xa5\x46\x46\x53\xb3\x28\xd2\xc9\x14\x66\x62\x04\x9c\xdc\x81\x8c\x8c\x34\x8b\x38\x3e\xc4\xb5\x3f\x17\x66\xfd\x52\x8e\xa3\x01\x49\x3a\xfc\x0e\x78\x64\xbe\x2a\x48\x79\x68\x30\x66\x9f\x22\xe4\x52\x01\x39\x18\x4f\xc8\x9c\xca\x1b\xd0\x49\x4c\xc7\x40\x5a\x8a\x0c\xbb\x83\x8f\xbd\xa3\xee\x81\x19\xc5\x2d\x83\x3b\x12\x81\x1a\x4b\x96\x18\x92\x15\x11\x13\xc2\x78\xc4\x6e\x59\x94\xd2\xd8\x2d\x6f\x31\x21\x94\x4c\xd9\xad\x21\xd0\xae\xa0\xf0\x70\x71\x07\x24\xe4\x23\x48\x43\xaf\x59\xaf\xac\x96\x8a\x43\x92\x1a\x09\x51\xe3\x99\x04\x36\x4a\xf9\xd4\x2e\xd6\x07\x88\xcd\xa8\xfb\xb8\xca\x71\xf5\x2a\x62\x96\xc9\x14\x46\xc0\x73\x2d\x40\x28\x7f\x48\x1f\x80\x4d\x21\xbc\x6c\x91\x19\x1d\xa5\xd8\x94\x13\x29\x62\x50\xe4\x8e\xe9\x19\x39\x30\x32\x68\x27\xf6\x52\x81\x7c\x7c\x44\x1d\x2a\xe4\xb4\x65\x5e\x3a\x20\x66\x11\x54\xbf\xa3\x12\x3a\x06\xfb\xd6\x0a\x36\x0c\x04\x2a\x18\xb3\x16\x56\xa1\x4b\x9b\xa0\x23\x0f\x28\x3b\x10\x5c\x30\x38\x56\x9c\x77\x03\xea\xed\x05\x95\x53\xd0\xd9\x4a\xc3\x29\xd7\xf8\x8c\x70\xb8\x23\x08\x79\xc5\x10\x16\x26\xb2\x12\x2c\xce\xa1\x99\x23\x4e\x38\xa4\xc0\xc9\x1b\x90\x66\x47\x23\x0f\x29\xe1\xa9\x7e\x68\x4a\x6f\x88\x4e\x21\xa7\xeb\x53\xb9\x4c\x1d\x12\x47\xce\xe5\x94\x72\xa6\x10\x04\xa1\xb1\x22\x9f\x18\xc4\x84\xa6\xea\x21\xbd\x7b\xfa\x75\x16\xaf\x20\x36\x75\x8b\x2a\x16\x53\xc6\x49\x8b\x1a\x45\x43\x5a\x2d\x75\xc3\x92\x96\x52\x71\x0b\x4d\x0c\x04\x7e\x40\x84\xc4\x57\x8d\x0a\xab\x79\xcb\xe8\xfd\x34\x49\x24\x28\x6b\x87\x10\x90\x52\xc8\xf5\x06\xdc\x94\xa0\x08\x9a\x90\x84\x1c\x8b\xec\x76\xfb\x16\x66\x31\x48\x33\x93\x29\xd7\x20\x23\xf9\xf4\xfb\xf8\xa6\x86\x47\x2c\xb1\x3c\xfa\x89\x46\x51\x2b\x89\xd3\x29\xe3\x2d\x09\x89\xf8\x29\xdb\x59\xb4\x20\x34\x8a\x88\x79\xa8\x42\x7a\xa4\x1a\x3c\x21\xe4\xe8\xed\xf5\x59\xe7\x43\x97\x8c\x45\x72\xdf\x52\x22\x95\x63\x20\xc3\xf3\xcb\xc1\x51\xb7\xd5\xe9\xf7\xc9\x45\x67\x70\xd2\xbd\xc0\x3f\x7f\x6c\x29\xff\xcf\x61\xbf\x73\xd4\x25\x3f\xb6\x84\x7f\x70\x3e\x38\xf9\xeb\x5f\xc9\x8f\xad\x16\x17\x2d\x69\xb7\xa5\xbf\xae\xb9\xa3\x12\x42\xce\x51\x65\xd2\x38\xbe\x27\x89\x14\xb7\x2c\x02\x42\x49\x6c\x94\xb7\x98\xd8\xd1\xb6\x22\x88\xd9\x9c\x99\x2d\x56\xd3\xa9\xb2\xbb\x39\xda\x3d\x23\x20\x77\x92\x69\x63\x71\xb8\xcd\xe4\xe3\x51\xa7\x7f\xed\xb4\xe2\x90\x14\x6c\x38\xe2\x6d\x38\x32\x11\x92\x50\x7e\x4f\x46\xc2\x68\x8b\xc2\xee\x13\xe4\x63\x81\x4a\xe2\x4d\x21\x23\x30\xb8\x1c\x4e\x99\xd2\x6e\xa3\x4e\xe5\x78\x46\xde\x1b\x92\x15\x19\xc1\x54\x02\x7f\x30\xa4\x5d\x18\xa2\x1f\x52\x69\xc4\x6d\xf2\xf4\xfb\x34\xe5\xd3\x43\x23\x18\x64\xf2\xf4\xbb\x24\xc6\x7a\x22\x53\x18\xa5\x46\x0e\x81\xe7\x5b\x14\x70\xc2\xd0\xac\x22\x97\x73\xfc\x7d\xaa\xb2\x31\x94\x87\x39\x45\xc5\xcf\x20\xdf\x02\x03\x6a\xbc\x9a\xdd\x6e\x37\x6a\xa9\x04\xc6\x6c\xc2\xc6\x64\x2c\xf8\x84\x4d\x53\x69\x57\x77\x42\x25\x9d\x83\x06\x69\x6c\x7f\x42\x09\x8a\xb8\x3d\x1c\x88\xd1\xcf\x30\xd6\x84\xf1\x56\xcc\x38\xb4\xaf\x78\x41\xb6\xd2\x24\xa2\x1a\x5a\xde\x60\x6d\x8d\x9b\x9b\xcd\xc6\xac\x0f\x49\xc6\x84\xc5\x60\x08\xd4\x94\x71\x3c\x98\x6c\x49\x7c\x9b\x20\xae\x8b\x19\x90\x84\xea\x99\x97\xa3\xc2\x77\x16\x23\xe5\x46\xda\x8c\x75\x3e\x52\x22\x36\x56\x8e\x90\x44\x82\x11\x92\xdb\xfc\x53\x4b\xdf\x2a\x46\xf4\x3b\x17\xef\xae\x2f\xce\xaf\xdf\xf6\x4e\xbb\x6e\xac\xdd\x5f\xe8\x3c\x89\xc1\xc8\xfc\x12\x89\xaf\xf1\x8d\xcf\xf8\x5f\x42\xc8\xd5\x8b\x71\x9c\x2a\x0d\xf2\x9a\x8b\x08\xd4\xd5\x8b\xd7\xf9\x6f\xf6\x67\x91\x72\x6d\x1e\xff\xf3\x61\xe9\xf9\x1c\xe6\x42\xde\x5f\xcf\x47\xe6\xb7\x6f\xbe\xfe\xf6\x3b\xff\xeb\x23\xfe\xf1\xb8\xa6\xf4\xbb\x01\xa9\x04\x1e\xd8\x84\xa9\xf1\xcc\x58\xff\x05\xde\xab\x8c\x87\x86\xf5\x66\xad\xcc\x89\x3b\x89\x01\xb7\x27\xb6\xf3\xd1\xcf\x70\x63\xe4\x47\xc3\x54\x32\x90\x7a\x61\x99\xec\x4b\xa2\x96\x57\xf1\x31\xd5\xc0\x70\x15\x2f\x0f\x8b\x87\xc6\xc5\x57\x0d\x6c\x61\x34\x56\xd4\x8e\x8d\x45\x36\xa1\x11\xfe\xda\xf7\xb0\x22\x24\xe0\x86\x72\x84\x98\x49\x99\xb4\xbb\x8d\x17\xb4\xec\x4b\x77\x14\xb3\x64\x2b\x60\x7c\x03\x99\x7b\x03\x4c\x25\x66\xdb\x46\x3d\x64\xb0\xfa\x51\xa8\xe2\x28\x16\xc4\x6f\x8f\xf2\xf7\x05\x74\xd6\x6b\xc7\x0b\xcf\xb8\x11\xe3\x51\xc6\xb6\x4e\xbf\x6f\x9f\x3a\x4d\x7b\xdd\x3b\x1b\x5e\x74\xce\x8e\xba\xff\x3f\xd6\x66\xcd\x19\xb4\xad\x96\x4b\x40\xce\x99\x52\x66\xc5\x19\x81\xb9\x7a\x21\x81\x46\x2d\xc1\xe3\xfb\xab\x17\x7f\x54\x85\xf5\xfc\xe2\xf4\x9f\x5e\x95\x6d\x25\x70\x9b\xa9\xb8\x46\xb2\xf7\x07\x50\x56\x63\x09\x45\x2d\xef\x78\x42\xfa\xa7\x9d\xb3\xff\x40\x2a\x6b\xf7\x1a\x6b\x5b\x3e\xfd\x5f\xfb\x6c\x43\x75\xf7\x5c\x02\xf9\x85\x94\xde\x1e\x75\xde\x1e\x44\x76\x53\xdd\xf7\xdc\xd6\x5d\xdf\xac\x5d\x35\x13\x69\x1c\xe1\x12\x27\x0f\x2c\xc1\x65\x7c\x48\x28\x49\x65\x6c\xd7\x75\xfe\xd0\x1c\xdf\x49\x2c\xc6\x34\x26\x11\x93\x30\xd6\x42\xde\xb7\x49\x5f\x28\x86\x0a\x87\x29\x42\x49\x82\xff\xba\x05\x2b\xba\x20\x0f\x89\x02\xad\x48\x22\x99\x90\x4c\xdf\x1f\xa2\x5f\x92\x29\xa2\x04\x7a\xee\x27\x52\xcc\x49\x2c\xee\x40\x69\x83\x6d\xc6\xa6\x33\x08\x5f\xa3\x14\x85\x40\x89\x38\xd6\x4e\x06\x6f\xc4\x3c\x91\x6c\x6e\xd6\x89\x13\xc8\x43\xfb\xc3\xe5\xe0\x34\x9f\xf3\xe2\x5b\xdc\x49\x00\x0a\x89\x99\xa1\x58\xdc\xd0\x18\x94\x11\xba\x07\x60\xe3\x19\x37\x34\x9a\x2d\x11\x6f\xae\x0a\x63\xd4\x16\x72\x36\xce\x29\xe5\x0f\x40\x3e\xd1\x59\x7c\x48\x62\x98\xe2\xad\x01\xe9\xdb\xe1\x3e\xfd\x6a\x7d\xf7\xe8\x1d\xbd\x63\x32\x22\xb7\x82\x13\x83\x92\x33\x88\x24\x9b\xba\x6b\x1f\x49\x66\x4f\xbf\x8d\x67\xf8\x2f\x03\x09\xb9\x63\xe8\x0c\x7b\x13\x50\x6d\xdb\xad\x21\xb2\x4a\x78\x03\xd3\xb2\xa7\xfd\xf4\xdb\x1b\x30\xa2\x18\x9f\xc6\x40\xa8\x94\xf4\xde\xba\x99\x0b\xda\xd6\xec\x23\xca\x6c\x45\xd6\xe1\x3e\xb2\x77\x2e\x40\x64\x1a\x43\x9d\x07\xc7\x4c\xd9\x08\x24\x30\x3d\x05\x54\x1f\x1a\xec\x14\x6e\x6b\xa8\xe0\x8d\x9a\x17\x84\xa7\xdf\x47\x76\x2a\x0b\x0e\x78\x4e\x3a\x38\x12\xa3\x9d\x0a\x0b\x0f\x38\xb9\xb5\xba\x05\xb8\xf5\x07\x99\xff\x3f\x80\x29\xc4\x86\x85\xce\x97\x5f\xe7\xcb\xd9\x96\xfb\x16\x02\xee\xaf\x85\x09\xc0\x41\x6d\x35\x09\x16\x2e\xbe\xfe\x86\x2a\x20\xe7\xce\x8a\x51\xd6\x6a\x14\x73\xa6\xcd\xaa\x33\x6b\xd0\x98\x54\xf8\xa5\xfa\x5b\x4a\x25\x90\x91\xa4\xe3\x1b\xb3\x54\xcd\x8f\xc5\x8b\xd0\x19\x8b\x23\x6f\x0e\x99\x17\x25\xfc\x2d\x65\x12\x22\xa3\xc2\xb5\x1b\x45\x9b\x10\xa7\xfb\x3e\xe2\x1e\xfd\xb3\x12\xdc\x0e\x0f\xec\xf6\x6d\x75\xdd\x8f\x4e\x33\x15\x8f\xb4\x89\x14\x5a\x8c\x45\x6c\xad\x3d\x3d\x4e\xcc\x46\x94\xff\x1c\x81\xd2\x8c\xa3\x38\xd9\x37\xbe\xf9\xba\xfd\xed\x77\xdf\xb5\xbf\x69\x7f\xf3\xdf\xcb\x6f\x26\x42\x6a\x67\x33\xfe\xf9\xcf\x5f\xff\x37\x67\x2e\x7a\x2d\xf8\xd7\xe7\x95\x4f\x7b\xe1\xed\x1e\x14\x04\xf4\x8a\xef\x58\x44\x09\x39\xa6\x6a\x61\xc6\x6f\xb4\x55\x36\x56\x9e\x52\x35\x85\x98\x2a\x05\x1c\xd5\x10\xb3\x0a\xc8\x91\xc6\x78\x44\x78\x2a\x11\x3a\x8c\x6f\x70\x1f\x7e\x1f\xd3\xf9\xdc\xec\xd1\xe6\x75\xf3\xc3\x43\x3a\x85\xd9\xd3\x6f\x12\x7f\x45\x37\xba\xbf\xc1\x03\xee\x10\x02\x01\x39\x11\x32\x02\x19\xb3\xf1\x2c\x17\x87\xa5\xad\x10\xb2\xbd\xd0\x0e\x17\xe9\xf8\x03\x48\x47\x68\xa5\x7f\x64\x70\x47\x68\x1c\x8b\x3b\x74\xff\xfe\x2d\x15\x9a\xfa\x1b\x38\x6f\x32\xd8\x87\xa1\xcb\x34\x42\xc8\xa7\x34\x7e\xfa\x55\x29\x33\xe8\x13\xf9\xf4\xdb\xd3\x3f\x80\xdb\x39\x7c\xfa\x95\xdf\x58\x87\x33\xde\xb1\x2d\x00\x24\x66\x6b\x31\x4c\x0f\x50\x47\x23\xa3\x7e\xa8\x22\x41\xd4\x33\xc6\xcd\xe4\x19\x39\xd2\x78\x59\x14\x08\x8c\x20\x91\x00\x7b\x57\x0c\xbf\x98\x2d\x8e\x9a\xad\x5c\x42\x22\x42\x80\xf1\xa5\x58\x91\x01\xe0\x46\x28\xe4\x3d\xe1\x6c\x3c\xd3\xe4\x56\xc8\x19\xe5\x51\x90\xe6\x0a\x44\x9c\xd0\x5b\xca\x62\xe4\xaf\xbd\x71\x41\xd4\x6b\xde\xad\x4c\x84\x24\x21\x6a\x51\xf8\x02\xdf\x19\xab\x25\x36\x87\xcc\x7b\x1f\x4e\x10\x82\x62\x6f\xe7\xad\xa6\x50\x79\x38\x40\x13\xb8\x22\x49\xd6\x81\x2b\x92\xa4\x06\x2c\xcc\x13\x7d\x5f\x37\x31\x31\x80\x0c\x7f\x6e\x98\x9f\x33\xdc\x31\x3b\x2c\x42\x06\x20\x9b\x57\x4c\xb4\x55\x4f\x23\x2a\x83\x42\xe5\x90\x49\x50\x89\xe0\x11\xe3\xd3\x36\xe9\xc7\x60\xb4\xd4\x9c\xde\x00\x51\xa9\x04\xc2\xb4\xb5\x1b\xed\xd9\xae\xc1\xf4\x13\xca\xf5\x9d\x31\x1e\xb5\x25\xa4\x4d\xde\x98\x4d\xad\x7c\x00\x63\xe3\x99\x31\x3d\x23\xaa\x14\x01\x85\xff\x76\xb7\xa8\x05\x53\xbc\x1f\xa7\xd3\x16\xe3\xad\xc2\xd0\x50\x74\xe3\xa0\xd9\x65\x46\x33\x11\x29\x5f\x31\x95\x96\x41\x53\x98\xa4\x35\x0b\x41\xc2\x5c\xdc\x66\x16\xb0\xbb\x75\x93\x9e\x14\x06\xaa\x1e\x87\x37\x24\xed\x25\x98\xf9\x2b\x1f\x86\x22\xc0\xf5\x04\x24\x0f\x08\xd1\xd5\x8b\x3e\xf2\x59\x5d\xbd\xf0\x1b\x7b\x36\x32\xbf\xab\xbb\x49\x83\x88\x44\x54\xd3\x60\xbc\x44\x01\x52\x76\x64\x25\x11\x98\x3d\x2a\x9b\x27\x67\x6c\xf3\x05\xbe\x04\x98\x7c\x90\xc9\x28\x91\x30\x35\xa3\x93\x18\x8e\x85\x97\xaf\x6d\x32\x04\x7b\x5d\x3c\x83\x38\x09\xc9\xec\x01\x0a\x2d\x86\xd1\x58\x10\x78\x82\x06\xe9\x22\x79\xda\x46\x46\x66\x45\x30\xd5\x84\x48\x91\x6a\x50\x07\xa5\x13\x92\x99\xa8\x10\x56\xff\xfe\x3c\x35\x52\x97\xdf\x50\x1a\x83\x20\x80\xe2\xf3\xe7\xf6\x47\x90\x8a\x09\x3e\x9c\x09\xa9\x1f\x1f\xf3\xb8\x0d\xf7\xfc\x54\xf0\x29\x3e\x96\x60\x14\xae\x20\x74\x3c\x86\x44\x43\x14\x9a\x92\x2a\x98\x69\x35\x4c\x17\xb4\x43\xd3\xf1\x8c\xd0\x9b\x07\x48\xea\xce\x1c\x5f\x65\xea\x0c\x35\x77\xd0\xe0\xff\x0a\x99\xef\xb5\x59\xb6\x1d\x04\xa0\xfe\xe9\x4f\x1d\xad\x81\x9b\x8f\x5f\x13\x27\x4b\x38\xd6\x11\xe3\xd4\xac\x82\xec\x9a\x79\x74\x4f\x12\x81\xaf\xa2\x5b\x2c\xe5\x5a\x9a\xd3\x72\x44\x68\xaa\x67\x42\xaa\x36\xe9\x71\xa5\x69\x1c\x23\x07\x53\xe5\xf7\x12\x45\xa8\x26\xf7\x22\x95\x44\xdc\x71\x22\x99\xba\x69\xff\xe9\x4f\xc6\x3a\x39\x16\xe6\x31\xb9\xa3\x1c\x8f\x9e\xcc\x7d\x8d\x3e\x30\xab\x86\x3e\x7f\x6e\x5b\x92\x1e\x1f\xff\x35\x30\xda\x3f\xfd\xa9\x33\x9e\xe9\x94\x4f\x5f\x7b\x75\xa2\x32\xb6\xc6\x8a\xbc\x61\xfc\xe9\x57\xeb\xa2\x30\x16\x9d\xe0\x64\xfe\xf4\xdb\x34\x46\xf5\x74\x07\x4c\x41\xae\x4c\xb5\xa4\x29\x70\x75\xf7\xf4\xbb\x8c\xd0\xd0\xea\xa4\x5a\x48\xe0\xc5\x3b\x66\x94\x5c\x4f\x29\xc3\x68\x2c\x33\xb5\xb7\x59\x30\x45\x46\x03\x4d\x27\x04\x4d\x07\x50\x64\xc0\x14\xbb\x11\x6e\xd4\x1f\xcc\x41\x53\x3b\x3d\x19\xd1\x4c\x0b\x16\x07\x5b\xc2\xf0\xaf\xd5\x13\xd7\xc9\xe2\x21\x62\x23\xe9\x5a\x88\xd8\x72\x51\x83\xa4\x63\x6d\x2d\xa4\xa3\x58\xa4\x11\x79\x6b\xf4\x8a\x0c\xed\x58\x5d\xc6\xdd\xba\x54\x0f\xc0\x62\xe0\x08\xca\x9c\x89\x7b\x08\xeb\x06\xcf\xdd\xc6\x3c\x2a\x43\xab\xa6\xea\xf8\xf8\xd5\xa0\xfb\xe1\xfc\x63\x97\xf4\x4f\x2f\x4f\x7a\x67\x01\xa4\xe6\xc7\x56\xef\x8c\xbc\xeb\x9d\x7d\xba\x7c\xfb\xf4\x7f\x4e\xba\x67\xaf\xba\x67\x17\x6f\xbb\x83\xb3\xee\x59\x43\xd0\x64\xd0\xed\x9f\x0f\x7b\x17\xe7\x83\x1f\xea\xb1\xb4\xf2\x17\x77\x85\xf0\xf5\x96\x18\x5f\x37\x44\xb9\x02\xcf\x9a\xc0\x3f\x76\xce\x8e\xba\xc7\x21\x39\x18\x7c\xdf\xed\x5d\x74\x07\x17\xf5\x5f\x87\x28\xca\x3e\x0f\x61\x3f\xed\x75\x86\xa1\x8f\x03\x9f\xf4\x7b\xe8\x40\xca\x82\xb9\xd6\xfe\xda\x07\x7e\x06\x3e\x2c\xc6\x78\xae\x06\x42\x5e\x42\x7b\xda\x26\x33\xad\x13\xf5\xfa\xd5\x2b\x9a\xb0\xb6\x3b\x5c\xb7\xc7\x62\xfe\x55\x03\x1c\xe4\xe5\x43\xfb\x4d\x0d\x84\xd5\x24\xe4\x66\x02\xb5\x21\x81\x97\x83\xd3\xc7\x60\x90\xf8\x6a\x80\xa1\x09\x29\x52\x1d\x9a\xd0\x22\x18\x8c\xe0\xed\xf7\xba\xee\xdf\x8f\x21\x8f\x7d\x09\xee\xf2\x47\x1b\x20\x22\x2f\xcd\xef\xb7\x76\x63\xf5\x3f\xbb\x7d\xf6\xf1\xb1\xc9\xac\x04\x60\xb6\x3e\x06\x61\x36\x23\x73\x7d\x66\x34\xe1\x84\x1f\xe9\x9a\x53\xde\x1f\xae\xfd\xc1\xda\x28\x32\xb7\x7c\x08\x57\xa7\xdf\x6f\xd9\x77\x3e\x05\x95\xae\xbb\xe6\xac\x81\x80\x3f\x57\x7f\x3c\x1e\x83\x52\x78\x12\x2d\x04\x1e\x27\x54\x6a\x36\x4e\x63\x2a\xc9\x48\x8a\x1b\x08\x85\x46\x7e\x4a\xa7\x92\x4d\x26\xb8\x75\xbb\xb8\xe1\xcc\x69\x82\x3e\x1f\xcd\xe6\x73\xb3\x73\xbf\xb1\x50\x56\x91\xe0\x6f\x30\x38\x9d\xc3\x12\x25\xfe\x47\x31\x99\x80\x64\x3c\x14\x9f\x5a\xa4\xc9\x85\x2c\x23\x38\x1b\xd0\x5c\xa0\xc9\xfd\x48\xf9\x14\x46\x42\xab\x10\x71\x7f\x4b\x19\x26\xb5\xb8\x5c\x1a\xa2\x60\x9c\x4a\xa6\xef\x09\xa6\x77\x28\xf4\x65\x7c\xfe\xdc\x4e\x15\x48\x8e\xd1\xf8\x21\xd5\xd2\xb9\x41\xb7\xea\x10\x2d\xa9\x99\x31\x35\xa7\x32\x4d\x12\x67\x76\x2d\xc0\x20\x94\x5b\xdf\x54\xc0\x0c\xcf\xe9\x72\x29\x28\x0b\x74\x19\xb2\x4a\x10\x43\xdc\xba\xb3\xb7\x5e\x53\x50\x09\x66\xc4\x48\x1d\x24\xb1\x04\x6f\x25\x81\x51\x44\x28\x86\x12\x17\x0e\xc8\xf6\xac\x17\x20\xe5\x0c\xd2\xc0\x09\x97\xf1\x87\xd4\xfa\x15\xeb\x70\xa5\x32\x26\xd2\xa7\x14\x50\x4e\x68\x92\x04\x30\x5d\x0e\x4e\x5b\x36\xf9\x20\xf3\x83\x76\x92\xa4\x11\x1e\x94\x04\xfc\xd4\xef\x24\x88\x6d\x31\x21\x83\x71\x22\xe4\xd4\x3c\x3b\x97\x53\xf7\xec\x95\x0d\xfe\x36\x0f\x87\xe6\x0f\xf7\xd8\x4e\xd4\x65\xc6\xd8\x76\x3b\x74\x4c\x79\x97\xd3\x87\x76\xf9\xa0\x4c\xc7\x43\x4a\x96\x12\x43\x18\x2f\x07\x5f\x2f\x10\xe4\x83\xc6\x17\x49\x8a\x2b\x68\xaa\xe6\x48\xcc\xa8\x5a\xc8\x2d\xf1\xc7\x71\x37\xef\x23\x30\x3c\x73\xe6\xb9\x4d\xf0\xa0\x84\xdb\x2b\x86\xa3\xb7\xde\x24\x7f\x45\x0d\xa4\x36\x21\x03\xbb\x5a\x0d\x80\x05\xb0\xde\x78\x5f\x01\xde\x70\x3e\x02\x69\xa6\x05\xb8\xf5\x17\xd9\x1b\x08\xf3\x82\x0b\x41\xb7\xa7\xad\x10\x9f\xab\x07\x65\x7d\x4a\xf9\x31\x43\xe7\x67\x17\x74\xd2\x70\xe7\x5f\x3f\x7a\xdb\xb2\x67\x83\x57\xad\x8e\x1b\xd3\x1b\xe0\xc0\xb9\x3f\xc0\x80\x3f\x3c\x2c\xa1\x98\x9b\x39\x2c\x1e\x64\x0a\xe7\x23\x92\xce\x6d\x8c\x38\xa0\x5b\xbc\x57\x1c\x8f\x31\x6e\x5c\x74\xba\xcd\x56\x21\x20\xb3\x43\x5b\xe8\x18\x1b\x18\x25\xa1\xe5\x29\x31\x0c\x75\xac\x3e\xc8\xce\x5b\x56\x4e\x0e\xda\x84\xfc\x20\x52\x32\x46\x5f\x83\x96\xe6\x84\xeb\xa9\xe7\xd3\xe0\x57\xc8\x7e\x3d\xc3\x88\x65\x7f\x7e\x65\xca\xbf\x5e\x9c\x3f\xc6\x6f\xc5\x4d\x9d\x2c\xb4\x09\x79\x27\xee\xe0\x16\xe4\x21\x1e\x8c\x9d\xdb\x63\xc2\xa4\xd2\x64\x92\xda\x43\x77\x04\x52\x69\x87\x93\xb0\x79\x62\x8e\x7a\x62\x52\xa6\xd5\xfc\x84\x3e\x02\xf3\x8f\x65\x8a\x2d\x6d\x6b\xcb\x0b\x64\xe7\xc4\x57\x1d\xcf\x4b\x3f\x9d\x55\xcc\x34\xe2\x71\xf3\xf4\x1b\x8a\x8a\x39\xe7\x1e\x43\xe9\xdc\x1c\xe5\xea\x51\x55\x10\x69\xcc\x9c\x14\x23\x18\xdc\x25\x88\xca\xdf\x27\x94\xab\xf1\x2c\x66\xf0\xf4\x0f\xc0\x25\x94\x83\x75\x52\x15\x12\x4a\x9a\x4e\x1e\x52\x99\x4e\xf0\xde\x06\x1d\x95\x78\x35\xc4\xc9\xcf\x10\x09\xcc\x37\x31\xec\xc5\x3b\x97\x4e\xaa\xee\x98\xbc\x31\x22\x88\xd7\x35\x50\x5a\x74\x86\xfa\xcc\xb5\x52\x3c\xf7\x57\x8f\x44\x43\x9d\xe8\xc6\x05\x77\xf0\xd1\x69\xcf\xcb\x43\xc8\x01\x19\x04\x23\xee\xc8\x70\xf8\x0e\x1d\x54\xce\x04\xc1\xeb\xc5\x9a\x24\x9d\xe1\xf0\x5d\xcb\x9b\x18\x68\xeb\x44\x85\xe4\x9b\xe2\xb2\x0b\xe1\x54\x82\x44\x10\x83\x06\xcc\x2b\x70\xd9\x6d\xd6\x0f\x17\x92\x2f\x74\x76\xc5\x31\x14\xf2\xd0\xc0\xa9\x7f\x4e\xe2\xa7\xdf\x54\x0d\x3e\xbb\x11\xcd\x53\x74\x70\xb9\x43\x21\x44\x64\x04\x13\x21\xfd\xbf\x5d\xb6\x68\xcd\xa8\xbb\x8c\x2f\xa4\xf1\xa0\xc7\xb0\x98\xcb\x33\x05\xcc\xe5\xd1\xe8\x3b\x3c\x24\x23\xb8\x15\xd2\xad\x00\xcb\x9c\xec\x65\xef\xfb\xd1\xde\xed\x74\x43\x79\x88\xfc\xe0\x1e\x1e\x7c\x3f\x74\xa3\x12\xfe\x20\x4b\x8f\xc5\xc4\x91\xc0\xe7\x27\x12\xf8\xc3\x1d\x48\x6d\x67\xbd\x93\x24\xad\x9e\xcd\x69\xad\x01\x6c\xbd\xc2\xc6\x42\x0b\x3b\x3f\xc3\x9f\xe3\x46\xc8\xec\xb5\x96\xbb\xbf\x9e\x30\x88\x43\x9e\xfc\x63\x6b\xc6\xb4\xce\xec\x67\x56\xfd\x14\xaf\x38\x41\x91\xb7\xe6\xf3\x20\xc2\x92\xe9\x50\xbe\xf5\x0a\xea\xbe\x25\x8b\x43\xe9\xc5\x6b\xb5\xd0\x2a\x5e\xfe\x94\x50\x72\x27\xe4\x0d\x86\xe0\xdc\xb0\x24\xc9\xad\x2d\x0c\x71\x32\x38\xd7\x20\xc3\x8c\xff\x7b\x07\xce\x28\xa4\xc8\xa7\x85\x82\xcd\x51\x36\x8a\x0a\x6f\xb8\x55\x62\x2c\xe9\x90\x3f\xa3\x8a\x4c\xe7\x56\xb6\x59\x41\x5a\xa0\x01\x65\x8f\x13\xf6\xa5\xb5\xd8\xe5\x1d\xcf\x94\x2f\xc1\xc9\x72\x7d\x9a\xf2\x70\xd5\x75\x4f\x10\x8c\xd9\x16\xcc\x61\xd9\x88\x1a\xa0\x42\xa7\x53\x2e\x94\x66\x63\x65\x83\x40\x62\x31\xc5\xf0\x88\xd0\xc8\xf8\xec\xe9\x57\xbc\x16\x36\x8a\xfe\xd8\x7e\x0d\x89\x14\x53\x49\xe7\x73\xe5\x56\x4d\xbf\xd7\xea\xb8\x73\x83\xbd\x43\xa6\x36\xb8\x80\xf4\xa5\xd0\xe2\x46\xc4\x31\x3a\x9e\x83\x54\xfa\xec\x2b\x32\x03\x1a\xeb\x19\x19\xcf\x60\x7c\x43\xf4\x7d\x02\xce\xd5\x74\x90\x08\xa9\x6d\x1a\x20\x17\x1c\x0e\x42\xde\x8c\xa7\xff\x33\x02\x99\xc8\xa7\xdf\x27\x29\x9f\x2a\x7d\x9f\x38\x02\x7d\x3e\x95\x72\xe3\x07\xe7\x80\xf2\x70\x31\x9b\xcf\x41\x5e\x49\x64\xa6\x58\x18\x8f\xe0\x97\x20\xe3\x3c\x4a\x97\x23\x6f\x5f\x5e\x09\x3c\x66\x13\x18\xdf\x8f\x63\x58\xd3\xe9\x50\x00\x51\x92\x1c\xdc\x22\x8c\xf8\x8c\x20\x8b\xca\x85\xc8\x3a\xc5\x47\x42\xcf\x48\x76\x59\x84\xd7\x3d\x91\x98\x53\xc6\x0f\x5e\xb9\x3f\x82\xa1\x04\x79\x12\x75\x59\xbb\x50\x39\x71\x7a\x02\xc3\x08\x3c\xec\xb4\x12\x36\x79\x48\x15\x9d\xcf\xcd\x56\xe1\x28\xc3\xf8\x52\xbb\x7d\xec\x77\x9c\x33\xa1\xf4\xc1\x2b\xfc\x9f\x9d\x8e\xb1\x04\xf7\x0b\x8e\x8f\x8b\x96\xa1\xc1\xec\x35\x3b\x1a\xde\x12\xd8\xcd\x46\xa7\xd6\x94\x6b\x9b\x6d\x4e\x6d\x20\x8a\x73\x01\x84\xb3\x98\xcf\xd1\x8a\xb2\xba\xa7\x32\xbe\xc5\xf9\x05\x4a\x36\xcf\x43\xba\x02\xb7\x3d\xe0\x5b\x0a\x22\x98\x30\x6e\x23\x30\x51\x7f\xd6\x99\x57\x45\x6a\x9c\xb9\x34\xad\x22\x4a\x15\x80\xda\x50\xe4\x3c\xed\xbb\x11\x69\x52\xc4\xd6\x3d\x62\xce\xbf\x21\xaf\x5e\x05\x35\x4a\x0a\x63\x7f\x7a\x9c\x98\x61\x2e\x57\x22\xb5\xb6\xe7\xda\x38\x8b\x3c\xdf\x04\x31\x44\xe4\x23\x8d\xd3\x10\xb3\x3f\xe5\x46\xb4\x24\xdf\x83\x0c\xed\xfb\x08\xcb\x5a\x20\x31\xba\x59\x06\x22\x06\xeb\xef\x31\x03\x21\x4b\x95\x03\x72\xa7\x8f\xcd\xd6\x3f\x97\xd3\xc7\x47\x12\xf6\xe7\x7c\x72\x95\x05\x6c\x28\x04\x8e\x33\xc7\xf2\x90\xe6\xc3\xad\xc2\xb4\xe8\xd6\x59\x44\xb9\xf1\x98\x2c\xa0\xda\x21\x15\x3c\x59\xf6\x31\x3a\x8f\x32\x5f\x56\x89\xd6\xdd\x0c\x7f\x91\xa8\xba\xd1\x67\x6e\xad\x65\xf2\xe2\x6a\xfa\xf6\xc9\xab\x3f\x04\x4b\x36\x1c\xf8\x82\x4b\xf9\xf3\xe7\xb6\x7f\x72\x8d\x4f\x2c\x33\x32\x59\x50\x8e\xcd\x39\x23\x04\xd2\xf4\x80\x34\x65\xbc\x48\x1b\xb8\x3a\x4b\x8c\x58\x72\x47\x57\x52\x82\xec\xc9\xdc\x99\x05\x5a\x16\x19\xb3\x48\xd4\xa2\x67\xbb\x09\x63\x0a\x7a\xfe\xf3\xe7\xf6\xbf\x99\x3f\xdc\xae\x58\x64\xc8\x66\x6e\xde\xd2\xd8\xbd\xfe\xad\xdc\x0e\x16\x71\x97\x59\xb0\xa1\x47\x57\x6b\x98\x27\xe8\x12\xd0\x82\x44\xe2\x8e\xc7\x82\x46\x36\xb6\xe5\xde\xc6\x47\x63\xf8\x17\x46\x4d\x18\x95\x4d\xa3\x48\x82\x52\xe1\xf1\x7c\xb4\x7e\x29\x97\xde\x50\x08\x2f\x41\x27\x36\x16\xe0\xe2\x66\xa8\x3d\x07\x91\x22\x3c\x20\x33\x73\x46\xd0\x20\x1f\xd2\x98\x46\xc0\x5f\xd7\xa8\xb5\x12\xcd\x73\x36\x95\xd4\x3a\xc6\xdd\x59\xaa\xe7\xec\xf0\xe3\xbc\xea\x4e\xdd\x04\x64\x04\xaf\x80\x60\xf8\x6d\x90\xa1\x1b\xad\x96\x38\x17\x2c\x84\x21\xf8\x31\xe5\xe8\x63\xeb\xc7\xd4\x39\xbc\x7e\x22\x62\x92\xdd\x6e\xfd\xb4\x78\x04\xfc\xc9\xbb\x11\x26\x12\x7c\x14\x7e\x76\xb0\xf8\x69\x99\x44\xff\x55\xa1\xd6\x17\x75\xa5\xc1\xc8\x91\xe0\x9a\x8e\x5d\x6c\x11\x8d\xe6\x8c\x33\xa5\x25\xd5\x42\x12\x36\x41\x0f\xaa\x9e\x31\x7e\x63\x1d\xb2\x58\xbe\xcd\x56\x46\x09\x1e\x67\x7d\x20\x11\xa6\xb8\x54\x8d\xcc\x1c\x06\x87\x75\x43\xf3\xde\x82\x1b\xac\x05\x16\x0b\xe5\xe2\xd0\x9d\x73\xa5\x7e\x84\x32\xab\x43\x76\x0b\x32\x95\x8a\xa2\xbf\x1b\x1d\xee\x74\x3c\x93\x06\x30\xc6\x25\x0d\x0d\xc0\x99\x04\x4e\x3a\xc5\x41\x1f\x92\x3b\xe0\xf6\xd7\x39\x5e\x59\xba\xf0\xcb\x88\x01\x46\xc3\xf9\x4a\x2c\xe8\xff\xa8\x9e\xdc\x54\xcf\xcc\xec\x8e\x8d\xc0\xe1\xae\xc0\x05\x6f\xf9\x88\x22\x76\x0b\x71\xe8\xb6\x2b\x53\xe5\x76\xf8\xcc\x07\x0e\xdd\x62\x70\x98\x81\x39\x61\x0f\xf6\x9a\x61\x25\x6a\xc6\xa7\x61\x69\xee\x94\xc0\xd5\x09\x6a\x01\xa0\x39\x61\x53\x45\xe0\x97\x84\x49\xc0\xf2\x7d\x36\x08\x36\x16\x53\x32\xa2\xe3\x1b\xbc\x84\x11\x44\x42\x8b\x16\x38\xd0\xf6\x05\x1b\xb1\xbe\xd0\x4f\xc5\x0a\x39\x57\xe9\xd7\x5f\xff\x79\xec\x2f\xfb\xf1\x5f\x40\x5a\xa9\x7b\x6e\x38\xe7\x9f\x09\xf7\x4c\xc8\xa9\x7f\xa4\xdc\x23\x54\xac\xf6\xe1\x4f\x06\x7d\x91\x1a\x73\xea\x58\x24\xa7\x11\x47\x8c\x1e\xc5\xb0\xee\xd1\x14\x62\xea\x1c\xdd\x1f\x20\x8e\x0a\x81\xb9\x64\x84\xf1\xba\x46\x3d\xa5\x9a\x50\xeb\x33\x57\xd6\xe3\x8b\x8f\x1e\xd2\x85\x69\x03\xde\xce\x8a\x53\x2e\x54\x0e\xda\x2f\x5f\x96\x48\xa3\xfc\x21\x9d\xdb\xe1\x98\x83\x67\x0d\xc1\x61\xb1\x10\xd2\xed\x97\xa8\xa6\xd0\x95\x16\xb9\x38\x69\x9b\x55\x67\x8f\x97\x82\x03\xd1\x6c\x6e\xce\x9d\x51\xc8\xfa\x46\x2f\x65\xaa\x85\x64\xca\x32\x5f\x39\x90\x33\xaa\xf1\xd2\xe3\x72\x1e\x03\xcb\x43\x6f\xcd\xd1\xd2\x5a\xff\x9f\x80\x69\x03\x98\xdc\x0a\x39\x05\x2e\xcc\x89\xb2\x9a\xe4\x37\xbd\xd3\xd3\xde\xd9\x09\xf9\xd0\x39\xeb\x9c\x74\x07\x01\x4a\xde\x76\xde\x5f\x5c\x0e\x7a\xdd\xc1\xe5\xd9\xc9\xd0\xbf\x5a\x0d\xef\xb2\x77\x7a\xdc\xef\x1c\xbd\x0f\x45\x69\xb8\x17\xde\x77\x2f\x02\x61\x16\x39\x84\xd0\xa9\xb6\x00\x22\x10\x3d\x94\xc1\xa8\x8b\xf6\xc8\x5e\x0a\x87\x7c\xbc\xa1\x8a\x8d\xd7\xf3\x92\xbf\xb1\xb7\x05\x53\xd0\xda\x85\x1c\x48\x0d\xd1\x7a\x07\xf4\x37\x8c\x47\x58\x93\xb2\x64\x53\xe2\xb9\xb0\x18\xe4\x61\x44\xd9\xa6\x6d\xc6\x71\x7e\x25\x87\x8f\x6d\x70\x4a\xdd\xa9\x1e\xaf\x29\x96\xcd\x45\xca\x2b\x22\x52\x9c\xa1\x84\x1e\x3d\xca\xed\xfd\x4a\xf1\x7e\xca\xbd\x00\x55\x8e\x80\x11\x0b\x47\xc9\x07\xc7\xa9\x67\x90\x05\xcd\x2f\x06\x91\xb8\x22\x88\x0a\x22\xbc\x84\xf2\xb1\x26\xc5\x7a\x53\x6b\x0f\x39\x62\x50\x08\xb5\xaf\x88\xe9\xb0\xa3\x70\x0a\x03\x30\x7e\xb5\x93\xaa\xc9\xd3\xef\x33\x54\x8a\xc6\x3a\x2b\xd6\x97\x7a\x48\xf3\xa8\xdd\xfd\x0d\xdd\x87\xb3\x3c\xeb\xd0\xd1\xf7\x3b\xb4\x98\xe9\x66\x43\x5e\xa8\xb4\x6a\xfd\x4f\xef\x2e\x2e\xfa\xf6\x02\xa3\x76\x08\xe5\x12\xa9\xde\x25\xfe\xee\xa2\xef\xa2\x54\x1a\x89\x5b\x25\x01\xe1\x18\x98\x3a\xcc\x9d\x24\x59\x89\xd3\xcc\xd1\x08\xf4\x1d\x00\x1e\xaa\xca\xb6\x19\xee\xc6\x65\x67\xa1\xdb\x30\x70\x45\x87\x74\x17\x73\xf1\x0b\x2e\x26\xa9\x02\x6e\xba\x08\xf7\x8e\xca\x66\x59\x5c\x9e\xe6\xe5\xe0\x9d\x25\xd6\x85\x2c\xce\xf5\xa3\x7a\x1a\x1e\xfb\xdf\x20\xaf\xab\x62\x7a\x28\x5f\x9c\xa3\x3a\xe2\x36\x0f\xf5\x69\xe6\x19\xf0\x3c\x6c\xe6\x17\x88\x60\x42\xd3\x58\xab\xb2\x46\x6b\x16\x96\x56\xe0\x48\xb3\xd3\xbf\x5b\xf4\x43\x4d\x79\x44\x65\xe4\xee\x9b\x5c\x54\x42\xa6\xd2\x96\xce\xfa\xbb\x18\x67\xa6\xb1\xf6\x37\xb4\xa1\x47\xb1\x2e\xfd\x56\xb2\x83\x32\xb3\x93\xd0\xb5\xf5\x85\x7c\xb8\x8a\x2e\xca\x77\x1c\xca\xb6\xae\x7c\x2f\xd2\xb7\x4b\x7e\x35\xf1\x01\xd5\x32\x6b\x5f\x4c\x6a\xe0\x1d\xf2\x1c\x2a\xea\xcf\x22\x01\x8d\x46\x54\xd4\x6e\x8b\x1f\x57\x63\xf5\xc5\x37\x15\xc6\x7c\xe3\x3f\x0b\xf7\x5f\x2a\xb8\xd6\x4e\x7c\xa5\x4c\xd2\xa9\xfb\xb8\x1a\x69\xca\xe2\x28\x31\xa7\x4b\xf3\x95\xff\x47\xc6\xb1\x62\x5e\x59\x68\xc8\x75\x10\x2a\x33\xce\x36\xa0\xa4\x59\x98\xc6\x4a\x52\x9a\x85\x6c\x64\x5f\xae\x69\xfa\xdf\x6b\x20\x7f\x4b\x29\xd7\x46\x99\xfa\x58\x24\xca\x7d\xc1\x15\x7b\x7a\xa4\x24\xe5\x0c\x4d\xc4\x39\x50\x95\x4a\xc0\x4a\xac\x31\xbb\x01\xf2\xe1\x90\x7c\x78\x73\x48\x4e\xf0\x60\x70\xf2\x26\x74\xb4\x64\x40\x0c\xaa\x39\xf0\x29\x14\x52\x1a\xf3\x72\x27\xd9\x69\x52\x92\x0f\xf4\xe9\x1f\xc0\xb8\x51\xbe\xe4\x8e\xe5\x28\xec\x81\xe0\xe4\x4d\x4d\x0a\xe4\x51\xe7\xec\xa8\x6b\x0e\x98\x6b\x31\xc1\x27\xca\x2f\x14\xe9\x25\x7d\xc9\x6e\xa9\x86\x81\xf9\xdb\xa7\xb9\xcc\xef\x13\xfb\x14\xb3\x8a\xc7\x62\xfe\xca\xfc\xf1\x6a\x27\xf8\x06\xdd\xfe\xb9\xfd\xe5\x72\x70\xba\x7b\x88\x57\x57\xfc\xea\x8a\x77\xff\xbd\xf3\xa1\x7f\xda\x1d\xbe\xbe\x2a\x15\x2a\x7a\xf6\xb1\xc7\xb1\xb8\x73\xd5\xbc\x95\x9a\x11\xac\x4a\x5c\x77\x7c\x5e\x01\x2e\x61\xe4\xc7\xcb\xc1\x69\xa8\x30\xc7\xaa\xaf\x13\xb2\x22\x57\x63\x25\x80\xf5\x02\x1c\xb3\x0f\x53\x3d\x23\x97\xc3\xee\x00\xff\xd5\xef\x0c\x87\xdf\x9f\x0f\x8e\xaf\xf8\x9a\xf5\x97\x57\x80\xc3\x89\xff\xbe\x33\x38\xeb\x9d\x9d\xb8\x79\xef\x63\xbd\x19\xb3\x61\xa0\xc7\x39\xa1\x4a\xdd\x09\x19\xd9\x5a\x0d\xa5\x64\x4c\x91\x68\x57\x8f\x69\xc6\xa6\xb3\xf8\x9e\x44\x4c\x8d\x45\x2a\xe9\x14\x22\x0b\xeb\x87\x12\x84\x39\xbd\x37\x3a\xe4\x96\x29\x36\xb2\xd7\xcb\x42\xcf\x40\xda\x52\x30\xee\x47\x09\x63\x21\x23\x1b\x13\x8e\xf8\xd5\x0c\xe2\x98\xcc\x98\xd2\x42\xde\xd7\x0b\xaa\x19\xa2\xd9\x0b\xff\x67\x21\xdb\x8c\x5c\x5d\x5d\xbd\x98\xdf\x67\x44\x98\x7f\x92\x97\xa9\xb2\x37\x41\xe0\xb2\x68\xdc\x8f\xca\x2b\x35\x94\xbe\xaf\x9a\x82\xbf\xb2\xff\xf7\xa2\x80\xe3\xca\x3d\x7f\x41\x5e\x82\x1a\xd3\x24\x43\xc7\x26\xf6\xd8\xcc\x78\x86\x35\x14\xee\xd4\x60\x42\x97\xc9\x79\xb1\x40\xc8\x8b\xad\x48\xd8\x04\x59\x87\x7b\xd3\x5d\x3d\xd8\x7e\x2d\x84\xcd\xc9\x7b\xe0\xfc\x4e\x48\xeb\x1b\xec\x22\x3d\xfe\xd7\x5b\x90\x0a\x66\xc0\x03\xc1\x59\xab\x68\x28\x4e\x6e\xe3\xa9\xdd\x70\xbc\x0b\xb8\x2a\x86\x8a\x47\x18\x1c\xec\xd3\x6f\x58\x0b\xc0\x8c\xf7\x14\x5c\xb5\x2f\x3b\x5a\xeb\x9b\x58\x31\x5c\xac\x8a\x89\x07\xdf\xac\x46\xdc\xf1\xf9\x87\x4e\xaf\xa2\x3a\xdc\x8f\xad\x2c\x6e\x87\xbc\x3b\x1f\x5e\x98\xef\xb1\x6c\x3b\x56\x83\xea\x77\x2e\xde\x99\x7f\x8d\x49\xbf\x33\xe8\x7c\xe8\x5e\x74\x07\xc3\xeb\xce\xf0\xfa\x2f\xc3\xf3\xb3\xcd\x94\xe2\xf3\x90\x56\xbb\xd6\x2b\x48\x28\xce\xd4\xfc\x5e\x52\xed\x6a\xca\x4b\x52\xa0\x61\x7e\x6f\x34\xba\x43\x3f\x11\x62\x1b\xa8\x63\x5b\x92\xea\x67\x25\xf8\x76\x60\x0e\x3e\x9b\xb5\x83\x95\x49\xcc\x1f\xaf\xcd\x7f\x2c\x54\xac\x8c\x78\xe5\xc0\xf7\x38\xf9\x9e\xf1\x48\xdc\x29\xd2\x17\x77\x20\x87\xa8\x19\x8d\xbc\x47\x22\x1d\xc5\xd0\x42\xb1\x8f\x0e\x89\x5d\xee\xb6\x82\xe5\x6b\xd4\x50\x9f\xbd\x4a\xf2\x48\xae\x3c\xa2\xab\x02\x32\xfc\xfb\xd1\x6a\xae\x05\x84\x2e\xb9\x80\x9c\x1a\xbd\x6f\x50\xda\xe2\x61\x01\x94\x07\xeb\xe0\x5b\x2f\xab\x77\xd7\x02\xf0\x0c\xc8\x6d\x15\x4c\xcb\x89\x17\xaf\xdd\xe8\x9f\x67\xdc\x05\x11\xdd\x02\x9b\x6b\x48\xe6\x9d\x1c\xae\x47\xd6\xb0\x7b\x74\x39\xe8\x5d\xfc\x70\x7d\x32\x38\xbf\xec\xef\x19\xbc\x5d\x04\x78\x4d\x79\x84\x7d\xa0\x94\xbd\x2b\xc7\x02\x2e\x49\x12\xdf\x63\xea\x98\xbf\x79\xa8\x72\xc5\x93\x94\x6b\x86\x65\x37\xee\x5d\x79\x39\x77\x23\xb2\x5e\x8c\xff\x42\xd1\xe2\x1a\x92\xc9\xf9\xe0\x84\xfc\x88\xd6\xeb\x16\x6a\xb6\x31\x8a\x3f\x2a\x87\x56\x95\x75\xde\xf9\xc6\xb4\x31\xca\x4c\xd1\xee\xb5\xc0\xf3\x55\xd5\x66\xd1\xb4\x80\xf8\x95\x2b\x9d\xeb\x77\x09\x5b\x3e\xf7\xea\xea\xc5\x61\xf8\xa7\xc2\x0e\xf2\x5c\x15\xea\xf7\x51\xa2\x7e\x17\x25\xc3\x3d\x1f\xea\x6b\x3d\xbb\x72\xb9\x59\xbd\xdc\xab\x72\xb5\xf0\x2b\xac\xee\x77\x55\xac\x18\x9e\xed\x98\x8f\x95\x46\xcb\x29\xe3\xe9\x2f\xaf\x3e\xd0\xf1\xeb\x0c\x68\xe5\x40\xec\xde\x34\xbf\x8f\x46\xf9\x74\x2f\x62\x5e\x42\x5c\x98\xde\xaa\xcd\x7a\x2d\x94\x25\x53\xa1\x8c\xb9\xbc\x81\x17\x29\x28\x59\x0d\x65\x42\x72\x33\x65\xfd\x91\x6f\x40\xc3\x41\xfd\xe2\x2a\x23\xf9\x5f\xaf\xee\x84\xbc\xc1\xd3\xc0\x2b\x3d\x4f\x5e\xf9\x9b\xa4\x6b\x2b\xee\x5b\xee\x99\x5f\x04\xa7\xeb\x6b\xb9\x87\x7d\xda\xbb\x10\x37\x73\x65\x60\xc2\x8f\x35\x5a\xf0\x10\xe0\x4f\x0b\xa5\x63\xc0\xfe\x20\xd7\x1e\x24\x8a\x10\xe6\xf7\xc6\x4c\x2c\xd9\x53\x85\xff\xfb\xa7\xe2\x0f\x6b\x01\xc9\xad\x4d\xf2\x4f\xee\xf7\x62\x41\x9c\x57\x9b\x9a\xa1\x1b\xd2\xbe\x0f\x5c\x7b\x1b\x22\x2e\x0c\x33\x9f\x54\xdd\xf3\x71\x4b\xb3\x39\x88\x54\x93\x8b\xde\x87\xee\xf9\xe5\xc5\x75\xef\xec\xfa\x43\xef\xec\xf2\xa2\x3b\xc4\x53\xa5\x96\x74\x0c\xe4\xa5\x96\x29\x90\xbf\x93\x09\x8d\x95\xf9\x5f\x43\xda\x2b\x2d\x5e\x99\x8d\xe4\x2b\x7c\x6f\x2c\x62\x21\xcb\xef\xd9\x1f\xb0\xea\x38\x90\x97\xa7\xe7\x47\x9d\xd3\x2e\xf9\x3b\x39\x3a\xed\x76\x06\x5f\x6d\x28\x9d\x4b\xcd\xd7\xae\xf3\xe6\x6b\xd7\xe5\xe6\x6b\xd7\x8b\xcd\xd7\xae\xab\x9a\xaf\x6d\x46\x86\xad\x34\x4f\x93\xa4\x35\xa7\x9c\x61\xa1\xf0\x6c\xcf\xfc\xb1\x95\x90\x57\x9e\x41\x36\x32\xcd\xbc\x88\xa6\x04\x06\xa7\x65\xdf\xb4\xef\xe7\x71\xb0\xbc\xf1\xb3\x51\xb0\x15\x01\x99\x1e\x23\x59\xc8\x15\xaa\x08\x82\x55\xcc\x7a\xe7\xa8\x38\x6c\x01\x8a\xbf\xb7\x5a\x11\x53\xe6\xaf\x2f\x80\x31\xb7\xe5\x9d\x4b\xf6\x3f\x5a\x01\xfd\x46\xbc\xb1\x89\x82\x78\x86\xb1\x6a\x7b\x1b\x60\x42\x4e\x0d\xa4\x6d\x40\xd8\xd4\x80\xed\x21\xfc\xdb\xe5\xf9\x45\x87\xfc\xd8\x9a\x93\x8b\xf3\x8b\xce\xe9\xf5\x87\xee\x87\xf3\xc1\x0f\x66\x29\x33\xe2\x4d\xd3\xc2\x43\x49\x06\xe7\x5e\x81\xa9\x25\x1b\x16\x1f\x53\x52\x2a\x3b\x85\x5a\xc1\x5e\x93\x24\x94\x65\xc6\x46\x0b\x8b\x41\xe1\x8f\x12\x30\x40\xd3\x7b\x0a\xb0\x28\x35\x19\x74\x0d\xf0\xee\xf1\x35\xe2\xbb\xee\x9f\x0f\x2e\x86\x5b\x09\xb7\xdf\x0d\xec\x65\x4d\x68\xef\x59\xfa\xbf\x1d\x6c\x46\x2b\xf1\x2f\x79\x7c\x4a\xf8\xf1\x51\xfb\x0b\x50\xb1\xb0\x4d\x2e\x50\xb1\xf9\x2e\xd9\x80\x12\x23\x03\xe4\x9f\xbf\xfe\xfa\xeb\xaf\x6b\xe7\xe3\x35\xbe\xb2\x0d\x15\xf5\x1e\x0b\x7f\x1e\x33\x27\xae\xeb\xc1\xe5\x69\x77\x88\x47\xb3\x67\x47\x98\x1d\x15\xf6\xd4\x62\x61\x8f\x3d\x16\xae\xf6\xdc\x63\x21\x63\x4d\xb0\xc7\x82\x2b\xa3\x9f\xd5\xd1\xcf\xeb\xdf\x5f\x15\x4a\xe9\x67\x07\x65\x3d\x4e\x9c\x8f\xa2\xf8\x5e\xb1\xa6\x7e\xf6\xea\x37\x5f\xb7\xbf\x6e\x7f\xf3\x4d\xfb\xeb\x57\xdf\x7e\x57\xf1\x8d\xad\xae\x9f\xbd\xfd\xdf\xbf\x3e\xfc\xee\xbb\x3f\x57\xc3\xf6\x29\x3f\xf9\xdb\xb6\x74\xcc\x4c\xeb\x04\xf9\x82\x77\xd7\x44\x4b\x3a\x99\xb0\xb1\xdd\xdf\x3e\x09\x0e\x9d\xfc\x34\x6f\xcf\xf3\x35\x4d\x1d\x1a\x8a\x67\x93\x0e\x3f\x01\x9f\x14\xf9\xb1\xa5\xc9\x45\xe7\x64\x3b\x45\xbd\x23\x12\xbe\x8c\x83\x6c\x83\x96\x53\xff\x21\xdc\x64\x7b\xf0\x92\x6d\xcf\xbc\xdd\xb8\xcb\xca\x0d\xa6\xae\x6c\x8b\xa9\x62\x2f\xa9\x2b\xdf\x65\xea\xca\xf5\x99\x5a\xf8\x31\x6f\x35\x75\x95\x35\x9b\xca\xbb\x4d\x15\x5d\x6d\xb9\x91\x8c\xed\xd1\x17\xc6\x9d\x2a\x90\x2d\xaf\xdd\x3d\x17\xb0\x95\x38\x76\x06\x28\xfd\x9c\xf5\x15\x2b\x94\xa9\xd2\x82\x1c\xbd\xc5\x18\x8e\x75\x1d\x7b\x0b\x8c\x8f\x46\xd9\x9f\x8a\xc5\xb7\x20\x17\xdc\x7c\x92\xce\xaf\xa7\x76\xb4\xdf\xad\xed\xd1\x6b\x8c\xab\xe4\xdf\xcb\x50\x5e\x39\xb4\x6b\xbb\xf0\xd6\x1b\x63\x35\xd2\x65\x9f\x5d\x63\xa8\x4d\xbc\x69\x9b\x42\xd7\xc8\xab\x98\x29\x7d\x48\xc4\xe4\x10\xdb\x92\x9b\x27\xbb\xd0\xc2\xdb\x8d\x68\x9f\x14\x68\xb2\x34\xe6\x5d\x8c\x18\x13\xfc\x5a\x5a\xdc\x00\x27\xa7\x9d\x37\xdd\x53\xd2\x1f\x9c\x7f\xec\x1d\x77\x07\xe4\xe2\xfc\x7d\x77\xab\x73\x9f\x47\x61\x4b\xde\x66\x3a\xed\xcd\xe0\xfc\x7d\x77\xb0\x1c\xf0\x84\x85\xb6\x7f\x6c\xf9\xf0\xb2\xb1\x48\x20\xda\xc5\xd6\xda\xba\x81\xfb\x65\x85\xea\x1f\xbc\xef\xfe\x10\xbc\x74\x0a\x36\xe2\xdc\x4f\xd3\xf6\x75\xc9\xfe\xc3\x36\x15\xdd\x67\x0b\xe4\x0d\x98\xb4\x55\x47\xd1\x2d\x5a\x21\xef\x57\x1c\xb3\xca\x96\x1b\xb5\x1b\xad\x6e\x47\x19\x6e\x36\xea\x7b\xeb\x7c\x31\x89\x2d\x0d\x77\xfb\xae\xa3\x1b\x8f\xff\x59\xda\x2e\xef\x46\xc8\x37\xea\x41\xba\x79\xfb\xe5\x5d\x8b\xfb\x33\x9c\x68\xda\x75\x06\x48\x53\x71\xfe\x0f\x71\xa2\xd9\xeb\x95\xff\xb6\xe2\xfa\x85\xee\xfe\x6b\xc8\x47\x9b\x6b\x7e\x6f\xfe\x5c\xf3\xba\x7f\x1d\xb8\xcf\x64\x53\x56\x8f\x68\x61\x9d\x97\x96\xf9\x86\x01\x70\x5f\x7e\xc0\x33\x2a\x21\xf2\xb7\x17\xf9\x85\x33\x7a\x5f\xa5\x73\x42\xa2\x8b\x7d\x60\x5d\x90\xdb\xd9\x97\xe8\xca\xcd\x2f\x07\xcf\x07\x27\x7f\x25\x3f\xb6\xfe\x66\x1f\xb5\xf0\xae\x61\x8f\x08\xae\x77\x84\x60\x07\x97\x2b\x45\x38\xfe\x8a\xa5\xf2\x42\x65\x4e\xfe\x33\x5c\xae\x60\x61\x9a\xa5\xf3\xcb\xee\x21\x56\xaa\x93\xf2\xab\xad\x96\x90\x6c\x8a\x57\x75\xbd\x93\xde\x59\xa5\x9e\x1b\x4f\x4a\xdf\xfe\xdc\x56\x73\xa6\x67\xa5\xf0\xf9\xe1\x9f\xc7\xf2\xcf\x7a\xf1\xf6\x81\x90\x7f\x72\x75\xa9\x28\x06\x33\xcb\xc6\xf0\x32\xb2\xe2\x88\x26\x25\x78\xa7\xc7\x9d\xfe\x86\xb0\xdc\xf6\x28\x5b\xb6\x90\xfe\x3f\x91\x61\xe7\xc3\xa9\xd9\xa5\xce\x13\xe0\xbd\x63\x72\x24\x38\x37\x9b\xfb\x04\x22\x90\xe8\x54\xaf\x29\x90\xd8\x78\x5a\x96\x7c\x54\x55\xde\xd9\x84\x1c\x0d\xba\xc7\xdd\xb3\x8b\x5e\xe7\x14\xc5\x34\x26\xc3\x1f\x86\xa7\xe7\x27\xd7\xc7\x83\x4e\xef\xec\xfa\x72\x70\x5a\x10\xf9\x6b\x0f\xc1\x3c\x76\xc6\x5a\x9f\x2a\x65\x53\x78\x88\x02\xb3\x39\xe3\xa5\x80\x84\xc8\xb6\xbb\xcb\xf7\x6b\xcc\x7d\x50\xc5\x76\x0c\x79\x75\x24\x32\x17\x91\xeb\xb3\xbc\xd9\x48\x5a\x09\x36\x99\x9f\xcf\xe9\x61\x4e\xc6\x61\x8e\xfc\xd0\x62\x37\x86\x60\x81\xea\x0a\x2a\xb1\x8f\x0b\x6e\xdf\x5a\x38\x1a\x0a\x55\x15\x96\x8a\x3a\x6d\x49\xb3\xd9\xce\x6e\xe0\xfe\x9b\xfc\x04\xf1\x0d\x9e\x2a\x6e\xe0\xfe\xdb\xfc\xd9\xb7\x85\x63\xc5\x10\x0d\xa9\x7b\x2c\x96\x52\xb4\x6c\x8a\x46\x17\x06\xcc\x6f\x47\x58\xd1\xcc\x69\x76\x4a\x7c\x46\x91\x3b\x4e\xe5\x78\x46\xde\x9b\xd9\x56\x64\x0a\x5a\x02\xe7\x1a\xf2\x33\x8d\x99\x6a\x97\x35\xf3\x06\x24\x60\xf1\xaf\x94\x4f\x15\xa7\xe3\x99\xed\x5c\x88\xd5\xbe\xa7\x30\x2a\x74\x3d\xc8\x0b\x6f\x01\x27\x1f\x44\x94\x2a\xac\x8d\x64\x1e\x60\x55\xa4\xe7\x95\x4e\xbf\x66\xea\x06\x41\x63\x27\xa9\x0b\xa3\xb1\x25\x6e\x7c\xba\xf8\x52\x59\x31\xec\x0a\xe2\x4e\x85\xcf\x2e\xbe\x5d\xa4\xad\xea\x30\xe9\x9b\x88\x13\xec\xc3\xb4\x35\x69\x25\x01\xfe\xc3\xa8\x4c\x7f\x60\xd8\xa5\xd2\xdc\x52\x2e\xaf\x1a\x49\x66\xd1\x8d\xbf\x3b\xdd\xb9\xb5\xf4\x5d\x39\xf9\x2b\x9d\x53\xbf\xc9\xce\xb0\x28\x87\xa5\xdf\xbe\x5d\x38\xc4\x36\x57\xa7\xbb\x13\xc7\x26\x67\xba\x6a\xc8\xf3\xfb\x56\x34\x6a\xcd\x19\x07\x3f\x75\xbe\x02\xc8\x61\x29\x19\x75\x63\x90\x59\xcc\x5c\x3e\xbd\xaa\x22\x19\x6d\x25\x44\x49\x19\xcf\x1e\xb4\x62\xa2\xee\x55\x2c\xa6\xaf\x5f\xbd\x0a\x87\xbb\xae\x00\x59\x4e\x4f\x6a\xc9\x2c\x4d\xbc\x0c\xb1\xe9\x1d\x5a\x13\x66\x58\xf9\xf2\x1c\xce\xe4\x08\xcb\x65\x66\x22\x56\x64\xfb\x6b\xfb\xe0\x9f\xff\xf9\x4e\x18\x1b\x78\x83\x38\xfa\x35\x67\x3f\xbb\x02\x2b\x10\x59\x0e\x68\xf7\xc4\x5e\x79\x82\x2b\x93\x8a\x5f\xe7\x3f\x64\xc4\x6f\x18\x82\xbf\x2e\x7f\xf7\x4b\xfe\x56\xee\x80\x46\xb3\x50\xb5\x02\xb7\xba\xdf\xda\x6a\x99\xee\x07\x71\x93\xd5\xbc\x17\xcc\x4d\x16\xfd\x66\x88\x53\x19\x93\xab\x17\xaf\x6e\xbf\x7d\x85\x17\xf1\x2f\x48\xeb\xdf\xc9\x49\xf7\x82\xb4\xde\x91\xab\x17\x47\x82\x6b\xe0\xba\x75\x71\x9f\xc0\xeb\x62\x3a\xdb\xab\x5f\x5a\x77\x77\x77\xad\x89\x90\xf3\x56\x2a\x63\xe0\x63\x11\x41\x64\xbe\x8e\xc8\xc1\xdf\xfe\x87\x11\x83\xd7\x18\x81\xb7\xa1\xdc\x2d\x53\x15\x91\xff\xf9\xaa\x18\x6a\xbe\x39\x5c\x8c\x10\xfe\xb1\xc5\x6e\x8d\x71\xf2\xef\xe4\x43\xf7\xe2\xdd\xf9\xb1\xf9\xfb\x1d\x79\xd7\xed\x1c\x77\x07\xe6\xef\x88\x1c\x77\x2e\x3a\xe8\x91\x10\xa9\x4e\x52\x4d\xcc\x86\xe5\xed\xee\x37\xf7\xbe\x96\x57\x21\x28\x22\x95\xf1\x81\xcd\x0a\x4c\xb0\xc7\xd0\x9c\x50\xe4\xa4\x73\xd7\x3a\xc7\x2f\x44\x48\x40\x9b\xf4\x26\xd8\x94\x1f\xe1\x31\x95\x47\xc9\xdd\x32\x4a\x5a\xd1\x21\xa1\xa4\x7f\x3e\xbc\xb0\x00\x47\xe0\x61\x82\x6d\x55\x06\x34\x3a\xf4\x5d\xe3\x48\x71\x96\x10\x9c\xff\x46\x81\x76\x05\x9a\xb2\x79\x33\x6b\xa3\x8d\x3d\xea\xe6\xf4\x9e\x88\x5b\x90\x92\x45\x40\x66\x40\x23\x63\xb6\x60\x10\x5d\xeb\x9d\x07\x8d\xd0\x7c\xff\x9b\x39\xe8\x99\x70\x6d\x33\x5a\xff\xde\x76\xac\x78\x2b\xb0\x89\x0d\x89\xc4\x38\x9d\x03\xd7\x88\xe6\x90\x24\xb6\x3a\xee\x2d\x53\x4c\xa3\xb0\xda\x56\xc5\x91\x18\xab\xf6\x38\x16\x69\x34\xb1\x1d\xc0\xdb\x42\x4e\x43\x71\xce\xbb\x9e\x35\x5f\x0a\x6d\xfe\xf4\xeb\xd3\x3f\xd8\x94\x60\x79\x81\xa5\x19\xb4\x0d\x30\xba\x17\xad\xf3\x04\x9c\x73\x3e\xeb\x6a\x66\x2c\x72\xb4\xc9\xbd\xe9\xfe\xd2\x90\xf5\x15\x89\xcc\x39\xac\x4d\xbe\x07\xce\xd1\x88\xb7\xf8\x30\x86\x30\x56\x46\x76\x6d\x5d\xa3\x29\xe0\x69\xc3\x37\xfa\x38\xb4\xf5\x9a\x95\xa6\x5a\xbb\x26\x86\xb6\xf3\xcf\xf9\xb0\x88\x1d\x81\x4f\xc1\x51\x8b\x9d\xec\xb0\x36\xf8\x8c\xc6\x1a\xfb\xf4\xbc\x2c\x0a\xc0\x57\x4e\x02\x64\x84\xfd\x5e\x17\xe7\x9e\x4c\x40\xe9\x29\xc4\x30\xd5\xed\x52\x77\xbd\x77\x28\x01\x78\xf8\x68\xbd\xf3\xfd\xf2\x10\x56\xa1\x3d\x91\xb2\x32\x00\xf6\xb5\x7f\x77\xbd\xa2\xc6\x33\x09\x6c\xe4\xea\xfb\x12\x5b\xac\xba\xd3\xef\xb5\x8e\xc5\x4d\x2e\x12\x64\xc2\xb2\x7a\xbf\x58\xc4\x7c\xb5\x54\xec\x79\x29\xfb\xcd\x7c\x97\x8b\x79\xd7\xab\x79\xc7\xcb\xb9\x76\x3d\x7b\x7e\xec\x62\x45\xd7\x5b\xf6\xa8\xdd\xaf\x0a\xfa\xfd\xaa\xbc\xef\x5c\xad\xbf\xf3\x5c\x55\xed\x3d\x8d\xd0\xee\x64\x63\x71\xfd\x0b\x0b\x69\x37\x13\xd2\x92\x9b\xb9\xa8\x97\x61\x49\x23\xbc\x93\x6d\xa0\x55\xa6\xca\x6c\x0b\x73\xf1\x92\x66\x3b\x68\x2e\xc7\x64\x07\x70\x92\x19\xe5\xfe\x02\x41\x6d\x0d\xaf\x7c\x27\xb2\x1d\x2c\x9b\x43\xd0\x34\x95\x63\x07\xb9\x1c\x41\xbc\xa5\xe4\x09\x4c\x38\x2c\xe1\x5d\x4e\x32\xdc\x37\xfa\x7d\xe5\x38\xd6\x90\x10\x4e\xda\xd8\x59\xd6\x86\xc3\x5e\x9f\x44\xb1\xad\x54\xd5\xb8\xe8\x76\x02\xb8\x26\xc2\x70\x57\x18\xaa\x03\x0c\x77\x05\xbd\x41\x00\xcb\x33\x22\xaa\xdd\x1b\x2b\x00\xe6\x17\xf0\xbb\x22\x71\x47\x10\xab\xaf\xea\xb7\xe4\x64\xf5\x85\xf9\x0e\x80\x3a\x45\x5e\xb8\xd9\x6f\xf9\xad\x7a\xb7\xc0\xed\xad\xfe\xf5\x4e\x80\x97\xaf\x8a\x37\x87\x66\x53\x5f\x5b\x13\xa0\x3a\x95\xd0\x9a\xc4\x74\x4a\xde\x76\x3b\x17\x97\x83\x2d\x8a\x3f\x7a\xa8\x99\x9a\xb0\x3d\xa3\x7d\x1a\xc4\x8f\xad\x04\x53\x21\xfe\x9a\x4d\xe4\x76\x58\xd4\x6c\xbb\x62\x91\x06\xd0\x6e\xab\x5f\xba\x66\x9c\x1b\x7d\x6b\x6f\x31\x76\x3c\x23\x0e\xe8\x7e\x27\xc4\x23\xd9\x76\x3e\x80\xdf\x6e\x09\xe0\x16\xb8\x56\x9b\x85\xbd\xb8\x6f\xb7\xc2\xbf\xdb\xb9\x2b\x42\xdb\x4c\xa4\xcc\xe9\x45\x15\xce\x0d\xbe\x00\x60\x1e\xc7\xf3\xd7\x2b\x7e\xa5\xf1\xff\xd9\xd4\x1e\x4e\xc8\x85\xb0\x7d\x28\xa8\x6d\x82\x9f\x60\xf8\x05\x02\xb2\xad\x45\x68\x92\x64\xf5\xac\x84\xcd\x63\x3c\x66\x30\x15\xd8\x66\x08\x78\x74\x88\x05\xeb\xb2\x83\xb3\x52\xb3\x90\xcb\x6f\x53\x32\x2d\x9d\xe5\x8e\x41\x25\x7c\x78\xd7\x8b\x77\xa7\xce\x83\x82\x5d\xbf\x0f\xb1\xd6\x3d\x9d\x5b\x72\x5b\x6f\xe8\xf8\xa6\xd5\xe5\x91\x6d\xcc\xee\x9c\x29\x77\x4c\x9a\x93\x77\x3a\x79\x48\x0d\x13\x5c\x43\xa0\x87\xd4\x3a\x36\xb0\x19\x72\xb0\xf2\xf3\x3a\xc3\x59\x48\xa6\x7a\x3e\x9e\xd7\x93\x3e\x05\xdd\xb2\x6d\xa3\x5b\xb6\x6d\xf4\x56\xcb\x61\x06\x71\x42\x7e\x3c\x3a\xff\xf0\xa1\x73\x76\xbc\x99\x6a\xc1\x68\xc2\x38\x76\x15\x91\x5d\xa1\x90\x96\xe1\xe8\xab\x8b\xf3\x57\xfd\xd3\xcb\x93\xde\x19\xf9\x3b\xa6\x99\xfc\x9d\xb4\x64\xa1\xce\xb2\xfd\x0d\xff\xfe\xca\x5a\x59\x2e\x80\x40\x8a\x79\xe2\x3a\x2e\x60\x88\xa2\x9c\x5b\x77\x54\xca\x63\xa3\x1b\x0f\x5a\x93\x83\xa2\xc3\x66\x95\x2f\x72\xf7\x14\xbe\x45\xe7\x9a\x8d\x56\x7f\x03\x4a\x3f\xfd\x6a\xe3\x1b\x8c\x58\x1e\x12\x50\x44\x01\x23\x11\x70\x7e\x68\x89\xb5\xae\x3d\xef\x88\x5c\x21\x9c\xbb\x24\x37\xbb\xf5\x5e\x97\xa5\xb5\x06\xef\x02\x85\xff\xeb\xd5\xb1\x6b\xb0\xa8\x5e\xb9\xba\xd8\x13\x21\x46\x54\xd6\x7e\x55\x71\x1b\x52\xfe\xfa\x3a\x66\x3c\xfd\xe5\x9a\xce\xa3\xff\xf6\x5d\x2d\xa4\x96\x24\x1f\xee\x5b\x58\x7e\xdb\x01\x80\xf1\x6c\xb3\x93\xe7\xb3\x41\x5e\x6b\xf4\xbb\x40\x18\x9c\xa4\x8d\x80\x1b\x55\x58\xac\x81\xbe\xd9\xe6\x67\xfb\xc7\xbd\x14\x73\xa6\x89\xbf\x89\x44\x05\x9b\x15\xc8\xb6\xed\xf1\x18\x27\xa5\xd8\x0b\xd2\x6a\x65\xb2\x60\xfd\xbd\x28\xde\x28\xdd\x23\xa1\x67\xab\x8a\x19\x3b\xbc\xbe\x79\xa1\x8d\xb8\x32\xbb\x48\x56\x93\x19\x6f\x0f\x0a\x41\x55\xa4\xc3\xe7\x10\x63\x5f\x9f\x3b\x98\xc6\x14\x1d\xff\x05\x2a\x26\x05\x85\xd0\x65\x7c\x4a\x47\x40\x46\xc0\x22\xb3\xad\xe1\xbf\xb8\x51\x0d\x2b\x0a\x1c\xbb\x76\x7a\x2d\xa5\x04\x79\xb9\x38\x3e\x97\xa2\xe0\x6a\xdb\x88\x91\xa6\x98\x73\x20\x38\x60\x09\xa8\x65\x96\x35\x63\xc2\x02\x36\x77\xd7\x81\x57\x1a\x46\xc1\x94\xd3\x71\x7c\x80\x96\x19\xe2\x9c\xc6\x37\x25\x6e\x61\x97\x9a\x8c\x4b\x74\xf4\x90\xca\x74\xb2\xb2\xa8\xb3\xa3\x22\x5d\xae\x2d\x8d\xf7\xd3\x8b\x41\x0a\x3b\xa9\xdd\xbd\x01\xce\x7d\x95\xf0\x5e\x41\xca\x3e\x2a\x79\xaf\x87\x72\x9f\x05\xbd\x6b\x29\xf1\xd1\x10\xe4\xa5\x72\x51\x4e\xd5\x1a\x82\x2a\x42\xe5\x14\x2f\x3d\xd4\x56\x43\xcf\x11\x16\xf5\x42\x59\x2d\xd0\x58\x91\x8e\xc3\x06\x3e\xd6\xaf\xd1\x28\x6d\x54\x7d\xcf\xc7\xd7\xa5\x99\x83\xe0\xaf\xf6\x88\xe7\x62\xcf\xff\x5a\x74\xa0\x28\xe2\x0a\xd9\x6e\xda\xe2\x60\x07\xa8\xff\x33\xb5\x43\xd8\xdb\x76\x53\x85\x66\x97\x62\xbd\x06\xfc\xab\x5d\x35\x77\x58\x89\x25\x14\xcf\x74\xd5\xb0\xc7\x43\x25\xba\x3d\xef\x7d\x2b\x97\x8b\x48\x43\x6d\xfd\x56\x7e\xba\xa5\x63\x62\x4e\x93\xbc\x5c\x95\x39\x4c\x3e\xe3\x8d\x53\x2d\xee\xe7\xb9\x75\x5a\x93\x84\x7d\xdd\x3c\xad\x20\xe3\x19\x6e\x9f\xe6\x54\xde\x80\x4e\x62\x3a\x86\xcd\xbc\x64\x45\x00\x85\x14\xaf\xcd\x0e\xf7\xae\x0b\x7d\xe6\x9d\xf4\xa9\x83\x8a\xdc\x7e\xe3\x83\xc3\xcd\x9f\xd9\xe5\x92\xf9\xfb\xb4\x73\x46\x6e\xbf\xcd\x7f\xfe\x16\x1f\x6d\xbc\x8b\xed\x92\x86\xd2\x76\x46\x2e\x66\x4c\x11\x91\x05\xed\x60\xab\x78\x97\x77\xa5\x05\x39\x8a\x45\x1a\x91\xb7\x36\x42\xe2\x5f\xb2\x48\x70\x7b\xed\x55\xa8\x25\x3f\x72\xf1\xd6\x63\x5f\x7c\x4c\x82\x2d\x71\x6a\xb5\xed\x62\x63\xce\xf2\x97\x34\xd6\x80\xbd\xc9\x6d\xd5\x35\x36\xa7\x12\xb7\x04\x32\xa6\x0a\xf0\x7b\xbd\x44\x24\xb6\x2c\xb7\x13\x4c\x17\xc8\x22\x77\x33\x36\x9e\x11\x66\x04\x11\xf7\x0e\x74\x44\xdd\x7e\x93\x25\x54\xbc\xb1\xaf\x75\xfa\x3d\xaf\xfc\x6b\x3f\xfc\x16\xdf\x1c\xdd\x13\x09\x73\x9a\x24\xc5\xb6\x82\xf9\x78\xb0\x52\xd8\xed\x37\x04\x13\x02\x0d\x75\xb7\xdf\xda\xbf\xdb\x84\x7c\x6f\x77\xec\xf9\x1c\x70\x0b\xbf\xf1\x15\xdd\xdc\xeb\xc4\x75\xc9\x22\x86\x51\xb3\xd4\x36\x66\x8e\xc4\x1d\xf7\x2f\x39\xea\xb4\x20\x89\x44\xff\x2f\xa1\x51\xc4\x5c\x71\x82\x05\x12\x46\x60\xbe\xb6\x61\x99\x51\x9b\x9c\xf3\x31\x54\x50\x3b\xa3\xb7\xe6\x6c\x06\xdc\x0b\x56\x74\xe8\x91\xe5\xf5\x8e\xcc\x56\x8c\xa3\x71\x09\xda\x12\xe6\xe2\xd6\x17\xfd\x2c\x09\xc6\x66\x05\x3f\x45\x7e\x3d\xbb\xd9\xf7\x5b\x14\xf7\xcc\x83\x36\x5a\xd3\x94\x6d\x58\xec\x45\xc8\x29\x5e\x74\xa9\x6d\xc8\xd8\xcc\x6b\x80\xbb\x7d\xb4\xd9\xa7\xe8\xb1\xd8\x10\xad\xfd\x16\x8b\x25\xcf\x60\x7c\xa3\xd2\xf9\x66\xac\x4b\x52\x39\x5d\xd6\x66\x4b\x77\xd0\xfb\x84\x5d\xaf\x07\xa9\x52\x29\xe6\xed\xcc\xa8\xb6\x91\x73\x65\x1d\x23\x41\x25\x82\x5b\x1b\x3d\xd3\x50\x4b\xfd\x87\x99\x22\xdc\x98\x63\x7c\x0a\xb2\x50\x40\x4c\x48\xfb\x8b\x76\x60\xf0\x20\xe1\x54\xd1\xb7\x5f\x7f\x6d\x7e\xff\xee\x9b\xaf\xf3\xd0\xba\x25\xb8\x33\xaa\xec\xf2\xb5\xd7\xad\xd1\x21\x89\x81\xde\xa2\xdb\x1d\xa3\x88\xdc\x09\x01\x6b\x32\x94\x56\xea\x81\xc2\x78\xbf\x11\x55\xd0\x26\x9d\x38\x26\x37\x5c\xdc\xc5\x10\x4d\xb1\xf4\x41\x25\x2e\x1f\xc5\x17\x5e\xfe\x87\x84\xf1\x71\x9c\x96\x1a\xae\x8e\x6c\x7b\x51\xab\x46\xfc\xc3\x1b\xb8\x57\x9b\xe9\x8a\xf2\x9c\x8a\xc9\x04\xa4\xc1\x56\xba\x21\x74\x5b\xdf\x2e\x04\xb2\x1e\x41\xc1\xad\xbc\x17\xf1\xc9\xb0\x57\x8b\x8f\x95\x0b\x1a\xc7\xb5\x8a\x7d\x7f\x92\xb1\x99\x40\xe4\x34\x16\x25\xc2\x8b\x49\x9b\x9c\x09\x42\xb5\x06\x73\xa6\xf4\x08\xe6\x34\xc2\x03\xb0\xb3\x2c\x2a\xf8\xf8\x2f\xd9\x75\x13\x32\xd0\x1f\xbc\xcd\x52\x12\xa9\x26\x11\x28\x2d\xc5\xbd\xdf\x6f\x17\xcd\x04\x83\x66\x4c\x8d\xa1\xe1\x78\xb3\x44\x6b\x9b\x74\x26\x1a\x64\x35\x96\x7b\x17\xbd\x7a\x47\x39\xc6\xb7\xca\x94\x13\x60\xe6\xb0\x5e\x13\x87\x24\x96\x7e\xcc\x77\xf7\xb1\x30\x96\x87\x06\x24\x76\x1c\x03\xe5\x69\xb2\xe9\x72\x51\xb3\xcd\x2c\xe7\x42\xd4\xe0\xe6\xdf\x6f\xb6\xb9\x58\x79\x0a\x75\x15\xdd\x15\xc8\xec\xa6\x68\xe7\x00\x6b\xfd\x2e\x7b\x19\x1c\x9e\x06\xb3\x1b\xdc\xb3\xee\xf7\xd7\x5b\x1d\xbf\x2d\xc0\xaa\x90\xdb\x1c\x41\xf9\xd1\x36\x68\xbc\x09\x66\xa0\x6e\x6a\x3f\x39\x50\xc1\x40\x42\x03\x7b\x27\x36\x45\x19\x51\x20\xec\xaf\x88\xcd\x3e\xda\x0a\x57\x21\xa2\x0c\x21\x9b\xbf\x36\x04\x98\x88\x96\x37\xdd\x5a\x72\x07\x82\x57\x80\xf7\x63\xf1\xf6\x75\xb3\xbd\xb7\x06\xde\x8a\x35\xb5\xeb\x71\x29\x4d\xa7\xb0\x9d\x0f\xcb\x35\xe5\xd8\x09\x10\xec\x8d\x91\x19\x62\xd9\x42\xef\x9d\x1d\x77\xff\x7d\x33\xb8\x85\x6a\x44\x1b\x2a\x69\x1f\x9c\x6e\xd6\x6f\x0c\xb7\xb0\x61\xef\x0d\x99\xf2\x96\xa6\x2a\x0f\xdd\x20\x2e\x00\x03\x7b\x9b\x18\xbd\x76\xd1\x19\xbe\x2f\x0a\xc1\x42\x4d\xdf\xf1\x04\x1d\x8e\x58\xb6\x37\x62\x2a\x89\xa9\x2d\x76\x8e\x5e\x48\x67\xb1\xd0\x24\xc9\x6c\x25\x66\x8e\xf3\x54\xdd\x28\x4c\x7a\x41\xaf\x39\xe2\x47\x5c\x4c\x91\x94\xb3\xbf\xa5\x70\x48\xa6\x12\x92\xd2\x3e\x7f\xa0\x88\x4b\xbf\xb1\x86\x1a\x14\xbe\x33\xe7\x7c\x06\x77\xf8\x24\xaf\x90\x66\x48\xa8\x0f\x1e\xc8\x46\xef\x3c\x6c\x57\x57\x57\x2f\x46\x29\x8f\xb0\x9c\x3a\x8c\x89\xa4\x37\x40\xa2\xd1\x6b\x77\x3a\xb7\x09\x1f\x96\x2d\xee\xd1\xa6\x4c\xc7\xa6\x8a\xc0\x6f\x99\x14\x7c\x0e\x5c\xb7\x6e\xa9\x64\x18\x17\x87\x42\xb1\x15\xd8\x72\xb4\xf8\x66\xf2\xa5\xb0\xd3\x4e\x21\x87\x24\x0f\x47\xc2\x52\x0d\x37\xe4\xb8\x37\x7c\xbf\x58\xd0\x69\xc3\xf0\xd2\xdd\xf7\xc4\xda\x09\x0b\x02\xbb\xd9\x36\xc0\x7c\x48\xe5\x8f\xad\x11\xb1\x5b\x93\x61\x5b\x86\x63\xcb\xc8\xca\x65\x3b\x77\xab\x91\xbb\xed\x75\x3b\x18\xab\x42\xda\xf7\x0a\xbc\x76\xf1\xef\x30\xa2\x7d\x3f\xa0\x96\x4b\xa2\xed\x1e\x62\x53\x0e\x29\x1c\xd7\xf6\xf8\xb7\x85\xb2\xa9\x30\xea\x56\x31\x5c\x98\x74\xcf\x3e\x5e\x7f\xec\x0c\xca\xff\xf8\xd8\x39\xbd\xdc\x94\xc5\x81\x40\x48\x72\x90\x08\xa9\x0f\xfe\x7e\xc0\x05\x87\xcd\x82\x2c\xc3\xb0\x5f\x26\x52\xa0\x36\xf9\x3b\xc1\xcb\xa0\xbf\x63\x24\xd7\x57\x85\x5e\xb3\x16\x6d\xd1\x4d\x95\x48\x18\x63\x8d\x9c\x51\xaa\xb1\xd5\xd4\x78\x0c\x09\xb6\x90\x12\x92\x1c\x38\x80\x07\x9b\x9d\x76\x0d\xa5\x42\x4e\x5b\x52\xc4\x90\x27\x1d\x98\xb3\xc5\xe0\xdc\x96\xa4\xdd\x07\x58\x1c\xad\xf9\xcb\x4b\xef\xc1\xb9\x9c\x7e\xa0\x9c\x4e\x41\x1e\x90\x16\xe9\xf1\x5b\xa6\xc1\x5d\xdb\x9b\xa7\x78\xcb\xad\x0e\x89\x82\x18\x3b\xad\xf0\x88\x8c\xb1\x27\xaf\x75\xb3\x1f\x3a\xc7\x88\x26\x2a\x01\xeb\x12\xc4\x8e\xcd\xae\xb3\xcb\xc1\x1b\x16\xc7\x8c\x17\x31\x1c\xb9\x02\x3d\x39\x06\x63\x9d\x8c\xec\x7b\x86\xc3\x22\xe5\xda\x5d\xa9\xdf\x9b\xcd\x9e\x30\x3e\x11\x39\xb1\x9d\x34\x62\x5a\x20\xa8\x81\xaf\xc0\x49\xdc\x46\xa1\x05\xfa\xc8\xcd\x07\xee\x3e\x07\x2b\x1a\x6e\xcc\x48\xeb\x57\x30\xcc\x43\xdf\xc2\x56\x93\xb2\x08\x6b\xc1\x3c\xfc\x68\x2c\x32\xcc\x98\x40\x67\xab\xf5\x48\x58\xf7\xea\x41\xd9\x4d\xb1\xf9\xc2\x58\x6d\x49\x35\x2f\x37\xbd\x67\x22\x36\x2b\x12\xbc\x31\x51\xcb\x39\x4b\xf8\xd3\x62\xfa\xd2\xee\xe0\x5f\xe7\xf0\x0b\x19\x4c\x5b\xc2\x5f\x5e\xf3\xf6\x20\xbe\xb5\x42\x69\x00\x7e\x59\xb1\x0c\xcd\x47\x4d\x54\x8b\x79\xe2\xca\x8c\xb9\xb4\x0c\x7b\xff\x4a\xc9\x14\xab\xe2\x21\xf6\x22\xd0\x63\x73\x82\x13\x49\x48\x9f\xd0\x24\x29\xf9\x6b\x33\x25\xe5\xce\x59\x05\xcd\x50\x84\x5a\x50\x2c\xb8\x18\xcd\xbb\x87\xfe\xc5\x4c\xcf\x69\xbc\x1f\xc0\x3c\x01\xa6\x2c\x69\x9b\xb3\xd5\x75\xb9\xfd\xa2\xeb\xb1\x19\x11\xcf\xb9\x1e\x67\x54\x42\xcb\x5d\x2f\xef\xa8\xb3\x62\xc1\x2d\xb5\xed\xf7\xd9\xed\x2b\xf6\xde\x28\x9d\x9c\x5a\xd8\xed\x6c\xc3\xd3\x48\x4d\x62\xe3\xb6\x00\x37\xdc\x00\x7d\xe2\x9e\x2d\x21\x0c\xd1\xb6\x09\x7c\x16\x60\x76\xf7\xbc\xed\x74\x6c\x38\xaa\x42\x22\x1d\x1e\xd4\x8b\xde\xaa\x16\xe3\x11\xfc\xf2\x57\x2c\xb1\xef\x1c\x29\xe6\x1f\xa7\xe4\xc7\x11\xe3\xd1\x35\x8d\x22\x09\x4a\xbd\xfe\xab\x51\x09\xaf\x67\x42\xd9\xff\x98\x7f\x59\x69\xb8\x61\x09\x06\x3c\xb5\xb0\x1c\x3b\x52\x94\xff\x20\x61\x2e\x34\xb4\xe0\x17\x18\xa7\xd9\x2f\xae\x3c\x48\x2b\x51\x90\x46\xa2\xa5\xf5\x3d\x3e\x9e\x08\x39\x86\xc5\x87\x3e\x37\xb3\xf0\x78\x53\x16\xb4\xc6\x22\xda\x50\x6f\xa9\x99\x6b\xf2\x1a\x6d\xe7\x2d\x54\x9a\x8e\x6f\xc8\xf0\x62\x2b\xaf\x3c\x02\xd9\x50\x10\x56\xea\xbd\xad\xc0\xee\xc4\xa7\xb2\xbd\x4f\x56\x69\x91\x6c\x07\x41\x53\x39\x05\x5d\x15\x62\xbc\x21\x38\x75\xb3\x65\xc0\xa5\x06\x39\x67\xdc\x6c\x0e\x65\x5f\x2c\xfa\x5e\x7b\xc7\xb5\x87\xf4\x85\x6f\x9d\x27\xf3\xcf\x1b\xd1\x91\x72\xec\x55\x5f\xae\x16\xe7\x32\xf3\x2b\xaa\x43\xe4\xa1\x90\xef\xce\x87\x17\x67\x2e\x8c\xbb\xd0\xdc\x7d\x73\x97\xe0\x5e\x28\xa9\xe5\x63\x25\xc6\x62\xc8\xe5\xfc\x5e\x52\x0d\x78\x16\x04\x59\xd7\x3d\x76\x77\x03\x7e\x7e\xf4\x95\x2e\xe4\x5d\x78\x64\xd7\x41\x50\xf0\x60\x1c\xe1\xc9\xbc\x10\xa7\x48\x93\x24\xbe\xc7\x32\xbe\xbf\x30\x85\x21\x7a\x3e\x28\xa0\x50\xe4\x49\x91\x94\x6b\x16\x9b\x73\xf8\xbd\x6b\xa5\x8a\x9a\x27\x9c\x9f\xd9\x88\xf8\xfa\x32\x2c\xdb\x19\x00\xeb\xa1\xf8\xe3\x72\xc8\x0a\x6e\xa6\xc1\x76\xe2\xc1\xf4\xc0\x2b\x37\xa2\x1d\x0a\x67\x23\x04\x7f\x40\xd6\x2f\xa4\x57\xda\xd4\xdb\xcd\x8f\xf7\x29\xff\x92\x09\x00\x2b\xb0\x3f\x4f\x0a\xc0\xda\x44\xec\x2b\x09\x60\x25\x21\x59\x1a\xc0\x8a\xb9\xc0\x34\x80\x0d\x49\xa8\x75\x9f\x6f\x01\x73\x0f\xce\xe2\x95\x80\xff\xaf\xbb\x78\x3d\x56\x2e\x9d\xe2\xb7\x74\x1c\x87\xa0\x16\x3c\x04\x5b\xc3\xdd\x8b\xd7\xb0\x31\x82\xff\xeb\x37\x5c\x9b\xb1\x7b\xf0\x8f\xa5\x49\x44\x83\x75\x2b\x13\x92\x57\x59\xe9\x9f\x0f\x7b\x17\x3d\xdb\x4a\xdd\xf9\x01\xfe\x9e\x79\x26\xf0\x61\x2c\xc6\x37\x7f\x6f\xb5\x52\x6e\xfe\xd8\xf0\x38\xb3\x2f\x6a\x16\x2f\x5d\xfa\x66\x17\x52\x33\x91\xc6\x11\xa6\xf4\x90\x07\x96\x60\x6d\x98\xc3\x3c\x69\xb1\xf8\x10\x85\x2b\x16\x63\x1a\x93\x88\x49\x18\x6b\x21\xef\xdb\xa4\x2f\x14\xf3\x19\x3e\x94\x24\xf8\xaf\x5b\xdb\x32\x63\x0a\xd2\xe8\x42\xad\x48\x22\x99\x30\x56\x92\x15\x08\x23\x02\x42\x6a\x1f\x87\x1c\x8b\x3b\x50\x18\x8e\x3b\x63\xd3\x19\x28\xbd\xa1\x6d\x63\xf9\xb6\x45\x7f\xb2\x12\x04\x5f\x85\x73\x4e\x2e\xce\x2f\x3a\xa7\x85\xb6\x64\x95\xbd\xca\x38\x06\xfc\xf9\xd3\xe4\x8e\xbb\x95\x91\xbf\x13\x3b\xb1\x5f\xb0\x9b\x99\x63\x4e\xfd\xa1\xc3\x77\xdc\xf8\xcb\xf0\xfc\xec\x7a\x70\x79\xda\x1d\xd6\x35\x33\xda\x1f\xc2\xac\x80\x8c\x4d\x4f\x73\x05\x92\xd1\xec\xda\xa4\x75\x65\x4f\xfb\x75\x82\xc1\xfa\x94\x28\xc6\xa7\x31\x10\x2a\x25\xbd\xb7\xd7\x94\x85\xe6\x93\x8a\x30\xae\x58\x04\x24\x02\x35\x96\x6c\xe4\x63\xd9\xd1\x3f\x9e\xd7\x3e\xfe\x88\x4d\x2b\x6d\xa1\x6c\x16\x67\x07\x78\xb7\x38\x7f\xf4\x4d\x1e\x0a\xfd\xf6\x31\x6d\x59\x0a\x2d\xc6\x22\xce\x3b\x58\xea\x71\xe2\xae\x22\x8a\xef\x45\x60\x0e\x15\xc8\xea\xfc\xd5\x6f\xbe\x6e\x7f\xdd\xfe\xe6\x9b\xf6\xd7\xaf\xbe\xfd\xae\xe2\x1b\xa7\xdc\xfd\xdb\xff\xfd\xeb\xc3\xef\xbe\xfb\x73\x35\xec\xb1\x64\x49\x19\x76\xc7\xc8\x26\x46\x15\xe0\x1a\xc7\x42\x31\x44\x4b\x3a\x99\xb0\xb1\x5d\xe7\x9f\x04\x87\x4e\xde\x29\xc5\x36\xda\x24\x84\xfc\xf5\x8f\x77\x4c\xf2\xa2\x57\xd3\x8f\xc8\x2c\x77\x5f\xe1\xae\xb2\x25\x2d\xf9\xb1\xa5\xc9\x45\xe7\x64\xdb\xf5\xb6\x1b\x1a\xbe\x40\x83\xdc\x85\x11\xfc\x47\xea\x7f\x5b\x50\x1e\x7b\xea\x82\xbb\xcc\x9c\xdd\x34\xb9\x1d\xc7\xa9\xd2\x20\xaf\xb9\x88\xc0\xad\xe5\x82\x06\x71\xef\x98\x53\x83\xfd\xed\x9f\x0f\x17\x7f\x9c\xc3\x5c\xc8\xfb\xeb\xf9\xc8\xbe\xf0\xcd\xd7\xdf\x7e\x97\xbd\xf2\x58\x6a\x90\x1b\x9a\x0e\xac\x37\x27\x26\xf6\x0e\xa9\x15\x39\x3f\x64\x44\x34\x9d\xba\xec\x2a\x9f\x2d\x74\x27\x99\xd6\xc0\x3d\x7f\x3f\x1e\x75\xfa\x3e\x1a\x7f\x48\x0a\x57\x13\xc4\x5f\x4d\x58\x0b\x97\xdf\x93\x91\x48\x79\x54\x52\x01\xf5\xd1\xbb\x0b\xec\xc6\xc0\xbb\x56\x42\xa6\x22\x8e\x1a\xbc\xe8\x25\x57\xd2\xf9\xf5\xd4\x32\xe6\xbb\xc5\xfe\xbd\x81\x0f\x9b\x34\xb1\x6d\x00\x48\xe3\xdc\x18\xce\x1e\x12\x31\x39\x44\x5e\x9a\x27\xbb\x50\x2d\x85\x31\xfa\x11\xe2\xf8\x76\x09\x7b\x6f\xbd\x7c\x6b\x26\x76\x77\xf0\x34\x71\xbc\xcf\x58\xbf\x0b\xc6\xd7\xd4\xba\xbe\x38\x7f\xdf\xdd\xea\x2c\x53\x9f\xf5\xb2\xd4\x3b\x96\x5c\x0e\x4e\xb7\x42\xb7\x6d\x6b\xe0\x0a\x38\x85\x53\x7e\x93\x06\xc1\x9c\xfc\xe7\x37\xbe\xff\x13\x74\x98\x5d\x6f\x24\x7f\x8c\x0e\xb3\x6b\xd3\xfc\x5c\x1d\x66\xd7\x26\x6c\x8d\x0e\xb3\xcf\x2f\x72\x7f\x80\x0e\xb3\xfb\x96\xce\x2f\xd2\x61\xf6\x19\xc4\x77\xd3\x0e\xb3\xdb\x09\xf0\x1f\x46\x65\xee\xbd\xc3\xec\xfa\x72\xf9\x87\xe9\x30\xbb\x89\xf4\x7d\xa9\x0e\xb3\x5b\x89\x63\x93\xf3\xc7\x4e\x3a\xa0\x92\x66\x2d\x50\x37\xc3\xde\xb0\x19\xed\x4a\x88\xeb\x37\xa3\x5d\x05\x72\x6f\x7d\x29\xd7\x9b\x9b\x7c\x66\x8c\x26\xb4\xb3\x62\xe6\x24\x9f\x11\xf3\x3c\x9b\x8d\x4d\xe3\x80\x77\x31\x65\xfb\x41\xbc\xb7\xc6\xa4\x5f\x4c\x00\x6e\xff\x4c\x93\x0d\x83\x14\x6f\x41\x2a\xb6\x21\xa7\xdd\xb7\x99\xd2\x3a\x18\x4f\x48\xeb\xf6\x00\xdd\xa7\xf8\x77\xcb\xbd\x71\x80\x3e\x4d\x1a\x2b\x91\xe5\x60\xad\xed\xd7\xbc\x18\x74\x8e\xba\xa4\x3b\x18\x9c\x0f\xcc\x46\xd7\xb9\xe8\x9d\x9d\x90\xd3\xf3\x13\x6c\x50\x48\x3e\x7f\x6e\xf7\xa9\x9e\x3d\x3e\xbe\xbe\xe2\x9f\x3f\xb7\xbb\x52\x3e\x3e\xae\x87\xe1\xb4\xe7\x2a\x4d\xb9\xfb\xc4\x39\x70\xfd\x7a\x3d\x10\x36\x99\x3c\xf0\xcd\x9b\xee\xdb\xee\xbb\xd3\xc0\x97\xfd\xcb\xf5\x30\x51\x8e\xbe\x65\x14\x32\x85\x77\x57\x59\xa5\x1b\x31\x21\xe6\x88\x97\x6d\x6f\x78\xc4\x0b\x40\xef\xe1\x57\x0f\xc0\xc9\x08\x1e\xe8\x2c\x36\x1b\xbb\xb3\xcf\x92\xf8\xe9\x57\x9e\x77\xbc\xb4\xd6\x5a\x65\x67\xce\x30\x89\xcf\x47\xde\xbe\x08\x23\x2f\x8f\x6d\xb7\xcb\xd7\x59\x47\x1c\x08\x96\xb9\xde\x92\xdc\x36\x79\xe9\x9b\xae\xbe\x76\xfc\x7e\x48\xe3\xa7\x5f\x95\x62\xd3\x50\xa9\x63\xca\x8d\x18\xb8\x26\x88\x8b\x95\x84\x0e\x4b\x35\xb0\x70\x55\x66\x15\xb2\xe6\xa9\xd2\x64\xc2\xa4\xc2\x62\x88\xae\x6e\x53\x60\x5c\xa7\x4f\xbf\x29\xac\x2f\x6d\x89\x9a\x3f\xfd\x36\x8d\xd9\x78\x76\x48\xee\x80\xc5\xe4\x21\x35\x56\xbb\x1f\x28\xf3\x3c\x38\xf4\x4f\xd4\x78\x16\x3f\xfd\xae\x14\xc4\x58\xd2\xf9\x0d\xe3\x51\xca\xa7\xc0\xc9\x14\x62\x04\xec\xc7\x4f\xe6\xf8\x5a\x78\xda\xcc\x50\xd1\x35\x5b\xac\xb4\x99\x95\x0e\xf4\xf5\x97\xa8\x0b\x79\x86\xa8\xf6\x9a\xfe\x03\x95\x37\x06\x84\x7e\xc8\x20\xf8\xd9\x11\x33\x6e\x0f\x31\x9f\x18\xc4\xb6\x05\xca\xdd\xd3\xaf\x66\x3e\x39\x1e\x79\xd8\x78\xe6\x58\x41\xd3\xc9\x14\xb0\x19\xca\x4a\x99\xcb\x88\xc7\xea\x8b\x8c\x4f\x84\xef\x04\x31\x11\xd2\xa8\x2f\xc7\xae\x33\x3a\x87\xc7\xc7\x75\x47\xd3\x8f\x29\x2f\xc0\xf4\xa7\xcc\x25\xb0\x7b\x1f\xe2\x1f\x5b\x23\x19\x0a\x7d\xf9\xe7\x91\xd0\x33\x12\x8b\xf1\x0d\x2e\x0c\x1b\x61\xe0\x0a\x67\x07\xeb\xc5\x1d\x33\x20\xd3\xd8\x70\xe7\x01\x98\x66\x53\x70\x4d\x06\xc8\xad\xe0\xc6\x64\x97\xb2\x85\x42\xfe\x56\x02\x33\xcf\x2d\x38\x73\x88\x57\x7a\x61\xf5\x84\x7a\x91\x54\x10\x69\xf6\x33\x9b\xb2\xf1\xf8\x88\xc4\x7e\xfe\xdc\x3e\xb6\x41\x12\xd1\xe3\xe3\x46\xb4\x96\x40\xa6\x8b\x20\x37\x27\x37\x0b\xf9\x18\x31\x6d\x35\x8e\x61\xeb\x2b\xcb\xdd\x3a\x4a\x0b\xb4\xbd\xf1\x40\x5a\x6f\x0c\x10\x43\x1d\xb2\x16\xf8\xab\x2e\xd7\xca\xfe\xb9\x31\x89\x18\x42\xa8\xc5\x14\xb0\x66\x1a\xde\x7c\x67\xe1\x8d\x94\x47\xaf\xb0\x4c\xb7\x9e\x35\xa0\x15\x18\x07\x45\xfa\xe8\x28\x7d\x48\x15\x9d\xcf\xb1\xb4\xa9\x26\xef\x3c\xbc\xd4\xc0\x8b\x40\x5a\xbf\xc2\xa6\x14\x4b\xca\x23\x31\x6f\x55\x10\x6e\x1e\x1d\x6e\x47\xfe\x43\x3a\x79\xfa\x35\x8e\x99\x51\xc8\x15\x43\xe9\x23\x86\xad\x07\x64\x43\x08\x85\x74\x85\x6b\x66\x85\x4a\x8f\x78\x95\x77\x68\x76\xd7\x1b\x97\xa6\x87\xb7\x6d\x36\xce\xc6\x5e\xe5\xd9\x27\xee\xe6\x8c\xd0\x24\x94\xd9\x73\x0c\x9c\x38\xfd\xf1\x60\x94\x19\xc8\x43\xf4\xa0\x9d\x48\xe0\x0f\x77\x90\xf5\xcb\x30\x43\x8d\xa9\xd6\xc0\x55\x82\x9d\x13\xa4\x6f\xe1\x6d\x04\x0d\x1f\x8c\x60\x6a\x3e\x4a\xf9\xd4\x7e\x83\x7d\x39\x3a\x49\x42\x9e\x7e\xe5\x11\x48\x4e\x90\x0b\x46\x51\x19\xce\xd5\x8e\xba\xa8\xf5\x5c\x7c\xdb\xe2\x46\x1d\x18\x4f\xa6\xf7\x28\x2f\x50\x51\xde\x68\x3d\x41\xb5\x24\xe8\xfb\x04\x2f\x60\x6d\x65\x05\x62\x2b\x2b\xe4\x5d\xb5\x05\xaf\xe7\xeb\xba\x50\xea\x48\xc1\x1e\x8d\xfe\xa0\x19\xb2\x94\x5d\x1b\x88\xac\xcd\xc9\xea\x31\x32\x3e\xcd\xa0\xb6\xdb\x21\xe9\x7f\xfa\xdf\x76\xf2\x22\x50\x59\x6b\x09\x65\x5e\x0f\x00\x86\x31\x96\x4d\x36\x93\x86\x47\xb7\x30\xe4\x61\x6a\x0d\x24\x3a\x9e\x91\x81\x7f\xb5\x1a\x6a\xb1\x66\x25\x16\x79\x76\x67\x24\xa3\x82\x3b\xfd\xde\x47\xfb\xaf\xc7\x47\x6c\x3d\xce\x24\x28\x62\x8e\x26\x85\x97\x3e\x30\x7e\x74\x9a\xbf\x67\x3b\x9a\x9b\xf3\xd5\x38\x35\x9a\x51\xc7\xf7\x66\x2e\x0a\x1f\xbc\x61\x9c\xca\xfb\xc2\x07\x17\x82\xa4\xc9\x54\xd2\x08\x6c\x4d\xaa\xa3\xd3\x5e\xb9\x65\xf9\xeb\xec\x64\x3a\x65\x7a\x96\x8e\x30\xaa\xbb\xd8\xb7\xfc\xd5\x38\x66\xff\x14\xf9\xbe\x46\xeb\x9d\x5d\x56\x33\xa0\x66\xf0\x47\xa7\xbd\x0f\x0c\x07\xb1\x72\xd8\x96\x49\xcf\x38\xde\xd2\xc8\x5a\x9d\x7e\xaf\xf5\xb1\x62\x64\xb8\x60\xb0\x67\xd1\xd1\x69\xe9\x8d\xc2\xd0\x86\x0c\xf2\x66\x2e\x84\xde\xe8\x14\xe2\x18\x15\xd4\xc7\xaa\xf1\x5d\xce\x9d\x82\xba\xd1\x29\x8d\x99\x62\x20\x8d\xe6\xea\xcd\x24\xe0\x60\x8d\x81\x67\x14\xfd\xef\x33\x69\x0c\xf3\x29\xcc\x5c\x67\x40\x9a\x4e\xc8\x44\xc4\x53\x83\x87\x0c\x81\x69\x58\x97\x13\x0d\xa6\xb8\xd4\x99\x44\x0b\x11\xaf\x27\x2e\xe8\x8c\xce\x63\x30\x7c\x6c\x86\xbd\xa0\x74\x05\xd7\x7c\x0c\x05\x96\x46\x75\xcd\x09\x83\x3e\x8d\xd2\x2d\x8d\x53\xf4\x1a\xc8\xa9\xf9\x0c\x0d\x90\xbe\x8d\xfc\x1d\xd9\x56\x72\xc0\x5d\x87\x25\x33\x1b\x86\xad\x30\x4f\x26\x94\x4f\x95\x35\x3d\x89\x02\xc6\xc9\x0d\xe5\x21\xf5\xe4\x46\xff\x0e\xe2\x90\x7e\x7d\xc7\xe2\x09\xf8\x1b\x95\x09\xcc\xe2\x7a\x48\xc6\x94\x0f\x6a\x4e\xf3\xb9\x32\x7b\x75\x3d\x8c\x9f\x8c\xfc\xd8\xbf\x1f\x1f\x7f\x22\xcc\x96\x7d\x77\xfe\x0f\x5b\xce\xdd\xe5\xd9\x40\x64\xe3\x62\xb9\x0d\x09\x3a\x7a\xeb\xe7\xf3\x15\x8d\x19\x55\x6d\x42\x06\xb6\x24\xa8\x01\xb0\x00\xd6\xcf\xfc\x0a\xf0\x9c\xe0\x82\x28\x5e\x26\xd8\x10\x44\xf3\x82\x9d\x57\x34\xd1\x15\x84\xd4\xaf\x1d\xf7\xd2\xa8\xe6\x1e\x08\x03\xa9\x71\xd7\x4f\xa7\x2d\x66\x6d\x47\x33\x6b\x76\x4c\x92\x1c\xbd\x6d\x59\x08\xaf\x5a\x1d\x37\xa8\x37\x66\xe2\xb9\x5b\x26\x11\x9e\x8a\x02\x28\x1e\xd2\x02\x16\xbb\x60\x3d\x9e\x74\xee\x6e\xf1\xb0\x6b\x59\xaf\x38\x20\x63\x70\xb8\x2e\x9d\x46\xa6\xf0\xee\xcb\x5b\x51\xe1\x46\x85\x81\xd9\x2b\xf4\xff\xb1\xb3\x82\xfd\x5e\x2c\xb7\x0f\x3e\x7f\x6e\xf7\xf1\x4f\x7b\x04\x3c\x70\x9a\x73\x8c\xd1\xa0\x5a\xde\xe7\x29\x55\xb8\x89\x06\xbe\xf2\x65\xc1\xb9\x1f\xac\x0d\x84\x77\xaf\x17\xa7\x90\xf1\x5b\x71\x53\x27\x0e\x6d\x42\xde\x89\x3b\xb8\x35\xe6\xd9\xbd\x48\x7d\x60\xaa\x75\x46\x4c\xd2\x38\x36\x24\x45\x20\x8d\x7d\x63\x4b\x91\xb3\x79\x42\xc7\xb8\xea\x4b\xb4\x9a\x9f\xb2\xa0\xca\x65\x8a\x2d\x6d\x6b\x8a\x8c\x93\x0c\x27\x0e\x1d\xcb\xcc\x79\x36\xa3\x55\xdc\x34\x12\xe2\x0f\xa5\x11\x55\xe4\x18\x8a\xf2\x80\xc6\x86\xfb\x5c\x55\x50\x69\x36\x2c\x6b\x3c\x38\x1b\x54\xe5\xef\x13\xca\xd5\x78\x16\x33\x78\xfa\x07\xd8\xee\xa7\x19\xd8\xec\x7a\xb8\x7a\x1c\xd8\xa5\x15\xdb\xc0\x39\x02\x95\x88\xf1\x70\xff\x33\x44\x62\x3c\xf3\x4e\x1b\x54\x6c\xa9\xba\x63\xf2\xc6\x48\xa1\x99\xc1\x8c\x7a\x2b\xa7\x86\xfa\x5b\x21\x67\x94\x5b\x55\xb8\x62\x24\x1a\x56\x4b\xaf\xad\x5a\xdd\xb6\xd5\xcb\xb1\x1d\xb0\x0b\x43\x8c\x60\xc2\x38\x44\x64\x2e\xa4\x91\x1f\x6a\x74\xf8\x38\xb8\xe6\x3b\x85\x3d\xcd\x10\x6e\x19\xd1\x26\xc7\x96\x85\x6f\x0d\x60\xa3\x96\xc9\x1c\x66\x72\x62\x0c\x33\x84\x6f\x54\x81\x77\xb8\xd5\xd2\xa9\x6c\x49\x74\x88\xc8\xe8\xbe\xa0\xad\x5c\xe9\xd7\x35\x3d\xc3\x62\x9e\xa4\x2e\x5b\x45\xcd\x84\x3d\x02\xa9\x19\xfd\x86\xe0\xe5\x9f\x2f\x1d\xea\x15\x24\xda\x6b\x78\xdd\x57\x73\xd2\x31\x9f\xb7\xbe\x37\xa3\xc1\xd1\x33\xfe\xf4\xab\x8c\xf0\xc6\xba\x24\x71\x23\xbc\xa3\xe7\x4e\xbe\x56\x9c\x58\x90\x4c\x0c\x40\x35\xb4\x19\xbb\x77\x69\xe0\x87\x76\xe1\x9b\x8d\x56\xd3\x1b\x20\x94\xdc\xcd\x58\x0c\x24\x6c\x1b\xdb\x28\x01\x6e\x04\xcc\xec\xae\x16\xb4\x6d\xf3\x98\x2b\xe7\x8c\x60\x37\x81\x92\x7c\x14\x72\x4a\xb9\x9b\x43\x34\x6f\xbe\x07\x83\x28\xa2\x29\x48\x1e\xb6\xaf\x05\xe7\x30\xc6\xcb\xe2\x28\x9d\x63\xe3\x14\x09\x63\xe0\xda\x26\x01\xe1\x01\x2c\x49\xd0\x22\x4b\x12\xe7\x15\x43\xf5\x35\x35\xcf\xce\xe5\xd4\x3d\x7b\xe5\x4e\xa3\x9f\x3f\xb7\x31\x4d\xc8\x3d\xa6\xca\x3c\xb9\x74\x37\x68\x8f\x8f\xed\x76\x3b\x98\x62\xf5\x11\xe4\x28\xc5\x75\x73\x48\x6e\x9e\x7e\x97\x0f\x46\xb9\xfb\x18\x07\x9d\x1f\x36\xd1\x3a\x9b\x2a\x0c\x8c\xbf\x11\x71\xec\x6c\x81\x4e\x05\x99\xe7\x86\x27\x4c\xd9\xb5\xb9\x40\xaf\xf7\xdb\x2d\x52\x1c\x57\x92\xbc\x8a\x79\x9a\x32\x54\xb2\x5f\x94\x6b\x17\x96\x88\x56\x3f\x67\xcd\xcb\x53\x76\x0b\x4e\x8c\x51\xf2\x9d\x75\x0c\x9c\xc4\xa0\x1f\x70\x9b\xf7\x6f\x3f\x18\x81\xe1\x5f\x7d\x41\x76\x26\x0c\xac\x91\x6a\x1b\x13\x91\xb1\x88\x20\xef\x5b\x9d\x99\xad\x5a\x10\xca\xb1\xe5\x5e\xbe\xa1\x15\x7f\x7f\xe9\xba\x1b\x69\x6a\x8d\x5e\xaa\x8b\x3f\x87\xee\x23\xde\x1b\xf4\xa8\x1f\x38\xf9\x37\xc3\x23\xc4\xee\x7a\x7e\xf3\xa2\xe9\x81\x8f\xee\x8c\xfd\x2f\xb3\xdb\x89\xb2\xde\xcf\xdf\x7f\x69\xf4\x88\x4d\x4e\xd0\x76\xbf\x2a\xda\xc6\x92\x43\xaa\x43\xb7\x15\x22\xc1\xb6\x08\x8e\x17\x98\x52\xe1\xa4\x6a\x88\x8f\x3a\x49\xf2\xf8\x88\xb1\xd4\xb6\x68\x89\xfb\xf1\x02\xff\x65\x7f\xdc\x4e\xe8\x6a\x19\x85\x7b\xb5\xb4\x9c\xb2\x07\x81\xce\x32\x71\x0f\xa9\x44\x9f\x79\xab\x53\x49\xdb\x8e\x04\x2a\xc4\x3f\x63\x27\x61\xff\x2a\x66\xf7\x51\xef\x48\x5a\xf4\xf3\x5f\xf1\xae\x94\x42\xbe\x26\x2b\xae\x42\xdf\x0b\x0c\x50\xbb\x41\x93\xc7\x5e\xcc\x18\xd1\x1c\x06\xc0\x92\x59\x16\xa0\xd5\x26\x57\xfc\x2d\xcc\x62\x28\x22\x59\x41\xf5\x58\x24\xf7\xe5\x3d\xee\x35\xf1\xb7\xb5\x62\x25\x91\xc6\x56\x09\xee\x72\xd6\x0d\x79\xe3\xe6\x71\x01\xec\x0a\xb2\x22\xb0\x55\x65\x5c\x0b\x0c\xeb\x4d\x20\x77\x42\xa2\xf3\x27\x4b\x14\xfc\xaf\x2b\xc8\xa3\x2a\x53\x45\xa4\x23\x47\x66\x05\xdd\xba\xd6\xac\x9c\x79\x0a\x0d\x22\xad\x21\xe6\xff\x75\x15\x55\x13\x33\xc5\xe6\xe0\x8b\xd7\x8f\xc4\xe6\x89\xae\x9e\x46\x20\xfe\x0e\x31\x12\x73\xbc\x2f\x31\x80\xc2\x1b\x7e\x19\x5d\x92\x60\x58\x55\x84\xd6\x5d\xa6\x29\x0f\x88\xbd\x14\x67\x13\x50\xa1\x2e\x8d\x8e\x04\x36\x27\x1f\xdc\x8b\x8e\x1c\xb3\x4e\xe6\xcc\x70\x79\x8e\x27\x57\xbe\x08\x7b\x0d\xfa\x30\x75\x13\x10\xc0\x25\x57\x69\x92\x60\x0e\xe6\x29\x3e\x45\x5b\xfc\x62\x06\xd8\x42\x86\xbb\x57\x15\xa1\x12\x5e\x07\xb7\x9a\x53\xeb\x58\x44\x8b\x17\xe2\x38\x75\xc7\x88\x2a\xd8\xe4\xc6\x0e\xd0\x4e\xe3\x14\x26\xb8\x45\x65\x37\xb7\x9f\x52\xd4\xb2\x23\x30\xd6\x8a\xd9\x83\x96\x41\xe3\x8d\xe7\xec\xe9\x37\x1b\xb2\xd9\x68\xbc\xe8\xf9\x45\x4f\x3f\x9e\xb0\xf3\xe5\xd8\x8f\xa9\x33\xbb\x1b\x48\x04\x7a\xbb\xf9\xc2\x24\x54\xc1\x5a\x67\x2a\x9c\xe6\x59\xd3\x0a\xae\x02\xb1\xac\x65\xb4\xc8\x14\x5c\x51\x54\x1a\x0d\x35\xa8\xba\x1e\xd2\x39\xaa\x38\x40\x37\x75\xc9\x10\x58\x67\xd8\xa5\x8d\x26\xdb\x8f\x28\x67\x0f\x45\x9d\xdf\x90\xd8\xc5\x1d\x21\xb8\x87\x34\x26\x52\x81\x64\x34\x66\x0f\x50\xbc\x61\x5e\xad\x57\x7b\xa5\xab\x63\x2b\xe3\x0e\x94\x42\x8d\xda\x1c\xaf\x8d\x81\x0a\xde\xa0\x16\x90\x96\xbd\x95\x9b\xe1\x75\x86\x82\x90\xd3\x36\xaa\xfc\x4e\xbf\xd7\x60\xbf\x33\xd8\x4b\x5c\x76\x57\xdd\x85\xfb\x70\xbc\x0d\x07\x5e\x06\x1a\x26\x86\x1f\x68\x1f\x58\xaa\x61\x6e\xf3\xcd\xd1\x6a\x4e\x93\x58\xd0\xd0\x45\x47\x49\x6f\x9b\xef\x84\x7c\xfa\x55\x82\x0b\x3c\xb6\x97\x55\x54\x91\x77\x62\x3c\x8b\xa9\x91\xdc\x6c\xfb\x5d\x41\x8a\x48\x8c\x32\xca\x2e\x63\x6b\x4e\x92\xc5\xcd\xd5\xbf\x6f\xf7\x57\xcb\x93\xa7\xdf\x26\x13\xbe\x12\xdf\x9d\x64\x1a\xb2\x44\xfb\x26\xa3\xfd\xd4\xeb\xb7\xec\x30\xd5\x78\x26\x81\x8d\x82\x38\x7c\xb8\xee\xc5\x51\xdf\xde\xc2\x04\xc0\x5f\x1c\xf5\x5b\x78\xf5\xb2\x92\x4b\x1e\x62\xc6\xa0\xd0\xc1\x35\x63\x60\x53\x88\xae\x9a\x03\x7a\x6e\xd0\x4e\x35\x22\x10\x53\x0d\x92\xa4\x2a\x78\x98\x77\x1b\xb5\x31\x2d\x55\xf2\xf4\xab\x35\xc2\x0b\xce\x41\xc6\x9d\x85\x5e\x92\xd9\x35\x69\xc2\x43\x83\x73\xb4\x60\x4b\xe8\xd1\x3d\xb6\x28\x11\x72\xaa\xc8\x4b\x8c\x02\xc5\xe2\x2a\xa1\xc3\x84\xa7\x32\x43\x7b\x88\x42\x63\xcc\x64\x8a\xa7\xaf\x22\x71\x85\x5e\xf4\x59\x74\x0f\x9e\xe3\x5f\xf2\x54\x92\x8e\x41\x16\x3a\x23\x78\xb2\x39\xdc\xe1\x65\x61\x80\x9c\x33\x48\x51\x81\xda\x9b\xc2\xc6\xcc\xb0\x77\xe9\x36\x08\xc0\x77\x56\x59\x25\x58\x9f\x16\xae\xc8\xdd\xc2\x64\xf8\xe5\x9a\x22\xe7\xf0\xdb\x12\x47\x59\x0f\xbe\xf0\xd5\x6b\x8e\xdb\x5e\x2b\x66\xb8\x95\xb5\xac\x9a\xe2\xf5\x35\x08\x48\x5d\x65\xcc\x21\x7a\x23\x66\xc6\x72\x9d\xca\x34\x49\x9a\x0f\xcb\x6f\xe5\x34\xc5\x58\xf5\x70\x73\x55\xb7\x27\x9b\xf7\x80\x6b\x36\x61\x0f\x56\xfb\x2b\x9b\x44\xb8\x2e\x3e\x9b\x1c\x58\x8f\xab\xe5\x3a\xef\xae\x0b\xbb\xd9\xe5\xbc\xbf\x86\x6f\x0c\xbd\x26\x88\xcb\x9b\x03\x4d\x61\xa5\x32\x76\x92\x84\x59\xe0\xd6\x36\x69\xa2\x71\x2e\x07\xa7\x4e\x6e\x9d\x6a\x99\x67\xa6\x48\x50\x09\x35\x24\x8a\x93\x77\x17\x17\xf5\xeb\xc9\xbc\xb0\xde\xb2\x29\x02\x7d\x9d\xe5\x72\xfb\x28\x64\xbb\xef\xba\xb2\x61\xb6\x34\x91\xab\x9d\xd9\xa0\x54\x66\x16\xbb\xbc\xbc\xcf\xac\x83\xe9\xa5\xab\x4d\xd6\x3f\x1f\x5c\x60\xba\x65\x21\x68\xe7\xab\xda\xbc\x8a\x12\xcc\xf9\xbd\xeb\xc0\xd6\xb4\x04\x5d\xa9\xea\xd9\xba\x80\x97\xca\x6a\x96\x00\xe3\xa3\xf6\x2e\xc1\x2f\x94\x8d\x5b\x00\xff\x6a\x22\xc4\xfa\x28\xc2\x15\xe1\xb6\x2d\x08\x97\xc9\x9e\x21\xdd\x9f\x7e\x0b\x41\x48\x76\x47\xcd\xba\x8d\x24\xa9\x9a\x41\x44\x54\x8a\xb5\xc9\xf0\x1a\x2b\x74\x71\x91\x24\xad\xec\x90\x5c\x8e\x2e\x5a\xd8\x5c\x41\x4e\x44\x3c\xb5\x0b\xd3\x1c\xdf\xac\x15\xd0\x4f\xd5\xac\x75\x9e\x75\x7d\xc5\x24\x3b\x2d\xa9\xd9\x9e\xee\x52\x19\x85\x6e\x7e\xb3\xf1\x08\x39\x0d\x50\xb6\x89\x7d\xb1\x59\xfd\xad\xd0\xfe\xd0\x31\x30\x30\xe2\xcf\x07\xe5\x66\x64\xe0\x63\x63\x55\x50\xbc\xc8\x32\xff\x2a\xb8\x85\x31\xb4\x18\xa4\xb1\x59\x21\xbb\xe5\x08\x1e\xb3\x37\x2b\x4a\x17\x24\x7a\xe4\x2f\x38\xd4\x8d\xe0\x5a\x20\x31\x9f\xe8\xcc\x9c\xfa\x55\x39\x2a\x37\x30\x9a\x15\x84\xde\xc0\xfd\x9a\x91\x63\x79\xcc\x75\x30\x70\xac\xc9\xfc\x32\xeb\x0f\x2c\xaf\x00\x29\xe6\x99\x97\x2c\xaf\x8c\x36\xc1\xb7\x9a\x88\x3c\x9a\x8c\x99\xd3\xbe\x5b\xf2\x90\x44\x20\xcb\x0b\x81\xac\xa2\x6e\xb7\xb7\x12\x01\xfa\xbb\x19\x39\x05\xb7\xf0\x3e\x6e\x12\x56\x8c\x36\x3f\xd2\x7d\xfe\xdc\xce\x8e\x27\x67\x6b\x51\xff\x66\x05\x8c\x7a\x0a\xdc\x69\xe2\xf3\xe7\xf6\x31\xfe\xe5\x5d\x28\x42\x2e\xb3\x7d\x53\xfe\xfa\xa3\xc6\x12\x12\x23\xca\x61\x46\x6f\xc0\xcf\x9d\x91\xbc\x53\xaa\x6c\xf5\x88\xcf\x9f\xdb\xff\x66\xfe\xd8\x92\xb2\x13\xf9\xf4\xdb\xd3\x3f\x80\x8f\xc0\x1c\xb4\x9f\x7e\xe5\x78\xd3\xbf\x08\x7c\x7d\x22\x97\x4e\x32\xd9\x6c\x05\xbd\x2f\x65\xc2\x46\x10\x33\x18\xb1\x29\xc8\xe2\xd1\xa6\x08\x65\x05\x01\xf8\xd1\xe7\xcf\x6d\x1f\x9d\xdc\x9c\x27\x83\xea\x4f\x1b\xe2\xbb\x1c\x9c\x86\x24\x7e\xc7\x8a\x66\xb0\x80\xb2\x5e\xfe\x77\xa9\x68\xca\xe7\x45\xf3\xb5\x7f\x72\x8d\x4f\xb2\x41\xa5\x19\xd0\x46\x23\x5a\x3e\x62\x56\x82\x8e\x17\x61\xaf\xa2\x76\xf1\xf8\xe9\xa8\x3b\xb2\xdb\x94\x19\x79\x73\xae\x17\xce\xa8\x42\x7a\xf7\xa4\x3b\xa0\x3a\xca\x96\xe0\x36\xa3\xcf\xd5\xb2\xf9\xfc\xb9\xbd\xa5\x60\x2c\x1c\x6d\x0b\x00\x37\x99\xea\x00\x71\xa5\x9d\xb4\x42\xb8\xf7\x41\x7f\xd0\xfd\xbd\x2c\xdc\xdb\x8d\x36\xcb\x3f\x58\xba\x28\x58\xdb\x80\xd8\x46\xc8\xbc\x31\x56\x45\xc5\xe6\x2b\x7d\x43\xf1\x34\x66\x66\x4e\xc8\x7b\xb8\x2f\x6c\xee\x35\x7c\xeb\xb9\x47\x3b\x63\x4a\x21\x63\xb0\x92\x1c\xa3\x06\x83\xfc\x5b\xa4\x66\x33\x8e\xcc\xa8\x84\x28\x64\xec\x6c\x2a\xf5\x53\x98\x1b\x82\xe9\x9c\x4c\xd1\x6f\xa9\x41\x06\x6d\x9d\x4d\x44\x1b\x45\xb4\xd2\x78\xd8\xa9\x79\xe6\x64\x4f\x4d\x9b\x58\x16\xbb\xb7\xd9\x2a\x57\x62\xd5\xa2\xdd\x42\x10\x03\xcb\xab\x76\x51\x6e\x26\x69\xd8\xc6\x66\x37\xe1\x55\x0d\x47\xba\x82\x20\x9b\xa0\xe3\x0b\xce\x06\xef\x68\x9f\x47\x4b\xde\x8a\x79\xee\xe3\x7f\x48\x25\xf9\x08\x72\xf2\xf4\xfb\xd4\x08\x9a\xcf\xf9\x84\x79\xf8\xd2\xf7\x39\xb5\x28\x32\x2e\x8b\x08\x5a\x57\xde\xdc\x18\x2b\xbe\x0f\x61\xf5\x85\x32\xc8\x1d\x60\xbd\xd8\x9f\x5d\xe0\x9e\xcb\x6b\xd1\xf2\x9e\xd0\x29\xad\x0b\x80\xae\x2c\xde\x84\x2e\x24\x4e\xe8\x68\x0a\x31\xcc\xb8\x6e\x93\x37\x4c\x6b\x28\xc4\x29\x0f\x19\x10\x74\xcc\x70\x48\xf5\x6a\xfa\x0e\x73\x69\x62\x1c\x73\x40\x30\xac\xd4\xd5\xb3\x39\xc4\xdb\x7e\x20\xf0\x4b\x22\x14\x64\xa9\x02\x0d\x0b\x69\x2e\x17\xd1\x5c\x6b\xb0\xd6\xcb\x86\x85\xbe\x25\x46\xca\x61\x56\x5f\x76\xdd\x66\xef\x27\x2b\x33\x8c\xd1\x7d\xc3\xac\xbf\xe2\x72\x3e\x85\x91\x81\xeb\x49\xe3\x0b\xe4\xa3\x0e\xc4\x77\x22\xe0\x85\x68\x39\xe0\xe4\x21\x9d\x3e\xfd\xca\x31\xea\xdf\x6c\x0f\xb4\x90\x0d\xaf\x44\x8d\x73\xc6\xb9\x5f\xfa\xf5\x89\x74\x1d\xe7\x65\xc9\xb3\xdd\xea\xc1\xf9\x0c\x3a\x12\x31\x7b\xbd\x3e\xa7\x7a\x3c\x6b\x0c\x9c\x28\xcd\xe6\x73\x9f\x13\x8a\x7e\x49\x60\xc1\x28\xeb\x54\x69\x31\x2f\x66\x0c\xdf\xdb\x28\x97\x97\xd0\x9e\xb6\xc9\xfc\x3e\xaf\x1f\xff\x95\x91\x98\x13\xa6\xc9\xe5\xe0\xd4\xfd\x7c\xb0\x2a\x4b\xe9\x67\x7a\x4b\x73\x08\xed\x29\xd3\x07\x25\x30\x18\x55\x43\xc9\x48\x52\x3e\x9e\x99\x1f\x34\x9d\x6e\x0e\xfb\x9f\x6e\xff\xdc\xfe\x73\xfb\xeb\x03\xdb\x58\xda\xff\x43\xd3\xe9\x57\x36\xf9\x4c\x01\x0e\x54\xb7\x58\xe1\x5a\x5e\x11\xc1\xe3\xfb\xc3\x2c\xcf\xf7\xc0\xc5\x7a\x1d\x18\x72\x0e\x78\x1a\xc7\xa1\xc2\x3b\x1d\x3e\x05\x33\x57\x1a\x54\xc1\x9d\x83\xc9\x87\x67\xc8\xc2\x87\xf6\x9b\x25\x16\x1a\x51\x3d\x61\xba\x85\x4c\xc4\x17\x36\x64\x62\x11\xd0\x9c\x69\xf2\xe9\x0e\xd8\xd4\x3e\xbe\x30\x4c\xdc\x14\x76\xce\x44\xb3\x5e\x0c\x28\xcf\xc9\xaf\xda\xe4\x04\x46\x4e\xf5\x98\x6d\x80\xa6\xca\x27\x46\xd8\x84\x99\xe2\x4d\xd5\xad\xe0\x85\x35\x0d\x05\x8f\x97\x2a\xf2\xd8\xd0\x6b\xb9\x4c\x68\x70\x99\xa1\x8c\xce\x80\x46\x20\x95\x4d\x6e\x19\xc7\x69\x04\x5e\x4d\xb9\xf6\x8f\x87\xa5\x34\x06\x57\xb4\x19\x22\x32\x4f\x63\xcd\x92\x18\x88\x66\xf3\x60\xbf\xcb\x7c\x32\xc9\x3b\x44\xe4\xb5\x92\x4b\x3b\xb3\xd9\x82\x78\x05\xc7\xf8\x08\x1e\xc4\x34\x8b\x3b\x73\x3a\xa2\x4d\x8e\x69\x65\xc2\x03\xe5\x53\xc0\x9a\x75\xb5\x75\x11\x8e\x7b\xc3\xf7\xa1\xb2\x12\xa7\x9d\x8b\x8b\x40\x99\xba\xe3\xf3\xa3\xf7\xdd\xc1\x75\xef\x43\xe7\x24\x54\x89\xd1\xbe\xd2\xb2\xaf\x04\x80\xd4\xf4\xbc\x38\x3e\xff\xf0\xf4\xbf\xcf\x6a\xbf\x1c\xd6\x7f\x7a\x56\xfb\x6d\x28\x87\xc3\x7f\xfc\x3a\xf0\x35\x55\xb3\x91\xc0\x2a\x2d\xde\x35\xb3\x96\xa9\x75\x8c\x69\x2e\x2e\xc4\x41\x82\x8b\x86\x46\xbb\xbd\x26\xd8\x81\x0c\x40\xd9\x57\x79\xb5\xe1\xed\xb3\x5b\x82\xd3\x5c\x44\x6b\x0d\xb5\xe6\xc8\xbd\xcd\x2f\xb7\x26\x02\x2b\xd5\xac\x13\xcd\x13\xbb\xea\x33\x2b\x00\x36\x0f\xe6\x69\x08\xb0\x36\xe2\xd6\x1f\xdb\x1a\xc2\xaa\xe3\x6f\xb5\x83\xb6\x21\xe0\x3a\x16\xae\xc5\xbe\x5d\x45\x70\xac\x89\x6e\x9d\x00\x8e\x35\x41\xaf\x17\xbf\xb1\x26\xf0\x1b\x08\xdd\xee\x2e\xfb\x30\x9a\x82\x2e\xfa\x1c\x42\xb2\xb2\xe4\x41\x20\x6b\x4a\x62\x93\xf8\x93\x75\x40\x39\x7f\x83\x5d\xf7\x79\xaa\x2e\xa7\x4a\xb1\xa9\xdd\x24\x8b\xef\xd9\x9c\x8f\x38\xae\x6f\x01\xdd\x35\x8a\xaa\xd6\xcd\xa0\x0a\x08\x3d\xb9\x59\x11\x8f\x4f\xa9\x90\x11\xf7\x09\x8d\xf5\xee\x8a\x3c\x7e\xcd\xbd\x67\xce\x3e\xe9\x64\x06\xc1\x80\xc4\x6c\xfc\x35\xd1\x69\xd9\x79\xae\x19\x2b\x31\x0c\x2f\x99\x51\x0e\x91\x5d\xd1\x8a\xbc\x64\x6d\x68\x13\x3d\x13\x0a\x5c\xbe\x8f\x04\x67\x92\x27\x09\x44\x36\x63\xc8\x9c\x7c\x42\xf1\x7a\x1d\x4c\x62\x01\x79\x47\x6d\x3a\x3c\x6a\x03\x4e\x5e\x46\x6d\x32\x6b\x5b\x13\xe3\xc6\xa5\x02\x25\x89\x39\x87\x80\x61\x1a\x68\xa2\x18\x8f\xbe\x6a\x48\xf8\x7a\xd1\x3e\xeb\xc3\x5c\x0e\xc1\xb1\x95\xca\x5c\x4c\x48\xf3\x30\x9f\x42\x47\x5c\x42\xc8\xf2\x2e\xd4\x0c\x51\x31\xc8\x67\x65\x8b\xdd\x12\x80\xcd\x5a\x4a\x36\x04\xb8\x76\x97\xc8\x8d\xe1\x36\x68\xfc\xd8\x18\xf6\xfe\x7a\x39\xe6\x92\x14\x0e\xac\xec\xfa\x90\x9b\xa6\x42\x19\x8e\x9a\x41\x50\x25\x37\x53\x23\x98\x63\xb3\x39\xc5\xf1\xea\xaa\x7b\xe8\x91\x41\x87\xcc\x48\x8a\x95\x60\xad\xb6\x35\xc7\x5b\xc6\x0b\x47\x91\x30\xf9\x75\xd0\xd4\xe6\xa1\xa3\x0d\x78\xf0\x7c\xf1\x1b\x19\x2f\xbf\x48\xf8\x46\x36\xd8\xcd\xc2\x37\x4a\xc4\x6f\x14\xbd\x91\x11\xb0\xf5\x85\x46\x89\x96\xed\xef\x2e\x32\xc2\xbe\xc0\xd5\x53\x69\x28\xc3\x2f\x75\xe5\x94\x71\x60\x8b\xeb\x99\xd2\x48\x76\x71\xd7\x92\x11\xb5\x65\x24\x4a\x89\xb0\x1d\x07\xa2\x64\x34\x66\x71\x19\x68\x64\x3c\x3e\xd6\x54\x22\x58\x13\x52\xc3\x81\x0d\x2a\x3e\x6b\x88\x08\x9d\x07\xeb\xa2\xc9\x3e\xaa\x47\xb2\xbb\x10\x8e\xf2\x4a\xd9\x65\x04\x47\x81\xd8\x26\x11\x1c\x8d\xe8\xab\x3f\x9f\x56\x2d\xce\x86\xb4\x6d\x11\xbd\x51\x45\xe1\x36\xc1\x1b\x4b\xb4\x3d\xdb\xfd\x5c\xd5\x48\xbe\xc8\xbd\x5b\xce\x82\xf0\xb5\xf7\x86\x13\xb4\xd6\x05\xf7\x26\x93\xe6\x67\xc1\x5e\xf5\x95\x53\x49\xf3\xe7\x36\xf0\x65\xf3\xd9\x29\x70\x79\x09\xd1\xe2\xec\x94\x30\x6e\x34\x0d\x55\xd7\x9f\x5b\x11\x5f\x7d\x23\xba\x2e\x75\x59\x9f\xcf\xd7\x05\x29\x2d\x3c\x0e\x2a\x95\x37\xe0\x12\x13\x53\x3e\x0d\x7f\x1b\xc0\xaa\x29\x8b\xd7\xab\x8a\x78\xcc\x22\x2c\x86\x35\x07\xca\xff\x35\xf0\xe5\x07\x60\x98\x5b\x3e\x64\xf0\xaf\x21\x28\x58\xc2\xd7\x37\x48\x77\x31\xe3\xc5\x43\x40\x96\xa9\x1c\x4c\x38\x9b\x4a\x36\x99\x14\xc2\xc6\xb3\x4b\x84\x85\x43\x0e\xe3\x79\x0f\xa2\x46\xd4\x60\x0f\x13\xaf\xb0\x0a\x76\x5d\x56\x18\x55\xd8\xbb\x61\x9f\x95\xb8\x82\x42\x9a\x4e\x16\x3a\x0a\xe1\x95\x4e\xe9\xd1\x42\xe9\x54\x5b\xb4\x35\x8e\x61\x31\x59\x71\xc3\xb1\x64\x8c\x2d\x0e\xa5\x31\xd9\x39\x63\xcb\xf4\x36\x27\x26\x51\x90\x46\xa2\xa5\x35\xa6\x72\x8a\x71\xdd\xc4\xf6\xed\xbb\x17\x17\x3f\xb4\x72\xff\x58\x73\x54\x4a\xcd\xb2\x84\xc9\xc2\x7d\x7b\xe8\x38\x38\x7c\xe7\x8a\xee\xf0\x3c\x89\xb5\x29\x2a\xcc\xc5\xc8\x73\x97\xa5\x98\xbb\x92\x81\x98\xb6\x8a\x27\x02\x4d\xa7\x8c\x87\x0e\xb4\x85\xab\xc0\xa8\x78\x41\xaa\x9c\x19\x6f\x3f\x5e\x93\xa0\x54\xd9\xba\x3d\xbe\x55\x3d\x51\xc2\xfa\xe5\xb0\x99\xbd\xeb\xaa\x9c\xcb\x06\x8f\xf0\x36\x30\x55\xf6\x6b\xf7\xd1\x6a\x82\x6d\x51\xe6\xb7\xbe\x1d\x7e\x91\xc6\x43\xa2\x44\x44\x95\xca\x55\x63\x51\xa4\x5c\xe1\x38\xf7\x25\x99\xd1\x91\x73\x88\x82\x2a\x54\x12\x75\x65\xea\xea\x86\xeb\x32\x60\xcc\x40\xc4\xc4\xae\x4d\xac\xf4\x46\x79\xc5\x91\x6c\x69\xe3\x6f\xbe\xe3\xf6\x0a\x43\xc3\x79\x72\xa3\x51\xb6\x04\x67\x05\xde\xc2\x19\xac\x02\x71\xf3\x6d\x78\x71\x98\x66\xbe\xe2\xd8\xf5\x7b\x10\x93\xf0\xe0\x26\x05\xe5\x54\x18\xe9\xaa\xf3\x7b\x78\xa4\x66\xe2\x50\x1d\xf5\x6d\x69\xfb\x5a\x9b\x0a\xc7\x5f\xa5\xbc\x0a\x43\x5f\xe5\x07\xd8\x6a\xe8\x46\x90\xb7\x38\xa5\xee\x92\x0d\x4b\x05\x1c\x36\x3d\xe8\x56\x30\xa4\x42\xe4\x57\x71\x66\x6f\x5c\xa9\x58\x06\xab\x99\xb3\x5b\xc6\x18\xc5\xef\xca\xe1\xd8\xe8\x96\x52\xf5\x9e\x86\x03\x43\xa2\x87\xef\x5a\x97\x5c\x83\x54\xfa\xe9\x77\x9d\x97\x56\x5f\x06\xb8\x26\x45\xd6\x9c\x3e\x28\x1f\x26\x76\x41\x99\x37\xa0\xab\x40\x07\x69\xc4\x26\xf2\x66\xff\x2b\xd8\x60\xd9\x2d\x58\x78\xbb\x6c\x95\x0c\x2f\xd4\xe6\x8b\x9d\x38\x1e\xd2\x98\x86\xfb\xa3\x1c\x33\x15\xba\xfa\x0e\x7f\xe0\x2a\xeb\xdb\xb8\xa7\x6f\xff\xf9\xbf\x7d\x38\xc4\x76\xd9\xe6\x7f\x4e\x42\x17\x4b\x0b\xd5\xf4\x6d\x25\x7d\x17\xf5\xb3\x04\x22\x84\x39\x89\xe9\xbd\x2f\x24\x4f\x6d\x3d\x39\x9d\x66\x75\x06\x83\x26\x94\x2d\x09\x8b\xf9\xa1\xee\x03\x5f\xd9\xaf\xbe\xb0\xe5\xb1\x70\x05\xc8\x62\x21\xd9\x03\x10\x91\xea\x24\x0d\x95\xb2\xea\xa4\x0a\x1b\x24\x58\xae\x4f\xa8\x1c\x61\x78\xde\x0d\x70\x6e\xab\x79\xad\xc0\x02\xbf\xc0\x38\xb5\xb7\xf3\x30\x17\x1a\x7c\xdd\xdb\x00\xba\xb7\x20\xf9\xc8\x16\x71\xf5\x1d\x57\x94\x2b\x6b\x5a\x8b\x66\x4e\x13\x1f\x00\x60\xdb\x8f\xdb\x42\x12\x2e\xcd\x76\x2e\x6e\xc1\xdf\x25\xa2\x09\x95\x48\xb8\x65\x22\x55\x36\x51\x59\xd9\x92\xa3\xb5\xb5\x27\x5c\x1d\x4e\xc3\x5d\x5b\xb3\xc5\x7a\xa0\x1e\xd0\x7a\x74\xd6\x85\xbb\x55\xb4\xb1\xba\x72\x06\xd2\x56\xc9\x28\x65\x28\xdb\x02\xda\x1e\x14\x70\x3d\x01\xb9\x8a\x87\x58\x5f\xd0\xa7\x9e\xd2\x89\x06\x89\x74\x87\x8d\xbe\xf7\x59\x0e\x35\x86\xc1\x55\x66\x4a\xdb\xa2\x85\x41\xc4\xe3\x1b\x90\x2d\x36\xc7\x74\x60\x91\x95\x49\xb1\x6b\xc3\x58\x79\xaf\xa2\xc2\x2b\x2d\xa3\x40\x43\x4b\xe4\x53\x9a\xdb\x5c\x46\xa7\x3b\xd8\x3d\x84\x6d\x57\x4a\x08\x60\x88\xb6\x74\x0e\x5c\xdb\x61\xa4\x32\x5e\x19\x79\x74\x2c\x6e\xf2\x2f\x54\xeb\x72\x70\x5a\xf8\x24\x80\x03\xaf\x06\xec\x70\x0b\xd7\x6f\xab\xea\xc1\xd8\xe1\x94\x3e\xa8\x81\x1f\xac\x9b\xeb\xc0\xf1\x50\xcc\x95\x2b\x38\x4f\x8c\xb2\x99\x27\x66\x59\xb2\x18\x22\x5f\x7b\x50\xc8\xc7\xc7\x2b\x7e\xc5\x2f\x6d\xf9\x70\x0c\xd4\xc3\xda\xb2\x87\x59\x85\x6a\x85\x72\x45\x6f\x29\x8b\x6d\xf8\xb0\x59\x14\x46\x31\x4f\xb1\xb1\x6e\x2a\xe3\xd0\x7e\xf1\xd1\x46\x3e\x9b\x95\xf4\x0e\x64\x6a\x36\x0a\x5b\x8d\x89\x29\x4d\xcc\xba\x9d\x62\xb4\x07\x9d\x02\x5f\xa4\xa7\x57\x2c\x04\x5d\x6e\x95\xf2\x2f\xa5\x6a\xe4\xb7\xc2\xc6\x12\x17\xcf\x84\x97\x83\x53\xf7\xcd\xad\x8d\x7a\x1f\x51\x19\xda\x78\x1c\x7b\xb2\x32\xbd\xae\xbe\xe2\x81\xb2\x6d\x3a\x54\x3a\x27\x91\x00\x95\x07\xf5\x62\x26\x3e\x99\x83\xa6\x11\x0d\x86\x26\x1d\x33\x20\xef\x05\xd7\x52\xc4\xb1\x4a\xe7\x73\x5b\x70\x75\xe6\x98\x30\x05\xcb\x86\x42\x51\xc6\xc5\x72\xd7\xa5\x80\x60\x5b\x80\x8e\x93\x01\x24\x42\x31\x2d\xe4\xbd\x43\x0f\x3c\x0b\x16\x0e\x0c\x2f\x9d\x27\xa5\x2a\xbe\x98\x33\x4e\x23\x54\x62\xb6\x44\x6c\x68\x67\x2d\x95\xd8\x45\xf2\x97\xaa\xc4\x02\xa1\x36\x05\xdd\x5a\x9e\x4b\x35\x67\x37\x29\x39\x5b\x3d\x8e\xee\xd9\xc7\xde\xe0\xfc\xec\x43\xf7\xec\x82\x7c\xec\x0c\x7a\x9d\x37\xa7\x5d\x72\x32\x38\xbf\xec\x87\xe2\x18\x2f\x3f\x9c\x74\xdf\x5c\x9e\x9d\x0c\xfd\xeb\x67\x27\x83\xcb\x7e\x3f\x14\xd8\x58\x83\x20\xb4\xf0\x82\x18\x02\x2b\xb1\x0a\xc5\x1a\xc0\x57\x43\x5d\xaf\xb2\xb6\x0f\xbe\x08\x79\xf1\xba\xbd\x61\xbf\xd7\x0d\xb5\x5a\xee\xce\x13\x6d\x0b\x6d\x13\x21\xc9\x44\xc4\x51\x30\xa4\x27\x00\xc0\x2a\x1c\x8c\x58\x49\xa4\xf8\xe5\xde\xf7\x8b\xe9\xf4\x7b\x3e\x3a\x38\xe4\xc8\xc2\xc8\x98\x7e\xf6\x11\x5a\x32\xfd\x5e\xab\x10\xf1\x1b\xda\xab\x1c\xd6\xe7\xf0\xf2\xad\xf2\x91\x94\x49\x79\x1e\x17\xdf\x9a\xce\xbd\x4d\x86\xb0\x1f\xcf\x5e\x43\x4a\x84\xc4\x66\x93\x23\xec\xf6\x1c\x8b\x90\x44\xbe\xa5\x72\x04\x05\x98\x3e\x7b\xa5\x21\x96\xad\x3d\x7a\x0d\xf1\x94\xdd\x79\x05\xcb\x6a\x67\x9e\xbc\x35\x08\xf9\x32\x6e\xbc\xa2\x13\x2f\xa2\x66\x1f\xdc\x97\x0f\x0f\x87\xfa\x5c\x2e\xbc\xce\x97\x71\xe0\x2d\x8e\x71\x5b\xff\xdd\xa6\xc3\x5c\x74\x5b\x99\x1f\xb7\xf2\xde\xed\x73\xdc\x5b\x3a\xef\x9a\xf2\xe0\xf9\x5c\x77\x15\xdc\x78\x5e\xcf\x5d\x1d\x4b\xbe\x98\xdf\x2e\xe3\xca\xa6\x6e\xbb\xce\x4e\x9d\x76\x41\x72\xd6\xf5\xd9\x35\x24\x6b\x6d\x8f\x5d\x97\x47\x89\x60\x5c\x93\x97\x86\xaa\x99\xd6\x09\xb6\x39\xfc\x2a\x64\x84\x86\xdf\xaf\x07\x1f\x41\x22\x61\x4c\xc3\x3d\x96\x43\xdf\xdf\xe6\x09\xaf\x9f\x3f\xb7\x3f\x52\xe7\xe2\x27\x77\x54\xb9\xc2\xcb\x3a\xc4\xb3\xa5\xbc\xd4\x05\x08\x18\x56\xea\x9c\x5c\xa0\xf4\x14\x62\x98\x86\xf2\x79\xf1\x4c\xeb\x96\x5a\x65\xb4\x9a\x61\xc7\xc9\x65\xef\xf8\xe0\x75\xa8\x06\x98\xed\x16\x40\x46\xc0\xe6\xa5\x5d\x2f\x2c\xf6\x38\xa5\x1e\x68\x0d\x59\x68\x5d\xd8\x46\x2f\x68\x70\x37\x20\x20\x4f\xbf\xc6\x8a\x63\xb9\xc9\x5d\x87\x67\xec\x53\xbd\xf3\x5a\x68\x2c\x86\x46\x03\x2e\xe3\xf3\xa5\xd0\xf0\xcc\x5c\x3f\xb6\x0c\xa7\x1b\xdb\xea\xf6\xf6\x8d\x86\x59\x04\xd3\x04\xbb\x76\x35\xad\x57\x76\x94\x08\x63\xcf\xeb\x5b\x73\x97\x59\xfd\x52\xcf\x93\xaf\x56\xb5\x8f\x58\x20\xa4\xb6\x9e\x76\x08\x79\xa1\x84\x76\xa0\x63\xe1\x22\x96\xaa\x5c\xfe\x06\xad\x2a\xc2\x04\x78\x83\x4f\xd5\x83\x5d\x87\x38\xf7\xfd\x7a\x0a\x05\x41\x45\x95\x01\xc9\x76\xd5\xad\x39\xca\x2c\x68\x67\xc1\x40\xaf\x86\xd7\x84\xa6\xea\x18\xe5\x26\xd5\xdd\x03\x74\x05\x8b\xac\x34\x28\xee\xde\x9c\xb6\x9d\x13\xd6\x9c\xaa\xa2\x40\x58\xfb\x80\x5c\xf1\x0f\x3e\xf7\xd8\x9e\x6c\x30\xdf\x3d\x3b\xe9\x60\x4e\x87\x04\x9d\x4a\x0e\x51\x9b\xf4\x6d\xc9\x08\x73\xcc\x39\x18\x4f\xc8\x38\x95\xf1\x81\xfd\xc2\x1d\x84\xc7\x44\x48\x66\x1b\xfd\xa1\xe3\x6d\x23\xa1\x0b\x5e\xe0\xad\xcb\xb5\xd0\xee\xbf\x19\x76\x6b\x8a\x34\xa0\x61\xe1\xaa\x36\x4c\x87\xb7\x42\x6a\xe9\xc9\x7a\x93\xa1\x5a\xcf\x67\x3c\x58\x65\x34\x27\xa5\x94\x14\xfe\x90\x16\x55\x8d\x3d\x78\x2e\x34\x16\x2b\x01\x6f\x44\x93\x4a\x04\x57\xb0\x1e\x51\x76\x87\xd1\x58\x08\x62\x04\x0f\x4f\xbf\xdb\xaa\x16\xe6\xb1\xa3\x2f\x3f\x19\x6f\x48\x20\x84\xcc\xc9\x06\xb3\xd7\x69\x36\x77\x1b\xa1\x6f\x2c\x42\x0d\x89\x68\x22\x40\x13\xc6\xd1\xe6\xc9\x6f\x34\xcc\xb1\x76\x5d\x35\xe9\xfa\x56\xe7\x17\x0c\x0b\x5d\x06\x1a\x75\xc0\x08\x11\x64\x73\x3c\xd7\xd2\x8e\x55\xf4\xf8\xc4\xcc\x66\x5a\xd1\x93\xb1\x9b\x6d\xc4\xd3\x93\x67\xbb\xac\x00\xb9\x1d\x65\xbb\x26\xab\x31\x4d\x2b\xba\x3b\x55\xe0\x36\xfb\xbd\xb7\x63\x6b\x8d\x2a\x8f\x62\xf1\xc8\x90\x1b\x06\x4d\xc2\x71\x03\xa3\x0f\x1e\x1e\x42\xd0\xb7\x20\xb4\x01\x6d\x6b\x91\xd6\x8c\x9a\xaa\x90\xfd\x4d\x65\xa5\x3a\xee\xbe\x21\x3d\x42\xde\x51\x89\x24\x19\xbd\xd7\xe8\xd4\xf3\x3d\x76\x14\x8c\xcd\x7f\x79\xd6\x59\xbb\xfe\xbc\x33\xb5\x05\xa5\x31\x82\x66\x2c\xa2\x66\xa7\xab\xce\x08\x5b\xdd\x5a\x0f\xdc\xf0\x5d\xeb\x48\x44\xa0\x9a\xe3\x61\x7c\x22\x42\x07\xfe\x6a\x34\x56\x75\xf7\xf0\xbb\x06\x48\x8a\xad\x1c\x55\x3a\x9f\x63\xe7\xbb\x35\x11\x66\x7e\x77\xf5\x90\x2a\x3a\x9f\x03\x9f\x50\xa5\x30\x38\xbd\x09\x09\x79\x13\x76\x5f\xc2\xdb\x5d\x14\x7f\xfe\xdc\x7e\xcb\x62\xe8\x53\x3d\x6b\x24\x4e\x45\x9a\x5c\xbb\xf1\x38\xef\x9c\xee\xae\xb4\xcb\x40\x1b\x90\x87\x57\x70\x66\x1e\xd6\xa4\x00\x0f\x92\x38\x11\x4d\xb0\x08\x6e\x4b\xf1\xd8\x34\xa3\x8d\xc4\xab\xcb\xf8\x9c\xc6\x85\xec\x22\x90\xcc\x4c\xca\xb8\xb9\xc8\x39\xc6\xfb\xbb\x77\x3b\x1b\x12\x12\xb1\xb6\x4c\x38\x76\xb7\x3e\x64\xf7\xe8\x34\x55\xd8\xe4\x2d\xbf\x63\x6f\x46\x93\x2d\x66\x64\x7b\x1d\x82\x6d\xb4\x97\x25\x4d\x34\x3f\x0c\x96\x68\x33\xf8\x99\x0b\x6b\xc8\x15\x81\xcf\xa6\x68\x70\x22\xc4\xfa\x0e\x34\x66\x0f\x86\xc0\x41\xff\xc8\x7b\x72\x1b\xb1\xa9\xe7\x3e\x56\xb9\x87\x76\xd0\x3f\x6a\x0d\x33\x10\x35\x88\xe7\x54\xaa\x19\x45\x4b\xef\x2f\xc3\xf3\x50\x75\xa2\xd2\xc0\xb3\x90\x2d\xb7\x2f\x22\x80\x38\xbb\xd7\x45\x30\x35\x18\x45\x02\x3c\xd7\x7a\xd8\x83\x17\xb9\xdf\x00\xf5\xd3\xff\x8b\x0d\xba\x32\xa5\xf4\x11\xe4\xc8\x76\xf2\xac\x1f\xa4\x47\xd9\xa8\x4b\x58\x08\x61\xb9\x65\x58\x1d\xba\x84\x4a\xb5\x06\x43\xfb\xee\x75\xa3\x54\x56\x31\xcf\x83\x76\x65\xba\xd6\x80\x6e\x86\x60\x6b\x6e\x35\x81\xef\x8f\x45\x1b\x9c\x7d\x13\x90\x13\x21\xe7\xeb\xf8\x28\xad\xd2\x77\x72\xe5\x6b\x99\x34\x74\x54\x26\x52\x78\x47\x2d\x4d\xac\xe3\x4e\x11\xdf\xbd\x1e\x75\xf2\xc1\x9a\x2b\xfb\x23\x48\x8a\x3d\x4d\xf3\x1e\x0d\xb6\x7d\x1b\x26\xcf\x04\x01\xaf\x49\xe3\xee\x88\xda\x80\x8a\x5c\x17\x1b\x3d\x03\xb2\xc1\xea\x43\xac\x19\x15\x59\x07\x7d\xaa\x0b\xf9\x91\x08\xa8\x86\x02\x09\x34\x7a\x75\x27\x99\xdb\xa5\xf9\x84\x4d\x83\x98\x57\xc1\x59\xf6\x4d\xaf\xe7\x9a\xc2\xa0\xe3\x0a\x07\x75\x33\x0b\xd1\x53\xb0\x62\x9d\x54\x63\x74\x9e\x83\x75\xe0\xe3\x64\x6d\x82\xc4\xcc\xcd\xda\x88\x9a\x4b\x45\x00\x63\x43\x69\x98\x48\xc0\x38\xd7\xed\x64\x21\x83\x22\xf2\x8c\xea\xa6\x02\x5d\xee\xcb\x89\x1b\xda\x79\x27\xd5\xb3\xd6\x85\x81\xb2\xc2\xc8\xc1\xc8\xe3\x82\x95\xe3\xfb\x3c\x6f\x34\x0a\x4e\xe7\xbb\xf1\x52\x5f\xce\x31\x18\x87\xef\xc0\x4f\xed\xf4\x37\x6e\xed\x4d\xe4\x6f\x51\x6f\xaf\x16\xbe\x0c\x7e\x66\xae\x62\xdf\xf6\x92\x10\xae\x67\x96\x39\xec\xde\x3d\x08\x8c\x3f\x60\x9c\xf6\x27\x60\x1a\x0d\x57\x2c\xb4\x3c\x5c\x86\x5d\x4b\xa7\x12\xf1\x6d\x56\xcd\x60\x1d\x4d\xe3\xb6\xb6\x49\xfc\xf4\x9b\xf2\x4a\x13\x03\xc9\x9b\x6b\x1a\x0c\xe5\x5e\x38\x5a\xad\xc9\x95\x33\x48\x5d\x40\x78\xf9\x7c\xd5\x9c\x01\x5a\x32\x40\x0e\x28\x4d\xc7\x37\xeb\x9f\x54\xdd\x57\x6b\xe0\x58\x77\x87\x2c\x9d\x58\x97\x01\xd4\x61\x4e\x39\xf7\xf5\xc9\xf1\x9b\xa3\x58\xa4\xd1\x91\x0b\x06\x06\xf9\x01\x94\xa2\xd3\x70\xcd\x88\x3a\xd8\x8a\xde\x16\x77\xaa\x35\xc7\xe4\x7d\xc7\x0b\x2e\xa8\xa6\x03\xc3\xfe\xc4\xbb\xd0\x2a\x21\x5d\xb9\x8d\x72\xc9\x88\xb3\xa9\x31\xd7\x18\xbc\x7d\xad\xef\x13\x68\xe6\xe6\xae\xa2\xc9\x6c\x3d\x15\xe0\x56\x39\xbb\xed\x45\xeb\xc2\x12\x6b\xd4\x64\xb9\x38\x59\x79\xeb\xe2\xd2\x1a\x6b\xec\x33\xcd\xa9\xd8\x7e\x13\x28\xd2\xb2\xdd\x34\x79\x73\x4d\x8b\xcd\x2e\xc6\x87\xbe\xe5\x31\xd6\x11\x5e\xec\xfb\xbc\xc6\xb5\xf8\x03\x4b\x92\x85\x29\x6a\x80\xfe\xbd\x98\x27\x92\xcd\xf3\x7b\x88\x6c\x5e\xea\x70\x55\xfa\x53\x09\x53\x2e\x39\x3b\xa1\xca\xd5\x6f\xa7\xca\xc6\x94\xca\x29\xa6\xa0\xd8\xf0\x23\xef\x0e\x38\x20\xa3\x54\x17\xff\x69\xf6\x3b\x86\x41\x92\xae\x6a\x33\xc8\x36\x21\x6f\xcd\x31\x5c\x48\x20\xea\x9e\x6b\xfa\x0b\x99\x41\x9c\x1c\x62\x2b\xc1\x9f\xc6\x13\xdf\x18\x32\x17\x89\xd6\xec\xa7\xd0\x95\xa4\x1b\x78\x35\xf5\xae\xb4\x5a\xac\x48\x27\xa3\x16\xc3\x9b\x72\xfa\x30\x33\x01\x83\x79\x0f\x09\x1d\x41\xe9\x37\x3c\xd5\x45\x20\x6d\x67\x46\x32\xa5\xfc\x01\xb0\xf1\x5f\x9b\x38\x97\x07\x90\x21\x0e\x60\xc6\xe2\x09\xb8\x1e\xee\x58\xc5\x1a\x33\x28\x6a\x06\x13\x9e\x88\x15\xfb\x4c\xed\x86\xf2\x9a\x9c\x09\x5b\x65\x1d\xcb\x70\xaf\xc8\xb7\xf3\x00\x6d\x6e\x15\x56\x16\xcf\xf2\xed\xa6\x30\x49\xc3\x0d\xe9\x1d\x32\x63\xbc\x44\x44\xa4\x9a\xdc\x51\xbb\x62\x10\xa1\xba\xe7\x63\xf2\xb3\x18\xe1\xb1\xb1\x2b\x25\x66\x25\x1d\x98\xd5\x34\x61\x9c\xa9\x50\xc1\x79\x4f\xce\xa7\x34\x7e\xfa\x55\x29\x36\x05\x85\x16\x8c\xcd\x61\xb4\x0e\x67\xbb\x9f\x63\x30\x2d\x55\xa4\xcb\x23\x1b\x96\x89\x28\x67\x12\x03\x2e\xff\x22\x46\x6a\x01\x33\xce\xb1\x1a\xcf\x24\xd3\xc1\xfc\x30\x37\xa4\x46\xab\x7c\xe5\xe2\xb5\x19\x82\x0a\x53\x04\xd1\xdc\xb3\x19\x7c\xe0\xfa\xd9\x43\x84\xf9\x03\xe0\xa2\xc7\x42\xb8\x9e\x7e\x9f\x79\xd1\x2b\x1a\x98\x94\x63\x9a\x0d\xe5\xb7\xb8\x07\x18\x86\x74\xfa\xbd\x56\x97\x47\x49\xca\x6f\x34\x89\x52\x39\x9e\x85\x08\x4b\xac\x03\xb0\xe8\xb1\xb6\x21\xdb\xd4\xba\x8e\xc5\x84\xdc\xc0\xfd\xab\x5b\x1a\xa7\x40\x12\xca\xa4\xba\xe2\xce\xa1\x34\xc6\xa6\x90\xa8\x02\xb2\x43\x28\x07\x2a\x5f\x5f\x71\xc3\xee\x1f\xe6\xf1\x90\xb3\x24\x01\xfd\xf8\x18\x2a\x6c\xdf\x55\xe4\x8e\xc9\x88\x80\xbc\x33\x33\xa9\x0f\x09\x56\x3c\xb0\x85\xd0\x8b\xc1\xd5\xe4\x14\x7d\xce\x66\xe2\xf3\xd2\x6d\xaf\xbe\x07\xa9\x5b\x7d\x4a\xa5\x4d\xce\x6a\x93\x2b\xee\x96\x3f\x9b\x67\x96\x82\x6f\xdb\x70\xf6\xf4\xeb\x0c\xbd\xd6\x95\xf4\x35\x66\x8f\x2a\xf1\x67\x8b\x71\x01\xb7\x83\xe2\x58\x81\x75\x05\x01\x79\xd1\x28\x8f\x5d\x81\x9f\x1c\xf2\x3f\xae\xd2\xaf\xbf\xfe\x33\x10\x9c\xa4\x43\x54\xb8\x4c\x63\xc4\x20\x56\x48\xba\xb8\x4f\x20\x1c\x37\x14\x20\x35\x47\x68\x53\x41\x81\xcd\x60\xb1\x72\x9e\xc3\xdb\xfa\xde\x0a\x1d\xce\x40\x57\x61\x7e\xdb\xcf\x10\x09\x9b\x96\x59\xa4\x60\xe5\x18\xfb\x52\x24\x20\xf5\xfd\xc2\x58\x47\x42\xc4\x40\x83\x9d\x4d\xc2\x43\x58\x80\x87\x70\xd4\x78\x86\xa4\x6e\x4c\x8d\x5f\x17\x6e\xf7\x52\x5b\x93\xb5\x20\xe0\x27\x94\x3f\x3c\xd0\x59\xec\x58\xba\x35\x9d\x4a\x4b\xc6\xa7\x3b\x27\xf3\x93\xad\x9e\x3c\x11\xf1\x74\x5b\x4a\x79\x3a\x1f\x81\x5c\x96\x5c\xff\xfa\xa6\x12\x5c\x35\x00\xb3\x5d\xd7\x88\xea\x22\xca\xca\x21\xbd\xed\xf4\x4e\xbb\xc7\x21\x35\xdd\x7d\x77\x7a\xd2\x1d\x1e\xbd\x3b\xed\x9c\x84\xf2\xf6\xde\x76\x3b\x17\x97\x83\x2e\x79\x7b\xda\x39\x09\xa5\xb2\xb9\x77\x5a\xf6\x9d\xd5\x60\x82\x37\x9a\x45\x38\x81\xeb\xcb\xb7\x98\x5d\x4b\x6c\x11\x6f\x7f\x27\x2e\x85\x4d\xad\x4d\x55\x8d\x1b\xec\x93\xcf\x0e\x5f\xbc\x02\x57\x78\x6e\x24\x0f\x69\x9e\xfb\x52\x95\x3f\x5b\x4b\xcf\x04\xf4\x78\x56\x3a\x0c\xa8\x26\x51\x99\xfe\x14\x5c\xaa\x9f\xaa\x2a\xd0\x37\x88\xc5\x5c\xa4\xc4\x06\x73\x28\x9f\x4c\x90\x25\xde\x95\x6e\xfc\xdb\x2b\x9d\x23\x45\x12\xb3\x88\x8e\x42\x56\x80\x03\xfa\xff\x14\xa1\xd6\xd0\xbf\x26\xf5\xeb\x32\x31\xa3\x70\x27\x2c\x84\x5b\xe0\x5a\x35\x3a\x5a\x16\x89\xe8\x4a\x30\xc2\xa9\x54\x0d\x1d\xf5\x47\xcc\x45\x42\x84\x9c\xb6\x6c\xb4\xa4\x99\x4d\x14\x77\xcb\xef\x81\x88\xe1\x42\xb8\xb2\x15\x0b\x53\xda\x90\x65\xa5\xa5\x30\x72\x2b\xc0\x4d\xf1\x00\x57\x46\x10\xd5\x6e\xb8\x2c\xe4\x74\x7d\x1e\x2f\x96\x49\xdb\x09\x9b\xd1\x5f\x28\x6d\x59\x52\xb5\xde\xd2\x40\x2f\xa1\xb4\x75\x47\x6b\xa5\x6f\x2d\x5a\x36\x21\x62\x27\xd8\x31\xb6\xa7\x42\xe4\x30\x38\x67\x07\x42\xe7\x0b\x59\x86\xe4\x2d\x84\x67\x37\x12\x67\xc3\xff\xda\xeb\xc5\x79\x55\x90\xbf\x4a\xcf\x34\x08\xf0\x72\xa4\x69\xe1\x4e\xdb\xc6\x1a\x12\x63\x1a\x3b\xe7\x0b\x95\xf7\xe4\x81\x59\x47\x4e\x96\x2d\xb7\xaa\xa1\x4c\x43\x4c\x3f\x2b\x61\x53\x9f\x7d\xb3\x9d\x6b\x5f\x7f\xa1\xee\x1e\xb8\xdc\x1e\xf0\x2f\xc3\xf3\xb3\x3c\x7b\xae\x78\xd6\x5b\x00\x5a\xc1\xa7\x86\x64\xfa\x13\xdb\x21\x49\xb3\x1a\x1a\x09\x95\x0a\x2a\x9b\xef\x05\xb7\xff\x32\xdd\xf9\x91\x6b\x89\xae\x7f\x59\x6e\x9b\x47\x6e\x04\xe7\xda\xa7\x24\x4d\xc1\xa0\xf7\xdd\xf0\x56\x18\x06\x5a\x90\x39\xbd\x01\x7f\xe9\x64\x2b\xf0\x58\x42\x57\x2e\x18\x1f\xb3\x54\xc2\xee\x6b\xf0\x8c\xa8\x5c\xe8\xcb\xb7\xda\xcf\x5c\xa4\x09\xe3\x40\xea\x82\x1e\x9a\x44\x8e\x6c\x32\xad\xb6\x80\x8e\xbd\xfd\xab\x17\xb5\xa1\xbb\x04\x41\x7d\x8f\xf7\x7c\x45\x01\xdb\x00\xf5\x1d\x8a\xa2\xcb\xec\xc6\x6c\xeb\xe7\x6a\x6d\xfa\x06\xc4\xc8\x4c\x55\x7e\xc1\x32\xf5\x41\x24\xbb\x2d\xfa\x5f\xa2\x67\x91\x3f\xa1\x5c\x43\x9f\xd7\xfd\xf9\x73\xdb\xfd\xf9\x36\xa6\xd3\xc7\x47\xe2\xea\x4c\x06\xb3\x2a\x82\x1f\x5a\xf7\x65\x9e\xf1\x1f\x3a\x72\x05\x01\xd8\xcc\xf8\x4d\x11\x37\x44\xbb\x5e\x21\xdc\xb7\x46\x07\x73\xa1\x9d\x87\x12\xd5\x74\x7c\x7f\x68\xd7\xb7\x32\xd4\x60\x26\xbe\x79\x0b\x7e\x61\x4a\x2b\x42\xb5\xab\xe1\x83\xbd\x49\x3e\x7f\x6e\x9b\x1f\x93\xba\x78\xc6\x63\xe6\x7d\xed\x76\x20\xb1\xb8\xa1\x71\xa6\x77\xac\x63\xf3\x5f\x88\xd7\x64\x43\x06\x44\xe1\x95\x53\xc1\x6d\x63\x3f\xa7\xf3\x42\x8f\xbd\xfe\x84\x46\x65\xf4\x58\x13\x8b\xf2\xa8\xf6\x3c\xfc\x56\xc8\x31\xb8\x46\x29\xe4\x65\x64\xeb\x5f\x25\x52\x60\x95\x23\x21\x6d\x1c\x80\x9c\x23\xf1\xa1\x62\x4c\x59\x7a\x0c\xc8\x87\x3b\x86\xbe\xa4\x97\xb6\x66\x57\x97\xf1\x29\x1d\x01\x4d\x27\xc5\x94\x11\x49\xde\x80\xd2\x4f\xbf\xda\x86\xa8\x81\x6a\x35\x05\xc2\xcc\x02\xb9\x63\x7a\x26\x52\x5d\xa2\x67\x15\x39\x62\x86\x8d\x9c\x72\x54\x39\x81\x75\x38\x5d\xf1\x26\x5b\xbd\x00\x35\xfa\x1a\xc8\x4b\x35\x97\x4a\xd5\x88\x36\xa4\x66\xce\xa6\xae\x80\xd8\x1a\x54\x7c\xc8\x3e\xda\x10\xeb\xd6\xb5\x7d\x1b\x61\x71\x37\xe9\x5e\x4b\xfb\x01\x5a\xf1\x0b\x60\xf3\x17\xe7\x3e\xe6\xca\x8e\xb0\x4a\xd0\x1a\x91\x90\xf2\x91\x0b\x75\x5f\x83\xbd\x1d\xd7\xa2\xcb\x46\x21\xda\x78\xc7\xf5\x39\x7d\xd2\xbd\xb8\xe8\x9d\x9d\x90\xe1\x45\x67\x70\x11\x74\xe0\x74\x07\xc3\x8b\x2e\x19\x1e\xbd\x1b\xf4\x82\xcd\x30\x17\x20\x05\xd3\xc7\x4b\xa0\x02\xce\x97\x93\xd3\xf3\x37\x9d\x53\x72\xde\xbf\xe8\x9d\x87\x9b\x54\xda\xb7\xba\xee\xb5\x60\x61\xa5\x13\xd0\x84\xe6\x91\x24\x59\x87\x5f\x4c\x5b\x52\x33\x32\x8e\x99\x39\x7d\x87\xe8\xc5\x68\xe7\x1b\xdf\xdf\xd7\x56\xf0\x18\xbe\x6b\x1d\xd9\xaf\x08\xb5\xd6\x7a\x18\xb5\xd1\xd5\xcb\x97\xcf\xf6\xf6\xc0\xc8\x5c\x5d\x8b\xa6\xef\xb3\x1a\x93\xcb\x10\xf2\xce\x65\xab\x48\xb0\x51\x22\x71\xec\xa3\x87\x5d\x39\xc4\x39\x95\x37\xa0\x93\x98\x8e\xa1\xa6\xea\x80\x3b\x8c\xd0\x38\xce\xcb\x0e\xd9\x60\x99\x0f\x54\xde\x98\xcf\xf5\x43\x70\xbf\x3f\xc9\xa3\xff\xd5\x7e\xda\x1a\x15\x0f\x4b\x1d\x87\x65\xaf\x9d\x8c\xfc\x90\x0a\xfe\xb7\x76\x3b\x98\x1c\x58\xed\x77\xb3\x5f\xd4\x82\xf7\x4e\xb5\x70\x57\xff\x75\xb9\x93\x7b\xac\x76\xd3\x21\xc7\x53\x0a\x85\x02\x0d\x6a\x47\x7d\xfc\xd7\x1d\x5b\x45\xff\xf1\xec\x9a\xf6\x59\xfb\x5c\x65\x4c\x41\x87\xde\x3e\xb8\xd1\x48\xd4\x8a\x8e\xc1\x7d\x33\x62\x95\x24\xdb\xd0\xeb\x2f\x23\x17\x3e\x3e\xfb\xcb\x0a\x83\x2b\xf2\x8b\xba\x9b\x64\x91\x4c\xcf\xc3\x8d\x32\x0d\xcb\x3b\xd0\xc4\x86\xb5\x64\x54\x34\x19\x49\x35\x94\x15\xd3\x61\xcc\x50\xb3\x9d\xa9\xd0\x7e\x56\x13\x8e\xe5\xd1\x33\x3e\x11\x5b\xd7\x2c\x2a\xc4\x03\xf6\xf8\x44\xa8\xdd\x55\x1e\x5a\x22\x73\x77\xfd\xa7\x02\x54\xef\xb4\x13\xd5\x32\xf9\xab\x9a\xf4\x2c\xf2\xbf\xa1\x8f\x22\x30\x98\x75\x9a\xf5\x2c\x4d\x4f\xb3\x66\x38\x7e\x88\x5f\xa0\xd7\x5e\x29\xec\x35\x0b\x18\x50\xd5\x64\xec\xad\xd7\x5e\x81\x01\xea\x79\x46\x2b\x8b\xe1\x11\xfb\x1f\x58\xa8\xb0\x5d\xa3\x6d\xb3\x41\x5d\xba\x55\xbb\x9d\x3d\xac\xab\xbc\xcb\xb3\xf4\x69\x88\x0c\x14\x69\xb7\xdb\xab\xf4\x64\x21\x87\x54\x15\x5a\x33\xe7\xd9\x8c\x0a\x81\x34\x27\x22\x23\xe0\x9e\x84\x62\x8e\x82\xb8\x07\xc5\x6f\x6b\x51\x56\x36\x1f\x43\x4d\xb2\xd9\xce\x6d\xf5\xc2\x43\x2a\x77\xdd\x34\xb1\x44\xf0\x5a\x35\x10\x0b\xd4\x55\xd2\xb4\x56\x25\x43\x4f\x46\xe9\x26\x70\x89\x1a\xd2\x54\x72\xcb\xb7\x82\x4b\x64\x90\x06\x92\xeb\x2a\xe5\x57\x2c\xf3\xb5\xdb\x49\x56\x82\xdc\x74\x54\xdb\x0d\xa7\xd2\x5a\x68\x68\x55\xad\x4b\xe7\x0a\x43\xa2\xb9\x45\xb9\xed\xf8\xf6\x3c\x90\xcd\xe8\x4d\xfd\x31\x00\x5b\x81\x94\x2d\x23\xe2\xda\xcb\xd9\x87\x27\xe6\xd9\xd9\x1a\xcb\x71\x00\x53\x88\x79\x7e\x3d\xb8\x64\x16\xd5\x81\xaf\xa5\xba\x4c\xa7\x5a\xd7\x5c\xab\xec\x16\xca\xd7\x35\xc8\xb2\xce\xa0\xb6\xcc\xe7\x66\x2a\xcb\xed\xb1\x0f\xb6\xec\xe0\x46\xba\x6a\x81\x0e\x33\x97\x79\x43\x50\xdb\xca\xd3\x48\x07\x8f\xaa\xc2\x80\xb2\x7f\x6f\x7c\x98\x5b\x1a\x81\xb5\x1a\x97\x29\x48\x79\x54\x25\xbd\x25\x0a\xf6\x38\xf8\xe5\x6a\xab\xfb\xe2\x4a\xa1\xdc\xee\x83\xaf\xbd\x5a\xc7\x94\xe5\xe2\xab\x7f\x54\x6e\x7d\x19\x56\xec\x6d\x9c\x7b\x1d\xce\x4e\xa8\x7e\x3e\xd9\x7c\x0e\x59\xfb\x03\x2c\xc1\x2f\xba\xd6\x76\xb4\xa8\x96\xb5\x6e\xcd\xd8\xb6\x20\x3c\xcb\xcf\xae\x34\x3f\xd7\xa2\x73\x9d\xa6\xd7\x8d\x09\xb4\x4b\x7a\xf3\x73\x65\xb9\xdd\xf5\x66\x07\xcb\x52\x1f\x09\x73\xb0\x72\xb7\x83\x4d\x2a\xd9\x6f\xce\x4e\x83\xad\x80\xcc\x6f\xba\xab\x4a\xd8\x6f\xc6\xe6\xb5\x86\xb6\xcf\x61\x34\xa5\x78\xf9\x22\x6d\x6f\x71\x3d\x15\x83\x5a\xbc\x85\x7b\x8e\x96\xe3\x4b\x0c\x78\xd6\xf1\x3e\xe7\x00\x2b\x5a\xaa\x6f\xee\xd1\xc8\x3d\x9d\x36\xf0\xa4\x49\x73\xf5\xcd\x54\x6a\x4e\xf6\x26\x07\x85\x08\x56\x50\xb7\xd9\xb9\x01\xa3\x60\xab\x9a\xbb\xd7\x4a\x46\xb3\x4b\xd5\x3c\x40\xb6\xa6\xa5\x7b\xbd\x24\xac\x54\xbd\x9a\x8e\x6f\x6c\x41\x7d\xf3\xd7\xe3\xe3\x41\x59\xec\xb3\xed\x7b\x1f\x57\x58\xc3\x4a\xe4\x75\x46\xc4\xee\x2f\xb0\x6c\xe1\x85\xe7\x1e\x74\x68\xbd\xef\x71\xa0\x9a\xaa\x9b\x5d\xdd\x55\x36\x54\x74\xf5\x04\xd9\xc0\xf8\x8a\x95\x53\xc6\x5e\xbe\x2f\xa9\xc0\xdf\x68\x25\xf9\x08\xf9\xba\x95\xb4\xc8\xef\x05\xcc\x15\x0b\x6c\xf3\x01\x6e\xbc\x61\x34\x1e\xca\x7a\x5b\x43\x2c\x46\x34\x26\x02\xc3\xec\x83\x5d\x1c\xab\xbf\x7d\xd7\xed\x9c\x5e\xbc\xbb\x3e\x7a\xd7\x3d\x7a\x7f\x7d\xf1\x43\xbf\x1b\xf8\xfa\xe2\x87\xfe\xf5\x71\x77\x70\xfd\xe9\x72\x78\xd1\x39\x3b\x1e\xf6\x07\x4f\xff\xe7\xed\xe5\xd9\x49\x43\xa8\x64\x9e\x2a\x4d\x46\x40\xae\x5e\x24\x42\xea\xab\x17\x87\xe6\x2f\x5b\xe0\xcb\xfc\x43\x48\x72\xf5\x62\xa6\x75\x72\xf5\x62\x3d\xf2\xcf\x87\x17\x6b\x7f\x70\xd6\xf9\x10\x1a\x66\xe0\xa3\x8b\x8b\xbe\xad\x41\x86\xdd\x2b\xc7\x71\x8a\xa1\xbd\xae\x32\xa3\x4d\x12\x1f\x89\xe8\x1e\xc7\x71\xf0\x3f\x0f\xc8\x44\xc4\xb1\xb8\x83\x88\x8c\xee\x09\xb5\x01\xb1\x98\xd9\xaf\x05\x16\xb0\xc2\x0f\xb3\x9a\x66\xc1\x58\x49\x4c\x15\x2f\x04\x7c\xab\x19\x4d\x13\xad\x81\xc5\xe4\x21\xb5\x29\xad\x12\x43\x29\x23\xdb\xe5\xae\x65\xab\x9b\x61\xab\x31\x43\xc5\x14\x26\x22\x9e\xfa\x06\x96\x73\xac\x12\xc0\x5d\x78\x16\x06\x20\x1c\xba\x9a\x94\x32\x0b\x9b\xe5\x64\x0a\x31\x56\xc8\xb2\x11\xf5\x44\x89\x38\x0e\x45\x70\x21\x5b\xe6\xa0\x67\x22\x22\x2f\x4f\xba\x17\x87\xfd\xf3\xe1\xc5\x61\xff\xf2\xe2\xf0\xb8\x7b\xda\xbd\xe8\x1e\x82\x1e\x87\xa2\x62\x91\xde\x0f\xf8\x2d\xd8\x8f\x09\x7e\x4d\xcc\xe7\xc4\x7e\x4f\x40\x8f\xdb\x81\x00\xd8\x77\x8b\xa1\x0b\x21\xb1\x5f\xbe\xcf\x67\xb8\xb4\x2c\x80\x23\xf3\xd8\xe6\x8f\x06\xf0\x08\xa5\x71\xea\x6c\xf3\xd5\xf9\x7d\x4b\xa5\x23\x1b\x03\x15\x1c\x5a\xf6\x09\xb6\x5f\x2d\x7f\x52\x8f\xc4\x7b\xa1\x91\xb3\xb6\x7d\xf0\x4b\x57\x84\xc3\x85\x05\xce\xa8\xf9\xd3\x05\x61\xad\xa4\x20\x73\x3c\x23\xbb\x6d\x8f\xe0\x97\xf8\x70\x0a\x73\x60\x5c\xd1\x39\x99\xa2\x4e\xd2\x90\xc7\x61\xf9\xd2\x19\x31\x1b\xcf\x56\x51\x9c\xba\xc2\x22\x63\x31\x1f\x31\x9e\x87\xe2\x92\xe3\xf3\x0f\x9d\xde\x19\xa6\x3b\x60\x9f\x82\x7b\xbb\x5a\x7c\x4b\xe4\x11\x0b\x36\x5d\xf6\xb0\x0f\x89\xed\x99\x47\xde\x17\x60\xcf\x99\xf6\xa0\x5f\x1e\x9f\x7f\x78\xfa\xdf\x67\xdd\xaf\xb0\xce\x7e\x87\x4f\xb3\xa0\xd3\x87\x14\xe1\xdb\x9e\x6c\x76\xd4\xbe\x47\x9b\xc6\xfc\xe3\x3d\x0d\xca\x86\xcb\xee\x6d\x58\x55\x23\x41\x68\xb6\xd1\xab\x6d\xfc\x97\x4e\xa6\x30\x13\xe6\x93\xa6\x03\x35\x3a\x2d\x42\xd7\xc4\xfd\x82\xf0\x85\x8b\x5b\x48\xd2\x95\x73\xa6\x75\xec\x6b\x84\x15\x04\x2c\x23\xd0\x3c\x76\x98\xaa\xe9\xe8\x9d\x0d\x2f\x3a\xa7\xa7\xdd\x63\xd2\x3f\xbd\x3c\xe9\x9d\x91\xa3\xf3\x0f\x1f\xcc\xee\x12\x52\x89\xf6\xfd\x5e\x77\x70\xd1\xc5\x4f\x5a\xbd\xb3\xd6\x9b\xee\xdb\xee\xbb\x50\x13\xd1\x20\x86\x90\xba\xa8\x43\x11\x08\xe3\xc5\x4f\xce\x8e\xba\xd7\x1f\xba\x1f\xce\x07\x3f\xd4\x01\x3e\xfb\x34\xec\x77\x7b\x47\xef\xba\x83\x00\xa8\x29\x17\x12\xca\x75\x22\x43\x41\xec\xc5\x32\x90\x84\x99\x0f\x6b\xda\x2c\xf6\x38\xf9\x9e\xf1\x48\xdc\x29\x72\xe4\xaa\x4d\x9f\x32\x6e\xdb\x8a\x28\xc6\xa7\x31\xb4\xcc\xd9\x0c\xa2\x43\x02\x6a\x4c\x13\x88\x30\xbb\xe9\x35\x39\xf8\x7c\x75\x75\xf5\xe2\x96\xc6\x2c\x32\x7f\xbc\x36\xff\xf9\x59\x09\x6e\xfe\x37\x58\x2a\xa4\xe7\x2a\x0b\x5b\x8c\x2d\x57\x8a\x1a\xdb\xef\xda\xa4\x29\x23\xee\x5d\xc4\xf3\xe0\x0e\x49\x29\xc7\x15\x07\x8c\x4f\x28\x3e\xe8\x70\x5f\x5d\x55\xf9\x77\xb2\x3e\x8b\x2b\xc9\x5a\xc5\x83\xbe\xb8\x03\x39\x9c\x41\x1c\x23\x07\x22\x91\x8e\x82\x1c\xb8\x7a\x51\x87\x2b\x68\xaf\x54\x63\xab\x1f\x7d\x24\x92\x04\x62\xbd\x72\xf4\x2b\x49\x0a\x8c\xdf\x1a\x2e\x59\xe9\x4c\x57\x94\xd7\x5b\x32\xf5\x8d\xf7\x6d\xb1\x4c\xfb\x89\xf9\xc2\x77\xe2\x07\xc6\x47\xf0\xc0\x60\x16\x16\xbd\xb1\x90\x12\xc6\x9a\x5c\x2a\x3a\x0d\xea\x14\x1a\xab\xf1\x0c\x48\xde\xa8\xb3\x11\xb4\x36\xe9\xf0\xbc\x9a\x15\x53\x64\xce\x7c\x13\x34\xcc\xd5\x71\x2f\xc7\xf7\x04\xf8\x38\x16\x0a\xa2\xf6\x15\x0f\x77\x4c\x59\x22\x02\x2b\x4f\x18\xe9\xc5\x5a\x3e\x79\x25\x2a\xb4\xb1\x40\x95\x1a\xb5\xdd\x18\x5c\x37\xf8\xa2\xcd\x38\x13\x4a\x61\x32\x6c\xe8\x18\xbf\x34\x96\xa3\xac\x10\x3c\x07\x32\x89\xe9\x54\x91\x97\xf0\xcb\x18\x12\x4d\x5a\x93\xaf\xc8\x98\x72\x33\xa6\x91\xeb\x09\x0b\x11\xb9\x33\x82\xe1\x9a\xef\x93\xb9\xef\x2a\x84\x41\xed\x36\xce\xa7\xac\x4a\x82\xb9\x64\x15\xe3\x2e\x2e\x5a\xee\x68\xa1\xe9\xd3\x3f\x40\x22\x2d\xae\xd3\xa9\x1b\xfa\x08\xd8\x42\x43\x7f\xd7\x69\xd7\xef\x54\x68\x4c\x1e\xba\x32\x78\xe6\xc7\x39\xcc\x24\x48\xb0\xa1\xf1\xc6\x40\xb5\x66\x69\x59\xab\x99\x85\x62\x9f\x97\x81\xdb\xa2\x50\x5a\xd2\x69\x66\xa8\x06\x8e\x46\x4b\x2c\x5e\x7d\x32\xb1\x67\x11\x2e\x38\x5c\xbd\xb8\xba\xe2\x57\x6b\x49\x4b\x25\x78\x55\x80\x6d\xe4\xc6\x43\x27\x0a\x18\x77\x28\x9a\x51\x3f\xf0\x05\xd9\x0e\x68\x92\xb4\x70\x0b\x07\x7e\x9b\xff\x81\x41\xaf\x07\xe6\x7c\xea\xd7\x84\x5a\x57\xdc\xb3\xb2\x69\x2b\x50\x14\xea\xb2\xc1\x1a\x22\x5e\x33\x82\xbd\xd1\xbd\x0b\x6a\xb3\xce\x5c\x3e\x4b\x67\x57\xd4\x56\x01\xde\x96\xda\x4e\xbf\x4f\x86\xdd\xc1\xc7\xde\x51\xf7\xda\x5b\x27\xbb\x21\xb7\x1a\xf2\x0e\xe8\xbd\x36\x87\x72\xbc\x09\x75\x66\xf0\xae\xc8\xb5\x80\xd3\x02\xe0\x9d\x52\xbb\xbc\xe0\x77\x4f\x78\x05\x8e\x9d\x8e\x61\x6f\xa2\x92\x0f\x61\x9f\x32\x93\x13\xbb\x1d\x9d\x45\x92\x76\x41\xcd\xf6\x9c\x2b\x52\xb4\x09\x8f\xde\x5c\xf6\x4e\x8f\xfb\x9d\xa3\xf7\x08\xee\x90\x9c\x75\xbf\xbf\x2e\x3f\xdb\xcd\x54\x37\xc1\xb3\xed\x7c\xfb\xd5\xbb\x37\x79\x75\x08\xf6\x23\xad\x05\xa5\xc6\xb7\x17\x90\x0a\x4d\xb6\x09\x51\xa7\x9d\x37\xdd\xd3\x43\xd2\x1f\x9c\x7f\xec\x1d\x77\x07\xc8\xdb\x8b\xf3\xf7\xdd\x1d\x29\xdf\x45\xf0\x69\x0e\x7e\x5b\x76\x2e\x51\xbe\x0f\x7a\xb7\xa6\xf2\x7c\x70\x52\xda\xd1\xb6\xa6\xd0\x00\xdc\xe5\x4e\xb6\x48\xe0\x2e\xb8\xb8\x07\x1a\x9d\x56\xf9\xb7\xcb\xf3\x8b\xce\xce\x88\xcc\xf7\x26\x07\x77\x5b\x42\x07\xdd\xfe\x79\xbe\xa7\x5e\x0e\x4e\x77\x43\x6a\x0e\x36\xf5\x60\xb7\xa5\x74\xd8\x3d\xba\x1c\xf4\x2e\x7e\xb8\x3e\x19\x9c\x5f\xf6\x91\xdc\xf3\xc1\xc9\xa1\xbb\x40\xa2\x31\x19\xf6\x3b\xbb\xd2\xaa\x0b\xb8\x52\x8b\x8b\x28\x71\xc7\x60\x09\xe1\x1e\x06\xd6\xef\x5c\xbc\xbb\xbe\x38\xbf\xfe\xcb\xf0\xfc\xec\x7a\x70\x79\xda\x1d\x5e\xbf\xed\x9d\xee\x6f\x70\x41\x7c\xbb\x1d\xdb\x61\xb6\x76\xf7\x36\x57\x87\xd9\x52\xde\xd9\xec\xd8\x5d\xf5\xcd\xe0\xfc\x7d\x77\x60\xad\x84\xf2\xb3\x5d\x0d\x63\x35\x9e\x5d\x8f\xe5\x72\xd8\x1d\x58\x2d\xd5\xef\x0c\x87\xdf\x9f\x0f\x8e\x0f\x77\xa7\x02\x1a\x23\xdb\xd5\xa8\x32\xbb\xc7\x3f\x78\xdf\xfd\x61\xb7\x43\xa9\xc6\xb0\x73\xfa\xcd\x02\x29\x4e\xff\x6e\x2d\xc6\x25\xa8\x69\x10\xdd\x5e\x46\xb6\xff\xd9\x49\x17\xb1\x6c\x3d\x0e\xab\x4a\x76\x6c\x73\x58\xa8\xbb\xb4\x3a\x72\x3a\x77\x68\x75\xe4\x64\xee\xc8\xe4\x40\x80\xad\xfc\x1c\x8f\xff\x44\xd8\xad\xdd\x1d\xee\x0a\x48\xd2\x4a\x24\x3b\x19\x85\x35\x71\x70\xf1\xe4\xff\xdc\x1d\xfd\xd5\xe0\x77\x48\xf9\x2e\xce\xfd\x01\xd2\xd6\xb9\x41\xc8\x48\xcb\xf7\x08\x34\xed\x06\xe7\xbb\xb2\x79\x2a\x01\x6f\xcb\xc8\x05\xa0\xc8\x88\x3d\x12\x5d\x82\xbf\x2d\xed\xbb\x38\xd0\x17\xef\x96\x36\x9a\x6e\x9a\x24\xd7\x2e\xb8\x00\x43\x43\xf0\x1f\xbb\xe1\x5d\x00\xf4\xd6\x6c\xdb\xde\xc1\xe8\xd1\x6f\xc4\xb1\xac\x4c\x92\x1b\x1c\x16\x28\x34\x5a\x34\xf1\xcd\x71\x77\xc2\xbd\x4a\x34\x69\x09\xcd\xb6\x9c\x9c\x09\xa5\x91\x72\xd7\xbc\x7e\x27\x74\x23\xd0\xb4\x00\x74\x5b\x2a\x45\x8c\xad\x39\x6c\x1c\x9c\xa1\x96\xc3\x5d\xe1\xc1\x2e\x68\xc6\xce\x2a\x78\x7d\x8e\x84\x03\x27\x1c\x52\xe0\x2e\xee\xcd\x57\xc4\xdb\xc9\x48\x84\x9c\x12\x3b\xa1\x66\x18\xfe\x5f\xcf\x35\x8c\x52\xe4\xe8\xf6\xe3\x91\xd3\x7d\xe9\x8e\x00\xe8\x6d\x29\x76\x49\x1e\x87\xa5\x04\x9d\xc3\xe5\x92\x21\xbb\xb1\x1f\x3c\xb2\x42\xca\xce\xe1\x62\xad\x90\xed\x87\x84\xd1\xf4\x8b\x9c\xdf\x4a\x86\xbc\xbc\x28\x1f\xb5\xbe\xad\xbf\xf8\xf6\x1b\x7f\xb2\x31\x7f\x66\x7e\x52\xf3\xf7\x69\xe7\x8c\xdc\x7e\x9b\xff\xfc\xad\x7d\xb4\x93\x09\xd8\x00\xed\xb6\xb3\xf1\xf9\x73\xdb\x7f\xaf\xc2\xfd\xa4\x2a\xa8\x2e\x7f\x58\x8a\xa4\x6c\x48\xc3\xc5\x0c\x30\xa2\x83\x8c\x5d\x30\x48\xb1\x09\x9b\xd7\x97\xf6\xb5\x4c\x7b\x8e\x29\x27\x23\x20\x2a\x75\x61\x21\xe5\x6b\x06\x22\xa4\x8d\x5e\xcc\xa3\x41\xfe\x3f\xee\xde\xaf\x39\x6e\x1c\xd9\x13\x7d\xbf\x9f\x02\x3b\x7b\x23\xec\x89\x55\x55\xdb\x33\x73\x36\x6e\x78\x1e\x26\xca\x52\xd9\xd6\x58\x96\x74\xf4\xc7\x7d\xa6\xdb\x1d\x3e\xa8\x22\xaa\x0a\x23\x12\xe4\x01\x40\xa9\x25\xad\xdf\xce\x67\xb8\x4f\x37\x62\x5e\xfa\x33\xcc\x53\xbf\xe9\x8b\xdd\x40\x26\x00\x92\x55\x4c\x16\x59\x92\xdd\x67\x77\x36\xf6\xb4\x55\x24\x12\x09\x10\x7f\x12\x89\xcc\xdf\x6f\x7c\x9b\xa5\x9d\x11\x21\xcd\x38\x0c\x8f\x65\x9c\x31\x7e\x65\x4b\x04\xde\xfd\x28\x34\x04\x26\x29\x69\xd6\xc0\x79\xc7\xec\xb5\xb4\x56\x34\x20\x7a\x85\xb2\x37\x02\x42\x66\xa4\x12\x80\x87\x38\xc2\xd1\x99\xfb\x1f\x2b\x38\xf2\xbb\x12\x68\x9b\x17\x0f\xbf\x2e\xfb\x06\x01\x91\x6c\x2a\x1b\x1f\x88\x8a\xe0\x5b\x93\x17\x03\xbb\x21\xee\x36\xf6\xe3\xbf\xd7\xbe\x2e\x66\x54\xfc\x3b\xf0\xdf\x78\x50\xe0\x6b\x99\x08\x2a\xf8\x73\x5b\xbd\x01\x89\x3e\xe3\xf6\x55\xc5\x59\xf8\xd7\xf3\x93\xe3\x37\x32\x05\xf6\xc3\x4f\xf6\x93\xfd\xa4\x3e\xf2\x54\x26\xfe\x6d\x84\x59\xe6\x59\x01\x5c\xd2\x3f\x7e\x52\x8c\xdd\xbb\xff\xc3\x30\xb4\xde\xe6\xf3\x3c\xfd\xf4\xbb\x57\xec\xd3\xef\xec\xbc\xf8\xf4\xbb\xbd\xf0\x2c\x01\x0a\x5b\x50\x0d\x1f\xbf\x7c\x31\xfe\xc3\x9f\xfe\x34\x7e\x39\x7e\xf9\xff\xd4\x5e\x2b\x72\x6d\x0d\xbe\xf0\xc7\x3f\xbe\xf8\x9f\x9f\x7e\xe7\x1e\x7c\xf9\xa4\x7e\xea\xee\x6d\x03\x31\x6e\xa3\x37\xbe\x2d\x07\xc8\x52\xdd\xda\x98\xd7\x42\x9a\x42\x06\xf4\xa5\xe5\xc3\xaf\xa9\x95\x4b\x8c\x10\x44\xae\xf0\x6f\xdb\xac\x2d\x9f\xa8\xc4\xa1\xf1\xb1\x81\x4e\xd7\x18\x0d\x31\x94\xe8\xfe\x7e\x1c\x98\x94\x7c\x6c\xf9\x6e\xa3\xc2\x57\xc9\x8b\x62\x14\xf6\xb4\x91\x54\x89\xf8\xb9\x16\x0a\xa6\xc4\x92\x5b\x79\x3d\x8c\xf9\x7e\xa3\x0a\xa9\x20\x98\xd0\xa3\xdf\x55\x51\xf5\x03\xa5\x22\x34\xf4\xfe\xd1\xa1\x47\x7a\x22\x63\x23\x6b\x30\xd0\xd7\xb9\x72\x25\x46\x1e\xdf\xa9\x53\x74\x8d\xbc\xfa\xfe\x7e\x7c\x0a\xff\x42\x6e\x7b\x3a\xff\x66\xa3\xb2\x40\x2a\xd0\x22\x81\xae\x5b\xcd\xa9\xbe\xc0\xc7\x77\xdd\x65\xd9\x07\x91\xe5\xfa\xb6\x5b\x84\xf1\xec\xb9\x5b\x44\x85\x51\xc6\x99\xca\xd5\x28\x7c\xff\x40\x71\xd6\x5d\x05\x86\xa3\x01\xfa\x38\x1e\x40\xae\xeb\xd4\x98\x10\x90\xd6\x5d\xfb\xc0\xf4\xa2\x43\x3f\xae\x20\xee\xb5\x8d\xb3\x9d\x90\x76\xa9\x9a\xcb\x41\xc5\xd5\x1e\xb8\xb0\xbb\xeb\x3b\xf3\x6c\x2d\xee\xbf\xe4\xf4\xab\x55\x12\x69\x57\x7c\x81\x4e\xe1\xe7\xe7\x47\x6c\x1f\x00\x90\xfd\x2a\x70\x7a\xe8\x16\xb5\x8b\xc3\xd3\x57\xec\xd2\x08\xf6\x6c\xbe\x60\xbc\x90\x6c\x34\x32\x57\xb2\x18\x19\x93\x8e\xa0\x20\x54\x0c\x5c\x9a\xf3\x5c\x59\xa9\x4a\xe1\xf7\x65\xe5\x4c\x56\x31\x2f\xb5\xe8\xc3\x2d\x39\x4c\x39\xa0\xd1\x04\x42\x96\x0b\x59\x6c\x63\x86\xae\x7a\xc4\x38\x41\xa3\x1f\x84\xb6\x72\x21\xaf\xb8\x07\x7b\xa6\xe5\x75\xea\xe4\x0c\x15\xb7\xee\xbe\xf2\x99\x8b\xa7\xb9\xb6\x4e\xc8\xc4\xff\x5e\x1f\xd2\x40\x2f\xb7\x55\x3d\x38\xca\x8d\x4e\xdb\x65\xc2\xef\xb5\x91\x7e\x5c\x66\x99\xd0\x9d\x83\x3b\xea\x19\x99\x35\x91\xe2\xbf\xc4\x80\xd3\xed\x03\x28\x52\x45\x9a\xab\x46\xc1\xee\xfa\x80\x6d\x75\xb7\x69\x51\xd1\xa6\xb2\xa1\x93\xa3\x82\xb5\x20\xb9\x62\xea\x03\x61\xd2\x8e\x5c\x41\xd1\xbe\x84\x5a\x1a\x1d\x18\xed\x23\x18\x96\xa3\x39\x44\x37\x8f\xd9\x69\x2a\xb8\x11\xe1\x21\xe3\xac\xb6\x5a\xe4\xb3\xbf\xbb\x0d\x2a\xd7\xe8\x33\xb1\x79\xc8\xa4\x73\x93\x87\x4b\xa0\xbe\x6b\x29\x40\x6d\x03\xb5\xae\x7b\xdf\xd0\x0c\x73\xa4\xb8\x61\x6f\x52\xbe\x74\xaa\x35\x2d\x50\xb6\x14\x60\xc9\xda\x56\xbb\x56\x2a\x56\x75\x14\xac\x54\x27\xb3\xbf\x8b\x2b\x1b\x0d\xdb\xc0\x3d\x71\x57\xd6\x13\xef\x62\x64\x73\x16\x8b\xab\x46\xf1\xa6\x0e\xe4\xc6\x84\xad\x8f\x99\x84\x90\x8d\xad\x45\x91\xa3\x3d\xf2\x8c\x8d\xc2\x6e\x09\xaf\x24\xb9\x40\x63\x15\xc8\x39\xb6\xf7\x13\x26\x04\xba\x2d\x73\x53\xae\xdf\x44\x7d\xca\xa1\x91\x2a\xf1\xc7\x80\x48\xab\xb1\x45\x67\x69\xae\x10\x0e\x00\x26\xf0\x81\x34\x57\x1e\x5c\x60\x18\x27\x55\x4d\xdd\x76\x3c\x46\xf8\xbc\xa7\x29\xb7\x56\xf4\xad\xe9\x91\x8a\x7f\x55\x5d\xb7\xa9\xe7\xe6\x15\x39\xab\xbb\x8b\xa2\xed\x37\x02\xe3\x6f\x04\x99\x92\x05\xd7\x3c\x03\x4d\x56\x1b\xd9\x92\xdb\x57\xe8\x53\x57\x1a\xb2\xc0\x6a\xc0\xca\x35\xf1\x84\xe0\x4e\x1d\xa3\x6b\x67\x9e\x97\x0a\xd7\xfe\x68\x99\xec\xbb\x9f\x5c\x4f\x1d\x36\x5e\xaa\x6d\x2e\xd1\xe4\xe9\xb6\x95\xea\x8d\xf0\x76\xd3\xdd\xc3\x2f\x91\x3c\x7a\xb3\xc2\x83\x8d\x17\xb7\xd8\x59\x1c\xb3\xfa\x7a\xb6\x35\x03\xdb\x91\x01\x97\x36\x68\x80\xc6\xe4\x91\xfb\x7b\xd8\xb0\x7b\x2d\x96\x5a\xa8\xbb\x38\xd6\xd6\x0c\xcf\x4e\xe1\xbd\x74\x6d\x74\x50\xe3\x5b\x3c\xe2\x2b\x04\x35\x37\x84\x1f\xc8\xf8\xec\x11\x86\xed\xd0\x16\xa4\xc2\x18\x66\x57\x5c\xd5\xdf\xf4\x63\xe1\x09\xdb\x72\x95\xe2\x86\xe1\x54\x0f\x78\x00\xeb\xb5\x75\xb6\x08\xbc\x04\xdb\xb2\xcc\xeb\x1b\x7d\x3c\x78\x7b\x40\xa2\x6e\xf1\xd1\x97\xc4\x2a\xea\x6d\x96\x71\x8a\x31\xa4\x5e\xd1\x87\xaa\x68\x48\xa1\x42\xc2\x62\xae\x92\x2b\xae\xad\x88\xfc\xc0\x5b\x54\x68\x99\x18\x3b\xcc\x8a\x73\x3f\xfc\x67\x71\x76\xd0\xc2\x06\xeb\xb3\xdb\x44\xa5\x55\x1a\x3e\x37\x09\xad\x1e\xb1\xd3\x76\x6a\xb7\xe3\xbe\x0a\xe7\x00\x24\xda\x2c\xad\x3f\x8a\x95\xd6\x23\x97\xf4\xd9\x6d\x22\x09\xce\x59\x9b\x80\xce\xba\xad\xcc\x04\x50\x2b\xc5\xfd\xee\x02\x7f\x19\xf4\xd1\x36\x76\x3c\x2f\x96\x14\xd8\xa9\x53\xc5\x5f\xf0\x6c\x83\x1d\xfb\x19\xc2\xc6\x02\x57\xf8\x47\x9e\xd6\x7b\xbc\x97\x9e\x15\x7b\xcf\x50\xd9\x94\xca\xd2\xe2\xa5\x5e\xc6\x15\x5f\x0a\x04\x4f\xd9\x83\x5f\x04\x52\x56\x2e\x3c\xdf\x1c\x62\xd8\x78\x52\x38\x80\x89\x21\x6f\x05\x22\x17\xb5\x90\x2a\xe5\x89\xbf\x0f\xbb\x76\x4b\x43\xbc\x1d\x7b\x13\xc5\xba\xd6\xa0\xbd\x1d\x59\xdf\x44\x44\x61\x8a\x74\x78\xa2\xe3\x32\x80\x68\x84\x11\xa9\x3b\x87\xb8\x07\xf3\x95\x93\x0d\xb7\x4d\xbe\x75\x46\x58\x66\x0a\x81\x1c\x59\x30\xc3\xcc\xae\xed\xd9\x63\xa7\xe9\xc3\x2f\x4a\x30\x5e\x9a\x1b\xb0\x22\xf0\x85\x87\x5f\x54\x22\x34\xfe\xdb\x27\xdd\x2a\xac\x89\xb9\x35\x34\x15\x4b\xba\x51\x7f\xcd\x67\xec\xf9\xfd\xfd\xf8\xaf\xf9\xec\xed\xe5\xe1\xc1\x97\x2f\xbf\x67\x0b\xe0\x82\xf4\xf3\xb5\xdb\x1b\xd0\x5b\x66\x91\xa3\x6b\x2e\xcc\xa3\x15\x37\x6c\x26\x84\x62\x5a\xf0\xf9\x4a\x24\x78\x5d\x91\xc7\xf4\xcd\x8c\xdf\x32\x63\x65\x9a\xba\xed\x54\x97\x0a\x69\xcc\x31\x0b\x79\xff\x4d\xdc\x8a\xc7\xec\x6f\x79\xa9\xdd\x2f\x58\x34\xd7\x50\x72\xc5\xaf\x05\xcb\x72\x2d\xea\x90\x7c\xc3\x50\x8c\x8e\xb8\xb1\x2c\xa6\x93\x12\x45\x8f\x04\xc0\x62\x54\xaf\xd1\xa2\xca\x22\xcd\x79\x22\x92\x61\xce\xb1\x23\x69\x2c\x40\xf1\x07\x16\x2a\xd7\x7e\x0b\x28\x40\x38\x35\xa8\x5c\xec\x34\xf5\x89\xb3\x32\x63\x3f\x48\x91\xce\xc2\x28\x2f\x17\xa9\x34\x96\x32\x2c\xab\xfa\xae\xb9\x4c\x61\x5a\xfa\xe3\xa1\xbf\x6b\xa2\xa8\xc6\xa0\xc2\x6b\x3c\x8e\xce\xb8\x16\xd1\x87\xea\x53\xfb\xc5\xce\x35\x43\xb3\x11\x4b\x43\x8a\xa4\x4e\x09\x90\x43\x96\x39\x94\x49\x92\xfa\x23\x49\x92\x56\x92\x6a\x42\x2d\xd5\xb2\x90\xd5\xe9\x03\x72\x9f\xcf\x8e\x6c\x06\x2b\xa9\xee\xca\xa5\x70\x12\x6c\x93\xdc\xa0\x77\x13\x2b\xfe\xad\x2e\x35\x6b\x5c\xf7\x7d\x05\xe7\x7a\xd9\x29\x72\x9d\x24\xa2\xa7\x58\x8f\xd7\xee\x87\xdf\x1c\x11\xa7\x3c\x82\x97\x87\xa3\x09\x3f\xd6\x41\x6a\xbb\x34\x09\x2c\xdc\xf5\x0b\xc3\xb0\x12\x87\xfe\x76\xff\xa9\x9e\x36\x23\x1a\x7a\x6a\xbe\x86\x81\xde\xa5\x51\x1b\xd6\x79\xef\x5a\x9a\x51\x05\x83\x67\x6a\x33\x54\x00\xfb\x65\x97\x59\x5b\xa1\x15\x72\x40\x25\xeb\x1c\x5e\x1e\x7d\xd0\x63\x6a\x6c\xc4\x8c\xf4\xad\x12\x03\x07\x9e\x73\x1f\x9f\x20\x8d\x3b\xbf\x69\x31\x72\x83\x1c\x31\x05\x98\xb9\x35\x56\x64\x7b\x1e\x17\x0b\xbc\x72\x2a\xac\xf5\x6a\x19\x1f\xdb\x15\xb7\x70\x51\xad\x4b\xb8\xc7\x26\xc1\x8b\xb0\xcf\x6c\x73\x6a\xb0\xe7\xee\x14\x74\xee\x95\xc0\x80\xb9\xeb\x5c\x27\x62\x21\x95\x14\xda\x0d\x60\x70\xac\x61\x6d\xee\xb1\x99\xaf\x52\x29\x1e\xfe\x91\xba\x2e\x7e\x2d\xac\x96\x62\x66\x82\x32\x09\x37\xb8\x80\xf2\x8a\xe2\xf9\x8a\x2b\x0a\x9f\x29\xf6\x87\xfb\xec\xb8\x1c\xf9\x85\xb3\xef\xaa\xb4\xb6\xae\x84\xe5\x73\x97\xf5\x25\x22\x0e\x79\x5b\xaa\x1a\x19\xf9\x62\xd7\x99\x0a\xd6\x13\x6f\x0c\x9c\x27\x98\x9f\x11\x42\x0f\xd0\x45\xb6\x0d\x58\x6f\x1c\xc9\xb6\x10\xa7\x3e\x15\xc6\x9d\x25\x5f\x2c\x84\xb3\x5e\x63\xd5\x35\x18\x5c\x42\x85\x8f\xd5\xa6\x81\x88\x4b\xb9\x85\x3d\x0d\x60\xd3\x6a\x40\xb6\xc3\x14\xc1\x35\x34\xd0\xc0\x7b\xf0\xd3\x1e\x1a\x50\x24\x2e\x75\x32\x2a\xa3\x85\x41\xb9\x43\xbb\x07\x6e\x7c\x9f\x48\x99\x2a\xb2\xa2\x97\x12\x35\xee\xc8\xda\x02\x4a\x8f\x8c\x3a\x33\xa4\x1b\x14\x6e\xd5\xcc\x87\x0e\x8c\xc8\x28\xc5\x37\x96\x72\xa2\xda\x75\x5e\x28\xf0\x4d\xac\x07\x7c\xf5\xa8\xb9\x41\xa1\x43\xd4\xb5\xc6\x8f\xd3\x43\xea\x3a\xf3\x87\xef\x4c\x77\x12\xc9\x17\x1b\x4f\xe1\x44\xed\x2d\xec\xda\xf5\x16\xa5\x4e\xcb\x3e\xe9\xfb\xfe\x83\x70\x47\x1f\xa0\xcd\xda\x7c\x07\xd7\x8f\x2b\xf0\xba\xc5\x9b\xb0\x47\xb6\xc7\x13\xc4\xbb\x76\x79\xdc\xd3\xdd\x95\xf7\x6c\xf3\x19\xb4\x01\x39\x17\x07\x6b\xd9\xc0\xb2\x37\x88\x12\xda\xc1\xcd\x0b\xd7\x44\xb5\xa9\xb2\x06\x57\x3f\xa8\xce\x0a\x86\x9e\x6a\xf9\x16\x8c\xf9\x01\x95\x79\x48\xf9\xee\x8a\x3c\x60\x7c\x2f\xc1\x08\x5d\xbb\x8d\x50\x98\x16\xe0\x06\x81\x8f\xe1\x10\x09\xc3\x88\x0d\xd3\x01\xb7\x1a\x4d\x06\x19\x03\x3f\xdc\x2c\x0c\x47\x01\x32\xcc\xe3\x28\x9f\xf3\x34\xba\xa1\x6e\xb8\x4e\xc2\xc1\x04\x47\x9d\x3b\xc4\x4a\x03\x17\x2c\x21\xe0\x0e\xcc\x0f\x91\xe0\x61\x14\x3c\xc2\xb9\x3b\xb6\x12\x9a\x7d\x2f\xa4\x15\x3a\x15\xd2\xba\x2f\x63\x0a\x71\x87\x57\xeb\xf1\x12\x12\xa8\xee\x9d\x75\x90\x6b\x3b\x66\x07\x52\x18\xe1\x6f\x25\x9d\x6d\x02\x90\x49\x0b\x3e\x5f\xb1\x68\xf5\x74\x63\x1f\x1d\xe5\xf3\x2b\x98\x4a\xf1\x44\xc2\x6c\xee\xac\xb7\x6b\x67\x21\x94\x45\xc2\x2d\x69\xb4\x9c\x17\xc2\x19\x12\x70\xc9\xe9\x8c\xa5\x78\x5c\xd9\x63\x65\xc6\x26\x57\xb6\xe4\xa9\x34\x38\xc8\x84\x62\x77\xa5\x3b\x77\x65\x42\x92\xf7\x7e\x47\x39\x42\xea\x32\x32\x28\x28\x5a\x00\x5c\x65\x22\xdd\x2e\x28\x27\xb1\xca\x2a\x49\xb3\x2d\x92\x96\x22\x61\x42\xeb\x5c\x93\x61\x2d\xa7\x3a\xb7\xf9\x55\xee\x87\x11\x7b\x23\xe0\x1a\x88\x16\x08\x9e\x8c\xd2\x76\xc1\x01\xa3\x4e\x1d\xe3\x30\xbf\x02\x00\xe2\x02\xbc\x73\xce\xc6\xc6\x00\xa5\x67\x9b\xb4\x79\xcd\x6b\x59\x2a\xf4\xa7\x71\xde\x5d\xbf\xca\x55\x6e\x44\xad\x57\x64\xca\x39\x89\xe7\xf6\x61\x72\x7c\xf8\x66\x7a\x7e\xf1\xf9\x74\x72\xf1\x8e\x0a\x1f\xf5\xef\x9c\xbe\x99\x1c\x10\x52\xba\xb0\x12\xdf\x4d\x2e\x4f\x2f\xba\x91\x12\x3f\xf0\x2b\xc1\x38\x8c\x84\x51\x8c\x2d\xd8\x0c\x00\x8f\x56\x8f\xcd\xd9\xfe\x1b\x38\x77\xd0\x4b\xb6\x80\x08\x8a\x38\x7a\x88\x38\x80\x0d\x53\x00\xe6\xee\xfe\x9b\x11\x42\x99\x45\xd3\x89\x65\xbc\xa3\x13\x9d\xfa\x30\x37\x61\x21\x7d\x66\x1a\xa1\xec\x86\xe5\x2a\xbd\x65\xd7\xd2\x48\xa7\xfb\x8d\xb4\xab\x86\xc9\xe4\x9a\xda\x71\xea\x8c\x81\xea\xe0\x4e\x4c\x84\xf1\xe4\x3c\x86\xa9\x12\x0c\xec\xfa\xe9\xd3\xc8\xf9\xca\x6e\x57\xb7\x86\x22\xc7\xe6\x5a\x70\xd0\xa1\x84\xcd\x70\x51\xa6\xe9\x2d\xe3\x96\xba\x75\x6e\x8b\x25\x16\x7a\x91\xa7\x4b\xd4\x40\x68\xec\x58\x40\x87\xa3\xea\x2f\x18\x67\x17\xfb\xdd\xb8\xa4\x17\xfb\x01\x82\xf4\xae\xcc\x75\xa2\xe8\xd6\x14\x6e\x33\xda\x8a\x73\x5a\xc3\x34\x1d\x28\xf0\xd5\x27\x0c\x37\x65\x6c\xff\x0d\x26\xf4\x65\xbc\x18\xe1\xcd\x46\x44\xf7\xf1\xb9\xaa\x3f\x8e\x46\xab\x80\xc7\x1a\xd0\xa9\x7f\x72\xbf\x42\xd8\x8b\x9b\x64\x3f\x21\x46\x1c\x63\x6c\xad\x1f\x86\x54\xf3\x7c\x34\x82\xbd\xed\xf4\xe4\xec\x82\xfd\x2f\x36\x1a\x69\xae\x92\x3c\x83\x1f\x7f\x8f\x15\x4c\xff\x6d\xf2\xe1\xf4\x68\x7a\xee\xc5\x6e\xca\xcc\x6e\x47\xbc\x28\x42\xd0\xf1\x78\x9e\x67\xac\xf3\x7f\xff\xbd\xfe\xea\x00\xa1\xb5\x1e\xc9\x6e\x21\x13\xa9\x21\x14\x7f\x1b\x3f\x95\x6c\xdf\xd3\x8b\x3c\x6f\x95\xfd\xdd\x22\xcf\x07\xc9\x87\x6e\xfe\x97\x17\x2f\x5e\x6c\xe9\x90\x57\xee\x9d\x41\xe6\x90\xfb\xfc\x78\xfc\xcf\xc3\x61\xca\x2d\x6c\xd6\xd9\x25\xb4\x69\x75\x96\xe7\x36\xc1\x93\x14\x4b\x9c\x51\x81\x79\x50\xdb\x86\xf4\xcf\xec\x86\x4b\x0b\x3e\xfd\x48\x3c\x10\x17\x56\x63\xb9\xb6\x65\xb1\xe7\x56\x93\x4c\xaa\x92\xb6\x24\x3e\xf0\x9f\x65\xc6\x53\xc1\xbe\xe7\xda\x8a\x3b\x21\xad\x3f\x58\x83\x3b\x07\x52\x55\x30\x98\x2f\x5c\x7e\x4b\xc5\x3e\x80\xc4\xde\x9a\x55\xf6\x8d\x3f\x34\x3c\x42\x2d\x6e\xc2\x61\x01\x17\xce\xca\x4d\x3b\x4c\x2f\x9b\x33\x61\x2c\x9f\xa5\xd2\xac\x18\x67\xf3\x5c\x29\x31\x77\x95\xd7\x1d\x65\x30\x0a\xb5\x30\x79\x5a\x86\x47\xee\x38\x94\xd3\x9e\x78\xb2\x6a\x99\x95\x19\xe3\x19\x04\xbc\xe4\x8b\x70\xe7\x8b\x26\x77\x8c\x69\xac\xa2\x67\xb8\xc2\x6b\x14\x44\x35\x7f\xf9\xe2\x0f\x7f\xfa\xb0\xc7\x5e\xbe\xdd\x63\x2f\x5f\xbc\xa5\x1c\x73\xbe\xcb\x6e\xe2\xe5\xa1\xfb\x86\xd9\xc3\x3f\x97\x29\x02\xd4\x86\x5b\x61\xef\x70\xac\x22\x22\xc3\x46\x89\x78\xe8\xeb\x95\x7d\x8b\x16\x8d\xd9\xe8\xa5\x33\x9c\xb4\x30\x42\x59\xc8\x8e\x29\xf1\x12\x4d\x24\xbe\x0e\x3a\x13\xe6\x6b\xb4\x1a\x14\x32\x56\xac\x6c\xcd\xc5\x50\x2a\x7f\xa1\x6e\x05\x1e\xb7\x09\x0b\xf1\x37\xe8\x1c\xf6\xfc\x40\x2c\x78\x99\xda\x57\xd5\xb3\x6f\x3b\x4e\x7a\xf6\x18\x7b\x7e\x6e\xb9\x4a\xb8\x4e\x5e\xd5\x9e\x6e\x19\x65\x18\x74\xec\x3a\xd2\x3b\x56\xc1\x59\x9d\xf1\x5b\x77\xc8\x0b\xd6\x0e\x84\x6a\xbb\x3e\xd2\xd7\x02\xc3\x15\xb6\xae\x2d\x13\x75\xc7\x57\x69\x8d\xc0\x76\x0f\xc0\xf8\x33\x69\xbd\x20\x38\x54\xe0\x81\xcf\x54\x76\x90\xa7\x5e\xf0\x10\xbb\x5f\x47\xf5\xda\x07\x7d\xb1\xe5\x43\x3e\x51\x3b\xaa\x2f\xe3\x46\x06\x54\xdb\xd9\x32\x58\x46\x9f\x57\x2b\xe2\xef\x61\xad\xdf\x3f\x3a\x74\x6b\x2b\x2c\xb4\x6b\x6e\x21\xdc\x94\xf6\x58\x6e\x57\x42\xfb\x38\x6a\x66\x64\x22\xc2\xbd\xb4\x81\x7e\x71\x25\xa8\x44\x8c\xd8\xe2\x1f\x84\xb4\x09\x2f\x85\x06\x0d\xce\xc5\x15\xa4\xb6\xfd\x1e\xdb\xed\xfe\xbf\xd3\xa3\x65\x1f\x0b\x63\x99\x61\xf8\x12\x04\x38\x85\xf6\x73\x95\x08\x8d\xa2\x61\x06\x01\x88\xb1\x99\xaf\x34\x7a\x04\x98\x11\xd2\x0a\x65\x22\x73\x23\x10\xfb\x95\x0b\xab\x05\xbd\xe7\x74\x65\x95\x74\x15\xc1\x58\x05\xbf\x1e\xfc\xe1\x5f\xfe\xa7\x9b\x68\x61\xbe\x51\xc3\x61\x33\xea\xc7\xcf\xd4\x8d\xf2\x44\xc5\x06\x73\x8d\x7a\x44\x1e\x1c\xf3\xf9\x4a\xbb\x83\xc9\xda\xdb\xed\x82\xe5\x52\x73\x2b\x5a\x2e\xea\xe0\xbc\x9c\x2b\xd1\x24\xf2\xb3\x39\xe3\x0a\x06\x49\xf7\xf9\xa9\xba\xb0\x0b\xf8\xd4\x59\x3d\x07\x38\x84\x74\x67\xfe\xc3\x3a\x8b\x63\xd9\x85\xc1\x3f\x98\x76\xc6\x15\x18\x16\x51\x70\x3c\xfd\xfe\x73\x47\x35\xc7\xd3\xcb\xe9\x19\xbe\xd0\x5e\xfc\xf2\x43\xc4\xfe\xa1\x38\x18\x26\xc7\x3f\x4c\xde\x1d\xf9\xd7\x7e\x98\x1e\x13\x92\x78\x36\x2c\x77\xcc\x15\x00\x27\x21\xd3\x62\x29\x8d\x15\xba\x11\x0e\x40\x8e\x93\x0c\x43\x07\x8d\x2f\xa6\xfd\x4a\x54\xbb\x58\xdb\xa9\x3e\x76\xb3\x12\x1a\x4f\xe8\x55\x74\x82\xbf\xf3\x93\x86\xa5\xf9\xdc\x2d\xac\x8f\xd0\x6a\x0f\x5d\xd3\x19\x9c\xbf\xc1\xec\xac\xe2\x13\x62\x86\xda\x4c\x2c\xa4\x4a\xa8\x28\xc8\x63\xcf\x28\xb4\x94\xd7\xc2\x3b\x07\xcc\x15\x7b\xbe\x14\x4a\x68\x58\xf6\xe5\x82\xe5\x99\xb4\x1d\x5b\x35\x2d\x78\xe0\xb8\x13\x37\xec\xd4\xe3\x57\x53\x9d\x22\x4a\x61\xd8\x7b\xa1\xd4\x4d\xae\xa9\x16\x89\x1b\xb0\x89\x3b\x44\x68\x48\x6b\x27\x8a\xe7\x8d\xf4\x29\x66\xdc\x02\x0c\x09\x59\xf7\xf7\xe3\xa3\x7c\x29\xd5\x85\x2c\xbe\x7c\x79\xc6\x7c\x50\xdd\xe4\xf4\xd0\xff\xe0\x0e\x51\x78\x19\xc5\x55\x2c\x4f\x59\x84\xef\x01\xad\xe5\xf4\x70\x34\x55\x49\x51\xaa\x2b\x0b\x71\x58\x4b\x91\x8a\xa5\x1d\x87\x2b\x31\xef\x3b\xdd\xa8\x19\xb8\x99\xea\x75\x83\x43\x15\x03\xd7\xa2\x3c\x9e\x1a\xf0\xd1\x30\x5e\x9a\xbb\xd2\x07\x83\x11\xc6\xe0\x71\x0e\xb9\x66\xed\x8d\x0e\x4e\x3e\x9b\xc3\x3d\x4a\xad\x71\x4f\xd4\x36\x5f\x41\x5b\x23\x5c\xc1\xbb\x12\xc2\xd3\x3a\x34\x2f\xc0\xa5\x64\xd8\x22\xf7\x1c\x18\x10\x91\x88\x6e\xc8\x0e\x1d\x21\xfe\x09\x93\x84\x81\xb3\x0a\x53\xcf\xd7\xcb\x77\x54\xeb\x6b\xdc\x56\x85\x89\xb2\x69\x61\x21\x3d\x3c\x24\x8c\x53\x0e\x46\xc3\xf0\x3a\xb2\xce\x23\xb1\x1d\x20\xe0\x38\xaf\x45\x14\xf5\x50\xba\x76\x62\xdd\xaa\x3a\xc6\x33\x1a\x67\xa8\x09\x96\xf1\x84\x9a\x78\x28\xf9\xe1\x3f\x55\x12\x1c\xfe\xd7\xb9\x5e\x0a\x95\x67\x59\x87\xf4\x70\xdb\xbb\x5d\xe7\x78\xcf\xbb\x55\xe3\x24\x2f\x8a\x54\x68\x96\xe6\xcb\xa5\x16\x4b\x88\x09\x8c\x43\x1f\x2a\x1a\xb3\x7d\xcc\x8d\xd6\x10\xf3\x71\x2d\xdc\xbb\x86\x9a\xcb\x47\x95\x9c\xfa\x90\x5f\xa5\x16\x19\x9a\x6a\x89\x62\x06\xfc\x97\xa4\x66\x70\xab\xd2\x4e\xd1\xd8\xd9\xf6\xa9\x16\x72\xa9\xa4\x31\xe1\x62\x72\xbd\x30\x55\x21\x72\x72\xc4\xdd\x69\xcc\xda\x3e\x68\xd7\x1a\x26\xe0\x6e\xa9\xb6\xf1\x54\xe1\xf8\x0a\x86\x29\xf9\xc9\xe9\xa5\x28\xd7\x4b\x8c\x8b\x85\xd0\x87\xe0\xad\xde\x03\x96\x1d\x37\x33\x3d\xc3\xc9\xc6\x9a\xdb\x28\xd7\xa9\x73\x23\x30\xc4\xad\x19\x30\xa1\x62\x9c\x6f\x6d\xe5\x5c\x0a\x58\x39\xed\x5e\x45\x9d\x13\xd7\xad\x4a\x8f\xb8\x74\x6d\x4a\xc6\x05\x2d\x8a\xae\xad\xc5\x9d\xed\xcf\x35\xdd\xfc\x37\x48\xf2\x58\x55\x3f\xbc\xad\x62\x87\xd6\x6e\x56\xdb\xd5\x80\xa7\xd5\xfb\xdb\x29\x49\x8f\xad\xee\x69\xb0\x9b\xba\xdb\x46\xd0\xc0\x4d\x3c\xd7\xcb\x3e\x4b\xe5\x5a\x90\xe7\xd6\x05\xb3\x11\x83\xd2\x43\x7e\x33\x1e\xa5\x9f\xf8\xde\x72\xfb\x08\xf4\xb1\x2a\x42\x5d\xb3\x6b\xae\x25\x9f\x39\xeb\x00\x9c\x57\x10\x51\x6e\x04\x65\xba\xac\xaf\x5d\x18\x8e\xa2\xd8\x65\xb6\x14\xb3\x52\x2d\x4d\x10\xa7\x6a\x36\xcd\x56\x3d\xd6\xa3\x53\xfa\xd7\xdf\x16\x26\xb3\xbd\xde\x7e\x31\xad\xef\x89\x1a\x3a\xc4\x36\xa2\x3b\x7a\x7c\xb0\xb5\x48\x8f\xad\x1f\x2e\xd4\x70\x25\x6e\x1b\xf4\xf8\xd1\x09\x59\x71\xd9\x87\x2c\xb6\xad\xbb\x63\x24\x58\x5f\x0b\xc8\x5a\xbb\x80\x25\x25\xf7\xd1\xb5\x2a\xfc\x5e\xf8\x14\x18\x6f\x8c\x7e\xc5\x56\xb4\x56\x3a\xa0\x65\xfd\x3f\x47\x15\x0c\xd9\xfb\x93\xf3\x10\x00\xd9\xb7\x92\x01\xb2\x7b\x18\xa5\x4f\xb2\x77\x7e\xcd\x2d\x72\x98\x6d\x83\xaf\x77\x9e\x25\x9f\xc0\x78\x69\x17\xb2\xdd\x5e\xf1\x91\xc3\xdc\x18\xb9\x54\xe4\xd1\xc5\x9f\x2c\x42\x68\xf0\x5d\xb9\x14\x70\x77\xd8\xb1\x8c\xa1\xdc\x1e\xc7\x95\x20\x74\xfb\xb8\xf0\xd7\x72\xc3\x77\x06\x3f\x02\xb1\x7c\xb9\xd3\x76\x50\x45\x23\xd6\x97\xe7\xbe\x75\x8e\x36\xf7\x20\x5c\xb0\x7b\x55\x0d\x31\xeb\x55\x90\xcb\xae\xed\x07\x74\x10\x0c\x8f\xa7\x22\x5b\x5a\x37\x4b\xbf\xa9\xf5\xd0\x14\x82\x71\x42\x4c\xdc\xae\x6a\xce\x7c\xf8\x4d\x15\xda\xff\x48\xad\x30\x91\xb2\x81\x3f\xb2\x03\x48\xc2\x71\x5e\xa1\x03\x6d\x1d\xd6\xb5\x57\xb7\x0d\x6b\x0b\x47\x59\xa0\x1b\xae\xdc\x36\xfb\x6f\xc0\x67\xd4\x5c\x50\xd2\x7c\xe9\x5e\xa2\x7c\x63\x00\xbe\xe1\x96\x6e\x08\x2f\x6b\x75\xd6\x6c\x8a\x8d\xfc\xd0\x13\x88\xb9\xa3\xa1\x46\x9c\xa2\xa6\x2c\x8a\x5c\x5b\x91\x30\xa0\x43\x06\x6e\xd3\x81\x7d\x68\x01\x5b\x4f\xe2\x45\x8c\xe5\x57\x82\x99\x3c\xc3\xfb\x19\x2a\x06\x47\xaa\x1b\x21\xcd\x2b\x0c\x87\xd4\xec\x23\xc4\x7f\xfb\x88\x48\x18\x30\xdf\x03\xad\x2c\x5c\xd6\x50\xbd\x1c\xef\xc8\xe2\xd5\x00\xe5\xdc\xc6\x8b\xae\xa4\xc2\x73\xa0\xbe\xdc\xc9\xfb\x41\x4d\x3f\x39\xbd\x38\x3c\x39\x26\x59\x87\xf1\xf1\xf4\x98\x08\x2c\x3c\x39\x7b\xcb\x26\x07\x1f\x0e\x8f\xa9\xe2\x67\x6f\x27\xc7\x87\xe7\x13\xa8\x03\x5e\x3c\x3c\xbf\x38\x9b\x5c\x9c\x10\xc1\x73\x51\x1e\xa9\x0f\x29\xb0\x4b\xc3\xcb\x83\x43\x57\x65\x1f\x91\xfe\x55\x52\xd6\x87\xc9\xf1\xe4\xed\xb4\x97\xac\xf0\x2a\x25\x8b\xba\xc8\xa8\x0b\xa1\xae\x31\x5c\xf1\x3e\x7d\x44\x7f\x39\xc8\x7d\x67\xcf\x46\x23\x5e\x14\x10\x19\x64\x28\xb3\x65\x9b\x00\x95\xc7\xc8\xa5\x67\x35\xfc\x3f\xa0\xf0\x0e\x30\x62\xbc\x28\x2a\xc6\xd7\x1a\x4e\x92\x5d\x09\xf6\x0c\xcf\x6a\xcf\x18\xb7\x56\xcb\x19\x1d\xf6\xb6\x4d\x91\x82\xdb\xd5\xae\x8d\x70\x3d\xb0\x6b\xd9\x5a\xc0\xda\xce\x22\xfc\x1d\x38\x86\x6f\x3d\xee\x7b\x78\x11\x8f\xe8\x0c\x3c\x9b\x8f\xc0\x94\xd8\x51\x06\xdf\xb1\xdc\xae\xf5\xe9\x81\xe5\xc8\xd4\x9e\xba\x1f\x83\x2c\xeb\x33\xf1\x33\xa1\xec\xb0\xfb\x28\x57\x16\x13\x0e\x71\x0e\x98\x7a\xbe\x51\x2d\x64\xa0\x87\x72\xd5\x95\xbf\xb3\xaa\x79\xbc\xe0\x17\xca\xae\x1e\x7e\x49\x09\xbb\xc3\x29\x70\x7f\x3f\x3e\xd1\x4b\x7f\x60\xe3\xa9\x16\x3c\xb9\x45\xe8\x2d\x6a\xfb\x69\xf8\x8f\x1a\xc5\x25\x40\xcf\x68\x77\xd4\xdf\x86\xb0\xb5\x51\x75\x13\xf6\x0b\x12\xab\xf1\x6f\xcc\x65\x91\x33\x92\x63\xbe\x5b\x9f\x35\xbc\x2f\xbc\xdb\x82\x34\x2d\x9f\xe3\x92\x70\xcd\xcb\x45\xed\xdd\x10\x04\xb4\x93\xe2\x94\xe5\x33\x48\x49\xc2\xbc\x39\xd1\x4b\x72\x99\xaf\x89\xa7\x16\xf9\xed\xc9\x96\xbd\x86\x7b\x14\xd2\xb8\xbb\x73\x1d\x80\x37\x1b\x03\xa7\x80\x5c\x4a\xc0\x14\x66\x19\x2f\x0a\x44\xcb\x83\xc4\x09\x3e\x47\x5c\x2c\x40\xd4\xf3\x39\x19\x70\x35\xf8\xb3\x15\x5a\xf1\x94\xc9\x44\x28\xeb\x0e\x39\xde\x68\xa6\xe2\x24\x88\x8a\xaf\x85\xd6\x32\x11\x11\xb6\x2f\xc1\x40\x23\x0f\x08\xc8\x12\xa9\xc5\xbc\xe3\x4e\xdf\xc3\xe5\x65\x2c\x84\x0b\x35\x00\x15\xcd\x75\x0d\x78\xba\x16\x41\x43\xa2\x69\x91\xea\x44\xe8\x83\xa7\xd6\xca\xa3\xb8\xe1\x15\xfe\x20\x15\xb5\x80\x10\x26\x67\xa9\xda\x95\x58\x8b\xe5\x0b\xcb\x97\x50\xd7\x52\xe7\x0a\xae\x0f\xf9\xc2\x0a\xcd\xe6\x79\x71\x3b\xf2\x49\xa6\xf3\x3c\x2b\x52\x41\xc7\xbd\xbe\x47\x6f\xc1\xb1\x28\x4d\x4b\xd4\x52\x2d\xcf\x32\x9c\x93\x6b\x29\xd2\x7b\x90\x2c\x92\x88\x0c\xe2\x15\xde\xe7\x05\x62\xea\xba\x12\xff\x0a\x79\xc2\x8c\xcf\x6a\xcc\xf7\x6e\xfe\xb5\x37\xb8\x23\x73\x84\xce\x18\x39\x9d\x1e\x1f\x1c\x1e\xbf\x1d\x34\x16\x4f\x4f\xce\x2e\x06\x16\x38\x3f\x74\x06\xdd\xb0\x42\x5c\x26\xcd\xfc\x0d\x32\x31\xc9\x1d\x2f\xaa\x0c\x12\xcc\xd0\xa0\x84\x7a\x2c\x21\xc3\x38\x42\x73\x0d\xd4\xc9\x18\xc4\x33\x6a\xc8\x00\xf0\x59\x88\x0a\x64\xbc\xee\x6b\x8f\x23\x2a\x9c\xb0\xd1\xc1\x41\x7d\xa4\x88\x73\xc4\x53\x2f\x17\xc6\x39\xdc\x22\x56\xd7\x21\x3e\x21\x94\x74\x7e\xdc\x95\x21\x56\x90\x9a\x19\x7d\x5a\x51\xf3\x0b\x7d\x95\x56\x6c\xf5\xe1\xf4\x6b\x46\x47\x68\x4c\x77\x50\x4c\x28\xcc\xae\x85\x8e\xc9\x88\xd5\xde\x98\x71\x3b\x5f\x6d\x11\x0c\xcd\x2a\xf4\xc3\xaf\x0b\x88\x33\xc4\xe8\x4c\x7f\xc3\xfb\xff\x81\x59\xa1\x8c\x95\x59\x06\xb8\x80\x82\x9c\xb5\x98\x25\xa1\xb7\x27\xce\xc0\x62\x09\xcb\x60\x95\x42\xb3\x45\xa6\x5b\xef\x06\xc8\x75\xf6\xd8\x20\xd9\xfd\xc5\x6e\x93\x08\x96\x53\x9a\xe6\x37\xe0\xb4\xa9\x92\x71\xfa\x41\x96\x41\x5d\x58\x6c\xd4\x06\x54\xe6\x0d\x96\xbb\x32\x7d\xf8\xc5\x18\x49\x10\x20\x80\x22\x1e\x30\x89\x4e\xfc\x58\x7f\x8b\x16\x65\x31\x14\x27\x6e\x82\x00\xfc\xe2\xcc\x83\x3b\x89\x01\x3a\x61\x4b\x72\xf6\x34\xc4\x39\x54\x5b\x54\xff\xad\x73\x52\x14\xa3\x3a\x6f\x04\x18\x8c\x11\x18\xf7\x87\xc3\x53\x0c\xe8\x81\x00\xd8\x43\xb5\xe2\xa9\xc5\x60\xd8\xb5\x72\x46\x10\x31\x7d\xa1\x29\x8d\x66\x84\x16\x6c\x53\xae\x45\xb1\x9a\x4e\xdd\x15\x86\x1e\x82\x35\x24\x01\xcc\xbb\x59\x8b\xb7\x58\x97\x29\xb9\x2f\x77\x57\x10\xce\xf4\xdb\x1a\x11\x52\xed\x3a\xa4\x81\xbf\x00\x21\x9f\x66\x9e\x2e\x01\xdd\x07\x21\xf7\xac\xce\xce\x68\x73\x1f\x60\x72\x5b\x4d\x22\xf7\xe3\x4c\x92\xfe\xcf\xaf\x5d\x75\xa9\x1e\x51\xb9\xcd\xbd\x71\xeb\xa5\x6e\x5d\x71\xde\xb8\x55\x61\xaa\x33\x69\x6d\x5a\x42\x4e\x50\x7d\x4d\x8b\x77\x33\x90\x60\xbe\xe0\x09\x51\x3f\x44\x79\x65\x6e\xaf\x92\xce\x3a\x63\x9e\x5f\xc1\xd9\xa2\x56\xe8\xcc\xad\xc3\x37\x2b\x01\x61\xeb\xdc\xb7\xd4\x03\xb9\xa4\xe1\xc4\xe8\x86\xb2\xca\xc9\xbb\x67\xa9\x16\x7c\xbe\xf2\xcb\x79\x5c\xe9\xeb\xa6\x5b\x99\xf9\x88\x3c\xbf\x53\xed\xb1\x7c\xc6\xaa\xab\xf9\x80\xf5\x52\x3b\xcf\xd1\xe6\x5b\xca\xd5\xfa\xa9\x32\xac\xb3\xd5\x8d\xa5\x5f\xcf\xbc\x5d\x44\x8d\x5c\x27\x0a\xca\x87\x44\x11\x5f\x7a\x53\x50\x2f\x78\x69\x90\x57\x15\x75\x7f\xfa\xe2\x95\xc7\xac\xcb\x7b\x4f\x97\xbf\xca\x95\xb2\x62\x8d\xeb\xc6\xa7\x38\x0c\xd5\x65\x05\xa4\x31\x2d\x01\xeb\x6e\xaa\x63\x34\xfb\x60\xfd\x56\x3c\x6c\xe9\x77\x65\x15\x89\x9e\x6c\xc2\x4f\xd1\xca\xbe\x6a\x95\x3c\x6c\xaa\x41\xf6\x72\xe5\x58\x60\xb3\x5b\xc6\x9d\x05\x67\xe5\xbc\x4c\xb9\xee\x03\x4c\x84\x30\x88\x7b\x98\x5e\x21\x3d\x34\xec\x4c\x80\x85\x62\xd7\x82\x6c\xee\xca\xa5\x16\x72\xe1\xe1\x9b\x28\x9d\x00\x64\x7e\xbe\xca\x73\xe3\xa4\xe1\x3c\x73\x3b\xb8\x9b\x54\x89\x34\xf0\xef\x31\x7b\x9d\x3b\x7b\x01\x43\xe2\xb4\x40\x56\x1f\xa1\x31\x80\x1a\x16\x3d\x77\x86\x34\x7e\x0d\x83\xc8\x70\xe0\x5e\xc2\xdb\x14\xea\x70\x8e\x98\xf1\x01\xcf\xb1\xc1\x85\x74\x57\xa6\x1c\xce\x49\xb0\xdd\xc4\x7d\x1f\x7f\xe3\xa5\x19\xb3\xd7\xc2\x9d\x0a\x31\x4a\x2f\x79\xf8\x55\xbb\x76\xe2\x7b\x08\xeb\xe5\x09\xe2\x32\x23\xd2\x19\x5c\x01\x2f\xc4\x2a\xad\x19\xb1\xdd\xf8\x10\xbe\x5f\xf0\x5e\x89\xf1\x25\xa7\xa1\x19\xa0\x11\x88\x5b\x00\x6d\x30\x98\xb7\xad\x44\x69\x19\xef\xee\xf6\x80\xed\x8f\xa1\xf4\x7c\xde\x48\x67\xaf\x8f\x86\x75\x7f\x75\x6f\x6f\x5d\x2b\x2c\x7f\xed\x46\x5c\x2a\x25\xf4\x8a\xa7\xb3\x4d\x60\xa9\xe6\x45\xe8\x1e\xbc\x30\xd4\xd5\x87\x88\x24\xac\x23\xe3\x21\xa0\x7d\xd1\x91\xeb\x5e\x86\x47\x2c\xf1\xdd\xe1\x96\x84\x34\x25\x2f\xe5\x83\xd4\xc3\x7a\x21\x77\x00\x9f\xe9\x9c\xce\xe4\xf7\x35\x41\xe6\x69\x24\xc0\x69\xf5\xb7\xf5\x68\xcc\x86\x84\x16\x8f\xdb\x70\x35\xa4\x89\xde\x52\xcb\xaf\x04\xbd\x4c\x74\x28\x82\x28\x03\xd1\x63\x1a\xb6\xe9\x4e\x65\xb4\x28\x72\xd0\x28\x61\x9f\x7e\xd7\x40\xc9\xf8\xf4\xbb\x35\xff\xed\x1e\x2b\x70\x74\x97\x46\x84\x64\x22\x24\x66\xdb\xa2\x6c\x0d\x88\x23\x93\x16\x12\x40\x90\x08\x6d\xb3\xc6\x56\x97\x6f\x20\xa1\x68\x06\x85\x04\xdc\x5b\x4c\x43\x02\x81\xe4\x9c\xf7\x4d\xfd\x8f\x52\x18\xb7\xae\xf9\xad\xc8\xd9\x63\xfa\xb6\x86\x97\xe1\xf6\xf3\xdb\xbc\xd4\xec\xe4\x9c\xbc\x29\x3f\xf0\x59\x2b\x9e\xa8\xaf\xca\x5b\xf1\x20\x18\x16\x97\x22\xbf\x2d\xbd\x96\xea\xe1\x17\x8d\x20\x10\x08\x3e\xbf\xd2\x6b\xc0\x7c\x14\xa5\xc8\xe9\x1a\xe5\x53\x30\x2d\xea\xf8\x13\xa5\x92\x01\x24\x68\xcb\x47\x20\x06\x4b\x1d\x92\x22\x11\x35\xf0\xa0\xee\xae\x5c\x17\x76\x7d\x7f\x3f\xfe\x28\xb4\x01\xc8\xeb\xa6\x8a\x3b\x2b\xf8\xb1\x21\x73\x53\xdd\x1e\xca\x06\x74\x6d\xb7\xb2\x6e\xc3\xd1\xa8\xa0\xb4\xdd\x5a\x18\x4f\xaa\x1d\x92\xd7\xce\xc4\x95\x59\xdd\xf3\x50\xec\x64\xf8\x72\x8f\x39\x15\x3b\x31\xad\x76\xfe\xb6\x16\xb7\x99\xf9\xd5\x09\xbd\x61\xe5\xd3\x7e\x1a\x2d\x95\x85\x04\x24\x3f\xbb\x58\x22\xf9\x52\xe5\xc6\xca\x39\x58\x76\xc6\x26\x34\x66\xd1\xe4\xf4\x70\x34\x51\x38\x93\x4a\xb5\x34\xbe\x2c\x00\x78\x06\x97\x33\x47\xf4\x67\x96\xe8\x72\x7e\x45\xae\xac\xa0\x46\xee\x36\x66\x96\xc2\x7d\xcf\xc2\xa7\xd8\xb8\x4d\x7e\xed\x88\xbf\x76\xa2\xe7\x11\xf1\x2a\x1e\x69\xfd\xa5\xf2\x1a\x48\xf3\xc1\x74\xc2\x66\xdc\x29\x41\x66\xbb\x00\x9e\xbf\x34\x16\xd3\x84\x43\xa6\x8e\x0c\x89\x94\x1b\xc7\x6d\xb7\x96\xe1\xa1\xdf\xfb\x03\xa2\xc5\xa7\x3c\x67\x8e\x4f\x17\x2f\x8a\xd0\x01\x78\x35\xc7\x33\xa7\xce\xe8\x35\x9f\x5f\x8d\xa6\x2a\xc1\xe0\x39\x38\xf6\x58\x76\x23\x35\x75\x26\x83\x6e\x72\x6d\xb9\xc6\x89\x45\xad\x71\x12\xf8\x23\x0d\xa2\x0d\x9a\x0e\xda\x8e\x53\x9d\xcf\x52\x91\x31\x2d\xb2\xfc\x1a\xf0\x23\xf2\x1b\x85\xb0\xd0\x61\x79\x75\x56\x8f\xc8\x6a\x1e\x13\x72\x69\x0d\xc2\x66\x42\x66\x6c\xaa\xec\xc2\x19\x5b\xe8\x6a\x5f\xb9\x01\x62\x9d\x85\x07\x20\xe2\xce\xd0\xa9\xad\xac\xb2\xd9\xb5\xcf\x5c\x7d\xcf\xc8\x75\x55\xe7\x80\x66\x87\x87\x50\xc8\x19\x9c\xdd\x32\x23\x97\x8a\xa7\x78\x18\x80\x7f\x7e\xf9\x32\x66\xd3\x9f\x65\xcc\x24\x07\x7a\x43\x69\xf7\xf3\x84\x9e\xd2\x07\x6e\xae\xe8\xfc\x4e\x18\x23\xfc\x8a\x95\x94\xda\xa7\x3a\xba\x95\x0b\xcf\x26\x20\x1f\x02\xc3\x12\x61\x1b\x55\xb2\xd7\xf8\x23\x0c\x9f\x66\x8d\x54\x5b\x00\xc5\xbe\x0d\xd2\xbe\xca\x2e\xab\x48\x2b\x10\xcc\x0d\xe1\xe3\xf1\x42\x94\xa5\xb9\x5a\x0a\x5d\xc5\x39\x45\x7e\x2a\xf8\xa4\x82\x49\x44\x81\xb7\x6e\xa3\x74\xd6\x32\xb5\x8c\x4f\xe5\x52\x28\x33\x5f\xf1\x85\x6d\xd5\x26\xd2\xa9\x46\x58\xa5\x8a\x3b\x35\xa0\xbe\x79\xc5\xdc\x00\x0e\x97\xa7\x62\xa5\x19\x7c\x79\x63\x1f\x7e\xb5\x77\x91\x90\x4a\xc4\xe1\x01\xb6\x80\x09\xb0\xf2\x08\xe2\x15\x7e\x44\x6b\x9d\xda\x1e\x76\xb9\xe8\x3b\x2d\xb5\x8f\x89\x8c\x27\xf6\x66\x94\x32\x0d\x82\x06\xa6\xb9\x92\x4b\x9f\x5b\x7d\xde\x25\xa1\x6f\xdd\x0d\x6f\xc1\x2e\x55\x6f\x08\x20\x6a\x06\x40\x97\xc0\x5e\x9e\x6b\x06\x24\x6e\x21\xf3\x0a\x92\xcb\xd1\x4a\xf4\x90\x9b\x1d\xc9\xac\xb0\x98\xc1\xea\x77\xee\xc9\xdc\xfc\xc1\xc4\x20\xe8\x3f\x26\x5e\x05\xae\x30\xcd\x5c\xdd\xa3\x88\x47\x0f\x15\x61\x64\xa7\xb7\x0e\x51\x20\x18\x5d\x56\x73\x32\xf1\xd2\x37\xc1\x48\xb5\x4c\xd1\x85\xfb\x1c\xe6\xb5\xe7\x09\xc6\xbd\x23\xcc\x14\x2a\x75\x18\x16\x78\x21\xd5\x9d\x48\x7d\xbd\xa4\x9e\x35\x85\xd8\x73\xf7\x16\x34\x39\x5f\x29\x11\x67\xc0\xef\x89\xab\xf5\x61\xaa\xae\x01\x57\x01\x8d\x72\xc4\xc1\xfa\x71\x34\x63\xaf\x2f\x0f\x8f\x0e\x4e\x27\xfb\xef\x3f\x07\x94\xad\x39\xdb\x3f\xf9\xf0\x61\x72\x7c\xe0\xfe\x08\xce\x47\xf7\xef\x05\x6b\x00\xdd\x01\x22\x57\x92\xcf\xaf\x84\x1e\xc9\x8c\x2f\x05\x3b\x38\xd9\x7f\x3f\x3d\xfb\x7c\xf8\x61\xf2\x76\xfa\x13\x56\xfc\xe3\x48\xb2\x46\x0e\xbd\x2b\x75\xc5\x0e\x0e\xcf\xdf\xbb\x7f\x65\x0c\x51\xef\x7e\xda\xc0\xfc\x72\xbf\x14\x2c\xd4\x63\xd8\xf9\xc5\x64\x1f\x8a\x58\x76\x71\xf8\x61\x7a\x72\x09\x6f\x94\xec\xdd\x74\x72\x74\xf1\xee\xf3\xfe\xbb\xe9\xfe\xfb\xcf\x17\x7f\x3b\x45\xa0\xb0\x2a\x12\x89\x9d\x9d\x5c\x5e\x4c\x3f\x07\xd0\x30\x50\xa9\x1e\x38\xf6\x93\xff\x3b\xf4\x58\xf8\x1b\x24\x84\x3f\xe0\x62\x18\x05\x63\xc4\x15\x3e\x8d\x20\x64\xf0\x4d\xb2\x32\xb5\xb2\xc0\x6f\x62\xd6\xe9\xa5\xfd\x77\x98\x2f\xf0\x13\x6c\x76\xe6\xc0\x75\x66\x5b\x7d\x84\xb8\x0f\x62\xa5\x85\xf6\x79\xbc\x15\xe3\x5e\x5c\x75\x33\x69\x57\x32\x5d\x88\xad\xa3\x96\x18\x9c\xff\x7a\x79\x72\x31\x21\xea\x7e\x7b\xf6\xf0\xff\x3e\xfc\x63\x7a\xfc\x7a\x7a\xbe\xff\xee\xec\xe1\x3f\x8f\xdf\x5f\x1e\xbf\x25\xc4\x94\xb9\xe5\xec\x00\xe2\x9d\x43\x10\x0b\xfc\x36\x24\x74\xa8\x15\xa6\xd9\x24\xa4\xd0\x01\x01\x45\xa8\x9f\x5b\xd8\x20\x4b\x00\x11\xc7\x84\x5b\x01\xd3\xdb\x08\x31\x93\xeb\x25\x7b\x2e\x7e\x0e\xc8\x56\x10\xe4\x9b\x63\xd4\x98\x16\xa6\x4c\x2d\xda\x9f\x20\x01\x49\xc9\x17\x31\x12\x03\xb0\xa8\xa9\x75\xa6\xb5\x61\x3e\x28\xcb\x1d\xba\x45\xbc\x7d\xb5\xeb\x38\xe5\x55\x9e\x42\x80\xa2\x31\x79\x9a\xb2\xe7\xbc\x7c\xf8\x87\xd0\xec\x46\x28\x85\x80\x68\xcc\xc7\xb7\x55\x77\x51\x80\x8d\x16\x4e\x02\xc1\xfe\x5e\x52\xa4\x7d\x2b\x4d\x21\x0c\xf5\xea\xbb\xae\xa4\xd7\xce\xe6\x67\xeb\xcd\x0f\x2e\xaf\xf6\x96\x77\xa9\xb8\x36\x3c\x7a\xb9\x82\xda\x49\x0c\x5b\x06\x5a\x2f\x97\xd0\xd9\xf4\x5f\x2f\xa7\xe7\x17\x54\x1c\xd6\xe4\xf8\xcd\xc9\xd9\xc1\xf4\xec\xf2\xf8\x2d\x31\x1d\xcf\xa6\xe7\xd3\xb3\x8f\xd3\x83\xcf\x7e\x11\x3c\x39\xbb\xa0\x62\x7f\xf1\xd5\xc3\xe9\xd9\xc5\x14\xdf\x3e\xc6\xb7\x29\xb9\xa7\x27\xc7\xe7\x24\x14\xcb\xe4\xf8\xe2\xfb\x93\xb3\x0b\x4a\xab\x13\x40\x54\xa4\xce\x17\x67\x27\x47\x47\xd3\xe3\x57\x14\x81\x0f\x28\x47\xb6\x02\x34\xef\x2a\x48\xa9\x8c\x25\x49\x8d\xc3\x1e\xd2\x59\x9a\x8e\xd4\x39\xbb\x3c\x3e\x1e\x1a\xa9\x73\x26\x78\x32\x02\xd4\x53\x8f\xb0\x6d\x31\xcd\x57\xaa\x45\x0e\x56\xb7\x16\xc8\xdc\x4e\xb3\xf5\x98\x3a\xb8\x76\x63\x25\x30\x35\xa2\x20\xcf\xaa\xe4\x5e\x79\x2d\x00\x63\x48\x90\x9d\x2f\x78\x9a\xde\xb2\x44\xa4\xc2\x0a\x96\xeb\x62\xc5\x95\x48\x7c\xce\xeb\x5f\x86\x36\xaf\x43\x14\x9e\x11\xb2\x82\x26\x10\x3c\xcf\xc1\xb9\x0d\x64\x51\x70\xa8\xf6\xf9\xb4\x37\x52\x5f\x01\xc3\xc5\x52\xa4\x0f\xff\x34\x6e\x9a\xe1\x84\x6f\xc8\xec\xa1\x92\xbf\xbb\xfb\x90\x27\x22\x45\x22\xce\xf8\x67\xd8\x86\x54\xc2\xc4\xb5\xd0\xb7\x76\x05\x96\xad\x31\xf9\x5c\x56\xf0\x62\xd2\x52\x3d\xe2\x74\xdf\x22\x1b\xbe\x48\x9a\x62\x6a\xd9\xea\xe1\x9f\x1a\xec\xf3\x69\x0a\xa1\xbf\xa2\xa3\x95\x4f\xd2\xb4\x47\x28\xbe\xa3\x66\xfe\x92\xaf\x25\xbf\xb3\xc1\x98\x87\x00\x56\x85\xbf\xf3\x3b\x49\x93\xcd\x6b\x3f\x0b\x79\x49\xc7\xe2\x66\xe3\xd1\x5f\x3e\x95\x2f\x5e\xfc\x91\xc4\x08\xf6\x6d\xeb\xac\x3e\xb6\x0e\x69\xf3\x3b\xd4\x70\xd3\x89\xd0\x23\x5c\x46\xc6\x9e\xf1\x7a\x75\xf5\x4f\x51\xea\xe5\x26\xa0\xd7\xe6\xf9\x10\x3b\x68\x3f\xcd\xcb\x84\xbd\x71\x67\x7c\x7d\xdb\xf9\x31\xdd\xb6\xb9\x99\x62\xbb\x26\x33\xb6\x5a\xaa\xa6\xe8\x81\x1f\xb9\xd9\x88\x90\x88\xbb\x79\xb1\x3d\xb4\x0d\xdc\xac\x65\xea\x6e\x8a\x7c\x82\x26\xcc\x85\xbc\x06\x6f\x6e\x45\x2b\x3f\x47\x36\xf8\xb9\x1b\xb9\xa0\x34\xa1\x66\x07\x8b\xbc\xc8\x8a\x05\x57\xe1\xf0\x4d\xd6\x8d\xb1\x7d\x3e\xc0\xe8\x99\x61\xe2\x67\x31\x2f\x2d\x5c\x4c\x70\x27\x8b\xcf\x2d\x2b\x4d\xb8\x29\x4c\xb9\x75\xe6\xbc\x3b\x6b\x88\xa4\x86\x29\x04\xce\x9a\xea\x79\x3d\x40\xf0\x79\x4c\x4d\xdc\xab\x72\xe3\x25\xd0\xf8\x99\xbd\x0a\x70\x67\x0f\x79\x8f\xf6\x98\xb0\xf3\xf1\x30\x10\xad\x33\x31\x2f\xb5\x91\xd7\x22\xbd\x0d\xfe\xa3\x8a\x80\x04\xc9\x04\x65\x9a\x78\xd2\x72\xd3\x32\x08\x80\xba\x75\xc6\x8d\x88\x27\xdd\x8c\x03\x30\xbc\x77\x2f\xa3\xaf\x61\x2d\xb3\x9f\x3a\xac\x37\x5d\x44\x70\x5d\x14\x3c\x1f\x6e\xed\xf5\x0e\x45\x34\x19\x05\x43\x12\x72\xc1\xb4\xb8\x82\x36\x30\x5e\x1a\xb0\x84\x1b\x0a\x22\x55\xec\x8c\xab\xab\x3d\x3c\xcc\xd7\xfc\xd7\x70\x1d\x55\x8f\xe7\x08\x38\x02\x77\x25\xeb\x0c\x95\xec\xec\xb6\x0a\xd7\xfd\x37\xef\xbf\xf5\x65\xe4\xbf\x5a\x2f\xfa\x9e\x5b\xa7\xa9\x22\x63\xf4\x36\xef\x27\xa3\x5b\x71\x4b\x15\x9e\xe5\x28\x4f\xfd\xa2\x80\x39\x05\x5d\xde\xb7\xf9\xca\xe8\x1c\xb8\xfa\x22\xae\x62\xc5\x8d\xd9\xb3\xd6\x52\x7b\xe6\x3a\x5f\x69\x17\xb7\xc8\xe5\xd9\x51\xb8\xc9\xc9\x03\x1d\xda\xe4\xf4\xb4\x6f\x5d\x40\xd0\x58\x43\x58\xc3\xc0\x04\xa9\x3a\xf9\xac\xea\x18\x6a\x77\x10\x4d\x00\xc4\x9d\x7d\xeb\x54\x8d\xfc\xe9\x2e\x17\xdc\x46\x58\x72\xff\x2a\x9c\x7d\xdd\xf3\xbb\x4d\xd7\xb1\x67\x1e\xf7\x05\xd7\xf3\xf8\xdd\x0e\xf6\x91\xeb\xfa\x86\xb8\x0e\xa2\xe5\xb6\xb2\x7c\x3d\x43\xe8\x3b\x3f\xfa\xdc\x06\xe8\xfe\x11\xac\x11\x20\xcb\xde\xc7\x10\xba\x4b\x23\x74\x97\x43\xb8\x79\xbb\xd2\x92\x6a\xde\xd0\xcd\x35\x78\x1d\xa2\xcb\xa9\x46\x67\x21\x7d\x17\x4f\xe5\xeb\x5a\xa6\xed\x6a\x76\x77\x1b\x7c\xb0\x5a\x2a\xba\xeb\x2b\x48\xe2\xb9\xbf\x1f\x23\x84\x05\x4a\xaa\xf5\x17\xfe\x7c\xa2\x97\xcd\x1e\xc3\x9f\x41\xa3\xdd\xfb\x0c\x31\x81\xd3\x86\x4e\xee\xb7\x38\x1c\x5a\xd4\x5a\xef\xab\xa6\x7e\xb5\xde\x5a\xd3\xf0\xb7\xe8\xaf\xff\x22\xdd\xb2\x6b\xdb\xfd\x55\xfa\xe5\xd9\xd1\xd3\xcd\x2b\x57\xbb\xda\x72\xcb\xb2\xde\x13\x0d\x3d\x9e\x7e\x0e\x35\x55\x1a\xd2\x29\xbb\x35\xa1\xa3\x16\xf0\xe9\xf3\xca\x84\xa4\x17\xd4\x0a\xaa\x91\x95\x19\xd0\x55\x77\x2c\x9a\x5e\x6c\x3f\x6b\xa5\x6e\xdf\x05\x93\x61\x70\x15\x5b\x48\xf2\xa6\x6d\x46\x50\xef\x3a\x3a\x3c\x9e\xd3\x46\xf0\x5e\x5f\x91\x5d\xfb\xff\xd4\x83\x79\x0e\x10\x46\x73\x12\x6e\xec\x84\xfd\xa4\xfa\xcb\xc0\xe6\x98\x8f\x87\xf7\xaf\x39\x15\x2f\xa3\x7a\xe4\xc4\x5b\x57\xe2\x2b\x4f\x44\xdf\x1d\x15\x6d\x07\x7a\x15\xe2\x74\x58\xef\x9d\xb5\x07\xbd\x9b\xfa\x7a\x4b\x05\xb1\xe5\x2d\x15\x74\xab\xbe\xf1\x95\xd6\xbf\xe4\xce\x9f\xa7\x23\x9b\x79\xed\x3b\xed\xd0\xe3\xcd\xd5\xc3\xf7\x4a\xcf\x16\xf4\x53\x7f\x6d\xd1\x69\xd4\xb0\xb5\x01\x3d\xb5\xdf\xf0\x76\xac\xfb\xc0\xbe\xb2\xc1\xd8\xde\xe4\x4d\xb5\x62\x7b\x37\x7e\xfe\xfa\xc6\x62\xe8\xb2\xd0\xd8\x93\x34\xa9\x4b\xab\x7a\xac\xf6\x63\x5b\x7f\x3d\xa6\x63\x6a\x2d\x59\xab\xbe\xea\x99\xe6\x8f\x74\xbf\x0c\x6c\x7e\x91\x77\xc5\x63\x57\x87\x5c\x45\x46\x64\x9f\xe1\x75\x43\xcc\xcb\x39\x3f\x7f\x87\x81\xc9\x31\xc8\xb1\x7b\x17\x0b\x77\x0b\x16\xf2\x6c\xa0\x74\x75\x52\x0a\x97\x74\x3e\x9a\x91\xce\xb4\x21\xb4\x10\xca\x9d\x4c\x00\x87\x69\x8d\xf2\xc5\xc7\xd0\x43\x4e\x7f\xe7\xf6\xbd\xa9\x5f\xc5\xaa\x52\x31\xb2\x44\x71\x91\xf6\xf6\xca\x4a\x60\xfb\xe8\xd6\x19\x7b\x77\x20\xc4\xd6\x99\x0f\x9b\x04\x42\x46\x88\x05\x9b\xba\x7f\x7d\xf9\xf2\x49\x5d\x1c\x9e\xbe\x62\x87\x0b\x76\x9b\x97\x90\x9b\x31\x13\x2b\xa9\x12\xc6\xd9\x42\x6a\x71\x03\x27\x74\xb8\x22\x02\x00\xee\x48\xc5\x56\xe8\xfc\xe7\xdb\x3d\xcc\x9b\xc5\x38\xd0\x95\xb5\x85\xf9\x0c\xbf\xb7\xe7\x0b\x4b\xc3\xe6\xb9\xd6\x62\x6e\xd3\x5b\x84\x52\x9f\xa6\x46\xec\xf9\x8c\x2d\x08\x88\x56\xc2\xde\xe4\xfa\xaa\x46\xe9\x44\xcd\x87\xff\x8d\x1b\xd4\xf9\x81\x0a\x23\xca\x24\x1f\x59\x7b\x0b\xf3\xa1\x33\x39\xe3\x14\xdf\xbd\xb8\xf8\xdb\xa8\xba\x54\xe7\xde\xc5\x45\x1a\x4c\x21\x3a\xdd\x58\x6e\x07\x52\x11\x9c\x61\x9f\x19\x76\x7e\x72\x79\xb6\x3f\x1d\x4d\x4e\x4f\xd9\xc5\xe4\xec\xed\xf4\x02\xfe\xc9\x4d\x04\x6c\x27\x99\x20\x3d\x26\xbb\xa5\x44\xa4\x26\x02\xb8\x93\xab\x87\x57\xc2\x99\x7c\x68\x53\x56\xf5\x6e\xad\x36\x09\x41\xfc\xb5\x90\xd7\x7a\xa5\x54\x9d\x9e\xdf\x07\x8f\x2a\xa7\x1d\x04\x45\x67\x15\x69\x8f\xbf\x48\x44\x3a\x23\x4a\x2e\x42\x4b\x40\xa6\xb9\xdb\x55\x26\xa7\x87\x00\xd9\x96\xb0\xbc\xb4\x7f\x06\xbf\x3b\x98\xb7\xe0\x28\xf3\xce\xf7\x61\x60\x25\x67\xc2\x58\xbe\xec\x6b\xc6\x87\xc4\x23\xbf\x16\xd1\x76\x77\x80\x06\xf8\x76\xbe\x24\xd0\x4c\x18\x36\x89\xba\xfd\x86\x1e\x23\x44\xf8\x18\xd4\xa7\x50\xa4\xb3\x43\x35\xc4\x35\xb6\x5d\xc9\x7d\xf9\x02\x01\xe3\xb5\xdd\xa8\xd1\xe4\x9e\x06\x65\xec\xc2\x73\x54\x05\xfa\xef\x70\xf3\xb2\xee\xcb\x97\x35\xec\x92\x66\x65\x7d\x6d\x4b\xcf\x11\xc0\x15\x93\x2a\x91\xd7\x32\x29\x79\x1a\xc3\x82\x81\xeb\x19\x6e\xb7\xdd\x42\x54\x52\xd3\xe9\xd0\x97\x14\x69\x5a\x85\xee\x8e\x80\xb8\x39\x93\xd6\x35\xc4\x96\x86\xf1\x99\x2e\x17\x74\xd7\x46\x45\x12\x96\x48\x53\xa4\x1c\x17\xf8\x93\x49\x24\xff\x8e\xf9\x1b\x3e\x37\x98\x19\x61\x3a\x22\xd7\xa1\xe4\xe8\x02\x4b\x86\x64\x0e\x9f\xe5\x2b\xd8\xb9\xb4\xc0\xe0\xe4\xb5\xc2\x1b\x78\x75\x27\x24\x19\x35\x4a\xaa\xb8\x04\x98\x6d\xbc\xa8\x5b\x96\x32\x19\x33\x36\x49\x53\x4f\xc3\xb5\x12\x3c\x05\x6c\xba\xc4\xf7\xa1\x5b\x33\x8a\xb2\x4a\x46\x01\x5a\x49\x03\x41\xd7\x5a\x18\x43\x27\xc7\xbc\xbd\x3c\x3c\xf0\x0b\x62\x20\xca\xc1\x89\xd5\xd6\x04\xd4\x41\xc4\x9c\xa8\x09\xa6\x4e\x40\x88\xd7\x0f\xa5\x1b\x41\x09\xbc\xef\xbf\x4d\x85\x83\x59\x14\x21\x62\x0a\x6e\x73\x12\xfd\xf0\xeb\xfc\x8a\x0a\x9b\xde\xd2\x25\xb9\x5e\xb6\x75\xc9\x5a\x07\x40\x94\xcb\xce\x1d\xd0\x84\x9c\x1f\xd2\x13\xa1\xcd\x66\xcd\x9d\xf1\x64\xcd\xf7\xe7\xb5\x1e\x5d\x10\x5d\x4e\x83\xba\xc1\xd4\xba\x21\x1c\xc2\x76\xec\x81\x4a\xc0\x53\xb7\x7e\x74\x25\x6e\xbf\x65\x0f\x54\x20\xe3\xe6\xbf\x52\x67\xb8\x4d\xac\x4f\x37\xc0\x0e\xbc\x7b\x27\x84\xeb\xc5\xdd\x9b\x1e\x76\xde\xa7\x6b\xba\xe5\xf3\xab\xd8\x74\xba\xe5\xee\xb5\xc7\x7c\x7e\x0b\x94\x3f\xed\xed\xee\xf1\xc5\xa1\xfa\x1d\x1a\x1d\x53\xcc\x6a\x5b\xa6\xa9\xef\x99\xee\xa1\xe0\x73\xcc\xac\x1f\x61\x6e\x29\xbe\x4b\x05\xf2\x41\x7c\x9b\xdb\xdb\xeb\x3b\xa9\x89\xf9\xb2\x61\x3b\x4d\x53\x81\x48\xce\x8b\x87\x5f\x56\x10\x2f\xe6\xdf\xef\xbb\xd5\xb6\xe1\xd9\xec\x0c\x89\xe5\x53\xd7\x9c\xda\x61\x8f\x6d\xc3\xad\xf6\x90\x51\xbb\x2b\xb8\x33\xda\x55\x4d\xc1\xad\x88\x56\xfd\xd5\x03\x48\x1b\x24\x3d\x4a\x53\xbf\x92\x35\x09\x33\xd6\xe3\x04\xe3\x34\x27\xcf\x26\x4b\x91\xfa\xc1\xc9\xd1\x52\xd9\xe0\xd1\xf0\xfa\x55\x61\xd0\x2d\x71\xcf\x46\x2a\x22\xf5\xcf\x37\x00\xfc\x63\x71\x88\x3a\xf5\xdd\x60\x5a\x8a\x24\x8c\x4f\x33\xc0\x8b\x3b\xf1\xf3\x2e\x41\xc3\xb5\x1a\xa0\x6e\xd4\xfa\xf1\xcb\xf5\x95\xc7\x33\xaf\x06\xea\x00\x1f\x6e\x8b\xd2\xf7\xf7\x63\x2f\xca\x55\x31\xc8\xed\xdc\xa2\xf0\x35\x5a\xec\x6b\x12\x77\xd1\x70\xb7\x99\xb5\xa3\xf6\x15\x52\x94\xee\xe0\x7c\x09\x23\xfb\xa9\x9a\xb3\x7d\x1e\x3e\x41\x73\xb6\x4f\xd4\xfe\xcd\x41\x90\x1f\xb7\x45\x21\x6f\xfc\xae\xd0\xba\xf1\x22\xf4\x5d\x6e\xac\xbf\x2f\xb9\xbf\x1f\x1f\x80\x54\x7f\xfa\xc2\x74\x4d\x63\x05\x9c\xd3\x9e\x5a\xfc\x77\x91\xe1\xef\x49\x2a\x82\x7f\x7c\xf9\xc2\x6e\x38\x66\x3c\xcc\x20\x57\xd4\x6e\xc2\xf3\xb4\x84\xcb\x7e\xf9\x42\xfa\xfe\x36\xc4\x43\xd2\xa7\xf2\x30\xfd\x44\x24\xea\x86\x78\x06\x1f\x9e\xc6\x70\x59\xbb\x59\xef\x95\x2a\xb4\x56\x66\x40\x26\xd0\x46\xc9\x58\xe1\x90\x4e\xf3\x5f\x75\xb8\x76\x7d\xbb\x2d\x72\xe4\x6c\xef\x3a\xcf\x8c\x15\x3f\x94\x7e\xeb\xfe\xfc\xf2\xa5\x42\xdd\xed\x52\xd3\xf3\x64\xb5\x94\x6e\xa0\x44\x75\xd4\xdf\xf9\x8d\x3a\x0b\x7a\xcb\x51\x9a\x30\xa1\x6f\x64\x9a\x02\xe9\xb7\x07\xa6\x85\xfb\x81\xf4\x36\xa4\xec\x57\x34\xb6\x75\x4a\xb0\xce\xea\xeb\x47\x44\x4f\xd1\x18\x4c\x44\x55\xea\x00\x16\x5b\xf1\xd6\xaa\x06\x7b\x18\x0b\x08\xb9\x6e\xd3\xeb\x6a\xc9\xc0\xf5\xa7\x03\x44\x0f\x6d\x07\xaa\x9c\x62\x9c\xe5\x4a\x8c\xf2\xc5\x02\xa9\x72\xe3\xf5\xc9\x40\x05\x70\x23\x9b\xd6\x56\xfe\x8f\x61\xe5\x87\x01\x40\xb6\x88\x5a\xc7\x55\x0d\xa9\x8d\x48\xca\x39\x9f\xee\x5f\x9e\x1d\x5e\xfc\x8d\xbd\x3d\x3b\xb9\x3c\xa5\xe2\xc3\x0f\xf7\xdf\x4d\xcf\xde\x4d\x0f\x2f\xce\xdf\x9e\x5d\x9e\x9e\x12\x34\xcf\x4d\x59\x94\xb2\x1b\xc2\x48\xcd\xa6\x6c\x72\x74\x7e\x42\xcb\x99\xbe\x9b\xb2\xc9\xe5\xfe\x3b\x52\xc0\xd9\xc7\xc3\xfd\x61\xd4\xd8\xbe\x4c\x27\x2b\x86\x7f\x67\x84\xef\x6c\x17\x43\x36\xa0\x2e\xa7\xbb\x0d\x54\xa6\x56\x77\xa1\x61\x13\xc0\x97\xda\x4a\xd4\xed\xdf\xdb\x42\xd4\x7d\x7e\x3a\x21\xbb\xfe\xf5\xf4\x6c\x7a\xb8\xff\xae\xa3\x60\x67\xff\xfb\xe2\xe7\x5d\xfd\x5f\x09\xa1\x3a\xa1\x21\x85\xea\x7d\x14\xd3\xc9\x3f\x12\xe5\x74\x51\x8f\xa0\xa0\x83\xe9\xc7\xe9\xd1\xc9\x29\x49\x3f\x12\x44\x4d\x8f\x2f\xbe\x3f\xdc\x7f\x7f\x44\x91\x8f\xa0\xb4\x6e\x2a\x93\x20\xab\x93\xc5\x04\x04\x51\xdf\xd9\x4b\xa0\xe6\x3a\x14\xdd\xd2\xb9\xe4\xd4\x3e\x7f\xe7\x01\x0d\x76\xba\x63\x76\xc5\x63\x4a\x2d\x7d\xa9\x4c\xd5\x7d\xc4\xf6\x6b\x09\x27\x70\x75\xea\x76\xda\x0f\xc2\x18\xbe\x14\xf1\x16\x15\x48\x93\xe6\x0b\x88\xd1\x1e\x8d\xcc\x95\x2c\x46\xc6\xa4\x23\x48\x5b\x01\x55\x80\x3d\xc9\x55\x2a\x55\x29\x22\x55\x8a\x54\x70\x52\x15\x0d\xca\xf0\x61\x13\xf1\x62\xb2\x3f\x8c\x05\xe8\xfc\x72\x7f\x7f\x3a\x3d\x98\x1e\x0c\x2b\x35\xe7\xe9\x37\xbd\xc5\x3a\xbf\xe2\xe9\x6f\x7b\x77\x75\x1e\x9c\x08\xdd\xfb\xe9\xa6\x6b\x80\x1a\xc8\x4d\x20\xde\xfb\xfb\x71\x70\x53\x7c\x5e\x7a\x93\xad\x57\xc6\xf3\x46\x85\xad\xa2\x7a\xa7\x3c\xf7\x50\xeb\xfe\x7e\x0c\xe1\x03\x9f\xb3\x30\xec\x1f\xa5\x5a\x8b\x38\x42\x33\x9c\x54\x2b\x91\x16\x0c\x12\xf6\xe6\x1e\xe8\x12\xb3\xf7\x60\x4e\x39\xd3\x9f\xf1\x19\x82\x70\x44\xe4\xa8\x2d\x80\x98\x54\x7d\xa9\x98\x47\xb6\x44\xf6\x3c\xd7\x0c\xbc\xa0\x4c\x28\x67\xab\xba\x83\xc5\x95\x2c\x7e\x4f\xae\x63\x15\x47\x73\x80\xda\x7c\xee\x41\x9c\x33\xc4\xc4\x35\x85\x96\x90\x50\xe3\x4e\x10\x53\x09\xd9\x18\x96\x83\xa7\x11\x1c\x9d\x42\x51\x10\x24\x41\x35\x9c\x6c\x43\x35\x6b\xde\xcf\x7c\x15\xf5\xf4\xb5\xd0\x18\x63\xb2\x87\xff\x61\xf3\x3c\x11\xaf\xd8\xcb\x17\x2f\xfe\xb0\xc7\xfc\x87\x7e\x15\x00\x70\x8d\xb0\xf5\x94\x9d\x99\x98\xf3\x12\x81\x0c\x23\x2f\x4c\x51\xe3\xa0\xa0\x03\x61\xb1\xe2\x85\x58\xa5\x42\xef\xb1\x37\xf0\xdf\x7a\xc5\xc7\x7c\xbe\x82\x18\xa3\x57\xac\x99\xf5\x03\xd4\x6d\x38\x3f\x2a\xfa\x3e\x7f\xb0\xd8\x63\x09\xaf\x82\xe4\xf1\xa5\x0d\xd4\x4e\x77\xe2\x58\x3d\xfc\x93\x3a\x55\x34\x7b\xc4\x7b\xcb\x50\xb3\x3f\xbd\xf8\xe3\x46\x1f\xb9\x9f\x62\x27\xfd\xcd\xc7\xe3\x00\xa0\x5d\x69\x57\xb9\x96\x77\x88\x27\x57\x78\x10\x67\xf0\x65\xc5\x00\x15\x3e\xef\x88\x7d\x69\xf6\x10\x7a\xd9\x6a\x7a\xac\x75\x99\xfb\xa9\xd6\x67\x08\xb3\xaa\x02\xfa\x93\x3b\x03\xcf\x57\x56\x2e\xad\x47\x3d\xab\xe3\x2e\x4e\xae\xc2\xf0\xba\x2b\xfd\x31\x62\x97\xae\x79\xc5\x26\x98\x7b\xef\x0e\x95\x42\x01\xa9\x3c\xf4\x48\x92\x43\x87\x00\x89\x63\xa1\xe5\xb5\x4c\x85\xc7\x3a\xc2\xc4\x4c\x81\x07\xd1\x2d\x33\xbf\xb3\x3b\x5e\x45\xd6\x20\x40\xdb\x93\x4b\xa1\xed\x98\x41\x2f\xac\xe0\xb6\xc2\x8f\x05\x89\x94\xa1\xd0\x15\xa5\x5a\x22\xae\x7c\x3c\x3c\xe1\x61\xd5\x78\x24\x5c\x43\xee\x2e\x64\x2f\x60\x8c\x16\xea\x86\x68\x63\xcd\xf1\x82\xcf\x27\xa7\x87\x60\x8e\x84\x37\xe2\xf0\xc1\xc7\x8d\x24\xea\xc1\x9d\xd1\xa6\x42\x7d\xa8\xb4\xab\x50\x1b\x39\x6d\x4a\x90\xfd\x20\xe7\x82\x41\x88\x01\x06\x0a\xdc\xdf\x8f\x8f\xf8\x4c\xa4\xb8\x55\x04\x58\xb0\xde\x5c\x4c\x21\x2f\xb9\xb4\x2b\x40\x5f\x94\x77\x12\xe1\x0c\x6d\xb7\xf4\xfe\x4c\x4d\x41\xe7\x2a\xc0\x78\x10\x59\xd4\x66\x7c\xf2\x60\xae\xa8\xa0\x41\xf0\x36\x85\x55\x13\x56\xd0\x40\x33\xda\x5d\x7d\x70\x5d\xd5\x7d\x82\xd7\x79\x2d\x87\x8e\x20\x68\xed\x56\x68\x8b\x35\xde\xaf\x30\xdb\xcc\x87\xdf\xe6\x0a\xdb\x9a\x50\xdf\xc7\x1b\xd6\xa6\x47\xbb\x5b\x6f\xd0\x87\xde\xea\x24\x1c\xfe\xdd\x3b\xdd\xc1\x5b\x3b\xab\x9f\xec\x57\x1b\xd1\xe4\xbd\x9a\xd9\x52\xac\xb3\x3a\x8a\xff\xbc\x05\xdb\xff\xd1\x7e\xdd\x7e\x24\xe8\x15\x15\xc0\x00\x47\xef\xb0\xef\x17\x80\x18\x76\xfa\x40\x11\xc5\xa1\xd9\x45\x9b\x01\xbd\x56\xdf\xc2\xd5\x51\xee\x61\x20\x38\xbb\x7e\xb9\x81\x05\xb1\x07\xaf\x67\xa5\x41\xb3\xcc\x99\x16\xa3\x02\xae\x21\xb7\x2d\xb0\x1e\xf8\xa1\x65\xf4\x82\x2a\xa7\xaf\xd8\xf7\x42\x61\xb6\x7a\x44\x82\xdc\x03\xc8\xf8\xeb\x97\xa3\x35\x21\x0b\x2d\xe4\x5d\xe9\x59\x8f\x32\xf8\x38\x58\x32\xe1\x06\xee\x2e\x9d\x52\x46\xd8\xbb\xde\x5d\xdb\x77\xc9\x08\x1a\x0c\x59\x20\x36\xd2\x2c\x06\xad\x07\x2d\x59\x1a\x43\x17\x80\xfa\x24\xeb\xb3\xd3\x77\x0a\x1b\x46\x07\x13\x49\xf4\xa5\xb2\x62\x89\x38\x75\x03\x9d\x87\x5e\xc2\xd0\x52\x76\x3d\x25\x1d\xef\xfc\xb7\x86\x96\x6e\x66\xa7\xd7\xd2\x0c\x8a\x02\x0e\x00\xce\x98\x24\x3f\xba\x8d\x28\x71\x69\x3e\xe7\xa9\x18\xbb\x49\x76\x74\xb2\x3f\x39\x9a\xba\x8d\xf7\xd9\xfe\xd1\x74\x72\xf6\x6c\xcf\x9d\xc9\xae\x65\x5e\x1a\xff\x1a\x9a\xb0\xa9\xb0\x74\x18\x4d\x40\x75\x43\x8d\x8e\x10\x71\x13\x16\x1b\x91\xa6\x81\x09\x0b\x74\x1b\xe3\x64\xc2\xf7\xb0\x6a\x77\x26\xf9\x5e\x68\x1b\x14\xa8\x6e\x41\xdc\x80\xda\x43\xdc\x56\xb7\x86\xb9\x41\x25\xb4\x5c\x8a\xb6\x1a\x22\x18\x0b\x39\xe2\xac\x0f\xa0\xfc\x0c\xf1\xfa\x9f\xed\x6d\xe1\xa3\x52\x9d\xed\x8d\x4c\x16\xcf\x80\x10\x97\xe5\x9a\x3d\x53\xb9\x12\x14\x41\x2b\x40\x5c\xc3\x6c\xde\x94\x18\x29\x29\x82\x2c\xf8\x37\x48\xeb\xf3\x85\x72\xcd\xae\xa5\xb8\xa9\x18\x1b\x24\x2b\x75\x4a\xe8\xf1\x83\x14\xe9\x68\x72\x7a\x38\xba\x3c\x3b\xaa\x84\x63\x95\xdd\x01\xa8\x8d\xaa\x22\x41\x84\xc7\x1e\x74\x5b\x54\x47\x54\x89\xab\x35\xaf\x9f\x21\xf3\xc0\x73\x38\xf3\xae\x83\xc1\xaa\xd8\xbc\x6f\xd7\x93\x32\x3c\x44\x6c\x1d\x5b\x02\x12\xb3\xa6\xfe\xcf\x2e\x27\xdd\x9b\xa8\x2f\x38\xe9\x6a\x70\x13\x01\x8c\xa9\x29\xa5\x53\x87\xc6\xcc\x7e\x56\x07\x3c\x00\x47\x8f\xff\xe5\x23\x4f\x4b\x0f\xa7\xac\xbf\x9d\x37\xb2\xd9\xd0\xcd\x05\x65\x4d\x5d\xd7\xf8\x0d\x7d\xdd\xd8\xff\x6d\xfc\x98\xd8\xbf\xff\xd1\x86\xb1\xe8\x11\xee\x5a\xf2\xed\xfa\xc4\x8c\x54\xdd\xe2\x86\x6b\x2f\x28\x46\xe8\x86\xad\x39\x76\x3d\x82\x49\x42\xb3\x9e\x24\x12\xa9\xde\x90\xa7\x8a\x45\x0a\x0a\x7e\xf5\x40\xa4\xa6\xf2\x5f\x29\x14\xa9\xab\x35\x4f\x1a\x87\x44\xb7\xe6\x09\x23\x91\xce\x57\xce\x3e\xe6\xe0\x48\xe2\x56\x54\xe1\x0b\x78\x2f\x43\x3b\x1c\x4f\x7d\x81\x10\x8a\x50\xe1\x4d\x37\xc6\xf4\x52\x64\x6e\x8f\xe5\x19\x83\xc3\x34\xb5\x82\xaf\xb8\xb7\xe3\xa1\xf6\xf5\x08\x26\x0f\x32\xbd\xf3\xec\x7c\x1b\x94\x10\xec\xb8\xc4\x4c\x0b\xd7\x8d\x41\xf5\xf5\xea\x5c\x53\x9e\x64\x62\xae\xf2\x9b\x0a\x2e\xbb\x19\x8a\x49\x9b\x69\x08\xe1\xbd\x79\x81\xb0\x65\x0f\x84\xba\xd2\xb4\xb1\x79\x98\xed\x76\x21\x04\x23\xb7\xc0\xec\x34\x0d\xc3\x1e\x75\xaf\x44\x4a\xd5\xf1\x0e\x60\x9d\x7b\xc8\xa8\x01\x83\xa2\xe6\x3e\x10\xfb\x39\xaf\x22\xb2\xdd\x50\x15\xa3\x59\x29\x53\x8b\xb4\x18\x48\x56\xb3\xc7\xa4\x0a\x70\xc7\x6e\xdc\x22\x70\xb4\x5b\x15\xfd\x63\x24\xa0\xe7\xca\xad\x38\x00\x5b\x4d\x01\xc8\x1d\x36\xd0\x49\x63\x3f\x84\xa8\xec\xd0\x0c\xf6\x5c\xc8\xf0\x9b\x3b\xb5\xc0\x69\x2e\xd7\x88\xf1\x2c\xb4\x15\x06\x89\x32\xb0\x7e\xf7\xd8\x1d\xb6\xa5\x78\xf8\x07\x40\x01\x36\xa9\x76\xf6\xe0\x74\x07\xc8\xd8\x55\xec\x09\xb8\xe6\x09\x24\x63\xe8\xae\x80\xc8\xda\xe3\xb2\xc3\x78\xe4\xd6\xad\x9f\xc0\xc9\x2c\x8d\xd0\x86\xcd\x6e\xe1\x4e\xa2\x8f\xf0\x59\xbc\x22\xe0\xf3\x95\x47\xda\xe9\x51\x17\x40\x69\x26\xc2\x72\x99\xfa\x91\x5a\xe7\xa6\x5b\x3f\x9e\x53\xeb\x50\xea\x4e\x89\x5e\x86\xff\x58\x15\x5b\xc9\x06\x38\x63\x0f\xb5\xd0\x3c\xe8\xe8\xd8\x76\x74\xef\xbe\x3d\xac\xc5\x1c\xc8\xc2\x8b\x82\x89\xeb\x8e\xc4\xd7\x23\x61\xef\x2c\x4c\xbf\xd1\x54\x0b\xb9\x04\xae\xd5\x3e\x15\x6c\x38\x87\x3a\x9a\xd2\x74\xea\xb8\x17\xcd\x90\x2a\xae\xc4\x6d\x0f\xe9\x95\x97\xa9\x6f\x1f\xf9\xcc\x13\x5a\x72\xb8\xc3\x1a\x26\x70\xeb\x97\x0d\x62\x5b\xb1\xc5\x07\x56\xd6\x67\x16\x85\xfa\x76\x9c\x40\x70\xee\x72\x47\xc6\x7c\x11\x52\xfb\x30\x93\xdc\x5f\x8f\xd5\x41\x09\xa8\x4f\x34\x58\x0e\xa9\x8e\x5b\x6d\x63\x32\x24\x1c\xfb\x31\x01\xf5\xdb\x1c\x4c\x26\x61\x5d\x6e\x26\x7d\xf8\xe8\x09\xb7\xe5\xff\x66\xe1\x13\xbe\x6f\x36\x93\x2f\x9f\xe6\xe4\xd6\x2b\xa6\x3d\xf4\x8e\xeb\x04\x2a\xe5\xf2\x9b\xa3\x80\x9d\xcb\xc1\x17\x24\x57\xb2\xf0\xe8\xfd\x01\xf9\x07\x2e\xce\x6d\xde\x85\x97\x88\x58\x07\x31\x83\xbf\x05\x39\xf1\xae\xac\xae\x7b\x80\x6a\x22\x84\x00\x74\xa8\xb1\xca\x8d\x85\x15\xb0\x0a\x6e\xa2\x0c\xa0\xdc\xd8\x6a\x11\x6c\xf2\xbf\xf7\xad\xad\xc1\x37\xef\x8f\x1b\xf5\x60\xa9\x31\x3b\xce\xad\xdb\x5c\xf2\x2c\x13\x2a\x11\xc9\x7f\x23\x94\xf9\x08\x82\xfc\x55\x20\x32\x7a\xd7\xdc\x15\xa6\xa9\xd0\x98\x1d\x83\x37\x56\x64\x05\xdc\x8e\x2a\x73\x23\xb4\xfd\x6f\x84\x9e\xdd\x08\x2c\x6e\xac\x74\x14\x04\x3f\x41\xf0\x1b\x44\x97\xf5\xc0\xc0\x15\x10\xf4\x24\x14\x1e\xdd\x5b\xc1\x93\x50\x79\xd4\xb4\xdd\x12\x4a\xd3\xae\x05\x15\x83\x02\x62\x77\xcd\x28\xc1\xd2\x68\x2d\x63\x68\xa0\x19\x48\x00\x8b\x2a\xef\x46\xdf\x7a\xde\xba\xcc\x0d\xf8\x5e\xeb\x65\x87\x7e\x8e\x2d\x1f\x82\xec\x72\xe4\x46\x77\x06\xac\x5d\xc1\xba\x0e\x67\x13\x80\xce\x96\xb9\x02\x3f\x39\x3c\x82\xa0\x9f\x10\xfc\xbf\x17\x39\x73\xf0\x75\x69\x22\x0b\x89\x54\x71\x2f\xbd\xc9\x35\x20\x25\x47\x9e\x3a\xfa\x98\x3b\x6b\x60\x4a\x03\x11\x7d\xbc\xbf\x43\xd2\x3f\x1d\xdd\xdd\x5c\x8d\xd9\x1b\x9e\xa6\xe8\x52\x80\x77\x43\x3e\xcc\xa6\xf3\x1c\x4e\x82\x81\xaa\x27\x72\xdb\x55\xdb\xec\x44\xcf\x5c\x17\x5f\xd7\xc8\xee\x02\x11\x0a\xb5\xf6\xc3\xc9\x09\xd7\xed\x6f\x7b\xc0\xfb\xa1\xac\x08\x5b\xbd\x37\xc5\x9d\x31\x7f\xd3\xe3\x9c\xab\x77\xe0\x3c\xf5\xae\xa6\x1d\x12\x1f\xb6\xb9\x8f\xc8\xb8\xcd\xed\x08\x26\xce\x84\xe8\x44\x2d\xf1\x32\x8a\x02\x30\x6b\xf2\xd2\x7e\x52\xfe\xba\x76\x52\x0b\x6a\x86\x4b\xd8\x19\xe6\x33\x8b\x3a\xd5\xa5\x96\xcb\x95\x65\x45\xae\xed\x18\x42\x3e\x04\x4f\xc0\x68\xe5\x3a\x61\xf3\x3c\x09\x7e\x39\xf7\xc2\x1e\x8c\x2c\xf7\xd7\xff\x7d\x7a\x72\x76\xd1\xea\x93\xa3\x66\xd2\x0f\x42\xda\x54\x66\xd2\x22\xe5\x63\x00\x3f\x89\x00\x40\x51\xe9\x03\x59\x03\xe8\x72\x6a\x1b\x24\x4a\x17\x19\x83\xf8\x1f\xb0\xb9\x80\x09\xd5\x63\xed\x1b\x5c\x8c\x98\x11\x52\x8d\xd9\xc7\x06\x71\xb0\x9b\xa5\x9b\x1e\x75\xd4\x9e\xbb\x13\x9a\x45\x34\x22\x64\x84\x75\xab\xc6\x5d\x09\xad\x16\x9a\xbe\x26\x85\xfe\x2e\x55\x45\x7d\x1b\x75\x77\xdd\xe3\xf6\xdc\x7d\x0c\x14\x0b\x57\x09\x59\xae\x45\xdd\x13\x43\x0f\x22\x1d\xee\x6a\x6b\xec\xb7\x9f\xe2\x95\x77\xb3\x6d\xcd\x8a\xf6\x58\x99\xb1\x1b\x21\xad\xd0\x82\x35\x1d\x2e\x77\x25\x03\x7e\xf0\xee\x11\x24\x12\xbc\xf8\xc5\x7f\x93\xb7\xbd\x6f\x11\x23\x27\x90\x59\xc6\xb7\x69\xc1\xdf\x36\xb4\xdb\x8f\xab\x44\xfc\x46\x17\x22\xae\xfe\xb2\x08\xa1\x82\x7b\x18\xf7\x90\x33\x55\xa6\x29\x86\x14\xfb\x1f\xc2\xad\x2f\x62\x18\xf9\xd7\xbb\x1a\x35\x83\x90\xbf\x3d\x98\x0c\xc7\x4e\x5a\xbc\xd0\x83\x4f\xef\xe3\x6a\xab\xbd\x08\xe6\x4c\xc5\xad\x6b\x2a\x19\xec\xae\x84\x98\xdb\xbb\x12\x83\x1e\xc8\x96\x90\x74\xc2\x78\xc4\xa1\xcb\x95\x26\x8c\x0e\x3b\x34\x6d\xf5\xdc\xe6\x05\x78\x5d\x83\xaf\x25\xde\x04\xf0\xa2\x70\x5b\x12\x42\x4e\x68\x88\x26\xc9\x3c\x4f\x29\x92\x9d\x66\xfc\x96\x61\xb0\x6f\x92\xdf\x28\xb7\x18\x0e\x34\x75\xa1\xea\x5e\x68\x52\xc6\xe6\x6e\x55\xa7\xe5\x14\xdf\x78\xd4\x83\x3a\xbf\xdd\xa8\x87\x3d\x7a\xe4\x03\x1e\x13\x6a\x97\xfc\x98\x67\x0c\x5f\xa5\x02\x00\x89\x6d\xf2\x62\x72\xfe\xfe\xf3\xe1\xb0\xac\x12\xcf\x2b\x49\x6d\x47\xd3\xc3\x8b\xa3\xc3\x0f\x87\x17\x54\xe1\x53\x9a\xd2\x0c\x16\x63\x8a\x53\x0b\x4b\x32\x86\x69\x3b\x81\xa9\x13\x6d\xd0\x91\x3b\x50\x8f\x42\x08\xe5\x28\xe0\x07\xb9\xe5\x20\xe3\x57\xe8\xdf\x8a\x8f\x83\x47\xd0\xd4\x48\xeb\x6d\xce\xf6\xdf\x80\x25\xd6\xad\x1a\x63\xeb\x7b\x45\x2f\x45\x60\x21\xe9\x13\xa7\x19\x43\xd7\xbc\x9b\x63\xff\xcd\x08\x4c\x33\xcf\x8b\x3f\xe3\xc0\xe0\x91\xf1\xf9\x8a\x9a\x23\x68\x9f\x78\xee\x6d\x0f\xe4\x26\x4d\x00\x84\x4c\x2a\x28\x30\xa0\x9d\x05\x5a\x41\xd7\x43\x7c\xb1\x10\x73\x32\x06\xea\x91\x42\x3b\x14\x45\x72\x43\x9d\xa7\xc2\x63\xbf\xb8\xcd\xf7\x35\x90\x5e\xfb\xf9\x62\x84\x1d\xe5\x7a\x39\x72\xef\x3c\x03\x8f\x54\xeb\x2b\x30\xd7\xf1\xa5\x61\x8b\x13\xe8\xb1\xef\x49\x78\x21\x15\x1a\x42\xf8\x8b\x22\xbd\xc5\x38\x75\x4f\xc8\x1b\x6e\x7f\x6b\xa7\x4a\xc3\x4a\x65\x25\xa0\x97\xdc\x42\xec\x9e\xef\x1b\x3a\x74\x08\xcd\x8d\x87\xff\xac\x38\x7a\x97\x02\xf8\x17\xdd\x09\x84\x25\x3c\x04\x0b\xd5\x88\x79\xf1\x3a\xb8\xb2\xdc\xdc\xb6\x54\x23\xa0\xf4\xf0\x7b\xcb\x60\x3d\x60\x68\x30\x65\x62\xfd\x57\x47\x0f\xed\xea\xb5\x18\x97\x68\xdc\xaa\xba\x92\x90\x45\x83\x66\xee\x9b\xa0\xfd\xcc\x9d\x81\x12\x0f\x63\xe4\xce\x45\x4e\x7f\xb7\x7c\x3a\x3d\x3d\x4c\x26\xd2\x5b\xb9\xe3\x22\x38\xb6\x70\x22\x03\x98\x6d\xbb\x51\x5b\x6f\xab\xc7\x21\x35\x4b\x91\x3d\xfc\xf2\xf0\x8f\x7a\x1a\x8a\x34\x76\xcc\x4e\x92\xe0\x94\xab\xc9\x06\xb9\xc7\xc2\xde\x5d\x0b\x3d\x93\xf0\x11\xbb\x3e\xcf\x71\xee\x37\xae\x10\xa6\xb4\x57\x99\xbf\x0b\xa4\x76\xa8\x99\xc1\x30\xd7\xd0\xdd\x81\xc5\xba\x3b\xf1\xbd\xeb\x94\x98\xf4\x94\x1a\xf0\x78\x20\x3f\x3d\x24\x18\xd9\xbd\xea\xc0\x59\x19\xc3\x1b\xd5\xc2\x82\x26\x1a\x78\xfb\x75\x61\x77\xa5\xcf\x56\xea\x68\xe6\xa5\x6f\xd3\xe4\xf4\xb0\xd9\x9c\x47\x25\x5c\x52\xf6\x7c\xa3\x16\xd0\xbe\xa2\xf5\x2d\x95\x81\x1b\x6c\xb1\x16\x0d\xb5\xc8\xb5\xbd\x2b\x17\x9c\xce\x8a\x69\x34\x64\xff\x4d\xac\xa1\x61\x27\x40\xa3\x84\x32\xae\x05\x30\xf0\x1b\x31\x53\x91\xfe\xdb\x2d\x98\x02\x16\xcc\x81\x4d\x23\xeb\x85\x66\x62\xd3\xee\x4a\xcf\xfa\x04\xc7\x7d\x03\x23\xb2\xbe\x0a\x71\x92\xc3\xe6\x46\xea\x2b\xc3\xb3\x0e\x54\xa4\xb5\x4e\xf0\x88\xac\x6b\x27\x35\xae\x02\xd4\x07\xd0\x30\x7f\xed\x1e\x69\x51\x22\xc2\x42\x05\x74\x0f\x04\x81\x34\xc3\x7a\xe9\x10\xdc\x23\x4f\xd0\x4f\x8d\x21\xff\x35\xfb\xa2\x39\xea\xbf\xd1\x70\xa8\x16\xac\xcb\x22\xe1\x56\x44\x9e\x84\x66\xbb\x4b\x78\x88\x39\x60\xdb\x78\x4f\xc8\x06\xd2\x55\x84\xf3\x1b\x24\x76\x45\x4a\x87\xbb\x12\x9c\x81\x3c\x95\xa6\x03\x03\xf8\xe2\xe4\x62\x72\xf4\x19\x69\xd7\xa9\x13\xfb\xf4\x7c\xf2\xe1\xe2\xfc\x14\x12\xe1\x89\x04\xfc\x0b\xbe\xc4\x23\x9b\xfb\xc7\xc0\x13\xdb\x05\x97\x29\x84\xa7\xd6\xae\xe2\xd3\x7c\xd9\x23\x52\xc6\x95\x94\x6a\xe9\x36\x3e\x9b\x5f\x01\x75\xf5\x91\xbc\x16\xfe\x9a\x76\xed\xda\x31\x85\xcb\x7b\xc5\xe2\xcb\x77\x42\xa6\x42\xfd\x1e\xc3\x59\xdd\xd0\xd8\x78\x63\x3d\x18\xbb\xfb\xfe\xf7\xa2\x1e\x6e\x5b\x3f\x24\x91\x07\x81\x49\xa2\x85\x31\x08\x33\x4d\x1e\xb1\xc8\x83\x42\xa8\xae\xed\xf8\xd7\xa7\x4a\x4d\x1c\xdd\xe8\x0a\xcd\x15\x5b\x71\xc3\x66\xc2\x9d\xa1\xcb\x59\x26\x2d\xd4\x1f\xfd\x58\xe9\x2d\x7c\x33\xcc\x79\x74\x86\xce\x27\x05\x85\x14\xcf\xc4\x2b\xc6\x70\x7c\x98\xab\x50\x0d\x3c\x93\x89\x7b\x12\x9f\x9d\x8b\xff\x28\x85\x9a\x8b\xc3\x83\xc1\xa3\xc8\x5c\x81\x5f\x5e\x68\x03\x36\x5f\xa9\xe2\xb9\x67\xa0\xa5\x2c\x74\x26\x95\x9b\xb0\x3c\x5a\xc3\x08\x87\xb3\xd8\x05\x0e\xa7\x12\x57\x0f\xae\xac\xe3\x45\xc4\x44\x39\x6e\x6b\xb8\x98\xce\xc0\xfb\x19\xec\x54\xf4\x64\x58\x89\x2a\x29\x71\x53\xc5\x91\x54\xae\x8d\x28\xad\x02\x11\xe4\x99\x40\x29\x84\xbe\x07\x72\xd3\xec\x36\x21\x99\x08\xbc\xac\x15\x70\xd1\x21\x68\xe3\xbe\x7c\xcd\xec\x14\x4c\x89\x52\x44\xf0\xe9\x26\xdc\xb4\x87\xa3\x34\x22\x9d\xc5\xf2\x21\xa8\xa5\x6b\x41\xf2\xdd\x15\x7b\xbd\x65\x60\x7c\xd3\x28\x06\x42\xcd\xd5\x23\x80\x31\x5c\xe1\xcb\xb3\xa3\x18\xa2\xda\x87\xb3\xaa\x5b\x92\xa7\xcd\xaf\xb1\x59\x3e\x5e\xcc\x1e\x93\x8b\xba\x54\xbc\xeb\x63\xb9\x4a\xa5\x1a\x16\x22\x70\x51\xc1\x58\x87\xf1\xef\x2f\x0f\x0e\xa6\x13\x36\xe3\xf3\x2b\xa1\x92\x3d\x76\xb3\x72\x8b\x51\x4c\x57\x32\x65\x51\xe4\xe0\xa7\xdb\x9e\x3a\x3d\xb8\x5e\x29\x96\xf9\xd7\xaf\x39\x4e\x4a\x45\x93\xad\xd0\x02\xb6\x99\x0a\x74\x49\xaf\xf3\x6e\xd5\x86\xc2\x55\xf6\xfa\x60\x11\x18\x34\xbc\x63\xb1\x18\x87\x9e\xef\x52\x75\xeb\x31\x7d\xa7\x7e\x68\x95\x74\xcd\xd3\x72\xb8\xa8\x06\x5e\xfe\x4e\xca\xc0\xb5\x6b\xc1\xed\x6a\xb7\x92\xf7\xf7\xe3\x53\x98\xc5\xd3\x48\x14\xdd\x7a\x93\xef\x56\x76\xa1\xeb\xb3\xbe\xba\xe2\x26\x6d\x8a\x83\x70\x95\xdd\x51\x4d\xfd\xd2\x5f\x66\x2c\xd0\xe9\x7e\xac\xdd\x4e\x57\xe9\x85\xa4\x05\xb2\x12\x10\xe2\xb3\x53\x0f\xe2\x7e\xda\xb2\x61\xee\x94\x16\xee\x24\x42\x26\x1d\xc6\x10\xf4\x59\x38\xe1\xf5\x94\x22\x18\xa6\xab\x71\x1b\xfe\xa3\xd7\x12\x27\xa4\xe2\x93\xdb\x59\x04\x50\xb5\xac\x6d\x5b\x3b\xf7\x9f\x13\x88\x39\x67\x77\x8f\x6c\xd9\x1a\x6f\xdb\xa3\xe5\xec\x94\x02\xbd\x2e\xa4\x48\xf9\xf0\x25\x10\x04\x80\xcd\xb2\x53\x23\xf2\x34\x79\xfc\x58\x71\x42\x1e\x39\x56\x9c\x88\xc7\x7f\x5a\x27\xe5\x29\x3e\x6d\x5d\xce\xce\x9f\xb6\x2e\x64\xa7\x4f\xdb\x10\xe0\xa1\x3d\x76\x13\xf2\x88\xf1\xa1\x13\x80\xa5\xf3\x16\x8f\xad\x5b\x19\x78\x6c\x02\xcf\xb5\x48\x58\x52\xea\x26\x07\x25\x2f\x6d\x3e\x4a\x84\x15\x5d\x88\x3e\x6e\x2b\x38\x13\x72\x25\xd4\x22\x4f\x97\x62\x2f\x60\xa0\x02\x2c\x4d\x55\xd1\xcd\xc3\x2f\x2b\x2d\x54\x82\x47\xf4\xd2\xe6\x19\xb7\xd2\xcc\x57\xb5\x97\x84\xbe\x12\x4a\xe1\xa5\x11\x38\x99\x03\x02\x52\x57\xe3\xaa\x01\xb7\x43\xcf\xd4\x46\x2b\xe6\x85\xed\xd8\xc3\x35\x39\x10\xdd\xfe\x38\x11\x1d\xa1\xea\xb4\x84\x82\x1b\x73\x93\xeb\x61\x18\x1b\x58\xb0\xda\xcc\xaa\x4f\xef\x4c\x88\xe1\xa2\x70\xf3\xdb\xa9\x13\x6b\xe7\x98\x1d\x05\xe4\x06\x43\x41\x21\x04\xcd\x08\x6b\x58\xa1\x65\xae\xa5\x1d\xbe\xff\xee\xf6\x11\x3d\x04\x16\x30\x56\x88\xcc\x1d\xdf\x61\xf7\x67\x52\x41\x6c\xf2\x2b\x06\x0e\x0b\x88\xaa\x02\xd8\x28\xce\x12\x9d\x17\xa9\xb0\x63\x16\x42\x17\xfd\x0f\x2c\xd7\x3e\xbe\x3a\xc6\x1f\x86\x27\x36\x77\xab\xfd\xf0\xa3\x89\x6e\x80\x6f\x07\x9c\x08\x99\xc0\xe9\x07\x68\xcc\xc0\x93\x1d\x2f\x05\xd1\x30\x27\x39\xcb\x60\xd6\xb7\x89\xf4\x29\x3f\xe0\x0b\xb8\xc2\x3b\xac\x8d\xc8\x4f\xa1\x62\xd6\x1f\xdc\x28\x09\x49\xde\xea\xd5\x35\xdf\x40\xd8\x96\x8a\x95\x46\x8c\x7d\x24\xd5\xbe\xbf\xa2\xad\x59\x8c\xe8\x19\x19\x29\xf6\xee\xe4\xfc\x02\x2e\xb3\x73\x0d\x1e\xdc\xd1\x48\x73\x95\xe4\xd9\x08\x85\xdb\x9c\x2d\x85\x12\xba\x72\xb7\xe8\x88\x0d\x0f\xe1\x23\x45\x69\x56\x3e\x70\xa4\x4f\x87\x6c\xe2\x74\xcb\x8c\xbd\x15\x33\xcd\xcb\xf9\x6a\x1c\x62\xb3\xd0\x2f\xed\x2f\xd2\x84\x62\xef\xbc\xd6\x0a\x3a\xaf\xa1\xb5\x5b\x34\x9b\xb7\x57\xcd\x16\xc4\x5b\x2b\x74\xcf\xa0\x22\x77\x25\xb6\x0a\x5c\x2f\x7b\xe0\xc1\x09\x51\x90\x08\x65\xa2\x54\xb8\x64\x85\xa2\x80\xba\x67\x35\x5f\x56\xbe\x1c\xcd\x4e\x4b\xb3\x1a\x9d\x60\x9c\x67\xae\xdc\x1e\x31\x5f\x75\x7c\xac\x5e\xf9\x95\x7d\x8b\xef\xb6\x10\x3c\xd2\xb7\xf2\x14\xd6\xc7\xa3\xed\xe4\x8d\xec\xb1\x27\x51\x03\xa3\xc9\x1e\x25\xea\x4a\x0c\x5f\x4d\x1f\x6d\x87\xad\x0b\x78\x5c\x6f\x40\xc2\x23\x6c\x12\x6d\x47\x1a\x0c\x94\x28\xcd\x0e\xf2\x3b\x12\x2f\xb6\x94\xda\xb1\x41\x55\x3a\xdd\x8e\x65\x77\xb2\x34\x30\x46\x7c\x27\x8d\x23\x3c\x49\xdd\x8f\xca\xe6\x79\x99\xe2\x3e\x34\x73\x9b\x28\x9f\xaf\xe8\x30\x93\x03\xc0\x21\xb9\x96\xfe\x0a\xa5\x71\xab\x7d\x95\x2b\x65\x45\x8c\x86\x85\x8b\x8e\x60\x42\x76\x2c\x59\x96\x9b\xab\x67\x86\x95\x4a\xfe\x47\xe9\xc6\x03\x3a\x9d\xd9\xd0\xd8\x31\x27\x29\xbf\x12\xc3\xcd\x50\xc4\x01\x4c\xf9\x4c\x50\xf8\x30\xdb\xca\xee\x7c\xb4\xe8\xc8\xd6\xea\x2e\xb4\xcb\xd7\xd7\xc2\xc3\x88\x46\xcf\xec\x5a\xbc\xa6\x34\x5d\xa6\xcd\xd4\xb0\xa5\x9c\x79\xa3\x22\x42\x49\xf8\x8b\x88\x00\x73\x09\xb1\x8c\xf4\xb7\xf6\x2a\xd8\x3c\x67\x99\xb3\x76\xf2\x02\x83\x9d\x6c\x1e\x58\xca\xf6\x58\x91\x0a\x6e\x7c\x26\xa6\x44\xd7\xb1\x6b\xed\x36\xb5\xee\x4a\x76\x2d\x05\x66\x8c\x96\x78\x67\x98\x08\x76\x02\x15\x08\x35\x66\xaf\xa5\xb5\x70\x43\x2f\xaa\x0d\x3f\x12\xda\x76\x6a\x2c\x81\xe5\x03\x11\x37\x7d\x2a\x28\x44\x6d\x79\x6b\x33\x57\x70\x59\x7c\x26\x8a\x1c\xcc\x8e\x67\x24\xc5\xf4\x6b\x21\xf1\xc2\xc6\x67\x43\x04\x04\x86\x89\xa7\x1e\x06\x80\xa7\x87\x5f\xf5\x9a\x3c\x66\x35\xc7\x54\x0c\x84\xdc\x64\xbc\x5c\xbc\x62\x4f\xab\x71\x9d\x07\xfa\xfe\x7e\x7c\x21\x0b\xf2\x2e\xf0\x49\x5b\xd1\x5a\x2f\xd5\x32\x83\xa3\x67\x9e\x67\x19\xb0\x88\x94\x46\x24\xc1\x75\x6e\xc6\x11\x74\x1d\xf0\xa1\x47\xfc\x19\x52\xbf\x08\xc6\xd3\x74\x0f\x0d\xd1\xa4\x82\x46\x1b\x48\x06\x7c\x51\xbb\x96\xa0\x0d\x50\x03\x17\xbc\x0b\xb1\x4a\xb7\x4b\x71\x1f\x49\x2a\x36\xfd\xb7\xd3\xe9\xd9\xe1\x87\xe9\xf1\xc5\xe4\x88\x05\xc2\xe1\x04\xe3\xa2\xd1\x9e\x76\x9a\xe7\xa5\x75\xeb\xb3\x1c\xbc\xbf\xd5\xea\xd3\x81\xff\x79\xff\x0d\x2c\xff\xd7\x42\x1b\x7f\xf1\xfd\x41\x2a\x99\x95\xd9\x47\xfc\xe5\xcb\x97\x31\xfb\x5b\x5e\xea\x10\xfd\x25\xeb\x57\x77\xd5\x3b\x4f\xa0\x89\x9b\xdb\xce\x54\xf6\x04\xce\x8d\x6a\x45\x52\x6d\x50\xda\x53\xce\x4b\x1b\x80\x4d\x3d\xdb\x3c\x09\x1a\xd3\x60\x4f\x84\x00\x7a\x77\x18\x48\x64\xac\x6f\x04\x3b\x60\x2d\x6e\x6f\xcc\x0e\x57\xf5\xad\x4d\xb3\xb8\xaf\x65\x22\x4d\x84\xb3\xf1\x43\x44\x8b\x89\xa4\x49\x75\xea\x79\x72\x11\xa9\xf8\x70\xdc\xc9\x74\xc5\x35\x80\x34\xeb\xdc\x00\x21\x1b\xcb\xf5\xd2\x8c\x3f\xa9\x03\x91\x0a\xe4\x31\xb6\x68\x03\x69\x91\xe5\xd7\x02\x29\xac\x2b\xc2\x3a\x38\x6e\x98\x3d\x18\x25\xf0\x1a\x84\x21\xbb\xc5\x94\x17\x45\xb8\x89\xae\x6a\x2c\x15\x6c\xe8\x70\x25\xff\x49\x4d\x30\x14\x88\x85\x98\x20\x76\xc3\x95\x4f\x6d\x48\x85\xbf\x2e\x6f\x47\x9f\xf9\x0b\xb5\xa8\xc1\x4d\x44\x20\xe2\x91\x3a\x81\xdc\x6a\x0e\xe1\x1f\xf5\xf8\x0a\x51\x07\xc1\x59\x42\xac\xb2\x75\x8d\x76\xc7\x19\xc8\x13\x3b\x02\xd4\x39\x1f\x10\xbf\xc6\xec\xc3\x31\x39\x19\x11\xb6\x21\x99\xc8\x93\x01\x09\x65\x17\x42\x2b\x8b\xdc\x92\xee\x2d\x88\x69\xf6\x5b\xd1\x9a\x94\x52\x79\x9b\x64\xc6\xf5\xf8\x93\x3a\x97\x2a\x89\x41\x9f\x42\xfb\xaf\x1b\x82\x2a\x29\x54\x9c\x34\xa8\x99\x3d\xfc\x73\xbe\xb2\x42\xfd\x85\x5c\x89\x25\x80\x56\x2f\x72\x0d\x97\x9e\x37\x5c\x27\x30\x05\x0a\x6e\xe5\x4c\xa6\xc3\xdd\x22\xe0\xd6\x40\x63\x39\xc9\x85\x51\xcf\xaa\x5b\xd3\x90\x61\xe9\xf6\xf1\x2b\x71\x4b\x7b\x0d\x84\x8e\x44\xaa\xc0\xa8\x69\xec\xc3\xaf\xf6\x0e\x67\xc6\xb4\xca\x8a\x74\xdf\xf0\x3c\xa6\x6a\x7b\xa0\xeb\xae\xf1\x8d\xe6\x6c\xf0\x0b\xac\x38\x6c\x40\xe8\x41\x89\xe1\x32\x60\x28\x77\x1c\xdf\x4d\x2d\x3c\xc6\x47\xa5\x57\xe7\x77\xf0\x53\xe0\x31\xb9\x22\x54\x14\xac\x33\x33\xb8\x4b\x61\x98\x3a\x98\x79\x12\x18\x9f\x31\xd5\xc7\x72\x6d\xc7\x8c\x9c\x28\x08\xe9\x50\x8f\x82\xf8\x4b\x47\x8b\xf0\xbc\x6f\x03\xe3\x48\xc6\x8e\x45\x89\x31\xee\x3e\xed\x63\xcc\xe8\x61\xd8\x08\xb5\x30\x91\xff\x22\x0e\x3c\xa2\x75\x98\x50\x88\x91\x5c\xe6\x56\xcd\x31\xd0\xda\xef\xfd\x54\x12\x42\x95\xea\x87\xd1\x8c\xae\xe0\x4a\xe7\x4a\x60\x98\x73\x6d\x6f\x27\xbd\xc1\xb2\xf0\xc1\x79\x3c\x49\x46\xe8\x4d\x1c\xb9\x85\xdb\xd3\x32\x2c\xa5\xb1\xfe\x9a\xb3\x23\x56\xe2\x42\x16\xc5\x46\x28\xde\xba\x40\x0c\xbe\xe3\x86\x39\xeb\xc2\x48\x9b\xeb\x5b\xd7\xc3\x58\x87\xee\x0a\x74\xc9\x2d\x4f\xd9\x07\x91\xe5\x9a\x9a\x7c\x6f\x85\xe1\x99\x35\x85\x80\xaf\xd1\x25\x86\x67\x79\xa9\x80\x93\x20\x03\x81\xec\xb9\x18\x2f\xc7\xec\xe5\x8b\x3f\xfc\xe9\xc3\x1e\x7b\xf9\x76\x8f\xbd\x7c\xf1\x96\xca\xbe\x3d\x00\xc2\x6c\x57\x95\x60\xe7\xbe\xb2\x22\xe5\xf6\x8e\x3d\xbf\x1b\xbf\xde\x94\x32\x44\x8f\x40\x58\x31\xe7\x0a\xfd\x9c\x4f\xa3\x18\xb2\xfb\x46\x36\x63\x60\x4c\x68\xea\x8a\x6e\xb2\x97\x2f\xde\xb2\x99\xb0\x9a\xd3\x43\x05\xf4\x56\x65\xe6\xa6\xf4\x1a\x3d\x7f\x3c\x92\x8c\xd9\xe8\xa5\x1b\x29\xda\x6d\xe2\x48\xb4\x57\x2a\x18\xa2\x6e\xf7\x84\x36\xd3\x19\xe0\x4e\xff\x3b\xbe\x4a\x9b\xf1\x51\x21\xd0\xca\x1d\x07\x46\x2f\x99\xb1\x62\x65\x6b\xe1\x86\xa5\x9a\x89\xa5\x16\xea\xce\x0a\xf6\x41\xa8\xa5\xa0\xd6\x8f\xa7\x52\x9f\x3d\x3f\xc0\x8c\xc2\x57\xd5\x33\xea\xbb\x3c\x59\x9b\xd8\xf3\x90\x5e\xf8\xaa\xf6\xb4\x73\x84\x55\x4d\xd5\x5d\xfc\x80\x6b\x2a\x76\xd1\x05\xae\xcb\x5d\x77\x02\xf5\xac\xa2\x89\xdb\x44\x56\xa6\xdd\x6c\xe8\xb3\x0a\xc2\x5a\x07\xaf\xf3\xed\x0b\xde\xe5\x64\x52\x59\xa8\x99\x34\xc6\xd9\x6e\x0b\x9d\x67\x9e\xed\xb0\xeb\x0a\xe7\x72\x32\xa9\x25\x03\x88\x55\x6a\xdd\x59\xe0\xbd\x27\x27\x84\xd7\x0c\xe0\x0b\x10\x55\x9f\x1d\x0d\xb2\x1d\x7c\x9c\x19\x5e\x40\xc6\x38\xdf\x18\x34\x5f\x25\x1d\x05\xbe\x46\x63\xb5\xe0\x19\x49\x19\x70\x79\x76\xb4\x17\x98\x2f\xd7\x23\x77\x63\x0c\x7c\x3d\xaf\xc8\x9d\x42\xd9\x39\x08\x95\x01\xed\x05\x57\x88\xce\x1b\xc6\x86\xde\xe1\xdb\xd5\x74\xc7\xe1\x18\xb5\x5e\xe4\xda\x59\x59\x22\x19\x3b\xe3\x45\x64\xa2\xe2\xa3\x74\x92\x42\x3a\x3d\x64\xdd\xf4\x68\x59\x63\xd3\x5b\x6f\x9c\x37\x40\x31\x7b\x7b\x29\x52\xf7\xdf\xe8\xeb\x62\x07\xdc\xa0\x0a\xbc\xce\x57\xe9\x95\x30\xa8\x01\x24\xbf\x13\xed\x3e\x9f\xbc\x9d\x92\x19\x99\xd3\xb3\xef\xa7\xc7\x07\x97\xc7\x6f\x89\xcc\xcb\xcb\xf3\xe9\xd9\x16\x12\xbc\xe3\xcb\x8b\x1f\xe2\x4b\x5b\x84\xd0\x3c\x6d\x75\x29\x1d\xba\xd0\x24\x71\x28\x80\x28\xa9\x42\xfa\x24\x47\x02\x98\xb6\xb0\xd2\x31\x78\x0d\x90\x77\x84\x74\x58\x4c\xca\x05\x95\x31\xdb\xf0\x58\x3a\xbb\x12\xe8\x5e\xe2\xa8\x5c\x13\xbf\x55\x4f\xcc\x6d\x73\x56\x93\x95\x99\x00\x7a\x16\x5c\x11\x02\x6d\x8f\xbf\x5f\x16\xa6\xc8\x15\xe9\xe1\x9e\x9a\xa0\xd7\x95\x90\x8a\x39\xd3\x0c\x24\xf1\xd2\x78\xc7\x8b\xcd\x35\x9c\x52\xdd\xfa\xcf\x95\xbd\x71\x47\x80\x99\xb8\xcb\xb7\xce\xa7\x4a\x57\xcf\x86\x32\xe7\x96\xf4\xac\x4d\xd6\x19\x53\x9a\xdd\x05\x99\x5d\xde\xbe\xed\xf4\xf1\x56\xb5\xe2\x29\x73\xcf\x5f\xee\x3d\x0b\x17\x75\xcf\x7a\xe2\xe5\xc7\x23\xe2\x36\x3d\xfc\xfd\x5b\xad\x82\xfe\x88\xfa\x75\x6d\x2d\x04\x46\x0b\xb6\xbf\x0f\x1e\x13\xef\xfb\x18\xb3\x53\x74\x51\xa6\xf9\xd2\x2d\xdb\x9d\xd7\x92\xfb\xfb\x00\x2c\xee\x8b\xd6\x79\xa6\x02\x3a\x63\x54\x1a\x3d\x94\xe0\x6c\xa8\x65\x23\xfa\x0b\x42\xbe\x5d\xdf\x7c\x66\xdd\xc1\xbd\x16\x04\x50\x4b\x0d\x80\x97\x80\x9a\x3a\xfc\x45\xce\x97\x10\x28\x78\x0c\x12\xe0\x38\xe0\x5d\x7d\x33\xae\x6b\x61\x87\x75\x51\x6b\x9f\x64\xb6\x14\xc8\x1e\xde\x6f\x34\x16\x5c\x9b\xf5\x5e\x0e\xb9\x75\xd1\xe1\x44\x21\x99\x1f\x48\x57\xb4\xd1\xcb\x1b\x45\xeb\xfd\xbe\x14\xae\xba\xee\xd0\x96\x4a\x35\x8d\x94\xeb\x62\x03\x95\x75\x63\xf7\x64\x6f\x2f\x0f\x0f\x28\x2f\x09\x59\x0d\x06\x19\x70\x0f\xca\x88\x8b\x45\x37\x6a\x7c\xe9\x33\x45\x3b\x30\xb6\x6b\x70\xad\x61\xe1\xf3\xf8\x11\x4a\xac\xb2\x8e\x46\x47\x48\xb9\x3a\x52\xe4\x3a\x62\xb7\xd3\xf1\x91\x40\x7c\x3f\xd4\xb5\x81\x86\x34\x9b\xd5\x79\xac\x5f\x57\xe8\x3a\x57\x8f\x07\xe1\xbb\x54\x33\x4c\x57\x5e\xbb\x01\xef\xf1\x45\x5e\x4b\x8f\xe9\x05\xc1\x16\x6d\x90\xc5\xeb\xf9\xac\xe5\x62\x25\x66\xf4\x67\xe8\xd0\x04\x6f\x4c\x2d\xda\xcc\xf5\xc7\x68\x16\xb5\x65\x92\xef\xa8\xb5\xeb\x55\xf7\x29\xe0\xd4\x80\xd6\xf6\x06\xb3\xa5\x5f\x1d\x36\xd2\xc8\xbf\x62\x0b\x03\xb6\xf8\x37\x6d\x61\x80\x8a\xda\xa9\x89\x6b\xd7\xdb\x38\xa0\x7c\xfa\x7b\x57\xbc\xfd\x9a\xfa\x4d\xde\x21\x2f\x60\x84\x1b\xdd\x63\x75\xa1\xf3\xab\xb6\x29\x51\xe5\xe9\xf5\x51\x61\xee\x6a\x4d\x53\xf2\x5c\x31\xf1\x42\x7c\x75\xa1\x72\xb7\x9d\xcc\x74\x4e\x23\x53\xa0\xf8\x56\xf8\x16\x5c\xad\x48\xa2\x9d\xaf\x05\xc3\x1a\x1a\x92\xd4\x9a\xd1\x8a\xbc\xca\x15\xa3\x69\x80\xbe\x3e\x0a\x4c\xd5\x73\x19\xbf\x65\xa9\x80\xb0\xb8\xa2\x30\x2c\xe3\x45\x81\x24\x93\x6b\xe1\x5f\xd7\x65\xaa\x84\x76\xdb\xe3\x9f\x19\xf8\x95\xe4\xe6\xf1\x9d\xa6\xc5\xf2\x37\xe5\xa6\x6e\x80\x82\x49\x75\x90\x37\xdc\xac\x85\xce\xe7\x42\x24\xa4\x6f\x95\x1b\x46\x0c\x16\xd8\xe9\x13\x7e\x57\x86\x58\x2b\xef\x51\xc5\x84\xec\x44\x8a\xca\x39\x51\x35\xaa\x72\x29\x43\xfa\xf1\x1e\x73\x16\xe5\x2f\x2b\x9d\xc4\x1f\xc0\xd3\x15\xc0\x31\x7a\xb3\x80\xc1\x31\x72\xc3\x8c\xf6\x3e\x6d\xc4\x05\x64\x1f\xbc\x3f\x17\x4c\xbe\x45\xae\x2d\xc2\x02\x10\xee\xdd\xea\x83\xad\x7d\x97\xc6\x40\xdf\xfe\x21\xbe\xf9\xc8\x5f\xeb\xf1\x6a\xdc\x6f\xa7\xc3\xfb\x96\xd3\xc0\x6c\xa7\x3f\x86\x9e\xf6\x58\x60\x6b\xdb\x2e\x54\x59\x46\x6b\x63\x68\x1f\xf5\xe3\x4b\xf6\xee\x89\x88\x12\x56\x81\x5b\xd6\xaf\xe4\x7d\xfb\x6b\xca\x7c\x8d\x96\xc7\xed\xf8\x37\x6c\x79\xc0\x80\xfc\x6a\x2d\xbe\xbf\x1f\xd7\xe3\xc3\xbf\x7c\xf9\xce\xbd\xea\xc6\x5a\x9c\x1d\xbb\xb5\xbc\xd5\xe6\xa0\x5a\xde\xad\x45\xdf\xb6\x8b\x9f\x0b\x31\x87\xcb\x75\x88\x0e\x59\x71\xc3\xf2\x39\xc4\x38\x27\xaf\xc0\xdb\xe1\xc3\x31\x28\xdf\x84\xc4\x7b\xd4\x1b\x40\x04\x12\x3a\x04\x73\x40\x70\x07\x2f\x17\x4d\x19\x84\x0e\x30\xe3\xd3\xb4\x91\xf2\x26\x16\x52\x79\xc0\x57\x1f\x25\xc0\xf5\xb2\xcc\x04\x99\xe6\x7b\x98\x05\x46\xdd\xf0\x22\xab\xc3\x94\xfa\x43\x2c\x4b\x84\xaf\xad\xe3\x5a\x28\x6a\xe4\x06\x85\x57\x28\xa6\xd5\x1d\x6f\x39\xca\x1c\x34\x2a\x80\xc1\x1c\xea\x6e\x91\x41\xd4\x9f\xe6\xf3\xab\xb5\x04\x00\xc0\xee\x80\x53\x28\x42\x59\x90\x56\x6e\x2c\x21\x94\x35\x85\xd0\xda\xa3\x0b\x4e\x2a\x24\x0a\xb4\x58\x01\x53\x32\x7b\xf8\xe7\x32\x95\x5d\xa6\x54\xc6\x0b\xc6\xd9\xc5\x7e\xb7\x75\x5a\x9d\xd7\x70\xfb\xbd\xd8\xef\x6b\x8c\x82\xfc\x1e\xf6\xef\x7a\x0d\x03\xec\xdd\x8d\x2a\x5e\x7d\x02\x80\x35\xc6\x58\x00\x55\x2b\xdd\x4b\x3e\xfa\x7c\x72\x7a\x8a\x3f\x1e\x9c\x7c\x98\x1c\x1e\xb3\x1f\x47\xa3\x18\xc0\x1e\x42\xc0\x7f\x72\xbf\x42\xaa\xc6\xe9\xe4\xe2\xdd\x4f\x9f\x3e\x29\x14\xb9\xd1\x5f\xc3\xaa\x1a\x8d\xe0\xfe\xfe\xf4\xe4\xec\x02\x45\x4e\xff\x6d\xf2\xe1\xf4\x68\x7a\xee\xc5\xb4\xc9\xc8\x6e\x47\x40\x9b\xf1\x33\xcf\x8a\x54\x8c\xe7\x79\xc6\x3a\xff\xf7\xdf\xeb\xaf\x0e\x12\x5b\xeb\x87\xec\x16\x80\xde\x1b\x62\xf1\xb7\xf1\xd3\x49\xf7\x3d\xbc\xc8\xf3\x56\xe9\xdf\x2d\xf2\x7c\x60\x0d\xd0\xbb\xff\xf2\xe2\xc5\x8b\x2d\xdd\xf2\xca\xbd\x33\xd0\x77\x63\x5a\xc8\xf2\x7a\x1a\x46\x9e\xd4\x2a\xfa\x6a\xea\x61\xb4\x1d\xcb\x84\xd9\x95\xa6\xaa\x85\xfa\x09\x27\x95\x97\xa4\xb6\x11\x58\x79\x14\x8a\x2e\xc5\x3a\x98\xab\x60\x17\x7d\x04\x73\xd5\x6b\x8f\x81\x91\xc0\xe5\x74\x68\x8a\x8a\x6d\x71\x8b\xee\xd7\xa6\xb1\xba\x54\x3e\xd8\x46\x24\x15\xe7\xc1\x42\xaa\xa5\xd0\x85\x96\x0a\x02\x2e\x32\x3e\x0c\x94\x02\xe1\x85\x18\xdf\x0a\x3b\x50\x2d\xf2\x3d\xf0\x85\xa2\xd4\x5e\xb9\x20\x2d\xfe\xaa\x41\x55\xe0\x81\xc3\x1d\xe7\x3a\xc3\xaf\xb7\xb0\xb0\xef\x52\x67\x67\x7e\xc9\x1a\xa9\xfa\x2e\xf2\xb7\x24\x8f\xac\x3b\x43\xfa\xd7\xa0\x6a\xd0\x8f\xc2\xe4\xa5\xde\x92\x45\xf0\xb1\x82\x6c\x3c\x13\x06\x0b\xa8\x76\xd7\xe8\x6e\x5a\x6c\x4f\x64\xa8\xa9\xd0\xed\x9b\xed\xaf\x40\x2b\x72\xea\xb6\x4e\xff\x38\x04\xe9\x74\xf0\xa7\x41\x38\x6d\xff\x6f\xda\x94\xaf\xc4\xd9\xb5\x02\xb4\x6c\xd8\x28\x86\x27\x31\x57\x65\xbf\x0d\x41\x4e\xbd\xa7\xbe\x02\x55\x50\x9f\x75\x36\xb4\xb8\x32\x85\xef\xef\xc7\x71\x01\xdc\x66\x8e\x6f\xb6\xe0\xf5\x16\x39\xdd\x5a\x34\x88\xa0\x20\x27\xc1\x73\xcf\xbe\x83\x07\xfb\xee\xf7\x8b\xdb\xe2\x09\x29\x68\xfb\x7c\xa7\x2d\x4a\xb7\xde\xdb\x3c\x66\x14\xf4\xa2\x72\xdd\xe1\x1b\xf7\x38\x81\xf7\x3d\x5f\x6f\xe8\xdc\xf3\x60\xdd\xf3\xe0\x5c\x69\xbc\xbe\xe1\x0d\xf4\x8f\x6d\xea\x59\xdf\x19\x37\x37\xc6\x41\x6e\xac\x75\x2d\x7d\x0e\x65\xa4\x14\x7a\xd4\x20\xf0\x8a\x6e\xca\xdc\xe5\xbb\x93\x7e\xca\x0d\x45\x87\xcf\x78\xd2\xb1\xb8\xa9\x70\xdf\x65\xa0\xed\x3e\xf4\x91\xdd\xd9\xef\x8e\x73\xb7\xfe\x75\xc3\x99\x6d\xec\xad\xdf\xee\xfa\x63\xa3\xb1\xbd\x10\xca\xb3\xdf\xf6\x2a\x24\x74\x5e\x63\xf9\xde\x24\xa6\x27\xd7\xff\xed\x9d\x11\xce\x2a\x5b\x6a\x08\x74\xe1\x2d\x55\x10\x9a\xa7\x39\x8f\xd7\x5f\x0b\x09\x94\xb7\x3a\xcf\xc0\x38\x39\xe5\x76\x45\xae\x9a\xef\xf2\xf9\x2a\xe5\x49\xb5\xd7\x8f\x90\x1f\x09\xfe\xae\x17\xdf\x52\xef\x6e\x7b\x75\xb3\xf6\x1d\xf7\xe9\xa0\x42\xbd\x4f\xfb\x56\xb9\x5e\x66\x7b\x15\x3f\xc8\xe2\x8d\x4c\xc5\xeb\x5b\x2b\xcc\x97\x2f\x7b\xee\x27\xf7\xf7\x7e\x5e\x2a\xeb\x0e\xba\xae\xef\xfb\x56\xbd\x45\x96\xff\x12\x84\x52\x86\x2f\x49\x96\x2e\xaa\xc8\x63\x88\x6e\xbe\x16\x8f\x4d\xd0\xaa\x06\x68\x7d\x2d\x01\xa4\x0a\xa2\x00\x6e\x6b\x79\x68\x6e\xa9\x02\xda\xc8\x8e\x58\x8c\x4d\x35\xeb\x88\xd5\x87\x2b\x8d\x44\x6c\x79\x7d\x2d\x29\x55\xe2\xc1\x97\xdd\xa3\x59\x08\xd2\x88\x69\xa4\x18\xd6\xbe\x10\xc6\xde\x95\x40\xde\x42\xb7\x84\xb3\x5c\x89\x11\x04\xff\x05\x3c\x18\xd7\xa2\x34\x5f\x92\xd0\x7c\x53\xa9\xd8\x54\xaa\x8c\xa7\x57\x42\x29\x08\xe5\xab\xee\x73\x54\x26\x52\xbc\x23\x09\xed\x22\xeb\xae\xad\xf7\x96\x2f\xa9\x41\xd8\xef\xfc\x74\xe1\x04\xd0\x15\x01\x3c\xa8\xfb\x24\xb8\xa2\xf6\x8c\xde\x8b\xd5\xae\x17\x1f\x10\x9b\xe7\x8e\x8c\x7d\x18\x4b\x62\x5d\x78\xd5\x1a\x5a\x46\x4b\xa5\x09\xef\x50\x10\x15\xde\xda\x9d\x8a\x1d\x4a\xc3\x2b\x84\x00\xbc\x7b\xaf\xf3\xdf\xc5\x55\x97\x44\xff\xab\x46\xb9\x5b\x4a\x9a\x84\x74\xf5\xd2\x1d\x55\x36\xe1\x68\xe0\x4e\xb6\x57\x65\x67\x2d\xe5\x3a\xaa\x41\xac\x02\xe4\x15\xda\xbe\x21\x34\xab\x3a\x27\xca\xb6\x56\xf7\x71\x7a\x76\x7e\x78\x42\x06\x2b\x13\x85\x78\x2a\x13\xf6\xd7\xf3\x93\x63\x96\xcf\xfe\x2e\xe6\x91\xec\xb1\x66\xa3\x8e\x3c\x4f\xe1\xdc\x87\xf5\xfb\xf0\x7c\x56\x70\xcd\x33\x61\x85\x36\x7b\xd5\xcc\x13\xd2\xae\x00\xec\x6b\x94\x4a\x25\xdc\x22\x26\x15\x50\x60\xa4\x62\xcc\xde\x00\xb7\x77\xea\x86\x7b\xbe\x60\x95\x37\x91\x96\x6b\x84\x60\x49\x3e\x87\xdb\xad\x2a\xf2\x10\xae\xcd\x68\x86\x70\x32\x2b\xe6\xe1\xd7\xd4\xca\xa5\x30\xd0\xe0\xd1\xc9\xec\xef\xe2\xca\x82\x7b\x34\xb0\xd6\x14\xe2\x4e\x2e\x24\x86\xd8\x36\x73\x11\xa2\x52\x0a\x43\x28\x84\xb2\x37\x02\x61\xcd\xac\x58\x6a\xc8\x80\xcd\x3d\xcc\x19\x7a\x8f\x31\x4a\x94\x58\x61\x62\xc8\x2b\x90\x33\x1d\x49\x63\x9b\xe9\x88\x42\x53\xf5\x33\x4f\xc2\xe1\x56\x77\x19\x72\x45\xaf\xea\x1d\x04\x6b\x27\x37\xec\xef\xe2\x46\xc8\x54\x2e\xc5\x1a\xf7\x39\x35\x7e\x9e\x7a\x28\x48\xf5\x7f\xf6\x10\xf8\x3f\xe9\xcb\x97\x18\x29\x0d\x50\xb1\xcf\x78\x51\x8c\xc2\xb9\x74\x04\x08\xa6\xcf\xd8\x9c\x2b\x0f\x8f\xa2\xc4\x92\x5b\x79\x4d\xad\xf8\xdf\x8b\xb0\x7f\xbf\x21\x85\x25\x5c\x2f\xfc\x86\xe7\xa5\x75\xa4\x82\x44\x32\xcb\x63\x7a\x9b\x09\xef\x28\x7a\x9f\xf9\x88\x04\x3b\xa7\xdd\x20\x75\xef\x85\x52\xce\x00\xa9\xd3\xcc\x90\xf2\x0c\x6d\x2c\x12\x65\x9c\x5d\x97\xe6\x4b\xb3\x17\x12\xfa\x31\x8b\xdd\xdf\xa3\x19\x04\x8a\x0e\xc9\xc4\xe4\xe6\x57\x25\x1c\xed\xb9\x73\x9f\xeb\x47\x01\x36\x5c\x8d\x4a\x0f\xb0\xdc\x31\xeb\x26\xab\xc2\x6e\x3d\x95\x00\xb5\x31\x7e\x3f\x39\x3b\x3e\x3c\x7e\x8b\x5c\x5c\x68\x65\xb8\xc9\x0f\x26\x68\xb4\xe6\xb8\x61\x3c\x86\x28\xe0\x0c\x2f\x30\xf3\xcf\xb0\x95\x5c\xae\xd2\x5b\x96\x48\x33\xcf\x4b\xcd\x97\x22\x01\x51\x7f\x6b\x08\xc8\xf8\xad\x1b\x47\xd7\xd2\xc8\x10\xb7\xef\xf6\x0c\x13\x61\x1f\x00\x83\x67\x9e\x6b\x5c\x44\xb0\x7a\xb3\x12\x69\xca\x56\xd2\x58\x3a\x73\xd5\xa9\x7f\x19\xd4\xff\xe8\x63\x5b\x27\x6a\xc9\x67\x02\xcc\x5b\xc3\xde\x7b\x03\xd3\xc0\xc1\xd8\x47\x4f\x20\x25\x83\x6f\x04\x24\xf0\x27\x48\x7a\x9d\x60\x18\x3f\xb7\x90\x07\xc3\x18\xe0\x23\x04\x11\xec\xea\xe1\x9f\x10\xf0\x8f\x11\xc0\x2a\x71\xa6\xbf\x71\xdf\x62\x06\xeb\x91\x44\xb3\x5a\x22\xad\x49\xc6\xce\x5d\x03\x8a\xc8\x19\x21\xf4\x82\x9b\x2d\x31\xf8\xe1\x73\x20\x51\x60\x1e\x11\xd0\xb8\x31\x65\x06\xe0\x11\x6b\x08\x52\xde\x31\xe5\xb3\x6b\xa0\x77\x63\xfe\xd7\x86\xc3\x09\x70\x24\x58\x9a\xab\xa5\xd0\x35\xb6\x36\xb7\x5c\xa3\x2d\x8b\x62\x60\x04\xe0\xfd\x2a\xfb\xc3\x8b\x17\xee\xf9\x9f\x5e\xbe\xd8\x0b\xc0\x74\x9b\x72\x23\x59\x03\xe6\xba\x24\x7b\x10\x54\x89\x2c\xed\xc5\x8a\x2b\xff\x6d\x01\xfb\x63\x3f\xcd\xcb\x84\xbd\xc9\x4b\x95\xe8\xdb\x67\x86\x25\xdc\xf2\x19\x37\x62\xcc\x26\x69\xca\xae\x54\x7e\x93\x8a\x64\x49\x82\xff\xc6\xbc\x37\x04\x8a\x48\xf0\x9a\xb5\x21\xb4\x4e\x17\x1c\xbb\x09\xa3\x9f\x8c\x9f\x7b\x11\x56\x8c\x04\x0d\x08\x03\x8b\x01\xf2\x0b\xe6\xe9\x57\x80\x74\x38\x64\x38\xa0\x3e\x94\x66\x29\x96\x1c\x89\xc4\x10\x2b\xc3\xad\xdb\x55\x02\xdc\x9a\x63\xee\x5a\x68\x9f\xbd\x04\x11\x29\x6c\xed\xce\x0e\x97\xc8\x4c\xac\x74\x9d\xa4\x0e\xf6\xce\xa4\x7a\x2c\x2d\x7e\x18\xf7\xd3\x9f\x5e\xbe\x60\x5e\xa2\xb0\x63\xf6\x46\x68\xb7\x21\x81\x86\xa0\x15\x90\xc2\xd7\x88\x69\xd6\xf4\x59\x0a\x44\x77\xf0\x4c\x67\x30\x82\xdd\xc1\x8b\xc3\x36\xe5\xf6\x35\x65\x1e\x7e\xb1\x77\x71\x03\x6a\xf4\x35\xb8\x4e\xd4\x8c\xab\x2b\xcf\x20\x96\x72\x63\x84\x62\x2b\x6e\x31\x21\x30\xa4\x55\x7f\x2f\xe1\xf7\xcd\x04\xd6\x3a\x9f\xb2\xa8\xfc\xad\x32\x84\x9c\x3b\x7d\x02\x89\x5f\x04\x67\xf0\xcd\x2b\x4d\x53\x9b\x08\x8d\x41\xec\x7a\x5f\x65\x76\x45\x7c\xb8\xf6\xd9\x85\xd3\x86\xa7\xe9\x66\xbe\x2f\x26\xaa\x7f\xe5\x89\xb3\xdb\x7c\xa9\x74\xac\x4f\x98\x30\x8b\xc6\xec\x38\x67\xdc\x5a\x91\x15\x36\x56\x90\xf1\x44\x04\xbe\x31\x3e\x6f\xeb\xc7\x3f\x57\x34\x27\x75\x64\x9c\x80\xf5\x93\x08\x63\x75\x7e\x1b\x88\x9c\xd7\xbe\x41\x0d\xbb\xc2\xf7\xcd\x86\xae\x63\x36\x59\x38\xa3\xa9\xb5\x96\xdb\xbc\x84\x9d\x26\x04\x5b\xeb\x52\x85\x93\x0b\x76\x7e\x60\x97\x1c\xf1\xd2\xae\x46\x78\x11\x91\x6f\x3c\xf4\xda\x40\x3b\xb3\x22\xe2\xc7\xcc\x53\xc1\x55\x49\xc2\x88\x3d\xd9\x6a\x62\xd6\xcc\xbb\x9d\x97\x93\x2d\x0b\x05\xc0\xca\xac\x67\x9a\xaf\xaf\x15\xea\xc9\x16\x8b\x59\xc8\x1f\xde\x58\x2e\x62\x83\xdb\xd7\x89\x4a\xb7\xda\x3a\x51\x2d\x1e\xdb\x96\x09\x36\x35\xf8\x0e\x24\x9d\x3a\xfb\xae\x9c\xaf\xd0\x36\x8f\xdd\x51\x55\x16\x3a\xf5\xae\x64\x57\x6e\x90\x5f\x59\xf0\xf5\xff\x79\x23\x0c\x39\x70\x64\xa1\xb1\xc1\xf2\x95\x33\xfb\x2b\xa8\x1f\xb3\x26\xb0\x8e\x98\x12\x7b\x73\xb3\x89\x63\x76\xcc\xe7\xab\x4d\x18\xb2\x66\x65\x59\x3d\xb2\x3e\x06\x3e\xea\x1b\x21\x8d\xe8\x1a\xe9\xc9\xe6\x44\xf0\x63\xbd\xe2\xb1\x8f\x04\xce\x60\x5d\x2a\xb9\xc4\x44\x95\xbb\xb2\xfa\x30\x03\x57\x5e\xc0\x03\x73\xbd\xcd\x81\x75\xba\xf1\x99\xfe\xbc\xb6\x04\xd4\xe8\x44\x67\x22\x2c\x33\x22\xf1\x14\x9b\x18\x21\xe2\x03\xb4\x37\x56\xb1\x7a\x49\x9e\x5a\xa1\x45\x32\x66\x00\xe0\xac\x65\xc6\x35\xc0\xaa\xb1\x39\x37\xb5\xf5\xbd\xa1\x24\x24\x45\x16\x29\xe0\xfd\x6c\xac\x4c\x90\xa9\x2f\xdd\x6a\x90\x01\xec\x85\x5b\x10\xae\x5f\xc6\x81\xeb\x47\xcd\xe4\xf4\x30\x18\x55\x9d\x05\xff\x00\x6f\xce\x6e\xdd\x8a\xcd\x91\x9f\x79\xb3\x3d\xb0\x8a\x5f\xbf\x84\xd8\x0a\xd0\xee\xfa\x0f\xf8\xef\x31\x63\xdf\xa3\x2d\xed\x86\xaf\x33\xae\xaf\xc2\x82\xea\x5f\x8f\x81\x74\x40\x85\x56\x5a\x0f\xbc\x7c\xa3\xc2\x4b\xd5\x12\x57\x68\x71\x2d\x94\x65\x3c\x49\x00\xe5\x9a\xa7\xeb\x2a\xcc\x84\x2b\x8d\x64\xbd\xc9\x98\x9d\x38\x0b\xad\x6b\x9f\xcb\xe4\xd2\x19\xd7\xc9\x5e\xa8\xac\x22\x0f\x56\x89\x6f\xcd\x9c\xab\xee\x0d\x6b\xeb\x2a\x0b\xb8\x4a\xb5\x05\xd6\x99\x4f\x90\xb4\x85\x63\xad\xf1\x48\xad\x0f\xba\xb5\xc9\xee\x71\xb4\x70\x21\xad\xa6\x3d\xa2\x6f\x55\x91\x49\x3e\x2a\x7f\x7d\x55\x82\xd2\x31\x07\xf7\xe1\x17\x77\x66\x70\x96\x11\x2c\xbc\xf3\x95\x95\x4b\xb7\x70\x56\xc0\x26\x0b\x67\x28\xd4\x8c\xc7\x66\x1b\xdc\x41\x7f\xaa\x91\x0c\xdd\x43\xd3\xac\xad\x24\x7b\xec\x26\x9f\xe1\x1e\xc3\x3e\xae\x0f\x41\x80\x7f\xe3\xe5\xc2\xc3\x32\xf9\x06\xc6\xf1\x07\xad\x72\xab\xe1\x5e\x84\xd2\xff\x88\x83\x11\xf0\x97\xb1\x07\x31\x33\x5b\xd4\x52\x57\x37\x2f\x9f\xbd\x2b\xf3\xe3\xcb\xd1\x69\xfa\xf0\x8b\xc2\xbc\x41\xf6\xf1\x0f\xfe\xcf\x66\x8d\x6e\xc0\x4a\xcd\x44\x56\xb8\xf5\x0b\xd6\x47\x5f\x34\x0e\x55\xbc\x50\xf1\x14\x8b\x61\xa5\x82\x97\xaa\x05\xd9\xc7\x6a\xc2\x0a\x85\xcb\xe8\x4a\x02\xd0\xb5\xdf\xd0\xaa\x9b\x9a\xa0\xa2\x97\x58\x79\x67\xce\xf3\x19\x4f\x93\x16\x1b\xd9\x8f\x5b\xec\x1f\xd8\xf8\xf6\xf0\x28\x88\x00\xa0\x4e\x91\x48\x33\xed\x46\x45\x68\x27\xbd\xf1\x74\x63\x07\x7c\xcf\xb5\xb3\x5f\x5e\x39\x65\x91\xa9\x75\x65\x6d\xd1\x84\xaf\x45\x82\x04\x91\xbc\x62\xb5\x57\x4c\xe3\x1d\xe3\x39\x94\xfd\x52\x40\x26\x20\x7e\x5b\x25\x48\x17\x87\xab\xb0\x74\x15\x5e\x06\xfe\xd8\x66\x88\xb0\x3f\x9f\x08\x65\x13\x31\xbf\xb2\xaf\x60\xef\xc6\xc9\xe9\xdf\x87\xd8\xf7\xf3\x51\xbd\x90\x80\x81\x95\xbb\x81\x45\x7a\x40\x42\x43\x11\x72\x03\x00\x6d\xea\x34\x4a\xcf\x8c\xb0\x9f\x81\x51\xfb\xf3\xec\xf6\x73\x88\x99\xa1\x2e\xbe\x63\x2b\x7e\x28\x01\x56\x03\x86\xfe\x1b\x94\x37\x7a\xd3\x25\xaf\x5b\x39\xcc\x5c\xb1\x48\x44\x09\x0e\xa5\x6d\x0a\xf8\x24\x15\xb7\x1a\x6c\xf0\x57\x0a\xb5\x0b\x83\x25\xa1\xa2\x54\x49\x7e\x63\x98\xbf\x1a\x65\x47\x34\x6b\x9b\x7f\x75\x54\xf7\xc2\x74\x0b\x3d\xcd\x6f\x84\x06\x3f\xca\xb0\xc1\xab\xa5\x15\x6c\x5e\xea\x94\xcd\xf2\x04\x88\xc7\xdf\x1c\x1e\x4d\x61\x4b\x12\x3c\x01\x3f\xb4\x4d\xf2\x92\x8a\x5c\x9e\x5f\x9e\x1d\x8d\xde\xf1\xb2\xb0\x56\x48\xb7\xe9\xb1\x83\xc9\xc5\xf4\x90\x99\xf9\x4a\x0b\x39\xf3\xe6\x26\x2e\xeb\xb2\x99\x9f\xe5\x2c\x78\x3e\xa3\x9a\x05\x7a\xf9\x64\x32\xe4\xf8\x32\x81\x06\x03\xdd\xe1\x54\xdc\xad\x97\x7e\x03\x00\xd4\xbe\xca\x86\xd3\xb8\xd2\xad\xbd\xea\x1f\x64\xc1\xb8\x9e\xaf\xe4\xb5\xa8\xee\x2e\xbd\xbb\xbf\x47\x30\xf6\x0f\x87\xa7\xa3\x09\x14\x77\x33\x70\xf5\xf0\x4b\x8a\xa0\xc8\x55\x04\x43\x7b\xb5\x3f\x8e\x46\x3c\x4d\xf3\x9b\x51\xc1\x65\x24\xf0\x1f\xe1\x46\xff\xbf\xd8\x68\x94\x48\x43\x3d\xff\x69\x18\xae\x44\x47\x4d\xc3\x25\xa9\x3c\xe6\x69\x40\x12\x8c\xca\x47\xe1\xbe\x32\xfc\x0d\x97\x89\xe1\x0f\xc0\x37\x84\x3f\xea\x04\x09\x3f\x91\x8b\x1d\x51\xf1\x87\xcb\xa3\x8b\xc3\xd3\xc9\xd9\xc5\x77\x6f\x4e\xce\x3e\x8c\x0e\x26\x17\x13\xb6\x7f\x72\x7c\x31\x3d\xbe\x60\xef\x0e\x0f\x0e\xa6\xc7\x3f\x11\x02\x7f\x3c\x3c\x7e\x37\x39\xba\x60\x1f\xa6\xef\xce\x2e\xa6\x87\x47\x87\x6f\xa7\x67\xcc\x09\xb9\x3c\x9a\x9c\xb9\xc1\x7b\xcc\x26\x97\xe7\x6f\xa7\xaf\x8f\xa6\xc7\x07\xd3\x8b\x9f\x08\x05\x4e\xcf\x0e\x3f\x4e\x2e\xa6\x0c\x6a\xde\x52\x63\xed\xdd\x9e\xd2\x97\xa9\xdb\x62\x03\x00\xf6\x4f\xf1\x6c\xfe\x63\xc8\x66\x33\xe3\xf1\xf8\x27\xf6\x63\xf8\x3d\xbc\x48\x69\x80\xf2\x2a\xc0\xeb\x9f\x02\xee\xed\x8f\x13\x2f\x50\xa0\x40\xbf\xe0\xe4\xe1\x3d\x42\xbf\x95\x4c\x12\xf7\x74\xc8\x37\xc3\x5d\x83\x4c\xe7\x82\x4d\x80\x2a\x69\x73\x2a\x92\x7f\x72\x65\x45\x49\x20\x31\x72\x72\x31\x9c\xa4\xd4\x7a\x0a\x33\x83\xb4\x00\xee\xca\xf4\xe1\x17\x63\xe4\x92\x2a\x5c\xa7\xee\x23\x64\x44\xde\x11\x53\x0b\x69\x20\xe4\x91\xc8\x0b\x93\xa2\x20\x8b\xb0\xb9\xe6\x66\x45\xc3\x28\x44\x42\x58\xc4\x46\x02\x34\x5e\x5a\x58\xf4\x27\x03\x04\x21\x75\x75\xa8\x85\xba\xbb\x89\xb7\x5b\x93\xa2\x18\x79\xfb\x71\xbb\x60\xaa\x9f\x6a\x42\x3a\xf4\xeb\x28\x4d\x04\xa9\x40\x6c\x6e\x00\x3b\x5f\x70\xd9\x05\x38\x01\xb8\x5c\x15\x96\x56\x0d\xc2\x5c\xac\xd2\x25\xf8\x59\x69\x20\xcb\x8a\x76\x9e\xcc\xbb\x8a\x60\x78\xa4\xb6\x78\xc6\x7c\x55\x05\xd4\x52\xc1\x24\x1b\xef\xb5\x8b\x0b\x9b\x10\x19\xd2\x52\xbd\xd0\x2e\xe0\xd6\x0a\x03\xa7\xe0\x34\xe7\xb4\xa9\xfc\xce\x75\x13\x62\xdf\x71\xcc\x0b\xb9\xb5\xc4\x8c\x9b\x2f\xd8\x68\x74\xbd\xc3\x8d\xa1\x2b\x78\x3d\xb4\x44\x38\x46\x0f\x2d\xe7\xa3\xcc\x46\x03\x0b\x16\x25\x85\xfc\x75\x7a\x49\x14\xe9\x9c\xbc\x7c\xb6\x14\xc6\x3e\xfc\xaa\xef\x88\x70\x25\x28\x4e\xb3\xb8\x4c\x66\xc6\x96\x9a\x98\x95\x35\x00\x7c\x32\x64\xc9\x1b\x4f\xa5\x22\x96\xc0\x44\x38\xd3\x9b\xea\xa5\x03\xff\xb4\xbd\xa8\xb7\x70\xc8\xc6\x07\x20\xbe\xce\x35\x38\x91\x86\x32\xcd\x4e\x53\x6e\xa9\x51\xe8\x8a\x51\x73\x02\xcb\x11\x13\x02\x4c\x44\x58\xf0\x07\x8d\x8c\x66\x54\xdc\x23\x8a\x52\x3e\x9e\xfe\x71\x73\x9d\xdc\xc0\x3e\x71\xb2\xab\xe4\x46\x52\xa5\x34\x8c\x07\x24\x7b\x7c\x65\x0f\xf4\xe5\x8a\xe5\x37\x2a\xfe\x48\xe6\xcc\x13\xb9\x9a\xd1\x39\xb5\x01\x15\x8f\x97\x71\x48\x3d\x02\x97\xf8\x11\xa1\xfd\x93\xf2\x74\x5e\x9f\x54\x33\xf8\xf3\xdf\xe7\x8b\xe8\xc5\x05\x4d\x47\xa8\xd4\xbf\x83\x63\xa4\xa5\x06\x2f\x10\x82\x56\x03\xcc\x7b\x67\x87\xb6\x76\x4b\xb3\x07\x7c\xb7\x34\xfb\x6a\xe7\x6e\xf1\x2d\xaf\xba\x82\x6e\xc5\xb8\x4f\xbf\xd4\x3b\xa4\xd9\xab\xfd\x3b\xc1\x50\x73\x2a\x48\x22\x67\xd5\x0d\x35\x22\xa5\x02\x48\xb1\xf6\x72\x82\xcf\x57\x3e\x7a\x51\x2a\xf6\x0c\x21\x60\x9f\x35\x58\xfd\xf0\xc7\x67\xac\xd0\x79\x21\x34\x89\xb3\xff\x57\x91\x04\xa6\xb6\x35\x49\x06\xbb\x7b\xea\xba\xc4\xcc\x57\x7c\x01\x37\x72\xec\xe2\xb6\x30\x51\x38\x2f\x17\x70\x91\x40\x98\x06\x9e\xa0\x82\x5a\xe4\x03\x6f\x04\x55\xf8\x9a\x5d\x73\x64\x50\x39\xf5\x8d\x08\x01\xd2\x66\x55\x67\x6b\x52\x25\x69\x01\x5f\x66\x80\x56\xbb\x34\x91\x48\xbb\x55\x5c\x0e\x11\xbf\x3e\x1c\xa9\x84\xbb\x59\x2a\x16\x09\x3c\xe0\x54\x18\xb3\x16\x72\xa9\x24\xb1\xf0\xa3\x11\xc6\x6c\xa9\x91\x11\x7e\xb1\x70\xe7\x6d\x93\xa7\x82\x89\xf9\x2a\x87\x9b\x86\x18\x21\x23\x94\xd5\xb7\x35\x20\x91\x83\x6a\xd3\xa2\xd3\xbf\x66\xee\x3b\xa5\xd6\xfb\x5b\xdf\xa3\x70\x85\xc2\x9d\xc1\x1a\x02\x57\x84\xc4\x88\x98\xa6\x79\xf7\x8a\x51\xd5\xb5\x37\x47\xa6\x5d\x2c\x6e\x10\x01\x47\xc7\x62\x2d\xb4\x80\x1b\x07\x77\x38\x27\x24\x5c\xe5\xc6\x0a\xb5\xd0\x42\xa2\x8f\x77\x26\xee\xf8\x8a\x8a\x5f\xde\x4c\x20\x91\x86\x3a\xe5\xb7\xbd\x6b\x09\x06\x8b\x56\xb9\xe1\x00\x64\x04\x35\x12\xda\xab\x08\x3c\x0e\x0b\x61\xec\x52\xa4\x62\x39\xa4\x31\x6e\xb0\x1b\xe4\xde\x24\x2a\x05\xc2\x97\xf6\x9a\x81\x15\x17\x28\xd6\x21\x38\x0f\x47\x7a\xa5\x06\xc5\xa4\xb4\xca\xc9\x4d\xfb\x9d\x7b\xd4\x5a\x28\x1e\xa5\xb2\x2e\x8e\x01\x7f\xe6\xe9\x26\x19\x58\x13\x35\xe4\x70\x36\x48\x3e\x1c\x28\x02\xe2\xd6\xa1\x4a\xc4\xcf\x5f\xbe\xec\x31\x2d\xb8\xf1\x19\x40\xd3\x9f\xa5\x6d\xcc\x89\x3d\x67\x96\xd8\xcf\xc6\x72\x5b\x9a\xf8\xca\x39\xfc\x49\x4e\x50\xaf\x53\x7b\x6d\x97\xda\xf0\xf9\x4a\x50\xd5\xb9\x9f\xa8\xda\x3a\xdb\x46\x19\xa9\x5b\x0e\x9d\xb1\x38\xb5\xb5\xc5\xf2\xc4\xde\x06\xb1\xb1\x03\x99\xdd\x3c\x49\x2d\x93\x6a\x25\xb4\xb4\x48\x0b\x2c\x55\xcc\x0d\xa0\x56\x79\xb5\xf4\x41\xbd\x1a\xf9\x43\x15\x5f\x65\xa2\x58\x70\x08\xbe\x0b\xa9\x01\xdd\x55\x5e\xc7\x08\xd8\xb0\xf1\xec\xbf\xf9\x7c\x7e\x31\x79\x7b\x78\xfc\xf6\xf3\xc5\xe1\x87\xe9\xc9\xe5\x45\x58\x1f\xc9\x0f\x5c\x57\xa4\x8a\x82\xdd\xdc\x84\x3a\x45\xef\xa4\xe6\xd9\xc5\xe5\xe9\x57\x52\x93\x10\xdd\xaa\x66\x17\x81\xe0\x6b\x71\xe7\xe6\xa2\x22\x0f\x55\x29\x37\xb6\xba\x66\x27\xa4\x1c\xc1\x65\x44\x75\x11\xda\x21\xaa\x2c\xf0\xf0\x4e\x8d\x60\x14\x65\x58\x4c\x4a\x23\x46\xb2\x67\xa5\x20\xa4\x04\xf6\x08\xa2\x6c\x3e\xbf\x22\x8b\x2e\x05\x60\x55\x11\x45\x3b\x97\xcf\xf3\xce\x75\x0d\x8b\x52\xed\x0e\x65\x89\xe6\x76\x6c\xea\xc7\xe4\x7e\xee\x0a\x0d\xcb\x3b\x51\xb9\x62\x33\x6e\xe4\x7c\x9b\xb3\x02\xad\xfc\xd7\xdc\x48\x13\xdf\xa4\x24\x52\x8a\xbf\x77\x32\xa8\x52\x70\xf3\x22\x93\x98\x54\xe0\xbd\x66\x1e\xe3\x86\x90\x88\x97\xf2\x42\x41\xac\x14\x7a\xcc\xac\xa7\x4f\x0e\xf7\xfb\x38\xc7\xda\x6b\xa5\x61\x8a\xea\x29\xbe\x64\x59\xaa\xaf\x9a\x6c\x63\x44\x71\x77\x34\x23\xca\xc3\x01\xa8\xbd\x98\xb3\xd4\x30\x22\x83\x9e\xdf\xce\x3e\x13\x0c\xaf\xbb\x3b\xa4\xc4\x20\x8f\xfb\xfb\xf1\x71\xae\xdc\xa7\x9d\x87\x1b\xf3\x09\xfa\x46\x3a\x98\x17\x7d\x2d\xe7\xbd\x84\x10\x4a\xd8\x15\xe5\x04\x59\xf0\x84\x28\x44\xc3\x96\x9c\xba\x47\x64\x21\xaa\xbf\x3a\xbb\x29\xd7\xd4\xc0\x3b\xcd\xa9\x05\x23\x90\xcf\x93\x05\xfd\xe3\xf6\xc2\xdd\xf4\xad\xa7\xe1\x71\x6b\x61\xc0\x04\xa0\xa6\x7f\x2b\x6e\x06\xb1\xf6\x68\x51\xe4\x9e\xe6\x6a\x98\x0b\xb2\x9a\xb3\xce\x48\xa2\x96\x81\xfa\x5c\x05\xcc\x4c\x5b\x12\x6b\xc9\x9a\x3c\xaa\x6d\x4d\x81\x3f\x94\xce\x24\x4a\xc8\xb6\x01\x35\x46\xc2\xb8\xb5\x5a\xce\x80\x9c\x21\x91\xe6\xea\x33\xf4\xde\xb3\x40\x9f\x43\x9e\x2d\x2b\x9a\x46\x61\xd8\xc4\xcb\x68\x8a\x00\x16\x9d\xfe\xb5\x47\x1b\x6f\xe7\xca\x6b\x12\x06\xd6\x8d\x5b\xd4\xce\x15\x87\xe2\x03\x6b\x85\x54\xcc\x9d\x2b\xf5\xa5\x3b\xeb\x74\x6b\x5b\x60\xa8\x64\x90\xe0\x43\xd4\x72\x06\xaf\x22\x83\x34\x12\xe9\xe0\xdb\xed\x72\xb7\x8b\xeb\x25\xa2\xbb\x34\x51\xb0\x54\x23\xcb\x49\x77\x33\x59\x48\xd1\x3d\xdc\xe1\xda\xda\x0d\xaf\x8d\x92\x05\xdb\x01\x25\xc4\x3f\xed\x2a\xfa\x58\x4c\xb7\x6e\xe1\x83\xc0\xd5\xfa\x89\xa2\x3e\x70\x3f\x96\xb0\xed\x04\xfb\x1b\xa9\x17\xdd\x82\x3a\x36\x4d\x2f\xa9\x20\xf7\xce\x66\xd8\x71\xb7\x14\x1f\xf9\xd7\x29\xe8\x33\x0a\xfa\xbc\x2c\x65\xc2\x0e\x8f\x87\xc5\x80\x04\x19\x8f\x29\xbc\xe5\xdb\x10\xf3\x16\xbd\xe6\x94\x15\xaa\x9d\xc5\xb6\xa4\x71\x60\x8d\xa4\xc7\x97\x11\x92\x58\xc6\x3a\x99\x3e\x30\x93\xb0\xa3\x20\x42\x04\x91\x8e\x83\x4e\xcc\x1f\xf2\x10\x06\x92\xb7\xc9\xa4\x6e\xaf\x8c\x59\x45\x9a\xd8\x9a\xff\x2e\x91\xa6\xcb\x41\x7d\x7e\xfe\x6e\x74\x59\xe5\xe5\x96\x90\xd3\x53\x45\x35\x78\x0f\x3d\xed\xc1\xde\x52\x2b\x93\xca\xc3\x0c\xed\x50\xbf\x35\x4c\x56\x59\x9d\x35\x55\x08\x4f\x1e\xa1\x8b\xf7\xd0\xc3\xd1\xe7\x59\x1d\x09\x86\x8a\x67\xdc\xa2\x53\xa5\x46\x64\x3f\xaf\x89\xdc\x45\xb3\xd8\x49\xcf\x9a\xb8\x46\x3b\x2a\x58\xeb\xb4\x4a\xd7\x0d\xd1\x7d\x14\x8d\x9f\x71\x41\x46\xed\x10\xba\xd4\xbf\x96\xeb\xa6\x61\xd5\xed\x38\x6a\xea\x95\xd6\x3a\xa1\x57\xdd\xb5\x51\x32\xac\xd2\x1d\xda\xb9\xf1\xdd\x07\x36\xb3\xed\xfb\xf6\xaa\x58\xe5\xb6\xf1\x4d\x07\x56\x1c\x82\x3f\xd7\x66\x40\xef\xaa\xeb\x33\x71\x97\x9a\xfb\xd5\x6b\x3b\x62\x62\xce\x2d\x1d\x0f\x83\x7c\xcd\x56\x92\x9e\xa1\x8e\x62\xb4\x19\x78\xee\x1e\x93\x3b\x57\xc7\x39\xce\x1f\xb4\xe8\x82\x25\xb9\xd7\x76\x9c\xf9\x8c\xcd\x8b\xa2\xcb\x59\xe7\x9e\x53\x6b\x3d\x96\x65\x1c\x32\x0e\x5f\x32\x2d\x12\xa9\xc5\x9c\x3a\xc4\x07\x61\x4c\xf1\xf9\x8a\xbd\x64\x97\x59\x2a\xa4\x25\x3d\xa3\xce\xfc\x1e\x76\x1e\x46\xd6\x3e\x6e\xc5\x70\xd3\xbd\xe3\x2b\xff\x40\x5a\x0c\xd6\x33\x6e\xcf\x73\xa5\xc4\x1c\x72\x88\x10\xf3\x09\x9c\x3d\x42\xef\x61\x2e\xec\xb2\x62\x57\x5d\xd1\x77\xdf\x44\x15\xc0\x97\xdb\xe9\x15\xed\x43\x5c\x5d\x17\x33\xe4\x42\xa9\x97\xec\xdb\x82\xea\xba\x8b\x5b\x22\x94\xb1\xe4\x14\xde\x30\xf1\xbe\xba\x52\xf9\x8d\x0a\x74\x9a\xe4\xcd\x7e\xa9\x66\xe2\x8a\x03\x3e\x01\x92\x65\xda\x87\x5f\x88\x8f\x17\x89\x97\x3b\x44\x75\x39\xb9\x4b\x4d\xde\xbf\x9f\x1d\x91\x45\x3a\xe8\x67\x89\x09\xea\x0a\x51\xab\x97\x2b\x45\x2c\x5e\x65\x17\x4e\x9c\x8f\x0b\xa1\x5d\x52\xa5\x21\x0f\x1f\x01\xda\x8a\x2e\x18\x30\x2b\x01\x87\xb1\x47\xd4\x2c\x2d\x29\xa2\x44\x13\x25\xaf\x87\x22\x7e\x95\xdd\xb0\x5d\xed\x85\xae\x85\x9e\xe5\x46\x40\x76\x9e\x0f\x66\x84\xac\x98\xa1\x42\x3a\xa2\x20\x03\xaa\x4a\x6b\xd1\x5b\xf2\x10\xf5\x57\xde\x5e\xc2\x73\xd7\xfa\xf4\xa3\x2f\x5f\xd8\xf3\xc9\xe9\x61\xd0\x1d\xae\x52\x2b\x92\xcc\x73\xab\xa5\x5a\x7e\xf9\x42\xf1\x8f\xb7\xca\x0a\x84\x9b\xa4\x2c\x52\xad\xa2\x08\x97\xc0\x47\x6e\xfa\xb9\x31\xd2\x37\x12\xb9\xbd\xf8\x88\x0d\x8d\x50\xbe\xbf\x1f\xbf\x96\x8a\xeb\xdb\x40\x23\xe9\xbf\xe9\xfd\xfd\x78\xad\x1d\x83\xbe\xf0\xfd\xfd\x78\xff\x4d\xc0\x1f\x2d\x24\xdd\x88\xf0\xd6\x68\x72\x7a\xb8\x5d\x54\x17\x84\x60\x43\x58\x80\x0c\xa4\x45\xe6\xa5\xb2\x27\x8b\x70\xf2\x06\x8a\x04\xcc\x44\xa5\xe2\xd2\x5a\x0b\x61\x0a\x5a\x48\x06\x24\x42\xc4\x5c\x49\x8c\x76\x0d\xa8\x96\xdd\xc1\xaf\x9b\xef\x83\x29\xbd\x2d\x24\xf6\xfe\x7e\x7c\x20\xcd\x15\x80\x62\x7e\xf9\xc2\xf2\x05\xf3\xbf\x78\x08\x5d\xba\xb6\x7a\x31\x0f\xcb\x59\x2f\x47\xd6\x96\xdf\xa8\xa0\x61\x47\x20\xdb\xda\x9b\xd2\xd8\xef\x8c\x04\x58\x9c\x0e\x2f\x60\x6b\x1c\x12\xc4\xf2\xbd\x62\x11\xc3\xf3\x4d\xf8\x12\x35\x34\xcf\x00\x9d\x59\x03\xd8\x00\xb4\x0c\x4c\xe1\xae\x83\x67\x76\x7c\x68\xa2\xea\xd3\x57\xac\x05\x01\xb4\x45\x0b\x88\x25\xac\x43\x26\x98\x88\xc4\xb4\x46\x29\xe2\xf1\x81\x36\x41\x9a\x3c\xec\x26\x3d\xa4\xe0\x12\xfe\x93\xfa\x64\xe1\xff\x61\xcf\xc4\xa8\x76\xcc\xb2\x0c\xe9\x98\xec\x66\x25\x30\x9b\xfb\x93\x2b\x79\x5a\x9a\x55\xd4\xf5\xd3\xef\xe0\xd0\x05\x2c\xc6\x21\xb9\xfa\x46\xda\x95\xc4\x02\x68\xc4\x3a\x4b\x09\xb0\x50\x7c\x7e\x18\x66\xa6\xbb\xc5\xca\x13\x37\xcc\xf3\x04\x83\x2d\xc3\xb7\x89\x9a\x34\x3f\x8d\x11\xa2\x15\xfa\x2d\xc6\xeb\x9b\x86\x94\x76\x94\x56\x96\x88\xc2\xae\x3c\xf1\x74\xc4\x59\xed\xfe\x9c\x6b\x5d\xd5\xec\x2b\x9f\x35\x2a\x34\x98\x4b\x7b\x9e\xe1\x10\x18\x78\x21\x7b\xa8\xbd\xd7\xdc\x2b\x99\x1b\x10\x18\xd5\x20\x4d\x93\x84\x1b\xf3\xa6\xb9\x81\x3b\xe2\x7f\x2d\x45\x9a\x02\x7f\x39\xa0\x35\x14\x45\x4c\x9a\x83\xf6\x6e\x8e\xaa\x96\xfe\xf3\x01\xaa\x11\x31\xce\x49\x6a\xa0\xc6\xa9\xc6\xf7\xaf\x86\x50\x7b\x0d\x6b\x82\x31\xa0\x3d\x85\xeb\x88\x2e\x00\xdb\xed\x03\x12\x87\x62\xf9\x28\xa0\xdd\x35\x71\xed\x13\xef\x49\xa0\x77\xef\xef\xc7\x3e\x1b\xd7\xad\x99\x2a\xbd\x65\x37\xb9\xbe\x32\xac\x2c\x00\x7f\xe2\x0d\xab\x59\x0b\x6e\x61\xfc\xc0\x7f\x96\x59\x99\x45\x56\xed\x31\x22\x9b\xf9\xbc\x09\x69\xd8\x1a\xeb\x76\xc7\xb0\xac\xea\x5d\x94\xea\xca\x3d\x80\xe3\xbb\x2a\x35\x9b\x49\xc3\xf6\xdf\x34\xe8\xbc\x5b\xeb\x3e\x5c\x69\xc0\xeb\x85\x1d\x62\xa3\xe6\xed\x0d\xf6\x57\x64\xa6\xa5\xa1\x67\xfe\xf6\x2c\xca\xfb\x1f\xbb\x36\x15\xc2\x12\x1b\xd5\x3a\x6d\x37\x9b\xb7\x59\x23\x13\xb5\x9b\xb8\x9d\x5b\x9b\x22\x6a\x46\x84\xa7\xc6\xe4\xe7\x8e\xef\xb2\x56\x00\xe2\x27\xc5\x2a\xed\x4e\x83\xaa\x85\xf4\x7d\x80\xb3\x65\x30\xca\x86\xc4\x30\x92\x42\x36\x2c\xbb\x5e\xe1\x8d\x6e\xcc\x88\xac\x69\x11\x7c\x10\xd9\x56\x83\xa0\x56\xc8\xdb\x03\xb5\x52\x1d\x35\xd5\x14\xee\xd7\xd8\x66\x99\x10\x97\xe4\x0f\x9b\x5d\xf6\x5b\xa3\xe0\x87\x5d\x6a\xfb\xc0\x46\xc3\x2b\x3c\x97\x77\xae\x53\x7e\x86\x98\x93\x32\x0b\xdf\xca\xd4\x3e\xf3\xb0\x93\x1d\x48\x36\xd8\xd7\x9f\xd4\x71\x0e\xf0\x51\x00\x3a\x56\x83\xaa\xa2\x66\xe9\x1f\xc7\x2f\xc6\x2f\xfe\xc7\x30\x7a\x14\x57\x61\x9e\x88\x14\xb1\xf4\x59\xf8\x33\x72\x05\xf4\x38\xa3\x76\x8b\xa8\x3b\xdb\xb7\xe4\x7d\xde\xdf\x8f\x63\x18\x9f\x17\xd6\x99\xa8\xd8\xf2\x7e\x98\x9b\xdb\x92\x14\xdb\x8a\x2a\x56\xe8\x7c\xa9\xe9\x6c\x5d\xa2\x3e\xa9\xd8\x6b\xc1\xf5\xac\xcb\x61\xd7\x52\xd4\x94\xf3\xb9\x10\xf4\x01\xbe\xa5\xc8\x0d\xd7\xb0\x04\xa6\xcb\x8e\x2b\xb7\x8d\x7c\x06\x4c\x03\x99\x01\x32\x11\x1c\xde\x58\xae\x31\xab\x01\x82\x47\xe9\xea\x37\xc5\xf8\x1c\x90\x1f\x60\x9a\x28\x08\x22\xc7\x58\x7c\x21\x15\x3b\x2e\xd3\x14\x16\x24\x3a\x59\xa2\x87\x6e\xbb\xe9\xd4\x50\x69\xb0\x12\xbd\xd3\x47\x5a\x8a\xe6\xfd\x53\x45\x60\x4f\xc3\x78\x10\x88\xaf\x38\xcd\xb5\x75\x4b\xc5\xf6\x60\x0e\xaa\xe4\xd6\x20\x8f\x80\x49\x6e\xc2\x9a\xda\x19\xf5\xb1\xf1\x76\x57\x18\x88\x7b\x19\x83\x3a\xc2\xc6\x88\x1b\xca\x45\x6e\x79\x1a\xf7\xca\x88\xf1\xd4\x1d\x00\xb2\x29\xcc\x6f\x34\x0d\x69\x15\x38\x0f\x9c\x18\xbb\xcf\x8b\xe1\xa8\x15\xda\xb2\xe5\xd2\xbd\xa5\x44\xf7\x3d\x3c\x62\xb0\xc3\x75\x46\xd0\x6f\xcb\xf5\x06\x55\x42\xd0\x27\x78\xaa\x06\xf6\xdc\x1d\xa3\x31\xad\xb4\xd3\x3f\x45\x54\xb8\x5e\xbe\xa3\x7e\xbb\xb6\x38\x8e\xe3\x81\xbb\xe5\xb8\xed\xaf\x8d\xfd\x93\xe6\x61\x0f\xe9\xc2\x2a\xd8\x34\xbc\x97\xe9\x30\x88\x6b\x95\xd7\x16\xd8\x71\x8b\xed\xdf\xa6\x89\x5b\x96\x5a\x75\xf1\xe7\x1b\x27\xd4\x6a\x29\x66\x06\x15\x71\x67\x83\x3a\xc6\x33\x6d\x41\x22\x59\xbb\xbf\xa7\xe3\x3e\x58\xb8\xd4\xe9\x1e\x2b\x52\xc1\x8d\x08\x78\xe7\x8c\xe3\xaf\x62\xbc\x1c\x23\xf4\xd1\xab\xef\xbe\xbb\xcd\x4b\xfd\x59\x8b\x22\x1f\xcf\xf3\x8c\x6e\x7b\xa8\xc3\x86\xa4\x46\x1f\xa0\xcf\x2e\xcf\x8e\xc6\xec\xb5\xb4\x56\xb0\x80\x78\xe5\x7a\x01\x5e\xba\x3c\x3b\x5a\xc3\x18\x1f\xb3\xd7\x42\x9a\x42\x8a\xf4\x15\xa1\x01\xd9\x48\x6f\xf0\x39\x03\x18\x0e\x50\x56\x24\x68\xf4\x04\x83\x27\x58\x3b\x1b\x73\xbd\xa3\x55\x83\x85\x36\xb3\x52\xfe\xaf\x9f\xfe\xff\x00\x00\x00\xff\xff\xbb\x3a\x54\x3d\xa0\xdc\x03\x00") + +func cfI18nResourcesDeDeAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesDeDeAllJson, + "cf/i18n/resources/de-de.all.json", + ) +} + +func cfI18nResourcesDeDeAllJson() (*asset, error) { + bytes, err := cfI18nResourcesDeDeAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/de-de.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesEnUsAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x6d\x73\xdb\x38\x96\x2f\xfe\xfe\x7e\x0a\xfc\x3d\x2f\x9c\xde\xb2\xe4\x24\xdd\xb3\xb5\xe5\x5b\xb7\xf6\xaa\x6d\x25\xf1\xb4\x63\x69\x65\x39\xb3\x7d\xa3\x2e\x37\x2c\x42\x12\xdb\x14\xc1\x06\x40\x3b\x1a\xb7\xf7\xb3\xff\x0b\x07\x20\x45\x4a\xc4\x03\x29\xca\x49\xcf\x78\xa6\xaa\x23\x93\x38\xbf\xf3\x03\x88\x67\x1c\x9c\xf3\xf9\x7f\x21\xf4\xf8\xbf\x10\x42\xe8\x20\x0c\x0e\x4e\xd0\xc1\x24\x9e\xc4\xe3\xf3\xe1\xc9\x24\x3e\x38\x52\xcf\x05\xc3\x31\x8f\xb0\x08\x69\xbc\x91\xe0\x7f\x21\xf4\x74\x54\x05\xf0\x33\x4d\x19\xfa\xdb\xd5\xe0\x12\x71\xc1\xc2\x78\x8e\xf8\x2a\x16\xf8\x0b\x0a\x39\x0a\xe3\x7b\x1c\x85\x41\x17\xa1\x21\xa3\x09\x61\x85\x57\x62\x11\xf2\x13\x84\xa6\x33\xc4\x89\xe8\xb0\x34\x8e\xc3\x78\xde\x21\xf1\x7d\xc8\x68\xbc\x24\xb1\xe8\xdc\x63\x16\xe2\xdb\x88\x74\xe6\x8c\xa6\x09\x3a\x7c\x9c\x1c\xc4\x78\x49\x26\x07\x27\x93\x83\x7b\x1c\xa5\x64\x72\x70\xb4\xfd\xe8\xe9\xd0\x92\x95\x6f\x8e\xea\x5e\x0b\x95\x0b\x3c\xff\x93\x14\x6a\xab\x54\x0d\x85\xfa\x6f\x68\xbc\x20\x9c\x20\x4e\xd8\x7d\x38\x25\x28\x89\x70\xcc\xd1\x02\xdf\x13\x84\x63\x84\x39\xa7\xd3\x10\x0b\x12\xa0\x29\xe5\xa2\x8b\x4e\x19\xc1\x42\x66\x07\xe7\x12\x61\xcc\x05\x8e\xa7\x04\x3d\x84\x51\x84\xc2\x78\x9a\x32\xc8\x87\x92\x30\x16\xd1\xde\x15\x1b\x32\xdc\x4b\x12\xc4\x05\x66\x82\x04\x96\x06\x5e\x4e\x65\x87\x12\x04\x4d\x17\x38\x9e\x93\x00\x09\x9a\x49\x1d\xa1\xdb\x54\xa0\x98\x0a\x82\xc4\x02\x0b\x14\x0a\xb4\xc0\x1c\xbd\xce\x59\xf3\xae\x5b\xfd\x0e\xc8\x16\xca\x8f\x8f\xdd\x5e\x92\x5c\xe2\x25\x79\x7a\x42\x0f\x98\x67\xc0\x28\xe5\xb2\x80\x75\x11\x2e\x97\x38\x0e\xd0\xaf\x8f\x8f\xdd\x53\xf5\xfb\xe9\xe9\x57\x07\xe3\x9d\x80\x0d\x84\x2f\x29\xc2\x49\x88\x48\x1c\x24\x34\x8c\x85\x6c\x17\xe6\x3a\x55\x99\xd8\x00\x3c\xa2\xa9\x2c\x41\x8a\x6e\x09\x4a\xe3\x25\x4e\x12\x12\xc8\x26\x18\x53\x81\xa6\x29\x63\x24\x16\xd1\x0a\xe9\xe7\x82\x22\xb1\x20\x08\x27\x49\x14\x4e\x41\xa1\x99\xc4\xce\xc0\x06\xc2\x72\xc4\x41\xe8\x9a\x13\x74\x38\x9d\xa1\x25\x66\x77\x44\x24\x11\x9e\x12\xd4\xe1\xe8\xaa\x3f\xfa\x74\x7e\xda\x3f\x94\x80\xf7\x21\x79\x40\x01\xe1\x53\x16\x26\x12\x91\x23\x3a\x43\x61\x1c\x84\xf7\x61\x90\xe2\x48\xb7\x34\x3a\x43\x18\xcd\xc3\x7b\x12\x67\x0d\xca\x9c\xa5\x67\x50\x6d\xcb\x74\x8f\xf3\x70\x1e\x23\x46\x23\xc2\xd1\x43\x28\x16\xe8\x50\xd6\x1e\x55\x96\xd7\x9c\xb0\xa7\x27\xe8\x2f\x29\x9b\x77\x64\xa2\x43\x24\x6b\x58\x75\x1a\x9e\xe0\x29\x51\xa9\xec\xd9\xdd\x97\x52\x5b\x46\xa1\x84\x25\xc2\xbb\x31\x66\x73\x22\xf2\x06\x02\x85\x2b\xe0\x19\x8a\xc9\x03\x02\x40\x3b\xff\x9a\x58\x5e\xb4\x4c\x10\x94\xcd\x3d\xc9\xd8\x10\x6c\x14\x52\x5d\xf7\x22\x3a\x0f\x63\xd4\xc1\xa8\x37\x3c\x47\x9d\x0e\xbf\x0b\x93\x0e\xe7\x51\x07\x46\x54\xd0\x7a\x88\x28\x83\xa4\xb2\x27\xb0\xa4\x92\x1d\x6a\x9a\x24\x8c\x70\x35\xec\x22\xc2\x18\x65\xf6\x6c\x3c\x1b\x0b\x53\x51\x84\x89\x22\xf1\x2b\x0e\x82\x4e\x12\xa5\xf3\x30\xee\x30\x92\xd0\x5f\xf3\x7e\x55\x50\x84\x83\x00\xc9\x87\xdc\xd2\xa0\xeb\x02\x55\x12\x42\x08\x9d\xbe\xbb\xb9\xec\x7d\xec\xa3\x29\x4d\x56\x1d\x4e\x53\x36\x25\xe8\x6a\x70\x3d\x3a\xed\x77\x7a\xc3\x21\x1a\xf7\x46\xef\xfb\x63\xf8\xf9\xb9\xc3\xb3\x3f\xaf\x86\xbd\xd3\x3e\xfa\xdc\xa1\xd9\x83\xc1\xe8\xfd\x2f\xbf\xa0\xcf\x9d\x4e\x4c\x3b\x8c\xc0\xa8\xf1\x8b\x71\xac\xd9\xb7\x56\x53\x56\x07\xd0\xa3\xe1\x28\x5a\xa1\x84\xd1\xfb\x30\x20\x08\xa3\x28\xe4\x42\xf6\x67\x50\x6a\x9d\x80\x44\xe1\x32\x94\x23\x9e\xc0\x73\xae\x86\x67\x98\x9c\xdc\x12\xf4\xc0\x42\x21\x48\x9c\xf5\xf8\x9f\x4e\x7b\xc3\x1b\xdd\x75\x5e\xa1\xc2\x0c\x0f\x65\x33\x3c\x34\xa3\x0c\xe1\x78\x85\x6e\x69\x1a\x07\xc5\x21\xc2\xf8\x61\xbf\x35\x96\x35\x8a\x52\x0f\x04\x1d\x9e\x90\x69\x38\x0b\xa7\x68\x4a\xe3\x59\x38\x4f\x19\x60\xa1\x04\x33\xbc\x24\x82\x30\x39\x7d\x46\x18\x41\x1b\x52\xf3\x6b\x7a\xfb\x1b\x99\x0a\x14\xc6\x9d\x28\x8c\x49\x77\x12\x17\x2a\x48\x9a\x04\x58\x90\x4e\x36\x63\xec\x4c\xfd\x27\xcc\x72\x12\x6f\x2a\xcf\x59\x18\x11\x49\x50\xe0\x30\x86\xb9\xfd\x8e\xe4\xbb\x08\x74\x8d\x17\x04\x25\x58\x2c\xb2\xd2\x2f\xc8\x29\x8d\x38\x96\xdf\x48\x4e\x8f\x6f\x39\x8d\xe4\x34\x83\x32\xc4\x88\xac\x00\xf7\x6b\x51\xc5\xcf\x55\x10\xc3\xde\xf8\xc3\xcd\x78\x70\xf3\xee\xfc\xa2\xaf\xf3\xda\xff\x82\x97\x49\x44\x64\x4d\xd9\xa2\x78\x02\x29\x1e\xe1\xbf\x08\xa1\xc9\xc1\x34\x4a\xb9\x20\xec\x26\xa6\x01\xe1\x93\x83\x93\xf5\x3b\xf5\x9a\xa6\xb1\x90\x8f\xff\x7a\x54\x7a\xbe\x24\x4b\xca\x56\x37\xcb\x5b\xf9\xee\xcd\xeb\xb7\x3f\x64\x6f\x9f\xe0\xc7\x53\xad\x9a\xfd\x52\x69\x5e\x2a\x0d\x54\x9a\xaf\xd0\xd1\x9c\xe8\xfc\x67\x85\x75\x1b\xc6\x41\x5e\x54\xbd\xe1\x50\x3d\xd5\x7d\xe7\xcd\xf9\xe5\xd5\xb8\x77\x79\xda\xff\x17\xae\x4d\xfe\x05\xb4\x6b\x2d\x4b\x08\x5b\x86\x9c\xcb\x31\x48\x56\x98\xc9\x01\x23\x38\xe8\xd0\x38\x5a\x4d\x0e\xbe\x62\x2f\xf3\x52\x63\xfe\xcc\x35\xe6\x1b\xe8\x62\xa6\x8c\x14\xfb\x63\x5d\x10\x68\x78\xd1\xbb\xfc\x13\x55\x9b\xf6\x6b\xcd\xae\xe5\xf4\xad\x8e\x6a\xdf\x42\x27\xf5\x52\xe7\xfe\xb5\xea\x9c\xa9\x9b\x1b\xca\xdc\xf3\x05\x4d\xa3\x00\x0a\x09\xfd\x23\x4c\xa0\x20\x8e\x10\x46\x29\x8b\x54\xc9\xac\x1f\xca\x55\x21\x8a\xe8\x14\x47\x28\x08\x19\x99\x0a\xca\x56\x5d\x34\xa4\x3c\x84\x4f\x16\x72\x84\x51\x02\x7f\xdd\x13\x14\xc6\x82\xcc\x09\x3b\x42\x9c\x08\x8e\x12\x16\x52\x16\x8a\xd5\x11\xec\xa8\x85\x1c\x71\x0a\xbb\xc8\x33\x46\x97\x28\xa2\x0f\x84\x0b\xa9\x6d\x11\xce\x17\xc4\x7c\xc2\xf0\x6d\x73\x36\x15\x33\xd4\x51\xd5\x0e\x02\x55\xe3\x1a\x8c\x9f\xe7\x22\xcb\xb5\x3a\x4e\x41\x3c\x8c\xe7\x11\x41\x98\x31\xbc\x52\x7b\x99\x85\xaa\x25\x1b\x0d\x97\xed\x4e\xed\xdb\xde\xaa\xad\x7a\x82\x58\x1a\x11\xdb\x4e\xc3\xb7\x47\x75\x5f\x85\xaa\x10\xa0\x8f\x28\x90\x05\xfe\x3b\x11\x56\xb8\x90\xfc\x47\xcc\x09\x1a\xe8\x9e\x98\xab\x99\x15\x5d\x86\x42\xd6\x21\x59\xa3\xe4\x54\x04\x24\xf9\xef\x29\x66\x04\xdd\x32\x3c\xbd\x93\x15\x4f\xbe\x2c\x1e\x96\x2d\xc2\x28\xc8\xba\x74\x99\x90\x91\xdf\xd3\x90\x91\x40\xf6\x8c\x42\xe7\xa2\x8b\x90\xee\x72\x3e\x41\x3f\xf3\x1b\xa7\xb1\xca\x1e\x51\x5d\x90\xea\x6d\x3e\xeb\xbe\x61\xdd\xb3\x4c\x0e\x12\x46\x05\x9d\xd2\x48\xcd\x92\xc4\x34\x91\xbd\xfb\xfa\x75\x40\xb8\x08\x63\xa8\x25\x2a\xc5\x9b\xd7\xdd\xb7\x3f\xfc\xd0\x7d\xd3\x7d\xf3\x1f\xe5\x94\x09\x65\x42\xcf\xb5\xbe\xff\xfe\xf5\xbf\xeb\x69\x56\xd6\x0f\xfd\xb2\xbf\x6a\xf7\xf2\x31\x9f\xff\x63\x9a\x1a\xe6\xa7\x90\x3c\x20\x1c\x45\xf4\x01\xb6\x12\x7f\x4f\xa9\xc0\xd9\x61\x4b\x36\xb0\xaa\x87\xa6\xc3\x9a\x9a\x20\xd5\x44\x70\x20\xeb\x12\xe6\xc8\xa8\xa5\x90\xa2\x1a\x22\xa0\x44\x9d\xf0\x91\x2f\x21\x17\x32\x25\x86\xad\x73\x13\xa0\x31\xbd\x37\x7c\x8c\xf0\x3d\x0e\x23\xc8\xb3\xda\xc0\x07\x00\x63\x87\x5d\x07\xa2\x9a\xc4\x8c\x32\x64\x42\x87\x77\xd5\x62\x72\xd8\x8c\xe4\x7a\x6a\x95\x9d\x07\x9b\x40\x2a\x52\x7a\x40\xd2\x24\xf1\x84\x54\x29\x8d\x90\x64\x99\x88\x95\x05\x48\xbd\x37\x8a\xcb\xb2\x5d\x97\xa7\x2e\x4b\x73\x95\xb2\x48\x58\x55\x30\xc2\x13\x1a\x07\x61\x3c\xef\xa2\x61\x44\x64\x57\xb3\xc4\x77\x04\xf1\x94\x11\x14\x0a\x35\x4b\x51\xf3\x47\x9f\x6a\xb1\x23\x6a\x35\x55\x89\x38\xa3\x69\x6c\xfc\x2c\xeb\x04\xd5\x00\x8c\x2c\xe9\x7d\x3e\x7d\xd2\xa7\x17\x70\x14\x15\x0a\xca\x42\xc2\x4d\xc0\x6e\xc1\xea\xa3\xb5\x83\x21\xe4\x8a\x4f\x0e\xb2\xfe\x36\xa7\x98\x75\xb6\xba\x88\x48\x80\x02\x2c\xb0\xf1\x6c\xad\x01\x52\x25\xa5\xc3\xbc\x86\x20\x46\xe6\xa1\x9c\xec\x83\x31\x0c\x9c\xce\x75\xd1\x15\x51\x47\x91\x0b\x12\x25\xa6\x3a\x56\x0b\xa2\x9a\x04\xa3\xa9\x20\xfc\xb0\x34\x8b\x96\xc5\x6a\xd2\x68\x4c\x5f\x0d\xff\xf8\xd8\xfd\x44\x18\x0f\x69\x7c\xb5\xa0\x4c\x3c\x3d\xad\x4f\xd1\xf5\xf3\x0b\x1a\xcf\xe1\x31\x23\x08\x47\x9c\x22\x3c\x9d\x92\x44\x90\xc0\xf4\x01\x76\xc3\xac\xa4\xf9\x5d\xde\x87\x40\xdf\x69\x9c\x14\x6f\xa7\xab\x84\xfb\xb7\x7f\xeb\x09\x41\x62\x29\x75\x82\x74\x6d\x01\x2e\xb7\x61\x8c\x65\x1d\xcd\x4f\xe1\x6e\x57\x28\xa1\x90\x14\x16\xc8\x69\x2c\x98\x5c\xf5\x05\x08\xa7\x62\x41\x19\xef\xa2\xf3\x98\x0b\x1c\x45\x90\xc3\x94\x67\xdd\x38\x47\x58\xa0\x15\x4d\x19\xa2\x0f\x31\x62\x21\xbf\xeb\xfe\xdb\xbf\xc9\x59\xc2\x19\x95\x8f\xd1\x03\x8e\x61\x39\x12\x6a\x69\x58\x0d\xab\x66\xfd\xf8\xd8\x55\x94\x9e\x9e\xfe\xd3\x90\xcd\x3f\x0f\xff\xca\xe2\xef\xe5\x47\xdc\x51\x18\x13\x24\x28\x8d\x14\x96\x20\x0c\x4f\x85\x9a\x39\x9c\x46\x34\x0d\xd0\x3b\xd9\x6a\x99\x69\x4c\x68\x00\x54\x4d\xe8\xec\xec\x78\xd4\xff\x38\xf8\xd4\x47\xc3\x8b\xeb\xf7\xe7\x97\x26\x7d\x5b\xe9\xfc\xe0\xd0\xa8\x3f\x1c\x5c\x9d\x8f\x07\xa3\x9f\x7d\x91\x8b\x22\xb5\x95\x9c\x34\xd0\x72\xe2\xa9\xc6\x1b\xdb\x08\xf8\xa9\x77\x79\xda\x3f\x33\xc2\xe8\xd7\x56\x61\x33\x89\xec\x7d\xb5\xf8\xc5\x79\xef\xca\x28\xab\x5e\x56\x0b\x0e\xcf\xd1\xf5\xe8\x62\x6d\x32\x63\xc2\xd8\x4a\x67\x84\xcb\x4c\xe4\x2c\x48\x79\x12\x27\x08\x7a\x45\xba\xf3\x2e\x5a\x08\x91\xf0\x93\xe3\x63\x9c\x84\x5d\xbd\xf6\xe8\x4e\xe9\xf2\x3b\x0f\x1d\x2e\x04\x37\x85\xf5\x20\x8b\x05\xf4\xf5\xd7\xa3\x8b\x27\xa3\x85\xae\x1b\xd0\xf8\x9d\x4a\x69\xdc\x30\x60\x14\x39\x3c\xef\xeb\xbf\x9f\x4c\xbb\xba\x0e\xa1\x06\x8a\xd0\x2b\xf9\xfe\x5e\x0d\x79\xd9\x6b\x3d\x02\x3e\x3d\xf9\x7c\x95\xfa\x98\x7e\x34\xeb\x17\x86\x4f\x49\x64\xac\x2c\x98\x79\x12\x03\xc8\xf0\xca\x28\x3c\xbc\x32\x0b\x99\x55\x0e\xcd\x4d\x7a\x98\x6f\x07\x5b\x94\x16\xd2\x18\x61\xe4\x02\xd7\x82\x00\xaf\xab\x85\xa7\x53\xc2\x39\x2c\xdd\x0a\x76\x99\x09\x66\x22\x9c\xa6\x11\x66\xe8\x96\xd1\x3b\x62\x32\x89\xf3\x95\x76\xa9\xce\x76\xcc\x63\xbc\x24\x5b\x18\xd9\x4b\x3a\x9b\x11\x16\xc6\x26\x2b\xc3\xc6\x70\x06\x72\xbf\xa7\x21\xd8\xec\xeb\x5b\x0d\x88\x93\x69\xca\x42\xb1\x42\x60\x74\xcf\x61\x23\xe0\xf1\xb1\x9b\x72\xc2\x62\xb0\x76\x36\xf5\x33\x8d\xa0\x1c\xa4\xf4\xad\x80\x0d\x24\x09\x54\xc2\x71\x32\xf2\xc5\xa9\xa6\x13\x04\x08\x83\xe5\x66\x61\x39\x08\x6b\x2c\xe3\x6c\xc9\x22\x61\x51\x91\xb2\x08\xb1\xcc\xa2\x1a\xc7\x08\x27\x89\x55\x41\x55\x7a\x13\x3c\x7c\x17\x48\x9b\x8d\x17\x20\xb4\x69\xc9\x1e\xc6\x88\xb2\xb9\x7c\x36\x60\x73\xfd\xec\x58\x99\xcd\xca\x87\x57\xf2\x87\x7e\xac\x0a\xef\x3a\x2f\xbc\x6e\xd7\xb4\x56\x78\x36\xf5\xd5\x99\x8f\x42\xcc\x37\x6c\xf0\xb3\xd5\xa9\xfe\x3c\xb7\x44\xf2\xd3\x33\x6c\x65\xc1\x8e\x51\xac\xb6\x54\x4f\xdf\x65\x53\xdf\x63\x2c\x91\xba\x08\x8d\x08\xb4\x38\x09\xb0\x01\x9b\x4d\x92\x1d\xf0\x32\x97\x01\x61\xb2\x08\x48\xac\x36\x44\xd4\x8e\xab\x4c\xa0\xce\xf9\xf4\x22\xc1\x58\xa4\x7f\xee\x4c\xd5\xf8\x50\x92\x75\x89\xab\xd4\xa4\x39\x1c\xe6\x2b\x20\x55\x29\x0e\xbb\x08\xfd\x4c\x53\x34\x85\x05\xb9\x60\x72\x19\xa6\x09\x48\xb2\x26\x29\xe0\x25\x16\x24\x2e\x2c\xb2\x42\x9e\x25\x2f\x66\x2c\x8c\xef\xe9\x9d\xad\x90\xba\x08\x7d\xa0\x0f\xe4\x9e\xb0\x23\x58\xbd\xe9\xbd\x81\x59\xc8\xb8\x40\xb3\x54\xad\x0c\x03\xc2\xb8\xd0\x3a\x51\xb8\x4c\xe4\x02\x8a\xce\xca\x5c\xe5\x2b\x58\x59\xcb\x3f\xb6\x19\x2b\x6e\xf5\x6a\xc7\x4b\x49\xda\x4a\xd2\x50\x25\xa3\xc2\xae\xe5\xe9\xc5\x79\xc6\xce\xb4\x29\x67\x11\x30\x29\xa0\x0f\xe8\xea\xea\x03\xec\xcb\xe8\x71\x1d\x8e\x4b\x2c\xb7\x1e\x1c\x42\x06\x45\x9c\xa2\x80\x44\x44\x10\x30\x61\xd6\x77\x72\xd4\x1e\x96\x51\x8f\x4d\xa6\x5a\x8d\xea\xc0\x97\x29\x17\xe8\x96\xe8\xa5\x19\x09\xd0\x2d\x99\x51\x96\xfd\xad\xaf\xb6\xd9\x72\x58\x17\xa6\x9a\x8c\x79\xfc\x34\x8e\x94\x49\x62\xda\xf7\x87\x57\x46\xa1\xfc\x82\x1e\xd8\x9b\x5b\x20\x36\x12\x9a\x01\xd5\x76\xa6\x9c\xb9\x98\x37\x00\xcd\xe2\xd0\x99\x87\xea\xa8\x45\x1f\xa4\xcd\x42\x12\x99\x76\xa9\xad\x22\x46\x25\xa5\xb1\xbb\x7c\xe8\x62\xec\x9a\x5c\x62\x7e\xca\x80\xe6\x03\x65\x77\x60\x95\x70\x17\x26\xc9\x7a\x86\x01\xe6\x29\x52\x9d\x27\x03\x2f\x2c\x7f\x5a\x7a\x5b\x54\xdd\x11\x10\x14\xe6\x2d\x6a\x2e\xae\x12\x79\x97\x8c\x1f\x98\x1f\x31\xd7\x29\x85\x11\x86\xc4\x01\xdc\xe9\x91\x55\x82\x70\x81\x82\x10\xcf\x63\xca\x45\x38\xe5\xea\xa0\x39\xa2\x73\x38\x82\x35\xe7\xca\x1f\xc2\x44\x22\xbb\x66\x81\x16\x04\x47\x62\x81\xa6\x0b\x32\xbd\x43\x62\x95\x10\xbd\x99\x72\x98\x50\x26\xd4\x3d\xa4\x98\xc6\xe4\xd0\xb8\xe2\x6f\x84\xe5\xa4\x95\xb7\xe9\x30\x0e\xc8\x17\x0f\xdd\x1b\x02\x4e\x05\x51\x38\x23\xd3\xd5\x34\x22\xc6\xe5\x77\x75\x62\x27\x70\xa9\x92\x40\x77\x2b\x6b\xca\x2d\xc9\xad\xce\x48\xa0\xf6\x76\x6f\xa9\x58\xa0\xfc\xc8\x03\x0e\x19\x02\xba\xc4\x61\x7c\x78\xac\x7f\x18\xcf\xad\xf7\xa7\x6f\xaf\xd9\x5b\x50\x2e\x0e\x8f\xe1\x9f\xbd\x67\xad\xac\x6b\xaf\xd9\x8a\x69\x47\xaa\x91\x9d\xfd\xbe\x73\x55\x52\x65\xca\x14\xb7\x54\x69\x6e\xaa\xc1\xea\xbe\x2a\x56\xb6\x0e\x7a\xf5\x6b\xbe\x98\x69\x4c\x6e\x07\x57\xcb\x4e\x25\x13\x90\x59\x18\x2b\xd3\x38\xe8\xb2\xac\x93\x17\x7f\x00\x1f\x02\x8c\x46\x6a\x81\x2f\x97\x4e\xc6\x1d\x2a\xab\x8c\x55\x8d\x9a\x6a\xd5\xd2\x52\x29\x62\x51\x42\x02\xf4\x09\x47\xa9\xbd\xc0\xf2\x44\x16\x20\x35\x30\x47\xb0\x19\x30\xa2\x11\x51\xdb\x08\x52\x3d\xda\xba\x8c\xbc\xde\x4b\x50\x97\x82\x07\x6c\xfe\xf4\x84\x2c\xbb\x14\x2d\x6a\x68\x9c\x05\x05\x64\xc5\x2f\xec\x87\xa8\xc7\xb0\x2b\x92\xef\x88\x94\x28\xee\x96\xdb\x3d\x90\xd9\x67\xc1\x7c\x8d\xfc\x37\xcb\xe6\xc6\x36\xe4\xe3\x63\x37\x7b\x72\x03\x4f\x14\x8d\xbc\x64\xb9\x2e\xd3\x35\x05\xca\xe6\x38\x0e\xff\x01\xb9\xc9\x59\xa4\x3e\x5b\x71\xcf\xca\xc1\x55\x0c\x85\xfe\xf1\xf1\xb1\xfb\x5f\xf2\x87\x1e\x69\x8a\xaa\x1b\x6e\x3a\xb6\xad\xa6\x3a\x33\x42\x90\x65\x02\x4b\x51\x41\x51\x40\x1f\xe2\x88\xe2\x40\x59\x07\xac\x94\x69\x22\x98\xe7\xc0\x41\x79\x4c\x04\xc2\x41\xc0\x08\xe7\x16\xde\x3b\x20\x7a\x50\x5c\x86\x73\x86\xd5\x36\xac\x5e\x48\x9c\xeb\xb9\xe8\xd9\xda\x95\x85\xb5\x5c\x9b\xc2\x19\xc9\x69\xeb\x0a\x30\x76\x8d\x70\x0c\xfb\x41\xc3\x08\xeb\x1d\x9a\x5f\x11\x9d\xe5\x87\x19\xbf\x6e\xae\x7f\x7e\xcd\xd6\xc9\x33\x46\x32\x7b\xd7\x7c\x72\xfd\xeb\x36\xab\x4c\xaa\xe0\x46\x07\x6b\xaf\x3b\xe8\x94\xc6\x02\x4f\xb5\x31\x06\x0e\x96\x61\x1c\x72\xc1\xb0\xa0\x0c\x85\x33\xd8\x83\x12\x8b\x30\xbe\x53\x5b\x5a\xe0\xdb\x48\x79\x30\xb0\x95\xd4\x9f\x3f\x6f\xd5\x9f\x2d\x15\x0b\x99\xb7\xa9\xfc\xf6\xd0\x5d\xc6\x34\xee\x64\xd6\x20\xe1\x3d\x89\x8c\x47\x23\x1e\x92\x2e\x95\x61\x3c\xb7\xd4\xcf\xad\x74\x4e\x38\xb9\x18\xc4\x1c\x91\x2f\x49\xc8\x08\xf8\xaa\x52\x56\x81\x72\x5d\x7a\x8b\xa7\x77\xb0\xf3\x4d\x11\x23\x1d\x5c\x60\xdf\xcd\x5c\xa3\x81\xc7\x8f\x5f\x8b\xae\x32\x26\xe9\xeb\xd7\xdf\x4f\xb3\x53\x5d\xf8\x8b\xa0\x4e\xaa\x9f\xcb\x5c\x67\xcf\xa8\x7e\x46\xd9\x3c\x7b\xc4\xf5\x23\xe8\x98\xd4\xc3\x5f\xa5\xfa\x22\x1b\x39\xbd\xde\xa4\xe3\x51\x1e\xff\x24\x19\x35\x7e\x50\xca\xf4\x78\x04\x8d\x8a\x30\x14\x84\x81\x36\xf9\x54\x97\x5c\xd4\x52\x85\xc6\x04\x89\x70\x29\xd7\x30\x81\x71\x4e\xda\x14\xae\x92\xdc\x8f\xe7\x17\x17\xe7\x97\xef\xd1\xc7\xde\x65\xef\x7d\x7f\x64\xd0\xb9\x99\xaa\x1a\xea\xfa\xfc\xe2\x6c\xd8\x3b\xfd\xc9\x74\x94\x5e\x48\xe0\x00\x30\xad\xbc\x8a\x29\xec\x10\xb6\x03\xf9\x8d\x44\xd5\x40\x98\x87\x53\xd3\x86\xab\x7e\x59\x2d\xa8\x36\x82\xe7\x44\x08\x7d\xbe\xcb\x04\x09\x8c\x19\x32\xa4\xae\x86\x0e\xe3\x00\x3c\xaf\x95\xe6\x47\xb0\xce\x29\x1e\xaf\xcb\x4a\xab\xae\x51\x45\xd1\xfa\x7c\x01\x1e\x2b\xfb\x00\xdb\x8a\xb4\x5d\x1d\xf5\xb2\x21\x16\x24\xb7\x16\xde\x3c\xa1\xd7\x9e\xbc\x38\x09\xe0\x4c\x21\x3b\xc8\x2f\x7a\x3a\xa9\x9b\xa3\x5d\xd5\xed\x2d\x73\x99\x4d\xc0\x33\x65\xae\x52\x9d\x3d\x73\x1b\xae\xff\xd4\xbe\xc5\x87\xf1\x78\xa8\x36\xa7\x5d\x64\x5d\xe2\x0d\x94\x9b\x2d\x12\xdc\x72\x46\x75\xb2\x54\x6e\x89\x78\x20\x04\xb6\x9b\xca\xd3\x19\x18\x01\xca\x07\x06\xba\x13\x86\xf6\x60\x61\xb3\x13\xac\x95\xec\xb6\x21\xc3\x56\xb6\x4d\xb3\xb3\xfa\x16\x0e\x9e\xeb\xd9\x6f\x83\x9b\xb5\xd8\xfc\x56\x9c\x01\x99\xe1\x34\x12\xbc\xdc\x23\xf8\x19\xfc\xec\x43\x53\x0b\x59\xca\x9b\xfe\x3e\x72\x61\x04\x77\x10\x57\x95\xc2\x58\x17\x5a\xb1\xce\xa9\x59\x77\xbf\x12\xa9\x9a\x05\xd5\x26\x17\x9f\x8d\x8c\xaf\xc1\xc4\x5a\x24\xc5\xce\xa5\xa8\xd4\x9d\x05\x9b\x64\xb5\xca\xcc\xd1\x1a\x07\xd3\x58\xf8\xb3\x70\x3a\xc1\xcd\x6d\xc8\x2d\x58\xad\x30\x0d\xa3\x20\x91\x8b\x0f\x29\x95\xfd\x91\x95\x54\xe9\xc6\x8b\x49\x73\x0d\x84\xfa\x14\xfc\x0e\xd9\x6b\x41\xd8\x49\x98\xa6\xd4\x06\xb1\x95\x20\xe8\xf7\x14\xc7\x42\xf6\x5b\x99\xf9\x06\x8e\x33\x0f\x02\x6a\xc1\x84\x51\x1a\x87\x30\x67\x5a\x12\xcc\x53\x46\xc0\xcb\x5e\x14\xde\x11\xf4\xf1\x08\x7d\xfc\xf1\x08\xbd\x87\x59\xef\xfb\x1f\x4d\xf9\x6b\x5b\x4d\x65\x66\x4e\x7b\x97\xa7\x7d\xb9\x20\xab\x55\x04\xd9\x35\xdc\x0d\x67\x93\x68\xc8\xc2\x7b\x2c\xc8\x48\xfe\xce\x6c\xff\x97\xab\x44\x3d\x85\x0b\x86\x53\xba\x3c\x96\x3f\x8e\x0d\xfa\xda\x40\xae\x45\x79\xd4\x1f\x0e\xd4\x9b\xeb\xd1\x45\x4d\x52\x65\xd9\xe6\x6a\x27\x93\x78\x32\x89\xfb\xff\xdd\xfb\x38\xbc\xe8\x5f\x9d\x4c\x4a\x8e\x48\x9e\xaf\x8c\x9f\x87\x93\xbd\x98\xa2\x88\x3e\x68\xf7\xba\x9c\x2f\x10\xf8\xf8\xb4\x2d\xc0\x3d\x04\xed\x0a\x93\x10\x7d\xbe\x1e\x5d\x98\x1c\x14\x6c\xa7\x73\xc0\x25\xc8\x61\xc3\x5f\x99\xd4\x05\x6a\xea\x88\x4b\x49\xec\x20\xa9\x58\xa0\xeb\xab\xfe\x08\xfe\x1a\xf6\xae\xae\xfe\x3e\x18\x9d\x4d\x62\xa3\x5b\x56\x0f\xc1\x26\x0a\xa1\x5a\xfd\xbd\x37\xba\x3c\xbf\x7c\xaf\x6b\xd5\x10\xbc\x3f\xc8\xb1\x13\x76\x6e\x13\xcc\xf9\x03\x65\x81\xba\x44\x5f\xba\x92\x47\x13\xa1\x1d\xb7\x2c\xc2\xf9\x22\x5a\xa1\x20\xe4\x53\x9a\x32\x3c\x27\x81\xc2\xfa\xb9\x84\xb0\xc4\x2b\xd9\x69\xde\x87\x3c\xbc\x55\xe7\xb8\x54\x2c\x08\x53\x8e\x19\xf4\x4b\x46\xa6\x94\x05\xca\xb8\x17\xf4\xf3\x05\x89\x22\xb4\x08\xb9\xa0\x6c\x65\x6f\x06\x32\x8b\x72\x42\xf1\x7f\x0b\x97\x9b\xd0\x64\x32\x39\x58\xae\x72\x12\xf2\x4f\xf4\x2a\xe5\xea\x74\x86\xe8\x1b\x16\xfa\x25\xcf\x7a\x71\xa8\xb9\xdf\xf9\xc2\x4f\xd4\xff\x0e\x0a\x3a\x26\xfa\xf9\x01\x7a\x45\xf8\x14\x27\xb9\xba\x70\xa6\xd6\xe7\x61\x9c\x6b\x35\x59\x0e\xbd\x7c\xba\x3f\xc1\xa7\x73\x37\xba\x6d\xbd\x07\x1b\x1a\x0f\xda\xab\x26\xed\x29\x6b\x94\xb1\xe2\xd7\xf2\xfe\x56\x0d\xf3\xd5\x4c\x97\x35\x5b\xe0\x11\x11\xb6\x33\x72\x4f\x63\x67\x83\x8f\xbd\xf3\x0a\x1f\x63\x9f\x3b\xb9\xa1\x11\xfa\x30\xb8\x1a\x4b\x79\xf0\x76\x0d\xfe\x70\x86\xbd\xf1\x07\xf9\xd7\x14\x0d\x7b\xa3\xde\xc7\xfe\xb8\x3f\xba\xba\xe9\x5d\xdd\xfc\xed\x6a\x70\xe9\x1a\xdb\x9e\x89\xc4\x37\x50\x10\xd6\x2e\xa1\x82\x42\xf1\xfb\x2f\x57\x0c\x0b\xed\x69\x9b\xa1\x02\x87\xe5\x4a\x0e\xe5\x5a\xfd\x8c\xd2\x5d\x50\xa7\xca\x05\xd0\x6f\x9c\xc6\xbb\xc1\x1c\x3e\xca\x96\x07\x0e\x3e\xe4\x8f\x13\xf9\x1f\x85\x0a\xbe\xfa\x26\x1a\xfe\x3c\x46\x7f\x0f\xe3\x80\x3e\x70\x34\xa4\x0f\x84\x5d\x41\x07\x2a\x6b\x76\x40\xd3\xdb\x88\x74\xa0\x82\x07\x47\x48\xb5\x5f\xe5\xc2\xee\x04\x3a\xb2\xc7\xac\xe7\xca\x94\x4c\x32\x45\x93\x82\x32\xf8\xfd\xa4\x3a\xb8\x0d\x85\xfa\x3a\x04\xba\x90\xc3\x83\x54\xa9\x9c\x35\x19\x54\x1e\xd6\xd1\x67\x32\xfa\x7b\xa9\x6d\x2f\xb5\x6d\x1f\xb5\xad\x6e\xd7\xd6\xe8\x4b\xd7\xaf\xd3\xcd\xd4\xb4\x98\x19\xe5\x3e\x54\x15\xe1\xc1\x89\x2e\xb6\x46\xcd\xb3\x89\x92\x56\x33\x92\xb7\x94\x96\xb9\xaf\x71\x3d\xe8\xea\xa0\x6c\xd9\x16\xb9\x8e\x19\x76\xd5\x3f\xbd\x1e\x9d\x8f\x7f\xbe\x79\x3f\x1a\x5c\x0f\xbd\xf8\x79\x01\xb5\x44\x48\x35\x7f\xb0\xad\x38\x85\xe0\x57\x5c\x59\xef\x80\x23\xa3\x24\x89\x56\x70\x9b\x32\x3b\xf8\xad\x3a\x1f\x45\x69\x2c\x42\xf0\x0a\xb3\xd2\x6e\xf3\xf4\xe9\xb6\x69\x6f\xf0\x1b\x23\xe9\x2e\x48\x2b\x37\x34\x18\xbd\x47\x9f\x61\x47\xc3\x6b\x2a\xe7\x0f\xd6\x22\xb1\xaf\xfd\x95\xbf\x0d\xa2\x3e\x05\xea\x72\x7f\xbe\xc3\x24\xbe\x39\xf8\x1e\x89\xe7\xc3\xff\x5e\xbd\x5c\x4f\xaa\xa6\x30\xbe\xce\xf8\x27\xda\xa1\x75\x36\x77\x51\x4e\xad\x27\x93\x83\x23\xf3\xab\xc2\xbc\xe6\xb9\xdc\xf3\xef\xc3\x3f\x7f\x1b\x0e\xfa\xb3\x72\xb0\x3b\xbc\xd6\x1e\xaf\x73\x97\xd7\x93\xb2\x9b\xfe\x09\xf8\x1b\x9d\x14\x5d\xf5\xe7\xf3\xb8\xa7\xca\xa9\xf4\x45\x18\xa7\x5f\x8e\x3f\xe2\xe9\x49\x0e\x5a\x99\x11\x35\xc3\x59\xae\x82\xdb\xf5\xe7\xde\xd4\xbc\xa5\xb8\xf0\x79\xab\xa6\x90\xb5\x54\x96\x26\xb0\x65\xcd\xe5\x69\x65\x91\x41\x69\x2e\x5b\x26\xb2\x9e\x3c\xd7\xcf\x79\x03\x0e\x87\xf6\xc6\x55\x56\xf2\x3f\xc7\x0f\x94\xdd\xc1\xde\xc7\xb1\x58\x26\xc7\x99\x45\xc6\x8d\xaa\xee\xde\x53\xa8\x97\xee\xe6\xa5\xbb\x79\xe9\x6e\x5e\xba\x9b\x36\xba\x1b\xff\xc9\xcd\x7e\xfb\xb2\xfd\x50\xd7\x41\xa5\x77\x5e\x14\xfa\x01\xd9\x09\x65\x16\x15\xae\xf3\xca\x42\x42\x2b\x20\x5c\x5c\x57\xcb\x69\xd8\x7d\xcb\xb6\xe9\x4a\xfb\x6f\x0e\x5d\x7e\x18\xbb\xd3\xb0\x6e\xf7\x15\x11\x96\xab\x05\xe5\xa2\xb4\x2d\x50\xf8\xdf\x5f\x8a\x2f\x6a\x81\xac\xf7\x70\xd0\x5f\xf4\xfb\xa2\xd7\xc5\x63\xf7\x1e\xd2\x3f\x4f\x3e\xbd\x3f\x67\x0d\x92\x35\x0a\xaf\x0e\xea\x2e\x54\xdb\xfd\xe4\x7b\x29\x6b\xe8\xcc\x64\x0d\xc2\x7c\x15\x4f\x3b\x22\x5c\x12\x9a\x0a\x34\x3e\xff\xd8\x1f\x5c\x8f\x6f\xce\x2f\x6f\x3e\x9e\x5f\x5e\x8f\xfb\x57\xb0\xab\x2e\x18\x9e\x12\xf4\x4a\xb0\x94\xa0\x3f\xd0\x0c\x47\x5c\xfe\x2b\x39\x1c\x0b\x7a\x2c\xe7\x10\xdf\x41\xba\x29\x8d\x28\x2b\xa7\x53\x2f\x20\xdc\x0b\x41\xaf\x2e\x06\xa7\xbd\x8b\x3e\xfa\x03\x9d\x5e\xf4\x7b\xa3\xef\x9c\x9d\xc4\xb7\x42\xd3\x51\x98\x9b\xf1\x71\x6f\xd6\xf1\x71\x6f\xca\xf1\x71\x6f\x36\xe3\xe3\xde\x54\xc5\xc7\x75\x16\x4b\xeb\x0a\xed\x19\x54\x51\x97\x70\x92\x74\x96\x38\x0e\x67\x84\x8b\xf5\xc4\xf0\x73\x27\x41\xc7\x59\x19\xab\x6b\x55\x32\x21\xcc\x97\xe1\x66\x55\x2e\xd3\x5d\x2d\x23\x63\xcc\x91\xfd\xe8\x7a\xae\x6c\x3d\x63\xae\xfc\x32\x95\x0f\xe5\x28\xbf\x0c\x05\xe3\x04\x02\x57\xd0\xe7\x03\x18\x3d\x94\xb3\xbc\x3f\x3a\x9d\x20\xe4\xf2\x97\x67\x2e\x1a\x62\xef\x8f\xf6\x7a\xf3\x50\xdb\xbf\x7c\xbb\x11\xa9\xf6\x58\xc0\x7f\xa2\x52\xf0\xa9\x0a\xca\xd5\x0e\xec\x11\xab\xf9\x8e\x5f\xd9\x6d\x8b\xf9\x28\xa3\x6c\x2e\x45\xfc\x54\x64\x89\x7d\x80\xd5\xdd\x7f\x3f\x5c\x9d\xd6\x1f\xf6\xbf\xae\x07\xe3\x1e\xfa\xdc\x59\xa2\xf1\x60\xdc\xbb\xb8\xf9\xd8\xff\x38\x18\xfd\x2c\xfb\xf6\x10\x65\xeb\xf4\xc2\x43\x86\x46\x83\x6c\xac\xe4\x5b\x0b\x7a\x78\x8c\x51\xc9\x1d\x32\x0c\x13\xca\x88\x33\xc1\x61\xbe\x64\xea\x80\x2b\x62\x78\xc9\x08\x5c\x50\xcd\x0e\xd7\x20\x44\x11\x1a\xf5\x25\x78\xff\xec\x06\xf4\xdd\x0c\x07\xa3\xf1\x95\x67\xdf\xf2\x67\xcc\x98\xcf\x07\xcb\xa6\x72\xca\x18\xd6\x34\x05\xdd\xfa\x5f\xad\x99\x6e\x8b\x9a\x76\xcc\xd2\xd6\x41\x76\x49\x11\x3c\xea\xb6\x99\xb1\xba\xfa\xda\xce\xde\xc6\x7c\x7c\x43\x9d\xcf\x7c\x7f\x2f\x3a\x77\xce\xa6\xac\xf5\xe8\xaf\xaf\x5f\xbf\x7e\x6d\xad\x2e\x27\x90\xa4\x85\x2c\xd6\xd3\xe7\x93\x3d\xfb\x01\x64\xb6\x81\xf9\xb7\xab\xc1\xe5\xcd\xe8\xfa\xa2\x7f\x05\x7b\x99\x7e\x39\x69\x06\xbd\x37\xd2\xf9\xfe\xdc\x9e\x42\xf7\xed\x31\x76\xdf\x64\xcf\xb1\xfb\xf2\xa2\x31\xc6\xee\xd3\xc1\xfb\xf2\xe8\x7d\xeb\xa8\x7b\x93\x42\x00\xbf\x7c\x77\x5a\x4c\x13\x7d\x30\x50\x4c\x57\x8c\xe4\x97\x27\x7d\xf3\xba\xfb\xba\xfb\xe6\x4d\xf7\xf5\xf1\xdb\x1f\x2a\x64\x54\x4c\xbf\x3c\xf5\x7f\xbc\x3e\xfa\xe1\x87\xef\xab\xb1\x33\x9f\x36\xeb\xd4\xca\x1b\xef\x42\x88\x04\xca\x05\xee\x78\x20\xc1\xf0\x6c\x16\x4e\xd5\xdc\xeb\xff\xd1\x98\xf4\xd6\x5b\xe8\x6a\x13\xdd\x12\xf9\xf1\xa5\x22\xbe\x54\xc4\x67\xae\x88\x7e\x1d\xa2\x4f\xbc\x67\xc3\xd1\x23\xfa\xdc\x11\x68\xdc\x7b\xef\x3b\x05\x6d\x4b\xd9\x33\x66\xec\xeb\x9c\xae\x36\x08\x5a\xfe\xa7\x38\x63\xdd\xc3\x11\xeb\xee\x85\xd7\xce\x59\x6b\x39\x9e\xf9\x44\x45\x34\x2f\x86\x2e\x9f\x64\x41\xcd\x27\x3a\xac\xf9\xc6\xcb\x75\x64\xf3\x49\x1e\xdb\x7c\x1d\xdc\xbc\x78\x4e\xbb\xde\x88\xb8\xe6\x64\x1d\x23\x56\xe7\x3b\xe5\x84\x75\xb2\xc1\x21\x2b\x85\x43\xf0\xeb\x86\xef\x94\x7b\xae\xfc\x75\xf6\x45\x79\xc1\xbf\xbd\xa0\xe8\xf4\x1d\x5c\xb0\xab\x7b\x2a\xbc\x51\xf0\xc1\x6d\xfe\x93\x87\xd1\x3d\x61\x1b\x67\xc4\x0c\x2f\x6f\xe6\x2a\xb7\x3f\xd4\x3e\x0e\xf6\xd6\x55\x3a\x1c\xce\x55\x4e\xb4\xda\xda\xe7\xbf\xf5\xf2\x58\xad\x74\xfb\xc0\xd7\x1b\xd5\xe7\x0c\xb5\x29\xba\x80\xb2\x8a\x42\x2e\x8e\x10\x9d\x1d\x21\x81\xe7\x50\x91\x9f\xb5\x6f\x7f\xe9\x6f\x5f\xfa\xdb\x97\xfe\xf6\xa5\xbf\xfd\x57\xee\x6f\xeb\x4c\x6f\x77\xa3\x5e\xaf\x6b\xdf\x51\x57\x1b\xd9\x12\x68\xab\xc4\x6a\x8e\x4f\xb5\x90\x6b\x50\x06\x77\x96\x1d\x41\xef\x48\x8c\x2e\x7a\x3f\xf6\x2f\xd0\x70\x34\xf8\x74\x7e\xd6\x1f\xa1\xf1\xe0\xa7\xbe\xe7\x19\x8b\x2f\x58\x1d\x62\x2a\x8e\x61\xde\x15\xff\x38\x1a\xfc\xd4\x1f\x6d\x5f\x77\x87\xc8\xab\x9f\x3b\x99\x4f\x89\x29\x4d\x48\x50\x6f\x5d\xb7\x9b\xa6\x3a\x59\xba\x23\xab\xed\xa1\x25\x7b\xf0\x53\xff\x67\xa3\xad\x6c\xbc\xef\xb9\x45\xd7\xd2\x13\xb8\x69\xeb\xbb\x5d\x30\x7b\x38\x38\xc9\x66\x0e\x07\x47\xdb\x8f\x9e\x0e\xcd\x79\xd9\x87\x71\x6c\xcb\x66\xb1\x3b\x16\x52\x69\x0a\x11\x7b\x4c\x20\xd4\xfc\x41\x8d\x2d\x65\xfb\xcc\x83\x13\x54\x34\xca\x3c\x50\x03\x7f\xbd\x7a\xff\x52\x1d\x5f\xaa\xe3\x7e\xab\xe3\xb3\x74\x8e\xcf\xb0\xf4\xea\xda\x66\x4a\xbe\x15\xf2\x4f\xb1\xf4\xda\xeb\x45\x82\x5d\xeb\xe8\x57\xba\x51\x60\xa1\x0f\x93\xb0\xe5\x4a\xfe\xac\x79\x89\xa0\x0e\x6e\xeb\x73\xe2\x97\xc6\xf6\xd2\xd8\x5e\x1a\xdb\x0e\x8d\xad\xee\xc0\xb6\x45\x7d\x63\xf4\x2c\x0d\x9e\x4e\xc7\x0b\x2d\x28\xd8\x2d\x03\xfb\xe9\x90\xf6\xf5\x1d\x16\x98\x91\x20\xb3\x03\x5c\x5f\x95\x00\xc3\x13\xa6\x4f\xb2\xc1\x7e\x6b\xa4\xce\xb1\x7d\x97\x8f\xf5\x71\xbd\xe8\x82\x19\xcc\xda\x48\x7b\x30\x7a\xff\x0b\xfa\xdc\xf9\x5d\x3d\xea\x80\x25\x9c\x2f\x43\x2f\xa8\xdd\x49\xdd\xb4\x47\xea\xa6\x2e\xa9\x5a\x06\x95\x25\x89\xba\x2a\x32\x1b\xc4\x4a\x8b\xc3\x25\xfa\x66\xac\x0f\x6b\x97\xc4\x9f\x25\x63\x3e\x1f\x0c\xc2\xf8\x6c\x6d\xdd\xf8\x95\x89\x41\xb6\xb9\xda\xca\x91\xa7\x9c\xb4\xd3\xa1\x2c\x9c\x83\x7d\xf2\xf9\xfb\xf3\xcb\xca\x21\x71\x3a\x2b\xc9\xfe\xd6\xe5\xcb\x50\x2c\x4a\x5e\xef\xae\xbe\x9f\xb2\xef\x05\xda\xfa\xdf\x5f\x74\x6c\x2e\x0c\xfe\x9b\x98\x37\x5e\x4e\x2b\x0a\x70\x52\xc2\xbb\x38\xeb\x0d\x1b\x62\xe9\x99\x14\xeb\xa8\x88\xef\x7f\x41\x57\xbd\x8f\x17\x72\x42\x33\x48\x48\x7c\x7e\x86\x4e\x69\x1c\xcb\x79\xe0\x8c\x04\x84\x81\x11\x8d\x25\xfe\xe3\xcb\x07\x78\xb6\x0f\xe0\xdb\x00\xb6\x8e\x93\xaa\x0e\x52\x13\x74\x3a\xea\x9f\xf5\x2f\xc7\xe7\xbd\x0b\xe8\x1e\x22\x74\xf5\xf3\xd5\xc5\xe0\xfd\xcd\xd9\xa8\x77\x7e\x79\x73\x3d\xba\x28\x74\x35\x37\x19\x82\x7c\xac\xf7\x28\x86\x98\x73\xe5\xb4\x14\x71\x22\x67\xcc\x60\x6e\xc5\x48\x40\x62\x11\xe2\x68\x3d\x89\x06\xe7\x90\x10\xfc\x44\x5d\x8d\x40\x85\xd0\x5e\x68\x49\x03\x72\x62\xaa\x1e\x1e\x39\xe9\x24\x68\x72\x00\x2c\x8e\xd6\x34\x8e\xd6\xca\x8f\x94\xf6\xc9\x41\x89\x75\x05\x4b\x8e\x30\x57\x73\x6a\x41\x35\x87\x42\xf0\x92\xad\x88\x64\x3b\x72\x96\x33\xc3\x3b\xb2\x7a\xb3\xde\x05\x7b\x03\x3b\x63\x77\x64\xf5\x76\xfd\xec\x6d\x61\x6b\xec\x0a\x56\x37\x2b\x08\x07\x54\x5c\x6e\x14\x57\x42\xe0\x8d\x6d\x37\x62\xc5\xb5\x87\x7f\x93\x7f\xa9\x72\x2f\x55\xae\x9d\x2a\xf7\xcd\x74\x72\xd9\xba\xbb\xcd\x3a\xb7\x63\xa5\x9b\x78\x55\xbb\xe2\x19\x79\x7b\x55\x6f\xe7\xba\x37\xd1\xb5\xaf\xb4\xdd\xf3\x26\xdf\x0a\x82\x5a\x58\x7a\xf7\x76\x63\x2f\xc8\xbf\x36\xb6\x57\x1d\x7d\xb6\x46\xaa\x91\x97\xab\x4e\x70\xdb\x59\x86\x31\xc9\x3e\x5d\x16\x87\xe7\xa8\xe4\x30\xbb\x31\x64\x7e\x31\x75\xfd\x79\x79\x85\x6f\x52\x27\x22\xc3\x61\x9c\x3f\xe8\x44\x88\xaf\x78\x44\xe7\x27\xc7\xc7\x66\x7f\x03\x0e\xc8\xb2\x3b\xc7\x0e\xcb\x63\x1c\x94\x11\x7d\x0d\x54\x7c\x0a\x43\xd5\xaf\xac\x84\xf3\x7a\x04\x51\x4d\xf3\x2a\x56\x2c\xf6\x13\xf5\xe0\xaf\x7f\x7d\xa0\x72\x7a\xda\xc0\xa3\x4c\xcd\xaf\x9f\xdb\x97\x14\x48\x96\x5d\xbb\x64\x64\x27\x19\xe1\xc9\xa4\xc2\xf1\xf9\xc9\xfa\x45\x4e\xbe\xa1\x33\x9a\xba\xe5\xbb\x5f\xfa\x9e\x9b\x6d\x2f\x7d\xff\x4b\xdf\xff\xd2\xf7\xbf\xf4\xfd\x2f\x7d\xff\x3f\x55\xdf\xdf\x7c\xda\xbf\x51\xdc\x55\x4d\xcd\xd3\xc6\x6f\x07\xfc\xb6\xe8\x1b\x1b\x76\x7b\x39\x30\xab\xd8\x2d\x13\x3e\x7d\xc9\xae\xb9\xf0\xd2\xb1\x53\x36\x7c\xfa\xaf\x1d\x73\xe1\xa5\xc2\x9e\x89\x94\x45\x68\x72\x70\x7c\xff\xf6\x18\x0c\xbf\x0f\x50\xe7\xbf\xd1\xfb\xfe\x18\x75\x3e\xa0\xc9\xc1\x29\x8d\x05\x89\x45\x67\xbc\x4a\xc8\x49\xd1\x13\xf3\xf1\x97\xce\xc3\xc3\x43\x67\x46\xd9\xb2\x93\xb2\x88\xc4\x53\x1a\x90\x40\x4a\x07\xe8\xf0\xf7\xff\x23\x2b\xf5\x09\xdc\x57\x77\x4e\xc5\xf6\xae\xbf\x6e\xf6\x03\xf4\x7f\x8f\x8b\xee\xa4\xea\x67\x60\x0b\xc1\x4d\x01\x3c\xbf\x7c\xee\x84\xf7\x72\x1e\xf9\xdf\xe8\x63\x7f\xfc\x61\x70\x26\x7f\x7f\x40\x1f\xfa\xbd\xb3\xfe\x48\xfe\x0e\xd0\x59\x6f\xdc\x83\x23\x16\x9a\x8a\x24\x15\x48\xce\x2d\xb2\x0d\xad\x1f\x57\x59\xc8\xd9\xc2\xc5\x80\x94\x45\x87\xca\xc9\x76\x42\x98\x2c\x2d\x84\xa1\x74\xb5\x71\x82\x36\x73\x20\x01\x10\xe8\xa2\xf3\x19\x0a\xb0\xc0\x80\x17\xf2\xf5\xc5\xde\xfb\x10\xa3\x4e\x70\x84\x30\x1a\x0e\xae\xc6\x0a\xf0\x96\x64\x98\x70\x01\x96\x0b\x82\x03\xe5\x1b\x46\x22\x17\xbf\x1c\xc0\x65\x32\x9c\x08\x1d\x52\x34\xff\x96\xb2\xc7\xe8\xa2\x9f\x69\x0a\xd1\xa5\xe8\x3d\x61\x2c\x0c\x08\x5a\x10\x1c\xc8\x19\x26\xdc\xfb\xed\x7c\xc8\xa0\x01\x8d\x91\xdf\x53\xc2\x05\x5a\x12\xb1\xa0\x81\x4e\xf2\xdf\x5d\x5d\x14\xef\x28\x43\xbd\xe1\x39\x0a\xe8\x34\x5d\x92\x58\x80\x9a\x23\x94\x44\x04\x73\x15\xd8\x4a\x40\x4b\x39\x39\x3e\xc6\x49\x18\xd0\x29\xef\x4e\x23\x9a\x06\x33\x9a\xc6\x01\x5b\x75\x29\x9b\x3b\xbd\xf8\xbc\x7c\xb5\x6f\xf2\xab\xed\xb9\xa9\x65\xf3\xa2\x36\x3f\x5b\xdb\xdf\xad\xe5\x0f\x67\xfd\x72\x59\x79\xb4\xf1\xed\xec\x8b\x24\xe8\x66\x27\x85\x8e\x76\x52\x1e\x2b\x26\xf5\x47\x8b\x49\xd5\x78\xe1\xa5\xb6\xc9\x18\xf1\x52\xef\x5e\xea\x5d\xeb\xf5\xce\xda\xdd\x05\x24\x22\x82\x14\x7d\x10\xce\x50\x87\xb9\xac\x49\x4c\x52\x35\x55\x31\x59\x89\x67\xf5\x95\x65\x72\x1e\xea\x2a\x7d\xe8\x79\x2b\x35\x4b\xfb\xa8\xde\x34\x11\xf3\x55\x5a\x21\xe7\xa3\x4e\xbb\xa3\xab\xa1\xa8\x24\xe1\xa7\x22\x59\xe0\x38\xb3\xda\xe1\xb5\x54\x55\x48\xfa\xa8\x2c\xdb\x2a\xf9\xaa\xdb\x92\xf2\x51\xa5\x5c\x52\xf9\x3a\x4a\xab\xe5\x93\xad\x0d\x0d\xcd\xb2\x50\xf2\x17\x06\x0e\x84\x4b\x0a\xb6\x9d\x06\x37\xcd\x49\x7d\x45\x6d\x65\x68\x77\x37\xcb\x2d\x2b\x6b\x9a\x31\xb3\xdb\xb3\x06\x7e\xd6\xda\xd3\xe3\x93\x1d\xbb\x87\x28\xff\x86\xeb\x81\xe3\x47\xc7\x78\x50\xe3\xcf\xc4\x06\x51\x83\x84\xe5\x7a\x6c\x6d\x36\x2e\xac\x3a\xb4\xaa\xef\xbf\xd6\xa7\x64\xc1\xa9\x43\xc7\xe3\x6e\x4a\x5d\x66\x7e\x90\xad\x93\xb4\x4e\x16\x2b\x00\xd7\x06\xf0\x7b\xc8\xde\x0e\x64\xea\x16\xcc\x2e\xf9\xa8\xab\xb6\xda\x08\xdf\xbb\x82\x18\xc5\xbd\x94\x57\x9b\xb2\x7b\x2b\x37\x8a\x7b\x2b\xd7\xf3\x9b\x82\x3d\x7f\x27\x9b\x87\xd7\x21\x61\x85\x69\x44\x46\xd9\xf1\xdf\xec\x4a\x66\x0b\xc6\x87\x4c\xd9\xc0\xd7\x5f\x7b\x85\x9c\x5d\x9d\xf2\xb3\xdd\x99\x11\x2c\x52\x46\x3a\xb3\x08\xcf\xd1\xbb\x7e\x6f\x7c\x3d\xea\x43\x0a\x97\x5a\xa7\xbc\x97\xfa\x7c\x44\x98\x4e\x09\xcf\xcd\xf2\xc1\x12\x61\x78\xd1\x03\x2f\x45\xaa\x6e\x79\xd2\xf1\xc7\xf3\xa3\xc7\x17\xf9\x92\xcd\x97\x41\x51\xc4\xa9\x04\x6e\x17\x68\xa7\x0c\x7c\xa1\xeb\x8d\xa7\x36\xb3\xac\x5d\x2d\xf4\x17\xae\xe8\x39\x59\x2a\x2b\x94\xb2\xdb\x68\x5c\x87\x9c\xe2\x3e\xca\xdb\xaa\x41\xb5\xe1\xbc\xc8\xf9\xd7\x9f\x2a\x09\x87\x8a\x7b\x7f\xec\x7b\x5f\xd0\x7b\x12\x0b\xee\xba\x91\x94\xa5\xf2\x81\xf2\xa5\xb8\x91\xda\x0a\xdd\xb4\xc2\x35\xac\x69\x45\x31\x57\xbb\x29\xa7\xb5\xc3\x86\x11\xe1\x85\x1d\xa1\x2c\xd0\xfb\xfa\x2a\xd3\x2f\x93\x78\x22\xe0\xff\xca\x21\x56\x8c\xd0\x98\xa2\x28\xe4\x42\x85\x26\x88\x79\x02\x57\x1e\x00\x88\xce\xe0\xae\x6d\x92\xe4\x01\x65\xa9\x72\xd6\x7a\x16\x92\x39\x45\xb7\x78\x7a\x47\xe2\xe0\x08\x02\x93\xe7\x5b\xaa\x9c\x2f\x5c\x07\x97\xdf\x0c\xcd\x9d\x0b\x73\xc3\xb3\xd8\xb7\x59\x94\xcf\x40\xd2\x5a\x90\x73\x22\x3a\x0b\x82\x23\xb1\xe8\x40\xdc\x26\xdf\x06\x6c\x96\xb3\xaa\x5b\x90\x28\x41\x9f\x4f\x07\x1f\x3f\xf6\x2e\xcf\x5c\x7d\xf4\x46\x62\x2b\x30\x5c\xb9\x8d\xa2\x4e\x12\xa5\xf3\x30\xd6\x51\x90\x3a\xb2\xc4\x8f\xc7\x83\xe3\xe1\xc5\xf5\xfb\xf3\x4b\xf4\x07\xf8\x45\xfa\x03\x75\x18\x1a\xf5\x87\x03\x25\xa9\xde\xc1\xef\xef\xd4\xea\x43\x5f\x49\x60\x74\x99\x08\x8e\x66\x94\xa9\xdb\xf2\x6c\xa9\x2e\xcb\xa7\x71\x24\xc7\x8a\xc3\xce\xec\xb0\x78\xcc\xe0\x3a\x59\xfd\x16\x18\x3e\x5b\x11\xe6\x06\x96\x75\x29\x5a\x97\x7e\x1b\x0c\xff\xe7\xf8\x8c\x3e\xc4\x11\xc5\x01\x3f\x56\x8f\x3a\x33\x4a\x6f\x31\xb3\x4a\x55\x98\x92\x94\xa5\x6f\xa2\x30\x4e\xbf\xdc\xe0\x65\xf0\xef\x3f\x58\x91\x3a\x0c\x7d\x5c\x75\x46\x24\xa1\x48\x03\x90\xe9\xc2\xb5\x6d\xf7\x52\xca\xed\x94\x72\x9d\xaa\xdc\xc6\x87\x6a\x81\x46\xad\x32\xa9\xc7\xae\x1e\x74\x1d\xd2\xc6\xcf\x5f\x8f\xa0\x19\xc6\x4a\x46\x0e\x86\x1a\xa2\xc3\x48\x42\x5d\xf3\xb1\xed\xf4\x76\x78\x0a\x6d\x90\x2e\x43\x81\x32\xa3\x45\x18\x7b\x33\xbb\x45\x24\xa8\x4e\x54\xb2\xf7\x46\x9d\x4e\x5e\x5d\xd5\x01\x35\xb4\x40\x68\x80\xb7\x54\x2c\xbe\x73\xd1\xdc\x9b\x5e\x8f\xec\x76\x3a\x9c\x53\xf4\x6a\x13\x47\x7b\x8e\xd1\xc1\xb5\xe8\xad\xc0\xe0\x0a\x86\xc6\x04\x42\x17\x6e\x53\xf3\xcb\x64\x7b\xda\x7c\xb2\x96\x82\x91\x7f\xf9\x4a\x71\x82\x26\x07\x9b\xf6\xcd\x93\x03\xf4\x8a\xf0\x29\x4e\x08\xfa\x3d\xa5\x82\x70\x14\xce\xe4\x97\x80\x90\x07\x59\x42\xcf\x0c\xb6\xac\x73\x97\x6c\x2e\x57\x05\x8b\x5b\xf4\x4a\xce\x05\xb5\x2a\x59\x43\xb2\x57\xda\x26\x01\x23\xd8\x4d\xd8\x31\x97\xcd\x54\x36\xcf\x64\x66\x18\x8d\x5e\x71\x7d\xe1\xa1\xba\x01\x61\x8e\x30\x9b\x83\xf1\x04\xdf\x29\x8b\xcd\x14\x7a\x64\x50\x79\xa0\x38\xcf\x6e\xd9\xa4\xf9\x7e\xde\x2f\x6a\xff\x41\x3b\x06\xf8\xa5\xb8\xe1\xca\xd5\xbe\x0f\xcc\x00\xbd\x32\xb5\xb3\x92\x7d\x67\x04\x66\x22\x7f\xef\x8d\x2e\xcf\x2f\xdf\x9f\xe4\xd3\x99\xfb\x30\x90\x4b\x9c\x15\x4d\x59\xb9\x84\xd5\x55\xa3\x38\x40\x51\x18\x13\x44\xc1\xf7\x95\x9c\xda\x2c\xc2\xf9\x22\x5a\xa1\x20\xe4\x53\x9a\x32\x3c\x27\x81\xc2\xfa\xb9\x84\xb0\xc4\x2b\x74\xab\xec\x67\xb4\x63\x68\x2a\x16\x70\xdb\x27\xce\x5f\x32\x32\xa5\x2c\x50\xad\x12\xf4\xf3\x05\x89\x22\xb4\x08\xb9\xa0\x6c\x65\x9d\x39\xed\xad\x5b\xaf\x52\xd3\x66\x75\xad\x81\x2f\x7b\xb2\x62\x9b\x9f\xf8\xb7\xfa\x9a\x5a\x4c\x77\x24\x94\x4a\x77\x4f\x5a\xa9\xee\x59\xc7\xbe\x97\x86\xf1\xd2\x30\xfe\xe5\x1a\x86\x6b\xc0\xa0\xa9\x70\x37\x1e\x99\xc8\x05\xe4\xbd\xd9\x5c\x4e\x6b\x85\x5d\xe2\x64\x1d\xe5\x0f\x27\xc9\x7e\x2c\xab\xda\xd2\xd2\x3c\x2b\x6d\x5b\x58\xb5\xac\xac\xcd\x8c\xed\x6e\x69\xb5\x07\x85\xbb\x64\xb0\x55\x8b\xab\x76\x75\x39\xb2\xc5\xee\x88\x48\x22\x3c\x25\xae\x13\xa7\x52\x52\x6f\xd0\x82\xa7\x37\xd7\xd6\xb2\x51\xcc\xae\x2c\x9c\xb3\xa2\x27\xc8\xcc\xcf\x23\x47\xf7\x6f\xb2\xdb\xf1\xf2\x67\x6e\xdf\x24\x7f\x5f\xf4\x2e\xd1\xfd\xdb\xf5\xeb\xb7\xf0\xc8\x63\x02\xdf\xb6\xb6\x67\xcb\x5a\x69\xe6\x82\xc6\x8b\x90\x23\x9a\x10\xed\x6a\x36\xe4\x6b\x37\x63\x82\xa2\xd3\x88\xa6\x01\x7a\xa7\xcc\xd6\xff\x77\x7e\xc3\x5e\xd9\x67\x71\x35\x0e\xc5\x54\xc8\xf9\x07\xdc\x63\x9f\x66\xc1\x0d\x19\xe1\x34\x65\x53\x3d\xb0\x66\x72\x6b\xda\x45\x49\x1c\x09\xc2\x48\xa0\x9d\xd8\xb2\x70\x89\x19\x8c\xfe\x68\x8a\x39\x01\x79\xb1\x45\x52\x50\xc4\x88\xaa\x20\x78\x83\x16\x7a\x58\x84\xd3\x05\x0a\x65\xe5\x87\x69\x02\x9c\xc3\xdc\xbf\x41\x57\x3a\xd9\x8f\x2a\x59\x6f\x78\x9e\x8d\xf3\x56\xc1\xb7\x90\xf2\x76\x85\x18\x59\xe2\x24\x29\xf8\xeb\x2d\xe4\x07\x22\x11\xde\xbf\x41\xe0\x8e\x50\xb2\xbb\x7f\xab\x7e\x77\x11\xfa\xbb\x9a\x9c\x2d\x97\x04\x66\x6b\x77\x59\xc4\x48\x9d\x5c\x66\xf9\x1e\x2b\x87\xbc\x7c\x91\x0a\x21\xdf\x07\xf4\x21\xce\x12\x69\x76\x82\xa2\x84\xc1\xc9\x2c\xc2\x41\x10\x2a\xb7\xc2\x9b\x14\x6e\x89\x94\x56\x17\x38\x83\x2e\x1a\xc4\x53\x52\xc1\x76\x81\xef\x09\xba\x25\x24\xce\x2a\x56\x70\x94\x29\xd3\x89\xd5\xd4\x52\xe5\x46\xfb\x0e\x66\x64\x49\xef\xb3\xc8\xeb\xa5\x8a\xe1\x3a\x5b\x79\xa9\xbd\x2f\xb5\xf7\x5b\xae\xbd\xd6\xae\x97\xae\xed\x63\x1d\xd5\xbc\x98\xd2\x0e\xa9\xa3\xfc\x3b\xe0\x74\x2a\x1f\x28\xf4\xb9\xd3\x99\xa7\xa1\x31\x5e\x8d\x13\x04\x4c\xd6\xb8\x1f\xab\x42\x5a\x17\xac\xeb\x40\x00\x92\x58\x41\x60\x09\x13\x38\x60\x74\x22\x3b\x10\x1c\x3b\xb8\x08\x65\xa9\x7c\xa0\x64\xa1\xc3\xe9\x3a\x4f\x97\xcd\x0a\x3e\x49\xd9\x7c\xbb\x5b\xdc\xb2\xc0\x75\x71\xf6\x44\x69\x83\x8a\xbd\xff\xc5\x9c\xa7\xe0\x45\x68\x81\x85\xba\x04\x58\xee\xdb\x18\xe1\x09\x8d\xd5\x26\x46\xde\x33\x6e\x36\x70\xd9\x41\xc6\x72\xbd\x1a\xcf\x09\x2b\xc4\x89\xa3\x4c\xbd\x11\x1a\x06\x76\x5a\x74\x17\xf8\xf6\xf5\x6b\xf9\xfe\x87\x37\xaf\xd7\xb7\x04\xb7\x70\x17\x98\xab\x6e\x43\x59\x69\x06\x47\x28\x22\xf8\x1e\x6c\x35\xe0\x2a\x91\xde\x42\x01\x27\xfb\xa5\x1e\xe2\x90\xc3\xd5\xc5\x5b\xcc\x49\x17\xf5\xa2\x08\xdd\xc5\xf4\x21\x22\xc1\x1c\x7c\xd9\x57\xea\xca\x2e\x24\x9a\xbb\x9d\x23\x14\xc6\xd3\x28\x0d\x8a\x3d\xf2\x6d\x08\xb9\x52\xdd\x57\xf6\xf0\x8e\xac\xb8\x6b\x84\x7d\xf9\x7a\xdf\xf6\xd7\xab\xd1\xf4\xe8\x6c\x46\x98\x84\x2d\x59\x3b\xea\x99\x91\x6b\xe1\x54\x0b\xaa\x35\x52\x05\x73\x87\xbd\xd4\xad\x5c\x7b\x75\xdd\x52\x95\x06\x47\x91\x75\xae\xb0\xbf\x6a\xd3\xac\xb6\xac\x39\x16\xab\x4b\x56\x87\xba\xe8\x92\x22\x2c\x04\x59\x26\x22\x57\xb0\xc4\x01\x6c\xfe\xea\xc9\x6a\x45\x39\xfe\xef\xdc\xfc\x0c\x0a\x30\xdb\x74\x96\xed\x8c\xa6\x02\x05\x84\x0b\x46\x57\xd9\x14\x6e\x73\xe6\x29\xd5\x4c\xb1\x9c\xbb\xea\xb2\xd9\xe2\xda\x45\xbd\x99\x90\x9f\xab\x4a\xcb\x4a\xdf\xb1\x7e\xc0\x31\xdc\xc2\x66\x69\x8c\x48\x28\x16\x84\x59\xae\x1c\xd1\xad\x97\xeb\x09\xe3\x94\xca\xc9\xac\x20\x40\x76\x1a\x11\x1c\xa7\x49\xbd\x9e\xf0\xa5\xde\xbe\xd4\xdb\x6f\xa5\xde\x3a\xba\x5b\xbe\x70\x6d\xbb\xa9\x34\x56\x98\xc2\x25\x65\x07\x58\x31\xa5\x1b\xd2\x35\x6d\xd6\x89\xac\x40\xaa\x9a\x15\xcd\x7f\xd0\x50\xad\x1d\x47\x24\x71\x6d\xf2\x3a\x84\xeb\x2a\xce\xcd\xf6\xea\xab\x5d\x8b\x36\x56\x6a\x3d\x8c\x6b\xbb\x98\x5a\xd1\xea\xc8\x2a\xec\xaf\xe7\x96\xd4\x97\xfd\xbf\xdf\x78\x9e\xfd\x58\x45\x3d\x94\x56\x79\x53\x58\x23\x95\x1f\x79\x51\xa9\x05\xe8\x43\x30\x5b\xa0\x4b\x71\xf7\xea\xda\x20\xe4\xa3\xc8\x78\xb9\x58\x82\xd4\x5c\x51\x36\x82\xac\x41\xd2\x70\xc1\xb7\x08\xab\x1e\xd5\xe2\xe9\x8f\xea\x45\xb5\x70\xa7\x12\x20\xe4\x2f\x4f\x3e\x95\xa2\x0e\xa5\x09\xed\x64\xfb\x0a\x1d\x56\xab\xc9\x9b\x25\xfd\x55\x7e\x2e\xda\x32\xbb\x56\x19\x36\xc9\xa6\x2a\x1d\xbd\x53\x2b\xa5\xd3\x92\x46\x47\x16\xb9\xc0\x73\xe2\x7b\xf8\xbd\x95\xdc\x0d\xce\x44\x2d\xf0\x62\x72\x1f\xf0\x0e\x4e\x92\xf5\x0e\x42\xde\x33\x9f\x5f\x9e\xf5\xff\xdb\x4f\x9f\x15\xc1\x4e\xa1\x10\xf0\xcc\x35\xe5\x28\xa7\x75\xc3\xc2\x76\x1d\x65\xf3\x88\xdc\x93\xc8\x59\xc3\x2b\x24\xec\x2a\xd2\xb8\x23\x30\x5f\x5f\xb4\x41\xfa\x62\x8c\xc4\x80\x31\x6e\xdc\xbb\xfa\xa9\x58\xf1\xd6\xb7\x8a\xae\x39\x41\x87\xd3\x19\x18\x42\x1c\xca\xf9\x63\x10\xf2\x24\xc2\x2b\x98\x3e\x82\x75\x84\x9e\xb8\xe3\x24\xc9\x97\x0c\xa1\xe0\x48\x2a\xe4\xe0\x59\x0b\x0c\x7e\x40\x3f\xe8\x0a\x39\x4a\xe3\xf0\xf7\x94\x1c\xa1\x39\x23\x49\x69\xba\x7b\xc8\x91\xf6\xf1\xa5\xd6\x2b\xa4\x20\x27\x28\xba\x0f\xc9\x03\x3c\x59\x07\xa3\x94\x14\xec\x77\x12\xf2\xdc\xeb\x53\xea\xc9\x64\x72\x70\x9b\xc6\x41\x44\x10\xf9\x42\xa6\x88\xe1\x3b\x82\x82\xdb\x13\xbd\x5f\xaf\xbc\x4a\xa9\x62\xd1\x8f\x5c\xdf\xe3\xa5\x78\x77\x2b\x5e\x57\xe5\x95\xab\xa2\x0e\x89\xef\x43\x46\xe3\x25\x89\x45\xe7\x1e\xb3\x10\xee\xc0\x42\x03\x73\x7f\x1e\x17\x80\x17\x81\xb2\xab\x16\x67\x0f\x60\x90\xb2\xaa\xe2\x53\x1c\x95\x3c\x7f\xad\xaf\xfb\x81\x8f\xfd\x3b\x74\x76\x7e\xf5\xd3\x66\xbc\x3a\xe7\xc5\xff\xc6\xb0\x76\xb2\x36\xd7\x35\x2e\x46\x56\xd9\x1a\x6a\x5d\x9f\xa1\x5e\xf1\x1b\xa6\x94\x4e\x1d\x06\x31\x1f\x65\xd9\xf5\xf1\xcf\x9d\x5b\xa4\x26\x80\xb2\xec\x73\x30\xef\x4b\xe9\xb5\xe1\xfc\xc8\xe5\x7b\x0a\xee\x82\xde\x96\xf0\x52\xa1\x0f\xbc\x3d\xe1\xb3\xd4\x5e\xd0\x2e\x87\x31\x9e\x3a\x9d\x30\xad\x90\xb1\x76\xb2\x8d\xdc\xce\xec\x53\xb3\x77\x96\x1b\xb1\x6d\xa0\x68\x3b\x50\xa7\xbf\xbe\x0a\xd9\xe6\x6a\x7d\x4b\x93\x43\x2e\x77\x21\x59\x53\x93\x7f\x96\xea\x12\xf3\x86\xf7\x6c\xe5\xce\xe6\x2d\x3a\x45\x3f\x15\xa8\x7f\xf9\xe9\xe6\x53\x6f\x54\xfe\xe3\x53\xef\xe2\xda\x5d\x07\xfc\x91\x9c\x94\x2a\xaf\xb4\xa3\xc3\x84\x32\x71\xf8\xc7\x61\x4c\x63\xe2\xba\xf4\xef\x8b\xd2\x90\xca\xab\x84\x51\x18\x1c\xfe\x40\x60\x9b\xf9\x07\x5c\xfd\xfc\x6e\x3d\x25\x45\x0a\xbf\x78\x9a\x99\x30\x32\x85\xb0\x3c\xb7\xa9\x90\x53\x4b\x39\xbc\x24\xf2\x6f\x39\x81\x3c\xd4\x80\x87\xae\x73\x8f\xaf\xc3\xc9\x59\x4c\x94\xcd\x3b\x8c\x46\x64\xed\x0d\x69\x30\x7a\x8f\x46\x83\x8b\xbe\x87\x89\xa5\x07\xc0\x2e\x04\xa0\x00\xe4\xaf\xac\x61\x1f\x0e\xd8\xfc\x23\x8e\xf1\x9c\xb0\x43\xd4\x41\xe7\xf1\x7d\x28\x88\xbe\x63\x21\x9f\xc2\x95\x04\x7e\x84\x38\x89\xc8\x54\x79\x81\x98\x2e\x70\x3c\x27\xca\xd4\xe8\x48\x9f\x88\x08\xc4\x13\xa2\x0e\xb8\xa3\x70\x19\x0a\xae\xd1\x7f\x0c\xa3\x28\x8c\x8b\x1a\x4e\x75\xe8\xa2\xb5\x06\xb9\x60\xb8\x55\xe9\x64\xa1\xd3\x34\x16\xfa\xfe\xc3\x4a\xce\xaa\x51\x18\xcf\xe8\x9a\x6c\x2f\x0d\x42\x41\x01\x6a\x94\x05\x65\x47\x7a\x7a\x22\x28\x18\x07\x49\x01\x6d\xd3\x06\x11\x91\x77\x2b\xf2\x7f\xcd\x22\x73\x56\x32\x75\x98\x22\x4b\x09\x0e\x54\x3c\xab\x76\x95\x54\x6d\x55\x1b\x8b\xdd\x4f\x72\x7d\x09\xce\xa8\xc0\xea\x42\x9d\xcb\x28\x3b\x8b\xc3\xf2\x61\x8d\x4f\x4f\xd9\xa2\x32\x67\xc6\xdc\x6b\x48\x88\xff\x09\xd1\x7b\xf2\x58\x9f\x10\xfe\x73\xf3\x91\x33\x10\x5b\xeb\xea\x5a\xca\xdc\x44\x83\x97\x02\x89\xe5\x01\xa0\xaa\x5f\xb5\x98\xd9\x86\xea\x9d\x99\xdf\x76\x0c\x08\xaf\x36\x7d\x04\x7a\xe4\xc3\x17\xa9\x3e\xa5\x9b\x35\x50\xc1\x53\x60\x13\x4a\x06\x24\x4f\x4a\xdb\xfd\xae\x3a\x46\xa8\x31\x62\x7a\x02\xb5\x41\x68\x7b\x38\xb8\x92\x42\x3e\x03\x82\x7c\xa2\x23\x0d\x6a\x2f\x5d\xca\xd8\x1a\xa3\x79\x78\x4f\x62\x75\xf5\xae\x08\x7a\x46\xee\x49\x44\x13\xd3\x28\x80\x93\xa4\x64\x91\x90\x0f\x2d\x7a\x8f\xaf\xd0\x9f\x17\x51\x0b\xc3\x01\xf4\x66\x32\xed\x51\x96\x30\x1f\x9d\x04\x98\x75\x81\x47\xa7\x90\x2b\x6a\xed\x7c\x88\x7f\xe5\x02\x74\x57\x40\x81\xe7\xcf\x38\x22\xb4\xaa\xae\xa5\xcc\xed\x6d\x44\xd8\xab\x7a\x7b\xe6\x17\x98\x91\x8e\xbe\x35\x90\xf9\xcb\x95\xcd\x42\xf9\xcc\x75\x71\x77\x48\xdb\x55\xaf\xcf\x65\x5d\x6a\x0a\x29\x7d\x21\x73\x1b\x7c\xf9\xa3\xbc\x29\xda\x61\x69\x44\x78\x33\x1b\x71\x9b\x27\x5b\x9f\x5c\x98\x44\x7d\x95\x3a\x57\x0c\xc5\xa4\x1e\xa0\x9c\x2f\x3a\x30\x67\x24\x81\xbf\x87\x55\xab\xa8\x87\xd2\xfc\xc6\x82\xff\xd7\xdf\x92\x71\xab\xf1\x2a\x2a\x57\x21\x15\x5c\x8e\xc2\x31\x42\xf1\x30\xb5\x13\xc6\x01\xf9\x22\x2b\xd8\x34\x3b\x6f\x92\x7f\x5c\xa0\xcf\xb7\x61\x1c\xdc\xe0\x20\x60\x84\xf3\x93\x5f\x64\xe7\x7b\xb2\xa0\x5c\xfd\x47\xfe\xa5\x2a\xe5\x5d\x98\xc0\x7d\xd8\xce\x3d\x8e\xc2\x00\xf8\xad\x5f\x30\xb2\xa4\x82\x74\xc8\x17\x32\x4d\xf3\x37\x3a\x12\x4e\x27\xe1\x24\x0d\x68\x47\x88\x15\x3c\x9e\x51\x36\x25\x9b\x0f\x33\xa7\xbb\x85\xc7\xae\x02\xf9\xe7\xca\xac\xeb\xc3\x76\xa6\x34\x70\x4e\x1c\xb2\x64\x4e\x30\x35\xf8\x07\xbe\xc6\x00\x95\x22\x76\x25\x02\x4f\xef\xd0\xd5\xd8\xd3\x80\x6a\x2b\xb9\x1b\xdc\xd9\x60\x54\x22\x17\x90\x63\x24\x73\x2b\x71\x01\x78\x11\xa8\x79\x6a\x66\x90\x72\xa9\xf2\xb7\xfe\xa8\x63\xfb\xc1\x05\x4d\xfc\x71\x8b\x69\xad\xb0\x02\xb3\x39\x11\x55\xfe\x53\x1c\x3a\x2c\x82\x0e\x85\xfc\xce\xe9\x78\xc2\x01\x41\xd8\x32\x8c\xe5\xec\xa2\x6c\x70\x00\x06\x06\xe7\x67\xd6\x13\x81\x0d\x59\x7d\x5c\xff\x7d\x23\x1e\x69\x2c\xbb\xb9\x8d\x58\xab\x3a\xae\x40\x45\x00\x91\xb5\x9f\x83\x0f\x83\xab\xf1\xa5\xf6\x62\xa3\x7c\x1d\x64\x9e\x6d\x9d\xa7\xd8\xfb\xd1\xf9\xfc\xd9\xb4\x7e\xa4\x4a\x8d\x45\xbf\x0a\xcb\x15\xc3\x82\xc0\x3e\x24\x61\x65\x0f\x12\xf2\x73\xae\x1d\x48\x7c\x8d\xd2\x7c\xae\xac\xd5\xff\x68\xcf\x56\x84\x7b\xcc\x50\xa5\x45\x49\x3d\xbb\x8b\x5a\x50\xad\x91\x2a\x9c\xe6\x9c\xc2\xfe\x7a\xe1\x92\x3a\x4e\x92\x68\x85\x04\x45\xe4\x4b\xc8\xe1\x7e\x76\x76\x0d\xa2\x10\x34\x90\xa3\x34\x16\x61\x84\xc4\x82\xac\x10\x66\x24\x33\xe6\x73\x7b\x4e\xfe\x66\x68\xfa\x14\xa6\x3d\x18\x94\xef\x02\xa1\x26\x58\x8b\xc4\xbe\xfe\x77\xfe\x16\x88\xfa\x15\xa8\xea\x2d\xf2\x01\xbc\xa6\xf1\x82\x37\x8c\x17\x99\xca\xd9\x5e\xa3\x8e\xc5\x0f\xaa\x35\x52\xdf\x40\x85\xfb\xea\x34\x1d\x85\xb9\xe1\x4b\x59\x39\x02\xf7\x39\xd2\xb0\x8a\x3a\x94\x3e\x8f\x2b\xb4\xf6\xf4\xec\x92\x9d\xb6\xdd\xa1\xb5\xae\xae\xdd\xcc\xed\xee\x12\x6d\x2f\x2a\x77\xcb\x64\xee\xaa\xcc\x51\x51\xc0\x55\xd9\xae\xd9\xab\xa7\xcc\x91\x31\xab\x05\x93\x93\xa9\x5d\xda\x43\xf5\x4e\x16\x34\x5e\x10\xbb\x91\xf8\xd7\x34\x09\xd9\xb1\xd8\xff\x35\x0b\xcd\xa3\xa2\x6d\x1d\x59\x78\x5b\xd4\xb8\xe5\x1b\xa9\x2f\x9c\x9b\x34\x24\x50\x44\xf0\xa6\xb0\xa3\x1d\x40\x2d\xa8\x76\x48\xfd\x2b\x1f\x65\xb7\xf4\x31\xfe\x95\x8b\xd0\x55\x09\x77\x3a\x35\x76\xcb\xdb\xd5\x27\x01\x36\x46\xee\x4f\xd0\x3a\x70\xd8\x70\x70\x75\x3e\x3e\x1f\x40\x60\x42\x7d\xd8\xf2\x47\x7e\x54\x04\x0f\x23\x3a\xbd\xfb\xa3\xd3\x49\x63\xf9\xc3\xb9\x1d\xbb\x37\xbd\x5f\x27\xbb\x9b\xf6\x83\x43\x39\xe7\xe4\x0b\x9a\x46\x01\x78\x52\x44\xff\x08\x13\x88\xa7\x76\xb4\x76\x6a\x5d\x7c\x08\xf5\x39\xa2\x53\x1c\xa1\x20\x64\x64\x2a\x28\x5b\x75\xd1\x90\xf2\x30\x73\xac\x88\x51\x02\x7f\xdd\x13\x70\x04\x39\x27\x4c\x0e\x99\x82\xa3\x84\x85\x54\x2e\x1e\x55\x1d\x94\xb5\x8e\x32\x91\xf9\x3c\x89\xe8\x03\xe1\xe0\xfa\x63\x11\xce\x17\x84\x0b\xe7\xca\xf4\xa5\x84\xbc\xaa\x90\x1a\x06\xfd\x0a\x53\xa7\xf5\x87\x85\x11\x15\x2e\xd4\x8d\x07\xe3\xde\xc5\xcd\xfa\x5a\xdd\xfa\xee\x5d\xe1\x61\x0c\x57\xf1\xb3\x6d\x75\x86\x46\x83\xeb\xb1\xba\x9b\xb7\x7d\xed\x03\x1e\x63\x98\xb3\x97\x1e\x29\xeb\x83\x4e\x82\xc3\x7c\x63\xa8\xa3\xbc\x4c\xfe\x81\xd4\x67\x35\xbc\xd7\xc7\xcb\xf2\x19\xc9\xb6\xb3\xa1\x4f\x44\xa3\xbe\x54\xde\x3f\xbb\x01\x3e\x37\xc3\xc1\x68\x7c\xe5\xd9\x2f\xfc\xf3\x17\x83\x4f\x65\xb0\xef\x47\xca\xa6\x78\x33\x1e\xdc\xfc\xed\x6a\x70\x79\x33\xba\xbe\xe8\x5f\xdd\xbc\x3b\xbf\x70\x2e\xdb\x76\x81\xde\x1b\xe9\x3c\xa0\x9c\xf2\x34\xab\x82\xc5\x21\x58\xb8\x6b\x27\xa7\x38\x46\xf8\x96\xd3\x28\x55\xfe\x58\x19\x91\x59\xbb\x27\x2a\x0d\x74\x15\xb2\x9b\xe8\x2a\x94\x73\x91\xf5\x2c\xe0\x6c\x0a\x23\x1e\xc6\xf3\x88\x20\xcc\x18\x5e\x29\x2b\x6e\x49\x00\xd1\xdb\xdf\xc8\x54\x70\x14\xc6\x3c\x0c\x08\x0a\x08\x9f\xb2\xf0\x36\xf3\xc5\x04\x96\x4d\xdd\x9c\xda\x27\x1c\x85\x01\xfa\x8d\xd3\x18\x54\x65\x8b\x6d\xdd\x9d\x7d\x56\xff\x20\xf4\x98\xfd\x40\x70\x99\x39\x61\x54\xd0\x29\x8d\xc0\x9a\x0c\x9e\x88\x69\xa2\xed\xcc\x8a\xe9\x02\xc2\x45\x18\xc3\xe7\x5a\x27\x7d\xf3\xba\xfb\xba\xfb\xe6\x4d\xf7\xf5\xf1\xdb\x1f\x2a\x64\xf4\x1c\x25\x4b\xfd\x1f\xaf\x8f\x7e\xf8\xe1\xfb\x6a\xec\x29\x0b\x93\x32\x76\x4f\x56\x64\xb8\x2f\x03\xbd\x22\xc4\x71\x43\x82\xe1\xd9\x2c\x9c\xaa\x9e\xf1\xff\xd1\x98\xf4\x54\x78\x07\x85\xf6\xa4\x7e\xfc\xf2\x35\x37\x4e\x5f\x2a\xd9\x4b\x25\xdb\xf7\xb6\x77\x56\xc7\x0c\x2e\x82\xe4\x3c\x48\x8e\x34\x59\x9c\xee\x29\x1a\xf6\x46\xbd\x8f\xfd\x71\x7f\x74\x75\xd3\xbb\x82\x6a\x27\x9f\x0b\x34\xee\xbd\xf7\x1d\xf1\x5a\xd3\xf6\x9c\x59\xcb\xab\xed\x00\xbe\x3b\x8e\xa2\x55\x1e\xbb\x25\x1b\x1d\x73\x67\x10\x10\x1f\x74\x9e\x6a\xef\x83\x09\x66\x78\x49\x04\x61\xe0\xe6\x0f\x23\xb0\x64\x2b\x36\x18\x14\xc6\x9d\x28\x8c\xb3\xd6\x66\xc8\x41\x67\xda\xdc\x98\xd7\xc6\x5e\xb5\x74\xe5\xd6\x2f\x8c\x0b\x4e\x02\x1b\xe7\xa7\x8b\x0a\x9d\x8f\xee\x4f\x04\xfc\xce\x05\x95\xca\x06\x5d\x91\xb9\x70\xb2\xae\xb0\xd4\xff\xf5\x55\xa7\x82\xe8\x6c\x9b\xa6\xee\x69\xd6\x1d\x8c\x2c\xab\x69\x94\x72\x41\xd8\x4d\x4c\x03\xa2\xfb\x82\x42\x0f\xa4\xd3\xd0\x34\x16\xea\xdd\x5f\x8f\x36\x5f\x2e\xc9\x92\xb2\xd5\xcd\xf2\x56\x25\x78\xf3\xfa\xed\x0f\x79\x12\xdd\xe0\x9f\xec\x9f\x03\x82\x53\xd3\x99\x32\x97\xec\x04\xda\x2e\x22\x40\x02\xcf\xb5\x0b\xcb\xcc\x25\xe3\x03\x0b\x85\x20\x71\x56\xbe\x9f\x4e\x7b\xc3\xcc\x49\xd6\x15\x2a\x58\xc2\xa1\xcc\x12\x4e\xed\x26\xc4\x2b\x74\x4b\xd3\x38\x28\x75\x21\x76\xe7\x25\x1b\xc5\x0d\xf7\xce\x3b\x09\x9a\xd3\x28\xf0\x48\x98\xd5\x5c\x86\x97\x37\x73\x55\x30\x3f\x40\xa5\x74\x0b\xfe\xcf\xf1\x03\x65\x77\xb0\xbb\x70\x2c\x96\xc9\x71\x66\x57\x7a\xa3\xea\x64\x57\x8e\x1f\x1e\x40\x02\xbe\x8d\x2c\xd9\x23\x44\x67\x47\x50\x96\xf2\xc9\xf3\xf6\x58\x2f\x9d\xc8\x4b\x27\xf2\xd2\x89\xfc\xf3\x75\x22\x75\x26\x22\x85\xcc\x64\x59\x81\x8c\xd4\xeb\x89\x8c\x28\x4d\xa8\xf8\x14\x4f\x33\x7a\x5e\xc8\xf5\x29\xab\x3a\xd3\x84\x92\x96\xac\xaf\x52\x20\xfd\xe5\xf3\x0f\x5f\x73\xec\x30\xc3\xd4\x20\x53\xf4\x5d\x7c\xd1\xfb\xb1\x7f\x91\xbb\xc1\x46\xe3\xc1\x4f\x7d\xe7\x0e\x7a\x3d\xb0\x3a\xc4\xaa\xbd\x76\xe6\x67\x24\x59\x18\x4e\x74\x3d\xba\xa8\x47\xb2\x0e\xb0\x17\xe1\xc2\xd1\x9e\x27\x93\xa2\x44\x5d\x15\x85\x73\x43\xd3\x66\x5e\xd1\x97\x58\x8c\xfe\x24\x9b\x7a\xb5\x4b\xee\x9f\xb5\x20\x7c\x2a\x44\xca\x09\xeb\x64\xdb\x30\xf6\xd9\xe4\xe9\xa8\x7f\xd6\xbf\x1c\x9f\xf7\x2e\x20\x1b\x11\xba\xfa\xf9\xea\x62\xf0\xfe\xe6\x6c\xd4\x3b\xbf\xcc\x82\xdc\xea\x22\xc9\x1d\xe2\xca\xc7\x93\x58\x9f\x35\x70\xed\xc5\x10\x71\x22\xe7\x4a\x72\xd0\x9f\x32\x12\x90\x58\x84\x38\x5a\x4f\x9f\xc0\x99\x21\x9c\xf2\xeb\x13\xc7\x42\x50\x58\xb4\xa4\x01\x39\xa9\x1a\x10\x3d\x73\x02\x51\xcb\x81\xc5\xd1\x9a\xc6\xd1\x5a\xf9\x91\xd2\x3e\x39\x28\xb1\xae\x60\xc9\x11\xe6\x6a\xba\x25\xa8\x0e\x29\x55\x08\xb6\x15\xd3\xb8\x53\x8a\x65\xbb\x23\x67\x39\x9a\xde\x91\xd5\x9b\xf5\x35\xe0\x37\x70\x35\xf8\x8e\xac\xde\xae\x9f\xbd\x85\xc9\xb0\x22\x7e\xa5\xc3\xdc\xe2\x8d\x89\x66\x71\x26\x2c\xe9\xef\x48\xac\x38\x2d\xf5\x6b\x7a\x2f\x55\xee\xa5\xca\xb5\x57\xe5\xbe\x99\x4e\x2e\x5b\xf3\xb4\x59\xe7\x76\xac\x74\x13\xaf\x6a\xa7\xb6\x7d\x27\x2d\x57\xbd\x9d\xeb\xde\x44\xd7\xbe\xd2\x72\xff\x4d\xbe\x15\x00\xb5\xb0\xf4\xee\xed\xc6\x5e\x80\x7f\x6d\x6c\xaf\x3a\xfa\x2c\x32\xab\x91\x97\xab\x4e\x70\xdb\x59\x86\x31\x59\xe7\x3f\x8b\x50\x9e\xe7\x13\x07\xcb\x10\x36\xf6\x8f\xd0\x46\x04\x70\xf5\x3e\x0b\x72\x9e\x97\x44\x33\xed\xc7\xb2\xc0\x8e\x05\x3d\x5e\xd7\x04\x6e\x5e\x89\x9a\x11\x19\x0e\xe3\xf5\x16\x46\x84\xf8\x8a\x47\x74\x7e\x72\x7c\x5c\x30\x91\xad\x07\x59\xbe\xa8\xd5\x61\xea\x30\xa3\x8c\xf8\x0d\x8d\x42\x2f\x7d\xc2\x4b\x9f\xf0\xd2\x27\x7c\x0b\x7d\x42\xf3\x69\xc2\xd6\x47\x58\x7f\x02\x39\x09\x52\xc5\x2f\x0b\x7f\x5d\xf4\xf2\x79\x5e\xec\x6e\x7f\x39\x7b\x57\xdf\x56\xe6\x8d\x75\xa0\xbd\x0c\x9a\x55\xec\x96\x09\x9f\x6a\xb7\x6b\x2e\xbc\x74\xec\x94\x8d\x7d\x0f\x7f\xad\xb4\xa6\xfb\xef\x71\xe2\x74\x4f\xa1\x13\xd9\x81\x08\xe3\xa1\xb3\x72\x65\xa9\x7c\xa0\xf2\x71\xe0\x70\x3a\x43\x9d\xfb\x43\xb0\x87\x80\xdf\x1d\x9d\xe2\x10\x8c\x14\x70\xc4\x69\xee\x93\xd6\x65\x0d\xb3\x1b\xb6\x89\xf6\x78\xd4\x3b\xed\xa3\xfe\x68\x34\x18\xc9\x09\x48\x6f\x7c\x7e\xf9\x1e\x5d\x0c\xde\x23\x39\xa4\xa0\xc7\xc7\xee\x10\x8b\xc5\xd3\xd3\xc9\x24\x7e\x7c\xec\xf6\x19\x7b\x7a\x32\xd3\x6c\x80\x55\x4d\xeb\xe2\x5c\xc7\x26\xd6\x66\xdc\x4b\x12\x8b\x13\x93\xde\xea\xc4\xd5\xc0\x2a\xd8\x86\x09\x49\xbf\xad\x16\x1d\x5e\xd7\x73\x7f\x81\x63\xb0\x5e\x81\xba\xcf\xc1\x68\x35\x0f\x38\x48\x67\x28\xc1\xe1\x3a\xe8\x20\xec\xba\x99\x48\xd5\xc6\x31\xd2\x69\x83\xca\x73\xd2\x40\xaf\xce\xc8\x0c\xa7\x91\x38\x41\xd9\x6e\x25\x09\xbe\x6b\x83\x9c\x01\xd9\x44\x59\x96\xbf\x0a\x92\xb8\x15\x91\xf1\xa8\x14\x20\x17\xda\x62\x1e\x3e\x77\x99\x72\x81\x66\x21\xe3\x10\x5f\x5f\xc7\xbf\x34\xd3\x6f\x55\x8b\x2d\x2b\x70\x30\xba\xc4\xec\x8e\x08\x15\xbb\x3f\xbb\x1b\x91\xc7\xa9\xc4\xda\x71\x0d\x09\xec\x17\x43\x1a\xe3\x39\xe9\x41\x48\xfe\x30\x9e\x51\xb6\x54\xa7\xe5\x33\xca\x64\x0f\x72\xa5\xa0\x2f\xf1\x92\x3c\x3d\xed\xc2\x77\x47\x05\xb6\x0c\xb4\xd0\xce\xda\x69\xf1\x12\x85\xeb\x95\xc8\x2d\x15\x0b\x14\xd1\xe9\x1d\xd4\x1e\x65\xa6\x8f\x68\xa2\xce\xac\xed\x44\xfc\x20\xbc\x49\xc8\xbe\x5f\xf9\xef\x7a\x7a\x02\xa4\xc7\xc7\xee\x99\xba\x49\x10\x3c\x3d\xd5\xe1\xe2\x42\xf2\xa2\x94\xdf\x7d\xb8\x0d\x85\x6a\x5a\x32\x5f\xc7\x2a\x7b\xbe\x6c\x1c\x20\x3e\x44\xe0\xae\xaf\xa0\x73\x02\x01\x5b\xc1\xa2\x34\xbf\xdd\x8c\xe3\xe0\x98\x32\x58\x4b\x7a\x32\xf2\x46\xf3\xa1\xc6\x70\x1c\xd0\x65\xa7\x02\x53\x3e\x3a\xda\x85\x67\x33\xe8\x6a\xd2\xea\x1e\x29\x65\x3a\x38\xd5\xa2\x10\x08\x1d\x4c\x4d\x8e\x64\x67\x7f\xa7\x5d\x5d\x82\x35\x88\xba\x23\xa2\x4c\x4d\xd4\x13\x6d\xd9\x81\x70\x62\x74\xb7\xd6\xb6\x1a\x5b\x66\x8a\xed\x5c\xdf\x83\xdb\x1c\x1b\xec\x34\x7d\x00\x6c\x04\xc4\x2a\x01\xab\x1f\x15\x92\x01\xa9\x90\x0c\x09\x61\xb2\xdf\x24\x01\xa2\xb1\x57\x61\x79\xa3\xd8\xa8\xc8\xa5\x04\xca\x16\x9f\x76\x7d\xe5\xa4\x66\xd0\x30\x9e\xe7\xc9\xba\x5d\x63\x95\xad\x4a\x6a\x00\x25\xd3\x3b\x99\x52\x96\x34\xac\x70\x6c\xa8\x55\x69\xab\x61\x8b\xb1\xac\x51\x6f\x78\x9e\xad\x05\x64\x87\xd7\x1b\x9e\x7f\x52\x7f\x3d\x3d\x21\x46\x7e\x4f\x43\x46\x38\x92\xb3\xe2\x42\xa2\x8f\x61\x7c\x7a\xb1\x4e\xd7\x45\x3f\xd3\x14\x56\x09\xd3\x94\x31\x12\x8b\x68\x25\x3f\x42\x41\xe0\xc7\x30\xc6\x6c\x55\x10\x18\x53\x94\x26\x73\x86\x03\xa2\xa2\xc8\x9d\x5e\x9c\x1f\xa1\x24\x22\x98\x13\x24\x87\x29\x71\x92\xaf\xe0\xe6\xa1\x58\xa4\xb7\xe0\x6f\x61\x2a\x99\xcf\x14\xf1\xe3\x69\x14\xfe\x25\xa0\x0f\x71\x44\x71\x60\x1a\xfb\x1a\x17\x80\x25\xf3\xa7\x17\xe7\x1f\x43\xc8\x84\x33\xdb\xaa\x90\x9e\x31\xbf\xff\x0c\x39\xf3\xf8\x64\x59\x88\xf2\x28\x8c\x09\x12\x94\x46\x5e\xc5\xb1\x2d\x55\xad\x0a\x36\xbc\xd7\x06\x7e\x99\xe1\x9f\xb2\x59\xd0\x11\x11\x33\x03\x3d\x88\x90\x2e\x53\x90\x18\x99\xd7\xfc\x3b\x20\x9a\x29\xc6\x01\xfa\x40\x22\x63\x57\x59\x4c\x62\x05\x91\x73\x53\x07\x08\x24\xb1\x82\xfc\x2a\xeb\x84\xfa\xfd\xf4\xf4\x2b\x0a\x63\x65\x5a\xaa\x16\xd2\xb7\x04\xa2\xfd\x2b\xa7\x3e\x24\x50\xf7\x2d\x63\x65\x4e\x7a\xfa\x2e\xfb\x2e\xc7\x38\x0a\x31\xef\x22\x34\x52\xd1\xaf\x25\xc0\x06\x6c\xf6\x05\x1d\xf0\x31\xa2\x2c\x50\x31\xe7\xb3\xf3\x08\x75\x87\x46\x26\x50\x85\x0c\x53\x4e\x4e\x8c\xbd\xe9\x9f\x3d\x5b\xb5\x3e\x96\xe4\x5d\x62\x2b\x75\x69\x16\x87\x8f\x8f\xdd\x21\xfc\x54\x6b\x98\x43\xdd\x39\x4c\xe1\xf6\x92\x60\xab\xb5\xbb\x26\x18\xd3\x0c\x52\xc0\x4c\x2c\x48\x9c\xf1\x55\x97\xdc\x75\xf2\x62\xd6\xc2\xf8\x9e\xde\xd9\x8a\xa9\x8b\xd0\x07\xfa\x40\xee\x09\x3b\x92\x3d\x4e\x76\x91\x4a\xad\x59\x67\x69\x14\x49\x4a\x01\x61\x72\x3a\x12\xa8\x09\xd5\x32\xc1\x53\x68\x71\x25\xae\xf2\x55\x7e\x09\x68\x9b\xb1\xe2\x56\xb7\x86\xbc\x94\xa5\xad\x2c\xad\xd5\x52\x50\xc4\xd2\xb8\x8b\xc6\x32\x37\xb3\x08\xcf\x33\x53\xf4\x80\xcc\xc2\x98\x04\x68\x49\x99\xcc\x0c\x96\x1d\xe3\xd4\xd9\x76\x6b\xc3\xd9\xc8\xc9\xb5\xf2\x8c\x30\x12\xa0\xdb\x55\xa1\x4d\xea\x50\xd8\xc6\xcd\x44\x3f\x61\x93\xe2\x24\xd5\xde\x27\xf8\x82\xaa\xa5\x01\x5f\xe0\x37\x08\x8e\x08\xb3\xe8\xbc\x59\x67\x01\x13\x2c\x38\x14\x34\x73\x69\x88\x67\xa1\x07\xf7\x12\x24\x86\x9c\x75\x6e\xe5\xec\x48\x55\x4c\x39\xa0\x09\x7c\x47\x10\x46\x0f\x8b\x30\x22\xc8\x32\x8b\xdd\x11\xd5\x40\x35\x8e\xc9\x14\x4e\x8c\x83\x74\x99\xc0\x95\x3f\x32\x25\xb1\x50\x3e\x3b\x60\x19\x93\x24\x30\x43\x4a\x12\xbd\x53\x03\xad\x68\x2e\x9f\x0d\xd8\x5c\x3f\x3b\xd6\x8b\xb0\xc7\xc7\x2e\x78\xf5\xd0\x8f\x31\x97\x4f\xae\xf5\xf1\xd6\xd3\x53\xb7\xdb\x35\x3b\xa2\xf9\x1a\x54\x5c\x85\x22\x70\x08\x6d\xf8\x6b\x96\xc6\x33\x70\x30\x14\x43\x12\x12\x35\x07\xe3\x34\x65\xb0\xe8\x0e\xa0\x31\xa8\x25\x64\x3e\x2b\x13\x14\xe1\x98\xc2\x7e\x42\xde\xcf\x15\xdf\xbf\x52\xae\x5f\xe0\x96\xa8\xbe\x0f\x52\x78\x6d\xdc\x66\x7e\x2e\xf5\xa6\xcc\xaf\xa0\xad\x29\xd5\x70\xa7\x56\x97\xfb\x15\x3c\xea\x25\xc9\xd3\x13\xdc\x63\x51\x8e\xc7\xf5\xcb\x31\xfc\xa5\x5e\xee\xf6\x59\xcc\xc5\xf2\xb5\x89\x19\x0a\x4c\x8e\x8e\x31\x15\xb0\x5f\x2e\xf5\x67\xbb\x1f\x9b\x5b\xbd\x93\xb8\xcf\x18\x65\x27\xc8\x75\xcc\xb5\x03\xa2\x83\xe2\x94\x26\xab\x72\x77\x7e\x82\xb2\xa3\x32\xea\xc3\xc8\x09\xe0\x20\x10\x10\xe5\xf8\x5d\x4d\x40\xf4\x4a\x12\x3d\x50\x06\xfb\x14\xb9\x23\x96\xff\xcf\x49\xc4\x1b\xc8\x41\x68\x26\x8b\x58\x2e\xc4\xe0\xb0\x06\x29\x77\x47\x4e\xed\xd5\x52\x5e\xaa\x92\x04\x0c\x93\x02\x98\x11\xe5\x5d\xd9\x21\x52\x87\x8b\xe1\x8c\x70\xe1\xa9\xde\x07\xc9\x87\x12\x38\xc1\x21\x80\x72\x1d\xf3\x34\x49\xc0\x9b\xcd\x05\x3c\x85\x09\xe9\x78\x41\xd0\x5d\x4c\x1f\x62\x9d\x94\x23\xcc\xc8\x89\xa5\x0b\x6f\x09\xde\x87\x3c\xec\x3a\xc2\x6e\x2e\xac\xa4\xd6\x2d\x64\x18\x61\x3d\xd5\xf4\xa3\xe9\x03\xe4\x43\x48\xb7\x55\x3f\xa5\x59\xe2\x1a\xc0\xdb\x27\x48\x82\xe6\x1d\x45\xb1\x22\xd4\x62\xe0\x8f\xea\x45\xb5\xd4\xa3\xe6\x1d\x2f\x8e\xc3\x7f\xa8\xa1\x49\xf5\xc0\xde\x1c\xbd\xe1\x1c\xe4\x38\x61\x21\x8e\xc2\x7f\x90\xe2\xb1\x9c\x93\x43\xb5\x94\xb7\x2a\x65\xa6\x62\x3e\x01\xb3\x89\x38\x94\xe8\x91\x8e\xb2\x79\x17\x3a\xe1\xde\xf0\xdc\x6f\x60\x31\x0a\x9a\x15\xc6\x87\x22\xb3\x8c\x14\x64\xa9\xbc\x68\xc1\xac\x2c\x4d\x22\x8a\x8d\xbb\xe5\x3e\xa2\x76\xa5\x34\x21\x71\xe1\xf8\xcb\xba\x9c\xb1\x88\xd8\x95\x3c\xb0\x50\x90\xdc\x3b\x98\x0b\x7f\x23\x75\x35\x74\x66\x45\x3a\x3e\x1d\xaa\xcd\x77\x13\xea\x76\x42\x3b\x60\x9e\x31\x17\xe0\x3a\xa1\x1d\x50\xfb\xf8\x0b\xe1\x8c\x44\x4e\x90\xe4\xb7\x89\xb0\x20\x0c\xa5\xdc\x49\xdb\x21\xed\xa5\x1a\x26\xa7\x7a\x29\x9e\x72\xb5\x28\xc6\x51\x24\xe1\x38\x7a\x05\x96\x81\xe0\x36\xd5\x38\x67\x6e\x8c\x67\xa7\x17\x93\x07\x38\xe9\x71\xa9\xcd\xd3\xd9\xe1\xd4\x51\xa4\x3a\x39\x95\xa5\x24\xa7\x2e\xde\xd5\xc3\x2e\xec\xa5\x58\xf9\x81\x56\xc2\x21\xb7\x1d\xaa\xb9\x05\xed\x0a\x33\x87\x4a\xc8\x1a\x56\xca\x90\xda\x05\xad\x46\x2c\x9c\x82\xd9\xf3\x1d\x31\xf6\xe0\x16\x09\x3f\x15\xea\x5a\xac\x2f\xbc\x4e\xed\x07\xed\x3a\x5b\x35\xa6\x77\xc0\xdb\x6c\x53\xca\x89\xec\x40\x29\x8b\xf4\x57\x07\xcf\x11\x6a\x08\xae\xd5\x2f\x78\x20\x58\x29\xc4\xe8\xc3\x78\xec\xd7\x36\x4a\x49\xbd\x41\x4f\x72\x6f\x0f\x99\xfd\xa3\x1a\xa4\xb4\xbb\x74\xe5\x6d\x56\x07\x21\xf2\x88\x39\x94\x5b\x4d\x6e\x77\xe8\x75\x34\xbd\xd2\x3e\xd9\x87\x83\xd1\x18\xae\xd1\x16\xec\x17\xbe\xb3\x1a\xe0\x97\x30\x97\x2b\x75\x31\xd8\x3b\x08\x41\xc9\xdb\x7b\x5d\xe0\xad\x68\x42\x25\x60\x78\xd4\x6d\x13\x7e\xc3\x09\xff\x06\xfc\xf1\x8c\xd2\xfa\x2a\xcc\x9e\xf0\xfd\xbd\xee\xbf\xd4\xb2\x97\x5a\xd6\x62\x2d\x73\x74\x65\x92\x63\xb6\xd2\x2f\x98\xfb\xa8\xd9\xcf\x02\x73\x74\x4b\x48\x8c\x92\x94\x2f\x48\x80\x78\x0a\x1e\xe7\xe1\x00\xc7\x59\x7d\x9b\x23\x3b\x28\x53\x36\x77\x2a\x97\x69\xec\x30\x8d\x7c\x6f\xbb\xa6\x09\x4d\x51\x3d\xa9\x7a\xc5\x0c\xf0\xe7\xe8\x09\x67\x23\x77\x47\x56\x35\x0d\xbe\x9c\x72\x66\x75\xc0\x73\xb3\x62\x31\xba\xcc\xb7\xee\xd6\xce\xce\x67\x90\xca\xc6\xa1\x3e\x98\x83\x58\xbb\x07\x0b\x4e\xea\x2d\xab\xb3\x67\x6e\xbd\x0e\x7e\x7c\xec\xfe\x98\xfd\x71\xe9\x4b\xd6\x25\x6e\x57\xae\xd7\x63\x8f\x8f\xdd\x33\xf8\xa5\x73\x21\xab\xcf\x56\x8e\x1b\x94\xe4\xae\xf0\x76\xf2\x6d\x30\x6c\x81\x86\x72\xed\xf2\xf8\xd8\xfd\x2f\xf9\xa3\x39\x15\x6f\x1c\x3b\x9d\xad\x25\x61\x5e\xfa\xe6\x8d\x27\x2f\x59\x87\x5a\x90\x79\x7c\xec\x7e\xd0\x83\xb4\x57\x9e\x0d\x52\x9e\xaa\xae\x47\x17\xa6\xda\xd4\x5e\x6f\xd0\xb2\x36\x7b\xd6\xca\x2b\x6d\x29\x9d\x3d\xb9\x81\x27\x39\x68\x9a\x83\xba\xf8\x37\x81\x74\x91\xdc\x5c\xaf\x6b\x84\x53\xd5\xbd\xcb\x0c\x7b\x15\xad\x3f\x90\x1f\x21\xed\x26\xeb\xf1\xb1\xdb\xfc\x73\xd7\xc2\x6a\x48\xab\x34\x9e\x54\x54\x9f\x96\x99\x37\x54\xe7\x97\xb9\xdc\xf2\x7d\xeb\x84\xa2\xf6\xa8\xd9\xb4\xfa\xec\x93\x82\x5f\x21\xc8\x29\xd7\x5a\xf9\x4f\x64\x55\x18\xe8\x2c\x2c\xcf\xf5\xa3\x56\x4a\x61\xaf\x1c\x1c\xc5\xb0\xc0\x8c\x04\xa6\xd1\xbe\x49\x55\xae\x0d\xe8\x20\x08\x5f\xbc\x72\x80\x6d\x6b\xaa\xd3\x86\x0a\x9f\x4c\x6c\x54\xdb\xaa\x1a\xde\xb0\x1e\xed\x08\x6f\x27\x0f\x51\xe4\xdb\x31\x12\xf2\xcc\x98\x83\x90\xba\x20\x92\x45\x05\x30\x1e\xb3\xee\xbd\x13\x7b\x36\x1e\x1e\xc5\x91\x9b\xe3\xd4\x63\x5f\x21\x66\x52\x96\x39\x5a\x40\x0f\x04\x3c\xf4\xff\xa6\x6d\xc9\xf4\xe5\x03\xc1\x56\x08\xcf\xb1\xc5\x84\xb7\x0e\x84\x8b\xc4\xd1\xba\xdc\xc3\x18\x6e\x18\x80\xed\xa2\x76\xd4\x72\x04\x47\xec\x04\x91\x2f\x09\xe5\x24\xb7\xf4\xf6\x74\x0d\xbc\xed\x16\xd8\x9d\xa3\x67\xe6\x53\x5d\x3c\x7a\x85\x3e\x74\xdc\xb2\xda\x4c\x66\x05\xcb\x6e\x4d\xa1\x20\x54\xe7\xdb\x4b\x2c\xa6\x0b\x07\xb4\x41\xc8\xa0\x88\x0b\xba\x2c\x5e\xc2\x5c\x29\x33\x91\x57\xa4\x3b\xef\xa2\xe5\x6a\x1d\xe0\xea\x3b\x59\xa8\xef\x43\x81\xae\x47\x17\xfa\xf5\xa1\xeb\xb2\xcb\x6f\xf8\x1e\xaf\x11\xba\xf3\x50\x1c\x96\x60\xc0\x2c\x05\xa3\x5b\x86\xe3\xe9\x42\xbe\x10\x78\xde\x1c\xfb\x2f\xf7\xdf\x77\xbf\xef\xbe\x3e\x84\xef\x76\x98\xfd\x21\xf0\xfc\x3b\x75\x73\x87\x13\xc8\xa8\xe8\x84\x85\x43\x74\x8e\x68\x1c\xad\x8e\xf2\x5b\x95\x87\xda\xf6\xe9\x50\xd2\x39\x8c\xd3\x28\x32\xfa\x86\x79\x29\x3b\x8f\xb2\xb3\x55\xbb\x05\xc1\x01\x61\x5c\x59\xef\x4f\xa3\x34\x20\x59\xe3\x64\xe4\xf7\x94\x70\x71\x54\xb2\x65\xd7\xce\xe0\x49\x80\x96\x69\x24\xc2\x24\x22\x48\x84\x4b\x62\xec\x20\xda\x55\x52\x99\x91\xb3\xf3\xab\x9f\x0c\xea\xe1\x55\xb5\xd0\xe0\xf4\xa7\xfe\xe8\xe6\xfc\x63\xef\xbd\xc9\x1f\x67\x29\x89\x01\xc4\x12\xf4\xd0\x16\xd1\x50\xbd\xbb\xb2\x4a\x5e\x59\x45\x4d\x37\x00\xf2\xd7\xd5\xc2\x98\x2f\x6e\x29\x66\xc1\x49\xbe\x27\x60\xc2\xa9\x48\x59\x0d\x09\x97\x1b\xb4\x99\x02\x23\xda\x82\x16\xa6\x92\x26\x68\x8b\x84\x5b\x85\x9a\x35\xd4\x57\x54\x29\x67\x50\x07\x4e\x2c\xdc\xc6\x35\x15\x09\xed\x80\x2e\xe3\x9a\x8a\x84\x76\x40\xab\x45\xe9\x66\x2a\x3b\x94\xbd\x20\x4b\x89\xec\x40\x5e\x25\xe6\x53\x5a\xde\xb6\x18\x36\x09\x3f\x15\x56\x5b\x0c\x53\x6a\x3f\x68\xc7\xb1\x87\x39\xbd\x1f\xfc\x1d\x31\x1d\xb8\x55\x26\x75\x80\x16\x57\xae\x4e\xd8\x52\x62\x07\xb0\xc5\x72\x64\x23\x91\x07\x90\x5e\xa8\xc2\xb5\xaa\x70\x7d\x0d\x31\xc6\x9c\x87\x73\x35\xac\x14\xd3\x29\x6b\xfe\x28\x52\x0f\x4d\x23\x55\xab\x2a\xec\x99\xb0\x18\x7d\x95\xd3\x58\x61\xc0\xe2\x2c\x59\xe0\x98\x04\xaa\x39\x71\xf4\x2a\xec\x92\x2e\x12\x0b\xca\x89\xbe\x92\xc1\x88\x9e\x7d\x26\x09\x09\xd4\xa5\x0e\x39\x8f\x36\x99\xba\xb5\x83\x6d\xa5\xed\x61\x79\x53\x99\xd4\x1b\x74\xdb\x52\x41\x39\x15\xd2\x47\xe7\xfe\xd6\x10\xe8\x73\x67\xb6\x36\x89\xd8\xee\xec\xfd\x14\x15\x6d\x21\xd6\x80\x06\xfb\x87\x12\x80\xaf\xd9\x83\xcd\xee\xc1\x08\x58\xb2\x47\x90\x3f\xcb\x80\xea\x99\xd9\xe0\xa1\x06\xee\x86\xa1\xc3\x26\xee\xb6\xa5\x83\x05\xdb\x6c\xe0\xe0\x6f\x47\xf3\x52\x67\x5e\xea\x8c\xb9\xce\x38\xba\x19\xb3\x55\x6b\x39\x8d\x03\xc6\x6c\xa9\x52\x4e\x63\x83\x99\xca\x59\x42\x14\x19\x5d\xb2\x6d\x25\xb3\x81\xa9\xc1\x4c\x2e\x67\xc3\xb8\xb0\xfc\x32\xf3\xb4\xa1\x71\x5f\x1b\x5d\x63\x72\x33\xf8\xf3\x59\x54\xec\x4d\x9d\x3d\x73\xcd\x2c\x2a\xbc\xc5\xed\xca\x77\x3e\x04\x69\x82\x64\xa7\xf4\x15\x4e\xa7\x9e\x47\xb7\x3d\xdb\x3b\x9c\xea\xd4\xc3\xb0\xd3\xd8\xd1\x3c\xa4\x3e\x8e\x9d\x4e\x6e\xce\x30\x92\x3f\x9e\x9e\x2c\x37\xfb\x6b\x22\x79\xe4\xa1\x4a\xc4\x53\x09\xec\x9f\xd4\x51\x91\x0b\xd8\x15\xb4\x67\x71\xb1\x13\xa4\x8b\xa4\x8f\xa1\x84\x9b\x97\x17\x8a\x1f\x95\x1d\x6c\x2d\x9a\x61\xf9\xd1\x7a\xb6\x03\xbc\xe7\xd0\xec\xc8\xb2\xf9\xc4\xb9\xc9\xb7\xa8\x87\xe6\x43\x2d\x3f\x17\x2c\xdf\x0b\x5d\x3f\x57\xe6\x28\x0d\x8b\xbd\x05\x15\xf6\x4c\x54\x9d\x6d\x36\x24\x5b\x07\xca\x40\x2a\x8f\xb6\x7e\x52\xa8\x69\x85\xc7\x96\xe6\xef\x21\x6a\x50\x2a\x70\x18\xd5\xf3\xd3\x77\x16\x06\xe0\x95\x68\x49\x70\xfc\x9f\x26\x46\xa5\x34\x06\x18\xf0\xe1\x0a\xde\xcb\x39\xcf\xcc\x99\x8b\x93\xea\xfc\x76\xb1\x51\x89\x3f\x82\x0f\x05\x08\xe0\x91\xb5\xf5\xc2\xe4\x25\x77\xab\x49\xd5\x79\x6d\x76\x8d\xd1\x8f\x56\x6d\x54\x7f\xaa\x79\x56\x8b\x98\x75\x58\x55\x03\x58\x09\x24\x9c\xa4\x01\xed\x08\x01\xd7\x39\xe9\xd4\xe7\x03\x55\xcb\x58\xd5\x70\xbe\xc8\xaf\x58\x16\x8e\xb4\x1d\x8a\x4c\x52\x56\x55\x60\xc7\xbf\xbe\xa9\xcc\xe8\x52\x3b\x79\x83\x6b\xab\x30\x8b\x15\x78\x1e\xc6\xc6\xc5\x68\x6d\x1c\x27\x9d\x94\x2b\x6f\x33\x68\x46\xb0\x48\x19\x41\x9c\xaa\xed\x44\xd9\xcb\x70\xb4\xc0\xf7\xa5\x0f\x19\x07\x70\x26\x98\x72\x25\xad\x85\x3c\xe8\xb6\xa3\xc7\x92\x1d\x7d\x37\x42\x02\xd0\x99\xaa\xf2\xe0\x85\x0c\xc7\x15\x8b\x84\xad\xe1\xb5\xc6\x18\xb7\x27\x6d\x7e\x59\x93\x65\x13\x45\xda\xeb\x3c\x9d\x99\x55\xcc\x0a\xed\xbc\xa0\xcf\xb9\x6e\xdd\x9f\xc2\x3d\x64\x50\x56\x8d\x5d\x16\x66\xcf\xa3\xdc\x3b\xe3\x15\xd5\xc8\x45\xa2\xe5\xdc\xef\x8b\x81\xa3\x08\x64\x67\xaa\x9d\xc5\x28\x5b\x8b\x92\x8f\x1b\x9f\x2c\xb8\x11\x6a\x52\x50\x33\xc2\xc3\xf2\xd4\xba\x11\x15\x33\x92\x91\x52\x14\xd1\x07\x74\x75\xf5\xa1\x38\xdf\xc8\x8f\xb8\x2c\x04\xec\x72\x26\x75\xa6\xd3\x6f\xb3\x80\x76\x3a\xae\x0c\x6b\xde\xfe\xf5\xdf\x3f\x1e\x41\x40\x7d\xf9\xcf\x7b\xe3\x51\x96\x53\xce\xa4\x2e\x89\xf0\x2a\x73\xf5\x0d\x57\xf3\x04\x16\x69\xee\x24\xce\xac\xce\x21\x57\xad\x8e\x6a\xcf\x57\x11\x65\xe1\x3f\x08\xa2\xa9\x48\x52\x93\x8f\x26\x43\x62\x1b\x30\xf9\x42\xa6\xa9\x3a\x71\x27\x4b\x2a\x48\xe6\x87\xd3\xae\xc1\x28\x65\x53\xb5\xc4\x49\x76\xb0\x0f\x8e\xd2\xb4\x2f\x07\x7d\xa1\x71\x49\xef\x49\x76\x94\x08\x13\x88\x84\x91\xfb\x90\xa6\x5c\x5d\xf4\xe4\xca\x1d\xa4\xd5\x6f\x44\xfb\x7a\x6c\xd9\x01\xcf\x76\xd9\x45\x40\x3c\x13\x84\x01\x82\x65\xb2\xe4\x94\x33\xa8\x9b\xde\x11\xd6\x09\x97\x70\xf1\x92\xe6\x4e\x45\x54\xa5\x95\xb3\x95\xe3\xa0\x90\xa4\x23\x3b\x39\x63\x9d\x6f\x84\x65\xa2\x95\x2e\x49\x2c\x00\x1b\xa5\x2c\x72\x5b\x0c\x59\x24\x0c\x2a\x60\x8b\x58\x91\x2b\x1c\xc4\x98\x73\x67\x4a\x6f\x81\x37\xba\x4a\xcd\x5f\x1b\x84\x95\x77\x70\x84\x85\x20\xcb\x44\xa0\x19\x0e\x23\x12\x64\xce\xf0\x28\x7b\x7a\x9a\xc4\x93\xf8\x5a\xb9\x45\x06\xb3\x36\xf0\x1a\x7a\x94\x7b\xc5\xe5\x50\x1b\xf0\x3d\x0e\x23\x65\xc7\x2a\x2b\xa3\xec\x1c\xe7\xe1\x3d\x81\xf2\x31\x76\xed\xcf\xa2\xdb\x9a\xed\xdc\xf9\xa9\xf6\xc3\x77\xc8\x55\xd0\x03\x9e\x2e\x51\x40\x09\x5f\x9b\xb4\xc2\x5d\x65\xb4\x24\x02\x07\xd8\x6c\x3f\xb4\x2b\x6c\x35\xd9\x74\x99\x94\xbc\x99\xca\x72\x20\x38\x80\x26\xae\xdc\x7b\x9a\xf8\x78\x48\x56\xaa\xec\x5f\x7e\x3a\x1f\x0d\x2e\x3f\xf6\x2f\xc7\xe8\x53\x6f\x74\xde\xfb\xf1\xa2\x8f\xde\x8f\x06\xd7\x43\x93\x2d\x9f\x4d\xa2\xae\x0a\x53\x55\xb6\x8a\x78\x2b\xa9\x05\xef\x01\x6c\x82\x33\x08\xea\xc3\x6d\x13\x87\xec\x75\xb5\xf0\x32\x11\xca\x77\x30\xa2\x0c\xcd\x68\x14\x18\x0d\x6c\x2a\x93\x56\x83\xaa\xf6\x05\x46\x02\x09\xa3\x5f\x56\x59\xb0\x8b\xde\xf0\x3c\x33\x5b\x35\x6d\x94\xf8\xc9\xda\xd4\x36\xdf\x3b\xaa\x01\xe0\x41\xa0\xa5\x9d\xa3\x1d\x41\xbd\x89\xd6\xd9\x37\xf2\x97\xb7\xa9\xa7\x0c\x62\xb0\xdd\x42\x70\xdc\x88\x1a\xeb\x9d\x21\xb5\x0d\xba\xde\x4e\x91\x43\xc8\xa6\xa8\xbc\xbf\x53\x98\x38\xb8\xb7\x88\xea\x20\xb8\x28\xec\x73\x6f\xa8\x75\x35\xe6\xcc\x3c\xd7\xce\xd0\x9e\x94\x79\x65\x6c\xd7\x6d\x9a\xba\x79\x6b\x4f\x5f\xfb\xd9\xdb\x71\x57\xe8\x79\x74\xfb\x66\xfb\x79\xf7\x84\x9e\x91\x80\xbd\x00\x9a\xee\x08\xd5\x00\xa8\x47\xa0\xee\x7e\x50\x03\x20\x03\xa1\x20\xa1\x61\x2c\xd0\x2b\x29\xbc\x10\x22\x81\xe8\x67\xdf\x19\x27\x87\xc6\xf4\x76\xf8\x80\x24\x8c\x4c\xb1\x39\xa2\x68\x55\x4a\x03\xe4\xfd\xfa\xb6\xe0\xe3\x63\xf7\x13\xd6\x9b\xc0\xe8\x01\x73\xed\xfb\x56\x98\x8b\xcd\x4b\xb8\x5a\xb1\x5c\x8b\xe9\x9a\x5b\x69\x6e\x23\x4b\xe4\xfd\xf5\xf9\xd9\xe1\x89\xc9\xe1\x50\x2d\x08\x0b\x09\x18\x7a\x55\x70\x07\x98\x5b\x5a\xd5\x6d\x25\xb6\x00\x4f\xb3\xbb\xb2\x6b\x57\x48\x61\x44\x1c\xf9\x31\x0a\xf9\x28\xd2\xa4\xdc\x01\x9b\xdd\x72\x3e\xea\x84\x76\x19\xec\x74\x9c\xef\x96\xf3\x51\x67\xf5\x67\x5c\x9d\xd6\x0b\xb6\xea\x26\xb3\x87\xef\xfd\xda\x30\x75\xc8\x68\xf9\x7a\xcb\x40\x80\x0a\x2a\xad\x19\x55\x93\xf0\xce\x95\x37\x88\x0f\x91\x6a\x73\x46\x1f\xbf\xd8\x0d\x80\x76\x24\xd4\x0e\x1b\x7f\x2a\xc5\xef\xad\xc6\x5b\x34\x89\x3f\x66\x17\x37\xd5\xa4\x1a\x2e\xca\xe6\x93\x6c\x30\xf5\x66\x44\xa4\x2c\x26\x41\x17\x0d\xd5\xe5\x77\x39\xc3\x3e\x9c\xce\xd0\x34\x65\xd1\xa1\x92\xd0\xeb\xb1\x29\xa2\x2c\x54\xb1\xa6\x60\x9f\xc6\xd8\x9b\x7f\x7d\x62\xb6\x02\x33\x1e\xd9\xd8\xb3\x63\x16\x6b\xa4\x4c\x4d\x08\x1a\xaa\xd4\xc2\x36\xc5\x79\x98\x21\xe8\x8f\xd7\x75\xc9\xe8\x7f\xd0\x2d\xe7\xa5\x8e\x27\x34\xe6\xa4\x81\xbe\x0a\x41\x8b\x42\x62\x9a\x68\x59\xb5\x99\xa5\x9a\xa8\xf2\xf8\x84\x2e\x59\x8b\xda\x99\x0a\xcd\x5e\xd8\x3f\x96\x8b\x29\xff\xbe\xce\x47\xbe\x96\x7a\x75\xa9\xce\xb3\x6f\xf3\x10\xf7\x50\xbe\x6b\x7f\x5f\x07\x67\x37\x3a\xad\x70\xf1\x26\xe2\x88\x22\x63\x48\xec\x01\xbc\x39\xf3\x5d\x8f\xd0\x3e\x66\x82\xcd\xb0\x76\xa0\xb5\x23\x13\x3f\xe5\x55\xd6\xb6\x35\x09\x38\x20\x6c\x24\x28\x7b\xc0\x0c\x40\x64\xdf\xe1\x98\xf2\x6f\xa7\xb6\x40\xcf\x95\x03\x55\xb0\x1c\x98\xd2\xc0\xb5\x9c\xa8\x48\xee\x09\x1e\xc6\x33\x6a\x5c\xb8\x1a\x52\x7b\x40\x17\xe3\xa0\xf1\x74\xb9\x84\x40\x55\x5e\x6a\xaa\x25\x3d\x54\xae\x43\x09\x67\xde\x68\xf5\x41\xda\xe3\x63\xf7\x5d\x18\x91\x21\x16\x0b\x47\x95\xa8\x09\xe5\x41\x0a\x4e\x51\x64\xa9\x79\xe9\x5d\xa7\xf6\x80\xa6\xb1\x72\xf9\xa1\xcc\xfd\x6b\x54\x92\x4a\x41\x0f\x85\xba\x0c\xb2\x13\x47\x55\x30\x8c\x24\xd4\x53\xaf\x4d\xde\x43\xbd\x72\x85\xa2\x22\x8b\x11\x15\xd6\x2a\xb7\x79\xf6\x59\xec\xd4\xc1\xb1\xd0\x81\xcb\xee\x38\x0a\xff\x21\xb1\x46\xc3\xd3\x6c\xdf\xcd\x51\x08\x16\x31\x8b\xb2\x25\x66\x7c\x81\x61\x92\xf2\xb7\xab\x81\xc9\x8d\x4a\x75\x5a\x0b\x2c\x4d\x48\xbc\xee\x2e\x20\xe0\x23\x94\x80\x15\xdf\x28\xe4\xa1\xc8\x2b\x7c\x90\x55\xc4\xa2\x24\xc1\x8c\x7b\x95\x50\x29\xa1\x07\xa0\x76\xc9\xe3\x85\x99\xa5\xf5\x80\xcd\xa6\xd3\x5e\xb8\x79\x62\x1b\x30\x61\x33\xca\x96\xbe\x9b\x5b\x15\xc9\x6d\xe0\x8c\x66\x5b\x6f\x38\x51\x1b\x3a\x10\x3f\x19\x02\x0a\x43\x3f\x78\xe8\xdd\x04\xeb\x62\xd5\xa4\xb5\x13\x8f\x06\x8a\xd7\xbd\x98\x6c\xcc\x84\x39\x1a\x90\x5d\xd2\xa2\x92\x11\x1c\x1c\x3f\xb0\x50\x8f\x4d\xf1\x2c\x9c\x3b\x54\x55\x4b\x38\x54\x6c\x6f\x47\x7a\xce\xa4\x9c\xc2\x1e\x8a\xbd\x1a\xc5\x56\xe2\x1a\xc0\x50\xdc\xb5\xd0\x95\x44\x5d\x15\x7e\x75\xc1\x21\x6a\x55\x3a\x63\x04\x8c\xe5\x7c\xab\xc2\x76\x7a\x3f\x78\xba\xbe\x47\xe8\xaf\xa3\x2c\x64\x55\xb4\xa4\xf7\x85\x69\x41\x16\xcd\xd4\xa1\xc8\x20\x64\x55\x14\xe3\xe5\xae\x3b\xa5\xde\x20\x56\x22\xd0\xd9\xc2\x44\xcf\x5d\x17\xcb\x69\xfd\x60\xf3\x99\x1d\x44\x2c\x2e\x55\x29\xef\x7c\xd6\x04\xb3\x12\xe3\x34\x82\xaf\xa5\xfd\x7a\xf8\xf6\x26\x46\x31\xbb\x32\x81\xd9\xe6\x0a\xa2\x46\xbe\x9d\xe2\x56\xe5\x82\x85\x04\x38\x73\x81\xa7\x77\xce\x5a\xbc\x95\xbc\x06\xb8\xff\x30\x67\x97\xb4\xa9\x4c\x63\x98\x83\x09\xcc\xef\x40\xe6\x34\xa2\x69\x70\x4a\x63\xc1\x68\x14\x11\xf6\x91\x70\x8e\xe7\xe6\x9b\xd2\x36\x6c\x8e\xef\x8b\x63\x85\x77\x66\x6c\x72\x16\x75\x10\xca\x73\xd7\xd6\xef\x0d\xe2\x43\x44\x99\xbf\xdf\x80\x55\xe7\x8d\x58\x25\xc4\xbd\x35\xea\x92\xb5\xaa\x8d\xa8\x1a\x6a\x0a\xf5\xda\x2b\x5a\xa9\xbf\xbc\x97\xfa\xdd\xca\xdf\x17\xc5\x42\x25\x9b\x0e\x09\x5a\xf7\x44\xd3\x2e\x69\x51\xf9\x8f\x30\x49\x36\x8a\xce\xaa\xa8\x2a\xbd\x05\xbe\x72\xcb\x0e\x85\x5c\xdf\x3c\x4c\x30\xd7\x7e\x84\xb1\x0a\x67\x8f\xd9\x1c\xcc\xcf\x95\xf5\xc5\x90\x72\x70\xdb\x76\x88\x6e\x53\x51\xfc\x53\x8e\x01\x21\x23\x1c\xe1\x18\x85\xb1\x20\x73\xc2\xba\x08\xbd\x93\x4b\x4c\xca\x08\xe2\xab\x58\xe0\x2f\x68\x41\xa2\xe4\x08\x62\x32\xfd\x3a\x9d\x65\xa1\xb7\xd6\x9f\xa7\xb3\xf8\xd5\x7e\x04\xf5\xcd\x93\x37\x17\xbc\xbd\x7b\xb7\xf6\xe6\x27\xe8\x92\x2a\xef\xbb\xe0\xe3\xd6\x71\x63\xc6\x2a\x62\x53\x22\xc7\xed\x00\xd1\x54\xa0\x07\xac\xea\x2e\x48\xf1\x55\x3c\x45\xbf\xd1\x5b\x58\x70\xf5\x19\x83\x9b\x07\x87\xb2\x5e\xcf\xc2\x38\xe4\x26\x8f\xcd\x3b\x82\xda\x88\xfa\xb4\x3f\x67\x5b\x53\x57\x71\x38\xdc\xc5\x81\xe9\x8b\xba\xf4\x42\x74\x98\x65\x12\x80\x4d\x31\xd1\xd6\x32\x26\x55\x35\x51\x0c\x54\x12\xb5\xab\x54\xdc\xc5\x54\xa6\x9e\x58\xed\x26\xd2\x19\xba\x23\xab\xe3\x7b\x1c\xa5\x04\x25\x38\x64\x7c\x12\xeb\x8d\x8f\x29\x44\xcf\x0a\x8a\xf1\xe3\x51\x4c\x30\x3b\x99\xc4\xb2\x68\x7f\x5e\x46\x57\x71\x98\x24\x44\x3c\x3d\x99\x7c\x3d\x3f\x9f\x7e\xef\xec\xf3\x92\xfe\x1a\xbc\x37\x04\xed\x0a\xd7\xae\x45\x32\x21\x4e\xb2\xcc\xa2\xff\x33\x49\x5f\xbf\xfe\x9e\x20\xc8\xf4\x11\xf4\x18\xa1\x00\xeb\x25\x70\x85\x31\x5e\x25\xc4\x6c\x84\xd1\xaa\x0a\x67\x26\x86\x8c\x26\x84\x89\xd5\x86\xa6\x5b\x4a\x23\x82\x8d\x5e\xf3\xeb\x20\x34\xa5\x90\xd5\x1e\xdd\xa9\x1a\xe3\xa9\x37\x82\xda\x95\x14\x17\x2c\x8c\xe7\x6d\x70\xca\x91\x9a\x52\x8a\xd3\xe5\x2d\x61\xdb\x55\x20\x4b\xee\x5f\xdb\x76\x54\x50\x99\x81\x77\xbd\xf3\x8b\xfe\x99\x41\xb9\x7e\x59\x2d\xd8\xef\x8d\xaf\x47\x7d\xf4\xee\xa2\xf7\xde\x74\x03\xa5\x9c\xc6\x0d\x63\x3a\x77\xda\x48\x54\x0d\x04\x17\xbe\x90\x72\x36\x9b\x9d\x23\x32\xaa\x6e\x7b\xa5\xdc\xb2\x01\xe3\x23\x69\x53\x39\x23\x62\xba\x28\xcd\x45\xb9\x8f\x1d\x99\xaf\xb4\x97\x6a\x75\x4e\xcd\x33\xd3\xde\xfc\xba\x4a\xe9\x24\xb5\xeb\x5c\x70\xef\x0c\x5b\x87\x6c\x93\x42\xaa\x14\xf5\x52\x4a\xee\x49\x2c\xb8\xd7\x42\xc7\x4b\xd4\x4b\x29\x65\xf3\x8e\xb2\x99\x92\x25\x08\x75\x4a\x95\xdc\x88\x46\x64\x4c\xf5\x05\xe8\x8d\x62\xac\x51\x1c\xcd\xf1\x7d\xe9\x37\x2b\xb1\x0a\x41\x2f\x85\xb0\xc1\xc3\x94\x1b\x35\x5e\xbf\xba\x1a\xc5\xfd\x95\x37\xd5\x5a\x5f\x1d\x98\x19\x54\x7c\x3d\xb0\x3a\x68\xa9\x7e\xec\xa6\xc3\x3f\x1b\xc5\x06\xe9\x63\x7b\x52\x13\xc4\x46\x44\x50\xbd\x5c\x93\x63\x36\x9d\xe2\x08\x09\xb2\x4c\x28\xc3\x6c\x25\x97\xcf\xea\x08\x3d\xbb\xf6\xe1\x0a\x26\xb0\x1b\xa6\x1f\xcd\xdf\x38\x55\x17\xf6\xb2\xb8\x0a\x37\xd9\xed\x5d\xdb\x49\x5d\x6d\x18\x3f\x32\xd9\xbc\xfe\x08\xa5\xf9\xd5\xe8\x04\x33\x4e\x2a\x03\x0b\xb9\x86\xd0\x1d\x70\x1d\x74\x97\xf8\x8e\x64\x7b\xfc\xca\xd3\x82\x92\xf3\x6d\x11\x7e\x10\x4e\x12\x70\xa0\x6e\x3b\x57\x36\x24\x76\x00\x2b\xff\x07\xea\xa4\xc4\xb7\x1a\x54\xc9\x38\xd4\x3c\x40\x05\xd1\x37\x0b\xb3\x48\xcc\xcf\x12\x9a\xed\x79\x39\x54\x17\x83\xbe\xb8\xf8\xf8\xd8\xd5\x3f\xdf\x45\x78\xfe\xf4\x84\xb4\x07\x2c\xa3\x81\xb4\x87\x60\x3d\x85\xea\x5a\x65\x7d\x7d\xb9\x9c\x4d\x9d\xc9\x38\x21\x7f\x5d\x2d\x2c\x3b\xb4\x98\x0a\xbd\xa3\x04\x7d\x5e\xb4\x3a\x52\x6d\x86\x4b\x36\x70\x8d\x53\xa6\x22\x5f\x42\x2e\x38\xc2\x42\x3b\x46\x00\xa7\xe3\x8f\x8f\x5d\xf9\x32\xb1\x59\x54\xb5\xab\xa3\x3a\x1b\x94\x4d\x89\xf6\x6b\x8e\x5e\x05\xca\xb9\x48\xc2\x28\x38\x84\xa0\x4c\x9d\x77\xb2\x25\x50\x32\x79\xcc\xa8\x87\xe1\xa2\x21\xe7\xca\x0f\xa1\x58\xd0\x54\x94\x24\xdd\xca\x8d\x92\x16\x95\xda\xa9\x85\xba\xd5\x0a\x1d\x5d\x6d\xdd\x9e\x10\x16\x12\xcb\x70\xce\x70\xb3\x8c\x3b\x44\x2d\x4a\xeb\xf8\x21\xb4\x49\x58\x54\xe8\x13\xc1\xac\xcf\xca\x18\xaa\xaa\x61\x55\x65\x97\xb4\xa8\x4c\xe3\x5b\x6d\x93\x5a\xbb\x28\x1d\xa2\x95\x4a\xdf\xf7\xc7\xe3\xf3\xcb\xf7\xe8\x6a\xdc\x1b\x8d\x8d\x9b\x02\x9b\xa9\x7c\xa0\x4c\x0b\xfb\xad\x64\xd5\x60\x17\x83\x1f\x7b\x17\x68\x30\x1c\x9f\x0f\xcc\x51\xbc\x36\x53\x55\x43\x11\x81\xf0\xfa\x24\x3b\x0f\x39\x08\x56\xfe\x7c\x81\xa6\x51\x28\xd7\x7a\x26\x15\x9e\xd2\x46\xd5\xb2\x87\xdb\x3e\xb2\x53\x7b\xaf\xb2\x76\xd8\x82\x25\xf8\xcb\x9b\xd4\xab\xd3\xec\x28\xca\x4c\x0d\xb5\xb7\xa7\x25\x66\x77\x44\x24\x11\x9e\x12\xf3\x08\xee\x2d\x6e\x57\x9e\x24\x7c\x3f\x91\x07\xda\xd4\x60\xcd\x42\x61\x9b\xa6\xdb\x35\xde\x97\x31\xa5\xb6\x42\x67\xbb\x2d\xe6\x18\xbc\x75\x4a\xa2\x2e\x9a\x95\x1a\x29\xdc\xf9\xe5\x2d\x85\xf5\xad\x93\x99\xfd\xeb\xb7\x67\x1f\x76\x80\xf6\xa1\xd7\x59\x83\xf6\xaa\xda\x9a\x69\x65\x8d\xf9\xfc\xdf\x7a\x7f\x7a\xad\xd9\xd5\x5e\x08\xa1\x5f\x45\xb9\x29\xc5\xf3\x66\xfd\x79\x38\x78\x14\xc3\xf6\xf0\x62\xb1\x49\xf1\x12\xb5\x2a\x0d\xe3\x19\xdd\xd5\x2f\x46\x33\x2c\x3f\x5a\xed\xc5\x8c\x68\x05\xda\x93\xb4\xcb\x61\x7e\xc3\x00\xf2\x7b\x50\x64\xcd\xd0\x57\x88\x66\xf3\x2c\xaa\x5d\x99\xe6\xcf\x94\xc3\x96\xf4\x58\xb3\x63\x72\x2d\xe4\x1c\xfe\x2c\x82\x56\x85\x6a\xf1\xca\xd7\x51\x26\x19\x49\x28\x0f\x05\x65\x21\xe1\xa8\xdb\xed\xba\x3a\x33\x0f\x00\x7f\x02\xb9\xec\x0a\x99\x2c\x35\xdc\x72\x56\x75\x95\x71\x3c\xa0\x85\xd6\xef\x41\xeb\x61\xb9\x69\xd5\x71\x62\xe5\x21\x68\x55\x58\x3a\x02\xda\x12\x47\x3e\x55\xce\x0b\xc2\x4d\x82\x57\x35\x94\xda\xc1\x97\x2a\x21\x9b\x64\x68\xa7\x9c\x54\x0e\xa7\x9e\x33\x8e\x3a\x14\x5b\xd0\xd3\x38\x3b\xad\xf3\x6e\x44\x30\xcd\xe6\xbe\xe0\x13\xbc\x3c\x37\x40\x3a\x9c\x8b\x7a\xf8\x5e\x3e\xbb\xf4\x6c\x4e\xcd\x71\xad\x74\xcb\x40\xbc\xee\x24\xc8\x29\xee\x50\xae\xa3\x5b\x29\x3f\x68\xf5\xfb\x18\x0f\x80\x3a\x04\x64\xe9\xae\x03\x5b\xfd\x08\xbf\x64\x35\x88\x83\x2a\xdb\x89\xfc\xef\x46\x93\xdc\xbd\xaa\x6e\x29\xd3\xdb\xfe\xe7\xbe\x7e\x69\xb4\xc9\x69\xaf\xc5\xf4\xec\x65\xb0\xa7\x0c\xee\x2b\x1f\x2d\xd0\x7d\x8e\x6a\xf8\x0c\xd5\xea\xab\x36\xb3\xaf\xd9\x9e\xf6\xd7\x70\x5a\x6e\x21\xf9\x05\xc8\xca\x29\x61\x0d\x86\x6e\x20\x2f\x42\xaa\x3d\x35\x5b\x8f\xf9\x61\x78\xd1\x00\xaf\xa5\x72\x59\xa1\x0f\xa5\x7c\xdc\xee\x36\x2c\xb9\x56\x54\xb5\x9f\xa9\x3d\x65\xc0\x97\xec\xf6\x01\xce\xde\x0c\x40\x9e\x43\xb3\x5f\x96\x9f\x2d\x87\xfb\xce\x50\x45\xf8\xce\xe6\x4b\xfe\xba\x68\xbe\xd4\x1a\x4d\xcb\x5d\xe2\x6e\xe5\xbc\x2a\x2c\xa8\xb5\xb0\xdd\x1d\x5f\x63\x5c\x3b\x5d\x81\xa7\x77\xca\xd5\xb0\xfc\xf5\xf4\x74\x58\xae\x38\xf9\xa0\xd9\xf6\x51\xc3\x1e\x15\xbb\x33\xcc\x9f\x33\x93\xed\x29\xb3\x66\x4c\x60\x7e\xd7\xd6\xb1\x95\x67\x9f\x63\x27\xa4\xcc\x7e\xab\xe3\xe3\x1e\x9b\x36\xed\xfd\xa3\x4c\xb7\xae\xa6\x71\x66\x1a\xf5\xd3\x0d\x00\xab\x09\x46\xf4\x16\x47\x88\x82\xad\xb2\x31\x72\xd2\x66\xaa\x4a\xa8\x0f\xfd\xde\xc5\xf8\xc3\xcd\xe9\x87\xfe\xe9\x4f\x37\xe3\x9f\x87\x7d\x03\xd8\x76\x3a\x3f\x38\xb4\x4c\xb9\x40\xb7\x04\x4d\x0e\x12\xca\xc4\xe4\xe0\x48\xfe\x52\x4e\x68\xe4\x1f\x94\xa1\xc9\xc1\x42\x88\x64\x72\xe0\xab\xb9\x0e\x64\x35\xc9\xc1\xd5\xd8\xa4\x4c\xbe\x32\x0a\x5d\xf6\x3e\x1a\xcb\x27\x7b\x5d\x2d\x3c\x1e\x0f\x95\xbf\x1d\x08\x03\x35\x8d\xd2\x00\x66\x1f\xca\x0d\x98\xba\xe8\x79\x4b\x83\x15\x90\x3f\xfc\xbf\x87\x68\x46\xa3\x88\x3e\x90\x00\xdd\xae\x10\x56\x06\x8a\x70\xfb\x56\x50\xf0\xda\x02\x82\xb9\xff\x1e\x13\xa5\xfd\x2a\x35\x67\x74\x49\xc4\x82\x06\xe8\xd5\xfb\xfe\xf8\x68\x38\xb8\x1a\x1f\x0d\xaf\xc7\x47\x67\xfd\x8b\xfe\xb8\x7f\x44\xc4\xd4\x64\x05\xe9\x27\x5b\xad\x76\xf3\x0c\xdb\xd4\x26\x2a\x12\x56\x03\x52\x2e\x20\xef\x2a\x8a\xd9\x72\xd5\xe1\xe9\xad\xb2\x6e\x31\xd2\xb7\x89\xd8\x95\x64\x7b\xa4\x50\x02\x2a\x62\xde\x2b\x7d\x87\x5c\x1b\x7a\x2d\xb0\xfc\xa9\xcd\x6b\x9c\x0c\x6a\xe3\xd9\xe9\xa5\xfa\x12\xfc\x94\x2e\x6f\xc3\x78\x6d\x2c\x89\xce\x06\x1f\x7b\xe7\x97\x60\x19\x0e\x7e\x96\x57\xaa\x6e\x65\x21\xff\x6e\x43\x63\x00\xc3\x76\xb0\xf7\x43\x5b\x99\x31\xee\x8b\xb8\x46\xf7\xa0\x2e\x5b\x6d\x40\x62\x91\x41\xac\xbf\xa6\x17\x37\x8b\x78\xa5\xf2\xf3\xcb\xab\x71\xef\xe2\xa2\x7f\x86\x86\x17\xd7\xef\xcf\x2f\xd1\xe9\xe0\xe3\xc7\xde\xe5\x99\xe9\xa2\xa5\x39\x7d\x3d\x78\x53\x53\xb5\x08\x98\x15\x5c\x9e\xf6\x6f\x3e\xf6\x3f\x0e\x46\x3f\xdb\x50\x0b\xa9\xaa\xa1\xe6\x31\x65\xa4\xec\x4a\xcc\x84\x57\x95\xb4\x1a\x34\x46\x7f\x0f\xe3\x80\x3e\x70\x74\xaa\x5d\x7b\x5e\x84\xb1\xf2\x5a\xce\xc3\x78\x1e\x91\x8e\x5c\x7f\x90\xe0\x08\x11\x3e\xc5\x09\x09\xe0\x1e\xc7\x09\x3a\x7c\x9c\x4c\x26\x07\xf7\x38\x0a\x03\xf9\xe3\x44\xfe\xe7\x37\x4e\x63\xf9\xaf\xf1\x12\xfe\xbe\xb4\xb9\xb2\x36\xa4\x0f\x84\x5d\x2d\x48\x14\x81\xaa\x80\xa6\xb7\x46\x55\x93\x03\x9b\x2e\xe3\x84\x60\x5f\xda\x0c\x59\x53\xe3\x66\xee\x23\x4d\xfb\x58\xcc\x06\x52\x6b\x20\x58\x4f\x61\x93\x62\xca\x18\x99\x0a\x74\xcd\xf1\xdc\x58\xfd\x36\x52\xf9\x40\x75\x51\x2f\x5e\x7b\x32\x09\x39\x5a\x86\x59\x54\x13\x1d\xb7\x16\x12\x47\x2b\x44\xe2\x69\x44\x39\x09\xba\x93\xd8\xb8\x56\x6d\x09\xdc\x8f\xf8\x69\xee\x13\x37\x26\x68\x16\xe1\x39\x47\xaf\xc8\x97\x29\x49\x04\xea\xcc\xbe\x43\x53\x1c\x4b\x1d\xb7\x3a\xa2\x1a\x09\xd0\xc3\x82\xc4\x59\x5c\x57\xb4\xcc\x42\x0a\x80\xc1\xae\x32\xb2\x28\xb7\x5c\xd3\x04\xfe\x2b\x10\xf1\x2b\x10\xf7\xe4\x58\x4d\x87\x63\x1a\x93\xc9\xc1\x64\x12\x4f\xfc\x3f\x64\x23\x6c\x3f\xda\xa3\xcc\x41\xce\x21\x4e\x12\x08\x6f\x8b\x48\x7c\xbf\xfe\x01\x36\x7c\x87\x72\x4d\x94\x55\x25\x5e\xa7\x0a\x36\x85\xdf\x99\xfc\x5e\x28\xb7\x40\x34\x8f\x99\x91\x5d\x1f\x68\x83\xa8\x0f\x68\x4d\xa2\xbd\xe1\x10\x5d\xf5\x47\x9f\xce\x4f\xfb\x37\xd9\x48\xbd\x3b\x53\x3f\xd4\xfa\x54\x6f\xe4\x82\x0f\x4e\x9e\xf4\x9c\xaf\x0d\xa6\x6e\xd0\x5d\x88\x6e\xb7\xe9\x76\x39\x7b\xe0\xef\x42\x7f\x2f\x75\xa3\x0e\x7c\x63\xf2\x6b\xa0\x1d\x28\x16\x40\x5a\x20\xb2\x63\x79\x6d\x00\xd5\x24\xf4\xe3\xf5\xf9\xc5\xd9\xb0\x77\xfa\x13\xa0\x1d\xa1\xcb\xfe\xdf\x6f\xca\xcf\x76\xff\xb6\x4d\x74\xd4\xcc\x46\xd6\x46\xf7\x52\x37\x6b\x81\x37\x24\x0e\x3e\xea\x76\xaa\x11\x66\xa4\x9a\x94\x2e\x7a\x3f\xf6\x2f\x8e\xd0\x70\x34\xf8\x74\x7e\xd6\x1f\x41\xbe\xc7\x83\x9f\xfa\x2d\xf4\xab\x35\xa0\x77\x25\xdd\x3a\xd5\x1d\x09\x0e\x46\xef\x4b\xa3\xc9\x4e\xe4\xac\x60\x3b\x12\xdb\xb5\xe0\x5c\x78\xf5\xe9\xe9\x6e\xe3\xbf\xae\x07\xe3\x5e\x2b\xfc\xec\x80\x35\x09\x8e\xfa\xc3\xc1\x7a\xe8\xba\x1e\x5d\xec\x4e\xd1\x03\xb2\x26\xc9\xab\xfe\xe9\xf5\xe8\x7c\xfc\xf3\x0d\x84\xb9\x07\xd8\xc1\xe8\xfd\x91\x3e\x94\xc0\x11\xba\x1a\xf6\xda\xe8\x2a\x9b\xea\xd9\x3d\x3b\xc3\xde\xf8\xc3\xcd\x78\x70\xf3\xb7\xab\xc1\xe5\xcd\xe8\xfa\xa2\x7f\x75\xf3\xee\xfc\x62\x3f\x59\xf2\xd6\xb5\x53\xb6\x8e\xf2\xa6\xb4\x97\x8f\xe3\x84\xaf\x4d\x5e\x0d\x8d\x3f\x8e\x06\x3f\xf5\x47\x6a\x94\x2f\x3f\x6b\x23\x07\xf5\x75\xec\x98\x8d\xeb\xab\xfe\x48\x75\x17\xc3\xde\xd5\xd5\xdf\x07\xa3\xb3\xa3\x76\x1a\x79\x63\x45\x0d\x33\x94\x4f\x59\xb2\x07\x3f\xf5\x7f\x6e\x2f\x17\x7e\xe8\xbb\x52\x97\xb5\xb5\xf8\xcd\xdb\x9b\xe3\xed\xa0\xaa\x8d\x4c\xed\xf7\x9b\x38\x35\xd4\xcd\x82\xea\x30\x5a\x9c\x34\xb8\x11\x1b\x53\x6c\x69\xda\xe0\x04\x6c\x42\xb0\xb3\x5e\xf2\xc2\x9f\x00\xdd\x69\x67\xd5\x55\x5b\x41\x93\x0c\xa8\x59\x0a\xb4\x93\xf5\x9f\xed\x50\xf7\x83\x6e\x4e\x7a\xd7\x15\xb8\x05\xaa\x26\xa9\x75\xcf\x0f\x73\xa5\xd1\xa0\x8d\x69\x8b\x17\xe8\x6e\x44\xa1\x04\xf6\xc4\xd7\x8a\x5d\x93\xf6\xae\x2b\xeb\x1d\xd7\xd3\x38\x49\x6e\x62\xbc\x24\x47\xfa\x9c\x1f\xfe\xd8\xbd\xc0\x3c\x61\xeb\x92\xdd\x8d\xd3\x2e\xaa\x73\x7f\x29\x3a\x5b\xe0\xf9\x4b\x76\x5d\x89\x76\xe8\xbf\x7b\x99\x35\x50\x51\x33\x13\x0b\xca\x05\x20\xea\xe8\xb1\x3b\x53\x76\x02\xd6\x24\x48\x23\x70\xac\xae\x2c\x8a\x24\x6e\x4c\x1e\x0a\x0f\x76\xa5\x5b\x13\xbe\x01\x79\xca\xe6\x48\x7d\x3d\x09\x9d\xfd\xd5\x0e\x73\x5f\xec\xba\xb4\xd9\x7c\x1f\x3d\x80\x27\x6c\x4d\xb2\xda\x88\xfd\xa8\x74\xff\xe0\x68\xdb\x47\xc0\xce\xf4\x1b\x2b\xaa\x9b\x21\xb0\x76\xde\x2c\x9b\x66\x94\xcd\x50\x35\x49\xdd\xbf\xc9\x56\x16\xf2\x67\xbe\xcb\x28\x7f\x5f\xf4\x2e\xd1\xfd\xdb\xf5\xeb\xb7\xea\xd1\xce\xe5\xdd\x82\xca\x9a\x99\x7c\x7c\xec\xf6\x32\x79\xa3\x2d\xb1\xb7\xb8\x9f\xf2\xf1\x82\xc0\xf9\x7e\x1e\xb7\xb7\x18\x04\x26\xeb\x88\x54\xb2\xbc\x5b\x9a\xe2\x18\xdd\x12\x08\xfb\x0e\x46\x02\xe5\x3d\x74\x44\x99\xb2\x28\x5b\xdb\x06\x74\x57\xcb\xa8\x9e\xa1\xc2\x73\xd3\xf2\x29\x2c\xa3\xc5\xd7\x66\x32\x2f\xb0\xdc\x9e\x15\xac\x1b\x73\x96\xbf\x16\xbe\xa2\xb2\x73\xff\x15\xc2\x14\x68\xd7\x9a\xf7\x61\x40\x4c\x36\x7e\x2e\xbd\x99\x1b\xe4\x25\x16\x27\xeb\x40\x4c\x7f\xbb\x1a\x5c\xbe\x0b\x23\x08\x06\x35\x11\x13\x31\x89\x3f\xe1\x28\x0c\x74\x6a\xe5\x62\x14\x2f\x13\x08\x4a\xf9\x79\x12\x23\xf4\x28\xff\x83\x94\xed\xb2\xa0\x53\x1a\x4d\x0e\x4e\xd0\xe4\x40\x4c\x93\xc9\xc1\x51\xf6\x2e\x80\x40\x78\x40\x4d\xbd\x7e\xf3\xba\xfb\xf6\x87\x1f\xba\x6f\xba\x6f\xfe\xa3\x90\x2c\xa1\x4c\x70\x95\xe0\xfb\xef\x5f\xff\xfb\xe4\x40\xbe\x78\x9a\xc4\xbf\x38\x8b\xfa\x4f\x95\x19\xc7\x87\x49\x55\x85\xf8\x94\x7b\x80\xda\xaa\x03\xb9\x09\xcb\xe3\x63\x37\x0b\x73\xa1\x62\x55\x34\xac\x0b\x5a\x25\x4e\x92\x4e\x36\x70\x74\xc2\x38\x20\x5f\x0a\x36\x40\x31\x99\x63\x11\xde\xbb\x6d\xb8\x6a\x81\xf9\x11\x0b\x63\x30\x78\xd3\x7e\xb2\xd6\x76\xcf\xbe\x5c\x8c\xf2\x06\xf5\xca\x93\xeb\xe9\xc5\xb9\x76\x2a\x63\xd4\xb3\x95\xd0\x06\xb8\x76\x52\x23\x3f\xdc\x10\x7e\xa9\x58\xbd\xe6\x4b\x17\x5e\xa2\x66\xa5\xf1\xd4\x5c\x46\xfa\xb5\x55\x18\x7d\x24\x4b\xca\x56\x0e\x8c\x2c\x95\x1d\x2a\xab\xb4\x18\xc5\x34\xee\x64\x35\x20\x0b\x5d\xe3\x52\xe1\x90\xb6\xaa\x36\x5e\x2e\x31\x89\xa9\xda\x22\xbb\x8f\xca\xb0\xb2\x46\xae\x2e\x39\xab\xba\x91\x0e\x31\x20\xff\xb5\x8c\xf7\x95\x89\xad\xc0\x57\x57\x17\xe8\x94\x30\x91\x77\x26\xc3\x73\xd9\x23\x8e\xcf\x87\x27\xe8\x9a\x13\x74\x38\x9d\x21\x9c\x84\xa8\xd3\xe1\x77\x61\xd2\xe1\x3c\xea\x80\x20\x28\x85\xf0\x63\x53\x1a\x8b\x30\x4e\x89\x1e\x32\x63\x39\xbd\x24\xd3\x94\x11\x9f\x70\x60\xcf\x4e\xa3\x56\x61\x40\x8c\x35\x08\x9f\x30\x0e\x13\x57\x34\xce\x9a\x20\x56\x22\x72\xa2\x22\xc7\x88\x13\x7d\xe3\x6d\x48\x99\x90\x20\x3d\xfd\xbc\x58\xe3\x21\x4e\x91\x83\x53\x7d\x3c\x17\xbd\x3c\xec\x99\x8a\x76\x9c\x2a\x0f\xd3\x6e\x1a\x06\x39\xbb\x3a\x88\x7d\xd7\xa0\xb1\x59\x04\xed\x0a\xdd\x11\x99\x2b\x93\x5a\x41\x4b\x19\xce\x27\x68\x50\x4b\x3a\x53\xb0\xb0\xed\xa2\x61\x44\x30\x27\xd9\x4b\x84\x51\xa1\xd3\xa0\xb7\xbf\xc9\x51\x0b\x82\xd6\x83\xce\xec\x06\x93\xac\xf9\x38\x84\x18\x4b\x15\x02\xe6\xc1\xe3\x2b\xd3\xb2\x16\xd6\x3a\x72\xfb\xe1\xe3\x63\x97\x91\x84\xaa\xd9\xcd\x21\xea\x64\x63\x1d\x24\x09\x28\x51\x13\x5e\x70\x6e\xef\xc8\x6a\x43\x50\x3b\xd1\x90\xdf\xa9\x5b\xd5\xd0\xb6\xce\x42\x7e\xa7\xaf\x79\xd7\x8b\xdd\xd2\x1c\x6f\x47\x7a\x2d\x30\x72\x91\x90\x95\xc8\xd9\x90\x74\x22\x2b\x90\x9a\xa2\x75\x60\x8e\xd6\x01\x57\xa8\x09\x66\x78\x09\xbc\xd4\xbb\x53\xf9\xca\x3a\xdd\x6d\x86\x65\xa5\x95\xef\xa7\x4c\x69\x1a\xab\x3e\x36\x9f\x5d\x9c\xca\x47\xb2\xa8\xce\x4b\x89\x0a\x1d\xae\xda\x20\xf5\x98\xec\xec\x45\x99\x5f\xc6\x96\x30\x87\x43\x51\xb8\x0c\x95\x4a\x35\xa9\xbb\x90\x7f\xd7\xa8\x4a\xf5\xf1\xbc\xe8\x95\x0a\xa1\x94\xfd\x9d\x4b\xb9\x11\x74\x4b\xa4\x23\xc2\x39\x12\x0b\x1c\x17\x53\xea\x4f\xdc\x1a\x7d\xab\x12\x6b\x46\x60\xa1\xec\xba\xa1\x6b\x48\x6c\x05\xce\xf7\x5c\xd0\x3a\x5e\x29\x5a\x62\x93\x07\x7f\xa7\x98\x5d\x59\x45\x4d\xac\x5b\xad\xfd\x30\x6a\xd3\x68\xd0\xc0\xda\x69\x57\x06\x94\xa6\x43\x5a\x6d\x38\x2b\x39\x98\xae\xaa\xa8\x6b\xa9\xd0\xcb\x9c\x54\x68\x47\x0f\x0e\x26\x76\x59\xab\x5a\x11\x2e\x09\x84\x17\xc9\x07\x89\xb1\x7a\x52\xe3\xeb\xf8\x61\x58\x69\xac\x5d\x7f\x1f\x6e\x85\x2e\x3d\x54\x0e\x27\x21\xb2\xea\x27\x1c\x79\x05\x7e\xdf\x1d\xd7\x44\x37\x14\xea\x94\x6a\x89\x63\x3c\x27\xca\x31\xc4\x11\x3c\x21\x2a\x76\xd9\x4c\xc7\x4e\x52\xce\x3d\x74\x4c\x22\x70\x6c\x61\xd9\x81\xdf\x11\xb6\x1e\x59\x4e\x22\x39\xb5\x95\x2f\xa6\x0b\x1c\xcf\xd5\x39\x8a\x56\xc7\x89\x40\x3c\x21\x2a\x1a\x0c\xd4\x6d\x5e\x9f\x77\x03\x0d\x95\x59\xf8\x1b\xbd\x45\xaf\x1e\x1f\xbb\x7f\xa3\xb7\xef\xaf\xcf\xcf\x9e\x9e\xbe\x43\x33\x08\x0e\xa6\xdb\x9b\x7d\xe5\xea\x8d\x99\x50\xb5\xdb\x94\x55\xe4\x05\xe6\xe8\x96\x90\x18\x31\x82\xa7\x0b\x12\xa8\x5d\x76\x59\x77\xd4\x6a\x62\x89\x57\x88\x8b\x30\x8a\xe4\x48\xc3\xd2\x58\xc5\x81\x55\x37\x43\x4f\xdf\xe5\xa3\x54\x17\xfd\x4c\x53\x26\x9f\x28\x51\xca\x40\x72\x81\xef\x89\x0a\x27\x5f\x70\xd1\x65\x5a\xce\x7c\xab\x6c\x2b\x8b\xf6\x02\x73\x81\x06\x99\x62\x43\x8e\x36\x12\x99\x81\xd2\x24\xa2\x38\x20\x41\xbd\x8d\xac\x8b\x90\x0b\xf0\xc0\x9d\xc5\x76\x59\xc7\x60\x57\xcd\xc5\x44\xcb\x29\xe7\x50\x77\x8f\xc3\x08\x5a\xaa\x5e\x72\xe9\x63\x1b\x53\x74\x20\x0f\xc1\x7a\x0a\x81\xb4\x72\x5c\x10\x92\xa0\xe8\x0c\x9c\x32\xf9\x0a\x64\x82\xa0\xf8\x2a\x34\x06\x80\x6b\x5b\x8b\x3d\x2b\xeb\xb8\x37\x2e\x3a\x85\x94\x76\x48\xca\xe6\x4e\x30\x48\x63\x87\xd1\x1e\x9b\x75\x75\x98\x2a\x1f\x3f\xda\x4d\x91\x76\xd5\x91\x3d\x2c\xfa\xb0\x74\x69\x6e\x0a\x6b\x27\xbb\xe1\x20\xd9\x45\x62\x33\xb9\x0b\xbc\x7c\xc8\xde\xa8\x6d\xf9\x81\x38\x88\xe4\xae\xd5\x30\xb8\x63\x72\xea\xdc\x4c\xef\x80\x57\x4e\xc0\x5e\x61\x7d\x74\x1f\x72\xb9\x14\x62\xa4\x23\xab\x9e\xba\xe2\x8d\xf8\x8a\x0b\xb2\x3c\xd2\xae\x79\x60\x27\x28\xce\x3a\xdc\x78\x9e\xbf\x16\x0b\x2c\xe0\x48\x96\xa5\x70\x62\x6b\x74\xff\xf2\x4c\xca\xed\x19\x97\x9f\x41\xb5\x5c\xdd\x0f\xd5\xe9\x26\xec\xc2\x6e\xc5\x05\xcf\xe8\x85\x6f\x46\x67\x8d\x5a\x57\x7d\x40\x3b\xc1\xdc\xf9\x17\x78\x7e\x70\xd7\xb8\xad\xf4\x16\xf8\xbc\x7b\xa5\xb3\x19\x91\x33\xd1\x5c\xb0\xe0\xee\xd2\xaa\xd0\x0f\xc1\x87\x82\xea\x7f\xb2\x08\xc1\xda\xa7\xa2\x9f\xee\x6a\x51\x1f\xa5\x70\x5a\x59\x4b\x57\x49\xc2\xac\xa2\x10\xd1\xac\xd0\xc3\x38\x3e\x9f\x59\xc8\xac\x28\x0f\x8a\x82\xb7\xfa\x37\x9b\x2a\x9b\x98\x59\x59\x29\xdc\x84\x0d\xbe\x9c\xd0\x0c\xb8\xe9\x55\x5f\xe7\x5c\x4e\xd2\xe9\x6c\xeb\x2d\x2c\x32\xf5\x14\xb2\x70\xea\x61\x65\xd2\x92\x86\xfa\x59\xd0\x61\x83\xa5\x22\xed\x68\x71\x27\xbe\x36\x38\x1b\xb9\x92\xc3\x68\xae\x1c\x0a\x3a\x08\x54\x8b\x78\x28\x59\xfb\x7c\xf6\x52\x50\x48\xee\x06\xd7\x4e\x9c\x7d\x80\xb3\xa4\x66\x50\xe5\xff\xd2\x15\xc5\xd2\x0c\x20\xbf\x84\xb6\x13\x20\x01\x52\xc6\x01\xdc\x6c\x52\x60\x15\xa9\x56\x02\x91\xdc\xb3\x9d\x95\x07\xcc\x82\x6c\xda\xab\xbe\xb9\x5c\x65\x85\x1c\xb6\xf7\x33\xb3\xab\x80\xcc\xc2\x98\x04\x6a\xb5\x04\x7b\x8f\x54\xae\xab\x4c\x94\xda\x53\x60\xca\xc0\x5d\x39\xe4\x3c\x84\x55\x67\x10\x22\x10\xa5\x49\x80\x85\x79\x5c\xf7\x92\x35\xa8\x55\xde\x32\x91\xd1\x82\xa4\x98\xc2\x0e\x41\x8d\xfe\x99\x4a\x49\x4c\x20\x73\x12\x20\xc2\x18\x65\x46\x5b\x88\x8d\x44\x46\x20\x58\x31\xa7\xc2\x52\xbf\xca\x89\x0c\x40\xf4\x0e\x7c\x89\x26\xb0\x19\x25\x27\x73\xca\x9c\xe5\x70\x3b\x7c\x53\xf9\x1c\xcf\xa8\xb4\x31\x60\x25\xc1\x8f\xbd\xcb\xf3\x77\xfd\xab\xf1\xcd\xb0\x37\xfe\x60\xd0\x59\x4e\x53\x0d\x63\xf3\xe2\x66\x73\xde\xf6\x11\xdf\x11\x84\xe1\xbb\x76\xf2\x03\xdb\x6d\xe3\xde\x7c\x22\x20\x28\x3a\x7d\x07\x73\x5b\x93\xb2\xe6\x80\x66\x82\xd0\x2c\xa0\x7f\x3b\xe4\x25\x43\x64\x8e\x68\x1c\xad\xd0\x7d\xc8\x43\x09\xf6\x10\x8a\x45\x69\x1a\x21\x75\x5b\x16\x49\x2d\x81\x1b\x88\x17\x3c\x54\xa1\x29\x23\x18\x04\x52\x18\x60\x66\x69\x14\xad\x10\x16\xa6\x93\x4c\x4f\x61\x83\xe2\x04\x61\x34\x3e\xb5\xbb\x3f\xdc\x4c\x65\x86\x8a\xdd\xbe\x14\xb7\xd3\xf9\xc1\x9d\x4c\x94\x15\x23\x42\xa7\xef\xd4\x25\xad\x25\x4e\x3a\x6a\x47\x3d\xf7\x9d\xa2\xef\x1a\x7e\xee\x74\x16\x99\xcb\xc6\xcc\x7f\xec\x2f\xf2\x29\xd8\x0a\xc8\xa6\xf1\x8b\xf2\xaa\x85\x10\xda\xc8\x5c\x1d\x35\xaf\x3a\x1d\x18\x1f\x86\x83\xd1\x18\xfd\x81\x3a\x1d\x86\xe3\x80\x2e\xe1\xe1\x77\x4a\x41\xff\xbf\x7b\x1f\x87\x17\xfd\x2b\x0d\xbb\x8d\xb9\x5c\x75\x70\x92\x64\x46\x9f\xdd\x29\x5d\x22\xeb\xff\xfe\x52\x4c\x5a\x03\xb4\x50\x22\xcb\x15\x5c\x41\x29\x81\xaa\x67\xdd\xb6\xb0\x75\x49\xcf\x28\xad\xc4\x3e\x9e\x51\x5a\x0b\x1f\x8a\xf9\xaf\xaf\x5f\xbf\x76\x14\xc8\x89\x4c\xe3\x5b\xf1\x5e\x6a\xd4\x4b\x8d\xf2\xac\x51\xc6\x2e\x4a\xed\x65\xd0\x6c\x65\x2a\x87\x28\x21\xa7\x85\xe6\x39\xb3\x4b\xca\xa0\xea\x0b\x7a\xc0\xa1\x50\xa1\xea\x33\xb7\xf4\xf9\x10\xc9\x05\x66\x22\x4d\x8e\xe4\x5a\x68\x19\xc6\xa9\x79\xe6\xd8\x00\xc8\x93\xd0\x7a\x2a\xaa\x57\x62\x8d\xd8\xd8\x51\x3c\xa8\x08\x8a\x08\x17\xf8\x36\x0a\xf9\x02\x61\x34\xa5\x71\x4c\xa6\x52\x5f\x71\x47\x0e\x2a\x16\x23\x9c\x46\x69\xf6\x4a\x2e\x2b\xa9\xf9\x38\xa0\x65\x25\xa6\x8c\x84\xcb\x74\x89\xf0\x12\xac\x67\xe8\x2c\x3b\xc2\x56\x6b\xb0\xdc\x84\x71\x6d\x8a\x83\x63\x75\xfe\xa3\x1c\x63\xbf\x79\xfd\xf6\x87\x8f\x47\xe8\xcd\xfb\x23\xf4\xe6\xf5\x7b\xd3\x66\x66\xdb\x5a\x9e\x23\x2b\x5d\xd4\x79\x23\xa7\xcb\x8c\x70\x88\x9f\x8e\x63\x94\xc6\x70\x34\x49\x02\xad\xc3\x34\xf3\xff\x1a\x4c\xbe\x95\x22\x41\xaf\xce\xc8\x0c\xa7\x91\x38\x59\xbf\x7b\xa6\x6a\xd1\x9c\x9e\xb5\xf0\x94\x95\xb0\x64\xa7\x37\x90\x61\x1b\x7d\x89\x57\x72\xf9\x9d\x4d\x7d\xc1\x12\x5b\x2a\x66\xf7\x44\x19\x5f\x58\x5a\xf5\x6e\xb0\x7b\x21\x5b\x28\x97\xd7\xae\xcf\xd5\x8e\x0e\x6b\x36\xa0\xc7\x7b\xb5\xee\xbc\xbe\x83\x8e\xfa\xf4\xe2\x5c\x76\x83\xd0\x27\x6e\x6c\xb7\xa9\x51\xe4\x08\x51\xb1\x20\x4c\x1b\x3e\x23\x1e\x06\x24\x3b\x12\xe7\x40\x50\x4a\x98\x6e\x71\x3c\x8f\xee\xea\x6c\xdb\x6e\x97\xd8\x44\x94\xad\x84\x6e\x0e\x6f\xff\xfa\xef\xb2\x35\x64\x8d\xc2\xf8\x19\x3d\x24\x0d\x2a\xb9\xba\x46\xe4\x61\x67\x51\x9d\xb6\x1a\x36\x9c\x33\x2c\x48\xc5\x41\x20\xec\x58\xd0\x98\x94\x83\x98\x09\x8a\x70\x0c\x65\x6d\xd2\xdd\x1c\xb0\x92\xa0\x25\x50\x88\x39\x48\x88\x7c\x63\xda\x62\x52\xef\xaa\xc5\xfa\x7f\xbf\xb1\xe9\xcb\x5e\x57\x0b\x5f\x7f\xcc\xdd\xf5\x98\x1c\xfd\x97\xd3\x54\xc3\xe0\xa5\x69\x21\x0d\xaf\x8c\x42\xb0\x77\x8b\x18\x99\x87\x5c\x10\x56\x32\x05\xb0\xe0\xd9\xa4\x9a\xa8\x42\x0f\x0b\xc2\xd4\xb6\xc9\xda\x28\x41\x1f\x41\x86\x1c\x45\x74\x2a\x3b\xa8\x66\x84\x3c\xb1\xcd\xb4\x05\x05\x33\x2d\xbd\x4b\xc3\xef\xd0\xab\x39\x89\x09\x83\x2e\x33\x9c\x21\xba\x0c\x85\x65\xc0\x34\x03\xd7\x33\x88\xb9\x24\x0f\x68\xa8\xfd\x3c\x9b\x0a\xa2\x98\xc4\x08\x12\x5b\xaa\x4a\xf6\xba\x5a\x98\x96\xee\x2a\x21\x4e\x44\x57\xdd\x7e\x7a\x7c\xec\x5e\xd0\x79\x18\x8f\xc3\xe4\xe9\xe9\x10\x69\x33\xbd\xde\xf0\x5c\x3f\x90\xeb\x16\x75\x04\x87\xe3\x5c\xde\x34\x13\x6b\x5d\x8d\x29\x33\x38\x09\x0d\x5a\xb2\x7b\x17\x82\xc2\x31\x51\x01\xcd\xcc\xb9\x11\x9a\x99\x5a\x02\xdb\x74\x1c\xcd\x68\x1a\x43\x98\x13\x30\x7c\x54\xdb\xc2\x36\x12\x56\x39\x8b\x3a\x2d\x61\x85\xce\xd2\x18\x61\xb2\xab\xdf\xd9\x65\x70\x0b\xda\x56\x52\x13\xe8\xda\x54\xc8\xc5\x70\x2b\xa5\x09\x52\xd9\x32\x72\xf4\x40\x20\x70\x48\x60\x6c\x0e\x55\x49\x4d\xa0\xd9\x91\xb3\x83\x64\x39\x99\x19\x2c\x49\x22\xc2\x50\x44\xe7\x73\x46\xe6\x60\xc5\x97\x57\x2e\x10\xed\xa2\x53\x75\x23\x99\x11\xc1\x42\x72\x4f\x64\x5a\x6e\x69\x53\xcd\x21\x4d\x24\xe1\x14\xa9\x3a\xf8\x9d\x99\x86\x4d\xc8\xa4\x48\x85\x77\xc8\x3b\xef\x2e\xaa\xfa\x30\x96\xac\x7b\xca\x9b\xd4\x53\x36\x57\x06\xaf\x60\x1c\x91\xed\xd3\x1f\x41\xc0\x13\xd9\xba\x74\x28\x8a\xad\x1e\xa8\x24\x67\x66\xd7\x0e\xbc\x8d\x3c\x65\x66\xf0\x77\x2a\x04\xde\x5a\x89\x9d\x68\x3d\x28\x1b\xa9\xdd\xb9\xec\x83\x82\xb9\xac\x2d\xf5\xab\x01\x96\x85\x96\xb3\x0b\x29\xa4\x31\xc1\x94\xac\x46\x5c\x78\x55\x89\xad\xc0\x7e\x88\x4e\x28\x6d\x1d\x42\xe2\x7b\x74\x8f\x59\x88\x6f\xe5\xb8\x05\x5b\x05\x60\x06\xcd\x89\x65\xb4\xf5\x11\x76\x29\xde\x34\x10\xf1\x52\x58\x25\x64\x52\xe4\x67\xc8\x59\x91\xd0\x0c\x58\x8e\xc3\xed\xf8\x0c\xd5\xc9\x5d\xe0\x77\x64\x55\x0a\x34\x9d\xef\xe4\xac\x23\x4e\x67\x17\xb1\x5c\x9d\x7d\x73\x48\x1f\x92\x6b\xe1\x9f\x88\xbe\x0b\xa2\xa7\x3d\x7b\xa0\xdf\x96\x32\x57\xc6\xd6\xd6\x7f\x9e\x1f\x77\x53\xc0\xa1\xc0\x17\xd7\x09\xd7\xc2\x80\xd2\xc2\x48\x52\x6f\xd0\x54\xc9\x2d\x3d\x79\x33\x38\x2b\x39\x8e\x30\xe7\xe1\x3c\xb6\xcd\x86\x37\x13\x3a\x00\x5d\x5f\xb0\x98\xca\x08\xa5\xcd\xe0\x1a\xf5\xbe\x3e\xc2\x2e\xc5\xe5\x3e\xcf\x4f\x5f\x85\x8c\x51\x0d\xd8\x4f\xaf\xcd\x45\x9a\xe5\xb3\x06\x88\x89\x08\x58\xad\x64\x16\x5f\x8d\x58\x78\x23\x98\x28\xa8\xdb\x73\x25\xdf\x09\xd6\x3b\xef\x56\x11\x93\x92\xdc\xa1\x8b\xab\x7a\x6e\x26\x34\x00\x0a\x58\xa9\x40\x88\xcf\xf5\x52\xfa\xf4\x1d\x6c\x00\x94\x9b\x63\x44\xe7\x32\x91\x51\x63\x7d\x24\x23\x25\x9e\x26\x09\x65\x82\x04\x08\x82\x8d\x42\x0c\x44\x8b\xde\xca\xe4\x26\x70\x70\xa4\x16\xaa\x7d\x67\x81\xef\x08\xe2\x74\xa9\xb6\xa3\xcd\x1a\x2c\x32\xd5\x6a\xf2\x63\x80\x7c\x83\xd5\x04\x5e\x91\xb2\x12\x72\xf0\x93\x01\x61\xf0\x93\x41\x60\x38\x3e\x1f\x5c\x1a\xa3\x8e\xe6\xaf\xab\x85\x47\xef\x51\xef\xec\xe3\xf9\xa5\x49\x3a\x7f\x6f\x17\x37\x6a\x5f\x27\x30\x03\x5c\x9f\x9d\x8f\x07\x23\x1b\x82\x4e\x61\x84\xf8\xd8\xbb\xec\xbd\xef\xdb\x20\xb2\x14\x26\x08\xd3\x5e\x31\xbc\x32\x0a\x59\xb2\x6d\x2c\x71\xb8\xf6\x8c\x0e\x3b\x1d\x9c\x24\x60\x0e\xc1\x4d\x43\x7a\x65\x52\x07\x68\x4c\x73\x13\x8e\xc3\x82\x93\x35\x08\xa0\x9b\xb9\x4a\xc2\x49\xb2\x0e\xce\x58\xf0\xdb\x22\x16\x04\x1d\xaa\xb5\xc6\x21\xc2\x42\xb0\xf0\xd6\x6c\x4f\xb6\x57\x95\x8e\x4c\x26\x58\x2c\xdc\x85\xa6\x52\xb9\xa0\x28\x13\x1e\x50\x90\xca\x01\x55\xb0\x19\x72\x23\x96\x12\xbb\x80\xf5\x11\xa2\xb2\xab\xf1\xad\x33\xd5\x52\x2e\x55\x2a\xad\x57\xf9\x16\xd3\xfa\xc0\xb2\x0e\x4c\x33\x3c\x81\xf3\xd4\x76\x68\xec\x84\xc3\x2e\x08\x37\x23\x27\x0b\xe6\x84\x60\x26\x08\xe3\xc5\x9b\x81\xe9\x76\xcd\x80\xcd\xf5\xbd\xf2\x25\x89\x85\xb1\x0b\xda\x48\x65\x84\x52\x37\xe2\x54\x93\xe4\xc5\xeb\x3d\x85\xe3\x5d\x8b\x0e\x2f\x71\xa3\xf2\xc7\xc7\xee\x80\xcd\xf5\xfa\x0f\x47\x8c\xe0\x60\xa5\xfc\x30\x99\x06\x52\x97\x94\x9f\xaa\xb2\xcf\x27\xb8\xa4\xab\xfe\x56\x97\x4b\xc2\x5b\x63\x7c\xec\x46\x50\x4d\x48\x99\x26\x60\x4e\x31\x93\x32\x4b\x4d\x31\x57\x0f\xd7\xed\xc2\x81\xf3\xbe\x60\x31\x45\xe9\xfc\x46\x52\x56\x1b\xe5\xb5\x0e\xee\x06\x2c\x9c\x87\xe0\xe1\x15\x2d\x71\x92\x28\x87\x63\x70\xe9\x01\x4f\x95\xff\x23\x70\x4a\xa6\xaf\x52\xc0\xf1\xd0\x17\x41\x58\x8c\x23\x1d\x3e\x5e\xac\xb2\x89\xb8\xe9\xf4\xdc\xa0\xf8\x9e\x30\x16\x06\x24\xf7\x7c\x16\x28\x53\x0e\xed\x53\x0d\x05\x21\x23\x53\xcb\x41\xaf\xbf\x7c\x3d\xf5\xf9\xfd\xf8\xdd\x58\x98\x60\xec\x64\x18\x01\xcb\x0f\x39\xb1\x15\x0b\xb2\x61\xb2\x94\x75\x05\x24\xbe\x0f\x19\x8d\xe1\x80\x0a\xcf\x04\x61\x68\x4a\x93\x55\x47\xdf\x8a\x9c\xd2\x65\x12\x11\xb3\xb5\xe2\x7e\x74\x55\x66\xcb\x72\xc3\xc3\x7c\xb1\x63\xd8\xbf\x3c\x3b\xbf\x7c\x5f\xab\x2e\x0d\x07\xa3\xb1\x49\x91\x7c\x65\x10\xba\x3a\x97\x93\xf9\x7a\x9a\x70\x18\x94\xaf\x4c\x98\xf4\x6e\x27\x34\x00\x32\xbc\x24\x82\x30\x8e\x30\x07\x1f\x7f\x46\xc0\xad\x84\x06\x40\xce\x95\x93\x9c\x52\x62\xf0\xf2\x09\x96\x54\x08\x17\xf7\xa7\xf3\xaf\x9b\x2d\xdb\xd5\xee\x85\x91\x44\x2b\xe0\x8d\x89\x17\xb6\x76\xda\x27\xee\x01\x6e\x24\x6e\xb1\x7b\xb0\xdb\x3c\x64\x6f\xd1\x3d\x61\xf9\xad\xbc\xf5\x20\xb4\xc4\x62\xba\x70\x00\x5b\x45\x0d\x4a\xc1\x08\x9d\xb9\xef\xb9\x54\xa5\xb4\x43\xca\xbe\xc4\x1f\x76\x23\xb5\x1b\xda\x1b\xd5\x05\x08\x73\x8a\x28\xa2\x0f\xb0\xf5\xb2\xbe\xe8\xe0\xe7\x14\xab\x16\x84\x99\x84\x76\x90\x63\xb6\xb3\xdf\x4c\x65\x86\x12\xca\xbe\x22\x1f\x69\xc0\xc5\x87\x1c\xba\xff\x11\x2a\xab\x8b\xac\xa3\x97\xb3\x4b\x38\xe5\x5e\x77\xfc\xce\x61\xae\x4d\x0d\xd6\x2c\x94\xc0\x33\x5c\x07\xa9\x6a\x19\xab\x9a\x8c\x2d\xf4\x01\x01\xf8\x4f\xbb\xad\xd8\xc2\x65\x69\x64\x1c\x47\x1b\x41\x59\x49\x65\x2b\x7a\x87\xc2\x3c\x99\x19\x0c\x36\x0b\x94\x93\x9f\x5b\xed\x50\x5f\xed\x1d\x64\x97\x7e\x8a\x21\xed\x04\xd5\xc6\x07\xab\x75\xbb\x91\x0f\x6f\x43\xe3\x3e\xe9\xbe\x55\xa7\xf1\x0e\xca\x05\xd5\x33\x53\x8d\xea\xd7\x19\xb9\x44\xab\x95\x12\x36\xa3\x6c\x29\xc7\x8e\x50\xce\x84\x90\x76\x80\x2f\xa7\x81\x82\xb0\x65\x18\x13\xf4\xb0\x20\x60\xc5\x8b\x75\xf6\xb4\x6b\x90\x28\x5b\x62\xc9\x4a\x1b\x53\xe3\x47\x6f\x51\x43\x75\x16\x22\x1c\x6f\x2e\xba\xb2\x2e\x74\x7d\x4c\xa8\xd7\x46\x7a\x3e\x63\xe2\xda\x04\xca\x4c\x6a\x2d\x22\xff\xd4\x62\xeb\x0d\x31\xdb\x3e\xbe\xbf\x7c\x4d\xf5\x0b\x88\x10\x52\x61\x07\x2c\xdb\xa5\x32\x12\xae\x4d\xc9\x07\xd3\x48\xf3\xa4\x12\xd3\xc2\xc1\x20\x60\x54\xc0\x0b\x0b\x6f\x74\xbb\x42\x58\xce\xa2\x44\x38\x4d\x23\xcc\x7c\xfc\xe5\xd4\xc3\x30\xd0\x00\x07\xda\xd3\x05\xa5\x9c\x20\x12\xaa\xca\x2e\xc7\x5d\x59\xb3\x83\x90\xc3\xef\x2e\xfa\x91\xca\xe1\x1f\xac\xa9\x30\x23\x2a\x92\x8b\x6c\x22\x42\xa8\xa6\x7d\x2b\x57\x69\x5c\xf7\x4f\x60\x70\x0b\xd1\x6c\xd4\x19\x8b\x69\xd5\xfc\x4c\xca\x6d\x19\x57\xe7\x3e\x08\xcf\xb1\xd1\xdb\x41\x55\x4a\x1b\x64\xe6\x8c\x5c\x99\x1d\xe3\x69\xe9\xae\x77\xf1\x8b\x6c\xee\x2e\x7b\x6f\x66\xed\x41\x91\x21\x43\xb0\xce\xb6\x58\x98\x17\x53\xd8\x20\x42\xe5\xb5\x43\xb3\x91\x4d\x30\x8a\x8c\xc7\xe2\x76\x19\x9b\x1a\xb8\x50\x97\x87\x1a\xa9\xdc\x74\xb2\xeb\xf4\x01\xa8\x4d\x20\xe4\xf9\xce\x9f\xc0\x77\xc4\xfc\x55\x6b\x40\xd8\x48\x30\x92\x50\x80\x09\xd0\xe4\xa0\xe4\x36\x62\x72\xb0\xb1\x07\x79\x84\x12\x55\x97\x52\x4e\xb2\x6b\x15\x2a\x2c\x95\x9d\x64\x3b\x2a\xec\x99\xf8\x3d\x25\x5c\x36\x70\xdd\x87\xcb\x19\x0f\x5b\x15\x7c\x3d\xc8\xe1\x6f\x45\x53\x86\x06\x57\xc6\xf3\xec\x86\x60\x36\x62\x9b\x9f\xa6\xe4\x46\x21\x8d\xc3\xcc\x3f\x8d\xa3\x04\xfd\x61\xea\x90\xb9\x7f\x7c\xec\x7e\x22\x8c\x83\xbb\xe2\x32\x66\x53\x62\x7e\x90\xd5\x24\x33\xaf\xc6\xb2\xd3\x71\xb9\x90\x30\x24\x36\x03\x6f\xac\x10\xd7\xf3\x49\xcf\x55\x66\x2d\x0c\x33\x8d\xca\xc9\xad\x57\x66\x1d\x92\xd5\x2a\x59\x18\x0b\xb8\x25\xa1\xeb\x34\x0a\x42\x3c\x8f\x29\x17\xe1\x14\x66\x35\x5c\x04\x66\xa7\x3b\xbe\xd2\x16\xd5\x34\x15\x08\xa3\x08\xce\x0f\x66\xfa\xc6\x81\x1c\x16\x37\x96\xae\x1b\x2b\x55\x9c\x7b\x46\xca\xd7\x74\xfa\xa8\x75\xc3\x9d\xed\x59\xbf\x87\x6e\xf1\xf4\x8e\x98\xe7\x9f\xcf\x4d\xc3\x52\x18\x32\xe9\xbd\x6a\x1b\x56\xb6\xc5\x74\x06\x38\x7a\x1b\x91\x25\x62\x64\x49\xef\x25\x8f\x80\x3e\xc4\xca\x79\x6e\xd6\x57\xc9\x71\x9d\x2c\x0b\x8b\x7d\x73\xa7\xd7\x0c\xcc\x44\x0c\x5c\x98\xa9\xf5\x10\x5c\x7c\xba\x5d\x21\x1e\xce\x63\x1c\xa9\xe9\x2e\xfc\x7c\x7a\xea\xa2\xfe\x97\x30\xbf\x4a\x0a\x21\xde\x42\x71\x4a\x03\x4b\x03\x6c\x03\xda\x44\x1a\xbc\x84\x57\xb9\x0c\x5f\x5f\x8f\x59\xbb\xe5\x57\x6e\xba\x94\x7b\x6e\x75\x24\x86\x22\x1a\xcf\x09\x5b\x9b\xf1\xe4\xa1\x66\xa0\x50\x09\x0a\x95\x6f\x6c\x21\x07\x11\x39\x23\x34\x76\xaa\x5f\x83\x8a\xa9\x50\x6c\x07\x49\xf9\xeb\x6a\xe1\x94\x69\x33\x3c\xb5\x90\x2a\x84\x64\x50\x99\x31\x3b\xd6\xf2\x12\xf5\x55\x5a\x5a\xe7\xd6\xd2\xb9\x25\x69\x50\x09\xee\x1a\xb2\x00\xc6\x94\x21\x08\xd4\x94\x5d\x19\x81\xbb\xa7\x6a\x5e\xa3\xbd\x1b\x1a\x09\xd4\xc5\xb1\xd1\xe1\x61\x3c\x8f\xd4\x56\xdf\x2b\x68\x03\x3a\x0c\xa8\xea\x04\xb3\xca\x63\xba\x86\x58\x13\xa4\x05\x22\x1b\x8e\x67\x20\x06\x6a\xee\xc7\xe6\x73\xe7\x16\xfd\x78\x7d\x7e\x71\x36\xec\x9d\xfe\x74\x93\x79\xc9\x99\xa2\xd3\xc1\xc7\x8f\xbd\xcb\x33\xf9\x47\xb6\x87\x25\x7f\xcf\x50\xc9\x61\x19\x78\xd4\x09\xe8\xf4\x8e\xb0\x4e\xb8\xc4\x73\x82\xce\x06\xa7\x3f\xf5\x47\x37\xe7\x1f\x7b\xef\xfb\xbf\x28\xc5\x9f\x3b\x21\x2a\xdd\x9c\x95\x52\x77\xe8\xec\xfc\xea\x27\xf9\x6b\x89\x94\x0f\xb3\x5f\xb6\x7c\xf6\xc8\x27\x09\xca\xf4\x70\x74\x35\xee\x9d\x82\x88\x40\xe3\xf3\x8f\xfd\xc1\x35\xa4\x48\xd1\x87\x7e\xef\x62\xfc\xe1\xe6\xf4\x43\xff\xf4\xa7\x9b\xf1\xcf\x43\xe5\xe8\x67\x6d\x65\x82\x46\x83\xeb\x71\xff\x26\x73\xfa\x03\x94\x8a\xc6\x47\xbf\xe8\xbf\xb3\x12\xcb\xfe\x06\x84\xec\x0f\x38\x41\x54\xc0\xca\x02\x47\xbd\xcd\x9d\x08\xc1\x37\x59\xa6\x91\x08\x13\xf5\x4d\xf8\x66\x6c\x58\xfd\x1d\xa6\x33\xf5\x09\xb6\x0b\xb3\x95\x1a\xf3\xf2\xb5\xff\x2c\x5f\xdb\xdc\xb4\xad\xc0\xb6\x5a\x62\x17\xac\x54\xf8\x5f\xd7\x83\x71\xcf\x80\xa9\xde\x55\x8b\xa5\x54\x60\x74\x46\x66\x61\xac\xc2\xf6\x3f\x3e\x76\xe1\x59\x1d\x93\x9c\x9a\x20\x16\x22\xb2\x0b\x07\xa3\x7d\xe5\x9a\x89\xc8\xbe\x3e\x5a\xe5\x0e\x35\x28\x9b\xa3\x57\xe4\x4b\xe6\xe9\x07\x4c\x75\xa9\xb2\xb0\x62\x84\xa7\x91\x50\xd3\x55\x40\x50\x91\x9d\x67\xb9\x79\x03\x38\x46\x36\xf5\xe6\xcf\xa5\xbd\x79\xd6\x6d\x97\x1e\x6b\x00\x58\x08\x6c\x7c\x34\xaf\x0d\x1e\x1f\xc9\x4a\x95\xa3\xfe\x7f\x5d\xf7\xaf\xc6\x26\x93\xa4\xfc\xb5\x41\xf8\xaa\x3f\xfa\xd4\x3f\xbb\xd1\x5d\xc4\x60\x34\x36\x99\xef\x56\x26\x35\x81\x0e\x07\x97\x57\x46\x87\x15\xeb\xf7\xd5\xe2\x03\xf0\x0d\x67\x5a\xb1\xe4\xaf\x0d\xc2\xd7\x63\xa3\xb7\x0a\xfd\xd2\x22\x68\xa4\xac\xdf\x9a\x45\x6d\x2e\x4d\x0b\x09\xaa\x01\xae\x2f\x2f\xeb\x9a\xbd\x8c\x08\x0e\x3a\xe0\xb1\x53\x3b\x71\x16\xea\xb6\x67\x18\xcf\x28\x52\xc1\xdc\x55\xac\x6c\x63\x39\xfa\x03\x98\x08\x44\xd1\x0a\x05\x24\x22\x82\x20\xca\x92\x05\x8e\x49\xa0\x2f\x58\xfe\x67\xdd\xbc\x58\xa0\xd4\xc2\x64\x99\x98\x83\xb7\xf9\xcb\x7b\xa8\xd7\x27\x56\x1f\x69\x40\x22\x15\xc3\x30\xff\x33\xeb\x84\xe3\x00\x91\x7b\xc2\x56\x62\x01\xb3\x63\xce\xe9\x34\x5c\xbb\x29\x0a\x85\x29\xf7\x7b\x50\xd4\x46\x86\x5a\xa2\x6b\x27\xa3\x4f\xb3\x2a\xae\x1f\x96\x42\x98\x29\xa7\x3a\x89\x3e\x30\x1b\x44\xc1\xf6\x99\x99\x80\x8b\x3a\x97\xe4\x61\xeb\xd5\x7f\x4e\xd2\xd7\xaf\xbf\x37\xf5\xed\x5f\x81\x88\xad\x40\x92\x94\xcd\xb7\xbd\x0a\x6d\x2f\x3f\x15\x91\xd3\x88\xa6\x01\x7a\x27\x17\xe4\x6c\xe5\xf8\x60\x3b\x21\xfb\x53\xce\xae\x77\x6e\x9f\xef\xee\xc8\xb8\x1e\xb0\x81\xf0\x94\x84\xf7\xb0\x69\xba\x8e\x2d\x3d\x25\x4c\x28\x5b\x29\x1d\xd1\xd8\x48\xca\x4b\xd8\xa4\x58\x99\x94\x69\xdb\x97\x43\x8e\xc8\x17\x32\x4d\x05\xec\xe2\x63\x89\x81\x21\x82\x7e\x76\xd6\x15\x61\x41\xb8\x80\x29\x31\x09\x0a\x5e\x52\x60\xcb\x64\xfd\xbe\x68\x97\xf6\x2a\xbf\x65\x77\xb4\xbe\x48\x1d\x42\xb4\x33\x7e\xb4\xf6\x35\x72\xa4\x42\xbc\x1c\x21\x22\xa6\x5d\xd3\x74\xed\xdb\xe5\x6b\x2a\xde\x94\xf1\xf0\x9e\x44\xab\x6c\x7b\x69\x1d\xdc\x42\x05\x83\x0b\xa3\x40\x47\x4a\xe6\x15\xf5\x05\x42\x69\xde\x62\x4e\xf2\x95\xe2\x12\x83\x8b\x73\xbd\xe1\xac\xf6\x3e\x36\xee\xa7\x9b\xcb\xee\x6b\x90\xa9\x5f\x30\x6b\x47\xe4\xdf\x52\x09\x3d\x03\x2b\x43\x51\x69\x22\x9b\x81\x84\x4c\x06\x70\x16\x01\xbb\x02\x1d\xb3\x86\x46\xba\xcb\x50\xa6\xf4\x2e\x2d\x06\x29\xbb\xaa\x94\xe9\x98\x5f\x5a\xc6\x16\xf3\xc2\x21\x64\x55\x04\xe1\xeb\x0a\xee\xa4\xd4\x51\x7d\x18\x9b\xae\xde\xb8\xe5\xac\xea\xe2\xd2\xad\x62\x87\x8e\x8d\xc4\x0e\x60\x39\xd7\xad\xf9\x69\x0c\x42\x66\x45\x9b\x37\xd1\xe5\x88\xf6\x09\xb3\xe2\x68\xb6\xe9\x6a\x48\x2e\x7c\xe9\xe6\xbd\x94\x63\x5d\x29\xe4\x80\x28\x7f\x64\xf3\x43\x2e\x9f\x9c\x2a\x93\xaf\x6b\x4e\x98\x6d\xcf\xf9\x2b\x12\xb2\x17\x10\x94\x67\xe1\xea\xb5\x24\x01\x57\x4e\x1e\x1f\xbb\xca\xdb\x82\x42\x2a\x10\x51\x8f\x07\x6c\x5e\xa6\xa2\x1e\x03\xa1\xc6\xa5\xf3\xcc\x6c\xf6\x5a\x34\x5f\xa5\x04\x1a\x66\x54\x9f\x69\x5f\x8f\x2e\xda\xab\x88\x52\x7b\xec\x38\x8a\x79\x56\x0a\x75\x0a\xa1\x36\x65\x8b\x02\xd8\x52\xc6\xeb\xa9\x96\x11\x78\x2b\xa1\x1d\xd0\x73\x12\x50\x9d\xda\x0f\xda\x11\xe8\xcc\x9c\xde\x01\x6f\xd9\x04\xdc\x48\x64\x05\xb2\x8f\xb3\xc5\x34\x0e\x18\x73\xd8\xb8\x72\x1a\x33\x8c\x3e\xa9\x2b\x57\xd8\x7c\x8d\xba\xdf\x36\xf4\x4c\xea\xed\x99\x5f\x7b\xde\x57\x2b\xf6\x1f\xb3\xbf\x37\xc9\x6c\xbc\xf0\xc8\xd8\x2e\xd0\x76\xd2\x5b\xc5\xb1\x59\x64\x0d\x3e\x43\x23\x4c\x3b\xcd\x72\xdb\xd5\xa5\xe0\x89\xee\xa2\xbb\x13\xb6\x1f\xed\xad\x9d\x84\xcd\xbd\x9b\xbd\x4f\xbe\xbe\x1a\x21\x47\x01\x65\x48\x83\x28\x28\x82\xad\xe9\x14\x1e\x56\x91\x69\x58\x0c\x7b\x52\x6b\xc8\x6c\x42\x6d\x46\xc2\xeb\xf7\x46\x71\x26\x78\x7e\xd5\xe2\xea\xea\x83\xb2\x77\xcd\xcd\xf2\x5c\xc3\x89\xaf\x7c\x1d\xf5\x2a\x68\x3f\xb8\xef\xd9\x88\x6f\xa0\x8d\xa9\xe1\xce\xb6\x63\xec\xdc\x1d\xd9\x48\x59\x2d\x90\x8d\x36\x60\xa5\x24\x06\x10\x65\x01\x08\xa1\xf3\xc0\xde\xaa\x2f\x7f\x3d\x3d\x4d\xe2\xf1\xf9\xf0\x04\x9d\xcf\xd0\x8a\xa6\x60\x70\x7f\x4b\x16\x61\x1c\x20\x8c\x66\x21\x23\x0f\xb0\xd6\x84\xf3\x0b\xf0\xdf\x9b\x47\x4c\x4a\x18\xfd\xb2\x3a\x52\x17\x26\x95\x2d\xe3\x42\x88\x84\xdf\xc0\xf3\xea\x8b\x9f\x21\x47\x53\xca\x18\x99\x8a\x68\xa5\x3c\x27\xf7\x23\x4e\x8e\xf4\x45\x1c\xb0\xc7\x8d\x89\x78\xa0\xec\xae\x10\x41\xc5\x5c\xf9\xff\xb4\x19\xb2\x7e\xa0\x84\x93\x34\xa0\x1d\x21\x56\x50\xa7\xad\x37\x03\xec\x32\x36\x35\x24\x40\x5c\x60\x51\xd3\x35\xf9\x48\x15\x19\x47\x57\x83\xeb\xd1\x69\xbf\xd3\x1b\x0e\xd1\xb8\x37\x7a\xdf\x1f\xc3\x4f\xcc\x73\x77\xcf\xa6\x13\xf9\x3a\x08\x76\x0a\x72\x72\xa4\x66\x72\x6b\x19\x97\xd2\x4a\x19\x83\x1a\x1d\x1c\x03\xac\x82\xd1\xd0\x12\x33\xa4\x32\xa9\x09\x54\x5d\xf6\x87\xfb\xc4\xb2\xe3\xee\x0d\xcf\xc1\x89\x57\x80\x68\x2a\xfe\x37\x6c\x03\xc3\xc4\x0f\xf6\x77\xf4\x5e\x70\x3d\x27\x14\x23\xc2\x05\x9e\x3b\xa7\xd2\xa5\x44\x16\xa0\xca\x69\xe8\xfe\x86\xf5\x3d\xaa\x34\x67\x92\x09\x8f\xd2\x5a\x27\xfa\xff\xd9\xfb\xba\xe7\xc6\x71\x24\xcf\xf7\xfb\x2b\x70\x1f\x11\xee\x8b\xb5\xd4\x55\xbd\x73\x2f\x35\x0f\x1b\x6a\xdb\x55\xed\x3b\x97\xed\xb0\x5d\xbd\x3b\x3b\x55\xe1\x85\x45\x58\xe2\x99\x22\x38\x04\x69\xb7\xc6\xe7\xff\xfd\x02\x09\x80\x1f\x12\x32\x01\x52\xb2\xbb\x6f\xae\x66\x1e\xba\x2c\x64\xfe\x32\x01\x82\x60\x02\xc8\x0f\x0a\x48\xeb\xee\xbb\x21\x7a\x79\x01\xe7\xe3\xce\xe2\xdf\xeb\x5d\xb4\x89\xb7\x57\x21\x48\x47\x6c\x4a\x70\x9e\xb3\x34\x4f\xd2\xc7\x34\xa9\x79\xd6\xf8\xa8\x42\x75\x5b\xb8\x2e\xd5\xcb\x47\x8d\xbf\x13\xc3\x50\x42\xaa\x24\x2c\x49\x55\x91\x71\xb3\x2e\x5f\xcc\x9a\x3a\xc8\x4d\x08\x81\x2b\x13\xaf\x84\x22\xfc\xb3\x77\x82\x1c\xa6\xe4\x22\x7d\x14\xb9\xbd\x03\x5a\xd4\x69\x32\x65\x6c\x96\x65\xb6\x0e\xcd\x52\xf0\x0c\xf2\x8f\x25\x76\x04\xf4\xfb\x5f\xd4\x6d\x44\x04\x14\x61\x53\xe0\x05\x5c\x0a\xa5\xf0\x30\x8e\xb7\x93\x3f\xa6\xfb\xb2\x5c\xf8\xc4\x6f\x08\x03\x3f\x89\x3d\x74\x76\xb4\xb4\x31\x5d\xb3\x5b\x8f\x08\x81\xcd\x59\xca\x1e\xba\xb8\xb3\xd4\x1d\xba\x3a\x79\x10\xeb\xdf\xa7\xbb\xbb\x49\x1e\xd5\x65\xfd\x41\x89\x11\x09\x5f\xa0\xbd\x74\x75\x17\x89\xa3\xba\x58\xf1\xf9\x43\x23\x10\x97\xa7\xc9\xf6\xd3\xc3\x1d\x04\xd2\x1d\x6c\x02\x83\x3a\xdf\x17\xd5\xfd\xc0\xe8\x46\xc1\xe7\x26\xac\x78\x62\x42\x00\x0d\x6d\xa8\x2b\xbb\x40\xd3\x4a\xfb\xd2\x7b\x8c\xce\x26\xb4\x2b\xea\x70\x55\x47\xe7\x0f\xda\x15\x35\xac\x2a\x24\x08\x31\x95\x47\xb2\xcc\xae\x0c\xfd\x64\xfe\x9b\xbe\x5f\xcd\x8b\x15\xa3\xf3\x2e\xf0\x94\xf2\x70\x92\xd3\xcc\x29\x8d\xad\xa7\xd4\x42\x24\x6e\x42\xa9\x41\xa7\x97\xbb\x60\xc6\xab\xf9\xfc\x3c\xfd\x68\x90\x3e\x66\x7c\x31\xf0\x80\x75\x2c\x5e\x48\xbd\x71\x2f\xc1\x38\xd5\xf7\x28\x6b\x4c\xb7\xc2\x2f\xcc\xfe\xba\x35\x52\x96\xbf\x5b\xb0\x59\x86\x0f\x85\x29\x79\x1c\x4e\x1c\x4a\xb2\x10\x42\x9e\x9f\xa7\xbf\x48\x55\xd9\x2b\x84\xe7\xe7\xe9\x31\xb0\xdb\x6d\x91\x09\x30\x54\x95\x80\x1d\x14\x29\x7a\x10\xd0\x58\x85\x7e\x6c\xca\x78\xed\x4d\x35\x1c\x92\x56\x12\xfe\xf1\xf2\xc2\x9e\xb8\x71\x9b\xbf\x83\x00\xc6\x6a\x3b\xc1\x8a\xc7\xfb\xf3\xe5\x05\x9d\x64\xfb\x82\xa7\x95\x37\xf7\xce\x51\x61\x22\x34\x4f\x8c\x98\x4e\xc2\x86\x21\xbd\xb0\x8f\x2b\x4e\xad\x1d\x65\xe0\xdd\xb0\x15\x81\x9a\x47\x52\x7e\xd2\x7f\xbe\xbc\xb4\x79\x50\x29\x05\x23\xb8\x71\xd1\xe4\x13\xa1\x86\x5e\x59\x73\x31\x55\x6e\x31\x78\x4a\xb3\x0c\x6a\xdc\x42\x9a\xd0\xba\x84\x23\xf7\x6c\xed\x42\xbc\xdb\x8a\x90\xdd\x2a\x48\xa4\xf8\x3d\x89\x20\x3a\x31\xf0\xf4\x95\x48\xa1\x76\x85\xe7\x44\xbb\xaa\x73\xc6\x99\xcc\xc5\x44\xde\xdf\x9b\xba\x96\xcd\x5d\xc4\x40\xf9\xe6\xab\x76\xd2\x59\xfe\x7f\x75\xcb\x3f\x3c\x75\xb4\x43\x51\xac\x5e\xa1\xd7\x27\x47\x5f\xae\x4e\x6f\xfe\xc2\x3e\x5d\x5d\x7c\xb9\x44\xe0\x37\x88\x22\x80\x30\x45\x37\xa9\x10\xa8\x13\x36\x3b\xbb\xbe\xc0\x41\x5c\x3b\xc2\x7e\xf5\xeb\xe9\x11\x56\x45\xd6\xb5\x52\xac\x64\x65\x84\x3e\x4d\x18\x06\xef\x45\x8f\x88\x02\xc2\x22\x84\x9a\x66\x92\x39\xa0\x00\x16\x27\x64\x9b\x83\x45\x75\xb7\xe9\xfc\x70\x97\x33\xfc\x99\x40\x1b\xce\x46\x3f\x8f\x0e\x45\x08\x02\x1d\x8a\x2e\x09\x05\x42\x56\xac\xe8\xd3\x10\x30\xc7\x27\xbf\x9e\x9c\x5d\x5c\xa2\x75\x2b\x36\xa9\x08\x28\xba\x00\x46\x9f\x06\x87\x41\x9f\xad\x69\x24\x18\xc9\x11\x45\xa7\xd6\xf5\x2f\x36\x68\x7f\xd4\x4d\x70\x34\x3b\x22\xfc\x8c\x1d\x75\xc2\x23\xe0\x5a\x93\x75\x4b\x75\xdb\x1b\x4e\xa8\x70\x33\xbf\x07\x4f\xe0\xc9\x44\x3d\xa4\xc5\x44\xa9\x6c\x02\x41\x16\x20\x12\x4a\xdd\x68\xb1\x69\x5e\x8b\xa6\xe2\x45\x9a\xc3\x76\x55\xf4\x8a\xef\x0e\xfa\x10\x40\xe4\x34\xd6\x77\x68\xf3\xb3\x7d\x39\x3a\x3a\x39\x39\x3e\x39\x1e\x26\x6c\xce\xb3\x37\xbd\x85\x7a\x45\x81\xfe\x0e\xba\xc3\x03\xfa\x13\xba\x45\x46\x83\x35\x46\x99\x3b\x9b\xb8\x5d\x58\xbb\x2c\x2a\x7e\x76\x38\xce\x58\x75\x9e\x9f\xa7\x70\x85\x7f\xbb\x0a\x54\xad\x1f\x87\x85\xa8\x65\xde\x9c\xa5\xc8\x0a\x06\xc1\x65\x73\x9b\x3e\xd0\x44\x9a\xc1\x8b\xa3\x4d\x6d\xc6\xef\x4c\xfa\x83\x26\x91\x50\x20\xc7\x21\x26\x2f\x13\xf3\xa6\x8e\x1c\xfb\x41\x96\x0c\x4e\x36\x99\xc8\xb5\x9d\xa8\x0d\xf9\x87\xb4\xf8\xef\xf8\xa3\x8f\x64\x27\x85\x9b\xd9\x3b\x56\x76\x88\x1b\x11\x5d\x3e\x8a\xd2\xb8\x68\x1c\x9a\xff\xb0\xb9\x4c\xc4\x07\xf6\xfe\xdd\xbb\x9f\x0e\x99\x7d\x4c\x1f\x5c\x2e\x51\x25\xaa\x6e\xbc\xc6\x9d\x98\xf3\xda\xa4\x92\x6b\x6a\x57\x14\x9d\x3c\xfb\xb8\x93\xe7\x1b\x08\x8e\xe8\xb0\x3d\xd5\x32\x82\xff\xf4\xee\x9f\xb7\x34\xd1\x3f\x35\xaa\xfc\xc5\x7a\xab\x40\x92\xb2\xba\x5a\xca\x32\xfd\xbb\xc9\x18\x56\xd8\xcc\xb5\x70\xb4\xd4\xf8\x6f\xf0\x39\xe1\x19\xf2\x3b\x28\x32\x62\x40\x3e\xb0\x99\x09\x96\xd6\x7b\x2c\x91\x43\xc9\x66\x10\x9f\x48\x90\x0e\x55\xef\x8a\x32\x7d\x4c\x33\x61\x13\xe9\x98\x70\x3a\x61\xf6\x65\x81\x97\xf1\x8d\x84\x0f\xed\xb8\x71\x55\xba\x86\x9f\x4c\x5e\xab\xfe\xf3\x30\xed\xb3\xcb\x53\xf8\xf2\x3b\x8a\xe6\xf1\x98\xe6\x5e\x74\xed\xf0\xfe\xbf\x82\x0e\xe8\x30\xa4\x73\xc1\xe0\x7a\xfd\x06\xae\xd7\x9f\x9f\xa7\x67\xfc\x4e\x64\x66\xbd\x76\x89\xa8\xa2\xab\xcc\xec\x82\x48\xaa\xf8\x73\xe3\x2f\x3b\xa8\xea\x4d\x34\x3b\x29\xdc\x9d\xd6\xb8\xd5\x06\x56\x1e\x57\x95\x31\x20\x99\xe6\x25\xc5\x86\x0c\xd9\xa8\x28\x80\x4d\x2a\xb6\x1d\x1a\x1d\x3a\x49\x1a\x04\x11\xad\x84\xf7\x24\x6c\xe0\x63\x1d\x8e\x37\x56\xbd\x88\x61\x8a\xc3\xfe\xb0\xe5\x0e\x1d\xd9\x47\x0f\x23\x29\x10\x2b\x97\xec\x49\x5c\xbe\xf3\x61\xe8\xeb\xca\x24\xbb\xe9\x02\xe8\x03\x9a\x35\x64\x51\x60\x1b\x0a\x6f\x3b\xad\x56\xe5\x1a\xee\x61\xa4\x0d\xe7\xe7\xec\xf1\xfd\x56\x4c\xff\x21\x90\xaf\x6a\x65\x4c\x18\xfd\x5d\x9e\x14\x70\xc5\x17\x1a\xc7\xb7\xd3\x23\x6e\x38\x62\x57\x08\x0f\x03\x29\x60\x2b\x32\x60\xd8\xeb\x1f\x64\xa7\x84\x77\xdf\xa7\xd8\xef\x35\xc9\x46\x09\xc3\x4e\x86\x9b\x66\x92\x99\xa5\x79\x25\x16\x25\x70\xe1\x5b\x01\x1f\x2d\x09\x1b\x82\x42\xd9\xab\xcd\xf8\x63\x73\xdf\x4e\x1d\x5a\x07\x98\x50\x41\x2e\x13\x56\x26\xe7\x3c\x13\x53\x3d\xf7\xcf\x2e\x8e\x66\x67\x27\xfa\x7b\x7a\x70\x74\x76\x32\xbb\x3a\x38\xd4\xbb\x9e\xc7\x54\xd6\xca\x92\x19\xa3\x31\x13\x15\xee\x0d\xb3\x1f\x6c\x54\x6d\xe3\xc2\x77\x0b\xae\xe6\xb7\xd5\xba\xb0\x5e\x95\xda\x4a\x35\x99\xf5\x0f\xa0\x84\x27\x93\x25\x3b\xc8\x65\x2e\xb0\x42\x90\xe3\xb0\x50\xb5\x64\xc9\x1e\x53\xf1\xd4\x26\x9d\x4f\x59\x5d\x66\x84\x6c\x84\x21\x2c\x60\xd9\xd6\x6f\x87\xbd\xa9\x5e\xf1\x09\x17\x8e\x38\x5e\x54\x6c\x25\x63\x07\x14\xc5\xb0\xc9\x3f\xbb\x61\xfb\x10\x9f\x73\x62\xff\x24\x0f\xa5\x62\xd9\x49\xe1\xbd\x77\xe3\xa0\x1b\xac\x0e\x27\x1e\xf6\x97\x5f\x79\x56\xdb\x84\xb5\xe5\x1b\x1e\xbb\xfd\xa1\x74\x24\x87\xf1\x6f\xbe\xe4\x72\x36\xdf\x97\x27\xac\x2a\xc6\xf3\x62\x2f\xd0\xa4\xd2\x7b\x71\xd9\x19\x09\x46\x2a\xf6\xea\xce\x3a\xaf\x20\x68\x70\x87\xf6\xea\xa6\xf3\x0a\x82\xfc\x1d\x5a\x6a\x03\x90\xc3\x21\x08\xaf\x44\x7b\x0d\x6e\x2e\x12\x88\xe3\xb7\x30\x23\x2a\xd0\xd8\xa4\x40\xbf\xe9\x61\x63\xb3\xd2\x8e\x7f\xc9\xf6\x05\x8f\x28\x2f\x9f\xda\x34\xba\x7d\x97\x40\x54\x21\x82\x85\x10\x92\x65\xbd\x65\x52\x45\x18\x47\x41\x3e\x5c\xdc\x52\x64\x24\x2c\xb4\xe3\xec\x69\x7e\x2f\xcb\x95\xb9\x03\x03\x79\xd6\xc3\xf7\x07\xde\xba\xfa\xea\xa9\x22\x26\x77\x75\x9a\x55\x26\x55\xbf\x5a\xab\x4a\xac\x0e\x59\x9a\xbb\xac\xa6\x7a\xde\x14\x42\x5b\x9d\x7a\xfd\xb1\xcd\xa6\xc6\x33\xcf\xf5\x7b\x0c\x39\x69\xb1\xc4\x5c\xbf\x87\x26\xf8\x90\xb8\xc4\x90\x94\xb2\x0d\x0d\x0d\x53\x2b\x51\x2a\x76\xb7\x86\x83\xeb\x10\x5e\x9f\x18\x07\x86\x3c\x7d\x89\xa8\x78\x9a\xd9\x39\xd2\x2d\x33\xb5\xb9\xf9\xa3\xa4\x0e\x44\xc2\x55\x32\x1f\xc6\xd0\xa0\x75\xa8\x70\xa8\x52\xcc\xa1\x06\x6f\x51\x30\xf1\x48\xc4\x2a\x22\xc4\x38\xf0\xd6\x81\x43\x48\x5d\x3f\x43\x58\xc0\x83\x58\x47\x63\x37\xb4\x04\xac\x09\x29\x08\x01\xb6\x54\x21\xa8\xb8\x87\xb5\x45\x1b\x82\x8d\x9e\xeb\x3e\x72\x1c\x1c\x76\x03\x7a\xd3\x23\xef\x5d\x60\x94\x09\xe0\xb5\xd7\x1d\xdd\xe0\x6d\x4a\xea\x20\x1c\x54\x1d\xbd\xa8\x34\x91\x67\xb0\x1d\x34\x41\x7d\x6f\x64\x85\xbf\xa1\x06\xe4\x10\x6c\x47\xa8\xed\xc7\xd2\x8f\xb3\x13\xde\x52\x07\xff\x30\xa4\xf8\xa9\x3c\xc2\xf1\x90\x16\x36\xcf\xb6\x4b\x5a\x02\x77\x99\x95\xa4\x72\xb1\x85\xb8\x70\x51\x4b\xa9\x2a\x58\x5c\x5a\x7f\x13\x4a\x86\x8f\x1c\x07\xef\x95\x61\xb6\x96\x6d\xd7\x5d\x65\xca\xce\x65\xa5\xd7\x66\xb9\x5a\x89\x3c\x11\xc9\x7f\xa6\x64\x8f\x40\xf3\xab\x46\x1d\x2f\x10\xc7\x07\x30\x13\x0e\x9a\x9b\xa1\x83\xf6\xec\x72\xa0\x1b\x01\x00\xed\x25\x33\xfe\x28\xa8\x90\x52\xe8\x69\x5f\x97\x84\x00\x09\x87\x00\x6c\xd3\x11\x70\xc6\x24\x33\x5e\x57\x6a\x58\xc9\xc5\x01\x00\x84\x02\x9b\x2f\x7f\xfc\x83\xa1\x39\x71\x91\xe4\xb8\xa1\x83\x65\xca\x06\x6b\xcb\xcc\x16\xfd\x06\xc3\x17\x32\xd9\xa6\x32\x87\x53\xcb\xc2\x15\xe9\x6e\x9c\x9c\x0f\x9b\xba\x0f\x86\x3c\x55\x4d\x46\xff\x34\x6f\xbe\x1f\x4f\xb2\x84\xbc\xa2\x4d\xe5\x29\x74\xcd\x7d\x63\x2d\xfc\x43\x01\xbb\x00\xb3\xf6\xbd\xf1\xfe\xe4\x0d\x24\xe3\x5d\x1e\xe6\x87\x7e\x6d\x8f\x18\x46\xf8\x81\x47\xb1\x62\x42\x43\x79\x1a\xae\x83\x59\x1a\x2c\x45\x51\x40\xd2\x0d\x59\x57\x5f\x73\x7b\xe1\x35\xeb\x38\x6a\xc2\x35\xd6\x9d\x09\xfd\x14\xdd\x32\x71\x65\xba\x58\x56\xac\x90\x65\x35\x85\x4b\x77\xc1\x13\xb0\xf5\x78\x99\xb0\xb9\x4c\xdc\x91\x8c\x26\x38\x84\x07\xa9\xff\xfa\x6f\x97\x17\x57\x37\xde\xe3\x18\xf4\x55\xf8\x83\x69\x49\x0c\x65\x9d\xb7\x15\x22\x1b\x2d\x35\xa6\xfe\xda\x1d\x19\x07\x19\x77\x4a\xbb\x92\xa5\xe8\x6e\xc1\xc9\xde\xef\x04\x8c\x2b\x2c\x12\x73\xb9\x66\xfe\x8d\x5f\xc4\x79\x69\x71\xd8\xb7\xf5\x4f\x7d\x45\x89\x78\x17\xeb\xc2\x39\x3c\x1d\x9a\x2b\x5e\xc9\xf2\x3a\xcb\x8c\xa3\xa4\xfd\xc1\xdd\x76\x99\x74\x29\x96\x9c\xea\xc5\x78\x50\x4c\x51\xb4\x04\xa7\x69\x43\xd9\x6a\xe5\x1e\x76\x45\xf8\x4b\x6c\x13\x22\x80\xb2\x80\xc3\xb6\xb6\x00\xb9\xb5\x3a\x79\x51\xe8\xa5\xd9\x04\xc3\x97\x70\x51\xbe\xb2\x65\xfc\x4c\x2d\xc0\x15\x5f\x33\xe3\x7b\x98\xc8\xa7\x5c\xbf\xff\x03\x4d\x44\x10\x4d\xaf\x92\x2d\x05\x0a\x51\xbc\xf1\x8c\x7e\x3d\x89\xfe\x2e\xc2\x47\x72\x62\x3d\xc5\x12\xf4\x6b\xb5\x49\xe6\x05\xbb\x99\x5d\xff\xaf\xdb\xd3\x61\x4e\xed\xb6\xe0\x18\xc2\xe3\x5a\x11\xd6\x4b\xbc\x9a\x8f\x6d\x24\x18\x19\x33\x71\x03\xae\x7e\x9b\xb1\x96\x26\x7a\xb3\x37\x71\x3e\x63\x13\x97\x65\x04\xea\xe6\xf3\x07\x73\x94\xd2\x34\xbb\xa3\x25\xd5\x29\xa8\x5c\x49\x76\xf4\x11\xec\x0c\x52\xb3\xd7\x97\x8e\x76\x9d\xcd\x6c\xe9\x57\x9b\xcd\x29\x55\x2e\x03\x5c\xd2\x66\xfc\x81\x82\x8d\x50\xa6\x4a\xcb\xe5\xf7\xf7\x62\x8e\xba\x88\xec\x08\x4a\x28\x6a\x8a\x65\xe9\x7d\xb8\xcd\x34\xa1\x3f\x7a\x3f\x43\x29\x57\x3b\xd9\x95\xa8\x26\xb2\x5c\x4c\x34\xcd\x01\x1c\x50\x78\x49\xe0\x45\x31\x44\xc3\x96\x11\xd0\xe3\xc8\x96\xaf\x84\xb0\x47\x70\x06\x2e\x8a\x6c\x6d\xfc\x60\x6d\x29\x4b\x77\x7d\xd6\xd9\x10\x29\x56\xe7\x55\x0a\x79\x11\xd6\xe0\x40\x64\xc7\x06\x77\x94\x78\x25\x61\x78\xc7\xfe\xc0\xa9\x01\x89\x11\xfa\x03\x6b\x8d\x0f\xf5\xb9\xb4\xab\xb5\x73\xb7\x38\x6c\xad\xb8\x7b\x93\xe7\xbc\x63\xcd\xc1\x3b\x62\x76\xd8\x86\x8d\x1c\x90\x9d\xb1\x71\xb5\xbf\x58\x9c\xd9\xe5\x69\x1f\x62\xa7\x68\xaa\xbd\x40\x87\x95\x3e\xfa\xd8\x00\xf7\xbe\xa6\x20\x45\xe4\x4a\x43\xc2\xa3\xec\xb9\x5a\x34\xc5\x6a\xf5\x22\x25\x60\x91\x8a\xe9\xc6\xfe\x84\xc5\x74\xcc\x26\x2e\xdc\xd8\x00\xf0\xdc\x85\xc4\x43\x59\xca\x57\xe9\xe5\xab\x48\x8e\xe8\x72\x6f\x8a\xec\xbd\x5b\xe3\xd1\x71\xd5\xdb\x77\xf0\x4b\x91\xf0\x4a\x34\x39\xbc\xfb\xd2\x6a\x68\x34\xa1\x14\xa1\x4c\xfa\xbb\xe3\xfa\xd5\xbd\xb8\x99\x9d\xdd\x9a\x7a\xb1\x98\xe4\x2e\x89\x1f\x84\x2f\xcc\x96\x40\xff\x03\xdd\x3a\x6c\x52\x21\x50\x69\x06\xae\x68\x9d\x8b\xc7\x4c\x2e\x22\xae\xf7\x63\x38\x11\x91\x1d\x2f\xb8\xae\x99\x8d\x9b\x98\x04\x07\x2d\xc2\x67\xb6\x87\xc5\x20\x5c\x88\x28\xf5\xc0\x96\x5c\xb1\x3b\xa1\xb7\x58\xf5\xdd\x2a\xad\x00\xa3\x39\x4b\xc8\xd6\x30\x24\x26\x90\x47\x7f\xbb\xbe\xe6\xc0\x94\xf3\x95\xf8\xc0\x98\x79\x42\xea\xc1\x89\x81\xb6\x34\xd1\x2d\x4d\xdb\xb5\xf8\x5b\x2d\xf2\xb9\x38\x3d\x26\x9e\xf6\x5b\xeb\x81\x0f\x87\xfe\x58\x8b\x52\x81\xdd\x50\xe7\x8d\xcd\x3c\xd0\x1e\x74\x45\xfb\x19\x6f\xcc\x30\x93\x49\xe2\x7e\x4c\x26\x89\x16\xae\xeb\x83\xd5\x0d\x96\x6e\x62\x5a\x78\xd5\xc9\x20\x97\xe6\x89\xf8\x0d\x6c\x1d\xb3\xb3\xae\x52\xa3\x52\x2e\x9e\xda\x3b\xf4\x76\xab\xdd\xa0\xb5\x49\xb8\xf8\x4a\x18\x14\xec\xc9\xfd\x01\x34\x23\x87\xac\x19\x79\xcf\x2c\x78\xd3\x9b\x62\x44\xcd\x65\x9c\x25\xb4\x49\x86\x82\x7d\xb9\x3a\x6b\x5c\xdb\x62\xca\xa3\xd0\x3c\xa4\x18\x5b\x9d\xb8\x53\x96\x2c\x20\xc3\xc3\x10\x2f\xe0\x90\xa5\xf7\x5d\x76\x73\xb7\xc3\x64\x9e\xa5\x39\x76\x88\x35\x02\x08\x55\xc8\x66\x78\x75\x53\xdc\x1e\x1e\x1f\x9f\xcc\xd8\x1d\x9f\x3f\x88\x3c\x39\x64\x4f\xcb\x74\xbe\x6c\x23\x1e\x54\x5d\x14\x12\x0e\xad\xc2\xa1\x97\xfb\x94\x30\xb4\x0b\xa9\x58\xc8\xd7\xee\xc4\x08\x19\x54\x37\x9a\xf5\x20\xc7\xeb\x2a\x78\x49\x51\xd0\xa0\x49\xd5\xa3\x41\x61\xac\xf6\x21\xbd\x7a\x64\x41\xb0\x36\x92\x76\xf0\xda\x62\x5c\x37\x09\x4d\x2c\x41\x00\xa0\x71\xff\x95\xb8\x12\x18\x35\x0a\xed\xdd\x51\x07\x06\x0e\xe7\x19\x26\xe6\x91\x67\xf5\x60\x39\x86\x09\x15\xd4\xcb\xd6\x1d\xe8\xc7\x36\x2d\x0e\x9b\x66\x02\x6e\x72\x29\xb8\x86\x86\x86\x79\x7e\x9e\x5e\xc2\xaa\x77\xd2\x54\x59\xf5\x5e\x99\xb3\x3a\x4f\x44\xd9\x5d\x25\xdb\xab\x60\xdc\x04\xdd\xb3\x14\xb4\x2b\x4b\xa9\xaa\xc0\xf8\x36\x24\x28\x88\xb1\x40\x3c\x26\x46\x20\xc6\x37\x8e\x17\x15\x0b\x21\x4b\xe6\x62\x3e\xe6\xab\x04\xe4\x19\x56\x1a\x74\x07\x40\x54\x41\x6d\x81\x0d\x58\x61\xbd\xe4\x24\x78\x5b\xcc\x2a\x02\x7a\x83\x98\x04\x86\x4a\x15\x1b\x76\x4c\xc4\xc3\x0c\xb2\x92\x42\x65\xb9\xe0\x79\xfa\xf7\xe8\xb1\xda\xa6\x27\xe1\x37\x8a\x53\x45\x08\xf0\x71\x44\x89\x08\xb8\x27\xa3\xe4\x51\xe0\x45\xc6\xa9\x65\x63\x8b\x94\x06\x05\x63\x3c\x66\x2c\x5a\x42\x14\x50\x66\xc9\x90\xf9\xee\x25\x27\xc1\xa3\xe7\xbb\x87\x98\x04\x1e\x32\xf5\xfc\xf4\x24\xfc\xb0\xa9\x87\x71\x44\x89\x88\x98\x7a\x5e\xf2\x28\xf0\xc0\xd4\xdb\x22\x8d\x03\xb5\x49\x33\x62\x81\x1d\x39\x0d\x1e\x33\xaf\x37\x08\x71\xc0\x32\x81\xd4\x69\xd6\xd8\xae\xba\xf6\xab\x39\xdd\x80\x4b\x0a\x91\xb0\xa4\x2e\xfb\x45\x06\x79\x5d\xc9\x49\x22\x2a\x41\x65\xcc\xd9\xaf\x0c\xa2\x1b\xed\xa4\x25\x35\xe9\x90\x45\x81\xd9\xe0\xae\xd0\x68\x23\x1c\x71\x22\xc0\x57\x3f\x16\xdd\x10\xc7\x01\x13\x0e\xfd\x7e\x5a\x14\xb6\xe0\x4a\x3d\xc9\x12\x73\x3b\xe9\x91\x10\x20\xad\xf5\xd1\x3e\x62\x6d\x0b\x92\xb0\x28\x13\x2e\xc8\xd8\x32\x81\x87\xd6\xa5\x0a\x41\x95\xa2\x90\x91\x78\x2d\x29\x0e\x2a\x95\x71\x0c\x06\x77\x42\x25\x2a\xc5\x8a\x32\x95\x65\x5a\x51\x26\x1c\xc5\x85\x8a\x0a\xcd\xad\xc0\x74\xb2\xe9\xa8\xa0\x6e\x84\x58\xf1\xbc\x4a\xc1\x2e\x64\x69\x0e\x0e\xe7\x1f\x18\x1c\x86\x82\xd3\x1c\x24\x76\xe2\x2c\x29\x65\x91\x89\x6a\xca\x9c\xeb\xa9\xfd\x81\xc9\xd2\x7a\xc4\x37\xfe\xa3\xae\xa5\x92\xfa\x5b\x39\xfc\x44\xac\xec\xa5\xbc\x76\x99\x24\xd2\x04\x4e\x0b\xa0\x18\x18\xdc\x24\x35\x37\xdd\x66\xdb\x89\x56\xfe\xda\x09\x32\xac\xe4\x56\xba\xe9\x34\x67\xb5\x12\x53\xeb\x85\x77\x64\xfd\x19\x3a\xbb\x12\x73\x8c\x39\xc9\xd9\x2f\x17\xd7\x37\xe0\xd8\x21\x4b\xb8\xaf\x99\x4c\x4a\x9e\x27\x72\x35\x31\xe0\x95\x64\x0b\x91\x8b\xb2\x3d\x1b\x2d\x9b\x9c\xee\xe0\x15\x55\xd4\x6a\x69\xfd\xa1\x62\xfa\xfe\x07\xd1\x14\x1d\xd2\xa8\x20\x50\x0f\x61\x24\x60\xe8\x3d\xf7\x51\x13\xd0\x91\xa7\xab\xb1\x47\xaa\xc3\xec\xad\x41\xb6\xd6\x80\xdd\x50\xfc\xee\x67\x2b\x18\x2f\x52\xe3\x3e\x7d\x3c\x3c\x38\x39\x0e\x95\xd1\x32\x05\x05\x3d\x08\x6a\x8d\xee\x52\x05\xa1\x22\xec\xd9\x78\x5b\x76\x93\x32\x76\x9c\xfb\xf4\x41\x78\x88\x3c\x85\x0f\x90\x6f\x13\x6c\xfc\x8c\x6a\x15\x23\x38\x16\x09\x57\x89\x88\x1b\xba\xa1\x4b\xc3\x34\xcd\xc1\x51\x8a\x30\xa1\x3b\x01\x97\x41\xa4\xc0\xe7\xb6\x4d\x96\x19\x44\xa2\xed\x35\x13\xe8\x10\xea\x5c\x15\xde\x41\x36\xf9\x5c\xba\xf7\x4a\x6c\x2e\xeb\xcc\x7c\x13\xef\xb4\x8d\xc0\xe7\x4b\xc2\x0f\x6d\x20\x0a\xa1\x8a\x7a\x38\x50\xac\xce\xd3\xbf\xd5\x7a\xc2\x98\x1b\x3a\x36\xd4\x47\x54\x23\xc9\x07\x41\x6d\x13\x4c\x3b\xcd\xce\x32\x7e\x27\xb0\x0c\x3c\x9b\x54\x01\xa8\x88\x6d\xe2\x06\x21\x0a\x48\x04\x25\x36\xcd\x24\x73\x60\xce\x34\x24\x18\x48\x29\x6c\x96\xd3\xe6\x72\x67\xc3\x5d\x3b\x55\x94\xb5\x37\x04\x21\xa0\x42\x25\x25\x5b\x69\x6b\x4d\x16\xc6\xa9\xb1\x92\xae\x7c\xda\x21\x2b\x32\xc1\x95\x0d\x2c\x4e\xcd\xed\x93\xee\x56\x58\xad\x71\xa8\x84\xaa\xba\x37\xb9\xcd\x12\x6a\x43\x9a\xc1\x2d\xd3\x5a\xde\x32\x07\xf7\x9c\x2b\x51\x48\xb0\xcb\x0e\xd0\x6a\xd5\xa3\xe1\xf6\xaa\x5c\xb7\x62\xf4\xf3\xf3\xf4\x26\x2d\x70\x7f\x8e\x7d\x8a\xc0\x3a\xa1\xcc\x63\x9b\xcb\xd5\x0a\xaa\x8a\xd4\x4a\x24\xee\xca\x4c\x4d\x9b\x6c\xef\x90\xb3\x7a\xc2\x0f\x4c\xf9\x17\xc1\x78\x96\x1d\x1a\xab\x36\x69\x73\xc5\x51\x5b\x87\x3d\xcb\x41\xba\xd3\xde\x7c\xa2\x9a\x74\x48\x82\x20\x7a\xf0\xd3\x9c\x9d\xfc\xdb\xe5\xc9\xd5\xe9\xe7\x93\xf3\x9b\xd9\x19\x73\x35\x8c\x13\x13\x35\x61\x8c\x7d\xad\xa1\xac\x2b\xbd\x58\xa7\x03\x23\xa8\x7b\xf2\x4a\x57\x33\xfa\xe8\x23\x7c\x0b\x1e\x45\xa9\x6c\x84\xec\xe7\x34\x4f\x57\xf5\xea\x57\xf3\xcb\xcb\xcb\x94\xfd\x45\xd6\xa5\xf3\x2e\x4d\xbb\x4e\x14\x2d\xcd\x1e\x34\xd1\x2f\xa9\xde\xed\xd9\xc2\xd1\x3d\xb1\x22\x69\xbf\x56\xa5\x2d\x44\x9f\x56\x2e\x23\xac\xad\x41\x8f\x4f\x8a\x57\x12\x87\x77\xce\x5e\xac\xea\xdd\xfa\x92\x97\x90\x44\xba\x94\x0a\xca\xf8\x33\x59\x2e\xd4\xf4\x6b\x7e\x2c\x32\x61\x6a\x1d\x57\xc6\xc6\x2a\xc5\x4a\x3e\x0a\x53\x1c\xbb\x2d\xb0\x07\xfb\x32\x75\x08\xf3\x00\xc8\x20\x64\x40\xaf\x7b\xbc\x28\x9c\x7f\x4d\x2b\xb1\xce\xe1\xfb\x0d\x2e\x50\x5f\xf3\x99\xf1\x77\x64\xce\xf1\x91\x3d\xf1\xdc\x46\x1d\x65\xc2\x3a\x01\xf9\xb3\x05\xfd\x0b\xbe\xb8\xfd\x83\x74\x0f\x7f\x78\xa9\xf1\x2b\xbc\xe3\xf3\x87\x27\x5e\x26\x30\x77\x0a\x5e\xa5\x77\x69\x86\x1f\x0c\x11\x78\xce\xa4\x4e\xa4\x50\xf9\x41\xeb\x3f\xe1\x62\x7f\xf5\xc7\xf4\x41\xac\x89\x45\x6d\x10\x08\xa1\x08\x18\xac\xee\x30\x61\xc9\x61\xc1\x37\x67\x41\x8d\x27\x22\x18\xc6\xb4\x26\xf1\x28\xb8\x2a\xf0\xac\x4d\x24\x98\xab\xc7\x6c\xa2\xe2\x2a\x5e\x56\x53\x86\x3e\x59\x93\xb0\xa3\xeb\x01\xf6\x2f\x94\xae\xfb\x14\xe3\xef\x8c\x09\x61\x35\x8e\xa8\x6a\x9d\xcf\x4d\x6c\x82\xfd\x68\xa2\xd1\x42\x01\x2e\x44\x54\x61\xbd\x84\x79\x92\x4c\xcc\x21\xe7\x44\xaf\x4e\xb6\x9c\xc3\x22\x55\x95\xbd\x9e\xa7\x9c\xbb\x06\xa2\xf8\x55\x91\x15\xcf\xd8\x67\xb1\x92\x25\xba\x09\xef\x92\x10\x20\x7c\x25\xeb\x1c\x2a\x0f\xac\x80\x96\xfd\x20\xa6\x8b\x29\x7b\xff\xee\xa7\x3f\x7d\x3e\x64\xef\x3f\x1d\xb2\xf7\xef\x3e\x61\x61\xe5\x83\x20\x86\x28\xe1\x6a\x51\xcc\x79\x6e\xce\x53\xf7\xa0\x55\x24\x26\xa1\x66\x5e\xaf\xee\x44\xb9\x59\x05\xbf\x31\xca\xa7\x6c\xf2\x5e\x3f\xb4\x52\x28\x48\x99\xc7\xf5\x7a\x99\xa5\xab\x14\xaa\x18\x80\x3a\xe8\x8b\xbd\x37\xfc\xd7\x55\x9f\xfd\x70\x6c\xe2\x65\x3f\xb4\x6d\xf4\x63\x78\x35\xa1\x51\x1d\x2d\xa9\x2a\x80\x08\x71\x14\xf0\xe6\x31\x4d\xac\x8c\x6d\x3e\xbf\xb8\x52\xcf\xd4\xa8\xa5\xcc\x43\xe9\x85\xfc\x32\x9b\xb5\x46\xd5\x2a\x55\x4a\x1b\x07\xf7\xa5\x5c\xd9\x7a\x83\xd4\xfd\x53\x1c\xaf\x5f\xec\xd5\x19\x06\x7a\x75\x86\xb2\xe8\xb5\xd0\x5c\x92\x36\x61\x06\x4d\x1c\x4c\x1b\x9c\xe7\x0a\x26\xaa\xaa\x14\x7c\x85\x16\x32\x18\x8f\x17\x56\xcf\x8d\x79\x07\xd2\x4c\xa3\x06\xec\x5e\x96\xda\x8a\x11\xc9\x94\x5d\xcf\x97\x62\x25\xda\xba\x8f\x1a\xc9\xe5\x59\x80\xd8\xb9\x98\x0e\xec\x59\xa2\xbf\x8b\xd7\xb3\x4f\x27\x58\xd8\xb2\x6d\x44\x18\x4f\xae\xc8\x6a\x75\x1d\x82\x00\x00\x2e\xbe\xa5\x40\x21\xb0\x82\x6e\xa6\xcd\xcf\x96\xbb\x58\x5f\x6e\xea\xb6\xf8\x7c\xd8\xa7\xb0\xd1\x36\x75\x4b\xd0\xed\xfc\x18\xa4\xa0\x4a\x26\xf6\x52\xe6\x02\xb2\x76\x40\x19\x15\xf3\x06\xba\x12\x3a\xf6\xf6\x5a\xa8\x42\xe6\xe8\xb9\xf3\x2e\x88\x21\x15\xeb\x6a\x29\xe0\x5e\xb4\x42\x4f\x8f\x30\xea\x00\xb4\xd9\x4e\x1c\xda\x3b\xb2\x03\x77\x33\x77\x10\x99\x6c\x7f\x04\x50\x50\xa1\x0a\xe2\x25\x04\x3b\x3a\x82\xed\xbb\xdd\x88\x4f\xd9\xa5\x39\xf8\xca\xe4\x82\xa5\x39\x7d\xd5\x38\x1a\x2e\xa0\x9c\xbc\xab\xf4\x8e\xab\x73\xab\xdf\x89\x05\x02\x22\xa8\xd2\xec\xfe\x8a\x98\xc6\xc3\x11\x03\x2a\x16\xbc\x54\x9b\x9d\x75\x51\xab\xcd\x99\x06\x96\x00\x7d\x30\x4c\x40\x99\xd2\x15\xdf\xdf\xcc\xdf\xba\xf5\x85\x60\x9f\xbe\x9c\x1e\x63\x1b\xf3\x1d\x00\x31\x05\x8d\x97\x00\xb7\x39\x2c\xcd\xbb\x49\xde\xf6\xd0\x3c\xa4\x18\x48\xee\xd4\xc9\x98\xb9\x91\xaa\x0d\x80\x76\xcc\x7b\xf8\x2a\xa2\x90\x4e\xdd\x99\x00\xf6\x8d\x2b\xea\xa8\x21\x8c\x60\x1d\x2e\xd4\x5c\xed\x55\xc6\x04\xec\x36\x9b\xef\xb8\x2f\xf7\xc0\x18\x05\xc7\x88\xd9\x7b\x67\x5c\x8e\xf0\x57\xee\x8c\x57\x4c\xa8\x33\x1b\x97\xab\xe6\xa9\xda\x84\x06\x54\xb4\xc6\x20\x88\x91\x4a\xe0\x61\x8e\x71\xbc\x94\xd8\xb9\xa6\xce\x32\xdc\x46\xde\x24\x23\xc0\xbc\xa9\x74\xcc\x5b\x8b\x95\xb5\x79\xad\x28\xc1\xdf\x51\xa1\xc0\x00\xad\xf8\x9a\x65\x02\x5c\xc1\x8a\x42\xb1\x15\x2f\x0a\x53\xe4\x70\xc3\xbb\xe8\xb1\xce\x72\x51\xea\x4f\xc7\x9f\x19\x9c\x47\xa4\xdb\x9b\x44\xb4\xb2\x94\xbb\x07\x55\x5d\x7b\x0a\x0c\x87\x63\xd9\x3b\x4f\x2b\x4a\x39\x17\x22\xc1\xce\xea\xfe\xf0\x6a\x07\x06\x7b\x43\xb9\xde\xa3\x0f\x6b\xf3\xfa\x93\xf3\xf7\xd6\x2f\x30\x7c\x2a\x5c\xfa\x16\x54\xb6\xb9\xd2\x36\xbe\x25\x20\xb2\x6e\x3e\xca\xc1\xc1\xd8\xaf\xb4\xd7\xe8\x5a\xf3\x65\x79\x93\xae\xa1\xd2\xf6\xd4\xb5\xe7\xe7\x69\xd7\xc1\xf9\xe5\xe5\x47\x4d\xaa\x27\x4d\x33\x61\x5e\xa1\x8b\xc3\xa4\x22\x5d\x15\xbf\x15\x62\x0e\xb7\x81\x70\x2b\xbe\xe4\x8a\xc9\x39\x78\xcd\x26\x1f\x60\xff\x6c\xaf\xbf\x51\xad\xa3\x01\x10\x05\xe0\xe5\xcc\xb2\x5e\xcc\x9d\xb8\x4f\x73\x9b\xff\xd5\xde\x69\xf2\x72\x51\xaf\x04\x1a\x8d\x3e\x18\x86\x56\x46\x3f\x05\x0b\xd2\x44\x0e\x9e\x07\x4d\xef\x28\x66\x44\x70\x26\xe7\x0f\x1b\x7e\xe7\x90\xcf\x05\x36\x3c\x26\x21\x0a\x6e\xe0\x45\x31\x23\x82\x57\xbc\x60\x9c\xdd\x1c\x85\x6c\xb3\x4d\x3a\x0a\x2e\xca\xd8\xdb\xa6\x8c\x85\xfc\xf0\x15\xd2\xd0\x31\xc6\x5c\x12\xba\x5a\x13\x59\xbf\xdf\xd9\xe5\xa5\xf9\xf1\xf8\xe2\xf3\xec\xf4\x9c\xfd\x75\x32\x69\x5c\x87\x9d\xcb\xf0\x37\xfd\x2b\x78\xfb\x5f\xce\x6e\x7e\xf9\xf6\xf5\x6b\x6e\x20\xb7\xba\x39\x4c\xd4\x64\x02\xf7\x95\x97\x17\x57\x37\x06\xf2\xe4\xdf\x66\x9f\x2f\xcf\x4e\xae\x2d\x8c\x0f\x63\xb5\x9e\x40\x65\x8a\xdf\xf8\xaa\xc8\xc4\x74\x2e\x57\x8c\xfc\xdf\x7f\xed\x92\x0e\x82\xed\x8c\xc3\x6a\x0d\xc9\xdc\x7b\xb0\xe6\xb7\xe9\xfe\xd0\xed\x08\xdf\x4b\xe9\x45\xff\xf1\x5e\xca\x81\x12\x60\x74\xff\xc7\xbb\x77\xef\x02\xc3\xf2\x41\xd3\xc4\x4f\xbc\xef\xf3\xe9\xfb\x7c\x8a\x98\x4f\xc8\xf2\xa4\x3c\x75\xfd\xa8\xaf\x04\x46\x8f\xc1\x8f\xad\xe0\x15\xc5\x4a\x08\x25\xca\x6c\x81\xf5\xb1\x43\x15\xaf\x3d\x0a\xc0\x3a\x60\x5c\x47\x44\xd2\x56\xad\xb8\x4f\xf3\x85\x28\x8b\x32\xcd\xc1\x29\x61\xc5\x71\x5b\x22\x8e\xdb\x2f\xda\xe4\x2e\xe3\xc1\xec\x1d\x1e\x42\x1a\x30\x2a\x12\x05\xa3\x0e\x41\x9b\x7d\x92\xde\x2a\x92\x0e\xcb\x14\x47\x9c\x08\x32\x36\x05\xa3\x8e\x83\x0e\x84\x92\xe0\xf4\x24\x7c\xde\xc9\x5e\x2a\x94\xac\xcb\x80\xff\x7d\x98\x2f\x56\x5c\xd8\xd7\x3f\xc0\x44\x09\xf2\x26\xe4\x8d\x1c\xc2\x00\x2f\x21\xd6\xe4\x63\xb7\xff\xc6\xf7\x14\x5e\x5a\x1c\x16\x56\x53\x2a\xa8\x7a\x93\x2a\x00\xf5\x26\x15\x8a\x5e\x4d\x1c\xdd\xb9\x76\x87\xf0\xfc\x3c\x6d\xf2\x2f\x06\xf7\x36\xb1\xec\xb4\xf0\x5e\x49\x2d\x70\x5c\xb7\xe5\x60\x7f\x81\x86\x23\xfd\xfb\xcd\xba\xd8\x63\x55\xd8\x98\x27\x11\x50\xda\x7b\x81\x32\xe2\x39\x47\xe3\xd0\xea\x44\x1c\x0e\xc4\x1e\x38\xec\x02\x19\x52\x72\xf3\xf3\x30\xf0\x58\x6f\x38\x50\x9c\x42\x36\x36\xb1\x29\xe4\x34\xe6\x41\x0e\xc2\x8a\x53\xcb\x73\x40\xb9\x85\x19\xfd\x8e\x8e\x03\x0d\x28\xea\xb9\x4b\x1c\x39\x7a\xf1\x48\xb4\x4a\x7a\x32\xb2\xad\xaf\xd0\xdb\x5d\x8b\xbc\xb9\x1e\xf4\x70\xf4\xd6\xc9\xed\x6a\xf0\xe8\x42\x1b\xea\xde\x68\x5c\x44\xdd\x4c\xf2\xe6\x32\xe9\x3e\x85\x0a\xb6\xa5\x5c\xc1\xb7\xfe\x92\x57\x4b\x62\xb5\x0a\x73\x06\x44\x8e\xfd\xf6\xc5\xf2\x07\xc4\x77\x47\x32\x46\xdc\x26\x7d\x18\xfe\xdf\xd3\xe2\x63\x9a\x89\x9f\xd7\x95\x50\x2f\x2f\x87\xfa\x27\xfd\xf7\x91\xac\xf3\x4a\xef\xaa\xf4\xa0\xc5\x88\x8d\xc2\xf1\xab\xa3\xf8\x02\x2d\x61\x66\x1b\x11\xc6\x5d\x2a\x0e\xc5\x72\x93\xa2\x3b\x59\xcf\x1f\x53\xc8\x8b\x05\x57\xe3\xeb\x4e\x64\x90\x7e\x83\xa1\x96\x24\xe5\xdd\x30\x16\x0e\x55\x8e\x33\x99\x8b\x09\x78\x90\xb9\xc4\x27\x1a\x35\x93\x0b\x34\x8f\x62\x90\x0d\x13\xd6\x59\xca\x2a\xbe\x40\x67\xcb\x36\x21\x0e\x08\x69\x6e\x75\x7f\xcd\x52\x16\xeb\x51\x16\xc3\x8a\x0a\x0d\x16\x86\xd9\x20\x42\x81\x28\x7e\x82\x8d\x88\x6c\xfd\x42\x46\xb5\x7e\x51\xe6\x8a\xb8\x5b\x11\xaf\x59\xe0\xd0\x3c\x87\x21\x2e\x42\x54\x3f\x0b\x09\x5c\x9e\x92\x42\x7c\xf4\x04\xbc\x89\xfb\x36\xe5\x96\x22\xd6\x5a\x92\xc7\x2b\xe6\xd7\x93\xab\xeb\xd3\x0b\xd4\x95\xb5\x69\xf6\x33\xf3\x2c\x4d\xd8\xff\xbc\xbe\x38\x67\xf2\xee\x7f\x8b\x79\x53\x2b\xb2\x63\x47\x4d\x6c\xa5\xc2\xb9\x75\xc4\xae\x4b\xe3\x57\x56\xf0\x92\xaf\x44\x25\x4a\x75\xd8\xbe\x0a\x22\xad\x96\x90\x7f\x6a\x92\xa5\xb9\xd0\xef\x7c\x9a\x43\x91\x8f\x4c\x4c\xd9\x47\x28\x9e\x9d\xa5\xca\xf8\xdb\x34\x87\x4c\x38\xae\x12\x82\x25\x72\x0e\x57\x56\xad\x8f\x1b\x5c\x71\xe1\x25\xb8\xb1\xc1\xfd\x07\xed\xec\xdb\x3c\xd8\x34\xff\xff\xe0\x81\xfe\xbe\x9d\xc4\x1e\x64\x6d\x5c\x61\x21\x2f\xed\x01\x2f\x8a\x89\xdb\xd8\x4c\x20\xe9\xe9\x01\x9b\xf3\xdc\x26\x76\xc8\xc5\x82\x57\xe9\x23\xb6\xf4\x8e\x04\x43\x14\xb3\x29\x78\xcf\xf1\xa5\xbe\x4f\xe3\x87\x31\xa5\x7d\x2e\xe9\x9c\x67\x9b\x54\x18\x94\xc2\x4d\x24\xd7\xea\x67\xd5\x06\x4a\x26\x17\xea\xd0\xc5\x02\x9b\x70\x55\x7b\x57\xa1\x4c\xd2\x6c\x17\x18\x89\x7e\x86\x06\xc3\x78\x95\xf9\xd7\xd9\xd5\xf9\xe9\xf9\x27\x53\x6b\xcc\x7c\xa2\xf5\x84\x06\xc3\xa9\x31\x64\xb8\x62\xbc\xb9\xd5\x37\xb3\xb6\x30\x61\x4f\x8a\x2d\xd3\xc5\x32\x5b\xb3\x24\x55\x73\x59\x97\x7c\x21\x12\x80\xfa\x4b\x0f\x60\xc5\xd7\xfa\x21\x3f\xa6\x2a\x75\x2e\xd8\x7a\x35\x53\x4d\x34\x3a\xe4\x09\x99\xcb\xd2\xbc\x18\x46\xbc\x5a\x8a\x2c\x63\xcb\x54\x55\x78\x54\xe0\xff\x33\xea\x93\x83\x6f\x6a\x19\xda\xa2\xb4\x12\x82\x5f\xeb\x15\x84\x94\x6f\x24\xd1\xb1\xa7\x20\x36\x84\x01\x94\x69\x42\x61\xb6\x4e\x22\x20\xba\x9c\x65\x32\x5f\x88\xb2\x53\xfc\x4d\x2f\x38\xc6\xae\x33\x30\x30\x60\xe6\x9a\x8a\xfd\xf4\xee\x9d\x6e\xff\xd3\xfb\x77\x87\x2e\x75\xd7\x36\x6e\x53\xa8\xc3\x44\x1f\x24\x87\xe0\x60\x67\xca\xa1\x17\x4b\x9e\xdb\xa1\x80\x04\x04\x47\x99\xac\x13\xf6\x51\xd6\x79\x52\xae\x0f\x14\x4b\x78\xc5\xef\xb8\x12\x53\x36\xcb\x32\xf6\x90\xcb\xa7\x4c\x24\x0b\x34\xf7\x6e\x13\x02\x64\x82\xbd\x13\x73\x57\xd5\x03\xed\x56\xf6\x6d\x86\xc9\xf8\xf6\x28\xfb\x3e\x34\x99\x9b\xd0\x88\xe8\xef\x0f\xe2\xcd\x1f\xc4\xdb\xbd\x10\x4d\x22\x2c\xff\x73\x30\x03\xcc\xb3\x6c\x3b\x96\xd1\x84\xd5\xbe\xf2\x10\x8f\x1b\xd9\x56\xc7\xee\xd0\xba\xf1\x9e\xb2\x73\xc9\x78\x55\x89\x55\x51\x35\x02\x56\x3c\x11\xae\x70\x1a\x9f\xfb\xc6\xf1\xcf\x6d\xb1\x9a\x6e\x8a\x0b\x97\x23\x24\x11\xaa\x2a\xe5\xda\x55\x44\xde\x78\x06\x9d\xd0\x78\x3b\x36\x5b\xba\x4e\xd9\xec\xbe\x12\xa5\x5f\xca\x5a\xd6\xb0\x96\x3a\x5f\xd9\xb2\xce\x9d\xd1\x6b\x06\xdf\x15\xba\x9c\xf0\xba\x5a\x4e\xcc\xf9\xb4\xdc\x6a\xb4\xda\x40\x3f\x57\x45\x93\xb6\x61\x9e\x09\x9e\xd7\x68\x76\xa2\xef\x13\xef\xfb\xc4\x7b\xe5\x89\x37\x68\xc1\x83\xf4\x3d\x95\x28\x73\x0e\xd5\x9d\x7b\x4f\xe5\xcf\x1b\x03\xd0\x29\x02\x7a\x27\xdc\x20\x8b\xc4\xd6\xb8\x34\xb7\xe1\xd6\x33\x77\xeb\x19\x76\x39\x79\x56\x89\x52\x24\x53\x06\x39\x69\xcb\x74\xc5\x4b\xc8\x76\xc4\xe6\x5c\x75\x66\x77\x4f\x49\x88\x0e\x2b\x32\x48\xe0\xb1\xf5\x5c\x20\xbc\x37\xd5\x63\xb1\x82\x58\x78\x3d\x1c\x8f\xef\x99\x3d\xaa\x67\x3f\x1b\xb2\xd9\xe5\xa9\xfb\xea\x91\x8c\x3f\x01\xe5\xdd\x5a\xcf\x57\x6e\xea\x1f\x6f\xf7\x07\xe6\xf0\xe3\x7b\xb8\x79\x06\xed\x1e\x7f\x32\xff\x9e\x32\xf6\xaf\xc6\x48\x5b\xad\x04\x58\x6d\x0f\x6e\x3a\x59\xf2\xc6\x73\x07\xea\xc2\xd5\x95\x4d\x03\xfb\x94\x3b\xa2\xf6\x01\x17\xa5\x78\x14\x79\xc5\x78\x92\x40\xe2\x5e\x9e\x6d\xaa\x70\x27\x34\xb7\x29\xd7\x9b\x4c\xd9\x85\xfe\x84\x52\x6f\xf9\x2a\x5d\x94\x1c\x5e\x73\x2b\xac\xad\xda\x9b\x27\xb6\x37\x73\x9e\xd3\xaf\xeb\xd0\xc5\xed\xfb\x24\xfb\x3e\xc9\x46\x4c\x32\xff\x42\xc6\x4b\xbd\xb2\x7e\x60\xa7\xae\x0a\xeb\xb2\xaa\x8a\x7e\x5a\x48\x93\xee\x5d\x24\x1f\x58\x87\x44\xf5\x68\x94\xad\x4a\x6c\x47\x10\x0d\xef\x7a\x5b\x25\xd0\x3d\xf8\x2b\x0a\xa4\x3b\x68\x02\xf1\x21\x6b\x45\xb7\x92\xd0\x81\x12\xd5\x2d\x14\xc2\xbe\xbd\x5b\xdf\x3a\x0f\x02\xec\xda\x71\x2c\x1a\xad\x9a\x89\x4c\xa8\x78\x0a\xbe\xf9\x99\x44\xef\x35\x28\x0e\xbf\x88\x34\x4f\xe4\x93\x62\xf6\xe2\x89\x9d\xe1\x95\xdf\xbc\xa4\x24\xe8\xa5\x7c\x12\xe5\xb5\xde\xb3\x07\x20\x3b\x84\x7e\xc0\x32\xad\x04\x9b\xd7\x65\xc6\xee\x64\x02\x25\xb9\x3f\x9e\x9e\x9d\xc0\x1b\x29\x78\x02\xe7\x7a\x55\x22\x6b\xcc\x23\x32\x9e\x9f\x10\x6f\x03\x72\x4c\xc9\x2a\xe5\xd2\xec\x9b\x53\x44\x52\x2e\xc9\xe8\x15\xf8\xef\x69\xc1\x78\x39\x5f\xa6\x8f\xa2\xbd\x32\xb2\x67\xa3\x11\xae\x99\xd1\xec\x5e\xe1\x7f\x9d\x4c\x78\x96\xc9\xa7\x49\xc1\xd3\xa6\x12\xfe\xc4\x2c\x65\xff\x87\x4d\x26\x49\xaa\xb0\xf6\x6f\x58\xe0\xfb\x6e\x98\x43\xd5\x1c\xa3\x06\x21\x26\x97\x8d\x2b\x37\xf8\xc9\xe7\x72\xe2\x6e\xaa\xdc\xdf\x70\xa9\xe4\xfe\x80\xc4\x65\xf0\x47\x37\x9f\xfb\x37\x74\xc5\xdb\xab\x08\x7f\x27\x3e\x7f\x39\xbb\x39\xbd\x9c\x5d\xdd\xfc\xf8\xf1\xe2\xea\xf3\xe4\x78\x76\x33\x63\x47\x17\xe7\x37\x27\xe7\x37\xec\x97\xd3\xe3\xe3\x93\xf3\x6f\x98\x72\x31\xac\x7e\xa1\x97\x57\xa7\xbf\xce\x6e\x4e\x18\xb0\x04\xa4\x78\x69\xfd\xb0\x8b\x4c\xde\xf1\xcc\xa5\x94\xfd\xd6\xec\x39\xfe\xea\x62\xa3\xd4\x74\x3a\xfd\xc6\xfe\xea\x7e\x77\x84\x98\xe8\xd1\x78\x7e\xf5\x96\x69\x92\x88\x1c\x93\xe6\x67\x32\x1f\x0b\x84\xc5\x36\x22\x8c\x95\xc4\x9c\x91\x4d\x9b\x9f\x0d\x5d\x91\x39\xb6\x04\xc3\x7b\x83\xda\x0e\xae\x15\x61\xed\x56\xa8\x43\x11\x7a\x44\x7e\x20\x34\xf8\x1d\x0d\x6d\xe7\x45\xc1\xe6\x25\x57\x4b\x5c\xf5\x0e\x05\x0a\xd1\x9c\xd9\x41\x6a\x31\x02\x69\x83\x30\x08\x88\x0e\x47\x8f\x06\x83\x21\xb8\x31\xa6\xba\x6a\xd2\x43\xb1\x7b\x9e\xe2\xd1\xfe\x3e\x4a\x2f\x64\x5b\x7c\x1e\x41\xea\x10\xf8\x01\xc0\x3e\xff\xd0\x3a\x22\x62\x38\x5b\x74\x7e\x38\xf7\x79\xc3\xae\xd4\x3b\x04\x7e\x80\x75\x25\x14\xec\x20\x32\xc9\x71\x7b\x79\x8b\xcc\x0b\x36\xbf\x67\x93\xc9\x23\x79\xb3\xd5\x23\x41\x41\x1e\x09\xee\x47\x94\xcd\x6d\x47\x70\xe6\x86\x02\x83\xb0\xbe\x3e\x13\x02\xa3\x25\xf1\x83\x14\x35\xc6\x5b\xd4\x08\x0b\xf9\xce\x92\xef\x2b\x34\xe2\x95\x22\x9a\x66\x2f\x73\x27\xb1\x34\xc2\xdf\xa5\x40\x20\xb4\xd9\x8d\x8d\x96\x6b\xf5\xb3\x5a\x33\x08\xed\x78\x87\x00\x03\xc0\x8c\x42\x68\x42\x99\xb0\x77\xc5\xb4\xf9\xd9\xb4\x65\x09\xcb\x35\xc6\xdb\x12\xe0\x00\x8d\x33\x14\x05\xd2\x12\x45\x00\x61\x47\x36\x51\xbe\x57\x64\x71\x5f\xaa\xb0\x2f\x12\x08\x96\x2a\xc6\x5d\x02\x66\x43\x72\x08\x3a\xf0\x9c\xc9\xa7\xbc\xf9\x11\xd7\x79\x27\xd4\xaf\xb9\x29\x43\xf4\x35\xff\xa2\x04\xfb\x8f\xf9\x7d\x73\xc0\x0a\xbc\x13\x43\xf6\x1f\x9d\x74\xcc\x3d\x50\xec\x4a\x89\xd0\xaa\xaf\x80\xd5\xaa\x8f\x3a\xa2\xaf\x31\xa8\x68\x5f\xb7\x3b\xd9\x05\xa3\xfb\xa8\xd0\xf7\xc2\x35\x23\xcc\x4f\xf8\x1c\x7a\x42\x66\x90\xe0\xf3\xa5\xf5\x4e\x4b\x73\x76\x60\x12\x36\x1e\xf4\xea\x85\x99\x1f\x0f\x58\x51\xca\x42\x94\x68\x9e\xeb\x31\x48\x7e\x95\x4c\x16\x75\x4c\x8c\x6d\x45\x58\x1f\xd9\x23\x2f\xc1\x93\xf4\xd2\x0a\x71\x1e\xa5\x6a\xd9\x2d\x66\x92\xd7\xa8\x35\x3a\x10\xc4\xaf\xc8\x23\x9e\x75\xc1\xb4\x79\xd9\x8c\xc5\xc3\xaa\xba\x34\x45\xd7\xef\xef\xf5\x0e\x5a\xc9\x4c\x30\x31\x5f\x4a\x38\x56\x6d\x9c\x19\x44\x5e\x95\xeb\x4e\xb2\x88\xe3\xf6\x1b\x81\x5a\x33\x7b\x14\xe0\xef\x40\x9a\x51\xa5\x9d\x9a\x66\x3f\x73\x29\xe0\x3c\x55\xef\x93\x31\x80\x2e\x89\x17\x64\xdb\xd9\x3e\x55\xd8\xce\xdc\x4f\x1b\x0f\xeb\xb6\x0f\x4a\x60\xcf\x3a\xc8\x16\x2f\x0c\x0a\xec\x9b\x5a\x7c\x43\x84\x75\xd9\xfc\xc2\x24\xfa\x19\x84\x26\x2f\x53\xb3\xe3\x58\x51\xa9\xbe\x37\xa9\x62\xa0\xc8\xcd\x8e\x9f\x96\x84\x05\xcb\xdd\xe5\x2d\x3a\xcd\x13\xf1\xdb\xcb\xcb\x21\x2b\x05\x57\x32\x37\x85\x4a\x7e\x4b\xab\xde\xcc\x3e\xd4\xdf\xea\xea\x56\x55\xbc\xaa\x55\x43\x72\x0d\x7f\xa2\x2f\xd6\xab\x89\x23\x3b\x87\xd9\x7b\x81\x4d\x5c\xd3\x8c\x7d\x68\x3a\x04\x08\x40\x25\x16\x68\x40\x32\xc6\x03\x05\x29\x59\x9a\x2f\x45\x99\x56\xa6\x6c\x68\x9a\x37\xfe\xd7\xa8\x2a\x01\x36\x52\xd8\x63\xe3\xbb\xe8\x56\xf5\xa3\x8f\xb7\xd7\x37\xb3\x4f\xa7\xe7\x9f\x6e\x6f\x4e\x3f\x9f\x5c\x7c\xb9\x71\x0b\x1c\xf1\x6c\x47\x81\x8d\x52\xec\xea\xe6\xcb\xe5\xde\x14\x43\xc0\xbc\x8a\x51\xc5\xb2\x88\x12\x59\x19\x57\x55\x7b\xc9\x87\xf2\xf7\x88\x70\xa0\xba\x30\xbb\x5a\x6c\x5e\x6e\x10\xf9\x81\x4c\x1e\x76\x0c\xc1\xb6\xfa\x59\xe5\xfc\x01\xe7\x34\x8d\x5e\x46\x72\x15\xa4\x16\x3f\xd3\x86\x75\xd7\xb5\x7a\x59\x89\xcf\x2c\xfe\x89\xd5\x2d\x98\x34\xd3\xe6\x67\x93\x39\xbb\xe3\x2a\x9d\x87\xb6\xf6\x1e\x42\x0c\x10\x55\x5e\x62\x37\x3c\xfa\x53\x66\x26\xbc\xf3\x8c\xb6\x27\x45\x36\xe5\x04\x0a\x18\x60\xf3\x0a\xc3\x53\x84\xa0\x19\x40\x64\x89\x5e\x91\x41\x93\x9f\x49\x6f\x0b\x30\x2e\x68\xf3\xb2\x69\x03\xc8\xdc\xf4\x22\xbc\x1d\x02\x1c\xa0\xb9\x37\x7e\x7e\x9e\x9e\xcb\xfc\x67\xfd\xe4\xec\x85\xbb\x9a\x99\x2d\x3f\xba\xf8\x0c\x00\x40\x14\xa8\x96\x28\x74\xb5\x44\x98\xf0\x74\x05\x78\x8e\x02\x72\x98\x88\x11\x92\x25\x36\xa5\xa0\x09\x61\x32\x25\xa0\x51\x46\xdb\xec\x67\xa6\xab\x0c\xd2\xb5\x05\x21\x38\x18\x7b\xb7\x6d\xa3\x97\xb1\x14\x85\xb4\xf5\x5e\xb0\x51\xea\x91\x20\x20\xee\x95\xd2\x86\x0c\xf6\x6e\x6f\x52\xc5\x40\x61\x5d\xda\x22\x43\xc1\x52\x28\x44\x55\x55\x65\x7a\x07\xd9\xd5\x93\x54\x3d\xdc\xc2\x88\x1c\xb8\x9a\x11\x84\x8c\x18\xee\x68\xd1\x8d\x61\x35\x46\xb2\x87\x39\x5a\xb0\xf9\x94\x8c\x91\xba\xc9\x19\x2d\x12\x02\xd2\xc6\x48\xdc\x60\x44\x04\xea\xa5\xc7\xd5\x09\x63\x10\x36\x81\x8a\xf0\x90\xfa\x41\xc3\x58\x51\x10\x24\x37\xc6\x58\xe7\x93\x8a\xa3\x07\xa9\x28\x53\x4e\x8c\xad\x6d\xf5\xb2\x46\x25\x46\x8a\xc9\x87\x64\x3f\x01\x28\x82\x69\xa5\x58\xc3\x19\x94\x62\x13\x27\x45\x66\xe4\x89\x4b\xbe\x13\x5b\x49\x27\xb2\x72\x4e\xb8\x3c\x75\xb0\x34\x75\xb7\x30\x73\x00\x03\xff\x1a\xf6\xdd\x5c\x69\x98\x09\x95\x4a\xca\xd2\xdc\x1a\x9a\xdb\x45\x9d\x26\xec\xf4\x1c\x3b\x9c\xc0\xa8\x49\xe8\x48\xcc\x28\xb0\xc0\xe3\xc3\x9e\x1a\x1c\xf7\x62\xac\xa6\xd1\xcf\x98\x12\xf3\x2f\xc5\x27\x1d\x11\x23\x4f\x04\xbc\x77\xf2\x83\xa0\x9b\xfa\x3e\x0d\x0e\x43\x03\xa0\xac\x6a\xd9\x94\x1e\xec\x9c\x71\x25\xa9\xa2\x4e\x73\x43\x5c\x63\x44\xb1\x34\xb7\x19\x42\xc6\x09\xed\xf0\x0f\x11\x6f\x0f\xa6\x61\x93\x71\xd0\xcd\x42\x81\x79\xed\x0d\xc7\x19\xa3\x4e\xd3\x99\x83\x7e\xbe\x94\x91\x5a\xe1\x70\x31\xca\x35\x43\x7c\x8f\x3a\x90\x50\x1c\x83\x44\x0c\x9c\x05\x23\x9f\x7e\xe7\x69\xc5\xc9\xe9\x32\x0c\x11\x30\xb0\x3b\xdb\x6c\x31\xc2\xf4\x56\xb9\x3b\xe2\x91\xc2\xb6\xd9\x62\x85\x75\x27\x7b\xbc\xac\x1e\x97\x5f\x54\x45\xb8\x62\xd8\x46\x8c\xb1\xac\xa0\xee\xd4\x20\x43\x0c\xd8\x70\x4b\xac\x69\xc6\x98\xd1\x1d\x13\xb1\x4f\x32\x27\xc6\x04\x5f\x8d\x7d\xd3\x2a\x59\x14\xf8\x92\x6c\x5b\x29\x56\xc6\x21\x0a\xe7\x3d\x2b\x45\x92\x96\x62\x8e\xed\x93\x51\x72\x2f\xb8\x36\x7f\xb1\xfe\x20\x1c\x50\x9d\x8a\x57\x62\xb8\xe9\x4c\x3c\x62\x68\x42\x99\x64\x0d\x6e\xad\xb9\x98\x83\xcf\xbf\xc9\x0d\x03\x07\x21\xa2\x3c\x34\xe1\x61\x8b\xb6\x60\xdf\x12\xbf\x94\x1d\x09\xe6\x57\x0c\xaa\x39\x92\xc7\x90\x3d\x92\x20\x08\x79\x0d\xe3\x21\xf4\x03\xae\x0b\x74\x8c\x75\x93\x97\xa9\xe6\x58\xe2\x4e\x84\x3e\x7f\xc8\xe5\x53\xee\x8a\xc3\xa1\xf7\xd3\xdb\x74\x08\x1c\x7d\x80\xdc\xb6\xfb\xd9\x4b\xec\x10\x5d\xb7\x60\x2c\xd8\xac\x87\x26\x94\x09\x5b\xdf\x4c\x9b\x9f\x8d\xca\x34\x55\x13\x99\xa6\x6a\x85\xee\x15\xa0\x09\x65\x72\x09\xea\x5e\x5e\x58\x94\x4b\x26\x8e\xd4\x24\x4f\x25\xf4\x68\x69\x50\x18\xe2\xdc\xbc\x26\x93\x0c\x3d\x8a\xf2\x4e\x2a\x53\x78\xdf\x55\xc5\xbf\xcf\x38\xb6\xe6\xa3\xe4\x18\x38\xe1\xac\x47\xfa\xe9\xad\xd1\xad\xcd\x1a\xdb\xd5\xd8\x02\x8f\x36\x6a\xe5\xe5\x85\xfd\xd0\x29\xf5\x0f\x77\x90\x6d\xa1\xba\xeb\xaa\x4c\xf3\xc5\xcb\x0b\x56\x4d\x77\x1c\x16\xaa\x56\x51\xb8\xdb\xd3\x33\xfd\x9e\xe9\x69\x13\xeb\x0a\x1b\xcd\x8e\x09\xff\x39\xcd\x79\x69\x7d\x3d\x9a\x67\xf6\xfc\x3c\xdd\xd0\x7e\xd0\xcc\x7d\x7e\x9e\x1e\x7d\x74\x29\x0a\x8b\x14\x57\xbd\x47\x15\x84\xa2\xd2\x98\x6d\xd3\xa1\x70\xb2\xce\xab\x8b\x7b\x77\x62\xff\xf2\xd2\x84\x96\x61\xfe\x52\x01\x26\x54\x90\xf1\x9d\x74\xb9\xf0\x68\x47\x4b\x9c\x1e\x83\x3f\x4e\xd5\x03\xe4\xc9\x7b\x79\x61\xf2\x9e\xd9\x5f\x6c\x96\x4c\x5c\x0a\xcd\x86\x0a\x93\x4f\xb9\x53\x8c\xf0\xb9\xf2\x51\x62\x90\xdb\xee\x35\xc6\xad\x8c\x35\x29\xfa\x3e\xba\xe1\xee\x24\xeb\x73\x39\xf2\x3a\x91\xe7\x10\x46\x6e\x02\x2f\xbb\x59\xf2\x88\xa7\xf9\xfa\xa2\x89\x4e\x6b\x61\x5f\x2b\xf8\xbf\x11\xda\xe4\x87\x34\x91\x74\x2e\xe4\x8e\x3d\x2d\x85\x89\xac\xfc\xaa\x39\x2f\x6b\xb5\x6c\x94\xf9\xfa\x5f\x60\xbf\x03\x45\x3e\x5d\xa0\xe3\x53\x5a\x2d\x53\xc3\x60\x0c\x4e\x6d\xa8\x40\xe8\xbf\x0d\x48\x52\x4d\xd5\x7f\x9b\x64\x7c\x2e\x13\x01\xde\x7c\xae\xdb\x8d\x26\xfd\x5e\x2b\x21\xbc\x79\x9d\x1a\xf7\x6e\xd5\x43\xf1\xa7\x56\x64\x89\x28\xaa\xa5\x2d\x9e\xda\xe4\x59\xa4\x1f\xd2\xf7\xa1\xea\x0d\x55\x68\x52\x99\x31\xaa\x77\xca\x8f\x39\x1a\x0e\x53\xee\xa3\x09\xca\xd4\xab\x4d\x9e\xad\xd9\x93\x2c\x1f\x14\xab\x0b\x88\xd9\xfe\xc8\x3a\x9f\x4d\xbd\x14\x7d\xe6\xbf\xa5\xab\x7a\xd5\x94\x8b\x9d\x9a\x5c\x46\xd6\xeb\x3d\x55\x6c\xa3\x9c\x2c\x31\x7d\x5e\x59\x6e\xb8\xbb\xf6\x96\x47\x79\xc4\x5d\xd9\x0b\xa0\x06\xef\x9f\xf6\xd2\xd1\x3d\x4b\x44\xbb\x98\x99\xe0\xf2\x26\xc9\xab\x89\x7d\x25\x34\x44\x18\x30\x01\xce\x9a\xf9\x0c\x9b\x2d\x67\xd3\x0c\xf1\x99\x1b\x08\x82\x29\xf2\x59\xac\xfa\x9f\xca\xcf\x62\x15\xfc\xc0\x52\x4c\x84\xa0\x8e\x92\x71\x1d\x24\x78\xa2\xc4\x7c\x1e\x23\xe7\xf3\x10\x41\xd7\xe9\xdf\xf5\x28\xfc\x06\x8e\x12\xf5\xca\x3d\x11\xd5\x79\x0e\xc3\x76\x44\x80\xac\xcc\xe0\x7e\xcd\xcf\x25\x64\x29\x81\xdc\x36\x9d\x8c\x28\xd8\x5b\xf0\xcf\xd3\x77\xd3\x77\xff\x34\x2c\xb5\xbf\x16\x28\x13\x91\x99\x4c\xd5\xcc\xfd\xe9\x8c\xd6\x98\xbd\xdd\x20\x08\x4c\x89\x0b\xe7\x47\x66\x51\xc8\x78\x32\x9c\x3e\x16\x3e\xcd\x59\x51\xca\x45\x89\x87\x4a\x06\x98\x62\x05\xa9\x7a\x3e\x17\x02\xdf\xde\x92\x2c\x98\x90\xbe\xff\xba\x71\xc6\xbf\x83\xec\x1b\xb0\x97\x61\xb2\x04\x27\x76\xe3\x41\x88\x0b\x1e\x06\x33\x56\x99\x1d\x95\x18\x24\x3c\x3a\x1a\x20\x8a\x15\x13\x7a\x65\x5d\x0f\x20\xeb\xef\xa5\x2c\x2b\xfd\xbe\x87\xbd\x0c\x62\x38\x51\x91\xe0\x63\xe0\x96\x42\xd2\x1d\x01\xa3\x46\xa1\x8d\x3f\x81\xfb\x74\x99\x15\xfd\x46\x56\x3c\x73\x3f\xb5\xc9\x4a\x68\xcf\x84\x91\x60\x98\x62\x6e\x83\xe2\xfa\x11\xb8\xf1\xa5\x38\x50\x11\xf6\x04\xdf\x29\x17\x38\xf0\xa7\x38\x86\x8a\x60\x3f\xe8\xad\xa4\x89\xe0\x23\x8f\x61\x62\x01\x08\x05\xaa\x8d\xd5\x6b\xda\x6c\x03\x3d\x9b\x40\x7b\x41\x69\x5b\xfa\xc6\xbf\xa9\x56\xd3\x66\xff\x31\xf7\x11\x84\xe9\xf6\x16\xc2\xb1\x8e\x9b\xe2\xc7\xf6\x72\x89\x5b\x67\xd1\xba\xcc\x0e\x59\x91\x09\xae\x84\xcb\xf5\xcb\xb8\xf9\x15\xea\x4a\x43\xf6\x97\x0f\x3f\xfe\xb8\x96\x75\x79\x5b\x8a\x42\x4e\xe7\x72\x85\xf7\x6f\x8f\x32\xd0\x6e\x58\x53\x4b\x9b\x99\xb0\x17\xa9\x44\x62\xac\x0f\x67\x79\x38\xb3\x63\xeb\x15\x23\xf4\xde\x01\x54\x2b\xfa\x9f\xbe\xfd\xdf\x00\x00\x00\xff\xff\x09\x2d\x70\x88\x0d\x2a\x04\x00") + +func cfI18nResourcesEnUsAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesEnUsAllJson, + "cf/i18n/resources/en-us.all.json", + ) +} + +func cfI18nResourcesEnUsAllJson() (*asset, error) { + bytes, err := cfI18nResourcesEnUsAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/en-us.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesEsEsAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xcd\x72\x23\x37\x96\x28\xbc\x9f\xa7\xc0\x57\xbd\x50\xb9\x83\x64\x55\xd9\xee\x89\x09\xdd\xb8\x31\x43\x4b\xac\x2a\xb6\x55\x12\x9b\xa2\xaa\xc7\x63\x39\x64\x30\x13\x24\x61\x65\x02\x69\x00\x29\x99\x56\xeb\xbe\xc1\x5d\x7c\x71\x9f\xc0\xcb\x5e\x78\x31\xd1\xbb\xde\xdc\x88\xab\x17\xfb\x02\x07\x40\xfe\x90\x89\x64\x26\x7f\x54\xee\xf9\xee\x4c\x44\x5b\x95\xcc\x3c\xe7\xe0\xe0\xef\xfc\x9f\x6f\xff\x09\xa1\x87\x7f\x42\x08\xa1\x17\x34\x7c\x71\x8c\x5e\x5c\xb3\x6b\x36\x19\x8e\x8e\xaf\xd9\x8b\x8e\x79\xae\x04\x66\x32\xc2\x8a\x72\xe6\x5e\x38\xb9\x38\xbf\x1c\xfc\xf1\x42\xbf\xf4\x4f\x08\x3d\x76\xaa\x80\x7c\xc3\x53\x81\xfe\x78\x79\x71\x8e\xa4\x12\x94\xcd\x91\x5c\x32\x85\x7f\x42\x54\x22\xca\xee\x70\x44\xc3\x1e\x42\x23\xc1\x13\x22\x0a\x3f\xa9\x05\x95\xc7\x08\x05\x33\x24\x89\xea\x8a\x94\x31\xca\xe6\x5d\xc2\xee\xa8\xe0\x2c\x26\x4c\x75\xef\xb0\xa0\x78\x1a\x91\xee\x5c\xf0\x34\x41\x47\x0f\xd7\x2f\x18\x8e\xc9\xf5\x8b\xe3\xeb\x17\x77\x38\x4a\xc9\xf5\x8b\xce\xfa\xa3\xc7\xa3\x9a\xe1\x9c\x61\x24\xa9\xa6\x80\x4a\x14\x12\x24\x89\xa0\xc4\x90\xce\x38\x22\x12\xdd\x3d\xfd\x12\xd1\x10\xf7\x10\x2a\xbe\x19\x70\x21\x48\xa0\xb0\x7e\x23\xd2\xcf\xe7\x29\x25\x4c\x91\xe3\x83\x50\x7f\x50\x3e\x4b\x85\xe7\xff\xb8\x7c\xde\x2b\xf5\x1e\x3e\xff\x1e\x4d\x16\x44\x02\xcd\x77\x34\x20\x28\x89\x30\x93\x68\x81\xef\x08\xc2\x0c\x61\x29\x79\x40\xb1\x22\x21\x0a\xb8\x54\x3d\x74\x22\x08\x56\x7a\x32\x70\xf6\x05\x65\x52\x61\x16\x10\x74\x4f\xa3\x08\x51\x16\xa4\x02\x66\xc1\x7c\xe1\xe5\xda\xef\xd1\x40\x2a\x2e\x01\x21\x71\x6c\xbb\xa3\x01\xe5\x48\x51\xc2\x08\x43\x29\x03\x10\x04\x61\x20\x22\xe4\x3d\xcd\xbe\x40\x10\x1c\xd0\xa7\xbf\x31\xfd\x49\xca\xb0\xc3\x4f\x71\x09\x46\x88\xc5\xd3\x2f\x28\x4a\xe7\x58\x20\xcd\x61\x45\x0c\xb0\x9e\x8f\x11\xfd\x24\x41\x52\x61\xa1\x48\x58\x73\x44\xe8\xb7\x28\xa3\x9a\x1c\xec\x3f\x24\x2c\x2c\x8d\x73\x81\xd9\x9c\x84\x48\x71\x07\xbc\x83\xa6\xa9\x42\x8c\x2b\x82\xd4\x02\x2b\x44\x15\x5a\x60\x89\x5e\x67\x7c\x94\x3d\x2f\xfe\x3a\x7c\x0f\x0f\xbd\x7e\x92\x9c\xe3\x98\x3c\x3e\xa2\x7b\x2c\x1d\x3e\x94\x4a\x3d\x5f\x76\x46\xe2\x18\xb3\x10\x7d\xff\xf0\xd0\x3b\x31\x7f\x3f\x3e\x7e\x5f\x33\xdc\x33\x8c\xf0\x2a\x6c\x49\xd0\x02\x3b\x26\x70\x14\x70\x66\xd8\xab\xa1\x61\xc5\xd7\x81\x7b\x88\x3e\xe7\x08\x27\x14\x11\x16\x26\x9c\x32\xa5\x57\xbc\x7f\xb5\x9c\x73\x8b\x97\x48\xa5\x97\x7f\x40\x43\x8e\xf4\x21\xf4\xf4\x77\x86\x92\x94\x29\x8e\x66\x94\xe1\x48\xaf\x01\x9c\x50\xef\x2c\x8f\x79\xaa\x19\xcf\xd1\x54\x2f\x9e\x18\x27\x09\x09\xf5\xb1\xc1\xb8\x42\x41\x2a\x04\x61\x2a\x5a\x22\xfb\x5c\x71\xa4\x16\x1a\x5e\x12\xd1\x00\x88\xf1\x13\x78\x86\x91\x48\x15\x46\x3f\xa6\x7a\x11\xa2\x90\x48\xd8\xde\x11\x0e\x28\x67\xb0\x16\xe1\x28\x50\x4f\xbf\xa0\xe2\x0f\x21\x46\x38\x50\x29\x8e\xf4\xe6\x26\xc0\xcc\x48\xf3\x5c\x23\x84\x55\xee\x1d\x89\xbe\xcb\x10\xba\x92\x04\x1d\x05\x33\x14\x63\x71\x4b\x54\x12\xe1\x80\xa0\xae\x44\x97\x83\xf1\xc7\xe1\xc9\xe0\x48\x0f\xe1\x8e\x92\x7b\xa0\x47\xd0\x44\xd3\x2b\x11\x9f\x21\xca\x42\x7a\x47\xc3\x14\x47\x76\xc7\xf3\x19\xc2\x68\x4e\xef\x08\x73\x1b\xdb\x3f\x56\x77\x4b\xa2\x2b\x45\x23\x7d\x04\xd4\x51\x90\x60\x81\xd1\x1d\x11\x8e\x04\x3d\x6c\xb3\xdf\xed\xce\xcf\x49\x31\x8f\x53\x56\xd8\xc5\x44\x11\x11\x53\xa6\x37\x7f\x2d\x23\xfa\x52\xd2\x39\x43\x82\x6b\x20\xf7\x54\x2d\xd0\x91\x5e\x86\x66\x46\xaf\x24\x11\xb0\x70\x55\x97\x8b\x79\x57\xbf\x74\x84\xf4\x3e\xa8\x7e\x47\x26\x38\x20\xe6\xad\xcd\x2c\xe8\x6b\xbc\xc4\x22\xd6\xd3\xb7\x09\xef\xb2\x01\xd6\xba\x91\xc2\x8c\x6b\x08\x6f\x27\x58\xcc\x89\xca\xb6\x1a\x4c\xb6\x82\x67\x88\x91\x7b\x04\x00\x5b\xcc\x61\x35\x4c\x98\xbe\x90\x0a\x3a\xa7\x42\x12\x84\xf5\xf4\x10\x0d\x9a\x72\xc4\x52\x72\xc7\x9b\x11\xeb\x23\x92\x8b\x79\x4b\x12\x6b\x49\xc3\x1a\x20\x66\xf4\x67\x7b\x45\x68\x0a\x71\x2d\x85\xa9\xdd\x40\x11\x9f\x53\x86\xba\x18\xf5\x47\x43\xd4\xed\xca\x5b\x9a\x74\xa5\x8c\xba\x20\x68\x00\x51\x47\x88\x0b\x78\x55\x9f\x5a\x35\x6f\xe9\xa3\x3e\x4d\x12\x41\xa4\x91\x46\x10\x11\x82\x8b\x76\x9b\xa9\x11\x35\x4d\x88\x01\x1e\xc9\x34\x11\x34\xa6\xc2\x9c\xd3\x86\x1c\x1f\x4f\x68\x62\x78\xf2\x3d\x0e\xc3\x6e\x12\xa5\x73\xca\xba\x82\x24\xfc\xfb\xec\xf2\x50\x1c\xe1\x30\x44\xfa\xa1\xf4\x9d\x11\xd5\xe0\x11\x42\x27\x6f\x6f\xce\xfb\x1f\x06\x28\xe0\xc9\xb2\x2b\x79\x2a\x02\x82\x2e\x2f\xae\xc6\x27\x83\x6e\x7f\x34\x42\x93\xfe\xf8\xdd\x60\x02\x7f\x7e\xdb\x95\xee\x9f\x97\xa3\xfe\xc9\x00\x7d\xdb\xe5\xee\xc1\xc5\xf8\xdd\x77\xdf\xa1\x6f\xbb\x5d\xc6\xbb\x82\xc0\x45\xf7\x5d\xcb\x4b\x13\x21\x74\x01\xc7\x21\x8e\xa2\x25\x4a\x04\xbf\xa3\xfa\xea\x40\x11\x95\x4a\x1f\x86\x30\xda\x6e\x48\x22\x1a\x53\x7d\x8b\x2a\x3c\x97\xe6\xc2\x06\x31\x67\x4a\xd0\xbd\xa0\x4a\x11\xe6\x6e\x89\x8f\x27\xfd\xd1\x8d\x3d\xf5\x2e\x51\x41\x64\x43\x4e\x64\x43\x33\x2e\x10\x66\x4b\x34\xe5\x29\x0b\x8b\xd7\x8a\x97\x8f\x40\x25\x5c\x14\xe6\x82\xe8\x68\x4a\x13\x2e\xe0\x10\x85\xf5\xae\xe9\x05\xc9\x27\x78\xfa\x5b\x48\xe7\x5c\x1f\xa1\x40\x33\x0e\xb5\x70\xc5\x85\x1e\x49\x76\x2d\xc1\x11\x3c\xa5\xe2\xe9\x17\x86\x08\x5c\x35\x19\x71\x21\x41\x84\x29\x2e\x18\x5f\x19\x0a\x2c\xa1\x20\xc5\xd1\x8f\x29\x25\xa2\x78\x37\x21\xc2\x22\xfc\x33\x0e\xb1\xe7\x6c\xae\xe6\xb1\xbd\x5e\xba\x32\x21\x01\x9d\xd1\x40\x9f\x9a\x33\x3a\x4f\x05\x8c\x1a\xd0\xc5\xfa\xd8\xd7\x37\x03\xd2\x04\x46\x34\x34\xc2\x34\x9f\xfe\x40\x02\x85\x28\xeb\x46\x94\x91\xde\x35\x2b\x2c\xa8\x34\x09\xb1\x22\x5d\x27\x94\x76\x83\xe6\xa2\xb1\x96\xe0\x7d\xcb\x61\x46\x23\xb8\x95\x15\xa6\x0c\x74\x90\x1d\x89\xef\x21\xc0\x35\x59\x10\x94\x60\xb5\x70\x8b\xa7\xf0\x9d\xc1\x88\x99\x5e\x62\x5a\x02\x9f\x4a\x1e\x69\x99\x85\x0b\xa4\xa5\x06\x45\xef\xf2\x4f\x0d\x7d\x9b\x18\x31\xea\x4f\xde\xdf\x4c\x2e\x6e\xde\x0e\xcf\x06\x76\xac\x83\x9f\x70\x9c\x44\x44\x2f\xf4\x35\x12\x8f\xe1\x8d\x07\xf8\x5f\x84\xd0\xf5\x8b\x20\x4a\xa5\x22\xe2\x86\xf1\x90\xc8\xeb\x17\xc7\xf9\x6f\xe6\x67\x9e\x32\xa5\x1f\xff\xa1\x53\x7a\x1e\x93\x98\x8b\xe5\x4d\x3c\xd5\xbf\xbd\x79\xfd\xf9\x97\xee\xd7\x47\xf8\xe3\x71\xab\x25\x1f\xe9\x45\xad\xc5\xa9\x98\x28\x01\x8b\x3d\x9f\x01\xbb\x26\xf5\xd4\x3c\xfd\x3a\xa3\x81\xd9\x0b\xb9\x30\x61\x54\x0a\x3d\x48\xc5\xcd\x80\x8d\x5e\x06\xbf\x44\x4f\xbf\x32\x82\xf7\xbf\xa6\x6a\x36\x2f\xc2\x22\x58\xd0\x3b\x0e\x9b\x53\xaf\x31\xc2\xe6\x78\xff\xa3\xb3\x4b\xee\x0c\xa3\xbb\xa7\x5f\xe1\xa8\xc0\x41\x40\x24\x47\x38\xca\x28\x08\x49\x09\x6f\x92\x12\xb3\x51\xe1\x88\x59\xfd\xcc\xac\x48\x8c\xb8\x5b\x90\xd8\x88\x05\x16\xd8\x36\xcb\xf1\x07\x12\x27\x11\x90\x51\x31\x80\x67\x5b\x90\x9f\xe0\x10\x3b\xb6\x1c\x70\xec\x9a\x52\x16\x66\xcc\xea\x8f\x46\xe6\xa9\x3d\x8b\x6f\x86\xe7\x97\x93\xfe\xf9\xc9\xe0\xff\xc7\xc7\x5b\x73\x06\xed\x7a\xec\x25\x5a\xf3\x90\x52\x5f\xcf\x7a\xc1\x5c\xbf\x10\x04\x87\x5d\xce\xa2\xe5\xf5\x8b\xdf\xee\x09\xf6\x9c\x0b\xaa\xf5\xd9\x76\x90\xb1\x7f\xda\xf3\x6d\xb7\xf5\xd8\xee\xdc\x6b\xb0\x22\x7f\x03\x47\x58\x20\x48\xf1\xc4\xb7\xac\x40\xa3\xb3\xfe\xf9\x3f\xd0\x41\xb6\xff\x73\x6c\x57\x3e\xfd\x57\x12\xe3\x9e\xf1\x00\x3c\xfc\x72\xfc\x0d\x88\x78\xcf\x7b\x02\x1e\x62\x25\xff\xb6\x25\xc0\x91\xde\xc9\x72\xc1\xd3\x28\x84\x0d\x8f\x7e\xa6\x09\x6c\xea\x8e\x66\x8c\x88\xcc\x2e\xcf\x1f\x6a\x45\x1f\x45\x3c\xc0\x11\x0a\xa9\x20\x81\xe2\x62\xd9\x43\x23\x2e\x29\x1c\x3f\x54\x22\x8c\x12\xf8\xd7\x1d\x41\x94\x29\x32\x27\xa2\x83\x24\x51\x12\x25\x82\x72\x41\xd5\xb2\x03\x16\x4a\x2a\x91\xe4\x60\xc6\x9f\x09\x1e\xa3\x88\xdf\x13\xa9\x34\xb6\x05\x9d\x2f\x88\xdf\xbf\x52\xb9\x1c\x42\x32\x75\x73\x9e\xad\x8b\x9f\x69\xd2\xd1\xff\xbe\x1a\x9f\x95\xe6\x18\x06\xc3\xf5\x03\x37\x00\xca\xcd\x88\xc0\x0b\xa3\x89\x77\xcb\x15\x4c\x82\x4c\x11\xc1\xdd\x98\x78\x27\xb3\xd3\x13\x14\x61\x3b\xa6\x10\x87\x68\x89\xa4\x3e\x23\x43\xc2\x80\xb0\x98\x30\xae\x79\x11\x3f\xfd\x22\xfd\x46\x04\x38\x86\xcd\x51\x1f\x9a\x43\x75\x0b\x01\x72\xa8\xdc\x04\x1a\xe7\x16\x92\x94\xcd\x23\x82\xb0\x10\x78\x69\x4c\xc6\x85\xd3\x53\xdf\x0b\x52\x5f\x2d\xa1\x35\x99\x80\x0b\x85\x20\x91\x46\xa4\xce\x5a\xb3\xce\xf4\xfc\x40\xc0\x21\xde\x87\xe4\x71\x4a\xa6\x44\xe8\x0f\x15\x61\x16\x4e\x8c\x95\xa0\x3f\xa3\xa7\xbf\x33\x1a\x60\xb0\x42\x9b\x4d\x24\xcd\x90\xf4\xe1\x63\xc7\x81\x19\x8a\xb0\x44\x82\xcc\x23\x7c\x40\x8e\x1b\x08\x70\x47\x16\x98\x0e\xe4\xef\xc4\x78\x03\x17\x5e\xff\x0a\x4b\x82\x2e\xac\x24\x22\x8d\x0c\xc8\x63\xaa\xf4\x5e\xd1\x3b\x47\x8b\x45\xf0\xa5\xfc\x31\xc5\x82\xa0\xa9\xc0\xc1\xad\xde\x60\xfa\xc7\xa2\x5f\x73\x41\xa3\xd0\x89\x34\xfa\x45\x41\x7e\x4c\xa9\x20\xa1\x96\x0c\x94\x1d\x45\x0f\x21\x7b\x50\x7d\x84\x7b\xf6\x07\xc9\x99\x19\x1e\x31\x57\xb0\x39\xa1\xbe\xb5\xe7\x49\x7e\x1a\x5d\xbf\x48\x04\x57\x3c\xe0\x91\x91\xd8\x54\x90\xe8\xeb\x24\xff\x39\x24\x52\x51\x06\x4b\xc8\xbc\xf1\xe6\x75\xef\xf3\x2f\xbf\xec\xbd\xe9\xbd\xf9\x97\xf2\x9b\x09\x17\xca\xca\x7d\x5f\x7c\xf1\xfa\x9f\xad\xc8\xe7\xce\xae\xef\x3e\xd5\x9a\x44\x68\x50\xbc\x65\x8a\x6b\x13\x08\xdb\x65\x7d\x02\xec\x0b\x73\x1f\x4c\x31\xb8\xd5\xcc\x17\xc6\x91\x96\xcd\xb9\x16\x00\x96\x48\x3e\xfd\x2d\xe2\x7a\x1c\x4f\xbf\x30\xc4\x48\x40\x24\x16\x94\x4b\x7d\x6d\x92\x9c\x44\xad\x83\x04\x5c\x04\x0b\xa2\x88\x44\x4b\xfd\x93\xbd\x71\x16\xf4\x07\x5e\xf0\x35\xa3\xf5\xab\xc9\xc1\x80\xe9\x2f\xdd\x4d\x9f\x74\xe6\x7d\xbb\xf8\x23\x25\xf7\x08\x47\x11\xbf\x07\x0b\xef\x8f\x29\x57\xd8\x79\xc7\xdc\xdd\x6d\x1e\xfa\x1c\x5d\x1a\x08\x11\x28\x30\x5f\x82\xfe\xa1\x68\x88\xad\xa7\x6b\x15\x46\x35\x1d\x38\xd4\x87\x08\x96\xc8\x8b\x04\x3f\xfd\x27\x0e\x29\xf8\x92\x63\x8e\x7c\x70\x42\x4e\x8c\x9f\x96\xfc\x44\xa5\xd2\x00\x31\x38\x21\x7c\x50\x19\x37\x6f\x12\x03\x16\xfc\x15\x14\xee\xb1\xe6\x08\x18\xc2\x77\x98\x46\xc0\x3e\xe3\x0c\x01\x38\x2d\xdd\x1e\x33\x2e\x90\x8f\x4a\xb0\xae\x7b\xbe\xd3\x62\x42\xa4\x75\xbc\xa5\x73\xe6\xfb\xa0\x2c\xf1\x8a\x5b\xbe\x09\x44\x9e\x24\x0d\x20\x86\x44\x11\x46\xeb\x20\x92\x38\x51\x4b\x1f\x1c\xb3\x53\xef\x70\xf0\xf4\x6b\x0d\x08\xcd\xf5\x9c\xd3\x96\xcb\xfe\x05\x93\xb9\xd2\x43\x2a\x13\xce\xa8\xfe\x88\x64\x1f\xd5\x62\x11\x44\x7f\x11\x52\x36\xef\xa1\x51\x44\xf4\xa1\x12\xe3\x5b\x82\x64\x2a\x08\xa2\xca\x88\x66\x46\x99\x6a\x30\xe1\x9a\x12\x0b\x91\xf4\x50\x5f\x92\xf9\xd3\xdf\x05\x31\x07\x95\x3e\xd5\x8c\x70\x54\x58\x7a\xc6\xef\x0d\x70\x9d\xec\xee\xa1\x57\x13\x3b\xe3\x29\xf3\xce\x10\xcb\x42\x22\x98\xd6\x2c\x84\x7f\xd6\x05\x89\xf9\x5d\x26\x42\x5a\x07\x57\x4e\x14\x91\xde\xc9\x8b\xa8\x71\xbe\x6b\xb2\xa3\x82\xb3\xa9\x30\x22\xe9\x71\x25\xbe\x18\xc1\x30\xe5\xf5\x0b\x77\xb9\x66\x23\x72\x37\xab\xe3\x5c\x88\x42\xac\xb0\x8f\xc7\x83\xec\x80\x2e\xc2\xac\x18\x3d\xe8\x80\x5a\x67\xc2\xfa\x66\x71\x13\x1d\x72\x9f\x9c\x73\x94\xad\x3c\x7d\xdf\xe8\x93\x42\x40\x9c\x13\xb8\x39\x7b\xe8\x92\x18\x5f\xec\x82\x44\x89\x6f\x25\x1e\xd9\x00\xaf\x94\x65\xe1\x2f\x06\x94\x80\x2b\xe4\x84\x33\x99\x46\xaa\x08\xa7\x9a\x12\xc1\x53\x45\xe4\x51\x49\xc5\xd0\xcc\xf6\xa1\x75\xef\x17\x24\x7a\x3b\x3b\x1e\x04\x0f\x0f\xbd\x8f\x44\x48\xca\xd9\xe5\x82\x0b\xf5\xf8\x98\x07\x40\xd8\xe7\x67\x9c\xcd\xe1\xb1\x20\x08\x47\xfa\xe6\x0f\x02\x92\x28\x12\xfa\xe6\xa5\x0a\xe6\xb2\x0a\xa2\xc2\xf1\x94\x3e\xfd\x95\xe9\x09\xc3\x1a\x26\xf6\x45\xb5\x7c\x96\x9d\x4e\x70\x04\x7b\x05\xed\xcf\xf4\xf1\x64\x0e\x77\x0f\xa4\xdf\xff\xbe\xaf\x14\x61\xfa\x83\x63\x64\x57\x0d\x0c\x6d\x4a\x19\xd6\x4b\x3e\x73\xdf\x4e\x97\x28\xe1\xf0\x2a\x98\x94\x52\xa6\x84\xd6\x2d\x43\x84\x53\xb5\xe0\x42\xf6\xd0\x90\x49\x85\xa3\x08\x18\x96\x4a\xb7\x7f\x25\xc2\x0a\x2d\x79\x2a\x10\xbf\x67\x48\x50\x79\xdb\xfb\xfd\xef\xb5\xc8\x70\xca\xf5\x63\x74\x8f\x19\x28\x6a\xd4\x7e\x0d\xf6\x23\xb3\xf3\x1f\x1e\x7a\x86\xa4\xc7\xc7\x7f\xf5\x8c\x50\xd3\x4f\x18\x68\x58\xc7\xe8\x0c\xc2\xe4\x0c\x52\x2d\x79\x98\x31\x70\x89\xe6\x02\x4f\x33\x3f\x2f\x4e\x15\x17\x44\x9a\xd1\x04\xd4\x85\x14\x31\x9e\xd9\x18\x30\xfb\x19\xbb\xe1\x10\xb4\x44\xa9\x8d\x38\x88\x0a\xf0\x31\x92\x29\x0a\x52\xc2\x14\x46\x4b\xa4\x39\x35\xe7\x76\x60\xff\xe7\x7f\x9f\x12\x49\x6c\xc0\x5d\x84\x85\x16\x9d\xaa\x46\x54\x39\x21\xfd\x2c\x7e\x20\xa2\x8c\x20\xc5\x79\x64\xb8\xa3\x88\xc0\x81\x32\x52\xc9\x49\xc4\xd3\x10\xbd\xd5\x67\x84\xf0\xdd\x28\x57\x0c\xa3\x05\x11\x02\xc7\x14\x88\xd4\x27\x13\x18\x7e\x40\x9f\x34\x9b\x50\x9a\x6b\xd5\x01\x4f\xb1\x00\x81\xa5\x0c\xbe\x9a\xcc\xd3\xd3\x57\xe3\xc1\x87\x8b\x8f\x03\x34\x3a\xbb\x7a\x37\x3c\xf7\x50\xd1\x7f\xfa\x7f\xfb\xa7\xc3\xf1\xab\xc1\xd9\xf0\xc3\xf0\xbc\x3f\x76\x6f\x37\x03\x8a\xc6\x83\xd1\xc5\xe5\x70\x72\x31\xfe\xa6\x29\xfc\xc1\x59\xfe\xd1\xf0\x02\x9d\x3a\x50\x97\xed\x51\x1e\xef\x8c\xf3\xb8\x21\xd2\xc6\x98\xdc\xeb\x1e\xb0\x1f\xfb\xe7\x27\x83\x53\x1f\xb0\x8f\xfd\xf3\xff\xe8\x9f\x5e\xd4\x7f\xec\x25\xc5\x7e\xed\xc3\x7d\x36\xec\x5f\xfa\xbe\xf5\x7c\x32\x1a\x82\x35\x25\x0b\x74\x6a\xfd\xb5\x0b\x89\xf4\x7c\x38\x2a\x87\x3b\x46\x10\x25\xb4\x19\x1a\x7a\x49\x7a\xf3\x1e\x5a\x28\x95\xc8\xe3\x57\xaf\x70\x42\x7b\x56\x79\xed\x05\x3c\xfe\xac\x0d\x32\xf4\x32\xe9\x21\xf2\x43\x0d\xb0\xcd\xd4\xe4\xd2\x00\x56\x70\x6b\x5c\x8d\xcf\x1e\xbd\x51\xd6\x9b\x01\xfa\x26\xa9\x72\x00\xbe\xd9\x2e\xc2\x83\xa8\xd7\xd1\x70\x60\xff\xfd\xe8\xb3\x74\x57\x23\x58\xff\x7a\x0b\x8c\xe8\xa5\xfe\xfd\xce\x5c\xa7\xee\x67\x7b\xbb\x3e\x3e\xb6\x9a\xb2\x2a\xe0\x00\xc9\x46\x52\x97\xdf\x2a\xe0\x68\x46\xf6\x0e\x5c\x6a\xc2\x22\xc7\x82\x96\xab\x63\x74\xd9\xfa\x83\xd6\x28\x32\xcb\x76\x6b\x5c\xa0\x3c\xb7\xfb\x28\x08\x88\x94\xa0\x4f\x16\xa2\x76\x13\x2c\x14\x0d\x52\x7d\x23\x4f\x05\xbf\x25\xbe\x58\xc3\xbe\x35\xfe\xe8\xab\x31\x8f\xba\x4f\x99\xb9\x27\x63\x12\x52\x2c\xca\x31\xb7\x1b\xa9\x70\x26\x7f\x86\x63\xb2\x46\x8c\xfb\x91\xcf\x66\x44\x50\xe6\x0b\xf4\x2c\x92\x45\x22\xc4\x78\x3c\x15\xa4\x1c\xcb\x6f\x42\xdd\xf8\x8c\x08\xb5\x12\xe5\x9f\xd1\xea\x11\x7c\xfb\xc1\x8f\x29\x85\xec\x11\x9b\xb4\x82\x24\x09\x52\x41\xd5\x12\x41\x02\x85\x04\xc3\xc4\xc3\x43\x2f\x95\x44\x30\x08\x70\xf7\x1d\x41\xfd\xf0\xc7\x94\x3a\xab\x77\x48\xd0\x5c\xa4\x09\xb7\x89\x0b\xf3\xd4\x98\xb7\x09\x43\xe4\x07\x12\xa4\xe6\x25\x63\xce\x58\x01\xbe\x81\x4c\x9b\xf3\xb1\x42\xa6\xa6\xb2\x04\xa7\x0d\x8d\x65\x12\x43\x82\xe0\xa3\x19\x11\x20\x26\x1a\x2a\xcb\xc0\xab\x69\x0c\x43\x84\x21\x68\xb7\xa0\x18\x83\x12\xe8\x13\xd5\xfa\x60\xd7\x01\x77\x03\x84\x0a\x57\x2b\xc2\x1e\x05\xd2\xa0\x4b\x45\x84\x84\x8b\xd9\xc7\x0c\xe1\x24\xd9\x88\xcc\x46\xe2\x87\x24\x73\x6a\x40\x16\x83\x17\x0d\xac\x0e\xc0\xe1\x6e\x21\x40\xb6\x9a\xf7\x40\x19\xe2\x62\xae\x9f\x5d\x88\xb9\x7d\xf6\xca\x44\x59\xeb\x87\x97\xfa\x0f\xfb\xd8\xcc\xd6\x55\xc6\xd0\x5e\xcf\xa7\xc9\xf4\xc3\x7c\xb2\x22\x4b\x78\x46\x05\x6c\x89\xa8\x22\x05\xc3\x58\x34\x2b\xa8\x71\x91\xd9\x2b\xf4\xb8\x29\x2e\x53\x54\xcd\x8f\x88\x62\xb9\x92\xc3\xe1\xf4\x75\x3b\xef\x53\xa2\x39\x66\xf5\x1a\x93\x3e\x81\x11\x33\x7e\x80\x93\xb7\x4e\xce\x7f\x85\x35\xa4\x1e\x42\x63\x02\xa7\x83\x06\xb0\x02\xd6\x69\x04\x1b\xc0\x33\x70\x18\x09\x3d\x29\x84\x19\x03\x91\x71\x13\xe8\x17\x8c\x3f\xdf\xaa\x66\x35\x26\x04\x5c\x35\xae\x30\xd7\x60\xb2\x00\x59\xf5\xf4\x8b\xd3\x70\x58\xb8\xa2\xdc\x9b\x31\xe9\xb9\x3a\x79\x6b\x46\xcc\xcd\x00\xcd\x99\x45\x22\x4f\x12\x0c\x20\xf2\x61\x80\x59\x5e\xe0\x29\x8d\xa8\xd2\xa7\x66\xea\x7e\x34\x0b\x63\x89\x52\xe9\x33\x12\x55\x4f\x96\x9e\x8e\xd2\x24\x68\x16\xda\x61\x1e\x65\x9a\x9a\x59\x1a\x47\x3d\x84\xbe\xe1\x29\x0a\xc0\xee\xa0\x84\x56\x80\x2d\x67\xf5\x2c\xf8\xbe\x02\x86\xab\x05\x61\x05\xf5\x96\x3a\x25\xb2\x34\x63\x94\xdd\xf1\xdb\xba\xd9\xef\x21\xf4\x9e\xdf\x93\x3b\x22\x3a\xa0\x37\x5b\x13\xc8\x8c\x0a\xa9\xd0\x2c\x35\x3a\x79\x48\x84\x54\x16\x27\xa2\x71\xa2\x35\x46\x3e\x2b\xd3\xaa\x7f\x02\x9b\x80\xfe\xc7\x3a\xc5\x86\xb6\xb6\x2b\xa4\x7a\xfa\xa3\x3a\x76\x8e\x78\x08\x2e\x10\x7d\xab\x32\x3d\xa3\x21\x91\x15\x2a\xf3\x3a\x85\xcb\x0e\x4c\x1c\x53\x94\xa5\x66\xf2\x3b\x05\x5d\x5b\xaa\x6c\x87\x58\xe5\xf6\x8e\x07\x06\x62\xf5\xa2\xeb\x21\x74\x49\x19\x22\xf1\x14\x8b\x39\xef\xa0\x44\xd0\x98\x08\xeb\x05\x0e\x78\x9c\x08\xc2\xcc\x24\x29\x67\x2b\x20\x91\x65\x2e\x1c\xcf\x4d\xe9\x36\x86\x18\xe6\xb5\xc5\xf4\xa3\xa8\x60\xdc\x3d\x39\x1b\xba\xa9\xf7\xd9\x1d\xbd\x60\xf8\x3d\xba\xbc\x7c\x6f\x5c\x53\x46\x00\x01\x07\x5f\x4d\xa2\xcb\xc8\xb8\x2c\x60\x00\xd6\xa3\xa5\x21\x38\x61\xc3\x9e\x97\x3e\x84\xe0\x33\x8f\x88\x22\x10\xb6\x6f\xb3\xc2\x8c\xed\xcd\x83\xef\xd2\xa5\x5a\x64\x46\x2f\x70\x67\xa5\x0a\xcb\x95\xbc\x2f\xdf\xb5\x67\x6e\x99\x38\x95\x0a\x4d\x89\xd5\x20\x49\x88\xa6\x64\xc6\x85\xfb\xb7\x4d\xc0\xac\x19\xf7\x25\x31\xf3\x0c\xce\x7b\x93\x82\x56\x91\x1e\x83\x99\x32\x42\x60\xf9\xb5\x0d\x6c\xf1\x5e\xc1\xde\xf7\x7d\xde\x0f\xff\x07\x59\x52\x29\xe4\x32\x78\x3e\x3f\x7b\xfa\x35\xa6\x0a\x64\xc5\x52\x12\x68\x54\x77\xdf\x6b\xe0\xc6\xec\xab\x45\x2d\xbf\x79\xd3\xff\x39\x5c\x67\xd4\xb8\x9f\xac\xab\x78\x46\x49\xe4\x33\xd4\x9f\x67\x02\xad\xbe\xc7\xcd\x81\x12\xe0\x38\xe1\x88\x4f\x23\x3a\xc7\x35\x2e\xa9\xb5\xbc\xce\xb2\x8b\xca\x47\x7a\x55\xd6\x66\xe6\x0d\xf3\x6d\xd2\x35\x71\x47\x0f\xf0\x9e\x8b\x5b\x88\x4c\xb9\xa5\x49\x92\xcb\x49\x10\xf0\xa3\x91\x35\xc7\x6f\xc6\xad\x04\x9e\xe2\x1f\x70\xc8\x45\xc7\x38\x6e\x89\xbe\x01\xa3\x95\xac\x5e\x2b\x08\xb5\x20\xd4\x5a\x8d\x4d\x62\x8d\x32\xf2\x8f\xd1\x3e\xcc\x4b\x6d\x38\xb5\xc4\xf6\x8e\x76\xd9\x2d\x08\x57\xc0\x6b\x46\xdb\x26\x27\x8e\x17\x0c\x61\x21\x18\x5a\xf4\x0a\x23\x52\xa1\x90\xe2\x39\xe3\x52\xd1\x40\x9a\x30\x8b\x88\xcf\x21\x00\x61\x83\x34\x4c\x22\xf3\xe9\xd3\xdf\xf4\xb7\x46\x15\xe0\x11\x0d\xa8\x4a\x41\x15\xd0\x38\x4a\x61\x3f\xe0\xdc\x01\x0f\x86\x7f\x4d\xba\xb4\x25\xb4\x20\x38\x52\x0b\x14\x2c\x48\x70\x8b\xd4\x32\x21\xd6\xc6\x74\x94\x70\xa1\x4c\xbe\x1c\xe3\x8c\x1c\xf9\x2c\x15\x13\x9a\x58\xeb\x74\x9c\x08\x3e\xcd\x57\x00\x91\x2a\xf7\x3a\x15\x33\x8e\x9c\xe1\xc9\x61\xc8\x10\x6c\xa4\x35\x3b\x51\x28\x0b\xc9\x4f\x1e\x82\x9e\xfe\x27\x0b\xb5\xca\xba\x7a\xa2\x14\x48\xd8\x8c\x29\xa2\x33\x12\x2c\x83\x88\xb4\xb4\x25\x14\x40\x94\x16\x11\xdc\x05\x7a\x25\x4d\xf3\x58\x41\x12\x1a\x8b\xf9\x94\xab\x05\xca\xdc\x41\xe0\xd2\x09\x79\x8c\x29\x3b\x7a\x65\xff\xf0\xfa\xf6\xcf\xca\x9c\x5d\x3d\x2d\x24\xb1\x81\x21\x59\x78\xa2\x31\xa2\x67\xc8\x96\x55\xa8\x0e\x3a\xb2\x05\x97\xea\xe8\x15\xfc\xe7\x90\xa3\x2a\xa3\x39\xe8\x88\x18\xef\x6a\x34\xfa\x46\x39\xe0\x80\x4a\x58\x7c\xe3\x91\x2d\x57\xab\x49\xb8\xc6\x26\xf8\xc3\x6a\xe7\xfe\x6c\x5e\x48\x93\xb6\x32\x08\x44\x93\x54\xa5\xeb\x6e\xc0\x64\x54\x6d\x83\x2f\x24\x33\xca\x4c\x30\x25\x1c\x87\x75\xb2\x50\x11\xb7\xf9\x2e\x3b\x67\x02\x0b\x2c\x53\x9c\xf1\x66\xf1\xa7\x4c\x8e\xe0\x91\xb1\x4d\x68\xfd\xd3\x6b\x79\xcb\x28\xd0\xef\xaf\xe1\x4b\x65\x8a\xfd\x32\x80\xc5\x67\xe4\xc2\x2d\xd1\xad\x88\x7d\x0d\x91\x92\x10\x7d\xc4\x51\xea\xe3\xeb\x47\x1c\x71\x81\x30\x20\xf3\xda\x0a\x01\x90\x91\x1c\x22\xb0\x93\x8c\x79\x44\x8c\x85\x45\x8f\x00\xad\xe5\xc2\xe7\x66\x16\x93\x8b\x7e\x21\xe6\x8f\x8f\xa8\xc6\x82\x02\xf8\xb3\x19\xd5\x03\xce\xb1\xe0\xc8\x8d\x73\x1d\x91\xc9\x7f\x2d\x73\xa6\x02\xeb\xd6\xc3\x32\x80\x6a\x47\x55\x30\x1f\x99\xc7\x60\xb4\xc9\x0c\x48\x25\x7a\xf7\xc2\x81\x12\x4d\x0d\x18\x50\xb2\x28\x95\x49\x74\x36\xa5\x35\x22\x0f\xc9\xb0\xdf\x0a\x5f\xb6\x1d\xfc\x8a\x55\xf7\xe1\xa1\xe7\x9e\xdc\xc0\x13\xc3\x90\x6c\x51\x48\xcb\xeb\x9c\x19\x8e\x2a\x05\xde\x99\x35\xb3\x70\x63\x66\x54\x18\x86\xab\x88\xc1\x51\x71\x01\x38\x72\x3c\x0c\x5a\xa1\x6d\xdd\xae\xdc\x84\x41\x85\x33\xfe\xe1\xa1\xf7\x27\xfd\x87\xbd\xec\x8a\x8c\xd9\xd2\xd8\x5a\xe6\xc1\xda\xe1\xbf\x82\xb0\x3c\xf8\x6d\xed\xa9\x4a\x91\x38\x01\x8d\x5d\x71\x14\xf2\x7b\x16\x71\x1c\x9a\x10\x8e\xa5\x09\x21\x86\xb0\x2c\xf0\xc1\x30\xa2\x10\x0e\x43\x41\xa4\xf4\x8f\x62\x68\xec\x4a\x0c\xe4\x63\x19\x60\x31\x37\xf6\x19\x27\xc1\xdb\xe8\x10\x2b\x3c\x5b\xcd\xde\x0e\x79\x68\xb1\x34\x24\x37\xa6\x73\x81\x8d\x5d\xdc\xaa\x3f\x43\x2b\x45\x9f\xe6\xf5\x64\xea\x38\x5e\xa0\x15\x60\x89\x26\xa0\xbc\x84\xd9\x70\x1e\x08\x4e\x8f\x30\x03\x7b\xd7\x28\xc2\xd6\x10\xf5\x3d\xe2\xb3\xcc\xe7\xf4\xfd\xaa\xc6\xf6\xbd\xd3\xfa\x67\x82\xb8\xf8\xf4\x4c\x25\xf8\x7e\x9d\x2a\xf7\x55\xa1\xa8\x15\xb6\x35\xb0\xd0\x09\x67\x0a\x07\x36\xfa\x07\x87\x31\x65\x10\xf1\xa5\xb8\x40\x74\x06\x46\x4c\xb5\xa0\xec\xd6\xd8\x44\xa1\x5c\x99\x29\xba\xe1\x5d\x97\x79\xa8\xcf\x20\xaa\x1e\x5a\xd1\xe9\x55\x31\x36\x13\x85\xa6\x27\x2b\xa5\x8a\x9b\x3a\x63\xb9\x02\x53\x33\x3c\x45\x58\x28\x9e\x7e\xc9\x6a\x6d\xf5\x10\x1a\x3d\xfd\x8d\xcd\xb1\x84\x88\xca\xc0\x8c\xd4\x56\x79\x8a\x0a\x83\x0d\xb9\x40\x92\xa2\x84\x12\x26\xb1\x8d\x75\x54\xce\x5c\x6e\x47\x5b\x3d\x91\xa9\x5a\xe8\x99\x0c\xf4\xc2\x82\xa3\x9f\x71\xd6\x75\xa1\x3a\xf4\x8e\x44\x5e\x77\x52\xaa\xcc\x87\xb0\xdc\xdd\xe9\x1d\x42\x5d\x8d\x18\x6b\x1e\xe4\x50\x7c\xc6\x83\x1c\x39\x65\xf3\x9a\x93\xc2\xa1\x62\x21\xf7\x2f\xc9\x02\x30\xad\x0c\x63\x89\xc8\x4f\x09\x15\x04\x0a\xd3\x99\xd8\x52\xad\xa6\x4f\x71\x70\x0b\x3e\x0e\x8e\x04\xe9\xe2\xc2\xf8\x7b\xae\x28\x21\x14\xca\xf9\xbe\x58\xf8\xe5\x3a\x7d\xfd\xfa\x8b\xc0\xf9\xd8\xe1\x5f\x04\x75\x53\xfb\x5c\xf3\xcd\x3d\xe3\xf6\x19\x17\x73\xf7\x48\xda\x47\x70\x5e\x9a\x87\xdf\x6b\xf4\x45\x6a\xb4\xfe\xb1\x4a\x4e\x8d\x0a\xe2\x18\x62\x8e\x92\x05\x46\x01\x0e\xd3\xc0\x04\xca\x7f\x4c\x49\x04\x69\x01\x26\xfa\x58\x20\x49\x4c\x5c\x81\xa9\xfd\xc4\xa3\x3b\xa2\x77\x4f\x06\x43\x48\x33\xf2\xb5\xd2\x37\x07\xe6\x40\x99\x9c\x55\x62\x97\x1e\x4a\xfd\x93\xcf\x85\xbd\xed\x60\x6f\x12\x81\x42\x1a\xda\x20\x63\x93\x34\x65\xf4\x3e\xce\x08\x52\x34\xd6\x2a\x5a\xe8\x93\xa5\x07\x36\xcd\x4f\x6f\xab\x90\x98\x58\xbe\xbc\x8a\x91\x8b\x75\x05\xb8\x74\x4e\x6d\xd9\x35\xbd\x69\x4d\xd5\x17\xf0\xea\x52\x12\x27\x1e\x31\xfc\xab\xe1\xd9\xd9\xf0\xfc\x1d\xfa\xd0\x3f\xef\xbf\x1b\x8c\x3d\x44\xbc\x1b\x5c\x4e\x2e\xc6\xe8\x74\x80\xde\xf6\x4f\x26\x57\xe3\xfe\xc9\xf0\xe9\x7f\x79\x62\xda\xbe\xba\x1a\x9e\x9d\x8e\xfa\x27\x5f\xfb\xc2\x1e\x46\xfd\x3f\x5d\x0d\x26\x83\x4b\x0d\xee\xe4\xe2\xc3\x68\x78\xd6\x0c\x9c\x37\x8e\xc7\x03\xcf\x13\xca\x93\x01\x6c\x1f\x65\xf1\x15\x96\x34\x68\x67\xb2\xfe\xca\x58\xe7\xe7\x44\x29\xeb\xc4\x17\x8a\x84\xed\x34\xea\xaf\x28\x0b\xa1\xac\x62\x49\x44\x04\x5d\xaf\x18\x54\xa1\x17\xb4\x49\x30\x8c\xa2\xdc\xdf\x05\x8f\x4d\x3c\x48\x9d\x1a\x3e\x00\x93\x26\x68\x86\x15\x12\x60\xa9\xb8\x57\x21\x0c\x04\x69\x1a\x14\x0f\xb9\x84\x50\x51\xfb\x86\xcc\x1d\x3f\x32\x0b\xd1\xd8\xac\xce\x7b\x87\xa9\x16\x24\x0b\x4e\x5f\x0d\xd2\xb0\x05\xfb\x24\x09\xc1\xeb\xe3\x62\x39\x8a\x25\x94\xb6\x1c\x71\x31\xaa\xbd\x2a\xa2\xc3\x7a\x6d\x4d\xd6\x93\x3e\xa6\x34\x30\x38\x48\x9c\x55\x06\xca\xd9\x95\x02\x3f\x0e\x37\x70\x17\x1d\xf2\xdb\x19\x78\x1e\x3b\xe4\x71\x68\x65\xc3\x5e\xa9\x16\x6a\x2c\x46\xef\x27\x93\x91\x71\x2a\x6c\x1c\x86\xaf\xd2\x27\xce\x43\x3e\x34\xb4\x6d\xa8\xf0\x47\x95\x34\x45\xef\xf5\x37\x69\xc4\x7a\xc6\xa6\x44\xdd\x13\x02\x7a\x52\x59\x06\x83\x8b\xb8\xec\xe4\xb1\xb7\x08\x6c\x2f\xff\x7d\x41\x18\xd4\x5a\x24\x4c\x09\x52\x01\x76\x59\xed\xff\x79\xfa\xd5\x23\x1a\x39\x42\xd7\x23\x61\xd6\x98\xe6\x13\x27\xdb\x87\xc8\x34\xd4\xe4\xcd\x2c\x58\x57\x51\x39\x46\x06\x16\x72\xf5\xcc\x78\xc9\xf4\xe8\xaf\x2d\x02\x69\x9a\xe9\xfd\x8e\xa5\xcd\xb4\xfe\x90\xcc\x70\x1a\x29\x59\x3e\xe1\x9a\xc5\x7d\x0d\xcc\x5a\x08\x49\xd4\x58\xb3\x87\xa3\xfc\x0e\x47\x26\x67\x40\x90\xc2\x79\x6f\xc3\xe7\xe1\x40\x53\x5a\x06\x6a\x1c\x23\xd6\x6e\xc4\xd9\x69\x76\xc0\x41\xe2\x2d\xa3\xdd\xf2\x91\x98\xc5\xef\x5d\x4c\x7b\x09\x15\x6b\xb1\x0f\x2c\x07\x36\xaf\x72\x6f\xe8\xd8\x33\xaf\xfd\x55\xfe\xed\x93\x6f\x4d\xac\x3e\xf5\x4c\x3b\x30\xb3\x1a\x58\x88\x1c\xa7\x8a\x47\x6e\x91\x8a\x06\x23\x2b\x1e\x87\xab\x9f\x56\xe3\x74\x15\x28\x25\x84\x60\xc3\x3f\x0b\x3e\x2d\x59\xbb\x07\x7f\xb6\xae\xd9\xa2\x1c\xe0\x05\x53\x8d\x3e\xa5\x51\x98\x68\x45\x54\x7f\xe5\xfe\x91\x99\xdd\x8a\x29\x60\xfe\xfb\x2f\xc1\x3f\xa6\xc4\x44\x7f\x04\x3c\x4e\x68\x94\x4f\xd0\x2a\xc8\x2c\x5b\x6c\x0b\x72\x9a\x85\x5c\xb4\xa3\x67\x53\x30\x46\xf6\x7e\x4b\x0d\x62\xa9\x08\xfa\x31\xc5\x4c\xe9\xa3\xd7\x85\x10\x61\xe6\x2a\x8c\x18\x75\x54\x0b\x2c\x14\x84\xcd\x98\x60\x99\x0a\x02\x45\x4a\x23\x7a\x4b\xd0\x87\x0e\xfa\xf0\x55\x07\xbd\x03\xfd\xe2\xdd\x57\x7e\x73\x40\xa0\x71\xd8\x68\xe2\xe9\xd2\x28\x00\x79\x6d\x11\x5b\x0c\xc4\xa8\xa8\x80\xce\xbe\xaa\xe5\xc4\xd0\x9e\xc1\x0e\x17\xe2\x1a\x53\xe5\x78\x4e\xfa\xe7\x27\x03\xad\xb7\xb6\xe2\x82\xcb\x4a\x5f\x29\x60\x8b\x46\x82\xde\x61\x45\xc6\xfa\x6f\x97\xb7\x12\x2f\x13\xf3\x14\x92\x7c\x03\x1e\xbf\xd2\x7f\xbc\xda\x0b\xbe\xf1\x60\x74\x61\x7e\xb9\x1a\x9f\xed\x1f\xe2\xf5\x35\xbb\xbe\x66\x83\x7f\xef\x7f\x18\x9d\x0d\x2e\x8f\xaf\x4b\x15\x79\x9e\x7d\xec\x51\xc4\xef\x6d\x09\x6b\x29\x17\x08\x2a\xf6\xb6\xd7\xbc\x33\x70\x09\x45\xdf\x5e\x8d\xcf\x7c\x45\x2d\x36\x7d\x9d\xa0\xad\xd2\x2b\x0a\x00\xda\x85\x26\x66\x1f\xa6\x6a\x81\xae\x2e\x07\x63\xf8\xd7\xa8\x7f\x79\xf9\xe7\x8b\xf1\xe9\x35\x6b\x59\x9b\x78\x03\x38\x98\xf8\x3f\xf7\xc7\xe7\xc3\xf3\x77\x76\xde\x47\x50\xab\x45\xdf\x22\x60\x93\x4e\xb0\x94\xf7\x5c\x84\xa6\x48\x42\x29\xf1\x92\x27\xca\x56\x20\x5a\xd0\xf9\x22\x5a\xa2\x90\xca\x80\xa7\x02\xcf\x49\x68\x60\x7d\x53\x82\x10\xe3\xa5\x3e\x44\xee\xa8\x84\x2c\x7b\xc5\x11\x57\x0b\x22\x4c\x19\x15\xfb\xa3\x20\x01\x17\xa1\x09\xd5\x06\xfc\x72\x41\xa2\x08\x2d\xa8\x54\x5c\x2c\xeb\x17\xaa\x1e\xa2\xbe\x20\xff\xad\x90\x3e\x86\xae\xaf\xaf\x5f\xc4\xcb\x8c\x08\xfd\x4f\xf4\x32\x95\xc6\x31\x44\x6c\x02\x8c\xfd\x51\xba\x53\x0d\x56\xdf\x67\x4d\xc1\x5f\x9b\xff\x7b\x51\xc0\x71\x6d\x9f\xbf\x40\x2f\x89\x0c\x70\x92\xa1\xa3\x33\xa3\x81\x43\xe8\xad\x79\xdd\x17\xd1\xd4\x60\x42\xd7\xc9\x79\xb1\x42\xc8\x8b\x9d\x48\xd8\x01\x59\xc0\x63\x1a\x45\x58\x22\x49\xb5\xee\x6f\xd5\x7e\x2b\x06\x99\x34\x7b\x49\x9e\xfe\x13\x7b\xc2\xad\x36\x61\x2e\x4e\x69\xe3\x09\xdd\x72\x94\xab\xb8\xac\x85\x39\x1b\xa1\xa9\x6a\x9d\x0f\x49\x3a\x8b\xaa\x15\xe8\x36\x0c\x11\xca\x3e\x82\xaa\x9c\x95\x3d\x3b\xbd\xf8\xd0\x1f\x56\x14\x3c\xfb\xb6\x9b\x45\xdf\xa0\xf7\x17\x97\x13\xfd\x3d\x14\x2f\x87\x9a\x49\xa3\xfe\xe4\xbd\xfe\x57\x80\x46\xfd\x71\xff\xc3\x60\x32\x18\x5f\xde\xf4\x2f\x6f\xfe\x78\x79\x71\xbe\xdd\xf1\xf7\x3c\xa4\xd5\xee\xea\x0a\x12\x8a\xb3\x13\x2f\x05\x56\xb6\xb2\xba\x40\x05\x1a\xe2\xa5\x3e\xbb\x2d\xfa\x19\xe7\xbb\x40\x0d\x4c\xe1\xa6\x1f\x24\x67\xbb\x81\x39\x7a\xd0\xbb\x04\x4a\x82\xe8\x3f\x8e\xf5\xff\x18\xa8\x50\x05\xf0\xda\x82\x1f\x32\xf4\x67\xca\x42\x7e\x2f\xd1\x88\xdf\x13\x71\x09\x67\xa0\x5e\xe3\x21\x4f\xa7\x11\xe9\xc2\x52\x0f\x3b\xc8\xec\x35\x53\xab\xf1\x18\xce\xa2\x07\x77\xf8\x38\x24\xd7\x0e\xd1\x75\x01\x19\xfc\xfd\x68\xce\xa8\x15\x84\x36\xe8\x1f\x9d\xe9\x13\x5e\xa3\x34\x25\xb6\x3c\x28\x8f\xda\xe0\x6b\x97\x90\xbb\xef\x05\xf0\x0c\xc8\x4d\xc5\x47\xc3\x89\x17\xc7\x76\xf4\xcf\x33\xee\xc2\x12\xdd\x01\x9b\x6d\xc6\xe5\x8c\x1f\xb6\x31\xd4\xe5\xe0\xe4\x6a\x3c\x9c\x7c\x73\xf3\x6e\x7c\x71\x35\x3a\x30\x78\xb3\x09\xc0\x91\x79\x02\x0d\x8f\xa4\xf1\x9b\x43\x71\x95\x24\x89\x96\x90\xbb\xe5\x7c\x15\x55\xd6\x7b\x94\x32\x45\xa1\x48\xc6\xd2\x16\x61\xb3\x3e\x94\x76\xe1\xf9\x2b\x55\x79\x6b\x48\x46\x17\xe3\x77\xe8\x5b\x90\x53\x77\x38\x66\x1b\xa3\xf8\xad\x72\x68\x53\xdd\xe2\xbd\x5f\x4c\x5b\xa3\xcc\x0e\xda\x83\x96\x32\xbe\xae\xba\x2c\x9a\x96\xcf\xbe\xb6\x65\x62\xdd\x2d\x61\x4a\xc5\x5e\x5f\xbf\xe8\xf8\x7f\x2a\xdc\x20\xcf\x55\xa1\xfd\x10\x25\xda\xf7\x51\x13\xdb\xf1\xa1\xbe\xaa\xb1\x2d\x05\x9b\xd5\x82\xbd\x2e\xd7\xc5\xbe\x86\x3a\x79\xd7\xc5\xda\xd8\xd9\x8d\xf9\x58\x29\xb4\x9c\x51\x96\xfe\xf4\xea\x03\x0e\x8e\x33\xa0\x95\x03\x31\x77\x53\xbc\x0c\xa7\xf9\x74\xaf\x62\x5e\x43\x5c\x98\xde\xaa\xcb\xba\x15\xca\x92\xa8\x50\xc6\x5c\xbe\xc0\x8b\x14\x94\xa4\x86\x32\x21\xb9\x98\xd2\x7e\xe4\x5b\xd0\x70\x54\xbf\xb9\xca\x48\xfe\xc7\xab\x7b\x2e\x6e\x41\x03\x78\xa5\xe2\xe4\x95\xf3\x3d\xdd\x98\xe5\xbe\xe3\x9d\xf9\x49\x70\xda\x66\x8e\x07\xb8\xa7\x9d\xb5\x70\x3b\xa3\x05\x64\xef\x18\xa1\x05\x94\x00\xa7\x2d\x94\xd4\x80\xc3\x41\xae\x55\x24\x8a\x10\xe2\xa5\x16\x13\x4b\xf2\x54\xe1\xff\x7e\x57\xfc\xa1\x15\x90\x5c\xda\x44\xbf\xb3\xbf\x17\x6b\xd9\xbc\xda\x56\x0c\xdd\x92\xf6\x43\xe0\x3a\xd8\x10\x61\x63\xe8\xf9\xc4\x72\xc9\x82\xae\xa2\x31\xe1\xa9\x42\x93\xe1\x87\xc1\xc5\xd5\xe4\x66\x78\x7e\xf3\x61\x78\x7e\x35\x19\x5c\x82\x56\xa9\x04\x0e\x08\x7a\xa9\x44\x4a\xd0\x5f\xd0\x0c\x47\x52\xff\x57\x93\xf6\x4a\xf1\x57\xfa\x22\xf9\x0c\xde\x0b\x78\xc4\x45\xf9\x3d\xf3\x03\xd4\x9f\x26\xe8\xe5\xd9\xc5\x49\xff\x6c\x80\xfe\x82\x4e\xce\x06\xfd\xf1\x67\x5b\xae\xce\xb5\x16\x64\x37\x79\x0b\xb2\x9b\x72\x0b\xb2\x9b\xd5\x16\x64\x37\x55\x2d\xc8\xb6\x23\xc3\x14\x4f\xc7\x49\xd2\x8d\x31\xa3\x33\x22\x55\x7e\x67\x7e\xdb\x4d\xd0\x2b\xc7\x20\x13\xd1\xa6\x5f\x04\x51\x02\x82\xda\xb2\x6f\x7a\xcb\x38\xf2\x16\x01\x7e\x36\x0a\x76\x22\x20\x3b\xc7\x50\x16\xbc\x05\x47\x04\x82\x12\x64\xc3\x0b\x38\x38\x4c\x05\x88\xbf\x74\xbb\x21\x95\xfa\xaf\x4f\x80\x31\x97\xe5\xad\xf1\xf5\x1f\xad\x38\x7c\x23\xde\x98\x94\x3e\xd0\x61\xcc\xb1\xbd\x0b\x30\x2e\xe6\x1a\xd2\x2e\x20\x4c\x4e\xc0\xee\x10\xfe\x74\x75\x31\xe9\xa3\x6f\xbb\x31\x9a\x5c\x4c\xfa\x67\x37\x1f\x06\x1f\x2e\xc6\xdf\xe8\xad\x4c\x91\x13\x4d\x0b\x0f\x05\x1a\x5f\xb8\x03\x4c\xae\xc9\xb0\xf0\x18\xa3\x52\x19\x28\x38\x15\x8c\x43\x24\xc1\x34\x13\x36\xba\x50\xb1\x09\x7e\x14\x04\xe2\x45\x9d\xa5\x00\xca\x3b\xa3\xf1\x40\x03\x1f\x9c\xde\x00\xbe\x9b\xd1\xc5\x78\x72\xb9\xd3\xe2\x76\xb7\x81\x71\xcb\xf8\xee\x9e\xb5\xff\xdb\xc3\x65\xb4\x11\xff\x9a\xc5\xa7\x84\x1f\x1e\xf5\x3e\x01\x15\x2b\xd7\xe4\x0a\x15\xdb\xdf\x92\x0d\x28\xd1\x6b\x00\xfd\xe1\xf5\xeb\xd7\xaf\x6b\xe7\xe3\x18\x5e\xd9\x85\x8a\x7a\x8b\x85\xd3\xc7\xb4\xc6\x75\x33\xbe\x3a\x1b\x5c\x82\x6a\xf6\xec\x08\x33\x55\xe1\x40\x8d\x08\x0e\xd8\x89\xe0\xfa\xc0\x9d\x08\x32\xd6\x78\x3b\x11\xd8\x82\xf4\x59\x45\xfa\xbc\x92\xfc\x75\xa1\x28\x7d\xa6\x28\xab\x20\xb1\x36\x8a\xe2\x7b\xc5\xea\xf4\xd9\xab\x6f\x5e\xf7\x5e\xf7\xde\xbc\xe9\xbd\x7e\xf5\xf9\x97\x15\xdf\x98\x3a\xf5\xd9\xdb\xff\xf2\xba\xf3\xe5\x97\x5f\x54\xc3\x76\x19\x3f\xf9\xdb\xa6\xbc\xcb\x42\xa9\x04\xf8\x02\x5e\x6a\xa4\x04\x9e\xcd\x68\x60\xee\xb7\xff\xe0\x8c\xf4\x73\x6d\xde\xe8\xf3\x35\xad\x0f\x1a\x2e\xcf\x26\x4d\x6b\x3c\x36\x29\xf4\x6d\x57\xa1\x49\xff\xdd\x6e\x07\xf5\x9e\x48\xf8\x34\x06\xb2\x2d\xda\x2b\xfd\x43\x98\xc9\x0e\x60\x25\xdb\x9d\x79\xfb\x31\x97\x95\x9b\x27\x5d\x9b\xf6\x49\xc5\x3e\x49\xd7\xae\x83\xd2\xb5\xed\xa1\xb4\xf2\x63\xde\x46\xe9\x3a\x6b\xa4\x94\x77\x52\x2a\x9a\xda\x72\x21\x19\x3a\x81\xaf\x8c\x3b\x95\x44\x74\xdd\xe9\xee\xb8\x00\x0d\xb4\xa1\x24\x7f\xe9\x67\x37\xa3\xb2\x50\x4a\x4a\x71\x74\xf2\x16\xa2\x35\xda\x1a\xf6\x56\x18\x1f\x4e\xb3\x3f\x25\x85\x1c\xa0\xb2\x99\x4f\xe0\xf8\x66\x6e\x46\xfb\x65\x6b\x8b\x5e\x63\x5c\x25\xfb\x5e\x86\xf2\xda\xa2\x6d\x6d\xc2\x6b\x37\xc6\x6a\xa4\xeb\x36\xbb\xc6\x50\x9b\x58\xd3\xb6\x85\xae\x80\x57\x11\x95\xaa\x83\xf8\xac\x03\xcd\xb9\xf5\x93\x7d\x9c\xc2\xbb\x8d\xe8\x90\x14\x28\xb4\x36\xe6\x7d\x8c\x18\x52\x00\xbb\x8a\xdf\x12\x86\xce\xfa\x5f\x0d\xce\xd0\x68\x7c\xf1\x71\x78\x3a\x18\xa3\xc9\xc5\xd7\x83\x9d\xf4\x3e\x87\xc2\xd4\xa5\xcd\xce\xb4\xaf\xc6\x17\x5f\x0f\xc6\xeb\xa1\x4d\x50\xb0\xf3\xdb\xae\x0b\x24\x0b\x78\x42\xc2\x7d\x5c\xad\xdd\x5b\xb2\x5c\x3f\x50\xdd\x83\xaf\x07\xdf\x78\x9d\x4e\xde\x96\x93\x87\xe9\x62\xde\x96\xec\xdf\x6c\xfb\xcc\x43\xb6\x00\xde\x82\x49\x3b\xf5\xce\xdc\xa1\x15\xf0\x41\x96\xe3\xa7\xe9\xab\x09\x73\xf0\x7c\xeb\xd4\x3b\x48\x5c\xd5\x56\x93\x92\x43\x75\x56\xee\x7d\xaa\xc6\xc2\x7b\x5a\xe5\x2d\xfa\x6a\x6e\xdf\x60\x78\xdf\xcb\xfc\x19\x34\x99\x5e\x9d\xe0\xd1\x74\x41\xff\x43\x68\x32\x07\x75\xf5\xef\xba\x4a\x3f\x91\xcf\xbf\x86\x7c\x90\xb5\xe2\xa5\xfe\xb3\xa5\x9b\xbf\x0d\xdc\x67\x92\x25\xab\x47\xb4\xb2\xcf\x4b\xdb\x7c\xcb\xc0\xb7\x4f\x3f\xe0\x05\x16\x24\x74\x5e\x8b\xdc\xd1\x0c\x56\x57\x61\x8d\x8f\x60\x5a\x1f\x1b\xd3\xe3\x6e\x72\x25\x98\x70\x73\xa7\xe0\xc5\xf8\xdd\x77\xe8\xdb\xee\x8f\xe6\x51\x17\x7c\x0c\x07\x44\x70\xb3\x27\x04\x7b\x70\xaa\x14\xe1\x38\xd7\x4a\xa5\x23\x25\x46\xff\x15\x9c\x2a\x50\xb0\x66\x4d\x6f\xd9\x3f\xc4\xca\xe3\xa4\xfc\x6a\xb7\xcb\x05\x9d\x83\x8b\x6e\xf8\x6e\x78\x5e\x79\xce\x05\xb3\xd2\xb7\x3f\xf4\x64\x4c\xd5\xa2\x14\x2a\x7f\xf9\x45\x20\xbe\x50\xab\x5e\x07\x84\x7e\x67\x4b\x52\x41\xa1\x34\x22\x1a\xc3\xcb\xc8\x8a\x42\x9c\x94\xe0\x9d\x9d\xf6\x47\x5b\xc2\xb2\xd7\xa3\xe8\x9a\x0a\xec\xbf\x43\x97\xfd\x0f\x67\xfa\x96\xba\x48\x08\x1b\x9e\xa2\x13\xce\x98\xbe\xdc\x67\x24\x24\x02\x8c\xe9\x35\xe5\x11\x1b\x4f\xcb\x9a\x6d\xaa\xca\x2a\x9b\xa0\x93\xf1\xe0\x74\x70\x3e\x19\xf6\xcf\x60\x99\x46\xe8\xf2\x9b\xcb\xb3\x8b\x77\x37\xa7\xe3\xfe\xf0\xfc\xe6\x6a\x7c\x56\x58\xf2\x37\x0e\x82\x7e\x6c\x65\xb4\x11\x96\xd2\x24\xe9\x20\x49\xf4\xe5\x0c\xce\x00\x41\x42\xd3\x94\x2e\xbf\xaf\x21\xcf\x41\x16\xfb\x20\xe4\x55\x93\x50\xcc\x43\xdb\x85\x78\xbb\x91\x74\x13\x68\x9c\x1e\xc7\xb8\x93\x93\xd1\xc9\x91\x77\x0c\x76\x2d\x08\x16\xa8\xae\xa0\x12\x5a\xaa\xc0\xf5\xad\xb8\xa5\xa1\x50\x79\x61\xad\xd8\xd3\x8e\x34\xeb\xeb\xec\x96\x2c\xdf\xe4\x3a\xc4\x1b\xd0\x2b\x6e\xc9\xf2\xf3\xfc\xd9\xe7\x05\x05\xf8\x12\x04\xa9\x25\x94\x55\x29\x4a\x36\x45\xa1\x0b\x02\xe5\x77\x23\xac\x28\xe6\x34\xd3\x0e\x9f\x77\xc9\x11\xdb\x69\x47\xae\xea\x30\x21\xb1\xd3\x1a\x50\x1c\x11\x69\x17\x83\xeb\x32\x18\xf0\x18\xaf\xb6\xac\x88\xb0\x5e\x7d\x5a\x6c\xc3\x61\xb1\x06\xd7\x33\x2f\xc7\xfa\x61\x40\xd2\x29\x2c\x4b\x93\xfa\x23\x88\x29\x8e\x92\xa9\x80\xe5\xfa\x61\xa0\x77\x3e\xfb\xda\x1c\x58\x29\x5f\xeb\xb5\x59\x55\x13\xbf\xc6\xbb\xef\x65\xfa\x9b\x39\x18\x9d\x5a\xb0\xcf\xa3\x71\xc7\xc5\x78\xdd\x68\x39\x16\x8d\xf4\xfb\x3b\x21\x77\x5e\x86\xd7\x76\x21\x96\xb4\xd1\x37\x99\xa6\x0a\x0b\xb2\xf4\xdb\xe7\x2b\xaa\x6a\xf3\x43\x73\x7f\xcb\xb1\x89\xe6\x56\x0d\x39\x5e\x76\xc3\x69\x37\xa6\x8c\xb8\xa9\x73\xe5\x3e\x3a\xa5\xa4\xd2\xad\x41\x66\x11\x71\xf9\xf4\xca\x8a\x54\xb3\x8d\x10\x05\xa6\x2c\x7b\xd0\x8d\x90\x5c\xca\x88\xcf\x8f\x5f\xbd\xf2\x07\xb3\x6e\x00\x59\x4e\x3e\xea\x8a\x2c\xdd\xbb\x0c\xb1\xa9\x87\xac\x09\x33\xcc\xfa\x72\x1c\xce\xd6\x11\xd4\x8a\xcc\x96\x58\x91\xed\xc7\xe6\xc1\x1f\xfe\x70\xcf\xb5\xa4\xbb\x45\x94\x7c\xcb\xd9\xcf\x1c\x5c\x05\x22\xcb\xe1\xea\x8e\xd8\x6b\x47\x70\x65\x72\xf0\x71\xfe\x43\x46\xfc\x96\x01\xf6\x6d\xf9\x7b\x58\xf2\x77\x52\xfa\x1b\xcd\x42\xd5\x0e\xdc\xc9\x7b\xb5\xd3\x36\x3d\x0c\xe2\x26\xbb\xf9\x20\x98\x9b\x6c\xfa\xed\x10\xa7\x22\x42\xd7\x2f\x5e\xdd\x7d\xfe\x0a\xdc\xec\x2f\x50\xf7\xdf\xd1\xbb\xc1\x04\x75\xdf\xa3\xeb\x17\x27\x1c\xca\xfb\x76\x27\xcb\x84\x1c\x17\x93\xd5\x5e\xfd\xd4\xbd\xbf\xbf\xef\xce\xb8\x88\xbb\xa9\x88\x08\x0b\x78\x48\x42\xfd\x75\x88\x8e\x7e\xfc\xef\x7a\x19\x1c\x43\x7c\xdd\x96\xeb\x6e\x9d\xaa\x10\xfd\xdb\xab\x62\x20\xf9\xf6\x70\x21\xfe\xf7\xdb\x2e\xbd\xd3\xc2\xc9\xbf\xa3\x0f\x83\xc9\xfb\x8b\x53\xfd\xf7\x7b\xf4\x7e\xd0\x3f\x1d\x8c\xf5\xdf\x21\x3a\xed\x4f\xfa\x60\x77\xe0\xa9\x4a\x52\x85\xf4\x85\xe5\xa4\xeb\xaf\x96\xae\x98\x57\x21\xe4\x21\x15\xd1\x91\xc9\xf9\x4b\x88\xd0\x9c\x41\x18\x38\x69\x8d\xb2\x56\xf0\x23\x21\x10\xd0\x43\xc3\x19\x34\xc5\x07\x78\x54\xe6\x31\x70\x77\x14\xa3\x6e\xd8\x41\x18\x8d\x2e\x2e\x27\x06\xe0\x94\x38\x98\x10\x2b\x26\x15\xc1\x61\xc7\xb5\x68\x43\xc5\x59\x02\x70\xee\x1b\x49\x94\xad\xc2\x94\xcd\x9b\xde\x1b\x3d\x68\x08\x17\xe3\x25\xe2\x77\x44\x08\x1a\x12\xb4\x20\x38\xd4\x62\x0b\x84\xc8\x75\xdf\x3b\xd0\x00\xcd\x75\xa8\x89\x89\x5a\x70\xdb\xe9\xa2\xfb\xef\x3d\xcb\x8a\xb7\x5c\x40\x8f\x99\x90\x07\xa9\x16\xa9\x01\x4d\x07\x25\xa6\x3a\xee\x1d\x95\x54\xc1\x62\x35\x3d\x84\x43\x1e\xc8\x5e\x10\xf1\x34\x9c\x99\x26\xdd\x3d\x2e\xe6\xbe\x28\xe6\x7d\xcf\xda\xa9\x2b\x24\x5c\x2a\x86\x86\x3b\xab\x73\x28\x08\x86\x62\x88\xa6\x6a\xb2\x9e\x42\xd3\x8e\x11\x48\x20\xce\x4c\x0f\x95\x71\x2f\x29\x38\xa5\xa0\x25\x39\xe0\x90\xa4\xe8\xc9\x62\x50\x10\x07\x33\x45\x60\x4a\x25\x59\x81\x0d\x33\x4c\x18\x92\x29\x8a\xd2\x39\x16\x1d\xb4\xd4\x88\xd6\x26\xd4\x74\x15\xd4\x62\x6f\x40\x04\x34\x2e\xaa\x98\xd4\x11\xb8\xa6\x70\xa4\x05\x4b\x81\x14\x89\x13\x2e\x5c\xdf\xb7\x08\x4b\x14\xe0\xa9\xfe\xdc\x16\x42\xe8\xbe\x07\x5c\x00\x3e\x7e\xfa\xab\xe2\xe1\x4a\xef\x20\x78\x29\x9b\xe6\x91\xed\x54\x99\x4d\x73\x50\xee\x2b\xdc\x31\x53\x4d\x36\xcf\xf5\x81\x37\xa8\xbb\xa2\xf7\xb9\x45\xf7\xbd\x47\xf7\xbc\x49\x6b\x77\xa9\xe3\xc7\x3e\xf6\x69\xbd\xbc\x0e\x67\xf6\x75\xe1\xd4\xbe\x2e\xdf\x26\xd7\xed\xef\x93\xeb\xaa\x1b\xa5\x11\xda\xbd\x5c\x17\xb6\x35\x60\x21\x55\x66\x86\xba\x62\x3b\xf3\xf2\x3a\x2c\xa1\x17\xef\x6c\x17\x68\x95\xe9\x2d\xbb\xc2\x5c\x75\xb0\xec\x06\xcd\xe6\x85\xec\x01\x4e\xb2\xc0\xcc\x19\xff\xe5\xce\xf0\xca\xfe\x8c\xdd\x60\x99\xb8\xff\xa6\xe9\x17\x7b\xc8\xbf\xf0\xe2\x2d\x25\x3c\x40\x92\x60\x09\xef\x7a\x62\xe0\xa1\xd1\x1f\x2a\x2f\xb1\x86\x04\x7f\xa2\xc5\xde\x32\x2d\x2c\xf6\xfa\xc4\x87\x5d\x57\x55\x8d\xe1\x6d\x2f\x80\x6b\xa2\x02\xf7\x85\xa1\x3a\x28\x70\x5f\xd0\x1b\x04\x9f\x3c\x23\xa2\xda\xbb\xb1\x02\x60\xee\x3c\xdf\x17\x89\x7b\x82\x58\xed\x66\xdf\x91\x93\xd5\xce\xee\x3d\x00\xb5\x07\x79\xc1\x2b\xdf\x75\x57\xf5\x7e\x81\x1b\x8f\xfc\xcd\x5e\x80\x97\xdd\xbc\xdb\x43\x33\xe9\xaa\xdd\x19\xc1\x2a\x15\xa4\x3b\x8b\xf0\x1c\xbd\x1d\xf4\x27\x57\xe3\x1d\x4a\x33\x3a\xa8\xd9\x31\x61\x7a\x31\xbb\xd4\x85\x6f\xbb\x09\xa4\x2f\x7c\x97\x4d\xe4\x6e\x58\xe4\x62\xb7\x52\x8e\x1a\xd0\x7e\x6b\x53\xda\x56\x97\x5b\x7d\x6b\x7c\x13\x7b\x9e\x11\x0b\xf4\xb0\x13\xe2\x90\xec\x3a\x1f\x84\xdd\xed\x08\xe0\x8e\x30\x25\xb7\x0b\x59\xb1\xdf\xee\x84\x7f\xbf\x73\x57\x84\xb6\xdd\x92\xd2\xda\x8b\x2c\xe8\x0d\xae\x68\x5f\x1e\x83\xf3\xdd\x35\xbb\x56\xf0\xff\x26\x1d\x87\x21\x34\xe1\xa6\xe1\x04\x24\x91\x33\xad\xd7\x2a\x0b\xc8\x34\x10\xc1\x49\x92\xd5\xa0\xe2\x26\xf7\xf0\x94\x92\x39\x87\xe6\x41\x84\x85\x1d\x28\x32\x97\x29\xce\x52\x2e\x7c\x86\xbc\x9d\xc8\x34\x56\x05\x2a\x15\x16\x88\x58\x42\x6d\x93\x72\xeb\x0e\xcd\x1a\x8f\x40\x6b\x6d\x53\xaf\x9e\x99\xa8\x65\x12\x69\x85\x7c\x2e\x70\x8c\x4d\x8f\x28\xfd\x1c\x46\xd1\x41\xae\x1a\x64\x79\x04\x3b\xf3\x79\x25\xe5\xe9\xf9\xb8\x5c\x4f\xfa\x9c\xa8\xae\xe9\xd4\xdc\x35\x9d\x9a\x77\xda\x00\x0b\x12\x25\xe8\xdb\x93\x8b\x0f\x1f\xfa\xe7\xa7\xdb\x1d\x26\x10\xfb\x17\x45\xb6\x42\xb1\x2d\xe7\xd1\xd5\x1c\x7d\x35\xb9\x78\x35\x3a\xbb\x7a\x37\x3c\x47\x7f\x81\x64\x90\xbf\xa0\xae\x28\xd4\x3d\x36\xbf\xc1\xdf\x9f\x19\xb9\xca\xda\x9f\x04\x8f\x13\xdb\x3a\x01\x02\x0a\x45\x6c\xc2\x63\x53\x16\xe9\xd3\xf0\xa8\x3b\x3b\x2a\x9a\x68\x36\xd9\x14\xf7\x4f\xe1\xa5\xb1\x9c\xe1\x8c\x3c\xd7\x8a\x35\x26\x8c\x4b\xd7\x6d\xa5\x18\xcb\xaf\x69\xde\x60\x0f\xdb\x27\x99\x99\xd7\xba\x2d\x2b\x6b\x45\xdb\x15\x0a\xff\xc7\xab\x53\xdb\x01\x51\xbe\xb2\xf5\xa9\x67\x9c\x4f\xb1\xa8\xfd\xaa\xc2\x9b\x51\xfe\xfa\x26\xa2\x2c\xfd\xe9\x06\xc7\xe1\x3f\x7f\x59\x0b\xa9\x2b\xd0\x87\x65\x17\xca\x60\x5b\x00\x24\x58\x6c\xa7\x63\x3e\x1b\xe4\x56\xa3\xdf\x07\x42\xef\x24\x6d\x05\x5c\x1f\x81\xc5\x5a\xe4\xdb\x5d\x73\xa6\x2b\xdc\x4b\x1e\x53\x85\x9c\x27\x11\x0e\xd6\xac\x50\xb5\x69\x6f\x47\x19\x2a\xc5\x4e\xa0\x6e\x37\x5b\x0b\xc6\xb2\x0b\xcb\x1b\x56\xf7\x94\xab\xc5\xa6\xf2\xc2\x05\xbc\x58\x5f\x29\x26\x66\x0a\x6e\x1d\xdb\x7f\x70\xb9\x52\x1b\xd9\x84\x17\xad\x36\x97\xcb\xba\x14\x16\x42\x8c\x8a\xb4\xc9\xcc\xb6\x0e\xc6\x7f\xd3\x67\x29\x9e\x72\xb9\xa1\x0e\xb1\xed\x96\xd7\x95\x92\xa3\x97\xab\x03\xb5\x19\x05\xb6\x04\x0d\x9f\x2a\x0c\x29\x02\x9c\x11\xa8\xd4\xb4\xce\xbb\x66\xdc\x58\xc1\x56\x70\x68\x58\xbf\x85\x3e\x6f\x60\x04\x7c\xaa\x08\xb3\xc9\x30\x45\x16\x3d\xfd\x9d\xd1\x60\x85\x53\x11\x76\xcc\x6a\x36\xe4\x74\xbd\xea\x33\xf8\x99\x57\x83\x0d\xf6\x52\x4b\x7b\x7b\x9c\x7b\x2a\xa9\xbd\x81\x80\x43\x54\xd6\x6e\x89\x72\xcf\x05\xb6\x6b\xb1\xbb\xf8\x05\xf4\x52\xda\xb8\xa4\xea\x33\x01\x4b\x84\xc5\x1c\x1c\x1a\x72\xa7\xe1\xe6\x08\x49\x21\x42\xaf\xd9\x79\x00\x81\x87\x8e\x8c\x86\x1b\xda\xc4\xbf\x0f\x5d\x8c\x5c\x9a\x99\x03\xbe\x33\x0a\x9d\x8d\x12\xff\xae\x68\x2e\x91\xc8\x96\x9a\xdd\xb6\xdd\xc0\x1e\x50\xff\x57\x6a\x4d\x70\xb0\x2b\xa7\x0a\xcd\x3e\x17\x7a\x0b\xf8\xd7\xfb\x6a\xb4\xb0\x11\x8b\x2f\x26\xe9\xba\x61\xbf\x85\x4a\x74\x07\xbe\xf6\x36\x6e\x17\x9e\xfa\xfa\xf3\x6d\xfc\x74\x47\x33\x44\x8c\x93\xbc\xa0\x14\x28\xbf\xcf\xe7\x5f\xaa\xc5\xfd\x3c\x3e\xa6\x96\x24\x1c\xca\xcf\xb4\x81\x8c\x67\xf0\x35\xc5\x58\xdc\x12\x95\x40\x1f\xb0\x9d\x01\x14\x92\xb1\xb6\x53\xec\x6d\xbf\xf8\xcc\x16\xe9\x92\xfc\x24\xba\x7b\xe3\x02\xbc\xf5\x9f\x99\x2b\x49\xff\x7d\xd6\x3f\x47\x77\x9f\xe7\x3f\x7f\x0e\x8f\xb6\xbe\xc5\xf6\x49\x43\xe9\x3a\x43\x93\x05\x95\x88\x27\xc4\x66\xde\x52\x99\x67\x48\x29\x8e\x4e\x22\x9e\x86\xe8\xad\x89\x87\xf8\x6f\x59\x34\xb7\x71\x72\x15\xaa\xbd\x4f\x89\xeb\xaa\x6e\xcb\x83\x09\x62\x8a\x90\x9a\xd3\x76\xb5\xd9\x66\xf9\x4b\x08\xdf\x21\xa1\xcd\xe9\x15\x34\xc6\x02\xae\x04\x14\x60\x09\x1a\x86\xe9\x39\x5f\x22\x12\xda\x8e\x9b\x09\xc6\x2b\x64\xa1\xfb\x05\x0d\x16\x88\xea\x85\x08\x77\x07\x18\xa1\xee\xde\x20\xdb\x1c\x0f\x7d\x65\x5e\xeb\x8f\x86\xee\xf0\xaf\xfd\xf0\x73\x78\x73\xba\x44\x82\xc4\x38\x49\x8a\xfd\xff\xf2\xf1\x40\x2d\xaf\xbb\x37\xd0\xe7\x1e\xa8\xbb\xfb\xdc\xfc\xdd\x43\xe8\xcf\xe6\xc6\x8e\x63\x02\x57\xf8\xad\xab\xb9\x66\x5f\x47\xb6\x63\x15\xd2\x8c\x5a\xa4\xa6\xd9\x72\xc8\xef\x99\x7b\xc9\x52\xa7\x38\x4a\x04\x58\x7b\x11\x0e\x43\x6a\xb2\xac\x57\x49\x98\x12\xfd\xb5\x09\xad\x0c\x7b\xe8\x82\x05\xa4\x82\xda\x05\xbe\x23\x68\x4a\x08\x73\x0b\x2b\xec\x38\x64\x79\x45\x22\x7d\x15\xc3\x68\x6c\x2a\xb5\x20\x31\xbf\x73\x65\x39\x4b\x0b\x63\xbb\x92\x9c\x3c\x77\xc6\x6e\xf7\xfd\x0e\xe5\x37\xf3\x10\x8d\xee\x3c\xa5\x5b\x96\x63\xe1\x62\x0e\x6e\x2d\xb9\x0b\x19\xdb\x59\x0e\xe0\xb6\x0f\xb7\xfb\x14\xac\x16\x5b\xa2\x35\xdf\x42\x39\xe3\x05\x09\x6e\x65\x1a\x6f\xc7\xba\x24\x15\xf3\xf5\xd3\x6c\xcd\xe3\x7c\x48\xd8\xf5\xe7\x20\x96\x32\x85\xdc\x9b\x05\x56\x26\x4e\xae\x7c\xc6\x08\x22\x13\xce\x8c\x8c\x9e\x9d\x50\x6b\x3d\x85\xa9\x44\x4c\x8b\x63\x6c\x4e\x44\xa1\xc4\x17\x17\xe6\x17\x65\xc1\x80\x22\x61\x8f\xa2\xcf\x5f\xbf\xd6\xbf\x7f\xf9\xe6\x75\x1e\x48\xb7\x06\x77\x81\xa5\xd9\xbe\xc6\xb9\x1a\x76\x50\x44\xf0\x1d\x98\xdc\x21\x66\xc8\x6a\x08\x50\x3d\xa1\xb4\x53\x8f\x20\x6e\x13\x4f\xb1\x24\x3d\xd4\x8f\x22\x74\xcb\xf8\x7d\x44\xc2\x39\x14\x29\xa8\xc4\xe5\x62\xf6\xfc\xdb\xbf\x83\x28\x0b\xa2\xb4\xd4\x19\x75\x6a\xfa\x7f\x9a\x63\xc4\x3d\xbc\x25\x4b\xb9\xdd\x59\x51\x9e\x53\x3e\x9b\x11\xa1\xb1\x95\xfc\x81\xf6\xea\xdb\xc7\x82\xac\x47\x50\x30\x2d\x1f\x64\xf9\x64\xd8\xab\x97\x8f\x59\x17\x38\x8a\x6a\x0f\xf6\xc3\xad\x8c\xed\x16\x44\x4e\x63\x71\x45\xb8\x65\xd2\x43\xe7\x1c\x61\xa5\x88\xd6\x29\x1d\x82\x18\x87\xa0\x00\x5b\xc9\xa2\x82\x8f\xff\x2d\x73\x35\x01\x03\x9d\xe2\xad\xb7\x12\x4f\x15\x0a\x89\x54\x82\x2f\xdd\x7d\xbb\x2a\x26\x68\x34\x01\xd6\x82\x86\xe5\xcd\x1a\xad\x3d\xd4\x9f\x29\x22\xaa\xb1\x2c\x6d\xac\xea\x3d\x66\x10\xcd\x2a\x52\x86\x08\xd5\xca\x7a\x4d\xd4\x11\x5f\xfb\x31\xbf\xdd\x03\xae\x25\x0f\x45\x80\xd8\x20\x22\x98\xa5\xc9\xb6\xdb\x45\x2e\xb6\x93\x9c\x0b\x31\x82\xdb\x7f\xbf\xdd\xe5\x62\xd6\x93\xaf\xc3\xe7\xbe\x40\x66\xde\xa2\xbd\x03\xac\xb5\xbb\x1c\x64\x70\xa0\x0d\x66\xde\xdb\xf3\xc1\x9f\x6f\x76\x52\xbf\x0d\xc0\xaa\x00\xdb\x1c\x41\xf9\xd1\x2e\x68\x9c\x08\xa6\xa1\x6e\x2b\x3f\x59\x50\xde\xb0\x41\x0d\x7b\x2f\x32\x45\x19\x91\x27\xc8\xaf\x88\xcd\x3c\xda\x09\x57\x21\x7e\x0c\x20\xeb\xbf\xb6\x04\x98\xf0\xae\x13\xdd\xba\x62\x0f\x0b\xaf\x00\xef\xdb\xa2\x07\x76\xbb\xbb\xb7\x06\xde\x86\x3d\xb5\xef\x71\x49\x85\xe7\x64\x37\x1b\x96\x6d\x9b\xb1\x17\x20\xd0\xbd\x22\x13\xc4\xb2\x8d\x3e\x3c\x3f\x1d\xfc\xfb\x76\x70\x0b\x75\x83\xb6\x3c\xa4\x5d\x28\xba\xde\xbf\x11\xb9\x23\x5b\x76\xc7\x10\x29\xeb\x2a\x2c\xf3\xb0\x0d\x64\x83\x2f\xa0\xfb\x88\x3e\xd7\x26\xfd\xcb\xaf\x8b\x8b\x60\xa5\xea\x6e\x30\x03\x83\x23\x14\xd6\x0d\xa9\x4c\x22\x6c\xca\x91\x83\x15\xd2\x4a\x2c\x38\x49\x32\x59\x89\x6a\x75\x1e\xcb\x5b\x09\x29\x2e\x60\x35\x07\xfc\x80\x8b\x4a\x94\x32\xfa\x63\x4a\x3a\x68\x2e\x48\x52\xba\xe7\x8f\x24\xb2\xc9\x36\x46\x50\x23\x85\xef\xb4\x9e\x4f\xc9\x3d\x3c\xc9\x6b\x99\x69\x12\xea\x03\x08\xb2\xd1\x5b\x0b\xdb\xf5\xf5\xf5\x8b\x69\xca\x42\x28\x78\x4e\x02\x24\xf0\x2d\x41\xe1\xf4\xd8\x6a\xe7\x26\xbd\xc3\xb0\xc5\x3e\xda\x96\xe9\xd0\xf6\x90\xb0\x3b\x2a\x38\x8b\x09\x53\xdd\x3b\x2c\x28\x44\xc1\xc1\xa2\xd8\x09\x6c\x39\x36\x7c\xbb\xf5\x25\xa1\x17\x4e\x21\x63\x24\x0f\x45\x82\x72\x0b\xb7\xe8\x74\x78\xf9\xf5\x6a\xe9\xa5\x2d\x83\x49\xf7\xdf\xb5\x6a\x2f\x2c\xf0\xdc\x66\xbb\x00\x73\x01\x94\xdf\x76\xa7\xc8\x5c\x4d\x9a\x6d\x19\x8e\x1d\xe3\x28\xd7\xe5\xdc\x9d\x46\x6e\xaf\xd7\xdd\x60\x6c\x0a\x60\x3f\x28\xf0\xda\xcd\xbf\xc7\xf8\xf5\xc3\x80\x5a\x2f\x5e\xb6\x7f\x88\x4d\x39\x24\x61\x5c\xbb\xe3\xdf\x15\xca\xb6\x8b\x51\x75\x8b\xc1\xc1\x68\x70\xfe\xf1\xe6\x63\x7f\x5c\xfe\xc7\xc7\xfe\xd9\xd5\xb6\x2c\xf6\x04\x41\xa2\xa3\x84\x0b\x75\xf4\x97\x23\xc6\x19\xd9\x2e\xc0\xd2\x0f\xfb\x65\x22\x38\x9c\x26\x7f\x41\xe0\x0c\xfa\x0b\x44\x73\x7d\x56\xe8\x06\x6b\xd0\x16\xcd\x54\x89\x20\x01\xd4\xb9\x99\xa6\x0a\x9a\x41\x05\x01\x49\xa0\xc9\x13\x17\xe8\xc8\x02\x3c\xda\x4e\xdb\xd5\x94\x72\x31\xef\x0a\x1e\x91\x3c\xc5\x40\xeb\x16\xe3\x0b\x53\x33\xf6\x10\x60\x61\xb4\xfa\x2f\xb7\x7a\x8f\x2e\xc4\xfc\x03\x66\x78\x4e\xc4\x11\xea\xa2\x21\xbb\xa3\x8a\x58\xb7\xbd\x7e\x0a\x5e\x6e\xd9\x41\x92\x44\xd0\x0b\x85\x85\x28\x80\xae\xb9\xc6\xcc\xde\xb1\x86\x11\x85\x64\x42\x8c\x49\x10\x7a\x2a\xdb\xde\x2b\x47\x5f\xd1\x28\xa2\xac\x88\xe1\xc4\x16\xd9\xc9\x31\x68\xe9\x64\x6a\xde\xd3\x1c\xe6\x29\x53\xd6\xa5\xbe\xd4\x97\x3d\xa2\x6c\xc6\x73\x62\xfb\x69\x48\x15\x07\x50\x63\x57\x2b\x13\xd9\x8b\x42\x71\xb0\x91\xeb\x0f\xac\x3f\x07\x6a\x0f\x6e\xcd\x48\x63\x57\xd0\xcc\x03\xdb\xc2\x4e\x93\xb2\x0a\x6b\x45\x3c\xfc\xa8\x25\x32\xc8\x8f\x00\x63\xab\xb1\x48\x18\xf3\xea\x51\xd9\x4c\xb1\xfd\xc6\xd8\x2c\x49\x35\x2f\x0d\x7d\x60\x22\xb6\x2b\xe7\xbb\x35\x51\xeb\x19\x4a\xf0\xd3\x6a\xb2\xd2\xfe\xe0\xdf\xe4\xf0\x0b\xf9\x4a\x3b\xc2\x5f\xdf\xf3\x46\x11\xdf\xf9\x40\x69\x00\x7e\xfd\x60\xb9\xd4\x1f\x35\x39\x5a\xf4\x13\x5b\x2a\xcc\x26\x61\x18\xff\x2b\x46\x73\x7a\x47\x98\x09\x72\x29\x02\x3d\xd5\x1a\x1c\x4f\x7c\xe7\x09\x4e\x92\x92\xbd\x36\x3b\xa4\xac\x9e\x55\x38\x19\x8a\x50\x0b\x07\x0b\x6c\x46\xfd\x6e\xc7\xbd\x98\x9d\x73\x0a\xfc\x03\x90\x23\x40\xa5\x21\x6d\x7b\xb6\xda\x3e\xb4\x9f\x74\x3f\x36\x23\xe2\x39\xf7\xe3\x02\x0b\xd2\xb5\xee\xe5\x3d\xf5\x3e\x2c\x98\xa5\x76\xfd\x3e\xf3\xbe\x42\x77\x8c\x92\xe6\xd4\x85\x7e\x64\x5b\x6a\x23\x35\x69\x8c\xbb\x02\xdc\xf2\x02\x74\x69\x7a\xa6\xd8\x2f\x09\x77\x4d\xd7\x33\x00\x33\xdf\xf3\xae\xd3\xb1\xe5\xa8\x0a\x69\x73\xa0\xa8\x17\xad\x55\x5d\xca\x42\xf2\xd3\x77\x50\x0c\xdf\x1a\x52\xf4\x3f\xce\xd0\xb7\x53\xca\xc2\x1b\x1c\x86\x82\x48\x79\xfc\x9d\x3e\x12\x8e\x17\x5c\x9a\xff\xd1\xff\x32\xab\xe1\x96\x26\x10\xf0\xd4\x85\xc2\xe9\x40\x51\xfe\x83\x20\x31\x57\xa4\x4b\x7e\x22\x41\x9a\xfd\x62\x8b\x81\x74\x13\x49\xd2\x90\x77\x95\x5a\xc2\xe3\x19\x17\x01\x59\x7d\xe8\x32\x31\x0b\x8f\xb7\x65\x41\x37\xe0\xe1\x96\xe7\x96\x5c\xd8\x36\xac\xe1\x6e\xd6\x42\xa9\x70\x70\x8b\x2e\x27\x3b\x59\xe5\x01\xc8\x96\x0b\x61\xe3\xb9\xb7\x13\xd8\xbd\xd8\x54\x76\xb7\xc9\x4a\xc5\x93\xdd\x20\x28\x2c\xe6\x44\x55\x85\x18\x6f\x09\x4e\xde\xee\x18\x70\x69\xeb\x41\x29\xb2\x62\x8b\x05\xdb\xeb\xf0\xb4\x56\x49\x5f\xf9\xd6\x5a\x32\xbf\xd8\x8a\x8e\x94\x41\x37\xf9\x72\xc5\x37\x9b\x87\x5f\x51\x0b\x22\x0f\x85\x7c\x7f\x71\x39\x39\xb7\x61\xdc\x85\xf6\xeb\xdb\x9b\x04\x0f\x42\x49\x2d\x1f\x2b\x31\x16\x43\x2e\xe3\xa5\xc0\x8a\x80\x2e\x48\x44\x5d\x7f\xd7\xfd\x0d\xf8\xf9\xd1\x57\x9a\x90\xf7\x61\x91\x6d\x83\xa0\x60\xc1\x38\x01\xcd\xbc\x10\xa7\x88\x93\x24\x5a\x42\x29\xde\x9f\xa8\x84\x10\x3d\x17\x14\x50\x28\xe9\x24\x51\xca\x14\x8d\xb4\x1e\xbe\xb4\xcd\x4e\xe1\xe4\xf1\xe7\x66\x36\x22\xbe\xbe\xe8\xca\x6e\x02\x40\x3b\x14\xbf\x5d\x0e\x99\x85\x9b\x9d\x60\x7b\xb1\x60\x3a\xe0\x95\x17\xd1\x1e\x17\x67\x23\x04\xbf\x41\xd6\xaf\xa4\x58\x9a\xf4\xdb\xed\xd5\xfb\x94\x7d\xca\x04\x80\x0d\xd8\x9f\x27\x05\xa0\x35\x11\x87\x4a\x02\xd8\x48\x48\x96\x06\xb0\x61\x2e\x20\x0d\x60\x4b\x12\x6a\xcd\xe7\x3b\xc0\x3c\x80\xb1\x78\x23\xe0\xff\x6b\x2e\x6e\xc7\xca\x35\x2d\x7e\x47\xc3\xb1\x0f\x6a\xc1\x42\xb0\x33\xdc\x83\x58\x0d\x1b\x23\xf8\xbf\x76\xc3\xd6\x8c\x3d\x80\x7d\x2c\x4d\x42\xec\xad\x52\x99\xa0\xbc\xc2\xca\xe8\xe2\x72\x38\x19\x9a\x66\xe7\xd6\x0e\xf0\x97\xcc\x32\x01\x0f\x23\x1e\xdc\xfe\xa5\xdb\x4d\x99\xfe\x63\x4b\x75\xe6\x50\xd4\xac\x3a\x5d\x46\xfa\x16\x92\x0b\x9e\x46\x21\xa4\xf4\xa0\x9f\x69\x02\x75\x61\x3a\x79\xd2\x62\xf1\x21\x2c\xae\x88\x07\x38\x42\x21\x15\x24\x50\x5c\x2c\x7b\x68\xc4\x25\x75\x19\x3e\x18\x25\xf0\xaf\x3b\xd3\xf6\x62\x4e\x84\x3e\x0b\x95\x44\x89\xa0\x5c\x4b\x49\x66\x41\xe8\x25\xc0\x85\x72\x71\xc8\x11\xbf\x27\x12\xc2\x71\x17\x74\xbe\x20\x52\x6d\x29\xdb\x18\xbe\xed\xd0\x49\xac\x04\xc1\xd5\xdc\x8c\xd1\xe4\x62\xd2\x3f\x2b\x34\x10\xab\xec\x2a\xc6\x20\xe0\xcf\x69\x93\x7b\xee\x2b\x86\xfe\x82\xcc\xc4\x7e\xc2\xbe\x63\x96\x39\xf5\x4a\x87\xeb\x9a\xf1\xc7\xcb\x8b\xf3\x9b\xf1\xd5\xd9\xe0\xb2\xae\xed\xd0\xe1\x10\x66\x45\x64\x4c\x7a\x9a\x2d\x87\x0c\x62\xd7\x36\x4d\x26\x87\xca\xed\x13\x08\xd6\xc7\x48\x52\x36\x8f\x08\xc2\x42\xe0\xa5\x71\x53\x16\xda\x44\x4a\x44\x99\xa4\x21\x41\x21\x91\x81\xa0\x53\x17\xcb\x0e\xf6\xf1\xbc\xd2\xf1\x47\x68\x2f\xf9\x83\xe4\xcc\x34\x30\xb1\x02\x98\xdd\x9c\xdf\xba\x46\x0d\x85\x8e\xf8\x90\xb6\x2c\xb8\xe2\x01\x8f\xf2\x5e\x93\x2a\x48\xac\x2b\xa2\xf8\x5e\x48\xb4\x52\x01\xac\xce\x5f\x7d\xf3\xba\xf7\xba\xf7\xe6\x4d\xef\xf5\xab\xcf\xbf\xac\xf8\xc6\x1e\xee\xee\xed\x7f\x79\xdd\xf9\xf2\xcb\x2f\xaa\x61\x07\x82\x26\x65\xd8\x7d\xbd\x36\x21\xaa\x00\xf6\x38\x14\x8b\x41\x4a\xe0\xd9\x8c\x06\x66\x9f\xff\x07\x67\xa4\x9f\x77\x3b\xc9\x5a\xf4\x7f\xf7\xdb\x53\x93\xdc\xd2\xab\xe9\x29\xa4\xb7\xbb\xab\x67\x57\xd9\x3c\x16\x7d\xdb\x55\x68\xd2\x7f\xb7\xeb\x7e\xdb\x0f\x0d\x9f\xa0\x95\xed\xca\x08\xfe\x91\x3a\xd5\x16\x0e\x8f\x03\xf5\xab\x5d\x67\xce\x7e\xda\xd1\x06\x51\x2a\x15\x11\x37\x8c\x87\xc4\xee\xe5\xc2\x09\x62\xdf\xd1\x5a\x83\xf9\xed\x0f\x9d\xd5\x1f\x63\x12\x73\xb1\xbc\x89\xa7\xe6\x85\x37\xaf\x3f\xff\x32\x7b\xe5\xb1\xd4\xca\xd6\x37\x1d\x50\x6b\x8e\xcf\x8c\x0f\xa9\x1b\x5a\x3b\x64\x88\x14\x9e\xdb\xec\x2a\x97\x2d\x74\x2f\xa8\x52\x84\x39\xfe\x7e\x3c\xe9\x8f\x5c\x34\xfe\x25\x2a\xb8\x26\x90\x73\x4d\x18\x09\x97\x2d\xd1\x94\xa7\x2c\x2c\x1d\x01\xf5\xd1\xbb\x2b\xec\x86\xc0\xbb\x6e\x82\xe6\x3c\x0a\x1b\xbc\xe8\x56\xae\xc0\xf1\xcd\xdc\x30\xe6\xcb\xd5\x4e\xbb\x9e\x0f\x9b\xb4\x9b\x6d\x00\x48\xc1\xdc\x68\xce\x76\x10\x9f\x75\x80\x97\xfa\xc9\x3e\x8e\x96\xc2\x18\xdd\x08\x61\x7c\xfb\x84\x7d\xb0\xae\xbb\x35\x13\xbb\x3f\x78\x0a\x59\xde\x67\xac\xdf\x07\xe3\x6b\x2a\x5b\x4f\x2e\xbe\x1e\xec\xa4\xcb\xd4\x67\xbd\xac\x75\x79\x45\x57\xe3\xb3\x9d\xd0\xed\xda\xc4\xb7\x02\x4e\x41\xcb\x6f\xd2\xca\x97\xa1\xff\xfa\xc2\xf7\x7f\x81\x5e\xb0\xed\x46\xf2\xdb\xe8\x05\xdb\x9a\xe6\xe7\xea\x05\xdb\x9a\xb0\x16\xbd\x60\x3f\xc9\x92\x7b\xf6\x5e\xb0\x07\x5f\x8e\x87\xee\x05\xfb\x0c\x6b\x73\xe7\x5e\xb0\xbb\x2d\xd3\xdf\xcc\xc1\x78\xf0\x5e\xb0\xed\x17\xe3\x6f\xa6\x17\xec\x36\xcb\xf0\x53\xf5\x82\xdd\x69\x39\x36\xd1\x32\xf6\xd2\xab\x14\x35\x6b\x56\xba\x1d\xf6\x86\x6d\x63\x37\x42\x6c\xdf\x36\x76\x13\xc8\x83\x75\x90\x6c\x37\x37\xf9\xcc\xe8\x23\xd1\xcc\x8a\x9e\x93\x7c\x46\xf4\xf3\x6c\x36\xb6\x8d\xf6\xdd\xc7\x94\x1d\x06\xf1\xc1\x5a\x88\x7e\xb2\x05\x70\xf7\x05\x4e\xb6\x0c\x45\xbc\x23\x42\xd2\x2d\x39\x6d\xbf\xcd\x0e\xad\xa3\x60\x86\xba\x77\x47\x60\x24\x85\xbf\xbb\xf6\x8d\x23\xb0\x5c\xe2\x48\xf2\x2c\xd3\xaa\xb5\xf5\x72\x32\xee\x9f\x0c\xd0\x60\x3c\xbe\x18\xeb\x8b\xae\x3f\x19\x9e\xbf\x43\x67\x17\xef\xa0\xe9\x20\x7a\x78\xe8\x8d\xb0\x5a\x3c\x3e\x1e\x5f\xb3\x87\x87\xde\x40\x88\xc7\xc7\x76\x18\xce\x86\xb6\x9e\x94\xf5\x1a\x6a\x81\xe4\xb8\x1d\x08\x93\x32\xde\xee\x9b\xd1\x55\xbb\xf7\x31\x03\xdb\x31\x2c\x2f\x09\xbe\xa9\xac\x92\x0d\x9f\x21\xad\xc2\x65\x17\x1b\xa8\x70\x1e\xe8\xe7\x1c\x49\x82\x16\x98\xa1\x84\x87\x34\xe4\x48\xa6\x31\x65\x54\x2a\x81\x85\x03\x49\xb1\x91\x55\x23\xcc\x8c\xd4\x9a\x89\x6e\x09\x9e\x6b\x01\xd5\x4f\xe2\xae\xe4\x5d\x12\x94\xa4\xfa\x2c\x28\x55\xbe\x7e\x4e\xc2\xd0\xcb\x53\xd3\xbb\xf2\x38\xeb\x6f\x43\xbc\x25\xac\x77\x24\x17\xbd\xfc\x88\x23\x2e\xca\x4d\x51\x79\x19\xb1\x6f\x44\x7a\x31\xd8\xc6\x86\xab\xf5\x82\x3a\xa5\x4a\x57\xb0\x2b\xb3\x3a\x58\x71\x2a\x15\x9a\x51\x21\xa1\xe4\xa1\xad\xce\x54\xbb\x56\x60\x80\x48\xa6\x89\xa0\x31\x05\x1d\x24\x1b\x5e\x71\x4c\x1d\xd3\xe8\x34\xc2\x77\x44\xa2\x25\xb4\x66\x25\x2c\xc2\xc1\xca\xc8\xa5\x46\x3a\x85\xbe\xab\x16\x20\x30\x8f\xc6\x44\x98\x3e\xac\xb5\x03\x06\x33\x6c\xb1\xaa\x66\x56\x26\xd0\xd5\x5a\xc2\x36\xbc\x99\x84\xb5\x2e\xf9\xc2\xd0\x98\xeb\x82\xe2\x68\x04\x82\x63\x22\x02\xac\xb7\x07\x2d\xd6\xd5\x46\xc6\x03\xa6\x28\xe3\x9b\xe9\x84\xa2\x8a\x94\x41\x69\x7a\x30\xd2\xcf\xb8\xd0\xe7\x95\xad\xff\x78\x8e\x63\xf2\xf8\xb8\x03\xe1\x8e\x6e\x8b\xc2\xf4\xbc\x90\x7c\x2a\xa0\x78\xb6\x29\xe9\xa8\x35\xb0\x35\x94\xdb\x8d\x69\x3f\x27\xcf\x41\x76\xb7\x26\xcf\xd5\x70\x9e\x72\xb5\x40\x11\x0f\x6e\x61\xdd\x9b\x30\x01\x5b\xfd\xda\x5b\xf4\xad\x44\x5a\xde\x65\x18\x62\x03\x30\xba\x23\x3f\xc3\xda\xe6\x09\xf4\x0e\x91\x68\x1a\xf1\x1f\x53\xad\xd5\x2e\x35\xe3\xdc\xbf\x7c\xed\x44\x2a\xc8\xd3\x17\x95\xc9\xb8\x78\x7c\x04\x32\x1f\x1e\x7a\xa7\x26\xc6\x21\x7c\x7c\xdc\x9e\xca\x12\xdc\xe5\x2a\xd4\x46\xe4\x65\x11\x1a\x53\xaa\xcc\xd1\xa1\x19\xf8\xca\xf0\xb1\x35\x65\xfa\x14\x00\x40\x60\xfa\xf8\x31\xd5\xa7\x55\x08\x75\xec\x13\x1a\xd9\x15\xcb\x68\xc6\xd0\x57\xad\xd9\x09\xe1\x7f\x8a\xcf\x09\xd4\x3b\x03\xaf\x75\x16\x9a\x88\x59\xf8\x0a\x4a\x6c\xab\x45\x03\xc2\x4b\x74\x03\xd8\x1f\x52\x66\xaa\xbe\xe5\x20\x97\xaf\xb8\x85\xd7\x84\x38\x81\x59\xc8\xe3\x6e\x05\x8d\xfa\x51\x67\x2f\x94\x16\x71\xe4\x04\xaf\xc0\xdf\x44\xb6\x89\xe7\xe3\xc2\x56\x91\x59\x14\xca\x2e\x82\x5f\xad\xa3\x6f\xa4\x5b\x9b\x33\x07\xae\x2f\x13\xf4\x62\xfc\x6a\xe6\x89\x75\x63\x21\x9c\xf8\xd2\x6c\x4e\x70\x3c\xa5\x58\x20\x8e\xee\xa8\x4c\x4d\x2f\x6e\x7d\x52\x09\x12\xa4\x44\x53\x1e\x92\xc2\x51\xd0\xd1\x3f\x45\x4f\xbf\xc6\xd4\xac\x99\xe2\x69\x45\x65\xc0\x4d\xbb\xee\xc2\x0b\x40\x0c\xb5\x36\x33\xdb\xb6\xaa\x76\xbc\xc5\x43\xcb\x86\x99\xad\xde\xa4\x1b\x46\xe2\x8e\xd9\xf2\x59\x65\xd1\x57\xde\x92\xb5\x04\xa9\x65\x02\x5e\x51\x53\xee\x00\x99\x72\x07\x79\x63\x6b\xce\x36\xf0\xb7\x25\x94\x3a\x52\xa0\x4d\xa2\xd3\x0b\x37\x70\xa1\xd8\x8f\x21\xef\xd5\x50\x03\x9e\xb2\x79\x06\xbb\xd7\xf3\xb6\x8b\x02\xf0\x2c\xe4\x45\x04\xfa\x75\x0f\x60\x12\x40\x45\x63\x3d\x91\xa0\x6f\xd5\x40\xe6\x71\x22\xf8\x14\x60\x8b\x54\xd5\x00\x2d\x56\x93\x84\xf2\xcb\x56\xaf\xd1\x47\x6b\x7f\x34\xfc\x68\xfe\xf5\xf8\x08\x2d\xc0\xa9\x20\x12\x69\x75\xa2\xf0\xd2\x07\xca\x4e\xce\xf2\xf7\x4c\x67\x71\xad\x13\x05\xa9\x10\x84\xa9\x68\xa9\x27\xa4\xf0\xc1\x57\x94\x61\xb1\x2c\x7c\x30\xe1\x28\x4d\xe6\x02\x87\xc4\x54\x8b\x3a\x39\x1b\x96\x5b\x87\x1f\x67\xda\xe4\x9c\xaa\x45\x3a\x85\x78\xeb\x62\xff\xf0\x57\x41\x44\x7f\x17\xba\xae\x43\xed\xb4\x8e\xcd\x0c\xa8\x19\xfc\xc9\xd9\xf0\x03\x85\x41\x6c\x1c\xb6\x61\xd2\x33\x8e\xf7\x0c\x9b\x96\xec\xa4\x5c\x32\xd4\xd0\xa4\xaf\xa5\xb5\x01\x12\x41\xcc\x3d\x2b\xb2\xae\x43\x7a\xbc\xe5\x71\xf6\x03\x95\xba\xc6\xff\x44\xaa\xa7\x5f\x6c\x33\x9a\x22\xd8\x7c\xac\xd0\x83\x0f\xc3\x27\xee\x30\x84\xe1\x9a\x7e\xfe\x6d\x07\xda\x60\x06\x4b\x2d\x41\x14\xe7\x51\xbb\xd5\x00\xf6\xe1\x3c\xf8\xc1\x05\x45\x18\xcf\xa0\xad\x74\xe6\x82\x17\xa0\x26\xa9\x7e\x83\x30\xe4\x35\x33\x9c\x69\x09\x16\x84\x83\x94\x08\x05\x92\x37\x00\x2f\x7b\x41\x34\x0b\x6d\x1b\xb7\x48\x1f\xeb\x1a\x85\x91\x1d\xdc\x7d\x18\xa4\xc1\xc2\xab\x3a\xd8\x31\xbf\x27\x91\xef\xe4\xec\x2f\xd3\x10\xc8\xd0\x2f\x62\xe5\x3b\xbb\x2c\x20\x2d\x45\x7b\x6f\x69\xd7\xb1\xa6\x11\xa4\xef\xf5\x6a\x30\x7f\x3f\x3e\x7e\x8f\xa8\x29\xb5\x6e\xad\x11\xa6\x84\xba\xcd\x6d\x21\xa1\x89\x45\x65\x26\x0c\xe7\xe4\xad\x9b\xca\x57\x38\xa2\x58\xf6\x10\x1a\x9b\x32\x9c\x1a\xc0\x0a\x58\x37\xe9\x1b\xc0\x33\xc4\x45\x68\x2a\xc0\x3a\xd3\xbe\x09\xfb\xd3\x2f\x98\x29\x05\x89\x5a\x12\xdf\xb9\x3a\x88\xdc\xb0\x57\x49\x08\xe1\xa6\x04\xbc\xb6\x19\x9f\xd9\x1c\x06\xba\xe9\x2a\x29\xb5\x4e\x62\xbf\x37\xa3\x82\x2d\xf6\xd6\x8c\x99\x9b\x21\x1a\xfe\x92\x5a\x44\x3e\x0c\x2b\xce\x34\x99\xba\x1f\xcd\x5a\x5a\xa2\x54\x72\xdf\x45\xe0\x99\xb0\x42\x9b\x1d\x4b\x32\x65\x6e\xa0\x47\x0f\x0f\xbd\x11\xfc\x69\xd4\xae\x23\x7b\x0c\x06\x10\x74\xa9\xc4\x32\xcf\x5c\x82\x0b\xd1\xf3\x95\xab\xbe\xcd\xdc\x54\x98\x78\x73\xfb\x7a\x71\xd6\x28\xbb\xe3\xb7\x75\x2b\xa0\x87\xd0\x7b\x7e\x4f\xee\x88\xe8\x40\xd5\x60\x1b\xff\x69\xac\x01\xb3\x34\x8a\x34\x49\x21\x11\x5a\x6e\x31\x15\xbf\x69\x9c\xe0\x00\xf6\x78\x89\x56\xfd\x53\x16\xbb\xb8\x4e\xb1\xa1\xad\xfd\x2a\xa9\x5e\x02\x51\x1d\x43\x47\x3c\x14\x4f\xbf\x9a\xce\x6f\x4c\xcf\x6a\x48\xa4\x9d\x55\x2b\x9e\x79\xb8\xba\xec\x20\xd3\x49\x8a\xb2\xd4\x2c\x80\x0e\xca\x3f\x94\x2a\xdb\x27\xb6\x8f\xda\x1d\x0f\x0c\xc4\x6a\xda\x7b\x08\x5d\x52\x86\x48\x3c\xc5\x62\xce\x3b\xd6\xa2\xc1\xc1\xd6\x01\xea\x8e\x20\xcc\x4c\x93\xca\xae\x87\xc8\xb2\xd7\x69\xe0\x8d\xe8\x06\xb6\xeb\xef\x37\xac\x54\x53\x08\xba\x67\x0a\x82\x43\x3f\x5d\x1b\xd9\x17\x92\x19\x65\x24\x44\x31\x17\x7a\xad\x60\x7d\x3a\x07\xde\x2d\xfd\xc1\x8e\x56\x9f\xc5\xb6\x05\xac\xe8\xa1\x81\xe6\x4f\x08\xf3\xaf\xb7\x66\xae\x99\x00\x70\x2a\x50\xfc\xf4\x4b\xd6\x3d\xf6\x8e\xfc\x5c\x4f\xab\x34\x95\xc6\x49\x88\xa6\xcb\xc2\x81\x64\x2b\xaa\xb6\x34\xc5\xf2\x38\x49\x6d\x12\x88\x5c\x70\xa3\xcc\xc8\x05\x7e\x83\xc0\xdb\xe6\x2a\x72\xba\x33\x10\x84\x2d\xf0\xaf\x79\x85\xd0\x28\x48\x23\x50\xf5\x63\x6e\x8c\xa4\x24\xd2\xb0\xa0\x49\x06\x7e\x03\xeb\xd3\xb9\x8c\x01\x1c\xa8\x28\x6e\x02\xeb\x88\x84\xa8\x4e\x0d\x42\x4b\xac\x6b\xc3\xee\x98\x6d\xae\x2f\x51\x85\x6f\x09\xc2\xe8\x7e\x41\x23\x82\xea\xe4\x65\x20\x55\x9f\x74\x00\x16\x16\xae\xbe\x37\x5d\x69\x5a\xbb\xbe\x42\xae\x75\x2b\x7d\xef\x42\x9d\xf8\xe2\x45\xaa\xb0\x08\x8d\xb3\x3e\xe1\x01\xf7\x8b\xc5\x9c\x31\x12\x80\x5f\x36\x4c\x63\xe8\x44\x22\x48\x40\x98\x32\x59\x35\xa0\x4a\x25\x09\x48\x50\x49\x62\x6d\x4e\x70\x50\xcd\xf5\xb3\x0b\x31\xb7\xcf\x5e\x59\x8d\xf2\xe1\xa1\x07\x79\x37\xf6\x31\x96\xfa\xc9\x95\x75\x56\x3d\x3e\xf6\x7a\x3d\x6f\xce\xd2\x09\xd7\x94\xe0\x90\x77\x20\x32\x1d\x8b\xb9\x91\xea\xc9\x9c\x4a\x88\x4e\x10\x24\xa0\x7a\xbb\xd8\x9e\x79\x11\x5e\x27\xcd\x48\x68\x5c\x7f\x4a\x7f\xb6\xfc\x58\xa1\xd3\x29\x9f\x2b\x94\x42\xa8\x43\x05\xad\x9b\xb8\xa6\x30\x85\x73\xf4\x53\xb2\x4b\xd2\x79\x4a\x89\x66\x56\x04\x6c\x72\x0c\xfb\xf4\x6c\x4a\x28\x31\xd2\xa4\x69\xdd\x83\x02\x1e\x92\xbc\xab\x73\x26\x5f\x2a\x8e\x30\x83\xa6\x74\xf9\x5d\x54\xfc\xfd\xa5\xed\xff\xa3\xb0\x91\x4e\xb1\x2a\xfe\xec\xed\x58\xc8\x13\x0a\xcd\x48\x83\xa7\xbf\x85\x74\xce\xd1\x2c\x85\xd3\x3a\x6b\x85\x9d\x0b\x9f\x18\x71\x25\xca\x8f\xb2\xd3\x19\xbd\x5c\x22\x41\x4c\xfb\x4d\x14\xd2\x60\x51\x7a\xcf\x67\xd5\xe7\x09\x34\x09\xb0\xe3\x86\x04\x03\x3b\x0d\x97\xf0\xa8\x9f\x24\x8f\x8f\x10\x59\x6c\x4a\x78\xd8\x1f\x27\xf0\x2f\xf3\xe3\x6e\x0b\xa7\x8e\x29\x7a\xa9\x70\x41\xe7\x50\x47\xb1\x8a\xae\x6c\xd9\xe4\x06\xe5\x55\xea\xf6\xbc\x86\x7c\x6c\xd4\x52\x0d\x34\x75\xa2\xe6\x26\x74\x66\x9d\x55\x4b\xf8\x35\x1b\x08\xc1\xc5\x31\xda\xe0\x39\x74\x4e\x33\xe7\x33\x23\x2c\xc2\x3f\x1b\xcb\x87\x5e\x2a\x99\xed\x67\x33\xfc\x0d\x04\x07\x3c\x59\x96\x2f\xa7\x63\xe4\xfc\x9a\xbc\x39\x7d\x81\x9e\x2f\xb8\xa9\xd6\xaf\xa4\x15\x80\x1b\x08\x72\x6e\x29\xdb\x0c\xc2\x68\xef\xe8\x9e\x0b\xb0\xb5\x64\x29\x73\xff\x4f\x43\xc2\x32\x2f\x17\x10\xe7\x3e\x37\x56\x3d\x25\xf0\x14\xff\xc0\xad\x3e\xbc\x89\xb0\x99\x9e\x5a\xad\xb3\x81\xaf\x0e\x99\xa4\xc9\xc6\xd3\x67\x2c\x4a\x70\xd3\x85\x3c\xa6\x8c\xf2\x15\x1f\x5c\x33\xf4\x49\x02\xd1\x48\x21\xc8\x69\xd9\x49\x79\x84\x8c\x2f\x99\xce\x88\xf4\xb5\x30\xf4\x93\x94\xed\x21\xc6\x81\x14\xbc\x0a\xdc\xb4\xdf\x07\xf8\x94\x48\xbf\x8a\x59\x22\x15\x52\x1c\x09\x80\xba\x62\x32\x4d\x12\xc8\x55\x3c\x83\xa7\x20\x49\x4f\x16\x04\x5a\xad\x30\xfb\xaa\x44\x58\x90\x63\xef\x45\xe2\xa7\x9f\x44\x88\x30\xc5\x05\x74\x8c\x09\x70\x54\x83\xf3\x0c\x7c\x84\xf0\xae\xcc\xd0\x06\x9c\xf1\x80\x6a\xfd\x5f\x72\x76\xec\xbf\x25\x4a\xc3\x03\x2b\x2c\x58\xd6\x41\x09\xce\xf7\xe1\x28\xc2\x56\x74\xde\x66\x20\x00\x56\x6f\x72\xab\x77\x56\xc2\x6d\x42\x9f\x3d\x80\x5a\x8a\xb2\x55\x20\xd6\xbd\x79\x8a\x67\xe7\x5c\x71\xa1\x6c\x33\x5e\xef\x41\x66\xa4\x82\xe2\xb1\x57\x42\xd5\x88\xfe\xd2\x15\x94\xdd\x54\x70\x11\x28\x6b\x05\xbc\x10\xf3\xed\x08\x5f\xbd\x34\x1e\x1f\xf5\x89\xe2\xb9\x6a\x36\x13\x2c\x89\xa0\x38\xa2\x3f\x93\xa2\xfb\xb6\x21\x5d\xee\x5b\x6c\x5d\xe5\xb9\x6f\xb6\x39\x56\x13\x4f\xb4\xc1\x5d\x59\x8c\xe1\x28\xe2\x94\xb9\x45\xd1\xf8\x2b\x37\x5e\x93\x56\x9a\xe0\x62\xde\x83\xbb\xa1\x3f\x1a\xb6\xb9\x0d\x03\x1e\x81\x72\xbc\xc6\x6e\xb8\xb3\xad\x24\xb0\x02\xd9\x4f\x11\x3b\x52\x2e\x54\x53\x91\xd8\xe4\x69\x83\x8c\x9c\x26\x11\xc7\xf5\xa1\x0a\x05\x9a\x20\xea\xb8\xa0\x9b\x69\x58\x5c\xd8\xe0\x50\x24\x53\x04\xba\xc2\x06\x3a\x78\x42\x58\xc1\x25\x5a\xa3\x27\xae\xe2\xc7\x53\x41\x4b\xf8\xfd\x0e\xd0\x0d\x34\xdc\x0b\xaa\x48\x96\xb1\xde\x10\xfd\x5c\xdf\xa5\x25\xfc\x3f\x53\x9f\xc3\xc7\x85\xc5\x4e\x4e\x46\xc6\x71\xe2\x13\x02\x6d\x20\xb7\x0d\x96\x9e\x9c\x8c\x36\x00\xcc\x18\xb7\x01\x60\x4b\xc6\x38\xf0\xb6\x4e\x02\x05\x7f\x96\x96\x79\xf5\x22\x89\xb0\x22\x02\xa5\x72\xd3\x20\xb2\x6b\x9f\x30\x18\x52\x79\xe1\x1a\x1f\x9e\xe9\x26\x2f\x22\x8e\x12\x2e\x15\x11\x94\x0b\xb0\xdc\x34\xa3\x0b\x14\x0e\x6b\x73\x81\x86\xcb\xd3\x25\x34\x00\xe1\x62\x2e\xd1\x4b\x88\xbe\x84\xd2\x25\x5e\x45\x64\x95\xd2\x1f\x53\x63\x65\xc1\x2c\x23\x0d\x29\x1e\x62\x69\x82\x13\xb2\x01\x40\x88\xc2\x4b\xf9\xf4\xb7\x88\x23\x40\x03\xc1\x5d\x21\x17\x3e\xad\xc3\x11\xce\xc8\x3d\xf8\xfd\x36\x11\xe4\x9a\xb1\xb3\x94\xdc\xf9\xa4\x0f\x07\xd3\xb8\xa7\x8d\x3f\xdd\xf5\x2d\x69\xba\xd0\xac\x53\x00\xe1\x88\x60\x23\x25\x3a\xdd\xb4\xe1\x02\xb4\xc8\x4d\xf5\xa0\xac\xbd\x5d\x8d\x03\xb5\xbc\xc2\x1d\x5e\xeb\x52\x06\x93\x89\xdf\x6f\x9a\x47\x97\x9b\xdc\x7e\x54\x57\x71\x32\x1b\xe2\x5c\xa4\x09\x37\x0e\xe2\x79\x2a\x68\x88\xc3\x8d\xe0\x8d\x18\x80\x53\x88\x0e\xf7\x37\x2d\xcd\xd7\x4f\x6e\xa7\xc3\xa9\xe2\xfa\x32\xfb\x19\x87\x46\x25\xd8\xe0\x96\x5e\x45\x6a\x32\xef\x36\x21\x84\x98\xfa\x98\x84\xd4\x6a\x1e\x6d\xb1\x6c\x72\xbe\x67\xb3\xd4\xc6\xc3\x9e\x21\xa9\x89\xad\xca\x46\x60\xc5\x89\x0d\xa0\x52\x11\xd9\xb5\x05\x29\xd7\x46\xc0\x69\x73\x08\xd9\x75\x16\x12\x00\x45\x4a\x41\x59\xe5\x23\x08\xb7\x3a\x82\x18\x7a\x3f\x99\xb4\x3a\xcc\xf5\xfb\xcd\x61\x1e\x67\xc9\xd3\x2e\x20\xd8\x5c\xd8\xb6\x4e\x97\xa9\x05\x64\x8b\x55\x36\xa8\x4d\x99\x85\x11\xaf\x5f\x45\x6d\x30\xbd\xb4\xc5\xc0\x46\x17\xe3\x09\xe4\x37\x16\x42\x63\x3e\xab\x4d\x71\x28\xc1\x8c\x97\xb6\xe5\x59\xd3\x9a\x6f\xa5\x32\x63\x6d\x01\xaf\xd5\xb1\x2c\x01\x86\x47\xbd\x7d\x82\x5f\xa9\xd3\xb6\x02\xfe\xd5\x8c\xf3\xf6\x28\xfc\x25\xd8\x76\xad\xc0\x96\xad\x3d\x4d\xba\xd3\xa8\x0b\x81\x46\xe6\x92\xcd\xda\x7b\x24\xa9\x5c\x90\x10\xc9\x14\x8a\x81\x81\x43\x6b\xd3\x4e\xcf\xd5\x68\x67\xd4\x2a\x86\x0f\x39\x57\xe2\x02\x43\xe6\xbe\x3e\x35\x13\x2e\x4c\x5b\xcb\x80\x0b\x41\x02\x85\x1b\xed\x47\x2e\xe6\x1b\x37\x62\x49\x04\xd9\x00\x70\xab\x0a\x57\xf5\x37\xc5\x12\xcd\xb5\xa4\x0e\x01\x99\x00\x75\x99\x07\xc4\x76\xd0\x52\x2b\x7d\x32\x8d\x94\x0d\xea\xcb\xed\xc5\x26\xd4\xd7\xe8\x39\x44\x7a\xf5\xf5\xed\x8a\xbe\x35\x27\x79\x45\xd7\x32\xf2\xf6\x9c\x43\x88\xa6\xfe\x11\x42\xcc\xe0\xac\x9d\x69\xf5\xc8\xfa\x3d\x36\x90\x7b\x4b\x96\x2d\x03\xc3\xb2\xd9\x84\x40\xe8\xed\x82\xc1\x34\x6e\xe0\xca\xea\xba\x17\x3c\xce\x4c\x70\x79\x01\xb2\x19\xbc\x55\x43\x50\xc6\x90\xca\xf5\x1e\x12\xe3\xce\x22\x4e\x6f\x34\xb1\xb7\xd6\x0c\xb5\x89\xc4\xfd\xfa\x2d\x6a\x06\x01\x8e\x8a\xc3\x7b\x25\x36\x8c\x37\xd7\x05\x1f\x1e\x7a\x5f\xb9\x7f\x9c\x37\xa4\x9f\x44\xde\x20\xd8\x6a\x70\xf5\xc4\x58\x45\xe3\xe1\xa1\x77\x0a\x7f\xd9\x71\xe9\x05\xbb\x36\x07\xed\x99\x4d\xa2\x4c\xf3\x58\xc5\xe0\xc4\xf0\x1a\xae\x6f\xc3\xdc\x3d\x10\xbd\x7f\xa2\x4c\xdd\x86\x87\x87\xde\x9f\xf4\x1f\xbb\x10\x16\x54\x41\xda\x86\xa4\x35\xb5\x26\x9b\x1f\xaf\xc9\xa6\x5e\xb3\x29\x7e\xbf\x01\x35\xe0\x7c\x78\xe8\xbd\xb7\x62\x45\xc3\xb1\x03\xd6\xb5\xcf\x1a\xe2\xba\x1a\x9f\xf9\x96\xf5\x3e\x8f\x16\x47\xa3\x41\xd7\x60\x8d\xef\xf5\x64\x29\xab\x8d\xfa\x6b\xf7\xe4\x06\x9e\x64\xa3\x4a\x33\xa0\x9b\x37\xf0\xba\x76\x59\x09\xd8\xd1\x5b\x00\xbd\x89\xd8\x55\x25\xd4\x12\x77\x62\x6e\x27\x3d\xf0\xa6\x67\x4c\xae\x9d\x86\xa4\xa0\xa0\x66\x97\x56\x66\x93\x76\x54\xae\xe1\x68\x46\xab\xad\x1a\xf3\xf0\xd0\xdb\xe5\x48\xf4\xea\xb6\x05\xc0\xdb\x4d\xbf\x87\xca\xd2\x85\x5a\xb1\xe2\x0f\x39\x10\xff\xdd\x5a\xb9\xfa\x77\x1c\x7a\x96\x72\xb0\xe6\x7c\x68\x2d\x54\xb4\x5c\x86\xbe\x94\xb6\x75\x4a\x76\x97\x36\xb6\x5c\xbd\x5a\x12\xcd\xa9\xf9\x9a\x2c\x0b\x97\x7d\x0d\x03\x87\xf6\xd1\x8e\xdc\x31\xc2\x6c\x35\x67\x72\x5a\xdc\x91\xb9\x89\x97\x2b\x44\x6d\xcb\x99\x05\x16\x24\xf4\x09\x41\x3b\xc9\x3b\x5a\x32\xc3\x42\xd1\x70\x5d\xf4\xd9\x6a\x81\xc3\x42\xad\x14\x24\xf6\x24\xab\x65\xd2\x45\x21\x4f\x66\x05\xd3\x81\x64\xb6\xca\x4d\x58\xb5\x5f\xb7\xbd\x1f\x3c\xdb\x69\xe3\x46\xdc\x72\x55\x41\x0f\x99\xfd\x44\x64\x35\x1c\xeb\x06\x82\x4c\x22\x8e\xab\xf6\xea\x75\x02\x1f\xfa\x88\x2c\x3a\x87\x0b\xb9\x9b\xd6\x20\x42\xa2\xcc\x29\xf0\xe9\x8f\x4c\xe0\x58\x16\x77\xd4\x62\x80\x85\x21\xac\x7e\xeb\xc3\xe8\x8a\x56\xa0\x7b\x02\x15\x5a\x7f\xb0\x01\x7e\x36\x5f\x45\x89\x25\xc2\x73\xec\x8f\x85\xbe\x34\x6e\x5c\x41\x82\x05\x06\xa3\x3c\xe4\x50\x17\xaa\x29\x75\xf4\x45\xfd\xf4\x57\xa6\x48\x04\xb7\x34\xf8\x5c\x36\xd3\xd3\xc9\x97\x0c\x65\x90\xec\x01\x31\xa6\xb6\x96\x4c\x07\x62\x06\x08\x22\x3f\x25\x5c\x92\x2c\x31\xa0\x61\xa9\xca\xf5\x32\x95\x7e\xd6\x16\xc6\x51\x5c\x35\x58\xc2\xb2\x78\xfa\x95\x11\x8c\xac\x0f\xce\x79\x2a\x3b\x59\xfc\xfe\x4f\x09\x67\xa1\x78\xfa\x85\xb9\x1c\x1a\x47\x85\x3e\xe5\x6c\x88\x49\x99\x66\x38\xe4\x5c\x9c\x1d\xf8\xc1\x4c\xc8\x42\x88\x7d\xd9\x31\xd6\x9a\x32\xda\x90\xe9\x56\xc8\x70\xab\x0d\x4f\xb2\xe0\x5c\x72\x1b\x0a\xa9\xf1\xb0\xc7\x58\x05\x0b\x7f\x26\x52\xb0\x06\x1f\x31\x7d\x0d\x51\x16\xd0\xd0\x67\x5c\x4c\xa5\xe2\x71\x31\x61\x77\x69\x82\x5f\x5e\x92\xde\xbc\x87\xe2\x65\x5e\x6d\xfd\x33\x3d\xfb\xef\xa8\x42\x57\xe3\x33\xfb\xf3\xd1\xa6\xd4\xa2\x1f\xf0\x1d\xce\x21\xf4\xe6\x54\x1d\x95\xc0\x40\xb0\x0d\x46\x53\x81\x59\xb0\xd0\x3f\x28\x3c\xdf\x1e\xf6\xef\xee\xbe\xe8\x7d\xd1\x7b\x7d\x64\xda\x30\xbb\x7f\x28\x3c\xff\xcc\x24\x84\x49\x02\x03\x55\x5d\x5a\xf0\xc7\x4b\xc4\x59\xb4\xec\x64\xe9\xb6\x47\x36\x18\xec\x48\x93\x73\xc4\xd2\x28\xf2\x15\xb0\x19\x79\xac\x30\x09\x11\x92\x33\x08\x9d\xb0\x27\x9b\x0d\xfc\x79\x99\xf4\x10\xf9\x61\x8d\xab\xc0\x09\xcd\x11\xf7\xfb\x96\x6c\xcd\xe0\x04\xdc\xb8\xa3\x05\x8e\x61\x63\x28\xaa\x09\xc5\xbb\xc0\xcf\x58\xeb\x24\x80\x0c\xa8\xe3\xf3\x67\x36\x11\x2d\xf3\x2a\x4b\x1e\x99\xa8\x60\x6b\xad\x92\x6b\x8c\xa2\x2c\xe0\x22\xe1\xc2\x05\x93\xe7\xc5\xd4\x0a\x93\xe0\xe6\xa0\x6e\xf9\x2e\x08\x0e\x89\x90\x26\x7d\x25\x88\x52\x48\x01\x36\x95\xc5\x4d\x1f\xc5\x4e\x29\x79\xc1\x22\x22\x21\x8a\xd3\x48\xd1\x24\x22\x48\xd1\xd8\xdb\x38\xf2\x04\x4f\x49\x40\x04\x96\xa5\x99\xc5\xd2\x25\x75\x04\x51\x6a\x0a\x50\x44\x58\x0f\x9a\x06\x54\xa5\x61\x67\x45\x2d\x5d\xcb\xb9\x96\xc4\x1c\x45\x12\xdd\x91\x80\x78\x4e\x96\xd3\xe1\xe5\xd7\xad\x6e\xfc\xd3\x8b\x93\xaf\x07\xe3\x9b\xe1\x87\xfe\xbb\x76\xb5\xe5\xb7\x68\x12\x61\x3e\xb9\xdc\xe6\x9b\x76\xe9\x18\xa7\x58\x2e\xa6\x1c\x8b\xf0\x38\xb3\xac\x78\xb7\x24\xd3\x6c\x37\x5a\x8c\x48\xf5\xb5\xc3\x65\xe1\xab\x6a\xf0\x90\xcb\x62\x43\x17\x04\xb1\x71\xd3\x20\x69\x7b\xd0\x9c\xda\x04\x15\xbd\xc9\xf4\x5d\x5a\x10\x9c\x05\x09\x52\x21\x7d\x55\x26\x4a\xa8\x8c\x5c\xb5\x2f\x84\x05\xa9\xdd\x87\x1b\xca\xbc\x6c\x0e\xd1\xb9\x74\x35\x55\x36\x47\xe9\x64\x30\x37\x45\xe9\x14\x60\xb6\x0b\xd4\xc9\x30\xd4\xc6\xe6\x16\xc1\x5b\xfd\x6b\x03\xb8\x3a\x6e\x97\x18\x00\x8c\xde\x00\xac\x15\x37\x37\xc0\x6a\x1c\x9a\x51\x1a\x73\x53\xfb\x57\x43\xe4\xb5\x21\x1a\x45\xc4\x2d\xa3\x34\xd6\x10\x6d\xf0\x84\x95\x98\xd7\xc2\xfb\xb5\x86\xe7\x96\xf8\x9c\xb8\xe5\xc9\x5e\x35\x51\x6c\x02\x5f\x34\x1f\x34\x5f\x9b\x05\xdb\xc0\x26\x04\x35\x81\x26\x45\xc0\xcd\x76\x7e\xd1\x86\x60\x92\xec\xf2\x84\x5c\x86\xa5\xa4\x73\x73\x6b\x16\xdf\x33\xf9\x23\x51\x54\xdf\x5c\xb9\xc4\x45\x03\x3a\x5b\x7b\x6b\x46\x05\x28\x78\x83\x35\x36\xe3\x72\x5d\x7b\x21\x24\x48\xf1\x10\xc2\xb9\xa5\x7b\xe8\x3d\x51\xed\xd8\x6a\x62\xce\x8a\x8c\xaa\xad\x2b\xe1\x80\x41\x80\x5d\xb2\xc0\x8c\x84\x66\x6f\x4b\xf4\x92\xf6\x48\x0f\xa9\x05\x97\xc4\x66\x01\x09\x62\x85\xf2\x24\x21\xa1\xc9\x23\xd2\xfa\x8c\xb7\xc8\x97\x23\x22\x8f\xb6\xd3\xa7\x81\x44\x8b\xf4\xe9\xaf\x62\x86\x19\x96\xe8\x25\x08\x49\x01\x15\xa6\x0c\x96\x96\x84\x18\x37\x29\xc8\xcc\x84\x0a\x44\x38\xd3\x7d\x9c\x94\xb7\x39\x23\xc8\x0d\xab\x41\x44\xcf\xfa\xd9\xef\x0f\xea\xa9\x02\xbb\x1e\x6a\x63\x8a\x83\xd9\xd8\x8f\xe6\xe1\x3c\x85\x56\xb3\x08\xa1\xf5\xbb\xab\x19\xa2\x62\x30\xcf\xc6\xde\xb5\x25\x00\xdb\xf5\x6a\x6c\x08\xb0\x75\xfb\xc5\xad\xe1\x36\xe8\xa8\xd8\x18\xf6\xe1\x9a\x24\xe6\x2b\xc9\x1f\x56\x59\xdc\xc4\xde\xf8\xc9\x1c\x90\x3f\x56\xa6\xb4\xc4\x1b\x84\xcb\x58\x98\x81\xbe\xa6\xa2\xc8\x5b\xe6\x0e\x8c\x30\xf6\x2d\x63\x83\x81\xe2\x74\x44\x6e\x84\x6c\x4e\x5b\xad\x0a\x53\x56\xd0\x4d\xfc\x23\xa8\x83\x26\x9b\x06\x8f\x1a\x36\x90\x36\xe1\xa3\x80\xe1\xf9\x02\x36\xec\x44\x91\x4f\x1a\xb4\x91\x8d\x79\xbb\xa0\x8d\xe2\x18\xf6\x13\xb8\x91\x11\xb4\xb3\xcf\x62\x85\x36\x5f\x9c\xc6\x36\xcc\xfa\x04\x8e\xa6\x95\xd5\x62\x24\xb9\x4f\xe6\x60\xca\x38\xb1\x83\x5f\x66\x65\x44\xfb\xf1\xb9\x64\x84\xed\x18\x92\xb2\xca\xee\x1d\xc3\x52\x32\xb2\xb2\x78\x8d\xb1\xfe\xe3\xf1\xb1\xa6\x54\x41\x4b\x48\x8d\xc7\xe2\x42\x38\x0a\xdf\x35\xc4\x04\x46\x86\xd6\x78\xb2\xaf\xea\xb1\xec\x2f\xb6\xe3\x32\xbb\x97\x20\x7c\x7f\xcf\xf1\x1d\x05\x82\x9b\xc4\x77\x34\xa3\x71\xc7\x00\x8f\x86\x94\xee\x10\xdd\xb1\x72\x98\xee\x39\xc2\x63\x8d\xd2\x67\x73\xdd\xad\x8c\xeb\xd3\x07\x35\xe4\xac\xf0\x3b\xc4\x77\x3c\xc6\xfc\xfe\xef\xad\xa6\xcc\xcd\x81\x71\x07\x96\x13\x57\xf3\xe7\x26\x1e\x66\x97\xb9\x29\xd0\x5c\x46\xe5\x99\x9a\x22\xde\x2d\xe7\xa0\xca\x4b\xba\xd3\x18\x3c\xde\xd3\xd6\xf4\x65\x6d\x38\x8f\x0b\x2b\xb5\xf0\xd8\x7b\xee\xd8\x77\x80\x49\xfe\x6f\x3d\x58\x15\xa6\x51\xbb\xd2\x88\xa7\x34\x84\x22\x5a\x31\xc1\xec\x5f\x3d\x5f\xfe\x9f\xff\xfd\xa7\xf4\xe9\xaf\x5a\xbb\xf8\x31\x25\xc2\x14\x40\x08\xa8\xf8\x57\x1f\x44\xa8\xd5\xeb\x7a\x99\xdb\xc0\xf3\xa2\x56\x91\x25\x4b\x7b\xf0\x0d\x59\x5e\xde\x8c\x44\x06\x50\xa1\x22\x69\x79\x1d\xe5\x1e\x8d\xd0\x67\xd9\x2c\x13\x04\xbd\x48\xdc\x31\x56\x10\x07\xb3\xfa\xa9\xdc\xf8\x99\x5d\x96\x63\x2b\x22\x71\xa9\x45\x10\xaf\xa9\xab\xca\xbd\x59\x8f\x2d\x46\x91\x71\xb5\x38\x88\x06\x04\x17\xa9\x5d\x23\xb1\xc0\x51\x9f\x99\xca\xd2\x92\x48\x92\x86\xbc\xab\x14\xe4\x84\xf2\xa0\xe9\xa4\x1a\xd3\x9b\x75\x56\x66\x30\xea\x71\x49\xb9\xc8\x52\x2f\x0b\x5e\xfb\x06\xd8\xf4\x97\x79\x39\xa0\xcc\x56\x55\x8f\x0e\xf2\x3a\xf2\x94\x69\xc1\x63\x5b\x6a\x10\x92\x60\x41\x8d\x50\x78\x4e\x99\x4f\x45\x5e\x59\x1e\xa9\xb4\xc5\x4b\x7c\x2e\x5b\x4b\x1f\x40\x99\x11\x01\x01\x07\x9b\x29\x4c\xa5\x29\x29\xe4\xfa\xcc\x23\xc9\x8d\x71\x10\x3a\xd1\xdb\x96\xc8\xf9\x82\x61\x21\x78\x20\x53\x69\xbe\xb6\x1f\xb5\x19\x81\x31\x52\x63\x81\x03\x45\xc4\xd3\xaf\x52\xd1\xc0\x46\x5f\x43\x59\x4b\x2e\xdd\x01\x2a\x91\x22\x6c\x8e\x59\xbe\xd4\x48\x14\x61\xb4\x5c\xcb\xfd\x8d\xd6\xe0\xd5\x0d\xdb\xa6\xd9\xe8\x01\xf1\x99\x59\xba\x50\x5b\x0e\xb3\x0a\x05\x6f\x4d\x44\x68\x7e\x2d\xe7\x83\x0f\x32\x11\xd0\x8e\xc4\xd6\x76\x5f\xc1\x6b\x72\x6b\xeb\xe4\x93\x36\x57\xf7\xea\x58\x21\x7d\x38\xb2\x9d\x1d\xf8\xcc\x3f\xc2\x59\xe1\xe0\x2a\x0c\x77\x93\x95\x20\x1f\xae\xbd\x06\xb3\x59\xcb\xcd\xe0\x15\x05\xed\xab\xeb\x6b\x78\xb3\xb9\x8b\x1c\xd8\x64\x64\xd8\x89\x03\x7a\x71\xef\xa0\xf7\xee\x95\x1b\xfb\x53\x9c\x2b\x58\x52\xb1\x10\x37\xf1\xe6\x10\x7c\x89\xaa\x08\x09\x37\x57\x62\x39\x00\x6f\xf4\x61\x6f\x8b\xf4\x98\x28\x9c\x52\xd5\xa1\x16\x63\x93\x1c\x0a\xfd\xc0\x0c\xbb\x0b\x64\x1d\x58\x4b\x6a\x8c\x28\x7e\x54\xd6\x3f\x6a\xa8\xf2\xc3\x87\x96\xee\x97\x97\xef\x8b\x62\x56\xe6\x39\x6b\x25\xb2\x68\x20\xee\xf4\xaa\xf7\xe2\x51\xe9\xf3\xae\xfb\x3f\xb0\x55\xf5\x4d\x48\xd5\xe7\x7f\xf8\xe7\x0f\x1d\xe8\x5b\xad\xff\xf3\xce\xe7\xa9\x3a\xcb\xab\xe1\x9b\x1a\xf9\x2e\x6e\x68\xed\x7b\x1f\xda\x24\xc2\x4b\x57\x39\x1e\x12\x49\x15\x56\x69\x56\xa3\xd0\x83\xf6\x43\x5e\x19\x93\x48\x65\x6a\x0b\x58\xbb\xaf\x07\x11\xb7\xd5\xce\x22\x2e\xe8\xcf\x04\xf1\x54\x25\x69\x4d\xa9\x2c\x78\x91\x98\x3b\x4f\x42\xfb\xcb\x5a\xb8\xe4\x27\x12\xa4\xc6\xbd\x4f\x62\xae\x88\xab\x7f\xeb\x47\xe0\x4a\x9b\x16\xea\xcf\x9a\x6f\x7d\x33\xca\x9d\x07\xd1\xc5\x10\x98\x7e\xdf\xa6\xbc\x84\xcd\xba\x8d\xf9\x1d\x71\x4e\x48\x90\x83\x12\x41\xee\x28\x4f\xa5\x49\x54\x96\xa6\x18\x69\x6d\x45\x0a\x18\x7b\xee\x3c\x2c\x38\xf7\xa0\xd1\x86\x29\x48\x01\x9d\x10\xa8\xa9\xaa\x66\x1c\x93\x10\x20\x79\xf7\xf4\xab\x2d\xa2\x0d\xf9\xca\x98\x99\xfa\x01\xc4\xc6\x9b\xd4\x15\xb3\xb0\xc3\x83\xd2\x89\x2e\x0d\x15\xcf\x14\x31\xa0\xfc\xb2\xdb\x39\x47\xa6\xe4\xa1\xc8\x32\xa8\x43\x22\x93\xf4\xe9\xaf\x8e\x26\x6a\x9a\x6b\x00\x1c\x1f\xee\xe0\x96\x88\x2e\x8d\x21\x49\x98\x67\xe5\x53\xcc\x46\xd0\xe2\xd9\xab\xb0\xf0\x4a\x57\x1f\x70\xbe\xfd\x50\x82\x65\xc3\x4a\xef\xa0\xcf\xa7\x13\xa2\xdc\x06\xf1\xc1\xf5\x91\x08\x01\x4a\x80\x07\xa5\x22\xda\x18\xdd\x74\x35\x3e\x83\x4d\xe9\x3e\xcc\x95\xd4\xba\xe8\x26\xe3\x26\x30\x03\x2f\x78\xe9\xfc\xa3\x35\x6e\x00\x37\xa6\xd2\x27\x35\x18\xbc\x25\x76\x2d\x40\x79\xec\xfb\xda\x54\x9e\x47\x58\x29\x12\x27\x0a\xcd\x30\x8d\x48\xe8\xaa\x1d\x72\xf1\xf8\x78\xcd\xae\xd9\x95\x29\x26\x0e\x11\x7e\x50\xe4\xb6\x93\x15\xaf\x96\xb0\xcc\xf0\x1d\xa6\x91\x09\x2f\xd6\xbb\x44\x1f\xc6\x73\x7a\x47\x80\xb3\xbe\xf3\xfd\x3d\x46\x33\x1c\x81\xbb\xce\xc6\xb2\xb0\xac\x8e\x32\x54\x76\x5a\xa5\x62\xb5\x42\x92\x2b\xb6\xdc\x29\x54\x5b\x76\x1e\x7b\x7d\x78\x26\x9c\x51\x13\x6b\x2c\x43\xa8\xd5\xac\xa7\xb0\x14\xf9\xee\xbb\xc3\x2c\x57\xb2\x52\xbe\xb6\x90\xe3\x91\x34\xad\x38\x64\x1a\xa3\x90\x13\x99\xc7\x05\x43\x82\x3e\x8a\x89\xc2\x21\xf6\x46\x36\x9d\x61\x24\x53\xa8\xbe\x6f\xca\x49\xf3\x69\x41\xc0\x2e\x22\x02\xa3\xa5\xe1\x41\x88\x8b\x61\xc4\x10\x76\xa0\x25\x30\x8b\xc9\x54\xdb\x07\xe4\x92\x42\x7d\x1d\xcf\x80\xd2\x38\x29\xd5\xf7\xd5\xac\x23\x38\x84\xe3\xcb\x14\xb2\xf5\xd0\xfc\x91\x47\xd0\xa2\xa6\xa2\x18\x2f\x61\xa6\xdb\x97\x33\x5e\x53\x4f\xf1\xfe\xc1\xf9\xc7\xe1\xf8\xe2\xfc\xc3\xe0\x7c\x82\x3e\xf6\xc7\xc3\xfe\x57\x67\x03\xf4\x6e\x7c\x71\x35\xf2\x45\x2f\xbe\x1b\x5f\x8d\x2e\x2e\xd1\xe9\x20\x7f\xff\x74\x80\x06\xe7\x93\x8b\xf1\xf9\x45\x6b\x24\xbe\xad\x51\x8b\xc5\xb3\x5f\xaa\xd0\x78\x11\x64\x2f\xb4\x82\xdb\x2e\x3a\xd3\x45\x53\x78\x3e\x1a\xfc\x71\xf0\x61\x74\x76\x71\xe9\xf9\x38\x4e\x94\x29\x9d\x8d\xb8\x40\x33\x1e\x85\xde\x28\x1e\x0f\x00\x73\x2e\x40\x04\x4a\x22\xf8\x4f\x4b\xd7\xbd\xa5\x3f\x1a\xba\xe8\x5f\x9f\x0d\xe9\x7d\xb1\x25\x36\xfc\x16\x53\xe3\x72\x48\x9c\x1a\x1b\xc2\x55\x07\x80\xf5\x22\x33\x68\x8c\xec\x2c\xf3\x60\xdf\xac\xd8\x41\x7f\x34\xac\x25\x73\x7b\xa3\xdc\xfb\x7d\x9a\xe4\xca\xd4\xec\xc9\x22\x57\x45\xe1\xe1\xec\x71\x55\x43\x68\x63\x8e\xf3\x52\xbb\x85\x3d\xce\xd2\xc2\x05\xb4\x5c\x9c\x42\x9b\xe5\x88\xfb\xd6\x71\x8e\x59\xdf\x1f\x25\x95\xc0\x7c\x56\x87\xa3\x9d\x19\xee\xfd\x76\x46\x38\x8b\xab\x6c\x83\x2b\x08\x51\x9b\xcd\x6f\x25\xee\xfa\x8c\x6e\x56\x94\x72\x52\xd4\xd3\x2f\x6d\xcc\x70\x05\x1a\x0f\x69\x85\x7b\xff\x0c\x36\xb8\xa8\x6e\x88\xcf\x65\x71\x7b\x5f\x69\x5a\x08\x49\xa5\x6d\x61\xaf\xd6\xb6\xd5\x61\xee\x6a\x6c\xdb\x6e\xa4\x87\x33\xb5\x1d\x72\xf8\x3b\x5a\xda\xf6\xc8\x8a\xbd\xd9\x92\x2a\xf8\xf1\xbc\x66\x36\x0f\x53\x0e\x63\x64\xab\x22\xab\x9e\x2d\xdb\x5a\xd8\xde\xef\xcd\xbe\xe6\x25\xa5\xad\x79\xad\x01\x49\x05\xb7\x76\x15\x5c\x0f\x7d\x61\xc2\x29\x53\xe8\xa5\x26\x6a\xa1\x54\x02\xdd\x0c\x3f\xf3\x89\xb5\xfe\xf7\xeb\xc1\x87\x24\x11\x24\xc0\xfe\xce\xc7\xbe\xef\xef\xf2\x24\xd4\x87\x87\xde\x47\x6c\xad\xf1\xe8\x1e\x4b\x5b\xc2\x59\xf9\x58\x76\x56\x9d\xc0\x5a\x02\xc3\x9c\x92\x4a\xa4\xd2\x2f\x06\xd4\xab\x66\x82\x6a\x6b\x77\x5a\x65\xb4\x9a\xe6\xc8\xbb\xab\xe1\xe9\xd1\xb1\xaf\x36\x98\x05\x61\x36\x4a\x48\x6c\x1f\xd9\x9a\x25\xef\xe6\xd5\x81\xad\x21\x0c\xa4\x0f\xd3\x18\x06\x04\xf9\x4d\x24\x98\x7a\xcd\x99\x58\x5e\x07\x3a\x70\x89\xde\x79\x61\x34\x1a\x91\xcd\xa3\x5c\x2b\x09\x6d\xba\xb4\xd9\x72\x68\xf5\xc3\xc9\x70\xda\xe1\x6c\x6e\x36\xbf\x82\xb6\x98\x60\x58\xfc\xb8\x09\x4e\x65\xab\x60\x6f\x6c\x53\xe1\x1f\xaa\x8a\x93\x4d\x4d\x28\x56\x90\xd6\x56\xdb\xae\x18\x5c\x3a\xf5\x5a\x65\x57\x21\x57\xe5\xe7\x37\x68\x72\xb1\x3e\x3a\x5f\xc2\xfe\xe6\x06\x17\x1e\x92\xec\xf7\xed\x0e\x05\x00\x15\x56\x06\x1b\x9b\x7d\xd3\x66\x6c\x79\x57\xf4\xda\x90\xe3\x0a\xc0\x4d\x88\xab\x0e\x3c\x6e\x52\xf3\xbd\x92\x40\x4f\xdc\x71\x83\x4a\xef\xcd\xe9\xda\x2b\x51\xcd\x29\x2a\xae\x08\x73\xbf\xa3\x6b\xf6\xc1\xe5\x1c\x1b\xf5\x04\x52\xe0\x33\x75\x05\x72\x37\x04\x51\xa9\x60\x24\xec\xa1\x91\xa9\x00\xa1\x75\x95\xa3\x60\x86\x82\x54\x44\x47\xe6\x0b\xa7\x94\x42\x33\x1d\xca\x9c\x39\x6d\xab\x55\xe7\xf5\x97\xd5\xa6\x3a\x24\x82\x87\xa9\xbe\x5b\x20\xff\xcc\x31\x71\x45\xa3\xad\xba\xd3\xb7\xa3\xc5\x08\x17\x87\xa1\xa8\x20\x65\xd4\x12\x97\xb5\x29\x83\xe3\x3b\x5f\x0c\xde\x0a\xa3\xd9\xda\xba\x33\x46\xcc\xe2\x01\x5e\xfa\xbc\x11\x56\x99\x70\x26\xc9\x76\x68\xf5\xd7\x9a\x68\xdc\x14\x2d\xf1\x49\x79\x9b\x70\xee\x34\xff\x5e\xac\xb5\xd3\xdf\x1c\x77\xc3\x99\x9e\x51\x06\x72\x47\xee\x54\xd0\x4a\x66\xab\x23\x6e\x9a\x4a\xd7\xbb\xde\x08\x43\x32\xe6\xb2\xe0\x13\x90\x8d\x0f\xb8\x75\x62\x4c\x2a\x66\xf3\x93\xcd\xd2\xe2\x32\x29\xd7\xa8\x68\x4c\xc2\x1e\x8e\x7e\x47\xcb\xee\x07\x7f\x03\xa2\xf6\x48\x51\x63\x72\x36\xf4\x6c\xaa\x40\xbb\xa9\x0b\x53\x19\xfe\xaa\x8c\x9e\xdf\xdf\x4d\xe2\x5b\xd7\xd6\x67\x9d\xac\xee\x03\xbd\x03\x95\xfb\x25\xac\x19\x2d\x55\x51\xf0\xdb\x2c\x8f\xea\xf8\xf5\x86\xb4\x70\x71\x8f\x05\x90\xa3\x4f\xa5\xcd\x8a\x86\x20\xd6\xd1\xad\x65\x38\x68\x61\x51\xaf\x5c\xcc\x4d\x29\x67\x88\x27\x09\x78\xd8\x40\x95\xe1\x53\x45\x18\x11\xc5\x36\x85\x97\x97\xef\x9b\x63\xa1\x6c\xc6\xbd\x3a\xf5\x2a\x92\x8a\xca\xda\x1a\x59\x13\x5c\xc5\x76\x8c\x32\x8d\x63\xe8\x67\xd7\x62\x70\x82\xc8\x34\x36\xfd\x06\xcb\xd6\xef\x66\x43\xcd\xbb\x9d\xbb\xea\xd9\xd6\x51\xfa\xf0\xd0\x7b\x4b\x23\x32\xc2\x6a\xb1\x79\x15\x15\xf8\x10\xb9\x76\xe5\x36\x46\x44\xe6\xee\xe1\x4a\xc8\x0d\x68\x04\x07\x9a\xe6\xef\xf6\xd3\x91\xa9\x79\x4d\xf0\x71\x66\x4a\xe6\x98\xdc\x9e\x76\xcb\x2d\x65\xd9\x72\xab\x4e\xe5\x49\x99\xa9\x1d\x94\xca\x86\x4b\xde\x72\xcd\xf9\xbe\xcd\x24\x09\x92\xf0\xe6\x44\x15\xbd\xd9\x0e\x5e\x36\x2b\x05\xe7\x76\x33\x82\x4c\xe5\x21\xd3\x98\x90\x98\xb6\x79\x59\x2e\x42\x43\x15\xae\x30\x51\xe9\x34\xeb\x0c\x0a\x40\xe9\x9c\x86\xa5\xc8\x84\x3a\x92\xa0\xc6\x03\x8e\xe8\xcf\x9a\xae\xf1\xe8\xc4\x99\x4d\x37\xb3\xc6\xc4\xe0\x98\x00\x97\xa2\x99\x73\x3c\x3a\xa9\xe7\x42\x8c\x85\x5c\x60\x90\xe2\xfe\x78\x79\xe1\xab\x29\xb4\xa2\x88\x17\x8b\x44\xc1\x57\x35\x08\x78\x42\x58\x7e\xd4\x41\x3f\x5c\xe0\xee\x46\x0b\x15\xb4\xd3\x8a\xa0\x52\x1a\xf9\x09\x18\xba\xf1\xc0\x73\xb8\x1a\xf5\xef\x5a\xc1\x54\xb2\x12\x79\x35\xf1\x3a\xec\x09\x16\xb2\x29\x1f\x31\xb3\x93\xb5\x89\x7d\x0e\xa8\xad\x9a\xd5\x18\x2e\x54\x15\x74\xb5\xb0\x9a\x20\x70\x1a\xcb\x16\x3a\x69\x42\x84\x3e\x9d\x5a\xd8\xfe\x04\xc9\xfb\xe5\x35\xb2\x00\x26\x82\x3b\xb3\x27\x4e\x8c\x6d\x0c\x1a\xef\x43\xb7\x74\x38\x79\x8f\xda\x6c\x58\x03\xce\x4a\xfc\x76\xda\xe5\xfa\x9d\x83\x88\x1f\x43\x4b\x62\x0f\x40\xdd\x16\xe4\xe4\x27\xae\x3e\x21\x88\xd8\xbc\x0d\x33\x5a\xf2\xf0\x21\x17\x6b\x51\xbf\x17\x05\xc1\xe1\xab\x7b\x41\xed\xb5\xcc\x66\x74\xee\xc5\xb6\x09\xce\xba\xe9\xb7\xb9\x44\x18\x11\x52\x63\x02\x6e\x26\x0f\x3a\x1a\x36\xec\x91\x32\xce\xa2\x1e\xdf\x06\x38\xcc\x4f\x23\x0c\x19\x78\xe4\xab\x18\x59\x83\xa1\xf1\x0a\x58\x1b\x4c\xab\x45\x30\x13\x04\xc2\x47\x77\x5b\x02\x19\x14\x9e\xe7\x27\x37\x91\xca\x19\xbf\xb3\x87\x0c\x79\xfa\x4f\x7d\x51\xeb\xcf\x37\x91\x1c\xf3\xbb\x82\xa0\xe2\x7a\x32\x6f\x45\x37\xc3\xf1\x1e\x2c\xc4\x50\x54\x95\x67\x3d\x94\xf7\x66\x24\xb6\x87\x35\xc8\xa4\x0d\xd6\x9c\x3d\xa8\x21\x82\x4f\x6e\x5a\x71\x19\xe4\x4c\xfa\x84\x9e\xee\xa5\x95\xd7\xc2\x46\x9e\xa1\x2e\x0b\xa4\x05\xe9\x33\x97\x00\xf3\xa5\xd9\x94\x0d\x92\x47\x77\x59\x6d\x80\x16\x67\x8b\xf9\xd2\x6e\x8f\x54\xe1\xc6\xc7\x09\x84\x59\xaf\xa8\x4b\x6d\xf8\xe1\xfa\xcc\x8b\x2d\xaf\x04\x41\x94\xa0\x04\xc6\x2c\x15\x0e\x6e\x9b\xec\xa5\x20\x4d\x88\xed\x56\xad\xd7\xdc\xa6\x5d\x54\x46\xd0\xea\xfe\xcb\x71\x69\x44\xb2\xf1\xa0\x52\xc6\x5c\x41\x6f\xf8\xe6\x24\xe2\x69\x08\x85\x7c\x79\x14\x11\xf1\x81\x48\x89\xe7\xfe\x4a\x0b\x75\xb0\x25\xbe\x2b\x5e\x42\x6d\x46\x33\x4f\xb1\x08\x57\x6d\x47\x4d\xc7\x04\x6d\x81\xf7\x70\x84\x64\xfd\x81\xf7\x7b\x82\x64\xe4\x99\xfc\x91\x1b\x08\x77\xbe\x51\xcb\x84\x34\xb2\x3e\x17\xa8\x5a\x07\xb0\xd1\xfc\x6c\xfc\x95\x2b\xbb\xa8\x51\x3b\xe3\x5c\x9d\xc1\x62\xbe\xb6\x89\x9a\xf4\x2d\x5e\xa5\x60\xc7\xe9\xb1\x74\xec\x73\x6a\x9c\xe8\xa5\xf8\x16\xde\x64\xd7\x4c\x98\x6d\xe5\x51\xfe\x99\x26\xc9\xca\xb4\x6c\x64\x00\x8f\xad\x3f\xaf\x51\xcc\x23\x7c\x56\x69\xee\x44\x54\xda\xe4\xe3\x04\x4b\x5b\xe9\x1c\x4b\x13\x82\x29\xe6\x90\x8a\x61\x22\x71\x46\x5c\x42\x41\xc5\x23\x34\x4d\x55\xf1\x9f\xfa\xee\xa2\xd0\x1b\xcd\x64\x19\xcc\x89\xe8\x21\xf4\x56\xeb\xca\x5c\x10\x24\x97\x4c\xe1\x9f\xd0\x82\x44\x49\x07\x9a\xee\x7d\x1f\xcc\x5c\xcf\xc4\x7c\x15\x74\x17\xdf\xfb\xbc\x7b\x83\xc8\xba\xbb\xaa\xe9\x97\xc4\x66\x24\x24\x58\x42\xb0\x0d\x84\x63\x39\xda\x6d\x10\x6e\x4e\x6e\x47\x6b\x5f\xbc\x48\x3f\x23\x01\x91\x54\x41\x7c\x2c\x61\x8a\x08\xde\x43\xa6\xda\x73\x66\x3f\x79\xfa\x45\x22\xbc\x4c\x43\xad\x7c\x4d\x05\xe8\x15\x92\xea\x61\x51\xd9\x71\x5d\xff\xea\x06\xe6\x9f\x94\x6d\xe4\xa4\x63\x74\xce\x4d\x1d\x73\x28\x69\xbd\x21\xf3\x2c\xff\xc4\x75\x69\x34\xa5\xd4\x43\x8e\xf4\xe9\xff\xf4\xf7\xac\x75\x7f\x1e\x42\xeb\xc9\x79\xb2\xa0\xb4\x74\x12\x22\x9e\x2a\x74\x8f\xcd\x9e\x01\x0a\xe4\x92\x05\xe8\x07\x3e\x05\x0d\x70\x20\x04\xa4\xed\x1c\xe9\xfd\x34\xa3\x8c\x4a\x5f\x6d\x77\x0b\xd4\x12\xf7\x53\x40\x4c\xeb\xfa\x08\x29\x4a\x62\x53\xba\x87\x48\x7d\xbb\xe5\x61\xa8\x33\xaa\xb5\xf6\x00\x84\x17\xa5\x77\xde\x0f\x1c\x61\xf9\xf4\x2b\x0b\x04\x67\xbc\x8c\xbf\x76\x24\x1b\xb6\xb7\xe7\x5b\x93\x3a\x27\x21\x77\x0e\xc4\x36\x93\xd8\x46\x6c\x93\x78\x12\x42\x78\x3e\xb1\x91\x54\xbe\x61\x9b\x74\x3a\x88\xb7\xcd\x34\x7a\x50\x20\x53\x66\x58\x86\xa3\x3c\xee\xde\xa6\xed\x28\xca\x7c\x16\xcc\x9f\x12\x63\x8e\x2b\xda\x93\x4d\x54\xb3\xb1\xc9\x22\x3e\x43\xb7\x64\xf9\xea\x0e\x47\xa9\x9e\x6a\x2a\xe4\x35\xb3\x56\xa0\x00\x3a\x26\xc2\xd6\xcf\xb4\x46\x46\xb0\x38\xbe\x66\x9a\x97\xdf\xc4\xd1\x25\xa3\x49\x42\x94\xe6\xa7\xd7\x47\x6d\x66\x69\x6a\x23\x85\xcb\x76\x81\x59\x4a\x6c\x28\x7c\x66\x1f\x36\xc5\xd3\xf5\xb9\x01\xd5\xcc\x5e\x41\x87\xc5\x6b\xe6\x75\x76\x9b\xb3\xb5\xd0\x9c\x31\x20\x22\xd0\x90\x2a\xa9\x6c\xcc\x24\x59\xe2\x52\xe3\xd1\xc9\x72\x0f\x05\x18\x1f\xcb\x07\xb8\x01\x7f\x5e\x26\xc9\x21\x97\xc4\xcd\x10\xfa\xef\xd7\xe9\xeb\xd7\x5f\x40\xcb\xc9\x94\x74\xe0\xb4\xa5\x0a\xc2\xe7\xa0\x14\xd0\x64\x99\x10\x7f\x00\xce\x2a\xa5\x39\x26\x37\x05\xfa\xbc\xfa\x21\xb5\xa9\x60\xc0\x74\xb8\x3b\xf5\x1c\x48\x87\xdb\x1e\x92\xb3\x14\x34\x86\x02\xd2\x8d\xc3\x1a\x09\x9e\x10\xa1\x96\x2b\xc3\x9b\x72\x1e\x11\x5c\xd7\xe3\x63\x95\xea\x15\x40\x19\xf5\x86\x62\x0b\xcf\x1b\xf9\xb7\x99\x22\xb7\x27\xec\x8d\x25\x77\x27\xad\xb0\xb6\xcd\x35\x22\x77\xa7\x4e\x2a\x41\xd9\x7c\xbf\xc4\x49\x22\x28\xd9\x81\x36\x96\xc6\x53\x22\xd6\x17\xa6\x7b\xbd\xf5\x02\xf5\x4d\x35\x7b\xfa\x7b\x4c\x04\x5f\x5b\x8c\xab\x88\x2a\x07\xf2\xb6\x3f\x3c\x1b\x9c\x7a\x88\x78\xdb\x3f\x3b\x1b\x9e\x7a\x52\xdd\xde\x0e\xfa\x93\xab\xf1\x00\xbd\x3d\xeb\xbf\xf3\xe5\x7d\x9d\x0e\x2f\x27\xc3\xf3\xc9\xf0\xa3\x49\x70\x3b\xe9\x8f\xfb\x27\x93\xc1\xf8\xe9\x7f\x5e\x4e\x86\x27\x7d\x4f\x3a\x58\x09\xb0\x37\xa1\xb4\x1e\xb2\xc7\xa7\xf8\x16\xd2\x4a\x91\xa9\x72\xed\x3c\xd4\x82\x9b\x9c\xd2\x54\xd6\x98\xad\x56\x93\x3e\x5d\xe5\x6a\x12\xe9\xef\x01\x0e\xce\xc2\x08\x7d\x3a\xac\x45\x3f\x23\x2a\x58\x94\xa4\x7b\xd9\x2e\x6a\x11\x27\x6a\xc5\x5b\x52\x94\xe9\x1b\x04\x2d\xae\x12\x62\xa2\x27\xa4\x8b\x9a\xcf\xf2\xd0\x4a\xfe\xf6\x5e\x8b\x48\x55\x43\xa1\x0d\xa5\x90\x0d\x82\xe0\x7b\x9b\x4c\x1c\x1e\x92\xb7\x61\x9c\x23\x6b\x0b\x46\x91\x3b\xc2\x94\x6c\xab\x0c\x02\x56\x99\x06\x44\xf2\xd5\x6f\x1b\x61\xe5\x62\xde\x35\x81\x82\x7a\x82\x60\xbd\x1a\xde\x8d\x79\x44\x26\xdc\x16\x5b\x58\x61\x64\x0b\x86\x64\xb9\x4a\x39\x22\x17\x28\xa5\x17\x77\x43\x5c\x4d\x87\xb2\x1d\xfb\xca\xc9\x35\xdb\x70\x11\xac\x70\xc2\x54\xce\x94\xed\x17\x33\x54\xc8\x94\xa6\x20\x86\x20\x81\x4d\xdd\x16\xad\x17\xae\x29\xe3\xd0\x1e\x3f\xd4\x63\x68\x8d\x0d\xc2\x5e\x2a\x16\x0f\xc4\xae\xec\x7b\xf9\x14\x91\xad\x2c\xa0\x66\xf8\x9a\x0f\xa9\xb8\x79\x5b\x85\x3c\x59\x9a\x5d\x18\x9c\x17\x4c\x1d\x29\x5a\xaa\xb6\x5d\xe8\xc1\xaf\x1f\x21\xa5\x75\x30\x81\xc5\x12\xfd\x4c\x8d\x51\x24\x4b\xcd\xda\xd4\x15\xa5\x21\xa6\x1f\x24\x37\x89\xb8\xae\x57\xcc\x8d\xcb\xf8\x6f\x91\x15\x01\x40\xdc\x61\x9c\xab\x53\x65\x90\x0d\x09\x72\x2a\x50\x47\x8b\x4d\xb6\x2c\x43\x02\x2d\x8d\xaa\xfa\xbd\x35\xbe\x58\xb3\x90\xfc\x5c\x85\xe9\xe4\xd9\x2c\xee\xf6\xcd\xdd\xd1\x55\xa9\x30\x1b\xee\x5f\xc5\x51\x8c\x6f\xb3\x10\x0f\x53\xe3\xc5\x10\xd9\x62\xed\x73\x76\x47\x84\xa2\xc6\x9b\x69\x21\x31\x57\xfe\x65\x15\xd8\x46\x72\x20\x5a\xa2\xce\xc5\xef\xf8\xc4\xca\x8c\x6a\x16\x32\x91\x63\x32\x85\x58\x8c\xbb\xab\x7e\xe9\xac\x97\xb9\xc8\x3c\x03\xf9\xca\x01\x40\x9b\x70\xde\xc3\x42\xb5\xc9\xc2\x90\xa5\xfb\x5c\x1d\x31\xb3\xd9\xb2\xce\x94\x52\x4e\x31\x44\x1e\xed\xbf\x9e\x7c\xb3\xea\xa4\x6f\x6d\x9a\xf2\xc3\x43\xcf\xfe\xf9\x36\xc2\xf3\xc7\x47\x64\x4b\x0b\x7a\x83\xf8\x4f\x56\x92\x8e\xd7\x00\xe4\xa1\xee\x21\x6e\x8b\xdc\x24\x54\x6f\x8f\xbb\x29\x66\x7f\x97\xb5\x12\x02\x4f\x80\xc9\x5b\x7d\xbc\x32\xae\xac\x5d\x0f\x4e\xe0\x68\xd9\x31\x9b\x5a\xea\x81\x41\x4e\xb7\x7e\x8b\xfc\x44\xa5\x92\x08\x2b\x5b\x07\x06\x1a\x61\x3c\x3c\xf4\xf4\x8f\x49\x5d\xcc\x5e\x95\x1d\xb0\x60\xb3\x06\x9c\xfa\x80\x23\x1d\x84\x25\x99\x3f\xfd\x5d\x10\x09\x47\x90\x56\xd6\x0a\x2f\x02\x01\xd8\xb5\x9d\x7c\xfa\xd5\xac\x3a\x9b\x58\x8d\x43\xbc\x42\x4c\xf5\x78\xb9\x08\x88\x6d\xca\x81\x5e\x86\xa6\xa2\x52\x22\x38\x14\xca\xe1\xc2\xb8\xc0\x45\x0c\xb4\xfb\x2a\xfa\xbc\xe5\x02\xfa\xf1\xe5\x15\xb5\x5f\x32\x8e\xee\x8c\x9b\x11\x17\x1c\xa1\x70\x3b\xc8\x34\x03\x5a\xd7\x53\xa6\x40\x98\x56\x16\xee\xa9\x5a\xf0\x54\x95\xe8\xa9\x27\xa7\xd4\x1f\x03\x49\xca\xca\x68\xeb\xb0\xda\x0a\x40\x26\x21\x1e\x4e\xdf\xad\xd0\xdb\xe2\x3d\x6b\x05\x70\x5a\xd1\x12\xd3\xb9\xc0\xdb\xb3\x00\x3e\x0f\xda\xb3\xa0\x4d\xe9\xd7\x1c\x5b\xb1\xf0\x6b\x48\x36\xd6\x7e\x35\xa8\xac\x6b\xd9\x1d\xde\x6e\x98\x66\x11\xd6\xa3\x24\x99\x5b\xb9\x50\xcc\x0d\x06\xba\x21\x42\xcb\x60\x4e\xd9\xd4\x46\x70\xb7\xe7\x2d\xb4\x01\x94\x84\x45\xfa\x1e\x69\xc8\xda\x77\x83\xc9\x64\x78\xfe\x0e\x5d\x4e\xfa\xe3\x89\xd7\x32\x72\xf2\xf4\xbf\x3e\x5c\xa0\xc1\x87\xd1\xe0\x3f\xfa\xe3\x46\x80\x7c\x86\x8c\x12\x24\x8f\xd9\xe2\xdd\xd9\xc5\x57\xfd\x33\x74\x31\x9a\x0c\x2f\xfc\x7d\x13\x2f\x46\x27\xc3\x8b\xf3\xc1\x25\x32\xaf\x0f\x7c\x46\x90\x77\x44\x21\x9c\xc7\x4f\x64\x1d\x66\x21\xc3\x46\x2e\x50\x10\x51\xad\xe4\xfa\xb0\x64\x11\xbc\xe5\x66\xb3\x2b\x51\x13\x46\xc8\xe4\xd2\x42\xb3\xe5\x03\x7c\x95\xda\x34\x49\xfa\xcc\x5e\xf7\xd6\x1a\x3b\xbc\x5e\x76\x75\x7d\x81\x2e\xf2\x40\x6f\x63\xf8\x5c\x07\x64\x6b\x76\x78\x9d\x36\xef\x5c\xa0\x79\xe4\xc2\x5c\x5d\xad\xbd\x18\x8b\x5b\xa2\x12\xbd\x88\xfc\x92\x06\x50\x60\x2a\x98\xe7\x85\x13\x5c\xb8\xac\x89\x6f\x8b\x89\x08\x70\xc8\xbd\x22\xc1\xbb\x3c\xd4\x5d\x1e\xa6\x99\x4e\x81\x48\x40\xf2\x2c\xcd\x73\xdc\xb0\x0a\xc6\xae\x5e\xcf\x9b\xb5\x56\x20\xd1\x6b\xdf\x82\xcf\x6b\x71\x39\x7b\x96\xbf\x7d\x7c\x4b\x76\x65\x96\xac\xc6\xdd\xe2\x5b\x70\x86\x14\x8a\x01\xc8\x3d\xb5\x8c\x6f\x39\xbe\x1c\x7d\xa1\xa0\x40\x45\xad\xa0\x7d\x0b\xcb\x6d\xb8\x04\xa6\xb7\x43\xb0\xa7\xc9\x62\xb4\xd6\xbb\xa2\xf3\xf7\xa0\xbc\xd8\xb4\xc2\x4d\xa4\xf2\x27\x59\x2b\x59\xe4\xf0\x73\xf1\xa2\x9e\x13\xb6\xc4\x2c\x1c\xf5\x28\x0b\x11\x7a\x1e\xae\x94\x69\x58\xbf\xb7\x66\x26\x1c\x23\xa3\xa2\xc9\x48\xaa\xa1\xd4\x4d\x4b\x2e\xbc\xfa\x2e\xbf\x9a\x98\x27\x87\x9c\xb2\x19\xdf\xb5\x6a\x4e\x61\x91\x94\x12\x8b\xf6\x5b\x1c\x68\x8d\xe2\xfd\x35\x45\x2a\xb1\xb3\x62\x0c\xfb\x6f\x94\xb4\x3e\x98\x4d\x9d\x62\x56\x27\xa6\xa1\x29\xa4\x76\x6e\xb6\x68\x1c\xb3\x3e\x75\xcd\x0c\x1f\x6e\xc0\x9f\xa0\x3b\x5c\x81\x05\x9f\xbe\x39\x5c\x81\x0f\xf2\x99\x06\x6d\x83\x17\x9e\x75\x78\xbe\xba\x6c\x4d\xee\xdc\x26\xf5\xd4\x36\xdd\x93\x46\x9d\x97\x79\x07\xe3\x3c\x8f\x8f\x48\xd4\xeb\xf5\x6a\x4f\x56\x2b\x88\x5a\x18\xa5\x8e\xc4\x85\x7c\x40\x09\x60\x9a\x93\x91\x7d\xba\x44\xbe\x38\xa1\xf2\x41\x94\x13\x50\xca\x43\x44\x9e\xf8\x1d\x87\xb4\xb2\x2d\x16\x1c\x34\x5b\x1d\xe9\x15\xd9\xbb\xbb\x76\xfc\x2b\x51\xda\xa6\x7e\x5f\x89\x2c\x69\xe8\x68\x55\x71\xcf\x61\x2e\x39\x05\xd7\x08\x40\x0d\x57\xaa\x5e\x10\x1e\xff\xe0\x76\xcb\xd6\xd6\x7a\xaf\xd8\xe9\xad\x7b\x21\x56\x82\x6c\x3f\x44\x53\x0e\x7e\x97\xc1\x54\x0a\x17\x0d\x45\xb0\x76\x54\x36\x90\x37\x5a\x48\xa0\x68\xc7\x21\x1e\x7c\x2c\x5b\x92\x9c\x3a\x0d\x02\x7a\x56\x94\x65\x28\x64\xdb\x9e\x99\x87\xef\xf4\xb3\xf3\xe6\x5b\x52\x90\x79\x84\x65\x8d\xc8\x54\x07\xbd\x96\xe8\x32\x99\x72\x3b\xb9\x2e\xdf\xa9\xb9\x0c\xd7\x56\x5e\xcb\xfa\x5a\x9a\x02\x95\xdb\x29\x52\x59\x33\xa3\xb5\xc6\x95\x2d\x4e\xb0\x15\x4a\xf4\x84\xe6\x2d\x2c\xbf\x82\xbf\xf4\x22\x64\x61\x55\x64\x4f\xf6\xef\xad\x95\xc1\xf5\x31\xb8\x69\x2f\xb7\xbf\x2c\x12\xb3\xf4\x2d\xe8\x22\x39\x07\x65\xc5\x7a\xdd\xd0\x03\xf2\xa8\xd4\xb7\xaa\x15\x9b\xaa\x2b\x8b\xfe\x86\x39\xf8\x8c\x4b\xc8\xcb\x9b\xc3\x0d\xfb\xd9\x46\xb7\x9f\x21\x3c\xe7\x7e\x7f\xb6\xe5\xf8\xac\x3b\xb7\x66\xf2\x3e\xf9\xbe\x7c\x96\x0d\xb8\xff\x1d\x96\xe5\x59\x57\x4a\xb7\x8d\xe8\x35\x49\xd7\xc6\x56\xdd\xba\x0b\x74\x63\x4a\xcd\x01\xb0\xb5\xf2\x5a\xda\xdc\x72\xf3\x25\xbf\x49\x5c\x2b\x35\x64\xb0\x7a\x18\x2c\xf5\x06\xb5\xdf\xb7\xb2\x8f\xac\xea\x7a\xd5\x6d\x1b\x1a\x15\x80\xdf\x6e\x02\x5a\x8d\xf4\xf9\x46\xd5\x94\xfe\x75\xef\xe1\xc1\xc2\x9c\x4a\x7b\xa3\xc2\xe5\xf8\x6c\x51\x4d\x6b\x2c\x78\xd6\x11\x3f\xfb\x28\x2b\x9a\x8f\x1f\xc6\xc2\x52\xd1\x8c\x7c\xcb\x63\x38\x27\x79\x77\x73\x4b\x81\xaa\x6d\x49\x91\x55\x2d\xd0\x6b\x17\x44\x53\x73\x4c\x5e\xe7\x92\xd4\x37\x3e\xdf\xb0\x04\x36\x9e\xcb\x0a\x07\xb7\xa6\x2e\xbd\xfe\xeb\xf1\xf1\xa8\xbc\xe8\xb3\x8b\xff\x00\x9e\x38\x5b\x32\xa1\x8c\xdd\x33\xde\x4a\x52\xf6\xe7\x85\x33\xd5\x18\x9e\x6f\xe8\x50\xc1\xe1\x13\x8d\x55\x61\x79\xbb\x2f\xdf\x6b\xc3\xf3\xae\x9e\x20\x13\x71\x5f\xb1\x93\xca\xd8\xcb\x7e\x9d\x0a\xfc\x9b\xd9\x9e\x85\xfa\x7b\xce\xda\x32\x66\xaf\x4f\xa9\x72\xb3\x6d\x3f\xc6\x6d\xaf\x8e\x36\xa3\x69\x79\x45\x44\x7c\x8a\x23\xc4\x21\x9b\xc0\xdb\x15\xb1\xfa\xdb\xf7\x83\xfe\xd9\xe4\xfd\xcd\xc9\xfb\xc1\xc9\xd7\x37\x93\x6f\x46\x83\xdd\xbe\x46\x71\x2a\x15\x9a\x12\x74\xfd\x22\xe1\x42\x5d\xbf\xe8\xe8\xbf\x4c\xed\x2e\xfd\x0f\x2e\xd0\xf5\x8b\x85\x52\xc9\xf5\x8b\x76\x88\x2e\x2e\x27\xad\x3f\x38\xef\x7f\x68\x39\x9c\xc9\x64\x64\xca\x8b\x41\xd7\xc7\x20\x4a\xc1\x31\x6b\xab\x2b\x9a\xb4\xf2\x29\x0f\x97\x30\x8e\xa3\x7f\x3b\x42\x33\x1e\x45\xfc\x9e\x84\x68\xba\x44\xd8\x04\x01\x43\x0d\x00\x68\xc3\x8a\x43\xf8\x30\x2b\x57\xe6\x4b\x2e\x84\x9a\x64\x80\x1a\x1b\xa4\xd4\x25\x56\x07\x29\x11\x89\x0b\x64\xcc\x02\x18\x3b\x88\x03\x72\xe8\x3f\xa8\x4f\x27\x0e\x15\x85\x6c\xc1\x00\xad\xa6\x64\x55\xc2\x6c\x31\x21\x48\x8f\x86\x0a\x58\xfa\x8a\xd2\xf8\x6a\xc6\x1f\x13\xb5\xe0\x21\x7a\xf9\x6e\x30\xe9\x8c\x2e\x2e\x27\x9d\xd1\xd5\xa4\x73\x3a\x38\x1b\x4c\x06\x1d\xa2\x02\x5f\xcc\xef\x87\xa7\xbf\x2a\x1e\x72\x33\x10\xff\xc7\xd5\x78\x57\xa3\x2a\x7c\x6b\x78\x3d\xd8\x80\xc2\x6e\x34\x00\x4e\xf4\x63\x93\x80\xea\xc1\xc3\xa5\x82\xf9\x31\xbd\x49\xe3\x65\x57\xa6\x53\x13\xbe\xe5\x1b\xd6\x79\xc6\xd5\x05\x97\x2a\xeb\x51\x1a\x53\xfb\x29\x65\x94\xfb\x46\xe5\xb0\x39\xb3\x37\xb0\xc6\x74\xdd\x7d\x69\x0b\x74\xd8\x40\xc8\x05\xd6\x7f\xda\x40\xb2\x86\xa4\x38\x4b\x08\xb4\xd5\x35\x5c\x87\xaa\x19\x60\xdf\xc9\x22\x22\xb3\x58\xb2\x80\xc7\x09\x16\x8a\x86\x5c\x6e\xa2\x37\xb5\x25\x47\x02\x1e\x4f\x29\xcb\x63\x8d\xd1\xe9\xc5\x87\xfe\xf0\x1c\x32\x3b\xa0\x19\xc0\xd2\xec\x0c\xd7\x47\x78\x4a\x6b\x7a\x15\x97\x68\xb7\x8d\xc8\xf4\xb1\x68\xd2\xde\x03\xce\x1c\x74\xa3\x13\x65\x2d\xf0\xb2\xba\x54\x08\x23\xc2\x22\xfc\x33\xf6\xf4\xab\xdb\x99\x7c\x13\xfc\xdb\x6a\x00\x2d\xe9\xb7\xf1\xc1\x0d\x87\xa0\xcf\xa0\x90\x30\xe5\x08\xcd\x97\x4f\x5b\x1a\x81\x24\x0b\xab\x44\x92\x06\x59\x4d\xca\xf0\xfc\x72\xd2\x3f\x3b\x1b\x9c\xa2\xd1\xd9\xd5\xbb\xe1\x39\x3a\xb9\xf8\xf0\xa1\x7f\x7e\xea\x4b\xbe\xd6\xbf\xf5\x27\x26\x3f\xda\x7e\x61\x40\xf4\x4f\x7d\x9d\x38\xbd\x28\x7c\xbb\xbf\x16\x87\x27\xfe\x18\x5e\x38\x3f\x19\xdc\x7c\x18\x7c\xb8\x18\x7f\xd3\xea\x3a\x18\xce\x19\x17\xa4\x5c\xb4\xd1\x03\x00\x5e\xc5\xa2\xba\x40\xa3\x07\x3a\x43\x7f\xa6\x2c\xe4\xf7\x12\x9d\xd8\x82\xcf\x67\x94\x99\xd6\x1b\x92\xb2\x79\x44\xba\x5a\x75\x22\x61\x07\x11\x19\xe0\x84\x84\x90\x73\x75\x8c\x8e\x1e\xae\xaf\xaf\x5f\xdc\xe1\x88\x86\xfa\x8f\x63\xfd\x3f\x3f\x48\xce\xf4\x7f\xbd\xb5\x40\x06\x20\x74\x44\x4f\xbf\x32\xb2\x5a\x09\xda\x91\xd1\x31\x2b\x26\x30\xb9\x5d\x06\x29\x0e\xcd\xda\x0e\x78\x4c\x23\xe8\x40\x4a\xe3\x04\x2a\x81\x6e\xa0\x62\xd3\x90\x47\xfc\x9e\x88\xcb\x05\x89\x22\x18\x70\xc8\xd3\xa9\x77\xc0\xd7\x2f\xea\x70\x79\x25\x89\x41\x15\xb6\x46\x83\x0c\xf9\x14\xc6\xb8\x11\xb1\x67\x94\x46\x70\xc8\x2a\x55\xda\xb2\xb7\x4e\x92\xa8\xed\x1a\x3f\xb4\x02\x40\x56\xf6\x16\x59\x48\xa6\x6a\xa5\x91\x1d\xeb\x7a\xc9\x0f\x19\x74\x5e\x0f\x14\xba\x92\x78\xee\x5b\xaf\x57\x12\x04\x1c\xf3\xa6\x77\x81\x96\x20\xf5\x50\x9f\xe5\xe5\xa7\xa8\x44\x31\x75\x2d\xbc\x6c\x57\x7c\x78\x39\x5a\x22\xc2\x82\x88\x4b\x12\xf6\xae\x99\x57\x81\x2e\x13\xd0\xab\x2c\x85\xc4\xf3\x54\x4c\x1c\xea\x73\xd6\x4c\x14\x7c\x82\x21\x1f\x4a\xcb\x3d\x59\x55\x29\x83\xae\xd9\x50\x4e\xb2\x12\xeb\x8c\xa0\x59\x84\xe7\x12\xbd\x24\x3f\x05\x24\x51\xa8\x3b\xfb\x0c\x05\x98\xe9\x21\x4d\x6d\xcb\x53\x12\xa2\xfb\x05\x61\xae\x8b\x3c\x8a\x5d\x43\x1d\x08\x6c\x37\xd1\x3e\xe5\x63\xc2\xa7\x0f\xac\x0e\xfb\xcc\xf4\xc6\x50\x94\xa9\xac\x3e\xee\xfa\x1e\xb5\xa4\x71\xa0\xcd\xf0\x24\x49\x49\x48\x98\x8d\x96\x86\xac\xc3\x95\x2e\xf5\x26\xca\x5a\x1a\x12\x8d\x24\x08\xcc\xaa\x38\x9f\x3c\x6a\xc5\x1a\xd3\x36\x4b\xfb\x46\xbe\x67\x9c\x91\xeb\x17\xd7\xd7\xec\xba\xf1\xf4\xaf\x83\x0e\xc9\x14\x0c\xa5\x05\xd8\xab\xa0\x9b\x51\x3d\x76\xa5\xd0\x8e\x70\x92\x40\x7b\x7c\xcd\xaa\xfc\x0f\x08\x7b\x3d\xd2\x6a\x9d\x5b\x49\xb2\xc5\xba\x05\xe8\x44\x90\x0d\xd0\xcb\xf5\xcf\x64\x8b\x95\x5a\x43\xfe\x21\x88\xde\x0f\xa9\x59\x63\x29\x97\xef\xb3\x07\x52\x2b\x60\xee\x81\xd4\xfe\x68\x84\x2e\x07\xe3\x8f\xc3\x93\xc1\x8d\x93\x15\x76\xa6\xb5\x12\xe8\x7e\x88\xbd\xd1\x4a\x2d\xb8\x20\xad\xb8\xb9\x07\x5a\x0d\xcc\xa5\x83\xb8\x6f\x42\xd7\xf7\xf6\x1e\x69\x5e\x07\xbe\x6f\xf2\x0f\xb1\x3a\x1c\xf5\x87\x5d\x24\x39\x9d\x5b\x93\x58\xa6\x67\x1f\xa4\xec\xc4\xb1\x32\x39\xdb\x70\xe7\xab\xab\xe1\xd9\xe9\xa8\x7f\xf2\x35\x00\xec\xa0\xf3\xc1\x9f\x6f\xca\xcf\x76\x9e\xdf\x06\x28\xf6\x30\xcd\x6e\xfb\x1f\x62\x85\x5a\xd8\x87\x59\x9f\x85\x73\x8b\xed\xb4\x2a\x2a\x8f\xab\x6d\x28\x3a\xeb\x7f\x35\x38\xeb\xa0\xd1\xf8\xe2\xe3\xf0\x74\x30\x06\x9e\x4e\x2e\xbe\x1e\xec\x7e\xb8\xae\x42\x5e\x5a\xb8\x7b\x60\xe3\x1a\xd1\x7b\x26\x75\x0f\x24\x5e\x8c\xdf\x95\x6e\xaa\x5d\xc8\xd3\xb0\xf6\x79\x43\xad\xd2\xb6\x23\xf7\x0e\x40\x9e\x3d\x3d\xfe\x74\x75\x31\xe9\xef\x83\xbe\x12\xbc\x3d\x90\x38\x1e\x8c\x2e\xf2\x5b\xf2\x6a\x7c\xb6\x33\x91\x39\xc4\x25\xc0\xdb\x03\x91\x97\x83\x93\xab\xf1\x70\xf2\xcd\xcd\xbb\xf1\xc5\xd5\x08\x28\xbd\x18\xbf\xeb\x58\x5f\x09\x8e\xd0\xe5\xa8\xbf\x87\x03\x73\x05\xcd\xd2\x20\x31\xb0\x79\x02\xd1\xf9\x51\xe7\x40\xe3\x19\xf5\x27\xef\x6f\x26\x17\x37\x7f\xbc\xbc\x38\xbf\x19\x5f\x9d\x0d\x2e\x6f\xde\x0e\xcf\x0e\x30\x26\x1f\xa2\xbd\x0f\xab\x93\xed\xce\x43\xcc\x4e\xc7\x6e\x56\x03\x7b\x2f\xc4\x9b\x4b\xf2\xab\xf1\xc5\xd7\x83\xb1\xb9\xef\xcb\xcf\xf6\x30\x82\x8d\x28\x0e\x30\x90\xab\xcb\xc1\xd8\x1c\x1a\xa3\xfe\xe5\xe5\x9f\x2f\xc6\xa7\x9d\xbd\xec\xf3\xa6\x78\xf6\x38\xa4\x4c\x80\x71\x0f\xbe\x1e\x7c\xb3\xb7\x71\x54\x02\x3f\x04\xf1\x7a\x4b\x14\xa7\x7e\x6f\x02\xdf\x1a\xc0\x65\x35\x9e\x43\x0d\xea\xa0\xb3\xb2\xdc\xfb\xbc\x98\x53\x69\x7f\xd2\x83\x01\xb8\x4f\xf9\x21\x27\x71\x3f\xf2\x83\xa3\x70\x6f\xd2\x03\x00\xec\xe6\x4a\x36\xfc\x13\xa0\x77\xf7\xa2\x84\x15\xe0\x2f\xd7\xa1\xef\x6b\x00\x46\x5a\x81\xad\x92\xff\x73\x2f\xa4\x57\x42\xde\x2f\xd9\x3b\x2a\xe5\x5e\xba\xb6\x21\x2b\xbf\x02\x40\x72\x1a\x5f\xec\x41\x80\xa9\x82\xb9\x07\x0e\xae\x80\x05\x36\x1c\x86\xe2\x22\xe8\x3d\x10\xbe\xa3\xba\x5d\x74\xb5\x6c\x85\x3e\x49\x6e\x18\x8e\x49\xc7\xc6\x39\xc0\x3f\x76\x66\x59\x35\xd4\x7d\x70\x6b\x27\xaa\x76\x42\x9d\x15\x2f\xb2\x23\x83\x3a\x82\xfa\x94\x4c\x6c\x7f\x94\x9d\xb9\x56\x89\x61\x99\xc3\xdf\x03\xff\x20\x04\x41\x13\x6d\x9b\xa5\xef\x4a\x32\xc0\x5b\x3a\x68\x7b\x20\x90\x47\xd0\x73\xc2\x04\x6c\x69\x42\x19\xb9\x2f\x3c\xd8\x91\xdc\x12\xf4\x65\x19\xf6\x9e\x88\xe7\x62\x8e\xcc\xf4\x69\xe8\xee\x5f\x7b\xa1\xdc\x03\x7a\x1f\x84\x8b\xf9\x01\x4e\x81\x6a\xa8\x7b\x20\xd7\xe6\x16\x74\x4a\x79\x22\x9d\xf5\xf2\x19\xbb\x0e\xa0\x29\x9e\x7d\x0c\x09\x62\xc8\x57\xd9\xbe\x15\xd1\x39\xa4\xdd\x25\x80\xbb\x37\x4e\xdd\xd0\x7f\x66\x66\x48\xfd\xf7\x59\xff\x1c\xdd\x7d\x9e\xff\xfc\xb9\x79\xb4\x2b\xcf\xdb\x63\xdc\x03\xf7\x1f\x1e\x7a\x7d\x47\xb4\x37\x06\x7a\x2d\x38\xc2\x75\xc3\x5a\xf9\xba\x19\xee\xc9\x82\x98\x88\x00\xd7\x57\xbe\xd8\x1c\xcc\x1d\x4a\xe6\xb5\xfc\x88\xc2\x0c\x4d\x09\x92\xa9\x0d\x7f\x28\x5b\xeb\x11\x17\x26\xa2\x2e\x8f\x7a\xe8\x2d\xe3\xa8\x36\xf2\x61\x43\x8d\xdb\x52\x40\x82\x0d\x7f\x35\xed\xcc\xa1\xf8\x88\x69\xb2\xd7\x41\x89\xe0\x09\x17\x50\xa3\x65\x25\xe6\x35\x49\x10\x6f\x10\x73\x55\xe2\x8d\x2f\xd0\xac\xcc\x7f\x5f\x64\xd9\x0a\xac\x2c\x4a\x18\xc2\x3a\x33\x56\x7d\x5f\x98\x33\x13\x8c\xff\x3d\xb4\x67\xb1\x65\x75\xef\x68\x48\x7c\x31\x87\x9b\xf0\xba\x2a\xed\x31\x56\xc7\x79\x6f\xbc\x3f\x5e\x5e\x9c\xbf\xa5\x11\x74\xd9\xbb\x56\xd7\xea\x9a\x7d\xc4\x11\x0d\xed\xdb\xa6\x4e\x31\x8e\x13\xe8\x3f\xfc\xed\x35\x43\xe8\x41\xff\x0f\x32\x71\xda\x8a\x07\x3c\xba\x7e\x71\x8c\xae\x5f\xa8\x20\xb9\x7e\xd1\x71\xbf\x99\x46\x57\x40\x9a\xf9\xf9\xcd\xeb\xde\xe7\x5f\x7e\xd9\x7b\xd3\x7b\xf3\x2f\x85\xd7\x12\x2e\x94\x34\x2f\x7c\xf1\xc5\xeb\x7f\xbe\x7e\xa1\x7f\x78\xbc\x66\xdf\xf9\x6b\xa7\xc6\x58\x71\x43\x5c\x81\xe5\x6e\x5d\x78\x46\x34\xf8\x81\xc4\x49\xc4\x8b\xc1\xce\x00\xe1\xee\xe9\x97\x88\x86\xfc\x79\x47\xb6\x61\x96\x52\xb3\x3a\x3e\x96\x6a\xb4\x95\x16\x44\x16\x46\xf3\xf0\xd0\x73\xbd\x7e\x6c\x18\xf3\x76\x0b\xc3\xa2\xc4\x49\xd2\x75\x37\x47\x97\xb2\x90\xfc\x54\x08\x6c\x62\x64\x8e\x15\xbd\x6b\xd7\x2a\x7d\x0d\x05\x65\x10\x1c\x67\xab\xc0\xe5\x01\xdc\x2d\xa1\x9a\xea\xca\x27\x67\x43\x5b\x7d\xc8\x1b\x1c\x07\xf5\x93\x4d\x8f\x49\x53\x3a\xf9\xe4\x6c\x58\x0b\xb4\xd0\x04\xf9\xe1\xa1\x37\x82\xbf\x4c\x27\x74\x7f\xd2\x86\x45\x63\xab\x29\xf8\xbf\xf6\xe3\x65\x81\x37\x50\xd4\xd5\xc1\xaa\xff\x1a\x7d\x20\x31\x17\x4b\x5f\x20\xac\xfe\xd1\x94\xd2\xa2\x0d\xe1\xb9\x25\x86\x11\xe3\xac\xeb\x26\xdf\x75\xda\xf2\xe0\x39\x2b\xd7\xed\xb2\x01\x59\x59\x4b\x46\xc4\xb8\x5b\x46\xde\xf3\xd6\xa0\x6f\x99\x94\x32\xb4\xab\x0a\x42\x34\xab\x1a\x7e\x7b\xa0\x8d\xb3\x38\x49\xf8\x92\x71\x7b\x20\x94\xbb\x7d\xd7\xe3\x1c\xdb\x9e\x25\xfa\xbf\xde\x0d\x38\xe6\x51\x0e\x9d\x17\x5e\xaf\x05\x7d\x79\x79\x86\x4e\x88\x50\xd9\x29\x30\x1a\xea\x23\x6d\x32\x1c\x1d\xa3\x2b\x49\xd0\x51\x30\x43\x38\xa1\xa8\xdb\x95\xb7\x34\xe9\x4a\x19\x75\xe1\x43\x40\x0b\x4d\x1b\xf5\xcd\x49\x59\x4a\xec\xed\xab\x8f\x4c\x28\x52\x43\x9a\x74\x37\x6c\x47\x1c\x74\x6a\x84\x7e\x25\x13\x9a\x6c\xea\x3a\xac\x3f\x84\xd0\xf2\x90\x03\xa0\x02\x6f\x20\xf6\xdc\x0f\xaf\x96\x26\x7d\xa9\xeb\x73\xf7\xd8\xe6\xbd\x8d\xb8\x50\x1a\x48\xdf\x3e\x2f\xae\x6a\x68\x80\xe6\x21\x6f\x94\x12\x61\x7a\xeb\x15\xab\xcb\xe6\x44\xae\xc2\x1f\x44\x28\xc9\x3e\x59\xa9\x49\x5b\xdc\x06\xb6\x19\xda\xc6\x41\x64\xcd\x1f\x4d\xff\xf8\xd4\xd4\x6f\xf7\xf1\xd2\xbd\x93\xa5\xe5\x56\x12\xed\xdd\xf0\x16\x2b\x74\xfe\xdc\x6a\xef\x64\x5d\x3b\xf1\x76\x3b\xa8\x41\x77\xfb\x4b\xd3\xc9\xbe\xa2\xa4\x42\x8e\xd1\xd7\x57\xc5\xa1\x29\xf1\x32\x13\xa5\x60\xf9\x76\x03\x88\xe9\xed\xa1\x51\x44\xb0\x24\xee\x47\x84\x51\xe1\x5c\xe1\xd3\x1f\xf4\x45\xc6\x85\xb1\x7e\x28\xee\x32\xb8\xf4\x26\xc3\x14\x3a\xb6\x55\x7c\xe0\x6d\x57\x51\x9e\xb6\x02\xe7\x72\x99\x15\x87\x38\x4b\xf9\xcf\xa3\x7e\x51\x37\xe8\xa1\x51\x59\xb0\xd5\xb8\x14\xb7\x78\xa1\x96\xf8\x4a\x3b\x07\xbb\x72\x25\xc2\xc5\xb0\xde\x1f\x53\x43\x3e\x25\xeb\x60\xec\x17\xde\x6b\xcb\x8c\x34\xcb\x56\x83\x3c\x5f\x41\x12\x6e\x64\x94\x23\xd4\x75\x37\x21\xbc\x12\x72\x62\x64\x58\xe8\x39\x51\x9b\xda\xc6\x0a\xd4\x86\x64\x15\xee\x71\x9e\x94\x96\x57\x1f\xd4\xdf\x00\x60\xe2\x55\xb0\x2c\xb9\x54\xde\x9a\x0c\x73\xd8\xc3\xa7\x54\xde\xda\x84\xf5\x76\x1d\x9b\x4e\x5c\xe6\x7b\x48\x65\xc0\x4b\xab\xb0\x19\xd8\x1d\xa9\xdc\x1f\x61\x9b\x68\xd1\x1b\xa3\x65\x83\xe3\x61\x49\xc8\xeb\x82\x94\xd7\xcd\x4a\xfd\xc6\x40\xc9\x62\x2d\x03\xcf\x73\x14\x63\xf1\xf4\x4b\x4c\x94\xe0\x15\xe0\x56\x4e\xe4\x75\x98\xb5\xe4\x15\x8c\x24\x29\x33\x77\x46\x26\x7f\x9c\xe8\x47\x9a\x49\xc3\xd2\x4b\x85\x0b\xc4\xd8\x3e\x37\x8a\x44\x63\x12\xa4\xc4\x36\x6a\xcd\x65\xa3\x15\xc2\xd7\xd1\x0e\x22\x24\x0a\x5f\x46\x1b\x04\x2b\x4b\xcc\x86\x9b\x25\x1b\x70\x0c\xc2\x22\x8a\x68\x4c\xcd\xb8\x8d\xf4\x78\xa6\xff\xdd\x60\x8d\x9d\x3d\xfd\x1a\x53\xd3\xae\x3d\xae\x90\x2c\x57\x47\xe7\x03\xde\x88\xd6\x12\x7f\x4a\x13\xd2\x7a\x2a\x86\xeb\x04\xe2\x35\xf0\x9b\x44\xd8\x76\x9c\xde\x4c\x7d\x44\xa4\x44\x6a\x81\x59\xf1\x4d\xbb\x0c\xf6\x3f\x0e\xca\x66\x44\x50\x2e\x4c\xb3\xd7\x55\x74\xb5\x43\x02\x7d\xb9\x59\x6e\x32\xbc\x5a\x3e\xc5\xeb\x61\x67\x46\x21\x94\x77\x77\x46\x31\xf6\x35\xd4\xf8\x90\x1b\x7e\x72\x2c\x3d\x54\xec\x4a\x6b\x1a\x80\x08\x41\xa2\xba\x76\x2a\x19\xfe\x8a\xfd\xb0\xc3\x66\x58\x5f\xff\x2d\x17\xff\xfe\xf7\xe7\x3e\xb6\xa4\x87\xaa\xb6\x57\x67\x53\xea\xb6\xbc\x3b\x41\xce\x37\xcd\x24\x53\x65\x35\xb3\x54\xd9\xba\x16\xf5\xf2\xfe\xaa\x16\xe2\xb2\x5e\x57\x60\xd4\xa2\x57\x34\x26\xd0\x7c\x28\xbb\xe9\x26\xe6\x49\x83\x79\x2b\xdc\x75\x0e\xcc\x0a\x67\xaa\x60\xd5\x92\x93\xd7\xe8\x3f\x5a\x6b\xd2\x7c\x64\x0a\x9d\x42\x77\xea\x8f\x38\x2a\xf2\xdb\x4b\xe2\x47\xa8\xe1\xbf\xca\xa8\xb6\xb0\x7d\x24\xeb\x65\x81\x19\x9c\x07\x78\x4e\x4c\x55\x8d\x0e\x3c\x21\xa6\x8b\xe3\xcc\x76\x68\x33\xf5\x4d\x6c\xdb\x34\x28\x21\xe2\x35\xe7\x03\x58\x2c\xd0\x12\xcd\x89\x84\x20\xce\xbc\x27\x68\x07\x2d\xb3\xae\x70\x02\x05\x2b\xfd\xdd\xcc\xd8\xf4\xd1\x6f\x2b\x85\x84\x44\x11\x11\x53\x86\x43\xee\x37\xe4\x7b\x06\x21\x49\xa4\xb5\x07\xfd\x43\xb0\xc0\x6c\x6e\x3c\x36\x76\x74\x92\x28\x24\x13\x62\x3a\x49\xc1\xfe\x92\x5b\x8e\x07\xd0\x04\xe6\xe9\x12\x05\x38\x9e\x42\x8e\x5f\x84\x19\x81\xd1\x6a\x85\x6d\x1a\x91\xc0\xd6\x76\x88\xcc\x5e\x04\x49\x7a\x8e\xa5\xf2\x8e\xeb\x8f\x7c\x8a\x5e\x3e\x3c\xf4\xfe\xc8\xa7\xef\xae\x86\xa7\x8f\x8f\x9f\xa1\x19\xb4\x50\xb4\x1b\xb6\x5e\xdd\x6f\x0c\x33\xe1\xc6\x02\xe7\x96\xff\x02\x4b\x34\x25\x84\x21\x41\x70\xb0\x20\xa1\xf1\x3a\xe8\x85\x66\xb4\xb8\x18\x2f\x91\x54\x34\x8a\xf4\x55\x2a\x52\x66\xda\x66\x9b\xb4\xd9\x93\xb7\xd9\x35\xdc\xfb\xff\xd8\x7b\x9f\xe6\x38\x72\x24\x5f\xf0\xbe\x9f\x02\x3b\x6f\xcd\xa4\xb6\xc7\xcc\x52\xf5\xcc\xec\x41\x75\x68\xcb\x22\x53\x2a\xbe\xa6\x48\x3e\xfe\xd1\x4c\x4f\xab\x4c\x0f\xcc\x00\x33\x51\x8a\x0c\x44\x01\x11\x64\x65\xe9\xe9\x03\xbc\xc3\x9e\xe6\xb6\xb7\x3a\xf6\xa1\x0e\x6b\x73\xeb\xcb\x98\x0d\xbf\xd8\x1a\xdc\x01\x04\xe2\x8f\xc7\x9f\x24\xa5\xea\x31\x7b\xd5\x87\x16\x33\x13\xee\x0e\x04\x02\x70\x38\xdc\x7f\x3f\xf6\x27\x55\x6a\xfb\x09\x36\x55\x1a\x5a\x6e\xf8\x9d\x60\x5b\xa5\x45\x0c\xe4\x36\x0d\xe4\xe6\x84\x9b\x82\x9d\x79\x7b\x88\xa6\x0f\xff\x6f\x5a\xc8\x2d\x47\xe5\x3d\xdb\x11\x08\x2b\xf3\x54\xf1\x44\x24\xd3\x22\x60\x27\xd2\x14\x80\x20\xef\xf9\x99\xec\x08\x14\x80\x10\x83\xef\x07\xb5\x18\x4b\x63\x27\x53\xa1\x12\x6e\x00\x3d\xcb\x95\x7f\xa6\xd1\xa4\x67\x18\xf1\x26\x5c\x9e\x4a\xf3\x1d\x97\x29\xbc\xa5\xee\x4c\xe6\xae\x8f\x28\xae\xae\x4a\xb5\x03\xad\x8f\x4b\xcc\xfd\xd1\x51\x9a\x5c\x65\xf2\x26\x15\x04\x02\x09\xa9\x1d\x06\xc1\x81\x2a\x88\x24\x46\xb5\x57\xd6\x0d\xc2\x36\x49\x12\x7f\x25\x49\xe6\xc7\x96\xa9\x01\xf3\xbe\xb2\xcf\xdd\x41\xc5\x08\xf8\x15\xa8\x03\x14\x27\x8b\x8c\x40\xe8\x67\xfc\xe1\xff\xe3\x89\xf5\x94\x06\x3a\x59\xb1\x54\x8d\x36\x94\xa0\xa9\x1a\x50\xa4\xf4\x7a\x58\x85\x9b\x31\x75\x22\x84\x01\xc1\x0e\x8a\xdc\x4d\xd0\x15\xc2\x15\x39\x10\x28\x87\x7a\xe2\x3f\x8c\x21\x53\xc7\xda\x82\xa8\xe4\xf8\x24\xfc\x04\xc6\xab\x40\xa6\xda\x20\x4a\xf8\xcd\x80\xc5\x0d\x50\xef\xb1\x03\xdf\x01\xe3\x3d\xa8\xa8\x7e\x77\xff\xa8\xd7\x38\xf8\xfe\x75\x70\xcf\xfa\xc8\x8c\x7e\xb5\x2b\x34\x3c\x0e\x10\x57\x63\x07\x21\xc0\xdc\x89\x0c\x3c\xf2\xda\xf0\x0f\xe9\x44\xcc\xb6\xe7\xdc\xa5\x0d\x48\x63\x4f\x7a\x5a\xcc\xec\x4b\x80\x45\xf3\xcc\xec\x4c\x21\xb6\x07\x0e\x7a\x09\x02\x70\x99\xdf\x1d\xb2\x75\xf8\xba\xd8\xf0\x02\x6e\xa8\x75\x09\x17\xd8\x24\x62\x4e\x6b\x18\x11\xc8\xed\xb9\xb5\x1d\xb0\xec\x84\x01\x1e\x41\x69\xe5\xf2\xe8\x36\xd1\x58\xcb\x42\x80\x31\xb1\x3b\x31\x22\x33\x25\x2a\x6e\xe0\x4c\xbb\x53\x07\x10\x79\x83\x9a\x7c\x4f\xca\xac\x43\xd8\xd6\xbe\x46\x04\xe4\x4e\x18\x1d\x3b\x2f\x70\xf9\x72\x2b\xe5\x3e\xab\x58\x6d\x0d\xaa\x16\xdd\xb1\xab\x51\x00\xc3\x71\xee\x58\x35\x51\xd4\xed\x13\xbc\xc5\xe0\x7d\x75\xcc\xa5\x2e\x58\xbd\x51\x6f\x72\x00\x69\x03\x50\x8d\xf1\xb3\x38\x00\xb1\x75\x68\xee\x53\x19\x76\x24\x75\x6b\x4f\xdd\xd9\x3a\x28\x8f\x60\x57\xfb\x8d\x50\xb7\x42\x03\x98\x65\x6b\x9f\x71\xe0\xa9\xa3\xf4\xe3\xf2\xea\x79\xd4\x1d\xc0\x66\xbf\xe2\x0a\x44\x53\xdb\xf5\xcf\xa8\x1a\xa0\xe6\xc8\x6d\x39\x18\x00\x97\xbf\xa3\xf4\xd6\x01\x3c\x4b\x33\x56\x57\xc4\xa9\x18\x2d\x99\x83\x0f\xb9\x97\x39\x71\xd4\xf2\x18\x18\x92\x78\x6b\x01\x1f\x18\xe1\x88\xef\xc8\xae\x2f\x9d\x84\x47\x3d\x8a\x6b\xdc\x30\xfd\xaa\x08\xf2\x97\x1e\xe1\x4d\x26\x0b\x37\xac\xf6\x9c\xa2\x6e\x5b\xdf\xc2\x69\xdb\x39\xdf\xd1\xed\xd5\x68\xab\x2a\xa2\x0b\x07\x63\xa7\x32\x44\xc9\x22\xe8\x30\xf0\x4a\xa4\x6b\xd9\xdc\xa3\x4b\x8e\xf8\xdd\x76\xcd\x81\x66\x3e\x9d\xfd\x01\x66\x3b\x04\x14\xcc\x78\x73\x6b\x98\xea\x06\x81\x26\x07\x4c\x02\x86\x3d\x07\x3d\xde\x82\x4d\x1f\xa3\xac\xc2\x3f\xef\x57\xd4\x00\x39\x17\x59\x11\xdd\x77\x4e\xd1\xe8\x70\xcc\xfb\xb5\xd1\x68\xe5\x3d\x1a\x10\x07\x75\x88\x9b\x97\x16\x60\x27\x85\xcb\x09\x11\x09\xc3\x54\x0e\x43\xe7\x80\x80\xa9\x31\x1f\x97\xe3\xee\x4e\x80\x80\x8b\x50\xa3\x56\x3c\x0d\x01\xab\x7b\xae\x13\x16\x4e\x0c\x70\x14\x65\x57\x1b\x69\xe0\x06\xc6\x27\xd8\x25\xe2\x56\x66\x22\xc1\x53\x2b\x84\x8d\x95\x3d\xdf\x52\x88\x56\x41\x5c\x78\x36\x5a\x88\xec\xee\xe1\x57\x98\x19\x78\x67\x6d\x90\x2f\x7e\xce\x96\xa6\x10\xf1\x35\xa3\x47\x0d\x42\xa5\x52\xb3\xed\xc3\x2f\xc6\x53\x15\xdf\x89\x9f\xe9\x5e\x7d\x80\x57\x2b\x9c\x56\x58\xa1\xac\x7f\x74\x67\xfd\x81\x32\x4f\x78\x41\xba\x28\xdf\xa6\xea\xc7\x52\xb8\x84\x1d\x3c\xba\x34\x4f\x2e\x0e\x9c\x6e\x9b\x8b\x44\x6a\xb7\xf1\x0f\x9d\x3e\x14\x22\xb4\x32\x32\x51\xe8\x50\x65\x62\x55\x54\x91\x94\x01\x39\x8a\x84\xe3\x3a\x12\x66\x35\x56\xd6\x5a\x24\x4c\x68\xad\x34\x99\xed\x02\xf1\x32\x61\x1d\xb5\xb5\x34\x90\x02\x69\x88\xe4\x42\x2b\x0e\x62\x1f\x65\x41\xcf\xd1\x43\xa1\x35\x47\x54\x72\xe3\xb8\x8a\x29\x69\xea\x03\xc0\xda\xe6\x10\xda\xb3\xbe\x36\x66\x31\x3d\x6b\x73\xc4\xd5\x6f\x67\xa9\xe7\xfa\xf0\x57\xf3\x63\x29\x20\x2d\xa0\x25\xb2\x45\x1c\xd7\x10\xd9\x69\xe2\x9b\xc5\xe9\xf1\xab\xe5\xe5\xd5\xfb\xf3\xc5\xd5\x77\x93\x5e\xee\x5e\x60\x3f\xf8\xf2\x78\x41\xb4\xe4\x1f\x04\xe3\x30\x05\x66\x21\x7f\xa0\x9d\xda\x1d\xdc\x9e\x42\xb1\xc3\x57\x70\xe0\x20\xb4\x7d\xc7\x57\x42\xc3\x51\x80\xf4\x00\x9a\xd9\x00\x0a\xde\x0d\x37\xb5\x98\x30\xc5\xc3\x5f\x22\x17\xa9\x7b\x9b\xb1\xf2\x0e\x5f\xf5\xf4\x09\xde\x56\x58\x89\x9f\x99\x5a\x46\xb9\x61\x2a\x4b\x77\xec\x4e\x1a\x90\x7e\x2f\x8b\x4d\xcd\xc3\xb2\xfd\xef\x39\x96\x56\xfd\xc3\xa0\x09\x77\xc6\x84\xce\x25\x2d\xa2\x19\xe0\x68\x87\x6e\x65\x5e\xad\x6d\x92\x15\x5a\x4d\x0a\x4b\xbd\x89\xd1\xd5\xd8\x4a\x0b\x0e\xc6\x96\xb0\x9d\xde\x96\x69\xba\x63\xbc\xa0\xd3\x4d\xd8\x86\x43\xa3\x16\x80\x5c\x5f\x0a\x32\x65\x49\xce\x38\xbb\x3a\xec\xc7\xe2\x3c\xf4\x97\x55\x18\xd0\xcd\xdc\xd5\xc3\xd5\x21\x81\xb7\x09\x52\xb3\x61\x8c\x4f\x42\x2e\x0d\xe4\xd9\x12\xfc\xf2\x1d\xa6\xb4\x32\x76\xf8\x0a\xcb\xf7\xb6\x3c\x9f\xe1\xed\x4a\x00\xda\x71\x95\xa8\x7f\x9e\xcd\x36\x1e\x93\xd4\x23\x2a\x7f\x6f\x3f\x85\x94\x19\xfb\xaa\x7e\x8f\x58\x6c\x8c\xb1\xc6\xb8\x4c\x51\xf3\x7c\x36\x83\x5d\xf3\xfc\xec\xe2\x8a\xfd\x4f\x36\x9b\xc1\xb2\xb6\x85\x0f\x7f\x87\x0a\x96\xff\xbc\x78\x73\x7e\xb2\xbc\x74\x62\xdb\x32\xb7\xbb\x19\xcf\x73\x9f\xdb\x3c\x5f\xa9\x2d\xeb\xfd\xef\xbf\xc4\x3f\x9d\x20\x34\x1a\x91\xed\x0e\x8a\x92\x6a\x42\xf1\xb3\xf9\x53\xc9\x76\x23\x7d\xab\x54\xa7\xec\xaf\x6e\x95\x9a\x24\x1f\x86\xf9\x1f\x5f\xbc\x78\x31\x30\x20\x2f\xed\x6f\xa6\x2d\xc3\x3c\x77\x11\x04\xe5\x8f\x6f\x76\xc1\x2c\xac\xc7\x43\xfb\x6b\xf5\xe9\x2c\x52\x7f\x82\x63\x9a\x3f\xfc\xfa\x33\xe3\x0c\x33\xd2\xf2\x9c\x52\xfa\x13\xbb\xe7\xb2\x80\x0b\x86\x00\x92\x1f\x96\x6e\xeb\x6d\x16\x65\x7e\x60\x0f\x07\x5b\x99\x95\xb4\xa3\x72\x25\xc5\x16\x91\xb6\xf1\xca\xd9\xfa\x46\x3f\xc9\x6d\x4c\x9f\xe5\x16\xb8\x16\x99\x2d\x72\x92\x1f\xd8\x05\x03\x74\x50\x71\x96\xb6\xad\x95\x43\xe5\x4e\x2d\x8f\x36\x34\xe5\x0c\x7e\x7f\x2b\xb4\x70\xf6\x91\x8e\xd7\x54\x8b\x0b\xe5\x6e\x9b\xa4\xd9\x30\x6e\x0f\x45\xd6\x2f\x92\x2a\x8b\xe3\x75\x30\x77\xb5\x30\x2a\x2d\xfd\x57\xf6\xa4\xa6\xe8\x6b\x03\x52\xb5\xdc\x96\x5b\xc6\xb7\x90\xa6\xa3\x6e\xfd\x6d\x35\x7a\xff\x21\xa1\xb2\xca\xf9\xe1\x19\xde\xff\x20\xb4\xf7\xd7\x2f\x7e\xff\x0f\x6f\x0e\xd8\xd7\xaf\x0f\xd8\xd7\x2f\x5e\x53\xf1\xc1\x43\x9e\x15\x70\xce\xc3\x41\xe4\xf1\x1d\x76\x15\xd0\x2b\x44\x26\x74\x7b\x47\x6f\xe4\x85\x7a\x64\xf0\xa6\xe6\x2f\xd1\xbd\x39\x9b\x7d\x6d\x5d\x2e\x2d\x8c\xc8\x0a\x28\xd5\x29\x33\xb8\x77\x14\x89\xd3\x41\xfa\x90\x7e\x08\xa2\xae\xfb\xd1\x18\x1c\x82\x11\xfd\xaf\x9b\xe6\x12\x39\xbc\x4e\x09\x36\xf2\x84\x13\x7e\xeb\x6f\x30\x4c\xec\xf9\x91\xb8\xe5\x65\x5a\xbc\xac\xbe\x1b\x9c\x3e\xbf\xed\xd8\xb1\xe7\x78\x8b\x9f\x6b\x11\xdd\x68\xbf\x0c\xbf\xa0\xf0\xe9\xfd\xe8\x62\xea\xb4\x1d\x5d\x17\xfd\x85\xf8\xfa\x96\xef\xec\x01\xd5\x7b\x5a\x90\x70\x6e\x0d\xd1\x77\x02\x93\x32\xa8\x17\xfa\x14\x93\xa2\xc3\xc2\x64\x0f\xa9\x10\x00\xb6\x43\x52\x21\xd7\x5a\xc1\x1a\x60\x97\xfd\xb1\x15\xa5\x73\x32\x50\xfd\x58\x7b\xa3\x47\xfb\x82\xc4\xd8\x7f\xbc\xf1\xd4\xe3\x78\x31\xf0\x18\x60\x91\x7d\x5e\xad\x97\xbf\x83\x3d\xe2\xf0\xe4\xd8\xae\xbc\xb0\x0c\x37\xe2\x59\xb8\xbd\x1d\x30\x55\x6c\x84\x76\xc9\xdd\xcc\x48\x3b\xe5\xf0\xba\xdd\xc0\xa0\xd8\x16\x54\x21\x89\xdb\x4d\x7c\x6f\x9f\x8b\x0c\x82\x5f\x59\xa2\xcc\xef\x70\x47\xb1\xfd\x16\x58\x9a\x03\x1b\x8e\x68\x6d\x86\xd1\x44\xfe\xa6\x03\x99\x58\x15\x5a\x19\x56\x80\x22\x13\xed\x5b\x76\x67\x4a\xad\x3f\x3e\x9c\x58\xde\x5b\x0b\xd3\xd7\x04\x73\x2f\xdc\x62\xf0\xfb\x7f\xfc\xbf\xed\xbb\xe5\x5f\x31\xf2\xce\xa8\x9d\xce\xe4\x5f\xcf\x96\x04\x42\xb5\xc1\xda\xa8\x11\x89\x14\x6f\x44\x66\xf8\x0f\xcd\xdf\x76\x8b\x95\x6b\xcd\x0b\xd1\x71\xad\x08\x47\x78\x95\x89\x3a\x97\x5d\xa1\x18\xcf\x60\x6a\x50\xba\xad\x40\x4d\xdd\x2c\x22\x5c\x74\x8b\xb0\x8e\xc3\xf3\xec\xb6\xb0\x87\x6e\xe5\xf4\xec\xcd\xb7\x17\x4b\xba\x19\x15\x30\xc1\x76\x44\x8c\xe4\x74\xf9\x4f\xef\x27\x53\xbc\x9c\x5e\xbf\x09\xc8\x40\x14\x97\x01\xd1\x92\x6f\xfb\x89\x17\xe8\x66\x10\xb6\x74\x51\x1f\xa1\x6b\xe9\x0b\xbd\x12\xdd\x53\x88\x83\x29\x55\xe8\x68\x2f\x75\xec\x7e\x23\x34\x06\x08\xaa\x64\x0a\x77\x4f\x28\x31\x72\x58\x90\xf5\xa8\x23\x8c\x62\x89\xca\xe0\x1d\x2f\x1e\x7e\x61\xe5\x0d\xa6\x4a\x54\x45\x74\x71\x06\x45\x8f\xfd\x85\x82\x54\x30\x17\x98\x30\x1f\xd8\xf3\xb5\xdd\x44\x61\x61\x97\xb7\x4c\x6d\x65\xd1\xb3\x2d\xd3\x82\xa7\xe5\xe0\x9c\x8a\x7b\x76\xee\xb0\xa6\xa9\x11\x29\xc5\x1d\xb8\xc2\x85\xe6\x10\x43\xa7\x25\x65\x3d\xd3\xa7\x14\x77\xca\xd5\x32\x13\x02\x54\xad\xc0\x8b\x19\x51\xcc\xb1\x64\xec\xe3\xc7\xf9\x89\x5a\xcb\xec\x4a\xe6\x9f\x3e\x3d\x63\x2e\x31\x70\x71\x7e\xec\x3e\xb0\x47\x30\xbc\x3c\xe3\x59\x68\x3f\x5c\xa3\xed\xd2\xca\x64\xa2\x58\x26\xb3\xf5\xc3\x5f\xed\x4e\x97\x15\x8a\xdd\xca\x0c\x0b\x77\x16\xe7\xc7\x73\x76\xed\xb8\x14\x5a\x66\x34\xac\x80\xad\x64\xa5\xec\xf4\xd2\x58\x45\xef\x82\x3d\xb0\xc8\x54\x82\x09\x3f\xf0\x54\x41\x5d\x5c\x77\xf7\x7d\x7d\x4a\xa1\xe0\xd2\x27\xea\xe6\x13\xf4\x92\xe7\xb2\xde\x4b\xaf\xcd\xb1\xbc\x84\xec\xbb\x7a\x3f\x7a\xba\x91\x43\x04\xcb\xb0\x5b\x55\x66\x40\x53\x03\xc9\x96\x18\x3a\x1d\x30\x38\x8b\x6b\xe7\x43\xa6\x42\xe4\x4b\x42\x70\x50\xd4\x45\xf6\x58\xe2\x8c\xa0\xb5\xc6\xea\x06\xaf\xb9\x4e\x2b\x68\x84\x50\x06\xdf\x23\xda\xb0\x8a\xad\xc8\x0f\xfe\x00\xd0\xf4\xa9\x8a\x32\xa6\x86\x6c\x6f\x8f\xd8\xb4\xdc\xa9\x53\xe5\x12\x3b\x0d\xbb\x17\xc0\x02\x93\xd0\xcb\xbf\xd7\xa6\x05\x77\x94\x3b\x90\xaa\x49\x79\xb2\xa7\x2a\x5c\x70\x4f\xee\x85\xbf\xe2\xee\x91\x9c\xe7\x29\xe4\x83\xae\xd7\x5a\xac\x21\x3b\x32\xbc\x39\xa0\x6e\xce\x0e\xb1\x0c\x5c\x8b\x42\x4b\x71\x27\xec\x6f\x0d\xb5\x28\xbc\xe2\x69\x01\x21\x90\xc6\xab\x51\x97\xdf\x08\xa4\xae\x6a\xd5\x70\xa4\xad\x70\x87\xd4\xcd\x6e\x38\x01\x46\xc2\x4f\x1f\x53\xc2\x1d\xa9\x8f\x84\xc4\x27\xac\x9a\x64\xca\x1a\xe4\x01\x09\xfb\x22\x90\x92\xb4\xe6\xc0\x88\xb5\x33\xca\x12\xb4\xa6\xd9\x63\x1b\x5e\xb0\x46\x34\x27\xd5\x4c\xf1\xd6\xe3\x8c\xa1\x57\x40\xa5\xd7\x98\x5c\x0c\xd9\x1f\x3e\x5e\x7f\x00\xf4\x39\xf6\x85\x77\x94\x26\xad\x45\xbf\xd6\x6e\xc8\x78\x5c\xa3\x13\x55\x5f\xa4\x7d\x2f\xea\xf9\x14\x99\xf4\xd1\xfb\x6f\x02\xa9\x4e\xc3\x90\xbe\x75\xbf\x29\x6e\x17\xa5\x66\xf7\x0e\x82\xd2\xf4\x18\xbc\x42\x16\xc5\xca\x84\x2f\xd2\xe1\xb6\xd6\x3e\xfb\xbf\xb0\xd9\x07\x4f\x6c\x2b\x3d\xcd\x06\x5f\x8d\x09\x56\x3f\xc5\x94\xea\x7d\x97\xf6\x58\x7a\x51\xb8\xd9\xf6\x2c\xbe\xb5\x2c\x9e\xe9\x1a\x26\x65\xf6\x78\x75\xe3\xf4\x34\x17\x4c\x7f\x75\x44\xcb\x76\x19\x40\x22\xbb\x43\x2e\x21\xb8\xba\x83\xe8\x1a\xa4\xf0\x1b\x31\xe4\x60\x65\x35\x0f\x2b\xe5\x26\x92\x63\x0f\x09\x59\xa1\x74\x86\x49\xac\x3f\x88\x55\xd9\xbf\x55\x78\x73\x9a\x79\x3f\x53\xcd\xa0\xd2\x7c\x86\x2d\x18\x97\x39\x7c\xaa\xd8\x86\xef\xc6\xe7\x0b\x9f\xaa\x66\xf2\xcc\xf4\x69\x33\x35\xa1\x26\xd2\xf9\x41\xec\x6a\x54\xf7\x21\x94\x5a\x31\xd1\xfb\xb2\xc2\xa1\x7d\xd9\x76\xdb\xcf\x2c\xc8\x86\x6b\x53\xdd\x37\xef\x4e\x3a\x78\xef\x1b\xda\xc6\xd8\x5f\x35\xfe\xa3\x70\xf5\x4a\xce\xbd\x7e\xa2\x9e\x91\x2f\x50\xbb\x9b\x5d\xb6\x7c\xa6\xae\x57\x69\xa8\xfb\xbe\xff\x98\x8e\x3a\x65\xbe\xec\xa7\x0b\x9c\xb3\x41\x0d\x5f\x60\x4f\xb7\x86\xb8\x2d\x7c\xef\x6d\x71\x9a\xff\x85\x3f\x7f\xc4\xce\x48\x9b\x3c\x6e\x4f\x1c\x74\xa9\x5c\x8e\x37\x37\x46\xae\xb3\xbe\x23\x9b\x5b\x77\xb8\xfd\x1d\x84\x75\x5c\x06\xf7\x90\xe4\xc9\xcb\xd9\xb0\x60\x97\xe4\xf9\x54\x5b\x93\x97\x11\xef\x4a\x89\xa8\x5f\xa5\x0e\x1a\x53\xdf\x1e\x46\xd8\xd0\x19\x7f\x80\x7d\xa3\xbe\x3b\x8d\xb7\x04\xea\x23\xaa\x54\xa6\xcf\x39\x3c\x71\x1a\x93\x32\x3e\x8f\xc9\x15\x46\x90\x16\x42\xaa\x95\xcf\x79\x7c\x6a\xf3\x4c\xfd\xf1\xdd\xca\x4c\x26\xdc\x34\x52\xac\x48\xd3\xb0\xb2\xb6\x06\x23\xb3\x07\x54\xc6\x69\x04\x06\x35\x79\xa9\x1c\x80\x91\x3a\x55\x05\x1c\xba\x81\xdd\xb8\x8a\x7f\x1d\xbe\x82\xc8\x5b\x7d\xf9\x49\xd5\xda\xfe\xa8\x2f\xfe\x52\x3c\xfc\xc2\x5c\x6e\x63\xa2\xea\x41\xae\xb6\x48\x4c\xd2\xcc\xe4\x4a\x22\x7b\xb0\xcf\x38\xa4\x2d\x35\x65\x9e\x2b\x5d\x88\x84\x01\xfd\x32\xf0\xb0\x4e\x1c\xca\x02\x40\x15\x25\x5e\x63\x15\xfc\x83\x60\x46\x6d\xf1\x76\x8b\xec\x58\xc1\x5f\x62\xce\x48\x55\x9c\xe9\xef\x61\xb9\x4e\x38\x06\xea\xd4\x8a\x9a\x07\xe1\x6a\x31\x5c\xaf\x0c\x5c\x14\xc6\x40\x19\xc4\x82\x75\xf6\xc7\xbe\xe4\x17\x92\x7e\xf5\xec\xfc\xea\xf8\xec\x94\x24\x43\x3e\x3b\x3f\x3c\x3e\x3b\x5d\x52\xbc\xc7\x67\x17\xaf\xd9\xe2\xe8\xcd\xf1\x29\xd1\x1c\xbe\x3b\xbe\xbc\xba\x58\x1c\x9d\x5d\xb0\xa3\x25\x3b\xbb\x78\xbd\x38\x3d\xfe\x97\xc5\xe1\xf1\xc3\xbf\x9e\x0e\xc8\xa4\x6c\xea\x17\xda\x67\xe9\xf5\xd1\xf1\xd5\xd9\x05\x25\x16\xbf\x9d\x60\xe5\x9b\xc5\xe9\xe2\xf5\x92\x92\xf7\x7a\x79\x39\x49\x1c\x75\x4f\x54\xb5\xb6\x0f\x82\x6e\x4e\x3e\xc2\x5a\x7b\x6a\x78\x00\x25\x81\x3d\x9b\xcd\x78\x9e\x43\xfe\x96\xa1\x1c\xa0\x21\x01\x99\x0a\xf9\x65\xcf\x22\x24\x48\x20\x1b\xf7\x80\x72\x3c\xcf\x2b\x26\xdb\x08\x09\xab\xd8\x08\xf6\x0c\x8f\x9b\xcf\x18\x2f\x0a\x2d\x6f\xe8\x24\xc5\x21\x43\x72\x5e\x6c\xf6\xed\x84\x1d\x81\x7d\xdb\x46\x69\x85\x7b\x8b\x70\x29\x05\x98\x64\xf7\xb8\xe7\xe1\x44\x3c\x62\x30\x30\xdc\x30\x03\x8f\x63\x4f\x19\x7c\xcf\x76\xfb\xea\xd3\x13\xdb\x91\x25\x5f\x67\xc3\x75\x7b\x67\x7a\xed\x60\x1b\xb6\x22\x2b\xa6\xdd\xfe\xd9\xb6\x58\x68\x8a\x2f\x81\x89\x0b\xd1\xa2\x2c\x8c\x31\xd6\xd5\x71\xd9\x5a\x80\x82\xfd\x99\xcf\xd6\x90\x8f\x1f\xe7\x67\x7a\xed\x8e\x93\x3c\xd5\x82\x27\x3b\x04\x48\xa3\xf6\xa7\x3f\x71\x07\xa0\xd6\xae\x83\x8b\x85\x8d\x54\x59\x47\x7b\x83\x92\x7b\xfc\x1b\xcb\x99\xe4\x0d\x49\x8c\x7f\xd2\xa7\xbd\x82\x79\x0b\x5c\xdf\xb8\x57\x5b\xb1\x89\xd0\x8c\x33\x91\xa6\x84\x3b\x39\x60\x24\x59\xd8\x33\xce\x20\xc2\xb3\x39\xd3\x6b\x72\x35\x8f\xa5\x52\x8b\xf9\x70\xf5\xec\xb8\x69\x1d\xa4\xd4\x2e\x25\x6d\xe7\xf1\x86\x67\xe2\x54\x97\x6b\x09\x48\xd2\x6c\xcb\xf3\x1c\x81\x0f\xa1\x30\x86\xaf\x10\x26\x0d\xc0\x11\x5d\xc9\x0d\xdc\xb0\xfe\x54\x08\x9d\xf1\x94\xc9\x44\x64\x85\x3d\xf4\x38\xc7\x99\x4a\x36\x21\x14\xdf\x09\xad\x65\x22\x02\x02\x63\x82\x09\x5a\xee\xfa\x28\x00\x80\x53\x59\x12\x8b\xb4\x10\x9a\x6b\x56\x88\x6d\xae\x34\x4f\x31\xa5\x3f\x6d\x81\x25\x86\x4c\xa6\x42\x64\x6b\x8e\x27\xe4\xbb\x8e\x24\xad\x06\xe8\xf8\xc8\x7b\x2c\xb2\x17\x01\x37\xe3\x6f\xb2\x33\x98\x1b\x8c\x70\xcb\xfd\xfd\xd2\x02\x32\xcd\xac\x5b\x5c\x6c\x44\x23\xf3\xd2\x2f\x89\x22\xbb\x93\x5a\x65\x70\xfd\xcb\x6f\x0b\xa1\xd9\x4a\xe5\xbb\x99\xab\x51\x5e\xa9\x6d\x9e\x0a\x3a\xad\xb9\xbb\xf3\x50\x48\x44\x25\x9b\x79\xf0\x83\xea\xbc\x1e\x5f\x04\xdc\x89\x9f\x61\x90\xe0\xba\x52\x82\x05\xc1\x9a\xee\xee\xf6\x14\x1e\xbd\x7d\xf8\x7f\x16\xd6\x5d\x5c\x1c\x1e\x2e\x2f\xcf\x88\xe6\xcb\xd3\xa3\xe3\xd3\xd7\x93\xe6\xff\xf9\xd9\xc5\x15\xd1\xe0\xfc\x7a\x79\x71\x45\xa9\x3a\xbb\x3c\xb6\x67\x83\x69\xba\xb8\x4c\xea\xb5\x40\x94\xe6\xae\xb2\x1e\x96\xf3\x35\xb1\x3f\x9d\x73\xcd\xb7\x76\xda\x19\xc6\x0d\x40\x8d\x4e\xb4\xcb\x60\xd5\x74\x5d\x06\xa0\x1d\x43\x2e\x27\xe3\xf1\x55\x44\x98\x63\x21\x28\x01\xce\x0f\xd5\x17\x6e\xb8\xb6\xd2\x1d\x0e\x97\xc1\xd7\x05\x14\x60\xd0\x0c\x12\x39\xcb\x28\xee\xb2\xef\x15\xc5\x98\x7e\x44\x71\xab\xdf\xa6\x1f\xe3\x42\x49\x03\x49\x4f\x87\x43\xe9\x4e\xbe\x3d\xbb\x13\x3a\x14\xbf\x56\xdb\xf3\x96\x17\xab\x0d\xbd\x3b\xdb\xa5\x42\xab\x9b\xca\x3b\x4a\x6b\x19\x56\x76\x8b\x5e\x29\x99\xad\x24\x85\x42\x78\x8e\x15\x33\x7a\xb8\x98\xea\x6d\xc7\xca\x9a\x0e\x56\x54\x05\xf9\x76\x31\xfc\x12\x3a\xf6\x14\xdf\x23\x19\x5c\xb7\x34\x55\xf7\x10\x4b\xaa\x8a\xb6\xc6\xc1\xeb\x35\x74\x66\x8a\xe5\x76\xd3\x29\x64\xc2\x1d\xf0\x82\xaf\x75\x1b\x05\xb5\x07\x16\x39\x90\x2f\xba\x52\xa8\xf9\x2b\x5a\x54\x81\x69\x56\x61\xbf\x05\x20\x22\xeb\xc0\xfc\x2c\x31\xf9\xca\x6f\x64\x76\x56\x41\xfe\x49\xb5\xb1\x0d\xee\xd2\x8d\xbe\x03\x9e\x5c\x7d\x97\x45\x26\x92\x1a\x2c\xb3\x55\x9c\x20\x90\x40\x21\x32\xe9\x92\x9e\xeb\xcd\xd2\x9e\x32\x27\xdf\xad\x5a\x97\x7c\x6f\x46\x1a\x5a\xd3\x07\x7f\x47\xd6\xf5\xab\xf5\x63\x06\xcb\x4d\x02\xd0\x8d\x37\x1d\x11\x6f\x5d\xa6\xe4\xfe\xde\xaf\xc0\x07\x1c\x46\x77\x65\x88\xe7\x05\x04\x43\x5c\x03\x71\xcb\x6e\x1c\xc1\x07\x86\x39\x7c\x25\x63\x4c\xe1\x59\x28\x97\xf8\xb3\xab\x5e\x39\xfb\xe1\x8d\x24\x43\xb8\x9f\x5b\x75\x99\x3d\x42\x79\xa1\x9c\x6f\xee\xa4\x4e\x5d\xa7\xe0\xa6\xe9\xe7\x00\x58\xee\x64\x41\x46\xff\x88\xd5\x4b\xe8\x5b\xa5\xb7\x76\xc7\x93\xd6\xef\x63\x8e\x18\xa4\x82\x5c\x14\xec\x7e\x23\xa0\x6e\x81\xbb\x0e\x3b\x80\xa1\xd4\x9f\x6b\x19\xe0\x52\x52\x53\xe2\x42\xa0\x57\x87\xb8\xb0\xf1\x86\xe1\x34\x82\xd5\xc1\x1b\xd6\xcc\xc8\xda\x49\x53\xc0\x15\x82\x60\x5b\x05\xf9\x86\xac\x3f\x1b\xe2\x1c\xd2\xe0\xeb\x67\x60\xbf\x38\x57\xd7\xb7\xee\x08\xe9\x7c\x2c\xc2\xf0\x65\x8a\x49\xf5\xd5\xc9\xd7\x57\x18\xc6\xde\x56\x53\x68\x8f\x59\xd5\x4f\xed\x9f\xce\x86\x2a\xb8\xd7\x77\x07\x71\xc2\xc1\x96\x08\x50\xa2\x53\x58\x7c\x30\xf7\xb7\x15\x44\x4a\x0a\x6d\xd1\x06\x28\x8f\x3a\xaa\x17\xec\xeb\x8f\xa5\x0d\x8f\xb6\x12\xc3\x2b\x44\x41\x03\x0c\x33\x68\xea\xb1\xfd\x65\xa7\xec\x1e\x47\xb9\xb2\x8a\x68\x4a\xaa\x32\x51\xec\x84\xdd\xec\x18\xbc\x68\x85\x5c\x95\x29\xd7\x63\x50\xb6\x9c\x9b\x0e\x42\xb0\xaa\x1e\x12\x40\xec\xb1\xa9\x9d\xb9\x56\x89\xa6\x0c\x02\x9e\x84\xd5\x46\x29\x23\x98\x90\xf8\x66\x5a\x07\xc1\xbe\x86\x89\x34\xf0\xef\x39\xfb\x56\x59\xb7\x04\xd2\x24\xb9\x16\xc8\x61\x05\x5b\x7f\x81\x4b\xce\x8d\x9d\xce\xc6\x2d\x7e\x50\x64\xe0\xc8\xe1\xb6\x9c\x0e\x4a\x2c\x53\xb1\x96\xda\xfa\xa8\x5a\x78\x4f\x42\xb3\xd8\xaf\xd0\x90\x38\x89\x57\x56\xde\xd5\xb0\x4f\xd4\x3a\xc5\x7c\x7b\xc3\x4d\x05\x60\xe3\xd0\xb4\xa4\xd9\x2a\x0f\x40\x49\x84\x72\x5c\x9f\xf1\xa6\x8c\xf1\x35\x27\xd1\x44\xde\x96\x22\xbd\xe3\xac\xeb\x02\xac\x57\xb4\xa7\x9d\xc0\x6a\x0b\xbe\xaa\x01\x2e\xc4\x8f\xb8\x19\x68\x1f\x1d\x65\x8c\x59\x23\x6a\x60\x0a\x0e\x5f\xa1\x1d\xfc\x7b\x4c\x24\x12\x41\x73\xd8\x60\x21\x4c\x85\x3d\xd7\x2b\x07\x11\x75\x52\x37\x02\x76\x35\x48\x53\x32\xff\xc0\x71\x32\x35\x23\x17\xae\x1d\xa7\xe8\x50\x9c\x2a\x28\x4b\x0e\x0c\x4e\x9d\xf1\x42\x7a\xbd\xce\x1a\x9d\x6a\x09\x0a\x6b\xf9\x74\x1b\xa4\x09\xe1\xdc\x82\x7f\x10\xd4\x73\x1e\x63\xc5\x8e\xbb\x37\x44\xad\xca\x9c\xac\xaf\x39\xaf\xe0\x05\xc1\xa2\x84\xbd\xfb\xbb\x1a\x3e\xcb\xbb\xbf\x6b\x04\x98\x0f\x58\x8e\xd3\xb9\x34\xc2\x97\x94\x21\x65\x20\x6d\x6c\x5c\x1c\x14\xa1\xbf\x8a\x4c\xb9\xd8\x54\x5b\xe9\xce\x07\xac\xab\xcc\x4f\x55\x68\x5f\x16\x43\xbe\xc3\xae\x37\x3f\x96\x76\x3b\x4f\xfc\x36\x63\x9d\x2e\xbd\x8b\xa0\x5b\xec\x6e\xbd\x53\xa5\x66\x67\x97\xe4\x8d\xfe\x32\x4c\x2a\xa3\x52\xb9\x82\xd2\xd9\x6a\x5b\xf1\x09\x1a\x20\xba\x86\x99\x57\xed\xe0\x4d\x58\x48\x8a\xc2\xe6\xbc\xfb\x09\xd6\xd0\x4c\xca\x4c\x7a\xb4\xaa\x9e\x81\x26\xe6\x02\xa6\x16\x24\xc2\x04\xd4\xaa\x3a\xec\x49\xff\x70\x36\xa5\xdd\x7d\xfc\x38\x7f\x2b\xb4\x01\xb4\xf6\xba\x95\x8f\xb0\xb1\x21\x15\x2c\x9e\x68\xae\x87\x86\xb7\x6b\xe6\x10\x20\x8b\xc3\x84\xaf\x9d\xbf\x49\x34\x16\x90\xdc\x38\x24\x57\x1e\xf4\x54\x10\xfa\x6a\xcb\x8a\x4e\xc7\x20\x6e\xd4\xf1\xd8\xda\xd2\xe9\xd3\x0f\x75\xb9\x5a\x8d\x01\x4b\xc4\xbb\xf4\x8a\x76\xe9\xe9\x01\xd1\x32\x2b\xa0\x06\xcd\xbd\x6b\x2c\x91\x7c\x9d\x29\x53\xc8\x15\xf8\x70\xa6\x48\x68\x14\xad\xe3\x6d\xae\xe5\x56\x22\xc0\x87\x6d\xf7\xf0\x6f\xb6\x21\xe6\x39\xe1\xbb\x56\x26\xae\xa8\xcc\x8d\x91\x01\xe2\x33\x5c\xd1\xb2\x84\xf4\x5b\xc0\x2c\x55\x16\x8c\xb3\x14\x6e\xa6\x6e\x5d\x79\x95\xdd\xd2\x1b\x21\x80\xc6\x89\x9f\x07\x70\xb6\x70\xc0\x75\xf7\xdf\x0d\xe0\xf1\xa3\xe5\x82\xdd\xf0\xd5\x07\x41\x3a\xd2\xa1\x7f\xd6\xf3\xb2\x76\xd4\xb1\x64\x01\x2d\xb7\x7e\xfc\x6e\x04\x03\xe2\x60\x01\xd4\x8f\x3c\xfc\x7a\xeb\xc6\xc7\x8a\x8c\x37\x69\x57\x88\xee\xe0\x12\x9d\xbf\x93\x6b\xb5\xd6\x1c\x01\x2c\x6e\x55\x96\x28\x6b\x74\xdf\x90\xd9\x7e\xdd\xe1\xcb\x37\xd4\xa7\x94\xe3\x2f\x69\x6f\x47\xab\x9b\x54\x6c\x99\x16\x5b\x75\x67\xc7\x2d\x51\xf7\x19\x82\x9e\xfb\x85\xd8\xfa\x3c\x62\x1b\x45\x57\x7a\x98\xc1\xec\x3a\x90\x6b\x95\x94\x2b\x87\xb6\x9b\xa3\x7c\x6e\x0f\xfe\x22\x95\x78\x9e\x13\x69\xb5\x12\x0b\xb3\xe2\x7a\xcd\x93\x0e\xde\x58\x7f\x9f\x40\xae\xc4\x5a\x01\x1e\xa3\x3b\x27\xda\x2d\xe4\x66\xc7\x20\xc3\x31\x45\x8f\x1e\xfe\xf9\xe9\xd3\x9c\x2d\x7f\x92\x01\x58\x00\x88\x3a\x65\x71\xa8\x12\xfa\xfd\x5f\xc2\x63\x81\xc3\xf4\x86\xbb\x7b\x08\x7c\xfb\x94\xf3\x20\xad\xcb\xda\x50\x82\xdd\x87\xc9\x0f\x6c\x7f\x0d\x4d\x54\x1f\x80\xa9\xa1\x8b\xb6\xa1\x2a\x33\xac\x38\x59\x10\x84\x10\x99\x17\xf0\x1e\x97\xa5\x2a\x5b\x0b\x5d\xe5\x6c\x05\xe6\x34\x78\xa6\x82\x49\x64\x3a\x28\xec\x9e\x6a\x1d\xe5\x29\x24\xbf\x29\x32\xa0\x49\x91\xf0\xa4\xd3\x44\xe7\xb2\x87\x90\x0e\x20\x17\x72\x76\x5b\x66\xae\x30\x08\x62\xbe\xe8\xdb\x18\xeb\xef\x22\xea\xc5\x32\x95\xdb\x87\x5f\x33\x91\x72\x06\x4c\x41\x0f\x7f\xc9\x0a\x81\x9c\xb0\x59\x29\xee\x48\xb7\xbf\xff\xa2\xd2\x7e\x2d\x04\x59\x73\x71\x5e\x6a\x97\xec\x89\xe7\xd8\x88\x75\x07\xbb\x43\xa3\xf5\x1d\x89\xbc\xf4\x70\x7d\x55\xea\x77\xbb\xf5\x58\xbd\xb5\x00\xc1\x54\xb5\xad\xc6\x84\x56\x80\xfa\xf1\xe4\xf5\x4a\x33\x60\x15\xf4\x35\x71\x00\x31\x80\x5e\x9b\x83\x8a\xa5\x5e\x85\xec\x4e\x3a\xb4\xb2\x0c\x2a\xa6\x31\x46\x6a\x24\xd0\x0c\xca\x9f\x81\xac\x03\xea\x25\x61\xce\xe3\x92\x97\x7b\x06\x38\xd2\xaf\x46\xeb\x8c\xcc\xd6\x29\x86\x5d\x9f\xc3\xcb\xe9\xc8\xa9\x71\x57\xf0\xd3\x9e\x2a\x16\x77\xa6\xd9\x77\x12\x38\xb2\xbd\xee\x87\xbf\x66\x72\xc5\xd9\x73\x6b\x0f\x58\x6a\x57\xa2\x6a\x8e\x12\xd8\x0f\xd3\x4c\x6a\x60\x99\x81\xfe\x00\x8d\xf6\xe7\xd9\x0d\xfb\xf6\xfa\xf8\xe4\xe8\x7c\x71\xf8\xc7\xf7\x1e\x78\x6d\xc5\x0e\xcf\xde\xbc\x59\x9c\x1e\xd9\x3f\x7c\x04\xd1\xfe\xfb\x96\xd5\x10\x14\x01\xa4\x2d\x51\xab\x0f\x42\xcf\xe4\x96\xaf\x05\x3b\x3a\x3b\xfc\xe3\xf2\xe2\xfd\xf1\x9b\xc5\xeb\xe5\xf7\xa8\xf8\xcf\x33\xc9\x6a\x78\x08\xb6\xd5\x07\x76\x74\x7c\xf9\x47\xfb\xaf\x2d\x43\x68\xc5\xef\x5b\x30\x70\xf6\x93\x9c\x79\x3d\x86\x5d\x5e\x2d\x0e\xa1\x49\xc1\xae\x8e\xdf\x2c\xcf\xae\xe1\x17\x25\xfb\x6e\xb9\x38\xb9\xfa\xee\xfd\xe1\x77\xcb\xc3\x3f\xbe\xbf\xfa\xd3\x39\x62\xc7\x55\x69\x4f\xec\xe2\xec\xfa\x6a\xf9\xde\xe3\xc8\x81\x49\x71\x96\xda\xf7\xee\x6f\x3f\x62\xfe\x6f\x90\xe0\xff\x80\xbb\x69\x14\x8c\xe9\x5d\xf8\x6d\xc0\xa5\x83\x67\xb2\x2d\xd3\x42\xe6\xf8\x4c\x4c\x93\xbb\xdc\x3d\x87\xd5\x2d\x3e\x82\xf6\x60\x4e\x8b\xc1\x0e\xea\x1b\x39\x15\xe1\x06\xcf\x31\x78\xe0\x6b\x31\x18\xf7\xfe\xef\xd7\x67\x57\x0b\xea\xda\x0e\xbe\xeb\x6e\x06\x24\x83\x47\x90\x32\x0d\xa7\xf1\x8f\x1f\xe7\xf0\xd9\x94\x8c\xa3\x13\xee\x92\xae\x6b\x17\x77\x20\xb9\x21\x2e\x1c\xf5\xfa\xac\xb1\x8b\x0b\x94\x24\x20\x8a\x9c\xb0\xab\x50\xba\x0b\xf8\x3e\x4a\xaf\xd9\x73\xf1\x93\xc7\x1d\x83\x34\x61\x85\x39\x66\x5a\x98\x32\x2d\xd0\x05\x04\x09\x48\x59\x7f\x1b\xf2\x32\x00\xb8\x9c\x04\x75\x02\xed\xce\xcb\x02\xa2\x35\x2c\x78\xd0\x8c\xb7\xa3\x29\x5a\xac\xe4\xc3\x5f\x10\x0f\x28\xe1\xec\xb9\xdd\x8b\xac\x4d\xc6\x0f\x81\x4b\x45\x76\x43\xe2\xb2\x35\xd0\x40\xb7\x37\xa2\xf4\xf6\x98\xd5\x92\x39\x38\xb1\xde\x8c\x1a\xaa\xbe\xc2\x5f\xec\x2d\x9c\x07\x42\x37\xab\x38\x52\xad\x7b\xd4\x94\xeb\x7a\xc2\xa3\x42\x2b\x27\xc4\xf4\x18\x08\xa7\x5c\x2c\xff\xfb\xf5\xf2\xf2\x8a\x4a\xc3\xba\x3c\x3b\x39\x3e\x3c\xbe\xba\x3e\x22\x52\xb0\x2e\x96\x97\xcb\x8b\xb7\xcb\xa3\xf7\x6e\xed\x39\xbb\xb8\xa2\xf2\x7b\x31\x07\xe3\xf2\xfd\xc5\xf5\xd5\xe2\x3d\xb6\x5b\x1c\x9d\x11\x89\xbe\x17\xcb\xcb\xf3\xb3\xd3\x4b\x12\xca\xc6\x7e\x6f\xed\x5e\x50\x76\x9d\x01\xba\x25\xe5\x8e\x53\x8d\xae\xaf\x48\x18\x1b\x6b\x36\x65\x2c\xb4\x23\x4d\xb5\x0d\x49\x33\xfd\x8a\x3d\xcd\xd0\xeb\xd3\xd3\xa9\xd9\x31\x17\x82\x27\x33\xc0\xab\x75\xa0\xe9\x05\xd6\x24\xcb\xec\x56\x81\x3b\xaa\x05\x92\xf2\x53\x63\xb6\xa8\x30\xd3\x1f\xfe\x2d\x55\x2c\x15\xab\xa2\xb4\x33\x1d\x8b\xf1\x80\x22\x2a\x7e\xf1\x9a\xf5\xe8\xa9\x32\xee\x67\xc2\x50\x44\x5a\x17\x82\xa7\xe9\x8e\x25\x22\x15\x85\x60\x4a\xe7\x1b\x9e\x89\xc4\x15\xe6\xfe\x61\x6a\x7f\x7b\x44\xa1\xe3\xbc\xcd\x69\x1e\xc9\xff\xf8\xf7\x23\x61\x04\x42\x0b\x60\xfe\x94\x29\xc3\x19\xce\xb3\x70\x6c\xca\x87\xbf\xe8\x5b\x9e\xf1\xba\xc4\x11\x06\xb9\xcb\xae\x37\x2a\x11\x29\xd2\xb1\x86\x3f\xfd\x36\x91\x25\x4c\xdc\x09\xbd\x2b\x36\xe0\x0f\x1a\xa3\x56\xb2\x42\x63\x93\x05\x35\x1e\x3d\x96\x8b\x74\x40\xe9\x0e\x98\x3d\x58\x6a\xd7\x40\xab\xce\x9d\x9b\x1e\xfe\x92\xfe\xe1\x49\x7a\xf5\x19\x6c\xee\x37\xcc\xdd\x86\x75\xd4\x85\xd6\x58\x13\x11\xf6\x2b\x77\x17\x6e\x67\x69\xd2\xbe\x12\x2b\xc0\xd5\x3f\x15\xf7\xad\xaf\xfe\xf0\xae\x7c\xf1\xe2\xef\xa9\x4d\xa1\xdd\x35\xbc\x37\x1b\x34\x29\x11\x06\xdf\xa4\xf6\x85\x5d\xa7\x81\x7c\xc8\xbe\xbe\x71\xca\x4b\xbd\x6e\xc3\xa1\xb5\xcf\x54\x38\x50\x87\xa9\x2a\x13\xf6\xca\x9e\x86\xf5\x6e\xfc\x33\x4d\xe0\xf4\xa4\x7b\xab\x77\x1b\xea\x70\x10\x1a\xfa\xc6\x77\xc4\x57\xf5\xb6\x2f\x96\x9f\xa8\x1f\xed\xa2\xdf\xb6\xaa\x29\x7d\x58\x09\x79\x07\x11\x52\x64\xa8\xbc\xbc\x3c\x61\x2b\xa1\x31\xb2\x58\x38\xe6\xf9\xde\x60\x8f\xf5\x32\x6e\x5c\xac\x27\xb4\x4c\x14\x48\x8a\x98\x29\xd1\x26\xd2\x0a\xcc\xb1\x73\x69\x3c\xcf\x0c\x13\x3f\x41\x80\xec\xc6\xfa\xe0\x56\x26\x5f\x15\xac\x34\xfe\x86\x2d\xe5\x85\x30\x05\xf8\xd9\x22\x89\x50\x99\x20\xca\x51\x7d\x1f\x27\xea\x3d\x0f\x19\x75\x07\x55\xc5\xbe\x04\x8e\x47\x73\x50\x01\x13\x1d\x20\xbf\xd5\x01\x13\xc5\x6a\x3e\x0d\xa2\xec\x02\xa8\x79\xe4\x9d\x48\x77\x3e\xf0\x52\xb1\xd0\x20\xd3\xa4\x4c\x13\xc7\x43\x6f\x3a\xe6\x03\xf0\xf9\xde\x70\x23\xc2\x69\x73\xcb\x01\xf8\xdf\x05\x6d\xf1\xc8\xde\xc0\x1b\x20\xc3\x57\x2e\xd2\xa6\x9d\x55\x0e\x30\xbd\xac\x4a\xb9\xd9\xce\x11\xcc\x1b\xb6\x91\x3f\xf8\xfb\x46\xd0\x9f\x88\x8a\xd2\xbd\x6e\xa2\x91\x01\x26\x49\x57\xc1\x5f\xe1\x88\xec\xeb\xe0\xf1\x83\x85\xe9\xbd\x23\x56\x21\xf8\xff\xcd\x0c\x1d\xb5\x8a\xfc\x0d\x0c\xa4\x1b\xbc\x26\xfd\x18\x95\x07\x17\xfa\xd8\x80\x02\x0c\xb7\x7d\x44\x31\x64\x50\xe4\x48\xac\x54\xea\x96\x08\xac\x2f\x18\xa3\x4d\xa5\x35\xee\x2a\x98\x92\xbd\xd5\xbd\x41\x67\xa9\x1d\x63\xa1\x53\xd9\xc7\x24\x13\xa9\x74\x97\x23\x89\x60\xd7\x17\x27\x55\x4c\x9e\xc8\x9a\xf3\xda\x80\xbc\x33\x02\xad\xc3\x4b\x7d\x99\x51\xf5\x4c\x41\xa1\x3b\x7b\xae\x20\x21\x22\xe6\x98\x04\x00\x2e\x83\xa1\x64\x61\x42\xd2\xa0\xec\xb7\x23\xab\x15\x5a\x8f\xe9\x6d\x47\xbd\xf7\x90\x0a\xeb\x97\xef\xff\x2c\x5b\x3c\x5d\xa3\x9e\x68\x13\x01\xc0\x6e\x63\x6f\xb9\x8e\x77\xcb\x26\xa8\x18\x93\x68\x6a\xad\xe6\xe7\x2b\x37\x17\xed\x2e\x68\xff\xe1\x9d\x13\x63\x3f\x39\xc4\xb4\xb4\x6b\x23\x74\x5f\x94\xd5\x75\x2a\xc3\x33\x7d\x57\xc1\x7c\xcd\xb8\x90\xef\x59\xb7\xae\x8b\xb5\xac\x61\xaa\x9f\xf6\x0d\x63\x21\xae\xd0\x65\x6e\xff\xf0\xc1\x23\x8b\x0a\xd6\xed\x98\x41\x99\xcf\xc7\x8f\x73\x04\xc4\x40\x49\xd1\xb8\xe1\xc7\x67\x7a\x5d\x1f\x39\xfc\x18\x4c\x7a\xc4\xd8\x89\x14\xa6\x44\x65\x51\x12\x91\xa3\x34\x6d\x22\x46\xab\x6e\x60\x34\x5e\x75\x13\x7f\x9b\x11\xfb\x5b\x19\x98\xbd\x7b\xef\xae\xbf\xaf\x2f\x4e\x9e\xee\x1d\xb3\xda\xb3\x81\x6b\x8c\xfa\x0b\xe6\x69\xdc\xd1\x8c\xcf\xf6\x36\xd5\x0d\x9b\x32\x34\xa3\x3a\x52\xeb\x45\x8f\x06\x88\xbb\xf3\xca\xc5\x24\x73\x62\x21\x57\xc6\x61\x1c\x74\x93\x3e\x0c\xa8\x18\xe5\xde\xd4\xf4\x4c\xf6\x33\x1a\x9a\x06\xc8\x15\x63\x5d\x93\x38\x15\x2b\x45\x3d\xd1\xcf\x5a\x4f\x7a\x71\x72\xbc\xb8\x3e\x8f\xa1\x6e\x6b\x8f\x7f\xe0\x45\xd1\x74\x96\x75\x51\x23\x18\x4a\x41\xa8\xbb\x84\xab\xbf\x05\x21\x08\xf0\x39\xdf\x4e\x6f\xaf\x7b\x3d\xbb\x5e\xc5\x9a\x11\x5f\xe8\xd5\x74\x63\x52\xf1\xac\x60\x20\xe2\x5b\xff\x77\x73\x88\x1a\x5f\x8c\xeb\x6f\x0f\xb5\x5d\xb7\x3a\x4e\x6b\xeb\xef\x47\xeb\xb9\x35\x9f\xed\xde\x0f\xac\xe7\x49\xf0\xba\x8a\x7d\xc6\xbf\xbe\xaa\xb8\x51\x19\xd9\x85\x71\x0f\x80\x5c\x85\xea\xca\x06\xfb\x32\xb2\x23\xad\x78\x49\x33\xd2\xf6\x99\xbd\xcd\x46\xef\xe9\x38\x0e\xef\x34\xeb\xcb\xb9\x99\x7e\xdc\x7c\x8f\xcf\xd2\x24\x16\x57\x0d\x5b\xf4\x61\xd7\xa0\x3d\x66\x74\xa2\xae\x34\xd4\xf3\x0e\xed\x83\x63\x33\x75\x08\x72\x35\x2e\x61\x3a\x3a\x44\xd3\xa2\x74\x61\x42\xe1\xcc\xe5\xe5\x77\x98\x3e\x1c\x32\x14\xfb\x37\xbb\x53\x85\x91\x35\x66\xa4\x4b\xd2\xa9\xf2\x12\xcb\x0c\xc4\x61\xa2\xda\xc0\x46\xd8\x69\x85\xc8\xec\x79\x07\xb0\x9e\x1a\xdc\x3c\x2e\xb5\x5d\xe8\xa1\xad\x3e\xb6\x0f\x93\x7d\x36\xfc\x46\xa6\x98\x86\x1b\xac\x6b\x38\x01\x98\x44\x27\x12\xa5\x9b\x38\xe8\xb4\xf9\x18\xd7\x20\x33\xd0\x2e\xaa\x07\x41\x65\x8d\x5d\xb8\x1c\x48\x60\xfb\x84\x0c\x2e\x60\xf6\xfc\xf4\xe9\x5d\x76\x75\x7c\xfe\x92\x1d\xdf\xb2\x9d\x2a\xa1\x44\xe2\x46\x6c\x64\x96\x30\xce\x6e\xa5\x16\xf7\x10\x14\x80\x9b\x2b\xc0\x47\x0f\xc4\x7c\xb9\x56\x3f\xed\x0e\xb0\x5e\x16\x73\x3b\x37\x45\x91\x9b\xf7\xf0\x79\x77\xb9\xb0\x34\x3e\x47\x36\xdd\x21\x20\xfe\x32\x35\xe2\xc0\x95\x5a\x41\xae\x73\x26\x8a\x7b\xa5\x3f\x44\x54\x5d\xf4\x2b\xf3\x9f\xb6\x43\xbd\x0f\x28\x37\xa2\x4c\xd4\xac\x28\x76\xf0\x9e\xf4\xd6\x52\x5c\xba\xa4\x6f\x5d\xbb\x92\xaf\x24\xf4\x6a\x12\x09\x33\x05\x2f\x26\x32\x4c\x5c\xe0\xa8\x19\x76\x79\x76\x7d\x71\xb8\x9c\x2d\xce\xcf\xd9\xd5\xe2\xe2\xf5\xf2\x0a\xfe\xc9\x4d\x40\xc4\xa7\x92\x2e\x40\x82\xd0\x82\x90\x00\x8b\x55\x40\xd5\x27\xdf\x09\x67\x85\x75\xdb\xd0\x37\xad\x14\x0f\xe9\x2d\xb3\xa8\x32\xc1\x0a\xa8\xab\xa4\x34\x3a\x5e\x26\x48\x7e\x66\xe7\x3d\x6c\x52\xe7\x8e\x5f\xc9\x11\x31\x0d\x92\x44\x5d\x78\x56\x7c\xa8\x32\xb7\x9b\xcf\xe2\xfc\x18\x20\xe3\x12\xa6\xca\xe2\x1b\x08\xf9\x83\xa3\x0c\xf1\x39\x17\xf7\x9f\x86\x97\x72\x21\x4c\xc1\xd7\x03\xa7\x81\xb7\x2a\xbd\x83\xf2\x46\x5f\x70\x2f\x07\xcf\x05\x1e\x1e\xe0\x8b\x45\xad\xac\x8d\x52\xd8\x7d\xb2\x66\xe6\x6f\x1b\x9a\x42\xac\x91\x81\x93\x96\xaf\xc4\x1a\x1e\x51\x0d\xb9\x89\x5d\xd7\x83\x9f\x3e\x41\xce\x77\xb4\x57\xd5\x7a\x3c\xda\x13\x45\x5b\x9c\x27\x5d\xed\x4e\x75\x4d\x6d\xf8\x92\x9a\xb2\xf1\xae\xa8\x63\x6c\xe0\xf6\xe8\x9d\xc8\x3b\x99\x94\x3c\x0d\xd9\xbc\x40\x2d\x0e\x97\xed\x76\x35\x2a\xe9\x55\x63\x55\xe6\xc2\x1f\x2f\x8d\x0a\xd9\xc8\xb0\xa5\x72\xcd\x57\x85\xd0\x0f\xbf\x9a\x42\xae\x38\xe6\x9e\x81\x1f\x55\x90\x49\x40\x91\x59\x09\x54\xc6\xa4\x1c\x57\xfd\xb3\x45\xa0\xa0\x0f\x95\x1a\xae\xd2\x97\x19\x61\x7a\xf2\xcf\x2b\x1b\x81\xaf\xb8\x74\x17\x1d\x95\xa9\x28\xda\xd7\x73\xb8\x7a\x3c\x47\x20\x3e\xd1\xca\xb5\xbc\x03\xc6\xb2\xfc\x99\x61\xeb\x52\x26\x73\xc6\x16\x69\xea\x88\xd5\x36\x82\xa7\x80\x8d\x97\xb8\x41\xb5\xeb\x48\x5e\x56\x95\x27\x40\x39\x6a\x20\x79\x5a\x0b\x63\xe8\x5a\x18\xa2\x4b\x22\x05\xa5\x5d\x08\x37\x15\x95\x04\x9f\x33\x76\x59\xe5\x18\x3c\xfc\x82\x69\x0f\x80\x90\x63\x0a\xe5\x48\xb7\x7d\x5e\x99\xcb\x3c\x4b\x62\x32\x8c\x9c\x7c\xe3\x7a\x47\x45\xe9\x75\xd7\xa8\x34\xc6\x00\xf2\x72\x9e\x6c\x0c\x9a\xf7\x01\x21\x0d\xae\x39\x08\x59\x3c\x00\xd1\x4d\x49\x18\x09\x13\x06\x60\x0c\x33\xc0\xc0\x50\xb8\xe3\xdf\x88\xe1\x08\xd1\xad\x27\x19\x92\x34\x66\x0f\x8f\x21\x9e\xfa\x87\x23\xe5\xc6\x95\xd1\x98\x56\x91\xf9\xa3\x06\x60\xf6\x41\xec\xbe\xf8\x20\x74\x41\xca\xff\xb6\x83\x61\xf7\xb8\x31\xc3\x00\xdb\xf4\x53\xcd\x04\xbf\xc9\x4e\xe9\x3b\xfd\x5e\x54\x02\xf7\x1c\x83\x82\xaf\x3e\x84\x31\xa0\x87\xc0\xfe\xec\x09\xd7\x87\x5c\xa6\xbc\xbe\x2c\xec\xbb\x2a\x58\x49\x43\x5d\x0f\x85\x65\xd1\x26\x6b\xe2\x5d\xd6\x7e\x29\xf8\x0a\x2b\xe3\x67\x58\x6f\x8a\xbf\x1d\xec\x64\x1a\xd5\x8b\x85\x1a\xf6\xc1\x4d\x18\x7f\x91\xf0\xe6\xcf\x9c\x2c\xe8\x1c\x4a\xe3\xda\x90\x59\x54\xae\x7b\x5d\x48\x38\x7b\x03\x6e\x55\x3d\x6b\xc1\xdd\x0c\x22\x53\x0d\x21\x6c\xf5\x5a\xbc\x37\xb4\xd6\xde\x16\x87\x98\xe3\x90\x4f\x84\x03\x8a\x9c\x6f\x80\xaa\xe0\x56\xc7\x3a\x8f\x49\x33\x5b\x32\x2c\x1d\x23\xe6\x90\x9d\xda\xeb\xd4\xaf\x6c\xd5\x84\xef\xe2\x3a\xf1\x59\x92\x6e\x4a\x99\x42\x0c\x05\x7c\xa0\x1b\x10\xc6\x0b\xb3\xdd\x76\xc2\x4e\xf6\xb5\x48\xfc\x54\x37\x93\xa2\xcf\x68\x7b\x88\xd0\xf9\x49\x5d\x28\xbb\x3e\xdb\x9e\xb4\x5e\x00\x37\x9f\x13\x6e\xa6\xc5\xa0\x3b\xac\xff\xf8\x71\xfe\x0a\x8d\x7e\x95\xf2\xf5\xc4\xb8\x39\x61\x79\x4b\xe6\x7e\x46\xee\xf7\x32\xee\xdf\x81\x29\x13\xbe\x06\x82\xf7\x84\xfd\x1b\x7e\x75\xbf\x4c\xff\xaa\x17\x7a\x52\xe7\x20\x84\x01\xdb\x23\x50\xfa\xed\x0d\x38\x7c\xe1\x2f\x90\xbf\x53\xa6\x70\x57\x42\x1f\x3f\xce\x8f\x40\xaa\x3b\x26\x62\x35\xa8\x29\x04\x1c\x2a\xa9\x21\x70\xd7\xca\xe3\xe5\xec\x6b\xcf\x57\x81\x67\xf2\xa9\x2c\xa3\x25\xf6\xdb\x08\xff\xf8\xf4\x89\xdd\x73\xac\x3b\xb9\x81\xb2\xd7\xa2\x0d\x38\xd4\x91\xc3\xfc\xe9\x53\x0f\x56\xb0\xbf\xa3\xf7\x0a\xb0\x12\x95\xdf\x70\x26\xb2\x94\x03\x40\xd6\x24\x6e\x1f\xab\xac\xbf\x2b\x98\xd3\x30\xb6\xe4\xaa\x9e\x09\x31\x50\x59\xd5\xd0\x11\x81\x8f\x4c\x19\x2f\xf7\xe4\xa6\xd8\x04\xe1\xfc\xfd\x06\xcc\x6b\xa3\x3b\xe4\xe8\xd6\xc2\x53\xd2\xaf\xed\x9f\xf0\xac\x8a\xc9\x1c\x1c\xf1\x2a\x51\xe3\x60\x6b\x89\xef\xb1\x88\x8c\xbb\x94\x05\x45\x12\x71\xe1\x99\xdc\x34\xd6\xb2\xb9\xc5\xe4\x5e\xa6\x29\xd0\xda\x3b\xe8\x5e\xb8\x62\x49\x77\x1e\x9a\xa0\xe2\x70\x8e\x89\xe7\xc8\x27\xe3\x8b\x40\x3c\x79\xad\xf0\x6c\xa2\x90\x6f\xe8\xd1\x81\xc1\x83\x36\x2a\xf5\xe5\xf4\xc4\x78\x0c\x73\x39\x63\x9f\x26\xae\x82\x3d\x20\x82\x17\xe0\xe4\x50\xed\x32\xc6\x99\xca\xc4\x4c\xdd\xde\x22\x69\x74\xb8\x8b\x9a\x68\x00\xee\xb6\xcb\x68\x37\x7a\xeb\x77\x23\x78\xf4\x64\x8f\x96\xd5\xee\x98\x88\xc8\xf9\xea\xda\x6d\x88\xf2\xaa\xcb\xe5\xe1\xf5\xc5\xf1\xd5\x9f\xd8\xeb\x8b\xb3\xeb\x73\x42\xcf\xeb\x8b\xeb\xf3\x33\x76\xb4\x64\x97\xcb\xd7\xd7\x17\xc7\x47\x8b\xa3\x31\xc2\x28\xab\xdb\xd2\x48\xdb\x96\x6c\x71\x72\x79\x46\x09\x7a\xfb\xf0\xbf\x16\x97\x4b\x76\xb5\x78\xf3\xed\xf1\xc3\xff\xa2\xe8\x3e\x2e\x97\x17\x6f\x8f\x0f\x29\xd2\x76\xfc\xf6\x98\x00\x3e\x76\x6d\xa7\x11\x9b\x4c\x10\x39\x9a\xd7\xc4\xcb\xec\xef\x23\x55\x98\xe7\x5b\x13\xc5\x79\xbe\x35\x59\xe1\xe8\x9b\xf7\x6b\xdf\x93\xe6\xfe\xf2\x7c\x41\x3e\x9d\xa5\xfd\x92\x1c\x49\xdb\x70\xd2\xa3\x39\x61\x63\x05\x8e\x7d\x30\x41\x22\x35\x34\x28\x72\x2c\xdb\xcc\x08\xf3\x8e\x96\x6f\x97\x27\x67\xe7\x24\xd7\xcc\xd1\xf2\x72\x71\x71\x71\x76\x72\xe2\xa7\xce\x08\x99\x63\xd9\x6b\x86\x45\x51\x8f\xde\xb5\xa4\x26\x20\x34\x25\x57\x39\xd7\x96\x1a\xe2\xcb\xef\x1c\x30\xc4\x5e\x59\x00\xb6\x39\x6c\x4f\xcd\xab\xfe\xb4\x71\xd7\x5f\x0f\x95\x53\xb6\x9c\xb0\xc3\xa8\x16\x09\x2e\xb5\xed\x46\xfe\x46\x18\xc3\xd7\x22\xdc\x6f\x03\x97\xd6\xea\x16\x12\xf6\x67\x33\xf3\x41\xe6\x33\x63\xd2\x19\x54\x34\x81\x69\x40\xaa\x05\xb8\x79\x59\x29\x02\x59\x8e\xcc\xe0\x14\x2f\x6a\xe4\xfc\xd3\xde\xb6\xab\xc5\x21\x45\x0f\x45\xb4\xb8\x3e\x3c\x5c\x2e\x8f\x96\x47\xd3\x5a\xad\x78\xfa\x45\xaf\x16\x97\x66\xc5\xd3\xbe\x7c\xc0\x2f\x72\x9b\x78\xe9\x83\x2c\xfd\x1b\xf7\xeb\x76\x9c\x84\x9a\xdd\x75\xc8\xe3\x8f\x1f\xe7\x3e\x8e\xf3\x7e\xed\xbc\xce\xb1\xb0\x82\x1d\x4c\x7f\x5d\xe2\x06\xaa\xe1\x47\x18\xf4\xf1\xe3\x1c\xf2\x3a\xde\x6f\xfd\xac\x7f\xb4\x51\x1d\x22\x09\xeb\xf0\xbd\xda\x88\x34\x67\x50\xd3\xb9\x72\x60\xa0\x58\xe0\x09\xaf\x95\x3d\x81\x30\x7e\x83\xe0\x28\x01\x93\x6b\x00\x34\x94\xd2\x97\x8a\x55\x60\xdd\x64\xcf\x91\x14\xc3\x18\xeb\x75\x09\x40\x01\xb7\xef\xf6\xef\xc8\x9d\xd5\x36\x47\x34\xcd\x2a\x0f\x8a\x3d\x57\x2c\x2f\x53\x23\xd8\x31\xa0\x6a\xc2\xea\xa4\x00\x96\xf4\x77\xe4\x2c\x41\x33\xf0\xdd\x7a\x94\x15\xcd\xb7\x64\x1f\x63\xf4\x9d\xd0\x98\xda\x73\x80\xff\xc7\x56\x2a\x11\x2f\xd9\xd7\x2f\x5e\xfc\xfe\x80\xb9\x47\xf8\xd2\x83\x06\x1b\x51\xc4\xc5\x59\x37\x62\xc5\x4b\x44\x7f\x0c\xac\x3f\x79\xc4\x06\x42\x27\x31\xe3\x6a\x1b\xae\xaf\x12\xab\x7e\xf5\xf0\x6f\x89\x5c\x63\xb8\x17\x73\x8d\xbc\x11\x99\xe1\x3f\x88\x97\x8e\x20\x1f\xc1\x86\x11\x4e\x44\xfb\xe2\x87\xa8\xe8\x2b\x57\xfa\xc7\x52\x44\xb4\x8e\xf6\x35\x81\x7a\x7e\xb0\x4d\x74\xdd\x23\x8e\x19\x1d\x17\x23\xc4\xe1\xf9\x87\x17\x7f\xdf\x1a\x2f\xfb\x51\x18\xb0\x3f\xb9\x94\x28\x00\x0a\x2c\x8b\x8d\xd2\xf2\x67\x84\xe9\xcb\x1d\x00\x36\x84\xef\x42\x86\x10\x5f\xf5\xa4\x1f\x0d\x8d\x16\x44\x1a\x9d\x51\x9d\xa3\x88\xa6\x55\xc3\x88\x87\x6e\x5e\x16\xd6\xac\x70\x15\x1c\x2a\x06\xed\xb2\xbc\x72\x90\xd9\x1e\xee\x92\x00\x51\xed\x1f\xa3\x97\x6c\x81\xf0\x0c\xf6\xd4\x2a\x32\x29\x92\x39\x83\xa1\x01\xf4\xcc\x02\x89\x3d\x73\x2d\xef\x64\x2a\x1c\x6a\x14\xd6\xe6\x0a\x3c\xe9\x0e\xa1\x03\x8f\x1e\x17\x67\x08\xc0\xdf\x8a\x35\xde\x8a\x9d\x7a\xf8\x4e\x6f\x80\x0c\x57\x5f\x08\xa0\xa7\x1d\x0e\x78\x2f\x54\x70\xcf\x00\x60\xaa\xdc\x25\x7c\x84\x20\x6d\xf5\x39\x83\xdf\x2f\xce\x8f\xa1\x1f\xfe\x17\x61\x0a\xe1\xd7\xb5\x2a\xfa\xc7\x8d\x43\x97\x3d\xed\xe9\x42\x59\xe5\x66\x4f\x97\x55\xe4\xc0\xc8\x95\x60\x90\x8a\x71\x05\x59\x1e\x1f\x3f\xce\x4f\xf8\x8d\x48\x71\x97\xf0\x68\x6b\x53\xe8\xb9\xaa\x54\x14\x3b\x79\xb7\xbc\x88\x32\x01\xea\xc9\xce\xdd\x8a\x86\x38\xbc\xbc\xd1\xdf\x86\x74\xf4\x49\x04\x62\xcb\x81\x74\xf3\x91\x4c\x62\xde\x0a\x1f\xe7\xf2\x6b\x2b\xac\xb3\x9e\x86\x96\x1e\xa4\xee\xf0\x59\xc0\xc9\x8b\xe9\x79\xf9\x28\x0a\xdc\xcb\x71\x05\x39\xe3\x1a\xb3\x36\x2c\xc2\x3e\xc1\xb8\xf1\xa8\x0b\xe3\xcd\xea\x0c\x2f\x8e\x9f\x9c\xd3\xc2\x96\xa3\x67\x41\x6f\x78\x7a\x70\xec\xc6\xc9\x7e\xd9\xaa\x0f\x20\xc4\x1d\x77\xf5\xb1\xa3\x75\xaf\x56\x8a\x98\xbf\x83\x46\xe1\x29\x62\xce\xe3\x98\xf8\x1b\xac\x0b\x4f\x15\x86\xbe\x6c\x60\x77\xec\xf5\x98\x02\xf0\x47\x7d\x84\xda\x19\xd8\x85\xde\xc1\x55\x9a\x72\xc8\x21\x9c\xdd\x7d\xdd\x82\x0f\x39\x80\x9f\x6f\x4b\x83\x0e\x9d\x75\x44\x66\x39\xdc\xd9\xf6\x11\x23\xb6\xa1\x41\xc2\x88\xbd\xcb\x0e\xcf\x4e\x2f\x97\xff\xed\xec\x25\xbb\xf4\x09\xfa\x12\x2e\xf2\xe0\x94\xe7\x01\x46\xc0\x63\x6d\x8b\x49\x04\xbb\xfb\xfa\x00\xf1\xd4\x3c\x77\xb7\x88\xb3\xf9\x66\x54\x7a\x5a\x6b\x78\xf6\x5c\x48\xda\x46\xf5\xeb\x6b\x63\xa2\x8c\xdd\x1d\xe8\x72\x9c\x91\xab\x41\xfc\xaa\x8d\x71\x0d\x2e\x3b\x5e\xd1\xf1\x9b\x37\x15\x6d\xf7\x52\x89\x80\xbb\x6f\x0d\x93\x60\xad\xa1\xd9\xb4\x50\xbf\x97\x40\x9f\x83\x9c\x01\xe4\xc1\xa6\x68\xa2\x1b\x60\x86\x45\x2f\xac\x43\x35\xf9\x08\xa8\x83\x2a\xfc\x44\x26\x16\x5b\xcd\x1e\x4c\x30\x55\x2b\x9e\x8a\xb9\x7d\x41\x4f\xce\x0e\x17\x27\x4b\xbb\x91\x3f\x3b\x3c\x59\x2e\x2e\x9e\x1d\xd8\x73\xdf\x9d\x54\xa5\x71\x3f\x43\x1f\x39\x15\x45\x0f\x60\x7a\x65\x60\xc4\x6e\x08\xcd\x5b\x49\x5f\x97\x92\x2d\x4f\xaf\xce\x2e\x4e\xcf\x50\xb7\x7b\x2d\x83\x76\x53\x4b\x18\x6d\x89\xe3\xd6\x8d\x91\x4a\x93\xb3\xb1\x70\xc9\xaf\xef\xa1\x06\xe3\x7d\xb1\xcb\x5d\x8a\xb1\xf5\xe1\x91\x24\xe4\x19\x90\x29\x33\xa5\xd9\xb3\x4c\x65\x82\x22\xf7\xad\xf7\x2a\x01\xc4\xd8\x42\xde\xa9\x0e\x05\x22\x0b\x42\xbd\x4c\xd2\x3c\xa5\xd9\x9d\x14\xf7\x15\x61\x86\x64\xa5\x4e\x87\x6d\x50\xcc\xfa\xf3\x0e\xcd\x63\x71\x7e\x3c\x48\x7d\x51\x53\x16\x18\x3a\x1c\x0e\xa5\xdd\xc2\x7a\x32\x75\x5a\x7a\xa3\x34\xbe\x8e\xea\xcb\x31\xa6\x14\x6a\xec\xc0\x93\x32\x1c\x64\x6f\x0c\x50\x02\x2b\xd6\xd2\xfd\xd9\x1f\xdc\xc3\x1e\x61\xed\x40\x99\x21\x32\x09\x02\x93\x44\x30\xee\x2d\x69\xbd\xb6\xd4\xde\xe3\x67\x31\x5c\x06\x44\x89\xdc\x27\x6f\x79\x5a\x3a\x60\x6b\xfd\x25\xa3\x99\xf5\x0e\x77\x2f\x1c\x0d\xa3\x79\xcb\xe6\x28\x19\xfb\xb7\x8a\x87\xe2\x58\xff\xd8\x85\xbb\xe9\xe0\x15\x3b\x0a\x2f\x47\x01\x34\xd4\x86\x88\x82\x7e\x1d\x5d\x5e\x39\x22\xf3\xc6\x77\xe6\x49\x12\xbb\xea\xe6\x3f\x59\x6a\x97\xb7\xf1\xb3\xe7\x75\xb5\xec\xdf\x3b\xf9\xf2\xa9\xba\xf7\xa4\x69\x5d\x8f\xea\xde\x7e\x89\x5d\x97\x1b\xeb\x6c\x73\x88\x1c\x71\x4c\x95\xc0\x8c\x0c\xbc\xfb\xa1\xe3\x9e\x87\x6a\x0b\x7c\x5b\x80\x2a\xe1\x13\x2c\x40\x8a\xc3\xa6\x1c\x89\xe9\x60\x0d\xc0\xf3\x00\x28\x6e\xe6\x70\x39\x60\xf1\xbd\x5f\x58\x6f\xa6\x1f\x51\x6f\x69\x53\x8f\xb5\xf8\xe9\xde\xd9\x8d\xba\xaf\x00\xd2\xeb\x39\xb0\x84\x9d\x6f\x94\x29\x1c\x44\x07\x80\xb2\xab\x8e\x4b\x8a\x3e\x65\x69\x5a\xdb\x5a\xcc\xb0\x8f\xe8\x35\x56\xd9\xa8\x9d\xd3\x6a\x84\x9f\x68\x0d\xd8\x88\x74\x48\x11\xdf\x95\x64\xec\xd5\x8a\x70\x58\xb5\x70\x93\x0a\xd6\xbb\x8c\xfa\xe7\xbc\x4a\xad\x07\xc4\xe8\xd9\x4d\x29\xd3\x02\xf9\x4c\xcc\xce\x14\x62\x7b\xc0\x64\xe6\x41\xb2\xed\xac\x45\x6a\x22\xbb\x6a\xba\xaf\x8b\x0d\x2f\xd8\x8a\x67\x76\x39\x02\xac\x71\x0a\xb3\xd0\x1b\x5b\x03\xce\x0d\x63\x00\x29\xf9\xcf\xc3\xbf\x84\x01\xa0\x40\x47\x88\x14\x93\xa1\xe4\x5a\x84\x4c\xa3\x44\x39\xf3\x76\xde\x91\x68\x51\x28\x1d\x00\x1c\x9a\x23\x1f\xf4\x21\xdb\xb8\xce\x9b\x40\xc6\x86\x71\xf3\x68\xc1\x53\x7a\x34\xfe\xe6\xc0\x6b\x28\x8d\xd0\x86\xdd\xec\xe0\xbe\x64\x68\x12\x63\x08\xce\x74\x16\x3a\xe5\x4a\x5b\x19\x3d\xea\x00\xee\x35\x11\x05\x97\xa9\x9b\xc7\x31\x6b\x60\x33\x06\x30\x60\x8b\x95\x93\xe2\x9c\x76\xa4\x94\xe1\x69\x76\x9c\xe0\x57\x2a\x5b\x69\x41\x31\x64\x82\x75\xe8\x55\xec\x31\xe0\xe0\x2a\xf4\x08\xd6\x62\x05\xb4\xf2\x79\xce\xc4\x5d\x4f\x35\xb4\x97\x6f\xca\x95\x30\x38\xc8\xc0\xe7\x03\xfb\x46\x41\x61\x02\x80\x8a\x56\x0c\x6a\x8f\x6e\x4c\x80\x27\xaa\xe9\xfc\x20\x76\x7b\x8d\x5a\x33\xe4\xd5\xa7\x0a\x8b\x90\xa6\x2b\xe9\xad\x0d\x88\x44\x3f\xee\xd9\x4f\xd1\xb4\xe7\xeb\x96\xc6\x97\x87\x03\xaf\x19\x9c\xf0\xec\x59\x54\xdd\xfa\xf2\x4f\x44\x21\x70\xf7\x7a\x31\xd0\x05\x15\xbc\x98\x2c\x87\x34\xc7\xae\xd6\xa1\x66\x16\xa2\x08\x58\xb6\xfc\x65\x8e\x3e\x38\x94\xe0\x23\x40\x4a\x87\xab\xb0\xf5\xef\xd6\x6f\x73\x8c\x71\xa3\xd2\x2e\xcd\x7d\x9a\x53\xe1\x18\xf7\x29\x1a\x97\xb4\x56\x6c\xfb\xdb\xe0\xd0\x5d\xca\xc9\x77\x36\x1f\x64\xee\x78\x23\x3c\xb8\x14\x5c\xf8\x17\xaa\x0f\xbd\xf3\x0c\xd9\x59\x5b\xc4\x15\xe1\x8a\xbe\xd5\x55\x3e\x74\xf1\x64\xed\x00\x82\x3a\xbb\x0e\x56\x29\x57\x83\x06\xe0\x4f\xeb\xcb\x21\xbe\xe9\x56\x5a\x8f\x32\x40\x25\xf1\x99\x69\xee\xb4\x12\x67\x70\xcd\xd9\xa9\x2a\xec\xae\xa1\xb6\x5b\x91\x25\x22\xf9\x3f\x87\x6d\x71\x22\x23\x7e\xd2\x7a\x48\x24\xe5\x56\x05\xf0\xd8\x82\x60\x91\x25\x3c\x21\xef\x9b\x7b\xa3\x49\x7d\xcb\x24\xcc\xe9\x67\xe1\x16\xf2\x59\x15\x2d\x9f\x98\x48\x03\x82\x3e\x13\x2f\x4c\x73\xc9\x6f\x8a\x1d\xa8\x62\x88\x6c\xa3\x42\xc7\x87\x0d\x0d\x54\x04\x19\x24\xed\x5b\xb0\x83\xad\xd1\x7f\xc6\xf4\x46\x33\x8d\xbd\xd7\x3d\xca\x47\x71\xf2\x5e\x76\xae\x62\x63\x9e\xcb\x32\xa5\x96\x9d\x31\xe3\x4f\x66\x87\x0e\x0c\x38\xf2\xdc\x5b\xb7\xb5\xd8\xc0\x6a\x0d\x67\x15\x40\x6f\x97\x2a\x83\x30\x3a\x7c\x05\x99\x48\xbe\xba\xe1\x20\x50\x27\xe1\xcf\xa5\x09\xe4\x36\x32\x0b\x7b\xe3\xbd\xd2\x80\xd8\x1d\x48\x06\xe9\x60\x82\xaf\x5c\x70\x97\x00\x75\xea\x7b\x1f\xa5\xb3\x2a\xc2\x43\xf0\xe7\x17\x08\xba\xa7\xad\x36\xc8\x91\x5e\x95\x44\x40\xec\xdd\x0a\xd0\x0f\xbf\xc4\xe4\x8e\x89\x88\x38\x9c\xda\x74\x85\x89\x60\x85\xe6\x37\xfc\x07\xe5\xb6\x59\x6a\x81\x80\x53\x1f\xae\xd4\x5f\xf6\x14\x78\x6e\x4f\x77\xdc\x73\x89\xea\xfd\x8f\x7c\x72\xda\x81\x2f\x27\x0f\x7a\xb6\xeb\x13\x5f\x5c\x17\x99\xda\xa3\xc4\xe3\x75\xab\xa8\xa3\x11\x47\x2b\x1c\x8c\x8e\xb0\xe7\x00\xea\x2d\x18\x46\xb8\x39\x1e\x83\x6f\xe3\xe4\xe4\x39\xe0\x1b\xa9\xb2\x78\x97\xb9\xdb\xe2\x45\x94\x7a\x0d\x77\xc0\x37\x58\xc6\x2e\x62\x5e\x53\x2d\xd7\x9b\xc2\x7a\xc3\xc5\x1c\xb2\x50\x04\x4f\xc0\x51\xe5\x3a\x61\x2b\x95\xf8\xb8\x9e\xfd\xc1\x01\x4c\x34\xfb\xd7\xff\x75\x7e\x76\x71\xd5\x19\xd3\xa3\xde\x36\xdf\x95\x42\x8a\x6d\xee\x72\x95\xec\xc3\xae\x60\x7b\xad\xd9\xe1\x72\xf9\xa4\xb9\xfe\xb9\x1b\x63\xc7\xbf\x25\xcc\xaa\x5c\x6d\x02\xef\x29\x72\xec\x26\x42\x8b\xd5\x46\xcd\xd9\x32\x63\x69\xb9\x86\xb3\x2d\x74\x01\xdf\xf1\x5c\xe8\x2d\xcf\xec\x09\x10\x71\xf8\x43\xc3\x83\x40\x35\x4d\x80\x76\x43\x6f\xe9\x77\x50\x17\xac\xcc\x2a\x3e\xe4\x30\xfc\x76\xb0\xec\x26\x7c\x88\xa9\x6d\xfe\xba\x62\xab\xb4\x88\x63\x39\x7d\x03\xa6\xec\x5b\x82\x70\x68\xaa\x36\x3e\xde\xe2\x86\x7c\x4c\x04\xbd\x29\x44\x26\x34\xdb\x3e\xfc\x62\x6a\x07\xad\x9e\x1e\x88\x04\xaf\x8d\xf1\xdf\x3d\x39\x21\x12\xca\xc6\x1b\x3f\xa6\xe5\x7e\xd1\x6c\xf3\xe3\x00\xc1\xf4\xdb\x9d\x49\x6c\xa7\xcb\xdc\xa7\x33\x1e\x60\xda\x85\x62\x59\x99\xa6\x98\xe5\xec\x3e\xf0\x17\xc7\x88\x73\xe5\x7e\x4e\x1d\x32\x30\x2d\x11\x57\x53\xcd\xb3\x1f\x4b\x71\x10\xf2\x27\x1c\xa1\x74\x56\xa6\x21\xb7\xb3\xba\x69\x6c\x10\xc8\x29\x47\xb1\xea\xa5\x81\x3b\x46\xb9\x14\x05\x27\x29\xa5\x97\x3d\x20\x50\x98\x74\xe8\x27\x48\xd1\x93\x67\x5e\xe5\x2a\xfa\x1f\x12\x02\x55\x0e\xf1\x5b\x1f\x94\x09\x77\x0b\x3c\xcf\xed\x9e\x85\x08\x24\x1a\xd2\x5b\xb6\x8e\x99\x16\xe9\x6d\xb7\x7c\xc7\x30\x6f\x39\x51\xf7\x99\x5d\x1e\x27\xfa\xbf\xa0\xba\x6f\x85\x3e\x12\xf8\xae\x0d\xac\xd0\x2a\xcf\xbf\xe8\x9b\x00\x66\x39\x4c\xb7\xdf\xec\x55\x00\xa7\x62\xe6\x52\x32\x13\x6a\x2f\x3d\x8f\x72\x14\x95\xcf\x51\x74\xfe\x00\xb1\x73\x5e\x2d\x2e\xff\xf8\xfe\x78\x5a\xe9\x8b\x63\x24\x9d\xd8\xe6\x9c\xa6\xe2\xf3\x4b\x31\x45\x09\x87\x8d\x19\xc3\xaa\x22\xcf\xee\x8a\x0e\xeb\xcc\x1e\xad\x67\x3e\xbd\x73\xe6\x11\xa5\xec\xba\xb0\xe5\x1f\x30\xb8\x15\xbe\xf6\x01\x42\xc3\xf8\x1d\x97\x29\x6c\x4e\x85\x62\x87\xaf\xc0\x1f\x1a\xb4\xce\x5a\xe0\x37\x8b\x71\x56\xc0\x2a\x62\xdd\xaf\x54\x99\x10\x55\x34\xb5\x64\x52\xfb\x67\x2d\x9b\x14\x72\x4e\xfe\x92\x01\x38\x90\xca\x24\x5c\x92\x38\x0f\x1a\x11\x25\x13\xc1\x0e\x5f\xd1\x23\xc5\x16\x8e\x74\xdd\x01\xff\x49\xe3\xc1\x44\x93\x0a\x31\x0e\x08\x87\x81\xdd\xd2\x0e\x12\xbf\xbd\x15\x2b\x32\x03\xeb\x91\x42\x7b\x0c\x45\x8e\x4d\xad\x6c\x17\xe1\xf6\xcd\xee\xc1\xdf\x02\xc3\xb9\x7b\x4f\x8c\x28\x66\x4a\xaf\x67\xf6\x37\xcf\x20\x2e\xd5\xf9\x13\x78\xcd\xf1\x47\xd3\x96\x25\xb0\xe3\xd0\xd1\x2f\x43\x6d\x38\xd4\x1e\xe4\x79\xba\xc3\xbc\x7a\x47\xc5\xec\xaf\x96\xa3\x33\xa8\xf5\xce\x0b\x09\xd8\x33\x3b\x48\x23\x74\x63\x43\x67\x22\x55\x2e\x99\x32\x81\x9f\x19\x0f\x3a\xe8\xa1\x41\xa1\x38\xaf\xdd\xc6\x34\x40\x42\x02\x83\xb3\x61\x1b\x6e\x2a\x5e\x55\x8d\xa0\x89\x82\x02\x62\xfb\x5b\x07\x9d\x1d\x18\xb0\x4b\x40\x58\x16\xd9\xaa\x14\x59\x01\x9e\x6e\xa1\xad\x4b\x86\xcc\x36\x2b\xa5\x0b\x7e\x5b\x8a\xb5\x32\x6c\x87\x9d\x70\x48\xaa\x68\xa8\xed\x8b\xeb\x85\xb4\xe3\xe5\xc6\x6c\xc3\x11\x49\x21\xec\xfd\xce\x70\x47\x2e\x45\x78\xb0\xd1\x08\xcc\xd9\x91\x7d\xb3\x19\x66\x45\x6a\xa9\x0e\x00\xad\x5e\x97\xd6\xc5\xb6\xe7\x5d\x95\x89\x9f\xfc\x79\x57\xdb\x79\x41\x3f\x9b\x53\xe5\xf6\x2a\x9f\x08\x75\x50\x39\xbd\xb7\x48\x34\x12\x39\xa7\xf0\x8e\x61\x50\x04\x9b\x0d\x8e\x60\x48\xe2\x5c\xa9\x54\xad\xf0\xe2\x7c\xab\x7c\x28\x84\xd9\xc9\xfd\xf0\xd7\x50\xa2\xf5\x4d\xdd\x2b\x6e\x1b\x00\x0b\x12\x8a\xd2\x75\x49\x43\x78\xd7\x55\x79\xa8\xdd\x4a\xcf\x8f\xeb\xbd\x7a\x54\x45\x68\xe8\xec\x75\x64\x7c\x5d\x85\xb3\x1b\x94\x80\xe5\x19\x91\x6d\x05\xaf\xa5\x3d\x5f\x8f\xe8\xc5\xe1\xab\xa0\xa1\xe6\x1f\x40\x8f\x44\x66\xac\xf9\x30\xf3\x6b\x19\x59\x81\xf4\xdd\x2e\x96\x02\x16\xcb\x29\xfd\xa2\x95\x3a\xf2\x61\xb0\x5e\x23\xe3\x19\xcc\xf8\x52\x17\x76\x31\xb1\x8a\x14\x6c\x48\x7e\x09\x4a\xa8\xc9\x3e\xaa\xef\x0e\xbc\xb7\x71\x34\xe3\x99\xc7\x40\x01\xba\xed\xcf\x3a\x10\x6d\x0b\xf0\x31\x97\x3c\x85\xa5\xa0\x19\xff\x73\xb8\x29\xea\x0b\x8f\x54\x6d\xa2\x7f\xb6\xd1\x68\x0c\xc2\xe7\xee\x5d\xb5\x48\x5d\xe7\x09\x2f\x44\xe0\xe0\xa8\x77\xb7\x84\x2f\xb1\x3e\x6d\x88\x76\xa7\xfb\x64\xde\x23\x1f\x3b\x0a\xe1\x3d\xc4\x36\xc4\x7a\x84\x09\x7c\x3d\x57\x67\x57\x8b\x93\xf7\xc8\xce\x3f\xcd\x7f\xe0\x6b\x3c\xa0\xd9\x7f\xd0\xe7\xb3\xc2\xee\x3b\x05\xaf\xfd\x94\x90\x27\x53\x48\x7f\x8d\x6e\xe9\x53\xb5\x1e\x91\x63\x73\x29\xd7\x9c\x29\xb6\x2d\x85\x29\xb4\x70\xf0\x8c\x6b\x69\x0a\x0d\xff\x72\x17\xf6\x23\x72\x6c\xae\xe2\x4c\xdc\xf8\x34\x43\xfa\xef\x67\x44\xba\x6d\xb3\x75\xbf\xba\xae\xa3\x1a\xa9\x72\x59\x91\x15\x46\xca\xea\x2d\x09\x75\xe6\x83\x75\x9d\xd8\x8d\xb0\x87\xdd\xf2\x66\x2b\x0b\xd0\x1e\x82\x4e\xe9\x0e\x06\x1b\x4b\x2a\xad\x73\xf2\x2e\x83\x46\x19\xdf\x8a\x97\x8c\xe1\x13\x34\x1f\xbc\x1a\xf8\x4e\x26\xf6\x9b\xf0\xdd\xa5\xf8\xb1\x14\xd9\x4a\x1c\x1f\x91\x53\xa2\xc7\x3a\xeb\x1c\x09\x6d\xc0\x4f\x2b\xb3\x70\x52\x99\xe8\xd8\x62\x9c\xa2\x10\x8c\x07\xe7\x15\x41\x7c\x6e\xf7\x01\xf1\xa9\xc4\xc5\x89\x96\x31\x20\x45\x28\xbb\xe3\x45\x84\x67\x2a\xb3\x44\xfc\x04\xbe\x25\x86\x1c\x0a\x89\x26\x65\xe2\xbe\xca\x0c\xa9\x62\x10\x41\x5a\x85\xd8\xc8\xb7\x02\xa5\x50\xa7\x13\xb4\xac\xcd\x28\x1c\x2f\xfa\xce\xe3\x73\xb0\x59\x18\x04\xcf\x12\x7f\x5f\xf0\xf0\x6b\x96\xd8\x75\x06\x6e\x1b\x1e\x7e\xbd\x95\x2b\xc5\xa2\xe4\x13\x0c\x49\x64\xa5\xb8\x6b\x68\x68\xdc\x2c\x39\x44\xd1\xad\x34\x5b\xe5\x65\xf6\x8f\x66\x78\x28\x1d\xf3\xe6\x8b\xe6\x24\x10\x66\x6e\x1e\x01\xc4\x61\x1b\x5f\x5f\x9c\x84\xe4\xd5\x31\x44\x68\xfd\x92\xac\xd3\xbb\x11\x31\xa1\xea\xe3\xc5\x1c\x30\x79\x1b\x4b\xc5\x0b\x3e\xa6\xb2\x54\x66\xd3\x6e\xff\xaf\x2a\xe0\x72\xff\x7a\xb8\x6b\x81\xa3\xe5\x82\xdd\xf0\xd5\x07\x91\x25\x07\xec\x7e\x23\x57\x9b\xaa\xf4\xc9\x94\x79\xae\x20\xde\x36\x5c\xb8\x3d\x59\xaf\x14\x6b\xf5\xf9\x35\x87\x77\x36\xa3\x59\x79\x68\x01\x43\xce\x00\xdd\xd2\xd9\xbc\x9f\x5a\xdf\xb8\xaa\x9d\x9f\x2c\x02\xb3\x88\xf7\x6c\x16\x52\xd6\xd5\x3e\xaa\x3b\x4f\xde\x7b\x8d\x43\xa7\xa4\x3b\x9e\x96\xd3\x45\xd5\x28\x13\xf6\x32\x06\xee\x57\x73\x5e\x6c\xf6\x6b\xf9\xf1\xe3\xfc\x1c\xde\xe2\x65\x60\x2a\xef\xbc\xbe\x67\x65\x96\x08\x1d\xbf\xf5\xd5\x05\x37\xed\x70\xa4\xe1\xca\x99\xd6\x13\xee\xf9\xbb\x2e\xa2\x53\xa7\x6d\x4e\xba\x26\x1b\x01\x89\x36\x7b\x8d\x1d\x6e\xb4\x1d\x3b\xe9\x5e\xe5\xe7\x56\xa2\xab\x90\xe3\x40\x37\x31\xbc\x64\xc2\xcf\x53\x8a\xdd\x9a\x56\x63\x3d\x81\x47\xaf\x22\x56\x48\x45\x4a\xb8\xb7\x08\xe0\xea\x69\x6c\x58\x7b\x8f\x9f\x15\xe8\xaf\x06\x1e\xd7\xb3\x06\xdd\xdf\xa3\xe5\xec\x55\x55\xdd\x14\x92\xa7\x7c\xfa\xe2\x07\x02\xc0\x5b\xd9\xab\x13\x2a\x4d\x1e\x3f\x57\xac\x90\x47\xce\x15\x2b\xe2\xf1\x8f\xd6\x4a\x79\x8a\x47\x1b\xcb\xd9\xfb\xd1\xc6\x42\xf6\x7a\xb4\x35\x01\x0e\x3b\x64\x3f\x21\x8f\x98\x1f\x3a\x01\x40\x3c\xe7\xeb\x14\xb1\x7f\x81\xe7\x29\x08\x43\x8b\x84\x25\xa5\xae\x13\x99\xf2\xb2\x50\xb3\x44\x14\xa2\x17\x52\x28\x05\x15\x99\x5b\xde\x3d\xaf\xbc\x8b\xf9\xf2\x0c\x49\xe5\x31\xf0\x60\x9a\x91\x07\xab\x93\xbb\xc0\x32\x28\x72\xd9\x9c\x65\xa1\xb6\x0f\xbf\x00\xdb\x40\x42\x53\x9f\xf6\x75\xba\x9a\x88\x7b\x8c\x58\x34\x8b\xb1\x86\x6c\xcf\x91\x8f\xe4\x40\xea\xfa\xe3\x44\xf4\xa4\xa2\xd3\x12\x72\x6e\xcc\xbd\xd2\xd3\x40\x3d\xb0\x61\xb5\xc9\x55\x53\xc2\x3a\x15\xd3\x45\xe1\xa6\xb8\xd7\x20\x46\x27\x9b\x3d\x05\x28\x83\x69\xa5\x90\x7d\x66\x44\x61\x58\xae\xa5\xd2\xb2\x98\xbe\x2f\xef\xf7\x10\x1d\x36\x17\x50\x93\x88\xad\x3d\xef\x83\x57\xc0\x64\x06\xc9\xc5\x2f\x19\x44\x38\x20\x83\x0a\x60\xac\x38\x4b\xb4\xca\x53\x51\xcc\x99\x4f\x65\x74\x1f\x30\xa5\x5d\x32\x75\xc8\x47\xf4\xdf\x14\x0a\xd9\x97\x26\x1b\x57\x03\x37\xf7\x28\x14\x32\x81\xf3\x10\xd0\xdb\x41\xd8\x3a\x5c\xfa\xa1\xab\x4e\x72\xd9\x35\xc1\xcc\x2b\x4c\x8a\x95\x92\xd9\x4a\x22\x9b\x66\xb8\x5a\xf1\xe5\x80\xe1\x0a\x6f\x4e\x90\x61\xd6\x4c\x6d\x01\x8b\xcb\x8c\x95\x46\xcc\x5d\x62\xd4\xa1\xbb\x73\x8d\x5c\x47\x8c\x9d\xcc\x32\xf6\xdd\xd9\xe5\x15\xdc\x51\x2b\x0d\x61\xda\xd9\x0c\xd2\xeb\xb7\x33\x14\x5e\x28\xb6\x16\x99\xd0\x55\x40\x46\x07\xe4\x7d\xc8\x04\xc9\x4b\xb3\x71\x39\x20\xc3\x23\xd0\x82\x26\x67\xa5\x51\xf3\x28\xcd\xea\x90\x6f\x6f\x24\xa4\x8a\x55\xf4\x86\x90\xa4\x6e\xc7\xa8\x66\x6d\x88\xfb\x36\x0c\x86\xd0\x25\x9a\x1c\x87\x64\xc0\x82\xdd\x01\xab\xee\x75\x60\xc1\x3c\xb0\x67\x9b\x87\x5f\x45\x8a\x68\x4d\xd0\x99\x44\x40\x1b\x2a\x4b\xfc\xaa\xc5\x22\x32\x79\x8a\xd5\x9b\xef\xf7\x16\x3f\x32\x54\xf2\x14\x2e\xc5\xa3\x9d\xdf\x56\xf5\xd7\x93\x98\x81\x69\x5f\x8f\x12\xf5\x41\x4c\x5f\x0a\x1f\xed\x5c\x35\x05\x3c\x6e\x34\xa0\xb2\x10\x56\xf8\xae\x73\x0a\x66\x31\x94\x66\x0f\xf9\x3d\x45\x12\x03\xad\xf6\xec\x50\x55\xe8\xb6\x67\xdb\xbd\xdc\x04\xcc\xed\xde\xcb\xe2\x80\x52\x12\x87\x45\xd9\x4a\x95\x29\x6e\x22\x37\x76\x07\xe4\xab\x4d\x0f\x1a\x0d\x51\xc8\x12\xdf\x64\x64\xfe\xae\x3e\x57\x89\x4c\x14\xe3\xe9\x8a\x67\x3f\x73\x0a\x56\x06\x0d\x33\x1f\x9e\x19\x56\x66\x12\x9d\x52\x8c\x23\xb3\xa9\x99\x5d\x56\x92\xfa\x20\xa6\xfb\x91\x48\x48\x99\xf2\x1b\x41\x81\xc5\x0c\xb5\xdd\xfb\xcc\xd0\x53\x5b\xd5\xdf\x68\x9f\x19\xa0\x85\x03\x28\x0d\xc1\xd6\x46\x2a\xa5\x34\x7d\xbe\xc9\xa9\x62\x1b\xbe\xab\x6e\x11\x9a\xe9\x3d\x0e\x77\xb2\x87\x5c\xb2\xb2\xa1\x50\x8a\x6d\xad\xbf\xa2\x72\x4c\x47\x2a\x94\x27\x94\x3b\x60\x79\x2a\xb8\x71\xb5\x92\x12\xc3\xc1\xb6\xbb\x94\x5d\xdf\xf1\x1d\x4b\xc4\x96\x1b\x09\x7c\x50\x2a\x77\xc9\x47\xb0\xe5\x6e\xb1\xf6\xf3\x1b\x06\x08\x58\x37\xbc\xda\xc3\x7b\x6d\xb4\x23\x91\x39\xe8\x4e\x57\x9e\x09\x99\x54\xce\x43\x54\x19\xdc\xeb\x5e\x88\x5c\x81\xef\xf0\x8c\xe4\x0f\xbf\xc4\x77\x41\xab\xa4\x5c\xb9\x22\x07\x94\xca\xd3\x1a\xfa\xaa\x43\x5d\x2d\x13\x40\x3c\x6a\xca\x7e\x52\x4b\x63\x3e\xef\x8f\x1f\xe7\x57\x32\xef\xc1\x12\x7b\x02\xeb\x3b\xf5\x51\x3d\x32\x38\x3f\x56\x6a\xbb\x05\x6a\x93\xd2\x88\xc4\x07\xbc\xcd\x3c\x40\xb3\x03\x84\xf4\x8c\x3f\x43\x92\x1a\xc1\x78\x9a\x1e\xa0\xef\x98\x54\x50\x67\x13\x89\x9c\xaf\xa2\xcb\x04\x3a\x57\x39\xa0\xc3\x0e\x0b\xb1\xcf\x46\x66\x6c\xf9\xcf\xe7\xcb\x8b\xe3\x37\xcb\xd3\xab\xc5\x09\xf3\x5c\xd1\x09\x26\x25\xa3\x07\x6c\x0d\x57\x65\x61\x57\x61\x39\x79\x17\x8b\xf4\x69\xcf\xdd\x7d\xf8\x0a\x96\xe5\x3b\xa1\x8d\x2b\xd4\x7b\x23\x33\xb9\x2d\xb7\x6f\xf1\x93\x4f\x9f\xe6\xec\x4f\xaa\xd4\x3e\x11\x4b\xc6\xf7\x6d\xd5\x6f\x9e\xc0\x12\xfb\xf2\xda\x03\x86\xe3\xde\xae\xa9\x15\x49\xb5\x0d\xd9\x73\xa3\x2e\x0c\x93\x85\x87\x3e\x15\x19\xbf\x49\xfb\x91\xd1\x42\x0e\x7b\x48\x9b\x8b\xf6\xa3\x40\x4f\xb3\x95\x22\x2b\xd4\x1c\x12\x17\xb1\x0c\x02\xe3\x1b\xb0\x95\x19\xdc\xcb\xf0\x93\x68\x0f\x83\x93\x40\xc6\x36\xfc\x46\xa6\x12\x58\x22\xc9\xf5\xa2\xe2\xe7\xb1\x07\xc7\x0d\xd7\x00\xee\xac\x95\x31\x90\xae\xae\xf4\xda\xcc\xdf\x65\x47\x22\x15\x48\x3e\x5d\xa0\x97\xa3\xc5\x56\xdd\x09\x64\x1e\xaf\xd8\xfe\xe0\xb4\x60\x0e\x60\x86\xc0\xcf\x20\x11\xd8\xae\x94\x3c\xcf\xfd\xcd\x72\xa5\xb1\xcc\x60\xcb\x86\x2b\xf6\x77\xd9\x02\x93\x72\x98\xcf\xce\x61\xf7\x3c\x73\x55\x06\xa9\x70\xd7\xdf\xdd\xf8\x31\x7f\xa0\xd6\xaf\x65\x8b\x17\x68\x8b\x98\xda\xc0\x11\x7e\xf7\xf0\x17\x53\x67\xea\xab\xf2\xc9\xed\x1a\x3c\x7f\x97\x9d\x70\x40\x9d\x73\x84\xcc\x22\x95\x70\xe1\x8d\x8c\xc5\xae\x0d\xd2\x10\x39\x2a\x42\x6e\x0e\xd8\xce\x9e\x86\xee\x84\x2e\x10\xa9\x2e\x63\xf6\x11\x81\x1b\x01\x49\x46\x51\x6a\x54\x5e\xf1\x16\x3a\x23\xe7\xef\xb2\xff\xf8\xf7\x25\x9c\xe3\x20\x7b\x48\xf9\xd4\xa1\x44\x18\xc1\x03\x02\x5e\x0f\xc6\xcd\x1f\xc8\xf5\x56\x02\xac\xf5\xad\xd2\x70\x31\x79\xcf\x75\x62\x70\x40\x0a\x09\xd3\x64\xaa\x77\x2e\x4d\xf0\x80\x13\x25\x4c\xf6\xac\xba\xd9\xf4\x35\x90\x76\x63\xfe\x20\x76\xe4\x52\x06\xcf\x27\xc6\xe7\x4c\xec\x6a\x6c\x45\x08\xd6\xae\x5b\xc4\xaa\xe8\xbe\x99\x8c\xae\xa9\x3f\xaf\x6f\x38\xec\x2e\x18\xca\x08\x69\x2e\xe0\xf4\xf6\x1a\xe4\x0b\x07\x76\xdc\x01\x6e\xdb\x13\x6f\xab\xd0\x17\x6b\xc6\x13\x8a\x72\x15\xec\x81\x77\x00\x6b\x37\x3c\xbb\x36\x96\xcf\x14\x5c\x17\x73\x46\xce\x78\x84\x46\x88\xf3\x0f\xfe\x40\x1b\x6c\x1d\x1b\x3b\xd3\x20\xd9\x1d\x6b\xf6\xa3\xb4\xe4\x39\xeb\x9b\x50\x88\x83\xa0\x1b\xaa\xba\x3b\x84\x75\x79\x98\x0e\x65\x76\xd9\x0a\x13\x95\xdd\x56\x4d\xa5\xf0\x5f\x35\x2b\xe5\xc4\x4f\x2b\x01\xae\x35\x32\xbb\xfa\xad\x57\x18\x14\xc7\xcd\xc3\xaf\xd9\x4a\xab\x8c\x22\xc7\xba\x92\xb9\x4b\x7d\xe3\x49\x32\xc3\xb8\xdd\xcc\xae\xbf\x8e\x7f\x61\x2d\x4d\xe1\xae\x18\x7b\xf2\x14\x0e\x55\x66\xc4\x0f\x2a\x4a\x74\x6b\x49\x73\x65\x48\x90\xc7\x85\x8c\xaa\xf6\x73\x23\xe1\x52\x91\xb0\x4d\x15\x3c\x65\x6f\xc4\x56\x69\xea\x65\x82\x2f\x25\x67\x85\xfd\x69\x9f\x14\xbe\x55\x65\x06\xcc\x04\x5b\x90\xc7\x9e\x8b\xf9\x7a\xce\xbe\x7e\xf1\xfb\x7f\x78\x73\xc0\xbe\x7e\x7d\xc0\xbe\x7e\xf1\x9a\xaa\x6c\x3d\xe4\x59\x01\x84\x17\xa0\x06\x2a\x75\x9d\xde\xe7\xf9\x9c\x89\x1f\xda\x72\xa6\x58\xe2\x29\x29\x56\x3c\xc3\x50\xe2\xd3\x98\x56\xd5\xca\xfa\x6a\xa4\x8a\xb6\x62\xba\xd5\x59\xb9\xbd\x11\xda\xa5\xf2\xb4\xae\x64\xcd\x9c\xcd\xbe\xb6\x0f\x54\x0b\x03\x40\x6f\xdc\xee\x46\x76\x79\x07\x72\x03\xe8\x31\x79\x92\x78\xf8\xeb\x56\x68\x55\x75\x20\x3a\x53\x44\xc9\x4f\xb0\x83\xd4\xb4\x60\xf6\xdf\xca\x0f\x80\x04\x75\x3d\x2b\xc8\x53\xf5\x83\x3d\x3f\xc2\x3a\xbd\x97\xd5\x77\xd4\xe3\x79\xfa\xce\xb1\xe7\x6f\x79\x8a\xb4\x21\x51\x0d\xdf\xcb\xf0\x0b\x35\xf2\x31\xea\x3e\x36\xc2\x96\xd9\x9a\xa6\x27\x6c\x0a\x6e\x86\x71\x46\xeb\xa8\x0f\x4d\x3f\x72\xd1\x95\xb6\x6f\xcc\x98\x15\xf3\xb2\xb9\x24\xda\xde\x70\x53\x68\x41\x88\xbe\x5e\x2c\x2a\x4f\x74\x2b\x8d\xb1\x7e\xda\xad\x56\x5b\x47\x83\xd8\x77\x9b\xf2\x8a\xa7\x05\x67\x6d\x88\x0f\x2b\x33\x11\x69\x5c\xeb\x1f\xca\xde\x7b\x2e\xc5\xae\x2f\x4e\x26\x39\x11\x2e\x29\x0c\xef\x0c\x43\xb2\x6d\x48\x5e\xaf\xea\x7d\x3c\x77\xa4\x1d\x06\xbe\x25\xc9\x04\xac\x3c\x1e\x6e\x07\xe1\x4b\x80\x35\xb1\xce\x70\x3d\x2d\xd7\xc1\xdb\xd4\xaa\x7d\x90\xd2\x93\x98\x35\x35\x53\xfd\x23\x8c\xcc\xc5\xe9\x19\x0c\xbd\x55\xda\x7a\x58\x22\x99\xb3\xcb\xd5\x46\x6c\x45\x45\x87\x69\x25\xf9\x42\x76\x28\x69\x19\xd5\x19\x2d\x44\x76\x27\xb1\x4e\xc9\xba\x9d\xf1\xce\x89\x5b\x15\xf8\xa1\xa1\x17\x73\x06\xa0\x18\x3f\x96\x62\xcb\x23\x92\x4c\xc4\x09\xbe\x81\xe9\xea\xb4\x77\x77\xf7\x72\xf1\x7a\x49\x55\x3b\x5e\x5f\x52\xa4\x74\xd7\x97\xcb\x8b\x91\xbc\x79\x87\xc7\x0f\xff\x7a\xca\x8e\x96\xec\xfa\xf2\x7a\x71\x41\x12\xb8\x55\x12\x87\x89\xf3\x5a\x22\x7b\xac\xa4\xe8\xe4\x06\xac\xc9\x7c\xe5\x22\x47\xa2\x98\xae\x04\xd0\x39\x44\x0a\x90\x91\x84\x0c\x4e\xc4\xe4\x40\x56\x56\x22\x20\x2e\xd1\x5d\xb4\xda\x90\x38\x68\x1a\xd6\x92\xa9\x4c\x00\x9a\x02\xd0\xb7\xe0\x8a\xe0\xa9\x7d\xdc\x55\xaf\x30\xb9\x75\x84\xc6\x98\x98\x58\x99\x88\x03\x1a\x71\xb0\x94\x8e\x5d\xb5\x04\xaa\x1a\xeb\x7e\x5a\x99\x25\x44\xd2\x1c\xe9\x89\xee\x87\x1e\x8c\xcc\x2e\x8b\x8d\x80\x6b\xcb\x82\x8c\x96\xd5\x4c\x2a\x0b\xfc\x39\x15\x9d\xad\x44\xe3\x09\xf2\xc0\x5d\xb3\x3d\xf3\x97\x66\xcf\x46\x02\xe1\x9f\x36\xa2\xc2\xfe\x18\xf6\x0d\x74\xb8\x2c\x78\x2c\x72\x08\x18\x3f\xb6\x0a\xb7\x43\xc1\x0e\x0f\xe1\xe0\xef\x62\x17\x73\x76\x8e\x31\xc4\x54\xad\x99\xcc\xfa\x2f\x02\x9b\xb6\x85\x3d\xd6\x63\x39\x99\x08\x0a\xd2\x45\x17\x0e\x0f\xe7\x0c\x60\x06\xec\x32\x10\xbe\xef\xbb\x9f\xab\x8c\x56\x37\x85\x3d\x81\x47\x97\xed\x51\xce\x3e\xfc\x08\xc8\xae\xfd\x5f\x03\xf3\xbf\xb2\xdb\xe3\x3d\xc4\xb7\x94\x3e\x6f\xcf\xad\x5f\xa9\xcf\x1f\xef\xd2\x32\x60\x76\x0e\x75\x38\xf5\x71\xf6\x45\x6a\x21\x64\x44\x01\x8f\x37\x6d\xe5\x59\x15\x3c\xa4\x46\xb8\x43\xf8\x80\x89\x1a\xa9\xe5\x45\x0b\x22\xb5\xb5\x1f\xb2\xd7\xd7\xc7\x47\x54\xcc\x83\x54\x83\x37\xfa\xdc\xc1\x1b\xe2\x72\xd0\x7b\xf3\x74\x24\x0c\x1e\x72\x75\xed\x04\x6c\x12\x31\x58\x6a\xe8\xd5\x01\x2e\x4f\x04\xaa\xd8\x40\xc7\x02\x23\x1e\x09\x5e\x17\xac\xcc\x12\x35\x08\xc7\x85\xd6\x0b\x12\x2e\x6a\x02\x4a\xdd\x75\x76\x83\x75\xbc\x8d\x8b\xe7\x71\x03\x8b\xfb\x34\x2c\xa7\x1d\x3c\x85\x63\x07\xb9\xc7\x02\xbc\xa0\x2c\xd0\xc1\x8d\xbf\x46\xa7\xa5\xab\xaa\xfa\x71\xd6\x22\x90\xf5\x0f\xe0\x47\xd6\x28\xa3\xab\x1f\xd6\xc9\xca\x62\xef\xeb\xe9\x3b\xe8\x21\xbb\xbf\x7c\x07\x41\xfa\xad\xb0\x9b\xe5\xa4\x2e\x36\x2e\x93\x71\x1e\xb9\x72\xf0\xbe\x64\xf5\x9a\xf9\x14\x0b\x50\x82\x51\x2c\xd8\xac\xac\xc4\x7d\xad\xe9\x03\x11\x19\x6f\x06\x59\x01\xe7\x0c\x58\x59\x9d\x69\x4a\xfa\xf9\x97\xd5\xae\x95\xa0\x5a\x0c\x47\xac\x44\x4a\x32\xff\xa1\xe8\x4e\x00\x13\x5c\x86\x28\xb2\x9c\xcf\x07\x6f\xe2\x06\x8c\x62\x96\x6d\x52\xc4\xd5\xcd\xfa\x52\x08\x28\xd5\xb8\x6d\xf9\x8e\xa5\x02\x72\xc7\xf2\xdc\xb0\x2d\xcf\x73\xa4\x88\x6c\xa4\x4c\xdd\x95\x69\x26\xb4\xdd\xd6\xbe\x61\x10\x19\x92\xed\x43\x36\x49\x4b\xe5\x6f\xa3\x4d\xec\x0f\x82\x53\x74\xa4\x6a\x31\xd2\x5c\xab\x95\x10\x09\x19\x18\x4d\xa3\xa9\xe1\x39\x38\x7f\xe0\x3a\xb2\xce\x60\x3f\x00\x7b\x20\xe5\x8e\x60\xce\x78\x90\xf8\x5a\x7a\xd5\x37\xcc\x45\xa0\x8c\x9c\xce\xb4\x15\x83\x8e\x54\x5e\x2b\x3c\xb1\x39\xfb\x8f\x7f\x3f\x82\x48\x6c\xa8\x8c\x27\xc2\xaf\xd5\x63\x68\x8c\x76\x6d\xf2\x0e\x0f\xef\x97\x9a\xcd\xf5\xec\x34\x74\x8e\x26\x0e\xdb\x97\x9f\xe1\x66\x98\x81\x18\x86\xdb\xe1\x5e\x35\xb6\x52\x18\xae\x32\x78\x0e\x63\x06\x4a\x8c\xa6\x29\x4e\xb0\xb0\xf8\x8e\xa7\x4a\x0b\xd3\x88\xa6\x35\x78\x40\xf1\xa6\x4b\x35\xcc\xf9\x1c\x7d\x0f\xbb\xec\x6f\xde\xf7\x68\xd7\xfd\x7c\x7d\xff\xf8\x71\x1e\xe7\x4a\x7f\xfa\xf4\x95\xfd\xa9\x9d\x78\xe1\x75\xf9\x8c\x63\xd0\xab\x7d\x7c\xa7\xc5\x4f\xb9\x58\xc1\xf5\x35\x24\x43\x6c\xb8\x61\x6a\x05\x89\xbe\xc9\x4b\x88\x33\xb8\x7c\x87\xa9\x59\x15\x32\xc3\x2b\x9e\x44\xd5\xc5\x10\x66\xc0\x62\x90\xa6\xb5\x62\x30\x71\x2b\x33\x07\x84\xea\xae\xe2\xb9\x5e\x97\x5b\x41\x16\xc0\x1e\x09\x83\x72\xf0\x86\x26\x96\x23\x43\x91\xb1\x97\xa1\x42\x7e\x44\xbf\x49\x76\x46\x38\x49\xa1\xe0\xec\x74\xf8\x14\xe2\x0c\x71\x8f\x95\x16\x40\x28\x4f\xd5\xea\x43\x23\x0d\x1e\xc0\x2a\xe0\x78\x88\x20\x0e\x3d\x0e\xec\x4d\xaa\x7e\x2c\x85\x1b\x85\xee\x3a\x06\x7c\x4f\x7c\x4e\x80\xae\x60\x1b\xfa\xfd\xd3\x2d\xcf\x19\x67\x57\x87\xfd\x4e\xe8\x22\x03\xda\x86\xb0\x97\x3a\xef\x2c\xf8\x9c\x57\x87\xa4\xcb\x09\x0a\x46\xf8\xb9\x43\x2a\xfa\xdc\xda\x96\x8e\x97\xef\x00\x54\x8c\x31\xe6\xe1\xc4\x4a\xfb\x23\x97\xef\xbc\x38\x3f\xc7\x0f\x8f\xce\xde\x2c\x8e\x4f\xd9\x9f\x67\xb3\x90\xe3\xed\xb3\xa5\xbf\xb7\x9f\x42\xf9\xc2\xf9\xe2\xea\xbb\xef\xdf\xbd\xcb\x50\x64\x6b\xc4\xa6\xa9\x9a\xcd\xe0\x06\xfd\xfc\xec\xe2\x0a\x45\x2e\xff\x79\xf1\xe6\xfc\x64\x79\xe9\xc4\x74\xc9\xd8\xee\x66\xc0\x27\xf1\x13\xdf\xe6\xa9\x98\xaf\xd4\x96\xf5\xfe\xf7\x5f\xe2\x9f\x4e\x12\x1b\x8d\xc3\x76\x07\x39\xe4\x35\xb1\xf8\xd9\xfc\xe9\xa4\xbb\x11\xbe\x55\xaa\x53\xfa\x57\xb7\x4a\x4d\xd4\x00\xa3\xfb\x8f\x2f\x5e\xbc\x18\x18\x96\x97\xf6\x37\x13\x43\x2c\xa6\x83\x8a\xae\x3f\x70\xb1\x2a\xe4\x5d\x58\x31\x3a\x51\xd6\xe9\x05\xc3\xec\x4b\xea\x74\x04\x7e\x70\x12\xd2\x61\x1e\xcd\xee\x84\xb6\xf4\xf0\x3b\xc1\xe6\xf9\x08\x7e\x27\x6b\x31\x32\xb3\x46\x36\xf7\xf0\x3c\x75\x61\xf7\xef\x4b\xf3\x74\x9d\xb9\xac\x16\x91\x54\xd0\xfe\xb7\x32\x5b\x0b\x9d\x6b\x99\x15\xc8\xd5\x3f\x0d\xa1\x01\x01\x75\x18\x1f\xac\xc1\x5f\x54\xd0\x3a\x65\x36\xad\x40\x2d\xe8\x18\x55\x57\x51\x57\x34\x96\x95\x2a\xd2\x81\xe7\x0f\x7b\x66\xeb\xcd\x63\xae\xe9\x69\xf0\xa3\x47\xe7\xa2\xe1\x0b\xd5\x96\xea\xde\x9a\x8d\x7a\xf7\x48\xce\xf3\x91\xaa\x06\x6a\x33\x1a\x7d\x9c\x40\xa5\xe3\x35\x65\x11\xfc\xa1\x30\xaa\xd4\x03\xc9\xfa\x0d\x8d\x21\x0a\xaa\xed\xa3\x37\xca\x54\x95\x4f\xa3\xf5\x0e\x57\x08\x50\x4a\xfd\x99\x6c\x9c\xce\x4e\x94\xd0\x09\x23\x4c\x1e\x2b\xa7\xd3\xc6\xa3\x45\x88\x21\xed\xfe\x4d\x7a\xc1\xc1\x02\x07\xfe\x5b\xfd\x9e\x16\x0d\x5b\xc3\xf4\x12\xdf\xaa\xed\x17\x21\x83\x09\x3d\xa3\xc2\x52\x5f\x84\x03\x26\x74\xba\xf2\x86\x3f\x7e\x9c\x07\x08\xb2\x21\x77\xbc\xd6\x89\x1e\x97\xb8\x5b\x66\xbf\x45\x35\xf6\x23\x48\xf3\x77\x94\xae\xdf\xc1\x17\x87\xf6\xf3\xab\x5d\xfe\x84\xcc\xae\x63\x1e\xdb\x80\xd1\x9d\xd7\x2f\xfb\x4f\x8a\x4e\x42\xd4\x7d\x1e\xef\x88\x93\xf7\xc8\x73\xf5\xa2\x3a\xce\x78\xde\x9a\x91\x47\xeb\xd1\x47\xe7\xca\xe8\xe6\x6e\x37\x2d\x56\xd6\x1c\xcd\xda\x2e\xa8\xb6\xbc\x88\x11\xdd\x22\xd6\xba\x49\x41\xad\xa6\xb1\xae\x28\x31\xf0\xe9\xec\xfb\xf4\x45\x4a\xef\x9f\x91\xf4\xfd\x26\x03\x19\xc5\x6c\xd9\x3c\x69\x05\x18\x11\x7b\xec\x30\x7b\xec\x82\xd0\x75\xc1\xf9\x04\x6f\x57\xc7\x2d\xe6\x9e\xe3\x6a\x27\x36\x6b\xed\xb1\x5f\xec\xa2\xa3\x39\x7d\x3a\xb7\x68\xd5\xc4\xe2\xfe\xed\x2e\x3c\xfc\xb0\xd5\x16\xed\x36\xb9\x3b\xb9\xea\x8f\x19\x86\x01\xd9\x9c\x12\x4d\x58\x9c\x2a\x1e\xae\xb6\x6e\x25\x30\xc3\x6a\xb5\x05\xcf\xe4\x9c\x17\x1b\x3a\x98\x57\xde\x38\x80\x7d\x4f\x70\xe3\xb8\xf0\xe0\xca\x33\x6e\x3f\xa0\x78\xbf\x6d\x3a\xa8\x7f\xaa\x2d\xda\x9b\x13\x0f\xef\x08\xf5\xcd\x9f\x0f\x4b\xff\x17\x99\xbf\x92\xa9\xf8\x76\x57\x08\xf3\xe9\xd3\x81\xfd\xc8\xfe\x7d\xa8\xca\xac\xb0\x07\x5e\xfb\x0c\x7a\xb4\x26\x75\x56\xa1\x41\x81\x84\x45\x86\xaf\x49\xf6\x2a\xaa\xc9\x63\xe8\x5c\xae\x3d\x55\xd2\x13\x30\xb6\x78\x4b\x22\xc0\xe6\x3b\x09\xc0\x4d\x70\xad\xbf\x8b\x0a\xbc\xec\xaa\x04\xc4\x88\x3d\x39\x15\x35\xd3\x6a\x78\xcc\x77\xd2\xf8\xc3\x82\x72\xa1\x61\xcd\x4c\xd9\x58\x49\x76\x61\xf1\x18\xa2\x29\xb3\x86\x73\xa6\x32\x31\x83\xe4\x3a\x0f\x7d\xc2\x00\xd2\x77\x4d\xe2\xd2\x05\x03\xe1\xb0\x04\xb8\xe5\xb0\xef\x37\xd3\xe8\xc0\x66\xe9\x88\x86\x5c\x7a\x16\x69\x48\xb4\xac\x17\x7c\x4d\xd2\xa3\x79\x10\xdc\xfa\xa1\xa8\x49\x7f\xd0\xa3\x05\x50\x32\xed\xb3\xc0\xb5\x73\x64\xde\xdc\xb2\xb6\x9a\xd7\x04\x0c\x66\xc9\xd9\x63\xe1\x5e\xac\x1b\x4e\x23\x95\xfa\x69\x84\x26\xd3\x5a\x07\x5b\xf6\xd4\x2d\x9f\x06\x68\x8d\x81\xd1\xc4\x9b\xf4\x98\x02\x2e\x2c\xb2\x24\x04\x9e\x9b\x3b\x95\x67\xdb\xcd\xc1\x16\x0b\xea\xd1\x5e\x07\x63\x81\x0b\xda\x71\x7a\xe3\x7b\xdd\xa8\x6d\x8f\x2a\x2c\xf8\x47\x72\x9c\xe1\xed\xa0\x43\x1d\xd0\xb1\xb5\xdb\x77\xaa\x7c\xbb\xbc\xb8\x3c\x3e\x23\xf3\x84\xe1\xeb\x87\x7f\x3d\x25\x9e\xef\x5b\x9e\xca\x84\xfd\xb7\xcb\xb3\x53\xa6\x6e\x7e\x10\xab\xc0\x84\x18\x79\xa6\x33\x4f\x8a\x57\x65\xc3\x43\x3e\x9e\x7d\x67\xb7\xa2\x10\xda\x1c\x54\x2f\xa4\x90\xc5\x06\x30\xb1\x66\xa9\xcc\x04\x83\x1b\x32\xa0\x7d\x48\xc5\x9c\xbd\x02\xc2\xeb\x54\x1a\x4c\x60\x0a\x11\x46\x5a\xae\x11\x82\x25\x6a\x05\x37\x59\x55\x6e\x20\xdc\x9e\xd1\xb4\xd9\xd4\x48\x9f\xdd\xfc\x20\x0a\x85\xbd\xbd\x7b\xf8\x25\x95\x49\x83\xba\x31\xe7\xfa\xe1\x97\xad\x80\x5c\xf9\x56\xf2\x7f\x0c\xd7\x6b\x6a\x69\x2a\x07\xcc\x48\xb1\xcd\x35\xd6\x98\x01\x9d\x0a\xf8\x6d\x0f\xbf\x66\x82\x33\xb8\x90\xab\x18\x04\xe7\xec\x3c\xde\x37\xec\xba\x68\x07\x84\xfb\xfb\xde\x7e\x1b\xb0\x4e\x90\x27\xca\x1c\xd8\xaf\x4c\x99\x3a\x80\x2f\x3f\x46\x35\x0e\xf4\x16\x09\xb8\xa9\x32\x65\xc9\x0a\x9c\x27\x9f\x12\x32\xfb\xdf\x53\xe1\x3f\xed\x54\x28\x31\xd3\x19\x40\x56\x9f\xf1\x3c\x9f\xf9\x63\xea\x0c\x10\x40\x9f\xb1\x15\xcf\x1c\x12\x49\x26\xd6\xbc\x90\x77\x24\xf3\x58\x8a\xb9\x0c\x21\xaf\x39\x81\xa0\x6b\x61\x57\xf4\x4e\xc9\x99\x72\x29\x4c\x76\x2f\x76\xc2\x89\x0d\x26\x90\x3f\x9e\x8e\xd9\xab\x22\xd2\x01\x42\x1c\x12\xd0\x9c\xf7\xe3\xbb\xbd\x75\x94\xc1\x3a\x76\x6c\x48\x81\x86\x76\x30\xdf\xba\x6c\x6a\xa2\xad\xf5\x0f\x53\xb5\x36\x07\xbe\xe2\x1e\x4b\xcd\xdd\xbd\x9b\x41\xf8\x65\x5f\x07\x4c\xee\xa6\x6f\x85\xae\x2a\x81\x0e\xaa\xaa\xfa\x5d\xc8\x30\x11\xae\x2a\xdb\xb9\x84\xd4\x76\xfa\x4f\x8b\x8b\xd3\xe3\xd3\xd7\xc8\x4f\x85\xce\x8a\x5d\x19\xc0\x75\x0d\x6e\x21\x37\x80\x8f\x85\xe9\x0c\xf8\xfa\xe7\x58\xc3\x67\xd8\x46\xae\x37\xe9\xce\x3e\xfe\x95\x2a\x35\x5f\x8b\x04\x44\xfd\xa9\x26\x60\xcb\x77\x76\x4e\xdd\x49\x23\x7d\x0e\xbe\xdd\x58\x4c\xc0\x61\x00\xe8\x9b\x95\xd2\xb8\xc2\xa0\x7a\xb3\x11\x69\xca\x36\xd2\x14\x74\x2d\xea\xe2\xed\xf1\xa5\x23\xd7\xc2\x0c\x77\x60\x73\xb6\x27\x22\x1e\x3b\x8a\xe0\x2c\xc7\x0e\x2b\x1c\xa7\xe1\x6a\x30\xaf\x5e\x2c\x7c\xad\x93\x00\x30\x61\x40\xee\x65\xbd\xa5\x11\xfa\xe1\x97\xd0\x13\x3c\x35\xc0\x3b\x1d\xc8\xed\x77\x55\x7d\x47\x54\x7b\x0b\x69\x1c\xd8\x19\x09\x81\xb2\x14\x3b\xd8\xff\x58\x90\x3e\xcf\xb1\xb1\x2a\x28\x04\x2f\xb7\x80\xea\xd0\x00\x70\x72\xa1\x31\x57\x0e\x03\xb6\x85\x6a\xad\x56\x4c\x0a\x00\x1e\x58\xaa\xb2\xb5\xd0\x11\x99\x99\x5d\xd3\xd1\x25\x46\x31\x30\x13\xf0\x2e\x96\xfd\xfe\xc5\x0b\xfb\xfd\x3f\x7c\xfd\xe2\xc0\x63\xbc\xb5\xe5\x06\x66\x04\x2c\x56\x49\x0e\x20\xd7\x12\xe9\xcc\xf3\x0d\xcf\xdc\x33\x06\x50\x8e\xc3\x54\x95\x09\x7b\xa5\xca\x2c\xd1\xbb\x67\x86\x25\xbc\xe0\x37\xdc\x88\x39\x5b\xa4\x29\xfb\x90\xa9\xfb\x54\x24\x6b\x12\x50\x37\x54\xa9\x21\x8a\x43\x82\xf7\xb3\x35\xa1\x31\xcb\x6e\x18\x26\xcc\x96\x32\xee\x9d\x0b\xa8\x5e\x64\x79\x3f\x4e\x30\x06\x60\x17\xf0\x18\xdc\x74\xc1\xeb\x18\x53\x42\xa1\x10\xee\x36\xbd\x51\x45\xf7\x60\x02\x35\x8a\x95\xd7\x1d\xcf\xdb\xf1\x00\x7f\x11\xb1\xb8\xb1\x0a\x14\x23\x3c\x1d\x38\xf7\x3b\x12\x22\x78\x3e\xf8\x78\x76\x74\xac\x10\x4b\x40\x5c\xed\x4f\xa2\x0e\x20\x9f\xd4\x4a\xa9\xaa\x0a\x37\xe5\xc3\x5f\xf4\x2d\xcf\x94\x71\xd1\x2a\xfb\x50\xe0\x40\x69\xdf\x08\x28\x0c\x89\x07\x79\xce\x2e\x45\x0c\x2a\xd1\xfc\x9e\x15\x0a\x63\x23\x2b\x95\xa9\x95\x44\x28\x90\xbe\x5c\xca\x8a\x8f\xd8\xc0\xb6\x89\xe9\xaf\x06\x7a\x65\x2a\x56\xf9\xf0\x7b\x62\xb3\xfb\x2c\x2f\x50\x40\x60\xeb\x7e\x81\xf0\xcd\xe0\x69\xda\xae\xc7\xc5\x22\xf3\xcf\xfc\x6e\xec\xf7\x4a\x54\x36\xc6\xef\x84\x7f\x51\x80\x22\x9f\x17\x85\xd8\xe6\x45\x50\xb0\xe5\x00\x39\x82\xae\xe4\xaa\x6b\x1c\xbf\xa9\x68\x43\x62\x54\x1a\x8f\xb3\x93\x08\x3b\xd9\x76\x9e\xd3\xb8\xf1\x0c\x22\xc8\x09\x37\x36\x2d\x5b\xe7\x6c\x71\x5b\x08\xdd\xad\x65\xa7\x4a\xd8\x54\x7c\x9a\xb5\x2e\x33\x7f\x92\xc1\xc1\xf7\x14\x8b\x33\x5e\x16\x9b\x19\xde\x7e\xa8\xd6\x97\xce\x1a\xcc\xb9\xcb\x03\x7e\xcb\x2a\x15\x3c\x2b\x49\x90\xae\xcf\xb9\x60\xb4\xfd\x3e\x62\xb5\xb0\x8b\x40\x05\xef\xd2\x5d\xe4\x8d\x8b\x41\xf6\x37\xb1\x1a\xa4\x23\x5f\xff\xee\x9e\xcc\xc3\xde\x8f\x31\xb2\x87\x5f\x02\x6c\xaa\x1d\x5f\xab\xc2\x8e\xbd\x9b\xad\x8e\xb8\xad\x6f\xf0\xa1\x28\xb2\x05\xac\x16\xfc\x02\x66\x20\x41\xd3\x14\xba\xc4\x1c\x1e\xfa\x29\xc6\xb0\x26\x7d\x0f\xe2\x47\xeb\x2e\x64\x61\xb8\xb9\x99\xb3\x23\x61\xf2\xd2\xc1\xfb\x84\x82\xa3\xd8\x8c\x03\xe7\x64\x78\x28\x94\xe8\x67\x3d\xd3\x9c\x98\xe5\x8e\xda\x0e\xe6\x39\xa6\x24\xa4\x72\x9b\x4b\xf1\x33\x75\x9a\xa0\x16\x58\x80\xdc\x2a\x84\xce\x38\xf0\x2c\xd7\x1e\xff\x37\x8d\x37\x3d\x22\xcd\xbc\x11\xfe\xf9\x88\xc4\xb1\x49\x62\xd2\x88\x4b\xd2\x6e\x2d\x56\x71\x4b\x9e\x16\x42\x8b\x64\xce\x00\xc6\x58\xcb\x2d\xd7\x00\x5c\xc6\x56\x76\xb6\x86\x65\xbc\x66\x24\x54\x2b\xe6\x50\x5a\xd1\x4c\xc0\x71\x15\xf2\xd2\x0e\xc6\x16\x20\x29\xec\x7b\x7f\xf7\x35\x73\x97\x39\xec\x5b\xfc\xd9\xe2\xfc\xd8\xbb\x47\xbd\x0d\x7f\x0f\xbf\xbc\xd9\xd9\x85\x99\x23\x01\x71\xbb\x3f\xb0\x58\xdf\x7d\x0d\xb9\x15\x60\xdd\xdd\xef\xf1\xdf\x73\xc6\xfe\xc9\xf9\xb5\x5b\x01\xee\xf2\x07\xbf\x6e\xba\x9f\x87\xf4\x39\xa0\xfe\x2a\x0b\x07\x3f\x7c\x9f\xf9\x1f\x55\x2b\x59\xae\xc5\x9d\xc8\x0a\xc6\x93\x04\xb0\x9e\x79\xda\x34\xe1\x46\xd8\xd6\x48\x4c\x9b\xcc\xd9\x99\xf5\xb5\xfa\xb6\xb3\xad\x5c\x6b\x0e\xfb\x99\x53\x56\xb1\xe4\x66\x89\xeb\xcd\x8a\x67\xfd\xfb\xd2\xc4\xc5\x54\x84\x39\x66\x57\xa5\xc6\x14\x43\xfc\xcb\x8a\x7b\xfb\xe1\x17\x3f\xb3\xd0\x59\x4a\x95\xa9\xbf\xb0\xf5\x97\x71\xe7\x50\x16\x5c\xd6\x51\xe0\xce\x25\xde\x5d\xd4\xb6\xf5\xe4\xf6\x0f\xbf\x64\x80\x5a\xb0\xe2\x58\x4d\x0e\xd1\x70\x2d\xb3\x95\xcc\x81\x0e\x03\x31\x0c\x9a\x9d\x41\x1c\xa1\xd2\x14\xb2\x28\x65\x7f\x7a\x17\xbc\xed\x61\x82\xf1\xa8\x5e\x97\x6e\x72\xf7\xb5\xf7\x12\xeb\xbf\xe9\x16\x75\xf7\xfb\x5a\x39\x91\xdd\x0f\x88\xbe\xfb\xc0\x46\xca\x33\x61\xac\x16\x5e\xfb\xfb\xf7\x73\xc6\x2e\xec\xb4\xb5\xa7\xb1\xad\x32\x15\xa6\x18\x13\x59\xc8\xd1\x84\x3c\x73\x9e\xd9\xe6\x8a\xad\x84\x76\x40\x45\x75\x4b\xed\x44\x87\xb1\xbb\x83\xb4\x6f\x0f\x9d\xaf\x85\xc8\x62\xe3\x78\x22\xc1\xe6\xd4\x3a\x08\xd7\x19\x67\x77\xe2\xe7\x98\xaf\xd5\xcd\x56\xb8\xa1\xa6\x9e\xe8\x41\x83\x6d\x79\x17\xf7\x29\x71\x33\x1c\x57\xde\x0a\x4d\xad\xbd\x11\x12\x8b\x26\xd7\x76\x67\x7a\xc9\x8e\x3d\x31\xe9\xa6\x28\xf2\x3a\x1e\x2c\xd2\x08\x88\xe4\x25\x8b\x7e\x62\x6a\xbf\x31\x8e\x31\xd8\x2d\x09\x64\x8d\xe1\x97\x35\x82\x0c\x56\x2c\xee\xa4\x51\x2f\x19\x56\x5d\xa0\x64\x8e\x55\x17\x1d\xd4\xa9\x60\x8b\xcc\x10\xe9\xeb\x65\xfd\x48\xef\x28\x12\x5a\xb0\x81\x6e\xe6\xa2\x8d\x48\x59\x49\xc6\x3b\x7c\xe7\x11\xfc\x02\x70\x66\x62\xea\xa1\x67\x46\x14\xef\x81\x53\xfa\xfd\xcd\xee\xbd\x4f\xa7\x21\xef\xc3\xb1\x67\x00\x7e\xe1\x2e\xa1\x6b\x91\xb0\xc4\x6e\x41\xda\x6e\x6a\xfa\xe1\x57\x03\x2c\x0d\x94\x82\x7e\x6b\xb1\x3c\xa5\xe0\x12\x2a\x3b\x52\x45\xde\x93\x39\x8b\x02\x48\xa8\x1d\x0d\x19\xc5\x8a\x08\x3d\x32\x4b\xd4\xbd\x61\xee\x3e\x94\x9d\xd0\xfc\x65\x27\xad\x28\x89\xfd\xb7\x13\xd0\x2f\xfd\x5c\xdd\x0b\x7d\x09\x41\x8f\x49\xf3\x55\xcb\x42\xb0\x55\xa9\x53\x76\xa3\x12\x60\xd6\x7e\x75\x7c\xb2\x84\xf7\x57\xf0\x04\x22\xce\x45\xa2\x4a\x2a\x7f\xf9\xb5\xe6\x37\xb8\xa8\xac\x4a\xa1\x73\x85\xa2\x30\x20\xb3\xb8\x38\xfc\xee\xf8\xed\x19\x38\xb7\xe5\x1a\x5f\x64\x27\xac\xc7\x16\x57\x3f\x86\x54\x57\xc6\x73\x3f\x60\x44\x97\x04\xb9\x5b\x69\x79\x23\x75\x7f\x05\x18\xd2\x3e\x0f\x62\x14\xfd\x8b\xcc\x5d\xd4\x59\x54\xd7\x98\x2e\xae\x3f\x22\x23\x3b\x62\xa3\xfa\x97\xe3\x73\xa4\x1c\x70\x81\x72\xef\x37\x4f\x4a\xd3\xfe\xf3\x6c\xc6\xd3\x54\xdd\xcf\x72\x2e\x03\x7d\xfd\x0c\xb7\xfe\xff\xc9\x66\xb3\x44\x1a\xea\xfb\xef\xa7\x41\x40\xf4\x68\x9a\x2e\x29\x53\xa1\x56\x03\x0a\x61\x32\x35\xf3\x97\x9a\xfe\x6f\xb8\x66\xf4\x7f\x00\xe2\x21\xfc\x11\x13\x0b\x7c\x4f\x2e\x7b\x84\xe2\x37\xd7\x27\x57\xc7\xe7\x8b\x8b\xab\xaf\x5e\x9d\x5d\xbc\x99\x1d\x2d\xae\x16\xec\xf0\xec\xf4\x6a\x79\x7a\xc5\xbe\x3b\x3e\x3a\x5a\x9e\x7e\x3f\x4d\xe0\xf9\xc5\xf1\xdb\xc5\xd5\x92\x81\xa4\xbd\x24\xac\x53\x75\xc3\x53\x0f\x05\xfd\x7d\x38\x48\xff\xd9\x97\x9d\x99\xf9\x7c\xfe\x3d\xfb\xb3\xff\xdc\xff\x90\xd0\xf2\xe7\x80\x00\x8d\x82\x85\xf9\x3e\x1c\x9d\x82\x48\xe5\x64\x86\xdf\x56\x2b\xca\xf7\x84\x99\x1b\x99\x24\x22\x9b\xd6\x37\x5c\xe6\x89\x26\xf0\x25\x71\x09\x61\xfd\xc5\x69\xc8\xe0\x9c\x5c\xd7\xec\xa9\x97\x6c\xa3\xee\xc9\xfd\x3b\xb7\xcb\x43\x21\xe9\xc6\x31\x31\x1d\x21\x23\xb0\xca\x11\x32\x26\x52\xb9\x02\xe2\xab\xe6\x66\x43\x1a\xdd\xe0\x35\x0d\xbc\xf1\x6b\x4e\xf6\x23\xcf\xab\xb8\x2e\x40\xea\x51\xa2\x1f\x7e\xdd\xe2\xfa\xdb\x41\xa5\x4a\xc0\x31\xc4\xc2\xa9\x31\xaa\x7b\x82\x03\xd2\xc8\xc9\x34\x08\x94\x01\xb9\xb6\x1e\x17\xfc\x96\x4b\x1a\x1c\xa2\x86\xe8\xdd\x91\x53\xbb\xe1\xec\x96\xa7\x29\x39\xa2\x15\x77\x3a\xa1\x20\x90\x98\x37\x00\x11\x09\x71\x70\x7e\x7c\x59\xa5\xc6\x92\xe3\x18\x39\xed\xf1\xcf\xbb\xa5\xfa\x6d\x8a\xca\x76\x20\x36\x21\x22\xf9\xe1\x66\x07\xb4\x59\xea\x3e\x4b\x15\xa7\x7d\x62\xf7\x33\x61\x56\x5c\xdb\x29\x49\x74\x79\x75\xcb\x66\xb3\xbb\xde\x8b\x3e\xba\xe1\xdd\xd4\x16\xfe\xcc\x3c\xb5\x9d\x4b\x2e\x9b\x4d\x6c\x98\x97\xd3\x7e\xdf\xfb\xbe\xbb\xb2\x5d\x7a\x24\x6d\x6b\x9a\xf7\xc4\xae\x0c\x0f\xbf\x64\x89\x32\xc4\x0a\x15\xe1\xc9\x13\x22\xdc\x2f\x7a\x3c\x94\x44\x58\xd7\x99\x1a\x25\xfb\x6d\x9a\x52\x93\xdf\x7b\x2f\xe4\x00\x64\x8a\x0d\x2c\xd4\x89\x34\x94\x2f\x06\xf7\xa6\x74\x2b\xea\xd5\x80\x66\xc4\x8b\x00\x1e\x21\xac\xf9\x93\x9e\x72\x3d\x1f\xee\x11\x4d\xa9\x60\xce\x50\xbe\x5c\x2f\x25\xae\x2b\x93\xec\x6b\xd9\x2a\xa1\x94\x86\x71\x8f\x07\x8f\x3f\x39\x00\x2b\x79\xc6\xd4\x7d\x16\x3e\xa4\xec\xed\x29\xce\x14\x26\x2e\x37\xf5\xf5\x9c\x89\xb2\xf2\xeb\xdf\x00\x35\x49\x2e\x45\x61\x97\xc4\xf9\xbb\xac\xe2\xb4\x7a\x97\x5d\x3b\xe0\xe6\xff\xb1\xba\x0d\x51\x59\xb0\x76\x86\x86\xfd\x0f\x1f\x18\x72\x88\xe9\xf6\xf0\xeb\x24\x9b\x48\x29\x05\x27\xde\x33\x2a\xf5\x01\x70\xa3\x52\x1f\xaa\x27\x18\x95\x5a\xdf\xdb\x43\xe3\xed\x1f\x1e\x95\xee\xe1\x88\x86\xa2\x3e\xca\x7d\xc3\x61\xc8\x37\xca\x49\x23\x5f\xaa\x7b\x6a\x6a\xca\x0c\x6a\xa0\x89\xb9\x29\xf8\x6a\xe3\xd2\x15\x65\xc6\x9e\x21\xc6\xea\xb3\x1a\x89\x1d\x7e\xf8\x0c\xfa\x20\x34\x09\x62\xbf\xe2\x89\xcb\x5d\x14\x91\x20\x40\x42\xad\x52\x8e\x70\x1c\x12\x9e\x78\xa9\x84\x55\xc8\xed\x40\x68\xaa\x48\x17\xa8\xd6\x77\xec\xce\xe5\x29\x9f\x3b\xa3\x7d\xbe\xb2\xd9\xc4\x7c\x46\x59\x49\x3a\xc5\x51\xde\x0e\x5c\x71\x64\x85\xd2\x99\xea\x94\x99\x29\xe8\xa6\x7e\xf8\x95\x63\xfa\x50\x99\x12\xa9\x39\x10\xdd\x26\x14\x9a\x92\xf6\xf6\xd1\x1b\x63\x45\xa9\x91\x03\xfd\xf6\x16\xb2\xb0\x54\x2a\x98\x58\x6d\x14\xdc\x21\x84\x6c\x16\x91\x15\x7a\x17\x01\x84\x1c\x55\x3b\x14\xe9\x1a\x35\x59\x99\x12\x5f\x39\x0f\x81\x09\xb1\xf2\x77\xe2\xa8\x95\x87\x70\x80\xd5\xc5\x31\xd5\x3e\xca\x42\x21\x95\x77\x77\x4e\xa6\x7d\xb4\x67\x88\x55\xf9\xde\x85\x04\x08\x11\x5a\xc0\xf5\x82\x3d\x77\x13\x62\xd6\x9a\x17\xa5\x2c\x14\x5c\x31\xb1\x9c\xaf\x09\x51\xed\x4a\x11\x69\xa8\xb3\x7b\xfb\xb7\xc2\x10\xe4\x10\x9d\x62\xfd\x09\xc9\x08\x6a\x52\xb4\x9b\x55\x2c\x84\xee\x0a\x81\xdc\xd6\x3b\x55\x02\x3b\x3e\xd2\x4c\x8e\x56\x19\x6e\x70\x23\x95\xf6\x25\x27\xd4\xaa\x89\xdb\x73\x38\x5b\x6d\xfb\x60\xfd\x3d\x86\x7d\x7c\xb8\x1a\x25\x6f\xec\x91\x6d\xba\x02\x38\x42\x78\x44\xad\xe3\x2c\x11\x3f\x7d\xfa\x74\xc0\xb4\xe0\x46\x65\x48\x6b\xf4\x93\x2c\x6a\x2f\xc0\x81\x75\x31\x8a\xf7\xa6\xe0\x45\x69\xc2\x4f\x2e\xe1\xcf\x9e\x63\x8b\xb3\xa6\x5b\xdf\x56\xd9\xd5\x9d\xd4\x67\xec\x3a\xf9\xde\xf0\x54\x26\xbc\xad\xb1\xb7\x7f\xc3\xe7\xd1\x81\xf6\xd4\x66\x56\x09\x20\xb6\x33\x7b\x52\x5b\x4f\x64\x3e\x73\x2c\xac\x4c\x66\x1b\xa1\x65\x81\xbc\xb7\x32\x0b\x95\x00\x84\xb0\x3b\xbb\x6a\x3b\x84\x68\xbc\x14\xdb\x08\x2d\xe0\xe8\x9e\x29\x97\xae\xcb\x5d\x38\xb6\x2a\x04\xe8\x37\xe1\x2e\xa4\xb2\xfa\xad\xe8\xf0\xd5\xfb\xcb\xab\xc5\xeb\xe3\xd3\xd7\xef\xaf\x8e\xdf\x2c\xcf\xae\xaf\xfc\x12\x49\x3e\x76\xcc\x5f\x0d\x36\xa8\xb0\xe6\x76\x6d\x4b\xbd\xf2\xf7\xb2\xf5\xe2\xea\xfa\xfc\x73\xda\x4a\xc8\xef\xb4\xb5\x8f\x7a\x4f\xb8\xca\x1b\xaa\xa5\x29\xaa\x8b\x75\x42\xc4\xc3\x5f\xd3\x42\x6e\xe3\x5b\xcf\x1e\x61\x65\x8e\xe7\x77\x6a\x6e\x7b\x61\x06\x6a\xd0\x88\xf9\xed\x28\x22\xa8\x45\xc9\xd1\x36\x10\x6d\xd5\xea\xc3\xf0\x69\xb7\xbb\xed\x98\x15\xb6\xaf\x25\xd5\x69\xd7\x94\xe8\xed\xe0\xe6\x4e\x37\x9b\x56\x7a\x97\xa9\x8c\xdd\x70\x23\x57\x43\x11\x0b\x70\x77\xfc\x15\xea\xcd\xc3\x2f\x46\xae\xa8\xf8\x40\xa6\xc8\xbb\x26\xeb\x8b\x95\x54\x0d\x9b\xdd\x68\xf1\x0d\xf3\x95\x03\x2e\xb4\xe6\x40\x6e\x7a\x4e\xa1\xa6\xfe\x1a\x89\x14\x51\x71\x5c\xc8\x8d\x7c\xb8\x34\x1c\x11\xf9\x7b\x6a\x7c\xea\x2c\x5d\x44\x73\x7b\x44\xa3\x42\x63\xc1\xcd\x4f\x88\x87\x6b\x3d\x35\x4c\xbf\xa0\x44\x84\x2b\x6d\xda\x57\x03\x21\x21\xa1\xe3\xe3\xc7\xf9\xa9\xca\xbe\xb5\xcf\xdf\x65\xc2\x98\x05\x46\x46\xc8\x75\x2b\xae\x4f\x00\x3d\xfd\x42\x08\x23\x8a\xcd\xa8\xbd\x85\x68\x3e\x15\xac\x64\x78\xd0\x88\x76\x4a\x53\x93\x2e\x2f\x85\xa6\xf6\x34\x4f\xbb\x4e\x35\x55\x46\xf6\x2c\x99\x03\xc4\xa7\xf6\x6b\x21\x12\xa5\xbb\x5b\x43\xc1\x3f\xb5\x04\xac\xf0\xcb\xce\x86\x5a\xe4\xca\x71\x4d\x4d\x8b\x3d\x56\xef\xa8\xf5\xd1\xa8\x17\x1f\x9d\xaa\xc1\x17\xb2\x21\x8c\xea\x48\x4b\x1a\xd9\x29\x20\x9d\x48\x18\x2f\x0a\x2d\x6f\x80\x67\x21\x91\xe6\xc3\x7b\x18\xa6\x67\x9e\x98\x86\xd0\x72\xeb\x79\x68\x38\x36\x56\x2c\x13\x2b\x61\x20\x7f\x25\x16\x33\x5e\x77\x70\xf3\x1e\xa5\xba\x92\x32\x5e\x33\x6e\x46\x8f\x52\xeb\x44\x8c\xd7\x09\x75\x96\x8f\x52\x89\x12\x28\x8d\x76\x29\xf2\xfc\x8e\x0c\x2a\x6f\x7a\x5f\x56\x58\xb1\x20\xda\x82\x4d\xe9\x00\xf7\x64\x89\x3d\x62\x28\x09\x3d\x5c\x50\xba\xcc\x66\x05\x27\x03\xcc\x64\xa3\x8c\x1e\xe5\x1a\xad\x70\xb7\x80\x51\x88\x6c\x63\x31\xd8\xdc\x0e\x33\xb0\x87\xf4\xb6\x1d\x86\x6d\xdb\x1f\xa7\x6d\x24\xa2\xd7\x04\x90\xb4\xb1\x7c\x5d\x53\xe8\xb9\x86\x39\xea\xa1\x78\xa2\x96\x6d\xdd\x2f\xa9\x67\xe7\x84\x94\xbd\xb1\x26\xcd\x7a\x71\xed\x7a\x9b\xbe\xc7\xa6\xef\xd7\xa5\x4c\xd8\xf1\xe9\xb4\x1c\x0f\x2f\xe3\x31\x8d\xa9\x27\x13\x1c\x1b\xa2\x35\x84\xd2\xc9\x2b\x2f\x1f\xfa\x26\x1a\x4b\x7a\x92\x01\xa8\x09\xd1\xac\x07\x5a\xa2\x97\x84\x23\x02\xff\x21\x23\x0a\xe0\x0c\x98\x08\xd0\x87\xd8\x43\x41\x16\x29\xc5\xb5\xa5\xa2\x12\xc6\x6c\x02\xff\x6a\x14\xbd\x4b\xa4\xe9\x8b\x56\xdb\xf9\xec\x08\x57\xed\x8c\x34\x9b\x2a\x84\x27\xb3\xa1\x50\xf6\x80\x4a\x26\x33\x87\x1e\xf4\x38\xe5\x2e\xbe\xe1\xf1\x39\x26\xd9\xe2\x62\xf5\x70\xcc\x79\x16\xc3\xbc\x50\x59\x89\x3d\x36\x45\x16\xc1\xd1\xa7\x21\x6f\x1f\xb3\xc2\x08\x3d\xab\x43\x16\x3d\xce\xba\xfa\x78\xb5\x44\x8f\x31\x34\x3c\xc3\x5b\x32\x91\xa7\x6d\x4b\xc7\xa3\xb3\x03\x35\x4d\xe1\xf4\x49\xf3\x34\x33\x26\x9a\x29\x13\x35\xef\xd3\xdd\xd6\x04\xd8\x5f\xe7\x1e\x7d\xb5\xc7\xff\xf8\x09\x8f\xd7\x1e\xa2\xed\xad\xa7\x3c\x5e\x73\xfc\x4e\x4e\x57\x3c\x52\x6d\xd1\x97\x1b\x23\x53\xea\x6c\x06\x79\x8a\xc0\x9a\x37\x6d\xc3\xb3\xcd\x68\x9f\x10\xe0\x7c\xa8\x45\x74\xf0\x28\x47\xb7\x2b\xc9\x14\xa5\xde\x86\x2a\xcf\xc9\x0d\x21\x11\x85\xc8\xe8\xdd\x15\xdb\x32\x0e\x05\x84\x5f\x33\x2d\x80\xa9\x9e\x3a\xba\x7b\x61\x2c\x89\xea\xb1\x00\xb0\x5d\x38\x86\x7b\xd2\x47\xb6\x5e\xf9\xb4\xd3\xb1\xcb\x07\x2e\xc4\x74\x8f\xbe\xe7\x79\x6f\x14\xf5\x46\x17\x8e\x10\x7b\xa5\xb2\x4c\xac\xa0\x6e\x08\x21\xa0\xc0\xb1\x13\xfa\x00\xcb\x5c\xd7\x15\x79\xe9\x86\xbe\x07\x27\x54\x00\xd5\xec\xa8\x9b\xa7\x1e\x42\xe9\x58\xca\xd4\xfb\xa6\x3e\xb1\xbb\x9c\x1a\xb4\x42\xe6\xc4\x04\x2a\x39\x05\x27\x4c\xfc\x3e\xfb\x90\xa9\xfb\xcc\x13\x57\x92\xf7\xfb\x35\xa6\x49\xc8\x50\x83\x22\x49\x8a\x0c\x2a\xf0\x20\x53\x2f\x6c\x7f\x94\xbb\xd4\x54\xc0\xff\xfa\xe2\x84\x6c\xd2\x43\xf4\x4a\xb7\x21\xc1\xaa\x2e\x4e\x88\x25\xac\xec\x43\x85\x2b\x0d\xe5\x7c\x96\x86\x3c\x65\xf4\x22\x5a\x95\x0e\x1f\xcc\x01\x7b\x8d\xca\xab\xa5\x25\x05\x28\xe8\x9e\xd8\xed\x34\x54\xe7\xb2\x1f\xb7\xab\xbb\xd1\x9d\xd0\x37\xca\x08\x28\xc3\x73\x89\x8c\x50\xe2\x32\x55\x48\x4f\x06\xe4\x5d\x2f\xd4\xc9\x8e\x3e\x3c\x3d\xfc\xda\xdd\xc4\x31\xc4\xba\x0a\xa3\x4f\x9f\xd8\x73\xa8\x48\x43\x23\xe0\x72\xb5\xa2\xa3\xbc\x2c\xb4\xcc\xd6\x9f\x3e\x51\x34\xe0\x6d\x59\x6f\x5b\x3c\x97\xa4\x48\xd2\xba\x3c\xf7\xf7\xc3\x27\xf6\xf5\xb2\xb3\xe5\x69\xb2\x97\x59\xa7\x74\xd2\x90\x6f\x65\xc6\xb5\x4b\x90\x09\x8f\xf7\xe3\xc7\x79\xa3\x27\x93\x1e\xf6\xc7\x8f\xf3\xc3\x57\x1e\x1d\x35\x97\x44\x5b\x57\x6e\x18\xfd\x78\x58\x5a\x1f\xa8\x20\xb0\xb8\xba\x28\x51\x78\x3c\xa3\xa4\xab\x32\x2b\xce\x6e\xfd\x2d\xc2\xa7\x4f\xa1\x16\x95\x04\xcb\x14\x6c\xc3\xbf\xaa\xaa\x00\xbb\x84\x10\xd9\x63\xf6\xa7\x98\x06\xeb\xf1\x31\xfb\xb3\x62\xbd\x2a\x97\xf8\xce\x5a\xed\x49\x35\x47\xd2\x7c\x00\x54\xcc\x4f\x9f\x98\xba\x65\xee\x13\x87\x9d\x4b\xcf\xf5\xb8\x19\x0e\x60\xdc\x8c\x54\xa6\xee\x33\xdf\xa1\x9e\x14\xb7\xc0\xf3\x91\xa8\xaf\x0c\xab\xb7\x23\x65\xb7\xd3\x93\xde\x65\x57\xc7\xe7\x2f\x59\x00\xf0\x7c\xe5\x87\x3d\xc2\xe1\xf4\x18\x9a\x11\x8c\x06\x60\x62\x60\x05\x77\x8c\xa2\x49\x3d\x65\x42\xb5\xcf\x30\x64\x3e\xc1\x90\x34\x01\x21\x37\xa1\x60\xda\xc3\x10\xd4\xee\xb1\xb0\x82\xb7\x1b\x7a\x93\x9e\x3e\x70\xfd\xfe\x2e\x7b\x57\xc0\xff\x70\x24\x02\x2a\x2c\x16\x53\xfa\xaa\x4b\x76\xbf\x11\x58\xbc\xfd\xce\xb6\x3c\x2f\xcd\x26\x98\xf7\xee\xef\xe0\xec\x05\xbc\xc1\xbe\x96\xfa\x5e\x16\x1b\x89\x0d\xd0\x97\xb5\x5e\x12\x20\x9c\xb8\xa2\x30\x2c\x44\xb7\xab\x8c\x63\x62\x58\xa9\x44\x40\xde\xa5\x7f\x16\xc1\x92\xfa\xa3\x30\x42\x74\x02\xbb\x85\xdc\x7d\x53\x93\xd2\x0d\xc9\xca\x12\x91\x17\x1b\x47\x05\x1d\xf0\x59\xfb\x1f\x5f\x3c\x54\xe1\xc9\x9d\x40\x9d\x1c\x14\x05\x98\x16\xc8\xae\xf1\xe3\xc7\x33\xb6\x2a\xa1\x6e\xd9\x04\x48\x04\xbb\xc5\x76\x8e\x25\xf2\xa2\x26\x22\x2b\x34\x02\x51\xf8\x01\x94\x0d\x08\x39\x91\x06\xd2\xf0\xdb\x52\x64\x85\xa8\x96\x6e\x1c\x82\x68\x56\x75\x0d\x66\x98\x54\x35\x60\x38\xba\x37\x01\x0f\xae\x25\x7d\x34\x68\x2d\xab\x10\xa8\x46\xcc\x4b\x9c\x91\xe5\xa3\xc0\x75\x63\x71\xe1\xa9\x95\xfb\xd8\x4e\x9a\xfb\x0a\xab\x75\xed\xe2\x98\xa5\x3b\x76\xaf\xf4\x07\xc3\xca\x1c\xb0\x26\x5e\xb1\xc8\x5d\xb0\xcb\xd4\x1b\xfe\x93\xdc\x96\xdb\x40\x60\x3d\x47\x5c\x32\x57\x36\x21\x0d\x6b\x10\x5c\xf7\xcc\xc9\x4a\x2f\xc0\xdc\xde\x96\x19\x92\x61\x6e\xb8\xc1\xda\x79\x82\x45\xfb\x55\xb7\x1d\xc8\xed\x59\x48\x4c\x47\x68\x99\x31\xdc\x7b\x77\x85\x66\x3a\x7a\x7d\xe1\x6e\xd7\x82\xbc\xff\xfa\x24\xfd\x06\x8d\x42\x8b\xa1\xce\x76\xa9\xdf\xb7\xbb\x29\xe2\x65\x04\x4c\x6a\x2c\x80\xee\xb1\xb6\xd5\x20\x4d\x39\x3d\x99\xbc\xb7\xf5\x06\x0e\x96\xde\xa3\x7b\xc2\xfc\x46\x46\x29\x21\x4d\x7a\x23\xb6\xf5\xdd\xff\x8d\xd8\x0e\x6e\xfe\x51\x23\xdc\xfb\xa3\x46\x3d\x8a\xa2\x3e\xef\xdd\xd5\xa6\xa4\x71\xfa\xde\xec\xaf\xf0\xcd\x54\x95\x97\xf2\x67\x3b\x30\x3f\x41\xea\x49\xb9\xf5\x8f\xc3\x44\x4f\x7a\xda\x21\x0f\x24\x1b\x1c\xef\x77\xd9\xa9\x02\x60\x28\x80\x13\x8b\x40\xa8\xa8\xf7\xf3\xef\xe7\x2f\xe6\x2f\xfe\xeb\x34\x0a\x14\xab\x50\x25\x22\x45\x04\x7d\xe6\xff\xf4\xae\xfa\x98\xe3\x6a\xbf\x88\x81\x22\xd1\x8f\x1f\xe7\x67\x3e\xc5\xcf\x09\xe8\x2d\x5f\xec\xf8\xfd\x50\xc5\x62\x47\x13\x09\x55\x1d\x6b\x4d\xd7\xef\x76\x34\x12\x76\xf3\xd7\x54\x2e\x50\x47\x03\x53\xae\x56\x42\xd0\xa7\xf5\xee\xbe\x18\x69\xdd\x0b\x5e\x48\x73\x0b\x85\xc2\x54\x56\x5f\xab\x98\x01\x0b\x3f\x6e\x00\x74\x08\xce\x68\x4c\x41\x3d\x43\x8a\x79\xa2\xb4\x11\x0d\x31\x50\xf6\x61\x84\xa7\x20\xd3\x52\x30\x28\xaf\x71\x89\xa2\x65\x4a\x8f\xc0\x90\x41\x7b\x1b\xe2\x94\xe3\xb5\xb0\xa4\xe7\x52\x43\xc2\xe8\x8a\x91\x76\xd3\xf1\x85\x21\xb0\x2f\x61\x0a\x08\xc0\x7e\x9f\x2b\x5d\xd8\x15\x60\x38\x79\x83\x6a\x39\x2a\xa9\xc3\xa3\x8c\x1b\xbf\xce\xf6\x66\x79\xb4\x7f\x4d\xa7\x7d\xd8\xdf\x62\x12\x87\xdf\xeb\x70\xbb\xb8\x52\x05\x4f\xfd\x47\x15\x60\x53\x7f\xc2\x47\x5b\x18\xae\xec\x5d\xc2\x24\x47\x70\xd9\x81\x04\x91\x8a\xfb\x24\xf4\x66\xe0\x4a\x9d\x6c\x41\xde\xb2\x23\xa8\x3a\xdc\x5a\x78\x23\x07\x6e\x31\x20\xd8\xe0\xd9\x4b\x1a\x6d\x27\xeb\x60\xcf\xed\x49\x18\x4b\x4b\xe9\x38\x54\x9f\xca\xa6\x84\x1e\x0b\x8a\xc6\x92\x38\x0f\xc7\xe8\x8e\x13\xac\xbb\x29\x76\xdf\xd4\x8f\x74\x48\xfa\x55\x61\xa1\xe1\x25\x4c\x8f\x07\xe8\x95\xfb\xa5\x75\x5e\x3b\x41\x77\x69\x27\x94\x07\x8c\x39\xad\x1c\x20\x8b\xcb\xcc\x4b\x44\xf0\xa7\x11\x12\x90\xf6\x08\x91\x8b\xdd\xdd\xc2\x71\x97\x00\x5c\xea\xf4\x80\xe5\xa9\xe0\x46\x78\xa0\x72\xc6\xf1\x53\x20\xef\x07\x60\xa0\x97\x5f\x7d\xb5\x53\xa5\x7e\xaf\x45\xae\xe6\x2b\xb5\xa5\x3b\x8c\x3a\xd0\x55\x2d\x33\x76\x7d\x71\xe2\xf3\x85\x0f\x22\x50\x61\xe1\xbf\x5b\xa9\xad\xfd\x42\x69\xfb\x4e\x6c\xf3\x54\x1d\x04\x85\xa6\x04\x75\x46\xc2\x81\x12\xb4\x92\x1d\x73\xfe\x9b\x75\x62\xe1\x94\x55\x88\x04\xfd\x17\xef\xbb\x78\xc7\xa5\xf5\x72\xf7\xf4\x64\x5f\xa1\xbe\xf4\xe4\xff\xf8\xfe\xff\x0f\x00\x00\xff\xff\xac\xdf\x52\xc8\xa5\xdb\x03\x00") + +func cfI18nResourcesEsEsAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesEsEsAllJson, + "cf/i18n/resources/es-es.all.json", + ) +} + +func cfI18nResourcesEsEsAllJson() (*asset, error) { + bytes, err := cfI18nResourcesEsEsAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/es-es.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesFrFrAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\xdf\x72\xe3\x38\x96\x20\x8c\xdf\xef\x53\xe0\x97\x73\xa1\xac\x09\x4b\xce\xac\xae\xd9\xd8\x70\xc7\xc6\x8c\xca\x56\x66\xaa\x5b\x69\xbb\x65\x39\x67\x6a\xcb\x15\x2e\x98\x84\x24\x54\x52\x04\x13\x00\xe5\x54\xba\xbd\x4f\xf1\x7b\x80\xbe\xfb\xda\x73\xb1\x57\xf3\x06\x7a\xb1\x2f\x70\x00\x90\x20\x45\x90\xd4\x1f\x67\xd6\xcc\xb7\xdd\x11\x95\x32\x49\x9c\x73\x70\x00\x1c\x00\xe7\xef\xcf\xff\x0d\xa1\x87\xff\x86\x10\x42\x2f\x68\xf8\xe2\x04\xbd\xb8\x89\x6f\xe2\xc9\xf0\xf2\xe4\x26\x7e\x71\xa4\x9f\x4b\x8e\x63\x11\x61\x49\x59\x6c\x3f\xe8\x5f\x4d\xae\x4f\x07\x48\x7d\xf4\xdf\x10\x7a\x3c\xaa\x02\xf2\x13\x4b\x39\xfa\xd3\xd5\xc5\x39\x12\x92\xd3\x78\x86\xc4\x2a\x96\xf8\x33\xa2\x02\xd1\x78\x89\x23\x1a\xf6\x10\xba\xe4\x2c\x21\xdc\x79\x25\xe7\x54\x9c\x20\x14\x4c\x91\x20\xb2\xcb\xd3\x38\xa6\xf1\xac\x4b\xe2\x25\xe5\x2c\x5e\x90\x58\x76\x97\x98\x53\x7c\x17\x91\xee\x8c\xb3\x34\x41\x9d\x87\x9b\x17\x31\x5e\x90\x9b\x17\x27\x37\x2f\x96\x38\x4a\xc9\xcd\x8b\xa3\xcd\x47\x8f\x9d\x9a\xee\x8c\xb0\xa1\x80\xa0\x90\xa0\x25\x93\x9c\xa0\x60\x8e\xd7\xff\x27\x26\xba\x07\x71\x87\x08\x89\x12\x2c\x10\x10\x4e\x7a\x08\x39\x6d\x02\xc6\x39\x09\x24\x41\xea\xa3\x08\x23\x91\xd2\x25\x8e\x25\x41\xdb\x77\x84\x2d\x2c\xd1\x24\xe5\xba\x23\xa5\x47\x8f\x9d\xe7\x65\xb9\x90\x78\xf6\x5f\x82\xe5\x6d\x3b\xb2\x0f\xcb\xff\x11\x4d\xe6\x44\x10\x24\x08\x5f\xd2\x80\xa0\x24\xc2\xb1\x40\x73\xbc\x24\x08\xc7\x08\x0b\xc1\x02\x8a\x25\x09\x51\xc0\x84\xec\xa1\x53\x4e\xb0\x54\xe3\x82\xb3\x16\x34\x16\x12\xc7\x01\x41\xf7\x34\x8a\x10\x8d\x83\x94\xc3\x80\xe8\x16\x5e\x06\xfe\x23\x3a\x25\xc2\xa0\x0b\x73\xfc\x31\x41\x82\xc5\x9a\x6d\x33\x8e\x65\x4a\xa5\xe8\x29\xbe\x05\x7c\xfd\x04\xcd\x51\xd8\x49\x63\x07\xad\xd3\x78\xc9\x52\xa1\xfe\xc0\x68\x8a\x03\x99\xf2\xf5\x13\xe9\xf9\x3a\xde\x4f\x12\x24\x24\xe6\x92\x84\x35\x82\xa2\x9f\x24\x11\x0d\x0c\xde\xf5\xd3\x02\x73\x05\xd4\x2f\x34\x0c\x54\x09\x53\x21\x9e\x91\x10\x49\x66\xd1\x1c\xa1\xbb\x54\xa2\x98\x49\x82\xe4\x1c\x4b\x44\x25\x9a\x63\x81\x5e\x65\x5d\x11\x3d\x2f\x25\x75\xf8\x1e\x1e\x7a\xfd\x24\x39\xc7\x0b\xf2\xf8\x88\xee\xb1\xb0\xf8\x50\x2a\xd4\x48\x99\xb1\x58\x2c\x70\x1c\xa2\x5f\x1f\x1e\x7a\xa7\xfa\xf7\xe3\xe3\xaf\x35\x1d\x1f\x75\xb0\xd3\xf5\x02\x0a\x8c\xd6\x4f\x72\xfd\xe4\xf0\x03\xe1\x25\x09\xd4\x24\x36\x68\xc8\x26\x1e\x0f\xfd\xe7\x0c\xe1\x84\x22\x12\x87\x09\xa3\xb1\x54\xd3\xde\x3f\x65\xfa\x69\x90\xc6\x28\x66\x24\x0d\xd1\x94\xc6\x38\x42\x61\xa7\x7f\x39\x54\x84\x4c\x69\x4c\xbd\x43\x3d\x66\xa9\xe2\x39\x43\x77\x04\xa5\xf1\x02\x27\x09\x09\x95\xd8\x88\x99\x44\x41\xca\x39\x89\x65\xb4\x42\xe6\xb9\x64\x48\xce\x09\x72\x7a\xef\x27\x68\x84\x11\x07\xd8\x89\x12\x5b\x11\xfe\x94\x92\x28\x52\x0b\x27\x4e\x23\xc2\x51\x44\x00\x28\x9e\x11\x47\x16\xa8\x27\x8a\x65\xeb\xbf\xa1\xa8\xc0\x63\x35\x63\x55\x73\xb5\xcc\xbd\x5d\x51\xfb\x1a\x42\xd7\x82\xa0\x4e\x30\x45\x0b\xcc\x3f\x12\x99\x44\x38\x20\xa8\x2b\xd0\xd5\x60\xfc\x61\x78\x3a\xe8\xa8\x3e\x2c\x29\xb9\x47\x21\x11\x01\xa7\x89\x02\x2f\x10\x9b\x22\x1a\x87\x74\x49\xc3\x14\x47\x66\xe1\xb1\x29\xc2\x68\x46\x97\x24\xb6\x6b\xa8\x86\xfb\x66\xc7\x44\xa9\xa4\x11\x15\xe4\x4b\x2d\x09\xc0\x11\x3c\x9d\xd2\x60\xae\x38\x81\x5d\x5a\xd4\x6f\x43\x80\xa5\x88\x44\x02\xd6\x75\xb6\x94\x43\x16\xc7\xeb\xa7\x7a\x3e\xf4\x85\xa0\xb3\x18\x71\x16\x11\x81\xee\xa9\x9c\xa3\x8e\x9a\x76\x7a\x44\xaf\x05\xe1\x8f\x8f\x20\x47\x19\x9f\x75\xd5\x47\x1d\xa4\x96\x40\xf5\x37\x22\xc1\x01\xd1\x5f\x35\x73\x00\x4f\xa7\x4a\x74\x7f\x81\x8e\xf0\xf5\x7f\x28\xfc\xb0\x04\x9a\xf0\x13\xd9\x02\x7d\x5d\x97\x61\xe4\x15\x84\x37\x13\xcc\x67\x44\x66\x6b\x0c\x06\x5d\xc2\x33\x14\x93\x7b\x04\x00\xb7\x19\xcb\x6a\xa0\x30\x8c\x01\xbd\x53\xd3\x19\xd6\x5e\xba\x24\x11\x22\x1a\x7a\x2b\x42\x7d\x04\x32\x3e\xdb\x96\x3c\x1f\x59\xc4\xd0\x15\x11\x05\x15\xc7\x54\x68\x58\x75\xf4\xa5\x66\x09\x45\x6c\x46\x63\xd4\xc5\x48\x09\x92\x6e\x57\x7c\xa4\x49\x57\x88\xa8\x0b\x5b\x36\x80\xe9\x20\xc6\xe1\x53\x25\xa8\x6a\xbe\x52\x82\x3e\x4d\x12\x4e\x84\x3e\x90\x20\xc2\x39\xe3\x5b\x2e\xa7\x56\xe4\xa4\x6d\xc8\x01\x16\xad\x9f\x22\xba\xa0\x31\xe1\x28\x20\x52\x9d\x35\x38\x27\x29\xf7\x32\x86\x26\x9a\x31\xbf\xe2\x30\xec\x26\x51\x3a\xa3\x71\x97\x93\x84\xfd\x9a\xed\x1f\x92\x21\x1c\x86\x48\x3d\x14\x3e\x51\x51\x0d\x1e\x21\x74\xfa\xe6\xf6\xbc\xff\x7e\x80\x02\x96\xac\xba\x82\xa5\x3c\x20\xe8\xea\xe2\x7a\x7c\x3a\xe8\xf6\x2f\x2f\xd1\xa4\x3f\x7e\x3b\x98\xc0\xcf\x9f\xbb\xc2\xfe\x79\x75\xd9\x3f\x1d\xa0\x9f\xbb\xcc\x3e\xb8\x18\xbf\xfd\xe5\x17\xf4\x73\xb7\x1b\xb3\x2e\x27\xb0\xd7\xfd\xe2\xdd\xc8\x3c\x58\xfb\x97\x97\x5d\x8d\x19\x7e\x9e\x0e\x7f\x1c\x0d\x00\xe9\x00\xd0\x65\x0f\x18\xba\x18\xbf\xd5\x7f\x55\xe1\xf4\x75\xf4\x02\xc4\x1c\x8e\xa2\x15\x4a\x38\x5b\xd2\x90\x20\x8c\x22\x2a\xa4\x12\xb8\xc0\xca\x6e\x48\xd4\xc8\xa8\x5d\x5a\xe2\x99\xd0\x07\x02\x38\x40\xdd\x11\x74\xcf\xa9\x94\x24\xb6\x5b\xd1\x87\xd3\xfe\xe5\xad\x11\xac\x57\xc8\x39\x0c\x22\x7b\x18\x44\x53\xc6\x11\x8e\x57\xe8\x8e\xa5\x71\xe8\xee\x5d\xde\x41\x42\x08\x5d\x51\x7d\x60\x8a\xd4\x91\x2b\x9d\x63\x2a\xc9\x97\x23\x34\x65\x29\x8f\xa9\x50\x13\x52\xad\x2c\x45\x35\x41\x61\x67\xfd\x24\xe9\xa7\x54\x4d\x22\x81\xc4\xfa\x29\xc1\x6a\xdf\x17\x28\xc1\x7a\x01\x2e\x29\x9f\xa5\x11\x41\x9f\x52\xaa\x44\xb8\x3a\xc1\xad\x9f\x02\x4e\xd5\xe7\xa1\x12\xf4\x11\xce\xa9\x0d\x3b\xa6\x13\x31\x6c\x76\xa5\x0e\xc2\xc4\x95\xb0\xad\xba\xdb\x63\x44\xfd\xa7\xb9\x6a\x96\x9b\xad\xa4\x2b\x12\x12\xd0\x29\x0d\x50\xc0\xe2\x29\x9d\xa5\x5c\x03\x4c\x30\xc7\x0b\x22\x09\x57\xbb\x10\xc2\xfa\x90\xae\x4f\xee\xec\xee\x37\x12\x48\x44\xe3\x6e\x44\x63\xd2\xbb\x89\x9d\x69\x94\x26\x21\x96\xa4\x6b\xf7\xa9\x6e\xd0\xfe\x32\xa1\x6e\x0d\xbe\xd9\x31\xa5\x91\xba\x13\xc4\x12\xd3\x18\xee\x3d\x7b\x12\xdf\x43\x80\x6b\x32\x27\x28\xc1\x72\x6e\xe7\x92\xd3\x4e\x63\xc4\xb1\x9a\x71\xea\xa8\x7f\x27\x58\xa4\x98\xce\x38\xe2\x44\x4d\x94\x65\xde\x54\xd3\xd7\xc4\x88\xcb\xfe\xe4\xdd\xed\xe4\xe2\xf6\xcd\x70\x34\x30\x7d\x1d\x7c\xc6\x8b\x44\xc9\xe5\xe9\x26\x89\x27\xf0\xc5\x03\xfc\x17\x21\x74\xf3\x22\x88\x52\x21\x09\xbf\x8d\x59\x48\xc4\xcd\x8b\x93\xfc\x9d\x7e\xcd\xd2\x58\xaa\xc7\xff\x74\x54\x78\xbe\x20\x0b\xc6\x57\xb7\x8b\x3b\xf5\xee\xf5\xab\xef\x7f\xb0\x6f\x1f\xe1\xc7\xe3\x1e\x2b\x20\xd4\x53\x1c\x2f\xd6\x7f\x97\x9c\xc0\x45\xa5\x34\x0e\x9c\x29\x89\x8f\x70\x9a\x9f\x5c\xd4\x74\x4f\x63\xe8\xa4\xd4\xfd\xd5\xf7\x3f\x44\xd4\x2c\x9e\xe9\x09\xd5\x30\x9d\xda\x5c\xe9\x0c\x8b\x5b\x2c\x63\xa4\x8e\x61\x54\xed\x02\x2c\x96\x24\xc6\xb1\x3c\x6c\xcf\xcc\x64\x1b\xa9\x5b\x0f\x59\x50\x75\x45\xc3\x41\xb0\xfe\x3b\xb4\xb6\xb8\x43\x52\x40\x98\x90\x54\xa2\xf5\xbf\xab\x5b\xb3\x9e\x7a\x6a\x5f\xd3\x13\x6f\xda\x34\xd1\x4e\xdf\x0d\xde\x0f\xcf\x6f\xdf\x0c\x4f\xdf\x0d\x07\xe3\x6c\xaa\x11\x98\x6a\x61\x67\x93\xf3\xfb\x4d\xb5\x16\x53\xec\x1b\x88\xa5\x13\xd3\x6f\xcb\xa6\x3b\x1a\x87\x19\x93\xfa\x97\x97\xfa\xa9\x11\xab\xb7\xc3\xf3\xab\x49\xff\xfc\x74\xf0\xff\x61\x81\xd5\x9e\x41\xfb\x0a\xb2\x84\xf0\x05\x15\x42\xed\xbf\x6a\xc2\xdc\xbc\xe0\x04\x87\x5d\x16\x47\xab\x9b\x17\xbb\xc9\x24\x78\x94\xa8\x53\xee\x17\xb3\xb4\xf9\x33\x09\x27\x54\x3b\xaf\xce\x2f\xde\xdf\xaa\x03\x9a\xe5\x96\xdd\xb6\xff\xaf\xe0\xaa\x10\x5c\xad\x39\xb7\x87\x3c\x6b\x35\xd9\x7e\x07\xd2\x29\xe0\xc4\x15\xe2\xb6\xf3\x97\xa3\xfe\xf9\x7f\x22\x19\x75\x78\x11\xb5\x2f\x9f\xfe\x8b\x9c\xb9\xbe\xa1\x7c\xab\xe3\xf8\x7f\x15\x31\x77\x58\x29\xb7\x37\x0b\xf7\x92\x77\xcf\x35\x63\x7d\x42\xf2\x52\xad\x57\x31\x67\x69\x14\xc2\xb2\x46\x5f\x68\x02\x4b\xf7\x08\x61\x94\xf2\x48\xaf\xe5\xfc\xa1\xba\x8a\xa3\x88\x05\x38\x42\x21\xe5\x24\x90\x8c\xaf\x7a\xe8\x92\x09\x0a\xe3\x46\x05\xc2\x28\x81\xbf\x96\x04\xd1\x58\x92\x19\xe1\x47\x48\x10\x29\x50\xc2\x29\xe3\x54\xae\x8e\x40\x51\x49\x05\x12\x0c\x14\xf9\x53\xce\x16\x28\x62\xf7\x44\x48\x85\x6d\x4e\x67\x73\xe2\xb7\xad\x14\x87\x9a\x51\x89\xc2\xf5\x93\x50\x73\x9f\xbb\x73\xed\x0b\x4d\x8e\xe0\xee\x8e\x43\x4e\x84\x20\xe8\x7a\x3c\x42\x4b\x25\xc5\x8a\x1f\xa9\x81\x4f\x63\xc4\xd7\x4f\x09\xe1\x92\x51\x4e\x74\xef\xc0\x2a\x93\xd8\x6e\x29\xd2\xd2\x18\x91\x58\xaa\x66\xfa\xf1\x14\x11\x69\x95\xf3\x60\xe3\x32\xfd\x5b\x3f\xf5\xd0\x48\xcd\x31\xd3\x58\x68\x93\x8f\xe4\x34\xd3\x29\x30\x1e\x72\x82\x02\xce\xa8\x10\xd8\xab\x0f\xb7\xc2\x58\x0b\xfc\x50\x8b\xd6\x1d\x4e\x88\x43\x69\x07\x58\x1b\xbe\x90\xa0\xf1\x2c\x22\x08\x73\x8e\x57\x5a\xb3\xec\xc8\x50\xb5\x3b\x08\x35\x2b\xb5\x4a\xfb\x4e\x1b\x59\x08\xe2\x69\x44\xea\xf4\x2d\xf9\xa0\xe8\xc5\xdf\xe2\x24\x31\x22\xf9\xfa\x54\x03\x19\xb0\x45\xa2\xa6\x04\x0c\xa4\xc4\x77\x11\xc1\x6a\x70\xe8\xa7\x94\x94\x64\x07\xac\x21\xa1\xc9\xfe\x94\x52\x35\x0c\x01\xa7\x4b\x12\x4b\x14\x81\xd2\xfa\xef\x33\xa0\xf6\xb9\xf8\xaa\x21\xc0\x7e\xe8\xb0\x16\x3a\xb5\x17\x7b\x35\x5c\xf8\xfc\x47\x2c\x08\xba\x30\xa7\x0e\xa1\x4f\x72\x6c\x41\xa5\x5a\x31\x6a\xfd\xa8\x23\x10\xb4\x14\x9f\x52\xcc\x09\xba\xe3\x38\xf8\xa8\x98\xa2\x5e\xba\x96\xcd\x39\x8d\x42\x7b\x7c\x51\x1f\x72\xf2\x29\xa5\x9c\x84\xea\x14\x20\x4d\x2f\x7a\x08\x19\x39\xf5\x01\xf6\xd4\xdf\x04\x8b\x75\xf7\x88\xde\x6e\xb5\x88\xfa\xd9\x48\x95\x5c\x26\xdd\xbc\x48\x38\x93\x2c\x60\x91\x3e\x9d\xc9\x20\x51\xfb\x45\xfe\x3a\x24\x42\xd2\x18\x26\x8a\xfe\xe2\xf5\xab\xde\xf7\x3f\xfc\xd0\x7b\xdd\x7b\xfd\x3f\x8a\x5f\xaa\xa1\x37\x67\xbc\x3f\xfc\xe1\xd5\x7f\x37\xc7\x3b\x2b\xc1\x7e\x39\xd4\xcc\xab\x99\x76\x80\xe8\x40\x53\x0f\xa1\x91\x91\xf4\x21\x41\x77\x6a\x2c\xa1\x85\x12\x24\x76\x28\x85\x12\x20\xaa\x4d\xc0\x59\x30\x87\xa1\x53\x73\x03\x29\x9c\x91\x69\x4c\xe2\xa9\x42\xac\xc7\x73\xfd\x84\x04\x49\xb5\x0d\x4d\x0b\x15\x18\x4b\xab\x83\xcc\xba\x95\x8f\x66\xb6\xeb\xe4\x5d\xde\xdc\x78\x9e\x65\x54\xab\xc7\xd3\x8e\xa5\x6f\x5d\x7e\xa0\xe4\x1e\xe1\x28\x62\xf7\xa0\x4a\xfd\x94\x32\x89\xad\xf1\xcb\x6e\xc7\xfa\xa1\xcf\x8e\x85\x10\xea\x6b\xbb\xdc\x17\xe0\xad\x01\xa1\x0e\x5f\x8a\x91\x66\x56\x44\x11\x4b\xd7\x4f\xd6\xac\x55\x86\x5c\x4d\x1d\x0e\x95\xb0\xc0\x02\x79\x51\xe3\xdf\x58\x2a\xd7\x4f\xea\x30\x26\x15\xb2\x4f\xa9\xc7\x8a\x84\x42\x46\xb4\x81\x96\x7c\xa6\x42\x0d\x2f\xc2\x60\x75\xf0\x41\x8e\x3b\xf0\x21\x01\x1b\xab\x03\x5e\xed\x5b\xd3\xf5\x13\x87\x8d\x29\x6a\x8f\x2c\x46\x78\x89\x69\x04\x4c\xd6\x96\x10\x40\xbf\xa5\xcd\x63\xca\x38\xf2\x51\x0c\x7a\x6e\x4f\x3b\x75\x48\x88\xd4\x3d\x6e\x65\x8d\xf9\x3e\x28\x6a\xb9\x84\xeb\xa7\xdf\xd6\x7f\xcb\xed\xf1\x6d\x80\xb2\x24\x69\x05\x54\x01\xfc\x77\x59\x07\x93\x2c\x12\xb9\xaa\x83\xa4\xf6\x10\x7f\x73\xc5\xf6\x9c\xd5\x86\xcd\xfe\x19\x94\x1b\xd2\x43\x2a\x12\x16\x53\x30\x28\x98\xd5\xdd\x66\xac\x0d\x4a\x4e\x54\xeb\x90\xc6\xb3\x1e\xba\x8c\x88\x12\x3f\x0b\xfc\x91\x20\x91\x72\x82\xa8\xd4\xc7\x34\x7d\x7d\x6a\x31\xfc\x28\x06\xe4\x0a\xa2\xa2\xad\x87\x3e\xac\x9f\x38\x9d\x52\xf2\x05\x7d\x4a\x3b\x34\x42\xa2\x83\x67\xea\x20\xd6\xd1\x27\xa9\x9c\x4a\x38\x77\x47\xe9\xac\x4b\x63\x7b\x58\xf7\x10\xae\xa8\x9e\xb2\x34\xf6\x8e\x1a\x8d\x25\x57\x8b\xf8\x2e\xf2\xb1\x9b\x93\x05\x5b\x66\xe7\x49\x63\x8f\x02\x5b\x1e\x95\x8c\x53\x22\x7c\xa0\x39\x91\x94\xaf\x9f\x14\xb1\x11\xb6\x36\x21\x90\xe5\x4e\x57\x84\xc7\xae\xf8\xe2\x12\x18\x28\x6e\x5e\xd8\x4d\x36\xeb\x8a\xdd\x61\xcd\x68\x90\x10\x85\x58\x62\x1f\x97\x2f\x40\xe0\xbb\xf0\x9c\x2e\xdb\x49\x20\x8c\xeb\x80\xbe\x33\xe9\x41\x11\x3e\xa6\x76\xb2\x19\x88\x38\x99\xa9\x6e\x71\x70\x75\x02\x63\x67\x0f\x5d\x11\x6d\x24\x9e\x93\x28\xf1\xcd\xc8\x8e\x33\x25\xd5\x69\x3a\x73\x81\x21\xb1\x06\x09\x5e\x48\xe8\x03\xa3\xdc\x81\x55\x4d\x0d\x38\x93\x88\x4e\xe1\xb6\xa1\x98\xed\x41\xad\x3f\xd7\x5b\xb4\x16\xdb\x99\xc5\xce\x83\xe0\xe1\xa1\xf7\x81\x70\x41\x59\x7c\x35\x67\x5c\x3e\x3e\xe6\x2e\x11\xe6\xf9\x88\xc5\x33\x78\x0c\x9b\x80\x60\x08\x07\x01\x49\x24\x09\x7d\x83\x52\x05\xd3\xb8\x39\x94\x40\x0a\x6d\x15\x9c\x61\xb3\x3f\x6b\xc8\xeb\x27\xdf\x29\xf4\xbb\x4c\x5c\x81\x58\xf6\x1e\xad\xbf\x43\x46\xf4\x6b\x91\xe5\x81\xf6\x8f\xff\xd8\x97\x52\x4d\x54\x16\x9f\x20\x33\x83\xa0\x97\x77\x34\xc6\x6a\xee\x67\x66\xd7\xbb\x15\x4a\x18\x7c\x0a\xea\xa4\x34\x96\x5c\xdd\x38\x43\x84\x53\x39\x67\x5c\xf4\xd0\x30\x16\x12\x47\x11\xf0\x2e\x15\x76\x83\x10\x08\x4b\xb4\x52\x52\x9d\xdd\xc7\x88\x53\xf1\xb1\xf7\x8f\xff\xa8\x8e\x19\x67\x4c\x3d\x46\xf7\x6a\x4b\x92\x4c\xbb\x7b\x45\x91\xd6\x1d\x69\xd9\xf2\xf0\xd0\xd3\x24\x3d\x3e\xfe\xb3\xa7\x97\x0e\xfd\xe8\x04\xe6\xb9\x15\x1b\xc0\x57\xb5\x1a\xcd\x01\x46\x40\x97\xa8\xba\xc5\x6b\x1b\xac\xbe\x52\x85\xa0\x2c\x90\x24\xe5\xc2\xf6\xcf\xba\x1b\xa1\x18\x0e\xb3\x6a\x19\x89\x1e\x1a\x75\x0c\x85\x5a\xd1\xa0\x8e\x60\x1d\xed\xa4\x80\x1d\xef\x1d\x8d\x9b\x93\x68\xfd\x77\x38\xda\x65\x3e\x90\x70\x00\x33\x2b\x5a\xe0\x3b\x1a\xc1\x85\x4f\x73\xe2\x03\x4b\x23\xf2\xa5\x0b\xfa\x10\x83\x44\xfb\x49\x59\x78\x0e\x23\xd0\x3f\x57\x0f\x64\x3f\x73\x46\x88\x68\x4c\x90\x64\x2c\xd2\x5c\x95\x84\xe3\x40\xea\xb3\xd0\x69\xc4\xd2\x10\xbd\x51\x32\x86\xfb\x36\xa7\x0b\xd5\x29\x10\x69\xa0\x17\x0a\x9d\xb5\x9b\x10\xbe\x20\x12\xce\x10\x61\x47\x43\x9e\x51\xae\x0f\x43\x45\xd0\xd5\x24\x9e\x9d\x1d\x8f\x07\xef\x2f\x3e\x0c\xd0\xe5\xe8\xfa\xed\xf0\xdc\x43\x41\xff\x4f\x17\xd7\x93\xc1\xf8\x78\x3c\x98\x0c\xc7\x83\x31\xba\x3e\x87\xef\xbb\xc3\xf3\x96\x70\xd1\x78\x70\x79\x71\x35\x9c\x5c\x8c\x7f\x6a\x8f\x62\x3c\x78\x33\x18\x0f\xce\x27\xc3\xc1\x08\x9d\x0d\x76\xc7\x78\xb2\x2f\x4a\x74\xd2\x12\xe9\x16\x98\x1a\x41\x7f\xe8\x9f\x9f\x0e\xce\x7c\x00\xe1\x6d\x7d\x53\x2f\x31\xf0\xda\x8b\x78\x34\xec\x5f\x79\x9b\xaa\x97\xde\x96\x97\x43\x50\xcd\x64\xee\x53\x5b\x1d\x41\x55\x6b\xeb\x5d\xe9\x69\x78\x5e\x76\xa8\x6c\x86\x84\x5e\x92\xde\xac\x87\xe6\x52\x26\xe2\xe4\xf8\x18\x27\xb4\x67\xae\xc1\xbd\x80\x2d\xbe\x6b\x8b\x08\xbd\x54\x82\x89\x98\x2b\x58\x11\x1a\xc9\xa1\x35\x93\x93\x1f\x28\xb0\xde\x7a\xae\xc7\xa3\x47\xaf\xf7\x76\x33\x40\xdf\x40\x6d\xf6\xa0\x66\xd0\x32\x60\xe0\x3e\x7b\x39\x1c\x98\xbf\x1f\x7d\xda\xf1\x0a\xe8\x9b\x4d\x77\x40\x87\x5e\xaa\xf7\x4b\xbd\x1b\xdb\xd7\x66\x73\x7e\x7c\x6c\x3f\x5a\x55\x90\x0d\x18\x10\xa3\x85\x8f\x1c\xf8\xed\x48\xde\x8e\x3d\x05\x74\x6d\xd8\x63\xbb\xbf\xe5\x9c\xb8\xbc\xf2\xad\xd9\xcb\xcb\xd1\xf0\xb4\x3f\x19\x5e\x9c\x5f\xf9\x1b\x7b\x57\xbc\xd3\xda\x3f\x87\x2e\x33\x53\x8f\x8f\x8a\xec\xfd\x6d\xff\xf2\xd2\x0f\x46\x5d\xde\x7d\x5c\xd5\x76\x49\x4f\xdb\x20\x20\x42\xc0\x35\xd6\x71\x18\x4e\x30\x97\x34\x48\x23\xcc\xd1\x1d\x67\x1f\x89\xcf\xc9\xb1\xaf\x8d\x0c\xda\x39\x3a\x77\xf6\x57\x77\xa0\x80\xa5\x5c\x6b\x8a\x0d\x2c\x4a\x3c\x6e\x89\x0e\x09\x59\x8c\x00\x5e\x90\x0d\x4a\xec\x4b\x36\x9d\x12\x4e\x63\x9f\x73\x69\x91\x26\x14\xb3\x85\x1b\x40\xa0\x43\x0b\xd8\x74\xca\xdd\xb8\x02\x91\x53\xb9\xfe\x3b\xf7\x9c\xad\xfb\xc1\xa7\x94\x42\xc8\x8a\x89\x94\x41\x82\x04\x29\xa7\x72\x85\x20\x54\x43\x80\x62\xe4\xe1\xa1\x97\x0a\xc2\x63\xf0\xa4\xf7\xc9\x27\x00\x65\xf4\xea\x21\xd1\xcd\xf5\x75\x46\xac\x9f\x00\xa6\xba\x8a\x75\xc8\x67\xf5\x97\x3e\xa3\x39\x0a\x8f\x12\x8a\x06\x62\x4d\x8c\x49\x89\x58\x45\x6b\x01\x4e\x1b\x4a\x53\x43\x69\x99\x50\xd0\x0f\x0a\x49\x65\x03\xad\x1e\x52\xc3\x10\x61\xf0\x18\x76\xee\xe1\x70\x5f\xf5\x9d\xeb\xfa\xbf\xa9\x7b\x51\xee\xaf\x8c\x53\xef\x95\xbb\x0e\x65\xca\x23\xe3\xdd\x2f\x19\xe8\x83\x92\xa4\x11\x21\x31\x2d\xc2\x8e\xda\xb1\xd7\x7f\xd3\xf6\x95\xdc\x8b\xd1\x8b\x0f\xe6\x0d\x34\xb5\x9b\x17\x60\x2d\x47\x77\xd0\x18\x31\x3e\x53\xcf\x2e\xf8\xcc\x3c\x3b\xd6\xbe\xde\xea\xe1\x95\xfa\x61\xa3\x34\x60\x04\xaf\x33\xee\xf6\x7a\xbe\xfb\x13\x90\x6f\xae\xf6\x25\x1a\x36\x82\x14\x0a\xd4\xe8\x1b\x77\xc7\xf5\xb9\x2e\x93\x16\x75\x48\x25\x75\xa5\x49\x50\x24\xb3\x9a\x49\x11\xc5\xa2\x14\x57\x62\xd5\x07\x66\x66\xdc\x11\xc5\x46\x7b\xaf\x08\xb5\x0e\x27\xd6\xe6\x89\xd3\x37\xf6\x74\x7f\x8c\x15\xa4\x1e\x42\x63\x02\x82\x44\x01\x28\x81\xb5\x17\x8c\x06\xf0\x6a\x30\x42\xc2\xd5\x48\x91\x58\xab\xaf\x64\x76\xaf\x31\x41\x1d\xfa\x86\xe8\x63\xfd\xa8\x83\xab\xba\x65\xf5\x59\xf6\x56\x44\xb4\xc0\x14\x70\x19\x71\xaf\x66\x60\x74\x73\xee\x2d\xa7\x6f\x8e\xd3\x18\x69\x98\xb1\x51\xe6\x8f\x49\xcc\x16\x0b\xf2\xa5\x26\x3e\xa7\x35\x42\x3c\xa5\x20\x92\xcc\xfd\x88\x43\xb0\x16\x2a\x5f\x17\xd5\x33\xe7\xc2\xb8\xd5\x80\xaa\x21\x2b\x0c\x94\x62\xb3\x19\x80\x4e\x76\x3b\xd4\xb3\xa8\xd3\x43\xe8\x27\x96\x2a\x52\xa3\x10\x49\xae\xee\xea\x86\x16\x35\x52\xbe\x56\x30\x28\x72\x4e\x62\xe7\x26\x4e\x85\xfd\xdc\x1d\x55\x1a\x2f\xd9\xc7\xba\x19\xd2\x43\xe8\x1d\xbb\x27\x4b\xc2\x8f\xe0\x8a\x6f\x14\x37\x53\xca\x85\x44\xd3\x54\xab\x0f\x42\xc2\x85\x34\x38\x11\x5d\x24\xea\x92\xca\xa6\x45\x5a\xd5\x2b\xd0\x62\xa8\x3f\x36\x29\xd6\xb4\x6d\x39\x8b\xca\xb3\x23\x9f\x1a\xe5\xe1\xae\x62\xec\x07\xc7\x23\x83\x08\x81\x57\xda\x47\x00\x4c\xc9\x55\x37\xf7\x0d\x18\x47\x28\x01\xcb\x4b\x27\xff\x3c\xc8\x3f\xd7\x33\x49\xc9\x16\x12\xe9\x00\x21\xcf\xdc\xec\x21\x34\x51\x42\x69\xca\xa8\x30\x7e\x22\x21\x51\x44\x85\x1d\x7c\xc7\x38\x68\xeb\x12\x4e\xe2\x90\xab\x23\xa1\x61\xaf\x16\x66\x0e\xad\xd8\x6e\x51\x5e\x72\x35\xfb\xfd\xb6\xe6\x7e\x14\x39\x7a\xea\xd3\xd1\xd0\x12\xec\x53\x9a\x7a\xc1\xb0\x7b\x74\x75\xf5\x0e\xd4\x5f\xe6\x60\x03\x46\xca\x9a\x80\x9d\x7e\x2a\x19\xa7\x42\xf1\xc9\x7a\x6e\x28\x08\xfa\x10\xd3\xa9\x8b\xc6\xe9\x47\x82\xa1\x90\x44\x44\x12\x08\x10\x30\x41\x6e\x5a\x73\xe8\xc1\x76\x95\x26\x09\xa7\x0b\xc2\x11\x4e\x85\xa0\xda\x68\xa7\x55\x8d\x26\x78\xcd\xa3\xe9\xed\xeb\xdd\x69\x91\x0a\x89\xee\x88\xb9\xad\x92\x10\xdd\x91\x29\xe3\xf6\x6f\x13\x3c\x5a\xd3\xdb\x0f\xf9\x18\x3b\x21\x3e\x85\x5d\x06\x2f\xb5\xb1\xd1\x09\x4d\xaa\xe5\x82\x77\xeb\xf6\x7e\xef\x33\xdb\xb8\x01\xa1\xfe\xc6\x59\x70\x2a\x04\x79\x78\xef\x33\x8b\x3b\x4e\xd0\x02\x7f\xa6\x0b\xb8\x63\x65\x71\xa0\x7a\x61\x34\x1c\x1a\x14\x1a\xad\xbc\x56\x67\x38\xbf\x82\xd6\xdf\x1c\xb6\x3f\xaa\x2d\x6b\xc6\xe2\x3d\xa5\x24\xf2\x19\x18\x46\xd9\x71\xb9\x78\x26\x50\x72\x46\x9b\x59\xfd\xa8\x8a\xe7\x86\x82\xb9\xad\x46\xaa\xf9\x0e\x1e\xae\xb1\xcf\xb7\x5c\x37\x8e\x4e\xaa\x9f\xf7\x8c\x7f\x04\x6f\x9b\x8f\x34\x49\xf2\x33\x17\xf8\x2f\x29\xb4\x5b\x53\x62\x65\xac\xfb\x41\x48\x90\x5c\x25\x04\x49\x0e\xf2\x22\x22\x29\x47\x7f\x04\x09\x97\x87\x30\x3b\x87\x2d\x05\x82\xce\x62\xc6\xd7\x4f\xfe\xe9\xbb\xd9\x17\xa3\x1a\xd7\x11\x3f\x92\xc1\x01\x4b\x5f\x57\xf4\x47\x3b\xb0\xd5\x31\xfb\x41\xb4\x8d\x3a\xfe\x6d\x82\x6d\x47\x62\x93\xb5\xca\x0b\x86\xc4\x21\x84\xb5\xa9\x19\x05\x04\x51\x3c\x8b\x99\x90\x34\x10\xda\xbd\x24\x62\x33\x70\xbc\x68\x38\x8c\x83\x25\xc8\x69\x0b\x0e\x25\x7a\x83\xd1\xda\x0c\x38\x9d\x67\x46\xff\xdf\x58\xca\x63\xec\x31\x1a\xba\x8b\x7e\x4e\x70\x24\xe7\x28\x98\x93\xe0\xa3\x1e\x67\xad\x0b\xeb\x24\x8c\x4b\x1d\x2b\x18\xb3\x98\x74\x7c\x6a\x95\xc9\x4a\xdf\x90\x72\xda\xb4\x8a\x79\xfd\x34\xb3\x17\x3b\x77\x80\x0a\x1a\x32\x8b\x23\xcd\x70\x34\x92\x9b\x49\x22\x1a\x87\xe4\xb3\x4f\x8b\xa0\xde\x39\x02\xa8\xa5\xfc\x71\x62\xb3\xa6\x24\x58\x05\x11\xd9\x52\xbb\xe2\x9b\x88\xb0\x83\xa8\x19\x74\x97\x7b\x3d\x92\x50\x6b\xf6\xef\x98\x9c\xa3\xcc\x52\x06\xd6\xab\x90\x2d\x30\x8d\x3b\xc7\xe6\x87\xd7\xf3\xa1\x4e\xa2\x10\x6d\x46\x4b\xb0\x30\xa6\x34\x8b\xd7\xc6\x6a\x63\xa4\x4e\x20\xda\x04\x60\x76\x43\x22\x91\xc6\x78\x6c\x10\x3f\x6f\x37\xe7\x4c\xc8\xce\x31\xfc\xf3\x35\xbb\xa8\xf0\x1d\x03\xd2\xe7\xed\x5e\xcc\xba\x0a\x8b\xda\x94\xbe\x62\xef\x1c\xac\xde\xee\x09\xaf\x16\xcf\x09\xb4\xf4\x6a\xf1\x74\x90\x3a\xd6\xbe\x33\x46\x97\xe0\x0f\x7e\xee\xeb\xd0\x72\x38\xd2\xe8\x16\x46\x8b\xd0\x1c\xd9\x9c\x61\xd2\x37\x6e\xdd\x3a\x24\xe0\x7d\xa9\xf8\x05\xd2\xb3\xf6\x98\x99\xe3\x26\x99\xdf\xa6\xd9\xae\x0c\x34\x7b\x9d\xd7\xc2\xb3\xf6\xcc\x55\xa4\x86\xb3\x48\x2b\x52\xd4\x75\xd8\xab\x30\x74\x3a\x0f\x61\xf5\x65\x84\xf6\x56\xe9\x0d\x62\xb6\x58\xf5\x49\x74\x67\xa4\x85\xc3\xe6\x56\xa8\x49\x88\x3e\xe0\x28\xf5\x9e\x6d\xc1\x3b\xdc\x24\x10\xf0\x6f\xf8\x00\x4a\x9f\x4f\x22\x50\x90\x8c\x59\x44\xb4\x4e\x48\xf5\x04\x6d\xe4\x10\xc8\x15\x43\x3a\x84\xff\x82\xcf\x1e\x1f\x51\x8d\xce\x07\x08\xc8\x6e\x45\xba\xdf\x39\x1e\xd0\xfb\x38\x3d\xde\x44\xe8\xd1\xfd\x38\xd8\xfd\x9a\x9c\x16\xbd\xd3\x70\x6a\x3b\xe7\xe8\xbd\xf4\x63\xd0\x2f\x65\x9a\xaf\x02\xb9\x07\x65\x44\x81\xb6\x66\x3e\x94\xb4\x60\x45\x5a\x4b\x7a\xb0\x0d\xa2\x9f\x93\x81\xbf\x37\x3e\xed\xc9\x8b\x92\x06\xfb\xe1\xa1\x67\x9f\xdc\xc2\x13\xcd\x9f\x6c\x1c\x84\x19\x81\x9c\x37\x9a\xb6\x2f\x40\x5b\xc6\x9e\xb4\x8d\x02\xb5\xc8\x9b\x4a\x2d\x78\x15\x39\xc0\x34\xb2\x41\x91\x87\x55\x25\xf2\xbc\x6a\xf4\x36\xac\x72\x36\x88\x87\x87\xde\x5f\xd4\x0f\xb3\x8f\xba\x2c\xda\x51\x9d\x5c\xe4\x46\x69\xe3\x28\xa1\x2b\xb1\x60\x4f\x15\xb1\x94\x64\x91\x80\x86\x41\x32\x14\xb2\xfb\x38\x62\x38\xd4\x0e\x3e\x2b\xed\xac\x0d\x9e\x6f\xe0\xd0\x11\x13\x89\x70\x08\xa1\x0f\xfe\xbe\x4c\x48\x2c\xb5\xfe\x58\x5d\xea\xd6\x4f\xd1\xfa\x29\x98\xab\x29\x0b\x5e\x33\x60\xc9\xb2\x17\x08\xe3\x73\x83\x42\x02\x6a\x2f\x37\xb0\x62\x68\xf0\xb5\x24\x7c\x41\x67\x1c\x6b\x2d\xbc\xb9\x7a\x0d\xcd\xb9\xfc\x2c\xcf\xa1\x53\x37\x02\x05\xaa\x35\x34\xb3\x8b\xb7\x00\xe9\x25\xd0\xb8\x4e\x41\x60\x40\x84\x63\x50\xd3\x5d\x46\xd8\xe8\xcf\x7e\x45\x6c\x9a\x99\xd1\x7e\x2d\xdf\x1a\x7f\xb5\xaa\x8a\x29\x27\x36\x36\x20\xbb\x6c\xfc\xba\x49\x95\x6d\xe5\xa4\x14\xc3\x26\x03\x19\x3a\x65\xb1\xc4\x81\xf1\xb4\xc2\xe1\x82\xc6\x54\x48\x8e\x25\xe3\x88\x4e\x41\x0b\x2b\xe7\x34\xfe\xa8\x95\xba\x90\x37\x4e\x67\x62\xf1\xce\xd7\x82\x5b\x55\x75\xdf\xc2\xb4\xae\x6f\xb9\x03\xa0\xc9\x58\x06\xbe\xed\x6d\xfa\x57\x95\xb0\x0c\xa1\x4b\x4e\x62\xf2\x45\x07\x2e\x06\x52\x9f\x58\xb5\x6f\x95\xd3\x5d\x25\x64\x85\x09\x2d\x4b\x48\x2c\xaa\x5c\x4d\x6d\xc2\x17\xdf\xa8\xa6\x72\xae\xba\x1e\xa8\xd9\x06\x1b\x47\xcc\xe2\xae\x75\xa4\xa2\x4b\x12\x79\x4d\x6c\xa6\xe5\x94\xea\x73\x93\x2b\xf9\xd5\x9c\xc3\x31\x58\x4a\xc1\xaf\xcc\x81\xd7\x48\x06\x8d\x67\x35\x82\x25\x43\x6a\xf2\x72\x79\x67\xab\x03\x50\xdd\xd8\xb1\x40\xe4\x73\x42\x39\x81\xe4\x81\xda\xd9\x37\x62\x33\x74\x87\x83\x8f\x60\xe3\x61\x88\x93\x2e\x76\xb8\xd1\xb3\x39\x24\x21\x8f\xd1\xaf\x6e\x62\x9e\x9b\xf4\xd5\xab\x3f\x04\xd6\x73\x01\xfe\x22\xa8\x9b\x9a\xe7\x8a\x8b\xf6\x19\x33\xcf\x18\x9f\xd9\x47\xc2\x3c\x02\x81\xa7\x1f\xfe\xaa\xd0\xbb\xd4\xa8\xcb\x50\x99\x1c\xff\x7d\xa8\xc4\x13\xd0\xe1\x60\xce\xe9\xd2\x5c\x7b\xa0\xe3\x9a\x5d\x08\x8d\x49\xc0\xe2\x18\x52\x57\x75\x6d\xc4\x25\xd7\x53\x88\xaf\x9f\xb0\x33\xa8\x3d\x37\x47\x66\x9e\xa2\xa8\x82\x13\x90\x8e\x0d\x9c\x32\x36\x78\x91\x4f\x8a\x16\x2c\x21\x05\x9e\x38\x84\x65\x34\x73\x75\x5f\xab\x24\xd6\x3f\x0d\x18\x37\x3b\x26\xac\x5f\xc2\x51\x48\x43\xe3\xff\xad\x83\xf3\xf4\x75\x94\xc5\x04\x49\xba\x50\x97\xc6\xd0\x77\x74\x1f\x69\x7f\x00\x98\xe2\x8a\xef\x8c\xdb\xcd\x39\xee\x60\x58\xfd\x09\x67\xc1\xfa\x29\x5c\x3f\x99\xfb\xa6\xc5\xa1\x35\xd6\x24\x40\xe0\xf8\x10\xea\xcb\x8c\xe3\x50\xa9\xa3\x68\xaa\x3b\xf1\xe3\x70\x34\x1a\x9e\xbf\x45\xef\xfb\xe7\xfd\xb7\x83\xb1\x87\xb6\xf1\xe0\xea\xf2\xe2\xfc\xaa\xff\xe3\x68\x80\xce\x06\x68\xd4\x47\x6f\xfa\xa7\x93\xeb\x31\x38\x98\x78\x00\x5f\x0f\x47\x67\x97\xfd\xd3\x3f\xfb\x5c\x4b\xe0\x9d\x82\x76\x7a\x71\x7e\x35\x19\x5f\x9f\xb6\x81\xe5\xbb\x29\x57\x02\xf3\x5d\x99\x33\x70\x4d\x7e\x2b\xf0\x4d\x0b\xf2\xb0\xa0\x81\x4f\xa1\xef\x69\xa2\x4d\x16\x33\x22\xa5\xf1\x92\xe0\x92\x84\xdb\xa9\xb7\x7e\xa4\x71\x08\x79\x32\x0b\xe7\x52\xb8\x8e\xba\x7e\x2b\x6a\xda\xeb\xa8\xd1\x28\xca\x6d\x80\xf0\x58\xfb\xdb\xd4\xa9\x0b\x46\x46\x00\x57\x9e\x39\xdd\x4b\xba\xeb\x68\x83\x58\xaa\xde\x49\x1d\x95\x2c\xcc\x17\x22\xb3\x80\x09\xeb\x07\xd3\xa8\x72\xf0\x76\x51\xce\x49\x16\x60\x50\xf6\x83\x31\x89\x18\x05\x09\xc1\xf8\x65\xdd\x65\xdc\xac\x55\x3b\xf6\xd6\x89\x4d\xf0\x78\xcd\x64\x2b\x0f\x82\x54\xb5\xf9\x2c\x77\xa3\x29\xa8\x3d\x3d\xea\xae\x43\x74\xd9\x3a\xdd\x7c\xa3\x2e\xe3\xa2\x43\xce\x56\xbd\x2e\xe5\x7c\xd5\xea\xac\x77\x93\xc9\xa5\xd6\xa9\xd5\xf7\xa2\x3a\x6b\xab\x51\x70\x69\x6b\x88\x02\xb5\x0b\x09\x7e\xef\x9c\x36\xb8\x1b\xb5\xdd\x0a\xb9\x1a\xb1\x3b\x22\xef\x09\x81\xfb\x58\xf1\x2c\x07\xdb\x76\xd1\xca\x65\x76\x1a\x58\x55\x3e\xda\xd4\xe8\x61\x2a\xc0\x2d\x4a\x1d\xf0\x36\xe1\x12\x59\x69\xfb\xc2\x5a\xd7\x59\x4f\xed\xa6\x47\xd1\x06\xf7\x7c\x67\xd3\xed\x5d\x8d\x5a\x2a\x12\x46\xa6\xbf\x7e\x7f\xa3\xaa\x71\xf2\x92\x79\x38\x1f\xa4\x76\xfa\x06\xcb\xda\x76\xda\x86\x90\x4c\x71\x1a\x49\x51\x14\x74\xed\x7c\xeb\x32\x46\x6d\xa1\x51\xc0\xe9\x67\xa4\x13\x50\x98\x98\x8f\xf5\xd3\x14\xa7\xb2\x42\xd4\x6d\xe9\x85\xb7\x5d\xb7\x33\xf9\xf6\x7c\x3d\xad\x94\x64\x3b\x77\xaa\x61\x92\x1d\xc4\x15\x6f\xdb\xf5\x91\x36\xd3\xf5\xb5\xdc\xf3\xb6\x5d\x1a\x65\xb2\x0f\xc9\xc6\x36\x2a\xa8\x5a\x1e\x7e\x65\xde\xb5\xd0\x5b\x59\xc6\xb9\x82\xda\xa5\xa6\x95\x30\x75\x65\x68\xb9\x71\x35\x56\x9b\x2b\x54\x80\x0f\x3d\xfc\xe9\x1a\xb4\xfc\x4e\xbf\xea\x23\xa1\x5d\x04\x04\xf2\x36\xae\x46\x9a\xd2\x28\x4c\xd4\x4d\x57\xb5\xb2\x7f\xd8\x01\x2e\x84\xfb\xf9\xaf\x61\xd0\xde\xba\x15\xf3\x34\xb0\xa3\x53\x86\x57\x08\x0b\xdc\x81\x9e\x96\x7e\x2a\xed\x09\x6a\xe1\xb7\x92\x35\xd9\xf2\xae\xb1\x92\x04\x7d\x4a\x71\x2c\x95\x70\xb6\x1e\x58\x38\xb6\x09\x66\xf4\x35\x17\xab\xab\x26\x1c\x50\x17\x04\x8b\x94\x6b\x35\x66\x44\x3f\x12\xf4\xfe\x08\xbd\xff\xf1\x08\xbd\x85\x9b\xc8\xdb\x1f\xfd\xe7\x15\x83\x04\x1c\x15\x58\x20\x89\x2c\x05\xa0\xda\x14\x30\x59\x42\x06\x73\xc4\x52\x98\xb5\x37\xf8\x82\x40\x90\xb5\x84\x84\xcd\x6a\x95\x28\xdc\xec\x08\xbd\x55\xf7\x92\xb7\xac\xba\x83\xa7\xfd\xf3\xd3\x81\xba\x09\x6f\xc5\x16\x9b\xb7\xa0\x94\xcf\x18\x5d\x72\xba\xc4\x92\x8c\xd5\x6f\x1b\x76\xb4\x58\x25\xfa\x29\x04\x7a\x07\x6c\x71\xac\x7e\x1c\x1f\x04\xdf\x78\x70\x79\xa1\xdf\x5c\x8f\x47\x1e\x88\xbe\xb6\xea\xa2\xeb\xc6\xcf\x29\x08\xbb\x23\xbf\xb9\x89\x6f\x6e\xe2\xc1\xbf\xf5\xdf\x5f\x8e\x06\x57\x27\x37\x85\x3c\x4e\x5f\x9d\x4d\x51\xc4\xee\x4d\xee\x73\x21\xe6\x08\x92\x2f\xd7\x5d\xfa\x7d\x0d\x15\x8f\x74\xea\xe6\x06\x84\x09\x45\x3f\x5f\x8f\x47\xbe\x5c\x29\x4d\xad\x13\xd4\x10\x4d\xe3\x7e\x5a\x1b\x59\xe3\x7c\xb8\x9d\x03\x69\xd6\x30\x95\x73\x74\x7d\x35\x18\xc3\x5f\x97\xfd\xab\xab\x7f\xbd\x18\x9f\xdd\xc4\xde\x54\xd8\x85\x86\x8a\xb6\xeb\xc9\x70\x34\xbc\xea\x4f\x06\xd7\x63\xf4\xfe\x62\x72\x7b\x36\xb8\x55\x60\x20\x8d\xdc\x4e\xb8\x61\x6a\xfd\x6b\x7f\x7c\x3e\x3c\x7f\x6b\x66\xd6\x25\xa4\x10\x52\x9b\x1b\xa8\xeb\x13\x2c\xc4\x3d\xe3\xa1\xce\xe7\x51\x88\xe3\x65\xba\x34\x00\x15\x90\xde\x2a\x5a\xa1\x90\x8a\x80\xa5\x1c\xcf\x48\xa8\x61\xfd\x54\x80\xb0\xc0\x2b\x25\xe2\x96\x54\x40\x0a\x08\xc9\x10\x93\x73\xc2\x75\x76\x1f\xf3\x92\x93\x80\xf1\x50\xbb\xea\x03\x7e\x31\x27\x51\x84\xe6\x54\x48\xc6\x57\xf5\x4b\x41\x75\x51\xed\xdb\xff\xe2\x04\x36\xa2\x9b\x9b\x9b\x17\x8b\x55\x46\x84\xfa\x13\xbd\x4c\x85\xb6\xa5\x11\x13\x28\x65\x5e\x0a\x2b\x73\x61\x9a\x7e\xd7\x16\xfc\x8d\xfe\xdf\x0b\x07\xc7\x8d\x79\xfe\x02\xbd\x24\x22\xc0\x49\x86\x8e\x4e\xb5\x4e\x81\xc6\x19\x56\x9f\xdb\x59\x8b\x01\xdd\x24\xe7\x45\x89\x90\x17\x7b\x91\x50\x44\xc6\x16\xff\xe2\x04\x79\x1a\x5c\x0b\x26\x43\xa2\xe0\x10\x8b\x6d\x41\xa4\x34\x89\x6a\x70\xc2\x84\xe4\x2c\x99\x13\xc8\xf0\x02\xa6\xb8\x24\x31\xb9\x7e\xa8\x8e\x6f\x77\x3e\x81\xb0\x78\xad\xf9\xd0\xd9\x20\x8c\xd3\xfb\x82\x49\x9d\xec\x4e\x08\xe2\x71\xa0\x6b\x62\x8b\x3b\x05\x5a\x4f\x80\xdd\xb8\xb2\x60\x71\x81\x62\x85\x0f\xaa\x6d\x68\x9e\x2c\x98\x14\xd9\x3b\x27\x0f\x53\x1a\xab\xcd\x34\x74\x95\x7b\xa0\x5f\x98\xa5\x14\x62\xfe\xa5\xf8\xae\x69\x91\x43\xf6\x52\xb8\x9f\x67\x89\xfd\xce\x2e\xde\xf7\x87\x15\x79\x28\x7f\xee\x66\x4e\x54\xe8\xdd\xc5\xd5\x44\xb5\x87\x74\xf9\x90\x14\xec\xb2\x3f\x79\xa7\xfe\x0a\xd0\x65\x7f\xdc\x7f\x3f\x98\x0c\xc6\x57\xb7\xfd\xab\xdb\x3f\x5d\x5d\x9c\xfb\x04\x71\x33\x11\x1b\x79\x05\x5d\x22\x94\x78\x7b\x77\x31\x71\x88\xd0\x29\x07\x0b\x64\x8c\x07\x96\x86\xdf\x01\x1f\x6a\x85\x51\x05\x09\xee\x84\x5c\xac\x38\x96\xa6\x9e\x00\x47\x0e\x0d\x8b\x95\xda\x87\x0c\xfa\x29\x63\xfb\x40\x0d\x74\x1a\xb4\xdf\x04\x8b\xf7\x03\xd3\x79\x50\x6b\x1b\x72\xdd\xa8\x1f\x27\xea\x3f\x1a\x2a\x24\xcd\xbc\x31\xe0\x87\x31\xfa\x57\x1a\x87\xec\x5e\xa0\x4b\x76\x4f\xf8\x15\x88\x6e\xb5\xd4\x42\x96\xde\x45\xa4\x0b\x2b\x2e\x3c\x42\x5a\x1e\xe9\x2c\xa7\x27\x20\x42\x1f\xac\xcc\xb4\x48\x6e\x2c\xa2\x1b\x07\x19\xfc\x7e\xd4\xa2\xb5\x84\xd0\x44\x9f\xa0\x91\xda\x98\x14\x4a\x9d\xb0\xce\x83\xb2\xb3\x0d\xbe\xed\x62\xd2\x0f\x3d\x01\xbe\x02\x72\x9d\x20\x55\x73\xe2\xc5\x89\xe9\xfd\xd7\xe9\xb7\x33\x45\xf7\xc0\x66\xea\xdc\x59\x8d\x93\x29\xb4\x76\x35\x38\xbd\x1e\x0f\x27\x3f\xdd\xbe\x1d\x5f\x5c\x5f\xb6\x92\x5a\xd5\x80\xa0\xbd\x92\x5a\x00\xaf\xe1\xbc\xda\x9e\x22\xbd\x6e\xc0\x64\x7d\x0a\x95\xc7\x84\x76\x9e\x80\xe4\x46\x49\x12\xad\x20\x4a\xd1\x5a\x97\xaa\x6c\x2e\x28\x8d\x25\x85\xac\x34\x2b\x93\x05\xd1\x58\xbd\xb6\x0b\x2c\x29\x25\xbf\xae\x21\x19\x5d\x8c\xdf\xa2\x9f\xe1\xd4\xde\x6a\x1b\xa8\x67\xa4\x86\x36\x30\xe0\x0e\x48\xda\xef\x95\xb3\x4d\x79\xec\xf7\xd8\x70\x1b\x73\x96\xef\xb8\x8b\xee\x4c\x74\xb6\x2b\x3c\x6b\xc6\xf2\x9b\xaa\x9d\xad\x6d\x45\x85\x1b\x93\x9c\xdc\x6e\x69\x3a\x41\xf9\xcd\xcd\x8b\x23\xff\x2b\x67\xbb\xfb\x5a\x35\x16\x9e\xa3\xc8\xc2\x21\xaa\x2c\x58\x3e\xd4\x27\x2f\x37\x69\xa0\xb3\xf4\xe5\x37\xc5\xf4\xf7\x37\x90\x4c\xf3\xc6\x4d\x81\x9f\x6d\xef\x8f\x95\x27\xac\x11\x8d\xd3\xcf\xc7\xef\x71\x70\x92\x01\xad\xec\x88\xde\x48\x17\xab\xf0\x2e\x1f\xee\x32\xe6\x0d\xc4\xce\xf0\x56\x9d\x2c\xb6\x42\x59\x38\xd7\x14\x31\x17\x4f\x1b\x2e\x05\x85\x23\x4e\x91\x90\xfc\x4c\xb5\x7d\xcf\x77\xa0\xa1\x53\xbf\xb8\x8a\x48\xfe\xf7\xf1\x3d\xe3\x1f\xe1\xde\x72\x2c\x17\xc9\xb1\x35\x08\xde\xea\xe9\xbe\xe7\x06\xff\x4d\x70\x9a\x4a\xae\x7b\x1f\x2a\x3c\x80\xb6\x3b\x54\x58\x15\xf3\x6e\x8a\x27\x88\x7c\xeb\x1a\x6b\xfd\xc5\xd5\xc4\xde\x86\x0a\xd7\x9c\x86\xbe\x14\x61\x4c\x06\x06\xc6\xa0\x7c\x5d\x3b\x00\x25\xb5\x17\x2b\x17\xc2\x62\xa5\x8e\xcd\x85\xf3\xa5\xf3\xbf\x7f\x70\x5f\x6c\x05\x24\x3f\x7d\xa3\x7f\x30\xef\xdd\x64\x59\xc7\xbb\x1e\xcb\x77\xa4\xfd\x39\x70\x3d\x5b\x17\x61\xed\xa9\xf1\xc4\x62\x15\x07\x5d\x49\x17\x84\xa5\x12\x4d\x86\xef\x07\x17\xd7\x93\xdb\xe1\xf9\xed\xfb\xe1\xf9\xf5\x64\x70\x05\xb7\x6c\xc9\x71\x40\xd0\x4b\xc9\x53\x82\xfe\x8a\xa6\x38\x12\xea\x5f\x45\xda\xb1\x64\xc7\x6a\xaf\xfa\x0e\xbe\x0b\x58\xc4\x78\xf1\x3b\xfd\x02\xf2\xda\x13\xf4\x72\x74\x71\xda\x1f\x0d\xd0\x5f\xd1\xe9\x68\xd0\x1f\x7f\xd7\x38\x9b\x3d\x64\x9e\x0d\x46\xfd\xe1\x6d\x7f\x32\x19\x9c\x4f\x06\xb7\x83\x36\xc4\xea\x34\xdd\xc7\xc6\xa9\xbc\x25\xb9\x83\xf3\x0f\xc3\xf1\xc5\xf9\xf9\xe0\xfd\xe0\x7c\x72\x0b\xc4\x3b\xb4\x37\x70\xb8\x5c\x8a\xf1\x36\x2f\xc5\x78\x5b\x2c\xc5\x78\x5b\x2e\xc5\x78\x5b\x55\x8a\x71\xb7\x81\xd6\x05\x24\x70\x92\x74\x17\x38\xa6\x53\x22\x64\x7e\x76\xf8\xb9\x9b\xa0\x63\x3b\x8a\xda\x59\x54\x7d\x08\x47\x2a\x70\x17\xcd\xda\xf4\x56\x8b\xc8\x9b\x07\xbd\x0e\x97\x3d\xe8\x02\x2a\x33\x06\xd6\xbd\x75\xa1\x3e\x2d\x21\x22\x06\xd3\xd7\xea\xd4\x5e\x5c\xcd\xe4\x3d\xca\x1c\x2b\x41\x34\x22\x48\xe4\x38\xbc\x00\x81\xa9\x13\xd8\xfc\xb5\xdb\x0d\xa9\x50\xbf\x5a\x72\x31\x87\xbd\xe1\x8b\x69\x64\x78\x03\x96\xe7\xeb\x40\x7e\x6f\x33\xa6\x88\xff\x6c\x75\x3c\x5a\xf1\x46\x47\x1e\xc3\x7d\x55\xef\x7e\xed\xc6\x6d\xa3\x59\xc3\x99\xc1\x34\x63\x7c\xa6\xda\xec\x43\xb0\x8e\x07\xda\x1f\xc2\x5f\xae\x2f\x26\x7d\xf4\x73\x77\x81\x26\x17\x93\xfe\xe8\xf6\xfd\xe0\xfd\xc5\xf8\x27\x25\x8d\x68\x7e\x5f\xcd\x1f\x72\x34\xbe\xb0\xb2\x57\x6c\x5c\x47\xe0\x31\x46\x85\x8c\x7b\x20\xd8\xb4\xa1\x31\xc1\x34\x3b\x37\x76\x21\x8b\x1d\xbc\xe4\x04\x1c\xc2\xad\x86\x0a\xd2\xf9\xa3\xf1\x40\x01\x1f\x9c\xdd\x02\xbe\xdb\xcb\x8b\xf1\xe4\x6a\xaf\xe5\x6b\x77\x5d\x6d\xee\xf4\xed\xf1\x1b\xff\x3b\xc0\xa6\xdf\x88\x7f\x43\xd3\x58\xc0\x0f\x8f\x7a\xdf\x80\x8a\xd2\x71\xa4\x44\xc5\xee\xa7\x91\x16\x94\xa8\x39\x80\xfe\xe9\xd5\xab\x57\xaf\x6a\xc7\xe3\x04\x3e\xd9\x87\x8a\x7a\xf5\x95\xbd\x5a\xab\xcb\xf3\xed\xf8\x7a\x34\xb8\x82\x5b\x76\x3b\xd9\xd0\xa0\x67\x2b\x16\x6f\xba\x1d\x0f\xde\x8e\x8c\x0a\xe8\xf9\x08\xcf\x6e\x8f\xcf\x54\x96\xe6\x19\xeb\xd2\xdc\x3c\x73\x5d\x9a\x8c\x35\xde\xba\x34\xa6\x84\x49\x56\xc3\x24\xaf\x52\x72\xe3\x94\x31\xc9\x74\x27\x32\x48\x8c\xda\xca\xfd\xce\xad\x67\x92\x7d\xfa\xfa\x55\xef\x55\xef\xf5\xeb\xde\xab\xe3\xef\x7f\xa8\x68\xa3\xeb\x9b\x64\x5f\xff\x8f\x57\x47\x3f\xfc\xf0\x87\x6a\xd8\x36\x06\x31\xff\x5a\x27\xca\x9a\x4b\x99\x00\x5f\xc0\xfd\x04\x49\x8e\xa7\x53\x1a\xe8\x8d\xf4\x7f\xb1\x98\xf4\x73\x05\x8f\x56\xf1\xd4\x14\xc2\x69\x39\x3d\xdb\x14\xde\xf3\xa8\x29\xd1\xcf\x5d\x89\x26\xfd\xb7\x5e\x81\xef\x41\xe6\x22\x69\xa7\x6c\x05\x4c\x83\xc9\xf0\x2f\xd7\x83\x89\xda\xd5\xbe\x66\xdf\xbe\x8d\x32\x76\x87\x02\x92\xff\x29\x54\xb2\xcf\xa0\x91\xdd\x9f\x79\x87\x51\xcd\x16\x2b\xf5\xdd\xe8\x5a\x7d\x6e\x51\xbe\x1b\x5b\xae\xef\xc6\x14\xec\x2b\xbd\xcc\x6b\xf6\xdd\x64\x55\xfb\xf2\xb2\x7d\xae\x5a\x37\x3f\xe6\x5f\x0b\x92\xd7\x2b\x32\xfd\x4e\x05\xe1\x5d\xbb\x6d\x58\x2e\x74\x20\xd6\x1a\x7f\xd4\xa1\xaf\xd9\xeb\x3c\xe9\x6f\x9e\xed\x4f\x32\x74\xfa\x06\x5c\xb5\xb6\x55\x22\x97\x18\x1f\xde\x65\x3f\x05\x8d\x96\x84\x97\x54\xca\x1c\x2f\x6e\x67\xba\xb7\x3f\x6c\xad\x3d\x6e\x8d\xab\xa0\x4b\xce\x50\xde\x18\xb4\x5b\xab\x8b\xb7\xeb\x63\x35\xd2\x4d\xfd\x70\x6b\xa8\x6d\x34\xb7\xbb\x42\x97\xc0\xab\x88\x0a\x79\x84\xd8\xf4\x08\x49\x3c\x83\x89\x7c\x88\x1d\x66\xbf\x1e\x3d\x27\x05\x12\x6d\xf4\xf9\x10\x3d\x86\x90\xe6\xae\x64\x1f\x49\x8c\x46\xfd\x1f\x07\x23\x74\x39\xbe\xf8\x30\x3c\x1b\x8c\xd1\xe4\xe2\xcf\x83\x96\x37\xd7\x2a\x60\xc3\x1f\x07\xa3\xd1\x00\xbd\xb9\xb8\x1e\x9f\x0f\xaf\xae\x06\xd7\x63\xf4\xa7\xc1\xa4\xf5\x81\x54\x03\xd4\xa9\xcc\x33\x71\xf8\xe3\xf8\xe2\xcf\x83\xf1\xa6\x97\x23\xd4\x62\xf8\xb9\x6b\x9d\x4f\x03\x96\x90\x70\xbb\xed\xde\x62\x3a\xbd\xb8\x1e\x4f\xd4\x11\xda\xa0\xbc\xaa\xf5\xca\xac\xc6\xbb\x4d\x07\x3f\x92\xd5\xa6\xb0\xb7\x0f\xfe\x3c\xf8\xc9\x6b\x7c\xf5\x56\x58\x3e\xd4\x6e\xdf\xab\x59\x9b\xcd\x64\xff\x6e\xab\x45\x3f\x67\x31\xfb\x1d\x98\xb4\x57\xa9\xe8\x3d\x8a\xda\xd7\x90\xbc\x71\xd6\x3d\x1d\xd5\x9f\x7b\xdb\xd6\x54\x7e\x9e\xda\xd1\x30\x04\xbb\x76\x67\xfb\xd2\xd1\xbf\x87\xca\xd1\xcf\x55\x1b\x7f\x07\xee\x7d\x93\x2a\xf9\x87\x96\xa5\x5f\xe1\xee\xd4\xab\x3b\xea\xb4\x15\xa7\xff\x29\xee\x4e\xcf\xea\xc8\xb2\xaf\x84\xfd\x46\x1e\x2d\x35\xe4\xc3\xe9\x6e\xb1\x52\x3f\xb7\x74\x62\xd9\x06\xee\x57\x3a\xbd\x56\xf7\xa8\xb4\xce\x0b\xcb\x7c\x47\x1f\xd4\x6f\xdf\xe1\x39\xe6\x24\xb4\x26\x9b\xdc\xc7\x01\x14\xd1\xdc\xe8\x51\xc1\xda\x30\xd6\x5a\xd4\xb6\xc7\xd1\x0a\xb8\x83\x0d\xc0\x46\xfd\x0b\xf0\xaf\xc7\x6d\x35\x4d\xa0\x1a\xcf\xed\xc5\x17\xe3\xb7\xbf\xa0\x9f\xbb\x9f\xf4\xa3\x2e\xd8\x6e\xda\x52\x09\xa0\x06\x15\xb0\x00\x4a\xb7\x95\xc7\x67\x2b\xb2\x6e\x6b\xc9\x6a\x8f\xe0\x00\x26\x2e\x17\x8e\x35\x74\x55\x9a\xb5\x16\xe8\xbf\x82\x89\x0b\x72\x8f\x6d\xdc\xb4\xda\xcd\x0f\x68\x5b\x77\x71\xda\x83\x82\x4a\xc9\x57\xfc\xb4\xdb\x65\x9c\xce\xc0\x94\x3a\x7c\x3b\x3c\xaf\x14\xc9\xc1\xb4\xd0\xf6\xb7\x9e\x58\x50\x39\x2f\xc4\x14\x5d\xfd\x21\xe0\x7f\x90\x65\x9b\x11\x42\xff\x60\x92\x15\x62\x08\x7d\xe0\xad\xe1\x65\x64\x45\x21\x4e\x0a\xf0\x46\x67\xfd\xcb\x1d\x61\x99\x9d\x9c\x77\x75\x15\x91\x7f\x40\x57\xfd\xf7\x23\xb5\xa1\x5e\x24\x24\x1e\x9e\xa1\x53\x9d\xa8\x0b\x4d\x49\x48\x38\x98\x30\x6a\xd2\xee\xb6\x1e\x96\x0d\xc5\x5d\x95\xca\x3a\x41\xa7\xe3\xc1\xd9\xe0\x7c\x32\xec\x8f\x60\x5a\x47\xe8\xea\xa7\xab\xd1\xc5\xdb\xdb\xb3\x71\x7f\x78\x7e\x7b\x3d\x1e\x39\x4b\xc4\x9e\x2a\xe1\xb1\x39\x48\x5e\x62\x21\x74\x44\x22\x12\x44\x9d\x23\xc0\x04\xc3\x49\xa8\x0b\xc1\xe6\x47\x0b\x08\x08\x13\x6e\xd1\x9f\x3c\xc1\x1d\x5a\xb0\x90\x9c\xf8\x66\x4d\x8b\x9e\x74\x13\x74\xf3\x02\xa8\x38\xca\xc9\x38\xca\x91\x1f\x69\xec\xea\xcc\xea\x50\x5d\x41\x25\x94\x1b\x83\x93\x86\x64\x86\x06\x27\x79\xce\x46\x9e\xbf\x3d\x69\x56\x3b\xef\x47\xb2\x7a\x9d\x5f\xb6\x5f\xc3\xcd\xe6\x23\x59\x7d\x9f\x3f\xfb\xde\xb9\x81\x5f\xc1\x99\x6f\x05\xb9\xb0\xdc\x43\x98\x7b\x3e\x84\xf0\x9a\xfd\x08\x73\x4f\x64\xed\xe5\xc9\x26\xec\x0a\xa3\x4c\x82\xce\x2e\xce\xcf\x07\x83\xab\xdb\x21\x4c\xbc\x37\xa6\x9e\x9f\x9e\x7d\xd7\xe3\xd1\xed\xe0\xfc\xc3\xc5\xf0\x56\xcf\x43\x3d\xfb\xd4\x53\x4b\x26\xcc\x44\x33\xfb\x26\x8a\x24\x13\xea\x18\x42\xd2\x81\x85\x28\xde\xad\xa0\x64\x40\x56\xd8\xba\x43\xc3\x42\xd6\x3f\xb1\x7e\x4a\x30\x5f\x3f\xe9\xac\x2f\x69\x4c\xd0\x92\xf2\x59\x1a\x91\xac\xce\x0e\x8c\x33\xd7\xf1\x8f\xa1\x33\x67\xa7\xe8\x04\x55\xdc\x6a\x5b\x72\x01\xa6\xab\x22\xf6\xc8\x21\xf5\x28\x27\xe7\xc8\xd2\x91\x4d\xd8\x72\x4f\x4b\x37\xd5\x9a\x2e\xaa\x9b\xf0\x94\xf1\x45\x76\xd7\x33\xf3\xdb\xd6\xa4\x0a\xf8\xfa\x49\xe7\xca\xca\x6e\xb5\x04\x4d\xf1\xfa\xff\x61\x71\x39\x0f\x25\xda\x62\x56\x55\xf5\x59\x4d\xf7\x20\x5a\x3f\xbd\x76\xae\xed\x7a\xc2\xab\xa7\xdf\x3b\x4f\x8b\x53\x7e\xfd\x14\xe8\xa2\xf0\x69\xbc\x71\xa9\x2e\x96\xa3\x28\x5e\xe7\xdd\xee\xee\x49\x7a\xf1\x12\xfd\xfb\x11\xc2\xf6\xb6\x74\x48\x31\xbc\xa7\x1c\xbe\x69\x25\x89\x5d\x6b\xc9\xe1\xa4\xf1\xde\xe2\xf8\xc6\x08\xe4\xc2\x25\xfd\x75\x76\x81\x07\xc1\x5c\x78\xf7\x7d\xe9\x06\xdf\x5e\x40\x1f\x4e\x42\xb7\xb9\xd0\x56\x43\x5e\xac\xba\xe1\x5d\x77\x41\x63\x62\x87\xce\x26\x7f\x3a\x2a\x44\xeb\xef\x0c\x32\xf3\xd5\xcc\x87\x57\x54\x04\xc3\x36\x42\xe4\x98\xc6\xd9\x83\x6e\x84\xc4\x4a\x44\x6c\x76\x72\x7c\xec\x77\x2f\x6f\x00\x59\x0c\x8f\xec\xf2\x2c\x53\x47\x11\x62\x5b\x53\x65\x1b\x66\xe8\xf9\x65\x39\x9c\xcd\x23\xc8\x4e\x9c\x4d\x31\x97\xed\x27\xfa\xc1\x3f\xfd\xd3\x3d\x53\xa7\xea\x1d\x42\x63\xb6\x1c\xfd\xcc\xd2\xe8\x10\x59\x8c\x51\xb1\xc4\xde\x58\x82\x2b\xb3\x2e\x9c\xe4\x2f\x32\xe2\x77\x8c\xaa\xd9\x96\xbf\xcf\x4b\xfe\x5e\xba\x90\x56\xa3\x50\xb5\x02\xf7\x32\x23\xee\xb5\x4c\x9f\x07\x71\x9b\xd5\xfc\x2c\x98\xdb\x2c\xfa\xdd\x10\xa7\x3c\x42\x37\x2f\x8e\x97\xdf\x1f\x83\xbf\xc3\x0b\xd4\xfd\x37\xf4\x76\x30\x41\xdd\x77\xe8\xe6\xc5\x29\x1c\x4b\x64\x77\xb2\x4a\xc8\x89\x1b\xe3\x7a\xfc\xb9\x7b\x7f\x7f\xdf\x55\xe7\xb3\x6e\xca\x23\x12\x07\x2c\x24\xa1\x6a\x1d\xa2\xce\xa7\xff\xa9\xa6\xc1\x09\x78\x62\xee\x38\xef\x36\xa9\x0a\xd1\xbf\x1c\xbb\xa1\x1d\xbb\xc3\x05\x57\xf2\x9f\xbb\x74\xa9\x0e\x27\xff\x86\xde\x0f\x26\xef\x2e\xce\xd4\xef\x77\xe8\xdd\xa0\x7f\x36\x18\xab\xdf\x21\x3a\xeb\x4f\xfa\xa0\x13\x61\xa9\x4c\x52\x89\xd4\x86\x65\x2f\x8f\x3f\xae\x6c\xaa\x47\xc7\xf7\x24\xe5\x51\x47\x87\x0a\x27\x84\x2b\xce\x20\x0c\x9c\x34\xba\x6a\xa3\xf5\x26\x21\x10\xd0\x43\xc3\x29\x0a\xb1\xc4\x00\x8f\x8a\xdc\xcb\x71\x49\x31\xea\x86\x47\x08\xa3\xcb\x8b\xab\x89\x06\x78\x47\x2c\x4c\xf0\x06\x14\x92\xe0\xf0\xc8\xd6\x35\x45\xee\x28\x01\x38\xdb\x46\x10\x69\x92\xf0\x65\xe3\xa6\xd6\x46\x0f\xaa\xa8\x2e\xf0\x0a\xb1\x25\xe1\x9c\x86\x04\xcd\x09\x0e\xd5\xb1\x05\x9c\x20\xbb\xef\x2c\x68\x80\x66\x2b\xb3\x2d\x88\x9c\x33\x53\xcf\xa9\xfb\x6f\x3d\xc3\x8a\x37\x8c\x43\xfd\xb6\x90\x05\xe9\x42\x17\x22\x60\xf1\x11\x4a\x74\xda\xf5\x25\x15\x54\xc2\x64\xd5\x85\xfe\x43\x16\x88\x5e\x10\xb1\x34\x84\x62\x71\x7c\xd5\x63\x7c\xe6\x73\x88\x2f\x8c\x9a\x89\x2e\x28\x8f\xdb\x40\x0f\xdc\xe0\xbc\x3b\x19\xe8\xfc\x1f\xa1\xbd\xa7\x15\x07\x0f\xce\xbf\xf9\xe5\x3f\xcb\x95\x79\x54\x1e\x41\x93\x34\x93\xe8\x2a\x4c\xc9\xfa\xc9\x98\x27\xd4\x50\xda\x32\xe2\xe6\x30\x2f\xcc\x09\x7f\xfd\xd4\x43\x57\x3a\x23\x8d\xbd\xd0\x00\x1a\x48\x49\xa3\xed\x77\x44\x64\x03\x5b\x82\x0b\xa3\x4c\x20\xc2\x0a\x10\xe7\xf5\xab\x20\xef\x0b\x22\x72\x73\x80\x71\xca\xb1\xc9\x99\x6e\x0a\x0c\x6d\x0c\xb1\x5b\xcf\x95\x93\x05\xc0\xd2\x55\xf2\x48\xdc\x95\xeb\x7f\x97\xfa\x32\xa6\x06\x9b\x48\x00\x1a\x61\xb4\x58\x3f\xa9\x31\x26\x6e\xf5\x3c\xf8\x28\x1b\xee\x4b\x93\x87\xb3\x30\xdc\xb9\x85\x05\xb2\x2c\xf6\x2f\x87\x47\x7a\xe4\x21\x6b\x0d\x52\x3f\x9a\xe7\xc0\x33\x2f\x5c\xbb\x75\x1f\x72\xe9\x1e\x7a\xed\x1e\x78\xf1\xd6\xae\x5e\xcb\x8f\x43\xac\xdf\xfa\x73\x3c\xc8\xf2\x1b\x47\x9a\xdf\x14\x77\x99\x9b\xed\xf7\x99\x9b\xaa\x9d\xa6\x15\xda\x83\x6c\x23\xa6\xc0\xae\x13\xdc\x35\x45\x5d\xde\x64\xe0\x30\xad\xf2\xd8\x33\xdd\x68\x4b\x4c\x5c\x4d\xed\xe9\x6e\xea\x77\x0d\xad\x32\xbe\xaa\x06\xa6\xb7\xf5\x66\x08\x18\x40\x69\x43\x42\xd9\xb8\xd5\x16\xf9\x86\xf1\xaa\x25\x3e\x13\xc8\xb4\x37\xeb\x18\x4f\xe6\x38\xb6\xf6\x11\xb1\x37\xbc\xa2\xc9\x67\x3f\x58\xa6\xbc\x6c\xcb\x78\xa1\x03\x04\x0c\x79\xf1\x16\x22\x74\x20\x7a\xb8\x80\x77\x33\x62\xf8\xb9\xd1\x3f\x57\xc0\x72\x0d\x09\xfe\xc8\xa0\x83\x85\x06\x19\xec\xf5\x11\x36\xed\xd7\x56\x43\x1c\x50\xeb\xb5\x56\xa3\x31\x6c\x4f\x8a\x57\x0d\xbf\x1d\x11\x35\x3e\xa8\x5b\x53\xd3\xe4\x82\xba\x35\x6d\xd5\x1e\xa8\xdb\xd3\xe5\xf5\x2f\xdd\x9a\xa2\x16\x6e\x4e\xdb\x12\xd7\xc2\xed\xef\x39\x88\xac\x3d\x92\x54\x00\xcc\x5d\x3c\xf6\x5b\x8a\x07\x87\x58\xed\x0c\xd2\x7a\x14\x3c\x3e\x1f\x6d\x59\x5e\xed\x40\xb1\xdf\x3e\xe5\x3a\x3b\x38\xfe\x21\x5d\x7b\x94\x6a\xdb\x35\x07\x8c\x3a\x53\x01\x90\xdb\xcc\x71\x64\x9b\x1e\xba\xc4\x18\x38\x4d\xc4\xb4\x02\x5e\x74\x1d\x68\xdf\xb5\x4a\x1f\x87\x16\x5d\xd2\x91\xf0\xdd\x29\xc1\x32\xe5\xa4\x3b\x8d\xf0\x0c\xbd\x19\xf4\x27\xd7\xe3\x56\x59\x96\x2b\xdb\x2b\x32\xde\x5c\x9c\xd7\x94\x5b\x2a\x37\xcf\xc4\x65\x10\x10\x91\x39\xa6\x80\xbd\xe8\x72\xd4\x07\x7b\xa9\x9e\x49\xbb\xb1\xd6\x62\x11\xf3\xb6\xc9\x99\xdd\x26\xad\x92\x34\xab\x06\xbb\xa6\xaa\xae\x68\xdb\x36\x5b\xb5\xad\x2a\xbe\x0b\x5b\xb4\x51\x6c\xe7\xa1\xaf\x6a\xde\x7e\xe4\x4d\xeb\xe7\x1d\x78\x8b\xa4\xfd\xb8\x3b\x2d\x5a\x0d\x3b\x89\x97\xed\x41\x2f\x5b\xc2\x5c\x92\x58\x8a\xdd\x9c\xc3\x4c\xdb\x06\x92\xea\x61\xec\x3a\x21\x76\x9c\x09\x6e\xb3\xdd\x26\xb2\xba\x94\x0b\xe7\xc2\x6b\xb3\xe8\xe6\xee\x70\xbf\xdc\xc4\x37\x12\xfe\xaf\xc3\x00\x63\x84\x26\x4c\x97\xe2\x82\xf4\x1b\xb1\x48\xc0\x2b\x09\x00\xe9\x82\x6a\x38\x49\xb2\x4c\x8d\x4c\x07\x53\x9f\x51\x32\x63\x50\x84\x91\xc4\xe1\x11\x64\x7d\xcd\xf4\x41\x42\xcc\x7d\x7a\xeb\x22\x99\xd9\x5d\x3e\x4f\x37\x5c\x49\xa7\xad\xac\xa8\x68\x05\x0d\x1a\x5f\x3f\x25\x84\x4b\xc6\xa9\x2e\x73\x68\x88\x36\x1a\x3a\xe3\x15\x60\xeb\xb2\xb9\x55\x4b\x3e\xa5\x14\x89\x4e\xa6\xa3\x14\x5a\x1f\x29\x56\x42\xae\xff\xbe\x00\xbd\x1d\xd4\x95\x24\x71\xa8\x7b\x78\x94\x17\x73\x2c\x76\x6f\xef\x41\x28\xc5\x61\x7e\xbd\x21\xa8\x27\x7d\x46\x64\x77\x4e\x70\x24\xe7\x5d\xc8\x62\xd5\x76\x45\x6f\xb4\x6b\xb5\xbc\xe7\x24\x4a\xd0\xcf\xa7\x17\xef\xdf\xf7\xcf\xcf\x9a\x76\xf7\xc2\xc7\x4d\x2e\xac\xe0\x55\x1c\x45\xa6\x3e\x83\xc9\x51\xd5\x55\x03\x71\x3c\xb9\x38\xbe\x1c\x5d\xbf\x1d\x9e\xa3\xbf\x42\x94\xd8\x5f\x51\x97\x3b\x55\x1f\xf4\x3b\xf8\xfd\x9d\x3e\x0b\x1b\xd5\x2d\x67\x8b\xc4\xd4\xa6\x02\x57\x65\xbe\xd0\x73\x2a\x8d\x23\x25\xaf\x3b\xdd\x69\xc7\xd5\x66\x36\xa9\xe5\xcb\x14\x1a\x57\x13\x20\xf4\x56\x11\xd1\x2d\x52\x58\x2e\x6c\x01\x15\x1d\xf5\x67\x05\x3a\xcf\x8c\xe2\xb9\x40\xa3\xc0\xe9\x14\x09\xaa\x89\x24\x42\xad\x98\x90\x7e\x4a\xd7\x4f\x0d\x8a\xe3\x43\xb2\x31\x73\xfb\xd8\x96\x91\xb5\x97\x91\x12\x85\xff\xfb\xf8\xcc\x14\xb2\x16\xc7\xa6\x36\xc7\x94\xb1\x3b\xcc\x6b\x5b\x55\x98\x03\x8b\xad\x6f\x23\x1a\xa7\x9f\x6f\xf1\x22\xfc\xef\x3f\xd4\x42\xea\x72\xf4\x7e\xd5\x85\x12\x20\x06\x00\x09\xe6\xbb\x69\x47\xbe\x1a\xe4\xad\x7a\x7f\x08\x84\xde\x41\xda\x09\xb8\x92\x9b\x6e\x1d\x96\xdd\x36\x4e\x5d\xa7\xf7\x25\x5b\x50\x89\xac\x29\x1e\xa4\x71\x56\x42\x43\x17\x1e\xa6\x05\xd7\xb8\x68\x85\xba\xdd\x6c\x2e\x68\x13\x08\x4c\x6f\x98\xdd\x77\x4c\xce\x9b\x0a\x19\x64\x78\x6d\xe5\x06\x14\xb3\x85\xda\xb9\x9c\x1a\xd1\x44\x96\x2b\x31\x38\x15\x7f\xf3\x7a\xbf\xb9\x03\x9f\xeb\xdc\xe5\xd0\x67\x6c\x52\x1c\xc3\x36\x19\x92\xf4\x73\x43\x45\x07\x53\xbc\xb8\x2b\x04\x43\x2f\xcb\xbd\x34\x61\x4a\x26\x17\x18\xbb\x93\x18\xe2\x8e\x58\x4c\x20\xa5\xdf\x26\xe3\xda\xb1\xa2\x84\x2d\xa7\xd9\xad\x11\xaf\x04\x0e\xb0\x80\xdd\x49\x12\x53\xf0\x63\x2c\xf0\xa7\xb2\x66\xb0\x5b\x06\x2f\x26\x9f\x29\x8b\xdb\xf5\x3f\xdd\xac\x6a\x01\x2e\x1b\x65\xbf\x9d\x83\xd4\xfb\xc8\x71\x96\xaa\x5b\x64\x28\x7f\x67\x65\x3f\x1a\x98\xf4\x1c\xd5\x3f\xea\x79\xf4\x7c\x45\x40\xf6\x60\x84\x75\x29\x42\x2f\x85\x71\x15\xac\x96\x32\x58\x20\xcc\x67\x60\x4b\x14\xfb\xb0\xc1\xc5\x97\x39\xd2\xb6\x95\x2e\x05\xef\x61\x87\x9c\x16\xdd\xd7\x51\x33\x43\xeb\xbd\x9a\x66\x0a\x9c\x5f\xf4\x4d\xd6\xc4\x8a\xfc\xe2\x2a\xc4\x04\x32\xb9\xe3\x9b\xcb\x31\xe5\x48\xae\xc7\xa3\xdb\xfe\xe5\x50\x23\x29\x69\x7b\x34\x2e\x37\xac\xa5\x84\x6f\xe0\x20\x7c\xee\x4e\xfd\x57\xaa\xf3\xf4\x6c\xbb\x64\x15\x9a\x43\xae\xa4\x2d\xe0\xdf\x1c\xaa\x6a\x55\x23\x16\x9f\x1f\xe2\x4d\xcb\xe2\x55\x95\xe8\x9e\x79\xb3\x6e\x5c\x2e\x2c\xf5\x95\x6f\x6e\x6c\xda\xa8\xac\x29\x7c\xdb\xea\x86\xb9\xc0\x49\x9e\x82\x50\x5d\xa2\xbf\xa2\x81\xb7\x16\xf7\xd7\x31\xf2\x6e\x49\xc2\x73\x19\x7a\x1b\xc8\xf8\x0a\xc6\xde\x05\xe6\x1f\x89\xd4\x2e\x61\x7b\x03\x70\x02\x46\x77\x53\xc6\x2e\xe8\x8c\xbb\x51\xd2\x36\x06\x5a\xa0\xe5\xeb\xcc\xb2\xb7\x7c\x7d\x9b\x59\x5b\xd5\xef\x51\xff\x1c\x2d\xbf\xcf\x5f\x7f\x0f\x8f\x5a\xec\x99\x7e\x6c\xd6\xec\xb7\x7c\xed\x9a\x62\xd5\x9f\x0a\xb4\xfa\x37\xfb\xe2\x7b\xf3\xe8\xfb\xe6\x3d\xf3\x90\xbd\x2b\x6c\x9e\x68\x32\xa7\x02\xb1\x84\x18\xdf\x3f\x2a\xf2\x78\x4f\xc9\xd0\x69\xc4\xd2\x10\xbd\xd1\x9e\x55\x7f\xcc\xe2\x45\xb4\x7d\xd7\x29\x43\x73\x67\xa2\x32\x02\x9b\x62\x92\x13\x9d\xd3\x5b\xcb\xf6\x72\xd1\xf7\x62\x4b\x1c\x49\xc2\x49\x68\x92\x29\x70\xba\xc0\x1c\x36\x20\x14\x60\x41\xa0\xbd\xdc\x20\x52\x32\xc4\x89\x9e\x3a\xb8\x44\x16\xba\x9f\xd3\x60\x8e\xa8\x9a\xe2\xb0\x53\x81\x6a\x4f\x31\xde\x7c\xf6\xa3\xfe\xac\x7f\x39\xb4\x5b\x4d\x6d\xc3\xef\xe1\xcb\xbb\x15\xe2\x64\x81\x93\xc4\x2d\x30\x9d\xf7\x07\xf2\x41\x2e\x5f\x23\x08\x5c\x56\xd4\x2d\xbf\xd7\xbf\x7b\x08\xfd\xab\x3e\x1f\x2c\x16\x04\x0e\x0c\x1f\x6d\xde\x4e\xf3\x39\x32\xe5\x4c\x91\x62\xd4\x3c\x95\x50\xc5\x27\x64\xf7\xb1\xfd\xc8\x50\x27\x19\x4a\x38\x68\xe0\x11\x0e\x43\xaa\xd3\x5b\x94\x49\xb8\x23\xaa\xb5\x76\xde\x0e\x7b\xe8\x22\x0e\x48\x05\xb5\x73\xbc\x24\xe8\x8e\x90\xd8\x4e\xac\xf0\xc8\x22\xcb\x93\xcf\xa9\x8d\x1f\x7a\x63\x72\x58\x70\xb2\x60\x4b\x9b\x43\xba\x30\x31\x76\xcb\x1f\xcd\x72\xef\x85\xdd\xda\xef\x91\x0a\x3a\xf7\xbe\xea\xce\x52\xea\x4d\x9f\xd5\x08\x04\x0c\xa3\x62\x1f\x32\x76\x53\xad\xc0\xd9\x22\xdc\xad\x29\xa8\x75\x76\x44\xab\xdb\x42\x4d\x80\x39\x09\x3e\x8a\x74\xb1\x1b\xeb\x92\x94\xcf\x36\xa5\xd9\x86\x13\x45\x83\x14\xf6\x40\x29\x3b\x77\x1c\x84\x94\x7a\xb1\x89\x85\x48\x21\x18\x70\x8e\xa5\x76\xd0\x2d\x8a\x24\x4e\x44\xc2\x62\x7d\x81\xc8\x04\x5a\x79\x5d\x2a\xb9\x16\xab\xb3\x62\x3c\x23\xdc\x49\xfe\xc8\xb8\x7e\x23\x0d\x18\xb8\xe5\x18\xc9\xf5\xfd\xab\x57\xea\xfd\x0f\xaf\x5f\xe5\x1e\xbc\x1b\x70\xe7\x58\xe8\xd5\xae\xad\xf9\xe1\x11\x8a\x08\x5e\x82\xdd\x03\xbc\x07\xcd\xf5\x05\xb2\xdc\x14\x16\x76\x47\x80\x5b\xf1\x1d\x16\xa4\x87\xfa\x51\x84\x3e\xc6\xec\x3e\x22\xe1\x0c\x92\xc9\x54\xe2\xb2\xce\xc2\x7e\x69\x71\x84\x68\x1c\x44\x69\xa1\x52\xff\x9d\x2e\x40\xaf\xa5\x8e\x7d\xf8\x91\xac\xc4\x6e\xa2\xa5\x38\xa6\x6c\x3a\x25\x5c\x61\x2b\xd8\x7f\xcd\x4e\xd9\x64\x22\x69\x01\xca\xd9\xe7\x1b\x4c\x28\xdb\xd0\xe5\x68\xf8\x9f\x65\xd6\x65\xd8\xab\x67\x9d\x9e\x4e\x38\x8a\x6a\xb7\x8f\xe7\x9b\x50\xbb\xcd\xa3\x9c\x46\x77\x22\xd9\xd9\xd5\x43\xe7\x0c\x61\x29\x89\xba\x27\x5b\x04\x0b\x1c\xc2\xa5\xde\x9c\x5f\x2a\xf8\xf8\xc7\xcc\x4c\x08\x0c\xb4\xca\x04\xb5\x02\x59\x0a\xf1\xd1\x92\xb3\x95\xdd\xd5\xcb\x87\x11\x85\x26\xc0\xea\x38\x63\x78\xb3\x41\x6b\x0f\xf5\xa7\x52\x0d\x57\x15\x96\x95\xf1\xad\xbf\xc7\x31\x78\xdf\xf3\x34\x46\x84\xca\x39\x28\xa7\x7d\xce\x80\x6c\xe3\x65\x7e\x86\x08\x98\x3a\xdf\x48\x02\xc4\x06\x11\xc1\x71\x9a\xec\xba\xca\xc4\x7c\xb7\x93\xbf\xe3\x64\xbc\x7b\xfb\xdd\xb6\x30\x3d\x9f\x7c\x45\xe6\x0f\x05\x32\x33\xda\x35\x48\x97\x8a\xa6\x25\xa3\xe4\xee\xa8\x6b\xb5\x4e\xcf\xc2\x06\xb8\xf7\x66\x36\xfa\xf3\xc1\xbf\xde\xb6\x54\x3e\x98\xa6\xd6\x79\xe1\xfc\xe2\xfa\xc3\xa0\x7f\x7d\xdb\x4a\x1d\xa1\xdb\x56\x85\x10\xe4\x64\x14\x1f\xb5\x22\xc6\x01\x08\x66\xe1\x8d\xc8\x02\x97\xc8\x8d\xb7\xad\x48\xb6\x87\x50\x45\xa1\xff\x04\xe9\x6b\xa4\xd0\x8f\x46\x03\x68\xd9\x06\x9b\xd7\x09\x5a\xa1\xdf\xf2\xe0\x55\x02\xb9\xe1\x4d\x9b\x11\xb7\xdd\x51\xac\x08\xd6\xe3\x8d\xec\x92\xab\x1f\x6d\x45\x6c\x5d\xee\x5b\x3d\xa0\x1b\x6f\xda\x11\xed\x38\xa6\x02\x89\xe0\x5d\xd7\x8e\x32\x37\xc1\x98\x66\x5d\x2b\xef\x3c\xb5\x6a\xbb\xf6\x48\xde\xe5\x07\x58\xc0\x0e\xbc\x9f\x5d\xd7\x83\xa6\x43\xd2\x46\xcb\x92\x10\x6b\x38\x16\xd5\x20\x6e\x10\x62\x87\x66\x80\x90\x78\x46\xda\xaa\x4c\xed\xe7\x2d\xc5\x14\x54\x27\xdb\x0a\x36\x97\x5b\xc1\x86\x42\x5f\xd9\x41\x3c\x93\xc3\xc3\xf3\xb3\xc1\xbf\xb5\x43\x57\x84\x90\x17\xdf\x55\x00\xea\x29\x70\x12\xf6\xed\xb8\x2f\xdb\xf0\x25\x25\xe1\x22\xb2\x24\x3b\x96\x1c\xe3\x69\xdc\x95\x58\xe4\x5e\x56\xc8\xb8\x37\x41\x95\x38\xb5\xcb\x4c\xfa\x57\x7f\x76\x27\x57\x29\x73\x7f\x30\x05\x5d\x38\x24\xe7\x0f\xa9\x48\x22\xac\x6b\xa5\x80\x82\xdc\x1c\x52\x71\x92\x64\xc7\x63\x2a\x05\x52\x08\x05\x44\x61\x82\xf1\x07\xf0\x03\x2e\x2a\x8c\x9d\xfc\x08\xcd\x38\x49\x0a\x47\xbb\x8e\x40\x26\x1e\x54\x9f\xcd\x89\xd3\x4e\x32\xb4\xa4\xe4\x1e\x9e\xe4\xd9\x49\x15\x09\xf5\xae\x3b\x59\xef\x8d\x52\xf8\xe6\xe6\xe6\xc5\x5d\x1a\x87\x50\x8d\x85\x04\x88\xe3\x8f\x04\x85\x77\x27\x46\xed\xa3\x23\x10\x35\x5b\xcc\xa3\x5d\x99\x0e\x05\xc2\x49\xbc\xa4\x9c\xc5\x0b\x12\xcb\xee\x12\x73\x0a\xde\xae\x30\x29\xf6\x02\x5b\x8c\x03\xda\x6d\x7e\x09\xa8\x54\xe8\x84\x2d\xe6\x9e\x83\x10\x97\xfd\x11\x9d\x0d\xaf\xfe\x5c\xce\x68\xd8\xe8\x1f\xaf\xc1\xe6\x11\x94\x55\x50\xff\x72\x3d\xc8\xe1\x0e\xc7\x83\x5f\x5a\x78\xce\xef\x53\xa7\x75\x9f\xd2\xac\x07\x61\xb5\xe7\xa4\xd1\x48\x76\xf5\x69\xa2\x15\x32\xeb\xe2\xfd\x73\xf7\x0e\xe9\x53\x81\xe2\x72\x46\xc3\x9e\x9e\xde\x9b\x57\xac\xbd\x38\x63\xce\x20\xfb\xc1\x68\x0a\x3a\x6a\xc7\xed\xc6\x68\xa8\xc3\x10\x53\x2b\xb4\x0e\x18\xa3\xf4\x3c\xa0\x36\x73\x99\xb6\x67\xae\xd8\x71\x3e\x57\xa2\x6d\xcb\x46\x01\x9d\xdf\xbf\xdb\xfb\x42\xd9\x75\x86\xcb\xae\x1b\xf9\x80\x06\xe7\x1f\x6e\x3f\xf4\xc7\xc5\x3f\x3e\xf4\x47\xd7\xcd\xe3\xa0\x21\xe5\x17\xcb\xf7\xd0\x76\x70\xfe\x01\x7d\xe8\x8f\x06\xd7\x63\xfb\x67\x33\x45\x95\x2e\xdc\xa8\x93\x30\x2e\x3b\x7f\xed\xc4\x2c\x26\x4d\x1e\xfa\x1b\x50\x2c\x59\x45\x20\x3b\x52\xf2\x32\xe1\x0c\x44\xe0\x5f\x11\x18\x7f\xff\x0a\x4e\xa8\xdf\xe5\x67\x1c\xa4\xe1\xbb\xda\xe0\x84\x93\x00\xf2\xdb\xdd\xa5\x12\xea\x89\x06\x01\x49\xa0\x4e\x28\xe3\xa8\x63\x00\x76\x76\xd3\x0e\x29\x4a\x19\x9f\x75\x39\x8b\x48\x1e\x72\xa6\xae\xae\xe3\x0b\x5d\xfe\xa1\x05\xbb\x32\x00\xe5\xd8\xb3\x02\x9c\x7d\xe8\x00\xf6\xa8\x5f\x76\x39\x75\x2e\xf8\xec\x3d\x8e\xf1\x8c\xf0\x0e\xea\xa2\x61\xbc\xa4\x92\x18\x5f\x1f\xf5\x14\x5c\x63\xc4\x11\x12\x24\x82\xb2\x78\x71\x88\x82\x39\x8e\x67\x44\x5b\xcb\x8e\x8c\xe6\x51\x22\x91\x10\xad\xaa\x8f\xe8\x82\x4a\x53\x86\xaf\xf3\x23\x8d\x22\x1a\xbb\x18\x4e\x4d\x36\xbe\x1c\x83\x3a\x0b\xde\xe9\xef\xd4\x90\xb0\x34\x96\xc6\x0f\x67\x05\x4e\x87\x34\x9e\xb2\x9c\xd8\x7e\x1a\x52\xc9\x00\xd4\xd8\xe6\x1a\x47\x66\x3b\x94\x0c\x4c\x5d\xaa\x81\x31\xcb\x42\x02\xe5\x9d\x07\x54\x2b\xee\x14\xf3\x40\x79\x57\x33\x8a\xdb\xc3\x2a\x1d\xc6\x3f\xa8\xf3\x2f\x04\xae\x81\x11\x44\xab\xfc\xb4\xd9\xa3\x53\xd4\x03\xee\x16\x96\xa1\x48\x68\x3e\xb7\xb6\x2f\xec\xd2\x62\x36\xb7\x45\xd7\xa6\x40\xc7\xa1\x3a\xb7\x5b\x99\x85\x9d\x39\xbe\x19\x6a\x0b\xaf\xca\x51\xb7\x2d\x98\x59\x8e\xb6\xcd\xf4\x27\xc5\xc0\xdb\x1d\x48\xba\xcd\x49\x72\x62\x6f\xf7\xec\xf2\xa6\xf8\xd1\xf4\x6e\x21\x0c\x1d\x40\x55\xe2\x70\x50\x02\x78\x08\xc2\x36\xa5\xe3\x95\x6a\xd4\x46\x3e\xaa\x27\x26\x31\xaa\x89\xc1\xd3\xbe\x20\x18\xcd\xe8\x92\xc4\xda\xbd\xcf\x05\x7a\xa6\x2e\xfd\x2c\xf1\x09\x45\x9c\x24\x05\xab\x4e\x26\x69\xcd\xd5\xdc\x11\x6f\x2e\x54\x47\x3a\x82\x44\x51\xdf\x1e\xd9\x0f\x33\x61\x2d\xc1\xf8\x08\x51\x60\x54\x68\xd2\x76\x1f\x6f\x89\x67\x5f\x51\xa8\xb4\x45\x77\x18\xa1\xd2\x0e\xdb\xd7\x14\x2a\x73\xcc\x49\xd7\xb8\xd0\x6c\x5d\x8c\xbc\xa1\x75\x93\xf4\xc8\x75\xbe\x4d\x78\x1c\x15\x6f\x6b\x98\x99\x77\x0a\x54\x5d\x2b\x5c\xcc\xbb\x50\xf3\x77\xc7\xcb\x6c\x4d\x82\x81\x36\xdd\xf0\x64\x38\x68\x8d\x74\xc7\xd3\x87\x0d\x5e\xd7\xe5\x22\x48\xd8\x3e\x00\x7e\xb3\x69\xdb\xf8\x77\xdd\x32\xf3\xf1\x69\x3f\xd4\x4e\x9b\xd6\x78\x76\xe4\x8b\x13\x7d\x0e\xfa\x27\x57\x85\xdb\xa5\x71\x48\x3e\xff\x02\xb5\xa0\x8c\xd6\x51\xfd\x31\x42\x3f\xdf\xd1\x38\xbc\xc5\x21\xc4\xfe\x9c\xfc\xa2\x84\xe1\xc9\x9c\x09\xfd\x1f\xf5\x97\x9e\x73\x1f\x69\x02\x0e\xad\x5d\xa8\x1b\x04\x14\xe5\x2f\x38\x59\x30\x49\xba\xe4\x33\x09\xd2\xec\x8d\x49\xee\xd6\x4d\x04\x49\x43\xd6\x95\x72\x05\x8f\xa7\x8c\x07\xa4\xfc\xd0\x66\x41\x70\x1e\x37\xf1\x36\x0f\x9c\x87\xbe\x42\xf7\x6e\xb3\x72\x37\x38\x49\x0a\x7d\x25\xa6\xb3\x26\xc4\xe9\x36\xa2\x98\x0a\x16\xdb\xfe\xae\xff\x43\x92\x13\xf5\x13\x7e\x7d\xab\x1e\x37\x8d\x6e\x37\x60\xe1\x8e\x9b\x91\x98\x77\xf5\x0e\x1c\xb6\x35\x3b\xb8\x4d\x5a\x99\x1e\x84\xc4\xc1\x47\x74\x35\x69\x69\x5b\xd5\x9f\x83\xc9\x74\x38\x6a\x5a\x14\xea\xdb\x1d\x17\x45\xe3\x2e\xb5\x17\xd8\x83\x28\x49\xb7\xb1\x06\x6d\x61\x0b\x12\x92\x25\xed\xc1\xb2\xa4\x1d\x54\x89\xf9\x8c\xc8\xaa\x58\x9c\x06\x14\x55\x0d\x5b\x15\x4c\x02\x93\xca\x7e\x99\x26\x24\xe1\x0b\x1a\xab\x8d\xbd\x68\x10\x02\x03\xd0\xf0\xac\x56\x99\x56\x6a\x6b\xcc\x29\x7f\xd8\x89\x8e\x34\x56\xd2\xb6\x94\x31\xd9\x24\x4e\xaa\x48\x49\x96\x87\x10\xbc\xbb\xb8\x9a\x9c\x9b\x90\x28\x1d\x46\x60\xd3\x1e\x34\xda\x25\xea\x70\x56\xe4\x30\xcb\x71\xaa\xe9\xf0\xee\x62\xe2\xe0\xcc\x33\x49\x34\x19\x2d\x9e\xa5\xa3\xb5\xc3\x54\x89\xd1\x8d\x84\x58\xac\x38\x96\x04\x34\x30\x84\x17\xc3\x33\xd4\x80\xe6\xd1\x19\x87\x1b\xd9\xaf\x8f\xbe\xd2\x4c\xb6\x9d\xcd\xa8\x1e\xd4\x56\x26\xa4\x6d\xa8\x72\xb4\x93\xa7\xa0\x44\x73\x22\x03\x70\x92\x44\x2b\x28\xaf\xf1\x99\x0a\x70\x8a\xb7\x0e\x72\x4e\xfa\x11\x81\xd2\x58\xd2\x08\xc9\x39\x59\x21\xcc\x89\xb5\x64\xfb\x93\x45\xb4\x22\xbe\x3e\x83\x61\xdb\xa3\x60\x35\xb0\x72\x1a\xc3\xb6\x87\xc4\xed\x48\xfb\xfd\x72\x56\xaf\x92\x4c\x1a\x6f\x69\x5a\x29\x81\xc9\x7d\x14\xb6\x31\xb2\x58\x20\x95\xfb\xf9\x4e\x0b\xc7\x03\x6a\x97\x85\xd3\x8a\xaa\xdf\xe1\xf0\x96\x32\x52\xe8\x6c\x25\x6d\xb4\x79\x1b\x4d\x6d\x1e\x96\x61\x83\x1f\x5d\x1a\x7f\xcb\x58\xc4\x06\xec\x5f\x27\x1a\x71\x6b\x22\x9e\x2b\x1e\xb1\x91\x90\x2c\x22\xb1\x61\x2c\x20\x22\x71\x47\x12\x6a\x2d\x87\x8d\xb3\xb0\xc6\x5a\xd8\x06\xf1\x5e\xc6\xae\x12\x88\xdd\xcd\x5d\x8d\xb4\xfc\x5f\x83\xd7\x76\xf3\x69\x43\x5d\xd6\x68\xfa\xf2\xb7\x1f\x94\x01\xec\x84\xdf\x51\xda\xed\xdd\xaf\x3d\xcd\x12\x1b\xa0\xf6\x36\x4c\xb4\x26\xee\xff\x9a\x26\xb6\x1e\xf5\xbd\x54\xe5\x8d\xed\x9b\x4e\x37\x49\x88\xbd\xa9\xfe\x13\x94\x27\xf4\xbb\xbc\xb8\x1a\xda\x32\x96\x46\x19\xf5\xd7\x4c\x75\x06\x0f\x23\x16\x7c\xfc\x6b\xb7\x9b\xc6\xea\x47\xe3\x4d\xb8\x8c\xb7\xaa\x48\x40\x82\xdc\x7c\x89\x5b\x53\xf0\x6d\x3a\x5e\xb6\x98\x5f\xaa\x8d\x5d\xcc\x59\x1a\x85\x10\x56\x8d\xbe\xd0\x04\x32\x1e\x1e\xe5\x69\x2a\xdc\x87\x30\xe3\x23\x16\xe0\x08\x85\x94\x93\x40\x32\xbe\xea\xa1\x4b\x26\xa8\x8d\xb2\xc6\x28\x81\xbf\x96\xba\xb8\xe1\x8c\x70\xb5\x0d\x48\x81\x12\x4e\x99\x3a\x9b\xea\x59\xaa\xe6\x25\xe3\xd2\x46\x69\x45\xec\x9e\x08\x08\x56\x9a\xd3\xd9\x9c\x08\xb9\xe3\x89\x52\xf3\x6d\x8f\x5a\xd6\x05\x08\xb6\xa4\xc1\x02\x4d\x2e\x26\xfd\x91\x53\xc2\xba\xb2\xae\x75\x0c\x5e\xfc\x56\x29\x71\xe0\xca\xd6\xe8\xaf\x48\x0f\xec\x37\xac\x7c\x6d\x98\x53\x7f\x9d\xb4\xb5\x11\xff\x74\x75\x71\x7e\x3b\xbe\x1e\x0d\xae\xda\x14\xb2\xad\x06\x5d\xbe\xf7\x16\x0b\x81\xde\x8e\x07\x6f\x15\x78\x85\xe9\xf9\x08\xcf\x32\x26\xea\x54\x03\xa6\x48\x0e\x9c\x88\x4d\x94\x3b\x8e\x11\xbe\x13\x2c\x4a\x75\x40\x7e\x56\x47\xa8\x58\x83\xb2\xa7\xa1\x0c\xa5\x5d\x6f\x10\x12\x89\x91\xa0\xf1\x2c\x22\x08\x73\x8e\x57\xda\x57\x05\x6a\x6e\xb2\xbb\xdf\x48\x20\x05\xa2\xb1\xa0\x50\xc8\x48\x04\x9c\xde\xd9\x88\x41\xb0\xe5\xe5\xf5\x6f\x3e\xe0\x88\x86\xe8\x37\xc1\x62\x5d\xee\xd2\x9c\x8d\xcd\x22\xff\xd9\x96\xf5\x7b\xc8\xea\xfb\x81\x97\x77\xc2\x99\x64\x01\x8b\xc0\xb0\x0a\x4f\x64\x90\x18\x93\xab\xfb\x5d\x48\xd4\x95\x10\x86\x2c\xff\xf4\xf5\xab\xde\xab\xde\xeb\xd7\xbd\x57\xc7\xdf\xff\x50\xd1\xc6\xec\x5c\xf6\xeb\xff\xf1\xea\xe8\x87\x1f\xfe\x50\x0d\x3b\xe0\x34\x29\xc2\xee\xab\x39\x0e\xbe\x68\x20\x2b\x20\x33\x22\x92\x1c\x4f\xa7\x34\xd0\xf2\xe2\x7f\xb1\x98\xf4\xf3\xda\x98\x08\x3d\xea\x1f\xbf\xfc\xfe\x2e\xb9\x76\xea\xd5\x54\xa0\x55\x62\xc3\x26\x97\x0e\xd0\x65\x7f\xdc\x7f\x3f\x98\x0c\xc6\x57\xb7\x7d\x3d\xb9\xd5\x73\x89\x26\xfd\xb7\xde\x75\xeb\xc1\x56\x59\x01\xda\x06\x2d\x6d\x60\x1c\x0f\x5c\x74\x83\xc9\xf0\x2f\xd7\x83\x89\x92\x60\x5f\xb5\x87\xd9\xa4\xbe\x80\x59\x81\xa3\x68\x95\xa5\x4e\xb2\x12\x2f\x0b\x6f\x80\xcc\xa5\xb3\xd4\x04\x37\x3b\xa5\x6b\x21\xaf\x12\x18\xe4\xdc\xe5\x84\x68\xdc\x8d\x68\x6c\xd7\xa2\xa7\x07\xdd\x60\x77\x87\x84\x3a\xea\x37\x6b\xd1\xee\xdb\x9f\x1e\x72\x44\x93\x91\x36\x72\x4e\xdc\x86\x1a\xe5\x0e\x82\xca\xcf\x9c\xcd\xea\xb7\x08\xa1\x81\x16\x39\x88\x4d\x37\xc9\x34\x72\x28\x17\x3f\x50\xa6\x38\x4a\x85\x24\xfc\x36\x66\x21\x31\x92\xc2\x91\x4f\xe6\x1b\x75\xad\xd3\xef\xfe\xe9\xa8\xfc\x72\x41\x16\x8c\xaf\x6e\x17\x77\xfa\x83\xd7\xaf\xbe\xff\x21\xfb\xc4\x88\x83\xc7\xfa\xe1\x80\x5c\xcf\x6c\xaa\x6d\xbf\xdd\xd0\x28\xdd\x43\x24\xf1\xcc\x44\xc8\xdb\x88\xef\x7b\x4e\xa5\x24\xb1\xe5\xef\x87\xd3\xfe\x65\x1e\x05\xe8\x98\x0c\x91\x35\x19\xea\xcb\x41\xbc\x42\x77\x2c\x8d\xc3\x82\x80\xa9\x0f\xc7\x29\xb1\x1b\x3c\xd2\xbb\x09\x9a\xb1\x28\x6c\xf1\xa1\x9d\xb9\x1c\x2f\x6e\x67\x9a\x31\x3f\x3c\x76\x5a\x35\xfc\xdf\xc7\xf7\x8c\x7f\x84\xcb\xc2\xb1\x5c\x24\xc7\x99\x89\x5c\xcf\xc9\x8a\xba\xc1\x95\x80\x24\x8c\x8d\xe2\xec\x11\x62\xd3\x23\xe0\xa5\x7a\x72\x08\xe1\xe9\xf4\xd1\xf6\x10\xfa\x77\x48\xd8\x6d\xd8\x70\x38\x7c\x7a\x60\x0f\x07\x4f\x22\xc3\xfb\x8c\xf5\x87\x60\x7c\x4d\x01\xa2\xc9\xc5\x9f\x07\x8d\xd7\x40\x3f\xb0\x8a\x0a\x44\x7f\x1a\x4c\x5a\x1f\xe7\xea\x82\x7e\x33\x25\x80\xcd\x0b\x89\xae\xc7\xa3\xed\x28\xad\x89\xfb\x2d\xaa\x2c\xdc\x1c\x97\x80\xa6\x15\xf9\x8e\x96\x66\xaf\x41\xaa\x76\xce\xf2\xdd\x52\xdc\x58\xb5\x18\xfd\xd7\xbf\xad\xb4\xac\xea\x0e\x17\xfa\xf1\xe0\x6c\x70\x3e\x19\xf6\x47\xd0\xbb\x08\x5d\xfd\x74\x35\xba\x78\x7b\x7b\x36\xee\x0f\xcf\x6d\xda\x51\xc3\xa9\x2c\xa0\x5c\x3d\xce\x2a\xb2\x0a\x13\xaa\x99\x57\xdf\xaf\x2c\xad\xaf\xcb\xf0\xc3\x51\x54\xeb\x94\xdc\x54\xd1\x0b\x16\x92\x93\x2a\x41\xdb\xbe\x3e\xbd\xda\x39\x17\x0b\x7c\x94\x93\x71\x94\x23\x3f\xd2\xd8\x6f\x5e\x14\xa8\xae\xa0\x52\x20\x2c\xf4\x36\x2e\x99\xc9\x0f\xe6\x64\x4e\x8b\x59\xdc\x2d\x64\x17\xdd\x93\x66\x25\xd4\xa1\xfa\x7f\xe6\xcd\xfa\x1a\x5c\x4e\xa1\xea\x7f\xf6\xec\x7b\x38\x64\xc5\x5b\x56\xfb\xdf\x8b\x30\xf7\xb8\xd3\x4e\x7e\x54\xc3\xae\x3c\x8c\x9b\x32\xbf\xb7\x43\x98\x78\x6f\x86\xa7\x7d\xab\xce\x89\x20\xb7\xee\xe0\xfc\xc3\xc5\xf0\x56\xcf\x43\x3d\xfb\xd4\x53\x4b\x26\xcc\x44\x3b\xfb\x26\x8a\x26\x93\x83\x3a\x24\x02\xc5\x6c\x61\x32\x2c\x73\xbc\x58\xff\x5d\x72\x5d\x11\xd7\xd4\xf6\x45\x61\x87\xc2\x88\x4f\x6d\x55\x0e\xb1\x7e\x4a\x30\x5f\x3f\xe9\x92\xba\x69\x4c\xd0\x92\xf2\x59\xaa\xee\xa6\x53\x1a\xa3\xb0\xa3\x07\x9a\xeb\x3c\xc5\xa1\x33\x69\xa7\xba\x28\xc8\x6e\x5c\x80\xe9\xaa\x68\x3d\x72\x28\x3d\xca\xa9\x39\xb2\x64\x64\x13\xb6\xdc\xd1\xbc\x99\x68\xe8\xa1\x9b\x50\x59\x1d\x4d\xa5\x99\xdf\xba\x83\x04\x05\x7c\xfd\x44\x20\x8d\xb9\x25\x37\xcf\xe6\x1e\x97\x32\xba\x6f\x31\xab\xaa\xfa\xac\xa6\x7b\x10\xad\x9f\x5e\x3b\xfe\xd4\x7a\xc2\xab\xa7\xdf\x3b\x4f\x8b\x53\x3e\xcb\x22\x9d\xc6\xb6\x82\xb3\x1a\x99\x60\xfd\x77\x01\xe9\xd6\x63\x5b\x78\xc5\xc9\xa9\xad\x98\xe4\x76\x77\x4f\xd2\x8b\x5a\x98\xdf\x8f\x10\xce\x4a\x5b\x1c\x50\x0c\xef\x29\x87\x6f\x5a\x49\x62\xad\xc7\xb8\x39\xb0\x34\xde\x5b\x1c\xdf\x18\x81\x5c\xb8\xe6\xbe\xce\xae\xc0\x20\x98\x0b\xef\xbe\x2f\xdd\x81\xdb\x0b\xe8\xc3\x49\xe8\x36\x97\xab\x6a\xc8\x8b\x55\x37\xbc\xeb\x2e\x68\x4c\xf2\xfe\xdb\x9c\xd6\x59\x3f\x71\xb8\xa0\xa0\xa9\x3a\x42\xe5\xba\x03\x27\xfa\x81\x4e\x8b\x9d\x71\x62\x37\xec\x59\x79\xe7\x7c\x26\x08\xff\x0d\xcc\x0f\x91\x63\x1a\xe7\x57\xf7\x08\x89\x95\x88\xd8\xac\x58\x65\x64\x3b\x90\x45\xc7\xb5\x2e\xaf\xaa\x5b\x72\xf8\xe3\xda\xc6\xd8\xe4\x23\xa3\x04\xa5\x1e\x15\x35\x26\xf9\x88\xa8\xe7\xd9\x68\xec\x1a\x2a\x72\x88\x21\x7b\x1e\xc4\x6d\x46\xf6\x59\x30\x3f\xdb\x04\x58\xfe\x01\x27\x3b\x7a\x46\x2f\x09\x17\x74\x47\x4e\x9b\xb6\x99\xd0\xea\x04\x53\xd4\x5d\x76\x40\xf3\x0c\xbf\xbb\xe6\x8b\x0e\xa8\x83\x71\x24\x58\x16\xf4\xbc\xb5\x4a\x78\x32\xee\x9f\x0e\xd0\x60\x3c\xbe\x18\xab\x8d\xae\x3f\x19\x9e\xbf\x45\xa3\x8b\xb7\x50\xdf\x1f\x3d\x3c\xf4\x2e\xb1\x9c\x3f\x3e\x9e\xdc\xc4\x0f\x0f\xbd\x01\xe7\x8f\x8f\x1e\x0c\x83\xf1\x58\x5d\x3c\x33\x90\xa3\x8b\xf1\x15\x3a\x1b\xa0\x51\xdf\xc0\xbd\x38\x47\x67\xd7\xc8\xec\xd1\xe8\x4f\xea\x82\xdd\x1f\xe5\x18\x90\x8b\xa2\x9a\xda\xd1\xd0\x24\x6f\x35\x36\xeb\x05\x89\xe5\xc9\x76\x1d\xd6\x69\x74\x7c\x87\x66\x53\x43\xcc\xd3\xf6\xf2\x7a\x3b\x5c\x38\x06\x25\x3f\x4c\x59\x01\xc6\xc8\x2c\xb1\x23\x9b\x22\x75\x05\xcd\x36\x4b\xb8\x82\x7a\xa0\x0f\x17\x09\x13\x3a\xff\x65\x48\x90\x3a\x65\x72\xa8\x63\x13\x52\x91\x58\x33\x67\x44\x84\x03\x1d\x8e\xa0\x70\xe9\xcd\x35\xd4\x28\xc1\x2b\x1c\x4b\xe1\xa7\x75\x5f\x3a\xdf\x53\xb1\x41\x57\xf8\x35\xe9\x42\x2f\xcf\xc8\x14\xa7\x91\x3c\xc9\xca\x85\x12\x6f\x59\x9d\xfd\xa8\x45\x2f\x3f\xc0\x49\x18\x2e\x26\xe1\xfa\x69\x8a\x53\x89\x8a\x68\x7d\xfd\x89\xa1\xa0\x0a\x24\xaf\x2c\x27\xd1\x3c\x2a\x64\x8d\x85\xf5\x9e\xe5\x94\x5d\xa4\x42\xa2\x29\xe5\x02\xb2\x8d\x9b\x94\xa5\xad\x66\x8c\x48\x93\x84\xd3\x85\xba\x26\x75\xb2\xb4\x58\x4e\x97\xfe\xa8\xeb\x45\x85\x64\xa9\x6e\x2f\x1d\x7c\xc7\x78\xe8\x36\x22\x02\xa9\x0b\x40\x81\x0d\x50\x1b\x46\x20\x13\x8b\xe4\x1f\x3c\xd5\x59\xd0\x69\xbb\x69\xf2\xb3\xec\xdc\x36\xf9\x28\x36\x11\x16\x24\xac\x75\x0d\x29\x76\xab\x50\xeb\x51\x11\x93\x81\x85\x21\x8d\xd5\x77\x42\x57\x72\xc4\x48\x23\x56\xcb\x07\xf3\x60\xbe\x7e\x42\x42\x8d\xab\xae\xe7\x83\x02\x7a\x17\xad\x9f\x9a\xfb\x00\x79\xce\x69\xac\xae\x6b\xfa\xf6\x36\x65\x5c\xc9\x2f\x93\x92\xfd\x1c\x2f\xc8\xe3\xe3\x81\x3b\xe5\xa0\x33\x9d\xc9\x66\x25\x14\xad\xda\x40\xbf\x65\xc7\xfe\x93\x08\x27\x45\xaa\xad\xea\x72\xc7\xe4\x1c\x45\x2c\xf8\x08\x0b\x44\xbb\x91\x98\x7a\x38\xde\x4c\xcb\xa5\x15\x61\xef\xac\x6a\x49\x98\x4a\x3a\x21\x51\xfb\x2e\x67\x29\x8d\x22\x3c\xd3\x33\xdc\x79\x17\xae\x9f\x0a\xaf\x05\x5d\xa4\x91\xc4\xf1\xfa\x49\x6d\x42\xbe\x6a\x89\x15\x84\xab\x2d\x4e\xc7\xa6\x3d\x3e\x42\x07\x1e\x1e\x7a\x67\xda\x3b\x26\x7c\x7c\xdc\x9a\xfe\xf5\xdf\xd4\xf4\x9e\x32\x2a\x8a\x90\x89\x2c\x03\x6e\x45\x61\xe6\xde\x73\x47\xa5\x16\x40\x8a\xbb\xc7\x9a\xc9\x5b\x13\xa7\x86\x1a\x00\x81\xce\x27\xf8\x88\x74\xf9\x49\x21\x79\x1a\x00\x63\x15\x93\x5d\xf8\x6d\x68\x04\x17\x5c\xc9\x66\x04\xd2\x07\x83\x7b\x42\xe6\x1e\x8c\xe3\xf0\x18\xaa\xf0\xc8\xf9\xd6\xc4\xa6\xb1\x06\x8d\x97\x24\x50\x7f\xe8\x82\x58\x10\x55\x89\x88\x3c\x66\x69\xae\xdf\x68\x47\x28\xc7\x71\xc8\x16\xdd\x0a\x7a\xd5\xa3\xa3\x03\x53\x1d\xad\x9f\xb0\x64\x54\x9d\x07\x4d\x07\x34\x96\xdd\x7a\xa2\x5d\x63\x19\x37\x09\xfc\xe6\x4e\x6e\x74\xb0\x80\x1e\xa9\x05\xfe\xd1\xc4\x79\x83\x91\x52\x3b\x51\x69\x0b\xa8\x7e\x62\x0c\x8e\x08\x27\xbe\x40\x45\x8d\x86\x23\x96\x22\xf0\xa4\x98\x6b\x55\x5e\xcc\x16\x77\x9c\xa0\x30\xdb\xad\xc4\x91\x9a\xe4\xda\x16\x8a\xc2\x8e\x91\x6e\x21\x15\x9f\x52\xbd\x50\xf3\x97\x04\x2d\xd6\x4f\x0b\xe0\x03\xc8\xc7\x52\xa1\xdf\xda\xee\xba\xf2\xce\xb8\x52\x96\x77\xe8\x86\x8e\x44\xa6\xb1\x2b\xd9\x2c\x15\x15\x5b\x6f\x2d\x35\x72\x95\x80\xed\x5a\x27\x4a\x42\x3a\x51\x52\x42\x38\x68\x0b\x43\xc4\xe2\x36\xbc\x6d\x0f\xa5\x8e\x14\x28\x9c\x6f\xaf\xb1\xcd\x2c\x28\x94\x8c\x0b\x09\x8a\xdc\xb2\x72\x35\x88\x68\x3c\xcb\xb0\xf4\x7a\xde\x3a\xb9\x80\x08\x4c\xdb\x61\x5a\xc0\xa5\xda\x78\xa0\x93\x00\x0a\x96\xa8\x41\x85\xdb\xa2\x1f\xfc\x98\xa8\x69\x18\xcc\x35\xe5\x38\xff\xbc\x1a\xb2\x9b\xcb\x1d\x4a\xac\x98\xab\x99\x92\xbe\xfd\xcb\xe1\x07\xfd\xd7\xe3\x23\xe2\xe4\x53\x4a\x39\x11\x48\xdd\x62\x9c\x8f\xde\xd3\xf8\x74\x94\x7f\xd7\x43\x3f\xa9\xd5\xc0\x09\x0a\x52\xce\x49\x2c\xa3\x95\x1a\x24\xa7\xc1\x8f\x34\xc6\x7c\xe5\x34\x98\x30\x94\x26\x33\x8e\x43\xa2\x13\x77\x9e\x8e\x86\x47\x28\x89\x08\x16\xba\xde\x9b\x3c\xc9\x2e\xc4\x33\x2a\xe7\xe9\x1d\x84\x48\x04\x8a\xf2\xa9\x26\xfc\x38\x88\xe8\x3f\x84\xb6\xf4\xea\x76\x97\x9c\x66\x06\xd4\x74\xfe\x74\x34\x7c\x4f\xa1\x13\x8d\xdd\xd6\x4c\xfa\x8a\xfd\x1d\xe1\x0c\x3d\xcc\x61\xd5\xb7\x62\x6f\x37\x7a\x48\x38\xc8\xa2\xac\x59\x07\xf4\x9f\x53\x73\xf4\x8c\xe8\x2c\x26\x7a\x0b\xd4\x81\xfd\x25\x0e\x7c\x50\xa7\xf0\xac\xac\x38\x0e\x64\x4a\x22\x5d\xc3\xc7\x05\x5a\x60\x05\x14\x3d\xcf\x0f\x5d\x31\x5d\x12\x9c\xa2\x25\x53\x7f\xd7\xe3\x3e\xd2\xac\xd2\xb5\x1f\xd5\x8f\xed\x78\xd6\x6a\x39\x14\x0a\x16\x4a\xc6\xa2\xed\x66\x16\xa8\xcb\x73\x17\x18\xeb\x1a\xa3\x8d\xb2\x26\x81\x6d\x56\xc0\x7d\x81\x57\xf0\x05\x89\x91\x57\xeb\x32\x52\xef\x41\x5a\x00\x08\xbf\x75\xc9\x9c\xb3\x3f\xa5\x24\x12\x28\xea\xb8\x78\x12\x92\x4a\xb4\xfe\x77\xc3\xf0\xa8\xb3\x7e\x0a\x94\x80\xa8\xe9\x42\x1c\xa2\x77\x24\xf2\x89\xe9\xbe\x76\xa5\xd4\xc5\x67\xf5\xd0\xd4\xc3\x52\xc7\x7c\x0f\xac\x73\xb5\xcf\x6f\x01\xea\x57\x35\x97\xf4\xef\xc7\xc7\x5f\x11\xd5\xb5\x9a\x8c\x86\x45\xd7\x60\x32\x31\x6d\x24\xd4\x8e\xd4\xb1\xf6\xce\x3a\x7d\x63\x31\x1c\xe3\x88\x62\xd1\x43\x68\xac\x93\xdf\x2b\x00\x25\xb0\x76\x16\x34\x80\x8f\x11\xe3\xa1\x2e\xee\x60\x4d\x1f\x52\xd8\x0f\x34\xef\xe1\xb8\x2f\x88\x4f\x72\x8f\xf2\x7e\x97\x69\xb0\xd5\x6b\x15\xf2\x2e\x8d\x11\x89\xd5\x31\x86\x0b\x7b\xc6\xb0\x18\x88\x90\x30\x11\x32\x38\xa7\x6f\x8e\xd3\x18\x41\x27\xa1\xf3\x53\xdd\x55\xb6\x58\xa8\x95\xb3\x3f\x42\x6b\xe6\x4b\x08\x37\xcb\x58\xd8\xab\x58\x46\x93\x84\x67\x4e\xd5\x62\xdf\xe2\xf3\x0c\xab\x53\x3b\x54\x0f\x17\xd4\x8a\xd4\xc3\xd0\x79\x78\xe8\x5d\xc2\x4f\x7d\x7d\xec\x18\x49\x1c\x80\x3f\xb0\xe4\xab\x3c\xae\x11\x76\x67\x4f\x2b\x5b\xb5\x27\x23\x5d\xc7\x79\x98\xcf\xdd\xb1\xa5\xf1\x92\x7d\xac\x9b\x27\x3d\x84\xde\xb1\x7b\xb2\x24\xfc\x08\xca\x86\x18\xd7\x64\xad\xf9\x98\xa6\x51\xa4\x48\x0a\x09\x57\x87\x29\x5d\x29\x88\x2e\x12\x1c\x80\x68\x28\xd0\xaa\x5e\x65\x6e\xb5\x9b\x14\x6b\xda\x76\x98\x4b\xe5\x39\x92\x4f\x90\xf2\xa0\x57\x31\x17\x84\x7c\xc2\xd2\x25\xf9\x82\x88\x10\x78\xa5\xeb\x73\x87\xeb\x27\x61\x17\x03\xaf\x85\x71\x84\x92\x94\x3a\xf3\x88\x70\x14\xe4\x9f\x5b\xbb\x78\x92\x10\x00\xe4\xed\x46\x0f\xa1\x89\x12\x5c\xea\xe6\x78\x54\xa5\x00\x0a\xd8\x22\xe1\x24\x0e\xb9\xda\xfb\x0c\x8b\xb5\x70\x71\x68\xd5\x33\x34\x4c\xfd\xe4\xea\x21\xc0\xfe\x2b\xb2\x99\xb4\xba\x28\x4c\x4f\x17\x07\x9a\x46\x78\x66\x3d\x44\x43\x32\xa5\x31\x09\xd1\x82\x71\x35\x6d\xb0\x92\xef\x81\x57\x06\x9c\xda\xde\xae\xff\x86\xc8\xe7\xf5\x53\x90\x4a\xc2\x7b\xe8\x94\x48\x44\xe3\x50\x09\x71\x50\xda\xe5\x42\x3c\x5c\x3f\x4d\x69\x4c\x55\x07\x04\x25\x6a\x85\x2a\x8e\xd4\x13\x2b\x74\xd9\x21\x12\xa2\xbb\x95\x23\xc2\x4c\x0e\xff\x2d\x15\xd2\x6c\x91\xa4\x26\x10\x4b\xcc\x99\xbe\x6b\x89\x39\x7e\x8d\xc0\x7e\x69\x73\xb5\x5b\xa9\x09\x67\x3f\xb0\x58\xfa\x18\x80\xa3\x20\x55\x43\x4f\xa4\x73\xa7\x02\x47\x5d\x02\x15\x7d\xf1\x6b\x35\x5e\xd6\x22\xaf\x00\x52\xed\x86\x61\x86\xb0\x8e\x4c\x70\x10\x56\x10\xd4\x39\x7a\xa3\xe3\x47\x7a\xd1\xab\x9d\x58\xe2\x8f\x04\x61\x74\x3f\xa7\x11\x41\x35\x47\x79\x20\x16\x2e\x44\x0a\xaa\xae\xc2\x4e\x44\x36\x9b\x0c\x0a\xb5\x45\xff\x11\x05\x44\x4a\x82\x58\xb2\x7e\xe2\xce\x56\x6c\xe7\x68\x98\x22\x49\x16\x89\xf0\x9f\xd4\x4d\x39\xfc\xf0\x08\x85\xe9\x02\x0a\x20\x72\x12\xc0\xe1\x8a\xcd\x4c\xe4\x5c\x92\xc0\x99\x2e\x49\x8c\x2e\x0d\x04\xd7\x4c\x3d\xbb\xe0\x33\xf3\xec\xd8\x5c\x7a\x1f\x1e\x7a\x10\xff\x66\x1e\x63\xd0\xbf\x5c\x1b\x13\xe0\xe3\x63\xaf\xd7\xf3\xc7\x1d\x6a\x52\xd6\x4f\xea\x10\x16\xe2\x19\xc4\x52\xa0\xdf\x58\xca\x63\x9c\x7e\x46\x7c\xfd\x14\x40\xe1\x46\xcd\x8f\xc2\xf1\xa3\x40\x9e\x96\x37\x1d\xc6\x67\x38\xb6\x05\xed\x4b\xb4\x46\xf6\xb2\x5c\x22\x97\xc4\x48\x2d\x4a\xa4\x2e\xd0\x15\x74\x37\x71\x50\x62\x0a\x32\xf6\xdb\xb1\x0e\xfd\xd1\x4c\x6f\xcb\xbe\x90\xf0\x98\xae\xff\xce\x41\x2b\x3d\x8b\x8d\xa2\x31\x63\xea\xef\x8e\x97\x09\x25\xfa\x14\xab\x4b\x8c\xa2\x80\x85\xb0\xda\xf5\x75\x3c\x23\x52\x32\x84\x63\x28\xd5\x9d\x6f\x66\xee\xfb\x97\xa6\x4e\xa9\xc4\xfa\x54\x8c\xa5\xfb\xda\x5b\x28\x5e\xa1\x47\x91\xc1\x6a\x28\x08\x3b\x25\x65\x09\xdc\x39\xb4\x06\x25\x55\xb2\xd2\x7d\x65\xc5\x3a\x41\x2f\x89\x44\x9c\x84\xeb\xa7\x05\xe6\xea\xfe\x06\xcb\xb4\x40\x83\x8f\x03\x50\x6d\xcc\x20\x87\x18\x1a\x33\x8b\xae\xe0\x51\x3f\x49\x1e\x1f\xc1\xbd\x5d\x67\x5f\x32\x2f\x27\xf0\x97\x7e\xb9\xdf\x24\xab\xe5\x8d\xde\xea\x2c\x67\x08\xec\xb9\x1b\xd3\xc7\x25\xd4\x4c\x20\xf7\x8b\x00\xf4\x75\x25\x9a\x9f\x69\xa2\xf9\x98\xac\xce\x4e\x50\xa1\x96\xea\x4d\xd6\xaa\xa5\xca\x76\x83\x9b\x78\xc0\x39\xe3\x27\xa8\xc1\xca\x5b\x54\x44\x46\xda\x4c\x51\x0f\x55\xed\x3b\x0e\xdc\x06\x42\x03\x96\xac\x8a\xdb\xdd\x09\xb2\x86\x61\xd6\x96\xae\x40\x8d\x21\x50\xe6\xdf\xe8\x50\x09\x6e\x03\x5d\x21\xd1\xd9\xb4\x4c\xc9\x39\xad\xa5\x40\xf7\x8c\x83\x62\x29\x0b\x3d\xfd\xff\xb5\xa2\x2f\x5c\x3f\x19\x68\x40\xa4\xb5\xfa\x18\x02\x25\x87\x02\x86\xd9\xa5\xa1\x89\xb4\xa9\x1a\x5b\x75\x55\x06\xe3\x27\xd2\x31\xcd\x1e\x3a\xce\xe0\x25\x29\xd8\x2d\x69\x2c\x39\x4b\x97\xea\xd2\xd5\x0e\x55\x92\x80\x9b\x58\x08\xc7\xbd\x4c\x86\x76\x90\x36\xcc\xd3\x29\x11\xbe\x52\xef\x7d\x67\x79\x6c\x34\xce\xa8\xc8\x4e\xd2\x16\x5a\x3b\xba\x20\x0a\x98\x00\xdc\xeb\x58\xa4\x49\x02\xe1\xbc\x23\x78\x0a\xa7\xef\xc9\x9c\x40\xad\xc6\xd8\x7c\x2a\x10\xe6\xe4\xc4\xbb\xd9\x14\xc7\x0c\xa8\x33\x56\x39\xd7\xbf\x93\xaf\x9f\x66\x94\xc1\x26\xe3\xc7\x3c\xf2\x37\x0a\x58\x1c\xa7\x42\xdd\xf1\x24\x3a\xf1\xef\x17\x85\x9e\x82\x92\x19\x4c\x09\x70\xeb\xce\x97\xdd\x65\x84\xcd\xc9\xdb\x77\xb1\xb1\x1a\x6a\x85\x4e\xeb\xda\xe1\x46\x53\x05\x02\x5e\x6c\x3b\x39\xac\x6a\x7b\xbb\x43\x70\x15\x88\x4d\xdb\xa6\x64\x99\x1c\x73\xe7\x8e\x07\xd7\x95\x0f\x8c\x3b\xd3\xf4\xb9\x00\x5b\x4b\xb6\xba\x37\x14\x40\xb7\xa2\xb7\x20\xac\xb3\x7d\x09\xc7\xf4\x8b\x2b\xdf\xfd\x9e\x33\x15\x00\xca\x6b\xa1\x6a\xc3\x68\x26\x4f\x10\x4e\x71\x44\xbf\x10\xd7\x8e\xdc\xce\xc4\xb4\x7e\x82\xa6\xa2\xc2\x0e\xdd\x1e\xab\xf6\xdc\x6a\x6b\x95\x2d\xa1\x5c\x50\x41\xc0\x83\x58\x1d\xe2\x1a\x37\x38\x73\x4a\x60\x7c\xd6\x03\xb1\xde\xbf\x1c\xb6\xdf\xc7\x60\xa7\xe6\x25\x2e\x97\xe0\xf8\xf1\xc7\x1d\x69\xdd\x5f\xd5\x1d\x44\x3b\x94\xaa\x53\x71\x9a\x44\x0c\xb7\x73\xd2\xc8\xfd\xbc\xed\x8e\xa5\x40\x31\x8e\x33\x4b\x56\x44\x90\x5c\x3f\x45\xeb\xa7\x60\xae\xba\xba\x20\xb1\x6c\xa0\x89\x25\x24\x76\x4c\xba\x35\xb7\x46\x97\x96\x0e\x4b\x97\x9c\x16\x36\x4f\x8f\xf9\xb6\x01\xfd\x3d\xa7\x92\x64\x99\x1a\xda\x60\x5e\x3f\x05\x5c\xf5\xd7\xe1\xc2\x17\xea\x33\x4d\x59\x7f\xe3\xc9\xe9\xa5\x36\xd2\xf8\xce\x73\x96\xb3\x44\x7f\xa6\x1a\x34\x80\xcc\x78\xd6\x04\x72\x1b\xb6\x58\xe0\x26\xe5\x08\x05\xcb\x9b\x3a\xbe\xaa\x99\x12\x61\xa9\x00\x8a\xc6\x4e\x98\xe6\x46\x2c\xa8\x4e\x15\x04\x43\x66\x6d\x74\xd4\x85\x28\x8d\xa4\x5a\x5a\x24\xe5\x3e\x11\x5e\xa2\x0d\xae\x11\x46\xff\x92\x0a\xad\xe7\xc0\x51\x04\x95\xde\xd1\x4b\x70\x6d\x85\x7c\x45\xde\xeb\xc5\x06\xb5\x89\x92\x66\xb1\x55\xba\x68\xe2\xd6\x4f\x70\x0a\x91\xba\x66\x9e\x5a\xf1\x6e\x57\x2c\x22\x2a\x24\xd7\x5a\x1b\x41\x52\x6d\x0e\xf1\xdd\x28\x6c\x2f\x62\x72\x0f\x26\xcb\x46\xea\x9a\xcd\x92\x16\xa4\xb6\xe5\x6b\x53\xbb\x2d\x74\xd7\x7a\xe2\x6d\x58\xe8\xed\xa6\xd3\x76\x3e\x1a\xec\xfa\xf3\xac\x06\x76\x8d\xed\xb7\x3c\xe5\xcb\xb8\x37\x2e\x69\x0d\x04\xd8\x34\x15\xa8\x2e\xed\x70\xde\x5f\xf8\xca\xca\x74\x68\xe9\xf5\x42\x2a\x47\x0d\xe0\x14\xdc\xf2\x3f\x12\xaf\x06\x20\xc3\xf2\x1b\x91\x60\x64\x53\x4d\x0a\x41\x35\x8d\x06\xf6\x32\x52\x1d\x55\xd9\x88\x50\x1d\xc6\xa5\x91\x87\x59\x6d\xa8\x76\x18\x9a\xfc\x07\xf2\x01\x6b\xef\x26\x90\xe1\xa8\xf1\x2e\xcb\x89\xd7\x57\xca\x06\x50\x29\x8f\xcc\x8c\x81\xe8\x7e\x7d\x2e\xd9\x4a\x3e\xd9\x19\x17\x76\xae\xc7\x23\x2b\xa4\xac\x3f\xda\x7e\xd2\x29\x46\xef\x26\x93\x2d\x65\xbd\x6a\xd1\x1e\xea\x49\x16\xad\x6f\x5d\xb1\xf5\xb6\x6e\x32\x02\xea\xbc\x5d\x26\x15\x70\x8b\xcc\xbf\x99\x03\xf7\xe6\x5e\xb5\x0d\xa6\x97\x26\xed\xe0\xe5\xc5\x78\x02\x51\xac\x8e\x63\xd1\x77\xb5\xc1\x25\x05\x98\x8b\x95\xa9\xd1\xdb\x36\xbb\x64\x21\xa1\xe1\xb6\x80\x37\xb2\x04\x17\x00\xc3\xa3\xde\x21\xc1\x97\x32\x42\x96\xc0\x1f\x4f\x19\xdb\x1e\x85\x3f\xd9\xe3\xbe\xb9\x1e\xb3\xb9\xa7\x48\xb7\x97\x5c\xc7\x5f\x4a\xef\xc0\x59\x8d\xb3\x24\x15\x73\x12\x22\x91\x42\x7a\x40\x30\x82\x35\xae\xf7\xec\xea\xac\xcd\x41\xb9\x01\xbb\xc2\x2b\xca\xdc\x06\x3b\x24\x5e\x32\x0a\x9b\x72\x66\x35\x82\xf2\xf8\x18\xe1\x3b\x96\x4a\xda\xd4\x1b\xc6\x67\xcd\x0b\xd3\xdd\xe4\x1b\x00\xee\x94\x9b\xae\x61\xe3\x20\x12\xcd\xd6\x4f\xdc\x78\x27\x16\xd2\xec\x10\x1d\x97\x98\xe3\x70\x6d\x28\x05\x6d\xb2\xf9\x92\xe3\xc4\xe2\x6c\xd9\x91\x56\x39\x22\x5b\xf7\x00\x14\xb8\x8b\x44\x9a\xa0\xd0\x40\xda\x34\x2d\xc6\x3d\xbb\xe0\x3c\x6c\x73\xab\x08\x84\x53\x94\x60\x0a\x47\xa9\x06\xca\x3f\x92\xd5\x96\x8e\x70\xf9\x38\x07\x91\x3a\xe0\x6d\xef\xfd\xa6\x30\x03\x7b\xca\xab\x83\xb3\x45\xa6\x77\xcb\x53\x0a\x4e\xe1\xab\x1a\x72\xcc\x0c\xef\xd4\xac\x09\xab\xdf\x2d\x29\x69\x72\xa3\x3d\x29\x69\x76\x9b\x48\x3f\xac\x35\xa4\xb9\x73\x65\xfa\xbe\x86\x69\xa3\x81\x07\xf9\xbd\xf3\xe1\xa1\xf7\xa3\xfd\xe3\xbc\x7d\x9f\xd2\x6a\x97\xe1\x6a\x68\xf5\xb4\x98\x6b\xcd\xc3\x43\x4f\xab\x3f\x4d\xef\xd4\xcc\xde\x18\x96\x9d\xf8\x9f\x66\x17\x9d\x32\x0e\x63\x77\xf2\x33\x7f\x0f\x16\x1f\x86\x76\xf2\x5c\xe4\xe9\xfc\x1f\x0f\x0f\xbd\xbf\xa8\x1f\xfb\xb1\xb7\x12\xd6\x1e\xb4\x6d\xdc\xa8\xb2\x71\xf3\x6a\x8c\x8a\xb2\xc4\x77\xb3\x72\xe1\x34\x90\x00\xed\x1f\x1e\x7a\xef\xcc\x49\xa6\xfd\x78\x61\x5f\xe3\x96\x18\xaf\xc7\x23\xdf\xf4\x3f\xb0\x54\xc2\x65\xa4\x8d\xeb\xe1\x59\x84\x51\xf1\xfe\xaa\x5a\xdb\x27\xb7\xf0\x24\xeb\x61\x9a\x01\x6d\x33\x2b\xab\xee\xb9\x95\xc0\x4b\xa4\x3b\x58\x9a\xe8\x2e\xdf\x8a\x0d\x9d\xa7\x7a\x1f\x54\x3c\x68\xbd\x86\x5a\xdc\x97\xcb\x84\x6e\xa0\x69\x47\xae\xc9\x52\xf4\xf0\xd0\xdb\x6f\xd5\x57\x5d\xb8\x1d\xa8\x7b\x4d\x08\x0f\xa5\x85\x9d\xba\x62\x3d\x3c\x5b\x67\xea\xd4\xfc\x55\x8b\xe2\x30\xfd\xcf\x8e\x65\x15\x46\x92\x2d\x85\xc3\xf6\x53\x92\x78\x02\x12\x37\x68\x39\xdc\x09\x66\xc7\x09\xad\xce\xc1\x39\x55\x7f\x26\x2b\xe7\x04\x51\xc3\xca\xa1\x79\xb4\x3f\x9f\xb0\x3e\x4e\x57\x32\x29\x27\xc7\x08\xd7\x7a\x9e\x96\x88\xda\x93\x41\x73\xcc\x49\xe8\x3b\x60\xed\x79\x96\x4a\x30\x97\x78\xa6\x45\x6a\x01\xee\x3e\x13\x1f\x26\x49\xe5\x71\xe2\x90\xc7\x41\x8d\x20\x74\x26\xa5\x8b\xe9\x39\x0f\x85\x95\xab\xa0\x6a\x31\xef\xb3\x6a\xab\xd7\x5a\xe3\x32\xdd\x6f\xae\x41\x0d\xb3\xc3\x38\x9b\xb5\xec\x75\x03\x41\x3a\x2c\xca\xe6\x5f\xf6\x4a\xaf\xaf\x20\x49\xd3\x0c\xfb\x94\xa5\x3c\xd6\x3a\x9c\x42\xd8\xd5\xef\x48\xa8\x02\xdb\x32\xaf\xa8\x2d\x67\x5e\xa9\x4b\x65\x18\x3e\xcc\x36\xfd\x09\xba\x27\x90\x40\xf9\x37\xe3\xc8\x68\xc2\x86\x24\x5f\x21\x3c\xc3\x35\xfe\xe0\x44\xd4\x64\xf1\x62\xb1\x44\xeb\x27\x75\xf8\x53\x90\xa5\xfa\xa8\x87\xc6\xea\x1f\x81\x57\xe4\x4b\x33\x59\x47\xf9\x34\xa2\x31\x84\xcb\x80\x83\xad\x49\x4e\x74\x04\x8e\x0f\x04\x91\xcf\x09\x13\x24\x8b\xa4\x68\x99\xf2\x75\x33\xdd\xab\xd7\x35\xc8\xd3\xbf\x23\x33\xab\xb4\x4a\x44\x87\x12\xb1\x34\x53\xee\x1b\x53\xed\x91\xf6\xb9\x56\x24\x72\x33\xb9\x70\x4e\x49\xd8\x31\x04\xc6\x3a\xa2\xa9\x48\x7c\xe6\xf9\x5b\xd0\xc7\x45\x54\x91\xe3\x61\x9e\x51\x04\x5d\xd6\x47\x25\xbe\x77\x43\x11\x1b\xfc\xa9\x0c\x44\x1b\x81\x88\x42\xaa\x3d\x0b\x16\x58\x06\x73\xbf\x3b\xcd\xa2\x0a\x05\x82\x00\x01\xce\x89\x48\x18\xa8\xf7\xbc\x48\x85\x64\x0b\x37\xee\x7a\xa5\x5d\x7a\x5e\x92\xde\xac\x87\x16\xab\xbc\xe2\xc2\x77\x6a\x4e\xbc\xa5\x12\x5d\x8f\x47\xe6\x75\xa7\x29\x66\xeb\x37\xbc\xc4\x39\x84\xde\x8c\xca\x4e\x01\x0c\xb8\x10\x61\x74\xc7\x71\x1c\xcc\xd5\x0b\x89\x67\xbb\xc3\xfe\x87\xe5\x1f\x7a\x7f\xe8\xbd\xea\xc0\xb4\xeb\xd8\x3f\x24\x9e\x7d\xa7\x83\xf6\x04\x81\x8e\xca\x2e\x75\xdc\x12\x04\x62\x71\xb4\x3a\xca\xa2\xa6\x3b\xc6\x8d\xad\xa3\xc8\xe9\xc4\x69\x14\xf9\xf2\x24\x5d\x56\xa9\x87\x12\xc2\x05\x8b\x63\x9c\xdb\x97\x63\xb6\x40\x2f\xd5\x0f\xf2\x99\x40\x3e\xe8\x05\x8b\xbb\x0a\x73\xd7\x6d\xf8\x1d\x04\x21\xeb\x12\xbb\xc0\x1a\xc5\xa2\x42\xb3\x1d\x99\xbd\x09\x15\xe2\xb3\x35\xcb\x61\x1d\xad\x9f\x24\xfd\x94\x82\x45\x76\x5f\x84\xd9\x08\x98\x13\x86\x03\xda\x8e\xc7\x77\x26\x6a\x30\x36\xa2\x94\x70\x10\xe3\x3a\x6b\xa1\x1a\x8e\x32\x47\x69\x2c\xd7\x4f\x33\x9d\xf7\x50\xe4\xc9\xfe\x9c\x71\x4a\xcd\x38\xf9\xe4\x9c\x9e\xe3\x73\x82\x43\xc2\x85\x0e\x02\x0a\xa2\x14\xd2\x35\xea\xd2\x01\xba\xf8\xf0\x51\x21\xee\xc3\x24\x20\x27\x21\x5a\xa4\x91\xa4\x8a\x21\x92\x2e\xbc\xf5\xa5\x07\x71\x57\xae\xff\x5d\xaa\x5e\xb8\x33\x00\xfc\x87\x00\x1d\x27\x99\x50\x0a\x89\xb6\x6d\xfc\x11\xce\xca\x55\x51\x21\xb6\x9f\x6a\x0a\x15\x02\x43\xaa\x7b\x78\x36\xbc\xfa\xb3\x4f\xa8\x0e\xaf\xfe\x72\xed\x49\x28\x74\x76\x71\xfa\xe7\xc1\xf8\x76\xf8\xbe\xff\xd6\x97\xc6\x13\xde\xdd\xea\x0f\x7d\x40\x6a\xca\xde\xd4\xd6\xb4\xd1\x2f\xaf\xea\x9b\x5e\xd5\xb6\xf5\xc5\xba\xd8\xc6\xe8\xc4\xd3\x1c\x8b\xf9\x1d\xc3\x3c\x3c\xc9\x34\x43\x1e\x48\x13\xb5\x7b\xe0\x54\xcd\x4a\x08\x4b\x72\x1a\x54\x43\x86\x70\x21\xe3\x04\xc2\x89\x71\xe0\x86\xe3\xb8\x8f\x56\x1d\x01\xc4\x75\xa6\x84\x14\x22\x68\xcd\xf1\x1d\x4a\x2d\x68\x10\xbe\x91\x77\xd1\xe9\xb3\xd2\x21\x91\x66\x37\x08\x1f\x76\x48\x23\xd4\xec\x03\x75\x95\x65\xf3\x69\xe1\x06\x95\x41\x6d\x72\x83\x72\xa1\x6e\xe1\x09\x95\xc1\xaf\x75\x54\x2e\x00\x37\x37\xc2\x06\x78\x75\x0c\x2f\x80\xd3\x1f\xd6\x03\xdb\x92\x9d\x0d\xd0\x5a\xbb\xb7\x14\xe8\xdc\xd9\xc3\x65\x03\x6f\xad\x87\x4b\x01\x67\x7b\x27\x97\x0d\x24\x0d\xb6\xc1\x22\xd7\x5a\x1b\x04\x37\xd0\x7c\x24\x3e\xeb\x77\x11\x43\x49\x63\xd2\x04\xdd\xd5\x64\x6c\x31\x27\x33\x2d\x45\x13\xfc\x1a\x2f\x9d\x02\xdc\x56\x0b\xde\x55\x63\x40\x84\xa4\xce\xb4\xa4\x13\x22\x61\x21\xe8\x4c\x6f\xad\xee\x77\x3a\xc4\x26\x8a\xf4\x43\xdf\x46\x5a\xe4\xa1\x09\x8f\xb4\x93\xae\xa4\xd6\x20\x12\xe1\x38\x4e\xb5\xeb\x2c\x9e\x4e\x49\x20\x7d\x1a\x10\xd8\x7b\x25\x4b\xb5\x95\x95\x18\x12\xea\x3b\x59\xe3\xc3\x57\xe0\x58\xa3\x1b\x9f\x85\x08\x2e\x8c\xc9\x1c\xc7\x24\xd4\xab\x56\xa0\x97\xb4\x47\x7a\x48\xce\x99\x20\x26\x7a\x8a\x13\x73\xea\x4f\x12\x12\xea\xf8\x2b\x75\x2d\xf1\xf9\x3a\xe6\x94\x38\x8e\x8c\x06\xb8\x42\x46\xd4\x75\x4e\x14\x4f\x76\x01\x89\xd4\x57\x9f\x52\xaa\xee\x09\xe0\xf9\x9f\x60\x01\x28\xe1\x02\x06\x59\x93\xdb\x04\x51\xd9\x8e\xb5\x70\x8d\xaa\xda\x02\xfc\xde\x51\x55\x80\x37\x7d\x96\x74\x16\x3a\xe3\x44\xd3\xde\x2f\xca\xa9\x88\x8e\x10\xda\xdc\xc4\xda\x21\x72\xbd\xa2\x1a\x4b\xac\x17\x00\xec\x56\x5e\xb7\x25\xc0\xad\x2b\xe6\xee\x0c\xb7\x45\x11\xdc\xd6\xb0\x9f\xaf\xae\x6d\x3e\x93\xfc\xfe\xaa\xc5\xb9\xd9\xe8\x96\x9a\x83\xf4\x3b\x1c\x15\x41\x36\xfb\x1c\x19\x98\x81\xda\x92\xa2\xc8\x9b\x59\x11\xc0\x12\x21\xb4\xb0\x8d\xd3\x68\xfd\x54\x2f\xaa\xb5\xf4\x53\xf7\x6c\x1a\x3b\x77\x1a\x3f\xe1\x75\xd0\x44\x5b\x57\x5c\xdb\xfb\xed\x9c\x71\x01\xc9\xd7\xf3\x5f\x71\x79\xf9\x3b\xf2\x60\xc9\xb8\xb0\x9b\x07\x4b\xa1\x57\xfb\xfb\xb0\x64\xd4\xec\x6d\x62\x29\x11\xe6\x73\x58\xd9\x83\x61\xdf\xc0\x4a\x56\x9e\x43\xc6\x4e\xf6\x4d\x8d\x63\x19\x3f\xf6\x30\x26\x6d\xac\x8d\x43\xda\x8a\x32\x02\xf7\xf4\xd0\x29\xcd\xa8\x03\xf9\xe8\x64\xd4\x65\x9e\x23\x63\xf5\xe3\xf1\xb1\x26\x91\xc4\x96\x90\xb6\x99\x4f\x55\x6d\x5b\x62\x03\x35\xc5\x4e\xb8\xb2\x96\xf5\x98\x0e\xe7\xd6\x52\x1a\xca\xe7\x72\x6c\x71\x28\x6f\xe3\xd8\xd2\x8e\xd8\x7d\xfd\x5a\x5a\x92\xba\x87\x53\x4b\x89\xe0\x83\xbb\xb5\x6c\xd0\xfa\xd5\x6c\x90\xa5\x9e\xfd\x6e\x3c\x38\x72\x8e\xf8\xed\xfd\x7b\x0a\x3a\x9f\x71\x7f\x9f\xe1\xb3\xf0\xb4\x59\xb3\x18\x4e\x9c\x3f\xd7\x3e\x41\x7b\xed\x93\x0e\xed\x45\x5c\x9e\x81\x72\x11\xef\x37\x20\x55\xd6\xdf\x3d\xfb\x52\x63\x13\xde\x95\xd8\xac\x04\xf0\x89\x33\x97\x9d\xc7\x5e\xd9\xe4\x7c\x83\xfc\x6d\x3d\x58\x25\xa6\xd1\x76\xe9\x37\xcf\x68\x08\x59\xd2\x16\x04\xc7\xff\xec\x69\xf9\x81\xa5\x11\x25\x5f\xba\x3a\xc9\x17\xe5\x04\xfd\xb3\x0f\x18\x64\x8b\x86\x5a\x12\x42\x58\xc7\x7f\xf7\xce\x92\x85\xb4\xfb\xd5\xda\x22\xab\xc9\x65\x6b\x40\x65\x31\x00\x85\x49\x95\x9b\x58\x7c\x17\xa8\x22\x35\x50\xaa\xc7\xca\x17\xe7\x40\x99\x25\xeb\x65\xda\x6a\x6e\xe3\x54\xb7\xa1\x50\x57\xa9\xca\x80\x43\x7e\x64\x6f\x1e\xdf\x42\x2f\x58\xea\x8d\x5f\xdd\xa2\x57\x19\x8b\xdd\x4e\x6d\xdf\x81\x32\xc9\x39\x8b\xeb\x69\x49\x04\x49\x43\xd6\x95\x12\xa2\x7c\x59\xb0\xc5\x08\x67\x9f\x3b\x40\xea\x91\x09\x31\xcf\x22\x68\xdd\x9b\x7e\x33\x3a\xd5\x72\x33\x8d\x53\x3d\x36\x88\xb7\xc9\x23\xe0\x39\x5b\x98\xcc\x93\x10\xd6\x0c\x17\x13\x89\x67\x34\xf6\xdd\xc6\x0b\xdd\xf5\x24\x31\x07\x9a\x3e\xa5\x1d\x1a\x69\x6d\x1e\xd5\xda\xbc\x3c\xc8\xd9\x44\xfb\x42\x23\x2a\xd3\x76\x54\xa7\x42\xa7\x83\x42\x53\x82\x65\x0a\x89\x21\xb5\x82\x52\x09\x50\x61\x4a\xb5\xe7\x93\x28\x0e\xc1\x70\x9a\x0a\xdd\xda\x34\x6a\x35\x88\x6e\x30\xa6\x76\x6d\x9f\xb2\xb8\xd0\x35\x02\xb3\xdb\x11\xb3\x02\xc5\x9d\x15\xc2\xd4\xf8\x4b\x20\x33\x0d\x89\x54\x1c\x48\x52\x2a\x84\x7d\x13\x65\x66\xe6\xba\x2e\x9b\x70\x28\xd5\x19\x36\xd5\xf3\x18\x12\x09\xe2\xb8\xe2\x0a\xb9\x71\xb8\x68\xbf\x91\x67\x1d\x77\x3c\x8a\x0c\xed\x90\xc4\x70\x03\xaf\xcd\xbc\xe0\xc5\xbd\xc3\x6e\x5f\xee\xb1\x1a\xbe\x28\x32\x35\x11\xd8\xd4\x8f\x6b\xea\x88\x37\xa7\xd3\x4d\x1a\x89\x9a\x4e\xaf\xff\x96\xeb\xe4\x4d\x4d\x86\x9a\x43\x1c\x30\xc3\x1b\xae\x5f\xc1\x89\x26\xdd\xc6\x5e\x9c\x50\xd3\x7c\x8f\x1b\xf6\x61\xb9\x72\xe0\x0b\x7a\x05\x63\x2a\x26\x67\x13\x87\x9e\x87\x3b\xb8\x72\xa1\x7c\x33\x0e\xa9\x5d\xc1\x64\x5c\xd2\x7e\x47\x85\xac\x52\xed\x7b\x98\x66\x50\xb2\x7d\x66\x13\xd4\x96\xb4\xe8\x33\x76\xa7\x78\xa1\xd9\x8f\xa6\xec\xe4\x5e\x05\xd5\x4b\x5e\x14\xb1\x7b\x74\x75\xf5\xce\x3d\xda\x65\xe6\x41\x0f\x31\x3f\x46\xec\x53\xea\x1e\x32\x54\xfb\x02\x0d\x5e\x7c\x3e\x87\x01\x7f\x03\x53\x31\x42\xbb\x9e\x7d\xff\x4f\xff\xfd\xfd\x11\x54\xcf\x57\xff\xbc\xf5\x59\xde\x46\x59\xc9\x07\x53\x09\xa2\x60\x63\xdb\x00\xe2\xc3\x9d\x44\x78\x65\xcb\x23\x40\x50\xb1\xc4\x32\xcd\xb2\x5a\xfa\xf2\x98\x39\xa9\x55\x05\x8e\xe5\xfa\x49\xc7\xdc\xea\xd6\x72\x43\x9f\xed\xc1\xce\x4c\xca\xbb\x88\x71\xfa\x45\x9d\x3c\x65\x92\xfa\x52\xa7\x9d\x13\x6d\x24\xd4\x69\xa2\x21\x39\x21\x97\xd4\xba\x1c\x46\x7e\xe3\xa7\x46\x42\x3e\x93\x20\xd5\x9e\x0d\x64\xc1\x64\x96\xbf\xb8\x1e\x5b\x96\x43\xb7\x98\x16\x3b\x34\xc9\x1f\x6b\x31\x2e\x70\x62\xfd\x28\x20\x8d\xa3\xc9\x59\x62\x82\xb5\x17\x6c\x49\xac\x9d\x14\xce\x65\x09\x27\x4b\x0a\xd9\x91\x53\x31\xd7\x55\x88\x1a\xd2\x9c\x58\x8e\xe0\x24\xd1\xca\x14\x8d\x6b\xfd\xb7\xcd\xfc\x26\x08\x92\x54\x4a\xca\x4d\x6e\x29\x83\x38\x24\x22\xeb\x94\x46\x8c\x12\xbe\x7e\x0a\xd6\x4f\x21\x89\xf5\x07\x6d\x73\xa5\x98\x4e\x43\x22\x4e\x1b\xbb\x8c\xa7\x8a\x73\x0a\xac\xff\x84\x69\x3a\x61\xf3\x67\x6e\xc6\xe6\xe3\x84\xab\xd5\xe7\x8d\xce\xf7\x91\x13\x7c\x24\xbc\x4b\x17\x10\x75\xce\xb2\x4c\x3e\x7a\x85\xa9\x33\xe4\x71\xe8\x7c\xd2\x55\xf2\xd6\xb7\xd0\x86\x00\x44\x7f\x0e\x57\x0d\xeb\x38\x58\x58\x70\xce\xf1\xf0\x38\x66\x0b\x03\x57\xb7\xf2\xad\x3e\x16\xa4\x0b\x12\x1b\xa7\x81\x94\x47\x8d\xee\x60\x7d\xc7\x97\xd2\x64\xa3\x2e\xc0\x68\x74\x0f\xd3\x56\x14\xcd\x05\xc7\xae\xe9\xeb\xba\x4d\x97\x58\xe8\x69\xa1\x5d\x0d\x1a\x6f\x2a\x68\x03\x55\x78\xdd\xe3\x4c\x99\x05\x84\xa5\x24\x8b\x44\xa2\x29\xa6\x11\x09\x6d\x12\x4d\xc6\x1f\x1f\x6f\xe2\x9b\xf8\x5a\xe7\xc9\x07\x87\x4a\x48\x94\x7c\x94\x65\x5c\x17\x30\x19\x21\x8d\xa4\x76\x04\x57\x2b\x4c\x49\xfc\x19\x5d\x12\x60\xb5\x6f\x0f\x1a\x04\x73\x12\x18\xde\x4a\xcd\xd7\xa5\xce\x7f\x58\x4a\x3e\x86\xca\xe4\x14\x13\x9a\x25\x9c\xc1\x32\xd2\x25\xaa\x8a\x59\xef\xff\xe8\x66\x38\x8f\x3b\x44\xe8\xbb\x42\x5e\xb7\x4d\xb5\x49\x30\x97\x94\x1b\x49\xea\x0e\xbb\x76\x53\xf7\xed\x76\x86\x75\x59\x5a\x6a\x93\x44\xb4\x23\x74\xed\x1b\x91\x2e\x50\xc8\x88\xc8\x3d\xbb\x21\x71\x84\x12\xab\x38\xc4\x5e\xf7\xb1\x91\x62\xb3\xc4\x91\xb9\xfc\x49\xbe\xfe\x8f\x88\xd4\x27\xd2\x76\x19\xb6\x7e\xda\x74\x08\x47\x38\xfd\x8c\x16\xeb\x27\x89\xf3\xc0\x82\x14\xf1\xf5\xd3\x74\xfd\xc4\x49\x2c\x29\x89\x3c\x5d\x4c\x17\x49\x21\x77\xb5\xe2\x2d\xc1\x21\x48\x4c\x9d\x98\xd9\xa7\x09\xa2\xa1\x91\x7f\x9b\xc9\xa6\x59\x8a\x22\x4a\x52\x14\x76\x9c\x52\x4c\x15\x69\x95\xab\x69\x1a\x9c\x7f\x18\x8e\x2f\xce\xdf\x0f\xce\x27\xe8\x43\x7f\x3c\xec\xff\x38\x1a\xa0\xb7\xe3\x8b\xeb\x4b\x9f\x7f\x29\xbc\x1c\x40\x85\x50\xdb\xe0\x0a\x9d\x75\x0c\xa0\xf3\x81\x02\xb5\x35\x2e\xdf\x82\x6b\x83\xcc\xb7\x18\xab\xd0\x79\x11\xed\x03\x7d\xbb\xc4\xf1\xd6\xd1\xc5\xb7\x8c\xff\x6d\xa0\x5f\x57\x37\x5e\x24\x52\xa7\x91\x47\x8c\xa3\x29\x8b\x42\xaf\xa7\x95\x07\x80\x16\x3d\xe0\x1c\x94\x70\xf6\x79\x65\xab\x2b\xf5\x2f\x87\xd6\x9f\xdb\xa7\x82\xeb\x5b\xcd\x03\x86\x14\x8f\xea\x00\x03\x20\x0c\x34\x1b\x0a\x62\xbc\xb4\x05\x0a\x3b\xfd\xcb\x61\x2d\x19\xbb\x2b\x2c\xfb\x07\x52\x56\x16\x09\x39\x90\xae\x72\x83\xb8\xaf\xa8\xa7\xac\xea\xd0\x36\x6a\x4a\x0f\xed\xdb\xaa\x28\x0d\x19\x8c\x43\x69\xd5\x3b\x48\x78\x13\x31\xdf\x5c\xb5\x48\x59\x0a\x45\x2a\xf0\xe6\x44\xab\x3d\x29\x1b\x64\xdb\x69\x28\xfb\x3b\x68\x27\x0d\xa2\xa2\x72\xd2\x39\xa4\x35\xeb\x25\xfb\xed\x75\x92\xa0\x90\xdc\x41\x19\xe9\x10\xf9\x9c\xba\xc8\xfe\x7e\x7a\x48\xab\x85\xcc\x35\x90\x99\xfa\xb1\x49\xf5\x08\x1d\xfc\x5a\x9a\xc7\xfe\x36\xca\x94\x67\xd0\x3a\x96\x3b\xbb\xaf\xd2\x71\xc7\xfe\x3e\xb3\xc2\xf1\x39\x99\xb0\xa7\xbe\xf1\x70\x0c\x39\xac\x26\xad\x82\x27\x5f\x57\xd5\xb8\xd5\xca\xf8\x56\xcc\xd9\x55\xcb\xd8\x3f\x88\x86\xd1\x4b\xc6\xb6\x0a\xc6\x06\x72\xb6\x57\x2e\x0e\xe2\x30\x61\x34\x96\xe8\xa5\x22\x67\x2e\x65\x02\x15\x47\xbf\xf3\x9d\x65\xfd\xdf\xd7\x83\x0f\x49\xc2\x49\x80\xfd\x25\xcf\x7d\xed\x97\x79\x08\xf2\xc3\x43\xef\x03\x36\x36\x09\x74\x8f\x85\xc9\x55\x2e\x6b\x6a\x80\x79\xc3\x97\x0b\xb0\xe2\x0e\x86\x0b\x9d\x0e\x01\x37\x21\x13\xbe\x0b\x2a\x5c\x98\xcd\x62\xab\x74\x12\x54\x8c\x79\x7b\x3d\x3c\xeb\x9c\xf8\xb2\xda\x99\x9a\x1a\x11\xcb\x52\xd3\x65\xb2\xa4\x6e\xfa\x5b\x07\xc8\x3c\xb6\x5b\x41\x99\x45\xec\x0e\x47\x28\x8d\xa9\x5a\x16\x27\x9e\xd4\x76\x9a\x6a\x38\xac\xe8\xca\x49\x70\xc2\x6f\x49\x1f\x46\xb3\xf5\x53\x9c\xd5\x6d\x32\x7a\x1b\x52\x53\xa1\x50\xa3\x0b\x6c\xc6\x80\x3c\x07\x20\x8d\x48\x6b\xb6\x60\x48\xaa\x9e\xcd\x76\x7b\x53\xcf\x93\x00\xd6\x77\x36\xc3\x6e\x3a\x7b\x62\xab\x85\xf8\xf3\xf8\xd7\x11\xe0\x76\x1a\xb9\xb0\xda\x90\x20\x4d\x56\xf9\xc6\xf2\x2c\x2d\x79\xa0\xe0\x35\x95\x64\x29\x91\x50\x9b\xcb\xbe\x01\x6d\xbb\xbc\xf5\x65\x84\x55\x69\x22\x5a\x54\x82\x69\x1a\x85\xda\x14\x12\xcd\x15\x61\x3c\x54\x9a\xf6\xdb\x49\x27\x00\x15\x56\xfa\x9b\xeb\x35\xbb\x53\x77\x45\x3b\x0f\xf4\x0a\x0c\x6d\xa8\xac\xf6\x43\x6f\x53\x72\xa1\x91\x52\x8f\x4b\x7a\x8b\x32\x0c\xed\x69\x7c\x36\x02\xdb\x53\xe7\x4e\x19\x7d\xfe\x40\x37\xf1\x7b\x1b\xe4\xae\xaf\x54\x90\x98\x21\xbb\x62\x41\xd4\x0f\x27\x32\xe5\x31\x09\x7b\xe8\x52\x27\x2d\x51\xf7\xab\x4e\x30\x45\x41\xca\xa3\x8e\x6e\x61\xae\xe8\x01\x62\x9c\xce\x4c\x01\x3d\x82\xc3\x9d\xa6\xa5\xd7\xaa\xd9\x9a\x7b\x61\xb3\x39\x73\x37\x0a\xf4\x21\xe5\x90\x74\x64\x27\x9f\x5a\x82\xb2\xba\x81\xb0\x21\xe4\xc3\xee\xcd\xd8\x5b\xa0\x25\xcd\xab\xfd\x39\x7b\x41\x01\x4a\x2b\xe4\x22\x61\xb1\x20\x7b\x62\xe7\xeb\xa7\x4d\x30\x35\xe8\x89\xef\x08\xda\xfe\x8c\xb2\xf3\x44\xf0\xe2\xde\x6a\x1e\x34\x51\xd0\x6a\x0a\x4c\x69\x0c\x07\xa0\xdc\xb2\xa2\xee\xc5\xbb\x49\x3f\xee\x54\x9a\x2f\xdf\x6d\x73\x53\x88\x68\x2d\xfe\x36\x69\xd3\x51\xb6\x3b\xc8\xbd\x22\x69\x26\x5a\x77\x83\xa8\xd6\x14\x1d\x72\xcf\x70\x48\xdb\x7f\xc7\x68\x41\xe0\x33\x51\xd7\x9a\xb4\x86\x82\x6a\x0d\x24\x34\x14\x50\x2b\xa2\x2a\x5f\x45\xf2\xb3\x41\x1b\xcf\xe7\xfa\x59\x54\x77\x33\xf1\xe1\xd9\x83\xe4\x67\xa4\xb2\x1d\x61\x55\xa1\x0c\xfb\x13\x57\x19\x21\xd1\x92\x30\xc6\xef\x31\x07\xda\x94\xdc\xdb\xe2\x16\x05\x1f\x2c\x68\x7e\xa0\x54\x62\xb3\xfe\xee\x34\xd3\xe9\xd9\xc1\x65\x28\x60\x61\xfb\x3b\x5b\x87\xdd\x49\x75\x3d\xb5\x81\x32\x21\x01\x18\xed\xb1\xd1\x78\xca\xbc\xca\x87\x1a\x64\xe5\x6c\xf9\x80\xb5\x0d\x52\xd7\x55\x43\xa4\x8b\x05\x14\xac\xdc\xa9\xb7\x7c\xfd\x14\xe0\x84\xca\x54\x35\x98\x6e\x96\x27\x68\xc7\x04\x5b\x6e\x3f\xa2\x36\x67\xbe\xb1\x83\x3f\x3c\xf4\xde\xd0\x88\x5c\x62\x39\x6f\x3d\x01\x0b\x1c\xd2\x65\xf2\x20\x7b\x7e\xc1\x6d\x26\xcb\x9e\x9f\x59\xbe\x8b\xa8\x5a\x10\x0d\x96\x48\xc5\xff\x03\x8c\x5c\x7e\xcd\x6d\x83\x99\xc5\x3a\xaf\x94\x8e\x44\xdb\x79\xae\x76\x20\x73\x4a\x48\xaa\xc2\xd0\x32\x8f\x19\xe3\xe6\xd2\x46\xd3\x62\xc9\x33\x63\x67\xbd\x13\xf4\x80\x72\x92\xb0\x9d\xa8\x24\xa2\xec\x70\x90\x8f\x59\x3e\x8a\x05\x17\x84\x96\x74\xea\x34\x5e\xba\x0a\x2a\xd1\x95\x38\xa5\x8d\x9e\xd9\xee\xfe\x5a\x9a\x72\x1d\xb2\x48\x22\x1c\x68\xad\x5b\x98\x23\xc9\x9c\x7d\x5a\xdc\x5d\x21\x81\x09\x8e\xe8\x17\x45\xe9\xf8\xf2\xd4\xaa\x90\xdb\xf3\xd0\x42\xb0\xd6\x29\xa7\x4a\x08\x00\xac\x67\xd2\x02\x73\x31\xc7\x70\x82\xfd\xd3\xd5\x85\x2f\x57\x57\x85\xde\x82\xc5\x4b\xc2\x41\xec\x42\xbb\x1a\x14\x2c\x21\x71\x2e\x70\xa1\x46\x36\xb0\xbf\x35\xd3\xd3\x25\xe1\x60\xda\xcb\x50\xc7\xe4\xb3\xc2\xdc\x2c\x7e\x2d\xee\x56\x95\x06\xeb\x30\xa7\xbb\x15\x1c\xd4\x54\x24\x98\x8b\x2d\x39\xdc\xc1\x31\x8e\x56\x82\x20\xb1\x8a\x25\xfe\x0c\xcb\xb2\x89\xd1\x16\x8d\xc9\x66\xb7\x07\x26\x38\x59\xdb\xac\x75\x6d\x50\xda\x9b\xdf\x0e\x97\xf9\x84\x70\x25\x21\xb7\x57\xdd\x76\x8c\x03\xe8\x56\x7a\xdb\x84\x33\xab\xdd\xc6\x89\x56\x5c\x2a\x19\x0d\x56\x05\xbd\x27\x74\xb6\x15\x0c\xa9\x3a\x85\x50\x69\xc5\x80\xb0\x33\x45\x94\x2b\xb9\xe0\x58\xb8\x78\x5a\xcb\x88\x2a\x9a\x9f\x8b\xc8\x1d\x68\xca\x85\xbf\x92\x3b\x84\xb7\x5b\xd9\x1b\x04\x39\x82\xdf\x4a\x7b\x80\x07\x15\xba\xeb\x48\xe1\x04\x87\xc7\xf7\x9c\x9a\x23\x46\x3c\xa5\x33\x2f\x09\x4d\x70\x36\x35\xfa\x3b\x1c\x8c\x23\x12\x94\x85\x86\xa3\xd8\x6f\x77\x24\xb6\xc4\x34\x2c\xac\x1a\xe4\x05\x55\xca\x36\xa8\x60\x2c\xf7\xc4\x67\x06\x71\x6b\xb4\x5b\x4d\xa1\x66\xfc\xdb\x4c\xa2\x29\x27\xe0\x0b\xbd\xdf\x14\xca\xa0\xb0\x3c\x7d\xc0\x36\xc6\x32\x99\x3a\x5b\xb9\xcd\x1f\xa0\x61\x35\x75\x60\xc1\x96\xce\xb1\xcc\xd6\xa7\xdf\xa9\x17\x31\x5e\x1c\x48\xeb\x9f\xa2\x60\x8e\x63\xe3\x95\x1b\xa6\x90\xf1\xf6\x60\x8a\x7f\xb3\x5f\xc0\x29\xbd\xfd\x9c\x35\xce\xea\xda\x8d\xc7\x5a\xbd\xda\xcc\xd7\x0c\x59\x76\x30\x87\x63\x75\x61\xde\x6e\x7f\xa6\x34\xd4\x14\x6c\x70\xf9\x99\xbd\xfa\x80\x8e\x53\x67\x5a\xb7\xe5\x95\x60\xd1\x32\xcb\x01\xb2\x8b\x5c\xe3\xeb\x27\xc1\x22\x77\xc3\xd5\x41\x0d\xad\x45\x1a\x04\x20\x94\x2e\xa6\xdb\x6f\x64\x9c\x98\x80\x04\xab\x31\xde\x69\x03\xe3\x44\x72\x4a\x80\x21\x42\xe2\xe0\x63\xfb\x45\x4a\x3e\x4b\x8e\x03\x87\x0b\x89\xba\x21\x36\xad\xce\x22\xb6\xad\xf7\xef\x0d\xc4\x02\xd0\x8a\xf6\xfd\x4d\xe3\xd8\x56\x2a\x80\x36\xa7\x11\x4b\xc3\x53\x16\x4b\xce\xa2\x88\xf0\xf7\x44\x08\x3c\xf3\x67\x61\xa9\x83\x2d\xf0\xd2\xdd\x38\x77\xe8\x1b\x46\x02\xa7\x4b\x32\xc3\x3c\x2c\xea\x06\x5b\xf7\x0f\xca\xb9\x1f\xd2\x54\x09\x6e\x99\xa6\xc2\xfb\xe1\x44\x56\x46\xa6\x8e\xea\xba\x05\xc7\xff\x5b\xb9\x4a\xc8\x76\xf6\xab\x32\x75\x00\x01\xa2\x9f\xf0\x2c\x66\x42\xd2\x00\x85\x1d\x93\x1e\x1b\x32\xe4\x34\x5a\x32\xb4\x11\xbd\xb4\x3a\x5b\xd5\xab\x2f\x9f\xeb\xca\xc1\x18\xe5\x35\xda\xa6\x78\x7d\x99\xa6\x83\x6c\x45\x9b\x94\x1d\x6a\x58\xed\xf1\x53\xb2\xdd\xfd\x21\x74\x89\x79\x99\x67\x03\x27\x3b\xf8\x44\x7c\xa1\x49\x52\x1a\xc3\x2d\xee\xf4\x0b\x6f\xd2\xbb\x3a\x9c\x95\x1a\x72\x44\x85\x49\x67\x00\xd5\x07\xa0\x32\x04\x16\xda\x71\x99\xcf\x20\x2c\x4a\x7b\xab\x5d\x32\x01\x39\x5c\x3b\xe8\x2e\x95\xee\x9f\x6a\xc3\xa5\x9c\x08\x84\x21\xd1\x3b\x99\x11\xde\x43\xe8\x0d\xe3\x68\xc1\xb8\xbd\xae\xa2\x39\x89\x92\x23\xa8\xb6\xfa\x6b\x30\xb5\xa5\x73\xf3\xd9\xd2\x9d\xff\xea\xf5\xa1\xea\x10\xcd\x82\x6a\xfa\xd5\x0d\xc0\xaa\x97\x09\x12\x4c\xc7\x5d\x2e\x40\x8d\x66\x3b\x10\x12\x97\xe0\x05\xa6\x62\xa3\x03\x84\x4b\xc8\x9c\x1b\x4b\x0a\xf4\x43\x82\x7b\xcd\x5d\x1a\x12\x30\xf5\x45\xeb\x27\x88\x12\xa3\xaa\x57\xda\x05\x5a\x77\x8e\x1c\xa1\x25\xa3\xbc\xa6\x67\xfe\x51\x69\xda\xcf\x6a\xf7\xab\x13\x74\xce\x74\xad\x07\xc8\xe7\xdf\x10\x70\x9a\x41\xc4\x69\x00\x39\xc3\x17\x48\x72\x96\x2e\x33\x97\xee\x96\x13\xe9\x04\x0e\x55\x21\x62\xa9\x44\xf7\x58\x2f\x28\xc0\x2c\x56\x71\x80\x7e\x63\x77\x70\x7b\x1e\x70\x0e\x41\x74\x1d\xb5\xd8\xa6\x34\xa6\xc2\x57\x00\x23\xa3\x2b\x5c\x3f\xc1\x24\xb4\x6b\x3e\x5c\x3f\x45\x58\x9d\x00\xb1\x94\x24\x96\xf6\xf2\x30\xa5\xb1\xb9\x97\x2e\x31\x8d\x34\xda\x39\x57\x87\xbd\x02\xde\xda\x1e\xb4\x5b\xf3\x8d\x6b\x59\x07\xc4\x0a\x88\x88\x85\x63\xa7\x8e\x52\x25\x48\x82\x47\x10\x09\x21\x98\x85\x18\x17\x44\x1f\x32\x13\x20\x8b\xdc\x83\xae\x3a\x6e\xae\xd6\x4f\x70\x86\x8c\x19\x49\x43\xd5\x6d\x1c\xe9\x48\x16\x14\xd0\xbb\xc8\x1b\xef\xf0\x39\xd1\x1a\x54\xf7\xb8\xa5\x23\x03\xb4\xf2\x1d\xb1\x29\xfa\x48\x56\xc7\x4b\x1c\xa5\x04\x25\x98\x72\x71\x13\x1b\x3d\x5c\x00\xd5\x71\x41\x0a\x64\xf7\xeb\x98\x60\x7e\x72\x13\x2b\xe6\xfe\xb4\x88\xae\x62\x9a\x24\x44\x2a\x06\x57\x77\xa7\xef\x06\x9e\xaa\x81\x0b\xd3\xe2\xba\x24\x99\x09\x00\x90\x13\x01\x09\x17\x15\x39\x24\xe5\x37\xf1\x75\x4c\x90\x59\xf1\x0a\xbb\x48\xf9\x92\xc4\x69\x2e\x6c\xf3\x33\x87\x8e\x6a\xd5\xbe\x70\x9b\xd4\xb5\x66\x8e\x28\x70\xa7\xb9\x57\x22\xeb\x96\xa8\xea\x57\x03\xe2\x3c\x49\x9b\xc5\x2a\x88\x1d\x12\xf4\x3f\x6f\xd2\x57\xaf\xfe\x40\x10\x0c\xcd\x11\x48\x5a\x2a\xc1\xd1\x14\x52\x8f\x4d\x56\x09\xf1\x7b\x88\x39\x85\x00\x19\xb5\x65\x28\xb0\x10\x2c\xa0\xeb\x27\x13\x3c\x43\x62\x41\x16\x36\xbc\x32\x67\xbe\x8b\x98\xa4\xfc\x48\xcb\xc8\x34\x46\xb0\x13\x5b\x77\x55\x8d\x1e\x61\xe3\xa5\x0a\x5a\xf6\xd4\x27\xdc\x9c\xfe\x5e\x72\x96\x10\x2e\x57\xa5\x7e\xdf\x31\x16\x11\xec\xad\x97\xb4\xd9\xd0\xdb\x2d\x4b\x37\x80\x5c\x3f\x91\x38\xf6\xba\xce\x36\x93\x65\x97\x88\xd9\xcb\xc4\x41\xe8\x33\x33\xbe\xa3\xf7\x17\xb1\x3f\x75\x42\x72\x1a\xcf\x0e\x4a\x1c\x41\xc1\x1c\xaf\xff\x4f\x4c\xf6\x20\x2f\x4e\x17\x77\x84\x6f\xce\x5c\xfb\x79\xe3\x0c\x6e\x4b\xb5\xda\xbe\xee\x38\x31\x33\x55\x09\x0a\xf7\x7d\x05\xc6\xca\x1e\xbd\xe9\x0f\x47\x83\x33\x9f\x5c\x3e\x7d\x37\x38\xf5\xb4\x1b\xf4\x27\xd7\xe3\x01\x7a\x33\xea\xbf\xf5\x85\x4f\x0e\xcf\xcf\x86\xa7\xfd\xc9\xe0\x7a\x0c\x41\xa3\x6f\x2e\xce\x4f\x27\x43\x9f\x65\xa0\x00\xd0\x67\x7c\xf6\x40\xf4\x19\x99\xdf\x40\xc4\x37\xd2\xa9\xfc\xad\xa7\x03\x67\x3a\xdc\x3b\x15\x75\xea\xbb\x2c\x80\xbb\x98\x92\xbf\x93\xc6\xc8\x84\x2d\x17\x9d\x1c\xc0\x6d\xdc\x75\x8a\xf5\x1d\x5b\x0c\x4d\x53\x22\x83\x79\xe1\xbe\x20\x5a\xf9\xe5\xe6\x74\x95\x2f\xd9\x55\x75\x87\x5a\xb8\xe2\x96\xe9\xd1\xfe\x36\xc2\x06\xa4\x64\xb1\x9f\x05\x37\x8e\x5e\xb3\x52\xc6\x4b\x68\x68\xe3\xf6\x9b\x42\x4d\x7a\x4d\xda\x1a\x0f\xe9\xfb\xf1\xd1\x92\xb7\x03\xeb\xc8\x92\xc4\x52\xb4\xbb\x89\x7a\xf1\xaf\x9f\x96\xeb\x27\x1d\x20\x51\x06\xd5\x8a\x08\xc6\x67\x5d\xed\xfe\xaa\x46\x10\x26\xbb\x66\xea\x98\x45\x64\xc2\x4c\xae\x96\x12\x87\x77\xe2\x54\x21\x84\xb0\xb4\x1c\x6c\xf0\x9d\x5e\x2b\x2d\x09\x68\xdb\xbf\x7d\x59\x5c\xf0\x12\xdc\x85\xc7\xa0\x4d\xe4\x3a\xc1\xaf\xd8\x67\x2d\xe8\x14\xc1\x22\x4b\xbb\x92\x72\xb1\xf5\xac\xd7\x59\x58\xf6\xa1\x62\x13\x42\x2b\xc4\xe0\x46\x55\x31\xd7\xc0\xab\xea\xb9\x67\x9b\x71\xe2\xda\x98\x67\xed\x90\xb7\xef\x9f\x2b\x07\x5a\x39\xf0\x79\x3b\x40\x1a\xe0\xd5\xd1\x24\x99\xb9\x56\xab\xf3\x0f\x0b\x70\x84\x24\x59\x24\x8c\x63\xbe\x42\x5f\xa8\x56\xe3\x64\xf1\x95\x4d\x15\xa7\x5a\x62\xfa\x4d\x30\x1d\x67\x6f\x6b\x71\xdd\xda\x4c\x1f\xb5\xb6\x6f\x27\xf3\x49\x21\x7c\x05\xc0\xd9\xc0\x69\x7b\xc7\x2b\x82\x6e\x49\x98\xbd\xfe\x1c\xa1\x34\xcb\xdd\x92\x60\x0e\xb1\xe9\x9b\xe5\x3b\x5b\x6c\xf1\x25\x4a\xf3\xeb\xd5\x1f\x11\x75\xd2\xb1\x58\xff\x03\x5e\x5b\x93\xb3\x61\xdf\x97\x0c\x2d\xf0\x47\x62\x8d\x5f\x3a\xa1\x94\xa6\xb3\x71\x71\x8c\x9c\x7c\x2f\x44\x57\xda\x83\x8c\x2f\x6a\xdf\xa1\xdc\xa6\x99\x02\xaa\x9a\x95\xd1\x2e\x3d\xe0\x59\x53\xeb\xf4\xe1\xf2\xaa\x8d\x43\x4d\x0e\x5d\xe7\x72\xd2\x86\xc1\x56\x53\x27\x45\x25\xab\x49\x3e\x5d\x00\x4a\x13\xc2\x7b\x98\xa5\x26\xf2\x1f\x22\xee\xbf\x56\xa5\x63\x97\x4b\x70\x69\xa7\x51\x64\xab\x24\x94\xb2\x05\x6c\x9a\x83\x9e\xa9\x56\x47\xbb\x5c\xcd\x6f\x4c\x4a\x82\x87\x87\x9e\xf9\xf9\x26\xc2\xb3\xc7\x47\x64\x92\xa9\x7a\x83\x5f\xde\xd8\xe4\x02\x1b\x2d\xb3\x78\x11\x7f\x9a\x21\x2f\x56\x9d\x35\x61\x07\xa4\xed\x10\xfa\x1c\x8e\x2c\x5c\x8f\x75\xf5\x8d\x12\xb2\x31\x93\x46\xd5\x08\x72\x38\x5a\x1d\xe9\xf5\x2c\x54\x47\x20\x51\x03\x85\xe4\x56\x54\x48\x81\xb0\x34\xa9\xa2\xa0\xc6\xd0\xc3\x43\x4f\xbd\x4c\xea\x7c\x47\xdf\x18\x3d\x3a\x8d\x41\x31\x09\x6b\x19\x10\x69\xe1\xf2\x47\xb4\x5c\x3f\x71\x5d\x3b\x54\x27\xa6\x00\x4c\xb9\x6a\x28\x98\x93\x05\x8d\x8d\x8b\x4a\x09\x63\x75\xa7\x18\x87\x09\x0a\x75\x76\x5e\x86\x3a\xff\x5a\xc2\x19\x24\xcc\x62\x5c\xfb\x18\x18\xb7\x50\x5f\x7e\x2f\x80\xc1\xcb\xa1\x5e\x2f\x63\x93\x94\x4d\x2f\xde\x32\xa8\x26\x6a\x14\x88\x7b\x2a\xe7\x2c\x95\x85\x96\x5b\xd1\x20\x14\x5b\x0a\xad\x6b\xd0\x9a\xec\x5a\x3a\x85\x05\x48\xe7\x1d\xf0\x17\x73\x74\x41\x3e\x5c\x2d\xb1\xb7\x22\x65\x41\x67\x26\xce\x77\x27\x16\xe4\xcd\xb7\xc2\xba\x4d\x0a\xeb\xac\xbf\x5b\x64\xaf\xd6\x58\x8c\x75\xdd\x4a\x66\xdb\x41\x3d\xe7\x1a\xb0\x91\x06\x9b\x3a\x74\x97\xc6\x4b\xea\x53\x42\x6a\x12\xd2\xf8\xce\x44\x18\xec\x3d\xc3\xac\x47\x37\xa6\xa2\x3d\xbb\xdf\x0e\x26\x93\xe1\xf9\x5b\x74\x35\xe9\x8f\x27\x5e\xed\xcb\xf0\x7c\x38\x19\xf6\xfd\x1a\x93\x12\x14\xbf\xce\xc4\x82\xf1\xa9\x49\xde\x8e\x2e\x7e\xec\x8f\xd0\xc5\xa5\xfa\xc8\xab\x7b\x31\xaf\x91\xfe\xda\x5f\x96\xf6\x2d\x91\x08\xe7\x9e\x27\x59\x25\x70\x88\x35\x13\x73\x14\x44\x54\xdd\x6d\x7d\x58\xee\x24\x31\x25\x5d\x0b\x35\xc1\xab\xdd\x4b\xb2\x3c\x57\x06\xa8\x42\xe0\xa7\x4a\x89\xe7\x4d\x6b\xb6\x36\x02\xa8\xd9\x58\x57\x5d\xcd\xd2\x05\x47\x3f\xd0\xb4\x6e\x42\xd2\x8e\x3a\x8d\x26\xa4\xb7\x36\xe8\x21\x8a\x72\x07\x68\xf0\xcd\x59\x60\xfe\x91\x48\x70\xd5\xf6\x9f\x32\x2e\x5c\xd7\xee\x2c\xed\x49\x06\xc8\x78\x7a\x44\x58\x9f\x3b\x16\x98\x07\xf3\xf5\x93\x77\xe7\x7f\x9b\x47\x60\x88\xe7\xa9\x50\x76\x51\x70\x9d\x2f\x58\x1d\xbe\x6a\x49\x32\xdb\x53\x47\xe1\xd6\xeb\x79\xc3\x3e\x8b\x54\x57\x2b\xd7\xa0\x79\x2d\x2e\xab\x4c\xab\x62\xec\xae\x1c\xcc\xf4\x67\x8d\xdc\xdb\x9d\x47\xc4\x49\xf9\x91\x65\xf1\xdd\xf3\x10\xbd\x7d\x4f\x73\x0a\xca\x97\xac\x4d\x6b\xed\x73\x9d\x9f\xb7\x61\x1a\xa8\xff\x9e\x83\x5b\x2d\x67\xa9\xab\x3a\xfc\x56\x2c\x6a\x5a\x11\xda\x8f\xfd\x5b\xcd\xa8\xcc\x97\xfc\x77\x39\x81\x4c\xfe\x6c\xd8\x51\x50\xe6\x69\xf5\x75\xf8\x54\xa4\x61\x73\x7f\x9c\x6a\xf7\x99\x8c\x8a\x36\x3d\xa9\x86\xd2\x66\x5b\xcb\x77\xd9\x3d\x3d\xc6\x2c\x41\x34\x9e\xb2\x7d\x73\x6c\x5d\xf8\xc3\xe5\x9e\x21\x6b\xd6\x06\xe5\x87\xab\x53\xd7\xd8\x11\xf2\x6c\xb5\xeb\x36\x7b\xd5\x54\xad\xab\x3c\x52\x2d\x75\x31\xcd\x83\xb5\x65\xf1\x2e\xef\x58\xb6\xd3\xb0\xd8\x8e\x7f\x83\xf2\x9e\xe5\x95\xf5\xed\x8b\x7b\x3a\xcc\x10\x5f\xab\xe7\xda\xcd\x43\x7c\xfd\x4e\xfa\x72\x3e\xb6\xdc\xd4\xdb\xa7\x6b\x6c\xda\x7a\xb5\x52\x43\xe4\x25\xec\x39\x49\x98\xa0\x92\x71\x4a\x04\xea\xf5\x7a\x6d\x44\xb3\x28\xc7\xba\x66\x37\x90\x42\xc4\xab\x00\x70\xed\xc9\xc9\x48\x59\x21\x9f\x57\x55\x2d\x15\xe5\x88\xdb\x7a\xd4\x95\x95\x0c\x41\x24\x1d\x64\x37\x08\x3d\xb5\x12\x77\xdf\x04\x00\xdc\x36\x99\x43\x8b\xd4\x99\xe6\xbb\xe3\x2f\x18\x3c\x37\xc8\x40\xed\x67\x73\x85\xc1\x73\xaf\x39\x6d\x4a\x50\x54\x48\x85\xad\x0b\xdd\x56\x82\xdc\xa9\x93\x06\xc2\x01\xfa\x55\x79\x62\x69\x79\xd6\xdb\x9e\xe0\xc6\x53\xcc\xf3\x5c\x09\xea\xfa\xfa\x15\x3a\xb5\x17\xe9\xa9\xbd\xcd\x40\x21\xa0\xe2\x09\xcd\x96\xae\xd4\x0f\xdf\xaa\x67\xe7\x5b\x2d\x5b\xbe\xfe\xfb\x2c\x22\x0d\x87\xb2\x3a\x24\xb5\xb4\x17\xa9\x15\xbb\x1d\x1e\x9d\xf5\xec\xd0\xb4\xe3\xa1\x30\xab\x67\xac\x93\xe8\xee\x26\xed\x0a\xc9\x6f\x3d\x95\x8b\xb7\x90\x7c\x25\x9a\xd4\x50\xe7\x35\x8c\x7f\x84\x5f\x6a\x9a\xc6\x61\x95\xb3\x54\xf6\xf7\xce\xf7\x8c\xca\xde\xd8\xf9\x90\x95\x40\x76\x49\x21\xb2\x7a\xb6\xbb\xb4\x7c\x0d\x76\x6c\x1e\xaa\x7e\x57\x7c\x3a\xaa\x4e\x0d\xfe\xbb\x67\xe0\x57\x9c\x45\x3e\xfe\x3c\x77\xdf\xbf\x56\x17\x0f\xd9\x8f\xaf\x3d\xa9\xbf\xea\x04\xfd\x1d\x2d\xe5\xdf\xc7\x8a\xfd\x5a\x4b\xf3\xb9\xd6\x5f\x16\xf0\x5f\x79\x72\x6e\x7b\x3c\x81\x90\x7f\x51\x95\xac\x29\xf4\xee\xbc\xdb\x5d\x9d\x2d\x10\x2d\x25\xf6\xb9\x45\x5b\x09\x20\x9c\xfb\xfe\x7e\x27\xf4\x42\x39\x1a\xe7\xfa\xd7\xa6\xd6\xc5\xfe\x3a\x2c\x61\xec\x9e\xa6\xda\x01\x69\x31\x75\x0e\xa1\xcb\xd8\xa9\xd3\x5f\xb7\x83\x6d\xfb\xb0\x69\x72\x7d\x36\xbf\xb0\x62\x37\x1b\x2c\xb5\x5f\xdd\xf7\x6b\x83\x2f\x5f\x9b\x0d\xdf\xaa\xbf\x00\xb1\xa8\xa8\x79\x1e\x35\x50\xe8\x90\x6f\xd1\xec\x21\xc5\x73\xba\xf7\xd6\x08\x65\x94\xed\x49\x8e\x3b\x69\xb4\x36\xbd\x49\x6d\xdf\x52\x6e\x67\x59\x73\xab\x27\x49\x19\x57\xc3\x84\x68\x94\xe9\x12\x07\x1f\x75\xdd\x0e\xf5\xeb\xf1\xb1\x53\x5c\x0c\xd9\x81\xe2\x39\xac\x93\x59\x82\x8e\x02\x7e\xff\xea\xd8\x24\xe6\xf0\x16\x49\x9d\x02\xe4\x2b\x32\xc1\x26\x0b\xf9\xb6\xdd\x96\x58\x7c\x3c\x94\x91\xba\xa5\x70\xac\x27\x48\x07\x59\x54\xac\xb1\x22\xf6\xa2\x21\xab\x02\x7f\xab\x11\x28\x46\x5a\x34\x2c\xbc\x8d\x11\x28\xd2\x50\xb7\x20\x77\xef\xf2\x1e\xdb\xce\xb6\x9d\xdb\x6d\x8b\xd1\xe5\x60\x18\x84\x76\x78\x0b\xd8\x56\xb7\x7d\x37\xe8\x8f\x26\xef\x6e\x4f\xdf\x0d\x4e\xff\x7c\x3b\xf9\xe9\x72\xe0\x69\xad\x5e\xdd\x9e\x0d\xfb\x6f\xcf\x2f\xae\x26\xc3\xd3\xdb\xe1\xf9\x64\xf0\x76\x3c\x9c\x0c\x5a\x82\x45\x8b\x54\x48\x74\x47\xd0\xcd\x8b\x84\x71\x79\xf3\xe2\x48\xfd\xd2\xc9\xf2\xd4\x1f\x8c\xa3\x9b\x17\x73\x29\x93\x9b\x17\xdb\xd1\x7f\x71\x35\xf1\x34\x78\x77\xe1\xa5\xee\xe2\x6a\x72\xde\x7f\xef\xeb\xeb\xf9\xc5\xfb\xdb\x77\xeb\xff\xbf\xb7\xf5\x64\x72\xa9\x93\xfb\x41\x15\xdf\x20\x4a\x43\x38\xcc\xe9\x7c\xaa\x3a\x2b\xc1\x1d\x0b\x57\xd0\xa9\xce\xbf\x74\xd0\x94\x45\x11\xbb\x27\x21\xba\x5b\x21\xac\x3d\xb6\x21\x87\x84\x64\x90\xec\x0d\x1a\x66\xc9\x02\x3d\x34\x9d\xd9\x2c\x80\x80\x7d\xfd\x37\x8d\xd8\x49\x89\x12\x30\x9e\x88\x72\x00\x43\x0a\xf8\x45\x4a\x97\x3a\xaf\x97\x4e\x33\x46\x9c\x9c\x9d\xc6\x9c\xf5\x29\x25\x11\x8a\x28\xd7\xd5\xfa\x6c\xca\xc1\x9a\xfe\x2f\x88\x9c\xb3\x10\xbd\x7c\x3b\x98\x1c\x5d\x5e\x5c\x4d\x8e\x2e\xaf\x27\x47\x67\x83\xd1\x60\x32\x38\x22\x32\xf0\xf9\x6e\xbf\x5f\x3f\xa9\x76\xa6\x0a\xa9\xbf\x75\x35\xe2\xb2\xc3\x8a\x6f\xaa\x6f\xfa\x83\x50\x58\xc2\x1a\xc0\xa9\x7a\xac\xa3\x94\x3d\x78\x98\x90\x30\x40\xba\xe4\xf4\x62\xd5\x15\xe9\x9d\xf6\x83\xf3\xf5\xeb\x5c\xf1\xb5\x33\x5f\xff\x87\x2c\xd5\x9d\x5e\xb0\xb8\x2b\x58\x2a\xba\xc6\x8f\xce\xd7\x35\x8b\xd2\x2a\xf7\x81\x3f\x3a\x8d\xd8\x4b\x93\xf0\xc5\xf8\xb4\xce\xb1\xfa\x69\x5c\xfd\xda\xd0\x63\xa3\xa0\x34\x34\xcd\x78\x00\x29\x9c\xc2\xad\x59\x94\x2c\xe6\x12\xcf\xd6\x4f\xa2\x89\xd0\xd4\xe4\xae\x09\xd8\xe2\x8e\xc6\x5a\x98\x41\x3d\x93\xb3\x8b\xf7\xfd\xe1\x39\xc4\xe2\x40\x65\x93\x95\x5e\x18\xb6\xa4\xfc\x1d\xf5\xd7\xaf\x77\x88\xce\x8a\x5f\xe2\x25\x09\x0c\xcc\x81\xa6\xd7\xd6\x1f\x25\x4e\xaf\xd6\x7f\x43\x91\x37\x7b\xf4\xde\x34\x6b\x07\xee\xc3\x53\x6d\x46\x46\x2d\xbe\x48\xa7\xbc\xe1\x74\xa1\x3f\x30\x2e\xde\x6d\x3a\xa4\xa4\x90\xae\x0f\xb6\x2a\x4d\x9d\x6d\x28\x06\x5a\x6c\x9d\x31\x52\x9a\x30\xd5\x64\x0c\xcf\xaf\x26\xfd\xd1\x68\x70\x86\x2e\x47\xd7\x6f\x87\xe7\xe8\xf4\xe2\xfd\xfb\xfe\xf9\x99\x2f\x40\xdf\xbc\xd6\x35\x9d\x55\x93\xee\xf0\x1c\x59\x20\xbe\xb2\xc7\x5e\x24\xbe\xc5\xdf\x80\xc5\xe7\x47\x0e\x5f\x9c\x9f\x0e\x6e\xdf\x0f\xde\x5f\x8c\x7f\xf2\xc9\xaf\xc1\xfb\x8b\xe1\x78\x70\x6b\xbf\xf6\xc0\x9a\xc5\x8c\x93\x62\xc2\x54\x9f\xbb\x3c\x7c\xca\xdd\xa4\x56\x0d\xf5\x1f\x86\x31\xfa\x57\x1a\x87\xec\x5e\xa0\x53\x93\x37\x7e\x44\x63\x5d\x5a\x48\xd0\x78\x16\x91\xae\xba\x6e\x91\xf0\x08\x11\x11\xe0\x84\x84\x10\x38\x77\x82\x3a\x0f\x37\x37\x37\x2f\x96\x38\xa2\xa1\xfa\x71\xa2\xfe\xf3\x9b\x60\xb1\xfa\xd7\x9b\x5c\xe6\x2a\x35\xd3\x71\x16\xeb\x8c\x15\x26\x85\xbc\xa5\xe1\x08\xd1\x38\xa4\x9f\x52\xf2\x45\x3b\xc6\x9b\x84\x16\x80\x52\xaf\x82\xff\x97\xbc\xf7\x6b\x72\x1b\x47\xf2\x45\xdf\xef\xa7\xc0\x9d\x73\x23\xca\x13\xa7\xa4\xb1\x7b\x67\x4f\xdc\x70\x3f\x4c\xa8\xab\x64\xb7\xa6\xeb\xdf\x48\x55\x9e\xed\x33\xee\xa8\x45\x89\x90\xc4\x36\x45\xd0\x04\x59\x76\xb9\x8e\xbf\xcb\xbc\xed\x68\x1f\xee\xd3\x7e\x03\x7d\xb1\x1b\xc8\x04\x40\x90\x62\xf2\x8f\x4a\xe5\xe9\x13\x67\x37\x62\xda\x25\x12\x89\x04\x88\x3f\x89\x44\xe6\xef\x07\xfe\x30\x9e\xf2\x79\x86\x94\xe4\xc1\x11\x40\x8d\x25\x09\xc6\xd6\x8a\xd8\x3a\x5e\xb6\xff\xc1\xe1\x6f\xc0\x9e\x48\xa4\xca\x52\x99\xac\x00\xc9\xaf\x45\xf3\xb6\x6e\xba\x92\x9f\x44\x3a\x5b\x89\x28\x82\x4e\x0a\x64\x7e\x47\x76\xd2\xfb\xdf\x35\xd5\x45\x1a\x27\xa7\x7a\x17\xde\xad\xef\x99\x7a\x67\x99\x87\x51\x24\xd6\x22\xd3\x9d\xd3\xaa\x31\xd1\x3d\x68\xb7\x38\x94\x59\x03\x8e\x6d\x0d\x19\x99\x67\x49\x4e\xe5\xc7\x4c\x8c\xed\x11\xf9\x70\xd8\x10\x64\xe1\x60\x66\xc1\x2a\xe1\x4c\xc9\x34\x0b\xc9\x81\x0c\xe4\xfa\xf3\x8c\xdd\x28\xbe\xa4\x26\xc8\x0c\x11\xbf\xb4\xbd\x83\x6f\x77\x93\x36\x64\xa3\xb8\x00\x54\x0b\x15\x03\x32\x0c\x88\x8f\x82\x9c\x33\xf3\x72\xf4\xc0\x44\x3c\x8f\xa4\x12\xc1\xf0\x7d\x4c\x7a\x09\x76\x95\x18\xb2\x1b\x4f\xfe\x9a\xc7\xda\x62\x97\x39\x8b\x8f\xf4\x84\x4f\xb8\x42\x03\x4d\xd9\x8a\xe0\x73\x62\x15\xdd\xd4\x3f\x71\x9c\x10\xb1\x60\x8b\x88\x2f\x15\x7b\x21\x3e\xcf\x45\x92\xb1\xc1\xe2\xf7\x6c\xce\x63\xdd\x8c\x3b\x93\x00\x22\x02\xf6\x69\x25\x62\x96\xe4\x88\xb2\xbb\xb6\xd4\x64\x90\x68\x81\x21\x58\xe5\xf5\x88\x3a\xbf\xd4\x35\xf5\x0c\x3c\x2e\x81\xa1\x9f\x44\x2b\x73\x67\x41\x78\xa1\x78\xbe\x00\xdd\x30\x5b\xf8\x1e\x22\xe7\xb9\xb2\x68\x32\x5a\xcd\x8f\xf9\x76\xa3\x76\x30\x5e\xb5\xbd\xe4\xc4\xe8\x16\x18\x8e\x03\x15\x42\x6d\xe5\x1c\x0e\xb4\x58\xf3\x78\x77\xb9\x24\x4e\x47\x3b\x3d\xdb\x7e\x36\xc1\xd3\x48\x2c\x63\xf1\xfe\x77\xef\xdf\xc7\xef\x7b\x8d\x8b\x33\xd1\x1e\x42\x0c\x28\x3b\x1c\x30\xec\x60\xdf\x35\xd1\xc7\x45\xfd\x79\xb5\xfe\x6e\x4d\x9b\x5a\x68\xc0\x23\x9e\x24\x03\x30\x11\x44\x7c\x5f\xfc\x03\xc2\xa2\x8f\xf4\x81\xd6\x0e\x5d\xd5\x73\xd4\x4f\x2d\x76\x5f\x73\x0d\xfa\x73\x8a\x4a\x25\x4f\x6e\xc2\x73\x29\x7e\x18\x75\x1d\xe9\x9f\x4d\x41\x3b\x90\xba\x35\x72\x0f\xa0\xee\xe8\xea\x8a\xcd\xc6\xd3\x77\x93\x93\xc2\x98\x39\x88\xbe\x5a\xb0\xb3\xa5\x4c\x0d\x07\x52\xf8\x56\x9f\xd9\xe1\x26\xd8\xd8\xeb\x87\xd0\x57\x1f\xf6\xb5\xce\x22\x73\xf6\xfa\xa1\xb5\xdd\x5d\x70\x0e\xac\x38\xe9\x9c\x39\x78\x53\x9e\x65\xc8\x78\x2d\x79\xde\x91\x53\xe8\xfa\x14\x35\xcb\x2a\x1d\x4a\xa3\xa7\x76\xde\xd3\xb5\xfa\xe1\x66\x72\x76\x7a\x35\x3a\xf9\x09\x74\x3b\x66\x17\xe3\xbf\xde\x96\x7f\x3b\xd8\xd7\x06\x89\x27\x97\x17\xb3\xeb\xe9\x0d\x40\xaa\x1d\xb3\x8b\xcb\x9b\x77\xe3\xd1\xcd\x6d\xed\xe3\x43\x0c\x03\xbb\x66\x3c\xd7\x28\xb6\xab\xc7\x33\x8d\x62\x6f\xc9\x8b\x9f\x3c\x68\xea\x57\xba\x7d\xd4\x3a\x1b\xfd\x30\x3e\x3b\x66\x57\xd3\xcb\x77\x93\xd3\xf1\x14\xba\xf7\xfa\xf2\xa7\xf1\x61\x16\xe7\xb3\xc9\x0f\xe3\xb3\xb3\xf1\x31\x7b\x73\x79\x33\xbd\x98\xcc\x66\xe3\x9b\xa9\xee\xe0\x3f\x8f\xaf\x0f\x33\x28\x76\xd4\x7f\x2e\xa5\x0f\xa0\xeb\xe5\xf4\x6d\x69\xf3\x7b\xaa\x9e\x5a\xde\x61\x77\xbd\xaa\x86\x07\xe8\xcc\x67\x51\xd2\x2c\x70\x7f\xb9\xb9\xbc\x1e\x1d\x6c\x4d\xbb\x9c\xbe\xb5\x22\x0f\xa0\xe5\x74\x7c\x75\x59\x6c\xbb\x37\xd3\xb3\x83\xe9\x39\x1d\xbf\x19\x4f\xc7\x17\xd7\x93\xf1\x99\xee\x59\x2d\xfa\x00\xfa\xce\xc6\x27\x37\xd3\xc9\xf5\xcf\xb7\x6f\xa7\x97\x37\x57\xa0\x34\x74\x08\x5e\x4a\xf1\x88\xcd\xae\x46\x07\x5a\x68\xa1\x06\xbd\xb6\x42\x8d\xb0\xe0\x42\x55\x63\xac\x62\xc1\xe7\x79\x94\x01\x1d\xe3\xf3\xb4\xeb\x6a\x74\xfd\xe3\xed\xf5\xe5\xed\x9f\x67\x97\x17\xb7\xd3\x9b\xb3\xf1\xec\xf6\xcd\xe4\xec\xd9\xda\x76\xf2\xe3\xf8\x7c\x72\x71\xfb\x66\x72\xf2\xe3\x64\x3c\xbd\x9d\x8e\xdf\xea\x1a\xc1\x83\x74\xf0\xf6\x1d\xbb\x29\xfc\x6c\x9f\xeb\xd8\x4e\x69\xf3\xb9\x0e\xd2\x06\xdc\xce\x7f\x98\x5e\xfe\x34\x9e\xa2\xe1\x52\xfe\xed\x20\x0d\x39\xb9\xbc\x99\x5e\xeb\x4f\x60\x64\xcf\x0a\xa3\x65\xe7\xd1\x73\x34\xeb\x66\x36\x9e\xe2\xc2\x75\x35\x9a\xcd\xfe\x7a\x39\x3d\x3d\x3e\xd8\xc2\x50\xdb\xb6\xf3\xdb\x9b\xeb\xc9\xd9\x64\x06\x08\xb8\xc7\xec\xfc\xf2\xfa\xf6\x74\x7c\xab\x2b\x1f\x1f\x1f\x6e\xdd\xa8\x98\x62\xf6\x87\x9f\xc6\x3f\x1f\xa4\x65\x3b\xb6\xd8\xc9\xd9\x41\xed\xb2\x5d\x5b\x32\x0e\x4a\x23\xf0\xa0\x46\xe6\x4e\x6b\x44\x86\x83\xf0\xec\xac\xa8\xe9\xd9\x9b\xf7\xec\xdf\x48\x2f\x7b\x07\xfe\x4c\xb8\x9e\x1d\xd6\x38\x31\x4b\xd8\x61\xed\x93\x42\xd3\xc3\xd9\x27\x85\xa2\x07\x33\x50\x40\xe2\xa0\x70\x0c\xc0\x9f\x20\x7d\x70\xd0\xa3\x62\xa1\xba\xfe\x0b\x2a\xb8\x3d\xe0\xd6\xa1\x05\xa1\x9d\x05\x73\xb6\xf8\xf3\xc0\xfa\xfb\xc7\xdb\x67\x51\xff\x40\xae\x84\x5a\xdd\xf6\x51\xad\xd8\xad\xc0\x38\x9b\x5e\x1e\xc8\x42\xda\xd9\x96\x0a\xf1\x07\xe8\xd0\x8a\xd6\xd0\x19\xcf\xae\xfc\xd8\xaf\xe6\x00\x8d\x38\x80\x83\x20\x8f\x9f\xf4\xf1\x79\x92\xdc\xc6\x7c\x2d\x8e\x4d\x60\x09\xfc\x71\x90\x1e\x04\x4c\xcc\x75\x85\x9c\x55\x14\xbf\x0b\x1b\xca\x72\x90\x8e\x7c\xaa\xb6\xc1\x8e\x90\x9e\x1a\x38\xf4\x30\xd3\x9d\x80\xec\xa9\xd7\xdb\xc4\xb0\x29\x1d\xa4\x53\x8b\xc0\xb0\x3a\xd6\xaf\x63\xfd\xdc\x20\x7d\x8a\x0c\x08\x2c\x5c\xed\x07\xe8\xe4\x95\x54\x19\x34\x09\x3f\xdc\x61\x46\x89\x89\x6e\xc1\x81\x71\xc0\x11\x21\x23\x60\xb2\xc1\xf8\x3d\xad\x74\x2c\x3e\x79\x3f\x1c\x44\x75\x1e\xcf\x43\xe1\xbe\x48\x54\x3b\xd2\xf3\x7b\xc1\xf3\xfa\x57\x0e\xd4\x4a\x99\x2e\x19\x8e\x39\xdd\x44\xfb\xd7\x33\x35\xb1\x14\x12\x4b\xb4\xb1\xf4\xce\x21\x1a\x99\x2e\x9f\x79\x8d\x22\x5b\x76\xe8\x75\xca\x24\xb7\x1c\x97\x12\xa6\x8e\x77\x61\x6e\x0e\xd4\x38\x57\x5d\x64\x52\xb3\xbc\x7c\x29\x48\x8e\xac\x43\xbb\x39\x44\x33\x21\x5f\xa2\xfa\x99\x0e\xf0\x95\x4c\x26\xc4\xd3\x8d\x9e\xfb\x57\xee\xcc\x72\xff\xea\xd6\x79\x95\xf5\xbf\xcf\x46\x17\xec\xfe\xbb\xe2\xf1\x77\xf8\xd3\x21\x3e\x89\x3d\x8e\xdd\xbf\xf2\x5d\xce\xfa\x4f\x5d\x85\xfe\xaf\x7b\xe3\x3b\xf3\xd3\x77\x87\xf8\x1e\x8f\x8f\xc3\x91\x2d\x4f\x06\xfb\x37\x6a\x5e\x91\xd0\xad\xfe\xeb\x95\x89\x12\x31\x31\x23\x25\x42\x44\xbb\x16\xe3\x6b\x6e\x65\x9e\xf3\x98\xdd\x19\x56\xc1\x10\x38\x7a\x7c\x2b\x89\xc9\x14\xe3\x40\x8b\x18\x99\xe1\xc3\x3a\x6a\x8c\x93\x39\xab\x09\xd8\x03\x5a\x24\x1f\x4b\xdb\x06\x67\xa7\xdb\x4d\x22\xd2\x4c\x86\x48\xc8\x6d\x99\xf4\xbe\x2f\xc2\xc3\xec\x16\x5c\x5a\xca\x65\x0e\xc0\xb4\xfd\x02\x5c\xa8\xb8\xc8\xdd\x0f\x41\x86\x42\x56\x04\xba\xc8\x76\x08\x42\x76\x9d\xf6\xef\xde\xd7\xc3\x1c\x94\x7f\x07\xfe\x29\x03\xe9\x7d\x1f\x06\x82\x8a\x99\x6d\xab\xd7\x92\x41\xac\x79\xf6\xba\x20\x0d\xfd\xf3\xec\xf2\xe2\x4d\x18\x01\xfd\xe8\xfb\xec\x7d\xf6\x3e\x7e\xc7\xa3\x30\x30\x6f\x23\x10\x3a\x5f\x27\x40\x4e\xff\xb7\xf7\x31\x63\x8f\xfa\x7f\x18\x26\x1a\x64\x72\x2e\xa3\xf7\xbf\x7b\xcd\xde\xff\x2e\x9b\x27\xef\x7f\x77\x6c\x9f\x05\x40\x5e\x0d\xaa\xe1\xe3\x57\x2f\x87\xdf\xfd\xf1\x8f\xc3\x57\xc3\x57\xff\xaf\xf7\x5a\x22\xd3\x4c\xe1\x0b\xff\xf2\x2f\x2f\xff\xc7\xfb\xdf\xe9\x07\x5f\xdf\xc7\xbf\xd0\xf8\xcd\x6b\x6e\x5a\xe2\xba\x9c\xbd\x76\x83\x86\x68\xd1\xd8\xc4\x8d\x7b\x41\xfa\x20\x02\xc2\xfb\x80\x78\xaf\x53\xcb\x0e\xd0\xac\x96\x4f\x94\xe3\xd0\x78\x57\x82\x6b\x2c\x8d\x06\x17\x56\xf5\xf8\x38\xb4\x4c\x66\x26\xec\x7e\xbf\x51\x61\xaa\xe4\x49\x32\xb0\x3b\xcc\x20\x8c\x03\xf1\xd9\x8b\x86\x8b\xc5\x92\x67\xe1\x3d\x15\x4d\xd8\xb1\x8a\x30\x86\xfe\x36\xc0\x92\x45\xc2\x41\x4f\xa9\x08\xf0\x7e\x72\x36\x31\xe8\x63\x64\x38\x25\xbc\x88\x51\xc0\x0e\x69\xec\x28\x8c\x33\x91\x2e\x4c\xba\xee\x4e\xbc\x5d\x63\x9d\x1e\xdf\xfd\xe3\xe3\xf0\x0a\xfe\x75\x05\xb0\xfc\x74\xe2\xd2\x84\x40\x92\xaf\x11\x40\x57\x1d\xcf\xf7\xe8\x23\x6d\x29\x9c\x8b\xb5\x4c\x1f\xe8\xac\x91\xb5\x5d\x3b\x0b\xeb\xa2\x45\xa2\x1d\x7d\x9c\xc5\x32\x1e\xd8\x71\x61\x59\x06\xa9\x55\xdd\xb3\x5d\x64\x68\xc2\x44\x55\x22\xe3\x20\x15\x8e\xd1\x11\xb0\x3d\x62\x19\xb3\x78\xbb\xd1\x52\x17\xcd\x9a\xf4\xcc\xc8\x9a\x98\xb1\x07\x37\x3c\x2e\x3c\xd7\x23\xd3\x27\xa4\x4d\x6d\xec\x2d\x14\x8c\x8b\x35\x23\x70\xa4\xf8\xcd\x15\x4e\x0d\xa1\x92\xfe\x2f\x39\x47\xa7\xc0\x7c\xe4\x49\x2f\x0a\x34\x0a\x9f\xcd\xce\xd8\x89\xde\xf2\xed\x52\x71\x35\xd1\x8b\xde\xf5\xe4\xea\x35\xbb\x51\x82\x1d\xcd\x17\x8c\x27\x21\x1b\x0c\xd4\x87\x30\x19\x28\x15\x0d\xa0\x20\x54\x0c\x94\xb6\x73\x19\x67\x61\x9c\x0b\xb3\x53\xeb\x55\x15\x30\xa5\x44\x17\xca\xd7\x7e\xca\x01\x9f\x2d\x10\x27\x5d\x87\x49\x1b\x01\xbc\x2e\x88\x58\x14\x20\xc7\xeb\x1a\x08\xed\xa4\xc5\x35\xaa\xa4\x2d\x17\xbd\x36\xbf\x36\xf9\xa0\x57\x32\xcd\xb4\x90\x91\xf9\xdd\x1f\xde\x40\x01\x49\x68\xa7\xcb\x55\xac\x0a\x4f\xc3\xaa\xf4\x33\x81\xc2\xcb\x05\x3c\x4e\x48\xc7\x03\xd9\xaa\xbd\x77\x1e\x8d\x17\xe1\x32\x47\x86\x08\xaa\x0f\xfd\x77\x48\x75\x5b\xea\x04\x36\xe4\x7d\x26\x8c\x47\x68\xbc\xc7\xb4\x29\xe0\x4d\x48\xee\xa7\x3f\x8b\x0c\x9b\x55\x45\x2e\x29\x7d\x8a\xe6\x6a\x4a\xdd\xe8\xec\x2b\x18\xb1\x83\x39\x04\x88\x0f\xd9\x55\x24\xb8\x12\xf6\x21\xe3\xcc\x5b\x49\xe4\xdd\xaf\x7a\x83\x93\x29\xfa\x90\x32\x69\x53\x11\xf5\xbc\xe2\x21\xf0\x55\xd6\x14\xa0\x76\x8b\xf2\x17\xf3\xda\xb1\x90\x79\x1a\x87\xa2\x00\x3e\xb5\x61\xe3\x6c\x30\x1f\xb2\x37\xf0\x54\x29\xb4\x78\x75\x15\x19\xd6\x66\x4a\xcb\xdc\xcf\x98\x70\xfc\x32\x16\xb4\x06\x57\x60\x6b\x18\x69\xcd\x45\xcc\xe3\xac\x56\x16\xb9\x4d\x61\x1b\x5d\xc2\x25\x24\xc0\xa7\x22\x91\x68\xb5\x1c\xb1\x81\xdd\x3a\xe1\x95\x40\x0a\x34\x69\x81\xfa\xa6\x2d\x3b\xb3\xe8\x08\x88\x70\xaf\x8a\xfe\xbe\x94\x5e\x69\xc2\xdc\x91\x61\xeb\x08\xa9\x75\x30\x66\xbe\x45\xf5\x50\x7d\x40\x48\x05\x98\xbf\xa7\xa1\xfa\x60\x70\x1e\xfa\x91\xc7\xfd\x05\xe1\x22\x84\x16\xf8\x31\x17\x3b\x0b\x43\x07\xc1\x4f\xd4\xf3\x90\xaa\xb5\x69\xa3\xa7\x08\x39\x43\x9b\x8b\xa2\x19\x38\x00\x3b\x70\x00\xc1\xfd\x09\x4f\xf9\x1a\x34\x59\xed\xe4\x94\x12\x0b\xb1\x2e\xb1\xfd\x87\x5e\x44\x77\xc5\x55\x9b\xb7\x2b\xb4\x51\x3f\x67\xb3\xcc\x65\x1e\xe3\x96\xe1\x8c\x8f\x13\xfd\x93\xee\xa5\x49\xe9\x25\x6f\xff\x40\x67\x6e\xab\x69\x74\x01\xeb\x3e\xd8\xa5\x46\xf4\x8e\xda\xbb\x95\x9e\x09\xb3\x5f\x94\xca\x95\x37\x14\x63\x50\xa1\x1a\xa4\x2d\x55\x69\xe9\x1a\xec\x45\x16\x85\xeb\x10\x1b\x8c\x06\xe4\x99\xfe\xbb\xc3\xf8\x82\xf7\x10\x07\xa7\xd6\xb6\xdc\x69\x1a\x25\xbe\x93\xb6\xa5\xce\x29\x7d\x8b\xde\x5f\x61\x42\x29\xe8\x8b\xaf\x5a\xb1\x4f\xea\xea\x76\xe5\x23\xa1\x14\xcb\x56\x3c\xf6\xdf\x34\x43\xe0\xf0\xcd\x08\xe3\xc5\x76\x93\x86\x22\x47\x8b\xbc\xa6\xca\xc6\x66\xc1\x69\xba\x73\xb6\x3d\xbc\x5d\x5e\xd4\x9b\xc5\x3b\xff\x11\x2b\x98\xef\xd9\x9a\x53\x3c\x3f\xe7\xce\x75\x54\x54\x32\x64\xe7\x3c\x49\x84\x23\xbd\x6f\xd9\xc8\xea\x66\xc2\x13\xa6\x41\xcd\xc0\xef\x39\xea\x0f\x3f\x35\x0f\x32\x19\x09\xb5\xfa\x6e\x9a\x9d\xd5\xdb\x73\xd3\x04\xfb\x1b\xf9\x6d\xf3\xcc\x1c\xaf\xf2\xcc\x80\xbc\x34\x19\xf9\xd5\x83\x87\x4b\xe0\xae\x88\x68\xac\x3d\x0b\xd7\x02\xe8\xd1\xdc\xfe\x76\x8d\xbf\x74\xf8\x70\xde\x0e\xa7\x37\xee\xed\x26\xe2\xa1\x36\xdd\xf4\x30\xce\x76\x7b\xa9\x4e\x70\xa3\x6e\x05\xa7\xc7\xd1\x0e\x6f\xfd\x11\xe2\x12\x03\x47\xff\x3b\x1e\xf9\x7d\x4f\xea\xfb\x0e\x93\xee\xaa\xfd\x56\x23\x9c\x35\x4a\xa7\x94\xd6\xc3\x84\xc7\xb0\x24\xf0\xa5\x40\x84\x99\x63\xf8\x45\x20\x91\xec\xc2\xf0\x43\x22\xf4\x8f\xe1\x6e\x04\x64\x1b\xf2\x1e\x00\xc5\xa6\x4c\x64\x6c\xb9\xdd\xa4\x00\xe1\x51\x46\x99\x39\xd6\xcf\x80\x98\xd2\x3c\x5c\x58\x9a\x49\x6c\x9e\xde\x05\x10\x3d\x07\xcd\x50\xda\xed\x4f\x34\x40\x89\x48\x1f\x24\xf4\x83\xf9\x8a\xc7\x4b\xbc\x03\x32\x2d\x53\x22\x63\x2a\x11\xc8\x76\x07\x53\x4d\x3d\xa9\x2d\x6a\xbb\xd1\xb5\x85\x32\x8e\xf1\x4d\xac\xd2\x03\xeb\x83\xf6\x06\xdb\xcd\x22\x8c\x43\x94\x00\xd5\x0a\xc5\x52\x11\x81\xcb\x47\x31\x9e\x7f\xd6\xaf\x24\x22\x56\x42\x51\x0d\xfe\xb3\xbc\x63\x2f\x1e\x1f\x87\x7f\x96\x77\x6f\x6f\x26\xa7\x5f\xbf\xfe\x9e\x2d\x80\xe5\xd5\xcc\xe9\x66\x2f\x40\x67\x99\x89\x44\xf7\x9c\x9d\x69\x2b\xae\xd8\x9d\x10\x31\x4b\x05\x9f\xaf\x44\x80\x17\x17\x7a\xf8\xe1\xd1\x6a\xcd\x1f\x98\xca\xc2\x28\xd2\x3b\x6d\x9a\xc7\x70\x50\x93\x98\xa4\x7d\xf2\xc6\xed\xd2\x43\xf6\xb3\xfe\xba\x27\x6f\x4c\x51\x99\x42\xc9\x15\xbf\x17\x6c\x2d\x71\xdb\xb4\x58\x71\xfd\x40\xa1\xce\xb8\xca\xd8\xa5\xd5\x87\xda\x30\x45\x1a\x87\xdb\x7f\xa4\x5a\xf3\xed\xc6\xbc\x4a\x8b\xcb\x93\x48\xf2\x40\x04\xfd\x3c\x63\x67\xa1\xca\x80\x49\xc2\xb2\xc7\xe9\x3e\xc8\x00\x3d\x09\xa7\x4d\xc3\x41\x5f\xa4\x40\x3c\x91\xb2\x0c\x71\xda\x23\x82\x1c\xce\xcc\x8d\x79\x78\x17\x11\x3b\x7d\xa1\xc5\x3d\x0f\x23\x98\xc8\xe6\xbc\x68\x5c\xb3\x14\xd7\x20\xa5\x86\xf5\xe8\x96\xce\x83\x41\xa8\x12\x19\x6b\x2d\x88\xc3\x20\xa9\x06\xf4\x0c\xc2\x98\x84\x22\xf0\xa9\x2e\x64\xaa\x1f\x41\x99\x20\xf0\x1f\x85\x24\x47\x6d\x55\x67\x65\x26\xde\x8e\x92\xfe\x55\x57\xc1\x8b\xe1\x50\x4f\xb6\x1b\x7d\xb4\x87\x77\x08\x06\x0f\xc6\x7f\x95\x79\xb6\xdd\xb4\x35\xb7\xe0\xd3\xeb\xa7\x72\x1d\xa5\x5e\x4b\x55\x32\x5d\xf6\xfd\x96\x25\xfa\x94\x16\xf1\x86\x31\xc0\x8c\xe3\x39\x42\x7d\x19\x74\x35\x83\x02\x64\x7f\xf4\x91\x8f\x7b\x6a\x64\x6a\x29\x0f\x6f\x99\xef\x84\x26\xc4\x00\x5a\xdb\xa6\x73\x05\xc5\xbf\xd7\x27\xa8\x05\xef\x6f\xad\xaf\x1c\xc2\x70\x88\x69\xef\x9d\x43\x8b\xf0\x84\xfe\xd3\xbf\x40\xa2\xe4\x80\x1a\xd7\xab\x2f\x1c\xd0\x24\x70\x78\xfa\x5f\xa2\xad\x56\x84\x48\x7c\xc1\x4d\x34\x44\xa8\xf4\xd9\x31\x15\x03\x3d\x2f\x10\xd9\x81\xa9\x07\x95\x89\xf5\xb1\xc1\x26\x03\xc7\x5e\x6c\x77\x94\x78\xe9\x1e\x67\x2b\x9e\xc1\xc5\x78\x9a\xc3\xbd\x39\x09\x26\x45\x75\x24\x62\x27\xbe\x80\x80\x30\xb8\x7d\x55\xe0\x89\xd3\xf2\xb7\xff\x58\xfb\x77\x98\x8a\x25\xe9\x76\xb3\xdc\x6e\xe2\xed\x26\xdd\x6e\x0c\x38\x86\xf1\xdc\x15\xef\x1f\x89\xcf\x49\x24\xc3\x8c\x63\xd8\xd9\xc7\x3c\x44\xda\x79\x43\x35\x6f\x2c\x04\x7f\xd9\x26\x50\xaa\x5c\x77\xe9\xa1\x82\x8b\x9d\x59\xa3\xf7\x5e\xf3\x2a\xab\x95\xb7\x54\x77\x5c\xb8\x1c\xa2\x94\xb1\xf7\x8a\x21\x24\x17\x07\x9c\xe8\x60\xe4\xed\x8e\xb3\xdd\x58\xa4\x6e\x13\xde\xe1\x22\x02\x28\x4c\xcf\x51\x5e\x46\x3f\xac\xaa\xd0\x54\xb3\xdb\xd3\xe4\x62\x21\xb4\xd9\xed\x74\xf0\x10\x94\xbb\xe8\x02\x8b\xf2\x62\x01\xd0\x3a\xde\x6e\xa5\xf0\x80\x54\x45\x43\xee\xa4\x12\x2e\x11\xa9\x50\x32\x4f\x1d\x34\x6e\x57\x5d\x2c\x12\x2e\x08\x40\x09\x1e\x2e\x6e\xc7\x5d\xdf\xa9\x02\xd7\xd5\x7b\x6a\x70\xe4\x13\x1c\x77\xab\xd8\xe3\x97\xf5\xd6\xe0\x8e\xa3\x22\x6a\x23\x93\x6d\x5b\x74\x1d\x7d\x1b\xdf\xd9\x16\xba\xd6\xef\x71\xb2\xe9\x55\xab\x26\x4e\xad\xa1\xfe\x12\x2b\x55\xd7\x1a\x6b\x18\xa8\x1a\xaa\xa8\x92\xe4\x98\x8e\xd6\xa7\x2a\xb9\xd8\x79\x0a\x5e\x02\x73\x22\xf0\x17\xc5\x3d\x74\xf3\xd8\x74\xec\x4e\x18\x2b\xb1\xbe\xc3\x48\x94\xfa\x17\x2d\xb1\x21\x2e\xce\x3b\x17\x77\xfb\xb4\x33\xe3\x4b\xc4\x06\xcf\x2c\x1c\xee\xf3\x35\x0a\x0c\xc1\x30\x43\xcd\x1d\x10\x62\xe7\x06\x94\x58\x1a\x14\xa2\xc8\x76\x56\x32\x71\xae\x12\x55\x5c\x6e\x15\x8c\x0c\x5d\x2a\x2e\x48\x15\xba\x56\xda\x85\x40\xa1\x43\xcd\x86\x1d\xa1\xf3\x94\xab\xa3\x42\x68\xa8\x06\xc1\x90\xdb\xf8\xd1\x69\x01\x7a\xfc\xd8\x80\x9a\x80\x61\xe4\x8a\xa2\xa3\x5e\x74\x11\x51\xa2\xf8\x0b\xb1\xf0\x76\xa3\xc8\x50\x97\x33\x39\xe7\x91\xf3\xd4\x7d\xe2\x69\x60\x0f\x5c\xd8\xa1\xfa\x0c\x1f\x2a\xb8\x71\xb2\x91\x87\x81\x58\x84\xb1\x08\xf0\x2c\x0e\xbe\x72\xa9\x4f\xed\x54\xac\x9e\x39\x36\xd9\xef\x03\xc7\x2a\x8e\xb7\xa1\x08\x0c\x17\x98\x9b\x7a\x11\xb3\x48\x6b\x33\x64\x27\x22\xf3\x40\xba\xd0\x70\x42\x8f\xb9\xf1\x8e\x78\x90\x5a\x0b\x19\x2a\xba\x6d\x1f\x60\x32\xba\x83\x16\xcb\xa4\xb6\x30\x01\xcf\x2b\x4f\x02\x9e\x91\x96\xd3\x3b\x91\xa6\x12\xb0\xe9\x30\x94\xa9\x26\x99\x00\x67\x9a\x58\x27\xdb\xff\x9c\xaf\xac\x01\xc3\xd6\x21\x72\xee\xff\x2a\xa9\xdb\xf6\x33\x89\x18\xcd\x8c\x8c\xa2\x3a\x91\x71\x2c\xe6\x7a\x85\x8e\x8e\x3c\xc3\xa3\x45\x9c\x24\x41\xee\x4e\xb7\x9b\x79\x4f\x91\x4b\x11\x30\xdd\x05\x29\x19\xf2\x33\x4e\x53\xf8\x00\xba\xa1\x31\x07\xe4\x4d\xa1\xa8\x38\x4c\x2d\x11\xbc\x3d\x79\x46\x0f\x60\xab\xe6\x67\xa4\x88\xa7\x24\xc9\x0f\x80\x72\x9d\x80\x7b\x53\x9f\x12\x30\x9a\xeb\x68\x97\x0f\xb3\x7c\x65\x4d\x4d\x73\xa1\xbf\xde\x7c\x25\xec\x2d\xb7\x2f\xb2\xde\x15\x50\x15\x5c\xab\xe8\xf9\xe8\x62\xf2\x66\x3c\xbb\xbe\xbd\x1a\x5d\xff\x48\x7d\x68\x4c\x88\xb7\xaf\x12\x18\x9c\x5d\x60\x3c\x89\x92\xfc\x83\x60\x1c\x86\xc7\xc0\xc5\x59\xec\xc6\xd2\x3b\x23\x2c\x93\xec\xe4\x0d\x1c\xa0\xa8\xda\x44\x86\xf7\x6f\xb5\x16\x47\x11\x31\xc1\xc1\x3b\xeb\x0d\x34\x80\xb5\xe5\x68\x9c\x99\x84\x9b\xea\x01\x88\x9d\xbc\x69\x68\x05\xcc\x63\x58\xaf\x8f\x54\x29\x39\x40\x31\x19\x47\x0f\xec\x3e\x54\xda\xe8\x82\x90\xaa\x92\x51\xa7\x5b\xdc\x74\xb4\x16\x10\x10\x57\xcb\x98\x12\xe4\x05\x01\x96\x91\xaf\x58\x1e\x87\x1f\x73\xb3\x72\xed\x9c\xb4\x29\xbb\xfb\xdc\xc7\x2b\x64\xf3\x54\x70\xd0\x2b\x87\x3d\x77\x91\x47\xd1\x03\xe3\x19\x75\xa3\xff\x66\x27\x38\x7b\x9e\x6e\x37\xd6\x14\xa0\x2a\x4c\x18\x67\xd7\x27\xcd\xf0\xb9\x70\x3b\x87\x06\x24\x5e\xb0\x5c\x9f\x10\x00\xb9\x20\x2f\x6e\x07\xe4\xdd\x91\x48\x63\xee\xee\x88\x7c\xfd\x1e\x43\x79\x19\x3b\x79\x83\x99\xa0\x6b\x9e\x0c\x50\x8c\xc3\x99\x32\x39\xcf\x7f\x1b\x0c\x56\x16\x3a\xd8\x62\xa0\xff\xa2\x7f\x85\x90\x20\x3d\xe5\x7e\x41\xb8\x41\xc6\x58\xa5\x2f\xfa\x54\xf3\x62\x30\x80\xbd\xe9\xea\x72\x7a\xcd\xfe\x17\x1b\x0c\x52\x1e\x07\x72\x0d\x3f\xfe\x1e\x2b\x18\xff\xdb\xe8\xfc\xea\x6c\x3c\x33\x62\x77\x65\xae\x1f\x06\x3c\x49\x6c\x40\xf7\x70\x2e\xd7\xac\xf1\xff\xfe\x9b\xff\x6a\x0f\xa1\x5e\x8f\xac\x1f\x20\x15\xad\x24\x14\x7f\x1b\x1e\x4a\xb6\xe9\xe9\x85\x94\xb5\xb2\xff\xb0\x90\xb2\x97\x7c\xe8\xe6\x7f\x7d\xf9\xf2\x65\x4b\x87\xbc\xd6\xef\xf4\x32\xa5\xf4\xe7\x47\x8f\x85\xb4\xe7\x3e\xbd\xd0\x65\xda\xae\xa1\xcd\x32\x33\x90\xbd\x9c\xbb\x94\xcf\xf5\x7f\xb6\x7f\x67\x73\x91\x65\xc2\x5f\xbb\xa8\x8a\x3f\xb3\x4f\x3c\xcc\xe0\x82\xc4\x91\x62\xb8\x75\x53\x65\x3c\xcd\xf2\xe4\x58\x1f\x19\xd6\x61\x9c\xd3\xc6\xc8\xb5\x58\x27\xca\xbb\x7f\x5c\xf3\xcf\xe1\x1a\xcc\x36\x64\x74\x0a\xb6\x9b\x35\x4f\x53\x7d\x80\x2e\x87\x7e\x94\x4e\x31\xc7\xda\xc2\xb2\x15\x75\x54\xb8\xb0\x9c\xcc\x81\xe6\xc9\xda\xf2\xf2\x69\x25\xc8\x89\x44\xcd\x7e\xba\x66\x92\x09\x95\xf1\xbb\x28\x54\x2b\x06\x55\xc4\xc2\x08\x2a\x5c\x87\x30\x7c\x53\xa1\x64\x94\xdb\x47\xfa\xf8\x26\xe9\x7b\x0e\xb2\xea\x70\x9d\xaf\x19\x5f\x43\xf8\x91\x5c\xd8\x0b\x79\xb4\xf3\x5d\xb8\x67\x11\xcb\xc4\x63\xbc\xbe\x42\x14\xfe\x57\x2f\xbf\xfb\xe3\xf9\x31\x7b\xf5\xf6\x98\xbd\x7a\xf9\x96\x72\x55\xfe\x25\xe7\x71\x06\x27\x3e\xd3\x81\x95\x18\x1f\x19\x67\x95\x7d\xb8\x14\x6b\x0a\x46\x33\x6e\xb7\x22\x2d\x03\xf9\x57\xeb\xff\x16\x8d\x1c\xb2\xc1\x2b\x6d\x9b\xa5\x42\x89\x38\x83\x94\xa5\x3c\xc6\xeb\xcd\xc0\xd4\x41\x99\x85\xdf\xac\x23\x9c\x8e\xdb\x8d\x82\x91\xab\xa5\x7e\x74\xb5\x87\x11\xe8\xbb\xdd\x50\x61\x2c\xff\x84\x2e\x63\x2f\x4e\xc5\x82\xe7\x51\xf6\xba\x78\xf6\x4f\x1f\x50\xdd\xfb\x91\xbd\x30\x91\x0b\x5a\x9a\x3e\xdb\xf1\x3c\x63\xaf\x6b\xdf\x6d\x19\xa6\x18\x39\xae\xfb\xdc\x38\x8f\xe1\x4a\x60\xcd\x1f\xf4\x89\xd5\xda\x5b\x10\x6e\xaf\xbb\x33\xbd\x17\x18\x9e\x42\x4d\x7c\x13\x21\x68\x97\xae\x40\x78\x3e\xe9\x7b\x1e\xdb\xe3\x28\xda\x61\xda\x8e\xb5\x00\xe8\x20\x94\x41\xcb\xd3\x7b\xd2\x93\xfe\x54\xad\xbd\xcf\xfe\xb2\x81\x37\xe3\x30\x4d\xc0\x6f\x5d\x7c\x9d\x97\x2d\x9f\x02\x16\xe4\x17\xc5\xda\xfa\x7b\xd8\x49\x4e\xce\x26\x7a\x95\x86\x25\xbb\xe2\x10\xc3\x9d\xf0\x98\xc9\x4c\x1f\xa3\x31\xd0\x9d\xa9\x30\x10\x36\xb2\x40\x41\x97\xe8\x12\x54\x5a\xcd\x69\x9e\x6e\x37\xa2\x18\xd8\x2f\x84\xad\x5e\xa8\xdf\xb3\x44\xc4\x81\x6e\xb1\xe3\xa7\x88\x5a\x32\x92\x4c\xc0\x1a\xfb\x98\xc3\xa5\x56\x29\x83\x00\xf7\x5a\xc1\xbe\x47\xf7\x13\xf8\xbd\x20\x40\xc8\xdf\xf3\xe6\xdb\xff\xd2\xc3\xd7\x44\xdd\x3b\x0c\xf1\x2a\x7e\x38\xd1\x91\x4d\x09\x44\x4d\x45\x30\x5e\xc4\xac\x26\xdf\xfd\xeb\xff\xd0\x73\xd2\x4e\x4d\x6a\x98\xd4\x04\x81\x95\xe6\xf6\x8e\x18\xa2\x7e\x85\xe9\x66\x1d\xe2\x4b\xcc\x73\x56\x79\xb9\x5e\x6e\xb8\x4c\x79\x26\x6a\x2e\x4f\xe1\xb0\x2f\x63\x51\x66\xd6\xcc\x24\xe3\x31\x8c\x23\xaa\xf2\x70\x69\xc3\x73\xea\x2f\x4f\x8f\xf2\x78\x27\x13\xfc\x5e\xa4\x80\xd3\x0e\x9f\xbb\x5e\xd1\x66\x0e\x26\xba\x0c\xe5\x5d\xb9\xb8\x3c\xa7\x7c\x29\x17\xe3\xbf\xde\x36\x56\xe7\xe0\x79\x88\xf2\x37\xe7\x0e\x03\x8b\xe2\x37\xb9\xb8\x3c\xff\xc1\xe3\x06\x21\x08\x4d\x2e\xf8\xba\x81\x98\x85\x2e\x03\x3e\x51\x96\x8a\x65\xa8\x32\x91\x96\x22\x3b\x68\x71\xda\x54\x2c\xbb\x61\x44\x8c\x22\x52\xea\xd4\xdd\x52\x17\xfb\xb4\x12\x29\x7a\x16\x8a\x20\x13\x73\xb9\x1a\x2a\x70\x46\x66\x64\xde\x2f\x32\xcf\xe4\x31\xad\x93\x75\x1e\x01\x21\x95\x12\x0c\x72\xa9\x85\x9f\x18\x59\x84\x94\x34\xe8\x9f\x49\x08\xa7\x33\x1e\x0d\xf5\x81\xbd\x58\x8a\x58\xa4\xb0\x35\x84\x0b\x26\xd7\x61\xd6\xb0\xe9\xd3\x82\xfb\x05\x2c\x5d\x88\x4f\xec\xca\xa0\xb6\x93\x3d\x82\x30\x17\x6b\x89\x3e\x5d\xae\x14\x35\x59\xc4\x27\x30\xc6\x5b\x04\xc5\xe4\x18\x92\xa5\x44\x39\xa6\x44\x36\xc4\xd4\xbb\xc7\xc7\xe1\x99\x5c\x86\xf1\x75\x98\x7c\xfd\x7a\xc4\x4c\x80\xe5\xe8\x6a\x62\x7e\xd0\xe7\x3e\xbc\xea\xe3\xb1\x2b\x4f\x19\x9e\xa3\x7c\x0e\x49\x62\x22\x0f\xd8\x22\x8c\xf5\x26\x7a\xa4\xeb\x35\x4e\xe8\x21\xbb\x01\xff\x96\xf8\xb2\x5b\x6f\x5e\xa9\x17\xce\x3e\x70\x2b\x98\xb2\xb2\x4c\xc2\x96\xbc\x90\x90\x43\x58\xdf\x44\x1b\xcb\x99\x49\xb8\x5f\xf2\x9a\x72\x90\x96\x58\xf1\xa0\xb4\x8b\x47\xec\xae\x76\x02\x5e\x2e\xc5\x16\x32\x8f\x81\xa4\x0a\xe2\x50\xd1\xa3\xda\xa8\xa0\xe3\x72\x2b\x19\x9e\x51\x68\xe7\x92\x2f\xa7\xa1\x7a\x53\x73\x53\x55\xe5\x3d\x1d\x66\xe6\x76\x43\x8d\x56\x59\x00\x05\x58\xe8\x80\xc6\x66\x94\xdf\x26\x36\xf9\x0b\xe9\xc5\x7f\xb5\x2b\x5c\x7f\x03\x61\x14\x27\x6b\xc0\x10\x53\xc5\x3e\x09\xb0\x04\x03\x6a\xc6\x99\x3e\x59\xcb\xc0\x4b\xe8\x3b\xe2\x6c\xbb\xd1\x56\x0c\x4f\xb4\x49\x48\x9f\x7b\x2e\xa4\xbb\x4e\x6f\x6f\x87\xf5\xa6\xb4\xa9\x1e\xc8\x24\x81\xcb\x17\xb9\x5c\xa6\x62\x09\x61\xa0\x6e\x36\x40\x35\x43\x76\x82\xb9\xf2\xa9\xc8\xd2\x50\xe8\xa5\x55\x2e\x15\x35\x99\x2f\xbc\xc1\x7f\xe6\xc9\x04\xbe\x1b\xee\x9c\xb9\x3e\xa1\x60\x25\xdf\x93\xd2\x14\xae\x93\xea\x49\x4f\x1b\x7b\x62\xbb\xb9\xdf\x6e\xcc\x1d\x98\xb9\x80\xf6\x07\x65\x49\x0e\x55\x37\xb2\xe9\xb8\xdd\x6b\xc8\xea\x3e\x7a\xf3\xfa\xe6\x5d\xb4\x15\xfb\xd1\x90\x3d\x79\x48\xc8\x74\x89\x71\xd4\xe0\x1c\xb7\xbe\xf8\x63\xe0\xad\xd2\x13\xd9\xb0\x02\xed\xac\xca\xa5\x72\xcd\xe3\xb5\x8a\x48\xc4\xa1\x41\x25\x77\xbc\x62\xdf\x9b\x6b\x08\xb3\xb8\x79\xd5\x96\x17\xe5\x5d\x71\x4e\x56\x63\x1b\x65\x4a\x37\xf1\x0d\x12\xa2\x16\x75\xf6\x68\x8f\xcc\xcb\x2d\xd9\x69\xc8\xae\xf0\x26\x35\x0f\xac\x1d\xea\x24\x0e\xaf\x14\x3d\x2a\x1a\x87\x71\x47\xf5\xba\x7d\xfc\xc6\x41\xdd\x69\x77\x29\x29\xd3\xba\xbd\x94\xc2\x71\x3a\xac\xa1\x18\x18\xe2\x07\xe2\xb4\x2e\xa7\x2e\x5c\xaf\x55\x75\x43\x15\xd9\xaa\xb3\x89\xd6\x11\xf1\x3d\xbb\xe7\x69\xc8\xe1\x72\x0c\xbc\x59\x90\x03\xa0\x44\xa3\x31\x22\x5c\x21\x16\x1c\x89\xf8\x3e\x4c\x65\x6c\xe3\x01\xfc\x38\x9c\x62\xc9\x31\x86\x48\xbb\x46\xd5\x88\x9c\x16\x4d\xbc\xde\xf4\xa3\x6c\x4a\xc1\x40\x58\x35\x59\x73\xb7\x50\x62\xba\xb6\x06\xc1\xa5\x40\x95\x0e\x43\xc3\xdd\x57\x7a\x21\x2a\xad\x83\xc3\x56\xf3\x41\x3c\x20\x31\x6b\xf5\x86\xf8\xf1\x71\x38\xc3\xdf\x6c\x82\x62\xfb\xfe\x26\x20\x44\xcd\x3f\x46\xbb\x3c\xfa\xdd\x8b\x63\xb2\x82\x2e\x2a\x17\x85\x7f\x12\x26\xcf\xc9\xd8\x9e\xcf\xd8\x98\xba\x4a\xed\xa4\x79\x96\x96\x16\xe1\xa3\x5d\xd6\x9f\xc5\x22\x15\x75\x63\x80\x9e\x3e\xee\xcd\xf6\x41\x66\x55\x6a\x1d\x57\x07\xd9\x17\x0f\xb6\x0d\xf6\xb3\x44\xf0\xf5\x66\xdb\xa9\x59\x33\x6a\xb3\x69\xb3\x2a\x4c\xa0\x33\x57\x2a\x5c\xc6\x2d\x67\x0d\xa3\x01\x5f\x2c\xc4\xbc\x71\x25\x41\x99\xed\xdf\xd6\x08\x6c\xfd\xb4\x26\xbe\xf1\x19\x96\xff\x4a\x3c\x63\x8f\x1d\xa0\x08\xba\xf4\xd7\xe3\x3d\x37\x80\x8a\x1a\xad\x7b\x00\xa4\x22\x14\x51\x36\x87\xef\x18\x3f\xb8\xc6\xa4\x46\x40\xae\x41\x8f\x0e\x82\x40\x20\x1b\xbf\xf7\x0c\x9f\xce\xd4\x8f\x2a\xfa\x71\x66\x9e\x92\xf6\x50\xd5\xb4\x16\x61\x7e\x6c\x09\x19\x66\x0f\xcc\x8b\x0b\x59\x40\x3a\x75\x18\xf9\xc5\xbb\x2d\x83\x3f\x83\x43\x29\xf0\x6f\x17\x3e\x99\x93\x37\xe0\x00\x2a\xaf\x25\x91\x5c\xea\x97\xc8\x23\x69\x6c\x6f\xaa\xf5\x89\xeb\xa6\xbc\xac\x55\xc5\x21\xbb\xa6\x04\x1e\x56\x13\xcb\x47\xda\xa9\x19\xc0\x43\xca\x34\x13\x01\x03\x62\x70\x60\xf3\xed\xd9\x79\x19\xc0\x25\x86\x78\xf9\x92\xf1\x0f\x82\x29\xb9\xc6\x3b\x19\x32\x96\x6a\xcd\xd3\x8f\xb9\x60\xaf\x4d\x88\x44\x91\x41\x89\xd7\x87\x49\x8a\xd1\x56\x41\xce\x32\xb1\x4e\x28\xd7\x88\xbb\x15\x73\x2e\xfa\xce\x40\x1e\xf5\x12\x2f\x7f\xea\xd5\xf6\xcb\xab\xeb\xc9\xe5\x05\x49\xcb\x6d\x1e\x53\xfe\xf9\xcb\xe9\x5b\x36\x3a\x3d\x9f\x5c\x50\xa3\x4d\x3f\x9b\xcc\xae\xa7\x00\x9c\xce\x4e\xc7\xec\xec\xe8\x72\xfa\x76\x74\x31\x99\x8d\xb4\xe0\x16\xa9\x94\x56\x6d\x62\x1b\xd5\xbd\x39\x9d\x5c\x5f\x4e\x29\xc9\xfa\x69\x4f\x55\xcf\x47\x17\xa3\xb7\x63\x4a\xe2\x74\x3c\xbb\xba\xbc\x98\x8d\x7e\x38\x1b\xf7\x10\x4a\x5d\x56\xf8\x85\x89\x9b\x0a\x5d\x9a\xfc\x9c\x7e\x71\xb2\x97\x00\xf1\x80\x1d\x0d\x06\x3c\x49\x20\x58\x49\x51\x46\x4b\x9b\x80\x58\xba\x60\xaa\x23\x0f\xee\x11\x08\xf0\x2d\x20\x1c\x4f\x92\x82\xe3\xd8\x83\xb5\xca\x56\x82\x1d\xe1\x59\xee\x88\xf1\x2c\x4b\xc3\x3b\x3a\x16\xaf\x4d\x91\x84\x67\xab\x7d\x1b\xa1\x7b\x60\xdf\xb2\x5e\x0c\xdd\xde\x22\xcc\x75\x38\x46\x94\x3d\xed\x7b\x18\x11\x4f\xe8\x0c\x3c\xbf\x0f\xc0\x8e\xd8\x53\x06\xdf\xb3\xdc\xbe\xf5\xa5\x3d\xcb\x91\x89\x51\x97\xad\x69\x70\x97\xe9\xd2\xe0\x2e\x68\x23\xa1\xdf\xb5\x93\x2e\x8b\xc9\x9d\x38\x07\x94\x9f\xad\xe5\x07\xe0\xb5\x2b\xe7\x61\xac\x55\x50\xe6\xe9\x64\x2d\x5d\xfd\xe3\xe3\xf0\x32\x5d\x9a\x13\x1e\x8f\x52\xc1\x83\x07\x44\x50\xa3\x76\xa5\xb3\x72\x32\x58\x49\x00\x42\xa3\x69\x4b\xe9\xd7\xed\xdf\x3b\x56\x5a\xc6\x6d\x83\xdc\x77\xfc\x1b\x53\x76\x40\xfd\xfe\x9a\x58\x98\x36\x20\x36\x2f\xd1\xbd\x7b\x62\xf7\x51\x90\xcc\x4f\xe9\xa8\x0c\x61\xd5\x5c\xa6\x4b\x72\x05\xf7\xe5\x52\x0b\x78\x7b\x3a\x6a\xa7\xa1\xec\x84\x94\xae\xca\x74\xe3\xf1\x52\xa2\xe7\xf0\x0e\x97\x21\xc0\x43\xb3\x35\x4f\x12\x04\x2e\x84\x64\x0e\x3e\x47\x6c\x33\x00\x37\x34\xd9\x22\x70\xd1\xf7\x39\x13\x69\xcc\x23\x16\x06\x22\xce\xf4\x19\xc7\x58\xc9\x54\xc0\x03\x51\xf1\xbd\x48\x53\xc0\x89\x31\x08\x8a\x01\xc6\x13\x19\xeb\x9c\x05\x61\x2a\xe6\x0d\xf7\xf1\xb3\xfc\x0e\x8e\x46\x18\x21\x5b\xc5\x36\xe4\x79\x15\x26\xbc\x02\xf9\x58\xc4\x13\xf5\x54\xcf\xc1\x53\x7c\x03\x2d\xbd\xbc\xe8\xee\x0a\xa7\x02\x82\x99\xb4\xf1\x9a\xad\x44\x25\xec\xcf\x2e\x5c\xe6\xd4\x04\x67\x26\xbe\xc8\x00\xff\x31\x79\x18\x98\x2c\xdc\xb9\x5c\x27\x91\xa0\xe3\x6b\xcb\xad\xaa\xc6\xfe\x96\x62\x95\x6c\xaa\xa0\x7f\x48\x83\xe5\x0e\x5c\xde\x0b\x19\x2a\x0c\xc8\x35\x51\x4f\xbe\x16\x99\x48\xd7\x61\x4c\x1e\xd2\x5a\x93\x5a\x88\x62\xe3\x8b\xd3\xc9\xc5\xdb\x5e\x63\xf5\xea\x72\x7a\xdd\xb3\xc0\x6c\x02\x86\x64\xaf\x42\x3c\x0c\xca\x79\x25\x44\xf1\xab\x6a\x96\x48\xc2\x1f\x78\x9c\x11\x27\x0f\x40\x92\x12\x99\x48\x15\xe3\x0a\x30\x3d\x7b\x6a\xa5\x4c\x8a\x65\x49\x06\x80\x08\x43\x78\x20\xe3\xbe\x27\xde\x8d\x2a\x77\x44\x07\x9b\x84\x0a\xd4\xd6\x7f\xae\x31\xa3\x27\xa8\xa4\x72\x0a\x3d\x58\xe3\x8c\xe9\xd3\x1c\xd4\x88\x2e\x2c\x7d\x6a\x07\x17\x56\xe1\x33\x29\x5c\x08\x4d\x8e\xfc\xfd\x9b\xe7\x79\x9a\x7e\x63\xcd\x2b\x7b\x88\xe8\x16\x36\xc4\xcc\x9c\xb7\xc6\xca\x58\x01\xec\x5e\xa4\x5e\x1a\xa5\xdd\x71\xd7\x3c\x9b\xaf\xa8\x0d\x57\x28\xb6\x96\x99\x72\x35\x30\xe0\x68\xb1\x30\xe0\x8d\x00\xad\x57\x98\xdc\x91\xb6\x67\xfc\x9c\xe0\xb2\x5a\x06\x6a\xa3\xb3\x7e\x9c\x60\xbd\x3c\x3e\xab\xf0\xbe\x72\x1b\x44\x82\xb1\x15\x45\xf2\x13\x38\x7d\x8a\x54\xa2\x6e\x98\x76\xa6\xb2\x58\x42\x04\xa1\x4c\x43\xe5\x82\xc3\x78\x91\x77\xd5\x09\xdc\x0e\xb4\x31\x90\x59\x74\xee\x4a\xf5\x2d\x5a\x54\x86\xf1\x3a\x6e\x23\x05\xb4\x1e\x6d\x72\x7c\x09\x31\x8a\xc7\x6e\x64\x68\x3c\x67\xca\xdb\xd8\x5a\xb7\xdf\x93\xd6\x0d\x37\xaa\x72\x84\x94\x51\x91\xb5\x12\x90\x83\xa7\xeb\xce\x4d\x00\x20\x59\xbe\xb9\x99\xa5\x26\xda\xd6\xed\xa7\x78\x9d\x9e\xcd\x95\xdb\x9e\x84\xa5\x26\x00\x04\xc5\xbb\x1a\x47\x75\x9a\x47\xe4\xae\xdf\x5c\x81\xf5\x15\x74\x6f\x90\x4b\x26\x6c\x10\x0c\x2e\x09\x44\x03\xbb\x33\x04\x1c\xe8\xa1\xb0\x19\x77\x3e\x0b\x69\x26\x4d\x1c\xca\x43\x31\xfb\xf4\x8f\x77\x21\xe9\x77\x7d\xee\xaa\xf3\xf8\x09\x95\x67\xd2\xd8\xd8\x46\x6a\xd7\xb5\x0a\xbd\xde\x16\x54\xc2\x88\x00\x08\x81\x0e\xeb\x97\x48\x17\x32\x5d\xeb\x5d\x2f\x84\xe8\x6b\xc3\xd7\xa1\x0d\x60\x34\xc8\x04\xfb\xb4\x12\x10\x27\x6f\xa5\x19\xbc\x9d\xc8\x1e\x4a\xf5\xf8\x8e\x25\x35\x12\xc6\x70\x51\x94\xe3\x2e\xa7\x27\x56\x0a\x2c\x08\xa6\x3a\xbe\x08\x63\x83\x78\x69\xaa\x4b\x99\x0a\xbd\x6c\x4e\x73\x4a\xd3\xc7\x45\x72\xc2\x41\xf0\x74\xf9\xc8\x6a\x97\xe4\xe2\xf2\xd3\x9c\xfb\x2c\x56\x03\xb5\x81\x61\x28\x76\xe9\xa8\x6a\x93\xde\x76\x2f\x54\x1b\x17\xce\x08\x31\x7d\xcd\xab\xfa\x4f\xa3\x42\xe1\x81\x6b\xba\x22\xb0\xaa\xd4\x8a\xa8\x70\x25\xf5\xd5\x60\x05\x4c\x43\x35\x31\xee\x7a\x62\x63\x00\xfc\x3e\x5a\x21\xb9\xa1\xda\xfe\x03\xb7\xff\x32\x6c\x75\xd1\x7f\xdb\xbf\x43\x25\x82\xc0\x02\xd0\x02\x5f\xd7\x56\xd0\x60\x1f\x33\xa2\x04\x59\x83\xef\x74\x60\x77\x0f\x8c\x6b\x6b\x2d\x0b\xe7\x79\xc4\xd3\x2e\x48\x52\x55\x19\xca\xa4\xa0\x57\x22\x71\xac\x50\xc0\x77\xa4\xb4\x01\xe2\x81\xf9\x4a\x4a\x25\x98\x08\x71\xae\xe9\xbd\x5f\x4f\xac\x20\x54\xf0\xef\x21\xfb\x41\x6a\x53\x03\xc2\xef\x38\x00\xe7\x66\x2c\xd1\x53\x26\xcb\x70\xed\xb8\x33\x36\x57\xe0\x10\x61\x80\xbc\x0b\x8f\x5a\x24\x15\xc1\x4a\x86\x0a\x39\x05\x4c\x95\xb9\x57\xe5\x3b\x99\x2b\xfc\xaa\xf9\xbd\xf8\x02\xdf\x34\xf3\x6c\x5c\xb0\x51\x45\xfe\xd9\x8b\xe8\x53\x7a\x62\xe7\x51\xc6\xe3\xed\xa6\xc8\x58\x87\xb8\xbe\xed\x7f\x16\xea\x50\x51\x7c\xa6\x2f\xf0\x16\x8b\xf1\x25\x27\x11\x2b\xa6\xc2\x5e\x4a\x7d\x19\xdc\xcb\x9c\x32\x2a\xcb\xa4\x0e\x18\x78\xcf\xe7\xa5\xa4\x7d\xff\x63\x57\x3d\xdf\x9d\xfd\x7e\x1e\x37\x83\x4b\xcf\xaf\xc3\x69\xfa\x98\x87\x48\xc6\x22\xfa\x78\x05\x11\x89\x85\x35\x67\x3f\x78\xbc\x43\x8d\x52\x42\x9f\xab\x68\xae\x67\x67\x14\x91\x77\xfe\x14\xb1\x11\x8f\xe3\x3c\xa2\xcf\xea\x58\x13\xa4\xbf\x3a\x0a\xa4\x5a\xd7\x1d\xbd\xcc\x58\x52\xd5\x2a\x93\x52\x8d\xff\xae\xbf\x12\xa1\x72\x8e\xd5\x8c\x7f\x10\xd4\x57\x6d\x57\x43\x2f\xc4\xe8\x5a\x75\xdb\x70\xa3\x36\xa9\x48\x24\xa8\x14\xb0\xf7\xbf\x2b\x81\x7a\xbc\xff\x5d\xc5\xd7\x7b\xcc\x12\x1c\xbd\xb9\x12\x36\xc7\x08\xe9\xf9\x08\x6d\x6f\xaa\xa9\x21\x3e\xce\x5e\x92\x88\x68\xbb\xa9\xa9\xb4\xe4\x1f\x66\xdf\xeb\x75\xc8\xae\x08\x36\x01\x49\x77\x02\x39\x61\x4d\xb3\x3e\xe6\xda\xb4\x0b\xec\xd6\xa2\x4d\xa8\xf4\xc1\x03\xfa\xd0\x1b\xf2\x83\xde\x48\x2f\x67\xe4\xa5\xfa\x99\x07\xe1\x2a\xf4\x32\xb1\xdd\xc0\xea\x93\xca\x44\x2f\x8d\x09\x62\xbf\x59\x1b\x58\x57\xa1\x8d\x63\x73\x4d\xad\xf5\x24\xd0\x10\x49\x7e\x98\xab\x0a\xcd\x97\xb5\x11\x7c\x94\x8c\x3c\x0e\x2d\x22\x12\xe9\x67\xe6\xba\xfb\x54\xd8\x46\x02\x66\x5d\xfa\x8c\xdf\xc9\x3c\x0b\x9b\xbb\xb4\x5a\xea\xfe\xf1\x71\xf8\x4e\xa4\x0a\x60\xd0\xcb\x2a\xb6\x2b\x78\xd4\x55\xb7\x7b\xac\x81\x95\x2a\x6b\x53\xd8\xa2\xae\xeb\x15\xb3\x0d\x00\x04\x5e\x2e\x9f\xae\x49\x08\x10\x03\xcd\x5e\x3a\x09\x17\x46\x71\x4f\x78\x77\xea\x20\x0c\x02\x3b\x9d\x84\xb5\xa4\x5a\x43\xbd\x53\x9b\xdb\xad\x74\xba\x1f\xd2\x30\xce\x20\x01\xc9\xcc\x33\x16\x84\x7c\x19\x4b\x95\x85\x73\xb0\xd9\x54\x16\xd0\x58\x4c\xa3\x85\x9e\x31\x3e\xb4\xa4\x5f\x5a\xdb\xde\x02\x9d\xb1\x26\x43\x47\xf7\x8e\x11\xd8\xa0\x8d\xcc\x33\xc6\x59\x04\xd7\x43\x0b\x93\x7e\xa3\xd7\x99\xca\xc9\xbe\x72\x90\xe7\x0e\xeb\xcb\x9d\x50\xcd\xdd\x73\x05\x9d\xfb\x74\x3c\x62\x77\x7c\xfe\x41\xd0\x21\x34\xb6\x59\x11\xaa\x81\x2e\x37\x87\x99\x6a\x33\xe5\xfc\x33\x74\x24\x8a\x93\xfd\x91\x77\x9a\xb6\x59\x08\x1f\x73\x61\x40\x65\xfd\x7d\x59\x6f\xd9\xca\x3a\x16\x05\xa2\x5f\x8a\x12\x50\xab\x56\x94\x89\x38\x30\x0e\x82\xa5\xde\xdb\x4f\xc7\xa3\xa6\xee\xd3\x6d\x34\x73\xad\x43\xfb\xec\x9b\x84\x40\x79\x17\x89\x35\x4b\xc5\x5a\xde\xeb\x2e\x0c\xe4\xa7\x18\x21\xc2\xed\x32\xac\x2d\x1d\xb1\xf6\xfc\x27\xe4\x12\x0c\xc2\xa0\x5d\x91\x34\xb8\xa3\x1c\x42\x7b\x52\x6d\xe7\xe2\xda\x51\x5d\x80\xb3\xed\x26\xda\x6e\xe6\x2b\x9e\x2e\x8b\x1c\xc4\x52\xdf\x43\xe5\xe4\x22\x9c\x4a\xc0\x01\xc4\xf3\x1f\x64\x19\xde\x3d\x30\x15\x2e\x63\x1e\xa1\x55\x0f\xff\xfc\xfa\x75\xc8\xc6\x9f\x43\x97\x9f\x0e\xc4\x98\x61\x76\x22\x83\x86\xc9\x8f\xa2\x73\xe5\x2e\x17\x5c\x2c\x1b\xc8\x64\x15\xf9\x33\x99\x66\xa1\xc0\xc4\xf4\xb2\x7c\x4a\x73\x60\x3a\xa8\xa5\x3d\x70\xb9\x68\x05\xab\x09\x02\xdb\x21\x71\x01\xde\xa8\xb2\x48\x02\x22\xbf\x0b\x9e\x72\x3c\x64\xf0\x35\x05\x0b\x91\x2c\x20\xd3\x7b\xa9\xb6\x86\xa9\x15\x5e\xd7\x9e\x86\x18\xef\x56\xa7\x8d\x0b\x14\xb6\x9f\xa7\x20\xc6\x65\x27\x10\x39\x65\xa9\x0e\xec\xb5\x6c\x94\x2b\x96\xa4\xa1\x3e\x92\xc4\x0c\x3e\xae\x18\xb2\x99\x1e\x09\xe1\x5a\x7c\x19\x44\x9c\x89\x4c\x7f\x64\xa1\x14\x7f\x10\x5f\xa8\xbd\xa1\xf9\xae\xd0\x99\xcd\x14\x30\xdc\x55\x9e\x9a\x00\x4b\x77\xf6\x2e\x47\x31\xd3\xe0\x6e\xba\xa8\xf0\xe0\x19\xeb\xcb\x76\xad\xb5\x74\xe2\xef\x57\xe9\x4e\x51\xa2\x4e\x00\x92\xb1\x9c\xf8\x32\x65\xc0\xc9\x67\x73\xab\x20\xcf\x1c\x8d\x35\x03\x59\x4a\xf9\x5b\xe2\x7b\xf9\x20\x10\xe0\xc2\xdd\xb3\x01\xe5\x73\x1e\x1b\x66\xf8\x28\x2a\xaf\x70\x32\x67\x96\xc5\x2f\x54\x06\x7a\xd2\x4f\xc3\x52\xc5\x29\xae\xc4\xa7\xaf\x95\xe1\x31\xe9\xd0\xc3\x06\xa9\x30\x5e\x62\x7d\xec\x05\x4c\x5c\xc3\x17\x8d\x1b\x88\x1d\x86\x54\x36\x71\x73\x6b\x7c\x6d\x10\x25\x8d\xbd\x80\xc9\xab\x5b\xa4\x55\x76\xa3\x9c\x40\x11\xe8\xa7\x63\x05\x70\x0b\xd4\x70\xf8\x5d\x7f\x1b\xdc\xb1\x1f\x6e\x26\x67\xa7\x57\xa3\x93\x9f\x6e\x2d\x3a\xd8\x9c\x9d\x5c\x9e\x9f\x8f\x2e\x4e\xf5\x1f\xd6\x7d\xa8\xff\xbd\x60\x25\xb8\x3e\x40\x12\x0b\xe4\xfc\x83\x48\x07\xe1\x9a\x2f\x05\x3b\xbd\x3c\xf9\x69\x3c\xbd\x9d\x9c\x8f\xde\x8e\x7f\xc1\x8a\xff\x36\x08\x59\x29\x97\x5e\x97\xfa\xc0\x4e\x27\xb3\x9f\xf4\xbf\xd6\x0c\x71\xfb\x7e\xd9\xc1\x2a\xd3\xbf\x24\xcc\xd6\xa3\xd8\xec\x7a\x74\x02\x45\x32\x76\x3d\x39\x1f\x5f\xde\xc0\x1b\x39\xfb\x71\x3c\x3a\xbb\xfe\xf1\xf6\xe4\xc7\xf1\xc9\x4f\xb7\xd7\x3f\x5f\x21\xc0\x59\x11\xae\xc4\xa6\x97\x37\xd7\xe3\x5b\x0b\x76\x06\x2a\xf9\xd1\x65\xbf\x98\xbf\x6d\x8f\xd9\xbf\x41\x82\xfd\x03\xae\xab\x51\x30\x86\x65\xe1\x53\x07\x9e\x06\xdf\x64\x9d\x47\x59\x98\xe0\x37\x51\x55\x7e\x71\xf3\x1d\xe6\x0b\xfc\x04\xbb\x9d\xd9\xcf\x01\xdb\x5a\x5f\xe3\xd8\xfc\x52\x33\x36\x0b\xb0\xd0\x12\xdc\x20\x0c\x4d\x9f\x94\xbc\x5e\xa1\xbf\xdc\x5c\x5e\x8f\x7a\x35\x01\x19\xff\x4e\xc5\x22\x8c\x43\x1b\xea\x02\xbf\xf5\x0a\x22\xe2\x36\x9c\xda\x06\x23\x00\xda\x75\x55\x56\x87\x78\x22\x54\x47\xaf\x58\x90\x50\x80\xd8\x67\x42\x2f\x6d\xd1\x83\x03\x99\x91\xe9\x92\xbd\x10\x9f\x2d\x54\x16\xc4\xfd\x4a\x0c\x16\x4b\x85\xca\xa3\x0c\xed\x49\x90\x80\x3c\xf3\x0b\x17\x94\x01\x8a\xd1\xa8\x43\xba\xf6\xed\xdf\x4d\x8a\x82\x40\x24\xc8\xb2\x1b\xc6\x2e\x83\x18\x9f\x80\x80\x34\xec\x85\x0a\x31\xdc\x19\xb4\x12\x5f\x5c\x48\x71\x06\xd8\x5d\x91\xed\x10\x1f\x9c\x46\x6f\x95\x36\x15\x82\x58\x63\x3a\xf5\x46\x53\xee\x29\xd1\x20\xe3\x65\xaa\x69\x4a\x93\x1e\x95\xaf\xd9\xd5\x1b\x53\x3b\x14\xda\x7d\x30\xd3\xf1\x5f\x6e\xc6\xb3\x6b\x2a\x8c\xea\x74\xac\x97\xc6\x31\x15\x41\x35\x1d\xcf\xc6\xd3\x77\xe3\xd3\x5b\xb3\xec\x5c\x4e\xaf\xa9\x88\x5c\x78\x66\xde\x33\xc5\x88\xc0\x5c\x13\x09\x4c\xe2\xa0\x4c\xc7\xf0\x98\xd4\xe9\x12\x90\x17\x49\xb7\xa4\x7e\xcc\x5e\x53\x3c\x49\xa0\x20\xd5\x86\xa6\x22\xa4\xb6\xf0\x94\x56\xd6\x2e\xd7\x8d\x91\x33\xd8\x6f\x84\x88\x9b\x8b\x8b\xbe\xf1\x33\x53\xc1\x83\x01\x60\xa4\x1a\x88\xef\x0c\x93\x6f\xc3\x78\x21\xc1\x9c\x4d\x05\x52\xe7\x93\x67\x1f\xbc\x34\x14\x31\x8b\xc4\x1c\xac\x65\x25\x72\xbd\x38\x83\xaf\xd9\x71\x31\x29\x4c\xc1\xfe\xcc\x52\xcc\x0e\xaf\xe1\x49\x20\x3f\x84\xe0\x51\xf4\xc0\x02\x11\x09\x3d\xc5\xd3\x64\xc5\x63\x11\x98\xa4\xd5\x3f\xf5\x6d\x6d\x83\x28\xb4\xc5\xd7\x09\x4d\xe7\xf8\x4e\xe6\x91\x71\x62\xb3\xfb\x94\x87\x30\x91\x95\x31\xb4\x53\x9f\x9e\x42\xcb\x16\x11\x70\x00\xfc\x89\xf9\x82\x3b\xe8\x65\x2e\xc3\xce\x65\x20\x22\xa4\x45\x75\x7f\xda\x4d\x22\x0e\x98\xb8\x17\xe9\x43\xb6\x02\x0b\x53\x29\x39\x0f\x0b\x3c\xb0\x30\xa3\xba\xa5\xb5\x01\x2d\x15\x8b\xac\x70\x4d\xc0\x51\x72\x8d\xe8\x73\xa0\xc0\x76\xa3\xd8\x9f\x0e\xd2\xc0\xe7\x52\xbf\x59\x3b\x73\x9d\x56\x93\x85\x59\xe2\x35\x44\x74\x29\x7b\xb5\x76\x19\x05\xbb\xb7\x6b\x19\x24\x17\x5d\x88\x4f\x3b\x8f\xfe\xf4\x3e\x7f\xf9\xf2\x5f\xa8\xed\xa3\xb6\x7d\x78\x01\xd7\xaa\x55\x20\x92\x3c\x54\x88\x20\xd4\xa0\x1a\xc0\x55\x11\xca\x31\xab\x5d\x53\x2f\x25\x70\x6c\xaa\x4b\x9c\x2d\x9f\xd8\xb0\x9b\x4e\x22\x99\x07\xec\x8d\x3e\x60\xa7\x0f\xbd\x3e\x2b\xd4\xd3\x90\x28\x5b\xa9\xcd\x34\xbf\x54\x5f\xcb\xf7\x2e\xb7\xc4\xa6\xd0\xee\xde\x43\x1f\xaa\x21\xbb\x79\xb7\x3b\x55\xf5\x6b\xc5\x5c\x84\xf7\xe0\x6a\x2d\xe8\xfd\xe7\x8e\xa5\xdf\x50\xc3\x53\xbb\x09\xc9\xe6\x9f\x8a\xed\x7f\xe4\x5a\x4b\xb2\x56\x0c\xbe\x33\x81\x3e\x47\xda\x06\x13\xf3\x3c\x83\xab\x03\xae\xa5\xf2\x79\xc6\x72\x65\xef\xe5\x22\x9e\x81\x93\x22\x57\x2b\x11\x78\x00\x40\xe0\x2b\x29\x9e\xfb\x11\x7c\x2f\x5c\x5c\xdd\x71\x91\xe5\x1e\x02\xd9\xa2\x3a\x2e\x90\x71\x8e\x91\x1b\xea\x98\x89\x6c\x3e\xec\x87\x71\x35\x15\xf3\x3c\x55\xe1\xbd\x88\x1e\xac\xfb\xa6\x60\x5b\x41\xca\xc7\x30\x0a\x0c\x37\xbc\xaa\x19\x01\x40\xad\x7b\xc7\x95\x70\x87\xcf\x35\x07\xe8\x79\xe3\xf6\x45\x2f\x40\x25\x47\x9f\xbc\x1f\xcd\xc2\x14\x83\x2e\xec\xfb\x22\x63\x4a\xef\x22\x77\xbf\x8a\x4c\x6f\xae\x0b\x8e\x31\x85\x0b\xbe\xfd\x0f\x09\xce\x52\xa3\xbf\x71\xfb\x81\x26\x81\x28\x28\xd7\xcb\xca\x2a\x8c\x4a\xc5\x63\x0f\x86\x27\xd5\x61\x01\xec\xd1\x57\x05\x4e\xfc\x3f\xad\xd3\xea\xd1\xe6\x7f\x5b\x3d\x68\x7a\xad\x4a\xce\x45\x05\xc7\x79\x23\x82\xba\x26\x6c\xa9\xc9\x90\x37\xc9\xc8\x2c\x03\x98\x27\xd0\xa5\xba\xff\xc2\xdc\x5d\x14\x80\x2d\x6d\xe5\x84\x70\xd5\xe6\xa9\xe1\xfb\x33\xb5\x36\x71\x9b\xf8\x5f\x10\xcb\x04\x47\x37\xd3\xb3\x5d\xb7\x7e\x73\x9d\xc0\x93\xe9\x81\xa1\x61\x1c\x40\x18\x93\x64\x4d\xa6\xda\x4c\x8f\xbf\x08\xf3\xf3\x4d\x80\xfc\x0e\x06\x5a\x73\xcd\x71\x29\x4b\xba\x43\x2b\xa9\xdc\xe8\xb6\x6a\xb4\x41\xbe\xff\xa7\x2c\x9d\xa6\xfb\x7c\xd0\x6a\x0a\x3f\xdc\x34\xf2\xd4\xdf\x15\xab\x98\x56\x2c\x44\x6d\x4b\xf9\x3b\x7f\x30\xa3\x51\xef\x76\xfa\x1f\xd6\x88\x85\xfd\xef\x04\x23\xd4\x6e\x94\x48\x9b\x9c\xb5\x53\x91\xa5\x3c\xcc\xcc\x64\x25\x93\xcc\x4b\x1a\xee\xde\x0f\x95\x54\xad\x8b\xf9\xa8\xe8\xed\x4e\xee\x15\xd5\xfd\x08\xf1\xba\x36\x34\xf7\x29\x7c\x4a\x2f\xf9\x5c\x77\x24\x64\xf1\x3c\x3e\x0e\x11\xaf\x02\x25\x79\x9d\x89\x3f\x5f\xa6\xcb\x72\x77\xe2\xcf\xa0\xd9\xde\x1d\x9a\x9b\x81\x52\x28\x04\x2e\x0b\x3f\x3f\xbf\xaa\x17\xd1\x73\x65\x25\xfd\xbe\x2b\xeb\xf9\x4f\xed\xbd\xdf\x52\x27\x3d\xb5\x23\xcc\xcd\xfa\xcd\xf4\xec\x70\xf3\x51\xd7\x1e\xb7\xdc\x9c\x94\x27\x63\x45\x8f\x9d\xc8\xed\x67\x9a\x74\x65\x45\xfb\x74\xd5\x7e\x0d\x6b\xa8\x05\x9c\xf7\xbc\x30\x4c\x49\xe9\xb1\x5c\xaf\x71\x71\xae\x43\x6c\x6c\x11\xdf\xd1\x2c\x2a\xea\xe8\x63\xa0\x54\xea\x68\x23\x1c\x2c\x6a\xe9\xc1\x2e\x58\xd4\xd2\x4c\xb9\xe3\x1a\xd0\x04\x85\x63\x85\x35\x5b\x18\x9e\x9a\x1d\x0c\x0a\x2b\xb1\x81\xe9\xd1\x97\xd8\x4e\xf2\x09\x22\xcd\x1d\x60\x79\x1e\x38\x0f\xc1\x73\xce\xd3\x13\xb8\x90\xc4\xd8\xce\xdc\x86\xc7\x35\x4c\x4e\x11\x97\x95\xfa\xc6\x93\xd5\xf4\x55\x41\x2b\x82\x3e\x8c\x1f\xec\xdf\xd5\xae\xab\x3c\xe8\xd5\x0f\xf5\xcc\x22\x44\x8d\xae\x5f\x6a\x6a\x6c\x6e\xcb\xce\x37\xad\x7e\xf7\x27\x7f\xcc\x86\x6c\xf2\xca\xd7\x7c\xc2\x27\x29\x2f\x3d\xa6\x97\x3a\xb6\xa8\xcf\x37\xa9\x05\xa8\x2b\xd5\xd6\xb9\x51\x1d\x5b\xb4\xe3\x81\xa9\xba\xee\x9e\xd9\xae\xad\xed\x06\x52\x39\xd7\xfa\x8a\xd7\xe8\x9b\x5b\xb2\xb6\x17\xad\xc8\xcb\x28\xf0\xa5\x16\x9d\xe8\xfd\x58\xd7\x85\x4f\xed\x2b\x51\x6a\x58\x45\x8b\xa2\xb7\xbc\x1f\x5b\xfb\x6a\xcf\x1e\x49\x64\x87\x98\xef\xd2\x61\x9e\x96\x94\x66\xca\x65\xf2\xcc\x66\x3f\x62\x08\xb4\x0b\xab\x6c\xde\x3f\x27\x71\x00\xc1\x15\x2a\x84\xa2\x70\xe9\x59\x0e\xa7\x6c\xdd\x58\x6b\x15\x10\xb1\x3e\x70\x01\x62\x54\x85\xb1\xc6\xc4\xe1\x03\x0a\x41\xa3\xd5\x50\xa7\xda\x3c\x0b\xef\x0b\xc5\xca\xc6\x04\x06\x00\x6a\xdb\xba\x0b\xe1\xee\xd4\x39\x55\xc8\x88\xb9\x69\xc9\x97\x42\x05\xb9\x4d\x4d\xe0\x26\x30\x5c\x42\xd4\xd9\x58\xff\xeb\xeb\xd7\xf7\xf1\xf5\xe4\xea\x35\x9b\x2c\xd8\x83\xcc\x21\xb1\xe3\x4e\xac\xc2\x38\x60\x9c\x2d\xc2\x54\x7c\x02\x57\x04\x5c\x99\x01\x0e\xb8\xe3\xaf\x4b\x52\xf9\xf9\xe1\x18\x73\x74\x31\x0a\x75\x95\x65\x89\xba\x85\xdf\xeb\x53\x97\x43\x85\xb9\xb8\xf3\x2c\x7a\x40\x78\xf7\x71\xa4\xc4\xb1\x49\xf9\x82\xe0\xec\x58\x64\x9f\x64\xfa\xc1\xa3\xb3\xa2\xad\xda\xff\x6d\x1b\xd4\xf8\x81\x12\x25\xf2\x40\x0e\xb2\xec\x01\xa6\x47\x63\xd2\xc7\x29\xba\xee\x00\x47\xdb\xbd\xeb\x49\x68\xac\x49\x04\x4c\x65\x3c\xeb\xc9\x8a\x30\xc5\x5e\x53\x6c\x76\x79\x33\x3d\x19\x0f\x46\x57\x57\xec\x7a\x34\x7d\x3b\xbe\x86\x7f\x72\xe5\xb0\xe0\x49\x92\x61\x2d\x41\xa4\x19\x44\x2e\xa1\x14\xf8\xe7\xc9\xe4\x87\xb3\x31\xc4\xb1\x08\x4f\x46\xb3\x12\xda\x02\x45\xfb\xb6\xa8\xb7\xad\xda\xc8\xe4\x54\x94\x73\x5f\x4a\xd5\x52\xb5\x1a\x42\x22\x88\xd4\x66\x57\x0d\x64\x4a\x57\xf6\x32\x18\x4f\x5b\x6d\xe4\x48\x53\x4b\x47\x0f\xb9\xed\x7a\x0f\x1a\x5d\x4d\x00\x76\x2e\x60\x32\xcf\xbe\x87\x7b\x06\xb0\xb8\xc1\x2f\x68\x2e\x1b\xfa\x01\xaf\x4c\x85\xca\xf8\xb2\xf5\x6c\x61\xf3\xfb\xbb\x9f\x2f\x2c\x5a\xc1\x37\xf4\x9a\x95\x61\x2a\xbf\xd1\xd1\xbc\xeb\x9e\x89\x68\x28\x2d\xdd\x6c\x39\x95\xfa\xf4\x72\x0a\x81\x97\x75\x77\x93\x5f\xbf\x42\x20\x3b\xd5\x07\x1d\x8d\x57\xa7\xd5\x2e\xab\x62\xb9\xae\xd6\xf3\x56\x3f\xe3\xd5\x50\x19\x70\x04\xe6\xbf\x0f\x83\x9c\x47\x2e\x4a\x19\x68\xb8\xe1\xfe\x5f\x2f\x56\x39\x35\xe1\xc6\x9f\xb3\x14\x62\xc1\xcb\xf0\xfe\x81\x17\x56\x6c\x85\x8b\x08\xe3\xe0\x22\x81\x22\xc9\xd9\xee\xf4\x0a\x80\x04\x2e\xe2\xb8\x2b\x5c\x8e\x1c\x7b\xbb\x4b\x3a\x31\x19\xc9\x4c\x61\x90\x7a\x9b\x92\x02\x62\xb6\x4c\x74\xbd\x40\x6e\x77\x23\xd7\x66\xa6\x18\x49\x10\xfb\x2c\xf3\x94\x5c\x38\x08\x25\x97\xe1\xbd\x88\xcd\x4d\xe6\x32\x0f\x83\x21\x63\xa3\x28\x32\x7c\x63\x2b\xc1\x23\x00\xdd\x0b\x4c\xa7\xea\x45\x26\xc9\x8b\x1c\x1a\x20\xed\x54\x2e\xec\x9e\xce\xeb\xa9\x6f\xd1\x91\x4d\x2e\x31\x5f\x61\x19\xc9\x3b\x1e\xd9\x00\xd9\x5d\xcc\x1e\xbc\x9c\x1a\x32\x76\x0d\xab\x25\xa6\x7c\x29\x0c\x85\x9f\xcb\x78\xae\x07\x50\x9c\x15\x1f\x0c\x52\x29\x38\x53\x3c\x36\xb0\xb5\x65\x79\x7a\x17\x35\xe1\x13\x34\x5d\x43\x4b\xcf\xc9\x74\x59\xd7\x73\x95\x7e\x82\x98\xa2\x67\xed\xa7\xd2\xba\xd5\xd8\x51\x06\x80\xbb\xcc\xe8\x70\x80\x9e\x30\xc7\xb6\x0e\xbd\xe1\xdc\x6c\xcf\xd6\x23\xc5\x21\x12\xbb\xa2\xa9\x27\xbc\x4b\xd3\xc3\xf5\xc2\xe0\x83\x78\xf8\x4d\xf4\x04\xb8\x72\xab\x00\xed\xf6\x96\xf7\x1b\x76\x8b\xde\x2e\xbb\x74\x08\xec\xaf\xcf\x3b\x55\x6c\xd2\x73\xeb\xc8\xb0\x6f\x1e\xa4\x03\x32\x3e\xff\xe0\x3a\x80\x6e\xbf\x7e\xed\xb9\x87\x43\x12\x46\xa2\x58\x23\xc8\xe6\x9b\x17\xfb\xb5\xde\xe5\xd9\x79\xdb\xb2\xf2\xf7\x65\xfd\x50\xf0\x39\x02\x04\x0c\x30\xe3\x16\xdf\x6d\x6b\x67\x29\x7d\xce\x4f\xe4\xf7\x37\xef\xf2\x8e\x0d\xe7\xe8\x15\xd7\x4d\x77\x6f\x94\x39\x3e\xcd\x11\xdc\xf1\xf2\x17\x72\x5b\x1a\x5a\x87\xfc\xb3\x37\xdc\x58\xd1\x46\xe1\x43\xfa\x1c\x06\x49\xac\x51\xe5\xbd\x21\xc4\x9e\xa2\x72\x17\x74\xb0\x92\xd6\x80\xfe\x83\x34\x52\x51\x64\x56\xce\x32\x93\x49\x35\x08\xd4\x2d\x26\xed\xea\x2b\x96\x6e\xff\xb1\x8c\x84\xc1\x4f\x71\x11\x9e\xd8\x14\x55\x01\xbf\x2f\x82\x3d\xbd\xd8\xf6\xc6\x26\x80\xab\xd0\x8d\x7d\xdd\x00\x3d\xf4\x97\x22\xb0\x03\x5f\xf5\xf0\x83\xfb\xdd\x5e\x8c\xf1\x0c\xc3\x6e\xb1\x93\x70\x9c\x17\x61\xa9\x42\x99\xb8\x07\xcf\xde\xdd\xc7\x1b\x5e\xd3\x98\xc7\xc7\xe1\x1b\x6c\xc3\x9b\x88\x2f\x7b\x39\xf4\xeb\x1b\xb2\x23\xf0\x49\x8a\xee\x37\x47\xfb\x36\x02\x97\x95\x32\x18\x57\xdf\x99\x7b\xf8\x76\xb6\x4f\xec\x6f\xd6\xce\x0a\x5d\xc4\x1e\x4d\xc5\x2d\x4a\x6f\xac\x40\x91\xb7\x37\x66\xf2\xd4\xde\x69\xff\x28\x55\x66\x6e\xb1\x1e\x1f\x87\xa7\x20\xd5\x1c\x4b\x31\x9d\x56\x65\x02\xce\xb0\x87\x16\xff\x07\xc7\xd3\x78\x90\x8a\xe0\x1f\x5f\xbf\xb2\x4f\x1c\x93\x63\xee\x20\x97\x37\xdb\x45\x4c\xaa\x09\xa0\xfe\xfa\xb5\x01\x26\x22\xad\xd6\x10\x1f\x71\xc0\xb5\xc0\xcc\xdd\x48\xaf\x2b\xb8\x02\x76\x63\xf2\xd1\x95\x35\x37\x05\xe3\x27\xba\x26\x80\x55\xc2\x2e\x3a\xe4\x7a\x55\x2a\xf2\x80\x55\xfa\x74\x9a\xf9\xaa\xdd\x15\x2b\x60\x57\x7a\xf7\x99\xad\x8b\x6e\x8e\x21\x46\x73\xdf\x29\x7d\xab\xff\xd4\x5f\xcb\x82\x2e\x13\x8a\xbe\xdd\xa5\x49\xdb\x91\xd1\x0a\xdb\x05\xaf\xf7\x03\xe5\x9b\x5a\xae\xb5\x14\xf3\xe8\xcc\x7c\xfe\x14\x46\x11\xf0\xba\x1b\x94\x61\xb8\x69\x89\x1e\x2c\xc6\x42\x41\x41\xec\xd3\xc1\x91\x39\x60\xca\xa3\x73\x4f\x19\x98\xfa\x48\xac\xa9\x44\x2a\xe3\xcc\xa7\x59\x51\xc6\x32\x2e\x10\xa0\xec\xea\x58\xee\x9c\x36\x3a\x62\x6c\x57\xcf\xc5\xa8\x01\xd2\x70\x8a\x16\x09\x55\x30\x66\x9c\xc9\x58\x0c\xe4\x62\x81\xc4\xc7\xee\x5e\xaa\xa7\x06\xb8\x17\x8e\xbd\x3d\xe2\x9d\xdd\x23\x60\x18\x90\x4d\x7a\x5b\x18\x47\x1d\x77\x38\x22\xf3\x6b\x36\x3e\xb9\x99\x4e\xae\x7f\x66\x6f\xa7\x97\x37\x57\x54\x6d\xfa\x19\xf0\x61\x98\xd7\x89\x1c\xb0\xb2\x30\x52\xf7\x1d\x69\xb4\x72\x63\x36\x3a\x9b\x5d\x52\x92\xde\x5d\x4e\xa6\x6c\x74\x33\x9b\x4d\x68\x09\xd3\x77\x93\x13\x8a\x90\xbc\xb1\x4c\x2f\xa6\x94\x1b\x66\x6b\x6a\x17\xd9\x95\x26\xc5\xc9\x6c\x69\x5c\xbf\x34\x41\x5b\x88\xd2\xc2\x3e\x6f\xa9\xb4\x95\xa7\xdd\x3d\xbf\x6d\xee\x99\xab\x11\xf9\x79\xc6\xf8\x90\x2e\xd7\x9b\xcc\xa6\xa3\xc4\x3e\x44\x36\x28\x92\xec\x2d\x14\xda\x83\xc4\xa6\x5d\xc5\xd3\xf1\xbb\xf1\xd9\xe5\x15\x49\x61\x63\x9e\x5f\xf5\x10\xd9\x93\x13\xa7\x55\x20\x35\x28\xc6\xe6\x69\x43\x49\xaa\xef\x4d\x51\xb2\xa3\x67\x3f\x1a\xe8\x8b\xbd\xa2\x03\x6e\x4c\x2c\xad\xb9\xa8\xd2\xd2\x60\xf7\x7a\x5a\x54\xc0\x6c\x76\xc6\x4e\xbc\x9c\x28\xb8\xf9\xd6\x3b\xfd\xb9\x50\x8a\x2f\x85\xbb\x04\x07\xaa\xae\xf9\x02\x72\x09\x06\x03\xf5\x21\x4c\x06\x4a\x45\x03\x48\x8a\x82\x0a\x80\xb3\x0b\xf0\x00\xe3\x5c\x38\x2e\x9e\x30\x86\x73\xb8\x28\x71\xce\xf7\x5b\x0d\xae\x47\x27\x14\x03\xd5\xd5\xe4\x8c\xfa\xc6\x37\x27\x27\xe3\xf1\xe9\xf8\xb4\x5f\x5d\x73\x1e\x7d\xd3\x0b\xc8\xf3\x50\x19\x83\x6f\xbb\x99\xaf\x00\xcd\xe4\xb7\x75\x09\x39\xb3\x5e\x94\xce\x9b\xbd\xe7\x09\xa1\x26\x42\x19\xb8\xf9\xf1\x71\x68\x7d\x35\xb7\x4b\x63\x59\x76\xcd\xe5\xaf\x65\x1f\xac\x13\xd8\x9e\xdf\xdf\x41\xab\xc7\xc7\x21\xc4\x88\xdc\xae\xed\xe4\x68\x35\x9e\x5b\xd4\xaa\x91\x48\x28\x87\xb3\x6f\x25\xa2\x84\x41\x12\xea\xdc\xc0\x74\x60\x46\x2a\x4c\x3e\x7d\x56\x41\x78\x3b\x1f\x9c\xac\x05\x35\x95\xaa\x2f\x12\x73\xc7\xe3\xc9\x5e\xc8\x94\x81\xb3\x99\x89\x38\x83\xdc\x20\xa6\x57\x80\xdf\x93\x3b\xf4\x76\x13\x61\x88\x4a\x8c\xd8\x8b\xc2\xca\xc9\xf5\xdc\xca\x1f\xc4\x17\x00\x1f\x1b\xc7\x59\xea\x28\x5f\xc3\x65\x2c\x53\x91\xfe\x9e\x1e\x36\xa8\x13\x4e\xc5\xa7\xaa\x54\x01\xb7\x7d\xa2\x66\xe9\xbd\x48\x31\x7e\xe8\x18\xff\xc3\xe6\x32\x10\xaf\xd9\xab\x97\x2f\xbf\x3b\x66\xe6\xe3\xbe\xb6\x70\xc9\x4a\x64\x7e\x02\xda\x9d\x98\xf3\x1c\xc1\x31\x1d\x3b\x51\xe2\xf1\xa0\xd0\xe1\xd6\xe3\x34\x35\x77\xd3\x10\x4f\x92\xa7\xc7\x50\xaf\x36\xab\xf1\x49\x45\x03\xf6\x9a\x85\xeb\x44\x1a\xa8\x60\xc4\xaa\x5e\x84\x71\x98\x22\xca\xd9\x7f\x45\xe5\x0b\x90\x79\x1d\x13\x65\x02\x38\xc0\x86\xff\x60\x17\x8f\xa4\x4b\x0f\x19\xf7\x20\x76\xd1\x1f\x5f\xfe\xcb\x4e\x9f\xe9\x9f\x5c\xa7\xfd\x6c\x62\xaf\x00\x3d\x31\xcf\x56\x32\x0d\xbf\x20\x72\x61\x62\x10\xbf\xc1\x6b\xe7\x42\x91\xd0\x0d\xd5\xb7\xc7\x9c\x8f\xd1\x68\x54\xee\xc7\xb2\x4e\xec\x35\x82\xab\xc4\x47\xdb\xff\x84\x53\x24\x57\x5e\x10\xe1\xf6\xef\x4c\x38\xa0\xf0\xe8\xc8\x7a\xc5\x0c\x0a\x28\x71\x52\x6e\xee\xa0\xd7\x6c\x84\xe8\x13\xfa\x40\x2c\xe2\x50\x04\x43\x06\xfd\x12\x48\xe8\x16\xe0\x1f\x4d\xd2\xf0\x3e\x8c\x84\x41\xd8\xc2\xa4\x63\x81\x87\xe8\x96\x35\xa0\x63\xa7\xb0\xd7\xd0\x1c\xc4\xb3\x50\x19\x4b\xc5\x22\x57\x70\x41\x66\xc1\x95\x83\x50\x25\x52\x19\x78\x65\xa0\x0d\x01\x9d\xb6\xff\xd0\x4a\x25\x22\x5d\x8b\x0c\xb6\x20\x77\xec\x13\xa9\x41\xa6\x69\x01\x53\x6e\xe8\x1e\x0c\xd7\x9b\xc1\x4f\x88\x70\x57\x1e\x4e\xf8\x7c\x74\x35\x01\xd3\xc6\xbe\xe1\x46\x17\x3e\x2e\x41\x05\x3c\xa1\x97\xea\x94\xa9\xce\xc8\x46\x85\x58\xbd\x46\x64\xa7\x84\x73\xc1\x20\xda\xe3\x1a\xa2\x48\x1e\x1f\x87\x67\xfc\x4e\x44\xb8\xb5\x58\xc4\xba\xee\x2c\x63\x36\x82\x24\x38\xd2\x33\xcd\xdd\x13\x1a\xb7\xae\xe7\x88\xaa\xaf\xa5\x03\x13\x99\x55\xfa\x07\x17\x2a\xdf\x8f\x07\x4d\x90\x41\xf0\xdd\xd9\xd0\xac\x0e\xd6\x8d\x66\x17\x5d\x58\x80\x2d\x71\x2e\xa5\x40\xad\x6b\xae\xe0\x7f\x2b\x11\x0d\x1f\xb5\x26\x92\xce\xba\x25\x14\x75\x2b\xcc\x76\x61\x1f\xda\xdc\x7c\x93\x4e\xe0\x11\xad\x8e\xbe\x3a\x4d\x6a\x7d\x95\x9d\xe9\xee\xfa\x38\x40\xfb\x7c\xf3\x46\x77\x77\x6b\x77\x75\x93\xfd\x7a\x27\x33\xa1\x47\xef\xd7\x14\x6e\xac\x94\x22\xf1\xaf\x61\x91\x38\x84\xf7\xba\x0b\x95\x7f\x0d\xe5\xc4\x21\x1c\xda\xb3\x0a\x12\xc9\x5e\xdf\xc8\xc1\x98\x94\xfb\x67\x37\xd4\x3b\x4b\x1f\xe0\xe6\x4c\x1a\x1c\x14\xce\xee\x5f\xed\x80\xa1\x1c\xc3\xeb\xeb\x5c\xa1\x51\xa7\x0d\x91\x41\x02\xb7\xb7\x0d\x44\x8e\x3b\x30\x27\x7e\x7f\xbd\x8f\x47\xb3\xeb\x9b\x93\x31\x7b\xcd\x1c\x86\x1b\xc2\x92\x02\xb8\x01\x62\xa5\x80\xf9\xba\x23\x26\x70\x38\xbc\xec\xd5\x31\x16\x0d\xc4\xbd\x2e\xe8\xac\xbc\x23\xef\x86\x77\x90\x74\xec\xe7\xd6\x59\x71\xb9\xa3\x4a\xe7\x05\x63\x17\xe1\xa5\xeb\x36\x40\x26\x01\x75\x5f\x0c\xfc\xa9\xd6\xc5\x02\x98\xd5\x4c\xd1\xee\xfb\x74\xbf\x7b\x90\x99\xd7\x95\x62\x89\xac\x8a\xfd\x6e\x0f\xac\x04\xf2\x44\x64\x6b\x20\x4f\x35\x59\x15\xc3\x01\x03\x2c\x9a\xae\x11\x4e\xed\x50\x6b\xe4\xba\x77\x8e\xab\xd6\x70\x65\xad\x84\x85\x4a\x8c\xe4\x9c\x47\x62\xa8\x27\xe9\xd9\xe5\xc9\xe8\x6c\xac\xf7\xed\xa3\x93\xb3\xf1\x68\x7a\x74\xac\x0f\x83\xf7\x21\x44\x66\xc0\x6b\x68\x2a\x47\x22\xa3\xe3\xa3\x4e\x8b\x69\x51\x56\x0f\x24\xf8\xd8\x88\x43\x36\x0b\xd9\xf8\xe2\xdd\x64\x7a\x79\x71\x31\x3e\x1f\x5f\x5c\xdf\x82\x06\x8c\x1b\xc8\x7e\x1e\xe9\x19\xe5\x74\x21\x04\xa6\xdb\xcd\x7c\xbb\x01\xee\xb8\x52\xcc\x14\x39\x4a\x33\x13\x60\x7b\x0b\x69\x20\xb7\xd9\x43\x62\xc2\x98\xb5\x81\x8f\xec\x2a\x47\xc0\x04\xcd\x64\xca\x8e\x62\x19\x0b\x8a\x99\x78\x04\xa1\x1e\x40\xe9\xe1\x2d\x01\xbb\xd2\xf5\x79\x8e\xbb\xf6\x18\xd9\xb9\x95\x4d\xaa\x29\x53\x76\x1f\x8a\x4f\x05\xc9\x48\xc8\xf2\x34\x6a\xeb\x77\xbd\xd2\x16\x71\x69\x3c\x80\x70\x36\x06\x18\x27\xfa\x14\x3a\xba\x9a\x34\x31\x89\x94\xea\x75\x04\x27\x06\x8e\x53\xef\x76\x0d\xc1\x3d\x84\x0a\x25\x97\x80\xcc\xbd\x93\x70\x78\x17\x51\x37\x7b\x33\x00\x7d\xeb\xfa\x21\x48\x19\x06\x0b\xd9\x47\x6a\x81\x2c\xc1\xb1\xf9\xb3\xc9\x8d\x78\xea\x83\x9d\xe6\xbb\x38\x2d\xbb\x72\x1a\xb5\x28\x4d\xf9\x23\x1f\x33\x04\xfc\x4c\xe6\x97\x77\x3c\xca\x0d\x3c\x78\xfa\xed\x3c\xa6\xa7\x65\x5c\xd7\x26\xb0\x93\x8a\xe6\x18\xf8\x57\x0c\xee\x4a\x2b\x8c\x9d\xf2\x1b\xf2\xbc\xe2\xc7\xa8\x85\x2b\x35\x28\x94\x35\xb9\xa2\x5d\x82\x75\x2a\xc3\xa5\xb6\x86\xba\x20\xf0\xa6\x3c\xd0\x0e\x41\x3a\xb6\x45\x07\x89\x0e\xab\xb4\xe1\xa0\x01\x62\x56\xd1\x67\x8f\x0e\xab\x34\xe2\xdb\x86\x87\x35\xb5\xf2\xa0\xb1\x61\x4f\x6c\xe5\x93\x83\xc3\x66\x2b\x6d\xcf\x73\x70\x46\xf1\x4c\x14\x21\x25\x78\x45\x45\xbb\x57\xaf\x78\x9a\x71\xb4\xb7\x5d\x84\x88\x16\xb2\xdd\x58\xfc\xeb\x2e\x20\x17\xba\x7a\x3c\x70\x40\xb5\xd5\x68\x32\x03\xd2\xbe\xf7\x64\x36\x4a\xea\xee\xb4\x3a\x56\xab\xc0\x95\xef\xb0\x73\x79\x25\x3f\x15\x68\xf3\xe5\x58\x5b\xca\x04\xb1\xfb\x6c\x89\x22\xd8\xbb\x20\xc1\x40\x9b\xa6\xfa\xa2\xa8\xb4\x37\xa9\x76\x7b\xd4\x67\x8c\xb1\x01\xb0\xf4\x58\xeb\x61\x97\x6a\x7d\x56\x22\x6a\xad\x37\x3a\xe2\x61\xd0\xd4\x28\x0f\x04\x18\x9b\x63\x42\xfc\x5f\xf0\x22\xd6\x5f\x8f\x5d\x31\xb8\xcb\xc3\x28\x43\xb2\x19\xf5\xa0\x32\xb1\x3e\x66\x61\x6c\x41\xc7\xf5\x40\x4e\x84\x3e\x27\xe8\x15\xd6\x3c\xce\x56\x3c\x63\x73\x1e\xeb\x55\x0b\xe0\xe0\x29\x14\xc8\x42\x5d\x38\x71\x78\xb0\xc4\xae\x4b\x20\xd4\xff\x85\xfb\x97\x36\x60\xf3\xb8\xc4\x1d\xe3\x08\x6b\xb4\xa1\xbb\xdc\x6e\xe2\xed\x26\xdd\x6e\x14\x2a\xa9\x87\x57\xe9\xfd\x12\xad\xd5\x31\x50\xd3\x24\x22\xd7\xe7\x3e\xeb\x19\x0e\x44\x19\x74\x9e\x00\x25\x87\x5e\xb4\x98\xcc\xbd\xdb\xa7\x76\xb6\xb9\x96\x5a\x72\xa5\x9b\x78\xf7\x00\x77\x37\x5d\xaa\xf3\x7c\x80\x35\xa8\xce\x70\xcc\x80\xab\x97\x86\x7a\x01\xb1\x36\x10\x19\x0f\x23\x33\xe6\x7d\x8a\xc7\xaa\x53\xa2\x8b\x52\xc1\x76\x83\xd2\x80\x3d\x08\xe4\xbb\x2f\xbd\xeb\x59\xe8\x40\xfd\x08\x7a\xa2\x25\xb1\xd7\x77\xb0\x18\xfd\x0d\xd2\x53\x31\x07\xd2\xff\x24\x61\xe2\xbe\x21\x2d\xbc\x54\xc9\x76\x73\xbf\xdd\xe0\xf4\x56\x95\x4c\x6d\x7d\x1c\xa3\x33\xc3\xa1\xca\x1d\x8f\xd9\x13\xc6\x58\x67\x1c\xa8\x52\xcd\x1f\xc4\xc3\x13\x2a\xdd\xf1\xd7\x35\xd5\x88\x99\x55\xfb\x37\xb0\x29\xd3\xc1\xab\xe1\x00\x83\xc4\x01\x70\xb6\x56\x76\x80\xd9\x6a\x6c\xfa\x2e\xf3\x14\x8e\xa1\xfa\x18\x2d\x17\x36\x35\x16\x01\x1c\xcc\x4d\xa5\x8f\x0f\x42\x79\x65\x7a\xcb\x21\xd5\xd1\x3b\x81\x4b\x27\x06\x9f\x08\xa6\x76\x7f\x9b\x83\x1a\xf6\xaa\x4b\x00\x77\xf1\x2d\x36\x0d\xf9\xb7\x16\xe8\x62\x3a\x6c\x37\xa3\xf9\x30\xc7\xdb\x2e\xa6\x5c\xb9\xcb\x5c\x5a\xb2\xc8\xca\x27\x9c\xdf\x0a\x7c\xe0\x2c\xec\x7d\x61\xf5\x21\x4c\x0c\x77\x88\x45\xff\x82\x08\x88\x4c\x36\x61\xb6\x4e\x30\xfc\x42\xb7\x1b\xee\xd5\xdd\x7d\xa4\x17\xb1\x50\x05\x71\xed\x72\xf5\xa6\x95\x59\x49\x95\xc1\x1a\x5b\x04\xb2\xb5\x69\xc1\xbd\x77\x4b\xe9\xb3\x47\xab\xed\x7f\x51\x44\x38\x50\x19\x00\xc2\x38\xa6\x2a\x3c\x69\xf9\x71\x71\x43\x76\x21\x33\xbd\xcd\xc9\xf5\x5a\xc4\x81\x08\xfe\xef\x0e\xba\x6c\x37\x69\xe9\x92\x76\xc7\xf9\x33\x64\xa7\xdb\x8d\x3e\x42\x89\x30\x8a\x68\x67\x63\x53\x2a\x5c\xd3\x5a\x0b\x63\xe9\xc8\xdd\xbf\x1e\x15\xb7\x05\x3d\x43\x8e\x40\xd0\xb3\xd2\xff\x04\xde\xd0\xef\xc9\x03\xe4\x69\x47\xf9\xd3\xff\x52\xae\x83\xf2\xaa\xc3\xc3\x7d\xd3\x93\xb0\x34\x9a\xf5\x18\x38\xaa\xfa\x91\x3b\x8f\x8d\x3f\x13\xce\xe0\xbc\x0f\x71\xf3\xac\x76\x6d\xeb\xf4\x39\xa8\x15\xa7\x63\xb7\x93\xf1\xb6\x2d\x1d\x2d\xe6\xe1\x02\xd9\xd0\xb3\x15\xac\xe2\x70\x74\x02\x78\xfe\x50\xc6\x70\x8f\x00\x8f\x20\x24\xcb\x26\x90\x1c\x3b\x4a\x2b\x7c\x3d\x54\x8e\xd8\x28\x8c\xdd\x76\xfa\x49\xa6\x00\xcc\xee\x58\x28\xa9\xb1\x3e\x33\x69\x21\x18\x06\x37\x5f\x89\x75\x18\xbb\xec\xe9\x79\xba\xdd\xb8\x79\x6b\x4e\x4f\x70\xd5\xa0\xd5\xc4\x57\x8b\xc0\x82\x22\xc1\x04\xf8\x9b\x2c\x73\xa5\x23\xe0\x82\x13\x19\x92\x26\xd5\x12\x57\x06\x82\x65\x29\x90\x18\xbb\x2d\x98\x5a\x0a\xe0\xd8\x89\x6b\xf2\xb7\x3d\x86\x5e\x69\xa1\x8e\x7f\x5a\xa4\xbf\xcd\xf3\xa6\xee\x8e\x9e\xd3\xd6\xb8\xd3\x9e\x2d\x8d\xa6\xe2\x23\xa3\xa6\x44\x3b\x9e\xd0\x69\x3f\x34\x21\x23\x31\x49\x00\x62\x4a\xe6\xd9\xfb\xd8\xdc\xa4\x8f\xbc\x55\x05\xee\xc7\xef\x30\xf5\x5f\xf8\xd4\xb8\x69\xb8\x5c\x65\x2c\x91\x69\x36\x84\x60\x1c\xc1\x03\x30\x79\x79\x1a\xb0\xb9\x0c\xac\x77\x52\xbf\x70\x0c\xa3\x51\xff\xf5\xff\x5c\x5d\x4e\xaf\x6b\x3d\x93\x0d\x0e\xc8\x84\x2b\xe5\xa0\x11\x83\xed\x26\xe2\xa1\x3e\x0d\x66\x99\x88\x33\x61\x7e\x2b\x01\x16\x79\x4d\xd7\x6d\x72\x97\xf2\x55\xc0\x99\xd0\xe2\x04\xd8\x28\x6e\xe9\x31\xeb\x6a\xc5\x75\xef\x18\x46\xd3\x21\x1b\xe5\x2c\x0a\x45\x8e\x1f\x2c\x10\xc5\x4b\x42\xaf\x01\xe9\xb1\x1d\xf9\x5f\x1a\x2f\x36\xa0\x07\xe8\xc9\x9b\xea\x91\x5f\xb0\x6a\xbb\x4f\xa2\x3b\x50\x6f\xd4\x27\x18\x6b\x67\xaf\x6e\xd6\x32\x15\xfe\x31\x8b\x5a\x6d\xf5\x09\xa4\xdc\x53\xa5\x8e\x71\x9a\x57\xaa\x80\xc5\x0e\x28\x58\x83\x23\xff\x30\xd7\xa0\xbe\x08\xf0\x86\x1d\xff\x4d\x5e\xc7\x9b\xb1\xba\xdd\xb0\xca\xeb\xb4\xe4\x6f\x1a\xdc\x7f\x4a\x0f\xa9\x7f\xf2\x59\x47\x77\x45\x9e\xd8\xa0\xcb\x63\x8c\x5d\x91\x2c\xce\xa3\x08\x03\xc9\xcd\x0f\xf6\xe6\x1d\x81\xc8\xcc\xeb\x44\x6b\x4f\x2c\x6d\x24\x86\x15\x9b\x96\x1f\xa3\xf3\xd9\xdc\xb9\x5d\xdc\x9c\x9d\xe1\x80\x48\xb7\x1b\x30\xcf\x38\xae\xf3\x7a\x33\xac\x2d\xef\xdf\xc2\x93\x8d\x21\xd9\xca\xc7\x19\x6f\x28\x95\x2b\x3b\x6e\x32\x3a\x44\x6b\xe6\x85\x76\xda\x37\x09\x89\x32\x01\x0f\xb5\xf5\xf3\xb8\xcb\x14\x9e\x24\x7a\x0f\x44\x8c\x97\x14\xa2\x84\xd6\x86\x02\x19\x79\x94\xd7\xfc\x81\x61\x08\x78\x20\x3f\xc5\x7a\x25\xed\x69\x3a\x43\xd5\x8d\x6e\xf0\x34\xdd\xfe\x67\xd6\x7d\x55\x97\x49\xf2\x4d\xa7\x0a\xea\xf7\x5b\x9b\x26\x60\xbe\x0c\x4c\x7c\x6b\x40\xed\xd0\x48\xfc\xec\xd8\xb8\xad\xc1\x41\xec\xc1\xd7\xa3\xd9\x4f\xb7\x93\x7e\x69\x49\x86\xd8\x96\x4c\xa6\x3b\x1b\x4d\x6e\x47\xd7\xd7\xe3\x0b\x2a\xeb\x55\x2f\xff\x34\x43\xa1\x59\xc1\x29\x7e\x41\x2c\xcc\x18\xa6\x80\x59\xc6\x60\x34\x8a\x07\xfa\xd8\x3e\xb0\x21\xb3\x03\x8b\xf0\xa5\xd7\x8e\x35\xff\x80\xee\x37\xf7\xb8\xf0\x27\x83\x19\x0a\x5b\x5b\x26\xd9\xc9\x1b\xb0\x09\x5b\xb5\x63\x37\x6e\x87\xe9\xa6\x04\x2c\x34\x6b\x91\x65\x06\xc4\xc5\x55\x8f\x31\xba\x6a\x37\x46\xd7\x84\xbf\x60\x18\xbb\x3d\x3c\x56\x98\x6f\x4f\xde\xd0\xdd\xc4\x46\x30\x09\xf5\x02\x0a\x33\x3d\x54\x16\x1b\x36\x28\x00\xfe\x00\xa5\x19\xa8\x53\x75\x0f\xa1\x4b\x83\x9a\x17\x4f\x14\xda\xa0\x28\x12\xb8\xa6\x52\x77\x0c\x5c\x41\xea\x6d\xfb\x07\xe0\xd8\x37\x73\x46\x89\x6c\x20\xd3\xe5\x40\xbf\x73\x04\x0e\xb1\xda\x57\x60\xbe\xe1\x4b\xfd\x56\x2d\xd0\xe3\xc4\x70\x82\x43\x7e\x3f\x64\x78\x24\x49\xf4\x80\x09\x0c\x86\x1f\xdc\xde\xb8\x97\xbe\x42\x1e\x67\x21\xe0\xfc\x3c\x40\xb0\xa6\xe9\x1b\x3a\xd6\xab\xb0\xdf\x76\x08\xc1\x63\xc1\x94\x34\xe9\x2c\x50\xc7\xc7\x1c\xf2\xfe\x79\xfe\xb9\x5c\x67\xe1\xb9\x2c\x5d\xbc\x5b\xea\x70\x55\x2c\x31\x18\x8d\x99\xc6\x70\x5f\x52\xae\x21\xb5\xd0\x98\x00\xaf\xd6\xd0\x33\xbf\x61\xd4\xe1\x96\x2e\xb6\x71\xab\xf0\x3f\x10\x07\x0a\xc1\xab\x69\x0a\xdd\x81\xec\x1e\xa9\x18\x2c\x44\x0e\xc8\x64\xfa\xe9\x9d\x50\x32\x8c\xcd\x65\x14\xe8\xab\x9b\x74\x6c\xbd\x5b\xe2\x0b\x74\x6b\x93\x4d\x5c\x6a\x2b\x42\x6a\x2c\xc2\x18\x60\x1f\xa1\x81\xf0\x96\x3e\x5c\xc7\xfa\xf4\x57\xc8\xbd\x97\x7a\x79\x80\xd6\x7d\x36\x97\x42\x4a\xf0\xbc\xe9\xcb\x5c\x48\xb3\xe3\xd9\x88\xb3\xe3\xc2\xb4\x5e\x20\x7f\x8d\x67\xff\xc2\x9c\x44\xef\x0c\x16\x6b\xed\x3f\x9e\xcf\x8b\x94\x39\x8c\x3c\x63\xdf\x57\xec\xeb\xdd\x7a\x10\xca\x22\xbc\x8b\xda\xb9\x41\x8a\x84\x5e\xbd\xbf\x5e\x4d\xca\xda\x3e\x29\x87\xb7\xfe\x38\x50\xae\x03\x35\x35\xb5\xa4\x8e\x4a\x7c\x37\x6a\x2d\x96\xb1\x8d\x0f\x50\x54\xf4\x5d\xa9\x2d\x27\x6f\x5c\x35\x25\xd3\x01\xda\x25\x62\xa5\x1b\x01\xa3\xba\x14\xe1\x36\x37\x6b\x10\x2c\x9d\x98\xba\xd5\xab\x75\x74\xad\x18\x1c\xaa\xa7\x01\x57\xba\xf2\x14\x87\xf1\xce\x12\x84\x9c\xbf\x16\x88\xab\x69\x98\xc3\x3a\xe2\xad\x52\x9d\x3a\xc5\x00\x36\x57\xce\x7d\x3c\xb6\xc0\x36\x40\x14\xff\xbc\x3d\xb4\xab\x82\x85\x52\xcb\xca\x14\x64\x88\x81\xc3\x17\x21\xf8\x6d\xff\xe9\x7d\x57\x9a\x19\xcf\xd7\x3f\x95\x6e\xf9\x67\x35\xbb\x58\xc6\x6e\x92\x80\x67\xc2\xf1\xb9\x94\xfb\x21\x87\x87\x98\x5a\xd8\x46\xea\x44\x34\xb8\xa1\x02\xdf\x6c\xdb\xfe\x9d\xfd\x6a\x20\x7a\xba\x33\x42\x5d\x5f\x5e\x8f\xce\x6e\xcf\xc7\xe7\x97\xd3\x9f\xa9\xbc\xfb\xf1\xf9\xe5\x64\x3a\xbe\x85\x57\x29\xa3\x99\x2f\xf1\x80\xa8\xff\x41\x67\x05\x66\xe1\xc7\x5c\x64\x7a\xfb\xf7\x5f\x26\x24\x86\x11\x44\x26\x7b\xd1\x0c\x91\x5c\xf6\x09\x63\x8a\xca\x96\x45\x14\x2e\x63\x7d\xd0\xcc\x21\xbe\x20\xdb\x6e\x96\x29\x8f\x42\xc4\x32\x56\xd0\x75\x31\x90\x8a\x9b\x48\x87\x1e\x01\x4e\xd7\x7e\x34\xb5\x7f\xca\x22\xcf\x11\x97\xfe\xb9\x0c\xb7\x2d\x51\x2d\xd9\x5c\x55\xdd\xd1\x8d\xac\x6e\x5c\xda\x1f\x77\x0a\x11\x35\xa9\x0f\x6c\xc5\x15\xbb\x13\xfa\x34\x9e\xdf\xad\xc3\x0c\x2a\x76\xce\xb2\xe8\x01\x3e\x06\x66\xcf\x6a\x63\xe7\x7d\x0c\x85\x62\xbe\x16\xaf\x19\xc3\x2f\xac\x3e\xd8\x6a\xe0\x59\x18\xe8\x27\xee\xd9\x4c\x7c\xcc\x45\x3c\x17\x93\xd3\x9e\x98\x6d\x20\x4c\x1b\x5b\x22\x55\x60\xf7\xe5\xb1\x3b\x28\xf5\x34\xad\x45\xba\x0e\x63\x3d\x47\xb9\x33\x9f\x11\x05\x6a\xb1\x0f\x0a\x54\x21\xce\x8f\x80\xf5\x57\x6d\x97\xc8\xc6\x33\x0f\xd2\x36\x8c\x03\xf1\x19\x6c\x55\xf4\x89\x64\x21\xaa\x14\x8b\x4f\x45\x44\x4d\xe1\x24\x71\xd2\x0a\x7c\x4e\xbe\x16\x28\x85\x9a\xc7\x7a\xe6\x7d\xd1\x46\x43\x15\x36\xad\x8c\xe3\x5d\x6b\xb9\x9b\x12\x5a\x47\xc4\xba\xd5\xe6\xa8\x91\x10\x1a\x90\x80\x58\x5b\xaf\x51\x54\x86\x58\x29\xfb\x28\x2c\xa0\xec\x7a\xfb\x9f\x4e\xdb\xc6\x6e\x74\x5f\xa3\x66\xc0\x7c\xd3\x10\x0d\x42\xcd\xd5\x13\xd0\x5a\x74\xe1\x9b\xe9\x99\x8b\x23\xee\xc2\xc9\xd7\x2c\x49\xdb\xcf\x2b\xe1\x53\x03\x3f\x5d\xcc\x31\x0b\x17\xbe\x54\xbc\xbe\x64\x32\x8e\xc2\xb8\x5f\x44\xc3\x75\x81\x71\x6f\xe7\x85\xb9\xdb\x38\x1d\x8f\xd8\x1d\x9f\x7f\x10\x71\x70\xcc\x3e\xad\xc2\xf9\xaa\xc8\x6d\x53\x39\xec\xde\x9d\x92\xf3\x7b\xd7\x1b\x8a\xa5\x7c\xfe\x9a\xdd\xf0\x8f\x69\x56\x27\x5a\x40\x9b\xd5\x40\x97\x34\x3a\xef\x57\xad\x2d\x5c\xe0\x23\xf4\x16\x81\x31\xd6\x7b\x16\x73\x49\x04\x72\x9f\xaa\x6b\x8f\xf0\x7b\xf5\x43\xad\xa4\x7b\x1e\xe5\xfd\x45\x95\xd8\x35\xf6\x52\x06\x6e\x92\x13\x9e\xad\xf6\x2b\xf9\xf8\x38\xbc\x82\x59\x3c\x76\x34\xfb\xb5\xc1\x09\x2c\x07\x7e\x23\x6f\xd6\x17\x97\xf7\xa4\x91\x71\x56\x5c\xb4\xd3\xf5\x94\xe2\x18\x98\x42\x74\xe8\xea\xdd\xbb\xa1\x25\x1f\x92\xa6\xc9\x4a\x40\x30\xd2\x5e\x5d\x88\x9b\x58\xcd\x4e\xba\x17\xac\x80\x96\x68\x53\x20\x81\x9f\xa4\x7d\xe5\x84\xd7\x23\x8a\xae\x9d\xae\x46\x5b\x02\x4f\x5e\x4c\xb4\x90\x82\x14\x73\x6f\x11\xc0\xfe\x54\xd9\xb7\xf6\xee\x3f\x2d\x10\x2f\x2a\xbe\x3c\xb1\x65\x15\x6e\xc9\x27\xcb\xd9\x2b\x7b\xbe\x2a\x24\x89\x78\xff\x35\x10\x04\x80\xd1\xb2\x57\x23\x64\x14\x3c\x7d\xac\x68\x21\x4f\x1c\x2b\x5a\xc4\xd3\x3f\xad\x96\x72\x88\x4f\xeb\xcb\xd9\xfb\xd3\xfa\x42\xf6\xfa\xb4\x25\x01\x06\x0f\x66\x3f\x21\x4f\x18\x1f\x69\x00\x28\x8a\xc6\xe4\xc9\x7c\x33\x03\xcf\x53\xe0\xd6\x16\x01\x0b\xf2\xb4\x4c\xa4\xcb\xf3\x4c\x0e\x02\x91\x89\x26\xe8\xa8\xcb\x34\xd0\x4b\x39\x86\x56\x7d\xcc\x45\x04\x87\x71\x94\x5e\xe5\xc9\x05\x9f\x8b\x71\x32\x6f\x37\x8a\xf1\xdc\x0b\x7a\x86\xe8\x44\x53\x17\x54\xbd\xe6\x99\x21\xdf\x20\xe4\x35\x35\xba\x18\x88\x7b\xf4\x98\x37\x8a\x31\xab\x6f\xcf\x9e\xf7\xe4\x60\x16\xc7\x93\x44\x34\xc4\xea\xd3\x12\x12\xae\xd4\x27\x99\xf6\x43\x6e\xc1\x82\xc5\x26\x57\x0c\x09\x6d\x5b\xf4\x17\x85\x9b\xe2\x5e\x9d\xe8\x1d\x70\xf6\x14\x60\xaf\x2c\x21\xdc\x4e\x89\x0c\xe0\xb7\x64\x1a\x66\xfd\xf7\xe5\xfd\x3e\xa2\xc1\x60\x03\x76\x1a\xb1\xd6\xe7\x7d\xb0\x0a\x58\x18\x43\xc4\xf4\x6b\x06\x1e\x0e\x88\x06\x03\xc4\x32\xce\x82\x54\x26\x91\xc8\x86\xcc\x46\x6b\x9a\x1f\x98\x4c\x4d\x9c\xb8\x0b\xb9\xb4\x4f\x32\xa9\x77\x81\xfe\x67\x96\x32\x5e\xbd\x0d\x29\x08\x03\x38\x16\x01\x5b\x22\x78\xc4\xdd\xb5\x23\x5a\xec\x24\x35\xe2\x0e\x02\xbe\x45\x1f\x31\x37\x4e\x2a\x91\x71\xc0\xb6\x7f\x37\xb7\x39\x36\x35\xd3\xde\x16\x52\xf7\x4b\xbe\xa2\x3b\x30\xf4\x61\xcc\x72\x25\x86\x26\x9c\xeb\xc4\xdc\xf9\x7a\x86\x23\x7a\x4e\x06\x31\xfb\xf1\x72\x76\x0d\x37\xe4\x32\x05\xa7\xee\x60\x90\xf2\x38\x90\xeb\x01\x0a\xcf\x24\x5b\x8a\x58\xa4\x85\x3b\x26\x75\x04\x0a\x10\xa8\x92\xe4\x6a\x65\x42\x54\x3a\xb4\x7f\x07\xc8\x1e\x7d\xbd\xdb\x8d\xd6\xd5\x39\x80\xd1\x49\xfe\xa5\x60\xcd\x84\x70\x79\x74\x9f\x0c\x62\x76\x71\x79\x7e\xfb\xe3\xe5\xf5\x98\xc9\xbc\xf0\x15\x57\xf4\x06\xf7\xa5\x89\xf4\x34\xc1\x2c\xce\x41\x03\x6f\x1c\xb3\x24\x0f\x95\x8b\xe9\xfc\xa2\x3f\x00\xbc\xc1\xf3\x52\x8c\x91\x6e\x5f\xc3\x27\xe8\x94\xcf\xda\xb5\xf8\x7e\xb3\xf9\x89\x9e\x93\x43\x98\x16\x4f\x36\x82\x77\xb2\xe7\x0e\xa2\x06\x46\xa8\x3d\x49\xd4\x07\xd1\x7f\x49\x7c\xb2\x91\x55\x15\xf0\xb4\xde\x80\x94\x4d\x58\xe9\xeb\xce\x2b\x18\x4f\x91\xab\x3d\xe4\x37\xe4\x81\xb4\x94\xda\xb3\x41\x45\x52\xe0\x9e\x65\xf7\x32\x17\x30\xa8\x7d\x2f\x8d\x1d\xd0\x8c\xef\x25\xd5\xf6\x5d\x84\x9b\xc9\x9d\xde\x09\xf9\x7c\x45\x47\xa3\x9c\x89\x9a\xdb\x6e\x73\x93\x51\x44\xfc\x73\xb8\x94\x08\xc1\xfb\xdf\xa0\x8c\xfa\x70\x64\x49\x2a\x98\x32\xae\x64\xd6\x37\xc2\x4c\x4b\x92\x1f\x44\x7f\x1b\x12\xd9\x4b\x23\x7e\x27\x28\xb8\x9f\xb6\xb2\x7b\x9f\x17\x1a\x52\xc6\x9a\x0b\xed\xf3\xd5\x53\x61\x40\x68\x9d\xbf\xb5\x12\xe7\x19\xaa\x26\xbb\x64\x12\x95\x51\xf1\x82\xe2\xaa\xa2\xfe\x72\x42\x9f\x00\x00\x19\xd5\x3b\xf2\xd2\xc3\xc0\x68\x97\x49\xc9\xd6\xda\x8a\x91\x09\xde\x12\x67\xd2\x32\x0d\x1e\xb3\x24\x12\x5c\x99\xbc\xd2\x10\x7d\xc5\xba\x23\x1a\xc7\xe8\xfa\x4e\x1f\x79\x8e\xac\x38\x6d\xce\xd8\x9b\x48\x3d\x4a\xb3\x54\x26\x6c\xbb\x89\xc4\x3d\x84\xa8\x88\x38\x4b\xdd\x06\xdf\xa8\xac\xee\xac\xd8\xc0\xb4\x9a\x9c\x56\x08\xf5\x32\x06\xa4\x8c\xe1\x96\x78\x2a\x12\x09\xb6\xc5\x11\x49\x59\x7f\xa3\x6d\x2a\x44\x56\x45\x48\xad\xf4\x5e\xc4\xb9\x60\x91\x74\xe9\xbb\xa5\x3e\xd5\x87\x2f\xa4\x3a\xc7\xeb\x1f\x0b\x3a\x55\xae\x8e\xe4\xbe\xdf\x57\x7b\x9f\x53\xfe\xf1\x71\x78\x1d\x26\xe4\xdd\x60\x87\x16\xc5\xf7\x32\xdc\x6d\xcc\x4e\x13\x6a\x2b\xa5\x9a\xa5\x70\x04\x69\x0b\x09\x88\x75\x72\x25\x02\x6b\x2f\xa9\xa1\x83\xff\x07\x00\xf2\x01\x3f\x42\x32\x24\xc1\x78\x14\x1d\xa3\xd5\x19\x14\x40\x78\x3d\xf9\xc4\xaf\xbd\xbb\x08\x2a\xb8\xbc\x04\x12\xdc\x2e\x46\x7f\xa2\x30\x66\xe3\x7f\xbb\x1a\x4f\x27\xe7\xe3\x8b\xeb\xd1\x19\xb3\xa4\xe5\x01\xc6\x5b\xa3\xf5\xac\x55\x97\x79\xa6\xd7\xed\xb0\xf7\xbe\xe7\xd5\x97\x5a\x1e\xf9\x93\x37\xb0\x2d\x58\x20\xc6\xc7\xc7\xe1\x79\x18\x87\xeb\x7c\xfd\x0e\x7f\xf9\xfa\x75\xc8\x7e\x86\xd0\x17\x0c\x0a\x0b\xfd\x0b\xbb\xe2\x9d\x03\x68\xa2\x27\xb8\x3e\x99\x18\x12\xf8\x52\xb5\x22\x28\x36\x2e\x7d\xe2\x4c\x33\xc5\xc2\xcc\xe2\xe0\x8a\x98\xdf\x45\xf4\xee\x55\xfe\x18\x58\x21\xd0\xe1\xc3\x36\x66\x48\x91\xf8\x52\x0c\xd9\x3b\x08\xae\xf3\xb7\x3a\xb3\xc9\xe9\x93\x1d\x8f\xf4\xb6\x7f\x04\xc6\xbb\xbf\xe9\x21\xdd\x26\xb9\x7c\x14\x9c\x50\xfa\x98\xb9\xe2\x29\x40\x7e\xa7\x52\x29\x88\xbe\x97\xe9\x52\x0d\xdf\xc7\xa7\x22\x12\x48\x72\x9e\xa1\x2d\x94\x8a\xb5\xbc\x17\x48\x7b\x5f\x30\x41\x22\x0d\xd4\x31\x8c\x0a\x78\x0d\xa2\x96\xf5\x0a\xca\x93\xc4\xde\x43\x17\x35\xe6\x31\x6c\xec\x70\x21\xff\x3e\x1e\x61\x2c\x10\xb3\x41\x41\xec\x13\x8f\x4d\xda\x44\x24\xcc\x65\x79\x3d\xe8\xcf\x9f\xa8\xe5\xec\xa4\xa0\xa2\xc2\x0e\x49\x33\xbe\xb4\x09\x7d\x1e\x84\x8d\x1f\x03\xaf\x9b\x3b\x33\x21\x97\x91\xb0\xa8\x82\xe2\x8b\x81\x00\x75\x7f\xfb\xe5\x0d\xfd\x55\x41\x00\x79\xcc\xe0\x68\xed\x5e\x28\x05\xbe\x46\x8e\x23\xd2\xa3\xca\x0a\xc4\x7d\x28\xe2\x00\xf8\xb2\xc2\xb8\xb0\x55\xb4\x3a\xef\x64\x1e\x89\x2f\x03\x8c\x02\x4d\x79\x88\x71\x48\x46\x11\x08\x93\xa7\xa0\x8a\xfe\x44\x2e\xbc\x21\xa0\x9f\x2f\x64\x0a\x77\x9b\x9f\x78\x1a\xc0\x98\x4f\x78\x16\xde\x85\x51\x7f\x27\x47\xa8\x3c\xb6\x63\xa1\xe2\xa3\xe2\x72\xd4\xa6\x88\xea\x8d\xfd\x83\x78\x20\x97\xb3\x13\x0f\x00\x5a\xb0\x24\x15\x71\x00\x63\x58\xef\xe8\x2b\x3d\xcf\x2a\x49\x9e\x02\x12\xc5\xc9\xa8\x5f\x50\x09\x2c\x5a\x7b\xe0\x5f\x71\xd8\x69\xd0\x13\xe2\x02\x64\xc0\x56\xa6\x74\xba\x89\xab\xc9\xce\xde\xb9\x1c\xe3\xc2\x11\xa3\x7e\x2e\x32\x13\x24\xda\xa4\x0f\x4c\x0a\xcc\x4d\xb1\x74\xee\x98\x20\x94\xf1\x34\x1b\x32\x72\x0a\x20\xde\x84\x1f\xc5\xf0\x27\x32\x3b\xd8\x77\xea\xdf\xf3\x22\x42\x5a\xa4\x7a\x05\xa9\x19\x49\x45\x70\x98\x87\x2b\x51\x8a\x98\xf8\x13\xd1\x24\x4c\x52\xc4\x78\x2b\xf5\x10\xcf\x31\x72\xda\x6c\xdc\x54\x0a\x42\x6b\xfa\xa0\xe1\xc3\x56\x76\x37\x56\x28\x16\x6a\x58\xa5\x32\x26\x63\xee\xc2\xc4\xc4\xdc\xf1\x20\x18\xa0\x03\x70\xa0\x97\x63\x43\xe7\xb1\xd4\xe6\x62\x6a\xe8\x0d\xc8\xb8\x87\x91\xca\x72\x00\xa5\x2d\x22\xec\x76\xc4\x25\x18\xb2\x88\x22\x53\x61\xf8\x1e\x36\x8b\xed\x46\x6f\x3b\xa1\x88\x08\x05\x65\xc6\x23\x76\x2e\xd6\x32\xa5\xa6\xd7\xf9\x76\xb3\x86\x3b\xce\x4c\xbf\x4b\x6d\xcd\x20\x87\xaf\x65\x1e\x03\xab\xc5\x1a\x24\xb2\x17\x62\xb8\x1c\xb2\x57\x2f\xbf\xfb\xe3\xf9\x31\x7b\xf5\xf6\x98\xbd\x7a\xf9\x96\x4a\x0d\xfe\x4b\xce\xe3\x0c\x22\xdb\xb0\x22\x3d\x9b\xd6\xb6\xee\x17\x09\x87\x98\xad\x75\x12\x89\x1d\x79\x7d\x34\xb2\x84\x27\x73\x1e\xa3\x8b\xf2\x60\x2a\x06\x12\x13\x92\x2d\x9a\x8c\xc8\x33\x4b\x97\x90\xee\xad\x7f\x9c\xaf\xef\x44\x6a\x62\x86\x76\x2e\x7d\xd5\x90\x0d\x5e\xe9\x91\x93\x0a\x05\xd1\x7f\x5c\xef\x60\x51\xb8\x0e\x81\x26\x03\xda\x4e\x2d\x23\x17\x68\xfa\x43\x43\xbc\xc3\x4a\x05\x42\xc9\x55\xb0\xdd\x28\x98\x09\x79\xac\x97\x27\xdb\x0d\x61\x04\x95\x35\xec\xe6\x87\x6a\x05\x7b\x71\x8a\xa9\x8a\xaf\x8b\x67\xd4\x67\x3a\x74\xd3\xd8\x8b\x77\x98\xdd\xe8\xa5\x2a\xb2\xd7\xb5\xef\x76\xfc\x98\x69\x13\x6d\x66\x59\x7d\x61\x5f\xee\x24\xb8\xea\x26\xea\x56\x87\xdf\x45\x2d\x40\x52\xd7\xa9\x1e\xdc\x5d\x16\x55\x78\xb3\x66\xd5\xac\x97\x7b\x33\x1a\x15\x06\xeb\x3a\x54\x4a\x9b\x76\x8b\x54\xae\x0d\x55\x67\xd3\x75\xcd\x85\x67\x7e\xde\xdc\x8c\xf4\x01\x19\xbe\x8d\x43\x49\xb0\x11\x1e\x41\x41\x2f\xca\xe9\x5b\xb7\x9b\xe9\x19\xb5\x10\x17\x00\xc6\x64\x51\xbd\xb0\xe3\xfd\xa4\x0b\xfc\x75\x31\xf8\x85\xc1\x65\xd9\x4e\xf5\x5a\xcd\xd7\x24\x17\x85\x57\x21\x1c\x38\x58\xc4\x3f\xe6\xb0\x19\x46\x7e\xf4\xaf\xdb\x9e\xea\x8c\xba\x40\x86\xf7\xc2\x91\xdd\xeb\xa3\xe5\xc3\x76\x43\x0c\xa7\x92\xfe\xf6\xfb\x7a\x6d\x30\x56\xa5\xd5\x7e\x21\x53\x6d\xa6\x89\x60\xc8\x66\xf3\x95\x58\x8b\x82\xd5\x55\x4b\xb2\xa8\x00\x90\xb9\xd3\xa1\x85\x10\xe6\xee\xb5\xcf\x0d\x1b\xd7\x3e\x53\x7f\x53\xcb\xf4\x72\x72\x26\x98\x9a\xaf\xb4\x8d\xe1\x79\x59\x7c\xf0\xe9\x22\xa9\x1f\x74\x23\x16\xaf\x9b\xd9\xe8\xed\x98\x04\x57\xff\xf9\xe2\x7a\xf4\x6f\x24\xe9\xe2\xcd\x6c\x3c\xed\x41\x0d\xd9\x26\xa4\x23\x1b\x64\x83\x32\x14\x1d\xe2\xcd\xf5\xe4\x6c\x32\x83\xe2\x04\x27\xe2\x4d\x6c\x13\x39\xf1\x0c\x50\x1b\x97\x3a\x04\x0f\x04\x72\xde\xd0\x6c\x18\x1e\x35\x15\xf0\x0c\x6d\x02\x91\xfa\x24\xfa\xcd\x42\x5b\xb5\xc3\x74\x39\x19\x0b\x00\xab\x40\x5e\x1e\x58\x43\x2c\xab\x94\xb9\x7d\x86\xbb\x3b\xd2\x75\x5e\xd1\xf2\x63\xbe\xdd\xa4\x80\x77\x8f\x02\xdd\xed\x17\x0a\x33\x7e\xd9\x40\xc0\xbd\x54\xc4\x21\x2c\x4c\x4b\x47\x8a\x1d\x99\x36\x82\x4e\x7a\xda\x1b\x3a\x9e\x39\xcf\x48\x8f\x9d\x41\x68\x80\xf8\xe4\x0a\x7b\x0f\x35\x84\x9d\x7c\x3c\xb2\x1e\x9b\x3b\xbd\x23\x7b\xa9\x77\xd4\x91\x8f\xa1\xa8\x9a\xe3\x39\x4f\x1f\x06\x65\xcc\xbe\x87\x26\x57\x65\x76\x60\x68\xf0\x35\xcb\x20\x6e\x5a\xb0\x93\x13\x70\xad\x18\x27\xc9\x90\x5d\xa1\x43\x33\x92\x4b\x16\xc6\xcd\xb7\x95\x93\x2a\xeb\x99\x91\x89\x10\x5a\xc6\x57\xe3\x40\xe7\x4f\x4e\x86\x6c\x2a\x4c\xc6\xa3\x39\x7d\xb4\xea\x29\xef\x32\x7d\xd2\xf7\x42\x00\xbc\x4c\x02\x78\x09\xe8\xdc\xed\x5f\xdd\x66\x81\xbc\xcb\x84\xa1\x67\x83\x3b\xd3\xdc\xc6\x11\x5a\x7c\x6e\xe3\xdd\xac\x95\xdf\xa2\x70\xc2\x53\x55\xed\x54\x9b\xad\xe7\x1c\x51\x14\x8c\x7d\x79\x16\xc4\x3c\x7a\x50\x64\x67\xd6\x08\x6d\x51\x2d\x15\x59\x1a\x8a\x7b\xb1\x03\x8e\xbb\xb3\x57\xb2\xb7\x37\x93\x53\xca\x9b\x42\x56\x83\x91\x05\xdc\x9c\x94\x71\x0d\x68\xbc\xf9\x1a\xc5\x71\x1e\xed\x42\xd0\x1d\xe5\xf6\xb4\x6d\x12\x6b\x1a\xd3\x2e\x6d\xc5\x00\x8d\xe4\x41\x61\x56\xd0\xc8\x40\x9d\xa7\x22\x09\x6a\x7d\x9d\xd7\x61\x07\x38\xaf\x19\x0e\xcd\x0e\xad\x03\xc1\x04\xde\xc4\x77\x98\xbd\x5c\xb9\x16\xef\xd0\xed\xb3\xc2\x65\xc4\x59\x14\xf2\x50\xd9\x5e\xaf\x05\x90\x36\xab\x6c\xeb\x67\x68\xd0\x07\x2f\x53\x33\x34\x96\xfd\xc7\x68\xe7\xd4\xe5\xa2\x1f\x54\xf7\xe8\x48\xc4\x4a\xac\xcd\x42\xb5\xac\xa5\x55\x2d\x4f\x7d\x1c\x88\xed\x4c\xbf\x4f\x69\xb6\x85\x83\xff\x0d\x34\x9b\x97\x91\xae\x7a\xb6\xbc\x72\x4b\x8e\x43\xd0\xe4\xcf\x37\x05\xe5\x93\xad\x2a\x27\x06\x39\x87\xa2\x1d\x88\x36\x9a\xa7\xe1\x64\xd3\xaa\x5c\x03\x56\xec\xde\x5a\xb5\xa6\xff\x19\xb5\xe6\x5a\x46\x14\x91\x27\x90\x99\xb7\xd7\xe3\xee\x6f\xd5\xe0\x7a\x05\x22\xe9\x2e\x51\x7c\x2d\xc4\x0c\x2e\x7f\x14\xb9\xd3\x73\xa5\x42\x35\x74\x25\x8d\x47\x63\xc6\x6e\x03\x17\xd5\xb7\x86\xac\x29\xfa\x75\xcd\x1f\x58\x24\x20\xca\x2e\x49\x14\x5b\xf3\x24\x41\xd2\xd4\x4a\xd4\xd6\x7d\x1e\xc5\x22\xd5\x1b\xef\xf7\x0c\x7c\x5d\xe1\xae\x9b\x80\x24\x6a\xb3\x77\xf7\xca\xb7\x4f\xc1\x36\x3b\x95\x25\x77\x70\x92\xca\xb9\x10\x01\xe9\x03\x2e\x5b\x8d\xe5\x91\x04\xae\xb2\x54\xc4\x41\x2a\x40\xdb\xed\x26\x45\x14\xbc\x9d\x23\xad\x6e\xa4\x97\x11\x5d\x6e\xe9\x31\xf3\x9d\x6c\x2a\xdc\x21\x4e\x6f\x65\x19\x44\xd8\x98\x0c\x27\x50\xd5\xc0\x2e\x79\xaa\x0b\x70\x03\xc2\x11\x5d\x7c\xa7\xca\xe7\x28\x8d\xfe\xf6\xfe\x7f\xd6\xe9\x50\xfb\x35\xf0\xaf\x8a\xd6\x6e\x15\xef\xd5\x9f\xff\xbc\xc9\xa1\xda\xb9\xbe\xe1\x43\x18\xfc\xb3\xca\xde\x0f\x1d\x99\x3b\xc3\xa7\x7f\x17\xe6\xdd\x79\xcb\xdd\x1a\xa3\x0c\x86\x9a\x2a\xb9\x19\x77\x4d\x81\x4a\xcf\x78\x6a\x3e\x47\x9f\x38\xc3\xe0\x37\xd7\x27\xbc\x91\x35\xe6\xf0\xdd\xf2\xf8\x38\xf4\x63\xd8\xbf\x7e\xfd\x83\x7e\x55\x0f\x59\x37\xf7\xbe\x6d\xf7\x34\x2a\xd4\xbb\x3b\xc4\xe7\x44\x9f\x85\x03\x13\xf5\xb2\xe2\x8a\xc9\x39\x84\x66\x07\xaf\xc1\x0d\x63\x22\x4d\xda\x83\x5a\xc2\x18\xae\xcd\x82\x5c\x94\xe3\x5b\xca\x62\x08\x35\x60\x7d\x89\xa2\x52\x16\x9f\x58\x84\xb1\x41\xe7\x35\x21\x10\x3c\x5d\xe6\x6b\x41\x66\x2e\x9f\x6e\x37\xca\x08\x32\x08\x9c\xe6\x4c\x6d\x30\x83\xec\xc2\x64\xc5\xa0\x63\xb8\x29\xf4\xc4\x29\xa6\x47\x8c\xd1\xcb\xe5\x0b\x5e\xb4\xd3\x23\x59\x75\xdc\x01\xcd\x6a\x54\x23\x84\x50\x20\x92\xf3\x0f\x95\x14\x06\x40\x2c\x81\x23\x35\x02\x76\x34\xdc\x6f\xde\xeb\xcf\x9a\x87\xae\x43\x6a\xb0\x36\x70\x5e\x41\x78\x86\xf1\xdb\xaf\x43\x85\x7b\xed\xaf\x92\xc2\x58\xbf\x89\xd7\x3c\x61\x9c\x5d\x9f\x74\xb6\xaf\x05\x6c\xe3\x00\x9a\x79\x54\x18\xd0\xd7\x27\xa4\xfd\x0c\x35\xf4\xb3\xe1\xeb\xeb\x68\x32\xd2\x77\x2a\x79\xfd\x1e\x30\xf1\x18\x63\x16\x8c\x2e\xd7\x2f\x99\x40\xf5\xd1\xd5\x15\xfe\x78\x7a\x79\x3e\x9a\x5c\xb0\xbf\x0d\x06\x2e\x46\xdf\xc6\xe6\xff\xa2\x7f\x85\xe4\x93\xab\xd1\xf5\x8f\xbf\xbc\x7f\x1f\xa3\xc8\x9d\x3e\xeb\x57\xd5\x60\x00\x31\x0c\x57\x97\xd3\x6b\x14\x39\xfe\xb7\xd1\xf9\xd5\xd9\x78\x66\xc4\xd4\xc9\x58\x3f\x0c\x80\x55\xe5\x33\xd7\xc6\xd1\x70\x2e\xd7\xac\xf1\xff\xfe\x9b\xff\x6a\x2f\xb1\x5e\x3f\xac\x1f\x00\x7c\xbf\x24\x16\x7f\x1b\x1e\x4e\xba\xe9\xe1\x85\x94\xb5\xd2\xff\xb0\x90\xb2\x67\x0d\xd0\xbb\xff\xfa\xf2\xe5\xcb\x96\x6e\x79\xad\xdf\xe9\xe9\x98\x52\x35\x34\x90\x9d\x9d\x3c\x15\xd0\xfb\x3a\x26\x00\x7a\xf9\x50\xfb\x72\xa4\x39\xcf\x98\x30\xd1\x4a\x38\xa7\x9e\xc0\x97\x86\xca\x34\x30\xa6\xc1\x7e\xfb\x04\xc6\x34\xbf\xdf\xf2\x42\x6b\x9a\x3f\xcd\x99\xb7\x87\x64\x50\xbb\x89\x4d\xb8\x91\x08\x0a\x16\x8a\x45\x18\x2f\x45\x9a\xa4\x61\x0c\x41\x2a\x6b\xde\x0f\x7d\x03\x41\x95\x18\x6f\xc5\x57\x38\x2f\xc3\x2b\x01\x24\x5f\x57\x78\x25\x57\x49\xa7\x2c\x99\xdd\x9a\xea\x0c\x99\xd6\x9a\xf0\x28\xa1\x4f\x5d\x8d\x71\xea\xbb\xb5\xfd\x2a\x32\x74\x13\x55\x0e\x6c\xad\x57\xd9\x3b\x95\x37\x66\xe2\xec\x56\x3c\x97\x79\x9a\x99\x6b\x65\x8b\x3c\xda\xb1\xa6\x96\x84\x9b\x9d\xba\x6a\xcf\xb1\xcd\x75\xc5\x1e\xbe\xa6\x50\x32\x4f\x5b\x72\x30\x76\xdb\x67\x7c\xc8\x80\xbd\x89\x02\x94\xcb\x6e\xeb\x5c\x77\x7b\xf2\x07\x59\xb1\x0b\x6f\xeb\x52\x67\x2d\x0e\xed\x61\xfa\xd9\xb8\x05\xc4\x2e\x9a\x6c\x93\x46\x88\x70\x6e\xfe\x4d\x9a\xcd\xe7\xa1\xb3\xaf\x58\xa5\x00\x2d\x1b\x36\x90\xfe\x69\xdc\x45\xd9\x6f\xc2\x75\x74\x1e\xaa\xa2\x6b\x7f\x43\xa4\x46\xae\x1b\x0a\x3b\xfa\xf1\x71\xe8\x70\xea\xda\x8c\xf9\x72\xb3\xf2\x7a\x4b\xba\x5e\x60\xb3\x3a\x25\x1a\x30\xc8\xe1\x30\x4c\xcc\x3f\xc2\x83\x13\xfd\xfb\xf5\x43\x72\x40\x42\xe6\x2e\x5f\xb1\x45\xe9\xda\xfb\xad\x7d\xc7\x08\x41\x54\xfc\x84\x4f\xdc\xe1\x6c\xdf\xf1\xe4\x5e\xd5\xb4\xf3\x61\xbd\xef\x41\xbc\x50\xbd\xba\x23\xf6\x73\xf0\x55\x15\xee\xb0\x4d\xee\xe9\x74\xab\x6a\x6c\x32\x52\x1d\x61\xd4\x13\xc6\x43\xdd\x16\xeb\x09\x7e\xd2\xc8\x20\x3d\xb0\x3b\x5a\xf7\x5b\x12\x44\xab\x97\x94\xd6\xbe\xeb\x5a\x51\x77\xb9\x7c\x80\x89\xb7\x73\x5f\xfc\xb4\x3e\xd6\x63\x9d\xed\xec\xc9\xdf\xec\xc6\xa7\xda\x46\x52\x81\x85\x87\xef\x5f\x02\x8b\xff\xe6\xfe\x6b\xdb\x73\xa5\x75\x1d\x37\x86\x5b\xd8\x18\x6e\x9b\x37\x86\x8e\x3d\x01\x42\x02\xc1\x82\x90\x2f\x63\xa9\xb2\x70\x0e\x31\xa0\x80\x2e\x6a\x17\xb2\xa2\x7e\x38\xd9\x11\xf5\x11\xcd\x88\x24\x77\x77\x7f\x8b\x10\x78\x9c\x53\xb9\x06\x03\xe7\x8a\x67\x2b\x72\x95\xbd\xde\x6e\xa2\xed\x06\x53\x2b\x8c\x63\x4e\x15\x2c\x50\x65\xc8\x47\x73\x66\xf3\x85\xb6\x68\xb3\xdf\x86\xbf\xab\xd3\x21\x36\x7d\xab\x93\xdf\xd3\x7d\x74\x10\x3b\x25\xdb\x2b\xfa\x9f\x61\xf2\x26\x8c\xc4\x0f\x0f\x99\x50\x5f\xbf\x1e\xeb\x9f\xf4\xdf\x27\x32\x8f\x33\x3d\x0d\xf4\x87\xea\xa7\x40\xab\x44\xf8\x72\x2f\x28\xa2\xad\x1b\xc5\x97\x24\xf9\x1b\x55\xe4\x29\x14\x47\x37\x07\xa1\x30\xb2\x3a\x78\xd0\xe3\xf7\x21\xc0\x81\x41\x88\xc5\x83\x97\xfc\xa7\x17\x36\x60\x1a\x6d\x88\x81\x29\x29\x55\x02\x16\x77\xa9\xb8\x32\xb7\xae\x9f\xd4\xe0\xd9\x97\xd6\x24\x91\x99\x5f\x3d\x48\x79\xea\x78\xa8\xf4\x39\x54\xc6\x62\x00\x21\x92\x16\x53\x47\xb7\x21\x92\x4b\x12\xf7\xf0\xc6\xf2\xb5\xe5\x31\x5b\x4b\xf8\xfc\x90\x31\x43\x44\x43\x7a\x37\x34\x88\xba\x4f\x2a\xe3\x6d\x10\x19\x5f\x52\xc3\xcf\xc3\x60\x36\x87\xb1\x1a\x6e\x8f\x86\x3a\x00\x87\x55\x7f\x10\x5c\x80\x3b\xc6\x3c\x9e\x95\x36\x83\xaa\x8c\x2e\x31\x8e\xfa\x50\xda\x87\x5d\xa6\x54\x21\x15\xcc\xab\x44\x4a\xc9\xba\xe9\x56\xbc\x21\x3d\xfe\x02\x80\x5b\x3a\xf4\x2a\x86\x20\xf8\x44\x8a\x6e\x1d\x26\xc1\x16\x6f\xbc\x91\x52\x10\x22\x7a\x0c\x87\xbe\x88\x86\x7a\xcb\xb8\x3c\x70\x43\xdd\xa5\xc6\xf2\xc5\xb6\x57\xb6\xa1\x2a\x44\x91\x40\x6a\xa8\xf6\xbd\x62\xb7\xba\xc4\xf4\x4c\xa5\x78\x6d\x8d\xef\xc6\xd3\xd9\xe4\x92\x8c\xf5\x36\x8f\xa9\x0f\xfb\x8e\x47\x61\xc0\xfe\x3c\xbb\xbc\x60\xf2\xee\x57\x31\x77\x04\xa2\x9e\xb9\x3b\x30\x2c\x98\xf3\x72\x1e\x84\x1e\x7c\x7c\x2d\x32\x91\xaa\xe3\x62\x3e\x8a\x30\x5b\x01\xde\xda\x20\x0a\xc1\xaf\x0b\x41\xb8\xf0\xad\x87\xec\x0d\x70\xd4\x47\xa1\xc2\x90\x32\xe7\xe8\xa4\xe5\x2a\x21\x58\x20\xe7\x70\xe1\x56\xc4\x7b\xc2\x3d\x1f\xcd\x74\x4f\x75\xf4\xe5\xdd\xaf\x22\xc3\xc6\x02\xf2\x94\x4f\x78\x8a\x20\x6b\x29\x5f\x6f\xff\x91\xa5\x42\xed\x64\x7d\x30\x60\xeb\x83\x90\x16\x5b\xdf\xb1\xb5\x01\x45\x8c\x88\xeb\xb0\xe2\x72\xa0\xa1\x29\x78\x3b\xaf\xcc\xaa\x16\x21\x1a\x68\x7b\x35\xa1\x97\x29\x7a\xcc\xee\x65\x08\xc5\xcb\x9d\x80\xe4\xc6\xcd\x84\xfc\xd4\x78\x39\xf4\x17\x0f\xe3\xff\x63\xbe\xb4\xfa\xdf\xee\x53\xe7\x18\x6e\x0e\x30\xbc\xda\x10\x1e\xd8\x43\xe6\x00\xc0\x61\x8f\xd8\x9c\xc7\x06\x9c\x26\x16\x4b\x9e\x85\xf7\xd4\x1a\x7f\xc6\x2d\x5d\x9f\x39\xac\x06\x90\x75\x90\xa7\xf5\x72\x63\x93\xcc\x98\x70\x65\x92\x66\xe2\xed\xc6\x54\x40\x28\x6b\x00\x87\x2f\x5a\xf6\x99\x12\xe1\x0f\x21\x0b\xc9\x8e\xae\x9a\xb1\xff\xde\x19\xb6\x1f\xbc\xf9\xf5\xec\x13\x52\xa8\xa2\x8d\x44\xa2\x8c\xb6\xf0\x22\xb9\x54\xc7\x16\x4f\x01\x41\x05\xcc\x8d\x9e\x42\x74\x6e\x9b\xe0\x4d\x73\xb1\xf9\x3c\x0f\x36\x81\xeb\x18\x93\x9b\x90\xf1\x43\x69\x73\x2e\xaa\x19\x71\x2e\x9d\x9b\xda\x1c\xff\x3a\x9a\x5e\x4c\x2e\xde\x22\x97\x1b\x9a\x1d\x7a\x25\x00\x7b\xd4\x19\x7a\x5c\x31\x07\x93\xc6\x70\xba\x03\xa4\x07\x0b\x15\x5b\x85\xcb\x55\xf4\xc0\x82\x50\xcd\x65\x9e\xf2\xa5\x08\x40\xd4\xcf\x25\x01\x6b\xfe\xa0\xc7\xd8\x7d\x88\xc9\x01\x99\x64\x52\xef\x13\xca\x01\x6f\x00\x3a\xd2\x5c\xa6\xb8\xa2\x60\xf5\x6a\x25\xa2\x88\xad\x42\x95\xd1\x89\xc6\xa3\x77\xe3\xe9\xf5\x64\x36\x1b\x9f\x8f\x2f\xae\x19\xb6\x62\x12\x41\x0c\xc9\x42\x2f\x39\x78\xee\xf0\x99\xce\x81\x23\x18\xa6\xb3\x35\x8b\x4b\xb6\x29\x00\x35\x6b\x63\xbe\x40\xb8\x81\x31\x07\xb3\xde\x0b\xf9\x80\x9a\xde\xed\x96\xd7\x56\x6c\xca\x5d\xaa\x98\x6d\x31\x84\x22\x1d\xf1\x1c\x3e\x8c\xfe\x28\x36\xeb\xda\xf1\x32\x1f\x61\x43\x4d\x62\x10\x32\x77\x88\x34\x49\xb7\x9b\xcc\xcc\x3a\x5b\x35\x71\xc2\xb0\x5f\x12\xd9\x23\x0d\xdf\xb2\x04\x9c\x80\x7c\x0d\xc8\x1f\x15\x58\x30\xe3\x73\x33\x99\x4d\xa0\xa6\x4b\xc5\xdb\x71\x75\x01\x08\x08\x8b\x64\xbc\x04\x72\x26\xcb\xd4\xa7\x97\x7d\xb4\x8a\x0d\xb8\xa1\x1e\x3c\x78\x3f\xcc\xbe\x7b\xf9\x52\x3f\xff\xe3\xab\x97\xc7\x16\x43\x70\x57\xae\xe3\xdd\xc0\x5c\xa3\xe0\x18\xe2\x53\x01\xb9\x3e\x4d\x56\x3c\x36\xc3\x02\x80\x5b\x4e\x22\x99\x07\xec\x8d\xcc\xe3\x20\x7d\x38\x52\x2c\xe0\x19\xbf\xe3\x4a\x0c\xd9\x28\x8a\xd8\x87\x58\x7e\x8a\x44\xb0\x24\xe1\x9a\x5d\x0a\x22\xa2\x7e\x04\x78\x65\x5c\x12\xea\x93\x56\xbb\x6e\xc2\x98\x2f\x65\x66\xae\xc3\x8a\x23\x01\x20\x2a\x63\xd2\xe4\x12\xca\x64\xbb\x31\x5f\x04\xf6\x43\x25\x0c\x87\x4f\xbd\xc3\xb2\x40\x8b\x70\xd9\x88\x75\x0e\x42\x03\x91\x02\xa7\xd0\x50\x7f\x00\xf8\x8c\x32\xd7\x0b\x30\x26\x95\x21\xf8\x84\xa5\xd3\x82\x6c\x34\xf8\x30\x39\x7e\x18\x81\xee\xa6\x7a\xf7\x23\x67\xdb\x4d\xb6\xdd\x58\x90\x8e\xed\x46\x1c\xb3\x88\x87\x4a\xd9\x8d\xb4\x00\x0f\x58\x43\x16\xb6\xfe\x66\x22\x0a\x63\x65\x06\x35\x67\xfa\xfb\x80\xdb\x08\xb8\x34\x70\x55\x2a\x75\xf9\x90\x5d\x23\x46\x89\x62\xe0\x2f\x40\x41\xa9\xd0\xfd\xb9\x50\x55\x02\x8f\x42\x37\x25\x00\x64\xc4\xa9\xb6\x2b\xf9\x98\x3d\x00\x16\x48\x6a\xc2\x02\x4d\xd8\x9c\x2a\x79\xaf\x71\xd9\x04\x04\x0e\xef\x77\x62\x47\x7d\x96\x29\xe6\x90\xff\xea\xa7\x18\xce\x1d\x1e\x45\xbb\x79\xda\x08\x46\xf0\xcc\xb3\x67\xbf\x49\x53\xe8\xe8\xcf\x1a\x3b\x95\x86\xec\x42\x32\x9e\x65\x62\x9d\x64\xae\x82\x35\x0f\x84\x65\x9a\xe3\xf3\xba\x7e\xfc\xbe\xa0\xad\xf1\xb1\x8d\x2c\x5a\x53\x20\x54\x96\xca\x07\xcb\x0f\x5e\xf9\x06\x1e\x66\x89\xe9\x9b\x1d\x5d\x87\x6c\xb4\xc8\x44\x5a\x5f\xcb\x83\xcc\x61\xa7\xb2\xc1\xeb\x69\x1e\xdb\xd3\x0e\x76\xbe\xa5\x18\x1d\xf0\x3c\x5b\x0d\xf0\xf6\x45\xee\x3c\x34\xda\x40\x3b\xd7\x89\x43\x04\x9a\x47\x82\xc7\x39\x09\x14\xf7\x5c\x4b\xca\xae\x61\x59\xbf\xa0\x98\x55\xc2\x83\x02\xaa\xcb\xfe\x67\x7a\x42\x56\x57\x0c\xf5\xcd\x97\x8c\xc2\x70\xdf\x63\x91\xa8\x6d\x97\x59\x25\x6a\x16\x90\x21\x1b\xe5\xf3\x1c\x23\x9a\x94\x31\x10\x70\xf8\x5a\x02\xa0\xda\x4f\x11\xc3\xbf\x39\xcb\x44\x9c\x6d\x37\x82\x7d\xbf\x03\x49\x37\x2f\xc3\x69\x29\xdd\x37\xa5\x6c\x08\xe2\xa2\x0b\x70\x70\xff\x91\xe2\xf9\xa3\xfe\x23\x99\x0e\x87\xf1\x9e\xa4\xdb\x7f\xe8\xdd\x41\x9f\x3d\x8c\x02\xdb\x4d\xa5\x72\x03\x19\x95\x20\x65\xa7\x45\xd1\x6d\x1c\xf6\x39\x31\xec\x91\xde\xcf\x65\xd9\xea\x53\x47\x96\xc9\x07\xbe\xec\xbb\xe2\x02\x92\x5b\x26\xd2\x98\x03\x37\x79\xe9\x93\x7e\x5f\x99\xfa\x1e\x8f\xec\x9d\xfb\x3e\x22\x30\x74\xa9\x36\x4a\x05\x02\xd7\x77\x56\x2f\xbf\x24\x8f\x32\x91\x8a\x60\xc8\x00\x57\x3b\x0d\xd7\x3c\x05\x44\x3c\x36\xd7\x03\xd6\xad\xeb\x25\x25\x21\x6d\x35\x89\x00\xbe\x69\x67\x45\x02\xc4\x84\x50\xaf\x02\x38\x82\xf5\x42\x70\xff\x8a\x99\x8b\x26\xf6\x03\xbe\x36\xba\x9a\x58\x8b\xaa\xb1\xe0\x77\xf0\xe6\xdd\x83\x5e\xa9\x39\x32\x75\xef\xb6\x07\x56\xef\xfb\x57\x10\x08\x02\xda\xdd\x7f\x87\xff\x1e\x32\xf6\x57\xb4\xc1\xd7\x6b\x01\x46\xf9\x07\xbb\x90\x9a\xd7\x5d\x14\x20\x70\xd5\xe5\x99\xc1\xc3\xfe\x14\xdb\x97\x8a\xa5\x2d\x49\x05\x80\x2c\xf0\x20\x80\xb8\x43\x1e\x55\x55\xb8\x13\xba\x34\x32\x35\x07\x43\x76\x19\xcf\x77\xed\x35\x7f\x7f\x5b\x87\xcb\x94\xc3\x06\x67\x2a\x2b\x58\xa3\xb5\x85\x03\xad\x99\xf3\xb8\x79\xa3\xda\x7b\x75\x05\xf8\x72\x18\x6e\xe0\xbc\x2e\x09\xd5\x73\x57\x5b\x10\x66\x32\xaa\x9d\x79\x6e\x39\x7e\xcd\xc0\xd3\x8b\x90\x59\x4f\xbc\x18\x29\x72\xb6\x96\x78\x88\xa3\x6c\xbb\x41\x8a\x60\x76\x52\xa7\x63\x92\x86\xf1\x3c\x4c\x38\x8e\x8b\x02\x70\xdb\xb0\xeb\x8b\x35\x8c\x44\x32\x10\x0d\x86\x14\x2e\xa7\x7a\xb5\x76\xc8\x7d\xb5\xef\x06\xc2\x65\x75\xbf\x82\xe3\x8d\x2f\x94\x10\x64\x0b\x7c\xa7\xf7\x22\x1c\xa6\xf0\x9c\x6a\x3c\xf8\x50\xe0\xdb\x96\x6a\x03\xf8\x92\xea\xcf\xdf\x0d\xdd\xc9\x0f\x47\x31\x8f\x03\x3c\xed\x99\x2c\xb1\xc8\xc0\x23\x97\x15\xc7\x40\x54\xbd\x60\x1d\x71\x4b\x87\x5f\x59\xb5\xbd\xb7\x75\x37\x6e\x37\xf7\x61\x86\x29\x81\x1e\x8a\x9b\x07\x87\xa3\x97\x69\xdb\xfa\x30\xd5\x1f\xeb\x26\xd6\xeb\x43\xd3\x0e\xa3\xc7\x37\x6e\x96\xfe\x5a\xeb\x83\xe3\x79\x4c\xe5\xf6\xac\xbf\xdb\x33\x3b\x3b\x25\xb1\xaa\xf2\x54\x1b\x38\xaf\xd9\xc4\x92\xf8\xae\xb2\x2c\x29\x23\x17\x23\xf1\x85\x08\x5e\x33\xef\x15\x55\x7a\x47\x19\x96\x6d\xb3\x66\x90\xf9\xa0\xdf\x56\x09\xda\x8d\x72\x2f\xd2\x2c\xb4\x90\x6d\xaf\x6b\xc0\x96\x41\x01\x8f\x5f\x18\x72\x91\x91\x95\x63\xbb\x61\xaf\x59\x58\x33\xbe\xcc\xbd\x07\x0c\x15\x85\x32\x15\x08\xcd\x3f\xfb\x52\x0b\xc6\x62\x45\xba\x62\x6c\x87\x18\xd8\xc4\x78\x59\xe6\xd1\x3a\x52\x22\xbb\x05\x6e\xf6\xdb\xbb\x87\x5b\x1b\x14\x44\xdd\xdf\x57\x5b\xcb\xe7\x73\xbd\xd5\x5b\x7a\x43\xeb\xbd\x03\x6f\x48\x8c\x97\xd1\x54\x05\xcd\xda\x62\xee\x4f\xc6\x43\xc8\x73\x89\x24\x79\x21\x57\xd5\xc8\xa4\xfe\x14\x10\xb6\x78\x75\x09\x61\xd7\xb5\x84\xa6\x3e\x7b\x29\xa1\x54\x18\x07\xf2\x93\x62\xe6\x9a\x96\x9d\xd1\xcc\x7d\x67\x55\x8f\x0e\x33\x85\x9b\x25\x5f\xc9\x4f\x22\x9d\xad\x44\xd4\x0f\xd8\xfa\xaf\x69\xa8\x2d\xaa\x3c\x8d\xd8\x9d\x0c\x80\xca\xfe\xcd\xe4\x6c\x0c\x8b\x81\xe0\x01\x78\xc9\xb3\x40\xe6\x54\x64\xf7\x78\x9e\x86\xa9\x31\xed\xd3\x44\xa1\xa4\x8a\x07\x9a\xbd\xd0\x22\x7f\xaf\xed\xdf\x28\x14\x39\x2c\x2f\x28\xb3\x41\x25\x93\xb8\x87\x3c\x6f\xca\x32\x9e\xa0\xa7\xba\x4d\x97\xfa\x4c\x3b\x6b\xc6\x77\x40\xcd\xfa\x9f\x61\xc2\x78\x3a\x5f\x85\xf7\xa2\xb8\x5e\x35\xf7\x11\x1d\xe2\xd5\xcf\x8e\x6c\xe1\x2f\x61\x82\x1c\x1b\x71\x16\x0a\xb3\x5b\x06\x7d\xd8\x81\xff\x36\x18\xf0\x28\x92\x9f\x06\x09\x0f\x03\x67\xb5\xe2\x0a\xfb\xbf\xd8\x60\x10\x84\x8a\x7a\xfe\x4b\x3f\xa0\x91\x86\x9a\xfa\x4b\x8a\xa5\xcb\x6d\x81\xc4\xa1\x58\x0e\xec\xc5\xa8\xfd\x1b\xee\x2e\xed\x1f\x00\xd0\x09\x7f\xf8\x0c\x1a\xbf\x90\x4b\x26\x51\xf1\xf9\xcd\xd9\xf5\xe4\x6a\x34\xbd\xfe\xc3\x9b\xcb\xe9\xf9\xe0\x74\x74\x3d\x62\x27\x97\x17\xd7\xda\x7c\xfa\x71\x72\x7a\x3a\xbe\xf8\x85\x10\xf8\x37\x7c\xed\x86\x9d\x5e\x5e\x5c\x8c\xc7\x33\x76\x3a\x66\x5a\xc6\xcd\xd9\x68\x32\x1d\xff\x01\x05\x9f\x8d\xd9\xf9\x68\xf6\x97\x9b\xf1\x2f\x44\xfd\x57\xd3\xc9\xbb\xd1\xf5\x98\x41\xc5\x2d\x15\xda\x8a\x74\x19\xfd\x5f\x94\x3c\x9e\x51\xb2\x97\x91\xbc\xe3\x91\xc5\x4a\xff\xc5\x9d\xff\xff\x66\x13\xff\xd4\x70\x38\xfc\x85\xfd\xcd\xfe\x6e\x5f\xa4\xea\xb7\x28\xe9\x28\x57\x14\x12\xc5\x8e\x48\xfb\xaa\xb7\x28\x51\x5a\xae\xc2\x20\x10\x31\x55\x69\x7d\x21\xdc\x56\x88\x22\xb8\x3d\x50\x05\x33\x49\xa5\x38\xe8\xa3\x14\x75\xe1\xcf\xc9\x45\x32\x23\x57\x25\x98\x1b\xa4\x25\x61\xc0\xb1\xa8\xd4\x90\x32\xb7\x23\x21\xa3\x44\xcc\x48\xc8\x21\xc1\x35\x5a\x21\x32\x78\x92\xb0\x79\xca\xd5\x8a\x6c\x43\x39\xa6\x1d\x00\xf3\xe5\xfa\x4e\x5b\xe9\x22\x66\x09\x8f\x63\xe2\x02\x0a\x88\x5d\xad\x23\x14\xb0\x23\x89\x0a\x0c\x40\xff\x9a\x7f\x0e\xd7\x4d\x60\x96\xed\xd5\x50\x5d\xd8\x57\x20\x39\xe8\x5a\x51\x5a\x20\x92\xd9\x42\xe8\x2f\x78\x48\x83\x8e\x78\xb0\xf7\x35\x01\xcb\x9c\x6d\x37\xf3\x95\xcc\xa9\x91\xe3\x20\xa4\xba\xa8\x6a\xb0\x04\x09\x49\x70\x0a\x7e\x5d\x44\x1c\x13\x02\xdd\x09\xc3\x7f\xb5\x5e\xa2\xdd\x06\xa9\x20\x8f\xda\xc8\x42\x22\xe2\xe3\xee\x21\x03\x14\xc4\x4f\x71\x24\x39\x6d\xb2\xcb\x79\x26\x32\xc5\xb2\x22\x84\x8f\xc4\x7f\x9c\x2f\xd8\x60\x70\xbf\xc7\xed\xa8\x2e\x78\xdf\xb7\x84\x4b\x9a\xea\x59\xce\xc4\xd6\x0d\x7a\x16\x4c\x72\xe2\xfd\x3c\x0e\xd1\x53\x16\x67\x29\x89\x70\xdc\xbc\x10\x34\x4f\x77\x28\x4b\x33\x0a\xe9\x35\xa3\x6d\xc5\xf0\xc8\x17\x7a\xb5\x3a\x10\xda\x9a\xa7\x7a\x4a\x1f\x88\xe0\x71\x7d\x59\x63\x28\x91\xad\xbe\x8b\xe4\x47\x72\x1a\x06\xa1\xa2\x8c\xbd\x20\x54\x1f\x73\xaa\xa1\xa1\x22\x27\x07\x96\xa3\xa6\x03\x58\x9d\xb0\x23\xf4\xeb\xa1\x52\x2c\xe0\x13\x8a\x52\x2e\xa9\x0e\x81\x82\x8d\x9c\xd3\x26\x69\xb5\xa9\xe4\x4e\x42\x6b\xa8\x18\xb7\xdc\x09\xf8\xca\x31\x28\xca\x63\x26\x3f\xc5\xee\xc7\x06\x6a\x18\x2a\x55\x56\x2f\xde\x7e\xf6\xaf\x25\x30\x10\x19\x9c\xb6\xbd\x47\x70\xda\x8e\xf3\xe1\xfb\xb8\xe0\x88\x7b\x1f\xbb\x68\xd7\x7f\x9f\x2f\x9c\x67\x19\x14\x1d\x60\xc1\x7f\x47\xd7\x4c\xd9\x5f\x62\x64\x2a\x57\x5f\x73\x4f\xd6\xf6\x47\xb9\xe9\xa6\x3f\xca\x9d\xf4\xf4\xfe\x30\x8d\xae\xe9\x0e\xab\x79\x87\xfe\xe8\xd2\x11\xa6\xa2\xe6\x7e\x50\xe4\x4c\xb2\x62\xc8\xb9\xf4\x89\x1a\x8e\xe8\x5a\xa3\x66\xbd\xe0\xf3\x95\x89\xb1\x0c\x63\x76\x84\x80\xbd\x47\x25\x4a\x48\xfc\xf1\x08\x82\xb3\x44\x4a\xd2\x3a\xcc\x57\x5c\x4f\x76\x94\x05\x07\x51\x83\xfe\x0b\xe8\xbd\x78\xcd\x81\xb7\x35\x32\x49\x43\xbc\xaa\x42\x74\x88\x7a\xc5\x90\xf2\x84\x36\x7d\xc3\x7b\xb2\x4d\xf1\x3d\xbb\xe7\x29\xc4\x67\x5f\x19\xa5\x6d\x9c\xb6\x5a\xf9\xac\x60\x71\x4e\x9a\xc9\x67\x45\xa4\x13\x0b\x8e\x0c\x3f\x7b\x8c\xfe\x93\x3a\xc1\x7a\x2c\xe9\x86\xe2\x8d\xbf\x89\x27\x33\x61\x5b\x17\x37\x67\x04\x00\x35\xf8\xea\x09\x0d\xb6\x9b\xfb\xed\x06\x6b\xac\x2f\x8c\x36\x19\xcb\x72\xf0\x06\x31\xb9\x58\x80\x19\x22\x23\xc1\xc4\x7c\x25\xe1\x5a\xc4\x85\x01\xe9\xcd\xf2\xc1\x83\x74\x39\x2d\x36\x28\xd2\x4e\x02\x2a\x07\x0b\x60\x0b\xc3\x48\x77\x85\x16\xed\x39\x1a\xa0\x3e\x0b\x7b\x14\x67\xa9\xb6\xa6\x83\x4a\x64\x0e\x59\x6f\x7d\xbb\xc2\xa8\x89\x4d\x30\xc6\x50\x34\xe3\x79\x21\x44\xa4\x02\x2e\x4b\xf4\x41\x9f\x10\xb3\x4c\x79\x96\x87\x19\x93\x39\x4b\xf8\x03\x99\xaf\xbc\x9b\xcd\x13\x2a\xca\x57\x70\x26\xda\x53\x75\xf4\xfa\xd3\xa3\x26\x7b\xac\x52\x82\x1a\x26\x5d\x2b\x35\x8c\x23\x26\x2f\xa1\x87\x0a\x7a\xae\x28\xe4\x79\x7d\x82\x0a\x1e\xa1\x90\xe1\xb8\x61\xdb\xbf\x53\x3d\x21\xc9\x8d\x1d\x28\x4a\xeb\x4b\xb9\x03\xda\xba\x89\x1e\xa3\xe0\x7f\x70\x67\xb3\x4e\xe2\x1a\x8f\x7d\x48\x70\xc0\x4a\xf4\x12\x1d\xc5\xc3\x11\xc4\xe2\xb0\x4d\xe2\x40\x7c\xfe\xfa\xf5\x98\xa5\x82\x2b\x19\x23\x63\xd8\xe7\x30\x2b\x4d\x9a\x63\x6d\xbe\x64\xb7\x2a\xe3\x59\xae\xdc\x2b\x33\xf8\x93\x9c\xca\xae\x35\xf5\xf5\xad\x65\x16\x2e\x18\x55\x9f\xb6\x3a\x61\x36\x2b\xa9\xcf\x4d\x6c\xb7\xd2\xc6\x26\xf6\xb3\xfb\x5d\x29\x6a\x2f\x2c\x4e\xc0\xc4\x66\x18\xc6\x99\x58\xf6\x64\x22\x34\x8c\xc8\x2c\x8c\x57\x22\x85\x65\x3c\x5b\xe9\x1d\xd1\xba\xf4\xc8\x4d\x4f\xac\xc3\x98\xad\xb6\x1b\x33\xca\x81\x31\x07\xc2\x9e\x2d\x99\x81\xcb\x96\x68\xae\xf8\xde\x45\x0c\xdb\xed\xeb\xe4\xcd\xed\xec\x7a\xf4\x76\x72\xf1\xf6\xf6\x7a\x72\x3e\xbe\xbc\xb9\xb6\xab\x28\xf9\x95\xcd\x7e\xe3\x69\x61\x33\x7b\xc8\xbd\xac\xb1\x96\xbd\x34\x9e\x5e\xdf\x5c\x3d\xbf\xc6\x44\x2d\xb5\x1a\x37\x91\x61\x46\xe1\x9d\x88\x22\xca\x94\x88\xb8\xca\x8a\xa8\x02\xca\x38\xb3\xb7\x25\xde\x9d\x70\x83\xb8\x3c\xc1\xe3\x3f\x69\xeb\x69\x71\x22\xf5\x1d\x00\xe6\xda\x86\x10\x8a\xec\x2a\x4d\x4b\x13\xd9\x3c\x39\xff\x40\x96\x74\x10\x64\x54\xe9\x4e\xeb\x6c\x53\x51\xaa\x07\xdc\x22\x4a\xb4\xb8\xd9\x38\xa0\xcb\xf4\x4b\x5d\xd4\x63\xf2\x8e\xab\x70\xde\xe6\xf8\x28\xe2\x21\xee\x79\x3c\x27\x9d\x35\xb1\x24\x2f\xc4\x80\x92\x9c\x2a\x95\xe1\xcc\x70\x49\x19\xc6\x25\x67\x50\x8a\xc8\x7e\xa8\x4c\x28\x43\xee\x8d\x7e\x3a\xea\x8b\xd2\xa8\x52\xed\x28\x51\x32\x25\x6f\x1f\x4b\xe4\x78\x44\x69\x7d\xd4\x6b\xf0\x7a\x88\x38\xaf\x2f\xa8\x2d\x3c\xbc\x8e\xa7\x3c\x74\x70\x91\x84\x26\x1e\x51\x39\xc8\x28\xe1\x15\xc8\xf8\x07\xfd\xe5\x4d\x38\x90\x1a\xa1\x5b\x85\x5c\xc5\x9a\x8a\xf8\x89\x23\x8d\x3a\x64\xab\xc6\x4d\x86\x28\xd6\x17\x55\xa6\xa9\xab\x88\x12\x32\xed\xe7\x66\x49\xa4\x0a\x7b\x3b\xbe\x5a\x48\x87\x4d\x16\x90\x22\x2f\x3c\x00\x11\x81\x9a\xe0\x08\x97\x40\xac\x26\xa9\x48\xa4\x21\x67\xeb\xd7\x31\xc5\x44\xd4\xb6\x18\x35\xb7\xad\xf1\xd4\x34\xef\x2a\x92\xa8\x66\x94\x45\xd1\xed\x01\x5e\x95\x80\xf1\x2c\x4b\xc3\x3b\xa0\xfa\x08\x42\xf5\xe1\x16\x7a\xe1\xc8\xb2\x35\x51\x4b\x91\x29\x54\x2e\x03\x32\x95\x63\x6a\xea\x5e\xb1\x33\xd6\xba\xd7\xeb\x15\xd9\xbb\x5a\xdc\x5f\xba\xd7\x69\xdf\xdf\xbb\x42\xc8\x3b\xed\x5e\x9f\x79\xbd\x63\x75\x7a\x05\xb1\xdc\xa8\x0c\x72\x8e\xa8\xb5\x0e\xf2\x91\x2c\x07\x19\x03\xaa\xb4\xf4\x9e\xdc\x91\xfa\x0a\x6c\x90\xd2\x73\xe6\xe4\xf1\x20\xe3\xa4\xbf\x99\x2c\x14\xd3\x7d\x5b\x4b\xda\x5d\x2f\xa8\x13\x4c\x5e\x77\x50\x3c\x0b\xef\xd6\xa7\x2d\x9d\xf1\xf3\xf6\x46\xcb\xeb\x08\xa9\xd6\x19\xa7\xae\x2b\x53\x5d\x77\x6a\x3a\x2f\x9f\x87\xda\xf8\x4c\xce\x58\x27\x31\x0d\x3b\xa1\x8d\x3d\xec\x22\x67\xd0\x88\x2a\xd8\x1d\x43\xd0\x3c\xbd\x45\x71\xb7\xcb\x3c\x0c\xd8\xe4\xa2\x5f\x94\x89\x95\xf1\x94\xc2\xfd\x26\x26\x7a\xd7\xc9\xbb\x4e\xf4\x88\x13\x45\x43\x7a\x94\x21\xf6\x0b\x51\xae\x01\x6a\xa3\x89\x35\xc6\xc3\x54\x22\x5d\x05\xf8\xb4\xc0\x49\x22\x76\x4c\x78\x48\x0a\xc1\xb2\xa4\xb7\x41\xa9\x95\xe3\x29\xf6\x1c\x76\x41\xa8\x9a\x1c\xd8\x86\x17\x5a\x17\xd2\x02\xca\x0e\x3a\xd5\xe8\xde\x6e\xa9\x90\x85\xb1\x01\x63\x7a\x4a\xd5\x36\x33\xd2\x74\x5c\x2f\x4d\x8c\xeb\x1e\x0e\x2c\x47\x3e\xec\x0d\x15\x2f\x49\x6b\x64\xb5\x81\x33\x4c\x45\xd6\x3e\x2a\xb9\xbe\x39\x2a\xe3\x3f\xed\xaf\x59\xb9\x9f\x76\xc4\x76\x51\xd2\x7d\xb9\x05\x19\xea\x53\xaf\x87\xf2\xbb\xa7\x5f\x55\xfb\x0d\x92\xa7\x8c\x0e\x6f\x54\x74\xaf\xb3\x77\x03\x77\x3e\x74\xff\xba\xf6\x68\x9b\x3e\xa4\xfb\x5f\xb1\x63\xad\x85\x4f\xbc\xfa\x31\xbb\x57\xeb\x4f\xb6\xbe\xb5\x76\xa9\x31\x6b\x0a\x7e\x09\x23\x7a\x4d\xcd\x78\x9a\x01\xaf\x63\xbf\x0d\x48\x17\xeb\x62\xe5\xc1\xd5\xed\x9a\xa7\x29\x5f\x52\x1b\x44\xdb\xa1\x8c\x2e\x96\x93\xae\x1e\xfd\x90\x2c\x28\x93\x84\xbe\xb1\x6c\xbc\x86\x35\x65\x19\x87\x24\xc8\x57\x2c\x15\x41\x98\x8a\x39\x75\xee\xb6\xc2\x18\xc7\x24\x32\x80\xcc\x37\x45\x48\xb3\x57\x1b\xdc\xfd\xac\x01\xcc\x16\xe3\x99\xe8\x6f\xac\x37\x7c\xf8\x95\xc8\x29\xb7\x60\x66\xe8\xe0\x0d\xd3\x23\x64\x41\x01\xd0\x15\x18\x5b\x22\x3d\xc6\x2c\xdd\x65\xc1\xc7\xbb\xa2\x2f\xbe\x89\x2a\x80\x42\xb9\xdb\x15\x51\x13\x83\xba\x2f\xa7\xef\xdd\x50\xa3\xdc\x87\xa4\xdf\x8c\xc9\x39\x85\xd4\x4c\xbc\x1f\x7f\x88\xe5\xa7\xd8\x72\xac\x92\xf7\xf9\x41\x2a\xc3\x4c\xb1\x30\xd6\x1f\x23\x27\x8c\x37\xc7\xed\x4d\x9d\x06\xa2\x46\xff\x73\x9e\x52\x6e\x79\xde\x46\xdd\x9c\xa7\x64\x94\x94\x29\xab\x9a\x0b\x53\x8b\x9a\x5f\x9a\x5a\xdc\xf2\x26\x20\x3c\xf5\x10\x67\xfc\x33\xb9\x30\xe6\x8a\x3c\x5d\xb4\xc2\x78\xe5\x06\x1c\xcd\x40\x9a\x75\x8a\xb9\xa5\x25\x39\xfc\xed\x46\x9f\x5b\x57\xe0\xb6\xbc\x19\xa8\xac\xbe\xd0\xbd\x48\xef\xa4\x12\x90\x49\x68\x53\xa9\x16\x11\xa7\x96\x7f\x52\x48\xef\x00\xc8\x07\xf2\x60\x24\x73\xe2\x72\xdc\x50\x1b\x9b\xdc\xa7\xaf\x5f\xd9\x8b\xd1\xd5\xc4\x6a\x0d\x57\xa2\x05\xa5\xea\x2c\x4b\xc3\x78\xf9\xf5\x2b\x45\x79\xbf\x2b\xeb\x5d\x95\xa6\x95\x94\x48\x2a\x97\x24\xf6\x5e\xf7\x4c\x4f\x3a\x3d\x40\xba\xc6\x2d\xd7\x17\x87\xbc\x2e\xf6\xb4\x98\xe6\xc7\xc7\xe1\x0f\x61\xcc\x53\x13\x28\xe3\xbe\xf2\xe3\xe3\xb0\xd2\xb2\x5e\xdf\xef\xf1\x71\x78\xf2\xc6\x02\x9e\x26\x21\x51\x56\xf7\xa3\xf7\x66\xbb\xa8\x26\x4c\xc5\x13\x0b\x8e\xd8\x4d\xa4\xcc\xe3\xec\x72\x61\xaf\x03\xbe\x7e\x75\x79\xb4\x54\xd0\x1a\x59\x68\xbb\x79\xa1\x7e\x4f\xc4\x8d\xe9\x42\x18\xe9\x6a\x41\x3c\x9b\x03\x5f\x77\xdf\x6f\x8e\x63\x7d\x7c\x1c\x9e\x86\xea\x03\x20\x7f\x7e\xfd\xca\xe4\x82\x99\x5f\x0c\xde\x30\x5d\x8d\x5f\x4c\x21\x1e\xa3\x5f\x8e\xac\x4d\x7e\x8a\xad\x6a\x0d\x51\x6d\x95\x37\xad\x41\x44\x42\x97\xd6\x86\x1f\xbd\x8f\xaf\x27\x57\xaf\x99\xc3\x28\x7d\x63\x3b\xde\x83\x1a\xb5\x60\xa1\x1e\x0a\x08\x40\x7a\x60\xbe\xb9\x0f\x17\xda\xf0\x5d\xeb\xaa\xb6\x21\x85\x26\x55\xd8\x82\x9c\xd6\xe9\x50\x06\x17\xcd\x2c\x00\x43\x91\x0f\x0c\x29\xd8\x98\x95\x5c\xc1\x19\x2d\x50\xa8\xe8\x01\x04\x37\xe7\xef\xe3\xf7\x19\xfc\x3f\xf6\x89\x43\xc6\xc5\x1c\x4f\x9b\x0c\xca\x3e\xad\x04\x26\x9d\xbf\xd7\x25\xaf\x72\xb5\x72\x7a\xbe\xff\x1d\x1c\xc0\x80\xf0\xda\xe6\x80\x7f\x0a\xb3\x55\x88\x05\xd0\x3a\xd5\xd6\x12\x40\xb5\x98\x54\x33\x4c\xa0\xd7\xeb\x94\xe1\xbc\x98\xcb\x40\x40\xc8\xa5\xfd\x2a\x4e\x93\xf2\x47\x51\x42\xd4\xc2\xdc\xb9\x88\x7d\x55\x92\x52\x8f\x3f\xcb\x02\x91\x64\x2b\x43\x58\xee\x60\x64\x9b\x3f\xa4\xdf\x55\xee\x1b\x22\xfe\x97\xee\xad\x6a\x2e\x00\x64\x90\xbb\x44\x56\x05\x29\x97\x80\x14\xc2\x8b\x64\xa4\xda\xbe\xd4\x87\x34\x07\x0b\x21\x3c\x6e\xd3\x74\xbb\x49\x44\x9a\x81\x25\x59\x60\xeb\x45\x86\x3f\xdf\x74\x63\x95\xc0\x01\x3b\xc3\x1f\x69\x75\xfd\x5a\x1e\x68\x15\x3c\xbd\xba\xd6\x95\x81\xf4\x76\x2b\xa9\xca\xc6\x5c\xfb\x02\xb0\x57\x0b\xc4\xb4\xd2\xc8\x00\x9f\x60\x84\x7b\x04\x99\xf6\xad\x23\x16\xc7\x6a\xfe\x24\x8c\x61\x5f\x1c\x31\x27\xf7\x05\x1e\x7e\x7c\x1c\xbe\xc1\x2c\x62\xbd\x74\xc6\xd1\x03\xfb\x24\xd3\x0f\x8a\xe5\x09\x00\x67\xbc\x61\x9e\x01\xa1\xd7\xc7\x73\xbd\xc5\xe6\x6b\x47\xcb\x3e\x44\x28\x37\x93\x3f\x81\x14\x82\x3e\x6d\x7b\xc3\x40\x2d\xea\x8d\x8b\x2c\xe3\x18\x41\x6a\x7e\xcd\xd5\xc7\xfc\x08\x29\x59\x1d\x3b\x3c\x52\xc3\xbf\xa9\x57\x03\xc1\xd6\xe6\x88\x47\xa3\xb2\x5d\x3d\xda\x9b\x6f\x2e\xcd\x54\x4d\xb3\xa7\xe6\x3e\xcd\xc9\xfb\xef\x07\x69\x38\xd4\x28\x52\xa4\x87\xad\x6b\x67\x5d\xbd\xfb\xb7\x34\x42\xe0\x0f\x87\xa5\x8d\x49\xd9\x0d\x8a\x56\x0a\x88\x98\x61\xbc\x2d\x59\x85\x35\xcf\xce\xe1\xd0\x69\x8d\xb4\x3e\x71\x8a\xa4\x10\xb4\xf4\xf6\x08\x63\xd4\xc3\x45\xac\xcb\xe6\xc1\xb9\x58\xb7\x5a\x07\x5e\x21\x63\x1c\x78\xa5\x1a\x6a\xf2\x74\xee\xd6\xde\x6e\xed\xec\x56\xe5\xf9\x3e\x75\x9e\xef\x5b\xe9\x2c\xfc\xa2\xbb\xe7\x33\x04\xa4\xe4\x6b\xfb\xe1\x94\xf7\xcd\xfb\x9d\xf9\x40\xb2\xc2\x5e\x7f\x1f\x5f\x48\xc0\xbf\x02\xd4\x34\x0f\x6b\x8b\x9a\xa7\xff\x32\x7c\x39\x7c\xf9\xdf\xfb\xd1\xce\xe8\x0a\x65\x20\x22\x64\x1f\x60\xf6\x4f\x6b\xb6\x77\x39\xbd\x36\x8b\xe8\x90\x4f\xfa\xf8\x38\xbc\xb4\xf1\x7b\x46\x48\x63\x2e\x63\xcd\xfb\x6d\x09\x8c\x35\x45\x42\xc0\xb2\x5d\xa6\x74\xd2\x6f\x4d\x21\xeb\xdc\xec\x5c\x8b\xca\xe7\x73\x21\xe8\x03\x7c\x6d\x5b\xd2\xed\x26\x57\x8a\x3e\xe3\x96\x13\x1b\x30\x13\xe4\x0e\x20\x94\xe0\x9c\xc6\x64\x0a\x69\x13\x18\xfe\x49\x57\x5c\x11\x03\xb9\x11\x88\xcb\x09\xcb\xb1\xc3\xb3\x9d\xaf\xf8\xf6\xff\x43\x54\xdf\x2e\x09\x13\x1d\x14\x3c\xac\x62\x5d\xd5\xe8\x9c\x58\xb2\x5b\x74\xbf\xd4\x11\xd8\xc0\x30\x32\x04\xa0\xd1\xaf\x64\x9a\xe9\xb5\xa1\x3d\xa8\x83\x2a\xa9\xcb\xbc\x50\xbf\x6f\x09\xf7\xb0\x50\xec\xca\xae\xa9\x8d\xf1\x1f\xf5\x6f\x37\x1d\xd3\xa6\x18\xe6\x61\xb7\x45\xdc\x52\xae\x65\xc6\x23\xfb\x53\xe1\x7f\x68\x0e\x09\xd9\x15\x66\x4b\xea\x56\xd6\x06\x8c\xd8\xcd\xc8\xaf\x8f\xd4\xd4\x9e\xd4\x6c\xd3\x5a\x6e\xdc\xe9\x12\x4d\xdd\x31\x33\x17\x22\xb6\x09\x2d\x17\x24\x35\x25\xfa\xdc\x99\x34\x54\xc8\x5e\xe8\x33\x37\xa6\xa7\x36\x3a\xb6\xba\xd5\x5f\x15\xd7\xa0\x4e\x56\x59\x51\x87\xee\xc4\x5e\x73\x56\x36\x77\xce\xe6\x49\xf9\xcc\x88\x5c\x6d\x05\x48\x1c\x5e\xf5\x34\x18\x93\xb6\x72\xdb\x84\x21\x2b\x9d\x6e\xea\xaa\xcf\x89\xea\xe1\xe4\x70\xef\xe3\x5e\xe3\x5d\x92\x41\x19\x77\x81\xe3\xb4\x85\x89\xcc\xfe\xe6\xda\x8f\x9b\xa0\xe0\x3c\x8d\x8e\x59\x12\x09\xae\x84\xc5\x85\x67\x1c\x7f\x15\xc3\xe5\x10\x41\x9b\x5e\xff\xe1\x0f\x0f\x32\x4f\x6f\x53\x91\xc8\xe1\x5c\xae\xe9\x06\x63\x1d\xc5\x0d\xa1\x5e\x12\x3d\x57\xbc\x09\x29\x1e\xb2\x49\x1c\x84\x1f\x73\xf1\x85\x78\xe1\x98\x65\x22\x8a\xf0\xb4\x61\x35\x00\xc0\xe7\xdb\x74\xbb\x59\x6c\x37\xa9\x88\xb3\x50\x44\xa0\x0b\xd9\x5c\x63\x1e\x6a\x53\x19\xce\x59\x99\x08\xd0\x30\xb2\x46\x91\xb5\x88\x76\xd6\x85\x26\x23\xe5\xff\xfa\xe5\xff\x0f\x00\x00\xff\xff\xa1\xcb\x16\x4b\x9d\x05\x04\x00") + +func cfI18nResourcesFrFrAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesFrFrAllJson, + "cf/i18n/resources/fr-fr.all.json", + ) +} + +func cfI18nResourcesFrFrAllJson() (*asset, error) { + bytes, err := cfI18nResourcesFrFrAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/fr-fr.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesItItAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x5b\x73\x23\x39\x72\x30\xfa\xfe\xfd\x0a\x9c\xde\x07\xf6\x6c\x90\x54\xcf\x65\x1d\x0e\x39\xbe\xb0\x39\x12\x5b\x4d\x8f\x5a\xa4\x29\xaa\xd7\x33\xa3\x09\x0d\x54\x05\x92\xd8\x2e\x02\x35\x00\x8a\x1a\xb6\x56\x8e\xf3\xf8\xfd\x0c\x3f\xee\xf3\xf7\xe6\xe7\xf9\x63\x27\x90\x00\xea\x42\x16\xea\x42\x52\x9a\x5e\x1f\xdb\x11\x3b\xea\x62\x55\x66\x22\x01\x24\x12\x79\xfd\xf1\x7f\x21\xf4\xf8\xbf\x10\x42\xe8\x15\x0d\x5f\x9d\xa2\x57\xb7\xec\x96\xcd\x46\x93\xd3\x5b\xf6\xaa\x6b\x9e\x2b\x81\x99\x8c\xb0\xa2\x9c\xb9\x17\xae\x6f\x2e\x2e\x86\xd3\xd1\xfb\xe1\xd5\x6c\xac\xdf\xfc\x5f\x08\x3d\x75\xcb\x20\x7d\xcf\x13\x81\xfe\xf5\x7a\x7c\x85\xa4\x12\x94\x2d\x90\xdc\x30\x85\x7f\x45\x54\x22\xca\xd6\x38\xa2\x61\x1f\xa1\x89\xe0\x31\x11\xb9\x9f\xd4\x92\xca\x53\x84\x82\x39\x92\x44\xf5\x44\xc2\x18\x65\x8b\x1e\x61\x6b\x2a\x38\x5b\x11\xa6\x7a\x6b\x2c\x28\xbe\x8f\x48\x6f\x21\x78\x12\xa3\xce\xe3\xed\x2b\x86\x57\xe4\xf6\xd5\xe9\xed\xab\x35\x8e\x12\x72\xfb\xaa\xbb\xfb\xe8\xa9\x53\x31\xa6\x4b\x8c\x24\x65\x0a\x4b\x49\x51\x48\xa2\x08\x5b\x92\xb1\xa1\x9f\x71\x86\x7e\xfb\x1b\x02\x9a\x71\x1f\xa1\xfc\xeb\x01\x17\x82\x28\x85\xf5\x0b\xfa\x3b\xb2\x48\x08\x53\xa4\xfd\x10\x78\x46\x2f\x17\x76\x0c\xdb\xcf\x9e\x3a\xcf\xcb\x6e\xa9\xf0\xe2\xef\x9c\xdd\x4d\x87\x70\x18\xbb\xff\x88\x66\x4b\x22\x09\x92\x44\xac\x69\x40\x50\x1c\x61\x26\xd1\x12\xaf\x09\xc2\x0c\x61\x29\x79\x40\xb1\x22\x21\x0a\xb8\x54\x7d\x74\x26\x08\x56\x7a\x4e\x70\xfa\x05\x65\x52\x61\x16\x10\xf4\x40\xa3\x08\x51\x16\x24\x02\x26\xc3\x7c\xe1\x65\xde\x1f\xd1\xbf\x25\x44\x2a\x8a\x62\x8a\x19\x45\x21\x35\x00\x3f\x51\x8e\x96\x98\x31\x8e\x12\x06\x10\x78\x4a\x04\xef\x6b\x06\x06\x82\xe0\x4f\x94\x33\xa2\x3f\x49\x58\x87\x6a\xec\x9f\xb0\x66\x7f\x06\x21\xe0\xab\x98\x0b\x45\xc4\x6f\xff\x89\x7e\xd1\x68\xb8\x81\xd5\xf7\xb1\x61\x10\xc7\x48\x2a\x2c\x14\x09\x2b\x64\xc6\x20\x8e\x23\x1a\x58\xf4\x78\xbd\xa6\x58\x61\xbf\xe0\xb0\x30\x15\x41\xc1\x12\xb3\x05\x09\x91\xe2\x0e\x49\x17\xdd\x27\x0a\x31\xae\x08\x52\x4b\xac\x10\x55\x68\x89\x25\x7a\x93\x72\x53\xf6\xbd\x74\x54\xe1\x7b\x7c\xec\x0f\xe2\xf8\x0a\xaf\xc8\xd3\x13\x7a\xc0\xd2\xe1\x43\x89\xd4\xb3\x66\xe7\x65\xb5\xc2\x2c\x44\x3f\x3f\x3e\xf6\xcf\xcc\xdf\x4f\x4f\x3f\x57\x0c\xfb\xb2\x83\xf3\x03\x2f\xe0\xf8\xed\x6f\x30\x46\xec\xd8\x81\x12\x45\x23\xfa\xe9\x13\x66\x21\x47\x34\xd2\xc8\xe0\xcf\x1d\x64\x9e\x41\x5c\x71\x84\x63\x8a\x08\x0b\x63\x4e\x99\xd2\x3b\xc1\xbf\x86\xae\x88\x94\x09\xcb\x5e\xd6\x5f\xd2\x55\xcc\x35\x45\xfe\xb9\x9e\xf2\x44\xb3\x9d\xa3\x7b\x82\x12\xb6\xc2\x71\x4c\x42\x2d\x41\x18\x57\x28\x48\x84\x20\x4c\x45\x1b\x64\x9f\x2b\x8e\xd4\x92\x20\xcb\x00\x8d\xda\x4f\xce\x25\x46\x82\xeb\x2d\x1d\x52\x14\x24\x14\x61\xc6\x92\x28\xc2\x82\xa0\xa8\x63\x17\xb1\xe1\xa0\x95\x0b\x58\xa9\x04\x47\x7a\x63\x93\x74\x91\x63\x84\xa3\xa8\xc0\x6f\xef\x38\xf4\x01\x87\xd0\x8d\x24\xa8\x13\xcc\xd1\x0a\x8b\x8f\x44\xc5\x11\x0e\x08\xea\x49\x74\x3d\x9c\x7e\x18\x9d\x0d\x3b\x7a\x00\x6b\x4a\x1e\x50\x48\x64\x20\x68\xac\xa9\x95\x88\xcf\x11\x65\x21\x5d\xd3\x30\xc1\x91\xdd\xf3\x7c\x8e\x30\x5a\xd0\x35\x61\x6e\x6b\xfb\x47\x5a\x38\x3a\x51\x3a\xe7\x5e\x42\x7e\x18\x8d\x3b\x48\xcb\xeb\x35\x95\x09\x86\x77\x35\x57\x88\xa5\x4a\x8f\x53\x0b\x50\xaa\xc5\xe3\x82\x47\x39\xa1\x90\x30\x14\x12\x45\xc4\x8a\x32\xac\xb7\x8f\xdd\xe1\xd5\x4c\x19\x48\x49\x17\x0c\x09\x1e\x11\x89\x1e\xa8\x5a\xa2\x8e\x5e\x7e\x66\x6e\x6f\x24\x11\x4f\x4f\x20\x62\xb9\x58\xf4\xf4\x4b\x1d\xa4\xf7\x43\xf9\x3b\x32\xc6\x01\x31\x6f\x35\x64\x07\x96\x92\x2c\x18\x46\x14\x89\x44\x8f\x25\xe0\xac\x16\x3f\x69\x80\xbd\x6a\xc4\xb0\x0a\x34\x84\xb7\x33\x2c\x16\x44\xa5\x5b\x0d\x16\x80\x82\x67\x88\x91\x07\x04\x00\x1b\x0e\x24\x9b\xd6\x72\xc8\x70\x00\xc7\x24\xa0\x73\x1a\xe8\xf9\xa4\x11\x62\x09\x5f\x73\x8d\xe4\x13\xe5\xcd\x08\xf6\x11\xca\xc5\x62\x2f\x32\xfd\xe4\x45\x18\xc8\xc3\x1a\x34\x66\xfa\x0b\xd8\x5f\x95\x64\x26\x76\x77\x45\x7c\x41\x19\xea\x61\x34\x98\x8c\x50\xaf\x27\x3f\xd2\xb8\x27\x65\xd4\x33\x47\xbb\xa6\xac\x83\xb8\x80\x57\xb5\x10\xaa\x78\x4b\x2f\xe2\x24\x8e\x05\x91\x46\x67\x41\x44\x08\x2e\x5a\x0f\xb5\x29\x4d\x4d\x48\xd2\x8c\x22\x11\xd5\x5b\x4c\x10\x77\x5e\x02\x59\x7e\xe6\xd0\xd8\x30\xe7\x67\x1c\x86\xbd\x38\x4a\x16\x94\xf5\x04\x89\xf9\xcf\xe9\xf1\xa2\x4f\xee\x30\x44\xfa\xa1\xf4\x49\x92\x72\xf0\x08\xa1\xb3\xb7\x77\x57\x83\xf7\x43\x14\xf0\x78\xd3\x93\x3c\x11\x01\x41\xd7\xe3\x9b\xe9\xd9\xb0\x37\x98\x4c\xd0\x6c\x30\xbd\x18\xce\xe0\xcf\x1f\x7b\xd2\xfd\xf3\x7a\x32\x38\x1b\xa2\x1f\x7b\xdc\x3d\x18\x4f\x2f\x7e\xfa\x09\xfd\xd8\xeb\x31\xde\x13\x04\x8e\xc2\x9f\xbc\xe7\x9c\x07\xeb\x60\x32\xb9\x1c\x9d\x0d\x7e\x18\x8d\xaf\x86\xbd\xf3\x51\x6f\x3c\x1d\x5d\x8c\xae\x86\x3b\xcf\xcf\x87\xd7\xb3\xd1\x95\xf9\x37\x10\x75\x3d\xd1\xff\x28\xf9\x89\xa3\xf1\xf4\x62\x70\x35\xfa\xe1\x87\xf2\xaf\xcb\x48\xf6\xf1\x69\x0c\x02\x1d\x47\xd1\x06\xc5\x82\xaf\x69\x48\x10\x46\x11\x95\x4a\x8b\x73\x98\x89\x5e\x08\x53\xab\x75\x00\x85\x17\xd2\xa8\x1b\xa0\xaa\xdd\x13\xf4\x20\xa8\x52\x84\xb9\x53\xee\xc3\xd9\x60\x72\x67\x4f\x8e\x6b\x94\x53\x3c\x91\x53\x3c\xd1\x9c\x0b\x84\xd9\x06\xdd\xf3\x84\x85\xf9\x63\xd1\x3b\xc7\x08\xa1\xb7\x5c\x30\x2a\x03\x8a\xe6\x38\xe0\x91\xc2\x8a\xae\xb1\x39\xf6\xf4\xe9\x1d\x11\x16\x70\x2d\xeb\x15\x5e\x20\x4b\xad\xd6\x9a\x42\x8c\xd6\x54\x2c\x78\xa4\x15\x28\x82\xd6\x44\x68\x75\x4e\x9f\x17\x4a\x71\xc4\x40\xdd\x36\x74\xd1\x08\xb4\x41\xbc\xba\xa7\x00\xb5\x38\x0e\xbd\xbc\x55\xa2\x14\x1c\x38\xb9\x93\x95\x66\xea\xad\xe7\x38\x29\x67\xb0\x3d\x1d\x7b\x4e\xb6\x68\x01\x3f\xa7\x8b\x44\xc0\x90\x51\x8c\x05\x5e\xe9\x23\x4b\x5f\x57\x10\x36\xda\xbf\xb9\x0f\xf0\xfb\xbf\x90\x40\x21\xca\x7a\x11\x65\xa4\x7f\xcb\x72\x6b\x2e\x89\x43\xac\x48\xcf\x69\xd5\xbd\xa0\xf9\x05\x45\xdf\x44\x7c\x6b\x61\xae\x79\x13\x70\xa6\x30\x65\x70\x97\x3a\x90\xf8\x3e\x02\x5c\xb3\x25\x41\x31\x56\x4b\xb7\x72\x72\xdf\x19\x8c\x98\xe9\xf5\xa5\xaf\x10\xf7\x92\x47\x5a\xe1\xe2\x02\x09\xa2\x97\xc5\x3a\xfb\xd4\xd0\x57\xc7\x88\xc9\x60\xf6\xee\x6e\x36\xbe\x7b\x3b\xba\x1c\xda\xb1\x0e\x7f\xc5\xab\x38\x22\x7a\x95\xef\x90\x78\x0a\x6f\x3c\xc2\xff\x22\x84\x6e\x5f\x05\x51\x22\x15\x11\x77\x8c\x87\x44\xde\xbe\x3a\xcd\x7e\x33\x3f\xf3\x84\x29\xfd\xf8\x4f\xdd\xc2\xf3\x15\x59\x71\xb1\xb9\x5b\xdd\xeb\xdf\xbe\x7c\xf3\xd5\x37\xee\xd7\x27\xf8\xe3\x69\x9f\xf5\x4e\x1d\xa7\x04\x68\x37\x29\xf3\x8d\x5e\xe8\x26\x85\x16\x6f\x33\x94\xe9\x7d\xc2\x17\x0b\xa2\x17\x3e\x8c\x14\x06\xad\x7f\x09\xb8\x88\xb9\xd0\xea\x6e\x93\xd5\xd4\xec\xae\x68\x79\xfc\x76\x8b\xf8\xae\xde\xfc\x66\x5c\x09\xcb\x16\x16\x61\xcf\x30\x32\xbb\xcc\x46\x91\xde\xbd\x01\x17\x92\xc3\x87\x80\x54\xeb\x89\x19\xae\x38\xf9\xed\xff\x22\x22\x25\x11\x20\x4d\xd2\xd7\xf5\xde\x8e\x12\xc5\x11\x77\xcb\x4e\x2f\x37\x4b\x78\xed\x8a\x1b\x4e\xcf\xc6\xd3\xeb\xf1\xdd\xe0\xb2\xb0\xea\x24\x59\xc5\x14\x64\x55\x09\xcd\x2f\xb6\xee\x7e\x07\x59\x75\x6a\x39\xe0\x58\x76\x4f\x59\x98\x32\x6c\x30\x99\x98\xa7\x56\xe4\xde\x8d\xae\xae\x67\x83\xab\xb3\xe1\xff\x8f\xa5\x58\x73\x06\x1d\x2a\xdd\x62\x7d\x39\x92\x52\x1f\xc1\x7a\xc1\xdc\xbe\x12\x04\x87\x3d\xce\xa2\xcd\xed\xab\xcf\x51\x50\x55\x2e\xa5\xab\xf1\xfb\xe1\x5d\x5e\xb5\x42\x23\xcd\xa9\x1f\x06\x77\xe7\xc3\xcb\x3b\x77\x97\xfc\x1f\x79\x56\x29\xcf\xf6\xe4\xe8\x71\x84\x5e\x83\xe5\xf8\x19\xc8\xaf\x40\x90\xbc\xc8\xb7\xfb\x12\x4d\x2e\x07\x57\x7f\x47\x52\xec\xf8\x42\xec\x50\x3e\xfd\x8f\xaa\xb6\x87\x04\x2c\x63\xb2\xde\x93\x93\xd1\xe0\x6a\xfc\xdf\x45\x00\x3e\xab\xfc\x3b\x0e\x47\xff\x3e\xb5\xbe\x89\xde\xc0\x72\xc9\x93\x28\x84\x7d\x8e\x3e\xd1\x18\x98\xd2\xd5\xfc\x11\x91\xd9\xdc\xd9\x43\x7d\x81\x47\x11\x0f\x70\x84\x42\x2a\x48\xa0\xb8\xd8\xf4\xd1\x84\x4b\x0a\x52\x87\x4a\x84\x51\x0c\xff\x5a\x13\x44\x99\x22\x0b\x22\xba\x48\x12\x25\x51\x2c\x28\x17\x54\x6d\xba\x60\x2f\xa5\x12\x49\x0e\xce\x85\xb9\xe0\x2b\x14\xf1\x07\x22\x95\xc6\xb6\xa4\x8b\x25\xf1\xfb\x7e\x76\xd6\xc1\x9a\xe4\x26\x1c\x96\xc4\x27\x1a\x77\xf5\x3f\x6e\xa6\x97\xd9\x24\xc3\x18\x38\x4a\x18\xce\x08\x37\x03\x21\xe0\x19\xd2\x44\x9b\xc5\xf9\xdb\xdf\xf4\x37\x2c\x59\x11\xc1\x61\x08\x82\xbb\x21\xf1\xae\xf3\x10\xa0\x08\xbb\x01\xfd\xf6\x9f\x88\x84\xfa\x2b\x2e\x42\xca\xb0\xc2\x28\xc4\x91\xfe\x99\xfe\xf6\x5f\xe8\x1e\x4b\x09\x56\x79\xfb\x6f\x1c\x29\xec\xb7\x17\x80\x34\x36\x12\x3f\x34\xb2\x75\x0f\x25\x72\xa4\xdc\x84\x1a\x47\x1c\x98\xc5\x23\x82\xb0\x10\x78\x63\x0c\xda\x39\x21\xaa\x8f\x07\xa9\x4f\x18\x63\x4c\xbf\x37\x8e\x1e\x82\x44\x12\x91\x2a\xab\x4c\x7e\x12\x40\x10\x28\x7e\x88\xf6\x71\xae\xe7\x11\xaf\xed\x97\xc6\x90\xcf\x2d\xc9\xe9\xd6\xa1\x86\x70\x1c\x45\x1d\x98\x17\xc6\xc1\xb6\x63\x28\x5f\x73\xc6\x51\x44\x90\x20\x0b\x1e\x55\xd8\x64\x0e\xe5\xb1\x81\x00\x4b\x2a\xc7\x66\x18\xc4\x41\xac\x36\x70\xe1\xf5\x6f\xb1\x24\x68\x6c\x55\x10\x69\x94\x3f\xbe\xa2\x4a\xef\x16\xbd\x77\xb4\x3e\x04\x5f\xca\x5f\x12\x2c\x08\xba\x17\x38\xf8\xa8\xb7\x98\xfe\x31\xef\x75\x5d\xd2\x28\x74\xba\x8c\x7e\x51\x90\x5f\x12\x2a\x48\xa8\x25\xad\xb2\xa3\xe8\x23\x64\x45\xd5\x07\x38\x60\xff\x22\xb9\xdd\x31\xc4\x9c\xbd\x46\x46\xfd\x68\x25\x4a\x26\x8f\x6e\x5f\xc5\x82\x2b\x1e\xf0\xc8\xa8\x6a\x2a\x88\xf5\x11\x92\xfd\x1c\x12\xa9\xf4\x86\xa0\x9c\x99\x37\xbe\x7c\xd3\xff\xea\x9b\x6f\xfa\x5f\xf6\xbf\xfc\xc7\xe2\x9b\x31\x17\xca\x2a\x7c\x5f\x7f\xfd\xe6\x1f\xac\xae\xe7\xa4\xd7\x4f\x2f\xb1\x0a\x01\x96\x3d\x51\xdc\x52\x04\xec\xc7\x59\x8e\x08\x5d\x76\x9c\xfc\x0f\xa9\x16\x0b\x76\xae\xd7\x94\x30\xe2\xa6\x98\x48\xc9\x11\x41\x2c\x3b\xdc\x00\x8c\x1d\x4c\x2c\x88\x24\x4c\x51\x24\x35\x31\x11\x28\x6b\xfa\xb0\x95\x14\xfd\x92\xe0\x50\x10\x44\x50\x94\x62\x99\xd3\x45\x44\x0b\xfe\x6f\xb4\x7b\x24\x01\x16\x98\xf1\xfc\x79\xf4\xbb\xce\xb5\x6f\xdf\x7e\xa0\xe4\x41\xf3\x9a\x3f\x80\x29\xf9\x97\x84\x2b\xec\xfc\x73\xee\xe4\x36\x0f\x7d\xae\x36\x00\xe2\x3c\x88\xf0\x2e\x41\x78\xa5\x99\x4e\x8c\x9b\x6d\x1b\x4c\x39\x29\x38\xd4\x92\x03\x4b\xe4\xc5\x83\x17\x0b\x9a\x30\x08\x1b\x58\x11\xe4\x83\x13\x72\x62\xdc\xc6\xe4\x57\x2a\x95\x06\x88\xc1\xdf\xe1\x83\xca\x38\x43\x44\x52\xa9\x88\x81\x0b\xbe\x11\xaa\xcf\xb1\xe6\x08\x18\xc2\x6b\x4c\x23\xe0\xa0\xf1\xbb\x00\x98\x96\x1e\x96\x39\x17\xc8\x47\x65\x4c\x04\xf2\x7c\xa6\x95\x83\x48\x5f\xe8\x36\x2e\xb0\xc0\x07\xe4\xb7\xbf\xa1\x05\xfd\xed\x3f\x6d\x58\x80\xc7\x17\x58\x84\xc7\xe3\xb8\x01\x3c\x01\x5e\x91\x2a\x88\x64\x15\xab\x4d\x05\x9c\x75\xc2\xab\x3e\xd7\xec\xce\x58\x6c\xd9\xeb\x5f\x29\xd6\x97\x1f\x52\x19\x73\x46\xc1\x15\xa1\x37\x7f\x36\xb5\xde\xd5\x63\x71\x09\xa2\xbf\x0c\x29\x5b\xf4\xd1\x24\x22\x5a\xac\xac\xf0\x47\x82\x64\x22\x08\xa2\xca\x28\x64\xe6\xe6\xd4\x60\xbe\x81\x1e\x01\xc4\x84\xa4\x0f\x9e\xf0\x00\x2e\x94\x20\xd8\x24\x05\x71\x99\x23\x2e\xa4\x00\xb5\x47\x9d\xfc\xf0\x1d\xbb\x9a\xd4\x39\x4f\x98\x77\x86\x34\x62\x25\xf8\xda\x3f\x37\x82\xac\xf8\x3a\x55\x17\xad\x93\x2a\xa5\x85\x12\xe9\x03\x2d\xe8\x8a\x6b\xb9\xaa\xb5\xb2\x4e\xe6\x2f\xaa\xdb\x3e\xb7\xaf\x26\xc0\x30\x79\xfb\xca\x1d\xa1\xe9\x28\xdc\xf9\x69\xb9\x4f\x42\x14\x62\xad\xd7\x95\x53\x30\xb6\x12\x39\x0f\x31\x37\x5e\xc4\x08\xd5\xdf\x6b\x92\xa4\xa2\x2a\xa1\x8a\x7a\xf8\xd8\x49\x97\x98\x3e\x57\xb4\x28\x10\x10\x5c\x05\x3e\xd3\x3e\xba\x26\xc6\xdf\xbc\x24\x51\xec\x5b\x72\x1d\xb7\xe6\x20\x42\xca\x84\xd7\x18\x58\xe0\x07\x40\x1f\x48\x48\x73\x40\xca\xc9\x10\x3c\x51\x44\x76\x0a\x17\x07\x3d\x25\x3e\x9c\xee\x7d\x8d\x7a\x4b\x63\x37\x13\xe2\xc1\xf3\xf8\xd8\xff\x40\x84\xa4\x9c\x5d\x2f\xb9\x50\x4f\x4f\x59\xac\x85\x7d\x7e\xc9\xd9\x02\x1e\x0b\x82\x70\xa4\x4f\xf9\x20\x20\xb1\x22\xa1\x6f\x32\xae\xf5\x81\xaa\x5f\x52\xe0\x26\xc4\x4c\xaf\xec\x32\x44\xa4\x04\x8d\x67\x5a\xbe\x48\xe5\x10\x48\x5a\xaf\xda\xfc\x85\x93\xdf\x5a\x18\x79\x60\xfd\xf1\x8f\x03\xa5\xf4\x29\xcf\xd9\x29\xb2\xeb\x05\x46\x77\x4f\x19\xd6\xcb\x3c\x75\xbb\xde\x6f\x50\xcc\xe1\x55\xb0\x14\x25\x4c\x09\x7d\x77\x0c\x11\x4e\xd4\x92\x0b\xd9\x47\x23\x26\x15\x8e\x22\xe0\x59\x22\x9d\xc4\x97\x08\x2b\xb4\xe1\x89\x40\xfc\x01\x76\xfb\xc7\xfe\x1f\xff\xa8\x55\x83\x73\xae\x1f\xa3\x07\xcc\xe0\x22\x46\xed\xd7\x60\x16\x32\xb2\xe3\xf1\xb1\x6f\x48\x7a\x7a\xfa\x67\xcf\x18\x2d\xfd\x70\x95\x3a\x45\x99\x7c\x90\x9a\xef\x66\x0c\xd6\x0b\xab\x17\xbd\xa6\x95\xeb\x7b\x3b\x87\x6f\x5c\x3c\x93\x5e\x27\x58\x83\x09\xb5\x4c\xa4\x7d\x74\xd9\xb1\xd4\x58\x03\x82\x56\x74\x6c\x38\x03\x37\x26\x00\x8b\xe6\xb7\xbf\x21\x8c\x54\xc2\xb5\x8a\xaf\xef\x67\x7a\x7c\xc1\x92\x72\x3b\xc4\x0f\x09\xa7\x6e\x60\x36\xe8\xc4\x7d\x59\x18\x5b\xe9\xd4\x0c\xd2\xe8\x84\x88\x32\x82\x14\xe7\x91\xe1\x93\x22\x02\x07\xca\xe8\x22\x67\x11\x4f\x42\xf4\x56\x4b\x09\xe1\x3b\x47\x6e\x18\x47\x52\x89\x44\x0f\x56\x53\xb8\x30\x41\x5f\x76\x37\xea\x13\xd4\xc0\x5c\x50\x61\x34\x93\x22\xd0\x72\xe2\xce\xcf\x4f\xa6\xc3\xf7\xe3\x0f\x43\x34\xb9\xbc\xb9\x18\x5d\x79\x70\x0f\x2e\x2e\x46\x37\x57\x17\xa3\x93\xe9\xe8\xfd\xcd\xf8\xc3\xc8\xbd\xdd\x0c\x28\x9a\x0e\x27\xe3\xeb\xd1\x6c\x3c\xfd\xbe\x29\xfc\xec\x8b\xbd\x51\x9d\xee\x8d\xeb\xb4\x21\xb2\xc6\x18\x6a\xc0\x7e\x18\x5c\x9d\x0d\xcf\x7d\xc0\x3e\x0c\xae\x7e\x18\xcc\x86\xd5\x1f\x7b\x49\xb1\x5f\xfb\x70\x5f\x8e\x06\xd7\xbe\x6f\x3d\x9f\x4c\x46\x60\x23\x49\x43\xa7\x5a\x7f\xed\x62\x27\x3d\x1f\x0e\x5d\x68\xe5\x60\x32\xaa\x07\x82\x5e\x93\xfe\xa2\x8f\x96\x4a\xc5\xf2\xf4\xe4\x04\xc7\xb4\x6f\x6f\xa0\xfd\x80\xaf\xbe\x68\x80\x03\xbd\xc6\x21\x22\xe6\x76\xd3\xf5\x03\xaa\xa7\x24\x3b\xe8\xb1\x82\x63\xe0\x66\x7a\xf9\xe4\x8d\xe5\xae\x07\xe8\x9b\x97\x3c\xf1\xbe\x79\xcd\x83\x81\xe8\xd9\xc9\xc8\x7d\xf6\xe4\x33\x4d\x17\xe0\xee\x7e\xb4\x07\x22\xf4\x5a\xff\xbe\x36\xa7\xa1\xfb\xd9\x1e\x8e\x4f\x4f\x4d\x26\xa7\x0c\xa6\x85\x47\xf2\xbf\xe7\x80\x36\xa3\xb3\x3d\x37\x9a\xb0\xc2\x0d\xb5\xe5\x9c\x4f\xae\x7d\xdb\x37\x73\xa2\x79\xf7\xc2\xc4\xbb\x81\xf3\x5f\x7b\x17\xca\x24\x75\xa6\xf8\x88\x30\xb6\xeb\xa2\x47\xcf\x0f\x4d\xdf\x85\x3d\x80\x76\xfc\x82\x1e\x28\x41\x40\xa4\x84\xfb\x62\x2e\x4c\x38\xc6\x42\xd1\x20\x89\xb0\x40\xf7\x82\x7f\x24\xbe\xf8\x45\xf3\x35\x47\xb8\x10\xd1\xcb\x53\xef\x01\x77\x9f\xd7\xe1\x76\x96\x7c\x86\x57\x64\x87\x04\xf7\x23\x9f\xcf\x89\xa0\xcc\x17\x37\x9a\x12\x13\x21\xa6\x6f\xdf\x05\xc7\x05\x10\x86\xb3\x78\x51\x03\xcc\xc4\x72\xdb\x97\x7c\x44\xfe\x92\x50\x48\x53\xb1\xf9\x31\x48\x92\x20\x11\x54\x6d\x10\x24\x69\x48\xb0\x33\x3c\x3e\xf6\x13\x49\x04\x83\xa0\x79\x9f\x14\x02\x50\xce\x86\xad\x55\xa2\x85\x48\xe2\xd8\xe4\x46\xe8\x5b\x1c\xf9\xf4\x09\xeb\x7b\x0b\xd1\x18\xcc\x5b\xc6\x3c\xb1\x05\xbd\x86\x4e\x9b\x58\xb2\x45\xa7\x26\xb3\x00\xa7\x19\x91\x91\x21\x92\xef\x10\x39\xd7\x17\x59\x7d\xbb\x14\x24\xc6\xce\x6b\x04\xe4\x16\xb1\x94\x13\x1b\x86\x08\x43\x18\x70\xee\xca\x6b\xaf\x7a\x1e\xb2\xc0\x60\xb3\xa0\xc6\xf0\xcf\xd7\xbc\xfc\x92\x5b\x85\x2e\x11\x11\x12\x2e\x37\x00\x33\x84\xe3\xb8\x1e\x99\x0b\xf9\x77\x9e\x8a\x42\xe8\xbe\x17\x1b\x2c\x17\x40\xe5\x4e\x26\xc0\xb9\x9d\xc0\x41\x19\xe2\x62\xa1\x9f\x8d\xc5\xc2\x3e\x3b\x31\x21\xdc\xfa\xe1\xb5\xfe\xc3\x3e\x36\xb3\x77\x93\xf2\xb5\xdf\xf7\x5d\x61\x0c\xf1\x0a\xdb\x84\x25\x43\x7e\x4a\xc6\x76\xf6\x41\x91\x20\x46\xa2\xa8\x53\x0c\x9f\x2e\xa1\x4e\xef\xa7\x2d\xf2\xdc\xc4\x67\x04\xea\xc1\x81\x55\x57\x53\x5a\xce\xa7\x88\x62\xb9\x95\x38\xe2\xae\xed\x76\x59\xdc\x13\xcd\x49\x7b\x1b\x30\x59\x1c\x18\x31\x63\xf4\x3f\x7b\xeb\x94\xfd\x13\xac\x21\xf5\x11\x9a\x12\x90\x1f\x1a\xc0\x16\x58\x77\x2d\xa8\x01\xaf\xe7\x23\x24\x42\x4f\x16\x61\xc6\x3e\x64\x7c\x02\x70\x1b\x01\xff\x99\xbd\xa9\xf9\xb8\x7f\xd9\xc1\x65\xc3\x62\x24\xbb\xc6\x40\xb0\x2b\xd8\x94\x53\xc0\xbc\x78\xdd\x37\x03\xd2\x23\x84\xb1\x72\x3d\x34\x1a\x12\xc6\x57\x94\x61\x7f\xd6\x4d\x01\x4b\x88\x0b\xb7\x28\x86\x56\x3c\xe4\xfa\x69\xc0\x19\xd8\xa8\x05\xd3\x57\x34\xff\xa5\xad\xd5\xac\xe9\x79\x29\xcc\x86\xc6\x68\xb9\xdc\x49\xef\x6d\x66\xb1\x74\xfa\x08\x7d\xcf\x13\x14\x80\x65\x42\x09\x7d\x31\xb6\x64\xe8\xe9\xf0\x7d\x05\x9c\x57\x4b\xc2\x72\xd7\x5e\x2a\xdd\xeb\xf9\xa9\xa3\x6c\xcd\x3f\x56\x2d\x83\x3e\x42\xef\xf8\x03\x59\x13\xd1\x85\xfb\xb4\x35\x92\xcc\xa9\x90\x0a\xcd\x13\x73\x57\x0f\x89\x90\xca\xe2\x44\x74\x15\xeb\xfb\x23\x9f\x17\x69\xd5\x3f\x81\x41\x41\xff\x63\x97\x62\x43\x5b\xcb\xa5\x52\xb6\x12\xf2\x13\x5b\xc6\xce\x89\xbe\x34\xc7\x82\xaf\xc1\xc8\x82\x42\x2a\xcb\x6f\xd0\xbb\x24\x12\xf4\x4b\x42\x59\x48\x51\x61\xb9\xd8\x1c\x01\xf7\x99\xbe\xef\x0a\x1a\x2c\x29\x5e\x59\x80\xe5\x0b\xb0\x8f\xd0\x2c\x51\x0a\xaf\x29\xee\xa2\x90\xac\x35\x4d\x74\x05\x2b\x23\x16\x44\x73\x14\x02\xb4\x29\x61\x5c\x2f\xbd\x55\x8c\xc1\xd9\x02\x72\x2a\x47\x73\x76\xf6\x54\xd0\x0d\x66\x1a\xe6\x0d\xed\x1e\x44\x51\xce\xca\x7b\x76\x39\x72\x73\xef\x33\x42\x7a\xc1\xf0\x07\x74\x7d\xfd\x0e\x0c\x52\x56\x59\x01\xbf\x5e\x45\x9e\xcd\x99\xdd\x61\xf6\x1b\x0e\xdf\x6b\x1e\x46\xd5\xa9\x33\x83\xc8\x84\x4d\x10\xb0\x7a\xa5\x29\x6a\xc6\x34\xe7\xd3\x9c\x4d\x5e\x87\xb5\x92\xa5\x61\xf0\x5a\xea\x67\x49\x67\xbe\x83\xca\x1c\x3f\xab\x44\x2a\x74\x4f\xec\x0d\x93\x84\xe8\x9e\xcc\xb9\x70\xff\xb6\xc9\xa0\x15\xc3\xfd\xed\xff\x20\x46\xf4\x40\xb1\xa0\xbc\x90\x91\x93\xb0\xed\xc3\x24\xa4\xc8\xfa\xa1\xcc\xbf\xcd\xfa\xd0\xba\x45\xe1\xb3\x1a\x3e\x79\x0f\x6e\xef\xfb\x3e\x67\x48\x21\xe3\xd3\xff\x75\x9a\x03\x0b\xc9\x0b\xbe\xfd\x0c\x69\x18\xc8\x24\xac\x16\x32\x11\x7c\xfc\xd7\x90\x8d\xb5\x58\xeb\x6c\x7e\x8b\xa8\xff\x73\x38\xef\xa8\xf1\x4b\x59\xc7\xf1\x9c\x92\xc8\x67\xc4\xbf\xd2\xc7\x74\xe1\xf8\xb7\xd2\x06\xaf\x62\x8e\xf8\xfd\x7d\x44\x17\x58\x71\x51\xc1\xf9\xa2\xc2\x50\x74\x60\x55\x48\x3a\xbf\xca\x91\xfa\xcc\x7c\x3b\x79\x47\x6b\xd2\xc3\x7d\xe0\xe2\x23\xc4\xad\x7c\xa4\x71\x9c\xa9\x5b\x10\x18\xa4\xb1\xb6\x27\xc4\x70\x22\xc2\x6b\x2e\x78\x17\x45\x85\x4c\xe4\x9c\x26\x65\xd3\x54\xe8\x82\x71\x81\x15\x6e\x41\xb3\x35\x40\x9b\xcc\x1a\x65\x54\x28\x73\xb3\x31\x2f\xed\xc3\xbd\xd4\x6d\x96\xa5\x97\x96\xc0\x6d\x46\x63\x9d\x07\xc8\x0b\x86\xb0\x10\x6c\x3b\x7a\x09\x12\xa9\x50\x48\xf1\x82\x71\xa9\x68\x20\x4d\x54\x46\xc4\x17\xe0\xc7\xae\x53\xb7\xb3\x0f\x53\xed\x55\x9f\x3a\x44\x2a\x93\x04\x67\xa2\xcf\xe6\x36\x1d\x28\xe2\x0b\x2f\x49\x2e\x6b\x09\x2d\x09\x8e\xd4\x52\xeb\x5c\xc1\x47\xa4\x36\x31\xb1\x36\xac\x4e\xcc\x85\x32\x39\x7d\x8c\x33\xd2\xf1\xd9\x47\x66\xd4\xdc\x7d\xd6\x44\x98\x7b\x23\x44\x4c\x99\x98\x22\x4d\x62\x71\x6e\x8c\x75\x2b\x83\x9e\x02\xaf\xa5\x33\x95\x30\x94\x85\xe4\x57\x9f\x71\x80\x85\x90\x91\x6f\x53\xe2\x1b\x49\x98\x14\x43\x44\xe7\x24\xd8\x04\x11\x69\x69\x30\xc9\x81\x28\x2c\x17\x38\x36\xf4\x9a\xb9\x27\x69\xf0\x20\x09\x8d\x89\xfd\x9e\xab\x25\x4a\x7d\x4a\xe0\x10\x0a\xf9\x0a\x53\xd6\x39\xb1\x7f\x78\x43\x00\xea\x64\x45\xde\x39\x95\xc5\xd3\x62\x13\x1e\xe0\x30\x92\x32\x7c\xcf\x3a\xbc\x25\x97\xaa\x73\x02\xff\x79\xf6\xa1\x15\x71\x3d\xeb\xb0\x18\xef\x69\x34\xfa\x98\x79\xee\x51\x15\x50\xf9\x06\x25\xbd\xe6\xb7\x5c\xde\x9f\xcf\xfc\x66\xb2\xc6\x4d\x5c\x09\xb6\x46\x00\x7f\x1a\xf2\xc0\xa6\x79\x27\xcc\x7d\x81\x77\x15\x9a\x1a\x4c\xe6\x2a\x6f\xbe\x0e\xc9\x9c\x32\x13\x83\x09\x42\xb1\x4a\xa5\xca\xe3\x36\xdf\xa5\xea\x93\x03\x16\xa5\xca\x24\xd0\x55\xa3\x31\x15\x09\x12\x3c\x32\x46\x10\x7d\x93\xf5\xda\xf6\x52\x1a\x20\xcf\xbd\x80\x0d\x25\xa0\x7b\x57\x23\x33\xda\xe5\x7e\xb8\xb6\xd4\xc6\x86\x38\x49\x88\x3e\xe0\x28\xf1\x71\xf5\x03\x04\x4c\xbb\xfc\x7d\x5f\x18\x83\x01\x65\x54\x8a\x08\xd6\xf3\x94\x47\xc4\x58\x70\xf4\x10\xd0\x4e\x22\x7f\x66\xc6\x31\x29\xf4\x63\xb1\x78\x7a\x42\x15\x16\x1a\x43\x40\x76\xcd\x31\x63\xce\x30\xe1\x48\x5f\xc3\xc1\xcf\xba\x83\xcc\x63\xa2\xc9\x63\x6e\x60\x7a\x69\x30\x46\x03\xb1\x72\x88\x39\x5b\x95\x79\x0c\x26\xa1\xd4\x5a\x55\x20\xfc\x68\xec\x28\xd0\xd5\x80\x1b\x79\x93\x55\x91\x4a\x67\xb4\xda\x99\xcd\x17\x61\xde\xe7\xc4\xa3\x83\x39\xb1\x65\x6b\x7e\x7c\xec\xbb\x27\x77\xf0\xc4\x70\x27\x5d\x2d\xd2\xce\x40\xc6\x19\x4b\x1f\x0c\x38\x65\x4e\xd2\xc4\xdc\xb9\xcd\x99\x32\x7b\x75\x19\x3d\x38\x27\x41\x73\x24\x79\xb8\xb5\x45\xdf\xae\xa1\xbb\x15\xb7\x72\xc7\xc2\xe3\x63\xff\xdf\xf4\x1f\xf6\xc4\xcc\x73\x69\x4f\xfb\xef\x16\x43\x22\x77\x7c\xc1\x2d\xdb\x0d\x37\x8f\x73\x8b\x13\x07\xdb\x75\x95\x22\xab\x18\x0c\x07\x8a\xa3\x90\x3f\xb0\x88\xe3\xd0\x44\x96\x6c\x8c\xf6\x0e\x11\x62\x26\x22\x97\x28\x84\xc3\x50\x10\x29\xfd\x43\x9a\x11\xa6\x4c\x34\xb0\x1e\x43\x80\x45\x5a\x8f\x04\xa0\x99\x98\x15\x1b\x3e\x46\x59\x48\x05\x04\x9d\x8c\x1c\xfc\x96\x14\xaf\xe8\x42\x60\xb3\x8f\xec\x3d\x6a\x64\x95\xf3\xf3\xac\xc6\x4e\xd5\x0c\x14\xc8\x05\x68\xa2\x16\x5a\x33\x22\x6d\xd0\x11\x04\xc8\x47\x98\x81\xf9\x6d\x12\x61\x6b\x15\xfb\x19\xf1\x79\xea\x2c\xfb\x79\xfb\x1a\xf8\xb3\xb3\x35\xcc\x05\x71\x31\xf2\xe9\xad\xe3\xe7\x5d\xf2\xdc\x57\xb9\xb2\x5f\xd8\x56\x09\x43\x67\x9c\x29\x1c\xd8\x18\x25\x1c\xae\x28\xb3\xd1\x69\x02\xd1\x39\x98\x54\xd5\x92\xb2\x8f\xc6\x42\x0b\x75\xdd\x4c\xbd\x11\xef\x9a\xcd\x07\x24\x45\xe0\x4b\xe4\x3b\x83\x2b\xf8\xf3\x4a\x86\x67\xa3\xe6\xf4\xe4\x25\x14\xa2\xa9\x2f\xd3\xea\x61\x15\xe3\xcb\xd7\x12\x73\x35\xc9\xdc\x10\xf5\x85\x3f\xea\xe0\x55\x6e\x80\x04\x49\x82\x62\xc2\xa4\x89\xb8\xb4\x96\x52\x1b\x78\x69\x8a\xaa\xf8\x26\x30\x51\x4b\x3d\x83\x81\x5e\x5c\x70\x50\x30\xce\x7a\x2e\x36\x89\xae\x49\xe4\x75\x7e\x81\x64\xd7\xb7\x4f\x2b\xe2\x8d\x39\x1f\x47\x70\x0d\x65\x70\x7d\xd4\x50\x94\xa2\x6b\x9f\x45\x22\x43\x4e\xd9\xa2\x42\x7a\x38\x54\x46\x7e\xd4\xaf\xca\x1c\x5c\x7d\xdd\xc6\x12\x91\x5f\x63\x2a\x08\x14\xf1\x33\xe1\xae\xfa\xfa\x7f\x8f\x83\x8f\xe0\x7d\xe1\x48\x90\x1e\xce\xb1\xa2\xef\x8a\x39\x42\xcd\xa0\x9f\xf3\x85\x6f\x6e\x93\x37\x6f\xbe\x0e\x5c\x28\x01\xfc\x8b\xa0\x5e\x62\x9f\x6b\x16\xba\x67\xdc\x3e\xe3\x62\xe1\x1e\x49\xfb\x08\xc4\xa9\x79\xf8\xb3\x46\x9f\xa7\x46\xdf\x71\xb6\xc9\xf1\x5f\x73\x8a\xac\xf9\xed\x6f\x5a\x14\x85\x89\xc2\x7d\x84\x06\x41\x40\x42\xf0\xe4\x1a\xe7\xa4\xb1\x98\x13\x49\x16\x09\x35\xf5\xc1\x0a\x1f\xf7\x77\xea\x53\x66\xa5\x7f\x9e\x99\x03\x86\x32\xac\xe9\xd5\x37\x32\x02\xe1\x38\x86\xca\x94\xfa\x1d\x72\xfd\x73\xcf\x85\x3d\x14\x61\x6b\x12\x81\x42\x1a\xda\xb0\x67\x93\xc4\x65\xae\x96\x9a\x61\x8a\xae\xf4\x0d\x30\xf4\xa9\xe7\xa3\x28\x83\x61\xa3\x0e\xd3\x13\xd8\xee\x6d\x88\x0c\x47\x82\x38\x21\x8f\x21\x82\x9f\x99\x7d\x0b\xb6\x91\x15\x67\x3c\x91\x1e\xd5\xfe\xdb\xd1\xe5\xe5\xe8\xea\x02\xbd\x1f\x5c\x0d\x2e\x86\x53\x0f\x1d\x17\xc3\xeb\xd9\x78\x3a\x44\x6f\x07\xb3\xd9\xcd\xb4\x2a\x78\xe2\xdb\x9b\xd1\xe5\xf9\x64\x70\xf6\x9d\x2f\x9a\x63\x32\x38\x3b\x7b\x37\x9c\xcd\x46\xe8\x7c\x84\xe0\xed\x3a\x40\xbe\xfb\xed\x2e\x24\xcf\x2d\x37\x05\x55\x1b\x1c\xe2\x40\x8e\xef\xce\x47\x77\x55\xc4\x61\x49\x03\x9f\x01\xdd\xf3\x89\xf1\x20\x40\x0a\x8e\x89\x48\x10\x8a\x84\xed\x0c\x4f\xdf\x52\x16\x42\x19\xca\x82\x66\x09\x37\xc9\x7c\x6c\x88\x5e\xdb\x26\xe9\x31\x8a\x32\x5f\x1c\x3c\x36\xc1\x2c\x55\x77\xfc\x21\x2c\x7d\x7d\xe4\xdc\x6b\x6c\xa6\x1e\x5d\x99\x02\x99\xbf\x62\x5b\xf4\x1c\x3c\x65\x1c\x82\x59\x95\xa2\x68\x11\x59\xfd\xca\x16\xae\x6c\x62\x28\xf0\x8e\x51\x2d\x49\x1a\x41\xbf\x1d\x6f\x62\x2b\x1b\x4a\x12\x82\x37\xca\x85\xa5\xe4\x6b\x35\x1d\x3c\xdc\x42\x1c\x7e\x59\x98\x4a\x98\x55\x82\x14\xc4\x38\xb7\xb6\x8a\x2f\x15\x02\x59\x9e\x6f\xf8\x2e\xda\xe5\x33\x1c\x7e\x59\x88\x4c\x0d\x23\xb6\x4a\xae\x1a\x1b\xd5\xbb\xd9\x6c\x62\xfc\x1b\x7e\x95\x9f\x07\xa0\x81\x94\x97\x4b\xc5\xb9\x40\x16\x0d\x6c\x1f\x22\xfc\xd1\x32\x65\x6c\xf5\xd3\xd1\x20\x80\x46\x13\xa2\xa7\xf4\x9e\xa8\x07\x42\xc0\x80\x59\x54\xda\xe0\xdc\x2e\xfa\xa1\xec\xa9\x03\x02\xc0\x7f\xbe\x00\x81\x4a\xe0\x12\x90\x5e\xb7\x54\x35\x8d\xbb\x51\x3e\x3b\xfc\xf3\xa9\x9e\xed\xc3\x7f\x9a\x1b\x0b\xb2\x5a\xa4\xde\x28\xa0\xd2\x19\xf2\xd2\x7a\x70\x64\x50\x4b\xd3\x82\xe3\x6f\x33\xc3\x42\x48\xe6\x38\x89\x94\x2c\x0a\xc4\x66\x01\x6f\xc3\x2c\xda\x4e\xb3\xc2\xac\xe1\x76\x76\x04\xe2\x72\xce\xcd\xd6\x8f\x05\xb1\xc6\x5e\x2b\x1a\x3a\xdb\x11\x7d\x0d\x42\xe4\xda\x31\x20\x95\x82\x2f\x36\x66\x7c\x58\x04\x60\x36\x3c\xb3\x5b\xbc\x0b\xef\x28\x71\x73\x0d\x37\x8e\x8f\x2d\xf5\xdb\xe3\x99\xc3\xea\xf6\xde\x3c\xdb\xcc\x3d\x26\x53\x9b\x18\xa3\x5a\x70\xf4\x65\x38\xd9\xc6\x90\xe5\xd8\x98\x97\xee\x79\x6a\x5a\x0e\x9b\xe6\xe4\xef\x0e\xeb\x6b\x28\x71\xd5\x38\x25\x44\xc7\xc3\x3f\x73\x2e\x3e\xe9\x8f\xe6\x2d\x2d\x87\xe9\x05\x52\x8e\x3c\xa1\x51\x18\xeb\x1b\xb3\xfe\xca\xfd\x23\x9d\xae\x7c\x5a\x9d\xff\xe4\x8d\x71\x10\x2c\xd3\xdc\x7a\x0d\xa4\x0c\x5a\x2e\xf9\x6e\x0f\x5a\x9a\x05\xa3\x34\x26\xa6\x36\x32\x25\xfd\xa0\xe5\xc5\x66\xa3\x08\xfa\x25\xc1\x4c\x69\xb1\xee\xa2\xaf\x30\x73\xc5\x58\xcc\x8d\x59\xeb\x4a\x14\x14\xe0\x15\xc1\x32\x11\x04\xea\xb4\x46\xf4\x23\x41\xef\xbb\xe8\xfd\xb7\x5d\x74\x01\xd7\x9e\x8b\x6f\x7d\x06\x0b\xec\x90\xfc\xf6\x9f\x30\x4e\x8d\x76\x2b\xb5\xb3\x58\x42\xc5\xdc\xa4\x3b\x1a\xaf\xf9\x64\x45\x65\x22\xb0\xd9\x3b\x0e\x29\xe2\x1a\x65\xe9\xc0\xce\x06\x57\x67\x43\x7d\xc1\x6e\xc5\x0e\x97\xd2\xbf\x55\x68\x18\x4d\x04\x5d\x63\x45\xa6\xfa\x6f\x97\x28\xb4\xda\xc4\xe6\x29\xa4\x48\x07\x7c\x75\xa2\xff\x38\x39\x0a\xbe\xe9\x70\x32\x36\xbf\xdc\x4c\x2f\x7d\x91\x7d\x9e\x6f\xe1\x3e\x9d\x4b\x6d\xd3\x10\xf6\x47\x7e\x7b\xcb\x6e\x6f\xd9\xf0\xdf\x07\xef\x27\x97\xc3\xeb\xd3\xdb\x42\xe9\xa3\x17\x67\x53\x14\xf1\x07\x5b\xa7\x5c\xca\x25\x82\x22\xcc\x55\xb6\x05\xdf\x87\xc0\x23\x53\x34\xb9\x06\x63\x4c\xd1\x8f\x37\xd3\x4b\x5f\x51\x91\xba\xaf\x63\x54\x93\x1a\x93\x7f\xb5\x61\x9a\x4c\xee\x93\x76\x01\xa4\xe9\x87\x89\x5a\xa2\x9b\xeb\xe1\x14\xfe\x35\x19\x5c\x5f\xff\x79\x3c\x3d\xbf\x65\xde\x72\xd5\x85\x0f\x35\x95\x37\xb3\xe1\xd5\x6c\xeb\xd3\x7d\x50\xc2\xe2\xfa\xf3\x60\x7a\x35\xba\xba\xb0\x6b\x6b\x02\xc5\x76\xf4\x51\x07\x06\xfd\x18\x4b\xf9\xc0\x45\x68\x0a\x5e\x14\x32\x6a\x79\xac\x6c\x11\xa9\x25\x5d\x2c\xa3\x0d\x0a\xa9\x0c\x78\x22\xf0\x82\x84\x06\xd6\xf7\x05\x08\x2b\xbc\xd1\xc2\x6d\x4d\x25\xbd\x37\x71\x00\x5c\x2d\x89\x30\x75\x70\xec\x8f\x82\x04\x5c\x84\x26\xfc\x1e\xf0\xcb\x25\x89\x22\xb4\xa4\x52\x71\xb1\xa9\xde\x0c\x7a\x88\xfa\x38\xff\x97\x5c\xfa\x20\xba\xbd\xbd\x7d\xb5\xda\xa4\x44\xe8\x7f\xa2\xd7\x89\x34\x1e\x37\x62\x93\x9d\xec\x8f\xd2\x49\x5b\x58\xa8\x5f\x34\x05\x7f\x6b\xfe\xef\x55\x0e\xc7\xad\x7d\xfe\x0a\xbd\x26\x32\xc0\x71\x8a\x8e\xce\x8d\xb5\x82\xb2\x14\xab\x2f\xda\xac\xc1\x84\xee\x92\xf3\x6a\x8b\x90\x57\x07\x91\xb0\x0f\x32\x5b\xc6\x5b\x29\xb8\x0f\x58\xd4\x92\xa4\x26\x92\xb4\x9c\x77\x86\x7c\xaf\x81\xe6\x27\xb5\xf1\x94\xee\x39\xce\x6d\x5c\xce\x3c\x1f\x11\x94\x1b\xae\xb5\xfc\xa4\xeb\xdd\x1c\xa1\xce\x52\x58\x33\x4c\xa8\xe3\x09\x06\x84\xb4\x92\xdd\xf9\xf8\xfd\x60\x54\x52\x7a\xf1\xc7\x5e\x1a\x1c\x85\xde\x8d\xaf\x67\xfa\x7b\x28\x23\x0f\xa5\xaf\x26\x83\xd9\x3b\xfd\xaf\x00\x4d\x06\xd3\xc1\xfb\xe1\x6c\x38\xbd\xbe\x1b\x5c\xdf\xfd\xeb\xf5\xf8\xca\x27\x45\xab\x89\x18\x5d\x8d\x3c\x75\xf4\xf2\x94\x68\xb1\xa4\xa9\xc9\x51\x62\x4b\xec\x6d\x51\x33\xba\x3b\xd3\x72\xd6\xd0\xf3\x19\xf0\xa4\x52\xa8\x94\x90\x90\x5f\x1a\xab\x8d\xc0\xca\xd6\xdc\x17\x28\x47\xc3\x6a\xa3\x0f\x14\x8b\x7e\xce\xf9\x21\x50\x03\x53\xf2\xea\x2f\x92\xb3\xc3\xc0\x74\x1e\xf5\x26\x85\xd2\x2f\xfa\x8f\x53\xfd\x3f\x06\x2a\x14\x8e\xbc\xb5\xe0\x47\x0c\xfd\x99\xb2\x90\x3f\x48\x34\xe1\x0f\x44\x5c\x83\x08\xd6\x1b\x2c\xe4\xc9\x7d\x44\x7a\xb0\xcf\xc2\xae\xdd\xdc\xa6\xc8\xe7\x29\x88\xc2\x47\x27\xfb\x1c\x92\x5b\x87\xe8\x36\x87\x0c\xfe\x7e\x32\x22\x72\x0b\xa1\xcd\x1f\x41\x97\xfa\x80\xd1\x28\x4d\x89\x36\x0f\xca\x4e\x1b\x7c\xed\xf2\xc1\x8f\xbd\x00\x5e\x00\xb9\x29\x13\x6a\x38\xf1\xea\xd4\x8e\xfe\x65\xc6\x9d\x5b\xa2\x07\x60\xb3\x3d\xe7\x9c\x85\xc9\x36\x3e\xbb\x1e\x9e\xdd\x4c\x47\xb3\xef\xef\x2e\xa6\xe3\x9b\x49\x23\x09\x56\x0e\xe8\x62\x7a\x33\x99\x8c\xef\xae\x47\x67\x37\xd3\xe1\x0f\x3f\x0c\x8e\x45\x92\xd9\x38\xe0\xb5\x3e\x83\xe6\x5f\xd2\xc4\x49\x40\xe5\x9f\x38\x8e\x36\x90\x42\xe8\xbc\x51\x65\x2e\x1a\x94\x30\x45\xa1\x74\xcb\xc6\x16\xfe\xb3\x5e\xb2\x76\x49\x20\x5b\x35\xa1\x2b\x48\x46\xe3\xe9\x05\xfa\x11\xd4\xf7\x46\x67\x42\x0d\x27\x53\x70\x3f\x8c\xc6\x4d\x64\x7a\x63\xda\x3e\x57\xd6\xd6\x95\x7a\x3f\xe0\xf8\x6d\x59\xcb\x3b\x87\xa9\xed\xc9\xba\xf7\x30\xd2\x93\xe2\x59\x8b\x78\xdf\x96\x9d\x76\x4d\xdb\x10\xdc\xda\x7a\xdd\xee\x98\x33\x35\xbb\x6f\x6f\x5f\x75\xfd\x3f\xe5\x8e\xc0\x97\x6a\x4c\xf0\x1c\x9d\x09\x8e\xd1\x9a\xc0\xf1\xa1\xba\x9e\xb7\xad\x86\x9c\x96\x43\xbe\x2d\x56\x84\xbf\x85\xb2\x91\xb7\xf9\xaa\xf0\xe9\x91\xff\x54\xaa\x75\x5d\x52\x96\xfc\x7a\xf2\x1e\x07\xa7\x29\xd0\xd2\x81\x98\xc3\x75\xb5\x09\xef\xb3\xe9\xde\xc6\xbc\x83\x38\x37\xbd\x65\xda\x46\x2b\x94\x05\x5d\xa7\x88\xb9\xa8\x81\xe4\x29\x28\xa8\x3d\x45\x42\x32\x3d\xab\xfd\xc8\xf7\xa0\xa1\x53\xbd\xb9\x8a\x48\xfe\xe3\xe4\x81\x8b\x8f\x70\x7f\x3a\x51\xab\xf8\xc4\xf9\x32\xef\xcc\x72\x3f\xf0\xd0\xff\x5d\x70\xda\x6e\xab\x07\x2b\x1a\x1e\x40\x2d\x15\x0d\x67\x39\xde\xcf\x98\x04\xd9\x6c\x46\x53\x83\x9b\x8f\xbb\x22\x15\xee\x3e\x35\x83\x29\x83\x01\xb7\xbe\x9d\xab\xdc\x11\x68\xa9\xbc\x6f\xe5\x21\xac\x36\x5a\x9b\x2e\xa8\x9d\xb9\xff\xfb\x43\xfe\x87\x56\x40\x32\xa5\x1c\xfd\xc1\xfe\x9e\xaf\x38\x75\xb2\xaf\xb6\xbe\x27\xed\xcf\x81\xeb\xd9\x86\x08\xdb\x4f\xcf\x27\x96\x1b\x16\xf4\x14\x5d\x11\x9e\x28\x34\x1b\xbd\x1f\x8e\x6f\x66\x77\xa3\xab\xbb\xf7\xa3\xab\x9b\xd9\xf0\x1a\x2e\xdf\x4a\xe0\x80\xa0\xd7\x4a\x24\x04\xfd\x15\xcd\x71\x24\xf5\x7f\x35\x69\x27\x8a\x9f\xe8\xe3\xea\x0b\x78\x2f\xe0\x11\x17\xc5\xf7\xcc\x0f\xa6\xe2\x3b\x7a\x7d\x39\x3e\x1b\x5c\x0e\xd1\x5f\xd1\xd9\xe5\x70\x30\xfd\xa2\x76\x3d\x37\x24\x73\xf4\xcc\x54\xd6\xf0\x72\xbb\xdd\xe1\x5d\xd6\xee\xf0\xae\xd8\xee\xf0\x6e\xbb\xdd\xe1\x5d\x59\xbb\xc3\xfd\xa6\xd4\xb4\x4f\xc0\x71\xdc\x5b\x61\x46\xe7\x44\xaa\x4c\x51\xf8\xb1\x17\xa3\x13\xc7\x09\x13\x40\xaa\x5f\x04\xfd\x09\x62\x48\xd3\x6f\xfa\x9b\x55\xe4\x2d\xfd\x5d\x85\x6b\x57\xcf\x6d\x8d\xf4\xa5\xc6\x77\x10\x83\x53\x31\x8f\xd2\xa8\x4c\x90\x87\x08\x1c\x45\xa3\x31\x48\x49\x53\x68\xe6\xaf\xbd\x5e\x48\xa5\xfe\xab\x21\x43\x33\xd8\x69\x1c\xe7\xf9\x08\xd0\xa4\x92\x1b\xd0\x38\xfe\x96\xe0\x79\xbe\x21\x64\x77\x38\xeb\x60\xf8\x7b\xeb\x61\xd1\x88\x37\x26\xb3\x18\xee\xae\xe6\xd0\x6b\x36\x73\xc5\xcf\xf4\x99\xdb\x08\x1b\x17\x0b\xfd\xcd\x21\x04\x9b\x3c\xa0\xc3\x21\xfc\xdb\xcd\x78\x36\x40\x3f\xf6\x56\x68\x36\x9e\x0d\x2e\xef\xde\x0f\xdf\x8f\xa7\xdf\x6b\xd1\x44\x91\xbb\x5f\xe4\x1e\x0a\x34\x1d\xbb\xf3\x41\xee\x5c\x44\xe0\x31\x46\x85\xe2\x78\x20\xe5\x8c\x03\x31\xc6\x34\xd5\x18\x7b\x50\xa2\x0e\x7e\x14\x04\x62\xc5\x9d\xbd\x0a\x4a\xd6\xa3\xe9\x50\x03\x1f\x9e\xdf\x01\xbe\xbb\xc9\x78\x3a\xbb\x3e\x68\x03\xbb\xc3\xd6\xb8\x31\x7d\x47\xfb\xce\xff\x1d\xe1\xac\xaf\xc5\xbf\x63\x77\x2c\xe0\x87\x47\xfd\xdf\x81\x8a\x2d\x2d\x64\x8b\x8a\xfd\x95\x90\x06\x94\xe8\x35\x80\xfe\xf4\xe6\xcd\x9b\x37\x95\xf3\x71\x0a\xaf\x1c\x42\x45\xb5\x29\xcb\x5d\xaa\xf5\xb5\xf9\x6e\x7a\x73\x39\xbc\x86\xfb\x75\x33\xd9\x50\x67\x74\xcb\x5a\x18\x01\xd0\xbb\xf3\xd1\xdd\x74\x78\x31\xbe\x34\x16\xa0\xe7\xa3\x3e\xbd\x3c\x3e\x53\x6f\x96\x67\x6c\xce\x72\xfb\xcc\xcd\x59\x52\xd6\x78\x9b\xb3\xd8\x8e\x1d\x69\xcb\x8e\xac\xd5\xc6\x6d\xae\x6b\x47\x6a\x3a\x51\x41\x6c\xad\x56\xf9\xf7\xf2\xed\x3b\xd2\x57\xbf\x7c\xd3\x7f\xd3\xff\xf2\xcb\xfe\x9b\x93\xaf\xbe\x29\xf9\xc6\x34\xf2\x48\xdf\xfe\xc7\x37\xdd\x6f\xbe\xf9\xba\x1c\xb6\xcb\x44\xcc\xde\x36\xa5\xaf\x96\x4a\xc5\xc0\x17\x88\x2d\x41\x4a\xe0\xf9\x9c\x06\xe6\x34\xfd\x81\x33\x32\xc8\xec\x3b\xc6\xc2\x53\xd1\x0d\xa6\xe1\xf2\x6c\xd2\x8a\xce\x63\xa5\x44\x3f\xf6\x14\x9a\x0d\x2e\xbc\x52\xff\x80\x06\x62\x3e\xab\xab\xc3\xd9\x4c\x9f\x3a\xd2\xf0\x7e\x1f\x73\xec\x1e\x5d\x15\xff\x2e\x8c\xb2\xcf\x60\x93\x3d\x9c\x79\xc7\x31\xce\x16\xbb\xd5\xdd\x9a\x7e\x75\xf9\xc6\x74\xb7\xae\x65\xdd\xad\x6d\x5a\xb7\xf5\x63\xd6\xb7\xee\x36\xed\x5c\x97\xb5\xae\xcb\x1b\x76\x33\x75\xff\x46\x92\xac\x55\x8f\x1d\x77\x22\x89\xe8\xb9\x93\xc3\x71\xa1\x03\xf9\xd6\xf8\xa3\xc9\x87\x4d\x7f\x76\x33\x2a\x73\x25\xfc\x14\x47\x67\x6f\x21\xfe\xaa\xad\x19\x79\x8b\xf1\xe1\x7d\xfa\xa7\xa4\xd1\x9a\x88\x2d\xa3\xb2\xc0\xab\xbb\x85\x19\xed\x37\xad\xed\xc7\x8d\x71\x15\xac\xc9\x29\xca\x5b\x8b\xb6\xb5\xc1\xb8\xdd\x18\xcb\x91\xee\x5a\x88\x1b\x43\x6d\x62\xbb\xdd\x17\xba\x02\x5e\x45\x54\xaa\x2e\xe2\xf3\x2e\x52\x78\x01\x0b\xf9\x18\x87\xcc\x61\x23\x7a\x4e\x0a\x14\xda\x19\xf3\x31\x46\x0c\xa9\xce\x3d\xc5\x3f\x12\x86\x2e\x07\xdf\x0e\x2f\xd1\x64\x3a\xfe\x30\x3a\x1f\x4e\xd1\x6c\xfc\xdd\xb0\xe1\x0d\xb6\x04\xd8\x70\x36\x02\x23\xc4\x60\x1b\x60\x1b\xe2\x4c\xb1\xf0\x54\x1a\x7e\x3b\x1d\x7f\x37\x9c\xee\x86\x30\x42\x31\xe6\x1f\x7b\x2e\xb6\x34\xe0\x31\x09\xdb\x1d\xf8\x0e\x93\xc1\xe0\xce\xf8\xb2\x30\xcb\x72\x5c\x6d\x06\xf5\x91\x6c\x76\xe5\xbb\x7b\xf0\xdd\xf0\x7b\xaf\xc7\xd5\xdb\x69\xf8\x58\x07\x7c\xbf\x62\x3b\xd6\x93\xfd\xd9\x76\x4d\x7e\xce\xb6\xef\x7b\x30\xe9\xa0\x96\xc9\x07\xb4\x7f\xaf\x20\xb9\x54\xbf\x3d\x7b\x37\x1a\x7c\x18\xd6\xeb\xbb\xae\xd9\xf0\xef\xd0\x58\x19\xe6\xe2\xd0\x71\xed\xd3\x5a\xf9\xf7\x6d\x2d\xff\x32\x5d\xe5\x0f\xe0\x67\x7d\x63\xe5\xf2\xa1\xed\xb1\xd6\x5f\x44\xf2\xbe\xc0\xe5\xaa\x5f\xa5\x0b\x35\x15\xbe\x7f\x17\x97\xab\x67\x8d\x75\x39\x54\x1e\xff\x4e\x41\x2f\x15\xe4\x83\xfa\xb7\xda\xe8\x3f\x5b\xc6\xb9\xb4\x81\xfb\x42\xea\x6d\xf9\x88\xb6\xf6\x79\x61\x9b\xef\x19\xba\xfa\xfb\x0f\x78\x89\x05\x09\x9d\x6f\x27\x8b\x81\x00\x8b\xb5\xb0\xb6\x56\x70\x4b\x4c\x8d\xa5\xb5\xa9\xc2\xba\x0d\xd7\xc5\x68\x14\x00\x5b\x3b\xb1\x81\xdf\x50\x3d\x05\x0b\x7a\xe6\x63\x1e\x4f\x2f\x7e\x42\x3f\xf6\x7e\x31\x8f\x7a\xe0\xe2\x69\x4a\xa3\x03\x65\xd4\x86\x1c\x2c\x80\xd2\x6b\x14\x24\xda\x88\xac\xbb\x4a\xb2\x9a\x23\x38\x82\x27\x2c\x0f\xc7\xf9\xc3\x4a\xbd\x5f\x2b\xf4\xdf\xc1\x13\x06\xf5\xca\x76\x6e\x62\xcd\xd6\x07\x7c\x5b\x72\xb7\x3a\x00\x71\xa9\xb8\x2b\xbe\xda\xeb\x71\x41\x17\xe0\x68\x1d\x5d\x8c\xae\x4a\xe5\x70\x30\x2f\x7c\xfb\x97\xbe\x5c\x51\xb5\x2c\x64\x02\x5d\x7f\x1d\x88\xaf\xd5\xb6\x47\x09\xa1\x3f\xd8\xfa\x85\x18\xd2\x24\x44\x63\x78\x29\x59\x51\x88\xe3\x02\xbc\xcb\xf3\xc1\x64\x4f\x58\xf6\xf8\x16\x3d\xd3\x2e\xe4\x0f\xe8\x7a\xf0\xfe\x52\x9f\xa2\xe3\x98\xb0\xd1\x39\x3a\xe3\x8c\x69\xe5\x63\x4e\x42\x22\xc0\xb7\x51\x51\x8c\xb7\xf1\xb4\xec\x98\xf3\xca\x0c\xd9\x31\x3a\x9b\x0e\xcf\x87\x57\xb3\xd1\xe0\x12\x56\x73\x84\xae\xbf\xbf\xbe\x1c\x5f\xdc\x9d\x4f\x07\xa3\xab\xbb\x9b\xe9\x65\x6e\x67\xdc\x39\x08\xfa\xb1\x55\x23\x27\x58\x4a\x93\x85\x88\x24\x54\x9a\x00\xdf\x8c\x20\xa1\x69\xac\x9a\xe9\x13\x90\xc6\x25\xf3\xcd\x7b\xb2\xda\x7a\x68\xc5\x43\xdb\x27\x7f\xbf\x91\xf4\x62\x74\xfb\x0a\xa8\xe8\x66\x64\x74\x33\xe4\x5d\x83\x5d\x2b\xaa\x39\xaa\x4b\xa8\x84\x86\x61\xa0\x5e\x28\x6e\x69\xc8\x55\xdd\xd9\x29\x09\x78\x20\xcd\xfa\xb8\xfd\x48\x36\x5f\x66\xf7\xf1\x2f\xe1\xaa\xf3\x91\x6c\xbe\xca\x9e\x7d\x95\xbb\xa4\x5f\x83\xa2\xb7\x81\x32\x5b\x79\xcd\x2b\xaf\x14\x42\x2a\xce\x61\x84\xe5\xd5\xb0\xe6\x62\x64\x17\xb6\xc7\x57\xe3\x96\xdd\x0f\xa3\xc1\xe5\xc8\x2c\xbb\x9b\xe9\xe5\xdd\xf9\xe8\xee\xfa\x6c\x30\x1d\x9d\x8d\xef\xcc\x2a\x34\x6b\x4f\xff\xe4\x3e\xbe\x9b\x8e\x67\xb3\x41\x7e\xf1\x61\x44\x11\xe3\x2b\xb8\xcc\xb9\x2b\x17\xb7\x73\xfb\x89\xe2\x88\xba\x05\x01\xfd\x72\x6d\x76\x20\xa4\x06\xe2\x7b\x1a\x51\x85\x05\x41\x11\xce\x55\x6c\xcc\x55\x6b\x6c\xc1\x45\x37\xd2\xec\xe6\xa5\x97\xa4\x26\xac\x9b\x91\x95\x2e\x4e\xda\x45\x21\xee\x3a\x6a\x0a\xcb\x12\x17\x6e\xa8\xf9\x71\x40\xa6\x3f\xac\x4d\x4d\xbd\xa6\xc6\xdc\x27\xf3\xb7\x54\xe8\x23\x55\xac\x39\xc9\xf7\x18\x45\x61\xbe\xec\x42\x0d\x96\x14\xaf\xc9\x97\xb9\x2b\xb8\x59\xac\xe6\xf9\x57\xb9\xe7\xbb\x0b\x16\xaa\x63\xe6\x6f\xbe\xd9\xcd\x7c\x69\xd6\x2e\xb4\xdc\x6a\xb9\x72\x7d\xd4\x6e\xdf\x78\x3f\x1f\x99\xe9\x6e\x34\xc7\x94\x9a\x07\x8a\xcd\xdb\x46\x82\x33\xef\xf2\x38\x9e\xf0\x3c\x58\x7a\xde\x5a\xf9\x59\xb8\x48\x7f\x99\x5e\xb2\x41\x8e\x16\x7e\xfb\x6a\xeb\x96\xdd\x5c\x9e\x1e\x4f\xa0\x36\xb9\x74\x96\x43\x5e\x6d\x7a\xe1\x7d\x6f\x45\x19\x71\x53\xe7\x2a\x39\x75\x0b\x09\xf5\x7b\x83\x4c\x43\x2f\xb3\xe9\x95\x25\x79\xae\xb5\x10\x05\xa6\x2c\x7d\xd0\x8b\x90\xdc\xc8\x88\x2f\x4e\x4f\x4e\xfc\x21\xe2\x35\x20\x8b\x99\x8f\x3d\x91\x96\xd3\x28\x42\x6c\xea\x6f\x6c\xc2\x0c\xb3\xbe\x1c\x87\xd3\x75\x04\x15\x95\xd3\x25\x96\x67\xfb\xa9\x79\xf0\xa7\x3f\x3d\x70\xad\x04\xef\x91\xe1\xd2\x72\xf6\x53\x77\x61\x8e\xc8\x62\xaa\x89\x23\xf6\xd6\x11\x5c\x5a\x18\xe1\x34\xfb\x21\x25\x7e\xcf\xe4\x98\xb6\xfc\x7d\x5e\xf2\x0f\xb2\x57\x34\x9a\x85\xb2\x1d\x78\x90\x2f\xf0\xa0\x6d\xfa\x3c\x88\x9b\xec\xe6\x67\xc1\xdc\x64\xd3\xef\x87\x38\x11\x11\xba\x7d\x75\xb2\xfe\xea\x04\x82\x16\x5e\xa1\xde\xbf\xa3\x8b\xe1\x0c\xf5\xde\xa1\xdb\x57\x67\xe0\x2d\x50\xbd\xd9\x26\x26\xa7\xf9\xe4\xd5\x93\x5f\x7b\x0f\x0f\x0f\xbd\x39\x17\xab\x5e\x22\xa0\x06\x69\x48\x42\xfd\x75\x88\x3a\xbf\xfc\x6f\xbd\x0c\x4e\x21\xac\x72\xcf\x75\xb7\x4b\x55\x88\xfe\xe5\x24\x9f\xf8\xb0\x3f\x5c\x88\x0b\xff\xb1\x47\xd7\x5a\x39\xf9\x77\xf4\x7e\x38\x7b\x37\x3e\xd7\x7f\xbf\x43\xef\x86\x83\xf3\xe1\x54\xff\x1d\xa2\xf3\xc1\x6c\x00\x96\x0b\x9e\xa8\x38\x51\x48\x1f\x58\x4e\xdd\xfe\x76\xe3\x6a\x39\xe6\x02\x48\x12\x11\x75\x4c\x0e\x70\x4c\x84\xe6\x0c\xc2\xc0\x49\x6b\x4f\xb6\x96\x69\x12\x02\x01\x7d\x34\x9a\xa3\x10\x2b\x0c\xf0\xa8\xcc\xa2\x15\xd7\x14\xa3\x5e\xd8\x45\x18\x4d\xc6\xd7\x33\x03\xf0\x9e\x38\x98\x10\xd5\x27\x15\xc1\x61\xd7\x75\x1a\x45\xf9\x59\x02\x70\xee\x1b\x49\x94\xad\xa1\x97\xce\x9b\xde\x1b\x7d\xe8\x6b\xba\xc2\x1b\xc4\xd7\x44\x08\x1a\x12\xb4\x24\x38\xd4\x6a\x0b\x04\x33\xf6\xde\x39\xd0\x00\xcd\xf5\x4b\x5b\x11\xb5\xe4\xb6\x07\x53\xef\xdf\xfb\x99\x83\x0d\x9a\x9e\x85\x3c\x48\x56\xa6\xa3\x00\x67\x5d\x14\x9b\x9a\xea\x6b\x2a\xa9\x82\xc5\x6a\xfa\xe7\x87\x3c\x90\xfd\x20\xe2\x49\x08\x2d\xdc\xc4\xa6\xcf\xc5\xc2\x17\xdd\x5e\x9c\x35\x97\x2d\x50\x98\xb9\xf1\xf9\xd8\xcc\xdc\xe8\x6a\x36\xbc\x9e\x99\x34\x8d\x74\xfe\x46\xbe\xf9\x9b\x10\x91\xaf\x85\x49\x72\xb5\x30\x71\x77\x7b\x4a\x6d\xe1\x71\x53\x77\x5f\x4f\x28\xce\x51\x93\x36\x84\x54\xbc\x8f\xae\x09\xd2\x77\x2b\x45\x01\xc9\x9a\xb0\x05\x67\xdc\xf8\xe0\x14\x45\x4a\x60\xe8\xbc\xa8\x27\xd7\xb5\xe7\x63\x6b\x12\x10\x8b\x41\x71\x8d\x00\x26\x1d\x9a\x46\xec\x4c\xab\xc4\xf0\x8d\xa1\x5b\x71\x24\x93\x92\xa9\x85\x1e\xab\x92\x4b\x45\x95\xa9\xe9\x6e\x34\xe5\xb4\xea\x67\xc0\x99\x9e\x60\x03\x91\x46\x7a\x56\xa1\xe3\x2e\xcd\x35\xb1\x83\x77\xd2\x19\xd6\xcc\x8a\x70\x36\xc1\x9f\x5c\xa3\xfd\xae\x99\x5e\x5c\x3f\xbf\xcf\xbc\x29\xdd\xb1\x7c\xcc\x6d\x79\xec\x7d\x79\xe4\x8d\x59\xb9\x33\x1d\x3f\x8e\xb1\x37\xab\x75\x74\x90\xd3\xb7\x39\x49\x7d\x5b\x3c\x41\x6e\xdb\x9f\x21\xb7\x65\xa7\x48\x23\xb4\x47\x39\x22\x6c\x63\xdb\x5c\x1e\xd6\x1c\xf5\x44\x9d\x8b\xc1\x7e\x55\x96\x31\x66\x3e\x6f\x89\x53\xe8\x45\x3e\xdf\xcf\x14\x6e\xa0\x95\xa6\x44\x55\xc0\xf4\x7e\xbd\x93\xb7\x05\x40\x9a\x50\xb0\xed\x65\x6a\x8a\x7b\xc7\x8b\xd4\x10\x9f\x4d\x3d\x3a\x98\x73\x5c\xc4\x4b\xcc\x9c\xab\x42\x1e\x0c\xaf\xe8\x7d\x39\x0c\x96\x49\x2d\x69\x9a\xe1\x73\x84\x14\x1f\x2f\xde\x42\x4e\x0d\xa4\xf9\x16\xf0\xee\xa6\xf6\x3e\x37\xfa\xe7\xca\x2c\xae\x20\xc1\x9f\xcb\x73\xb4\x64\x1e\x8b\xbd\x3a\x1d\xa6\xf9\xde\xaa\xcb\xdc\x69\xbc\xd9\x2a\xec\x82\xcd\x69\xa9\xb4\x8d\xb7\x23\xa4\x22\x64\xb4\x35\x45\x35\x11\xa3\xad\x49\x2b\x0f\x18\x6d\x4f\x56\x79\x38\x68\x6b\x72\x1a\x04\x1c\xb5\xa5\xac\x45\xb8\xde\x73\x10\x5b\xa9\xa4\x94\x00\xcc\x82\x2e\x0e\xdb\x93\x47\x87\x58\x1e\x9e\xd1\x78\x36\x3c\x51\x18\x4d\x59\x5e\x1e\xd4\x70\xd8\x81\x95\x0f\x40\xc8\xc5\x6c\xf4\x9c\x72\xd5\x74\x68\x39\x30\x5a\xcb\xea\xe5\x63\x36\x5a\x0e\x31\x4f\x8d\x09\xd5\xb8\xab\xa3\xa6\x11\xf0\xa2\x63\xbf\xf9\xd8\xb6\x03\x0f\x1a\x8c\xc6\x24\xb0\xf7\xe6\x04\xab\x44\x90\xde\x3c\xc2\x0b\xf4\x76\x38\x98\xdd\x4c\x1b\x15\x3d\x2e\xfd\x1e\x94\xd7\xb7\x37\x57\x0d\xea\x0b\xbb\xef\x53\x79\x19\x04\x44\xa6\x91\x22\xe0\x1a\x9a\x5c\x0e\x20\x13\xcc\x2c\xa3\xfd\xd8\xea\xb0\xc8\x65\xd3\x5a\xc9\xf9\x4f\x5a\xd6\x4c\xd6\x9f\xee\x5b\x44\xba\xe4\xdb\xc6\x75\xa4\x6d\xe3\xef\xbd\x38\x64\x5c\x61\x7b\x2f\x83\xb2\xcf\x5b\xac\x02\xfb\xf9\xf3\x2e\x02\x87\xa4\xf9\x1a\xc8\x7d\xd1\x72\x09\x10\xb6\x6e\x8e\x64\xdd\x1a\xfa\x9a\x30\x25\xf7\x8b\xe6\xb2\xdf\xd6\x10\x57\x0d\x63\xdf\x55\xb2\xef\xf2\xc8\x7f\xb7\xdf\xf2\xd6\x97\x78\x99\xbb\x16\xbb\x62\xb9\x59\x00\xdb\x4f\xb7\xec\x56\xc1\xff\x9b\xbc\x3e\x86\xd0\x8c\x9b\x9e\x5c\x50\x57\x83\xc9\x18\x02\x8a\x00\x90\x69\xb3\x86\xe3\x38\x2d\xc7\xc8\x4d\x82\xf4\x39\x25\x0b\x0e\xdd\x16\x09\x0b\xbb\x50\xdc\x35\xb5\x1f\x49\xb9\xf4\xd9\xb0\x8b\x64\x96\xdc\xfd\xf3\x65\x86\xa9\xd3\x8f\x72\x24\x17\x5a\x2b\x6a\xda\x63\x22\x10\x74\xf4\xc2\x82\x20\x82\xa8\x8c\xc9\x27\xca\x19\x74\x91\xb5\xf1\xf4\x74\xbb\x39\x55\xb1\x83\x19\x92\x49\xe4\x46\x62\xc6\xd5\xcd\x7a\x36\x16\x07\x75\x30\xeb\xb7\xd2\x29\x5f\x8e\xf1\xd5\xa4\x2f\x88\xea\x2d\x09\x8e\xd4\xb2\x07\xb5\xa8\x9a\x6e\xe9\x9d\xef\x5a\xee\xef\x25\x89\x62\xf4\xe3\xd9\xf8\xfd\xfb\xc1\xd5\x79\xdd\xd1\x9f\xbe\x3c\xb8\x3a\xaf\x8b\x39\x85\x20\xe0\x28\xb2\xfd\x14\x6c\x31\xa7\x9e\x9e\x91\x93\xd9\xf8\x64\x72\x79\x73\x31\xba\x42\x7f\x85\x14\xb0\xbf\xa2\x9e\xc8\x75\x69\x30\xbf\xc1\xdf\x5f\x18\x45\xd9\x9a\x74\x05\x5f\xc5\xb6\x0f\x15\x44\x16\x8b\x95\x89\x93\x4f\x58\xa4\x65\x78\xa7\x37\xef\xe4\x8d\x9f\x75\x16\xfa\x6d\x0a\xdd\xc2\xef\x99\xba\x53\x27\x83\x12\x2a\xb7\x9b\x51\x98\x66\x8f\xf0\x5a\x81\xd6\x29\x98\xa5\x43\x02\xcd\xe1\x34\xb1\x44\xac\x30\xc2\x68\x45\x18\x87\xa0\x19\xc6\x19\x34\xb6\x35\x76\x76\x0e\xc4\xd7\x98\x9c\x8f\xc9\xd1\x34\x18\xa4\x2d\x4f\x2b\x2f\x2d\x5b\x14\xfe\xc7\xc9\xb9\x6d\x50\x2d\x4f\x6c\x5b\x8d\x39\xe7\xf7\x58\x54\x7e\x55\xe2\x24\x2c\x7e\x7d\x17\x51\x96\xfc\x7a\x87\x57\xe1\x3f\x7c\x53\x09\xa9\x27\xd0\xfb\x4d\x0f\xba\x77\x58\x00\x24\x58\xee\x67\x4e\x79\x31\xc8\xad\x46\x7f\x0c\x84\xde\x49\xda\x0b\xb8\x96\xa5\xf9\x16\x2a\xfb\x1d\xa1\xa6\x45\xef\x6b\xbe\xa2\x0a\x39\x07\x3d\x48\xe8\xb4\x17\x80\xe9\x35\x4c\x19\x2a\x84\x24\xa1\x5e\x2f\x5d\x0b\xc6\x79\x02\xcb\x1b\x56\xf7\x3d\x57\xcb\xba\x7e\x05\x29\x5e\xa2\x14\x84\x25\x12\xd7\x14\x3a\xd7\x86\x00\x8e\x3b\xd7\xd6\x97\x46\x05\x3a\x54\x96\xa9\x97\x23\x45\x58\x61\x20\x7e\xfb\x4f\x44\x98\x12\x78\x75\x4f\x6b\xda\x17\xd8\x26\xc5\x3d\x29\x39\x7a\xbd\x3d\x24\x9b\x4d\x64\x6b\x7b\xf1\x7b\x85\x21\x3d\x88\x33\x02\x95\xf9\x76\xb9\xd4\x6c\xdc\x5b\xd8\x40\x32\x59\x07\xa2\x46\xa5\xc7\xcd\x95\x22\xcc\xe4\xc1\xe1\x5c\x23\x12\xd3\x17\xd8\x70\x66\x3e\x27\x4a\x41\xe9\x97\xa8\x63\x94\xeb\xba\x56\x0d\x16\x7b\xb2\xdb\x29\x02\x22\x34\xb6\xc3\x74\x8e\xd2\x81\x63\x0f\x9c\xc7\x6e\xc4\x51\x43\xc2\x73\xf4\xe3\x68\x89\xd2\x69\x60\x8d\x7b\x72\x1c\x30\x60\x17\xfb\x83\x5e\x4b\x1b\xd3\x57\xbe\xf1\xb1\x44\x58\x2c\xc0\x31\x28\x0f\x1a\xee\x36\x42\x1a\x60\xdf\x8e\x87\xc8\x5d\x2c\x16\x5c\x63\x6d\xb6\x73\x4d\xae\xc9\xc8\x45\x93\x26\xa9\x85\xe5\x27\x73\xc5\xb4\xa9\x16\x3f\xe5\x4d\x56\x12\xd9\x22\xed\xf5\x8d\x8b\x3c\x48\x32\x73\x4c\x1d\x9a\x1f\x46\xe3\x9f\xea\xbb\x1c\x1d\x61\x2c\xff\x9d\x3a\x22\x3d\xdb\xb1\x54\x86\xe6\x98\xfb\xa4\x05\xfc\xdb\x63\xf5\x77\xaa\xc5\xe2\x0b\x07\xbc\x6d\xd8\xe6\xa9\x14\xdd\x33\x1f\x98\xb5\xdb\x85\x27\xbe\x0e\xc9\xb5\x9f\xd6\x1a\x4a\x0a\xef\xb6\xbc\xe6\xad\x70\x9c\x15\xf8\xd3\x77\xda\x17\x74\xc6\x56\xe2\x7e\x19\x87\x6c\x4b\x12\x9e\xcb\x29\x5b\x43\xc6\x0b\x38\x66\x57\x58\x7c\x24\x2a\x8e\x70\x40\xf6\xb3\xe9\xe5\x01\xe4\xf2\x2c\xf7\x33\x93\xae\xe8\x42\xe4\x53\x8b\x5d\xe2\xb0\x44\xeb\x2f\x5d\xe6\x85\xfe\x33\x75\x62\xea\xbf\x2f\x07\x57\x68\xfd\x55\xf6\xf3\x57\xf0\xa8\xe2\xd0\x7c\x39\x1a\x0a\x87\x1d\x9a\x2d\xa9\x44\x3c\x26\x36\x9b\x9f\xca\x2c\xab\x51\x71\x74\x16\xf1\x24\x44\x6f\x4d\xd0\xd2\x3f\xa5\x69\x16\xc6\x5b\x9a\x6b\xcb\x72\x6f\x93\x19\x02\x57\x61\x51\x10\x53\xe4\xda\xc8\xe2\xed\x8e\xe8\xc5\x2f\x71\xa4\x88\x20\xa1\xad\x13\x20\xe8\x0a\x0b\x38\x30\x50\x80\x25\x81\xef\xd5\x0e\x91\x8a\x23\x41\xcc\x04\xe3\x2d\xb2\xd0\xc3\x92\x06\x4b\x44\xf5\x42\x84\x93\x05\xec\x61\xeb\x2f\x91\x6d\x33\x8c\xbe\x35\xaf\x0d\x26\x23\x77\x34\x54\x7e\xf8\x15\xbc\x79\xbf\x41\x82\xac\x70\x1c\xe7\xdb\x2a\x67\xe3\x81\x72\x88\xeb\x2f\x11\x64\xe5\x6a\xea\xd6\x5f\x99\xbf\xfb\x08\xfd\xd9\x9c\xe7\xab\x15\x81\x03\xfe\xa3\x2b\x5b\x69\x5f\x47\xb6\x55\x27\xd2\x8c\x5a\x26\x0a\xba\xda\x84\xfc\x81\xb9\x97\x2c\x75\x8a\xa3\x58\x80\xb5\x1a\xe1\x30\xa4\xa6\x72\xc3\x36\x09\xf7\x44\x7f\x6d\x62\x9e\xc3\x3e\x1a\xb3\x80\x94\x50\xbb\xc4\x6b\x82\xee\x09\x61\x6e\x61\x85\x5d\x87\x2c\x2b\xbc\xa6\x0f\x6a\x18\x8d\x2d\xcf\x20\xc8\x8a\xaf\x5d\x1d\xe5\xc2\xc2\xd8\xaf\x86\x32\xcf\x42\x01\xf6\xfb\xfe\x80\x72\xc8\x59\x3c\x53\x6f\x91\x50\x6f\xed\xa8\x5a\x20\xe0\x60\x94\x87\x90\xb1\x9f\xed\x01\x74\x81\x70\xbf\x4f\xc1\xee\xb1\x27\x5a\xf3\x2d\xd4\xc5\x5f\x92\xe0\xa3\x4c\x56\xfb\xb1\x2e\x4e\xc4\x62\x57\x9a\xed\x44\x23\xd4\xe8\x18\x1e\x28\x65\xd1\x12\x47\x21\xa7\x5a\x74\x62\x29\x13\xc8\xa3\x5b\x62\x65\xe2\x5f\x8b\x62\x49\x10\x19\x73\x66\x94\xfe\x54\xa8\x6d\xef\x4d\x2d\xdb\x98\xd6\xef\xd8\x82\x88\x5c\xf1\x43\x2e\xcc\x2f\xca\x82\x81\x9b\x89\x95\x5e\x5f\xbd\x79\xa3\x7f\xff\xe6\xcb\x37\x59\x80\xec\x0e\xdc\x25\x96\x66\xc7\x1b\xcf\x78\xd8\x45\x11\xc1\x6b\x70\x18\x40\x4c\x9e\xbd\x72\x40\x11\x97\xc2\xe6\xee\x48\x88\xda\xbd\xc7\x92\xf4\xd1\x20\x8a\xd0\x47\xc6\x1f\x22\x12\x2e\xa0\x56\x4a\x29\x2e\x17\x8b\xeb\x97\x18\x5d\x44\x59\x10\x25\x85\x1e\xf5\xf7\xa6\xd9\xba\x91\x3c\xee\xe1\x47\xb2\x91\xfb\x89\x97\xe2\x9c\xf2\xf9\x9c\x08\x8d\xad\xe0\x43\xb5\xa7\x65\x9d\x47\xa1\x0a\x94\x4b\x36\xce\x60\x1d\x8d\xaa\x9c\x11\xfc\x59\xd6\x5c\x8a\xbd\x7c\xcd\x99\xc5\x84\xa3\xa8\xf2\x00\x79\xbe\xe5\xb4\xdf\x2a\xca\x68\xcc\x2f\x23\xb7\xb6\xfa\xe8\x8a\x23\xac\x14\xd1\x37\x5b\x87\x60\x85\x43\xb8\x86\x5b\x0d\xa6\x84\x8f\xff\x94\x7a\xd7\x80\x81\xee\xfa\xaf\xf7\x1f\x4f\x14\x0a\x89\x54\x82\x6f\xdc\xb9\xbe\xad\x8e\x68\x34\x01\xd6\x0a\x8d\xe5\xcd\x0e\xad\x7d\x34\x98\x2b\x3d\x5d\x65\x58\x36\x36\x70\xfd\x01\x33\x08\x6d\x17\x09\x43\x84\xaa\x25\x11\x15\xb1\x75\x7c\xe7\xc7\x4c\x8b\x08\xb8\xd6\x70\x14\x01\x62\x83\x88\x60\x96\xc4\xfb\xee\x31\xb9\xdc\x4f\x43\xcf\x05\xee\xee\xff\xfd\x7e\x87\x98\x59\x4f\xbe\x16\xea\xc7\x02\x99\xfa\xb5\x6a\x64\x4b\xc9\xa7\x5b\xee\xbb\xfd\x51\x57\xda\x89\x9e\x85\x0d\x70\x3f\x4d\x5d\xdb\x57\xc3\x3f\xdf\x35\x34\x17\xd8\x4f\x77\x3d\xfd\x57\x37\xe3\x0f\xe3\xbb\x96\x86\x04\x03\xad\x2c\x4e\x3f\x23\xac\xf8\xa8\x11\x79\x39\x80\xc6\xa5\xea\xe2\xf7\xef\xce\x47\x06\x5e\x9e\xdc\xdd\x5f\x1b\x11\xed\x54\x53\x4d\xa3\x5f\xaf\xf4\x7d\x74\x33\xfe\x30\xd0\x9f\x0d\xae\x46\x3f\xfc\xd0\x82\x55\xde\x98\x63\x4d\x46\x4b\xb5\x6c\x0b\x64\x69\xf0\xaa\x21\xb4\xbd\xa6\x56\x84\xed\x09\xff\xcd\xd3\x6c\x1e\xb5\xa2\xd8\x57\x1b\x16\xa6\xb6\xf8\xb0\x19\xb1\xb9\xe0\x4f\x20\x4d\xff\xd5\x90\xa2\x7c\x61\x2d\x43\x40\x93\xc0\x37\xbd\x9b\x7b\x4e\x59\xef\x89\x23\x6c\xec\x1c\xbc\x1f\xf3\x5e\xfb\x3a\xd5\x69\xe7\xcb\x2d\xe1\x56\xa3\x2e\x55\x20\xae\x11\x6e\xc7\x66\x80\x54\x78\x41\x9a\x1a\x3f\xdd\xeb\xad\xc5\x16\xb4\xf4\x6a\x85\x45\x94\x34\xd3\x6a\x84\x05\x9a\x63\xa5\x2a\x7b\x2a\xb3\x47\x57\xe7\xc3\x7f\x6f\x86\xb8\x08\xa1\xa4\x75\xed\xd5\xf9\xe8\xac\x8e\x98\x5c\x11\xbb\x3d\x8f\x73\x97\x49\xa4\x85\x60\x44\xd6\x64\xcf\x8e\x5d\x22\x61\x3d\x85\x65\x16\xd3\x84\x6c\xbc\x11\xf4\x5b\xd3\x87\xd3\x6c\x70\xfd\x5d\x7e\xed\x6d\x95\xbb\x0f\xe6\x60\xf4\x86\x8a\xf6\x21\x95\x71\x84\x4d\x8f\x11\xb0\x84\x5b\xdd\x16\xc7\x71\xaa\x55\x53\x25\x91\x46\x28\x21\x33\x12\xbc\x3c\x80\x1f\x70\x51\x89\x12\x46\x7f\x49\x48\x17\x2d\x04\x89\x0b\x1a\x61\x47\x22\x9b\xa3\x69\x54\x7a\x92\xfb\x4e\x71\xb4\xa6\xe4\x01\x9e\x64\x15\x3b\x35\x09\xd5\x41\x31\xe9\xe8\xad\xcd\xf7\xf6\xf6\xf6\xd5\x7d\xc2\x42\xe8\x62\x42\x02\x24\xf0\x47\x82\xc2\xfb\x53\x6b\x2f\x32\x59\x81\x86\x2d\xf6\xd1\xbe\x4c\x87\x56\xdb\x84\xad\xa9\xe0\x6c\x45\x98\xea\xad\xb1\xa0\x10\x66\x0a\x8b\xe2\x20\xb0\xc5\x94\x9c\xfd\xd6\x97\x84\x36\x7f\xb9\x04\xc2\x2c\x4e\x0f\x2a\xf3\x7c\x44\xe7\xa3\xeb\xef\xb6\xeb\xfc\xd5\x06\xa8\x1b\xb0\x65\x59\x8d\x2e\x9c\x71\x98\x42\x3f\x1b\xe7\xc0\x8f\x06\x3f\x35\x08\x63\x3f\xa4\xcb\xe9\x41\x8d\x4d\x8f\xc2\x72\x8f\x32\x52\x4b\xb7\x5f\xe1\x68\x84\xd0\xc5\x59\xff\xd8\xbb\xb7\x87\xbf\x66\x75\x4a\xc7\x81\xe1\xd6\xbb\xb7\xb4\x83\xb8\x63\xb5\x94\xc3\x60\xd4\xa5\x00\x35\xe3\x78\xe3\x1c\xa5\xe3\x10\x55\x29\xc8\x8e\x98\x39\xf4\x3c\xa0\x76\xab\x7e\x36\x67\xb2\x3c\x60\x6d\x97\xa2\x6e\xca\x4a\x09\x0c\x38\x7c\xe8\x87\x42\xd9\x77\xb5\xab\x5e\x3e\x01\x01\x0d\xaf\x3e\xdc\x7d\x18\x4c\x8b\xff\xf8\x30\xb8\xbc\xa9\x9f\x0b\x03\xa9\xe4\x9e\xaa\x9f\x7c\x18\x4c\x47\x83\x6f\x6d\x5b\xb6\xc1\xfb\x6f\x47\x90\x74\xf4\x61\x70\x39\x9e\x7a\x7e\xac\x27\xbc\x34\xde\x1a\x75\x62\x2e\x54\xe7\xaf\x1d\xc6\x19\xa9\x0b\xa2\xdf\x81\xb2\x4b\x7d\x11\xdc\x9e\x34\xbd\x8e\x05\x07\xf9\xf9\x57\x04\x4e\xe2\xbf\x42\x9c\xe8\x17\x99\xb2\x84\x0c\xfc\xbc\x2d\x3a\x16\x24\x80\xc2\x74\xf7\x89\x82\xae\x9e\x41\x40\x62\xe8\xd6\xc9\x05\xea\x58\x80\x9d\xfd\xac\x53\x9a\x52\x2e\x16\x3d\xc1\x23\x92\x25\x8f\xe9\x6b\xf2\x74\x6c\x4a\xd4\x37\x60\x5c\x0a\x20\x97\x45\x06\x20\x6e\xc6\x97\xe3\xfa\xe0\xa4\x1a\x1a\x80\x35\xfa\x2f\xb7\xf7\x3a\x63\xb1\x78\x8f\x19\x5e\x10\xd1\x41\x3d\x34\x62\x6b\xaa\x88\x8d\x0c\xd2\x4f\x21\x90\x46\x76\x91\x24\x11\xf4\xa4\x63\x21\x0a\x96\x98\x2d\x88\xf1\xd5\x75\xad\xd5\x53\x21\x19\x13\xe3\x24\x88\xe8\x8a\x2a\xdb\x03\xaf\xf3\x2d\x8d\x22\xca\xf2\x18\xce\x6c\x09\xbd\x0c\x83\x56\x28\xef\xcd\x7b\x7a\x3a\x78\xc2\x94\x8d\xda\xd9\x68\xfd\x0c\x51\x36\xe7\x19\xb1\x83\x24\xa4\x8a\x03\xa8\xa9\x2b\xe2\x8d\xec\x39\xaa\x38\x38\xda\xf4\x07\xd6\x29\x0c\xb5\x89\xf7\x9e\x4c\x63\x34\xd4\xcc\x03\xc3\xe1\xde\xde\xf4\x32\x58\x5b\x1a\xfd\x07\xad\x44\x43\xe2\x19\xb8\x5f\x8c\xb9\xd1\x38\x5c\x3a\x45\x1b\xe4\x7e\x99\x14\x9a\x84\x7a\xe5\xb7\x79\x7f\x95\x06\x2b\xb9\x29\xba\x66\x6d\x31\x8e\x35\xbc\xfd\x3a\x18\xec\xcd\xf3\xdd\x9c\x59\xf8\x69\x3b\x7d\xb6\x01\x3b\x77\xd2\x66\x9d\x95\x66\x3b\x85\x76\x0f\xa2\xee\x32\xa2\x72\x59\xb4\x07\x0e\x7a\x57\x04\x19\x93\x54\x0b\x61\x98\x03\xb4\x25\x0e\xed\xe0\x5b\x48\xc5\x06\x44\xed\x4a\xc7\x6b\xfd\x51\x13\xf9\xa8\x9f\xd8\x6a\xa6\x36\x59\xce\x44\xa2\x60\xb4\xa0\x6b\xc2\x4c\x30\x60\x1e\xe8\x39\x59\x93\x88\xc7\x3e\xa1\x88\xe3\xb8\xe0\x51\x4a\x25\xad\xbd\xdf\xe7\xc4\x5b\x1e\x6a\x4e\x3a\x82\x44\xd1\xef\x76\xdd\x8b\xa9\xb0\x56\xe0\xf6\x84\xc4\x2d\x2a\x0d\x69\xfb\xcf\xb5\xc2\x8b\x17\x14\x2a\x4d\xd1\x1d\x4b\xa8\x34\xc3\xf7\x92\x42\x65\x89\x05\xe9\xd9\x10\x9e\xd6\x0d\xc1\xab\xbe\xae\xef\x0b\x9e\x33\x2c\xd7\xe1\xc9\xd9\x91\x1b\xc3\x4c\xa3\x63\xa0\xfd\x59\xe1\x5e\xdf\x83\x96\xbb\x7b\xde\x83\x2b\x0a\x05\x34\x19\x46\x4e\xe6\xda\x2f\x1b\x8f\xab\x77\x80\xdb\x30\xcd\x3f\x37\xcd\x18\x48\xd8\x3c\x87\x7d\xf7\xd3\xc6\x29\xec\xe6\xd3\x34\xca\xa8\xf9\x64\x17\xbf\x69\x86\x67\x4f\xc6\xe4\xf2\xc7\xc1\x7c\x95\x37\x0b\xf7\x28\x0b\xc9\xaf\x3f\x41\xa3\x25\x6b\xbe\xd4\xff\xb8\x44\x3f\xde\x53\x16\xde\xe1\x30\x14\x44\xca\xd3\x9f\xb4\x40\x3c\x5d\x72\x69\xfe\x47\xff\xcb\xac\xba\x8f\x34\x86\xc0\xd7\x1e\x34\xe5\x01\x8a\xb2\x1f\x04\x59\x71\x45\x7a\xe4\x57\x12\x24\xe9\x2f\xb6\x72\x5b\x2f\x96\x24\x09\x79\x4f\xa9\x0d\x3c\x9e\x73\x11\x90\xed\x87\xae\xa6\x41\xee\x71\x1d\x6f\xcb\x52\xdf\xff\x1b\x8c\xba\x6e\x86\x7b\x01\x0f\xf7\x3c\x94\xe4\xb2\x67\x4e\xe2\xb0\xa9\x63\x23\xff\x49\x4b\xe7\x86\x54\x38\xf8\x88\xae\x67\x0d\xfd\xba\xe6\x75\xb3\x1b\xf5\x37\x0d\x80\xef\xb9\x49\x6a\xcf\xad\x83\xc0\x1e\xc5\xea\xda\xc6\xf7\xb4\x97\xe7\x49\x2a\x1e\x37\x47\xc0\xe3\xb6\xf0\x15\x16\x0b\xa2\xca\x32\x7c\x6a\x90\x79\x3e\xac\xef\x59\x04\xfe\x9b\xc3\x6a\x47\x28\x22\x56\x94\xe9\xe3\xbf\xe8\x7d\x02\x6f\xd3\xe8\xbc\xd2\x42\xb7\xf5\xad\xf5\xdd\x7c\xbd\x17\x1d\x09\xd3\xb2\x69\xab\x1c\xb2\xad\x93\x54\x52\x89\x2c\x4b\x47\x78\x37\xbe\x9e\x5d\xd9\x44\x2b\x93\x92\xe0\x2a\x1a\xd4\x3a\x41\x7c\x38\xa1\xb8\x92\xa7\x76\x59\x86\x58\xaf\x0e\x8d\x3c\x87\x38\x57\x15\xa2\xce\x43\xf2\x2c\xe3\xad\x9c\xad\x52\x8c\xf9\xe4\x8a\xd5\x46\x60\x45\xc0\x60\x43\x44\x31\xe3\x43\xcf\x6b\x96\xf0\x71\xbc\x09\x7e\x79\xf4\xa5\xae\xb9\x76\x0e\xaa\x6a\x50\xed\xfc\x55\x6d\xc8\xca\x59\x32\xcf\xc0\xe8\x96\xcb\x63\xc0\x71\x1c\x6d\xa0\x87\xc6\xaf\x54\x42\x08\xbf\x0b\xe6\xcb\xd5\x65\x95\x28\x61\x8a\x46\x48\x2d\xc9\x06\x61\x41\x9c\x27\xdd\x5f\x06\xa2\x11\xf1\xd5\x15\x0c\x9b\xaa\x8d\xe5\xc0\x76\xca\x18\x36\xd5\x28\xdb\xd1\xf6\xf9\xb2\xd6\xec\x93\x54\x2c\xb7\x74\xde\x6c\x81\x29\x09\x92\x68\xed\xd0\x71\x20\x4b\x8f\xfe\xbd\x36\x92\x07\xd4\x5e\x1b\xa9\x11\x59\x9f\xe1\x6c\x6f\x15\x9c\x30\xc5\x48\x9a\xd8\x02\x77\x3e\x05\x03\xa0\xf9\xbe\x0e\xe9\xef\x99\xf0\x58\x83\xfd\x65\x52\x1e\x5b\x13\xf1\x5c\x49\x8f\xb5\x84\xa4\x69\x8f\x35\x73\x01\x69\x8f\x7b\x92\x50\xe9\xa7\xac\x5d\x86\xfb\xf8\x26\x9b\x50\x74\x90\x0b\x6d\x0b\xc4\x7e\x4e\xb4\x5a\x3a\xfe\xc7\x8d\xd6\x6e\x91\xed\x98\xe0\x6a\x1d\x6a\x95\xdf\x6b\xc5\x3c\x03\xb0\x17\xfe\x9c\x21\xf0\xe0\x71\x1d\xe8\xe8\xd8\x01\x75\x90\xab\xa3\x31\x61\xff\xe3\xec\x68\x3d\xe3\x07\x99\xde\xab\xbf\xaf\x37\xbe\x27\x71\x88\xbd\xbd\x00\x62\x94\x55\xf5\x83\x50\xe7\xd1\x18\xaa\x75\x5a\xb3\xd6\x5f\x53\x23\x1c\x3c\x8c\x78\xf0\xf1\xaf\xbd\x5e\xc2\xf4\x1f\xb5\x77\xe6\x6d\xbc\x25\x5d\x04\x62\x54\xac\x8f\xa8\x49\x48\xfb\xb7\x34\xa2\xe1\xf7\x19\xfa\xb6\x17\x7e\xa2\xcf\x7a\xb9\xe4\x49\x14\x42\xa2\x38\xfa\x44\x63\x28\x7c\xd8\xcd\x0a\x65\xe4\x1f\xc2\x9a\x8f\x78\x80\x23\x14\x52\x41\x02\xc5\xc5\xa6\x8f\x26\x5c\x52\x97\x37\x8e\x51\x0c\xff\x5a\x9b\xde\x2d\x0b\x22\xf4\x21\xa0\x24\x8a\x05\xe5\x5a\x5f\x35\xeb\x54\xaf\x4c\x2e\x94\xcb\x3a\x8b\xf8\x03\x91\x90\x7c\xb5\xa4\x8b\x25\x91\x6a\x4f\x2d\xd3\xf0\xed\x80\xd6\xd3\x05\x08\xae\xed\xc1\x0a\xcd\xc6\xb3\xc1\x65\xae\xe3\x74\x69\x1b\x6a\x06\xc9\x07\xce\x72\x71\xe4\x46\xd4\xe8\xaf\xc8\x4c\xec\xef\xd8\xa8\xda\x32\xa7\xfa\xc6\xe9\x9a\x24\xfe\xeb\xf5\xf8\xea\x6e\x7a\x73\x39\xbc\x6e\xd2\x80\xb6\x1c\xf4\xce\xdd\x38\x6b\x0a\x0a\x40\xb5\xa6\x35\x1d\x5e\x8c\x2f\x87\x80\xee\xf9\xa8\x4f\x2b\x25\x9a\x0a\x0a\xb6\xad\x0e\x68\xca\x36\x79\x1f\x33\x84\xef\x25\x8f\x12\x53\x67\x40\x10\x3d\xc6\x35\xd9\xea\x48\xd9\x37\x50\x46\xca\x6d\x3a\xc8\xf3\xc4\x48\x52\xb6\x88\x08\xc2\x42\xe0\x8d\x09\x82\x81\x0e\x9c\xfc\xfe\x2f\x24\x50\x12\x51\x26\x69\x48\x50\x48\x64\x20\xe8\xbd\x4b\x83\x04\x17\x61\xd6\x31\xe7\x03\x8e\x68\x88\xfe\x22\xb9\x6d\xca\x6a\x75\x66\xbb\xd3\x7f\x74\x4d\xfe\x1e\xd3\x6e\x7f\x10\x83\x1e\x0b\xae\x78\xc0\x23\xf0\xd7\xc2\x13\x15\xc4\xd6\x93\x9b\x7f\x2f\x24\xfa\xae\x08\xf3\x96\xbd\xfa\xe5\x9b\xfe\x9b\xfe\x97\x5f\xf6\xdf\x9c\x7c\xf5\x4d\xc9\x37\xf6\x00\x73\x6f\xff\xe3\x9b\xee\x37\xdf\x7c\x5d\x0e\x3b\x10\x34\x2e\xc2\x1e\xe8\x85\x0e\x01\x6e\x20\x30\xa0\x22\x22\x52\x02\xcf\xe7\x34\x30\x42\xe3\x07\xce\xc8\x20\xeb\x94\x89\xd0\x93\xf9\xe3\xa7\xcf\xef\xf6\xeb\x96\x5e\x45\x3f\x5a\x2d\x3b\x5c\xcd\xe9\x00\x4d\x06\xd3\xc1\xfb\xe1\x6c\x38\xbd\xbe\x1b\x5c\xc3\x6a\xd4\xcf\x15\x9a\x0d\x2e\xbc\x9b\xd7\x83\xcd\xdb\xbe\xd9\xa4\x3b\x4d\x46\x83\xab\x71\x01\xe9\x74\x74\x77\xa6\x2f\x34\x05\xac\xcd\x4e\xac\x63\x8d\x30\x5d\xd4\x63\x58\x15\x38\x8a\x36\x69\x05\x27\x27\xf6\xd2\xe4\x0b\xa8\x58\xba\x48\x6c\xc6\x76\xae\x91\x2d\x94\x77\x02\x0f\x5f\x7e\x3b\x21\xca\x7a\x11\x65\x6e\x2f\x7a\x46\xd0\x0b\xf6\x8f\x73\xa8\xa2\x7e\xb7\x33\xed\xa1\xe3\xe9\xa3\x9c\x68\xb2\xd2\x46\xc1\xdf\xe9\x87\x06\xe5\x1e\x82\xca\xcf\x9c\xdd\x5e\xb8\x08\xa1\xa1\x11\x39\x88\xcf\x77\xc9\xb4\x72\x28\x13\x3f\xd0\xb4\x38\x4a\xa4\x22\xe2\x8e\xf1\x90\x58\x49\x91\x93\x4f\xf6\x1d\x7d\xb3\x33\xbf\xfd\xa9\xbb\xfd\xe3\x8a\xac\xb8\xd8\xdc\xad\xee\xcd\x0b\x5f\xbe\xf9\xea\x9b\xf4\x15\x2b\x0e\x9e\xaa\xa7\x03\xea\x3e\xf3\xb9\x71\x23\xf7\x42\x6b\x9e\x0f\x91\xc2\x0b\x9b\xf6\xef\xd2\xd8\x1f\x04\x55\x8a\x30\xc7\xdf\x0f\x67\x83\x89\xcb\x82\xbc\x46\x39\xbf\x23\x72\x7e\x47\x73\x47\x60\x1b\x74\xcf\x13\x16\x16\x04\x4c\x75\xb2\xd0\x16\xbb\x21\x36\xbe\x17\xa3\x05\x8f\xc2\x06\x2f\xba\x95\x2b\xf0\xea\x6e\x61\x18\xf3\xcd\x53\xa7\xd1\x87\xff\x71\xf2\xc0\xc5\x47\xb8\x33\x9c\xa8\x55\x7c\xe2\xfc\xed\x77\x66\x4d\x96\x74\x11\x2e\x05\xa4\x60\x6e\x34\x67\xbb\x88\xcf\xbb\xc0\x4b\xfd\xe4\x18\xc2\x33\x37\x46\x37\x42\x18\xdf\x31\x61\x37\x61\xc3\xf1\xf0\x99\x89\x3d\x1e\x3c\x85\x2c\xef\x53\xd6\x1f\x83\xf1\x15\x4d\x8a\x66\xe3\xef\x86\xb5\xb7\x41\x2f\xb0\x92\x2e\x45\x06\x60\x1b\xe2\xca\xf3\x94\x53\x53\x80\xab\x4e\x89\x6e\xa6\x97\xed\x08\xf5\xa4\x2a\x67\x16\x8b\x02\xe8\x46\x24\xe7\x6c\x33\x07\xcd\x4b\x79\x98\x97\xef\x76\x92\x4f\x9e\x63\xe8\xbf\xff\x2d\xa5\x61\x5b\x77\xad\x98\x9c\x4d\x87\xe7\xc3\xab\xd9\x68\x70\x09\xa3\x8b\xd0\xf5\xf7\xd7\x97\xe3\x8b\xbb\xf3\xe9\x60\x74\xe5\x0a\x9e\x5a\x4e\xa5\x79\xef\xfa\xb1\x2b\x49\x0f\xbd\xf4\xf5\xf9\x91\xb5\xdf\x2f\xed\xad\x6f\xfa\xf0\x83\xf6\x69\xac\x49\xb9\x02\xa1\x68\xc5\x43\x72\x5a\x26\x5b\x9b\x37\xa8\xd7\x87\xe5\x6a\x85\xbb\x19\x19\xdd\x0c\x79\xd7\x60\xbf\x7d\x55\xa0\xba\x84\x4a\x89\xb0\x34\x27\xb7\xe2\xb6\xd2\x59\xae\x06\x1c\xe3\xac\x57\xa8\x6b\x7a\x20\xcd\x5a\x8e\x43\xfb\xff\x34\x32\xf6\x4b\x88\x5e\x85\xb6\xff\xe9\xb3\xaf\x40\xaf\x62\x2d\xdb\xfd\x1f\x44\x58\x5e\xc3\x69\x26\x33\xca\x61\x7b\xf5\x6f\xb3\xec\x7e\x18\x0d\x2e\x47\x66\xd9\xdd\x4c\x2f\xf5\x8d\xf6\xfa\x6c\x30\x1d\x9d\x8d\xef\xcc\x2a\x34\x6b\x4f\xff\xe4\x3e\xbe\x9b\x8e\x67\xb3\x41\x7e\xf1\x61\x04\x75\xca\x29\x0a\xa9\x9b\x46\xc1\xed\xdc\x7e\xa2\x38\xa2\x6e\x41\x50\x14\xa6\x85\x9c\xa1\x8a\x33\xbe\xa7\x11\x55\x50\xa7\x1b\xeb\x15\x88\x23\xaa\xa0\xb9\x6f\x5a\xc7\xbc\x05\x17\xdd\x48\xd3\x51\xc2\x92\xd4\x84\x75\x33\xb2\xd2\xc5\x49\xbb\x28\xc4\x5d\x47\x4d\x61\x59\xea\xf1\xb8\x0f\x68\x61\x1c\x50\x84\x19\xd6\xa6\xa6\x5e\x2f\x4e\x28\x43\x6e\x56\xe7\x27\xca\xb5\x8e\xbc\xe2\x21\x87\xce\x0a\xd9\x28\xf8\x1e\xa3\x28\xcc\x97\x5d\xa8\xc1\x92\xe2\x35\xf9\x32\x17\x55\x6d\x16\xab\x79\xfe\x55\xee\xf9\xee\x82\xa5\x01\xd6\x94\xc6\x44\x04\x5c\x48\xbd\x68\x13\x7b\x53\x0f\x96\x66\xed\x52\xc2\x48\xdb\x95\xeb\xa3\x36\xb3\x94\x5c\x9a\x15\xfc\xd9\xc8\xcc\xb4\xe9\xc4\x11\xa5\xe6\x81\x62\xf3\xb6\x91\xe0\x34\x96\x86\xdb\x23\x0b\xcf\x83\xa5\xe7\xad\x95\x9f\x85\x8b\xe8\x97\xe9\x25\x15\xe4\x68\xe1\xb7\xaf\xb6\x6e\xa9\xcd\xe5\xe9\xf1\x04\x6a\x93\xeb\x4f\x39\xe4\xd5\xa6\x17\xde\xf7\x56\x94\x91\x6c\xfc\xae\xf8\x75\x3a\x4e\x1c\xae\x28\xd8\x92\xba\x68\xbb\x88\xff\xa9\x79\x60\xea\x67\xa7\x9c\xd8\x0f\x7b\xda\xb2\x39\x5b\x09\xd2\x7f\x47\xf2\x43\x14\x98\xb2\xec\x72\x1d\x21\xb9\x91\x11\x5f\x14\xfb\x7f\xb4\x03\x59\x0c\x42\xeb\x89\xb2\x8e\x22\xc7\xd7\xae\x76\xe6\x26\x9b\x19\x2d\x19\xcd\xac\xe8\x39\xc9\x66\x44\x3f\x4f\x67\x63\xdf\x1c\x91\x63\x4c\xd9\xf3\x20\x6e\x32\xb3\xcf\x82\xf9\xd9\x16\xc0\xfa\x6b\x1c\xef\x19\x00\xbd\x26\x42\xd2\x3d\x39\x6d\xbf\x4d\x85\x56\x27\x98\xa3\xde\xba\x03\xb6\x61\xf8\xbb\x67\xdf\xe8\x80\xc1\x16\x47\xfa\x84\xb5\xb9\xce\xad\x8d\xb6\xb3\xe9\xe0\x6c\x88\x86\xd3\xe9\x78\xaa\x0f\xba\xc1\x6c\x74\x75\x81\x2e\xc7\x17\xd0\xb3\x1f\x3d\x3e\xf6\x27\x58\x2d\x9f\x9e\x4e\x6f\xd9\xe3\x63\x7f\x28\xc4\xd3\x93\x5f\x41\xcc\xc1\x1a\xa2\xf3\x11\xc0\x33\x51\x23\xe7\xc3\x4b\x03\xf0\x7c\x04\xc0\x4b\xe1\x96\x93\x78\x39\xb2\xa5\x62\xad\x47\x79\x45\x98\x3a\x6d\x37\x4a\x53\x7b\xc7\x47\xb7\x69\xee\xe5\xf9\x74\x72\xd3\x0e\x15\x66\x60\x7a\x87\x65\x2a\xc1\x4f\x98\xd6\x90\xe4\x73\xa4\x6f\x89\xe9\x01\x09\xb7\x44\x0f\xf4\xd1\x2a\xe6\x52\xd2\x7b\x70\x6e\xe4\x5a\xef\xa4\x70\xa1\xae\x33\x89\xb4\x86\xa0\xe1\x7f\x22\x28\x24\x14\xc5\x14\x33\xd0\x8c\x53\x1d\x51\x1f\x74\x0b\x68\xd0\xe3\xeb\x55\x02\x45\xa3\x0f\xa3\xf6\xb7\xff\x83\x3e\x4b\x72\xd1\xeb\x73\x32\xc7\x49\xa4\x4e\xd3\xd6\x9f\xc4\xdb\x28\xe7\x59\x06\x81\x5e\xc3\x4c\x2a\xdb\x03\x30\xd6\x82\x78\x4e\x19\x55\xf8\x14\xd4\xf6\x80\x33\xa9\x25\xb3\xf2\xb6\x0c\xc2\x4c\xaf\x27\x53\x7f\x73\xa7\xd8\x67\xb7\x50\xdb\x16\x04\x44\x5a\xf9\x76\x95\x48\x85\xe6\x54\x48\xa8\x8b\x6e\x4b\xab\x36\x59\x6e\x11\x5d\x51\x66\xda\x19\x99\x71\x62\xfd\x75\x3a\xbc\x7f\x42\xbf\xfd\x0d\x31\x12\x10\x29\xb1\xa0\x3c\xf7\x3e\x94\x5b\x47\xa0\xe4\x53\xbc\xa6\x88\x20\x0a\xe4\x14\x3e\xaf\x1c\x26\x18\xa8\xf3\x05\xf7\xd3\x0a\xe2\xae\x3c\x2a\xb6\xf9\x15\x24\xac\x0c\xf7\x28\x0e\xc8\x76\x6a\x4c\xa7\x08\x08\x2a\xa2\xd1\xa3\xcc\xda\xfa\xe8\xe9\xb4\x5e\x40\x98\xb8\x7a\xa2\xa1\xf8\x3a\x65\x73\xee\xda\xc9\xcd\xb9\xd0\x52\xce\xd6\x89\xbf\xc2\x2b\xf2\xf4\x74\x94\x51\xc0\xa5\x00\xf0\x68\xd2\x28\x74\x92\xd4\x6b\xd0\x74\xa3\xda\x41\x79\xd0\xd0\xfe\xae\xc4\x98\x26\xd8\xb5\x88\xb9\xe7\x6a\x89\x22\x1e\x7c\x84\x3d\x61\x22\x42\x6c\x73\x1d\x6f\x09\xe8\x3c\xb1\x69\x87\x24\x41\x5c\x03\x33\xe0\x3c\x8f\x0d\xd3\x43\x8a\xee\x23\x1e\x04\x1c\x41\x6f\x2c\x69\xfe\xe1\x6b\x67\x58\x42\x9b\x3e\xf4\x4c\x56\xda\xd3\x13\xd0\xf8\xf8\xd8\x3f\x37\xb1\x2c\xe1\xd3\x53\x5b\x12\x25\xc5\x45\x88\xfa\x9a\xbd\x05\xb1\x11\x69\x69\x14\xce\x3d\x55\x46\x9e\x68\xce\x9d\x18\x06\xb6\xa5\x4a\xef\x7e\x65\xec\x34\x41\xb0\x24\x0a\x6a\xd9\x19\x1c\xa8\xc0\x4d\xe0\x1e\x3e\x31\x5c\xc4\xcd\x48\x85\x18\x5a\xc5\x17\x04\x8a\x17\x43\x1c\x41\x1a\xdf\x8b\x59\x78\x02\x5d\x7b\xd4\xb2\x2d\xcd\x11\x06\xc8\x18\xe2\x10\x88\x86\x65\x7a\x64\x41\xc0\x30\x39\xe1\xa9\x4d\xa3\x19\x95\x02\xb3\x90\xaf\x7a\x25\xc4\xea\x47\xdd\xe3\x92\x1c\x60\x99\x60\x10\x0f\x8e\x74\x78\xde\x6d\x39\x02\x13\xbb\xca\x85\x2d\xfe\xb7\xcc\x15\x63\x07\xff\x64\x57\x1f\xa6\x1f\x6d\x72\x37\xb8\x10\x4d\x9c\x93\xf1\x4f\x9a\x27\xd6\x1d\x88\x70\xec\xcb\x45\x7c\xcf\x43\x63\x27\xe2\x68\x4d\x35\xdd\xd0\x78\x8d\x46\x88\x25\x2b\x22\x60\xa5\x58\x91\xd0\x85\x9e\x83\xe0\xaa\x84\xbd\x66\xc4\x98\x4c\x4c\x6f\x2c\x44\x8a\x3f\x03\x15\x14\x83\x30\xdc\x6a\xc1\x5b\x39\xde\xbc\x38\xb3\x01\x8f\xdb\xa7\x6d\xdd\x48\x8c\x14\xce\x8b\x2d\x4b\x44\xd9\x31\x5a\x49\x8c\xda\xc4\xe0\x59\x36\xb5\x91\x90\xa9\x8d\x14\x13\xa1\xc5\x3e\x09\x11\x67\xd5\xbc\x6d\x0b\xa5\x8a\x14\xe8\x7a\xef\xae\xb0\xb5\x1c\x70\x6d\xa5\x4c\x4b\xb9\x0a\xc0\x5a\xf0\xbb\xb7\xfb\x7d\xdf\x92\x4f\x01\x87\x85\x3e\x83\x88\x6a\xcd\x49\x2f\xe1\xbe\x77\x11\x93\x00\x7a\xa3\xe8\x99\x84\xfb\xa1\x1f\xc9\x19\x67\x4a\xf0\x28\xe2\x16\x8b\xe0\x0a\xf6\x7f\x1d\x8a\x7c\xf5\x78\x68\xeb\x62\x6f\x65\x5a\xf0\x0e\x26\xa3\x0f\xe6\x5f\x4f\x4f\x48\x90\x5f\xf4\xc1\x27\x91\xbe\xcb\xe4\x5e\x7a\x4f\xd9\xd9\x65\xf6\x5e\x1f\x7d\xcf\x13\xb8\xd1\x05\x89\x10\x84\xa9\x68\xa3\xe7\x28\xf7\xc1\xb7\x5a\xcf\xda\xe4\x3e\x98\x71\x94\xc4\x0b\x81\x43\x62\x6a\x7e\x9e\x5d\x8e\xba\x28\x8e\x08\x96\xa6\x27\x9c\x3a\x4d\xef\xc2\x0b\xaa\x96\xc9\x3d\xe4\x35\x04\x9a\xf2\xb9\x21\xfc\x24\x88\xe8\x1f\x42\xd7\x0f\xb5\xdd\x5d\xa7\x9e\x01\x15\x83\x3f\xbb\x1c\xbd\xa7\x30\x88\xda\x61\x1b\x26\xbd\xe0\x78\x2f\xb1\x43\x4f\x60\x5c\xc5\x91\x16\x46\xe7\xba\x1e\x47\xb9\x4f\xf4\x48\x8b\x23\xbc\x56\x98\xa6\x6d\x33\x59\xc8\x0b\xaf\x17\x46\x38\x21\x02\xe1\xc5\x82\x72\xc1\xac\x6c\x57\x09\x36\xe3\x84\x01\xe2\xb6\x23\x6c\x30\x75\x85\x0e\x84\x8a\xf3\xa8\xdd\x32\x00\xb3\x76\x16\x4c\xe2\x82\x4c\x8c\xaf\xd3\x16\xaa\x75\xc1\x20\xd0\x7c\x40\xbf\x41\x18\xf2\x5a\x47\x86\x5a\xd5\xe5\x0e\x24\xd6\x6a\x43\xe6\xc9\xd1\xea\x04\x17\xfa\x2e\x94\xa0\x20\xa1\x28\x2a\x76\x59\x8f\x93\xdf\xfe\x2f\x22\x52\x12\x01\x1d\xd7\xb1\x0c\x78\xe4\xd5\x19\xed\xb8\xdf\x91\xc8\x27\x49\x2f\x12\x1a\x42\x8b\x46\xcc\x42\x5a\x0d\x45\xeb\xdb\x1e\x28\x57\xfa\xfc\x35\x40\x6a\x48\xf9\x59\x2f\x06\xf3\xf7\xd3\xd3\xcf\x7a\x04\x10\xde\x64\xec\x1f\xa6\x1f\x93\xcd\x10\x23\xa1\x09\x41\x66\x26\xa4\xe9\xec\xad\x9b\xc6\x13\x1c\x51\x2c\xfb\x08\x4d\x4d\x19\x7c\x0d\x60\x0b\xac\x9b\xf0\x1a\xf0\x0c\x71\x11\x9a\x36\x0f\xce\x1b\x61\x02\x34\xf5\x0b\x66\x3a\x41\xbb\x96\xc4\xab\xb2\x44\x6e\xd8\xdb\x24\x30\x12\x01\xde\x9e\x96\xb3\x4b\xbd\x7b\x09\x23\x19\x6c\xae\x2f\x99\x09\x73\x5f\x9b\x31\xe9\x41\xc2\x70\xb9\x1e\x1d\x0d\x09\xe3\xfa\xe6\xa9\xcf\xff\x06\x58\x42\x9c\x82\x37\x6b\x03\x7c\x67\x30\xbb\xe6\x0e\x2e\x18\x5c\x79\xed\x3b\x66\x39\xe9\x27\x76\xdf\x7a\xf5\x25\xcf\xd4\xe5\x7a\x7b\x5a\xf2\x29\x73\xac\xee\x3c\x3e\xf6\x27\xf0\xa7\xb9\xa5\x75\xac\x14\x0c\x20\x50\x56\x89\x4d\x96\x09\x08\x07\xa5\xe7\x2b\xd7\xa1\x87\xb9\x91\x99\x3c\x08\xfb\x7a\x7e\xfe\x28\x5b\xf3\x8f\x55\x6b\xa1\x8f\xd0\x3b\xfe\x40\xd6\x44\x74\xa1\x49\x88\x8d\xd9\x35\xf6\x83\x79\x12\x45\x9a\xa4\x90\x08\xad\xc9\x98\xae\x40\x74\x15\xe3\x00\x76\x7a\x81\x56\xfd\x53\x1a\x6f\xba\x4b\xb1\xa1\xad\xfd\x7a\x29\x5b\x0e\xf9\xd9\x2d\xe3\xe8\x24\xe1\x14\xae\x9a\x60\x25\xd5\xea\x62\x7e\x01\x54\x7c\x8b\x08\xfa\x25\xa1\x2c\xa4\xa8\xb0\x66\xa0\x2a\x0a\x4f\x3f\xd3\xca\x1d\xc8\x7f\xbc\xb2\x00\xcb\x69\xef\x23\x34\x4b\x94\xc2\x6b\x8a\xbb\x28\x24\x6b\x6a\x0d\x25\x01\x5f\xc5\x82\x68\xa6\x82\x88\xa4\x84\x71\xbd\xfe\x56\x31\x86\x9b\x12\xe8\x22\x39\x9a\xcd\x82\x0c\xab\xc6\x8c\x88\x04\xd1\xaa\x48\xcd\x5a\x35\x9d\x5f\xfa\xa6\x03\xd0\x3c\xc2\x0b\x17\x31\x09\xd6\x29\x12\xa2\x15\x17\x7a\xb5\x60\x2d\xa5\x03\xef\xf6\x3e\xb3\xe3\x0d\x71\x7a\xbb\xef\xa3\x7f\x33\x5c\xd2\xec\x0b\xb0\xd2\x70\xf2\x32\xd9\x9a\xbf\x38\x8a\xe9\x6f\xff\xa5\x85\x79\xc2\x30\x5a\xf3\x48\x79\xaf\x7d\x86\x64\x69\x3a\x0c\x91\x10\xdd\x6f\x72\x32\xca\x96\xe5\x6f\x69\x0f\xe6\xab\x38\xb1\x59\x4a\x72\xc9\xcd\x1d\x47\x2e\xf1\x97\x08\x7c\x86\xae\xbe\xba\x13\x8b\xa0\x74\x81\x97\xd0\xc7\x06\x1c\x05\x3c\xc2\x88\xa0\x15\x97\x4a\x80\x40\x32\x9e\x71\x03\x55\xcf\x19\x38\x19\x01\x14\xe5\xf9\x49\xac\xa2\x10\x22\x66\x35\x00\xad\xc4\xee\x8c\xb9\x6b\x36\xbb\x3e\x50\x15\xfe\xa8\x17\xf8\xc3\x52\x23\xa9\x50\x74\x81\x4e\x73\x43\xd1\x60\xf5\x02\xa6\xe9\x6a\xca\xe4\x7a\xd7\xac\x74\x6c\x7a\x43\xd9\x73\x95\x2b\x41\xee\xef\x49\xd6\xda\x9d\x20\x1c\x05\x09\xa3\x68\x45\x59\xa2\x68\x03\x85\x99\x33\x46\x02\xf0\x37\x87\xc9\x0a\x7a\x1f\x0a\x12\x10\xa6\x4c\x22\x18\xdc\xb9\xe2\x18\xd4\xab\x38\xb6\xd6\x2b\x90\x61\x0b\xfd\x6c\x2c\x16\xf6\xd9\x89\xbd\x7a\x3e\x3e\xf6\x21\x55\xcc\x3e\xc6\x52\x3f\xb9\xb1\x4e\xb8\xa7\xa7\x7e\xbf\xef\x4f\xcf\xd3\xa4\x48\xc9\x0d\x25\x60\x73\x8a\xb8\x23\x87\x9a\x9e\xdf\x45\xbd\xa2\x40\x15\x23\x51\xd4\xe1\x62\x81\x99\xd6\xe7\xd2\x17\xb6\x48\xd4\x17\xc0\x2d\x1a\x21\xa4\xa3\x40\x65\x9e\x6d\xde\xf4\xbf\x8c\x71\x0a\x53\x90\xb2\xbf\x23\xc7\x70\x10\xf0\xd0\x5a\xb7\x1d\xe3\x3e\x3b\x86\xc5\x94\x18\xdd\xd3\x74\x0e\x45\x01\x0f\x61\x5f\x9b\x0b\x6f\xaa\x8d\x2a\x8e\x30\x83\x8e\xd9\xd9\x99\x95\xff\xfd\xb5\x6d\x3f\xaa\xb0\xd1\x65\xb1\xca\xff\xec\xed\xc6\xce\x63\x6a\xb5\x92\x90\x06\xa0\xb2\x72\x41\x17\x5a\xbb\x06\x81\x57\x64\x14\x65\xf0\x28\xd2\x82\xa3\xf0\x43\x2a\xcc\xd1\x6b\xbd\xed\xf0\x7a\x4d\x31\x52\x38\x22\x85\xd7\x7c\x7e\x03\x1e\x43\x0f\x31\x3b\x7e\x48\x22\xb1\x6b\xe5\x1a\x1e\x0d\xe2\xf8\xe9\x09\xe2\xbb\x4d\xbd\x22\xfb\xe3\x0c\xfe\x65\x7e\x3c\x6c\x29\x55\x32\x27\x34\x0b\xc2\x32\x05\x47\xbb\x8b\x27\x4f\xe5\xce\xef\x5b\x36\xec\x6d\xc2\x9f\x69\xb9\xf9\x38\xad\x15\x25\x68\x3f\x4b\xcd\xd1\xea\xec\x46\xdb\xb6\xf8\x5b\x36\x14\x82\x8b\x53\x54\xe3\x49\xbd\xe2\x4c\xeb\x3b\x12\xae\x3e\xe5\x06\x74\x40\x85\x33\x6b\x92\x0f\x17\xc9\x21\xab\xa1\x3e\xe0\xf1\xa6\x78\xe6\x9d\x22\xe7\x9c\xe5\xad\x89\x0d\xf4\x34\xa7\xb4\x6e\x9f\x7a\x5b\x90\x6b\x28\x0b\x89\xa9\x4d\x65\x9b\xcc\x19\x2b\x01\x7a\xe0\x02\x2c\x3c\x69\x72\xe6\xff\xd3\x8e\x42\x07\xd5\x5e\xb3\x53\x30\x7a\x71\x45\x78\xcd\x05\xd7\x13\x2f\x2a\xb5\x29\x47\xe1\x1c\xa6\x43\x2b\x37\x38\x89\x14\x32\xe9\xbf\xed\xc8\x51\x56\x4f\xa5\x91\xfe\x9c\x32\xca\x73\xde\x42\xef\xad\xb1\x48\x40\x1c\x43\xf8\x56\x08\x9a\x61\x2a\x7d\x3b\xc8\xf8\xce\xe9\x9c\x48\x5f\xaf\xf6\x1a\xa2\xb6\xb7\x9f\xbd\x79\x29\xbc\x8d\x89\x81\x63\xcd\xa2\x6a\x42\x33\x24\xd8\x12\x00\x73\xc3\x64\x12\xc3\xdd\x3e\xbc\x84\xa7\xa0\xc5\xcf\x96\x04\xda\x3a\x32\xfb\xaa\x44\x58\x90\x53\xef\x39\x95\x37\x92\xa7\xd4\xe3\x7a\x34\x97\xc4\xbd\x13\x70\xc6\x65\x40\xb5\x82\x28\x39\xe3\xa7\xfe\x43\xa6\x30\x10\xb0\x1b\x83\x65\x1f\x6e\xdd\xd9\x7e\x9c\x44\xd8\xea\xe7\x7b\x2f\x08\x63\x58\x0e\x38\x33\x96\xfc\x52\xd8\x4d\x68\xb4\x82\xa9\xa5\xb2\x5c\x06\x62\xd7\xcf\xa8\x78\x2a\xff\xf2\x4b\x62\xef\x31\x7b\x25\x9b\xde\x9f\x41\x42\x4b\xc4\x61\x11\x71\xa3\xd1\x14\xce\xb2\xf4\xc8\xd3\xe7\x86\x51\x00\xcc\xa9\xb1\xef\x30\x22\xbe\x7d\xce\x54\x1e\x4e\xf5\x44\x4b\x22\x28\x8e\xe8\x27\x92\x77\x35\xb7\xa3\xcd\x81\xf8\x54\xe2\x4b\x6e\x8e\xde\x84\x64\x79\x5d\xa9\x35\x7c\x59\x44\x34\x35\x72\x6a\x45\x92\xd6\x0a\x58\xab\xa4\x70\xb1\xe8\xc3\xc9\x31\x98\x8c\xf6\x38\x41\x0b\x5e\xb3\xed\x39\xd8\xd2\x29\xb6\xf0\xf8\xe9\x63\x1d\xe5\x82\x5f\x15\x59\x99\xea\x01\xa0\x9a\x27\x71\xc4\xb1\xcf\x65\xe2\x3b\x36\x4d\x94\x37\xb5\x17\x46\x0d\x90\x0b\xcc\x88\x71\x25\x69\x95\x12\x0b\x1a\x54\x3a\xc2\x1d\x4d\x3c\x26\x2c\xe7\xd0\xad\xb8\xbf\x7a\x68\xc1\xb1\xa0\x39\x5a\xe0\xf8\xde\x71\xe4\xd6\x10\xf1\x20\xa8\x22\x69\x51\x85\x96\xb3\x15\x08\xba\x26\x39\x0a\x3e\x51\x9f\xab\xca\xc5\x1e\xcf\xce\x26\xc6\xdb\xe3\x53\x3e\x05\xc1\x60\x71\x30\x3e\x9e\xd9\xd9\xa4\x06\x60\xca\xbf\x6a\x80\xcd\x19\xe3\x00\xdb\x0a\x21\x14\x7c\x70\x5a\xcb\xd6\x2b\x26\xc2\x8a\x08\x94\xc8\x1a\xf2\x53\x05\xc1\x5c\x1d\xb6\xd6\xb1\xf1\x39\x3a\x6f\x03\x47\x32\x81\xca\x3f\x74\xed\x5b\x30\x5b\x24\xc1\x2d\xc7\x9a\x83\x12\x69\x0c\x2e\x38\x8a\xa0\xbf\x3c\x7a\x0d\x71\xad\x50\x51\xc8\x7b\xfb\xd9\x22\x32\x58\x16\x2d\x40\xce\x0d\x62\xcc\xfa\x2a\x51\xca\xc4\x02\xe4\x47\x41\xd1\x6b\xc9\x23\x8e\xf0\x4a\xc3\x90\x4a\x80\x21\xc9\x77\xd5\x71\x03\x60\xe4\x01\xdc\x95\x35\x84\xb1\x84\xaf\x79\xb5\x87\xd2\x41\x34\xee\x7b\x13\x6b\xe0\xfa\xe3\x35\x5e\x63\x45\xa7\x3c\x5c\x91\x9b\x2f\x3c\x8b\xd9\x14\x11\x4b\xbb\x6d\x57\xb8\x7c\x8b\x2b\x3b\x8f\xd5\x1a\x73\x1a\x78\xc2\xb3\x10\x7e\x53\x37\x02\x55\x15\x13\x76\xec\x5c\x08\xad\x4e\x81\x51\x89\x06\x89\x20\x9f\x3e\xe1\x5a\xf0\x46\x87\xc0\x09\x84\xe0\x7f\x24\x5e\xa3\x83\x45\x61\x92\x27\x43\xaa\xbf\xd0\xc7\x45\x90\x33\x86\xd6\xf8\xd3\xb7\x71\x9a\x1c\xc7\x1a\x7c\x36\x11\x32\x24\xa9\x2b\xbf\x21\xf4\x9a\x48\x01\x0b\xbf\x4d\x3c\x40\x8a\xa1\x22\x4c\xcc\x82\x75\xca\x46\x0d\xa4\x44\x44\x76\x59\x41\x8e\xbd\x51\x81\x5a\x48\x1f\xb7\xc4\x6e\xa6\x97\x46\x00\xa5\x4a\xce\xbe\x92\x87\xa1\x77\xb3\x59\x2b\xc1\xad\xdf\x6f\x0e\xf3\x34\x4d\x93\x77\x11\xd6\xe6\xbc\xb6\x25\xfa\x4c\xdd\x2c\x5b\xad\xb7\x41\x71\xde\x34\x2e\x7b\xf7\xd8\x69\x83\xe9\xb5\xad\x03\x38\x19\x4f\x67\x90\x4b\x9a\x8b\x15\xfa\xa2\x32\x67\xa4\x00\x73\xb5\xb1\x8d\x7d\x9b\x96\x7b\x2c\x54\x18\x6c\x0b\x78\xa7\x90\x6f\x01\x30\x3c\xea\x1f\x13\xfc\x56\x89\xc6\x2d\xf0\x27\x73\xce\xdb\xa3\xf0\x57\x5f\x3c\xb4\xf8\x62\xba\xf6\x34\xe9\xee\x1a\x9c\x0b\x85\x32\x67\x6b\xda\xb1\x2c\x4e\xe4\x92\x84\x6e\x9b\x80\x93\xad\x46\x30\xa5\x30\x43\x5a\xb4\x15\x96\x44\x3b\xa1\x50\x1f\x9c\xf4\x3e\xa1\xfa\x3c\xe0\x42\x10\xa5\x40\x71\xac\x91\xfe\xa0\x8e\xd4\x08\xb0\xa2\xca\x51\x03\x6f\xaf\x52\x70\x95\x47\x02\x41\x0b\xad\xa9\xcb\xa0\xc0\x05\x8a\x48\x1a\xe0\x4b\xf2\x41\x65\x11\x5f\x20\x62\x21\x7b\x6f\xf3\xfb\xd5\x5c\x6c\x4a\x66\xd4\x71\x20\x42\x8a\xe6\x58\xa9\x44\x64\x1e\xe6\xad\x80\x5e\x08\x98\xb4\xc1\xae\x35\xe4\x7e\x24\x9b\x76\xb1\x6a\x40\x97\xc9\xe0\xdc\x23\x38\x4d\x23\x05\x76\x6c\xaf\x70\xc1\x57\xa9\x5d\x2e\x2b\xcb\x37\x87\xb7\x2a\x28\x49\x2f\x5e\x55\x4b\x3b\xc4\x10\x1e\x9c\x85\xd1\x53\x67\x97\xa3\xc6\x8c\x5c\x78\xbb\x8e\xf2\xe3\xba\x4b\xea\xc7\xb6\x43\xe0\x4b\xf8\x45\x6a\x98\x90\x5d\x0a\x1f\x1f\xfb\xdf\xba\x7f\x5c\xb5\x19\x54\x59\x48\xef\x2e\xb0\x16\x34\xd9\xcb\xc7\xe3\x63\xff\x1c\xfe\xb2\x00\xf4\xe2\xde\x99\x9f\x3d\x27\x22\xbd\x91\x6c\x23\x31\xde\xab\xaa\x69\x38\x88\xdd\xc7\xa2\xff\x19\x49\x34\x95\x35\x1e\x1f\xfb\xff\xa6\xff\x38\x90\x4c\x5c\x0e\xee\x20\x02\x77\xae\x43\xe9\x1c\xfa\xf3\xd1\x8a\x02\xa6\xec\x66\x94\x07\x52\x83\x1f\x10\x3f\x3e\xf6\xdf\x59\xfd\xa4\x0d\x3b\x0c\xe2\xc2\xc7\x6d\x86\xee\x50\xdf\x4c\x2f\x7d\x3b\xe2\xc8\x12\x2b\x47\xb2\x41\x5a\xbf\x43\x9e\x45\x50\x15\xef\xa1\x1a\x8c\x7b\x72\x07\x4f\xd2\x21\x26\x29\xf4\x46\x82\xa0\xe4\xca\x5a\x0a\xdc\x11\x9f\x03\x5f\x47\xf0\xf6\xcd\xd6\x12\x78\x66\x0e\x47\xcd\x85\xe6\xf2\xaa\xc9\xb5\x37\xa5\xb1\x80\xa1\x15\x8f\xf3\x17\x63\x0d\xe9\x40\x29\xbb\x7b\x79\xce\x01\x3d\x70\x39\x78\x48\x2d\x1c\xe2\x25\xdb\xe1\x08\xa3\x29\x1b\x4c\x95\x25\x7f\x77\x43\x1c\x6b\xf4\x69\x32\xc6\x8e\x63\xa4\xb5\x2e\xb3\xcf\xaa\x2c\x4f\x0a\xdc\x25\xe6\x60\xd5\xe6\xd0\x05\xad\x75\xe3\x8c\xaa\xef\xc8\x26\xa7\x52\x54\xf0\x72\x64\x1f\x1d\xce\xa8\x54\xd1\xf6\x30\x2a\x23\xc9\x88\xd7\x1a\xbe\x6e\x11\x76\x30\x9b\x96\x58\x90\xd0\xa7\x77\xed\xbb\x5d\x72\x62\x89\x85\x74\x4d\xe5\xae\xb6\x75\xd8\x26\x80\xc5\x5c\xaa\x5f\x1c\x53\x55\x4c\x75\x98\x2c\xdf\x68\x0b\xdb\x33\xeb\x8c\xa5\x9b\xb6\x6c\x7f\x1f\xb0\x3e\x77\x9c\x93\x4d\x77\xee\xa1\x4b\x0f\xfa\x8b\x1d\x27\x78\xad\xe1\xc0\x6b\x08\x32\x39\x4e\xae\xd4\xb1\xd7\xc5\xfd\x22\xf2\x35\xdb\x42\x73\x2e\x20\x52\x16\xc2\xa3\x8c\xbb\xe2\x33\x12\xb3\xc0\xb3\x34\xee\xaa\xe5\x11\x92\x8d\x26\xff\x79\x23\xec\xae\x90\x09\x7a\x20\x50\xac\xf8\x2f\x36\x32\xd2\x66\x01\x29\xb1\x41\x78\x81\xfd\x21\xe6\x97\xa4\x58\x2c\x8c\x33\x0e\x9e\x47\x82\x04\x9d\xd3\x44\xff\xd5\x47\x53\x0a\x61\xe3\xf5\x54\x74\xb3\x65\x43\x19\xe4\xcf\x40\xa8\xae\xad\x2a\xd4\x85\xa8\x08\x82\xc8\xaf\x31\x97\x24\xcd\xb7\x68\x58\x4d\x75\xb7\x92\xaa\x9f\xb9\x6e\x3c\x5d\xbb\x6a\xf4\xd1\x16\x70\x11\x73\xa1\x47\x66\x3d\x85\x96\x26\x88\xd6\x8e\xb9\x10\x04\x56\x0f\xb6\x58\xa9\x49\xae\xc1\xab\x7b\x0a\x93\x53\xa4\x12\xe4\x1d\x29\x9a\xdb\xb0\x94\x3c\xa0\xd8\x6b\x50\xb4\x06\xa1\x49\x75\xf2\xa0\xfb\x39\x8d\xb6\xaa\x86\x96\xe6\x00\x86\xd4\x84\x06\xac\xb0\x0a\x96\xfe\x44\xae\x78\x1b\xbc\xad\xbb\x20\x04\x95\x31\x67\xa1\x17\x9d\x54\x7c\x95\x4f\x88\xde\x98\xc0\x9e\xd7\xa4\xbf\xe8\xa3\xd5\x26\xeb\x58\xf0\x85\x9e\xf3\x0b\xaa\xc0\x23\x62\x7e\xee\xd4\xe5\x68\xfd\x05\xaf\x71\x06\xa1\xbf\xa0\xaa\x53\x00\x03\x81\x44\x18\xdd\x0b\xcc\x82\xa5\xfe\x41\xe1\xc5\xfe\xb0\xff\xb0\xfe\xba\xff\x75\xff\x4d\x07\x96\x55\xc7\xfd\x43\xe1\xc5\x17\x26\xa5\x4e\x12\x18\xa8\xea\xd1\x5c\xc4\x80\x44\x9c\x45\x9b\x6e\x9a\xca\xdc\xb1\xd1\x6d\x1d\x4d\x4e\x87\x25\x51\xe4\x2b\x60\x34\xd9\xb5\x0d\xc5\x44\x48\xce\xb0\x73\xfc\x6a\x3c\x7a\xb7\xe2\xc8\x44\x34\xbd\xc6\x21\x22\x72\x87\xad\x10\xf8\xa9\xd9\xa1\xd9\xe2\xde\xd9\x93\xb7\x05\x58\x01\x87\xfd\x20\xf0\x8a\x23\x0e\xc6\x01\xe0\xef\xfe\x18\x52\x0e\x5b\x37\xaf\x06\xe7\x18\xfd\x85\xc9\xea\x73\x7e\x6f\x41\x10\xf8\xb6\xb3\xb4\x78\x9a\xf1\x09\xfa\x48\x98\x82\x81\x69\xb0\x4a\x9e\xf3\x8e\xf1\x55\x6b\x76\x49\x70\x48\x84\x34\x69\x3f\x41\x94\x84\xc4\x09\x1e\xdb\xd8\xb7\x5b\x48\xf9\xb0\x78\x48\x88\x56\x49\xa4\x68\x1c\x11\xa4\xe8\xca\xdb\xbf\x79\xc4\x14\x49\x0d\xb1\x85\x69\x25\x26\xc5\x0a\x30\xa6\xb2\xc5\xa4\x0b\x48\x85\xbb\x90\x5b\x55\x9a\x13\x92\x8e\xd4\xa5\x85\xac\x79\xe4\x13\x03\xe7\xa3\xeb\xef\x3c\x94\x9d\x8f\xae\xcf\x3c\x65\x7c\xce\xc7\x67\xdf\x0d\xa7\x77\xa3\xf7\x83\x0b\x5f\x7d\xcb\xd1\xfb\xf7\x83\x8b\xd1\xd5\xf0\xce\xbc\xeb\x83\x53\xd1\x0c\xa6\xb2\xd3\x8b\xf9\xf2\xba\xf2\xd3\xca\x2f\x7d\x29\x2e\xe6\xd3\x53\xcf\xb7\x58\x2e\xef\x39\x16\xe1\x69\x6a\xcb\x69\xa5\x21\x9d\x43\x3a\x90\x0d\xad\x10\xc4\x06\x93\x83\x6a\xec\x23\x07\x02\x56\x65\x60\x4c\x6e\x2c\xe1\xeb\x9c\x2a\x2d\xa8\xe4\x42\xfa\x66\x36\x8f\xcb\x28\x55\x47\xc3\x58\xd0\x77\x7d\xe8\xa1\xc2\x4e\x7d\x0c\xd1\xd0\xd4\xbb\x69\x12\x46\x94\xc2\xac\x0b\x23\xca\x60\x36\x8e\x24\x4a\x61\x57\x06\x1b\xe7\x00\x5b\xeb\x77\x0d\xb4\x2a\x4e\xe7\x47\x6e\xde\xab\x86\xd5\x8a\x8b\x35\xb0\x1a\xc7\x8c\xe4\x46\xbc\x7f\xd8\xc8\x0e\xda\xca\xb0\x91\x1c\xca\xa6\x91\x23\x3b\x08\x6a\xfc\x76\x19\x8a\x16\xfe\xba\x1d\x24\x1f\x89\xcf\xc1\x9c\x9f\x8e\x12\xab\x45\x1d\xfc\xbc\x2d\xa1\xf1\x4a\xcc\x6c\x04\x75\xe0\x2b\x62\x5f\x32\xb0\x0d\xb7\x77\xde\x82\x60\xa3\xeb\xd3\x44\x66\x86\xa5\xa4\x0b\x73\x56\xe6\xdf\x33\xd9\x33\x51\x64\x1e\xfa\x4e\xc6\x3c\x0f\x0d\xe4\xd4\xfd\xe0\xd0\xe5\x2e\xdd\x04\x61\xa6\xcf\x72\x8c\xa2\x0e\x96\x92\x2c\x58\xa5\xf9\xc1\x86\xca\x51\x88\x9d\x85\x67\x35\xe3\xac\x08\x84\xcb\x4d\x45\x55\x14\x9c\x03\x05\xb1\x7f\xf1\x12\x33\x12\x9a\x2d\x2d\xd1\x6b\xda\x27\x7d\xa4\x96\x5c\x12\x9b\x15\xa5\x0f\x7c\x50\xc6\xe3\x98\x84\x26\xaf\x4a\x5f\x16\x7c\x41\x82\x8e\x84\x34\xfc\x4f\xcb\x00\x7d\x79\x9a\x63\x46\xd0\x6b\x2e\x25\xd5\x3c\x80\xca\x50\x5a\x5f\x4f\xaf\x1a\x50\x4a\xb8\xd3\x20\x01\xca\x51\xdf\x20\xb8\x68\x57\xa2\xfb\xe3\x8b\xca\xc0\xee\x46\xfd\x98\x6a\x6b\x36\x0c\xa5\x79\x64\x51\xae\xed\x37\x42\x68\xf7\x44\x6a\x86\x28\x1f\x57\x54\xdb\x47\xbc\x00\x60\xbf\x8e\xb1\x0d\x01\xb6\x6e\x02\xbb\x37\xdc\x06\x7d\x5d\x1b\xc3\x7e\xbe\x56\xad\xd9\x4a\xf2\x47\x75\xe6\xc4\x7e\x7d\xf8\x66\x06\xd0\x1f\xc0\x93\x03\xd8\x24\x86\xc7\x82\x0c\xf4\xc9\x14\x45\xde\xf2\x81\x0e\xaa\x95\x68\x10\xd2\x5f\x09\xd0\x08\x57\x7d\xc9\xa5\x2c\x77\x01\xf1\xd3\x5d\x05\x4d\x36\x8d\x58\xcd\xc9\xbd\xc6\x41\xab\x80\xe2\xe5\x22\x47\x2c\x89\x9f\x5f\xf0\x48\xca\x87\xfd\x82\x47\xb6\xc7\x75\xac\xf8\x91\x94\xac\x83\xfd\x18\x3b\x14\xfa\xa2\x45\x0e\xe2\xde\xef\xe0\x94\xda\x59\x52\xa9\x86\xf7\x3b\xbb\xa2\x52\xa6\x1c\xe0\xb5\xd9\xdd\x2f\xc7\x76\xc9\xa4\x54\x1e\x18\x23\x53\x32\x0d\x47\x0b\x93\x49\x69\x4c\x63\x45\xa6\xfa\x8f\xa7\xa7\x8a\x62\x10\x2d\x21\xb5\x1a\x58\x1a\x3d\xe2\xc8\xd8\x63\x04\x60\xac\xd8\x0f\xab\x89\x59\x69\x8e\xf3\x78\x61\x26\x3b\x42\xe4\xd8\x91\x26\x39\x9a\x9b\x44\x9a\x34\x25\x73\xff\x48\x93\x86\x64\x1e\x10\x5d\xb2\x43\xec\xd1\x03\x4c\x76\xa8\x7d\x31\xcf\xdf\xce\xd8\x3e\x9f\x78\x8a\x8c\x29\x7e\x97\xfb\x11\xa4\x9f\xd7\xc1\x7e\xd8\x44\xba\x99\x31\xee\xc5\x62\x76\x6f\xf6\xdc\x44\xea\x1c\x76\x9a\xe6\xbd\xe8\x45\x6c\x9e\x19\xcb\xa3\x3e\x74\x6e\xca\x9c\xb0\x07\x8e\xc7\xe7\x9b\xdd\x9b\xd4\xb4\xdf\xed\x69\x6e\x51\xe7\x1e\x7b\xa5\x94\x79\x07\x28\xf3\x7f\xea\x41\xaa\x30\x8d\xda\x55\xb3\x3c\xa7\x21\x14\x3e\x5b\x11\xcc\xfe\xb9\xc2\xf7\xc1\xa0\x82\x97\x29\x05\xf6\xcf\x3e\x50\x50\x75\x19\x7a\x32\x48\xd7\x3d\xbf\x70\xcb\x49\x13\xcc\x7d\x43\xd7\x10\xa0\x5b\x95\xc9\x1c\x20\x52\xa6\xc5\x64\xb7\x56\x54\xe6\x3c\xf1\xdd\x60\x8a\xd4\x40\xcb\x1b\x27\xe8\x72\x5a\x67\x5a\xf7\x96\x1b\x27\xb6\x4b\xf9\x6c\x43\x21\x2e\xb4\xa7\xe2\xde\x82\xb8\x18\x71\x5f\xe2\x67\x8b\x31\xa4\x0c\xcd\x0f\xa1\x35\xb9\xbb\x34\xe6\xdc\x51\xd5\xd4\xc4\x92\x24\x21\xef\x29\x05\x09\xb2\x3c\x68\x38\xa3\x05\x6b\x5f\x06\xa3\x1a\x97\x94\xcb\x34\x03\x35\x17\x12\x50\x8f\x4d\x7f\xb8\x5b\x9e\xa9\x1a\x19\xa4\xbe\x64\x99\xe3\x82\xaf\x6c\x71\x48\xc8\x07\x86\xbb\x8a\xc2\x0b\xca\x7c\xb7\xf5\x02\xb7\xd3\x74\x40\xcf\xb5\xcf\x7a\x4c\x63\x01\xed\xa8\x1a\x52\x97\x48\x53\xce\x09\xcd\x09\x56\x09\xb8\x54\x8d\x21\x52\x4b\x44\x69\x5b\x8d\x67\x8b\x85\x85\xe0\xed\x4c\xa4\xf9\xda\x7e\xd4\x88\x7a\xc9\x5d\xfc\xf8\x3c\x61\x69\xc5\x26\xa8\x1d\x19\x2c\x4d\x29\x03\xa3\x33\x41\xe6\xba\x5e\x4b\x1a\xaf\xad\x8f\x16\xe5\xbe\xca\x32\x9f\x45\x54\xb9\x55\x6d\xc2\x91\xa6\x9d\xcf\xcd\xbe\x84\x42\x7f\x98\x95\x5c\x16\x77\xf4\x84\xe6\x67\x72\x36\xce\xbc\xb9\xc1\xee\x0d\x98\x2c\xd8\x1a\x45\xdc\xb6\x0c\x81\x5f\x4f\xd9\xeb\xdc\xde\x1e\xb7\x02\x77\xbd\x6d\xe2\xc1\xe7\xfe\xd1\xce\x73\x92\x2a\x37\xf4\x3a\x73\x44\xe5\xd0\x9d\xa5\xbd\xac\x0f\xc1\x0e\x01\x9a\x1f\xbe\x1c\xf6\x3c\x2b\x1a\x1b\x34\x0e\x62\x85\x5e\xdc\x07\xdc\xa6\x8f\xcb\x96\x67\xb8\x8b\x97\x30\xa7\x64\x7f\xd4\x71\xe9\xd9\x38\x54\xbe\x65\xaa\xf5\xfa\xe7\xe6\x94\x96\xff\xb6\xe0\x91\x09\xff\x29\x14\x6c\x6a\x35\x52\x07\x87\xa7\x87\xca\x6e\x9d\xa9\x7d\xc9\x32\x1a\x7b\xa7\x78\x77\x39\x94\xbc\x4c\x39\xdf\x06\xdc\x8c\xd4\x28\xe2\x0f\xe8\xfa\xfa\x5d\x5e\x93\x4b\x7d\x83\x15\xc5\x4c\xd2\x8a\xc2\xee\x10\xe2\x00\xa5\x40\x92\x17\xab\x2f\x46\xc0\xff\x81\x6d\xb9\x60\xc2\xc3\xbe\xfa\xd3\x3f\xbc\xef\x42\x73\x78\xfd\x9f\x0b\x9f\x03\xee\xd2\x36\x4c\x20\x91\x6d\xa3\x60\x82\x9f\xc8\x2a\xa6\xbc\xbb\x0b\xc4\x87\x3b\x8e\xf0\xc6\xf5\x17\x80\x5c\x5e\x85\x55\x92\x56\xa6\xf4\xe0\xfe\x90\xeb\xf7\x00\xf1\x4e\xd0\x87\x95\xd8\x02\x30\x3b\x56\x6f\x0f\x72\x6e\xab\xd6\x45\x5c\xd0\x4f\x04\xf1\x44\xc5\x49\x55\x79\x33\x78\xd3\x56\xfe\x31\xef\x56\xc1\x25\xbf\x92\x20\x31\x51\x0c\x64\xc5\x15\x71\x75\x92\x2b\x10\xa4\x05\xa9\xb2\x42\xc5\xe6\x63\xdf\x5c\x73\xe7\x32\x75\xb1\x12\xa6\xdd\xbe\xa9\xf3\x61\xb3\xa1\x57\x7c\x4d\x9c\xd7\x15\x14\xb1\x58\x90\x35\xe5\x89\x34\xd9\xe3\xd2\x14\xab\xad\x2c\x0d\x72\x95\xf9\x4f\x81\x38\x67\x29\xc3\x65\x95\x41\x10\x41\x82\xae\x12\xbe\xa6\x99\x57\xd6\x64\xe0\xba\x74\x72\x1b\xf9\x25\x48\x60\xa2\x60\x8d\x7f\xbb\x61\x89\x11\x3b\x66\x28\xa8\xe9\xd2\x88\xf1\x5c\x11\x01\xc3\xf1\x6b\x94\x30\x86\xf5\xda\x8e\x60\x2b\xcf\x9d\xc7\xdc\x54\xf0\xcb\x08\xf4\xa2\x0f\x3e\x12\xd1\xa3\x2b\x48\xf0\xe6\x69\x89\x1b\xb3\x75\xb4\xee\x78\x12\xe6\x5e\xe9\x69\x71\xeb\xdb\x41\xa3\xd5\x0a\x9b\xf2\x95\xf0\x05\x0a\x71\x3e\xc4\xaf\xb0\x9d\x7c\x80\x7d\x34\x26\x2b\xc2\x14\x20\x42\x89\x88\x6a\x63\xb7\x6e\xa6\x97\x9a\x08\xf3\x55\x76\x5f\x36\x9f\x78\x70\x80\xb7\xc4\x0c\x3b\xe7\xc5\xf4\x8d\xf5\xdc\xfa\x42\x72\xa3\xda\xfa\xae\x02\x8d\xb7\x3a\xb3\x81\xea\x0b\x5d\xb3\x1d\x0c\x10\x56\x8a\xac\x62\x85\xe6\x98\x46\x24\x74\xf5\x2c\xb9\x78\x7a\xba\x65\xb7\xec\xc6\x14\xa6\x87\x58\x47\xa8\x5f\xdc\x4d\xcb\x9f\x4b\x58\x6a\x78\x8d\x69\x64\x62\xaa\xf5\xf6\xd1\xe2\x7b\x41\xd7\x04\x38\xeb\x3b\x5c\x66\x86\xfd\x6b\xd3\x2c\xcb\x11\xc2\x38\x43\x82\x26\x32\xa0\x8a\x6f\x93\x51\xda\xe8\x6a\xab\x98\x7c\x37\x5f\x73\x9c\x99\x9a\x57\x21\x04\x21\xdb\x7a\x5b\x36\x40\x35\x77\xff\xf4\x9d\x4d\x96\xa4\xb4\x18\xb4\x2d\xd8\xd9\x91\xa6\xc9\x8b\x4c\x56\x28\xe4\x44\x66\xf1\xd1\x50\xfd\x00\xad\x88\xc2\x21\xf6\xc6\x77\x8d\xa2\xdc\xe7\xa4\xb4\x70\x27\x92\xa6\x00\x99\xe2\xdb\x61\xd4\x08\x53\x07\xdf\xf4\x57\xd3\x18\x25\x55\x5c\xf8\x6e\xb6\xc9\x2a\x2e\x14\x80\xd6\xcc\x22\x38\x04\x89\x66\xca\x1c\xfb\x6c\x56\xc0\xe0\xf2\xd2\xcd\x94\xad\x49\x90\xe9\x65\xae\x52\x71\x39\x09\xc3\xab\x0f\xa3\xe9\xf8\xea\xfd\xf0\x6a\x86\x3e\x0c\xa6\xa3\xc1\xb7\x97\x43\x74\x31\x1d\xdf\x4c\x7c\x81\x9a\x17\xd3\x9b\xc9\x64\x84\xce\x47\xf6\xfd\xd1\x25\xfc\x63\xf0\xfe\xdb\xd1\xf0\x6a\xe6\xe9\x3c\x5d\x81\xc6\xb7\x35\x6a\xf0\x78\xf6\x4c\x19\x22\x2f\x8a\x3d\x01\xb7\x2b\xb5\xee\xa2\x4e\x7c\x33\x79\x3d\x7c\x3f\xf1\xc4\xbd\x0e\x57\xb1\x32\x65\xd7\x11\x17\x68\xce\xa3\xd0\x1b\xd0\xe4\x01\x60\x44\x03\xc4\xe9\xc4\x82\xff\xba\x71\xfd\x80\x06\x93\x91\x0b\x85\xf6\x99\xb7\x06\xd6\x00\x60\x7a\xd5\xfd\xba\xb1\x50\x4c\x12\x84\x8b\x69\x86\xe6\x30\x95\xb8\xf7\xb7\x00\x0e\x8e\x65\xfe\x2b\x52\x72\x24\xeb\xdf\x2e\x75\xcf\x66\xfa\x2b\xa3\xbf\x8d\xe5\xcf\x43\xea\x1e\x66\x3f\x4b\x09\x17\xd0\x4c\xf4\x1e\x4a\xc5\x46\xdc\xb7\x26\x1d\x5e\x6e\xde\x4e\x97\x13\x7c\xe3\x51\x4f\x2c\x86\x76\xb6\xbe\xc1\x1e\x86\x3e\x8b\xa8\x68\xe7\xcb\xe9\x43\xf5\x26\xbe\xc1\xf1\xed\x7b\x39\xa2\x9e\xd3\xbc\x37\xf8\x7d\x6c\x7b\x30\xba\x97\x32\xed\x0d\x3e\x0f\xbb\xde\xf6\x98\x0f\x35\xeb\xed\x3f\xec\x67\xb1\xe9\xbd\x08\x1b\x0e\x34\xe9\x1d\x91\x25\xc7\xb7\x52\x95\x30\xe6\x65\xcd\x79\x15\xdc\xf9\x7c\x6c\x79\x29\x97\xf6\x35\xe5\x6d\x8f\xf2\x70\x3b\x9e\x97\xa4\xb6\x66\xbc\x7a\xd2\x0e\xb1\xe1\x0d\x59\x18\x73\xca\x14\x7a\xad\x69\x5b\x2a\x15\x43\x4f\xcc\x2f\x7c\x3a\xac\xff\xfd\x6a\xf0\x21\x89\x05\x09\xb0\xbf\xbf\xb6\xef\xfb\x75\x96\xf1\xfb\xf8\xd8\xff\x80\x9d\x9b\xe0\x01\x4b\x5b\x70\x5b\x79\xf3\x98\x7d\x79\xbb\x05\x40\x2c\x2b\xad\x8c\x5d\x0d\x35\x6f\xab\x25\xb8\xcf\xda\xbd\x58\x1a\x97\xa7\xb9\x72\x71\x33\x3a\xef\x9c\xfa\xaa\xba\x99\xa6\x13\x40\x4f\xba\x91\xaa\x77\x84\x3d\x78\x1c\xd8\x0a\xc2\x40\x9d\x30\x5d\x83\x40\x77\xaf\x21\x21\x11\x58\xb3\x23\xc2\x50\x14\xb2\x10\x28\xe6\x72\x12\xab\xb0\x05\x2e\xd1\x3d\xab\x72\x47\x23\x52\x3b\x70\x0f\x56\x73\x8f\x71\xa0\xaa\xc7\x99\x62\xb6\xe3\x3c\x75\xbd\x32\xfc\xf1\x5c\xcd\x87\x9c\x07\xd6\x84\x06\x65\x2b\x9a\xd7\x36\x2d\x69\xc4\x00\xb5\x8a\xeb\x1a\x92\x6c\xe1\xaf\x2c\xa2\x5e\x87\xb3\xb6\x58\xfa\x36\xb2\xb2\x9a\x06\x0d\x7a\xa0\xd4\xf1\xdf\x13\x53\xd3\xaf\x6f\x82\xe2\x21\xd0\x7e\xdf\x4e\xda\x00\xa8\xb0\x34\x8e\xdb\xec\xc5\x3d\x46\xda\x21\xcd\x02\xbb\x4b\x10\x34\x21\xb2\x3c\xaa\xbb\x49\x07\x80\x7a\x42\x3d\xf1\xdd\x0d\xca\xfe\x37\x27\xf2\xf9\x28\x6c\x4e\x5e\x7e\xcd\x58\x95\xe3\x96\xbd\x77\xa9\xde\xe6\x42\x05\xe5\x06\xd2\x0b\x16\xe4\xd2\x08\xa2\x12\xc1\x48\xd8\x47\x13\x53\x59\x43\xdf\xae\x3a\xc1\x1c\x05\x89\x88\x3a\xe6\x0b\x77\x65\xb6\xed\xad\x9c\x05\x6f\xaf\x75\xe9\xf5\x0c\x36\xde\x73\x61\x13\x97\xe0\x7e\x34\x18\xb5\xe6\xb8\x94\x64\x8a\x4d\x25\x4d\x69\xa7\x3c\x38\x0b\xb2\xb9\xf7\x96\x9e\xdd\x22\x87\x46\xce\x50\x5a\x38\x07\x0a\x80\x1a\xe1\x97\x31\x67\x92\x1c\x4e\x80\x04\x25\xa4\x29\x7e\xe2\xd3\x34\x9b\xee\xaa\xc3\x96\x84\x17\x7d\xab\x15\xd1\x80\x88\x66\xab\x61\x4e\x19\x68\x40\x99\x53\x43\xdf\x90\xf7\x91\x87\xb0\x14\x88\x08\xb0\xe9\x4e\x57\xb8\xe3\x66\x4e\x09\xda\x58\x1a\xee\x52\x66\x72\x65\xf7\xd0\x5d\x72\x84\x01\x4b\x76\xe8\x69\x4c\xcc\xf1\x8e\x8f\x1c\x55\x47\x38\x3a\x1a\xd0\xf7\x3c\xc4\x35\xa6\xac\xa6\x5d\x58\x35\x05\xd5\x0d\xc0\x8a\x88\xb6\xef\x18\x99\x8a\xd0\x24\x44\xb8\x92\x8e\xca\x7b\x87\x0f\xcf\x01\x24\x3f\x23\x95\xcd\x08\x2b\xcb\x47\x38\x90\x38\x4f\x8d\xb8\x86\x74\x71\xf1\x80\x05\x90\xa6\x85\x5d\x83\x4b\x23\x65\x3c\x52\x82\x9b\xd6\x29\xd5\xb7\xa4\x85\x29\x33\x0e\x81\x35\x01\x0f\x9b\xdf\xcc\x3a\x38\xf8\x25\xa1\x92\xe6\xae\x09\xa6\x4d\xe7\xf5\xf5\xbb\xe6\x28\x29\x9b\x73\xaf\x19\x61\xe7\x00\xb4\x6d\xa2\x4d\x70\xcb\x56\xb9\x77\x8d\xb6\x09\xd6\x7c\x5f\x52\x99\xac\x56\xd0\xa0\x71\x2f\x0a\x90\xa0\x24\xa6\x11\x5f\xf0\x42\x3d\xaf\x66\x83\x77\xbd\xe3\xa1\xcd\xbf\x89\x48\x31\x2e\xe8\xc7\xc7\xfe\x5b\x1a\x91\x09\x56\xcb\xa6\x8b\x6d\x9b\x33\x1d\x62\x3b\xff\x53\xd7\x72\x1f\x85\x38\xf3\x3d\x17\x31\x34\xa0\x15\xee\x9c\x9a\xd9\x47\x99\x28\x99\x98\x5b\x6c\x13\xcc\x7a\x69\x29\xba\xb2\xf9\x59\x6d\xd6\xe7\xf6\x5c\x65\x3d\x64\x71\xa2\xb8\xc8\xe4\xc4\x8a\x33\x9e\x48\xde\x6c\xd6\xec\x1c\xb9\x00\x00\x33\x71\x82\xc4\x7c\x3f\xb2\xb6\x5c\xfd\x59\x8b\xfd\xbc\xdb\xbf\x19\x65\xa6\x2e\x95\xe9\xbe\x49\x4c\x3f\xc8\x34\x59\xa4\xe5\x5d\x74\x7b\x63\x47\x9d\xe4\x3e\x8d\x12\x12\x44\x4b\x49\xe0\x9f\x16\x2d\xcd\x2e\xa2\x50\x1d\x04\x47\xf4\x93\xa6\x74\x3a\x39\x73\x86\xe8\xe6\xc2\x06\xaa\x80\x98\x60\xb7\x92\x2c\xaf\xe9\xe4\xac\x9a\x4b\x2b\x2c\xe4\x12\x83\x06\xfa\xaf\xd7\x63\x5f\xe5\xa9\x4c\x80\xda\xf7\xb3\x0f\x2a\x60\xf3\x98\xb0\x4c\x82\x42\x8b\x69\x60\x7c\x63\x76\xc7\x44\xa8\x44\x60\x97\x54\x6c\x3a\x44\xc3\x20\x6b\x45\xa9\xc3\xdd\xa8\x3f\x5d\x25\xe6\xf6\xcd\xe9\x0c\x05\x31\x16\xb2\x31\x5b\x31\xc3\x11\x95\xb4\x96\xa5\x0e\xa8\x2d\xc1\xd6\x18\xae\x93\x36\x59\x69\xb5\x26\x58\xdc\x9d\x6c\x8f\xeb\x76\x4c\x84\x96\x6c\xed\xad\xa9\x1d\x22\x49\x90\xb4\xb6\xa6\xc6\x82\x3b\xab\x32\x8e\x8d\x45\x51\x22\xca\xc0\xa6\x6f\xe4\x79\xa7\xc5\x8e\xa7\x88\x44\xf8\x9e\x8b\x74\x4b\xd1\x74\x15\x44\x3b\xcd\xb5\x7d\x28\x5a\x52\xfb\x1c\xe4\xed\x41\x4f\x26\xbd\xb5\x10\x21\xa2\xf9\x76\xdd\xa1\xc9\x88\x6f\xdb\x44\x1a\x20\x55\x90\x20\x08\x0e\x4f\x1e\x04\xb5\x3a\x00\x9b\xd3\x85\x17\x75\x1d\x9c\x5d\xab\xfa\x1e\x5a\x6a\x44\x54\x51\x04\xa4\xc6\xf5\x66\xca\xa9\x23\xa4\x66\x13\x55\x22\xce\xd9\x33\xda\xa0\x82\xf9\x3b\x10\x1f\x0a\xdb\xa3\x6c\xbb\x64\x2a\x70\x37\x5d\x34\x73\x41\x20\xac\xf7\xb0\x25\x93\x42\xe1\x59\xba\x7b\x8b\x73\x2a\xd7\x69\x96\xe7\xd2\xdd\x01\x58\xdd\x00\x56\x7c\x9d\xd3\x9f\x5c\x5f\xf4\xbd\x46\xc1\xf0\xea\x78\x86\x77\x3d\x1b\xae\x0d\xf7\x71\x8d\xef\xf6\x3c\x00\xfd\xb9\xcd\x3a\x4d\xcf\x81\xda\xa5\x99\xc2\x4f\xb5\x64\xad\x20\x17\x97\x68\x0b\x61\x9b\x43\x4c\x4d\xec\x3d\x68\xcc\x56\x3f\x2e\x2c\xd6\xa6\x1c\x90\x3c\x5a\xa7\xd5\x28\xf6\x91\x4e\x82\x4a\x1e\x25\x3b\xd5\x29\x1a\xcb\x26\x08\x90\xdf\xba\xf5\xb5\x57\x89\x41\x69\xc7\xeb\x35\x2d\xc9\xaa\x68\xce\x0c\x25\x28\x01\x6e\x48\x85\x83\x8f\x0d\x6e\xf1\x82\x04\x49\x4c\x04\x77\x16\x04\xfb\x59\x0b\x24\xed\x4e\xdb\x1c\x3e\xa8\x8e\x67\xf0\x35\x1c\x5e\xc2\x98\xab\x49\x0f\xdf\x9c\x45\x3c\x09\xcf\x38\x53\x82\x47\x11\x11\xef\x89\x94\x78\xe1\xaf\xf8\x51\x05\x5b\xe2\x75\xfe\xa8\x6b\x35\x26\x89\xa3\x35\x56\x20\xba\x0a\x36\xb5\xa6\xe3\x82\x06\xdd\x47\xf4\xf3\xed\x0a\xd1\x63\xc8\x9a\x94\x4a\x93\x42\x74\x07\xe1\xe7\x77\x6a\x13\x93\x76\x36\xfe\x22\x71\xb4\x04\x5c\x9d\xa1\xdf\xf8\x99\xb7\x76\x5c\xa3\x5e\xe3\xbb\x7b\x2e\xe7\x76\xde\xdd\x77\x4d\xfa\x8a\x6f\x93\x74\x94\x39\xdc\x25\xec\x28\x53\xe8\x74\x42\xc5\x0f\x89\x15\x90\x81\xa0\x46\xd5\x60\xad\x63\x05\x3e\xd1\x38\xde\x9a\xb8\xe6\x7e\x7a\xbe\x8a\x85\xbb\xb5\x36\xcc\x3c\x33\x58\x4b\xcd\xc7\x88\x4a\x9b\x29\x1f\x63\x69\x2b\xfe\x63\x69\x02\x79\xc5\x02\x12\x74\x4c\xe4\xd6\x84\x4b\xa8\x3b\xda\x41\xf7\x89\xca\xff\x53\x9f\x8e\x54\x10\x89\x30\x33\xc9\x71\x44\xf4\x11\x7a\xcb\x05\x5a\x69\xd2\xe5\x86\x29\xfc\x2b\x5a\x92\x28\xee\x42\xe3\xcc\x9f\x83\xb9\x6b\x7a\x9a\xad\x92\xde\xf2\x67\x6f\xd8\x50\x87\x18\x26\x94\xd3\xbf\xa6\x44\x9f\xc9\x02\xcb\x15\x44\xef\x40\xbc\x1a\x16\x0b\x6e\x16\x0d\xc4\x8a\x69\x62\x81\x3d\x9d\x2e\x5a\xe1\xfc\xbf\xed\x51\x1c\x12\xd3\x66\x7b\xa5\x65\xb2\x1e\x84\xe0\x7d\x64\x6a\xa0\x47\x8a\x08\xaa\xd1\x63\x29\xa9\x54\x84\x7d\xc2\x48\x42\x15\x54\x49\x99\xd2\x0f\xbb\x68\x4d\x42\x5a\x31\x2e\xff\x9c\xd4\x1c\x4d\x95\x47\xd0\x29\xba\xe2\xa6\xc0\x3f\x14\x79\xaf\xc9\x60\x74\x00\x19\x91\x52\x0f\x55\x73\x49\x09\xbe\xc6\x96\x47\x8d\x97\xd1\x29\xe8\x3f\x21\xe2\x89\x42\x0f\xd8\xec\x24\x40\x2d\x37\x2c\x40\x7f\xe1\xf7\x70\x7d\x1d\x0a\x01\xc9\x5c\x1d\xbd\xcb\xa0\xda\xb5\xaf\xe1\x81\x23\x4c\x43\xd5\x30\x73\x32\x52\x29\x22\xb1\x35\x29\xae\xe2\x88\xa8\x9c\x20\x88\xf0\x9a\x0b\x8e\xb0\xa4\x2c\x10\x9c\xf1\x22\xd6\x4a\xfa\x1b\x6d\xf5\xda\x8d\x6c\xb2\x2d\x25\xa4\x5b\x82\x7a\x68\x52\x21\x09\x52\x10\x2f\x43\x42\x48\xda\x20\x36\xe0\xae\x2a\x2f\xc8\x66\x38\xa6\x3a\x21\x8e\xa2\x8e\xfb\x0e\x80\x84\x14\x85\xa0\x7f\x56\x4e\xce\xaf\xb1\xb1\x47\xe6\xad\xee\x26\x40\x1e\x1b\xd3\x37\x9f\xa3\x8f\x64\x73\xb2\xc6\x51\x42\x50\x8c\xa9\x90\xb7\xcc\xda\xb6\x02\x68\x85\x0a\x9b\x3f\xbd\xe6\x32\x82\xc5\xe9\x2d\xd3\x7c\xfd\x7e\x15\x5d\x33\x1a\xc7\x44\x69\xde\xfa\xb6\x69\x31\xc5\x91\xac\x49\xda\x3f\x9f\xa1\xbc\x99\x3c\x8e\x29\xb1\x05\xfd\x34\x31\x5c\x10\x4b\x07\x54\xe0\xcf\x08\x00\x31\xc7\x4b\x49\x68\xcc\x01\x59\x60\x81\x8f\xf4\xad\x2e\x21\x21\x59\xeb\x15\xb5\x4d\x7d\x0d\xd6\xac\xa2\x97\x43\x29\x89\x63\x3a\xfa\xdf\xb7\xc9\x9b\x37\x5f\x13\x04\xcc\xef\x82\x08\xa5\x0a\x82\x26\xa1\x44\xd5\x6c\x13\x13\x7f\x74\x54\x06\xb9\xc8\x55\xc8\x8b\xa1\xa0\x7c\xd9\xfa\x88\x39\x34\x5c\x10\x10\x76\x44\x14\x30\xd4\x8e\x61\x22\x78\x4c\x84\xda\x6c\x8d\xe5\x9e\xf3\x88\x60\x6f\x8f\x9a\xdd\x0f\xb7\x16\x80\xa1\xc8\x81\xf1\xa5\x09\x36\x20\xc4\x2d\x65\x7b\xd4\x48\x1f\x45\xd7\x90\xf1\xbb\xd6\xa2\x3d\x58\x92\x12\x80\x92\xe2\xe2\xca\x04\xf1\x4f\x8d\xf8\xa7\x87\x13\x28\x95\xa0\x6c\xe1\xa5\xaf\x96\x63\x19\x61\x06\xd2\x92\xec\x4f\x13\x4b\x56\xf7\x44\xec\xae\x3b\xf7\x7a\xed\xfa\xab\x26\xd5\x1c\x9c\xf9\xe5\xb6\x0d\xb8\x94\xf0\xb7\x83\xd1\xe5\xf0\xdc\x97\x3f\x3d\xbe\x42\xd3\xd1\xcd\xf5\xd9\x68\xe6\x69\x50\xf1\x76\x38\x98\xdd\x4c\x87\xe8\xed\xe5\xe0\xc2\x97\xae\x37\xba\x3a\x1f\x9d\x0d\x66\xe3\xe9\x08\xbd\xbd\xb9\xfa\x61\x34\xbe\xf2\x64\x3c\x16\x80\xf9\xdc\xa4\x25\xd0\x3c\x8e\xd0\xb7\x90\xfa\x8b\x4c\x75\x76\xe7\x82\x17\xdc\xe4\xfd\x26\xb2\xc2\xa4\x95\xcf\xcb\xb5\x75\x97\x84\xb9\x17\x27\x3c\xe2\x68\xcb\xf5\x9e\x35\xda\xf2\xe9\x0a\x96\x92\x39\x51\xc1\xb2\xa0\x99\xcb\x3d\xe2\x44\x35\x19\xd9\xd5\xb5\xac\x1f\x4c\x83\x08\xd1\x6d\x8a\x4c\x4c\x89\x74\x99\x11\x69\x9e\x61\x21\xae\xa0\xdf\xd6\xa4\xb1\x4d\xaa\x09\x32\xa9\x4f\x78\xe8\xd7\x19\x3c\x3c\xe4\x1f\x81\x9b\x86\xc4\x3d\x38\x48\xd6\x84\x29\xb9\xe7\xdd\x6f\xcb\x16\x01\xb0\x68\x93\x3b\xdf\x36\x15\x5c\x2c\x7a\x26\x38\x53\xcf\x24\x2c\x76\xc3\xd8\x29\x8f\xc8\x8c\xdb\xda\x1b\x5b\x5c\xde\x97\x5b\xb9\x4c\xb7\xb2\x90\x14\x1b\xa3\x6f\xf6\x4c\x43\x2a\x9a\x0e\xf2\x08\x8c\x8e\x76\xd2\xb4\xf6\x61\x38\xd8\xfa\x84\xa9\x01\x2b\x0f\xde\x20\x50\xf8\x15\x36\xb2\x81\xdb\x7a\x23\x98\x9a\x1f\x07\xd2\x11\xb9\x1a\x1e\xad\xd1\x43\x2c\x51\xc9\x02\x84\x20\xa0\x17\x58\x82\x69\xe0\xd1\xf6\xda\x6b\x46\x40\xf3\x31\xe6\x45\xcd\x1e\x21\x67\xbb\x83\x00\xba\xbd\x40\xab\x08\x53\xdc\x5e\x79\xb5\xde\xc3\x03\x1c\x21\x45\x56\x31\x17\x58\x6c\xd0\x27\x6a\x6c\x2b\x69\x4e\x60\x5d\x4b\xa1\x86\x98\xfe\x22\xb9\x49\xfc\x76\xbd\x96\xee\x5c\xbd\x88\x2a\xaf\x70\xfe\x58\xd5\x80\xcc\x99\x0a\xb0\x6c\xba\x6f\x76\x01\x2b\x02\x6e\x48\x96\xbb\xb6\x74\xb5\x62\x6e\x0b\x7c\xc4\x58\x48\x52\xda\x2e\xd1\x7b\xfc\x17\x3b\x6b\x66\x97\xb1\xac\x92\x07\xee\x9a\xb4\x28\xa7\x23\xd8\x66\x66\x02\xac\x43\xa5\x09\x56\x35\xaa\x81\xe2\x68\x85\x3f\x12\xe7\x31\x32\x75\x84\x0c\x91\xb5\x1b\x24\xcf\x56\x41\x18\x24\x1a\x9b\x6a\x22\xf0\x28\x2b\x1f\x52\x6f\x05\xce\x53\x03\x21\x21\x55\x81\x0e\xa5\xd5\x4b\x68\x54\x88\x26\xd1\x0c\xf4\x87\x3f\x64\xe8\x4c\x69\x1f\xe3\xa8\x6b\xbe\x88\x5c\x6d\x9f\xc2\xca\x01\x20\x75\xf8\x1e\x60\xb9\xda\x64\x75\x48\x1a\x7f\xa9\xa6\xb2\x79\xfa\xd7\x69\x49\x2b\x33\x88\x7c\xb6\xfb\xb3\xf7\x71\xd8\xa1\xb7\x9c\x65\x36\x95\xfe\xf1\xb1\x6f\xff\x7c\x1b\xe1\xc5\xd3\x13\xb2\x75\x35\xbd\x69\x1b\x6f\x5d\x96\xfb\xce\x97\x59\x9e\x83\xcf\x01\xee\x45\x6a\x92\xfd\xf7\xc0\xd9\x0c\xa1\x2f\xf4\xc6\xc2\xf5\x84\xd7\xbc\xa5\x91\x69\x63\x64\x6c\x80\x20\x83\xa3\x4d\xd7\x6c\x68\xa9\xc7\x01\xe5\x05\x60\x9b\xfc\x4a\xa5\x92\x08\x2b\x5b\x4d\x08\x3a\xce\x3c\x3e\xf6\xf5\x8f\x71\x55\x08\xa4\xc5\xc1\x52\x7b\x21\x60\xd1\xe2\x8c\x74\xe1\x86\x13\x24\x02\x2b\x0a\xd7\x6c\x6a\x4d\xe1\x44\x52\xbd\x1f\x18\x89\xb4\x78\x85\x9c\xd7\x42\xd3\xc4\x22\xde\xf2\xa1\x71\x61\xca\xe2\x10\x45\xd0\xeb\xd0\x94\xe1\x8a\x05\x87\xca\x4a\x5c\x18\xff\xbc\x58\x01\x99\xbe\x2a\x50\x6f\xb9\xf8\x84\x51\x21\x4d\xe9\xb5\x11\xa5\xd6\xea\xab\x81\x10\xb1\xc2\x9e\x72\x50\x39\x1a\xf4\x85\xe4\x81\xaa\x25\x4f\x54\x01\x75\x73\xcc\x12\x6c\xc7\x0e\x63\x15\x42\x5b\x84\xc9\x54\x5c\x00\xa1\xdc\x1a\xf3\x56\x25\xa7\x62\x45\xa4\xc6\x84\xac\x28\xb4\xf6\xdc\x67\xe8\xf0\x69\xdb\x81\xb7\xa9\x4f\x6c\xd0\xb4\x2a\x4d\x6c\x90\x58\x5f\xb5\x93\xbc\x6e\x64\x66\x69\x55\x22\xf3\xba\xa6\xdd\x10\x61\x51\x09\xd2\x68\xac\x09\xbb\xb7\x51\xf0\x7b\x4c\x6e\xae\x6f\x91\x23\xc7\xd4\xcb\x6b\xce\xf1\x8b\xe1\x6c\x36\xba\xba\x40\xd7\xb3\xc1\x74\xe6\x35\xc3\x8c\xae\x66\xd3\xf1\xf9\x4d\x85\xe5\x64\x0b\x8e\xdf\x76\x92\x01\xf2\x18\x4d\x2e\x2e\xc7\xdf\x0e\x2e\xd1\x78\x32\x1b\x8d\xfd\xed\x43\xc7\x13\x0d\x63\x84\xcc\xdb\xbe\x3e\xa2\x17\x44\x21\x9c\x85\x6b\xa4\x3d\x95\x21\x13\x4a\x2e\x51\x10\x69\xd5\xc8\x27\x74\xc7\x4a\x51\xc2\x4c\xa1\x95\xf4\x53\x17\x9e\x01\xfa\xbd\x05\xa0\x61\xf9\x09\xd0\xb2\x77\xd7\xb1\x6b\x0c\xf0\x7a\xf5\x55\x35\xd2\x72\x24\xd0\xc8\xd9\x4e\x77\x21\x41\xf4\x48\x03\xc7\xcd\x85\x0b\xc8\x8f\x22\x17\x0f\x6c\x6b\x33\xae\xb0\xf8\x48\x54\x1c\xe1\x80\xf8\xd5\x86\x69\x1a\x46\x4d\xd3\x0a\x1c\xae\x8f\x45\x88\xa3\x3c\x90\xfa\x0a\x07\x17\x59\x72\x80\x7c\x9e\x8e\x54\xd3\x62\x44\x7c\xc1\xb4\xff\xa2\x1d\xa8\xdc\x50\x73\x26\xb7\x7e\xdf\x9b\x84\x38\xcd\x07\xab\x97\x36\x5a\x4e\xd1\xf9\x12\x10\x1d\x42\x67\x51\x2b\x63\xef\x5e\x7c\x4c\xcd\x67\xb5\xfc\x3b\x84\x4f\x24\x57\x5d\x22\xad\xc8\x7a\xa0\x66\xbc\xc7\x82\x71\x77\x28\x5a\x28\x52\xb1\xeb\x24\x3d\xb2\x4e\xbc\x17\xc7\xc0\xf0\xf7\x1c\xac\x6a\xb2\x4c\x33\x73\xe1\xef\xc5\x9d\xba\x8d\x60\xa2\xb6\x7f\x97\x95\x64\x23\xa8\x5f\x90\x31\x8e\x2f\xa8\xf9\xfa\xb1\x75\x90\xe1\x48\x41\x69\x10\xd3\xcb\xf0\xaa\x48\xc3\xee\x01\x39\x37\x21\x2b\x29\x15\x4d\x46\x52\x0e\xa5\xc1\xb6\xf7\x9f\xb1\xfe\x30\x2c\x87\x9a\xb2\x39\x3f\xb4\xac\xd3\xb4\x22\x8b\xeb\x79\x6a\x34\xed\x50\x7f\xbc\x9e\x62\x75\x83\xa1\xc7\xef\x32\xb6\x3b\x9a\xba\x7e\x4a\xdb\xb3\xd4\xd0\x84\x52\x3b\x51\xad\xbb\x2b\xed\x4e\x63\xcb\x86\x45\x6e\xec\xbf\x43\xa7\xc6\x02\x37\x3e\x97\x2e\x8d\x39\x7e\xc8\x17\x1b\xbc\x8d\x68\xa1\xbf\xc7\x40\x7d\x35\x07\x9b\x9c\xe1\xbb\x9e\xa8\x03\x8f\x5c\x63\xb0\x90\x59\x07\xf2\x34\xbd\x92\x12\x89\xfa\xfd\x7e\x03\x71\x4c\x73\xf9\x99\xe9\x8d\x23\x4b\xd3\xcc\x93\x53\x23\x9b\x0b\xd4\xe4\x20\xf8\xa2\x98\x3c\x44\x44\xc5\x6f\x2b\x51\x96\xf6\x9d\x03\xb9\x74\x9c\xe3\xc0\x04\x1f\x1e\xad\x13\x67\x81\xec\x36\xa5\x2b\xb7\x68\xd4\xdf\x93\x83\x28\x28\xb8\x33\x77\x08\x41\x8d\xef\x4e\xdb\x8e\xcc\x03\x17\xb4\x6d\x65\x50\x22\x1a\x5a\xf7\x2a\x2d\x05\xd9\x7e\x88\xa9\x8f\xf4\x38\x23\x2b\x55\x5d\x1a\xaa\x77\xed\x49\xae\xd7\x66\x5a\x5c\x05\x8e\x35\xda\x97\x18\xd6\x81\x73\x95\xb8\x9b\x0c\xb4\x73\x29\xea\x6a\xc8\x76\x1b\x34\x0f\x2f\xf4\xb3\xab\x76\xbb\x57\x90\x05\x8f\x48\x85\x76\xe6\xc3\xd0\x7c\x7b\x17\x69\x96\x7b\x28\x93\xf9\xad\x9d\xa9\x8d\x6d\x55\xc4\xb4\x0f\xad\xa9\xe0\xba\xa7\xc0\xcb\x97\x5d\xdd\xe9\x37\xbb\x8f\xf4\xdb\x22\x4b\xcf\x74\xd6\x82\xf6\x5b\xf8\x4b\x2f\x54\x16\x96\xc5\x48\xa5\xff\xde\xff\xd2\x51\x3a\x20\xbb\x1e\x4a\x08\x21\xbe\xd5\x9e\x27\xe5\x65\xf8\xb1\x5b\x6a\xf7\x33\x62\x54\xd7\x53\xa3\xfa\xef\x81\x85\x2f\xb4\x90\xbc\x0c\x7a\x81\xb1\xbf\xc8\x10\x8f\x3c\x8e\x17\x5e\xd6\x2f\xbf\x48\x3f\xa3\x0d\xfd\xf9\xec\xdc\x97\xda\xa2\xcf\xb8\x15\xd3\x4c\xf8\x52\x6d\xba\xa1\x55\x75\xff\xc6\xef\xed\x29\x36\x7b\x79\xef\xbb\x35\x2d\x6b\xfc\x7e\x98\x1a\x58\xe8\x7e\x62\xaf\x85\xb0\x1b\x1a\xb4\x61\x38\x82\x85\x4b\x26\x91\xa7\x4f\x4a\xa3\x4e\x0c\x07\x4e\x47\xab\x41\xbf\xe8\x00\xdb\x0e\x65\xd7\xfb\xfa\x6c\x31\x5f\x85\xf5\xe8\xf3\xda\xbe\x74\xab\xfe\x1d\x76\xbc\xe8\xe8\x7f\xb7\xd1\xc2\x70\x8a\x96\x9b\xe7\xb3\x0d\xb9\x62\xa4\x3c\x8f\xeb\x20\x39\x9e\x91\x7f\xb0\x9d\x28\x23\xee\x60\x8a\xf2\x8b\xc7\x18\xdc\xeb\x4c\xfb\x4d\x7d\x9b\xa6\x96\x6b\xc9\x6a\x29\xc1\x54\xbb\x34\x6a\x25\xbb\xc2\xc1\x47\xd3\x31\x42\xff\x65\xbb\x45\x64\x9b\x22\x55\x2d\x9e\xc5\xeb\xcd\xcb\xf0\xfb\xf7\x49\x29\x31\x47\xf6\x6d\x9b\xb2\x1a\x2f\xc7\x84\xb4\x10\xc7\xef\x3c\x6e\x85\xe5\xc7\x63\xf9\xac\x1b\x4a\xc9\x6a\x82\x4c\x4a\x45\xc9\x26\x2b\x62\x2f\x3a\xbb\x4a\xf0\xfb\x03\x9d\x08\xa3\x2e\x92\x2d\x97\x54\xe1\x99\x86\x1d\xf4\xa5\xce\xb6\xd2\xfd\xb8\xff\x38\x5b\xb1\xf3\x90\x11\xed\x7b\xc4\x44\xfc\x1e\x47\x88\x43\xd2\x86\xb7\x7d\x69\xf9\xb7\xef\x86\x83\xcb\xd9\xbb\xbb\xb3\x77\xc3\xb3\xef\xee\x66\xdf\x4f\x86\x9e\xaf\x67\xa3\xc9\xf8\xee\x6c\x7c\x35\x9b\x8e\x2f\x2f\xc7\x77\xa3\xab\xd9\xf0\x62\x3a\x9a\xfd\xf6\xff\x36\x04\x8b\x56\x89\x54\xe8\x9e\xa0\xdb\x57\x31\x17\xea\xf6\x55\x57\xff\x65\x0a\xc5\xe9\x7f\x70\x81\x6e\x5f\x2d\x95\x8a\x6f\x5f\xb5\xa3\x7f\x7c\x3d\x6b\xfd\xc1\xd5\xe0\xbd\x6f\x9c\x57\xe3\xf7\x43\x80\x59\xfe\xf1\x6c\x36\x31\x35\xed\xa0\x83\x6b\x10\x25\x21\x28\x6f\xa6\x2a\xa8\xa9\x04\x70\xcf\xc3\x0d\x8c\xa7\xf3\x2f\x1d\x34\xe7\x51\xc4\x1f\x48\x88\xee\x37\x08\x9b\xa0\x10\xa8\xda\xa0\x38\xd4\x3c\x83\x0f\xd3\x1a\x79\x1e\x92\xce\xb1\xa2\xc8\x62\x76\x48\x6d\xba\x7c\xc0\x45\xcc\xb7\x0b\x1b\x22\x1e\xc7\x89\x20\x80\x1f\xb2\x23\xf4\x4a\x84\x74\x67\x28\xfc\x60\x6a\xfb\x61\x14\x24\x14\x45\x64\xb1\xd0\xb0\x4c\x75\xbd\x8a\x31\xaf\x88\x5a\xf2\x10\xbd\xbe\x18\xce\xba\x93\xf1\xf5\xac\x3b\xb9\x99\x75\xcf\x87\x97\xc3\xd9\xb0\x4b\x54\xe0\x0b\xc1\x7e\x4f\x14\x0f\xb9\x21\xbe\xfc\xdb\x20\xf0\x44\x5f\xbf\xdb\x8e\x4e\xf1\xad\xeb\xdd\xa8\x0d\x0a\xfb\xd5\x00\x38\xd3\x8f\x4d\x22\xb2\x07\x0f\x97\x0a\xa6\xc4\x74\x17\x5e\x6d\x7a\x32\xb9\x37\x31\x74\xbe\x51\x5d\x69\x36\x2e\xb9\x54\xc5\xb6\xc9\xc5\x4f\xab\x91\x39\x5b\x3e\x70\xc6\x34\xd3\x7e\x6d\x6b\xa9\xd8\x30\xd5\x25\xd6\x7f\xda\x60\xbe\x7a\x4a\x5c\x1e\x13\xb4\xca\x36\xfc\x76\x0b\xc2\x05\xad\xda\x28\xbe\x80\xb3\x90\xae\xa9\xa4\x75\x34\x26\xb6\x22\x4c\xc0\x57\xf7\x94\x65\x91\xe0\xe8\x7c\xfc\x7e\x30\xba\x82\xec\x19\x88\xea\xdf\x98\xf5\xef\x5a\x82\xdf\xd3\x8a\xbe\xe3\x8e\x5e\xd7\x80\x10\xf6\x91\x43\x61\x84\x62\xc0\x99\x46\x31\xba\x1a\x8d\x81\xf2\x34\x75\xc0\x26\xdc\xc0\x10\x43\x9c\x35\x09\x7f\xa6\x71\x98\x18\xed\xe7\x1f\x09\x85\xad\x68\x83\xba\xa1\x0f\x73\x3e\x9c\xbb\xc9\xe0\x34\x6a\x68\x6e\x6e\x87\x90\xad\xaa\x36\xd4\xc3\x2a\x31\x60\xb6\x48\xd4\xf0\xca\xe9\x18\x5d\x5d\xcf\x06\x97\x97\xc3\x73\x34\xb9\xbc\xb9\x18\x5d\xa1\xb3\xf1\xfb\xf7\x83\xab\x73\x5f\x4a\xfe\xd9\x58\xff\x3a\x72\x6f\xdb\xcf\x07\xbe\x2c\x7f\x2f\x78\x9f\x30\xf0\xc2\xf7\x44\x8a\xc3\x0b\x57\x67\xc3\xbb\xf7\xc3\xf7\xe3\xe9\xf7\x3e\x31\xa6\x7f\x1c\x0d\xee\x46\xfa\xe5\x1f\x06\x1e\x50\x0b\xc6\x05\x29\x56\x0a\xf5\x85\xc3\xeb\x57\x71\xb1\x0e\xa8\x07\x28\x43\x7f\xa6\x2c\xe4\x0f\x12\x9d\xd9\x4a\xe6\x97\x94\x99\xee\x36\x92\xb2\x45\x44\x7a\x70\xa7\x0a\xbb\x88\xc8\x00\xc7\x24\x84\xac\xb7\x53\xd4\x79\xbc\xbd\xbd\x7d\xb5\xc6\x11\x0d\xf5\x1f\xa7\xfa\x7f\xfe\x22\x39\xd3\xff\xf5\x96\x71\xb9\xb2\x07\xc9\x02\x67\x35\xcd\xb9\x23\xa0\x9b\xae\x15\x40\x01\x8b\x1b\xca\x90\x50\xb6\xe0\x11\x46\x6b\x2a\x16\x3c\x22\x7a\xbd\x98\x95\x6f\x08\xaa\x25\xa5\x6e\xdc\x13\xfe\x40\xc4\xf5\x92\x44\x11\x8c\x3a\xe4\xc9\xbd\x77\xd4\xb7\xaf\xaa\x70\x79\x55\x8b\x52\x6c\x65\xe3\x4d\xc7\x08\x6d\xfc\x63\x4a\xb6\x86\x5a\x8b\xdf\x33\x58\xa3\x48\xa4\xd5\x4f\x6d\x3d\x66\xa7\x59\xf0\x44\xc5\x89\x37\x2d\x11\x3e\xa6\x85\x6a\xcc\xa6\xcc\xa4\xad\x7e\x6a\xf4\x4e\x03\xc2\x87\x9e\x0b\x41\x02\x85\x6e\x24\x5e\xf8\xd6\xec\x8d\xeb\x9b\xeb\x1a\xa9\x13\xe5\x6b\x53\xb6\x05\xb0\x8f\x06\x2c\xab\x27\x46\x25\x5a\x51\xd7\xb0\x0f\xd2\xba\xec\xcb\xd1\x06\x11\x16\x44\x5c\x92\xb0\x7f\xcb\xbc\xd7\xf4\x52\x3a\xfa\xe8\x86\xe5\xea\x7e\x09\x2a\x93\x48\x61\xbd\xb7\x02\x48\x7b\x36\x6f\x0b\x1c\x04\x4b\x9a\x40\x9d\x30\xf8\x0e\x52\x68\x88\xc1\xd6\x6c\x24\x67\x69\x3b\x01\x46\xd0\x3c\xc2\x0b\x89\x5e\x93\x5f\x03\x12\x2b\xd4\x9b\x7f\x81\x02\xcc\xf4\x88\xee\x6d\xe2\x01\x09\xd1\xc3\x92\x30\x14\x27\xa6\x1e\xec\xca\xb5\xb1\x82\xfc\x07\x13\x24\x55\x14\x18\xbe\x5b\x85\x67\xd4\x57\xa6\x5f\x62\x2e\x31\xd5\xc4\x1a\x0b\xd3\x0d\x98\xb2\x10\x32\xee\x04\x4d\x75\xc4\xe2\xd6\x7e\x4d\x82\x00\x0a\xea\x69\xe2\x7f\x49\xe0\x99\x84\x0e\x36\x4a\xd0\xfb\x84\xca\x80\x33\x8e\x62\xfa\xdb\x7f\x6d\x15\x49\x02\x75\xb2\x20\xbf\x3c\x77\x93\x1d\x0e\xd6\xdf\x0c\xcc\x5d\x80\x71\x46\x6e\x5f\xdd\xde\xb2\xdb\xb6\x4b\x01\xae\x2a\x1f\x86\xd3\xd1\xdb\xd1\xd9\x20\x77\x53\x29\x14\xae\xc9\x90\x6d\xe3\x6a\x36\x8c\xa9\x2b\x7c\xd7\xc1\x71\xdc\x83\xa3\x98\xb0\x75\xf6\x07\x04\x20\x77\xf4\xd5\xd1\xad\x7c\xd9\x7e\x51\x4f\x5d\xa6\x62\x47\x6b\xee\xbd\x42\x20\xb9\x79\xe2\x12\x14\x4c\x04\x73\xfa\xef\x4e\xb1\x12\x1e\x6d\xb1\xc2\x2b\x06\xf6\x62\xc3\x39\x0a\xf9\x69\x6b\x38\x97\xc3\x75\x5c\xf2\x6d\x8f\xc4\x0c\xf8\xe1\x24\x0f\x26\x13\x74\x3d\x9c\x7e\x18\x9d\x0d\xef\x9c\x62\x72\x2c\x9a\x35\x6c\xab\xbe\xdc\x9d\x0f\x2f\xef\x00\xcf\x0f\xa3\xf1\x71\xc8\xbe\xd3\x37\x6a\xf0\xd2\x5a\x9d\xfa\x48\x54\xeb\xdb\xf8\xdd\x60\x32\xb9\x1c\x9d\x0d\x20\x79\x10\x91\x54\xa1\x3e\x32\xe1\xbb\x72\xe9\x19\xc7\xe0\x15\x51\x47\x1e\xd4\x73\xad\xa6\xb2\x31\x3d\xfb\xea\xca\x48\x3f\x1a\xd5\xc5\x7a\xa1\xc7\x20\xed\xa8\x4c\x2d\x92\xb7\x0f\xf7\xbe\xbd\x19\x5d\x9e\x4f\x06\x67\xdf\x01\xa1\x5d\x74\x35\xfc\xff\xa8\x7b\xbf\xe6\x36\x72\x2c\x5f\xf0\x7d\x3f\x05\xb6\xef\x46\xc8\x1d\x57\x64\xdb\x35\x3d\x37\x36\xdc\x0f\x1d\x2c\x89\x76\x71\x4a\x16\xd5\x14\xe5\x9e\xaa\x72\x85\x06\x62\x42\x24\xae\x93\x89\x6c\x00\x49\x97\x5a\xd7\xef\xfb\x31\xfa\xb1\x36\x62\x9f\xe6\x6d\x9f\xfd\xc5\x6e\xe0\x1c\x00\x89\x4c\x26\xf2\x0f\x45\xb9\x6b\x7a\x22\xa6\x2c\x92\x38\x38\xf8\x7f\x70\x70\xce\xef\xf7\xd7\xdb\xea\x67\x47\x9d\x12\x57\x93\xb3\xb3\xef\xa6\xcb\xe5\xfc\xf6\x7c\x86\xf5\x9c\x92\xcb\x9b\xf9\xfb\xf9\x6d\xe4\xeb\x23\x4c\x10\xb7\xe3\x3c\xe3\x74\x77\x5b\x4e\x39\xc9\x8f\x38\xc1\x83\x1d\x33\x3b\xc6\x34\xaa\xec\x8f\x45\xf6\xb4\xf9\x73\x31\xf9\x76\x7a\x71\x4a\xae\x16\xf3\xf7\xb3\xf3\xe9\x02\x7a\x79\x39\xff\x7e\x7a\xb4\x1d\x7e\xba\x9c\xc1\x94\x98\x04\x95\x30\x5b\xc5\xd3\xfb\x76\x4f\xfd\xe7\x53\xfa\xe9\xca\xce\x17\x6f\x2b\x47\xe8\x11\x14\x35\x97\x00\xaf\x13\x54\xe0\xe7\xc7\x31\x34\x3c\x4e\x6f\x56\xd4\x3a\x4e\x3f\xda\xdd\xee\x2f\x37\xf3\xe5\xe4\xa8\x1b\xdc\x7c\xf1\x76\x72\x39\xfb\xf1\x47\xdc\xa0\x5d\x0d\x4f\xd7\x79\x31\xbd\x9a\x97\xc7\xf6\xcd\xe2\xe2\xa8\x5a\x1b\xe9\xd7\xb3\xe5\x7c\xf1\x03\x61\x20\xfc\xe9\x0a\x5f\x4f\xcf\x6e\x16\xb3\xe5\x0f\xb7\x6f\x17\xf3\x9b\x2b\xd0\x7a\xbe\x78\x7b\x6a\x1f\xa1\x68\x4a\xae\xaf\x26\xc7\xdb\x80\xdf\x2e\x6e\xae\xae\xe6\xb7\xd7\xb3\xb3\x9b\xc5\xf4\xc7\x1f\x27\x84\x61\x6d\xf7\x74\x25\x52\x4d\x35\xdf\xe1\x55\xde\xd4\x7a\x9c\x5d\xb9\xa1\x7d\x57\x93\xe5\x77\xb7\xcb\xf9\xed\xbf\x5d\xcf\x2f\x6f\x17\x37\x17\xd3\xeb\xdb\x37\xb3\x8b\xe7\x6c\xe3\xd5\x74\x71\x36\x5f\x5c\xcf\x6f\x27\x50\x93\x39\x35\x17\xd3\xb7\xf3\x8b\xe9\xad\xf5\x48\x1d\xb7\x95\xa7\x7e\x81\x3f\xeb\xe0\x9d\xda\x15\x7f\xc4\xb1\xc2\x63\xff\xdb\xc5\xfc\xfb\xe9\x02\x8d\x9c\xea\x67\xc7\x6a\x0a\x4a\x73\xa7\xbf\xb3\x6d\xaa\x9f\x3e\x43\x83\x6e\xae\xa7\x0b\xdc\xd1\xae\x26\xd7\xd7\x7f\x9d\x2f\xce\x4f\x8f\xb9\x47\xec\xb5\x6a\xfe\x6e\x7a\xb3\x9c\x5e\x2e\xf7\x2a\x3c\x5e\xd3\xbc\x89\xe6\x3e\xf8\x7e\xfa\xc3\xb1\xda\xd3\x78\x13\x39\xfb\x6e\x36\x79\x3f\x3d\xa6\xe1\xb6\x6f\x6d\x66\x49\x65\xee\x1d\xdb\x0c\x6d\x6c\x17\x83\x49\xe8\xdf\x26\x8e\x7d\xfd\x6a\x6c\xe4\xd7\x1a\x33\xf6\x1c\xa3\x86\x5b\xdb\xd1\xad\x18\xbb\x9b\x1d\xd3\x90\x29\x55\x3d\xaa\x21\xe3\x35\x3d\x96\xf1\x02\x7a\x8e\x4a\xa7\x03\xfc\x09\xc2\x47\xc7\xbe\x61\x8e\xbc\xf2\xf0\x17\x56\x72\xbc\x83\xc4\x68\x8e\x66\x18\xac\xe3\xf2\xcf\x63\x5a\x63\x56\xdd\xe0\x5e\xfc\x1c\x0d\x38\xa2\x4f\xa2\x49\xbd\x83\x6e\x93\xe5\x39\x06\xd6\xdb\x62\x7e\x3c\xeb\x29\x3c\xb3\x50\xf8\xcd\xfc\xe2\x18\x5d\x5a\xd3\x19\x7a\xf8\x99\x55\xc7\xfe\x3e\x5e\x13\x8e\xe3\x57\x78\xaa\x2b\x81\xe6\xf9\x6d\x46\xb7\xec\xd4\x06\xb5\xc0\x1f\xc7\xea\xc3\x4c\x6c\xd9\x6d\xf8\xa0\x70\x8a\x1f\x61\xcc\x8b\x38\x46\x27\x1e\x41\xcb\x27\x29\xe0\x81\xc4\x6c\x2f\x02\x84\xa7\xd9\x6f\x73\xcb\xc6\x74\xd4\xbe\xf4\x5c\x5b\x09\x87\x8a\x4f\x4b\x28\x4f\x06\x35\xba\x08\x97\xa7\xf6\x2b\x44\xa1\x98\x66\xe0\xac\x38\x56\x23\x40\x2c\x23\xc7\x1b\x7f\x91\x02\xb7\x0c\x86\xef\x19\x7d\x33\xf6\x29\xf8\xe0\x38\x5a\xf3\x94\xec\xd8\x6a\xb5\xe1\x02\x63\xf5\x2a\x4f\x64\xf0\x75\x56\x88\x5d\xd3\x97\xc7\x69\xa0\x90\x6b\x82\xb3\xcb\xb4\xce\xfd\xf5\x5c\xad\xab\x05\xc3\xd6\xdb\x57\xfb\xfa\x08\x2d\x94\xeb\x67\xde\x81\xaa\x2a\x1f\x7d\x0f\xb2\x19\x33\xa7\x95\xa4\xa8\xd3\x7d\x88\x9b\x23\x35\xc9\xa5\x3c\x9d\xee\x67\x45\x9d\x92\x46\x90\x9b\x23\x34\x11\x83\xf0\x6b\x03\xf3\xb4\x49\x07\xb3\x09\x05\x3f\xdd\x86\xd9\xbd\x72\xf7\x3b\xf3\x4f\xef\xfe\x35\xff\xbe\x98\x5c\x92\xdd\x37\xe5\xd7\xdf\xe0\x47\x47\x1a\x8d\xe1\x15\x3f\x7d\x34\x1e\x1f\xc7\x13\xa7\x7a\x34\x86\xbf\x4b\xf1\x9a\x90\x7e\x2a\x2c\x37\x0c\xc2\x66\x4c\x23\x20\xe2\x26\x64\x1a\x74\xdb\x2e\xfe\xcc\x6f\xc2\x2b\x9a\x91\x3b\x46\x54\x61\x63\x6f\xaa\x4f\x2a\x44\x48\x0c\xfb\x2c\x43\x6e\xc6\x0f\xdb\xb4\x35\xec\x66\x56\x23\xeb\x86\x26\x7e\xf9\xd5\x4c\x26\x2d\x3c\x24\x76\x06\xb1\x35\x09\x37\xfa\x0b\xf9\x80\x7d\x00\x00\xd9\xf7\x42\x66\x5c\xad\xb8\x0f\xbe\xae\xec\xd9\xc2\x7c\xdc\x15\xff\x57\xe9\x97\x58\xd8\x63\xe3\x10\xc4\x42\x1e\x6b\x22\x7d\xf0\x3a\xc4\x1e\xfb\xde\xfa\x8f\x60\xd8\x30\xad\xe4\x3f\x80\x3a\xca\x02\x71\xef\x78\xc2\x62\xb1\xb1\x5d\xf5\x3a\x12\x87\x2d\xd5\xaf\x4b\x06\xce\x7f\xbb\x9e\x5f\xbe\xe1\x29\x70\x79\x7e\xd0\x1f\xf4\x87\xec\x3d\x4d\x79\x62\x7f\x8d\x20\xe6\x74\x9b\x03\xfd\xfa\x4f\x1f\x32\x42\x1e\xcd\xff\x23\x98\x46\xa0\xc5\x4a\xa4\x1f\x7e\xf7\x9a\x7c\xf8\x9d\x5e\xe5\x1f\x7e\x77\xea\xbe\xb3\xdc\x79\x46\x35\xfc\xfa\xd5\xcb\xf1\x37\x7f\xfc\xe3\xf8\xd5\xf8\xd5\xff\x1d\xfc\x2c\x17\x52\x2b\xfc\xc1\xbf\xfc\xcb\xcb\xff\xf1\xe1\x77\xe6\x8b\xcf\x1f\xb2\x9f\xe3\x50\xcc\x5b\x33\xf4\xa0\x5c\xa5\xd3\xdb\x1a\x34\xc5\x50\x71\xb3\x91\x42\x83\xa0\x34\x04\x0b\x8a\xaf\xdb\xa8\x8e\x01\x2a\x70\x62\xbc\xaf\x40\x31\x56\xe6\x82\x0f\xda\x7a\x7c\x1c\x3b\x0a\x32\x1b\x65\x7f\xd8\x9c\xb0\x55\xd2\x3c\x1f\xb9\x63\x6c\xc4\xb3\x84\xfd\x12\xc4\xd4\x65\x6c\x4d\x35\xdf\xc5\x22\x14\x7b\x56\xc1\x33\xe8\x71\x8b\xf6\x58\xe6\x17\x0c\x94\x8a\x20\xed\x67\x17\x33\x0b\x33\x16\x0d\xcf\x44\x20\x76\x8f\x27\x76\x76\x31\x6b\x15\x19\xd0\xb7\x3f\x3e\x8e\xaf\xe0\x5f\x57\x80\x94\xdf\x42\xed\x10\x45\x7b\xaf\x89\xe8\xce\x25\x72\xe0\x74\xb1\x9a\xf0\xd4\x6f\x2f\x4b\xde\xb1\xad\x90\x0f\xd1\x9c\x90\xad\x90\x9c\x3a\x03\xa2\x43\x94\x9b\x67\xd4\xac\xb2\x91\x9b\x01\x8e\x00\x30\x52\xc5\x45\x00\xc1\xd7\xc0\x55\x67\x49\x5e\x61\xdd\x5a\x89\xd1\xd8\x0f\x54\x63\x60\x52\xd5\xcc\x4e\x31\x78\xa5\xf1\x51\xbd\x01\x61\x7c\x34\x21\xd1\xc6\xec\x42\xc1\xcc\x6d\x0e\x34\x20\x85\x6f\xaf\x70\x61\x69\x8f\xcc\x7f\xe3\xa0\x4a\xc0\x4d\xe4\xa5\x8b\xa0\x40\xab\xf0\xeb\xeb\x0b\x72\xc6\xa4\xf6\x3b\xc2\xd5\xcc\x6c\x6d\xcb\xd9\xd5\x6b\x72\xa3\x18\x39\x59\xdd\x13\x9a\x73\x32\x1a\xa9\x8f\x3c\x1f\x29\x95\x8e\x50\x7d\x0d\x54\xc1\xda\x98\x87\x99\xe6\x59\xc1\xec\x39\x9c\x19\x8b\x95\xad\x0a\xc9\xfa\xd0\xa5\x0e\x53\x0e\xa8\x60\x81\xd5\x68\xc9\xf3\x2e\x56\x74\x53\xd0\x91\x53\x18\x41\x41\xdf\xe4\xac\x4d\x5c\xab\x4a\xc6\x2e\x31\x5b\xf0\x6b\x9b\xc7\x79\x25\xa4\x36\x42\x26\xf6\xf3\x70\x6e\x03\x45\x63\x44\x3b\x53\x8e\x92\x5a\xb4\xa4\x9b\x1a\x75\xe1\x17\x14\x64\xd7\x7e\xdf\xb8\x0c\x3a\xb5\xf7\x4c\xb2\xc0\x4d\xb0\x2e\x90\x0d\x22\xd6\x87\xee\x37\x31\x12\x99\x52\xe7\x8e\x8a\x81\x4b\xf8\x90\x55\xe3\xf8\x80\xe9\x21\x4b\xa7\x04\x28\x89\xd2\x33\x2d\x23\xe8\x23\xe5\x74\x89\x91\x2d\xb9\x4a\x2a\x1d\xe9\xcd\x28\x98\xb3\xa3\x15\xc4\x93\x8f\xc9\x55\xca\xa8\x62\xee\x4b\x42\x49\xb0\x97\x88\xbb\xff\x69\x4e\x32\x21\xd1\xfb\xa3\x85\x4b\x2a\x34\x2b\x8b\x72\x20\x9b\x6c\x28\x10\x3b\x37\x6a\x63\x16\xf4\x1a\x18\xae\x9a\x3a\x40\x53\x17\x47\xce\xc8\x68\x35\x26\x6f\x02\xab\x56\xac\xd7\x10\x40\x0e\xb5\xd9\x35\x03\x76\xad\x77\x17\x39\x63\xc7\xa8\xc8\x32\x78\xa5\x6f\x2e\x17\x3d\x91\xb0\x3d\x3e\x4d\x12\xf2\xd4\x25\xcb\x05\x9a\x22\x27\x64\xe4\x0e\x4c\xf8\x49\x22\x18\x5a\xa9\xc0\x79\xd3\x96\x53\xe9\xdb\x0b\x01\xed\xfb\x52\x31\x2b\xb2\x72\x9e\x66\x90\xec\xc1\x95\x16\x59\xc7\xfa\x49\xb8\xfa\x88\x78\x09\xb0\x44\xcf\xb9\xfa\x68\x71\x18\x86\x11\xb8\xfd\xc5\xe1\x39\x24\x5c\xad\x44\x7d\xe5\xf7\x10\xfb\x44\x2d\x8f\xa7\x58\x97\x2e\x66\xfa\x47\xd7\x5e\x7b\x51\xb4\xe5\x46\x60\xcc\x8d\x10\xb9\x9b\x4a\xba\x05\x4d\x36\x7b\x79\xa0\x91\x6d\xd6\x94\x60\x5a\x8a\x06\x69\xe1\x0a\x6f\x14\xd9\xaa\x9d\xf7\xcb\xac\x44\x91\xe1\x71\xe0\x0d\x8b\x33\xf3\x91\xe9\xa3\x59\xe5\x47\xc1\xd9\x80\xee\xdd\x4e\x9b\xe7\x12\x4d\x9b\x84\x5b\xc3\x6a\x4f\xe9\x86\x2a\x53\x67\x10\x05\xa5\x6a\x47\x85\x35\x95\xac\x12\x1d\x73\xde\x37\x74\x0b\x06\x20\x49\xf9\x96\x63\x7b\xd1\x22\xbc\x30\x7f\xf7\x98\x5a\xf0\x3b\xc0\x09\xd9\x56\x8d\xc5\x7a\x9b\x62\x62\x7b\x69\x59\xe9\x95\xca\x10\x0c\xee\xfc\x59\x5d\x3d\xba\x27\xbc\xa7\x4d\x3a\xac\xa3\xbb\x9b\x90\x32\xa5\x88\xde\xd0\x2c\xfc\xa5\x9d\x01\xc7\x6e\x0c\xcf\xee\x99\xe4\xe6\x94\xa0\x4d\xb5\xb5\xb6\x08\xae\xc2\xbd\x32\xe1\xfd\x95\xdb\x6f\xdd\xed\x92\xbd\xb3\x87\x94\x1c\xf1\x64\x4b\x63\xd4\x3b\xef\x42\x57\x8f\x3d\x98\xc8\x54\x02\x47\xde\x0e\x78\xcd\x8a\xac\x47\x82\xae\xaf\xbd\x61\x25\x1c\xbe\x0c\xf6\xa7\xff\xc0\xb9\x7f\xf4\x85\x79\x8c\x05\x19\x51\x6a\xe8\x49\xd9\x53\xb9\x03\x4f\x4a\xb0\xd8\x91\x5a\xb6\xd0\xf6\x92\x55\x68\x8b\xb8\xd2\x6a\xb9\x07\x66\x55\x25\x4b\xbf\x26\xa2\xb5\x76\xcd\xb7\x0c\x78\xca\xfc\xb1\xb6\xc4\x4f\x7a\x0c\x5a\x79\xb0\x39\x29\xb5\x7e\x69\x12\xd5\xaa\x4d\xc9\xae\x71\xb2\x47\x0f\x7f\x82\x60\xc1\xc0\x5a\xff\x9e\xa6\x61\x6f\x47\x35\x7c\x8f\xfc\x1b\xb5\x6b\xd7\x50\xd9\x31\x95\xcd\xa4\xa0\x19\x6c\x04\x74\xcd\x10\xe9\xe5\x14\x3e\x61\x48\xd6\x7a\x6f\x49\x18\x11\x77\xc7\x32\x24\x02\xb4\x4d\xd4\x59\x0f\x62\x29\x61\x64\xcd\x94\x06\x5b\x38\x40\x7a\x61\x8e\xf5\x91\x18\xe1\x96\xc2\x11\x9a\x54\x64\x24\x61\x9a\xc9\x2d\xcf\xa8\x76\x64\x11\x71\xb7\x7c\x44\x75\xc5\x52\x73\x0b\x30\x5f\xac\x36\x34\x5b\xe3\x3b\x90\x6d\x93\x62\x9a\xa8\x9c\x21\xb9\x1c\x2c\x29\x75\x50\x2b\xb0\x1a\xa3\xba\xf9\xc1\x56\x24\x70\x41\x26\x1c\xde\x82\x4c\x1b\x81\x87\x56\x9b\x4f\xa0\x16\x04\x66\xce\x99\xa2\xb1\xf6\xfc\x9b\xb8\x23\x2f\x1e\x1f\xc7\xff\x26\xee\xde\xde\xcc\xce\x3f\x7f\xfe\x3d\xb9\x07\x5e\x54\xbb\x38\xdb\xef\xe8\xbd\x65\xe6\x02\x9d\x68\x6e\xb2\x6f\xa8\x22\x77\x8c\x65\x44\x32\xba\xda\xb0\x04\x1f\x0d\xcc\xb4\xc2\x5b\xd8\x96\x3e\x10\xa5\x79\x9a\x9a\xe3\x52\x16\x19\x32\xf6\x63\xe6\xf5\xd9\x1b\x7f\xd4\x8e\xc9\x0f\xa2\x90\xe6\x13\x2c\x2a\x24\x94\xdc\xd0\x9d\xe9\x1d\xc9\x42\x6c\xc2\x61\x50\x4b\x17\x54\x69\x32\x77\xfa\xc4\x3c\xfc\xa9\xe6\x5b\x8a\x75\xb7\x1c\x3b\x20\xab\xc8\x53\x41\x13\x96\x0c\x73\x5a\x5d\x70\xa5\x81\xb3\xc1\x91\xb3\x99\x0e\xd0\x80\x4e\x84\x8b\x21\x22\x6d\x9a\xb2\x6c\x85\x4c\x0d\xc6\xdc\xd8\xa7\x5c\xf3\xa4\x28\xe6\xb0\x46\xcf\x75\x5b\x0b\xbc\x1a\x3b\xca\x53\x58\x9f\xf6\x76\x67\x5f\x82\x62\xb4\x7d\x81\x1e\x9c\xb8\x14\x67\x98\x95\x9e\xca\x81\xab\x5c\x64\xdc\xac\xcd\x81\x75\x43\x7f\x58\xf4\x0e\x96\x84\x7c\x10\x42\x9a\xaf\xa0\x4c\x92\x84\x5f\xf1\x28\xa9\x6b\x4d\xd1\x06\xed\x00\xdb\x27\xa8\x24\x24\x4f\xb5\xe0\x3e\x66\x7c\xf6\xb9\x31\xe8\x7a\xcd\x8b\x2c\x86\xe4\xe3\x9b\x57\x72\xd2\xf5\x54\x71\x8f\x90\xae\xa3\x02\x21\xd7\x3d\x44\xc3\x74\xa9\xf2\x8f\x74\xc8\xb5\x30\xfe\x76\x72\xae\x10\x26\xcb\xa2\x90\x59\x44\x1d\xf7\x61\x08\x17\xdc\x53\x15\x04\xf3\xaf\x4c\x59\xd1\x08\xdb\xe5\x1e\xf8\x3a\xb4\xad\x81\xde\xf7\xeb\xeb\x06\x94\xfb\xce\x6a\xaa\xcf\xff\x4f\x59\xbc\xe5\x2d\x30\x78\xd5\x7f\xc2\x22\x2e\x41\x1a\x29\x40\xab\xf5\xe9\x83\x12\x7d\x91\x67\xc6\xd8\xae\x76\x7e\x57\x85\x08\x1c\xf8\x82\xda\x07\x7f\xae\x08\x98\xee\x23\x33\x6d\x11\x63\x81\xa8\x07\xa5\xd9\xf6\xd4\x62\x69\x81\xcf\x2c\x73\x07\x42\xb6\xf6\x5f\xeb\x0d\xd5\xf0\xa6\x2c\x0b\x78\x72\x8e\xa2\x30\xed\x6b\x0f\x55\xbf\x28\x32\x87\xac\xf8\xe5\x57\x8f\x97\x80\xd2\x8d\x4a\x2b\xa1\xb4\x2c\xb8\x16\x56\x13\x05\x7e\x33\xc5\xcd\xf7\xd4\xe9\xb3\x13\xa7\xc0\xad\x9c\x17\x5f\xfe\xb3\x24\x3b\xaf\x6d\xb3\x11\x24\x27\xdf\x29\x66\x32\xe0\xf6\x64\xb7\xd2\xe1\xbb\x54\xb0\xc9\x04\x3b\x6a\xcf\xfd\xc6\xc3\x2a\x59\x13\xab\x9c\x18\xe2\xfe\xe9\x0b\xd6\x18\x56\xf5\x99\x93\x1c\xbe\x6a\x3d\x12\x20\x40\xaf\xf4\x9f\xb2\x71\x98\xbf\xb6\x0a\xfd\x41\x23\xee\xcd\xe5\x39\x5b\xfb\xaa\x03\x88\xde\x76\x15\x5c\x61\xb8\xfb\x54\xcf\x90\x50\x46\x1f\x25\x70\x27\x95\x4c\x89\x42\x7a\xb8\xd7\xce\xda\x3d\xaa\xab\xe4\x4a\x48\xc5\x1c\xa8\xa8\xdb\x30\x7a\x9d\xba\x5e\x07\x78\xa6\x1d\x5c\x75\xe1\x22\x20\xfa\x55\x17\x90\xa4\x06\x3b\x65\xe7\x68\xb7\x52\xa1\xf6\xdf\x19\x3d\x39\x19\xdd\xdb\xbc\x3b\x5b\x1c\x30\x8d\x15\x59\x23\xd5\x58\x4b\xc5\x15\x96\xa5\xf6\xaa\xea\x44\x4a\x2d\x52\xeb\xe4\x2e\xb6\x53\xcd\x4d\x44\xdc\xef\x7d\x0b\x77\x68\x6b\x66\x07\x8f\x4c\x1d\xea\x34\xd3\xbf\x60\xe4\x8d\x62\x92\x43\xf7\x37\xfd\x04\xae\xdc\x35\xab\x94\x67\x66\x2b\x5d\x15\x5d\xe3\x14\x6b\x98\xa6\x6b\x04\xb0\xd6\x0e\xaa\xf5\x68\xad\xe0\x19\xb9\xa7\x0a\x5a\x93\x4b\x66\xae\xfb\x96\xdd\x7c\xbf\x19\xad\x8a\x57\x28\x04\x14\x82\x9c\x76\x2f\x27\x7b\xa7\xf3\x20\x52\x0d\x54\x01\x7d\x6a\x2d\xb1\xfe\xbb\xba\xa3\x0f\xa0\x7f\x8f\x1a\x2d\x56\x7f\x57\x6d\xfb\x88\xfc\x2d\xb2\x11\x8a\xb7\x8b\xa9\x3b\x2e\xc0\xcc\x10\x1b\x98\xc1\x12\x82\x51\x18\x2a\x1e\xc3\x01\x4a\x56\xa9\xe7\x1c\x89\xbf\xe6\xdd\x71\x1b\x17\x62\x45\x53\xef\xa4\xfa\x44\x65\x12\xdc\x1a\xcc\x95\x94\x2c\x37\x5c\xc1\x1b\x8b\x8b\x93\x4b\xd8\x3d\xcf\x58\x82\xb7\x57\x70\x11\x0b\x73\xcf\x8d\xe8\x77\xed\xa4\xe1\xd9\xca\x33\x91\x6a\xe9\xb0\x47\xf1\xc9\x39\x35\x3a\xb0\x31\xf9\x4b\x01\xa8\x93\xc1\xab\xa1\xb5\x5e\xc0\x4b\x0c\xd5\x72\x6d\x61\xa5\x12\xe4\x59\xdf\x89\x54\xd3\x78\xd3\x3e\xc2\xba\xf3\xd7\x16\x62\x4a\x4b\x60\x1f\x26\x45\x9e\x50\x1d\xb5\x62\xbe\x4d\xc5\xca\x0c\x7d\xea\xef\x30\xa2\x24\xd5\x06\xc0\xc3\x6d\xce\x12\x6e\xf1\xb2\x8c\x39\x23\x00\x34\x28\x6e\xd3\x08\xc4\x0a\x26\xd1\x88\x9f\x33\x91\xa6\x6c\x4d\xd1\x1e\x88\xed\x2e\x4e\x8a\x88\xe2\xba\x5d\xaf\xfa\xc9\x59\xb3\x84\x30\x29\x85\x8c\xc6\xa8\x80\x7f\xcc\x58\x70\x6b\xae\xb4\xb1\x29\x23\x81\x81\x46\x18\xf8\x3e\x0a\x1d\x9f\xa6\xe7\x80\x09\x96\x31\xa5\x60\x9d\xf6\x98\x97\xe2\x23\xe0\x2b\xe7\xe0\xcf\x33\x26\x30\x86\x22\x9d\xec\xd3\x32\x56\x1f\x60\xa3\xaf\xfd\x2b\x26\x57\xf0\xf0\x58\x17\x58\xa7\x6a\xac\xc9\x6b\xd4\xef\xdd\xe4\x72\xf6\x66\x7a\xbd\xbc\xbd\x9a\x2c\xbf\x8b\x39\x50\x5d\x1a\xb6\xfb\x71\x44\x54\x0f\x08\xc9\x48\x49\xfa\x91\x11\x0a\x33\x62\xe4\x83\x02\xf6\xa3\xba\xbd\x89\xa4\x05\x39\x7b\x03\x57\x92\x58\x27\xb1\x0c\x16\x56\x33\x15\xa9\x7b\xdc\x4f\x68\x9a\x9e\x58\x1c\xab\xd2\x6c\x62\xc6\x0a\xae\x1d\x98\x67\x6f\x5a\x14\x87\xa5\x09\x3b\xeb\x89\xaa\x44\xa6\x2b\x22\xb2\xf4\x81\xec\xb8\xe2\x46\xeb\x4f\x5c\x6f\x2a\xf6\x96\x69\x64\xcb\xdd\x14\x1b\xe1\x1c\x8e\x21\x25\x87\x69\x8d\xdd\xcb\x41\xb8\x31\x77\x15\x04\x35\x0d\xbe\xa9\xbe\x0b\xd1\xf7\xc8\x4a\x32\x0a\x6a\x15\x70\xf0\xdd\x17\x69\xfa\x40\xa8\x8e\x3d\x4a\xbf\xa9\xc4\x06\x43\xe1\x1a\xb6\xa0\x59\x20\xb1\x8a\x73\x42\xc9\xf2\xac\x1d\xa8\x75\x82\x0f\x4d\xb0\x47\xe2\xab\xc1\xf2\x2c\x02\xc5\x0a\x02\xb3\x6e\xec\xd7\x7d\x91\x71\x78\xd7\x3d\x99\xaf\x3f\x60\x70\x29\x21\x67\x6f\x30\xcf\x70\x4b\xf3\x11\x3e\x89\x78\x38\x24\x9b\x58\xfb\xd3\x68\xb4\x71\x30\xb5\x0e\x75\xfb\x67\xf3\x29\xc4\xae\x98\xf5\xf6\x33\x42\xee\x11\x42\x6a\xbd\x31\xa4\x9a\x17\xa3\x11\x1c\x7b\x57\xf3\xc5\x92\xfc\x2f\x32\x1a\x49\x9a\x25\x62\x0b\x1f\xfe\x1e\x2b\x98\xfe\xfb\xe4\xdd\xd5\xc5\xf4\xda\x8a\xdd\x97\xb9\x7d\x18\xd1\x3c\x77\x01\xc6\xe3\x95\xd8\x92\xd6\xff\xfd\xb7\xf0\xa7\x03\x84\x06\x3d\xb2\x7d\x80\x14\xa5\x8a\x50\xfc\x6c\x7c\x2c\xd9\xb6\xa7\xef\x85\x68\x94\xfd\x87\x7b\x21\x06\xc9\x87\x6e\xfe\xd7\x97\x2f\x5f\x76\x74\xc8\x6b\xf3\x9b\x41\xf6\x92\x19\x7e\x74\x12\x08\x77\x37\x33\x9b\x9c\x36\x26\x4b\xdc\xf6\x72\x33\x99\xa7\x3e\xcf\x0b\x04\x50\x02\x48\xec\xd5\x18\xb8\x58\xc5\xbf\x90\x4f\x94\x6b\x78\x2d\xf0\xbc\x0b\x7e\xcb\x55\x9a\x4a\x5d\xe4\xa7\x66\x19\x6f\x79\x56\xc4\x0d\x8d\x25\xdb\xe6\x82\x6c\xa9\x52\x7c\x0b\x5b\x0f\xd5\x9a\x29\x17\x40\x45\x77\x3b\x6e\xd9\xb7\x82\x1d\xb9\x1a\x20\x57\x56\x12\x31\x3d\xf6\x75\x2d\x0d\x22\x7b\x25\x79\xaa\xa2\xb4\x7a\xe9\x80\xc8\xa7\x3d\xbb\x69\xa0\xa2\x5a\x10\x33\x18\x77\x29\x57\x1b\x42\x09\x58\x0f\x2b\xa3\x4d\xe8\x80\x83\x69\x2b\x99\x12\x69\xe1\xbe\x32\xb7\x2f\x11\x77\xf7\x47\xab\xe6\xdb\x62\x4b\xe8\x16\xa2\x68\xc4\xbd\x7b\x5c\x46\x23\xde\x47\x34\x96\x21\x39\x34\xc3\x37\x1c\x84\x7f\x7f\xf5\xf2\x9b\x3f\xbe\x3b\x25\xaf\xde\x9e\x92\x57\x2f\xdf\xc6\x1c\x7e\x7f\x29\x68\xa6\xb9\xfe\xf2\x0f\xdb\x8f\x34\x7c\x74\xf6\xde\x3a\xba\xc3\x08\x8f\xf8\x90\x57\xf1\xe3\xeb\x75\x7f\x8d\x06\x8e\xc9\xe8\x95\xb1\x99\x24\x53\x2c\xd3\x90\x2f\x53\x64\xf0\x9e\xc7\x12\x5b\x47\xcc\x12\xfc\x2a\x9d\x80\xfa\xd1\xdc\x2a\x88\xa7\xd6\xdf\x7c\xcd\x3c\x05\x5d\x69\xf4\xee\xf0\x4f\xe8\x2e\xf2\xe2\x9c\xdd\xd3\x22\xd5\xaf\xcb\xef\xfe\xa9\x13\xa9\x7f\x1f\x92\x17\xb3\xd2\x01\xc0\xcc\x5e\x60\x2f\x6b\xf4\x75\xf9\x33\xd1\x31\x33\x31\x96\xd9\x74\xb5\x75\xf9\x82\x1f\x7d\x4b\x1f\xcc\x9d\xd3\x19\x58\x10\x00\x6e\xf4\x91\x3b\x86\xb1\x15\xb1\x75\x6e\xe3\xda\x82\x0d\xcb\xb2\x5f\x6f\x58\x15\xfa\xd8\x88\x96\x08\xc7\x6d\xe4\x31\x22\xb9\x11\x4f\x63\x77\xa7\xa7\xea\x1b\x8c\xf3\xcb\x28\x3f\xc3\xd3\x95\x27\x2f\x10\xdb\x37\x18\x0d\x01\x35\xb6\x36\x0a\x76\xde\x17\xe5\x26\xfa\x7b\x38\x2f\xce\x2e\x66\x66\x3b\x86\xbd\xb9\xe6\xb8\xc2\xa3\xee\x94\x08\xbd\x61\xd2\x06\x4c\x13\xc5\x13\xe6\xde\xd1\x15\x74\x89\x29\x11\x4b\xec\xa8\x9e\x2c\x65\xe5\xfc\xf7\x70\x4d\x2c\xb8\x39\x5f\x8c\x0a\xe6\xc4\xc9\x12\x56\x3d\x17\xab\x47\x61\x2e\xb4\x64\x77\x77\xa6\xf3\xac\xdb\xc0\xeb\x4a\x68\xaa\x25\xf7\xcf\xfb\x29\x04\x52\xb4\x04\x78\xb7\x26\xa3\xb4\x15\xc1\xb8\x06\xbb\x11\x7c\xf3\xaf\xff\xe3\x5d\xb0\xb2\x62\x03\xbe\x1f\x83\x54\x59\x99\x7b\x52\x22\xd5\x2b\x4c\x55\xea\x11\x16\x81\xdf\xaf\xb9\xa8\xfd\xba\x59\x30\x5f\x4b\x33\xa5\xf6\x5f\x0c\xe1\x2e\x6e\xd6\x7c\x85\x6e\x51\x0b\x42\x33\x98\x11\xb1\xda\x8d\xc0\xe8\xbb\x21\xa2\x84\xef\x33\x2a\xc2\xc7\x66\x14\x23\xae\xbd\x0e\x7a\x9e\x78\xa1\x98\x07\xc4\x94\x8a\x38\x3d\x2e\xa7\x7f\xbd\x6d\xab\xcf\x83\xb4\x44\x8a\xdf\xbc\xf3\xd0\x48\x31\xce\x8b\xf2\x37\x3f\xc6\xa4\xd0\x6d\x1b\x53\x47\xbc\x10\xb8\x27\xad\x67\x87\xc9\x4a\x64\x42\x8b\x3c\x74\xba\x85\xae\x12\xef\x1b\x8a\x8d\x48\x7b\x5d\xe4\xd3\x86\x49\x74\x04\x94\x41\x12\xf6\xa9\x91\x2b\xf0\x0b\xea\x68\xb6\x68\x97\x46\x24\x11\x3b\x46\x14\xc7\x74\x5b\x70\xe5\x59\xff\x68\x10\x16\xd1\xa2\xb6\x16\x10\xd1\x65\xfd\x0e\xea\x23\x79\xb1\x66\x19\x93\xb0\xad\xf3\x7b\x22\xb6\x5c\xb7\x9c\xd0\x71\xc1\xc3\xa2\x6b\x2e\xd9\x27\x72\x65\xb1\xc2\xa3\x87\x85\x69\x9f\x03\x14\x8f\x8b\xc9\x5a\x66\x8b\x47\x4f\x88\x14\x17\x95\x4c\x2b\xa2\x98\x1e\x63\xee\xd6\xe3\xe3\xf8\x42\xac\x79\xb6\xe4\xf9\xe7\xcf\x27\xc4\x86\xf6\x4d\xae\x66\xf6\x03\x73\x1b\xc3\x47\x32\x9a\xf9\xf2\x31\xd3\xf0\x92\x29\x55\x94\x3f\x83\x3a\xed\xd3\x02\x70\x35\x38\x5e\x8d\xbd\x5a\x6b\x95\xd6\x39\x73\x8a\xb0\xea\x58\x03\x69\xce\x23\x0d\x74\x99\x1d\x70\x60\x54\x1a\xd2\xb3\x1d\x46\x74\xac\x1d\x4e\xb8\x75\x2a\x9b\xdf\x54\x35\x6e\x51\x38\x07\xef\x93\x22\xf7\xa2\xc8\x80\xaa\x08\x42\x1f\xd1\xab\x19\x5d\x35\x0d\x89\xe8\x34\x5d\xb9\x30\x83\x8a\x75\x58\x93\xd8\xa2\x88\xd5\xa1\xb5\x3f\x6a\xb9\x65\x58\x79\x24\x48\xc5\x48\x75\x19\xe5\x2e\xc7\xbc\xbd\x45\x25\x6b\x15\xb6\xa6\x03\x9d\xfb\x52\x04\xd1\x4c\x3d\x94\x6f\x7a\x07\xb0\xdd\x17\xad\x00\x83\x2c\x15\xf9\xc4\x80\xdf\x27\x89\xae\x3e\xdb\x3d\x3e\x58\x92\xdd\xdf\x33\xad\x8b\xb6\xde\x71\x0f\xd1\x3d\x34\x77\x3e\x8e\x2e\x75\x13\x91\xe7\xa9\xb9\xcd\x8b\xf5\x5a\xb2\x35\x84\x2a\xfa\x29\x0c\xf5\x8c\xc9\x19\x26\x55\x4b\xa6\x25\x67\x3b\x66\x7e\xab\xa2\x2f\x53\xae\xec\x45\x20\xd0\x53\xab\x64\xcc\x62\x24\x00\xad\x48\x98\x4f\x16\x55\x10\x1e\x6e\x9a\x59\x2e\x3b\x16\xe2\x0e\xe8\x5d\xac\x4f\x25\x9c\x84\x15\x19\xb1\x7a\x91\xaf\xc5\x9f\x50\x63\xd2\x34\xb6\x1d\x7b\x5a\xf0\xa8\x15\x1c\x3f\xc8\xc4\xa2\x04\x06\xfc\x68\x58\x7e\x42\xc2\xbf\xec\x64\xd8\xb0\xf8\x8e\x25\xe4\x1a\x43\x77\x21\xfa\xc2\xf9\xc6\x4f\x81\xee\xc8\xac\x5b\x4b\x3a\xb3\xb7\x0d\x57\xca\xb5\xac\x2a\xaf\x17\x0f\xdf\x04\x6b\x91\x77\x84\xa1\xdf\x3c\xa0\x3d\xaa\xd5\xbd\xbf\x1b\xd7\x23\x20\xcc\x67\xce\xfd\xde\xda\x5a\x21\xe3\x8d\x7d\x83\x8c\x98\x65\xc5\x4f\x6e\x99\x68\x6e\xd9\x7e\x45\x6d\x2a\x3f\x45\x53\xbb\x2f\xd4\x7a\xab\xd4\x98\x1e\x5d\xb5\xf8\x8c\x69\x9f\xdf\x43\x94\x1c\x30\x33\x5a\xe7\x7e\xbf\x33\xa7\xa6\x57\xd7\xa9\x53\x89\x74\xe9\xb3\xbb\x42\x60\x86\x28\xe3\x5d\x3a\xb7\x59\x1f\xd0\xd6\xad\x3b\x3e\xb3\x74\xaa\x6c\x83\x62\x58\xb6\x23\x3b\x2a\x39\xbd\x33\x36\x01\x38\xa3\x20\x7e\x5d\xb1\xa8\x9d\x52\xdd\x7c\x9c\x89\xc2\xac\x18\x9e\x62\x30\x87\x23\x0b\xea\x11\xfe\x12\xa8\x53\x0f\x82\xe9\xa9\x46\x69\x29\x35\x07\xbd\xf4\x53\xa2\x5f\x08\xed\xde\x10\x76\x84\xce\x5e\x8a\x7a\xe4\x48\x9f\x19\xb2\x1f\x3d\xd2\x39\x47\x5c\x2d\x1f\xd9\x03\xb2\x7a\xd6\xdf\x74\x1f\x1f\xc7\xd7\xf8\x99\xcb\x96\xeb\x71\x0e\x52\x0c\x02\x63\x95\x4b\xb5\xcd\xd4\x6e\x7a\xef\x8d\x56\xd2\x47\xed\xb2\xf0\xf7\xcc\xa6\xe1\x58\x3b\xf5\x99\x1b\xd4\x54\xb1\x5d\x42\xcf\xd2\xd8\x32\x00\xb3\xd7\x76\x04\x11\x97\x34\xd0\xb8\x73\x7d\xdb\x8a\x7a\xcd\x35\xdf\x9c\xce\x19\xf6\xe4\x63\x14\x2a\xf4\x8f\xe6\x81\x51\x73\xf8\xa1\x34\xcc\x90\xc1\x9f\xb7\x9f\x4b\x7d\xf4\x6b\x3b\x8f\x3a\xad\x12\x1b\x8f\x4c\x95\xe2\xeb\x2c\x7e\x47\xa9\x2a\x43\x95\x62\xeb\xac\x73\x78\xfa\x8c\xb8\x97\xd9\x39\xe0\x36\xf8\xf0\x6b\x9c\x12\x4d\x91\x88\x9d\x8a\x55\xb7\xec\x23\x1e\x17\xc3\xb4\x81\x30\xfb\x32\x9a\xe6\xd9\xbb\x0b\x83\x6a\x18\xe2\x8d\x60\x0c\x7f\x54\x39\x08\xf4\x71\xe1\x77\xcf\xae\x99\x7d\x35\x60\x61\xbc\x4f\x54\x35\x4c\xed\xac\x20\x93\x1c\x80\xcb\x70\x19\x80\x0a\xf5\xd9\xee\xca\x1f\x77\x4c\x7f\x0d\xb7\x5a\xe0\x73\x2e\xfd\x3a\x67\x6f\xc0\x89\x54\xdd\x5d\x52\xb1\x36\x3f\x6a\xe9\x42\x1b\x60\xb7\xe7\xc9\xd9\x17\x67\xf6\x13\x77\x97\x47\x82\x66\x8c\x8b\x8d\x9a\xb5\x1a\x40\x08\x85\xd4\x2c\x21\xc0\x36\x0d\xe4\xb2\x03\xbb\x50\x03\x36\x1f\xc7\x87\x17\x4d\x3f\x32\xa2\xc4\x16\xdf\x63\xa2\xad\xd2\xf4\xb5\x0b\x7e\x28\x53\x05\xfd\x6b\x8a\x75\xae\x00\x7d\xfc\xdf\x0a\x9a\xae\x36\x0c\x1f\xf2\x63\xfd\xed\x9f\xc6\xfc\x4b\x41\x5f\xf4\x89\x66\x81\xf3\xef\x07\xf5\xc1\xfc\x6a\x39\x9b\x5f\x46\xc9\x9e\xe7\x57\x3f\xce\xe6\x97\xb3\x88\x67\x7f\xbe\x78\x4b\x26\xe7\xef\x66\x97\xb1\xe8\x91\x77\xef\x66\x97\xb3\xeb\xe5\x62\xb2\x9c\x2f\xa6\xa4\xca\xec\xd3\x21\x32\xa6\x51\xab\xcc\x36\x3d\x6f\xce\x67\xcb\xf9\x22\x16\x08\x37\x7d\x3f\xbb\x1e\xa2\xe3\xbb\xc9\xe5\xe4\xed\x34\x26\xee\xed\xf4\x7a\x48\x8b\x63\xcf\x1a\x95\xe2\x11\x4c\x3b\x53\x3c\x3a\x7a\x95\xf2\xb1\xce\x81\xdc\x7c\x72\x32\x1a\xd1\x3c\x87\x00\x24\x15\x33\x64\xba\x04\x64\xc2\x07\x48\x9d\x04\xa0\x82\x40\xa0\xee\xf0\xc8\x68\x9e\x07\xf1\x7c\x25\xa6\x92\xde\x30\x72\x82\x17\xbe\x13\x42\x35\x90\xe3\x46\x03\xec\xba\x14\xc9\xa9\xde\x1c\xda\x08\xd3\x03\x87\x96\x0d\xe2\xe2\x0e\x16\x61\x5f\xc0\x31\x4a\xec\x69\xe3\x61\x45\x3c\xa1\x33\xf0\xa2\x3e\x02\x3b\xe3\x40\x19\xf4\xc0\x72\x87\xd6\x27\x07\x96\x8b\x26\x24\xcd\x7b\x64\x98\xcd\xe5\xda\x22\x07\x6c\x59\xa6\x87\xbd\x57\x99\xb2\x98\x00\x89\xab\x40\x85\x79\x52\x41\xdc\x40\x2f\xf5\x20\xde\x01\xc0\xff\x58\xc6\xea\xae\xdb\x5e\x61\xba\x46\x9d\xc7\xc7\xf1\x5c\xae\xed\x4d\x90\xa6\x92\xd1\xe4\x01\x41\xbe\x62\xa7\xd2\x45\xdd\x41\x59\x11\x01\x38\x5e\x8c\xac\xf9\x97\x7f\xf4\xac\xb4\x0a\x2d\x06\xb9\xdf\xf8\x37\xda\x03\xfc\x2e\xca\xf8\xdf\xae\x89\x47\x15\x73\x4c\xe5\x5f\x7e\xf5\x22\x79\xda\xb7\x4b\xaa\xda\xc5\x2c\x9f\xbe\x9a\x44\x6c\x9b\xb9\x5c\x47\x37\xf4\x8a\xdc\xd8\x86\xde\x9d\xe5\xd9\x73\x6a\x7b\x31\x95\xe7\x37\xd3\x7e\x7c\xe3\x18\x38\xdd\xf9\x9a\x03\x28\x31\xd9\xd2\x3c\x47\x1c\x3d\xc8\xd0\xa0\x2b\x04\xe4\x02\xac\x3d\x9b\xf9\x01\x4f\x87\xbf\x68\x26\x33\x9a\x12\x9e\xb0\x4c\x9b\xfb\x8e\x35\x9a\x63\xb1\x12\x91\x8a\x77\x4c\x4a\x9e\x30\x0f\xe8\x97\x60\x50\x91\x7d\x4b\x29\x51\xa5\x63\x69\x22\x62\x27\xa9\x5a\x49\x8e\x39\x81\x16\x72\xaf\x06\x48\xbd\xf7\x34\x13\x86\x76\x0d\xd4\xcb\x83\x31\x3c\xa7\x7a\x21\xe4\x5e\x7f\x55\x25\x83\x20\x26\x63\xaf\xea\x0d\xab\xc5\xf7\xb9\xbd\x8b\x65\x3b\x2e\x45\x06\x2f\x92\xf4\x5e\x33\x49\x56\x22\x7f\x18\xd9\x8c\xd7\x95\xd8\xe6\x29\x8b\x47\xcf\x86\xed\xe1\x29\x91\x3c\x12\xc1\x84\x09\xa2\xe5\x15\xac\xba\xc7\x11\x9a\xba\x9a\x20\x4d\x00\x33\x1a\x1c\x29\x7f\xa0\x4f\x73\x83\x7b\xa4\xaa\x44\x0a\x4e\x2f\xcf\x67\x97\x6f\x07\x4d\xd0\xab\xf9\x62\x19\xab\x6c\xbe\x58\x46\x32\x5a\x80\x6f\x72\x36\x8f\xd9\xde\x91\x42\x94\x27\xd5\x04\x92\x58\xc5\x7b\x19\x21\x94\xe4\x74\x4d\x5b\xde\x89\x2d\x08\x12\x93\x8a\x50\x05\xa8\x93\x03\x55\x53\x0a\xc1\x97\x2a\x32\x00\xd4\x16\x42\x04\x09\x0d\xfd\xf7\x7e\x86\xb9\x8b\x3d\x3a\x43\x62\x81\x73\x92\xaa\x2d\x73\x50\x1b\x08\xd6\xc4\x11\xbd\x1f\x2a\x31\xd7\x4f\x1b\x20\x58\xf1\x72\x1f\xec\xdd\xef\xd3\x9a\xc0\xcf\xf4\x4f\x6e\x4d\x7f\xbf\x4f\x47\x80\x4d\x7b\x21\xb2\x63\xd2\xa7\x4b\x96\x87\xe9\x96\xea\xd5\x26\x76\x96\x52\x5f\xc8\xc7\xed\x78\x34\x78\x48\xa8\x4a\xa2\x9a\x42\x62\x86\xec\x4e\xd7\xb9\x72\xbb\x66\x05\x3b\x2c\x9e\xb2\xe3\x25\x9b\x2d\xf0\x79\xa5\x0f\x16\xdc\x22\x13\xac\xa8\x34\x15\x9f\xc0\xb7\x53\x66\x02\xf5\x04\x5a\x73\xb5\x61\xe7\x67\x0a\x8e\x64\xc7\xcc\xe0\x13\xa7\x7a\x41\xae\x81\x3a\x16\xff\x29\x9e\x7b\x52\xff\x55\x5c\x94\xc6\x08\x9f\xf2\xb8\x33\xbd\x67\x76\xac\xbf\x73\x8c\xfb\x71\xe7\x15\x02\xe4\x6a\x15\x9c\x5f\x9d\xe7\xeb\x55\x80\xb2\x1b\x1c\xa8\x7b\xc7\x91\xb0\x11\x76\x50\x9f\xa9\x38\x61\xdc\x56\x58\x20\xc4\x6d\xf5\x44\xae\x0b\x68\x6f\x5f\xa5\x6d\xae\x59\x83\x34\x16\x5e\xb3\xf6\x9a\x5c\x7f\xc1\x4e\x92\x00\x7a\xdf\x5d\x83\xd3\x59\x16\x69\xf4\x08\x6f\xaf\xc0\xd3\x71\x74\x69\x0f\xe8\x1a\x6d\xd4\x1d\x20\x11\xbc\x0b\x88\x5d\x75\x67\x19\x1b\xd0\xd9\xe0\x12\xe2\x42\x26\x4a\xed\x9e\x37\x1e\xca\xe5\x65\x3e\xbc\xe3\x51\xff\xe9\x73\x57\x5d\x64\x4f\xa8\x5c\x0b\x6b\x1c\x5b\xa9\xfd\x77\x23\xf7\xb0\x63\x83\x7d\xac\x14\x7c\xcc\xe9\xb3\x4b\x31\x79\x2f\xe4\xd6\x9c\x62\xdc\x58\x59\xc4\xb2\x3c\x08\x8f\xbe\xc7\xc8\xa7\x0d\x83\x50\x77\x6a\x1b\x6b\x61\x68\x52\x77\xa5\x34\x53\x39\x13\xb1\x79\x30\x05\x24\x1e\xc0\xeb\x61\x5b\xb3\x4c\x70\xf9\x4a\x91\xa6\xa8\xb2\x87\xf9\x93\x8c\x28\x46\xa8\xd6\x05\x4d\x31\x25\xd4\xde\xf4\xca\xc0\x00\x41\xb6\x2c\x06\x27\x7d\x95\xd2\xac\x7e\xef\x74\xfb\x6f\xf9\xd4\x69\x6f\x6f\xd6\x76\x6a\xb1\x9a\x44\x70\xc3\xcb\x2c\x76\x0e\x6f\x7c\x3d\x6d\xdd\x22\x53\xc4\x93\xb5\x3f\x35\x7f\x5a\x0d\x4a\xbf\x5a\x9b\xd7\x1f\xb2\x4c\x6c\xe6\x03\x38\xfc\x25\xf0\x34\x61\xa4\x78\x93\xdc\xa1\x6a\x6c\x80\xa8\xa6\x21\xce\xdd\xac\x70\x0c\x82\x8f\xa9\xd6\xa6\x06\x74\xde\x86\x96\xd1\xee\xbc\x12\xec\x0e\x92\x65\x6c\xaf\x4c\x69\xf6\xba\xb9\x71\x2d\xc3\x15\x29\x11\xad\x41\x05\xae\x08\x72\xf7\x00\x76\xb1\xd4\x7c\x55\xa4\x54\xf6\x41\x58\x42\xcb\xba\xf4\x3d\x70\x82\xe9\x42\xfe\x35\x95\xf4\x81\x36\xb2\x10\xf6\xab\x8d\x10\x8a\x11\xc6\x71\xa1\x99\xd3\xdd\xac\xaa\x84\x2b\xf8\xf7\x98\x7c\x2b\x8c\x35\x01\x51\x79\x14\xf0\x3f\xb5\x99\x90\x18\x90\x0d\x1b\x1f\x03\xb3\x0a\xf7\x31\x88\x2e\x07\x9a\x27\x7c\x98\x89\x02\x55\xac\x18\xe0\x40\x31\x6f\x08\x48\xe7\x56\x29\x3f\xc0\x80\xbd\x4a\x0a\x8e\xb6\x76\x2b\x93\x8c\xb0\x4c\x4b\x63\x82\x02\x2a\x84\x0f\xf9\xf3\x70\x86\x1a\x40\x51\xec\x7d\x2d\xe2\x28\xb1\x7d\x80\xcf\x50\x84\xae\x69\x14\x30\x62\xb2\x5a\x31\x04\x2a\x04\xf2\xbb\x56\x71\x8e\x15\x00\x43\xed\xe9\xaa\x92\x55\x1f\x8e\x6f\xdd\x7b\xdd\xdb\x73\xe7\xc1\xfd\xcb\x44\x7a\x0a\x78\x1f\x9a\xc9\x4c\x44\x80\xb5\x3c\xb2\xff\x21\xbe\x3d\x84\x46\x21\x1d\x49\x10\xce\x1f\xd0\x2a\xa3\x44\x4c\x31\x3d\x60\x96\x7c\x9a\x46\x1f\xf3\xe3\xac\x39\x34\xcb\x0a\x23\x25\x66\xb0\x62\x65\x90\xb3\xea\x09\x76\x1a\x9d\x70\xf1\x4d\x06\xd8\xc0\x1a\x99\x7a\xf6\x3c\x71\xc3\x95\xe0\xca\xfb\x47\x35\xfd\xc8\xa2\xf0\xaf\x3d\xd4\xf8\xf2\x2b\x38\x48\x83\x13\xb9\x55\x1d\xc9\x72\x01\x3a\x25\xe4\xc3\xef\x2a\xf8\x1b\x1f\x7e\x57\xf3\xd9\x9e\x92\x1c\xe7\x74\x61\xce\x47\x4c\x33\x42\x56\xb7\xb8\xba\xcd\x28\x74\x09\xcb\x84\x45\xd4\xdd\xaf\x34\xf0\xf2\x06\x01\x23\x2e\x01\xa9\x25\x57\xc2\xb7\x08\xde\x53\x59\xe2\x0e\x15\x63\x4c\xc9\x87\x00\x8d\xc3\x1c\xc7\x0f\xa2\x90\x64\x7e\x1d\x7d\x26\x9f\x95\x3d\x5c\x06\xb8\xdb\xd3\x04\xe3\xdc\x41\x6c\x05\x2e\xcd\x9f\xce\xba\x10\xe4\x7a\x1e\xe3\x16\xb9\xaa\x91\x45\x39\x5b\x20\x84\xb0\x28\x32\xee\x90\x88\x62\xbd\x7b\x15\x99\x00\x09\x57\x7e\x55\xd5\xc0\x2d\xa2\x3b\x5f\xa3\x42\xbb\xc7\xc7\xf1\x7b\x26\x15\x60\x6d\x57\xd5\x3b\x58\xb9\xaa\xcc\xa1\x7a\x3a\x44\x6f\xb3\x3f\x76\x01\x71\x20\x94\x77\xe5\x96\x1c\x45\xe2\x00\xc1\xb5\x0b\x6d\x69\xfb\x0e\x85\x0e\xf7\xd7\x59\x5a\xb9\xce\x82\xc0\x5e\xf7\x59\xa3\x4d\xa3\x3d\xde\xaf\xcd\x7e\xe5\xd3\x16\x5b\x3c\xde\x17\xd2\x25\x00\xd9\x85\x44\x12\x4e\xd7\x99\x50\x9a\xaf\xc0\x1c\x53\x3a\x69\x01\x41\xd2\x74\x9b\xd3\xa0\x08\xb5\x57\x55\xb7\x88\x28\xe6\x16\x65\x4e\x4c\x8b\x0e\xa2\xd0\x84\x92\x14\x1e\x6e\xee\x6d\xc2\x8d\xd9\xeb\x6b\x37\xf3\xda\x45\xbc\x34\x7d\xfc\xdd\xd3\xbe\x13\xd7\xa0\xa2\xcf\xa7\x13\x72\x47\x57\x1f\x59\xd4\xea\xb5\x8d\x29\x32\xc2\x2c\xd6\x97\x65\xc6\x01\x98\xd3\x8a\x1e\x16\xe3\x37\xf5\x57\x74\x7b\x7f\x2f\xe3\xdf\x84\x4f\xba\x28\xb2\x93\x7a\xb2\x4f\xe9\xff\x23\xaa\x48\x9d\x5a\x46\xc5\xb6\x0e\x32\xad\xd8\xe1\x62\x6a\x6f\x41\x4a\xdd\xef\x62\x5b\xa7\x14\x77\x29\xdb\x12\xc9\xb6\x62\x67\xfa\x28\x11\x9f\x32\xc4\xa4\x76\xdb\xa7\x31\x59\xd8\x36\x70\x70\x44\xb7\x4e\x2b\x8c\x92\xa4\x90\x90\x71\x02\xc3\xbf\x15\xe5\xb1\xed\xb6\x4e\xb5\xa2\x12\x41\x92\xeb\x8c\x9c\xa6\x2a\x21\x69\xc6\x68\x74\x17\x95\x02\xa0\xf2\x1c\x38\xbb\xd1\xf4\x81\x28\xbe\xce\x68\x8a\x46\x38\xfc\xf3\xf3\xe7\x31\x99\xfe\xc2\x7d\x4a\x38\xd0\x1f\x72\x7d\x26\x92\x96\xa5\x8c\xa2\x05\x29\x81\xdf\x91\x94\xca\x08\x64\x35\xe1\x4b\xff\x9b\x95\xc8\x6a\xe2\x63\x8a\x03\x42\x7e\x13\x5c\x7e\x99\x50\x56\x92\x60\x20\x0c\x1c\x22\xde\xe3\xf3\x25\x49\x45\xb6\x66\xb2\x0c\x59\xf2\x1c\x54\x30\x7e\x8c\x70\xc4\x9a\xd7\x00\x30\x4d\xe3\x41\x55\xa6\x76\xc9\x99\xfe\xf2\x8f\x46\x65\x5c\xf0\x6e\x16\xb8\x4e\x2c\x58\x1c\x75\x30\xf9\xcc\x3d\x7f\x02\x38\x9c\xd5\x08\xa0\x09\xa6\x29\x87\xeb\x74\x4a\x09\x23\x92\xe7\x78\x6d\x8c\x6d\xed\x87\x3c\xc5\x5d\x15\xd2\x06\x30\xe2\xad\x31\xa0\x30\xc1\x26\xb4\x81\xf7\x81\x72\xfb\xd8\x85\xfb\x42\xba\x21\xd3\x1a\xf4\xa8\xdc\xc9\x0f\x54\xa3\xea\x2a\xe8\xa1\x05\xc0\xb5\x38\x96\x73\x21\x09\xf0\xb2\xb9\x7c\x29\x48\x0d\x47\x4b\xce\x02\x79\x46\x74\x3a\xe7\x0a\xc2\x65\x2c\x61\x18\x85\x4b\x0e\xad\x13\xe1\x5a\xe6\x36\xb0\xcd\xd2\x20\x69\x0a\x56\x41\x7d\x87\xf3\xee\x8b\x56\xcd\x15\xcf\xd6\x98\x08\x49\x5e\xc0\x5a\xb5\xfc\xbf\x78\x0e\xb8\x09\x18\xcb\xfb\xdd\x53\xdb\x88\x13\x69\x4d\xf1\x17\x46\x3d\x41\x14\xcb\xd0\xa6\x2c\xa5\x1e\x41\xb3\x1a\x5a\x15\xb0\x21\x7b\xf0\xab\x9f\x46\x77\xe4\xdb\x9b\xd9\xc5\xf9\xd5\xe4\xec\xfb\x5b\x07\xad\xb5\x22\x67\xf3\x77\xef\x26\x97\xe7\xe6\x0f\xe7\xdc\x33\xff\xbe\x27\x15\xa0\x3b\x80\xe1\x4a\xc4\xea\x23\x93\x23\xbe\xa5\x6b\x46\xce\xe7\x67\xdf\x4f\x17\xb7\xb3\x77\x93\xb7\xd3\x9f\xb1\xe2\x9f\x46\x9c\x54\xf2\xdb\x4d\xa9\x8f\xe4\x7c\x76\xfd\xbd\xf9\xd7\x96\x20\xe0\xdd\xcf\x7b\x40\x5f\xe6\x93\x9c\xb8\x7a\x14\xb9\x5e\x4e\xce\xa0\x88\x26\xcb\xd9\xbb\xe9\xfc\x06\x7e\x51\x90\xef\xa6\x93\x8b\xe5\x77\xb7\x67\xdf\x4d\xcf\xbe\xbf\x5d\xfe\x70\x85\xe8\x60\x65\x5c\x10\x59\xcc\x6f\x96\xd3\x5b\x87\x14\x06\x2a\x85\x61\x5c\x3f\xdb\xbf\x5d\x8f\xb9\xbf\x41\x82\xfb\x03\x9e\x84\x51\x30\xc6\x3f\xe1\xb7\x1e\x79\x0c\xc6\x64\x5b\xa4\x9a\xe7\x38\x26\xaa\xce\x12\x6d\xc7\x61\x75\x8f\x43\xb0\xdf\x99\x03\x77\x99\xae\xfa\xfa\xcc\x48\xd8\x1e\x2b\x53\x11\x17\x4a\x87\x4f\xfa\x2f\x37\xf3\xe5\x64\x90\xba\xc8\xf2\x76\x8e\x0f\xf0\x1c\x8f\x24\xf8\x6c\x50\x1c\x0e\xb5\x41\xc8\x25\x37\x24\x45\x84\xe7\xba\xb8\xce\x98\x1c\xd4\x47\x0b\x1b\xa9\x8f\x28\x61\xcc\x6c\x53\xe9\x83\x47\x6b\x11\x72\x4d\x5e\xb0\x5f\x1c\xb8\x14\x04\xd1\x0a\x0c\xc1\x92\x4c\x15\xa9\x46\xcb\x0f\x24\x20\x35\xf8\xbd\x8f\x6f\x00\xb5\xe2\x78\x3d\xc0\x79\x47\x5d\xe4\xbf\x04\xb0\xc4\xba\x3f\x84\xe6\x39\xcb\x28\x6a\x43\xc9\x0b\x85\x87\x9a\xf2\x21\xee\x65\x84\xae\x45\x3b\xd9\x41\x5c\x94\xcb\x26\x00\x03\x0b\x7b\x27\x88\x7d\x88\x6c\x29\xbd\xfa\xa3\x2d\x41\xb4\xb9\x49\x21\x88\x22\x6e\xd8\x46\x56\x8b\x13\xe7\x2f\x4d\xa3\xd9\xcb\x19\x72\x11\x99\x0a\x5d\x0e\x90\xc5\xf4\x2f\x37\xd3\xeb\x65\x2c\x1a\x69\x31\x3b\xfb\x6e\x36\xbd\x5e\x4e\x22\x81\x48\x8b\xe9\xf5\x74\xf1\x7e\x7a\x7e\x6b\x37\x99\xf9\x62\x19\x8b\x74\x35\xdf\x4d\x6f\x17\xf3\xe5\x72\x72\xbb\x98\x99\x62\x93\x65\x24\x5e\x76\x31\xbd\xbe\x9a\x5f\x5e\x47\x91\x48\x16\xb3\xeb\xab\x79\x8b\x52\x73\x40\x29\x8c\xd9\xdf\x8b\x9b\xf9\xc5\xec\x75\x8c\x5f\x07\x1a\x12\x6b\x83\xd1\x3e\xa6\x33\x94\x8b\x6a\x6c\x0a\x46\xd5\x75\xfb\x73\x47\x38\x0a\x76\x5e\x44\xc8\xcd\xe5\xe5\xd0\xa0\x94\x05\xa3\xc9\x08\xc0\x45\x2d\xc2\xb5\xc6\x4c\x58\x9e\xdd\x0b\xb0\x55\x25\x43\xf2\xf3\x36\x9f\xab\x31\xc9\xcd\xcd\xd1\x9c\xea\x29\xd3\xba\x90\x94\x50\x47\xe3\xe3\x72\xa2\x51\x50\x93\xdb\x33\x3a\x0c\x8c\xa6\x29\x3c\xa1\x32\xcd\x88\x90\xf9\x86\x66\x2c\xb1\xe9\xa2\x7f\x1e\xda\xcc\x16\x51\x68\x62\x6f\xf3\x38\x93\xdf\x35\x07\x8c\x08\xbe\x2a\x24\xf8\x97\x77\x22\x65\x92\x30\x6b\x49\x07\x14\x0a\x42\xde\xd3\x8c\x55\x24\xf6\x50\xc8\xbe\x41\xbd\x13\x09\x4b\x91\x07\xd3\xff\xe9\x4e\x87\x2c\x21\x6c\xc7\xe4\x83\xde\x80\x95\x88\x80\x8d\xfe\xf6\xc4\x75\xac\x3f\xba\x34\x6f\xaf\x96\x05\xb4\x0c\x2c\x85\xe8\x57\xee\x2b\xe7\x7f\x3e\x4a\xdb\x9e\x45\xf3\x76\xd5\xec\xcb\x55\x43\x8a\x63\x85\xc7\x0e\xc1\x9c\x72\xfb\x38\x36\x4f\x93\xfd\x77\x2c\x0d\x37\x82\x4b\xf6\x69\xef\xab\x3f\x7f\x28\x5e\xbe\xfc\x97\xd8\x61\xd1\xdc\x38\xfb\xee\xd5\xa9\x97\xb9\xf5\xfa\xc7\xb5\x46\xbd\x68\x97\x5a\x6d\xdd\x93\x17\x72\xbd\x8f\x6d\xd5\x70\x03\x83\xfe\x39\x4b\x45\x91\x90\x37\xe6\x82\x2c\x1f\x0e\x1d\xcc\x78\x0e\x6a\xad\xca\x84\xd6\x2b\xec\xdf\x12\x97\x98\xba\x7f\x89\x3b\x66\x43\x1a\x12\x5a\xf7\xea\xeb\xdd\x8a\x15\xe3\x3b\xf0\x7b\x96\xe4\xec\x2b\xcf\xb1\x6e\x39\xbd\x23\x9a\x7e\xf9\x7f\x2c\xa8\x8d\xe4\x2b\xb6\x2b\x20\x06\x21\x28\xbc\x47\xd0\x9e\xd0\x88\x47\x67\xc1\x6c\x2c\x9b\x8d\xa5\x39\x51\x84\xfd\xc2\x56\x85\x06\xa7\x3d\x35\x02\xe9\x4a\x93\x42\xb9\x27\xb2\x94\x6a\xa6\x34\x18\xf9\x2c\x09\x50\x79\xc0\xf7\x51\x7e\x1f\x06\xc4\xbd\xf0\x89\x7b\xa7\x65\x46\x39\x07\xee\x3d\x75\x5a\x02\xd3\x9c\x22\x0d\xd0\x29\x61\x7a\x35\x1e\x86\x34\xb5\x60\xab\x42\x2a\xbe\x63\xe9\x83\x73\xc7\x94\xa4\x21\xc8\x00\xc8\xd3\xc4\xf2\x7c\xab\x86\x19\x01\xa4\xaa\x77\x54\x31\x7f\xc5\xdc\x52\x40\x64\xb7\xfe\x58\xbc\xca\xd7\xf2\xe1\x63\xb6\x00\xdf\x16\x62\x67\xc3\x1e\xec\x5c\x47\xe4\x7c\xa4\xf3\xe6\xe4\x9e\xaf\x53\x8e\xfe\x2d\x5f\x6f\x55\x1d\x9e\x99\xdb\x3d\x0c\xaf\x30\x0d\x73\xb7\xe7\x20\xbf\xce\x39\x77\x19\x22\xc5\xf5\x65\x6d\x68\xed\xaa\x12\x45\xfd\x9f\xd6\x67\xcd\x7b\xc5\x6f\xa9\xff\x6c\x9f\xd5\x49\xa2\x62\xc1\x67\xc1\x74\x68\x7c\x98\xeb\xa8\xc6\x92\x0d\x89\xd4\x6e\x08\x18\x5e\xdf\xa3\xae\x42\x04\xf7\x13\x68\x62\x5b\x52\xab\xaf\xaf\x90\x96\x40\xce\x56\xd7\x46\xeb\x51\x56\xe7\x5e\x38\x6e\x16\x17\x58\x59\x8f\xb8\x38\x57\x25\x90\x29\x06\x68\x64\xf8\x08\xcf\xb3\x58\x52\x8f\xab\xd5\x13\x5c\x39\x6f\xff\x06\x3c\xfd\x21\x0e\x59\x7b\xc5\x59\x25\xab\xb8\x47\x1b\x5d\xf0\x2d\x0b\x83\x6f\xbb\xea\x30\x16\xf7\xa1\xc3\x57\xe7\x4e\xea\x37\x8c\xf5\xc4\x77\x73\x44\xbd\xa7\x32\x3c\x0e\xeb\x88\x52\x66\xc1\x88\x7a\xaa\xcc\x1f\xec\xe4\x33\x27\x9c\xf9\x87\x33\x3f\x94\xf9\xe4\x0c\x23\xc1\x6e\x14\x93\x6d\xce\xd6\x45\xf8\x06\x91\x46\xba\xb0\xaa\x20\x24\x60\x47\x71\xab\x1a\x49\xa5\xf6\xd5\x76\xee\xdc\x40\x6f\x08\xae\xae\x6b\xde\xed\xe2\xf5\x5d\x0a\x83\x18\x24\x6c\x9b\x7e\x84\x54\x97\xc7\xc7\x31\x82\x3e\x94\x22\x6d\x5f\xe2\xc7\x73\xb9\xae\xf6\x26\x7e\x0c\xba\x3d\xa9\x3f\xed\x2c\x29\x75\x0a\xb9\x2a\xea\x5a\x45\xfa\x6d\x4f\x45\xdb\x73\x55\x1d\xff\xc9\x7d\xf7\xdb\xe9\xa2\xa7\x77\x84\x7d\xdc\xbe\x59\x5c\x1c\x6f\x31\x1a\x35\xb2\x8e\x67\x8f\xfa\x4a\xf4\xf4\xda\xa8\xc9\x73\xaf\xba\x52\xc5\x83\x7b\xeb\xe0\xb6\xf5\xa8\x10\xdc\xf2\xb4\x34\x46\xa3\x15\xb9\x30\x1a\xd2\x88\x92\xd8\x21\xbe\xa7\x2d\x14\xd6\xd1\xdf\x2e\xa9\xd5\xd1\xc1\x95\xb7\xe0\xbe\x8e\x01\xfc\x78\x65\x2d\x6d\x94\x34\x61\x03\xda\x31\x65\x9c\xbc\x76\x2b\xa3\xd4\xb4\x8f\x55\xe1\x24\xc6\x79\x0a\x2b\x0a\xf6\xa2\xa1\x04\xa9\xf6\x09\xaf\xba\x30\xbc\x93\xe0\x79\xd7\xae\x53\xb8\x9c\xe5\x2d\x8b\x15\x63\x80\x4a\x9d\xbe\xf2\xe2\xb5\x5d\x55\xf2\x6e\xa0\x23\xe3\x5b\xf7\x77\xbd\xe7\x6a\x5f\x0c\xea\x86\x26\xa4\xd2\xe6\xea\x7c\xa7\x34\x7c\xd1\xb3\x45\x7b\x03\x5b\x1f\xfc\x27\x8e\x68\xdb\x10\xd5\xc7\xf4\x49\x43\x53\xdd\x87\x6c\x87\xf5\x6c\xd3\x80\xb1\x69\xc0\x82\xab\x54\xd5\xdd\xa6\x9e\xed\xd8\xf3\xc1\xd4\x5d\x77\xcf\x6e\xe5\xee\x37\xbe\x35\xaa\xa0\x49\xb9\xaf\x6f\xd8\xba\x5e\x74\xed\x9f\xa7\x49\x28\xb7\xec\xc4\xe0\xc3\xa6\x2e\x7c\x6a\x5f\x95\x17\xd5\x7d\x25\xca\xce\x0a\x3e\xec\xec\xaa\x83\xbb\x24\x17\x9d\x21\xd6\xc1\x8d\x3f\x2a\x44\x6a\xe5\x73\x67\xae\xaf\xbf\xc3\x58\x63\x1f\xe6\xd8\x7e\x7c\xce\x20\x92\x9e\x28\x06\x25\xbf\xfc\x1a\xa6\xea\x41\x10\x5c\xd7\x91\xda\x58\x3d\xcb\xcc\x55\x10\x80\x96\x6a\xac\x2e\x36\x06\x1e\x72\xf6\x5b\x4d\x86\x3d\xc5\x20\x11\x15\xdc\x90\xaa\xa8\xdb\x11\x18\x93\xc7\x01\x03\xb8\x9b\x8f\x75\xe1\xfb\x74\x20\x86\xd6\xc2\xc6\x4b\x02\xb9\x23\x44\x89\x01\x91\xe3\xe7\xcf\x1f\xb2\xe5\xec\xea\x35\x99\xdd\x93\x07\x51\x40\xe2\xc4\x1d\xdb\xf0\x2c\x21\x94\xdc\x73\xc9\x3e\x81\xdb\x01\xde\xc0\x00\x6f\xdb\x13\xb8\xe5\x52\xfc\xf2\x70\x8a\x19\xab\x18\x00\xba\xd1\x3a\x57\xb7\xf0\x79\x73\x9e\x2f\x57\x18\x49\xbb\xd2\xe9\x03\x62\xa9\x4f\x53\xc5\x4e\x6d\x3e\x15\x04\x3d\x67\x4c\x7f\x12\xf2\x63\xc0\xeb\x14\x5d\x1e\xff\x75\x1b\xd4\x3a\x40\xb9\x62\x45\x22\x46\x5a\x3f\xc0\x4a\x68\xcd\xae\x58\x20\x00\x17\x77\xaf\xed\x16\x8d\xc1\x4b\x68\xad\x89\x25\x88\xf8\x36\x0c\xc9\x65\x81\xbd\xa6\xc8\xf5\xfc\x66\x71\x36\x1d\x4d\xae\xae\xc8\x72\xb2\x78\x3b\x5d\xc2\x3f\xa9\xf2\x08\xed\x51\x36\x49\x8b\x1a\x46\x26\x57\x57\x17\xb3\x33\xc4\x8b\x1a\x9d\xcf\x46\xf3\xc5\xec\xed\xec\x72\xba\xf7\xf9\xf9\xf4\x7a\x39\xbb\xc4\xbf\x71\xc3\x72\x28\xee\xd1\x45\x62\x75\x34\x46\x28\x5a\xb9\xa5\x5a\x5d\x5a\x71\x9b\xc6\x50\x0b\x87\x09\x6a\x8d\xee\x27\x96\xcf\x07\x62\xa8\xc9\x55\x0b\x0b\xd1\x15\x92\xf2\xc0\xe5\xab\x83\x57\x68\xe1\xd8\xd3\x21\x73\xdc\x9c\x42\x93\xab\x19\xa0\xb6\x25\x44\x14\xfa\x4f\xf0\xc0\x00\x06\x37\xb8\x07\xed\x2b\xc3\x30\xb8\x92\x05\x53\x9a\xae\x3b\x6f\x17\x36\x63\xbe\xef\xf5\xc2\xa5\xfc\x7f\x45\x17\x5a\x9d\x6e\xee\xb7\xe5\x1e\x43\x38\x91\x8e\x4e\xa6\xbb\x1d\x1f\xd2\xc5\x12\x02\x26\x9b\x9e\x27\x3f\x7f\x86\xf0\xf2\xe0\x00\xab\xb4\xbf\xb7\xb9\xda\xc0\x36\x58\xad\xa5\xa3\xa3\xfb\x1b\xab\x96\x3d\x80\x22\x2e\xfe\x8e\x27\x05\x4d\x7d\x70\x31\x70\x4d\xc3\x3b\xbf\xd9\xb5\x8a\xd6\xdd\x85\x6e\xc1\x25\x80\x41\x96\x15\xea\xe8\x84\x97\xb1\xc1\x2b\xe4\xa9\x8a\xaf\x67\xaf\x4f\x02\x79\x34\x29\xc5\x63\x61\x3e\xf1\x8c\xe4\x3e\xe1\xc3\xe6\xfb\x12\x85\x54\xc6\x5d\xca\x31\xb2\xe3\xaa\xa0\x98\x3d\xc4\x53\x2b\x0c\x05\xdb\xac\x10\xe5\x48\x91\xe1\x84\x69\x71\x64\x47\xb4\x5c\xf3\x1d\xcb\xec\x4b\xe5\xba\xe0\xc9\x98\x90\x49\x9a\x5a\x46\xae\x0d\xa3\x29\x60\xd4\x25\xb6\x37\xcd\x5e\x92\x17\x65\x02\x0b\xf0\x56\x2a\x08\x99\x96\x4c\xa9\x78\x2e\x4d\xb4\x49\xa6\xce\x86\xa9\x11\x20\xc0\x8f\x09\x59\xfa\xc0\x0a\xa4\xe1\xb2\x5a\x24\x9c\xf0\x4c\xb3\xb5\x04\x4a\x39\x66\x9f\x70\xf7\x85\xed\x58\xb6\x16\x99\x70\x2f\xcf\x9a\x47\xd7\x5e\x6b\x27\x09\xb9\x6e\xea\xa4\x5a\x97\x40\x44\xd0\x91\xba\x24\x0e\x8b\x1f\xef\x14\x44\xa9\xae\x95\x3c\x52\x0f\xd8\xfb\x61\x8f\x5e\xf0\x5e\xb3\xa3\xf4\x44\x79\xf9\xab\xd0\x5f\xb4\x75\x41\x98\x5f\x7e\xdc\xd6\x8f\x3e\xb2\x87\xaf\xde\x03\x69\x23\x5a\x79\xef\x09\xf1\x1c\xbd\x61\xce\xba\x3e\xfd\x00\x07\xf6\x91\x7a\xa1\x09\x91\xbb\x63\x29\xf8\x22\xc7\x6a\xb7\xa6\xab\x8f\xbe\xdd\xf1\x66\x9b\x9f\x1d\xb1\xd9\x20\xae\xd2\xea\x8e\x46\x43\x81\xc1\x6d\xf6\x99\x6a\xc1\x71\xaa\xc2\xf3\xd4\x7c\xc9\xe8\x0a\x33\xe8\x47\x98\x8a\x8a\xbf\xed\x6c\x9d\xcf\x3f\x0b\x72\xdb\xeb\x07\x2d\x6a\x8e\xde\xc7\x15\xa7\x6a\x55\x64\xb4\xf2\x0b\x2d\x7d\xc4\x72\x47\x53\x9a\xd0\x6d\x0e\x46\xcb\xf2\xad\xa8\xa6\xc7\xb1\xf4\x18\xc8\x58\xad\x2a\x1f\x0c\x89\xf5\x24\x95\xfb\xc3\x5f\x55\x94\x07\x08\x1c\xe4\x58\x4a\x53\xbb\x0d\x56\x89\x3c\xea\xd1\x98\x7e\x8b\xe8\x6a\x45\xca\x88\x64\x6b\x61\x13\x94\x31\xd4\xb2\x19\xb5\xdd\xc7\x5c\x86\x31\xe5\xad\xca\x83\xd7\xce\x4f\x6f\xa3\xba\x99\xdd\x6b\x96\xb8\xb9\xad\x06\xb9\xa2\x41\x63\x51\xae\x5c\x9c\xce\x3e\xbe\xc2\x4e\x67\x5e\x9d\xce\xec\x40\x17\x74\x43\x03\x1e\x1f\xc7\x6f\x50\xef\x37\x29\x5d\x0f\xf4\xa3\x37\x2b\xbf\x27\xf2\x89\xca\x1e\xb6\x38\x0f\x6c\xc8\x53\x56\xec\x73\x34\xb4\x7b\x49\x7f\xb5\x86\x36\xad\xf3\xc3\x9a\x0c\xde\x0c\x38\x32\x91\x49\xff\x50\x0c\xe0\x85\x7b\xa3\xfe\x4e\x28\x6d\x5f\xb0\x1e\x1f\xc7\xe7\x20\xd5\xde\x15\x31\x43\x55\x69\x06\x37\xcb\x58\xc7\xb8\x47\xeb\xfe\x82\x0e\x55\xe8\x0f\x9e\xe7\xf0\x68\xaa\xc5\x45\xb6\x2b\x09\xff\xf8\xfc\x99\x7c\xa2\x98\x04\x73\x07\xc9\xb8\x7a\x1f\x96\xa8\x21\x70\xfa\xf3\xe7\x28\x7e\x6f\x10\x03\xe0\x6a\x80\x54\x19\x59\x6e\xb7\x14\x21\x5b\xfa\xd1\xe3\x98\xaa\xda\x1b\x82\xa1\x06\x7d\x33\xbd\x6a\x11\x0a\x9d\x19\x5d\xb5\x6a\x02\xec\x92\x21\x1d\x66\x87\xae\xb7\x5a\x0e\xd7\xe4\xa0\x2e\x73\x95\xc5\xdb\x63\x99\xc7\xfc\x20\xc9\xb7\xe6\x4f\x18\x2a\xdd\x0a\x8d\xf5\xb6\x4e\x43\xd6\x20\x21\x6b\x67\xc9\x80\x9f\x47\xbd\x2d\x42\x47\x1d\x13\x8e\xd0\x4c\x62\xc6\x9c\xdd\x3d\x3e\xf1\x34\x05\x2a\x74\x0b\xd1\x0b\x2f\x2d\xe9\x83\xc3\x3d\x28\x09\x7f\x43\xca\xb5\xd8\x38\xb8\x84\x13\x63\x38\x80\x4f\x5b\x78\x5a\x4b\x45\x25\xcd\x32\x51\x42\x01\x6b\x46\x14\x44\x7a\x16\xe9\x3e\x3b\x5b\x27\xf7\x2f\xb6\x66\xe0\x86\xd7\x02\x1b\xb8\x00\x8b\x27\x56\x2e\x23\x94\x88\x8c\x8d\xc4\xfd\x3d\x92\x0c\xfb\xc7\xa8\x81\x0a\xe0\xb9\x3b\x0d\x8e\xa3\xf7\xee\x38\x82\x09\x10\x6d\xd1\x5b\x6f\x7e\xf5\x38\x4a\x23\xf9\x5c\xd7\xd3\xb3\x9b\xc5\x6c\xf9\x03\x79\xbb\x98\xdf\x5c\xc5\x2a\x5a\xdc\x5c\x5d\xcd\xc9\xf9\x8c\x5c\xcf\xce\x6e\x16\xd3\x1f\x7f\x8c\x24\x76\x55\xa5\x45\xf5\xde\x17\x17\xd5\x6e\x4a\x26\x17\xd7\xf3\x98\xa4\xf7\xd3\xf3\x19\x99\x5c\x9e\x7d\x17\x4b\x57\xbb\x9e\x2e\xde\xcf\xce\x62\x54\xdf\xf0\xed\x8f\xb3\x08\x74\xb2\x2d\x3b\x84\x51\x64\x80\xc0\x9e\x7c\x22\x4e\x62\x7b\xfb\x62\x29\x80\xb6\x74\x7b\xd9\x98\x26\xb6\x70\x7b\xcd\x9d\x54\xe8\x33\x60\x41\x9f\xdc\x9e\x4f\x2f\x6e\x3b\xba\xe7\x6a\x12\x1f\xa9\xab\x49\x7b\xb9\x41\xa3\xd4\x4f\x58\xdf\x11\x02\x69\xb1\x5e\x42\x71\xfd\xb8\x5e\xba\xf5\x3a\x9f\xbe\x9f\x5e\xcc\xaf\xa2\x3c\x2f\xd7\xef\x67\x17\x37\x57\x57\x7d\x9b\xd9\x8f\x34\xa6\x53\x4e\x74\xf6\x99\x82\x6d\xe5\xa2\x33\xcf\x14\x8c\xf5\xe8\xf5\x77\x16\x89\xe2\xa0\x67\x7f\x53\xdc\x9c\x44\x4f\x7a\xe0\xbf\xbe\xbe\x20\x67\x41\x72\x13\x3c\x6a\x9b\x63\xfb\x1d\x53\x8a\xae\x99\x7f\xdf\x06\xba\xaa\xd5\x3d\xa4\x04\x8c\x46\xea\x23\xcf\x47\x4a\xa5\x23\xc8\x63\x02\x95\x80\xb7\x0a\x68\x32\xb2\x82\x79\x4e\x1a\x9e\xc1\xc5\x9d\x55\x98\xdb\x07\x9d\x2a\x80\xbf\x30\xac\xc4\xcd\xd9\xd9\x74\x7a\x3e\x3d\x1f\x56\x6a\x45\xd3\xaf\xfc\x7e\x98\xf0\x2d\xcb\x14\x17\x59\x89\xa3\xff\x5b\x7a\x42\xbc\x76\x2e\x97\xbe\x67\xb7\x77\x9d\xc4\x26\x7c\x15\xe7\xf8\xf1\x71\xec\xbc\x3a\xb7\x6b\x6b\x1f\xf6\x45\x20\x6c\x60\x4b\x6d\x94\xd7\x95\x87\xdf\x43\xa5\xc7\xc7\x31\x04\x7d\xdc\x6e\xdd\x92\xe8\xb4\x7e\xdb\x75\x6a\x10\x18\xd1\x0d\x97\xdc\x86\xa5\x39\x81\x14\xd2\x95\x45\x0f\xc5\x7c\x52\x58\x71\xe6\xb2\x41\xe8\x1d\xa2\xaf\x78\xb4\xaf\x0e\x94\xd1\x58\x7d\x29\x5b\x79\x4a\x4b\xf2\x42\x48\x02\x1e\x67\x62\x4c\x30\x80\xfd\x36\xcb\xfe\xf7\xd1\xad\x8e\xa5\xcc\x4c\xca\x30\xba\x98\xbc\x10\x46\xc6\x96\x93\x59\xb6\xb3\x3c\xaf\x7c\x9d\x09\x49\x25\xfb\x7d\x74\x96\xa0\x1a\xb8\xec\x9e\xa2\x45\x7d\xb1\x1c\xa4\x8c\xdc\x31\x89\x51\x3f\xa7\xf8\x1f\xb2\x12\x09\x7b\x4d\x5e\xbd\x7c\xf9\xcd\x29\xb1\x43\xf8\xda\x61\x07\x2b\xa6\xc3\xd4\xb0\x3b\xb6\xa2\x05\xa2\x44\x7a\xba\x9d\x3c\x60\xf9\x88\xc7\x42\xc3\x46\x8c\xaf\x3f\x4c\x9e\x9a\x3a\xcd\x1d\x12\x14\xa8\x55\xbe\xe6\xe2\x35\x09\x41\x89\x2d\x50\x07\x62\xb0\x55\xf2\xcd\x72\x26\x57\x9b\x2f\xff\x2f\xf1\x99\x16\x66\x79\xdc\x23\xcc\x6e\x63\xac\x6b\x9f\x4e\xb1\xfe\x42\xec\x95\x3f\xbe\xfc\x97\xbd\x6e\x32\x1f\xf9\x7e\xfa\xc1\x06\x49\x01\xc2\x60\xa1\x37\x42\xf2\xbf\x23\xba\x5f\x6e\x71\xaf\xc1\x85\xe7\x63\x86\xe8\xaa\x25\x20\xa9\xb9\x93\xcc\x02\xd4\x54\x0b\xab\x4d\xf9\x69\xd0\x7b\xa5\x4e\xd0\x7d\x40\x4a\xc9\xb8\xd1\xc8\x28\x04\xd8\xdd\xb4\xc6\x9a\x88\x73\xc8\x63\xf7\x1d\xd2\x35\xaf\x09\x42\x37\x98\xa9\x90\xb0\x0c\x68\xfc\xa1\x47\x12\x01\x1d\x02\xfc\x99\xb9\xe4\x3b\x9e\x32\x8b\x53\x85\x59\xbf\x0c\x2f\xb5\x1d\xcb\xba\x47\x77\x38\x0d\x04\xc9\x2c\x7b\x24\xb4\xdd\xe2\x76\x42\x48\xb0\xab\x9f\x23\x73\x24\x60\x85\x03\xe5\x22\x5c\x78\xdb\x71\x83\x5b\x9a\x8f\x11\x73\xd7\xf0\x11\x42\xc2\x55\x27\x0a\x7e\x3f\xb9\x9a\x41\x2b\xdc\x2f\xfc\xbc\xc1\xaf\x2b\x29\xf9\x07\xf6\x42\x93\x22\xfb\x73\xa4\x4d\x1d\x98\x32\x4d\x0a\x45\xfb\xc4\x08\x87\x68\x8b\x25\x44\x5e\x3c\x3e\x8e\x2f\xe8\x1d\x4b\xf1\x30\x70\x78\x6f\xbd\x59\xb0\x66\x2e\x82\x23\x81\x19\xcb\x32\x5d\x62\x16\xd7\x7c\x3f\xcd\xd5\x74\x12\x65\x39\x9d\xbf\xf5\x81\xe8\x83\x68\xba\x66\xb1\x18\xf3\xbe\x44\x5d\xae\x7e\xe7\xb3\x72\x7b\x27\xec\xa3\x8e\xdf\x35\xe6\xa6\x69\x76\x84\x59\x68\x3e\x64\xba\xa5\xdd\x74\xb2\xd7\xfd\xf2\x75\xfa\x15\x26\xfb\xa0\x0a\x5d\xbe\xb4\x59\x3f\x6c\x86\xd2\xa1\xd6\xb2\x23\xf5\x72\x3f\xf6\xa6\x60\x1b\xe4\x67\xec\x3f\xd6\xad\x0e\xe5\xce\xee\xea\x27\xfb\xf5\x5e\xd4\xff\x80\xde\x6f\x28\xdc\x5a\x69\x8c\x80\xbe\x81\x10\xe1\x18\x3e\xe2\x9e\x2c\xf4\x01\x5d\xdf\x01\x44\xf4\x1d\x63\xe8\xd0\x3e\x0e\x1a\x24\x0f\x15\x52\xed\xa0\xfd\x00\x6b\x2d\x1f\xe0\x49\x4c\x58\xac\x11\x4a\x76\xaf\xf6\x00\x47\x4e\xe1\xe7\xdb\x42\xa1\x51\x66\xac\x8a\x51\x0e\xef\xb1\x2d\xe4\x82\xfb\x30\x22\x65\x77\x7d\xc8\xae\x6f\xde\xbe\x9d\x2e\x66\xef\xa6\x97\xcb\xf9\x6b\xa2\xe0\x01\x8e\x13\xb3\x87\x00\xf5\x99\x39\x3d\x3c\x26\x89\xb1\x3e\xf7\xa5\xed\x5e\x9d\x92\x84\xed\x78\x60\xa3\xa5\x27\x41\xbc\xe0\x28\xef\xd9\xc1\x9d\xeb\x61\xde\xdc\x94\x5e\x5b\xc5\x3e\x74\x4a\xdf\x5d\x3f\x9e\x5c\xd3\x77\x1b\x08\x17\x59\x9f\xd3\xfe\xba\x61\x71\xf6\x3f\x94\xa3\x4c\x79\x6d\x29\x9d\xae\xac\x0d\x1a\x84\x42\xc3\x5c\xf5\x4e\x42\xfc\x12\x03\xd5\x47\xef\x24\xba\x0e\x92\x80\xa1\x12\x6d\x2e\xfb\x99\x45\xef\x8b\xe2\x25\x38\x5f\x52\x77\x20\xb0\xa9\xdf\x01\x0e\xa6\x62\x45\x53\x36\x36\xab\xf3\x62\x7e\x36\xb9\x98\x9a\x93\xfa\xe4\xec\x62\x3a\x59\x9c\x9c\x9a\xdb\xd6\x8e\x8b\x42\xd9\x9f\xa1\xd9\x9b\x32\x1d\x8f\x61\x72\x6a\xa6\xd4\x95\x09\x50\x04\xc7\xe4\x9a\xb9\x6a\xbe\xfc\x5a\x56\x53\xf9\xf1\x8a\x25\xd0\x1c\x84\x25\x74\x01\x4b\x34\x3a\xeb\xb4\x8d\x4e\xbd\x85\x2c\x8a\x5b\xfd\x90\xdb\xe0\x5f\x63\x7c\x23\xf9\xc7\x09\xb0\x0e\x13\x21\xc9\x49\x26\x32\x16\x63\xc1\xf5\xba\x87\x2b\x7a\x5f\xb8\x2a\xbc\x40\x27\x2f\xaa\x9a\x90\xa6\x1d\x9f\x4a\x02\x0c\x4e\x0a\x99\x76\xd4\x2f\xc2\xf0\xaf\x9b\xc5\x05\xf8\xde\x7a\x91\x59\x54\xaa\xf4\xbc\x1b\x16\x93\xd2\x1c\x53\x6d\xe9\x51\x4d\xb5\xd7\x2e\xe0\x21\x30\x63\x3f\x6d\xb4\xe8\xdb\xfb\x51\x19\x16\xe2\x37\x44\x32\x81\xfd\x69\x6a\xff\x6c\xf3\xd1\xd9\x46\x05\x11\xfe\x21\x8c\x89\x19\xca\x8a\xa0\x3e\x3e\x35\xd4\xa7\xb2\x78\x4f\x42\x9c\x0d\xf0\xea\xd8\x4f\xde\xd3\xb4\xb0\x50\xd8\xf2\xeb\x39\x26\xf7\x1a\x1d\xdb\x31\x6a\x7a\x9b\x89\x5d\xd3\x1b\x2d\x8c\xdf\x92\x4b\x13\xbb\xbf\x11\xb3\xd3\xc2\x30\x36\xa4\x50\xf6\x89\x9f\x69\xe8\xb5\xc6\x5a\x54\xd1\x33\x47\x72\x48\xd4\x8c\x6b\xd7\x51\x62\xb7\xf6\x5a\x72\xec\xf8\x2d\xa7\xed\xb3\x07\x6f\xd5\x5b\xf2\xd5\x03\xb8\xda\x5a\x7a\xd4\xe8\xad\xa7\xb7\xf4\x68\x11\x5c\xd7\x1b\x80\xe1\x05\x3f\x12\xd5\xac\x8c\xc4\xc0\x17\xa1\xb8\xcb\xf3\x4c\x60\x1a\x0e\x00\x2d\xb9\xc0\x0a\x94\x22\x1c\x94\x7a\x2f\xf7\xe4\x86\xda\x6b\x04\x54\x5c\x8f\xd5\xb2\xa0\xe5\x07\x2f\x74\xab\xa6\xf2\x5d\xed\x54\xad\x57\x04\x71\xc8\xc7\x5f\xea\x1b\xf1\xa9\x84\x61\xaf\x86\xc5\x46\x34\x7e\x27\x94\x96\x95\x14\xa5\x86\xe7\x93\xb6\xda\xd2\xb4\x72\x60\xa9\x6e\x73\xd3\x56\xe9\x63\x55\x9b\xa7\x5d\x7f\x93\xd3\xa8\xb1\x61\x69\x47\x75\x6f\x0b\x9e\xb4\x35\xc4\xc2\xe3\xc2\x3b\x2b\x34\xc1\x86\xb7\xbf\xa0\x65\x9c\x3d\xe0\x56\x8f\xee\x0a\x9e\x6a\x64\x29\x51\x0f\x4a\xb3\xed\x29\xe1\x99\x83\xe4\x36\xb3\x38\x67\xc6\xf0\x37\x5b\xae\xfd\x5a\x6f\xa8\x26\x2b\x9a\x99\x1d\x0c\x90\xd1\x63\x50\x89\xef\x83\xd8\xfc\x10\xae\x17\x3b\xc3\x45\xdc\xbf\x28\xff\xf9\xe5\x57\x4f\x7e\x8a\x95\x81\x99\x6b\x5a\x5c\x70\x2d\xac\x62\x4a\xe0\xf8\x9a\xef\xa9\x53\x6f\x27\x20\x39\x98\xe4\xc5\x97\xff\x2c\x3d\xb9\x69\xf5\x61\x38\x82\xcd\x0d\x1d\xe6\x60\x89\x07\x36\xa5\xdf\x2a\xb5\xf2\x0b\xc5\xa4\x22\x77\x0f\xf0\x62\xd2\x5d\x11\xfa\x3b\x1b\xf3\x9a\x78\x46\x00\x73\x90\xda\x67\x8f\x96\x8a\x01\x60\x36\x61\x9a\xf2\xd4\xce\xe6\x90\x6b\xb0\xee\x4b\xe8\xd6\x2a\x61\x5a\xd3\x75\xca\x11\xfb\x04\x60\x62\x71\x3c\x69\x49\xa6\x69\x8c\xe3\xbd\x5b\x79\x8b\x8e\x68\x3e\x1c\xd0\xfd\x50\xb0\x45\xb0\xb9\x24\x81\x05\x9b\x13\xb6\x6b\x49\x9d\x0e\xe4\xc3\xef\x78\x35\x4b\x19\xc5\xb4\xb5\x60\xcf\xad\x75\x40\x63\xfa\x83\x20\x55\xaa\xfc\xc8\x1e\x0e\xa9\x6d\xdf\x89\xd6\x56\x17\xa6\x24\x0d\xaf\xa5\x2d\x95\x20\x90\xfc\xb4\x09\xd0\xb7\x96\xc3\xd7\x9f\xbf\xce\x0d\x58\x78\x70\xad\x34\xd7\x60\x71\xef\xd2\x42\x11\xbe\xc0\x3e\xff\x85\x50\x18\x31\xef\xc8\x60\x39\x51\x75\xcc\x06\xee\x73\x69\xc1\x83\x80\x39\xcc\x5f\xe7\xa2\x55\xf6\x6a\x78\x6b\x30\x7a\x50\x9f\x86\xfb\x9b\x0b\x0a\xb1\xbd\xb6\x9f\xd2\x7b\x9c\x3b\x6a\x1f\x0b\xac\xa9\xdf\x4e\x2a\x19\xbc\xe1\xad\xe5\xd9\xef\xa0\x83\xac\x37\x3e\xf8\x29\xe9\x23\xcf\x2d\x3f\x86\xc3\xba\x82\xd0\x02\x2d\xda\x20\x4b\x67\x10\xd7\x50\x05\xea\x28\x61\x17\xeb\x94\x1f\x5d\x4f\x61\x46\x85\x8d\x50\x1a\x76\xd5\x32\xe4\xab\xbd\xee\x95\x40\x00\x6d\x5a\xcd\x3b\x35\x72\x5a\xaa\x01\x3c\x14\x17\x0b\x67\x6f\x4a\x61\xec\xd8\x98\x5c\x0a\x6d\x8e\x1e\xb1\xdd\xb2\x2c\x61\xc9\xff\x19\xd1\x62\x29\x69\x4a\xd5\x8a\x3b\xc6\x37\x24\x00\xae\xfa\x70\x26\x57\x33\xe4\xd2\x5d\x89\x4c\xf1\x75\xca\xa9\x8e\xbe\x6c\xb7\xb8\xbe\xae\xdb\x36\x5a\x98\xea\x27\xfe\xed\xf3\xa4\xf4\xdc\x0f\x8c\xce\x01\x41\xcf\xc2\x68\xe3\x0e\x8c\x3a\xe4\xd3\x20\x6e\x9b\x40\xbf\x98\x5b\xdb\xb2\xb5\xb8\xf3\x2f\xe6\xde\x06\x41\x87\xa6\xfd\x60\x69\x34\xc6\x31\x92\x52\x0d\xa3\x10\xc6\xc1\x24\x96\xbe\x4b\x83\x17\xf9\x10\x62\xe0\xeb\xc6\x3d\xae\xd7\xf0\x88\xc8\x86\xd3\x6f\x0c\xa2\x8f\x0a\xed\x9d\x8e\xfc\xf9\xc6\x0c\xd6\x1b\xd8\xcb\xe1\xc2\x01\x28\xf4\x5c\x64\xe0\xe1\x87\xaf\x20\xca\xc9\xa5\x4d\x9c\x7a\xca\x26\x4b\x06\xa9\x3c\x6d\x8f\xd9\x0a\xed\xc9\xfa\x49\x48\x00\x20\xf7\x94\x86\x51\xf6\x6b\x4f\xd4\x5d\x64\x10\xac\x04\x7c\xfa\x16\xa1\xc2\x73\xf8\xc0\x46\x66\xaa\x83\xf7\x00\xcb\x4e\xa4\x82\xa2\xae\xff\x4e\x09\xc7\x1f\x96\x5a\xe2\xab\x00\xe8\xb8\x4f\xb4\x98\x70\x92\xd2\x9d\x90\xc2\x9f\xbe\xb1\xcd\x00\xee\x65\xb8\x03\x7f\xdd\xcb\x23\xd6\x9c\x94\xc4\xa6\x92\xfd\x06\xae\x8a\xa6\xee\x81\xcb\xd4\x3a\xbf\x9e\x27\x57\xa4\xc9\x97\x15\x9b\xf8\xdd\x28\x39\x93\xfe\x18\x39\x56\x5a\x9e\x03\x64\x92\x28\xf4\x87\xcc\x3e\x5f\x4f\x82\x10\x6f\x78\x94\xbe\xc3\x24\x79\x16\xd2\xb0\x4a\xbe\xde\x68\x92\x0b\xa9\xc7\x10\xfa\xc2\x68\x02\xf6\x2d\x95\x09\x84\x28\x59\x4f\xa2\xf9\xc1\x29\xcc\x3d\xf3\xd7\xff\x75\x35\x5f\x2c\x1b\xbd\x88\xb1\x65\xb6\x44\xdd\x08\x42\xed\x84\xad\x32\xea\x56\x5f\xb9\xeb\x5b\x1f\xdb\x31\xc2\x94\x62\x92\x21\x0b\xd9\x4a\xa4\x80\x33\x67\x56\x12\xd0\x5d\x7a\xf6\xe2\x31\x99\x64\x7f\xe7\x10\x6f\x18\xbc\x76\x97\xbf\xda\x32\x68\xd8\x4a\x24\x66\x1f\xf1\xe4\xd6\xd1\xd7\x06\x68\x67\x7c\x41\x4a\x4d\x8a\xac\x24\x66\xf6\x1d\x6f\xba\xc9\x1c\xbf\x67\x18\x3b\xe7\x5e\x53\xb6\x42\xb2\xd0\x1f\xd4\x32\xf6\x18\x3b\x24\x79\xa1\x56\x5c\x8b\xfd\x2e\xf2\xaa\xd7\xaa\x01\x07\x40\xaa\x99\xe4\x42\xf2\xca\x05\xad\xa5\x11\x2c\xc1\x97\x6c\xfc\x77\xf4\xd9\x1b\xe6\xa4\xa6\xb5\xdf\xc6\xc5\x7e\xd5\xc8\xf6\x49\x09\xe1\xf4\x1b\xba\xb8\x98\x6e\x28\x72\x17\x43\x79\x8a\x51\x21\x82\x64\x45\x9a\x62\x20\xb5\xfd\xc0\x3d\x6d\x23\x7e\x96\xfd\x79\xd4\x17\xbc\x75\xa1\x1f\xb0\x98\x4e\x3d\x4b\x9e\x2a\x50\xb2\x99\x04\x92\xe7\x12\xa8\x46\xa9\xe3\x45\xae\x96\x0a\xde\xb8\x63\x56\xa4\xa6\x51\xa2\xeb\xeb\x38\xa6\x14\x06\x39\xba\x49\xa2\xe3\xe1\x4e\xd7\x3e\x34\xd2\xfd\x2e\x22\x4f\xe4\xe0\x0d\x76\x0e\x1d\xff\x98\x41\xf3\xdc\x9c\x62\x88\x6b\x22\x21\xdc\x66\x6b\xf9\x76\x91\xb4\x77\x4b\x1f\x08\xc6\x42\x27\xe2\x53\x66\x76\xc7\x81\xe6\x2f\x54\xdd\xba\x4d\x4b\xc9\x30\xc2\xa1\xd7\x46\x2d\xf2\xfc\xeb\x2e\x0a\x50\xef\xb7\xb7\x2c\xc0\x4c\x18\xd9\xe0\xd0\x24\x76\xe8\xbe\x81\xb0\x49\xcb\xfd\x8c\x96\x43\xe4\x40\x5d\x4e\xae\xbf\xbf\x9d\x0d\xcb\xbd\xb1\xc4\xaa\x03\xcb\x5c\xc5\xb9\x06\x2b\x1b\x74\x8c\xeb\x0e\x25\x10\x82\xb9\x4d\x8e\xa9\x16\xed\xd7\x91\xb9\x5b\x8f\x5c\xa4\xe9\xc8\x01\x56\x99\xfd\x61\x4b\x3f\xa2\xd3\xcc\x7f\xed\x9c\x8e\x8a\xd0\x1d\xe5\x29\xd8\x30\x5a\x90\xb3\x37\x60\xca\xf5\x53\x91\x90\xe0\x1c\xe9\xa7\x0b\x6c\x2d\xe6\x0e\x0c\x40\x73\x10\xc0\x0d\xc6\x50\x19\xf1\x85\xc1\xae\xbc\x42\xae\x40\xd3\x9a\x51\x47\xce\xde\xc4\xfb\x87\x4c\x2c\x5f\xbc\x85\x13\xe4\xca\x01\x99\x26\x25\x18\x1d\xb0\x2a\x03\x79\xa7\xe9\x1a\x7a\x7f\xcf\x56\xd1\x20\xb1\x27\x0a\x6d\x51\x14\x29\x44\xa5\x48\x99\x05\x1a\x32\xc7\xf1\xb7\x40\xd8\xee\x9e\xde\x99\x1e\x09\xb9\x1e\x99\xdf\x9c\x80\xeb\xaa\xf1\x27\xb0\xd6\xf1\x47\xc3\xf6\x28\xd0\xe3\xcc\x72\x4c\x43\xe6\x39\x64\x39\xe4\x79\xfa\x80\xa1\xfc\x96\x6f\xda\xbd\x71\x07\x97\x51\x45\x8a\x4c\x73\x80\xba\x79\x80\x18\x47\xdb\x37\xf1\x48\xa9\x9a\x99\x16\xd2\x4e\x03\xc1\x18\x93\x98\x91\xee\x2a\x69\x1a\xf9\xea\x03\xb7\x63\xa6\xe6\xe4\x9e\x67\x60\xb7\xa1\x20\x84\x7e\x92\x88\x15\x19\xbd\x13\xfd\xd6\x51\x70\xfb\xf4\xa2\xb1\xa8\x39\xc4\x48\x9a\x2b\x05\xd3\x52\xe0\x75\xca\x36\xc0\x18\xac\x9c\xdc\x71\x25\xd6\x19\x9c\xde\xe6\x96\x0a\x8a\x9a\xb6\x9c\x96\x5e\xa6\x15\x10\xae\x05\x76\x6c\xd8\x28\xc5\xa9\xb3\x12\x02\x6b\x79\x0b\xd7\x4d\x32\x49\xb5\xe4\x80\x35\x1b\x88\x03\x77\x70\x96\x39\x84\xc6\x84\x13\xc9\xda\xc7\xe1\x52\xd8\x13\xcb\x45\x70\x9d\x96\x76\xf0\x3d\xf2\xa6\x04\x86\x2a\x2c\x32\x74\x8f\x60\xb1\x7e\xbd\x65\x14\x0a\x52\xbd\x02\x50\x83\xd3\x9a\x4d\xbc\x5f\x65\x1e\xa2\x20\x40\xb8\x6c\x3b\xc0\x52\x99\x83\x6a\x4e\xcb\xab\x59\x55\xfb\x27\xa5\x9d\xb6\x18\xf3\xd5\x8a\x8c\xce\xb6\x26\xa3\xb2\xe5\xac\x0e\x9d\x89\xd6\x19\xb1\x2a\x64\x9f\x66\x9c\xbd\xf1\xc2\x2b\x36\x00\x34\x89\x65\xca\xe8\x0f\xd3\xb9\x12\x2c\xe6\x39\xec\xcd\xb6\xc8\x60\x5b\x1c\xde\xb0\x78\xd5\xa6\x91\x6b\x2a\x69\xa6\xcd\x32\x85\x89\xcc\x88\x2e\xc2\xed\x05\xf6\x91\xe6\xbb\xb7\xd9\x2c\x68\xb8\xe9\xf4\xea\x06\x0b\x08\x5c\xbb\xa1\xd1\xcc\x81\xa8\x00\xcf\xf8\x57\xe8\x93\x7d\x3d\x1c\x44\xd8\x9e\x27\xa4\xc4\x1f\xfb\x67\xf4\x58\x65\xf2\x3f\x73\xaf\x54\x3b\xe3\xeb\x34\xb4\xdc\xab\x6e\xf2\x84\x6a\xe6\xa9\x41\xaa\x2d\x2f\xe0\x4b\x4c\x8d\xeb\x62\x08\x6a\x6b\x62\x4b\x2d\xa6\xcd\x90\xf0\x25\xe1\xf2\x66\x93\xe0\xfa\x12\x0c\x2d\xe7\xcb\xc9\xc5\xed\xbb\xe9\xbb\xf9\xe2\x87\x58\xe4\x8a\xf9\x72\x36\xb9\x85\x9f\x46\x38\xae\x97\x74\x8d\x97\x38\xf3\x8f\xe8\x1d\x6e\x49\xd7\xe1\x8f\x22\x92\x78\x0a\x81\xbc\x41\x18\x40\x2a\xd6\x3d\x02\x7a\x26\xab\x95\x48\x28\x11\x64\x8b\xa1\x36\xdc\x94\x73\x21\x00\xfd\x03\x79\x96\x61\x44\x71\x78\xaf\x89\x9a\xf2\xf3\x1a\xd7\x5e\xd5\xf7\x5e\x97\xd1\x5e\x69\xd3\x2d\x2e\x7e\x87\x68\x0c\x55\xde\x2f\x1d\xa9\x52\x7d\x24\x1b\xaa\xc8\x1d\x33\x77\xe2\xe2\x6e\xcb\x35\x68\xe0\x1d\x54\xe9\x03\x74\x3a\xe6\x77\x1a\x0b\xe5\x43\x06\x85\x32\xba\x65\xaf\x09\xc1\x91\x54\x1f\x5d\x35\xf0\x1d\x4f\xcc\x37\xfe\xbb\x6b\xf6\xb7\x82\x65\x2b\x36\x3b\x8f\x4e\x8a\x16\xed\x8c\x85\xc4\xa4\x22\x78\xfc\xfa\x9b\xcb\x40\x93\xd7\x86\xb6\x30\x42\xbd\x59\x8b\x10\x42\xf7\x87\x40\x08\x95\xe2\xc2\x58\xd0\x10\x1e\xc3\x67\x04\x52\x1d\x80\xa9\xf2\x2c\x61\xbf\x80\x81\x89\x9e\x09\xcd\x51\xa5\x8c\x7d\x2a\x83\x4f\x4a\x57\x85\x97\x56\x42\x47\xd2\x2d\x43\x29\xb1\xd5\x85\x9a\x55\xf3\xa5\x6a\x17\xf9\xaa\x39\x8d\x57\x6f\x09\x17\xb3\x84\xf9\x12\x90\x1b\x10\x62\x30\x0b\x82\x0f\x12\x10\x2c\x94\x15\x62\x47\x49\xbc\x0a\x8f\x6d\x6a\x09\xe0\x8d\xac\xf6\xae\xf4\x23\xd2\x30\x69\xbe\x6a\xb4\x43\x44\xcd\xcd\x13\xb0\x41\x4c\xe1\x9b\xc5\x85\x8f\xa8\xed\x43\xe3\xd6\x2e\xc9\x98\xc2\x1b\x16\x92\xc8\x3e\x5d\xcc\x29\xe1\xf7\xa1\x54\x7c\xfc\x23\x22\x4b\x79\x36\x2c\x16\x60\x59\x42\xa5\xbb\xb5\x61\x5f\x0e\xce\xa7\x13\x72\x47\x57\x1f\x59\x96\x9c\x92\x4f\x1b\xbe\xda\x94\x49\x5b\xaa\xc8\x73\x01\x3e\xb9\xee\x14\xf2\xc1\xf5\x72\xb6\x16\xcf\x5f\xb3\x5f\xb0\x59\x9c\x04\x28\x2e\xa0\xcb\x36\x88\x97\xb4\x3a\x1f\x56\xad\x2b\x5c\x66\xf1\x0f\x16\x81\x21\xcc\x07\x16\xf3\x21\xf5\xe2\x90\xaa\x1b\xef\xde\x07\xf5\x43\xa3\xa4\x1d\x4d\x8b\xe1\xa2\x2a\xec\x0c\x07\x29\x03\x6f\xa3\x39\xd5\x9b\xc3\x4a\x3e\x3e\x8e\xaf\x60\x15\x4f\x3d\x1b\x7b\xe3\xd3\x3e\x29\xb2\x84\xc9\x70\xd5\x97\x8f\xdf\x51\x8b\x63\x96\x76\x55\x12\x44\x00\x34\xbd\x5e\x5b\xea\xea\x71\xd4\x2a\xd9\x60\xfc\xcd\x41\x3d\x87\x67\x6c\xc3\x21\x7a\x50\x86\xbc\x91\x08\x49\x7b\x18\x55\xd0\x67\xc3\x84\x9f\xa7\x31\x3e\xef\x78\x35\xc6\x08\x78\xf2\x1e\x62\x84\x94\xcc\x89\x07\x8b\x00\x7a\xa0\xda\x71\x75\x70\xff\x19\x81\xf6\xa9\xe0\x89\x2d\xab\x11\x0f\x3e\x59\xce\x41\x79\xe0\x75\x21\x79\x4a\x87\x6f\x7d\x20\x00\x6c\x95\x83\x1a\x21\xd2\xe4\xe9\x73\xc5\x08\x79\xe2\x5c\x31\x22\x9e\x3e\xb4\x46\xca\x31\x86\x36\x94\x73\xf0\xd0\x86\x42\x0e\x1a\xda\x8a\x00\x0b\x66\x72\x98\x90\x27\xcc\x0f\x99\x00\x32\x9f\xb5\x74\x74\x68\x5d\xe0\x55\x0a\xdc\xd0\x2c\x21\x49\x21\xab\x6c\xab\xb4\xd0\x62\x94\x30\xcd\xda\x10\x8d\x2e\x4e\x84\x4c\xb8\xbd\x3d\x14\xdc\x7b\xdf\x01\xe2\x5d\xa4\xe6\x87\x84\x7b\xff\x03\x2f\xc9\x55\x93\x42\x52\x88\x7e\x49\x89\xe4\x29\xdb\x59\x48\x39\x53\xe9\x96\x6a\x8e\x84\x09\x9a\xa6\x41\xe1\xb6\x56\x96\x33\xef\x80\x2e\x0a\xa6\x2d\xe6\xb1\x1d\xd8\xd5\x81\x1c\x4c\x69\x78\x92\x88\x96\xf0\xf6\xb8\x84\x9c\x2a\xf5\x49\xc8\x61\xa8\x23\x58\xb0\x3c\xd5\xca\x39\x60\x8e\xf7\xe1\xa2\xf0\x14\x3c\xa8\x13\x83\x8b\xcc\x81\x02\x84\xc2\x40\x53\x08\x51\x53\x4c\x2b\x92\x43\x40\x8b\x1e\x7e\x10\x1f\x36\x88\x16\x0b\x0c\x38\x50\xd8\x96\x02\xd8\x51\x9a\x3e\x10\x8e\xe1\xc5\xaf\x09\x78\x33\x20\xa6\x0a\xf0\xb3\x28\x49\xa4\xc8\x53\xa6\xc7\xc4\x45\x35\xda\x0f\x88\x90\x36\x92\xda\x87\x26\xba\x6f\x34\x38\x26\x87\xdf\x4d\x64\x05\x2f\xdd\xc1\x65\xf0\x04\xae\x3f\xc0\xa1\x07\x7e\x6c\xff\xf4\x87\x96\x79\x94\x30\x6f\x0f\x1f\x3d\x40\xcf\x08\x9c\x09\x84\x26\x84\xa6\xab\x32\x4d\x32\xf6\x16\x14\x6a\xb8\x87\x50\xce\x33\x52\x28\x36\xb6\x71\x52\x67\xf6\xc1\x35\x30\x11\xd1\x3d\x32\xca\xc8\x77\xf3\xeb\x25\x3c\x48\x0b\x09\xbe\xd9\xd1\x48\xd2\x2c\x11\xdb\x11\x0a\xd7\x82\xac\x59\xc6\x64\xe9\x73\x91\x1e\xc5\x1f\x62\x42\xf2\x42\x6d\x6c\x34\x48\x8f\x86\x57\x31\xce\x41\x4b\x31\xae\x07\x5d\x59\x9f\x33\xf5\x04\x8a\x10\x9f\xbe\x12\x99\xd1\xf7\x72\xfe\x6e\x6a\x74\x26\xa2\xf4\xf4\xd6\x74\x06\x67\x36\x28\x8d\xee\x2f\xeb\x79\x41\x25\xe0\x3d\x5d\x4b\x7e\x57\x70\xb5\x82\x4d\xd6\x7c\xdb\xd6\xcb\xbd\xf2\x30\xfb\x16\x3f\x6c\xa5\x3e\xd1\xfb\x71\x0c\x3b\xe1\xc9\x16\xed\x5e\xc2\xd8\x51\xd4\xc0\xf0\xae\x27\x89\xfa\xc8\x86\x6f\x77\x4f\xb6\x98\xea\x02\x9e\xd6\x1b\x90\xf2\x08\xbb\x78\xd3\xe5\x03\xe3\x15\x0a\x75\x80\xfc\x96\xcc\x88\x8e\x52\x07\x36\xa8\x4c\x8e\x3b\xb0\xec\x41\xa6\x00\x46\x58\x1f\xa4\xb1\xc7\x51\x09\x3d\x9d\x64\x25\x8a\x14\x0f\x8a\x3b\x73\xca\xd1\xd5\x26\x1e\xed\x71\x89\xe8\x75\x36\xa3\xc9\x43\x7d\x4a\xba\x5e\xf3\x22\x5b\x33\x00\x92\xaa\x3c\x45\xd7\xde\x2d\x5a\xf6\x2e\x4d\xd5\xc7\x13\x45\x8a\x8c\xff\xad\x30\x13\x03\xfd\xc3\x64\x68\x0c\x97\x91\x24\x3e\xb2\xe1\x06\x23\x62\x19\xa6\xf4\x8e\xc5\x90\x6d\xba\xca\x1e\x7c\x1b\x68\xc9\xa0\x6a\x2f\x74\xc8\x34\x90\xcc\x22\x9f\x7a\x27\x6a\x2d\x8c\x92\xab\x36\x23\x04\xf2\x94\x38\x51\xe6\x3a\x80\x0f\x04\xf5\x17\x07\x48\xe4\x81\x18\xc8\xf0\xcd\x20\x3e\xf2\x56\x21\x2d\x04\xd9\x1a\x2b\x45\xe4\x18\x8a\x04\xef\x9a\xc0\x57\x77\x4a\xf2\x94\x51\x65\x53\x2d\x39\xfa\x7c\x4d\xdb\xa3\xe0\x08\x56\x41\x2d\x45\x9e\x33\x22\x72\x7c\x2d\x4f\x68\x80\x0a\x24\xd9\x29\xe1\xdb\x2d\xdc\x5f\xec\xe9\xdd\xaa\xa3\xe9\x96\xcc\x62\x85\xda\xec\x4e\x88\xa2\xb2\x76\xa1\xc8\xe0\x15\x77\xc1\x72\x01\x96\xc3\x49\x94\xaa\xfc\x9a\x9b\x35\xe4\x33\xcc\x20\xb8\x07\xf1\x3e\xfd\xf5\x29\x3d\x09\xfb\x13\x3c\x6c\x1e\xf1\xd5\x01\xdc\x54\x6a\x3a\xaa\xde\x21\xab\xf8\xe3\xe3\x78\xc9\xf3\x78\xc4\xee\xf1\xdb\xd2\x58\x7b\xac\x7d\x0a\xe7\xce\x4a\x6c\xb7\x40\xa8\x52\x28\x96\x38\x8f\xb7\x1a\x7b\xb8\x78\xc0\xae\x1e\xd1\x13\x24\xc2\x81\x00\x81\x53\x34\x2b\x93\x12\xa4\x6d\x20\x7f\xf4\x32\x78\x4d\x88\x66\x9a\x85\x60\xb5\xdd\x62\xcc\x58\xf1\x8c\x4c\xff\xfd\xca\x5a\x98\x93\x0b\xe2\x48\xaa\x13\x8c\x5d\x46\xf3\xd8\xa8\x2e\x0a\x6d\x76\x6d\x3e\xf8\xd4\x0b\xea\x93\x8e\x33\xfc\xec\x0d\xec\xd6\x3b\x26\x95\x4d\xe7\x7b\xc7\x33\xbe\x2d\xb6\xef\xf1\x93\xcf\x9f\xc7\xe4\x07\x51\x48\x17\xa1\xc5\xc3\x27\xb7\xf2\x37\x47\xd0\xc4\x2c\x6d\x73\xe7\xb0\xa4\xdf\x95\x6a\x59\x52\x1e\x5b\xe6\x2e\x29\xb5\x22\x5c\x3b\x54\x56\x96\xd1\xbb\x34\x7e\x76\x55\x07\xc3\xce\xc1\xc4\xcc\x4f\x7b\x4e\x99\x6d\x50\xd2\x04\x5d\x16\x63\x32\x4b\x89\x2e\x44\x59\x61\xfd\x05\x5e\x72\x9b\x42\x62\x43\x1d\xbf\xfc\x4a\x20\xdc\x44\xc7\x61\xde\x96\x01\x25\x90\xb9\x47\x6e\xa8\x04\x6c\x69\x29\x94\x82\x80\x76\x21\xd7\x6a\xfc\x21\x3b\x67\x29\x43\x86\x6b\x8d\x06\x91\x64\x5b\xb1\x63\xc8\x76\x5e\x32\x0e\xc2\x15\x42\x9d\xc2\xe4\x80\x9f\x41\x4c\xb0\xd9\x42\x69\x9e\xbb\x47\xe5\xb2\xc6\x22\x83\xd3\x1d\x5e\xd7\x3f\x64\x13\x0c\xd6\x21\x2e\x6a\x87\x7c\xa2\x99\x4d\x3c\x48\x99\x7d\xf9\x6e\x86\xae\xf9\x73\x6c\x63\xfb\x4b\x95\x8c\xe8\xcb\xaf\xe6\x22\x04\x20\x35\x66\x27\x0e\x60\x58\x2a\x81\xe5\x7c\xfc\x21\xbb\x30\x3b\x01\x75\x30\x79\xae\x7f\xb7\x85\xd8\x31\xf9\xe5\x1f\x65\x41\x24\x3e\x2a\x83\x9e\x98\x8d\x3c\x36\x17\x34\xe9\xac\x10\xb4\x49\xea\x91\x52\x2b\x70\xdf\x84\x0a\x9a\xcb\x1c\xb3\xd0\x33\x08\x4a\x24\x52\x26\x03\xf0\x4c\x1e\x05\xd5\xf9\x73\x74\xc7\xe5\x80\xaa\x7d\x2f\x24\xbc\x46\x7e\xa2\x32\x81\x39\x9e\x53\x0d\x51\xd1\x83\xdd\x15\xe0\x6e\x40\x1b\x39\x11\x4c\x65\x27\xe5\x73\xa6\x4b\x8a\x34\xa7\xf6\x47\xf6\x10\xdd\xbe\xec\xb0\x54\x20\x88\xad\x0c\x5a\xcb\x68\xb4\xc8\x13\x31\x5e\x55\x54\x07\x6c\x57\x77\x7b\xdf\x50\x38\x5e\xd0\x9f\xe1\x63\x5b\xc0\x2a\xee\xd2\x07\x03\x5b\x36\x14\x2f\xd8\xe6\xf2\xfb\xb7\x6a\x66\x2e\xf1\xdc\xa8\x6d\xfa\xc0\xcc\xc7\x9c\x0e\xc7\xe1\x8d\x79\x34\x9a\x4a\x3d\x26\xd1\x79\x8e\x40\x0b\x61\xcc\xc1\x9f\xa3\xd6\xc4\x97\xff\x84\x41\x14\x52\xe3\x5c\x4b\x6d\x1c\x72\x43\x1e\xc5\x98\x34\x4d\x2a\x19\xb0\x6c\xc8\x7a\xad\xcd\x6d\xb3\xd9\x71\x10\x12\xa5\x1e\xb2\x15\x46\x2a\xdb\x63\x3b\x16\xce\xef\x4a\x41\xb2\x6a\x09\x13\xcf\xb0\x30\x55\x3c\x5b\xc9\x78\x54\x14\xcf\x6d\xd0\x1b\x4d\x92\x11\xfa\xec\x46\x66\x9f\xb5\x14\x0f\x6b\xae\xb4\x7d\x4d\x6c\x09\x49\xb8\x2e\xd6\x6b\x86\xd1\xc3\x22\x0c\x71\xdb\x93\x89\x89\x03\x46\xa8\x74\x2c\x01\x0c\xfc\x7c\x42\x3e\x44\x14\x14\x9a\xa6\xe4\x1d\xdb\x9a\x5f\x34\xd7\x0e\x5f\x72\x4a\xb4\xf9\x69\xac\x9d\x20\x86\x6e\x45\x91\x01\x05\xc2\x16\x04\x92\x17\x6c\xbc\x1e\x93\x57\x2f\xbf\xf9\xe3\xbb\x53\xf2\xea\xed\x29\x79\xf5\xf2\x6d\x2c\x01\xf6\x2f\x05\xcd\x34\xa0\x3c\x60\x45\x66\xa4\xb7\xb6\xea\x17\x34\x31\xe6\xf0\x36\xe7\xe2\x74\x4f\xdc\x10\x85\x1c\x05\xc6\x8a\x66\xe8\x53\x3c\x96\x86\x3e\xc3\x96\xee\x58\x25\xea\xf9\x60\xdd\xb3\x62\x7b\xc7\xa4\x0d\xe4\xd9\x7b\x92\x55\x63\x32\x7a\x65\x46\x57\x32\x05\xd8\x73\xd4\x9c\x46\x66\x9f\x05\x6e\x05\x68\x77\xf4\xbe\x51\x6c\x99\x14\x41\x23\xdc\xa5\xa3\x61\xe5\x99\x4a\x68\x6e\x6b\xa1\x76\x4b\x71\xdd\xc0\x53\xa8\xb0\x65\x37\x39\x56\x4b\xc8\x8b\x73\x4c\xde\x7b\x5d\x7e\x17\x1b\xa6\xe7\x68\x1e\x79\x51\xc1\xe1\x0b\xa0\x6b\x5f\x97\x3f\x13\x3d\xc7\x53\xb6\x31\x21\xee\x69\x2f\xe3\xd4\x88\x75\xc1\x75\xd7\x4f\xef\x3a\x82\x1e\xea\x80\x47\x5a\x4a\xb3\x7c\x7a\xed\x9b\x92\xae\x56\x9c\xd6\x36\xcc\x66\xa9\x37\x93\x49\x69\x15\x6e\xb9\x52\xc6\x52\xbb\x97\x62\x6b\x69\x17\xdb\x9e\x57\x1c\x48\x2b\x31\x42\xb6\x34\x5b\xc1\x15\x29\xb3\x48\x02\x70\x00\x3b\xea\xc6\x96\xf0\xd5\x9b\xc5\xc5\x20\x33\xc2\xc6\x82\xe1\x63\xa1\x0f\xb4\xf5\x51\xed\x65\xf6\x8f\xe3\xa9\x54\x5a\x32\xba\x8d\x72\x1b\x18\x79\xe6\xaa\x20\xec\xe3\xa0\x34\x87\x22\x66\xeb\x6b\x81\x81\x81\xa6\x3c\xbc\x34\x30\x0c\xd1\xb5\x07\x52\x73\xf0\x7a\x0f\xad\xdd\xf8\x05\x9a\xe3\xcc\xf4\x3a\xdf\x0b\x69\xcc\x2d\x96\x8c\xc9\xf5\x6a\xc3\xb6\xac\x64\xe1\x34\x92\x5c\xb6\x3b\xe4\xc0\xb4\xb4\x8b\xfa\x36\x41\xde\x12\xcf\x44\xaa\xe1\x49\xa1\x72\x9c\xba\xf3\xb5\x6a\x8f\x8e\xc9\x85\xb1\x2b\x36\x6c\x4b\x43\x76\x4e\x23\x36\xcc\x58\x47\x15\x9a\xdb\x7c\x3d\x79\x3b\x8d\x65\x3f\xde\x2c\x67\x17\xb3\x1f\x7f\x8c\x51\xe3\xdd\x5c\x4f\x17\x3d\x59\xfb\x7e\x9c\xcd\x2f\xa7\xe4\x66\x39\xbd\x5c\x46\xf8\xe4\x4a\x61\xdd\xac\x7d\xa1\xb4\x16\xdd\x62\xac\x76\xad\x6a\x64\x2e\x8d\x91\x22\x65\x4d\x53\x00\xe8\x18\x1c\x05\x48\x92\x12\xa7\x52\x08\xa8\x89\x8c\x2c\xc8\x57\xa4\x55\xa4\x99\xb8\xcc\x4e\xe5\x30\x9f\xcc\x6c\xb7\x9a\x6f\x19\x90\xc9\xe0\x9e\xe0\xd8\x85\xec\xeb\x2f\x53\xb9\xc8\xa2\xee\xed\xaa\x92\x7f\x2b\xb8\xe2\x70\x3e\x3b\x66\x98\xad\xc8\x44\xa1\x20\xff\x15\xdc\x28\x0a\xb3\xbc\x93\x80\x32\xa8\x6d\xdb\x28\xf5\x2d\xf4\x06\xf9\x5a\x74\xd4\x87\x16\xea\x52\x22\x71\x9c\x54\x99\x5e\x22\x47\x69\x59\x13\xde\x26\x4f\xed\x53\xdc\x89\x7b\x57\x3b\xe9\x0b\xe6\xdf\xac\x44\x78\x51\x04\xe0\x75\x7c\x30\x0b\xc4\x77\x02\xfd\x87\x2a\x22\x32\x22\x23\x67\x67\xe0\x05\xb1\xfe\x8c\x31\xb9\x42\xaf\xa3\xd9\xbf\x78\xd6\xfe\x72\x18\x2a\xea\xa1\x16\x11\x69\xc2\x3a\x55\x30\xc0\xf8\xec\x6c\x4c\xa6\xd0\x10\x7c\xea\x83\x84\x3b\xd3\xad\xc8\x87\xd4\xa9\xac\xb8\xd3\xe6\x4a\x1e\x3c\xc6\x07\xf1\xfb\xf0\x23\xe0\xd7\x76\x7f\xf5\x5a\x0e\x66\x13\xcb\x18\x9a\xe0\xf0\x88\x09\xe8\x91\x18\xc4\x67\x71\xcb\xb0\xef\xef\x78\x83\xfc\x0e\x85\x73\x2a\x55\xbd\x67\x5d\x56\x9b\x77\x1c\xb5\x62\xd9\xbb\xf5\x90\x39\xbf\x6d\x43\xa7\x36\x48\xec\xd0\x4b\x22\xa9\x3d\xdb\x43\x63\xdd\x3b\x16\xc9\xdb\x9b\xd9\x79\xcc\xe7\x11\xad\x06\x1f\xf8\xdd\x9d\x16\xb7\x82\xd6\x47\xaa\x49\x96\x01\x7c\x49\x15\x2c\x8d\x87\x17\x63\xda\x99\xa0\xe8\x2a\x06\x54\x9f\x00\xbd\xb1\x06\xa3\x05\xea\x3c\x11\xfe\xce\xea\x1b\x72\x46\xd6\x60\xde\xd2\xfd\x1b\x7d\x4d\x8f\x24\xbe\x01\x1f\x84\x6b\x77\x93\xdd\x61\xb6\x6f\xed\x25\x7b\x40\xf7\xf3\x94\x80\x0c\xcc\xab\x6d\x22\x78\xec\x35\x0c\x2d\x7a\xe0\xbb\xa7\x46\x1b\x38\xfc\x1a\x8d\x9b\xa6\xb4\xec\x23\xe8\x0c\x98\x8e\x4c\x72\x98\x53\xeb\x7d\xb2\xcc\x46\x0b\xad\xf2\xb0\x73\xfc\xa6\x3a\xec\xf1\xdf\x48\x53\x9b\xf0\x9a\x3a\x1b\x5d\x7b\xbf\xc6\x99\x66\xd3\xca\xdb\x42\xde\x5d\x83\x60\xd9\x18\xf3\x31\x58\xf0\xcd\x64\x48\x78\xe3\xc3\x93\xae\xe5\x76\xd2\xa9\x5a\x4b\x76\x5d\x53\x27\x37\x2b\x93\xf4\x44\x38\xb1\xea\xac\x8c\x06\x69\x1a\xbd\x51\x34\x6e\x26\x65\xaf\x50\xfc\x3a\x06\x30\x83\x95\x34\xe2\xa8\xe0\x4e\x17\x63\x14\x7a\x36\x94\x95\x5a\x73\x6c\x77\xb6\x63\xae\x00\xa8\x49\x9c\xb9\xe8\x2b\x23\xb2\x94\x7d\xba\xa5\x0f\x24\x65\x10\xd3\x96\xe7\x8a\x6c\x69\x9e\x23\x55\x66\x2d\xa6\x6b\x57\xa4\x19\x93\xe6\x7c\xfd\x13\x01\x47\x15\xdf\xbf\xe4\x47\x19\xbd\xdc\xe3\xb9\x0a\x6d\x53\x30\xc2\xce\x45\xc5\x6d\x9b\x4b\xb1\x62\x2c\x89\xf9\x6a\x2f\x4e\x68\xfb\x54\x02\xbf\x17\x42\x72\x4a\xe6\x75\xe6\x29\x6f\xc9\xad\x46\x6b\xbb\x12\x18\x76\x4a\xc0\x53\x36\x26\x8a\x0d\x25\x2f\x43\x3c\x14\xb5\x6a\xb0\xa6\xc9\xfb\x42\x70\x6c\xa2\xb9\x9f\x44\x5c\xc3\xe5\xd0\xd4\x46\xa0\x32\xd9\xbb\xbb\xfc\x6b\xcd\xfe\xfa\x16\xc7\xf6\xbb\x13\xc0\x5f\x07\x32\xfa\xfd\xd3\x16\x84\xea\x66\x6b\x86\x91\xb0\x10\x5e\xb5\x63\x1d\x7a\xb2\xf0\x46\xcd\xd0\x1d\xa4\x37\xe7\x74\x02\x59\xf0\xbc\xf4\x04\xf2\xc0\x13\xc8\x4a\xbb\xbe\x4e\x2c\x12\xa8\xf6\x1c\xfd\xe0\xcf\xfc\xdf\x52\x3f\xd0\x76\xde\x91\xe3\x77\xc9\xe3\xe3\x38\x8c\x0a\xff\xfc\xf9\x0f\xe6\xa7\x66\x92\xfa\xc5\xf6\x55\xba\xa6\x5d\x91\xfe\xed\x67\xbf\xe4\x6c\x05\xef\xf3\x10\x67\xb2\xa1\x8a\x88\x15\x44\x37\x27\xaf\xc1\x93\x62\x43\x3a\x86\x87\x91\xf0\x2d\xd0\xb7\x29\x2d\x5e\x93\x8a\xa4\x88\x26\xb0\xed\xa5\x69\x25\xe7\xcd\x8c\xb5\xc5\x82\xb5\xe1\x06\x54\xae\x0b\xd3\x71\x11\x7d\xce\xb9\xb2\x72\xc0\x18\x72\x77\x61\x87\x8e\x87\x7b\x0f\x95\x6b\x51\x76\x7e\x6b\x90\x87\x57\xcb\xcc\x11\xab\x95\x4f\xaf\xbb\xec\xb8\x68\x05\xca\x94\xc0\xb3\x4e\xa5\x9a\x94\x3e\xdb\x58\x2a\x56\x1f\x6b\x09\x01\x80\xdf\x01\x37\x63\x04\xb3\x88\xa2\x85\xdd\xa5\x62\x85\xd1\xce\xfb\xe0\x13\x88\x52\x81\x21\x10\x92\x91\x75\xca\x3d\x66\xc5\x36\xce\xd0\x70\x93\x6d\x69\x4e\x28\x59\x9e\xf5\xb2\x97\xa3\x16\x62\x60\x1c\x2f\xcf\xa2\xb6\x31\xd4\xd5\xdf\x3a\xef\x53\x5b\x9b\x29\xbe\x57\xdd\xeb\x0f\x80\xb1\x46\x08\x71\xe0\x6a\x85\xf9\x91\x8d\x06\x9f\x5c\x5d\xe1\x87\xe7\xf3\x77\x93\xd9\x25\xf9\x69\x34\xf2\x41\xf0\x2e\xf8\xfd\x67\xf3\x29\xa4\x75\x5c\x4d\x96\xdf\xfd\xfc\xe1\x43\x86\x22\xf7\xfa\x71\x58\x55\xa3\x11\xc4\x14\x5c\xcd\x17\x4b\x14\x39\xfd\xf7\xc9\xbb\xab\x8b\xe9\xb5\x15\xd3\x24\x63\xfb\x30\x02\xf2\x8e\x5f\xe8\x36\x4f\xd9\x78\x25\xb6\xa4\xf5\x7f\xff\x2d\xfc\xe9\x20\xb1\x41\x3f\x6c\x1f\x20\xc4\xbe\x22\x16\x3f\x1b\x1f\x4f\xba\xed\xe1\x7b\x21\x1a\xa5\xff\xe1\x5e\x88\x81\x35\x40\xef\xfe\xeb\xcb\x97\x2f\x3b\xba\xe5\xb5\xf9\xcd\x40\x5f\x93\x6a\x60\x17\x1c\x62\x9d\xf1\x76\x7a\xc1\x1e\x5b\x8a\x3a\x94\x6c\xcb\xdd\x38\x57\x15\x36\xab\xa7\x52\x6f\xa1\x42\x2d\xe4\x5b\x70\x06\x3f\x81\x7c\x6b\xaf\x0f\xeb\x2d\x68\xe1\xe3\x02\x14\xc4\x76\x3a\xae\x6c\xb8\xdf\xcb\x06\xf4\xb0\xa4\x64\x48\xb8\xe7\xd9\x9a\xc9\x5c\x9a\x71\x44\x17\xe7\xb0\x79\x85\xb0\x46\xb4\x13\xb7\x60\x62\x37\x79\xc0\xa1\xeb\x09\x49\xe4\x85\xf7\xca\x58\x09\x6b\xe8\xcd\x19\x16\x54\x81\x17\x22\x73\xb1\x6c\x8d\x0d\x0f\xab\xe9\xc3\x6c\xdf\xb3\xde\xd6\x4c\x98\xb0\xce\x7d\xb2\xfa\x9e\x35\x74\x24\xba\x04\x75\x34\xde\xb1\xda\x6b\xc9\x02\xc4\x48\xa6\x44\x21\x3b\xb2\x1e\x82\xda\x02\xff\xaf\xe4\x4a\x48\x55\xa2\x3b\xc6\x56\xee\x7e\xa5\xdd\x79\x16\x0d\x35\xda\x9b\x5f\xbf\xda\x1a\x51\x54\x7b\x77\x6a\xe4\xde\xda\x9b\xe1\x1f\x95\x40\xbc\x6d\xfb\xef\xb8\xc9\x6f\x2b\xb5\x28\xc9\xe5\xcf\xe3\x92\xe1\x60\x18\x9e\xe9\x5c\x96\xfd\x2a\x5c\x3a\x93\xc0\x50\x7c\x7e\x70\xe2\x41\x5b\xab\xeb\x88\xd2\x5a\x7e\x7c\x1c\x7b\x90\xb6\x2e\xe3\x7d\xaf\x61\x4d\x86\xf3\xbe\xc0\x01\x7a\x55\x68\xa7\x20\x41\xc2\x32\xf7\x7e\x07\x5f\x9c\x99\xcf\x97\x0f\xf9\x11\x09\x7c\xfb\x0c\x68\x87\xd2\x8d\xaf\x52\x4f\x99\x2e\x11\x9a\xdb\x27\x8d\x78\x8f\xcb\x7c\xdf\xab\xfa\xde\x2c\xe8\x7b\x45\xef\x7d\x05\x2f\x95\xae\x9f\x76\x03\x9d\x77\x7b\xaa\xf6\x39\x0a\x0f\x76\xaa\xd5\xd5\xb6\x67\xa0\x27\x2a\x7a\xca\xa4\x68\x38\x50\x03\xc1\x4f\x9c\x1a\x51\x27\xeb\x9e\xde\x83\xb7\x88\x4e\x4f\x68\x43\x0b\x06\x6f\x1b\x4d\xaf\xc3\x47\x5a\x83\xfb\xcf\xbd\x4f\xed\x6e\x33\xfb\xc9\xde\x09\xfd\xf5\x9e\x73\xf6\x66\x56\xed\x98\x17\x15\x6c\xf3\x7f\xfe\xdb\x8d\xeb\xb7\xca\x3e\x8f\x07\xc5\x2d\x1c\x14\xb7\xed\x07\x45\xbf\x7e\xe0\x5d\xf2\x69\x4c\x7c\x44\xeb\x54\x50\xff\x8a\x77\xcf\x81\xe1\x57\x8a\x2d\x98\x3a\x57\x54\x6f\xa2\xdb\xeb\x19\x95\x7c\xe5\x47\x87\xfb\x58\xca\x2a\x67\x0c\x0d\x05\x75\x68\x70\xd8\x61\x5f\xd5\xe3\x88\x47\xbd\x53\x2b\xec\xef\x9e\x6a\xf0\xbd\xc3\x7e\x40\x65\x3f\xf2\xfc\x0d\x4f\xd9\xb7\x0f\x9a\xa9\xcf\x9f\x4f\xcd\x47\xe6\xef\x33\x51\x64\xda\x5c\xa3\xcd\x18\x0d\x19\x93\x4e\x91\x11\x9d\x14\x5d\x47\x09\xc5\x62\x45\x9e\xc2\xb7\x73\x73\x24\x2e\x1d\xa7\x45\x80\xa8\xbd\xe3\x00\x97\x05\x61\x11\x0f\x41\x46\x9d\xd9\xb8\x80\xc6\xb2\x25\x46\xa5\xa2\x56\x08\x95\x1d\x66\xb5\x12\x51\x25\x3a\xd2\x05\xad\x33\x2d\x42\xa4\x97\x2e\x7c\xe4\x4d\x2f\x26\x39\xd3\x16\x4a\x44\xc6\x46\x10\xe1\xe8\x20\x69\x08\x44\xfc\xae\xa3\xf0\x80\x37\x0a\xef\x65\xfe\xf7\x2e\x86\xd1\x12\x62\x62\xdc\x5b\xb4\xca\x60\xdb\xd7\x74\x1d\x0d\xdf\xa6\x6b\xbb\x13\xb3\x1e\x17\x2e\x85\x06\x06\xe2\xf1\xda\x3d\xb5\x5f\x38\xe2\x45\xb0\xc5\x57\x8a\x77\x87\x1b\x9a\x3b\xe6\x00\x7a\x13\xd7\x84\x58\x3c\xad\x62\x32\x1a\x26\xdc\x55\xb0\x25\x6b\xfc\xd2\x1c\x38\xed\x9d\x87\x21\x01\x21\xdd\x9e\xdf\x55\xa3\x90\x82\x6f\x2a\xec\x77\x3e\xee\x3d\x2c\xd8\x52\x5b\x15\xdd\x06\xde\x8b\xdb\x17\x88\xa8\xbf\x31\x07\x05\x5b\xea\x41\x68\x05\x64\x1f\xea\xde\xec\x2b\x75\x89\xc6\xc2\xdd\xbb\xed\xfb\xe9\xe2\x7a\x36\x8f\xc6\x58\xdb\xaf\xa7\x91\xc1\x7c\x4f\x53\x9e\x90\x7f\xbb\x9e\x5f\x12\x71\xf7\x3f\xd9\xca\x93\x4d\x06\x26\xea\xc8\x41\xfc\x96\x99\x05\x10\xd4\x98\x53\x49\xb7\x4c\x33\xa9\x4e\xcb\x25\xc6\xb8\xde\x00\xb0\xd8\x28\xe5\x19\x33\xdb\x14\xcf\x80\x3b\x23\x65\x63\xf2\x06\xf8\xc9\x53\xae\x30\x9e\xcb\x3b\x1c\xe3\x72\x15\x63\x24\x11\x2b\x78\x69\x2b\x03\x2c\xe1\x65\x2e\xce\x72\x1e\xeb\xef\xf9\x7a\x0d\x47\x29\x34\x17\x30\x97\x10\x8f\x8c\x65\xc8\xb7\xe7\x6a\x96\x7c\x3f\x8d\xc2\xe3\x1c\xf3\x8a\xf5\x76\x4a\xf2\x42\x02\xc5\x88\x02\xae\x74\x9e\xad\x84\xcc\x85\x69\x09\x01\x3a\x69\xcb\x62\x38\x26\x57\x80\x2c\x4e\x58\xca\xb2\x15\x9e\x67\xad\xb5\xd9\xec\x4a\xcd\x4f\x81\xd3\xb5\x48\x31\xd3\xd2\xf7\x85\x63\x2e\x37\xad\xdb\x51\xfb\x9c\xd4\xce\xd0\x1e\x9b\x40\xc7\x9e\x02\x3c\xfb\x2f\x37\xf4\xfd\x06\xde\x9c\x37\x3c\x1c\x7b\x47\x4b\xf4\x5f\x73\xd4\x0b\x0c\xfc\x06\x08\xda\x13\x9a\xe7\x23\x77\x15\x1d\x01\x42\xea\x09\x59\xd1\xcc\x82\xba\x64\x6c\x6d\x6a\x8c\x26\x1d\xa4\xa6\x4f\x8d\x61\x84\x47\x32\xc0\x79\x53\x6d\x3e\x68\x14\x6c\xce\x3a\xcb\xcf\x09\xe9\x2c\x56\x7c\xe4\x0c\xf7\x74\x9a\x97\x1d\xa7\x8e\xa7\xa9\x89\xc8\x41\x6e\x9e\xab\x76\x24\xbc\xf7\x8e\xac\xc6\x23\xe6\xc5\x84\xa9\xb8\xf5\x67\xbf\x8d\x29\x62\x0c\xb8\x54\xac\xd5\xa9\xc3\x20\xc0\x0c\x7c\xfb\x0a\xa7\x10\x93\xda\x25\x4a\x47\x8f\xc4\x90\x34\xdf\x88\x3b\x25\xdc\xca\x23\x90\x6b\x54\x09\x58\xe1\x3e\x77\x1d\x2d\xb6\xd8\x79\xf9\xd7\xc9\xe2\x72\x76\xf9\x16\x89\xbc\xd0\xda\x30\xfb\x00\xd8\x99\xde\x00\xa3\x8a\x50\x1f\x08\x81\x8b\x3d\xc7\x24\x47\x45\x36\x7c\xbd\x49\x1f\x48\xc2\xd5\x4a\x14\x92\xae\x59\x02\xa2\x7e\xa8\x08\xd8\xd2\x07\x33\xad\x76\x5c\x71\x97\x95\x60\x8e\x0d\xe5\x51\x2a\x00\x48\x68\x25\x24\xee\x27\x58\xbd\xda\xb0\x34\x25\x1b\xae\x74\x3c\x79\x77\xf2\xfe\xfd\x74\xb1\x9c\x5e\xfe\x38\xc1\x16\xc0\x0a\x2d\xad\x58\xaf\x00\x5c\x8b\x8b\xec\x04\x71\x5d\x4a\x54\x91\x35\xc5\x65\x89\x08\x0f\x5f\x7e\x35\x02\x34\xc3\x14\x0b\x15\x90\x6b\x83\xf0\x8b\x40\x60\x2e\xb4\x64\x77\x77\x3e\x43\x0b\x9a\x06\x49\x07\x10\xc5\x90\x9a\x05\x6f\x8e\x47\xfc\xd6\x25\x2d\x6b\x6a\xd1\x8f\x8d\x72\x2b\x29\x32\x61\x0c\x61\x47\x34\x0e\x0d\x6e\x1f\x26\xe4\x24\xb4\xd4\xb7\x02\xb2\xe8\x8b\x2d\x60\x60\xd4\xe0\xb1\xac\x23\xcb\x66\x0f\x41\xaf\xfb\xe4\xb6\x3d\x57\x14\xc0\x61\x90\x54\x64\x6b\x26\x03\x2a\x38\xb3\xa3\xa3\x89\x8b\x62\x60\x66\xe0\x0b\x2d\xf9\xe6\xe5\x4b\xf3\xfd\x1f\x5f\xbd\x3c\x75\x70\x79\xfb\x72\x3d\x8f\x04\xe6\xf4\x24\xa7\x10\x15\x8a\x6c\xf0\xf9\x86\x66\x76\xcc\x01\xc2\xe4\x2c\x15\x45\x42\xde\x88\x22\x4b\xe4\xc3\x89\x22\x09\xd5\xf4\x8e\x2a\xa0\x96\x4a\xc9\xc7\x4c\x7c\x4a\x59\xb2\x8e\x62\x10\xfb\xa4\x3e\x04\xbe\x48\xf0\xc1\xb6\x22\x34\x24\x33\xf6\xdd\x84\x51\x58\xca\xae\x47\x8f\x99\x16\x85\x46\x98\x2c\xcd\x6c\x03\x0b\xcb\x61\x16\xc1\x68\xf8\xc4\x59\xd8\xd3\x33\xa4\x99\xe1\x8d\x0e\x45\x3b\x26\x9e\x28\xd6\x8a\x69\xf4\xe0\x59\x98\x90\x9c\x7f\xf9\xff\x03\xaa\x3c\x73\x63\x43\x6a\x57\x0b\xab\x68\x29\x9d\x6c\xce\x17\x8c\x8d\x19\x1a\x62\xd9\x6e\x9a\xbd\x83\x16\x96\xcb\x83\x68\x68\x7a\x6a\xc3\x5c\x81\xe3\x93\x71\x3b\x3c\x44\xc8\x7b\x9a\x71\xc8\x39\x75\xa3\x52\xed\xd9\x31\x59\x3a\xbc\x8d\xf0\x86\xeb\x0e\x2e\x16\x8f\xd5\xf4\x59\x93\x92\x6f\x85\x52\xe6\x2e\xd6\x38\x68\x4a\x10\x8e\xd1\x6a\x50\x0b\x62\x4e\x54\x44\x45\xce\xbd\x67\x59\x38\x1e\xd7\xae\x79\xe1\xe0\x8a\xa0\x69\xba\x9f\xb1\x8c\x59\xf9\xcf\xbc\x26\x0e\x5b\x0a\xa5\x8e\xe1\x5a\x70\x0b\x64\x4c\x2e\x05\xa1\x5a\xb3\x6d\xae\x7d\x05\x5b\x9a\x30\x47\x63\x46\x57\x4d\xfd\xf8\xa7\x92\x5c\x25\xc4\xee\x71\x68\x44\x09\x53\x5a\x8a\x07\xc7\x0f\x5d\x1b\x83\x00\xa7\xc3\xf6\xcd\x9e\xae\x63\x32\xb9\xd7\x4c\x36\xd7\xf2\x20\x0a\x38\x5c\x5c\x20\xb8\x34\x96\x19\xde\x57\xb0\xf3\x1d\x25\xe5\x88\x16\x7a\x33\xc2\x57\x0b\xb1\xf7\xa5\xd5\x06\x91\x80\x72\x0f\x75\xb3\x4a\x19\xcd\x8a\x28\xea\xd9\xf3\x6d\x14\xfb\x36\x5f\x74\x9b\x40\xe9\x1e\x0c\xc7\xe7\xc1\xf3\x72\x05\x02\xea\x99\xd9\x07\x98\xdf\x07\xd8\x33\xee\x03\x07\x2d\xfd\x40\x75\xe6\xf6\x81\xca\xda\x27\x97\x96\x39\xf2\xcb\x3f\x80\x30\x4c\xeb\x82\x6a\x61\xa1\x66\x35\x5e\x28\x76\xc2\x5a\xe0\x9a\x6a\x6d\xe1\x43\xf6\x3b\xfd\x4f\x35\xf4\x31\xee\xcc\x28\x67\x23\x28\x60\xc4\xa9\x40\xfe\x34\x0c\x5d\x88\xfd\x62\x0e\xf7\xe6\xbe\x87\x0e\x65\x63\x72\x2e\x72\x01\xc8\x1a\x65\x4a\x7c\xb5\x56\x73\xed\x14\x9c\xd0\xcc\x0c\xa7\xcf\x6a\x6d\x99\xc4\x91\x39\x8c\x4c\x80\x30\x89\x1d\xa5\xb3\x9b\xc5\x83\x76\x4f\x40\x1d\xd3\x4c\x66\x14\x28\xa8\x2b\xc3\xf6\xa7\xda\x32\x0e\x18\x45\xef\x98\xdb\x2a\x58\x62\x59\x35\x31\x3c\xc4\x06\x7a\xef\xed\x44\x61\x49\x9a\x6a\x26\x59\x32\x26\x80\xee\x2c\xf9\x96\x4a\x40\x6f\x23\x2b\x33\x0f\xfd\x1e\x5d\x51\x12\xb2\x36\xf3\x14\xe0\x87\xf6\x76\x17\x40\x09\xe0\xa6\x33\xb6\x00\xcc\x61\x16\xf5\xee\x15\xb1\x0f\x31\xe4\x5b\xfc\xd9\xe4\x6a\xe6\x6c\x9e\xd6\x82\xdf\xc0\x2f\xef\x1e\xcc\xae\x4b\x91\xa2\x79\xbf\x3d\xb0\x13\xef\x5e\x41\x70\x05\x68\xb7\xfb\x06\xff\x3d\x26\xe4\xaf\x68\x02\x6f\xb7\x0c\x6c\xe2\x8f\x6e\x53\xb4\x3f\xf7\x91\x72\xc0\x82\x56\x68\x8b\xca\xfc\x29\x73\x3f\x2a\xb7\xa9\x5c\xb2\x1d\xcb\x34\xa1\x49\x02\x10\xd8\x34\xad\xab\x70\xc7\x4c\x69\x64\xe9\x4d\xc6\x64\x6e\x0c\xa8\xb6\xb3\x6a\xcb\xd7\x92\xc2\x61\x65\x2b\x2b\x89\x83\xb3\xc4\xb6\x66\x45\xb3\xf6\x43\x27\xba\x53\x96\x36\xbc\xdb\xe2\xbe\xfc\x8a\xc6\xba\xdf\x2f\xed\x6c\x33\xab\xa7\x36\xd9\x78\xd3\xf2\xab\x10\xc9\xba\x25\xaf\x39\xb1\x98\x0c\x18\x58\x54\x5b\x97\x75\xb3\xcb\x97\x77\x88\xcd\x9a\x01\xc4\xdb\x8a\x2a\xe4\x50\x75\xde\x3c\x9c\x8b\x5c\x94\x00\x0e\x95\xad\xfe\xcb\xaf\xe6\xc3\x34\xc5\xa7\x7b\xa1\x34\xd7\x85\xcd\xd1\x6f\xda\x38\x36\xac\x9c\x5a\xd4\x42\xcd\x7d\xbb\xff\xbb\xdd\x2b\x67\xf4\x59\x21\x8d\x05\x77\xdf\x90\x2d\x4b\x38\xa2\x2a\x9a\xfb\xce\x5e\x5a\x4d\xa4\x03\x12\xca\x49\xce\xcd\x6e\x8f\x57\x93\xdd\x2b\x52\xff\xe4\x9b\x31\x21\xd7\xb0\xa1\xe2\x25\x09\xe9\x5d\x91\xd5\xd9\x45\x60\xf2\x14\xca\x08\x53\x1e\x69\xe3\x91\xeb\xbc\xb2\x6f\x9a\x09\xce\xa4\x51\x9e\x25\xf6\xee\x56\x01\x18\x73\x0a\x22\x58\x9b\x39\x47\xc6\xe4\x26\xa3\x64\x27\x52\x0b\xa6\x17\x6b\x45\x70\xb6\xd9\x19\x7c\x1a\x90\x4c\x83\x07\xb0\xda\xc6\x5c\x28\x28\xe3\xae\x6d\x70\x32\xf1\xbd\x93\x29\xb6\x5b\x52\x69\x8c\x90\xd7\x64\xe6\x58\x5c\x37\x5a\xe7\x55\xec\x5c\xe4\x51\x60\xc9\x6b\x12\xfc\x44\x55\x7e\xa3\x2c\x8f\xb2\xdd\x0b\xa2\x19\x90\x5f\x57\x89\xa8\x5b\x62\xb2\xdb\x31\xa9\xcd\xa9\xf8\xba\x44\xfa\x45\x2a\x07\x9b\x96\x11\xa2\xfb\x82\x32\x25\xdb\xec\x6b\xa2\xc2\x29\x94\x9e\x14\xb8\xb8\xf6\xca\x28\x2c\xc0\xa3\x7e\x0c\xd7\x6c\x7c\x1e\x02\x80\x9d\x90\x73\xe9\x44\x31\x7d\x0b\x1c\xdb\xb7\x77\x0f\xb7\x2e\x36\x26\xfa\x6c\x1d\xb4\xc9\xbe\x37\xe1\x1d\xa6\x74\x74\x25\x9c\xdc\x17\x19\x4e\xd2\x98\xf0\x76\x4d\x31\xf1\x45\x53\x0e\x39\x1e\xa9\x88\xbe\x55\x85\xda\x38\xa8\x54\x6e\xf4\x12\x16\x7a\xd2\x14\x8e\x54\xc6\xb3\x44\x7c\x52\xc4\xbe\x48\x92\x8b\x38\x73\xdb\xa2\xe6\x0c\xb1\x45\xdb\xe5\x5e\x89\x4f\x4c\x5e\x83\xdf\x62\xd0\x24\x95\x5c\x33\xb2\x2a\x64\x4a\xee\x44\x02\x24\xe3\x6f\x66\x17\x53\x38\x7b\x18\x4d\xc0\x65\xac\x13\x51\x44\x79\x5f\x57\x92\xef\x8c\xaa\x32\x17\x28\xc6\x18\xa5\x56\xc4\x8e\xad\xd0\xcc\x42\x09\x2d\x0a\xd8\x34\x33\xe4\xf4\x52\x8e\xf5\x02\x9d\xb4\xed\x35\x73\x74\x80\x86\x89\x61\xdc\xba\x76\xfa\xc0\x31\xfd\xc8\x73\x42\xe5\x6a\x63\x6c\x62\xff\x8e\x68\xdd\xf0\x3d\xe2\xa7\x2f\x4e\xb0\x30\x17\xe4\xef\x3c\xb7\x24\x0b\x99\xe6\x2c\x63\x43\x42\xaa\x7f\x1a\x8d\x68\x9a\x8a\x4f\xa3\x9c\x72\x4f\xcf\x3f\xc2\xd3\xfc\x7f\x91\xd1\x28\xe1\x2a\xf6\xfd\xcf\xc3\xd0\x2d\x5a\x6a\x1a\x2e\x29\x13\x3e\xfb\x02\x52\x5b\x32\x31\x72\x0f\x85\xee\x6f\x78\xff\x73\x7f\x00\xac\x23\xfc\x11\x12\x29\xfc\x1c\xdd\xd0\x22\x15\xbf\xbb\xb9\x58\xce\xae\x26\x8b\xe5\x1f\xde\xcc\x17\xef\x46\xe7\x93\xe5\x84\x9c\xcd\x2f\x97\xd3\xcb\x25\xf9\x6e\x76\x7e\x3e\xbd\xfc\x39\x22\xf0\x27\xfc\xd9\xcd\x72\x4e\x9a\x84\x5c\x4e\xae\xcf\xe6\xd7\xcb\xf9\xcf\x91\x8a\xaf\x16\xb3\xf7\x93\xe5\x94\xc0\x8f\x3b\x6a\x3a\x9f\x2c\x67\x04\x0b\xcc\x9c\xe0\x59\x4c\xf0\x3a\x15\x77\x34\x75\xe8\xd9\x3f\xfb\x7b\xf3\x4f\x2e\xd7\x4d\x8d\xc7\xe3\x9f\xc9\x4f\xee\x73\xf7\xc3\x58\xe5\x0e\x34\x1b\xe5\xf2\x9f\xfd\x56\xf2\x93\x4b\x7c\xe3\x28\xd0\xfd\xd0\x7e\x1f\xd3\x6f\xc3\x93\x84\x65\xb1\xea\x9a\x0b\xe1\x6e\x1d\x29\xd2\x1a\x3a\x40\x57\x5a\xc4\x62\xee\xa9\x36\x7b\x7e\xa4\x5c\x74\xef\x33\xf7\xee\x58\x65\x66\x35\x44\x4f\x76\x73\x20\x9a\xde\x8a\x97\x0e\x29\xfb\x22\x42\x02\xca\xbd\x88\x94\x28\xaa\x43\x37\x48\x03\xcd\x73\xb2\x92\x54\x6d\xa2\x6d\xa8\x44\x52\x59\xb3\x4f\x53\xc2\x33\x63\x4f\x0b\x42\x33\xb1\xa5\x69\xac\x7d\x79\x5e\x3a\x76\x01\x7d\x30\x52\x09\x42\x25\x96\x16\x62\x2f\xbd\xbb\xe0\x03\x07\x49\x8b\x4e\xb5\x00\x17\x20\x52\xb8\xd0\x1e\xa4\x8e\xdc\x53\x1e\x87\xba\x28\xc1\xcf\xf7\x43\x6a\xd1\x0d\x5c\xa8\x15\xd7\x91\xac\x96\x92\x8a\xbe\x87\xaa\x5d\x08\x7b\x68\xb2\xbf\x2e\x83\x62\x07\x2d\x4e\x7f\xae\xc5\xa2\x17\xf6\x4f\xae\x48\x1c\xc3\xdd\x83\x66\x0a\xae\xbf\xa9\xa0\x71\x13\xd9\xfc\x8c\xa8\x15\x04\x96\xc5\xd2\x49\x57\xf7\x64\x34\xda\xb5\x3e\xef\xc5\x0b\xee\x86\x96\x70\x17\xe7\xa1\xe5\x6c\xcc\xd7\x68\x60\xc1\xbc\x18\xf6\xfb\xf6\x25\x6d\x57\xb1\xe8\xb7\x8a\x41\x58\x9c\x3e\x06\xa5\x75\xc8\x08\xc0\xf6\x23\x62\xf0\x17\x2d\x8b\x34\x61\xc6\xc4\x8e\xf5\x5b\xc2\xb4\xa6\xeb\x34\x32\x37\x9c\x05\x14\xed\x12\x6b\x7a\xb5\xee\xd6\x09\x57\x31\x43\x0e\x5e\x4d\xe3\xa5\x62\xcb\x04\x8a\x45\x56\x06\x98\x93\x70\x30\x0c\x1a\xf9\x6a\x34\xdb\x13\x8a\xc6\xbc\x3c\x9d\xf1\x6e\xad\x94\xc1\x36\x35\xb2\xad\xe4\x5e\xda\x24\x57\x84\x3a\xc4\x7c\xfc\xc9\x29\xa8\x49\x33\x22\x3e\x65\xfe\xc3\x98\xc2\x71\x2c\x77\x74\x4f\xf9\x6f\x3d\x64\xfd\x29\xec\xc6\xc1\x37\x80\x0e\x21\x72\xc9\x99\xfe\xf2\x8f\xf1\x87\xac\xc6\x05\xf6\x21\xf3\x58\xd7\xff\xb1\xba\xf7\x2e\x5b\xd0\x78\x84\xca\xfd\x07\xb8\x46\x02\x6f\xb3\x95\x5d\x26\x8f\xb6\xf6\x66\x63\x9f\x54\x9b\x6f\xfb\xa4\xda\x51\x4f\xee\x93\x4a\xcb\xf7\xfa\xc5\xf7\x58\xdf\x3e\xe9\xe8\x8c\x6a\x3f\xb7\x75\x88\x8a\x2e\x29\x90\x14\x5d\x53\x9f\x62\x13\xd3\xb4\x8c\xea\x78\x30\x0b\xa3\xab\x8d\x0d\x47\xe4\x19\x39\x41\x04\xda\x93\x0a\xeb\x1f\x7e\x78\x02\x4d\x60\x32\x8a\xf7\x2f\xd6\x19\xb7\xf1\x89\xa1\x24\x80\x89\x75\xa8\xdc\x34\xe8\x07\x27\x37\xa2\x17\x52\x5f\xc4\xf6\x66\x4b\x4b\x11\x6b\x54\xb6\x23\x3b\x2a\x21\xa8\xf8\xca\x6a\xed\x82\x8b\xd5\x26\x64\x87\xca\x8a\xa8\x75\x9c\xd2\x32\x80\x07\x0c\x9b\xed\x1d\x87\xb8\x8b\x26\xa9\xa6\x9b\x43\x40\x5c\x90\xdb\xac\xdb\x2e\x0e\xd2\x01\xdf\x45\xda\x84\x16\x18\xd1\x85\x44\x9a\xf8\xfb\x7b\xd8\xd8\x45\xca\x08\x5b\x6d\x20\x6d\xa3\x8c\xfe\x60\x99\x96\x0f\x01\x4c\xc9\x79\x79\x4c\x45\x4d\x22\x1e\xe2\x7d\x72\x05\x93\x86\x22\x36\xe9\x2a\x48\x09\x87\x1a\x6d\x58\xd5\x16\xb0\xa2\xcb\x78\x15\x57\x7f\xb4\xe6\xe6\x96\xf1\xb4\x8d\x43\x0e\xf0\x3b\xef\xa3\x51\x54\xf7\x92\xc1\x9b\x83\xb9\xb9\x47\x24\xac\x25\xd5\xf0\x68\x25\x88\xd1\x71\x8d\x4e\xa9\x66\x71\xfb\x29\x1f\x5c\xc5\x3c\x00\xfb\xbf\xfd\xf2\x6b\x84\x46\xa3\x51\xac\xbb\x26\x29\x16\x9b\x10\x8d\x35\x20\x7b\x23\x06\x53\x0d\x6a\x86\x99\xf3\x0a\x39\x39\x7b\xd7\x67\x5f\x6e\x7d\x75\x44\x15\xb1\x26\x8a\x81\xe7\xb2\xbf\x41\x6d\xdb\xe8\x0f\x1c\xc2\xbf\x0d\xcf\xe8\x25\xaa\xcf\x9d\x2c\x20\x0f\xe8\x25\x1a\xee\x14\x0e\xb0\x6b\x96\x25\xec\x97\xcf\x9f\x4f\x89\x64\x54\x89\x0c\x29\x9e\x7e\xe1\xba\x32\xdb\x4f\x8d\xc1\xa1\x6f\x4d\xb7\x15\xca\xff\xe4\x1a\xfe\x8c\xaf\x42\xd4\xa5\xb9\xb6\xad\x30\x1b\x79\xac\x36\x18\x9f\x5b\xbc\x6a\xed\x57\xd7\xda\xb8\x8e\xab\x66\x47\xe1\xd8\x99\x65\x4b\x47\x0e\x2d\x9e\x69\xb6\x1e\xc8\x12\x67\xa9\x69\x09\xcf\x36\x4c\x72\x8d\x64\xc0\xc6\xd8\xb7\xfe\xb5\xd8\xb5\x8d\x49\x08\x5a\x27\x4c\xb2\x04\xce\x0d\x7c\x41\xc3\xb8\xdb\x8c\xa5\xa5\x80\xd6\x6a\x77\x3e\x48\xd5\x9d\x30\x67\x6f\x6e\xaf\x97\x93\xb7\xb3\xcb\xb7\xb7\xcb\xd9\xbb\xe9\xfc\x66\xe9\xb6\xbe\xe8\x08\xdb\xc8\xd4\x40\x01\x0b\xd8\xd5\x7c\xda\xb4\xd6\x70\x90\xb6\x8b\xe5\xcd\xd5\xf3\x6a\x1b\xa9\xa1\x51\xdb\x36\x7a\x42\xa6\x39\x5c\xb7\x23\x4b\x33\xa5\x4a\x97\xef\xe9\x11\x19\x45\xaa\xf9\x36\x7c\xf0\x6c\x91\x55\xe4\x78\x5b\x8f\x4d\x68\x90\x25\xc8\xaa\x4c\x04\x8b\xcc\x6d\x4b\x91\xd1\xb6\x03\x45\xb7\xee\x54\xac\x3e\xc6\x1d\x06\x80\x56\x15\x2b\xda\x67\x23\x6d\x2b\x19\x6b\xb7\x2d\x1a\x69\x6c\xc7\xd9\x1d\x2f\x34\x2c\xff\xcd\x4c\xc1\x3b\xaa\xf8\xaa\xcb\x47\x11\x3e\xb2\x27\xdc\x94\x89\xe9\x20\xa2\x8f\x4d\x19\x53\xaa\xc8\x22\xdd\x6c\xce\x51\x5c\x62\x2e\x03\xc0\xba\xc9\x2c\x56\x4d\x8b\x29\x1e\xae\xa1\x13\xc0\xb5\x71\xce\xb3\x48\x5d\x71\xa0\xa1\x3e\xb0\x41\x42\x46\x1f\xed\xaa\x8c\x65\x91\xe2\xe6\x1e\x16\xdb\x53\x85\x52\x2c\x29\x62\x7a\x1b\x73\x0c\x03\x2f\x62\xe5\xe1\x65\xdb\x58\x63\x31\xc7\x17\x88\xf0\x81\x1c\x8f\x8f\xe3\x4b\x91\x7d\x6b\x26\x80\x8d\x80\x51\x13\x74\x7d\x44\xf7\x2e\x37\x11\x02\xa3\xaf\x5d\x4c\x44\x0d\xbd\xe9\x38\x57\x22\x05\xe3\x08\x25\x10\x74\x10\x2f\xd5\xda\x67\x91\x62\x42\x46\x4f\x3f\x21\x63\x3b\xa8\x23\xa1\x8f\x8f\x71\x9b\xe7\xea\x20\x76\x58\x48\xa8\x1f\xb6\xf2\x25\xcb\x85\x25\xda\x1a\xe6\x5e\x2c\x97\x25\x04\x59\xc4\xa6\x89\x8d\x08\x68\x5d\x87\x35\x51\xb1\x06\xd4\x64\x45\x76\x4c\x4b\x0d\x99\x98\x9b\xb9\xe4\x77\xc0\x23\x91\x70\xf5\xf1\x16\x3a\xe7\xc4\x51\xf0\xc4\x76\x63\x9a\xad\x00\x65\xdb\x16\x16\x44\xdc\xdd\xa5\x7c\x4d\xb5\x90\x5c\x54\x24\xf5\xaf\xde\x1b\x73\x4f\xad\xbd\x14\xd4\xbf\x72\x3c\x7d\x9e\x5a\xb3\x95\xd2\xbf\x5a\x48\x70\x7c\x6a\xad\x28\x24\x56\xa9\xd9\x82\x1c\xaf\x25\x81\xd4\x9a\x96\x45\xca\xac\xfb\x44\x72\x53\x2c\xfa\xc6\x31\x48\x58\x8b\x88\x58\xe9\x16\xc6\x2b\x59\x64\x23\x4d\xa3\xee\xe2\x68\xa1\x2c\xde\xbf\x3d\x00\xf9\x7b\x21\xaa\xf5\x46\x51\xb3\x27\x4a\xfb\x99\x11\xd9\x05\x7a\x03\xaf\x1d\x0e\xb6\xd6\x13\xac\xab\x3f\xea\x59\x5f\x56\xb2\xfe\x24\x64\xdd\xdc\xfd\x90\xff\x50\x89\x25\x6e\x97\xd4\x75\x54\xf6\x96\x34\x6a\x85\xa6\xeb\x0b\x47\x67\x85\xdd\xe2\xef\x6f\xd7\x05\x4f\xc8\xec\x72\x58\x20\x88\x93\xf1\x94\xc2\x1d\x16\x6e\xa4\x2c\x38\xca\xe3\x2f\xf7\xe8\xd9\x8e\x94\xe5\xf1\x19\x97\xc4\xd6\x53\x0b\xbc\x43\x1b\xa3\x48\x00\xd7\x13\xf5\x20\x98\x6f\x59\x89\xbe\x13\x39\x4e\x41\x52\x54\x06\x14\x8d\x95\x54\x1b\x4f\x3e\x1b\x38\xe4\x12\xae\xda\xbc\xcf\x3c\x75\x85\x04\x31\x12\x9c\x4f\x0e\x8a\xb5\x3a\xa6\x3b\xea\x23\x3c\xb3\xd8\x3e\x4f\xa8\x19\xc2\xbc\x3c\x10\xc6\x20\x3d\xac\xd3\x1d\xae\x35\x27\x21\xc8\x4a\x2c\x0e\x31\xa6\x4f\xa9\x8c\xb9\xe9\xd4\x44\x1d\xa2\x91\xef\x98\x93\x2a\x9e\xd0\xe1\x8a\x55\x7a\x69\x4f\x6a\x1f\x1d\xfd\xa8\xdd\x47\xe3\x72\x1a\xd4\xa8\x0c\x55\xce\xe4\xb0\xaa\x0e\x98\x20\x4f\x9c\x1b\xc1\x9c\xe8\x5f\xe7\xf0\x16\xee\x0d\xf4\x21\x95\x0d\x6f\x9d\xb9\xca\x87\xe3\xd8\xb7\x5a\xeb\x16\xaf\x0f\x66\xff\x4a\xc3\xa5\x36\xac\xce\x5e\x15\xea\x96\x20\x96\x68\x11\xa9\x81\xea\x6f\x78\xb1\x56\xeb\x0e\x58\xa5\xa3\x85\xdb\x6f\x65\xf1\x62\x45\xf4\x6c\x6c\x2b\x27\xf2\xbc\x3b\x7a\xa4\xb5\x30\xa1\x90\xcf\xf7\x8a\x48\x48\x06\x58\xc5\x2e\xdd\x65\x2c\x4a\x22\x72\x01\xbf\xe7\x59\xc2\x81\xd0\xb0\xe5\xf9\xc9\x18\xd7\xc3\xee\xb8\x0e\x6b\x81\x0d\x37\xcc\x5b\x06\x5b\xc8\xc8\x69\xaf\x2d\x1d\xf7\x4a\x64\x19\x5b\x41\x92\x0f\xc6\x77\x83\x45\xc5\xe4\x29\x26\x9c\xae\x4b\xe2\xd5\x4d\xfc\x71\x3a\x52\x05\xd0\xea\xf6\x7a\x14\x6a\xe3\xc4\x0e\xc5\x0c\x7c\x10\x6a\x15\xfb\x90\xc7\x3a\x4d\xf3\x3c\x32\xac\x05\x8d\x21\xfd\x46\x7e\x9f\x7d\xcc\xc4\xa7\xcc\x51\x6d\x46\xdf\xdc\x91\x23\x53\x7f\xf9\x07\x80\x01\x08\xb5\xe2\x45\xec\xca\xe7\x79\x9b\xa3\xbb\x4d\xbb\x5b\xba\x90\xc3\x42\xe8\x0b\x19\x8d\x69\x32\xa2\xa2\x65\xa2\xbe\x77\x99\x46\x8c\xb8\xa2\x0d\x4b\xcd\x65\x41\x45\xcb\x46\x2f\x0b\x6d\x98\x51\x85\x05\xdc\xb2\x58\x59\xbd\xe2\x5d\xe3\x92\x3c\x52\x73\xa4\x64\x03\x22\x63\x5c\x58\x8b\x37\xbe\xb9\xd0\x8e\xc9\x3b\xa1\x18\x64\xca\xd9\x30\x43\x48\x49\x19\x2a\xa4\x25\x3e\x71\xd7\x0a\x3f\xf2\x10\xbf\xe7\x7c\xf9\xff\x9a\x8b\x58\x22\x5b\x9b\x84\xf3\xf9\x33\x79\x01\xd9\x64\x58\x0d\xbc\x7d\x96\xcc\x99\xd7\x5a\xf2\x6c\xfd\xf9\x73\x8c\xaf\x7c\x5f\x56\xc8\xc4\x19\x15\x16\xd5\x2b\xcf\xdd\xbb\xed\x85\x59\x50\x66\x7a\xf4\x0d\x17\xbe\x88\x87\x0b\x93\x46\xd1\x51\x2d\xbe\xe5\x19\x95\x36\x3a\xc5\x8f\xea\xe3\xe3\xb8\xd6\x8c\x41\x63\xfc\xf8\x38\x3e\x7b\xe3\xc0\x46\x73\x1e\xdb\x92\x72\xc0\x67\x74\xbf\xec\x16\xd5\x06\xb5\xe7\x72\x9b\x7a\x09\x14\x45\xa6\xe7\xf7\xce\xab\xff\xf9\xb3\xcf\x0a\x8d\x45\x8b\xb5\x14\x8a\x85\xad\x99\x22\x18\x83\xea\x10\x23\xdb\x43\x52\xf7\x7f\xef\x0c\x03\xde\x2f\x48\xf5\xf1\x71\x7c\xce\xd5\x47\xc0\x8b\xfc\xfc\x99\x88\x7b\x62\x3f\xb1\x28\xb4\xf1\x7a\xc3\x62\x88\x99\x19\x16\x8b\x56\x26\x3e\x65\x4e\xd5\x96\xb0\xb2\xda\x2f\x7d\x94\x59\xc4\x27\xd1\x18\x0d\xf4\x21\x5b\xce\xae\x5e\x13\x8f\x6b\xf9\xc6\x8d\x42\x00\x4f\xe9\xe0\x25\x03\xb0\x0a\x40\x9e\xc0\x54\xea\x10\x60\xb2\x65\x90\x9b\xaa\xae\x04\xf5\x91\xa2\x82\x8e\xd9\xa4\xc8\x1e\x26\xa5\x2e\xb4\x19\x43\x9f\xad\xe9\x00\x8d\x1a\xa0\x29\xf1\x42\x12\x9f\x51\xf0\x3a\xfe\x21\xfb\xa0\xe1\xff\xb0\x57\x3c\xa4\x2a\x26\x3a\xba\x8c\x48\xf2\x69\xc3\x30\xa3\xfa\x83\x29\x79\x55\xa8\x8d\x57\xf2\xc3\xef\xe0\x22\x05\x4c\xc6\x2e\xc1\xf9\x13\xd7\x1b\x8e\x05\xd0\x5c\x35\xc6\x10\x60\x8a\xd8\x6c\x2e\xcc\x0e\x37\x3b\x94\x25\x42\x58\x89\x84\x41\xd8\xa3\x1b\x17\xaf\x49\x75\x58\x14\x63\x8d\x00\x6a\x3e\x86\x5e\x55\xa4\x34\xa3\x96\x92\x84\xe5\x7a\x63\xe9\xa8\x3d\x84\x69\xfb\x50\x86\x5d\x55\x1d\x45\x9f\x4e\xcb\x5d\x7e\x27\xb7\x10\x67\x18\xb5\xcf\x4b\xd0\xda\xa4\x90\x98\x74\x5c\x03\x53\x68\xec\xd5\x04\x53\x2b\x35\x93\x99\x0b\x84\x2b\x3b\x73\x85\x19\x79\x98\xdc\xc6\x53\x87\x71\xa3\x84\x5c\x43\x44\xc4\x1e\xf2\x3f\x76\x4b\x38\xe1\x9a\x7a\x78\x6f\xbe\x05\xa8\x6d\x8d\x2d\x2a\xb1\xda\xf6\x2b\xa8\xc9\xad\x60\x5f\x24\x80\xd5\x85\xd0\x1c\x34\xcf\xa5\xb8\x17\x59\xc2\xa3\x51\xd0\xc1\x18\xe0\x44\x2d\x9e\x04\x4b\x1b\x8a\x6b\x5b\x92\x87\x03\xd6\x3e\x3e\x8e\xdf\x60\xa2\xad\xd9\x3e\xb3\xf4\x81\x7c\x12\xf2\xa3\x22\x45\x0e\xc8\x10\x6f\x48\x60\x39\x98\x4d\xf2\x1d\xfd\x85\x6f\x8b\xad\xa7\xdd\x1e\x23\x54\x98\xcd\x6f\xe0\x8a\xd4\x68\xb9\x5b\x26\x6b\x59\xaf\xcd\xc4\xa5\x44\x89\x54\x90\x7b\x9e\x09\x64\xe0\xac\x72\x7e\xbf\x69\xae\xff\x02\xe1\xb8\x42\x3c\x5b\xf2\xe5\xd7\x7d\x3d\xba\x9b\x6f\x1f\xc1\x54\x43\xb3\x17\xf6\x7d\xcc\xcb\xfb\xef\x47\x69\x38\xbe\x84\x26\x0d\x04\xe7\x6f\x62\xb5\x3e\xb9\xb9\x29\xc2\x5b\x78\x48\x67\x4c\x60\x6e\xd1\xb6\x56\x20\x48\x59\x8a\xcf\x29\x67\x88\xbd\x83\xfb\xa5\xb3\xf4\x86\xc4\x21\x5e\xc4\xe2\x10\x49\x4c\x7c\x54\x99\x77\x6c\x5b\x35\x10\xde\xb1\x6d\xa7\x7d\x10\x14\x42\xf3\x20\x28\xd4\x52\x51\xd0\xda\x83\x1a\x59\x97\xd2\xaf\xae\x77\x87\x55\xf6\x6e\x68\x75\xd7\xfc\xef\xa6\x43\x7e\x81\x38\x91\x62\xeb\x86\x41\x05\x63\x3b\xec\x7e\x07\x92\x15\xf6\xf3\x87\xec\x52\x00\x38\x13\x40\x7a\x05\x40\x50\xb1\x75\xf9\x2f\xe3\x97\xe3\x97\xff\x7d\x18\x21\x89\xa9\x50\x24\x2c\x45\x60\x7a\xe2\xfe\x74\x76\x7b\x9f\x9b\x6a\xbb\x88\xce\xbc\xcd\xc7\xc7\xf1\xdc\x05\xe5\x59\x11\xad\xe9\x83\x0d\xbf\x0f\x96\x60\xdc\x2e\xae\x17\xe2\x19\xc9\xa5\x58\xcb\x78\x7e\x6d\x73\xa1\x96\x10\x9e\x86\x02\xaa\x58\xad\x18\x8b\x5f\xd6\x1b\x8a\x74\xb6\xa4\x9a\x4d\x80\xc9\x17\x77\x00\x09\x04\xf7\x34\x22\x24\x24\x14\x60\x44\x67\xbc\xde\x9a\x98\x30\x1f\xa1\xc8\x1c\x22\x2a\x8a\xa4\x44\xb4\xe4\x28\xf4\x50\xe9\x88\xaa\xf4\xd5\xa1\x77\xe6\xc6\x7e\xd1\xfe\xe9\x19\x70\x28\x61\xd4\x06\x40\x6c\x5f\x09\xa9\xcd\xea\xef\x0e\xba\x88\x95\xec\x0c\xc6\x70\x68\xde\xca\xed\xab\xad\xd1\x19\x0d\xbf\x8e\x86\x6b\x98\xdf\x62\xf0\x85\x3b\xdb\xf0\x78\x58\x0a\x4d\x53\xf7\x51\x89\xa7\xd4\x1e\xa8\xb1\x2f\x0c\x8f\x8d\xaa\x30\xeb\xba\xe8\x11\xd5\x51\x72\x8a\xf8\xa6\x74\x3c\x7b\xc7\x4a\xc4\x5e\xc2\x11\xba\x1c\x9e\x27\x9c\x7e\x1d\xcf\x15\x0d\x25\xda\x5f\x30\x5a\xaa\x20\x2f\xcc\x25\x19\x93\x3b\x5b\xbd\x4f\xb1\x1a\xeb\x02\x5a\x14\xd0\xb5\xfd\x6f\xec\x6f\xd5\x0d\x57\x59\xfb\xb8\x6b\xbf\xa9\xde\xea\x90\x73\xab\xc4\x28\xc3\xa7\x96\x16\x53\x2f\xa8\x1c\x71\xe1\x49\xe5\xe6\xd1\x54\x7d\xa4\x76\xc4\x7e\xcb\xb4\x14\x69\x0a\x79\x47\xc2\x62\xf5\xc0\x0d\xaa\x8c\xdf\x8e\x5b\x7e\xc8\xbb\x6e\x1f\xd8\xa8\x0d\xd1\x2d\x64\x7a\x4a\xf2\x94\x51\xc5\x1c\x24\x38\xa1\xf8\x29\x50\xfa\x03\x78\xcf\xeb\x3f\xfc\xe1\x41\x14\xf2\x56\xb2\x5c\x8c\x57\x62\x1b\x6f\x2f\xd6\x61\x9f\xe2\x8a\xcc\x08\xb2\x41\xbd\x7f\x72\x2c\xf8\xdc\x7e\x6e\x09\xf5\xd9\x36\xe7\x22\x52\x4d\xb4\x25\xd6\x30\x33\xd6\x29\xdc\xa0\x34\x4b\xd0\x40\x71\xc6\x89\xb3\x4c\xf6\x56\x71\x8b\xea\xc3\x85\x06\xe9\x1f\xff\xc7\xcf\xff\x3b\x00\x00\xff\xff\xfa\x69\x8a\xab\x73\xfa\x03\x00") + +func cfI18nResourcesItItAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesItItAllJson, + "cf/i18n/resources/it-it.all.json", + ) +} + +func cfI18nResourcesItItAllJson() (*asset, error) { + bytes, err := cfI18nResourcesItItAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/it-it.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesJaJpAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\x7d\x7f\x77\x13\x47\x96\xe8\xff\xfb\x29\xea\x31\x7f\x98\xcc\xb1\x04\x24\x99\x3d\x7b\xfc\xce\x3b\xbb\x8e\x71\x88\x27\xc6\xf6\xfa\x07\x33\x79\x51\x8e\xd3\x56\x97\xa5\x1e\xb7\xba\x7b\xba\x5b\x76\x3c\x1e\xbf\xe3\x96\x21\x18\x30\x0b\x21\x03\x84\x09\x13\x02\x21\xe0\xe0\x60\x93\x21\xc9\x90\x84\xc0\x87\x69\x64\x9b\x6f\xf1\x4e\xdd\xaa\xea\x5f\xea\x6a\xb5\xa4\x96\x21\xb3\x3b\x7b\x96\xc8\x52\xf7\xad\x5b\xb7\x6e\xdd\xba\x75\x7f\xbe\xfb\x2f\x08\x2d\xfd\x0b\x42\x08\x1d\x50\xe4\x03\x7d\xe8\x40\x41\x2b\x68\x93\x43\x63\x7d\x05\xed\x40\x2f\xfd\xde\x36\x25\xcd\x52\x25\x5b\xd1\x35\xfe\x80\xbb\x7a\xc9\x5d\x7d\xe8\xae\xae\x91\xc7\xfe\x05\xa1\xe5\xde\x38\x30\xef\xe8\x55\x13\xfd\x76\x62\x74\x04\x59\xb6\xa9\x68\x25\x64\x2d\x6a\xb6\xf4\x01\x52\x2c\xa4\x68\xf3\x92\xaa\xc8\x79\x84\xc6\x4c\xdd\xc0\x66\xe0\x27\xbb\xac\x58\x7d\x08\x15\x67\x91\x85\xed\x9c\x59\xd5\x34\x45\x2b\xe5\xb0\x36\xaf\x98\xba\x56\xc1\x9a\x9d\x9b\x97\x4c\x45\x9a\x51\x71\xae\x64\xea\x55\x03\xf5\x2c\x15\x0e\x68\x52\x05\x17\x0e\xf4\x15\x0e\xcc\x4b\x6a\x15\x17\x0e\xf4\x36\x7e\xb5\xdc\x93\x30\x21\xc0\xd2\xad\xfd\xe0\xae\xae\xb9\xab\xf7\xc8\xdc\x6a\x0f\x76\xee\x9e\xdb\xb9\x72\xda\x75\xd6\x77\x4f\xde\xac\x9f\xfd\xc1\x75\xee\xba\xce\x35\x77\xa5\x86\xd0\xce\xfd\x2f\x5c\xe7\xaa\xeb\x9c\xe4\x8f\x6c\xef\x7c\x7d\xd3\x75\xb6\x5c\x67\xc3\x75\xce\xba\xb5\xb3\xf4\xd9\x2e\xcd\xa2\xab\xf4\xb6\x6c\xa9\xf4\xcb\xa7\x77\xa6\xb3\x10\xd0\xfb\xd7\x68\xb2\x8c\x2d\x8c\x2c\x6c\xce\x2b\x45\x8c\x0c\x55\xd2\x2c\x54\x96\xe6\x31\x92\x34\x24\x59\x96\x5e\x54\x24\x1b\xcb\xa8\xa8\x5b\x76\x1e\x0d\x98\x58\xb2\xc9\xa2\x48\xde\x1b\x8a\x66\xd9\x92\x56\xc4\x68\x41\x51\x55\xa4\x68\xc5\xaa\x09\xab\x41\xdf\x10\x52\xef\xd7\xc8\x75\x3e\x76\x6b\xeb\x6e\xed\x0c\xa1\x41\xed\x3b\x77\xf5\xb1\xbb\xfa\x31\x50\xf3\x27\x77\xf5\xaa\xbb\xfa\x15\x21\xa8\xb3\xe9\x3a\xdb\xcf\xaf\xdc\x7a\xbe\xf2\x85\x5b\x7b\xc8\x68\xed\xac\x3f\x7b\xfc\xad\xeb\x9c\x74\x9d\x27\x8c\xb8\xd1\xf7\x6b\xb7\x61\x35\x7e\x70\x6b\x4f\xf9\x87\x4b\xcf\x7e\xbe\xbe\xb3\x76\x91\xbc\x50\x3b\x47\x68\xbe\xe2\x10\x0c\xc8\xd8\x3e\xdc\xdd\x6b\x3f\xee\xfe\xe5\x06\x2c\x13\x03\x2d\x22\x5c\xbf\x61\x20\xcb\x96\x4c\x1b\xcb\x09\x42\xc6\xad\xdd\x82\xb9\xdc\x73\x9d\xf5\xe7\x57\xce\xd5\xef\x9e\x73\x9d\xcb\x64\xd6\x04\xfc\x55\xd7\xb9\x21\x96\x3c\x6c\x00\x1b\xa3\x62\x59\xd2\x4a\x58\x46\xb6\xce\x47\xec\x45\x33\x55\x1b\x69\xba\x8d\x91\x5d\x96\x6c\xa4\xd8\xa8\x2c\x59\xe8\xb0\xb7\x18\x56\x5e\x88\x54\xd2\x78\x4b\x4b\xf9\x7e\xc3\x18\x91\x2a\x78\x79\x19\x2d\x48\x16\x1f\x0f\x55\x2d\xb2\xe8\x6c\x59\x2b\x15\x49\x93\xd1\xfb\x4b\x4b\xf9\x01\xfa\x79\x79\xf9\xfd\x34\x34\x08\x83\x77\x9d\x6d\x42\xf9\xd5\xcf\x40\x06\x9f\x89\xc0\x43\xb0\x60\x4f\x77\xff\xb2\x01\x74\xba\xd3\x22\xf1\x46\x74\x24\x19\x0a\xc2\x9a\x6c\xe8\x8a\x66\x93\xed\x24\x66\xc5\xfe\xb1\x21\xe4\xd6\x36\x28\x1e\xee\xea\xdf\x18\xf7\x00\x43\xec\x6d\xdc\xaf\x6f\xfd\x95\x8f\x7b\x87\x33\xdd\xa7\x6e\xed\xe3\x04\xe6\x18\xd7\xab\x64\x69\x74\x34\x83\x51\x55\xab\x48\x86\x81\x65\x22\xa5\x34\xdd\x46\xc5\xaa\x69\x62\xcd\x56\x17\x11\xfb\xde\xd6\x91\x5d\xc6\x48\x32\x0c\x55\x29\x02\x5a\x62\x54\x81\x5c\xab\xee\xea\xd5\xbd\xbb\x5f\x3c\xbf\x76\x9b\x90\xa1\xb6\xe6\x3a\x1f\x82\x0c\xb9\xca\x10\xac\x9d\xdb\xfd\x6e\x7d\xef\x1f\xdb\xae\xb3\xbd\x7b\xe1\x49\xfd\xfa\x06\xe7\x73\xce\x8b\xb5\x6f\xc8\x66\xa9\xfd\xc3\x5d\xbd\xcb\xf6\x18\x07\xdb\xea\x44\xc9\x19\x8b\xd0\x94\x85\x51\x4f\x71\x16\x55\x24\x73\x0e\xdb\x86\x2a\x15\x31\xca\x59\x68\x62\x70\xfc\xc4\xd0\xc0\x60\x0f\x99\xe1\xbc\x82\x17\x90\x8c\xad\xa2\xa9\x18\x64\x3a\x16\xd2\x67\x91\xa2\xc9\xca\xbc\x22\x57\x25\x95\xc9\x1d\x7d\x16\x49\xa8\xa4\xcc\x63\x8d\x8b\x97\x24\x52\xf0\xd3\x1b\xa1\xdd\x33\x3f\xc0\x2a\x85\xe5\x88\xb3\x55\x5f\x39\xe7\xae\x9c\x22\xdf\xfb\x02\x65\x6b\xef\xde\xd7\x3b\x9f\xfc\x97\x5b\xbb\xb4\x77\x73\x63\xf7\xf6\x8f\x5c\x20\x10\x41\xe3\xae\x38\x49\xf3\x08\xf3\x64\x13\x01\x01\xa4\xe9\xb7\x2c\xa5\xa4\x21\x53\x57\xb1\x85\x16\x14\xbb\x8c\x7a\x08\x9b\x53\x16\x98\xb2\xb0\xb9\xbc\x0c\xa2\x5e\x37\x4b\x39\xf2\x50\x0f\x22\x5b\x2b\xfe\x19\xcb\x90\x8a\x98\x3e\x95\x86\x28\xcd\x06\x72\x9d\x8d\xe6\x03\x45\xb7\x61\xfd\xe7\x1f\xea\x67\xfe\xee\xd6\x2e\xc1\xbf\x67\xeb\x3f\x7f\x0c\xbc\x42\x48\x91\x48\x07\xe0\x10\x32\xd8\x9b\x93\x92\x59\xc2\xb6\xb7\xd1\x81\x39\x6c\xf8\x0e\x69\x78\x01\xc1\xd8\x69\xa6\xb7\x73\xe5\x01\x3d\x4d\x41\x76\xff\x15\x18\x9a\x48\x79\x90\xf8\x8f\xdd\xda\xdf\x81\xa1\xd7\x60\x5d\xc3\x0b\x1c\x8f\x46\xe3\xda\xa6\x9b\x90\x68\x22\xba\x59\x6a\x69\x1a\xbb\xdf\x9d\xdc\xfd\xe1\x2f\xa9\x27\xd0\x36\xe2\x55\xb6\x57\x55\xbd\xa4\x68\x28\x27\x21\x22\xfd\x72\x39\x6b\x4e\x31\x72\x96\xa5\xe6\x40\xc3\x02\x5c\x7b\x90\x6e\xc2\xa3\x44\x92\x26\x3c\x45\x8e\xa5\xaa\x61\x98\xd8\xa2\x6a\x18\xc2\xa6\xa9\x9b\xc2\xc9\x03\x16\x5c\x22\x6d\xc0\xae\x7c\xec\xd6\x2e\xed\x9c\xfd\xa8\xbe\xf6\x7d\xcc\x66\x4c\x83\x28\xcc\xfb\x86\xeb\x6c\xa7\xc1\xb7\x05\x82\x29\x06\x25\xd8\xfb\x92\x2c\xe7\x0c\xb5\x5a\x52\xb4\x9c\x89\x0d\xfd\x7d\xef\x14\xb4\x75\x24\xc9\x32\x22\x5f\x5a\x22\x59\x15\x0f\x1e\x21\x34\xf0\xe6\xf4\x48\xff\xf1\x41\x54\xd4\x8d\xc5\x9c\xa5\x57\xcd\x22\x46\x13\xa3\x53\xe3\x03\x83\xb9\xfe\xb1\x31\x34\xd9\x3f\x7e\x6c\x70\x12\x3e\xbe\x9b\xb3\xf8\x9f\x13\x63\xfd\x03\x83\xe8\xdd\x9c\xce\xbf\x18\x1d\x3f\xf6\xde\x7b\xe8\xdd\x5c\x4e\xd3\x73\x26\x86\x13\xfb\xbd\x16\x4f\x7f\x84\xd0\x28\x88\x65\x49\x55\x17\x91\x61\xea\xf3\x8a\x8c\x91\x84\x54\xc5\xb2\x89\x50\x86\xd9\xe6\x64\xac\x2a\x15\x85\xa8\x03\xb6\x54\xb2\xa8\xe6\x01\x4a\xdf\x0c\x46\x0b\xa6\x62\xdb\x58\xe3\x87\xd9\x89\x81\xfe\xb1\x69\x26\x37\x27\x50\x40\x81\x45\x5c\x81\x45\xb3\xba\x89\x24\x6d\x11\xcd\xe8\x55\x4d\x0e\x9e\x7e\x42\x3a\x22\x84\xdc\xda\x3d\x22\xca\xfd\xa3\xeb\x2e\x51\xe3\x56\x2f\xf2\x23\xfb\xcc\xce\xa3\x35\xd7\x79\x2a\x3e\xea\xb6\x22\xa8\xed\x5e\x7a\x50\xbf\xb5\x5a\xbf\x7d\x66\xe7\xf2\x03\xd7\xd9\xdc\xf9\xf4\x91\xeb\x9c\xdf\x7b\xf2\x98\x30\x06\x51\x4e\xcf\x81\x8e\x42\xd4\x94\xfa\xfa\x8f\xf5\xb5\xd3\x44\x4d\xaf\x3d\x75\x6b\x0f\xe0\x50\xb9\xc7\x14\xc7\xda\xa5\x9d\x0b\x17\x9f\x3d\xf9\xb4\xf9\xb9\x10\x4f\x69\x76\xd8\xe5\x2c\x03\x17\x95\x59\xa5\x88\x8a\xba\x36\xab\x94\xaa\x26\xcc\x1d\x19\x92\x29\x55\xb0\x8d\x4d\x72\x05\x42\x12\x02\x6e\xa6\x77\x24\x7d\xe6\x0f\xb8\x68\x23\x45\xcb\xa9\x8a\x86\xf3\x05\x2d\xc0\x56\x55\x43\x96\x6c\x9c\xe3\x8a\x7a\xae\x98\xfe\xba\x40\x6e\x37\x22\xa6\x98\x55\x54\x4c\x10\xb4\x25\x45\x83\xfb\x59\x87\xc8\xe7\x11\x8c\x35\x59\xc6\xc8\x90\xec\x32\x67\xa1\xc0\x7b\x74\x44\x49\x23\x8c\x46\x6e\x25\x33\x96\xae\x12\x05\x4b\x37\x91\x89\x09\x7f\xcc\xfb\xaf\x52\xfc\x9a\x11\x62\xac\x7f\xf2\xad\xe9\xc9\xd1\xe9\x37\x87\x86\x07\xd9\x5c\x07\x3f\x90\x2a\x86\x8a\x09\xbb\x37\xa0\xd8\x07\x4f\x2c\xc1\xbf\x08\xa1\xc2\x81\xa2\x5a\xb5\x6c\x6c\x4e\x6b\xba\x8c\xad\xc2\x81\x3e\xff\x37\xfa\xb3\x5e\xd5\x6c\xf2\xf5\x6f\x7a\x43\xdf\x57\x70\x45\x37\x17\xa7\x2b\x33\xe4\xb7\x23\x87\x5f\x7d\x9d\xff\xba\x0c\x1f\x96\x5b\x65\xfc\x80\xb6\x53\xff\xf4\xc7\x9d\xeb\xe4\x2a\x45\x6e\x97\x6b\x17\xdd\xd5\x8f\x40\xb4\xde\x04\xf6\x7f\xca\x64\xec\xf5\x33\x70\x25\xbd\x87\xd8\xcd\xf5\x9e\xbb\x7a\xc5\xad\x3d\x72\x6b\x77\xdd\xda\x36\xdc\x62\xf9\xd5\x69\xf5\x2b\xf6\xc1\xb9\xdb\xc8\xda\x19\x73\x59\x26\x73\xab\x5f\xdc\x74\x6b\x2b\xee\xea\x65\xb7\x76\x13\x50\xdf\x4c\x35\xe1\xb8\xe9\x51\x7e\x64\x47\x54\xe3\x58\xe4\x7a\x1a\x18\xc5\x79\xc4\x1e\x23\x1a\xe7\x76\xe3\x4f\xbb\xdf\x7d\x5f\xdf\x7e\xc2\x1f\x60\xe7\xd4\xee\xa7\x8f\x02\x5f\x6e\xf0\x63\xef\x63\xf8\xbc\x0e\x86\x80\xf3\x69\xc9\x1d\xc3\xcb\x29\xe6\xbd\xf5\xec\xc9\xb9\x7d\x63\xeb\x17\x20\x0a\xfb\x18\x29\x38\xdd\x66\x14\x4d\xf6\xa8\xd6\x3f\x36\x46\xbf\x65\xe7\xc0\xf4\xd0\xc8\xc4\x64\xff\xc8\xc0\xe0\x7f\x63\x21\x99\x9e\x40\x9d\x0a\x4f\x03\x9b\x15\xc5\xb2\xc8\x51\x4f\x18\xa6\x70\xc0\xc4\x92\x9c\xd3\x35\x75\xb1\x70\xe0\x17\x26\x07\xf7\x89\xc5\xfe\x47\x42\xb6\x20\x21\x3b\x62\xe4\x76\x25\x67\x0a\x9e\x7e\x09\x84\x60\xd1\xc4\xc1\xc3\x83\xd1\x04\x8d\x0d\xf7\x8f\xfc\x82\x44\x61\xf6\x92\xb0\x53\x3a\xfd\x8f\x3a\xd9\xb6\x18\xdd\x6f\x16\x7d\xd9\x44\xe9\xcb\x24\x49\xbb\xb0\x0d\x7e\x29\x9a\xe8\x18\x91\x07\x56\x59\xaf\xaa\x32\x88\x0d\xf4\x27\xc5\x00\xd1\xd0\x8b\x24\x54\x35\x55\x2a\x2b\xfc\x2f\x75\x13\x49\x48\xd5\x8b\x92\x8a\x64\xc5\xc4\x45\x5b\x37\x17\xf3\x68\x4c\xb7\x14\x10\x62\x8a\x85\x24\x64\xc0\x5f\xf3\x18\x29\x9a\x8d\x4b\xd8\xec\x45\x16\xb6\x2d\x64\x98\x8a\x6e\x2a\xf6\x62\x2f\xd8\x7a\x15\x0b\x59\x3a\xf8\x58\x66\x4d\xbd\x82\x54\x7d\x01\x5b\x36\x19\xad\xac\x94\xca\x58\xec\x41\x43\x88\xca\x30\xd7\xd9\x06\xb4\x42\xcc\xb0\xe2\x34\x7c\x05\xfc\x81\xa6\xc6\x87\xc1\xef\xc5\x58\xc3\x5d\xbd\x0f\xbc\xb6\x49\x9e\x20\xbc\x76\xda\xad\x7d\xe1\xae\x7e\xcd\xb7\xef\x3d\xf2\x2b\x61\x90\x7b\xae\xf3\x11\x38\x06\x1e\x90\xcf\xb5\xb3\x41\xdf\x00\x9b\xa7\xae\x11\x5c\x76\xee\x7f\xb1\x73\xf9\x5b\x30\xa6\x90\x8d\x55\x3f\x79\xaf\x7e\x6a\xed\xf9\xe7\x1f\x3e\xfb\xf9\xbc\x5b\xbb\xc4\xbd\x29\xc0\x81\xb5\x1a\x38\x3f\xef\xba\x4e\x8d\x40\x5c\x71\x9e\xfd\xfc\x5f\x60\xcf\xa5\xdf\x9f\x73\x6b\x67\x9e\x6f\x7e\x12\xf8\x86\xcc\xe0\xf9\xe7\x1f\xba\xce\xa6\x5b\xfb\x19\x76\xc7\x5a\xc0\x21\x94\x68\x73\x81\xd3\x82\x9e\x48\x32\xa5\x5b\x1b\x9a\xf2\x90\xcd\x39\x84\xfa\x47\x91\xa5\x68\x25\x15\x23\xc9\x34\xa5\x45\x6a\xdd\x0f\x08\x79\x72\x7c\x59\xe4\x04\xa4\x5e\x8f\x19\xea\x40\xc3\xc8\xac\xaa\x38\xc9\xc4\xc5\x45\xc4\x65\x66\x7f\xea\xba\xde\xc4\x85\x4f\x10\xfc\x76\xfd\xc3\x53\xcf\x57\x37\xc0\x35\xb4\x09\xa4\xde\x84\xe5\xfb\x64\xef\xe9\x03\x0a\x52\xb8\x9f\xb9\x74\xac\x9f\xff\xe4\xd9\xa3\x15\xb2\x64\xa7\xce\xd7\xd7\xae\x12\x01\xb9\xee\xb8\xce\xed\xc0\xba\x27\x71\x55\xd7\x96\x92\x42\x00\x1d\x21\xb0\x9a\x40\x89\x8e\x56\x94\xc2\x85\xc7\xdf\x90\x2c\x8c\x46\x99\x26\x66\x51\x65\x59\xaf\x28\x36\xd9\xe5\x64\xcf\x13\xb5\x10\xde\xb4\xfe\x58\x95\x4c\x8c\x66\x4c\xa9\x38\x47\x44\x03\xf9\x31\xe8\x73\x2f\x2b\xaa\xcc\x55\x3a\xf2\xa0\x89\xff\x58\x55\x4c\x2c\x13\xcd\xc8\x66\xb3\xc8\x23\xc4\x64\xed\x09\xd0\x33\xfe\x60\xe9\x1a\x9d\x1e\xa6\x2a\x08\x95\xad\xef\x32\x49\xe8\xcb\xd1\xc2\x01\xc3\xd4\x6d\xbd\xa8\xab\x54\x63\xb5\x8b\x06\x39\x3a\xfd\x9f\x65\x6c\xd9\x8a\x06\xbc\x49\x9f\x38\x72\x38\xff\xea\xeb\xaf\xe7\x8f\xe4\x8f\xfc\x5b\xf8\x49\x43\x37\x6d\xa6\xf7\xbe\xf6\xda\xe1\x7f\x65\x2a\x2f\x97\xba\xef\xbd\x1c\xcc\x2e\xe0\x74\x40\xf1\x85\xb3\x3b\xa2\x03\xd4\x6f\xfc\xb8\x73\xfd\xeb\xb8\x53\x92\xe2\xb9\x7b\xdd\xd9\xbd\xfc\x25\xa3\xd7\x8a\x53\xbf\x7d\x77\xe7\xdc\xd7\xf5\xc7\x77\x5d\x67\x83\x06\x49\xd4\xef\x5f\x8c\x3d\x63\x5d\xe7\x29\xa1\x48\x60\xea\xf5\x0f\x4f\xb9\xce\xdd\xfa\xd3\x53\x7b\x77\x1c\xa0\x97\x87\x12\x25\x56\xc3\x01\x0e\x8c\x15\x26\x9e\x7f\x74\xbf\x50\xf6\x12\x89\x8a\x13\x0a\x5e\x40\x92\xaa\xea\x0b\xe0\x71\xf8\x63\x55\xb7\x25\xee\x86\xe5\x3a\x0e\xfd\x52\xe4\x51\x45\x08\xed\x6d\x7c\x53\xdf\xfa\x21\xe8\xef\x7c\x7e\xfa\x82\x5b\xbb\xd4\x00\x02\xb9\xce\x5d\xee\x52\x4e\x74\x2c\x21\x49\x26\xb2\x4b\xb2\x90\x70\x58\x16\x19\xc4\x78\x87\x39\x5f\xf7\x9e\xfe\x5c\x3f\xfb\x79\x24\x06\xa2\x0f\x09\x62\x7b\x90\xac\x63\x1a\x71\x80\x3f\x50\x2c\x9b\x0c\x27\x81\x9f\x4a\x34\x26\x6c\xbb\x7b\x10\xff\xf0\x28\x70\xfa\x73\xcf\xef\xfd\x4f\x20\x92\xe0\x6a\x24\x38\x20\xfd\xe0\x1a\x92\xe6\x25\x45\x85\xa5\xa0\xbe\x34\x40\xa7\x45\xaf\xd9\xac\x6e\xa2\xd6\xde\x20\xba\x98\x4a\xae\xe3\x8b\x3c\x9c\x25\x81\x02\x3b\x57\x6f\xb9\xce\x66\x38\xda\xc4\x9b\xaf\x68\x3d\x43\x23\xe8\x86\x91\x62\x84\xba\x73\x7d\xe7\xfe\xad\x56\x46\xc0\x15\xc3\x5e\x4c\x80\xbb\xfb\xd5\x8f\x34\x80\x4c\x0c\x82\xac\x87\xbf\x06\x8c\xfe\x62\x26\xf4\x23\xd4\x62\xd8\x62\x93\xa9\x6d\x9c\x0f\xc4\x7c\xc8\x06\x36\xb1\x65\xe8\x9a\xac\x68\xa5\x3c\x1a\x53\x31\x39\x22\x2b\xd2\x1c\x46\x56\xd5\xc4\x48\xb1\xa9\xca\x4c\xaf\xca\x29\xb8\x83\x20\x57\x7f\x7a\x7d\xf7\xfe\x5f\x1a\x59\x92\x88\x2f\x4f\x6c\xb1\xc8\x8f\xda\x03\x7e\x13\xfd\x29\x6e\x36\x54\x09\x3d\xe7\x3a\xe7\x76\x6f\xfd\xb8\x77\xef\x3c\x07\x7a\xc1\x75\x60\xc3\x39\x27\xc5\x2a\x09\x99\xdc\xac\x5e\xd5\x92\x16\x7d\xef\xce\x39\x72\x16\x10\xa5\x36\x20\xf6\xc9\xb0\x64\x0f\x0b\x00\x9b\xb8\xa2\xcf\x7b\x17\x03\xe6\x8a\x05\x4f\xb3\x62\xeb\xa6\x82\xad\x16\x77\x72\xc0\x61\x09\xda\x75\xfd\xcc\x59\x88\x21\x0a\xc9\x13\x81\x2f\xfc\xc0\x18\xac\x89\x55\x38\xc0\xf5\x11\x6f\xda\x5c\x19\x61\x0b\x8c\x65\x24\x4b\xb6\x24\x0c\xdc\x09\x40\x8a\x3b\xa9\xd6\xd9\xaa\xae\x9e\x66\xb7\x60\x67\x33\x99\x78\xc2\x85\xe9\xf1\x58\x1e\x99\xb8\xa4\x90\xeb\x24\xc4\x31\x82\xe3\x3e\x8f\x26\x30\x0d\x84\x28\x63\xd5\x10\x6d\x81\x1e\xd8\x58\xd7\x7e\x7a\xbe\xfe\x77\xee\x58\xf6\x23\xd6\x00\x83\xed\xc8\x36\x20\xbc\xe7\x41\x45\x44\x3b\xb8\x50\xdb\x3d\x75\xb7\x91\x9f\x04\x38\x9b\x7a\xd5\xc6\x56\x4f\xe8\x2a\x4a\x96\x5e\x84\x20\x7f\x9e\x2d\x39\x5b\x5d\xc6\xce\xfc\x70\x5f\x0f\x20\x29\x10\x0f\x3d\x4b\x4b\xf9\x13\xd8\xb4\x14\x5d\x9b\x28\xeb\xa6\xbd\xbc\xec\x87\x22\xb1\xef\x87\x75\xad\x04\x5f\x9b\x18\x49\xaa\xa5\x23\xa9\x58\xc4\x86\x8d\x65\xd1\x52\xc7\xc1\x84\x48\xd7\x35\xd7\x79\x18\x07\xd9\xad\xd5\xea\x17\xae\xba\xce\x47\xf5\x53\x5f\xb2\xd0\xd0\xa6\x97\xbb\x57\x3c\xd1\x0b\x27\x8d\xf0\x66\xf5\x4a\x40\xf6\xc6\x1c\x65\xe2\x01\x7e\xfd\xeb\x7e\xdb\xc6\x1a\x81\xd3\x87\x18\xef\x02\x0d\x66\x14\x4d\x22\xbb\xd0\x8b\x7d\x98\x59\x44\x86\x0e\x8f\x82\x05\xb4\xaa\xd9\x66\xd5\x02\x9d\xbf\x6a\x97\x75\xd3\xca\xa3\x21\xcd\xb2\x25\x55\x05\xca\x56\x2d\x7e\x0c\x5a\x48\xb2\xd1\xa2\x5e\x35\x91\xbe\xa0\x21\x53\xb1\xe6\xf2\xbf\xfe\x35\x51\xbf\x8e\xea\xe4\x6b\xb4\x20\x69\x60\x11\x50\xd8\xdb\x60\xee\xa4\x22\x72\x69\x29\x4f\x51\x5a\x5e\xfe\x77\xc1\xc4\x7f\xfd\xeb\x9d\x87\x1b\x3b\x27\x2f\xf4\xa1\xa8\x28\x24\x12\xf4\x94\xeb\xfc\x15\xa2\x08\x6b\xcf\x9e\xde\x7c\xfe\xf9\x63\xae\x33\xdf\x73\x9d\x93\x34\x60\x76\x6f\xe5\x14\xdc\xb8\xd7\x5c\xe7\x0b\xd7\xb9\x03\x11\x12\xe7\x60\x5d\x6e\xf0\xc0\x8b\xb3\x01\x31\x4a\x08\xd9\x30\xd0\x96\x1f\x90\x4b\xc4\x11\xe8\xd7\xce\x06\x8f\xc2\xd9\xde\x3b\x7d\x8f\x86\x01\xef\xfd\xfd\xeb\x67\x3f\xfd\x04\x7a\xd4\x3a\x1d\x2e\x22\x82\x29\x5d\x22\xf0\x83\x54\x40\x10\x41\xd5\x38\x18\x37\xb8\x39\xe7\xfe\x3d\x7e\x99\xfb\xbd\x90\x1e\x55\xd1\x30\xb2\x75\x5d\xa5\x34\xb7\xb1\x29\x15\x6d\xaa\x35\x0e\xa8\x7a\x55\x46\x6f\x12\xa9\x67\x8a\xce\xe2\xd0\x33\xc8\x75\x36\xea\xdb\x4f\xf6\xbe\xfa\x86\xdf\x4d\x6e\xb8\x35\x87\x05\x1d\x7b\x82\x84\x9c\x49\x5f\x05\xce\xa7\x93\x14\x6b\x01\xa2\x47\x8f\x1e\x1a\x1f\x3c\x3e\x7a\x62\x10\x8d\x0d\x4f\x1d\x1b\x1a\x11\xe0\xd1\xb8\x08\x54\x7f\x3c\x44\xc5\x7e\x4a\xe0\x68\x7c\x70\x6c\x74\x62\x68\x72\x74\xfc\x9d\x94\xe3\xc4\x1f\xb0\x9d\x0e\xde\x97\xe1\xe8\x7d\x29\x87\x4f\x3b\x66\x5a\xf0\x27\xfa\x47\x06\x06\x8f\x0a\x80\xee\x7d\xf5\x70\xf7\xdb\x07\xc9\xaf\x8a\x10\xa2\xef\x8a\xc6\x1d\x1e\xea\x9f\x10\xbd\x59\x5f\xfb\xb2\x7e\xf1\xbc\xe8\xcd\xb1\x21\x34\x35\x3e\xec\x07\x36\xb6\xa4\x77\x93\xb7\x79\xfc\xb5\xe0\x45\x61\xe0\x75\x73\x88\xe8\x20\xce\x97\xf2\xa8\x6c\xdb\x86\xd5\x77\xe8\x90\x64\x28\x79\x66\xee\xc8\x17\xf5\xca\x2b\xad\x0e\x88\x0e\x92\x9b\xac\x18\x5c\x73\x7c\x7c\x75\x48\xb2\xe1\x6c\x9b\x1a\x1f\x5e\x16\x66\x8f\x34\x07\x28\x5a\x31\xe1\x14\x12\x16\xd1\x83\x09\x11\xf8\x63\x43\x83\xec\xef\x65\x91\x87\x48\x3c\x48\x23\x84\x36\x46\x45\x07\xc9\xef\xf3\xf4\xf0\xe7\x3f\x33\x5d\x60\x79\xb9\xe5\xc5\x13\x0d\x40\x8e\x27\xa2\x43\x3e\xa2\xae\x9e\x98\x81\xd2\xe1\xde\x21\xb9\xd2\xd0\x8a\xd3\xa2\x45\x76\x19\x9b\x10\x89\x28\x1e\x00\x29\x7e\x53\x28\xdd\xf8\xab\x42\x86\x1a\xf3\x9c\x3e\xa2\xe1\xc5\x6f\x8e\xf4\x1f\x1f\x6c\xed\xa5\x62\x11\x5b\x16\x5c\xfb\x03\x39\x02\x86\x64\xda\x4a\xb1\xaa\x4a\x26\x9a\x31\xf5\x39\x2c\x0a\x37\xf6\x13\x03\x56\xaf\x04\x9c\x1d\x8f\xc3\x29\x01\x9b\xf5\xed\x27\xdc\x29\x71\x8b\x5c\x44\x6a\x3f\xb9\xb5\x1f\x9a\xe2\xc3\xfd\x62\x9a\x54\xc1\x0d\x68\xf1\x1f\xf5\xd9\x59\x6c\x2a\x9a\x28\x18\x3c\x3e\x73\x61\xf5\x27\xb8\x1a\x81\xa9\x8d\x27\x96\x45\x9e\xa9\x5f\x3c\xdf\x2a\xe2\x7f\xac\x2a\x90\x50\xc7\xf2\xf8\x90\x85\x8b\x55\x53\xb1\x17\x11\xe4\x92\x59\x60\x90\x5a\x5a\xca\x57\x2d\x6c\x6a\x90\xa3\x23\xbc\x16\x85\x9f\x42\xbe\x91\x68\xeb\x06\xd1\xdc\x08\x16\xf7\xdd\xd5\x2f\x01\xf7\x0f\xc1\xa5\x04\xae\xcc\xda\x03\x6e\x5e\xbd\xea\xd6\x2e\xed\x9e\xff\x7b\xfd\xc9\xd5\x88\x1a\xde\x0c\x77\x96\x13\x17\xc1\x9d\xa0\x1e\xc2\x49\x80\x78\xe8\x19\x1f\x6d\x20\xf9\x87\x5c\x56\x00\xb1\x09\xb6\x99\xcf\x42\x96\x91\x04\xc9\x01\x01\x03\x07\xdc\xe5\x45\xba\xa4\x9f\xe4\x90\x46\xcd\xa9\x5d\xe2\x16\xc2\x44\xf3\x23\x45\xa3\x6a\xaa\xc8\xe4\x69\x4a\x92\x86\x24\xc3\x68\x26\x10\x5c\x67\x13\xf4\x01\x96\x5d\x94\x7e\x38\x60\x3a\x18\x8b\x9f\x8b\x30\x68\x34\xe1\x4c\xd1\x90\x6e\x96\xc8\x77\xa3\x66\x89\x7d\x77\x88\x66\x84\x90\x2f\x27\xc8\x07\xf6\x35\x5d\xef\x29\x6f\x2d\xf3\x79\xd1\xbd\x2f\xf4\x98\xbf\xe4\x74\x0e\x3e\x3e\x64\x25\x21\x03\x23\x3a\x7c\x30\xbd\x24\x8a\x05\x98\xd0\xb7\x84\xf9\x6d\x9b\x01\xfa\xf8\xbc\x41\x50\x8d\x27\x94\xaa\x48\x56\x34\x0d\x8e\xd9\x56\x18\xc3\xcc\x60\x42\x4a\x76\x0f\xa4\x29\x65\x12\xd2\xa8\x9b\x6b\xe0\x4d\x7e\x83\x39\x24\x11\x48\x79\x84\xc6\x31\x88\x26\x02\x20\x02\x96\xdf\x75\x9a\x80\x27\x0b\x22\x63\x93\xac\x16\xd6\xa8\xd1\x90\x7a\xc1\xc8\x03\x34\x5c\x87\x5d\x65\x45\xe4\x8f\xbf\x8b\xc5\xe5\xac\x45\x58\x9c\xd2\x96\xea\xa7\x0d\xb9\x81\xce\xb6\xbb\x7a\x1e\x9e\xa3\xfb\xf2\x0a\x99\x7d\xf0\x4a\x75\x88\xbe\xe8\xdf\x48\xdb\x45\xa3\xc9\xdd\xb5\x76\xa9\x7e\x61\x7b\x6f\xf5\xe7\x40\x96\x0e\xbd\xe0\xb1\x04\x16\xd7\xf9\x9b\x7f\xd4\x84\xa7\xd6\x98\xf0\x18\xb8\x11\xd6\x2e\xd5\x2f\x9e\xaf\x9f\x39\x5f\xbf\x7d\x66\xe7\xd3\x6f\x5b\xb0\x46\xc6\x33\x11\x61\x93\x10\x73\x90\xa5\x65\x8b\xde\xe3\xdd\x9e\x29\xe3\xf6\xe4\x11\x7a\x47\xaf\xa2\x22\x18\xa0\x6c\x73\x11\x55\x35\xb6\xe2\x84\x3b\x44\x6f\x01\x23\xd8\x65\xac\x05\xcc\x14\x8a\xc5\x1f\x0f\x72\x92\xa2\xcd\xeb\x73\x49\x5c\x99\x47\xe8\x2d\x7d\x01\xcf\x63\xb3\x17\xec\x1f\xcc\x16\x36\xab\x98\x96\x8d\x66\xab\xd4\xb6\x22\x63\xd3\xb2\xd9\x98\x48\xa9\x18\xe4\x8e\xae\xcf\x86\x71\x25\x3f\x81\x55\x88\xfc\xd1\x88\x31\xc5\x4d\xc4\xb9\x09\xac\x17\xb6\x3e\x34\x02\xe6\x72\x41\xcc\x8f\xa8\xd9\xea\x7f\xf4\xd8\x75\x1e\xd6\x4f\x43\x76\xa2\xc7\x52\x2b\x4e\xf3\xb1\xb9\x40\x7a\x18\xc3\xb6\xb5\x4b\x7b\x5f\xdd\x01\x4f\xe0\x1d\x6a\x01\xf6\x73\xa0\x23\x5c\x1f\x6f\x44\x69\xe6\x5d\xbd\x01\xfc\x79\xd5\xe3\xfb\xfa\x99\xf3\x14\xed\x9d\xab\xb7\xea\xf7\x3f\x21\x4c\x1f\x83\x70\xcc\xd0\x02\xfc\xc1\xde\x5b\xff\xfc\xdb\xfa\xc5\x35\x02\xfd\xe7\x6f\x9e\xdf\x78\x4a\x88\x75\xde\xa9\xaf\x7d\xb8\x7b\xf1\xc3\xbd\xbb\x5f\xf0\xad\x72\xd6\x75\x2e\xc4\x9a\x3f\x13\x76\x8e\x1a\x70\x8e\x0c\x0c\x0f\x71\x76\x14\x99\xd9\x85\x60\xf4\x05\x34\x31\xf1\x16\x98\x47\x99\xa6\x08\xbe\xfe\x84\xcc\x46\x9e\x0e\x17\xc8\x64\x0c\xe8\x76\x00\x2d\xa8\xe0\x81\x6f\xfa\x9b\xfa\x85\xed\x66\x47\xaf\x6a\xe9\x48\xc6\x2a\xb6\x31\xa4\x5a\xb1\x84\x63\x6a\x33\x16\x1a\x37\x22\xa9\xc0\x37\xf8\x71\x5f\xe3\xfe\x82\xe4\x31\xe9\x21\x5e\xa9\x5a\x36\x9a\xc1\xcc\x70\x80\x65\x34\x83\x67\x75\x93\xff\xcd\x2a\x08\x24\x51\x24\x5d\x56\x27\xe5\xb0\xa6\xb9\x93\x2d\x18\xc2\xfb\x85\x7a\x90\xf0\x79\x91\x3f\xd2\x57\x0c\xc4\xaf\x7a\xd5\x13\x20\xb5\xae\xb9\x06\xb6\xd5\x58\xda\xa0\xbe\xf6\xfd\xf3\x6b\x17\x13\x86\xa0\x5e\x10\xa2\x39\x8b\x6d\xf5\xe2\xd7\x41\x85\x50\xa8\xf3\x98\x45\x9f\xcc\x2a\x58\x15\x79\xbb\x3c\x5c\x41\xdc\x6d\xd7\x9f\x9e\x7a\xfe\xf9\x1a\x5c\x65\xbe\x60\xbb\x98\x79\x4e\xc4\xf4\x0f\xeb\x51\x61\x4f\xb2\x58\xcf\x10\x15\x19\x10\x39\xae\xc5\x82\xa0\x41\x2f\x25\x93\x5f\xd0\xcd\x39\x08\xe1\x9b\x53\x0c\xc3\x57\x68\x21\x44\x92\xe0\xd0\x2a\x5a\xee\xea\x76\xe0\x36\xea\xf9\x1f\x41\xd4\xaf\x38\x74\xcf\xb1\x8a\x15\x84\xaf\x7f\x80\xbb\x08\xdd\x97\xc9\xfb\x2f\x0e\x7b\xe6\x21\xa1\xa9\x96\xb6\x0e\x7a\x2c\xbd\x9f\xd2\x87\x5a\xa7\x2a\xf5\xa4\x34\x00\x42\x10\x42\xe3\xa7\x63\x36\x3a\xb8\xd3\x93\xbd\x99\x5f\x55\x08\x06\x6b\x32\xe4\xff\x12\x7e\xc5\x96\x8d\x64\x45\x2a\x69\xba\x65\x2b\x45\x8b\xc6\x81\xa9\x7a\x09\x22\xa4\x12\xcc\x39\x7b\x77\x9c\x9d\x6f\x6a\x7b\x1b\x3f\xee\x5c\xb9\x4f\x16\x60\xf5\x3e\xbb\x15\x86\xe2\x5f\x36\x9f\xfd\xf4\x49\x8a\x1b\x90\x9f\xdb\x8a\xca\x58\x52\xed\x32\x2a\x96\x71\x71\x0e\xd9\x8b\x06\x66\x86\xcc\x1e\x43\x37\x6d\x9a\x71\xad\xe9\x1a\xee\x11\x19\xc1\x84\x99\xad\x04\xb5\x4f\xe0\x90\xa7\x05\x54\x1c\xb7\x76\x97\x30\x4c\x6d\x1b\xee\xac\x4f\x01\xe5\xab\xcc\xce\xc9\x46\x0b\xa4\x4d\xb3\x41\x9b\xe2\xef\xc9\x2b\x45\x93\xf1\x07\x6d\x20\xd9\x58\x99\xc5\xd9\xda\xfd\xf6\x56\xfd\xf1\xe5\xe6\x83\xab\xca\x2c\x2e\x2e\x16\x55\xdc\xa2\x9d\x2c\x00\x22\xc4\x61\x70\x48\x11\x36\x9b\xc1\x5e\x12\x02\x96\xa9\xab\x67\x46\xb7\xcb\xc8\x73\xaf\x82\x2b\x54\xd6\x2b\x92\xa2\xf5\x1c\x62\x1f\x84\x41\x43\xa2\xe9\x37\xca\x80\x15\x27\xe0\xc0\xdd\x88\x19\x81\xa8\x73\xcf\x1e\xdd\xdc\xb9\xf2\x43\xa4\x10\x03\x0b\x4e\x67\x52\x6d\x3b\x12\x50\xd6\x5d\x3a\x94\x75\xcb\xee\x39\x04\xff\xe9\x02\x0d\x42\xd0\x5f\xca\xf9\x6b\x7a\x8e\x60\x47\x0e\xc6\xec\xa7\x1f\x04\x9e\xf5\xec\xad\xb6\x6d\xbe\xb4\x8c\x89\x44\x43\xdd\x98\xc5\x48\x5c\xe1\x82\xe9\x63\xce\x66\xa8\x4a\x88\x1f\xfe\x9d\x2c\x2d\xf9\x58\xd4\xf0\x43\x47\x94\xf1\xac\xa2\xd1\x20\x73\x90\xe0\xa9\x55\x47\x67\x33\xf8\x67\x24\x8a\xaf\xbe\xf5\xd7\xdd\x27\x5f\x41\xa8\xe6\xe9\x96\x11\x33\x75\x95\xda\xce\x50\xd5\x12\xda\x9f\xdd\xd5\x3b\x30\xf2\xf7\x2c\x66\x2a\x84\xda\x56\xcb\xd5\x54\x38\x0a\x54\xc7\x6e\x07\x03\xbe\x34\xed\x8e\x8d\x65\x74\x42\x52\xab\x22\xda\x87\x17\x9c\x86\x6f\xdc\xa8\xaf\x88\x1c\xbe\x00\x92\x2a\x53\x2a\xd8\xf8\xc6\x75\x15\x53\xeb\x20\x99\x12\x6a\x28\x4f\xe3\x9b\x08\x69\x01\x97\x51\xb3\xb4\xbc\x8c\xc4\xd6\x3f\x3a\xcb\x00\xe4\x90\x9d\x2f\x08\x83\xdd\xd9\x03\xd4\x6a\x1c\x3d\xca\xd1\x01\xb5\x06\x89\xcd\x7a\x29\x26\x49\x11\x49\x9c\x63\xc0\x10\x4a\xbf\x06\x43\xa4\x67\x0a\x0d\x21\x9a\x68\x0d\x8d\x4e\x29\x54\xd9\x27\x0d\xa5\x1a\x6d\xa2\x61\x84\xe2\x29\x19\x9a\x62\x02\x21\xbb\x4d\xc7\x7d\x27\x57\xd7\xc9\x11\x71\x85\x2c\x2d\xe5\xf9\x37\xd3\xf0\x0d\x25\x91\xc7\x3d\x16\x5b\x26\x9f\x3c\xba\x59\x92\x34\xe5\x4f\x30\x6b\x8f\x42\xd5\x74\xb6\xf5\x78\x77\x4a\x73\xcf\x49\x2c\x9a\x21\x1a\x46\xb0\xe2\x36\xb5\x30\xe7\xf1\xc9\x74\x48\xc1\xc0\x49\xb3\xb4\x94\xff\x4f\xf2\x81\x1d\xd1\x41\xca\x65\xea\x80\x48\x38\x96\xa2\x38\xb0\x0b\xa0\xc8\x0b\xd1\xd6\xdc\x6d\x1b\x57\x0c\xb0\xc3\xd8\x3a\x92\xf5\x05\x4d\xd5\x25\x99\x86\xb4\x2d\xd2\xec\x11\x88\x3a\x85\xf0\x27\x0d\xdb\x48\x92\x65\x13\x5b\x96\x78\x9a\x43\x63\x60\xa2\x5a\x3d\x03\xe9\x63\x3f\x30\xfb\x62\x24\x40\x2c\x7a\x7f\xda\x72\x57\x57\xdc\xda\x1d\xb8\x1a\x80\x73\x16\x8c\x9f\x01\x23\x65\x6b\xf3\xa8\x28\x25\x53\xa2\x5e\x26\x76\x2b\x1d\x62\xd7\x95\xa3\x7e\xe5\xb9\x26\x6b\x95\xf4\x22\x18\x57\x57\x3f\x23\xd8\x13\x56\xfe\x3a\x74\xb7\x69\x19\x6f\x16\x52\x08\xf9\x4c\xaa\xa4\x81\x45\x78\x4c\x95\x98\x61\xf4\x7d\xa4\xcf\x7a\x4e\xe4\xf7\xa3\xf7\xec\xf7\xb9\x55\x67\xd6\xc4\x3c\xa5\xc9\xbb\x9a\xbd\xdf\x38\x0d\xfe\x56\xa0\x46\xa7\xc4\x4a\x7a\xa2\x01\x5d\xb3\xa5\x22\x8b\x40\x94\xe4\x8a\xa2\x29\x96\x6d\x4a\xb6\x6e\x22\x65\x16\x0c\xf0\x76\x59\xd1\xe6\xa8\x3d\x1f\xaa\xb0\xd2\x0a\x5f\x22\x22\x7a\xe1\x86\x01\x6f\x75\xdc\x0c\x82\x3e\xf8\x86\xc9\xbb\xce\xf6\xee\xc9\x9b\x3b\x57\xae\x09\xa3\x6c\x51\xe3\x55\x32\x69\xe6\xac\xdc\x24\xaf\xd7\xc4\x0b\x7d\x5e\x26\x00\xc3\x19\x42\x44\x67\x59\xdf\xbb\x77\x9b\x57\x64\xa5\x86\x99\x8d\x9d\x95\xbf\xb9\xb5\x0b\x34\x4f\x89\xdb\xa0\x89\xfa\xbe\xbb\x75\x73\xf7\xe2\x87\x2c\x4a\xd2\x39\x5b\xbf\x7c\xc1\x75\x4e\x92\x5f\x6b\x17\x00\x76\x1a\xa7\x4d\xd5\x2e\x13\x76\x28\x12\xe6\x85\xb3\x4c\xd3\xb5\x1c\x0f\x3d\x54\xe6\xb1\x2a\x72\x10\x3f\xff\xdb\x67\x34\xbc\xb0\xfe\xf8\x02\x98\x5e\x02\xca\x5e\xed\xd2\xde\xbd\xf3\x7b\x1b\x8f\x9b\xa9\xb5\xfe\xe0\x8a\x56\x12\xef\x0d\x0a\xec\xd9\xa3\xfb\xd4\x7a\x27\x66\xed\x00\x3c\x5d\x83\xba\xa4\xf8\x03\x43\x31\x31\xd4\xed\xa5\x81\xff\xaa\x5e\x42\x33\x52\x71\x0e\xfc\x8f\x3a\x32\x71\x4e\x0a\x90\x20\xcf\xab\x37\x43\x95\xbd\xf7\x83\x35\xe0\x0a\xd5\xc3\x87\x5f\x2b\xf2\xe8\x1c\xf8\x0b\xa3\x5c\x95\x7d\x4f\x48\xc7\xbf\xd3\xd9\x77\xba\x59\xe2\x5f\x59\xec\x2b\x10\xe8\xf4\xcb\xf7\xc9\xf0\x41\x6c\xc8\x05\x2f\x8a\x4e\x22\x41\x5c\x67\x8b\xe6\x1a\xec\x5c\xbf\xf1\xfc\xda\x45\xd7\x59\x87\x2a\x61\x7e\x40\x3d\xe5\x2b\x6a\x3f\x62\x2e\xc5\xab\xbb\xdc\xa7\x57\xff\xf0\x7c\x60\x91\xa2\x2e\xbe\x70\x91\xea\x34\x40\x42\xd5\xf3\xba\x4c\xb9\x16\xaa\x61\xf6\x43\x00\x34\x3b\xcc\x41\xaa\x61\x13\xc9\x8a\xcc\x12\x43\x68\x06\x35\xbd\x6f\xeb\x1a\x46\xb6\x52\x21\x17\x71\x59\x74\xcb\x60\xce\x0f\x26\x5f\x20\xc8\x8b\x19\x54\x1f\x72\x4b\xd7\xe7\xa0\x6f\x3c\xf4\xce\x94\xe0\xed\x19\x0e\xa3\x15\x78\x8c\x67\x3a\xb3\x19\xa4\xc8\xca\x78\x63\x68\x78\x78\x68\xe4\x18\x3a\xde\x3f\xd2\x7f\x6c\x70\x5c\x84\xe1\xe6\xb9\x9d\x6f\x6a\x9e\x68\x10\x80\x9a\x1a\x1a\x3e\x3a\xd6\x3f\xf0\xb6\x30\x8a\x6b\xf5\x63\x66\x30\x5f\xfd\x88\xda\xf2\x9a\x01\x12\x87\xac\x46\x21\x09\x6e\xfa\x1e\xa8\xd6\x23\xb5\xde\x90\x2c\xa5\xd8\x5a\x6e\xd6\x1b\xd4\x29\x54\xc2\xb6\xcd\x82\x7b\x4c\x1b\xcb\xad\x59\xf7\xde\x50\x34\x19\xca\x51\x87\xb4\x60\xb8\x16\x07\xc3\xb1\x08\xe7\xd2\xb4\x7d\x55\xf5\x9d\xc2\xf0\x35\x8d\x29\x4b\x32\x68\xa4\x8d\x05\xf2\x83\xb9\x82\xde\xab\x93\x60\xd0\x67\xf7\x6e\xcf\x15\x0a\x9e\xdd\x1f\x60\xd3\x47\x3d\x7f\x61\x0b\x7a\xa2\xf4\x16\xce\xde\x2e\x63\x2f\x67\x28\x1a\xe8\xc5\x0a\x13\x5b\x58\x06\xef\x24\x8f\x07\x0b\xd6\x60\x14\xdd\xa7\x59\x80\x97\xb0\x92\x30\x38\x2d\xc9\x26\xe3\x1b\x8e\x67\xf6\xa6\xa1\x60\x28\x43\x69\x33\x25\xd1\xf7\x99\x58\x3c\x00\x2d\x05\xb1\x04\x61\x65\xbf\x70\xda\x45\xaa\xbe\x53\x5b\xe0\x5b\x93\x93\x63\xd4\x23\x26\xa4\x45\xf3\x02\xed\x14\x0a\xaf\x5d\xdd\xd6\x2e\x88\x45\x2e\x29\xb4\xad\x39\x56\xc1\xf0\xb7\x16\x51\x22\x7c\x32\x83\xed\x05\x8c\xc1\xe0\x1c\x56\x49\x41\xd5\x08\x7b\x3a\xd9\x81\x08\xd2\x49\x7c\x43\x89\x80\x71\x9d\x8d\xa8\x55\x79\xeb\xf9\x95\x8f\xc3\xd8\xd2\xba\x1e\x34\x8c\x74\x5d\xe8\x11\x6d\x72\xf2\xb1\x19\x35\x46\xf2\x35\xd0\x5d\xa4\x86\xb7\x1e\xe2\xd7\xb1\xa1\x26\xd3\x40\xbf\x26\xdc\x22\x9e\x77\x1c\xef\xa4\xb8\x26\x72\x92\xa7\x33\xf1\xc8\x78\x56\xaa\xaa\xb6\x15\x16\xea\x1d\x46\xc6\xb6\x6f\xca\xa1\x67\x05\x08\xb2\x2d\x48\xe7\xbc\xec\xd6\xbe\x82\xb7\xd6\x92\xc9\x91\x05\x2d\x3c\x31\xfd\xc2\xa6\x1f\x23\xfd\x3b\x9a\x35\xdd\x62\x42\x0e\xcb\x24\xa0\xb6\xe3\xdd\x16\xba\xf3\x8b\x77\x43\x37\x82\x6d\x3b\xdb\x5f\x51\xea\x66\x49\xd5\x8e\xac\x84\xb1\xf4\x7c\x59\xe9\x18\x3c\x14\x82\x70\x93\xe7\xcd\xe5\x72\x36\xa8\xf0\x72\xe2\x16\x24\xdf\xc0\x9f\x01\xc7\xaf\x25\x14\x01\x09\x55\xc4\x85\x90\xe2\x31\xa8\x2a\xaa\x6c\x48\xc5\x39\x78\x8b\xff\xc1\x39\x22\x94\xac\x9c\xfa\xb6\x16\x07\x2a\x39\x9f\xb9\x0d\xdc\x52\x46\x5a\xa5\x45\xae\xe5\xc0\x2b\x0f\x46\x8b\x17\xc0\x45\x1b\xa3\x3f\x56\x25\xcd\x26\xa7\x02\x0f\x3c\x94\x34\x5e\x76\x8d\xda\x15\x24\x54\xd5\x14\x50\xf0\x2b\x58\xb2\xaa\x26\x86\x6a\xf4\xaa\x32\x87\xd1\xf1\x5e\x74\xfc\x8d\x5e\x74\x0c\xae\x87\xc7\xde\x68\xc2\x1f\x6b\xcf\x4f\x5f\x70\x9d\x6d\x74\xdc\x5d\x71\x8e\xbf\xe1\xae\x38\xc7\xc8\xff\xbf\x81\x20\x67\xfa\x2b\xd7\xd9\xaa\x9f\xff\x84\x56\x3b\xa3\x05\x80\xfc\x72\x68\xe2\x02\x40\xf1\x13\x1b\xe8\x1f\x19\x18\x1c\x1e\x1a\x39\xd6\x12\x39\x78\x55\x9a\x48\xcb\x02\x34\x66\x2a\xf3\x92\x8d\xc7\xc9\x67\x9e\xe7\x58\x59\x34\xe8\xb7\x50\x6a\xa3\xa8\x57\x0e\x91\x0f\x87\x32\x19\x6f\x7c\x70\x6c\x94\xfe\x32\x35\x3e\x9c\x3d\xc4\x42\x41\x2b\x14\xb4\xc1\xdf\xf7\x1f\x1f\x1b\x1e\x9c\xe8\x2b\x84\x0a\x17\xee\xfb\xdc\x55\x55\x5f\x60\x7d\x53\x2c\xab\x8c\xa0\x47\x43\xeb\x16\x14\x0f\x9c\xa1\xa0\x77\xa7\xc6\x87\x45\x85\xb3\x9a\xbd\x6d\xa0\xb6\x52\xed\x02\x00\x5a\x8b\x79\xf6\x5e\xac\xda\x65\x34\x35\x31\x38\x0e\x7f\x8d\xf5\x4f\x4c\xfc\x6e\x74\xfc\x68\x41\x6b\xb1\x1b\x45\x13\x70\xb0\xf0\xbf\xeb\x1f\x1f\x19\x1a\x39\xc6\xd6\x7d\x0c\xea\xc1\x91\x13\x08\x9c\x18\x86\x64\x59\x0b\xba\x29\xd3\x9a\x47\xa1\xbc\x7e\xdd\xb0\x59\x7d\xc6\xb2\x52\x2a\xab\x8b\x48\x56\xac\xa2\x5e\x35\xa5\x12\x96\x29\xac\x77\x42\x10\x2a\xd2\x22\x91\x26\xf3\x8a\xa5\xcc\xd0\x68\x0b\xdd\x2e\x63\x93\x96\x6a\x63\x3f\x9a\xb8\xa8\x9b\x32\xcd\x97\x81\xf1\xad\x32\x56\x55\x54\x56\x2c\x5b\x37\x17\x93\x19\x95\x4c\x91\x1c\xfa\xff\x11\x48\x37\x46\x85\x42\xe1\x40\x65\xd1\x43\x82\xfc\x89\x0e\x56\x2d\xea\xa2\xc4\x2c\x19\x92\xfd\x68\x71\xf1\x06\xdc\xf7\x4a\x5a\xf0\x05\xfa\xbf\x03\x81\x31\x0a\xec\xfb\x03\xe8\x20\xb6\x8a\x92\xe1\x0d\xa7\xcc\x52\xf3\x87\xa2\x79\xa3\x8a\xc2\x13\x53\x2c\x68\x23\x3a\x07\x22\x88\x1c\xe8\x08\x85\x76\x06\x63\x15\xe4\x68\x48\xee\xea\x19\x56\x1a\xed\xf1\xe5\xdd\xbf\x6c\xec\x7e\x7d\xc7\x75\xd6\x23\x16\x19\xdf\xff\x43\xf3\x1c\xbc\x27\x89\xda\xbf\x01\x57\xc2\x6f\xb8\x5d\x26\x6a\xd7\x17\x04\x59\x36\x43\x3b\xc8\x0f\xa9\xb9\xa1\x4d\x12\x45\xc6\x8a\xc4\xe2\xf3\xe2\xb7\x21\x92\x51\xa7\x43\x90\x10\x21\x8b\x7b\xfa\xf9\x43\xf5\x6e\x30\x31\x78\x75\x67\x8f\x8e\x1e\xef\x1f\x8a\xa9\x38\xfb\x6e\xce\x0b\x95\x43\x6f\x8d\x4e\x4c\x92\xf7\xa1\x11\x0e\x54\x7c\x1c\xeb\x9f\x7c\x8b\xfc\x55\x44\x63\xfd\xe3\xfd\xc7\x07\x27\x07\xc7\x27\xa6\xfb\x27\xa6\x7f\x3b\x31\x3a\xd2\x9e\x60\xdd\x1f\xd4\x12\xe5\x45\x0c\x0a\xc1\xa5\xab\x2c\x9a\x92\xcd\xba\xf4\x98\x28\x80\x43\x65\x91\x9c\x0a\x6c\xf8\x59\x5d\xef\x04\x6a\x91\x96\x9d\xfc\x83\xa5\x6b\x9d\x81\xe9\x59\x22\xfb\x0f\x4a\x7e\x91\x0f\x7d\xe4\x1f\x0a\x15\xea\x35\x17\x18\xf8\x21\x0d\xfd\x4e\xd1\x64\x7d\xc1\x42\x63\xfa\x02\x36\x27\x40\xba\x92\x0d\x20\xeb\xd5\x19\x15\xe7\x60\x1f\xc8\xbd\x88\x8a\x0c\x5a\x69\xbb\x0f\xa4\xdc\x12\x17\x6b\x7c\x90\x02\x1f\xa8\x10\x18\x0c\x3e\x2f\x53\xe9\x17\x19\x90\x65\x68\xa1\x61\x72\x76\x90\x21\x69\x81\x50\xc1\x90\x3d\xad\x8c\xd7\x5a\x69\x88\xac\x19\x60\x1f\x06\xa7\xb5\xb9\x29\x25\x0e\xf4\xb1\xd9\xef\xcf\xbc\x03\x2c\xda\xc1\x68\xac\xdd\x2d\x37\xee\xb0\x96\xab\x13\x83\x03\x53\xe3\x43\x93\xef\x4c\x1f\x1b\x1f\x9d\x1a\xeb\x32\x78\xba\x09\xc0\x17\x3e\x00\x5d\x40\x2d\x1a\xc2\x01\x65\xcd\x0c\x43\x5d\x84\xd4\x5c\xee\xcd\x8a\x73\xe4\xa0\xaa\x66\x2b\x50\x33\x6a\x91\x95\x90\x65\x5e\xb6\xd6\x32\x81\x22\xcd\x15\x12\x50\x46\xa3\xe3\xc7\xd0\xbb\xa0\x01\x77\x20\x66\x53\x0f\xf1\xb2\x52\xa8\x59\xfb\x89\xcc\x0f\xa6\xb6\x87\xf4\x04\x6d\x57\x1b\x51\x14\xe2\x0e\x8b\xb4\xcd\x52\x0a\xac\xa0\x3f\x3f\x25\x68\x51\xff\x42\xe1\x40\xaf\xf8\xa7\xc0\x09\xb2\x5f\x1d\x7a\xba\xd1\xa2\x27\x8b\xd6\x26\x9c\x0e\xc9\x3d\x29\x58\x09\x7e\xaf\x06\x7f\x21\xdc\xd5\xa4\x00\x05\x78\x0b\xc1\xce\x26\xde\x89\xb9\x1c\xab\xb4\x0c\x2b\x5a\xf5\x83\x43\xc7\xa5\x62\x9f\x07\x34\x76\x22\xf4\x6c\xaa\x2c\xca\x33\xfe\x72\x47\x47\x6e\x18\x38\xb0\xbc\x71\x87\x75\x4b\x43\x86\x54\x85\xf0\xc8\xe1\x03\x3c\x88\x41\x48\x6b\x08\x23\xe2\xab\x29\xad\xcf\xbc\x0d\x1c\x7a\x92\x37\x57\x78\x90\xff\x77\x68\x41\x37\xe7\xe0\x7a\x70\xc8\xae\x18\x87\xb8\xcf\x6e\x9a\xb2\x7b\x87\x67\xe6\x0b\x19\x93\xb5\x49\xef\xc2\x39\xcd\x0d\x92\xed\x99\x43\x20\xc9\x8f\x2a\x2d\x70\x09\xe0\xb7\x85\xd0\x35\xa0\x7b\x90\x13\x2f\x12\x41\x08\x95\x45\xa2\x26\x86\xf4\xa9\xc0\xff\x7e\x15\xfc\xa1\x25\x20\xbe\xb6\x89\x7e\xc5\x7e\x0f\x56\x55\x3b\xd4\xae\x1a\xda\x26\xee\xdd\x18\xab\x6b\x53\x84\x8d\x41\xd6\x53\xb2\x16\xb5\x62\xce\x56\x2a\x58\xaf\xda\x68\x72\xe8\xf8\xe0\xe8\xd4\xe4\xf4\xd0\xc8\xf4\xf1\xa1\x91\xa9\xc9\xc1\x09\xb8\x55\xda\xa6\x54\xc4\xe8\xa0\x6d\x56\x31\xfa\x33\x9a\x95\x54\x8b\xfc\x97\xa0\x76\xc8\xd6\x0f\x91\x83\xe4\x15\x78\xae\xa8\xab\xba\x19\x7e\x8e\xfe\x00\x9d\x4c\x30\x3a\x38\x3c\x3a\xd0\x3f\x3c\x88\xfe\x8c\x06\x86\x07\xfb\xc7\x5f\x69\x93\x3b\x1b\xda\xd9\x4e\xfb\xed\x6c\xa7\xc3\xed\x6c\xa7\xa3\xed\x6c\xa7\xe3\xda\xd9\xb6\x87\x06\xed\x5e\x23\x19\x46\xae\x22\x69\xca\x2c\xb6\x6c\xff\xcc\x7c\x37\x67\xa0\x43\x9c\x40\x34\xb8\x91\x3c\x08\xaa\x04\xc4\x37\x7a\xef\xe4\x17\x2b\xaa\xb0\x85\xc1\xbe\x61\xd0\x11\x02\x9e\x1c\x43\x5e\x78\x1f\x88\x08\x04\xd5\x35\x87\x46\x41\x70\xd0\x02\x3f\x7f\xce\xe5\x64\xc5\x22\x9f\x5e\xc0\x88\xbe\x2e\xcf\xcc\xba\xbf\xb4\xa6\x3c\xa9\x68\x43\x73\x7b\xe1\x0e\x43\xc5\x76\x27\xc0\x74\xb3\x44\x20\x75\x02\x82\xe6\xbd\x74\x0e\xe1\x3f\xa7\x46\x27\xfb\xd1\xbb\xb9\x0a\x9a\x1c\x9d\xec\x1f\x9e\x3e\x3e\x78\x7c\x74\xfc\x1d\xb2\x95\x15\xc4\x55\xd3\xc0\x97\x26\x1a\x1f\xe5\x02\xcc\x6a\xd0\x61\xe1\x6b\x09\x85\x8a\x0d\x82\x54\xa0\xae\x16\x43\x52\x3c\x65\x23\x07\x75\x01\xe1\x47\x13\x43\x6c\x31\xb7\x14\x40\xdf\x08\x34\x3e\x48\x80\x0f\x1e\x9d\x86\xf1\xa6\xc7\x46\xc7\x27\x27\x3a\x62\x6e\x7e\x1a\x50\x87\x8f\xe8\xec\x69\xf8\x5f\x06\x87\x51\xd3\xf1\x1b\x2c\x3e\xa1\xf1\xe1\xab\xfc\x0b\xc0\x22\x72\x4c\x46\xb0\x68\xff\x94\x4c\x81\x09\xe1\x01\xf4\x9b\xc3\x87\x0f\x1f\x4e\x5c\x8f\x3e\x78\xa4\x13\x2c\x92\x2d\x16\xfc\x3e\x46\x6e\x5c\xd3\xe3\x53\xc3\x83\x13\x70\x35\xdb\xf7\x01\xbd\xab\x42\x97\xda\x28\x75\xb1\x8f\x52\xa1\xcb\x7d\x94\x3c\xd2\x08\xfb\x28\xb1\x4e\x37\x5e\xab\x1b\xbf\x45\x4d\x21\xd0\xed\xc6\xbb\x28\xdb\x45\x83\xd9\x28\x82\xcf\x05\xdb\xde\x78\x8f\x1e\x39\x9c\x3f\x9c\x3f\x72\x24\x7f\xf8\xd0\xab\xaf\xc7\xbc\x43\x1b\xe0\x78\x4f\xff\xdb\xe1\xde\xd7\x5f\x7f\x2d\x1e\x36\xcf\x56\xf3\x9f\xa6\x15\xa9\xca\xb6\x6d\x00\x5d\xc0\xff\x8d\x6c\x53\x9a\x9d\x55\x8a\xf4\x7c\xfb\xbf\xba\x86\xfb\xfd\xdb\x3c\xbd\xcf\x27\x34\x6e\x4a\xc9\x9e\x69\xba\x06\x0a\x6c\x52\xe8\xdd\x9c\x8d\x26\xfb\x8f\x75\x26\xa8\x33\x42\xe1\xc5\x18\xc8\xda\x68\x84\xf9\x8b\x30\x93\x75\xc1\x4a\xd6\x39\xf1\xb2\x31\x97\x85\x9b\x56\x16\x68\xdb\xca\x60\x7f\xca\x02\xef\x5c\x59\x60\xbd\x2b\x23\x3f\xfa\xed\x2b\x0b\x5e\x03\x4b\xbf\x83\x65\xd0\xd4\xe6\x2b\xc9\x53\x16\xf6\x5b\x51\xb1\x79\x57\x2d\x6c\xe6\xb8\x74\xe7\x54\xe8\x81\x14\x59\x69\x8e\xa6\x18\x7a\x3f\xf3\x15\xb5\x02\xd5\xef\x6c\x1d\x0d\xbc\x09\x71\x20\xad\x1a\xf6\x22\x84\x97\x67\xbc\x8f\x96\xa2\xce\x63\x33\x62\xe6\x33\xa5\xca\x74\x89\xce\xf6\xf5\x96\x2d\x7a\xa9\xc7\x0a\xd9\xf7\xbc\x21\x0b\x6c\xd8\x96\x4d\x78\xad\xcd\x31\x7e\xd0\x46\x9b\x5d\x6a\xa8\x69\xac\x69\xed\x42\xb7\x81\x56\xaa\x62\xd9\xbd\x48\x9f\xed\x45\xb6\x54\x02\x46\xce\x42\x0a\x77\x36\xa3\x6e\x62\x60\xa3\x86\x39\x67\x31\x63\xc8\x22\xcd\xd9\xfa\x1c\xd6\xd0\x70\xff\x1b\x83\xc3\x68\x6c\x7c\xf4\xc4\xd0\xd1\xc1\x71\x34\x39\xfa\xf6\x60\x47\xf7\x3e\x3e\x04\xad\x7e\xee\xc9\xb4\x37\xc6\x47\xdf\x1e\x1c\x6f\x0c\x9a\x82\xba\xcd\xef\xe6\x78\x88\x5a\x51\x37\xb0\x9c\xc5\xd1\x9a\x9b\xc3\x8b\x8d\x02\x95\x7f\xf1\xf6\xe0\x3b\x42\xa7\x93\xb0\x61\x78\x56\x27\x6a\x3e\x81\xff\x9b\xa3\xfd\xd2\x36\x3f\xcf\xda\xbf\xd4\x21\x91\x3a\xea\x7c\x9e\xaa\x6d\x7e\x72\x08\x53\xb6\xec\xf8\xf2\xb4\x45\x67\xcd\x79\xf7\x91\x7d\x5f\xb6\xc6\xe8\x2f\x4b\x53\x74\xde\x26\x39\xdb\x4d\x92\xb2\x2f\x7a\xeb\xdb\x65\x5f\x84\xf7\x3e\x5c\x88\xf2\x49\xfa\x4b\xda\x0d\xf0\x8b\xb8\x10\x75\x35\x62\xa0\x53\x6e\x7d\x41\xa1\x03\x09\xe8\x83\xca\x56\x59\x24\x1f\x5b\x8c\x16\x68\x05\xee\x3e\xa9\xa4\xf1\x33\x8a\xec\xf3\xd0\x36\x6f\x33\x7e\xee\xc5\x4f\xb8\x2c\x99\x58\xe6\xce\x0f\xdf\x5f\x0d\xc6\x5b\x93\xd9\x30\xc1\x42\x3f\x4e\x2d\x98\x9d\xa9\xa7\x60\x09\xf6\x7d\x8b\xa3\xe3\xc7\xde\x43\xef\xe6\xfe\x48\xbf\xca\x81\xab\xa2\x8b\x03\x4c\x67\x34\x40\x06\xbe\x99\x20\x1c\xee\xa1\x89\xf5\xc7\x54\xd0\x3f\x83\x6f\x06\xaa\x27\x35\x5c\x7f\xb2\x87\x18\x2b\x4e\xc2\x8f\xe6\x72\xba\xa9\x94\xc0\xd3\x37\x74\x6c\x68\x24\x56\xce\x15\x67\x43\xef\xfe\x21\x6f\x55\x14\xbb\x1c\x0a\xc7\x9f\x78\xad\x68\xbe\x66\x47\x9d\x17\x08\xfd\x8a\x15\x67\x93\x20\x16\xda\x4c\x0d\xcf\x43\x4b\x95\x25\x23\x04\x6f\xf8\x68\xff\x58\x9b\xb0\xd8\xf1\x68\xe6\x68\x77\x91\x5f\xa1\x89\xfe\xe3\xc3\xe4\x94\x1a\x35\xb0\x36\x74\x14\x0d\xe8\x9a\x46\x0e\xf7\x59\x2c\x63\x13\x6c\xf2\x09\x25\x4b\x53\x2f\x4b\x83\x89\x2b\xce\xb8\x6b\xa0\x81\xf1\xc1\xa3\x83\x23\x93\x43\xfd\xc3\xc0\xa6\x2a\x9a\x78\x67\x62\x78\xf4\xd8\xf4\xd1\xf1\xfe\xa1\x91\xe9\xa9\xf1\xe1\x00\xcb\x4f\x73\x08\xe4\x6b\xa6\xab\x8d\x49\x96\x45\xb3\x88\x90\x85\xc9\xe1\x0c\x3e\x05\x13\xcb\xb4\xd5\xab\x7f\x5e\x43\x2e\x85\x15\xec\x96\xe3\x97\xf0\x42\x15\x5d\xc6\x7d\x22\xae\x49\x31\x93\x9c\x81\x0a\x07\x00\x8b\x5e\x1f\x8d\x5e\x7f\xf0\x5e\x3a\x3a\x51\x04\x03\x58\xc7\x60\x09\x8d\xbe\xe0\xf8\xb6\x75\x86\x43\xa0\x76\x46\x43\xe5\xb1\x0e\x71\x26\xc7\xd9\x1c\x5e\x3c\xe2\xdf\x39\x8e\xc0\x3d\x64\x0e\x2f\xbe\xea\x7f\xf7\x6a\xe0\x22\x32\x01\x8a\xd4\x22\xd4\xef\x09\x6a\x36\x41\xa5\x0b\xe2\xed\x3b\x43\x2c\xa8\xe6\xa4\xbb\x64\xee\x23\xcb\x41\xe9\xaa\x87\xee\xea\x67\xf5\xf5\x1f\xa1\x9e\xd8\x59\xd7\xd9\xda\x7b\x78\x7a\xe7\xf3\xc7\x3b\xab\xa7\xea\x9f\x7f\xd3\x78\x2d\xaa\x5f\x84\x9c\xd3\x47\x37\x59\x51\x30\xda\x75\x76\xf5\x96\x57\x02\x8b\x5f\x39\xfc\x6e\xb8\xfb\xc9\x8e\xc9\xc8\xbb\xb5\x4b\xec\x22\xc4\x33\xdf\xbd\x89\x84\xaa\x6e\xd4\x2e\x85\x2b\xde\xdd\x65\x2d\x12\x32\x9a\x51\xeb\xcc\xca\x90\x5e\x27\x17\x5f\xe7\x89\xdf\xeb\xa0\x76\xae\xa1\xd2\xe5\x47\x74\x02\x91\x5a\xd3\x59\x72\xf1\x4b\x23\x37\xf9\xad\x21\x4b\xc9\xd9\x21\xaf\x16\x52\x71\x6b\xd0\x15\x90\x9d\x00\xed\x98\x29\x0b\x8c\x2d\x43\x97\xd5\x23\xde\x45\x16\xd8\x33\xf4\xdb\xab\x91\x9b\x6c\x7a\x99\x9a\x1d\x3b\xa6\xb9\xd8\xc5\x43\xae\x2c\xe6\xe4\x99\x5c\x45\xd1\x30\x5f\x3a\x5e\x9c\xa5\x37\x94\x14\xdb\x36\x48\x2f\xee\xce\x5f\x5e\x2b\x26\xa1\xad\x29\x44\x53\x52\x34\xef\x8b\x9c\x8a\xac\x45\x4b\xd5\x4b\x7d\x87\x0e\x89\x43\x66\x9b\x80\x0c\xa7\x38\xe5\x4c\x2f\x5d\x3d\x0c\x31\xad\x1f\x2e\x0d\x31\x28\x7f\x71\x0a\x7b\x7c\x04\x95\x60\x3d\x16\x0b\x92\xbd\x8f\x7e\xf1\x9b\xdf\x2c\xe8\x44\x11\x6e\x23\x16\xbf\xc5\xd5\xf7\xdc\x68\x01\x24\xc3\x41\xf1\x1c\xd9\x02\x47\x38\x36\xb9\xb9\xcf\xff\xc1\x43\xbe\xcd\x30\xfe\x56\xe9\xdb\x5d\xf4\x3b\xb2\x09\xa4\x5a\x85\xb8\x1d\xd8\x91\x8f\xac\xa3\x6d\xda\x9d\x81\xd3\xec\xe6\xae\x8c\x9c\x66\xd3\xb7\x37\x70\xd5\x54\x51\xe1\xc0\xa1\xf9\x57\x0f\x81\x33\xff\x00\xca\xfd\x1e\x1d\x1b\x9c\x44\xb9\xb7\x50\xe1\xc0\x80\xae\xd9\x58\xb3\x73\x93\x8b\x06\xee\x0b\xa6\xc4\x1d\xfa\x20\xb7\xb0\xb0\x90\x9b\xd5\xcd\x4a\xae\x6a\xaa\x58\x2b\xea\x32\x96\xc9\xdb\x32\xea\xf9\xe3\xff\x21\x6c\xd0\x07\x51\x7c\x6d\xf2\x5d\x23\x56\x32\xfa\x8f\x43\xc1\x70\xf5\xf6\xe1\x42\x94\xf1\xbb\x39\x65\x9e\x28\x27\xbf\x47\xc7\x07\x27\xdf\x1a\x3d\x4a\x3e\xbf\x85\xde\x1a\xec\x3f\x3a\x38\x4e\x3e\xcb\xe8\x68\xff\x64\x3f\x98\x25\xf4\xaa\x6d\x54\x6d\x44\x0e\x2c\xae\x7c\xbf\xb1\xc8\x4b\xa9\x05\x02\x2b\xaa\xa6\xda\x43\x33\x0b\x0d\x6c\x12\xca\x20\x09\x28\xc9\x6c\xb6\xcc\xfa\x8b\x65\x40\x20\x8f\x86\x66\x91\x2c\xd9\x12\xc0\x53\x2c\x3f\xd2\x6e\x5e\x91\x50\x4e\xee\x45\x12\x1a\x1b\x9d\x98\xa4\x00\x67\x30\x87\x09\x11\x69\x96\x8d\x25\xb9\x97\xf7\xd3\x44\xc1\x55\x02\x70\xfc\x1d\x0b\xdb\xac\x3e\x95\xb7\x6e\x64\x6f\xe4\xa1\x7b\x67\x45\x5a\x44\xfa\x3c\x36\x4d\x45\xc6\xa8\x8c\x25\x99\xa8\x2d\x10\x88\x97\x7b\x8b\x83\x06\x68\xbc\x49\x56\x05\xdb\x65\x9d\xf5\xbc\xc9\xfd\x3e\xcf\x48\xf1\xa6\x6e\x42\x2b\x2d\x59\x2f\x56\x2b\x58\xb3\x61\x98\x5e\x64\xd0\x32\xce\xf3\x8a\xa5\xd8\xc0\xac\xb4\x67\xbe\xac\x17\xad\x7c\x51\xd5\xab\x32\xf4\xed\x32\x17\xf3\xba\x59\x12\xc5\x4a\x67\xbd\x6a\x0d\x25\xe6\xee\xb2\xf6\x3a\xe1\x25\x74\x9d\x6d\xae\x81\x6f\xd1\x61\xa9\x97\x08\x16\xd3\xab\x5a\x17\x76\x44\x11\xc8\x70\x51\x71\xd6\x51\x41\xcb\xc9\x28\xda\x8e\x87\x01\xbc\x1c\xd4\xff\x59\x8d\x88\x15\xe7\xd9\x4f\x5f\x40\xe1\xf0\xb3\xae\xb3\x49\x57\x9d\xdc\x17\xd8\x30\xf0\xca\x8a\x13\x5c\x64\xf2\x73\x41\x6b\x58\x57\x68\x28\xcc\x1a\xe8\x5c\xe6\x05\xa6\x01\xbf\xdc\x5b\x51\x84\xa0\x15\xd8\xaa\xbb\xba\x42\xaf\x56\xe0\x5d\xe2\x95\x92\x99\xcf\xf1\x0c\xf3\x71\xad\x38\xd4\x27\x46\x68\x98\xfb\x7d\x14\x10\x6d\x83\x46\x6e\x6a\xb5\x9f\x01\xe2\x99\x26\xe0\x7c\x97\x19\x2c\x0a\xb4\x52\x7b\x78\x1a\xea\xb8\x6f\xba\xce\x6d\xa8\x03\x75\x87\x2e\x4c\x13\xbe\x81\x02\x60\xc1\xa6\x97\x0d\x95\x24\xba\x2d\x0d\xb8\x3e\x90\xa5\x3c\xc8\x5a\x20\x64\x2c\x11\x12\x45\x02\xa7\x47\x16\x42\x21\xf9\x72\x00\x07\x44\x21\x70\x44\x14\xc2\x47\x57\xa1\xf5\xc3\xab\x10\x77\x7c\xa5\x1a\x36\x93\xb3\x89\x75\x61\x0d\x64\xff\xcc\xa2\x9c\xd9\x9e\xa9\xbb\x11\x96\x49\x98\x77\xb6\x13\x68\xb1\x19\x3b\x9d\xc2\x8c\x3a\x7b\x3a\x83\xc6\x52\x5d\x32\x80\x63\x94\x25\x8d\x3b\x22\xac\x8e\xe1\x85\x7d\x2b\x9d\xc1\xa2\xa9\x0c\x69\x33\x4a\x32\x48\x29\x11\x8e\x1b\xca\xe1\x80\xbc\xc7\xd0\xb8\x8d\xb9\x8e\xdd\x1e\xbe\x5b\xa9\x96\x09\x28\x88\x73\x47\x32\x4b\x1e\x61\xa3\x27\xe7\x72\x74\xca\x55\x09\x56\xbe\x4c\x00\x27\x04\x3a\x66\x35\x42\x7c\x9c\x63\x56\xd0\x53\x04\xc2\xec\xe3\x40\x89\x67\x63\x0c\x40\xdf\x91\x9f\x15\x8a\x19\x41\x8c\x77\xf9\x77\x48\xc9\x78\xc7\x7b\x06\x40\x99\x20\x0f\x44\x08\xe4\xf8\x51\x9d\x2d\x70\x1a\x1d\x30\x9d\x09\xf0\xb0\xcb\xb9\x7d\x68\x34\x03\x37\x37\x8b\x25\xbb\x6a\xe2\xdc\xac\x2a\x95\xd0\x9b\x83\xfd\x93\x53\xe3\x1d\xd4\xb1\xe4\x50\x3d\x31\x41\x3b\xe2\xf3\x6c\x8c\x77\x73\x06\x64\x64\xbc\xe7\x2d\x64\x67\xa3\x58\xe5\xce\xea\x5e\x12\x40\xd9\x16\xf2\x64\x6d\x7c\xdb\x7a\x97\x3a\x42\x32\x5e\x11\x06\xb4\xbb\x0b\xc2\x07\xe9\x74\x3d\xb0\x36\xdf\x21\x80\x79\xac\xd9\x56\x7b\xe1\x33\xec\xdd\x8e\xc6\xcf\x76\xed\x82\xd0\xda\x63\x29\x72\x7b\xb1\x02\xf7\x06\x5e\x87\xd0\x8f\x07\x7a\xaf\xa0\x15\x6c\xf8\x3f\x9a\x61\xa4\x21\x34\xa9\xd3\xd6\x28\x90\x17\xaf\x91\x7b\xad\xcd\x00\xd1\xae\x39\x92\x61\x78\x65\xb5\x74\x9a\x4e\x79\x54\xc1\x25\x1d\x5a\x6a\x61\x4d\xee\x85\xba\x79\xde\xc5\xd9\xb2\xca\x22\xab\x61\x47\x68\xd2\x31\xc1\x28\x01\x4d\xcf\x6b\x1b\xbc\x6e\xf8\xdd\x90\xad\xc5\x73\xcf\xfa\x6d\x3d\xb6\x22\xf1\xca\x81\x46\x2a\x67\xdd\xda\x9a\xeb\x3c\xdc\xb9\x7d\x7d\xe7\xc6\x4f\x91\xf6\x5a\xa1\x29\xc5\x74\xc3\xea\x7c\x2d\x22\x99\x5e\xfb\xb7\x12\xc9\xa8\x97\xb0\x9d\xa3\x7d\xec\x73\xb4\x8f\x7d\x47\x9b\xa4\x8c\x55\x03\xbd\x3b\x30\x7a\xfc\x78\xff\xc8\xd1\xf6\x04\x0e\xc4\x2a\xaa\x2a\x2b\xf9\xcc\xaa\x98\xe4\x08\x45\x0f\x4d\x8e\x1e\x1a\x1b\x9e\x3a\x36\x34\x82\xfe\x0c\x39\x30\x7f\x46\x39\x33\x50\x48\x9a\xfe\x06\x9f\x5f\xa1\xba\x17\x0b\x9e\x31\xf5\x8a\xc1\x3a\x69\x40\x00\xa4\x59\xa1\xe1\xbc\x55\x4d\x25\x12\xb3\x27\x37\xdb\x13\x34\xe3\x34\x33\x72\x66\x8f\x21\x60\x10\x0e\x27\xb8\xe7\x3a\x27\x9f\x5f\xbb\xe8\xd6\xce\xba\x2b\xce\xee\xad\x1f\xf7\xee\x41\x44\xc8\x37\x35\xb7\xe6\x40\x40\xc2\x55\xe8\xb2\xf9\x10\x3e\xac\xb9\xce\x7a\xfd\xf4\x8f\x11\x5b\xe2\xfe\xd1\xd9\xf3\xb2\xb7\x4a\xe9\x44\xed\x38\x82\xe1\xff\x3b\x74\x94\xb5\x36\xb5\x0e\xb1\x7a\xe0\xb3\xba\x3e\x23\x99\x89\x6f\xc5\x78\x5f\xc2\x6f\x4f\xab\x8a\x56\xfd\x60\x5a\xaa\xc8\xff\xfa\x7a\x22\xa4\x9c\x89\x8e\x2f\xe6\xa0\xec\x38\x03\x80\x8b\xe5\xf6\xae\xa9\xfb\x06\xb9\xa5\xd9\x67\x31\xa0\x70\x91\xda\x02\x4e\x24\x64\xb0\xf6\x7b\x7b\x27\x25\x6d\x9b\x78\x50\xaf\x28\x36\xe2\x9e\x4f\x90\xbb\x5e\x61\x70\xda\x37\x52\xd1\x50\x28\xd6\x03\xe5\x72\x1e\x2f\x50\xe3\x30\xb0\x37\x70\xf7\x8c\x6e\x97\x9b\x55\x64\x66\xe3\x86\x7b\x7a\x06\xbb\x3e\x5e\x0b\x56\x9f\xf6\x51\x73\x9d\x0d\x1f\x35\xb7\x76\x69\xf7\xba\xb3\x7b\xf9\xcb\x46\x93\x79\x10\x3f\xc8\x73\xf9\x9b\xeb\x6c\x3d\x7b\x74\x73\xe7\x0a\xf4\xa3\x3f\xf5\x65\xfd\xec\xa7\xe4\x24\x7b\xba\x4a\x86\x8a\x08\x8c\xda\x25\x10\x18\xec\x78\x6b\x52\xc7\x99\x35\x9e\xcc\x59\x96\x8e\x0e\x46\x49\xc2\x52\x29\x58\x09\x1f\x7d\xc6\x96\x20\x37\x42\xd7\x30\x54\xba\x6a\xa4\x72\x3a\xba\xb1\xd1\x1a\x29\x16\xd3\x1b\x32\x52\xbe\xba\x76\xa9\x7e\xe1\x4a\xfd\xc9\x55\xfa\x3c\x88\x30\x42\xe0\x00\xad\x22\x19\x4a\xe9\xa6\x5f\x6d\x2c\xaf\x0d\xde\xf4\x68\x48\x45\x26\x15\xcf\xdb\x18\xf3\x25\x2a\x7c\xde\x04\xfb\x6e\xd4\x3f\x6f\x6d\xc8\x7d\x2d\x83\x9e\x88\x1a\x8f\xff\x40\x07\x2d\x16\xd7\x15\x2f\xa3\x24\x0b\x49\x66\x09\x7c\x34\x56\x47\xb4\xf0\x07\x14\x4a\x9c\xfa\xe3\xcb\xd0\xe6\x24\xe2\x12\x6d\x6b\xda\x34\xbb\x60\x88\x87\x18\x56\x3d\x03\xc7\x7b\xf4\x8a\xca\x62\xf0\xdf\x0b\x1a\x80\x2c\xc4\xea\x01\xb7\xdb\x6d\x22\x83\xa1\xff\x99\x3a\x53\x74\xed\x04\x8c\x1b\x26\x4b\x3e\x6f\x01\x7e\x21\xab\x3e\x1b\x4d\x47\x11\x85\x74\x15\x52\xb6\xdb\x88\x1d\xae\xcb\x67\x6b\xd3\xed\xa2\x57\x45\x5d\x2a\x9b\xbe\xda\xa1\x61\xa5\x22\x19\x7e\xd5\x2f\x72\xed\xdd\x47\x8f\x59\xe2\xd8\xfb\xe3\x35\x6b\x11\x85\x6e\x79\xce\x9a\xa0\xb1\x0f\xde\xb3\x8a\x64\xce\x61\xdb\x50\xa5\x22\x6e\xcf\xca\x17\x04\x10\x48\x75\x6b\xcf\x0c\x51\x51\x4a\x66\x30\xc9\x92\xa7\x50\x5a\x68\xfe\x08\x8f\x8f\x27\x1f\x3d\xe7\x18\xf9\x3c\xdc\x3f\x82\xe6\x5f\xf5\x7f\x7e\x15\xbe\x6a\xfb\x14\xcb\x12\x87\xd0\x71\x86\x26\xcb\x8a\x85\x74\x03\xb3\xbc\x66\xc5\xf2\xf3\xcf\x6c\x1d\x0d\xa8\x7a\x55\x46\x6f\xd2\x08\x8f\xff\xed\x05\xc3\x53\xb7\x5d\xa0\x24\xff\x0c\x0b\x39\x2f\xf2\x1a\x6e\x26\xa6\x95\x62\xa9\xb4\x8d\x76\x92\x0d\xbf\x29\xa9\x36\x36\xb1\xcc\x32\xa6\x4d\xa5\x22\x99\x70\x24\xa0\xa2\x64\x61\x78\xdf\x6e\x40\xd2\xd6\x91\x89\xe9\x02\x4b\x11\xb4\xd0\x42\x59\x29\x96\x91\x42\x18\x11\xce\x0e\x30\x99\xcd\x1f\x41\xac\xcb\x22\x7a\x83\x3e\xd6\x3f\x36\xc4\x85\x7f\xe2\x8b\xaf\xc2\x93\x33\x8b\xc8\xc4\x15\xc9\x30\x82\x8d\x25\xfd\xf9\x40\xc1\xb5\xf9\x23\x08\x12\x23\x09\x76\xf3\xaf\xd2\xcf\x79\x84\x7e\x47\x4f\xec\x4a\x05\xc3\x11\x3e\xc7\x0b\xe3\xb1\xc7\x11\x6b\x58\x86\x08\xa1\xca\x55\xda\x33\x5d\xd6\x17\x34\xfe\x10\xc3\xce\xd6\x91\x61\x82\xfd\x1a\x49\xb2\xac\xd0\x1c\xf6\x28\x0a\x33\x98\xbc\x4d\x23\x53\xe5\x3c\x1a\xd5\x8a\x38\x06\xdb\xb2\x34\x8f\xd1\x0c\xc6\x1a\x67\x2c\xb9\x97\x0f\xe6\x97\x8d\x22\x47\x31\xcc\x86\x25\xaa\x9b\xb8\xa2\xcf\xf3\xda\xa9\x21\xc6\x68\xaf\x6e\xaa\xee\xbb\x97\xdb\x7b\xbf\x83\x1a\xa9\x7e\xd0\x49\xae\x54\x55\xda\xac\x99\xa3\x9b\x25\x70\xd4\x59\x9d\xa0\xd1\x9e\x21\x03\x4e\x7b\xb9\xbd\x57\xc1\x88\xd2\xe6\xb0\xf4\x5d\xa8\x39\x5d\xc6\xc5\x39\xab\x5a\x69\x8f\x74\x46\xd5\x2c\x35\x4a\xb3\x06\x1f\x7a\x37\x61\x27\xcb\x41\xc9\xb2\xaa\x90\xba\x54\x96\x6c\x1a\xf9\x17\x96\x31\x26\xb6\x0c\x5d\xa3\x3a\xba\x27\xa1\x1a\x1a\x66\x2b\x16\xd2\x88\x3a\xa6\x95\xb0\x19\xa8\xc3\xa6\x9b\xf4\x17\x9b\x81\x81\x8b\x04\x13\x45\xaf\x1e\x3e\x4c\x7e\x7f\xfd\xc8\x61\x3f\x34\xb0\x01\x6e\x59\xb2\xe8\xf6\xa5\xee\x62\xb9\x17\xa9\x58\x9a\x07\x07\x01\x44\x41\xb1\x1b\x02\xd4\xa6\x08\xed\xd4\x1e\x0b\xe2\x15\x67\x24\x0b\xe7\x51\xbf\xaa\xa2\x39\x4d\x5f\x50\xb1\x5c\x82\x12\x10\xb1\x63\xf1\x28\x44\xf1\xf6\xef\x45\x8a\x56\x54\xab\xa1\x96\xbb\x33\xb4\x75\x2c\x15\x23\xfc\xcb\x39\xbc\x68\xb5\x27\x2b\xc2\x6b\xaa\xcf\xce\x62\x93\x8c\x16\xf2\x70\xb2\xa3\x2f\x0b\x86\x4c\x1e\x20\x60\xe9\xee\x0a\xfb\x78\xa3\xc7\xb3\x0f\xe5\x0b\x49\x55\x13\x05\x7b\xf7\x38\xa3\x3d\x86\xf0\x71\x0c\x72\x04\x67\x93\x3c\x1a\xd1\x91\x64\xdb\x98\xdc\x29\xf9\x00\x15\x49\x86\x0b\x30\xd3\x2c\x62\xe8\xf8\xbf\x3d\xc7\x18\x10\x90\x5f\xbc\xc9\x56\xd2\xab\x36\x92\xb1\x65\x9b\xfa\x22\x3f\x6f\xa3\x6a\x02\x19\xa6\x28\x11\x45\x83\xd1\xa6\x01\xd7\x3c\xea\x9f\xb5\xb1\x19\x3f\xca\x22\x8b\xbe\x5d\x90\x34\x88\xcf\x35\xab\x1a\xc2\x0a\xb9\xac\x27\xc4\x51\xe9\x0d\x3f\xfa\xa7\x7b\x51\x27\x9a\x87\x8d\x01\xd9\xa2\x8a\x25\xad\x6a\xb4\xbb\x5d\xac\x72\x7b\x9a\x73\x20\xea\xb1\xfd\xf7\xdb\x3b\x5c\x28\x3f\x89\x1a\xbc\x66\x05\xd2\x73\x5e\x65\x0e\x30\xd1\xee\xd2\x95\xc9\xc1\x6d\xd0\xf3\x35\x8f\x0c\xfe\x6e\xba\xa3\xeb\x37\x05\x18\x17\x32\xec\x0f\x10\xfe\xaa\x93\x61\xb8\x0a\x46\xa0\xb6\xab\x3f\x31\x50\xc2\x40\x48\x02\x3b\x13\x9d\x22\x3c\x90\x20\x6c\x31\x38\x1a\xfd\xaa\xa3\xb1\x02\x11\x71\x00\x99\x7c\x6a\x13\xa0\xa1\xe7\xb8\xea\x96\x33\x33\x60\xbc\x00\xbc\x77\x83\x0e\xe1\xf6\xce\xde\x04\x78\x4d\xf6\x54\xd6\xf3\xb2\x6c\xa9\x84\x3b\xb3\x61\xb1\xde\x26\x99\x00\x81\x16\x23\x9e\x22\xe6\x6d\xf4\xa1\x91\xa3\x83\xbf\x6f\x0f\x6e\xa0\x2a\x53\x9b\x42\x9a\x07\xd7\x93\xfd\xab\xe2\x79\xdc\x66\x0b\x13\xb3\xaa\xe5\x6c\xc9\xf2\x83\x4c\x10\x0b\x15\x81\x16\x31\x44\xae\x4d\xf6\x4f\xbc\x1d\x64\x82\x48\x69\xe4\xe2\x2c\x18\x1c\xa1\xfa\xb1\xac\x58\x86\x2a\xd1\x9a\xf1\x60\x85\x64\x1a\x8b\x64\x18\x9e\xae\xa4\x90\xeb\xbc\x64\xcd\x59\x90\xb4\x03\x56\x73\x18\x1f\xc6\x52\x2c\x54\xd5\x94\x3f\x56\x71\x2f\x2a\x99\xd8\x08\x9d\xf3\x3d\x16\x62\xe9\x43\x54\x51\xc3\x81\xf7\xc8\x3d\x5f\xc1\x0b\xf0\x8d\x5f\x29\x8e\xa0\x90\x1c\xcf\xe0\xcd\x9e\x59\xd8\x0a\x85\xc2\x81\x99\xaa\x26\x43\x55\x7a\x5c\x44\xa6\x34\x87\x91\x3c\xd3\xc7\x6e\xe7\x34\x61\x85\x92\x85\x7d\xd5\x2e\xd1\xa1\x37\x25\xd6\xe6\x15\x53\xd7\x2a\x58\xb3\x73\xf3\x92\xa9\x40\x5c\x1f\x30\x45\x47\x60\xc3\xd1\xee\xed\xf1\x97\x05\x0d\x8b\x02\x39\x30\x7e\xe0\x14\x54\xab\x98\x43\x47\x87\x26\xde\x8e\x16\xb6\x6a\x33\x3c\x36\xfb\xd6\x62\x99\x90\x40\x70\x9a\x75\x02\x8c\x87\x84\xbe\x9b\x9b\x41\xf4\x68\x22\x64\xf3\xc6\xe8\x30\x32\xb4\x51\xcf\xed\x68\xe6\xec\x78\xed\x0c\x46\xb3\x90\xfc\xae\x02\x4f\xdc\xfc\x19\x46\xe4\x77\x07\x54\x63\x69\xb8\xec\x21\xa6\xa5\x90\x05\xf3\xea\x7c\xfc\x4e\xa1\xb4\xcb\x8c\x76\x2e\x18\xee\x8c\x06\x47\x4e\x4c\x9f\xe8\x1f\x0f\xff\x71\xa2\x7f\x78\xaa\x5d\x12\x0b\x42\x36\x51\x8f\xa1\x9b\x76\xcf\x9f\x7b\x34\x5d\xc3\xed\x85\x83\x8a\x61\x1f\x34\x4c\x1d\xa4\xc9\x9f\x11\x38\x83\xfe\x0c\xc1\x65\xaf\x04\x5a\xf6\xd2\x61\x83\x66\x2a\xc3\xc4\x45\x28\x13\x34\x53\xb5\xa1\x63\x57\xb1\x88\x0d\xe8\xc4\xa5\x9b\xa8\x87\x01\xec\x69\xef\xb6\x4b\x30\xd5\xcd\x52\xce\xd4\x55\xec\x27\x4d\x90\xbb\xc5\xf8\x28\xad\xcc\xdb\x0d\xb0\x30\x5b\xf2\x89\x73\x6f\xcf\xa8\x59\x3a\x2e\x69\x52\x09\x9b\x3d\x28\x87\x86\xb4\x79\xc5\xc6\xcc\x6d\x4f\xbe\x05\x2f\xb7\xd5\x8b\x2c\xac\x42\xc3\x1a\x4d\x46\x45\x68\x6d\x4c\xcd\xec\xbd\xcc\x30\x62\x23\xcb\xc0\xd4\x24\x08\x8d\xaf\x59\x83\x9c\x9e\x37\x14\x55\x55\xb4\xe0\x08\x03\xac\x46\x91\x3f\x02\xd1\x4e\x66\xe8\x73\x84\xc2\x7a\x55\xb3\x99\x4b\x7d\x91\x1c\xf6\x48\xd1\x66\x75\x1f\xd9\xfe\xaa\xac\xd8\x3a\x80\x1a\xe7\x95\x48\x11\x3b\x28\x6c\x1d\x6c\xe4\xe4\x05\xe6\xcf\x81\xca\x8e\x6d\x13\x92\xda\x15\x08\xf1\xc0\xb6\xd0\xd1\xa2\x44\x61\x45\xd4\xc3\x13\x44\x23\x83\x8c\x0f\x30\xb6\x52\x8b\x04\x35\xaf\xf6\x84\xcd\x14\xed\x6f\x8c\xe6\x9a\x54\xfa\x42\xdd\x5d\x46\xa2\xbd\x62\xc9\x6d\x23\xd5\x98\x73\x05\x3f\x45\xd3\xaf\xb2\x83\x3f\xed\xc3\x0f\x64\x60\x75\x08\xbf\x71\xcf\xd3\x8b\x78\xc7\x02\x25\x05\xf8\x46\xc1\x32\x41\x5e\x4a\x23\x5a\xc8\x37\xac\xd2\x1a\x4b\x2b\xa1\xfe\x57\x09\x95\x94\x79\xac\xd1\x20\x97\x20\xd0\xa3\xe4\x06\xa7\x1b\x22\x79\x22\x19\x46\xc8\x5e\xeb\x09\x29\x76\xcf\x0a\x48\x86\x20\xd4\x80\x60\x81\xcd\x48\x9e\xed\xe5\x0f\x7a\x72\xce\x06\xff\x00\x64\x34\x28\x16\x45\xad\x7d\xb2\xb2\x66\xc1\x2f\x74\x3f\xa6\x43\x62\x3f\xf7\x63\x59\x32\x71\x8e\xb9\x97\x33\x6a\x50\x19\x30\x4b\x75\xfa\xbe\xe7\x7d\x85\x16\x26\xa1\x9b\x53\x0e\x9a\xc6\xb5\x79\x1b\x49\x48\xcc\xec\x14\x60\x9b\x07\x20\x4f\x3c\xa4\xa5\x94\xb1\xdc\x69\x02\x22\x05\xe8\xf9\x9e\x3b\x5d\x8e\x36\x67\x15\x48\x04\x84\x8b\x7a\xd0\x5a\x95\x53\x34\x19\x7f\xf0\x1e\xb4\x1a\x60\x86\x14\xf2\xc7\x30\x7a\x77\x46\xd1\xe4\x69\x49\x96\x4d\x6c\x59\x7d\xef\x11\x91\xd0\x57\xd6\x2d\xfa\x0f\xf9\x8b\x72\xc3\x9c\x62\x40\xc0\x53\x0e\xca\xd2\x03\x46\xfe\x0f\x26\xae\xe8\x36\xce\xe1\x0f\x70\xb1\xea\xfd\xc2\xca\x9b\xe4\x0c\x0b\x57\x65\x3d\x67\xdb\x8b\xf0\xf5\xac\x6e\x16\x71\xf4\x4b\x9e\x5b\x1a\xf8\xba\x5d\x12\xe4\x8a\xba\xdc\xa6\xdc\xb2\xca\xac\x57\xae\xdc\x99\xb5\xd0\xb2\xa5\xe2\x1c\x9a\x98\xec\xc8\x2a\x0f\x40\xda\x64\x84\xa6\x72\xaf\x23\xb0\x99\xd8\x54\x3a\xb7\xc9\x5a\xb6\x6e\x74\x06\xc1\x96\xcc\x12\xb6\xe3\x42\x8c\xdb\x04\x67\xcd\x75\x18\x70\x69\x63\xb3\xa2\x68\xe4\x70\x08\xdb\x62\xc1\xf6\x3a\x74\x34\xf1\x92\x1e\x79\x97\x59\x32\x5f\x6b\x0b\x8f\xaa\x46\xa4\x42\xa4\x60\x1e\xab\x2c\x10\x53\xdd\xc2\x0f\x85\x7c\x6b\x74\x62\x72\x84\x85\x71\x07\x7a\xe4\xb7\x6f\x12\xec\x0a\x26\x89\x74\x8c\x1d\x31\x18\x72\x59\x59\x34\x25\x1b\xc3\x5d\x10\x9b\x49\x4d\x78\xb3\x9b\xf0\xfe\x0f\x1f\x6b\x42\xce\xc2\x22\xdb\xca\x00\x01\x0b\xc6\x00\xdc\xcc\x03\x71\x8a\x92\x61\xa8\x8b\x50\xc9\xf8\x03\xc5\x82\x10\x3d\x1e\x14\x10\x28\x52\x65\xa1\xaa\x66\x2b\x2a\xb9\x87\x2f\xb2\x8e\xb4\x20\x79\xc4\x99\xa4\xa9\x90\x4f\x2e\x23\xd3\x99\x02\xd0\xda\x10\x2f\x2f\x85\x28\xe3\x7a\x12\x2c\x13\x0b\x26\x07\x1e\x7b\x10\x65\xc8\x9c\xa9\x06\x78\x09\x49\x1f\xc9\xf8\xa4\xd9\xc0\xed\x5f\xef\xab\xda\x8b\x4c\x00\x68\x32\xfa\xfe\xa4\x00\xb4\x8c\x44\xb7\x92\x00\x9a\x22\xe2\xa5\x01\x34\x59\x0b\x48\x03\x68\x13\x85\x44\xf3\x79\x07\x30\xbb\x60\x2c\x6e\x0a\xf8\x7f\xcc\xc5\xad\x91\xb2\xe1\x16\xdf\xa1\xe1\x58\x04\x35\x60\x21\xe8\x18\x6e\x57\xac\x86\xa9\x07\xf8\x1f\xbb\x61\xcb\x84\xed\x82\x7d\xac\x6a\xc8\x92\xb0\xee\xa6\x81\xfc\x7a\x30\x63\xa3\x13\x43\x93\x43\xb4\x23\x3d\xb3\x03\xfc\xd9\xb3\x4c\xc0\x97\xaa\x5e\x9c\xfb\x73\x2e\x57\xd5\xc8\x87\x36\xaf\x33\xdd\xc2\x26\xea\x74\x19\x23\xa7\x90\x55\xd6\xab\xaa\x0c\x29\x3d\xe8\x4f\x8a\x01\x55\x6c\x7a\xfd\xa4\xc5\xe0\x97\xc0\x5c\xaa\x5e\x94\x54\x24\x2b\x26\x2e\xda\xba\xb9\x98\x47\x63\xba\xa5\xf0\x0c\x1f\x09\x19\xf0\xd7\x3c\xed\x1a\x52\xc2\x26\x91\x85\xb6\x85\x0c\x53\xd1\x89\x96\x44\x19\x82\xb0\x80\x6e\xda\x3c\x0e\x59\xd5\x17\xb0\x05\xe1\xb8\x65\xa5\x54\xc6\x96\xdd\xa6\x6e\x43\xe9\xd6\x41\x9f\xb6\x10\x04\x5e\x45\xb4\x82\x26\x47\x27\xfb\x87\x03\xed\xd9\x62\x7b\xb6\x69\x10\xf0\xc7\x6f\x93\x19\x77\x6d\x43\x7f\x46\x74\x61\x5f\x60\x57\x37\x46\x9c\xe4\x4b\x07\x6f\x3a\xf2\xdb\x89\xd1\x91\xe9\xf1\xa9\xe1\xc1\x89\xa4\xa6\x4e\xdd\x1b\xd0\xab\x69\x43\xd3\xd3\x58\x81\x67\x50\xbb\xda\x69\xe1\x39\x64\xf3\x7d\x02\xc1\xfa\x12\xb2\x14\xad\xa4\x62\x24\x99\xa6\xb4\x48\xdd\x94\x81\x26\x9c\x16\x52\x34\x4b\x91\x31\x92\xb1\x55\x34\x95\x19\x1e\xcb\x0e\xf6\x71\xbf\x76\xf3\x09\x68\xde\x09\xf5\xc4\xa1\xff\x0b\x53\xc0\xd8\xe6\x7c\x97\xf7\xb9\xf0\x7b\x79\xd2\x66\x9e\xa6\x6e\xeb\x45\x5d\xf5\x3b\x79\xda\x45\x83\xb9\x22\x82\xcf\xc9\x98\x5c\x2a\x80\xd4\xfe\xa3\x47\x0e\xe7\x0f\xe7\x8f\x1c\xc9\x1f\x3e\xf4\xea\xeb\x31\xef\x30\xe1\xce\x9f\xfe\xb7\xc3\xbd\xaf\xbf\xfe\x5a\x3c\xec\xa2\xa9\x18\x61\xd8\xfd\x84\x37\x21\xaa\x00\xf6\x38\xd4\xae\x41\xb6\x29\xcd\xce\x2a\x45\xba\xcf\xff\xaf\xae\xe1\x7e\xbf\x59\x0c\x6d\x38\x8a\x10\x7a\xef\xe5\xbb\x26\x71\xd6\x4b\x68\xc9\x44\xb6\x3b\xaf\xd0\x17\xdb\x9a\x17\xbd\x9b\xb3\xd1\x64\xff\xb1\x4e\xf7\x5b\x36\x38\xbc\x80\x46\xc1\x91\x19\xfc\x92\xfa\x00\x07\x84\x47\x97\xba\x01\x37\x12\x27\x9b\x66\xbf\x45\xb5\x6a\xd9\xd8\x9c\xd6\x74\x19\xb3\xbd\x1c\x90\x20\xec\x19\x72\x6b\xa0\xbf\xfd\xa6\x37\xfa\x63\x05\x57\x74\x73\x71\xba\x32\x43\x1f\x38\x72\xf8\xd5\xd7\xbd\x47\x96\x43\x8d\x82\x45\xcb\x01\x95\xf1\xf4\x59\xea\x43\xca\xc9\xcc\x0e\x29\x23\x5b\x2a\xb1\xec\x2a\x9e\x2d\xb4\x60\x2a\xb6\x8d\x35\x4e\xdf\x13\x03\xfd\x63\x3c\x1a\x7f\x02\x05\x5c\x13\x88\xbb\x26\xa8\x86\xab\x2d\xa2\x19\xbd\xaa\xc9\x21\x11\x90\x1c\xbd\x1b\x21\x37\x04\xde\xe5\x0c\x54\xd2\x55\x39\xc5\x83\x9c\x73\x4d\xa9\x32\x5d\xa2\x84\x79\x3d\xda\xc7\x58\xf0\x62\x9a\x66\xbe\x29\x00\xd9\xb0\x36\x84\xb2\xbd\x48\x9f\xed\x05\x5a\x92\x6f\xb2\x10\x2d\x81\x39\xf2\x19\xc2\xfc\xb2\x84\xdd\xb5\x9e\xc6\x09\x0b\x9b\x1d\x3c\x1b\x31\xda\x7b\xa4\xcf\x82\xf0\x09\xb5\xba\x27\x47\xdf\x1e\xec\xe8\x2e\x93\x9c\xf5\xd2\xd0\x43\x17\x4d\x8d\x0f\x77\x34\x5c\xa7\x2d\x92\x63\xe0\x04\x6e\xf9\x69\x1a\x25\x6b\xe8\x9f\x5f\xf9\xfe\x27\xe8\xb4\xdb\xda\x4c\x5e\x8e\x4e\xbb\x2d\xe3\xbc\x5f\x9d\x76\x5b\x46\xac\x85\x4e\xbb\xfb\xcf\x72\xfb\xd9\x69\x77\x5f\xf8\xf1\x45\x34\xda\xdd\x07\x5e\xcd\xb8\xd1\x6e\x67\x4c\xfc\xd2\x88\xcd\xae\x37\xda\x6d\x9d\x53\x5f\x9a\x46\xbb\xed\x30\xe5\x8b\x6a\xb4\xdb\x11\x3b\xa6\xb9\x83\x64\xd2\x08\x16\xa5\xeb\x04\xdb\xde\xe8\x29\x7b\xf2\x36\x85\xd8\x7a\x4f\xde\x66\x20\xbb\xd6\x9e\xb3\xb5\xb5\xf1\x57\x86\x08\x48\xba\x2a\x64\x4d\xfc\x15\x21\xdf\x7b\xab\xd1\x6e\x2c\x70\x16\x4b\xd6\x9d\x81\xbb\xd6\x9f\xf5\x85\x31\xc0\xfc\x6b\x92\xd1\x66\xa0\xe2\x3c\x36\x2d\xa5\x4d\x4a\xb3\x77\x3d\xa1\xd5\x53\x9c\x45\xb9\xf9\x1e\x30\xa1\xc2\xe7\x1c\x7b\xa2\x07\xec\x9a\x92\x6a\xe9\x5e\x1e\x56\xcb\xb6\xcd\xc9\xf1\xfe\x81\x41\x34\x38\x3e\x3e\x3a\x4e\x0e\xba\xfe\xc9\xa1\x91\x63\x68\x78\xf4\x18\x34\x59\x44\x4b\x4b\xf9\x31\xc9\x2e\x2f\x2f\xf7\x15\xb4\xa5\xa5\xfc\xa0\x69\x2e\x2f\xb7\x36\xc2\xf0\x10\xab\x36\xc5\x7c\x8a\x15\xac\xd9\x7d\xad\x81\xa0\x09\xe5\xad\xbd\x33\x36\xd5\xda\xf3\x92\x06\x96\x65\x60\x2f\x0b\x3c\x57\x5e\x9d\x1b\x7d\x16\x91\x0b\x9e\x77\xb0\xc1\x05\x4f\x00\x7d\xe7\xfa\x99\x9d\x2b\xd7\x42\xaa\xda\xea\x4f\x50\x9f\xfb\x2b\xa8\x76\xbd\xc5\xca\x5e\x13\x0d\xe8\x29\xff\x70\x89\x57\xf2\xfe\xd8\xad\x3d\x72\x57\xef\xc2\x93\x5e\xbb\xce\x4f\xdd\xda\xc7\x62\xa4\x5f\x42\x84\x45\x9d\x35\x5a\xc1\x16\x1d\x3c\x4a\x5b\x7a\xf6\x79\x6d\x7f\xb0\xb0\xc0\x76\x37\xe6\x80\x0e\x46\x1a\xd6\xf6\xa1\x67\x8f\xce\xef\x6d\x7c\x53\xbf\xb0\x2d\x2a\x92\x2c\x69\x84\x85\x58\xfb\xc7\x68\x0d\xa2\xde\x50\xf5\x2c\xd8\xcb\x5e\x6d\xad\x4a\xd5\xb2\xd1\xac\x62\x5a\x50\x46\x91\x55\x7c\x12\x4c\x36\x3a\xcd\xb8\xa9\xd5\xcf\x9c\x7d\x7e\xed\x76\x84\x87\xdc\x15\xa7\x7e\x6a\x0d\xba\xb6\x46\x20\xdc\x27\x7f\x3a\x1b\x0d\x04\xbc\xc8\x80\xaf\x9e\x76\x6b\x5f\x00\xf0\x07\x01\xe0\xb4\xa3\xc5\x47\xa0\xea\x3f\x20\x9f\xc9\xd5\xac\x19\xbf\x12\x02\x81\x29\x38\x58\xd9\xd3\x2b\x55\xc8\xeb\x3d\x49\x2c\xc4\x1a\xcb\x89\x61\x01\xfc\xca\xf4\x77\x68\x7d\x0b\x53\x63\xed\x32\x6e\x84\x8a\x81\x3b\xeb\x21\x54\x57\x3f\x83\xef\xbf\x61\x6f\x11\x36\xf8\x9a\xcc\x94\x51\x23\x74\xcb\x0a\xf4\x9a\x49\xb7\x21\xbd\x09\x42\x45\x48\x45\x9b\xd5\x79\xc3\x8c\x59\xdd\x24\xe2\x94\x15\xaf\x1c\x91\x2a\x78\x79\x79\x7f\x66\xdc\x38\x2c\xdc\xc3\xd8\xfe\x60\x57\xd1\x36\xe7\xfa\x12\xca\x9f\xa6\x38\xf3\x6a\xd5\x33\xba\x5d\x46\xaa\x5e\x9c\x83\xdd\x48\x03\x22\x58\x9d\x6f\x61\x79\x3b\x18\x16\x3a\x18\x11\x5e\xb9\x47\x10\xa9\xfd\x83\xa3\xb0\x01\x5d\x8b\x1e\x26\x3e\xc3\xdb\x39\xf8\x17\x60\xda\xb5\xe8\x63\xb8\xf1\x6f\x37\x6c\x5a\x51\xcf\x97\x98\xa9\x90\x03\x9a\xe6\xa1\x2c\x2f\xc3\x94\x96\x96\xf2\x47\x69\xe4\x87\xbc\xbc\x2c\x9a\x51\xe8\x2d\xd7\xd9\x08\xbf\x85\xba\x86\xb1\x17\xca\x32\xa3\xd8\x54\x1e\x12\xfa\x1f\xa2\xcb\x20\x26\xff\xc7\x20\x8e\xcf\x80\xe9\x84\xd3\x98\x7c\x49\xf7\xc3\x86\x47\xfb\x43\xd1\xb5\xc8\x16\x7d\x08\x9b\xb4\xf5\x12\x86\x3a\x71\xe0\xed\xf7\x42\x3a\x25\x4d\x3e\x04\xa5\xc9\xed\xb2\x68\x1e\xf0\x3a\x21\x36\x7f\x09\x74\x75\xe8\x52\xf5\x68\x65\xf7\x1f\x97\x5c\x67\x33\x4b\x6c\x4d\x49\x93\xf5\x4a\x2e\x06\x69\xf2\x55\x6f\x4b\xa8\x07\x61\x41\x97\x01\xdd\xb4\x0f\x75\x6b\x1a\x34\x50\x52\x37\x59\x79\x9e\x72\xa0\x9e\x25\x38\x2c\x7b\x89\x7a\x30\xc7\x92\x11\xc1\xa7\x48\xa3\x89\xa8\xc3\x92\x7e\xc3\xfc\x83\x48\x32\x44\xf9\x4b\xbb\x67\x7e\xa0\x1d\xe7\x03\x5d\xc7\x02\xed\xd0\x1b\x25\x10\xd9\xd7\x9b\x6e\xed\x0e\x30\xd8\x9a\xbb\xe2\xb0\x33\x92\x3c\x43\x77\xbd\x2f\x8c\xeb\x6b\xdf\x3f\xbf\x76\x11\x1a\xb9\xb3\x76\x65\x60\xf0\xbb\x45\x46\x59\x7d\xcc\x7e\xad\x5d\xaa\xdf\x3e\xb3\xf3\xe9\xb7\xb4\xd9\xbb\xeb\x6c\xef\xdd\xdc\xd8\xbd\xfd\x63\xb3\x66\x65\x94\x3c\x41\x39\xcb\xc2\xfd\xa2\xda\x47\xdb\xca\x04\xa1\x89\x40\x36\xfb\x38\xa7\x41\xd2\x5e\x34\xc0\x63\x4d\x4b\x51\x20\x5a\x8a\xc2\x6f\xa3\xae\x6b\xc9\x4b\xd4\x2a\x94\x24\x54\xa0\x29\x27\xbf\x95\x0b\x05\xcd\x1d\x58\xbe\xef\x61\xee\x71\xfd\x68\x52\xcf\x5d\xd1\x4a\xde\x68\xf9\xbc\x58\xb2\x25\x8c\x00\xa6\x54\x18\x87\x00\x10\x0c\x85\x8b\x50\x91\x9a\x30\x00\xdc\x88\xc5\x63\xed\x7e\xb7\xbe\xf7\x0f\x22\x11\x59\x17\xb2\xb4\x43\x04\x6b\x83\x42\x31\x6d\x76\x0f\x25\x47\x46\xff\xd8\xd0\x09\xfa\xd7\xf2\x32\xb4\xa8\x57\x4c\x6c\x21\x72\xfd\x0b\x3c\x74\x5c\xd1\x06\x86\xfd\xe7\x68\xe7\x7b\x72\x87\x2d\x56\x4d\x13\x6b\xb6\xba\x48\x96\x30\xf0\xc2\x1b\x8a\x26\x99\x8b\x81\x17\x26\x75\x54\x35\x4a\xa6\x24\x63\x5a\xfb\x6b\x60\x78\x28\xdc\xda\xbe\xcf\xbb\xfd\x97\x14\xbb\x5c\x9d\x81\xe8\xf9\x60\x7f\xfb\x43\x45\x55\xf9\x95\xcc\x5b\x5a\xb5\x76\x4b\x6c\x4e\x80\x84\xc9\x0f\x0c\x0f\x1d\x57\x60\x12\x4d\xa7\x4d\x89\xb4\x8f\xf3\x6d\x9c\x19\xb4\x6a\x7c\xec\xe9\x57\xa1\x19\xd2\x36\x3a\x30\xbf\x98\xc7\xf8\x3c\xc1\x1d\xf0\xf4\xd4\xde\x1d\x07\xc4\xfd\x35\x77\xa5\x86\xd0\xee\x85\x27\xf5\xeb\x1b\xa0\x7f\x86\x5e\x24\xf0\x02\x13\x47\xfe\x2b\x30\x4a\xed\x12\x88\xe6\x55\xd0\xa5\x1e\x10\x85\x9d\xf5\xf3\xf1\x5b\x3e\xee\x7c\x7d\x13\x2e\x37\xb7\xe0\xb0\x07\x11\xdc\xd0\xde\xa6\x55\x62\xa5\xe0\x82\x50\x93\x18\x5b\xd7\xd5\xd6\x38\x0a\x7c\x02\x7e\x38\x0c\x0f\x93\xa1\xbe\x62\x56\xfb\x8e\x87\xb3\x40\x95\x5a\xf2\x04\xd6\x90\xd0\xb4\xe4\x1f\x61\xb4\xd5\x93\xaf\x79\xae\xf3\x77\xc3\x87\xf1\x3a\x3b\x8c\x6b\xe7\xdc\xd5\xbf\x01\x59\xd7\x40\xea\x37\xf8\xdd\xf8\xf5\x20\x61\x26\x9a\x8c\xde\xc2\xaa\x48\x86\x03\xcc\xcf\x58\xdf\x4f\x22\x53\x3f\x01\x5d\xee\x6a\x32\x40\x72\x65\x49\x01\xb0\x7e\xf1\x7c\x32\x9c\xf7\x09\x7b\xd1\xcf\xcb\xcb\xef\x23\x85\x96\xe5\x67\xb6\x29\x5a\x6e\x9f\xe5\x41\x61\x99\xc6\x2d\x6b\x34\x64\x6b\xe0\x4d\xbe\xc8\x87\x24\x55\x91\xac\x3c\x42\xe3\xb4\x64\x2b\x01\x10\x01\xcb\xd9\xa1\x09\x78\x0d\xe9\xa6\x4c\xab\x05\x73\x47\x0f\x0d\x11\x25\x0f\xd0\xc5\x86\x3b\x89\x85\x85\xe7\x85\x77\x56\x93\x3b\xec\x63\x70\xae\x5d\x05\xfd\xe2\x43\xcf\x77\xc8\x1d\x70\x70\x62\xf3\x96\x6b\xd0\x44\x6c\x2b\x48\xba\xe8\x1c\x88\x82\xb6\x7a\x1e\x9e\xfe\x10\x6e\xfe\x57\x08\x0d\x82\x6f\x1c\xaa\xaf\x7d\x59\xbf\x78\x3e\xb0\xaf\xdb\x46\x27\x74\xc5\xf3\xdf\xdd\x60\x8d\xb9\x6a\x97\xea\x17\xb6\xf7\x56\x7f\x86\x3d\x4e\xd9\xf6\x86\x5b\x73\xbc\x2e\xaf\xb4\xd1\x59\xec\x14\x1b\xa6\x15\x64\xbf\xda\xa5\xfa\xc5\xf3\xf5\x33\xe7\xc3\x87\xac\x2f\x29\xc4\x2a\xa9\x80\x9d\x02\x0d\xa3\x28\x9b\x40\x83\x20\xba\xfc\x3d\x4b\x4b\xf9\x31\xf8\x48\xef\xdf\x3d\xec\x08\x28\x42\xf8\xb0\x6d\x2e\xfa\x39\x78\xa0\x2c\x08\xde\xe2\x75\xe4\x35\xce\x28\x34\x73\x82\x3d\x1e\xe4\x29\x45\x9b\xd7\xe7\x92\xf8\x33\x8f\xd0\x5b\xfa\x02\x9e\xc7\x66\x2f\xd4\xbf\x66\x91\xcc\xd4\x06\x35\x5b\x55\x55\x82\x92\x8c\x4d\xa2\x3d\xd2\xda\xf5\x4a\xc5\x90\x8a\x20\x9b\x42\xb8\x92\x9f\xbc\x28\xdc\x46\x8c\x29\x6e\x62\x1e\x6e\xc2\x84\xa1\x55\x8d\x01\xdf\xc8\xcb\x8d\x9c\xd9\x84\x0b\x3e\x7a\xec\x3a\x0f\xa1\x71\xe2\x35\x9f\xb5\x88\x42\xdf\x6c\x6c\x7e\x5d\x78\x18\xc3\xbe\xb5\x4b\x7b\x5f\xdd\x71\x9d\xa7\xc0\x54\xe7\xdc\xda\x19\xe0\xd4\x8f\x1b\x39\x15\x0e\xb6\x46\xee\x8f\x93\xcf\xbc\x07\x2c\x42\x70\x43\xf8\x9c\xf0\x2c\xe7\xff\xfa\x99\xf3\x14\xed\x9d\xab\xb7\xea\xf7\x3f\x21\xcc\x1f\x83\x70\xcc\xd0\x02\xfc\xc9\x76\xb8\xc1\x9b\x09\x6e\xd5\x7f\xfe\xe6\xf9\x8d\xa7\x84\x58\xe7\x9d\xfa\xda\x87\xbb\x17\x3f\xdc\xbb\xfb\x05\xdf\x32\x67\x5d\xe7\x02\x3f\xe5\xd7\x5d\xa7\xc6\xcd\x80\x09\xed\x6a\xd9\x0e\xa2\xa5\xd6\xf3\xb4\xe4\x3e\xf4\xe0\x66\xb1\xb3\x32\x9e\x55\x34\x2c\xa3\x8a\x6e\x12\x1e\x96\xc8\x69\x57\x14\x0a\x42\xde\x3e\x1a\x68\x16\x5c\xdc\x95\x1a\xe2\x34\xbf\xcc\x26\xee\x6c\x3f\xfb\xf9\x72\xfd\xc7\x3b\x84\xa4\xb5\x5a\x7d\xeb\xaf\xbb\x4f\xbe\x8a\x90\x37\x11\x67\x8b\xd6\xf4\xc7\x32\x9a\x59\x0c\x88\x73\x56\xbb\xb8\x45\xb7\x86\x5e\x31\xaa\x2c\xdd\xca\x2a\xeb\xf4\x76\x6b\x95\xa5\x23\x08\x3c\xd7\xbc\xf6\x2d\x3f\x41\x40\x11\x06\x5f\xb5\xf0\x02\x11\x5e\x5e\xdf\x82\x7b\x96\x5e\x35\xe1\x9b\x50\x2c\x06\x1d\xae\xbe\x72\x9b\x30\xec\xc6\xda\xee\x16\x6b\x0b\x99\xee\xf2\x09\xf8\x43\x68\x35\x81\x42\xae\x1d\x0d\x14\xe9\xa5\x12\x8a\xe8\x2d\xb6\x34\x87\x91\x84\x16\xca\x8a\x8a\x51\xc2\x35\xa8\x81\x19\x77\x1e\xad\x91\x9d\xd4\x70\x6a\xd0\x61\x23\x98\x7b\x97\x18\xd8\x1a\x57\x5d\xe7\x01\xd9\x7c\xce\x85\x9d\x6b\xb5\xe7\x57\x3e\x06\x0e\x3d\x07\x3b\x32\xb8\xbd\x7c\x9e\x45\xe2\xbb\x8f\xae\x69\xb8\x08\xc1\x12\x72\xb5\x02\xcd\x83\x4c\x5c\xc4\x9a\x4d\x13\xe1\xe0\xd6\x6d\x18\xa0\x25\x1b\x06\xb3\xb2\x82\x44\x2e\x91\xef\x46\xcd\x12\xfb\xee\x10\xb3\x55\x2c\x2d\xe5\x21\x55\x8e\x7d\x2d\x59\xe4\x9b\x29\xe6\x41\x5e\x5e\xce\xe7\xf3\xc2\x34\xc3\x9d\xff\xfa\x72\xf7\xfb\xbf\x06\x3a\x43\x93\xcd\xea\xae\x38\x21\x00\x7e\x00\xd1\xee\x77\x27\x77\x7f\xf8\x4b\x14\x8b\xa0\x85\x22\x8a\x0c\x97\xaa\x4c\x91\x0c\x4f\xca\x75\xb6\x76\xae\xaf\xec\x3d\xfd\x08\x36\x16\xed\xe4\x7a\xc9\x5d\x5d\x61\x7d\x68\x1b\xae\x92\x05\xad\x29\x41\x6d\x49\x81\xb3\xe4\xbf\x1f\x25\x3d\x02\xee\x3d\xfd\xb9\xfe\xe0\x49\x2b\xd4\x33\x14\x4c\x2f\x08\xb4\x3f\x17\x2a\xea\x32\xf6\x1b\xcd\x7b\x57\x06\x5b\x47\x92\x06\x9d\x27\xfd\x63\x3a\xf8\xfb\x41\xd6\xe4\xcb\x96\xe8\x85\x43\xb2\x83\x3f\x8b\x3c\x6e\xe2\x4b\xc6\x96\x5b\xfb\x99\x39\x21\x56\x7f\x02\x71\xcc\xac\x19\xee\x8a\x53\x5f\xfb\x92\x70\x0f\x3f\xa2\xc4\x40\x36\xe1\xc5\xbf\x80\x5b\xea\xaa\x27\x99\x0f\xc2\x59\x07\x14\xf2\xf4\x3e\x11\x88\xda\xa5\xfa\x87\xe7\xeb\x77\xcf\xd5\xcf\x5d\x6e\xda\x12\x58\x37\xa0\xb3\x08\xa3\x23\x64\x25\x31\x06\x9c\x80\xaf\xfa\x0d\x63\x79\x19\xd2\x11\x68\xdd\x1f\xf6\xe3\x24\xfc\x45\x7f\xec\x8c\x3f\xc5\x86\xf9\x38\x2e\xf4\x09\xcc\x0e\x70\xce\x59\x41\x6c\xa9\xd6\xd1\x3e\xc3\x86\xdd\x4c\x64\x25\x03\x03\x05\x67\xde\xb0\x58\x69\xec\x48\xa0\x6b\x42\xd3\x38\x85\xea\x01\xdc\x5c\x19\x75\x54\x15\xb4\x41\xd3\xd4\xcd\x3e\xd4\x24\xf6\x20\x68\xa3\x8c\xf3\x76\x6d\x06\x9c\x99\x67\xa2\xc6\x67\xf2\x27\xd9\xf8\x05\xcd\xad\x6d\x80\x6d\xf3\x71\x60\xc0\x26\x33\x28\xea\xc6\x62\xf8\x8c\xee\x43\x3c\x54\x42\x4f\x40\xb8\xe9\x61\x4d\x16\xd7\xa3\x6b\x3c\xc2\x91\x91\x9a\x60\x2a\x63\x5a\xe9\x89\xb5\xa5\xa1\x96\x27\xb4\xa0\x9b\x60\x35\xf4\x92\x77\xff\x97\xc8\x66\x78\xe1\xc9\xde\xcd\xf5\x67\x3f\x5f\xdf\xf9\xf2\x3e\xf7\x08\x7f\x0d\xd6\xee\x35\x0f\xe3\xdd\x5b\x3f\x82\x1d\x3d\x1e\xdd\xff\xd5\x0c\xc3\x59\xc2\x0d\x12\x51\xff\xa4\xaa\x6a\x23\x9a\xc7\x2d\x24\x60\xc8\x3b\x0f\x04\x3c\xe3\xae\xde\xe4\xea\xc1\xfa\xde\x9d\x73\x60\xc1\x3f\x17\xf4\x4b\x7b\xb8\xa4\x43\xc5\x30\x20\x1c\x52\x06\x65\xda\x13\xdc\x3d\x88\x06\xb3\x28\xb3\xd8\x12\x75\x58\x8d\xbc\x00\x9b\xf7\xa4\xeb\x7c\x48\x2f\x9d\x61\x4f\xc3\x36\xa8\xac\x34\x4e\xf6\x2e\xf7\xc0\x6e\x66\x80\x3f\xa4\x65\x63\x40\x7e\x4a\xb3\xaa\x86\x01\xf9\xd5\xc3\xf0\x2d\x5c\x42\x27\xcb\x18\xda\x43\x69\xec\x51\x0b\x49\x26\xee\x13\x1e\x97\x70\x5a\xd1\xfe\xe1\x9b\x42\xa8\xa8\x29\xed\x89\x62\xbe\x73\xf5\xd6\xee\x8d\x2f\xf9\x09\xc8\x60\xf6\x89\x4f\xbb\xd0\xbc\xc0\xcf\x01\xde\x2b\xb0\xc2\xf8\xfb\x7d\x4c\x95\xd8\x6d\x47\x2c\x52\x1b\x1e\x8d\x5b\x1c\xdf\xff\xbc\x9d\xc1\x3a\x30\xe9\xd6\xe2\xed\x20\x0e\x44\xa3\x6c\xb3\x75\x4f\x88\x06\x59\x4e\x3c\xff\xa0\xfe\x11\x11\x8b\xf4\x06\x95\x2c\x49\xb3\xd8\x57\xe1\x73\xd1\x3b\x3e\x25\x4d\xf9\x13\x55\x4a\xe8\x81\x95\x20\xed\x63\x0e\x30\xc0\x6e\x3b\x74\xe2\xf1\xf3\xac\xc3\xbd\x64\x61\x53\x91\x54\xe5\x4f\x38\x18\xce\x21\xd2\x28\x79\x30\xc5\xee\xa7\xdf\xd6\xd7\xae\xd6\xd7\xaf\x88\xa4\x61\xfa\x51\x69\xf8\xa3\x30\x22\x61\xe7\xd3\x6f\x77\xae\x3c\x48\x33\x64\xc2\xed\x96\x8f\xca\x54\x1c\xdd\x2c\xe5\xe1\x6c\xe9\x1f\x1b\x4a\x3a\x77\x29\xb9\xe1\xac\x6a\x0c\x4c\x11\x19\x31\xa2\x38\x85\x07\x12\x23\xa8\xf5\xd8\x3c\xca\xdc\xc6\x15\x5a\x80\x02\xae\x0b\x55\x43\xd5\x25\x71\xbc\x14\xf7\x1b\xac\xde\xa7\xca\x28\xf4\xfb\xdf\x7a\xf6\x68\x65\xe7\x5a\x2d\x74\x21\xae\x5d\xe2\x59\x14\x2d\x2f\x19\xc1\x4d\x37\xb0\x16\x08\x6b\x48\xbc\xaa\xc7\x46\x31\x84\x50\x79\x7e\xe5\x9c\xeb\x7c\xd4\x32\x12\x0b\xa6\x62\x63\xaf\x3e\x87\x60\x7c\xf2\x73\x64\xb8\x9d\x4f\x1f\xb9\xce\xf9\xbd\x27\x8f\xc1\x02\x96\x72\x50\x1e\xf2\x3f\x39\x30\x46\x5d\x8e\x82\xf1\xc8\xef\x9e\xcf\x31\x92\xa9\xd2\x04\xb4\x47\xcf\xf4\xa4\x6c\x75\x08\x56\x2f\x46\x01\xdf\x31\x51\xe3\x09\x4f\xa9\x92\x8d\x4d\x54\xb5\x44\x53\xaa\x3f\x59\x87\xac\x1b\x30\x52\x87\x0d\xd3\x74\x53\x50\xc9\x13\x52\x4a\xda\x44\x0c\x2e\x65\xcc\x34\x06\x9d\xe7\x67\x16\xa1\x13\x92\x6e\x96\x2c\x74\x10\x02\xcd\xa1\x86\x93\xf0\xb2\xe6\x5c\x73\x9d\x1f\x40\x33\xdf\x62\xf2\xf1\xe0\xee\xd6\xcd\xdd\x8b\x1f\xee\xad\x80\xb6\xef\x3c\x7d\x85\x48\x76\x3e\x19\xcf\x1b\xd4\x01\xea\x1a\x5e\x00\x37\xbb\x48\x66\x5d\x79\x00\x90\x4e\x86\xdc\xec\xad\x0e\x42\x23\x51\x68\x28\x0e\xef\xe9\x94\x9e\x15\xa9\x18\x60\xe7\xfc\xea\x8a\xbb\xfa\x39\x6c\x42\xee\x02\x6b\x13\x19\x5a\x69\xcd\x6b\x05\x2a\x0e\x68\x60\xa6\x49\x5f\x0d\x0c\xa1\xd2\xe6\x6e\xe1\x75\x51\x50\x52\xb5\x5e\x70\x8e\xde\x77\x57\xbf\x04\xbd\x9d\x7a\x78\xc0\x38\x58\x7b\x00\x5b\xe9\x31\x38\x59\x5b\x1e\x99\x2a\x28\x52\x15\xd2\x6a\xc4\xbd\xa0\x83\x0a\xc6\xde\xbd\xf3\x7b\x1b\x8f\x99\xa5\x8f\x08\xc1\xd6\x19\x2d\xdc\x0b\x34\x65\x98\xcb\xea\x15\x76\x18\xd4\x36\xdb\xe1\xbb\xcc\x82\x6b\x5a\x1e\x38\x31\x34\x34\x10\xff\xd9\x2a\xe0\xaa\xa9\x32\xce\x85\xe2\x17\x54\x41\xeb\x50\x0c\x86\x62\xa0\x40\x18\xa2\xa9\xf1\xe1\x36\xcf\x01\x0d\xbd\x35\x39\x99\xbc\xb3\xe1\x81\xce\xa1\xf7\x79\x85\x2d\x78\x3a\x06\xd5\x39\x58\x0d\x45\x5a\xa7\x8d\x15\x12\x4e\x51\x37\xd8\x4b\xe2\x68\x3c\x2c\x5b\x19\xe9\x20\x2b\xd4\x38\x36\x3a\x3e\x09\xb9\xe7\x81\x28\xbc\x57\x12\x13\xcc\x42\x30\x2b\x8b\xac\x1d\x65\xda\x7a\x9c\xa1\x12\x90\xad\x02\x6e\xa8\x31\x1c\x02\x0c\x5f\xe5\xb3\x04\x1f\xa9\xa1\x19\x01\x7f\x68\x56\xd7\x5b\x1f\x42\x5c\x1e\xb3\xd3\xea\x98\x1e\xef\x11\xd4\xb9\x39\x21\x10\xab\x48\xcf\x7d\xaf\xf5\x92\x51\xb5\xca\x58\x46\x56\x15\x0a\x35\x82\x8b\x56\x74\xb8\xde\xff\xa2\xfe\xe8\x11\x28\x1f\x57\x41\x25\xfa\x07\x91\xf5\x7e\x9c\x78\xe0\xc4\xf1\x3e\x13\xa1\xd8\x60\x84\x68\x79\x17\xe9\x66\xa9\xd9\x45\xa1\x35\x88\x6d\x15\x22\x6c\x1e\x19\x13\xc9\x75\x08\x61\x75\x87\xaa\x46\xcc\xbb\x4a\xed\xf3\xce\x06\x44\x1c\xf9\xaa\x41\xc4\x41\x26\xb4\x5b\xb4\x57\xa9\x53\x34\x81\xbd\xcd\x73\x3b\xdf\xd4\x20\xc2\x29\x10\x7c\xca\xa3\x4a\x77\xfe\xb2\xbd\x73\xe6\xb2\x77\x01\x8d\x9f\x52\x1a\x74\xe7\xf0\x62\x37\xa2\x48\xef\xb7\x7a\xd4\x02\x8d\xa2\xdb\xc3\xd4\x2b\x9e\xed\xd2\xaf\x21\x39\x0b\x4f\x35\x5f\xf7\x2d\x2f\xfc\x6c\x6f\xe3\x3e\x98\x2a\xc1\x39\xdf\xc2\x36\xf0\xcd\xdb\xa8\x19\xea\xd9\x3a\xb1\x5a\x75\x12\xc4\xbb\x9c\x6a\x97\xda\xf4\x09\x6c\xc6\xd2\x40\x6c\xe2\xe7\x54\xf0\xef\xc3\x4b\x4b\xf9\x37\xf8\x1f\x23\x4d\x66\xd5\x78\xab\x8b\x79\x1d\x89\x56\xa6\x39\x56\xec\x66\xb5\xb4\x94\x3f\x0a\x9f\x18\x40\xc2\xf5\x0d\x4b\xd4\xf1\x5a\xc4\x51\x1c\xd4\x7d\xff\x7e\xd5\x80\x49\xfb\x53\xdb\x27\xfc\xdb\xc6\x8f\xd6\xf1\x59\x5a\xca\xff\x27\xf9\x90\x15\x8e\xf5\x33\x7f\x77\x6b\x67\xeb\x3f\x7f\xec\x3a\x77\x9e\x9f\xbe\x10\x85\xdf\x3e\xba\x0d\xd7\x3a\x6f\xa5\x92\x8c\xac\xfc\x09\xd4\x78\xc9\x8c\xd3\x50\x7d\x84\x9a\x61\x03\x68\x2c\x2d\xe5\xdf\x62\x9a\x4f\x12\xa9\xe8\x48\xe1\xa7\x3b\xa1\x04\x1f\x7b\x6a\x7c\x58\xb4\x57\xba\x25\xce\x5a\x17\x5a\x60\xeb\xe0\xf3\xa7\x18\xb7\x3f\xf5\xf0\xb5\x9a\x40\xe4\xdf\x4c\xc3\x37\xde\x14\xab\x1e\xee\xe2\xf9\x55\x63\xc5\x75\xf3\x2b\x79\xec\xb0\x6d\xf2\x51\xe3\x6d\x9d\x4d\x60\x80\x1e\xad\x64\x0d\x9a\x2c\x53\xe8\xc9\xe0\x4c\xd2\x5f\xef\x5b\x5b\x82\xe0\x3d\x9f\xa0\x9a\xdd\x51\x99\x64\x1c\x08\x8c\xd4\x05\xe4\x43\x2a\x41\xcc\xfe\xd9\xef\xf9\x45\xdd\x27\x82\x3d\xd6\xa9\x52\x10\xd5\x2b\x1b\x1d\x4d\x2d\xeb\x4a\x99\x32\x6e\xac\x12\x1b\xe3\x0d\xdb\x77\x6d\x2a\x90\x42\x1e\x40\xe7\x6d\xbc\x18\x50\x60\x12\x88\x3b\xc4\xbe\x7a\x71\x94\x8b\x60\x10\x93\x5e\x06\xf7\x84\xd8\xc9\x75\xb0\xff\xca\x92\x89\x65\x91\xd6\xd7\xb9\xf2\x71\xea\x9b\x9d\xeb\x67\xba\xa4\xcf\x51\x9e\x8f\xd5\x9a\xf6\x57\x5d\x0d\x9a\xf3\xba\xa5\x6d\xc5\x6e\xf0\x38\x59\x90\x19\xeb\x26\x68\x10\xf1\xbb\xbb\xa3\xfd\x0b\x1d\xd6\xb2\x89\x70\x4c\x39\xf7\x26\x08\xd1\x54\x48\x5e\x0b\x5d\x18\x65\xf0\x02\xc4\x71\xc0\x31\xb4\x73\xe1\xe2\xb3\x27\x9f\x36\x89\x4c\xd8\x77\x59\x0c\xa4\xf3\xa2\xe1\x9a\xcd\x34\x38\x9f\xe8\x5b\x6d\x6d\x18\x5e\xd0\x09\x2d\x60\xa8\x6d\xfe\x07\x16\x4c\xcb\x72\x03\x6d\x73\x11\x49\x25\x49\x9c\x7b\x11\xaa\x43\xe8\xac\xef\x9c\xbb\x54\xbf\x78\xa7\x31\x14\xd6\xad\x9d\x74\x6b\x67\x77\x5b\x4b\x91\xf1\xb1\xeb\xf5\x99\x4b\xd1\x20\x45\x0e\xc2\xc4\x59\xd5\xb5\x5e\x08\x5f\xc1\x08\x7f\x60\xe8\x16\xf6\x92\xa6\x52\x96\x7c\x6e\x2c\xf7\x2c\xa4\xbd\x1f\xe5\xc2\xa2\xc9\x13\x42\x4f\x9d\xb3\x34\xed\x3b\x82\xc6\xee\xa5\x07\xf5\x5b\xab\xf5\xdb\x67\x76\x2e\x3f\x70\x9d\xbb\xf5\x53\x5f\x83\x87\x1e\xe8\x55\x3b\x07\x94\xa2\x43\x7c\xc5\x43\xd0\x58\x26\x77\x38\xe6\xfe\x2e\xcf\x87\x67\xe6\xd8\xe0\x32\x08\xa8\xc9\xac\x5d\x63\xc9\x09\xcb\x81\xc4\xca\x50\x22\x71\x32\x50\x9e\x97\x8c\x64\x85\x06\x80\x54\x24\xbb\x58\x6e\x71\x08\xd7\xd9\x7e\xf6\x68\x65\xef\xb4\x97\x0d\x9d\x26\x76\xa0\x6a\xd9\x7a\x25\x58\x05\x62\x91\x46\x73\x1d\xc4\xf9\x52\x1e\x55\x16\xfd\x5e\x27\xaf\x10\x9e\x39\xa6\xd8\xe0\x3e\xa2\x3f\xf7\x34\x4b\xe3\xfc\x83\x34\x2f\xf9\x10\xf2\x25\xc5\xee\x09\x81\x81\xe8\x31\x09\xcd\x98\x92\x56\x2c\x93\x1f\x6c\xa9\xd4\x3e\xec\x5f\xcd\xbf\x96\x7f\x2d\x7f\xb8\x07\xd8\xb2\x87\xff\x61\x4b\xa5\x57\x68\x02\xaf\x85\x61\xa2\x76\x4e\x09\x04\x88\x58\x48\xd7\xd4\xc5\x5e\xaf\x46\x43\x0f\x8b\x7b\xec\x21\xe8\xf4\x68\x55\x55\x15\x15\x88\xa3\x71\x6a\xe8\xe0\xb3\x27\xe7\xfa\x22\x94\xf2\xb8\xce\x27\x18\x3c\xd5\x1e\xc1\x02\x3c\x7c\x85\xdb\x30\x1c\xff\xcb\xda\x53\xb7\xf6\xe0\xd9\x4f\x9f\x40\xb0\xcc\x56\x64\x44\x9f\x0e\xf4\x39\xd7\xd9\xe2\x09\x45\xdb\x9d\xd0\xf8\x15\x1a\x72\xbc\x06\xb1\x6a\x9b\x5c\xcd\xfc\x9c\x97\x01\x09\x87\x82\xac\xd4\xd0\xee\x77\x27\x5d\xe7\xe9\xde\x93\xc7\x90\x44\xd2\xf0\x04\x84\x3f\x80\xfc\x0d\xba\x30\x59\x72\xa1\xbf\x24\x3e\x5d\xe9\xca\xa0\xc6\x02\xa6\x89\x7c\x5e\xc6\x92\x8c\x4d\x8b\xe6\xe6\x15\xd5\xaa\x8c\xb9\xb0\x63\xed\x8e\x7b\x43\x19\x50\xac\x49\x01\x96\x51\xa5\xaa\xda\x8a\xa1\x62\x64\x2b\x15\x61\x7f\xe7\xbd\x3b\xce\xce\x37\x35\x1a\x7a\xc2\x26\x5b\x5b\x69\xa0\xce\x27\x10\x07\xb5\x42\xf6\xec\x8a\x23\xca\x89\xe2\x93\x6a\x56\xcd\xeb\xe8\xd0\xc4\xdb\x09\xa1\xb9\xbc\x16\x86\xe0\xe5\xd1\x81\xb7\x07\xc7\xa7\x87\x8e\xf7\x1f\x6b\xad\x0d\x4c\x62\x3f\xa7\xa0\x02\x9e\xf4\xfa\x44\xa7\xef\x8b\xf2\xbc\x82\x00\xfa\x04\x10\x24\xab\x3c\xa3\x4b\xa6\xdc\xe7\xd9\xa5\x84\xc0\x56\x7c\xe7\xdd\xea\x75\x2a\x69\x03\x6f\xc5\x83\x87\xcc\x39\x16\x7f\x63\x62\x96\xd2\x00\x97\x87\xe6\x91\x38\xf7\xbc\xcc\x82\x88\x7e\xef\xd6\x2e\xf1\x54\xb9\x44\x5e\x0f\x8d\x4e\x95\xc3\x16\x71\x08\xc6\x30\x10\x96\xcd\x00\x25\x28\xc6\xd6\x62\x88\x5a\xa0\xc4\x59\x0a\xd0\x6d\x85\xa8\xb5\x36\x44\x93\x50\xf8\x50\xa0\x56\x6b\x90\x93\xd6\x25\x86\xe6\x2d\xc1\x4e\xa2\x77\x9b\xb4\xce\x2e\xcc\xa8\xbd\x71\x3b\x0b\x33\x6a\x6f\xcc\x0c\xc2\x8c\xda\x1b\x78\x0e\x8b\x42\x0c\xe2\x4b\x08\xb6\x3c\x4e\xd0\x2c\x23\xe2\xc1\x06\xdb\x4a\xeb\xc3\xa4\x8f\x9a\x6a\x03\x30\x33\xcd\x40\xce\xb2\xe2\x17\x6e\xd0\x24\xcb\x52\x4a\xf4\x88\x0f\x3e\x47\xd3\xcb\x54\x95\x7e\x29\xbc\xb1\x88\x8d\x2d\x4c\xec\x05\x71\x5d\x71\x82\x21\x9e\xe1\x42\x80\xd4\xbf\x2d\x84\x06\x70\xfc\x6f\xf6\xee\x7e\xd1\xc2\xfc\x13\x02\x3c\x23\x71\x9d\x2d\xd1\x15\x42\x5b\x8d\xb2\xa4\x61\x99\x8a\x10\x0b\x1d\x54\xf2\x38\x8f\xec\xb2\x6e\x61\x96\xa3\x68\x62\x76\x5d\x31\x0c\x2c\xd3\x2c\x47\x72\x15\x4c\x13\x03\x5b\xbf\x7f\x7b\x77\xf3\x1c\xbd\x9c\x30\x1f\x11\x55\x59\x43\xd5\xbf\x56\x3f\x63\x61\xe3\xec\xa6\x46\x6f\xe5\xf7\x5c\xe7\xe4\x2b\xa8\xd5\x19\xb5\x1c\xbd\xd6\x36\xf4\xc6\x98\x32\x5a\x4d\x94\x05\x39\xa5\x8f\x5b\x0b\xf4\xbb\x47\x08\x35\x1e\xa3\xe9\x06\x0a\x46\xad\x35\x6d\xa0\x1f\x02\xd0\x5e\xc3\xe8\x94\x00\x5b\xee\x01\xdd\x36\xdc\x14\x6d\x9d\x53\xc3\xee\x5e\xa7\x66\x9f\x93\x12\xe2\x95\x7d\x93\x49\xab\xec\x99\x22\x2c\xac\x15\x88\x45\x72\x18\xaa\xaa\xb0\x42\x2e\x87\xb5\x5e\xbf\x70\xc5\xad\x9d\xdd\xf9\x7e\x2d\x62\xd6\x4a\x84\x4e\x85\xf5\x82\x62\x97\x15\x2d\x70\x0f\x13\xcf\x21\x09\x9a\x95\x71\x4c\x76\x7a\x32\xbd\xf0\x08\xa4\xac\x93\xe5\x43\x93\x4f\x61\x22\xf5\xa8\xd0\xe5\x08\xa4\x36\xb1\xea\x96\x2f\xaa\x99\x17\xaa\x4d\x74\xff\xa9\x1c\x8e\x49\x1e\xc6\x36\xe9\xb3\x6f\x51\x57\x6d\xe2\xf7\xa2\xa2\xae\xda\x44\xd7\x8b\x35\x1a\x27\x1f\x96\x97\x13\x0a\xc6\xb4\x08\x29\x4d\xb8\x14\x1f\x34\x03\xfc\xc1\x56\x93\x66\x4c\x2f\x44\xa9\xcd\x11\x5f\xea\x10\xa5\xd8\x39\x35\x9d\x50\x9a\x10\xa5\xec\xe3\x93\x3a\xc1\xf5\xc5\x06\x27\xb5\xcd\x39\x2f\x8d\xd3\xb7\x7d\x9d\xa1\x89\x6b\xb8\x5d\xd2\x88\x63\x2f\x32\x58\xd9\x56\xe2\x29\x3a\x9a\x80\xe7\x6e\x0e\xe7\xdb\xfb\xdf\xd3\x60\xaf\xcc\x17\x31\x08\x9c\x2f\x54\x78\x29\xc3\x68\xb5\x3f\xcf\x38\x5f\x7c\x37\x22\x11\xe2\x3c\xf7\xad\xa2\xec\xb5\x49\xef\x0b\xb0\x6a\xe0\x6b\xa1\x50\xdb\xbb\xf7\xf5\xce\x27\xff\x25\x7e\x4b\x30\x9e\x2d\x29\x6a\x6b\x65\x8e\x8f\x2a\x32\x14\x85\xac\x60\x49\xfb\x77\xe1\x85\xa5\x06\x53\xa6\x76\x94\x3b\xff\x2e\x82\x04\x7d\x04\xa0\x3b\x91\x65\xf1\xac\x92\xe0\xa5\xca\x2b\xfa\x20\x3a\x21\x79\x69\x76\x76\x55\x74\x36\xeb\xdb\x4f\x78\xa9\x8a\x40\xa9\xdf\xda\xa5\xdd\x93\x37\x23\x5d\x1d\x53\xe1\x04\x2d\xe0\xb8\x0c\x0c\x68\xb3\x5e\x31\x75\x9d\x06\x2d\xf0\x8c\x6b\x01\x9e\x47\x10\x54\x98\xe0\xae\xd1\x86\x94\x6b\x8e\x78\x83\x50\xf7\xbd\xa9\xa2\x16\x18\x8f\xd8\xad\x28\xab\xb9\x7a\xe4\x0f\x4e\xb5\x19\xf9\xbb\x8a\x9e\x61\xe1\xaa\xac\xe7\x6c\x1b\x12\xdb\xf5\x62\x12\x43\x04\x9e\xa5\x62\x73\x67\x7d\xdb\xad\x9d\x6d\x63\x54\xcb\x2a\x7b\x69\xe3\x81\x28\x92\x94\xf9\xda\x0d\x81\x23\xde\xf2\xa2\x89\x89\xb7\x50\x1b\xf8\x40\x6e\x98\x5f\x3e\xc2\xd4\x2b\xac\x6e\x30\x24\xfd\xc3\x4d\xcb\x96\x4a\x8a\x26\x32\x44\xf0\x62\x97\x31\xde\x26\x58\xb4\x0f\x79\xbd\x6d\x68\xe4\xe3\x6c\x86\xf2\xfd\xc1\xb2\xc9\xeb\xf5\xb6\x82\x71\xd5\xa2\x65\xe7\xd0\x2c\x96\xec\xaa\x89\x91\xa5\x53\x13\x2d\x91\xc9\x16\x2a\x4b\xf3\x21\xf6\xd3\x64\xf0\x71\x57\x2d\xfa\x36\x7b\x49\x78\x09\xbf\xcc\xf5\x4c\xc7\x5d\x85\x0f\xce\x96\x57\x18\x38\x40\x5f\xea\xb5\xdf\x00\xbf\x76\xc0\xf0\x4c\x36\xe2\xdf\x58\x01\xd0\x28\x9c\xc6\x4a\xe1\x37\xdc\xda\x59\x4e\x13\xf6\xa7\x5f\x0c\xc1\xa7\x8c\xd7\xe8\x28\x91\x38\x2c\xc1\x8f\x4c\x5b\x9f\xa5\xc2\x04\x0a\xb2\x4a\x5a\xcc\xcd\xb9\x41\x65\xc9\x54\x6f\x8c\xd1\x88\x02\x25\x8e\x22\x68\xa5\xd8\xcf\x69\x4e\xb9\x28\x0d\xc8\xd2\xab\x2a\xeb\xed\xa5\xcf\x8a\x67\x3e\x1b\x10\xb5\x01\x32\x34\x33\xd7\x84\x1e\x0b\x90\x21\xb5\x1c\x8e\x27\x52\xd0\xad\xd2\x82\xc4\xeb\x3a\x85\xc8\xd6\xd9\xaf\xc8\xdf\x97\x97\x5e\x31\xbb\xaa\x19\xe1\x5e\x46\xa2\xed\xd3\x4e\x24\xc7\x1d\x2b\xd7\x46\xe3\xd4\x42\x25\xea\xc4\xf3\x6e\x28\x65\xe7\x6b\x60\xec\xa4\xfb\x2e\x98\x1a\x9d\x21\x86\xf4\xf6\xd2\x13\xbe\xf2\x25\x60\x1a\xba\x5d\x44\x5f\xeb\x0e\xe2\xaa\xaa\x2f\x00\xb0\x80\x86\xeb\xb9\x7c\x9b\x68\x12\x41\x37\x6d\x03\x6a\xa1\x55\xf7\x3a\x0f\xa6\x3a\x9a\x45\x71\x28\xe2\x17\x58\x9f\x24\x1a\xff\xf8\xea\x6f\xfe\xf5\x78\x2f\x3a\x72\xf8\xd5\xd7\xc9\x7f\x8e\x09\x3d\xaa\x81\x28\x2f\xda\xc4\x88\x79\x51\xc9\xfb\xee\x8a\x03\x00\xc8\x7f\x8f\x09\xea\xae\x1e\x55\x2c\x43\x95\x16\x79\x2b\x1f\x48\xe7\xb7\x25\xbb\xea\x95\x00\x4e\x91\xce\x4d\x4b\x1d\xec\xac\xdc\x75\x9d\x8d\xdd\xb3\xdf\xef\x3c\x74\x1a\x93\xf3\x05\xa3\xeb\xac\x7c\xa7\xaa\x9b\xca\x9f\x30\xd2\xab\xb6\x51\x15\x55\x73\xac\x9f\xfe\xb1\x7e\xf6\x53\xd7\xd9\xdc\x23\x1a\xe7\x25\x08\x79\xf4\x4b\x73\x25\x0e\x80\x3f\xc0\xc5\x2a\x8d\x86\xc1\x15\xdd\xc6\xbc\x00\xbf\x90\xaa\xf7\x78\xa7\xfa\x35\x5e\x40\x37\x50\xac\x9e\x95\x3a\xbf\x9a\x6e\xec\x8a\x64\xf0\x28\x1c\x28\x5f\xcb\x0a\x12\xb1\x62\x09\x15\x7d\x1e\x73\xff\x3a\x28\x9b\x86\x89\xe7\x15\xbd\x6a\xd1\x52\x13\x16\x2d\x40\xde\x5a\x0d\xa3\x4d\xcf\x83\x1d\xf0\x9f\x7f\xea\x3a\x7f\x65\x45\xf5\x1b\x6a\x1e\xd5\xcf\x9c\xaf\x7f\xfa\x19\x4c\xe7\x2e\x97\x85\x5e\xc5\x0a\x5a\xc2\xb6\x25\x97\x38\x9d\x38\x54\x33\xe6\xb5\x03\xa4\x59\x1b\x9b\x30\xa7\x04\xd5\x39\x30\x2e\x94\xb4\xd9\x0c\xba\x3b\x9f\x5f\x39\x57\xbf\x7b\x2e\x0d\xd9\x8b\x73\xd8\xcc\x29\x15\xa8\xf4\xa0\x7b\xf5\xba\xe8\xbe\x22\xfa\xf0\x21\x39\xf0\x48\x8e\x1c\x25\xa2\xed\xc5\x15\x51\x16\x5f\x8e\x42\xb0\xe9\x46\x13\x01\x14\xe1\x56\xad\x60\xcd\x86\x01\x50\xd5\x54\x9b\x06\x20\xee\x3d\x3c\xbd\x73\xe5\x1a\x9a\x1a\x1f\x6e\x1a\x75\x48\x7d\x59\x74\x9a\x01\x47\xb4\x58\x74\x04\x7c\x54\x74\x2e\xa1\xb7\x12\x06\x11\xd6\xd8\x4f\x13\x7b\xc9\xda\xfa\x20\xc9\xb6\x71\xc5\xb0\xd1\xac\xa4\xa8\x58\xe6\xb5\x7e\x75\x73\x79\xb9\xa0\x15\xb4\x29\xda\x8f\x05\x22\x75\xa1\x9c\x7d\xaf\xd7\x61\xc3\x02\xee\x92\xe6\x25\x45\xa5\x59\x08\x64\xdb\x10\x71\x5f\x52\xe6\x31\x50\x55\xec\x4e\x5c\xe1\x15\x3b\xee\x7b\x25\xb1\x79\x8f\x88\x1b\xae\xb3\x5e\xbf\xfd\xcd\xce\xe5\xab\x9c\xc7\x68\x75\xdf\x30\x5e\x71\x6d\x1a\xa2\x0d\x5e\x23\xc9\x05\x10\x8e\xcd\x62\x80\x1a\x9a\x3f\xd4\x2f\x5c\xa9\x3f\xb9\xda\xa4\x4c\xa3\x28\xc5\x83\xd3\xd2\x2b\xf5\xcf\x8a\x1f\xf7\x58\xb4\x27\x9b\x55\xad\x20\x59\xc7\x96\x9f\x53\x00\xe5\x59\x50\x05\xdb\x92\x2c\x09\x23\x0e\x63\xc8\xe4\xd5\xad\x69\x5a\x31\x99\x88\x0f\xc7\xad\xdd\xe5\xb7\xde\xef\xdc\xd5\xcf\x21\x76\xfd\x1e\x39\xe6\xc9\xc5\x77\x2d\xd0\x08\xe1\x26\x78\x0b\x4f\xc3\x01\xfc\xd4\x75\x36\x1a\x33\x18\x04\x33\xaf\x56\x8c\x50\xe9\x7f\xc2\x25\x58\x92\x41\x5c\xd2\x42\xf6\xa2\x30\xd7\x86\xb2\xf9\xbc\xea\xfb\x5d\xb8\xa9\xde\x73\x9d\x0b\xe1\x42\xfa\x62\x41\x37\x38\x72\x62\x68\x7c\x74\xe4\xf8\xe0\xc8\x24\x3a\xd1\x3f\x3e\xd4\xff\xc6\xf0\x20\x3a\x36\x3e\x3a\x35\x26\x8a\x6e\x0e\xe5\xaf\x04\x7c\x36\x2d\xc3\x17\xed\x40\xd1\x00\x82\xdd\x18\x37\x42\x2a\xd8\xcd\xe1\xb5\xd6\x87\x83\x47\x23\x89\x04\xf1\x93\x73\x82\xf7\x2a\x86\x4d\x1b\x72\x20\xdd\x44\xb3\xba\x2a\x0b\xa3\xe1\x04\x00\xa8\xa0\x81\xe0\x2d\xc3\xd4\x3f\x58\xe4\xdd\xfb\xfa\xc7\x86\x78\x5a\x80\xc8\xdc\x48\x1e\xf1\xa2\xfe\x7d\xcb\x13\xc0\x62\xb5\x4e\x6b\xf7\xe1\x3c\x63\x5d\x9b\x77\xae\x9f\x49\x65\x8c\x62\x48\xed\x87\xc1\xb6\x3d\x94\x7e\x91\xf6\xda\x4e\xa6\xda\x7d\x73\x6d\x8b\xd8\xe9\x26\xf4\x64\x27\x1f\x41\x7d\x16\xe9\x0f\xa0\x2b\x73\xd8\x8c\x6a\x69\x6d\xa2\x6c\xa8\x6e\x9b\x68\x5b\x9c\x79\xd8\x42\x1b\xd0\xf0\xba\x6c\x9c\x0d\xd9\x1f\xd3\x22\xfa\xe2\x0c\xb3\x01\xaa\xbe\x4c\x86\x59\xa0\xcd\x3f\x95\x5d\x36\xcc\xbe\x29\x4c\x16\x51\x12\x74\x6a\x96\x6d\x97\x0a\xfb\x65\x96\xdd\x5f\x02\xfd\xe2\xad\xb2\x59\x90\xeb\xbf\xa1\x51\xb6\x7d\xb2\xed\x93\x4d\x36\x3b\x04\xf7\xd7\x24\xdb\x06\xde\xb2\xa1\x2b\x9a\x8d\x0e\x12\x64\xcb\xb6\x6d\x40\xc7\xf0\x57\x44\x37\x02\xf1\xf3\xc9\xe0\x65\x6c\x98\xb8\x28\xd9\xc2\x18\x74\xd1\xfb\xf3\x7e\x09\x83\xa5\xa5\xfc\x09\x89\x7b\xac\x16\x24\x8b\x75\x7d\xb0\x85\xb1\x82\x81\x3b\x50\xf8\x65\xd7\x59\xe7\xe5\x2c\x83\xb9\x2a\xcd\xee\xf0\x60\x5b\x60\x3b\x37\x36\x86\x95\xd0\xe4\xd8\xd4\xd0\xd1\x9e\x3e\x51\x69\x4d\xe8\xb9\xbc\x05\xb1\x20\x5b\x0d\x26\x85\x50\x39\xfc\x86\xbd\x18\x73\xca\x93\xdd\x7b\xde\xeb\xc1\xe4\x3a\xeb\xbb\xd7\x7e\xdc\xfd\xcb\x8d\xb0\x51\x84\x23\x94\x30\x25\x50\xd1\x68\x87\x3e\xb8\x44\x35\xc9\x9a\xde\xa2\xb5\x37\x76\xae\xd5\x00\xad\xa4\xe1\x93\x46\x2d\xf2\xc2\x20\x7e\xb1\x52\x45\xc5\x42\xd2\xc5\x14\x1a\x6d\xe8\xcf\x98\x1e\xb1\x64\x82\x78\xa8\x31\x82\xf4\xf1\xbe\x51\x62\xe3\x5f\xeb\xb4\x09\x02\x4d\x83\x8b\xcd\x5a\x78\x34\x6d\xee\x15\xd3\xa9\xa3\x35\xd2\xb4\x84\x56\x8b\xcd\x44\xb2\x67\x9f\xd8\xba\x32\xa9\x5a\x8a\x25\xc5\xa9\xb5\x82\x26\xef\xc9\x92\xd8\x58\x4c\x80\x35\xc3\xb7\x35\xb1\x08\xa0\xe4\xd8\x84\x0d\x2a\x30\x52\x4d\x3f\x2e\x61\xc3\x3f\xd1\xa9\xff\x20\xcd\xf4\xd3\xce\x5d\x4e\xce\xe5\x48\xd3\x3f\x27\x39\x5b\xa3\x15\xa4\x51\x8a\x2e\x3a\xe9\xd1\xde\x1f\x9c\xd3\x09\x0c\x39\x1a\xe4\x19\x50\xf8\x0a\xda\x71\x5e\x1f\x83\xde\x6a\xa1\xae\x8b\x77\xcb\x85\x4c\x3c\x13\xdb\x55\x53\xc3\x72\x1e\x8d\xd1\xd2\x48\xe4\x8a\xdb\x53\x9c\x45\xc5\xaa\xa9\xf6\xd0\x37\x98\x91\xa5\x88\x74\x53\xa1\xbd\xb4\xc1\xa6\xdb\x16\x1b\x0b\xdd\xd9\x69\xce\xd0\x56\x7c\xd4\xa1\xe6\xea\x29\x4f\xcf\xf6\x30\xa7\x5a\x5f\x13\xfc\x13\xdd\xd9\xfb\x38\x0b\xaf\x3b\x2f\x1c\x75\x3e\x8f\x89\xcb\xaa\xf3\xb3\xce\x33\xbe\xb7\xc6\xbc\xa2\x72\xea\x51\x7c\x2c\x43\xd7\x2c\x9c\x02\xa1\xfa\xd3\xeb\xbb\xf7\xff\xd2\x2d\x84\xb0\x48\xb7\xcf\x80\x3f\x43\x0a\x7b\xd6\x2b\x2b\x44\x3c\x63\xf6\xec\xea\x24\x66\x15\x0d\x54\x53\xdf\x89\xa8\x9b\x25\x2b\xcd\x59\x41\x2d\x60\xf5\x0b\xdb\x7b\xab\x3f\xbb\xce\x3d\x6e\x37\xd9\xda\xb9\x7d\x7d\xf7\xdb\x5b\xa9\x39\x24\xcd\x11\xd1\x88\x24\xad\x56\xd0\xf4\x6c\x88\xe0\x18\xa6\x7a\xab\x98\xa6\x46\xb3\x7b\xe7\x6f\x17\x69\xdb\xa5\xd3\xb7\x5b\x34\x6e\xd2\xef\x34\xae\x85\x69\x0b\xb8\xa4\xc1\x20\x7a\x3d\xf5\xd5\xb4\x34\xc9\x13\x82\xaa\xa6\xad\x93\x2b\x3a\x5c\x07\x98\x77\x1f\xd9\x74\xf8\xc5\xa5\x74\x35\x67\xc4\xe4\xe2\xeb\x99\xe3\xaa\x9b\x0b\x92\x09\xe8\x12\xb9\x9f\x70\xad\xe6\x82\xdc\xd9\xda\xfb\xe9\xd6\xf3\x15\xa7\xf3\xeb\x73\x89\xf6\x19\x81\xb3\xa2\xa8\xcb\xe2\x3b\x3d\x3d\x4c\x1e\x7a\x37\x43\x6a\x0f\xc9\x16\x01\x45\x9b\xd5\x45\xe6\x2c\xf2\x3b\xaf\xe8\xd9\xca\xe0\x69\xc6\x0e\x36\x8d\xb7\xaa\x95\x0a\x74\xba\x6e\x5e\x2b\x22\xec\x82\x5b\xfd\x09\xce\xda\xcf\xbc\x88\x8d\xac\x29\xc4\xa2\xeb\x90\xaa\xf0\x66\x31\x2c\x3c\x65\x69\x29\xff\xa6\xa2\xe2\x31\xc9\x2e\xa7\x6d\xca\x1d\x7e\x87\xc7\xd1\x04\x23\xf2\x58\x89\x32\xd6\x25\x86\x5b\xbf\xda\x51\x1a\xd2\xcc\x0d\x42\x0d\xc8\xf2\x27\x39\xe5\x98\x85\xa4\x0d\x2e\x48\x83\x82\xae\xd1\x42\x84\x34\x2b\x37\x71\x2f\x40\x75\xd0\x87\x50\xfb\xf1\xb6\xbb\xfa\x39\xcb\xb5\xed\xe2\xe6\x60\x0b\xcd\x23\x8c\xe8\xea\x9b\xd8\xd0\x13\x50\x6c\x88\x0c\x8a\x8d\x95\x6a\x0c\x17\xea\x6c\xb1\xd3\xcd\x87\x16\x87\xa4\x7d\xd9\x31\x6d\xe6\xed\x65\x0d\x36\x33\x85\xdc\x83\x40\xaa\xdb\x7e\x87\x76\x3f\x8a\xea\x7e\x74\x4f\xf2\xb9\x3c\x7b\x74\x3f\xb5\x2d\xad\x99\x69\x04\x4a\x61\x49\xaa\xf2\x27\x32\x91\xf1\xb1\x01\xee\xff\x11\x2e\x05\x79\x26\x1c\x66\xb1\x55\x5f\xfb\xdb\xce\xf5\x1b\xf5\xf5\x2b\x9d\xb3\x48\x45\x32\xad\xb2\x04\x77\x87\xdf\x4e\x8c\x8a\xea\x47\x92\x9f\xa8\xef\xe7\x33\x4e\xa0\x2f\xc8\x56\xea\x70\xef\xe8\x06\xd6\xfc\xd3\x43\xd3\x70\x91\x2e\x63\x92\x0c\xff\xaf\x2f\x77\xbf\xff\x2b\x6f\x02\xfc\x71\xb6\xfc\xc5\xf1\xc9\xb6\x53\x71\xcb\x48\x26\xa1\x68\x48\xa6\x95\x72\xb1\xf6\xee\x7e\xb1\xf3\xd9\xc5\x34\xbc\x9b\x66\x40\x56\xa6\x55\x48\x8c\x40\x09\xd5\xac\x87\xe6\xf6\x81\x36\x4c\x4e\x06\x36\x67\x75\xb3\xd2\x82\xc7\x83\x06\x92\x77\xca\xd9\x86\xa9\x73\xdf\x91\x64\x50\x63\xbe\x85\x14\x0d\xfc\x7c\xf4\xd0\xec\x49\x21\xad\x02\x4f\xa3\x86\x9e\x84\x21\x46\xab\x9f\xbe\xb3\x7b\xf1\xc3\x2c\xe5\x54\xdc\x0c\xd2\x08\xd8\x50\xd7\xde\xfd\xc3\xd1\x3f\xd7\x88\x3c\xc5\x66\x82\x02\x46\x45\xe9\x45\xff\x4c\x23\x98\x06\x8e\x2f\x40\xd3\x77\xab\xd2\x28\x9d\xce\x04\x8b\x89\x25\xf9\xd0\x82\xa9\x30\x45\x4c\x9b\x55\x4a\x42\x04\x9b\xc1\x69\xf4\xa3\xa5\xb8\x19\x37\x77\xa8\xed\xdd\xbb\xef\x3a\x4f\x59\x5d\xb0\xec\x7c\x5a\x1c\xe3\x26\x7b\xd8\xb3\xeb\xb5\x8a\x46\x2b\x63\x03\x7f\xa4\x32\xe5\x11\xb6\x60\x28\xd5\x2e\xf9\x28\x39\x5f\xb4\xc6\x13\x2d\x23\xd7\x3a\xf3\x66\x80\x65\x13\xce\x9d\x35\x31\xe4\x87\x74\xc6\xb7\x1e\x14\xdd\xaf\x5a\x23\x04\x45\x9f\x09\x55\x9f\x71\xb6\x76\x3e\xfd\x76\xe7\xca\x83\xce\x35\x1e\x48\xef\x09\x68\xc5\x34\x3a\xbf\xcd\x69\x69\x52\xa5\x8b\x7e\x39\x28\x66\x5f\xbf\x7d\x86\x4c\x3d\x43\xef\x1c\x3b\x09\xe1\xe2\xd4\xca\x8e\xe0\x67\xe4\xba\xeb\xd4\x80\xcb\xd2\xa9\x5c\x29\x51\xf1\x2e\x50\xe4\xee\x14\xde\x0d\x29\x4e\x9d\x58\xa1\x1e\xba\x66\xf1\x9c\x31\x76\xc7\xa2\x93\x69\xc5\x4b\xde\x9c\xac\x96\xae\xce\x7b\x35\xae\x9a\x8b\x65\x96\xc0\x45\xd5\xa5\x6f\x7e\xcc\x54\xea\x42\x9e\x57\xc4\x38\xd1\xd2\xf1\x1d\x8d\x10\xde\xaa\x7f\x78\xbe\x7e\xf7\x5c\xfd\xdc\xe5\x6c\x69\x66\x9b\x0a\x06\xa2\x59\xb6\x54\x9c\x4b\x90\x7c\xb4\x86\x1d\xeb\x4c\x90\xd5\x0d\x39\x3a\x7e\x3a\x15\xa7\x6d\x54\x52\x12\xa5\xaa\x69\xbc\x25\x12\xbc\x33\xa0\xea\x55\x79\x40\xd7\x6c\x53\x57\x55\x6c\x1e\xc7\x96\x25\x95\xc4\x65\xca\x92\x60\x5b\xd2\x7c\x50\x81\x48\x75\x65\x8e\xb1\x5f\x3f\x7b\xfa\xb7\xfa\xfd\x4f\xb2\xd4\xe5\xaa\x86\x1c\xd3\x16\x37\x33\x59\x9a\xfe\xf4\x48\x2b\x45\x3d\x84\x69\x96\xee\x34\x24\x77\x4d\xdb\x8b\x06\x4e\xef\x32\xdc\x8a\x79\xd9\xad\x5d\xa2\xc8\x66\xab\x82\xd2\xe0\x9d\x88\x44\xc8\xa7\xf2\x04\x89\x65\x42\x63\xd0\x4f\x2b\x41\x34\x69\x7c\x42\x3e\xda\xdd\xe1\x8b\xf6\x66\x90\x96\x47\xb8\xca\x6f\xeb\x9d\xc5\x74\x3d\x02\x0e\x7e\xe4\x3a\xe7\x69\xb7\x96\xec\x82\xbb\xfe\xa4\x18\x46\x84\x29\x5a\x67\x03\x02\x05\x75\x7a\xdb\x8f\xf5\x21\x21\xc5\x62\x95\x7e\x0c\xc9\x62\x7d\xb0\x24\x8b\x26\xbd\x98\x25\x48\xdb\xa5\xd1\xc1\x63\xba\x05\x25\xe6\x7b\xd0\x4c\xd5\x0e\xfe\x49\x34\x0c\xc5\xc4\x16\x92\x34\xa4\x68\x36\x2e\x61\x33\x8f\xd0\x9b\xba\x89\x2a\xba\x89\x91\xb5\xa8\xd9\xd2\x07\xa8\x8c\x55\xa3\x17\x7a\xe6\xbf\x5f\x9c\xa5\xa1\x5b\xd8\x6f\xb2\x83\x72\xe5\xf7\xc5\x61\xbc\x6c\xc2\x82\x09\xb8\xce\x7a\x10\x1d\x72\x60\x3c\xbe\x0c\x8d\xb2\x58\x40\xf6\xce\xa3\x9b\x3c\x97\x39\x68\x2e\xf5\x43\x7a\x89\xc2\xb5\xe2\x84\x60\x6c\xef\x5c\xfe\x16\x72\x09\x2f\xd5\x9f\x9e\xda\xbb\xe3\xc4\xbc\xb4\x52\x43\x08\xe0\x9e\x01\x6f\xf3\xb9\x9d\xbb\xe7\x76\xae\x9c\x06\x3b\xcd\x26\x24\x51\x6e\x42\x96\xd7\x49\x78\x69\xdb\x5d\x71\x44\x13\x87\x42\x6e\x17\x6a\xbb\xa7\xee\xf2\x21\x52\xf4\x39\x03\x42\x24\x1c\xe6\x8c\x66\x89\x22\xab\x0f\x8d\xe8\xb4\xf1\x15\xb4\x3e\x6a\x5a\xfb\xc0\x83\x19\xca\xa2\x07\x1d\xda\x75\xd6\xf7\xee\x9c\x83\x09\x9f\xe3\xa9\x30\x29\x3a\x71\x31\x34\x88\x56\x2a\x23\xbd\x6a\xa3\x05\x89\xee\x67\x40\xc5\x5a\xd4\x8a\xe8\x0f\xfa\x0c\x18\x75\x06\x4d\x13\xd2\xc0\x7b\xc8\x5e\x9f\x55\x34\xc5\x12\xb5\x0a\x0b\x20\xfa\xfc\x6f\x9f\xd5\x2f\xae\xef\x5c\xbf\x01\x86\xf6\xbb\xee\xea\x95\x08\x2c\xb2\x89\xbe\xab\x3d\xfb\xf1\x43\x1e\x38\x0c\xa1\xc4\x4f\x4e\xc5\xdd\xf1\xb8\x9a\x5b\xbb\x05\x79\xc2\x6b\xe1\xc4\x9f\xa6\x93\x6c\xea\xd3\xf4\xb0\x6e\x22\x56\x68\x55\x07\x0b\xca\x3a\x80\x72\x4f\x0b\x2c\x60\x64\x43\xd4\x25\x96\x21\x89\x13\xb3\x78\x71\xe1\x70\x4f\x41\xc6\xfc\x1d\x84\x33\xd1\x38\xe0\x2d\xc0\x82\xfa\x97\xfe\xc6\x3d\x10\x6b\x54\x3c\xb2\xcb\x49\xb4\x12\x84\x28\xe1\xe9\x03\x83\xfa\x0e\x82\xbe\x3b\x9a\xb5\x26\x51\x0f\x99\x3e\x8b\xe6\xf0\xe2\xa1\x79\x49\xad\x62\x64\x48\x8a\x69\x15\x34\x66\x25\x2e\x16\xab\xa6\x49\x65\x91\x67\x88\xd1\xb0\x64\xf6\x15\x34\xb2\x7c\xef\x54\xd4\x09\x4d\x31\x0c\x6c\x2f\x2f\x8b\xfa\x94\x89\x85\xe9\x36\x2d\xc2\x7c\xa8\xbe\x72\xdb\x5d\xfd\x2b\x79\x8e\xdc\x64\xb8\x2b\x8d\xf0\x6b\x2d\x98\x95\xfe\xec\xc7\x35\xc2\x3f\xd1\xe8\x76\x7a\x48\x41\x4e\xf5\x05\x6e\xb7\x8f\xe8\x70\x77\x9b\xde\x34\x1a\x27\x93\x9a\x96\x56\x88\x98\x6d\x10\xa1\xad\x19\x37\xc1\xcf\x3f\xf8\x39\x72\x16\xe6\x0b\x8d\xfe\x4f\xa1\x7a\xf8\xf0\x6b\x18\xc1\x82\xf7\xc2\x29\xa2\xd8\x90\x7c\x00\x05\x4e\x27\x17\x0d\x2c\x0e\xde\x0d\xaa\x14\x6c\x01\x3d\x80\x64\x21\xc9\xbe\xfd\x89\xb3\xb2\x37\xa1\x8d\x84\xa9\x50\xa1\xef\x0d\x8c\x3c\x49\x25\x16\xb9\x81\x69\x8e\x99\xba\x81\x4d\x7b\x31\x32\xdd\x19\x5d\x57\xb1\x24\xec\x7b\xd9\xf8\x22\xef\x6f\xf7\xd8\x5d\xdd\x84\x79\xa4\xc3\xbd\x03\x14\xf9\xde\x63\x47\xb5\xd5\x12\xae\xec\x54\x8c\xdf\x30\xdd\xc6\xd8\xb2\x4d\x45\x2b\xb5\x86\x30\x37\xc6\xde\xe3\xc9\xad\xfb\x8a\xb9\x56\xad\xcc\x60\xb3\x91\xd7\xf9\xe3\x4d\x79\x3e\x6e\x05\x1e\xb4\xc0\x27\x9c\xc7\xc3\x03\xa6\xe0\xf5\x37\xfb\x87\x86\x07\x8f\x8a\x6c\xc9\x50\x2f\x44\xf0\xe2\x60\xff\xe4\xd4\xf8\x20\x7a\x73\xb8\xff\x98\xb8\xd9\x5d\x43\xe6\x2d\xb5\x96\x83\xe3\x3b\x05\x5c\x71\x21\x96\x24\xc0\x02\x3b\xd9\x9b\x50\x89\x05\xd1\x9e\x49\x3c\x64\xca\xd4\x69\x19\x96\xaa\x95\x60\x2c\xf6\xc2\x20\xeb\x3f\xd3\x32\xca\x97\xc2\x89\xc6\x9b\xc1\xda\xca\x49\x95\x4e\xf8\x72\x88\xb4\x35\x86\xe2\x2c\xb6\x8b\xe5\xd0\x4d\xcd\x4a\x97\x9c\x11\xd7\x03\x0e\x1c\x00\xf5\xd3\x3f\x42\x8d\xa4\x28\x22\xa9\xb2\x30\xa2\x58\xd1\xa8\x42\x8b\xa7\x55\x7a\xc5\x1a\x42\xb1\x64\xf9\x76\x03\xd0\xa2\x6d\xb8\xd2\xe2\xdf\x22\xf6\xe9\x08\xda\x1e\x2a\xe9\x49\x89\xe7\xb1\x66\x5b\x29\x8d\x07\xb7\xdd\xd5\x6b\x4c\x51\x4b\x8b\x4c\xb2\x61\x20\x8a\x8d\x6e\x96\x72\x34\xc5\x81\x2c\x2d\x6c\x0d\xba\x3a\xe3\xba\x8a\x27\x75\x56\x4c\x2d\xb2\xbe\x09\xf4\xa3\xdb\x45\x0c\x03\xf9\xa9\xd9\x91\x56\x5e\xd9\x53\x5a\x37\x4b\xe9\xe8\xec\xb7\x0b\xea\x02\x85\xc1\x9e\x6d\xd2\xfe\x09\x56\xf3\x2d\xc2\xea\xdb\x50\x15\xbe\xb1\x51\x4f\xd6\x5b\x83\x16\x6a\x4b\xb3\x73\x79\xbd\xb4\xac\x31\x80\x28\xd1\x18\x1e\x84\xc0\xcf\x8e\xb9\x50\x04\x05\x45\x83\xf7\xc9\x61\xd2\x6d\x86\xa4\xd1\xee\xf9\xd6\x22\x8c\xa3\xad\x04\xd3\xa3\x95\x22\xa0\x98\x61\x68\xeb\xcc\x7a\x41\x54\x32\xbd\x28\xa9\xc8\xc6\x15\x43\x37\x25\x73\x11\xcc\x53\x10\x22\xc8\x4b\x11\x34\xeb\x4b\x9a\x72\xa4\x3f\x58\x3a\x2d\xac\xc3\x7b\xb9\x4e\xf3\x7a\x5e\x49\xa1\x26\x91\x87\xbd\xc8\x13\x0a\x2e\xd0\xf0\x3e\xfe\x14\x4e\x89\x1b\xbf\x99\xf6\xa2\xaa\x57\xb5\xcd\x90\x4c\x0b\xc7\x76\x8d\x6f\x25\x17\xb7\x19\x82\xee\x8a\x13\x2e\x78\x75\x89\x86\x03\x45\x9e\x6f\xa2\x4d\xd8\x3a\xaa\x48\x73\x98\x7b\x69\x69\xb1\x48\x8a\x6a\x8a\x13\xb0\xa1\xa2\x1b\x18\x05\x78\xf6\x45\x43\x79\xb8\x00\xef\xa5\xdc\x10\x80\x1e\x84\xce\x35\x0f\xc5\x62\x25\x1f\xfd\xb8\xb9\x76\x97\x96\x16\x6f\xa4\xde\xf1\x64\x1e\xa3\xcf\x78\x36\x11\x5e\xa6\xb1\xbd\x61\x17\x80\x4f\x59\x11\x1f\x28\x9c\xd3\x71\xf7\xb4\x17\xd8\x0f\x25\xbe\x87\x1a\x13\xa5\x91\x5a\x43\x5b\xbb\x9f\x7e\xb1\x77\xe7\x0a\xd1\x95\x1b\x8a\x10\x0a\x2b\x2d\xbc\xc9\x8a\x0a\x2d\x2d\xe5\xd9\xc7\x37\x55\xa9\xb4\xbc\x8c\x58\x6d\x78\x61\xee\x64\xe3\xfd\xa0\x11\x86\xeb\xac\xd3\x1c\xc1\xfa\xfa\x95\x48\xef\x3e\xf1\x6d\x49\x84\x10\x2d\x89\xd4\x29\x3e\x34\x29\xac\x75\x7c\xc4\xb1\x84\xd1\x61\x05\x60\x88\x44\xd7\x74\x9b\x99\x87\x41\xe8\xab\x8b\xbd\x54\x6c\x58\x64\xc2\x50\xad\x89\x3c\x85\x3f\x50\x2c\xdb\x42\x92\xcd\xca\x51\x42\xe7\xc9\xa5\xa5\x3c\xf9\xd1\x48\x8e\x7b\x0f\xba\x61\xd6\x03\x1d\x86\xc8\x26\x4e\xb6\x29\x37\x16\x9d\x24\x37\x1c\xca\x98\xfe\xc0\x50\xf0\x81\x55\xc0\x0a\x8d\x55\xbf\xff\x49\xfd\xfa\x46\xd8\x09\x78\x6e\xf7\xd6\x8f\x7b\xf7\xce\x37\x1a\xe2\x05\x14\xd2\xcd\x22\x66\x7d\x33\xd1\x41\x99\x56\x80\x35\x4c\x1d\x2a\x7c\xea\x26\x8d\xe8\x31\x2b\x30\x5b\x51\x45\x52\x56\x5c\xb6\x76\xa9\xfe\xf8\x1f\xf5\xb5\xef\x3d\xbb\x2a\x3a\xc8\x70\xa9\x5d\x02\x19\xe3\x10\x04\x99\x1b\x0d\xaa\x34\xae\xae\xb9\xce\x36\x1c\xf2\x7e\xdd\x48\x41\x01\xd3\x00\x9e\xe4\x42\xb6\xa0\xd8\x65\xbd\x6a\x87\xd0\x13\xe9\x74\x11\x1c\xa0\x9c\xae\x08\xe5\xa4\xc1\x59\x41\x53\x5a\xf9\x0a\x4e\x9c\x4e\xb1\x88\x1e\x42\x44\xc2\x34\x94\x29\x6d\x09\xc7\x8a\x52\x32\xa5\x4c\x28\x44\xce\xa3\xda\x6d\x50\xcc\xbf\x8e\x46\xbc\xa7\xc7\x27\x9b\xde\x24\x2d\x0c\xc8\xc2\x5a\xf8\x11\xc4\xa9\x40\x39\x3a\x49\x17\x08\xf0\x64\xed\x12\xf0\xe4\x65\x46\x88\xa0\xab\x88\x07\xb8\xb4\x86\x54\x55\x9b\x61\xc9\x62\x1d\xaf\x0a\x41\xe6\x21\xaf\xdd\xca\x0b\x5b\xa7\xc1\xe4\xd8\xe0\xe4\xe4\xd0\xc8\x31\x34\x31\xd9\x3f\x3e\x29\x34\x8c\x51\x2d\x20\x15\x04\x91\x09\x8b\x82\x10\x98\xaa\x8e\x0d\x8f\xbe\xd1\x3f\x8c\x46\xc7\x26\x87\x46\x47\xc4\x56\x30\xc2\x75\xf7\x79\xb8\xd6\x26\x5c\x10\xef\xc1\xd5\x90\x31\xa1\x08\x3a\xb6\x91\xe4\x47\x89\x19\x92\x65\x2d\xe8\x26\x2b\x30\x68\x95\x51\x51\x55\xb0\x26\xac\x0a\x4a\xf3\xcf\xb6\x61\x47\xde\xe6\x84\x5e\x83\xba\x79\x71\x81\x62\x20\xa8\xe1\x7b\x56\x90\xd8\x4f\x6a\x49\x5a\x06\x6c\xc3\x99\xd3\x18\xd4\x41\xdd\x48\x84\x6f\xd3\x35\x12\x8e\x8d\x0c\xa9\xaf\xdc\x6e\x01\x13\x1a\xfd\xa5\xaa\x3c\xc1\x84\x95\x32\xaf\x48\xe6\x1c\xb6\x0d\x55\x2a\xe2\xa4\x16\xaf\x54\x5f\xfd\x86\xf9\x2c\x08\x52\x5f\x03\xe1\x78\xdf\xf4\x50\x57\xf5\x40\x72\x4a\x08\xbf\x14\x65\xa9\x8e\xf9\x39\x74\xd6\x2f\xab\x09\x6f\xdb\x53\x0d\x98\x47\xf3\x79\x61\xa5\x03\x91\x59\x34\x76\x40\x51\x59\x03\x3e\x24\xb7\x7d\xc6\x11\xb8\x2b\x94\x64\xb4\x6a\xb0\x44\xb6\x41\x2e\x1c\xa8\x0c\xe6\x35\x40\xe8\xf0\xfa\xf1\x12\x35\x6f\x76\xb6\x22\x97\xe5\x36\xa9\x04\x26\xd9\x6e\x90\x47\xc8\xa1\xfb\x46\xa0\x46\x1b\x72\x5b\x9b\x80\x26\xe1\xfc\x13\x32\x50\x34\xcf\xa6\x2d\x06\x62\xbd\x46\xe0\xb8\x41\x5e\x14\xe3\xfe\x50\x2a\x8c\x43\xe3\xb9\x39\x4b\xc3\xc3\x3c\x2c\xd2\xcc\x24\x1e\x4a\xdb\x51\x99\x0d\x67\xaf\x4f\x5a\x91\x21\x8b\xe3\xa3\x68\xb3\xfa\xbe\x16\xf3\xdc\x62\x29\xce\xed\xb2\x82\x87\xf0\x4b\xdc\x39\xb9\xd9\x24\xd3\xce\xb0\x59\x17\xd8\xe8\x62\x75\xc5\x70\x95\xaa\x03\x6c\xc7\xcb\xfa\xdf\xa7\x51\x7d\xbb\xe4\xb1\x7e\xb9\xb4\x68\x7b\xda\xa2\xb2\xd5\xed\x1d\xfb\x1d\x1c\xcf\xd4\xec\xc2\x6e\x29\xe4\xde\x62\x62\x43\xb7\x14\x5b\x37\x15\x6c\xa1\x7c\x3e\x2f\x74\x51\x84\x8a\x38\xa7\xab\x5b\x20\x40\x93\x0e\x93\x1e\x4d\x0f\xc5\x45\x24\x8a\xf4\x63\x47\x4b\x67\x78\xf5\x21\x41\xec\x1d\xc7\x2a\xb6\x11\x37\x48\xb9\x8e\xcf\x98\x26\x1d\xb8\x3b\x14\x4a\x80\x78\x06\x75\xd3\x23\x58\xb6\x8d\x4f\xc8\xd5\xdd\x80\x16\x6a\x63\x63\x34\xf5\x86\xb7\xb5\x5b\x58\x77\xb2\x18\x09\x84\xc4\xb4\x6b\x01\x64\x67\x73\x0e\xba\xda\x3b\x99\x5e\xac\xd6\x94\x52\xdd\x6c\x0f\xef\x56\x75\x73\x88\x05\xe9\xe2\x64\xbb\x35\xab\x4c\xf0\xae\xf2\x0b\x15\xf4\x75\x0c\x2b\x8b\x88\x75\x63\xa7\x5f\x1e\x23\xdf\x8d\x34\xd9\xda\x69\xb5\xc1\x18\xa0\xf4\x1a\xb4\xe9\x5b\xd5\xdb\xda\xfc\xe1\x29\x58\xfb\xa0\xdc\xb6\xa7\xbe\x72\x0d\x85\xb5\x16\xc8\xb4\xf5\x06\x20\x18\xaa\xe1\xdf\x2e\x2d\x43\x38\x12\x2e\x99\x31\xf5\x39\x5a\xa7\xf6\x0d\xf8\x44\xd8\x5b\x93\xe3\x82\xf1\xbc\xbf\x33\x69\x2c\xb2\x7a\x25\xe0\xb7\x7b\x1c\x1a\xdf\x75\x36\x42\xbb\x23\x38\x70\xb8\x3f\xd3\x8b\xa4\x50\x63\x8b\x88\x97\x83\x74\x82\x5e\x11\xbf\x70\xba\xbe\x40\xa2\xbd\x14\x84\xe9\xee\xfc\xf7\x7d\x8a\xdd\xde\x23\x2f\x13\x9f\xbf\x38\x41\xf1\x4b\x91\x04\x5d\xda\xf2\x2f\x7e\x4f\x7b\x55\x55\x62\x2f\x05\x9d\x9a\x25\x58\x8d\xc2\x60\x45\x96\x4e\x31\xa6\xa2\x27\x13\xdb\x43\x43\x4b\xbf\x90\x00\xea\x40\xc3\x0d\x75\x50\x24\xd7\x69\xe6\xd5\x4f\xd3\x0a\x2d\x53\xfa\x37\x0e\x92\xd0\xc9\xb0\xc3\x2b\x79\x5b\x93\x4e\xd2\xea\x5f\xe8\x34\x1a\xdd\xde\xbf\xa4\x68\xc5\xa6\x7e\xf8\x2c\x7c\xef\x1e\xa5\x7e\x41\x84\xc9\x64\xde\x30\xb1\xb0\xe9\x2c\x33\xb3\x59\x70\x0e\x22\x13\x5a\xe7\xe6\xb3\xc0\x14\x32\xb9\x07\x0a\x71\xee\x0c\xc3\x20\x6b\x51\xb7\x46\x33\xbf\x4a\xd2\x11\xd0\x94\x97\xa2\x43\x34\xfa\x57\x3a\x39\x13\x6c\xa9\x38\x47\x1b\xb6\x91\x4f\xcb\xcb\x3d\xe1\x7d\xe3\x29\x38\xfb\xe9\x47\x6e\x1c\x34\xcd\x1e\xf2\xeb\x18\x85\xe7\xd3\xfe\x62\x43\x0d\xa5\x7f\x02\x7a\xb4\x4d\x01\x5b\xb2\xe6\xb2\x0a\x32\x48\x29\x5d\x93\x11\xa2\x59\x49\x31\xdb\x2f\x3c\x7a\xd8\xd9\x18\x33\x7e\x16\xdb\x31\x76\x21\xc2\x23\xf3\x73\x2f\x9a\xc7\xd4\xaa\x89\x2c\x69\xda\x99\x9f\x5d\x41\xe0\xe9\x27\x20\xe6\x25\x55\x9f\x91\x54\xa4\x43\xda\x93\xd5\x5a\xcb\xf6\xb7\x06\xfb\x87\x27\xdf\x9a\x1e\x78\x6b\x70\xe0\xed\xe9\xc9\x77\xc6\x06\x3b\x7b\x1b\x55\xaa\x96\x8d\x66\x30\x2a\x1c\x30\x74\xd3\x2e\x1c\xe8\x25\x9f\x68\xd9\x55\xf2\x87\x6e\xa2\xc2\x81\xb2\x6d\x1b\x85\x03\xad\x0d\x34\x3a\x31\x29\x0c\x7c\xfb\x94\x86\x48\x8b\xdf\x1c\xe9\x3f\x2e\x9a\x97\xf7\x76\xfd\xe2\x79\x01\x80\xc9\xc9\x31\x5a\x2e\xd6\xd6\x91\xa2\x15\xd5\xaa\x0c\x2a\x21\x2d\x2a\x4e\x2b\x96\xcc\xe8\xf2\x22\x4c\xae\xe7\x3f\x7a\xd0\xac\xae\xaa\xfa\x02\x96\xd1\xcc\x22\x92\x68\x3e\x01\x54\xa5\xb1\x75\x28\xe2\x09\x2f\x7a\xe5\x67\x05\x68\xb1\x6a\x83\xd7\xbf\x7e\x46\x0e\xd4\xcd\xdd\xef\x4e\xba\xce\xd3\xbd\x27\x8f\xdd\xda\x0a\xef\x4c\xcf\x2b\xd0\xae\x38\xc0\x1e\x37\x5c\x67\x1b\x86\x77\x9d\xad\xfa\x93\x75\x08\xda\xe6\x8f\x84\xcb\xa4\xd6\x4f\xad\x46\x82\x80\xea\x17\xcf\xbb\xb5\x4b\xbb\xdf\xff\xd5\x75\x3e\x82\x66\x93\x35\xd7\xd9\x4a\xa0\x46\x05\xdb\x65\x5d\x46\x07\x8f\x0d\x4e\xf6\x8e\x8d\x4e\x4c\xf6\x8e\x4d\x4d\xf6\x1e\x1d\x1c\x1e\x9c\x1c\xec\xc5\x76\x51\x94\x1a\xc0\x10\xbf\xe9\xd6\x7e\x06\xfd\xf4\x0c\x40\x70\x57\x1c\x02\x83\xfc\x67\x8a\xfc\x4b\xe1\x20\xd7\xb9\xe7\x3a\x5f\x09\x12\x00\xde\x8a\x06\x1f\x89\x98\xbe\x31\x30\x47\x81\xcd\x4c\x01\x0c\x90\xaf\x69\x11\x01\xc1\x38\xba\x65\xc3\xda\x1d\xc4\xf9\x52\x1e\x55\x16\x73\x56\x75\x86\x06\x47\x8a\x26\x19\x64\x28\x74\xf0\xd9\x93\x73\x7d\x91\xd7\x92\x07\xe2\xde\x11\xa0\x15\x38\x7a\xd0\x41\x56\x92\x8a\x85\x2e\x97\x25\xf2\x91\x45\x68\x26\x92\xda\xab\x17\x19\xc6\xa9\x7e\xea\x9b\x9d\xeb\x67\x42\xb1\x96\xce\x56\xfd\xf3\x6f\xeb\x17\x21\x03\xe3\xe9\xa9\xe7\x9f\xaf\x35\x43\xb3\xca\x6a\x6b\x15\xf5\xca\x8c\xa2\xf9\x49\x06\xe8\xe8\xe8\xf1\xfe\xa1\x11\x48\x3e\x83\x46\x70\x8b\x74\x9f\xc0\x44\x6c\x1d\xcd\x28\x9a\xb0\x21\x64\x30\x8e\x1d\xec\x1f\x9e\xc3\x89\xa7\xc5\x84\x9a\xa1\xf2\xa1\xa8\xc1\x88\x70\xf7\xc5\x35\xb7\x76\x01\x72\x44\xef\xf0\x1e\xe7\xf0\x46\xf3\x2d\xde\xe9\xb4\x68\x4c\x7f\x52\x94\xf6\xc3\x97\x66\x7a\x44\x8a\xc9\x58\xb3\xf9\x24\x7c\x4e\x4b\xc5\x4b\x7b\xf7\x3f\xa9\xaf\x7d\x19\x68\xab\x9f\x0e\x87\xa1\x91\x89\xc9\xfe\xe1\xe1\xc1\xa3\x68\x6c\x78\xea\xd8\xd0\x08\x1a\x18\x3d\x7e\xbc\x7f\xe4\xa8\xb0\xa8\x46\x43\xee\xcb\xce\xa3\x35\xd7\x79\x1a\xd3\x50\x22\xd0\x46\xa4\xc5\xb1\xc5\x29\x07\xed\x0c\x2e\xc8\x43\x80\xd1\x47\x06\x06\xa7\x8f\x0f\x1e\x1f\x1d\x7f\xa7\xa5\x63\x6f\xa8\xa4\xe9\x26\x0e\x97\xef\x4e\x9f\x78\xdb\x50\xf5\x7d\xf7\xe4\x4d\xc8\x4e\x4c\x4c\x05\x18\xd2\xd0\xef\x14\x4d\xd6\x17\x2c\x34\xc0\x5a\xc0\x0c\x2b\x1a\xed\xf5\x68\x29\x5a\x49\xc5\x39\x72\x7f\xc4\x72\x2f\xc2\x56\x51\x32\xb0\x0c\x19\xad\x7d\xa8\x67\xa9\x50\x28\x1c\x98\x97\x54\x45\x26\x1f\xfa\xc8\x3f\x7f\xb0\x74\x8d\xfc\x57\x58\xd8\x8a\x0f\xd5\xd0\x0c\xe6\x2b\x2e\x9a\xee\xd2\x72\x73\x3c\xe4\x92\xd6\xbc\xdb\x74\x57\x9c\xfa\xf9\x4f\x9e\x3d\x5a\xa9\x3f\xbe\xbc\xfb\x97\x8d\xdd\xaf\xef\xb8\xce\xdd\xfa\xa7\x7f\x87\x84\xba\xcf\xc9\xa1\x58\xdb\x00\x05\xfd\x1b\xe6\x38\x85\x14\x3b\xc4\x13\x6c\x39\xf3\x5e\xf5\xe2\x65\x92\x91\x6f\x46\xa9\x31\x7d\x01\x9b\x13\x65\xac\xaa\x40\x27\x59\xaf\xce\x08\xe9\x54\x38\x90\x34\x96\x50\x31\x8a\x19\x2a\x81\x38\xcf\x7e\x5c\x7f\x7e\xfa\x7c\x46\xc4\x69\x8a\xb1\x80\x3c\x54\x57\xf2\x2a\x96\xb3\x96\x10\x5c\x79\xd2\xab\xb6\x51\x15\xa5\x61\xb1\x3a\xe5\xc1\x36\x11\x90\x89\x55\x3f\xfb\x69\x48\x1f\x72\x9e\x26\xf3\x72\x51\x37\x4d\x5c\xb4\xd1\x94\x25\x95\x44\x5b\x67\xef\xde\x6d\x5a\x9e\x9a\x4e\x7c\xe7\xe1\xe5\x54\xd0\xf2\xa8\x5f\xf3\xab\x4a\x2a\x16\xaa\x28\xbc\xfb\x37\x24\x4e\xb2\x87\xd5\x45\x84\xb5\xa2\xaa\x5b\x58\xce\x17\x34\x71\xeb\xcc\x06\x24\xdc\x95\x1a\xda\xf9\xfa\xf3\xbd\x8b\x3f\x07\x93\x3a\x79\x35\x48\xa6\xf2\xed\xdc\xff\x02\x7e\xbd\x40\x96\xd7\x79\x12\x28\x9a\x74\xcf\x75\x4e\xf2\x87\xa1\x02\x37\xcb\x39\xbd\x06\x05\x13\x44\x56\x8b\x86\x39\x0e\x78\x6d\xa0\x34\x8c\x66\x55\xa9\x64\xa1\x83\xf8\x83\x22\x36\x6c\x94\x9b\x7d\x05\x15\x25\x8d\xcc\x75\x06\xd3\x6a\x6e\x58\x46\x0b\x65\xac\x21\xa3\x4a\xab\xb7\x57\x78\x4f\x59\xc8\xd7\xa1\xa1\x7a\x61\x71\x26\xba\x47\xc5\xd3\x43\x28\x26\x02\x85\x91\xd0\xc1\xdc\x2c\x7a\xf6\xd3\x97\xf5\xdb\x57\x5e\x41\x74\x7f\xa4\x68\x68\x00\x05\xcb\x6f\x9f\x66\xf5\xc0\x02\x49\x3b\xf0\x61\x15\xb2\xcd\xbe\xe4\x67\x34\x54\x50\x74\xb6\x9f\x3b\x5f\xc1\x46\xf1\xd2\x98\x13\x9b\xc4\x37\x90\xb6\xf9\xed\x89\xde\x97\x34\x5d\xc3\x85\x03\x85\x82\x56\x68\x91\x7b\x1a\x07\x20\x97\x04\x0f\xb8\x7f\x6f\xe0\x63\x50\x89\x72\x8f\x5c\x03\xc8\x8c\x1e\x04\x0a\x42\x92\xa9\x31\x14\xd2\xcd\x6e\x9c\x17\x52\xed\x91\x0c\x23\x07\xfa\x07\xd6\xe6\xfd\x0f\x10\x64\xdf\x43\x2e\xd7\x7c\x0f\x59\x2d\x6f\x8f\x48\x69\xd4\x26\x43\xb9\xce\x3a\x2f\x7f\x7a\xd7\x75\xae\xb5\xb0\x09\x12\xe6\xd2\xf5\x19\x64\x83\xb7\xd7\xc3\x99\xe7\x41\x66\x8d\x77\xcc\x00\x19\xe0\xdd\x3f\x36\x86\x26\x06\xc7\x4f\x0c\x0d\x0c\x4e\x73\x45\x2a\x5b\xc4\x63\x47\xc8\x06\xf3\xe9\x91\xfe\xe3\x83\xe0\x4e\x67\xba\x7c\xd6\x88\xd3\x01\x5c\x67\xc3\xbf\x2c\x64\x8b\x77\xa3\x00\xe9\xde\x14\xe2\x84\x55\xb6\xb3\xe9\x3a\x23\xf9\x93\xe9\x2e\x47\xf9\x68\x67\x85\x71\x08\xb9\x2c\x10\xcb\x92\x9c\x1d\x53\xee\x8d\xa9\xa1\xe1\xa3\x63\xfd\x03\x6f\x03\xc4\x5e\x34\x32\xf8\xbb\xe9\xf0\x77\xd9\xb2\x42\x18\xb6\xbb\xe2\xc4\x0c\x98\xc1\xb4\xb8\x54\xe9\x3a\x6b\xfb\xa6\x88\xae\x30\x76\x40\x3a\x6a\xd9\x31\x50\x76\x22\x71\xb8\xff\x8d\xc1\xe1\x5e\x34\x36\x3e\x7a\x62\xe8\xe8\xe0\x38\x10\x7c\x72\xf4\xed\xc1\x8c\x05\x3a\x0c\xe3\xae\x38\x7c\x1c\xb0\xec\x9e\x85\x4b\xdd\x43\x36\x5e\x37\x26\xd3\xcd\x29\x64\x81\xf0\xe8\xf8\xb1\xd0\x19\x9a\x19\xb2\x04\x70\xb6\x67\x67\x14\xd5\x2c\x49\xdb\x15\x6c\x99\x3c\xfc\xcf\xa9\xd1\xc9\xfe\xcc\xd1\xe5\xc2\x8f\x42\xcf\x00\xe1\xf1\xc1\xb1\x51\xff\x34\x9f\x1a\x1f\xce\x16\x65\x1f\x3c\xa1\x33\x01\x9f\x01\xce\x13\x83\x03\x53\xe3\x43\x93\xef\x4c\x1f\x1b\x1f\x9d\x1a\x03\xc4\x47\xc7\x8f\xf5\x32\x67\x9d\xa4\xa2\x89\xb1\xfe\xac\xc5\x75\x64\x4c\x32\x1b\xca\x3d\xa1\xd9\xb8\x2b\xb5\x48\x21\x15\xd7\xb9\xcb\xd0\x09\x18\xa5\xbd\x12\x70\x59\x4d\x7f\xac\x7f\xf2\xad\xe9\xc9\xd1\xe9\xdf\x4e\x8c\x8e\x4c\x8f\x4f\x0d\x0f\x4e\x4c\xbf\x39\x34\xdc\x7d\x12\x88\xc6\xcd\x7c\x91\x7b\x3d\x39\xd0\xf5\xb5\x75\x57\x9c\xd1\xf1\x63\xa1\x83\x82\x2d\x60\x16\x93\xa2\x27\xfd\x1b\xe3\xa3\x6f\x0f\x8e\x53\xa5\x29\xfc\x5d\xd6\x33\x0b\xc2\x66\x4a\x53\x64\xc0\x2e\x4c\x6b\x6a\x62\x70\x9c\x4a\xc1\xb1\xfe\x89\x89\xdf\x8d\x8e\x1f\xed\xcd\x5e\xb4\x34\xcc\x8d\x8f\x4a\xce\x4a\x36\x2c\xf9\x36\x2b\x99\x13\xd1\xd1\xf8\x17\x6f\x0f\xbe\xd3\x9d\x79\xc5\x8e\xd4\x8d\x99\x90\x5d\x15\xe4\x8b\xee\xe8\xbb\x31\x4a\xee\x46\xfc\xb0\xdd\x9a\xe3\xfe\xad\x58\x50\xa9\xcf\x6a\xd5\xa8\xd8\xeb\x92\x22\xc4\x05\x5c\x96\xaa\x90\x8f\x71\x17\x54\x21\x1f\xe1\xcc\x34\x21\x00\x99\xf3\x0d\x1b\xf0\x27\x40\xcf\x65\x7f\x9b\x0d\x0c\x06\xcc\x12\x1d\x2c\xab\xf9\x50\xdd\x0b\xb6\x99\xff\x67\xf6\x33\x89\x1d\x26\xdb\x39\x64\x69\x07\xc9\x16\x49\xff\xb4\x03\x2d\x74\x7c\x34\x6b\xc5\x2b\x70\xb0\x51\xcd\x04\x86\xc8\x1e\x73\x20\xcb\xbe\x4c\x00\x46\xca\x70\x22\x9d\xd8\x38\x8e\xa0\xfa\xca\xb9\x40\x4b\xb8\xce\x91\x31\x8c\x69\x4d\xaa\xe0\x5e\x16\x50\x04\x7f\x64\x4b\x50\x3e\x84\xbb\xe2\x04\xc7\xc8\x02\xf9\xb6\x71\x04\x07\xe9\x05\x56\x8b\x37\x43\x72\x7a\xa5\xfa\x18\x51\xa1\x6e\x30\x91\xd0\x06\x6b\xc6\x97\x2d\x69\xc3\xc3\xb9\x2b\x0e\x19\x2f\x74\x1b\xf0\xc6\xcd\x60\x72\x65\xdd\xb2\x61\x32\x74\x19\x33\x9d\x8a\x17\x40\x44\xbe\x09\x45\xa6\x75\x8c\xb6\xae\x42\xa7\x31\x1a\x83\x49\xd0\xd7\xf0\x42\xe0\x8b\x0c\x27\x51\xbf\x00\x0d\x12\xb9\xef\xb8\x7e\xf1\xbc\xeb\x6c\xf0\xc6\xac\x91\xef\x33\x99\x96\x6e\x96\x10\x65\x34\x32\x27\xfe\x57\x17\xe6\x44\x43\x97\x09\xe2\x2b\x8e\x37\x21\xff\xcb\x0c\x66\x63\x96\xba\x2d\x87\xf8\x10\xd9\xcb\x21\x96\x0f\xd5\x1b\xca\x84\xeb\x6d\xac\x0b\x95\xe9\x86\x09\x26\x34\xad\x38\xa2\x9c\xb8\x98\x9f\x1a\xaa\x45\x65\x41\x01\xc8\x71\x89\xae\x59\xe7\x73\xf4\x13\x2c\xb2\x61\xb3\xf9\x23\xfc\x0a\x47\x3e\x7a\x56\x6a\xf2\x79\xb8\x7f\x04\xcd\xbf\xea\xff\xfc\x2a\xfd\x2a\x53\x16\x6c\x7d\xf8\x4e\x27\xbc\xb4\x94\xef\xe7\xe8\x0b\x73\x32\xe2\x91\x0f\xbf\xea\xef\x93\x94\x28\x4c\x96\x31\x44\x01\xa1\x22\x0b\x20\x0a\x36\xd6\xe5\xe2\x97\x3e\xe6\x09\xe3\xa2\xa4\xa1\x19\x8c\xac\x2a\x0b\x25\x0a\x7b\x84\x90\x6e\xd2\x60\x5c\x3f\x82\x28\xbf\x58\x51\x13\xa3\x88\x76\x2f\x3c\xd9\xbb\xb9\xee\xae\x9e\x86\x6a\x2a\x5f\x43\x2a\xb2\x57\x50\x6b\x33\x45\x58\x90\xa0\x0f\x2c\xd9\x56\x41\x71\xce\x02\x69\x62\x7b\x9f\x83\xb2\xf1\x57\x08\xa8\x39\x17\x30\xac\xa6\x2b\xc9\x1f\xa1\xab\x28\x62\xb5\x71\x09\x45\xd1\xa8\x11\x78\x5e\x1a\x03\x04\x98\x7b\xa4\x7e\x3f\xb0\xfa\x34\xc7\xe8\x7d\xe8\xf7\xc7\x1a\x02\xcc\x2b\x32\x16\x85\x3b\x37\x1b\x97\x37\xc1\xa9\x48\x76\x9f\xdf\xe1\xfa\xb7\x13\xa3\x23\x6f\x2a\x2a\x34\xe9\x2e\xd8\x05\xbb\xa0\x9d\x90\x54\x45\x66\x4f\xd3\x9e\x0c\x52\xc5\x50\x71\x5f\x41\x7b\xb7\xa0\x21\xb4\x44\xfe\x41\x34\xbb\xc4\xd6\x8b\xba\x5a\x38\xd0\x87\x0a\x07\xec\xa2\x51\x38\xd0\xcb\x7f\x93\xb1\x65\xb3\x38\x6e\xfa\xf3\x91\xc3\xf9\x57\x5f\x7f\x3d\x7f\x24\x7f\xe4\xdf\x02\x8f\x19\xba\x69\x5b\xf4\x81\xd7\x5e\x3b\xfc\xaf\x85\x03\xe4\x87\xe5\x82\xf6\x5e\x33\x6a\x53\xf4\xea\x3f\xdf\xaa\x3f\xbe\x90\x38\x19\xda\xf3\xc2\x75\xee\xb1\xa6\x3d\x21\x1e\xdb\x7a\xf6\xe4\xdc\xfe\x4e\xab\xc9\x12\x55\x29\x6b\x9c\x08\x15\x53\x0d\x71\x83\x17\xa9\xb6\xb4\x94\xe7\x9d\x23\x59\x22\x45\x7b\x5c\xc1\x86\x94\x0c\x23\xc7\xcf\xcb\x9c\xa2\xc9\xf8\x83\x40\x84\xa1\x86\x4b\x92\xad\xcc\x8b\xc2\x38\x53\x0e\xa1\x68\x10\xc7\xca\x6a\xb6\xfa\x29\x24\x2d\x42\xa5\xed\x1f\x06\x86\x87\x58\x85\x3f\xc1\xeb\xe4\x81\x34\x9d\x1d\x12\x87\xf1\xeb\x08\x12\x7a\x8f\xc1\xa7\x31\xe8\x06\x92\x54\x92\x3d\x34\x68\xf4\x45\xe8\x32\xd4\xd8\x5f\x22\x65\xc6\x19\xaf\x2a\xd9\x34\x7e\x9e\xeb\x18\xc9\x60\xd0\x71\x5c\xd1\xcd\xc5\xd4\xd0\x40\x4a\xdf\x74\x57\x6f\x51\x49\xde\x04\x38\x67\x55\x09\x69\xba\x96\xe3\x4c\xc4\x3b\xc6\xa6\x1f\xd4\xd9\xde\xfb\xfb\xe7\x3c\x40\xf2\x24\xef\x1d\x9b\x14\x2f\x99\x8c\x58\x8b\x99\x7a\x43\x8c\x6f\x21\x4a\xdb\x8b\xa9\x86\x90\x5a\xa2\x69\x26\xcc\xe4\xbb\xff\xcf\xde\xfb\x3f\x47\x71\x64\xf9\xa2\xbf\xbf\xbf\x22\xdf\xde\x17\x01\x13\x57\xdd\x03\xb3\xbb\xef\x07\xf6\x87\x0d\x8d\x10\x58\x3b\x80\x74\x25\xe1\xdd\xb9\x83\x83\x5b\xea\x4e\xa9\x6b\x55\x5d\xd5\x5b\x55\x2d\x59\xa3\xab\x08\x75\x63\x30\x20\x61\x64\xd9\x80\x19\x63\x1b\x63\x6c\x61\x34\x48\xf6\xd8\xe3\x61\x00\x9b\x3f\xa6\xe9\x96\xf8\x2f\x5e\xe4\x39\x99\x55\x59\x5f\x32\xab\xaa\x5b\x78\x3c\x7e\x77\x26\x62\x06\x75\x77\x9e\x3c\xf9\xfd\xe4\xc9\x73\x3e\x1f\x41\x9e\x20\x40\x24\x5b\x3b\xc8\x09\xc4\xf6\x23\x10\x87\xd1\xd6\xfa\x7a\x27\x39\x49\x1d\xfb\x7f\x35\x67\x9e\x90\x1b\xd2\xd1\xf1\xdf\x6b\x65\x4f\x4d\x9d\x22\x23\xd4\xf5\x83\xcd\x66\x62\x8c\xed\x9d\xd3\x63\x13\xc7\xc8\x59\x8f\x92\x43\x95\x59\x62\x34\x4c\x52\x2a\x79\xf3\x66\xa3\xe4\x79\x56\x09\x0a\x42\xbd\x40\xa1\x5e\x71\x6c\xdf\xb4\x9b\x94\x5b\x08\x36\xb3\xba\x69\xa5\xe9\xd2\x3c\xec\xe1\xc5\x94\x03\xae\x75\xa0\x9c\x9b\x36\x1b\xa7\xa9\xc7\xb6\x15\x5d\xbe\x2b\xfc\x9e\x44\x3a\x9d\x89\xdc\x7f\xf0\xac\xf7\xc1\x3b\xbd\x0f\x1f\x27\x45\x69\xd5\x61\xd6\x12\xdb\xd9\x8f\xf1\x6c\xe1\x09\xc7\xf5\x99\x3e\xc3\xfc\x73\x79\xbe\x03\x61\x6f\xd6\x50\x85\xc1\xce\x6c\x59\x7d\x04\x93\xe5\x72\x5c\x7a\xea\x8f\xa2\x04\xbe\x85\x97\x41\xd0\x9e\x80\x51\x1d\x98\x50\xe6\x9a\xc8\x5a\x93\x5f\xef\x28\x1d\x78\x6f\x6b\xad\x77\x79\x23\xa3\x52\x20\xe3\x3f\xb0\x55\x14\x10\xf3\xe7\x59\x48\x21\xf4\x8e\x9a\x8a\x57\x08\x4e\xe2\xe8\xa8\xd0\xc3\x85\xf4\x48\x17\x06\xb6\x1a\xcc\xdd\x52\x05\x02\xf8\xcb\x64\xc2\xa2\x86\x47\xc5\x97\xc4\x20\xd2\xce\xe2\xcc\xfc\x27\x3b\x2c\x1d\x17\x9d\x57\xbe\x23\x72\x58\xd9\x0a\x33\x4c\xa0\x14\x4e\x29\xa0\x3a\x86\x4a\x15\x12\x04\xe6\x77\x5a\xdb\x31\x82\xab\xa0\x9d\x38\x66\x90\xf1\x10\x58\x4a\x3c\x1d\xe5\x61\xe7\xc2\xcd\x4e\xfb\x31\x58\xd4\x60\xbd\x07\xa9\x0f\x99\xbf\x6c\x6f\x76\x37\xb6\x3b\xed\xd5\xa8\xb9\xf5\x18\x32\x22\xdf\x45\x54\x07\x95\x35\xae\x89\xe2\xc7\xb6\x07\x19\xbc\x00\x85\xe0\xd2\x86\x83\x96\xd1\x21\x52\x12\x67\x35\xfc\xa4\xea\x50\x34\x9b\x81\x53\x4c\xd1\x4b\x71\x11\xc9\x19\x16\x24\xf3\x92\x52\xc2\x9e\x60\x2b\x32\x48\xf5\x4d\xf0\x80\xe5\x5b\x85\x55\xd3\x9b\x47\x5c\x10\x58\xf9\xc7\x4d\x6f\x9e\x43\x8e\x14\xa3\xee\x8c\x28\xdc\xfe\x0c\x3a\x79\x37\x86\x0d\x92\xb7\x86\x01\x15\x7e\x25\x3a\x66\xa9\xc5\x16\x98\x72\x59\xeb\x8b\xa2\x41\x5a\x02\x8b\xb4\x04\xb9\xca\x0d\xc3\x35\xea\xa0\x49\x2d\x91\xaf\x9c\xd1\xb4\x14\x69\x40\x0c\xf3\x25\x18\x4e\x1c\x5e\x58\x21\x5a\xab\x65\xe0\xcd\xaa\x38\x4d\x1b\x0f\xa1\xc0\xa0\x19\x61\x1f\xb1\xbe\x1a\x8b\xfc\x48\x3a\x91\xd0\x1f\x9d\x69\x7d\x49\x7b\x7c\x9a\xed\xd7\xde\xee\xb4\xbf\x40\x7e\x0f\x85\x02\x99\xe5\x30\x75\x6a\x10\x23\x2e\xd6\x1d\x75\x30\x61\x89\x65\xd6\x4d\xec\x15\xb4\x69\x4f\xb1\xbf\x0b\xcd\xc9\x2c\x6b\xb7\x7b\xf9\xbb\x97\xb7\x37\xb4\x55\xe4\xd2\x38\xd2\x73\x91\x41\x3b\xc8\xe1\x4a\xd4\x92\x6a\x58\x1f\xe8\x50\x64\x37\xcc\xa2\x9e\x47\xfc\x9a\x61\xcb\xbf\xe4\x73\xe7\x55\x35\x31\xa5\x2a\xd2\xbb\xf3\xb0\xf7\x64\x75\x90\x36\x83\x37\x21\x0b\x4c\x22\xca\x56\x92\xb8\x01\x70\x8f\x04\x3f\x41\x94\x7e\x23\xac\x30\xf0\xbc\x11\x71\xed\x07\x77\x9c\x8a\xa1\x4c\xda\x6a\x13\x9e\xb1\xd5\x36\x81\x4f\x2f\x20\xae\xf1\x8b\x27\x97\x7b\x77\x3e\x89\x9e\x5b\x6a\xb6\xd9\x40\x9f\x94\x65\x57\x7c\xcd\x29\x97\x57\xc1\xb5\x75\x60\x9b\xc0\x01\xae\x77\x85\x4e\x03\x1c\xec\x1a\xdd\xfa\x3c\xcc\xe1\xde\x82\x4c\xe8\x4d\x9f\xdf\x32\x9b\x3e\x47\x37\x52\x29\x04\x88\x04\xb1\xdf\x92\xa8\xcd\xc4\xef\x29\xfa\xca\x7d\xb3\x4e\x81\x16\x32\x38\x6d\xa7\xf1\x93\x22\x23\x16\x48\x51\x9c\xb2\x69\x22\xb5\x5a\x85\x1c\x44\xcc\x38\x9c\x70\x9d\x06\x75\x7d\x4e\x5a\x72\x08\xb1\xd2\x7d\xd7\xb4\xe7\x5e\x37\x2c\xb9\xd3\x95\x9a\xa6\x48\x89\x74\x56\x77\xf5\xbe\x56\xaa\x4a\x59\xd3\xc7\x57\xd5\xba\x61\x1b\x73\x14\x71\x94\x86\xe0\x13\x8a\x3c\xe2\xb3\x9c\xbd\x17\x41\xae\x38\xa1\x2e\xe0\x48\x69\xb8\xec\x24\x34\xa4\xd6\x4e\x6f\xed\xc3\xee\x0f\x17\x3b\xad\x07\x7b\x3b\x9f\xee\x6d\x5c\xea\xb4\x37\xf7\x3f\x5d\x07\x1b\xbd\xb5\x77\xe5\xaf\x60\xbe\x47\xc1\xda\x38\x86\x2a\x3e\x2c\xc7\xc9\x81\x99\xd1\xcf\x6f\x0e\xdb\x41\x8e\xbb\xfa\x65\x45\xd1\x40\x8f\x5a\xec\x9a\xc4\xbe\xa8\xd4\x0c\x7b\x0e\x1f\xfd\x78\xcb\x3d\xea\x13\xaf\x41\x91\xe5\x13\x16\x9e\xd7\x6f\x5b\x57\x5b\xe1\x5b\x5e\x6b\xe7\x65\xeb\x71\xef\xea\xc7\x9d\xd6\x83\xee\xfd\x2b\xbd\x0f\xbf\x95\x9f\xfa\x7b\xef\xef\xf6\xae\xdc\x78\xf1\xf8\xea\xcb\xdb\x1b\x9d\xd6\xce\xfe\x83\x47\xac\x63\x82\xae\xd2\xb6\xf2\xdf\x9c\x19\x72\x78\x79\xb9\xfc\x6f\xce\xcc\xc9\xb3\x63\xc7\x57\x56\x7e\x41\x66\x81\xcd\x9b\xaf\x6c\xbd\x8b\x23\xb7\xcc\x86\x83\xae\x4c\xb1\x54\x6a\x86\x47\x66\x28\xb5\x89\x4b\x8d\x4a\x8d\x56\xf1\x35\x88\x4d\x51\xbc\xbc\xd6\x8d\x25\xe2\xf9\xa6\x65\xb1\x33\xdb\x6d\xda\x70\xf7\x74\x10\x3c\x60\xe4\x44\x70\xde\x97\xc9\x6f\x9d\xa6\xcb\x3e\xc1\xa2\x8e\x0b\x25\x6b\xc6\x02\x25\x75\xc7\xa5\x32\x26\x69\x31\x4c\xb4\x53\x86\xe7\x93\x71\xa1\x8f\xea\x74\xbd\xb3\x0a\x78\x4b\x3b\xbd\xf7\xae\xbd\xf8\xfe\x8e\x46\x52\xb3\x61\x39\x46\x95\x56\x8b\xf9\xfd\x4e\x99\x9e\x0f\xfc\x36\x82\xf2\x92\x35\xdf\x07\x04\x31\x5c\x46\x4a\x8f\x05\x30\x88\xb4\xff\x24\xb0\x40\x9f\x46\xe0\x1a\x11\x76\x2c\x42\xcb\x29\xe7\xbc\x3f\x14\xcf\x57\x5a\xac\x90\x50\xb7\x05\xc3\xb4\x60\xb9\xf3\xbb\x2f\x7f\xf5\x53\xd1\xab\xe2\x33\x95\xe0\xd7\x7f\xa8\x07\x56\x61\x0a\x05\x8a\x0e\xaa\x19\x74\x21\x82\xf8\x98\xb4\x2a\x33\xf2\x38\x2e\xfb\x0a\xca\x54\xab\xf2\x57\xa6\x92\x7a\x7c\xff\xf9\xf7\xdd\xab\x77\x43\xbe\x6e\x2d\xb3\x10\x74\xf9\x56\x9c\xe2\x3b\x52\x24\x4e\xee\x53\xb8\xb5\x21\x57\xa8\x6a\x56\x44\xea\x4b\xa1\x0c\x2d\x5c\xa5\xe3\xce\xe5\xa9\x2c\xe0\x7b\x2a\x5c\x01\xa7\x3b\xe1\x33\xbf\x82\xe0\x7a\x1c\x89\x90\xa3\x65\x89\x0f\x65\xd8\x72\xfd\x8b\x70\xe4\xb8\xe0\x0e\x25\xfc\x8a\x87\xb5\x24\xd6\x47\x00\xd7\x54\xb8\x01\x31\x9a\x90\x3c\x23\x93\x8f\x0a\xa4\x0f\x4d\xa2\x21\x29\xaf\x76\x3f\xc9\x8a\x3b\xe9\xa7\x01\x01\x3a\xac\x01\x50\x8d\x0a\x5d\x8f\x12\x78\xb3\xdf\x51\x8d\x65\x0c\xda\xb5\xb8\x1a\x88\x5b\x7a\xd8\xe0\x91\x2f\xa6\xc7\x2e\xcb\x2e\x2d\xb1\xf5\x87\xb8\x26\xc4\x5b\xf2\x7c\x5a\x1f\xe2\x90\x81\xe0\x36\xb5\xc5\xe1\x66\xcf\x05\x5f\xfb\x35\xc3\x87\xc0\x07\xb7\x09\x71\x11\x4a\x48\xb7\xb8\xfe\x12\xf4\x68\x52\x7f\x72\x38\xf2\x93\xd6\x2e\x78\x47\xff\xc0\xe9\xdb\xf9\x8c\xfa\x06\xa6\xd3\xd3\x4e\xfb\x2f\x50\xfa\x52\xe7\xc2\xdd\xc0\x65\xfa\xe2\xc9\x5a\xf7\xca\xb5\x70\x87\x08\xf6\x2b\xd9\x95\x1a\x2b\xcb\xee\xb1\x00\x33\xc3\xcc\x92\xf7\xe2\x44\xa3\xf1\x1f\xef\x46\x98\x91\x77\x3e\x01\x43\x25\xcc\x36\x53\x20\xd0\x05\x43\xc0\x66\x2d\xee\xd3\xfc\xc4\xe9\x63\xbb\x4e\xf1\xa3\x26\x68\xd7\x06\x39\x7b\x02\x8c\x38\x6e\xfc\x86\x13\xd8\x99\x2d\xbe\x67\xe5\x9a\xcc\x07\xb5\x67\x05\x78\xa8\x80\xd4\xa4\x5c\x68\x38\xce\x4a\xcd\xa2\xa8\xa6\xc5\x94\x08\xce\x6d\x67\x76\x96\xb2\x3b\x49\xa0\x8e\x84\xcd\xae\x55\x4b\x83\x86\x8e\xba\xc6\xad\x10\xb6\x46\x60\xc6\xb2\xa1\x87\xd5\xd1\xb7\xd2\x78\x3c\xb9\xd4\x73\x9a\x6e\x80\xb8\x9d\xd3\x18\x92\xc7\x13\xe7\x64\xfb\x7b\x15\xc8\x76\x9f\xea\x41\x2c\x44\x21\xad\xf0\x4f\x56\x69\x6b\x67\x40\x35\x24\x76\x71\xe9\xec\xd1\x4c\xb2\xe8\xc9\x13\x99\x6d\x51\xc6\xf0\x42\x6a\x04\x04\x9e\x46\xe2\x5c\xcc\x78\x04\xd4\x84\x52\x86\xf4\x9a\x85\x74\x89\xd0\x08\x2a\x6f\x8a\x3a\x62\xc0\x42\xd5\xc5\x89\xcb\xf8\x48\xb0\x7b\xab\x33\x9b\xf8\x16\x1c\x33\xfc\xfa\x25\xbd\xd6\xaa\xf4\xc4\xbd\xfc\xc5\xe3\x47\xd1\x4b\x45\xe4\x8d\x36\x4a\x73\x92\xc3\xd8\x41\x9b\x08\xc6\x1f\x46\x7e\x1b\x8e\x9a\x7c\x65\x0f\xa8\x73\x7c\x63\x0e\xd9\x0f\x7c\x81\xd7\x9d\xd5\x13\xe2\xb4\x7b\x06\x27\x0a\xdb\x50\xb2\x7a\xe5\xc7\x6c\x65\x84\xeb\xc6\x43\x1c\x6c\x75\x4b\x94\x54\x34\x81\xa7\xa1\xbf\xea\x43\x1e\x9a\x1c\x55\xa7\xd2\xca\xf4\x55\x2f\x67\x93\xc9\xd9\xdc\x04\x41\x4c\xa1\x3a\x11\xe3\xdd\x99\xe5\x91\xaf\x85\x6f\xff\x6c\xd6\xf1\x48\x30\x5a\x25\x18\xc5\xe5\xe9\x08\x54\xf2\xa1\x97\xc6\x5b\x91\x23\xee\xeb\x94\x53\x31\xac\xc0\x5b\xbb\x68\xb8\x55\x71\x95\xc6\x85\x50\x26\xd3\x35\xd3\x83\x47\x50\x11\xcc\x5b\xa5\xb3\xa6\x4d\xab\xe8\x89\x81\x37\x17\xc7\xae\x28\xe3\x75\xa5\x6e\xde\x96\x23\x4d\xf6\x9f\xde\x7b\xb9\xda\xe2\x77\x67\x48\xe0\x11\xf6\x25\x8f\x2c\xd8\x7d\xf1\xfd\x8d\xee\x93\x2f\x98\x05\xd9\x6e\x77\x77\xfe\xb0\xf7\xc3\x97\xb2\x35\xa9\x7c\xce\x3f\xe5\x54\xe6\x61\x79\x07\x37\x67\xe2\x3b\xcc\x94\x5f\x60\xb6\x59\xb3\x51\x35\x7c\xa5\x39\xd9\xfb\xf0\xdb\xde\x4d\x66\x23\xbc\xfc\xe0\x4f\xbd\x47\xf7\x62\x00\xbe\x8a\xdb\xf5\x23\x61\x92\xeb\xe7\x8d\x83\x90\xf4\x44\x19\x58\x98\xb0\xad\x1e\x49\x01\x86\xf9\x64\x3b\x4a\xf4\x4d\x85\xf0\x7b\xf0\x7c\x9a\x39\xe7\x9d\xb9\x39\x5a\x25\xd4\x75\x1d\x57\x19\xe3\xc6\x45\xb6\xb6\xf7\x1f\x7c\xf0\x72\xfd\x4f\xa1\x4d\xde\x7e\x00\xde\xce\x67\x8a\x77\x28\x26\x1c\xdc\x80\x4d\x5f\x17\xfb\x98\xd4\x37\xd7\xec\x76\xe6\x81\x0b\xa0\x01\x3e\x77\x76\x8b\xc3\x60\xc9\x43\x49\xf6\xe6\x68\xc0\x86\x52\x8f\xf8\x75\x22\x11\x2c\x82\xef\x71\x89\xfa\x3a\xed\xcd\xde\xfd\x3b\x7b\xdf\xde\xcb\x45\x62\x70\x7a\xf8\xcc\xd8\x89\xd1\xa9\xe9\xf3\x13\xc3\xd3\xaf\x15\xda\x5e\xb4\x98\xc4\xd9\x31\x96\xa7\x8d\x79\x4a\x0c\x98\x4d\xa5\x20\xd4\x28\x99\xf7\x12\x98\x9d\xbe\x43\x46\x4e\xc0\x2d\x37\xc7\xc4\xeb\x5d\xdf\x78\xf1\xc3\x87\x39\x3d\x09\x4c\x6e\x78\xac\xb6\xd6\x05\x86\x2d\x6c\x01\xec\x04\x15\xd0\xb8\xfa\xb9\x0b\x0d\x82\xed\x00\xce\x87\x43\x5e\x24\xa7\xc7\x23\x8e\x6d\x2d\x91\x05\xd3\x33\x59\x6b\x16\x4d\xbf\x16\xb1\x61\x59\xe3\x75\x1e\x94\xd8\x31\xa2\xa6\xb2\x82\xe0\xdc\xa8\xbb\x25\x7a\xcf\x43\x5f\x22\x5c\xb7\x9e\x33\x13\xfd\x8b\x9b\x79\xda\x26\xc1\xae\x92\x8a\x4b\x0d\x50\xb8\x09\x06\xc0\x6c\xd3\xb2\x96\x88\xe1\xab\x42\x57\xf0\x0d\xb9\x7b\xf7\xdb\xde\x95\xd5\x9c\x99\x13\xbd\x47\x9f\x75\x1f\x3f\x06\xa4\xf0\x3b\xbd\xcb\x1b\x12\x4c\xea\xad\x4e\xeb\x13\x55\x1c\xdb\x69\xa3\x41\x0c\x32\x3d\xa2\xc7\x24\x67\xdf\x4b\x97\x5b\xf1\x8a\x9c\xd5\x01\x0d\x76\x04\x17\x02\x3c\x1f\x40\xfa\xb1\x73\x18\x88\x4f\xc8\xc8\x09\x4c\xe0\xae\x1b\x8d\x12\xbe\x70\x06\xe8\x76\x1c\xc3\xe0\x77\xa5\x52\x4d\xa0\xb4\x0b\xc6\x8a\x37\xd8\xa7\x10\x84\xc7\x96\xf5\x1b\x08\xbe\x4a\x08\x89\xf5\x50\x91\x6a\x0e\x97\x4a\x70\x78\x4f\x8c\x4f\x4e\x93\xff\x4d\x4a\x25\xd7\xb0\xab\x4e\x1d\x3e\xfc\x05\x56\x30\xfa\x1f\xc3\xa7\x27\x4e\x8d\x4e\x71\xb1\x49\x99\xf5\xa5\x92\xd1\x68\x88\x74\x8c\x72\xc5\xa9\x13\xed\x7f\xfe\x9b\xfc\xd3\x02\x42\xa5\x1e\xa9\x2f\x41\xee\x69\x44\x28\x7e\x56\x3e\x28\xd9\xbc\xa7\x67\x1d\x27\x55\xf6\x2f\x67\x1d\xa7\x90\x7c\xe8\xe6\x7f\x3e\x72\xe4\x48\x46\x87\x1c\x63\xbf\x29\xb6\x65\x1b\x0d\xee\x58\x72\xc4\x55\x9a\xed\xab\x3e\x33\xbc\xd4\xd6\xa5\xb8\x27\xe0\x3a\x8d\x5e\x9a\xd1\x96\x0a\x37\xcf\xed\xfc\x53\xfe\x4d\xb2\x68\x98\x3e\xbc\xe8\x05\x24\x46\xc1\xbe\xef\xf9\x86\xeb\x37\x1b\x43\xec\x06\x55\x37\xed\xa6\xda\x92\x8a\x44\x17\x27\xb6\xf7\xfd\x3f\xff\xa5\xbb\x76\xa3\xd3\xda\xe9\xdd\x59\xed\xde\xdf\x82\xf7\xd1\x4f\x7b\xb7\xdb\x2f\x6f\xbe\x47\x0e\x77\x2f\x5f\x52\xb8\x0a\x93\xda\x85\x36\x1e\xbf\xcc\xe5\x51\x2d\x69\xc6\x71\xcf\x77\xe4\x62\x37\xa0\x76\xbe\x43\xa8\xe7\x1b\x33\x96\xe9\xd5\x88\x41\x2a\x8e\x6d\xd3\x0a\x53\x41\xf6\x1f\xc3\x7c\x75\xa9\xe7\x58\x4d\xf1\x15\xbb\xac\x3a\xea\x67\x36\x65\xd5\x66\xbd\x59\x27\x46\x1d\xa2\xf3\x9c\x59\x11\x23\x82\xf7\x93\x20\x1a\x3b\x0c\xf5\x33\x6c\x7c\x4e\x45\x1a\x94\xa3\x47\x7e\xf5\x4f\xa7\x87\xc8\xd1\x93\x43\xe4\xe8\x91\x93\x2a\x7f\xb5\xf0\xc1\x2b\x2f\xbb\xaa\x5c\xd4\x6b\x77\x7b\x77\xae\x04\x27\x37\xf6\xaa\x6c\x8a\xbc\x7c\xfb\x3a\x27\x56\x01\x45\x3a\xab\xad\xa3\x27\xd9\xff\x30\x55\x7e\x8c\xf6\x96\x49\xe9\x28\xb3\x05\x5d\xea\x51\xdb\x87\x14\xc5\xa6\x0d\xaf\xfc\xb4\xca\xeb\x50\x19\xa6\x7f\x8b\x3e\x61\xd7\xa5\x12\xab\x78\x17\x9c\x77\xdb\x18\xb3\x03\x98\xf0\x0f\xc1\xae\x7c\x0f\x48\xa6\x37\xf7\x3f\x0d\x21\xff\x95\xd7\xa5\xbf\x41\x57\x92\xc3\xc7\xe9\xac\xd1\xb4\xfc\x63\xe1\x77\x3f\xa5\x39\xd7\x67\xff\x92\xc3\x10\x72\x77\xa3\xd3\xfe\x12\xf6\x97\xcb\xc7\x88\x28\xf9\xb0\xd3\xba\x95\x31\x95\x31\xb3\x83\xf5\x3f\x7f\x5f\x80\x67\xa4\xba\xb1\xc4\xae\xdc\xc2\xb4\x83\x54\x18\xd6\xb5\xee\x02\xc5\x18\x2b\xa5\xaf\xf7\xc9\xe5\xbd\x6f\xdf\x92\x1e\x46\x82\x04\x8f\xad\x88\xf1\xd6\x5e\x43\x7f\x70\x6f\x15\x6d\xcf\x76\x48\x63\x23\xf6\xbf\xde\x8d\xaf\x5e\x8d\xea\xd2\x3c\x38\xa2\x1a\xff\x83\x6d\x47\xca\x10\x1d\xc9\x18\x17\xd8\xcc\x0f\x87\xfb\xf2\x2f\xe0\xdc\x19\x39\x35\xc6\x76\x78\xd8\xee\x63\xae\x43\x3c\x24\x87\x88\xe3\xd7\xa8\xcb\x53\x50\x88\x67\x56\xa9\x88\x92\xf1\xa0\x6b\x58\x09\x55\x7e\x1c\xa4\x18\xb6\xd6\x35\x4e\xc5\x97\x37\xd7\xba\x5b\x6b\x9d\xf6\x26\x1c\x4e\xf7\x79\x03\xf9\x11\xb5\xb7\xb5\xf9\x8b\xce\x6a\xeb\xc5\xd3\x9b\xd2\x85\x64\x43\x38\x18\xff\x0c\xeb\x05\xb8\x16\xda\xcf\xe1\xdf\x77\xa5\x7b\xf5\x7a\x84\x01\xa1\xbd\x26\x26\x7b\x5b\xe6\x9b\x50\xf4\x98\x2e\xe5\x4f\x57\x04\x03\xaa\xf8\x7e\xf2\xab\x7f\xfe\x7f\xd9\x76\x22\x76\x15\x35\x29\x57\x3c\x66\x91\xaf\x66\x56\x1e\xd6\xb1\x58\xd4\xaa\xf1\xc5\x18\xa8\x5c\xf1\x50\x50\xd9\x05\x70\xe4\x32\xfb\x20\x56\x26\x5d\xbc\x39\xe7\x1a\x3e\x4d\x79\x9f\x07\xc7\x83\x63\xd3\x28\xcb\xb2\xef\x10\xc3\x86\x29\xa3\x7c\x00\x6b\xc7\x09\xc4\xc1\xd1\x10\x1d\x65\xfc\x7c\x3b\xdf\x4b\xfd\xc7\xf0\x72\xf6\x15\x7f\x42\x0e\x67\x97\xd6\x42\xd4\x30\xef\x75\x37\xae\x75\xaf\x28\xd8\xa2\x58\x31\x95\xe7\x08\xcb\x29\xdc\x43\x67\x46\xff\xfd\xbc\xa6\x4e\x45\xa1\xb3\xa7\x03\x3c\x3c\x15\x1f\x95\xa2\xa4\x51\x57\x5d\x22\xb5\xcd\x63\x86\x9c\x33\x4b\x0c\xe2\xd2\x39\xd3\xf3\xa9\x1b\x89\x44\x52\xbd\x02\xdf\x7e\x1a\xf1\x94\x25\xdf\xaa\x5b\x3b\x03\xd4\x4a\x16\x6b\xd4\x45\xe7\x47\x18\x1e\xc5\xdf\xd6\x4d\x8f\x58\x4e\x85\xed\xcc\x2a\xf7\x40\x98\x46\x95\x78\x56\xe7\xec\x33\x6b\xa8\xbf\xf0\x45\xf7\xa3\xbc\xef\x40\xf8\x28\xf7\xb8\x78\xf3\xe4\xf0\x1c\xb5\xa9\x0b\x27\x86\x39\x4b\x9c\xba\xe9\x6b\x8c\x03\xb5\xe0\x62\x01\x79\x67\xe8\x22\x99\xe0\x24\x17\xaa\xee\x08\x40\x7f\x30\xcf\xec\xc2\x2e\x2c\x30\x05\x3f\x19\x13\x68\xab\x67\x52\x20\x4c\xdb\x3f\x4e\x24\xd1\x95\x78\xd4\x2f\x63\xea\xec\xf2\x72\xf9\x94\x33\x67\xda\xd3\x66\x63\x65\xe5\x10\xe1\x01\xc5\xc3\x13\x63\xfc\x03\x76\x77\xc4\x17\x58\xc3\x0e\xca\xab\x0c\x58\x56\x07\xb8\x68\x91\x80\xe7\x23\x11\x39\xc1\xce\x02\xfe\x10\xc4\xe7\x67\x24\xf7\x8c\xd9\x3b\x71\x45\x24\xd6\xca\x88\x3e\x51\x02\xaa\x2f\x48\x68\xd3\xa5\x55\x9b\xe2\x28\xdb\x2e\x90\xcd\x77\xc6\x81\xbc\xe2\xf4\x6e\x13\x3e\x5a\xdf\x81\x47\x3f\xa9\x7b\x5e\x4d\xef\x04\x3e\xe1\x82\x3d\x20\x44\xe7\x43\x14\x81\x26\x37\xc0\x09\xe8\x91\x59\xa7\x69\x03\xe3\x21\x84\x87\xa3\xf3\x39\xcf\x1d\x3d\xea\xe9\x93\x4b\x93\x4e\x6b\x2b\x1d\x33\x85\x59\xd7\xea\x84\x0e\x54\x8b\x6b\x94\xa9\x82\x0a\x97\x25\xbb\x0e\x81\x70\x22\x30\x4f\x54\xdb\x37\x87\xee\xd9\x15\x08\x3c\xed\xec\xa4\x9c\x33\x8e\x14\x7f\xa9\x6f\x48\xd2\xa9\xd0\x77\x8b\x30\xfc\xdc\x23\x8b\x14\x98\x02\xab\xca\x03\x09\x43\xc6\x5b\xbb\x10\xfe\x78\x3d\x42\x59\x95\x59\x89\x08\xd9\xd0\x37\x2a\x82\xdb\xd6\x67\x73\xaa\x4e\xa3\x61\x51\x97\x58\xce\xdc\x9c\x4b\xe7\x20\x9c\x3b\x58\x9e\x50\x7d\x99\x8c\x20\x24\x88\x4b\x7d\xd7\xa4\x0b\x94\xfd\xd6\x53\xed\x58\xa7\x24\x39\xaa\xb5\xc9\xb3\x8f\x23\x93\x7a\x3b\xef\x90\xc3\x4b\x61\x3a\x85\x77\xd6\x34\x8e\xf2\x7d\x0b\x5c\x90\xdb\x41\x86\x62\x5e\x15\x90\x96\x2d\x38\xb5\xcb\x24\x6d\x5a\xa8\x1f\xcb\x82\x47\xd4\xf5\x68\x70\x72\x62\x93\xca\x33\x85\x74\x5b\xad\xe3\xce\x61\x7e\x04\x04\x47\x89\x37\x93\x21\xa0\x4c\x64\x5b\x08\xe7\x9a\x4b\x9c\x4a\x91\x72\xca\x74\x20\x8c\x2f\x6e\x47\x63\x3b\xdb\x69\xc7\xc3\x43\x40\xef\x89\x35\xaf\x15\xd3\x20\xb6\x0b\x73\xf9\xad\x07\xf1\xd8\xd1\x1c\xc7\x8f\xb6\x43\x1c\x57\xdd\x1f\x27\x90\x29\x3c\xd4\x4a\xdf\xf8\x00\x86\x2a\x12\x11\xb8\x5e\xb0\x0b\x12\x95\xc6\xbb\x22\x77\xd3\x0e\xa0\x45\x3f\x29\xe5\xd5\xd3\x53\x89\x3f\xd6\x67\x33\xb2\xa6\xe1\xe0\xf3\x4e\xbf\x97\x07\x7a\xf7\xb9\x8b\x47\xe2\xd9\x32\x4e\x0d\x75\x54\xdb\x60\xd5\x67\xb5\x10\xdd\x3d\x7d\x57\xc1\x03\xe2\xa8\xbd\x40\x16\x0c\xd7\x34\x66\x98\x3d\x05\xae\x4e\xc8\x69\xf2\xa8\x92\xda\x14\xe2\xe3\xf6\x36\xbf\xea\xde\xbb\xc0\x76\x54\x40\x9e\xd5\x98\x87\x99\x2a\xc4\x03\xd6\xb2\xaa\xce\x17\x70\xd7\x97\x4a\x39\x53\x1d\xf2\x29\x90\xf7\xf8\x8b\xc5\x74\x65\x98\x90\xda\xc8\xae\xbe\xa7\x83\xd0\x61\x9e\x2e\x21\x4d\x7b\x3c\x08\x62\x79\xb9\x3c\x85\x9f\x89\x2c\xf0\x0c\x1b\x21\xc3\x27\xa3\x14\x48\xd2\x22\x26\x1e\x61\xe3\x8a\xf6\x28\x6b\x4d\x58\xcf\x6f\x28\xcf\x1c\xe5\xd7\x86\x9f\x68\x3b\x53\x35\x66\x46\xcb\x60\x23\x1b\x86\xa1\x17\x99\x5f\xc9\x90\xf2\x41\xa7\x58\x81\xfa\xfb\xaf\x6a\x50\x83\xe4\xa7\x60\x81\x14\xb3\x32\xf1\xe7\xea\x98\xca\x41\xda\xa3\x6e\xc7\x01\xda\x92\x3c\xb3\xc4\xf0\x3c\x73\xce\x56\xde\x6b\x63\x0d\x91\x23\xf9\x3b\xed\x2b\x45\x76\x7a\xac\x4e\x3f\x17\x23\x75\xf5\x3b\x17\x79\xdc\x75\xf1\x83\x36\x35\xfc\xfa\x00\xce\xdd\x30\x12\x5c\x3e\xec\x0a\x29\x02\x5b\xc3\xab\x3b\x85\x21\xb7\x2c\x8c\xc8\xeb\xa7\xeb\xc2\x54\xad\x20\x0e\xef\x00\xba\x0e\x22\x05\x45\x48\x70\x1f\x6a\x49\xe1\x81\x22\xc8\xf7\x20\xd4\x42\xb0\x85\x08\x58\x5a\x1f\x40\x4e\x67\x9c\x10\xef\x50\xbb\x30\xc2\x5f\xf5\xbd\x2c\x7c\x70\x90\xd0\x2a\x31\xed\xd0\x61\x39\x72\x02\x1c\xac\xd1\x0d\xce\x72\xe6\xd8\x8f\x32\x42\x65\x83\xb8\xe1\x54\xcf\x64\x52\x70\x7c\x23\x4b\x11\x93\xcb\xfd\xea\x03\xda\xb3\xe3\xfa\xb4\x4a\x1c\x9b\x2c\x9a\x76\xd5\x59\x2c\x16\xce\x72\xc6\xf1\x01\xc7\xd8\xc4\xa7\x52\xdf\x98\xa7\xc4\x73\xea\xf8\x82\xaa\xf2\xa9\x7f\xf3\xe0\x18\x04\x91\xb3\x39\xb2\x0d\xae\x96\x5b\x9d\xd6\x57\x00\x8d\x73\x1d\x5f\x46\xc1\x5c\x5a\x83\x71\x11\xef\x9a\x51\x1e\x7d\x85\x36\xc1\xf3\x76\xf0\x88\x97\x19\xa7\x2f\xa5\x0f\x29\x9f\xcf\xc7\x7f\x53\xa8\x53\xc6\x27\xa6\xc7\xc6\xcf\x4c\x29\xc3\xaf\xa3\xcc\x7f\x8a\xd7\xb4\xf1\xc9\x93\x64\xf8\xf8\xe9\xb1\x33\xda\x5b\x22\x22\x55\xec\xaf\x5e\xcc\x10\xa2\xd2\x25\x26\x45\xa7\xcb\xd9\xe3\x63\xd3\xe3\x93\x7a\x39\x1f\x7e\xd6\xfb\xe4\x69\xf7\xbd\x4f\xd5\x62\x4e\x0f\x9f\x19\x3e\x39\xaa\x17\x03\x21\x70\xd7\xc4\x96\xfd\x99\x32\x02\x7a\x7c\xf2\xa4\xea\xc9\x10\x05\xa9\x8b\xe9\xfb\x43\xd5\x0d\x80\xa7\x43\x0e\x95\x4a\x46\xa3\x01\x51\x86\x9e\xca\x06\xcb\x12\x60\x3b\x41\x14\xe4\x21\x09\x65\xb9\xe9\x89\xf8\x0b\x0e\xd4\x2e\x20\x9f\x64\x04\x48\xbf\x46\xc9\x21\xbc\x65\x1f\x22\x86\xef\xbb\xe6\x8c\x3a\x9e\x36\x4b\x91\x86\xe1\xd7\xfa\x6d\x04\xeb\x81\x7e\xcb\x4a\xc1\xaf\x7d\x8b\xe0\x21\x2a\x18\x0a\x3a\xd8\x78\x70\x11\x03\x74\x06\x7a\x5d\x4a\x60\x8e\xf4\x29\xc3\xe8\xb3\x5c\xbf\xf5\xb9\x05\xcb\x29\x93\x44\xb5\xab\xcd\x9d\xe3\xf0\x3d\x75\x6a\xfb\xc5\x5e\x7b\x59\x59\xcc\xd1\xc7\xd9\xef\xc9\x39\xab\x52\x20\x8f\x3e\x13\x39\x05\x3b\x41\x11\xad\x23\x12\xf0\xb3\xda\xb3\xbc\x5c\x1e\x77\xe7\xf8\xed\xd6\xb0\x5c\x6a\x54\x97\x10\x63\x54\x75\xde\xa0\xc4\x68\xc1\x4e\x6b\xb7\x77\xeb\x5e\xa7\xb5\x9d\x86\x1a\xaa\x38\xe1\x12\xb5\x47\x21\x4e\x01\x47\x05\xff\xc6\xdc\x42\x73\xc6\xd2\x3b\xed\xe3\x2a\x25\x21\x4c\x31\x90\x6e\x0d\x80\x05\x84\x8f\x5b\xca\x3c\x87\x18\x96\x30\x23\x51\x4a\xfc\x52\x5b\x7d\x19\xad\xd0\x3b\x74\x13\x9d\xa8\x02\x5d\x55\x5a\x3e\xe3\xee\x5c\x7f\xfb\x7f\x0e\xb4\x00\xfd\xcc\x09\x8a\x47\xde\x9c\x59\xc3\xf1\x75\xad\xe0\xea\x30\xe7\x4c\xa0\x73\x20\x75\xa3\xd1\x40\x70\x60\x48\x2e\x33\x2a\x88\xfd\x09\x00\xc2\x3c\x95\x0d\x9e\xd0\xdf\xf4\xa9\x6b\x1b\x16\x31\xab\xd4\xf6\xd9\xed\x89\x9b\xdd\xaa\x50\x26\x45\xc5\x0b\xd4\x75\xcd\x2a\x0d\x50\x8a\xab\x18\x1c\xc8\xf1\x8f\x49\xd5\x74\x69\x45\x13\x4c\x13\x8b\xec\x63\x96\x17\x7f\x04\x4c\xa5\x0a\x89\x60\x06\x83\xf1\x14\x04\xc9\x7d\xc9\x23\xe4\xf4\x81\x50\x4a\x7d\x03\xbc\xa4\x3e\xd5\x8e\x45\xdb\xfc\x48\xad\x70\x29\xc4\x2d\x32\x33\xd7\x47\x06\x17\x29\xf4\x57\xec\x8e\xd4\x5e\x30\x5d\xc7\x86\xe7\x76\x63\xd6\xa7\x2e\xa9\x38\x8d\xa5\x12\x87\x44\xa8\x38\xf5\x86\x45\xd5\x81\xf7\xf2\x6f\xd9\x9e\xb0\xb3\xfe\xe2\xc9\x25\xbc\x14\x75\x7f\x58\x07\x06\x96\x28\x2c\x00\x5e\x03\x79\x62\xd4\x7b\xfa\x34\xeb\xee\xa5\x6b\xdd\xad\xb5\xee\xda\x8d\x3e\x3b\x42\x93\x68\x87\x1d\xac\x28\x36\x7a\xe6\xf8\xd8\x99\x93\x85\x66\xfa\xc4\xf8\xe4\xb4\xb2\x2a\x2d\xc0\xe1\xc4\xf8\xd4\x18\xbb\x05\x14\xab\xce\x30\xab\xd1\xa4\x37\xd5\x15\xea\xce\x95\xde\xcd\xdb\xaa\x0c\x36\x95\x70\xd7\xa8\x53\x9f\xba\x1e\x31\x3c\x80\xed\x2e\xa8\x9b\xe7\x21\x4c\x63\x44\x06\xe0\xff\x43\xe0\x30\x31\xe4\x77\x99\x60\xf2\x09\x27\x03\x3a\x6a\x34\xe3\x16\x05\x6e\xec\xb4\x37\x39\xb4\xb8\x60\x70\xea\x3d\xfe\x94\xd3\xa2\x25\xdf\x70\xa2\xb9\xf8\x22\xdc\x58\x3f\x8b\x72\xb4\x47\x72\x7f\xbd\xc2\xf6\x24\x3d\x54\x07\xd1\x36\x4d\x84\x5c\xae\xc0\x38\x21\x83\x2c\x50\x37\xc8\x31\x0f\x0f\xea\xba\xe1\x57\x6a\xf9\xe4\x33\x53\xe1\xde\x93\xfd\x87\xd7\x3a\xad\xf5\x17\x8f\x57\xf7\xdf\xfe\x56\xa8\xaf\xb6\x10\x26\x30\x21\xcc\x2d\x96\x30\x28\x76\xd8\x0c\x99\x6c\xd7\x7c\x55\x72\x75\x22\xf3\x4b\x03\x03\xce\xb2\x9c\x45\x70\x32\x85\xf9\x86\xf9\xd0\x59\x79\xff\xb7\x76\x49\x98\xaa\x99\xc4\x6a\xdd\xda\x7f\xf0\x75\xf7\xfa\xae\x94\x1a\x9a\x31\x1c\x1c\xfd\x51\x9d\xe7\x16\xff\x95\x5a\x94\x8f\x71\x70\xc1\x89\x0b\x58\x72\xcc\x58\xf9\xbd\x89\xd1\x71\xe2\x70\x63\x86\x3f\x84\xf8\x84\x87\x5d\xf6\x39\x1d\x09\x96\x4b\x3d\x8c\x83\x58\x8d\xcc\x5f\xee\x74\x2f\x5d\xec\xee\xfc\xb5\xd3\xda\x01\xdd\x54\x6c\x06\xfa\xb6\x46\xda\x29\x9a\xa8\xb1\x32\xd4\x1a\x0f\xa0\x84\xe8\x56\xd8\x85\xaa\x80\x0f\x3c\x93\xe2\x49\x77\x9b\x96\xd2\x2c\xd0\x57\x20\x7c\x15\xca\x86\x25\xf9\xd9\x72\xe9\x0e\x4e\x11\x84\xb5\x9c\xe1\xcc\x5b\xe8\x23\x11\xc9\xba\x32\xdd\xb9\xef\xf0\x58\xac\xa5\x70\x39\xb2\x0f\x67\x4c\xa5\x47\xf8\x55\x57\xdd\xb4\x07\xa8\xdc\x77\xb8\xb1\xce\xa5\x16\xdc\xb7\xf6\x1f\x7d\xd0\xbd\xfc\x39\xe4\x81\x3f\x8f\x24\x8b\xe8\x3a\x9d\xba\xb3\x8e\x5b\x67\xe7\x9f\xc9\xcc\x44\xc2\x79\xba\x98\xdd\xec\x53\xb7\x6e\xda\x94\x2c\xd6\x28\x24\xcd\x18\xbc\x99\x1c\x50\xcd\x12\xd7\x60\x36\xd1\x6d\x47\x35\x15\x82\xf8\x8f\xbd\xeb\x3f\x74\xef\x3c\x88\x5f\xe0\xda\xe0\xf9\x6d\x7d\x09\xa8\x01\x6b\x9d\xf6\xe6\xfe\xc3\xe7\x9d\xd6\x5f\x3b\xed\xb5\xbd\xaf\x3e\xed\x5e\xfb\x00\x40\x4b\x5b\x6c\x1a\x09\x68\x0f\x19\x68\x57\xd1\x28\xcb\xb0\xe3\x97\x65\xb1\x67\x87\x6f\xd6\x7c\x73\xe4\x26\x98\xfa\x05\x21\xfa\xf3\xe8\xbb\xef\x8e\x04\x1a\xac\xbc\x9b\x6a\x94\x0c\xc5\xb3\x3f\x79\x15\xa1\x8b\x50\x1f\xcf\xc3\x6b\x4e\x17\xa2\x7a\xf0\x28\xaa\x4c\x0d\xc8\x08\x53\x12\x66\xd8\x26\x80\xd9\x34\xfd\x2a\xb8\xcd\x89\x1c\xd3\xd3\x5d\x6e\xc7\xf3\x6a\x14\x29\x85\xb9\x42\x2d\x58\xbd\xc7\x52\xf5\xc8\x52\x5e\x51\x4a\x59\x8b\x27\x39\x63\xc8\xcc\x12\x31\x98\xdd\xe9\x9b\x95\xa6\x65\xb8\xb9\x20\x08\x05\xd0\xb6\x14\xd1\x96\xf0\xb8\xb0\x35\xad\xb7\xff\x91\x78\xa8\x52\x73\x1c\x8f\x12\x6a\xe2\xfa\x65\x46\x06\x5b\xac\x55\xd3\x83\x7f\x97\xc9\xaf\x1d\x66\xce\x40\x54\xab\xe1\x52\x64\x9d\x64\xab\xde\xf7\x71\x3b\x9a\x61\xf7\x68\x8f\x6f\x8c\x90\xb1\x02\xf4\xa1\xf8\x3c\xa5\xf2\x60\x60\x3d\xe1\x31\x26\xaa\x23\x49\x8e\xce\x97\xad\xc7\xe2\x11\x2e\xf2\x8a\x45\x5e\x3c\xfe\xb4\x77\xf3\xaf\x11\xe8\xa1\xf6\x66\x77\x63\xbd\xd3\xfa\x20\x82\x58\xdc\xda\x02\xd3\xfa\xb6\x78\x38\xda\x8d\xf9\xa4\x94\x7e\x21\xde\x43\xf8\x68\x47\x8c\x39\x43\x03\x00\x14\x79\x72\xdb\xfb\xf0\xdb\xbc\xc1\x02\x31\xfa\x27\xcc\xf8\x31\x2a\x11\x40\x13\x79\x4a\xc4\x1d\xff\x85\x9d\x9f\xda\x20\x07\x8d\x2f\xb4\xb5\xde\xdd\xd8\x66\x7d\x16\xbc\xe4\xb6\xd7\x24\xf4\xbf\x6d\xf1\x32\x9d\xb7\xd9\xe0\x69\xd1\xe4\x6c\xc5\x7c\x29\xdd\x0d\x45\xb2\x0d\x97\x64\x22\x26\x17\xef\x23\xb6\xfd\x58\x96\x3a\xf0\x22\x07\x09\x24\xdb\xac\xaf\xdf\xec\xb4\xaf\xf6\xbe\xbb\x1c\x83\x4b\xd1\x2a\x02\xc0\x00\x01\xc1\x63\xaa\x3f\x33\x77\x8b\x13\x72\x0a\x53\x4a\xe9\x94\x32\xbd\xc0\x57\xed\x1b\xf3\x54\x3d\xb7\x73\xa8\xc5\x3d\xd7\x11\xab\x22\xd3\x79\x3d\x11\x82\xc5\x82\x86\x55\x72\xee\x1f\x22\x90\x4c\xe7\xfe\x21\xe6\x4d\x1f\x22\x0d\x5c\x2f\x4d\x8f\x8a\xac\x4b\x24\x2f\x56\x28\x9f\x14\x08\x5b\xc0\x5b\x9d\xd6\x25\xcc\xe0\x4a\x81\xfa\x4e\x85\x9e\xd5\xfa\xe6\x3b\xab\x2d\xb0\xaa\x78\xd6\x9c\x26\x40\x4a\xb3\xd7\xf0\xbe\xf8\xaf\x26\xf5\xd8\xce\xca\x0f\x55\x66\x66\xba\x4b\x12\x6c\x13\x33\x52\x96\x9c\xa6\x4b\xc6\xa7\x94\x21\x11\xfb\x5f\xb4\x7a\x5f\xb7\x95\xd8\xba\x6c\x07\x7c\x5f\x68\xb8\x43\xc6\xa7\x08\x42\x40\x76\x9f\xdf\xe1\x67\xea\x85\x0d\xf8\xe9\x55\xd1\xf8\xf8\x09\xaa\x02\x0c\x9a\x88\x11\xa3\x0a\xfb\x49\xc6\x35\x6a\xda\xa6\xc0\xcf\x2b\xcc\x97\x2a\xcd\x37\x01\x68\x04\x1b\xd6\x37\x69\xeb\x37\xb2\x66\xb3\x3a\x3e\x5e\xc5\xc2\xf2\x72\xf9\x75\xea\x7a\x40\x98\x12\x6d\xc0\xc0\xea\x47\x65\x47\x1b\xd3\x77\x33\x04\x6b\x0b\x3b\x14\xf2\x23\x36\xe1\x14\xc8\xf2\x5d\x32\xd9\x31\x17\x44\x78\xef\xc8\xeb\x83\x08\x79\x2a\x89\x74\x27\x19\xd0\x0f\xc1\x34\x4b\xbd\x17\x15\x02\xad\x12\xb7\xa2\x08\x66\x60\xe2\x86\xa4\xef\x23\xd7\xb4\x7d\x48\xfb\xe4\x4b\x98\x54\x4d\x63\xce\x76\x3c\xdf\xac\x80\x21\xec\xf9\x55\x35\xc6\x1f\x2b\x87\x8b\x76\xff\xc1\x93\xde\xcd\x47\x9d\xf6\x26\x2f\x00\x4b\xf3\xed\x27\xdd\xab\x1f\x66\xf9\xf8\x40\x01\x56\xc2\x20\x16\x3c\xfd\xcd\xf2\xbc\x42\x66\xbb\xc4\x5c\x2b\x31\x4f\x8a\x11\x20\x47\x06\x5e\x01\x1e\x6f\x10\x63\xfa\x38\x3e\x3a\x4c\x66\x8c\xca\x3c\xd5\x5c\x39\x52\xdc\x15\x02\x1f\x38\x42\xb4\x1d\x02\x5e\x4a\x2f\x89\x50\x03\xb8\xff\xf1\x26\xf7\x20\xb0\xe1\x04\x2a\xf9\x0d\xd9\x00\x91\x92\x10\x77\x42\xfa\x99\x68\x3d\xdc\x61\xd3\xde\x2c\xd0\x8d\xac\xad\x0b\xb8\x42\x95\xed\xdc\x10\x1e\x5a\xf1\x54\x9c\x4f\xbc\x33\x63\xd1\x3a\x71\x69\xdd\x59\x60\x1d\x5b\x75\x16\x6d\x64\x22\x11\x5b\x3d\x33\xfa\x68\x5d\x72\x6b\x29\xb7\xf9\x17\x8f\x57\x7b\xb7\xdb\xda\x1e\x5f\x15\x24\x7b\x8f\xd0\xf7\x2a\x32\xbe\xa3\xfb\x7b\x7b\xb3\x7b\xe5\xea\xcb\xdb\xf7\x99\xf2\x1c\x9c\xef\x01\xdf\x6f\xd8\x3f\xae\x75\x6f\x5c\x7f\xc9\xfa\x7e\x7d\xef\xf6\x93\xbd\xf7\x3f\x11\x6d\xd4\x41\xc7\x4d\xb8\x0e\x60\xd9\xa2\x83\x00\xb2\xc2\x67\x96\x88\x67\xce\xd9\x86\x85\xf7\x25\xf8\xe7\xca\x4a\x99\x8c\xbe\x69\x06\x30\x23\x40\x61\x6e\xfa\x23\x4e\x55\xb3\x95\x70\xbc\xd1\x5b\x60\x75\x3f\xe5\xac\x75\x9c\x57\xed\x2f\x70\x4f\xbc\xca\xd3\x06\x59\x63\x3e\x83\x4c\x9d\xb6\x78\xb0\x0a\xf4\x96\x74\x00\xae\xd3\x08\x31\xdb\x96\xa2\x84\xa4\x9c\xaa\xd9\xc0\xea\x94\x46\x14\x15\x26\xf8\x86\xc4\x6d\x08\xd1\x8a\xac\x4c\xf8\x52\x4f\x2c\xc7\x9e\xa3\x6e\x18\x8a\x17\x50\xc4\xc2\x9c\xa1\xc4\x44\xa6\x23\x9f\x59\x05\xec\x4a\xa2\x3d\x85\x1e\xc1\xcb\x03\x0f\x68\x4d\x55\x8a\x1d\xee\x29\x9e\xb8\x64\xde\x30\x3f\x7e\x24\xb8\xd7\x18\x97\x53\x6b\x17\xee\xe2\xc1\x3e\x8f\x2b\xf5\x21\x98\x3f\x0f\xd3\xa4\xb0\x7d\x55\x9a\x79\xad\x2f\xe0\x21\xf1\xad\x4e\xfb\x6a\xea\x05\x4a\x7d\xf6\xe9\x1f\xad\x45\x47\xe0\x9c\x5f\x55\x86\x8f\x4d\x34\x5d\x1e\x4a\x8c\x7e\x0c\x89\x24\x10\x3b\x4b\x07\xf3\x1b\x3a\x21\x92\xe5\x80\xdf\x9d\x8d\x03\xec\x17\x39\x01\x50\x53\xb4\x89\x78\x99\xf2\x2b\x13\x77\x4e\xf5\xa3\x0b\x20\xa1\xd9\x74\x11\x0e\x05\xc7\x25\x40\xd9\x2c\xd2\x5a\x01\x01\x05\x2d\x74\x0e\x4b\x9e\x09\xc5\x10\xe1\x37\xba\x05\xbb\xfd\x5f\x3a\x17\x3e\xe7\xf3\x03\x68\x2b\x7a\xb7\xee\x75\x1f\x7d\x10\x43\xc3\x0b\xb8\xc4\x78\xfa\x2b\x5c\xf8\x05\x55\xa1\x66\xdb\xc5\x06\x78\xa6\x3d\x67\xe1\xa3\xc1\x61\xd8\x6e\x1c\x17\xb6\x1d\x3c\x35\xc5\xaa\x54\x61\x56\x74\xaf\x7d\xf0\xe2\xf1\x6a\x82\x9d\x29\xa6\x3d\x67\xfc\x48\x2e\xa9\xf0\x52\xc0\xcc\x8c\xee\xdd\x6f\xbb\x1b\x97\x3b\xed\xb6\x74\x53\x78\xd8\x69\xbd\x15\x7c\x2e\x47\xb7\x2a\x80\x70\x8a\xb5\x2a\x06\x22\xd9\x60\x85\x03\x4c\xca\xdf\x95\x66\xc8\xaf\xcf\x8e\x9d\x3a\x3e\x31\x3c\xf2\x9b\xf3\x02\xf1\xb2\x42\x46\xc6\x4f\x9f\x1e\x3e\x73\x9c\xfd\x21\xfc\xda\xec\xdf\xb3\x24\x02\x73\x0b\xe8\x98\x55\xa7\x32\x4f\xdd\x92\x59\x37\xe6\x28\x39\x3e\x3e\xf2\x9b\xd1\xc9\xf3\x63\xa7\x87\x4f\x8e\xbe\x81\x15\xff\xae\x64\x92\x08\xba\x0b\x2b\x35\x4f\x8e\x8f\x4d\xfd\x86\xfd\xab\x4e\x10\xff\xf6\x8d\x04\xfe\x26\xfb\xa4\x41\x44\x3d\x1e\x99\x9a\x1e\x1e\x81\x22\x3e\x99\x1e\x3b\x3d\x3a\x7e\x16\x7e\xd1\x24\xaf\x8d\x0e\x9f\x9a\x7e\xed\xfc\xc8\x6b\xa3\x23\xbf\x39\x3f\xfd\xdb\x09\x04\xed\x0c\x23\xf9\xc8\xe4\xf8\xd9\xe9\xd1\xf3\x02\xc0\x13\x54\x92\x03\x2f\xdf\xe0\x7f\x8b\x1e\x13\x7f\x83\x04\xf1\x07\x84\x5a\xa0\x60\x8c\x58\xc4\x6f\x03\x40\x50\x18\x93\x7a\xd3\xf2\xcd\x06\x8e\x89\xc7\xe3\x37\x83\x81\xe0\xe3\x50\x99\xc5\x21\x48\x76\x66\xb1\x97\x81\xcc\xfa\xf2\x3f\xbf\x44\xaf\xad\xfb\xf7\xdf\x86\x20\xfe\xec\xe9\x9e\xae\xd9\xff\x38\x3b\x3e\x3d\xac\x5a\x4a\x51\xd2\x0a\x85\x80\xa6\xe3\x1b\xe4\x38\x9d\x35\x6d\x13\xdc\x3a\xcb\xcb\x65\xf8\xac\x48\xa0\x5d\xac\x26\x4c\x54\x88\x4b\xea\x27\xf2\x0e\xb5\x63\x5b\x1f\x24\xf9\x20\xec\x27\x65\x7b\xa4\xb5\x14\x40\xa7\x39\xee\x1c\x39\x4c\xdf\x14\xa0\x91\x10\x17\xef\x60\xb8\xa5\x4b\xbd\xa6\xe5\xa3\x75\x0e\x12\x20\x9a\xc0\x99\x0d\x82\x91\x80\x10\x44\xb5\x17\x89\x9d\xf4\x7a\x14\xcf\xf7\x93\x20\x06\x2f\x9a\x4c\xb4\x16\xeb\x06\x72\x58\xb8\x03\x23\xa1\xe7\x9d\xf6\xe6\xcb\xdb\xf7\xbb\xf7\x6f\x8a\xab\xd0\x83\x64\x8c\x53\x9c\x6f\x24\x3d\x6f\x49\xb3\x6b\xe5\xea\x38\x1d\xba\x80\xaa\xed\x71\xda\x49\x6d\x0f\xe8\x74\x8b\xcd\x8e\x5c\xce\xbb\x78\x07\x27\x66\x58\x41\xc7\xdd\xe4\xe8\xff\x38\x3b\x3a\x35\xad\x8a\x4b\xc4\xcb\xa2\x22\x2e\x71\x72\x74\x6a\x74\xf2\xf5\xd1\xe3\xe7\xf9\x86\x37\x3e\x39\x5d\x0c\x4a\x6b\x72\x74\x6a\x62\xfc\xcc\x94\x1a\xf6\xeb\xf9\x9d\xbd\x47\xaa\xa8\xc8\xc9\x71\x40\x2c\x56\x5d\x9c\xba\xdf\xff\xb5\x7b\xe5\x4f\xc7\x54\xf4\x97\xa0\xb2\x3a\x8a\x9f\x5d\xd8\x75\x05\xd5\x71\x9c\xac\xa4\x52\x63\x71\x2e\x14\xeb\xa5\xb3\x67\xce\x14\x0d\x20\x9b\xa4\x46\xb5\x04\xc0\xe5\x9c\xeb\xc3\x47\x80\x03\xd3\x9e\x75\xc0\xac\x77\x29\xc4\xad\x2b\xbb\x4f\x2c\xf0\x9d\xde\x85\x8b\xdd\xbb\x5f\x07\x94\xa3\xf0\x36\x16\x98\xde\x21\xa1\xcb\xfe\xc3\x47\x00\x4b\x7e\x93\xcd\xce\xaf\xda\x6c\x77\x97\xde\x8a\x94\xa3\x40\x0d\xcb\x5a\x22\x55\x6a\x51\x9f\x12\xc7\x6d\xd4\x0c\x9b\x56\x79\x2a\xff\xbf\x16\x6d\xb1\x46\x14\x5e\x48\xea\x0d\x35\xd9\x77\xf7\xd1\xfd\xbd\xed\x35\x34\x0c\x03\x87\x8d\x74\x69\x80\x76\xb6\xd6\x22\x92\x72\x28\xc2\xdf\x79\x4f\x3b\x55\x6a\x21\xd5\x7e\xf0\xa7\x38\x5e\xec\x2a\xa1\x0b\xd4\x5d\xf2\x6b\x60\xd5\x7a\x9e\x53\x31\x43\x40\x4c\xd3\x57\xf5\x83\x5e\x2c\xdc\xa8\x3f\xc2\x5c\xa7\x97\x37\xef\xbd\x5c\xfd\xec\xc5\xd3\x0f\x80\x70\xfc\x4a\xc4\xb3\x11\x21\x15\x83\x4b\x69\x6a\xb3\x0f\xa4\xad\x7d\xb6\xa4\xb8\x42\xfc\x35\x38\x25\x8f\x3c\x42\x50\x8d\x48\x8b\x0d\xfe\xe0\x3c\x6e\x55\x93\x4f\xc3\x3e\xe4\xf7\x9d\xa1\x8b\x89\xaf\xfe\xf5\x5c\xf3\xc8\x91\x7f\xcc\x7e\xac\x4f\xaf\x59\xd8\x38\xe2\x51\x3a\xb5\x72\x4e\x14\xa1\x50\x80\x70\xd4\x6e\x2d\x44\x23\xeb\x2a\xae\xa8\xae\xc3\x1a\x4d\x77\x2e\x09\x45\x99\x72\xc5\x84\x1e\x1b\xb1\x9c\x66\x95\x9c\x70\x9a\x76\xd5\x5d\x52\x0d\x6a\xae\x2c\xff\xe4\x05\x36\x2a\x9c\x77\x41\xf4\x26\x99\x6b\x0a\x44\x5b\x24\x12\xf9\x93\xf7\xd4\x01\x1a\x14\x4f\xf3\x4f\xbd\x04\x1f\x40\x7b\x2a\xd4\x5c\x00\x6f\x38\xb2\x84\x4f\x4d\x9d\x22\x15\xea\xfa\x18\x1d\x49\xb1\x05\x2a\x1b\x26\xe2\x6d\x62\x55\x87\xec\xe5\x4c\xce\xfe\x83\x67\xbd\x0f\xde\xe9\x7d\xf8\x98\x2d\xb2\xeb\xb7\x3a\xad\x77\x71\x0b\xcf\xf4\xbb\x4d\x52\x1e\xad\xca\xa3\xe3\x0e\x79\x84\xbe\x49\x2b\x4d\x1f\x1e\x8f\x0c\xa6\x9d\x51\xf1\x49\xd3\x13\x0f\xc8\x96\xe1\x53\xcf\x87\xbb\x08\xad\x4a\x68\x74\xe0\x63\x0a\xbf\x97\x43\x5e\x0f\x07\x89\xc2\x43\x21\xde\x87\x09\x0c\xdb\xde\x50\x08\xbb\x36\x84\x84\x9c\x43\x84\xfa\x95\x72\x31\x20\xc8\x49\x5a\x69\xba\x9e\xb9\x40\xad\x25\xe1\xf6\x0a\x89\xe1\x90\xe7\xdb\xb4\xaa\xc4\x99\xf9\x4f\x5a\xf1\xbd\x94\xb9\x42\xaa\x86\x6f\xcc\x18\x1e\x0d\x6e\xc2\x75\x03\xf8\x64\xb8\x77\x1e\x9d\x16\x31\xb4\x92\x9c\xf3\x2b\x0e\x53\xb2\xbd\xff\x45\x6b\x7f\x7b\x4d\xd8\xcc\x18\x64\xf0\xb0\xd3\xba\x1e\x9f\x62\xcc\x96\xc6\xf0\xdf\xdb\xc2\x4a\x85\x49\x17\x09\x17\x7a\xd0\x7d\xb4\x01\x53\xf8\x26\x9b\x86\xec\x6e\xb6\x8b\x77\xb3\xee\xa5\x6b\xdd\xc7\x5f\xed\xfd\xe1\x2d\xb0\x6d\x23\xfb\x6e\x1f\x9d\x18\x12\xc2\xfc\x9c\x7b\x33\x3d\x1e\xe8\x20\xbb\x98\x77\x6b\x9c\xf7\x54\x9d\x33\x92\x8b\xe6\xb4\x58\xe5\x9c\xdf\xd2\xb1\xf8\x9e\x83\x39\x3e\x39\xd2\xf6\x45\x8f\x45\x38\x4b\xd1\x40\x2f\xac\x44\xd3\xe5\xec\xd0\x5c\x07\x1d\xbd\x9a\xe4\xd1\x83\x83\xf4\xec\xe4\x29\xa2\xb2\xed\xf4\xd5\x02\x15\xbb\x84\x19\x8a\xe1\x30\xa6\xad\xca\x4c\x54\xa3\x82\x22\xa8\xb6\x1c\x0c\x23\xb1\xcd\x16\xd2\xc9\x8e\x80\x29\xa8\xec\xf8\x48\x48\x7f\xb1\x46\x23\x08\x5f\xdf\xe3\x1d\x5c\x21\xfa\x18\xe9\x38\xf8\x07\x3b\x5a\x5f\x37\x5c\xf9\xcc\x8e\x03\x2f\x12\x13\xf5\x8d\xa4\xe9\xfd\x92\x4f\x5a\x76\x32\xb3\x7f\x08\x9b\xdb\x63\x9f\x8c\x60\xf0\xe8\x59\x8f\xba\x3a\x3f\x77\xfc\x97\x61\x2a\x45\x5a\x62\xe0\x2f\x89\x3c\xcf\xe3\x15\xf3\xf7\x32\x15\x18\x24\x74\x9b\x34\x62\xd1\x66\xc7\x5f\x31\x32\xfd\xe9\x41\x57\xc2\x18\x4a\x38\x15\xac\xff\x20\x3f\x6f\x79\xb9\x8c\xb8\x3b\xbc\x69\x61\x1f\xe2\xc7\xe3\xee\x5c\xb4\x17\xf1\x63\x68\xd2\xab\xe8\xc7\x68\xad\xf1\x9e\x8c\x56\x2e\xde\x1e\xc3\x79\x97\x68\x0e\xf6\x28\xce\x3f\xa9\xfd\x7f\xb3\x8e\x7c\xa5\xfd\xf5\xb7\xe9\x0f\x1e\x99\x71\x76\xf2\xd4\xc1\x2d\x4c\xa6\xad\x9d\xf1\xfa\x14\xf9\xd9\xab\x5e\x92\x41\x08\x09\x36\xf3\xa0\xfa\x4b\xdd\xba\x03\xa8\x11\xde\x35\x8c\xd0\x4c\x56\xee\xdb\x29\x94\x95\x18\x5f\x26\xa0\x5f\x33\xb6\x6b\x5e\xd1\x41\x58\x65\x83\xd5\x3c\x30\x93\x73\x9f\xd5\xeb\xe8\xff\xa2\x71\xb0\x7d\x88\xcf\x67\xdf\xf4\x29\x5a\xcd\xbf\x1d\x60\x8e\x16\x95\xcb\x5f\x66\xa3\xcb\x28\xf0\xa2\xfc\x0c\x76\x84\xf6\x66\xb4\x2d\xcc\x86\x8f\xf7\x51\xde\x05\xca\x3a\x2b\x24\x28\x43\x37\xd0\xaf\xc5\xdf\xf1\xbe\x8b\x7d\xa1\xa3\x42\x8d\x2f\x69\x85\xe8\xb0\x2d\x89\x6f\x06\x6c\x54\x62\x74\xe3\x33\xe0\x95\x0c\xeb\x81\x8f\x4d\x74\x4f\xe3\xbd\x98\xb3\x45\xc5\x9a\xa3\xdf\x18\xa3\x35\x17\x6c\x66\xce\x36\x26\x9c\x57\x71\xd7\xe7\xdf\xa1\x99\x9d\x11\xa0\x92\xda\xbe\x81\xe7\x8c\xe8\x89\x71\xab\x2a\xeb\x14\x76\xa7\xf4\x61\x5a\x67\xbe\xc2\x5e\x13\xfd\x12\xed\xb9\x98\xa2\x52\xc7\xc8\x9f\xf6\xdb\x2d\x0d\x47\x9f\x7e\x11\x77\x4b\x28\x33\x30\x26\xf1\xc9\x2a\xc8\x01\x9c\x9a\x7a\x0d\x73\x0b\x82\x60\xe1\xfc\x67\x31\x42\x46\x80\x08\x80\x0f\x94\x23\x81\xd3\x73\x01\xbb\x77\xbf\xee\xbe\x7b\x35\xf3\x04\x4c\x55\x91\xda\xec\x0e\x0b\x60\x77\x31\xce\x3c\x9e\x65\x03\x48\x29\x19\xc6\x8b\x86\xdd\xee\x1b\xf8\xc7\x25\x88\x47\x7c\xa6\x70\x46\x89\xc6\x6e\xf7\xee\x5c\x01\x07\x70\x14\xbe\xb4\xff\xf6\xa2\x1f\x4a\x19\x3c\x9a\x1c\x60\xb5\x4b\x19\x03\x9a\x81\x44\x1c\xa3\x20\xd9\xbf\x56\x56\xce\xd9\xd3\x63\x13\xc7\xc8\xd8\x2c\x59\x72\x9a\x90\x1c\x36\x43\x6b\xa6\x5d\x25\x06\x99\x35\x5d\xba\x08\xde\x19\x78\xd3\x04\x7a\x8f\x80\x91\xb7\xe1\x3a\x6f\x2e\x0d\x21\x90\x00\x46\x6b\xd7\x7c\xbf\xe1\x9d\x87\xcf\xd3\xc1\x15\x4c\x8f\x54\x1c\xd7\xa5\x15\xdf\x5a\x42\x62\x98\x51\xcb\xa3\x43\x3c\x15\x15\xf2\x21\x6c\xea\x2f\x3a\xee\xbc\xc4\xd7\xa9\x5a\x9b\x7f\xc7\x0d\xd2\x0e\x50\xc3\xa3\xcd\xaa\x53\xf2\xfd\x25\x58\x7c\xda\x74\x30\xe9\xb7\x18\xba\xd0\x5b\xdf\xed\xb4\xaf\x76\xda\x9b\x22\x79\x24\x63\x82\x89\x3c\x15\xcf\x37\xfc\x82\xa4\x4d\x93\xd8\x7d\x1e\x99\x1a\x3f\x3b\x39\x32\x5a\x1a\x9e\x98\x20\xd3\xc3\x93\x27\x47\xa7\xe1\x9f\x86\x17\x30\xc3\x28\xa3\x7a\x38\x23\x8c\x60\xe5\x49\x17\xd4\x69\xad\x0b\xc6\x98\x2d\x6d\x4b\x40\x19\x66\x1c\xa3\xfd\x1d\xd6\x9f\xaf\xfa\x60\x0f\xe8\x6e\x5c\xcb\x59\x27\x27\x53\x84\xcc\x07\x32\x91\x9f\x0d\x92\x7b\x49\xf5\xb9\x08\x93\x94\x43\xf5\x00\x28\x07\x3b\xfb\x86\x27\xc6\x00\x81\xb3\x4a\x9c\xa6\xff\x2f\xf0\xd8\x03\xf7\x01\x70\x9f\xf2\x17\x9f\x62\x60\x53\x93\xd4\xf3\x8d\xb9\x22\xf7\xa0\x4b\xd7\xd2\x98\x7a\x33\x66\x99\x40\x5c\xf9\x19\x3a\x15\x75\x5d\x92\xeb\x00\x47\xd4\xa7\x22\x03\xc0\x61\x96\x72\x74\xba\x0b\x91\xbc\x69\xef\xcd\x2b\x2b\x90\x1e\x22\x9d\x95\x91\x66\x0d\x6a\x6d\xa7\x9f\xa6\x71\xe7\xcf\x8e\xfe\xd5\x3a\xe8\x5e\xa9\xc1\xd9\x76\x37\x27\x30\x32\x6c\x62\xda\x55\x73\xc1\xac\x36\x0d\x2b\x88\xcd\x9f\xb5\x8c\x39\x0c\xfc\x60\x1b\x5e\x53\x09\xc4\x04\xef\xba\x7b\x57\xbf\xeb\x7d\xd3\xea\xb4\x37\x7b\xeb\xad\x4e\xeb\x7e\x77\x75\x0d\xd3\x03\x53\x82\xe6\x91\xbf\x2b\xc8\x5e\xbe\x7e\xb3\xfb\x43\xc8\xf4\xad\x8a\x57\x0a\x55\xad\x92\xaa\xe9\x35\x2c\x03\x4f\x9d\xf1\xe1\x26\x40\x6f\xcc\x53\x3b\xc8\x05\xe3\x48\x0c\xc4\xa3\x9e\x26\x9d\x65\xef\xfa\x0f\x9c\x8c\x82\x47\x77\x72\x6c\x2e\x2e\x92\xa7\xa3\xb5\x77\x79\xaa\x4b\xa8\xe6\x17\xfb\x9f\x3e\xd8\xbb\xff\x24\x73\x4e\x29\x34\x9e\x33\x17\xa8\xcd\xdf\xa9\xe7\x9a\x66\xb5\x4c\xc8\xb0\x65\x71\x06\xd6\x1a\x35\x2c\x80\x3e\xad\xf2\x4e\x67\xbb\x57\xa3\x19\xe6\xb9\x01\xc3\xb9\x07\xa9\x12\x2e\xf5\x3c\x75\x46\x5e\x94\x4b\xe9\x13\x39\x6d\x88\x9c\x3c\x3b\x76\x9c\xe8\x1b\xd5\x59\x6d\x13\x92\xa0\x66\xdf\x41\x02\x4f\x4c\xde\x03\xf6\x5a\x1e\x8b\x85\xc3\x2f\xf2\x81\x76\x83\x57\xa4\xde\xd5\x77\xbb\x97\xbf\x93\x12\xdb\xd4\xdc\xce\x19\x1d\xe6\xb8\x73\x69\x1d\x16\xeb\x1e\x08\x2c\xeb\xa3\x7b\x82\x07\xa2\x82\x7d\x13\x94\xc3\x8e\x79\x95\x1d\xc0\x2f\xc7\x39\x3a\x21\x70\x42\xf6\x35\x4f\x22\x40\x1e\x85\xa7\x4a\xa4\xf4\x8f\xd6\x29\xa5\x79\xba\xf4\x63\x76\x4c\xc8\x69\xf2\xd3\xef\x21\x76\x3a\xe7\xe9\x1b\xb0\x23\xfa\xeb\x99\xc8\x63\x7a\xe1\x0e\x89\x94\xfe\x11\x3a\xc4\x37\x2a\xf3\x41\x87\xa8\xfb\x83\xfd\xac\xef\xfe\x60\x47\x34\xf2\x2a\xe6\xee\x8f\xb0\x3b\xa4\xc2\x07\xd9\x1d\x41\x8a\xac\x74\xbe\x7b\xf2\x01\xcf\xbe\xa4\x46\x05\xa1\x4f\x4a\x98\x7a\x8f\xbf\x55\x1d\xa1\x78\xe8\xb7\xd6\x45\x78\xe7\xc7\x9d\xf6\xba\x54\x3a\x2d\x63\x6e\x8b\x73\x43\xeb\xed\x02\x39\x57\x36\x61\x23\x64\xb4\x33\x0d\x34\xad\x6f\x58\xc6\x0c\xa4\x45\x39\xd7\x76\x60\x25\xfb\xc7\x5a\xcc\x0f\x9f\x38\x90\xc2\x00\x8c\x86\x54\x93\x96\xc5\x77\xd4\x28\xf7\x57\x3c\x64\x38\xd8\x59\xf2\x43\xb4\x14\x88\x11\xce\xc3\x60\xb2\x23\xfe\xbd\x5d\xb0\xc9\xe0\x40\x0d\xd6\x05\x6b\x30\x9b\xd8\x73\xb4\x2a\x16\x85\x37\xf8\xcb\x41\xa4\x39\x62\xf2\x43\xc3\xaf\xa5\xad\x9d\xd0\xca\x96\xf7\x92\x3c\x17\xa7\x94\x16\x2d\x2f\x97\x4f\x60\x43\x4e\x58\xc6\xdc\x41\xbc\x83\x24\x45\x1e\x88\xca\xfd\xad\xe7\xc1\x9b\xd3\xd7\xd2\x1f\xbc\x69\xd9\xbb\xc0\x01\xcc\xbb\x41\x37\x8c\x3c\xcd\x04\x47\x0f\x9c\xc1\xc0\xde\xdb\x37\x04\xfe\xa4\x08\x54\x78\xcd\xf1\x7c\xfe\xe0\xb8\xbc\x5c\x3e\x0e\x52\xf9\xfd\x18\xf3\xd4\x3d\x9f\xc2\x55\x38\x33\x92\x21\xbf\xa4\x7e\x35\xfa\x65\x40\x49\x7d\x70\xba\xa9\x65\xea\xb5\x84\x7f\xac\xac\x90\x45\x03\x93\xba\x66\x20\x29\xdf\x4f\xc2\xd7\xa5\x24\x29\xac\xac\x64\xc7\x85\x08\xf9\x80\xca\x56\x9c\x4f\x4f\xa4\x0f\x6c\x88\xc8\xc4\x2b\x05\xd8\x93\x26\xa3\x51\x3f\x39\x99\x08\x62\x11\x2d\x7d\xe4\x42\xc6\xea\x95\x80\xa5\x8a\xf4\x2e\x1f\xe7\xfc\x7a\xc2\x81\xb1\x05\x38\x0f\x03\x10\x17\xea\x3b\x5b\xd7\x62\xce\xa9\x1a\x8c\xba\x7b\x92\xfd\xb9\xb2\x12\x02\xf8\x2b\xdf\x5e\x94\x3c\xab\x49\x61\x7d\xd2\x52\x81\x10\xfd\xa0\xeb\x0a\x72\xd3\xdf\xf4\xc4\x86\xb5\x68\x5a\x16\x99\xa1\x1c\x1c\xbf\xe9\xc2\xb3\x99\xb5\x24\x90\x61\x02\xc2\xeb\x08\xdd\x6c\x06\x82\x47\xc8\x51\x8e\x38\x44\x02\x07\x74\x37\x7e\x89\x50\xf7\xd7\x8b\xc7\x57\xa1\x23\x76\x3a\xad\xe7\x1c\x6f\x5f\xba\x07\xe8\x5a\x58\x70\xdf\xd5\xc0\xe0\x06\x46\x95\xaa\xa8\x4d\x0c\xe2\xd8\xb4\xe4\xcc\xce\x12\xdf\xf0\xe6\xc3\x07\xc7\x82\x3a\xe0\x39\x3f\x2a\x1d\x86\xaf\x8b\xc3\x10\xa6\x8b\xb2\x51\xfa\xe3\x5b\xe1\x67\x9c\x1a\x1d\x39\x3b\x39\x36\xfd\x5b\x72\x72\x72\xfc\xec\x84\xd2\xdc\xce\x36\x3c\xf3\x88\x57\xb3\x63\x65\xcb\x57\xea\x3f\x4a\x86\x4f\x4d\x8d\xab\x44\xa3\x69\xfd\xf2\xee\xc5\xbd\x0f\x77\x94\x22\x26\x5f\x1f\x1b\x19\xcd\x11\xb9\xa6\x2d\xaf\x65\xee\x92\xa5\x64\xf0\x77\x45\xc4\xa9\x7b\x2c\x45\x9e\xbe\x7d\xaa\x84\xdb\xdc\x0d\xd4\x90\x9b\x85\x12\xf4\x3a\x84\xc0\x10\x85\x16\xc5\xd4\xc4\xb0\x66\x7c\xc2\xab\x94\xa6\x74\xc6\xe8\x84\x32\xb2\x46\x27\x14\xa6\xee\x8e\x14\x69\xaa\x7e\x41\x71\x5a\x9e\xb5\x88\x3c\x3d\xdb\x1a\x8a\x3b\x3e\xfa\xfa\xe8\xa9\xf1\x09\x25\xe3\x9a\x2c\xf0\xe5\xcd\xb5\xbd\xdb\x4f\x32\x9a\xab\x27\x70\x8b\x5c\x66\x2f\x3c\xcd\xcb\xe4\x06\xa2\xd5\x93\x32\xd7\xa8\x6a\xa6\x64\x58\x5e\xd5\xf5\x53\xaf\x71\x54\x9b\xbe\x82\x42\x58\xf1\xbd\x3f\xaf\xef\xbd\xff\x35\x3b\x9b\x06\x8d\x10\xd9\xee\xbd\xf3\xf9\xde\x77\x7f\xc8\xb8\xa8\x4f\x4d\x9d\x22\x23\x52\xf6\x21\x84\x34\x40\xca\x2e\xf5\x3c\x63\x8e\x06\xd1\x0d\x40\x50\x59\x99\x85\xbc\x99\x52\xc9\x9b\x37\x1b\x25\xcf\xb3\x4a\x90\xc3\x08\x2d\x00\xa6\x4a\xd6\x56\xd3\x6e\xd2\x80\x7d\xce\xb4\xc1\xbd\x41\xe1\x2d\x59\xe4\xdb\x14\x5b\xa9\xd3\xc3\x23\x2a\xe2\x44\xd9\xd3\xa7\x28\x7d\x76\x64\x64\x74\xf4\xf8\xe8\xf1\x62\x75\x56\x0c\xeb\x67\xfb\x7e\x0c\x9d\x06\x73\x2a\x24\xb4\xce\x77\x1d\x9d\x12\x9e\x2a\xbd\xd5\x30\xc8\xd9\x1b\x65\x11\x58\x5e\x2e\x0b\xef\xd8\xf9\x39\x6e\xd8\xe6\x03\xc5\xcd\xa1\x42\xaa\xf4\xc2\x88\x1b\x39\x34\x5e\x5e\x2e\x43\xcc\xd0\xf9\xba\x58\x53\x07\xad\x75\x4a\x0d\x0a\x65\x71\x11\xd7\xa8\xd5\x20\x90\x47\x5e\xe1\x88\xdb\x98\x54\x0e\x6b\x98\x5d\xc1\x88\x31\x83\x38\x50\x01\xc2\x63\x06\x32\xb7\xaa\x3e\x8b\x56\x02\x66\x6e\x72\xd8\x71\x09\xbc\x03\x10\x6a\x33\x63\x9f\x5d\xf0\xe6\xcd\xc6\x2f\xf2\x6c\xb9\x08\xe9\xdd\xbb\xfa\xb1\x0c\x97\x15\xe0\x3f\x8e\x82\x3c\xfe\xa0\xd4\xde\xec\x5d\x7d\x16\x3a\x69\xd8\x87\x17\xc0\x0d\xc3\x0b\xfe\x42\x39\xf9\x50\x5b\x5c\xe3\x45\x95\x0d\x42\xec\x5f\xbd\x9a\xee\x02\x75\x31\x0c\x6d\x08\xff\x8f\x54\x9c\x2a\x3d\x46\x8e\x1e\x39\xf2\xab\x21\xc2\xe7\xc0\x31\x81\xf6\xef\x51\x5f\xce\xf5\x9c\xa1\x15\xa3\x89\x58\xc8\x01\xcb\x5f\x43\x22\x02\x53\x27\x11\x08\xa3\x6c\x43\xcc\xca\x07\x00\x78\xf0\x0c\xf0\xf7\xc4\xbf\xf9\xf1\xf4\xac\x73\xe1\x0a\x2a\xc4\xbe\xbd\xf0\x29\xec\xd1\x4f\xf1\x08\x3f\x46\xa2\xd9\x85\xeb\xe1\x0b\xf0\xe3\xd5\x97\x17\x1e\xc0\xcd\x6c\x57\x50\x06\x02\xae\x2a\xab\x21\x3d\xdd\x54\x70\x45\xe7\xe0\x0b\x8c\x76\x1c\xf7\xe2\x62\xcf\xfd\xd3\x91\x7f\x4c\x74\x25\xfb\x28\xe8\xcb\xdf\xf2\xc8\x3e\xc0\xb3\x6d\xfa\x35\xc7\x35\x7f\x8f\xf8\xb1\x0d\xce\x73\x01\x2e\xd5\x20\xbe\xcd\xa8\x68\xa2\xe8\x34\x1d\x29\x5c\xbd\x41\x17\xfe\xd3\x91\x7f\xd4\xf6\x2f\x7e\x1d\xef\x60\x29\x1a\xef\x13\x81\xdc\x22\x51\xa7\x71\x50\xd4\xdd\x94\x48\xd9\x41\xba\xf0\x18\x19\x46\x78\x1a\x76\xff\xa7\xb6\x49\xab\x65\x02\x3d\x57\x75\xa0\xe3\x80\x1f\xbc\xe1\x9a\x0b\xa6\x45\x39\x02\x20\xa2\x0c\x50\xf4\x19\x64\xec\x31\x05\xbb\xed\x18\x89\xf2\x1b\xec\xf6\xd6\x36\xbb\x1b\x5f\x24\xa1\x91\xc3\x67\x54\x09\xfe\xbf\xbd\x29\x7a\xe9\x76\xa7\xbd\xb6\x77\xe5\xaf\xbd\x07\x5f\x26\x11\xad\x95\x2f\x86\x9a\x8e\xc2\xc0\xd1\x29\xf8\x08\x41\x41\xa3\x53\x0f\xbf\x1f\x9e\x18\x03\x5b\x4c\xfc\x22\x98\x89\xf8\x75\x04\x7e\xe4\x00\xfa\x2b\xa9\x94\x7a\xd6\xa5\x29\x98\x36\x09\xd3\x34\x55\x76\x96\x59\xa1\x04\x82\x86\xa6\x21\x0e\x69\x79\xb9\x7c\xca\x98\xa1\x16\x1e\x6e\x02\xaa\x33\x37\xc7\xa7\x7c\x7f\xdc\x7f\x78\x6d\xff\xc1\x33\x39\x16\x49\x2d\x5d\x73\xfc\x6b\x87\x9a\x69\xff\xeb\x20\xab\xa4\x10\x1d\x69\x76\xaa\x48\x36\x18\x58\xa6\x6e\xc2\x7d\x29\x36\x7c\xd8\xfc\x05\x59\x7e\xc6\xbb\x62\x26\x30\xc2\xae\xbc\x9d\x0b\x42\x07\xdc\xc2\x73\x10\xa8\x4c\xe5\x4b\xf7\xcb\x57\x98\x24\x41\x68\x32\xbd\xaa\xfd\x00\xdb\xf4\xe7\x5c\x4d\xd3\x36\xdd\xbf\xdc\xdf\xd4\x29\xe4\xc0\xee\x7f\x32\x69\x9f\x3a\x32\xfb\x3b\x9f\xec\x63\x89\x0c\x9f\x7e\xfb\x20\x45\x92\x56\x83\x79\xba\x24\x95\xf8\x0d\x5d\x4a\x1d\x12\x70\x74\x0f\xfc\x3a\x31\xd0\x00\x26\x97\xe6\x23\xbe\x61\x24\x74\x1f\x64\xb4\x05\xd6\x52\x5f\xc3\x19\x00\x35\x45\x7b\x2f\x99\x31\xe1\xbb\x4b\xf0\x98\xeb\x70\xa4\x27\x83\x2c\x1c\x4d\xc0\x3d\x0d\xc1\xcf\xeb\x4d\x0f\x8d\x5a\x66\x71\x95\x1a\x10\x52\x90\xbb\x83\xe3\x20\x4f\x9a\x9e\x39\x67\x77\x2e\x6c\x22\xcc\xc7\x31\xa6\x4d\xb6\xac\x18\x46\x72\x04\x13\x9d\x07\x5f\x70\xa0\xde\xd6\x6e\x67\xb5\x55\x42\x0e\x3e\x11\xc5\x2b\x2c\x59\xc0\xf9\xe5\xc9\x00\xb2\xbd\xa1\x0e\x4f\x4a\xf4\x76\xe1\x3d\x2f\xa5\x5b\x06\xd9\xe0\x12\xd9\x79\xc5\xf7\xb3\x94\x0c\xbf\xfe\x27\xb1\xbc\x07\x14\xb1\x9c\xde\x8b\xed\x1f\xf9\x6d\x19\xe5\xa3\x4f\xb6\x6b\x9c\x0b\x20\xa6\xed\xd3\x39\x17\x4a\x16\x7b\x74\x12\x12\x06\x71\xae\x53\x3f\x8e\x48\x83\x31\x4b\x39\xf1\x79\x76\x62\x40\x35\x62\x6e\xeb\x7d\x91\xd4\x0f\x60\x6c\x2d\xa7\x62\x58\xb4\xcc\xb6\x88\x53\xe3\x23\xc3\xa7\x46\x99\xe5\x72\x68\xe4\xd4\xe8\xf0\xe4\xa1\x21\x76\x2f\x5f\x30\x9d\xa6\xc7\x7f\x86\xf7\x0d\x8b\xfa\x3a\x72\x95\x28\x22\x2d\x33\xb4\x1e\x09\x37\xd8\x76\x52\x43\x76\x2d\xe0\x15\x77\x5a\xeb\xa2\x66\xb6\xeb\xca\x2b\x58\x30\x01\x49\x92\x5a\xeb\x02\xd9\x21\x47\x5c\x21\x6b\x31\x86\xab\x9f\x87\x0c\xae\xf3\xfe\x52\x83\x27\x0d\xb0\xbb\x11\x92\xab\x1d\x6a\x38\xae\x7f\x88\x38\x2e\x39\x64\x3b\x36\x3d\xa4\x68\x61\x52\x8e\xbc\xb9\x08\x29\xa1\x2f\x02\x85\x25\x98\xd3\x5a\xdb\xb9\xc7\xca\x71\xc9\x82\x49\x17\x43\x32\x31\x93\x34\x5d\x4b\x39\x39\xa2\x30\x49\xad\x1d\x70\x09\x9f\x9d\x3c\x45\xa4\xde\xe7\xca\xe5\xca\x0e\x88\xa8\x10\x70\x9a\x71\xf8\x64\x76\x3a\x6b\x93\x47\x63\xda\x6c\x27\xc2\xd8\x03\x72\xd7\x88\x0f\xaa\x5f\x45\x7d\x27\xef\x38\x2a\x65\x70\x94\x7c\x19\xb6\x0a\x72\x90\x47\xf9\x9f\x3a\xff\xb2\x1a\xc0\x0a\xb3\x83\x43\x19\x24\x3a\x03\x72\x79\x85\x51\xb5\xc8\x66\x71\x48\x86\x3a\x02\xb7\x22\xff\xe4\x75\xc3\x6a\x72\x5a\x0b\xf7\xe7\xe8\x5f\x8f\x6e\x7d\xf1\x7e\x80\x95\x18\xeb\x88\xbe\x3b\xfc\xbf\xd2\x60\xa7\x39\x32\x70\x4a\x0a\xfa\x20\x61\x7c\x19\x30\xd5\xed\xcd\x54\xfc\x86\x7e\x1b\xf6\xb7\x0b\xb0\xec\x4f\xdf\x9f\x7e\x74\xe5\xc1\xb5\xeb\xa7\x1b\x5a\x59\xb0\x8d\x35\x76\xed\x30\xc0\x1d\x69\xf8\x34\x8c\x57\xc2\x77\x4b\x8d\x17\x9c\x63\x31\xde\xe7\x08\x92\xdc\x98\x08\x83\x92\x82\xd5\xd0\x69\x3d\xe8\x5e\xfc\xba\x77\xe7\x4a\xd6\xf9\x50\x33\xf8\x1d\x09\x54\x88\x47\x53\x72\x72\x8e\x83\x5e\xd3\xb2\xca\x89\x3a\x95\x2b\x5a\x6e\x51\xae\x5e\x76\x16\x43\xae\x91\x68\xa4\xbb\x2a\xe6\x28\xe4\x4b\xc9\x11\x9b\xde\xde\xcc\x77\x04\x83\x1e\x96\x15\x39\xa4\xbc\x81\x4c\xda\x20\xee\x3c\xbf\x02\x35\x6a\x29\x2b\xba\xf0\x01\x34\xaa\x58\x8b\x4c\x7b\xd6\x71\xeb\x18\x66\x00\x6d\xe1\x29\x37\x87\x8d\x30\xf7\x86\x4d\x71\x5a\x9a\x69\x9a\x96\x8f\x34\x6d\xde\x92\xe7\xd3\xfa\x10\x31\x6d\x41\x30\xc1\xe6\x7b\x83\xb2\xab\x06\xdb\x7c\xf9\xd7\x7e\xcd\xf0\x49\xc5\xb0\xd9\x4e\x06\x0c\x21\x2a\x2c\xde\x58\xba\x0d\x47\x98\x4f\x34\x83\x1c\x8e\xfe\x70\x17\x6e\x9d\x7f\xe0\x48\xd7\x7c\x7c\xe1\xee\xc9\x86\xf8\x2f\x62\x0f\xb8\x0b\xa0\x55\xdb\x9d\xf6\xea\x8b\x27\x6b\xcc\xde\x0e\xd0\x90\xc2\x30\x3f\x89\xb8\x2d\x56\x96\xa7\xca\x5c\x05\xb2\xb8\xf7\xe2\x2c\x6f\xf1\x1f\xef\x46\x12\x9f\xb9\xfb\x3f\x78\x58\x52\x31\x53\xc0\x48\x08\x34\x7e\xfd\xe3\xa0\xba\x77\x32\x44\x37\x3d\xea\x7a\x64\x66\x09\x9e\xf0\xb2\xea\x88\xbc\xae\xb5\x37\xf1\xa9\x0c\xf9\xdb\xf3\xd7\x0a\x30\xea\x55\xea\x1b\xa6\xc5\xd7\x89\x4c\x37\x1d\xf7\xcc\xa8\x54\x0a\xc8\xf5\xb2\x1d\x0e\x32\xe1\xf9\xce\xfe\x97\xdf\xec\x7d\xfb\x55\xa1\x6e\x42\x6b\x48\x33\x06\x09\x0a\x92\x7e\x06\xc3\xa5\x15\x76\xe2\x31\xc3\x95\x2e\x68\xa0\x26\x7a\x77\x56\xf7\x9f\xbf\x1b\xc9\xfc\xe5\xfe\xbd\xdb\x81\xe1\x9d\xbf\xd6\x84\xa3\x51\xd3\xcc\x1c\x0e\xfb\x7e\x1a\xee\x49\xee\xd1\x22\xb5\xf3\x14\xcf\x7e\x6a\xc4\x6c\x4a\x5d\x5d\x91\x27\xe1\xbe\xab\xc8\x9c\x39\x11\xa8\xa1\x83\x98\x45\x58\x6f\x9e\x45\x1d\x6b\xe3\x81\x2c\x6d\xb8\x2c\x2f\x35\x80\xb0\x93\x27\xcb\x23\x7e\x0c\x7f\xca\x96\xa1\x8d\x54\xa1\x6a\x85\xe5\x28\xd5\x61\x67\x4e\x80\x36\x00\xde\x1c\x04\x8a\xf8\x19\x5e\x0c\xaf\xff\x00\xde\xcb\x1d\x29\x02\x6b\x3b\x3a\x6f\x72\x9a\x54\xac\xcf\x92\x30\x07\x07\x73\xa3\xfe\x09\x61\x33\x46\x50\x12\x1e\x84\x97\xb4\x62\xfd\x65\x16\x7e\x54\x9c\x37\x1b\x9c\x66\x4a\x80\x1f\x42\xe4\x8c\xef\xe4\x47\xcc\xde\x4e\x83\xcb\x8e\x30\x4b\x09\xbb\xe3\x02\x1a\x7d\xa9\x21\x40\x1a\xfd\x6a\x8e\xe7\xc3\x66\x1c\x46\x60\x2a\x15\xfb\x50\x50\x43\x4b\xfb\xf1\xfd\x3b\xfb\x0f\x9e\xf5\x51\x2f\xa0\x55\x89\xd0\x56\x7e\x27\x94\x63\x3b\xcb\xe4\x8c\xe3\xb3\x63\xd2\xa9\xd7\xa9\x5d\xa5\xd5\xff\xbb\xb0\x4b\x2a\x4b\x3b\xe0\x5d\x7d\xe7\x41\xf7\xf3\x07\x31\xb6\x67\xb5\x9f\x35\x27\x8e\x9c\xa6\x34\xb8\x6d\x84\x1b\x27\x78\x5f\x29\x18\x0e\x07\x82\x0e\x84\xa0\x4e\x73\x24\x1d\x1c\x59\x9d\xa4\x6f\x9e\x10\xbd\x98\x1e\xaa\xa7\x05\x10\xda\x6f\x22\x23\x96\xc6\xbb\x09\xc6\x55\x7b\x92\xf3\x57\x8e\xbb\xce\x88\x6a\x88\xfa\x7f\xd9\xca\x50\xc4\x5b\x8b\xeb\x47\xde\x79\x12\xdf\x54\x8b\x8e\x66\x5c\x40\xdf\x03\x37\x48\x20\x3b\x44\x7d\x2e\x81\xcd\xef\xd7\xe0\x60\x81\xab\x23\x90\xc4\x98\x8e\x0d\xef\x32\xf0\x15\x04\x18\x8a\x24\xae\xa1\x80\x3d\x12\x7f\x6e\x7a\x01\x33\x9f\x69\x07\x87\xfc\xa2\xe3\x02\x0b\x48\xc0\x54\xad\x7e\xb3\x09\xef\x6a\x82\xb4\x6f\xa7\x73\xe1\x5d\xf4\xc4\x8b\x64\x2f\x19\xfe\x01\xbf\x6b\xad\x47\x13\xc1\x30\x8e\xf0\x01\x84\x28\x25\xd8\x2b\x11\x31\x21\x24\xfe\xde\x45\x4c\x23\x56\xdf\xe7\x8f\x52\x49\xb2\x81\xe4\xfd\x4e\x2c\x65\x4c\xbd\xf5\xc0\x3d\x1c\x8f\x8e\x1f\xf7\x5e\x2e\xf3\xc6\xca\x57\xef\x9f\xef\x45\x9c\x75\x6d\xc1\xed\x84\x7b\x33\xfb\xc8\x8d\xcb\xef\xa4\x54\x2d\xb2\x62\x40\x6c\x2f\x6f\xae\x75\xb7\xd6\xb2\x8e\x68\x94\xd9\x68\x00\x6e\x9f\xd3\xf4\xcf\xd9\x3c\xd6\x62\x58\xca\x48\x81\x08\x8a\x19\x44\x33\xa1\x32\x51\xbf\x6b\xce\xd5\x7c\xd2\x70\x5c\xbf\x0c\x21\x63\xd4\xa8\x82\x71\x6f\xb8\x55\x52\x71\xaa\xc2\x27\xcc\x7e\x30\x04\x13\x9a\xfd\xf5\xff\x4c\x8c\x4f\x4e\xa7\xfa\x83\xd5\xef\xfc\xbc\x59\xbc\x4d\xed\xe7\x30\x0f\xee\x42\xbc\xe6\x17\x9d\x0b\x97\x99\xd6\x52\xf0\x85\x72\x6f\x6e\xed\xf6\x1e\x7d\x06\x5d\xf2\x96\x44\x63\xb8\xc5\x1b\x46\xa4\xbd\xf2\x21\xe0\x60\xac\x77\x5a\x5f\x49\xac\xe2\xdc\x66\x08\xb8\xc9\x85\x84\xf6\x66\xe7\xc2\x75\x8c\x76\x14\x61\x8f\x6f\x87\xab\xa2\x75\x4b\x6c\x29\x5b\x9d\xd5\x16\xb6\x3e\xe6\x1b\x94\x09\x71\x73\x71\x91\xe3\xb8\x35\x6d\xaf\x09\x01\xb4\xb3\x4d\x2b\x18\x38\xd6\xcd\xcc\xf6\x18\xc1\xe0\x58\xf1\x74\x56\x77\x5c\x2a\xfb\xff\x94\xc9\x8a\x38\x6b\x76\xbb\xf7\xbf\xee\xdd\x08\x6c\xa8\x5b\x9d\xd6\x27\xb1\x4e\xde\xff\x12\x69\xe6\xae\xc3\xe3\x70\xb4\x42\x4d\x93\x34\xed\xa1\x55\x8c\x9d\xc0\x7f\x2b\x83\x2d\x84\x8a\x91\xb0\xdc\x58\x49\x75\x25\x3f\xdb\x34\x1d\x69\xbd\xe7\xb9\xe5\xb0\xbe\x68\x36\x44\x08\xf5\x10\x06\x48\x39\xc4\x6e\x5a\x16\x26\x75\xf0\x0f\x44\x80\x05\xc2\x40\xf2\x9f\xab\x3c\x66\x88\x83\x28\x87\x45\xb3\x33\x74\x1d\x0e\xca\x6d\x39\x5e\x29\x95\xf3\x57\xac\x6e\xa9\x78\x6b\x1b\x56\xf1\x53\xf1\xec\x9e\x95\x73\x3d\xe5\x1b\xbe\x0e\x39\xe9\xe2\x9a\xba\x5c\xd3\x13\x93\xc8\xd7\x60\x46\xc0\xa5\x32\xf2\x43\x85\x40\xa7\x01\x0f\x08\xc2\x05\x17\x3c\x88\x19\x8d\x06\x3b\x94\x11\x15\xcb\x85\xa8\xb4\x3a\x31\xe6\x0c\xd3\x2e\x93\xe9\x9a\xe9\x91\xba\xb1\x44\x30\xe5\xa2\xea\x2c\xda\x6c\x5f\x2e\x78\x6b\x80\xaa\x73\xe3\x75\xb6\xee\xf4\x1e\xdd\xcb\x3c\x26\x9c\x46\xe3\x67\xbb\x72\xa4\x2e\xc8\xb3\x72\xc0\xae\x2a\xf1\x20\xf0\xaa\xfa\xb8\x0f\x0d\x14\x8c\x71\x56\x1c\xeb\xd3\xc3\x53\xbf\x39\x3f\x56\x2c\xdf\x90\x13\xd2\x17\x2c\x33\xa1\xa6\x4b\x0e\xf7\x75\x15\x57\x2f\x16\x27\x04\x13\x3b\x05\xbd\x3f\x9a\xeb\xa5\xa6\x47\xdd\x92\x08\x0f\x2f\x09\xd4\x44\xb6\x7d\xd4\x8d\x79\x74\x5c\x06\x5f\x0b\xcf\xb0\x47\x8c\x05\xc3\xb4\xc0\x72\xf2\x1d\x32\x72\x02\x8c\xd3\x1c\xfa\x11\x42\xd2\x02\xc8\xa3\x6f\x06\xed\x4d\x26\x51\x7a\x8e\x5b\x17\x07\x12\x98\x85\xcc\xc2\xc5\x68\xcb\x6d\xb1\x21\x6d\x63\x88\x56\xce\xa6\x45\x4f\x38\xf5\xca\x41\x5b\x0a\x16\x23\xdb\x53\x61\xc5\x9b\x9e\x80\xf6\xae\x86\xf8\xa9\x35\xc3\x9e\x83\x8e\xf0\x59\x8f\x19\xb3\xb3\xb4\xa2\x8c\x7b\x1c\x50\xa8\x46\x51\xe4\x4a\x77\x1d\x8b\x72\x94\x3a\x76\xb0\xff\xda\xb4\x0d\x57\x84\x06\x7b\xd4\x2f\x39\xee\x5c\x89\xfd\xe6\x10\x78\x13\x53\x7f\x02\x3b\x00\xfe\xa8\xd8\xee\x05\x7a\x8c\x80\xe2\x1e\xa2\x81\x40\x0a\x55\xa3\x61\x2d\x61\xfe\x8f\xe9\xc1\x19\x2e\xe2\x25\xa4\x1b\xbc\x47\x9a\xb6\x6f\x02\x48\xda\x12\x04\x09\xf3\xbe\xd1\x45\xf9\x05\xe6\x8c\xe0\x35\xd8\xe5\x37\x0e\x76\xce\xac\xbf\x6c\x7d\x09\x43\x0c\xc7\x4e\x7b\xad\x77\xeb\x5e\xf7\xd1\x07\x61\x42\x94\xd2\xcc\x5c\x97\x40\x81\x79\x59\x98\x24\x5b\x9d\xd6\x6e\x44\x66\xa6\x27\xea\xa7\x8e\x14\x9f\xd9\xaf\xe1\xbd\x0d\x8d\xf5\xf6\x97\x22\xf0\x71\xeb\xc5\xf3\x8f\xf6\x1f\xfd\x25\x9a\x4d\xf6\x45\x67\xb5\x05\x4d\x80\x9e\x7d\xd4\x69\x3f\x82\x6e\x7d\x26\x01\x9e\x3f\x94\x23\x2a\xe5\x76\x45\x8c\xea\xd6\xba\x30\xf5\xaf\x0b\xc3\x23\xc1\xef\xd0\xde\xdc\xbb\xf7\x64\xff\xe1\xb5\x54\xc3\x9b\x20\xc0\xe2\x8b\xa7\x9f\x77\xef\xdf\x8c\xc5\x71\x02\xba\x00\x3a\x82\x76\x31\x4b\x88\x27\xcf\x6b\x25\x6a\x46\xf8\x8c\xc3\xcf\x4c\x11\x94\x38\x14\xda\xf1\xb3\xc8\xe1\x26\x99\xd7\xb0\xa0\xd1\x7f\x85\xc5\xf2\x8c\x43\xe4\x61\x68\x3d\x2d\xa0\x51\xe2\x83\x08\xe7\x65\x4b\xa1\x43\xdc\xc4\x8f\x86\x3d\xa6\x89\xcf\x77\x13\x08\xc1\x03\xd8\x31\x3d\x31\x16\x6d\xf6\x40\x78\x01\x52\x6f\xbc\xfc\xe8\xe3\x30\x5c\xa4\x7d\xaf\xd3\x7a\x48\x34\xfe\x65\x20\x81\xfb\xee\x36\xa0\x23\x44\x0f\x8b\x84\x8e\x85\xce\x05\xd1\xcc\x91\x13\x81\x84\x88\x71\x02\x4d\xa6\xb6\xc7\xda\x07\x2b\x30\x12\x32\x59\xe1\x9b\x24\xec\xed\x14\xf6\xf6\xec\x86\xef\xdd\x7b\xd2\xdd\xf9\xa4\xd3\xda\x8e\x2e\x96\x1d\xb1\xfd\xad\x47\xf8\x41\x34\xc7\xa4\x56\xed\x3e\x7b\x81\xa3\xfd\xc7\x6e\xae\x86\x2d\x00\xbe\x98\x81\xf0\x0a\xba\x24\x67\x4f\x20\x49\x30\xbb\xeb\x87\x40\x5e\xbd\xc7\x97\x3b\xad\xe7\x11\x33\xe3\xf9\x47\xfb\x0f\x9e\x09\x2f\x9a\xae\xf3\x92\xad\xed\xaf\xdb\x22\x0b\xe4\x27\x3c\x5b\xfa\x6c\x67\xb8\x0f\x9e\x6d\x54\x0d\x9f\x06\x5c\x65\xd1\x86\x37\xe1\x4b\xcc\x0b\xce\x26\x3d\x0c\xb7\x45\xee\xca\x49\x61\x41\xec\x7d\xf8\x6d\xef\xe6\x57\x69\x2d\xd1\x68\x92\xbb\x69\xe3\xd3\xc3\xa7\xce\x9f\x1e\x3d\x3d\x3e\xf9\xdb\x62\xf6\x91\x31\x87\xf7\x54\xf6\x0f\x4d\x42\xca\xf3\x4e\xfb\x2b\xf9\x77\x0a\x61\xa6\x05\xa1\xef\x52\xa8\x8a\xe5\xcc\x15\x0c\x74\x0b\x63\x57\xd8\x81\x0d\x51\x38\xcf\xbf\xef\x7e\xf5\x43\xb1\xa8\xf7\x69\x39\x1c\x5f\xbe\xdd\x29\x2f\x2d\x0a\x0e\x38\xc5\xd9\x13\x78\xb1\x32\xaa\x4f\xbb\xbb\xaa\xef\x4d\xba\x87\x98\xfe\x55\xf1\xe6\x49\xcd\xf0\xc8\x0c\xa5\x36\xf1\x9a\x33\x75\xd3\x07\xcd\x02\x67\x9f\xb5\x04\x23\x84\xc9\xf0\xcc\x0e\x3b\x67\x43\x21\xdb\xa8\xd3\x63\x84\xe0\xb0\x7b\xf3\x42\x79\xf8\xce\xac\xb2\x6f\x82\xef\xa6\xe8\x7f\x35\xa9\x5d\xa1\x63\xc7\x95\x93\x48\xa3\x1d\xb3\x03\xa9\xeb\x81\x49\xda\xb4\x83\x8b\x5c\x41\x53\x9f\xba\x75\xd3\x66\xab\xd6\x08\xcc\x79\xc4\xad\x9b\xed\x07\xb7\x2e\x14\x27\xc7\x53\xcb\xc8\x4a\x41\x56\xb3\xe1\x4b\xe0\xe4\xa6\x5d\xa5\x6f\x82\x19\x8d\xbe\x1a\xdf\x44\x95\x6c\xba\x18\x06\x50\x85\xce\x9b\x40\x5a\x08\xb6\x6c\xd4\x29\x4a\xd1\xbe\x21\x66\x5c\x1a\x14\x94\xa4\x71\xd2\x84\x6f\xef\x75\x9f\xdd\xe8\xb4\xb6\xf6\xfe\xdc\x7e\xf1\xe4\x12\x9b\x48\xab\xad\xee\xc6\x7a\xa7\xf5\x41\xf0\x15\x33\x5c\xe5\x40\xb2\xf8\xed\x64\x07\xb6\x35\x70\x82\xa7\xd5\x98\xfc\xb0\xbb\x7e\x33\x6b\xf1\xf2\xbe\x0f\x86\x30\x65\x96\xfd\xa8\x71\x3a\x0a\x35\x6b\x03\x00\x4b\xb1\xc2\x67\x27\x4f\x05\x81\xed\x79\x08\x6f\xf5\x92\x98\x1d\x5f\xa3\x32\xab\xff\xe0\x62\x86\x88\x39\x2b\x4b\xc5\x77\x64\xe2\xd8\x96\x69\x17\x0b\x6b\x99\x0e\xa9\x4f\xc4\x62\xe2\xcf\x3e\xc7\x47\x87\xc9\x8c\x51\x99\xa7\x76\x75\x88\x2c\xd6\xcc\x4a\x2d\x4c\xd8\xf4\x9a\x8d\x86\x03\x6e\xcd\x6c\x80\x8e\xc2\xf5\x9a\x74\xce\x79\xf5\x35\x07\x2b\xdc\x56\x13\x17\xaa\x05\x64\x19\x1f\xea\x92\x5c\xe7\xfe\xaa\x15\x85\x43\x8c\x94\xc2\x22\x30\x9f\xa0\xcf\x62\x41\x1e\x8b\xd3\x4f\xd5\xa9\x2e\x89\xbe\xfa\x21\x55\xd2\x82\x61\x35\x8b\x8b\x8a\x90\x32\xf5\xa5\x0c\xbc\xd3\x37\x0c\xbf\xd6\x5f\xc9\xe5\xe5\xf2\x04\xac\xe2\x51\x18\x51\xd6\x94\xd4\x28\x11\xd2\xb4\xab\xd4\x95\x57\x7d\x18\x2b\xa1\x71\xf9\x86\x0f\xea\x9a\x9a\x82\x70\x12\x91\xc7\xf2\x95\xb8\xfc\x3c\x55\x44\x3b\xec\xbc\x78\xbc\xa6\x0a\x3f\xe9\xac\xb6\x95\x56\x4f\x8d\x42\x90\x5a\x5f\x1d\x8d\x67\x78\xca\x21\xdd\x17\x4a\x08\x93\x08\x99\xc2\x18\xb3\x92\x67\x7f\x85\x9f\x5b\x4b\x85\xab\x61\x46\xc6\xc0\x5b\x0e\x13\x12\xf2\x48\xf7\x2d\x02\x68\x09\x63\xa7\x5b\xdf\xfd\xc7\x04\x3a\xee\x9c\x61\x9b\xbf\x1f\xb0\x65\x31\x16\xe6\x81\xe5\xf4\x05\x50\x11\x17\xd2\xb0\x8c\xe2\x3b\x25\x08\x00\xd3\xa6\xaf\x46\x38\x56\x75\xf0\xb9\xc2\x84\x0c\x38\x57\x98\x88\xc1\x87\x96\x49\x39\x88\xa1\x95\xe5\xf4\x3d\xb4\xb2\x90\xbe\x86\x36\x22\x80\xe3\x43\xf5\x27\x64\x80\xf9\xe1\x56\x01\x34\x96\x1b\x46\xbe\x6c\x8c\xe0\x55\x0d\x9c\xf9\xb4\x4a\xaa\x4d\x37\xca\x3d\x6f\x34\x7d\xa7\x54\xa5\x3e\xd5\xc2\xd0\x25\xbd\x24\xad\x9d\xfd\xb7\x1f\x76\xd7\x6e\xf4\xee\xdf\xe9\xbe\xfd\xa4\x77\xbb\x0d\x57\xdc\xab\x10\x3c\xb3\x96\xfa\xfb\xde\xfd\x3b\xbd\x4f\x9e\x76\x5a\x3b\x2f\xef\x5e\xea\x3e\xb9\xae\x6b\x4d\x38\xc3\xfa\xe8\x0a\x69\x7a\x62\x96\x69\x9f\x5d\x2a\xc9\x81\xbc\x8f\xc1\x44\x68\x32\x37\xd4\x12\x1a\x86\xe7\x2d\x3a\x6e\x31\x80\x24\x2c\x18\x9e\x5e\xe1\x58\x33\xd3\xa2\xb8\x28\x3c\xed\xfa\xea\x44\xe9\x7e\xd3\xa7\x00\xc7\xc3\xc8\x67\x88\x65\xf4\xa8\xef\x91\x86\x6b\x3a\xae\xe9\x17\x3f\x70\xfb\x1b\x44\x0e\xd4\x08\xdc\x64\xb4\x6e\xd8\xbe\x09\xc7\x3d\x31\x6d\x08\xa7\x3f\x46\xc0\x2b\x02\x71\x72\x00\x5a\x68\x90\xaa\xeb\x34\x2c\xea\x97\x89\x88\x8d\xe5\x1f\x10\xc7\xe5\xb9\x02\x41\x80\xab\xf8\xc6\x77\xd8\xf6\x5e\xfc\xca\xe2\x46\x48\x47\x04\x82\x8e\x59\x85\x5b\x11\x90\xf3\x82\x0f\x3d\x78\x3a\x45\x83\x5d\xc9\xc4\x1b\x23\x19\x89\xd8\x81\xf8\xfc\x09\x44\xe1\x11\x62\x05\xf0\x8c\xb7\x5f\x3c\x5e\xdd\x7f\xfb\x5b\xe1\x2a\x88\xe0\xff\xa8\x9f\xbf\xe4\x06\x24\x88\x3d\x4c\x9b\x34\x3d\x5a\xe6\xa1\x6d\x23\xfc\x3d\x5b\xb2\x14\xd1\x0b\x53\xb2\xc9\x6b\xe3\x53\xd3\xf0\x6e\xef\xb8\xe0\x32\x2e\x95\x5c\xc3\xae\x3a\xf5\x12\x0a\xf7\x1d\x32\x47\x6d\xea\x86\xae\x1d\x37\xe0\xca\x81\x60\x9c\x46\xd3\xab\xf1\x30\x9c\xcc\x7e\x41\x35\xd1\x2c\x16\xde\xde\x38\xa1\x07\x58\xba\x92\xa3\x59\x56\x31\xfe\x76\x26\x12\x2e\xba\x1b\xd7\x3a\xed\x4d\xe1\x5c\xbf\xcd\x5f\x29\x57\x5b\x21\x08\x4b\xac\x55\x31\x41\x81\x5f\x87\x33\x5c\xb4\x37\xf7\xde\xff\x04\x02\x8f\xd1\x08\x5f\xeb\xb4\xaf\x74\x56\x5b\xdd\x4b\xd7\xba\x4f\xbe\x00\x7b\x1e\x59\x58\x3f\x97\xa3\xa2\xd5\xc3\x94\x2b\x1d\x3b\x6f\xf1\xfe\x76\x82\x01\x9d\x2e\x07\x61\x6f\x0c\x6c\x19\x27\x92\x33\x0f\x44\x0d\x0c\xda\x1b\x48\xd4\x3c\x2d\xbe\x9d\x0e\x6c\x79\xc5\x05\x0c\xd6\x1b\x90\x85\x0c\xa7\x44\xda\x25\x06\xe3\x49\x9a\x5e\x1f\xf2\x35\x09\x41\x19\xa5\xfa\x6c\x50\x98\x69\xda\x67\xd9\xbe\x4c\x0d\xcc\x36\xe8\x4b\xe3\x00\x4e\x49\x76\xb0\x92\x8a\xd3\xb4\xf0\x20\x9a\x61\xa7\xa8\x51\xa9\x69\xa2\x71\xd2\x21\x9f\x14\x8f\xf2\xdb\xdd\xcb\x5f\xbd\x6c\xbd\x1f\x43\x72\xce\x77\xe0\xf8\x86\x37\x7f\xc8\x23\x4d\xdb\xfc\xaf\x26\x9b\x26\xe8\xa4\x26\x45\xa3\xf0\x98\x24\x67\x9e\x16\x37\x4f\x91\x3b\xdb\x32\x66\xa8\x0a\xfe\x2a\xab\x6c\xdf\x77\x0c\x4d\x46\xa2\xbe\x50\x3f\x93\xc2\xa5\x1c\x04\x3b\xf0\xe4\xc6\xc2\x61\xd9\x51\xaf\x36\x79\x92\x5c\xd8\xe2\x0d\x25\x0d\x54\x36\x27\xd2\x72\xa8\x96\xef\x38\xa4\xce\x2c\x23\xa7\x81\xe1\x63\xbe\x23\xb8\x6b\x87\x48\xc3\xa2\x86\xc7\xf3\x95\x4d\x74\x3f\xb3\x1e\x50\xa9\x2a\x9e\x38\xf1\xd9\xff\x21\xe4\x68\x4a\xe1\x60\xf7\x21\x72\xa4\xf5\x4e\x70\xca\x76\x37\xae\x75\xaf\xc0\x69\x7f\xf1\x73\xe0\x99\xcd\x1f\x2f\x04\xfa\xb3\x8e\xb3\x39\x0c\x34\x4f\x9f\x86\xa8\x38\x6e\xa7\x3a\x36\xbc\x99\x4f\xd2\x86\x03\xc6\xca\xa1\x63\x44\xa1\x78\xf4\x67\xa4\xd3\xda\xe2\x58\xe0\x61\x22\x0d\x2c\xa7\xd6\x03\x88\x9b\x14\x00\xcf\xad\xf5\xbd\xdb\x4f\xf6\xde\xff\x44\x7e\xcf\x3c\x46\x0e\x56\x63\xc4\x83\x76\xdc\x95\x95\x73\xf6\xf2\x72\x79\xda\x6c\x28\x9f\x2a\x0f\xb4\x15\xa9\xf5\xaa\x5a\xe6\xe1\x5c\xaa\x38\xf5\x3a\x10\x95\x35\x3d\x5a\x15\xce\x78\xaf\x1c\xd0\xa0\x00\x83\x42\xc9\x38\x84\x24\x75\x94\x18\x96\x35\x84\xb6\x6b\x35\xc4\x88\x54\x9a\xe4\xaa\xda\xc3\x87\x8e\x8c\x15\x14\x86\xd4\x67\x8b\x62\x23\x65\xda\x64\xf4\x3f\x26\x46\x27\xc7\x4e\x8f\x9e\x99\x1e\x3e\x05\x28\x4e\x68\x2c\x43\x74\x3a\xda\xe1\x4c\x7d\xa7\xe9\xb3\xdd\xdd\x2c\x7c\x3a\x4a\xf5\xf1\xe8\x45\x8f\x8c\x9c\x80\x0d\x7f\x81\xba\x1e\xcf\x73\x3d\x6d\xda\x66\xbd\x59\x7f\x1d\x3f\x59\x59\x29\x93\xdf\x3a\x4d\x57\x44\xbf\x99\xf2\x8b\x60\xf8\x9b\x03\xd0\x84\x2d\x77\x76\xfb\x61\x33\x74\x78\x62\x2c\x52\x2d\xad\x86\xc7\x1b\xbb\xd3\xba\xbe\x47\x4c\x5f\x20\x65\x53\xdb\x98\xb1\x34\x67\x5c\x12\x39\x1e\x42\x4b\xe4\xda\x88\x14\xec\xb8\x25\x52\x15\x13\x67\xa3\x26\x56\x2d\x12\x95\x13\xc6\xf4\xf1\xbc\xc6\xee\xdd\xaf\xbb\xef\x5e\x8d\x62\xc5\x66\x9c\x98\x21\x3f\x1f\xbb\x00\xd7\x0c\x17\x18\x0b\x5c\xc7\xf3\x20\xc7\xc1\x71\xe7\xbc\xf2\x39\xfb\x38\xb5\x28\xb4\xc1\xf4\xd1\xd2\x72\x69\xdd\x59\x80\xb9\x2e\x93\x14\xc3\xd5\xc5\x1b\x82\xd9\x04\x3f\x83\x18\x71\xb6\x0f\x1b\x8d\x86\x78\x55\x0f\x6b\x6c\xda\x60\x36\x40\x78\xc1\x39\x7b\x18\x83\x9b\x88\x88\x72\x22\x8b\x86\xcd\xf3\x54\x2c\xca\x9f\xfe\xd3\x71\xb1\xfe\x55\xb5\x03\x26\x69\x02\x65\xd6\x6f\xe0\x0b\xc4\xd4\xfc\x2d\x81\x65\x95\x7e\xd7\xc3\xa0\xe1\xf6\xa6\xc0\xf3\x14\x79\x2e\xab\x2d\x64\x80\x13\x9f\xc8\x82\x91\x88\x70\xfd\xe5\xed\xfb\xdd\x77\x9e\x4a\xb1\xc2\x3b\x98\x2c\x96\xa2\x5a\x7b\xb3\xb7\xde\xea\xb4\xee\x4b\xa7\x22\x9b\x3f\x51\x63\xe8\x21\x9c\x24\x0f\x65\x24\x60\x76\x19\xd5\x03\x78\x09\xbd\xc5\x55\xb0\xb5\xf6\xaf\xca\x0d\xdd\x04\xce\x86\x59\xc7\x85\xd7\xd8\x45\xc3\xad\xc2\x22\x6a\x18\xbe\x39\x63\x5a\xc5\xfd\x32\xe0\x57\x41\x63\xbd\xea\x50\xcf\x3e\x14\x3e\xe7\x8a\x1c\x62\x66\x30\xcc\xd3\x25\xe5\x1e\x99\xc6\xf5\xbf\x1b\xe0\x17\xf0\x0c\xdc\xf6\x26\xfc\x20\x48\xfd\xbb\x95\xc7\x5e\x60\xca\x81\x49\x2d\xbc\x12\x35\x03\xce\x32\x74\xe3\x04\x21\x43\x60\xac\x67\x69\x17\x21\xdd\x0e\xdf\xd6\x74\x80\x31\xeb\x51\x20\x88\x2b\xc9\xc9\xa7\x51\x1c\x16\x18\x66\x13\xf1\xa7\x31\x9e\xdd\xe5\x1b\xae\x5f\x26\xca\xe5\x84\xc8\x2a\x72\xa8\xc6\xbf\xea\x5b\x16\xf0\xae\xc4\x6d\xb6\xdd\x78\x2c\x7c\x90\x7e\x9d\x93\x68\x4a\x4c\x46\x45\x2b\x31\x6f\x15\x23\xd6\xbc\x25\xbb\x82\x11\xf0\xdc\xac\x50\xe5\x93\xbc\xfc\xe8\xe3\xee\xc6\x7a\xef\xce\x27\xf8\x6b\x41\x7f\xb2\x93\x4c\x2d\x55\xd5\xda\xe0\x91\x89\x46\xb5\x5a\x42\x07\x67\x89\x1d\x06\x9c\x11\x69\xce\xf4\x7c\xfe\x22\xab\x09\xeb\x48\x89\x43\x7c\x08\xbb\xf9\xe3\xf0\x39\xb5\xbd\xb9\x77\xfb\xe9\xcb\xf5\x3f\xc9\x71\x88\x29\xb5\xe6\x8e\x3b\x74\x7c\xc3\x22\xa7\x69\xdd\x71\x55\x6b\xb4\xbb\x71\x79\xff\xc1\x65\x60\xe7\xb8\x87\x4a\xe8\x44\x19\x75\xa7\x69\x03\x19\x50\x1d\x84\x92\xc3\xb4\x3c\x57\x26\x47\x8f\xfc\xea\x9f\x4e\x0f\x91\xa3\x27\x87\xc8\xd1\x23\x27\x55\x29\xe7\xc9\xaa\x5e\xbe\x7d\x9d\x1c\x7e\xf1\xc3\xda\x31\x94\xd0\x59\x6d\x1d\x3d\xc9\xfe\x87\xc9\x28\xa2\x85\xa0\x90\xaa\x18\x36\x7a\x64\x8b\xa8\x75\x94\x00\x92\x79\x6c\xb9\xae\x77\xaf\xdd\x85\xed\x9f\x67\x10\x1d\x98\xf2\x76\xb3\x3e\x43\x5d\x1e\x1e\x95\x78\xb9\xf6\xca\xa4\x74\x94\xcd\x22\x97\x7a\x00\xac\x69\xb0\x33\xd1\x32\xeb\x26\xf0\x06\x41\xc3\x33\x13\xa7\x73\x05\x9b\xb5\x76\xb0\x49\xbd\x1b\x5f\xb1\x2a\x3b\xad\x5d\xd8\x7f\xb6\xbb\x97\xbf\x7b\x79\x7b\x03\x0c\x06\x34\x21\x78\x20\xf4\xfe\xa7\x0f\x72\x38\x0e\x0f\xaa\x89\xe4\xf0\x71\x4c\x45\x3d\x16\x7e\xa7\x86\x18\xfc\x11\xdb\x4d\x0e\xc7\x52\x59\x8f\x11\x51\xf2\x61\xa7\x75\x2b\xe7\xd0\xbb\xd9\x44\xca\xb2\xa2\xf9\x84\xc6\x1d\x60\x79\x50\xe6\x33\xfb\x48\x51\xb5\xcb\x96\x5b\x9e\xbd\x57\xde\x71\xdb\x9b\xb0\xd3\xfd\x51\xac\x31\xed\xde\x75\x76\x78\x38\xb4\xbc\xeb\xa6\xe7\x31\x5b\x73\xd6\x75\xea\x9c\x2d\x5a\xf7\xb2\xc5\xca\x2a\x2c\xe6\x75\x4e\xe8\x1c\x81\xf5\xd8\xce\xc5\x45\x73\x76\xf2\x54\x21\x43\x87\x47\xeb\xe1\xfb\x6c\x10\x68\x1d\x24\x37\x84\x89\x6c\x82\x06\xdb\xf3\x5d\x6a\xd4\xd5\x94\x3b\x9a\x54\x84\x44\xd4\x27\x8f\xce\xe6\xdb\x9a\x38\x5f\x2e\xdc\xed\x5e\xbc\x4c\x58\x43\xb2\x35\x16\x03\x2b\x69\x8d\xd3\x36\xd0\x77\xd6\x71\x99\x31\x48\xab\x65\x32\x55\xa9\xd1\x3a\x0d\x09\xbe\x99\x24\x01\x24\x01\x59\x5b\xb9\xdb\x14\xcc\xfe\xe0\x98\xde\x7f\x7a\xef\xe5\x6a\x8b\x2b\x1e\x22\x32\x20\x3a\x3c\xc7\x4b\x7b\x84\xad\x63\xc7\x25\x54\x47\x60\xe3\x56\xe2\x3a\x28\x9a\x3f\x35\x7c\x72\x54\x95\xe2\x8b\x07\x6e\xef\x9b\x1b\x8a\xcc\xde\xb3\x53\xa3\x93\x7a\xd2\x5f\x29\x8d\x35\x83\xf4\x37\x94\xa5\x4c\x38\x4e\x13\xa6\xd1\x4c\xc9\x7b\x2b\xc9\x51\x94\xb6\x45\xd2\xae\x81\xf4\x6d\x69\xe1\xba\x65\xf0\x9d\x20\xe9\x97\x26\x4d\x41\x87\x63\xb4\x1d\xe5\x63\x8b\xfa\x79\xd9\x8d\x46\xae\x20\x53\x53\xcc\x90\x74\x6c\x0a\x50\x27\xc0\x9d\x86\x9b\x87\xa0\xe7\xe3\x2f\xf4\xd4\x6b\x38\xb6\xf2\x89\x00\x19\xf0\xba\xcf\xef\xec\x3d\x7a\x9f\x3f\xa8\x5d\xd8\x85\x3d\x52\x18\x8e\x12\xf5\x19\x33\xde\xae\xfd\xa9\xfb\xc3\xad\x5c\x74\x83\x92\xb2\x4d\xbf\x46\xe1\x8d\xd9\x57\x3b\x1c\x91\xa5\x2c\xd1\x2b\x59\xb2\xf1\x9e\x3c\xc4\x9f\x3f\x0f\x89\xd7\xcc\x43\x39\x29\x57\xc4\x25\x31\x5e\x2d\x7f\x1c\x95\xe4\xf5\x43\xbf\x22\xab\xe9\x43\x48\x39\x25\x23\x23\xe0\x13\xe1\xee\x9d\x32\x99\x40\xc7\xac\xe5\xcc\x11\xd3\xd6\xbf\xd8\xf2\xa2\xb0\xf7\x6d\x08\xe4\x1d\x01\xd2\x75\xf9\x3e\xe0\x60\xc6\x1b\x42\x44\x12\x0b\x3a\x02\x6e\xed\x7d\xf8\x6d\xde\xd4\xc5\x50\x7b\x67\xc6\x37\x4c\x5b\x0e\x9a\x90\xf2\x35\xe0\x47\xcb\xcb\xe5\x30\xd4\x52\xb9\x3e\xd0\x77\xd9\xbd\xbe\xbb\x7f\xe1\xfb\x78\xbc\xa6\x5c\x9c\x84\x70\xb8\x42\x75\xfe\x96\x7c\xfd\x66\xf1\xe9\xd7\x30\x5c\x2f\xde\xef\x22\x1d\x33\xf0\xb2\xa9\xe8\x28\x44\x9f\x47\x3b\x3c\x59\x9c\x99\x59\xfb\x5b\x9f\xf5\x3e\xde\x28\xa8\x9d\x4b\x7d\xd7\xa4\x0b\x34\x01\x66\x9d\x38\x46\xc9\xc9\xb3\x63\xc7\x55\x5e\x1f\x65\x35\x18\x9b\x61\x70\x94\x57\xdc\x21\x32\xb8\x41\xe4\x5b\x02\xdb\x12\xe2\x57\xf8\x28\x96\xe3\xfe\xd6\x67\xb2\x9f\x45\xaf\x08\x20\x79\x49\xa8\xb3\x31\x94\x3e\x50\xef\xd5\x80\x73\xea\xf7\x66\xd8\xf9\xd4\x5e\x8b\x14\xc6\x07\x45\x17\xe4\x40\xdc\x38\x6b\xcf\x60\xce\x7b\x2c\x82\xa0\xaf\xb1\xc9\x89\x12\x0f\x76\xd4\x37\xb2\x2d\x92\x39\x60\x1a\x25\xf1\x31\xda\x47\x93\x5c\xfe\x1a\x4d\xa9\x34\x2c\x03\xed\x8e\xa0\xb3\xf2\xf2\xb4\x0f\x7f\xc6\x3d\xc9\x3f\xd5\x5e\x11\xcc\x11\x39\x7a\x25\x89\xad\xa6\x43\x68\xfc\x09\x77\x52\x2c\x5e\x01\x67\x38\x07\x75\xd0\x65\x56\xc0\x0f\x84\x9d\x8c\xba\x66\xdd\xe8\x5e\x89\xa2\xb9\x12\x46\x5f\xb5\x7e\x15\xa6\x92\x65\xa9\x6f\x4d\x29\x72\xd7\x61\x64\x11\xb2\xed\x29\xdc\x00\x23\xf0\x62\xba\xfa\x52\x71\x91\x70\x63\x56\xd1\xdb\xfd\x3d\xa1\x26\xe9\x29\xf6\x70\x2c\x55\xc8\x4a\x8a\x11\xcc\xbd\xe7\xb3\xae\xad\x1b\x4b\xc4\xa2\x10\x54\xd9\x68\x78\xa4\x6e\x34\x1a\x48\xa4\x1d\x8b\x1a\x5c\x68\x5a\x36\x75\x99\x95\xf0\x2f\x04\x7c\x7d\x66\xd2\xff\xa1\xa6\xc7\xe4\xf1\x14\x9e\x6c\x7b\x83\xb9\x79\xdc\x89\xf8\xc5\x1b\xae\x53\xa1\xb4\xaa\x74\x86\xc7\x1b\x2c\xe3\x00\x6e\x77\xda\x97\x11\xd2\x32\x1e\x4a\x08\xe9\x35\x1f\x0b\xd8\xe2\x28\x4e\x89\x84\x2d\xb0\xff\xd6\xa5\xee\xb3\xaf\xe1\x12\x8b\xc9\xd5\xdb\xf2\x23\x0f\xb8\x1e\x3b\xad\xcb\xec\x6e\xbb\xda\x1a\x8c\xeb\x95\xdf\x2e\xda\x9b\x02\x5d\x29\xc9\x48\xf9\xb0\xd3\xfa\xf2\x17\xcc\x60\xde\xfb\xee\x0f\xe2\x81\x5d\xef\xaa\x0f\xc7\x34\x36\x74\x91\xc5\x92\x3d\x56\x7f\x9f\xab\xa7\xf0\x20\x00\xea\x48\x7c\xa2\x1c\xcc\x9a\x8a\x9d\xc6\xcb\xcb\x65\xf1\xc9\x79\xf8\x44\x8c\x09\x07\xff\x8b\x59\x29\xd0\xa7\xcd\xc0\x64\x54\xf7\x66\x53\xcd\x41\xf5\x3e\xe0\xda\xc7\x21\x00\xf3\x9e\xb2\xa9\x1a\xe7\xe9\x9b\x57\xd2\x31\x81\xa1\x32\x50\xc7\xa4\xe0\xc3\xfe\x9d\x77\xd2\xf2\x72\x59\x4e\x7e\x58\x59\xf9\x25\xfb\x29\x5b\x24\xc1\xca\xec\xb7\xb3\xf4\xb2\xff\x86\x7d\x44\xdf\x6c\xd0\x0a\x84\x88\x40\xa0\x53\xcd\xf0\x88\x53\x81\x40\xff\xea\x31\x70\x58\xf1\xc8\x22\x95\x4b\xf1\xc9\xe5\xde\x9d\x4f\x42\xc8\x58\x7d\xa4\x52\x44\xa0\x42\x21\xd8\x4e\x2d\x2b\x92\x1c\x4a\x67\x4d\x9b\x63\x6c\xf3\xc0\x17\xc3\x9d\x6b\xd6\xa9\x1a\x39\x49\x8a\x57\xe9\x3e\xbb\x01\x20\x30\x5b\x88\x1b\x2f\xa1\x39\x47\xf3\x43\x83\x4e\x0c\x36\x3d\x64\xd4\xbf\xb0\x9d\x69\xc5\x71\x9d\xd9\x5c\xe3\x2a\x07\xf9\xa9\x67\x32\x2e\xb3\x31\x2d\xe2\x05\x49\x96\x5a\xb9\xb6\x51\xcb\xa9\xcc\xc7\x92\x6a\x00\x7a\x07\x5c\x14\x08\x44\xa3\xbc\xa9\xa8\xf1\x66\xc4\x9c\x7b\x24\x72\xa5\x20\xa4\x1f\x41\x68\xda\x9b\x52\x4c\x4f\x46\xef\xd5\x8d\x06\x31\xc8\xf4\x88\xfe\xc6\xc0\xbe\x0f\xd2\x04\x02\xe3\x23\xa7\x6f\x02\xaa\x28\x78\x2d\x39\x80\x5a\x8e\x9d\x03\xf4\x47\x42\x88\x00\x69\x6c\xb2\x1f\xf1\x64\x88\xe1\x89\x09\xfc\xf0\xf8\xf8\xe9\xe1\xb1\x33\xe4\x77\xa5\x52\x90\x25\x22\x52\x2f\xde\x60\x9f\x42\x5a\xd4\xc4\xf0\xf4\x6b\x6f\x9c\x3b\x67\xa3\xc8\x44\xaf\x15\xab\xaa\x54\x82\x50\x95\x89\xf1\xc9\x69\x14\x39\xfa\x1f\xc3\xa7\x27\x4e\x8d\x4e\x71\x31\x69\x32\xea\x4b\x25\x60\x85\x7a\xd3\xa8\x37\x2c\x5a\xae\x38\x75\xa2\xfd\xcf\x7f\x93\x7f\x5a\x48\xac\xd4\x0f\xf5\x25\xe0\x01\x89\x88\xc5\xcf\xca\x07\x27\x9d\xf7\xf0\xac\xe3\xa4\x4a\xff\xe5\xac\xe3\x14\xac\x01\x7a\xf7\x9f\x8f\x1c\x39\x92\xd1\x2d\xc7\xd8\x6f\x0a\x3a\xfc\xbc\x14\xa6\xdc\xfe\x88\x71\x11\x67\xb0\xa8\x6f\xcb\xfb\x51\x88\x25\x5f\x7e\xf4\xb1\x88\x5e\xcb\xde\x41\x3c\x3d\xc1\x24\x1c\xee\x07\x4f\x30\x99\x4e\x20\x89\x4f\x2c\x19\x91\x6b\xd0\xb2\xc2\x1d\x8f\x01\x66\xb4\x1a\x72\xe3\xcc\x9a\xf6\x1c\x75\x1b\xae\x69\x43\x40\x51\xdd\x28\x86\x10\x83\xb0\x60\xc4\xc8\x01\x40\xa6\xc1\x1b\xd3\x0f\x8e\xa8\x22\x57\x32\x56\xba\x09\x54\xbc\x2a\xbc\x99\xb1\xab\xb1\x36\xe1\x41\xbe\xee\xf0\x1b\x24\x1e\xae\xed\x5d\x1e\xba\xd8\x57\xbd\xda\x64\xaf\xf8\x15\xeb\xc2\x4d\x38\x41\x9f\x75\xda\xdb\x83\xb4\x35\x23\xbb\x2b\x8f\xfb\xaa\x50\xc5\xb6\x84\x6c\x4b\x3d\xa7\xe9\x66\x64\xff\x84\xb9\x98\x17\x1e\x76\xda\xdf\xa7\x87\x0e\xf6\xaf\x43\x76\xfa\x51\xa8\x80\x26\x76\xb1\x98\x02\xa9\x30\xd1\x99\x23\x91\x84\x82\x3e\xd8\xb1\x41\x52\x02\xfe\x6f\xa5\xe1\x1e\x15\x18\xe4\x11\x84\xc5\xd4\x35\xc0\xe1\x53\x1c\x75\x20\x2c\xfb\x73\xa2\x70\x8b\x0c\x4d\x9e\x6d\x5c\xf4\x42\x68\x8a\x2f\x2f\x97\x03\x64\xc6\xec\xeb\x42\x7c\x23\x4e\x29\x3e\x80\x56\x11\x9a\x43\xc8\x25\xe2\xcc\xf6\xaf\xc1\x17\x23\xec\xf3\xe9\xa5\xc6\x01\x12\xdc\xe7\x19\xcb\x0c\xa5\x53\x5f\x1a\x7f\x04\x4e\xf8\x3e\xfb\x38\x87\x3b\x62\x50\xcf\x4c\xff\x8e\x84\xd4\x36\x65\x36\x28\x7e\xde\x1e\x94\x1f\xb3\xc8\x01\x5d\x6c\x08\x22\x79\xd5\x01\xf3\xdd\x41\xbc\x42\xeb\x8e\x77\xa9\xa6\xc1\x95\x4f\x71\x3c\x27\x5a\x91\xb5\x9f\x44\x7e\xa6\x6e\x85\xce\x0f\x3c\x78\x7b\x52\xc2\x05\x0e\x3a\x20\x40\xb5\x98\x07\x52\x9c\xad\x3d\x92\x38\xff\xff\x9e\x1f\xcf\xb4\xb6\xc9\x41\x8e\x79\xe4\xcc\xc0\x43\xe7\x3c\x1c\x3a\xe7\xf5\x87\x8e\xba\x2b\x74\xe2\x3a\xed\x4d\xd5\x21\xd6\x69\x6d\x17\xda\xf2\x2c\xc7\x08\x1e\x50\x67\x4d\xe0\xd8\x77\x9d\x3a\xd8\x4e\x13\x86\x5f\x53\xdb\x5b\x7f\xfc\x34\x24\xf7\x8b\xbe\x42\xc6\x29\xfa\xb8\x67\xed\x02\x67\x14\xc0\xc8\xbc\xa8\x76\x72\x7d\x19\x8a\xbe\x62\x3b\x23\x53\x55\xcd\x5c\x10\x2a\xca\xa3\xa7\x9d\xee\xc9\xb7\xda\xc1\x6b\xfe\x9f\x66\xe3\x84\x69\xd1\x5f\x2f\xf9\xd4\x5b\x59\x19\x62\x1f\xb1\xbf\x47\x9c\xa6\xed\xaf\xac\xe0\x18\xab\x35\x8a\x96\xee\xac\xb6\x62\xc5\xbb\xab\x6b\x71\x2e\xc0\x1c\x9a\x2b\xd4\xf6\x8c\x39\x25\xe9\xa5\xaa\xc8\x20\xdc\x6a\x07\xca\x98\x26\x54\x91\x98\x02\x16\x4c\xc0\xdc\x83\x98\x9a\x25\x29\x4d\x96\xed\x96\x40\xfb\xac\x0d\x94\x8a\xe7\x97\x06\xae\xa3\x18\xb5\x83\xc8\x74\x17\xd8\xde\x11\x56\xaf\x6d\xd1\xb4\x74\x26\x80\x9c\xed\x32\x88\x63\xd3\x12\x84\xe9\x0a\xec\x2b\xd6\x3e\xcb\x99\x53\xc2\x93\xa6\x44\xe1\xe2\xde\x80\x04\x1d\x10\x8b\x1b\xc5\xdc\x89\x44\x79\xea\xe7\x89\x7c\x2c\xf9\xc6\x9c\x3a\x72\x3d\x95\x95\xe8\x79\xa7\xad\xc8\x99\x00\xc9\x80\x94\xcc\xc6\x89\x9f\x3a\xf9\xe2\x70\xe5\xba\x12\x22\x3a\xad\xdd\xe2\xa1\xb7\xec\xf2\x9d\x49\x6a\x95\x68\xa1\x2a\xc0\xdc\xa3\x6e\x1e\x21\x9a\xe2\x1a\xbc\x09\x59\x42\x77\xe3\x9a\x4a\x06\x46\x8f\xc8\x04\xb3\xc1\x2e\xaf\x41\x45\xcd\x60\x7c\x0d\x65\x24\xe7\x36\xdf\x6e\x54\x08\xa7\xa8\x51\x14\xad\x0b\x9e\xf5\xf3\x01\x71\x05\x11\x00\xa9\x95\xea\xaa\x44\x54\x17\xa4\xac\xcb\x71\x56\xc9\xdc\xaf\xd1\x42\xca\xda\x95\x67\xc3\xeb\xa3\x93\x53\x63\xe3\x9a\xa4\x85\x48\x98\xb0\x62\x3a\xbc\x6e\x58\x66\x95\xfc\xdb\xd4\xf8\x19\xe2\xcc\xfc\x27\xad\x04\x5c\xce\x92\xf9\x5e\xe2\xac\xc2\x15\x9e\x0c\xd4\x74\x31\x06\xb8\x61\xb8\x46\x9d\xfa\xd4\xf5\x86\xc2\x45\x4c\x4d\xbf\x06\x50\x89\x25\xcb\xb4\x29\xdb\x33\x4d\x1b\x38\x95\x2c\x5a\x26\x27\xd8\x3d\x1c\x28\x41\x21\x32\x31\xf0\x12\xab\xe5\x7a\x94\x92\xaa\x53\x81\x17\xd4\x30\x1e\x19\x5e\x5c\x0d\xd7\x37\x2b\x4d\xcb\x70\x13\x40\x47\xea\xee\xc7\x17\x85\x2f\xc5\xe6\xc4\x37\xda\x68\x7e\xd2\x0e\x74\xfd\x1f\xe0\xe9\x75\xad\xd3\xda\x12\xfb\x8d\xc8\x20\x97\xec\xcc\xee\x87\x4f\xc0\xef\xbf\x23\xf2\x9c\xde\x85\x37\xe5\x4f\xa1\xe3\x71\xd7\xe7\x44\xbd\xe2\x8d\xf1\x21\xf6\x35\xe0\x98\xdc\x64\x83\xc3\xd6\x02\x40\xfc\x02\x12\x81\x9c\x40\x1d\x89\x55\x52\x56\xc0\xdd\x94\x7f\x15\x1c\x08\xf7\x39\xd7\x13\x50\x6a\x74\xbf\x7f\x6f\xff\xcb\x3f\x25\xae\x48\x0f\x79\x83\xc3\x5c\xe0\x9d\xfd\x6f\xde\xee\xdd\xbc\x0d\x61\xed\xed\xbd\x8b\x5b\x05\x40\x53\x0e\x7c\x06\x99\xf6\xff\x99\x39\xff\x7f\x99\x39\x4d\xcc\xde\x00\x18\xf0\x43\x46\xa3\x51\x12\x9e\x82\x12\xc0\x4e\x1f\x22\x15\xc3\xe6\x08\x57\x36\x9d\x33\x7c\x73\x41\x7d\x70\xdd\xc0\xe8\x84\x74\x39\x9d\xd6\x4e\x77\xf5\x3e\x33\xaa\xfe\x74\x57\x64\xab\xbd\x05\x9f\x14\xcf\x5c\x0b\x58\xa9\xcf\xa8\xcf\x51\xe4\xf3\x51\x9e\xa0\xaf\x23\x7d\xdc\x84\x1e\x7e\x94\x13\x9e\x45\xad\x2d\xa5\x40\x4f\x6d\x1e\xc7\xce\x02\x85\x08\x66\xe3\x5a\xce\x9c\x37\x24\xb0\x57\x10\x48\x84\xbf\xe2\x7a\x48\x15\x20\x10\x1b\xd4\xc7\x7c\x1a\x1c\xc3\xcb\x9b\xf7\xb8\x1d\x8b\xc6\xe1\x6a\x0b\x32\x53\xc5\x8c\x5d\x6d\x75\x5a\x57\x81\xe1\xe8\x1b\x6e\xf4\x86\xc6\xf0\x2d\xfd\xc9\xff\xef\xc3\x93\x67\xc6\xce\x9c\x44\xf2\x4a\x34\xb2\xd8\xc6\x03\x46\x7a\x60\xe1\x1a\x1e\x31\x82\x80\x1c\xdc\x5d\x1a\x98\x26\xed\x91\x9a\x39\x57\xb3\x96\x48\xd5\xf4\x2a\x4e\xd3\x35\xe6\x68\x15\x44\xfd\x36\x22\xa0\x6e\x2c\xb1\x39\xb8\x60\x7a\xa6\xc8\x43\x62\xc7\x9c\x17\xe0\xf6\x00\x04\x5b\xc5\x71\x71\x03\xc3\xea\xbd\x1a\xb5\x2c\x52\x33\x3d\x5f\x8d\x08\xb0\xff\xe8\x8b\xee\xbb\x57\x05\xf5\x66\xdc\xac\x8e\x80\xd9\x30\x63\xe9\xcb\x10\x21\x3e\x8e\x84\x25\x80\x2a\xc3\xa8\xd2\x48\x66\x75\xf7\xd9\x5f\x60\x51\x5e\xed\xae\x6d\x75\xda\x2d\xa9\x5f\x53\x6b\x7e\xf1\xf4\xe6\x8b\x27\x4f\x3a\xad\xed\xfd\x2f\xd6\x04\x30\xc6\x27\x9c\x34\x3e\xf6\xe3\xd6\x3a\x10\xb2\x6e\x71\xf6\xf8\x0b\x9b\x91\x24\xd8\xd6\xf6\xfe\x83\x0f\x00\x64\xe1\x46\x28\x04\xa6\x42\xaf\xb5\x81\x54\x90\x52\x3e\xb0\xc2\xd6\x12\x83\x8c\x2c\xbe\x9c\x88\xdf\x01\x98\x90\x66\x1d\x30\x85\x62\xb0\x84\xdc\x5b\xca\x33\x0e\x61\xcc\x82\x6c\xd9\x84\x53\x12\xe0\x85\x88\xe5\xd8\x73\xd4\x95\x98\x53\xd9\x01\x84\xd7\x05\x14\x03\xf3\x0a\x63\x07\xc8\xaf\x8e\x1c\x61\xdf\xff\xd3\xd1\x23\x43\x02\xe7\x34\x29\x37\xe0\x19\xc2\xc4\xc0\xea\x10\x04\x5b\x03\xe9\x86\xdb\xa8\x19\x36\x9f\x31\x00\x09\x35\x62\x39\xcd\x2a\x39\xe1\x34\xed\xaa\xbb\x74\xc8\x23\x55\xc3\x37\x66\x0c\x8f\x96\xc9\xb0\x65\x91\x79\xdb\x59\xb4\x68\x75\x4e\x89\x21\x1f\x64\x09\x23\x2e\x50\x15\x03\x09\x22\x42\x87\x88\x69\x57\xac\x66\x35\xe2\x54\xc6\xb0\x43\x8f\xaf\xf3\x00\xab\x52\x89\x04\xc3\xa7\x2b\x4f\x0a\xee\xbd\x77\xed\xc5\xf7\x77\x90\x7b\x53\xc2\x27\xc9\xf1\x46\xb8\x76\x11\x1c\x9c\xb7\xa4\x58\x6c\xed\x5b\x33\x9b\x63\x6d\x00\x9d\x79\x4b\x9c\x87\x5b\x62\x82\x47\x61\x5c\xd9\xc8\xc0\x84\x5a\x83\x2f\x77\xd9\x18\x91\x4e\x6b\x4b\xe4\x95\xde\x8a\x42\x36\xbd\x87\x30\x42\xc0\xeb\x83\x5f\x7d\x94\xab\x0d\xad\x75\x91\xae\x29\xd8\x83\xfe\xbc\xd1\xfb\xf8\x0e\x3b\x39\x1f\xdd\xdf\xdb\x5e\x03\xea\x86\x6f\x82\x15\x12\x1d\x0a\x22\x62\x4f\xf1\x28\xbe\x1d\x6c\x93\xbd\xf7\x7f\xd8\xfb\x7e\x27\x41\xa7\x29\x96\xf0\x95\x6b\xbd\xeb\x1b\xa1\xd3\x58\x82\xa9\x21\x31\x6d\x72\x34\x20\xdc\x93\x7b\x17\x2e\x76\xef\x7e\x4d\x0e\x27\xc6\x20\x2d\xd4\xbe\xfd\x56\x42\x36\xe2\x00\x41\xd0\x3a\x91\xf1\x9d\x12\x8d\x66\x3b\x49\x04\x8f\x49\x8f\x6f\xf1\x4a\x56\x7d\x00\x86\x9a\xbe\xea\x71\x39\x1b\x96\x95\x04\x78\x40\xb0\x93\x57\xbc\xa0\xfb\x5b\xc7\xa1\x8e\xf2\x42\x16\xab\xbb\x4c\xce\x38\xc4\xf0\x7d\x5a\x6f\xf8\x41\x05\x75\xa3\x4a\x05\xed\xa7\x51\x49\xeb\xc7\x7f\x09\x99\xc3\x64\x20\x37\x01\x4d\x57\xa5\x9e\xef\x3a\x4b\xf8\x7d\x62\x0c\x24\x70\x24\xde\x37\x09\x5d\xcb\x64\x78\xd6\xa7\x6e\x7a\x2d\x4b\x4e\x13\xce\x55\x91\x1c\xe2\x36\x6d\x71\xb5\xc4\xce\x17\x7c\xd1\x25\xa3\xe9\xd7\x4a\xf8\x94\xe7\x24\xbe\xe4\xda\x40\x3b\xeb\x8d\x00\xc6\xac\x62\x51\xc3\x6e\x2a\xc1\x31\xfb\xd9\xe5\x12\x96\xf1\x01\xef\x72\xc9\x8d\x2a\x04\x3b\xfb\x79\x6d\x57\x39\x76\xa6\x94\x33\x25\xb1\x2d\xa5\x27\x0a\x0d\xb2\x4b\x91\xac\xe1\x7b\xcc\xa3\x2f\x42\x60\x85\xdd\xfd\x2f\xbf\x00\xe8\x10\xb4\xa0\x70\x28\x05\x02\x5d\x56\x78\xd5\xde\xdd\x6f\x7b\x9f\xbd\x25\x99\x72\x5b\x29\x10\x87\x21\x0a\x27\x07\xc5\xe3\x03\x8a\xb8\x83\x39\x26\x46\x34\xf8\xfd\xb6\xa0\x67\x4e\xc1\x1d\x4b\xad\x95\x55\xd3\xfd\x61\xbd\xb3\xda\x52\xaf\xcb\xf0\x74\x4e\x5f\x9e\xf1\x9b\x73\x44\xfa\x17\x70\xcb\x45\x40\x95\x6f\xc2\xf7\x08\xf6\x9b\x75\xa0\xe9\xbb\x1d\x61\x90\x4d\x18\xb8\x85\x8f\x17\xc0\xe8\xf4\xa9\x6b\x1b\x16\xb0\xe7\xcb\xd3\xe3\x5f\x62\xfb\x9c\xc4\xa3\x3e\x43\xc5\x5e\x4a\xab\x9c\x39\x1c\x83\xcd\x78\x26\x4b\x62\xab\x96\x4b\x1a\x96\x4f\x5d\x5a\x2d\x13\xe0\x64\x70\xcd\xba\xe1\x02\xde\x29\xa9\x18\x9e\x74\x88\x45\x94\x84\x84\xfd\x86\x05\xe8\x79\x89\xed\x17\x40\x65\x4c\xb6\xe5\xd5\x01\xf6\x89\xed\x7a\x0b\x47\x09\x7f\x14\x25\xbf\xc6\x9f\x0d\x4f\x8c\x09\x8b\x56\x5b\xf0\x57\xf0\xcb\x99\x25\x76\x2c\x19\x8d\x46\xfa\xd1\x03\x47\xd5\xc2\x51\x08\xb7\x02\xed\x16\x7e\x85\xff\x2e\x13\xf2\xef\x78\x3d\xaa\xd7\x29\xdc\x97\xe6\xc5\xa9\xc1\x7f\x1e\x44\xe8\x02\x61\x6a\xd3\xe7\x5c\x0a\x8b\xb6\xf8\x51\xb8\x8f\x37\x5c\xba\x40\x6d\x9f\x18\xd5\x2a\x10\x57\x18\x56\x5c\x85\x19\xca\x4a\x03\xb6\x21\xeb\xd1\x71\x66\x1e\xeb\x0e\xf3\xba\x39\xe7\x1a\x70\x9a\xf3\xca\xf8\x8f\xf1\x30\xc5\xd6\x54\x0c\x5b\x7f\x2a\x17\x3b\x4a\x76\x63\x9b\x4e\xf7\xd2\xc5\x97\x17\x1e\x74\x5a\x5b\x90\x80\x7e\x5d\xb8\x8b\x00\x36\x8f\xad\xfd\x7c\x3b\x06\xbb\x49\xc9\xb5\xb0\x7d\xf4\xc5\xe3\x77\x22\x2b\x84\x6d\x7c\x00\x61\x99\x23\x8d\x31\x16\x02\xd9\x69\xed\x0a\xfe\x84\x38\xc1\x7e\xac\x79\x3b\xdd\x4f\x9e\xf4\xee\xfc\x51\xbc\x25\x08\xe8\x41\x84\x8d\xcc\x53\x71\x7b\x93\x8d\x03\x8f\xc2\x66\x97\x5b\xb6\x27\xb3\xf9\x24\x7d\xb4\xdd\xbd\x74\x4d\xca\xec\xbc\x85\x04\xf7\xe9\x73\x9c\xef\x28\x9f\x5d\x14\x28\xd2\x19\x3b\x2f\x13\xf4\xab\xd4\x92\xf1\x2e\xdf\x82\x03\xf0\x5a\xef\xfa\x87\x9d\xd6\x65\xa9\x9b\x05\xb8\x2c\x79\xf1\xfd\xed\xee\xe5\x4b\xe0\x57\x4a\xd9\x7c\x39\x76\x26\xef\x50\xcc\x4b\x8a\xf1\x3c\xf3\x4d\x38\xd2\x1f\xed\xcd\x94\x08\x75\x76\xd3\x96\x1f\x0c\xa3\xf7\x22\x28\x9f\x68\x67\xfb\x2f\x90\x99\x8d\x7c\xfb\xab\x00\xcb\xf8\x4d\x9e\x1d\x35\x71\x14\xa6\x35\x8e\x8d\x4e\xfb\x3e\x84\x72\x21\x0a\x59\xe0\xab\x10\xc7\x3e\xeb\x95\x2b\x98\x54\xcb\xf4\x8b\x58\x01\xdc\x1f\x24\x37\x3a\xf5\xa8\x8e\x62\xc2\x62\xef\xaf\x4b\xc0\x27\x9a\x03\xc0\x70\x99\xe1\x79\x8c\x8c\x09\xa6\xfb\x9a\xef\x37\xa2\x20\xfb\x48\xdc\x44\xab\xc7\x88\xf4\x13\x2f\xf2\x1b\xe4\x7f\x0a\xb6\x37\x65\x6e\xfc\x8f\xab\x84\xd2\x3f\x27\x76\xa4\x14\x9e\x7e\x48\x07\xd2\xf0\x02\xac\x23\x17\x55\x2c\x81\xff\x18\x49\x93\x33\xa5\x17\xf4\xce\x83\xee\xe7\x0f\x64\xfb\x4a\xe9\xdf\x13\xfd\x83\x80\x58\x80\x4b\x27\x93\x47\x1e\xf2\xa8\x7f\xde\x75\x2c\xea\x9d\x9f\x59\x3a\x2f\x62\x0c\x55\xd1\x37\xc1\x76\xcc\x8c\x75\x8c\x35\x6c\xc1\x0a\x78\xc6\xdf\x22\xb9\x0b\x39\x5d\x68\x12\x38\x2b\xc7\x3b\x61\xd0\x00\x4c\x5b\xf4\x0d\x13\xb2\xef\x2c\x47\xf9\xd8\x1d\x2a\x19\xe3\xfc\x96\x2e\x12\x88\xb6\xce\xd4\xd1\xa5\x31\x2a\x34\x32\xed\xaa\xb3\xe8\x11\x1e\x23\x41\x4e\xa9\xe9\x6b\xc5\x4f\x55\x8e\x48\x7d\x05\x13\xce\x22\x75\xa7\x6a\xd4\x2a\x46\xc5\xf0\xef\xae\xe9\x53\x52\x69\xba\x16\x99\x71\xaa\x4b\xec\xd4\x3f\x31\x76\x6a\x14\x0e\x6f\x6a\x54\xe1\x01\xc8\xaf\x3a\x4d\x55\x06\x09\x94\xec\xdd\xf9\xe3\x8b\xef\xdf\x63\x9b\x06\xfe\x96\xf0\x0b\x1c\x9c\x7e\x28\x0f\x02\xaa\x1e\x77\x5a\xd7\xf6\x7f\x78\xc6\x8c\x74\xdd\x20\x82\x4a\x3c\x35\x19\x39\x4f\x3d\x41\xff\x85\x4f\x50\x4a\xcf\x7b\x24\xc5\xb8\xbb\x7a\x9f\x5d\x0c\xf1\x49\x26\x7f\xf5\xff\xd3\x6c\x10\xc3\xad\xd4\xcc\x05\x1a\x06\x31\xf0\x67\xb6\x1c\x39\x31\xbf\x37\x1b\x04\x2c\x67\xd8\xf9\xd9\xc0\xdd\x04\x58\x84\x24\x87\xdc\x7a\x77\x63\x9b\x29\x12\xc1\x41\x56\xbf\x84\xfc\xae\x54\x32\x2c\xcb\x59\x2c\x35\x0c\xb3\x1a\x58\xf5\x68\x32\xfd\x6f\x52\x2a\x55\x4d\x4f\xf5\xfd\x1b\xc5\xd0\xa3\x34\x35\x15\x97\x64\x3b\x41\x62\x1d\x64\x2d\xda\x4e\x49\x04\x33\x88\xbf\x21\x94\x40\xfc\x01\x88\xce\xf0\x87\x4c\x11\xf5\x86\x72\x8b\x55\x54\x7c\xfa\xec\xa9\xe9\xb1\x89\xe1\xc9\xe9\x5f\x9e\x18\x9f\x3c\x5d\x3a\x3e\x3c\x3d\x4c\x46\xc6\xcf\x4c\x8f\x9e\x99\x26\xaf\x8d\x1d\x3f\x3e\x7a\xe6\x8d\x62\x02\x27\x26\xc7\x5e\x1f\x9e\x1e\x25\x20\xa9\x2f\x09\x73\x96\x33\x63\x58\x82\xa5\xe3\x8d\xc0\xfd\xf2\x3b\x91\xb5\xec\x95\xcb\xe5\x37\xc8\xef\xc4\xe7\xe2\x87\x8a\x5a\x7e\x07\x87\x3d\x46\x8a\x6d\xf0\xf7\x80\xe8\x3b\xc5\x1b\x91\xad\x84\xfc\x0e\x53\x9e\xb1\x92\xf8\x26\x13\x2b\xa9\x68\x42\xcd\xac\x56\xa9\x5d\xac\xdd\x78\x96\x68\x80\x46\xc4\x0e\xaf\x2a\xee\x3b\xea\xa4\x29\x2c\xfd\x5c\x89\xf1\x68\x28\xb7\xc3\xc0\x27\xa1\x2c\xe8\x2c\x2a\xcd\x0b\x84\x4f\xcc\x05\xae\x13\xa5\x38\x56\x67\x21\xa9\xa8\x86\x15\x52\xb3\x01\x8a\x94\x05\x49\xc5\x35\xbc\x9a\x1e\x56\x88\x23\xb5\xec\xdd\xf8\xaa\xfb\xf8\x31\x72\xf4\xab\xe5\x05\x0f\x23\x00\x67\x9c\x2d\x76\x27\x85\x9a\x1f\x90\x86\xb3\xab\xd0\xcd\xa3\x20\x6a\x36\x21\x5d\x29\x37\x53\x9c\xa2\x64\xd3\x0f\x50\x64\xc9\xac\x61\xaa\x31\x9a\x30\x3b\x41\x00\xbe\xae\x77\xef\x7f\xdd\xbb\x71\x2b\xdb\x6a\x08\x30\x00\xf3\xa3\xcb\x66\xa8\x8c\x97\xfa\x63\x61\xa6\x81\x52\x70\xe4\xde\x22\x17\x48\x97\x2b\x8e\x43\x75\x68\x54\xfc\xe4\x53\x44\x47\xcd\x2c\xf9\xd4\x03\x47\x84\xe5\x18\x6a\xcb\x3e\xbc\x3a\x85\x51\xb2\x01\x74\x03\x76\x8a\x1a\xdd\xb9\x32\x4b\x4a\xa5\x05\xed\xf3\xbd\xba\xe0\x42\xd1\x12\xc2\xb7\x51\xb4\x1c\x8f\x77\x2d\x15\x2c\xd8\x68\xaa\xb0\x2c\x27\xce\x2a\x8a\x68\x37\x82\xec\xc5\x0f\xe5\xd5\x6c\x79\xb2\x80\x17\x8f\x1f\xa5\xcb\x90\x78\x83\x94\x6b\xe8\x8f\xbd\x0f\xde\x51\x95\x66\x36\xbe\xd2\xb8\xff\xf2\x9b\xbd\x6f\x15\x53\x41\x98\x4b\xca\xe6\xbf\x78\x7c\x0d\xb7\x79\x65\x79\x75\x5a\x34\x78\xc1\xd9\x06\xa4\x29\xac\x5e\x30\x61\x69\xc5\x52\x01\xb3\x14\x0e\x94\x42\x33\x24\x1a\x92\x3b\x40\x51\x35\x3b\x48\xf1\x80\x5d\x4c\xce\x57\xf6\x45\x98\x31\xaf\x2b\x9e\xc8\xa6\x37\x3d\x62\x08\x86\x1f\xfc\xc9\x10\xa8\x6f\xd8\xc4\x59\xb4\x83\x0f\xd5\x61\xc9\xba\x4c\xfd\xd6\x2e\xc7\x20\x88\x70\xed\x6c\x75\x5a\x6d\xce\x52\xb4\xda\xea\x5d\x59\x4d\xfb\x41\x0a\xbb\xdb\x39\x5b\xe6\x57\x3d\x67\xa7\x88\x8e\x73\xf1\x6c\xa3\x6b\xef\x7f\x55\x66\x03\x1f\x3f\xb4\xb4\x84\x8d\xfa\x5f\x29\x2c\x1a\x19\xdd\x9f\xda\x7f\xd1\xae\xe2\xfd\x17\xed\xd4\x7e\xfb\x4f\xd1\x3d\x61\xff\x29\x3a\x38\x47\xff\xa5\x88\xce\xee\xbf\xbe\x3b\xce\x53\xaf\xe2\x50\x01\xe5\x2a\x5e\x54\xcf\x7b\x7e\xc8\xa5\x97\xa4\x46\xa5\xc6\x03\xb0\x4d\x9b\x1c\x42\xf0\xfa\x43\x11\xde\x66\xfc\xf0\x10\x69\xb8\x4e\x83\xba\x4a\x22\xa3\xa0\x2c\x66\x7a\x75\x37\x04\xe7\xae\xe8\x24\x21\x47\xa4\xa5\xbc\x1b\x66\x8e\x72\x42\x89\x22\xd1\x7c\x9c\x55\x4c\x65\x05\xc3\x3b\xac\xaa\xe4\x02\x59\x30\x5c\x48\xca\x98\xe0\x6d\x12\xc9\x19\x5e\x4d\x66\xe7\xb4\x9b\x4a\x9b\x7f\x6f\xf3\xab\xee\xbd\x0b\x18\x2e\x98\x2a\x09\x9c\xbd\xeb\x82\x39\x21\xe6\xca\xcf\x01\xef\x0c\xcf\x25\xba\xb0\xd6\xdb\x38\x4f\xd3\x4b\xa3\x25\x49\xfc\x26\x38\xb1\x88\x33\x3b\x4b\x2a\x8e\xed\x39\x16\x25\xb4\x52\x73\xe0\x69\x2a\x88\x92\xa3\xb6\xef\x2e\x49\xd0\x59\xc7\xc3\x73\x54\x63\xdc\x45\xa2\xc9\x04\x67\x23\x3e\x37\x7e\xc3\x1f\x1f\xf8\x4d\xf2\x01\x7f\xa3\x6e\x6f\xf2\xf7\x76\xd6\x23\xe9\x1c\xa5\x4a\x2d\xd2\x5b\x69\x5a\x3a\x7e\x5f\x39\xca\x57\x19\xd2\x39\xeb\x52\x78\xbf\x6a\x18\xa6\xd2\x7a\x79\xeb\xd3\xde\xcd\xdb\x81\x4f\xbe\x77\xe7\x4a\xef\xa6\xe2\x32\x95\xcc\x0c\x34\x3d\x95\x9f\x23\x25\x8b\xb0\xb5\xab\xe0\x17\x4b\x95\x2b\xee\x83\x1e\x55\x4d\x94\xd4\x2a\xf0\x86\x28\x1e\x1d\xe2\xcc\x6d\x05\xea\x67\xab\xc4\x43\x96\xf6\x42\xf5\x63\xa2\x22\x7f\x26\x53\x29\xc2\xa6\x85\x8a\x3e\xb3\xe6\x28\x6d\x8e\x80\x39\x3c\xbd\x64\x70\xbf\xac\xeb\xf8\x9e\x52\x9e\x45\x2e\x3c\xcd\xa6\x7f\x8a\x09\xcf\xb8\xc3\x66\x54\xa1\xbb\xc6\x8a\x8a\xe0\x4a\x25\x50\x32\xc7\xec\x2a\x7d\x73\x65\x65\x88\xb8\xd4\xf0\x1c\x1b\x49\x3b\xdf\x34\xfd\xc8\x3a\x1a\x62\x56\x97\x7f\xde\xf3\x0d\xbf\xe9\x05\x3f\x99\x82\x3f\x35\x9c\x14\x71\x5d\xd3\x2a\xee\xac\xb6\xf6\x36\x2e\xed\xbd\xff\x75\x7a\xcd\x80\xf1\xca\xcc\xf7\xbd\xab\xdf\xf5\xbe\x69\x25\xeb\xd6\xb6\x54\x7d\xbb\xce\x77\x41\x0f\xe4\x28\x0f\xd9\x64\x1b\x55\x92\x7c\x3a\x57\x90\x30\xd8\xb4\x17\x20\xdb\xc2\xb4\x6b\xd4\x35\x7d\x02\x60\x60\xa6\x1d\xa4\x62\xe5\xce\xbc\x82\xa3\x75\x7b\xef\xad\x4f\x31\xb5\x60\xef\xbb\xdb\xbd\x2b\xcf\x45\xca\x6f\x8e\x80\x5c\xa1\xc8\x42\x10\xc2\x2f\x0e\xc3\x91\x13\xe7\xa7\xa6\x87\x4f\x8e\x9d\x39\x79\x7e\x7a\xec\xf4\xe8\xf8\xd9\x69\xb1\x13\xab\x93\xb1\xe4\x23\x30\x59\x3e\x88\xdd\x5f\x17\xfa\x6e\xc1\x7b\x51\x20\xb5\x2f\x0d\x27\xa7\xcf\x4e\x0c\xa2\xa1\x5c\xbe\x3f\x0d\x75\x1c\xd5\xf0\xa6\x73\xbb\x73\x61\x5b\x55\xd4\xf3\xc3\x60\x10\xa5\xe9\xb2\xda\xfd\x61\x3d\x78\x96\xd7\x48\x6a\x36\xd0\xbd\xa1\x9a\xd3\xbd\x3b\xab\x7b\x7f\x6e\x27\x73\x81\x7b\xb7\x3e\xef\xdd\x6e\x2b\xe6\x37\xe7\x11\x53\xe5\x47\x68\x76\x25\xcb\xa9\xcc\x6b\x7c\x2d\x1c\xc4\x11\x5d\x4c\xe9\x12\xf4\x9b\x72\xe6\xfe\x8b\xc5\xd5\x66\x74\x58\x5e\xd1\x76\x8d\x2d\x81\xec\xd4\xea\x62\xc5\xb2\xa6\x6d\xc7\x26\x33\x86\x67\x56\xb2\x1c\x3b\x2f\x3f\xfa\x98\x07\x65\x48\x8f\xec\x4a\x99\x4a\x43\x08\x68\xd7\x54\xc5\xe0\x61\xcc\xac\x06\x79\x56\xdc\x1b\xc9\x51\xe0\x54\xfe\x10\xee\x87\x0c\xfc\x65\x1f\x4a\x29\x49\xbb\xf2\x7a\x4a\xaf\x56\x0d\xe2\x87\x59\xd6\xca\x52\x6a\x42\x38\x4d\x31\x76\xf9\x54\x2d\x12\xb8\xe4\xa5\x97\x63\x36\x21\x46\x12\xa9\xaf\x19\xcc\x32\x14\xb1\x0e\x1a\x29\x41\x70\xd2\xf2\x72\xf9\x8c\x63\xff\x9a\x0d\x3e\x8f\x78\xf1\x86\xd1\x79\xa4\x46\x76\xc0\x5a\x62\x40\x19\x6a\x29\x0a\x2d\xfc\x9a\xd6\x96\x57\x14\x53\x83\x70\x65\x35\x5b\xd3\x6f\x59\x45\x1d\x57\x7d\x26\xf2\xe4\x23\x55\x49\xcf\xd4\xec\xad\x2f\xbe\xbf\xb6\xf7\xfd\x8e\xa2\x28\x26\x32\x2a\x1f\x88\xf8\x06\x8a\x7e\xe1\x55\xe5\x26\x04\x28\x33\xaa\xdd\x20\x06\x12\xa3\xd8\x86\x5c\xda\x70\x38\x97\x69\x31\xbf\x6d\xb8\x72\x99\x81\xa7\x24\xec\x8a\x2e\x5d\x66\x8f\x5d\x5c\xcb\x25\x50\xd5\xac\x54\x89\xca\xc6\x01\xed\x58\x95\x18\xbe\xef\x9a\x33\x40\xb9\x55\x35\xbd\xf9\xf3\xd0\x71\x87\x04\x8b\xa1\xaa\x03\x9f\x5f\x7c\x79\xf7\x72\xf7\xeb\x8f\x7b\xab\x5b\xd1\x72\x51\xfb\x47\x7d\xaf\x4e\xab\x3f\xb0\x0e\x8b\x55\x2f\x15\x1b\xa4\x76\x3c\xb6\x8a\x55\x2d\xca\x0c\x52\x2f\xe4\xc0\x17\xab\x96\x17\xc9\x5f\x2b\xdb\xf6\x04\xc1\x39\x81\xe4\x44\xd5\xca\x7c\x72\x79\xef\xdb\xb7\xa4\x38\x77\x70\x1d\xe9\x17\x7b\xb6\xd4\xfc\x62\xf4\x12\x14\x05\x9b\x76\xc9\x37\x94\xbe\x7b\x65\x21\x5b\xd3\xdd\x10\x40\x9d\x5e\x72\x00\x7c\xd3\x28\x32\x9b\x4a\x3c\x9c\x23\x4a\xb9\x59\xf6\xc7\x01\x61\xa2\xea\x85\x0f\x0a\x42\x9a\x4f\x7a\xdf\xa4\xb0\x7a\xf1\xf3\x54\xed\x70\x48\xc9\xcd\xd2\x0b\xd3\x1d\xcc\xf1\x38\x59\xed\x61\x1b\x0d\xea\xcf\x2b\x32\xf2\xb4\xab\x15\x7c\x1e\x05\x9f\x9f\x6b\x9a\x55\x32\x76\xa6\x58\xd4\x8f\x90\x31\x48\xe1\x3c\xa3\xa9\x10\x00\x0f\x14\xaa\xa5\x0a\xef\x0a\x8a\x82\xa6\x7a\x8e\xbe\xbc\xb9\xd6\xdd\x5a\xc3\x3b\x98\xa2\x74\x4e\xfa\x36\x4d\x69\x04\xbb\xd3\x78\x3b\x94\xc0\x75\x8a\x63\x1b\xa4\xe6\x92\xa7\x12\xe0\xd5\x04\xfe\x83\xec\xbb\xac\x9a\x9e\xce\x8f\x3f\x35\xf5\x5a\x0c\x24\x81\xbb\x2f\xc5\x0d\x03\xf8\x7e\xf0\xa9\x47\xef\xc1\xcc\xa8\x9f\x98\x36\x07\xcc\x53\x19\xe1\xdc\x6b\x29\x75\xdc\xa5\x8b\x9d\xd6\x16\xe9\x47\x45\x95\x63\x53\xa1\x24\x7f\xeb\x80\x1b\xda\x21\x19\xa5\x4c\x15\x2f\xab\xd4\x49\xe2\x4c\x88\xeb\x14\x97\xdc\x8f\x82\x41\x27\x1e\x8a\xa2\xff\xa9\xf4\x2c\xde\xa9\x9a\x06\x1c\x4b\xd6\x9a\xa7\x0d\xc1\x0c\x98\x55\x06\x87\xc5\x3c\xd6\xdd\x5d\x1e\xd4\x9b\xa6\xa6\x6e\xd4\x8b\xe9\x73\x90\x33\x72\xf0\xb9\x28\xcd\xc1\x03\xe8\x25\xdd\x30\x16\x52\xe7\x40\x97\xad\x6e\x6e\xe5\xd2\xca\x76\xfc\xc8\x7c\xca\xd2\x6a\xb0\x09\xa5\x7b\x22\x49\x51\x4c\xde\x45\x5e\xe9\x10\x6a\xf5\xf2\x75\x01\x5e\x12\xce\x96\x6a\x1a\xf8\x86\xeb\x03\x5f\x75\x31\x53\x80\x15\x53\x9b\xdd\x78\x26\x2b\x03\x8b\x74\xb7\x69\xdd\xf5\x19\x9f\x59\x34\x05\xbf\x69\xa9\x0a\x3a\x8d\x86\xda\xf2\x68\xdd\xe9\x3d\xba\xa7\x73\xa4\xf2\xf2\xc4\x80\x4c\xed\xa3\xc4\xa5\x55\xd3\xa5\x15\x95\x53\xe5\x28\x81\xdb\xc2\x2a\x18\xb4\x7f\x44\x78\x22\xf0\x41\x6f\x63\x55\x72\xc2\x47\x7a\x85\xec\x1a\x54\xcc\x57\x81\x64\xd6\x86\x4f\x8b\x5f\xa1\x34\xa3\xdf\xbb\xdd\xee\x5e\x7e\xaa\x2e\xe6\x34\x21\x00\xdf\xa6\x15\xc8\x55\x44\x08\x45\x70\xce\x51\x77\x08\x81\x05\xe6\x82\x5c\x7b\xaf\xa6\x0e\xab\x50\x54\xe1\xf8\x86\xa5\x7f\x5b\xec\x6e\x5c\xde\x7f\x70\x39\xdb\x99\x2d\x8b\xd2\xbe\x24\x26\x05\xea\x9c\xf4\xfe\x52\x43\x07\x78\xc9\x26\x80\xe2\x7e\xd8\x34\x54\xc4\x07\x8a\xdf\xdb\xf3\xb6\xb3\x68\x0b\x32\x79\x65\xdc\xc8\x8b\xc7\xd7\x7a\x1f\xbc\xd3\x69\x3d\xc4\xbb\x60\xef\xcb\x4f\x5e\xde\xbc\xa7\x12\x99\xe7\x75\x42\xe7\xed\x6e\xba\xaa\xa7\x9b\xb3\x93\xa7\x94\x45\x54\x33\x5b\x5b\x46\xb5\xc9\x9d\x9d\x3c\xa5\xd8\xdb\x9a\x3a\xf8\x55\x0c\x26\x52\x96\xd4\xf8\x2d\x43\x64\x48\x75\x61\x01\x84\xbd\xb2\x42\x72\x45\x99\xab\x25\x05\x74\x15\x39\xf4\x41\xd0\x23\xb5\x2c\xcd\x7b\x4c\x7a\xa1\x05\xea\xce\x38\x1e\x85\x0c\x60\x1e\x9b\x0b\xe9\x66\x45\x85\x0c\x8a\xc9\xb5\xa4\x61\x3b\xdb\x55\x02\xbd\x22\x21\xfc\x28\x4f\x0d\x5c\x59\x21\x87\x87\x27\xc6\x44\x3b\xe0\xc1\x3c\xe4\x8b\x9f\xf2\x5d\xd3\x9e\x5b\x59\xf9\x85\xa2\x9e\x74\x59\x71\x70\x49\x95\x4c\xa5\x7a\x8d\x86\x78\xf5\x3f\xc5\x56\x22\x9b\x2e\x79\xa3\xf6\xd3\x8b\xf7\x1f\xcb\xbf\xbc\x5c\xfe\xb5\x69\x1b\x2e\x8f\xb8\x0a\xc6\x7b\x79\xb9\x1c\x6b\x4f\xa1\xd1\x5f\x5e\x2e\x8f\x9c\x10\x60\xe9\x0d\xb3\xef\xb2\x3a\x68\x5e\x75\x69\xa7\x69\xfb\xe3\xb3\xe2\x49\x67\x65\x25\xc8\x72\xd7\x41\xb4\x27\x0a\xe5\x48\xe2\xe5\x39\x03\xca\x98\x44\x26\x17\x43\xba\x05\xd0\xb4\x3e\xc2\x3b\xf9\xfb\x58\xce\x47\x76\xa6\xc2\xf2\x72\xf9\xb8\xe9\xcd\x03\x08\xf5\xca\x0a\x71\x66\x09\xff\x84\xe3\xe8\xab\x6b\x96\x7e\x44\x3a\xad\x9d\x17\x8f\x1f\x75\x5a\x3b\x24\x2a\x4f\x5d\xa7\xb3\x68\x0b\x9d\x35\x71\x94\xb1\x5f\x66\x84\x55\xa6\x06\xb1\x9d\xb3\xa7\xc7\x26\x8e\x91\x00\x32\xfb\x84\x18\x32\x09\xf5\x5a\x80\x56\x4b\x50\x46\x80\x4b\x84\x38\x12\x32\x6c\xb5\x66\x46\xa4\x55\x1d\x06\xb6\xf2\xac\xff\x54\x34\x6b\x0c\x30\x11\x40\x5c\x0a\xa8\x9a\x10\xe4\x2f\x06\x71\x9d\xda\xa2\x02\x81\xb0\x22\xf0\xe2\x9c\x7d\xce\x87\xff\x62\x87\x05\xa0\xf0\x98\x2d\x2d\xd2\xaa\xc9\x62\x8d\x22\xd2\xc4\x39\x56\x72\xa2\xe9\xd5\x82\x6a\xcf\xfd\x03\x5c\x12\xdf\xa4\x95\xa6\x2f\x80\x1f\x16\x4d\xbf\x66\x62\x01\xb4\x86\x99\x65\x05\x60\x54\x3c\x25\x13\x51\x33\xd8\x86\xc6\xe9\xa6\x2a\x4e\x95\x96\xcf\xd9\xe7\x6c\x31\x64\x81\x26\xd1\x11\xf3\x28\x4d\x45\x39\x0d\x32\x5a\xbc\x88\x94\x74\xac\x74\x52\xa5\x0d\xbf\x06\x06\xa8\x04\x9c\xae\x1f\x65\xb9\xab\xe4\x01\x8e\xa4\x30\x09\x1c\x08\xf6\xef\x10\x2b\xa8\x7b\xf1\xf3\xf0\xd6\xd6\x5e\x13\x70\x3b\xdc\xfa\xe7\x86\x24\x9b\x0d\x80\xe1\x90\xda\xc3\x4c\x0a\x07\x7c\x11\x50\xa9\x08\x76\x94\x96\xa1\x9a\xc8\x41\xbf\x2d\x22\xae\xd5\x18\xa8\x69\x82\x24\xf4\xd3\xb4\x79\xd8\x59\x6d\xa9\x06\x2a\x75\x22\xa2\x06\x97\x3b\xed\xab\x98\xe1\xc1\x8c\x47\xc8\xdf\x46\x0c\x23\xd6\xc4\xe7\x17\xf7\xbf\x68\x75\x5a\x0f\x05\xcd\x77\x11\xa4\xfa\x3c\x53\x1d\x27\x79\x73\x20\x20\x7d\x59\x9c\x34\x11\x0e\x14\x5f\x7f\x79\xb9\x7c\x02\x53\xf8\xd9\xee\x6c\x5b\x4b\x64\xd1\x71\xe7\x3d\xd2\x6c\x00\xde\xce\x09\x22\x59\x2b\x6c\xf3\x3d\x6d\xbc\x69\xd6\x9b\x75\x7e\x18\xaf\xac\x94\x11\x9c\x93\xa7\x24\x99\x5e\xd4\xf8\x58\x59\xd1\x4c\xf5\xb0\x5e\x36\x20\x6b\x37\x00\xae\x04\x07\x7d\x07\x07\x9d\x57\x1f\x33\x70\xd2\xd4\x40\x58\xa3\x2d\x28\xf9\x3c\x44\xfc\x48\xc0\xfd\xef\xc6\xf5\x23\xc1\x8f\x73\xf4\x0f\x7f\x70\xf5\x52\xfa\x65\x92\xbf\xc5\x06\x82\xff\xfb\x01\xf5\x0c\xec\xc3\xea\x8e\x48\xd6\x4b\xa4\xe9\x7d\xb0\xfd\x60\x21\xdc\x50\xc0\x71\x81\xe8\x09\x9a\x66\xc4\x0a\x00\x68\x4d\xbe\x04\x47\x29\x12\xf5\x34\xdc\x96\x85\x69\x59\x24\x1c\x57\x29\x64\xa0\x38\x5d\x36\xfb\x68\x3d\x6a\xd0\x9c\xa6\xf5\x4c\x7b\x26\xfc\x4d\xd4\x9c\x09\x85\xe9\xea\x93\xb4\xcf\xd7\xf2\x58\x8b\x0b\x35\x2e\x2c\x78\xba\x9f\xda\x4e\x17\xaf\x6e\xca\xfc\x3d\xeb\xcd\x37\x21\x06\xaa\x59\x17\xc3\xe6\x49\x23\x5e\xec\xd6\x0a\x92\x3d\xec\xd7\x73\xf6\x19\x07\xc0\x06\x01\xa2\x52\x02\x36\x54\xad\xe7\x7f\x2c\x1f\x29\x1f\xf9\xef\xc5\x68\xe5\x58\x85\x4e\x95\x5a\xc8\x10\x44\xc4\x9f\xe2\xd2\x91\xe7\xfe\xad\x17\x11\xbc\x96\x14\x48\x03\x5f\x5e\x2e\x8f\x8b\xc8\x54\x2e\x55\x9b\x8e\x9c\xf2\xfb\x62\x8b\x36\x5e\xda\xb4\x49\xc3\x75\xe6\x5c\x75\x86\x7f\x7a\x95\x2f\x57\xff\xb4\xff\xe9\x3a\x2c\x12\x75\xb8\x61\x4a\x51\xaf\x59\xa9\x50\xaa\x76\x54\xa4\xd7\xd6\xbb\xbc\xd1\xbd\x9a\x03\xac\x25\x91\x11\x84\x29\x55\x33\x00\xfa\x06\xf7\x52\xe2\xb8\x90\x60\x84\xa1\xce\x6a\x25\x62\x62\x00\x67\x32\x00\x6a\xfe\xa6\xd3\xfe\x0a\x42\x98\x03\x60\xfb\xf5\xce\x85\xed\x3e\x01\xd2\x73\xe8\x7c\x20\xba\x1e\x84\x66\xb9\x13\xb5\x52\xb4\x1a\x30\x33\x0b\x8e\x52\x0c\x6c\x02\x16\x92\x09\xc7\xf5\xd9\xee\x93\x1d\x8e\xa4\x2a\x99\x2b\x4c\x49\x90\x9e\x78\x62\xa3\xd6\xc6\x2d\x25\x7e\xad\x0b\x64\x62\x3f\xc6\xb0\x24\x71\xfe\xe2\x59\x35\xed\xf8\x86\x25\x3e\x0a\x31\xf8\xf4\x21\x4c\xf1\x72\x48\x50\x15\x1e\x62\xb1\x9a\x38\x7f\x55\x2a\xf6\x29\x5c\x2e\xb2\x57\xb6\xb8\x74\x8a\xa6\x66\xc4\x7d\xa4\x94\xc8\x0e\x05\x41\xd6\x17\x78\x43\x12\x9a\x67\xbc\x29\xa5\x94\x80\xb6\xae\x07\x8f\x4d\x59\xcd\x52\xd4\x47\x0e\x2f\x2f\x97\x8f\x63\xb6\xba\xd6\x01\x98\xab\xfa\xb8\x34\x8d\x36\x7e\x6c\x9b\x2e\x07\xae\x8c\x94\x6b\x3f\x0f\x55\xe0\xdf\x44\xef\xcb\x48\xfe\x1a\xa2\x62\xe2\x3b\x99\xc6\xca\x15\x95\x27\xb7\x7b\x66\xb2\x62\xa2\x04\xbe\xa7\x75\xda\x9b\x9c\x7e\x21\xee\x9c\x48\x73\x4d\x04\x30\x7b\xe9\xaa\x16\x73\x5d\x20\x1b\x11\x7f\x6c\x35\x78\x50\x7d\xd3\xb5\x86\x48\xc3\xa2\x86\x47\x05\x55\x0a\x31\xf0\x53\x5a\x9e\x2b\x23\x24\xdc\xb1\x5f\xfe\x72\xc9\x69\xba\xe7\x5d\xda\x70\xca\x15\xa7\xae\xee\x08\xce\x78\x14\xbe\xbe\x3e\x24\x67\x27\x4f\xc9\x20\x59\x21\x50\x6d\xf4\x27\x87\x5f\xfc\xb0\x76\x2c\xbd\xba\x5f\x00\xcd\x62\x48\x40\x90\xef\x2e\x28\xcc\x5a\x66\xbd\xc3\xed\xd4\xa7\x55\xb4\xd0\x84\x75\x26\x4c\xb3\xc4\x0e\xa2\x69\x5f\x61\xa1\x8a\x20\xbc\xff\xeb\x8d\xff\x2f\x00\x00\xff\xff\xb5\x7f\xf0\xde\x25\x2e\x04\x00") + +func cfI18nResourcesJaJpAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesJaJpAllJson, + "cf/i18n/resources/ja-jp.all.json", + ) +} + +func cfI18nResourcesJaJpAllJson() (*asset, error) { + bytes, err := cfI18nResourcesJaJpAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/ja-jp.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesKoKrAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xfb\x73\xdb\x46\xb6\x20\xfc\xfb\xfe\x15\xbd\xbe\x3f\xc8\x9e\x12\x29\xe7\x31\xb7\x6e\x69\x6b\xeb\x2e\x23\x2b\x8e\x26\xb2\xa4\xab\x87\x67\xb2\x61\x4a\x81\x88\x16\x89\x11\x08\x60\x00\x50\x8a\x46\xa3\x2d\x39\xa6\x53\x8a\xad\x7c\xb1\xc7\x52\x44\x67\x28\x0f\xfd\x8d\x12\xc7\xb3\xca\xb7\xb4\x2d\x27\x72\x5d\xe7\xfe\x41\x04\xf8\x3f\x7c\xd5\xa7\xbb\xf1\x20\xd1\x20\xf8\x92\x93\xd9\x7b\x6f\xd5\x44\x06\x81\x73\x4e\x77\x9f\x3e\x7d\xfa\x3c\x3f\xfc\x2f\x08\x6d\xfd\x17\x84\x10\xba\xa0\xc8\x17\xc6\xd1\x85\xac\x96\xd5\x16\xa7\xe6\xc6\xb3\xda\x85\x51\xfa\xdc\x36\x25\xcd\x52\x25\x5b\xd1\x35\xfe\x42\x73\xef\x06\x79\xe1\xbf\x20\xb4\x3d\x1a\x05\xe0\x03\xbd\x64\xa2\xdf\x2c\xcc\xce\x20\xcb\x36\x15\x2d\x8f\xac\x4d\xcd\x96\x3e\x41\x8a\x85\x14\x6d\x5d\x52\x15\x39\x8d\xd0\x9c\xa9\x1b\xd8\x0c\xfc\x64\x17\x14\x6b\x1c\xa1\xdc\x2a\xb2\xb0\x9d\x32\x4b\x9a\xa6\x68\xf9\x14\xd6\xd6\x15\x53\xd7\x8a\x58\xb3\x53\xeb\x92\xa9\x48\x2b\x2a\x4e\xe5\x4d\xbd\x64\xa0\x91\xad\xec\x05\x4d\x2a\xe2\xec\x85\xf1\xec\x85\x75\x49\x2d\xe1\xec\x85\xd1\xf6\x47\xdb\x23\x31\x43\x01\x2a\x9d\x93\x33\xf7\xe1\x5d\xf7\xf0\x14\x35\x5e\x9c\x90\x7f\x1c\x9d\x22\xb7\x72\xe2\xd4\xf7\x9d\x6f\x4e\xdd\xc7\x3b\xc8\x3d\xb8\xed\xde\x7e\xe1\xdc\xd9\x75\xee\x1c\xa7\xbd\x9f\xce\xbc\xd7\x77\x90\x73\xe7\xd8\x3d\xda\x6b\x3c\x7f\x85\x1a\xf5\x07\x81\x77\x87\x31\x9a\xa1\xce\xbb\x65\x4b\xf9\x7f\x9c\x79\x1f\xe8\x68\x04\xf3\xfe\x2b\xb4\x58\xc0\x16\x46\x16\x36\xd7\x95\x1c\x46\x86\x2a\x69\x16\x2a\x48\xeb\x18\x49\x1a\x92\x2c\x4b\xcf\x29\x92\x8d\x65\x94\xd3\x2d\x3b\x8d\x26\x4c\x2c\xd9\x64\x71\x24\xef\x0b\x45\xb3\x6c\x49\xcb\x61\xb4\xa1\xa8\x2a\x52\xb4\x5c\xc9\x84\x55\xa1\x5f\x08\x67\xf1\x57\xa8\x79\x70\xea\xdc\x79\x89\xdc\x72\xd5\x79\x59\x76\x6f\x1f\xa3\xe6\xfe\x9e\xf3\xb0\xea\x1e\xde\x45\xee\x61\xbd\x71\xba\xe3\xdc\xad\x22\xf2\xd3\xd7\x4f\x60\x6e\x1f\xee\x06\xa7\xd3\xfb\xca\x3d\x3a\x73\x6f\x1f\x37\xcb\xa7\xee\xed\x63\xe7\x9b\x57\xc8\x7d\x78\xcf\x2d\x3f\x6d\x1e\x54\x9c\x27\xa7\x88\x7c\xe8\x83\x70\xea\x55\xf7\xe6\x51\xf3\xe0\x09\x83\x22\x9a\x94\x8c\x61\x20\xcb\x96\x4c\x1b\xcb\x31\xa2\xc4\x3d\x78\x8a\xdc\x3b\x55\xf7\xe1\x3d\xe7\xee\x77\x62\x89\xc2\x80\xd9\x18\xe5\x0a\x92\x96\xc7\x32\xb2\x75\x0e\x7d\x14\xad\x94\x6c\xa4\xe9\x36\x46\x76\x41\xb2\x91\x62\xa3\x82\x64\xa1\xcb\xde\xa4\x5a\x69\x21\x01\x71\xf8\xb6\xb6\xd2\x19\xc3\x98\x91\x8a\x78\x7b\x1b\x6d\x48\x16\xc7\x87\x4a\x16\x59\x3c\xb6\x3c\xc5\xa2\xa4\xc9\xe8\xe3\xad\xad\xf4\x04\xfd\x7b\x7b\xfb\xe3\x98\xf1\x86\x5f\x44\xce\xdf\x6f\x39\xb5\x97\xee\x51\x19\xb9\x9f\x9e\xb8\x5f\x3f\x69\x1e\x54\xdc\xc3\x93\x30\x6a\xf7\xe0\x29\x2c\x1d\x9b\xa5\x8a\x7b\x18\x58\x43\xf1\x94\xcd\xe8\x48\x32\x14\x84\x35\xd9\xd0\x15\xcd\x26\x9b\x41\xcc\x48\x99\xb9\x29\xe4\x1e\xee\x3b\xf7\xab\xcd\x2f\x4f\xdc\xa3\xb3\xe6\xed\xb3\x46\x7d\x07\xb9\xe5\x63\xb7\x76\x40\x70\xb2\xad\x78\x50\xf1\x51\x8b\x10\xcf\xeb\x25\xb2\x14\x3a\x5a\xc1\xa8\xa4\x15\x25\xc3\xc0\x32\x91\x32\x9a\x6e\xa3\x5c\xc9\x34\xb1\x66\xab\x9b\x88\x3d\xb7\x75\x64\x17\x30\x92\x0c\x43\x55\x72\x40\x90\x98\x48\xe7\xf1\x8b\xe6\xc1\x3d\xc2\xf2\x6e\xad\xda\x3c\xa8\x21\xe7\xe8\x95\xfb\x75\x9d\xd1\xda\xac\x94\xdd\x87\x27\xc8\x3d\xa8\x91\x2d\xf0\xed\x89\xfb\x6a\xc7\x3d\x3a\x75\x6f\x55\xc8\x5e\xa0\x9f\x92\x81\x7c\x45\x37\x41\xab\x68\x11\x0d\x86\x9c\x84\x08\x2d\x59\x18\x8d\xe4\x56\x51\x51\x32\xd7\xb0\x6d\xa8\x52\x0e\xa3\x94\x85\x16\x26\xe7\xaf\x4f\x4d\x4c\x8e\x90\x51\xac\x2b\x78\x03\xc9\xd8\xca\x99\x8a\x41\x48\xb6\x90\xbe\x8a\x14\x4d\x56\xd6\x15\xb9\x24\xa9\x4c\x26\xe8\xab\x48\x42\x79\x65\x1d\x6b\x7c\xeb\x8b\x87\x4b\xce\x58\xe4\xfe\xed\x95\xfb\xd5\xa9\xfb\xb8\xec\x6f\x56\xf7\xa8\x82\x1a\xf5\xaa\xf3\xbc\x1c\xd8\xec\xce\xde\x4e\xf3\xa0\x4a\x16\xcc\xf9\xfb\x2d\xc2\x4f\xce\xf3\x53\xa7\x76\x4c\xb6\x6f\x0c\xe1\xb0\xd5\x3d\xc6\xbb\xf3\x3d\xe1\xb1\x4a\x87\xc9\xc8\x58\x96\x92\xd7\x90\xa9\xab\xd8\x42\x1b\x8a\x5d\x40\x23\x84\xa7\xe9\xc2\x2e\x59\xd8\xdc\xde\x06\xc1\xab\x9b\xf9\x14\x79\x69\x04\x91\x0d\x12\xfd\x8e\x65\x48\x39\x4c\xdf\x8a\x9f\x86\x0e\x28\x88\xf4\xef\x88\xa1\x6d\x97\xb9\x87\xdf\x37\x0f\x6a\xf0\xf8\xf1\x8e\x5b\x3b\x48\x3e\x07\xc0\x0f\x04\xdf\xbb\x8b\x92\x99\xc7\xb6\xb7\xa3\x81\x15\x6c\x78\x86\x34\xbc\x81\x00\x7d\x87\x15\xbe\xb9\x8b\xdc\xca\x0d\xf7\xf0\x7b\x58\xb6\xbd\x1d\xf7\xe6\x0d\xb7\xfa\xca\x79\x54\xf5\xc9\xe2\x2b\x19\x89\xd2\x3d\x2a\x5f\x74\xbe\x79\x75\xa9\xeb\x95\xf4\x46\x21\xa2\x5e\x37\xf3\x09\x68\x7f\x54\x77\x1f\xdf\x48\x46\x7b\xff\x34\x97\xd8\x4e\x54\xf5\xbc\xa2\xa1\x94\x84\x88\xe4\x4a\xa5\xac\x35\xc5\x48\x59\x96\x9a\x02\x1d\x07\xc8\x1c\x41\xba\x09\xaf\x12\x29\x18\xf3\x16\x39\x48\x4a\x86\x61\x62\x8b\x2a\x42\x08\x9b\xa6\x6e\x76\x18\x37\xa8\x29\xc7\xce\x37\x15\xd8\x41\x5f\xbd\x00\x81\x54\x09\x6c\xb8\x24\xf4\x39\x95\xbb\xce\xed\xfd\x04\x34\x86\x39\xb7\xf3\x44\x29\x06\x9d\xa8\x8f\x25\x59\x4e\x19\x6a\x29\xaf\x68\x29\x13\x1b\xfa\xc7\xde\x79\x65\xeb\x48\x92\x65\x44\x1e\x5a\x22\x09\x14\x0d\x1e\x21\x34\xf1\xee\xf2\x4c\xe6\xda\x24\xca\xe9\xc6\x66\xca\xd2\x4b\x66\x0e\xa3\x85\xd9\xa5\xf9\x89\xc9\x54\x66\x6e\x0e\x2d\x66\xe6\xaf\x4e\x2e\xc2\x9f\x1f\xa6\x2c\xfe\xcf\x85\xb9\xcc\xc4\x24\xfa\x30\xa5\xf3\x07\xb3\xf3\x57\x3f\xfa\x08\x7d\x98\x4a\x69\x7a\xca\xc4\x70\xb6\x7e\xd4\xe5\x39\x8d\x10\x9a\x05\x61\x2b\xa9\xea\x26\x32\x4c\x7d\x5d\x91\x31\x92\x90\xaa\x58\x36\x11\xb5\x30\xda\x94\x8c\x55\xa5\xa8\x90\x83\xdb\x96\xf2\x16\xd5\x11\x40\xcd\x5a\xc1\x68\xc3\x54\x6c\x1b\x6b\xfc\x18\xba\x3e\x91\x99\x5b\x66\xc2\x71\x01\x05\x54\x46\xc4\x55\x46\xb4\xaa\x9b\x48\xd2\x36\xd1\x8a\x5e\xd2\xe4\xe0\xb9\x25\x9c\x47\x84\x90\x5b\xae\x35\x6f\x1e\xb9\x35\xbe\x39\x9c\xfa\xbe\x7b\x74\xe6\xec\x3f\x21\xda\x59\xc4\x89\x75\x54\x69\x21\xa5\xf9\xa0\xd2\x78\xf6\x13\x72\x9e\xef\xb8\xbb\x70\xa0\x35\xce\xea\xce\xa3\x23\x72\x08\xba\x9f\xbf\x6a\xde\xab\x12\xa8\x44\x27\xfe\xa1\x4c\x40\x36\x6f\x56\x1b\x3f\x9e\x11\x30\xce\xdf\x9f\x38\x8f\x8e\x80\x81\x6a\xd5\xc6\xf3\x17\x09\x18\x28\x7a\x56\xd9\x71\x95\xb2\x0c\x9c\x53\x56\x95\x1c\xca\xe9\xda\xaa\x92\x2f\x99\x30\x4e\x64\x48\xa6\x54\xc4\x36\x36\xc9\x45\x03\x49\x08\xb8\x97\xde\x44\xf4\x95\xdf\xe3\x9c\x8d\x14\x2d\xa5\x2a\x1a\x4e\x67\xb5\x00\x0b\x95\x0c\x59\xb2\x71\x8a\xab\xc1\xa9\x5c\x72\x65\x9c\xdc\x21\x44\x0c\xb0\xaa\xa8\x98\x10\x68\x4b\x8a\x06\xb7\xa0\x3e\x89\x4f\x23\xc0\xb5\x58\xc0\xc8\x90\xec\x02\x67\x97\xc0\x77\x14\xa3\xa4\x11\xa6\x22\x3a\xff\x8a\xa5\xab\x44\x0d\xd2\x4d\x64\x62\xc2\x0b\xeb\xfe\xa7\x94\xbe\x4e\x13\x31\x97\x59\x7c\x6f\x79\x71\x76\xf9\xdd\xa9\xe9\x49\x36\xd6\xc9\x4f\xa4\xa2\xa1\x62\xc2\xda\x6d\x24\x8e\xc3\x1b\x5b\xf0\xbf\x08\xa1\xec\x85\x9c\x5a\xb2\x6c\x6c\x2e\x6b\xba\x8c\xad\xec\x85\x71\xff\x37\xfa\xb3\x5e\xd2\x6c\xf2\xf8\xd7\xa3\xa1\xe7\x45\x5c\xd4\xcd\xcd\xe5\xe2\x0a\xf9\xed\x8d\xcb\x6f\xbe\xcd\x7f\xdd\x86\x3f\xb6\x93\x33\xb9\x7f\x59\x03\x32\x89\xbc\x3c\xdb\x73\x6b\x47\xcd\xdb\x67\xe4\xbe\x41\x94\xb7\xa3\x33\xb8\xa8\x70\xcd\x86\xa8\x34\x8d\x17\x27\x6e\xf9\x29\x72\x1e\x1f\x83\x8e\x43\xf8\x1d\x64\x6c\x3b\xf7\x0e\x98\x91\xba\x20\x3f\x29\xd1\xcd\x2f\x4f\x9a\x07\xdf\x91\x83\xe1\xf6\x3e\x6a\xee\xed\xb9\x64\xc8\x91\x3b\x91\xf2\x57\xf0\x7b\xef\xfd\x0a\x6a\x3c\xfb\xc9\x79\x54\x0d\xc2\xa8\x20\xb7\xb6\xeb\xec\xed\xf0\x23\xc4\xbd\x79\x83\xfc\x8b\xbe\xe8\x3e\xbc\xe5\x5d\x0e\xba\xe5\xb0\xb8\x41\x13\xac\x95\xdd\x73\xe3\xb3\xd7\x20\x9b\xc6\xd9\x2c\xf0\x29\x5b\x51\x34\xd9\x9b\xb0\xcc\xdc\x1c\x7d\xca\x84\xf2\xf2\xd4\xcc\xc2\x62\x66\x66\x62\xf2\xff\x62\xa9\x95\x7c\x82\xfa\x95\x66\x06\x36\x8b\x8a\x65\x91\x73\x96\x30\x4c\xf6\x82\x89\x25\x39\xa5\x6b\xea\x66\xf6\xc2\xcf\x4f\x30\x9d\x13\x17\xfd\xa3\x8b\xac\x7e\xd8\xab\x07\x49\x96\x80\xc7\x7e\x06\x42\x29\x67\xe2\xa0\x1c\x67\xb3\x81\xe6\xa6\x33\x33\xbf\x20\xd1\x34\x78\xc9\xd4\xef\x3c\xfd\xa7\xbe\xd5\x9d\x58\x1b\x36\x1f\xbe\x56\xe1\x96\xd5\x06\x2f\xd8\x06\xcd\x9d\xbf\x00\x5d\x6d\x8e\xec\x50\xab\xa0\x97\x54\x19\x36\x32\xfa\xa3\x62\xc0\x66\x1d\x45\x12\x2a\x99\x2a\xdd\xbd\xfe\x43\x72\xb7\x46\xaa\x9e\x93\x54\x24\x2b\x26\xce\xd9\xba\xb9\x99\x46\x73\xba\xa5\x80\x58\x51\x2c\x24\x21\x03\xfe\xb5\x8e\x91\xa2\xd9\x38\x8f\xcd\x51\x64\x61\xdb\x42\x86\xa9\xe8\xa6\x62\x6f\x8e\x82\xb9\x51\xb1\x90\xa5\x83\xb1\x7e\xd5\xd4\x8b\x48\xd5\x37\xb0\x65\x13\x6c\x05\x25\x5f\xc0\x62\x97\x0a\x42\x81\x15\x26\x74\xd1\x55\x1e\x0d\xfc\x4d\xe6\x76\x69\x7e\x9a\x2f\x37\x59\xe4\x7f\x3f\x41\xce\xfe\xbe\x53\xfb\xbc\xf9\x59\x8d\xdc\xe3\x0f\x4f\xdc\x83\x57\xc8\x77\x91\x20\xb7\x5a\x76\x5f\x02\xd7\xb9\x5f\xdd\xa3\x2c\x73\x40\x2e\xf2\x47\xa7\xce\x93\x3a\x72\xbf\xae\xbb\xe5\x9a\xbb\x5b\x75\xab\x65\xd8\x7b\x60\x75\x6f\x1e\x54\x1a\xcf\x6b\xc8\xf9\xf4\xff\x73\x8f\x76\x10\xfd\xd5\x3d\xbc\xeb\x96\xab\xc8\xf9\xec\xcf\x81\x67\xe4\x7f\xe9\x0e\xa9\x1d\x38\xb5\x13\xe7\x6e\xbc\x67\x86\xcb\x5d\x2a\xdb\x65\x2a\x45\x7b\xd0\x01\xa7\x6c\xbe\xb2\xd4\xd1\x85\x2c\x45\xcb\xab\x18\x49\xa6\x29\x6d\x52\xc3\x70\x40\x5c\x92\x83\xc0\x22\x67\x09\x35\x91\xaf\x50\x0f\x0a\x46\x66\x49\xc5\xb1\x96\x13\xd8\x9b\xce\xdd\x6a\x9f\x2a\x05\xfb\xe6\x10\x5e\x6c\xfc\x58\x75\x5f\x3e\x80\xad\x0f\xf6\x72\x26\x11\xda\xb6\x11\xb8\x15\x40\x66\x80\x51\xe5\xa0\xe2\x7c\x0a\xb6\x19\xa7\x5e\x77\x0f\x4f\xb9\x3f\xed\xab\xd3\xf0\x6a\x0f\x6d\xda\x29\x04\x38\x19\x03\x33\x0f\xc3\xeb\x6b\xf6\x29\x5c\x78\xfd\x1d\xc9\xc2\x68\x96\xe9\x1f\x16\x55\xf1\xf4\xa2\x62\x93\x9d\x44\xf6\x15\x51\x86\xe0\x4b\xeb\x0f\x25\xc9\xc4\x68\xc5\x94\x72\x6b\x64\xfb\x91\x1f\x83\x8e\xce\x82\xa2\xca\x5c\x91\x21\x2f\x9a\xf8\x0f\x25\xc5\xc4\x32\xd1\x07\x6c\x36\x8a\x34\x42\x4c\x94\x5d\x87\xd3\xf5\xf7\x96\xae\xd1\xe1\x61\x7a\xf0\x52\xf9\xf5\x21\x93\x36\xbe\xac\xca\x5e\x30\x4c\xdd\xd6\x73\xba\x4a\xf5\x34\x3b\x67\x90\xb3\xc4\xff\x59\xc6\x96\xad\x68\xc0\x47\xf4\x8d\x37\x2e\xa7\xdf\x7c\xfb\xed\xf4\x1b\xe9\x37\xfe\x25\xfc\xa6\xa1\x9b\x36\xd3\xf6\xde\x7a\xeb\xf2\x3f\x33\x45\x8f\x4b\xb6\x8f\x86\xca\x98\x21\xa6\xcc\x6a\x43\x66\x4b\x1f\x1b\x11\x21\x00\xb4\x71\x56\x77\x9e\x9f\x85\x60\x13\x84\xf4\x74\xb9\x79\xe4\x3c\x7c\xe1\xdc\xad\x10\x09\xe5\xec\xed\x34\x4e\xcb\xcd\xca\x99\xfb\x60\x87\xf9\x95\x09\x5e\xb7\x5a\x0e\x7f\xfc\x78\x0f\x35\x0f\xca\xee\xd7\xfb\x01\xb4\xd1\xa7\x15\x25\xc6\x3f\xa4\x5e\xeb\x22\x8b\x36\xec\x75\x05\x6f\x20\x49\x55\xf5\x0d\x30\xfd\xfe\xa1\xa4\xdb\x12\xf7\x79\xf1\x83\x9c\x3e\x14\xb9\xaf\x10\xf2\xdf\x6c\x1e\xd4\x9c\x3b\x2f\x9d\xbf\x7e\x3e\xc2\xd6\xa0\x79\xb8\xeb\x7e\xfd\x04\x35\xea\x3b\xce\xed\x6f\x9a\x07\x55\xff\x0d\xe4\x3c\x3f\x6d\x9c\xd5\x05\x84\x49\x32\x11\x20\x92\x85\x84\x58\x9d\x3b\xc7\x64\xa6\xc9\xf9\xf2\x6d\x99\x9f\x0e\x3f\xec\x13\x4c\x77\xbf\x43\x82\x38\x06\x24\xeb\x98\x7a\x69\xf1\x27\x8a\x65\x13\x04\x12\x78\x08\x44\x58\xdc\xda\x8e\xfb\xf0\x1b\xf7\xb3\x3d\x00\xff\xe8\xd4\x7d\x78\x42\x98\x82\xb9\x56\x8f\xf6\x92\xa3\xd1\x90\xb4\x2e\x29\x2a\xcc\x32\xf5\x57\x00\xe2\x2e\x3d\x13\xab\xba\x89\x84\x33\x02\xbe\x29\x24\xf8\x92\x28\x16\x2a\xb9\xed\x6d\x72\x27\xbf\x70\xcc\x47\xa7\xce\xff\x39\xf3\x43\x16\x92\x00\xd4\x0d\xa3\x33\xc0\xe3\x7b\xee\xe3\x9d\x58\x80\xb8\x68\xd8\x9b\xc2\xf1\xbd\x2c\x73\xd7\xb6\x70\xe2\x99\x0f\xde\x9f\x6a\x36\xcd\x62\x3e\xf2\x56\x98\x71\x2c\x77\x42\xd5\x10\xd1\x8a\xdd\xc3\xcf\xdc\xa3\x3d\x21\x3b\x31\x74\x26\xb6\x0c\x5d\x93\x15\x2d\x9f\x46\x73\x2a\x26\x07\x4c\x51\x5a\xc3\xc8\x2a\x99\x18\x29\x36\x55\xea\xe8\xf5\x2a\xc1\xd2\x93\xf9\xba\xd8\xa8\xef\x5c\x42\xee\xd1\x3d\xe7\xce\x8b\x00\xc3\x45\x85\x09\x35\xf7\xf7\x9c\xbf\x9e\x80\x2f\xe4\x2c\x30\x9a\xa3\x33\xf2\x51\xf3\xc1\x81\x7b\x74\x96\xc4\x23\x42\xc6\xb1\xaa\x97\x34\xf1\x2a\xd6\xff\x03\xe4\xb6\x37\x2b\x02\x40\x26\x2e\xea\xeb\x9e\x56\xca\xdc\x54\xe0\x85\x53\x6c\xdd\x54\xb0\xd5\x71\x25\xb8\x47\x87\x2d\x48\xad\xda\x78\x5a\x17\xb2\x4d\xf6\xc2\x1c\x4c\xa9\x95\xbd\xc0\x0f\x63\x6f\x28\xfc\x24\x66\xeb\x83\x65\x24\x4b\xb6\x24\x0c\x47\xb8\x10\x9c\xca\xec\x85\xb0\xdc\x27\x4a\x2b\x2c\x07\x72\xbe\xa8\xbb\x47\xa7\xcd\x72\x9d\x13\x18\x9e\x98\x0e\xf1\x16\x23\x1e\x8f\x22\x13\xe7\x15\x72\x57\x81\xa8\x29\x70\x5a\xa6\xd1\x02\xa6\xce\xdf\x02\x56\x0d\x11\xcf\x8e\x78\x0c\xe2\xdc\x7f\xea\x3c\x3a\x82\xf8\x27\x16\x65\x73\x8a\xdc\x83\xb2\x73\xe7\x01\xe7\x13\x02\xcb\xf9\xb2\xec\xfe\x65\xc7\x79\x7c\x97\x7a\x59\xeb\x67\xee\xa3\x7a\x02\x96\x18\x31\xf5\x92\x8d\xad\x91\xd0\xed\x86\x2c\xa8\x88\x2c\xf6\x3e\x5c\x19\x98\x4f\xee\xd4\x3b\xa3\x05\xcb\x37\xb2\xb5\x95\xbe\x8e\x4d\x4b\xd1\xb5\x85\x82\x6e\xda\xdb\xdb\x7e\x30\x05\x7b\x3e\xad\x6b\x79\x78\x6c\x62\x24\xa9\x96\x8e\xa4\x5c\x0e\x1b\x36\x96\x45\x0b\x19\x05\xd3\xa9\x7f\x19\x01\xd3\xf9\xb2\xcc\x8e\x28\xff\x4a\x21\x10\xa0\x97\x3c\x69\x07\x32\x5d\xa8\xd0\x5f\x0a\xec\x5e\x2a\xf6\x82\xf1\x68\xd1\xb0\x7f\xf5\xab\x8c\x6d\x63\x8d\x80\x18\x47\x8c\x9d\x61\xb8\x2b\x8a\x26\x91\x2d\xe3\x39\x71\x57\x36\x91\xa1\xc3\xab\x60\xbd\x2a\x69\xb6\x49\xae\xbb\x32\x92\x4a\x76\x41\x37\xad\x34\x9a\xd2\x2c\x5b\x52\x55\x98\xc4\x92\xc5\xcf\x1a\x0b\x49\x36\xda\xd4\x4b\x26\xd2\x37\x34\x64\x2a\xd6\x5a\xfa\x57\xbf\x22\x6a\xcb\x15\x9d\x3c\x46\x1b\x92\x06\x77\x47\x85\x7d\x0d\xa6\x2a\x2a\xaa\xb6\xb6\xd2\x94\xa4\xed\xed\x7f\x15\x8c\xf9\x57\xbf\x72\xff\x46\x74\xc2\xf1\x90\x30\x82\xfb\xdb\xc3\x9a\xfb\xf0\x24\x60\xe1\xb8\x53\x73\xfe\xdf\x7a\x40\xba\x82\xee\x08\x91\x78\xee\xc3\xbb\x10\x8f\x75\xff\x14\xbd\xe9\x3e\x2e\x07\x75\xc8\x90\x84\x2b\x1f\xbb\x2f\x2b\xa0\xa4\x81\xa4\x86\xc8\xa0\xfd\x3a\xe8\x02\xd5\x72\xf3\xb0\x02\x68\xe9\x4f\x0f\xef\x52\xff\xf0\xff\xf6\x81\xd1\x51\x07\xc6\xd4\x42\x72\x99\x21\x80\xfd\x51\x6d\x3c\xab\xd1\xb5\x6b\xbc\xdc\xfb\xd7\xe8\xb5\xcb\x78\x01\x07\xaa\xa2\x61\x64\xeb\xba\x4a\x27\xd2\xc6\xa6\x94\xb3\xa9\x2a\x35\xa1\xea\x25\x19\xbd\x4b\x64\x92\x29\x3a\xdf\x42\xef\xc0\xf8\x6e\xde\x20\xea\xe8\xc3\x7b\xec\x3c\xa2\x5b\xbc\xf9\xd5\xe7\x64\x43\x37\x5e\x9c\x08\xe8\xb9\x72\x65\x6c\x7e\xf2\xda\xec\xf5\x49\x34\x37\xbd\x74\x75\x6a\x46\x80\x2e\x3c\xa9\xa0\x38\x8d\x51\x51\x9b\x10\x2e\x9a\x9f\x9c\x9b\x5d\x98\x5a\x9c\x9d\xff\x20\x11\x0a\x4f\xba\xf7\x89\x6c\xbc\x0f\x6c\xe3\x09\xd1\x25\xc3\x91\x08\xf2\xf5\xcc\xcc\xc4\xe4\x15\x01\xbc\xc6\xf3\x5a\xe3\xec\xf3\xf8\x4f\x45\xb4\xd0\x6f\x45\x78\xa7\xa7\x32\x0b\xa2\x2f\x9d\xe7\x65\xe7\xef\xb7\x44\x5f\xce\x4d\x81\xed\xc7\x0b\x93\xea\x4a\x41\x25\x5f\xf3\x70\x4c\xc1\x87\x11\x71\x98\x9d\x61\xa1\x8b\x38\x9d\x4f\xa3\x82\x6d\x1b\xd6\xf8\xd8\x98\x64\x28\x69\x76\x81\x4e\xe7\xf4\xe2\xa5\xe4\xa8\x2e\x92\xeb\x98\x18\x4e\x67\x42\x7c\xe5\x42\xb2\xe1\x44\x59\x9a\x9f\xde\x16\x46\x81\x77\x06\x28\x5a\xa4\x08\xda\x63\x56\xcc\x83\x06\x71\xb5\x73\x53\x93\xec\xdf\xdb\x22\xe3\x7a\x14\xf8\xf6\x6f\x7b\xc0\x87\x2e\x92\xdf\xd7\xe9\x31\xcb\x7f\x66\xa7\xee\xf6\x76\x17\x2b\xd5\x0e\x1a\x20\x3b\xcf\xca\x6e\xad\x1c\x01\x38\x19\xad\x3d\x4f\x4c\x92\x59\xe1\xa3\xee\x92\x19\xe6\x16\x04\x1f\xb8\x07\x4f\xc5\xdf\x88\xb0\xb8\x07\x4f\x85\x8c\x32\xe7\x19\xdc\x45\x28\xc5\x5f\x92\x0b\x7e\x77\x1f\xe5\x72\xd8\xb2\xe0\xca\x1a\x88\x0c\x36\x24\xd3\x56\x72\x25\x55\x32\xd1\x8a\xa9\xaf\x61\x51\x18\x62\xf3\xf6\x4b\xb7\x76\x80\x9c\xb3\x3d\x30\x3f\x43\x48\x70\x7b\x2c\xf0\xc1\x23\xb7\x7c\xe6\xde\x3e\xee\x48\x01\xf7\x42\x68\x52\x11\xb7\x11\xc2\x7f\xd4\x57\x57\xb1\xa9\x68\xa2\x88\x50\x46\x52\x20\xa5\xa0\x72\xdc\xfc\xe2\x95\xf3\xf8\x06\xd8\xc3\x02\x99\x06\x60\x93\xe8\x82\xcc\x3f\x94\x14\x48\x65\x61\x19\x34\xc8\xc2\xb9\x92\xa9\xd8\x9b\x08\xb2\x37\x2c\x30\x84\x6c\x6d\xa5\x4b\x16\x36\x35\x88\x98\x17\x5e\x0d\xc2\x6f\x5d\x74\xab\xaf\x2e\x51\xbd\xeb\x18\x14\x87\xe7\xa7\xee\xc1\x2e\x6a\xfc\x78\xe6\xfc\xed\x25\x6a\x7e\xfd\x85\x73\xff\xa8\x13\x4d\x2c\xbb\xa4\x85\x26\x42\x52\x08\x97\x80\xa0\xd0\x3b\x3e\x39\xb7\x8f\x9b\xb7\xf6\xc8\xf5\xe0\xf1\x41\x37\x44\xc9\x32\x92\x20\x6c\x37\x70\x8d\x86\x6b\xa5\x48\xa9\x72\x6f\xee\x0a\x2e\xc8\xec\xf8\x8e\x43\x54\x32\x55\x64\xf2\x48\x7f\x49\x43\x92\x61\x88\xf7\x1c\x59\x6e\xf0\x99\xf0\x80\xfd\x4e\x08\x60\xbd\x01\x3a\x3f\x44\x00\x4d\x6b\x56\x86\xa2\x21\xdd\xcc\x93\x67\xb3\x66\x9e\x3d\x1b\xa3\x41\xd7\xe4\xe1\x02\xf9\x83\x3d\xa6\x4b\xb2\xe4\x4d\x77\x3a\x2d\xba\xa4\x84\x5e\xf3\x56\x25\x84\x83\xc6\x3c\x8f\xb5\xa0\xe0\x51\xdc\x95\xf6\xfc\x8d\xc3\xbb\xfe\x40\x5a\x27\x01\xb9\xc7\xf7\x08\x35\xd1\x73\xa1\x2a\x92\xd5\x92\x5e\xc2\x6f\xee\x6c\x9d\x57\x30\x99\x2d\x76\x39\xa1\xa9\x16\x12\xd2\xa8\x07\x61\xe2\x5d\xae\x81\x8f\x49\x04\x52\x1a\xa1\x79\x0c\xdb\x9c\x00\x68\x01\xcb\x75\xf5\x0e\xe0\xc9\x9c\xcb\xd8\x24\x0b\x82\x35\x6a\x47\xa2\x0e\x06\xf2\x02\xf5\xff\xb3\xfb\x95\x68\x86\xe9\x2d\x02\x6c\x5e\x47\x67\x2d\x77\x8c\x0a\xa2\x1a\x58\x0b\x71\xde\xc5\x91\xd9\xac\x27\xde\x65\x2a\xff\x18\x7d\x3d\x70\x23\x6a\xbb\x04\x1d\x95\x3d\x1b\x6b\xa5\xf1\x6c\x0f\xf9\x91\xda\xf1\x84\x44\xe6\xea\x70\x01\x76\x54\x46\x4e\x7d\xbf\xf1\x1f\x67\x9d\x2c\x05\xd1\x2b\x48\xd6\x28\xb4\x32\x64\x5e\xd9\x8c\x8f\x78\x37\x30\xca\x41\x23\x69\x84\x3e\xd0\x4b\x28\x07\x96\x06\xdb\x24\x57\x5b\x36\xdd\x64\x69\x44\x5f\xc1\x2a\xd8\x05\xac\x05\x2e\xae\x8a\xc5\x5f\x0f\x2e\xa3\xa2\xad\xeb\x6b\x71\x2c\x91\x46\xe8\x3d\x7d\x03\xaf\x63\x73\x14\x6e\xc4\xcc\xe8\xb1\xaa\x98\x96\x8d\x56\x4b\xf4\xb6\x2d\x63\xd3\xb2\x19\x4e\xa4\x14\x0d\x72\xc1\xd3\x57\xc3\xb4\x92\x9f\xc0\x44\x40\xfe\xd1\x4e\x31\xa5\x4d\xc4\x36\xf1\x8c\xd1\x0e\xad\x8d\xb1\x04\x0c\x23\xcc\xc9\x22\x37\xcc\x1f\xaa\x84\x6b\xce\xea\x70\x81\x3e\x38\xed\x88\xa6\xec\x31\x15\x5c\x7d\xc0\xac\xff\x97\x32\x64\x0c\x88\x2e\xd3\xec\xbe\x1f\x4a\xcd\x23\x02\xff\xaf\x27\xce\xa7\x15\xc2\xf0\xee\xa3\x4e\x78\xc3\x48\xa9\xfb\xff\x46\xf3\xab\x6f\x00\xcd\x03\xa2\x14\x36\x1f\xee\x12\x22\x9a\x07\xa7\xcc\xb1\x9c\xdc\x75\x99\x51\xd5\x80\xd1\x78\x62\x7a\x8a\xb3\x85\xc8\x5a\x29\x04\xa3\x6f\xa0\x85\x85\xf7\xc0\x46\xc5\x54\x0f\xf0\x25\xc6\x24\xc9\x30\x99\xea\xab\x0b\xe4\x7b\x4f\x65\x60\xf6\x29\x11\x3e\x4b\x47\x32\x56\xb1\x8d\x21\x62\x9f\x65\x9c\x51\x43\x9c\x88\xc5\x58\x9e\x58\xd5\x97\xd2\xce\x97\x65\xe4\x7e\xfa\xbd\x5b\xab\x0a\xd0\xd0\x33\xa8\x58\xb2\x6c\xb4\x82\xd9\xbd\x10\xcb\x68\x05\xaf\xea\x26\xff\x37\xcb\xf6\xec\x3c\x50\x61\x1a\x0d\xb0\x60\x0d\x14\xa7\x0e\x19\x37\xf1\x36\xc5\x8c\xf0\x9c\x16\xbe\x2f\x72\xaa\xb8\x07\x4f\x05\xf6\x40\xf2\x91\x97\xd2\x0a\xd9\x17\x31\x20\x82\xb9\xa7\xa8\x79\x50\x6d\x3c\x2f\xc7\x40\xa5\xf6\x61\xa2\x77\x89\x6d\x9c\xe2\xcf\xe1\xe8\x53\xa8\x63\x8b\x39\xa4\x57\x15\xac\x8a\xec\xfa\x94\x3c\x2a\xef\x77\xc0\xb5\xb9\x5b\x21\xff\x71\xee\x57\xdd\x87\x31\x54\x86\xce\xff\xb0\xbf\x2b\x46\xeb\x68\x4f\xf9\xec\x6c\x31\x6f\xc3\x06\x83\xdb\xd0\xcd\x35\x88\x8c\x59\x53\x0c\xc3\xd7\xa5\x20\xe8\x88\xe0\x4b\x4a\xc2\x0e\x98\x1f\x0f\x6f\x81\xb1\x10\x62\x55\x02\xca\x0b\x35\x4c\x92\xc3\xf5\xe9\xa9\x53\xde\x75\xaa\x22\x75\x2e\x8a\x44\x66\x2e\xa6\x59\x34\xb6\x0e\xda\x1a\xbd\x68\xd0\x97\xba\x9a\x26\x6a\x4b\x6e\x05\x01\x42\xc3\x4f\xb4\xf1\x52\x3f\xbb\x9d\xd1\x4e\xce\x1f\x21\x18\xac\xc9\x90\xd4\x45\x58\x0d\x5b\x36\x92\x15\x29\xaf\xe9\x96\xad\xe4\x2c\x1a\xd5\xa1\xea\x79\x88\x77\x10\x09\xa3\x47\xd5\xc6\x8f\x67\xbe\xdf\x1e\x80\xb9\x5f\xef\xbb\xcf\xbe\x47\xee\xe3\xb2\x73\xe7\xbb\x78\x35\xda\xcf\x4d\x42\x05\x2c\xa9\x76\x01\xe5\x0a\x38\xb7\x86\xec\x4d\x03\x33\x9b\xd1\x88\xa1\x9b\x36\xcd\x94\xd3\x74\x0d\x8f\x88\x4c\x10\xed\x39\x4a\x60\x81\xbd\x59\x65\x4e\x34\xe4\x56\x6b\xcd\xca\x01\x35\x20\x8d\x34\xbf\x3c\x69\xde\x3e\xf3\x13\xdc\xa8\x4b\x6c\x44\x64\x86\x08\xd0\xe9\x09\x0d\x45\x93\xf1\x27\x5d\x10\x13\x94\x21\xee\xcd\xcf\xdd\x23\x91\xdd\x2c\x80\x4c\x55\x56\x71\x6e\x33\xa7\xe2\x2e\x6d\x12\x01\x10\x21\x46\x81\x23\x80\x70\xcb\x0a\xf6\xe2\x61\xb1\x4c\x8d\xdc\x2b\xba\x5d\x40\x9e\xd3\x08\x9c\x38\xb2\x5e\x94\x14\x6d\x64\x8c\xfd\x21\x8c\x21\x68\x61\xf9\xf6\x64\xb1\xb2\x0f\x18\x3c\x39\x6d\x80\x91\x73\xaf\x02\x31\x01\x34\x49\x0c\x32\xfb\x6b\x1d\x9d\x95\x83\x1a\x67\x41\xb7\xec\x91\x31\xf8\xcf\xe0\xc6\x18\x02\xfa\x7a\xc7\xa7\xe9\x29\x42\x06\x39\x5a\x06\x36\xbc\x20\xcc\x9e\x47\x67\xf5\x60\x05\xa3\xc9\xdd\x12\x0d\x6b\x61\x57\x7b\x71\x1a\x30\xd3\x44\x0e\xef\x06\x42\x57\xa8\x1a\xd2\x01\x3c\xbd\xa2\x53\x24\x32\x5e\x55\x34\x1a\xe0\x09\x52\x31\x99\x3a\x48\xff\x0a\xe2\xad\x1d\x80\xde\x9b\x1c\xbd\xa9\xab\xd4\x7a\x41\xee\xaa\x22\x53\x9b\xef\x2d\x3b\xbc\x4b\x2e\x8f\x0c\x2f\xcd\x1d\x4f\x84\x8d\xea\x87\xbd\x21\x83\xf9\x4d\x8e\x0c\xcb\xe8\xba\xa4\x96\x84\xb3\x07\x00\x20\x66\xad\xfe\xe7\x38\x38\x54\x65\x50\xc1\x88\x32\xaf\xab\x98\x9a\x5f\x08\xe1\xa8\x2d\xcb\xde\xb7\xc1\xd0\xc4\xf4\x59\x33\xbf\xbd\x8d\x62\xcd\x2b\xc1\x17\xb9\x32\x5b\x69\x87\xdc\x3a\x1b\x3e\x31\xa1\x09\x89\xb7\x9f\x24\x18\x0f\x25\x27\x76\x38\x01\xa3\x12\x7d\x0c\x76\x1f\xcf\xac\x14\xa2\x3b\x76\xe8\xa1\x37\x83\xc6\xa5\xf6\x39\x19\x6b\x43\x16\x32\x30\x85\xa8\x16\x4f\x55\x40\x61\x3b\xb7\xd9\x1a\xe2\xa4\x74\x37\xf8\x5e\xf8\xa4\xc5\x94\xbb\xb5\x95\xe6\x4f\x96\xe1\x09\x9d\x0d\x8f\x1d\x2c\xb6\x36\xfe\x4c\xe8\x66\x5e\xd2\x94\x3f\xc2\x00\xbd\xc9\x28\x25\x33\x3c\x46\x98\x83\xdb\x21\x86\x66\xc2\x0a\xf3\x06\xd1\x79\x43\x26\xe3\x28\xfa\xbb\x9b\x8f\x80\xa8\xde\xda\x4a\xff\x1b\xf9\x83\x9d\x64\xc1\x79\x18\xb0\xad\x35\xc2\xae\x1a\x25\xf4\x5b\x08\x4a\x32\x30\xdb\xc6\x45\x03\x2e\xe4\xb6\x8e\x64\x7d\x43\x53\x75\x49\xa6\xc1\x24\x9b\x34\xfa\x18\x82\xb3\x20\x46\x41\xc3\x36\x92\x64\xd9\xc4\x96\x25\x1e\x83\x7b\x74\xd6\x2c\xd7\x9d\xf2\x8f\x50\xac\xc5\x8b\x95\x7b\xd3\x7d\x5c\xe6\x61\xae\xce\x9d\x63\xf7\xeb\x53\xe7\x51\xd5\xb9\x5f\xed\x82\xba\xa2\x92\x37\x25\x6a\x03\x67\x37\x9b\x29\xa6\x1f\x5f\xf1\x0b\xcd\x74\x98\xde\xb8\x0f\x91\xf3\x78\xd7\x3d\x3a\x25\x9c\x52\xdb\xe5\x9a\x74\x07\xea\x58\x20\x0e\xc4\xb2\xab\x92\x06\xc6\xb3\x39\x55\x62\x56\xa9\x8f\x91\xbe\xea\x79\x8c\x3e\x6e\xbd\x91\x7d\xcc\xaf\xef\xab\x26\xe6\xe1\xec\x9e\xc6\xff\x71\x3b\xb1\xfc\xab\x40\x51\x2c\x89\xd5\xd0\x42\x13\xba\x66\x4b\x39\x16\xb7\x23\xc9\x45\x45\x53\x2c\xdb\x94\x6c\xdd\x44\xca\x2a\x18\x29\xed\x82\xa2\xad\x51\x9b\x27\x94\x3f\xa3\x85\x3d\x84\xab\xc8\x82\x74\x22\x88\x0e\x55\xde\x69\x1d\x2f\x73\xbb\x1d\xed\x20\xe7\xe4\xd4\xf9\xdb\x1e\x18\xf4\x43\x51\x66\x31\x03\x6b\x2b\xbb\xc5\x8b\x7c\x38\x4f\xe2\x4a\x6e\xb1\xda\x23\x80\xea\xe1\x2e\x64\x34\x3c\xbb\xc9\xac\x40\xcd\xbd\xbb\xce\x9d\xef\x20\x6e\xfb\x14\x35\x4e\x77\x88\x9e\xe9\x49\x46\x28\x99\x56\x49\x10\xde\x96\x29\xd9\x05\xb2\xd4\x39\xc2\x7e\x20\xf9\x35\x5d\x4b\xf1\xb8\x1d\x65\x1d\xab\x22\xa7\x92\xf3\xb2\xec\xec\xed\x34\x1f\xec\xbb\x77\x8e\xb8\x61\x8a\xcb\x67\x18\xef\xb7\x22\xff\x95\x8f\x52\xd1\xf2\xb1\xdb\xcd\xfd\xf6\x28\x9e\x4f\x03\xa0\xc8\xe5\x57\xb2\x10\xfe\xc4\x50\x4c\x0c\xd5\xef\x68\x0c\x2a\xb9\x7b\xaf\x48\xb9\x35\xf0\x76\xe8\xc8\xc4\x29\x29\x30\xe6\x34\xaf\x82\x08\x45\x72\x3e\x0e\x16\x74\xc9\x96\x2e\x5f\x7e\x2b\xc7\xfd\xe6\xf0\x2f\x8c\x52\x25\xf6\x9c\xcc\x15\x7f\xa6\xb3\x67\xba\x99\xe7\x8f\x2c\xf6\x08\xc4\x26\x7d\xf8\x31\x41\x1f\xa4\x86\x5c\x2a\x5a\xc9\x89\x9d\x0b\x60\x91\xc7\x7b\xce\xdf\xf6\x5a\xab\x83\x21\xf7\xe1\x09\x7d\xc7\xf7\x79\x10\x59\x74\xa7\x8a\xa8\x71\xa1\x35\xfe\x95\xd7\x76\x8c\x7c\xeb\xf0\x24\x0a\xde\x70\x27\xa7\xab\x0a\x55\x19\x88\xf3\x63\x07\x25\x88\x21\x6c\x22\x59\x91\x59\x1c\x32\x4d\x29\xa3\xf7\x38\x5d\xc3\xc8\x56\x8a\xe4\x82\x27\x8b\xd4\xe5\xc6\x0f\x7b\xb4\xa6\x56\xd5\x79\x56\x86\xcd\x76\xf4\xaa\xf9\xf5\x9e\x5b\x7e\x8a\xdc\x9f\xf6\x9d\xfb\xd5\x30\x71\x87\x27\x3c\x15\x04\x0a\xe8\x9d\xf8\x45\xa5\x3a\x44\xc4\xbf\x33\x35\x3d\x3d\x35\x73\x15\x5d\xcb\xcc\x64\xae\x4e\xce\x8b\xd6\xfa\xd9\xf7\x8d\x17\x27\xfe\x96\x16\xc0\x5a\x9a\x9a\xbe\x32\x97\x99\x78\x5f\x14\xc3\xe0\xbc\xdc\x73\xee\x57\x9b\x7b\x02\xa3\xb9\xff\xbd\x30\x40\x8a\x03\x10\x5c\x21\x3d\x08\xdd\x07\x45\xbc\x23\x59\x4a\x4e\x64\x6d\x16\x7c\x42\xad\xec\x79\x6c\xdb\xcc\x1f\x6f\xda\x58\xee\xce\xa0\xf3\x8e\xa2\xc9\x50\x8b\x31\xa4\xf8\xc1\x5d\x2d\x18\x07\x41\xb8\x92\xa6\x28\xaa\xaa\xef\xc4\x82\xc7\x34\x7c\x23\xc1\x4d\x19\xbc\x50\xdf\x39\xf7\x6b\xdc\xad\xc3\x34\x1a\x66\x29\xe3\x41\x14\x02\x5d\x8e\x59\x33\xef\x0b\x3c\x11\xc2\x71\xd8\x05\xec\x05\x9b\xb7\x46\x4f\xb0\x3a\x7d\x16\x96\xc1\x1f\xc3\x83\x2c\x82\x85\x8d\x44\x43\xa2\x61\x13\xd1\x05\xf7\xfc\x4c\x81\xd0\x10\x02\x25\x89\x5e\xc7\xe8\x78\xb8\x46\x92\xd1\x05\xa3\x30\xce\x7d\x8c\x2d\x55\x41\xa9\x1d\xe6\xbd\xc5\xc5\x39\x6a\xc9\x17\xfa\xd5\x45\xf5\x3c\xe1\x53\xef\x2a\x18\xb0\x8c\xf7\x46\x49\xc7\x60\x8f\x68\x4a\x92\x20\x25\xcb\xb3\x82\xed\x0d\x8c\xc1\x2a\x17\xd6\x98\xe0\x6c\x0c\x3b\x57\x98\x74\x87\xfd\x28\xd6\x82\xc3\x60\x1a\xcf\x5f\x5d\x74\x1f\xec\x5c\x0a\x83\x6a\xd4\xcb\xbe\xbf\x80\xbb\x5f\x84\x32\x9b\x91\xda\x1e\xa4\xd2\x36\x65\x22\xf5\xaf\xfb\xe8\x95\x01\xdc\xa8\xbb\x8a\x61\x89\x26\x3b\x7a\x6d\x05\x21\x2e\xde\x8a\xc7\x2a\x6c\x7c\x36\x93\xdd\xbd\x65\xbc\x2a\x95\x54\xdb\x0a\x0b\xac\xbe\x42\xae\x40\x94\x85\x1d\xfd\x1d\xaf\xd1\x5e\x0d\x43\x1a\x92\xd2\xa8\xff\x39\xe4\x71\x1a\xc4\x48\x3d\x79\xd5\xcf\xe0\x92\x0f\x24\x28\xf3\xba\x1a\x0b\xe5\x78\x21\xc7\x0c\x24\x74\xeb\xbc\x99\x3f\x2a\x80\xab\xd3\x86\xe8\x96\xdb\x5b\xe7\x6d\x90\xf3\xf5\x7a\x43\xdd\xc2\x03\xea\x75\x86\x82\x72\x35\x88\x28\x76\x44\xde\x5b\x61\x91\x94\x0c\x31\xaf\xea\x68\x41\x5c\x33\xfc\x33\xe0\x27\xb2\x84\x5b\xaf\xa5\xa2\xe3\x53\xe1\xe7\xd1\x68\x4b\x8a\x2a\x1b\xe4\xfe\x47\xbe\xe2\xff\xe0\xcb\x19\x4a\xad\x12\x8f\xbb\xf5\x3b\x4f\x51\x0f\xf8\xc8\xe3\xf2\x43\x63\x89\x48\x1c\xc4\x10\x4f\x45\xe7\x80\x06\xef\xfb\x2e\x75\xf8\x4d\x1b\xa3\x3f\x94\x24\xcd\x26\x42\x95\x07\xe3\x48\x1a\xaf\x12\x42\x6f\x7d\x12\x2a\x69\x0a\x28\x8a\x45\x2c\x59\x25\x13\x43\x6d\x4f\x55\x59\xc3\xe8\xda\x28\xba\xf6\xce\x28\xba\x0a\x1a\xfe\xd5\x77\xe2\x96\xf9\x14\xac\xe9\x5f\xdd\x73\x8f\x76\xbc\xcf\xb8\x06\x7f\xf5\x1d\xf7\xc1\x0e\x54\xa2\x3f\xda\x41\xee\xd9\x23\x08\xd3\xbe\xf3\x1d\xaf\xec\xe1\xd9\x77\x6e\xef\xf3\x1a\x20\xbc\x58\x88\x20\x5e\x67\x22\x33\x33\x31\x49\xae\x87\x5d\x4d\x07\xcf\x39\x6f\x29\x00\x8b\xe6\x4c\x65\x5d\xb2\xf1\x3c\xf9\x9b\xe7\x79\x14\x37\x0d\xfa\x14\xf2\x6e\x73\x7a\x71\x8c\xfc\x31\x36\x10\x7c\xf3\x93\x73\xb3\xf4\x97\xa5\xf9\xe9\xc1\x43\xcc\x66\xb5\x6c\x56\x9b\xfc\x5d\xe6\xda\xdc\xf4\xe4\xc2\x78\x36\x54\x62\xe7\xdc\xc7\xae\xaa\xfa\x06\x2b\x38\x6d\x59\x05\x04\x15\x6f\xbb\xbf\x04\x7b\xe0\x0c\x05\x7d\xb8\x34\x3f\x2d\xaa\x41\xd1\xe9\x6b\x03\xf5\x94\x98\x10\x00\xd0\x5d\x78\x9f\xf7\x61\xc9\x2e\xa0\xa5\x85\xc9\x79\xf8\xd7\x5c\x66\x61\xe1\xb7\xb3\xf3\x57\xb2\x5a\x97\xb5\x7d\x3b\x80\x83\x85\xff\x6d\x66\x7e\x66\x6a\xe6\x2a\x5b\xf7\x39\x28\xad\x42\x8e\x0d\xb0\x09\x1b\x92\x65\x6d\xe8\xa6\x4c\xeb\x18\x84\xf2\x10\x75\xc3\x66\xe5\x84\x0a\x4a\xbe\xa0\x6e\x22\x59\xb1\x72\x7a\xc9\x94\xf2\x58\xa6\xb0\x3e\x08\x41\x28\x4a\x9b\x44\x9a\xac\x2b\x96\xb2\x42\xbd\xb8\xba\x5d\xc0\x26\xad\x7a\xc2\x7e\x34\x71\x4e\x37\x65\x1a\x1f\x0d\xf8\xad\x02\x56\x55\x54\x50\x2c\x5b\x37\x37\xe3\x19\x95\x0c\x91\x9c\xc1\xff\x23\x90\x6e\x85\xb2\xd9\xec\x85\xe2\xa6\x47\x04\xf9\x27\xba\x58\xb2\xa8\x2b\x06\xb3\xd4\x11\xf6\xa3\xc5\xc5\x1b\x70\xdf\xa5\xa4\xe0\xb3\xf4\xff\x2e\x04\x70\x64\xd9\xf3\x0b\xe8\x22\xb6\x72\x92\xe1\xa1\x53\x56\xe9\x35\x5a\xd1\x3c\xac\xa2\x60\xa1\x04\x0b\xda\x4e\xce\x85\x16\x42\x2e\xf4\x45\x42\xf7\xc8\x2e\x3a\x2f\xcb\x4e\x7d\xc7\x79\xb6\xdb\xac\x9c\x85\xca\x1d\x38\x77\x2b\xd4\xc4\xfe\x93\xfb\x75\x1d\x39\xfb\x75\xb7\x72\xda\xbc\x57\x25\x47\x2a\xb9\xf7\x80\x45\xa0\xb9\x5f\x16\x44\x37\x75\xa2\x24\xb8\xc4\x89\x17\xb8\xc7\x51\x87\x70\x5d\x6c\x3c\x7f\xe1\xd4\x21\x80\x2f\x54\x17\x2d\x34\x0f\xb4\xe2\x59\xcb\xb8\x61\x56\x3a\x0c\x17\x4a\x37\xc2\xe5\xd8\xab\x71\x76\x65\xf6\x5a\x66\x2a\xa2\xba\xd9\x87\x29\x2f\xd6\x05\xbd\x37\xbb\xb0\x48\xbe\x87\xc2\xe0\x50\xfe\x68\x2e\xb3\xf8\x1e\xf9\x57\x0e\xcd\x65\xe6\x33\xd7\x26\x17\x27\xe7\x17\x96\x33\x0b\xcb\xbf\x59\x98\x9d\xe9\x4d\x34\x9e\x0f\x69\xb1\x3b\x3e\x82\x84\xe0\x4a\x15\x37\x4d\xc9\x66\x55\xcb\x4d\x14\xa0\xa1\xb8\x49\xe4\x3a\x43\xbf\xaa\xeb\xfd\x40\xcd\xd1\x1a\x4c\xbf\xb7\x74\xad\x3f\x30\x23\x5b\x64\x07\x41\x05\x0f\xf2\xc7\x38\xf9\x1f\x0a\x15\xaa\xf9\x65\x19\xf8\x29\x0d\xfd\x56\xd1\x64\x7d\xc3\x42\x73\xfa\x06\x36\x17\x40\x3e\x12\x7e\x97\xf5\xd2\x8a\x8a\x53\xc0\xf6\xf2\x28\xa2\x9b\x9e\x16\x5b\x1c\x07\x39\xb5\xc5\x05\x13\x47\x92\xe5\x88\xb2\x01\x64\xf0\xf7\x36\x95\x5f\x2d\x08\x59\x74\x3f\x9a\x26\xd2\x9f\xa0\xa4\xd5\xb2\x04\x28\x47\xba\xc1\xd7\x5d\x72\xeb\xa0\x19\xe0\x1c\x90\xd3\xca\x8d\x74\x26\x2e\x8c\xb3\xd1\x9f\xcf\xb8\x03\x2c\xda\x07\x36\xd6\x78\x8b\x5b\x3d\x58\xd3\xa7\x85\xc9\x89\xa5\xf9\xa9\xc5\x0f\x96\xaf\xce\xcf\x2e\xcd\x0d\x19\x3c\xdd\x04\xe0\x4f\x9c\x80\xfe\x45\x16\xf5\x69\x43\xa9\x13\xc3\x50\x37\x21\x99\x8a\xbb\x14\xa2\x6c\xf0\xa8\xa4\xd9\x0a\x94\x9e\xd8\x64\xf5\xd4\x98\xab\xa3\xbb\x18\xf8\x96\xca\xba\x31\x24\xa3\xd9\xf9\xab\xe8\x43\xd0\x61\xfb\x10\xb3\x89\x51\xfc\x5c\x67\xa8\x53\xed\xe1\x81\x1f\x4c\x3d\xa3\xf4\x04\xed\x50\x6b\x11\x67\xa3\x0e\x8b\xa4\xc5\xad\xb3\xac\xdc\x2b\x3f\x25\x68\xc9\xd7\x6c\xf6\xc2\xa8\xf8\xa7\xc0\x09\x72\x5e\x45\xd3\x87\x51\x35\x7d\x10\x75\xad\xf9\x3c\xc4\x97\x25\x66\x35\x5f\xbd\xa2\xaf\xd9\x70\x61\xeb\x2c\xd4\xc1\xcb\x06\x8b\x5b\x7b\x27\xe6\x76\xa4\xd2\x32\xad\x68\xa5\x4f\xc6\xae\x49\xb9\x71\x0f\x68\xe4\x40\xe8\xd9\x54\xdc\x94\x57\xfc\xe5\x6e\xc5\xdc\x86\x38\xb0\xbc\x51\x87\x75\x57\x28\x43\xaa\x42\x18\x73\xf8\x00\x0f\x52\x10\xd2\x1a\xc2\x84\xf8\x6a\x4a\xf7\x23\xef\x81\x86\x91\xf8\xcd\x15\x46\xf2\xbf\xc6\x36\x74\x73\x0d\x6e\x03\x63\x76\xd1\x18\xe3\xde\xa6\x65\xca\xee\x7d\x9e\x99\xaf\x05\x27\x6b\xd4\x38\x84\x73\x9a\x9b\x14\x7b\x33\x68\x40\xd2\x0c\x55\x5a\xe0\x12\xc0\x6f\x0b\xa1\x6b\xc0\xf0\x20\xc7\x5e\x24\x82\x10\x8a\x9b\x44\x4d\x0c\xe9\x53\x81\xff\xfb\xa7\xe0\x0f\x5d\x01\xf1\xb5\x4d\xf4\x4f\xec\xf7\x60\x5d\x98\xb1\x5e\xd5\xd0\x1e\x69\x1f\x06\xae\xa1\x0d\x11\x36\x06\x59\x4f\xc9\xda\xd4\x72\x29\x5b\x29\x62\xbd\x64\xa3\xc5\xa9\x6b\x93\xb3\x4b\x8b\xcb\x53\x33\xcb\xd7\xa6\x66\x96\x16\x27\x17\xe0\x56\x69\x9b\x52\x0e\xa3\x8b\xb6\x59\xc2\xe8\x4f\x68\x55\x52\x2d\xf2\x5f\x42\xda\x98\xad\x8f\x91\x83\xe4\x12\xbc\x97\xd3\x55\xdd\x0c\xbf\x47\x7f\x80\xd2\xd9\x18\x5d\x9c\x9e\x9d\xc8\x4c\x4f\xa2\x3f\xa1\x89\xe9\xc9\xcc\xfc\xa5\x1e\xb9\xb3\xad\xbd\xd7\xb2\xdf\xde\x6b\x39\xdc\xde\x6b\xb9\xb5\xbd\xd7\x72\x54\x7b\xaf\xde\xc8\xa0\x95\xd2\x25\xc3\x48\x15\x25\x4d\x59\xc5\x96\xed\x9f\x99\x1f\xa6\x0c\x34\xc6\x27\x88\x46\x8f\x91\x17\x41\x95\x80\x00\x32\xef\x9b\xf4\x66\x51\x15\xd6\xf3\x3d\x37\x0a\xfa\x22\xc0\x93\x63\xc8\x8b\xb1\x02\x11\x81\xa0\xfa\xd7\xd4\x2c\x08\x0e\x5a\x92\xe1\x4f\xa9\x94\xac\x58\xe4\xaf\xd7\x80\xd1\xd7\xe5\x99\x61\xf6\x97\x56\x05\x3e\xd1\xdc\xd0\xe4\x3a\xb8\xc3\x50\xb1\xdd\x0f\x30\xdd\xcc\x13\x48\xfd\x80\xa0\x11\xfa\xfd\x43\xf8\xb7\xa5\xd9\xc5\x0c\xfa\x30\x55\x44\x8b\xb3\x8b\x99\xe9\xe5\x6b\x93\xd7\x66\xe7\x3f\x20\x5b\x59\x41\x5c\x35\x0d\x3c\x34\xd1\xfc\x2c\x17\x60\x56\x9b\x0e\x0b\x8f\x25\x14\x2a\xae\x04\x52\x81\x3a\x4b\x0c\x49\xf1\x94\x8d\x14\xd4\x41\x82\x1f\x4d\x0c\xb1\x9b\xdc\x52\x00\xe5\x9b\xd1\xfc\x24\x01\x3e\x79\x65\x19\xf0\x2d\xcf\xcd\xce\x2f\x2e\xf4\xc5\xdc\xfc\x34\xa0\x2e\x1b\xd1\xd9\xd3\xf6\x7f\x03\x38\x8c\x3a\xe2\x6f\xb3\xf8\x84\xf0\xc3\xa3\xf4\x6b\xa0\xa2\xe5\x98\x6c\xa1\xa2\xf7\x53\x32\x01\x25\x84\x07\xd0\xaf\x2f\x5f\xbe\x7c\x39\x76\x3d\xc6\xe1\x95\x7e\xa8\x88\xb7\x58\xf0\xfb\x18\xb9\x71\x2d\xcf\x2f\x4d\x4f\x2e\xc0\xd5\xec\xdc\x11\x7a\x57\x85\x21\xf5\x14\x18\x62\x53\x81\xec\x90\x9b\x0a\x78\x53\x23\x6c\x2a\xc0\x0a\xce\x7b\x15\xe7\xfd\x4a\xf1\xd9\x40\xd1\x79\xef\xa2\x6c\xe7\x0c\x66\xa3\x08\xbe\x17\xac\x3e\xef\xbd\xfa\xc6\xe5\xf4\xe5\xf4\x1b\x6f\xa4\x2f\x8f\xbd\xf9\x76\xc4\x37\xb4\x0e\xbd\xf7\xf6\xbf\x5c\x1e\x7d\xfb\xed\xb7\xa2\x61\xf3\x24\x1d\xff\x6d\x5a\x3e\xa5\x60\xdb\x06\xcc\x0b\x78\xb0\x91\x6d\x4a\xab\xab\x4a\x8e\x9e\x6f\xff\x53\xd7\x70\xc6\xbf\xcd\xd3\xfb\x7c\x4c\x17\x83\x84\xec\x99\xa4\x43\x8d\xc0\x26\x85\x3e\x4c\xd9\x68\x31\x73\xb5\x3f\x41\x3d\x20\x12\x5e\x8f\x81\xac\x87\x36\x49\xbf\x08\x33\xd9\x10\xac\x64\xfd\x4f\xde\x60\xcc\x65\xe1\x2e\x49\x59\xda\x27\x29\xd8\x10\x29\xcb\x5b\x25\x65\x59\xb3\xa4\x96\x1f\xfd\x7e\x49\x59\xaf\x63\x92\xdf\x32\x29\x68\x6a\xf3\x95\x64\x68\xc6\xdd\x32\xee\x92\x85\xcd\x14\x97\xee\x7c\x16\xa0\x63\x35\x54\xd0\x0f\xfd\xcc\x57\xd4\x0a\x94\x6a\xb2\x75\x34\xf1\x2e\x44\x72\x74\x6b\xd8\x6b\x99\x78\x79\xc5\xfb\xd3\x52\xd4\x75\x6c\xb6\x98\xf9\x4c\xa9\xb8\x9c\xa7\xa3\x7d\xbb\x6b\x8b\x5e\x62\x5c\x21\xfb\x9e\x87\x32\xcb\xd0\x76\x6d\xc2\xeb\x6e\x8c\xd1\x48\xdb\x6d\x76\x89\xa1\x26\xb1\xa6\xf5\x0a\xdd\x86\xb9\x52\x15\xcb\x1e\x45\xfa\xea\x28\x34\xbe\x26\x4f\x06\x21\x85\xfb\x1b\xd1\x30\x29\xb0\x51\xdb\x98\x07\x31\x62\xc8\xc4\x4b\xd9\xfa\x1a\xd6\xd0\x74\xe6\x9d\xc9\x69\x34\x37\x3f\x7b\x7d\xea\xca\xe4\x3c\x5a\x9c\x7d\x7f\xb2\xaf\x7b\x1f\x47\x41\xab\xbd\x7a\x32\xed\x9d\xf9\xd9\xf7\x27\xe7\xdb\xc3\x9e\xa0\x88\xe6\x87\x29\x1e\x64\x96\xd3\x0d\x2c\x0f\xe2\x68\x4d\xad\xe1\xcd\x76\x81\xca\x1f\xbc\x3f\xf9\x81\xd0\xe9\x24\xec\x19\x39\x9c\x7e\xe1\xdd\x92\xfd\xb3\xed\x7f\x39\xcc\xae\xbc\x3d\x4c\x52\x5f\xcd\x2f\xfb\xe8\xce\x3b\x1c\x76\x7c\xad\x9d\xc8\xcf\x81\x45\x5f\x6f\xdf\xdf\xa1\xb6\xfc\x1d\x0c\xef\x76\xdb\x1a\xb3\xf7\xde\xbf\x83\x66\xe0\x73\xb8\xa3\xa4\xe3\x54\x8a\xa4\xfc\xfa\x8b\xb8\xa3\x0c\xd5\x89\xdf\x2f\xa7\xbe\x26\x6f\x7e\x0c\xf9\xa0\x45\x15\x37\xc9\x9f\x5d\x3a\xf0\xbb\x81\x7b\x4e\x5a\x62\xf4\x88\x5a\xf6\x79\x68\x9b\xf7\x18\xd2\xf6\xfa\x07\x5c\x90\x4c\x2c\x73\x7f\x84\xef\x42\x06\x7b\xaa\xc9\xcc\x8a\x60\x34\x9f\xa7\x46\xc5\xfe\x34\x46\x30\xce\xfa\xee\xbe\xd9\xf9\xab\x1f\xa1\x0f\x53\x7f\xa0\x8f\x52\xe0\x3d\x18\x22\x82\xe5\x01\x21\x18\x80\xbb\x24\x08\x87\x3b\x4d\x22\x5d\x24\x45\xf4\x8f\xe0\x2e\x81\x2a\x30\x6d\x37\x92\xc1\x43\x8c\x14\x27\xe1\x57\x53\x29\xdd\x54\xf2\xe0\x7c\x9b\xba\x3a\x35\x13\x29\xe7\x72\xab\xa1\x6f\x7f\x9f\xb6\x8a\x8a\x5d\x08\x05\xc4\x2f\xbc\x95\x33\xdf\xb2\x5b\xfd\x09\x08\xfd\x13\x2b\xfe\x24\x41\x78\xb2\x99\x18\x9e\x47\x96\x2a\x4b\x46\x08\xde\xf4\x95\xcc\x5c\x8f\xb0\xd8\xf1\x68\xa6\x68\x95\xf8\x7f\x42\x0b\x99\x6b\xd3\xe4\x94\x9a\x35\xb0\x36\x75\x05\x4d\xe8\x9a\x46\x0e\xf7\x55\x2c\x63\x13\xcc\xe4\x31\xf5\x05\x13\x2f\x4b\x9b\xd5\x29\xca\xde\x6a\xa0\x89\xf9\xc9\x2b\x93\x33\x8b\x53\x99\x69\x60\x53\x15\x2d\x7c\xb0\x30\x3d\x7b\x75\xf9\xca\x7c\x66\x6a\x66\x79\x69\x7e\x3a\xc0\xf2\xcb\x1c\x02\x79\xcc\xf4\xb4\x39\xc9\xb2\x68\x6a\x0e\xb2\x30\x39\x9c\xc1\xcc\x6f\x62\x99\x36\x71\xf3\xcf\x6b\xc8\x66\xb0\x82\x2d\x07\xfc\x52\x44\xa8\xa8\xcb\xac\x55\x70\x6f\x23\x49\x19\xd0\xfb\xbc\x58\x94\x46\x7d\x32\x46\x7d\xe4\xa3\x14\x3b\x51\x04\x03\x54\x47\x50\x09\xbd\x48\xe0\xf8\xb6\x75\x46\x43\xa0\x86\x42\x5b\x05\xa5\x3e\x69\x26\xc7\xd9\x1a\xde\x7c\xc3\xbf\x22\xbc\x01\xd7\x86\x35\xbc\xf9\xa6\xff\xec\xcd\xc0\xbd\x61\x01\x14\xa9\x4d\xa8\x6b\x12\xd4\x6c\x82\x4a\x17\x84\xc0\xf7\x47\x58\x50\xcd\x49\x76\xef\x3b\x47\x96\x73\x3f\x7f\xd5\xbc\x57\x65\xb5\x54\x9d\x1f\xca\x90\xaf\x7b\xa7\xe6\x3e\x2c\x43\xff\xf4\xe7\xa7\xe1\xfb\x8d\xdf\xed\xc1\xad\x95\x9d\x3b\x27\xac\xd0\x8f\x57\xe2\x8a\x96\x73\xe1\x49\x31\xe7\xc9\x85\x62\xa2\xc9\x7d\x8e\x2c\xa3\xd7\x16\x3e\x48\x78\x44\x79\x2e\xbf\x9e\x03\x94\xf4\x3e\x77\xb6\x04\x5a\x5b\xd3\x90\xfc\xaa\xd7\xac\xf0\x3f\xbd\x36\xb2\x12\x7f\x83\xe4\xd0\x9f\x8d\x4c\xe4\x37\x82\x41\x4a\xc5\x3e\x19\x32\x9b\x88\x25\x83\x96\xf7\xc1\x09\xc7\xbe\xd9\x30\xcb\x18\x31\x74\x11\x7d\xc3\xbb\xa4\x02\x43\x86\x7e\x7b\xb3\xe5\x96\x9a\x5c\x5e\x0e\x8e\x1d\x93\x5c\xda\xa2\x21\x17\x37\x53\xf2\x4a\xaa\xa8\x68\x98\x2f\x1d\x2f\x06\x32\x1a\xca\x22\xed\x19\xa4\x17\xe6\xe6\x2f\xaf\x15\x91\x3f\xd6\x11\xa2\x29\x29\x9a\xf7\x20\xa5\x22\x6b\xd3\x52\xf5\xfc\xf8\xd8\x98\x38\x42\xb5\x03\xc8\x70\x46\x51\xca\xf4\xf2\xbb\xc3\x10\x93\xba\xbd\x92\x4c\x06\xe5\x2f\x3e\xc3\x1e\x1f\x41\x25\x4a\x8f\xc5\x82\xd3\x3e\x4e\x1f\xfc\xfa\xd7\x1b\x3a\x51\x72\x7b\x08\x7d\xef\x72\xf5\x3d\xaf\x55\x80\xc8\x70\x0c\x3a\x27\x36\xcb\x09\x8e\xcc\x06\x1e\xf7\x7f\xf0\x88\xef\x31\x6a\xbe\xdb\xf9\x1d\x2e\xf9\x7d\xdd\xf7\x13\xad\x42\xd4\x0e\xec\xcb\x25\xd5\xd7\x36\x1d\x0e\xe2\x24\xbb\x79\x28\x98\x93\x6c\xfa\xde\x10\x97\x4c\x15\x65\x2f\x8c\xad\xbf\x39\x06\xbe\xf3\x0b\x28\xf5\x3b\x74\x75\x72\x11\xa5\xde\x43\xd9\x0b\x13\xba\x66\x63\xcd\x4e\x2d\x6e\x1a\x78\x3c\x98\x81\x36\xf6\x49\x6a\x63\x63\x23\xb5\xaa\x9b\xc5\x54\xc9\x54\xb1\x96\xd3\x65\x2c\x93\xaf\x65\x34\xf2\x87\xff\x4e\xd8\x60\x1c\x82\xe6\x7a\xe4\xbb\x76\xaa\x64\xf4\x3f\xc6\x82\xd1\xe1\xbd\xc3\x85\xa0\xde\x0f\x53\xca\x3a\x51\x4e\x7e\x87\xae\x4d\x2e\xbe\x37\x7b\x85\xfc\xfd\x1e\x7a\x6f\x32\x73\x65\x72\x9e\xfc\x2d\xa3\x2b\x99\xc5\x0c\x98\x1c\xf4\x92\x6d\x94\x6c\x44\x0e\x2c\xae\x58\xbf\xb3\xc9\x0b\x73\x05\xe2\x18\x4a\xa6\x3a\x42\x13\xf9\x0c\x6c\x92\x99\x41\x12\xcc\x24\xb3\xc7\x32\xcb\x2e\x96\x81\x80\x34\x9a\x5a\x85\x26\xf4\x00\x4f\xb1\xfc\xc0\xb6\x75\x45\x42\x29\x79\x14\x49\x68\x6e\x76\x61\x91\x02\x5c\xc1\x1c\x26\x04\x80\x59\x36\x96\xe4\x51\xde\xf3\x0c\x05\x57\x09\xc0\xf1\x6f\x2c\x6c\xb3\xfa\x4a\xde\xba\x91\xbd\x91\x86\x0e\x6b\x45\x69\x13\xe9\xeb\xd8\x34\x15\x19\xa3\x02\x96\x64\xa2\xb6\x40\xdc\x5b\xea\x3d\x0e\x1a\xa0\xf1\x96\x2e\x45\x6c\x17\x74\xd6\x1a\x22\xf5\xbb\x34\x9b\x8a\x77\x75\x13\x7a\xb5\xc8\x7a\xae\x54\xc4\x9a\x0d\x68\x46\x91\x41\x2b\xcf\xae\x2b\x96\x62\x03\xb3\xd2\x26\xbb\xb2\x9e\xb3\xd2\x39\x55\x2f\xc9\xab\xb4\xbf\x75\x5a\x37\xf3\xa2\xd0\xe4\x41\xaf\x1a\xad\x5d\xe6\xbb\x92\xc2\x4b\x07\x35\x7b\xbc\xa6\x01\x04\x1d\x51\xc8\xaf\x4e\x2e\xb2\x9e\xfe\x50\x34\xcd\xab\x4a\xec\xf5\xfe\x6f\xd4\x77\x00\x78\x4a\x06\xd7\xd2\x67\x2f\x9a\x07\xa7\xcc\x95\x44\x0b\x13\x8f\xc2\x3a\x36\xea\x3b\xa8\xf1\xe3\x19\x74\xb1\xba\x53\x63\xf0\x9c\xbb\xd0\x9d\x2c\xb8\x7e\xee\xd1\x69\x56\x6b\x5b\x31\xef\xf6\x72\x0c\xe4\x79\x54\xa4\xde\x83\x32\xc8\x87\xc7\xce\x17\xfb\x04\x3d\x81\xfe\x8c\x35\x3d\xa3\x54\xfd\x0e\xbe\xa3\x7d\x74\x9c\x27\xfb\xee\x67\x7b\xac\x96\x2b\x7f\x35\xa2\x21\x1b\x9b\x2e\x68\xb2\x7b\x72\x46\xae\x4c\xe4\xfd\xe7\xa7\xac\x08\x6e\x87\xd5\x84\x97\xeb\x4f\x9c\x93\xb3\x04\x55\x6c\x07\xb7\xc4\xfc\x68\x1e\xe4\xd6\x1c\xf4\xde\x1c\xf0\xe6\x8c\xdd\x9d\x7c\x3e\x06\xb1\x3f\xe3\xf5\x74\x90\xd5\xd9\x80\xb4\xce\x86\x4f\x91\x6c\xf7\xe7\x48\x36\xea\x24\x49\x84\x76\x20\xc7\x04\x6b\xa4\x17\xc8\x7b\x59\x45\x29\xb3\x37\x8b\x72\x3b\x2c\x93\x30\xef\x6a\x3f\xd0\x22\x73\x55\xfa\x85\xd9\xea\x53\xe9\x0f\x1a\x4b\xf2\x18\x00\x1c\xa3\x20\x69\xdc\xde\x6f\xf5\x0d\x2f\xec\xc2\xe8\x0f\x16\x0d\xe2\x4f\x9a\x4b\x31\x80\x64\x0a\x21\xde\x50\xf6\x02\x64\xfc\x85\xf0\xb6\x67\xf9\x0d\x1b\xfd\xb0\x92\x0c\x63\x48\x10\x67\x4d\x0c\x2c\x6d\x82\x61\x8f\xcf\x62\xe8\x97\xab\x62\x0c\x6e\x03\x01\x1c\x13\xe2\x37\x28\x0c\xd1\x11\x7e\x83\x82\x9e\x20\xde\xe4\x1c\x11\xc5\x9e\x8d\x11\x00\x7d\x7f\xf9\xa0\x48\x1c\x10\xc4\x68\xcf\x7a\x9f\x33\x19\xed\xdf\x1e\x00\x50\x26\xc8\x03\x8e\xf8\x14\x3f\xaa\x07\x0b\x9c\x3a\xe1\x97\x07\x02\x3c\xec\xd9\xed\x1d\x1a\xcd\x3d\x4d\xad\x62\xc9\x2e\x99\x38\xb5\xaa\x4a\x79\xf4\xee\x64\x66\x71\x69\xbe\x8f\x1a\x8c\x1c\xaa\x27\x26\x68\xe3\x62\x9e\x87\xf0\x61\xca\x80\x5c\x84\x8f\xbc\x85\xec\x0f\x8b\x55\xe8\xaf\x66\x23\x01\x34\xd8\x22\x94\xac\x83\x64\x4f\xdf\x52\x9f\xc4\x80\x57\x84\x01\x1d\xee\x82\x70\x24\xfd\xae\x07\xd6\xd6\xfb\x04\xb0\x8e\x35\xdb\xea\x2d\x4a\x85\x7d\xdb\x17\xfe\xc1\xae\x5d\x10\x5a\x6f\x2c\x45\x6e\x2f\x56\xe0\xde\xc0\x2b\xf0\xf9\x61\x37\x1f\x65\xb5\xac\x0d\xff\x4f\x73\x6b\x34\x84\x16\x75\xda\x1e\x02\x32\xc2\x35\x72\xaf\xb5\x19\x20\xda\xb4\x43\x32\x0c\xaf\xa0\x94\x4e\x13\x09\xaf\x28\x38\xaf\x43\x43\x1e\xac\xc9\xa3\x50\x31\xce\xbb\x38\x5b\x56\x41\x64\xc0\xeb\x89\xcc\xe6\xde\x0d\x20\x93\xe2\x74\xea\x4f\xdd\xc3\x7d\xe7\x7e\x95\x97\xa0\x84\xca\xf4\xac\x04\x25\xf4\x3b\xae\x04\xc2\x73\x9d\x4f\x2b\xee\x21\x6f\xe8\xde\x78\xb6\xe3\x7e\x7a\xe2\x37\xe6\x09\x51\xdc\x55\x1f\x9d\x6e\xc6\xd1\x92\xc6\x74\x7e\x93\x1d\x4f\x7a\x1e\xdb\x29\xda\xf4\x38\x45\x9b\x1e\xf7\xb5\x0f\x0a\x58\x35\xd0\x87\x13\xb3\xd7\xae\x65\x66\xae\xf4\x26\x53\x20\xea\x4f\x55\x59\x45\x62\x56\xa2\x23\x45\x66\x74\x6c\x71\x76\x6c\x6e\x7a\xe9\xea\xd4\x0c\xfa\x13\x24\x78\xfc\x09\xa5\xcc\x40\x9d\x63\xfa\x1b\xfc\x7d\x89\xaa\x57\x2c\x0c\xc5\xd4\x8b\x06\xeb\x82\x00\xa1\x84\x66\x91\x06\xc6\x96\x34\x95\x08\xc5\x91\xd4\xea\x48\xd0\x52\xd3\xc9\xa4\x38\x78\x0a\x09\x05\xe1\x90\x79\xd6\x09\xa9\xfa\x8a\x30\x28\x6d\x1d\x0d\xa6\x44\xda\x72\xa1\xb9\x5f\x76\x1e\x9d\x34\xf7\xcb\xcd\xdb\x67\x8d\xfa\x0e\x6a\xde\xab\xba\x77\xaa\xbe\x6d\xef\xfc\x66\xd8\xf3\x66\x77\x3b\xc7\xb1\xaa\x6f\x0b\x85\xff\x6b\xec\x0a\x6b\x3f\x68\x8d\xb1\x42\xd5\xab\xba\xbe\x22\x99\xb1\x5f\x45\x78\x39\xc2\x5f\x2f\xab\x8a\x56\xfa\x64\x59\x2a\xca\xff\xfc\x76\x2c\xa4\x94\x89\xae\x6d\xa6\xa0\x1e\x36\x03\x80\x73\x85\xde\xee\xa0\xe7\x06\xb9\xab\xd1\x0f\x02\xa1\x70\x91\x7a\x02\x4e\x64\x63\xb0\x28\x79\x6f\xc7\x20\x6d\xb7\x76\x51\x2f\x2a\x36\xe2\x1e\x46\x90\xb8\x5e\xc5\x6a\xda\x52\x4e\xd1\x50\x28\xa6\x02\xa5\x52\x1e\x2f\x50\xcb\x2f\xb0\x37\x70\xf7\x8a\x6e\x17\x3a\xd5\x15\x06\x90\x17\x5b\xe3\x87\x82\x3d\xe2\xd8\xd1\x13\xec\xf8\x77\xea\x7c\x5b\x86\xa6\xd6\xc1\xc2\xc2\xc8\xbd\x79\xe4\x3c\x7c\x11\x20\x08\x9a\xd8\xdd\xbb\x8b\x9a\x07\xdf\x3b\x7f\x7f\x12\x88\xfb\x09\x0a\x05\x26\x11\x3a\xd4\x1e\x66\xdd\xe8\x52\x96\xa5\xa3\x8b\xad\xe3\x65\xb9\x06\xac\xec\x8c\xbe\x62\x4b\x90\x3c\xa0\x6b\x18\xaa\x33\xb5\x4f\x61\xa2\x49\xa1\xd8\x2e\x06\xc7\x12\x98\x95\x40\x57\x19\xbf\x85\x5c\x70\x3a\x40\x48\x7e\xf5\xef\x44\x14\x2e\xcd\x4f\x07\x13\x6f\xbe\x4b\x36\xd6\x52\x7b\xb9\x67\xf0\x3f\xb7\x06\x21\x0c\xa4\xa8\x76\xd7\x38\x87\x5d\x5b\xbb\x03\x41\xc3\x28\xb1\xdd\x0d\xca\xe1\x56\xda\x8e\xa5\x84\xc7\x3c\xa0\x8b\x16\x8b\x65\x8a\x96\x17\x92\x85\x24\x33\x0f\xce\x10\xab\xaf\xa1\x73\x84\x17\x5b\x45\x40\xe3\xf9\xab\x76\x96\x3f\x3a\x73\x77\x2b\x7e\x54\x5f\xa2\x91\xd2\x00\xf9\x29\x1e\x49\x57\xf2\x8c\x07\x1f\xd1\xeb\x1f\x0b\x23\xff\x28\x68\x5c\xb1\x10\xab\x32\xdb\x6b\x17\x82\x01\xa0\xfe\x47\xea\x58\x30\xb4\x03\x28\x0a\xcd\x20\x59\xbb\x0b\xf8\xd9\x41\xf5\x5f\xe8\x88\x45\x14\xb9\x94\x4d\xd8\x86\x21\x12\xdd\x90\x4f\xbf\x8e\xdb\x45\x2f\x89\xda\xf1\x75\xfc\xb4\x4f\xa3\x45\x51\x32\xfc\x5a\x52\xe4\xbe\x79\x8e\xde\xa8\x58\xdc\xe7\xe3\x91\xea\x92\x84\x61\x79\xa5\x3a\x90\x71\x0e\x9e\xa9\xa2\x64\xae\x61\xdb\x50\xa5\x1c\xee\xcd\x82\x16\x04\x10\xc8\xd6\xea\xed\xfe\xcf\x7a\xb9\x7b\x96\x4b\x9e\x05\x68\xa1\xf5\x37\x78\x18\x38\xf9\xd3\x73\x3c\x91\xbf\xa7\x33\x33\x68\xfd\x4d\xff\xe7\x37\xe1\x51\xcf\xa7\xd8\x20\x69\x08\x1d\x67\x68\xb1\xa0\x58\x48\x37\x30\x4b\xcd\x85\x7e\xeb\x2c\x85\xca\xd6\xd1\x84\xaa\x97\x64\xf4\x2e\x8d\x9e\xf8\x6f\x5e\xcc\x37\x75\x89\x05\x0a\xbd\xaf\xb0\xc8\xea\x1c\xaf\x0c\x66\x62\x5a\x7f\x94\x4a\xdb\xd6\xce\x9a\xe1\x2f\x25\xd5\xc6\xd0\xe1\x9b\x96\x44\x53\x8a\x92\x09\x47\x02\xca\x49\x16\x86\xef\xed\x36\x22\xa1\xf1\x37\x5d\x60\xa9\x85\x2c\xb4\x51\x50\x72\x05\xa4\x10\x46\x84\xb3\x03\x6c\x55\xeb\x6f\x20\xd6\xd9\x0e\xbd\x43\x5f\xcb\xcc\x4d\x71\xe1\x1f\xfb\xe1\x9b\xf0\xe6\xca\x26\x32\x71\x51\x32\x8c\x60\xff\x3f\x7f\x3c\x50\xc6\x6b\xfd\x0d\xe8\xac\x0f\xd4\xad\xbf\x49\xff\x4e\x23\xf4\x5b\x7a\x62\x17\x8b\x18\x8e\xf0\x35\x5e\x6e\x8d\xbd\x8e\x58\x23\x2b\x44\x26\xaa\x50\xa2\xed\x90\x65\x7d\x43\xe3\x2f\x31\xea\x6c\x1d\x19\x26\xd8\x86\x91\x24\xcb\x0a\x4d\xc3\x6e\x25\x61\x05\x93\xaf\x69\x00\xa6\x9c\x46\xb3\x5a\x0e\x47\x50\x5b\x90\xd6\x31\x5a\xc1\x58\xe3\x8c\x25\x8f\x72\x64\x7e\x31\x22\x72\x14\xc3\x68\x58\xae\xb5\x89\x8b\xfa\x3a\xaf\xc8\x19\x62\x8c\xde\xaa\x71\xea\xbe\xeb\xb6\xb7\xef\xfb\xa8\xbc\xe9\x07\x74\xa4\xf2\x25\xa5\xc7\x4a\x2c\xba\x99\x07\x27\x98\xd5\x0f\x19\xbd\xd9\x11\xe0\xb4\x97\x7b\xfb\x14\x6c\x18\x3d\xa2\xa5\xdf\x42\x25\xe3\x02\xce\xad\x59\xa5\x62\x6f\x53\x67\x94\xcc\x7c\xbb\x34\x6b\xf3\x4f\x0f\x13\x76\xbc\x1c\x94\x2c\xab\x04\x19\x3a\x05\xc9\xa6\x51\x75\x61\x19\x63\x62\xcb\xd0\x35\xaa\xa3\x7b\x12\xaa\xad\x81\xb0\x62\x21\x8d\xa8\x63\x5a\x1e\x9b\x81\xea\x5e\xba\x49\x7f\xb1\x19\x18\xb8\x48\x30\x51\xf4\xe6\xe5\xcb\xe4\xf7\xb7\xdf\xb8\xec\x87\xdd\xb5\xc1\x2d\x48\x16\xdd\xbe\xd4\x15\x2b\x8f\x22\x15\x4b\xeb\x60\x99\x87\x08\x23\x76\x43\x80\xf2\x0a\xa1\x9d\x3a\x62\x41\x2c\xe0\x8a\x64\xe1\x34\xca\xa8\x2a\x5a\xd3\xf4\x0d\x15\xcb\x79\xa8\x62\x10\x89\x8b\x47\xf8\x89\xb7\xff\x28\x52\xb4\x9c\x5a\x0a\x75\x46\x5d\xa1\x7d\x40\xa9\x18\xe1\x0f\xd7\xf0\xa6\xd5\x9b\xac\x08\xaf\xa9\xbe\xba\x8a\x4d\x82\x2d\xe4\x3d\x64\x47\xdf\x20\x18\x32\x1e\x41\xc0\xd0\x3c\x14\xf6\xf1\xb0\x47\xb3\x0f\xe5\x0b\x49\x55\x63\x05\xfb\xf0\x38\xa3\x37\x86\xf0\x69\x0c\x72\x04\x67\x93\x34\x9a\xd1\x91\x64\xdb\x98\xdc\x29\x39\x82\xa2\x24\xc3\x05\x98\x69\x16\x11\xf3\xf8\xdf\x3c\x8f\x14\x4c\x20\xbf\x78\x93\xad\xa4\x97\x6c\x24\x63\xcb\x36\xf5\x4d\x7e\xde\xb6\xaa\x09\x04\x4d\x4e\x22\x8a\x06\x9b\x9b\x36\x5a\xd3\x28\xb3\x6a\x63\x33\x1a\xcb\x26\x8b\x6c\xdd\x90\x34\x88\x7d\x35\x4b\x1a\xc2\x0a\xb9\xac\xc7\xc4\x28\xe9\x6d\x3f\xfa\xa7\x7b\x4e\x27\x9a\x87\x8d\x81\xd8\x9c\x8a\x25\xad\x64\xf4\xba\x5d\xac\x42\x6f\x9a\x73\x20\xa2\xb0\xf7\xef\x7b\x3b\x5c\x28\x3f\x89\x1a\x7f\x0e\x0a\xa4\xe7\x3b\x1a\x38\xc0\x58\xbb\xcb\x50\x06\x07\xb7\x41\xcf\xc9\x3b\x33\xf9\xdb\xe5\xbe\xae\xdf\x14\x60\x54\x38\xae\x8f\x20\xfc\xa8\x1f\x34\x5c\x05\x23\x50\x7b\xd5\x9f\x18\x28\x61\x90\x21\x81\x3d\x10\x9d\x22\x8c\x48\x10\x12\x18\xc4\x46\x1f\xf5\x85\x2b\x10\x6d\x06\x90\xc9\x5f\x3d\x02\x34\xf4\x14\x57\xdd\x52\xe6\x00\x18\x2f\x00\xef\xc3\xa0\x3f\xb6\xb7\xb3\x37\x06\x5e\x87\x3d\x35\xe8\x71\x59\xb6\x94\xc7\xfd\xd9\xb0\x58\xc7\x8c\x81\x00\x81\xc6\x15\x9e\x22\xe6\x6d\xf4\xa9\x99\x2b\x93\xbf\xeb\x0d\x6e\xa0\xb0\x50\x8f\x42\x9a\x07\xae\x93\xfd\xab\xe2\x75\xdc\x63\x63\x0c\xb3\xa4\xa5\x6c\xc9\xf2\xa3\x3b\x10\x8b\xd1\x80\xc6\x23\x44\xae\x2d\x66\x16\xde\x0f\x32\x41\x4b\xc1\xdd\xdc\x2a\x18\x1c\xa1\xa6\xae\xac\x58\x86\x2a\xd1\x4a\xe4\x60\x85\x64\x1a\x8b\x64\x18\x9e\xae\xa4\x90\xeb\xbc\x64\xad\x59\x90\x10\x03\x56\x73\xc0\x0f\xb8\x14\x0b\x95\x34\xe5\x0f\x25\x3c\x8a\xf2\x26\x36\x42\xe7\xfc\x88\x85\x58\x6a\x0e\x55\xd4\x70\xe0\x3b\x72\xcf\x57\xf0\x06\x3c\xf1\x8b\x9d\x11\x12\xe2\xc3\x09\xbc\xd1\x33\x0b\x5b\x36\x9b\xbd\xb0\x52\xd2\x64\xa8\x75\x8e\x73\xc8\x94\xd6\x30\x92\x57\xc6\xd9\xed\x9c\x26\x83\xd0\x69\x61\x8f\x7a\x9d\x74\xe8\x78\x88\xb5\x75\xc5\xd4\xb5\x22\xd6\xec\xd4\xba\x64\x2a\x10\x33\x07\x4c\xd1\x17\xd8\x70\x24\x79\x6f\xfc\x65\x41\x1b\x9c\x40\x7e\x89\x1f\xb1\x04\x45\x19\xd6\xd0\x95\xa9\x85\xf7\x5b\x6b\x33\xf5\x18\x7a\x3a\xf8\x86\x55\x03\x99\x02\xc1\x69\xd6\x0f\x30\x1e\x6e\xf9\x61\x6a\x05\xd1\xa3\x89\x4c\x9b\x87\xa3\xcf\xa8\xcb\x76\x3d\xb7\xaf\x91\xb3\xe3\xb5\x3f\x18\x9d\xc2\xdd\x87\x0a\x3c\x76\xf3\x0f\x30\xda\x7d\x38\xa0\xda\xab\x9b\x0d\x1e\x62\xd2\x19\xb2\x60\x5c\xfd\xe3\xef\x17\x4a\xaf\xcc\x68\xa7\x82\xa1\xc4\x68\x72\xe6\xfa\xf2\xf5\xcc\x7c\xf8\x1f\xd7\x33\xd3\x4b\xbd\x4e\xb1\x20\x56\x12\x8d\x18\xba\x69\x8f\xfc\x69\x44\xd3\x35\xdc\x5b\x1c\xa6\x18\xf6\x45\xc3\xd4\x41\x9a\xfc\x09\x81\x33\xe8\x4f\x10\xdb\x75\x29\xd0\x08\x96\xa2\x0d\x9a\xa9\x0c\x13\xe7\xa0\x1a\xce\x4a\xc9\x86\x3e\x50\xb9\x1c\x36\xa0\xbf\x93\x6e\xa2\x11\x06\x70\xa4\xb7\xdb\x2e\xa1\x54\x37\xf3\x29\x53\x57\xb1\x9f\x90\x40\xee\x16\xf3\xb3\xb4\xb0\xec\x30\xc0\xc2\x68\xc9\x5f\x9c\x7b\x47\x66\xcd\xfc\x35\x49\x93\xf2\xd8\x1c\x41\x29\x34\xa5\xad\x2b\x36\x66\x6e\x7b\xf2\x14\xbc\xdc\xd6\x28\xb2\xb0\x0a\x6d\x50\x34\x19\xe5\xa0\x61\x2e\x35\xb3\x8f\x32\xc3\x88\x8d\x2c\x03\x53\x93\x20\xb4\x53\x66\x6d\x57\x46\xde\x51\x54\x55\xd1\x82\x18\x26\x58\x29\x1e\x1f\x03\xd1\x4e\x56\xe8\x7b\x64\x86\xf5\x92\x66\x33\x97\xfa\x26\x39\xec\x91\xa2\xad\xea\x3e\xb1\x99\x92\xac\xd8\x3a\x80\x9a\xe7\xc5\x34\x11\x3b\x28\x6c\x1d\x6c\xe4\xe4\x03\xe6\xcf\x81\xe2\x84\x3d\x4f\x24\xb5\x2b\x90\xc9\x03\xdb\x42\x5f\x8b\xd2\x0a\xab\x45\x3d\xbc\x4e\x34\x32\xc8\xa6\x00\x63\x2b\xb5\x48\x50\xf3\xea\x48\xd8\x4c\xd1\xfb\xc6\xe8\xac\x49\x25\x2f\x0d\x3d\x64\x22\x7a\xab\xf7\xdb\x33\x51\xed\xf9\x4c\xf0\x53\x6b\x6a\xd3\xe0\xe0\x2f\xfb\xf0\x03\xd9\x4d\x7d\xc2\x6f\xdf\xf3\xf4\x22\xde\xb7\x40\x49\x00\xbe\x5d\xb0\x2c\x90\x8f\x92\x88\x16\xf2\x84\x15\x14\x63\x29\x1b\xd4\xff\x2a\xa1\xbc\xb2\x8e\x35\x1a\xe4\x12\x04\x7a\x85\xdc\xe0\x74\x43\x24\x4f\x24\xc3\x08\xd9\x6b\x3d\x21\xc5\xee\x59\x01\xc9\x10\x84\x1a\x10\x2c\xb0\x19\xc9\xbb\xa3\xfc\x45\x4f\xce\xd9\xe0\x1f\x80\x54\x02\xc5\xa2\xa4\xf5\x3e\xad\xac\x05\xed\x6b\xdd\x8f\xc9\x88\x38\xcf\xfd\x58\x90\x4c\x9c\x62\xee\xe5\x01\xb5\x3d\x0c\x98\xa5\xfa\xfd\xde\xf3\xbe\x42\x63\x8c\xd0\xcd\x29\x05\xad\xc8\x7a\xbc\x8d\xc4\x24\x3d\xf6\x0b\xb0\xc7\x03\x90\x27\xf5\xd1\x6a\xc0\x58\xee\x37\xb9\x8f\x02\xf4\x7c\xcf\xfd\x2e\x47\x8f\xa3\x0a\x24\xd9\xc1\x45\x3d\x68\xad\x4a\x29\x9a\x8c\x3f\xf9\x08\xaa\xe5\x33\x43\x0a\xf9\xc7\x34\xfa\x70\x45\xd1\xe4\x65\x49\x96\x4d\x6c\x59\xe3\x1f\x11\x91\x30\x5e\xd0\x2d\xfa\x3f\xe4\x5f\x94\x1b\xd6\x14\x03\x02\x9e\x52\x50\x59\x1d\x28\xf2\x7f\x30\x71\x51\xb7\x71\x0a\x7f\x82\x73\x25\xef\x17\x56\x3a\x24\x65\x58\xb8\x24\xeb\x29\xdb\xde\x84\xc7\xab\xba\x99\xc3\xad\x0f\x79\xde\x66\xe0\x71\xaf\x53\x90\xca\xe9\x72\x8f\x72\xcb\x2a\xb0\x0e\xac\x72\x7f\xd6\x42\xcb\x96\x72\x6b\x68\x61\xb1\x2f\xab\x3c\x00\xe9\x91\x11\x3a\xca\xbd\xbe\xc0\x0e\xc4\xa6\xd2\xbf\x4d\xd6\xb2\x75\xa3\x3f\x08\xb6\x64\xe6\xb1\x1d\x15\x62\xdc\x23\x38\x6b\xad\xcf\x80\x4b\x1b\x9b\x45\x45\x23\x87\x43\xd8\x16\x0b\xb6\xd7\xa9\x2b\xb1\x97\xf4\x96\x6f\x99\x25\xf3\xad\x9e\xe8\x28\x69\xd0\x48\x3e\x5c\x17\x8e\x65\xed\x47\x54\x8e\xf0\x43\x21\xdf\x9b\x5d\x58\x9c\x61\x61\xdc\x81\xce\xeb\xbd\x9b\x04\x87\x42\x49\xec\x3c\x46\x62\x0c\x86\x5c\x16\x37\x4d\xc9\xc6\x70\x17\xc4\x66\x5c\x6b\xd7\xc1\x0d\xf8\xfc\xd1\x47\x9a\x90\x07\x61\x91\xed\x06\x41\xc0\x82\x31\x01\x37\xf3\x40\x9c\xa2\x64\x18\xea\x26\x14\xec\xfd\x44\xb1\x20\x44\x8f\x07\x05\x04\x0a\x40\x59\xa8\xa4\xd9\x8a\x4a\xee\xe1\x9b\xac\xcf\x29\x48\x1e\x71\x0a\x67\x22\xe2\xe3\x4b\xb4\xf4\xa7\x00\x74\x87\xe2\xe7\x3b\x43\x94\x71\x3d\x09\x36\x10\x0b\x26\x07\x1e\x79\x10\x0d\x90\x39\x13\x21\xf8\x19\x4e\x7d\x4b\xc2\x25\x4d\xc6\xed\xfd\x7a\x5f\xd2\x5e\x67\x02\x40\x07\xec\xe7\x93\x02\xd0\x35\x11\xc3\x4a\x02\xe8\x48\x88\x97\x06\xd0\x61\x2d\x20\x0d\xa0\x47\x12\x62\xcd\xe7\x7d\xc0\x1c\x82\xb1\xb8\x23\xe0\xff\x34\x17\x77\x37\x95\x6d\xb7\xf8\x3e\x0d\xc7\x22\xa8\x01\x0b\x41\xdf\x70\x87\x62\x35\x4c\x8c\xe0\x3f\xed\x86\x5d\x4f\xec\x10\xec\x63\x25\x43\x96\x84\x35\x2d\x0d\xe4\x17\x62\x99\x9b\x5d\x98\x5a\x9c\xa2\x7d\xce\x99\x1d\xe0\x4f\x9e\x65\x02\x1e\xaa\x7a\x6e\xed\x4f\xa9\x54\x49\x23\x7f\xf4\x78\x9d\x19\x16\x35\xad\x4e\x97\x39\x72\x0a\x59\x05\xbd\xa4\xca\x90\xd2\x83\xfe\xa8\x18\x50\x3e\x66\xd4\x4f\x5a\x0c\x3e\x04\xe6\x52\xf5\x9c\xa4\x22\x59\x31\x71\xce\xd6\xcd\xcd\x34\x9a\xd3\x2d\x85\x67\xf8\x48\xc8\x80\x7f\xad\xd3\xe6\x18\x79\x6c\x12\x59\x68\x5b\xc8\x30\x15\x9d\x68\x49\x94\x21\x08\x0b\xe8\xa6\xcd\xe3\x90\x55\x7d\x03\x5b\x10\x8e\x5b\x50\xf2\x05\x6c\xd9\x3d\xea\x36\x74\xde\xfa\x68\x35\x16\x82\xc0\x2b\x74\x16\xd1\xe2\xec\x62\x66\x3a\xd0\x61\x2c\xb2\xed\x98\x06\x01\x7f\xfc\x36\x39\xe0\xc6\x63\xe8\x4f\x88\x2e\xec\x6b\x6c\x4c\xc6\x26\x27\xfe\xd2\xc1\x7b\x6b\xfc\x66\x61\x76\x66\x79\x7e\x69\x7a\x72\x21\xae\x2f\xd1\xf0\x10\x7a\x25\x65\x68\x7a\x1a\x2b\x9e\x0c\x6a\x57\x2f\x5d\x28\xa7\x6c\xbe\x4f\x20\x58\x5f\x42\x96\xa2\xe5\x55\x8c\x24\xd3\x94\x36\xa9\x9b\x32\xd0\x47\xd2\x42\x8a\x66\x29\x32\x46\x32\xb6\x72\xa6\xb2\xc2\x63\xd9\xc1\x3e\xee\xd7\x45\xbe\x0e\xfd\x27\x7f\x6f\xe9\x1a\x6d\x73\xc2\x14\x30\xb6\x39\x3f\xe4\xed\x1c\x02\xcd\xf0\x21\x6d\xd9\xd4\x6d\x3d\xa7\xab\x7e\x33\x4a\x3b\x67\x30\x57\x44\xf0\x3d\x19\x93\x4b\x05\x4c\xb5\xff\xea\x1b\x97\xd3\x97\xd3\x6f\xbc\x91\xbe\x3c\xf6\xe6\xdb\x11\xdf\x30\xe1\xce\xdf\xfe\x97\xcb\xa3\x6f\xbf\xfd\x56\x34\xec\x9c\xa9\x18\x61\xd8\x19\xc2\x9b\x10\x55\x00\x7b\x1c\x4a\xc7\x20\xdb\x94\x56\x57\x95\x1c\xdd\xe7\xff\x53\xd7\x70\xc6\xef\x89\xe2\x75\xe7\xff\xe8\xe7\x77\x4d\xe2\xac\x17\xd3\x79\x88\x6c\x77\x5e\xfd\x2e\xb2\xbb\x2c\xfa\x30\x65\xa3\xc5\xcc\xd5\x7e\xf7\xdb\x60\x68\x78\x0d\xbd\x6e\x5b\x46\xf0\x4b\x6a\x65\x1b\x10\x1e\x43\x6a\x68\xdb\x3e\x39\x83\xe9\x57\x9b\x53\x4b\x96\x8d\xcd\x65\x4d\x97\x31\xdb\xcb\x01\x09\xc2\xde\x21\xb7\x06\xfa\xdb\xaf\x47\x5b\x7f\x2c\xe2\xa2\x6e\x6e\x2e\x17\x57\xe8\x0b\x6f\x5c\x7e\xf3\x6d\xef\x95\xed\x50\xaf\x5b\xd1\x72\x40\x49\x3a\x7d\x95\xfa\x90\x52\x32\xb3\x43\xca\xc8\x96\xf2\x2c\xbb\x8a\x67\x0b\x6d\x98\x8a\x6d\x63\x8d\xcf\xef\xf5\x89\xcc\x1c\x8f\xc6\x5f\x40\x01\xd7\x04\xe2\xae\x09\xaa\xe1\x6a\x9b\x68\x45\x2f\x69\x72\x48\x04\xc4\x47\xef\xb6\x4c\x37\x04\xde\xa5\x0c\x94\xd7\x55\x39\xc1\x8b\x9c\x73\x4d\xa9\xb8\x9c\xa7\x13\xf3\x76\x6b\x2b\x5e\xc1\x87\x49\xfa\xd1\x26\x00\x64\xc3\xda\x90\x99\x1d\x45\xfa\xea\x28\xcc\x25\x79\x32\x08\xd1\x12\x18\x23\x1f\x21\x8c\x6f\x90\xb0\x87\xd6\x96\x37\x66\x61\x07\x07\xcf\x46\x6c\xee\xbd\xa9\x1f\xc4\xc4\xc7\xd4\xc1\x5e\x9c\x7d\x7f\xb2\xaf\xbb\x4c\x7c\xd6\x4b\x5b\x1b\x58\xb4\x34\x3f\xdd\x17\xba\x7e\xbb\xfc\x46\xc0\x09\xdc\xf2\x93\xf4\xfa\xd5\xd0\x3f\xbe\xf2\xfd\x0f\xd0\x2c\xb6\xbb\x91\xfc\x3c\x9a\xc5\x76\x4d\xf3\x79\x35\x8b\xed\x9a\xb0\x2e\x9a\xc5\x9e\x3f\xcb\x9d\x63\xb3\xd8\xe1\x72\xe1\x39\x35\x8b\x3d\x07\xb6\xec\xbb\x59\x6c\x7f\x1c\xfa\xb3\x91\x89\x43\x6f\x16\xdb\x3d\x43\xfe\x6c\x9a\xc5\xf6\xc2\x86\xaf\xab\x59\x6c\x5f\xec\x98\xe4\x82\x31\x90\x66\xa6\x28\x59\x37\xd3\xde\xb0\x27\xec\x2b\xdb\x11\x62\xf7\x7d\x65\x3b\x81\x1c\x5a\x8b\xc9\xee\xd6\xc6\x5f\x19\x22\x12\xe9\xaa\x90\x35\xf1\x57\x84\x3c\xf7\x56\xa3\xd7\x40\xdf\x41\x2c\xd9\x70\x10\x0f\xad\xc7\xe8\x6b\x63\x80\xf5\xb7\x24\xa3\xc7\x28\xc4\x75\x6c\x5a\x4a\x8f\x33\xcd\xbe\xf5\x84\xd6\x48\x6e\x15\xa5\xd6\x47\xc0\x3e\x0a\x7f\xa7\xd8\x1b\x23\x60\xb4\x94\x54\x4b\xf7\x92\xac\xba\x36\x5c\x2e\xce\x67\x26\x26\xd1\xe4\xfc\xfc\xec\x3c\x39\xe8\x32\x8b\x53\x33\x57\xd1\xf4\xec\x55\xe8\x4e\x88\xb6\xb6\xd2\x73\x92\x5d\xd8\xde\x1e\xcf\x6a\x5b\x5b\xe9\x49\xd3\xdc\xde\xee\x0e\xc3\xf4\x14\x2b\x25\xc5\x1c\x86\x45\xac\xd9\xe3\xdd\x81\xa0\xd9\xe2\x82\x6f\x9c\xbf\xdf\x72\x6a\x2f\x05\x5f\xce\x2d\x75\x87\x49\xd2\xc0\x78\x0c\x4c\x66\x81\x73\xca\x2b\x65\xa3\xaf\x22\x72\x87\xf3\x8e\x37\xb8\xc3\x09\xa0\xbb\xd5\x9a\xf3\xb7\xbd\x80\x1a\xd6\xdc\xdf\x73\x1e\x56\xdd\xa3\x0a\x54\xd3\xbd\x7d\xdc\x2c\x9f\xba\xb7\x8f\xa1\xef\xe6\x7e\xd9\x79\x04\xaf\xd5\x76\x9c\x3b\x47\x5e\x5b\xcb\xc3\xcf\xdc\xa3\x3d\x31\x95\x3f\x03\x0a\x1f\xee\x0e\x86\x42\x74\xf1\x0a\x6d\x7b\x39\xee\xb5\xc6\xc1\xc2\xea\xd6\x83\xa2\xfb\x22\x6d\xa9\xda\xa8\xff\x79\x1c\x35\x0f\x77\xdd\xaf\x9f\x20\xf7\x60\x17\xc5\x94\xf2\x96\x34\xc2\x19\xac\x29\x62\x6b\xf5\xa0\xd1\x50\xdd\x2b\xd8\xa8\x5e\x55\xac\x62\xc9\xb2\xd1\xaa\x62\x5a\x50\x00\x91\xd5\x6a\x12\x0d\xcf\x57\xdc\x5b\x46\xe3\x7e\xfa\xbd\x5b\xab\x86\xd9\x63\x34\x38\x0f\x9f\x1e\xbb\x0f\x76\x90\x53\xdf\x77\x8f\xce\x9c\xfd\x27\xd0\x78\xe4\xbb\x57\x6e\x6d\xc7\xfb\xf4\xd4\x3d\x78\x45\x46\x18\x3b\x40\x30\xc2\x06\x6b\x6a\x7a\x45\x02\x79\xa5\x25\x89\x05\x37\x63\x39\xd6\x21\xef\xec\xed\xb8\x37\x6f\x20\xb7\x72\xc3\x3d\xfc\x1e\x5a\xd4\x1e\x7e\x06\xf5\xb4\x1f\xef\xba\xaf\xee\x93\x65\xab\xed\xd2\x02\xe2\xfe\x28\xa0\x03\x2b\xeb\x96\x92\x68\x1f\x78\x14\x43\x71\x45\x45\x5b\xd5\x79\xeb\x87\x55\xdd\x24\xc2\x8b\xd5\x81\x9c\x91\x8a\x78\x7b\x7b\x50\x43\x68\x85\x0b\xed\x5e\x80\x0f\xd9\xdd\xad\xa7\x71\xfc\x0c\xb6\x74\x67\x22\x79\x15\xe7\x15\xdd\x2e\x20\x55\xcf\xad\x01\xaf\xd3\x40\x01\x56\xff\x5a\x58\xf6\xcd\x7d\x58\x6b\x9c\xed\x22\xb7\xf2\xc2\xbd\x55\x69\x3c\x7f\x85\xd8\x03\xc2\x99\xb5\x2a\x7b\x0e\xb7\xef\x7b\x77\xd9\xa5\x30\x48\x99\xd7\xe5\x37\x39\x81\xe4\xc4\xa2\x59\x17\xdb\xdb\x40\xe8\xd6\x56\xfa\x0a\x8d\x73\x90\xb7\xb7\x45\x74\x06\xbf\x6a\x3c\x7f\x75\xd1\x7d\xb0\x73\x29\xfc\xe5\xc0\x88\xf4\x62\x35\x56\x14\x9b\x8a\x0d\x32\x91\x63\x74\x3e\x45\xf4\x39\x2f\xf7\x9c\xfb\xd5\xe6\xde\x13\x72\xf5\x6f\xde\x3e\x23\xfb\x9e\x4e\xe5\x58\x68\x46\x41\x6c\xf4\x49\x21\x84\xfe\xd9\x7a\x1e\x43\xad\x33\xf0\x58\x7b\x61\x89\x92\x26\x8f\x41\x79\x6d\xbb\x20\x22\xb5\x59\x01\xc6\xbb\x7d\x16\x68\x31\x31\xe6\x54\xee\xb2\x76\x02\xce\xa3\x2a\x21\xbe\x79\xf0\x5d\xe3\xdf\x2b\x60\x2c\xb8\x7d\x36\x08\xaa\x4d\x49\x93\xf5\x62\x2a\x82\x78\xf2\x68\xb4\xbb\x21\x00\x55\xa3\xa8\xab\xa1\x38\x0f\xab\xce\x17\xc7\x7d\x8d\x88\xc6\xff\xe9\x26\xab\x3a\x53\x08\x94\x69\x04\x3f\xdc\x28\x39\x2d\xd7\x58\x8e\x1d\xb8\xca\x68\x90\x0c\xf5\xc3\xd1\x27\xcc\xed\x85\x24\x43\x94\x96\xc3\x9a\x55\x05\x05\x04\x6a\xd4\xab\xee\x6e\x65\x14\x39\xfb\xfb\xe4\xe1\x8d\x13\xd4\x78\xfe\xa2\x51\x2f\xa3\xe6\x41\xb5\xf1\xbc\x3c\x8a\x9c\x27\xfb\x64\x03\x7c\x7b\xc2\x9e\xd0\x2e\xdb\x3b\x8d\x67\x3f\x35\x0f\x2a\x8d\xa7\x75\xe7\xd3\x0a\x72\x9e\x9f\x36\xce\xea\xb1\x63\x0b\x0a\x35\x16\x82\xd6\x7a\xae\x76\x75\x4c\xc2\x40\x5a\xa4\x1f\xa3\x2b\x96\x0e\x7b\xd3\x00\x47\x29\xad\x80\x80\x68\x05\x04\xbf\x33\xb6\xae\xc5\x4f\x61\xb7\x50\xe2\x48\x81\x3e\x8b\xfc\xbe\x28\x1a\xbc\xd7\xb3\x21\xd4\xab\xa5\xe3\x40\x15\x2d\xef\x81\x4e\xa7\xc5\xc2\xa5\x0d\x26\x72\x8f\xef\x91\x0f\x04\xa0\x71\x0e\xaa\x1c\x93\x05\x84\x8b\x58\x0c\xec\xa3\x57\xee\xd7\x75\xe8\x10\x03\x4d\xa5\xe2\x01\x07\xab\x4c\x42\x59\x66\x76\xe9\x21\xa2\x38\x33\x37\x75\x9d\xfe\x6b\x7b\x1b\x1a\x89\x2b\x26\xb6\x10\xb9\x6b\x04\x5e\xba\xa6\x68\x13\xd3\xfe\x7b\xb4\x3f\x39\xb9\x30\xe5\x4a\xa6\x89\x35\x5b\xdd\x24\xab\x12\xf8\xe0\x1d\x45\x93\xcc\xcd\xc0\x07\x8b\x3a\x2a\x19\x79\x53\x92\x31\xad\x22\x35\x31\x3d\x15\x6e\x40\x3e\xee\x5d\x35\xf3\x8a\x5d\x28\xad\x40\x1c\x76\xb0\x0b\xf9\x58\x4e\x55\xfe\x49\xe6\xbd\x89\xba\xbb\x8c\x74\x9e\x80\x98\xc1\x4f\x4c\x4f\x5d\x53\x60\x10\x1d\x87\x4d\x27\xe9\x1c\xc7\xdb\x3e\x32\xe7\x59\xd9\xad\x95\x83\x03\x73\x0f\x41\xb2\x92\x51\xf9\x3f\xf2\x41\xb9\x47\xa7\x17\x1b\xf5\x9d\x4b\xa8\x79\x50\x76\xbf\xde\x6f\x1e\xf0\xde\x63\xa8\x59\x29\xbb\x0f\x4f\xc2\x9f\x70\x78\xa0\xfa\x7b\x62\x97\x80\x06\xc9\x7c\x78\xab\xf1\xe3\x19\x55\x46\xc9\xb1\xea\xb5\x47\xea\x6a\xa4\x20\x02\xeb\x4f\x9c\x93\xb3\x24\x9d\xfb\x42\xe3\x0f\xb5\x10\xb1\x75\x5d\xed\x8e\x4b\xc0\xa8\xec\x07\x4b\xf0\x20\x0a\xea\x49\x64\x95\xd1\x78\xb0\x03\xd4\x30\x25\x6f\x60\x0d\x09\x6d\x13\xee\x41\x8d\xc8\xce\x6f\x4f\x68\x63\x1f\xf7\x56\x05\x54\xdf\x67\xdf\xbb\x3f\x7e\x17\xb8\x44\x81\x45\xdf\x3f\xdf\x5a\x7c\x30\xcd\x83\x2a\x72\xfe\xfe\xc4\x79\x74\x14\x43\xb6\x26\xa3\xf7\xb0\x2a\x92\xab\xf4\x62\x8f\x9c\x2f\xcb\xee\x5f\x76\x9c\xc7\x77\xe3\x01\x11\x4d\x3c\x16\x90\xfb\xd5\x69\x3c\x84\x8f\x09\xb7\xd0\xbf\xb7\xb7\x3f\x46\x0a\xad\xc9\xce\x6c\x17\xb4\xd6\x3a\x4b\x82\xc1\x32\x0d\x5a\xd5\x68\xbc\xce\xc4\xbb\x7c\x0d\xc7\x24\x55\x91\xac\x34\x42\xf3\xb4\x5e\x27\x01\xd0\x02\x96\xaf\x76\x07\xf0\x1a\xd2\x4d\x99\x96\x8a\xe5\x8e\x00\x1a\x1f\x48\x5e\xa0\x6b\x09\x8a\xb7\x85\x85\xda\x76\xf9\xd8\x7d\x59\x21\x22\x96\x48\x5a\xb2\xa2\x7f\x3d\xa1\xbd\xae\xc8\x39\xc9\x26\x37\x4c\x9c\xb7\xad\xe8\xe5\x98\x0c\x8c\xbe\x37\xe6\x3c\x2f\x3b\x7f\xbf\xe5\x3e\xbc\xc5\x37\x0f\x85\x0e\x9a\x27\x3d\x8e\x8e\xca\xa8\x51\xdf\x71\x6e\x7f\x43\x54\x80\x67\x7b\x28\xd0\x66\x2c\x96\x90\x96\xe9\x61\x74\xf9\x3e\x3a\xa7\xbe\xdf\xf8\x8f\xb3\x8e\x3b\x4a\xb0\x86\x81\x16\x3d\x74\x6d\xa0\x25\x0b\x9d\xf3\x91\xad\xad\xf4\x1c\xfc\x49\x6f\x71\x23\x4c\x54\xe6\x20\x60\xd3\x36\x37\xfd\xac\x27\x38\x3a\x05\x5f\xf1\xca\xdd\x1a\x5f\x1d\x1a\xab\xce\x5e\x0f\x2e\xa4\xa2\xad\xeb\x6b\x71\x4c\x91\x46\xe8\x3d\x7d\x03\xaf\x63\x73\x14\x2a\x0e\xb3\xd8\x51\x6a\x3b\x58\x2d\xa9\x2a\x21\x49\xc6\x26\xd1\x8d\x68\xb5\x70\xa5\x68\x48\x39\xd8\xef\x21\x5a\xc9\x4f\x5e\xdc\x63\x3b\xc5\x94\x36\xe1\x29\x1d\xcb\x1a\xed\xd0\xa2\x59\xab\x9d\x65\x22\x57\x1a\x9c\x84\x95\x33\xf7\x87\x6a\xb8\x03\x5b\x27\x34\x65\x8f\xad\x6a\xd5\xc6\xd3\x3a\xb4\xa0\xfb\x4b\x99\xf0\x8d\xe0\xc5\xa0\xf9\xc7\x3f\x03\x88\xe4\xff\xeb\x09\xd1\x57\x1b\x67\x75\xf7\x51\x27\xbc\x61\xa4\xa0\x6f\x56\x6e\x34\xbf\xfa\x06\xd0\x3c\x20\x47\x4e\xf3\xe1\x2e\x21\xa2\x79\xc0\xfb\xbd\x12\x7c\x5f\x31\xcb\x4b\x87\x0e\x99\x8c\x87\x69\x79\xe9\x34\x2d\x33\x0e\x3d\x7d\x59\xbc\xa0\x8c\x57\x15\x0d\xcb\xa8\xa8\x9b\x84\x8b\x24\x22\xc3\x73\xe2\xfd\x0f\x3d\x69\xc9\xb0\xd9\x4c\x07\x36\x2f\x9b\xa5\x87\x15\x32\x7e\x72\x72\xdd\xbb\x8b\x9c\x67\x40\x39\x18\x3c\x6a\x07\xee\x51\xf4\x8c\xc5\x92\x6e\xd1\x72\xe6\x58\x46\x2b\x9b\x01\x61\xc6\xca\xb6\x76\x69\xf4\xd5\x8b\x46\x89\x65\x9a\x58\x05\x9d\xde\x80\xac\x82\xf4\x06\x02\xbf\x1e\x2f\xfb\xc9\xe5\x27\x68\x6e\xe0\xc9\x13\x5d\xe3\x82\xcb\xf8\xa6\xfb\xb8\xec\x35\xe8\xad\x50\xb0\x8d\xfa\x9f\x41\x88\x3d\x2f\xbb\x9f\xd6\xd9\xe2\xd1\x46\x86\x71\x04\x42\xd8\x28\xf9\x9c\xa8\xbf\x6d\x43\x1e\xa5\xb2\x80\x9c\xba\xb6\xb4\x86\x91\x84\x36\x0a\x8a\x8a\x91\x58\x45\xa6\x0c\xe6\xdc\xad\xb6\x6d\x2b\x82\xc5\x27\x10\xc4\xa9\xbf\xa2\x1e\xd5\x60\x61\xfb\xa2\x8e\xdc\x3b\xd5\x46\xbd\x4c\x16\xba\xf1\xf4\xcc\xf9\xf6\xb4\x6d\x25\x91\x58\xf1\xd6\x35\x0d\xe7\xc0\x2d\x2c\x97\x8a\xd0\x03\xc5\xc4\x39\xac\xd9\x34\x9f\x07\x2e\x6a\x86\x01\xba\x9a\x61\x30\xc3\x1a\x88\xb9\x3c\x79\x36\x6b\xe6\xd9\xb3\x31\x76\x37\xdd\xda\x4a\x43\xc6\x0f\x7b\x2c\x59\xe4\xc9\x12\xf3\x95\x6d\x6f\xa7\xd3\x69\x61\xb6\x94\x7b\x58\x6f\x3c\xab\x3b\x77\xbf\x1b\x0d\x7f\x73\xd1\xad\xbe\xba\x44\x94\x8d\x10\x42\xf7\x51\xdd\x7d\x7c\x63\xac\x05\x1f\xb3\xde\x51\xf5\x8f\x59\xef\x7c\xc2\xf9\xfd\xf7\x45\xb5\xf1\xe3\x2b\xd6\x0e\x12\x39\x5f\x1c\x37\xf7\xcb\xec\x76\x92\xd5\x3a\x4e\x93\x2d\x29\x20\x76\xff\x71\xe7\x87\x4d\x8c\xfb\xc3\xbe\x5b\xbb\x71\x91\x8d\xf7\x52\xc7\x19\x32\x14\x4c\x75\x50\xda\x20\x08\xe5\x74\x19\xfb\x2d\xa6\x3d\xad\xd4\xd6\x91\xa4\x41\xeb\x3b\xff\xd4\x0a\xfe\x7e\x91\x75\x19\xb2\x25\xaa\xd3\x4a\x76\xf0\x67\xa1\xab\x20\x42\x8f\xad\x20\xf7\xb3\x3d\xb0\x1b\xfc\xb4\xef\xdc\x07\x0b\x99\x73\xe7\xd8\xf9\xe6\x8c\xcb\xff\x88\x8f\x0e\xef\x22\xe7\xf9\x0b\xf7\xd3\x93\x8b\x44\x5a\x7e\x7b\x02\x82\xe1\xe0\xd4\xb9\xf3\x32\xea\x6d\xa2\xb2\xdc\x39\x76\xef\x54\xc9\x16\x74\x1f\xde\x13\xb9\x13\x74\x03\x7a\x15\xb0\x89\x81\x3c\x07\xc6\x35\x0b\xf0\x28\x63\x18\xdb\xdb\x10\xe0\x4c\x2b\x89\xb0\x1f\x17\xe1\x5f\xf4\xc7\xfe\x98\x4a\x6c\xfc\x8c\xe6\xa3\x20\x59\x84\x2b\x68\x83\xd0\xe4\x0c\x46\xb8\x88\xd9\xd3\x0f\x9e\xb6\x0c\x85\x87\x2d\xd1\xb5\xa1\xb3\x1d\x6f\x1c\x00\xc5\x08\x7a\x4a\x29\xf4\xc8\xe4\x96\xa3\x56\xdb\x7c\x56\x9b\x34\x4d\xdd\x1c\x47\x1d\xbc\x97\x6d\xbe\x02\xcf\x92\x04\x0c\x40\xdd\x2a\xf7\x5b\x1c\x30\x59\xcd\xad\x1c\x3b\xdf\x54\x02\xd0\x3b\x90\x9b\xd3\x8d\xcd\xf0\xa1\x35\x8e\xb8\x67\x55\x17\x53\xd7\x76\x7a\x01\x9f\xc1\x3c\x85\x29\x6a\x81\xd6\x81\x1a\x19\xd3\xca\x2e\xac\x0d\x05\xb5\x0f\xa0\x0d\xdd\x04\x8b\x8e\x97\xac\xf7\x5f\x85\xd6\x5d\xb8\x6c\xbb\x0f\xef\xb9\x87\xb7\x90\xb3\xbf\xef\xd4\x3e\x6f\x7e\x56\x73\xbe\x3d\x01\x27\xc3\xde\x5d\xe7\x79\x39\xca\xe4\xf9\x5f\x3b\xd1\xb5\x4a\x16\x95\xdc\x6a\xc1\x2f\x88\x68\xb6\xa6\x80\x08\x76\x57\x71\xbe\x2c\x3b\x4f\xf6\xb9\xca\x57\xff\x0f\xf8\x4f\x27\x9f\x46\x0b\x42\xc3\x80\xe8\x27\x19\xb4\x40\x4f\x06\x8e\x20\xea\xbb\x56\x56\xb1\x25\xea\x96\x78\x8d\xfd\xcc\xdb\xe6\xb2\xeb\xcb\x69\x0b\x24\x50\x21\x0f\x9e\xf6\x4e\x22\x64\x51\x62\x80\xba\xa4\x59\x25\xc3\x80\x74\xc8\x69\x78\x0a\x37\x98\xc5\x02\x86\x6e\x2e\x1a\x7b\xd5\x42\x92\x89\xc7\x85\x07\x88\x08\x10\x11\xf8\x20\xd3\x5e\x45\xd0\xea\xab\xcf\xee\xc1\x9e\x53\x3b\x26\xca\x54\xe0\xfd\x1d\x10\x80\x47\x7b\x8d\xe7\xaf\x50\xa3\xfe\xc0\x7f\x5d\x7c\x4e\x84\xc6\x08\xe6\x60\x30\xd6\xc3\x1d\xda\xdf\x98\x73\xaa\xc4\xb4\x72\x91\xc4\xf7\xa6\x3d\xea\x23\x7e\xfb\x7c\x58\xed\x7d\xfe\x99\x94\xe9\x52\x93\x8d\x02\xd1\xee\x9c\xb4\x75\x4f\x98\x05\x99\x46\x2c\xaf\xbc\x57\xda\x24\x94\x58\x98\x81\xad\xa6\xb7\xa1\x87\xce\x15\xef\xf8\x91\x34\xe5\x8f\xf4\x94\xa6\x47\x41\x1c\xc1\xf0\x33\x3b\x25\xfc\xf3\x83\xc3\xe3\xe7\x44\x0f\x6b\x63\x61\x53\x91\x54\xe5\x8f\x38\xe8\x02\x16\x31\x89\xe7\xa1\x75\x1f\xdf\x70\x6a\x27\xcd\x07\xfb\x89\xfc\x9f\x11\xc8\x68\x5c\x92\xd8\xdf\x79\x78\xcb\xf9\xa2\x4e\x6e\x83\xdc\x07\x14\x81\xaf\xe3\xcd\x8a\xa3\x65\x7a\x80\x6e\xe6\xd3\x20\xe2\x33\x73\x53\x71\xe7\x19\x9b\x65\x72\x4c\xc0\xa9\xcb\x8f\x58\xb1\x1f\x2a\x0c\x55\x4c\x8d\x36\x62\xf3\x60\x4f\x1b\x17\x69\x92\x37\x68\xbd\x25\x43\xd5\x25\xa1\xd7\xe2\xf0\x96\xf3\xa8\xea\xdc\xaf\x82\xa6\x09\x36\x23\xa0\xe2\x61\x99\xe8\x4a\xfc\x2e\x56\x66\x01\xcb\x89\x57\x84\x10\xa3\x1b\x58\x0b\xb8\x52\x63\x2e\x81\xbe\xe7\x34\x80\xf0\xf0\x34\x39\xaa\x0d\x53\xb1\xb1\x97\xda\x2e\xc0\xf2\x3f\x15\x23\x08\xff\xfe\x59\x67\xf8\x3c\x76\x76\x71\x62\x8e\x3a\x51\x04\xa0\xc9\xef\xbe\x17\x85\xce\x55\x07\x90\xde\xc4\x74\x9c\x93\x44\xe0\x58\xe5\x04\x05\xdc\x59\x44\xfd\x24\x2b\xaf\x4a\x36\x36\x51\xc9\x12\xce\xfb\xa7\x15\x72\x5f\x0d\xac\x7c\xa8\xdb\x3e\x17\x08\xfe\x21\xde\x15\x2d\x70\x21\x60\x36\x12\x68\xbb\xbc\xb2\x09\x6d\x40\x74\x33\x6f\xa1\x8b\x10\x88\x09\x05\x4c\x44\x17\x05\x88\xf7\xaf\x85\xe5\x52\x80\x43\x7d\x73\x77\x2b\x79\x17\x1b\xa7\x3b\xce\xb7\x27\xc8\xad\x95\x63\x3a\xc0\x73\x6a\x35\xbc\x01\xfe\x3d\xd1\x06\xb9\xb9\x8b\x02\xed\xd8\x93\x8c\x9f\xba\xb9\xa9\x8f\x9e\x37\x2c\xe9\x8a\x83\x02\xb1\xf8\x21\x8f\x75\x57\xe8\x69\xe1\x20\xaf\xb3\x5d\x8c\xaf\xf9\xe8\xd4\xbb\x4f\x52\x6c\x5d\xb2\x32\x4f\xe9\x47\x71\x85\x26\x9d\xe7\xa7\xee\xc1\x2e\x58\xf6\xfe\xf6\x32\x29\x5c\x7a\x24\x4b\x25\x08\x09\x17\x37\x29\x0d\xfb\x9d\xbf\x3d\x42\xcd\xcf\x6a\xcd\x1b\xf5\xee\xb0\xd0\xd4\xba\x8e\x18\x9c\xb3\x3d\xa2\x54\xfd\xfb\x71\x77\xd0\x7b\xf2\x9c\x27\x44\x11\x13\x2a\x45\x0f\xef\x64\x70\x4a\xa6\xca\x98\x06\xd2\xa8\xa9\x62\xd1\xa3\x18\x21\x5b\xf2\xd1\x51\xc0\x88\xb1\x34\x3f\x9d\x88\x0a\x0d\xbd\xb7\xb8\x18\xbf\x55\xe0\x85\xee\x58\x34\x08\x75\xdc\x4b\x7f\xe6\x71\xbd\xf4\xd4\x64\x95\xb6\x68\x35\x1f\x56\x6e\x32\x41\x75\x49\x2f\x1a\xb8\xfd\xb0\xe8\x06\xd3\x45\x56\xce\x6b\x6e\x76\x7e\x11\x32\x14\x03\xb1\x32\x97\x62\x33\x15\x42\x30\x8b\x9b\xac\x69\x59\xd2\xaa\x6d\xa1\x42\x61\xdd\x02\x6e\xab\x44\x19\x02\x0c\x8f\xd2\x83\x04\xdf\x52\x69\xad\x05\xfc\xd8\xaa\xae\x77\x8f\x42\x5c\x44\xad\xdf\x1a\x6a\x1e\xef\x11\xd2\xf9\x45\x35\x10\xfa\x43\x0f\x48\xaf\x41\x87\x51\xb2\x0a\x58\x46\x56\x09\xca\x79\x81\x5b\x49\x28\x2c\x9e\x36\x9e\xbf\x70\x6b\x5c\x79\x6c\xde\x3b\x73\xef\x54\x21\xbd\x0e\x0c\x40\xfc\xec\x70\x0f\x9e\x22\x7e\x03\x4e\xb8\x4d\x74\x33\x1f\xab\xb8\x26\x03\xd3\x53\x11\x2a\xb1\xdf\xfb\x29\x72\xea\x5f\xb6\x25\xcf\xc1\x43\x7a\xd2\x8f\x7a\x16\xe2\xfa\x97\x10\xe1\xf4\xbc\x46\x94\x05\x1a\xcd\x22\xbc\xde\xf6\x56\x8b\x4d\x48\xe6\xb3\xef\x1b\x2f\x4e\xc0\xe2\x5f\x3b\xa0\x04\x3f\xde\x71\x7e\xd8\xe5\x69\x83\x6d\x44\x77\xa0\x6b\x0d\x6f\x0e\x2a\xf8\xaa\xf9\x69\x82\x93\x04\x06\xdd\xca\xab\xa6\x5e\xf4\xcc\x4f\x7e\xd9\xaf\x55\x78\x2b\x3e\x72\x8d\xdb\xa0\xca\xc7\x6e\xed\x80\x2b\x6f\xed\xfc\x88\x3a\x51\x34\x58\x8b\x7d\xb7\xc6\xd5\xe4\x46\xfa\x56\xeb\x3c\x1f\x5f\xac\xb5\x94\x8f\xd2\xbf\x24\x6d\x6d\xa5\xdf\xe1\xff\x98\xe9\x4c\x75\xcb\xbb\xa8\xf5\xd2\x90\x0c\x3d\xd3\xd7\xb7\xb6\xd2\x57\xe0\x2f\x06\x8c\x70\x5f\xdb\x5c\x0f\x61\x52\x09\xbb\xb4\xe2\x6e\x55\xe9\x93\x0d\xe4\x3c\xa8\xed\x8a\x20\x5a\xf9\x60\x6b\x2b\xfd\x6f\xe4\x8f\xc1\x11\x15\x04\xd7\x3c\xa8\x39\x77\x5e\x3a\x7f\xfd\xbc\x2b\xca\xda\x2e\x09\xde\x0a\xc4\x59\x8a\xf8\x1b\xed\x17\x94\x2e\xf4\x31\x40\x0f\x78\xb7\xb6\xd2\xef\xb1\x13\xbe\xc3\x34\xf8\xaf\xb5\x61\x4a\x38\x5e\x8e\x70\x69\x7e\x5a\xc4\xdb\xaf\x5d\x8e\xd0\x8d\x40\x29\xec\x6d\x98\xe1\xab\x18\x81\xc6\x9f\x2c\xc3\x13\x6f\x38\x25\x8f\x4e\xf1\x58\x4a\xed\x63\x09\xdf\xe2\xa2\xc0\x27\x5a\xfe\xf6\x9b\x1d\x23\x6b\x82\x1e\x36\x64\x16\x3b\x4c\x74\xe8\x4d\x8f\xbe\xf8\x9b\x60\xd2\x39\x0c\xf5\x28\xdf\xda\x4a\x0f\x88\x11\xa2\x2e\x91\x3e\xf4\x81\x90\x18\x3a\x1e\x23\x58\x7a\x60\xec\xdc\xce\xca\x61\x9f\xf5\xc0\x87\xea\x45\xd9\xb7\x19\xd1\xbb\x56\x09\xfa\x65\xb2\xee\xbc\xf7\xd1\x37\xfb\x76\x57\x40\x0f\x73\x42\x74\x44\x1f\xd0\xfb\x78\x33\x70\x72\xc7\xcc\xdb\x14\x7b\x34\xd0\x49\xe9\x38\xce\x30\xd6\x96\xa4\x80\x4f\x8f\x23\x07\xd2\xd5\xa4\x14\x24\x13\xcb\x22\x65\xa6\x5f\xae\x27\x17\xae\x6a\x2d\xa0\x97\xb4\x22\xe8\x8a\x54\xe0\xcd\x48\xe5\xe0\x3c\x95\x2e\x66\x1c\xf2\x15\x88\x16\x5a\xba\x1f\x52\xcb\x2e\x88\xda\x99\x43\xdb\x82\xec\xf4\x6c\xdf\x85\x5d\x8d\x03\x1a\xa9\x0c\x26\x56\x28\xe1\x18\x3b\x10\x44\x53\x4f\x78\xc9\x53\xa1\x97\xf2\x67\x2e\x04\x7d\x03\x7a\xad\xda\x78\xfe\x22\xb0\xf5\xfb\x12\x84\x30\x39\x5e\xcc\x4a\xa7\xb1\xf8\x54\xb4\x7c\x92\x10\x27\xaf\xd5\x80\x36\x30\xd4\x24\xfd\x3d\x8b\x33\x63\x99\x18\xb6\xb9\x89\xa4\xbc\x24\x8e\xe0\x0d\xd5\x11\x6a\xd4\x77\x50\xe3\x69\xdd\xf9\x61\xc7\xb9\x5b\x71\x0f\x83\xd1\xaf\x7e\xa0\x92\xf3\x65\x39\x49\xde\x82\x4f\xda\xa8\xcf\x2a\x8a\x06\x99\x0b\x10\xff\xc8\xaa\xa9\x8c\x82\x33\x1b\x23\xfc\x89\xa1\x5b\xd8\x0b\x76\x4f\x58\xa7\xb1\xbd\x46\xa3\xc8\x1e\xcc\x93\x9d\xa9\x49\x2a\x32\x72\x8b\x5e\x1e\xc2\x98\x9b\x0f\x2a\x8d\x67\x3f\x21\x5a\x5a\x89\xd9\x0c\x9c\x5b\x67\xee\x0f\x55\xe7\x2e\x44\x50\x86\x26\xf0\x22\xc1\x71\xf4\x8a\xc8\x62\x96\xee\x47\x9d\x7b\xc8\xf9\xf4\x94\x1b\x1c\x80\xd9\x44\x0e\x20\x66\xd7\x98\x8b\x4f\xeb\xe2\x99\x2b\x81\xfc\xab\x78\x78\x3c\x97\x0b\xc9\x0a\xf5\x10\x17\x25\x3b\x57\x48\x0e\x9d\x30\x86\x7b\xf4\x0a\x62\xa3\x2b\xee\xe3\x1d\xe4\x1e\xdc\x16\x7b\x28\x4b\x96\xad\x17\x83\x09\xab\x9b\x34\x3c\xe3\x22\x4e\xe7\xd3\xa8\xb8\xe9\xd7\x1d\xbf\x44\x58\xe1\xaa\x62\x83\x29\x9e\xfe\x3c\xd2\x29\x97\xe6\xf7\xd2\xba\xe4\x43\x48\xe7\x15\x7b\x24\x04\x06\xc2\x41\x24\xb4\x62\x4a\x5a\xae\x40\x7e\xb0\xa5\x7c\xef\xb0\xff\x69\xfd\xad\xf4\x5b\xe9\xcb\x23\xb4\x21\x31\xff\x87\x2d\xe5\x2f\xd1\x14\x28\x0b\xc3\x40\xed\x94\x12\xf0\x2b\x5b\x48\xd7\xd4\xcd\x51\x2f\xc7\x74\x84\x45\x27\x8d\x10\x72\x46\xb4\x92\xaa\x8a\xea\xb9\xd0\xb0\x14\xe7\x79\x39\x24\x9e\x0e\xc0\x0f\xc6\xed\x28\x17\xdd\xca\xee\x78\x78\x1a\x47\xf9\xe8\xe9\x6f\x3d\xcd\xe1\x28\x67\x59\xe7\x87\x72\xe3\x0c\x12\x33\x9b\x37\xab\x8d\x1f\xe9\xe2\x53\xaf\x66\x18\x0b\x9f\x0d\xfa\x1a\xa1\xb1\xf1\xec\x27\xf7\xeb\x7a\x3f\xf3\x7c\x29\xcd\x33\x4a\x98\x54\xf6\x86\xed\x3c\xde\x0b\xf8\x72\x68\xbe\x88\x3f\xb1\x8c\x76\x3a\xb9\xe0\x4b\x67\xd1\x0b\x01\x49\x25\x32\xec\x51\x7e\x2d\x60\x49\xc6\xa6\x45\xb3\x2f\x72\x6a\x49\xc6\x5c\x16\xb1\x16\x82\xa3\xa1\x08\x7b\x56\xf8\x17\xcb\xa8\x58\x52\x6d\xc5\x50\x31\xb2\x95\xa2\xb0\x67\xa2\xfb\xf5\xbe\xfb\x0c\xce\x1d\x5e\xe7\xac\xd6\xbe\xc4\xcd\xc3\x63\xe7\x8b\xfd\xd1\x70\xc0\xbd\x7b\x78\xe2\xfc\xf5\x84\xc6\xdc\x87\x23\x32\x62\xaa\x6a\x5c\x99\x5a\x78\x5f\x24\x09\x79\xaa\xae\xe0\xcb\xd9\x89\xf7\x27\xe7\x97\xa7\xae\x65\xae\x76\x57\x53\x3d\xb6\x39\x82\xa7\xa3\xc6\x7d\xbb\xd0\xd7\xc7\xa2\x9c\x01\xef\xeb\x71\xc1\xe7\x92\x55\x58\xd1\x25\x53\x1e\xf7\x0c\x1d\x31\x35\x1e\xee\x54\x9d\xe7\xa7\xce\xfd\x6a\xe0\xe5\x68\xa8\x90\x80\xc1\x5c\xf9\x26\x66\xb1\xbb\xa0\x5e\xc7\x38\xf5\xc9\x91\x44\x03\x5b\x03\x16\x34\xe0\x8d\x04\x58\xa8\x62\x95\x18\x17\x53\x44\xbb\x47\x09\x55\x4d\xba\x8e\x3f\x81\xc2\x22\x1d\x40\x76\x11\x7f\x92\x04\x5c\x6c\x2c\x68\xc0\x9a\x9b\x04\x56\xdc\x6c\x06\x26\x2e\x09\xa8\xb8\x49\xeb\x72\xc2\xfa\x8f\x46\xe8\x06\x4b\xf7\xd1\x08\xdd\x40\xef\x31\x1a\xa1\x1b\x14\x6b\x58\xec\xbe\x0c\x5e\xfb\x93\x01\x0d\xde\xed\x45\x01\xc7\xad\x37\xf4\x64\x90\x13\x04\x4f\x24\x86\xc3\xae\xf4\x90\x10\xa6\xf8\xc9\xa0\x9a\x64\x59\x4a\x9e\x9e\x6f\xc1\xf7\x68\x76\x81\xaa\xc6\x77\x00\x6e\xbb\xa5\x53\x89\x11\x2c\x3e\x04\x49\x51\x3c\x5c\x8a\x5f\xba\x40\x01\x6e\xfb\x16\x4e\x35\x56\x88\xa4\xc3\x90\xe2\x82\xa2\xfc\xd3\x34\xc1\xe4\x40\xcc\x97\x51\x90\x34\x2c\xd3\x0d\x69\xa1\x8b\x4a\x1a\xa7\x91\x5d\xd0\x2d\xcc\x12\x47\x4c\xcc\x94\x65\xc3\xc0\x32\x4d\x3d\x21\x77\x8d\x0e\xc1\x61\x8d\xe7\x35\xf7\xa0\xec\xcb\x3e\xaa\x2d\x71\x37\xf8\xe3\x17\xcd\x83\x7b\xe4\x7a\xc5\xb5\xe8\x1d\xff\xcd\x4b\x89\x48\xef\x21\x1c\xa5\x4b\xa8\xed\x41\x22\xb4\x14\x15\x8b\x5a\x48\x1e\x88\x12\x68\x73\x8a\x10\x6a\x3f\x3a\x92\x21\x0a\x86\xa1\x74\xec\x9b\x1a\x02\xd0\x5b\x9f\xc0\x84\x00\xbb\x6e\xfd\xd7\x33\xdc\x04\xdd\xfc\x12\xc3\x1e\x5e\x83\x3e\x9f\x93\x62\x6b\xc8\x24\xe4\xc6\xce\x51\x1f\x9d\xc1\xe4\xc8\x79\xa2\xaa\xe2\x12\x6a\x00\x02\xb9\x3f\x7e\xe7\x7e\xb6\xe7\xdc\x15\x54\x3b\x63\xc0\xa8\x94\x24\xb7\x4b\x45\x0b\x68\xff\x62\x3a\xe3\xa0\x59\x3d\x86\x28\x76\x1a\xf3\x2f\x29\x3e\x81\xc5\xf4\xb7\x84\x28\xb0\x25\x89\xb1\x7a\x79\x03\x1d\x46\x88\x42\x17\xe8\x87\x64\xd5\x8f\x09\x3b\xe8\x82\xb8\x5f\xb8\x1b\x26\x8a\x74\x5f\x33\x4b\x36\x05\xe7\x13\x79\xd1\x05\x41\xe7\x1c\x79\xd1\x05\x65\x5e\x24\xc2\x3c\xf9\x63\x7b\x3b\x26\xeb\xbc\x4b\x48\xb1\xc3\xe1\xd8\x5a\x35\x95\x2e\x89\x86\x6b\x78\xfc\xbc\xb5\x86\x2f\x74\x81\xe6\x67\x10\xbe\x90\x44\xea\x27\x0b\x5f\x18\x58\xec\x42\x37\x24\x9d\x77\xd0\x42\x57\x8b\xfb\x4b\xf4\x5d\xf1\x6c\xb8\xe8\xbc\xbd\xee\x26\x40\xec\xf6\xed\x7b\x95\x3a\xb9\x72\xbb\x26\xd3\x73\x91\x85\xf3\x0a\xfd\xe7\x34\x08\x64\x60\x0b\x12\x04\x1a\x72\xe8\x86\xa9\x08\xdd\xc9\x93\x8d\x27\xca\x49\x38\xa8\xd3\x56\xec\x51\x4c\x42\xa0\xd7\x76\x71\x3c\xc0\x62\x81\xc7\xe2\x2c\xc2\xf2\xb1\xf3\xf7\x5b\xe2\xaf\x04\xf8\x6c\x49\x51\xbb\x2b\x76\x77\x45\x91\xa1\xe4\x51\x11\x4b\xda\xbf\x0a\x0d\x2f\x65\xf7\xb3\x2f\x90\xfb\xb8\x0c\x85\x6d\x2a\xee\x9d\x6a\xe3\x59\x8d\xfa\x33\x1b\x2f\xf7\xfe\x55\x04\x19\xaa\xb6\xf2\xee\xd5\x2c\xd4\x39\xa8\xea\x7b\x29\xac\xa2\x49\x00\x5b\x06\xf8\x18\xfd\x90\x86\x83\x47\x6e\xf9\x8c\x6e\xcc\x13\x56\x3d\x5a\x58\x5a\xb9\x85\x04\x68\x3a\xc1\x85\x54\x40\x75\xf3\xea\x60\xea\xd4\x9d\xca\x73\xd8\x84\x16\xca\x0a\x14\xda\x64\x0e\x9e\x50\x12\x5b\x30\xe8\x85\xbc\xd4\x56\x14\x38\x18\xbc\xdf\xef\x48\xbc\xb9\x0c\x0e\xa4\xf3\x5c\x0e\x98\x24\xc3\xc2\x25\x59\x4f\xd9\x36\x24\xff\xe9\xb9\xb8\x15\x0d\xbc\x4b\x25\x59\x37\x88\x2c\xab\xe0\x65\xdb\x05\x9c\xd4\xc9\xab\x90\x1c\xde\x05\x18\x5d\xa0\x84\x84\x01\x3f\xc1\xd5\xd4\x8b\xac\x62\x1c\xa4\x3b\x82\xfa\x6f\x4b\x79\x45\x13\xdd\x5a\xbd\xbb\x10\x38\xd1\x6e\x1f\x37\x6f\xed\x11\x5a\x1e\x1f\xf8\x31\x13\x89\xe9\x28\x59\xb4\x84\x0b\xef\x1e\x8e\x2c\x9d\x5a\xd6\xa0\xbf\x38\x6b\x74\xeb\xb3\x87\x26\x83\x73\xad\x64\xd1\xaf\xd9\x47\x9d\xcc\x7d\xe0\x9e\xe4\x5c\xc0\xfa\x1c\x35\xce\xea\xce\x6d\x5a\x6a\xab\x2d\x39\x93\x66\x81\xb5\xbe\xc1\xc6\xe4\x35\x45\x3a\x76\x6b\x07\x71\x03\x64\xf9\x18\x84\x74\x7d\x95\x6e\x47\x28\x07\x26\x69\x11\x17\xad\xb6\xb3\x7a\x10\x35\x56\x04\x15\x48\xe8\x01\x15\x20\x84\x57\x1b\x8f\xde\x28\x6c\xa8\xf1\x87\x42\xeb\x88\xc9\x62\xa9\x2a\x2b\xc9\xaf\xaf\x8a\xc7\xb9\x1a\x10\x4d\x81\x41\x27\xb8\xa2\xfb\xaf\x25\x1c\x34\x13\x6a\x49\x05\xc4\xf0\xc7\x4d\x58\xf8\x5c\xa2\xe6\x5a\xb3\x90\x7f\x16\xf3\x14\xb1\x23\x3a\x4d\xd8\xcf\x70\xb2\xa2\x76\xd2\xa0\xe7\x8c\xc8\x77\x56\x55\x85\x06\x99\x84\xca\xc0\x88\xc7\xdc\x52\x2e\xc6\xa7\x6a\x61\xe1\x3d\xf0\xa9\xfc\xe5\xee\x20\xc9\xa2\x1a\xf8\x48\xf8\x4a\xd2\x81\xbc\xe0\x9b\x81\xc8\xbb\x01\xd1\x09\xcd\xc0\x09\x90\x80\xba\xe6\xb9\xb3\x62\x1d\x57\xad\x44\x78\xcb\x18\x6e\xef\x21\x44\x2d\xf2\x4f\x8b\x3f\x60\x35\xd6\x69\x18\xd2\x9b\xbf\xfe\xe7\x6b\xa3\xd0\xf5\x98\xfc\xe7\xaa\xd0\x9d\xe4\xd5\x54\xa7\xa5\xd3\xa9\x1f\xa9\xed\x63\x11\x4e\x43\x95\x36\x79\x85\x71\x48\x70\xb4\x25\xbb\xe4\xd5\x9c\x8b\xcf\x94\x73\x6f\xde\x68\xde\xac\xc6\xd6\x34\xbc\xa2\xb3\x22\x55\xaa\x6e\x2a\x7f\xc4\x48\x2f\xd9\x46\x49\x54\xf3\xc8\xfd\xa1\xea\xd4\xbe\x01\x0d\xe2\xe6\xe7\xee\xcd\x1b\xb4\x7a\xc7\xad\xe6\xc3\xdd\x4e\xc1\x64\x0c\x0d\xfe\x04\xe7\x4a\xd4\x7b\x8e\x8b\xba\x8d\x79\x19\x54\x11\xbe\xbf\xdc\x6d\x3c\x7b\x12\xa8\x1b\xca\x2b\x5c\x76\x0c\x5e\x63\xf8\x8a\x92\xc1\x3d\xf5\xb4\x73\x34\xad\x56\xc0\x92\x43\x8b\xfa\x3a\xe6\x5e\x43\xd0\xb0\x0c\x13\xaf\x2b\x7a\xc9\xa2\x09\xb3\x16\xad\x38\x99\xa8\xc0\x01\xe1\x44\x6e\x96\x82\x12\x73\xe0\x1f\xf4\x09\x85\xba\xa0\x7e\x31\x04\xa2\x8a\xd5\xca\x2c\xbb\x96\x87\x23\x06\xbf\xa7\xe5\x46\x63\xc7\x06\xb5\xf1\x78\x5e\xa5\xb4\x6a\x63\x13\xc8\x16\xab\x84\x14\x1b\x2d\x9a\xca\x2a\x52\x41\xbd\xba\x44\xd3\x99\x5b\xc3\x66\x4a\x29\x42\x2e\xab\xee\x95\xdd\xa0\x1b\x81\xa8\x81\x63\x72\xe0\x95\x14\x91\xe0\xc2\x22\x7d\x9e\xd0\xa6\x50\xa1\x74\xd6\xff\x39\x73\x1f\xef\xd0\x9d\x21\x82\x26\x22\xac\x54\xc4\x9a\x0d\xd0\x51\xc9\x54\x3b\x47\xff\x9c\x9c\x91\xd9\x5e\x9a\x9f\xee\x18\xfb\x43\x1d\x03\x74\x8c\x01\x97\x9a\x70\xa3\x73\x0b\x3f\x1d\x47\xe8\x8b\x18\x04\xc2\x2a\xa9\x1d\x23\x9e\x58\x25\x72\x24\xd9\x36\x2e\x1a\x36\x5a\x95\x14\x15\xcb\xbc\x32\x9d\x6e\x6e\x6f\x67\xb5\xac\xb6\x44\x8b\x49\x43\x3c\x1c\x14\x2b\x1d\xf5\x2a\x15\x5b\xc0\x48\xd2\xba\xa4\xa8\x34\x14\x97\x6c\x02\x22\x7b\xf3\xca\x3a\x86\xe9\x14\x56\x0c\xbe\x73\xec\x7e\x7d\x4a\xcb\xfb\xc0\xae\xdc\xfb\xae\x15\x6f\x4b\x11\xde\x70\x15\xb1\xbf\xbd\x72\xbf\x3a\x75\x1f\x97\xc9\x3a\x30\xfe\x6f\x2b\xe2\x1b\x56\xf9\x3b\x17\x4e\xe2\xf3\xe1\x15\x63\x65\xe5\xf6\x46\x2c\xda\x9a\xc1\x2a\x15\x91\xac\x63\xcb\x8f\x9c\x85\x04\x71\x54\xc4\xb6\x24\x4b\xc2\xb0\xa0\xe0\x50\x5b\xab\xb4\xb2\xc2\x7c\x15\xe4\x3e\x3b\x6d\xde\x38\x71\xcb\x27\xb0\xc9\x6b\x3b\xee\xc3\x6f\xdc\xcf\xf6\x90\xf3\x64\xbf\x79\x73\x87\x95\x84\x2a\xd7\xa1\x78\x76\xd2\xf8\xdb\x2b\xa5\xa2\x11\x2a\xc3\x4a\x96\x0f\x4b\x32\x48\x25\x5a\x8e\x53\x28\xa6\xf7\xdd\xda\x0d\xa8\x02\x75\xa7\x16\x59\xe8\x34\x1a\xe3\xe4\xcc\xf5\xa9\xf9\xd9\x99\x6b\x93\x33\x8b\xe8\x7a\x66\x7e\x2a\xf3\xce\xf4\x24\xba\x3a\x3f\xbb\x34\x27\x0a\xe9\x0b\x85\x55\x33\xdb\x77\xd7\xb0\x45\xfc\x1f\x05\x5c\xb0\x15\xa2\xa0\x27\x83\xdb\x19\x60\x77\x45\x8c\x79\x38\x83\x50\x71\xd9\x15\x1a\xdc\x27\x8b\x86\x4d\x0b\x1a\x23\xdd\x44\xab\xba\x2a\x0b\x83\x64\x04\x00\xe8\x4e\x87\x00\x10\xc3\xd4\x3f\xd9\xe4\x4d\x3a\x32\x73\x53\x3c\xfa\x55\x64\x5a\x22\xaf\xf8\xc1\xad\x00\x02\x5a\x46\x1d\x41\xba\x00\x6c\xc5\x58\xa4\xc3\xb5\xb5\x25\x41\xfd\xf3\xb6\xb1\x25\x1f\xc1\xd0\x6d\x6b\xb1\xa4\xe8\x26\xb4\xe4\x5b\x81\xfe\xb8\xaa\x2e\x2e\x5d\xf5\x39\xd4\x75\xa5\x0a\x3f\x9b\xac\x04\x66\x25\x86\x65\xb0\x06\xb5\x58\x54\x61\x43\x5a\x40\x77\xe9\x6c\x43\x8b\x36\x9b\x41\x7d\xf5\x40\xa4\x41\x22\x0a\x7e\x41\x26\xb4\x04\xb6\x33\x18\xd8\x3f\x80\xe9\xac\xf3\x05\xb5\x75\xa4\xfd\x9a\xcc\x86\x31\xd8\xe4\xa6\xa0\x21\x8f\xf7\x17\x6f\x2a\xeb\x69\x7e\xfe\x2f\x35\x91\x75\x31\x57\xe7\x61\x1a\xeb\x83\x9c\x73\x31\x89\x25\xa1\x4f\x36\x74\x45\xb3\xd1\x45\x42\x54\xc1\xb6\x0d\x68\x30\x77\x49\xa4\x7f\x8a\xdf\x8f\x07\x2f\x63\xc3\xc4\x39\x49\xdc\x91\x56\xf4\xfd\xba\x9f\xb3\xb9\xb5\x95\xbe\x2e\x31\xc3\x3e\xda\x90\x2c\x56\x25\xd7\x16\x76\x54\x0c\xa9\xf2\xc1\xaf\xbd\x2e\x33\x74\x86\x02\x11\xd5\x07\x95\x4e\x17\x3e\xb8\x6c\xb2\x9d\x18\x19\x29\x46\x26\xe6\xea\xd2\xd4\x95\x91\x71\x51\x49\xa9\x11\xf8\x99\x6d\x80\x88\x2d\x14\x3a\x4f\x41\xc7\x61\xd5\x08\xa1\x08\x3c\x72\xea\x55\xf7\xe6\xd1\xb8\x20\x23\x8d\xd2\x07\xca\x07\x6d\xa9\x01\x1a\x78\x6c\x66\x19\xd3\x2c\x22\xd1\xc4\x21\xc9\xf1\xb4\x65\xbf\xc0\x96\xa2\x62\xe1\xb0\xbd\x52\x59\x2c\xaf\xd5\x4f\x52\xee\x72\x70\x1e\x5e\x36\xb8\xce\x3d\xc3\xd9\x38\xe3\x30\x06\x60\x24\x41\x6d\xb3\x8a\xc4\x1d\x0b\xfe\x93\x17\x93\x0c\xb8\x2b\xec\xc9\x4a\x20\xc7\x21\x4c\x86\x26\x2a\x1d\x3d\x41\x1b\x81\x24\x89\xe9\x3e\x45\x44\x83\xa4\x44\x35\xbf\xda\x6d\xa9\x13\x1d\xdb\x60\x40\x40\x2d\xa3\xb3\x3b\x41\x03\xa0\xe4\xc8\xe8\x60\xba\x3d\x13\x0c\xdb\x0f\x23\x8b\x0a\x0a\x6e\x5b\x82\xa4\x03\x94\xe3\x83\x86\x93\x54\xe9\x4e\x12\x17\x1c\x4d\x5f\x7c\xa1\xee\xe4\x04\x0e\x87\xba\xe4\xa4\x05\x99\x83\x15\xde\xca\x6a\xd7\x78\xf6\x2d\xbd\x10\x41\xf6\xb7\x77\x41\x82\x24\x0a\x13\xdb\x25\x53\xc3\x72\x1a\xcd\xd1\xa2\x08\xe4\x76\x34\x92\x5b\x45\xb9\x92\xa9\x8e\xd0\x2f\xd8\xe5\x39\x87\x74\x53\xa1\xbd\xd8\xc0\x64\xd6\x13\x03\x0a\x5d\x68\x31\x69\xa5\x37\x6f\x74\xe7\x18\x8b\xdc\x79\x07\x55\xde\x36\xa5\x37\xfa\xa8\x3e\xd3\x95\xe7\x2c\x29\x95\x8c\xc4\x78\xc2\xbc\x0e\x52\x70\x22\xf8\xcc\x21\xae\x6f\xc9\x8e\x3e\xaf\x07\x53\x0c\x87\x89\x4a\x5b\xb6\xe2\xb6\x0c\x5d\xb3\x70\x12\xe4\x47\xf7\x9c\x3b\x2f\x06\x81\x1c\x8b\x14\x4c\x01\xe6\x38\x2d\xb1\x0f\xc6\x10\x92\xd1\x37\x5f\xf4\xc8\x10\xab\x8a\x06\xfa\x8f\xef\x67\x20\x97\xe2\x44\x1d\x0d\x28\x62\xde\x65\xd2\xb7\x10\x42\xc3\x08\x91\x3a\x96\x58\x58\xb6\x13\x46\xb3\x25\x3b\xeb\x30\x6d\x74\x05\x1b\x59\xc4\xd2\x95\x98\xa8\x21\x9c\x30\x83\x9e\xb7\x41\x9f\x31\x03\x9d\xbf\x84\xed\x7b\x58\x77\x14\x11\xce\x24\x98\x5a\xaf\x1d\xbe\x32\x91\x24\xde\x36\xb2\xdc\x54\xa2\x79\x68\x85\xdf\x07\xa9\x43\xa0\x2e\x19\x41\x51\x91\xf8\x49\x88\x8a\xaa\x70\x39\x08\xb2\x74\x73\x43\x32\x81\x32\x22\x36\x85\xf7\x27\xde\x33\xa1\x56\x76\xee\x9c\xf4\x70\x6d\xca\xd3\x82\xc7\x20\x64\x73\xba\x2c\xbe\xa8\x81\x14\xf6\x1a\xd7\x35\xea\x3b\x6e\xed\x8c\xe0\xe9\xe9\x26\x1a\xc4\xaa\x68\xab\xba\xc8\xb2\x00\x48\xbd\x9e\x39\x9d\x91\x26\xc1\x19\x6c\xee\x67\x95\x8a\x45\x68\x83\x96\xd8\xde\x0f\xae\xa9\x83\x9f\x58\xcb\xe1\x41\xcc\x81\xdf\x82\x9b\x17\xa3\x66\x3e\xe3\xad\xad\xf4\xbb\x8a\x8a\xe7\x24\xbb\x10\xc7\x80\xfe\x3b\x61\xc7\x35\x8b\xe5\x60\x8d\xac\xa1\x1d\x76\x22\xaa\x93\xd0\x0c\xae\x41\xb2\x70\x22\xae\x64\x77\xdb\xe4\x4b\x97\x04\xab\xae\xd1\x92\x38\x34\x25\x29\x96\x5b\xdd\xa3\x57\xcd\xaf\xf7\xe0\x56\x49\xd3\x8c\x06\xce\xba\x6c\x91\xb8\xcb\x9e\xae\x9c\x89\x0d\x5d\x4c\x13\x77\xc6\x47\x84\x19\xb4\xfa\xe7\x07\x48\x28\x2d\x38\x44\xfb\xe9\x61\xda\xc5\xcd\xcb\xc6\x88\xbf\xba\x36\x9e\xfd\x04\xfe\x97\x87\x27\x01\xef\x5e\xb5\xec\xbe\xac\x24\x24\x2f\xd9\x55\x16\xca\x48\x48\xaa\xf2\x47\x42\xed\xfc\xdc\x04\xb7\x58\x0b\x27\x92\xbc\x13\x48\x4e\x3a\xdd\x6d\x9c\xd5\x9b\x0f\xa2\x89\xf8\x6f\xb1\x73\x54\x94\x4c\xab\x20\x81\x8e\xfa\x9b\x85\x59\x51\xad\x21\xf2\x13\x72\x1e\xef\xba\x37\x4f\x9c\xc7\x37\xba\x66\x5f\xdd\xc0\x9a\x2f\x62\xa1\x71\x2b\xcc\x7f\x9c\xcc\x83\xde\xaa\xb4\x43\xd4\x49\x6f\xcb\xcf\xb1\xf6\xd1\x9b\x4a\x88\x39\x0e\xaf\x21\x99\x56\x92\xf9\x6c\xbc\x38\x71\x4e\xce\x90\xf3\x43\xd9\x2d\x1f\xf5\x8c\x85\xd5\xd8\x12\x89\x21\x28\x7f\x35\x20\x54\xfc\x26\xd7\xc3\x0d\xde\xc0\xe6\xaa\x6e\x16\x13\x9b\x5e\xdd\xdd\x4a\xf3\xab\xcf\xbb\xa7\xd4\xd4\xb9\x01\x5a\x32\xa8\x25\x12\x7a\xce\x43\x5f\x71\x38\x21\x46\x12\xec\xfa\xc0\xdb\x81\x96\x06\x01\xbe\x78\x56\x71\xbe\x3d\x89\x35\x42\x27\xdb\xf7\x51\xe4\x26\xa0\x6f\xf8\xd4\xf8\xf2\x9c\x48\x22\x6c\x8a\x25\x7a\xb9\xea\x3c\x2b\xf3\x93\x96\xcb\x6e\x46\x53\x0f\x7b\xd6\xc4\x92\x3c\xb6\x61\x2a\x4c\x2f\xd0\x56\x95\xbc\x10\x77\x27\x38\xed\x26\xf8\x8e\xda\x6c\x8b\x2d\x1e\xa6\xf7\xe8\x27\xe1\xc4\x26\x53\x64\x39\x2d\x1d\xb6\x0f\x35\x7e\x74\x40\xd9\x0d\x1e\x58\xc0\x9e\x90\x85\xed\x1c\xf4\xc0\xeb\x1a\x73\x57\xac\x93\x68\xf0\x9d\x58\x67\xd5\xc4\x10\x73\xdb\x1f\xe3\x78\x50\x74\x3f\xef\x3b\x46\xcb\x0a\xa5\x70\xdf\xdc\xa5\x45\xa4\x6b\xee\x4b\xda\x62\xaf\x87\x51\x14\xf5\xf5\x80\x76\xc5\xbb\x14\xf7\x34\x14\x4d\x2a\x0e\xd8\x6c\x0f\xb5\x34\x91\x53\xdf\x6f\xfc\xc7\x99\x68\x80\x49\x0d\xf8\xec\x20\x00\x6d\x3a\x86\x53\xd9\x81\xd0\xc9\x0e\x97\x10\x93\xa7\x41\x43\x33\xf4\x10\x9f\x76\x96\xbb\x61\x8e\xf5\xf4\x6b\x4f\xb1\xa6\xb4\x0e\x40\x14\x9b\xd8\xd2\xd5\x75\xaf\x22\x43\x67\xc1\xe5\xd7\x61\x88\x39\xe3\x13\xcb\x2b\x08\x67\x6f\xb9\x29\x26\x3a\x97\x3a\xf6\x63\x1f\xc8\xdc\xd8\xa6\x82\x61\x72\x2c\x5b\xca\xad\x89\xf7\xe6\xed\xe3\xe6\x4d\x7a\xe3\x7b\xb6\xe3\xde\xfc\xbc\x67\xaf\x71\x2b\xc6\x44\x67\x74\x37\xc8\x13\x0e\xbc\xa4\x69\xbc\x76\x39\x7c\x33\xa1\xea\x25\x79\x42\xd7\x6c\x53\x57\x55\x6c\x5e\xc3\x96\x25\xe5\xc5\xb5\x32\xe2\x60\x5b\xd2\x7a\xf0\xb8\x4c\x30\x40\xbf\xc3\x13\x5c\xea\xfa\x1a\x19\x74\xf2\x1d\xb0\xa4\x0a\x74\xff\xed\x4b\x4a\x79\xb4\xd1\xbc\x9f\x65\x08\x5f\x5f\xb6\x37\x0d\x1c\xe7\x4f\x68\x7f\x59\x4c\x50\xd7\x5e\x05\xea\xe6\x6e\xd9\x9f\xc9\xda\x12\x47\x58\x73\x7c\xb7\x78\x52\xef\x73\x12\xbb\xb4\x4f\xe3\x60\xd7\x34\x82\xd4\x2e\x17\x94\x6b\x97\xb6\xde\x4b\xb4\x02\xa0\xbd\x5f\xef\xb4\x97\xe3\x49\xf8\xa3\x62\x18\x2d\xcb\xd7\xc5\x82\x1d\x1c\xb8\x3f\x44\xbb\x7e\xe2\x70\x46\xda\xa9\x91\x62\xb1\x54\x76\x43\xb2\x58\xa9\x78\xc9\xa2\xa1\xc0\x66\x1e\xb2\x79\x68\x94\xd8\x9c\x6e\x41\xa5\xcb\x11\xb4\x52\xb2\x83\xff\x24\x47\xab\x62\x62\x0b\x49\x1a\x52\x34\x1b\xe7\xb1\x99\x46\xe8\x5d\xdd\x44\x45\xdd\xc4\xc8\xda\xd4\x6c\xe9\x13\x54\xc0\xaa\x31\x0a\xfd\x00\x3f\xce\xad\xf2\x7e\x8d\x3e\x63\xa4\x0a\x1f\xc7\xc4\xd8\x45\x90\x4d\x47\x4d\x8e\xdc\x11\xaa\x9d\x8e\xd0\x4c\xae\x33\x77\xb7\x02\x06\x1b\xdf\x18\x7c\x74\xea\x7c\x5a\xf1\x5f\x3b\xa4\xd1\xd1\xb5\x03\x77\x17\x78\xbc\x79\x50\x76\xbf\xde\x6f\x1e\x3c\xf1\xd2\x61\x1e\xde\x75\xcb\x67\x64\x27\xf2\x4b\xf3\x97\x65\xf7\x2f\x3b\xce\xe3\xbb\xee\xd1\x8e\x90\x7c\xea\xba\x38\x73\x1f\xd5\x13\x14\xf2\x87\x01\x89\x8f\x2d\x18\x5b\xec\x89\x34\x8e\x66\x74\x5a\xff\x1d\xaa\x7f\x77\x4a\x40\x64\x00\xfd\x7c\x37\x68\xd3\x9f\xb8\xd1\x3b\x43\x49\xb4\x26\x19\xe9\x25\x1b\x6d\x48\x74\x07\x01\x5a\x6b\x53\xcb\xa1\xdf\xeb\x2b\x70\xc7\x9e\x34\x4d\x48\xe2\x1a\x21\xbb\x6b\x55\xd1\x14\x4b\x54\x11\x9f\x13\xe5\xbc\x2c\x3b\x5f\x3e\x00\x55\xf2\xe1\x3d\xf7\xf0\x56\x0b\x18\xf7\x41\xd9\xf9\xdb\x1e\x11\x8a\x41\x6d\xb3\x56\x6d\x1e\x54\xdd\x3b\xd5\x46\xbd\x0c\xc6\xaf\xe7\xaf\x62\x29\xef\xe4\x41\x64\xa4\x74\xd8\xb9\x34\x5d\xd2\x82\x7c\x49\x50\x27\x69\x16\x23\x66\xad\xe1\xb1\x0c\xa9\x1d\x98\x85\xf6\xc5\x06\x26\xc0\x9b\xee\x21\x51\x1b\x9b\x5f\x9e\xb8\x47\x67\xe1\x66\xd0\x5c\xe5\x85\x04\x4b\x11\x35\x06\x35\x66\x06\x6d\xf9\x34\xa0\x5e\xa2\x76\x74\x7d\x15\xad\xe1\xcd\xb1\x75\x49\x2d\x61\x64\x48\x8a\x69\x65\x35\x66\x17\xcb\x41\xaf\x47\xd8\xec\xde\xfd\x58\xc3\x92\x39\x9e\xd5\xc8\xec\x7f\x50\x54\x17\x34\xc5\x30\xb0\xbd\xbd\x2d\x2c\xaa\x1f\xa1\xea\x9d\xa2\xe6\xa7\xc7\x63\x8d\xfa\x9f\x91\xbb\xf7\x05\x0d\xf6\xa5\x26\xf7\x57\xa8\xf1\xec\x26\x0f\x65\xaf\xec\xba\x37\x6f\x64\xb5\xc6\x8f\xaf\xdc\x67\x15\xf2\x16\x57\x24\xbc\x5a\xb6\xa2\x1b\x68\x24\x79\x89\x67\xc7\x0a\x4d\x4f\x57\xc3\x12\x8f\xa3\x03\x7a\xff\x10\xe3\xb8\x2d\xcc\x57\x06\xfd\xf7\x6c\xe9\xf2\xe5\xb7\x30\x82\x15\x1a\x05\xb9\xaa\xd8\x10\xc0\x09\x65\xa3\x16\x37\x0d\x2c\x0e\xd7\xf2\x20\x7b\x31\x9b\xcd\x4f\x8f\x3d\x90\x8d\xfa\x9f\x69\x7e\x0c\x30\x56\x04\xdd\xe4\x4c\xaf\xbe\x22\x82\xd1\xc3\xe4\x3e\xbc\x15\x1f\xe0\x19\x18\xd4\x9c\xa9\x1b\xd8\xb4\x37\x5b\x06\xb7\xa2\xeb\x2a\x96\x84\x7d\x51\xda\x3e\xf4\x68\x77\x7e\xd8\x71\xbf\x16\x12\xda\x29\xf2\xb4\x33\x61\x7c\x43\xb0\x03\xca\xea\x9e\x42\x7a\x60\xc4\x33\xf5\x60\x69\xb5\x6c\x53\xd1\xf2\x3d\x90\xea\x9c\x9c\x91\x33\xec\xf0\xf4\x3c\xa8\xd5\x4a\xc5\x15\x6c\xb6\x73\x2f\x7f\xbd\x23\x17\x8b\xe6\x7b\xf7\x7f\x93\x41\x74\x62\xdd\x30\x9a\x4e\x2c\xfc\x6e\x66\x6a\x7a\xf2\x8a\x68\xeb\x43\xe2\xac\xe0\xc3\xc9\xcc\xe2\xd2\xfc\x24\x7a\x77\x3a\x73\x55\x94\x4d\x48\x53\x77\xfc\x3e\x13\x09\x20\x89\x7c\xbe\xad\xa0\x04\x4e\xdd\x77\x21\xc5\x18\xd1\xaa\xe3\x3c\xa2\xc0\xd4\x69\x7e\x71\xc9\x8a\x33\xbd\xf1\x40\x54\xf7\xf0\x6e\xe3\xd9\x9e\x57\x78\xf3\xf0\xfb\xe6\x41\x2d\xd4\xe9\x03\xf2\xee\xbe\xa8\x7b\x69\xc5\xb1\x94\xac\x62\x3b\x57\x08\xa9\xfc\x56\x92\xb0\xd8\x80\xeb\xe5\xff\xa9\xb8\x2f\x21\xa1\x8c\xe2\xeb\x32\xf0\xb5\x95\x0c\x1a\x13\x63\xf1\x34\x0f\x2f\xf9\x31\x14\x76\x91\xee\x2d\xee\xa2\x12\x08\xc7\x4c\x44\x76\x97\x44\x27\x9a\xb8\xee\x28\x48\x3e\x71\x78\x1d\x6b\xb6\x95\xec\x46\x79\x74\xea\x3c\x3b\x26\x77\xda\xce\x34\xc4\xdf\x1b\x5b\x89\xd0\xcd\x7c\x8a\x06\xa0\x92\xf5\x03\xbe\xa6\x2b\x31\xaf\xab\x78\x51\x67\xe5\x38\x5a\x16\x31\xfe\x46\x19\xfd\xb1\xc7\xf7\x15\xb6\xba\x29\x3f\x50\x7b\xc0\x13\xab\x9b\xf9\x84\xd3\x4a\x77\xe4\xa0\xe7\x14\xac\x89\x26\x2d\xbb\x6a\x75\xe6\x7c\x66\x55\x2c\xd7\x79\x29\xd5\x81\x72\x3a\xad\xf6\x91\x98\x8a\x44\x2c\xd6\x05\x7a\x08\x77\x8a\xe0\x30\x08\x67\xea\x9d\xc7\x44\x9f\x07\xb9\x0c\x82\xa4\x86\xc7\x65\x34\x72\x32\xdd\x5d\xec\x1b\x2f\x2d\x9a\x8c\x94\x04\xd1\x6e\x8c\x2a\x5b\x67\x17\x66\xa2\xdb\xe8\x39\x49\x45\x36\x2e\x1a\xba\x29\x99\x9b\xe8\x8f\x0a\xb5\xbf\x78\x19\x8b\x9d\xba\xd5\x24\xc4\xf4\x7b\x4b\xa7\x69\xe6\xbc\x73\xcf\x32\x2f\x31\x11\xe7\x7a\x6e\x79\x99\x65\xe0\x1f\x55\xc0\x91\xcf\x52\x34\xfc\x89\x49\x48\x0a\xbf\x60\x8d\xa2\x92\x57\xfb\xc3\x90\x4c\x0b\x47\x36\xe0\xeb\x9c\x24\xc4\x33\x45\x80\x86\xd1\x70\x2f\x3d\x88\x49\x09\x7a\xfa\x83\x05\x3b\x8e\xf6\x3a\x9c\xde\xb6\x8e\x8a\xd2\x1a\xe6\x8e\x27\x5a\x1e\x88\x12\xd5\x91\xef\xc3\xf5\x42\x4e\xd9\xd5\xd5\x0b\xca\xad\xb0\xf4\x66\xe7\xf1\x9e\x73\xff\x38\x44\x52\x42\xde\x06\xe2\x20\x52\xa5\x9b\x30\x95\x44\x0b\x45\x6b\xf7\x50\x67\x5f\x3c\x83\xcc\x66\xc8\x3b\xde\xed\xbc\xea\x3e\xbc\x97\x10\xc7\x06\x70\x14\xcb\x70\x87\xe4\xf3\xf3\x6a\x3b\x3a\xc8\xe2\xc8\xa1\xb6\x02\x20\xc8\x82\x49\xf9\x10\x59\x77\xd7\xbd\x53\x0d\x73\x9d\x30\xc7\xf2\x5d\x96\x7d\xbf\xb5\x95\x66\x7f\xbe\xab\x4a\xf9\xed\x6d\xc4\xca\x5d\x0a\x33\x45\xda\x3e\x68\xcf\xab\xf7\x12\x17\x3b\xdc\x70\x84\x34\xd0\x72\x01\xfd\x90\xf0\x24\x09\x62\x51\xd8\x0e\x05\x27\xf8\x94\x08\x4c\x4d\xb7\x99\xed\x0f\x64\xaa\xba\x39\x4a\x37\xaf\x45\x46\x03\x65\x0a\xc8\x5b\xf8\x13\xc5\xb2\x2d\x24\xd9\xac\x88\x10\xb4\x3c\xd9\xda\x4a\x93\x1f\x8d\xb8\xa0\x4a\x3f\xfc\x01\x4a\x81\x9f\xc0\xf5\x2b\x6c\x2d\xf4\x0b\x08\xf1\x97\x4f\x03\xa5\x84\x58\xe0\x5c\x08\x17\xc8\x4e\x68\x7a\x48\x56\xa7\xf9\xe0\xc0\x3d\x3a\x4b\x60\x2d\x7d\x57\x37\x73\x98\xb5\x5f\x41\x17\x65\x5a\x70\xcb\x30\x75\xa8\xb2\xa4\x9b\xd4\xd9\x6f\x16\x81\x76\x71\x9d\x2b\x48\x98\x6a\xd4\x0f\x20\x6f\x0a\xa4\xd3\x45\x4a\x01\x8c\x29\xe8\xb7\x85\x52\x2b\x27\xcd\xfd\x32\x2b\xff\x45\x2b\xb6\x85\x8a\x04\x09\x6a\x48\x05\x28\x25\xb7\x8c\x0d\xc5\x2e\xe8\x25\x3b\x44\xa0\x30\x27\xf7\x00\xf2\xba\xc8\x8e\x39\x45\x51\xd4\xc6\x61\x64\xb5\xa4\x68\xe9\x07\x10\xde\x3d\xa3\x0e\x45\x64\xd2\xaa\x51\xc9\xe9\x28\x2a\x79\x53\xea\x6f\xe8\x44\x78\x1f\x9d\x12\x6d\xb3\xb6\xcb\xfc\x1d\x89\xd1\xf7\x57\x82\x38\x31\x1a\xe6\x1e\xe7\x52\x9c\x0f\x95\x72\xa4\xf0\x7c\x8c\xe7\x29\x28\x49\x77\xf0\x34\xec\x2b\x4f\x4e\x52\x49\x5b\x61\x31\xfc\xbd\x4f\x3c\x6f\xe6\xcb\x9a\x86\x25\x41\x7e\x75\x72\x71\x71\x6a\xe6\x2a\x5a\x58\xcc\xcc\x2f\xc6\x18\x56\x98\xe3\xbf\x71\x26\x28\xa2\xd7\x02\x47\x64\x16\x09\x02\x12\x98\x44\xae\x4e\xcf\xbe\x93\x99\x46\xb3\x73\x8b\x53\xb3\xe2\xf6\x95\x8d\xb3\x1d\xe7\x51\xd5\x79\xb6\x87\xdc\xca\x0b\xf7\x96\xa8\xee\xd4\x55\x6c\x23\xc9\x0f\x18\xf1\x1a\xfe\x42\xfe\x96\x55\x40\x39\x55\x21\xd7\xe4\x98\x20\xd6\xe6\x8d\x53\x68\x5d\x7c\xea\x7e\x45\x2d\xb1\x95\x40\xd8\x48\xb0\x19\xb0\x1f\x4a\x2c\x9e\x24\x6c\x83\x60\x6f\xf7\x2c\x53\x13\x3f\x61\xc7\x0e\x6d\xa2\x08\xfe\xf6\xcf\x1b\xf5\x3f\x27\x43\x4f\x23\x42\x54\x95\x47\x27\xb3\x42\x8d\x45\xc9\x5c\xc3\xb6\xa1\x4a\x39\x2c\x56\x43\xc8\xbe\x7e\x75\x9f\x48\x17\xba\xaf\x6f\x1f\x7b\xd1\xf9\xb4\xa8\x93\x57\xca\x29\x22\xae\x5a\xa4\x41\x5c\xf5\xf3\x19\xac\x9f\x67\x47\x26\x28\x9f\xf5\x34\x62\x40\x1d\x46\x14\x30\xa0\xa5\xd3\xc2\x74\x49\xdf\x70\x16\x81\x40\x94\x1f\xc9\x51\x70\xe3\x98\xb8\x79\xff\x60\x4b\xa0\x04\x2d\x66\x51\x59\x18\x1d\xe7\x04\x07\x8a\x5e\x58\x03\xea\xdd\x7f\x4e\x3c\xd0\xa6\x3b\x87\x0a\x58\xb5\xdf\xe1\xba\x9e\x1a\xb0\xd7\x0d\x63\x4e\x84\xbc\x37\xf4\x59\xf1\x0c\x8b\x82\x19\xe9\xc4\xdf\x34\xf6\xfb\x1f\x89\x4d\x3c\x9d\xbc\x6b\xfe\x60\x25\x8b\x41\xe8\x23\x2f\x74\xe9\x7c\xe6\x25\x4c\x43\xfb\xb9\xb5\x4a\x63\x53\x3c\x2a\x92\x8c\x24\x1a\x4a\xe2\x50\x2c\x70\x8f\xfa\xd3\x78\x12\x1f\x73\xc5\x51\x2b\xda\xaa\x7e\x7e\x15\xa3\xc8\xc9\x21\xcc\x1d\xeb\xb8\xe0\x1e\xad\xaf\xbd\xd3\x96\x3f\x90\x2e\x94\x0c\x9f\xfc\x4e\x3d\x8a\x5a\x17\x61\x08\x56\x91\x98\xfe\x44\xc1\x98\x8d\xde\x17\xeb\x1f\xb3\xaf\x60\xaf\x53\x61\xfd\x52\xc6\xdd\xeb\x18\x45\x55\x08\xbb\x3c\x6a\xfd\x04\xf0\x1e\x0e\x47\x6a\x26\xb0\xfc\xd6\xd4\x26\x36\x74\x4b\xb1\x75\x53\xc1\x16\x4a\xa7\xd3\xc2\xc2\x2a\x4c\x5d\x8f\x49\xe4\x14\x90\xd4\x41\xba\x86\x28\xf2\xa8\xd9\x44\xc2\x00\xa4\xb8\x54\xd2\xa0\xa4\xe9\x80\x37\xb2\x4d\x1b\xc8\x9f\x61\x75\x91\xec\xe9\x04\x07\x32\xfb\x2f\x5e\xd9\x1f\x11\x21\xef\x61\x1b\x2d\xa8\x7b\x1e\x6e\xf5\x2f\xf6\xc8\xcd\xac\x6d\x40\x84\x24\xe8\xba\xe9\x66\x24\xc8\x41\x8c\xb1\x67\x3d\x96\xf7\x44\x88\x52\x3c\x12\x2a\x67\x3d\x50\xdd\x8d\x77\x80\x1f\x81\x9d\x47\xda\x61\x2f\xc6\x0d\x75\x38\x63\x1a\x28\xf5\x25\x7e\xe1\x80\x8e\x29\x61\xc5\x0b\xb1\x26\x7e\xf4\xe1\x55\xf2\x6c\xa6\xc3\x0e\x0e\xa9\x56\xa2\xcf\xc9\x41\xd4\xf8\xb1\xea\xbe\x7c\xd0\xd3\x8e\x0e\x53\x69\x0d\x52\x17\x4c\xae\xed\x79\x6d\x56\x69\x19\xd7\xc1\x75\x32\xf5\xea\x45\xf6\x74\x4e\xb7\x90\x45\x16\xd6\xef\xba\xfa\x0e\xfc\x45\xf8\x52\x93\xa3\x62\x8b\xbc\x7f\x0f\xe6\x7a\xe0\xa1\xf3\x9a\xb3\xba\x0f\x76\x22\x50\x45\xd4\x46\x3f\xb7\x59\x68\xaf\xb2\xfb\x1a\xa7\x67\x34\x4c\x86\x37\x1b\xa3\xbf\x88\x49\x1b\x22\xc3\x44\xcc\xc9\x6b\x18\xf9\x50\x06\x38\xdc\x61\x0c\x9f\x8b\x5f\x07\x5b\xbe\xc6\x4d\x1b\xc5\x89\xaf\x4f\xa8\x0d\x6b\x23\x9e\xd7\x7e\xf3\x52\xd5\x23\xf5\xe0\xbe\x6f\xc4\x5e\x8e\x7b\x8f\x6a\x46\xb0\x6b\xf9\x40\x6e\xbf\xed\xed\xca\x7b\xd4\xaf\x43\xad\x49\xc8\xc5\x8f\x79\x4d\x93\xb4\x4c\x18\x80\xb5\x29\xa6\x0c\x7c\x6b\x1b\x91\x7e\x6c\x4c\x3d\x8d\x32\x76\x44\xe7\x4b\x78\xbb\xaf\xf1\xe7\x1f\x31\xd5\xc1\xa7\x99\x74\xe0\x3f\xe3\x71\x86\x7a\xf0\xf4\x34\xc8\x88\x56\xf9\x83\xb2\xbf\x08\x7b\xe5\x13\xfa\xfb\x60\x48\x9f\xe4\x01\xdc\x55\x5a\x68\xec\x4d\xba\x42\xb8\x6f\x54\xe3\xfe\x58\xb6\x88\x93\xb8\x9d\xdb\xf7\xb7\x7b\x2b\xbc\xca\x8f\xbd\x08\x61\x5b\xca\xad\xd1\xb6\x0f\xe4\xaf\xed\xed\x91\x30\xdb\x7b\xea\xc0\x79\x78\xeb\x5a\x91\x75\xda\x02\x21\xb2\x03\x75\x1f\xba\x5e\x47\xa8\x2d\xf1\x0b\x1a\x78\x1f\x63\xb5\x25\x6b\x6d\x50\xde\xd9\x84\xf2\x2e\x9e\x20\x9a\x07\x10\xb1\x87\xc2\xd8\xc3\x5e\xa0\x08\xfc\xfd\xec\xa9\xd0\x94\x47\xfa\x9b\xc8\xa4\x7b\x59\x03\xc9\x2d\x2c\x71\x83\x1b\xd8\x99\xd1\x3e\x8c\x10\xb9\xdd\x09\x5b\x55\x5f\x91\x54\xa4\x43\x82\x81\xb0\x29\x67\xf4\xb7\xef\x4d\x66\xa6\x17\xdf\x5b\x9e\x78\x6f\x72\xe2\xfd\xe5\xc5\x0f\xe6\x26\xfb\xfb\x1a\x15\x4b\x96\x8d\x56\x30\xca\x5e\x30\x74\xd3\xce\x5e\x18\x25\x7f\xd1\x52\x69\xe4\x1f\xba\x89\xb2\x17\x0a\xb6\x6d\x64\x2f\x74\x87\x68\x76\x61\x51\x14\x99\x57\x01\x17\xd4\x6d\x41\x0e\x21\xf9\x72\x26\x73\x4d\x34\x2e\xef\x6b\x96\xe9\x2f\x00\xb2\xb8\x38\x47\xcb\xbc\x41\x33\xd2\x9c\x5a\x92\x41\xa5\xa2\xb5\x32\x69\x7e\xfb\x8a\x2e\x6f\xc2\x00\x47\xfe\xc7\x08\x5a\xd5\x55\x55\xdf\xc0\x32\x5a\xd9\x44\x12\x0d\x2f\x86\x0a\x04\xb6\x0e\xe5\xbf\xe0\x43\xaf\x6c\x5c\x7c\x2d\x27\xe7\xf9\x99\x73\x02\x09\xef\xcd\x2f\x4f\x9a\x07\xdf\x35\x0f\x6a\xb4\xcb\xa1\x57\x40\x6e\xd4\xeb\xf9\x17\x2c\x07\xea\x1e\xfd\xe4\x7e\x75\x8a\xdc\xca\x89\xd7\x3a\x84\xd5\x32\x38\x45\xce\x9f\x8f\x79\x39\x8c\xdb\xfb\x84\xe0\x98\x61\x17\xb1\x5d\xd0\x65\x74\xf1\xea\xe4\xe2\xe8\xdc\xec\xc2\xe2\xe8\xdc\xd2\xe2\xe8\x95\xc9\xe9\xc9\xc5\xc9\x51\x6c\xe7\x44\x41\xc4\x94\xc4\x27\xfb\xee\x67\x7b\xce\xfd\x2a\x7c\x8d\xe0\x73\x44\xbe\x47\x14\x00\x72\xee\x3f\x15\x84\x07\xbf\xd7\x1a\x85\x21\xe2\xeb\xf6\x88\x05\x05\x36\x29\x05\x30\x41\x1e\xd3\x84\x57\x01\x1e\xdd\xb2\x61\x69\x68\xb7\xdc\xe2\x66\xca\x2a\xad\xd0\x70\x2f\xd1\xd0\x5a\x79\x86\x76\xcd\x0d\x7f\x19\x8f\x8b\xdb\xbd\x61\x92\x68\x93\xe7\x8b\xac\x36\x08\x8b\x98\x2c\x48\xe4\x4f\x16\x76\x16\x3f\xc7\xdc\x14\x1f\x30\xcf\xb7\x51\xd8\x78\xfe\xc2\xad\xd6\x82\x31\x65\x15\xd4\x78\xf6\x93\xfb\x75\x1d\x6a\x7a\xec\x56\x3a\x51\x5c\x62\xf5\x4e\x72\x7a\x71\x45\xd1\xfc\xb8\x65\x74\x65\xf6\x5a\x66\x6a\x06\x52\x43\xa0\x85\xc5\x26\xdd\x14\xbc\x71\xf5\x8a\x22\xec\x91\xcd\x82\x68\xef\x43\x0a\x44\xb8\x87\x34\x4f\xa8\x85\x32\x16\xd5\x72\xf3\xe0\x94\xe1\x69\x3c\x7f\x85\xa0\x6c\xc8\x13\xd6\x25\x90\x4a\x4c\xe7\x2e\x0d\x46\x4f\xb6\x99\xfb\x1d\x13\x0d\x20\xee\x34\x2a\x16\x1a\xfc\x5a\x07\x47\xa4\x95\x8c\x35\x9b\x0f\xc1\xe7\xb7\x44\x1c\x05\xe4\xde\x39\x72\x9e\x97\x83\xc9\xcd\xdd\x13\x35\x35\xb3\xb0\x98\x99\x9e\x9e\xbc\x82\xe6\xa6\x97\xae\x4e\xcd\xa0\x89\xd9\x6b\xd7\x32\x33\x57\x84\xbd\x66\x21\x94\xbe\xad\x65\x31\xad\x4d\xdd\x25\x0a\x61\x7c\x74\x1c\x0e\x41\x8c\x33\x20\x99\x99\x98\x5c\xbe\x36\x79\x6d\x76\xfe\x83\xae\x4e\xb0\xa9\xbc\xa6\x9b\x38\x5c\x62\xb3\x53\xfa\x1a\x93\xdb\xce\xc9\xa9\xb0\x0b\xfe\x94\x86\x7e\xab\x68\xb2\xbe\x61\xa1\x09\x56\x18\x7c\x5a\xd1\x68\x8b\x19\x4b\xd1\xf2\x2a\x4e\x91\xdb\x17\x96\x47\x11\xb6\x72\x92\x81\x65\x48\x09\x1b\x47\x23\x5b\xd9\x6c\xf6\xc2\xba\xa4\x2a\x32\xf9\x63\x9c\xfc\xcf\xef\x2d\x5d\x23\xff\x15\x16\x32\xe1\xa8\xe8\x2c\x35\xbf\xfa\x9c\x5f\xde\x1f\xde\x73\x8f\x76\x9c\xfd\xba\x5b\x39\x6d\xde\xab\x8e\x22\x16\xb5\x0c\x75\x41\x9a\xfb\x65\x32\xcd\x04\xad\x9f\xf2\xd3\x91\x80\x4e\xa3\x9d\xd3\x37\xb0\xb9\x50\xc0\xaa\x0a\x63\x95\xf5\xd2\x8a\x70\xac\xd9\x0b\x71\xb8\x84\xaa\x48\x3b\x2a\x1e\x3e\x71\xa3\xde\xdd\x58\x3b\x12\x20\x18\x2d\x55\x34\xbc\x42\xa1\xac\x7a\x31\xd7\x3c\xf4\x92\x6d\x94\x84\xc5\x59\x7e\xa8\x3a\xb5\x6f\xe0\x94\xa7\x7d\x62\x58\x71\x63\xaa\x44\x08\x11\xea\xa6\x89\x73\x36\x5a\xb2\xa4\xbc\xb0\xf4\x6a\xe5\xc4\xa9\xef\x3b\xdf\x9c\x7a\x29\x3e\x3b\x5c\x28\x3c\x13\xb4\x5d\x6d\x01\x9c\x46\x19\xcd\x2f\x99\xa5\x58\xa8\xa8\xf0\x3e\x78\x90\xaf\xc4\x5e\x56\x37\x11\xd6\x72\xaa\x6e\x61\x39\x9d\xd5\xc4\x7d\x70\xe2\xe8\xf1\xab\x5c\xb0\x82\x57\x50\x2b\x67\xb7\xec\x1c\xfd\xe4\xdc\xad\xb8\x87\xbb\x8d\xa7\x75\x68\x88\x4c\x81\x3c\xaa\xa2\xc6\x69\xb9\x59\x39\x03\x17\xed\xc9\x0f\x90\xad\xd7\xde\xd5\x0f\xa8\x49\x36\xd2\x09\xaf\x5c\xbf\x86\xd1\xaa\x2a\xe5\x2d\x74\x11\x7f\x92\xc3\x86\x8d\x52\xab\x97\x50\x4e\xd2\xc8\x88\x57\x58\x37\x61\x2c\xa3\x8d\x02\xd6\x90\x51\xa2\x55\x55\x8b\xbc\xb9\x14\x44\xed\xd3\x00\xa4\xb0\x0c\x11\x5d\x3e\x92\xce\x4a\x6b\x11\x5f\xb6\xa1\x0f\x4f\x9c\xbf\x9e\xd0\xcc\xc5\x32\x6a\xde\x3b\xa3\x09\x38\x44\xe4\x33\xb5\xc1\x13\x01\x7e\xe5\x8d\x8b\xa9\x55\xe4\xd6\xaa\xee\x83\xb3\x4b\x70\x72\xd4\x6e\x74\xd7\x06\xbf\x6d\xee\x3a\x5f\x2f\xe8\x85\x42\xd3\x35\x9c\xbd\x90\xcd\x6a\xd9\xbe\x99\xa4\x0d\x25\x79\xd1\xc3\xc6\xf4\x6c\x8e\x11\x72\x55\x4e\xdd\x83\x57\xc8\xcf\x60\x64\x54\x24\x1b\xe0\x3c\xaf\x07\x37\x22\x19\x46\x0a\xce\x6d\xac\xad\xfb\x7f\x40\xb8\xee\x08\xb9\x75\xf2\xdd\x62\x0d\x6c\x23\x10\x0e\x8f\x45\x1b\x55\xf0\xad\x0b\xc6\x8f\x19\xdb\xb9\x8e\x68\x04\x32\xf5\x06\x31\x0e\xaf\xa1\x1b\x4f\x6e\x1a\xe6\x38\xda\x91\x0d\x6a\x3d\x32\x73\x73\x68\x61\x72\xfe\xfa\xd4\xc4\xe4\x32\xd7\x68\x86\x37\x90\x28\x6c\x03\x1c\xc9\x32\xb9\xdb\x83\x0f\x96\x29\xed\xc3\x1c\x08\x20\x23\x5a\x3a\xc5\x35\x28\xc6\x0a\x0d\xa3\x5d\xe6\x9d\xcb\x88\x22\xe4\xde\x10\x06\x77\xae\x6c\xe7\x8d\x6d\xf8\xec\xe7\x8f\x62\xe0\x03\x88\x5a\x87\x41\x10\x3a\x94\xd9\x1e\x14\xd3\xbc\xb3\x34\x35\x7d\x65\x2e\x33\xf1\x3e\x40\x1d\x45\x33\x93\xbf\x5d\x0e\x3f\x1b\x1e\xe7\x84\xf1\x10\xfe\x69\xc7\x3e\xa8\x71\x72\x99\x75\xae\x5b\xc3\x37\x36\x0c\x6b\x63\x04\x44\xb1\x36\x1c\x86\x1b\xac\x00\x9e\xce\xbc\x33\x39\x3d\x8a\xe6\xe6\x67\xaf\x4f\x5d\x99\x9c\x87\xf5\x58\x9c\x7d\x7f\x72\x88\xa7\x49\x0b\xca\x51\x8a\x6f\x68\x03\x3a\xa7\x61\x0c\x8a\x81\x66\xe7\xaf\x86\xce\xf4\xa1\xd0\x3e\x3b\x7f\xd5\x7d\xb0\x33\x60\x56\x6a\xa5\x7c\x58\x13\x3f\x2c\xe2\x99\xc0\xfd\xb7\xa5\xd9\xc5\xcc\x50\xa9\xf7\xa4\x2b\xa0\x1a\x14\xe3\xcc\x4f\xce\xcd\xfa\xea\xc6\xd2\xfc\xf4\xf0\xc6\xe0\xa1\x22\x83\x58\x9a\x9f\x1e\xd4\x22\x2c\x4c\x4e\x2c\xcd\x4f\x2d\x7e\xb0\x7c\x75\x7e\x76\x69\x0e\xc6\x31\x3b\x7f\x75\x94\xb9\xf7\x24\x15\x2d\xcc\x65\x86\x79\x3c\x84\xf1\x8f\x02\x47\x3b\xf5\x2f\x91\x5b\xae\x35\x6f\x1e\xb9\xb5\x1b\x94\x80\x41\xad\x58\xc4\x70\xe7\x32\x8b\xef\x2d\x2f\xce\x2e\xff\x66\x61\x76\x66\x79\x7e\x69\x7a\x72\x61\xf9\xdd\xa9\xe9\x73\x1b\x32\x59\x4f\x01\x09\xc3\x59\xe3\x51\x4f\x6a\x9c\xff\xd2\x8e\x0e\x7a\x35\xa9\x46\xf1\xce\xfc\xec\xfb\xe4\x54\x23\xaa\x53\xf8\xd9\x30\x47\xd7\x09\xf7\xb0\x46\xb9\xb4\x30\x39\x4f\xe5\xe6\x5c\x66\x61\xe1\xb7\xb3\xf3\x57\x46\x87\x2b\x7b\x12\x12\x30\x38\x76\x6d\xd1\x4d\xf9\x83\xf7\x27\x3f\x18\xfe\x20\xa3\xb0\x0e\x7a\x25\x7d\xad\x5b\x93\x43\x8c\x33\x7c\x75\xbc\x15\x13\x39\xd6\xa3\x28\x18\xea\x90\x5f\xcb\x82\x92\x91\x0e\x63\x4d\xa9\x10\x3d\x07\x25\x0c\x30\x0d\x5e\x0d\xf3\x07\x30\x64\x35\xcc\xa3\x7f\xa0\x3a\x18\x40\x4d\xf9\x36\x1f\xf8\x27\x60\x48\x0d\xf7\xe6\xee\x23\x86\xcb\x6d\x0b\xde\x81\xae\x0e\xd5\x31\x61\x9b\xfa\xff\x1c\xee\xc0\xa2\x50\x0e\x61\x4c\xc3\x32\x11\x0d\x9e\x68\xff\xd0\x03\x3d\x66\x7e\x76\x98\x2a\x62\x04\xb2\x21\x8d\x03\x26\xea\x9c\x87\x13\xc0\x39\xa8\x51\x0d\xc3\xf2\x33\x28\x09\x25\x19\xc6\xb2\x26\x15\xf1\x28\x0b\xb0\x82\x7f\x0c\x6f\xb2\x23\xd1\x0d\x6c\x9e\x07\x4e\xf2\xa0\x66\xd9\x2b\xcb\xc6\x06\x0f\xf5\x54\xc9\x89\x60\xb0\x7e\x58\xc3\x9b\xf1\x56\xd4\xb4\xc0\xea\x28\x6b\x8d\x33\xa8\x01\x16\x74\xcb\x86\x01\xd1\x65\x1d\xde\x70\xbc\x28\x2b\x72\x56\x07\x62\xf8\x06\xc3\x41\xba\x0a\xad\x7f\x68\x80\x2a\x19\x8e\x86\x37\x02\x0f\x86\x35\x28\xf7\xe8\xd4\xad\x95\xa1\xe2\x1f\x8d\x1d\x83\xf0\xb7\x9b\xbb\x81\x27\x83\x1c\xa1\x6e\xe6\x11\x65\x06\x32\x3c\xfe\xaf\xe1\x0f\x8f\x35\x0b\x81\xf1\x8c\xd2\xf1\x05\x1f\x0d\x6c\x88\x66\xfe\x3c\x45\x5a\x24\xba\x41\x8d\x85\x25\x73\x8d\x86\xf2\xf0\x46\xdb\xab\x1c\x0d\x6f\xed\xfc\x04\xf8\xd6\xec\xbc\x51\x41\xf1\xa3\x41\xc9\x14\x9a\xdb\xd3\xba\x78\x83\x1d\x1d\x24\xa2\x0c\x98\xff\xd6\xdf\xe0\x17\x56\xf2\xa7\xe7\x78\x20\x7f\x4f\x67\x66\xd0\xfa\x9b\xfe\xcf\x6f\xd2\x47\x43\x5b\xbd\xae\x49\x19\xd4\x1c\x6c\x6d\xa5\x33\x7c\x44\x31\x9d\x23\x92\x8d\x27\x0c\xcc\x6f\x5c\xd6\x9b\x2b\x78\xb1\x80\x21\xa6\x0c\xe5\x58\x38\x5a\xb0\x13\x25\x97\xf5\xf4\x35\x4f\xf2\xe7\x24\x0d\xad\x60\x64\x95\x58\x60\x5a\xd8\x9d\x87\x74\x93\x06\x4b\xfb\xf1\x68\xe9\xcd\xa2\x1a\x1b\x93\x16\xd1\x30\xbe\x59\x29\xbb\x0f\x4f\x90\xb3\xbf\xef\xd4\x3e\x6f\x7e\x56\x73\xbe\x3d\xe1\x21\x68\xa2\x0a\xea\xfe\xf9\xc0\xe3\xb1\x38\x5c\x1a\x75\x56\x6d\x3c\x7f\x91\xa0\x52\x7a\xcb\x1c\x09\xe3\x84\xe3\xd6\x4b\x14\x27\xdc\x02\xda\xcb\x13\x81\xf8\x7e\x6f\x06\x3f\x0e\xac\x31\xcd\xd1\xfa\x18\x7a\x82\xb1\x92\xed\xeb\x8a\x8c\x45\x51\xe6\x9d\xf0\xf2\x9e\x1e\x45\xc9\x1e\xf7\x9b\xb6\xfe\x66\x61\x76\xe6\x5d\x45\x85\x9e\xb2\x59\x3b\x6b\x67\xb5\xeb\x92\xaa\xc8\xec\x6d\x5a\x03\x5f\x2a\x1a\xd0\xfb\xff\xc3\xac\x86\xd0\x16\xf9\x1f\x44\x53\x78\x6c\x3d\xa7\xab\xd9\x0b\xe3\x28\x7b\xc1\xce\x19\xd9\x0b\xa3\xfc\x37\x19\x9a\x85\x03\x69\xf4\xe7\x37\x2e\xa7\xdf\x7c\xfb\xed\xf4\x1b\xe9\x37\xfe\x25\xf0\x9a\xa1\x9b\xb6\x45\x5f\x78\xeb\xad\xcb\xff\x9c\xbd\x40\x7e\xd8\xce\x6a\x1f\x75\x31\xf1\xd0\xb2\xa2\x59\x39\x70\xef\x1c\x8d\x33\x26\x12\x0c\x8c\x7f\x7d\xc6\xbe\x61\x19\x30\x95\xdd\xf3\x1d\x5a\x87\x65\x2a\x51\xf6\xb8\x1e\xaa\xed\x19\xe2\x08\x2f\xe2\x71\x6b\x2b\xcd\x3b\xcc\xb1\x74\x96\xde\x38\x83\xa1\x94\x0c\x23\xc5\x0f\xd2\x94\xa2\xc9\xf8\x93\x40\x28\xaa\x86\xf3\x92\xad\xac\x8b\x02\x80\x13\xa2\x50\x34\x88\x77\x66\x55\x48\xfd\x44\x9e\x2e\xa1\xd2\x6a\xfd\x13\xd3\x53\xac\xea\x9d\xe0\x73\xf2\x42\x44\x3d\xfe\x58\xa8\x7e\x29\x3d\x32\xbd\x73\xf0\xd7\x1c\x74\x5f\x88\x4d\xea\x0b\xbe\x18\xd9\x03\x20\x2e\x59\x8f\x97\x46\x14\x71\x7d\x40\xa7\x88\x07\x80\xae\xe1\xa2\x6e\x6e\x26\x80\x83\x9c\x27\xfb\xce\xdf\xbf\x73\xbe\x3d\xe9\x00\x91\xf3\x9a\x84\x34\x5d\x4b\x71\x2e\xe0\x8d\x20\x13\x60\x82\x4c\xc5\xa3\x3d\x76\x89\x74\x0f\xca\xce\x9d\x3d\xde\x0d\xf2\xf0\x84\x06\xca\x0a\x63\xcf\x29\x11\x5d\xe6\x2f\x4e\x31\x26\x83\x5d\xee\x05\xca\x43\xa0\x34\xd1\x17\xc5\x54\x97\xab\xce\xb3\xb2\xd7\x45\x55\x20\x6a\x68\xe8\x7c\x3c\xe6\x79\xd6\x09\x8b\xfc\xb7\xbb\x53\x1f\x5a\x5c\x05\x3e\x8d\x45\xb3\xb0\x30\x8d\x26\xb0\x69\x7b\x62\x62\x6e\x8a\x48\xbb\xc5\xa9\xb9\x71\xb4\x64\x61\x34\x92\x5b\x45\x92\xa1\xa0\x54\xca\x5a\x53\x8c\x94\x65\xa9\x29\xf8\x10\x48\x80\x0e\xc3\x39\x5d\xb3\x15\xad\x84\xd9\xb1\xad\x11\x45\x1a\xe7\x4a\x26\x4e\xd2\x8a\xb7\x3b\xe2\xa0\x1f\x31\xf4\xbf\x5a\x54\x8c\x4e\x9d\xf6\xf9\xfb\x34\x23\xb1\x7d\x9e\x08\x70\x5a\x55\xc5\x2d\x57\xdb\x81\xc6\x12\x46\x94\x19\x22\x9d\xc7\x59\xd6\xf4\x9c\x6e\xda\x84\xb2\x0c\x7b\x1e\x64\x79\x68\xce\xd9\xcd\xfa\x1d\x3c\x85\x6c\x8a\xdb\x67\xad\xd0\xfd\x5f\x60\x43\xd0\xee\x9c\x1d\xf9\xdf\xa3\xd8\x6b\x51\x0c\x7d\x29\xf2\x25\xda\x26\xa4\x2b\xca\xda\xfa\xa0\x37\x5e\x9c\xb8\xe5\xa7\x1d\x50\x43\x77\xea\x41\x6e\xa2\x40\xbf\xea\x04\x3b\xc9\x2f\xcb\x13\xd3\xee\x3b\x62\xb4\xc1\x8a\x3b\xa2\xb6\x5d\x1c\x47\x68\x4a\x3d\x2d\x0b\xf8\x36\x95\x83\xfc\x8c\x34\x9a\x53\xb1\x64\x61\xfe\x23\x92\x50\x40\xc4\xe8\x2b\xbf\x27\x47\x9c\x6e\x52\x73\x96\xad\xf3\xf4\x5e\xb2\xbb\x24\x05\x3a\x8b\x46\x7c\x20\x3a\x4d\x52\x39\x3f\x7d\x42\xc4\xff\x74\xe9\xa0\xd5\x0d\xe8\xb6\x34\x6f\x25\xa8\x10\x87\x75\x1d\xb7\x72\xec\x9c\xed\xb9\xb5\xa3\xe6\xed\x33\xae\x21\xc7\xbc\x02\x1d\x56\x58\x66\x31\xcd\xe9\x63\xca\x79\x85\x99\xcd\xba\xd4\xaa\xe9\xd8\xbd\xe4\x66\x28\xf8\x60\x62\x43\xa7\xfa\xcc\x08\x4a\xf1\x23\x17\x5e\x91\x75\x4c\x15\x5e\xe8\xbe\x24\x98\xa5\x16\x10\x71\x0c\xc7\x33\xa0\x51\xaa\x25\xaf\x8f\xff\x00\x07\x53\x4c\xff\x76\x6f\x00\x8a\xb5\x46\x0b\x97\xc0\xee\xbe\xa2\x58\x6b\xac\x1e\x4a\xb7\x9d\x02\x23\xa8\xdc\xdf\x27\x47\xe6\x8d\x13\xbf\x96\x49\x52\x24\x7d\xd2\x3c\x2c\x32\x3b\x51\x46\x36\x96\x70\x53\xc7\x7f\x4a\xd5\xc7\x14\xe8\x8f\xa9\xff\x9f\xbd\xf7\x6b\x8e\xe3\xb8\xf2\x44\xdf\xef\xa7\xc8\x9d\xbd\x11\xa4\x62\xd1\x2d\xd2\xe3\xb9\x0f\xf4\x83\x03\x06\x41\x0a\x63\x92\xc0\x02\xa0\x66\xbc\xa2\x82\x5b\xe8\x4e\x00\x75\x59\x5d\xd5\x53\x55\x0d\x0a\x83\x65\x04\x48\x36\xb5\xb0\x08\xaf\x40\x9b\x30\x41\xa9\xc1\x0b\x8e\x29\x93\x72\xc0\x31\x20\x09\x49\x60\x98\xda\x0f\xd4\x55\xfd\x1d\x6e\xe4\x39\x99\x59\x59\xd5\x95\x59\x55\x0d\x50\xd6\x38\xd6\x7e\x10\x51\x5d\x79\xf2\x64\x56\xfe\x39\x79\xf2\x9c\xdf\x0f\xf2\xbb\xdb\x96\x6f\xb5\x40\x93\xe5\xa1\x1c\xef\xf2\xad\x1b\x96\x1b\x3d\x7f\xd6\x3f\xe8\x21\xb3\x84\x46\xbc\x51\x53\xe9\x98\x6a\x78\x1d\x17\xb7\x1c\x69\xd5\x4c\xb0\x47\xac\xbf\xa6\x52\x2f\x29\xfb\x0f\x7a\xc5\x8b\xcd\x2d\xcd\x0a\x28\x8d\xbd\xfe\x41\x4f\xe8\x3f\x5c\x7b\xce\x9b\xb0\x3c\xfc\xfe\x01\x87\x9e\x57\x2d\xb5\x22\x1f\x43\xa6\xd5\x2d\xb0\x47\x89\x63\xb7\x6c\x6c\x3c\x1a\xa8\x97\xd8\xdf\x23\x8e\xc0\x7c\x2b\x96\x0c\xb6\x7b\xfd\xd7\x5d\x63\x1d\xa5\x54\x4e\x75\x52\xea\xe3\x9c\xf8\x67\x19\xaa\x6a\xc8\x6c\x3e\x81\x4f\x50\xdc\x1e\x87\x06\x01\x09\x97\x2d\x57\x7d\x93\x8f\x8e\x77\xd5\xb2\xe1\x9a\x48\xf4\xef\x47\xd1\xf3\xcd\xbc\xf4\x39\x73\x43\xc1\x51\x51\x88\x9b\xa1\xb3\xe6\xe5\x1e\x00\x1d\xfd\xe5\x56\xf4\x64\x87\xdf\x08\x99\x6b\x95\xfe\x2d\x22\x39\xde\x2d\xd2\xb2\xb4\xdc\x51\x39\xf5\x5f\x96\x22\xa2\xe7\xdf\x80\x5b\xab\x2c\xad\xbc\x54\x22\x67\x76\x1d\x67\x6a\xe9\x66\x53\xc5\xa9\xf4\x0e\x26\xfd\xc9\xcd\x73\x8d\x72\x27\xb2\x85\xeb\x95\x1c\x71\xf3\x86\xe3\x08\x52\x2b\x77\x42\x7e\xa2\xec\x84\x1c\xbc\x49\x7f\x74\x52\x5e\xca\x85\x02\xc9\x53\x1e\xcf\x26\x66\x75\x42\xbb\x45\x81\xa9\x4f\x6e\xb6\xf3\xf8\x64\xd4\xa5\x7c\xaf\x37\xd8\xee\xc5\xf7\x7b\xfd\x83\xee\xf0\x4e\x9b\x27\xdb\xa8\x5e\x42\x64\xc3\x8c\xc3\x19\xdf\x6b\x53\x3f\xe4\x84\x1a\xa7\x10\xff\x3b\xf4\x6d\x77\xe9\x43\xcb\x51\xbf\x87\x56\xe5\x9f\x0d\x4b\xd1\xda\xe3\x07\xbf\x35\x56\xa0\xd3\xdb\x0e\xf1\x7a\xb5\x65\xb9\xd6\x12\x45\x98\xa9\x31\x78\x42\x91\xec\x78\x91\xd3\x9c\x22\xd2\x17\x67\x21\x05\x30\x2d\xfd\xed\x88\xc4\xb7\x8a\x0f\x37\xa2\xcd\x75\x88\xd4\xee\x1f\xae\x47\x7f\xdc\x1f\xe3\x48\x23\xd1\x56\x6f\x18\x7d\x1e\x29\x53\xb9\x23\x5b\x7f\xd3\xa1\xd1\x39\xa0\x0e\x3b\x04\xb1\x1f\x1a\xcb\x96\xbb\x84\x37\x74\xbc\x31\x01\x0d\x49\xd0\xa6\xc8\xb0\x08\x53\x2f\x18\x4d\x7d\x01\x87\x09\x71\xe7\xf0\x4b\xf4\x7a\xbd\xff\xea\x7b\x6c\xd8\xb7\x3d\x3e\xf3\xc0\xe9\xb6\xb7\xad\x6b\xc4\x3f\x7a\x0b\xe4\xf4\xda\x5a\xfd\x1f\xbd\x85\x8b\x57\xa7\xce\xdf\xba\xf5\x1e\x59\x04\xa6\x61\x3e\x63\xcd\xbe\x89\xd2\x32\xdb\x1e\xba\x13\xc5\xb4\x59\xb6\x02\xb2\x40\xa9\x4b\x7c\x6a\x35\x96\x69\x13\xef\x56\xd8\xf8\xc2\x93\x67\xcb\x5a\x25\x41\x68\x3b\x0e\xdb\x95\xfd\x8e\x0b\x07\x47\x0f\x71\x1d\x26\x2e\xc8\x1d\xbd\x4e\x7e\xe5\x75\x7c\xf6\x04\x8b\x7a\x3e\x94\x5c\xb6\x56\x28\x69\x79\x3e\x55\xd1\x49\xab\x41\xb9\x5d\xb2\x82\x90\x4c\x0b\x7d\x74\x60\x36\xcf\x37\xe2\xe7\xeb\xd1\xf3\x5f\xc3\xa5\xf5\x93\x07\x06\x51\x9d\xb6\xe3\x59\x4d\xda\xac\xe6\xbe\xbb\x64\x07\x21\x50\xaa\x08\x56\x42\xd6\xfe\x10\xb0\xd1\x70\xe4\xeb\x14\x43\x0e\x2a\x65\x5c\x73\xaa\x95\xed\x97\x24\xba\xb3\x13\x3f\x3a\x2c\xaa\x6f\xc5\xb2\x1d\x98\x75\xfc\x34\xca\x2f\xc6\x74\x04\x95\x38\x52\x25\x47\xb7\xa4\x62\xcc\x01\x8f\x19\x4d\x01\x68\x3d\xc2\x0d\xd9\xb4\xa9\x92\xba\x78\x3e\xfb\x09\xca\x34\x9b\xea\x4f\xb6\x96\x11\x59\x99\xf9\x82\xf9\x45\x7a\x02\xbe\x7d\xc8\x1a\xb1\x95\x90\x49\x66\xb8\x61\xca\xb5\xb4\x4c\x13\x13\x5e\x46\xdd\x57\x44\xc9\x09\x33\x63\x29\xb1\x9e\xbf\x54\x20\x90\x47\x58\x94\x92\xc6\x69\x34\xf8\xd0\x6b\x20\x5e\x1f\x87\x30\xe4\x28\x5d\xe2\xa1\x8a\xf2\xad\x85\x06\x83\xeb\x4c\x8e\x54\xca\xbb\x5c\x3c\x4c\x48\x34\x78\xbb\xc5\x76\x5d\x4e\xd3\x0c\xfd\x44\x41\x9f\xa6\xe8\x25\x4a\xca\x4f\xc7\x57\x9c\xc8\x7c\xcc\x67\x8a\x2a\xa7\x8f\x44\x6a\xb5\x00\x8b\x51\x37\xd6\xb3\xdd\x2a\x3a\xbf\x54\x1d\x88\x22\x7a\xda\xe2\x81\x17\x76\xc0\x8e\x7c\x3e\xad\xb1\xb1\x8b\x00\x2b\x24\x58\x0d\x42\xda\x1a\xe3\xb8\x7f\xe0\xe0\x73\xc5\x4a\xee\x2e\xc9\x9f\xc3\x65\x2b\x84\x3b\x73\xbf\x03\x57\xea\x5a\xd4\x36\xa1\x26\x86\x61\xa0\x9a\xa7\x05\x3a\xe8\xba\xc0\x5c\x41\x2a\x61\x89\x9e\x02\x4c\xe0\x24\xfe\xe2\x30\xde\xb9\x4d\xe2\x57\x87\xf1\x1e\xf8\xe5\xa2\x37\xdd\xe8\xe9\xbf\x83\x9d\x77\x67\x3f\xde\xeb\xf2\xb9\x04\xb0\x56\xfc\xca\xf3\x7e\x0f\x88\xe7\x7b\x1a\x84\x37\xd9\x15\xec\x4b\xe3\x02\xc3\x57\xc4\x32\xeb\x4c\x76\x31\x49\xdf\x86\x25\x6b\x4f\x99\x6f\x21\x31\xd6\xb8\x01\x94\x0c\x01\x6f\x71\x94\x39\x98\x30\xa9\xaa\xe3\x42\x25\xb1\x19\x69\x1a\x4a\x78\x50\x80\x60\xaa\x30\x2c\xa5\xad\x53\x5c\x8d\xdc\x1b\xbc\xc5\x45\xca\xac\x4c\x59\xa1\x82\xe9\x6d\xd8\xb3\x87\xc8\x83\x87\x57\xf5\x78\xe7\xd9\xe0\x37\x6f\xa3\x52\xcb\xa4\x54\x07\x97\x45\x9f\x06\x5e\xc7\x97\xb8\xce\x65\x77\x4c\x31\x2f\xff\xb8\xcf\x36\x9b\xcf\x9e\x29\x60\xd3\x15\x54\x80\xcb\xe5\xaa\x35\xe3\x83\x0a\xf5\x29\x7c\xbf\xca\x0a\xa8\xff\xda\x62\xfd\x4b\x3e\xba\x88\xd2\x2c\xae\x4b\xd2\xf8\x59\x43\x4b\xb0\xe1\xde\x65\x78\x55\xe5\x34\x7b\xc5\x15\xa6\x98\xc9\x74\x0d\xca\x90\x8d\x15\x4b\xcd\xb2\x23\xf1\xae\x63\xc7\x01\x6f\x71\xe8\x57\x38\xe8\x72\xb3\x57\xb9\xf2\xd2\x7e\x52\x58\x0d\x73\x2e\xb6\x60\x7e\xa7\xf6\xba\xb8\x7b\x24\x4e\xc0\xd5\xf6\x40\x5d\x03\x42\x6b\x09\x21\xe6\x43\x01\xc1\x5c\xa8\x6d\xae\x9a\xb0\x0c\x83\xd3\xeb\xf9\xf6\x71\xb4\x4c\xb1\x71\x04\x08\x5a\xac\xd5\x64\x98\x39\x83\x9f\x97\x2a\xd4\x94\xb0\x65\x94\x1a\x8f\xf2\x2e\xae\x7c\x15\x9c\xea\xa2\x50\xbc\xa4\xaf\x28\x16\x8d\x98\xd9\x45\x3c\xef\x7a\x01\xec\x93\xf3\x30\x11\xda\x24\x18\xf2\x11\xe8\xc3\x42\x74\x70\x92\xa0\xa6\x31\x20\xe4\x92\xd7\xb0\x1c\xe9\xfd\xb9\x69\xf9\x4d\x71\x0c\xc0\x41\xc6\x4e\x8e\x76\x00\x37\x28\x22\x24\xaf\x49\x17\x6d\x97\x36\xf1\x04\x08\xde\x5c\x8f\x9d\x15\x75\x53\x99\xf5\xd8\x3e\x77\xfa\x90\x78\xaf\x1b\xdd\xdf\x87\xc1\xf8\xbf\x1e\xd7\x09\xc4\x3e\x8a\x1b\x48\xb0\x28\x1e\x6c\x91\xe8\xd5\x06\xc4\x2f\xb3\x15\x6d\x6f\x3b\xde\xdd\x51\xcc\x90\x22\x7f\xe5\x25\xaf\x71\x03\xe6\x8d\xb4\xfe\x49\xe8\x31\x93\x6a\x85\x6d\xdf\x9d\x76\xd3\x0a\xf5\xe6\xc4\xa3\x7b\xdc\x47\xfb\xd9\xd1\x60\x7b\x87\xfb\x5c\xd8\x52\xfa\x74\x57\x39\x25\xc4\x4f\xf6\xfa\x47\x1b\xba\xea\x11\xc0\x9b\x68\x03\x85\x94\x7d\xf8\x69\x0f\x3f\x53\x81\x28\x4f\x0f\xb2\x98\x95\xb5\xdd\x8d\xbf\xbc\xab\x15\xb7\x44\x9b\x84\xfa\xbe\xe7\x6b\x83\x5c\x50\x0c\xba\x6c\x9e\x45\x5f\xed\x68\x02\x0c\x99\x2c\x70\x18\x74\x42\x03\x25\x9e\xa2\x52\xc1\x08\xf4\x6e\x00\xf0\x79\x1b\x9c\x69\xcc\xe8\xc5\xe0\xa6\x53\xc3\x04\xa3\xe9\x9b\xd8\x72\xf7\xb5\x43\x47\xcc\x6c\x2d\xfd\x57\xeb\xf1\xdd\x5f\xe7\x2b\x77\x79\xfc\xca\xd4\x85\xc9\xb9\xf9\xeb\x33\xe3\xf3\x1f\x54\x9a\xc5\x46\x90\xd6\x82\x90\xa8\xcb\xd6\x0d\x4a\x2c\xf8\xfc\x35\x19\x24\x30\x1c\x80\x2e\xad\x92\xd0\x23\x13\x17\xc0\xea\x2f\xf6\x74\xc1\x55\xba\xe6\x64\xc4\x66\xe0\xc4\x85\x1c\x7e\x77\x7e\x06\xc0\xa9\x80\x2b\xb8\x41\x73\x98\x7f\xb0\xa6\x9e\x0a\x52\x51\xf4\x01\xf1\x5c\x67\x95\xac\xd8\x81\xcd\xd4\xbe\x69\x87\xcb\x29\x13\x87\xb5\xd2\x74\xcc\xcb\xa7\x0f\x43\x4f\x1d\x00\x8b\x67\xce\x81\xd1\xf3\x4d\x32\x78\xd0\x8b\xef\xf7\xa2\xad\x9d\x52\xda\x2b\xd0\x96\xa4\xe1\x53\x0b\x54\xea\xc0\x66\xb7\xd8\x71\x9c\x55\x62\x85\xba\x7b\xe4\xa1\xf0\xe2\x43\x00\xa6\xed\xbe\x84\xf9\x04\x17\x3d\x9a\xe8\x90\xcb\x56\x9b\x58\x64\x7e\xc2\x0c\x8e\xcc\x7e\x57\x0e\x0b\xcf\xbf\x19\x6c\x6b\x3c\x62\x20\xcf\xad\x0a\xb7\x5c\x4d\xe4\xb9\x6b\x18\x7e\x4a\xc8\xc4\x05\x4c\xdd\x6c\x59\xed\x1a\x5e\x1e\x48\xc0\x2f\x9e\x01\xfd\x51\xad\xb6\x2c\x80\xa1\x05\x20\xfe\xc7\xec\x29\x04\xb1\xb0\x99\xf5\x31\xe2\x56\x12\x42\x32\x7d\x51\xa5\x9a\xd3\xb5\x1a\xec\x63\x33\xd3\xb3\xf3\xe4\x7f\x90\x5a\xcd\xb7\xdc\xa6\xd7\x82\x87\xef\x61\x05\x93\xff\x3c\x7e\x79\xe6\xd2\xe4\x1c\x17\x3b\x2c\xb3\xb5\x5a\xb3\xda\x6d\x11\x88\x5c\x6f\x78\x2d\x62\xfc\xdf\x7f\x56\x5f\xad\x20\x54\xe9\x91\xd6\x2a\x64\x72\xa5\x84\xe2\xb3\xfa\x49\xc9\xe6\x3d\xbd\xe8\x79\xb9\xb2\xdf\x5f\xf4\xbc\x4a\xf2\xa1\x9b\xff\xe1\xcc\x99\x33\x05\x1d\x72\x8e\xbd\x53\x6d\xd5\xb4\xda\xfc\x24\xee\x89\x63\x10\x5b\xdd\x42\x66\x83\xe8\xed\x28\x98\x6b\xb8\x68\x45\x7f\x78\x01\x63\x39\x39\x00\x19\x47\xf5\x27\xe4\xa6\x65\x87\xe0\x37\x97\x0c\x27\x72\x81\x0d\x42\xcb\x0f\x3b\xed\x31\x66\x8b\xb7\x6c\xb7\x63\x30\x1d\xbe\xe9\x45\x9b\xeb\x3c\x37\x40\xf1\x34\x81\x5f\x65\x1d\x4c\xed\x7b\x6c\x75\x82\x58\x34\xb8\x84\x3a\x1d\x7d\xdb\xd5\xf8\x44\x86\xb5\x4a\x8c\x19\x7e\x1c\x28\xaf\x92\x62\xb7\xa8\x07\x80\xd1\x74\x09\x3d\x42\x83\xd0\x5a\x70\xec\x60\x99\x58\xa4\xe1\xb9\x2e\x6d\xb0\x0a\x55\xf7\x14\x0c\x3c\x76\x48\x77\x3a\xe2\x27\x76\xb8\xf1\xf4\xde\x6d\x6d\xd5\x76\xab\xd3\x22\x56\x0b\x42\x55\xbc\x45\x71\xa1\x8a\x26\xb5\x0c\x53\x4c\xe2\x5e\x2c\x17\xaf\x26\x90\x4b\xe1\xec\x99\x9f\xfc\xf4\xf2\x18\x39\x7b\x71\x8c\x9c\x3d\x73\x51\xe7\x0e\xcb\x09\x56\x4c\x9d\x6a\xd9\x3e\xf8\x64\x43\xa6\x82\x70\x47\x18\xef\xdb\xe4\x16\xf6\xf6\x7e\xff\xe8\x00\x99\x18\xb2\xf5\xfe\x10\x8d\xab\x93\xda\x59\x66\x28\xf9\x34\xa0\x6e\x08\x99\x32\x1d\x17\x6e\xbf\x68\x93\xd7\xa1\x3d\x3a\xbc\xeb\x0e\x50\xb2\x8a\x6a\x67\xe1\xf2\x7a\x1f\x99\x09\x7a\xbc\x14\xd8\xfd\x77\x76\x06\x77\xd7\xa3\xbb\xf7\x8c\xd6\xfd\x5f\xa1\xd7\xc8\xe9\xf3\x74\xd1\xea\x38\xe1\xb9\xe4\xb7\xbf\xda\x58\x1a\xa5\x2b\x4f\xb3\xc7\xaf\x8f\xe0\xda\x58\xbe\xfe\x5e\x41\x07\x63\x34\x32\xeb\x60\xee\x12\x05\xf7\x72\xcb\x5a\x65\xe7\x3f\x61\x17\x41\x20\x37\xeb\x3b\x7f\x85\x62\x00\x81\x76\x2d\xda\xd9\x88\xb7\xbf\x87\xe3\x29\x1c\x03\x15\xdc\x7e\x66\x1e\xed\xe5\xf5\x87\x34\x4b\xe2\x0d\x4d\x80\xcc\x71\x95\x55\x3e\xed\x19\xed\x27\x3d\xa6\xe6\x6a\xef\x9f\x29\x58\x0b\x60\x89\x3d\x9d\xac\x96\xef\xc1\xda\x3f\x71\x69\x8a\xad\xbb\xb0\x08\x67\x1c\x40\xb8\x41\x8d\x11\x2f\x5c\xa6\x3e\x8f\x95\x26\x81\xdd\xa4\xe2\x1e\x38\x80\x5e\x60\x25\x74\x89\x1a\x13\x97\xa6\x30\x57\x62\xd8\x65\x74\x08\xce\xfb\x27\x0f\x12\xd3\x19\x37\x0d\x1e\xa7\x2b\xb6\x3c\xdc\x41\xe2\xc3\x0d\x75\x74\x46\xf7\x9f\x45\x5f\x1d\x11\x8c\xd0\x26\xf1\xd1\xd3\x54\x00\x06\x06\x13\xdf\x06\x1e\x8f\xd2\x27\x7b\x63\xbe\x89\xa9\x08\x46\x01\xf0\x15\xe0\x27\xff\xf0\xff\xb0\xf9\x24\xa6\x95\xf6\x92\x24\x13\x5f\x83\xb3\x71\xa8\xb0\xa6\xd6\x00\x33\x90\x4a\x5c\xf0\x33\x1b\xe5\x7e\x2f\x7e\xbe\x9e\x79\x3b\x5f\xb0\xbd\xe4\x5b\x21\xcd\xb9\x29\x83\x73\xb2\xe7\xd2\x34\x75\x68\xe8\x11\xcb\x85\xb1\xa1\xbb\xaa\xd8\xee\x0d\x1f\xa3\x70\x80\x2b\x1f\x30\xf5\x6b\xef\xed\x30\xdf\x6c\x72\xaf\xf6\x7c\x23\xde\x3d\xec\x7f\x77\xc4\x7d\xff\xf7\x34\x13\xd7\x40\x88\x65\xe2\x71\x61\xc5\xb4\x79\x92\x50\x4e\xe3\xaf\xb8\x32\xf9\x4f\xd7\x0d\x75\x6a\x0a\x5d\xbd\x2c\xa1\xa2\x74\x4c\x31\x9a\x92\x56\x4b\x9f\x5f\x65\x68\x1e\xb3\x9b\xbc\x45\x62\x11\x9f\x2e\xd9\x41\x48\xfd\xd4\x45\xbc\x6e\x04\xfd\xee\x65\xf4\x74\x37\x7d\xd7\x7e\x8c\x5a\xc8\xcd\x65\xea\xe3\x09\x3e\x89\x06\xe0\x37\x72\x76\x40\x1c\xaf\xc1\x56\xd3\xc2\x7b\x7f\xd5\x0b\x09\xb3\x1d\x8e\xbf\x70\xeb\x35\x8a\xbe\xa1\x07\xe1\x48\xdc\x53\x10\xdc\x20\xa7\x97\xa8\x4b\x7d\x58\xd8\xed\x45\xe2\xb5\xec\xd0\xb0\x2d\xeb\x05\x57\x8b\x16\xb9\x42\x6f\x92\x19\x0e\x87\xaf\xeb\x81\xbb\x1b\x70\x29\x7a\xb0\x1e\xbd\xda\x18\xec\x68\x5c\x7b\x4c\x90\x6b\x18\x24\x77\x37\xcc\x5d\xe2\xa5\x52\xa6\x48\x40\xc3\x3a\x26\x61\xad\xad\xd5\x2f\x79\x4b\xb6\x3b\x6f\xb7\x6f\xdd\x3a\x45\x78\x78\xda\xf8\xcc\x14\x7f\xc0\x4e\x52\x78\x97\x64\xb9\xb2\xbc\xce\x30\x64\x75\xc4\x8f\x1e\xb2\xd3\xc3\xe7\xfb\xf1\xee\xd1\xe0\xb3\x23\xd8\x2a\xc0\x7f\x12\x6d\xed\xe4\x31\x93\x64\x0b\x80\x3d\xc2\x9d\x32\x82\x78\x2a\xda\x7b\x16\x7d\x7d\x38\xa4\x2c\x8f\x56\x48\x29\x1c\xef\x76\x4f\x47\x5f\xbd\x7d\x4f\xba\xa2\x0a\x13\x40\xae\x78\x90\x86\x96\xdf\x37\xc2\x21\x18\x7a\x70\x9d\xa2\xf4\xc1\x3b\xee\x02\x2c\x90\x6e\xbb\x08\xf3\x1b\xad\x89\x6d\x70\x51\x05\x64\xd1\xeb\xb8\xc0\x22\x06\x71\x88\xe8\xd0\x34\xb8\x45\xf9\x1b\xc2\x8a\xd9\x7e\xa9\xe4\xc2\x67\x32\xde\x75\x19\x2a\x58\x3d\xaf\x59\x6b\x08\xbf\xac\x28\x51\x24\xa5\x8b\x34\x75\x43\xb6\x67\x1a\x22\x48\x7e\x03\x83\xf4\x24\x12\xc8\xa8\xb5\x3c\x2a\x57\xd3\x1d\x63\x10\x03\x72\x93\x02\xc1\x56\x53\xeb\xbd\x84\xf0\xc1\xf8\xce\xfe\x60\xfb\xcf\xb0\x26\x9a\xc5\x8a\x3b\x60\xa3\xc6\x09\x18\x4f\x15\x8d\x9b\x5e\xbb\xed\x50\x9f\x38\xde\xd2\x92\x4f\x97\x20\xae\x4f\xce\x18\xa8\xaf\x4e\x26\x30\x1d\xdb\xa7\xa1\x6f\xd3\x15\xca\xde\x0d\x74\x2b\x05\xa6\x88\xa5\x29\x7c\x2e\x29\xb2\x33\x33\x82\x13\x20\x69\xd5\x83\xbb\x9a\x7c\xc2\x59\x7d\x20\xb2\x7c\x05\x7c\xc3\xbb\x87\xd1\xab\x67\x62\xb6\x9a\x3b\x03\x49\x91\xe4\x66\x57\x27\x79\x9f\x54\xd7\x72\x79\x77\x05\x15\xf1\xed\x2f\x7f\x59\xc8\xfb\xfc\x05\x26\xef\x15\x0f\x90\x82\x20\xac\x15\x42\x1f\x84\x97\x7c\x0c\x48\xc7\xd8\x84\xe6\xfc\x4e\x43\x8b\x7b\xaa\x5c\x41\xd4\x40\x12\xad\x07\xf1\x03\x00\x84\xc4\x29\x6c\x0f\xb3\xe0\x17\xf2\x0d\x2c\xcc\x06\x9c\x61\x7d\x4f\xb4\x1b\x69\x99\x63\x8d\xf0\x7c\x7d\xdb\x2f\x20\x8d\x6d\x52\x4b\xb5\x86\x26\xd9\x89\xf9\x8d\xcd\xaf\x63\xe4\x96\x9c\x7c\x03\xfe\x1a\x2a\xeb\xc7\x9b\xf6\x22\xb0\xac\xf2\xe2\xf9\x3b\x1e\x52\x05\x5b\x97\x54\xa2\xfc\x7a\x9a\x8a\x68\x31\x2f\xd8\x99\xb8\x96\x11\xea\x29\x55\x01\x37\x3b\xca\x4b\xe6\xb1\x30\xd4\x5d\x21\x2b\x96\x6f\x5b\x0b\xcc\xb8\x00\xcf\x19\x84\x91\x07\x54\x7b\x07\x8d\xa1\x31\x83\xc7\x3b\xfd\x57\xdf\x13\xcc\xa9\xc8\xb5\x91\x4a\xd4\x9e\x0d\x81\x29\xac\x35\x15\xbc\x02\x03\xaa\x42\xad\x25\x03\x5a\xd3\xd1\x3d\xe6\x6e\xcc\x04\x94\x98\x07\xda\x70\x58\x49\xb5\x6f\x26\x2a\xbb\x41\x57\x91\xb4\x37\x7b\x3f\xbc\xb6\x56\x9f\xc3\x67\x22\x01\xce\xb8\x89\x6a\x0e\xf5\x3a\x29\x99\x3b\xd8\x3b\xcf\x4a\xec\xb5\xaa\xca\x89\xdc\x5f\x52\x9e\xf3\xc2\xad\xd9\x1f\x43\x63\xf2\xd4\x4b\x16\x9c\xca\xdf\x28\x09\xa4\x2c\x37\x24\x64\x78\x64\xb5\x05\x82\x57\x57\xb2\x96\x8a\xc3\xed\xe4\x77\xe1\x77\xbf\xef\x56\x33\x9b\xf0\xf5\xf2\xfb\x98\xce\x48\xe2\xcf\xdf\xe5\x3e\xc6\x43\x93\xad\x20\xb0\x97\x5c\xfd\x71\x29\xd1\x30\x6b\x9b\x16\x7d\xe9\x82\x31\x24\x9b\x58\x61\x00\xf1\x48\xc6\x11\xf6\x18\xf5\xe6\xf2\x58\x3b\x4d\x12\x4d\xa9\xae\xfd\x65\xab\x3e\xde\x76\x03\x81\xfa\x49\x38\xcf\x28\x5b\x2d\x8f\xa5\x17\x41\x3c\xc7\xea\x0a\x08\x2e\x12\xa1\x7c\x23\x28\xa3\x44\x14\x6d\x43\xec\xef\x71\x94\xc1\x7c\xca\x14\x1e\xca\x08\x98\x0d\x57\xbc\x04\xce\xc8\x38\x7c\xe5\x5b\xd5\x97\xf4\x10\x4e\xcd\xc0\xdc\x9e\x38\x96\x26\x2e\x80\x27\x2b\xbd\xaa\x38\xde\x12\x7b\xc9\x1c\x1e\xb7\x7b\xa4\x3d\x2f\x8a\x17\x32\xeb\x46\xb6\xaa\x51\x96\x8f\x10\x60\x15\x3d\x3f\xa4\x4d\x02\xac\xf3\xc0\x34\x5d\xb1\xaf\x43\x40\x16\xb4\xf1\x8e\x29\xb4\x6e\x50\x12\x78\x2d\xbc\x7a\xd2\x8d\x99\x83\xa3\xfe\xeb\xbd\x73\x44\x84\x46\x3d\xba\x17\x3f\x82\x13\x58\x74\xff\x19\xf8\x81\xe5\xed\x50\xff\xe5\x51\xf4\xc7\xc3\xb2\x57\x43\x57\xe4\x05\xa0\xbc\x12\x31\xf8\x8f\x92\xe0\x0c\xdd\xc5\xe2\xf4\x2f\x75\xc7\xfd\xc7\xdb\xda\x78\xcd\xe9\x99\xf9\xa9\xe9\x2b\x7a\xc2\xf7\x9d\x6f\xe2\x7b\xba\x80\xca\xe9\xd9\x8b\x64\xfc\xfc\xe5\xa9\x2b\xc6\x43\x09\x4f\x4d\x2d\x10\xa1\x55\x40\x95\x61\xd2\xe3\xea\xf9\xa9\xf9\xe9\xd9\x02\x29\x07\x5b\x6c\xb8\x3d\xd9\xd2\xcb\xb9\x3c\x7e\x65\xfc\xe2\x64\x91\x1c\xd0\xc6\x24\x47\x4b\xd2\x0f\x02\xf4\xc5\xcc\xdd\xa0\x6b\x3f\xa4\xca\x93\x53\xb5\x9a\xd5\x6e\x43\x94\x53\xa0\xb3\x66\x8a\x04\xb8\x9e\x8c\xc2\x3a\xa5\x60\x1b\x76\x02\x71\x17\xcd\x91\x4f\x25\x9b\xb6\x82\xe0\x14\x2e\x53\x72\x0a\x0f\x7b\xa7\x88\x15\x86\xbe\xbd\xa0\x0f\xe2\x2b\x52\xa4\x6d\x85\xcb\xa3\x36\x82\xf5\xc0\xa8\x65\x95\xe0\xbb\x91\x45\xf0\xeb\x7a\x0c\x45\x3b\xde\xf7\xe0\x22\x8e\xd1\x19\x78\xca\xaf\x81\xc5\x30\xa2\x0c\x6b\xc4\x72\xa3\xd6\xe7\x57\x2c\x57\x90\x4e\xa6\x2d\xc5\x13\xf4\x5b\xd4\x0d\xab\x5d\xa9\xb1\xb2\x98\xb9\x88\xa3\x3f\x50\xf3\x9d\x94\x48\x87\x02\x93\x3c\x3f\x7a\x81\x47\x65\x14\xa8\xbe\xb6\x56\x9f\xf6\x97\xf8\x01\xd4\x72\x7c\x6a\x35\x57\x11\x0e\x4c\xb7\x89\xa4\x4a\x28\xce\xac\xdd\xc3\xe8\xdf\x8f\x30\xc2\x47\x63\x3e\x0c\xd5\x97\xc6\x1f\x83\x5c\x6b\xfc\x1b\xf3\x6b\xec\x05\x47\x37\xed\x75\x4a\x3c\xfa\xb4\xff\xf2\x20\xba\xb3\x83\x9b\xac\x4c\x08\x93\xf9\x37\x2a\x21\xfe\x88\x6a\x1a\xb0\x49\x35\x2a\x15\x6d\xe0\xd3\xfe\xd2\x68\xeb\x75\x71\x3a\x66\xc1\xe7\x97\xc5\x53\x17\x84\xac\xa9\x78\x0f\x52\x71\x34\xdb\x4b\x36\x00\x1f\x93\x96\xd5\x6e\x23\x18\x1f\xe4\x70\x58\x0d\xc4\xdb\x02\xc0\x3e\x9e\x20\x02\xf7\x8f\x9f\x84\xd4\x77\x2d\x87\xd8\x4d\xea\x86\xec\x40\xc2\x6d\x60\x5d\xc8\x86\xa6\xe2\x15\xea\xfb\x76\x93\x4a\x54\xc0\x26\x06\x36\x71\xbc\x41\xd2\xb4\x7d\xda\x30\x04\x11\x24\x48\x7b\x18\xae\xc4\x41\xff\x52\xb8\xd8\xd1\xd3\x1e\x9c\x67\x5f\x69\xd2\x9e\xb4\x3a\x48\x84\x83\xd1\x54\x49\x25\x34\x1d\x47\x2f\x9f\x42\xb8\x14\x33\x13\x43\x04\x1a\x57\xe2\x05\xc5\x9a\x43\xdd\x15\xdb\xf7\x5c\xb8\x8b\xb4\x16\x43\xea\x93\x86\xd7\x5e\xad\xf1\x8c\xd3\x86\xd7\x6a\x3b\x54\x1f\x73\xab\xbe\x1b\x3f\xee\x46\x7f\xd8\x24\x83\x2f\xa5\x1b\x00\x4f\x48\xf2\xee\x35\x37\x97\xf0\xfe\xb3\xf8\x7e\x8f\x07\x5e\x19\x9b\x65\xc8\x47\xc1\x2e\xd4\x14\x9b\xbc\x72\x7e\xea\xca\xc5\x4a\xa3\x6b\x66\x7a\x76\x5e\x67\x10\x1b\xa0\x7c\x66\xa6\xe7\xa6\x98\x49\x5c\xad\x2e\xcb\x6e\xa6\x53\x46\x74\xf3\xba\xb7\xc7\xba\x37\x1b\xa0\xa4\x93\xea\x5b\x2d\x1a\x52\x3f\x20\x56\x00\x68\x5c\x15\x95\x0a\x02\x44\x22\x4a\xc9\x00\x54\x5b\x08\x2f\x24\x96\xea\x41\x97\x03\x48\x9c\xa8\xd1\xcb\xa0\xdb\xc3\x14\x30\x22\x36\xec\x99\x64\x11\x66\x05\xc9\x72\xec\x44\xf7\x68\x9f\xe4\x39\xda\xa5\x5b\x1a\xc2\x11\x47\x57\x5e\x71\xcd\xbc\x23\xe5\xb5\x1e\x9c\xb2\x4d\x30\x04\xdd\x14\x07\xdc\x08\x01\x64\x85\xfa\x32\xb3\x31\xd9\xd5\x5a\x56\xd8\x58\x2e\x21\x1c\x32\xc5\xfe\xb8\x8b\x9b\xfd\x5b\x08\x68\x2a\x74\x6e\xcc\x60\xe2\x85\x5f\x35\x1b\x47\x45\x4b\x32\xcd\x67\x21\x9e\x2d\x69\x3f\x40\x15\x26\xe9\xa3\x49\x06\x6b\xc7\x71\xbc\x9b\xe0\x53\x49\x32\x7f\xca\x41\x90\xa5\x93\xa2\xd2\x45\xf8\x4a\x8b\x1a\x40\xcc\xc8\xa3\x0d\x88\x39\x2d\xf7\xd1\x38\x1c\x92\x3e\xeb\x24\xfb\x96\x5e\x54\x88\x21\x3b\x72\xef\x03\x68\x17\x66\x0a\xfc\xab\x8d\x81\x3c\x62\x53\x62\x66\x30\x04\x3f\x24\x9b\x54\xe1\x8e\x09\xa0\x43\xca\x86\x28\xaf\xb5\xb3\xcf\xe3\xbf\xbc\x18\xdc\xdb\x8a\x8f\xf6\xd8\x4e\xc3\x6a\x96\x01\x1b\xa5\x3f\x16\xdb\xd6\xd5\x46\x08\xfd\x75\x93\x27\x47\x2d\xa5\x62\x89\xf1\x6b\xae\x51\x74\x10\x2c\x5b\x4d\x80\xb4\x5b\xc8\x71\xe2\xfa\x1d\x47\xbb\x31\x9b\x2b\x10\x67\xf0\x82\xc4\xbe\x52\xfa\xc2\x01\x1f\x01\x9d\x16\x38\x77\x03\x9e\xf7\x45\xe2\x9b\x4a\x0d\x1a\x7a\x3c\xf0\x64\x35\x99\x5c\xec\xe1\x82\xad\x75\x5d\xbe\xeb\xaa\x3b\xee\x31\x2a\x0f\x3d\x6e\xc8\x72\xa9\x15\x17\x24\xb8\x90\xba\xbf\x1b\xbd\xee\xf2\x18\xf3\xe8\x37\x07\x82\xed\x64\x0b\x1e\x18\xbb\x9f\xfa\x8b\x9e\xdf\x62\xdb\x99\xcd\xcc\x34\xc2\x39\x1f\x98\x25\x1a\x52\xbf\x65\xbb\x94\xdc\x5c\xa6\x10\x2b\x6f\xf1\x06\x73\x5c\x17\x47\x9c\xf8\xd8\x98\x76\x3d\xdd\x40\x88\xee\xbf\x88\x37\x7a\xb0\x0b\xdc\xd9\x07\x65\x37\x76\x00\x25\x07\xf6\x38\xd9\x0c\x58\x6a\x38\x0a\x0c\x9c\x41\x61\xb9\x79\xb4\x1f\x7d\xbb\x4e\x06\x9b\x5b\xd1\x6b\x4d\x5c\xe7\x8c\x63\xb9\xd9\x13\xa1\x58\x77\x93\xeb\x48\x7e\xbe\xe2\x36\x92\xfe\x28\x96\x7e\x5d\xda\x49\xe0\xaa\x97\x09\xb3\xa6\x53\x20\xa8\x93\x08\x62\x7f\x72\x61\x89\x3b\xab\xc0\xc9\x3e\x5c\x54\x54\x5d\xfa\xe2\x48\xaf\xc5\x32\x70\xd5\xe4\x44\xc3\xb3\x19\x8d\xa1\xf2\x23\x68\xc6\x16\xc3\xa1\x30\x76\x38\x34\x6b\x89\xb7\x8a\xd4\x3f\x97\xab\xbf\x29\xa2\xac\xa7\x29\xa2\xad\x22\x50\x1c\x06\x64\x61\x95\x58\xcc\xe2\x0b\xed\x46\xc7\xb1\xfc\x52\xa0\x45\x9f\xbd\x89\xf7\xb6\x13\x7f\x01\x9e\x50\xb2\x2e\x03\x74\xa8\x18\x0d\x6d\xc4\xae\x6f\x2c\x7b\x5e\x40\x09\xb5\x71\xb2\xb1\xdd\x9d\xcd\xac\xa6\x1d\xc0\xbf\xeb\xe4\x17\x1e\xb3\x29\x20\xf2\xce\xf2\x29\x52\x0e\xb1\x29\x1a\x86\xb8\x8a\x2c\xb0\x63\x64\xc0\xd7\x33\x08\x46\x07\x4a\x28\xbc\xf4\xd0\x06\xe3\xc1\xf6\x2e\x61\xcf\xf0\xaf\x78\x7b\x83\x0c\xb6\x5f\xc0\x50\x03\x28\xc7\xd4\x05\x09\xe0\x4d\xa4\x01\x28\xfe\xf4\x02\x30\x28\x3e\x7f\x1c\xef\xbe\x45\x98\xa6\x7b\xd1\xde\x1b\xd1\x27\xdc\xa8\xdd\x1b\x26\x86\x32\x76\x08\xde\x05\x11\x6b\xc9\xd2\x02\x43\xf0\xa3\x9f\x7a\xed\x53\x74\x91\x93\x61\x0a\xc0\xa0\x7d\xab\x91\x4a\xac\x57\x3f\x7e\xd6\xc7\xfc\x0e\xfc\x6c\x24\xba\x73\x18\x7d\xbb\x8e\xe0\xa5\xf2\x8e\xb8\x2c\x7c\x3f\xe2\x9c\x10\x43\x02\x45\x1a\xe1\xcb\x10\x24\xcf\x45\xd9\x88\xa1\xc2\x9b\xcf\xd6\x07\xc7\xd1\x5e\x97\xe7\x92\xe9\x7c\xf7\x22\xfe\x74\x33\xda\xd2\xf0\x66\xf0\x6a\x20\xe7\x55\x72\xf3\xe4\x7a\xcd\xca\x37\x28\x2b\x48\xb2\xaf\x99\x17\x1a\xbd\x22\x76\x20\x1d\x9b\xa1\x75\x83\x6a\x17\x81\x2a\xaa\x70\x67\x27\xdf\x9c\xcd\xbd\xe3\xd3\xb6\x07\x9a\x35\xc9\xb5\xbf\x4b\x81\x73\x5c\xfb\xbb\x8c\xcb\x75\x8c\xb4\x71\x50\x77\x02\x2a\xb2\x97\x90\x1d\xce\x98\x51\xc3\xc6\xe1\x90\x68\xd6\x8c\x7c\x44\x38\x58\xb5\x13\x77\xad\x72\xe9\xca\xd3\x9e\xb8\xd0\x6e\xf9\x4b\x55\xd9\xd4\x7f\xe9\xd0\x80\xad\x62\x7c\x7b\x62\x96\x98\xbf\xaa\x60\x75\xb0\x1d\x7d\xd5\xeb\xf8\x64\x7a\x4e\xcf\x33\xf2\xc5\xc3\xf8\xd5\x9f\x87\x12\x69\x24\x26\x47\xfc\x64\x8b\xed\xe3\xd3\x73\x3a\xd0\xcc\x9f\xc4\xcf\xbb\xc3\x81\x29\x46\xcd\xb3\x83\x26\x85\x7a\xd1\x71\x6d\x01\x46\x54\xc8\x4c\xa5\xec\xa7\xa9\x14\x20\x3e\x9f\xf6\x7a\xfd\x97\x07\x59\x12\x91\x4a\x9a\xad\xac\xad\xd5\x3f\xa4\x7e\x00\xa8\xd6\x69\x3d\x8f\xa5\x65\x5a\x70\x32\xd4\x39\xb6\x52\x29\x8d\x05\x8a\x36\x5b\x5e\x2b\x01\x7a\x28\xa7\x30\xa3\x53\x8d\x55\x90\x39\x32\x27\x56\x76\xb9\x33\x73\x06\xf6\x23\xf7\xd0\x8c\x3a\x54\x3b\x34\x33\xd5\x72\x8f\x01\x95\x3a\xa2\xf8\x10\x60\xec\x1f\xdf\x76\x43\x48\x8f\xe2\x33\x91\x34\x6d\x6b\xc9\xf5\x82\xd0\x6e\x80\x65\x18\x84\x4d\x3d\xa0\x12\xe4\xfb\xc0\xdc\x23\xf1\xf3\x2e\x33\xf7\x77\xbb\xbc\x04\x4c\xbe\xdd\xa3\xf8\x7f\xea\xf6\x1b\xa8\xd8\xeb\x84\xc4\x22\x0e\xdc\xe5\x2c\xf2\x14\x1d\xb6\xef\x67\x8e\xfe\x99\x93\xbe\x25\x21\xb7\xe4\x59\x97\xdf\x0e\x67\xa0\x99\xcf\x4f\x8e\x93\x05\xab\x71\x83\x6a\x8d\x6e\xf6\x46\x74\xf0\x12\x33\x2e\xc4\xea\xc0\xd1\xeb\x9e\x3d\x80\x45\x70\xfb\x25\x9c\x01\xd0\xe2\x13\x30\x9d\xc2\x35\x20\xac\xa7\x0c\x23\xa6\xb4\xfd\xe4\xc1\x3d\xfa\xd3\xd7\xd1\xd3\x5d\x58\x22\x0b\x7b\x85\xa9\xbe\x82\xf3\x4a\x67\x60\xbc\xea\x02\x5d\xb1\x51\x94\xb7\xe0\xd0\x16\xf1\x69\xcb\x5b\x61\x7d\xd2\xf4\x6e\xba\x08\xfa\x2c\x16\x59\x66\xf2\xd0\x96\xe2\x31\xd1\x2f\xb0\x4f\xba\x60\x6c\x0d\xf3\x7e\x32\x33\xec\x8b\xc3\xe8\x69\x8f\xe3\x98\xb2\x95\x94\x2f\x5a\xd0\x83\x6c\x9a\xee\x1f\xc5\x7b\x3d\x12\x1d\xf4\xe2\xbb\xbb\x3a\xc6\xa7\x19\xdf\x03\x84\x3c\x3c\x79\x42\xa6\xe2\xc2\x2a\x09\xec\x25\xd7\x72\xd0\xba\x87\x7f\xde\xba\x55\x27\x93\x9f\xd8\x32\x43\x1d\x78\x16\xed\x70\xc2\x6b\x1a\xb3\x5d\x44\x61\x12\xdf\xdf\x1b\xec\x1c\x01\x4b\xf7\xc3\x6e\xf4\xb4\x87\x16\x3b\xec\x6f\xff\x76\x2f\xfa\xc3\xe6\x30\x5b\x93\x78\xdc\x7f\xbd\x07\x8d\xdd\xdd\x04\xe4\x24\x68\x4c\x42\x84\x91\x51\x44\xd7\x44\x00\xac\xcf\xc3\xc0\x4f\x12\xd3\x12\xfa\x0a\x04\x92\x43\x94\x79\xbc\xe7\x24\x8e\xe7\x2e\x51\x3f\x89\x46\x92\xec\x57\xf0\x95\x29\xb1\x11\xe6\x3d\x64\x3b\x28\xb3\x9d\x8b\xa8\x5d\x15\x84\xaf\xac\x42\x6c\xc0\x77\xf3\xd2\xd2\x94\xbe\xd9\x3d\xe4\xd0\xf4\x48\xe6\xf4\x50\xc2\xd0\x3d\x5f\x8f\xbf\xdc\x52\xd6\xc0\xa4\x8c\x22\x16\x06\x09\x2c\xe0\x5f\x76\x95\x9b\x9c\xe8\xf3\x6e\x19\xfb\xc1\x7c\xef\x87\x26\xb4\x36\x50\x66\xa6\xe3\xf3\xb8\x46\x3c\x0c\x2b\xa4\x27\xd8\x7e\x23\xa3\x64\xfa\x55\xf5\xa4\xbb\x73\xbb\xff\xcd\xbe\x32\xfc\xb5\x20\x6e\x39\x0a\xa4\x1c\x10\xc6\xfa\x35\xae\x8a\x4a\xd5\x03\x20\x8d\xa0\x8e\xf7\x7c\x02\x64\x72\x22\x8f\x0b\x32\xe1\xd1\xc2\xe4\x88\x9f\xa6\xd4\xdb\xed\x97\x72\x15\x04\xf6\xb8\xc1\xe3\x87\x99\xec\xad\x2e\x1b\x26\xf1\x53\x09\x3a\x34\x78\x70\x14\xdf\xd7\x1d\x89\x51\xb5\xc0\x76\x97\x1c\x74\xe8\x9e\x86\x99\xce\x09\x8c\x71\xc7\x10\x93\x44\x8b\x47\xc0\xb6\xa2\xb7\x98\xb0\x09\x75\x9d\x96\x68\x63\xdc\xf6\x13\x4e\x5f\xfc\x8b\x9f\x7a\x35\x08\x05\xd5\x54\xca\x60\x65\x01\x8f\xb3\x84\xde\xfa\xa8\xb6\x40\x7e\x71\x75\xea\xd2\xf9\x99\xf1\x89\x5f\x5e\x17\xc0\x5e\x0d\x32\x31\x7d\xf9\xf2\xf8\x95\xf3\xec\x0f\xe1\x72\x64\xff\x5e\x24\x29\x40\x3d\x00\x01\x6b\x7a\x8d\x1b\xd4\xaf\xd9\x2d\x6b\x89\x92\xf3\xd3\x13\xbf\x9c\x9c\xbd\x3e\x75\x79\xfc\xe2\xe4\xc7\x58\xf1\x47\x35\x9b\xa4\x92\xf1\x59\xa9\x1b\xe4\xfc\xd4\xdc\x2f\xd9\xbf\x5a\x04\x91\xf6\x3e\x1e\x82\x19\x63\x4f\xda\x44\xd4\x13\x90\xb9\xf9\xf1\x09\x28\x12\x92\xf9\xa9\xcb\x93\xd3\x57\xe1\x8d\x0e\xf9\x60\x72\xfc\xd2\xfc\x07\xd7\x27\x3e\x98\x9c\xf8\xe5\xf5\xf9\x5f\xcd\x20\x36\x59\x12\x30\x44\x66\xa7\xaf\xce\x4f\x5e\x17\x38\x65\xa0\x92\x1a\xdf\xf5\x31\xff\x5b\xf4\x98\xf8\x1b\x24\x88\x3f\xe0\xee\x19\x05\x63\x60\x14\xfe\x2a\x71\xcf\xe0\x9b\xb4\x3a\x4e\x68\xb7\xf1\x9b\x04\x59\x7e\x6b\xfe\x1d\x1a\x8b\xf8\x09\x86\x3b\xb3\x9a\xd3\xb6\xb0\xbe\x82\xa5\x16\xec\x34\x79\x3a\x7a\xb4\x0f\x1e\xce\xff\x6f\x1f\x68\xbd\x76\x77\x94\xa1\x9a\x5f\xff\x7f\xbd\x3a\x3d\x3f\xae\x3b\x88\x0a\xa4\x64\x4d\xd1\x8e\x17\x5a\xe4\x3c\x5d\xb4\x5d\x1b\xce\xf5\x6b\x6b\x75\x78\x56\x25\x88\x27\x41\x63\xe6\xf1\xcb\x69\x21\x43\x07\x5d\x43\x54\x0f\xea\xc3\xd6\x18\x88\xc6\x47\xbc\x32\xca\x16\x23\x67\x55\xe2\xcf\x78\xfe\x12\x39\x4d\x3f\x11\x20\x59\x10\x38\xeb\x61\x9c\x96\x4f\x83\x8e\x13\xa2\xa1\x08\x12\x90\xe0\x7c\x51\x46\x50\x00\xdc\xb4\x16\xa1\xe6\xee\x06\x5c\xb7\x26\x50\x83\x49\xd0\x0f\xcf\x3b\xd8\x4b\xb0\xa7\x4f\xc3\x51\x0c\x62\x51\xf9\x9e\x15\x3f\x86\x08\xe3\xaf\x0f\x65\xc0\x85\x78\x57\xcd\x1b\xd0\x2d\x25\xa5\xda\x6e\x4a\x42\x1d\x56\x5f\xe2\xa4\xe7\xa8\x6f\x52\x22\x33\x0a\x4a\x79\x5f\x32\x65\xd2\x4d\x37\x78\x5b\x66\x27\xff\xeb\xd5\xc9\xb9\x79\x6d\xd0\x12\x9c\x21\x34\x41\x4b\xb3\x93\x73\x93\xb3\x1f\x4e\x9e\xbf\xce\x97\x95\xe9\xd9\xf9\x6a\xf8\x22\xb3\x93\x73\x33\xd3\x57\xe6\x0c\x58\x28\x0f\xa2\xfb\xdf\xe8\x6a\x9f\x06\xf8\x43\x6d\xb8\x14\xb0\x02\x9f\xd3\xd1\xd9\x80\xca\x3a\x6d\xe5\x11\xce\x54\x56\x0b\x3d\x2b\x0a\x6b\xf5\x16\x6b\x70\xb5\xbe\xba\x7a\xe5\x4a\xd5\x78\x97\x59\x6a\x35\x6b\x00\x54\xca\x51\xae\x43\xcc\x86\xb5\xdd\x45\x0f\xcc\x51\x9f\x22\xe5\xba\x39\xe6\x8c\x2d\x2c\xd1\xeb\x43\x4e\x1d\x74\xd8\x7f\xbd\x17\x77\x7b\x2a\x35\xd6\xee\xf7\x00\xc1\xb7\xd7\xc5\x1d\x9b\x7b\xdb\xb5\x5d\x4f\x2d\xc7\x59\x25\x4d\xea\xd0\x90\x12\xcf\x6f\x2f\x5b\x2e\x6d\xf2\x9c\xd0\x9f\x57\x6d\xa0\x41\x14\xda\xce\xad\xb6\x9e\x93\x8f\x35\x65\xbb\x0b\xe0\x8a\xa9\x53\xfb\x9d\x3f\x03\xca\xd3\x4e\x7c\xbf\xd7\x7f\xb5\x87\x46\x72\xff\xcd\x66\x4a\x62\x09\x85\xf8\x7d\xd7\x65\xaf\x49\x1d\x24\xbe\x94\x7f\x8a\x15\xde\x6d\x12\xba\x42\xfd\xd5\x70\x19\xec\xb9\x20\xf0\x1a\x76\x02\xf3\x65\x87\xba\xfe\x30\x8a\xed\xbf\x7e\x7b\x3a\x7e\x8c\x6b\x7e\xfc\x78\x9d\xc4\x8f\x0e\xfa\x87\x29\x7a\x89\xed\x3f\x47\x7f\x42\x74\x08\x5d\x53\x4f\xa4\x7d\x23\x69\xaf\xe4\x81\x8c\xa2\x1b\xbf\x31\xcb\xc9\x90\x4c\x91\xc8\x21\xd4\x54\x9b\x5f\xca\x4d\x3b\xcd\xe1\x8b\xb4\x10\xb2\x70\xae\xd0\x9b\x43\x3f\xfd\xfc\x5a\xe7\xcc\x99\xbf\x2f\xbe\x95\xcb\xad\x59\xb6\x4f\x57\x6f\x0a\xbf\x4a\xa3\xc1\xe9\xb8\xf7\xf6\x3d\x88\x18\xcc\xb9\xe3\x1b\xea\x30\xae\xae\xa9\xdb\xda\x1d\x7f\x69\x18\x91\x6b\xf8\xfc\x85\xfd\x36\xe1\x78\x9d\x26\xb9\xc0\x8e\xc6\xfe\xaa\xee\x2b\xeb\x53\x57\xb3\x39\xab\xbc\x43\x52\x52\x25\x3b\xb1\x72\x74\xaa\x3a\x16\xd2\x8d\x12\xb9\xab\xc3\x77\xd0\x23\xb5\x49\x12\x7f\x64\xc5\xbd\x93\xf6\x34\xa8\xbd\x02\x5e\xd2\x84\x29\xbe\x41\xfd\x10\x83\xc0\x38\xc9\xb8\x4e\xe7\x8d\x9d\xf8\xfe\x9e\x8e\xc4\x30\x45\x0b\x3f\xc4\xe8\xa9\x71\x0a\xcd\x52\x1e\x72\xc7\x63\x7b\x4e\x05\x84\x7e\x42\x1b\x9d\x10\x6e\x06\x2c\xa6\x97\xd5\x08\x49\x27\x10\x37\x74\x8e\x15\xb2\x33\x1e\x33\xf8\x69\x53\x81\xfd\x01\xa7\x48\xf2\xbb\x1a\xb7\x77\x5a\xe6\xf1\x8d\x25\xf9\xe8\x36\xf0\xe1\x05\x63\x09\x14\xce\x18\x52\x0e\x8d\x11\x1a\x36\xea\xd5\x90\xb3\x66\x69\xa3\xe3\x07\xf6\x0a\x75\x56\x85\x9f\x26\xe1\x0e\x41\x56\x3e\xdb\x69\x72\xea\xf1\x20\x67\x94\x00\x87\xea\x82\x15\x50\x79\xdc\x6c\x59\x00\x01\xcf\x7d\xb6\x78\x60\xcf\x64\xd3\x17\x8e\xac\x04\x1d\x9c\xd9\x8e\x60\x81\x25\xf1\x79\xfd\xd7\x7b\x19\x1d\x24\x1d\x6b\xf4\x6a\x4f\x12\xd5\xc0\x50\x93\xa1\x12\x8f\xd7\x09\x93\xd0\xeb\x0e\x31\x96\xc7\x4f\xf6\xfb\xdf\xad\xc7\x7b\xb7\x65\xb0\x23\x1b\x97\x23\x74\x57\x02\xe6\xfe\xb7\xd3\x6f\x69\xd0\xd3\x93\xea\x44\xde\x71\x59\x76\x28\x5d\x54\x9c\x86\x0a\xaa\x54\x1d\x9c\x67\xc8\x73\xf8\x02\x81\x21\xfb\x45\x89\xb0\xf1\xa3\xad\xfe\xab\x4d\xbe\x58\xc5\x8f\xfe\x4c\xd0\x96\x2e\x57\x65\xc7\xe7\x5c\x70\xbc\x46\x13\x6b\x08\x3a\x9d\x58\x45\x57\x67\x2f\xa9\x70\xa3\x25\x2a\x02\xae\x43\x05\x1f\x0d\x43\x00\x6c\x57\xcb\x2c\x84\x96\x0f\x2b\x33\x84\xe2\xa4\x26\xb7\x97\xaa\xdc\x4d\xe5\x19\x6b\x73\x2c\xd5\xe8\xe0\x72\x62\x99\x75\x7e\x8c\xcf\xc5\xcd\xf5\x92\x9f\x2b\x9b\xc3\xce\x36\xb2\x0f\x2d\x5f\xdd\x13\xb3\xb0\x55\xec\x68\xef\x65\x93\x6a\xde\xe7\xe3\x8c\xed\x83\xec\x1f\xc2\xb6\x0d\xd8\x93\x09\x0c\x4c\xbb\x1a\x50\xbf\xc0\x79\x9a\x7a\x53\xda\x37\x39\xb9\x38\xef\x67\x2a\x12\xf1\x19\x3b\x69\x55\x93\xd1\x95\xfe\x12\xa9\x56\x96\x70\xc9\xca\xbe\x82\x0f\xa3\xe4\x65\xb3\x0e\x82\x14\x98\xb5\xb5\x3a\x82\x3c\xa0\xee\x4a\x27\xe1\xe3\x69\x7f\x29\xdd\x4d\xf8\x18\xda\x70\x92\x1d\xa5\xd6\x96\x74\x55\xba\xb2\x54\x67\xa5\xb4\xce\x19\x50\x49\x63\x53\x63\xea\x07\xe9\xae\x77\xd8\x2b\x3f\x4c\xeb\xf9\x35\xf6\xd5\xd9\x4b\x27\x37\x9b\x98\xb2\x6e\xf1\x3d\x44\xf2\xda\x89\xce\x23\xd9\x9a\xec\x52\x3d\x4a\x97\x98\x1b\x30\x4a\x35\xe0\x2f\xb7\x12\xcb\x50\x9b\x08\x21\x89\x04\x30\x34\x28\x3a\x78\xd8\xff\xdf\x47\xfd\x23\xed\x5a\xc9\x05\x8f\x6a\x8e\x8c\x5a\xcf\x48\xec\x75\x95\x2b\x33\xb9\x34\xf9\xf6\x5f\x49\x62\xc1\x86\x5f\x59\x5a\x11\x35\x64\x15\x81\xfc\xce\x2c\x3d\xbe\xe5\x31\xff\xc7\x3c\x29\xe5\x04\x4c\xcf\x4b\x0e\x11\x89\x21\x5e\x6a\x2b\x12\xff\x00\x74\x0b\xdc\xa8\x15\x4d\x1e\xd6\x3b\x09\x41\x07\x7a\x27\x7e\x21\xfe\xce\x76\x56\xe6\x07\x63\xcb\x73\xe4\x28\x10\xa5\xc3\x4d\xc8\xbc\x3c\x6a\x5b\x86\xbe\x62\xf6\x4b\xbf\x83\xcf\x77\xf2\x5f\x24\xbd\xea\xf0\xcf\x52\xb2\x41\x95\x5a\x93\xb7\x72\xa9\xb5\x95\x6e\x5a\xf1\x1c\xd4\x5d\xae\x0f\xb9\xdc\x7e\xfc\x56\xa7\x9c\x98\x86\x34\x85\x6c\xaf\xa5\x5e\x1d\x79\x5c\x88\xd6\x4f\x3b\x4d\x55\xaf\xa4\x0b\x95\x87\x79\x1d\xf8\xce\x7a\x2a\xe9\x93\x8c\x6a\x89\x81\x31\xd4\x23\xc9\x5b\x95\xfb\xa3\xed\x99\xe2\xac\xcb\x81\xb3\xcf\xe2\x45\x88\x4c\xab\x99\x9b\xfb\x00\x83\x8d\x65\x6c\x62\x99\x9d\x92\x37\x7c\x6e\xee\x83\x54\xbc\x21\x4f\x9c\xc1\xab\x93\x4a\xf5\x53\x97\x9d\xcb\x00\xda\x28\x43\x0c\xc3\x03\xe0\x21\xff\xde\x6c\x25\xe4\x50\xb9\xfc\xe5\x05\xe6\xb0\x46\xdd\x8d\x2c\xaf\x8b\xa2\xbf\x1a\xaa\x58\x46\x7f\xf4\x62\xe8\x23\xd5\xc4\x87\xd0\x05\x9a\xcd\xf2\x38\x47\x60\x76\x84\xc8\xb2\x49\xf6\xaf\x5b\xb7\xae\xb9\xf3\x53\x33\xe7\xc8\xd4\x22\x59\xf5\x3a\x90\x66\xb1\x40\x97\x6d\xb7\x49\x2c\xb2\x68\xfb\xf4\x26\xf8\x02\xe0\x36\x0b\x20\xb7\x25\xbd\x5b\xdb\xf7\x3e\x59\x1d\xc3\x54\x59\x8c\xdf\x5c\x0e\xc3\x76\x70\x1d\x9e\xe7\xa7\x08\xdb\x01\x69\x78\xbe\x4f\x1b\xa1\xb3\x8a\x90\xeb\x93\x4e\x40\xc7\x78\x06\x16\x44\x3b\xbb\x34\xbc\xe9\xf9\x37\x14\xce\x28\xdd\x9c\xf9\x0f\xdc\x20\xe3\x07\x6a\x07\xb4\xd3\xf4\x6a\x61\xb8\x0a\x13\xc4\x98\x70\xa1\xbc\x8b\x77\xd2\xdc\x31\x67\xac\x81\x36\x49\x10\x5a\x61\x45\x56\x83\x59\xec\xad\x80\xcc\x4d\x5f\x9d\x9d\x98\xac\x8d\xcf\xcc\x90\xf9\xf1\xd9\x8b\x93\xf3\xf0\x4f\x2b\x90\xe0\xec\x26\x50\xad\x8d\x1d\xb6\xf6\xe4\x8a\x00\x8e\x57\x8e\xd6\xfe\xb5\x31\x7a\x5a\xaa\xc2\x8c\x4d\x34\x64\x93\xda\x0b\x2b\x4f\xac\xe4\x2a\x35\x72\x42\x20\x88\x80\x26\x33\xa5\x38\x8c\x92\xf3\x95\x29\x12\x79\x56\xd0\x94\x43\x76\x39\xdb\x7a\xc6\x67\xa6\x00\x1d\xad\x49\xbc\x4e\xf8\x33\x70\xea\x83\x65\x0d\x3e\x39\xee\xd9\xaf\x06\x38\x32\x4b\x83\xd0\x5a\x2a\x71\x7a\x10\xd1\x88\x4a\x1a\xbe\x49\x62\xae\xc1\xff\x1f\xc1\x9a\x48\x99\xf9\x79\xad\x2e\xd8\x14\x11\x21\xa4\x74\x77\x02\x4c\x87\x51\x16\xeb\xc9\xbc\x5b\xc1\x5b\xb7\x20\xca\x5b\xd9\x9a\x52\xda\x1f\xcb\x22\xcd\xf4\x43\x1e\xce\x48\x5a\x93\x34\x89\x4f\x99\xb6\x71\x52\x00\xcb\x25\xb6\xdb\xb4\x57\xec\x66\xc7\x72\x64\x68\x2f\x70\x45\xc3\x45\x3c\x5b\x8e\x3a\xda\x09\x75\xf7\xf6\xe0\x2e\x20\xbd\xb0\x69\xb4\xfd\x02\x12\xd0\x0f\x7a\xd1\xeb\x2e\x0f\xc2\x4d\x12\xf3\x8c\x14\xbd\x8a\x36\x4d\xd2\xb4\x83\xb6\x63\xe1\x2a\x3f\x3d\x2e\xa9\xc3\x65\x4e\x06\x4f\xf8\x25\x01\x0d\x0c\xe1\xe8\x22\x7b\xb7\x7b\xc4\xfb\x0b\x45\x71\x5e\x71\x54\xa6\xff\xfa\x2d\xe7\x96\xad\xa8\xd6\x92\xbd\x42\x5d\x7e\xfb\xb7\xd4\xb1\x9b\x75\x42\xc6\x1d\x87\x93\x78\x2d\x53\xcb\x01\x70\xb8\x26\xef\x3c\xb6\x56\xb4\x3b\x49\x52\x09\x10\x54\x06\x10\x31\xed\xd3\x20\xd0\x67\xba\xc4\x7f\x78\x1b\xff\xfe\x10\xa2\xd7\xf1\xc4\x7b\xf1\xea\xd4\x79\xc0\xd5\x01\xf5\x07\xdb\x10\x01\x8e\x2d\x50\xe2\xbe\xf9\xcb\xfd\xa3\x83\xc1\xdd\x75\x11\xf8\x80\x9f\x8a\xc4\xdf\xf6\xa2\x3d\x88\x8d\x8e\x7f\xff\x4d\xbc\xd7\x8b\xb6\x8a\x56\x57\x63\x17\x78\xfe\x52\x5e\x17\x64\x1a\x0c\x91\x37\x15\x1b\x2c\xcf\x94\x25\xdb\x2c\xdf\xcf\x34\xfb\x64\xdb\xcb\x8f\x6f\x25\xda\x2c\x5d\x59\x15\xdb\xad\x9e\x9e\x4a\x36\x5d\x2d\xf2\x43\xb4\xbe\x76\x83\xae\xfe\x00\x3d\x40\x06\x77\x7e\x9c\xbd\xc0\x36\xaf\x32\xed\x87\x6d\xb5\x6a\xeb\xe5\x41\xb1\x64\xb3\xe5\xfb\xef\xb6\xcd\xa1\xd5\xb8\x21\xdb\xac\x6f\x32\x7b\xad\x72\x93\x3f\x7b\x36\xb8\xbb\x5b\xa1\xc9\xf2\xfd\x13\x6a\xb2\xcc\xf5\x52\x36\xbf\x40\xdd\xfd\xd8\x8f\xd4\x6a\x60\xba\x7b\x0d\x53\x40\xf1\x5d\x5d\x74\xdd\xc1\x6d\x65\xe7\xe3\xd7\xab\x49\x6a\xa7\x48\x50\xd9\x21\xb9\x1b\x68\x66\xe7\x4c\x52\xb5\xca\xed\xa1\x79\x20\x34\x23\x43\x5b\x19\x20\xab\x40\x7f\x99\x74\x36\xb2\x6a\x23\x03\x57\x15\x02\x52\x8d\xa8\x20\x80\xd0\x20\x75\x91\xe3\xf0\x95\x2c\x4d\x6a\x91\x0d\x56\x94\xb3\xdd\xe8\x23\x01\x52\x9e\x6c\x3c\x62\x06\x8f\x9c\xa9\xde\x8b\xdf\x3c\x2e\xa3\x2d\xb8\xc2\xe4\xf8\x64\xba\xb2\xe1\xb9\x44\x9b\x62\x70\x06\xc7\x76\xf3\x8a\xa0\xc9\xcc\x50\x66\xfa\x67\xc7\x30\xd7\xb8\xc0\x38\xcf\x51\x7c\x6d\xad\x7e\x01\xf5\xbd\xe0\x58\x4b\x27\xe3\x9b\x4e\x09\x1c\x59\xc7\xd1\x26\xd2\xb1\xf5\xaf\x38\xe5\x8e\xd3\x9a\xe2\xb9\x77\xfc\xd6\x8c\x32\x4b\xcd\x6d\x82\x73\x3e\xec\x53\x48\x2e\x3f\x2a\x72\xed\xac\xb8\x95\xfd\xc0\x0b\x42\x7e\x99\xb3\xb6\x56\x3f\x0f\x52\xf9\xd9\x0b\x73\x28\x83\x90\xc2\x31\xab\x28\xf0\xbd\x9a\xb0\x51\x95\x7a\x5f\xb2\x00\x9e\xa8\x7a\x7a\xb1\x66\x45\xe1\x1f\xb7\x6e\x91\x9b\x16\x26\x6b\x2c\x40\xda\x68\x38\x0c\xeb\x93\x13\x98\x7c\xeb\x96\x61\x34\x09\xc1\x29\x54\xa6\xd2\xac\x30\x90\x07\x4f\xa2\x83\x87\xf1\xee\x51\xf4\xf0\x6b\x0d\x46\x7f\x41\xdb\xf0\x36\xbe\x2c\xa4\x70\xe6\xee\x3e\x03\x51\xa1\x4d\x44\x49\x57\xa6\x20\x7d\x54\xe9\x49\xfe\x4d\xab\x29\x57\x91\x61\x07\xf2\xe7\xa1\x3d\xa9\x6e\xfd\xfd\x61\x06\x82\xc3\xd0\x4e\x4e\xb1\x25\xc7\x8d\x7f\x91\xfd\x79\xeb\x56\x82\xd7\x5b\x38\x88\x39\xda\x64\x56\x42\x55\x1e\x08\x28\xac\xa5\x8c\x2a\xc8\x83\x11\x2c\x5e\x3e\x66\x81\xf1\x85\xe8\xa6\xed\x38\x40\x58\x0e\x38\xb9\x1d\x1f\xee\x2f\x9c\x55\x91\xfa\x9f\xb0\xf1\xaa\x6c\x63\x7a\x50\x14\x92\x70\x43\x26\x29\x27\x49\xba\xc6\x67\x0f\x95\xed\x38\xdb\x3d\xe8\x4f\x8b\x9e\x6f\x72\xbc\x5d\x2d\xbe\x0b\x36\xa5\xe2\xc2\x69\x80\xe9\x43\xfb\x45\x57\xce\x25\x16\xf1\x5c\x5a\xf3\x16\x17\x91\x05\x58\xde\xef\x54\x54\x00\x77\xe1\x49\x65\xdf\xfa\x50\xec\x5b\x30\x1e\xb4\x2d\x32\xec\xae\x9a\xb4\xa5\xb9\xc9\x89\xab\xb3\x53\xf3\xbf\x22\x17\x67\xa7\xaf\xce\xe8\x06\x8c\x6a\xc7\x95\x91\xa3\x4d\xa2\x52\x05\x69\x35\x9a\x24\xe3\x97\xe6\xa6\x75\x32\x98\x89\xb9\xf7\x82\xe7\xba\x68\x65\xcc\x7e\x38\x35\xa1\xe5\xf0\x16\x2b\x83\xb1\xb0\x99\xf0\x42\x2e\x2e\x26\xce\x8b\x94\x24\xed\x37\xcb\x88\x32\x37\x49\x4b\x37\x51\xaa\x4d\x7a\xd6\x09\x51\xdc\x5c\xfb\x88\x84\xe3\x73\x33\xe3\xfa\x8f\x01\xc7\x07\x43\x39\xf3\x77\xc0\x50\x26\xe3\x47\x48\x84\xe8\xb9\x4f\x14\x29\xba\x1e\x40\x31\x66\xf2\x11\x2e\xc7\x4c\x3e\x82\x92\xce\x4f\x7e\x38\x79\x69\x7a\x46\x4f\x40\x22\x64\xf5\xa2\x83\x5e\x81\xac\x02\x2a\x13\xb5\x75\x66\x49\xda\xd1\x55\xf4\x91\x0c\xb4\x32\xac\xa4\xae\x4f\xe7\x3e\xe0\xd0\x07\x3f\xc4\x1d\xb8\xd8\x64\xe6\xe6\x3e\xd0\xa9\x73\x89\x4c\x28\xc9\x37\x70\xad\x0b\x59\x6c\x34\x08\xac\x25\x2a\x6f\x78\x81\x56\xa9\xb1\x08\x51\xe7\xb5\x5a\x70\xc3\x6e\xd7\x82\xc0\xa9\x41\x0a\x0f\x68\x07\xfc\x4a\xac\x1d\xb6\xdb\xa1\x92\x4e\xc5\x76\xe1\xac\x4d\x53\xec\xe8\xd5\x26\xd2\xfc\xf8\x84\x8e\xfb\x07\x3d\x47\x9a\x72\x57\x27\x26\x26\x27\xcf\x4f\x9e\xaf\x56\x5b\xc3\x72\xfe\x46\x6e\xda\xd8\x08\x60\x83\x04\x12\xbb\x4c\xe7\xaf\x39\xe1\x0d\x31\x6f\xb4\xa5\x36\xb2\x34\xfc\xef\xda\x5a\x5d\xb8\x5a\xae\x2f\x71\xbb\xb0\x54\x0e\x78\x9a\xe1\x33\x4f\x8c\xc9\x12\x2c\xa1\xc5\xda\x5a\x1d\x62\x19\xae\xb7\xc4\x38\x1f\x59\x93\x1c\x51\x1a\xad\x70\x06\x2d\x53\xa7\x4d\x20\x8d\xb1\xc1\xc1\x33\x31\xa7\x11\x26\x10\x3b\x27\x10\x6b\x01\xe1\x3e\x24\x02\x55\x01\xc8\xa6\xae\x3e\x87\x36\x24\x83\x22\x39\xed\xf9\x04\x5c\xb8\x84\xba\xcc\x56\x65\xa7\x90\x1b\x76\xfb\xbd\x82\x0d\x02\x01\x3a\x4f\x73\x28\x93\x49\x56\x14\x20\x39\x37\x36\x01\x58\xe2\x25\x5b\x75\xa2\xde\xfa\x7b\xda\x01\x81\x4a\xe0\xec\xa9\xac\x03\x0f\x8b\x3d\xae\x0e\xfe\x0a\xf5\x31\x76\x65\x0c\xff\x43\x1a\x5e\x93\x9e\x23\x67\xcf\x9c\xf9\xc9\x18\xe1\xdf\xed\x9c\xc0\xd0\x0d\x68\xa8\xa6\x1b\x2d\xd0\x86\xd5\x41\xf4\x43\x49\x05\xd3\x56\x48\x2b\x0c\x51\xbd\xdd\x5e\xf4\x0a\x73\xac\xbe\xda\x19\xe3\xff\x25\xf1\xf7\x0f\xa3\xdf\xf5\x44\xe5\xec\x3c\x70\xbf\x17\x3f\x5f\x3f\x97\xc4\xed\xc3\x51\x2e\x41\x8c\xf8\xf4\x37\x0a\xa6\xfd\x76\x37\x9d\xca\x84\x20\xaa\xcf\x38\x28\x43\x49\x04\xd4\x74\x8f\x70\xd7\x1d\x76\xc9\x4f\xcf\xfc\xfd\x50\x1f\xb1\x47\xb2\x93\x7e\xc5\xe3\x7c\x00\xf0\xae\x13\x2e\x7b\xbe\xfd\xaf\x88\x2f\xd7\xe6\x60\xcf\xe0\x56\x93\xe1\x2f\x56\xc3\x10\x53\x93\xed\x21\x7e\xa7\xc9\x7b\x08\x74\x19\xee\x35\xf6\x54\xed\x36\x09\xcc\xc8\xfa\xec\xcd\x8e\x0a\x02\xbd\x47\xfa\xdf\x6e\x0e\xb6\x7b\x25\x39\x6f\xcc\xfd\x72\x8e\x8c\x23\xf6\x00\x3b\x20\x52\x17\x88\xe9\xa1\x3b\x9a\x1e\xf4\x06\x50\x34\xb6\x7d\x7b\xc5\x76\x28\x47\x38\xc2\x4c\x52\x8a\x87\xca\x82\x59\x5c\xd8\x17\xe7\x12\x40\x02\x36\x42\xfa\x2f\x0f\xa2\x6f\xd7\x87\xc1\xc4\xd8\x39\x13\xf1\x71\xd9\xd0\x80\xd3\xd1\x49\x76\x04\xc6\x7e\xcd\xc1\x23\x44\x22\x4b\x8f\x17\xfc\x7d\x7c\x66\x0a\x4c\x09\xf1\x86\x1c\x3e\xf8\x73\x2a\x8b\x7c\xa4\xfe\xc8\x53\x23\x33\x54\xf2\x35\x51\x46\x4e\x9e\x2e\xda\xee\xb0\x1b\x94\x40\xc4\xc1\x3c\x04\x2f\xac\xad\xd5\x2f\x59\x0b\xd4\xc1\x0d\x40\x20\x85\x95\xe6\x65\x4a\x7b\x6a\xfe\xb8\x2b\xe2\x18\x74\x62\x53\x78\xb3\x25\x3e\x1e\xd3\xf6\x17\x32\xcc\xba\x12\x65\x94\x26\x78\x3a\x07\xf7\xb6\xa4\x1e\xc2\xe9\x24\x16\x4f\x58\x48\x05\xaf\x68\xa5\x8c\x90\x04\xdf\x48\xac\x92\x12\xc5\xb8\x00\x08\x73\xae\x5c\x22\x4a\xb9\xc2\x64\x18\x4a\xa0\xc8\xdb\x55\x19\x40\xa0\xa4\xd3\x2b\x4f\xb5\x5c\x5f\xdf\x48\xe3\xb2\x04\x47\x77\xf5\xe1\x60\xf4\x1e\x17\x76\x64\x39\xd9\xe7\x86\xc2\xd8\x2b\xb5\x37\xa7\xb8\xb1\x5a\x1d\x77\x7a\x0e\x71\xc0\xb1\x3d\xbf\xef\x86\x45\xbd\xfa\x67\x14\x10\x14\x23\x7d\x27\x89\x5f\x91\xee\xa1\xe1\x68\xe2\xd0\x5f\x85\xbb\x2e\x8f\x03\x60\x58\x64\xe5\xec\x10\x0a\xc6\x18\xbc\xde\xea\x04\x68\xbb\x31\xfb\xa3\xd6\x86\xcb\xd3\x12\x9d\x98\xb0\xba\x67\x76\xc6\x6b\xee\x60\xf3\xf6\x39\x56\x9f\x8e\x03\x3e\x83\x7f\x11\xed\x3d\xe3\x7c\x18\xf1\x17\x07\x4c\x83\x14\x88\xbd\x40\xce\x3a\x8c\xb7\xdf\x92\xa2\x18\xd8\xa1\x7e\xaa\xb0\xbe\x8c\x40\x53\x3f\xa7\x4b\x62\x29\x4d\x32\xa8\x49\x19\x11\x54\x0c\xe5\xc6\x94\x3a\xed\xca\x5a\x08\xe8\xc1\xd3\x16\x34\x55\xa7\x0d\x82\x2c\xf0\x2b\x0a\x42\x7f\xdb\x0d\xe9\x92\x0f\xc5\xaa\xb9\xdb\x85\x84\x91\x3d\x93\x34\xcc\x26\xee\x63\x78\x43\x11\x42\x41\x96\x12\x9c\x9f\x1c\xf4\xb5\x08\xb4\x3b\xc7\x6b\x58\x0e\xad\xb3\x99\x79\x69\x7a\x62\xfc\xd2\x24\xdb\xcb\x4f\x4d\x5c\x9a\x1c\x9f\x3d\x35\xc6\x8e\x74\x2b\xb6\xd7\x09\xf8\x6b\x68\x1f\x3b\x34\xd4\x07\x0b\x71\x58\x3b\x66\x5d\x80\x8b\x42\x3d\xc5\xc8\xb8\x20\xac\x89\xcd\x4b\x5e\x13\xb0\x0d\xe2\xec\x8a\x77\x0f\xe3\xbd\xae\x2a\xe0\x90\x83\x2c\x15\x45\x09\xb1\x66\x61\x44\xe7\x75\xc8\x1c\xb8\x1e\xae\xb6\x79\x7c\x2c\x33\xd8\x91\x1e\xe3\x14\x50\xe4\x12\xcf\x27\xa7\x5c\xcf\xa5\x3a\xca\xd6\x61\x39\xa9\x29\xcf\xa5\xf0\x73\x2b\x4a\x12\xb8\x1a\x05\x1d\xef\xf9\x64\xc5\xa6\x37\x13\x3a\x08\x9b\x74\x7c\x47\xe7\xa3\x40\xd4\x87\xf1\x99\x29\x40\x9f\x40\xd9\x12\x2f\xf5\xf5\xa1\x36\x8b\x2d\x55\x93\x24\x9f\xe0\xc8\x88\x6c\xb3\x32\xc4\xc0\xa4\xa0\x26\x14\x8c\xc3\xdd\x43\x60\x3a\x15\xde\x83\x2a\xaa\x84\x5e\xd9\x8e\xd7\xca\xe0\x58\xb2\x2a\x9a\x06\x24\x91\x4d\xf2\x3f\x4d\xae\x38\x40\x1a\x4f\x03\x6a\xb0\xaf\x98\x2a\xad\xa4\x18\x42\xcb\xcc\x7e\x35\x54\x27\x35\x4f\x4f\xa9\x98\x0d\xe0\xf2\xe1\x4f\x3e\xb4\x9c\x0e\x47\x69\xf6\xff\x06\xdc\x8f\xc3\x6b\x8d\xda\x70\x69\xe6\x66\x1a\x3f\x4a\xf7\xfe\x4b\x1e\xd2\x24\x87\x07\xcc\xc9\x12\x3c\xd9\x1c\xd9\x47\x5b\xd9\x9a\x15\x10\xd3\xf2\x6d\xf8\xeb\x44\x4f\x55\x50\xf0\xc7\x1e\x3a\x75\xcc\xa6\xfc\xf8\xe2\xa6\xca\x34\x68\x99\x59\xc8\x16\xb8\x9c\xac\x90\x26\x41\x0b\x78\xf5\x52\x84\x36\xd0\x7f\xfd\x16\x81\x81\x8f\x00\xab\x5a\x84\x26\x90\xfe\xeb\x6f\xe2\x9e\x26\x39\x92\x55\x89\x66\x3b\x54\x95\x8d\x87\xe2\x88\xd5\xef\x7e\xde\x31\xdd\xb3\x95\x67\x5b\x50\xd0\x77\xde\xcd\x04\x6e\x3b\x1d\x0f\xaa\xdb\xf0\x10\xef\x3b\x7d\x21\x60\xca\x36\xc1\x3a\x1c\x27\xb5\x01\x04\xa5\x2d\x35\x11\xab\x99\x1a\x2a\x85\xf5\x2d\x53\x47\xdb\x80\xcf\xbb\xf1\x97\xeb\xd1\xf3\xad\x62\x29\xb6\xbb\xe8\xf9\x2d\xbc\x9b\x04\x7d\x79\x24\xf8\x69\x2b\x09\x09\x67\x03\x8f\xd6\x16\x3a\xb6\x13\x22\x45\x46\xb0\x1a\x84\xb4\x35\x46\x6c\x57\x20\x2a\xb3\x51\xd8\xa6\xcc\x44\x66\x6b\x1c\xff\x19\xb9\xe5\x2d\x97\xad\x1f\x00\x72\xad\x45\x51\x96\x71\xe1\x1c\xb5\x15\xd5\x3e\x2d\x9e\xaf\xe3\x3e\xa3\x3a\x39\x15\x4a\xb4\xf8\x8b\xc3\x78\xe7\x36\x89\x5f\x1d\x32\xa3\xf0\xab\xb7\x24\x7a\xd3\x8d\x9e\xfe\x3b\x60\x07\xde\xd9\x07\xe3\x11\x80\x1b\x80\xd1\x87\x33\x6e\xdc\xef\xc1\x2c\xed\x69\x80\x95\xa1\x6b\x04\xea\x6c\xc1\x95\x85\xaa\x71\x81\xb4\x4e\x40\xfd\x80\x2c\xac\xc2\x75\x83\x4e\x2c\x3a\xfb\x37\x7a\xc2\x7e\xe4\xd5\x08\x67\x58\x71\x4d\x80\x0f\xda\xa4\xa1\x65\x3b\x7c\x0c\xaa\x7c\x74\xd9\x23\xb5\x2e\x09\x8b\x73\xd2\xe5\x9d\x36\x05\x87\x21\x89\xbb\x47\xd1\xb7\xeb\x88\xcb\x5f\xac\x17\x6e\xdf\x86\x1e\x4d\xa1\x82\x97\xea\x54\x9f\x36\x80\x2b\xbc\xdd\x26\x74\xc5\x94\x24\xfb\x4d\xaf\xff\xdd\x5b\x99\xa4\xfa\xea\x19\xe4\x8f\x16\x49\x1f\xf2\xe0\x98\x46\x83\x06\xd8\xa6\x64\x43\x02\xc5\xbf\x54\xaa\x96\xc1\x9d\x0a\xc2\x31\x9d\xc5\x20\x96\xdb\xf0\x95\xe4\x15\x7e\x4e\x2e\xb5\xfa\x57\x45\xf9\x23\x4d\x16\xde\x90\xf2\x93\x05\x0e\x43\xec\x3c\xe7\x2d\x8a\xf4\x3f\x4c\x33\xe7\x77\x5c\x2a\x90\x81\x46\x89\xea\x72\xb4\xea\xb0\xd5\x53\x26\x49\xc2\x09\x1b\xf3\x54\xff\x16\x8e\x08\x3c\xab\x53\xc4\x2a\xf0\x4f\x53\xb8\x77\xb3\x2e\x19\xce\xcb\x3c\x99\xa3\xd3\x5f\x19\x04\x09\x6d\xf3\x32\xfd\x60\x57\xbe\xc8\xb8\x61\xb7\x39\x2b\x80\x40\x15\x82\x2b\xee\xd0\xab\x00\xcf\x98\xc5\x66\xe4\xc9\x50\x78\x0b\xff\xe5\x81\xfe\x84\xcf\x2a\x5f\xf6\x82\x10\x96\xb3\x24\x70\x48\x9b\xef\x0b\x0b\x26\x5b\x91\xd9\xa2\xd6\xdb\x1b\x7c\xf1\x22\xee\xbe\xe4\x7c\xef\x65\xeb\x4b\x91\xcb\x73\x63\x5f\x0d\x45\xaa\x93\x2b\x5e\xc8\x36\x0c\xaf\xd5\xa2\x6e\x93\x36\xff\x53\x79\xe7\x80\x59\xa9\x3a\xe9\x7f\xbb\x19\x3f\xf9\x2a\x75\x39\xf5\x9f\x34\xaa\x16\xe6\x1a\x19\xca\xc1\x19\x5a\xf8\x13\xa4\x9f\xb8\x62\xac\x08\x08\x3a\x11\x12\x8f\xbc\xf5\xfd\x78\x5c\x1e\x8a\x72\x05\xc1\x2a\xb2\x52\x9d\xe3\x14\x24\x8d\x9a\x5e\x82\xa5\xd1\x7c\xc5\x78\xbd\xe0\x1d\x50\xb6\x16\x7e\xee\xec\x9a\x55\x32\x97\x21\x0f\xbd\xe8\xb0\x74\xf7\x8f\x16\xeb\xc8\xc9\xcc\x99\xa5\x19\x2e\xc3\xea\x0c\x07\x05\x00\xdc\xb6\x3d\x17\xfc\xc9\xf0\x13\x84\xdd\x88\x68\xfa\x31\x49\x77\x83\xaf\xdb\x81\x64\x2d\xb1\x5d\xb9\x11\xde\xf4\x7c\xc0\x59\x96\xc4\x72\x5a\x0a\x62\x6e\xdc\x03\x9b\x49\xc2\xd7\x09\x31\x11\x40\x5d\xae\xde\xce\xa8\x3c\xc4\xf8\x2b\x5c\x61\x70\x27\xe7\x8e\x02\x36\xce\x1d\xd1\x92\xf3\x49\xd0\xf0\x1d\x26\x3c\xe3\x0f\xe2\x47\xf7\x72\x58\xfb\x90\x55\xa5\xc0\x4b\x0d\xa7\x2c\x5c\x97\x7f\xe0\x53\x97\xec\x1d\x3c\x67\xfd\x15\x8f\x5b\xac\xcd\x15\xa7\x28\xf7\xe3\x8c\x92\x47\x50\xe4\x9f\xd1\x0d\xf2\x72\xf0\x24\x26\xec\x0e\x2e\xa2\xdd\x06\x28\x1a\xaf\x13\x5e\x73\xf9\x4d\xe8\xb8\x12\x23\x0c\xf7\x9b\x0b\x98\xdd\x4c\x55\x06\x4a\xdf\x5e\x5a\x0e\x49\xdb\xf3\xc3\x3a\xc4\x5a\x50\xab\x09\xf6\xa6\xe5\x37\x49\xc3\x6b\x0a\x9f\x17\x7b\x61\x0c\xc6\x13\xfb\xeb\xff\x9e\x99\x9e\x9d\xcf\xf5\x77\x69\xef\x4c\x65\x2b\x08\x70\x59\x30\xfb\xa4\x7f\xd0\x25\xf1\xe1\x46\xff\xf5\x5b\xa6\x32\xdc\x97\x6a\x56\x37\x0e\xd7\x2f\xf0\x79\x04\x3e\xf9\xab\x3f\xc7\xdf\xbd\x40\x1a\xcc\xc3\xf8\xf7\x99\xbb\x51\xfe\x2e\x64\x53\x6f\xef\x44\xbf\xc3\xe8\x9f\x87\x5f\x0b\x12\xd2\xcd\xf5\xf8\xfe\x1e\x6f\x49\xea\x8b\xa5\x79\xb0\x0a\x58\xfe\xb0\xf7\x3b\x6e\x42\x5a\x2b\xbb\x9f\x75\x16\xdb\x5d\x27\x30\x72\x4b\x78\xe7\x5b\x9e\x4f\x55\x17\x89\x36\x33\x05\x3b\xeb\xfe\xb3\xc1\xe6\x8b\xa4\x7f\x9e\x6c\xc5\xdd\x23\x98\x17\x70\xf0\x81\xab\xa1\x54\x1d\x0a\x6b\x48\x95\x26\xd0\x26\x5e\x83\xe2\xbf\xf5\x97\xa6\xa0\x55\xb4\xf5\x22\xf3\xb6\x5e\xf0\xdf\x4a\x3c\x34\xff\x1c\x26\x8b\x9a\x35\xb7\xd3\x16\x91\x7a\x63\x18\x4e\xe0\x11\xb7\xe3\x38\x18\x9d\xcb\x1f\x88\x7b\x51\xc4\x26\xe2\xaf\x9b\xdc\x58\xeb\x30\xe6\xef\xf1\xc8\xbc\x31\xc1\xeb\xc5\x75\xe2\xf1\x7a\xfc\xb4\xfa\x64\x5f\x5c\x85\x42\x48\xc1\xd7\x87\x24\xea\x6e\x15\x5e\x1a\x86\x96\x96\xcb\x17\x8f\x14\xfa\x72\x9d\x40\x8c\x85\xd0\x10\x29\x03\x42\x52\x2f\x6a\x04\x7a\x6d\xf0\x7a\x0a\xff\x88\x74\xb2\x5b\xed\x36\xdb\x87\x10\x7d\xc2\x87\x38\x8d\x16\xa7\x10\x45\x1e\xd2\x96\xb5\x4a\x30\xd6\xb6\xe9\xdd\x74\xd9\x5a\x58\xd1\x8a\x85\xaa\x0b\x57\xe2\x67\x0f\xe2\xe7\xeb\x7a\x09\xed\xbf\x95\xf1\x0e\xed\x34\x8f\x77\x30\x0e\x6a\x3c\xcc\xb0\xa9\x4f\xb1\xe3\x1b\x35\x8f\xb7\xd3\xec\x84\xf3\xe3\x73\xbf\xbc\x3e\x55\x2d\xdf\x82\x93\x3e\xea\x2a\x56\xf6\x19\x5d\xf9\x19\x3d\x71\x1a\x5b\x6f\x75\xd4\x5d\x58\x90\x10\x4c\x6c\x11\x44\x9a\x68\x67\xd6\xd8\x61\xb8\x26\x22\x14\x6b\x02\x23\x88\x4d\xfc\x96\x75\x03\x7d\x50\xf2\x67\xe1\xa4\x0b\x14\x3e\xf9\xd0\x23\x13\x17\xc0\xca\x32\x6a\x46\x4a\x56\x3c\x44\xeb\x38\x71\x41\x81\x32\x4f\xdc\x5a\xf8\x75\x12\xef\xac\x5a\x2e\x31\xd6\x3e\xef\x46\x4f\x77\x65\xb4\x45\xe1\xde\x82\x76\x08\xa7\xbe\xe6\x60\x6c\x76\x20\x00\x1d\x9b\x09\x8a\x17\xf0\xba\x02\xd9\x20\xeb\x23\x6b\x71\x91\x36\xb4\x11\x43\xc7\x14\x6a\x50\x14\x29\x0f\x7d\xcf\xa1\x1c\xf1\x85\xed\xad\xbf\x00\x2e\x6a\x3e\x37\x02\x1a\xd6\x3c\x7f\xa9\xc6\xde\x39\x05\xde\xa3\xdc\x57\x60\x6a\xe3\x4b\xd5\x56\x21\xd0\x63\x82\xb3\xdc\x42\x06\x31\x84\xca\xb7\xdb\xce\x2a\x86\x84\x73\xc6\x5b\x71\x7d\xaa\x9c\x1b\x03\xd2\x71\x43\x1b\x30\x4a\x56\x21\xfc\x8d\xf7\x8d\x3e\x90\x46\x6b\x72\x75\xd3\xa0\x71\x6c\x00\x44\xdb\x9b\xfd\x37\x9b\x6c\x4d\x10\x4c\xb9\x9c\x84\x7c\xb8\xf8\xa3\xad\x0c\xbb\xee\x21\x89\xf7\x6e\xa7\x39\xe7\x0b\x62\xba\x7e\xec\xb8\xa0\x86\xfe\x8c\x0e\xbe\x1e\x3c\x7e\x18\x31\x73\xf2\xb7\xcf\x38\xd3\x7a\xff\xf5\x1e\x6a\x08\x9c\xde\xbb\xb0\x26\xad\x4b\x44\xcb\x9e\x38\x0e\xaa\xda\xa6\x4c\x52\x38\x46\x0a\xce\x2a\xf0\xa2\xc1\x04\xc4\xf0\x7d\x0e\x4b\x3b\x78\xbc\x1d\xef\x1e\x65\x0e\xa1\xdf\x1d\x45\x7b\xff\x73\xe8\xdc\x39\x46\xa2\xee\x33\x66\x53\x7c\xb9\x39\xb8\xbd\x0f\x30\x34\xaf\x0e\xd8\x57\xcf\x93\x61\xf8\x40\x57\x3c\xbe\x87\x89\xd0\x9f\xb1\xc4\xe8\x5d\x44\x56\x09\xc5\xf8\x85\x79\x88\xce\x0e\x2c\x66\xee\xc6\xa1\x08\xa1\xc4\xed\x90\xe6\xf8\xe6\xcf\xbb\xe9\x22\x89\xfd\x93\xaf\x4e\x75\x3b\x39\xc9\x64\x64\xbb\xe5\xcc\x54\xba\x69\xc7\x4a\x5e\xc4\x16\xbf\xe9\xf2\xeb\x61\x4d\x2c\x51\x6a\x15\xef\xbf\xee\x62\x6e\x8f\xd2\xca\x94\x52\xc7\x6c\xe0\xc4\x05\x29\x2a\x65\x1d\x40\x63\xa9\x1b\xb0\x96\xc1\xf4\x48\x05\x28\x49\x7e\x6e\xb6\xe0\x52\x58\x70\x4d\x4d\x4e\x9f\x94\xb3\x94\xdc\xb8\x68\x64\x3e\xa4\x4e\xad\x63\x37\x97\x43\xaf\x66\x4e\x6b\x96\x2b\x80\x37\x80\x51\xf9\xaf\xd6\x76\x05\x62\xa3\x27\x48\xca\x35\x7a\x1f\xb7\x27\x52\xc3\xfa\xaf\xf8\xa5\x8f\xdb\xa0\x64\x29\xba\xda\x6e\x5a\x21\x95\x6c\x0a\xe9\x16\x76\xe0\x47\x4c\xb2\x2a\xa2\x4c\xc1\x0d\x73\xf7\x50\xa5\x6d\xe8\x92\xf8\xd1\x3d\xce\xa1\xf6\xd9\x51\x76\xd9\xd1\x56\x3d\x42\xa3\xa6\xe7\xc7\x2f\x5d\x47\x6e\xf4\x6a\x36\x85\xb5\x84\x67\x34\xf6\x0f\xed\x11\x6d\x70\xb7\xd7\xff\xee\x48\x7d\x4f\x23\xcc\x76\x20\xba\x53\xb9\x2b\x77\xbc\xa5\xf2\x91\x29\xfc\xde\x3c\x7a\xda\x03\x08\xb1\x6f\x1f\xc6\x7b\xb7\x45\x8c\xa7\xe9\x6a\x75\x5e\x0d\x2f\x55\xcf\x37\x5a\x0b\x5e\x13\x64\x9a\x2d\x6c\xae\x2d\xef\x90\x56\xa1\x46\xbc\x5a\x18\x2a\xae\xa9\x33\xb8\x41\x96\xad\x80\x2c\x50\x76\xcc\xed\x2c\xb4\xec\x10\x54\x90\xbe\x25\x67\x15\xba\x19\x13\x03\x99\x21\x72\xcd\x85\x42\xae\xd5\xa2\xe7\x08\xc1\x6f\x17\xdc\x10\xd5\xc0\x6f\x76\x93\xfd\x22\x7f\x9b\xa3\xff\xd2\xa1\x6e\x83\x4e\x9d\xd7\x8e\x04\x83\x76\xcc\x10\xa2\x7e\x00\x36\x59\xc7\x95\x67\x96\x8a\x36\x2e\xf5\x5b\xb6\xcb\x26\x9d\x25\xed\x58\x84\x7f\x59\x1c\x05\xfe\x25\x11\xa7\xc6\x15\xaa\x00\x09\x32\x87\xcc\x0a\x15\x14\x4b\xdb\x6d\xd2\x4f\xc0\x8e\x44\x67\x43\x68\xa3\x4a\x2e\xbd\x99\x84\x67\x24\xde\x07\x29\x2d\x01\xf9\xb3\x5a\x14\xa5\xe8\x46\x7c\x82\x6a\x79\xf7\xd7\x08\xdc\x03\x67\x2e\x6e\x39\x3f\x7b\x00\x54\x86\x39\xa0\x0c\xd9\xac\xb5\x7f\xbb\x17\xfd\x61\x93\x23\x60\xe6\xe3\x3f\xc7\x77\x37\x86\x8a\x45\x9f\x3f\x8e\x77\xdf\x82\xb3\x10\xab\xe7\x2e\x22\xe5\xb5\xc1\xe3\x04\x51\xdd\xdc\xbb\xf2\x23\xe5\x8c\xa3\x1f\x34\xa2\x40\xa3\xe6\xf2\x31\x50\x22\x58\xe1\xab\xb3\x97\x64\x3c\x67\x19\x7e\x2b\xb3\x24\xce\x9a\xaf\x70\x5b\x1e\x5f\xcc\x18\xb1\x17\x55\xa9\x78\x67\x47\x3c\xd7\xb1\xdd\x6a\x37\xf9\xf3\x09\xec\xb4\x98\x2e\xfc\x36\xe0\xfc\xe4\x38\x59\xb0\x1a\x37\xa8\xdb\x1c\x23\x37\x97\xed\xc6\x72\x92\xc5\x13\x74\xda\x6d\x0f\x3c\x6f\xc5\xe9\xc8\x95\xeb\xb5\xe9\x92\xf7\xee\x6b\x96\x73\xd8\xd5\x13\xa5\xe8\x05\x14\x59\x07\xfa\x92\x5c\xe7\xd1\xaa\x15\x85\x93\x8c\xf0\xca\x22\x30\xe2\x76\xc4\x62\x32\x62\xdb\x1b\xa5\xea\xdc\x53\xf7\x48\xfd\x90\x2b\x69\xc5\x72\x3a\xd5\x45\xa5\x80\xed\x47\x52\x06\x6e\x4f\xdb\x56\xb8\x3c\x5a\xc9\xb5\xb5\xfa\x0c\xcc\xe2\x49\xc9\x16\x9d\x7b\x23\x4f\x3a\x6e\x93\xfa\xea\xac\x4f\x6e\xac\xb5\x56\x88\x5e\xb8\x72\xcd\xac\xb2\xe9\x0e\xdd\x32\x27\xf7\xfa\x4a\x42\xa3\xbe\x49\xcb\x5e\x10\x8e\xd4\x8b\xb8\x05\xe7\xec\xb1\x23\x65\x5a\x33\x89\x90\x44\x86\x61\x01\x65\x16\x4f\x78\xdd\xd1\x51\x0e\xeb\xab\x61\x36\xc2\xb1\xd7\x13\x26\x24\xe1\x99\x1b\x59\x04\xf0\xaa\x64\xb6\xae\x91\xfb\x8f\x09\xf4\xfc\x25\xcb\xb5\xff\xf5\x98\x2d\xcb\xf0\xb5\x1d\x5b\xce\x48\x29\xc3\x59\x21\x6d\xc7\xaa\xbe\x0c\x82\x00\xb0\x5b\x46\x6a\x84\xe7\x34\x8f\x3f\x56\x98\x90\x63\x8e\x15\x26\xe2\xf8\x9f\x96\x49\x39\x89\x4f\xab\xca\x19\xf9\xd3\xaa\x42\x46\xfa\xb4\x29\x01\x1c\x2f\x63\x34\x21\xc7\x18\x1f\x7e\x13\xa0\xdb\xb8\xd5\x13\xaa\x96\x06\x9e\xb4\xc0\x19\x4d\x9b\xa4\xd9\xf1\xd3\xdc\x94\x56\x27\xf4\x6a\x4d\x1a\x52\x13\x4c\x8e\xc2\xf3\xfa\x64\x2b\xfa\xfc\x31\x89\x0e\x7a\xfd\x57\xfb\x70\xfe\x78\xb4\x95\x76\x65\xf4\x5f\x61\xe8\x3d\x84\x48\xc4\x1b\xbd\xb8\xab\x3b\x8d\x23\x76\x91\x1c\x4c\x23\xb4\x5a\x19\x89\x98\x24\x35\x62\xef\x29\x72\x20\x7e\xfc\x78\x22\x0c\x91\xe1\x7a\x09\x6d\x2b\x08\x6e\x7a\x7e\x35\xd8\x09\x2c\x98\x6c\x54\xc9\x67\x65\x26\x42\x75\x51\xb8\xb1\x8d\xd4\x89\xca\x39\x65\x44\x01\x5e\x80\x41\x9f\x10\x29\x16\xd0\x30\x20\x6d\xdf\xf6\x7c\x3b\xac\xbe\xb7\x8e\xf6\x11\x39\x66\x14\xd0\x4d\xd0\x16\x3b\xcd\xc3\xce\x4e\x6c\x17\x82\x85\xcf\x11\xf0\x5f\x40\x18\x14\x40\x2d\x59\xa4\xe9\x7b\x6d\x87\x86\x75\x22\x22\x0d\xf9\x03\xe2\xf9\x3c\xcc\x59\x86\x0b\x8a\x5f\x42\x8f\xad\xe4\xd5\x8f\x1e\x7e\x0a\x1d\x5b\xc0\x23\xd8\x4d\x38\xdd\x00\x9d\x18\x38\x9a\xe5\xed\x1e\x1a\xde\x5a\xee\xb0\x8c\xa0\x14\x8a\x33\xbf\x9d\x93\xf9\x6c\xc0\x33\xb0\xfb\x36\x7e\xb3\xa3\xc4\x12\x0b\xab\xae\x84\xc6\x43\x30\xd4\xb6\x4b\x3a\x01\xad\xf3\x20\xa7\x09\x7e\xc7\xaa\x58\x81\xe8\x20\xa9\xb9\xe4\x83\xe9\xb9\x79\xb8\x9f\xf6\x7c\x70\xc6\xd6\x6a\xbe\xe5\x36\xbd\x56\x0d\x85\x87\x1e\x59\xa2\x2e\xf5\x13\xaf\x8b\x2f\xb1\xdc\x21\xd0\xa3\xdd\x09\x96\x79\x88\x87\x21\x90\x3e\x0d\x64\x0d\xee\x12\x6e\xbe\x82\x63\x15\x96\xb9\x27\xf7\xd2\xb0\x1c\x49\x78\x78\x42\xc0\xa9\x28\x0c\x4e\x5d\xf5\xb2\x05\xfd\xd5\x83\xed\x9d\xfe\xcb\x83\xe8\xce\x4e\xa6\x25\x43\x77\x33\xf1\xdd\x8d\x8c\x46\x77\x77\xe3\xee\xcb\xc1\x76\x8f\x0c\xbe\x94\x77\xab\x83\x07\x47\x40\x65\x52\xec\xf8\x1d\x22\x9d\xa8\x3c\x00\xd3\xc5\x47\x9b\xe3\xc7\x74\x8b\x9c\x84\xd1\x70\x6c\xf3\x76\x28\xfd\xea\x44\xd4\xc0\xe8\xae\x63\x89\xba\x41\xab\x2f\x94\xc7\x36\x9f\xb2\x02\x8e\xd7\x1b\x90\x23\x08\xeb\x7f\xde\x49\x04\x83\x19\x3a\xc1\x08\xf2\x0d\xf9\x0d\x05\xa5\x46\x6c\x50\x92\x8b\x36\x62\xd9\x91\x8c\x08\x8c\xd2\x1e\x49\x63\x09\xbd\xa1\xba\x40\x49\xc3\xeb\x38\xb8\xc5\x2c\xb0\xfd\xd1\x6a\x2c\xeb\x43\x41\x14\x14\x90\xcc\xcd\x33\xd8\x88\x9f\x77\xa3\xfb\xfb\xb9\x18\x91\xba\xf8\x00\xd0\x2a\xb8\x71\x2a\x20\x1d\xd7\xfe\x97\x0e\x1b\x10\xe8\x30\x26\x55\x83\xbc\x98\x24\xef\x06\xad\x6e\x62\x22\x51\xa0\x63\x2d\x50\x1d\xf6\x49\x51\xd9\x91\x8f\x04\x86\x84\x28\x73\xa1\x51\x3e\xbf\x4f\x39\xa6\xa6\xf4\xaa\x66\xa2\x27\xed\xc0\x64\xb6\x40\x48\x05\xbf\x9b\x4b\xdf\x4c\x28\x17\x05\x25\xb1\x98\x12\x6d\x42\xcf\x23\x2d\x66\xd4\x78\x6d\x0c\x4e\x0a\x3d\xc1\x24\x36\x46\xda\x0e\xb5\x02\x9e\xdc\x68\xa3\x07\x98\x35\x5c\x1b\x10\xc2\x49\xbf\xf6\x48\xbc\xf3\x0d\x8f\x09\x8f\xba\x1b\xd1\xfe\x21\x89\x9e\xff\xaf\x34\x7c\x25\xdf\xcd\xd9\x96\xbf\xf7\x55\xb9\xcd\xd5\x87\x30\x20\xcb\xe5\x48\x94\x3c\xbb\x12\xa2\xac\xb8\x51\xe9\xb9\x70\x9d\x3b\x4b\xdb\x1e\xd8\x1b\xa7\xb4\xec\xce\xe9\xd7\x14\x10\x6d\x04\x1a\xe5\xd8\xa2\xe2\xec\x85\x98\x93\xac\x6f\xa3\x83\x5e\x7c\x77\x77\xf0\xfb\x62\xe2\x8c\x51\x15\x56\x69\x97\xd7\xd6\xea\xf3\x76\x5b\x7b\x01\x78\xcc\x46\x6c\xbf\xd0\xd4\xa6\x6b\x4f\x80\x43\xa6\xe1\xb5\x5a\xc0\x90\xd1\x09\x68\x53\xb8\xbd\x83\xba\x44\x0f\x07\xec\xe3\x9a\x75\x0a\x39\x50\x28\xb1\x1c\x67\x0c\x8d\xcd\x66\x02\xdb\x55\x91\x70\x77\x5e\xb9\x52\x30\xcc\x0f\x8c\xb1\x2e\x16\xc1\xbe\x8b\xed\x92\xc9\x7f\x9e\x99\x9c\x9d\xba\x3c\x79\x65\x7e\xfc\x12\x11\x8c\xbe\x4d\x0c\x51\x46\x83\x99\xa9\xed\x75\x42\xb6\x3a\xdb\x95\x77\x37\xa5\x3e\x5f\x30\x2c\x4f\x5c\x80\xc5\x7b\x85\xfa\x01\x4f\xbe\xbb\x6c\xbb\x76\xab\xd3\xfa\x10\x9f\xdc\xba\x55\x27\xbf\xf2\x3a\xbe\x88\xc1\xb2\xd5\x3b\xb7\xe4\x9d\x13\xd0\x84\xcd\x66\x76\x3c\xe1\x0c\xc9\xa9\x6a\x69\x33\xd9\x9e\x7c\xce\xf5\x6e\x87\x02\xdb\x93\xd3\xbc\x9b\x16\x2a\x1e\xec\xfe\x08\x21\xa1\xd0\xc6\xde\xbc\xc7\xea\x51\x23\xea\x64\x0e\x88\xb8\x90\x1f\xda\xd2\xe2\x6e\x8f\x0c\xb6\x0f\xa3\xfb\x6f\x38\x31\x06\x62\x80\x41\x30\xac\x0a\xb2\x95\x26\x0a\xda\xdd\x84\x38\x33\x20\x80\x2f\x42\xe1\x9b\x57\xa8\x60\xd8\xa1\x74\xd9\xf2\x01\xd0\xd8\xf7\x02\x20\xd4\x27\x9e\xbf\x14\xd4\xaf\xb9\xe7\xa9\x43\x91\x55\x38\x44\x1b\xc9\xa7\x2d\x6f\x85\x22\x8b\x74\x42\x2d\x07\x27\x8d\x60\x0c\xc6\x11\xbc\x06\xc1\xc4\x6c\x81\xb5\xda\x6d\x71\x27\x9d\xd4\xd8\x71\x61\xc3\x87\xcb\xf9\x6b\xee\x38\x86\xf0\x10\x11\xcb\x43\x6e\x5a\x2e\x4f\x45\x70\x28\xbf\x38\xcf\x47\x65\xf9\xb9\x6e\xa1\x13\x34\x8b\x02\xc9\x08\x2e\xb6\x53\x2c\x35\xbb\x5d\x8e\xa5\x92\xf4\xd4\x35\x77\xe8\x15\xc4\x5d\x1b\x6c\xef\x44\x5f\x1f\xe6\x10\xe2\xa5\x08\x8a\x00\x2b\x31\xda\xc2\x6b\xf0\xb4\xa0\x24\x05\x12\x63\xa3\x0c\x16\x0b\x2c\x48\xf9\xe0\x2f\x29\x85\xe2\xfb\xbd\xfe\xab\x3d\x2c\xd7\x7f\xb3\xf9\x73\xed\x7a\x6c\x03\xa8\xf3\xa2\xe7\xc3\x05\xe6\x4d\xcb\x6f\xc2\xac\x68\x5b\xa1\xbd\x60\x3b\xd5\x5d\x20\xe0\xc2\x40\xeb\xb9\xe9\xd1\xc0\x3d\x95\xdc\x80\x8a\xe4\x47\xb6\xaf\xdf\xa0\xab\xda\xc5\x0e\x3a\x44\x72\xa0\x22\xfb\xcf\x67\x0f\x31\x19\x1a\x53\x19\x59\x4b\x9f\xaf\xc7\x5f\x6e\xe5\xb8\x05\x4c\x23\x1a\x0d\x5c\xe1\x0c\x58\xb6\x60\x1f\x42\x77\x89\x8c\x96\x01\xd3\xd9\xa8\x9a\xc8\x3d\x90\x67\xf5\x4c\x0a\x2e\xbc\x24\xf3\x26\xb3\x94\x52\x06\xf5\x60\x6a\x60\x1a\x88\x20\x57\xc6\xd4\x9b\xd0\xf2\xc3\x3a\xd1\x4e\x04\x44\x46\x50\x03\x18\x7e\x6e\x0a\x63\x3a\x4c\x07\x48\x47\x5b\x3b\x3c\x32\x5e\x59\x7b\x54\x61\x49\xb4\x97\xc2\xab\x90\x33\xc6\x34\x2d\xc3\xc4\x3e\x0c\xb1\x0a\x56\xdd\x06\x06\x13\xf3\xcd\x5e\xcb\x5a\xf5\xa6\x1b\x7d\xfe\xb8\x7f\x74\x80\x6f\xe3\xde\x8d\x80\x38\x43\x09\x78\xba\x7a\xdb\x3c\x8c\xce\x6a\x36\x6b\xe8\x24\xac\xb1\x65\x9b\xb3\x0d\x2c\xd9\x41\xc8\x6f\x27\x0d\x21\x0e\x18\x34\xb7\xb7\x1e\x3f\xf9\x2a\xfe\x74\x13\x02\x53\x7e\xf7\x32\x7a\xba\xab\x84\xca\x65\xc5\x57\x4a\xc1\x9b\xf7\x42\xcb\x21\x97\x69\xcb\xf3\x75\x33\x2d\x3e\xdc\x25\xd1\xd7\x0f\xd9\xa2\xa2\x63\xbd\x41\x29\x56\xcb\xeb\xb8\x00\xce\xdf\x02\x79\xe4\x34\xad\x2f\xd5\xc9\xd9\x33\x3f\xf9\xe9\xe5\x31\x72\xf6\xe2\x18\x39\x7b\xe6\xa2\x36\xf9\x55\xad\x85\x0c\x6e\xef\xf7\x8f\x0e\x4e\xc7\x3b\x1b\xe7\x86\xca\x57\xd1\x40\x50\x30\x34\x2c\x17\x3d\x97\x95\x54\x4a\x26\xda\x93\x0d\x09\xe6\xca\x57\xca\x93\x50\xd7\xed\xb4\x16\xa8\x9f\xa5\xbe\x97\xe7\x8f\x3a\xa9\x9d\x65\x63\xc3\xa7\x01\x20\xa6\x59\x6c\x67\x72\xec\x96\x0d\xe0\xfe\xd0\x54\x7d\xc6\xa8\x31\x2e\x0a\x06\xf2\xe1\x6e\xff\x75\x37\xf1\xee\x91\xda\xd9\x78\x77\x9d\x44\xfb\x87\x38\xc4\x79\xa3\x60\xc8\xdd\xd9\x19\xdc\x5d\x8f\xee\xde\x33\x2f\x21\x27\xd5\x26\x72\xfa\x3c\x26\xf9\x9d\x4b\x7e\xd3\x7e\xa3\x77\xd9\xd0\xd3\x98\x2b\xd8\x3f\xf8\xed\xb9\xe4\xf5\xf7\x4a\x36\xdf\x37\x91\xe2\xc1\xf0\x91\x3c\x73\xf1\xc6\x4e\x39\x99\x59\xbf\x90\x49\xbc\x0e\x00\x49\x5b\x97\xcf\x26\x4a\x99\xb5\x11\x57\x44\x8c\x3d\xc5\x85\x31\x5f\xe2\xd5\xf1\xf1\xc4\x60\x6d\xd9\x41\xc0\x0c\xb5\x45\xdf\x6b\x71\x56\x3f\xd3\x55\x0d\x52\xed\x89\x98\x0b\xb4\x90\x98\xbc\x2c\x10\x48\xb4\xd1\x8d\x76\xbf\xd7\xd4\x3f\x7b\xa9\x92\xf1\xc0\x83\xc6\xf0\x26\x51\x86\xe5\xca\x00\xf6\x24\x55\x48\x90\x13\x06\xa1\x4f\xad\x96\x16\x49\x3f\x13\x76\x9e\x9b\xea\xc3\x99\x08\x21\x9e\x17\x16\x6e\xf0\xac\x47\x7f\xdc\x8f\x0e\x7e\xc3\x0c\xb0\xab\xb3\x97\xe4\xc8\x2d\xa1\xb5\xf8\x72\x8a\xe6\x38\x0e\xa5\xce\x8b\x9e\xcf\x8c\x2c\xda\xac\x93\xb9\xc6\x32\x6d\xd1\x84\x7a\x91\x49\x12\xa9\xee\x90\x4d\x53\xa6\x5d\x72\x14\x0f\x9d\x74\x31\x36\x1d\x2d\xc9\x5e\xaa\x21\x48\x95\xc1\x9e\x28\x65\x3e\x7b\x36\xb8\x73\xc8\x26\x26\x54\x9d\x9b\x94\xae\xe9\x80\xb9\xf1\x8b\x93\xda\x04\x4a\xd8\x08\xa3\x57\xdb\x9a\xcc\xc9\xab\x73\x93\xb3\x66\xce\x37\x99\xe3\x67\xa2\x7d\x4b\xc4\x98\x15\x49\xe4\x18\xf4\xd1\xf2\xa2\x09\x11\x9a\xa2\xae\xc8\x80\xb4\x90\x2c\x25\x2f\x5c\x14\x0d\x78\x64\xe6\xd0\xba\x30\x74\xc9\xae\x09\x0b\x8a\xfe\x6c\x20\x45\x17\xea\x88\xe9\x67\x9e\x4b\x01\x7b\x01\x38\x4c\x70\x75\x10\xdc\x36\xfc\x4e\x99\x06\x6d\xcf\xd5\xba\xbe\x91\x5c\x85\xc4\xbb\x0f\xa2\xfb\xdf\xc8\xa3\xd4\xdb\xc1\x17\x9b\x6c\xfd\x40\x42\x12\x80\x31\xf8\xe2\x37\xd1\xef\x76\x55\xbd\x75\xa8\x2b\x8a\x8e\x9d\x70\x99\xc2\x65\x68\xa8\xc7\x66\x00\x12\x91\x0a\x0c\x40\x89\x78\x3c\x3f\x8e\xf1\x9b\xbb\x53\xe2\x3e\xee\x54\x59\xc2\x08\x7e\xd6\xca\xf3\x2b\x2b\xc2\xd2\xa7\xc0\x6a\xfa\x85\x10\xbf\x4c\xc9\xc4\x04\xf8\x47\xb8\xa7\xa3\x4e\x66\xd0\x05\xe9\x78\x4b\xc4\x76\xcd\xb7\x8c\xbc\x68\xf4\xaa\x1b\xef\x81\x73\x71\xb0\xb9\x15\xbd\xee\xe6\xab\x2d\x0e\x06\xb8\x1e\x66\xb3\xe9\x8a\xf4\xf5\x16\x42\x76\x08\x57\xee\xf2\x95\x80\x7f\x78\x09\xc8\x98\xc5\x5f\xa6\xe1\xaf\xbe\x25\xa1\x70\x79\xfc\xdf\x4e\x3a\xfe\x4f\x71\x9b\xfe\xfe\x2f\x65\x20\xff\x13\x85\xdb\x96\x1f\x64\x3b\x57\xe4\xa2\x49\xaf\x92\x0e\x88\x3b\xd5\xb1\xc3\xa5\xe4\xa1\xa9\xff\xcd\x7e\xb4\x7f\x44\xa2\x6f\xbb\x71\x37\x7f\x9c\xea\xd6\x55\xa9\xa7\x2f\x38\xfd\xb3\xe0\xa4\x43\x7b\x23\xb9\x78\x75\xea\xbc\xce\xeb\xa1\xad\x06\xe3\x05\x2c\x8e\x60\x88\x6b\x80\xf1\xe6\x2a\x95\x7e\xaf\xe0\x5d\x21\x20\xda\x60\x9b\x99\x6a\xe6\xda\x00\xa0\x47\x81\x4d\xcc\xe0\x6d\x81\x0e\xef\x0a\xa8\x4e\x0b\x24\x30\x04\xe0\x95\xd1\x2a\xd5\x3e\x23\xbc\xc0\x55\x77\x01\x53\x7e\x33\x77\xd7\x55\xfb\x36\x0d\xb9\xcb\x37\xfe\xdf\xf5\x0a\xba\xd8\x50\x37\xde\x6e\x86\x68\xcc\xaa\x3f\xa3\xc9\x92\x97\x99\xad\xd3\x53\x9b\x42\xbd\xbb\x93\xd1\x3b\xee\x2a\x8e\xcb\x1f\xba\x49\x02\xe0\xba\x4c\x93\x54\x20\xa4\x1f\xba\x61\x99\x1b\x67\x1c\x29\x3c\x37\xdc\x14\xbd\xae\xe7\x8b\x82\xa2\xaa\x7d\x08\x5a\x9e\x90\x5e\xe6\x54\x39\x3e\x9f\xf2\x8f\x40\x95\x54\x68\xb0\x5a\x1d\xa7\xc8\xc8\x97\xc2\x48\xfc\xdd\x8b\xf8\xd3\x4d\x2d\x49\x38\x8a\xcd\x05\x3a\xc1\x45\x47\x47\x08\xf3\x23\x86\x41\x41\x8c\x41\x0d\x11\x8d\x0e\x24\x65\xb8\xe3\x0a\xd7\x33\xd6\x6b\x2d\x6b\x95\x38\x14\x82\xd0\xda\xed\x80\xb4\xac\x76\x1b\x39\x10\x33\x41\x57\x2b\x1d\xc7\xa5\x3e\xdb\xc1\x7e\x46\xc0\xe7\x63\x0f\x1f\x9f\xf5\x94\x5d\xfc\xee\x3a\x50\x4d\x40\xb0\x7c\xce\x7b\x29\xcf\x67\xdb\xf7\x1a\x94\x36\x75\xee\x4e\x79\x52\xe2\x6d\x8c\x3e\x7b\x48\x86\xc3\xae\xe0\x14\xf4\xfc\x9b\xc1\xf6\x03\x91\x9f\xcc\xac\x88\xef\x5e\xc4\xdb\x10\x35\xf5\x6a\x93\x44\xcf\x37\xa3\xdf\x3d\x13\xfe\x27\xb9\x73\xa3\xc3\x69\x64\xe2\x30\xb0\x5c\xf1\x94\xc6\xb9\xdc\x12\x12\xa5\xf7\xea\x3c\x49\x9e\xc4\xcf\xbb\x80\x39\x57\xd2\xdd\x9a\x7c\xa9\xcc\x07\x49\x8d\xee\xe2\x2f\xf0\xe3\x1e\xee\x55\xfb\x5c\xce\x81\xcc\xa7\x1f\x75\x16\x04\xc5\x3c\xbb\xd0\xdf\x1c\x2d\x2b\xb3\xb9\x42\x7f\x75\xa4\x6d\xa2\xef\xa9\x8e\x8e\x17\x82\x8d\xcb\xa3\x03\x12\xf7\xba\x83\xed\x43\x22\xdd\x64\xb9\x3b\x51\x9e\x72\x55\x96\xe0\x91\xdb\x2b\x77\xde\x63\xb5\x57\xd9\x93\x7f\xac\xad\x5e\x5b\xab\xab\x61\xd8\xb7\x6e\xb1\x81\x0b\x53\x45\xce\x8e\x11\x5b\x6f\x92\x7c\xe2\xcd\xa6\x9f\xb4\x69\x03\x6e\xb9\x21\x32\x63\xd9\x0a\x88\xd7\x80\x28\xe2\xe6\x39\xf0\x2d\xf0\xa0\x08\xad\xe1\xba\xd1\x3f\x3a\x88\xdf\xec\x90\xe8\x4f\x7f\x01\x9f\x00\x92\x92\x62\x60\x45\x5a\x82\x46\x03\x58\x96\x1c\x27\x95\x32\x46\x17\x6d\x97\xe3\x9f\xf2\xcb\x7a\xcb\x5f\xea\xb4\xa8\x36\x4d\x16\x6f\xd9\x61\x61\xd8\x00\x27\x1f\xc2\xf0\x02\xfc\x66\xea\xe0\xd8\x7d\xc6\x94\xc5\x8b\xd9\x02\x8d\xd8\x68\xe0\x0a\xc9\x04\xb5\x2b\xc5\xe7\x0f\xf5\x45\x43\xe5\x05\x8b\x8e\xe3\x35\x6e\x64\x82\xec\x01\xdc\x02\x8e\x87\x88\x00\xa1\xb5\x68\x15\x74\x87\xd4\xbd\x94\x32\x8f\xd4\x14\x8b\xbd\xfe\xd1\x46\xc1\x28\x69\x59\x6d\x62\x91\xf9\x09\xb3\x55\xca\x7e\x57\x56\x59\xd8\x5d\xcb\x08\x2e\x61\xf0\xa6\xcd\xda\x11\x65\x9f\xbb\x06\x10\x68\x84\x10\x81\x43\xd6\x61\x2f\xf1\xe8\xee\xf1\x99\x19\x7c\x78\x7e\xfa\xf2\xf8\xd4\x15\xf2\x51\xad\x26\x03\xc4\x45\x9c\xf5\xc7\xec\x29\xa4\x40\xcc\x8c\xcf\x7f\xf0\xf1\xb5\x6b\x2e\x8a\x1c\xea\xa1\x6a\x55\xd5\x6a\x70\x57\x3e\x33\x3d\x3b\x8f\x22\x27\xff\x79\xfc\xf2\xcc\xa5\xc9\x39\x2e\x26\x4f\x46\x6b\xb5\x06\x8c\x0f\x9f\x58\xad\xb6\x43\xeb\x0d\xaf\x45\x8c\xff\xfb\xcf\xea\xab\x95\xc4\x2a\xfd\xd0\x5a\x05\x44\xf3\x94\x58\x7c\x56\x3f\x39\xe9\xbc\x87\x17\x3d\x2f\x57\xfa\xfb\x8b\x9e\x57\xb1\x06\xe8\xdd\x7f\x38\x73\xe6\x4c\x41\xb7\x9c\x63\xef\x54\x74\xa4\x04\x39\x2c\x6c\x95\x48\xd7\x04\xf7\x51\x29\x5b\x24\x78\x97\x24\x48\xfc\x18\x65\xaa\xdb\xc0\x86\x04\xbb\xe2\x0f\xc4\x42\xc6\x0d\xbb\x02\x42\x24\x68\x4d\x51\x87\x62\x9c\x0a\x6d\x26\x58\xfd\x8b\xb6\xbb\x44\xfd\xb6\x6f\xbb\x10\xc0\xd0\xb2\xaa\x61\x33\x20\x80\x0e\xb1\x0a\xb3\xef\x95\x35\x58\x59\xb1\x0b\x84\x96\xe3\x6e\x4a\x3b\x2c\xaa\x48\xc7\xa3\x02\x3b\x81\x19\x63\x98\x75\x84\xde\x23\xd4\x65\xcc\xce\xc8\x63\xe7\x1e\xa1\x8e\x82\xf4\x0b\xdd\xb5\x6d\xe9\x8a\x5c\x05\xe7\x90\x06\x5e\xc7\x2f\x08\xc7\x17\x39\x4f\x7f\xdc\x8f\x3f\xdd\x04\x26\x9b\xc4\x9f\x3a\x4a\xa5\xc5\x09\x00\x02\x03\x71\x88\xae\xa0\x6c\x75\xb9\x28\xa0\x85\x1d\xab\x05\xeb\x1c\xad\xa7\x11\xf3\x99\xff\x5b\x6f\x94\xaa\x06\x10\x47\x7e\x4e\xca\xe8\xc5\xc3\x32\x5e\x3d\x2d\x37\x29\xfb\x1f\x98\x8b\x25\xf5\x09\xcc\x6b\xa6\x68\x6e\x62\x99\xae\xad\xd5\x25\x60\x58\x09\x0b\x39\xf3\x2e\xc9\x5f\x08\xcb\x29\x91\xa2\x19\x82\xf0\x7c\xce\x31\xfa\x01\xfc\x30\xc1\x9e\xcf\xaf\xb6\x4f\x90\x6a\xb4\xcc\x37\x2a\x50\x3a\xf7\xfa\xe3\x04\x46\x80\x86\x98\xb3\x72\xa7\x96\x38\x03\x1f\xeb\x84\x5b\x7c\x7c\x2d\xb9\x20\xa0\xb2\xd9\x3d\xeb\x84\x9c\x53\x65\xf6\xb8\xb2\xfd\x99\xca\x24\x94\x04\x36\xc7\x67\xd9\xcc\xd9\x1e\x13\xe9\xa3\x2b\x9a\xe3\x2a\x1c\xd2\xb8\xc4\x44\x4f\x5e\xd3\x74\x6a\x8e\x13\x6f\x74\xdd\x73\x6e\x16\x4f\xa2\x8b\x75\xf7\x83\x23\x29\xc9\x26\x03\x19\xda\x45\xff\x23\xdd\x3b\x14\xa1\x70\x9f\xc4\xa7\x4c\x2d\xd0\xc3\xac\xe3\xda\x15\x5e\xdf\x6a\x83\xb8\x78\xb7\xab\x11\x97\x8c\x81\x12\xab\x91\xe3\x59\xf2\x86\x69\xd1\x06\xe6\x53\xdf\x6b\x81\xed\x31\x63\x85\xcb\x46\x63\xe5\x69\x0f\xd8\x3e\x04\xbc\xde\x4b\x49\x19\xf3\xe5\x16\xd0\x26\xf4\xba\xf1\x9b\x1d\x55\x54\x81\x0e\xef\x68\x67\x96\x6a\x1a\xbe\xa0\x50\x41\xed\x73\x63\x95\x8a\x15\x52\xbd\x8a\xff\x66\xb7\x2f\xd8\x0e\xfd\xc5\x6a\x48\x83\x5b\xb7\xc6\xd8\x23\xf6\xf7\x84\xd7\x71\x43\x76\x24\x65\xdf\x41\x5f\x75\x41\x69\xf1\x11\x84\x5a\x1a\x7d\x02\x6b\x49\xcb\x17\xa5\x2b\x72\x2c\x9e\x95\x77\xc0\xa8\x22\x34\x52\x10\x93\x81\x25\xdf\xf3\xe1\x96\x7d\x55\x49\xc3\x62\xeb\x12\x70\x10\x96\x20\xcb\x97\x3e\x07\x05\xf2\xfa\xf5\x21\x87\x24\xc8\xb2\x7e\x28\xf5\x8f\xd6\x00\x8b\x78\x2e\xad\x41\x5c\x9b\x80\x37\x61\x0d\x71\xbc\x25\x2d\x92\x5c\x12\xb4\x16\xbd\xe9\x46\x07\xeb\xd1\xab\x8d\xc1\xce\x30\x74\xb5\x0c\x8d\xd2\x56\xae\x2c\xea\xa1\xb5\xa4\xf5\xcc\x66\x57\x4d\x84\xb0\x35\x48\x05\xec\x4a\xd6\xef\xb8\x5e\x97\x8e\x52\x13\xf5\x64\xca\x27\xf7\x90\x25\x62\xd2\xd8\x81\xaf\x90\x2b\x23\xd3\x22\x5d\x84\x65\x40\xfd\x42\x11\x86\xb2\x86\x24\x63\x45\x03\x08\x0a\xd3\x09\xc1\x7b\x6c\x95\x68\x4d\x2e\xa7\x5a\x5c\xba\x0c\xdb\x59\x52\x82\x0f\x0f\x1d\xc4\x1c\xd6\x96\xc6\x50\x81\x4b\xc8\x02\x78\x94\xec\x45\x25\xd6\x62\xaa\x03\x53\xf0\x91\xa4\xa6\xd4\x0a\xaf\xbc\xc7\x19\xcf\x14\xd8\x11\xed\xa2\xfb\xe1\xe4\xec\xdc\xd4\xb4\x36\xce\x16\xe3\xe1\x34\xdf\xef\x43\xcb\xb1\x9b\xe4\x1f\xe7\xa6\xaf\x10\x6f\xe1\xff\xa5\x0d\x49\x27\xa8\x18\x9c\x35\xce\x86\xd7\xe0\x51\xea\x1d\x1f\x23\xdb\xda\x96\x6f\xb5\x68\x48\xfd\x60\x2c\x99\x60\xd4\x0e\x97\x01\x7f\xaa\xe6\xd8\x2e\x65\x6b\x94\xed\x02\xd1\x82\x43\xeb\xe4\x02\x50\x3d\x3b\x76\x80\xb1\x41\xd2\xbb\xa7\x97\x1b\x50\x4a\x9a\x5e\x03\x6e\x97\x92\x28\x3b\xb8\x8d\xd2\x13\x46\x1b\x22\x53\xd9\xe7\xdb\x3d\x92\x00\xd1\x30\x72\xc0\x88\x80\x09\x12\x6d\xed\x44\x9f\x3d\x1c\x53\x58\x4b\x5e\x77\x09\x0f\xbc\x8f\x9e\x3f\xeb\x1f\xf4\x12\x4e\xaf\xc1\xe7\xfb\x83\xed\x17\x02\xdb\x4a\x52\x8a\x41\x57\xc6\x3b\xcf\xa2\xa3\xcd\x78\x6f\x77\xf0\xd9\x51\x9d\x27\xc6\xa1\xec\x3c\x69\x48\xb0\xfe\x75\xf4\x14\x88\xed\xf4\xb4\xd6\x10\x27\xbd\xf7\x82\x44\xfb\x47\xec\x57\xb6\x0e\x1e\x1c\xc5\x4f\x0f\x4a\xac\xc0\x27\xfe\x99\x6d\xf7\xff\x7c\xde\x1f\xd5\xe7\xed\x60\x68\x2f\x40\x90\x9e\xb2\xda\xed\x9a\x38\x25\xd6\x00\x15\xf3\x14\x69\x58\x2e\xc7\xee\x70\xe9\x92\x15\xda\x2b\xba\x35\x3b\xb7\x34\xd0\xa9\xef\xc0\x3e\xbb\x43\xfa\x07\xbf\x05\x0a\xc6\xdd\x4d\x68\xde\xdb\xb2\x81\xde\x92\xfd\xf0\x8a\x7e\xc7\xe0\x90\xfe\xa6\xed\xe2\x43\x24\x64\x99\x31\xa3\xa4\xa9\x36\x03\x67\x22\xd1\x8a\x0b\xf4\x06\x1d\xae\x9e\x9a\x92\xcc\x0a\x73\xbc\xa5\x60\x4c\x64\x9f\x63\x42\x35\xbf\x75\x0a\x10\x8e\x58\x64\xb9\x6a\x37\xb2\x54\x0a\x2b\x04\x10\x80\x45\x33\xc6\x33\xc3\xe3\x6e\x6f\x4c\x5c\x43\xb1\x27\x47\x07\xba\x9d\xed\x9f\xc6\x67\xaf\x4c\x5d\xb9\x88\x5c\x52\x68\x1c\xb0\xf9\x0d\x06\xa2\x34\xba\xac\x80\x58\xf2\xe2\x1e\x27\x71\x1b\x33\xd2\x02\xb2\x6c\x2f\x2d\x3b\xab\xa4\x69\x07\x0d\xaf\xe3\x5b\x4b\xb4\x09\xa2\x7e\x95\x12\xd0\xb2\x56\xd9\x28\x5a\xb1\x03\x5b\x84\x99\xb3\x25\x3f\x90\x98\x04\x00\x0f\xd3\xf0\x7c\x5c\x27\xb0\xfa\x60\x99\x3a\x0e\x59\xb6\x83\x50\x9f\x56\xd9\x7f\xf5\x7d\xff\xf5\x1e\x6a\x9f\xb5\xf8\x30\x84\x00\xc2\x5b\x11\xb3\xa3\xa7\xcc\x6b\x19\xa7\x75\x17\xc2\xe9\x1f\xbe\x4d\x4d\x99\x21\x79\x80\x2d\x71\xff\x19\x9b\xce\xf1\x9d\xfd\xe8\xc9\x26\xe7\x92\x46\x5c\x90\x68\x4b\xc0\x72\xc5\xbf\xde\x21\x83\x27\x1b\x6c\x23\x96\x58\xb6\xfd\xa3\x83\xe8\xe9\x6e\xb4\xb5\x37\x14\x7a\xa6\x0b\x1a\x17\x1f\x05\x69\xe5\x38\x19\xaa\x07\x49\xce\x9d\x16\xe0\x1b\x64\x20\x8e\xb8\x1f\x8a\x67\x79\x40\x1f\xcb\x84\xa4\x61\xbe\x7f\x66\x70\x12\xc7\x73\x97\xa8\xaf\x90\x7e\xb1\x75\x19\x4d\x51\x14\x03\xe3\x00\xef\x21\xc9\x4f\xce\x9c\x61\xbf\xff\xf4\xec\x99\x31\x01\x8e\x36\x2c\x57\xf2\x06\x60\x4a\x46\x73\x0c\x42\x0c\x91\xa8\xbb\xbd\x6c\xb9\xfc\x0b\x03\x3c\xc5\x84\xe3\x75\x9a\xe4\x82\xd7\x71\x9b\xfe\xea\xa9\x80\x34\xad\xd0\x5a\xb0\x02\x5a\x27\xe3\x8e\x43\x6e\xb8\xde\x4d\x87\x36\x97\xb4\xa0\xb2\x32\x11\x0b\x91\x0a\x9a\x78\x57\x99\x12\xaa\x32\xca\xca\x6e\xc2\x90\xa0\x80\xcf\x38\x89\x7b\xa5\x4d\x62\xe7\xc3\x0b\x32\xad\xd8\xe1\xe7\xc9\x83\x24\x93\x3d\x95\xe0\x3e\x0c\x98\xff\xf2\x5e\xfc\xa4\x1b\x3f\x5f\x87\x57\x87\xbd\x7a\x30\x40\x7f\x03\x52\xe0\x64\x95\xa6\x39\x7b\xf4\xa9\x3c\x53\x0d\x95\x64\x43\x91\x7d\x0f\xbe\x61\xfd\xf4\xec\x19\x89\xaa\xff\x20\xba\xff\x8d\x20\x23\xe5\x09\xf5\xbd\xb7\xd1\xd7\x07\x1a\x3d\x99\xa4\x54\x9f\xc1\xb6\x83\x7e\x91\xee\x41\xf4\x6a\x8f\xc9\x81\xd8\x53\xc2\xd6\x94\xed\x2e\x89\xf6\x36\x92\x64\xa0\xe8\xce\x8b\xfe\xab\x17\xd1\x83\x2d\x00\x43\x80\x3c\x1a\x4e\x07\x75\xff\x19\x7b\xd4\x3f\x40\x16\x24\x99\x79\xa6\x34\x46\x84\x74\xc2\x59\x52\x3e\x1e\xdc\x79\x96\xa1\xde\xcd\xd5\x5b\xcd\xf9\xe3\x18\x10\xcf\xd7\xe3\xfb\xb0\x57\xa6\xdb\xc3\x7d\x5b\x1c\xb5\xc1\x8c\x96\xf1\x4e\x26\x9d\xc4\x35\xcb\x9f\x74\x38\x9b\x2c\xc7\x19\x4e\x4a\xc5\x4c\xeb\x77\x3c\x9f\x46\x9b\x46\x89\x8e\xea\x3c\x12\x93\xab\x4e\xae\x78\xc4\x0a\x43\xda\x6a\x87\xb2\x82\x96\xd5\xa4\x82\xa3\xca\x6a\xe4\xf5\xe3\xcf\x12\x22\x0e\x15\xd3\x45\xa0\xd4\x34\x69\x10\xfa\xde\xaa\x20\x03\xce\x7c\x03\x05\x73\x81\xf7\xcd\x90\xae\x75\x32\xbe\x18\x52\x3f\xbf\x96\x55\xaf\x03\xdb\x90\x88\x48\xf6\x3b\xae\x38\x95\x60\xe7\x0b\x2e\xc3\x9a\xd5\x09\x97\x6b\x78\x29\xe1\x0d\xfd\xc8\xb5\x81\x76\xb6\xda\x12\xd7\xa4\xe1\x50\xcb\xed\x68\xd1\xaf\x2a\x2c\x32\xc2\xee\x83\x78\xe3\xe3\xae\x30\xaf\xf7\xe4\xf4\xf9\x91\x2d\x0f\xa9\xc9\xfe\x78\x3d\x6f\xe1\x00\xd7\xd3\xf0\x3a\x71\xdc\xa5\x21\xaf\x23\x31\xfa\xf0\x81\xe4\x3a\x83\xf6\xdc\xef\x45\x9f\x77\xf3\x80\x4b\x74\x9f\x22\xde\xb9\xdd\xff\x66\x5f\xc1\x76\xc1\x82\x12\x48\x06\x51\x85\x14\x7a\x72\x80\xa3\xe1\x1d\xab\xff\x40\x02\xf0\xea\x6b\x35\x29\x78\x58\x18\xc2\x7e\xea\xc7\x32\xdf\x4c\x72\xc7\x33\x68\x2f\x94\x02\x70\xd1\xbd\xed\xe8\x8f\xfb\xf0\xf8\x71\x17\x68\x61\x72\x4c\x9b\x6a\x8b\x2c\x80\x56\x85\xd4\x77\x2d\x20\x2a\x4e\x7d\xaa\x9f\x65\x66\xbb\xc2\x4a\xb9\x40\xc5\x8a\x42\x9b\x9c\x8f\x11\x83\x35\x78\xec\xf2\xd0\x82\xa5\x96\xb4\x9c\x90\xfa\xb4\x59\x27\x00\x1f\xec\xdb\x2d\xcb\x07\xe0\x2f\xd2\xb0\x02\x65\x29\x4f\x29\x09\x79\x7c\x6d\x07\x00\x68\x86\x16\x21\x48\x1e\xb7\xd9\xc4\x6f\x01\x2c\x03\x9b\xfb\x2b\x67\x09\xbf\x3c\x21\xbf\xc0\xd7\xc6\x67\xa6\x84\x59\x65\x2c\xf8\x13\x78\x73\x61\x95\x2d\xce\x16\xb2\xfa\x0e\xb7\x07\x16\xec\x95\xb3\x10\xe3\x00\xda\xad\xfc\x04\xff\x5d\x27\xe4\x9f\xd0\xa6\x6e\xb5\x28\x18\xd9\x37\xc4\xda\xc9\x5f\x97\x21\x67\x40\xa5\xd5\x09\x39\xec\xef\x4d\x57\xbc\x94\xac\x66\x6d\x9f\xae\x50\x37\x24\x56\xb3\x09\x18\xcb\x96\x93\x55\x61\x81\xb2\xd2\xc8\x02\xdb\xac\x93\x69\x66\xa3\x99\xb6\xb4\x96\xbd\xe4\x5b\xb0\xa7\xf1\xca\x12\x16\x5a\xb7\xc9\x5b\xd3\xb0\x5c\xf3\xde\x54\x61\x41\x1d\x9a\xfe\x6c\x29\xbb\x73\x18\x7d\xbb\x2e\xde\x50\xd2\xea\x0b\x96\x80\x32\xa6\x15\xc8\x17\xc1\x40\x00\x14\x06\xf8\xbd\x79\xf4\xa3\x29\x35\x77\x24\xb3\x76\x6f\x0f\x64\x62\xda\x1a\xca\x58\x39\x8b\x67\xea\x1e\x5f\xbc\x56\x7e\x22\xfe\x16\x78\x61\x3a\x6b\x54\x64\x04\x43\x94\x2d\x9f\xc5\x2b\x67\x73\x6f\x9b\xc7\x67\xa6\x58\x89\xfe\x37\xfb\x83\x9d\xae\xf0\x65\xe4\x2f\x69\x38\x44\x87\xde\x4e\xde\x79\x0a\x99\x6a\xfd\xff\x7d\x24\x8e\x5a\x49\x27\x27\x6d\xd9\xed\x26\x11\x8c\x92\x42\xfc\x01\x80\x15\xcb\x53\xd5\xb7\x0f\x21\xef\x3a\x8b\x06\x09\xaf\x25\x7d\xca\x01\x90\x56\xce\x66\x56\x5e\xc1\x5d\x25\x0f\x7c\x87\x24\xfe\xb7\xfb\xb9\x4b\xf6\xd0\xf2\xfa\x7c\x23\xde\x3d\x04\x12\xd3\x0d\xcc\x1f\x8c\xb6\x60\x61\x56\x7b\x8f\x6d\x51\x49\x63\xf4\xdb\x4c\x95\x75\xd2\xf2\x99\x95\x72\x8e\x4c\x09\x0e\xcf\xe5\x30\x6c\xa7\xc1\x55\x11\x75\x9f\x36\xcf\x11\xe5\x95\x20\xf5\x4e\xc0\x59\x78\xf9\x2a\xa0\xcd\xbf\xfb\x61\x95\xd0\x7a\x35\xc4\xc4\x4d\x78\x48\x65\x85\x43\x90\x25\xc0\x20\x70\x8e\x28\xef\x05\x85\xac\xa5\xba\x01\xa0\x75\x8e\x88\x0e\x40\x2c\x08\x40\x5e\x51\x79\x7b\x4e\x05\x34\xbc\x0e\x5c\xcd\xd7\x17\x56\xaf\x8b\xb8\x18\xdd\xad\xb5\x68\x1d\x9b\xe1\x9f\x7d\x95\xb8\xc7\x74\x62\x52\x58\x11\xec\x58\x57\xa0\x24\x26\x7c\x84\x96\x0d\x89\x0e\x8e\xa7\xbd\xb5\x92\xdd\x9c\x22\x40\x4c\x61\x69\x72\xbb\x42\x53\xa3\xed\x36\xbd\x9b\x01\xe1\x17\x94\xe4\x92\x9e\xfd\x4b\xbc\x2a\x7d\x31\x66\x89\x33\xde\x4d\xea\xcf\x2d\x53\xa7\x1a\x5c\xee\x3f\xf9\x76\x48\x49\xa3\xe3\x3b\x64\xc1\x6b\x02\x4d\xf5\x85\xa9\x4b\x93\xb0\xf3\x50\xab\x09\x9e\xe5\xb0\xe9\x75\x74\x71\xbf\xf8\x23\x40\x35\xde\xdf\x83\xa2\xac\x27\x40\x5e\xf4\xfa\x28\xda\x3f\x22\xf1\xef\x0e\xfa\x47\x9a\xfc\x12\xac\x9d\x27\x4d\x21\x1d\x54\x20\x18\x15\xd0\x8d\x6d\x84\xe7\x11\x2e\x22\xc8\x82\x32\x56\xf4\xdf\xec\x36\xb1\xfc\xc6\xb2\xbd\x42\x93\x7b\x43\xee\x94\x2f\x11\x9e\xcc\x8a\xc7\xdb\xdd\xf8\xcd\x61\xbc\x7b\x18\x1d\x6d\x66\xa8\x37\x0e\x8d\x78\x0b\x1f\xd5\x6a\x96\xe3\x78\x37\x6b\x6d\xcb\x96\xcc\xee\x35\xdc\xa8\xff\x07\xa9\xd5\x9a\x76\xa0\xfb\xfd\xe3\x6a\x50\x06\x86\x9a\xaa\x4b\x72\x3d\x99\x8d\x00\xa9\x1e\xae\x57\x13\x77\x86\xe2\x6f\xb8\xd5\x13\x7f\x00\x48\x1f\xfc\xa1\xc2\xeb\x7f\xac\x5d\xb1\x34\x15\x5f\xbe\x7a\x69\x7e\x6a\x66\x7c\x76\xfe\xfd\x0b\xd3\xb3\x97\x6b\xe7\xc7\xe7\xc7\xc9\xc4\xf4\x95\xf9\xc9\x2b\xf3\xe4\x83\xa9\xf3\xe7\x27\xaf\x7c\xac\x11\xf8\x11\xdb\xaa\x9f\x3d\x20\x83\xcd\xcd\xc1\x67\x47\xef\xc7\xbf\x7f\x10\xdf\xdf\x4d\x4e\x5d\x24\xfe\xcb\x8b\xc1\xbd\xad\xf8\x88\xed\x24\xec\x7c\x15\x3f\xdf\xfa\x58\xa3\xc4\xcc\xec\xd4\x87\xe3\xf3\x93\x04\x6a\x2f\xa8\x55\xc9\x21\x48\xaa\x2a\xaa\x60\xc9\xf1\x16\x2c\x47\xc0\x2b\x7f\x2c\x4f\xd3\x1f\x89\xdc\xae\xa0\x5e\xaf\x7f\x4c\x3e\x12\xcf\xc5\x8b\x5a\x25\x8e\xd6\xa3\xa7\xbd\xe8\xd5\x26\x77\xd8\x7e\xcc\x97\x0d\xf2\x11\xa6\x81\xa1\x34\x91\x19\x86\xaf\x68\x54\x5b\xb6\x9b\x4d\xea\xea\x6a\xca\x2f\x84\x8b\xbc\x36\x1f\x9e\x2f\xc4\xba\xb2\xa1\xa7\x0d\x79\xdf\x7e\x3a\xe8\x6a\xa6\xb4\xa5\x5d\xe9\xd8\xf1\xf5\x81\x06\xa4\x08\xe6\x87\x76\x33\x1f\x3c\xda\x00\xa6\x7b\x4d\xee\x7c\x9a\xde\x4d\x7f\xbf\x20\xf8\xd7\x74\x2b\x82\x11\x3b\x40\x5b\x84\x34\x7c\x2b\x58\xd6\xea\x0e\x81\xcb\xdf\x7e\x1d\x7d\xae\xaf\x34\x71\x02\x03\xaa\x9d\x49\x90\x1a\x90\x38\xd8\xee\xf5\x5f\x6b\x2e\x65\x54\xa9\xfa\x01\x90\x16\xa8\x95\x64\x10\xa0\x29\xd3\x09\x25\xe6\x18\x59\xb4\x6c\x3d\x4c\x02\x0f\x5b\x15\x18\xd8\xf7\x9f\x0d\x36\x35\x1f\x39\x21\x0c\x2f\x07\xab\xa6\x51\x0d\x8f\x80\xe7\x92\x10\x54\x9d\x34\x61\x6f\xab\xaf\xe6\x4b\x14\x9b\x94\x36\xf4\x40\xec\x48\x9a\xe8\x83\x85\xd5\x90\x06\x70\x4e\x75\x3c\x4b\x6f\xd1\xb2\x65\xf4\x8b\x43\x8c\xf3\x02\x84\x35\xd6\xde\x43\x23\x4e\x60\x63\x91\xd4\x6a\x2b\xc6\x9b\x3d\x7d\xc1\x95\xaa\x25\xc4\x81\xb7\x6a\x39\x1e\xb5\x55\xab\x58\xb0\xdd\xd1\x21\x20\xcd\x5c\xd5\x14\x31\x4f\x54\x98\xa4\xda\x45\x06\x0a\xeb\x09\x41\xb0\xb4\xde\xa6\x55\xd0\xd4\xb5\x19\x3e\xcf\xa2\x3f\xdd\xd3\x95\x66\x46\xb0\x76\x1e\x76\x8f\xa2\x6f\x91\x63\x4c\x03\xb9\x28\x6c\x99\x82\x15\x96\xb0\x83\xc7\x60\x5b\xd3\x03\x4d\x3b\xd0\xe6\x89\x3d\x7c\xc8\x96\x91\xdb\x1a\x18\x3c\x56\x52\x3b\x3b\x44\x51\xcd\xec\x00\xb3\x10\x56\xf6\x4a\xc3\x23\x1d\x85\x76\x8c\xa2\xda\x38\x8b\xe2\x9b\x7e\x23\x43\xac\xcc\x05\x34\x95\x1d\xca\x20\xb4\x03\x62\x09\xd8\x73\x7c\x65\x0c\x54\xb5\x5c\xe2\xdd\x74\xe5\x43\x43\x74\x95\x0e\xa4\x7b\x5d\xe4\x24\xaa\x00\xe0\xe0\x0e\xfa\x74\x33\xfb\x98\x19\xdd\xd1\xfd\xc7\xf2\xac\x89\x0c\x50\xd7\xdc\x61\x09\x2a\x16\x39\xc6\x50\xfe\xf7\xc6\xa2\x74\xca\x42\x3b\x6a\xa8\xf2\x7f\x4f\x13\x44\x15\xc4\x7a\x18\xba\x27\xdd\x13\xbc\x7b\xd2\x7d\x36\x52\xf7\xe4\xf4\x03\xeb\x9e\x9c\x5e\xd3\x75\xcf\xb0\x04\x63\xf7\x8c\xde\x2f\x81\x76\xb2\x89\xaa\xb5\x93\xed\xa6\x3e\xa6\xf7\x41\xf4\xf9\x63\x38\x53\x3f\x5f\xcf\x2f\x4d\xad\xc6\x32\x0f\x29\xb4\x5d\x72\x0a\x11\x46\x4f\xa5\xf8\xe1\xf0\xe1\x29\xd2\xf6\xbd\x36\xf5\xb5\x28\xee\xa2\x2c\xc6\xd9\xdc\x56\x88\xbf\x3e\x7b\x28\x65\x0c\x3e\x7b\xc3\x41\xd7\xe1\xe2\xe5\x08\x51\x41\x35\x8b\x17\xa7\x41\x30\x46\x68\xea\x4a\xae\x90\x15\xcb\x87\xe0\xdf\x19\xae\xb6\x08\x42\x0e\x96\x55\x3a\x20\xb7\xa3\xb5\x7d\x07\x8f\x77\xfa\xaf\xbe\x27\x3c\xae\x27\x47\x54\xbc\xbb\x7e\x3a\xfa\xec\xe1\x7b\x24\xea\x6e\xc9\x21\xb4\x21\xb1\x4e\x75\xad\x5a\xd1\xe3\x4d\xb0\xf1\xf9\xea\x99\x36\x1d\x00\xcd\x32\x12\x76\x7c\xe4\x0c\x5f\x5c\x64\x07\xef\xc0\x73\x28\xa1\x8d\x65\x0f\x6e\x0b\x64\xb4\x0b\x75\x43\x7f\x55\x81\xca\x38\x9f\xec\x66\x7a\x0b\x2a\x15\x7a\xc4\xf9\x20\x76\x48\xfc\xfd\x4e\xfc\xe9\x43\x12\x3f\xda\x8a\xbf\x7f\x98\x4d\x2c\x07\xfb\x4f\x5b\x4f\x7e\x3b\x6c\xc7\xc4\x12\x26\x22\xe4\x0d\x91\x54\x8b\x3e\x85\x2b\x03\x76\x3a\xd7\xb5\x65\xff\x30\xfa\xc3\xa6\xb8\x53\x8a\x7b\x7b\xd1\x1f\x34\xe6\xfc\x70\x2a\x88\x1d\xe8\xce\xf8\x39\x79\x1e\xeb\x9a\xf8\x99\x5c\xb1\xe2\xdc\x13\x50\xdd\x18\xc8\xa9\xe1\x50\xd2\x03\x48\x2e\x0e\x4e\x05\xa0\x3b\x16\xe5\xd6\x0d\x14\xf2\xc8\xde\x58\xa9\xee\x2c\x01\xc8\xee\xa6\xae\xc5\x9e\x76\xdb\x96\x4c\x83\xf9\x25\xe5\x69\xaa\x65\x84\xaf\x4f\x41\xbf\x99\x71\xec\x33\x12\xcd\xc7\xb4\x5c\xb9\xc6\xc3\x9a\x10\x0f\x47\x0d\x81\x10\x35\xe5\x36\xe9\x27\xb7\x6e\x8d\x11\x9f\x5a\x81\xe7\x22\xfb\xcf\x27\x76\x98\x9a\x12\x63\xcc\x46\x09\xaf\x07\xa1\x15\x76\x02\xf9\xca\x1c\xfc\xa9\x4f\xe7\x51\x34\xcc\xaf\x32\xde\x3d\x8c\x7b\x7b\x23\x55\x69\x6c\xa0\xfe\x6c\x5e\x74\x0a\x95\x12\xb4\x21\xfa\x6a\xa3\x74\x32\x42\xba\x54\x91\x42\x8c\x33\x9d\x12\xdb\x5d\xa6\xbe\x1d\x22\xb7\xac\xed\xca\x30\xfd\x82\xa8\x7c\x09\xe0\x89\x91\xb3\x32\x86\x89\x99\x13\x77\x6f\xc7\x9f\xfe\x86\xf4\x5f\x7d\x1f\x3d\xd5\xe4\xed\x88\xca\x57\x64\x60\xab\xd8\x8b\x26\x2e\x5c\x9f\x9b\x1f\xbf\x38\x75\xe5\xe2\xf5\xf9\xa9\xcb\x93\xd3\x57\xe7\xc5\x9a\xa9\xfd\xea\xe9\x1d\x68\x58\x00\x7a\xca\x87\xf5\xec\x1f\xfc\x56\x91\x3d\x92\x9e\xb3\xf3\x57\x67\x8e\xa5\xa7\x2a\xe0\x18\x7a\x9a\x58\xeb\xf0\x36\x2c\x3a\x7a\xa8\x2b\x1a\x84\xc9\xbd\xb9\x4e\xc6\xf3\x8d\xf8\xf9\x7a\xf4\xfc\xd7\xfc\xf2\xd3\x20\xaa\xd3\xc6\xb3\xbe\xd6\x50\x13\xa2\xc4\xfd\xa1\xc8\xf0\x1a\x6c\xbf\xd0\x0c\x6f\xce\x88\xa0\x9b\x1f\x40\x52\xa0\x3d\xdd\x3a\x5e\xe3\x86\xbe\xec\x93\xbd\xfe\x1b\x8d\xcd\x67\x5c\x63\x0b\x96\x55\x2c\xab\xed\x02\x51\x58\xd3\x5e\x53\xc2\x8d\x61\xb7\x67\xc5\xaa\xe5\xc2\xb9\x9e\x4b\x16\xac\xc0\x6e\x14\x79\x38\xc4\x45\x77\x72\xf7\x6a\xb8\x7e\x70\x3d\xed\x15\x93\xb9\x18\x5c\xc8\xd8\x4d\x99\x23\xc0\xfd\x6c\x1c\x1e\x46\x27\x12\x1c\x6c\x80\x35\x26\x36\xcf\xfc\x89\xa4\xa9\xb6\x08\xb5\x47\x5b\x4a\xbb\xe4\x9b\x8a\xb1\xf3\x9b\xae\x1c\x9c\xa1\xf2\xcb\x31\x03\x0e\x23\x2d\x74\x85\xc1\x70\x13\x99\xc1\x3a\x58\x2e\x10\x23\xa3\x37\xd6\xd6\xea\x57\x3c\xf7\x17\xec\xfb\xf3\xb0\x97\x60\x1c\x5d\x29\xfa\x0d\x96\x57\xa3\xe6\x1b\xeb\x65\x68\x74\x08\x97\xf5\x77\x9d\xda\x1d\xc3\x00\x0c\x82\xd7\xf9\xfa\x62\xba\x3e\x33\x96\xf3\x7c\xad\x8d\xf6\xf9\xbe\xd6\x40\x13\xc4\xe6\xda\xee\xeb\xc6\x6f\x34\x1e\xcd\x02\xf2\x50\x8c\x84\xd7\x52\x21\x40\xe6\xbd\x6e\xf2\xcb\xf4\x79\xcd\x7a\xe3\xd3\xb6\xc7\x09\x95\xaa\x79\x2a\x93\x09\xca\x8c\x26\xed\xa4\x97\x33\x34\xbe\x7b\x7b\x70\x57\xd3\xe3\x19\x59\x5a\x6b\x28\x23\x4c\xdb\x24\x20\x5b\x68\x12\x2b\x0c\x7d\x7b\x01\xe8\x06\x9a\x76\x70\xe3\x3a\x74\xd4\x29\x41\xce\xa2\xed\xb0\x2e\xc4\x7e\x7c\xfa\x9b\xb8\xfb\x32\x55\x10\xe2\x4c\x80\x81\x45\xbb\xe1\xe4\x55\x2d\x8d\xbc\x8a\x35\x27\xe5\x46\xac\x18\x37\xa2\x8a\xb5\xf2\x42\x23\x56\x09\x59\x91\x15\x6b\xc4\x32\x10\x0e\x59\x54\x21\x5b\xbe\x04\xc1\x21\x81\xa4\x1c\xdd\x48\xd9\xd9\x88\xb7\xbf\x4f\x31\xb6\x10\xd3\xdc\x2d\x96\x58\x41\x4e\xa1\x08\x4d\xd9\x8e\x5b\x0b\x2d\xad\x33\x5a\x5b\xc8\x35\xb8\xef\x25\x49\x6f\x7e\xe9\xea\x98\x66\x3a\x39\xb0\xfc\x6b\x1d\xf9\x7c\xc7\x30\x16\x1e\x19\xfa\xcc\x2c\x75\x24\x00\xb2\x72\x22\xf5\x17\x17\xd5\x65\xea\x49\xdd\x53\x59\x17\x66\x21\x86\x7d\x52\x91\x62\xd8\xf9\xd2\xf1\xc4\x85\xa2\xe4\x6d\xa2\x51\xda\x75\x94\x76\x7d\xa9\x63\x37\xc9\xd4\x95\x6a\xa1\x21\x42\xc6\x71\x0a\x17\x7e\x27\x4d\x69\xf0\xad\xeb\xcc\x15\xf0\x8f\x6b\x0a\xda\x86\xf1\xb6\x7b\x38\xf8\x52\x63\xc3\x17\xf3\x54\x18\xca\x21\xfe\x8e\xde\x91\x90\x01\xd3\xd1\x6c\x9d\x20\xaa\x40\x88\xae\x68\xb0\x2c\xb9\x47\x15\x2f\x5e\xd3\x0e\x4c\x2e\xea\xb9\xb9\x0f\x78\x92\xad\xea\xc3\xe3\x79\xf1\xdb\x1b\x83\xed\x17\x19\x8e\x5d\xcd\xde\x50\x50\x3b\xb1\x5d\x0e\xe2\x63\x6c\x1a\x77\x6c\xbc\x63\xa5\xb8\xd3\x1e\x8e\x3a\xa7\x54\x20\x16\x5d\x40\xa2\x41\x9f\xac\x22\x59\x81\xa3\xe8\x25\xfb\xea\x54\x1a\x88\x48\xa7\x5e\xd9\xbe\xcb\xd5\x35\x25\xbf\x8c\xb6\xf2\x93\x2e\x6a\x03\x79\x32\x3a\x18\x3e\x5c\x8f\xd3\x3e\x57\xab\xf9\x38\x83\xe9\xd8\xa3\x48\x19\x3d\x15\x9a\x7f\x9c\x76\x0f\x8d\x8b\x51\x9b\x3d\x52\x7b\x5d\x2f\x4c\x7d\x73\x5d\xed\xe5\xfb\x79\x47\xf1\xaf\x55\xe8\x06\x85\x76\xbc\xaa\x1e\xa3\x2a\x10\x1a\xe2\x6f\x10\x43\x44\xb7\x18\x87\x96\x1f\x02\xd3\x5c\xb5\x0d\x93\x15\x33\x99\x93\xbd\xf8\xc9\x03\x83\x39\x69\x3a\x08\x1a\x8e\x7f\xe8\x75\x1f\xa9\xa0\xd7\x6e\xeb\x9d\x2a\x70\xa9\xab\x1f\x67\x58\x98\x58\x90\x6e\x78\x96\xf8\xb4\x69\xfb\xb4\xa1\x3b\xfa\x9f\x1d\x7c\xb1\xc9\xfd\xda\x24\x7e\xb2\x2f\xd8\xa9\xbe\xec\x92\x82\x7a\x98\x4d\x5f\xed\x68\x8d\x44\x74\x56\x48\xab\x9f\x07\x0c\x9f\x1c\x59\x9c\xf5\xc5\xbc\x0e\x04\x29\xbb\xb4\x01\x19\x46\x08\xe0\x04\x1e\x23\xea\x8f\x61\x52\xec\x52\x42\x06\xba\xac\xbf\x53\xd7\x54\x01\xec\xae\xe6\xcb\xab\x62\xee\x65\x55\x8a\xf9\xc2\x2a\x4d\x59\x6c\xb8\xa7\x0a\x57\xdb\xda\x2e\xeb\xed\x0d\x76\xb6\xf3\x8b\x75\x2c\x1d\xe2\xaf\xe6\x7d\xf7\x86\xeb\xdd\x74\x05\xdf\xa3\x36\x48\x20\xde\xde\x14\x99\x9f\x90\x06\x01\x8c\x8f\x3a\x91\x66\xef\xb8\x64\xf1\xd5\x14\xf7\x75\xd7\x06\x57\x67\x2f\x69\x8b\xe8\x86\xb2\xb1\x8c\x6e\x11\xbb\x3a\x7b\x49\xb3\x82\x75\x4c\xe8\x6e\x45\x3c\xa7\x9d\x40\x7f\x7a\x31\xd3\x8a\x76\x38\xf6\x17\x47\xfd\x2a\x15\x83\xab\x97\x24\x61\x9b\x8b\x94\xe1\x60\x17\x7a\x49\x86\x6b\x81\xfc\x42\x2b\xd4\x5f\xf0\x02\x0a\x69\x7a\x3c\x56\x12\x72\x61\xaa\x0a\x19\x11\x3e\x65\x55\x7f\xea\xda\xd9\xc8\x2f\xc2\xe9\x54\x79\x32\xd2\xad\x5b\xe4\xf4\xf8\xcc\x94\xd0\x1d\xae\x64\x13\xca\xc7\xb9\xd0\xb7\xdd\xa5\x5b\xb7\x74\x44\xd9\x59\x59\xa7\x13\xf2\x48\xad\x24\xad\x52\xed\xb6\xb8\x4a\xbe\xc4\xa6\x1b\x1b\x16\x65\xa3\x9b\xf3\x8b\x57\x8a\x79\x5e\x5b\xab\xff\xc2\x76\x2d\x9f\x87\xd4\xc8\x8f\xb9\xb6\x56\xcf\x34\xa1\xd2\xa7\x5d\x5b\xab\x4f\x5c\x10\x48\xa6\x6d\x5b\xaf\xbf\x7c\x6b\x7c\x66\xaa\x58\x94\x09\xf3\x4f\x7d\xaf\x00\xd8\x0f\x50\x15\x3b\x6e\x38\xbd\x28\x6e\x16\x6e\xdd\x92\xb9\xa8\x26\x8c\xd5\x6c\x21\x89\xbb\x97\x9b\x20\x18\x3f\x2a\x4c\xf0\x63\x42\x31\xc0\x56\xa0\x53\x9a\xe3\x6d\x87\xdf\x37\x85\xc9\xaf\xad\xd5\xcf\xdb\xc1\x0d\x80\xb2\xbc\x75\x8b\x78\x8b\x84\x3f\xe1\x40\xb7\x86\x88\x3e\xa5\xd8\xfb\xd9\x52\xda\xba\xbc\x9b\xae\x50\xcb\x10\x14\x97\x79\xb3\x44\x8c\x5c\x6e\x64\xd3\x35\x77\x7e\x6a\xe6\x1c\x91\xa0\x9b\x17\xc4\x67\x51\xe0\x37\x05\xde\xa5\x02\xad\x01\x38\x19\x98\xd1\xad\x22\x5e\x1a\xbe\x7a\x5e\xd5\x83\xcd\xdb\x49\x62\x71\x1a\x0b\x73\x67\x08\x4e\x01\x52\x6f\x5f\x1f\x2a\x78\x98\x79\xca\x56\x07\xc7\x14\x17\xf7\xd7\xdc\x6b\x21\xfc\x1f\x7b\x44\x82\xbd\x62\xc6\xa5\x48\xcd\x24\x37\x97\x29\x26\x75\x5f\x03\x3a\xa3\x4e\xb0\x2c\x2b\xbf\xf6\x77\x70\x12\x03\xa2\x5e\x91\x63\x7d\xd3\x0e\x97\x6d\x2c\x80\x96\x2b\xb3\x89\x00\xfd\x84\xe7\x9a\x61\x82\x3a\x5b\xac\x38\x33\x42\xc3\x6b\x52\x88\xdc\x14\xdf\x44\x6a\x92\xfe\x24\x01\xa5\xb9\x60\x6f\x32\x29\x20\x48\x49\xc9\x87\x53\x25\x4d\xda\x0e\x97\x39\x6d\xb2\xc4\x56\x35\x7f\x46\xb5\xab\xf0\x0b\xb2\xa5\x12\x99\x1a\x10\xb1\x02\xf3\x89\x37\x20\x7f\xf9\xe1\xc3\x68\xef\xd7\x12\xbf\x89\x9d\x3a\xf3\x3a\x2e\xf9\x6c\x1c\x1b\x61\x8f\x44\xdb\x9b\xe9\x8c\x3a\xcc\x52\xcd\xae\x08\xac\x8d\x29\x04\x38\xa5\x4c\x82\xfb\xd6\xcd\x0c\x9d\x9c\x3e\x35\x8d\x1c\xa8\x44\x22\xcb\x8a\x54\x4f\x3d\xc0\xec\xc8\x23\x10\xc7\x5e\xe7\x58\x10\xb8\xaa\x38\xfc\x3e\xef\x00\x13\x77\x6d\xad\x7e\x01\xb3\x77\xd9\x92\xe8\x3a\xab\xe4\xa6\xe7\xdf\x08\x48\xa7\x0d\x90\x13\x17\x88\x62\x17\xb0\x95\xef\xb2\xf5\x89\xdd\xea\xb4\x24\x1b\x74\x1d\x41\xcd\x78\x02\x86\x1d\x90\x0c\x5b\xb4\x61\x08\xca\x7a\x65\xe0\x2a\xaf\x8e\x13\x4f\xe7\xd4\xd6\x7f\xb3\xc9\xc6\x08\x22\xc1\x3c\xdf\xe4\xab\xa5\x0a\xf4\x21\x8c\x3c\x18\x34\x70\xdc\x67\x07\xff\x8c\x52\x49\xca\x7d\x89\x4e\xe1\x57\x6f\x41\x4e\x67\xcc\xf2\x5b\x39\x29\xf8\xbf\x9c\x48\x77\x3c\x82\x10\xd1\xa1\xce\x18\xaa\x8d\xa3\xd8\xb0\x39\x35\xd8\xee\xc6\x5f\x3c\x7c\x27\x1d\xe1\x20\xce\x86\x44\x9b\xc6\x54\x6a\x43\x3b\x32\x05\x4c\x19\x59\x4a\xe4\xe0\x65\x38\x66\x0a\xab\xad\x4a\xb8\xa4\x56\xc8\x08\x71\x94\x6c\xcc\xd1\x56\xda\x44\xb8\x4c\x5b\x85\x16\x82\x52\xe8\xfd\x4c\x19\x43\x3d\x8a\xae\xe5\xda\x99\x2e\x53\xa5\x49\x49\xb1\xcb\xa3\xd4\x75\xb9\x6a\x65\x73\xf6\xbf\xb2\xce\xf8\x04\x02\x57\x3a\x2d\xf1\x81\x02\xe5\xdb\x56\x3b\xe2\x81\xe4\x00\xfb\xf8\x9a\x7b\xc5\x03\x18\x29\x00\x1f\x53\x20\xab\x74\x73\xf5\xef\xeb\x67\xea\x67\xfe\x4b\x35\x1e\x13\x56\xa1\xd7\xa4\x0e\xc2\xe4\x13\xf1\xa7\x30\xe3\xcb\x1c\x56\x8d\x22\x14\xb6\xdc\xc2\xb4\xd2\xb5\xb5\xfa\xb4\x88\x1c\xe4\xc2\x8c\x39\x91\x39\xef\x17\x4c\xc3\xec\xeb\xb6\x4b\xda\xbe\xb7\xe4\xeb\x93\x7f\xf3\xea\x00\x42\x5f\xbd\xcf\x32\xa7\x48\xd0\x69\x34\x28\xd5\x9f\xda\xf3\x6a\xe9\xbe\xd4\x1e\xdf\x87\xb2\x22\x30\x75\x64\x01\x90\x89\xe0\xe8\x46\x3c\x1f\xb2\x2c\x30\xd4\x54\x5f\x6b\x5a\x4c\x92\x5b\xb1\x7f\xc4\x16\xd5\x47\x87\x22\x92\x3f\xea\x6e\x01\x8c\xeb\xa1\x4c\xb4\x30\x23\xea\x95\xd0\xf0\xb8\x9a\x1d\x53\x9f\xd2\x19\x29\x06\x5d\x72\x33\x50\x0a\x15\x99\xe5\x41\x27\x00\x13\x3e\xe3\xf9\x21\x5b\x2e\x8a\xc3\x45\x74\x25\xcb\x85\x91\x08\x58\xf2\x40\x2c\xab\xc6\xb8\x92\xa1\xb7\x0b\x02\x4d\xd8\xfb\x18\x36\x22\xf6\x43\xdc\x54\xe6\xbd\xd0\x72\xc4\xa3\x04\x0c\xca\x1c\x62\x32\x2c\xec\xfd\x21\x59\x69\xc6\xb1\x82\x98\x94\x84\xc5\x44\xb6\xa7\xe0\x1e\x3f\xa7\x44\xc1\xd5\x3e\xc2\xb1\xc3\x55\x87\xd0\xb1\xe0\xea\x23\xa7\x44\xd1\x6d\x88\xa1\x12\x72\x9a\x1d\xb1\x31\xfb\xd5\xe8\xc4\xd2\xd7\x99\x91\x60\xd0\x20\xcc\xac\x9d\x75\x79\x22\xcf\x39\x8f\xf3\x2b\x69\xfe\x4b\xfa\x54\x88\x54\x5f\x09\xcc\x1a\x5e\xdb\x98\x21\xef\xc3\xf4\x1a\x5c\xe7\x31\xe4\x3c\x80\x0f\xc0\xb8\x01\xbe\x39\xcd\x46\x91\xa3\x18\x5f\xda\x72\x95\x1b\xe9\x88\x81\x90\xff\xfc\x5e\xcf\xe2\xd1\xc7\x1d\xdf\x19\x23\x6d\x87\x5a\x01\x15\x78\xe8\xc4\xc2\xa7\x40\xab\x0f\xf0\x45\xe7\xde\x7f\x7f\xd5\xeb\xf8\xd7\x7d\xda\xf6\xea\x0d\xaf\xa5\xef\x00\xa8\x43\xae\x40\x09\xd2\xf8\xd5\xd9\x4b\x43\x09\x95\xf9\xb2\x91\x37\xf4\x31\xb3\x93\xa1\x90\x42\x5f\x5f\xa6\x8d\xdc\xfe\x63\x26\x30\x9c\xec\x42\xda\x44\x5b\x48\xd8\x41\xc2\x08\x1a\x9a\xf6\x86\x46\x55\x16\x3a\x14\x06\xf5\x7f\x7d\xfc\xff\x07\x00\x00\xff\xff\x08\x11\xd2\x41\xaa\xdd\x03\x00") + +func cfI18nResourcesKoKrAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesKoKrAllJson, + "cf/i18n/resources/ko-kr.all.json", + ) +} + +func cfI18nResourcesKoKrAllJson() (*asset, error) { + bytes, err := cfI18nResourcesKoKrAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/ko-kr.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesPtBrAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x4d\x6f\x23\x39\x96\x28\xba\xbf\xbf\x82\x37\x7b\xe1\xac\x86\xa4\xcc\xac\xaa\x1e\x0c\x7c\x71\x71\x47\x65\x2b\x33\xd5\xe5\xb4\x3c\xb2\x9d\xdd\x35\xa5\x82\x8b\x8a\xa0\x24\x96\x23\xc8\x48\x92\x21\xa7\xcb\xe5\x0b\x3c\xbc\xc5\xe0\x2d\xde\xea\xe1\x6d\xde\xea\xd6\xcc\xa2\xd0\x0d\xf4\xaa\x31\x9b\xd9\xfa\x8f\x3d\xf0\x90\x8c\x0f\x49\x8c\x08\x85\x64\x67\xf5\xdc\x99\x01\xba\x9c\xa1\x88\x73\x0e\xc9\xc3\xc3\xc3\xf3\xf9\xed\x7f\x41\xe8\xee\xbf\x20\x84\xd0\x33\x1a\x3e\x3b\x44\xcf\x26\x6c\xc2\x2e\x86\x67\x87\x13\xf6\xac\x63\x9e\x2b\x81\x99\x8c\xb0\xa2\x9c\xb9\x17\x8e\x87\x47\x7d\xfd\xc6\x7f\x41\xe8\xbe\xb3\x09\xc2\x37\x3c\x15\xe8\xf7\xe7\xa3\x53\x24\x95\xa0\x6c\x8e\xe4\x2d\x53\xf8\x23\xa2\x12\x51\xb6\xc4\x11\x0d\x7b\x08\x9d\x09\x9e\x10\x51\xf8\x49\x2d\xa8\x3c\x44\x28\x98\x21\x49\x54\x57\xa4\x8c\x51\x36\xef\x12\xb6\xa4\x82\xb3\x98\x30\xd5\x5d\x62\x41\xf1\x34\x22\xdd\xb9\xe0\x69\x82\x0e\xee\x26\xcf\x18\x8e\xc9\xe4\xd9\xe1\xe4\xd9\x12\x47\x29\x99\x3c\xeb\xac\x3f\xba\x3f\xa8\x18\xcb\x79\x8a\x91\xa4\x9a\x04\x82\x42\x8c\x24\xf9\x90\x3e\xfc\x99\x05\x14\x1b\xfa\x1f\xfe\xa4\x29\x7e\xf8\x39\xa2\x21\xee\x21\xd4\xcf\xde\xc5\x21\xf9\x90\xe2\x10\xeb\x37\x88\x54\xf8\xf0\x51\xe8\x7e\xd4\x19\x96\x0a\xcf\xff\x16\x67\x78\xaf\x74\x7b\x66\xf8\xb7\xe8\x62\x41\x24\x41\x92\x88\x25\x0d\x08\x4a\x22\xcc\x24\x5a\xe0\x25\x41\x98\x21\x2c\x25\x0f\x28\x56\x24\x44\x01\x97\xaa\x87\x8e\x04\xc1\x4a\x2f\x03\xce\xbe\xa0\x4c\x2a\xcc\x02\x82\x6e\x68\x14\x21\xca\x82\x54\xc0\xfc\x9b\x2f\xbc\xf3\xf5\x5b\x34\x90\x92\x48\x40\xc8\x25\x0a\x2d\x09\x0f\xbf\x70\x89\xd4\xc3\x9f\x63\x94\xc6\x28\x48\xa5\xe2\x8e\x88\x90\xf7\x50\x1f\x05\x82\xe2\x87\x5f\x1e\xfe\x95\xeb\x2f\xd2\x18\x03\xfa\x87\x7f\x81\x69\x2e\xc0\xd0\x74\x70\x21\x88\x78\xf8\x19\x31\x22\x25\x31\xb0\x7a\xbe\x69\xe8\x27\x09\x92\x0a\x0b\x45\xc2\x0a\x89\xa0\xdf\xa2\x8c\x02\x31\x7e\xb1\x60\x61\x29\x82\x82\x05\x66\x73\x12\x22\xc5\x1d\xf0\x0e\x9a\xa6\x0a\x31\xae\x08\x52\x0b\xac\x10\x55\x68\x81\x25\x7a\x99\xcd\xa2\xec\x79\xf1\x57\xe1\xbb\xbb\xeb\xf5\x93\xe4\x14\xc7\xe4\xfe\x1e\xdd\x60\xe9\xf0\xa1\x54\xea\xd5\xb2\xeb\x11\xc7\x98\x85\xe8\xfb\xbb\xbb\xde\x91\xf9\xfb\xfe\xfe\xfb\x8a\xe1\x8e\x10\x5e\x05\x3d\xe3\x34\x9b\x01\x94\x4a\xcc\x42\xae\x79\x96\x68\xe0\xf0\x8f\x35\xe0\x1e\xa2\x4f\x39\xc2\x09\x45\x84\x85\x09\xa7\x4c\x69\x7e\xf7\xf3\xca\x29\x61\x8b\x34\x46\x8a\x88\x98\x32\x1c\xe9\x85\xee\x9f\x0d\x51\xc0\xd9\x8c\xce\x53\xa1\x59\xc3\x87\x67\xcc\x53\x3d\xd7\x1c\x4d\x09\x4a\x59\x8c\x93\x84\x84\x5a\x42\x30\xae\x50\x90\x0a\x41\x98\x8a\x6e\x91\x7d\xae\x38\x52\x0b\xa2\x47\x1d\xd1\x00\xf0\xfb\x69\x1a\x73\x85\x51\x90\xfe\xc0\xf5\xc7\x04\xeb\xcd\xc9\x35\xfb\x3d\xfc\x8c\x04\x51\x54\x13\x85\x98\xe6\x53\x22\xd5\xc3\xcf\xe6\xa5\x10\x23\xac\x52\x1c\xe9\x97\x09\x4a\xb0\xc0\x48\x4f\x83\x41\xb6\xf4\x0f\x42\x1f\x54\x08\x5d\x4a\x82\x0e\x82\x19\x8a\xb1\xb8\x26\x2a\x89\x70\x40\x50\x57\xa2\xf3\xc1\xf8\xfd\xf0\x68\x70\xa0\xa9\x5f\x52\x72\x83\x42\x22\x03\x41\x13\x4d\xaa\x44\x7c\x86\x28\x0b\xe9\x92\x86\x29\x8e\xec\xee\xe6\x33\x84\xd1\x9c\x2e\x09\x73\x9b\xd8\x3f\x4c\x38\x02\x6b\x51\xc3\x50\x96\x54\xa6\x38\xa2\x3f\x62\x61\x49\x78\xf8\xe5\xe1\xdf\x08\x6c\x6d\xbb\xc9\x33\x4a\xa8\x34\xdb\x17\x85\xc4\x2e\x6a\xc8\xb3\xbd\x5b\x3d\x0d\x7d\x29\xe9\x9c\x21\xc1\x23\x22\xd1\x0d\x55\x0b\x74\xa0\x59\xce\x2c\xe5\xa5\x24\xe2\xfe\x1e\x84\x27\x17\xf3\xae\x7e\xe9\x00\x69\x9e\xdf\xfc\x8e\x4c\x70\x40\xcc\x5b\x35\x13\x70\x4c\x34\x56\x82\x66\x29\xb3\xa3\x0a\x78\x5c\x8b\x99\x34\xc0\x5b\x35\x56\x98\x76\x0d\xe1\xf5\x05\x16\x73\xa2\xb2\x8d\x05\x8b\xad\xe0\x19\x62\xe4\x06\x01\xc0\x26\x6b\xb8\x19\x18\x2c\x5f\x48\xa4\xa2\x0c\x0b\xc4\xf8\x52\x73\x6d\x82\x1f\x7e\xe1\xcd\xc8\xf3\x91\xc5\xc5\xbc\x29\x51\x15\xc4\x60\x0d\x07\x33\xfa\xa3\x11\xfc\x95\x24\xa5\x96\x51\x23\x3e\xa7\x0c\x75\x31\xc8\x89\x6e\x57\x5e\xd3\xa4\x2b\x65\xd4\x05\x8d\x01\xa8\x38\x40\x5c\xc0\xab\x5a\x0c\x55\xbc\xa5\x77\x75\x9a\x24\x82\x48\xa3\x56\x20\x22\x04\x17\x0d\xf7\x4b\x23\x32\xd2\x26\x64\xc0\xac\xc8\x34\x11\x34\xa6\x02\xc1\x89\xa6\x09\xf1\x4e\x06\x4d\xcc\x64\x7c\x8f\xc3\xb0\x9b\x44\xe9\x9c\xb2\xae\x20\x09\xff\x3e\x3b\x06\xf4\xc9\x1a\x86\x48\x3f\x94\xbe\xfd\xbf\x19\x3c\x42\xe8\xe8\xf5\xd5\x69\xff\xdd\x00\x05\x3c\xb9\xed\x4a\x9e\x8a\x80\xa0\xf3\xd1\xe5\xf8\x68\xd0\xed\x9f\x9d\xa1\x8b\xfe\xf8\xcd\xe0\x02\xfe\xfc\xb6\x2b\xdd\x3f\xcf\xcf\xfa\x47\x03\xf4\x6d\x97\xbb\x07\xa3\xf1\x9b\xef\xbe\x43\xdf\x76\xbb\x8c\x77\x05\x81\x23\xeb\xbb\x2d\x8f\x3f\x84\xd0\x08\x44\x1d\x8e\xa2\x5b\x94\x08\xbe\xa4\x21\x41\x18\x45\x54\x2a\x2d\xe8\x60\xb4\xdd\x90\x44\x34\xa6\xfa\x3c\x54\x78\x2e\xcd\xd1\x0b\xea\xca\x94\xa0\x1b\x41\x95\x22\xcc\x09\xff\xf7\x47\xfd\xb3\x2b\x2b\xd8\xce\x51\x41\xf5\x42\x4e\xf5\x42\x33\x2e\x10\x66\xb7\x68\xca\x53\x16\x16\x4f\x0b\xef\x3c\x02\x95\x01\x50\x09\xb2\xbf\xa3\x61\x30\xf2\xf0\x0b\x06\x1d\x46\x13\x0b\xea\x0b\x50\x67\x89\xc5\x21\x96\x28\xe1\x02\x2d\x1f\xfe\x22\xe6\x69\x84\x25\xfa\x90\x82\x86\xa3\x4f\x95\xb9\xc0\x4b\x78\x83\x61\x20\xec\xe1\xe7\x25\x81\x83\x11\xc7\x53\x0a\xc7\x4b\x79\x20\xc0\x3f\x1f\xb4\xe4\xfd\x90\x12\x51\x38\x74\x24\x8a\xe8\x1c\x87\x9a\x07\xb6\x98\x60\x7b\x6e\x74\x65\x42\x02\x3a\xa3\x41\x7e\x16\xeb\x57\x01\x5b\xac\x45\xbb\x96\xf9\x48\x53\x18\xd1\xd0\xa8\xc1\x7c\xfa\x03\x09\x14\xa2\xac\x1b\x51\x46\x7a\x13\x56\xe0\xa6\x34\x09\xb1\x22\x5d\xa7\x59\x76\x83\xe6\xfa\xad\x56\xc0\x7d\xbc\x30\xa3\x91\x56\x50\x98\xc2\x94\xc1\x15\x62\x47\xe2\x7b\x08\x70\x5d\x2c\xf4\x19\xae\x16\x8e\x73\x0a\xdf\x19\x8c\x98\x69\xfe\xd2\x6a\xf4\x54\xf2\x48\xeb\x21\x5c\x20\x41\x34\x5b\x2c\xf3\x4f\x0d\x7d\x75\x13\x71\xd6\xbf\x78\x7b\x75\x31\xba\x7a\x3d\x3c\x19\xd8\xb1\x0e\x3e\xe2\x38\x89\x88\xe6\xf2\x35\x12\x0f\xe1\x8d\x3b\xf8\x5f\x84\xd0\xe4\x59\x10\xa5\x52\x11\x71\xc5\x78\x48\xe4\xe4\xd9\x61\xfe\x9b\xf9\x99\xa7\x4c\xe9\xc7\xbf\xeb\x94\x9e\xc7\x24\xe6\xe2\xf6\x2a\x9e\xea\xdf\x5e\xbd\xfc\xfc\x4b\xf7\xeb\x3d\xfc\x71\xbf\x3d\xbf\x27\x58\x3c\xfc\x4b\x4c\x94\x30\x4a\x7f\x36\xf5\x46\xa9\x27\x7a\x4d\x1e\xfe\x32\xa3\x81\xfe\x39\xd7\x09\x10\x81\x0b\x81\x1e\x9c\xe2\x66\xa0\xe6\x2a\xc5\xe1\x9e\x45\xb4\xfe\x1f\xed\x9f\x99\x7c\x5b\x16\x61\xf1\x21\xa5\x4b\x0e\x5c\x45\xb4\xde\xbb\xef\x61\x59\x1e\x1b\xa1\x00\xc7\x94\x2d\x78\xa6\x2d\x5a\xc4\x21\x29\xa1\x4c\xb8\xd9\x94\x70\x6b\xb2\x5f\x58\xae\xe3\xfa\x84\xb1\x5c\x67\xc1\xe4\x03\x68\xc5\x76\x24\x4e\x22\xa0\x60\x03\xdd\x4f\xc6\x78\x9f\x40\x58\x1d\xda\x19\x70\xd3\x35\xa5\x2c\xcc\x26\xab\x7f\x76\x66\x9e\x5a\x91\x7b\x35\x3c\x3d\xbf\xe8\x9f\x1e\x0d\xfe\x37\x16\x63\xcd\x27\x68\x57\xf1\x96\xe8\x5b\x84\x94\xfa\x0c\xd6\x0c\x33\x79\x26\x08\x0e\xbb\x9c\x45\xb7\x93\x67\xbf\x42\x49\xf5\x94\x9c\xf4\xbf\x99\x0c\xdb\x91\xe7\xb6\x92\x6d\x0d\xb8\xee\x57\x20\xa6\x02\x41\x8a\x52\xdd\x4e\x05\x3a\x3b\xe9\x9f\xfe\x0d\x09\xab\xfd\xcb\xaa\x5d\xe7\xe9\x3f\x55\xb2\xed\x05\xdd\xe3\xf3\xe2\x27\x14\x77\x4f\x22\xed\x1e\x85\x6b\x7f\xd5\x1a\xdd\x99\xde\xb5\x72\xc1\xd3\x28\x84\xcd\x8d\x7e\xa4\x09\x6c\xe0\x0e\xc2\x28\x15\x91\xd9\xd1\xf9\x43\x7d\x3b\x47\x11\x0f\x70\x84\x42\x2a\x48\xa0\xb8\xb8\xed\xa1\x33\x2e\x29\x88\x1a\x2a\x11\x46\x09\xfc\x6b\x49\x10\x65\x8a\xcc\x89\xe8\x20\x49\x94\x44\x89\xa0\x5c\x50\x75\xdb\x01\xa3\x21\x95\x48\x72\xb0\xa2\xcf\x04\x8f\x51\xc4\x6f\x88\x54\x1a\xdb\x82\xce\x17\xc4\xef\xdc\x28\x71\x41\x48\x96\xd9\x3a\x3b\x56\xf8\x91\x26\x1d\xb8\xf8\x5f\x8e\x4f\x56\xd7\x17\x06\xc2\x53\x30\x8e\x52\x41\xd4\xc3\x5f\x05\xe5\x66\x38\x3d\x34\xc6\xec\x43\xea\x8c\xcd\x0f\x7f\xd2\x2f\xb1\x87\x7f\x8f\x89\xe0\x30\x10\x2a\xb8\x1b\x19\xef\xe4\x0c\xad\xc7\x0b\x03\x0b\x71\x48\x10\xd1\x1f\x06\x11\x96\x52\xcb\x61\x1c\x72\xcd\xdd\x31\xa6\x12\x4d\x31\xfd\x98\xb1\x2d\x3c\xc1\x91\xd7\x67\xe2\xa4\xb1\x91\xf8\xa1\x91\xad\x2d\x74\xc5\xa1\x72\x6b\x6b\x9c\x4e\x48\x52\x36\x8f\x08\xc2\x42\xe0\x5b\x63\xe0\x2d\x08\x51\x7d\x3c\x48\x7d\xc2\x18\x0b\xf3\xd4\x38\x37\x08\x12\x69\x44\x2a\xad\x2f\xd9\x7a\x80\x48\x08\xb4\x94\xda\x4d\xdf\x38\xd6\xeb\xaa\xe0\x6b\x8c\x1e\xfe\x9d\xd1\x00\xa3\x18\x2b\x41\x7f\x04\xd3\xb0\xd9\x48\xd2\xd0\xce\x40\xc6\x2a\xc3\x6d\x82\x61\x43\x3d\x59\x82\x18\xc2\x12\x09\x32\x17\xb8\xc2\x00\xb3\xeb\x44\x1b\x08\x70\x42\x16\xe6\x1a\x86\xb1\xd3\x7c\x1b\xb8\xf0\xfa\x57\x58\x12\x34\xb2\x7a\x88\x34\x8a\x1f\x8f\xa9\xd2\xbb\x47\xef\x25\xad\x14\xc1\x97\xf2\x43\x8a\x05\x41\x53\x81\x83\x6b\xbd\xe5\xf4\x8f\x45\x37\xe3\x82\x46\xa1\x53\x68\xf4\x8b\x82\x7c\x48\xa9\x20\xa1\xd6\x0b\x94\x1d\x45\x0f\x21\x2b\xba\xde\xc3\x29\xfb\x83\xe4\xcc\x0c\x8f\x98\x03\xd8\xc8\xac\x6f\xad\x84\xc9\xe5\xd3\xe4\x59\x22\xb8\xe2\x01\x8f\x8c\xbe\xa6\x82\x44\x9f\x27\xf9\xcf\xd6\xee\xac\x39\xc7\xbc\xf1\xea\x65\xef\xf3\x2f\xbf\xec\xbd\xea\xbd\xfa\xfb\xf2\x9b\x09\x17\xca\x6a\x7d\x5f\x7c\xf1\xf2\xef\xac\xc2\xe7\xa4\xd9\x77\x4f\xc4\x8a\x1a\x5c\x7e\xc0\x18\x8e\x9c\xb0\x3d\xf2\xa4\x46\x30\x32\x87\xc2\x54\x2f\xb1\x73\x65\x4f\x18\x2c\xaf\x26\x9e\x20\x9c\x10\x86\x25\xe2\x12\x05\x3c\x0a\x16\x44\x11\x89\x08\xe2\x16\x61\x77\x46\xa3\x45\xc1\x8d\x8b\xa4\x3e\x5f\x19\x09\x88\x94\x0f\x3f\x0b\x8a\x25\x62\xbc\x30\xa2\xf5\x53\xc9\x8d\x10\xd6\xb9\x74\x2c\x7d\xd2\x25\xf6\x6d\xd7\xf7\x94\xdc\x20\x1c\x45\xfc\x06\xcc\xc5\x1f\x52\xae\xb0\xf3\x55\xb9\x63\xdb\x3c\xf4\xb9\x9d\x00\x48\xe6\x4d\x0b\xe0\x7b\xb8\x6c\x28\x1a\x62\xeb\x7b\x5a\x85\xb4\x99\x1a\x1c\x6a\x99\x81\x25\xf2\xa2\xa2\x2c\x88\xd2\x87\xbf\x84\x5a\x33\x8a\x39\xf2\x01\x0a\x39\x31\x5e\x53\xf2\x91\x4a\xa5\x21\x62\xf0\x1d\xf8\xc0\x1a\xdf\xa7\x7e\x97\x18\xc0\x69\x6c\x7c\x0d\xd4\x1c\x69\xcd\xd1\x30\x84\x97\x98\x46\x30\x97\xc6\x93\x01\x80\xb6\xf4\x59\xcc\xb8\x40\x3e\x5a\x61\x57\x79\xbe\x83\x53\x50\xdf\xeb\x6e\x9d\x4f\xdd\x07\xe5\x87\x87\x9f\x4b\xfe\xf1\x26\x00\x79\x92\x34\x01\xa8\x88\x10\x3c\x4e\x68\x15\x50\x12\x27\xea\xd6\x07\xea\xe1\x4f\x68\x89\x7f\xf4\xce\xba\x75\x88\xe7\xf3\x6c\xe7\xd8\xcf\x35\x05\xd7\x76\x48\x65\xc2\xd9\xc3\x5f\x96\x24\xd2\x1b\xb9\xb8\xc8\x5e\x6e\xb2\x08\x05\xd1\x9f\x86\x94\xcd\x7b\xe8\x2c\x22\x5a\xc0\xc4\xf8\x9a\x20\x99\x0a\x82\xa8\x32\xba\x9a\xb9\x49\x35\x58\xf9\x22\x51\x16\xb2\x96\x66\x3d\x74\x44\x84\xa2\x33\xfa\x21\xd5\x7a\xb2\x16\x28\xc6\x91\xf2\x03\x5e\x65\x4a\xe3\xab\x4e\xe7\x5d\x9a\xc9\x19\xdf\xa9\xac\xc9\x9f\xf1\x94\x79\x57\xef\x54\x13\x03\x7a\x1b\xfd\xd1\xcf\x0d\x82\xc4\x7c\x99\x69\x98\xd6\x69\x65\x49\xe2\x82\x12\xe9\x03\x0f\x1f\x6a\xf1\x1b\x16\xfc\x47\xc5\xb1\x48\x8f\x6f\xf0\xd9\x19\xcc\xa4\x9c\x3c\x73\xc7\x6c\x36\x14\x77\xc6\xba\xc9\x0b\x51\x88\x15\xf6\x4d\xb7\x3d\x16\x8a\x00\x59\x79\xcc\x08\x22\x7b\x70\xc8\x65\xb6\xd2\x7e\x47\xd3\x41\xc6\x85\xfa\xec\xd1\x72\x43\x40\xd8\x11\x78\x2b\x7b\xe8\x9c\x18\x97\xea\x82\x44\x89\x8f\x2b\x0f\x0c\x01\x46\x31\x76\x11\x29\x06\x18\x04\x89\xa0\x23\xce\x64\x1a\xa9\x22\xa4\xcd\xb4\x08\x9e\x2a\x22\x0f\x4a\xd7\x0e\x3d\xcb\x3e\xc4\xee\xfd\x82\xb6\x6f\x97\xc5\x83\xe0\xee\xae\xf7\x9e\x08\x49\x39\x3b\x5f\x70\xa1\xee\xef\xf3\x38\x05\xfb\xfc\x84\xb3\x39\x3c\x16\x04\xe1\x48\x72\x84\x83\x80\x24\x8a\x84\xbe\xf5\xd8\x04\x93\x6c\x82\xa8\x70\x3c\x7d\xf8\x53\x6c\xce\x61\x1c\x10\xaa\xbc\x8b\xf2\x59\x26\xab\x40\x1e\x7b\x55\xec\xcf\x40\x58\x19\x71\xef\x01\xf5\xdb\xdf\xf6\x95\x22\x4c\x7f\x71\x88\x2c\xcb\xc0\xe0\xa6\x94\x61\xcd\xe9\x99\x27\x76\x7a\x8b\x12\x0e\xaf\x82\x51\x29\x65\x4a\xe8\x1b\x67\x88\x70\xaa\x16\x5c\xc8\x1e\x1a\x32\xa9\x70\x14\xc1\x94\xa5\xd2\x1d\x0b\x12\x61\x85\x6e\x79\x2a\x10\xbf\x61\x48\x50\x79\xdd\xfb\xed\x6f\x21\x8e\x93\xeb\xc7\xe8\x06\x33\xb8\xbe\x51\xfb\x35\x58\x90\x8c\x58\xb9\xbb\xeb\x19\x92\xee\xef\xff\x87\x67\x88\x9a\x7e\xc2\xc0\x38\x60\xe8\xef\x6a\x8c\x30\x87\x53\xca\xb4\x22\xc3\xa5\x75\xcb\x72\xe3\xb8\xc5\xa9\xe2\x82\x48\x33\x98\x80\xba\xb8\x1f\xe0\x51\xb8\x9c\x3d\xfc\xbc\x24\x34\x1b\x8e\xbe\x9a\xb9\xc1\x00\x6c\x0d\x43\xa6\xd8\x98\xd1\x10\xd1\x23\x0a\xb8\x1b\x12\x01\xf9\x65\x86\x82\x05\xe2\x99\xdc\x2a\x0d\x65\xe3\x4a\xf4\xb3\x18\x80\x88\x32\x82\x14\xe7\x91\x99\x16\x45\x04\x0e\x94\xd1\x54\x8e\x22\x9e\x86\xe8\xb5\x16\x0b\xc2\x77\xac\x5c\xc6\x18\xcd\x88\x10\x70\x21\x05\x01\x14\x51\xb6\xc0\xc6\x9a\x02\xbb\x4f\x9a\xb3\xd5\x80\x9e\x53\x61\xf4\xd0\x15\xe0\x9b\x89\x3c\x3e\x7e\x31\x1e\xbc\x1b\xbd\x1f\xa0\xb3\x93\xcb\x37\xc3\x53\x0f\x0d\xc3\xd3\xa3\x93\xcb\xe1\xd8\xbe\x3b\x86\x97\xbb\xc3\xd3\x86\x40\xd1\x78\x70\x36\x3a\x1f\x5e\x8c\xc6\xdf\x34\x84\x6f\x3f\x78\xf8\x7f\xc6\xc3\x11\x3a\x1e\xb4\xc7\x77\xb8\x1b\xc2\xc3\x86\x18\x9b\xa2\xa9\x03\xfb\xbe\x7f\x7a\x34\x38\xf6\x00\xeb\xbf\xef\x9f\x3e\xfc\x73\xff\x78\x54\xfd\xb5\x8f\x96\xec\x73\x1f\xf6\x93\x61\xff\xdc\xf7\xb1\xe7\x93\xb3\x21\x58\x57\xb2\x80\xa4\xad\xbf\x76\xa1\x89\x9e\x0f\x2f\xca\xc1\x88\xf5\x70\xd0\x73\xd2\x9b\xf7\xd0\x42\xa9\x44\x1e\xbe\x78\x81\x13\xda\xb3\xb7\xd5\x5e\xc0\xe3\xcf\x9a\xa1\x41\xcf\xb5\x50\x20\xe6\x6a\xd4\xf1\x03\xab\xa7\x26\x3f\xf4\xb1\x82\x43\xe2\x72\x7c\x72\xef\x8d\x6f\xae\x07\xe8\x5b\x9e\x95\x01\xf8\x56\xb8\x08\x09\x42\x4e\xcf\x86\x03\xfb\xef\x7b\x9f\x49\x7b\x15\xf4\xfa\x77\x2d\x70\xa1\xe7\xfa\xf7\xa5\x39\x31\xdd\xcf\xf6\x00\xbd\xbf\x6f\xb8\x4c\x9b\xc0\x6a\x18\x10\xb7\x8c\x8b\x6f\x14\x20\x37\x23\xb6\xd5\xac\x34\x99\x12\x37\xe4\x2d\x39\xe0\xec\x7c\xeb\x0f\xb6\x46\x91\x19\xb0\xb7\xc6\x05\x57\xe4\xed\x3e\x0a\x02\x22\x25\x5c\x17\x0b\xd1\xb2\x09\x16\x8a\x06\xa9\x3e\x69\xa7\x82\x5f\x13\x5f\x00\x60\x5f\x7f\x6c\xcd\x34\x79\x64\x7b\x1a\xdb\xaf\x8a\x5e\x85\x5a\xf4\xce\xa4\xcf\x70\x4c\xd6\xa8\x70\x3f\xf2\xd9\x8c\x08\xca\x7c\x71\x96\x45\x7a\xb4\x3a\x1e\x93\x92\x2f\xc3\xd0\xa6\x68\xc2\xcb\x01\xf8\x0d\xc8\xfc\x90\x52\xc8\xc7\xb0\x69\x20\x48\x92\x20\x15\x54\xdd\x22\x48\x4c\x90\x60\x72\xb8\xbb\xeb\xa5\x92\x08\x06\xb1\xe3\x3e\xd1\xd2\x0f\x0d\xa8\x90\xa3\xb9\x48\x13\x97\x0b\x30\x4f\x05\x66\x0f\xbf\x60\x44\x62\x2d\xef\x82\xd4\xb8\x65\x8c\x8d\x62\x05\x70\x0d\x89\x36\x8f\x62\x85\x44\x4d\x61\x09\x4e\x43\xfa\x56\xc8\x53\x24\x4e\xb8\x00\xf5\xcf\x10\x57\x86\xb9\x99\xb4\x30\x44\x18\x22\x64\x0b\xb7\x5a\xb8\xf0\xf9\x34\xad\x21\x0b\xa2\x94\x82\x7d\x10\xc2\x73\x3d\x97\xd6\x2a\x74\xa9\x88\x90\x70\xd1\xf0\x98\x21\x9c\x24\xb5\xc8\x30\x12\xdc\x28\x76\xfa\x2c\x35\x9e\x2f\xfd\x9d\x0f\x0d\x30\x04\xe0\x70\x07\x0a\x20\x5b\xcd\x22\xa0\x0c\x71\x31\xd7\xcf\x46\x62\x6e\x9f\xbd\x30\x41\xcc\xfa\xe1\xb9\xfe\xc3\x3e\x36\x8b\x74\x99\x4d\x68\xaf\xe7\xbb\x82\x18\xaa\xc1\x7a\x69\xa8\xce\x48\x60\x1b\x48\x60\x2b\x51\xc5\xab\xc4\xd8\xf8\xe7\x55\x72\xdc\x0a\x97\x09\xda\x3c\x1d\x11\xc5\x72\x25\x1f\xc2\x5d\xb0\xed\xb2\x4f\x89\x9e\x30\x7b\x1d\x31\x79\x09\x18\x31\x63\xc2\x3f\x7a\xed\xb4\xf4\x17\x58\x43\xea\x21\x34\x26\x20\x0a\x34\x80\x15\xb0\x4e\x9f\xaf\x01\xaf\xa7\x3d\x24\x42\xaf\x09\x61\xc6\xce\x63\x2c\xfc\xfa\x05\xe3\x88\xb7\x37\x2a\xef\x9d\x1f\xe1\x4d\xc3\x62\xf9\xf5\xe3\x43\x4a\xac\x09\x46\x82\x29\xd9\xde\x50\xc2\x95\x6b\xb9\x19\x94\x1e\x25\x33\xb9\x0f\x30\x3c\x1e\x13\x4a\x10\xf7\x64\x93\x34\x43\x63\x64\xaf\x31\x96\x9a\xfb\x93\xfd\xcd\xfa\x75\x51\x2a\x7d\x46\x9d\xcd\x4b\xa6\x17\xa5\xb4\x14\x7a\x22\xed\x14\x1f\x64\xb7\x2d\xc3\x20\x07\x3d\x84\xbe\xe1\x29\x0a\xc0\x6c\xa0\x84\xbe\xbd\xda\xf9\xd5\x6b\xe1\xfb\x0a\xa6\x5d\x2d\x08\x2b\xdc\x4d\xa9\x74\xaf\x17\xd7\x8d\xb2\x25\xbf\xae\xe2\x81\x1e\x42\x6f\xf9\x0d\x59\x12\xd1\x81\x4b\xaf\xb5\x60\xcc\xa8\x90\x0a\xcd\x52\x73\xa1\x0e\x89\x90\xca\xe2\x44\x34\x4e\xf4\xad\x8f\xcf\xca\xb4\xea\x9f\xe0\x42\xaf\xff\xb1\x4e\xb1\xa1\x6d\x4b\x3e\xd9\xc4\x02\x85\x45\xdd\x34\x9b\xef\x79\xf0\xf0\x67\x70\x90\x08\xaa\xa5\x2d\x53\x26\xbf\x64\xc3\xcd\x77\x9d\x48\xd2\xd1\x42\x4b\x4b\x6b\x1a\xe2\x8e\x9d\xdc\x87\x9f\xbb\x91\x65\x93\x60\x81\x63\x00\xb1\x99\xe1\x7a\x08\x9d\xea\xad\xa2\x30\x53\xbc\x03\xc6\x9d\xae\xbe\xa0\x0b\x1a\x83\xaf\x95\x40\x24\x01\x2c\x8c\x72\xb7\x7b\x6e\xe7\xd3\x9e\x13\xcd\x49\x05\xdb\x09\xf3\x9a\x4f\xfa\x51\x54\xb0\xcf\x1e\x9d\x0c\xdd\x82\xfb\x2c\x84\x5e\x30\xfc\x06\x9d\x9f\xbf\x05\x73\x92\xd5\x34\xc0\x2f\x57\x91\x42\x72\xe6\x76\x13\x36\xea\x84\xfe\xdc\xaa\x14\x95\x79\x22\xfd\x48\xea\x69\x88\x88\x22\x10\x30\x6f\xd3\xac\x8c\xb1\xcc\x83\x6b\xf0\xd1\x1c\x3e\xce\x48\xa5\x78\x88\x41\x9b\x10\xe0\x05\xb1\x79\x54\x1e\xe3\x66\xdf\x1c\x2c\x71\x2a\x15\x9a\x12\x7b\xf3\x23\x21\x9a\x92\x19\x17\xee\xdf\x36\x7d\xb1\x62\xbc\xc7\x76\xa1\xb3\x2c\x14\x7d\x12\x96\x8f\x0b\xcc\x94\x49\x6d\x2a\xbc\x53\x33\x19\xde\xf3\xd6\xfb\xbe\xcf\x61\xe1\xff\x20\x4b\xc6\x84\x14\x02\xcf\xe7\x27\x90\x0b\xa1\x89\x2f\x26\x4f\xf2\x8a\x93\x5d\x43\x36\xc6\x59\xad\x4b\xf9\x4d\x90\xfe\xcf\xe1\xe4\xa2\xc6\x69\x64\x1d\xba\x33\x4a\x22\x9f\xf5\xfc\xd4\x6a\xaa\xfa\xdc\xb6\x42\x03\xc7\x09\x47\x7c\x2a\xe8\x1c\x57\x79\x90\xd6\xb2\x21\xcb\x1e\xa5\x0a\x81\xb5\xa6\x22\xe4\x1e\x2c\xdf\x9e\x5c\x53\x6c\xf4\x00\x6f\xb8\xb8\x86\x88\x92\x6b\x9a\x24\xb9\x46\x04\x81\x3a\x1a\x5b\x63\x02\xcc\xc0\x95\xc0\x53\x1c\x2d\x70\xc8\x45\x07\xd1\x39\xe3\x02\x24\x55\x21\x11\xd6\xe8\x3b\x5b\x90\x68\x4d\xba\x26\x7f\x45\x19\x25\xc7\xdc\x27\xcc\x4b\x5b\x4c\x12\x98\x7d\xe1\x1c\x36\x69\x24\x08\x6f\x80\xd6\x8c\xb2\x3a\x8f\x8a\x17\x0c\x61\x21\xd8\x46\x34\x67\x11\xa9\x50\x48\xf1\x9c\x71\xa9\x68\x20\x4d\x10\x44\xc4\xe7\x10\x1e\xe0\xd3\xf0\x19\xf9\xa8\x0f\x15\xfd\xd9\xc3\x5f\xf5\x77\xf6\x12\xc2\x23\x1a\x50\x95\xe7\x1b\x6b\x24\xa5\x58\x9d\x90\x68\xd8\x5e\xc2\x5c\x5e\x10\x5a\x10\x1c\xa9\x05\x0a\x16\x24\xb8\x46\xea\x36\x21\xd6\x18\x74\x90\x70\xa1\x4c\x26\x1a\xe3\x8c\x1c\x78\xcd\x0b\xf6\x86\xb6\x24\x02\x82\x76\x32\x8a\x66\x29\x83\x80\x37\x13\x11\x14\x16\xb3\x49\x57\x4c\x45\x0e\x55\x9a\xa1\xaa\xa5\x3a\x13\x26\x94\x85\xe4\xa3\x87\xb4\x87\xff\x9b\x85\xfa\x22\x1a\xe2\x35\x69\xe2\x28\xa9\xc7\x14\xd1\x19\x09\x6e\x83\x88\x6c\x69\x1a\x28\x80\x28\xb1\x12\x1c\x00\x9a\x9f\xa6\x79\x5c\x1f\x09\x8d\x61\x7b\xca\xd5\x02\x65\x0e\x1b\x70\xba\x84\x3c\xc6\x94\x1d\xbc\xb0\x7f\x78\xdd\xf2\xa3\xe2\xf4\xae\xcb\x8a\xcc\xf9\x53\x48\x4c\x36\xbe\x7a\x87\x8d\x6c\xc2\xf5\xa8\x43\x5b\x70\xa9\x0e\x5e\xc0\x7f\x1e\x75\x58\x65\x3c\x8f\x3a\x24\xc6\xbb\x1a\x8d\x66\xfa\xc7\x1c\x51\x09\x8d\x6f\x40\x72\x4b\x86\x35\xc9\xcb\xd8\x04\x6d\xd8\x8b\xb8\x3f\x4b\xd6\x64\x1d\x5b\xfd\x23\xd0\x5f\xe0\x75\x55\xa4\x06\x93\xb9\x55\x1b\x7c\x21\x99\x51\x66\xa2\x20\x41\x2e\x56\xeb\x40\x05\xdc\xe6\xc3\x4c\xea\x04\xd6\x28\xe0\x2e\xc9\xb8\x5e\xf9\x29\x93\x23\x78\x64\xcc\x10\xfa\xae\xe9\xb3\xa5\x95\x28\x30\x89\xd7\x06\x7d\x09\x6d\x2a\x53\x30\xbe\x54\xe3\x35\x7a\xe1\x6e\x68\x57\x14\xc0\xa6\xc8\x49\x88\xde\xe3\x28\xf5\xcd\xf3\x7b\x1c\x71\x73\xa1\x99\x33\x6f\x98\x80\x81\x64\x74\x89\x08\x6c\x24\x63\x1e\x11\x63\x5d\xd1\x43\x41\x6b\x69\xe6\xb9\x89\xc5\x64\x7b\x8f\xc4\xfc\xfe\x1e\xf9\xad\x27\x76\xd4\xc6\x7c\x92\x8d\x3a\x47\x84\x79\x36\xd8\x75\x64\x9b\x8c\x29\xab\x68\x5b\x8f\xcb\x00\xaa\x1c\x56\xc1\x76\x64\x1e\x83\xc9\x26\xb3\x1e\x95\x88\xdd\xdb\x14\x94\xe8\xaa\x9b\x81\x92\x41\xa9\x4c\xa3\x33\x29\xad\x51\xf9\x98\x33\xf6\xab\x99\x98\xb6\xa3\x5f\xb1\xe5\xde\xdd\xf5\xdc\x93\x2b\x78\x62\x66\x24\x63\x0b\x69\x27\x3b\x9f\x0d\x47\x95\x02\xef\xcb\x9a\x31\xb8\xd1\x6c\x6c\xb6\x08\x6f\xa2\x05\xf3\x22\x03\x38\x6a\x36\x4d\xce\x0a\x5d\xeb\x26\xe5\x26\x93\x53\x90\xf9\x77\x77\xbd\x7f\xd4\x7f\xd8\xf3\xaf\x38\x29\xed\xec\xac\x25\x6e\x58\x3d\x09\x56\xb0\x95\x87\xdd\xd6\x90\xaa\x14\x89\x13\xb8\xb6\x83\x8e\x7b\xc3\x22\x8e\x43\x13\x36\x72\x6b\xc2\x7e\x21\x7a\xca\x04\xb2\x12\x85\x70\x18\x0a\x22\xa5\x7f\x08\x17\x60\xd2\x09\x39\x9a\xe1\x1f\x89\xc8\x41\x86\x79\xb6\x86\x0b\xe9\x70\x5e\x17\xfd\x16\x02\x63\x0f\xb1\x8e\x93\xa1\x45\xd7\x90\xee\x98\xce\x05\x36\x86\x71\x7b\x3b\x1a\x5a\xf5\xfa\x38\xaf\xd7\x52\x35\xef\x19\xd1\x00\x49\x34\x01\xe4\x25\xcb\x46\xe1\x40\x5c\x79\x84\x19\x98\xbd\xce\x22\x6c\x8d\x51\xdf\x23\x3e\xcb\x1c\x4c\xdf\xaf\x5e\xe7\xbe\x77\xa6\x80\x99\x20\x2e\xb4\x3c\xbb\x29\x7c\xbf\x4e\x95\xfb\xaa\x50\x1e\x0a\xdb\x6a\x52\xe8\x88\x33\x85\x03\x1b\xb4\x83\xc3\x98\x32\x08\xd5\x52\x5c\x20\x3a\x03\xf3\xa5\x5a\x50\x76\x6d\xac\xa1\x50\xf2\xcb\x94\xdf\xf0\xcd\x51\x21\x42\x87\x1b\xff\xdb\xda\xd0\x8a\xee\xaf\x0d\x63\x73\x01\x64\x73\xf1\xf0\xb3\xa2\x12\x0a\x75\x15\xee\x35\x15\xe3\x2b\x54\x9c\x22\x79\xf5\xaa\x1e\x42\x03\xa6\x04\xd1\xcf\x20\x8e\x47\x71\x1b\x03\x93\x0f\x37\x04\x67\x1f\x5a\x82\xa5\x13\x07\x0b\x2c\xc0\xbc\x4d\xa5\x74\xd1\x8c\x44\x54\x14\x39\xea\xa7\x6a\xa1\x57\x34\xd0\xec\x05\x67\x00\xe3\xac\xeb\xa2\x79\xe8\x92\x44\x3e\xaf\x52\x3f\x55\xe6\x43\x91\x0b\x70\x98\x00\xf3\xb1\xa2\x4b\xb8\x58\x92\x5a\xbc\x94\xcd\xfd\x8c\x9b\x61\x61\x21\xf7\x73\x65\x01\x98\xbe\x30\x63\x89\xc8\xc7\x84\x0a\x02\xf5\xdd\x4c\x68\xa8\xbe\xc6\x4f\x71\x70\x0d\x6e\x0e\x8e\x04\xe9\xe2\xc2\xd0\x7b\xae\xa4\x1f\x54\x5f\xf9\xbe\x58\x7d\x65\x92\xbe\x7c\xf9\x45\xe0\xdc\xe8\xf0\x2f\x82\xba\xa9\x7d\xae\xa7\xcc\x3d\xe3\xf6\x19\x17\x73\xf7\x48\xda\x47\x20\x36\xcd\xc3\xef\x35\xfa\x22\x35\xfa\x5e\xb2\x4a\x8e\x6f\x36\x10\x76\xf3\x61\x1d\x12\x7a\x98\x3c\xd5\x8c\x32\x23\x2a\x25\x96\x6c\xc6\xed\xe4\x1b\x4b\x2b\xd4\xc1\x29\x7f\xd9\xcb\x4a\x14\x3e\xc5\x88\x81\x0a\xa2\x29\xc4\x62\x8d\x44\x82\x04\xb1\xc1\xea\x5a\x6b\xde\x44\xac\x7f\xd9\xb9\xb0\xc7\x1d\x6c\x4c\x2d\x8f\x69\x68\xa3\x83\x4d\xfe\x96\xb9\x09\x72\x46\x90\xa2\xb1\xbe\x7d\x84\x3e\x65\x7a\x64\xf6\x76\x08\x1a\xb5\x89\xbf\x33\x67\xeb\xbf\x11\x69\x38\x7b\xc6\xa9\x83\x4b\x39\x73\xf7\x3e\xbd\x5b\x1f\xfe\x1a\xd2\x39\x87\x34\x08\x2c\x14\xd4\x53\xd9\x4c\xf3\x57\xc3\x93\x93\xe1\xe9\x1b\xf4\xae\x7f\xda\x7f\x33\x18\x7b\x48\x79\x33\x18\x0f\x4e\x8f\x86\xfd\xe3\xd1\x18\x1d\x0f\xd0\xeb\xfe\xc5\xe5\xb8\xff\x6e\x70\x7a\xe1\x89\x91\xfa\xea\x72\x78\x72\x7c\xd6\x3f\xfa\x7a\xbb\x18\x87\xfc\xb3\xed\x6e\xa2\xd9\x77\xdb\x47\x48\x7c\x85\x25\x0d\xb6\x33\x4d\x7f\x65\xec\xef\x73\xa2\x94\x75\xc8\x0b\x45\xc2\x2d\x29\xa6\x2c\x84\xb2\x83\x25\xc5\x4f\xf1\x95\xb8\x08\xcd\xb3\x26\x07\x30\x8a\x72\xff\x15\x3c\x36\xb1\x1c\x55\x17\xee\x13\x3a\x37\x96\xfc\x4d\x7a\x5d\xf1\x96\xdb\x41\xfa\x6c\xe2\x21\x87\xac\x17\xfb\x50\xe6\x4e\x1c\x69\xce\x80\x46\x57\x75\xef\xc0\xd4\x82\x64\x21\xe1\xab\xe1\x15\xb6\xa2\x9d\x24\x21\x78\x70\x5c\x14\x46\xb1\x18\x51\x9b\x31\x3e\xfc\xaf\x3c\x98\x7c\x63\x34\x06\xd4\x7d\xd4\x63\x93\x38\x8b\xee\x2c\x16\x13\x2a\x45\x6b\x3c\xde\x78\x5d\x48\xc7\x27\x1f\x6f\x21\xfc\xc3\xe3\x93\xca\x86\xbb\x52\x2e\xd3\x18\x7f\xde\x5e\x5c\x9c\x19\x07\x41\x0d\xf9\xde\x4a\x97\x38\x8f\xd3\xd0\xc0\xda\x10\xe1\x0f\x05\x79\xaf\x15\xb6\xa8\x9e\x00\xbf\xef\x48\x63\xd6\x2b\x35\x25\xea\x86\x10\xb0\xfc\x95\x35\x27\x38\x3c\xcb\x1e\x1b\x2b\xff\x61\x37\x79\x8f\xd1\x88\xce\xdd\x09\x0a\x0a\xd6\x3a\x60\xe2\xf3\xe7\x50\x8f\xb3\xc4\xd1\xba\x1e\xc2\xb2\x36\x71\x3e\x3d\x70\xfb\xd8\x96\x86\x97\x70\xcd\x07\x9b\x82\x5b\x1e\xfe\x97\x6f\x5d\xbc\x24\x56\xc6\xbe\xbc\xa8\xb9\xb0\x35\xbb\xa8\xbb\x99\x6c\x76\x4d\x0f\xc9\x0c\xa7\x91\x92\x65\x51\xd6\x2c\x3c\xcb\xcd\xcb\x36\x77\x71\xbd\x8f\x43\x01\x4a\x81\x51\x6b\x56\xe2\xcb\x1a\x84\x70\x6d\x37\xc0\x4c\x5c\x3d\xd6\x98\x4c\xd0\x8b\x20\xfa\xbf\x6d\x07\x62\x38\xdc\xcb\x35\x7b\x09\xe4\xda\x92\xd9\x79\x03\x6e\xc6\xfb\x8f\xee\xda\x96\xc7\x57\x67\x6e\x9f\x33\xd6\xc4\x24\x53\x39\x5d\x8f\x37\x4d\x0d\x6c\x37\x6e\x8e\x8a\xb2\xb4\x48\x42\xfd\x98\xb2\x2f\xf1\xda\x87\x9b\x31\xba\xa2\x8c\x12\x22\x9f\xe1\x9f\x05\xcf\x93\xf4\xc7\x79\x96\x4a\x22\xc6\x54\x11\x2f\x80\xcd\x88\x53\x1a\x85\x89\xbe\x10\xea\xaf\xdc\x3f\xdc\xec\x97\xb2\xa8\xbc\xb7\x97\x69\x15\x8c\x3c\xc3\xaa\x05\x01\x4d\xa3\x20\x2a\x29\xa8\x8f\x88\xc8\xbe\xd8\x52\xb7\xbf\x55\x04\x7d\x48\x31\x53\x5a\x94\xba\xf0\x1d\xcc\x5c\x79\x0e\x73\x03\xc4\x28\x65\x14\xb4\xc3\x98\x60\x99\x0a\x02\x65\x39\x23\x7a\x4d\xd0\xbb\x0e\x7a\xf7\x55\x07\xbd\x01\xcd\xff\xcd\x57\x5e\xa5\xc1\xe0\x80\x3a\x18\x21\x41\xd3\x5b\x08\x83\xc9\x0b\x74\xac\x16\xd3\x30\x77\x43\xc0\xeb\xbe\x89\x49\x48\x43\x6c\xf6\x80\xc3\xaa\x2f\x03\x6f\xbe\xda\x3c\xb4\xa3\xfe\xe9\xd1\x40\xdf\x17\xb7\x9a\x10\x97\xdc\xbd\x52\xbd\x15\x9d\x09\xba\xc4\x8a\x8c\xf5\xdf\x2e\xf9\x23\xbe\x4d\xcc\x53\xc8\x8d\x0d\x78\xfc\x42\xff\xf1\x62\x2f\xf8\xc6\x83\xb3\x91\xf9\xe5\x72\x7c\xb2\x7f\x88\x93\x09\x9b\x4c\xd8\xe0\x8f\xfd\x77\x67\x27\x83\xf3\xc3\x49\xa9\xb2\xcd\x93\x8f\x3d\x8a\xf8\x8d\xad\xcd\x2c\xe5\x02\x41\xb9\xda\xed\xaf\xc7\x19\xb8\x84\xa2\x6f\x2f\xc7\x27\xbe\x52\x10\x75\x5f\x27\xa8\x55\xfe\x42\x01\xc0\x76\x91\x81\xd9\x87\xa9\x5a\xa0\xcb\xf3\xc1\x18\xfe\x75\xd6\x3f\x3f\xff\xc3\x68\x7c\x3c\x61\x5b\x16\xe6\xad\x01\x07\x0b\xff\x87\xfe\xf8\x74\x78\xfa\xc6\xae\xfb\x19\x54\x38\xd1\xa7\x05\x98\x83\x13\x2c\xe5\x0d\x17\xa1\x29\x35\x50\xca\x58\xe4\x89\xb2\x95\x7c\x16\x74\xbe\x88\x6e\x51\x48\x65\xc0\x53\x81\xe7\x24\x34\xb0\xbe\x29\x41\x88\xf1\xad\x96\x27\x4b\x2a\xe9\xd4\x78\x80\xb9\x5a\x10\x61\x8a\x8f\xd8\x1f\x05\x09\xb8\x08\x4d\x94\x34\xe0\x97\x0b\x12\x45\x68\x41\xa5\xe2\xe2\xb6\x9a\x51\xf5\x10\xf5\x41\xf8\x0f\x85\x1c\x2c\x34\x99\x4c\x9e\xc5\xb7\x19\x11\xfa\x9f\xe8\x79\x2a\x8d\x5f\x86\xd8\x0c\x13\xfb\xa3\x74\x02\x0e\xb8\xef\xb3\xa6\xe0\x27\xe6\xff\x9e\x15\x70\x4c\xec\xf3\x67\xe8\x39\x91\x01\x4e\x32\x74\x74\x66\x6e\xcf\x94\x65\x58\x7d\xd1\x46\x0d\x16\x74\x9d\x9c\x67\x2b\x84\x3c\xdb\x89\x84\xd6\xc8\xb0\x40\x58\x26\x58\x22\x49\xe0\xce\x6e\x2a\x24\x4b\xc2\x16\xd8\x13\xf1\x54\x87\xaa\xb8\x86\x8d\x57\xb0\xe5\xb0\xd6\x70\x65\xc3\x31\xf5\xbf\xf5\x30\xa4\xb3\x58\x5a\xed\xac\x66\x58\x50\x0f\x11\x2e\xb4\x59\x8d\xb0\xe3\xd1\xbb\xfe\x70\x43\x75\xb0\x6f\xbb\x59\xc4\x0b\x7a\x3b\x3a\xbf\xd0\xdf\x43\x79\x6e\x28\x27\x74\xd6\xbf\x78\xab\xff\x15\xa0\xb3\xfe\xb8\xff\x6e\x70\x31\x18\x9f\x5f\xf5\xcf\xaf\x7e\x7f\x3e\x3a\x6d\x27\xe3\x9e\x86\xb4\xca\xad\xbb\x81\x84\xe2\x8a\xc4\xb7\x02\x2b\x5b\x3b\x5c\xa0\x02\x0d\xf1\xad\x16\xd0\x16\xfd\x8c\xf3\x5d\xa0\x06\xa6\xa6\xd1\x0f\x92\xb3\xdd\xc0\x1c\xdc\xe9\xad\x00\xe5\x32\xf4\x1f\x87\xfa\x7f\x0c\x54\xa8\x90\x37\xb1\xe0\x87\x0c\xfd\x81\xb2\x90\xdf\x48\x74\xc6\x6f\x88\x38\x07\x41\xa7\xf9\x3a\xe4\xe9\x34\x22\x5d\x60\xef\xb0\x83\xcc\xee\x35\x45\x0c\x0f\x41\xe0\xdc\x39\x09\xe3\x90\x4c\x1c\xa2\x49\x01\x19\xfc\x7d\x6f\x04\xd1\x0a\x42\x1b\x5b\x8f\x4e\xb4\x18\xd7\x28\x4d\xf5\x29\x0f\xca\x83\x6d\xf0\x6d\x97\xba\xba\x6f\x06\x78\x02\xe4\xa6\x1a\xa2\x99\x89\x67\x87\x76\xf4\x4f\x33\xee\x02\x8b\xee\x80\xcd\x36\x8c\x72\xc6\x0b\xdb\xc2\xe8\x7c\x70\x74\x39\x1e\x5e\x7c\x73\xf5\x66\x3c\xba\x3c\x7b\x64\xf0\x66\x13\x80\x97\xf0\x08\x9a\xf3\x48\xe3\x97\x86\xba\x23\x49\x12\xdd\x42\x6e\x94\xf3\x1a\x6c\xb2\xaa\xa3\x94\x29\x0a\xb5\x23\x6e\x6d\x7d\x32\xeb\xcd\xd8\x2e\x26\x7e\xa5\x5c\x6d\x05\xc9\x68\x34\x7e\x83\xbe\x05\x65\x74\x07\x31\xdb\x18\xc5\xaf\x75\x86\xea\x0a\xfa\xee\xfd\x60\x6a\x8d\x32\x13\xb4\x8f\x5a\xe3\x77\xb2\xe9\xb0\x68\x5a\x42\x7a\x62\x4b\xa8\xba\x53\xc2\x94\x51\x9d\x4c\x9e\x75\xfc\x3f\x15\x4e\x90\xa7\x2a\x4f\xfe\x18\xf5\xc9\xf7\x51\x2c\xda\xcd\x43\x75\xb9\x5f\x5b\x37\x35\x2b\x9c\x3a\x29\x17\x8c\x9e\x40\x65\xb9\x49\xb1\x68\x74\x76\x62\xde\x6f\x54\x5a\x4e\x28\x4b\x3f\xbe\x78\x87\x83\xc3\x0c\xe8\xc6\x81\x98\xb3\x29\xbe\x0d\xa7\xf9\x72\xaf\x62\x5e\x43\x5c\x58\xde\x4d\x87\xf5\x56\x28\x4b\xaa\x42\x19\x73\xf9\x00\x2f\x52\x50\xd2\x1a\xca\x84\xe4\x6a\xca\xf6\x23\x6f\x41\xc3\x41\xf5\xe6\x2a\x23\xf9\x9f\x2f\x6e\xb8\xb8\x06\xad\xff\x85\x8a\x93\x17\xce\x43\x74\x65\xd8\x7d\xc7\x33\xf3\x93\xe0\xb4\x6d\x07\x1f\xe1\x9c\x76\xd6\xc1\x76\x96\x09\x48\x9f\x31\x4a\x0b\x5c\x02\xdc\x6d\xa1\x74\x0d\x78\x3c\xc8\x95\x17\x89\x22\x84\xf8\x56\xab\x89\x25\x7d\xaa\xf0\x7f\xbf\x29\xfe\xb0\x15\x90\x5c\xdb\x44\xbf\xb1\xbf\x17\xab\xbe\xbc\x68\xab\x86\xb6\xa4\xfd\x31\x70\x3d\xda\x10\x61\x63\xe8\xf5\xc4\xf2\x96\x05\x5d\x45\x63\xc2\x53\x85\x2e\x86\xef\x06\xa3\xcb\x8b\xab\xe1\xe9\xd5\xbb\xe1\xe9\xe5\xc5\xe0\x1c\x6e\x95\x4a\xe0\x80\xa0\xe7\x4a\xa4\x04\xfd\x84\x66\x38\x92\xfa\xbf\x9a\xb4\x17\x8a\xbf\xd0\x07\xc9\x67\xf0\x5e\xc0\x23\x2e\xca\xef\x99\x1f\xa0\x06\x1e\x41\xcf\x4f\x46\x47\xfd\x93\x01\xfa\x09\x1d\x9d\x0c\xfa\xe3\xcf\x5a\x72\xe7\x5a\x93\xad\xab\xbc\xc9\xd6\x55\xb9\xc9\xd6\xd5\x6a\x93\xad\xab\x4d\x4d\xb6\xda\x91\x61\x2a\x8d\xe3\x24\xe9\xc6\x98\xd1\x19\x91\x2a\x3f\x33\xbf\xed\x26\xe8\x85\x9b\x20\x13\x3e\xa6\x5f\x04\x55\x02\x22\xc8\xb2\x6f\x7a\xb7\x71\xe4\xad\x8f\xfb\x64\x14\xec\x44\x40\xee\x24\xc9\xc2\xa8\x40\x44\x20\xa8\xd4\x35\x1c\x81\xe0\x30\x15\x16\x7e\xea\x76\x43\x2a\xf5\x5f\x9f\x00\x63\xae\xcb\x5b\x0b\xeb\xdf\x5a\x25\xf5\x46\x73\x63\x12\xe9\xe0\x0e\x63\xc4\xf6\x2e\xc0\xb8\x98\x6b\x48\xbb\x80\x30\x71\xf7\xbb\x43\xf8\xc7\xcb\xd1\x45\x1f\x7d\xdb\x8d\xd1\xc5\xe8\xa2\x7f\x72\xf5\x6e\xf0\x6e\x34\xfe\x46\x6f\x65\x8a\x9c\x6a\x5a\x78\x28\xd0\x78\xe4\x04\x98\x5c\xd3\x61\xe1\x31\x46\xa5\x62\x4a\x20\x15\x8c\xd7\x23\xc1\x34\x53\x36\xba\x50\xf7\x08\x7e\x14\x04\x42\x32\x9d\xa5\x00\x0a\x22\xa3\xf1\x40\x03\x1f\x1c\x5f\x01\xbe\xab\xb3\xd1\xf8\xe2\x7c\x27\xe6\x76\xa7\x81\xf1\xbd\xf8\xce\x9e\xb5\xff\xdb\xc3\x61\x54\x8b\x7f\xcd\xe2\x53\xc2\x0f\x8f\x7a\x9f\x80\x8a\x95\x63\x72\x85\x8a\xf6\xa7\x64\x03\x4a\x34\x0f\xa0\xdf\xbd\x7c\xf9\xf2\x65\xe5\x7a\x1c\xc2\x2b\xbb\x50\x51\x6d\xb1\x70\xf7\x31\x7d\xe3\xba\x1a\x5f\x9e\x0c\xce\xe1\x6a\xf6\xe4\x08\xb3\xab\xc2\x23\xd5\xe8\x7f\xc4\x22\xfd\x93\x47\x2e\xd2\x9f\x4d\x8d\xb7\x48\xbf\x2d\xe1\x9e\xd5\x70\xcf\x6b\xaf\x4f\x0a\x65\xdc\xb3\x8b\xb2\x0a\x12\x6b\xa3\x28\xbe\x57\xac\xe7\x9e\xbd\xfa\xea\x65\xef\x65\xef\xd5\xab\xde\xcb\x17\x9f\x7f\xb9\xe1\x1b\x53\xd9\x3d\x7b\xfb\xef\x5f\x76\xbe\xfc\xf2\x8b\xcd\xb0\x5d\x46\x4d\xfe\xb6\x29\xa1\xb2\x50\x2a\x81\x79\x01\x57\x34\x52\x02\xcf\x66\x34\x30\xe7\xdb\x3f\x71\x46\xfa\xf9\x6d\xde\xdc\xe7\x2b\xba\x02\x34\x64\xcf\x26\x1d\x5e\x3c\x36\x29\xf4\x6d\x57\xa1\x8b\xfe\x9b\xdd\x04\xf5\x9e\x48\xf8\x34\x06\xb2\x16\xad\x87\xfe\x26\xcc\x64\x8f\x60\x25\xdb\x7d\xf2\xf6\x63\x2e\x2b\x77\x1a\x9a\x98\x5e\x43\xc5\xa6\x42\x13\xd7\x6e\x68\x62\x1b\x0e\xad\xfc\x98\xf7\x1c\x9a\x64\x5d\x87\xf2\xb6\x43\x45\x53\x5b\xae\x24\x43\xef\xe6\x95\x71\xa7\x92\x88\xae\x93\xee\x6e\x16\xa0\x37\x34\x94\xab\x2f\xfd\xec\x56\x54\x16\xca\x35\x29\x8e\x8e\x5e\x43\x48\xc6\xb6\x86\xbd\x95\x89\x0f\xa7\xd9\x9f\x92\x46\x4b\x22\x56\xcc\x7c\x02\xc7\x57\x73\x33\xda\x2f\xb7\xb6\xe8\x35\xc6\x55\xb2\xef\x65\x28\x27\x16\xed\xd6\x26\xbc\xed\xc6\xb8\x19\xe9\xba\xcd\xae\x31\xd4\x26\xd6\xb4\xb6\xd0\x15\xcc\x55\x44\xa5\xea\x20\x3e\xeb\x40\x83\x67\xfd\x64\x1f\x52\x78\xb7\x11\x3d\x26\x05\x0a\xad\x8d\x79\x1f\x23\x86\xfc\xba\xae\xe2\xd7\x84\xa1\x93\xfe\x57\x83\x13\x74\x36\x1e\xbd\x1f\x1e\x0f\xc6\xe8\x62\xf4\xf5\x60\xa7\x7b\x9f\x43\x61\xeb\xb4\x3a\x99\xf6\xd5\x78\xf4\xf5\x60\xbc\x1e\xbf\x04\xf5\x30\xbf\xed\xba\x68\xb1\x80\x27\x24\xdc\xc7\xd1\xda\xbd\x26\xb7\xeb\x02\xd5\x3d\xf8\x7a\xf0\x8d\xd7\xe9\xe4\xed\xc5\xf8\x38\xad\xba\xb7\x25\xfb\x57\xdb\x57\xf2\x31\xfb\xdf\xb6\x98\xa4\x9d\x9a\x4a\xee\xd0\x07\xf7\xb1\xd8\xf1\x13\x37\x01\x7f\x12\x36\xfd\x94\x1d\x76\x9f\xb6\xb9\xee\xbe\x18\xba\x79\xbf\xc9\xf6\x4d\x76\xf7\xcd\xd1\x4f\x70\x69\xe9\x55\xe9\x18\x4d\x99\xf7\x6f\xe2\xd2\xf2\xa8\x5e\xfd\x5d\xb9\xf4\x13\xb9\xf7\x2b\xc8\x07\xb5\x2a\xbe\xd5\x7f\x6e\xe9\xd1\xdf\x06\xee\x13\xa9\x8d\x9b\x47\xb4\xb2\xcf\x4b\xdb\xbc\x65\x8c\xdb\xa7\x1f\xf0\x02\x0b\x12\x3a\x07\x45\xee\x53\x06\x03\xab\xb0\x76\x46\xb0\xa2\x8f\x8d\x95\x71\x37\x15\x12\xac\xb5\xb9\xff\x6f\x34\x7e\xf3\x1d\xfa\xb6\xfb\xc1\x3c\xea\x82\x3b\xe1\x11\x11\x5c\xed\x09\xc1\x1e\xfc\x27\x45\x38\xce\x8b\xb2\xd1\x67\x12\xa3\xff\x08\xfe\x13\xa8\xf9\xb2\x76\x45\xd9\x3f\xc4\x8d\xe2\xa4\xfc\x6a\xb7\xcb\x05\x9d\x83\x37\x6e\xf8\x66\x78\xba\x51\xce\x05\xb3\xd2\xb7\x3f\xf4\x64\x4c\xd5\xa2\x14\x09\x7f\xfe\x45\x20\xbe\x50\xab\x0e\x06\x84\x7e\xe3\xba\x95\x42\xbc\xb2\x68\x0c\x2f\x23\x2b\x0a\x71\x52\x82\x77\x72\xdc\x3f\x6b\x09\xcb\x1e\x8f\xa2\x6b\xea\x98\xff\x06\x9d\xf7\xdf\x9d\xe8\x53\x6a\x94\x10\x36\x3c\x46\x47\x9c\x31\x7d\xb8\xcf\x48\x48\x04\xd8\xcd\x2b\xaa\x0e\x36\x5e\x96\x35\x33\xd4\x26\x03\x6c\x82\x8e\xc6\x83\xe3\xc1\xe9\xc5\xb0\x7f\x02\x6c\x1a\xa1\xf3\x6f\xce\x4f\x46\x6f\xae\x8e\xc7\xfd\xe1\xe9\xd5\xe5\xf8\xa4\xc0\xf2\x57\x0e\x82\x7e\x6c\x75\xb4\x33\x2c\xa5\x49\xba\x41\x12\xb2\x8a\xc1\xee\x2f\x48\x68\xda\xb2\xe5\xe7\x35\xa4\x31\xc8\x62\x4b\x81\xbc\xf0\x10\x8a\x79\x68\x7b\xf1\xb6\x1b\x49\x37\x81\x86\xe2\x71\x8c\x3b\x39\x19\x9d\x1c\x79\xc7\x60\xd7\x8a\x60\x81\xea\x0d\x54\x42\x05\x71\x38\xbe\x15\xb7\x34\x14\xca\x21\xac\xd5\x4b\xda\x91\x66\x7d\x9c\x5d\x93\xdb\x57\xf9\x7d\xe1\x15\xdc\x21\xae\xc9\xed\xe7\xf9\xb3\xcf\x0b\x97\x88\x73\x50\xa4\x6e\xa1\x96\x49\x51\xb3\x29\x2a\x5d\x10\x13\xbf\x1b\x61\x45\x35\xa7\xd9\x45\xf0\x89\x59\x0e\x0b\x68\x52\x23\x57\xaf\x2f\x21\xb1\xcb\x1a\x50\x4c\xa5\xe5\x05\xd7\x67\x6f\xf9\xf0\x17\x31\x4f\x23\x6c\xab\x73\x28\xba\x84\x5a\xfb\x31\x0f\x0b\x95\xac\xf8\x53\xf3\x21\x16\x55\x23\x80\xfc\x51\x60\x48\xd3\x88\x40\x50\x53\xa4\x24\xbb\xf3\x6d\xaa\xc3\xf5\xe4\x6c\x39\x70\x0a\x3e\x2e\x5d\x1c\x57\x5b\xd6\x67\xf7\xdb\x7d\xb3\xe8\xaf\x46\x28\xba\x2b\xc1\x3e\xc5\xe2\x8e\xfc\x38\x69\xc4\x91\x45\x5b\xfc\xfe\xa4\xe3\xce\x7c\x38\xb1\x9c\x58\xba\x89\xbe\xca\x6e\xa9\xc0\x91\xa5\xdf\x3e\x5f\xb9\xa6\x36\x17\x98\xfb\x63\xc7\x26\xb7\xb6\xcd\x90\xe3\xdb\x6e\x38\xed\xc6\x94\x11\xb7\x74\xae\x2c\x47\xa7\x94\x20\xda\x1a\x64\x16\xf8\x96\x2f\xaf\xdc\x90\x51\x56\x0b\x51\x60\xca\xb2\x07\xdd\x08\xc9\x5b\x19\xf1\xf9\xe1\x8b\x17\xfe\x98\xd5\x1a\x90\xe5\x1c\xa3\xae\xc8\x52\xb7\xcb\x10\x9b\x3a\xc2\x9a\x4c\x86\xe1\x2f\x37\xc3\x19\x1f\x41\xc1\xc5\x8c\xc5\x8a\xd3\x7e\x68\x1e\xfc\xee\x77\x37\x5c\x6b\xb9\x2d\x82\xe1\xb7\x5c\xfd\xcc\x8f\x55\x20\xb2\x1c\x95\xee\x88\x9d\x38\x82\x37\x26\xfa\x1e\xe6\x3f\x64\xc4\xb7\x8c\xa3\xdf\x76\x7e\x1f\x97\xfc\x9d\x2e\xfc\x8d\x56\x61\xd3\x0e\xdc\xc9\x49\xb5\xd3\x36\x7d\x1c\xc4\x4d\x76\xf3\xa3\x60\x6e\xb2\xe9\xdb\x21\x4e\x45\x84\x26\xcf\x5e\x2c\x3f\x7f\x01\xde\xf4\x67\xa8\xfb\x47\xf4\x66\x70\x81\xba\x6f\xd1\xe4\xd9\x11\xe8\x21\xaa\x7b\x71\x9b\x90\xc3\x62\x4e\xda\x8b\x8f\xdd\x9b\x9b\x9b\xee\x8c\x8b\xb8\x9b\x8a\x88\xb0\x80\x87\x24\xd4\x5f\x87\xe8\xe0\xc3\x7f\xd7\x6c\x70\x08\x61\x74\x2d\xf9\x6e\x9d\xaa\x10\xfd\xc3\x8b\x62\xbc\x78\x7b\xb8\x10\xe6\xfb\x6d\x97\x2e\xb5\x72\xf2\x47\xf4\x6e\x70\xf1\x76\x74\xac\xff\x7e\x8b\xde\x0e\xfa\xc7\x83\xb1\xfe\x3b\x44\xc7\xfd\x8b\x3e\xd8\x1c\x78\xaa\x92\x54\x21\x7d\x60\x39\xcd\xfa\xab\x5b\x57\x62\xab\x10\xd9\x90\x8a\xe8\xc0\xa4\xf6\x25\x44\xe8\x99\x41\x18\x66\xd2\x1a\x64\xad\xe6\x47\x42\x20\xa0\x87\x86\x33\x68\x06\x0f\xf0\xa8\xcc\x43\xdd\x96\x14\xa3\x6e\xd8\x41\x18\x9d\x8d\xce\x2f\x0c\xc0\x29\x71\x30\x21\x24\x4c\x2a\x82\xc3\x8e\xeb\x71\x86\x8a\xab\x04\xe0\xdc\x37\x92\x28\x5b\x33\x29\x5b\x37\xbd\x37\x7a\xd0\x51\x2d\xc6\xb7\x88\x2f\x89\x10\x34\x24\x68\x41\x70\xa8\xd5\x16\x88\x84\xeb\xbe\x75\xa0\x01\x9a\xeb\x02\x13\x13\xb5\xe0\xb6\x8b\x44\xf7\x8f\x3d\x3b\x15\xaf\xb9\x80\x36\x2e\x21\x0f\x52\xe8\x5a\xad\xd1\x74\x50\x62\x2a\xcc\x2e\xa9\xa4\x0a\x98\xd5\x34\xd5\x0d\x79\x20\x7b\x41\xc4\xd3\x70\x66\x7a\x55\xf7\xb8\x98\xfb\x82\x95\xf7\xbd\x6a\x67\x50\x5e\x20\x14\x0f\xff\xca\x3b\xab\xeb\x06\x15\xcb\x14\x16\x0f\x3f\x6b\x3d\x5c\x2f\x9b\x75\xff\x00\x5e\x92\xa9\xed\x21\xef\xa1\x73\x82\x66\x5c\x90\x18\x80\x82\x7b\x2a\xa0\x61\xd6\x98\x5f\x5f\xa0\x62\x62\xba\x48\xea\x75\x4c\x63\xb3\x90\xd2\x54\x32\x36\x78\xa0\x95\x3f\x8a\xd2\x39\x16\x88\x20\x8e\x5c\x3f\x1a\x50\xfc\x1f\xfe\x3d\xe4\x00\xdb\x7c\xb2\xd2\x53\xa3\xd8\x08\xc6\x2e\xe7\xc3\xff\x85\x12\x2e\xe5\xc3\x5f\x96\x24\x42\x32\x9d\x4a\x45\x55\x4a\x05\x0a\xf0\x94\x3c\xfc\x82\xa3\x85\x25\xab\xfb\x56\x23\x9b\x30\x14\x3f\xfc\x49\xe9\xcb\xdc\x5a\x4f\x1e\x78\x2b\x5b\xdb\x33\x98\x82\xa9\xd6\xbe\x71\xbe\xc0\x59\x93\xa4\xfe\xd9\xb0\x63\x56\x98\xd4\x2f\xf1\x23\xef\x4b\x77\x32\xef\x73\x67\xee\x7b\x6b\xee\x79\x6f\x56\x6e\x4e\x37\x1f\xfb\xd8\x9e\xd5\x6a\x3a\x88\xea\x49\x41\x58\x4f\xca\x87\xc8\x64\xfb\x63\x64\xb2\xe9\x20\x69\x84\x76\x2f\xa7\x84\x6d\xb0\x57\x48\x84\x99\xa1\xae\x68\x67\x51\x5e\x87\x25\x34\xf3\xce\x76\x81\xb6\x31\x79\x65\x57\x98\xab\x3e\x95\xdd\xa0\xd9\xac\x8f\x3d\xc0\x49\x16\x98\x39\x7b\xbf\xdc\x19\x5e\xd9\x85\xb1\x1b\x2c\x13\xd5\xdf\x34\xb9\x62\x0f\xd9\x15\x5e\xbc\xa5\x74\x06\x48\x01\x2c\xe1\x5d\x4f\xfb\x7b\x6c\xf4\x8f\x95\x75\x58\x41\x82\x3f\x8d\x62\x6f\x79\x14\x16\x7b\x75\x5a\xc3\xae\x5c\x55\x61\x6f\xdb\x0b\xe0\x8a\x98\xbf\x7d\x61\xd8\x1c\xf2\xb7\x2f\xe8\x0d\xe2\x4d\x9e\x10\x51\xe5\xd9\xb8\x01\x60\xee\x2f\xdf\x17\x89\x7b\x82\xb8\xd9\xb3\xbe\xe3\x4c\x6e\xf6\x6f\xef\x01\xa8\x15\xe4\x05\x47\x7c\xd7\x1d\xd5\xfb\x05\x6e\x9c\xf0\x57\x7b\x01\x5e\xf6\xec\xb6\x87\x66\x92\x51\xbb\x33\x82\x55\x2a\x48\x77\x16\xe1\x39\x7a\x3d\xe8\x5f\x5c\x8e\x77\xa8\xae\xe8\xa0\x66\x62\xc2\x74\x33\x76\x89\x09\xdf\x76\x13\x48\x4e\xf8\x2e\x5b\xc8\xdd\xb0\xc8\xc5\x6e\xd5\x18\x35\xa0\xfd\x96\x97\xb4\xed\x23\x5b\x7d\x6b\x5c\x12\x7b\x5e\x11\x0b\xf4\x71\x17\xc4\x21\xd9\x75\x3d\x08\x5b\xee\x08\x60\x49\x98\x92\xed\xa2\x54\xec\xb7\x3b\xe1\xdf\xef\xda\x15\xa1\xb5\x63\x29\x7d\x7b\x91\x85\x7b\x83\x2b\xc9\x97\x87\xdd\x7c\x37\x61\x13\x05\xff\x6f\x92\x6d\x18\x42\x17\xdc\xf4\x7b\x80\x14\x71\xa6\xef\xb5\xca\x02\x32\x8d\x3a\x70\x92\x64\x15\xa6\xb8\xc9\x2c\x3c\xa6\x64\xce\xa1\xef\x0e\x61\x61\x07\x4a\xc8\x65\x17\x67\x29\x17\x3e\xfb\x5d\x2b\x32\xa1\xb7\x8e\xa6\x13\x0c\x0b\xd0\x27\x42\x20\x62\x29\xa5\x9c\x61\xe1\x3c\xa0\xe0\xde\x35\x5d\x10\xca\x1d\x30\x10\xcb\x88\x35\xa4\x6f\x22\x79\xe7\x89\x5d\xc9\x60\x7a\xba\x69\xad\x26\x7d\x4e\x54\xd7\x74\x3e\xee\x9a\xce\xc7\x3b\x71\xfc\x82\x44\x09\xfa\xf6\x68\xf4\xee\x5d\xff\xf4\xb8\x9d\xf4\x30\x8d\xf8\x23\x5b\x55\xd8\x56\xe7\xe8\xea\x19\x7d\x71\x31\x7a\x71\x76\x72\xf9\x66\x78\x8a\x7e\x82\xdc\x8e\x9f\x50\x57\x14\x6a\x15\x9b\xdf\xe0\xef\xcf\x8c\x22\x65\x4d\x4e\x82\xc7\x89\x6d\x5c\x00\x86\x2f\x11\x9b\x10\xd8\x94\x45\x5a\xfc\x1d\x74\x67\x07\x45\x9b\x4c\x9d\xed\x70\xff\x14\x9e\x5b\x83\x59\x46\x1e\xf0\x65\x07\x61\x14\x13\xc6\x25\x74\x1a\x03\x2a\x25\xf9\x01\xe7\xe6\xc1\x1a\x0b\xd8\x3e\xe9\xcc\xdc\xd3\xdb\xce\x65\xa5\x32\xbb\x42\xe1\xff\x7c\x71\x6c\xbb\xfc\xc9\x17\xb6\xa8\xf4\x8c\xf3\x29\x16\x95\x5f\x6d\x70\x5b\x94\xbf\xbe\x8a\x28\x4b\x3f\x5e\xe1\x38\xfc\xbb\x2f\x2b\x21\x75\x05\x7a\x77\xdb\x85\xda\xd5\x16\x00\x09\x16\xed\x6e\x95\x4f\x06\x79\xab\xd1\xef\x03\xa1\x77\x91\x5a\x01\xd7\x32\xb0\x58\x40\xbc\xdd\xc1\x66\x5a\x9d\x3d\xe7\x31\x55\xc8\xb9\x0c\x41\xb2\x66\xd5\xa5\x4d\x2f\x38\xca\x50\x29\x48\x02\x75\xbb\x19\x2f\x18\x5b\x2e\xb0\x37\x70\xf7\x94\xab\x45\x5d\x89\xe0\x02\x5e\x6a\x82\xa2\x50\x58\xe8\xb3\x4a\x4c\x31\xe0\x4d\x6d\xd9\x56\x82\x86\x8a\x84\x38\xeb\xb9\x78\xf8\x19\xe1\x78\xca\x65\x4d\xf1\x60\xdb\x4f\xae\x2b\x25\x47\xcf\x57\x47\x63\x73\x03\x6c\xdd\x18\x3e\x55\x18\x82\xfd\x39\x23\x50\x5e\x69\x7d\x82\x9a\x0d\x79\x05\x9b\x91\x48\xc4\x78\x3a\x30\x48\x94\x24\xb7\xf3\xa7\xb1\xad\x8a\x5c\xea\xdb\x66\xde\xb0\x38\x9b\x0c\x30\x5d\x2f\xc6\x0c\x3e\xe2\xd5\x40\x81\xbd\xd4\xb4\x6e\x8b\xb3\x7d\x69\xeb\x1a\x8c\x8f\x51\xe1\x7a\x5b\x94\xbb\x17\xba\xae\xc4\xe8\x02\x0c\xd0\x73\x69\x03\x87\x36\xef\x65\x2c\x11\x16\x73\x70\x3d\xc8\x9d\x86\x98\x23\x24\x85\x18\x3a\xef\x36\x36\x8e\x32\x8b\xb9\xe1\xb6\x34\xf1\xe8\x43\x17\xb7\x96\x66\x77\xf5\xef\xcc\x6d\xcb\x46\x6d\x7f\x57\xb4\x65\x48\x64\xab\xbc\xb6\x2d\xe7\xbf\x07\xd4\xff\x91\x4a\xff\x3f\xda\xe9\xb0\x09\xcd\x3e\x79\x7b\x0b\xf8\x93\x7d\x35\x32\xa8\xc5\xe2\x8b\x13\x9a\x34\xec\x67\xb0\x11\xdd\x23\x1f\x5e\xb5\xdb\x85\xa7\xbe\x1e\x76\xb5\x9f\xee\x68\x23\x88\x71\x92\xd7\x72\x82\xab\xe9\xd3\x39\x7f\x2a\x71\x3f\x8d\x03\x68\x4b\x12\x1e\xcb\x09\x54\x43\xc6\x13\x38\x82\x62\x2c\xae\x89\x4a\x22\x1c\x90\x76\x06\xab\x22\x80\x42\x72\x54\xbb\x4b\xb8\x6d\x84\x9e\x19\x0a\x5d\xd2\x9d\x44\xcb\x57\x2e\xe8\x5a\xff\x99\xf9\x79\xf4\xdf\x27\xfd\x53\xb4\xfc\x3c\xff\xf9\x73\x78\xd4\xfa\x14\xdb\x27\x0d\xa5\xe3\x0c\x5d\x2c\xa8\x44\x3c\x21\x36\x13\x16\x7a\x96\xdb\x8c\x25\xc5\xd1\x51\xc4\xd3\x10\xbd\x36\xc1\x0a\xff\x2d\x8b\xb0\x36\x1e\xa8\x42\xa1\xf5\xa9\x8d\x63\x0e\x5c\x65\x2e\x41\x4c\xfd\x4f\x23\x6d\x57\xbb\x51\x96\xbf\xc4\x91\x22\xd0\x37\xdb\x94\x24\xa3\x31\x16\x70\x24\xa0\x00\x4b\x08\x05\x32\xed\xd4\x4b\x44\x42\x3b\x6d\xb3\xc0\x78\x85\x2c\x74\xb3\xa0\xc1\x02\x51\xcd\x88\x70\x76\x80\xc1\x68\xf9\x0a\xd9\xfe\x72\xe8\x2b\xf3\x5a\xff\x6c\xe8\x84\x7f\xe5\x87\x9f\xc3\x9b\xd3\x5b\x24\x48\x8c\x93\xa4\xd8\x41\x2f\x1f\x0f\x94\xd1\x5a\xbe\x82\x1e\xee\x40\xdd\xf2\x73\xf3\x77\x0f\xa1\x3f\x98\x13\x3b\x8e\x09\x1c\xe1\xd7\xae\xdc\x99\x7d\x1d\xd9\x8e\x50\x48\x4f\xd4\x22\x35\x1d\x87\x43\x7e\xc3\xdc\x4b\x96\x3a\xc5\x51\x22\xc0\x14\x8b\x70\x18\x52\x93\xf5\xbc\x4a\xc2\x94\xe8\xaf\x4d\xb8\x63\xd8\x43\x23\x16\x90\x0d\xd4\x2e\xf0\x92\xa0\x29\x21\xcc\x31\x56\xd8\x71\xc8\xf2\x62\x40\xfa\x28\x86\xd1\xd8\xd4\x66\x41\x62\xbe\x74\x15\x31\x4b\x8c\xd1\xae\x1a\x26\xcf\x3d\xa5\xed\xbe\xdf\xa1\xf2\x65\x1e\x3f\xd1\x9d\xa7\xb4\x65\x25\x14\x2e\xe6\xe0\x73\x92\xbb\x90\xd1\xee\x92\x0f\xa7\x7d\xd8\xee\x53\x30\x30\xb4\x44\x6b\xbe\x85\x4a\xc2\x0b\x12\x5c\xcb\x34\x6e\x37\x75\x49\x2a\xe6\xeb\xd2\x6c\xcd\x1d\xfc\x98\xb0\xab\xe5\x20\x96\x32\x85\x7c\x98\x05\x56\x26\x88\xad\x2c\x63\x04\x91\x09\x67\x46\x47\xcf\x24\xd4\x5a\xd3\x5d\x2a\x21\x0c\x91\xb3\x39\x11\x85\xea\x5a\x5c\x98\x5f\x94\x05\x03\x17\x09\x2b\x8a\x3e\x7f\xf9\x52\xff\xfe\xe5\xab\x97\x79\x94\xdb\x1a\x5c\x7d\xd7\x84\xed\x6b\x3c\x9f\x61\x07\x45\x04\x2f\xc1\x3c\x0e\x01\x3d\xf6\x86\x00\xd5\x0c\x4a\x3b\xf5\x40\x42\xe8\xdd\x14\x4b\xd2\x43\xfd\x28\x42\xd7\x8c\xdf\x44\x24\x9c\x43\xd1\x80\x8d\xb8\x5c\x40\x9d\x7f\xfb\x77\x10\x65\x41\x94\x96\x7a\x8b\x4e\x4d\x1f\x4d\x23\x46\xdc\xc3\x6b\x72\x2b\xdb\xc9\x8a\xf2\x9a\xf2\xd9\x8c\x08\x8d\xad\xe4\xac\xb3\x47\xdf\x3e\x18\xb2\x1a\x41\xc1\x0a\xfc\x28\xec\x93\x61\xdf\xcc\x3e\x86\x2f\x70\x14\x55\x0a\xf6\xc7\xe3\x8c\x76\x0c\x91\xd3\x58\xe4\x08\xc7\x26\x3d\x74\xca\x11\x56\x8a\xe8\x3b\xa5\x43\x10\xe3\x10\x2e\xc0\x56\xb3\xd8\x30\x8f\xff\x2d\x73\x0b\xc1\x04\xba\x8b\xb7\xde\x4a\x3c\x55\x28\x24\x52\x09\x7e\xeb\xce\xdb\x55\x35\x41\xa3\x09\xb0\x56\x34\xec\xdc\xac\xd1\xda\x43\xfd\x99\x22\x62\x33\x96\x5b\x1b\x48\x7a\x83\x19\x84\x9a\x8a\x94\x21\x42\xf5\x65\xbd\x22\x24\x88\xaf\xfd\x98\x9f\xee\x01\xd7\x9a\x87\x22\x40\x6c\x10\x11\xcc\xd2\xa4\xed\x76\x91\x8b\x76\x9a\x73\x21\x80\xaf\xfd\xf7\xed\x0e\x17\xc3\x4f\xbe\x0e\x9a\xfb\x02\x99\x39\x76\xf6\x0e\xb0\xd2\xee\xf2\x28\x83\x83\xdb\x60\xe6\x69\x3d\x1d\xfc\xe1\x6a\xa7\xeb\xb7\x01\xb8\x29\xfa\x35\x47\x50\x7e\xb4\x0b\x1a\xa7\x82\x69\xa8\x6d\xf5\x27\x0b\xca\x1b\xd3\xa7\x61\xef\x45\xa7\x28\x23\xf2\x44\xe0\x15\xb1\x99\x47\x3b\xe1\x2a\x04\x77\x01\x64\xfd\x57\x4b\x80\x09\xef\x3a\xd5\xad\x2b\xf6\xc0\x78\x05\x78\xdf\x16\x9d\xa5\xed\xce\xde\x0a\x78\x35\x7b\x6a\xdf\xe3\x92\x0a\xcf\xc9\x6e\x36\x2c\xdb\xb1\x62\x2f\x40\xa0\x71\x44\xa6\x88\x65\x1b\x7d\x78\x7a\x3c\xf8\x63\x3b\xb8\x85\x3a\x3e\x2d\x85\xb4\x8b\x13\xd7\xfb\x37\x22\x4b\xd2\xb2\x31\x85\x48\x59\x57\x61\x99\x87\x58\x20\x1b\x28\x01\x8d\x3f\xb4\x5c\xbb\xe8\x9f\x7f\x5d\x64\x82\x95\x82\xb7\xc1\x0c\x0c\x8e\x50\xd3\x36\xa4\x32\x89\xb0\xa9\x04\x0e\x56\x48\xab\xb1\xe0\x24\xc9\x74\x25\xaa\xaf\xf3\x58\x5e\x4b\xc8\x3f\x01\xab\x39\xe0\x07\x5c\x54\xa2\x94\xd1\x0f\x29\xe9\xa0\xb9\x20\x49\xe9\x9c\x3f\x90\xc8\x66\xc2\x18\x45\x8d\x14\xbe\xd3\xf7\x7c\x4a\x6e\xe0\x49\x5e\x5b\x4c\x93\x50\xed\xeb\xcf\x46\x6f\x2d\x6c\x93\xc9\xe4\xd9\x34\x65\x21\xd4\x1a\x27\x01\x12\xf8\x9a\xa0\x70\x7a\x68\x6f\xe7\x26\xf7\xc2\x4c\x8b\x7d\xd4\x76\xd2\xa1\xe3\x20\x61\x4b\x2a\x38\x8b\x09\x53\xdd\x25\x16\x14\x42\xd4\x80\x29\x76\x02\x5b\x0e\xdc\x6e\xc7\x5f\x12\xda\xd0\x14\xd2\x39\xf2\xb0\x21\x28\x81\x70\x8d\x8e\x87\xe7\x5f\xaf\x96\x42\x6a\x19\xe9\xb9\xff\x86\x51\x7b\x99\x02\xcf\x69\xb6\x0b\x30\x17\xdd\xf8\x6d\x77\x8a\xcc\xd1\xa4\xa7\x2d\xc3\xb1\x63\x90\xe3\xba\x9e\xbb\xd3\xc8\xed\xf1\xba\x1b\x8c\xba\xe8\xf2\x47\x05\x5e\xb9\xf9\xf7\x18\x5c\xfe\x38\xa0\xd6\x8b\x89\xed\x1f\x62\xd3\x19\x92\x30\xae\xdd\xf1\xef\x0a\xa5\x2d\x33\xaa\x6e\x31\x72\x17\x0d\x4e\xdf\x5f\xbd\xef\x8f\xcb\xff\x78\xdf\x3f\xb9\x6c\x3b\xc5\x9e\x80\x45\x74\x90\x70\xa1\x0e\x7e\x3a\x60\x9c\x91\x76\xc1\x90\x7e\xd8\xcf\x13\xc1\x41\x9a\xfc\x84\xc0\x19\xf4\x13\x04\x5e\x7d\x56\x68\xc4\x6a\xd0\x16\xcd\x54\x89\x20\x01\xd4\x9e\x99\xa6\x0a\xfa\x30\x05\x01\x49\xa0\xbf\x12\x17\xe8\xc0\x02\x3c\x68\x77\xdb\xd5\x94\x72\x31\xef\x0a\x1e\x91\x3c\xfe\x5f\xdf\x2d\xc6\x23\x53\xc3\xf5\x31\xc0\xc2\x68\xf5\x5f\x8e\x7b\x0f\x46\x62\xfe\x0e\x33\x3c\x27\xe2\x00\x75\xd1\x90\x2d\xa9\x22\xd6\x6d\xaf\x9f\x82\x97\x5b\x76\x90\x24\x11\xb4\x21\x61\x21\x0a\xa0\x61\xad\x31\xb3\x77\xac\x61\x44\x21\x99\x10\x63\x12\x84\x76\xc6\xb6\xed\xc9\xc1\x57\x34\x8a\x28\x2b\x62\x38\xb2\x85\x6f\x72\x0c\x5a\x3b\x99\x9a\xf7\xf4\x0c\xf3\x94\x29\xeb\x52\xbf\xd5\x87\x3d\xa2\x6c\xc6\x73\x62\xfb\x69\x48\x15\x07\x50\x63\x57\xbb\x12\xd9\x83\x42\x71\xb0\x91\xeb\x0f\xac\x3f\x07\x6a\x01\xb6\x9e\x48\x63\x57\xd0\x93\x07\xb6\x85\x9d\x16\x65\x15\xd6\x8a\x7a\xf8\x5e\x6b\x64\x90\xbc\x00\xc6\x56\x63\x91\x30\xe6\xd5\x83\xb2\x99\xa2\xfd\xc6\xa8\xd7\xa4\x9a\x97\x65\x7e\x64\x22\xda\x95\xd7\x6d\x4d\xd4\x7a\xfa\x10\xfc\xb4\x9a\x49\xb4\x3f\xf8\x57\x39\xfc\x42\x32\xd1\x8e\xf0\xd7\xf7\xbc\xb9\x88\xef\x2c\x50\x1a\x80\x5f\x17\x2c\xe7\xfa\xa3\x26\xa2\x45\x3f\xb1\xe5\xbb\x6c\x86\x84\xf1\xbf\x62\x34\xa7\x4b\xc2\x4c\x90\x4b\x11\xe8\xb1\xbe\xc1\xf1\xc4\x27\x4f\x70\x92\x94\xec\xb5\x99\x90\xb2\xf7\xac\x82\x64\x28\x42\x2d\x08\x16\xd8\x8c\xfa\xdd\x8e\x7b\x31\x93\x73\x0a\xfc\x03\x10\xcf\x4f\xa5\x21\xad\xfd\xb4\xda\x16\xb0\x9f\x74\x3f\x36\x23\xe2\x29\xf7\xe3\x02\x0b\xd2\xb5\xee\xe5\x3d\xb5\x1d\x2c\x98\xa5\x76\xfd\x3e\xf3\xbe\x42\x63\x8a\xd2\xcd\xa9\x0b\xad\xc0\x5a\xde\x46\x2a\x72\x0c\x77\x05\xd8\xf2\x00\x74\x39\x74\xa6\xf8\x2e\x09\x77\xcd\xa5\x33\x00\x33\xdf\xf3\xae\xcb\xd1\x72\x54\x85\x9c\x36\xb8\xa8\x17\xad\x55\x5d\xca\x42\xf2\xf1\x3b\x28\x4e\x6f\x0d\x29\xfa\x1f\x27\xe8\xdb\x29\x65\xe1\x15\x0e\x43\x41\xa4\x3c\xfc\x4e\x8b\x84\xc3\x05\x97\xe6\x7f\xf4\xbf\x0c\x37\x5c\xd3\x04\x02\x9e\xba\x50\xc8\x1c\x28\xca\x7f\x10\x24\xe6\x8a\x74\x4d\xad\x17\xf7\x8b\xad\xd4\xd1\x4d\x24\x49\x43\xde\x55\xea\x16\x1e\xcf\xb8\x08\xc8\xea\x43\x97\x26\x59\x78\xdc\x76\x0a\xba\x01\x0f\x5b\xca\x2d\xb9\xb0\x1d\x50\xc3\xdd\xac\x85\x52\xe1\xe0\x1a\x9d\x5f\xec\x64\x95\x07\x20\x2d\x19\xa1\x56\xee\xed\x04\x76\x2f\x36\x95\xdd\x6d\xb2\x52\xf1\x64\x37\x08\x0a\x8b\x39\x51\x9b\x42\x8c\x5b\x82\x93\xd7\x3b\x06\x5c\x2a\x22\x62\xca\xf4\xe1\x50\xb6\xc5\x82\xed\x75\x78\x5c\x79\x49\x5f\xf9\xd6\x5a\x32\xbf\x68\x45\x47\xca\xa0\x91\x7b\xb9\x0a\x9b\x4d\x92\xdf\x50\xa8\x21\x0f\x85\x7c\x3b\x3a\xbf\x38\xb5\x61\xdc\x85\xce\xe7\xed\x4d\x82\x8f\x42\x49\xe5\x3c\x6e\xc4\x58\x0c\xb9\x8c\x6f\x05\x56\x04\xee\x82\x44\x54\xb5\x56\xdd\xdf\x80\x9f\x1e\xfd\x46\x13\xf2\x3e\x2c\xb2\xdb\x20\x28\x58\x30\x8e\xe0\x66\x5e\x88\x53\xc4\x49\x12\xdd\x42\x79\xdc\x8f\x54\x42\x88\x9e\x0b\x0a\x28\xd4\x5b\x92\x28\x65\x8a\x46\xfa\x1e\x7e\x6b\xfb\x8c\x82\xe4\xf1\xe7\x51\x36\x22\xbe\xba\x22\xca\x6e\x0a\xc0\x76\x28\x7e\xbd\x33\x64\x18\x37\x93\x60\x7b\xb1\x60\x3a\xe0\x1b\x0f\xa2\x3d\x32\x67\x23\x04\xbf\xc2\xa9\x5f\xc9\x86\x34\x99\xb2\xed\xaf\xf7\x29\xfb\x94\x09\x00\x35\xd8\x9f\x26\x05\x60\x6b\x22\x1e\x2b\x09\xa0\x96\x90\x2c\x0d\xa0\x66\x2d\x20\x0d\xa0\x25\x09\x95\xe6\xf3\x1d\x60\x3e\x82\xb1\xb8\x16\xf0\x7f\x9a\x8b\xb7\x9b\xca\xb5\x5b\xfc\x8e\x86\x63\x1f\xd4\x82\x85\x60\x67\xb8\x8f\x62\x35\x6c\x8c\xe0\x3f\xed\x86\x5b\x4f\xec\x23\xd8\xc7\xd2\x24\xc4\xde\x12\x92\x09\xca\xab\xa1\x9c\x8d\xce\x87\x17\x43\xd3\x67\xdc\xda\x01\x7e\xca\x2c\x13\xf0\x30\xe2\xc1\xf5\x4f\xdd\x6e\xca\xf4\x1f\x2d\xaf\x33\x8f\x45\xcd\xaa\xd3\xe5\x4c\x9f\x42\x72\xc1\xd3\x28\x84\x94\x1e\xf4\x23\x4d\xa0\x86\x4b\x27\x4f\x5a\x2c\x3e\x04\xe6\x8a\x78\x80\x23\x14\x52\x41\x02\xc5\xc5\x6d\x0f\x9d\x71\x49\x5d\x86\x0f\x46\x09\xfc\x6b\x69\x5a\x51\xcc\x89\xd0\xb2\x50\x49\x94\x08\xca\xb5\x96\x64\x18\x42\xb3\x00\x17\xca\xc5\x21\x47\xfc\x86\x48\x08\xc7\x5d\xd0\xf9\x82\x48\xd5\x52\xb7\x31\xf3\xb6\x43\x67\xaf\x12\x04\x57\x10\x33\x46\x17\xa3\x8b\xfe\x49\xa1\xa1\xd7\xc6\x2e\x5f\x0c\x02\xfe\xdc\x6d\x72\xcf\x7d\xbe\xd0\x4f\xc8\x2c\xec\x27\xec\x03\x66\x27\xa7\xfa\xd2\xe1\x3a\x59\xfc\xfe\x7c\x74\x7a\x35\xbe\x3c\x19\x9c\x57\xb5\x01\x7a\x3c\x84\x59\xbd\x17\x93\x9e\x66\x6b\x15\x83\xda\xd5\xa6\xe9\xe3\x50\xb9\x7d\x02\xc1\xfa\x18\x49\xca\xe6\x11\x41\x58\x08\x7c\x6b\xdc\x94\x85\xb6\x8d\x12\x51\x26\x69\x48\xa0\x5c\x84\xa0\x53\x17\xcb\x0e\xf6\xf1\xbc\x0c\xf1\x7b\x68\xf7\xf8\x83\xe4\xcc\x34\x15\xb1\x0a\x98\xdd\x9c\xdf\xba\xe6\x09\x85\x66\xf4\x90\xb6\x2c\xb8\xe2\x01\x8f\xf2\xde\x8f\x2a\x48\xac\x2b\xa2\xf8\x5e\x48\xf4\xa5\x02\xa6\x3a\x7f\xf5\xd5\xcb\xde\xcb\xde\xab\x57\xbd\x97\x2f\x3e\xff\x72\xc3\x37\x56\xb8\xbb\xb7\xff\xfe\x65\xe7\xcb\x2f\xbf\xd8\x0c\x3b\x10\x34\x29\xc3\xee\x6b\xde\x84\xa8\x02\xd8\xe3\x50\xd7\x05\x29\x81\x67\x33\x1a\x98\x7d\xfe\x4f\x9c\x91\x7e\xde\x81\x24\xeb\x8e\xff\xdd\xaf\xef\x9a\xe4\x58\xaf\xa2\xcf\x8f\xde\xee\xae\xd8\xdc\xc6\x66\xae\xe8\xdb\xae\x42\x17\xfd\x37\xbb\xee\xb7\xfd\xd0\xf0\x09\x5a\xcb\xae\x8c\xe0\x6f\xa9\x73\x6c\x41\x78\x3c\x52\xff\xd8\xf5\xc9\xd9\x4f\x7b\xd8\x20\x4a\xa5\x22\xe2\x8a\xf1\x90\xd8\xbd\x5c\x90\x20\xf6\x1d\x7d\x6b\x30\xbf\xfd\xae\xb3\xfa\x63\x4c\x62\x2e\x6e\xaf\xe2\xa9\x79\xe1\xd5\xcb\xcf\xbf\xcc\x5e\xb9\x2f\xb5\x96\xf5\x2d\x07\xd4\x85\xe3\x33\xe3\x43\xea\x86\xd6\x0e\x19\x42\x8f\x7e\x93\x5d\xe5\xb2\x85\x6e\x04\x55\x8a\x30\x37\xbf\xef\x8f\xfa\x67\x2e\x1a\xff\x1c\x15\x5c\x13\xc8\xb9\x26\x8c\x86\xcb\x6e\xd1\x94\xa7\x2c\x2c\x89\x80\xea\xe8\xdd\x95\xe9\x86\xc0\xbb\x6e\x82\xe6\x3c\x0a\x1b\xbc\xe8\x38\x57\xe0\xf8\x6a\x6e\x26\xe6\xcb\xd5\xce\xb7\x9e\x0f\x9b\xb4\x7f\x6d\x00\x48\xc1\xda\xe8\x99\xed\x20\x3e\xeb\xc0\x5c\xea\x27\xfb\x10\x2d\x85\x31\xba\x11\xc2\xf8\xf6\x09\xfb\xd1\xba\xe0\x56\x2c\xec\xfe\xe0\x29\x64\xe7\x3e\x9b\xfa\x7d\x4c\x7c\x45\xd9\xe9\x8b\xd1\xd7\x83\x9d\xee\x32\xd5\x59\x2f\x6b\x5d\x57\xd1\xe5\xf8\x64\x27\x74\xbb\x36\xd5\xdd\x00\xa7\x70\xcb\x6f\xd2\x5a\x97\xa1\xff\xf8\xca\xf7\x7f\x80\xde\xac\xdb\x8d\xe4\xd7\xd1\x9b\x75\x6b\x9a\x9f\xaa\x37\xeb\xd6\x84\x6d\xd1\x9b\xf5\xd3\xb0\xdc\x93\xf5\x66\x7d\x7c\x3e\x7c\xf4\xde\xac\x4f\xc0\x96\xbb\xf7\x66\xdd\x8d\x45\x7f\x35\x42\xf1\xd1\x7b\xb3\x6e\xcf\x8f\xbf\x9a\xde\xac\x6d\xf8\xf0\x53\xf5\x66\xdd\x89\x1d\x9b\xdc\x30\xf6\xd2\x3b\x14\x35\x6b\x1e\xda\x0e\x7b\xc3\x36\xae\xb5\x10\xb7\x6f\xe3\x5a\x07\xf2\xd1\x3a\x3a\x6e\xb7\x36\xf9\xca\x68\x99\x68\x56\x45\xaf\x49\xbe\x22\xfa\x79\xb6\x1a\x6d\x23\x7d\xf7\xb1\x64\x8f\x83\xf8\xd1\x5a\x7a\x7e\x32\x06\x58\x7e\x81\x93\x96\x61\x88\x4b\x22\x24\x6d\x39\xd3\xf6\xdb\x4c\x68\x1d\x04\x33\xd4\x5d\x1e\x80\x81\x14\xfe\xee\xda\x37\x0e\xc0\x6a\x89\x23\xc9\xb3\x2c\xab\xad\x2d\x97\x17\xe3\xfe\xd1\x00\x0d\xc6\xe3\xd1\x58\x1f\x74\xfd\x8b\xe1\xe9\x1b\x74\x32\x7a\x03\xdd\x00\xd1\xdd\x5d\xef\x0c\xab\xc5\xfd\xfd\xe1\x84\xdd\xdd\xf5\x06\x42\xdc\xdf\x6f\x87\xe1\x64\x68\x6b\x49\x59\x8f\xa1\xd6\x48\x0e\xb7\x03\x61\xd2\xc5\xb7\xfb\xe6\xec\x72\xbb\xf7\x31\x03\xbb\x31\xb0\x97\x04\xbf\x54\x56\xc5\x86\xcf\x90\xbe\xbe\x65\x07\x1b\x5c\xdf\x3c\xd0\x4f\xb5\xfa\xf5\xf0\xa7\x42\x13\xc9\x0c\x22\x16\x00\xf3\xe1\x5f\xb4\x2a\x67\x34\xd5\x08\x33\xa3\xe2\x39\xf5\x4d\xa2\x04\xcf\xb9\xf4\xd3\xb8\x2b\x7d\xa5\xfe\x96\x9f\x88\x34\xf4\xfc\xd8\xf4\x95\x3c\xcc\x7a\xcf\x10\x6f\x65\xea\x9d\x09\x46\xcf\x6d\xa3\xd2\x43\x14\x12\x89\x35\x08\x1c\x7a\x0b\x36\x63\xa6\xb9\xc0\xb6\x1a\x5c\x2d\x12\xd4\x29\x95\xb7\x82\xed\x98\x15\xbf\x8a\x53\xa9\xd0\x8c\x0a\x09\x75\x0e\x6d\x49\xa6\xc6\x4c\x42\x3e\x06\x51\x4a\x05\xc2\x85\x61\x15\xc7\xd2\x41\x21\x59\x6a\x11\x97\xbd\x19\x2c\xf0\x92\x94\xc6\x8b\x08\x8a\xe8\x1c\x3f\xfc\xf2\xf0\x6f\x04\x5c\xa7\x31\xa1\x82\x57\x8e\x13\x4c\xae\xc5\x0a\x9a\x59\x49\x40\x57\x57\x09\xdb\x50\x66\x12\x56\xba\xdf\xd7\x47\x64\x5b\x92\xe4\x8b\x11\x12\x14\x13\x11\x60\xd3\x2b\x55\x09\x3c\xc5\xd1\x82\x23\x49\x8a\x75\xb4\x91\xf5\x3f\x85\x0d\xe8\x86\x82\x8a\x94\xcd\xb8\xeb\xc5\x30\xe3\x42\xcb\x2b\x5b\xfb\xf1\x14\xc7\xe4\xfe\x7e\x6f\x03\xb1\x88\xec\xec\x3a\x86\x33\x57\x9a\x35\xa4\xad\x06\xf5\x2b\x17\x3d\x9a\x44\x57\xc4\x79\xca\xd5\x02\x45\x3c\xb8\x86\x3d\x60\xe2\x04\x6c\xf9\x6b\x6f\xd5\xb7\x0d\x4c\x5f\xb8\x25\xe2\x78\x8a\xe1\x3a\xc1\x13\x33\xc5\x9a\xe3\xd1\x34\xe2\x1f\x52\x02\xb5\xc8\x8d\x5f\xd4\x3d\xf0\xb5\x00\xd9\x40\xa6\x3e\xb5\x4c\xea\xc5\xfd\x3d\x90\x7b\x77\xd7\x3b\x36\xc1\x0e\xe1\xfd\x7d\x6b\x6a\xb9\xec\x94\x41\x93\x55\xc0\x8d\x28\xcc\xa2\x35\xa6\x54\x19\x89\xa2\xe7\xf2\x85\x99\xd2\x76\xc4\x01\x24\x3d\x79\x19\xec\x7c\x22\x5f\x6c\x3d\x87\x10\xfc\xa7\xf8\x9c\x40\xb5\x33\xf0\x59\x67\x81\x89\x98\x85\x2f\xa0\xc0\xb6\x5a\xb4\x23\x55\x03\xc7\xe8\x87\x94\x99\x92\x68\x59\x0d\x7a\x88\x77\x24\x2f\x78\xea\x4c\x07\xcd\x68\x15\x98\x85\x3c\xee\x6e\x20\x59\x3f\xea\xec\x9d\x70\x1c\x11\xac\x1e\xfe\x2a\x68\x71\x0c\xf0\x53\x67\xfb\xa1\x98\x80\x3f\x2e\x6c\x99\x99\x45\xa1\x2e\x23\x38\xde\x3a\xfa\xb0\xbc\xb6\x49\x75\xe0\x1b\x33\x51\x31\xc6\xf1\x66\x9e\x58\x3f\x17\xc2\x89\x2f\x0f\xe7\x5d\x1a\x62\x81\x78\x8a\x96\x54\xa6\x38\xa2\x3f\x6a\x6e\x36\x97\xdf\x39\x89\x35\xdb\x14\x04\x45\x07\x71\x03\x17\xb6\x9f\x93\x66\xfa\x35\x2a\x03\x0e\xdd\xb6\xf3\x9f\x63\x12\x9b\xa9\xc8\xda\x4d\x55\x0e\xb4\x28\xd1\x6c\x00\xda\xea\x71\x5b\x39\x04\x23\x7e\x8b\xc7\x1f\xe0\xf5\x1d\xa0\x95\xb4\xa8\xdb\x04\x5c\xa5\xa6\x06\x02\x32\x35\x10\xf2\x56\xd4\x9c\x55\xcf\xe9\xb6\x50\xaa\x48\x81\xc6\x86\xee\xc2\xe8\xc1\xd7\x8f\x14\x11\x70\xb6\x42\x73\x91\xbc\x65\x43\x05\x64\xca\xe6\x19\xd8\x5e\xcf\xc7\xf4\x06\x32\x0b\xb9\x81\xad\x5f\xf4\x80\x24\x01\xd4\x36\xd6\x0b\x07\xb7\x2f\x3f\xcc\xf7\x44\xc0\xa6\xd1\x50\x31\x12\x5c\x55\x80\x2d\x56\x96\x84\x52\xcc\xf6\x9e\xa3\x45\x6b\xff\x6c\xf8\xde\xfc\xeb\xfe\x1e\x7a\x75\x53\x41\x24\xd2\xd7\x8b\xc2\x4b\xef\x28\x3b\x3a\xc9\xdf\x33\x2d\xc0\xf5\x1d\x29\x48\x85\x20\x4c\x45\xb7\x7a\x1d\x0a\x1f\x7c\x45\x19\x16\xb7\x85\x0f\x2e\x38\x4a\x93\xb9\xc0\x21\x31\x95\xa3\x8e\x4e\x86\xe5\x1e\xdf\x87\xd9\xed\x72\x4e\xd5\x22\x9d\x42\xec\x75\xb1\xd1\xf7\x8b\x20\xa2\xbf\x09\x5d\xb3\xa0\xed\x6e\x21\xf5\x13\x50\x31\xf8\xa3\x93\xe1\x3b\x0a\x83\xa8\x1d\xb6\x99\xa4\x27\x1c\x6f\x1f\xb0\xe7\xdd\xee\x35\xdb\x96\x47\xbb\x3a\x42\xe8\x94\x5f\xf8\x48\x0f\xb6\x3c\xc8\xbe\x4a\x71\x64\xfa\x08\x2d\x79\xf0\xf0\x67\x44\xa4\x7a\xf8\x19\xb1\xfc\xb3\xd2\x48\xa1\x53\xde\x0c\xff\x48\x44\x36\x62\x03\xd6\x75\xde\xdf\x76\xa4\x0d\x96\xb0\xd4\x1f\x44\x71\x1e\x6d\xc7\x0e\x60\x30\xce\x23\x21\x5c\x84\x84\x71\x13\xda\xb2\x67\x2e\x92\x01\x0a\x94\xea\x37\x08\x43\x5e\xbb\xc3\x89\x56\x66\x41\xff\xd3\xa7\x94\x74\xb0\x71\x88\x4b\x1e\x11\x89\x18\x96\xe8\x43\x8a\xa9\x44\x1c\x61\x8b\x63\xc9\x51\xc2\x43\x82\xb0\x22\x2c\x24\xa2\x82\x66\x16\xa2\xb7\x24\xf2\xc9\xcb\xfe\x0f\x69\x08\x44\x1c\x71\xfd\xaa\x4f\x6c\x59\x40\x5a\xa5\xf6\x9d\xd1\xf6\x8c\x6d\x04\xe7\x7b\xcd\x0c\xe6\xef\xfb\xfb\xef\x11\x35\x35\xd7\xad\x69\xc2\xd4\x52\xb7\x49\x2e\x24\x34\x41\xa9\xcc\xc4\xe3\x1c\xbd\x76\xcb\xf8\x02\x47\x14\xcb\x1e\x42\x63\x53\x8f\x53\x03\x58\x01\xeb\x16\xbc\x06\x3c\x43\x5c\x84\xa6\x14\xac\xb3\xf3\x9b\xf8\x3f\xfd\x82\x59\x4e\xd0\xac\x25\xf1\x89\xd5\x91\x46\x05\x42\x75\x85\x02\x66\x7a\xad\x75\x29\x83\xfe\x79\x66\x4f\x48\x70\xb3\x18\xf8\xfa\x06\xf6\xf0\x27\xf0\xcb\x18\x08\x66\x58\x7a\x9c\x30\x62\x6e\x06\xc8\x63\x42\xf5\x09\xbf\x0b\x1a\xb8\x1d\x25\x44\x98\x46\x61\x32\xc5\xee\x37\xd3\x80\x52\x1f\x77\x5e\x7d\xc8\xb3\x6c\x85\xae\x3b\x96\x6e\xca\xdc\x34\x1f\xdc\xdd\xf5\xce\xe0\x4f\x73\x0f\x3b\xb0\x92\x30\x80\x18\x4c\x25\x6e\xf3\x44\x26\x38\x0f\x3d\x5f\xb9\x62\xdc\xcc\x2d\x88\x09\x3f\xb7\xaf\x17\xd7\x8e\xb2\x25\xbf\xae\xe2\x83\x1e\x42\x6f\xf9\x0d\x59\x12\xd1\x81\x22\xc2\x36\x1c\xd4\xd8\x09\x66\x69\x14\x69\x92\x42\x22\xb4\xc2\x63\x0a\x80\xd3\x38\xc1\x01\xec\xf2\x12\xad\xfa\xa7\x2c\x94\x71\x9d\x62\x43\xdb\xd6\xbc\xb2\x89\x0d\x0a\x0b\xbb\x69\x3e\xdf\x83\xa4\xd5\x72\x40\xeb\x7a\x8a\x30\x7d\x39\x0e\x89\xb4\x0b\x2b\x50\xc5\xe7\x88\x74\xb4\xf6\x28\xc9\x3c\xa5\x21\xee\xd8\xe9\x7d\xf8\xb9\x1b\x59\x56\x09\x16\x38\x06\x10\x9b\xe9\xed\x21\x74\xaa\x37\x8c\xc2\x4c\x15\x4c\x22\xce\xd4\xa1\x7f\x01\xc9\x84\x14\x57\xee\x64\xe0\x76\x46\xad\xae\xd8\x9c\xd4\x8f\x20\x4a\x15\xa9\xe1\x4f\x53\x0d\xba\x67\xaa\x82\x43\xc7\x5b\x1b\xde\x17\x92\x19\x65\x24\x44\x31\x17\x9a\x43\xb0\x96\xca\x81\x77\x3b\x5b\x11\x86\xfe\x31\x25\xe8\x1c\x3a\xca\x0d\xa0\xe4\x01\x0e\x79\x0f\x0d\xa4\x84\xd8\x61\xd0\xd7\xcd\xd6\x01\x41\x2c\xa1\xfe\xf4\x8c\x32\x1a\x62\x14\x6b\x61\x6d\x75\xe0\x25\xf9\xb1\x9a\x6c\x69\x2a\x8f\x93\x10\x4d\x6f\x0b\x72\xc9\x56\x58\xdd\xd2\x3c\xcb\xe3\x24\xb5\x49\x21\x72\xc1\xcd\xdd\x45\x2e\xf0\x2b\x04\x1e\x38\x57\xa1\xd3\x89\x42\x50\xb8\xc0\xe7\xe6\x9b\x0a\x1c\x05\x69\x04\xed\x6c\x63\x2e\x95\x80\x85\x5a\xe2\x08\x7a\x66\xe0\x57\x5a\xe0\x3b\x07\xf2\x94\x32\xd3\xab\x2c\xcc\x96\xb2\x8a\x46\x08\xf2\xd4\x20\xb4\xda\xba\x36\xea\x8e\xd9\xe6\xfa\x18\x55\xf8\x9a\x20\x8c\x6e\x16\x34\x22\xc8\xaf\xda\x5a\x4a\x41\x5f\xd6\x60\x8d\xb8\x33\x74\xc8\x5c\x0c\xca\x0e\xa2\x52\xda\x35\x0b\xf5\x75\xcd\xb8\xc5\x13\x9e\x06\xdc\xaf\x0c\x73\xc6\x48\x00\xde\xd9\x30\x8d\xa1\x17\x89\x20\x01\x61\xca\xe4\xd5\xc0\x95\x29\x49\x40\x6d\x4a\x12\x6b\x77\x02\xd9\x34\xd7\xcf\x46\x62\x6e\x9f\xbd\xb0\x57\xc6\xbb\xbb\x1e\x64\xde\xd8\xc7\x58\xea\x27\x97\xd6\x65\x75\x7f\xdf\xeb\xf5\xbc\x59\x4b\x47\x5c\x53\x82\x43\xde\x01\xfd\x49\x8f\x57\x93\xa4\xb9\x0d\x68\x31\x74\x11\xdb\x20\x8f\xaf\xd3\xc5\xb0\xa6\x0b\xb3\x8c\x7d\x57\x28\x74\x57\xcb\x15\x1a\x21\xd8\x61\x03\x95\x75\xf3\xa5\x30\x05\xa1\xf9\x29\x27\xaa\x44\xc3\xa7\x9d\x97\x84\x12\xa3\x2d\x9a\x3e\x3d\x28\xd0\x7c\x98\xb5\x5b\xce\xf4\x47\xc5\x11\x66\xd0\x81\x2e\x3f\x69\x8a\xbf\x3f\xb7\xcd\x7e\x14\x36\xda\x27\x56\xc5\x9f\xbd\x1d\x09\x1f\xfe\x9a\x80\xcd\x91\xa3\xe0\xe1\xaf\x21\x9d\xf3\xee\x8c\x33\x63\x32\x00\x33\x41\xae\x5b\xc2\x24\xa5\x4a\x94\x34\xce\x4c\x0e\xa3\xe7\x04\x09\x42\x19\xd5\x37\x7b\x22\x25\x29\xbc\xe5\xb3\xe6\xf3\x04\x3a\x02\xd8\x71\x43\x36\x81\x5d\x83\x73\x78\xd4\x4f\x92\xfb\x7b\x08\x23\x36\xf5\x3a\xec\x8f\x17\xf0\x2f\xf3\xe3\x6e\x9c\xe2\xe5\x93\x84\x82\xd8\xe0\x82\x82\xd9\x85\x6f\xa2\xab\xc0\x35\xc6\xfa\xa9\x28\xe3\xab\xf4\x55\xb2\xd0\x8b\x6d\x18\xc8\x37\x87\x5a\x61\x81\xf6\x4d\xd4\x1c\x77\xce\x4c\xb3\x6a\xf5\x9e\xb0\x81\x10\x5c\x1c\xa2\x1a\x3f\x21\x58\xd6\x66\x9c\x96\x6c\xec\x73\x2c\x10\xe6\xb9\x31\x67\x33\xf0\x02\xec\x1a\x62\x03\x9e\xdc\x96\x8f\x9c\x43\xe4\x3c\x98\x7c\x2b\xda\x02\xbd\x56\x62\xd3\x51\xb3\x02\xb1\x86\xa2\x90\x98\x32\x2a\xb6\xe7\x83\xb9\x98\xa3\x1b\x2e\xc0\x90\x92\x65\xc6\xfd\xd7\xe6\x94\x39\x88\x70\x40\x6a\x00\x60\x8b\xe4\x08\xe7\xf7\x62\x12\xa3\x59\xca\xa0\x21\x3c\x74\xef\xfc\xaf\x75\x54\xce\xf4\x22\xeb\xcb\x19\x38\xe8\x90\x49\x94\xdc\x62\x21\x79\x60\x8d\x8a\xa9\xe6\xea\xf8\xe1\x2f\x8c\xea\x9d\x0d\x0e\xb8\x66\xb8\x93\x04\x42\x90\x42\xd0\xc9\x32\x51\x79\x80\x8c\x03\x99\xce\x88\xf4\xf5\x2c\xac\xa4\xc7\xed\x23\xc6\x63\x70\xc5\xac\x82\x67\x3c\x07\xdf\x84\x4e\x80\x4c\x00\xca\x25\x93\x69\x92\x40\x66\xe2\x09\x3c\x05\x4d\xf9\x62\x41\xa0\xb1\x0a\xb3\xaf\x4a\x84\x05\x39\xf4\x1e\x1d\x35\xc4\x5b\xd9\x09\x06\xda\x90\xf2\x18\x57\x60\x1e\x49\xf7\xba\x2c\xbc\x1f\x70\xb6\x80\xf6\xe9\x12\x49\xf0\x86\xfa\x0f\x8c\xd2\x40\xc1\x40\x0b\x46\x74\xb8\xf3\xe6\x1b\xf3\x2c\xc2\x56\x5b\x6e\x37\x24\x63\xc1\x0d\x78\x8c\xb8\xb1\x96\x6f\x04\xdd\x84\x44\x2b\x91\xb6\xd4\x5a\x37\x81\x58\x77\xe5\x29\x9e\x09\xbe\x22\xc3\xb4\x1b\xb2\x57\xbc\xd9\xae\xd0\x46\x0c\x96\x11\x35\xa2\xbe\x74\x1c\x65\xa7\x16\x9c\x0a\xca\x9a\xfc\x46\x62\xde\x96\xec\xd5\x53\xc4\x7f\xec\xd4\xd3\x2b\xf5\xbd\x31\xa2\x3f\x92\xa2\xeb\xb6\x39\x59\xee\xf3\x55\x8f\x6c\x73\xb4\x26\x98\xa8\xda\x4d\xe9\xc5\x09\xa2\xd5\x8c\xf9\xdf\x34\x8c\x1a\xac\x56\xad\xe0\x62\xde\x83\xa3\xa2\x7f\x36\xdc\xf2\x64\xb4\xae\x63\xcd\x15\xa5\xf9\x5e\x81\xe7\xa7\x83\x1d\x28\x17\x9a\xa9\x48\x6c\x72\xb2\x41\x27\x4e\x93\x88\xe3\xca\x08\x85\x95\x73\x10\x42\x8d\xdd\xcd\x0b\x60\x25\x45\x8b\x2a\x40\xab\xa6\x83\x27\x84\x15\xdc\x92\x15\x77\xc0\x0d\xf8\xf1\x54\x50\x10\xe3\xee\xee\xe7\xe0\xd4\x20\xbd\x11\x54\x91\x2c\x1d\xbd\x39\xbe\xb9\xc0\x26\x1e\xdc\x21\xfc\x91\xfa\x5c\x37\x2e\xf2\xf5\xe2\xe8\xcc\x78\x43\x7c\x6a\x9f\x8d\xd6\x36\x6e\x10\xfd\x7a\x0d\xc0\x7c\x8c\xd5\x00\x6b\x27\xc3\x01\xb4\x85\x0f\x28\xf8\xa2\xb4\x5e\xab\x39\x21\xc2\xd0\xae\x5e\xd6\x91\x9d\x1f\xe8\x10\xde\xb0\x2a\x01\x4c\x74\x37\xdc\x73\xa5\x22\x82\x72\x9f\x85\x78\x85\x18\xb8\x49\x58\xa3\x09\xb4\x4d\x9e\xde\x42\x1b\x0f\x2e\xe6\x12\x3d\x87\x38\x4a\x28\x40\xe2\xbd\x61\xac\x91\xf7\x21\x25\xb0\x90\xe0\x52\x84\x7e\xf4\x1c\xcc\xdb\x8a\x87\x36\xc8\x20\x27\xfc\xdf\x88\x44\xcf\x25\x37\xea\x12\x20\xa3\x52\x09\x33\x24\xdf\xb5\xc2\x0d\x80\x91\x1b\x70\xd8\xd5\x11\xc6\xf8\xb2\xd6\x49\xe7\x60\x1a\x1f\xb6\x71\xbb\xbb\x2e\x24\xcd\xf9\x6a\xcd\x2f\x6d\x52\x1b\x9a\xf2\x9b\x45\x6e\x6a\x01\x65\xcd\xea\x2a\x3c\x9f\x65\x86\x5e\xc5\x4b\xa4\x22\x15\x1e\xcf\x3c\x60\xdc\xa4\xea\xa3\xaa\x02\x92\xd9\x64\xce\x45\x9a\x58\x63\xde\x3c\x15\x98\x3d\xfc\x82\x6b\xe1\x9b\xb3\x1d\xa7\x10\xf1\xed\x6f\x42\x9a\xe1\x30\xc9\x75\x21\x7c\x42\x98\xa2\x81\x65\xf1\x7a\x87\xf2\x2a\x4e\x93\x48\x57\xbb\x7d\x4d\xba\xdd\xf6\xe0\x6b\x5c\xe5\xf9\xfa\x6c\xe5\x15\xcf\xb0\x54\x04\x4a\x65\xb4\x5b\xe5\xa0\x06\x54\x2a\x22\xcb\x56\x90\x3b\x6d\x14\x96\x6d\x84\x8f\x65\xb1\x90\xa0\xcb\xf1\x09\x2a\xc7\x57\x6d\x2b\x79\x18\x7a\x7b\x71\xb1\x95\xa8\xd6\xef\x37\x87\x79\x98\x65\x3e\xbb\x88\x5e\x73\x02\xdb\x22\x5b\xa6\x90\x8f\xad\x34\xd9\xa0\xb0\x64\x16\x07\xbc\x7e\xd0\x6c\x83\xe9\xb9\xad\xe4\x75\x36\x1a\x5f\x40\x72\x62\x21\x5c\xe6\xb3\xca\x1c\x85\x12\xcc\xf8\xd6\xf6\x2b\x6b\x5a\xb0\xad\x54\x23\x6c\x5b\xc0\x6b\x45\x28\x4b\x80\xe1\x51\x6f\x9f\xe0\x57\x8a\xac\xad\x80\x7f\x31\xe3\x7c\x7b\x14\xfe\xfa\x69\xbb\x96\x4f\xcb\x78\x4f\x93\xee\xae\xaf\x85\x20\x20\x73\xb6\x66\xbd\x39\x92\x54\x2e\x48\x88\x64\x0a\x95\xbc\xc0\xfd\x54\xb7\xbb\x33\xa0\xd6\x44\x95\xa5\x70\x25\x09\x1c\xb3\x0a\x62\x50\x24\x0d\x39\x24\xde\xbb\x93\x16\xba\x52\xea\xd1\x3f\xfc\xf9\x23\x55\x35\xc2\x01\x34\x91\xda\x7d\x58\x52\x36\x6a\x00\xb6\xaa\x4e\x55\x7d\x2a\x10\x34\x27\x02\xb2\xf0\x84\x81\x5a\x8c\x9c\x84\xf4\x21\x99\x46\x0a\x0b\x03\x97\x98\x72\x0e\x60\x8f\x91\xde\x8b\x76\xbb\x2a\x6d\x5b\xd0\x69\x02\xbb\x20\x87\x90\x4f\xcd\x59\x89\x08\x02\x9f\xe9\x6a\x34\x2b\x9e\x1b\x0b\x51\x0d\xb1\xd7\xe4\x76\xbb\x68\x2d\x43\x15\x44\x2b\x3b\xe6\x69\x71\x1a\xc1\x84\xac\xb2\xb9\xe0\x71\x66\x47\xcb\x8b\x85\xcd\xe0\xad\x0a\x6a\x58\xc8\xcb\x9c\x6d\xbb\xc7\x69\xf2\x14\x15\x48\xeb\x88\x59\xe5\x0f\x3b\x43\xfa\xde\x47\xa5\xdb\x04\x75\x84\xee\xd7\xdb\x50\x33\x94\x6d\xdd\x0a\xfb\xb0\x09\xbb\x91\xe6\x77\xb9\xbb\xbb\xde\x57\xee\x1f\xa7\x8d\x29\xaf\xfb\xbe\x1a\xbb\xbd\x3f\xdc\xdd\xf5\x8e\xe1\x2f\x3b\x10\xcd\x9e\x6b\xd3\xdd\x66\x5e\xb3\xfb\xc4\x2a\x06\xab\x54\x57\xb8\x6e\xda\x4c\xe6\x1e\x68\xde\x3b\x4d\xa6\xa4\xc2\xdd\x5d\xef\x1f\xf5\x1f\x3b\xd0\x15\x6c\x80\xd3\x86\xa0\xb5\x1b\x4a\xb6\x36\x5e\xab\x8a\x23\x62\xe3\x15\xa5\xf8\x79\x0d\x66\x40\x79\x77\xd7\x7b\x6b\x35\x86\x66\x03\x17\x76\xe0\xe5\xaf\x1a\xa2\xba\x1c\x9f\xf8\x18\x7a\x6f\xf2\xc3\x11\x68\x70\xd5\xb2\xf6\x3e\xc5\x47\xf9\xe2\xa7\xbf\x76\x4f\xae\xe0\x49\x36\x9e\x34\x03\x5a\xbb\x69\x37\x5c\x0f\x37\x02\x76\xf4\x16\x40\xd7\x11\xbb\x7a\x8b\xb4\xc4\x1d\x99\x23\x48\x0f\xbc\x99\x5c\x69\x70\xbb\xcc\xc8\x5b\x03\xde\x8c\x48\x7b\xa1\xbc\xbb\xeb\xed\x20\xff\xd6\x6f\xa5\x05\x80\xed\xd6\xdb\x43\x5d\xe9\x80\xdc\xc0\xdc\x8f\x31\x00\xaf\x05\x7b\x8d\xc3\x77\x1c\x6d\x16\xc6\xbf\x66\xf4\xdf\x5a\x2f\xd8\x92\xd5\x7c\x8a\xd6\x3a\x25\x3b\x06\x22\xb4\xe4\x52\xad\x4c\xe6\xa4\x7c\x4d\x6e\x0b\x27\x78\xc5\xec\x0d\xed\xa3\xdd\xa6\xc6\xa8\xa4\x9b\x67\x25\x27\xc5\xca\xc3\xda\x79\x5c\xa1\xa9\xed\xc4\x2c\xb0\x20\xa1\x4f\xb1\xd9\x49\x87\x09\x78\x0c\xfa\x6d\xb4\xd0\x77\xb4\x55\xd0\xad\xf8\x1b\xf8\x74\xa3\x86\xb0\x27\x15\xcc\xaa\x0d\x85\xdc\x93\x15\x3c\x8f\xa3\x88\x6d\xdc\x80\x9b\xf6\x6a\x4b\xf9\xef\xd9\x4c\xd5\x7b\xb0\x25\x47\x41\xc3\x96\xfd\x84\x40\x35\x1c\x67\x0d\x41\x26\xc1\xc5\x95\x56\xf5\xba\x5d\x1f\x5b\x34\x16\x7c\xb1\x33\x2e\x18\x38\xc6\x51\x42\xa2\xdc\x4e\xff\xa9\x85\x24\x4c\x54\x16\xec\xd3\x7c\x5c\x45\xfa\x57\xbf\xf5\x61\x74\xc5\x21\xd0\x0d\x81\x2a\xa8\x3f\xd8\x40\x3a\x9b\x07\xa2\xc4\x2d\xc2\x73\xec\x0f\x30\xee\xcb\x52\x91\xa2\x19\x17\x38\x06\x30\x90\x5a\x20\x3b\xc8\x44\x70\x31\x6e\x0b\x12\xd5\x53\xd2\xc9\x79\x84\x32\xc8\x9e\x80\x90\x4d\x5b\xad\xa5\x03\x6e\x79\x82\xc8\xc7\x84\x4b\x92\x45\xdb\x37\x2c\x04\xb9\x5e\x04\xd2\x3b\xa9\xd9\x98\x3a\x19\x9b\x60\x89\x24\xf9\x90\xc2\x73\x17\x63\x9c\x5a\x83\xb4\x75\x15\x9a\x7a\x3a\x9a\xc3\x48\x6c\x68\x54\x90\x52\x01\x64\x3c\xfc\x6c\xfc\xba\x08\xc7\x53\x0a\x9f\x97\xc9\x36\x32\x2d\x0b\x6d\x03\xeb\x8c\x49\x00\xf1\x4c\x9a\xb5\x80\x9c\x55\x27\x8d\x9d\x83\xa1\x0e\x52\x66\xaa\xe1\xb8\x2c\x31\x14\x52\xe3\xc4\x8e\xb1\x0a\x16\xde\xb4\x1e\x93\x84\x06\x7e\x71\x53\x7b\x2a\xe0\x42\x10\x99\x70\x16\x92\xd4\x87\x49\x2a\x1e\x17\x73\x5f\x6f\x4d\x6c\xc9\x73\xd2\x9b\xf7\x50\x7c\x9b\x17\x31\xff\x4c\x2f\xfb\x1b\xaa\xc0\xe8\x6f\x7e\x3e\xa8\x4b\xd2\xf9\x01\x2f\x71\x0e\xa1\x37\xa7\xea\xa0\x04\x06\x62\x59\x30\x9a\x0a\xcc\x82\x85\xfe\x41\xe1\x79\x7b\xd8\xbf\x59\x7e\xd1\xfb\xa2\xf7\xf2\xc0\x74\x37\x76\xff\x50\x78\xfe\x99\xc9\xad\x92\x26\x11\x57\x75\x69\xc1\xf5\x2d\x11\x67\xd1\x6d\x27\x4b\x5c\x3d\xb0\xf1\x56\x07\x9a\x9c\x03\x96\x46\x91\xaf\x36\x4c\x66\x24\x41\x01\xcc\x22\xfd\x11\x3b\xc1\x05\x31\x34\xcf\x13\x2e\x10\xf9\x48\xe2\x24\xe2\x9d\xd5\xa9\x4c\x61\xfc\x21\x87\xa9\x28\xbf\xd9\x72\x56\x4b\x10\x03\x6e\xdc\xc2\x02\xc7\x90\xf1\x67\x84\x24\x4f\xcd\x04\xef\x8a\x2e\x9b\x68\x7b\xe8\x6b\xa0\x6e\xbe\x3f\xb3\xd9\x5d\xa9\xc4\x02\x39\x67\x6e\x61\xb6\xa1\xaa\xbc\x30\xa1\xd8\x2e\x8d\xf7\x43\x4a\x8a\xf3\x9e\xba\x79\xaf\x62\xd9\x05\xc1\x21\x11\xd2\xa4\x7e\x04\x51\x0a\xe9\xb2\xa6\x48\xb7\x69\x49\xd8\x29\xa5\x00\x58\x4c\x24\x44\x71\x1a\x29\x9a\x44\x04\x29\x1a\x7b\x7b\x30\x1e\xe1\x29\x79\xf8\x05\x47\x0b\x2e\x8b\xab\x6b\xc3\x87\x01\x21\x15\x5a\x8c\x48\x1e\xd1\x80\x2a\x33\xc1\x1d\xe4\xcd\x0d\xc8\x33\x96\x43\x8c\x96\xfa\x54\xc0\x12\x2d\xc9\x8f\xbe\x70\x99\xe3\xe1\xf9\xd7\x5b\x9d\xea\xc7\xa3\xa3\xaf\x07\xe3\xab\xe1\xbb\xfe\x9b\xed\x8a\xb5\xb7\xe8\xba\x60\x3e\x39\x6f\xf3\xcd\x76\xf9\x0c\xc7\x58\x2e\xa6\x1c\x8b\xf0\x30\x33\x8b\x78\xbe\x3f\xc3\x94\x91\xa8\xf0\xda\x66\x78\x90\x08\x62\xc3\x05\x04\xb1\xc1\xc8\xa0\x37\x7b\xe0\xc2\x17\xd4\xb8\x3d\xf4\x99\x99\xa9\xc1\x82\x04\xa9\x90\x1e\x43\x79\x09\x8f\xd1\x94\xf6\x82\xad\xa0\x7f\xfb\x10\x43\xb5\x94\xfa\xf8\x97\x81\xad\x5d\x52\x1f\x01\x93\x81\xac\x8b\x80\xc9\x41\xd6\xc5\xc0\x64\x20\x2b\x63\x5a\x0b\xf0\x6c\xa5\x95\x1a\x68\x55\x33\x5b\x1c\xaf\x9e\xd4\x1a\x50\xdb\x4c\x5d\x0d\xa8\xc6\x21\x0f\x85\xf1\xb6\x0e\x7a\x58\xc3\x5a\x19\xf4\x50\x5c\xb1\x86\x61\x0f\x6b\x08\x6a\x7c\x4e\xc5\xc9\xda\xc6\xd5\xb4\x86\xe7\x9a\xf8\x1c\xa4\xa5\xa5\x5d\xb5\x24\xd4\x41\x2f\xde\xf2\xeb\x67\x69\xf3\x15\xbe\x0e\x47\x45\xe8\x46\x91\xc7\x1b\xed\xeb\xe2\x4d\xdf\xe4\x9b\xe5\x19\xaa\x0c\x4b\x49\xe7\xe6\x10\x2c\xbe\x67\x92\x2d\xa2\xa8\xba\xed\x70\x71\x1a\x0d\xe4\x8c\xe7\x56\xaf\xfe\x5a\x1e\xc5\x7c\x49\x4c\xb6\xe1\x9c\x39\xee\x5c\x37\x12\x84\x04\x29\xae\xcf\x4d\x2e\xdd\x33\xdf\x81\xe7\x46\x58\x11\xc5\x55\x98\xad\xcb\xca\x10\x2e\x07\x0c\x42\xd7\x92\x05\x66\x24\x34\x5b\x5a\xa2\xe7\xb4\x47\x7a\x48\x2d\xb8\x24\x36\x71\x46\x10\xab\x5b\x27\x09\x09\x4d\xea\x8d\xbe\x91\xf8\x62\xdc\x1c\x11\x59\x04\x9b\x96\x01\x12\x3d\xfc\x55\xcc\x1e\xfe\x55\xae\x28\x57\xf8\x43\x4a\x22\xc8\xdf\x26\x46\x25\x27\x52\xe9\xff\xc4\x38\x21\xfa\x3a\x56\x74\xe2\x7b\x42\xdc\xdc\x58\x1a\x44\xca\xac\x09\x75\x7f\xac\xcc\x26\xa8\xeb\x11\x2c\xa6\x76\x96\x0d\xa9\x68\x1e\x25\x53\x68\xbf\x8a\x10\x5a\x3f\x93\x9a\x21\x2a\xc6\xc8\xd4\xf6\x73\x2d\x01\x68\xd7\xbf\xb0\x21\xc0\xad\x5b\x12\xb6\x86\xdb\xa0\xcb\x60\x63\xd8\x8f\xd7\x38\x30\xe7\x24\x7f\x70\x62\x61\xe3\x7a\x63\x10\x73\x38\xfe\x10\x94\x22\x83\x37\x08\x42\xb1\x20\x03\x7d\x3e\x45\x91\xb7\x06\x9c\x83\x6a\xde\xab\x13\xe8\x46\xb2\xea\x9b\x2b\x65\x85\x6b\x85\x9f\xe8\x2a\x68\xb2\x69\xcc\xa5\xa1\x71\xab\xa0\x4b\xc0\xf0\x74\x41\x10\x86\xc2\x36\x61\x10\x5b\x66\x57\xd6\x8c\xb6\x5d\x20\x44\x91\xfa\x56\xa1\x10\x19\xfe\x9d\x3d\x06\x45\x52\xbc\x71\x0f\x6d\x66\xe6\x13\xf8\x78\xf2\xb1\x38\xdd\xec\x93\x79\x76\xb2\x69\xd8\xc1\x1b\x52\x1c\xce\x7e\x3c\x1d\x19\x55\x3b\x86\x77\x94\x26\x7a\xb7\x00\x8f\x8c\xa4\x2c\xf6\x61\xac\xff\xb8\xbf\xaf\x48\xbf\xdf\x12\x52\xb3\x71\xb8\x70\x88\xc2\x47\x0d\xd1\x80\x09\x60\x3b\x24\xd9\x27\xd5\x28\xf6\x17\x27\x51\xdc\xe6\xfb\x8e\x94\x28\x90\xdb\x24\x52\xa2\x01\x85\xad\x03\x25\x1a\x12\xb8\x43\x94\x44\x49\x74\xef\x29\x4e\x62\x8d\xbe\x27\xf3\x8a\x15\x47\xf3\x89\x83\x04\xf2\x49\xf0\xbb\x97\x77\x90\x50\x7e\x5f\x72\xab\x85\x72\x33\x6f\x1c\x6d\xe5\xec\xcb\xfc\xb9\x09\x6a\x69\xbd\x22\x05\x82\xcb\x78\x36\x2d\x48\x11\x63\xcb\x99\xdf\xe4\x79\x6c\x4f\xbd\xcf\x1f\xb9\x35\x75\x59\xf3\xc8\xc3\x02\x6b\x16\x1e\x7b\x45\x8a\x79\x07\x66\xc8\xff\xa9\x07\xa9\xc2\x34\xda\xae\x86\xdf\x31\x0d\xa1\xd4\x53\x4c\x30\xfb\x1f\xbe\x9a\x88\x50\x44\xe9\x43\x4a\x25\x0a\xe9\x8f\x44\xfc\x0f\x1f\x28\xa8\x26\xeb\x3a\x6f\xdb\xb8\xeb\xa2\xf6\x9f\x65\xf8\xfa\x87\x9e\xf5\xb5\xc1\x1a\x48\x56\x26\xb3\xcc\x38\x45\x4f\x41\x23\x5a\xa0\x71\x86\x93\x53\x05\x55\x2e\x2b\xe7\xc9\x8d\xcb\xd6\x25\xf2\x35\xa7\x0f\x97\xda\xd9\xf0\xd4\x5f\xe9\x93\xa7\xd6\xd4\xb3\x29\xa9\x6f\x8b\x51\x64\x13\x5a\x1c\xc4\x96\x04\xaf\x13\x59\x98\x52\xdf\xdd\xce\x12\x93\x48\x92\x86\xbc\xab\x14\xe4\x3d\xf2\xa0\xd9\x82\x62\xfd\x66\x76\x1e\xe6\x30\xaa\x71\x49\xb9\xc8\xd2\x0a\x0b\x1e\xf0\x5a\x6c\xfa\xbb\xac\x1e\x89\xf3\x4d\x57\xa3\x82\x64\x86\x3c\xd9\x57\xf0\xd8\xd6\xc1\x83\x24\x4f\xd0\xff\x15\x9e\x53\xe6\xbb\xc2\x16\xa7\x3a\x87\x63\x5d\x5b\x36\xa9\x13\x0a\x2e\x09\xe8\x63\x53\x75\x25\x2f\x50\x94\x4a\x53\xfb\xc6\x75\x3f\x47\x92\x1b\x93\x1c\xf4\x47\xb7\x8d\x7a\x73\xee\x60\x21\x38\xf3\x52\x69\xbe\xb6\x1f\x35\xa0\x38\x75\x5b\x2d\x73\xa3\x00\xb1\x1f\x52\x82\xb8\xcc\x84\xa2\x34\x09\x34\xb1\xe3\x25\x9b\xb7\x1a\x1b\x4f\x26\xaf\x71\xf8\xc0\xb0\x6c\xae\x88\x26\x98\xcf\xcc\xfe\x83\x62\x66\x98\x6d\xb8\x69\xad\x9d\xe9\xcd\x8f\x52\x37\x38\x7b\xd9\xb6\xc2\xc4\x95\x71\x28\xa3\x0c\xab\xd4\x88\x6d\x0e\xda\xd5\x11\xea\x25\x89\x22\xdb\x46\x80\xcf\xfc\xe3\x9a\x15\x64\x4f\x61\x90\x75\x37\xf2\x8d\x83\xc4\xb9\x39\xd9\x95\x4d\xaf\x1a\x9f\x5f\x26\x95\x86\x5e\x77\xb5\xdf\x69\xe8\x9a\x57\x77\xb8\x72\xee\x65\x1a\xf6\x76\x5b\xdd\x30\x13\x1b\xd8\xbc\x6e\x4a\xf6\x3e\x1d\x2d\x58\xff\x11\xe6\x44\x0b\x66\x5b\x04\xc6\x84\xa0\x94\xca\xda\x34\x1d\x93\x4c\xa1\x8a\x4c\x2e\xe6\xd7\xc1\x6c\x49\x87\x51\x8d\x0f\xca\x77\x81\xf6\xf4\xe4\x5a\xf0\x26\x90\x5e\xda\xa0\xb9\xf8\xf9\xf9\xdb\xa2\x0a\x95\x79\xaa\x2a\x28\x81\x2e\x21\xc2\x2d\xb5\x06\x50\xa6\xc2\x8b\xd1\xe7\xa7\xf6\x7f\x60\x2b\xb7\x9b\x00\xa4\xcf\x7f\xf7\x77\xef\x3a\xd0\x3c\x59\xff\xe7\x8d\xcf\x1d\x74\x92\x55\x5d\x37\x95\xd8\xcb\xfe\x9f\xcf\x7f\xf7\x77\xc8\x42\x81\xff\xa2\x37\x3e\x2f\x0f\x95\x49\x84\x6f\x5d\xc5\x72\xc8\x8c\x54\x58\xa5\x59\xd1\x3c\xaf\x7a\x4f\xa7\x54\x94\x2b\x4b\x21\xe2\xbe\x35\x49\x72\x1e\x8c\xdc\x56\xe7\x8a\xb8\xa0\x3f\x12\xc4\x53\x95\xa4\x95\xf5\x9c\xcc\xab\xa0\xf8\xe2\x87\xbf\x78\xb5\x53\x03\x97\x40\xcd\x4c\xf0\xa5\x93\x98\x2b\xe2\xca\xb0\x56\x21\x30\xdf\xd8\x46\x85\xb6\x0a\x27\x7c\xed\x5b\x64\xee\x3c\x77\xce\x65\x6f\xfa\x50\x9b\x42\x09\x36\xa3\x34\xe6\x4b\xe2\x9c\x7f\xa0\xf9\x24\x82\x2c\x29\x4f\xa5\xc9\xc1\x95\xa6\x28\x66\x65\x6d\x85\xd3\xcc\x65\x57\xf0\xad\x95\xca\x2a\x14\x5c\xa2\xc6\x1d\xa8\xf5\x40\x03\x1e\x33\x93\x07\x0f\xc9\x9d\x95\x55\x18\xec\x70\xa0\xaa\x9f\x4b\xb1\xc4\x33\x45\x4c\x0e\xaf\x5f\x3b\x3b\x35\x7d\x26\x69\x60\x13\x85\xe1\xbb\xe4\xe1\xaf\x12\x71\xf8\xd2\x87\x2d\xb8\x26\xa2\x4b\x63\xc8\x76\xe5\x59\xc9\x0f\xc3\xfd\x5a\x05\x7b\x11\x16\x5e\xe9\x6a\xe6\xf2\x6d\x82\x12\xac\x62\xa9\x8f\xf2\x6e\xf0\x01\xf5\xd1\x97\x6a\x76\x06\x24\x28\x15\x51\x6d\x0c\x10\xc4\xbf\x61\x14\xba\x0f\xf3\x6b\x66\x55\x48\x90\x31\xd7\x9b\x51\x17\x1c\x61\xfe\xa1\x5a\x8b\x7c\x79\x68\xa5\x2f\x2b\x10\x79\x0b\xba\x3a\xb8\xf2\xd0\xf7\xb9\xa9\x75\x8e\xb0\x52\x24\x4e\x14\x9a\x61\x1a\x91\xd0\x95\xe1\xe3\xe2\xfe\x7e\xc2\x26\xec\xd2\x94\xb0\x56\xae\xf4\x73\xd4\xc9\x8a\x25\x4b\xe0\x2e\xbc\xc4\x34\x32\xf1\xb7\x7a\x33\x68\x09\x3c\xa7\x4b\x02\x33\xec\x3b\x10\x5e\xe3\x68\x81\x11\xb3\x35\x86\xf5\xd1\x00\xf2\xce\x52\xb4\x4a\xc2\x7a\xbb\x0e\x57\xe5\xb7\x53\x28\xf3\x9b\x79\xc3\x7f\xd6\x82\x33\xe1\xcc\xbc\xca\x30\x84\x31\x66\x11\xbe\xbe\x03\xc5\xe2\xce\x4a\xc6\xda\xca\x82\x07\xd2\x34\x7b\x90\x10\xac\x41\x64\x1e\x35\x0b\xb9\xe5\x28\x26\x0a\x87\xd8\x1b\x25\xd4\x47\x92\x43\xf8\x03\x5a\xda\x56\x09\xf6\x56\x57\xac\x6f\x4b\xb2\x31\xc0\xd7\x33\x22\xa8\x4d\xb5\x77\x33\xb2\x16\x7d\x8b\x30\x97\x16\x77\x68\x94\x35\x4d\x8d\xa4\x26\x2b\xdd\x33\xc4\x34\x4e\x4a\x65\x66\xf5\x2c\x12\x1c\x82\xbc\x32\x15\x4d\xbd\xcb\xf5\x23\x11\x9e\xb2\xb0\x24\x46\x4b\xf2\x23\x28\xc6\x16\xc6\x46\xe4\x83\xd3\xf7\xc3\xf1\xe8\xf4\xdd\xe0\xf4\x02\xbd\xef\x8f\x87\xfd\xaf\x4e\x06\xe8\xcd\x78\x74\x79\xe6\x8b\xfa\x7b\x33\xbe\x3c\x1b\x9d\xa3\xe3\x01\xbc\xff\xf0\x7f\xbc\x1f\x0c\xe1\x5f\xfd\x77\x5f\x0d\x07\xa7\x17\x9e\x46\xb0\x15\x78\x7c\x1b\xa5\x0e\x91\x67\xff\x6c\xc2\xe4\xc5\xd1\x16\xf2\x76\xd1\x8d\x2e\x94\xc1\x77\xb4\xff\x71\xf0\xee\xec\x64\x74\xee\xf9\x38\x4e\x94\xa9\xdd\x8c\xb8\x40\x33\x1e\x85\xde\xb0\x19\x0f\x00\x23\x29\x20\xfc\x23\x11\xfc\xe3\xad\x6b\x22\xd2\x3f\x1b\xba\x18\x5a\x6f\x0b\x09\x73\xb5\x86\xcf\x34\x2f\x19\x20\x10\x68\x9f\xc7\xc3\xda\x72\x06\xfd\xb3\x61\x25\x01\xed\x2d\x6a\xfd\x15\xeb\x4f\x56\xd3\x60\x5b\x83\x5a\x99\x92\x3d\xd9\xd3\x56\xa9\x6b\x60\x4c\xcb\x07\x90\x9a\xbf\xb7\x32\xa8\x6d\x1a\xc5\x36\xf6\xb4\x8d\x04\xb7\x31\xa6\x59\x42\xb4\x40\xb4\xd6\x1e\xd0\x1c\x6b\xd0\xa6\xd0\x13\xd0\x1a\xd4\xb4\xf0\xac\x04\xbe\x9d\xf1\xac\xbf\xb5\xe5\xcc\xa2\x29\x1b\xce\x0a\x5a\x52\xbd\xcd\xac\xbf\x6e\x30\x73\xa9\x28\xdb\x99\xcc\x0a\xa4\x3c\xa6\xc5\xac\xff\x84\xe6\x32\x18\xd2\x53\x59\xcb\xfa\x4f\x6d\x2a\x5b\x1d\xdd\xae\x96\xb2\xed\x07\xb8\xa5\x7d\xa8\x4a\xd6\x3c\xd9\xc0\x77\xb4\x93\xed\x67\x12\xf6\x65\x14\xda\x30\x13\x4f\x6b\x27\xdb\x30\x1d\x2d\x98\xfe\x71\xe6\xa4\xad\x9d\xac\xbf\xbb\x91\xcc\x4b\xc3\xb6\x36\xb2\x2a\x5a\x5a\x18\xc8\x06\x2c\x4c\x38\x65\x0a\x3d\xd7\xc4\x2c\x94\x4a\xa0\x87\xdd\x67\x3e\x85\xd2\xff\x7e\x35\xf8\x90\x24\x82\x04\xd8\xdf\x0f\xd7\xf7\xfd\x32\xcf\xdb\xbc\xbb\xeb\xbd\xc7\xd6\x66\x8e\x6e\xb0\xb4\x45\x7d\x95\x77\xaa\x3c\xb9\x96\x25\x38\xcc\x55\x7d\xcd\xca\x3d\x79\xef\x7e\x70\xd5\xb4\x1b\x6b\x63\x3c\x97\x9e\x92\x37\x97\xc3\xe3\x83\x43\x5f\xed\x29\x0d\x42\x6f\x08\xd8\x1a\xeb\x15\x7d\xcb\xe0\xec\x9a\x3a\x88\x15\x34\xc1\x49\x6f\xba\x83\x80\xfa\x5c\x83\x3d\xe0\x4c\x2a\x91\x52\x51\xce\x22\xab\xc2\x10\xb8\x94\xe4\xbc\xf4\x16\x8d\x48\xed\x38\xcb\x05\x83\xdd\xb7\xd5\x83\xc9\x50\xd9\xc1\xd4\x77\x1d\x2f\x63\x2b\x8d\xa9\xf8\x71\x13\x9c\xca\x96\x47\xae\xed\x60\xb0\x79\x84\x2a\x4e\xea\xfa\x13\xac\x20\xac\x2c\xc1\x5c\x46\x52\x55\x5f\x79\x15\xea\xa6\xc4\xf1\x06\xbd\x0f\x56\x10\xfa\xd2\xc8\xeb\x7b\x1e\x78\xe8\xb1\xdf\x6f\x27\x03\x00\x54\xb8\x31\xcc\xd6\xec\x94\x2d\x06\xe6\x5a\x67\xd7\x41\x69\x42\xc9\xe6\x80\xdb\x26\x45\xbe\x57\xa9\xf1\x45\xdb\x36\x28\xf0\xdd\x9c\xa6\xbd\x11\xd4\x9c\x9a\xe2\xb2\x9b\x43\x1a\x4d\xd8\x3b\x97\x07\x6b\xee\x0e\x90\x8a\x9d\xdd\x25\x20\x0d\x41\x10\x95\x0a\x46\xc2\x1e\x3a\x33\xc5\x07\xf4\x45\xe2\x20\x98\xa1\x20\x15\xd1\x81\xf9\xc2\x5d\x06\xa1\x7d\x0a\x65\xce\x48\xd5\x8a\xb5\xbc\x0e\xac\x9a\xd9\xca\xef\x8d\xc5\xa3\x38\x24\x95\xe2\xcd\x8f\xcd\xa8\x02\xed\x70\xe6\x47\x7f\x25\xee\xac\x89\x14\x48\xd6\x7c\x35\xbd\x05\x25\x1d\xda\x59\xc1\xb4\xb7\x92\x7c\x5c\x82\xd2\x08\xb9\x4c\x38\x93\xa4\x35\x76\x00\x20\x15\x6e\x8a\x98\xf8\x74\xaf\xba\x43\x7a\x7d\x9e\xe1\x48\x6e\x85\xab\xd1\xe2\xfa\x30\x36\x5b\xdd\x19\x65\xa0\x04\xe4\x96\x76\x7d\x9f\xdb\x46\x1e\x15\x1a\x3e\x94\xef\x62\xb9\xa5\x9c\xca\xc6\x42\x69\x9d\x1e\x93\x07\xd8\x58\x1a\xe5\xe4\xb8\x14\xbe\x75\x42\x1a\x53\xb1\xbb\xb4\xce\xc9\xd9\x59\x5e\x37\x20\x6a\x8f\x14\x35\x26\xa7\xa6\xb9\xce\x3a\xda\xea\x76\x39\x65\xe0\xab\xea\x72\x7e\xde\x36\x09\xe0\xac\x64\xd1\x15\xcd\xd9\x07\x79\x07\x22\xf7\x4a\x57\x33\x52\x36\x85\x74\xb7\xdf\x3a\x7e\x40\x55\xa4\x70\x71\x83\x05\x50\xa3\x25\x52\xb5\xba\x1f\x12\x44\x98\x69\x70\x6f\xc3\x01\x42\xdb\x8c\xa0\x5a\xdf\x9f\x9b\xb2\xbd\x10\x61\x11\xf0\xb0\xfe\x52\xc1\xa7\x8a\x88\xac\x1b\xd2\xf9\xf9\xdb\xe6\xf0\x29\x9b\x71\xef\xd5\xb6\x04\x7e\xad\x3a\xb2\xc6\xd3\x04\x4d\xb1\x5d\x9e\x4c\xe3\x18\xda\x8e\x35\x42\x29\x88\x4c\x63\x6e\x62\x27\x9c\x91\xb8\xd9\xd0\xf2\x16\xd3\xae\x26\xb2\x75\x4e\xde\xdd\xf5\x5e\xd3\x88\x9c\x61\xb5\xa8\x65\x19\x43\x44\xe4\xba\x43\xdb\x38\x08\x59\x68\x76\xb6\x02\xae\x01\x61\xe0\x26\xd2\x53\xd9\x66\xce\xb3\xb6\x2b\x4d\x30\x71\x66\x0a\xab\x98\x8c\x93\x16\x7c\xb4\x29\xc5\x44\x06\x58\x28\x30\x20\x34\x5b\x07\x3b\xeb\xce\xd9\x6b\x96\x42\x90\x84\x37\xa4\xa5\xe0\xa9\xcd\x9d\xbd\x2b\x4e\xdb\x66\x94\x98\x7a\x34\xa6\xa3\x1c\x31\x9d\xca\xb2\xb0\xf9\x66\x37\x25\x43\x91\x95\x24\x0e\x16\xe5\x0c\x87\xbc\x04\xa5\x82\x18\x28\x12\xa0\xc5\x90\xa6\x68\x7c\x76\xe4\x8c\x8e\xb5\xb3\x61\x62\x4a\x8c\xfc\xca\x8c\x84\xe3\xb3\xa3\xea\xb1\xc7\x58\xc8\x05\x06\xed\xeb\xf7\xe7\x23\x5f\x65\x19\x87\xa3\xd0\xd1\x09\xde\xae\x00\xcc\x13\xc2\x72\x09\x05\x2d\x46\x61\x2e\xeb\xb4\x39\xe8\x56\x14\x70\x46\x3e\x6a\x76\xaa\x15\x54\x0e\x4d\xa3\xee\x48\x65\x24\x8d\x5b\x22\x19\x4c\x09\x16\xb2\xe1\x34\x61\x86\x23\x2a\x1b\x4c\x92\x83\x69\xeb\x23\x35\x05\x1b\xe4\x05\x8f\x9a\x40\x77\x97\x87\x16\xd7\xbc\x84\x08\x2d\x5e\x9a\x9b\xc9\xb2\xa8\xb0\xc6\x56\xb2\x44\x70\x67\x1c\xc4\x89\x31\x24\x41\x6f\x72\x68\x2d\x0d\x42\xf3\x60\x8b\x1d\x68\xa1\xe5\xe6\x25\xe9\xea\xd4\x93\xd8\x0b\x72\x4b\xea\xf6\x41\x4e\x0b\xfc\xb9\x74\xd4\xdb\x9b\x88\xda\xbd\x94\x23\xcf\x22\x59\x40\x30\x84\x5c\x54\x6f\x2a\x41\x70\xf8\xe2\x46\x50\x7b\x4e\xb2\x19\x9d\x7b\x91\xd5\xc1\x59\xb7\x7f\x36\xd7\xc7\xc8\x06\x33\x68\x33\x25\xcc\x61\xae\x61\xfd\x22\x26\x77\x43\xde\x06\x2c\x2c\xc7\x16\xb0\x51\xe8\x29\x46\x58\x01\xbe\xe9\x6a\x97\xf1\x34\x5f\xea\x99\x20\x10\xaf\xb8\xdb\x42\x67\x50\x78\x9e\xbd\x5a\x2f\xec\x6d\x57\x40\x61\x33\x56\xe1\xdb\x3a\x7a\x63\xbe\x2c\xa8\x0d\xae\x47\x6d\x2b\xa2\x19\x8e\x77\xb7\x8e\x0a\xc2\x78\x4c\xf0\x4e\xe6\x51\x2b\x5b\x41\xfb\xab\xe7\x28\x27\x5a\x45\x2d\x3b\x65\x50\x33\x4d\x0f\x7a\x58\x97\xd8\xaa\xf1\x40\x73\xb4\x69\x5c\xd4\x00\x15\x89\x13\x5e\xe6\xb8\xa6\xa3\x96\x3c\x5a\x66\xb9\xe0\xcd\x05\x83\xf9\xd0\x86\xef\x36\x96\x08\x10\xaa\xbb\x72\xdb\xd8\x62\xf8\xae\x87\xb6\x40\xe5\xbb\x46\xd3\xb1\x2a\x41\x09\x0c\x56\x2a\x1c\x5c\xd7\xee\x0d\x41\x82\x34\x21\x02\x0b\x94\xd0\x68\x51\x73\x1d\x5c\x85\xbe\xcd\x11\xb5\x82\x48\x36\x1e\x51\xca\x98\xab\x94\x0c\xdf\x1c\x45\x3c\x0d\x8f\x38\x53\x82\x47\x11\x11\xef\xf4\xd1\x33\xf7\xa7\xd4\x57\xc1\x96\x78\x59\x3c\x37\xb6\x61\x52\x1c\x2d\x0b\x36\x96\xa6\x83\x81\xe6\xa6\xbb\xcb\x82\x5c\xa0\xed\x20\x0c\x32\x5a\x4c\x7a\xc1\x15\xc4\xc8\x5e\xa9\xdb\x84\x34\x33\xc0\x3a\x12\xd6\x3f\xaf\xb5\xc4\x1a\x6f\xd9\xca\x1e\x69\xd4\x82\xb5\x6c\x75\x36\x70\xca\xb7\xf2\x26\x9d\x57\x57\xa9\xd8\x6d\x35\x56\x69\xd9\x61\x4d\x9c\x32\xa4\xf8\xf6\xde\x4e\xdb\x10\x95\xf1\xed\x3d\x9e\x3f\xd2\x24\x59\x59\x8d\x5a\x37\x75\x9c\xe0\x40\x41\xb3\xad\x9a\xa0\x39\xc0\xb0\xd1\xe8\x87\xa8\xb4\x29\xa7\x09\x96\xb6\x4e\x34\x96\x26\x7c\x4f\xcc\x21\x5e\xdf\xc4\x82\x9c\xe9\x1b\x36\xe5\xec\x00\x4d\x53\x55\xfc\xa7\x3e\x7a\xa8\x80\x84\x0a\x53\x44\x96\x88\x1e\x42\xaf\xf5\x85\x93\x0b\x82\xe4\x2d\x53\xf8\x23\x5a\x90\x28\xe9\x40\x53\xb1\xef\x83\x99\x6b\x09\x97\xaf\x52\x77\xf1\xbd\x37\x51\x5e\x0f\x77\x33\xed\x26\x4c\x5d\x12\x06\x41\x7b\x12\x82\xf7\x20\xf0\x85\x67\xc4\xdb\x20\xb9\x9c\xde\x0e\x8a\xb1\x5c\xa5\x9f\x98\x1e\xa4\x0f\xff\x1e\x13\xc1\x61\x14\x54\xf0\x1e\x32\x15\x73\xad\xed\x01\x53\x89\xf0\x0f\x29\x14\xd3\x8b\x4d\x41\x59\x85\x3f\x92\x8e\xeb\x6b\x56\x35\x32\xff\xaa\x54\x1e\x0e\x95\x27\xc1\x21\x3a\xe5\xa6\x26\x34\x14\x04\xae\xcb\x47\x02\x70\x8c\xb0\x05\x34\x5b\x8d\x49\x66\x02\x75\x01\x8f\x15\x29\x49\x16\x9f\xd6\x2a\x42\xc4\x53\x85\x6e\xb0\xd9\x23\x80\x53\xde\xb2\x00\xfd\xc0\xa7\x70\xe7\x1a\x08\x01\x49\x1d\x07\x7a\xff\xcc\x28\xa3\xd2\x57\x17\xdb\x50\x04\xe2\x8f\x86\xdc\xaa\x16\xa6\x8a\x37\xdc\x2e\xa5\x39\xa9\x02\xce\x82\x28\x95\xb6\x8e\xa1\xc2\x82\xcc\x30\xc2\x52\x3e\xfc\x85\x05\x82\x33\x5c\xc6\x5a\x49\x7f\x83\x4d\x5c\xbb\x57\x4d\xf6\x94\x84\xf4\x29\x50\xb9\x4c\x66\x13\xb1\x7d\xac\x49\x08\x61\xda\xc4\xc6\xf5\x78\x93\xc3\xe0\xe6\x0c\x21\xc5\xa5\xcb\xb3\x5b\x09\x45\xf4\x45\x1c\x47\x00\xcc\xf6\xb7\xf6\x46\xf5\x7e\x4c\x8c\x11\xab\x68\x59\x35\x11\xb1\xd8\x58\x3c\xf9\x0c\x5d\x93\xdb\x17\x4b\x1c\xa5\xfa\x60\xa0\x42\x4e\x98\x35\xa9\x04\xd0\x1c\x0e\x76\x7d\x76\x73\x63\x04\x8b\xc3\x09\xd3\xf3\xfa\x4d\x1c\x9d\x33\x9a\x24\x44\xe9\xb9\xf5\x0c\x06\x16\xaa\x2b\x89\x89\x44\x2d\x08\x23\x24\xc9\x0f\x66\x90\x99\xd5\x34\xc1\x26\xdf\xca\x14\x9d\xea\x2e\x71\xc4\xc5\x84\x8d\x20\x25\x23\x85\x6a\x9b\x7a\xb7\xb3\xfc\x12\x88\x12\x22\x94\xd6\x3d\x37\x52\xd4\x78\x42\x64\x69\x46\x9a\x8d\x44\x96\x4a\xcc\xeb\xb1\xc4\xf9\x60\x6a\x50\xe7\xc5\x6d\x1c\x5e\x49\xdc\x42\xa0\xff\x3e\x49\x5f\xbe\xfc\x82\x20\x58\x90\x0e\xc8\x53\xaa\x20\x62\x0b\xca\xb8\x5c\xdc\x26\xc4\x1f\x04\x62\x88\x5c\x66\x64\xe6\x98\x66\x5c\x4a\x62\x52\xf4\xd8\x0f\x29\x38\x18\x00\x07\x17\x45\xac\x46\xfe\x11\x53\xdd\xb2\x80\xad\x76\x3c\x67\x82\xeb\xb5\xb8\x5d\x19\xd7\x94\xf3\x88\x60\x6f\xdb\x83\xf2\x9c\xae\x83\xb1\x2c\xe2\xc0\xf0\xf6\x84\x38\x56\xb7\x67\x90\xb7\x7b\x7d\x43\x8a\x0a\x4c\x6b\xcf\x05\xe9\x0e\x06\x5f\x53\xfb\x2d\x88\x94\x4a\x50\x36\xdf\x23\x8d\x92\x7c\x48\x1f\xfe\xcc\x02\x8a\x77\xa0\x8e\xa5\xf1\x94\x88\x75\x8e\x74\xaf\x6f\xcd\x99\x2b\x78\x32\x0e\xb5\x33\xba\xca\x8b\xab\x78\x36\x8e\xe3\x75\x7f\x78\x32\x38\xf6\xd0\x70\x34\x7a\x87\x5e\xf7\x4f\xde\xf6\x3d\xdf\x0e\xfa\x17\x97\xe3\x01\x7a\x7d\xd2\x7f\xe3\x4b\xef\x39\x1f\x9e\xf6\x4f\x86\xff\xd4\x7f\xf8\xe7\x87\xff\x77\x00\x79\x46\xe3\xc1\xd1\xe5\xf8\xdc\x97\xf0\x53\x82\xe9\x73\x9e\xf9\x81\x7a\x9c\x66\xaf\x21\x8b\x10\x99\xca\xc1\xce\xf3\x2a\xb8\x49\x21\x4c\x65\x85\x91\xc8\x24\x05\x9a\x50\x18\x3a\x67\x18\x92\x90\xb3\x22\x28\x65\xef\x2b\xce\x6b\x0f\xf9\x74\x0d\x4b\xc8\x8c\xa8\x60\x51\xd2\xd3\x65\x93\x80\xb9\x8c\x98\x69\x2a\x83\xe2\x5d\x49\x36\x08\x92\x5b\x45\x6d\xa2\x01\xa4\x0b\xc1\xce\xd2\x90\x4a\x4e\xe4\x5e\xad\x69\x61\x95\x26\x17\x1b\x20\xeb\xc3\xaa\x7b\x75\x06\x08\x0f\xc9\x6d\xa6\x2a\x23\xab\xc5\x4c\x91\x25\x61\x4a\x36\xba\xcd\xad\xa2\x85\x4f\xf9\xea\xb7\x8d\xb0\x72\x31\xef\x9a\xa0\x35\xbd\x42\xc0\xac\x66\xf2\xc6\x3c\x22\x17\xdc\xa6\xd2\xaf\xcc\xe4\x16\x33\x92\xa7\xb8\xac\x15\x89\xb0\x2b\x97\x71\x7a\x43\xbc\x4d\x87\xd5\x6e\x2a\xcb\x41\x42\x6d\x66\x14\x8c\x65\xc2\xd4\x34\x94\xdb\x73\x36\x94\x2f\x04\x75\x4b\x70\x45\x70\xc8\x05\x91\x5b\xb3\xb0\x49\xd1\xdf\x1e\x39\xe4\xdb\x6f\x8d\x0d\xa2\x3a\x36\x70\x11\xc4\x66\xec\x9f\x8f\x48\xb9\x41\x7e\x99\x83\x9a\xe1\x6c\x3e\xac\xe2\x4e\x6e\x12\xd3\xb3\xb6\x35\x6d\x94\x97\x17\x4c\x15\x29\x8a\xdb\xbb\xa9\xd6\x42\xc0\x67\x0d\x37\x2e\x81\xc5\x2d\xfa\x91\x1a\x3b\x47\x96\xef\x53\xd7\x52\xa2\x21\xa6\x1f\x24\x37\x99\x99\xae\xc9\xc6\x95\x4b\xf9\xae\xf2\x2f\x66\xc3\x36\x51\xd6\x00\x64\x35\x87\xf5\x5f\xf9\x0a\xcc\x86\x14\xb9\x6b\x45\x07\xa5\x59\x42\x7e\x82\x85\x24\x1b\x5b\x61\xd5\x9f\xb1\x86\xc4\x1c\x2a\x8d\xf3\xec\xfa\xcc\x87\xbb\x31\xcd\xa2\xe6\xbc\x55\xfa\x0a\x74\x4d\x9c\xef\xc3\xfa\x5a\xa7\xb9\x2d\xaa\x09\xbf\x2b\x2e\x18\x18\xb1\x5d\xac\x84\x01\x63\x23\x36\x1a\xf2\x30\x50\x02\x91\x03\x55\xfe\xf0\x0c\x67\xa3\xb8\x81\x1c\xb4\x29\xaa\x61\x3c\x49\x0d\xd9\xc2\xd9\xe6\xcb\xec\x00\x20\xea\xb0\xdd\x00\xfb\xd9\xfc\x50\xd7\x07\xfd\x49\x5a\xfe\x65\xd4\xf3\xa9\x24\xc2\xe4\xd2\x16\x53\x4c\xcb\x06\x54\xb4\xbf\x5e\xe5\xcd\x4a\x47\xbe\xb6\x79\xab\x77\x77\x3d\xfb\xe7\xeb\x08\xcf\xef\xef\x91\xad\x0b\xe7\x0d\x1c\x1f\xdb\x54\xd4\xb5\x0f\x5d\x20\x76\xe8\xbb\xd2\x79\x51\x9a\xbc\xda\xed\x31\x36\x42\xe7\x0b\xbc\xb0\x50\x3d\x41\x16\xaf\xb5\x70\x64\x5c\x59\x53\x1b\xc8\xcf\xe8\xb6\x63\xb6\xa8\xd4\xa3\x80\x3c\x5e\xfd\x16\xf9\x48\xa5\x92\x08\x2b\x5b\xbe\x03\x5a\x05\xdc\xdd\xf5\xf4\x8f\x49\x55\x9c\x59\xdf\x5a\x8c\x21\xe3\xaa\x60\x9c\x83\x3f\xa1\x5d\x57\x07\x05\x44\x28\xd3\x97\x4b\x5f\xb2\x42\x73\xcf\x22\x0e\x2b\x46\x8c\x23\x13\x61\x58\x4e\x07\x5f\xc1\xbf\x79\x88\x5c\x04\xc4\x76\x2a\x40\xcf\x43\x53\xf2\x26\x11\x1c\x4a\x9a\x70\x61\x5c\xc6\x22\x06\x72\x7d\x35\x58\x5e\x73\xf1\xf0\x8b\x3e\xa8\x3e\x3a\x93\xdd\x73\x18\x4d\xee\x4e\x74\x50\x80\x8f\x3d\x05\x59\x0a\x94\x68\xe5\xfe\x86\xaa\x05\x4f\x55\x89\x80\xc6\xf8\x25\x89\xcb\x38\xab\x50\xda\xca\x2c\x26\xeb\x19\xc4\x6e\x0b\xdc\xb6\xa6\x4a\xb6\xa9\x9d\xe8\xdd\x8a\x92\x98\xce\x05\x6e\x3b\x7a\xf8\xd8\xe0\xdf\x0a\xe9\x36\x35\x36\x1d\xae\xed\x2a\x6c\x1a\x3c\xd6\x3d\xeb\xc4\xaf\x1b\xa1\xe1\xb5\x1a\x7c\xce\x33\x9b\x77\x72\xb3\x21\x3f\x7a\xa4\x78\x49\x7d\x89\xed\x06\x73\xca\xa6\x36\x78\xb8\xc5\xb4\x86\x44\x2e\x29\x0b\xd2\x68\xbb\xb9\x7d\x33\xb8\xb8\x18\x9e\xbe\x41\xe7\x17\xfd\xf1\x85\xd7\x6e\x31\x3c\xbd\x18\x8f\x8e\x2f\x1f\xfe\xf9\xe1\xff\x1c\x35\x82\xe3\x33\x34\x14\x01\x79\x4c\x0b\x6f\x4e\x46\x5f\xf5\x4f\xd0\xe8\xec\x62\x38\xf2\x37\x7e\x1b\x9d\x59\x5b\x05\xbc\x3e\xf4\xd9\x29\xde\x10\xa5\x6f\xcc\x2e\xe6\x20\xeb\x8c\x09\x39\x1d\x72\x81\x82\x48\x6b\x3b\x3e\xa9\x3b\x02\xd7\x0a\x98\xc1\xa1\x47\x66\x31\xa4\xd4\xe8\x7c\xe6\x7b\x22\x35\x30\x3f\x05\x5a\xfa\xae\xfb\x40\x8d\xc1\x5b\xb3\x59\x55\x0f\x94\x91\x0d\xe4\x34\x96\xd2\x75\x28\xa6\xe4\x82\xd7\x37\xf2\xc6\xc5\x35\x47\x91\x8b\xdf\xb4\xf5\xcc\x62\x2c\xae\x89\x4a\x22\x1c\x10\xbf\x5e\xa0\xb1\xb3\x90\xe7\x29\xf1\x2e\x9e\x13\x62\xb8\x62\x22\x40\x7e\x87\x04\x29\x81\xa7\x38\x5a\x70\xef\x11\xfe\x26\x0f\xb0\x96\x8f\xd3\x49\xc4\xd1\x0a\x18\x1e\xbf\x73\x88\x1b\x50\xc1\x66\xd4\xeb\x79\x73\xa1\x1c\x71\xab\x6f\x57\x82\x76\x16\x25\x7f\xe7\xea\x6d\xe6\x25\x37\x24\x35\xeb\x53\xbd\xc5\x1c\x90\x42\xa2\xb7\xdc\x53\xb3\xea\x6d\x86\xe6\xae\x30\x54\x96\x52\xc5\x73\xc7\xe1\x16\x1a\xeb\x5e\x99\xc3\x58\xba\x1e\x63\x46\x6a\x39\xcd\x5a\xca\x9e\x64\x12\xea\x18\xd9\x84\xd2\x3e\x3d\x5f\x64\xa1\xae\x9f\x9e\x13\x6c\x85\x4e\x90\xdc\x28\x0b\xa1\x79\x9a\xe9\x28\xd3\xb0\x7e\x06\xcd\x4c\xf8\x45\x46\x45\x93\x91\x6c\x86\x52\xb3\x1e\xfe\x63\xac\x22\x20\xc8\xe1\xa5\x6c\xc6\x77\xad\x6f\xe2\x08\x29\xe7\xaa\xec\xb5\x5e\xc9\x1a\xb9\xfb\xeb\xfd\x52\x41\xfd\xfe\x9b\xc1\xac\x8f\xa3\xae\x55\xc6\xea\x82\x34\xb4\x3d\x54\x8e\x6a\xab\xce\x19\xeb\xeb\xd5\xcc\xbc\xe0\x86\xfa\x09\x3a\x5d\x65\x92\xea\x53\xf7\xb9\x2a\xcc\x81\x7c\x8a\x01\xc3\x70\xe5\xd3\x8e\xcd\x57\x20\xab\xf6\x2c\x6d\x52\xdb\xaa\xee\x0c\x34\x77\x76\x99\xb7\x55\xb5\x69\x61\x5c\x50\x22\x51\xaf\xd7\xab\x13\x9e\xf6\xaa\x2e\x4b\xdd\x51\x8b\xb9\x65\x12\x80\x34\x27\x22\x23\xe0\x16\xf9\xa2\x67\xd6\x71\x97\xd3\xd9\x90\x27\xc8\xc5\xe1\xdb\xd8\xfc\x07\x24\xca\xae\x32\xdb\xf5\x97\x6d\xdf\x03\xa8\x44\xe3\x36\x85\xd3\x32\x16\x86\xef\x5a\x60\x2c\xf9\xcd\xd6\x10\xa3\x26\x1c\xe9\x7c\x67\xbc\xe0\x3b\x6b\xc7\x97\xb6\xc6\xf5\x86\x4d\xbc\x75\xe3\xb6\x8d\x20\xb7\x1c\x98\xf0\x4f\x6a\xc3\x91\x6c\x54\x11\x1a\xea\x50\x5b\x90\x58\xab\x34\xd4\x99\xbe\xf7\x36\xb6\xc7\x1c\x44\x4b\x6a\x53\xa7\xef\x43\xa9\xfe\xb2\x02\x84\x6c\x0b\x27\xf3\xf0\x8d\x7e\x76\xda\x70\xc7\x09\x32\x17\xb8\x4a\xe3\xa9\x02\x5d\x49\x71\x99\x46\xb9\xad\x46\x96\xbb\xb2\x0b\xda\xd7\xb6\x9a\x56\xd6\x75\xcf\x14\xff\x6b\x71\xdd\xc9\x4a\xf6\xad\x35\xd7\xdb\x42\x3a\xad\x90\xa1\x57\x31\x6f\xb3\xf7\x15\xfc\xa5\x99\x8e\x85\x9b\xa2\x5c\xb2\x7f\xb7\xbb\xaf\xad\x0f\xc0\xae\xf5\x06\x0a\x88\x87\x71\x8b\x24\x3c\xea\xf0\xd7\x8b\x30\xfe\x1a\xe6\xa5\xb3\xb9\x03\xe0\xaf\x77\xc2\x1e\x9b\x4b\x7c\xd3\xf1\x78\x43\x7d\xdc\x11\xed\x87\xee\x27\xe3\xd1\xa7\xe2\xb9\x5f\xc3\x6e\xfc\xd4\xfb\xee\xd1\x37\xd8\xfe\x77\x52\x96\xa3\xbb\x51\x05\x6d\xe2\x99\x80\x6f\x5b\xb4\x98\x6d\x4c\xa3\xd9\x83\xed\x6e\x8e\xee\xdb\x4d\xd4\x6c\xa5\x52\x95\xca\xc9\xdb\xab\x10\x70\x74\x83\x72\xd7\x3b\x19\x62\xb2\xaa\xd7\x6b\x25\xe7\x9b\xd4\xbd\x6e\x37\xe3\x5b\x0d\xf2\x49\x06\xd4\x94\xf4\x75\xe7\xda\xa3\xc5\xec\xb8\xd1\xd5\xb9\xe4\x9e\xa6\xeb\xef\xda\x3c\x3c\xdd\xb0\x9f\x76\x7c\x1b\x9a\x1a\xef\xdb\xa6\xb1\xa1\xc5\x71\x4b\x29\x9b\x13\xdb\xde\xc0\x51\xa0\xa6\x2d\x09\x72\x53\x43\xe5\xca\xc5\xaf\x77\x6f\xb9\x9a\x82\x95\x2d\x94\x6b\x96\xba\x56\xe8\x2a\x1c\x5c\x9b\x72\xdc\xfa\xaf\xfb\xfb\x83\x32\x5b\x67\x27\xf8\xbe\x1d\x57\x90\x00\x5f\x46\xec\xe1\xf2\x75\x12\xf6\xe7\xb3\x32\x19\xfc\x4f\x39\x64\xef\x66\x7e\xcc\x61\x2a\x2c\xaf\xf7\xe5\x9d\x6c\x28\xc4\xaa\x09\x32\xf1\xe5\x9b\x7b\x90\xbf\xf0\xf9\x61\x9a\x37\xe8\x77\x33\x9e\x07\x9a\xd7\xb5\x21\x7f\xe1\xf7\xc3\xb4\x93\xa2\x55\x23\x6c\x75\x1a\x34\x1f\xcb\x96\x04\x47\x7c\x8a\x23\xc4\x21\x86\xdd\xdb\x85\x6d\xf3\xb7\x6f\x07\xfd\x93\x8b\xb7\x57\x47\x6f\x07\x47\x5f\x5f\x5d\x7c\x73\x36\xd8\xed\x6b\x14\xa7\x52\xa1\x29\x41\x93\x67\x09\x17\x6a\xf2\xac\xa3\xff\x32\x95\x95\xf4\x3f\xb8\x40\x93\x67\x0b\xa5\x92\xc9\xb3\xed\x10\x8d\xce\x2f\xb6\xfe\xe0\xb4\xff\x6e\xcb\xe1\x5c\x5c\x9c\x99\xc2\x51\xd0\x64\x2e\x88\xd2\x10\x54\x23\x53\xea\xce\xe4\x2a\x4f\x79\x78\x0b\xe3\x38\xf8\x87\x03\x34\xe3\x51\xc4\x6f\x48\x88\xa6\xb7\x08\x9b\xe0\x55\x48\x27\x57\x1c\xaa\x13\xc1\x87\x59\x21\x2a\x0f\x29\xc7\xae\x1a\x1f\x60\x87\x26\x3a\x24\x36\xd8\x1f\xfe\xa2\x7f\x62\xd0\x6f\x2d\xe1\x6b\x65\x91\x11\x4f\x81\x0a\x49\xe6\xa9\xeb\xd3\xe6\x52\xd3\xf5\x5d\xc3\x46\xc3\x86\x1c\x7d\x48\x71\x04\x25\x8f\x20\xf1\x27\xf4\xc5\xe8\x02\x05\x31\x51\x0b\x1e\xa2\xe7\x6f\x06\x17\x9d\xb3\xd1\xf9\x45\xe7\xec\xf2\xa2\x73\x3c\x38\x19\x5c\x0c\x3a\x44\x05\xbe\xc0\xd5\x77\x0f\x7f\x52\xdc\x28\x75\x00\xc6\xf7\x7d\xcf\x13\xb2\xfa\x76\x35\xf6\xc0\xc7\xc7\xeb\x7e\x79\x0a\x9b\xd1\x00\x38\xd2\x8f\x4d\xf2\xa3\x07\x0f\x97\x0a\xd6\xc8\xb4\x45\x8c\x6f\xbb\x32\x9d\x9a\x20\x26\xdf\xd0\x4e\x61\x42\x39\x5a\x70\xa9\x56\x7a\x23\x96\x3f\xaf\x46\xe8\x4c\xcd\x30\x3d\xa6\xa5\xe7\x73\x5b\xf9\xc1\x06\xfb\x2d\xb0\xfe\xd3\x46\x54\x35\xa2\xc6\x5a\x2f\xa0\x6b\xa7\x99\x76\x46\xf4\x5e\x33\x45\xf5\xe1\xd7\x3c\xa4\x0a\xaa\x5d\x08\xa5\xcf\xb0\x90\xcb\x3a\x72\x53\x5b\xca\x22\xe0\xf1\x94\xb2\x3c\x94\x16\x1d\x8f\xde\xf5\x87\xa7\x90\x79\x00\xf1\xd1\xb7\x66\x7f\xb8\x1e\xa5\x53\xea\xef\x84\x5a\x24\xdd\x34\x8a\x82\x08\x50\x40\x60\x58\x3a\xe0\xb1\x43\x60\xbb\x90\xba\x18\x6c\xe1\xc6\x69\xfa\x4c\x45\x74\xee\x6d\x7a\xb6\xf3\x18\x4c\x94\xeb\x13\x8c\x22\x8f\x88\x6d\x36\x16\x2d\x97\x42\xc2\x94\xa3\x38\xe7\xa5\xe6\xc4\x02\x45\x16\x4a\x91\x22\x0d\x6b\x33\x0d\xc3\xd3\xf3\x8b\xfe\xc9\xc9\xe0\x18\x9d\x9d\x5c\xbe\x19\x9e\xa2\xa3\xd1\xbb\x77\xfd\xd3\x63\x5f\xfe\xef\xd1\x48\xff\x6a\x3a\x19\xea\x2f\xba\xc3\x53\x64\x60\xf4\x8f\x7d\x39\xc0\x5e\x1c\x3e\x39\x50\x8d\xc4\x13\x6b\x0b\x2f\x9c\x1e\x0d\xae\xde\x0d\xde\x8d\xc6\xdf\x6c\x75\x3a\x0c\xe7\x8c\x0b\x52\x2e\xcf\xe7\x0b\x21\xd6\xaf\x6e\x68\x4b\xe2\x01\xcc\xd0\x1f\x28\x0b\xf9\x8d\x44\x47\xb6\xcc\xee\x09\x65\xa6\x27\x81\xa4\x6c\x1e\x91\xae\xbe\x1e\x91\xb0\x83\x88\x0c\x70\x42\x42\xc8\x0b\x3a\x44\x07\x77\x93\xc9\xe4\xd9\x12\x47\x34\xd4\x7f\x1c\xea\xff\xf9\x41\x72\xa6\xff\xeb\x2d\x36\x71\x8a\x35\xf4\xc5\x5a\x05\x5e\x4b\x02\xb4\xb2\x05\xf8\x06\x99\x2d\x08\x83\xb0\x4c\xb0\x44\x92\xc6\x09\xd4\x74\xac\x41\x5d\x37\xce\x33\x7e\x43\xc4\xf9\x82\x44\x11\xa0\x0b\x79\x3a\xf5\x8e\x72\xf2\xac\x0a\x97\x57\x91\x38\xe5\x1b\xb0\x55\x8f\x2e\x4c\x93\x08\xcb\x06\x18\x3d\xc3\x33\x0a\x43\x56\x8f\xd0\xd6\x29\x75\x1a\x44\x65\x17\x6a\xf8\x98\x96\x8a\x95\x22\x07\x0b\xd2\x52\xaa\x3b\x53\x0f\x19\xd4\xff\x08\x14\xba\x94\x78\xee\x63\xcb\x4b\x09\x6a\x8d\x7e\x53\xf9\x92\x7c\x56\x20\xf5\x50\x9f\xe5\x65\x8c\xa8\x44\x31\x75\xad\x89\x6c\x8f\x6d\x78\x39\xba\x45\x84\x05\x11\x97\x24\xec\x4d\x98\xf7\x62\x5c\x26\x00\x5d\xc6\x85\x22\x43\xa6\x12\x11\x4e\x25\x84\xc5\xf2\xb4\xd8\x46\x37\xe0\x11\x0f\xcc\x5a\xe9\x4f\xa1\xf8\x37\x31\x88\x9a\x0d\xe2\x28\x2b\x5f\xcd\x08\x9a\x45\x78\x2e\xd1\x73\xf2\x31\x20\x89\x42\xdd\xd9\x67\x28\xc0\x4c\x0f\x66\x6a\x1b\x2e\x92\x10\xdd\x2c\x08\x73\xbd\xa9\x51\xec\xfa\x89\x40\xd8\xb6\x09\x8e\x29\xcb\x01\x9f\xea\xbf\x32\xe0\xf5\xfe\xc1\x26\x61\x4d\xe8\x7d\xee\x32\x32\xc0\xca\x82\x35\xa9\x2b\x9b\x14\x28\x56\x1c\x28\xc6\x1c\xd2\x2d\xb1\x00\xad\x4f\x13\x8a\x96\xf6\x72\x01\x44\x42\x13\x6f\x45\x85\x8b\xbd\x5f\x11\x44\x4d\x17\xbf\x5e\xc1\x37\x2a\x3d\xe3\x8c\x4c\x9e\x4d\x26\x6c\xd2\x74\xed\xd7\x21\x87\x64\x09\xc6\xce\x02\xe8\x74\x15\x74\x33\xaa\xc7\xae\x9e\xd6\x01\x4e\x12\x68\xc4\xad\x27\x2b\xff\x03\x62\x41\x0f\xf4\x25\xce\xb1\x9f\x6c\xce\xb4\x63\x53\xec\xaa\x1a\x34\x5c\xe0\x32\xde\x96\x5b\x70\x6a\x05\xed\x7b\xa7\x78\x3f\x74\x66\x4d\x75\x5c\xe6\xca\xae\x74\x6e\x00\xb8\x07\x3a\xfb\x67\x67\xe8\x7c\x30\x7e\x3f\x3c\x1a\x5c\x39\x35\x60\x37\x42\x37\x42\xdc\x0f\xa5\x57\xfa\xee\x0a\x9e\x41\xab\x46\xee\x4a\xa8\x01\x48\x1c\xb8\x7d\x53\xb9\xbe\x9b\xf7\x45\xf0\x3a\xe4\x7d\xd3\xbe\x77\xa6\x70\xa4\x3f\x2e\x6f\xe4\x44\xb6\xa3\xaf\x4c\xcc\x3e\xe8\x68\x3f\x57\x65\x5a\xda\xcc\xcb\x57\x97\xc3\x93\xe3\xb3\xfe\xd1\xd7\x00\xb0\x83\x4e\x07\x7f\xb8\x2a\x3f\xdb\x6d\x59\x1b\xc0\xdf\xc3\xea\xba\xcd\xbe\x77\xae\xb4\x80\x1f\x87\x27\x0b\x22\x8a\xb5\x67\x86\x8d\x92\xa9\x0d\x39\x27\xfd\xaf\x06\x27\x1d\x74\x36\x1e\xbd\x1f\x1e\x0f\xc6\x30\x9b\x17\xa3\xaf\x07\x3b\x0a\xd1\x55\xb0\xc4\x02\xdd\xc3\x04\xae\x51\xbc\x4f\x3a\xf7\x40\xdf\x68\xfc\xa6\x74\x16\xb5\xa6\x8d\xcb\x02\x25\x00\xd6\x9d\x48\xfb\x20\x6b\x97\x59\x2b\xd2\xb2\xa7\x29\xb3\x92\xe2\x1f\x2f\x47\x17\xfd\x9d\x89\x2b\x01\xdb\x03\x7d\xe3\xc1\xd9\x28\x3f\x02\x2f\xc7\x27\xbb\x51\x98\x83\x23\x00\x6c\x0f\x14\x9e\x0f\x8e\x2e\xc7\xc3\x8b\x6f\xae\xde\x8c\x47\x97\x67\x40\xe6\x68\xfc\xa6\x63\xdd\x1c\x38\x42\xe7\x67\xfd\x5d\xc5\xe2\x0a\x0e\x62\x30\x10\x0b\x9a\x27\x81\xc1\xf4\x38\xa3\x39\xeb\x5f\xbc\xbd\xba\x18\x5d\xfd\xfe\x7c\x74\x7a\x35\xbe\x3c\x19\x9c\x5f\xbd\x1e\x9e\xec\x7b\x44\x3e\x2c\x7b\x1f\x53\x27\xdb\x8f\x7b\x5f\x98\x8e\xdd\x9e\x06\xf0\x5e\x28\x37\xa7\xe0\x57\xe3\xd1\xd7\x83\xb1\x39\xcd\xcb\xcf\x76\x25\xbf\x16\xfe\x23\x8c\xe2\xf2\x7c\x30\x36\x62\xe2\xac\x7f\x7e\xfe\x87\xd1\xf8\xb8\xb3\xfb\xce\x6e\x8a\x64\x8f\xe3\xc9\x74\x13\xf7\xe0\xeb\xc1\x37\xfb\x19\xc4\x46\xc8\x8f\x41\xb9\xde\x06\xc5\x45\xdf\x8f\x16\xb7\x06\x8d\x6c\x46\xf2\x58\x23\x7a\xbc\xf5\x20\x7b\x5f\x11\x23\x83\xf6\xa4\x1d\x18\x68\xfb\xd4\x0f\x72\xfa\xf6\xa0\x1f\x38\xf2\xf6\xa6\x1d\x00\xc0\x6e\x7e\x43\x86\x7f\x02\xf4\xee\xee\x57\xa9\x02\x70\xb2\x0e\x7a\x5f\xd4\x1b\x6d\x04\xb6\x47\xfe\xcf\xdd\xe9\xde\x08\x76\xbf\x34\xef\x72\xa3\xf6\x12\xd5\x86\xa6\x5c\xd4\x83\x5a\x34\x1e\xed\xaa\x9c\x6c\x02\xb8\x87\xb9\x5b\x01\x0b\x73\xf0\x08\xe4\x16\xe1\xee\x81\xea\x5d\xee\xca\x69\xbc\xdb\xca\xe2\x24\xb9\x62\x38\x26\x1d\x1b\x6c\x00\xff\xd8\x6d\xb2\x36\x83\xdc\xc7\x3c\xb5\x27\x69\x27\xbc\x59\x15\x1c\x3b\x2c\xa8\x42\xa7\xa5\x61\x62\xfb\x5e\xec\x36\x5f\x1b\xc1\x93\x1c\xf8\x1e\x66\x0e\x7c\xfe\x9a\x62\xdb\x03\x7a\x27\x7a\x01\x18\x71\xa0\xf6\x40\x1d\x8f\xa0\xbd\x80\x09\x98\xd2\x54\x32\x72\x53\x78\xb0\x0b\xad\x25\xd0\xa4\x0c\x78\x4f\x94\x73\x31\x47\x66\xe1\x34\x74\xf7\xaf\xdd\xc9\xf6\xc0\xdd\x07\xd5\x62\xbe\xef\x3d\xbf\x19\xe4\x1e\x68\xb5\x01\xfa\x9d\x52\xb2\x45\x67\xbd\xdc\xc3\x4e\xd4\x37\x45\xb2\x8f\xf1\x40\x8c\xf6\xea\x84\x6f\x4f\x71\x0e\x66\xf7\xd3\x7d\xf9\xca\x5d\x1c\xf4\x9f\x99\xb9\x50\xff\x7d\xd2\x3f\x45\xcb\xcf\xf3\x9f\x3f\x37\x8f\x76\x9a\xed\xed\xd1\xed\x61\xde\xef\xee\x7a\x7d\x47\xb1\x37\xd4\x78\x33\xbd\x2b\x9f\x36\x43\x7c\xb1\x20\xc6\x17\xef\xda\x65\x17\x3b\x3b\x39\x11\x64\x5e\xcb\x05\x12\x66\x68\x4a\x90\x4c\x6d\xe4\x41\xd9\x8c\x8e\xb8\x30\x11\x6b\x79\xc0\x41\xef\x36\x8e\x2a\x83\x0e\x46\x6b\xee\x7e\x13\x4b\x31\xe3\xb4\x58\x15\x95\x71\x14\x52\x41\x6c\x91\x0c\xe8\x84\xd6\x41\x33\x2e\x18\x79\xf8\x05\x97\x02\x49\x93\x04\xf1\x14\xd5\x87\x31\x95\x66\xc3\x17\xb7\x55\x9a\x6e\x5f\x98\xd6\x0a\xa8\x2c\x02\x17\x62\x25\xb3\xb9\xf9\xbe\xb0\x48\x26\xc2\xfd\x7b\xe8\xb8\x61\xeb\xae\x2e\x69\x48\x7c\x41\x7c\x75\x78\x5d\xdd\xed\x18\xab\xc3\xbc\x81\xd9\xef\xcf\x47\xa7\xaf\x69\x04\xad\xd0\x26\x6a\xa2\x26\xec\x3d\x8e\x68\x68\xdf\x36\xb5\x6b\x71\x9c\x40\xdb\xd6\x6f\x27\x0c\xa1\x3b\xfd\x3f\xc8\xc4\x40\x2b\x1e\xf0\x68\xf2\xec\x10\x4d\x9e\xa9\x20\x99\x3c\xeb\xb8\xdf\x6c\x77\x22\x4d\x9a\xf9\xf9\xd5\xcb\xde\xe7\x5f\x7e\xd9\x7b\xd5\x7b\xf5\xf7\x85\xd7\x12\x2e\x94\x34\x2f\x7c\xf1\xc5\xcb\xbf\x9b\x3c\xd3\x3f\xdc\x4f\xd8\x77\xfe\xaa\x9b\x31\x56\xdc\x10\x97\xcf\xb8\x63\x0e\xcf\x80\x06\x26\xb4\xb5\x18\x40\x0c\x00\x96\x0f\x3f\x47\x34\xe4\x4f\x3b\xb0\x9a\x45\x4a\x0d\x73\xbc\x2f\x15\x08\x2b\xf1\x43\x16\xae\x72\x77\xd7\x73\xdd\x5b\x6c\x74\x70\x3b\xbe\xb0\x28\x71\x92\x74\xdd\x01\xd1\xa5\x2c\x24\x1f\x0b\x31\x44\x8c\xcc\xb1\xa2\xcb\xed\x3a\x48\xaf\xa1\xa0\x0c\xe2\xcf\x6c\x1d\xb2\x3c\x2e\x7a\x4b\xa8\xa6\x1e\xef\xd1\xc9\xd0\xd6\xd5\xf1\xc6\x9f\x41\xcd\xdd\x62\xa5\xf3\x10\xeb\xcf\x2a\xe1\x16\x5a\xcb\xde\xdd\xf5\xce\xe0\x2f\xd3\x32\xda\x9f\x0d\x61\x31\x99\x52\x6b\x85\xb6\xff\xab\x5f\xfb\xf1\xb2\xc0\x1b\x77\x69\x7e\xa6\x58\x54\x7f\x8e\xde\x91\x98\x8b\x5b\x5f\x28\x3b\x89\xb5\x4c\xc4\x7a\x06\xf2\xa2\x4f\x35\x10\x1d\xa3\x61\xc4\x38\xeb\x3a\x16\x70\xad\x94\x3c\x98\xfa\xe5\xa2\x52\x36\xfe\x69\xbd\x8f\x9e\x91\xdf\x16\xa8\xd7\x57\x6f\x28\xd9\x32\x01\x64\x68\xd9\x0c\x62\x22\x37\xb5\x52\xf6\x40\x1b\xbb\xc8\x44\xf8\x90\x32\x23\x1f\x4a\xbd\x94\xab\x11\x8e\x6d\x5b\x0a\xfd\x5f\x7f\x1d\x7e\xd7\x4b\x22\x47\x90\x7f\x52\x09\xfe\xfc\xfc\x04\x1d\x11\xa1\x32\xb9\x70\x36\xd4\x42\xee\x62\x78\x76\x88\x2e\x25\x41\x07\xc1\x0c\xe1\x84\xa2\x6e\x57\x5e\xd3\xa4\x2b\x65\xd4\x85\x0f\x01\x35\xb4\xde\x0b\x38\x53\x94\xa5\xc4\x9e\xbf\x5a\x86\x42\x05\x16\xd2\xa4\x3f\xdd\x76\xc4\x41\xe7\x3d\x68\x49\x71\x41\x93\xba\x56\xb0\x47\xa6\x82\x39\xc4\x43\x6a\x40\x6e\x6a\x6c\x64\xb7\x1f\x5c\x25\x49\xfa\x90\xd7\x82\xf8\xd0\x26\x97\x9d\x71\xa1\x34\x90\xbe\x7d\x5e\x64\x70\xe8\x71\xe5\xa1\x4e\x7f\x87\x4d\x29\xfe\x24\x5f\xb5\x35\xa8\x00\x33\x7b\x6f\x03\xeb\xd7\x52\x9b\x35\xea\x33\x9d\xb8\x53\x53\xed\xdb\x37\x67\xee\x9d\x42\xc5\xeb\xac\x53\x40\x46\x65\x0d\x4e\xe8\xd2\xd8\x66\x8b\x14\x7b\x2d\xb6\xd8\x29\x0d\x7a\x84\x5f\x40\x47\xf0\xf5\x02\x03\x19\x6f\xf8\x7a\x65\x38\x1c\xa5\x49\xcc\x94\x27\xe0\xcf\x6e\x00\x11\xb3\x3d\x74\x16\x11\x2c\x89\xfb\x11\x61\x54\x90\x1c\x7c\xfa\x83\x3e\xbb\xb8\x30\x86\x0c\xc5\x5d\x3e\x94\xde\x45\x98\x42\xff\xad\x0d\x1f\xf8\x0e\x89\x95\xf5\xca\x27\x0d\xf4\xd3\x40\xff\x65\x53\x5f\x0a\x81\xb3\xff\xca\x51\x37\xe8\xa1\xd7\x05\x15\x56\x63\x51\xdc\x60\x74\xbb\x04\x54\x59\x57\xe3\x1f\xa0\x14\x02\x64\x35\xb9\x26\x59\x6f\xe3\xc7\xde\x63\xc9\x8c\x2c\xcb\xf5\x82\xb4\x58\x41\x12\x6e\xd4\x90\x03\xd4\x75\xe7\x24\xbc\x12\x72\x62\xb4\x54\x68\x3a\x50\x99\x18\x96\xad\x20\xc4\x83\xaf\x83\x0d\xb1\x8d\xdf\x77\x47\xa9\x09\x9b\xd6\x70\x49\x5c\x43\x2d\x95\xd7\x26\xf1\x1a\xb6\xe7\x31\x95\xd7\x36\x8f\x7b\xbb\x26\x3b\x47\xdc\xec\xe4\x90\xca\x80\xaf\xec\xf9\x06\x40\x77\xa4\x71\x5f\x64\xd5\x51\xa2\xf7\xc0\x96\x9d\xf3\x87\x25\x15\xae\x0b\x3a\x5c\x37\x2b\x25\x1b\x03\x25\x8b\xb5\xb4\x35\x8f\x5c\xc5\xe2\xe1\x5f\x62\xa2\x04\xdf\x00\xae\xb0\xcd\x37\x82\xac\xa4\xae\x60\xe8\x48\x99\x91\xff\x99\x2e\x71\xa4\x1f\xe9\x39\x1a\x96\x5e\x2a\x1c\x06\xc6\x60\x59\xab\xe9\x1c\x69\x31\x30\x27\x31\x0a\x49\x51\xe7\x29\xaf\xca\x3a\xda\xbe\x91\x1f\xeb\x1f\x56\x29\x4b\x96\xa4\x9a\x23\x24\x1b\x76\x0c\xba\xa0\xe9\x9b\x0b\x64\x18\xe5\xf0\x44\xff\xbb\x01\x9b\x9d\x98\x7e\xbb\x21\x00\xb2\x7a\xe3\xc6\x31\xf2\x4a\xe0\x8d\x68\x2d\xcd\x52\x69\x59\xb6\x5e\x90\x61\xdd\x22\x98\xe9\x7f\x94\x29\xaf\x1f\x46\x44\xa4\x44\x6a\x81\x59\xf1\x4d\xcb\x15\xfb\x1f\x50\x4c\x18\x17\xae\xe1\xe6\x2a\xb6\xca\x11\xc1\xd5\xb8\x59\x86\xaf\xbd\x86\x67\xd2\xbc\x90\xa1\x51\x8d\x23\xb3\xfb\xa0\xbc\x2d\x2f\x8a\xb1\xaf\x19\xc3\x3b\xfb\x7a\xe1\xf0\xef\xa1\xbc\x1b\x6a\x1a\xeb\x6f\x6b\x54\x9d\x4d\x5b\x62\x87\xfd\xb0\xb6\x03\xb6\x64\xff\xfd\xef\xd0\x3d\xec\x49\x0f\x51\xdb\x1e\x9e\x0d\x89\x6b\x79\x7c\x82\xe6\x6e\x9a\x00\xa6\xca\x5e\xb7\x52\x65\xcb\x41\x54\x6a\xf0\xb9\xca\x55\xcc\x31\x5e\x01\x50\x89\x5b\xd1\x98\x40\x57\x9a\xec\xac\xbb\x30\x4f\x1a\x2c\x59\xe1\xb4\x73\x60\xca\xb3\xb2\x09\x54\x25\x35\x79\xfd\xf7\x83\xb5\xae\xba\x07\xa6\x24\x27\x34\x14\x7e\x8f\xa3\xe2\x5c\x7b\x29\x7c\x0f\x45\xe2\x57\xee\x5e\xdb\x82\xf6\x51\x0c\x0d\xdc\x19\x6c\x7d\x3c\x27\xa6\x12\x45\x07\x9e\x10\xd3\x73\x6f\x66\x5b\x71\x99\x8a\x20\xb6\x4f\x16\x14\xdd\xf0\x9a\xe5\x8f\x38\x5b\xd2\x10\x0b\x44\xd0\x9c\x08\x02\x56\x92\x42\x49\x0a\x62\x9a\x7f\x09\x24\x6c\x1b\xaf\x4c\x35\x0e\x89\xed\xa5\x9e\x57\xb4\xf1\x5b\xe2\x3d\xa4\x4b\x12\xe9\xeb\x81\xfe\x21\x58\x60\x36\x37\xce\x16\x3b\x26\x49\x14\x92\x09\x31\x6d\x85\x60\x3f\xc9\x96\xa3\xb0\x88\x28\x67\xf0\x46\x9c\xea\x37\xa1\x90\x96\x1e\x60\x76\xc7\x11\xb6\x49\x3e\xa8\xd4\x73\x2c\xc1\xbb\xb0\x79\x44\xbf\xe7\x53\xf4\xfc\xee\xae\xf7\x7b\x3e\x7d\x73\x39\x3c\xbe\xbf\xff\x0c\xcd\xa0\x17\x9e\xdd\x9b\xd5\x57\xf5\xc6\x30\x13\x6e\x8c\x69\x8e\xd9\x17\x58\xa2\x29\x21\x0c\x09\x82\x83\x05\x09\x8d\xcf\x40\x33\x96\xb9\xa0\xc5\xf8\x16\x49\x45\xa3\x48\x1f\x96\x22\x65\xa6\xbf\xb1\xc9\x33\x3d\x7a\x9d\x1d\xb4\x3d\xf4\x0d\x4f\x85\x7e\x62\x3e\xe5\x02\xbe\x84\x2a\xee\x31\x17\xa4\x58\xbf\x6c\xbb\x32\x30\x27\x58\x2a\x34\x72\xf4\x78\x3e\x7d\xf8\xff\x22\x45\x63\x6c\xde\xab\x68\xf0\x04\xc0\xd2\x24\xe2\x38\x24\xe1\x76\xe6\xab\x13\x2a\xff\x7f\xf6\xde\xa7\x39\x8e\x1c\xc9\x17\xbc\xef\xa7\xc0\x9b\xb7\x66\x52\xdb\x63\x66\xab\x6a\x66\xde\x41\x7d\x68\xcb\x22\x53\x2a\x4e\x8b\x4c\x36\x99\xd4\x4c\x77\xab\x4c\x0f\xcc\x40\x66\xa2\x14\x11\x88\x02\x22\x92\x62\xf1\xe9\xb0\xf6\x0e\x6d\x7b\x5e\x7b\xf7\xad\x9d\xc3\x5a\x8d\x59\x9f\x7a\xe7\x32\x57\x7e\xb1\x35\xb8\x03\x11\x88\xc8\xf0\xf8\x93\xa4\x54\x33\x66\x6f\xe6\xd0\x25\x66\xc0\xdd\x81\x40\x00\x0e\x87\xfb\xef\x97\x03\x52\xb9\xe7\xec\xb1\x23\x90\x03\x94\x0a\x7e\x0f\xe4\xb2\x6b\x72\xae\x2b\x8c\x72\x24\xe4\xa9\xb0\xfc\x23\xbb\x24\x9b\x5c\xa6\x94\xc9\xa5\xde\x1d\x97\x31\x7c\x93\xee\x80\xe7\xae\x7e\x28\xbe\xa6\xa6\xe2\xaa\x04\x5b\x54\x91\x57\x69\x32\x95\x3e\xfc\x65\x27\x24\x81\xd4\x41\xaa\x87\x31\x70\x68\x03\x22\x0a\xe1\xd3\x61\xb5\xc2\x36\x51\x14\xfe\x24\x49\x46\xbf\xa6\xad\x15\xc2\x7a\x60\xa0\x1d\xb5\x1a\xdc\x7a\x8d\x36\x4f\x15\x4c\x24\x04\x14\x7c\x00\x72\xd2\xd3\xcb\x8a\x91\x68\xa0\xa5\x41\x83\x6e\xc9\x4a\x6f\xfa\x65\x22\x30\x19\x3c\xda\x2d\xcd\x21\x60\xbb\x69\xb8\x42\xf4\x1e\x07\x86\xe4\xd0\x3f\xfc\x1f\x43\xc4\xcf\x81\x06\x20\x1c\x76\x30\x49\xe1\xce\x0e\x4a\xa5\x9b\x78\x42\xf0\x4b\x8f\xb1\x0d\x38\xe9\x81\x23\xdb\x86\x22\xdd\xab\xa8\x7e\xa3\x7e\xd8\x77\x8a\x63\x50\xb9\xef\x75\xbc\xca\x43\x3e\xdd\x0a\xf6\x8d\x03\xc8\xd3\xc0\x11\x28\x51\xdd\x44\x02\xbc\x6b\xb5\x91\xef\x53\x89\x68\x65\xcf\xb9\xbb\xcb\x97\x06\x49\x4c\x27\x76\xc2\x62\x29\x39\x33\x77\x26\x17\xc9\x91\x03\x20\x82\xc0\x59\xea\x97\xfe\x74\x53\xfe\x9c\x6f\x79\x0e\x97\xc7\xba\x80\xbb\x65\x12\x30\xa6\x39\x84\x0e\xc4\xec\xb9\xb5\x1d\x31\xdc\x1e\x7e\xb6\xfb\xbc\x81\x90\x11\x0f\x6e\xfe\x0c\xcb\xf4\xc3\xcf\x93\x95\x4a\x4d\xae\xe1\x43\x75\x56\x49\x17\x21\xf3\x4d\xc0\x3a\x2c\x96\x38\x82\x73\x54\xa6\x22\xe1\x19\x77\xb5\xb3\xae\x7b\x64\xec\x7c\xc0\x85\xc9\xad\xa3\x07\xac\x4f\xf5\xd5\x25\x58\x50\x07\x2f\x34\x25\x0a\x8c\xf3\xac\xaa\x59\xa2\xd6\x8f\xff\x74\xc1\xa3\xda\x9f\x47\x7b\x54\xec\x43\xbe\xde\x12\x9d\x0c\xa0\x25\x06\x4f\x5e\x1a\x83\xac\x4b\x5f\xb9\xc9\xa8\xf5\x5a\x58\x57\xb6\xd4\x1c\x80\x88\x76\x5b\xa0\xd6\x42\x03\x52\x63\x63\xeb\x68\x01\x03\x1d\x64\x09\x2e\xaa\x9e\xc1\xda\xe1\x47\x76\x9b\x50\x42\x45\x3a\x17\x37\x44\x8d\x1c\xba\xe5\x96\xfa\xe1\x96\x76\x9c\xda\xc2\x0c\xd6\x13\xb0\xea\x05\x0b\x65\xef\x6b\xee\xa0\xcf\x1b\xb4\x2a\x96\xc4\x3a\x7c\x6f\xd1\xee\xe9\x63\xc0\x94\x63\xd7\x95\x76\xae\x9c\x0e\xcd\x35\xba\x91\x6e\x5d\x6d\x94\xfc\x1d\x92\x9b\xac\x09\x6e\x48\xed\xa1\x43\xad\xf7\x7e\x85\xb3\xb2\xf3\xa7\x83\x4b\xa6\xc1\x26\x05\xd4\x0a\x80\xdb\x96\x7e\x5f\xa4\x39\x8c\x7e\xeb\x33\x78\xb6\x2e\xaf\xa2\x60\x4f\x81\x65\xb3\xef\x93\xa4\x7a\xe5\x78\xb9\x6d\xef\x1c\x58\xe4\x53\x75\x01\xb9\xee\x03\x60\xb1\xc0\xec\x4e\x43\x6b\x08\xe0\x06\xc1\x15\x7b\x3f\x99\xea\xfa\xc7\x81\xce\xee\xe3\x7d\x0f\x51\x5a\x21\x77\xf7\xad\x8f\xfd\x08\xdd\x03\xf4\x39\x24\xed\x6e\x5d\x2d\x70\xdb\x1d\xa2\x11\xf8\xb3\x8f\x81\x95\x16\x60\x67\x83\xcb\xd6\x10\x11\xc3\x24\x0b\x43\x67\x67\x80\x8d\x35\x36\x25\xc7\xc6\x1c\x01\x75\x13\xa1\x47\xad\x78\x5c\xc6\x9a\x6e\xb9\x8e\x58\x79\x06\x80\xa3\x25\x5b\x6e\xa5\x81\x1b\x14\x9f\xee\x16\x89\xb5\x4c\x45\x84\xa7\x50\x08\xf4\x2a\x7b\x5e\x25\xac\x9a\x97\xe2\xca\xb7\x22\x52\xbc\xc2\xe3\x88\x1e\x14\x71\x77\xa3\x0c\x09\x6e\x53\x36\x37\xa6\x79\x37\x08\x3e\x09\x82\xae\xad\x65\x2a\x23\xce\x12\x8e\x64\x9c\x76\xc5\xda\x89\x1f\xe9\xde\x7d\x80\x8f\xab\x3c\x54\xb0\x5c\x59\xa7\x6d\x67\x9d\x81\x22\x8b\x78\x4e\x7a\x28\xdf\xc4\xea\x87\x42\x40\x5a\x4d\xd5\x1a\x21\xe1\x76\xc0\xe6\x0d\x5b\x7d\x89\xfb\x43\x19\x80\x60\xa4\x8c\xcc\xde\x99\xaf\x45\x5e\x70\xcd\x62\x05\x57\x8c\x15\xd4\x68\x8f\x40\x45\xe2\x51\x05\x12\x55\x91\x0f\x12\xb9\x11\x11\x13\x5a\x2b\x4d\x66\xa0\xcc\xb5\x06\x2f\x6d\x23\x4d\xae\xed\x8c\x22\xd2\xff\xac\x30\x08\x68\x14\x39\x3d\x53\xd1\x42\x3b\x55\xdf\x80\x8d\x1d\xb3\x53\x7d\x00\x3c\xd7\x0c\xe2\x73\xd6\xc7\xc6\x2c\xa3\x67\xfb\x14\x63\xf5\xeb\x55\x2a\xf4\x27\x34\xcc\x45\xab\xbb\x29\xb1\x79\x18\x6e\x4a\x6c\xb5\xf0\x6c\x76\x7e\xfa\x6a\x7e\xb5\x7c\x7f\x31\x5b\x7e\x3b\xea\x0b\xef\x84\xb1\x3b\x9b\x9f\x3d\xfc\x5f\x97\xa7\x33\xa2\x29\xff\x20\x18\x87\x79\x30\x29\xef\xfb\xf7\x33\xac\x4b\x87\x27\x57\xec\xf8\x15\xb8\xf2\xd4\x35\x07\xb8\x36\xf2\x46\xda\xf9\xac\x3b\xdc\x80\xf0\x12\x5f\xc4\xd5\xcc\x62\xdc\x07\x62\x8e\x5f\x75\xd8\x0c\x9f\x22\xac\xa1\xcf\x4c\x2d\x77\xdb\x30\x95\xc6\x77\x6c\x27\x8d\xb4\x06\xdf\xca\x7c\x5b\xf3\x9f\x6c\xff\x3a\x8e\x9a\x4b\xa5\x53\xae\x31\xce\x01\x11\xc3\xd0\xe4\x92\x26\xc1\x8a\x77\xde\xab\x51\x80\x43\xc6\x22\x91\xe6\x1a\x1e\xa9\x8e\xa0\x90\xf8\x18\x11\x1f\xcb\x59\x08\x1d\xc6\x56\x5a\x70\xb0\xad\x80\x2d\x72\x5d\xc4\xf1\x1d\xe3\x39\x75\xd5\x3c\x6b\xe6\xf6\xae\xb4\xf4\x30\x76\xa6\xc0\x5d\x52\x24\x44\xba\xc7\x19\xcf\x18\x67\xcb\xe3\x6e\xd0\xc8\x33\x9e\x09\xf7\x06\x21\xea\xbf\x3c\x26\x80\x21\x41\x5c\xda\x8f\x42\xd9\x14\x48\x43\x4d\xee\x49\x7c\xf9\x0e\xd3\x44\x19\x3b\x7e\x85\x85\x6d\x09\xcf\x26\x78\x9d\x51\xe2\xc7\xb8\xba\xcc\x3f\x4d\x26\x5b\x0f\x97\xe9\x01\x80\xbf\xb3\x7f\x85\x9c\x14\xfb\x71\x7d\x87\x38\x62\x8c\xb1\xc6\x48\x8c\x51\xf3\x7c\x32\x81\xbd\xee\x62\x71\xb9\x64\xff\x9d\x4d\x26\xda\x2e\x05\x09\xfc\xf1\x57\xa8\x60\xfe\x4f\xb3\xb3\x8b\x37\xf3\x2b\x27\x76\x5f\x66\x72\x37\xe1\x59\xe6\xd3\x85\xa7\xf6\xe5\x75\xfe\xdf\x7f\x0e\x1f\x1d\x21\x34\x18\x91\xe4\x0e\x6a\x78\x6a\x42\xf1\x6f\xd3\xa7\x92\xed\x46\x7a\xad\x54\xab\xec\x5f\xaf\x95\x1a\x25\x1f\x86\xf9\xef\x5f\xbc\x78\xd1\x33\x20\x2f\xed\x33\xe3\x16\x4e\x9e\xb9\xc3\xbe\xf2\xa7\x2d\xbb\xc2\xe5\xd6\x4f\xa1\xdd\x2c\x37\x8f\x2b\x9e\xf2\x89\xe6\xf2\x47\x8f\xf1\x6a\x04\xcd\x71\x7f\xc6\x3f\xb2\x5b\x2e\x73\xe4\xf8\xf7\x38\xee\xe5\x32\x6b\x1d\xc3\xbc\xc8\x8e\xac\x1f\x9f\xc8\xb4\xa0\x3d\x8a\xa5\x75\xc3\x59\xf2\xf0\xd3\x47\x99\xf8\x13\xac\xd0\xee\x24\x21\x53\xb9\x92\x81\xcb\x13\xd5\x97\x60\x48\xb6\x3b\xb2\xab\x03\xe8\xa0\xfc\xf6\x7d\x5b\x2b\xdf\xc5\x1d\x30\x1e\x6b\x68\xa6\x85\xfd\x5f\x67\x65\xe0\x1c\x8d\xb5\x0e\x81\x23\xf9\x4d\x2c\xcd\x96\x71\x7b\x70\x48\xc5\xca\x9a\x10\xc6\xcf\x60\x8a\x6a\x61\x54\x5c\xf8\x9f\xec\x01\x4a\xd1\x51\x7a\x52\xb5\x4c\x8a\x84\xf1\x04\x92\x60\xd4\xda\x5f\x02\xa3\x6f\x5e\x66\x24\x56\x19\x35\x3c\xc5\xcb\x16\x04\x9b\xfe\xea\xc5\xd7\x7f\x77\x76\xc4\xbe\x7a\x7d\xc4\xbe\x7a\xf1\x9a\x8a\xd7\xfd\xbe\xe0\x69\x2e\xb9\x1b\x3a\x5e\xbb\x1a\xfe\xa1\x10\x2d\x1b\x6b\x90\xcb\x08\x4e\xae\x3d\x49\xd7\x71\xaa\xad\x66\x66\x55\x33\xd0\xcd\x5e\x13\xe1\xb8\x27\xee\xe1\x94\x4d\xbe\xb2\xfe\x90\x16\x06\x38\xe6\x79\xca\x8a\x14\xef\xde\x22\xa7\x83\x72\xef\xbe\xcc\x28\xd4\x0d\xc4\xd8\xc5\x0f\x4e\xb3\x04\x43\x79\xc4\x09\xbf\xf2\x17\x18\x2b\xf6\xfc\x44\xac\x79\x11\xe7\x2f\xab\xdf\x7e\xd9\x69\x34\x6c\x00\xd9\xf3\x0b\x1e\xe9\x87\x7f\x56\x2f\xcb\x3f\xaa\x9e\x19\x88\x49\xc6\x76\x54\x5d\x3c\x16\xe2\xdd\x09\xbf\xb3\xa7\x47\xef\x32\x41\x66\xb6\x55\xad\x77\x02\x93\x1d\xa8\x0f\xfa\xdc\x25\x2c\x05\xeb\x11\xc6\x64\x7d\xb4\x1a\x72\x79\xd1\x97\x42\x6e\x57\x3c\x4f\x1a\x27\xde\xfe\xf5\xf3\x18\x1c\xbc\xd3\x17\x24\xe6\xfb\x13\x58\x1f\xbc\x83\x17\x3d\x63\x0f\x2b\xeb\xf3\x6a\x91\xfc\x15\x6c\x02\xc7\x6f\x4e\xed\x72\x0b\x6b\x6f\x23\xb6\x84\xfb\xd7\x11\x53\xf9\xd6\x15\x56\xda\xff\x91\x76\x0e\xe1\x85\xb6\x81\x81\xb0\x2d\xa8\xa2\x8b\xfa\x76\xf1\x1c\x7a\xb4\x29\xd2\x48\x99\x5f\xf9\x0c\x14\x6b\x00\xdf\x14\x5c\x47\xb0\x07\xcb\xf4\xe1\x2f\x2b\xa9\x70\x5b\xf3\x33\xf7\xc8\x1e\x1a\xed\x29\x13\xc2\x55\xc6\x5d\xf4\xdb\x67\x62\x88\x32\x57\x39\xd7\xc1\xb8\x61\x73\xf2\x76\xa0\xb3\x58\xa4\xab\x09\x6a\x77\x9f\xfb\xd7\x7f\xff\x5f\xcf\x8e\xaa\x8f\x9e\xbe\xad\xd9\xcb\x07\xaa\x7f\x83\x5f\xff\xfd\x7f\x65\x67\xb5\x4f\x91\x7a\x9b\x98\x9c\x30\x28\x51\xe1\x4c\xa4\xf6\xf7\xa4\xf1\x70\xbb\x5c\xb9\xd1\x3c\x17\x2d\xd7\x7a\x70\x9c\x56\xa9\xa8\x73\xa4\xe5\x8a\xf1\x14\x66\x06\xa5\xdc\x0a\xd4\xe4\xd5\x1e\x22\x18\x53\x74\x68\xf6\x6d\xb7\xdb\xd9\x41\xff\x71\xbe\x38\x9b\xd3\x8d\xa8\xf0\x85\x6d\x45\x44\x2c\xce\xe7\xff\xf8\x7e\x34\xdd\xc8\xf9\xf5\x59\x89\x80\x43\x41\xe9\x13\x2d\x79\xd2\x05\xf8\x4f\x37\x82\x40\xa2\x8b\xc0\x08\x5d\x4b\x10\xe8\x90\xe7\x5e\x41\x2d\xb0\x51\x45\x71\x0e\xd2\xc6\x6e\xb7\x42\xe3\x59\xbe\xca\x56\x70\x37\x7f\xd2\x40\x14\x2f\x27\x8b\x37\xfb\x6d\xb2\x5e\xa4\x5d\x1b\xab\xb4\xf8\x5a\x56\x02\xa2\x8a\x57\xb5\xb0\x1d\x5d\xc8\x15\x64\x57\xb9\x30\x82\xf9\xc0\x9e\x6f\x44\x2a\x34\xac\xe6\x72\xcd\x54\x22\xf3\x8e\x4d\x98\x16\x3c\x2e\xcd\xe5\x5c\xdc\xb2\x0b\x87\x86\x4c\x0e\xca\x8e\x33\x23\xd2\x2d\x71\x1d\x6f\x45\xa4\x5d\xf3\x66\xa7\xa0\xe2\x97\x68\xad\x6a\x55\x4f\xcc\x88\x7c\x8a\x75\x54\xf7\xf7\xd3\x37\x6a\x23\xd3\xa5\xcc\x3e\x7d\x7a\xc6\x5c\x82\xdd\xec\xe2\xd4\xfd\xc1\x9e\xaa\xf0\xfa\x8a\xa7\x65\x7b\xca\xeb\x3b\x17\xe9\xd6\x6e\x40\x98\x70\x16\xdb\x97\x6c\xd5\x96\xf7\x01\x91\x22\xb4\x16\x0d\xad\x48\x7d\x82\x61\x18\xc8\x58\xf6\x22\x09\x67\xee\x5c\x41\x35\x58\x7b\xff\x7c\xb5\x45\xae\xe0\x62\x25\xe8\xc7\x13\x74\xc3\x0b\x07\x8b\x83\x14\xb5\xa0\x7d\x87\xc9\x19\xc4\x90\x0c\x5b\xab\x22\x05\xaa\x13\x48\x41\xc4\x60\x64\xb7\x71\x25\x3d\x10\x16\x78\x07\x85\xe1\x22\xa9\x49\xe9\x50\xee\xf4\xf6\x28\xaa\x49\xa7\xc5\xf9\xaa\x6e\x5f\xe7\xdd\x67\xbe\x27\x0e\x08\x18\x6f\x48\xe1\x55\x3e\xd0\x10\x8b\xab\xe3\xee\x00\xbb\x31\x9f\xd1\xb0\x5b\x01\xe4\x20\x11\xf9\x81\x81\x6c\xce\x78\x9c\xfb\x6c\x38\xa8\xc8\x5f\x0b\x99\x53\x9f\xac\x2a\x2f\x82\x07\x58\xed\x63\x12\x4c\xa4\x2b\x95\x76\x2d\xcd\x56\x6c\x96\xc5\x02\xc2\xfb\x1b\x2d\x36\x90\x19\x58\xce\x7d\xd0\x35\x65\xc7\x58\xd0\xac\x45\xae\xa5\xd8\x09\xfb\xac\xa1\xbe\xdb\xa5\x9f\xe9\x6f\x02\x81\x9e\xcb\x21\x55\xe1\x64\x5b\xd5\x4a\xbb\x48\x0b\xe1\x76\xa5\x9d\xf1\xae\x7b\x18\xa0\x61\x49\x96\xba\xd7\x96\xd2\x87\xa4\x10\xe5\x5e\x34\x65\x6d\xaf\xb6\x7b\xd9\x6a\x5e\x38\x05\x5b\x0e\x77\xdc\x0f\xe5\x0b\x67\xa9\x6b\x92\x14\x11\xdc\xb5\xd2\xeb\x92\xd2\x1b\x4c\x93\x85\x8c\x07\x1f\xca\x46\x26\x13\xfb\x9d\x3a\x6e\x8b\xbd\xb5\xb6\xd6\xae\xc7\xf0\x7a\xae\x80\xd8\x0f\x64\x9b\x56\x7d\xcd\x55\x76\x5f\x90\x7d\x21\x28\xab\xb3\x7f\x4a\xd3\xdd\x7b\x85\xcc\x78\x95\xda\x51\x7d\x51\xc5\x7e\x67\x3a\x85\x77\x99\xf9\xe4\xd6\x79\x93\xf8\x53\x9a\x44\xcf\x87\xbe\xf9\xdb\x6f\xdc\xe0\x77\xdf\x65\xf4\x90\xe5\xac\x69\x4c\xb9\x12\xd3\x6b\x65\x2d\x87\x64\xc8\x8a\x09\x39\x0f\xf5\x44\x92\x21\x2b\x7e\x99\x20\xd6\xdf\x07\xb8\xed\x18\x62\xba\x4b\x39\x11\xe9\x8e\xed\xb8\x96\xfc\xc6\x6e\xea\x10\x2c\x82\x34\x70\x23\xba\x5d\x0d\x0e\xad\x1e\x7e\xda\x09\x70\x36\x78\x72\x23\x61\xe9\xad\xa5\x93\xc0\xea\x53\xf9\x20\xfd\xd6\x34\x93\x4c\xfa\xac\xa8\x06\x34\xc8\x21\xa9\x9b\x10\xb8\x40\xa4\xfa\x61\x89\xa9\xb4\xca\x0e\xc1\x75\xb2\xf4\x21\xae\x00\x5e\xfa\x85\xe7\xce\x01\x33\xc4\x2b\xfa\x20\xee\x6a\xb4\xe0\x65\x28\xb0\xa2\xee\xf6\xe5\x66\x03\xb6\x36\x8e\x69\x56\xfb\x87\x60\xf2\xa2\x95\x54\x33\xc4\xf0\xaa\xf1\xef\x84\xab\x66\x71\x6e\xe6\xe7\xed\x52\x9b\xde\xea\x13\xfa\x5c\x3d\xae\x32\x1b\x07\xcc\x8a\x5c\x66\xea\xc0\x39\x31\x48\x7e\x29\x77\x80\x2b\xf7\x44\xfb\xe6\x13\xed\x92\xe3\x9c\x14\x7c\xbc\xe7\x30\xd8\x65\x18\xbd\x1d\xf5\xba\x1d\x2e\xaf\x97\x1b\x23\x37\x69\xdf\x69\x23\xb0\x41\x6e\xe8\x8b\xfd\x4a\xec\x80\x97\xec\x65\x0e\x99\x3b\x2e\xad\xef\xa9\xb7\x87\x2a\xa7\x8f\x0f\xde\x1c\xaa\x14\xc3\x70\x95\x3e\x6c\x6f\x08\x73\x0a\x07\xed\x0c\x90\xfb\x5e\xa5\xab\x3c\xf5\x78\x34\x12\x53\x7c\x7a\xfb\xd0\xa1\x81\x5c\x1a\x9f\xd9\xf6\xd4\xb6\x95\x59\x6b\xf5\x9c\x99\xa1\xb6\x61\xfd\x63\x0d\xd8\xe3\x00\x44\x83\x73\x55\xe1\xef\x0c\x99\xe3\xd5\xc3\xfd\xb3\x3c\x87\xd3\x28\x10\xb6\x56\xd1\x91\xe3\x57\x10\xe6\xa9\x2f\x1f\xb1\xda\xd8\x87\xa8\x08\x3a\x24\xc1\x21\x0c\x06\xe4\x88\x85\xd1\x96\x7d\x79\x78\x79\x1f\x26\xd0\x91\x47\xb1\x1c\x50\xfa\x94\xce\x45\xc4\x80\x49\x16\xe8\x25\x47\x0e\x60\x0e\x70\x76\x12\x6f\x44\x72\xfe\x41\x40\x1e\x11\x5c\x94\x90\xa1\xb9\x9c\xbf\x64\xd2\x18\x77\x2f\x17\x89\x44\xb9\x08\x51\xa6\x8a\x15\x35\xa0\xe5\x7d\x54\x19\xa0\xef\xb9\x5d\xaa\xc1\x16\x10\x77\x21\x8b\xdf\x8d\xea\xee\xe2\x62\x79\xba\x38\x27\x39\x5c\x17\x17\x0f\x7f\x7e\xf8\x9f\x73\x8a\xad\x75\x71\xf9\x9a\xcd\x4e\xce\x4e\xcf\xa9\x54\x28\xfb\xdb\xe9\xd5\xf2\x72\x76\xb2\xb8\x64\x27\x33\xb6\xb8\x7c\x3d\x3b\x3f\xfd\xe3\xec\xe1\xcf\x0f\xff\x63\xd1\x23\x93\xb2\xa9\x5b\x68\x97\xa5\xd7\x27\xa7\xcb\xc5\x25\x25\x16\x7f\x1d\x61\xe5\xd9\xec\x7c\xf6\x7a\x4e\xc9\x7b\x3d\xbf\x9c\x9f\x2f\xe7\xc3\xe5\x51\x37\x0c\x41\xeb\xff\x39\x27\xc8\x79\x6d\x73\xf2\x1d\xd6\xda\x53\xe3\x03\xd5\xea\xec\xd9\x64\xc2\xb3\x0c\xd2\x7a\x0c\xe5\x8e\xf4\x09\x48\x55\x99\x76\xf4\x2c\x00\xdd\x03\x7a\x64\x8f\xd4\xc5\xb3\x2c\xc8\x8f\xab\x10\x88\xf2\xad\x60\xcf\xf0\xf8\xf6\x8c\xf1\x3c\xd7\xf2\x86\x4e\x5a\xeb\x33\x24\xe3\xf9\xf6\xd0\x4e\xd8\x11\x38\xb4\x6d\x90\x6d\x76\xb0\x08\x77\x03\x8d\xb9\x57\x8f\x7b\x1f\x4e\xc4\x23\x06\x03\xcf\xed\x13\xf0\x23\x0e\x94\xc1\x0f\x6c\x77\xa8\x3e\x3d\xb2\x1d\x59\xb8\xb3\xe8\x8f\x99\x2c\xf4\xc6\x55\xd3\x27\x22\xcd\xc7\xdd\x1b\xd9\xb6\x58\x28\x88\x1f\x81\x09\xcb\x89\x82\x0b\xfc\x21\xd6\xc1\x85\x9a\x95\xf3\xf0\x73\xc2\xc2\x3b\xf7\xde\xda\x22\x6b\xc5\xfd\xfd\x74\xa1\x37\xee\x38\xc7\x63\x2d\x78\x74\x87\x30\x55\xd4\xb6\x34\x6b\x44\x80\x6a\x12\xbe\x7f\xf8\xc9\x81\x5c\x0d\x54\x59\x87\xdc\x82\x6a\x68\xfc\x37\x16\xa6\xc8\x1b\x92\xcc\xbb\xd3\x8e\x00\x6d\xab\xc1\x59\x0c\x05\x2b\x40\xf2\x7b\x90\x85\x94\x77\x33\xd4\x1a\xc2\x89\x59\xe8\xcd\xe8\x19\xd4\x57\xec\x38\x6c\x0e\x97\x52\x6a\xb7\x5e\xb6\xbf\x78\xdf\x30\xd2\x2a\x69\x9d\xbc\x35\x00\x1a\x64\x19\xa2\xcb\x41\x49\x03\x5f\x21\x42\x15\x20\xd0\xb9\xaa\x09\xb8\xb1\xfb\x98\x0b\x9d\xf2\xd8\x31\xdf\xe7\x77\xde\x17\xa6\xb2\x12\x08\xc5\x3b\xa1\xb5\x8c\x44\x09\x73\x17\x61\xf2\x8e\xf3\xc1\x01\x51\x79\xd5\x71\x9d\x7e\x55\xdc\x98\x5c\xe6\x48\xf5\x1d\x40\xd0\xd5\xb0\x98\xf7\x6e\x49\x58\x86\xa9\x3b\x23\x6d\x2a\x11\x09\x3e\xa7\x69\x41\x99\xed\x30\x2b\xb5\x80\x6c\x21\xeb\x99\xe6\x5b\xd1\x48\x95\xf3\x6b\x93\x48\x77\x52\xab\x14\x2e\x04\xf9\x3a\x17\x9a\xad\x54\x76\x37\x71\xd5\x9e\x2b\x95\x64\xb1\xa0\x73\x4f\x83\xae\x70\xa6\xc5\x5e\x5a\x6c\x6d\xf5\x4a\x55\x78\xc8\xf2\x2b\x19\xe3\xd9\xc3\x5f\x0d\xa6\x94\xae\xe2\xc2\xb8\xae\x06\x56\xb4\x77\x73\x74\x09\xc7\xc5\xfc\xfc\xe4\xf4\xfc\xf5\xb8\x36\x8b\xcb\xe5\xc8\x06\x57\xa7\xd6\x13\x1f\xd7\x88\xcb\xa8\x5e\x60\x41\x34\xbf\xd8\xab\x97\x30\x2c\xe3\x1b\x2a\x9f\xea\x82\x6b\x9e\x88\x5c\x68\x28\x8d\xfe\x87\xab\xd1\x66\x19\xac\x34\xad\xcb\x00\xc8\x56\x48\xb3\xb3\xef\xbc\x8a\xa7\x97\xd3\xc8\x1f\xc6\x31\x60\x41\x75\x85\x1b\xc3\xb5\x15\xef\xf0\x87\x0c\xe2\xd0\x83\x06\xbc\xa2\xd7\x12\xcf\x5e\x65\x40\xc3\x9f\xd7\xb1\x98\xac\x3d\xf6\x7e\x78\x57\x82\xd8\xcf\x2f\xd6\x95\x20\x4e\x44\xbe\xd3\xce\xe4\x94\x2b\x3a\x2f\xc5\xb7\x64\x3b\x57\x56\x05\x2b\x41\xb9\x19\x26\x3c\x5f\x6d\xc9\xbd\xd0\xb7\x29\xd3\xdd\x21\x01\x06\xf7\x41\xc0\xd3\x36\x99\x4a\x29\x80\xb5\x0b\xac\x55\xd0\xfd\xf5\x2b\xc7\xe1\x7a\xd8\x5b\xc3\x52\xca\xb5\xcb\xdb\xe7\x94\x3d\x52\x6c\x87\x44\x70\x84\xe2\x58\xdd\x42\xf8\xa5\x2a\x8b\x19\x86\x18\xb6\x28\x37\x0c\x18\xf8\x87\x9f\x59\x26\x74\x22\x73\x89\xc9\x24\x61\x1d\xd1\x20\x04\x31\x30\xc9\xa1\x19\xd1\xc5\x18\xcd\xa7\x68\x51\xb9\x43\x19\xf6\x1b\x20\x60\xb1\x58\xff\xe0\x47\x89\xf9\x33\x7e\x2f\x42\xf4\xd7\xdc\x04\x7b\x53\xef\xb6\x79\x4c\xee\x95\x8e\x37\xa1\x09\x31\x6b\x95\x46\xf0\x31\xa6\xb9\x78\xf8\x37\x07\xdf\x5a\x6f\xd7\xdd\x99\x5a\x47\x7c\x1f\x46\x9b\xa7\x8a\xd0\xa4\x6e\x8d\x7e\x90\x60\xed\x88\x00\x7f\xee\xa6\x25\x08\xac\x8b\x98\xdc\x93\xbb\x15\x94\xd4\x12\x83\x7a\xd1\x4d\x44\x01\x32\x21\x1e\x80\x70\x4c\x37\x8e\x83\x00\xc3\x03\xbe\x30\x2c\x24\x07\xcc\x95\xcb\xfc\xb8\xab\xbe\x2b\xfb\xc7\x1b\x49\x06\x38\x3f\xb7\xea\x22\x7d\x84\xf2\x5c\x39\x37\xd7\x49\x1d\xbc\x08\x15\x86\x7b\x2c\x3b\x27\x40\xae\xb8\x1e\xb0\x2c\x09\xbd\x56\x3a\x01\x3c\x66\xeb\x9a\x31\xc7\x57\xa0\x4a\xf4\x38\xc1\x6e\xb7\x02\xd2\xc3\xb9\xeb\xa4\x83\x53\x89\xfd\x31\xd0\x4e\xe6\x54\x91\x05\xc9\x1e\x4c\x06\x8b\xb5\xc3\x65\x1f\x55\x1a\x7f\x05\xe4\xb2\xe6\x34\x33\xa2\x5a\x7a\xdc\x11\x0d\xca\xad\xb1\x6a\xd3\x9d\xd6\x88\xfe\xc4\x3c\x6d\x1e\x19\xfd\xaa\x5b\x5d\x31\xba\x53\x97\x73\x91\xc8\xc5\x11\x53\x97\xc3\x93\xa2\x9b\xc6\x2d\xb7\x96\x9d\xcb\x62\x8c\x78\xa8\xee\x51\xfb\x4f\x67\x41\x15\x06\xeb\x8c\xc9\xfb\xc5\x59\xb9\x83\x69\x19\x94\x47\xda\x07\x6b\x65\x9b\xf8\xb1\xd6\x6c\x11\xa5\x6a\x3f\x3f\xdc\x7e\xe7\x98\x3c\xde\x33\x56\xad\x62\x53\x2c\xe2\x37\xa6\x90\x64\xae\x38\xe0\x96\x40\x05\xd9\x46\xd3\x25\x1b\x56\xe8\xcb\xf6\xae\x76\x38\xb8\x44\x0b\x52\x83\x09\x42\x0b\xec\xe6\xce\x03\xbe\xae\x0a\xa0\xd9\xe8\x3f\x56\x3b\xaf\xba\x8c\x23\x48\xc3\x32\xd5\x9a\x65\x65\x17\x90\x87\xbf\xd8\x0f\x82\xb2\x06\x80\xdb\x57\x5b\xa5\x8c\x60\x42\xe2\x67\x68\xb7\x7b\xfb\xcd\x45\xd2\xc0\x7f\x4f\xd9\x37\xca\x3a\x17\x90\x08\xc7\xb5\x40\x1a\x1d\xd8\xc8\x73\x5c\x53\x6e\xec\xcc\x35\x6e\x75\x83\xd4\x6d\x47\x45\x95\x70\xfa\x00\x3f\x37\x2b\x15\x6f\xb9\x77\x09\xb4\xfd\xf0\x22\x61\xb8\x3d\x7e\x73\xed\xf2\xe2\x6a\x2e\x43\x86\x8e\x2b\x4f\x6e\x10\x3c\x29\xc8\xaa\xfb\x57\xe1\x40\x83\x4c\xa2\x3c\x74\x1e\x11\xe9\x70\x9d\xc6\xbb\x22\xc6\x37\xbc\x1b\x3d\x41\x38\xf0\x84\x54\xed\x00\x52\x82\x0a\xa0\x34\x40\xf0\x31\x81\x9d\xaf\x6a\xe5\xe6\xe1\xcb\x6d\x86\x9f\x07\xc7\xde\x4a\x18\xfb\xb0\xac\x1c\x0b\xcd\x9b\x13\xe0\xe0\xc0\x1c\xc2\x81\xb0\x9e\x72\x02\xeb\x9e\xe0\x93\x9d\x52\x10\x28\x24\x76\xbd\xb6\x5f\x7c\x1c\x93\xf7\xea\x8e\x05\xa6\x3c\x8f\xfb\x10\x02\xb6\x23\x2f\x32\x9d\x2a\x28\xe8\x2c\x39\x63\x5a\xe3\x67\xe4\x0a\x93\xba\x1e\xed\x51\xcf\xec\xc7\xd0\xc6\xdb\x20\x4d\x19\xdb\xcc\xf9\x07\x41\x46\xcc\x7a\xad\xf8\xfe\xe1\x27\xb8\xda\x85\x0d\xb9\xd3\x0e\x2d\x32\x05\xc6\x44\xec\xdd\xdf\xd4\xd0\x26\xde\xfd\x4d\x23\xd0\x7a\xc4\x32\x9c\xbd\x85\x11\xbe\x26\x07\x29\xc9\x48\x3b\x6b\xf5\x15\x21\x44\xa5\x48\x95\xc3\x84\xdd\xd7\x5a\x05\x67\x31\x55\x03\x8a\x74\xa0\xcb\xe4\x47\xe5\xba\xf2\x43\x21\x8c\x5d\x6c\xdc\x16\x62\xdd\x27\x7d\x17\x80\x50\xd8\x3d\xf8\x4e\x15\x9a\x2d\xae\xc8\x9b\xeb\x45\x69\xa4\x51\xb1\x5c\x41\xb1\x61\x6d\xf3\xb8\x91\xa9\xc3\x40\xab\x81\x91\xc1\xa6\x6c\x44\xc1\xae\x16\x14\x5b\xc6\x45\x83\xeb\xc8\x3b\x00\x21\x72\x43\x91\x4a\x0f\xb7\x43\x0f\x2b\xf5\xda\xed\x2b\x8f\x84\x29\x31\x77\x42\x54\x87\xee\xb1\x6b\x4a\xda\xdd\xdf\x4f\xdf\x0a\x6d\x00\x24\xba\x6e\x61\xaf\x7d\x17\x84\x75\x75\x99\xb2\x22\x72\x1a\x60\xa5\x07\xa2\xb6\x6b\x60\x1f\xfe\x04\x22\x50\x87\x07\x62\x12\x81\x02\xe4\x36\x4e\xaf\x95\xb7\x3b\xec\xf8\xea\xc9\x68\x9a\x87\x57\xce\xd2\xc0\xf1\x1d\x76\x72\xb5\xe6\xb4\xba\xe0\xc3\xfa\x6c\x3f\x77\x4e\xfa\xdf\xf4\x28\x68\x99\xe6\x50\x62\xe2\x3e\x21\x16\x49\xbe\x49\x95\xc9\xe5\x0a\xdc\x2e\x93\x47\x34\xd6\xcf\x69\x92\x69\x99\x48\x8d\x8d\x1e\xfe\x6a\x5b\x21\x2c\xa1\xff\x80\xca\x48\xaf\x55\x91\x72\x66\xf8\xc3\x5f\xc0\xce\x8e\x78\x2f\xda\xa4\x8a\x9c\x71\x16\xc3\x95\xcb\xda\xd5\xaa\xd8\xed\xb8\x71\x18\x6f\x9c\xbd\x79\x89\x1f\x55\x9e\x3c\xdd\xad\x6e\x03\xeb\xf8\x64\x3e\x63\x37\x7c\xf5\x41\x90\x4e\x6f\xd9\x39\xeb\x37\x59\x3b\xea\x00\x97\x10\x9e\x68\x9c\x8a\x55\x75\x34\x77\x55\x66\xfe\x9c\x5c\x79\x5a\xe5\x2f\x59\xd6\xc8\x70\xb5\xcb\x16\x5a\x64\xad\xeb\x1a\x1b\xdb\x81\x1d\x7e\x4e\x7d\xc6\xc3\x91\xc7\x74\x8c\xb5\xba\x89\x45\xc2\xb4\x48\xd4\xce\x0e\x4f\xa4\x6e\x53\x84\x53\xf6\x6b\xa8\x75\x4d\x44\x12\x84\x33\xc8\xf5\xd3\x09\xe3\x8c\x2b\x14\x28\x00\xbe\xca\x2d\x9a\x0c\x9e\x5e\x0b\x0d\x9e\x9a\x75\x1f\x9d\xaa\x06\x9f\xa4\x55\x46\x2e\xa3\x5a\x01\x18\x9c\x3b\xa9\xd9\x05\xff\xe6\x8e\x41\x66\x5d\x8c\x5e\x36\xfc\xe7\xa7\x4f\x53\x36\xff\x28\xcb\xba\x69\xe0\xf0\x93\xf9\xb1\x8a\x3a\x3c\x75\x14\xad\xd8\xda\x39\x8d\xd6\x4a\xcc\xe5\x6a\x11\x9e\xae\x84\xd6\x7e\x99\xad\x8b\xa7\x0c\x07\x6c\xf7\x36\xa0\xf7\xaa\x04\xab\x22\x6c\x40\xd8\x33\xc4\x6a\xc7\xfb\x46\x16\xab\x74\x23\x74\x95\x48\x54\xd2\x2a\xe1\x50\x33\x89\x28\xe9\xb9\xdd\xf6\xac\xcf\x4a\xae\xd1\x5a\x65\x5a\x8a\x88\x3b\x56\xa0\xa6\x35\x41\xc6\x6c\xaa\x42\x0e\x09\x63\x2a\x00\x4c\xbf\xe2\x01\x10\x9a\x29\x60\x19\x8c\x80\x03\x35\x51\x3b\x3e\xe1\x4c\xb0\xdc\x95\xf0\xf4\x78\xc5\xdd\x77\x69\xe0\xcb\xae\x04\xc9\x74\x75\x51\x68\x97\x53\x88\x47\xc6\x80\x86\x03\xfb\xd3\x05\x58\x97\x64\x8e\x4c\x30\x3c\x4e\xef\x37\x1f\xaa\xb8\x76\x10\x1f\xad\x77\xaf\x35\xa1\x16\xd0\x4a\x3c\x31\xb5\xd2\x0c\xb8\xc5\x7c\xbd\x11\x54\x4c\xa3\x07\xe5\x70\x28\xa9\x93\x4b\xba\x73\x11\xfc\x54\xed\x94\xe7\x70\x43\x0a\x5a\x55\xd8\x39\xbf\xd2\x2a\x85\x03\xbe\xaf\x33\x42\x74\x00\xbf\x72\x81\x93\x96\x92\x9e\x2e\x9a\x69\x64\xba\x89\x31\x18\xfa\x1c\x3e\x44\xc7\x49\x8b\x6b\xbb\x9f\x5a\x54\x09\xac\xb3\xb1\xb4\xab\x48\xd8\xc3\xbf\xa5\x76\x05\x05\x81\xd6\x1a\x6b\x2a\x2e\xc4\x95\xb0\x27\x30\xa8\x01\xbe\x04\xda\x4b\x2c\xa7\x3f\x4d\x6e\xd8\x37\xd7\xa7\x6f\x4e\x2e\x66\xc7\xbf\x7b\xef\x91\xa2\x56\xec\x78\x71\x76\x36\x3b\x3f\xb1\xff\xf0\x31\x3a\xfb\xdf\x6b\x56\x03\x69\x03\x54\xa9\x48\xad\x3e\x08\x3d\x91\x09\xdf\x08\x76\xb2\x38\xfe\xdd\xfc\xf2\xfd\xe9\xd9\xec\xf5\xfc\x3b\x54\xfc\xa7\x89\x64\xb5\x1a\x6f\xdb\xea\x03\x3b\x39\xbd\xfa\x9d\xfd\xaf\x84\x21\x7a\xdb\x77\x7b\xb8\x55\xf6\x2f\x19\xf3\x7a\x0c\xbb\x5a\xce\x8e\xa1\x49\xce\x96\xa7\x67\xf3\xc5\x35\x3c\x51\xb0\x6f\xe7\xb3\x37\xcb\x6f\xdf\x1f\x7f\x3b\x3f\xfe\xdd\xfb\xe5\x1f\x2e\x10\xec\xaa\x4a\xc8\x61\x97\x8b\xeb\xe5\xfc\xbd\x07\xbe\x02\x93\xc2\xfc\xa9\xef\xdc\xbf\xfd\x88\xf9\x7f\x83\x04\xff\x0f\xb8\xac\x45\xc1\x98\x78\x84\xbf\x96\x40\x5a\xf0\x4e\x92\x22\xce\x65\x86\xef\xc4\x34\x09\x8b\xdd\x7b\x58\xad\xf1\x15\xec\x0f\xe6\xb8\x28\x67\xaf\xbe\x81\x13\x31\x92\x76\x4f\xf5\x90\x73\xee\xab\xe8\x8e\x2c\xff\xfe\x7a\xb1\x9c\x8d\xb2\x16\x48\xc6\xd8\x09\xe4\xee\xc2\xc1\xf8\xfe\x7e\x0a\x7f\x1b\x97\x09\x83\xc9\xbf\xa5\x1b\xb6\x72\x5c\x2c\xa1\xa4\xbe\x8c\x18\xb4\xc4\x2e\x2d\x90\xf1\x8e\x68\x57\x40\x8e\x1f\xdf\x95\xf8\x24\x4a\x6f\xd8\x73\xf1\xd1\x03\x27\x41\x9e\xaa\xc2\xa4\x27\x2d\x4c\x11\xe7\xe8\xbd\x81\x04\xa4\xa7\x5e\x97\xd9\x06\x80\x85\x4c\xad\x02\x40\xc6\xc6\x1d\xfc\x26\xe6\xd0\x73\xf6\xf0\x7f\x37\x02\x19\x5a\xac\x1e\x7e\x4e\x26\x88\x63\xc2\x9e\x73\x06\xa6\xb8\xbb\x77\x63\x38\x53\x99\x7f\xd0\x1a\x03\x0e\xba\x13\x57\x1f\x1b\xe7\x99\x12\xcb\xc8\xa0\xa1\xe8\x2a\x9b\x6c\xed\x0d\xaf\x02\x35\x61\x3f\x08\x97\x0d\x6d\x68\xbc\xc3\x41\x21\x8c\x59\xeb\xeb\xef\x0d\x5b\x5c\xce\x7f\x7f\x3d\xbf\x5a\x52\xd9\x3f\x57\x8b\x37\xa7\xc7\xa7\xcb\xce\x2c\xd7\xcb\xf9\xd5\xfc\xf2\xed\xfc\xe4\xbd\x5b\x57\x16\x97\xcb\x71\xb8\x15\x97\xf3\xab\x8b\xc5\xf9\x15\x89\xb0\x01\xbf\x5f\x2d\x67\x94\xfe\x05\x40\xea\x91\x11\xb3\xeb\x73\x97\x84\x4a\xb1\xb9\x80\xdd\x94\xc9\x97\x8b\xe5\x8c\xc8\x7f\xc5\x76\xa4\xd5\xb6\x21\x69\xb2\x5f\x81\xc7\x0d\xd4\xf5\xf9\xf9\xd8\xa4\x90\x4b\xc1\xa3\x09\x20\x60\x3a\xac\xe5\x1c\x2b\x44\x65\xba\x56\x0c\xc9\xe8\x91\x69\x9b\x1a\xbf\x19\x7a\xce\x1e\xd6\x32\x16\x32\x2f\x5c\xad\x15\xb0\xc4\xb8\xf8\xab\x75\x1f\x63\x5e\xa2\xec\x37\x82\x91\xe4\xd0\x0b\x1e\xc7\x77\x2c\x12\xb1\xc8\x05\x53\x3a\xdb\xf2\x54\x44\xae\x96\xf2\xb7\x63\x3b\xda\x21\x0a\x7d\xe1\x24\xa3\x99\xe2\x6c\x7b\xec\x22\x2c\x2f\xf6\x78\xe5\x11\xfa\x1f\xfe\xaa\xd7\x0f\xff\x5c\x17\x32\xc0\x06\x77\x2d\x74\xa6\x22\x11\x23\xe5\x62\xf9\x4f\xbf\xce\xa7\x11\x13\x3b\xa1\xef\xf2\x2d\xb8\x74\xc6\xa8\x95\xac\x20\xa1\x64\x4e\x0d\xc1\xbe\xb1\xaa\x47\x95\x60\x79\x11\x61\x50\x58\x98\xdc\x6e\x72\x5e\x5d\xa4\x18\x67\x22\x16\xbf\x7d\x92\x3e\x3d\x99\xc5\xdd\xe6\xb8\x1b\xa3\x96\xca\xbe\x1a\x0f\x1a\x82\x0f\x65\xee\x52\x6a\x11\x47\xfb\x17\x48\x39\xd8\x71\x2e\x6e\xf7\x7e\xfa\xed\xbb\xe2\xc5\x8b\xbf\xa5\x56\xfb\xaa\x43\x09\x22\x15\xf5\x99\x12\x05\xb7\x69\xad\x96\x78\xa2\xe6\x2e\x5b\xba\xc6\x24\x2b\xf4\x66\x1f\x80\x69\xff\xdc\x83\x83\x72\x1c\xab\x22\x62\xaf\xec\xf1\x54\xdf\xf5\xbf\xb5\xd8\x9e\x6c\x74\x67\x89\x65\x43\x4b\xa4\x9a\x3a\x86\x1b\xef\xeb\x2e\xf7\xaf\x55\x1f\x61\xbb\xda\xaf\xd0\xdc\x13\x3f\xd8\xe8\x95\x90\x3b\x08\x2c\x56\xdc\xdd\x2b\x4f\xc1\x9d\x3b\x1e\x68\xca\x4f\x20\xa9\xba\xb5\x58\x89\x1b\x89\x01\x26\x52\x31\xa6\x80\xb9\x44\x94\x67\xc6\x13\xaa\xdc\x58\xbf\xd7\x0a\xe6\xab\x9c\x15\xc6\xdf\x2c\xc5\x3c\x17\x26\x07\xdf\x56\x44\x01\x34\x0c\x84\x13\xaa\xdf\xc3\x3c\xb2\xe7\x65\x81\xda\x51\x55\x1c\x2d\x81\x88\xcd\x1c\x85\xa0\x9c\xc0\x56\x73\xc4\x44\xbe\x9a\x8e\x83\x3a\xba\x84\x48\x83\xdc\x89\xf8\xce\x47\x38\x2a\x6e\x09\xa4\x83\x93\x71\xe4\xd8\xa0\x4d\xcb\x3b\x07\x76\xcd\x1b\x6e\x44\x79\xc2\x4b\x38\xc0\x79\xbb\x48\x27\x9e\x96\x1b\xa5\xdd\xe4\x3c\xc1\x68\x96\x76\x46\x61\x48\x83\xd5\x0a\x6e\x99\x32\x8e\xf8\xd9\x4c\xd6\x32\xde\x62\x76\xce\x0d\x4f\x31\xe4\x57\xd2\x2d\xd7\x8d\xb4\xc7\xd7\x35\xff\x51\xe8\x30\x64\x6a\x37\x4b\xc8\xfc\xd9\x2f\x22\x3f\x60\xb0\x2a\x48\xee\x7f\x2f\xa3\x46\xae\x10\xbf\xf0\x20\xba\x81\x6b\xf2\x08\x51\x09\x5c\xbe\x7f\x4d\x34\xb1\xea\xb6\xab\x47\x91\xa3\xa2\x51\xb1\x5b\x0c\x30\xef\xbc\x57\x1b\x67\xeb\x22\xad\xf8\x0c\x2a\xf6\xaa\x22\xe9\x01\xdb\x2f\x35\x17\xda\x71\x8e\x39\xc5\x5d\x14\x11\xa1\x62\xb8\x4d\x88\x04\xbb\xbe\x7c\x53\xc5\xb1\xbb\x75\x01\xc5\x5e\x00\x90\x85\xf7\xd8\x32\xa5\x0a\x5b\xbc\xba\x92\x79\xc8\x5d\x44\x43\xbe\x46\x03\x18\xab\x5b\x73\x5a\x2b\xa5\x1d\xd0\xbb\xd6\xfa\xd9\x3e\x1d\xd6\x53\x7e\xe4\x2b\xdc\x23\xdc\x19\xf6\x22\x9b\x85\xdd\x76\xab\x7a\xcb\x75\xb8\x0b\x36\x51\x8c\xec\x21\x5c\x35\xeb\x47\x7e\xed\x26\xa2\xdd\xe9\xec\x7f\x78\xcf\xd3\xd8\xbf\x1c\x63\xb2\xd5\xb5\x11\xba\x2b\xaa\x89\x5d\x4b\xc1\x51\x6c\x2f\x43\xae\x19\x17\xed\x03\x2c\xed\x33\x0f\x35\x8c\xf4\x13\xbd\x61\x26\xa4\x26\xb7\x19\xda\x3d\x70\xf0\xca\x82\x92\x64\x3b\x5a\x50\xf5\x71\x7f\x3f\x45\xd0\x02\x94\x14\x8c\x18\xfe\x79\xa1\x37\xf5\x31\xc3\x3f\x83\x49\x8f\x19\xb5\x72\x42\x54\x46\x05\xe4\x19\x7b\x66\xb5\x8d\x56\xdd\xc0\x60\xbc\xea\x26\xfe\x32\x23\xf6\xef\x65\x60\x0e\xee\xbd\xbb\x16\xbe\xbe\x7c\xf3\x74\x5f\x97\xd5\x9e\xf6\x5c\x18\x84\x63\xe1\xb9\x94\xd1\x88\xcf\xf0\x15\xd5\x0d\x1a\x33\x24\x07\x74\xa0\x43\x05\x84\xb4\x79\xe5\x49\x92\xa2\x53\x95\x20\x43\x44\xf0\x6c\xb7\xcc\x81\xbe\x4b\x20\x78\xb0\x03\xd1\xd0\xd0\x43\x81\x16\xe8\x18\x47\x7c\x56\x29\xea\x08\x35\x86\x3d\xe8\x84\x34\xf1\xd2\xba\x7d\x80\x4a\x58\xc7\x8e\xef\x05\xd1\x7c\x73\xb5\x3e\x0f\xc0\xfd\x02\x99\xee\x2e\xab\x3e\xd1\xcb\x43\xf9\xe7\xfd\xf6\xc0\x5c\xbc\xae\xdb\x33\x21\x38\x8d\x7f\xc1\xaf\xcf\x0d\x48\x85\x35\x89\xc1\x82\x6f\xfc\xbf\x9b\xe3\xd3\xf8\x61\x60\x67\xfb\xc4\x07\x7d\x6f\x51\xd0\x6d\xfa\xde\x7b\x6a\xbe\xcb\x83\x5e\x50\xe7\xd0\xef\xbf\xaa\x43\xc6\xbc\xbe\x74\xb8\x91\x19\xd8\x87\x41\x83\xbe\x0f\x1a\x56\xd3\x31\xa4\x17\x03\xbb\xb0\x17\xd6\x68\x06\xb9\x3e\xbb\xc3\x18\xf4\x9b\x0e\xb6\xec\x07\xbc\xbe\xac\xb7\xe8\x47\xcd\xf7\x77\x11\x47\xa1\xb8\x6a\xd0\x82\x3f\xb6\x0d\xd9\xe1\x63\x13\x74\xa4\xa1\x3c\x1c\x9b\xe0\xcf\xdd\x23\x33\x76\x00\x32\x35\x24\xcb\x37\x3c\xff\xd2\x92\x74\x6e\xca\x62\x8e\xab\xab\x6f\x31\xe9\xb5\xcc\xbe\xeb\xdb\xce\x62\x9e\xdb\xad\x15\x5a\xee\x57\x8a\xf5\xed\x71\xad\xda\x45\x6a\xcf\x4d\x80\xc9\xd3\xe0\xde\x70\xc9\xd7\x42\xf7\x6f\xe2\xa1\x5d\xae\x82\x3f\x97\x3b\x5e\x95\xb0\xd5\xb7\x76\xc8\xb7\xfe\x17\x10\x5d\xa3\xce\xa0\x0d\xc7\x20\x04\x99\x76\x75\x19\x8c\x3d\x95\x38\x75\xe9\xb2\xfb\x80\x66\x0f\x92\x99\xe6\xf6\xbf\x3e\x7d\x7a\x97\x2e\x4f\x2f\x5e\xb2\xd3\x35\xbb\x83\xb2\x2e\xc1\x6e\xc4\x56\xa6\x91\xf5\xbb\xa5\x16\xb7\x70\x7c\x87\x2b\x20\xc0\x56\x2e\x29\xb6\x32\xad\x3e\xde\x1d\x61\x3d\x0d\xe6\x29\x6e\xf3\x3c\x33\xef\xe1\xef\xed\x25\xa7\xd2\x60\x65\xe5\x2a\x8f\xef\x10\x26\x7b\x1e\x1b\x71\xe4\x2a\x7e\x20\x39\x37\x15\xf9\xad\xd2\x1f\x02\x36\x1e\xfa\x13\xf9\x0f\xdb\xa1\xce\x17\x94\x19\x51\x44\x6a\x92\xe7\x77\xf0\x69\x74\x26\xfa\x5f\xb9\x60\x97\x66\xdc\x3e\x59\x55\xd5\x97\x32\x3a\x75\x89\x88\x99\x9c\xe7\x23\x01\xe5\x2f\x71\xdc\x0c\xbb\x5a\x5c\x5f\x1e\xcf\x27\xb3\x8b\x0b\xb6\x9c\x5d\xbe\x9e\x2f\xe1\x3f\xb9\x29\x01\xb6\xa9\xa4\x04\x50\xaf\x89\xf6\xb0\x3c\x95\x10\xdd\x44\x19\x4e\x69\x83\xf5\xc8\xd0\xe7\xac\xd4\x76\x6b\x55\x65\x02\x7d\x50\xed\x50\x57\x4a\xe9\x74\xdc\x2b\x90\xca\xcb\x2e\x3a\x28\x63\x2e\x90\x41\x25\x12\xec\xd2\x9e\x76\x2e\x3d\x93\x0a\x29\x18\xb1\x09\xa0\x60\xd9\x6e\x36\xb3\x8b\x53\x40\xf5\x8a\x98\x2a\xf2\xdf\x40\x5c\x1e\x3c\x60\x88\xa4\xb9\xe0\xfc\x38\xd4\x8b\x4b\x61\x72\xbe\xe9\xf5\xf1\x13\xbb\xe8\xf5\xf9\xf8\xbe\xac\xfc\x8b\x86\x96\xd2\x9c\xf2\xc1\xbf\x90\x1f\x80\xc8\x13\x3d\xe3\x87\x70\x11\x03\x06\x50\x43\x7a\x5e\xdb\xf5\xdb\xa7\x4f\x90\xb3\x1c\xec\x44\xb5\xde\x0e\x76\x2a\xd1\x14\x74\x8b\x83\xfd\xa7\xae\xa9\xfe\x15\xd4\x14\x0d\xf7\x2b\x1d\xc8\x3b\x4f\x99\x4c\x23\xb9\x93\x51\xc1\xe3\x32\x75\x15\x98\x7b\xe1\xa2\xda\x2e\x35\x05\xbd\x24\xac\x8a\x4c\x68\x77\x2c\xac\x83\xa1\x07\xb4\xeb\x81\x02\x28\x1c\x40\x91\x7d\x76\x45\x50\xad\x11\x73\x5c\xd5\x17\xb3\x92\xda\xb9\x2c\x2b\xf0\xfc\xfc\x46\x98\x8e\x9c\xea\xca\x48\xc1\xc4\x47\x79\x03\xf7\xd3\x28\x08\x85\x02\x8a\x80\x31\x3d\x44\xfc\xa4\x65\x1b\xb9\x13\xa9\xbb\xb0\xdb\x14\x32\x9a\x32\x36\x8b\x63\x47\x8d\xb4\x15\x3c\x06\x88\xb2\xc8\x75\xdb\xae\x0d\x59\x51\x95\x46\x00\x2b\x20\xe4\xe2\x66\x5a\x18\x43\xd7\x68\xb4\x76\xe3\xf5\xf5\xe9\x89\x0f\x27\x85\x84\x27\x53\xc6\x96\x2a\xc2\x6a\x3a\x55\xe4\x9a\x1b\x97\xc2\x0f\xcb\xdb\xba\x48\x57\x52\xa5\x8e\x49\x59\x78\xcb\x9c\x9c\xb5\xd2\x3c\xb1\x06\x69\x99\xc8\x88\x1b\xf2\xdb\xea\x1c\x0f\xa5\x37\x6d\xe3\xd1\xe8\x3d\xa4\xab\x3c\xb2\xf7\xad\xd5\x91\x25\x0a\x3f\x3d\x0e\xcd\x76\x4f\xd3\x6f\x77\x4e\x1b\xd0\xf7\x32\xda\xf4\xe8\xb7\x5f\xdd\xc3\x0d\x9c\x02\xaa\x46\xcd\xfb\x74\xbd\x9e\x7c\x10\x77\x5f\xb0\xe7\x6d\x60\xd2\x43\xdf\xfe\xd3\x0f\x81\xdd\xa5\x86\x74\x1e\x36\xd6\xc7\xbf\x74\xbf\x41\x0e\x7f\xe7\xbe\xc5\x13\xf5\x37\xe7\xab\x0f\x65\x7f\xe9\xee\xda\xc7\x9e\xe0\x4d\x67\x32\xde\xf2\xc6\xdb\xed\xf8\xb4\xf1\xf1\xb1\x3d\x2d\xcb\x96\x82\x6d\xd0\x84\xfb\xa0\xfd\x51\xf0\x15\x16\x4d\x4f\xb0\x42\x11\x9f\xed\xed\x53\x50\x8c\xd4\xa8\x6f\xc6\xec\x10\xd8\x29\x21\x39\xbe\x5c\x8f\x05\xb3\xfd\x2c\x7f\xf4\xdc\x7f\x90\x86\x6a\xca\x72\x97\x9e\x3e\xb5\xc1\x9c\x1c\x8c\x96\x54\x75\x67\x0f\xcf\xe4\x09\xd0\x91\x3a\x6d\x3e\x18\x16\xe9\x11\x36\xf7\xc3\x20\xd5\x4c\x06\x34\x14\x64\xb0\x89\x63\xb7\xd2\xd5\x09\x15\x9a\x69\x80\xe5\x82\xd0\x3f\x7d\x80\x47\x5f\xe3\x06\x5e\xde\xb1\x43\x07\x4c\x03\x64\xbb\x4c\xfe\x33\x41\x8a\x72\xa7\xf9\x10\x2a\x2b\x27\xb8\x35\xde\xce\xef\x8d\x88\xfc\xec\x36\xa3\x42\xbb\x68\x33\x38\xfe\x26\x98\xcc\xa5\xd5\x6e\x42\x9b\x60\x12\x9b\x71\x71\xdd\x16\xab\xef\xef\xa7\xaf\xd0\xd8\x57\x31\xdf\x8c\x0c\x46\x07\x16\x07\x06\xef\x89\x3c\xcc\xc6\xc3\xbe\xc0\xc3\x47\xfc\x11\xdf\xe5\x13\xf6\xb0\xff\x7b\xfd\x52\x3d\x0c\xbf\xe2\x51\x1d\x84\x88\x01\xec\x7e\xc8\x17\x7e\x28\x28\xeb\xa5\xbf\x70\xfd\x56\x99\xdc\x5d\xb6\xdc\xdf\x4f\x4f\x40\xaa\x3b\xb8\x61\x31\xa2\xc9\x05\x1c\xf1\xa8\x61\x70\xb7\xb0\xc3\xe5\x1c\x6a\xcf\xaf\x4b\x3e\xb8\xa7\xb2\x8c\x96\xd8\x6d\x23\xfc\xc7\xa7\x4f\xec\x96\x63\xa5\xc4\x0d\x54\x5d\xe6\xfb\x70\x33\x2d\x59\xba\x9f\x3e\xd1\xa8\xaa\xfe\x46\xdb\xcb\xf7\x48\xae\x7c\x67\x77\xea\x8d\x2b\x57\x19\xcc\x3a\x62\x55\x75\x77\x04\xef\xfe\x07\xd6\xff\xd4\x13\x06\xfa\x4a\x7d\x1a\x3a\x02\x50\x8a\x31\xa3\xe5\xde\xdb\x18\x9b\x90\x56\x73\xfc\x68\x79\x55\x74\x6f\x1c\xad\x53\xf9\x86\xf4\x6b\xfb\x4f\xfb\x9e\x3c\x80\x2c\x61\xe7\xeb\x16\x8e\xa7\x7d\x21\x35\x86\x29\x6a\x73\x54\x1d\x6c\xf7\x76\xc2\x53\x3e\x81\xa7\x8b\xd2\x58\x4f\xe5\x56\x8f\x5b\x19\xc7\x40\x0d\xed\xe0\x54\xe1\xfe\x22\xbe\xf3\x95\xed\x15\x2b\x6a\x48\x6b\x45\xbd\x0c\x5f\xbf\x80\x64\x06\x06\x18\x8f\x1d\x1b\xa0\x11\xba\x4e\xbc\x64\x3d\x63\x57\xe2\x91\xaa\x56\x0e\xac\xf0\x0c\xd1\xd5\xa7\x91\xcb\x5e\x07\x38\xdc\x25\xf8\x32\x54\xbb\x94\x71\xa6\x52\x31\x51\xeb\x35\x72\xb0\x96\x17\x3d\x23\x0d\xc0\x4d\x76\x1e\x6c\x41\x6f\xfd\x16\x04\x53\x81\xec\xd1\xeb\xd2\xb1\x1a\xb2\x6d\x12\xb5\x40\x57\xf3\xe3\xeb\xcb\xd3\xe5\x1f\xd8\xeb\xcb\xc5\xf5\x05\xa5\xe9\xf2\xfa\x62\xc1\x4e\xe6\xec\x6a\xfe\xfa\xfa\x72\x76\xfe\xf0\x67\x02\x43\xa0\x2e\x8d\x34\x7c\x5f\x1c\x69\xdd\x9c\xcd\xde\x5c\x2d\x28\x49\x6f\xe7\xff\x30\x63\xcb\xd9\xd9\x37\x0f\xff\xe7\x19\x29\xe2\xf2\xed\xe9\x31\x45\x82\x0c\xbf\x3e\xfc\x99\x60\x28\x70\x6d\xc7\xf0\x3d\xd8\x4e\x0d\x16\x39\x90\xee\xa1\x92\xd9\xdd\xc7\x71\x75\x6f\xbe\xd1\xb8\x0f\xc6\xb5\x3a\x90\x23\xfa\xea\x62\x46\xbe\x8a\x8e\x16\x63\x5e\xc0\x82\xcd\xaf\x2e\x66\xf4\xf8\x57\xf2\x06\x8e\x7e\x29\x90\x1a\x7c\x94\x38\x8c\x68\x63\x90\x75\x27\xf3\xb7\xf3\x37\x8b\x0b\x92\x66\xe3\x64\x7e\x35\x3f\x7f\xbb\x78\xf3\x76\x3e\xbc\xc7\x03\x88\x3b\x8e\x4f\xfd\x74\xeb\x97\x47\xbd\x76\xd7\x92\x28\x59\xc4\xa6\xd4\xb8\xfb\xb6\xd4\x38\x5f\x7d\xeb\x40\x08\x0e\xba\x4c\xb7\xcd\x1d\xea\x69\xfd\xda\x5c\x8d\xbc\x36\xbf\xba\x7a\xc3\x8e\x83\x5a\x1b\xb8\x1c\x66\x21\x45\xbd\xbb\x27\x06\x7a\x9f\xd5\x1a\x52\xd4\x27\x13\xf3\x41\x66\x13\x63\xe2\x09\x54\xec\x80\x59\xc0\x1b\x64\x95\xcb\xb4\x10\x25\x4f\x88\x4c\xe1\x44\x2e\x6a\xdc\xd6\xe3\xbe\x99\xe5\xec\x98\xa2\xc4\xb9\x38\x7d\xf3\x2d\xb5\x78\x5f\x1f\x1f\xcf\xe7\x27\xf3\x93\x71\xca\xac\x83\xf2\x25\xef\xec\x66\xdf\x17\x26\x77\xd7\x4f\xc2\xac\x78\xcc\x7f\xb9\x94\xef\x2b\x1f\x3b\x19\xba\x53\x5f\x95\x21\x10\x6a\x96\xd7\xc1\x6b\xef\xef\xa7\x3e\x3e\xf3\x7e\xe3\x1c\xc3\x81\x98\x72\x6d\xdc\x66\x6d\xe2\x7a\x8b\xb4\x07\x98\x74\x7f\x3f\x85\x6c\x89\xf7\x89\xff\x06\xfa\x3c\xdf\x1e\xa3\x5a\x04\x12\xb6\xe1\x37\xb6\x15\x71\xc6\xa0\x48\x71\xe5\xa0\x1f\xb1\x62\x11\x3e\x31\x7b\xcc\x60\xfc\x06\x91\x38\x4a\x10\xa7\x1e\x88\x48\x4a\x5f\x2c\x56\x25\x49\x20\x7b\xae\x34\x83\x88\x31\xb3\x0e\x17\x00\x38\xdb\xef\xfc\x57\x64\x41\xbb\x6d\x2e\x55\x1a\x72\x10\xb3\xe7\xaa\x40\x21\xf0\xc3\x1c\x04\x21\xda\xd6\x26\x55\x9a\xeb\x5f\x91\x53\x05\x6d\xc1\xef\xec\x31\xa6\x34\x3f\x95\xc3\x2d\xd2\x3b\xa1\x31\x71\xe6\x08\xff\x87\xad\x54\x24\x5e\xb2\xaf\x5e\xbc\xf8\xfa\x88\xb9\x97\xf9\xd2\x63\xc3\x1a\x91\x87\x85\x4a\x37\x62\xc5\x0b\x44\x02\x2c\x99\x50\xb2\x80\x95\x81\x4e\xfd\xb5\x6b\x70\x79\x5f\x12\x59\xe5\xab\x87\xbf\x46\x72\x83\x55\x4c\x5a\xab\xca\x82\xd4\x5a\x90\xbc\xac\x80\xd5\x4a\xe0\xd9\x80\xe7\xbe\xbd\x0c\x2a\x53\xfa\x87\x42\xb0\xa0\x40\x00\x84\xac\xf9\x8f\x60\xa6\xd8\xbb\xaf\x1b\x32\x4a\x2e\x94\x87\xc3\xf4\x77\x2f\xfe\x76\x6f\xdc\xec\x9f\xca\x81\xfb\x83\x4b\x3c\x02\x74\xb9\x22\xdf\x2a\x2d\x7f\x44\x60\xb7\xcc\xa1\x1d\x43\xe4\xae\xcc\xc2\xe1\xab\x8e\x24\x9f\xce\x51\x43\xbb\x9c\x49\x6d\xa3\x89\x76\xf9\xe1\xdc\xa9\xd5\xc3\xbf\xd4\xa8\x66\x8a\xdc\x1a\xe7\xea\xbb\x3d\x50\x32\x67\x1e\x1f\xd9\xc3\x20\x12\xa9\x2b\xdd\x83\xf4\x92\xcd\x10\x4e\x00\x4e\x3c\x29\x70\xa3\xc3\xd8\x44\x0a\x86\x06\xae\xdc\x32\x2d\x77\x32\x16\x0e\xbc\x08\x4d\x10\x78\xdc\xed\x83\x87\x1d\x38\x30\x2f\x99\x42\x28\x5c\xa4\x3c\x4c\xc5\x06\x2f\xb8\xde\x56\x83\x91\x8b\xc4\x19\xf2\xf0\xf3\x46\x2a\x7f\x1a\xf6\xe3\x21\x8c\x11\x3d\x98\xb1\x1d\x23\x81\xa9\x69\x57\xf0\x27\x84\x08\xab\xcf\x1e\xfc\x7d\x76\x71\x0a\x3e\x8a\x7f\xa2\x9c\x4c\xf8\x73\xad\x4c\xfc\x31\x03\xd2\x66\xcd\xde\xc4\xa1\x4c\xf2\xf3\xa8\xcd\x26\x72\x58\xe4\x4a\x30\x48\x8f\x58\x42\xaa\xc4\xfd\xfd\xf4\x0d\xbf\x11\x31\xee\x1f\x1e\xfe\x6b\x30\x8b\xd1\xc2\x65\x5c\x58\x1f\xb0\xc8\x45\x9a\xcb\x20\xf1\x2d\x0c\x14\xb5\x2b\xe9\xe7\x39\xf2\x26\x7f\x53\xa6\x78\x8f\x62\x59\x5a\x10\x39\xdc\x83\x79\x96\xbc\x7e\x1f\xe1\xf2\x6b\x2c\xac\xb7\x9e\x85\x93\x0c\xad\x11\x81\xb3\xd4\x93\x78\x37\x78\x4a\xbb\x8b\x0c\xaf\x86\x95\xb1\x0c\x6b\xcc\xf6\xab\xff\xfb\x22\x70\xa7\x43\x61\x04\xd2\x21\x3c\xef\x6d\x06\xb5\x46\x13\x07\xf3\x69\x8d\x8c\x52\x8e\x78\xf9\x9d\xa1\xe8\xde\x71\x1b\x26\xfb\xe5\x5e\xb2\xfd\xa8\xd7\xd0\xd2\xbc\x53\x2d\x45\x0c\xde\x82\x95\xff\x04\x21\xe6\x61\xe4\xe0\x7b\xc8\xfa\xa3\xd9\xc1\x7b\xde\xa3\xc7\xa8\x38\xe8\x45\x95\x00\x17\xf5\x21\xda\x4f\x70\xce\xf5\x1d\x5c\x9e\x29\x87\x90\xc1\xd9\xee\xab\x3d\x98\x8c\x23\x78\x3c\x29\x0c\x7a\x74\xd6\x03\x99\x64\x70\x3d\x4b\x8d\x62\x0b\x16\x46\x30\x60\xef\xd2\x93\xd3\xe3\xd9\x4b\x76\x25\x9c\x5b\xe1\x21\x63\xec\xa2\x0c\x27\x3f\x07\xa9\xd1\xc2\x7a\x6e\xd8\xee\xab\x23\x16\x89\x9d\xd0\x0f\x3f\xd5\x5d\xba\x7a\xee\xdf\x24\x1b\x38\xc0\xbd\xdf\xc4\x72\xcf\x84\x41\xa1\xfb\x2b\xaa\x5a\x66\xe8\x6e\x40\x57\xb6\x0c\x5e\x0d\xc2\x2f\x6d\x88\x1f\x70\xd5\xf2\x85\x0e\xdf\xab\x49\x66\x34\x3f\x70\xdd\xad\x99\x4c\x73\xb1\xd1\xd0\x6c\x64\xd0\xd2\x49\xa0\xcf\x42\xce\x00\xf2\x5c\x93\x37\x4b\xfe\x31\x85\xa2\x2b\xde\x7f\x5c\xcd\x3d\x9a\x40\xbb\xe4\xe1\xa1\x72\x7a\xad\x6a\x0f\x66\x07\x33\x4a\x4c\xed\xf7\xf9\x66\x71\x3c\x7b\x33\xb7\x1b\xf8\xb3\xe3\x37\xf3\xd9\xe5\xb3\x23\x7b\x60\xdb\x49\x55\x18\xf7\x18\xba\xc6\xb1\xc8\xe9\x64\xa6\xc0\x42\x55\x7a\x6a\x0e\xa5\x0e\x88\x97\x23\xa9\x12\x3e\xb5\xdf\xa1\xd3\x67\x3b\x5d\x2a\x54\xa1\x77\x87\xcf\x32\x6e\xcf\x8a\x12\x17\x5a\xb8\x10\x5c\xc5\xc5\xc3\x5f\x3a\x7c\xdb\xdc\xa5\x9f\xbe\x87\xca\x86\xf7\xf9\x5d\xe6\x32\x7b\xad\xcb\x8e\xa4\x10\xcf\x80\x55\x96\x59\xd5\xa9\x4a\x05\xc5\x72\x7a\x4c\x7f\xeb\xfb\x2a\x20\xcc\xe3\x05\x17\x5e\x30\x69\xa3\xd2\x6c\x27\xc5\x6d\x45\x94\x20\x59\xa1\xe3\x01\xc3\x5a\xb0\x9d\x34\x85\xe3\x33\x01\x64\x0b\x0e\x71\xbd\x3e\x12\x84\x9a\xd2\x92\xa1\xc1\x81\x21\xda\xe1\xed\x04\x02\x24\xf4\x37\x8f\xf9\x00\x2b\x5d\x61\x7c\x58\x73\x3a\x56\x2b\xa0\xaf\x1c\xf8\x2e\x48\x19\x0e\x3b\x36\xc4\xec\x80\xf5\x6b\xee\xfe\xd9\x15\xf8\x2b\xfb\x85\x39\x30\x0d\xbc\x8e\x32\x72\x57\x17\xd5\x69\x48\xed\x83\x7e\x16\xa2\x48\x40\xdc\xc8\xfd\xe5\x2d\x8f\x0b\x07\xa6\xac\xbf\x5c\x98\xb3\xd6\x5b\x6a\xf9\x68\xd8\x8c\xb3\xba\x61\xb5\xe3\xf5\xf9\xa5\x02\xa4\x38\xd2\x3f\xb4\x21\x4b\x3a\x2c\xc0\x96\x62\xc6\x21\xf9\x36\x8d\x01\x6a\xc3\x9f\x74\x8e\xd7\x80\x92\xc5\x01\xa9\x36\xbe\x2b\x4f\x92\xce\xd5\x98\xcb\x4f\x93\xcf\xe5\x2d\xfc\xec\xc9\x5c\x75\xeb\xbf\x58\x36\x57\x57\xff\x9e\x34\x95\xeb\x71\xfd\x3b\x34\x97\xeb\x6a\x6b\x3d\x6e\x0e\xe1\x22\x8e\xd9\x12\x98\x93\x81\xf7\x42\x74\xf4\xf3\x58\x25\xc0\xe2\x14\x6f\xd1\x27\x2e\xd3\x2c\x40\x92\x43\x92\x1f\x08\x8a\x60\x8d\xc0\x83\x01\x28\x6f\xa6\x6e\x39\x64\xeb\x47\x7c\xb4\xa5\xa9\x38\xf3\x4b\x5b\x9b\x9a\x56\x80\x78\xf4\x44\x9f\xee\x56\xdd\x56\x10\xdd\xf5\x84\x57\xc2\xd0\x33\x65\x72\x74\xdd\x3c\x32\x78\xcb\x7d\x4a\x97\xb6\x38\xae\x6d\x2f\xa6\xdf\x61\xf4\x2a\x73\x9f\x32\x4e\xcc\xaf\x1e\x70\x2c\x50\xbf\x15\x71\x9f\x1a\xfe\x7d\x41\xc6\x33\xac\x08\x07\xb0\x0a\xb7\xac\x60\xbb\xcb\x93\x7f\xce\xab\x84\x79\x3b\x59\xc5\xe4\xa6\x90\x71\x8e\xa4\x18\xe6\xce\xe4\x22\x39\x62\x32\xf5\x70\xcd\x76\xe6\x66\xc2\x7a\xed\x76\xed\x74\x3f\x23\xfd\x3b\x4f\xed\xb2\x04\x50\xd7\x14\x80\x9f\x37\xb6\x8e\xf6\x1a\xe1\xa5\x05\x26\xd0\x3f\xaf\xfe\xf3\xe1\x67\xc0\xcd\xb3\xe7\x9e\xa4\x4e\xa9\x91\xe9\x87\x9f\x27\x2b\x95\x9a\x5c\x83\x3f\xea\x2c\x94\x76\x12\x06\x4d\xc0\x52\xa8\x3b\x8a\x8f\xaa\x5c\xf6\x2a\x7a\x0d\x96\xd2\x43\xe6\x91\x6d\xc7\x75\x66\xe0\x77\xe9\xe4\x17\x46\x68\xc3\x6e\xee\xe0\xca\xa4\x6f\xf2\xba\x18\x5c\x4b\x25\x51\xa6\x74\x79\xc7\xd1\xa1\x11\xb0\x4b\x23\x91\x73\x19\xbb\x19\x1c\x12\xc6\x35\x03\x01\x3d\xe6\x58\x39\xf1\x16\xdf\x9f\x15\x2c\xbe\x77\xe5\x5d\x38\xa3\xf7\x8f\xf2\x01\xb5\x49\x87\x8d\xe8\x5b\x8c\x1f\x77\x84\xe5\xee\x10\xac\xc5\x0a\xa8\xbe\xb3\x8c\x89\x5d\x47\xd5\xb1\x97\x0f\x0f\x61\xee\xb8\xfd\x50\x7d\xb5\x5a\x87\x86\xbd\x70\xd4\x21\xb3\x67\x0c\xbc\x4f\x4d\xeb\x07\x71\x77\x90\xc2\xbd\x08\x58\x97\x2e\x2c\x25\x1a\xad\xa5\xa7\x28\x20\x90\x7d\xe8\xeb\x77\x2e\x63\x75\xbf\xd7\xab\xe9\xc0\x4f\x4f\x85\x17\x88\x43\x3e\x3a\x38\xf0\xd9\x53\xaa\x5a\xfb\xe2\x4c\xac\xfb\x77\x77\x7c\x21\xaa\x04\x15\xd1\x18\x2d\x87\x34\xc7\xae\xdb\x65\x15\x2b\x44\x16\xb0\x8a\xf8\xcb\x1c\x83\x70\x3c\x53\x18\x44\xc8\xf5\x80\xf2\xd7\x5f\x30\xe3\xc3\x8d\xc8\x7e\xd1\xec\xd3\x9c\x0e\x87\x38\x51\xd5\x98\x74\x57\xc9\x7e\x61\xf0\xb6\x2b\x39\xfa\x22\xe7\x83\xcc\x1c\xdf\x81\xc7\x6e\x82\x44\x80\x5c\x75\x41\x5d\x9e\x62\x12\x02\xdb\xa7\x59\xa0\x81\x2f\xdd\x21\xb8\xe7\x52\xca\x9a\xb3\x55\x26\x87\x95\xb1\xca\xd3\xea\xb5\x03\x1f\x2d\xf9\xde\xdd\xfa\xa8\x40\x56\x87\xaa\x1a\xb9\xbc\x3b\xc7\x84\x49\x5f\x53\x76\xae\x72\xbb\x9b\xa8\x24\x11\x69\x24\xa2\xff\xd4\x6f\x49\x9d\x7b\x7e\x2f\x4a\xe2\xa8\x4d\x41\xa6\x48\x23\x1e\xa9\xff\x44\x18\xd8\x11\x60\x9a\x77\xae\x97\x30\xb7\x9f\x95\xf7\x92\xcf\xaa\xf8\xf9\xc8\x54\x1b\x10\xf4\x19\xb9\x4a\x82\xcc\x8e\x91\xb4\x25\x81\x69\x54\x48\xf9\xb8\xae\x81\x0a\x2c\x83\xa0\x43\x6b\x76\xb0\x35\xfa\xd2\x98\x06\x69\xc6\xd1\xb9\xba\x17\x79\x38\x57\xeb\x55\xeb\x42\x36\xe4\x95\x2c\xa8\x05\x67\xd0\xd8\x93\x29\xa4\x3d\xa3\x8d\x9c\xe6\xd6\x87\xcd\xb7\xb0\x60\xc3\xa1\x05\x30\xcd\xa5\x4a\x21\xb2\x0e\x3f\x41\x72\x92\x2f\x76\x38\x2a\x09\x78\xf0\x71\x69\x4a\x3e\x16\x99\x96\x5b\xe3\xad\xd2\x00\x66\x5d\x72\xd9\xd1\xdc\xc3\x28\xd8\x0e\x7a\x91\xb0\x55\xc8\x22\xcf\xd9\x4a\xcb\xea\xe3\x75\xc7\x17\x88\xc0\xab\xf2\x49\x77\xe3\xae\x6b\x25\x11\x47\xac\x7c\xbc\x32\x17\x83\xf0\xc8\xf8\xd2\xa0\xc2\x0b\x48\xc7\x45\x52\xdf\x47\xa8\xe5\x1d\x0e\x7d\xb8\x34\x7f\xd9\x43\xe0\x05\x1c\xee\x90\xda\x06\xc9\x28\xff\x9d\x9c\xf9\xec\x08\x8c\xfc\x64\x5d\x98\xea\x73\x94\x7b\x84\x71\x27\xea\x0b\xe8\x87\x9a\x39\x1d\x00\x34\xe3\xc4\x64\x19\x60\x09\xa9\x22\x7f\x97\xba\xab\xe3\x59\x90\x9a\x0d\x17\xc2\x37\x58\xb1\x2e\x42\x82\x4c\x2d\x37\xdb\x1c\xf8\x4d\xa7\x90\x8b\x22\x78\x04\x2e\x2a\xd7\x11\x5b\xa9\xc8\x87\xf8\xec\x03\xc8\xd5\x6b\xff\xf5\xbf\x5f\x2c\x2e\x97\xad\xe1\x3d\xea\x43\x5b\xda\xf1\x60\xb1\x4c\x24\x06\x4d\x64\xfa\xf0\x97\x95\x54\xce\x3b\xb2\x26\xe3\x35\xf3\xa2\xbe\xe2\xed\x80\xa2\xc4\xbe\xf9\xdc\x6e\xba\x76\xb6\xa4\xdc\xb1\xb1\x02\x26\x57\xce\xa7\x6c\x9e\xb0\x9d\xf8\x11\xb7\x92\xc8\x11\xa2\x66\x42\x27\x3c\xb5\xaf\x02\xbf\x2b\xd7\x08\xbb\x40\x45\xf0\xa1\x5b\xf4\x17\xa7\x73\x56\xa4\x15\x51\x6e\x39\xce\x56\xa4\xdd\x63\x8f\x31\x91\xcd\xdf\x4e\x24\x4a\x8b\x30\x70\x43\xbe\x63\x1c\x89\x84\xc7\xa6\x58\x89\x48\x46\xaa\x1a\x8e\x16\xd1\xe8\x3d\xdd\xe4\x42\x23\x2b\x63\xed\x24\xd5\x61\xbb\x88\xf0\xa2\x18\xff\xbb\x23\x0b\x44\x42\x2d\x78\xe3\x61\x5a\xee\x17\xcd\x37\x3f\x2d\xe1\x8e\x7e\xb1\x33\x87\xed\x73\x91\xf9\xac\xc5\x23\xcc\xb2\x50\x2c\x2d\xe2\x18\xf3\x9b\xdd\x1f\xfc\x45\x31\x22\x4a\xb9\xc7\xe9\x48\x2c\x74\x0a\x3e\x0c\xdb\xc3\xf2\xba\xf4\x28\x4c\x9b\x00\x4b\xd3\x22\x76\x1b\x94\x75\x1c\xcb\xdf\x9c\x53\xed\xd2\x17\xbd\x98\x6e\x06\xde\xab\x9c\x93\x74\xc3\x57\x1d\xa0\x4b\x57\x55\x92\x21\x88\x20\x27\x13\xd5\x5c\x65\x10\x93\xf5\x91\x96\xf2\xe2\x80\x67\x99\xdd\x8a\x10\x2d\x44\x43\xf6\x4a\xe2\x58\x4e\x91\x2a\x35\xe1\x77\x0c\xf3\x92\x23\x75\x9b\xda\x05\x6f\xa4\x1f\x0b\xaa\xbb\x96\xdc\x0b\xae\x7b\x17\x5c\x95\x65\x5f\x74\xd6\x5b\x9b\x7e\xd1\x39\x0f\x4e\xc2\xc4\xe5\x57\x46\xd4\xa6\xf8\xca\x25\x1d\x96\x84\xba\xb0\xa7\x13\xbb\xdf\x72\x76\xf5\xbb\xf7\xa7\xe3\xca\x5b\x1c\xb7\x25\xb5\xc5\xcc\xcf\xb0\x92\x71\x7e\x75\x31\xbf\x24\xea\x6a\xec\x82\x4d\xf2\x9b\xc1\x9a\x4b\xf1\x93\x61\x4b\xc6\xb0\x94\xc8\x73\x86\xa2\xf3\x39\xb1\x27\xe4\x89\xcf\xda\x9c\x78\x4c\x27\xbb\x0c\x24\xfc\x03\x06\xab\xca\x9f\x7d\xc8\xcf\x04\xb4\xf5\xb9\x62\xc7\xaf\xc0\xbd\xe9\x36\x6d\x9c\x7a\x58\x13\x90\xc2\x5e\xde\x48\xcc\x3b\xa8\x02\xba\x3e\x47\xd4\x7a\x67\x61\x92\xa8\xf3\x7e\xb3\xcc\xb0\xe3\x57\xf4\x58\xb0\x99\x23\xdc\x76\x98\x79\xd2\x78\xac\xcd\xa8\x02\x5c\x03\xbe\x5a\xa0\x4f\xb4\xc3\xc0\xd7\x6b\xb1\x22\x93\xa8\x1e\x29\xb4\xc3\x50\x24\x71\xd4\x2a\x16\x0e\x9c\xc7\x6e\xa9\xdf\x00\xed\xb5\xfb\x1e\x8c\xc8\x27\x4a\x6f\x26\xf6\x99\x67\x10\x48\x6a\x7d\x04\x3e\x65\x7c\x68\xdc\xba\x03\x76\x1c\x3b\xf6\x5e\x28\xec\x86\xa2\x81\x2c\x8b\xef\x30\x1f\xde\x31\xf9\xfa\x9b\xe1\xe0\xb8\x68\x58\x91\xe6\x12\xe0\x61\xee\x20\x0d\xd0\x8d\x0d\x9d\x4a\x84\xae\xc3\xcc\x04\x94\xbe\x70\x4c\x71\x85\xde\xe8\x60\xc1\xb5\x56\xe0\x6c\x99\xc6\x55\x70\xc9\xfc\x6b\x18\xcf\x1f\x7e\x06\x67\xdc\x88\xef\x79\xc2\xb4\x03\x1d\x8c\x14\x85\x8f\xf4\xef\x1d\x99\xb5\x6b\xd8\x4c\x33\xcf\x31\xd3\x2a\x17\x1b\x4f\x66\x5e\x24\x55\x27\x84\x3d\x6b\xad\xa4\x81\xdb\x14\xfb\x0b\x5a\x6a\x3b\xe3\xba\x21\x71\xd4\x48\x87\xb3\xd6\x41\xa8\xd4\x08\xaa\xf0\xbd\x83\x8b\xb4\xda\xec\x98\x1b\x2c\x50\x84\x53\x85\xaa\x69\x28\xec\xc3\xa9\xf8\x58\xe2\x28\x46\x54\xae\x21\xbc\x9a\x73\xe5\x36\x25\x9f\xc9\x74\x54\x39\x9a\x6b\xe4\xd0\x08\x1c\x4e\xf8\xd0\x30\x88\x81\xcd\xba\x07\xf0\x5c\xa4\xdb\xa0\xa0\xaa\x4c\x65\xea\xd4\x81\x2b\x15\x3e\xda\xcf\x64\x50\x55\x74\xda\xbd\xf0\xe2\xb4\x6e\xec\xa3\x8a\x38\xb1\x0f\xed\xb2\xc1\x48\x27\x1d\xbd\x31\xb8\x29\x6b\xa4\x3e\x59\x6d\x9b\x42\x0f\x31\xfd\xf8\x55\x29\xbd\xb6\xab\x43\x37\x44\x6a\xac\xcd\x30\x89\x6b\xb9\x51\x25\x09\xb8\x5d\xfd\x04\xac\x7e\x83\x3a\x43\x6b\xc3\x05\xdf\xe0\x5d\xba\x9e\x18\x38\xa1\xd9\x89\xc5\xc3\x35\x24\xc2\x89\xd6\x3e\x93\x45\x9a\x6b\xbb\x80\x24\x6c\x27\x37\x14\x8b\x7b\xa3\xf3\x0e\xad\xb6\x71\x6c\xe2\xa9\x47\x21\x81\x2d\xe8\xf3\x8c\xc4\xbe\x6a\x18\x83\x1f\x0a\x2e\x0d\xe0\x07\x83\x6e\x00\x2a\xf1\x65\x42\x5f\x7c\x7c\x6a\x93\xfa\xe9\xc7\xa0\xd1\xf5\x2f\xd5\xbd\x6a\x11\xb8\xce\x22\x9e\x8b\x92\x54\xa2\xde\xdf\x02\x7e\xc4\x02\xb1\x3e\x72\x98\xc6\x51\xb9\x43\x30\xf6\x34\xf7\x39\x98\x50\xf0\xd5\x43\x27\xb3\x5c\x2c\x67\x6f\xde\x23\x11\xfb\xb8\x2d\x9f\x6f\xf0\x88\x64\xff\x63\xe4\x09\x69\xc9\x65\x0c\x99\xa5\xc1\xcd\x77\xac\x36\x03\xf2\x56\xb0\x65\xc1\x12\x77\xf5\x09\xad\xaa\x3b\xf0\xee\x6c\x95\x65\x98\xd8\x1a\x1e\x24\x48\x8f\x79\xd1\x60\x34\xc3\xb5\x9e\x37\x1b\x77\x6b\x6b\x3b\x20\x91\x1a\xe7\xcd\x7d\x65\xbf\x21\xa1\xcd\x7c\x60\x5b\x6e\xd8\x8d\xb0\xc7\xcb\xe2\x26\x91\x39\x28\x2f\xe3\x39\xf1\x1d\x06\x72\x21\xd8\x68\xfd\x84\x77\x29\x34\x4a\x79\x22\x5e\x32\x86\xaf\xd2\x7c\xf0\x6a\xe0\x37\x19\xd9\x5f\xca\xdf\xae\xc4\x0f\x85\x48\x57\xe2\xf4\x64\xf4\x0b\x37\x1f\x20\x6a\x2d\xb4\x01\x97\xa9\x48\xcb\xc3\xc1\x48\x4f\x13\xb7\x23\x08\x79\x79\x6f\x12\x21\x71\xd6\x87\x40\xe2\x54\xe2\xc2\xc4\xc5\x10\xf4\xa1\x2c\x60\xe3\x79\x80\xf6\x29\xd3\x48\x7c\x04\x37\x0f\x0f\xf9\xb9\x44\x93\x52\x71\x5b\x25\x58\x54\xa7\xfe\x52\x5a\x85\x72\xc8\x13\x81\x52\xa8\xd3\xa6\xcb\x2a\x6f\x12\xd1\xd6\xee\x4c\xea\x3e\x6d\xaa\xd8\xc3\x5f\xd2\x48\xae\x44\x2d\x5c\xcf\xca\x9c\x0f\xe9\xea\x03\x52\xb5\xeb\x10\x8a\xa0\x9b\x89\x30\x49\x29\xaf\x7b\xf0\xca\x77\xd0\x32\x4d\xbe\xe8\x05\x3e\x61\xe6\xf6\x11\xf8\x16\xb6\xf1\xf5\xe5\x9b\x32\xf5\x73\x08\xe9\x56\xb7\x24\x47\xb6\x1f\xb0\x73\x3e\x5e\xcc\x11\x93\xeb\x50\x2a\x5e\x87\x31\x95\xc6\x32\x1d\x77\x4d\xbe\xac\x30\xb8\xfd\xd7\xe0\x22\xe9\x27\xf3\x19\xbb\xe1\xab\x0f\x22\x8d\x8e\xd8\xed\x56\xae\xb6\x55\xf5\x90\x29\xb2\x4c\x41\x40\xab\xbf\xe0\x79\xb4\x5e\x29\x36\xea\xf3\x6b\x2e\x3f\xd1\x94\xa6\x89\xa1\x05\xf4\xed\xe1\x74\x4b\x67\xf3\x61\x6a\x7d\xe3\xaa\xe6\x7c\xb4\x08\x4c\xbe\x3d\xb0\x59\x99\xf1\xad\x0e\x51\xdd\x7a\xe6\x3d\x68\x1c\x5a\x25\xed\x78\x5c\x8c\x17\x55\x83\xfc\x3f\xc8\x18\xb8\x97\xcc\x78\xbe\x3d\xac\xe5\xfd\xfd\xf4\x02\xbe\xe2\x79\xc9\x76\xdd\x7a\xd9\xcd\x8a\x34\x12\x3a\xfc\xea\xab\xeb\x60\xda\xa1\x29\x2f\x6e\x69\x35\xd5\xad\x78\xe3\x1e\xb7\x22\x04\x9e\x92\x6e\xc8\x56\x40\x26\xca\x41\x03\x87\x9b\x6a\xcb\xae\x79\x50\xe5\xb6\x95\x08\xe5\x69\x78\xcd\x3e\x64\xbd\x84\xc7\x63\x8a\x27\x99\x56\x63\x77\xfd\x47\x2f\x21\x56\x48\xc5\x56\x77\xb0\x08\xe0\x91\x69\xec\x56\x07\x8f\x9f\x15\xe8\xe3\xef\x8f\xeb\x59\x83\x72\xee\xd1\x72\x0e\x2a\x49\x6e\x0a\xc9\x62\x3e\x7e\xe5\x03\x01\xe0\xaa\x1c\xd4\x09\x15\x47\x8f\x9f\x2b\x56\xc8\x23\xe7\x8a\x15\xf1\xf8\x57\x6b\xa5\x3c\xc5\xab\x0d\xe5\x1c\xfc\x6a\x43\x21\x07\xbd\xda\x9a\x00\x87\xb6\x71\x98\x90\x47\xcc\x0f\x1d\x01\xc0\x9c\x73\x74\xf2\xd0\xb9\xc0\xb3\x13\x44\x7f\x45\xc4\xa2\x42\xd7\x09\x34\x79\x91\xab\x49\x24\x72\xd1\x05\xc4\x33\x03\x0d\x10\xcb\x00\x80\x21\x13\x8a\x07\xd2\x17\x9f\xd7\x07\x25\x48\x85\xe6\x98\x5f\x00\x72\xf1\x9c\x61\xf5\x24\x0f\x3f\xe5\x72\x05\x47\x87\xbe\x08\xc3\x56\xd4\x26\xda\x01\x23\x12\xcc\x52\x2c\xaf\x3a\x70\x64\x03\x39\x90\xc9\xfd\x38\x11\x1d\x99\xd9\xb4\x84\x8c\x1b\x73\xab\xf4\x38\xcc\x0b\x6c\x58\x6d\x62\xd5\x2b\xb7\x1e\xc3\x78\x51\xb8\xe9\x1d\x34\x88\xc1\xb1\xe5\x40\x01\xca\x60\x72\x25\xa4\x64\x19\x91\x1b\x96\x69\xa9\xb4\xcc\xc7\xef\xbb\x87\xbd\x44\x87\x58\x05\x24\x1c\x22\xe1\x80\xbd\x13\xc7\x77\x4c\xa6\x90\x5b\xfb\x92\x41\xb4\x02\x32\x8a\x20\xb9\x96\xb3\x48\xab\x2c\x16\xf9\x94\xf9\xac\x3e\xf7\x07\xa6\xb4\x4b\x29\x2e\x53\xf3\xfc\x2f\x39\x5c\x66\x8f\x3f\x89\xe8\x1a\xce\xb7\x47\x69\x90\x11\x1c\x76\x80\x5a\x0d\x22\xc8\xe5\x8d\x1a\xfa\xe1\x24\x8f\x5a\x03\xd7\x3b\xc4\x6c\x80\xeb\x17\x93\xa9\x34\xc2\xc0\x05\x5c\x6b\x94\x25\x72\xe5\xfd\x18\x75\xd1\x12\xda\xba\x07\xb3\x2d\x53\x56\x18\x31\x75\x09\x44\xc7\xee\x46\x33\xf0\x0d\x31\x10\x32\x49\xd9\xb7\x8b\xab\x25\x5c\xf5\x2a\x0d\x21\xce\xc9\x04\x72\x01\x92\x09\x0a\xcf\x15\xdb\x88\x54\xe8\x2a\xba\xa2\x4b\x14\x7a\x48\xa4\xc8\x0a\xb3\x75\x29\x14\xbd\x43\xd0\x04\xea\x16\x09\x2b\x8c\x9a\xfa\x64\xa4\xb3\x22\x12\x01\xb1\x1e\x24\x67\xaf\x54\x52\xb7\xb2\x68\xb3\x12\xe2\xae\x9b\x92\xf8\x0b\xc2\x2b\xa0\x54\x1c\x59\x25\x46\x6c\x0a\x19\xf1\x23\x38\xa6\x40\xae\x19\x9a\x6d\x9f\x4b\x7a\xc6\x78\x50\x01\xe1\xd0\xe6\x87\x7d\xb1\x8f\x8c\x79\x3c\x85\x7b\xf0\x68\x47\x76\xaf\xf8\xe9\x49\xcc\xc0\x84\xa8\x47\x89\xfa\x20\xc6\x2f\x7b\x8f\x76\x94\x9a\x02\x1e\x37\x1a\x50\xb7\x07\xab\x79\xdb\x99\x03\xd3\x01\x0a\x73\x80\xfc\x8e\xb2\x80\x9e\x56\x07\x76\xa8\xaa\xf1\x3a\xb0\xed\x41\x2e\x01\x26\x37\x1f\x64\x71\x09\xd5\x11\xc6\x37\xd9\x4a\x15\x31\x6e\x18\x37\x76\xb7\xe3\xab\x2d\x9d\x4c\xb1\xd8\xbb\xe0\xad\x6e\x1e\x60\x9b\xc8\x1e\xfe\x3f\x47\xb1\x04\x81\x5e\x49\xe2\xab\xa0\x3d\xe6\xc3\x33\xc3\x8a\xd4\x65\x06\x60\x1c\x98\x8d\xcd\x83\xb2\x92\xd4\x07\x31\xde\x55\x44\x50\xbd\x98\xdf\x08\x0a\x30\xa5\xaf\xed\xc1\x6e\x7f\x47\x11\x51\x77\xa3\x43\x5e\xbc\x16\x0e\x99\xb3\x0c\x96\x36\x72\x0d\xa5\xe9\x72\x3f\xa0\x2e\x67\xfb\xf0\x53\x70\x07\xd0\xcc\x8f\x89\xe0\xf2\x10\x64\xf4\x18\x91\x2b\xa8\x02\xb8\x63\x2a\xc3\x7c\x9e\x5c\x79\x7a\xb4\x23\x96\xc5\x82\x1b\x57\x19\x28\x31\x9e\x6b\xfb\x4b\x19\xf6\xed\xc3\x4f\x2c\x29\x64\xce\x0d\x53\x99\x2b\x9e\x84\x5c\x7c\x30\x4e\xde\xc8\x88\x9b\x23\x16\xc9\x8d\xcc\xfd\x56\xdd\x69\x9f\x1d\x86\xd4\xc1\x54\xba\x42\x44\x48\x43\x72\x1e\xa0\x4a\xe1\x4a\xf5\x52\x64\x0a\x7c\x83\x67\x24\x39\xb5\x35\xac\x48\x40\x12\x90\x48\x55\x18\xa3\x1e\x5c\xd4\xa5\x15\x25\xfb\x12\x9f\xd4\xbe\x90\x21\xfa\xfe\x7e\xba\x94\x19\x79\x15\xf7\x08\x9b\x5b\xb5\x50\xfd\x30\x38\x0f\x56\x2a\x49\x80\xc0\xa3\x30\x22\xf2\x91\x69\x33\x2d\xa1\xc9\x01\x36\x79\xc2\x9f\x21\xfb\x8a\x60\x3c\x8e\x8f\xd0\x0d\x8c\x2a\x54\xaf\x91\x84\xc0\xcb\x20\xea\x4f\x5e\xa8\xe6\x25\xea\x69\xbf\x10\x06\x19\xe7\x6c\xfe\x4f\x17\xf3\xcb\xd3\xb3\xf9\xf9\x72\xf6\x86\x79\xce\xe1\x08\xd3\x73\xd1\x99\xb5\x86\xab\x22\xb7\xab\xac\x1c\xbd\x4b\x05\xfa\xb4\xe7\x80\x3e\x7e\x05\xab\xef\x4e\x68\xe3\x4a\xcf\xce\x64\x2a\x93\x22\x79\x8b\x7f\xf9\xf4\x69\xca\xfe\xa0\x0a\xed\x93\x95\x64\x78\x31\x56\x3d\xf3\x04\x96\xd8\x8f\xd4\x9e\x16\x1c\x87\x73\x4d\xad\x88\xaa\x6d\x46\x3b\x32\x7a\x99\x7b\x70\x4f\xc7\x43\x4f\x57\x23\x55\xaf\x02\xe7\xb8\x9d\x8c\x0e\xa2\xea\x52\xe5\xc2\xd5\x04\xb1\x2b\x51\xd4\xb6\x25\x57\x17\xc6\x34\x92\xd4\xdb\xbd\x45\xc4\xbc\x86\x00\x0c\x54\xf5\x9c\x5c\x0c\x2a\xda\x19\x7b\xea\xdb\x72\x0d\x78\xc5\x5a\x19\xa0\xee\xb7\xe7\x7a\x63\xcf\x01\x22\x16\x48\x69\x9c\xa3\xdb\xa2\x45\xa2\x76\x02\x29\xab\x2b\xaa\x3a\x70\xfa\xcd\x11\x4c\x09\x78\x0c\x92\x60\xed\x12\xc8\xb3\xcc\x5f\xf1\x56\x1a\x8b\x14\xf6\x60\xb8\xeb\x7e\x97\xce\x30\xcd\x85\xf9\x7c\x17\x76\xcb\x53\x97\x50\x1f\x0b\x77\x0f\xdd\x0e\x88\xf2\x5b\x6a\x71\x9a\x1b\x13\xf0\xdd\xf8\x44\xbb\x12\xfc\x24\x52\x98\xbf\x52\x81\x7d\x04\x29\xd5\xff\x2a\x6c\xc7\xe7\x88\x9d\x36\x89\x95\xeb\xb2\x7e\xf8\xa9\x7a\x1c\xa9\x75\x3c\x8d\x9e\xdd\x2a\x58\xae\x74\xca\xed\x43\x3f\x14\x3c\xf6\x19\x45\x70\x5a\x12\x35\x63\x64\x0a\x98\xc5\x00\x7a\x6d\x8f\x83\x22\x61\x2b\xa1\x73\xf1\x23\xf7\x49\x38\x91\x30\xe2\x7b\x8e\xe8\x6d\xc0\x70\x49\xa1\xb4\xfc\x96\x5c\x49\x25\x60\x33\xaf\x95\x86\x5b\xc2\x5b\xae\x23\x83\xfd\xcf\x21\x2d\x78\x74\x60\x01\x02\x03\xe8\xc5\x46\x4a\x98\xf4\x59\x75\xcd\xe8\xcb\xf7\xec\x2e\xfb\x41\xdc\x91\xcb\x15\x4c\xf5\x3a\xde\xa4\x29\xb0\xae\xa7\x56\x77\x27\xb0\x80\x97\xcc\x34\x05\x5b\xc0\xb5\xf4\x47\xeb\x2d\x87\x3d\x03\xc3\x0e\x65\x76\x09\x38\xad\x9d\xc6\xf8\x84\x45\x7b\xfc\xcd\x94\x31\x85\x84\xb3\x6a\xb3\x3a\xd5\x95\x39\x77\x7f\x4a\x30\xe9\xb1\x4e\xc1\x73\x36\x63\x69\x48\xce\x75\x3e\x65\xe4\x14\xc7\x92\xfe\x30\x15\xe0\xb7\x54\x21\x0c\xe0\x5c\x73\xc4\xd5\x74\x91\x4a\xd0\x03\x93\xa5\x4a\xd1\x9d\xb2\x8e\x29\x05\x45\xfc\xba\xa1\xaf\xbd\x57\x58\x5a\x86\xf9\x47\xe6\x2e\x5d\x61\xca\xae\xdb\x87\xa9\xa4\xf5\x5a\xd1\x17\xc4\x00\x82\x8d\xd5\xc1\x7e\x80\x1c\x6e\xbf\x80\x74\xa5\x55\x4a\x71\x3c\x2d\x65\xe6\x52\xbc\x78\x14\x4d\x30\xc8\x36\xb1\x0b\xac\x23\x15\xd8\x48\x93\xbb\xcb\xbe\x8e\x8c\x81\x13\xb9\xe2\x94\x18\x57\x52\x63\x05\x21\x08\xa3\xfd\xb3\x91\x78\xb5\x47\x18\xa5\x72\x1e\xb3\x33\x91\x28\x4d\x7d\x42\xf8\x48\x24\x58\x22\x12\x2b\x89\x80\x38\xc1\xc7\x78\xa2\x8a\x14\x10\xf6\x13\x90\xc9\x9e\x8b\xe9\x66\xca\xbe\x7a\xf1\xf5\xdf\x9d\x1d\xb1\xaf\x5e\x1f\xb1\xaf\x5e\xbc\xa6\x0a\x33\x7f\x5f\x40\x96\x0d\xcb\x9b\x1a\xd9\xf3\x0c\xd3\x9a\x92\x2c\x56\x47\x20\x8d\x59\x71\x0c\xe4\xb1\xd7\x44\x41\x25\x61\x92\x67\x5b\x58\xf1\x14\xa3\x7f\x4f\x63\xa3\x2b\xc0\xad\xc0\x39\x22\x61\x77\xb8\x47\xd9\x9e\x16\xc9\x8d\xd0\x4d\x9e\xfd\xf2\x20\x30\x65\x93\xaf\xec\x4b\xd6\xc2\x00\x78\x19\xb7\x3b\x11\x4e\xd6\xc8\xf5\x9b\x3e\x1f\xfc\x5b\x22\xb4\xaa\xfa\x11\x9e\x13\x6a\xc9\x42\x75\x25\x48\x78\xf3\x83\x1b\x05\x09\xca\x3a\x96\x92\xa7\xea\x05\x7b\x7e\x82\xc5\x68\x2f\xab\xdf\xa8\x57\xf4\xd4\x5d\x63\xcf\x2f\xb0\x04\xed\x65\xf9\x47\x35\xf0\xad\xe9\x2e\x3e\xbd\x3d\x3b\x35\x4d\xb0\xd7\x14\xdc\x0c\xc1\x0c\xd6\x51\x1b\x8b\x3e\xc8\x9d\xa5\xb6\xdf\xc9\x90\x75\xf2\x92\x9b\x5c\x0b\xae\x89\xe5\xb1\x5d\xfc\xf5\x6c\x56\xb9\x9a\x89\x34\xc6\xfa\x65\x6b\xad\x12\x57\x43\xd0\x75\xf5\xb1\xf4\xbe\xa3\x15\x62\xb7\x29\xc7\xf5\xe7\x73\x1f\xa2\x8a\x75\xb0\x0b\x07\xeb\xfa\xf2\xcd\x28\xcf\xc1\xa5\x65\xe1\xc5\x5d\x99\xcf\x5a\x26\x7b\x57\x15\x2f\x9e\xfa\x10\x86\x25\x21\x71\xf0\xad\x3c\x57\xaa\x6f\xdd\x2c\x14\x59\x63\x8d\x82\x7f\xba\x0d\xc8\x95\xbf\x24\x6a\x27\x23\x0a\xde\xb8\x66\xa1\x7f\x6b\x81\x95\x38\x25\x4b\xfb\xd6\x4a\x5b\x6f\x4a\x44\x53\x76\xb5\xda\x8a\x44\x54\x24\x8e\x56\x92\x2f\xba\x86\x32\x8f\x81\x7d\xd8\x9f\x02\xe8\x5d\xee\xf5\x43\xa4\x88\x41\x60\x1d\xce\x29\x5b\x30\x61\x7e\x28\x44\xc2\x4b\x86\x47\x8e\x10\xb7\x62\x87\xc1\x29\xb4\xa1\xbd\xd3\x57\xb3\xd7\x73\xaa\xa8\xef\x7a\x79\xfa\xe6\xf4\x8f\xb3\x87\x3f\x3f\xfc\x0f\x8a\x74\xed\xfa\x6a\x7e\xd9\xc9\x0a\x77\x7d\x75\xfd\xf0\x7f\x5c\x9e\x2e\x58\x8d\xcd\xad\x4f\x18\x69\x51\xab\xb4\x0e\xdb\x28\x7e\x34\x2f\x88\x20\x48\xbb\x4e\x7d\x69\x1e\x47\x7e\x93\xb6\xfc\xcb\x29\x9c\xff\x91\x42\x83\x0c\x34\x9c\xef\xd1\xdb\x80\xd3\x0f\x5e\x46\x7b\x81\x66\x43\x6c\xaf\x7d\x58\x49\xa5\x52\x01\x20\x00\xc0\x38\x82\x6b\x81\xe7\xa5\x71\x37\xb2\x70\x9f\x45\x86\x9a\x5b\xec\x8c\xac\x64\x09\x25\x39\x15\xc0\xb4\x59\x71\x9d\xbb\x22\x00\x8e\x42\x1d\x53\xbd\x27\x9a\xe9\x5a\x34\x2a\xb3\x8b\x7c\x8b\xcc\x1e\x39\x19\xf0\x6a\x31\xc9\xd3\x81\x68\x62\xdb\xac\x14\xe0\x89\xf1\xc8\x5d\x89\x3d\xf3\x37\x5c\xcf\x06\xa2\xba\xef\xeb\x76\x87\xb0\x23\xe6\xae\xaf\x02\x91\xfd\x30\xef\xa1\x5d\x78\x78\x17\xec\xf8\x18\x8e\xf7\x2e\x3c\x31\x65\x17\x18\x0e\x8c\xd5\x86\xc9\xb4\xfb\xda\x6e\xdf\x3a\x2f\x16\x42\x58\x56\xa4\x83\x40\xb2\x1a\x8e\x8f\xa7\x6c\xbe\x16\x79\x01\xc2\x65\xda\x7b\xb7\x56\x59\xab\x6e\x72\x7b\xd8\x0e\x2e\xc5\x83\x3c\x79\x78\x08\xf8\x99\xfd\xbf\x46\x7c\x05\x88\x62\x50\xdd\x28\xba\xe4\x39\x5f\xcb\x8e\x1a\x70\x9e\x35\x55\xf4\xd8\x9c\x71\x6d\x9a\xa3\xeb\x2b\xba\xca\x58\x10\x05\x98\xdd\x32\xe7\x52\x1e\x43\x9d\x5f\xcb\xb8\xb6\x88\xed\x31\x4e\x23\x11\xba\xd8\x43\xf5\xdc\xdb\x09\xd9\xeb\xeb\xd3\x13\x2a\xaa\x41\xaa\xc1\x0b\x77\xee\xc0\xf8\x70\x19\xe8\xbc\x2c\xba\xc4\x90\xc6\x1e\x84\x57\x78\xfe\xed\xab\xc9\xf3\x7a\x01\x54\x26\xc0\x02\x6c\xa0\x39\x81\x35\x8f\x84\x5c\x43\x73\x11\x2f\x21\x34\x78\xff\xb0\xde\x50\x1e\x51\xcb\xed\x18\x64\xb5\xeb\xf4\x06\x8b\x59\x1b\x57\xc7\x03\xc6\xf9\x44\x98\x9d\x4c\x11\xae\xb3\x48\x5a\x49\x01\x07\x8d\x74\x87\x01\x78\xc3\x98\xa3\x97\x1b\xfe\x8c\x5e\x4c\x5b\x7d\xf1\x23\x8c\x85\x62\xcb\xef\x0b\x07\x1b\xba\x29\x41\x71\x82\x67\x5c\x31\x39\x51\x66\xfc\xf4\x3d\xf4\xd8\xd3\xbf\x60\x0f\x2b\xec\x1f\xd2\xcd\xac\x3a\xd8\xb8\x0c\xc6\x59\xe4\x2a\xa2\xbb\xb2\xc6\xeb\xc6\x93\x84\x36\xee\x2b\x86\xdd\xaa\xe3\x2c\xd1\x6b\x0f\x5d\x37\x34\xc6\x10\xba\xf4\xcc\x59\xb0\xb2\x4a\xe3\x98\xf4\xf8\x2b\x65\x0e\xb0\x1c\x9e\x27\xb9\xa0\x50\x6a\x2b\x56\x07\x2e\x44\x14\xed\xcb\xe7\x2a\xc0\xa9\xec\x27\xf0\x3c\x3c\xaf\x5b\x3b\x95\xcc\x97\x00\xfb\xa8\xc6\x2c\xe1\x77\x2c\x16\x90\xe1\x95\x65\x86\x25\x3c\xcb\x90\xde\xb0\x91\xd7\xb4\x2b\xe2\x54\x68\xbb\xbb\xfd\x86\x41\x30\x48\xee\x1f\xb1\x49\x66\x25\x7f\xa1\x6c\x42\x77\x10\x7c\xa1\x13\x55\x8b\x8d\x66\x5a\xad\x84\x88\xa8\x80\xe8\xcc\x6e\x06\xb5\xb9\x01\x31\xa4\x48\xc8\x8f\xd6\xcf\x36\x65\x1f\x44\x50\xd2\xdb\xc8\x7c\xc2\x8e\x20\x9a\xd7\x6f\x58\x2d\xf2\x04\x45\xfc\x63\x89\xc0\x10\x61\x43\xe8\x06\x85\xdd\x94\x9d\x60\x00\xb6\xac\x25\x27\xa2\xae\xd5\xab\x68\x8c\x78\x6d\xf2\xf6\x0f\xf1\x97\x99\xcd\xcd\xd1\x24\xd1\x90\x69\x43\x3b\x27\xf8\xaf\x9f\x78\x7a\x9b\x7e\x2a\x5d\x18\x67\x07\xe4\xd4\xd8\x40\x61\x9c\x8a\xd2\x5d\x18\xf8\xbd\x0f\xe5\x01\xc6\x29\x1a\x69\x88\x01\x54\x2c\x95\x75\x96\x86\x40\xfb\xe7\xe8\x6a\xb9\x93\x7e\xe9\xae\x66\x5a\xd8\xff\xfd\xdc\x9d\xbd\xbf\x9f\x86\xe9\xca\x9f\x3e\xfd\xda\x3e\x6a\x27\x56\xf9\x1d\x7c\xbe\x4e\x8b\x6e\xf5\xc3\x7b\x2d\x3e\x66\x62\x05\xd7\xce\x90\x24\xb1\xe5\x86\xa9\x15\x24\xdb\x46\x2f\x21\x88\xe0\xf2\x14\xa8\xf4\x26\xc8\x72\x2d\xca\x3c\x08\x99\x0a\x93\x09\xcd\x23\x55\x6f\x4d\x68\x87\xb5\x27\x8e\x6b\x45\x56\x62\x2d\x53\x07\xc7\xe9\x6e\xce\xb9\xde\x14\xf6\xac\x49\x0f\x22\xca\x81\x80\x88\x3f\x04\x22\x4a\x2c\x62\x65\x7a\x01\x2e\x32\xd9\x91\xab\x50\x9a\x64\x67\x82\xb3\xa8\xac\xe4\x3a\xef\x39\x58\x54\x86\xe0\xdb\xf4\xa6\xb4\x08\x20\x94\xc7\x6a\xf5\xa1\x91\x81\x0e\xe0\x0d\x70\xf4\x43\x4c\x83\x0e\x6f\xf4\x26\x56\x3f\x14\x02\x46\xa1\x6a\x8f\x9f\x84\x3d\xd8\xe7\x52\x97\xe0\x05\x5d\x70\x7f\xd7\x69\xc2\x33\xc6\xd9\xf2\xb8\xdb\x85\xf4\xc7\x3e\xd8\x14\x03\xf0\x7f\xb7\x90\x2f\x8f\x49\x6f\x11\xe4\x0f\x70\x52\x7b\x34\x74\x39\xa4\x7b\x2a\x5e\xbe\x03\xf8\x2b\xc6\x98\x07\xbf\x2a\xec\x43\x2e\xc3\x78\x76\x71\x81\x7f\x3c\x59\x9c\xcd\x4e\xcf\xd9\x9f\x26\x93\x32\x95\xda\x27\x27\x7f\x67\xff\x0a\x65\x02\x17\xb3\xe5\xb7\xdf\xbd\x7b\x97\xa2\xc8\xbd\xf1\x1a\xa7\x6a\x32\x81\x9b\xef\x8b\xc5\xe5\x12\x45\xce\xff\x69\x76\x76\xf1\x66\x7e\xe5\xc4\xb4\xc9\x48\xee\x26\xc0\x64\xf0\x91\x27\x59\x2c\xa6\x2b\x95\xb0\xce\xff\xfb\xcf\xe1\xa3\xa3\xc4\x06\xe3\x90\xdc\x41\xca\x76\x4d\x2c\xfe\x6d\xfa\x74\xd2\xdd\x08\xaf\x95\x6a\x95\xfe\xeb\xb5\x52\x23\x35\xc0\xe8\xfe\xfd\x8b\x17\x2f\x7a\x86\xe5\xa5\x7d\x66\x64\xac\xc4\xb4\xb0\xa0\x75\xae\x0f\xab\x4e\xde\xb3\x8e\x95\xc1\x1c\x4a\x28\x04\x4a\x9f\x8e\x53\x08\x2d\xe9\x60\x15\x82\xbd\xf1\x11\xac\x42\x75\x7b\x7b\x88\x85\xf6\xa8\x50\x0e\x65\x15\xba\x4e\x5d\x06\x8a\x88\x2a\xd4\xf8\xb5\x4c\x37\x42\x67\x5a\xa6\x90\xb9\x90\xf0\x71\xd0\x06\x88\x23\xc3\x78\x6f\xf1\xfa\xac\x44\x94\x29\x92\xbe\x6a\xaf\x52\xe8\xa0\xc2\x85\x9a\xe4\xc1\xa4\x47\x81\x0e\x3c\x22\xd8\xa3\x55\x67\xc6\x70\x4d\xcf\x00\xe6\xed\x81\x7a\x3b\x2b\x22\xea\xa3\xb6\xc7\xa6\x3d\x50\x45\x4f\xc5\x43\xa8\x64\x1c\x3b\x8b\xd7\x94\x06\xe8\x7c\xc2\xa8\x42\xf7\xa4\xc0\xd7\x35\xfa\x88\xa4\xb6\x6f\xdb\x04\x65\x43\x83\x95\xf6\x27\xdd\xb7\x6b\xf4\xa7\xa5\x61\x1a\x5b\x11\x2a\x87\x0f\x2e\x79\xd4\x1b\x45\x44\x8e\xb6\x20\x4e\xb1\xfb\x6f\xd2\x71\xf5\xba\x1d\x52\x71\xf5\x38\x2d\x19\x16\xfa\xf1\x85\xaf\x55\xdb\x2f\x42\x28\xe2\x3b\xf6\x79\x00\x5f\x87\x2c\xa5\xbe\xbf\x95\x0f\x7a\x7f\x3f\x2d\xe1\xb4\xfa\x9c\xe8\xba\xfd\x7d\x32\xba\x2d\xa8\x11\xe5\x40\x8e\xbc\x63\x02\xfd\x16\x7e\x38\xb6\x7f\x5f\xde\x65\x4f\x48\x08\x3a\xe4\x0d\xf5\x18\xdd\x7a\xef\x71\xd8\xfb\x6f\x67\xd2\x3c\xe4\x5d\x0e\x38\x14\x0f\x3c\xf2\xd6\xdf\xef\xd0\x03\xef\xe0\x03\x6d\x65\x70\x73\xeb\x1a\x17\x9b\xaa\x9b\x39\x60\x4b\x1b\x1b\x47\x6a\x1a\xea\x76\xb0\x92\x6b\xe5\xe0\x4f\x7e\x7f\x2b\x0c\x84\x1e\xf6\xee\xc9\x40\xe1\x9e\xa9\x63\xbe\xee\x01\xf1\xbd\x16\xab\x87\x7e\xfb\x6d\x97\x88\x8f\xfd\x90\x5a\xae\x06\x0f\x1c\x53\x3b\x8f\xd9\xde\x7e\xf9\xc5\xee\x11\xea\x33\x66\x6f\xb7\x55\x0d\x44\xe7\x5f\xe8\x26\xc1\x0f\x56\x6d\x49\xde\xe7\xff\x26\xd7\xf4\x01\x9d\xef\x11\x0d\xc1\x13\x42\x38\x61\x73\xac\x78\x79\x63\xb4\x96\x40\x16\xaa\x55\x02\x4e\xc6\x05\xcf\xb7\xe4\xba\xf8\x8a\xff\x08\x77\xd2\x05\x48\xa8\x91\x9f\x44\x98\x02\x1e\x89\x50\x4a\x8f\xfa\xc3\x36\xdf\xa6\x11\x07\x6f\xc0\xde\x8c\x70\x7c\x87\xab\x15\x7b\xed\xfa\xd5\xfc\x51\x66\xaf\x64\x2c\xbe\xb9\xcb\x85\xf9\xf4\xe9\xc8\xfe\xc9\xfe\xfb\x58\x15\x69\x6e\x8f\xa5\xf6\x55\x8c\x1f\xfa\x5e\xc1\x84\x65\x86\x6f\x48\x62\x23\xaa\xc9\x63\x58\x40\x28\x58\xd6\x71\x44\x1f\x5e\x4a\x00\x23\x0c\xac\xf5\x4a\xc3\x95\xf9\x5d\x50\x1e\x65\x97\x25\x20\xcc\xeb\xc8\x57\x68\x8a\x03\x8b\x02\x0e\x7b\x55\x84\xec\x14\xa6\x68\x2e\x2a\x61\xd5\x44\x37\x77\xd5\x35\xdc\xaf\xa9\x54\x4c\x20\x7f\xcd\x83\x80\xd8\x0e\x40\xba\x52\x87\x81\xf6\xcc\x63\x44\xba\xe5\xf5\xc4\x34\xbc\x34\x59\x8b\xbc\x40\x14\x54\x49\x00\x72\x5d\xd7\x16\xf2\x9c\x6f\xc8\x62\x06\xbe\xa9\x30\xf3\xb9\x19\x74\x9e\x31\xe8\x10\x20\xd2\x29\xae\x96\x03\x73\xcf\x16\xb5\xc5\xbb\x26\x60\x40\xa6\x99\x3d\xcc\x8d\x64\x6b\xf0\xea\xa8\x3c\x4a\x23\x34\x99\x90\xd9\xdf\xb4\xa3\x86\xf7\x1c\x92\xbf\x04\xbb\xee\x19\x4a\xbc\x91\x0e\xb9\xbf\xca\xb5\x94\x44\x73\xbb\x36\xfe\x18\xd5\x64\xe3\x0a\xdb\x76\x28\xac\xa3\x8d\xc0\xbd\x66\xb7\x2a\x5e\xc7\x13\xc1\x16\x1d\x0a\xb0\xb6\x1d\x89\x54\xfa\x97\xf7\x52\x09\xd2\x6d\xed\x37\x6b\xd5\xf4\x76\x7e\x79\x75\xba\x20\xf3\x69\xed\xcf\x74\x72\xef\x5b\x1e\xcb\x88\xfd\xc3\xd5\xe2\x9c\xa9\x9b\xef\xc5\xaa\xa4\xb7\x0b\x3c\xcb\x89\x07\x53\xad\x96\x03\xc8\x5e\xb3\xdf\x60\x22\x72\xa1\xcd\x51\xf5\x89\x09\x99\x6f\x01\xc0\x69\x12\xcb\x54\xd8\xa5\x49\xa6\x40\x0d\x10\x8b\x29\x7b\x05\xac\xc6\xb1\x34\x98\xdf\x53\x86\xf4\x68\xb9\x46\x08\x16\xa9\x15\x5c\x0f\x55\x99\x74\x70\x1f\x45\x73\x23\x93\x5f\xdd\xcd\xf7\x22\x57\xd8\xdb\xdd\xc3\x4f\xb1\xc4\xfc\x9f\x1c\x76\x97\x8c\xeb\x87\xff\x27\x11\xb9\x56\x66\x3f\x41\x3e\xa4\x47\x36\x61\x16\xc7\x51\xc8\xb3\xe1\x0a\xfe\xa5\x67\x7b\x53\x05\x60\xac\x24\x15\xb9\xdc\x45\xb5\xe8\xdb\x85\xcd\x8e\x04\xb8\xad\xdd\xca\x5d\xe9\x5c\xa4\x0c\xf0\x05\x99\x22\x46\x48\x2a\x3f\x2e\x15\x03\x65\x17\xad\x33\x35\x7d\x9e\x7a\x06\xc8\xf4\x7f\xbd\xf9\xff\x28\x6f\xbe\xc0\x64\x5f\x00\xfb\x7c\xc6\xb3\x6c\xe2\x0f\x91\x13\x00\xa3\x7c\xc6\x56\x3c\x75\x40\x1a\xa9\xd8\xf0\x5c\xee\xa8\x75\x7e\xc1\x76\x3c\x56\xda\x67\xde\x18\x07\xdf\xec\x10\xd3\x5a\x24\xa7\x65\x12\x8f\xdd\x46\x9d\x74\x62\x7b\x28\x69\xfb\xce\xfb\x36\x9a\x00\xc1\x9e\x10\x85\xfc\x23\x17\xdd\x38\x64\x6f\x1d\x06\x9c\x66\x57\xd6\xf7\x20\x45\x19\xda\xe5\x73\x99\xc4\x44\x53\xeb\xb6\xc5\x6a\x63\x8e\x7c\x19\x39\x96\x53\xbb\x0b\x2b\x83\xe0\xbf\xbe\xf8\x95\xdc\x00\xdf\x56\xce\x9a\x17\x16\x73\x2c\x69\x34\xac\x3e\x99\xfe\xd5\xba\x25\x22\xa8\x84\xa5\x76\xc6\x7f\x9c\x5d\x9e\x9f\x9e\xbf\x46\x36\x22\xf4\x32\xec\x4a\x00\xce\x65\xe9\xb8\x01\xbb\x8c\xbf\xff\xc7\xcf\x3d\xc3\xc2\x35\xc3\xb6\x72\xb3\x8d\xef\x58\x24\xcd\x4a\x15\x9a\x6f\x44\x04\xa2\xfe\x50\x13\x90\xf0\x3b\x3b\xa9\x76\xd2\x48\x9f\x87\x6e\xf7\x0d\x53\xe2\x0c\x00\x74\xcb\x4a\x69\x5c\x51\x50\xbd\xd9\x8a\x38\x66\x5b\x69\x72\xba\x22\x73\xf6\xf6\xf4\x6a\x81\xc6\xbf\xf2\xf9\x59\xd6\x75\x45\x1f\x12\x4e\xb8\x70\x95\x96\x95\x11\xa2\x58\xa2\x77\xe9\x33\x0f\x0c\x7b\xf8\x99\xf1\xd8\x31\xb3\x58\xb7\x93\xdb\x4f\x4f\xc4\x5b\x98\x56\x20\xfa\xaa\x94\x08\x33\x18\xa7\xca\x4e\xba\x7c\x72\x74\xed\x0d\x53\x05\x7c\xd6\xa2\x9a\xe6\xbe\x00\x35\xe2\x2c\x55\xd0\x13\xfb\xb2\x56\xf0\x09\x43\xef\xba\xdf\x09\xb2\xa4\x39\x7a\x4f\x05\x55\xd0\x45\x02\x90\x05\x0d\xf4\x21\x17\x64\x72\x05\x21\x30\xc4\x65\xe9\xd2\x3e\x11\xbe\x75\x58\x59\xac\xd2\x8d\xd0\x01\x69\x95\x5d\xc0\xd1\x95\x75\x38\x69\x76\x1a\xe0\x85\x26\xfb\xfa\xc5\x0b\xfb\xfb\xdf\x7d\xf5\xe2\xc8\x63\x91\xed\xcb\x2d\xe1\xf8\xb1\x50\x23\x3a\x82\x74\x43\x64\x9f\xce\xb6\x3c\x75\x2f\x18\x10\x27\x8e\x63\x55\x44\xec\x95\x2a\xd2\x48\xdf\x3d\x33\x2c\xe2\x39\xbf\xe1\x46\x4c\xd9\x2c\x8e\xd9\x87\x54\xdd\xc6\x22\xda\x90\xc8\xae\x65\xc9\x16\x96\xef\x47\x78\xcd\x59\x13\x1a\x72\xa4\x96\xc3\x84\x39\x45\xc6\x7d\x7b\x25\x24\x15\x8d\x27\x07\xb3\x8b\xcd\xed\xe2\x0d\xaf\xa1\x5c\xa6\x1f\xfe\x55\xb8\x32\xed\x96\x00\x9f\x7b\x0f\xee\xe8\x02\x74\xb2\x39\x19\x5e\x0b\x60\x1d\xe0\x60\x88\x0c\x5f\xae\xa4\xa2\x08\x7f\xf6\xf8\x75\x69\x79\x47\x8c\x2f\xa6\xc0\x17\xe3\x58\x3e\xe8\xbb\x1b\x89\x15\x2f\x0f\x7f\x89\xf8\x11\xa6\x52\x22\x32\x05\xcc\x51\xfb\x1d\xfc\x55\xaf\x1f\xfe\x59\xc1\xf4\xb8\xe1\xe9\x0a\x0f\x7a\x08\x8c\xa9\xea\xa3\x3b\x65\x4b\x05\xae\xf8\x4a\xa5\x5b\xb1\x92\x2e\x1b\x84\x54\x8e\x74\xb9\xf0\xb6\xec\x5e\xdc\x14\x17\xf2\xc7\xc6\x72\x13\x94\xcb\x05\x1b\x9c\xc3\x0e\x08\xff\x4a\xec\x74\x9f\xe5\xfb\x29\xd1\xc3\xda\xbf\x1f\xfc\x30\x78\x1c\xef\xd7\xa3\x62\x65\xf5\x67\xfe\x34\x0e\xfb\x22\x2a\x1b\xc3\x4f\xc2\x7f\x27\x53\x76\xae\x18\xcf\x73\x91\x64\x79\xa9\x20\xe1\x91\xf0\xc4\x4c\x7c\xd5\x36\x8e\xbf\xa9\xa8\x2a\x42\xc4\x15\x8f\x21\x13\x09\x3b\xdd\xee\x3c\x17\x6d\xe3\x1d\x04\x60\x0b\x6e\x6c\xf6\x6c\x9d\xb2\xd9\xda\x3a\x56\xad\x5a\xee\x54\x01\x1b\x8a\x4f\x34\xd6\x45\xea\x0f\x29\x38\xf8\x9e\x50\x6f\xc2\x8b\x7c\x3b\xc1\xab\x04\xb5\xf7\xa3\xb3\x06\xfa\x99\x64\x25\x54\xc9\x2a\x16\x3c\x2d\x48\xa4\xa9\x27\x5c\x2f\x44\x8b\x8f\xd7\xb5\x54\xa0\xf8\x12\xc4\x84\xa8\x6d\xb6\xd3\x9a\x27\xd5\x3a\x60\x3e\xd3\x42\xa0\x0e\xfa\xf4\x29\xa3\x05\xb5\x28\x4c\x1d\x3f\x19\x67\x39\x1e\x1b\x76\xdc\xe9\x5b\x0b\x99\xfb\xea\xd9\x14\x20\x20\x44\x82\x53\x36\xf7\x94\x1f\xfb\x2f\xe2\x37\x15\x6a\x14\xe0\xba\x78\xf0\x1e\x23\x12\x9c\xb5\x08\xd9\xd2\xf2\x06\xed\x84\x05\xf8\x0e\xaa\x0b\x38\xa4\x76\xea\x66\x0f\x7f\xb5\xde\xd4\x1e\xf8\x98\x53\x76\x54\xaf\x55\xb3\x2f\x15\x19\xec\x7e\x28\x84\xf4\x99\xc3\x39\xef\x9c\xcd\x05\x31\x9b\x3d\xe5\x19\x62\xcf\xd8\x53\x49\x92\x89\x1f\x29\xc0\x02\x6a\x15\x85\xe0\x65\x2e\x74\xca\x81\x22\xb7\xf6\x36\x7f\xd3\xf8\x9c\x03\x7a\xc4\x1b\xe1\x97\x0c\x11\x39\xc6\x40\xcc\xbf\x70\xf9\xc9\x7b\x2b\x52\xd8\x92\xc7\xb9\xd0\x22\x9a\x32\xc0\xd4\xd5\x32\xe1\x1a\x90\xb7\xd8\x8a\x9b\x60\xad\xae\x19\x09\xb5\x79\x59\x0c\x68\x32\x7b\xab\x0c\x94\x84\x4b\xfb\x65\x27\x00\xb4\x60\x3f\xee\xdd\x57\xcc\xdd\xab\xb0\x6f\xf0\xb1\xd9\xc5\xa9\x77\x81\x3a\x1b\x7e\x0d\x4f\xde\xdc\xd9\x69\xce\x91\x4e\x76\xbf\x3f\xb0\x22\xef\xbe\x82\x94\x05\xb0\x6e\xf7\x35\xfe\xf7\x94\xb1\x7f\x44\xf7\x37\x49\x04\xf8\xc3\x1f\xfc\xe2\xe8\x1e\x2f\xf3\xcc\x80\x45\xaa\xc8\x1d\x16\xee\x6d\xea\x1f\xaa\x96\xab\x4c\x8b\x9d\x48\x73\xc6\xa3\x08\x80\x87\x79\xdc\x34\xe1\x46\xd8\xd6\x8e\x67\x7f\xca\x16\xd6\x9f\xea\xda\xb3\x12\xb9\xd1\x1c\x36\x2d\xa7\xac\x62\x3c\x4d\x23\xd7\x9b\x15\x4f\xbb\x37\x9f\x91\x2b\xe6\xc3\xcf\x7e\x8e\xf9\xf2\xd1\xc6\x34\x53\xa6\x9c\x61\x7b\xce\xd4\xce\xd1\x63\xba\xef\x1d\xd6\x2d\x80\xfe\x76\x69\x3b\x2e\x31\x9d\xfa\x54\x6b\xec\x9a\x76\xde\x01\x37\x26\x5b\xd8\xb9\x86\x19\xaf\x06\x72\xf5\x12\x0c\xe8\xda\xaf\xb7\x69\xbb\x29\x6e\x4c\x2e\xf3\x42\x12\xd9\x50\xf0\x59\x97\x93\x88\x7b\x58\x30\xe5\xe7\x5d\xf8\xa8\x9d\x02\x2a\x94\xd3\xda\x76\xf7\xf5\x11\x4e\x3e\xc1\xbb\x56\xd2\x08\xf1\x4b\x95\x01\xb1\x90\x8b\xec\xfe\xf9\xf5\x94\xb1\x4b\x3b\x05\x45\x1a\xf1\x44\x19\x87\x79\x05\x79\xd3\x3c\x45\x33\x5c\x7e\xa2\x2a\x98\x48\x57\x42\x23\xb0\x8e\xb3\xca\xcb\x13\x3b\x89\xa8\x7b\x35\xd8\xa7\xd0\x1e\x1e\xc9\x95\x9d\x98\xd2\x4c\xd9\x89\xc8\x94\x34\x9e\x9e\x8e\xb2\x1a\xa8\x3b\x45\xc2\x8c\xdd\x40\x60\x3a\xc2\xce\xa5\x4c\xcd\x3d\xb4\xef\xb5\xea\x9b\x8a\xf0\x0d\xe2\x31\xcc\xc1\x44\xec\x6f\x5f\xc4\xd2\xc7\xb5\xf5\x2c\x5e\xb2\x53\x4f\x36\xb9\xcd\xf3\xac\x0e\x3b\x8a\xc8\xf3\x22\x7a\xc9\x82\x47\x4c\xed\x19\xe3\x18\x5e\xdd\x87\x4d\xd6\xc1\x7d\x59\x23\xc8\xf0\xc2\x6c\x27\x8d\x7a\xc9\x96\x0d\x84\x54\xd0\xea\x79\x30\x9d\x46\x48\xd4\xd2\x7e\xba\x4c\x8c\xf0\xb9\xb3\xd2\x84\xcd\x0c\x26\x92\x28\x43\x46\x1f\x7c\x1f\x11\x94\x01\x40\x4f\x42\x46\x9a\x67\x46\xe4\xef\x81\xea\xf7\xfd\xcd\xdd\x7b\x9f\x6e\x42\x5e\x25\x63\x07\x10\x8e\x01\x43\xeb\xf5\xc0\x54\x90\xba\x47\x49\xee\x36\x13\xcb\x32\x72\x2e\xa1\x22\x21\x56\xe4\xfd\x92\x33\xc5\xa3\x51\xd6\x5a\xb4\xab\xb0\x1e\xd0\xad\x61\xee\xca\x90\xbd\xa1\xa9\xac\xde\xec\x45\x30\x22\xc5\x5c\xfb\x6e\xe1\x17\xea\x56\xe8\x2b\x08\x3c\x8c\x9a\x89\x5a\xe6\x82\xad\x0a\x1d\xb3\x1b\x15\x01\xc7\xf1\xab\xd3\x37\x73\xf8\x5e\x05\x8f\x20\xc4\x9b\x47\xaa\xa0\x12\x72\x5f\x6b\xbe\x03\x8a\x55\x8d\x1e\x2d\x48\x4a\x15\x9b\x5d\xfe\xfe\xfa\xf4\xed\x02\x88\x26\xc5\x8f\xf6\x97\x94\x33\xc3\xad\x63\xda\x4d\x75\x8f\x06\x79\x4e\x7e\x60\x3e\x32\x9e\x2d\x00\xa3\x60\xdd\x96\x40\xec\x52\x18\xaf\xc4\x47\x31\x87\xa0\xe4\xfc\x51\x66\x8c\xeb\xd5\x56\xee\x44\x75\xf9\xe7\x42\xe8\x03\x92\x8b\x17\x65\xe3\x3f\x9e\x5e\x78\x64\xfa\x34\x7f\xf8\x39\x19\x90\x6d\xfc\xa7\xc9\x84\xc7\xb1\xba\x9d\x64\x5c\x96\xc4\xe0\x13\xdc\x81\xff\x3b\x9b\x4c\x22\x69\xa8\xdf\xbf\x1b\x87\x3b\xd0\xa1\x69\xbc\xa4\x54\x95\x75\x05\x50\xb4\x91\xaa\x89\xbf\xb9\xf3\xff\x86\x9b\x39\xff\x0f\xc0\xd5\x83\x7f\x84\xb0\xf3\xdf\x91\xeb\x16\xa1\xf8\xec\xfa\xcd\xf2\xf4\x62\x76\xb9\xfc\xf5\xab\xc5\xe5\xd9\xe4\x64\xb6\x9c\xb1\xe3\xc5\xf9\x72\x7e\xbe\x64\xdf\x9e\x9e\x9c\xcc\xcf\xbf\x1b\x27\xf0\xe2\xf2\xf4\xed\x6c\x39\x67\x20\xe9\x20\x09\x9b\x58\xdd\xf0\xd8\x43\x07\x7f\x57\x1e\x5a\xff\xe4\x4b\xa2\xcc\x74\x3a\xfd\x8e\xfd\xc9\xff\xdd\x3f\x48\x68\xf9\x53\x89\x1a\x0c\x82\x25\x4a\x84\x95\xaf\x94\xa8\x9c\xc8\xf2\xd1\x6a\xdd\xf8\x8e\xb0\x72\x2b\xa3\x48\xa4\xe3\xba\x86\xeb\x37\xd1\xc4\xe1\xe3\x50\x2d\x73\x45\x25\x95\xf3\x0d\x9d\xea\xcc\xc9\x45\x2c\x2f\xa8\x7a\x32\x98\xd3\xe4\x36\xec\xca\xb2\xe8\xc6\x21\x1f\x19\x21\xa3\x62\x13\x23\x84\x8c\x64\xec\x04\x9c\x51\xcd\xcd\x96\xb4\x1a\xe0\x28\xed\xb2\x46\xda\x9d\x65\x55\xe0\x14\x50\xa7\x08\x49\x0e\x91\xaa\xe6\xae\x21\x48\x1c\x51\xe6\x1f\x4a\xa6\x06\x84\x04\x9c\x23\x45\x52\x92\x88\x06\x45\x5e\x62\x7b\xb1\x35\x97\x34\xda\xc0\x9a\xc7\x5b\x0e\x3b\x4c\x0d\x0f\x7a\x2f\x8d\xb4\x5d\x4f\x45\x62\x4d\xbf\x87\x92\x63\x9a\x10\x01\x9e\xf2\xcb\x2a\xff\x73\x54\x47\xcb\xbd\x61\x5c\x22\xd3\xcd\x1d\x50\x05\xab\xdb\x34\x56\x9c\x76\x41\xf1\x31\xf8\xe3\x5a\x68\xf0\x95\xed\xa9\xc3\xb7\x6b\x97\xbd\x5a\xb3\xc9\x64\xd7\x79\x2d\x46\x37\xdc\x8d\x6d\xe1\x8f\x9d\x63\xdb\xb9\x14\xa9\xc9\xc8\x86\x59\x41\x3c\x7f\x9c\x15\x44\x93\xce\xef\xb4\xf3\x1b\x85\xa6\x34\xb7\x05\xb4\x25\xab\x64\x03\x40\xf1\x51\x5d\x8c\x84\x75\x4b\xa9\x61\xb1\xbf\xc6\x5b\x2a\x37\xcd\xbb\x1a\x64\x77\x23\x61\x78\xa6\x15\xdd\xe5\x48\x1a\xca\x49\x8a\x04\x5e\x27\xd2\xba\xc9\x8f\x00\xda\x11\xc9\x2f\xe0\xae\xc1\xe2\x3c\x6e\x98\x6a\x29\x5e\x8f\x68\x4a\xc5\x40\xfa\x53\xc0\x3a\x59\x4b\x7d\x39\x5e\x57\xd3\xbd\x52\x3d\x09\x4c\x03\x88\x0c\x8e\x8f\x1c\x81\xa1\x3c\x65\xea\x36\x2d\xff\x48\x27\xb4\x91\x45\x80\x0f\x3f\xd7\x8a\x1a\x6b\xc8\xdc\x47\xe8\xf1\xd6\x8b\x1e\x1f\xfe\x9a\x69\xa9\xa6\xef\x52\xc7\x4c\xf4\x2e\xbd\x36\x82\xfd\xb7\xd5\xba\x8c\x62\x82\x99\x13\xb4\xe8\xbf\x79\x00\x05\x0c\x62\x7a\x39\xa6\xae\x88\x42\x98\xee\x18\x8d\x7a\xc7\xdd\x68\xd4\x87\xe8\xf1\xa3\xe1\x7b\xdb\x32\x10\x35\xfb\x3b\x46\xa3\x67\x18\xbc\x86\xee\x11\x30\xe4\xf7\xe3\x05\x91\xdf\xd0\x2d\x35\x0f\xc1\xa0\x1b\x2e\x3f\x12\x33\x51\xf0\xd5\xd6\xa5\xe0\xc9\x94\x3d\x43\xf0\xcd\x67\x35\xe6\x31\xfc\xe3\x33\x96\x69\x95\x09\x4d\x22\x99\xaf\x78\xe4\x19\xa7\x92\x4a\x10\x80\x63\xfa\x84\x1b\x2b\x41\x4b\x11\xf1\x48\x78\xa9\x84\x55\x08\xe2\x3f\xea\xb3\x16\xe9\x8e\xd9\x63\xe4\xb3\xfb\xfb\xe9\x85\x33\xd5\x67\xd5\x9a\x6d\x48\x47\x93\x16\xa4\x97\x1a\xa4\xae\x80\x0f\x92\xdc\x48\x48\x40\x68\x13\x9a\xa2\xa3\xe2\xc0\x3f\xd3\x22\x26\x52\x54\x20\xf4\x4b\xe8\x83\xdf\x88\x57\x83\x7e\x13\xcb\x0b\x8d\x54\xd4\xeb\x35\xa4\x1f\xa9\x58\x30\xb1\xda\xc2\xad\x51\x95\xcb\x21\xd2\x5c\xdf\x05\x78\x12\x27\xd5\xf6\x43\xba\x34\xe8\x7b\x71\x88\x96\xc2\x35\x8d\x66\x02\xd3\x20\xbc\x9e\xea\xaa\x26\x72\x57\xc7\xe9\x96\x93\x5a\xda\x7b\x21\xe3\xf1\xec\x54\x6b\x2d\x20\xac\x6e\x0f\xba\x44\xc3\x8d\x7e\xf8\x29\x97\x86\xa9\x82\x65\x7c\x43\x0c\xe1\x7e\xb5\x82\x34\xd4\x49\x79\xff\xd9\x87\x9f\x09\xb8\xff\x56\xb1\xfe\x24\x62\x04\xf5\xb2\xf7\x9b\x55\x3c\x70\x65\x94\x83\xda\x99\x5b\x75\x02\xfb\x38\x32\xfd\x0d\xd6\x19\xdc\x57\x56\x4a\x5d\x56\x0e\xa1\x5a\x8d\xdc\x61\xcb\x83\x4d\xd2\x85\xdb\x5e\x02\x93\xd7\x32\x14\x06\x49\x1c\x78\x62\x3a\x44\x03\x9c\x04\x3c\x66\xd2\x69\x1a\x89\x8f\x9f\x3e\x1d\x31\x2d\xb8\x51\x29\x92\xd2\x7c\x94\x79\x6d\xde\x1f\x59\x37\x21\x7f\x6f\x72\x9e\x17\xa6\x7c\xe4\x0a\xfe\x49\x7e\x7b\x95\x39\xed\x0a\x13\x65\x8f\x63\x07\x29\xec\xec\xde\x80\x13\x61\x8f\x00\x6a\x93\x0a\x24\x10\xdb\x94\x4c\x73\xb1\x19\xc9\x50\xe5\x08\x31\x99\x4c\xb7\x42\xcb\x1c\x29\x48\x65\x5a\x66\x99\x93\x9b\x51\x22\xd3\x2d\x9c\x23\xb7\xc2\xd5\x4c\xca\xd4\x67\x9d\xa6\x55\x96\x7a\xb7\xd6\x5d\x99\x9d\xe9\x77\x97\xe3\x57\xef\xaf\x96\xb3\xd7\xa7\xe7\xaf\xdf\x2f\x4f\xcf\xe6\x8b\xeb\xa5\x5f\x0d\xc9\x57\x8d\x39\x99\x95\x76\x17\xd7\x6c\xdf\x68\x3a\xe5\x1f\x64\xeb\xe5\xf2\xfa\xe2\x73\xda\x4a\xc8\x6f\xb5\x75\x3c\x2b\x5a\xcc\x4d\x5e\xdd\x20\x13\x4d\x1f\xfe\x2d\xce\x65\x12\xde\xf7\x75\x08\xc3\x0a\x26\xba\x68\xc3\x0b\xf3\xc7\xee\x87\x7f\x81\x90\x0b\x5c\xf7\x41\x53\x62\x76\x3b\xd0\xff\xae\x45\x89\x5c\xdc\x63\xb5\xfa\x30\xd2\xdd\x19\xb4\xb4\x76\x35\xa5\xfa\xef\xdb\x12\xdd\xec\xd8\xcb\x53\x95\x10\x01\x36\xdb\x68\x5c\x84\x24\x55\x29\xbb\xe1\x46\xae\xfa\x22\x0c\x8d\x44\x9c\x9b\x87\x9f\x8c\x24\x0f\xa9\xa9\x22\xef\x6f\xa8\x06\x70\x93\x21\xa3\x32\xf1\xdd\x45\xb5\x1c\x06\x4a\xd7\xe1\xf1\xe1\x67\x56\xfb\x8c\x1c\x9d\xab\x0f\x74\x51\x73\x81\x86\xa9\x21\x9f\xa7\xc6\xa6\xce\xb1\x44\x34\xb7\xe7\x2b\xfa\xc8\x1f\xba\xec\x11\xf1\x76\xad\x97\x86\x29\x07\xd4\x21\x04\x6f\x80\xad\x9f\x46\x58\x01\x22\xca\x14\x86\xfb\xfb\xe9\xb9\x4a\xbf\xb1\xaf\xdf\xe5\x7e\x98\x19\xc6\x35\xc8\x85\xab\x9a\x06\xa0\xa5\x5b\x04\x61\x42\xbe\xed\xde\x4d\x28\xdb\x69\xb4\x0b\xe8\x38\xdd\xaa\x7b\xbc\x88\x76\x4a\x53\xb3\x0e\x72\xd8\xa9\x56\xc8\x78\x4d\xb6\x34\xb2\x63\xdd\xec\x21\xa4\x54\xab\x22\x73\x71\x5b\xbb\x51\x90\x50\xb1\x50\x68\x4e\x2d\x03\x2b\xf8\xad\xb5\x9d\x16\x99\x72\x44\x42\xe3\xc2\x85\xd5\xb7\x6a\x7d\x25\xea\xcb\x17\xc6\x7e\x8c\xbd\xdf\x65\x43\x18\xd5\x8f\x3d\x69\x64\xa7\x80\x50\x20\x62\x3c\xcf\xb5\xbc\x01\xf4\xfc\x48\x9a\x0f\xef\x61\x94\x9e\x79\xba\x11\xea\x9c\x8a\x6d\x14\x4b\x05\x70\x9b\x41\xd2\x4b\xad\xbd\xa3\x1c\x19\xae\xbc\x74\xf0\x0e\xd3\x1d\x34\x1f\xad\x1a\x37\xa4\xc3\xf4\xfa\xb6\xa3\x95\x42\x59\xe0\x61\x3a\x5d\xd3\x1e\x95\x76\x49\xf2\x4c\x7d\x0c\xbf\x4d\xfa\xbb\xe5\x25\x0f\x09\xc3\x96\xe4\x57\x34\x56\x5e\x87\x14\x4a\x40\x07\xcf\x8f\x2e\xd2\x49\xce\xc9\x20\x31\xd9\x28\xa5\xc7\xb8\x0f\xaa\x7c\x10\x8a\xd7\x60\xe0\x2e\xb7\xc9\xf4\x6d\x23\x9d\x8d\xfb\xc1\xbe\x0e\xc6\xf7\x1a\x08\x0b\x35\x06\x65\x6b\x28\x15\xd3\x28\xe6\xa5\x7e\xee\x70\x28\x0c\x18\x2e\xa8\x6f\x17\xad\xa5\x18\x77\x8a\x9a\x74\x42\xa2\x0d\x45\x41\x73\xc2\xde\xe3\xf3\xef\x37\x85\x8c\xd8\xe9\xf9\xb8\x34\x0b\x2f\xe3\x31\x8d\xa9\xb7\x35\xff\x98\x43\xe2\x98\xcf\x8e\xa5\xc6\x04\x42\xe5\xe4\x9e\x5b\x45\xb7\xa9\xcf\x45\xd2\x93\x30\x12\x86\x72\x09\xbb\x20\x0f\x3a\x99\x17\x02\x48\x1a\x32\xd2\xb0\xf2\x6c\x4d\x4e\x12\xb1\xc3\x82\x28\x52\x88\x6b\x4b\xc5\x2a\x8c\xd9\x96\x84\x9b\x41\x70\x2f\x92\xa6\x2b\x32\xed\x8b\x45\x05\xb3\xed\xab\xe8\x9e\x0f\xb0\x52\xbe\x45\x8f\x36\x26\x53\x07\x68\x73\xb0\x5e\x96\x56\xc4\x1c\xa3\x6c\x70\xa1\x78\x38\xff\x3c\x0b\x21\x47\xa8\x7c\x3f\xca\x16\x6f\x48\x89\x17\x13\x48\x3a\xc4\xa0\x72\x4c\x9e\xd5\x11\x74\x0e\xb5\x2b\x18\xa0\x3d\x89\x43\xec\x2b\x5f\xd6\x9a\xcc\x9c\xa9\x9b\xb0\xf7\x8a\xec\xc8\x8c\x53\x35\x6e\x5e\x3c\x7a\x4e\x04\x73\x61\x84\xc2\xd1\xdd\xdb\x7b\xc3\x07\x28\x1b\xdb\x35\x7b\xd0\x0f\xdf\xe0\x30\x9d\x41\x2c\xbd\xf1\x1e\x87\x6b\x0d\x3f\xb0\xb1\x4a\x87\x68\xcc\x3b\xb2\x53\x00\xe3\x82\x5a\x01\x73\xae\x73\xe0\x3a\x1b\xb7\x6d\xd9\x66\xb4\xb3\x87\xa4\xb9\x64\xd6\x44\xff\x39\x8d\x6e\x57\x8c\x3b\x1c\x9a\x5c\x65\x19\x9d\x76\xc6\x35\x8f\xd4\x73\x4e\xf0\x68\xba\xc6\x8c\x43\xcd\xdb\x57\x4c\x8b\x48\x6a\xb1\x22\x4f\xe6\x20\x8d\x71\x28\x33\x2a\x9f\x96\x2a\x45\xc4\xee\x76\x1d\xd6\xcd\x1e\xd7\x25\x97\xee\x9d\x8b\xf1\x2e\x7a\xc7\x7b\xde\x2a\xea\xbb\xcd\x1d\x65\xf1\x4a\xa5\xa9\x58\x41\xfd\x0b\xa2\x09\x81\x6f\x25\xf4\x11\xd6\x64\x6e\x2a\xb2\xc9\x2d\x7d\x53\x4d\xa8\x00\x5e\xd0\x61\xf7\x48\xf0\x6c\xbf\x98\x21\x97\x47\x7b\xec\xb9\x84\xd8\xbb\x6c\xdc\xd7\x51\x70\x0a\x61\x96\x78\x3e\xfd\x90\xaa\xdb\xd4\x73\x0c\x92\x97\xef\x48\x0a\xe8\xa2\x74\xc6\x95\xfd\x51\x3e\x5d\x49\x50\x4b\x1e\x82\x12\x47\x84\x49\xb4\xd7\xe3\x62\xf8\x85\x26\xf3\x99\xe8\x06\x24\x12\xd2\xe5\x1b\xca\x67\x2b\xba\x10\xc5\x8a\x5c\x96\x25\x07\x64\x7b\xf2\xd4\x70\x05\xf9\xef\xa6\x1f\x44\xa9\x70\x78\x54\x0e\x48\x6a\x50\x7a\x2a\x2d\xa9\x84\x0b\xa6\x6e\xf0\xc7\x40\xff\x16\xdd\x20\x51\xed\x8d\x76\x42\xdf\x28\x23\xa0\xaa\xcc\x25\x15\x42\x11\xc8\x58\x21\x1d\xd9\x88\xbb\x2e\x90\x8e\x3b\xf2\x00\x74\x25\x93\xf6\x26\x8e\xd5\xd3\x55\xda\x7c\xfa\xc4\x9e\x43\x2d\x16\xda\x00\xd7\xa5\x15\x95\xe0\x55\xae\x65\xba\xf9\xf4\x89\xa2\x6a\xde\x97\xb5\xab\x91\x13\x92\xe2\x48\xcb\xb2\xcc\xdf\xf5\xbe\xb1\x9f\x98\x9d\x23\x43\x53\x81\xdb\x9b\x8f\x4e\x10\xbe\xbf\x9f\x7e\x23\x53\xae\x5d\x22\x4b\xf9\x5a\xef\xef\xa7\x8d\x6e\x8c\x7a\xc9\xf7\xf7\xd3\xe3\x57\x1e\x68\x33\x93\x44\x5b\xfb\x2a\x82\x27\xfb\x45\x75\x61\xd3\x21\xcd\x26\x42\x21\xf6\x4b\x54\x45\x9a\x2f\xd6\xfe\xb8\xfc\xe9\x53\x59\x43\x49\x65\x90\xd1\x8d\x22\x0a\xe4\xc0\x36\xc1\x84\x53\x0f\xaa\xd8\x9d\x7f\xba\xff\x7c\x67\x46\xea\xfd\xfd\xf4\x44\x9a\x0f\x00\x9d\xf8\xe9\x13\x53\x6b\xe6\xfe\xe2\x70\x56\x69\x2d\x61\x33\x1c\xb0\xb0\x19\xa9\x4c\xdd\xa6\xde\xb0\x8e\x24\xb3\xc6\x93\xd6\x05\x21\x73\xc9\x5b\x53\x87\xde\xa5\xcb\xd3\x8b\x97\xac\x44\x68\x7c\xe5\x07\x3c\xc0\x6a\xf4\x40\x8b\x01\x9a\x03\x40\x33\x60\x8d\x71\x08\xb5\xd8\xf1\x3e\xdb\x54\x43\x46\x5f\xb7\xee\x26\x2a\x63\xae\x22\x65\xea\xa5\x8e\x29\xc0\x89\x10\xe0\x8c\xf4\x6c\x81\xcb\xf2\x77\xe9\xbb\x1c\xfe\x1f\x87\xa1\x84\x10\xc5\x2a\x41\x5f\x4e\xc8\x6e\xb7\x02\x6b\x8b\xdf\xd9\x96\x17\x85\xd9\x96\x26\xbe\xfb\x1b\x38\x38\x41\x19\xba\x2f\xf5\xbd\x95\xf9\x56\x62\x03\x74\x4e\xad\xef\x03\x28\x1b\xae\x32\x0a\xeb\xa4\xed\xf2\xe3\x30\xf7\x57\x2a\x12\x90\xe4\xe8\x07\xa3\xb4\xa4\xfe\x1e\x8c\x10\xad\x40\x62\x65\x36\xbc\xa9\x49\x69\x87\xeb\x64\x91\xc8\xf2\xad\xe3\xe1\x2d\xb1\x3b\xbb\xdf\x5d\x38\x54\xf8\xda\x82\xb1\xc2\x65\xd9\x57\x42\x1a\x20\xca\x07\x14\x84\xd6\xe1\x7a\xf8\xd9\x57\xed\x23\xda\x9f\x3d\xb5\x68\xbb\x6e\xda\xb1\x42\xf8\x26\xa8\x80\xf5\x85\x60\xca\x93\x33\x4f\xd6\x0a\x20\x89\x60\x85\xed\x1d\x2d\x9c\x39\x4d\xc0\xb1\x9b\xc0\xea\x12\x5d\x8c\x1a\xb3\x00\xa4\xb4\x86\x4f\x0a\xb8\x49\x6a\xe3\x50\x27\x20\x31\x1c\x88\xca\x7b\xe7\x1a\xce\xb2\xe2\x51\x60\xaa\xa1\x38\x7c\x13\x2d\xf2\x0e\x80\x57\xbd\xbf\x9f\xbe\xc2\x5a\x53\xbb\xbe\xa5\xf1\x1d\xbb\x55\xfa\x83\x61\x45\x06\xb0\x06\xaf\x58\xb0\x97\xdb\x55\xec\x8c\x7f\x94\x49\x91\x94\xcc\xc0\x53\xc4\xb8\x72\xe5\x05\xd2\xb0\x06\x73\x70\xc7\xfc\xaa\xf4\xae\x8b\x14\x0e\x67\xcc\x28\xc4\x9f\xe2\xf9\xc3\xcf\xae\xa6\xfb\xf8\x15\xf3\x2e\x40\xab\xfa\x2b\x51\x78\x1c\x56\x3b\xc7\xf6\xd4\xf7\xf7\xda\x5d\x56\x99\x96\xde\x5e\xba\x7b\xac\x52\xde\x7f\x79\x92\xfe\xc2\xd5\xa6\x6e\xed\x60\x9b\xc6\x83\xbb\x18\x23\x0c\x43\x89\x37\x8c\xf5\xb7\x1d\x16\xee\x35\x40\xba\x1b\x52\x83\xf7\x8d\xce\xe0\xa0\xe7\x3d\xa4\x31\xc9\x83\xa4\x90\xc3\xb2\x0a\xed\x14\x11\x49\x7d\xbf\x3e\x13\x49\xef\x76\x1d\x34\xc2\xdd\x3a\x68\xd4\xa1\x28\xb0\x77\x58\x5f\xeb\x6d\x22\xd1\xd2\xcd\x61\xfa\xce\x0e\x52\x38\x5a\xdb\x95\xfc\xd1\x8e\xc9\x47\xc8\xef\x28\x12\xff\xaa\x4c\xf0\x96\xc7\x9d\xb2\x40\xb2\xc1\xa1\x7e\x97\x9e\x2b\x80\x14\x02\x20\xaa\x00\xbe\x88\xfa\x22\xff\x76\xfa\x62\xfa\xe2\xbf\x8c\xe3\xb0\xb0\x0a\x55\x24\x62\x84\x48\x67\xfe\x9f\xde\x71\x1e\x72\x5e\xec\x16\xd1\x57\xec\x78\x7f\x3f\x5d\xf8\x7c\x3a\x27\xa1\xb3\x42\xaf\xe5\xf9\x95\x4a\xf0\x5b\x1c\xac\x41\xa6\x2c\xd3\x6a\xa3\xe9\x72\xd4\x96\x46\x22\xb1\x3e\x5d\x57\x88\xac\xa5\x91\x29\x56\x2b\x21\xe8\x23\x73\x4b\x93\x1b\x91\x4c\x4c\xb1\x12\x11\x59\x65\xba\x97\xfd\x8f\x05\x12\x37\x00\x62\x03\x87\x25\xa6\xa0\x04\x20\xc6\x34\x4c\x5a\x77\x43\x4c\x59\x3e\x80\x10\xdb\x3f\x14\x2e\xdb\x50\x01\x5d\x24\x66\x63\xa6\x45\x7c\xb8\x59\x07\x9b\xe3\x94\xc3\x3d\xa9\x37\x6b\xa8\x15\x83\xcb\x2d\xf6\x9b\xee\x15\x55\xd0\x5d\xbf\x74\x19\x16\x80\x02\x7d\xa1\x74\x6e\x57\x81\xfe\xec\x08\xaa\xe5\x90\xac\x09\x8f\x39\x6d\xfc\x02\xd6\x99\x46\xd1\xf2\x34\x99\x57\x61\x9f\xc5\x2c\x09\xbf\xd9\xe1\x66\xb1\x54\x39\x8f\xab\x83\x95\x07\x02\xea\xce\xa8\xd8\x17\x86\x9b\xc8\x9e\x30\x7f\xdd\x3f\x80\x30\xbe\xe2\xb7\x28\xbb\xd3\x73\x43\x4d\xb5\xa0\x2f\xf0\x11\x6c\x1b\xae\x0f\xbc\x95\x3d\xd7\x09\x2d\x2d\x7a\x6e\x18\x3a\x74\xb0\xe7\xf6\x20\x8b\xf5\x97\x9d\x21\x21\x52\x65\x53\x42\x87\x05\x79\x63\x59\x9c\x96\x27\xd0\x96\xf3\xa7\xbb\x7b\x75\xbf\xd4\x0f\x63\xc8\xdc\x54\x81\x6c\xe1\x55\x48\x87\xdf\xe7\x95\x87\xcb\xab\xd5\xce\x35\xa9\xbe\x20\xd4\xfb\xd3\x8d\xc3\xe9\x55\x4e\x39\x70\x0e\x96\xb9\xd8\xb4\x43\x88\x24\xd6\xee\x1e\x8c\xbb\x44\xdb\x42\xc7\x47\x2c\x8b\x05\x37\xc2\xe3\x59\x33\x8e\x7f\x05\xe6\x73\x80\xb0\x79\xf9\xeb\x5f\xdf\xa9\x42\xbf\xd7\x22\x53\xd3\x95\x4a\xe8\xde\xa2\x0e\x9f\x90\x6b\x97\xd9\xeb\xcb\x37\x2e\x31\x97\xff\x06\xf1\xa3\x1f\xfe\x5f\xee\x7f\x39\xaa\x73\x92\xb7\x2b\x23\xfb\xe3\x5c\x36\xeb\xba\xc2\xf9\x29\x17\x11\xfa\x2d\xde\x67\xf1\x0e\xcb\xde\x17\xdd\xd1\x81\x83\x84\x86\xb5\x1c\xff\xdb\x77\xff\x7f\x00\x00\x00\xff\xff\xb7\xd1\xcb\xbf\x79\xca\x03\x00") + +func cfI18nResourcesPtBrAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesPtBrAllJson, + "cf/i18n/resources/pt-br.all.json", + ) +} + +func cfI18nResourcesPtBrAllJson() (*asset, error) { + bytes, err := cfI18nResourcesPtBrAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/pt-br.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesZhHansAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xfd\xfb\x57\xdc\x56\xb2\x28\x8e\xff\x7e\xff\x8a\xfd\xf5\xf9\x81\x64\x16\x8d\x9d\xc7\xdc\x75\x17\x77\xdd\x75\x2f\xc1\xc4\x66\x82\x81\x03\xd8\x33\xb9\x21\x8b\x88\xd6\x06\x34\x56\x4b\x1a\x49\x0d\x61\x18\xee\x02\xc7\xd8\x10\xf3\x8a\xe3\xb7\xf1\xd8\x4e\x8c\xe3\x49\xc2\x23\x89\xc7\xc6\x3c\xec\xff\xe5\xa4\xa5\x6e\x7e\xe2\x5f\xf8\xae\x5d\xb5\xa5\x96\xba\x7b\xab\xd5\x2f\x3b\x73\x3e\xe7\x9c\xb5\x26\x58\x2d\x55\xd5\xae\x5d\xbb\x76\xed\xaa\xda\x55\x9f\xfc\x37\x42\xa6\xfe\x1b\x21\x84\x1c\x53\xe4\x63\xad\xe4\xd8\xa0\x36\xa8\x0d\x74\xf6\xb6\x0e\x6a\xc7\x9a\xf1\xb9\x6d\x4a\x9a\xa5\x4a\xb6\xa2\x6b\xde\x0b\xee\xca\x6a\xf6\xd1\x2e\x7b\xe7\xbf\x11\x32\xdd\x5c\x0a\xc6\xc7\x7a\xda\x24\x7f\xe8\xef\xe9\x26\x96\x6d\x2a\xda\x28\xb1\x26\x35\x5b\xfa\x9c\x28\x16\x51\xb4\x71\x49\x55\xe4\x16\x42\x7a\x4d\xdd\xa0\x66\xe0\x27\x7b\x4c\xb1\x5a\x09\x49\x8e\x10\x8b\xda\x09\x33\xad\x69\x8a\x36\x9a\xa0\xda\xb8\x62\xea\x5a\x8a\x6a\x76\x62\x5c\x32\x15\x69\x58\xa5\x89\x51\x53\x4f\x1b\xa4\x69\x6a\xf0\x98\x26\xa5\xe8\xe0\xb1\xd6\xc1\x63\xe3\x92\x9a\xa6\x83\xc7\x9a\x8b\x1f\x4d\x37\x45\x8d\xe6\xc2\x93\xec\x9d\x8b\x48\xac\xb3\x71\x33\xfb\xe3\xe3\xcc\xce\xcf\xb9\xad\x0d\xf7\x97\xeb\xee\xcd\x07\xee\xf5\xf9\x5f\x67\x2e\xb8\x1b\xdf\x66\x1f\x6e\x66\xef\x5c\xc4\xe7\x99\x9d\xdd\xd6\x86\x50\xd9\x50\x7e\x5a\xb6\x34\xfa\xdb\xe7\x67\x5d\xa9\x14\xf0\xf3\x77\x64\x60\x8c\x5a\x94\x58\xd4\x1c\x57\x92\x94\x18\xaa\xa4\x59\x64\x4c\x1a\xa7\x44\xd2\x88\x64\x59\x7a\x52\x91\x6c\x2a\x93\xa4\x6e\xd9\x2d\xa4\xdd\xa4\x92\xcd\x98\x2e\xf9\x5f\x28\x9a\x65\x4b\x5a\x92\x92\x09\x45\x55\x89\xa2\x25\xd3\x26\x70\x1b\xbf\x10\x72\xe7\x77\x24\xf7\xea\x76\x66\xf7\xae\xbb\xb6\xe4\x7c\xf9\xd0\x59\xbf\x79\xf8\x68\xd5\x99\x7b\xee\xae\x2d\x38\x73\xbf\xe4\x66\xaf\x65\xef\x5c\x74\xe7\x57\xdd\xb5\x1f\x7f\x9d\xb9\xe0\xcc\xdf\x75\xf6\x76\xf9\x9b\x9b\x7f\xcf\xbc\xbc\xe2\x6c\x5f\xca\xec\x7e\x97\xbd\x76\xdf\xdd\x78\xe4\xbf\x26\x1a\x63\x9b\x61\x10\xcb\x96\x4c\x9b\xca\x11\x8b\xd9\xd9\xbd\x96\xbd\xf6\x24\xfb\xe4\x8a\xb3\xbb\xe2\x3c\xff\xd9\x59\xdd\x72\xbe\x7c\x22\x5e\xd8\x1c\xa8\x4d\x49\x72\x4c\xd2\x46\xa9\x4c\x6c\xdd\xc3\xd2\x4c\x86\xd3\x36\xd1\x74\x9b\x12\x7b\x4c\xb2\x89\x62\x93\x31\xc9\x22\x27\x7c\x5e\x59\x2d\x42\x42\xa2\xf0\x4d\x4d\xb5\xb4\x19\x46\xb7\x94\xa2\xd3\xd3\x64\x42\xb2\x3c\x7c\x24\x6d\xb1\x39\xe1\x5c\x4f\xa5\x24\x4d\x26\x9f\x4d\x4d\xb5\xb4\xe3\xdf\xd3\xd3\x9f\xc5\x1c\x77\x18\x83\xf3\xfc\xe7\xcc\xc1\xab\xec\xb5\x27\x99\xbd\xf5\xcc\xce\x15\xe7\xab\x83\xcc\xde\x23\xe4\x4b\x2b\x29\x04\x2f\x20\xbb\x5b\x27\x92\xa1\x10\xaa\xc9\x86\xae\x68\x36\x93\x6b\xb1\x4c\xb8\x6b\xdf\xe7\x36\x5f\x66\x0f\x36\x33\x7b\x7b\x99\x83\xeb\xa4\xad\xb7\x93\x64\x7f\xd8\xca\x5e\x78\x11\x31\xbb\x7d\x7a\x9a\xf1\x59\x27\xc3\x94\xa4\xb5\x94\x64\x18\x54\x66\x2b\x5e\xd3\x6d\x92\x4c\x9b\x26\xd5\x6c\x75\x92\xf0\xe7\xb6\x4e\xec\x31\x4a\x24\xc3\x50\x95\x24\x60\x16\x53\x93\x7b\x3c\xeb\xac\xdc\x70\x9f\xcd\xbb\xb7\x1e\x38\xdb\x17\xd9\x12\x7d\xbe\xe5\xbc\xbc\xe8\x1c\x7c\xed\x2c\x2c\xb9\x6b\xdf\xe3\x73\x67\x7e\x3b\xc8\xc2\x08\x4a\xd9\x6e\x42\xc8\x59\x8b\x92\xa6\xe4\x08\x49\x49\xe6\x79\x6a\x1b\xaa\x94\xa4\x24\x61\x91\xfe\x8e\xbe\x73\x9d\xed\x1d\x4d\x8c\xc4\x71\x85\x4e\x10\x99\x5a\x49\x53\x31\x18\x3d\x16\xd1\x47\x88\xa2\xc9\xca\xb8\x22\xa7\x25\x95\x2f\x52\x7d\x84\x48\x64\x54\x19\xa7\x9a\xb7\x16\x23\x38\x8b\xfb\x14\xc1\xf9\x8c\xc4\xef\xac\x6c\xb9\xf7\xd7\xb3\x6b\x57\xb2\x7b\xb7\x9d\xcd\x3b\xb8\xea\xb2\x77\x2e\x3a\xab\x17\x33\x3b\xdf\xe3\x42\x65\x8b\x73\x65\x25\xf7\x6a\xbb\xdc\x68\xdb\x2c\x4b\x19\xd5\x88\xa9\xab\xd4\x22\x13\x8a\x3d\x46\x9a\x98\xe0\xe0\xb4\x9c\xb5\xa8\x39\x3d\x0d\xaa\x4e\x37\x47\x13\xec\xa5\x26\xc2\x64\xb7\xf4\x3b\x96\x21\x25\x29\xbe\x55\x76\x9c\x87\x33\x77\x72\xaf\x2e\x97\x45\xe6\x5c\x5d\x2c\x8f\x8c\x38\xf3\x97\x0e\xe7\x96\x72\xdf\x5d\xcd\x2d\xfc\x1c\x39\x5a\x98\x5a\x06\xee\xc3\x01\xc9\x1c\xa5\xb6\xbf\x40\x60\x56\x6d\x78\x46\x34\x3a\x41\x00\x7a\xec\xc9\x2a\x0d\xd1\x59\xd9\xca\x3e\xdc\x64\x33\x74\x63\x3b\x7b\xe7\x62\xf6\xee\xa6\xfb\xe0\x72\xf6\x1f\xbb\x87\x37\x9f\xc6\x23\x52\x44\x9c\x6e\x8e\x56\x44\x5a\x39\x92\xf6\x2e\x66\xf7\x2e\x47\x92\x94\xe6\x4b\x42\xd5\x47\x15\x8d\x24\x24\x58\xf8\x89\x84\x75\x5e\x31\x12\x96\xa5\x26\x60\x57\x07\x2a\x9a\x88\x6e\xc2\xab\x4c\xa9\x44\xbc\xc5\x74\x71\xda\x30\x4c\x6a\xe1\xd6\x4f\xa8\x69\xea\x66\x25\xcb\x23\x0e\x2d\xee\xfc\x8d\x38\xc4\x30\xb6\x3c\x9e\x75\x37\xbe\x71\x6f\xbd\xcc\x3e\xda\x75\x37\x1e\x1d\x5e\xbb\x9d\xdb\xda\x12\xf2\x44\x31\x90\x27\x9f\x49\xb2\x9c\x30\xd4\xf4\xa8\xa2\x25\x4c\x6a\xe8\x9f\xf9\xda\xdd\xd6\x89\x24\xcb\x84\x3d\xb4\x44\xab\xbe\x34\x78\x42\x48\xfb\x87\x43\xdd\x6d\x67\x3a\x48\x52\x37\x26\x13\x96\x9e\x36\x93\x94\xf4\xf7\x9c\xed\x6b\xef\x48\xb4\xf5\xf6\x92\x81\xb6\xbe\x53\x1d\x03\xf0\xe7\x27\x09\xcb\xfb\x67\x7f\x6f\x5b\x7b\x07\xf9\x24\xa1\x7b\x0f\x7a\xfa\x4e\x7d\xfa\x29\xf9\x24\x91\xd0\xf4\x84\x49\x61\x27\xfa\xb4\xc2\x5d\x8d\x10\xd2\x03\x0a\x4e\x52\xd5\x49\x62\x98\xfa\xb8\x22\x53\x22\x11\x55\xb1\x6c\xa6\xde\x60\xb4\x09\x99\xaa\x4a\x4a\x61\xdb\x9c\x2d\x8d\x5a\xb8\xa3\x82\xad\x31\x4c\xc9\x84\xa9\xd8\x36\xd5\x3c\xbd\x7e\xae\xbd\xad\x77\x88\x6b\xb2\x7e\x12\xb0\x9b\x88\x67\x37\x91\x11\xdd\x24\x92\x36\x49\x86\xf5\xb4\x26\x07\x37\x02\x21\x1f\x09\x21\x47\xfb\xf3\xce\xca\xd6\xe1\xcc\xc2\xd1\xfe\x82\xbb\xb2\x9a\x79\x79\xf7\x70\xe6\xa6\xb3\xf2\x9c\x69\x86\x3b\x60\xaa\x3c\xb8\x9c\xdb\xdc\x76\xe6\x6f\xe6\x1e\x3e\x39\xda\x5f\x74\x37\x1e\xe1\xdf\xce\xf6\x25\xe7\xd2\x6d\x67\x6e\x1d\x77\xb4\xec\xde\x57\xce\xe6\x9d\xe0\x76\xc1\xec\xc3\x30\xd5\xd9\xe5\x2d\xe7\x9b\x2f\x9c\x95\x5b\x87\x97\xc5\x9b\x49\x69\xce\xf1\x6d\x20\x61\x19\x34\xa9\x8c\x28\x49\x92\xd4\xb5\x11\x65\x34\x6d\xc2\x58\x88\x21\x99\x52\x8a\xda\xd4\x64\x96\x32\x91\x08\xc8\x28\x5a\xa7\xfa\xf0\x9f\x69\xd2\x26\x8a\x96\x50\x15\x8d\xb6\x0c\x6a\x01\x31\x49\x1b\xb2\x64\xd3\x84\x67\xef\x25\x92\xf1\xad\x4e\x66\x04\x8b\x26\x79\x44\x51\x29\x23\xd0\x96\x14\x0d\xcc\xf8\x1a\x89\x6f\x21\x80\x6b\x60\x8c\x12\x43\xb2\xc7\x3c\x91\x08\x7c\x87\x18\x25\x8d\x09\x0e\x33\x6e\x87\x2d\x5d\x65\xb6\x83\x6e\x12\x93\xb2\xf9\x1e\xcf\x7f\x8a\xf4\x95\x63\x44\x6f\xdb\xc0\xe9\xa1\x81\x9e\xa1\x0f\x3b\xbb\x3a\xf8\x58\x3b\x3e\x97\x52\x86\x4a\x99\xf8\x16\x91\xd8\x0a\x6f\x4c\xc1\xff\x12\x42\x06\x8f\x25\xd5\xb4\x65\x53\x73\x48\xd3\x65\x6a\x0d\x1e\x6b\xcd\xff\x86\x3f\xeb\x69\xcd\x66\x8f\x7f\xdf\x1c\x7a\x9e\xa2\x29\xdd\x9c\x1c\x4a\x0d\xb3\xdf\xde\x39\xf1\xee\xfb\xde\xaf\xd3\xf0\xc7\x74\x3c\x41\x76\xd6\x9e\xb8\x6b\x0b\xee\xf5\xf9\xfc\x19\x65\xeb\x45\xee\xa7\x87\x99\x9d\x8d\xcc\xde\x7a\xf6\xee\x53\x77\x79\xdd\x5d\xb9\xea\xcc\xad\xbb\x37\x5e\x38\xfb\x2b\x28\xf8\xd9\x85\x17\xce\xe6\x9d\xcc\xee\xb2\x6f\x18\x1c\xce\x2d\x65\x0f\x36\x9d\x95\x0b\xee\x75\x66\x0f\xd4\x59\x76\x8a\x97\x9e\xb3\x38\xe7\xac\xfe\x80\xa4\x17\xd0\x1d\x4d\x1c\x5b\xa7\x37\x2e\x67\xf6\x9e\x79\x54\xe2\x63\x7c\x96\x37\xef\x56\xb6\xc0\xde\xdd\xf5\x9f\x67\xf7\xee\x31\x0c\xf0\xab\x3b\x7f\x23\x7b\x77\xc7\xff\x67\xf9\xf1\x96\x10\x91\x62\xd2\x19\x92\x47\xbb\x99\x97\x57\x5a\xc9\xeb\x12\x91\x37\xa0\x56\x5a\xf9\xf8\x3d\x66\x0d\x2b\x9a\xec\xb3\xaa\xad\xb7\x17\x9f\x72\x45\x38\xd4\xd9\xdd\x3f\xd0\xd6\xdd\xde\xf1\xff\x61\x85\x13\x9f\x41\xb5\x2a\x22\x83\x9a\x29\xc5\xb2\xd8\x36\xc8\x04\x66\xf0\x98\x49\x25\x39\xa1\x6b\xea\xe4\xe0\xb1\x37\xad\x53\xd8\x9a\x78\x4d\x72\xf3\xaf\xa5\x6c\x6a\x12\x8f\x8a\x94\x50\x0c\xf1\xf8\x0d\xe8\x93\xa4\x49\x83\xca\x97\x33\x82\xf4\x76\xb5\x75\xff\x0b\x69\x95\xfa\x2b\x95\x5a\xf9\xf4\x5f\x56\x4e\x39\x8d\xd4\x68\xc9\xfb\x6d\xeb\xa5\x9a\xd9\xf1\xaf\x66\x23\xf5\xb2\xe5\x65\x8d\xe9\x69\x55\x86\x55\x48\xfe\xaa\x18\xb0\xd2\x9a\x89\x44\xd2\xa6\x8a\x4b\x2f\xff\x90\x1d\x39\x89\xaa\x27\x25\x95\xc8\x8a\x49\x93\xb6\x6e\x4e\xb6\x90\x5e\xdd\x52\x40\x27\x28\x16\x91\x88\x01\xff\x1a\xa7\x44\xd1\x6c\x3a\x4a\xcd\x66\x62\x51\xdb\x22\x86\xa9\xe8\xa6\x62\x4f\x36\x83\x63\x4c\xb1\x88\xa5\x83\xc7\x77\xc4\xd4\x53\x44\xd5\x27\xa8\x65\x33\x6c\x63\xca\xe8\x18\x15\xbb\xdb\x3d\x9a\x9d\xdd\x6b\xb9\x2d\x36\xad\x40\x9c\x27\x07\xb3\xf9\x7f\xb0\x45\x72\xb6\xaf\x8b\xb8\xf3\x37\xdc\xb5\x1f\x9d\xb5\xed\xec\xdd\x4d\xe7\xe0\xfa\xaf\x33\x17\x7c\x6a\x7d\x18\xee\xc6\xb7\xee\xf5\xa7\xee\xf5\xed\xa3\xfd\xc5\xec\xb5\x27\x99\xdd\x65\xee\xbc\xdd\xbf\xe5\xcc\xcd\x67\x77\xbf\x3b\xda\x5f\x74\x5e\x3c\x73\x17\x17\x32\x7b\xcb\x99\x83\x65\x67\x7e\xfb\xf0\x87\x5b\x4c\x1c\x1f\xee\x3a\xbb\x2b\xee\xf2\xd5\x28\x77\xa9\xa7\x04\x51\xd1\xca\xa8\xd2\xaa\xb0\xa5\x3a\x6d\x6f\xa6\x30\xa8\x41\x2c\x45\x1b\x55\x29\x91\x4c\x53\x9a\x44\x97\x64\x40\x77\x31\xad\x6c\x31\xc5\x8e\xde\xd7\x61\x74\xab\x53\x62\xa6\x55\x1a\xe5\x20\xe0\x5a\xa3\xa6\x6d\xdd\xd9\xfc\x02\x79\x8b\x61\x90\xcc\xce\x4c\x66\xe7\x7b\xb6\x62\xf7\x2e\x32\x4e\xce\x3d\xcb\xec\x6c\xe0\xb2\x47\x6e\xa3\x07\x36\xf7\xdd\x45\x67\xfe\x76\x81\x72\x6b\x24\x57\x11\x02\xec\x42\x01\xc6\xc2\x08\x6a\x62\x2e\xc2\x85\xd7\x3f\x90\x2c\x4a\x7a\xf8\x5e\x6f\xe1\x72\xd7\x53\x8a\xcd\x04\x9f\x2d\x03\x66\x78\xc0\x97\xd6\x5f\xd2\x92\x49\xc9\xb0\x29\x25\xcf\xb3\xd5\xc2\x7e\x0c\xc6\xac\xc6\x14\x55\xf6\x8c\x06\xf6\xa2\x49\xff\x92\x56\x4c\x2a\xb3\xbd\xd7\xe6\xa3\x68\x21\x9e\xfa\x3a\x07\x3b\xd9\x9f\x2d\x5d\xc3\xe1\x51\xdc\xe4\x70\x3f\xfb\x84\x2b\x87\xbc\x6a\x19\x3c\x66\x98\xba\xad\x27\x75\x15\x6d\x22\x3b\x69\x30\x2d\x9e\xff\x59\xa6\x96\xad\x68\x20\x26\xf8\xc6\x3b\x27\x5a\xde\x7d\xff\xfd\x96\x77\x5a\xde\xf9\x1f\xe1\x37\x0d\xdd\xb4\xb9\x65\xf5\xde\x7b\x27\xfe\x3b\x37\xaa\x3c\x45\xf4\x69\xc3\xe4\x2e\xb7\xb5\x8e\x6f\xa2\xe0\xa1\x18\xd6\x43\xfa\x9c\xb5\x27\x3e\x6c\xf6\xe1\xf6\x25\x80\x9d\x5d\x9b\xcd\x5e\x5f\xe7\xef\xde\xdf\x65\x2a\x06\xbe\x40\x4d\x91\xd9\xb9\xe6\xac\x7c\xcf\x34\xff\x8d\x17\xee\x95\x1f\x9d\x95\xe7\xce\xd5\x45\x3f\x1a\xe8\x6c\xac\xe2\xcb\xee\xad\x2d\xe7\xd5\xdc\xe1\xda\x4c\xf6\x0e\xae\x9d\xc0\x86\xe1\x53\xc2\x19\x10\xdc\x30\xde\xe8\x0c\x8a\x56\xe3\x39\x85\x4e\x10\x49\x55\xf5\x09\xf0\x4e\xfe\x25\xad\xdb\x92\x17\x29\xf1\xb6\x53\x7c\x28\x0a\x7a\x10\xe2\x47\x3b\x0a\x3e\x20\x18\xc7\x71\xe6\x66\x73\x9b\x3b\x68\x06\x1c\x7e\x73\x4f\x40\x8a\x24\x33\x7d\x20\x59\x44\x88\xc7\x79\xfe\xb3\xfb\x7c\xcf\xf9\xf2\x41\x66\x67\x57\x00\x44\xd6\x29\x06\xde\xe8\xe7\x8a\x65\x33\x68\x12\xf8\xa8\x45\x20\x33\x3b\x4b\x99\x83\xb5\xcc\xce\xae\xb3\x71\xcb\xb9\xf0\xc4\xd9\xfd\x9a\xfd\xb1\xf6\x24\x3e\x78\x8d\x48\xe3\x92\xa2\x02\xf3\xd0\x53\x0e\x08\x2b\xf4\x89\x8f\xe8\x26\x11\xd1\x88\xe2\x2e\xf8\x90\x6d\xdd\x2a\x3b\x0c\x4d\x7a\xb1\xd8\x08\xee\x61\xe8\x34\x0e\x24\xdd\x30\xa2\x21\xcd\xae\xb9\x1b\xdf\x88\x21\xd1\x94\x61\x4f\x8a\x99\xbe\x9b\xfd\x87\x68\x06\x79\xe0\x34\xcf\x54\xce\xd0\x08\xb1\x58\x7b\xe2\xcf\x1e\x33\xaa\x77\x96\x9c\x95\xad\xec\xb5\x88\x71\x32\x04\x26\xb5\x0c\x5d\x93\x15\x6d\xb4\x85\xf4\xaa\x94\x29\xfc\x94\x74\x9e\x12\x2b\x6d\x52\xa2\xd8\x68\x13\xe1\xd1\x22\xc6\xb4\x12\x77\xed\x7b\xe7\xeb\x25\x67\xf7\x1a\x28\xb5\xe7\xd9\x87\x9b\x99\x57\xf7\x9c\xcd\x2f\xdc\x5b\x5b\xbe\x62\x70\x57\xae\x32\x4d\xe7\xd1\x2a\xde\x23\x19\x7d\x23\x7a\x5a\x13\xce\x80\xbb\xf0\x92\x0d\x73\x7e\x5b\x00\xc0\xa4\x29\x7d\xdc\x37\xd2\x78\x30\x03\x62\x35\x8a\xad\x9b\x0a\xb5\x22\xa6\x36\xb3\xb7\x9c\x5f\x0c\x10\x43\xc8\xec\x6c\x1c\xde\x7e\xe4\x2c\xef\x09\xe2\x45\xc7\x7a\x81\x41\xd6\xe0\x31\x6f\xab\xf3\x07\xe0\xed\x73\x9c\xdb\x54\x26\xb2\x64\x4b\x22\x2e\xb2\x99\x04\x26\x32\x66\x5d\xdf\x76\x97\x36\x33\x3b\x1b\xfe\x58\x49\x13\xc7\xd3\x54\xce\xc8\x68\xf2\xa5\x88\x98\x74\x54\x61\xa6\x39\x24\x90\x40\xe8\xaa\x85\xf4\x53\x8c\xf6\x8d\x51\xd5\x10\x49\x55\x13\x53\x0d\x6c\xf2\x7e\x79\xe2\x5c\x5a\x64\xda\x1f\x92\x0f\x70\x76\x9d\x95\x0b\x87\xb7\xe6\x02\x30\x4a\x53\x61\xea\x69\x9b\x5a\x4d\x21\x43\x9d\x4d\x86\x08\xa5\xf7\xbe\xb3\x7b\x2d\xb3\xb3\x8b\x1b\x20\xce\x80\x00\xc1\xd4\x54\xcb\x39\x6a\x5a\x8a\xae\xf5\x8f\xe9\xa6\x3d\x3d\x9d\x8f\x5e\xf3\xe7\x5d\xba\x36\x0a\x8f\x4d\x4a\x24\xd5\xd2\x89\x94\x4c\x52\xc3\xa6\xb2\x68\x0a\x72\xaf\x6e\xb9\xcb\xeb\xce\xca\x4d\x52\x0a\xba\x17\xae\x0e\x43\x17\xce\xc3\xdb\xbe\x46\x01\x7d\x29\xb4\x5f\xdf\x06\x95\x02\x8a\x57\x08\xeb\x77\xbf\x6b\xb3\x6d\xaa\xb1\x4f\x5a\x09\x17\x04\x18\xd6\xb0\xa2\x49\x4c\xa4\xfd\x50\xdc\xf0\x24\x31\x74\x78\x15\x3c\x25\x69\xcd\x36\xd9\xe9\x4c\x26\x52\xda\x1e\xd3\x4d\xab\x85\x74\x6a\x96\x2d\xa9\x2a\x30\x2b\x6d\x79\x7a\xdb\x22\x92\x4d\x26\xf5\xb4\x49\xf4\x09\x8d\x98\x8a\x75\xbe\xe5\x77\xbf\x63\x9b\xfb\x49\x9d\x3d\x26\x13\x92\x06\x47\x1d\x85\x7f\x0d\x6e\x11\x54\x0d\x53\x53\x2d\x48\xd2\xf4\xf4\xff\x16\x8c\xf1\x77\xbf\x73\x7f\x79\xe2\x5e\x5c\x69\x25\xa8\x06\xdc\x5b\x5b\xd9\x6b\x3f\x39\x2b\x5b\xb9\x2f\x0e\x50\x65\x65\x5e\xb1\x23\x66\xe6\x60\x2d\x37\x33\x97\xdd\xbf\xe1\x5c\x62\x66\x4d\x66\x77\x31\xf7\xea\xae\x33\xff\xcc\x3f\x33\x3b\x9b\x0b\xb9\x6f\xe7\x98\xb5\x02\xb1\x62\x0e\x6d\x61\x06\xd3\x91\xd8\x2e\xfb\xed\xf2\xe1\xed\x7f\xc0\x99\xe8\x27\xf7\xc2\x93\xdc\xe5\xef\x73\x0f\x17\xdd\x85\x57\xee\x95\x39\x6e\xad\xe4\x1e\xcf\x22\x14\xfc\x38\x48\x3e\x71\x56\x6f\x1e\xed\xdf\x2f\x3d\x07\x6d\x7e\xf8\x57\x55\x34\x4a\x6c\x5d\x57\x91\x21\x36\x35\xa5\xa4\x8d\x56\x43\xbb\xaa\xa7\x65\xf2\x21\x5b\xfd\xa6\x68\x0b\xc0\x2d\x2d\xb3\xb3\x1c\x7e\x9b\xe4\x5e\xdd\xcd\x3d\x5c\xcc\xec\x3e\xca\xec\x5e\xf5\xd7\x5c\xee\xe1\xa2\xf3\x9c\x9d\x49\x04\x44\x9d\x3c\x79\xbc\xaf\xe3\x4c\xcf\x39\x76\xbe\x3f\x7b\xaa\xb3\x5b\x80\x13\x4d\x87\xe3\xa8\xc9\x70\xe0\x31\x01\x92\xbe\x8e\xde\x9e\xfe\xce\x81\x9e\xbe\x8f\xe3\xc3\xf6\x75\x68\xe5\x48\x5a\xab\xc0\xd2\x1a\x13\x4d\x05\xb0\x85\x20\xcf\xb5\x75\xb7\x77\x9c\x14\x00\x62\x27\xec\xdd\xef\xa2\x3f\x15\x11\x81\xdf\x8a\xf0\x76\x75\xb6\xf5\x8b\xbe\x74\xe6\x7f\x70\x56\x97\x44\x5f\xf6\x76\x82\x4f\xc1\xcf\x32\xa9\xc8\x36\x63\x5f\x7b\xd9\x63\x82\x0f\xf3\x69\x62\xe5\x41\x90\xb7\x68\xcb\x68\x0b\x19\xb3\x6d\xc3\x6a\x3d\x7e\x5c\x32\x94\x16\x7e\xcc\x6b\x49\xea\xa9\xb7\xcb\x62\x38\xda\x9f\xcf\xbc\xbc\xe2\x3c\xbe\x70\xb4\xbf\x28\x00\x72\xb4\xbf\x10\x83\x8e\xfc\x1e\x2d\xd9\xa0\xd4\xcf\xf6\x75\x4d\x0b\xb3\x49\xcb\x03\x14\x4d\x4d\x9e\xf4\x56\x12\x03\x0a\x64\x00\xf6\x76\x76\xf0\x7f\x4f\x8b\xbc\xac\x41\xb0\x45\x9f\x54\x81\x86\xbc\xc5\x7e\x1f\xc7\x8d\xcd\xfb\x99\xef\x73\xd3\xd3\xe5\xe7\xa5\x18\xe2\xd1\xfe\x3c\xfc\xbc\x30\xef\xae\xfd\x58\x04\x31\xd6\x24\xc1\x57\x95\xb2\x22\x0e\x1f\xbc\x71\x56\x38\xdb\xbd\xfd\xa2\xf5\x17\xc8\x28\x11\x7f\x2c\x5c\xbd\x81\xaf\x85\x6b\xb8\xd7\xf7\xd8\x8a\x88\x10\x7f\xc9\x0e\xa5\x95\x7d\x94\x4c\x52\xcb\x82\x63\x59\x20\xd7\xd1\x90\x4c\x5b\x49\xa6\x55\xc9\x24\xc3\xa6\x7e\x9e\x8a\xf2\xb9\x9c\xad\x17\xdc\x07\xbe\xf7\x6d\x76\xf5\x92\x9f\x68\xe3\xe7\x2e\xe6\x36\x5f\x1d\xde\xdc\x74\xef\x7d\x51\x16\xbb\xe7\xc2\xd6\xa4\x14\x2d\x22\xc2\xfb\x51\x1f\x19\xa1\xa6\xa2\x89\xb2\xe6\x7c\x72\xd0\x1f\x9f\xd9\xfd\xce\xf9\x7a\x96\x99\xd8\x98\xcf\xbc\xba\x94\xfd\x6e\x3b\x0e\x51\x7f\x49\x2b\x90\xef\xce\xd3\xec\x89\x45\x93\x69\x53\xb1\x27\x09\xa4\x82\x5b\x70\x76\x9f\x9a\x6a\x49\x5b\xd4\xd4\x20\x81\x57\xa4\x4c\xdc\x8d\x6f\x9d\xb5\x27\x99\xbd\xf5\xc2\xf7\x49\x6e\xf7\x87\xcc\xde\x41\x6e\xf9\xb9\xb3\x72\x23\xf7\x6a\x95\x6d\xfd\x9b\x0b\xce\xdc\x93\xec\xde\xc5\x72\x54\xf1\x64\xf5\x02\xaa\x18\x51\x21\x1c\x65\x49\x0a\xbd\x1d\x22\x28\xbb\x7f\x23\xb7\xf5\x95\xbb\xf0\xb5\xb3\x38\x57\x8e\x2c\x59\x26\x12\x24\x33\x06\x0e\x8f\x70\xf8\x12\x99\x44\xb8\x01\x63\xde\x62\x3c\x0b\x02\x50\xa4\x4d\x95\x98\x5e\x02\xb2\xa4\x11\xc9\x30\x44\x52\xb0\xfa\x55\x70\x9d\x21\x3e\xd8\x17\xd1\x1b\x27\xc4\x02\x53\x0e\x28\xbc\x4d\x02\x70\x15\xa6\x83\x2b\x1a\xd1\xcd\x51\xf6\xac\xc7\x1c\xe5\xcf\x8e\x63\xa2\x29\x7b\xd8\xcf\xfe\xe0\x8f\x71\x4e\xce\xfa\x5c\x6e\x69\x11\x9d\x0c\x42\xd3\x72\xb6\x70\x5a\x9c\xd5\xaf\x30\xb9\x33\x84\xf5\x38\xe6\xa0\x16\x22\xcd\xec\x6c\xb0\x25\x28\x4c\x36\x47\x86\x20\x2f\xfc\x91\x32\xca\x4a\xf3\x45\x55\x24\xab\x20\xc7\xdd\x3b\xec\xf2\x29\x1f\xa6\x8c\x73\xfc\xb4\x80\x29\xe1\x12\xd1\xd0\xa5\xdd\xfe\xa1\x67\x4a\x1f\x97\x18\xa4\x16\x42\xfa\x28\xac\x71\x06\xa0\x00\xac\x67\x74\x97\x01\xcf\xf8\x2f\x53\x93\x4d\x0e\xd5\xd0\x75\x82\x1e\x6f\xf6\x02\x06\x7f\xf9\x81\x47\x78\xf8\xf3\xce\x05\xbe\x0c\x72\xa6\x81\x75\x55\x98\x6c\x0b\xae\x8d\x1f\xdd\xb5\x5d\x36\x1a\x34\xd5\x8f\xe3\x9b\xec\x94\xb2\xf5\x42\x04\xad\x28\x69\x17\x3e\x3d\xbc\xbc\xe4\x7c\x75\xe0\xac\x2e\x1d\xed\x2f\x66\xf6\xd6\x33\x2f\x5f\xe5\xbe\x38\x70\x1e\xdd\x2f\x38\xee\xe4\xb6\xd6\x11\x96\xf0\xa0\x58\x7a\x66\x18\xef\x43\x1c\x67\xfc\xe2\x9c\x6c\xf2\xcf\x3f\x28\x0a\x4d\x2d\x84\x7c\xac\xa7\x49\x12\x8e\xed\xb6\xc9\xce\x90\x9c\x8d\x8c\xe5\xa2\xaf\x80\xbb\xf6\x18\xd5\x02\x27\x44\xc5\xf2\x5e\x0f\x4e\x8f\xa2\x8d\xeb\xe7\xa3\xa6\xba\x85\x90\xd3\xfa\x04\x1d\xa7\x66\x33\x1c\x3d\xb9\x07\x61\x44\x31\x2d\x9b\x8c\xa4\xf1\x58\x2b\x53\xd3\xb2\x39\x4e\xa2\xa4\x0c\x76\x02\xd3\x47\xc2\xb4\xb2\x9f\xe0\xec\xcd\xfe\x51\x4c\x31\xd2\x26\x74\xc7\x08\xa7\x1d\x8f\x8d\xc5\xf0\xb8\xb8\x14\xc8\x82\x7b\xe1\x89\xb3\xb2\xe5\x6c\xdf\xcb\x6d\x5d\x77\x96\x76\x72\x07\x07\x22\x00\xec\xd0\x7a\xf1\x99\xb3\xba\xcc\x8f\xa7\x1b\x8f\xf0\xcd\xbc\x4c\x6c\x7f\x51\x2a\xed\xdb\xf3\xcd\x64\x0e\x2e\xb9\xb7\xb6\x8e\xf6\x17\x31\x9c\x70\xf8\xf8\x86\x33\x37\xef\x6c\x2e\x3a\x73\x4f\x32\xbb\x97\x72\xdf\x7d\x8b\xe8\xb3\xcb\xdb\xee\xda\x42\x09\xfa\xb9\x98\xee\xdf\xf1\x0f\xd3\xce\xc1\x4f\xce\xd7\x4b\x11\xc2\xa6\x06\x5c\x95\xed\x5d\x9d\xde\x0c\x8a\x3c\x6c\x42\x30\xfa\x04\xe9\xef\x3f\x0d\xfe\x19\xbe\xf5\x43\x7c\x29\x22\x4f\x1f\xdd\xea\x6c\x73\x07\x7d\x87\x67\x67\x00\x82\x3b\xb9\x08\x95\xa5\x13\x99\xaa\xd4\xa6\x90\x86\xcc\xef\xa5\xa0\xef\x49\xb8\x75\x2c\xba\x37\x9f\x39\xf3\x0f\x0e\x6f\x3f\x72\x17\x66\xdc\xb5\x85\x82\x1b\x29\x02\x54\xb8\x23\xa4\xd2\x96\x4d\x86\x29\x3f\x7b\x51\x99\x0c\xd3\x11\xdd\xf4\xfe\xcd\xef\x72\x45\x8d\xf3\xd5\xdc\xe1\xc3\x3d\x67\x6e\x1e\x53\xfb\x83\x49\xfd\xce\xea\xf2\xd1\xfe\xa2\xbb\xb0\x94\xfb\xe2\x20\xf4\x6b\xc4\x2d\x84\x36\xe1\x0e\x29\x7c\x5f\xe4\x9a\x8f\x61\xf5\x1a\x46\xfe\x7e\x1a\x64\x91\xc7\x00\x85\x37\xcc\x0e\x6f\xaf\x3a\xf3\x22\x17\x05\x03\x8b\x2e\x4e\x66\xf6\x88\xdd\x79\xe2\xcf\x61\xb3\x51\x30\x3e\xc2\x63\x92\x23\x0a\x55\x45\x2e\xe7\x10\x7d\x60\x31\x62\x14\xcc\x79\xf8\x83\xb3\x71\xd3\xdd\xfc\xa7\x18\x53\x68\x97\x0d\x47\x50\x84\x9a\x47\xb8\x4b\x67\x76\x96\xca\x38\x0a\x8b\x50\xc2\x20\x27\x74\xf3\x3c\xe4\x34\x9c\x57\x0c\x23\x6f\xd1\x40\xa2\x08\x43\x5a\x29\x1d\xee\xad\x2d\xee\xa0\x7d\xbe\x9e\x39\x58\xc3\x57\x98\xe2\xd9\xbe\x94\x7b\xfe\x4b\xee\xd5\x65\x1e\x0f\x85\x8b\x83\x15\x10\xca\xfd\xa5\x78\x39\xc0\xd6\xc1\x88\x41\x2b\x1f\x5f\xaa\x9c\x63\xce\xf3\x9f\x79\xd6\xff\xfc\x76\x11\xb8\xf8\x5c\x2c\x17\x93\x10\x82\xa1\x9a\x0c\x77\x53\x98\x98\x51\xcb\x26\xb2\x22\x8d\x6a\xba\x65\x2b\x49\x0b\x83\xfa\xaa\x3e\x0a\xe1\x6e\xd1\xc8\xb6\x2f\xc1\xf7\xb9\xad\xe7\xee\x4f\x17\x72\x5b\x5f\xba\x37\x36\x0e\x6f\x5f\x74\xbe\x7c\xe0\xcc\x6f\xbb\x37\xd7\x9d\x57\x37\xd1\x37\x2a\xa4\xc0\xbb\x60\x41\xc6\xa8\xa4\xda\x63\x24\x39\x46\x93\xe7\x89\x3d\x69\x50\xee\x8c\x69\x32\x74\xd3\xc6\x9b\x3d\x9a\xae\xd1\x26\xd1\x69\x3f\xc8\x64\x3c\x9d\x64\xbf\x7c\xe6\x5c\xfa\xa7\xfb\xed\x8c\x7b\x7f\x3d\xfb\xd3\x9e\xf3\xf7\x2b\x41\xff\x0c\x87\x0b\xb7\x74\x00\xb0\xf8\xd0\x1f\xa0\xd2\xd7\x17\x8a\x26\xd3\xcf\x63\xeb\x8b\xec\xd3\x6f\x9c\xfd\xeb\xe5\xc1\xab\xca\x08\x4d\x4e\x26\x55\x5a\xe1\xe1\x3f\x00\x22\x24\x18\xa0\xde\x99\x74\x0c\x53\x3f\xd5\x90\xca\xe8\x0b\x1e\xd6\xed\x31\xe2\xc7\x35\x20\x36\x21\xeb\x29\x49\xd1\x9a\x8e\xf3\x3f\x84\x51\x65\xb6\xd0\x5f\xde\xcc\xec\xec\x46\x48\x36\x6c\x4b\x98\x5b\x96\xc7\x02\x31\x8a\x62\x2c\x0d\x1d\xd4\x98\x6e\xd9\x4d\xc7\xe1\x3f\x0d\x1a\x50\x18\x43\x43\x07\xa3\xe9\x09\x86\x86\x6d\x10\x8d\x19\x4b\x08\x81\x68\x28\x56\x2c\x67\x91\xc8\xa3\x88\xb7\x3e\x25\x4c\x44\xe0\x47\x63\xf1\xb5\xc2\xcc\xce\x2e\xb7\x27\xe0\xa2\x65\x54\x9a\x82\x0f\x19\x0f\xb6\x08\x5f\xa6\x23\x8a\x86\xc9\x69\xa0\xd1\xa2\xac\x19\x0c\x7e\x1f\xde\x7c\x8a\xb8\xf0\x6f\xc4\xe8\x6c\xde\xc9\xbc\x10\x29\x88\x30\x5e\x53\x57\xf1\xc4\xcf\x8e\x73\x22\x37\x14\x43\x75\xed\x89\x3b\xff\x3c\x88\x2a\xea\x16\xa9\x87\x04\xed\xb6\xaa\x70\x00\x1b\xcb\xe3\xa0\x32\x39\x27\xa9\x69\xa1\xce\x47\x60\x77\x2e\x3a\x33\xfb\x51\x60\x70\x23\x57\xc1\xc1\xd0\xa7\xab\x14\x5d\x13\x8c\x5c\x52\x74\xa9\x36\xef\x9f\xc0\x9b\xac\x3d\xe6\xe8\xf4\x34\x29\xeb\x7a\xf0\x44\xa3\xf0\x43\x3c\xea\xe0\xd8\x8b\x91\x05\x6f\xec\xe6\x89\x13\x7b\x13\x62\x8c\x06\x91\x47\x0e\x26\xe0\x6e\xc1\xc7\xe0\xff\xf0\x1d\x2e\x21\x12\x63\xfa\x5c\xc2\xc3\x42\xb7\x8b\x88\x27\x01\xc7\x4b\x18\x7d\x21\xaf\x42\x43\x79\x33\xac\x7a\x3d\x1c\x69\xd0\xc8\x0b\x5c\x9c\x53\x53\x2d\xde\x93\x21\x78\x82\xdc\xf0\x65\xc1\xe2\xd3\x90\xe7\x84\x6e\x8e\x4a\x9a\xf2\x57\x18\xa0\xcf\x8c\x74\xa5\xfe\xb8\x22\x37\x69\x88\x0d\x05\x38\x38\x27\x7c\x09\xf1\x88\x42\x26\xf8\xee\xd4\x52\x83\x89\xc3\x91\x80\x36\x9e\x9a\x6a\xf9\x77\xf6\x07\xdf\x88\x82\x9c\x68\x84\x13\xd2\x57\xe8\x85\x08\x8a\x15\x7c\x01\x69\xe2\x71\xd9\x36\x4d\x19\x70\x34\xb6\x75\x22\xeb\x13\x9a\xaa\x4b\x32\x66\x3a\x4c\x62\x6a\x28\x64\xf6\x40\xe0\x5d\xa3\x36\x91\x64\xd9\xa4\x96\x55\x6e\x08\xe8\x82\xc9\xec\x2d\x3b\x77\x1f\x64\x17\x5e\x64\x0f\xbe\x72\xd6\xb6\x9d\x7b\x33\x99\x9d\x2b\xb9\x83\x83\x82\x54\x83\x98\xd4\xa5\x94\x51\x53\x42\xdf\x30\x3f\x59\x74\x72\xfb\xf5\x64\xbe\x7e\x44\x79\xee\x22\x69\xb9\x57\xb3\xd9\xef\xf6\xe2\xc0\x12\x52\xc6\x33\x44\x20\xc9\x58\x95\x34\x70\xb0\xf5\xaa\x12\x77\xf1\x7c\x46\xf4\x11\x3f\x6c\xf2\x59\xe1\x69\xe8\x33\xef\x50\x3d\x62\x52\x2f\xcf\xd8\xb7\xc6\x3f\x2b\xa6\xca\xfb\x2a\x50\x78\x46\xe2\x75\x6a\x48\xbb\xae\xd9\x52\x92\x27\x94\x48\x72\x4a\xd1\x14\xcb\x36\x25\x5b\x37\x89\x32\x02\x4e\x3d\x7b\x4c\xd1\xce\xa3\x8f\x10\x4a\x07\x61\x89\x00\x21\x9b\xbc\xec\x11\x08\xda\x80\xef\x2a\x44\x7b\x13\xf1\x03\x4c\xdc\xb1\x25\x05\xdc\x72\x4b\xec\xb4\x3e\xb7\x94\x7b\xfa\x02\x73\x56\xf1\xc8\x10\x84\x12\x1e\x53\x13\xc9\x17\xb8\xf1\x8b\xe0\x3c\xbe\xe0\xfe\x7d\xcd\xbd\xf0\x24\xb7\xf9\x28\xb3\xb3\x9b\x7b\x75\xdb\xbd\xb5\x85\x85\x04\x8e\xf6\x17\x73\x5b\xcf\x73\xb3\xd7\xb2\xbf\xec\x65\x37\x1f\x66\x57\x2f\x39\x5f\xdd\x12\x9f\x2d\xd3\xf6\x18\x9b\xa7\x24\x93\x1b\xd0\xd9\x9a\xae\x25\xbc\x2c\x12\x65\x9c\xaa\xa2\x20\x49\x66\x6f\xfd\xf0\xde\xdf\x31\x3f\x04\x6f\xcb\xe4\x36\x1f\xe5\xb6\x66\x51\xc1\x96\xc5\xa6\x68\xa3\xe5\xe4\x10\xe1\x89\x25\x2c\x00\x8c\x1d\x28\x25\x8b\xd0\xcf\x0d\xc5\xa4\x50\xf3\x09\xd3\x08\xd9\x79\x76\x58\x4a\x9e\x07\x7f\xbd\x4e\x4c\x9a\x90\x02\x03\x6e\xf1\xca\x7a\x41\x1d\x8c\xcf\x82\x85\x1e\x06\xd3\x27\x4e\xbc\x97\xf4\x62\xbf\xf0\x2f\x4a\x12\x69\xfe\x9c\x31\xca\x7b\xa6\xf3\x67\xba\x39\xea\x3d\xb2\xf8\x23\xd0\x75\xf8\xf0\x33\x86\x3e\x48\x0d\x33\xef\x0b\xc9\x11\x85\x02\x80\x0f\xce\xf3\x9f\xd9\x21\x7b\xed\x3e\xe6\xbd\x1d\x5e\x5e\x72\x6f\x6c\x67\x6f\xef\x39\x07\xd7\xd9\x54\xc0\x3f\xf1\x4d\x9e\x59\x14\x55\xc7\xa2\xde\xc3\x83\xba\x16\x41\x92\x9c\x17\xcf\x0a\x48\x12\x4f\xa2\x6e\xf2\xad\x09\xb4\x01\x35\x89\xac\xc8\x3c\x2f\x14\x6f\xc8\xe0\xf1\x48\xd7\x28\xb1\x95\x14\x3b\x37\xc9\x22\x63\xd5\x5d\x9e\x77\xef\x7d\xc1\x83\xa9\xb7\x9f\xb8\x6b\xdf\xf3\xa2\x45\x3b\x33\xee\x8f\x0f\xdd\x99\xef\x32\x7b\xdf\x66\x1f\xcc\xa2\x7f\xf6\xf0\xf2\x92\xb3\x79\xc7\x59\xfd\xaa\x34\x69\x1f\x74\x76\x75\x75\x76\x9f\x22\x67\xda\xba\xdb\x4e\x75\xf4\x09\x27\x67\xdb\xd9\x59\xf5\x17\x9a\x00\xd4\xd9\xce\xae\x93\xbd\x6d\xed\x1f\x89\xc2\xe5\xfe\x0b\xe5\xbe\x17\x9d\xc4\xfc\x37\x04\x31\x7b\xff\xf7\xca\xe3\xef\x1f\x48\x96\x92\x14\xb9\x5d\x05\x9f\xa0\x57\x79\x94\xda\x36\x0f\x07\x9b\x36\x95\x2b\x73\x72\x7c\xa0\x68\x32\x54\x16\x0b\xd9\x57\x70\x06\x0a\x86\xdd\x99\x0c\xe2\xa5\x2a\x55\xcd\x87\x57\xe0\x31\x66\x0a\x44\x1d\x36\x9d\xed\x4b\xbe\xb5\xe3\x3b\xe6\x30\x3e\x8f\xb6\x82\x3b\x7f\x03\x5d\x8b\x68\x4b\x65\xef\x5c\x44\x9f\x3b\x46\x2d\xa2\x5c\xdb\x42\xf2\xed\x31\xea\xa7\x01\x17\x46\xed\x79\xe1\x2a\x8b\xca\x10\x75\xf0\x82\xfb\xc1\xc2\x24\x95\x8c\x24\xf7\x78\x96\xdf\xc5\xc2\xf0\x7d\xb8\xd4\x48\xfe\xfd\x3b\x17\xa3\x52\x5b\xeb\x31\x12\x2f\x21\xa0\xe6\x91\x84\xe2\xfe\x35\x8e\xa7\xa0\x64\x1d\x7a\x26\x4e\x0f\x0c\xf4\xa2\x43\x5a\x4c\x5f\xb0\xf8\x5c\xde\x9f\x0b\x5f\x46\xc5\x60\xa2\x11\x47\x64\x0b\x08\x30\x96\x0f\x79\x30\x8c\x8c\xed\xc3\xd4\x9e\xa0\x14\x5c\x51\x61\xdb\x02\xb6\xa1\x70\x50\x80\xeb\x5e\x58\x4a\x02\x82\x8a\xc1\x64\x76\x96\x0b\x62\x03\x2f\xae\x1c\xde\x7c\x0a\x77\x8e\x18\xb5\x7e\xa8\x20\x9a\xce\xe2\xd4\x86\x22\x66\x89\xac\xa4\xca\x73\x1e\xea\x75\xe0\x74\xd6\x9e\x54\x94\xf9\x00\x61\x89\x50\x66\x03\xf1\xa7\x34\x38\xcf\xc2\xa1\x0a\x2d\x22\x8f\x8d\xf1\xce\xa4\x32\x1d\x91\xd2\xaa\x6d\x85\x55\x4d\x3d\x52\x74\x82\x4b\xb8\x24\xf6\xbc\xae\x0d\xa8\x27\x26\x2c\xfb\xbb\xd9\xb5\xd9\xc3\x87\x82\xdc\xcd\xca\xc6\xe7\xeb\x9c\xd7\x3c\xa4\x80\x86\x2a\x37\x0c\x94\x6d\xa1\x48\xd7\x25\xb5\xa7\x6e\x62\xee\x69\x21\x31\xbd\x79\x1e\xd4\x2b\x13\x28\x86\xa8\x17\xf2\xb0\x9e\xbc\xab\x43\x5a\x54\x09\xae\xbd\x39\x6e\x05\x35\x6b\xe1\x87\xd1\x1e\x81\x4b\x25\x94\x55\x4c\xdc\x5e\x6d\x35\x0b\x32\x62\xe1\x9f\x81\xf0\x88\x25\x5c\x90\x88\xa7\x60\xbc\x42\x18\xa5\x71\xa7\x15\x55\x36\xd8\x89\x8b\x7d\xe5\xfd\xc3\x9b\xe2\xd0\x7d\x18\x91\x5d\x1d\x05\xc1\xbf\x29\x53\x05\xf6\x78\xc1\xf7\x48\x10\xe5\xe3\xef\xfe\x17\x15\x9a\xde\x93\x36\x25\x7f\x49\x4b\x9a\xcd\x94\xac\x97\x33\x22\x69\x5e\x39\x02\x3c\x8f\x49\x24\xad\x29\x60\xfc\xa5\xa8\x64\xa5\x4d\x0a\xb5\xf5\x54\xe5\x3c\x25\x67\x9a\xc9\x99\x0f\x9a\xc9\x29\x30\xcc\x4f\x7d\x20\xb2\x6b\x36\x6e\xe6\xbe\xbc\xe0\x5e\xdf\x3e\xbc\xbc\x82\x89\x25\xee\xad\x2d\x67\xe7\x71\x6e\xf3\x21\x7b\xb2\x74\x3d\x73\xb0\x14\x0c\xe1\x9e\xf9\x75\x66\xf6\xcc\x07\xbf\xce\xcc\x9e\x82\x30\xee\xa9\x0f\x8e\xf6\x17\xe0\x76\xda\x53\xf7\xba\xe0\xf6\x5d\x7b\x5b\x77\x7b\x07\x3b\xc5\x55\x34\x7e\xef\xea\x6c\x41\xc5\x45\xd2\x6b\x2a\xe3\x92\x4d\xfb\xd8\xdf\x5e\xbe\x7f\x6a\xd2\xc0\xa7\x70\x25\x31\xa9\xa7\x8e\xb3\x3f\x8e\xd7\x05\x5f\x5f\x47\x6f\x0f\xfe\x72\xb6\xaf\xab\xfe\x10\x07\x07\xb5\xc1\x41\xad\xe3\x4f\x6d\x67\x7a\xbb\x3a\xfa\x5b\x07\x43\x65\x3b\x5e\xfb\xd8\x55\x55\x9f\xe0\x95\x56\x2d\x6b\x8c\x40\x89\xc9\xca\x0f\xab\x3e\x38\x43\x21\x9f\x9c\xed\xeb\x12\x5d\x97\x2f\xf7\xb5\x41\xaa\xca\x55\x0f\x00\xa8\x2c\xeb\xcc\xff\x30\x6d\x8f\x91\xb3\xfd\x1d\x7d\xf0\xaf\xde\xb6\xfe\xfe\x3f\xf6\xf4\x9d\x1c\xd4\x2a\x2c\xa6\x59\x06\x1c\x4c\xfc\x1f\xdb\xfa\xba\x3b\xbb\x4f\xf1\x79\xef\x85\x2a\x10\x6c\x93\x00\x2f\xa9\x21\x59\xd6\x84\x6e\xca\x78\x6d\x3b\x74\xd5\x4c\x37\x6c\x5e\xa8\x64\x4c\x19\x1d\x53\x27\x89\xac\x58\x49\x3d\x6d\x4a\xa3\x54\x46\x58\x1f\x87\x20\xa4\xa4\x49\xa6\x3e\xc6\x15\x4b\x19\xc6\x28\xa6\x6e\x8f\x51\x13\x0b\x34\xf0\x1f\x4d\x9a\xd4\x4d\x19\x33\x67\x01\xbf\x35\x46\x55\x95\x8c\x29\x96\xad\x9b\x93\xd1\x82\xca\x86\xc8\xf6\xdc\xff\x13\xb8\x76\x43\x06\x07\x07\x8f\xa5\x26\x7d\x22\xd8\x3f\xc9\x5b\x69\x0b\xe3\x12\x94\xdf\x26\xe0\x3f\x5a\x9e\x3e\x03\xe9\x7b\x3b\x2e\xf8\x41\xfc\xbf\x63\x01\x1c\x83\xfc\xf9\x31\xf2\x16\xb5\x92\x92\xe1\xa3\x53\x46\xf0\x2c\xac\x68\x3e\x56\x51\x62\x4b\x8c\x09\x2d\x26\xe7\x58\x01\x21\xc7\x6a\x22\xa1\x72\x64\x47\xfb\xf3\xe8\x92\x76\xb6\x2e\x65\x1f\xcc\x66\x76\x36\xb8\xdf\x6d\xf7\x92\xb3\x7f\xdd\x59\x79\x8e\x5e\x69\x67\xeb\x05\xfe\x33\x77\xf0\x63\xe6\xc5\x82\x30\x05\xa7\x1c\x01\xc1\x99\x8d\x3d\xaf\x55\x0e\x36\x84\x8b\x8d\x13\xeb\x5e\xfc\x63\xd7\x7d\xb0\xcf\x8c\x13\x18\xb0\xb3\x7b\x0d\x07\x8c\xc3\x73\xaf\xfc\x98\xfb\xe7\xf3\xb2\xc3\x83\x9a\x6d\x70\xe6\xf5\xcb\x23\x9d\xec\x39\xd3\xd6\x59\xa2\x30\xd2\x27\x09\x3f\x4f\x83\x9c\xee\xe9\x1f\x60\xdf\x43\xc1\x5d\x28\xc8\xd2\xdb\x36\x70\x9a\xfd\x2b\x49\x7a\xdb\xfa\xda\xce\x74\x0c\x74\xf4\xf5\x0f\xb5\xf5\x0f\xfd\xa1\xbf\xa7\xbb\x3a\x0d\xf8\x7a\x48\x8b\x5c\xd8\x25\x48\x08\xce\x4c\x6a\xd2\x94\x6c\x5e\x0d\xd8\x24\x01\x1a\x52\x93\x4c\x7d\x73\xf4\x23\xba\x5e\x0b\xd4\x24\x56\x85\xf9\xb3\xa5\x6b\xb5\x81\x69\x9a\x62\x0b\x05\x6a\x18\xb0\x3f\x5a\xd9\xff\x20\x54\xa8\xec\x35\xc8\xc1\x77\x6a\xe4\x8f\x8a\x26\xeb\x13\x16\xe9\xd5\x27\xa8\xd9\x0f\x6a\x90\xc9\xb7\xac\xa7\x87\x55\x9a\x00\x31\x97\x9b\x09\xae\x6d\x2c\xb5\xd6\x0a\xea\x68\xca\xd3\x3f\x1e\x92\x41\x0f\xd1\x60\x00\x19\xfc\x3d\x8d\x6a\xaa\x00\x21\x4f\xe2\x26\x5d\x4c\xc9\x33\x94\x58\xbf\x47\x80\xb2\xa9\x12\x7c\x95\xdd\x64\xac\xb7\x00\xbc\x06\xe4\x58\xc5\x0d\x39\x71\xac\x95\x8f\xfe\xf5\x8c\x3b\x20\xa2\x35\x60\xe3\xdd\x5a\x3c\xb7\x06\xef\x28\xd2\xdf\xd1\x7e\xb6\xaf\x73\xe0\xe3\xa1\x53\x7d\x3d\x67\x7b\x1b\x0c\x1e\x17\x01\x84\xe3\xda\xa1\x8b\x86\x85\xc1\x5c\x28\x1e\x61\x18\xea\x24\xdc\xa6\xf1\x3c\xfc\xa5\x7c\xe3\x24\xad\xd9\x0a\x14\x03\x98\xe4\x15\x9e\x78\xe4\xa1\xb2\x94\xec\x82\x92\x9a\x11\x24\x93\x9e\xbe\x53\xe4\x13\x30\x55\x6b\x50\xb3\xb1\x51\xfc\x56\x39\x54\xae\xe8\x68\xdd\x37\xa6\xaa\x51\xfa\x8a\xb6\xa1\x95\x48\x07\x4b\x6d\x16\x71\x6b\xd4\x0e\xf2\xd2\x8f\xde\x2e\x81\xe5\x1f\x07\x07\x8f\x35\x8b\x7f\x0a\xec\x20\xaf\xab\xda\x71\x23\xca\x1d\xd7\xa3\xa0\xad\xc7\x87\xe8\xa2\xa4\xbc\x68\xa4\x5f\x35\x72\x30\x5c\xd6\x76\x10\x8a\x77\x0d\x06\x4b\xdb\xfa\x3b\xe6\x74\x49\xa3\xa5\x4b\xd1\xd2\x9f\x1f\x3f\x23\x25\x5b\x7d\xa0\x25\x07\x82\x7b\x53\x6a\x52\x1e\xce\x4f\x77\x21\xe6\x22\xc4\x81\xe9\x2d\xb5\x59\x57\x84\x32\x64\x2a\x84\x31\x87\x37\xf0\x20\x05\x21\xab\x21\x4c\x48\xde\x4c\xa9\x7c\xe4\x55\xd0\xd0\x14\xbd\xb8\xc2\x48\xfe\xdf\xf1\x09\xdd\x3c\x0f\xd6\xff\x71\x3b\x65\x1c\xf7\x82\x48\x43\x28\xee\x35\xee\x99\x6f\x04\x27\xef\x02\xd6\x80\x7d\xda\x73\x15\x56\xe7\xb7\x80\x7b\x1c\x68\xb4\xc0\x21\xc0\x3b\x2d\x84\x8e\x01\x8d\x83\x1c\x79\x90\x08\x42\x48\x4d\x32\x33\x31\x64\x4f\x05\xfe\xef\xdf\x82\x3f\x54\x04\x24\x6f\x6d\x92\x7f\xe3\xbf\x07\xcb\x80\x1c\xaf\xd6\x0c\xad\x92\xf6\x46\xe0\x6a\xd8\x10\x61\x61\xb0\xf9\x94\xac\x49\x2d\x99\xb0\x95\x14\xd5\xd3\x36\x19\xe8\x3c\xd3\xd1\x73\x76\x60\xa8\xb3\x7b\xe8\x4c\x67\xf7\xd9\x81\x8e\x7e\x38\x55\xda\xa6\x94\xa4\xe4\x2d\xdb\x4c\x53\xf2\x37\x32\x22\xa9\x16\xfb\x2f\x23\xed\xb8\xad\x1f\x67\x1b\xc9\xdb\xf0\x5e\x52\x57\x75\x33\xfc\x1e\xfe\x00\xb5\x77\x29\x79\xab\xab\xa7\xbd\xad\xab\x83\xfc\x8d\xb4\x77\x75\xb4\xf5\xbd\x5d\xa5\x74\x16\xb5\xcd\x19\xca\xb7\xcd\x19\x0a\xb7\xcd\x19\x2a\x6c\x9b\x33\x54\xaa\x6d\x4e\x75\x64\x60\x91\x65\xc9\x30\x12\x29\x49\x53\x46\xa8\x65\xe7\xf7\xcc\x4f\x12\x06\x39\xee\x31\x08\x53\xb7\xd8\x8b\x60\x4a\x40\xf6\x96\xff\x4d\xcb\x64\x4a\x15\x56\x18\x7d\x6d\x14\xd4\x44\x80\xaf\xc7\x88\x9f\xf2\x04\x2a\x82\x40\x45\xa7\xce\x1e\x50\x1c\x78\x27\xff\x6f\x89\x84\xac\x58\xec\xaf\x37\x80\x31\x6f\xcb\x73\xff\xeb\xbf\x5a\x19\xe9\x58\xbc\xc1\x2b\x5f\x70\x86\x41\xb5\x5d\x0b\x30\xdd\x1c\x65\x90\x6a\x01\x81\x59\xe9\xb5\x43\xf8\xf7\xb3\x3d\x03\x6d\xe4\x93\x44\x8a\x0c\xf4\x0c\xb4\x75\x0d\x9d\xe9\x38\xd3\xd3\xf7\x31\x5b\xca\x0a\xf1\x4c\xd3\xc0\x43\x93\xf4\xf5\x78\x0a\xcc\x2a\xb2\x61\xe1\xb1\x44\x42\x65\x75\x40\x2b\x60\x4c\xc4\x90\x14\xdf\xd8\x48\x40\x05\x1c\xf8\xd1\xa4\x90\x2d\xe9\x79\x0a\xa0\xe6\x2c\xe9\xeb\x60\xc0\x3b\x4e\x0e\x01\xbe\xa1\xde\x9e\xbe\x81\xfe\x9a\x84\xdb\xdb\x0d\x30\x32\x23\xda\x7b\x8a\xfe\xaf\x0e\x9b\x51\x59\xfc\x45\x1e\x9f\x10\x7e\x78\xd4\xf2\x06\xa8\x28\xd8\x26\x0b\xa8\xa8\x7e\x97\x8c\x41\x09\x93\x01\xf2\xfb\x13\x27\x4e\x9c\x88\x9c\x8f\x56\x78\xa5\x16\x2a\xa2\x3d\x16\xde\x79\x8c\x9d\xb8\x86\xfa\xce\x76\x75\xf4\xc3\xd1\xec\xb5\x23\xf4\x8f\x0a\x0d\xaa\x72\xde\xc0\x32\xe7\x83\x0d\x2e\x73\xee\xb3\x46\x58\xe6\x9c\x57\xc9\xf6\xcb\x64\xe7\xcb\x5b\x0f\x06\x2a\x65\xfb\x07\x65\x3b\x69\x70\x1f\x45\xf0\xbd\x60\xc9\x6c\xff\xd5\x77\x4e\xb4\x9c\x68\x79\xe7\x9d\x96\x13\xc7\xdf\x7d\xbf\xc4\x37\x58\x3c\xdb\x7f\xfb\x7f\x9c\x68\x7e\xff\xfd\xf7\x4a\xc3\xf6\xae\xa1\xe4\xdf\xc6\xe2\x1d\x63\xb6\x6d\x00\x5f\x20\x50\x4d\x6c\x53\x1a\x19\x51\x92\xb8\xbf\xfd\x5f\x5d\xa3\x6d\xf9\xd3\x3c\x9e\xe7\x23\xea\xaa\xc7\x14\xcf\x38\xcd\x2d\x04\x3e\x29\xf2\x49\xc2\x26\x03\x6d\xa7\x6a\x53\xd4\x75\x22\xe1\xcd\x38\xc8\xaa\x68\x99\xf2\x2f\xe1\x26\x6b\x80\x97\xac\x76\xe6\xd5\xc7\x5d\x16\x6e\xb3\x32\x88\x8d\x56\x82\x1d\x55\x06\xbd\x5e\x2b\x83\xbc\xdb\x4a\xc1\x8f\xf9\x86\x2b\x83\x7e\xcb\x95\x7c\xcf\x95\xa0\xab\x2d\x6f\x24\x43\xbb\xda\x82\x71\xa7\x2d\x6a\x26\x3c\xed\xee\x71\x01\x9a\xbe\x42\x0d\xf1\xd0\xcf\xde\x8c\x5a\x81\x42\x41\xb6\x4e\xda\x3f\x84\x84\x8d\x4a\x1d\x7b\x05\x8c\x97\x87\xfd\x3f\x2d\x45\x1d\xa7\x66\x81\x9b\xcf\x94\x52\x43\xa3\x38\xda\xf7\x2b\xf6\xe8\xc5\xc6\x15\xf2\xef\xf9\x28\x07\x39\xda\x8a\x5d\x78\x95\x8d\xb1\x34\xd2\x62\x9f\x5d\x6c\xa8\x71\xbc\x69\xd5\x42\xb7\x81\x57\xaa\x62\xd9\xcd\x44\x1f\x69\x86\x86\xb2\xec\x49\x3d\xb4\x70\x6d\x23\x6a\x24\x05\x36\x29\x1a\x73\x3d\x46\x0c\x17\xd9\x12\xb6\x7e\x9e\x6a\xa4\xab\xed\x83\x8e\x2e\xd2\xdb\xd7\x73\xae\xf3\x64\x47\x1f\x19\xe8\xf9\xa8\xa3\xa6\x73\x9f\x87\x02\xeb\x7c\xfa\x3a\xed\x83\xbe\x9e\x8f\x3a\xfa\x8a\xb3\x9b\xa0\x8e\xe2\x27\x09\x2f\x97\x2c\xa9\x1b\x54\xae\xc7\xd6\x9a\x38\x4f\x27\x8b\x15\xaa\xf7\xe0\xa3\x8e\x8f\x85\x41\x27\x61\xc7\xb8\xc6\xf4\xe8\xad\x94\xec\xdf\x6c\xf7\xbb\x46\xb6\xd3\xac\x82\x49\x35\xb5\xbe\xab\xa1\xad\x66\x63\xc4\xf1\x75\x77\xff\x7d\x0d\x52\xd9\xa0\xce\x78\xf5\x6f\xd6\x59\x1f\xe1\x8b\xdf\x16\xaf\xfa\xa6\x9d\xf5\x96\xbd\xd7\x70\xbc\x68\x89\xb2\x06\xe2\xca\xdd\xbf\xc4\xf1\xa2\xa1\xf1\xf7\x5a\x65\xf4\x0d\x05\xe2\x23\xc8\x07\x03\x28\x35\xc9\xfe\xac\x30\xf6\x5e\x09\xdc\xd7\x64\xe0\x95\x1e\x51\xc1\x3a\x0f\x2d\xf3\x2a\xb3\xd1\xde\xfc\x80\xc7\x24\x93\xca\x5e\x28\x21\x1f\xfd\x05\x57\xa8\xc9\x3d\x82\xe0\xef\xee\x43\x7f\x60\x6d\xc6\x1e\xf8\x55\xf3\x91\xba\x9e\xbe\x53\x9f\x92\x4f\x12\x7f\xc1\x47\x09\x70\xfc\x37\x10\xc1\x50\x9d\x10\xd4\x21\xd2\x11\x84\xe3\xc5\x3b\x4a\x46\x37\x52\xe4\x3f\x43\xa4\x03\x8a\x9f\x14\x1d\x26\xea\x0f\xb1\xa4\x3a\x09\xbf\x9a\x48\xe8\xa6\x32\x0a\x71\xb3\xce\x53\x9d\xdd\x25\xf5\x5c\x72\x24\xf4\xed\x9f\x5b\xac\x94\x62\x8f\x85\x72\xd7\xfb\xdf\x4b\x9a\xef\xd9\x85\xa1\x00\x42\xfe\x8d\x17\x2b\x92\x20\xb3\xd8\x8c\x0d\xcf\x27\x4b\x95\x25\x23\x04\xaf\xeb\x64\x5b\x6f\x95\xb0\xf8\xf6\x68\x26\xb0\x12\xf8\xbf\x91\xfe\xb6\x33\x5d\x6c\x97\xea\x31\xa8\xd6\x79\x92\xb4\xeb\x9a\xc6\x36\xf7\x11\x2a\x53\x13\x3c\xdc\x11\x15\xf0\x62\x4f\x4b\x91\xc3\xa8\x94\xab\xd4\x20\xed\x7d\x1d\x27\x3b\xba\x07\x3a\xdb\xba\x40\x4c\x55\xd2\xff\x71\x7f\x57\xcf\xa9\xa1\x93\x7d\x6d\x9d\xdd\x43\x67\xfb\xba\x02\x22\x3f\xe4\x41\x60\x8f\xb9\x85\xd6\x2b\x59\x16\x5e\x9e\x21\x16\x65\x9b\x33\x78\xe8\x4d\x2a\x63\x47\xac\xfc\x7e\x0d\x17\x0f\xac\x60\xb9\xf8\x7c\x05\x1e\x92\xd2\x65\xde\x77\xb4\xba\x91\x24\x0c\xe8\x7b\x9c\x4a\x49\xcd\x79\x32\x9a\xf3\xc8\x9b\x11\x3b\x33\x04\x03\x54\x97\xa0\x12\xda\x4a\xc0\xf6\x6d\xeb\x9c\x86\x40\x3d\x83\xa2\xc2\x41\x35\xd2\xcc\xb6\xb3\xf3\x74\xf2\x9d\xbc\xa9\xff\x0e\x98\xff\xe7\xe9\xe4\xbb\xf9\x67\xef\x06\xec\xff\x7e\x30\xa4\x26\xa1\x42\x48\xd0\xb2\x09\x1a\x5d\x90\xbd\x5e\x1b\x61\x41\x33\x27\xde\x91\xed\x35\x8a\x5c\x66\xff\xc1\xe1\xcc\xd5\xc3\x99\x9b\xce\x0a\xd4\x81\xbc\x03\xed\x52\x2f\x6f\xe4\xb6\x66\xf1\x1c\x83\x15\xa3\x33\x7b\xeb\xce\xea\x16\xdc\xd0\xc9\x17\x70\xe2\xa7\x86\xd7\x23\x65\xce\xf6\xa5\x20\x59\xd8\xfa\x13\xa5\x0b\xc7\x00\x85\xe6\x97\x73\x33\x8b\xc5\x95\xa6\xb0\x94\x33\x1e\xdc\x6a\x25\xba\x72\x31\x73\x17\x2f\x3b\x9b\x77\xf0\x68\x89\x04\xfb\xa7\x45\xff\x78\x58\x2b\x55\x21\x19\xfb\xcd\x68\x35\xcf\xa6\xaf\xa7\x5e\xab\x51\xe4\x06\x63\x09\x5d\xd0\xed\x5d\x3f\xf5\x56\xb3\xe0\x0d\x72\xd1\x0b\x1d\x25\xdf\xf1\x8f\x99\x20\x82\xa1\xdf\xde\x2d\x38\x67\xc6\xd7\x78\xf5\x13\xc7\x38\xc7\xae\xd2\x90\x53\x93\x09\x79\x38\x91\x52\x34\xea\x4d\x9d\x57\x67\xa3\x39\x74\x53\xb3\x6a\x90\x7e\x8e\x59\x7e\x7a\xad\x12\x97\xb7\xca\x42\x34\x25\x45\xf3\x1f\x24\x54\x62\x4d\x5a\xaa\x3e\xda\x7a\xfc\xb8\x38\x3d\xb4\x0c\xc8\xf0\x75\x9e\x84\xe9\xdf\xa1\x0e\x43\x8c\x1b\x73\x8a\xc3\x0c\x94\x2f\x8f\xc3\xbe\x1c\x41\xfd\x43\x5f\xc4\x82\x6c\x6f\xc5\x07\xbf\xff\xfd\x84\xce\xcc\xd4\x2a\xf2\xce\x2b\x9c\x7d\x3f\x64\x14\x20\x32\x9c\x00\xee\x11\x3b\xe8\x11\x5c\xf2\xc6\x6d\x6b\xfe\x07\x9f\xf8\x2a\x53\xd6\x2b\xe5\x6f\x63\xc9\xaf\xe9\xc4\x1e\x6b\x16\x4a\xad\xc0\x9a\xe2\x41\x35\x2d\xd3\xc6\x20\x8e\xb3\x9a\x1b\x82\x39\xce\xa2\xaf\x0e\x71\xda\x54\xc9\xe0\xb1\xe3\xe3\xef\x1e\x87\xc0\xf5\x31\x92\xf8\x13\x39\xd5\x31\x40\x12\xa7\xc9\xe0\xb1\x76\x5d\xb3\xa9\x66\x27\x06\x26\x0d\xda\x1a\xbc\xfe\x75\xfc\xf3\xc4\xc4\xc4\x44\x62\x44\x37\x53\x89\xb4\xa9\x52\x2d\xa9\xcb\x54\x66\x5f\xcb\xa4\xe9\x2f\xff\x8b\x89\x41\x2b\x64\xac\x55\x29\x77\xc5\x54\xc9\xe4\xff\x1c\x0f\xa6\x66\x57\x0f\x17\x32\x6a\x3f\x49\x28\xe3\xcc\x38\xf9\x13\x39\xd3\x31\x70\xba\xe7\x24\xfb\xfb\x34\x39\xdd\xd1\x76\xb2\xa3\x8f\xfd\x2d\x93\x93\x6d\x03\x6d\xe0\x34\xd0\xd3\xb6\x91\xb6\x09\xdb\xb0\x3c\xd3\xf8\x83\x49\xaf\xe6\x55\x20\x89\x20\x6d\xaa\x4d\x78\x8b\xce\xa0\x26\xe3\x0c\x91\x80\x93\xdc\xa3\xca\x7d\xb3\x54\x06\x02\x5a\x48\xe7\x08\x74\xcd\x06\x78\x8a\x95\xcf\x2a\x1b\x57\x24\x92\x90\x9b\x89\x44\x7a\x7b\xfa\x07\x10\xe0\x30\xf5\x60\x42\xf6\x95\x65\x53\x49\x6e\xf6\x3a\x53\x91\xe0\x2c\x01\x38\xef\x1b\x8b\xda\xbc\x7a\x91\x3f\x6f\x6c\x6d\xb4\x40\x1f\xac\x94\x34\x49\xf4\x71\x6a\x9a\x8a\x4c\xc9\x18\x95\x64\x66\xb6\x40\xd2\x59\xe2\xb4\x07\x1a\xa0\x79\x2d\x3e\x52\xd4\x1e\xd3\x79\x83\x81\xc4\x9f\x5a\x38\x2b\x3e\xd4\x4d\x68\xe4\x21\xeb\xc9\x74\x8a\x6a\x36\xa0\x69\x26\x06\x56\x4d\x1d\x57\x2c\xc5\x06\x61\xc5\x86\xa6\xb2\x9e\xb4\x5a\x92\xaa\x9e\x96\x47\xb0\x39\x70\x8b\x6e\x8e\x8a\xf2\x82\xeb\x3d\x6b\x58\x13\xcc\xfd\x62\xce\xb9\xf4\xcf\xcc\xce\x95\xa3\xfd\xc5\x82\xc9\x63\x07\x89\xad\x17\x68\x94\x67\xef\x5c\x44\x9c\xee\xc2\x77\xb9\x87\x8b\x6c\x26\xfd\x6a\xb9\x87\x33\x77\x72\xaf\x2e\x33\x99\xc4\xd8\x10\x76\x35\x3f\xda\x5f\x04\x34\x87\x17\xbe\xcd\xbc\x98\xcf\xec\xdf\x71\xaf\xbd\xc8\xec\xec\xf2\xef\xd9\x64\x1e\xed\x2f\x3a\x2f\x9e\x65\x76\xae\x15\x4f\x99\xb3\x7d\x29\xb7\xf9\x32\x7b\xb0\xc9\x8e\x2e\x85\x13\xe6\x77\xdb\xca\xec\xad\xf3\x1a\xac\x89\xd3\x24\xf7\xf8\x52\xf6\xee\x0d\xe7\xd1\x53\x0e\x96\xff\xf0\x27\x3c\x2f\xe0\xaf\xd8\x5e\xc5\xbd\xf1\xc2\xfd\xe5\x3a\x2f\xe6\x8a\xe1\x1e\x67\xee\x17\x98\x36\xf7\xc6\x65\xf7\xe1\xb7\xbc\xd2\x2f\x34\x98\x2a\x37\x5b\xc2\x12\x41\xf5\x9b\x2e\x6f\x9b\xad\xe7\x32\xab\xf7\x3a\xab\xf3\x42\x8b\x5c\x69\x1e\x3f\xea\xb1\xd6\xa2\x6d\x6e\xd0\xbb\x83\x01\xcd\x3b\x18\xde\x11\x06\x2b\xdf\x13\x06\x4b\xed\x0a\xb1\xd0\xd6\x45\xe5\xf3\xa6\x68\x81\x0b\x24\x23\x24\x61\x56\xe7\xdf\x2d\x86\x65\x32\xe1\x1d\xa9\x05\x5a\xc9\x4b\x1f\xb5\xc2\x2c\x8c\x70\xd4\x06\x8d\xdf\x96\xa8\x03\x1c\x63\x4c\xd2\x3c\xef\xbb\x55\x33\xbc\x70\x40\xa1\x36\x58\x98\x0d\x1f\xf7\x52\x42\x1d\x6e\x25\x08\xf1\x86\xae\x01\xc0\xd5\xb9\x10\xde\xe2\xeb\x72\x8d\x46\xdf\xa8\xdb\x7a\x11\x24\x88\xaf\x1f\xd4\xed\xfe\x01\xc7\x1e\x7d\x1d\xa0\x56\xa9\x8a\x70\x9e\xd5\x05\x70\x44\xae\x5c\xbd\x30\x94\x4e\x95\xab\x17\xf4\x18\xd9\x1f\xaf\x11\x51\xe4\xde\x58\x02\x60\x3e\x7a\x5d\x2f\x12\xeb\x04\xb1\x74\x9c\xbb\x46\x4e\x96\x8e\x36\xd7\x01\x28\x57\xe4\x81\xb0\x78\xc2\xdb\xaa\xeb\x0b\x1c\x43\xe2\x43\x75\x01\x1e\x8e\xb3\x56\x0f\x0d\x2f\x71\x26\x46\xa8\x64\xa7\x4d\x9a\x18\x51\xa5\x51\xf2\x61\x47\xdb\xc0\xd9\xbe\x1a\x6a\x16\x7a\x50\x7d\x35\x81\xfd\x67\xbd\x84\xfe\x4f\x12\x06\x24\xf5\x7f\xea\x4f\x64\x6d\x58\xac\xb1\xda\x6a\x1c\x32\x40\xf5\x2d\xda\xc8\x1b\x04\x56\xf5\x2d\xc6\x17\xea\x3c\x23\x1c\x68\x63\x27\xc4\x43\x52\xeb\x7c\x50\x6d\xbc\x46\x00\xe3\x54\xb3\xad\xea\x72\x46\xf8\xb7\x35\xe1\xaf\xef\xdc\x05\xa1\x55\x27\x52\xec\xf4\x62\x05\xce\x0d\x5e\x29\xbb\x7c\x12\xcc\xa7\x83\xda\xa0\x0d\xff\x8f\x97\x54\x34\x42\x06\x74\xec\x89\x80\x4d\xe2\xd9\xb9\xd6\xe6\x80\xb0\x19\x85\x64\x18\x7e\x65\x26\x1d\x6f\xe4\x9d\x54\xe8\xa8\x0e\x8d\x61\xa8\x26\x37\x43\xe9\x35\xff\xe0\x6c\x59\x63\x22\x67\x5c\x55\x64\x7a\x4d\x61\x18\xa9\xb9\xc7\xb3\xce\xfc\x4d\xe7\xf2\xae\xf3\xe2\x19\xb6\x4d\xe5\xa4\x38\xab\xcb\xd9\x1f\xb6\x32\x3b\x5f\xfa\x85\xd9\x0b\x5a\x2d\x60\xb0\x13\xfd\x0f\x5e\x7b\x99\x10\xc5\x35\xf3\xb5\xe0\xe2\xcf\xeb\xe3\x6a\x34\xe9\xa3\xd4\x4e\x60\xe7\xda\x04\x76\xae\xad\x49\xe0\xc7\xa8\x6a\x90\x4f\xda\x7b\xce\x9c\x69\xeb\x3e\x59\x9d\xf2\xe0\xfd\xe5\x79\xa9\x5e\x5e\xd4\x22\xc1\x38\x7a\x7c\xa0\xe7\x78\x6f\xd7\xd9\x53\x9d\xdd\xe4\x6f\x70\x25\xe2\x6f\x24\x61\x06\x0a\x00\xe3\x6f\xf0\xf7\xdb\x68\x47\xf1\xec\x0f\x53\x4f\x19\xbc\x2b\x00\x64\xf0\x99\x29\xcc\x47\x4d\x6b\x2a\xd3\x7e\x4d\x89\x91\xa6\xa0\x4b\xa6\x9c\x1f\xb0\xfe\x14\x1e\xde\x7e\x74\x78\xef\xef\xe8\xc4\x03\x72\x8e\xf6\x17\x9d\xd5\xc7\xce\xfc\x6d\x67\xfb\x12\x0a\x38\x36\xf8\xc9\x3e\xdc\xcc\x6d\x3e\x2a\xeb\xfa\xaa\x27\x85\x7e\x90\xb9\x52\x2e\x46\x5a\xb1\x05\x14\xfe\xbf\xe3\x27\x79\x1f\x3a\xeb\x38\xaf\xd1\x3c\xa2\xeb\xc3\x92\x19\xf9\x55\x89\xe0\x43\xf8\xeb\x21\x55\xd1\xd2\x9f\x0f\x49\x29\xf9\xbf\xbf\x1f\x09\x29\x61\x92\x33\x93\x09\x28\x05\xcd\x01\xd0\xe4\x58\x75\xc7\xc9\xd7\x06\xb9\xa2\xd1\xd7\x03\xa1\x70\x92\xaa\x02\xce\xb4\x5f\xb0\x1e\x77\x75\x3b\x1a\xf6\xff\x7a\x4b\x4f\x29\x36\xf1\x02\x7f\xa0\x53\xfd\x62\xcd\xd8\xa5\x4c\xd1\x48\x28\xd5\x81\x24\x12\xbe\x2c\xa0\x13\x17\xc4\x1b\xa4\x7b\x58\xb7\xc7\xca\xd5\xd6\x05\x90\x47\xfb\xf3\xd9\xb5\xd9\xec\xf5\x75\xde\xa4\x76\x75\xc9\xb9\xba\xc8\xeb\x05\xef\xad\xa3\x77\x3e\x98\xe4\x83\x8d\xc4\x48\x1e\x73\x7e\x75\xbf\xfc\xda\x99\x2b\x01\xa6\x6c\xc1\x5d\xde\xff\x2c\x61\x59\x3a\x79\xab\x70\x40\x3c\x4b\x9f\xd7\x5a\xd1\x87\x6d\x09\xd2\xee\x75\x8d\x42\x49\xa2\x62\x1e\xc5\x1a\x35\x62\x3b\xda\x9f\x0f\x8f\x82\xa9\x2e\xa6\x50\x78\x03\x94\xe5\xe7\xce\xca\x0d\xbf\x49\x19\x6f\xa1\x56\xd1\x98\xd2\xc5\xb5\x8b\x21\xbe\x5b\x18\xe4\xaf\x4b\x61\xe8\x8a\x71\x36\xa8\x3e\x74\x19\x3a\x1a\x51\x26\xba\x12\x94\xf5\xad\x16\x1d\x89\xd9\x4b\x1d\x20\x6f\x59\x3c\x25\xa8\xf4\xfa\x96\x2c\x22\x99\xa3\x10\x87\xb0\x6a\x1a\xaa\x87\xf0\x68\x7f\x9e\x87\xde\x8a\x57\x35\xa4\xf4\xe5\x2e\x7f\xef\xac\xdc\x3a\xbc\xbc\x12\x73\x80\x98\x20\xde\xe9\xe5\xa1\xa5\xfd\xe3\xfa\xa7\x78\xe0\xe2\x69\xd4\x9f\x06\xdd\x19\x16\xe1\x05\x52\xab\xad\x93\x5f\x07\xd4\xff\x99\x6a\xea\x37\x6c\x9f\x28\x85\xa6\x9e\x12\x5d\x01\xfc\xc1\x7a\x75\x08\x28\x8b\x45\x94\xf7\x33\x18\xb3\x51\x40\x49\x74\x0d\xde\xc3\xca\x2e\x17\x3d\x2d\xea\x0e\x57\xf6\xd3\x1a\xdd\x04\x29\xc9\xc8\x97\x41\x62\x07\xbf\xd7\x18\xff\x89\xc4\xfd\x7a\x62\x40\x15\x92\xd0\xa8\x38\x50\x19\x32\x5e\x43\x2c\x28\x25\x99\xe7\xa9\x6d\xa8\x52\x92\x56\xe7\xb3\x0a\x02\x08\xdc\x56\xaa\xee\x20\xce\x7b\x6f\xfb\xbe\x42\xef\x16\x9c\x45\xc6\xdf\xf1\x92\xa8\xd9\x9f\x7e\xa8\x87\xfd\xdd\xd5\xd6\x4d\xc6\xdf\xcd\xff\xfc\x2e\x3c\xaa\x7a\x17\xab\x27\x0d\xa1\xed\x8c\x0c\x8c\x29\x16\xd1\x0d\xca\xaf\xa6\x42\x8f\x6c\x7e\x85\xc8\xd6\x49\xbb\xaa\xa7\x65\xf2\x21\xe6\x2b\xfc\x4f\x3f\x63\x1a\x83\x50\x81\x1a\xe5\xc3\x3c\x2f\x39\xe9\x15\xb5\x32\x29\x96\xce\x44\x6d\x5b\xd8\xeb\x31\xfc\xa5\xa4\xda\x14\x7a\x3b\x63\x35\x2f\x25\x25\x99\xb0\x25\x90\xa4\x64\x51\xf8\xde\x2e\x22\x12\x5a\x3e\xe3\x04\x4b\x05\x64\x91\x89\x31\x25\x39\x46\x14\x26\x88\xb0\x77\x80\xd3\x68\xfc\x1d\xc2\x9b\xb4\x91\x0f\xf0\xb5\xb6\xde\x4e\x4f\xf9\x47\x7e\xf8\x2e\xbc\x39\x3c\x49\x4c\x9a\x92\x0c\x23\xd8\x9b\x2e\x3f\x1e\xa8\x40\x35\xfe\x0e\x74\x43\x07\xea\xc6\xdf\xc5\xbf\x5b\x08\xf9\x23\xee\xd8\xa9\x14\x85\x2d\xfc\xbc\x57\x29\x8c\xbf\x4e\x78\xab\x25\xc2\x18\x35\x96\xc6\xc6\xba\xb2\x3e\xa1\x79\x2f\x71\xea\x6c\x9d\x18\x26\x78\x63\x89\x24\xcb\x0a\x5e\x43\x2e\x24\x61\x98\xb2\xaf\x31\x7d\x51\x6e\x21\x3d\x5a\x92\x96\xa0\x76\x4c\x1a\xa7\x64\x98\x52\xcd\x13\x2c\xb9\xd9\x43\x96\xaf\xa3\xc3\xb6\x62\x18\x0d\xbf\x6b\x6c\xd2\x94\x3e\xee\x15\x93\x0c\x09\x46\x75\x85\x24\xf5\x7c\xb0\xb4\xba\xef\x6b\x28\x1a\x99\x4f\xa1\x48\x8c\xa6\x95\x2a\x8b\x88\xe8\xe6\x28\x84\x9d\xac\x5a\xc8\xa8\xee\xb8\x0f\xbb\xbd\x5c\xdd\xa7\xe0\x6a\xa8\x12\x2d\x7e\x0b\x45\x78\xc7\x68\xf2\xbc\x95\x4e\x55\xc7\x3a\x23\x6d\x8e\x16\x6b\xb3\xa2\x88\x70\x23\x61\x47\xeb\x41\xc9\xb2\xd2\x70\xbf\x65\x4c\xb2\x31\x8f\x2d\xac\x63\x4c\x6a\x19\xba\x86\x36\xba\xaf\xa1\x8a\x5a\xda\x2a\x16\xd1\x98\x39\xa6\x8d\x52\x33\x50\x98\x4a\x37\xf1\x17\x9b\x83\x81\x83\x04\x57\x45\xef\x9e\x38\xc1\x7e\x7f\xff\x9d\x13\xf9\x44\xb7\x22\xb8\x63\x92\x85\xcb\x17\x83\x9f\x72\x33\x51\xa9\x34\x0e\x2e\x72\xc8\xe9\xe1\x27\x04\x28\x2f\x10\x5a\xa9\x4d\x16\x64\xdf\x0d\x4b\x16\x6d\x21\x6d\xaa\x4a\xce\x6b\xfa\x84\x4a\xe5\x51\xb8\xc5\x5f\x12\x97\x97\x53\x27\x5e\xfe\xcd\x44\xd1\x92\x6a\x3a\xd4\xb5\x73\x18\xfb\x52\xa2\x1a\xf1\x1e\x9e\xa7\x93\x56\x75\xba\x22\x3c\xa7\xfa\xc8\x08\x35\x19\xb6\x50\xbc\x8e\x6f\x7d\xf5\x10\xc8\x68\x04\x01\x7f\x70\x43\xc4\xc7\xc7\x5e\x5a\x7c\x50\x2e\x24\x55\x8d\x54\xec\x8d\x93\x8c\xea\x04\x22\x4f\x63\x50\x22\x3c\x31\x69\x21\xdd\x3a\x91\x6c\x9b\xb2\x33\xa5\x87\x20\x25\xc9\x70\x00\xe6\x96\x45\x09\x3e\xfe\x4f\x3f\x34\x04\x0c\xf4\x0e\xde\x6c\x29\xe9\x69\x9b\xc8\xd4\xb2\x4d\x7d\xd2\xdb\x6f\x0b\xcd\x04\x86\x26\x29\x31\x43\x83\xf3\xa6\x88\xd6\x16\xd2\x36\x62\x53\xb3\x34\x96\x49\x9e\x4b\x3a\x21\x69\x90\x6d\x6a\xa6\x35\x42\x15\x76\x58\x8f\xc8\x0a\xd2\x8b\x7e\xcc\xef\xee\x49\x9d\x59\x1e\x36\x05\x62\x93\x2a\x95\xb4\xb4\x51\xed\x72\xb1\xc6\xaa\xb3\x9c\x03\x39\x7c\xd5\x7f\x5f\xdd\xe6\x82\xf2\x24\x6a\x4d\x59\x2f\x90\x7e\x88\xa7\xee\x00\x23\xfd\x2e\x0d\x19\x1c\x9c\x06\xfd\x68\x6b\x77\xc7\x1f\x87\x6a\x3a\x7e\x23\xc0\x52\x09\xb0\x79\x04\xe1\x47\xb5\xa0\xf1\x4c\x30\x06\xb5\x5a\xfb\x89\x83\x12\xa6\xf5\x31\xd8\x75\xb1\x29\xc2\x88\x04\x49\x78\x41\x6c\xf8\xa8\x26\x5c\x81\xfc\x2e\x80\xcc\xfe\xaa\x12\xa0\xa1\x27\x3c\xd3\x2d\x61\xd6\x41\xf0\x02\xf0\x3e\x09\x86\x4d\xab\xdb\x7b\x23\xe0\x95\x59\x53\xf5\x1e\x97\x65\x4b\xa3\xb4\x36\x1f\x16\x6f\xf6\x50\x17\x20\xd0\x73\xc1\x37\xc4\xfc\x85\xde\xd9\x7d\xb2\xe3\x4f\xd5\xc1\x0d\x14\xd6\xa9\x52\x49\x7b\xa9\xe2\x6c\xfd\xaa\x74\x9c\x56\xd9\xd3\xc1\x4c\x6b\x09\x5b\xb2\xf2\x69\x16\x84\x27\x4b\x40\xcf\x0c\xa6\xd7\x06\xda\xfa\x3f\x0a\x0a\x41\x41\xad\xd8\xe4\x08\x38\x1c\xa1\x1c\xac\xac\x58\x86\x2a\x61\x11\x6d\xf0\x42\x72\x8b\x45\x32\x0c\xdf\x56\x52\xd8\x71\x5e\xb2\xce\x5b\x70\x05\x05\xbc\xe6\x80\x1f\x70\x29\x16\x49\x6b\xca\x5f\xd2\xb4\x99\x8c\x9a\xd4\x08\xed\xf3\x4d\x16\xe1\x97\x61\xd0\x50\xa3\x81\xef\xd8\x39\x5f\xa1\x13\xf0\x24\x5f\xec\x8b\x91\x10\x1d\xf5\xf7\x47\xcf\x3d\x6c\x83\x83\x83\xc7\x86\xd3\x9a\x0c\x65\xba\x69\x92\x98\xd2\x79\x4a\xe4\xe1\x56\x7e\x3a\xc7\xeb\x17\xc8\x16\xfe\xa8\x5a\xa6\x43\xb3\x3e\xaa\x8d\x2b\xa6\xae\xa5\xa8\x66\x27\xc6\x25\x53\x81\x2c\x35\x10\x8a\x9a\xc0\x86\x73\xb7\xab\x93\x2f\x0b\x3a\xb8\x04\x6e\x74\xe4\x53\x87\xa0\xa4\xc1\x79\x72\xb2\xb3\xff\xa3\xc2\xda\x44\x55\x26\x7b\xd6\xbf\xd7\x52\x5d\x58\x20\xd8\xcd\x6a\x01\xe6\x25\x38\x7e\x92\x18\x26\xb8\x35\x31\xb6\xf9\x38\x6a\xcc\x73\x2c\xb6\x73\x6b\x1a\x39\xdf\x5e\x6b\x83\x51\x2e\xc1\xbc\xa1\xc0\x23\x17\x7f\x1d\xf3\xcb\x1b\x03\xaa\xb8\xba\x57\xfd\x21\xc6\xe5\x90\x05\xe3\xaa\x1d\x7f\xad\x50\xaa\x15\x46\x3b\x11\x4c\xde\x25\x1d\xdd\xe7\x86\xce\xb5\xf5\x85\xff\x71\xae\xad\xeb\x6c\xb5\x2c\x16\x24\x2d\x92\x26\x43\x37\xed\xa6\xbf\x35\x69\xba\x46\xab\x4b\x88\x14\xc3\x7e\xcb\x30\x75\xd0\x26\x7f\x23\x10\x0c\xfa\x1b\xa4\x60\xbd\x1d\xe8\x61\x8a\x68\x83\x6e\x2a\xc3\xa4\x49\xa8\x25\x33\x9c\xb6\xa1\x85\x51\x32\x49\x0d\x68\x4d\xa4\x9b\xa4\x89\x03\x6c\xaa\xee\xb4\xcb\x28\xd5\xcd\xd1\x84\xa9\xab\x34\x7f\x05\x80\x9d\x2d\xfa\x7a\xb0\xa4\x6a\x23\xc0\xc2\x68\xd9\x5f\x9e\xf4\x36\xf5\x98\xa3\x67\x24\x4d\x1a\xa5\x66\x13\x49\x90\x4e\x6d\x5c\xb1\x29\x0f\xdb\xb3\xa7\x10\xe5\xb6\x9a\x89\x45\x55\xe8\xe0\xa1\xc9\x24\x09\xbd\x5e\xd1\xcd\xde\xcc\x1d\x23\x36\xb1\x0c\x8a\x2e\x41\xe8\x04\xcc\x3b\x86\x34\x7d\xa0\xa8\xaa\xa2\x05\x31\xb4\xf3\x42\x36\x79\x0c\xcc\x3a\x19\xc6\xf7\x18\x87\xf5\xb4\x66\xf3\x90\xfa\x24\xdb\xec\x89\xa2\x8d\xe8\x79\x62\xdb\xd2\xb2\x62\xeb\x00\xaa\xcf\x2b\x26\x49\xf8\x46\x61\xeb\xe0\x23\x67\x1f\xf0\x78\x0e\x14\xe7\xab\x9a\x91\xe8\x57\x60\xcc\x03\xdf\x42\x4d\x93\x52\x08\xab\xc0\x3c\x3c\xc7\x2c\x32\xb8\xbf\x00\xce\x56\xf4\x48\xa0\x7b\xb5\x29\xec\xa6\xa8\x7e\x61\x94\xb7\xa4\xe2\x97\x38\x6e\x30\x11\xd5\xd5\xbb\xad\x9a\xa8\xe2\x1b\x44\xf0\x53\xe1\x65\xa2\xfa\xc1\x1f\xca\xc3\x0f\xdc\x27\xaa\x11\x7e\xf1\x9a\xc7\x83\x78\xcd\x0a\x25\x06\xf8\x62\xc5\xd2\xcf\x3e\x8a\xa3\x5a\xd8\x13\x5e\x8e\x8b\x5f\x92\xc0\xf8\xab\x44\x46\x95\x71\xaa\x61\x92\x4b\x10\xe8\x49\x76\x82\xd3\x0d\x91\x3e\x91\x0c\x23\xe4\xaf\xf5\x95\x14\x3f\x67\x05\x34\x43\x10\x6a\x40\xb1\xc0\x62\x64\xef\x36\x7b\x2f\xfa\x7a\xce\x86\xf8\x00\xe4\xf4\x2b\x16\x92\x56\x3d\x5b\x79\xf7\xd4\x37\xba\x1e\xe3\x11\xf1\x3a\xd7\xe3\x98\x64\xd2\x04\x0f\x2f\xd7\xa9\x63\x5f\xc0\x2d\x55\xeb\xf7\x7e\xf4\x15\x7a\x3a\x84\x4e\x4e\x09\xe8\xa2\x55\xe5\x69\x24\xe2\x9a\x61\xad\x00\xab\xdc\x00\xbd\x6b\x74\x58\x0d\x97\xca\xb5\x5e\xa7\x43\x80\x7e\xec\xb9\xd6\xe9\xa8\x72\x54\x81\x6b\x6d\x70\x50\x0f\x7a\xab\x12\x8a\x26\xd3\xcf\x3f\x85\x6a\xf1\xdc\x91\xc2\xfe\xd1\x45\x3e\x19\x56\x34\x79\x48\x92\x65\x93\x5a\x56\xeb\xa7\x4c\x25\xb4\x8e\xe9\x16\xfe\x0f\xfb\x17\x4a\xc3\x79\xc5\x80\x84\xa7\x04\x54\x16\x07\x8a\xf2\x3f\x98\x34\xa5\xdb\x34\x41\x3f\xa7\xc9\xb4\xff\x0b\x2f\xd6\x91\x30\x2c\x9a\x96\xf5\x84\x6d\x4f\xc2\xe3\x11\xdd\x4c\xd2\xc2\x87\xde\x4d\xc9\xc0\xe3\x6a\x59\x90\x48\xea\x72\x95\x7a\xcb\x1a\xe3\xcd\x43\xe5\xda\xbc\x85\x96\x2d\x25\xcf\x93\xfe\x81\x9a\xbc\xf2\x00\xa4\x4a\x41\x28\xab\xf7\x6a\x02\x5b\x17\x9f\x4a\xed\x3e\x59\xcb\xd6\x8d\xda\x20\xd8\x92\x39\x4a\xed\x52\x29\xc6\x55\x82\xb3\xce\xd7\x98\x70\x69\x53\x33\xa5\x68\x6c\x73\x08\xfb\x62\xc1\xf7\xda\x79\x32\xf2\x90\x5e\xf0\x2d\xf7\x64\xbe\x57\x15\x1d\x69\x0d\x7a\xa0\x87\xab\xaa\xf1\x7b\xf2\x25\x6a\x35\xe4\x53\x21\x4f\xf7\xf4\x0f\x74\xf3\x34\xee\x40\xd3\xf0\xea\x5d\x82\x0d\xa1\x24\x92\x8f\x25\x31\x06\x53\x2e\x53\x93\xa6\x64\x53\x38\x0b\x52\x33\xaa\x2b\x69\xfd\x06\xfc\xfa\xd1\x97\x74\x21\xd7\xc3\x23\x5b\x09\x82\x80\x07\xa3\x1d\x4e\xe6\x81\x3c\x45\xc9\x30\xd4\x49\x28\x77\xfb\xb9\x62\x41\x8a\x9e\x97\x14\x10\x28\xb9\x64\x91\xb4\x66\x2b\x2a\x3b\x87\x4f\xf2\x16\x9d\xa0\x79\xc4\x77\x29\x63\x11\x1f\x5d\x14\xa5\x36\x03\xa0\x32\x14\xbf\x5d\x0e\xa1\xe0\xfa\x1a\xac\x2e\x1e\x4c\x0f\x78\xc9\x8d\xa8\x8e\xc2\x19\x0b\xc1\x6f\x90\xf5\x05\xf7\x22\xf1\xce\x6c\xf5\xc7\xfb\xb4\xf6\x26\x2f\x00\x94\xc1\xfe\x7a\xae\x00\x54\x4c\x44\xa3\x2e\x01\x94\x25\xc4\xbf\x06\x50\x66\x2e\xe0\x1a\x40\x95\x24\x44\xba\xcf\x6b\x80\xd9\x00\x67\x71\x59\xc0\xff\xe5\x2e\xae\x8c\x95\x45\xa7\xf8\x1a\x1d\xc7\x22\xa8\x01\x0f\x41\xcd\x70\x1b\xe2\x35\x8c\x8d\xe0\xbf\xfc\x86\x15\x33\xb6\x01\xfe\xb1\xb4\x21\x4b\xc2\x2a\x92\x06\xc9\x57\x44\xe9\xed\xe9\xef\x1c\xe8\xc4\x16\xdd\xdc\x0f\xf0\x37\xdf\x33\x01\x0f\x55\x3d\x79\xfe\x6f\x89\x44\x5a\x63\x7f\x54\x79\x9c\x69\x14\x35\x85\x41\x97\x5e\xb6\x0b\xf1\x16\xfa\xc3\x94\x48\xe4\xaf\x8a\x01\x75\x5c\x9a\xf3\x97\x16\x83\x0f\x41\xb8\x54\x3d\x29\xa9\x44\x56\x4c\x9a\xb4\x75\x73\xb2\x85\xf4\xea\x96\xe2\xdd\xf0\x91\x88\x01\xff\x1a\xc7\xd6\x12\xa3\xd4\x64\xba\xd0\xb6\x88\x61\x2a\x3a\xb3\x92\x50\x20\x98\x08\xe8\xa6\xed\xe5\x21\xab\xfa\x04\xb5\x20\x1d\x77\x4c\x19\x1d\xa3\x96\x5d\xa5\x6d\x83\x7c\xab\xa1\xd5\x56\x08\x82\x57\x13\x33\x45\x06\x7a\x06\xda\xba\x02\x1d\xb6\x4a\xb6\xdd\xd2\x20\xe1\xcf\x3b\x4d\xd6\xb9\xf1\x16\xf9\x1b\xc1\x89\x7d\x83\x8d\xb9\x38\x73\xa2\x0f\x1d\x5e\x67\x8a\x3f\xf4\xf7\x74\x0f\xf5\x9d\xed\xea\xe8\x8f\xea\xcb\xd3\x38\x84\x7e\xe5\x17\xbc\x9e\xc6\xcb\x15\x83\xd9\x55\x4d\x17\xc6\x4e\xdb\x5b\x27\x90\xac\x2f\x11\x4b\xd1\x46\x55\x4a\x24\xd3\x94\x26\x31\x4c\x19\xe8\xa3\x68\x11\x45\xb3\x14\x99\x12\x99\x5a\x49\x53\x19\xf6\x72\xd9\xc1\x3f\x9e\xaf\x44\x7c\x0e\xfa\x2f\xfe\xd9\xd2\x35\x6c\x12\xc2\x0d\x30\xbe\x38\x3f\xf1\x9a\x21\x04\xfa\xb8\xc3\xb5\x65\x53\xb7\xf5\xa4\xae\xe6\x9b\x31\xda\x49\x83\x87\x22\x82\xef\xc9\x94\x1d\x2a\x80\xd5\xf9\x57\xdf\x39\xd1\x72\xa2\xe5\x9d\x77\x5a\x4e\x1c\x7f\xf7\xfd\x12\xdf\x70\xe5\xee\xbd\xfd\x3f\x4e\x34\xbf\xff\xfe\x7b\xa5\x61\x27\x4d\xc5\x08\xc3\x6e\x63\xb2\x09\x59\x05\xb0\xc6\xa1\xc2\x0b\xb1\x4d\x69\x64\x44\x49\xe2\x3a\xff\xbf\xba\x46\xdb\xf2\x1d\x45\xfc\xc6\xf2\x9f\xfe\xf6\x8e\x49\x9e\xe8\x45\xf4\xed\x61\xcb\xdd\xab\x37\x57\xb2\xbb\x2a\xf9\x24\x61\x93\x81\xb6\x53\xb5\xae\xb7\xfa\xd0\xf0\x06\x7a\xbd\x16\x8c\xe0\x5f\xa9\x95\x6b\x40\x79\x34\xa8\xa1\x6b\x31\x73\xea\xd3\xaf\x35\xa9\xa6\x2d\x9b\x9a\x43\x9a\x2e\x53\xbe\x96\x03\x1a\x84\xbf\xc3\x4e\x0d\xf8\xdb\xef\x9b\x0b\x7f\x4c\xd1\x94\x6e\x4e\x0e\xa5\x86\xf1\x85\x77\x4e\xbc\xfb\xbe\xff\xca\x74\xa8\xd7\xab\x68\x3a\xa0\x36\x9c\x3e\x82\x31\xa4\x84\xcc\xfd\x90\x32\xb4\xb7\xc7\xdb\x55\xde\x6d\xa1\x09\x53\xb1\x6d\xaa\x79\xfc\x3d\xd7\xde\xd6\xeb\x65\xe3\xf7\x93\x40\x68\x82\x78\xa1\x09\xb4\x70\xb5\x49\x32\xac\xa7\x35\x39\xa4\x02\xa2\xb3\x77\x0b\xd8\x8d\xdd\xf7\x0d\x32\xaa\xab\x72\x8c\x17\x3d\xc9\x35\xa5\xd4\xd0\x28\x32\xe6\xfd\xc2\x56\xb4\x82\x0f\xe3\xf4\x63\x8d\x01\xc8\x86\xb9\x61\x9c\x6d\x26\xfa\x48\x33\xf0\x92\x3d\xa9\x87\x6a\x09\x8c\xd1\x1b\x21\x8c\xaf\x9e\xb0\x1b\xd6\x96\x36\x62\x62\xeb\x07\xcf\x26\x9c\xf7\x3e\xeb\xeb\xc1\xf8\x88\xca\xd3\x03\x3d\x1f\x75\xd4\x74\x96\x89\xbe\xf5\x52\xd4\x06\x95\x9c\xed\xeb\xaa\x09\x5d\xad\x5d\x6e\x4b\xc0\x09\x9c\xf2\xe3\xf4\xba\xd5\xc8\x7f\x7e\xe3\xfb\x3f\x41\xb3\xd4\xca\x46\xf2\xdb\x68\x96\x5a\x31\xcd\xaf\xab\x59\x6a\xc5\x84\x55\xd0\x2c\xf5\xf5\x8b\x5c\x4d\xcd\x52\x5f\xa3\x90\xd5\xad\x57\xea\xeb\x16\xb2\x58\xad\x52\xeb\x28\x60\xbf\x19\x95\xd6\xf0\x4e\xa9\x95\x0b\xdc\x6f\xa6\x53\x6a\x35\x72\xf7\xa6\x3a\xa5\xd6\x24\x8e\x71\xce\x07\x75\xe9\xe4\x49\xe2\xb5\xf2\xac\x0e\x7b\xcc\xa6\xaa\x65\x21\x56\xde\x54\xb5\x1c\xc8\x86\xf5\x57\xac\x6c\x6e\xf2\x33\xc3\x74\x20\xce\x0a\x9b\x93\xfc\x8c\xb0\xe7\xfe\x6c\x54\x9b\xa7\x5b\x8f\x29\x6b\x0c\xe2\x86\x35\xd8\x7c\x63\x02\x30\xfe\x9e\x64\x54\x99\x44\x38\x4e\x4d\x4b\xa9\x92\xd3\xfc\x5b\x5f\x69\x35\x25\x47\x48\x62\xbc\x09\xdc\x9b\xf0\x77\x82\xbf\xd1\x04\x3e\x47\x49\xb5\x74\xff\x8e\x54\xc5\x7e\xc7\x81\xbe\xb6\xf6\x0e\xd2\xd1\xd7\xd7\xd3\xc7\x36\xba\xb6\x81\xce\xee\x53\xa4\xab\xe7\x14\xb4\xf3\x23\x53\x53\x2d\xbd\x92\x3d\x36\x3d\xdd\x3a\xa8\x4d\x4d\xb5\x74\x98\xe6\xf4\x74\x65\x18\xba\x3a\x79\x25\x28\x1e\xef\x4b\x51\xcd\x6e\xad\x0c\x04\x5e\xf6\xae\xec\x9b\xde\xb3\x95\xbd\x2f\x69\xe0\xf5\x05\xf1\xb2\x20\xaa\xe4\xd7\xa0\xd1\x47\x08\x3b\x7c\xf9\x1b\x1b\x1c\xbe\x04\xd0\xdd\x9b\x0f\xdc\x5f\xae\x67\x5e\xde\x75\x76\xaf\x65\xf6\x6e\xe5\x9e\xbe\x40\x93\xcb\x59\xbf\x79\xf8\x68\x95\x99\x95\x9b\x7f\xcf\xbc\xbc\x22\x26\xa2\x56\x02\x78\xa3\xc9\xd7\x40\x00\x79\xeb\x24\xf6\x77\x6c\xf5\x7b\xc0\x50\x61\xc9\xe8\x98\x64\x1d\xed\xcf\x63\xa3\x4f\x67\x66\x3f\x08\x56\x5c\x34\x58\xd2\xd8\xb4\xf1\xe6\x7e\x85\x35\x79\x9a\x43\xd5\xa4\x60\xfd\xf8\xb5\xa6\x52\x69\xcb\x26\x23\x8a\x69\x41\x59\x41\x5e\x01\x29\x72\x56\x9d\xf9\x07\x87\xb7\x1f\x71\xba\x39\xb9\x8b\xce\xab\xb9\xc3\x87\x7b\xce\xdc\x7c\xe8\xd7\xad\x4b\x87\x57\xd7\x9d\xab\x8b\xd9\xbd\xaf\x9c\xcd\x3b\x91\xa4\x83\xd3\x32\x58\x83\xd2\x2f\xaa\xe7\x55\x26\x92\x78\x32\x30\x95\x23\x03\xd8\x1e\x91\x37\x9d\xcb\xbb\xee\xcf\x0f\xdd\xb5\x85\xec\xdd\x4d\xf7\xc1\xe5\xec\x3f\x76\x0f\x6f\x3e\x65\x2c\xde\xb9\xe0\xac\xf1\x23\x40\x79\x92\xa0\xda\xa0\xa2\x8d\xe8\x5e\xcb\x82\x11\xdd\x64\xea\x80\x17\x46\xec\x96\x52\x74\x7a\xba\xee\x34\x16\x63\x60\x84\x83\x90\x64\x5e\x3d\x74\x67\xb7\x22\x09\x7f\xd3\xab\x97\xd1\xe0\x95\x29\x1e\xd6\xed\x31\xa2\xea\xc9\xf3\x20\x76\x18\x09\xe7\x05\x9e\x85\x75\xcd\x32\x3b\x4b\xb9\x2f\x0e\x9c\xd5\x45\xf7\xe6\x33\x3c\x33\x21\x04\xe7\xea\xa2\x07\xe1\x70\x66\xe1\xf0\xe1\x0b\x71\x33\x8b\x12\x44\x30\xbd\x8d\x57\x07\xa6\xa7\x81\x98\xa9\xa9\x96\x93\x18\xac\x97\xa7\xa7\x2b\xa0\x25\x04\x88\xd1\x14\x02\x14\x9b\x26\x3f\xbf\x60\x58\xb1\x71\x51\xb2\x91\x1d\xc7\x01\x8a\xc8\xc1\xa9\xe1\x84\xe4\x41\x64\x0e\x96\x18\x21\x01\x00\x71\xc9\x80\x9c\x34\x5b\x1f\xa5\x50\x84\x0b\x42\xa9\x7e\xbe\x9c\xa4\xc9\xc7\xa1\xee\xb3\x3d\x16\xcd\x9e\xcc\xce\x72\x66\x67\xcf\x5d\xdb\xc5\x82\xe7\xc7\xdd\xf9\x1b\x78\x9a\xcd\xec\xcc\xe4\xfe\xf9\x9c\x97\x44\xff\x61\xcb\x59\xf9\x36\x2e\x5d\xa6\xa4\xc9\x7a\x2a\x51\x82\x3c\xf6\xa8\xb9\x3a\x22\x3d\x12\x66\xcb\x53\x7b\x78\x67\xc5\x5d\xdb\x2d\x47\x33\x26\x97\xe9\x26\x2f\x69\x32\x16\xa8\x01\x08\x41\x9e\x66\xa6\xbc\xcf\xf3\x0b\x5c\x10\x87\xc1\x0c\x0c\x0c\xf2\xe0\x13\x1e\x53\x21\x92\x21\xba\xf3\xe1\xde\x7d\xea\x5e\x7b\xe1\xce\xdf\x70\xef\xaf\x67\xd7\xae\x14\xb4\x1f\xc2\xc5\x98\xdb\x7c\xe8\x5e\xdf\xfe\x75\x66\x36\xfb\xed\x6c\xf6\xee\x2d\xd4\x24\x87\xb7\x57\x9d\xf9\x67\xce\xd5\x45\xe7\xd2\x9c\xb3\x71\x0b\xff\x19\x39\x94\xa0\x7a\xe0\xe9\x4c\x85\xbb\x49\x34\x91\x81\x6d\x21\x7b\xe7\x62\x50\x6f\x44\xe2\xb5\x27\x0d\x08\xb2\xe1\xed\x79\x82\xb7\xe7\xf3\x7d\x8c\x75\x2d\x9a\x43\x95\x42\x89\x22\x05\xba\xe2\x79\x87\x95\xc8\xc1\xf2\x22\xff\x50\xde\x3f\x02\x24\x3b\x4c\x7b\xf0\x5a\x5a\x84\x2b\x7b\xe3\x5b\x67\xed\x09\x02\x46\x90\xec\x5d\x01\x54\x9a\x84\x8a\xb8\x6c\x82\xc0\xea\x2f\x0b\x16\x1a\x5a\xa1\x94\x8b\xc1\x06\xeb\x11\x42\x01\x5f\x6e\x5f\x33\x05\xd7\xd6\xdb\x79\x0e\xff\x35\x3d\x0d\x4d\x9e\x15\x93\x5a\x84\x99\xb5\x81\x97\xce\x28\x5a\x7b\x57\xfe\x3d\xec\x1d\xcd\x6c\xf3\x64\xda\x34\xa9\x66\xab\x93\x6c\x0e\x02\x1f\x7c\xa0\x68\x92\x39\x19\xf8\x60\x40\x27\x69\x63\xd4\x94\x64\x8a\xf5\x86\xda\xbb\x3a\xc3\xcd\xa1\x5b\xfd\x53\xcd\xa8\x62\x8f\xa5\x87\x21\x63\x37\xd8\x21\xfa\x78\x52\x55\xfe\x4d\xf6\x9a\xcd\x54\x66\xfd\x96\x67\x40\xc4\xe0\xdb\xbb\x3a\xcf\x28\x30\x88\xb2\xc3\x46\x26\xbd\xc6\xf1\x16\x8f\xec\x5c\x70\x48\x87\x6b\x33\xb9\xc7\xb3\x30\xa0\x73\x81\x91\x60\xcf\xf6\xec\xdd\x4d\x67\x61\x29\x7b\xe7\x62\x76\x61\xde\x5d\xfb\xd1\xbd\xb5\x15\x1c\xc2\xaf\x33\x17\x72\x8f\x67\x9d\xa5\xcb\xd9\xdd\xef\x18\x80\x60\x1b\xf6\x4a\x69\x8f\x31\x29\xa1\x3e\x11\xb6\xae\xab\x95\x4d\x30\xb8\x1e\xf3\x11\x71\x2f\x52\x8e\xe1\x22\x5e\xfe\xca\x8b\x68\x43\xa1\x4a\xf6\x06\xd5\x88\xf0\x04\x1b\xd4\xc5\xce\xca\x56\xee\x8b\x03\xec\x61\x93\x79\xf9\xd8\x59\xfd\x91\x31\x0d\x76\x90\xec\x9d\x8b\x41\xbf\xba\x33\x7f\x33\xf7\xf0\x49\x04\x8d\x9a\x4c\x4e\x53\x55\xa4\xed\x9c\xaf\x0e\x32\x7b\x8f\x9c\x9d\x4d\xe7\xcb\x7f\x44\x03\x61\xc6\x63\x34\x90\xd5\xa5\x68\x08\x9f\xb1\xb9\xc6\xbf\xa7\xa7\x3f\x23\x0a\x56\xd8\xe6\x47\x59\xac\x9c\xcd\xaf\x34\x50\x19\x53\x10\x35\xcc\xbe\x68\xff\xd0\x9b\xac\xe3\x92\xaa\x48\x56\x0b\x21\x7d\x58\x7d\x91\x01\x28\x00\xeb\x4d\x6b\x19\xf0\x1a\xd1\x4d\x19\x0b\x7f\x7a\x7e\x61\xcc\xf6\x62\x2f\xe0\xa4\x81\x95\x69\x51\x91\x3a\x64\xb2\xba\xb9\x90\xfb\x76\x8e\x6d\x4e\x2b\x57\x33\x7b\xcf\x32\x3b\x1b\x6c\x13\x05\x6e\x90\xa6\x20\x59\x4d\xc4\xbd\xb5\xc5\x24\x7e\x6d\x97\x8d\x06\x5f\x39\xee\xcc\xff\xe0\xac\x2e\xfd\x3a\x73\xc1\xd9\x7a\x21\x82\x56\x08\x07\x3f\x3d\xbc\xbc\xe4\x7c\x75\xe0\xac\x2e\x41\x7c\x62\x3d\xf3\xf2\x15\xb3\x2c\x1f\xdd\x47\x10\xce\x8b\x67\xd8\x06\x27\xb7\xb5\x8e\xb0\xc4\x66\x87\x60\x6e\x02\x8d\x54\x90\xe7\xd0\x38\x03\x79\xc9\x28\xea\x85\x3f\xf1\x40\xd1\xc4\xd5\x54\x12\xd2\xea\x6c\x73\x32\x7f\x37\x05\xf6\x2b\xc1\x57\x5e\x7d\x65\xcd\xe3\x3a\x66\x14\xf3\xd7\x83\x13\xa4\x68\xe3\xfa\xf9\xa8\xc9\x6e\x21\xe4\xb4\x3e\x41\xc7\xa9\xd9\x0c\x75\x61\x79\x86\x1f\x9e\x45\x47\xd2\xaa\xca\x48\x92\xa9\xc9\xac\x0e\xac\xe9\xac\xa4\x0c\x29\x09\x0b\x36\x44\x2b\xfb\xc9\xcf\x4e\x2b\xa6\x18\x69\x13\x09\x84\x78\xe2\x61\x0e\x4a\xc0\x0b\x0a\x4c\x5e\x1a\xdc\x0b\x4f\x9c\x95\x2d\x67\xfb\x5e\x6e\xeb\xba\xb3\xb4\x93\x3b\x38\x10\x01\x38\xda\x5f\xcc\x5e\x7c\xe6\xac\x2e\xe3\xbc\xbb\x1b\x8f\xf0\xcd\xbc\x54\x6c\x7f\x01\x3d\x24\x4b\xc9\xd0\xaf\x33\x17\x32\x07\x97\xdc\x5b\x5b\xec\xcc\xbd\x7b\x2d\xb7\xb5\x7e\xf8\xf8\x06\x3b\x76\x6f\x2e\x3a\x73\x4f\x32\xbb\x97\x72\xdf\x7d\x8b\xe8\xb3\xcb\xdb\xee\xda\x42\x09\xfa\xb9\xa0\xee\xdf\xc9\xec\x7e\x97\xbd\x76\x9f\x8d\xe5\xe0\x27\xe7\xeb\xa5\xb2\xe2\x86\xf5\x7a\x5b\xb0\x6e\x33\xb4\x25\xe5\x09\x58\x32\x1d\x51\x34\x2a\x93\x94\x6e\xb2\x09\x97\x98\xbe\x4c\x46\x2d\xc1\x7c\x27\x4d\x6f\x50\x8c\x0b\x0f\x2e\x3b\xaf\x6e\xa2\x87\xc4\xd9\xbc\x93\x79\xb1\xe0\x3c\xba\xe3\xfe\xf8\xb0\x1c\x5d\x16\x16\x7f\xa6\x32\x19\x9e\x0c\x28\x0b\x5e\xe4\xb2\x42\x1f\x9b\x9e\x32\xd2\x3c\x2f\xdf\x1a\xd3\xd1\xa4\xb7\xc6\xa4\x77\x08\x84\x51\xbc\x22\x89\x9e\x7e\x02\xeb\x05\x02\x27\xa2\xb1\x6e\x3e\xcc\x6e\xde\x74\x5e\x3c\x73\x6f\xbd\xcc\x3e\xda\xe5\xac\xdf\x5d\xcc\xbd\xba\xeb\xcc\x3f\xf3\x43\x7f\x88\xc2\x99\xd9\x8f\xa2\x0a\x32\xeb\xd8\x7b\xcc\xea\x2b\x1a\x67\x33\x2e\x44\xb6\x67\xd9\xd2\x79\x4a\x24\x32\x31\xa6\xa8\x94\x94\xb3\x0c\x91\x42\x77\x61\x86\x4b\x23\x50\xe8\x91\xc4\x36\xf3\x57\xb7\x71\x5f\x43\x1b\x21\xb3\x33\x93\xbd\xf0\xc2\xbd\xf9\xec\xf0\xe6\x53\xb1\x21\xa9\x6b\x1a\x4d\x42\x44\x4d\x4e\xa7\xa0\xfb\x83\x49\x93\x54\xb3\xf1\x26\x03\x1c\x2b\x0c\x03\x8c\x2a\xc3\xe0\xfe\x0d\x50\x1d\xa3\xec\x59\x8f\x39\xca\x9f\x1d\xe7\x07\xa7\xa9\xa9\x16\xb8\xeb\xc0\x1f\x4b\x16\x7b\x72\x96\x87\x19\xa6\xa7\x5b\x5a\x5a\x84\xf7\x44\x9c\xe7\x3f\xe7\x5e\xfd\xdd\x5d\x5e\x3f\xda\x5f\xc4\x01\x67\xf6\xd6\xc3\x9f\x93\xdc\xee\x0f\x99\xbd\x83\xdc\xc1\x8f\xce\x85\x27\xd9\xbd\x8b\xd9\xbd\xcb\x21\x32\x8e\xe3\x59\xaa\x90\x8a\xcc\xce\x46\x70\xf3\x0f\x8f\xc6\x5d\x9b\xc9\xbd\xfa\x8a\xed\x0a\x37\xd7\x9d\x57\x37\x91\xc2\x72\xbc\xb2\x25\x05\xf4\xd9\x6f\x99\x49\xcf\xef\xe7\x76\xbe\xaf\x13\x93\xe2\xb1\xc7\x50\x28\x9a\x66\xd8\x1c\x85\x24\x75\x99\xe6\xfb\xdc\xfa\xc6\x9a\xad\x13\x49\x83\xb6\x5f\xf9\xbd\x20\xf8\xfb\x5b\xbc\xc3\x8a\x2d\xa1\xa9\x27\xd9\xc1\x9f\x85\xfe\xda\xed\x4b\x99\x9d\x99\xcc\xce\xf7\x85\x2d\x7f\x77\x57\x33\x7b\xdf\x66\x1f\xcc\x3a\x8f\x96\xd8\x09\x7b\x7e\xdb\x59\x79\x8c\x6f\xa2\xde\x0d\xbe\x7f\xb4\x3f\xef\xbc\x78\x76\x78\x79\xc9\xbd\xb1\xed\xac\x6e\x39\x5f\xb2\x2d\x3e\xfc\x82\xc8\xad\xab\x1b\x50\x89\x9d\x0f\x1d\xb2\xb8\xb9\x50\xf4\xc3\xa3\x36\xc3\x98\x9e\x86\xf4\x4d\xac\x93\xc0\x7f\x1c\x80\x7f\xe1\x8f\xb5\xc9\x4c\xa4\xee\x10\x49\x89\xb3\x7d\x09\x18\xb4\x5c\x38\xf7\x41\xa2\x7d\xce\x55\x24\x4d\xcc\xa2\x06\x57\x69\x21\xe8\xc0\x90\x23\xf4\x12\x33\x30\xa0\x83\x8e\x82\xfb\x99\xe7\xdb\x28\x74\xb7\x0e\x6a\x1d\xa6\xa9\x9b\xad\xa4\x4c\xb0\x07\xdd\x71\xe8\xde\x76\xe6\xb7\xd1\xdd\x51\x02\xda\xe1\xb5\xdb\xb9\xad\xad\x00\xb8\x32\xf4\x25\x75\x63\x32\xbc\xcb\xb4\x12\x2f\xf2\xa4\x97\x23\x07\x39\x5b\x72\xaf\x29\x80\x52\x86\x0a\x99\x62\xc1\x0a\x5e\x5d\x1f\x0f\xb3\x64\x42\x37\xc1\xf9\xe0\xdf\x41\xfa\xff\x45\x33\xe7\xe1\x26\x63\xce\xc1\xd7\xce\xc2\x92\xf3\x7c\x3d\x73\xb0\xc6\x0e\x94\x07\xd7\x8f\xf6\x45\x3e\x13\x1f\xff\x08\x9b\x25\x76\x5e\x83\xf8\x0a\x6f\x88\x2f\x42\xb6\xf0\x32\xb3\xb3\xc4\xc4\x09\x03\x27\xf7\xef\xc7\x83\x6e\x18\x90\xea\x21\x83\xa1\xe4\xeb\xa6\x26\x82\x81\x3a\x65\x84\x5a\xa2\xce\x6e\xce\xda\x13\x77\x67\xce\x59\xba\x9e\xd9\xd9\xf0\xb1\x3b\xab\x4b\x99\x9d\xdd\x42\x60\x05\x3d\xc3\x63\x51\x06\x17\xbd\x28\x40\x3a\xab\x59\x69\xc3\x80\x1b\x5b\x5d\xf0\x14\xcc\xf7\x81\x31\x0a\x0d\x27\x34\xfe\xaa\x45\x24\x93\xb6\x0a\x95\xbc\x4f\x62\x6e\x6b\x23\xf7\x64\x26\xbb\xbc\xe5\x7c\xf3\x85\x10\x3c\x3b\xdf\x3c\xff\x39\x7b\x7f\x3d\xf8\xb6\xf3\xf8\x42\x66\xe7\x8a\xbb\x30\xc3\x9b\xa6\xc7\x1a\x07\x78\x12\xc1\x71\x0b\x87\xbf\xfc\xda\xe8\x55\x25\x6e\x93\x96\xa3\x98\x33\xb5\xd4\xa7\xf9\xb8\x48\x2c\x62\xf8\x7a\xaf\xd0\x26\x2c\x05\xa2\x38\x42\x63\xeb\xbe\x5a\x09\xce\x7e\xd9\xe9\x78\x3c\xeb\xeb\x8f\xe2\xfd\xb1\xb4\x42\x89\x47\x68\x48\xc5\xfb\x3b\x81\xa4\x29\x7f\xc5\x2d\x11\x35\xae\x90\x42\x67\x2d\x6c\x0d\xa1\x02\xce\xaf\xb3\xb0\x8a\x2e\x4f\x94\x45\x4d\x45\x52\x95\xbf\xd2\x60\x38\x2d\x5a\x91\xed\xae\x38\xf3\x37\x9d\xc5\x1b\x91\x31\xaf\x12\x08\x30\x53\x42\x18\x5f\x2a\x80\xee\xde\x7d\xea\xde\xd8\x8e\x38\x66\x78\x08\xf8\x26\xab\x9b\xa3\x2d\xa0\x46\xdb\x7a\x3b\x63\x6c\x0e\xa0\xff\x78\x7c\x0f\xf8\xf9\xeb\xcc\x85\xf0\xe7\x62\xb4\x5a\x93\xed\x65\x94\xd9\x34\x85\x17\x41\xc1\x34\x4c\x1b\xaa\x2e\x95\x8b\xd3\xde\x75\xf6\x76\xc1\x66\xff\x32\xb3\xff\x20\x7b\xe7\x62\x66\xe7\xa9\x7b\x93\xef\x04\x65\x90\xea\x06\xd5\x02\xf1\xa5\x88\x23\x0e\x8f\x48\x2d\x7c\xed\xec\xcf\x04\xbe\x88\x85\x65\xc2\x54\x6c\xea\xdf\x70\x8d\x1e\xcd\xa5\xdb\xce\xdc\x3a\xbc\x1b\x09\xda\x4b\xbf\x1b\x68\xef\x45\xd7\xb8\x48\xba\x81\x3b\xf0\x1a\xba\xc5\xcb\xc0\xf3\x47\x16\x0d\x2f\xff\x5a\x34\x38\x7e\x71\x5a\x81\x88\x04\xb3\xcf\xd8\xa4\xaa\x92\x4d\x4d\x92\xb6\x84\x34\x7b\x2b\x92\x99\xd5\x80\xcf\xb9\x7f\x1f\xf3\x09\x98\x21\xbd\xba\x8c\x0e\xa4\x78\xa8\xc1\x04\xe6\x07\x78\x68\xb2\x3a\x3c\x09\x45\xff\x75\x73\xd4\x22\x6f\x41\xde\x16\x94\x2b\x10\x9a\xc6\x48\x00\x1c\xd7\xb3\xd7\x7e\x72\x17\x66\xdc\xb5\x05\x4e\x1e\x90\xc1\x34\xf3\xfd\xfb\x47\xfb\xf3\x99\xbd\xb9\xc3\xdb\xab\xd9\xcd\x87\xd9\xd5\x4b\xce\x57\xb7\xc4\xd6\xae\x47\xa1\x46\x27\x20\x0a\x23\x12\x88\x1b\xdb\xce\xde\x2e\x06\x5f\xca\x40\xc2\x28\x22\x06\x39\xbd\x56\x04\xe5\x24\x83\x6d\x35\x79\xb1\xc0\x61\x06\xa3\x81\xf1\x50\x62\x19\x10\xbf\x4f\x95\x38\x74\x95\xd9\xd9\x75\x37\x1e\x85\xfc\xc8\x01\x94\xb1\x64\xd3\xbb\xa2\x4b\xa2\x0a\xc7\xf1\xf9\xda\x5c\x70\xe6\x98\x14\x95\x05\x89\xbb\x9c\x94\x86\xf4\x50\x71\xbf\xc1\x60\x42\x75\x6e\xf3\x51\x6e\x6b\x36\xb3\xf7\x28\xbb\xb0\x18\x13\x3e\xde\x8f\x89\x01\x9b\x1d\xb7\x56\x2f\x45\xda\x4f\x85\xb0\xcb\x04\x2c\x83\xd0\x23\x13\x1a\x7c\xb8\x11\x19\x1d\x08\x0c\xf7\xc4\x32\x60\xd2\xa6\xca\xa5\x03\x6e\x3f\xe2\x36\x1d\x77\xf9\x03\x02\x7f\xf9\x43\xd3\x7c\x1e\xbb\xae\x50\x0d\x68\xe4\xf4\xc0\x40\x2c\x15\x09\xef\xc5\x91\xc3\x20\xc8\x56\xff\xce\xa2\x97\xcd\x87\xdb\x18\x2f\x8f\x83\x25\x38\x78\x8d\xb8\x18\x25\xe1\xfc\x1c\xc0\x62\xfd\x5e\x09\xa6\xb7\x78\x0d\x9e\xde\x9e\xbe\x01\xb8\x56\x14\xc8\x32\x78\x3b\x32\x3f\x39\x04\x33\x35\xc9\x3b\x0d\xc5\x2d\xb5\x14\xaa\xee\x53\x29\xe0\xa2\xf2\x71\x21\xc0\xf0\xa8\xa5\x9e\xe0\x0b\xca\x23\x15\x80\x3f\x3e\xa2\xeb\x95\xa3\x10\x57\x3e\xaa\xb5\xf0\x91\x2f\x7b\x8c\x74\xef\xc4\x16\x48\xa9\xc0\x7d\xce\xaf\xaa\x6f\xa4\xad\x31\x2a\x13\x2b\x0d\x35\x78\x20\xca\x20\xd6\xcb\xce\xf3\x9f\xdd\xf9\x55\xe7\xcb\xfb\xee\xf2\x93\xc3\x99\xd9\x82\x53\x1c\x57\xa8\x81\x27\x78\x1c\x2c\x47\xa8\x6e\x8e\x46\x2b\x11\xd8\x43\xcb\x40\xa9\xaa\x6c\x4c\xb4\x0e\x77\x5e\x3c\xe3\x7b\x74\x70\x90\x57\x17\x51\x43\x62\x74\xc2\x59\xf9\x12\x73\x50\xd0\x71\xc7\x7e\xfd\x72\xdd\xf9\xea\x4b\xe1\x59\xb0\xba\xfa\x49\x31\x09\xcd\xee\x3f\xcd\x3d\x7d\xe1\xec\xac\xba\xf3\xcf\x9d\xab\x8b\x99\xbd\x5b\xee\x8f\x2f\xf1\xac\x50\x86\xa0\xf3\x74\xb2\xb2\xec\x16\xb6\x4b\x07\x76\x0a\x4e\x08\xe4\x37\x46\x20\x82\x41\x16\x8a\xa6\xa9\xa7\x7c\x5f\x4a\xbe\x34\xcf\x08\xbc\x15\x9d\xc4\xf1\xe0\x85\xbb\xb4\x59\x98\xfd\x03\x8e\x95\xdc\xe6\xcb\xec\xc1\x66\x15\x12\xc9\xdd\xa4\xf5\x74\x33\x57\xe7\x32\x5c\xab\xd0\xf5\x5e\x34\xd4\xd0\x10\xc4\x2e\x40\x6f\xd0\xf9\x93\xca\xd4\x54\xcb\x07\xde\x3f\xba\x63\x0d\xa2\xd0\xd6\x17\x80\x88\x26\x80\x9b\xe1\x53\x53\x2d\x27\xe1\x2f\x3e\x36\x26\x95\x45\xcc\xaf\x17\x97\x33\x3b\xbb\x25\xb8\x4c\xfc\xb3\x44\x21\x35\xe5\x47\xd1\x30\x52\x83\xba\x30\x84\xa1\x3c\x4d\x78\x7d\x79\x6a\xaa\xe5\xdf\xd9\x1f\x0d\xa1\xeb\x70\x6e\xe9\xf0\x9b\x7b\x05\x38\xca\x53\x56\x74\x36\xf0\xf9\x2d\x76\x22\x20\x35\xe8\xfe\xf2\xde\x25\x15\x1d\x11\x00\x33\xa0\x9c\x9a\x6a\x39\xcd\x37\xfb\xb8\x52\x8e\xd0\x8b\xbf\x8c\x89\xee\x6c\x5f\x97\x48\xa8\x1b\xac\x51\x4a\xcb\xba\x40\xa3\x14\x8e\x15\xc8\x2e\x3f\xcc\xf0\xc1\x8b\x7d\xe8\x3d\x19\x82\x27\xfe\x70\xd2\x3e\x75\x71\xc6\x92\x2e\x2d\x74\xfe\xd9\xad\x14\xa2\xb2\x94\x16\x9e\xe7\x38\x65\xed\xb8\x13\x31\xf6\xc5\xe6\x75\xe8\x9b\x10\x89\xc5\xe7\xc0\x38\x4c\x0c\xb5\x18\x9e\x9a\x6a\x69\xc8\x92\x2d\x3e\x46\xe6\x51\xd5\x40\x64\x68\xaf\x2c\x21\xd5\x0d\xdc\x23\x8b\xa5\x39\xb8\x37\xd6\x67\xbc\x7e\x3a\x73\x91\xbb\xbb\x62\x23\xa1\x6e\x92\x56\x95\xa9\x10\xb4\xde\x8a\x06\x13\x9f\x1f\xcc\x70\xcc\x7f\xfd\x11\x9d\x0c\x6c\xdb\x11\x3c\xeb\xe4\x8f\x1a\xc2\x90\x02\xdb\x54\x8c\x36\xc4\x09\xb0\x5d\x4b\x8d\x25\x06\x33\xc6\x24\x93\xca\x22\x0b\xa6\xbe\xcb\xd6\x99\xfb\x29\xb3\xfb\x43\x55\xb6\x09\xca\x62\x49\x6b\xe0\xcd\x59\x59\x3c\x31\xbf\x3a\xfb\xa1\xe4\xea\x2a\xb5\x10\x5f\xc7\x8a\xcb\xaf\xad\x92\x4b\xaf\xfc\x68\xa0\x07\x42\x7d\xf2\x5c\x62\x8e\xb4\x0c\x41\x98\xf9\xef\x55\x2b\x14\x06\xfa\xfe\xc5\x34\x1f\x3a\xca\xdd\x95\xd5\xcc\xcb\xbb\xe2\x90\x62\xf9\xe9\x02\xee\xf8\x99\x16\xf1\x06\x13\xa4\xa0\xd4\xb7\x22\x8c\xde\x35\x6d\x32\x41\xa1\x9a\xe0\x9f\x79\x8a\x14\xcf\x8c\xb7\xcd\x49\x22\x8d\x4a\x11\x59\x9d\x58\x1f\xe4\xf9\xcf\xb9\x6f\x7e\x70\xaf\x5c\xcd\xee\xdd\xc3\xbc\xf4\xc3\xcb\x4b\xb9\xad\xeb\xe2\x50\x5f\x1e\x73\x73\x5e\x10\x14\x0d\xb2\xcd\x21\xeb\x8e\xd7\x49\x68\x86\x68\x2f\x25\xf4\x73\x43\xb7\xa8\x9f\xb7\x1c\xb3\x80\x5a\x71\xf1\x34\x91\xd7\x61\x6f\x3d\x7b\xf7\xa9\xbb\xbc\xee\xae\x5c\x75\xe6\xd6\xb1\x84\x09\xce\xa4\x3b\x7f\xc3\x59\x7b\x82\xa1\xb0\xcc\xce\x86\x3f\xbd\x38\xf2\xa3\xfd\x45\x67\xfb\x92\xb3\xf6\xa4\x80\x24\x1e\xc7\x5f\xb9\x75\x78\x79\x25\xb3\xb3\x01\x9a\x0a\x62\xcf\x41\x97\xcf\xdc\x8f\xce\xfe\x8c\x80\x41\xdc\x6f\xd1\x1b\x7d\x3d\x86\x67\x7b\x44\x5d\x8c\xe1\x80\xbc\x7b\x31\x44\x56\x30\xc6\x9a\x92\xec\xe4\x58\x0c\xb0\x99\x9d\x25\x67\xf1\xc5\xe1\x9c\x28\x7d\x3d\x6d\xd9\x7a\x2a\x78\xc9\x6e\x12\xf3\x0f\xde\xa2\x2d\xa3\x2d\x24\x35\x99\xaf\xef\xfb\x36\x9b\xd9\x53\x8a\x0d\xce\x74\xfc\xb9\xa9\xdc\xbd\x85\x3f\x4b\xe3\x52\x1e\x42\xcb\xa8\x62\x37\x85\xc0\x40\xbe\x83\x44\x86\x4d\x49\x4b\x8e\xb1\x1f\x6c\x69\xb4\x7a\xd8\xff\x36\xfe\x5e\xcb\x7b\x2d\x27\x9a\xb0\xf1\xa7\xf7\x0f\x5b\x1a\x7d\x1b\x2f\x90\x58\x14\x06\x6a\x27\x94\x40\xcc\xd6\x22\xba\xa6\x4e\x36\xfb\x17\xea\x9a\x78\x1a\x4d\x13\x23\xa7\x49\x4b\xab\xaa\xa8\xf0\xc2\xe1\xcc\x9d\xdc\xab\xcb\x58\xec\xe7\x68\x7f\x3e\xf3\xf2\x8a\xf3\xf8\xc2\xd1\xfe\x62\x90\x69\x47\xfb\x0b\xbf\xce\xcc\xf2\xe1\x06\x5f\xfa\x8f\x99\xb5\xca\x07\xf8\x1f\x33\xf7\x8e\xf6\x17\x98\x48\xef\x3c\x76\xe6\x2f\xb9\xd7\xb6\xdc\xf9\x1b\xee\x83\xcb\xb9\xcd\xed\xec\x9d\x8b\xa4\x5e\x68\x38\x1f\xff\x63\xe6\x1e\x5e\xd2\xf8\x8f\x99\x35\xff\x09\x62\x3b\xda\x5f\x80\x4c\x8c\x67\x79\x3e\xe2\x05\x97\xcc\xde\x1c\x46\x55\x9c\x4b\x73\xd9\x83\x4d\x12\x60\x04\xd3\x2b\xfc\x42\x66\x9e\xc7\xee\xfc\x0d\x8f\xc9\x51\xf2\x39\x46\x25\x99\x9a\x16\xe6\xcb\x27\xd5\xb4\x4c\x3d\x55\xc2\x5b\x73\x35\x87\x12\xad\x79\x41\x4d\x2a\x93\x54\x5a\xb5\x15\x43\xa5\xc4\x56\x52\xc2\x5e\x64\xb9\xc7\xb3\x58\x6c\xc8\x59\x7b\xc2\x88\xfc\xe9\x02\xcf\x5d\x87\x21\x3a\x8f\x9e\x1e\xed\x2f\x06\xb3\xae\x79\x7d\x22\xc8\xba\x2e\x4d\xf6\xc9\xce\xfe\x8f\x2a\xda\x5b\x4f\xf6\xb4\x7f\xd4\xd1\x37\xd4\x79\xa6\xed\x54\x65\x55\x88\xab\x28\x27\x8e\x9f\xf4\x8b\x94\x87\x28\x23\x8c\x7f\x26\x4a\x14\x77\xee\xdf\x6f\x15\x7c\x28\x59\x63\xc3\xba\x64\xca\xad\xbe\xcb\x40\xa8\xc7\xbf\xcf\x3d\x7c\xe2\xde\x7b\x15\x78\xb3\x34\x48\xc8\xa4\xe7\x21\x70\x93\xf2\xbc\x4f\x30\x61\x45\xe4\x41\xa6\xbc\x7b\x83\x2d\x94\xdc\x3f\x2f\xba\xbb\xab\x68\x5b\xc6\x80\x8f\x16\x4b\xc5\x58\xd0\xdc\x88\x83\x0b\x8a\x11\xc4\x49\xc5\x78\x70\x78\xfb\x51\xd9\x54\x0c\x1f\x5e\xf9\x54\x0c\x80\x57\x26\x15\xc3\x07\x17\x99\x56\x88\xb0\xc4\xb2\xe3\x01\x89\x64\x1e\xc0\x88\xc5\xaa\xf2\x6c\x8a\xc5\xa1\x0a\xa2\xf7\xf9\x6a\x0d\xe5\xa3\xf7\x45\xf0\xcb\x44\xef\xf3\xb0\xcb\x47\xef\x8b\x60\x97\x8d\xde\x17\x56\xa1\x88\x09\x57\xdc\xec\xbd\xb8\x74\x45\x39\x90\xc1\x73\x70\xb4\x00\x79\xa7\xd8\x72\x10\x23\x53\x0c\x18\xa4\xa8\x14\x83\x30\x18\x7e\xf2\x85\xcb\x39\x4a\xfe\x6e\x9c\x26\x59\x96\x32\x8a\x9b\x4c\xf0\x3d\x4c\x2e\x57\xd5\xe8\xf6\x96\x41\x22\x50\xa2\x51\x35\x30\x83\xf3\xc5\x33\x67\xe5\x86\xfb\x6c\x9e\xa7\x02\x79\xb5\x2c\x42\x2f\xcf\x5f\x12\x9a\x6c\x3e\xf5\x11\xa9\x3f\x1c\x7d\x44\xea\x8f\x07\x05\x32\x99\x8c\x31\x49\xa3\x32\xae\x2a\x8b\xbc\xa5\xb4\xd0\x16\x62\x8f\xe9\x16\xe5\x17\x00\x4c\xca\x6d\x4e\xc3\xa0\x32\x5e\x21\x60\x66\xb9\x38\xe5\x09\x04\x04\x86\xe7\x6c\x3c\xca\xfe\x70\xc5\x2f\xdb\x17\xb4\x4d\xdc\xb5\xef\xdd\x5b\x0f\x9c\xed\x8b\xce\xfc\x76\x41\xb4\xee\xf0\xc2\xb7\x99\xdd\xbb\xde\x27\x82\x3c\x28\x6f\x08\xb1\x52\x34\x40\xd5\x95\x4d\xd1\x28\x05\xb2\x38\x71\x02\xab\xbf\xf0\x48\x7e\xfc\xe4\x8c\x40\xbf\x3e\x42\x48\xb1\xda\x8f\x87\x28\x98\x9a\x51\xb6\x01\x60\x08\x40\x75\x0d\xaf\x62\x02\xac\xb8\x87\x55\xd5\x70\x63\xb4\xa5\x8a\x0d\xbb\x71\x9d\xa6\xf2\x92\x24\x4e\x69\xe3\x3a\xaf\x6c\xc6\x7b\x1e\x56\x54\x4e\x04\xac\xf8\x88\x9c\x08\x0e\x25\xc9\x36\x0b\x55\x15\x16\x2f\xe2\x8b\xf7\xeb\xa5\xcc\xc1\x9a\xf3\xfc\x67\x54\x55\x91\x10\x51\x3b\xb2\xa3\x9c\xa2\x05\x4c\x6f\x31\xad\x51\xd0\xac\xf8\x79\x7a\xc0\xbc\xe8\x3c\x3d\x80\xf9\x9b\x89\xdd\x07\xa6\x28\xfe\x35\x9e\xca\x63\xf7\xfe\xa0\x6b\x8b\xdd\x87\x8d\xc3\x4a\x62\xf7\x3e\x01\x0d\xf7\x7c\x73\xa3\x33\xb6\xcf\xdb\xa7\xec\xb7\x18\x9f\x28\x36\xd5\xc4\x98\x99\x60\x54\x1e\x99\xf0\x87\xdf\xc0\x74\x04\x81\x8c\x97\xa7\xa9\xc1\xe9\x08\xf9\xb3\x45\xdc\x70\x82\x4f\x99\x1f\xa5\xef\x63\x7f\x4c\x4f\x47\x5c\x16\xae\x10\x52\xbc\x55\x98\x8f\xb7\x07\x3e\x8b\x89\xc8\x8f\xd0\x57\x82\x26\x3a\xac\xef\x23\x79\x7d\x61\xfd\x90\xaa\x8f\x1f\xd6\x0f\x50\x1a\x27\xac\x5f\x8f\x85\x1b\xf3\x74\xf8\x9a\x02\xfa\xa5\x4f\x96\x31\x02\xdc\x45\x44\xfe\x86\xa2\x3b\x55\x6d\xa3\x95\x86\x73\xf2\x0c\x10\x47\x47\xeb\xac\x34\xab\x88\x78\x16\x50\xe9\x47\x8e\xc2\x57\xd9\xf2\xcf\x31\xf7\xa2\xb1\xf3\x11\xc4\xc4\x6f\x22\xfb\xf3\x12\xa2\xae\xfc\xa8\x4a\x85\xd2\x1a\x43\x7d\x65\x91\xb7\x93\xf9\xc6\x62\xad\x01\x91\x0a\x3c\x16\x2b\x93\x95\x95\xdc\xab\x6d\xf1\x57\x02\x7c\xb6\xa4\xa8\x95\x15\xe9\x3a\xa9\xc8\x50\x2e\x26\x45\x25\xed\x7f\x8b\x88\xb9\xf0\xc4\x5d\xf8\x3a\xbb\x79\xf3\x68\x5f\xe4\x71\xc1\x7a\x8d\x5e\x2f\x56\x9e\x0b\x1c\xb4\xf1\xfd\x7b\x92\x02\x1c\xd9\xc7\xb3\xd9\x6b\x4f\x9c\xad\x17\xbc\xba\x21\xc8\x49\xf6\xce\x45\x2c\x7d\x15\x0b\x2b\x94\x5d\xf7\x14\x51\xc0\x40\xf3\x8b\xef\xe9\x18\x76\xf4\xae\x65\x95\xa3\x04\x0b\x10\xb8\xf3\x37\x9c\xb9\x27\x87\x5f\x3c\xf1\x49\xca\x3f\x7f\x74\x87\xfd\x11\x2e\xe6\x59\x31\xc1\x3e\x97\x82\xf4\xc6\xe3\x52\x15\xa8\x0d\x8b\xa6\x65\x3d\x61\xdb\x70\x3d\x4d\x4f\x96\x9f\x93\xcc\xfe\xf7\x84\xbd\x1e\xe9\x6c\xe2\xd0\x2d\x6b\xcc\xbf\x18\x16\x08\xc8\x46\x8f\x26\xec\xd3\x21\xfd\xfd\xa7\xa3\x91\x40\xce\x7b\xfe\x2e\xa5\xa9\xa7\x78\x69\x2b\xb8\x77\x07\xa6\x39\x76\x33\x17\xa3\x75\x37\xbe\x09\x80\xc0\xf0\x55\x76\xff\x46\x6e\xeb\x2b\x77\xe1\x6b\x67\x71\xae\x3c\x01\x69\x0b\xcb\x66\x78\xdd\x6a\x89\xa5\xa3\x17\x0c\xfa\xd9\xf2\xc6\x8a\xf9\x69\xd6\x64\x08\x3a\xa5\x2d\xfc\x9a\x7f\x14\x49\x20\x06\xc8\xdc\xfb\xab\x99\x9d\xef\x9d\x2f\xef\xe7\xbe\x38\x38\xda\x5f\xe4\x0f\xe7\x9f\xbb\x37\x1f\xb8\xf7\xbe\xc0\x19\x77\xae\x2e\xf2\x1a\xb3\x5e\xc5\x2b\x7c\x3f\x6a\x14\xfc\xc2\x00\xa3\x4f\x1f\xc1\x25\x02\xa5\x8d\x24\xad\xc4\x11\xa7\x68\x57\xaf\xd7\x96\x96\x97\xe7\xd2\xfb\x6e\xfe\x3e\x7a\x01\x75\xbe\xb4\x8b\x95\x6f\xe1\x30\xd9\x34\xa8\x2a\xaf\x32\xad\x8f\x88\x07\x37\x12\xd0\x11\x81\x91\xc6\x3b\x10\x07\x46\xda\x5d\x7a\xa4\x81\x9b\x9d\x62\x83\x03\x6e\xab\xa3\x67\x34\xbc\xba\x1b\x34\x5e\x26\x94\x0d\x3b\xed\xf9\x63\x2f\x95\xf6\xd4\x68\x1e\x94\x10\xed\x72\xcc\xf8\x2d\x32\xa2\xe6\x55\xc0\x54\x33\x2f\x4c\x81\x89\x0f\xa1\x9a\x1a\xe5\x46\xe4\x53\x5e\xa2\x16\x07\xd3\xd8\xc4\xbd\xb6\xe5\x2e\x8a\x6b\xac\x8a\xe9\x40\x93\xb4\x29\x6c\x8d\xc7\xa7\x87\x1b\x8d\x85\xdf\x57\x42\x17\x74\x7a\x65\xef\x06\xac\x17\x3f\x9c\x23\xbc\xc0\xb4\xe4\xcc\xcd\xe6\x36\x77\x7c\x12\x72\xaf\xee\xe6\x1e\x2e\x02\x9c\x32\xfb\xb0\x28\xd0\x2a\xfe\x80\x57\x36\xc6\x8c\x97\x77\x7f\xff\xdf\xcf\x34\x43\x23\x4b\xf6\x9f\x53\xa2\xe8\x0a\x16\x2e\xc6\x1a\xc5\xc1\x70\x0a\xfb\xfc\xd7\x99\x59\xf8\x9e\xfd\xf7\x94\x38\x70\xa2\x58\x86\x2a\x4d\x7a\xe5\x7f\xe1\x1e\x9c\x2d\xd9\x69\xbf\x9a\x96\x68\x86\xa0\x38\x5b\xc1\xb6\xce\x6b\xd4\x7d\xf9\xcc\xb9\xf4\x4f\xe7\x2a\xfb\xc3\x9d\x11\x24\x33\x9d\xd4\x79\xd1\x1e\x55\x37\x95\xbf\x52\xa2\xa7\x6d\x23\x2d\x2a\x1b\xc3\x26\x62\xeb\x45\xee\xe5\xd7\xce\xe5\x5d\xbc\xb6\x75\xf8\xcd\x5a\x6e\xe1\xe7\x48\xd0\xf4\x73\x9a\x4c\x63\x84\x98\xa6\x74\x9b\x7a\x35\x14\xc5\x38\xdc\x85\xef\x72\x0f\x17\x73\xaf\xd6\xd8\x80\xa0\xca\x5e\x24\x82\x94\x64\x78\xe1\x67\xec\x06\x8a\x77\xd6\xf9\xf5\xc1\x94\x3e\x4e\xbd\x28\x1a\x98\x2f\x86\x49\xc7\x15\x3d\x6d\xe1\x7d\x4a\x0b\xeb\xe2\x95\xb9\xe6\xbe\xe4\x6c\x5f\x42\x57\x8c\x1f\x1d\x2b\xb8\xf8\x8e\x41\xc4\xcc\xde\x72\xc1\x73\xa6\x4d\xe6\xe6\x9d\x85\x25\xbc\x87\x99\xd9\xd9\x38\xbc\xfd\xc8\x59\xde\x8b\x8c\x78\xe1\xb8\xa0\xde\x97\x77\x07\x4f\x1a\xb1\xa9\x09\x24\x8b\x6d\x2d\x44\xe1\xac\x2e\x33\x82\xa1\x58\x57\x8c\x38\x86\x9e\x3c\x4f\xcd\x84\x92\x82\x0b\x8e\xba\x5f\x51\x01\xc5\x9f\xd9\x57\xc7\xe5\xc0\x2b\x09\xa6\x62\x45\xab\x20\xf7\x78\xd6\x2f\x9f\x40\x82\x80\x83\x4b\xa2\x34\x48\xf1\xba\xd0\x93\xe9\x14\xd5\x6c\x40\x42\xd2\xa6\x5a\x36\x61\xc5\xbd\x71\xd9\x7d\xf8\x2d\x39\xdb\xd7\x55\x36\x63\x05\x5d\xe1\x38\xd4\x40\x64\x49\x18\x43\xc5\x92\x10\xde\x48\x02\x5f\x44\x90\xcf\x50\x08\x2b\x39\x3a\xf7\xef\xb7\x12\xd1\x97\x58\x5a\x98\x48\xb6\x4d\x53\x86\x4d\x46\x24\x45\xa5\xb2\x57\x87\x4b\x37\xa7\xa7\x07\xb5\x41\xed\x2c\xd6\x92\x85\x24\x2c\x28\xab\xd8\xec\x17\x34\xb5\xb0\x09\xf6\xb8\xa4\xa8\x98\xbe\xc9\xa4\x9f\xe9\xda\x51\x65\x9c\x02\x2f\xc5\x45\xe7\xaf\xe4\x0e\x0e\x78\x41\xd0\x47\x3f\xe5\x9e\xae\x17\xa2\xe5\x85\x4d\xa0\xee\xe2\xd1\xfe\x22\x16\xec\xe2\x76\xf1\xde\x72\x76\xef\xb6\xb3\x79\x07\x6f\xf8\x2f\x3f\x77\x56\x6e\x08\xb3\x56\xbd\x51\xfa\xc5\x20\x79\xc9\xb0\x26\x0b\x2b\xa0\x5b\xe9\x14\x91\x75\x6a\xe5\xf3\x2b\xe1\x46\x30\x49\x51\x5b\x92\x25\x61\xda\x0a\x0e\x20\x5f\xd9\xb6\xa8\x6a\xa5\xfb\xe0\xe1\xe1\xf7\x8b\xce\xd5\xc5\xcc\xce\xb2\xb3\x71\xcb\xb9\xf0\xc4\xd9\xfd\xda\x99\xfb\xc2\xbd\xbe\xed\x2e\x6d\x96\x49\xd0\x3c\x99\x4e\x19\xa1\xaa\x90\x8c\xf5\x54\x92\x41\x95\x60\x21\x44\xd1\x0a\x81\x42\x8d\x05\x15\x16\x8f\xf6\x17\x73\x33\x8b\x99\x9d\x25\xac\x50\x58\x1a\x67\x47\xf7\xb9\xce\xbe\x9e\xee\x33\x1d\xdd\x03\xe4\x5c\x5b\x5f\x67\xdb\x07\x5d\x1d\x04\xfa\xd8\x8b\x92\xc6\x82\xf9\xb2\xc2\x60\x5c\x04\x58\x91\xcc\x16\xc0\x15\x24\x98\x95\x02\x1c\x0b\x64\x79\x78\x95\x95\x45\xf5\xa2\xf0\x22\xd4\x8f\x76\x85\xf9\x37\x1d\x29\xc3\xc6\x12\xa9\x44\x37\xc9\x88\xae\xca\xc2\xe4\x0e\x01\x00\x5c\x9c\x90\xb7\x60\x98\xfa\xe7\x93\x5e\xe1\xfb\xb6\xde\x4e\x2f\x4b\x52\x98\xad\xb2\xf5\x02\x5e\xc3\xe4\x47\xec\x5a\x89\x90\xd0\x6d\x1c\x89\xb1\x7a\xd7\x10\x22\xaa\xcc\x35\x14\x46\x5a\x27\xcf\x90\x4f\x48\xfd\x3d\x43\xa5\xe8\xad\xc4\x31\x54\xc0\xa3\xca\x31\xeb\x26\x34\x46\x1a\x86\xa6\x85\xaa\x2e\xcc\x18\x02\x3c\xee\xfc\x0d\x34\xc0\xa3\x6c\x2d\x0e\xb8\x32\x97\x10\x1f\x47\x5c\x97\x10\xc7\x11\xf6\x08\x05\x4c\x86\xf2\xce\x20\x3c\x1f\x54\xe1\x0c\x0a\xa0\x6e\xa4\x2f\x08\xe9\x2b\xed\x0b\x82\xf2\xd6\xdc\x1d\xb4\xb6\x90\x77\x07\xbd\x78\xc6\x1b\x63\xc5\x71\x07\xc1\x38\x7e\x1b\xde\xa0\xbc\x10\xd7\xfd\x1c\x5c\x38\xca\x5a\x9d\x41\xf5\x1a\x68\x83\x9c\x41\x35\x0d\xb7\xa1\xbe\x20\x7f\xe8\x8d\xf6\x05\x95\x60\xc1\x6f\xc9\x15\x54\x03\x1f\x6a\x5d\x02\xb5\x79\x82\x7c\xc2\xab\xf4\x04\x09\xc9\xa8\xce\x11\x94\xe7\x63\x6d\x8e\xa0\x0e\x4d\x36\x74\x45\xb3\xc9\x5b\x8c\x96\x31\xdb\x36\xa0\xfd\xd1\xdb\x22\xcb\x4e\xfc\x7e\x34\x78\x99\x1a\x26\x4d\x4a\xe2\xae\x80\xa2\xef\xc7\xf3\x97\xde\xa6\xa6\x5a\xce\x49\x9e\x7b\x79\x42\xb2\x78\xb9\x4e\x5b\xc4\xa9\xa0\x2d\x1b\xfe\xd8\x5d\xfb\x1e\x9d\x26\xc2\xd3\x10\x1c\xb0\xf8\x1a\x2a\x99\x12\xc4\x86\x7f\xea\x6c\xe7\xc9\xa6\x56\x51\xb9\x1d\x94\x4b\xb6\x1f\xed\x5c\x81\x57\xd9\x9c\x94\x12\x7b\xf7\xe6\x33\xe7\xf2\xee\xe1\xb5\xdb\xa2\x03\x28\x12\x03\x7b\x35\x56\xc1\x07\x73\x55\x24\x1f\x7f\xbf\xe8\xec\xed\xa2\xad\xea\x43\x8e\x82\x9b\xf4\xae\x66\xe6\x8b\x0b\x29\x2a\x15\x0e\x8b\x5f\xff\x86\x92\x40\x78\x88\x8b\x49\xbf\x8f\x87\xd3\x5f\xbe\x09\x2a\xaf\xa7\x11\x1e\x4a\xbe\xf8\xb4\xc8\x99\x50\x80\xce\xe6\x15\x4f\xcb\x96\xe1\x46\x74\xc1\xf2\xa6\x01\xa4\x15\xa1\x8c\xac\xab\xea\xa1\xf9\x32\xb3\xff\xa0\xb2\x09\x2a\x79\x77\x36\x46\x41\xef\xa8\xfb\xb3\x79\xe9\xf3\x0a\xca\x46\x96\xf5\x16\x50\xc4\x69\xa9\x6c\x6d\x03\x28\xb9\x64\x3a\x26\xae\x8c\x58\x43\x2b\x4e\xc4\x2c\x5c\x56\x71\x47\x25\x47\x27\x66\xc6\x29\xd6\x2b\xcc\xb9\x2c\xa0\x26\xba\x68\x6f\x7c\x72\xea\x41\x4b\x7c\x42\x82\xb3\xcd\x77\xf5\x41\xed\x8c\x77\x87\x10\xad\x7e\xb8\xb3\xea\x9f\x02\x20\x33\xdd\xa4\x76\xda\xd4\xa8\xdc\x42\x7a\xf1\xe2\x35\x3b\x02\x34\x25\x47\x48\x32\x6d\xaa\x4d\xf8\x05\x3f\xf5\x25\x89\x6e\x2a\xd8\x03\x08\xfc\x38\x55\x49\x94\x30\xe6\x52\x36\xf3\x01\x74\xf5\xe1\xc3\x17\xe1\xcd\x33\xa6\x7e\x13\xe3\xc5\x2d\xbe\x1c\xf6\x7c\xdb\xd6\x12\xa8\x23\x11\xfb\xdd\x51\x40\xaf\xe6\x27\x55\x58\x01\x0f\x9d\x5f\x05\x8a\x35\xf4\x5d\x2c\x74\x96\xa1\x6b\x16\x8d\x8d\xcf\xf9\x7a\xc9\xd9\xbd\x56\x31\x3e\x2a\xb2\x9c\xca\xba\x2b\x6a\x9a\x4e\x21\xda\xc8\xd9\x2c\xb0\xcb\xaa\x98\xcd\x11\xec\xa9\x1c\xf0\x16\xb3\x33\x58\xac\x4a\xe1\xf7\xd7\xdd\x85\x97\xce\x0a\xa3\x00\xed\x8c\xca\x95\x4e\x31\x76\xbc\xc8\x55\x56\xdb\x84\x90\xc3\xd8\x2b\xd4\x32\x1e\xe6\xea\x95\x2f\x27\x21\x4a\xe1\x55\xc8\x85\x2a\x35\x6f\x0c\x42\x2a\xe3\x49\x99\x1e\x12\x88\x8f\x9b\x64\x95\xc8\x58\xa1\x55\x9b\xdf\x29\x63\x25\xeb\x01\xda\x48\x8b\x56\x04\xb0\x06\xda\xea\x41\x4e\x3c\x0a\x4a\x65\xeb\xc6\xa5\xa2\x64\xae\x6d\xa5\x74\xe8\xe6\x84\x64\x02\x29\x4c\xf9\x88\x0f\x1a\x07\x3f\x3a\x2b\x5f\xa1\xb6\xc3\xe2\xe2\x31\x55\xdc\x28\xd6\x0d\x05\x0d\x95\xd4\x65\xb1\xcd\x8f\xa1\x23\x78\x0f\x1b\x16\x55\x81\x40\xd1\x46\x74\xd1\xa9\x32\x08\x1f\x0a\xaf\x56\x08\x3f\xd8\xa2\xc9\x4a\xa7\x52\xd0\xe9\x26\x12\x57\xa8\xbc\xe9\x57\xb7\x72\x8f\x2b\x1d\x52\xbe\x85\xa8\x57\x8d\x95\x47\xcd\xa6\xa6\x5a\x3e\x54\x54\xda\x2b\xd9\x63\x11\x37\xf9\x97\x79\x5f\xbf\xd0\xdb\x3c\x44\xc7\x7b\x6a\x42\x77\xcf\x58\xcb\xd9\xa3\x09\xe2\x23\x8c\xcf\x91\x43\xe7\xd5\x5e\xc2\x7c\x8e\x03\x5e\xd7\xb0\x50\x04\xde\x13\x88\x21\x30\x99\x9d\x19\xf7\xc7\x87\xee\xcc\x77\xd8\xe9\xcd\x5d\x9e\x77\xef\x7d\x51\x95\x00\x71\xde\x7a\xb1\x46\x64\xb8\x49\x0d\x5d\x48\x41\x66\x2f\x1f\x4d\xe4\xe3\x06\x8e\xfb\x91\xc5\x0a\x29\xc0\x6a\x1a\xd8\xad\x88\x62\x5f\x1d\x3f\xc1\x39\xfa\x88\x82\xd8\x0f\x2f\x2f\x39\x9b\x77\x9c\xd5\xaf\xb2\x77\x2e\x66\x0e\x96\xb2\x07\x9b\x45\x87\xcb\x72\xe7\x13\xb8\x80\x2d\xa9\xca\x5f\x19\x3d\x7d\xbd\xed\x9e\x0b\x2f\xe2\xa8\x7e\xcf\xf9\xee\x8a\xb3\x78\x03\xde\x46\xd7\x5a\xcc\x61\xa7\x24\xd3\x1a\x93\xc0\xfe\xf9\x43\x7f\x8f\xa8\x82\x86\xb3\xf5\x02\x7e\x26\xd9\xfd\x1b\xd9\xbd\x8b\xb1\xa4\x49\x37\xa8\x96\x57\x3a\xd0\xb6\x0e\xf8\x28\xd2\xa7\xd8\x12\x04\xf2\x8b\xa0\xbb\x5c\xcc\x01\x78\x68\xe2\x75\x1f\x29\xdd\x77\x24\xd6\x78\x0c\xc9\xb4\xca\xb0\x29\xf7\xdd\xb7\xee\xdf\x57\x91\x53\x15\xc1\xe4\x85\x5d\x22\xc1\x3a\x8f\x9e\x56\x04\xd3\x33\xdb\xab\x38\x59\xf1\x1e\xe8\x31\x7c\x50\x98\x36\x14\xdf\x07\x65\x98\xba\xe7\x69\x93\x0c\x74\xd7\x40\xdb\x59\xe8\x3b\x0a\xba\xb1\x29\xc6\x4a\x73\x1e\x5d\xcc\xae\x5e\x0a\x7e\x54\xe2\x96\xa8\xc0\xb3\x53\x6e\xf1\x95\xa2\x30\x36\x49\xf5\xc5\x9f\xd7\x80\x4c\x01\x50\x53\xbc\xfe\x01\xb9\x7b\x6f\x3d\x77\xd9\x0b\xca\xde\x7e\x92\xbd\x73\xb1\x22\x05\x68\x52\x49\x3e\x3e\x61\x2a\x7c\xd7\xd3\x46\x94\x51\x21\xc2\x72\x70\x8a\xbd\x8c\x65\xed\xa9\xdc\xd6\x1e\xd3\xdd\xa5\xdd\x8d\xf1\xec\x28\x0f\x73\x19\xc9\x47\x4c\x05\x87\xd4\x4a\xe0\xc2\x9c\x44\x0f\x03\xa6\x02\x2d\x35\xdc\x04\x98\x70\xd6\x88\xb1\x9c\x14\x04\x51\x07\xa5\xa0\x00\x6f\x39\x29\x18\x31\x29\x64\xbc\xd5\x26\x03\x3e\x14\x3d\x7f\xd9\x30\x62\xff\x7a\xee\xde\xd8\x26\x3d\x6d\xec\x55\xbc\x34\x18\x9b\xdc\x94\x3e\x1e\x30\x1c\xbc\xee\x87\x55\xd1\xac\x49\xa9\xea\x1d\x94\x7e\xbb\xee\xfa\xf8\x28\xb9\xde\x05\x6b\x4f\x2c\x6d\x99\xbd\xe5\xa0\x90\x61\x8e\x6e\x05\xea\x38\x80\xc5\x37\xfa\xa0\x63\x6a\x48\xde\xca\x8e\x9d\x99\xb9\x9e\xc0\x79\x95\xc3\xb8\x45\x58\x64\x05\xc6\x1d\xbe\xa5\xab\xe3\xfe\x15\xde\x18\xea\x03\xf6\x48\x9e\x30\x5a\xb9\xe2\x80\xc4\xcf\x82\x13\x46\x8c\x81\x07\xbb\xb4\x86\x74\x7f\xe5\xe3\xb5\x4d\x85\xc2\x80\x2d\x5b\x4a\x9e\x17\x9b\x49\xdf\xce\x64\x9f\x7e\xe3\x3c\xb8\xe4\x3e\x98\x8f\xbd\x46\xc2\xb0\xe3\x6c\x67\x02\x34\x31\x07\x93\xd6\x34\xaf\x62\x2b\x7c\xd3\xae\xea\x69\xb9\x5d\xd7\x6c\x53\x57\x55\x6a\x9e\xa1\x96\x25\x8d\x8a\xaf\x41\x47\xc1\xb6\xa4\xf1\xe0\xe6\x12\x47\x38\x5f\xdd\x73\x36\x6e\x15\x38\x4d\xe2\x0e\x05\x5a\x03\x56\xaf\x14\xb0\x57\x60\x7d\x34\x82\x4f\x0a\xe6\xab\x0f\x41\xb2\xe6\x90\x3d\x69\xd0\x28\x27\x29\x52\x10\xf2\x90\x16\x7f\x1f\x53\x90\x30\xda\x55\xb0\x4a\x62\xf5\x36\xc4\x20\x58\xc9\x15\x12\xaf\xbd\x61\x21\x01\xd5\x4d\x07\x92\x51\x9f\xe9\xf0\x2c\x25\x5b\xaf\x20\xf0\x08\x5d\x09\x6b\x08\x3c\xfe\x55\x31\x8c\x02\xfe\x8b\x50\x2d\x5f\xc9\xee\xff\xa3\x24\xc7\xa3\x10\x94\xf4\xe2\x11\xc5\xe2\x37\x10\x0d\xc9\xe2\xf5\x6b\x25\xec\xb2\x2d\x99\xa3\x90\x2b\x8e\x89\x16\xbd\xba\x05\xa5\xc3\x9a\xc8\x70\xda\x0e\xfe\x93\xed\x33\x8a\x49\x2d\x22\x69\x44\xd1\x6c\x3a\x4a\xcd\x16\x42\x3e\x64\xe7\x4f\xdd\xa4\xc4\x9a\xd4\x6c\xe9\x73\x32\x46\x55\xa3\x19\x7a\x11\x7d\x96\x1c\xf1\x1a\x45\xe5\x27\x2b\x31\xf6\x99\x30\x7b\x7a\xff\x01\x63\xec\xee\x25\xec\x9c\x2c\x18\x46\xe6\x60\x0d\xba\xed\xe6\xe9\xca\xde\xb9\x98\xbb\xfc\x3d\x66\x0e\xc0\xed\xc3\x4b\xc1\x5f\xb1\x87\xbd\x7b\xfd\xa9\x7b\x7d\xfb\xd7\x99\x0b\xee\xda\x82\x33\xf7\x8b\x7b\xf7\xa9\xf3\xe8\x4e\x6e\x6b\xc3\xfd\xe5\xba\xb3\xb3\xe9\x7c\xf9\x0f\xac\xe9\xe9\xac\x5c\x38\xbc\x35\x87\xe1\xae\x62\xca\x9b\xa2\x13\x10\x84\xea\xde\xeb\x04\x1d\xf9\x6d\xb7\x8e\xc5\x6a\xa1\x94\x69\x99\xcb\x2b\x1e\xc0\x7c\xb7\xdc\x82\x9b\x13\x50\xc7\x35\x12\x1d\xb3\x12\x64\xa2\xa7\x6d\x32\x21\xe1\x1a\x00\x94\xd6\xa4\x96\x24\x7f\xd6\x87\xe1\x58\xd6\x61\x9a\x70\x0b\xa0\x89\xad\x8f\x11\x45\x53\x2c\x51\x95\x5e\x8f\xa0\xec\xc6\x82\xf3\x72\xce\xd9\xbf\xe0\x6e\xac\xc3\x44\xdd\x29\x00\xe4\x6c\x2e\xba\xf3\xab\x4c\x8a\x9f\xff\x9c\x7b\x36\xe7\xde\x14\xf4\xf4\x8c\xd7\x8a\x3b\x5e\x8b\xed\x0e\xbc\x48\x63\xc1\x4d\x1a\x30\x95\xf0\xba\x0b\xe5\xcd\x5d\xa9\x0c\x09\xc3\x94\x67\xbf\x88\xbd\x27\xd8\xd0\x15\x5e\xce\xfe\xb0\x95\xbd\xf0\x22\x78\x72\x16\xe1\x36\xd0\x05\x55\xd0\xb7\x7e\x98\x12\x09\xbd\x91\xfa\x08\x39\x4f\x27\x8f\x8f\x4b\x6a\x9a\x12\x43\x52\x4c\x8b\x37\x22\x27\x7a\x12\x5a\x46\xc9\xc1\xbe\xd4\x44\xa3\x92\xd9\x3a\xa8\x31\xae\x7e\x9c\x52\xfb\x35\xc5\x30\xa8\x3d\x3d\x2d\xaa\xeb\x1b\x2a\xf2\xbc\x7b\x2d\xb7\xb5\x9e\xd9\xd9\x3d\xbc\xb6\x79\xdc\x99\xd9\x67\x23\xba\x73\x11\x3d\x97\x83\x9a\xdf\xd7\x1a\xb7\x19\xe7\xd2\x9c\xb3\xf9\xe2\xf0\xf6\xc5\xdc\xab\xaf\x9c\x95\xaf\xb2\xd7\xee\x7b\xcc\x2e\x85\x3c\xf6\xd8\xad\xd0\xe0\x2b\x21\x1a\xe9\x2c\x83\x29\xbf\x15\x78\x68\x2c\xea\xb1\x98\xfc\xaf\xc1\xf4\x89\x13\xef\x51\x02\xac\x6e\x06\xed\xa6\xd8\x90\x9a\x04\xd5\x30\x06\x26\x0d\x2a\xce\x8a\xc8\x43\xf6\x29\xca\xec\xcc\x64\xf7\x2e\x1e\x5e\xdb\xe4\x80\x9d\x99\x7d\x54\x3f\xce\xe6\xdf\x0f\x6f\xcf\xf1\xfe\x3d\x08\x56\xac\x39\x02\xa4\xf7\x9a\xba\x41\x4d\x7b\xb2\x60\x08\xc3\xba\xae\x52\x49\x58\xf7\xbc\xf8\xc3\x3c\xcf\x76\xbe\x70\xb6\xaf\x39\x33\xfb\xb5\xa0\xf7\xa4\x94\xab\x7c\x71\x87\xe5\xb5\xfb\xee\xda\x5d\x66\x9b\x44\x50\x84\x7a\x18\xe7\xb2\x1e\x44\x59\xb6\xa9\x68\xa3\x42\x9a\xa2\x78\xb3\x71\x33\xfb\xe3\xe3\xcc\xce\xcf\xb5\x13\xa3\xa5\x53\xc3\xd4\x2c\x96\x28\xef\xf5\xb2\x92\x25\xe6\xd6\xb6\xb3\x71\xb3\x84\x50\x85\x21\x0b\x69\xff\xb0\xad\xb3\xab\xe3\xa4\xd0\xdf\xf4\x53\xee\xa9\xa0\xdc\xe9\x87\x1d\x6d\x03\x67\xfb\x3a\xc8\x87\x5d\x6d\xa7\x84\xc5\x95\x21\x5f\x1b\x6b\x49\xc7\x80\x22\xbc\xca\x15\x00\x23\xc8\x4b\xfc\x10\x6e\x70\x11\x2c\x62\xea\x45\x1b\x4d\x1d\xaf\x6f\xa5\xad\x08\x6f\x4a\x66\x87\x27\x52\x61\x5d\x08\x0c\x37\xe6\xbe\xbb\x9a\x5b\xf8\xd9\xbb\x9f\x15\x89\x72\x84\xda\xc9\xb1\x90\xa9\x6a\xc5\x49\xe1\xca\x6d\xbe\x72\x36\x6e\x05\x4c\x54\x44\x16\x2b\x67\xab\x10\x33\x46\xb5\x2d\x2f\xd1\xb7\xb0\x95\x3b\xbf\xf0\x5f\xfe\x68\x0d\x24\x09\xf2\x78\x9d\xfb\xf7\x8b\x28\xac\x90\xbe\xf8\x6c\x29\x85\x2c\x3e\x3b\xe8\x38\xd5\x6c\x2b\xd6\x79\x05\xd1\x65\x76\xaf\x64\xf6\x9e\x85\x31\x46\x1f\x53\x0a\x51\xea\xe6\x68\x02\xd3\xa5\xd8\x1c\x80\xdc\x21\x03\xfb\x74\x95\x0e\xe8\xfc\x06\x72\xc1\x44\x94\x65\x03\x4a\xa1\x18\x52\x3e\xff\x94\x4b\x70\xf5\x3c\xd3\xcd\xd1\x4a\x38\x86\x58\x6b\xe1\x18\xb8\x7b\x4c\x2c\xa5\x66\xc5\x95\xcd\xdc\xf3\xad\xec\xb5\x9f\x9c\xdb\x4f\xb2\x7b\x17\xab\x96\x46\xbc\xb0\x5c\x01\x4a\xe7\x65\xf5\xc8\x20\xe5\xa0\x84\x68\x40\x16\x41\x9d\x84\x43\x04\x8b\xf8\xb5\xa8\x6a\x16\x0f\xcc\x19\x6a\xa9\x2c\x9d\x84\x8b\x0a\x50\x50\x02\x77\x8c\x04\x12\x4e\x86\xad\xf3\xa3\x16\xdb\xd5\xf5\xa4\xa4\x12\x9b\xa6\x0c\xdd\x94\xcc\x49\xe8\xfc\x0f\x61\x72\xef\xc6\x47\xb9\x32\xf0\x31\x31\xfd\xd9\xd2\xf1\x4a\x9d\x57\x08\x7f\xc8\xbb\x22\x1b\x15\x27\x63\x7b\x6f\xc1\x07\xfc\x92\x21\xf6\x06\x85\x88\x61\xe4\xae\x5a\x48\x87\x67\xd5\x37\x93\xb4\x7f\x1d\xd9\x90\x4c\x8b\x96\xec\x23\x13\x2b\xc9\x1b\xf1\x1f\xed\xf3\x62\x3b\xe8\x51\x0d\xdd\x13\x8d\xde\xf1\x6c\x9d\xa4\xa4\xf3\xd4\x73\xc5\x63\x11\x02\xc4\x5e\xde\x51\xb6\xf6\x3d\xdb\xca\xe1\x50\x84\xf1\xfb\xf2\x1e\xba\x20\x5a\x08\x62\x57\x10\xc1\x8e\xc7\x6b\x2c\x07\x80\x11\x8c\xe8\x09\x46\x17\x30\x8f\x60\xf0\xa9\x8d\x85\x62\x02\x84\x81\xdf\xe1\xf3\xfa\xfa\xbe\x96\xee\x56\xc8\xf2\x88\x9a\x70\xb9\xef\x2e\x38\x5b\xf7\x2b\x6b\x21\x25\xaa\xd2\x0b\x3a\xe7\xf6\x9e\xb3\xb2\x2d\xbc\xa1\xf2\x21\xbf\x5c\x38\x35\xd5\xc2\xff\xfc\x50\x95\x46\xa7\xa7\x09\x2f\x4b\x25\xcc\x11\x46\x33\xb0\xf8\x3b\xe7\xf9\xcf\x98\x73\x2b\x36\x72\x45\x28\xf1\xf2\x63\x35\x18\x31\x2f\xb4\x1c\x46\xe1\x0d\xdc\x88\x8b\x8c\x1f\x32\x6d\xa6\xe9\x36\x77\xf3\x80\xc2\x53\x27\x9b\x71\xcd\x59\x6c\x18\x70\xdb\x92\xbd\x45\x3f\x57\x2c\xdb\x22\x92\xcd\xeb\x0e\x40\xa5\xf0\xa9\xa9\x16\xf6\xa3\x11\x95\xaf\xe4\xac\x3d\x71\xd7\x7e\x74\xd6\xb6\x7d\xf7\x10\xba\x29\xd1\xc5\x95\x7d\xb8\x99\x79\x75\x2f\xb7\xb5\x8e\x0f\xa1\xbf\xd8\x6d\x67\xf3\x4e\xbe\x62\x6a\x1e\x01\x48\xc3\xc6\x2d\x67\x4d\x70\xee\xfe\x50\x37\x93\x94\xd7\x24\x27\x6f\xc9\x58\x7e\xc3\x30\x75\x28\xbb\xa0\x9b\x18\x7c\x34\x53\x40\x99\xb0\x38\xc4\xfe\xae\x33\xff\x0c\xd3\xdf\x8f\xf6\xe7\x33\x3b\x4b\xee\xca\x6a\xf6\xd1\x6e\xf6\xe1\x66\x6e\xf3\x91\xb0\x40\x44\x00\x35\x33\x86\x27\x14\x7b\x4c\x4f\xdb\x21\x8c\x31\x10\x62\xfd\x00\x44\x15\x85\x87\xd7\x88\xc0\x7b\xa7\xa0\x18\x2b\x47\x08\x35\x1f\x50\x2d\xc6\x45\x9b\x52\x46\x4d\xa9\xba\xf1\xe5\x5e\xcd\x66\xbf\xdb\x8b\x8b\xa8\x92\x82\x7b\x08\x3f\x4e\xc1\x3d\x84\xcd\xe3\x72\x9e\x5a\xf4\x46\x82\x62\x12\x89\x43\x14\x98\xc3\x51\xa1\x98\x44\x61\x4e\x6b\xc3\x3c\x39\xb4\xf2\xd9\x82\x52\xf1\xd8\x28\xad\x3c\x13\x4f\x75\x0c\x0c\x74\x76\x9f\x22\xfd\x03\x6d\x7d\x03\xe2\x03\xf7\xdc\xfa\xe1\x4d\xc1\x4a\x2a\x80\x20\x3c\x2c\x03\x08\xc1\x31\xf9\x54\x57\xcf\x07\x6d\x5d\xa4\xa7\x77\xa0\xb3\x27\xa2\xb7\xd1\xdc\x13\xe7\xa7\x99\xc3\x99\x85\xc3\x87\x2f\x44\x80\xa8\x4d\xa4\x7c\x2c\xd9\xef\xd7\x06\xf9\xf4\xd6\x18\x49\xaa\x0a\x3b\x84\x45\x98\x49\xfd\xfd\xa7\x89\xb3\xf9\x0d\xdc\xf9\xde\x2d\x48\x2f\x8c\x6a\x11\xc7\x30\x33\x05\x58\x1c\xdd\x42\xff\x28\x93\xa1\xa8\x2e\x04\xc5\xe9\xa2\xa5\x63\x65\xce\xcc\xbe\x90\x00\x8c\x20\xab\xaa\x97\xb0\xc7\xcb\x1f\xa5\x24\xf3\x3c\xb5\x0d\x55\x4a\xd2\xf2\xd7\x69\x97\x9d\x9d\x0b\xce\xda\x6e\x66\x67\x83\x67\x33\xc2\xad\x60\x0c\xaf\x0b\xf7\xce\x53\xf9\xfc\x58\xeb\x4d\xd4\xf4\x47\x52\x6b\xa9\xe9\x5f\x76\x68\x01\x37\x4a\x4b\x8b\xf0\x02\x0a\x92\xc9\xd3\x8c\xf3\xdd\xdc\xe0\x8b\x48\xf0\x9e\xaf\x44\xdc\x1e\xb5\x81\x5c\xf2\xf8\x71\xff\x7e\x59\x36\xd0\xc0\x45\x59\xab\x4e\xed\x50\xdf\xc8\xfc\x47\x9b\x8a\x81\x53\x47\x79\x96\x80\x5f\xa7\x11\xbc\x28\x23\x66\xaf\x8b\x1b\xe8\x87\x8a\x21\xc4\x98\x4e\xf9\x9f\x55\x28\xd0\xea\x2c\x2b\x0e\xbc\x9c\x1f\xa8\x6c\xe2\xa7\x47\xbc\x1e\x86\x84\x69\x28\xde\x84\x46\x30\xc4\xee\x53\x11\x67\x24\xa5\xa1\xc4\xd0\x7f\x65\x92\x3e\x9c\x99\x7d\xd1\x81\xde\x23\x40\xd1\x46\xf4\xc6\x96\x89\x10\xab\x44\x26\xf7\x70\x75\xa1\xec\x84\xfb\x54\xbe\xae\x46\x0c\xdc\x54\x88\x6a\xc4\x90\x27\x3f\x2e\xed\xe5\x2a\xd7\x37\xaa\x5b\x77\xf4\xa6\x54\xba\x64\x7d\x05\x93\xf3\x5b\xec\x30\xc3\x0d\xab\x06\x76\x98\x09\x8c\xde\xfa\xd7\x1b\x6a\xd9\x61\x89\x8a\x05\xd5\x61\xbf\x8c\xb1\xcb\xe1\x31\xda\xca\xb7\x20\x34\xa9\xa1\x5b\x8a\xad\x9b\x0a\xb5\x48\x4b\x4b\x4b\xb4\x72\xcc\xec\x2d\x7b\x3d\xf9\x4a\x5c\x1b\x2a\x3b\xf6\x10\x76\x1f\xf3\x24\x11\xa5\x51\xe4\xed\xfa\x52\xe8\xa2\x71\x95\x6c\xb7\x01\x2a\xa3\xbe\xfa\xb7\x64\xb7\x0d\x12\x73\x85\x03\x91\xf5\xab\x1d\x15\xa4\xa8\x2c\xee\x50\xb4\xa8\x88\x04\x52\xab\x48\x06\xe3\x4a\x31\x04\x93\x97\xbc\x2d\xb1\x82\x2b\x6e\x95\x54\x12\x64\x7d\x47\xe6\xbc\xac\x60\x4c\x25\x8d\x80\x98\xe6\x52\xcd\xc4\xc6\x37\x21\xfd\x06\x9b\x35\x8e\xec\x75\x0c\xa1\x32\x62\xd3\x9e\x65\x0f\x95\xbb\xc3\x86\x0e\xe1\x7d\x54\xf0\xe1\x29\xf6\xac\x3b\xd6\x1a\x2c\x61\xc8\x94\x80\x02\x84\x7e\x77\xd1\x99\xbf\x5d\x76\x3d\x86\x09\xb3\x1a\x62\x6e\x95\xa3\x80\xb7\xb8\xc2\xaa\x68\xf5\xd5\x4a\x5e\x6f\xab\x57\x87\x37\x37\xdd\x7b\x5f\xc4\x60\x47\x88\x18\x36\x7d\xf9\x2e\x57\x1f\xc0\x5f\x4c\xd8\x34\xb9\x54\x7a\x86\xff\xef\xba\x9b\xdb\x85\x4d\xb0\x7c\x4a\x9c\xab\x8b\x21\x41\x0d\x92\xe0\xd7\x6c\x6b\xc4\xf0\x8b\x6b\xd4\xfd\x96\xf8\xf2\xeb\xcc\x6c\x51\xb9\xba\xdf\x1e\xb7\x5e\x9b\x88\x94\xe2\x45\xe3\xc6\xfb\x7a\x86\x55\x1f\xfa\x5f\xab\xb4\x36\x58\xf6\x7e\x1b\x4b\xf2\xcd\xac\xbb\xd7\xb0\xc0\xea\xbd\x88\xfc\x4b\x96\x25\xed\xcf\x3a\x9d\x20\x83\x5d\x1d\x63\x93\x86\x8b\xba\xfe\xe7\xc5\xe2\x86\x8e\x31\xec\xa8\x50\x65\x6c\x76\x92\xe2\x11\xbd\x38\x05\x80\x1b\xc1\xd1\x62\x5c\xbe\x10\x60\x19\xd4\x98\x87\xb0\xaa\xc6\x15\xcf\x3c\x6c\x08\xa1\xc5\x91\xb1\x37\xd7\x49\x13\xba\x27\x54\x18\xb9\x82\x18\x5d\x90\x3f\xf1\x07\xfe\xc6\xc6\x59\x5d\x90\x2e\xee\xf0\x4a\xf4\x07\x6d\x8c\xb3\xa2\x64\x83\xd0\xf8\xee\x8a\x00\xa1\xf5\x3e\x1e\x04\x29\x8b\x47\x87\x55\xaa\x35\x69\xe4\xe4\xc7\x53\x99\x71\xa6\xbf\x10\x5f\xb0\x49\x69\x1c\x4d\x6a\x4b\xc9\xf3\x58\x8e\x98\xfd\x35\x3d\xdd\x14\x96\x6c\x7f\x57\x7e\x63\xc1\xa6\x02\x0a\xa2\x17\x34\xdc\x74\x0e\x0d\xa7\xfc\x0c\xc2\x65\xea\x7f\xfd\x51\x97\x1d\xa8\x2d\x59\xe7\xeb\x15\x56\x8c\xa9\xcc\xa2\x09\xc2\xbc\xe9\xd2\x5d\x7d\x8f\x8b\x42\x29\x75\xec\x74\x2d\x5c\x4a\x21\x7e\x87\xd1\xf3\xe5\x05\x19\xd7\xd5\x8f\xae\xb1\x3b\x42\x89\x9e\xc5\x40\xaf\x58\x42\x54\x7d\x58\x52\x89\x0e\xd9\xda\xc2\x96\x4b\xa5\xbf\x3d\xdd\xd1\xd6\x35\x70\x7a\xa8\xfd\x74\x47\xfb\x47\x43\x03\x1f\xf7\x76\xd4\xf6\x35\x49\xa5\x2d\x9b\x0c\x53\x32\x78\xcc\xd0\x4d\x7b\xf0\x58\x33\xfb\x0b\x8b\xe9\xb0\x7f\xe8\x26\x19\x3c\x36\x66\xdb\xc6\xe0\xb1\xca\x10\xf5\xf4\x0f\x54\xfc\x41\x77\xdb\x99\x0a\x87\x33\x30\xd0\x8b\xf5\x7e\xa0\xad\x54\x52\x4d\xcb\x60\x11\x61\x35\x32\xbc\x79\x3a\xac\xcb\x93\x30\x8e\xa6\xff\xd3\x44\x46\x74\x55\xd5\x27\xa8\x4c\x86\x27\x89\x84\x59\x9f\x70\x07\xd8\xd6\xa1\x78\x0c\x7c\xe8\xd7\x0f\x12\xa5\x3c\x3d\x9e\x75\x16\xe7\x9c\xd5\x1f\x98\xad\xc7\xcb\x76\xec\x65\x0e\xbe\xc6\xa9\xc7\xce\x37\x58\x42\xe8\x68\x7f\xd1\x9d\xbf\x91\x9b\x99\x03\xdc\xce\xea\x72\xee\xf9\xfd\xdc\xe3\x59\x5e\x71\x06\x5e\x61\xa6\xc2\xbd\x75\x77\x77\x95\x27\x87\xae\x0a\x32\xfb\x00\x6a\x8a\xda\x63\xba\x4c\xde\x3a\xd5\x31\xd0\xdc\xdb\xd3\x3f\xd0\xdc\x7b\x76\xa0\xf9\x64\x47\x57\xc7\x40\x47\x33\xb5\x93\xa2\x84\x4f\xa4\xe8\xc6\x0b\xf7\x97\xeb\x47\xfb\xf3\xa7\x3a\x06\x7e\x9d\x99\x65\x9f\xb3\xff\x9c\x65\xff\x8b\x20\x48\x76\x63\x41\x98\xfd\x79\xba\x30\x3d\x40\x24\xb5\xc5\x11\x73\x05\x16\x1f\x02\x68\x67\x8f\xf1\x0e\x9d\x00\x8f\x6e\xd9\x30\x23\xd8\xeb\x2c\x35\x99\xb0\xd2\xc3\x98\x65\x24\x1a\x5e\x66\x67\xcf\x5d\xdb\x75\x56\x97\x82\x2d\xcf\x82\x1f\x8a\x07\xe5\x21\xf3\x3c\xc4\xc0\x29\xec\xcf\xf7\x16\xbf\x7c\xcf\x93\xf0\xc6\x24\xf6\x27\x4f\x77\x8a\x64\x34\x3a\xa7\xa1\xed\x4f\x9e\x2e\x67\xee\xa7\xcc\xee\x0f\xce\xfd\xfb\x78\x39\xbe\x3c\x45\x69\x5e\x30\x20\xa9\xa7\x86\x15\x2d\x9f\x92\x4a\x4e\xf6\x9c\x69\xeb\xec\x86\x34\x7b\xa8\x09\x3d\x89\xc2\xee\xf5\x14\x1c\x56\x22\xfa\x15\x72\x7a\x32\x3b\xcb\x1e\x98\xec\xde\xd7\xce\xea\x3c\x76\x84\xc1\xde\x31\xd8\x29\x28\xf7\x78\x16\x53\x31\x7d\x6f\x7b\x83\xe8\xc5\x8c\xd1\xfa\x50\x1c\x4c\x21\xad\x88\x6e\xa6\x3c\x64\xaa\xd9\x1e\x75\x79\x31\x10\x10\x86\xdd\x80\x72\x5b\x97\x9c\xf9\x1f\x88\x60\xd6\x4b\x23\xee\xec\xee\x1f\x68\xeb\xea\xea\x38\x49\x7a\xbb\xce\x9e\xea\xec\x26\xed\x3d\x67\xce\xb4\x75\x9f\x14\xde\xf9\x7c\xfe\x73\x30\x8f\x39\xaa\xc9\xa4\x10\xb4\x30\x31\xb5\x14\x6c\x41\x86\x2a\x00\xef\x6e\xef\x18\x3a\xd3\x71\xa6\xa7\xef\xe3\x8a\xb4\x74\xe7\xa8\xa6\x9b\x34\x5c\xd9\x4c\x44\xd2\xab\x83\xec\xf5\xf5\x60\x39\x33\x01\x48\x8d\xfc\x51\xd1\x64\x7d\xc2\x22\xed\xbc\xd2\x68\x97\xa2\x61\xe9\x74\x4b\xd1\x46\x55\x9a\x60\x67\x15\x2a\x37\x13\x6a\x25\x25\x83\xca\x70\x8d\xa5\x95\x34\x4d\x0d\x0e\x0e\x1e\x1b\x97\x54\x45\x66\x7f\xb4\xb2\xff\xf9\xb3\xa5\x6b\xec\xbf\xe2\x3b\xfd\x6b\x4f\x7c\x74\xc8\xa5\xdc\xc3\xc5\xcc\xce\x86\xdf\x79\xdb\x59\xba\xee\xec\x5f\x77\x56\x9e\xbb\x57\x7e\xcc\xfd\xf3\xb9\x7b\x6f\x9d\xc9\xdf\xc1\x8f\x99\x17\x0b\xf1\xf0\x96\x1b\x64\xaf\x3e\x41\xcd\xfe\x31\xaa\xaa\x30\x44\x59\x4f\x0f\x0b\x87\x38\x78\x2c\x0a\x97\x70\x1f\x0f\x0e\x32\x80\x2e\x34\xcc\x95\xc5\x32\xc3\x2c\x8b\x5b\x30\x50\xdc\xb9\xfd\xba\x6d\xbc\xb0\xa3\xb7\x95\x47\xb6\x7a\x65\xbb\x30\xf4\x79\xcd\xec\x6c\xf0\x7d\x19\x2a\xb7\x39\x8f\x9e\x0a\xb1\xe9\xa6\x49\x93\x36\x39\x6b\x49\xa3\x11\x4b\xdc\xfd\xe5\x7a\x66\x67\xc9\xdd\xf8\x36\xfb\x50\xd0\x25\xad\x00\x54\x0b\x69\xd3\xf2\xb5\x5d\x14\x8b\xa4\x14\xaf\x3d\x0a\xef\x5d\x0b\x2f\xab\x93\x84\x6a\x49\x55\xb7\xa8\xdc\x32\xa8\x09\x8f\xa6\x05\x14\xfc\x3a\x73\x21\xbb\xbf\xeb\x6c\x7f\xe5\x97\x5e\x61\xb6\x85\xff\xf7\xda\xf7\xf8\x1a\x4e\x0d\x5c\x0d\x14\x9d\x45\x8b\xa8\x6e\xf7\x8b\xf5\x6a\x94\x8c\xa8\xd2\xa8\x45\xde\xa2\x9f\x27\xa9\x61\x93\xc4\xc8\xdb\x24\x29\x69\x8c\xfa\x61\xde\xa9\x8d\xca\x64\x62\x8c\x6a\x5e\x8b\x57\x92\xf2\x3a\x1c\x40\x1a\x35\xa6\x97\x84\x17\xbb\xb0\x03\x4d\xd1\x08\x33\x7b\xcb\xa1\x5a\x86\xd8\x27\x16\xda\xe6\x15\x14\xe5\xf1\x2f\xdc\xe1\x73\x7f\x59\xe2\xbd\xf6\xa3\xfd\xf9\xc4\x08\x39\xbc\xfd\xc8\x79\x74\xe3\x68\x7f\x41\x78\xb1\xa8\x88\x15\xe5\x0d\x64\x34\x89\x35\x5d\xa3\x83\xc7\x06\x07\xb5\xc1\x0a\xe6\xaf\x18\xb8\xf3\x6a\xee\xf0\xe1\x1e\x94\xd7\x61\xd0\x9b\x88\x3b\x7f\x83\x34\x31\xe0\x4d\x1c\x76\x3c\xb2\xfb\xbc\x4a\x41\x4d\x92\x61\x40\x9f\x5a\x42\xb5\xf1\xfc\x1f\x90\x01\xd9\xc4\xce\x41\x9e\x78\x5a\x15\x49\x1e\x9a\x2d\x65\xa0\x63\xa1\x20\x5f\x24\x2b\x10\xc0\x08\xf2\x1b\x41\x74\x7d\x48\xf5\x1b\x78\x78\xd7\x35\xea\x40\x6a\x09\x98\x75\x20\xb5\xad\xb7\x97\xf4\x77\xf4\x9d\xeb\x6c\xef\x18\xf2\x36\xf2\x9a\x69\x2d\x09\xb4\x3e\xc4\x0e\xb1\x83\x20\x44\xcd\xb8\xd1\x57\x07\x5a\x11\xa6\x73\x75\xd1\x83\x59\x6f\x52\x8b\x17\x77\x5d\xa9\x2e\x06\x5f\xef\x01\x34\x42\x42\xf2\xf4\x37\x56\x54\xf2\x94\x56\x4d\x64\x01\x3d\xf5\xa0\xa5\x26\xa6\xd5\x81\x3f\x1f\x9c\xed\xec\x3a\xd9\xdb\xd6\xfe\x11\x40\x6c\x26\xdd\x1d\x7f\x1c\x0a\x3f\xab\x79\x8e\x0b\xc0\xb1\x99\x2e\x81\xa5\x0e\x63\xf1\x34\x41\x23\x04\x95\xc3\x6e\x94\x98\x06\x94\x98\x56\x93\x6c\xd4\x4f\x73\x75\xb5\x7d\xd0\xd1\xd5\x4c\x7a\xfb\x7a\xce\x75\x9e\xec\xe8\x03\xb6\x0e\xf4\x7c\xd4\x51\xbb\xaa\x05\xc8\xbf\xce\xcc\xfa\xa0\x19\x57\x11\x74\x23\xe8\xae\x07\xb5\x40\xa2\x0f\xb2\x0e\x54\xf6\xf4\x9d\x0a\xed\x5e\xb5\x50\xc8\x60\x05\x76\xad\xba\xd2\x55\x23\xf3\x0a\x48\xab\x0f\xe3\xb8\xaa\xfa\xf7\xb3\x3d\x03\x6d\xf5\xa0\x30\xaf\x97\x10\x64\x1d\xa8\xec\xeb\xe8\xed\xc9\x6f\x9b\x67\xfb\xba\x6a\xa6\x33\x0f\x91\x11\xca\x20\xd6\x81\xcc\xfe\x8e\xf6\xb3\x7d\x9d\x03\x1f\x0f\x41\x97\x7c\xa0\xb5\xa7\xef\x54\x33\x0f\x3b\x48\x2a\xe9\xef\x6d\xab\x83\xf2\x2c\x40\xc3\x06\xc0\x04\x23\xb3\xb7\xee\xac\x7c\x89\x38\x8e\xf6\xe7\x9d\x95\xad\xc3\x99\x85\xa3\xfd\x85\xc6\x0c\xac\xb7\x6d\xe0\xf4\xd0\x40\xcf\xd0\x1f\xfa\x7b\xba\x87\xfa\xce\x76\x75\xf4\x0f\x7d\xd8\xd9\xd5\x90\xc1\x89\x50\xd5\x7d\x60\xcd\xfe\x7a\x6d\xc4\x44\xfd\x3a\x33\xeb\xad\x5f\x04\x5f\x17\xfa\x71\xf3\xfc\xa0\xaf\xe7\xa3\x8e\x3e\xb4\x37\xc2\xcf\xea\x30\x88\x10\x38\xcf\xde\x28\x78\xdc\x80\xb1\x9c\xed\xef\xe8\x43\xd5\xd4\xdb\xd6\xdf\xff\xc7\x9e\xbe\x93\xcd\x75\x59\xfa\x61\x3c\xbf\xce\xcc\x7a\x88\xd8\x1e\xca\x31\xd5\x57\x2b\x14\x18\x38\xde\x83\x8f\x3a\x3e\xae\xdb\x60\x4a\x02\x6f\x04\xf1\x6c\x75\x04\xe7\xbf\x6e\x26\x61\x11\xc0\x42\x49\xab\xa7\x81\x58\x72\x58\x0d\x9d\x97\xa0\xa9\x5b\xaf\xb9\x41\x25\x55\x3f\xf3\x02\x01\xd6\xd7\xc0\xc8\x13\x59\x1f\x03\x23\x4f\x63\xdd\xac\x0b\x00\x99\xc8\x9f\xca\xe1\x9f\x00\x3d\x51\x97\x13\x5b\x00\xbe\xaf\xfc\x83\xf0\xeb\x35\x04\xb4\x67\x60\xc9\xe4\xff\x59\x17\xe2\x4b\x42\xae\x2f\xd9\x35\x1e\xe2\xeb\x4b\x57\x7e\xeb\x01\xfb\xad\xaf\xa7\x0e\x86\x4d\x60\x97\xf1\xcc\x00\x80\x5b\x7f\x72\x81\x17\x0d\xa1\xfa\xd7\x99\xd9\xfc\xfa\xab\x17\xf5\xb5\x1d\xd1\x6b\x43\x6d\x18\x43\x9a\x94\xa2\xcd\x3c\xcf\x00\xfe\x51\x33\xcf\x3c\xa8\xc0\xa5\x20\xe0\x7a\x30\xab\x06\xc2\x6a\x42\xec\xd7\xa8\xe1\x0c\x83\x52\x6d\x4c\x5d\x1a\xbc\x0d\x41\xcd\x6c\x0b\x63\xf8\x75\x66\x16\x50\x30\x1e\xfa\x28\xea\xc0\xc0\x31\xdd\xb2\x81\x6e\xde\x4a\xb7\x56\xaa\x01\x5e\x7e\xa2\xeb\x41\xa2\xae\x42\x3d\x79\xcc\x93\x62\xa4\x6a\x74\x22\xf0\xa0\x36\x82\x9d\xe5\xfb\xee\xda\x42\xa8\xfc\x3c\x74\x52\x70\xae\x2e\xba\x37\xb6\x8b\x9f\xd7\x69\x3c\xba\x39\x4a\x50\x70\xd8\x60\xbc\x7f\xd5\x67\x30\xbc\x98\x6f\x60\x18\xc1\x27\xf5\x18\x80\x39\xda\x00\x35\xe1\x41\x6d\x84\x9a\xe0\x49\xfc\xcd\xa1\xfb\x16\xcd\xc5\xd5\x1d\x6a\x1d\x03\x07\xf8\xeb\xcc\x6c\xe8\x62\x07\x1b\x51\x11\xae\x7a\x0c\x0b\x72\xb9\x0b\xb9\x5f\x15\xe1\x79\x48\x75\xa0\x6b\xfc\x1d\xef\x94\xc2\xfe\xf4\x1d\x9b\xec\xef\xae\xb6\x6e\x32\xfe\x6e\xfe\xe7\x77\xf1\x51\xad\x8c\xaf\x1c\x63\x1d\x86\x39\x35\xd5\xd2\xe6\x11\x2d\x4c\x4a\x16\x92\x5c\xf0\x75\x3c\xdc\x03\x63\x14\xd2\x1e\xfc\xf6\xc6\xc1\x0e\x3d\x9e\x4e\xc4\xd7\x7c\x0d\x99\x94\x34\x32\x4c\xa1\x45\x3e\xe4\x4e\x84\xc3\x00\x44\x37\x31\x4f\x2e\x9f\x32\xd1\x32\x99\x52\x23\xd3\x26\x9c\xb5\x27\xce\xc1\xd7\xce\xc2\x52\xf6\xee\xa6\x73\x70\x3d\xb3\xb3\x91\xaf\x3b\x1a\x48\x9e\xc0\xea\xa3\xee\xca\x6a\xe6\xe5\xdd\x62\x4d\xea\xce\xf3\xae\x91\xb1\x86\x2e\x4a\x21\x2b\x60\xaf\xa8\x32\x52\x21\x34\x3f\x41\x17\x12\x2c\x7d\x5e\x7c\x16\x98\x14\x4c\x7f\xff\x0c\x7a\x3b\xf0\x22\xa7\xe3\x8a\x4c\x45\xa9\x82\xe5\xf0\x7a\x05\xa8\x53\x92\xdd\x9a\xef\x3a\xf5\x87\xfe\x9e\xee\x0f\x15\x15\xda\x60\x0d\xda\x83\xf6\xa0\x76\x4e\x52\x15\x99\xbf\x8d\x35\x61\xa5\x94\x01\x8d\x38\x3f\x19\xd4\x08\x99\x62\xff\x43\x30\x45\xda\xd6\x93\xba\x3a\x78\xac\x95\x0c\x1e\xb3\x93\xc6\xe0\xb1\xff\x3f\x7b\xef\xde\x14\x47\x92\xe4\x8b\xfe\x7f\x3f\x45\xdc\x3d\xd7\x4c\xbd\x76\x28\x46\x9a\x99\x3d\x76\x4d\xfb\xc7\x1a\x83\x90\x9a\x1d\x09\xb8\x80\xb4\x3b\x67\xd4\x26\x4b\xaa\x02\xc8\xa3\xaa\xcc\xda\xcc\x2c\xd4\x2c\x47\x66\x40\x0b\x84\x24\x04\xb4\x5a\x42\x2f\xd4\x88\x6e\x3d\x18\x75\xa3\xa2\xd5\x1a\x09\xf1\x68\x7d\x18\x55\x66\x15\x7f\xe9\x2b\x5c\x0b\xf7\xc8\x67\x65\x44\x66\x16\xa8\x67\xd6\xec\xcc\x98\xcd\x88\xac\x0c\x0f\x8f\xc8\x78\x78\x84\xbb\xff\x7e\x6d\xee\x6f\x05\xe0\x06\x04\xd5\xf0\xe7\x63\x47\xdb\x7f\xfb\xfb\xdf\xb7\x1f\x6b\x3f\xf6\xff\x06\x5e\x2b\xeb\x86\x65\xe2\x0b\xbf\xfb\xdd\xd1\xff\x71\xfe\x1f\xd8\x0f\x97\xcf\x6b\x5f\x08\x9a\x88\xfc\xb8\x8f\x77\xed\xdd\xc5\x40\x87\xe3\xb7\x16\xb4\xc6\x59\xb9\xe6\xdc\x99\xab\x3f\xb8\xc2\xc9\x75\xe1\xdd\xfa\x93\xed\xda\x2f\x37\x8e\x93\x5f\xb5\x49\x09\x9f\xa7\x82\xc3\xe2\x5c\x08\xee\x2b\x34\x12\xbc\x38\x9c\x89\x89\x76\x97\x21\x84\x07\x12\xb7\x36\x22\x78\x95\x4a\xb9\x9c\x73\x37\x85\x9c\xaa\x15\xe8\x97\x81\x78\x27\x8d\x8e\x28\x96\x3a\x96\x8d\x0c\xb8\xa9\x0a\x55\x83\x78\x38\x0e\x26\xe6\x87\x50\x67\x94\x8a\x80\xb8\x9d\xa7\xbb\x39\x98\x8e\x68\x75\x80\x90\x4e\x78\x4f\x06\x96\xc3\xe5\x05\x48\x40\x27\x26\xda\xfb\xe0\x5f\x48\x0e\x9c\x94\x20\x11\x0c\x1d\x8d\x2b\x2b\xae\x55\xcb\x0b\xc3\x3f\x01\x6b\x49\x5e\x94\x9c\xa1\x25\xdd\x18\x97\x4a\xb0\x67\x67\xec\x8d\x7b\x09\x72\xdc\x01\xa5\x10\x4d\xd7\x72\xee\xa7\x76\x59\x77\xe4\xf2\xdd\xb0\xad\xfd\x47\xdf\x36\x5e\xaf\x22\xc7\x8e\xbc\xba\x8c\x69\x1e\xdd\x7c\xcc\xc0\xbc\x8d\xe3\xb3\x15\x7d\x9b\x26\x1e\x5b\x8e\x92\xcf\xd9\x6c\x1f\x3b\x77\xe6\xe4\x35\xf6\x73\x4e\x05\xf6\xff\x12\xde\x50\x97\x2e\x01\x5f\x23\x69\x24\x0f\x0c\x9c\x26\x9d\xd4\xb0\xbc\x09\xde\xd7\xcd\x96\xaa\xc1\xee\xbe\xe3\xe4\xac\x49\x81\x04\x4e\x29\xab\x24\x97\x33\x2f\xaa\xe5\x9c\x69\x16\x73\x50\x10\x6a\x05\x4a\xb4\xbc\xae\x59\xaa\x56\xa1\x7c\xcb\xd4\x98\x39\x47\xf3\x15\x83\xa6\xe1\x13\xcb\xa6\x1c\xd0\xa7\x01\xbd\xc2\xa0\x5a\x4e\xa2\xde\x74\xdf\x27\xac\xbf\x99\xa4\x46\x75\xaa\xf6\xee\x19\x76\x4a\xb3\x10\xa9\x22\xcc\x70\x60\xeb\xe8\x71\x9e\x32\xd6\xa7\x1b\x16\xd3\xa4\x83\x3f\x0f\x8e\x5b\xa0\x41\x12\x8d\xd4\x20\x26\xef\x0f\x55\x7b\xf1\x7b\x54\x27\x2a\xb7\xf9\x3d\x1c\xdd\xce\xbd\x2a\xb2\x21\x25\xaa\xeb\xd1\xac\x21\xf5\x71\x05\x11\xb4\x53\xa8\xb5\x3f\x83\x44\xff\xc9\x43\x07\x69\xf2\x0e\x34\x0f\x90\x23\x2f\xfd\x3c\x48\x41\xc0\x1c\x4c\xec\x77\x3b\x57\x2e\x34\xd4\x43\x9e\x4d\x03\x63\x2e\x97\x87\xd0\xdb\x76\xd2\x57\xa4\x8a\x49\xdd\x1f\x89\x42\x02\x2b\x81\x3e\xf4\xbf\xd8\xc6\x02\x7c\xf5\xa0\x9e\x9b\xc5\xc4\x66\x86\xa2\x02\x57\x53\x4c\x01\x21\x01\xe4\xd6\x36\xab\x17\x63\x66\xd1\x52\xac\x3f\xb8\x12\xfc\x2c\x1f\x26\xa7\x3d\x23\x32\x62\x4d\xd8\xd5\x77\x8d\x9f\xd6\x9c\xb9\x65\x8c\xba\xc6\x5f\x83\x3f\x79\xe0\xa3\x5e\x32\x86\x24\x0e\x17\x75\xf6\xb9\xdb\x8f\x4c\x4c\xb4\x1b\xb4\xac\xe3\xee\x7f\x84\xe4\xdc\x6d\x0a\x5e\x29\xe8\x14\xcd\x42\xc0\xec\x17\xb4\x2e\x2a\x82\x67\x66\x73\x76\x77\xd6\x3a\x92\xe3\x7b\x24\x3e\x64\x36\xb4\x04\x7c\xdf\x53\x52\x35\x2f\x62\x2a\x34\xcc\xa5\x13\xaa\x79\x91\x67\x53\x67\x63\x74\xa9\x7f\x3f\x55\x7f\x78\xcf\x4f\xc9\x0e\x08\x22\x81\xa5\x23\x2d\xbd\x4b\x7a\xf5\x0e\x41\xa3\x24\x25\xd8\x50\xce\xc8\x27\xde\x1d\x32\x93\x72\x60\x27\xe5\x20\x83\xac\xac\x18\x4a\x09\x1a\x33\xda\x94\x45\x16\x5f\x43\xb3\x0c\x7b\x71\xda\xb9\xb3\x19\x2b\x23\xd5\xe6\xe5\x5d\x1c\xe4\xf5\x8a\x86\x8b\xb3\xb7\xb5\x77\xb2\x47\xac\x7b\xbb\x43\x2f\x05\x56\x6a\xbc\x33\x4c\x69\x5d\x34\x5e\xae\x71\x55\xa3\x35\x78\x1f\x21\xf8\xa2\x67\x8c\x38\x1b\xdf\xcb\x2d\x91\x48\x4b\x4a\x60\x48\x91\xa2\x5a\x52\xb1\x41\x68\x59\x9d\x66\x7f\xa7\x18\x2c\x41\x53\x6b\xff\xfe\x92\x3d\xf7\xa6\x49\x46\xc6\x41\xe3\x6a\x16\xea\xdd\x50\xbf\xb6\xd8\xa3\x61\x79\x91\x5e\x6c\xb5\xff\x92\xb5\x2c\x52\xd3\x24\xd6\xa8\xa2\x05\xdf\xe4\x9f\xf2\xa0\xfa\xda\x9b\x8b\xb5\xed\x85\x38\xc1\x52\xe5\xe1\x64\x9b\x94\xe1\x8a\x9b\x27\x02\x21\x3b\xdb\x4b\xfe\xf9\x31\xb0\x74\xca\xab\xf1\xee\x32\x88\xcf\x49\x4a\x4a\x8a\x88\x45\xc0\xa5\x19\xe7\x3b\x8e\x4f\x19\xb9\xb2\x69\x3f\xfc\x25\xa1\xaa\x98\x51\x9c\x7a\x08\x37\x0f\xde\xd6\x46\xee\x41\xa7\xd2\x21\x4e\x22\x81\x2a\x59\x37\xa7\x78\x95\x0e\xb6\x33\x81\xf9\x8a\xbc\x6d\x15\x8b\x1f\x32\x2a\x16\x47\x3a\x10\xd9\x58\x1e\x4b\x4e\xe0\x5d\x00\xbb\x0f\xd8\xb4\xf2\x6a\x2d\xb5\x44\x81\x00\xc5\xdb\x46\x06\xf1\x49\x8a\x2f\xe3\x96\xf5\xb7\x0f\xaf\x6c\xc6\xef\xe2\x83\x90\x1f\x69\x22\x20\x3d\x82\x50\x94\x40\xad\x7a\x4e\x29\xa6\x62\x65\x8f\x91\x02\x58\xc4\x93\xbb\x01\x3b\x5f\x24\x52\xa4\xa9\x6a\xa1\x8f\xa7\xa4\x68\xca\x08\x45\x4c\x85\x36\x78\x42\x91\x2f\x6d\x98\x33\x31\x21\xae\x05\x27\x4a\x02\xe8\x08\xe1\xad\xf1\xfe\xf4\x64\xa3\xfa\xd6\xbe\x35\x5f\x7f\xb9\x56\x5f\x9a\x45\x6c\x04\x4c\xdd\xb5\x17\xaf\x23\xf3\x13\x32\x22\x71\x7a\xbd\x07\x57\x90\xd0\x49\x7c\x25\x2c\xd0\xd3\xa4\x45\x66\x1d\xb3\x1f\xf2\xa3\x8a\x36\x82\xf7\xff\xbc\x01\x26\xb5\x88\x59\xa6\x48\x4f\x03\xb3\xc3\xcc\xac\xf2\xfe\xe4\x35\xe7\xc6\x5f\xec\x5b\xf3\xce\xc3\xd7\xce\xed\x77\x08\xe1\xe4\x35\xa5\xf1\xf2\x17\x66\x37\xdf\xae\xda\x57\xb7\x71\xe2\x88\x5a\xf0\xaf\xfa\x10\xf9\x6c\x62\xa2\xfd\x5f\xf5\xa1\x53\x67\xbb\x4f\x5c\xbe\xfc\x8f\x64\x18\xb8\xcd\xf8\x84\x95\x9f\x36\x53\xcb\x2c\xeb\x78\xc1\xe3\x0e\xe2\x51\xc5\x24\x43\x94\x6a\xc4\xa0\x4a\x7e\x94\x16\xf0\xa6\x9a\x0d\x21\x3c\x8f\x94\x94\x71\x62\x5a\x6a\xb1\xc8\x36\x2f\xa3\xa2\x21\xf5\x2b\xe6\x60\x76\x9e\xf4\x36\xbe\x76\xf2\x27\xbd\x62\xb0\x27\x58\x54\x37\xa0\xe4\xa8\x32\x46\x91\x98\x3e\x80\xa4\x95\x0d\xa9\xe4\xb4\x62\x5a\xa4\xd7\xd5\x47\x78\x68\xb9\xee\xfc\xb8\xe6\x7c\x73\xb3\xb6\xb7\x22\x11\x53\x29\x17\x75\xa5\x40\x0b\xd9\xee\x5d\x4e\xab\xa6\x05\xe8\xd8\x2e\x27\x8c\xcf\x5a\x8e\xc3\x5c\xb4\x5c\xce\xdd\xb5\xaf\x6e\x23\x5f\x39\x0e\x63\x7e\xda\x40\xcc\xec\xc0\xa1\x37\xa9\xde\x31\x45\x2d\xc2\x54\xe3\xe7\x1d\xee\x6a\x10\x72\x9f\x41\xc5\xbc\x9a\x45\x98\x4b\x0f\xae\x24\x27\x8b\x0b\xeb\x83\x46\x63\xaa\xbe\x4a\x0b\x41\xa8\x6e\xdd\x60\x3f\x41\x99\x42\x21\xf8\x93\x2a\x26\x66\x43\xe5\x20\x41\xdf\x03\xf2\xae\x6d\x6d\x38\x73\x9c\xa0\xc7\x7e\xfb\xca\x79\xbb\x63\x5f\x7f\x1c\xfc\xd5\xef\x36\x68\x8f\xec\x16\xd3\x6b\x86\xcf\x73\x93\xa2\x9f\x02\xac\x96\x72\xa9\xba\x31\x92\x46\x1e\x3a\x78\x13\x64\x71\xe0\x64\x3e\xa4\xf2\x88\x2b\xc3\x51\x77\x38\xfc\x84\xfb\x30\x88\x15\x29\xad\x9e\xbb\x81\x60\xbc\xb1\x83\x38\xfe\x09\xda\x04\xfb\x51\x86\x84\xe0\xe9\x17\x01\x21\x4e\x33\xdc\xe4\xd8\xc2\x01\xc9\x61\xdf\xeb\xe1\xcd\xab\x20\x42\x7f\x92\x12\x1e\x70\x98\x02\x10\x41\xf2\xfa\x9a\xba\x10\xeb\x4e\xaa\x03\xa1\xad\x3e\x53\xb8\x43\x57\x35\xd9\x41\xc5\xa0\x39\x36\xde\x30\x15\x9a\x98\xe3\xa6\x45\x4b\x6d\x1c\xad\x06\xee\x6b\x34\x77\x09\xd6\x46\xbc\x9f\xad\x51\xc5\x02\xd7\xa1\x51\x01\xcf\xa2\x10\x73\x24\xf4\x41\x00\x98\xea\xe3\xee\x1c\xfe\xc3\xb9\x57\xad\x6d\x4d\xd6\x9f\xdf\xb4\x17\xab\xb5\x9d\xa7\x8d\xf7\x4b\x8d\xb5\xf9\x08\x55\xd7\xfe\x77\x57\x9c\x6f\xaf\xd8\x3b\xdb\xfc\xa6\xe6\xe7\x9d\xfa\xce\xea\xc7\xdd\x79\x7b\x7e\xc6\xb9\xf1\x23\x2e\xb2\xee\x43\x01\x66\x89\xd7\x7c\xf6\x49\x71\x69\xe0\x4b\x57\xfa\x15\x22\xbc\x18\xf8\x2b\x98\xbb\x2a\xa4\xa8\x39\x00\x4c\x1e\xf8\xde\xfa\x70\xcb\xb3\xca\x1d\x03\xc1\x01\x90\x6d\x4a\x79\x90\x54\x00\x62\x90\x7d\xcc\x49\x50\xaf\xb0\x0e\x6f\xed\xd6\x87\x87\x29\xf0\xf2\xbb\xb5\x05\x20\x22\xe5\x6d\x75\x69\xd3\x98\xd5\x05\xcb\x6d\x6d\xfb\xb9\xfd\x8d\x80\x2d\x2e\x52\x2b\x2e\x5e\x2e\x43\x2f\x47\x07\x94\x57\x87\x3b\x14\xf4\x65\xe3\xaf\x57\x9c\xed\x25\xbc\x6c\x4a\x55\x1d\xb8\xd3\x32\xd4\x72\x7b\x7d\xff\xea\x62\xa2\xfc\x00\x85\x59\x60\x4d\x4a\xfc\x5a\xb8\x22\x05\xbe\x99\xbd\xba\x2a\xa9\xc5\xa3\x34\x51\x9a\x96\x43\xf9\xcc\x08\xac\x70\x1e\xd3\x88\xa4\x9e\x10\xb5\x83\x54\x72\x90\xa5\x41\x22\x30\x8a\x4d\xcf\xbb\x89\x59\xd3\xfa\x70\xd3\xaf\x70\xb8\xe3\x86\x63\xc0\x33\x20\xd7\x84\xa3\xe9\xc4\x2d\x4f\xde\x16\xb3\xff\x70\xd6\x9e\x9d\x09\x3e\x69\x41\x67\x4e\x17\xcc\x74\xe7\xb0\x7c\xe9\x14\x0c\x29\xb5\xbb\xdc\xa8\x7e\xed\x5c\xfb\xc6\x9e\x9f\xc9\xa8\x54\x08\x30\xd9\x44\xd8\xba\x84\x75\x31\x8c\x6b\x8c\x07\x8c\x34\x75\xf8\xb8\xc6\xa9\xe4\xfb\x6e\x8c\x14\xc2\x39\x32\x71\x0a\xc1\x41\x94\x61\x89\x60\x04\x4a\x4c\x62\x9a\x14\x0b\x60\xdf\x94\xbb\xb3\x69\x81\xa0\x1f\xda\x4c\x74\x5f\xe3\x97\x75\x21\x90\xbc\x2d\x47\xe8\xba\x3e\x0d\x54\xe9\xee\x15\xc6\x25\xc5\x28\xb8\x66\x32\x0e\x21\x76\x98\x52\x4d\xb8\xf8\x76\x63\x7e\x0a\x74\x58\xd5\x68\x01\x0f\x45\x70\x0f\xa8\xb3\xe3\x93\x48\x2f\xa0\x10\xc6\x6b\x8d\xc6\xde\x8f\xf6\xe2\xd7\x8d\xe7\x57\x1a\xf3\x5f\x7d\x98\x9c\x76\x36\x9e\xa0\x8f\x06\x77\x72\xfb\xe5\x83\xda\xbb\x6b\xf6\x93\x07\xce\x8f\x6b\x42\x97\xca\x69\x3d\x7f\x31\x4c\xe1\x0e\x64\xe7\x06\xf0\xfe\x91\x4a\xb9\xa0\x58\xc2\x5d\x79\xff\xf6\x94\xfd\xf2\x41\xa0\x64\x6d\xe7\xe9\xfe\xbd\x1d\x67\xe3\x3b\x76\xf0\x5d\x16\x5c\x90\x9e\xd6\x11\x85\x91\x08\x63\x13\x10\x46\xc8\x99\x7b\x5b\xbf\xbf\x63\xef\x09\x42\x8f\x3c\x31\xba\x10\xf3\xc7\x93\xe3\xfc\xbc\xbe\x7f\x7b\x52\x28\x67\x84\x16\x08\x35\x0c\xdd\x10\x7a\xdf\x1b\x2f\x37\xed\xbd\x3b\xcc\x10\xba\x7d\xbf\x51\xad\x8a\xfc\x77\x4c\x16\x1c\x86\x2b\x56\xd2\xc0\x42\x95\x24\xc3\x48\xbf\x08\x70\x95\x65\xb8\x07\x62\x36\x21\xc6\x4c\x1c\x69\xe6\x46\x0a\xfb\xaf\xe4\xc3\xd9\xb5\x94\x9a\x1c\x67\xcc\x82\x59\x7d\xea\x5c\xfb\x25\x5a\x5f\xbc\x7e\x67\x3a\x7a\xba\x4f\x76\x0d\x0c\x5e\xe8\xeb\x18\xfc\x3c\xd3\x54\x6c\x01\x19\xec\x8c\x72\x91\x12\x05\xbe\x76\xce\x73\x86\x36\x87\x85\x7a\x16\x80\xa5\x93\xce\x93\x60\x0e\x27\x0e\x0c\xd7\x99\x19\xdc\x40\xd9\xec\xf9\xe5\x21\x13\x11\x5c\xd1\xb1\x8c\x44\x41\x98\x44\xb0\xe8\x1d\x31\x43\x21\xac\x26\xd1\xb5\xe2\x38\x19\x53\x4d\x95\x69\x77\x49\xb5\x46\x43\x56\x04\x6b\x8c\xe4\x6c\x53\xdb\x7b\x1f\x5c\x21\xa3\xc8\xe0\x3b\x33\xf6\xca\x7a\xe4\xe4\x63\x2f\x56\x1b\xcf\x05\xc6\xd9\x99\x20\xe4\x12\xc9\x1b\x54\x01\x05\x2a\xb0\xdf\x0c\x57\x8a\xc5\x71\xa2\x58\x42\x92\xaf\x40\xe0\x20\xb3\xc3\xe7\x96\xec\xeb\xab\xf6\xdc\x43\x7b\x67\x9b\x9d\x06\xe0\x1f\xce\xdd\x37\xfb\x77\x5f\x8b\xa6\xc8\x19\xa5\x4c\x14\x32\xd8\x29\x47\xce\x73\xee\x3d\xb6\x37\xaf\xc0\x6b\x32\x13\x1a\x84\x69\xc9\x40\x7c\x5c\x5c\x00\x82\x2f\xa5\xbc\xe3\xe7\x31\x66\x8d\x90\xce\x93\x98\xa8\x53\x52\xca\x39\xbc\x97\xf6\x20\x38\x78\xde\xd9\x9f\x73\xb9\x51\x17\x2f\xd0\x85\x29\xfd\x82\x3d\x05\x1f\x3c\x9b\x27\x5f\x20\x58\x13\x21\x24\xd2\x0b\x59\xaa\xf9\x2c\x97\x83\xdd\xa5\xaf\xb7\x7f\x90\xfc\x6f\x92\xcb\x19\x8a\x56\xd0\x4b\xf0\xf0\x1f\xb1\x82\xae\x7f\xef\x38\xd3\x77\xba\x6b\x80\x8b\x6d\x96\x59\x1a\xcf\x29\xe5\xb2\x1b\xb5\xd8\x9e\xd7\x4b\x44\xfa\x9f\xff\x16\x7c\x35\x83\xd0\x40\x8f\x94\xc6\x21\xe9\x20\x24\x14\x9f\xb5\x1f\x96\x6c\xde\xd3\xc3\xba\x1e\x2b\xfb\x37\xc3\xba\x9e\x49\x3e\x74\xf3\x3f\x1d\x3d\x7a\x34\xa1\x43\x8e\xb3\x77\x32\x2e\x68\x65\x7e\x18\xd5\xdd\x93\x05\x5b\xb4\x2c\x66\x19\x88\x4d\x1b\x7b\x73\xd6\x79\xfc\xce\x5e\x5d\xc5\xe1\x6c\xcf\x6d\x3a\x1b\x4f\x92\xef\x0c\xcf\x28\x5f\x92\x4b\x8a\x6a\x21\x69\xb8\x0b\x34\xed\x2d\x9b\x40\x02\x5f\x29\xb7\x31\xf3\xb7\xa4\x6a\x15\xf1\x76\x1f\x8a\x0e\xc6\x95\x12\x28\xe0\x61\x45\x9a\xdc\xbf\xf3\xbe\xbe\x71\xcd\xfe\x65\x06\xe7\xff\xc7\xdd\x39\x7b\x6e\x76\xff\x96\xf8\x42\xa0\x59\x2f\xdf\x90\xe0\x36\x78\x0a\xa5\xfc\x32\x41\x93\xfb\x50\x54\xb2\x74\x42\x4d\x4b\x19\x2a\xaa\xe6\x28\x51\x48\x5e\xd7\x34\x9a\x67\xf5\x06\xaf\x65\x60\x00\xb2\xb3\x6d\xb1\xe2\xfe\xc4\x0e\x16\xba\xf8\x2a\x56\x58\xb5\x5a\xaa\x94\x88\x52\x82\x98\x00\x7d\xd8\xf5\xd0\xa1\xb5\xeb\x05\x4f\xf9\x01\x06\x8a\x86\x77\xe9\x08\x81\x7b\xec\xe8\x6f\x7f\x7f\xa6\x8d\x1c\x3b\xd5\x46\x8e\x1d\x3d\x25\xbc\x06\x6a\xfe\x84\x68\x2a\xce\xbc\x75\x56\xae\x61\xaf\xd9\x4f\x9e\x73\xaf\xde\xd5\xc5\x20\x56\x2e\xd4\xf0\x61\x72\xea\xd8\x29\xf6\x3f\x47\x4f\xc9\x7a\xf1\x30\x9b\xd2\x4e\x72\xc7\x98\xbd\x63\x50\x13\xa8\xa8\x15\x8d\x54\x34\xf0\xcc\xd0\x02\xaf\x43\x18\x02\x7f\xb8\xcd\xfd\x30\x39\x9d\x3b\x46\x1a\x6b\xeb\xf5\x27\xdb\xce\x9d\xcd\xfd\xab\x8b\xce\xdd\xc7\xe8\xc2\x11\xda\xd7\x7f\x83\xce\x20\x9f\x9d\xa0\xc3\x4a\xa5\x68\x1d\xf7\x7f\xfb\x95\x06\x84\xbc\x87\x3e\xee\xce\xd5\x77\xb7\xeb\x2b\x53\xc0\x8e\xec\xfd\x92\x38\x90\x30\x80\x91\xf5\x1d\xbf\xbd\x83\x6b\xcf\x92\x32\xce\x4e\x4f\xae\x05\x03\xb1\x9e\xac\x5b\x8c\x31\x8a\x3e\x64\xe1\x3a\xb6\x58\x45\x63\xae\xf6\xfe\x51\xfd\xce\x7d\x1e\xcd\x08\xb6\x8b\xd7\x60\xb4\x12\x84\x41\x1e\x07\xd5\x2c\xf0\x89\x8e\x0a\x3f\x4d\x16\x35\xc3\x5d\x7b\x34\xb1\x4b\x61\x81\xfb\xcc\x5f\xab\xfe\x11\x16\xe0\xce\xd3\xdd\x6c\xd5\x83\x25\x30\x72\xf5\x81\xfb\x44\x1b\xd1\xad\x51\x6a\xf0\xa0\x4a\x62\xaa\x05\xea\xba\x0d\x4d\x68\x36\x2b\x21\x0a\xba\x66\xd2\x71\x3d\x0e\xe7\x99\x84\xf6\x10\x6f\xa9\xae\x3f\xbf\xf5\x71\xf7\x1a\xb3\x2a\x67\xde\xd4\x76\x96\xfd\x18\xcd\x1f\xaa\x8d\x37\x6c\x45\x67\x46\xee\x57\x7b\xfb\x93\xd3\x62\xb3\x5c\x16\x02\x2e\x2b\x82\x8e\x5f\x3e\x03\x7f\xfb\x4f\xff\x83\x4d\x40\x77\x1e\x0a\x3f\x57\x20\x12\x22\x38\x4b\x58\x71\x98\x1f\xee\x64\x11\x7f\x1b\x74\xe8\xa6\x72\xee\x3a\x6f\xe6\x9c\xa9\x6a\xe4\xd5\x78\xa9\xea\x88\xa1\x58\x34\xc6\xbd\x02\x07\x49\x5d\xa3\x61\x7e\x23\x4b\x27\x8a\x06\x5f\x59\x62\x86\x04\x4e\x4b\xb5\x9d\x85\xda\xd6\x64\x6d\xeb\x45\xf0\x54\xd2\x78\x3f\x55\x7f\xbe\x63\xcf\x6d\xda\x8b\xcf\x9a\x7f\x8d\x57\x54\x02\xeb\x8f\xb9\x48\xe2\x62\x42\xe8\x6a\x28\x27\xc0\xaa\xee\xe9\xfa\xb7\x0b\x99\xa9\x04\x7a\xce\x9e\xf1\xe0\x31\x44\x60\xdc\x82\x92\x4a\x49\x78\x87\x2b\x6b\x1e\xb3\x2f\xf4\x61\xa2\x10\x83\x8e\xa8\xa6\x45\x8d\x90\xbb\x55\x34\x3c\x7e\x5e\xb7\x67\xe7\xeb\x0f\xae\x78\x07\x7e\xf6\xef\xd6\xab\x21\x97\x46\xa9\x81\x47\x5c\xdf\xe9\xcb\xdd\x37\xaa\x49\x8a\x7a\x9e\xad\x74\xd9\x95\xf9\xb8\x3b\x8f\x6e\x5f\xef\x62\xad\xb6\x77\xb3\xb6\xbd\xc0\xe6\xfc\xd6\x86\x44\x55\x4b\x87\xa0\x12\x7e\x8a\x36\x2f\x92\xcf\x46\xa8\x46\x0d\x58\x6f\xd5\x61\xa2\x97\x54\x4b\xb2\xeb\x89\x05\x67\x0b\x03\xe8\xa1\x97\x48\x1f\x87\x60\x15\x35\x7e\x79\xd3\xae\xce\xd6\x1f\x0b\x4e\xe3\x4c\x82\x26\x1e\x19\xac\x34\x74\x94\xe0\x34\xdd\xa3\x87\x52\x1a\x88\x49\xad\x76\x4c\x92\x98\x98\x68\x3f\xad\x8f\xa8\xda\xa0\x5a\xbe\x7c\xf9\x08\xe1\xf1\x44\x1d\x7d\xdd\xfc\x01\x3b\x6e\xa0\x0f\x43\xd1\xbc\xf2\xe2\x3b\xc7\x17\x78\xa9\x5c\xdb\xd9\xa9\xed\xdd\x81\x3a\xeb\x3f\x54\xeb\xd3\xef\x3e\x4c\x4e\xe3\x26\xd5\x54\x23\x40\x14\x87\xaa\x74\x1e\x3d\xad\xaf\xbd\x64\x1f\x1b\x6f\x2b\x5c\x01\xc2\xa6\x29\x65\x55\xd0\x34\xf7\xd6\xca\xd2\xe1\x9a\x3e\xd0\x84\x56\x5a\xd0\xa8\xbe\x0d\x34\xc2\x95\xed\x3c\x7a\x8a\x45\xf0\x3d\x89\x96\x65\xb8\x4b\x31\xc9\xb0\x5e\xd1\x80\xde\x00\x82\xae\xf8\xf5\x99\x60\xca\xaf\xac\x07\xdf\x82\xeb\xb7\x95\x17\xce\xb5\x5f\xec\xb9\x4d\x54\x31\x04\x64\x2d\xc1\xb8\x47\x0d\x78\xe5\xa2\xd6\xbb\x89\x9f\xc9\xa7\x45\x26\xce\x4d\xb4\x74\x53\x2f\x85\x11\x36\x37\x23\x18\x0d\x42\x91\x7e\xdc\x45\x3a\x3d\x93\x42\x2f\x7a\x74\x1e\xba\x65\x92\x4b\x14\x48\x03\x0a\xc2\x29\xb4\xf2\xa2\xf1\xfe\x61\x63\x6d\x1e\xbb\x15\x43\xb2\x84\x52\x5d\x37\x5f\xba\xde\x14\xf9\xf2\x40\x50\xb9\x5c\xa4\x06\x29\xea\x23\x23\x06\x1d\x81\xf0\x27\x6f\x2c\x83\xf4\x76\xd2\x89\x19\x84\x06\xb5\x0c\x95\x8e\x51\xf6\xae\x29\x9a\x82\x3c\xdb\x02\x06\x42\x6d\x6b\x03\x31\xde\xc9\xe9\x80\xf4\x84\x61\x0a\x17\xfa\xf1\x44\x53\xa2\x76\xbe\x5a\x8b\x04\x25\x85\xe9\xa9\xea\x0f\xae\x60\x9f\xd6\xb6\x6f\xc8\x86\x27\x42\xc5\x7b\xfb\x46\x3b\x89\xfb\x7a\x92\xa5\x07\x77\x08\xfe\xf9\xc0\xbf\xf1\x61\x72\x3a\xf6\xb3\xca\x16\x13\xdd\x18\xc1\x00\x3f\xf0\x46\xbb\x37\xaf\x6d\x40\x94\xc0\x66\x22\x47\xb7\x6f\x5a\x1b\x43\xe5\x44\x4a\xde\x7d\x1c\xf4\xf4\xda\xb7\xe6\xf1\x2a\x16\x73\xab\x03\x6b\x4b\xa0\x92\xe8\x6a\x18\x2e\x29\x6d\x86\x6e\x88\x5b\x71\x12\x69\xa6\xfc\x8a\xd2\xa9\xec\xcc\x2d\x8b\x54\x6e\x96\x28\xd3\xed\xf0\x54\xfa\x04\x9a\x88\x3f\xb1\x70\xf8\x25\xe9\x94\xf0\x41\x13\x46\x64\xca\x85\x46\x16\x39\xd6\xa3\x87\xbd\xf9\xe9\x24\x26\xbb\xf5\x5d\xb9\xe9\x05\x0a\xaf\xd5\x99\x28\xee\xed\xa7\xda\x18\x19\x53\x0c\x55\x19\x62\x1b\x26\xdc\x73\x40\xa8\xa9\x49\x85\xc4\x1d\x9b\x0f\x22\x9b\x37\x86\x00\xd4\x17\xaa\xf6\x77\x5f\x25\xec\x3b\x6e\xb5\x51\x57\xbf\xb8\xba\xd8\xba\x12\x1c\xf7\x3d\x7a\xca\xb0\x38\xe7\xee\xe3\x34\xa2\xc2\xd4\xbe\xa9\xba\x3f\xad\x27\x3d\x20\xff\x22\x1d\x0f\x11\xd8\x7a\x37\x50\x3e\x19\xad\x9b\x33\x22\xdf\x26\xee\x3e\x0e\x9e\x07\x85\xc5\x03\x9c\xb6\x92\xf0\x94\x88\x82\xbe\xb0\x3f\x52\x1e\xbf\xce\xcd\xac\x43\x51\x3d\xdc\x7d\x19\x1b\x10\xa7\x5c\x62\xa3\xfc\x10\xac\x2c\xdf\x55\x12\x6c\xe5\xcb\xce\x24\x52\x2c\xec\xf0\x76\x96\x03\x6f\x28\xd9\xf6\x6a\x7c\x3d\x79\x25\xcf\xbc\x35\xcb\x77\x64\x1e\x42\xa8\x98\xa6\x3a\xa2\x89\x0f\xc1\x2b\x2f\xec\xb9\xd9\xfd\x99\x9b\xb8\xae\xa4\x93\x99\x6e\x73\x48\x10\xc5\xc3\x99\x0e\x63\xe5\x0d\xb9\x58\xd2\xac\xbf\x7e\x2c\x55\x70\x79\x4c\xbf\xfc\x06\x2b\x4c\xb1\x72\x42\x54\xac\x1f\x22\x70\x28\x4d\x86\xa8\x56\x2f\x4e\x20\x55\xab\x21\x50\xc1\x8d\xea\x39\x14\x25\x20\x58\x01\xe3\x79\xd2\x2a\x81\x89\x44\xa1\xdc\xf1\x16\xb2\x6d\x7b\xf4\x00\x7a\x43\xba\xa3\x9b\x0f\x0a\x21\x90\x68\xc1\xa1\x08\x88\x00\xfd\x13\x7d\xe7\x49\xb8\x3c\x08\xcf\xec\xa2\x3e\xc2\x5e\x12\x8f\x15\x0c\x10\x6a\x3a\xc2\x37\x0b\xf3\x5e\x14\x2b\x65\x56\xca\x65\xdd\xb0\x68\x81\x00\x29\x21\x50\x9c\x65\xec\x2b\x0b\x30\x8b\x54\xbc\x0a\xb7\x94\x8b\x94\x98\x7a\x09\x6f\xc8\xc5\x77\x63\xc7\x49\xe3\xfd\x7d\x7e\x99\x0d\xc7\xe9\xda\xd6\x64\x6d\xfb\x21\x5e\x84\x0b\x6a\xf2\xdc\x0e\xde\x6d\xae\x34\x51\x54\xe8\xc7\xe8\xfd\xa3\x28\xc5\x1b\xd6\x3f\x41\xa1\xbe\xc1\xee\xde\x1e\x21\x5f\xe0\xfe\xe4\xb5\xfd\xb5\x77\x82\x4b\xd7\xde\xfe\x53\xa4\xe3\xc4\x99\xee\x1e\x51\xbd\x60\xe9\x62\x3e\x95\xfd\xb5\x00\x9b\xc5\x13\x22\xc4\x9b\x0a\x4b\x91\xe9\x72\xf6\x44\xf7\x60\x6f\xbf\x54\x8e\xfd\x72\xad\xf1\x72\x4d\xaa\xcd\x99\x8e\x9e\x8e\x53\x5d\x72\x31\xc9\x8d\x12\x5d\x28\xcb\xcc\x7f\x56\x4c\xde\x0d\xa2\xd6\x43\x2e\x26\x39\x92\xcb\x29\xe5\x32\xc4\x3a\x98\xa2\x1d\x3d\x49\x80\xa6\x7b\xb1\x18\x47\x02\xb0\x48\x40\x9a\xe9\x42\xb0\x28\xe5\xb2\xcf\xf6\x16\x80\xa1\xb0\x46\x29\x39\x82\x07\x8d\x23\x44\xb1\x2c\x43\x1d\x12\xc7\xf1\x24\x29\x52\x56\xac\xd1\x56\x1b\x01\xc4\x6a\x2d\x96\x0d\x84\xe0\xb4\x2c\x82\xfb\x07\x31\x20\xe5\x60\xdf\x83\x8b\x38\x40\x67\xe0\x89\x32\x07\xbb\x75\x8b\x32\x94\x16\xcb\xb5\x5a\x9f\x91\xb1\x9c\x30\x72\x5f\x3a\xdb\x8c\x11\x9e\x4c\x5a\xa2\x9a\x95\xcd\x59\xc0\xca\x62\xbe\x0e\x8e\x7e\x33\x98\x48\x10\xf0\xb4\x8a\x56\x72\x80\x4f\x41\x8b\x34\x12\xfe\x9e\xa4\x71\x88\x40\x5e\x29\x1a\x54\x29\x8c\x23\x24\x8a\x68\xdb\x08\x91\xde\xf3\x82\xf6\xdb\x57\x32\xd8\x93\xa6\x8a\xc2\xe0\x2b\x90\x17\x88\x7f\x63\x68\xbb\x3a\x24\xa4\x77\x8d\xab\xdd\x03\x5d\x71\xe6\x96\xd9\xbf\x17\xab\x18\xef\xde\x92\x32\x42\xa6\x49\x59\xc5\x42\xe3\xa1\xd7\x18\x49\x58\x81\x05\xde\x9b\xde\xe4\x54\xa3\x84\x4f\xeb\x15\x0f\x79\x2e\x58\x3b\xf1\x8a\x39\xe3\x00\x55\x47\x54\x80\x3f\x24\x25\xa5\x5c\x46\x90\x20\x08\xb1\x56\xf2\x88\x54\x02\x40\x42\x3c\x76\x1b\x9c\x2e\x5f\x5a\xd4\xd0\x94\x22\xe7\x45\xb6\xc6\x5d\x7b\x53\xe4\x3b\x16\x54\x3c\x46\x0d\x43\x2d\x50\x0f\xad\xa8\x80\xc1\x11\x1c\x07\x89\x14\x54\x83\xe6\x25\xde\xce\xc6\xb3\xd9\xfa\xc3\x65\x8c\x7f\xc0\x7b\x72\x84\xbc\x4c\x60\x77\x16\x56\xeb\xa5\xd4\x66\xae\x1d\x7d\x98\xad\xe8\x60\x50\x08\xb0\x60\x36\x9d\x35\x4a\x23\xa1\x41\xee\x2a\x41\xb5\x31\xd5\xd0\x35\x70\xce\x28\xc3\x16\x35\x48\x5e\x2f\x8f\xe7\x78\x62\x55\x5e\x2f\x95\x8b\x54\x1c\x2a\x87\x8a\xda\x2b\xeb\xa1\x52\xf6\xcb\x79\x67\x6e\xc9\x5e\x5a\xd8\xbf\x7a\x13\xdc\x8d\x10\x8e\x81\x07\x5f\x38\x67\xd4\xb6\x36\x22\xeb\x8d\x2c\xa9\x3a\x73\x3c\x78\x5f\x57\xcf\x89\xee\x9e\x53\xd9\xca\xf4\xf6\x0f\x66\x2c\x30\xd0\xcd\x8c\xd6\x6c\x85\x14\xb5\x10\x0e\xe4\x16\x39\xc2\x76\xee\x35\x5e\xbf\x4b\x8e\x70\xe8\x53\x0c\xa5\x44\x2d\x6a\x98\x44\x31\x01\x2b\x25\xa3\x3e\xa6\x89\xe8\x14\x21\x19\x80\x78\x07\xa1\x46\x44\x09\xde\xb3\x7a\x23\xc5\x3d\x7d\xe2\xe1\x5b\x1c\xd5\x81\xe0\x15\x08\xb9\x8b\x92\x6b\xbb\x8f\xf7\x27\x6f\x71\xe4\x02\x88\x3c\x6a\xbe\x7b\x15\x1e\xc8\xd3\xa8\x1b\xb8\x9c\xf8\x24\xea\x8a\x2e\x2c\xa4\x4a\x4b\xbc\xf9\x32\x57\xbe\x5b\x94\x8c\x51\xc3\x4b\xf7\xf1\x37\x9e\x92\x62\xe5\x47\xa5\x62\xf7\x5f\xcc\x37\xaa\x53\x6c\xbf\x99\x7f\xb7\x3f\x23\x60\x86\xef\xc3\x10\x67\x23\x39\xe8\x3d\x31\xda\xdd\x13\x95\x8a\xcc\x3e\x9b\x38\x99\xa4\x44\x21\x60\x24\x14\x8b\xfa\x25\xb8\x23\xf0\xc3\xe4\xd3\x41\xc1\xf8\x49\x03\x51\x38\x98\xda\xd6\x06\xeb\xdd\x99\xa9\xc6\xcb\xad\x44\x25\x38\xa0\x85\x38\x1c\x3b\xfa\x96\x58\x94\x85\x41\x02\xde\x46\x02\x89\xfc\x6c\x2b\xfd\x4f\x15\x43\x07\xdc\x55\x9f\x59\x86\xe0\xa5\xf5\x77\x81\xc4\xed\x27\xb4\x36\x87\xb7\x1c\x67\x6e\xb9\xf9\x57\x7b\x76\xc6\x7e\xf9\xae\xfe\xe0\x0a\xd4\x1e\x41\xde\x93\x37\x22\xd4\x00\x57\x77\x91\xe1\x02\x95\x39\x73\xcb\xd9\xab\x71\x7b\x04\xe6\x74\x01\x70\x83\x86\x62\x2e\x11\x8d\x4a\x51\xb8\xd5\xc9\x2b\x70\xcf\xa1\xd2\x24\x97\x44\x4d\xe1\x78\x8b\xc8\x1b\x43\x1c\xf4\x18\x4f\xbb\x6e\xf2\x47\x90\xe5\xc8\xd2\xb9\x03\x7c\xdc\x9f\x1e\xec\xe1\x90\x2a\xbc\x51\xfb\xd4\x55\x57\xb4\x03\x54\x6e\xe9\xdc\xe6\xe3\x52\x13\x97\x0f\x9e\xbd\x5b\x9d\xb5\xe7\x7e\x08\x26\xe2\x24\x8d\x09\x6a\x0c\xeb\x46\x89\x6d\x15\x2a\xb3\x6e\x08\xc7\x45\x66\xc6\x9a\x45\x8d\x92\xaa\x51\x72\x69\x94\x42\x50\xaa\xc2\xdb\xc6\x33\xf9\x8b\xee\x19\x87\xf3\xea\x0b\x2f\x2e\x9f\xb3\x1d\xed\xe5\xa4\x7d\xf3\x8e\xf3\xfd\xa4\xb3\xfa\x14\x37\x10\xbc\x01\x43\xdd\x30\xd5\xdf\xb9\x57\xb5\x97\x9e\xc9\xce\x40\x7d\x45\x45\x8b\x9e\x7b\xdc\x15\xd1\x77\x16\xf1\xd5\x88\x5b\x16\xe2\xe0\x1a\xac\xa9\xb9\x20\x1a\x1a\xf5\x07\x57\xa4\xb6\x46\x11\xf1\xe4\x78\x51\xf6\x27\x2f\xee\x5f\xd0\xa4\x0b\x72\x81\x4a\x62\x45\x65\xad\x79\x14\x40\xda\x63\x22\x51\xd9\x9c\xc4\x30\x55\xd1\x22\x27\x56\x82\x60\x98\x4a\xe3\xd9\x14\x06\x9d\x46\x92\xf9\xc4\x3a\x1e\x8f\x6f\x93\x4c\x01\x41\x11\x61\x15\x66\xe0\xac\x4b\x86\xc6\x89\xc2\xec\x21\x4b\xcd\x57\x8a\x8a\x91\x0a\x68\x62\xb1\x5a\xbf\xfd\x53\xfd\xda\x3b\xfb\xe5\x03\x3c\x09\xe2\xa1\x37\xf1\xdb\x03\x34\x6c\x7e\x54\xd7\x4d\x4a\xa8\x8a\xb3\x83\x6d\xa8\x6c\x2a\x14\x54\x13\xfe\xdd\x4e\xfe\xa0\xb3\x1d\x1b\xa2\x73\x14\x83\x22\x7e\x3e\x9b\x53\x96\x85\x33\x7c\x08\x09\xe6\x71\xad\x81\xd8\x4f\x60\x2a\xc0\x5b\x75\xd1\xd9\xb2\x51\x7d\x8b\xf8\x57\xbc\x46\xb6\x05\xb8\x55\x7e\x98\x9c\xf6\x36\x60\x7b\x65\xdd\x5e\x9a\xaf\x6d\x4d\x22\xfe\x10\x3b\x65\x2c\xcd\x3b\x77\xdf\xa0\x11\xd7\x78\x7f\xbf\xb6\xf5\xa4\xb6\xf5\xc2\x0b\xf8\x91\x36\x15\x1d\x05\x44\x19\x51\x84\x49\xc5\x4c\x2f\x38\xe1\x24\xb8\x02\x22\xb8\xba\x18\xf2\xaa\xe4\x43\x79\x9b\xc1\x4f\x17\xbd\xcc\x4c\x7d\xa1\xe3\x01\xe6\x7a\xf0\x10\xb2\x2b\x1e\x89\x93\x0f\x53\xd9\x89\x24\xc0\x98\xc3\xa4\x48\xe2\x7f\xb9\x0c\x15\xf3\xe3\x79\xc3\xd8\xe4\x2c\x16\xc5\x2e\x4d\x94\x0a\x89\xf1\xf6\xdb\x57\xf6\xe2\xb2\xf3\x46\x80\xb1\xc7\xc5\x43\xb2\x94\x07\x02\x1f\x7b\x35\x93\xa2\x05\x4d\x12\x12\x00\x79\x65\x95\xab\xa6\x77\x21\x66\x29\x17\xa9\xe8\x5b\x49\xab\xb7\xdf\xbe\xda\xbf\x7a\x55\x98\x85\xd0\xe7\xa3\xdc\x80\x0e\x05\x72\xfe\x1f\x42\xc9\xd7\xe7\xff\x21\x72\x29\xd7\x46\xca\x38\x08\x2b\x26\x75\x83\xf1\x91\x33\x44\x1c\x40\xce\x0e\x41\xd1\x9c\xee\x66\x80\x1c\xef\x0e\x2f\xe8\xfe\xc6\x04\x0b\x6c\x9c\x64\x5a\xf0\x56\xfc\x47\x85\x9a\x6c\x7d\xe0\x8b\x39\xb3\x3f\x8c\xf1\x40\xf2\x35\xdb\xef\xc6\xf5\x8a\x41\x7a\x07\xc4\x88\xd8\xd5\xb7\xce\x4f\xd3\x9e\x7a\x3c\xd0\x90\xe3\xca\x2c\x38\xd3\xeb\x41\x44\xa1\xfa\x83\x2b\xb5\xed\xf9\xc6\xfb\x87\xf6\xdc\x1b\x97\xc6\x42\xaa\x63\xf4\xfb\x84\x72\x9b\x2b\x9a\xea\x62\x40\x08\xfd\x8a\x11\xb2\x02\xff\x33\xf3\x7c\xe7\x9b\x5b\x8d\xbd\xbd\xa4\x9e\x8a\x16\x1f\x9b\x98\x68\x3f\x47\x0d\x13\x00\x30\xc3\x3a\xb5\xaa\xd1\xb9\x90\x48\x5f\x3f\x98\x91\x62\xfd\x5c\x78\x4d\xb6\x5a\x25\x25\x62\xfb\x87\x29\x0f\x4b\x53\x22\x35\x72\x70\xf3\x8d\xc2\x74\x27\xb7\x80\x59\x28\x3b\xba\x25\xaa\x11\x6b\xa1\x26\xb5\x34\x64\xa0\xa6\x6f\xb6\xa1\x6a\x16\x44\x93\xf3\x99\x41\x0a\xaa\x32\xa2\xe9\xa6\xa5\xe6\xc1\xae\x31\xad\x82\x18\xa0\xc2\xde\x9c\x85\xb2\x38\x1f\x1a\xd5\xeb\xce\xf2\x86\x73\xed\x1b\xfb\xe6\xa6\x3d\xb7\xe9\x16\x95\xd4\xab\x57\x2c\xa2\x90\x22\x5c\xaf\x0f\xf3\x20\x74\xb6\x0d\x46\x8e\x9a\x91\x93\xa5\xe2\x21\x92\x78\x47\x2d\xee\xa0\x8b\x80\x39\x9e\xe8\xea\x20\x43\x4a\xfe\x22\x95\x58\x89\x4c\x59\x8f\x60\xc8\x83\x72\xb7\xe7\xee\x36\xd6\xd6\xd9\xd6\xcf\x64\xd8\x4b\x0b\xf5\x1f\xaa\xb5\xad\xeb\xfc\xf6\xe8\xc1\x95\xe8\xee\x06\x16\x0e\x2f\x0a\xe7\x53\x59\xab\x99\x6a\x63\x38\xec\xe5\x6a\x5d\x9b\x73\x56\x7e\x14\x49\xd2\x87\x8a\xb4\x44\x0c\x5a\xd2\xc7\x58\x93\x0b\xfa\x25\x0d\x91\x20\xdd\x25\x8d\xed\xf5\xb4\x14\x38\x80\x0b\x97\xb3\xfd\xfb\x4f\xec\x85\x9d\xda\xd6\x6b\xe7\xee\x1b\xaf\x2f\x6a\x5b\x37\x1a\x7b\x7b\xcd\x8b\x17\x64\xae\x7d\x5d\xbf\xbd\xba\x7f\xf7\xe5\xfe\x77\xf7\x84\x6b\x99\xa1\x03\x00\x10\x1e\x72\x20\xaf\x65\x68\x9c\x98\xea\x88\xa6\x14\xd1\x0c\x85\x7f\x5e\xbe\xdc\x4e\xba\xbe\x54\xbd\x34\x43\xa0\xbd\x51\xad\x4e\xbd\x20\xc1\xca\x7d\xff\xb0\xbe\x7e\xa3\xf1\xdd\x0f\x08\xdd\x5c\x7b\xbf\x66\x2f\xbe\xad\xef\xcc\x39\x1b\xdf\x85\x24\x7f\x98\x9c\x66\x5b\xdb\xe4\xa4\x7d\x15\xd0\x1d\xde\xbd\xb1\xb7\x9e\x39\x2b\xd7\x22\x95\x88\xd4\x07\xc8\xd9\x38\x14\x5b\x3f\x4f\xc2\xc7\x7f\x46\x50\x1c\x44\x8d\x45\x3f\x11\x29\xea\xda\x08\x35\xfc\xb0\x0c\x8f\xf2\x00\xbe\x19\x25\x2a\x42\xb8\x5a\x6c\xf7\x61\x76\x9f\x84\x07\x0b\x4f\xf4\xc8\x80\x65\xcf\x6d\xd6\xb6\x67\xed\x9f\xbe\x75\x26\x9f\xc7\x69\x87\x38\x3a\x08\x2d\xcb\x96\x9c\xd9\x9b\xf6\xe2\x5d\xe7\x76\xd5\x99\x9f\xc2\x38\x13\x7b\x73\xd6\x9e\x79\x83\xdf\xfc\xe3\xee\x7c\xfd\xca\x1b\xbc\x3c\x6f\x54\x25\x46\xa5\xdc\x2d\x82\x76\x60\x63\x72\x46\x50\xba\x62\xf0\x28\x2a\x3c\x38\x05\xd0\xbc\x51\xe9\x44\xb0\x99\xad\x99\xfd\xfb\x4f\xf0\x58\x14\x5f\x3a\x6d\xbd\xa1\x93\x68\xd6\x6a\x9b\x0a\x0b\x6a\x85\x74\x7b\x97\x3f\x52\x37\x08\xb0\x7a\xb8\x19\x03\x90\x9f\x88\x86\x12\x87\x0f\x13\xe9\xb0\xb0\xbe\x3f\x39\x15\xe1\x87\xfc\xb8\x3b\xef\xcc\x2d\xdb\x9b\xb3\x1c\x9a\x77\x69\xde\xd9\x78\x6a\xcf\x6d\xd6\x17\x36\x53\x01\xb0\x72\xe5\x4c\x55\x1b\x29\xe2\xfd\xdc\x67\x30\xef\x38\x3f\x1b\x2e\xc8\xee\xb0\x16\xa5\x9f\xa1\x66\x30\x22\x5f\x84\x95\x9b\x73\x91\x69\x96\x6b\x5b\x37\xf9\xbf\x61\xec\x0a\x93\x46\xb3\x29\x14\x41\x04\x01\x92\x3a\x0f\x60\xe4\xcf\xb9\x21\xf2\x87\xb3\xdd\xa7\x4f\xf4\x75\x74\xfe\xf1\x82\x0b\x5f\x92\x27\x9d\xbd\x67\xce\x74\xf4\x9c\x60\x7f\xb8\x97\x4a\xec\xdf\xc3\x24\x04\x02\x04\x50\x27\x05\x3d\x7f\x91\x1a\x39\xb5\xa4\x8c\x50\x72\xa2\xb7\xf3\x8f\x5d\xfd\x17\xba\xcf\x74\x9c\xea\xfa\x02\x2b\xfe\x73\x4e\x25\xa1\x14\x4a\x56\xea\x22\x39\xd1\x3d\xf0\x47\xf6\xaf\x12\x41\x74\xa0\x2f\x9a\xc0\x54\xd8\x93\x32\x71\xeb\x31\xc9\xc0\x60\x47\x27\x14\xb1\xc8\x60\xf7\x99\xae\xde\xb3\xf0\x46\x85\x7c\xde\xd5\x71\x7a\xf0\xf3\x0b\x9d\x9f\x77\x75\xfe\xf1\xc2\xe0\x9f\xfa\x10\x81\xc5\x0f\x88\x20\xfd\xbd\x67\x07\xbb\x2e\xb8\x68\x2c\xa0\x52\x30\x7e\xe5\x0b\xfe\xb7\xdb\x63\xee\xdf\x20\xc1\xfd\x03\x3c\x75\x28\x18\x03\x3f\xf0\x57\x0f\xdd\x05\xbe\x49\xa9\x52\xb4\xd4\x32\x7e\x13\x33\x4a\xde\xc7\xbf\x43\x7e\x18\x3f\x41\x73\x67\x66\xbb\x96\x4b\xac\x4f\x18\xaa\xf5\xa0\xf1\xfe\x2a\x07\xf5\xc1\x41\xf9\xe4\x41\x64\x50\xc6\x57\x09\x4c\xe0\x99\x94\x04\x82\x10\x72\x82\x0e\xab\x1a\xf2\xe2\x4e\x4c\xb4\xc3\xb3\x2c\x71\x09\x08\xd3\x88\x81\x90\x51\x01\x09\xf1\x09\x58\x3f\x5b\x3d\x20\x50\x17\xf1\x56\x28\x5b\x66\x8a\xe3\x5e\xaa\xbe\x6e\x8c\x90\xcf\xe8\x97\x2e\xb8\x07\xc4\xf2\xe9\x18\x61\x62\x50\xb3\x52\xb4\xd0\xbe\x02\x09\xc8\xcb\x38\xec\x79\x8d\x01\x71\x52\x34\xe5\x1b\xcf\xa6\x30\xfc\xb7\xbe\x73\x9f\x2d\x49\x6e\x1a\x3f\x0f\x0d\x03\x36\x9d\xfd\xef\x1e\x7d\xdc\x9d\xb3\x9f\x4d\x3b\xdf\xae\x80\x17\x08\xf8\x72\x36\x9e\x60\x40\x1d\xdb\x81\x37\x67\xb9\x10\xd7\xd5\x0d\x45\x04\x2b\x43\xaa\x06\xcb\xb2\x9a\x84\x3a\xbb\x18\xa7\x32\xd0\x4c\xac\x3d\xf2\x89\x52\x1d\xf5\x7d\x5e\x99\x60\xd1\x84\x33\x7e\x7f\xd7\xff\x77\xb6\x6b\x60\x50\x88\xdf\x06\x06\xb6\xc8\xd6\xea\xef\x1a\xe8\xea\x3f\xd7\x75\xe2\x02\x5f\x1c\x7a\xfb\x07\xb3\xe5\x76\xf7\x77\x0d\xf4\xf5\xf6\x0c\x88\xf3\xd0\x81\x4e\x4a\x58\x7d\x2f\x60\x35\x09\xef\x89\x80\x44\xed\xb8\x08\x24\x1e\x74\x16\xa9\x2b\xbb\x5a\xc7\x82\xc2\x1e\x83\x92\x82\xd8\x41\x7f\x11\xcd\xd6\x4d\x67\x7b\x7a\xb2\xba\xfa\xfb\xa9\x52\xc8\x01\x7e\x1a\x47\xc4\xb4\x30\xbb\x4b\xd5\x86\x75\x82\xdc\xaa\x48\x27\x29\xbc\x43\xad\xbe\xe3\x17\x6c\xef\xd7\x9c\xa9\xaa\x7d\x6b\xde\xb9\xfe\xd4\xfe\xfa\x3a\x22\x9c\xd8\x8b\x2f\x1a\xd5\x1d\x0f\x3a\x53\xd8\xc9\x54\x61\x07\xf5\x02\x2d\x52\x8b\x12\xdd\x28\x8f\x2a\x1a\x2d\xf0\x04\xa9\x7f\xc9\xda\x20\x89\x28\xb4\x47\x4b\x65\x31\xf5\x4b\x7d\x65\xb5\xfe\xe0\x0a\xcc\xcd\xc7\xcc\x08\xdd\x78\x52\xff\xe1\x86\xe7\x45\xb1\x97\xee\x7e\xdc\x5d\x0d\x4a\x49\xa1\x04\x77\x4f\x9c\xd1\x0b\xb4\xc8\xb9\x8e\xdc\x3f\xdd\xc5\x59\x2b\x10\x3a\x46\x8d\x71\x6b\x14\x8c\x2e\xd3\xd4\xf3\xaa\x0f\x6e\xa2\x5a\xa2\x3e\x88\x68\x2b\xaf\x05\xf9\x11\x6a\x5b\x0b\xf6\xcc\x1b\x7b\xe6\xe7\xc6\xd4\x6d\x76\x7c\xda\x9a\xb4\xe7\xae\xe2\xa9\x10\x5b\x77\x28\x4d\x3a\x14\x85\x53\xe8\xc3\xfd\x1a\x31\x49\x45\x21\x46\x14\x04\xe3\x28\x73\xd7\x49\x6f\xb1\xd0\xec\xe7\xb0\x20\x14\xbf\x87\x5e\x6a\xfa\xe9\x5f\xce\x57\x8e\x1e\xfd\x9d\xf0\x62\xc3\x6b\xd1\xe6\x6c\xa2\x1a\xb5\x9d\x05\xdf\xd7\x12\xab\x86\x07\xed\x21\xd2\x26\x4d\xaf\x94\x2b\xc6\x48\x33\x24\x49\xf3\xd1\x04\xbb\xa5\xb3\xa8\x57\x0a\xe4\x24\x3b\x35\x1a\xe3\x89\x1f\xae\xb6\xb3\x10\x2e\x01\xc9\xf5\x81\xa3\x48\x33\x79\x52\xab\x8a\xbb\xc9\x5c\xcd\x3e\xba\x4f\xa1\x37\x66\x81\x35\xd7\x25\x57\x3b\x4f\xd5\x31\xb8\x8e\xf3\x09\x2c\xf3\xd4\xb0\x30\x42\x85\x73\x24\x0a\xe3\x9a\x16\x3c\x76\x27\xe7\xf6\x1b\x76\x4c\x8a\x21\xae\x14\x56\x8c\x41\x3e\x3c\x8e\xe1\x88\x49\xe8\x97\x34\x5f\xb1\xe0\x92\x58\x61\x0a\x28\xc0\x7d\xeb\xfa\x4d\x8a\x8a\x45\x4d\x0b\xec\x61\x5a\x08\x80\x2a\xc0\x19\xdf\xff\x3d\x18\x29\xf4\x99\x97\x57\xe3\xb3\xc4\x0f\xa9\x40\xdd\x62\xb6\xf9\x10\x02\x6d\x88\xb3\xdf\x46\xa8\x95\x6f\xcf\x06\x09\xd2\x4f\xf3\x15\xc3\x54\xc7\x68\x71\xdc\xbd\x76\xf0\x91\xb9\x91\x40\x46\x2d\x16\x38\x7d\xa2\x19\xf3\xd5\x81\x44\x6b\x48\x31\xa9\x77\x1a\x2b\x29\x00\xec\xca\xaf\x0b\xf1\x3c\x1b\xc9\xf9\x14\x7e\x8e\xa7\xfb\x93\xb7\xec\xbd\x5b\xce\xf2\x3b\x7b\x77\xb1\x79\xbc\x20\xf1\x16\xb2\x63\xe0\xfd\x84\xb3\xba\xe4\x63\xef\xdc\x9a\xb7\x37\x96\x90\x73\xf1\xe3\xee\x7c\x63\x72\x9e\xd9\x54\xd5\x77\xcd\xa9\xa3\xf6\xe2\xd7\x8d\xbf\xbe\x45\x9b\xa9\x85\x7e\xf1\x11\x59\xff\x8b\x75\x10\xe2\x9f\x1d\x6a\x37\xf1\xae\x89\x32\x1d\x88\x82\x79\xb8\x52\x69\x58\x0d\x3c\xd9\x1c\x5e\x5f\x2f\xf2\xc9\x8c\x11\xba\xd2\x0a\x38\xba\xb2\x6b\xca\xa3\x85\x99\x50\x4d\xc5\xe0\xe4\x24\xbc\x16\x19\x08\x37\xdb\x45\x82\xd0\xb9\x6e\x6f\x93\xb3\xfd\xa7\xa5\x31\x64\x6e\x6d\xc0\xac\x13\x00\x7f\x41\xa7\xaa\xaa\x89\x62\xf6\x79\xbf\x21\x6d\x8b\x8f\xed\xc2\x5d\xa9\xf0\x2d\xe5\x15\x6a\xa1\x3c\x3d\x79\xe7\x25\x66\xdf\xf9\x42\x99\xa5\xda\xe2\x97\x41\x77\x7f\xd2\x97\x89\x66\x76\xb2\xdd\xe1\x9c\x62\x04\x77\xa1\x28\xda\x07\x3b\xc1\xea\xd1\xf8\xf8\xdf\xf0\x61\xc4\x36\x17\xf6\x0f\xd7\xee\x33\xd9\x93\x4e\x0c\xa8\x39\x6b\x52\x23\xf9\xd2\xaf\xb6\xf3\xb4\xa9\x0c\x69\x6c\xff\x50\xdb\xd9\xab\xed\x2c\xc4\x44\xd8\xff\x06\x07\x61\xb4\xea\x88\x97\x20\xdc\x04\x6f\x44\x05\x3f\x46\xa8\xed\xc2\xeb\x45\xaf\xdb\x8c\x10\x83\x35\xf6\x15\xc4\xb6\x4f\x4c\xb4\x63\x86\x32\x57\xde\xef\x2f\x7c\xdc\x6b\x8c\x84\x7b\x0c\x1f\x83\xf2\x87\xde\x67\xf5\xe7\x3b\xfb\xf7\x9f\xf8\xdd\x16\x50\x21\xd0\x71\x61\x0d\x6a\x5b\x1b\x38\x8e\x9a\x9a\xc2\x2c\x8d\x08\x27\xf7\x27\xef\xa8\x5f\xad\x3f\x0e\xbf\xdd\xdc\x73\x89\xa4\xdd\x87\x34\x99\x98\x46\x5a\xaa\xeb\x73\xde\x0b\x7e\x81\x4f\x37\x8d\x7c\xa7\x2b\xb4\x35\x6b\xdf\x24\xb5\x24\x6b\x25\x70\xed\xab\x04\x40\xa0\x04\x4b\xe6\xd5\x9b\xf6\xd7\x7b\xf6\xd2\xcd\x24\xb8\x28\x4f\x62\x2a\x33\xc2\x13\x9b\x16\x54\xa3\x49\x7c\x02\x67\x4b\xa4\x02\x59\xa0\x9a\x2f\x5a\x72\x51\xe7\xc9\x93\x45\x09\xb9\x92\x64\xfb\xb6\x27\x28\xf9\x02\xd8\x17\x27\xe6\xc0\xf1\xf5\x92\x64\x31\x81\x20\xee\xc9\x09\x8f\x4e\xef\xc0\xfb\xb7\x9b\x6a\xf6\xe6\x6c\xfa\xa9\xc6\x09\x7e\x84\xb3\xcd\xeb\x8e\xda\xd6\x76\xa8\x65\xf2\x99\xc0\xfa\xc6\x47\xb9\xc6\x63\xf9\x1f\xdc\xbf\xa3\x5d\x15\xf9\x21\x91\xde\x64\x73\x36\x51\x76\x8c\xda\x31\xb5\xc8\xf5\x6f\xfa\x6e\xd1\x6f\xfb\x69\x3f\xd8\x41\xba\x3e\xbc\x64\xf0\x3e\x4a\xd9\x8a\x56\x9b\xd0\xbc\xf0\x84\xeb\x15\x36\x27\x65\x5b\x9a\xae\x10\xa2\x77\x4b\x7f\x6b\x4b\xb1\x85\x79\x27\x70\x33\xc7\xf5\x55\x3a\x3f\xb4\xdf\x6b\x6e\x7b\x7b\x8b\x85\x60\xbd\x7e\xa7\x05\x1e\xc6\x75\xd9\xaf\xd1\x37\xbc\x17\xfc\x1e\x8a\x28\x1b\xd7\x0d\xfe\xcf\x92\x4e\x28\xeb\xb2\xc8\x52\x3f\xb2\x50\x12\x5c\xda\x8f\x57\xf4\x5e\xa0\xfe\xc0\xc0\xe7\x18\x78\xe9\x45\x8a\xc9\xf7\x37\xbc\xb0\xe7\xe1\xf7\x6e\xf0\xb0\x47\x76\xc2\x71\x3f\x06\x06\x3e\xcf\x54\x3b\x32\x15\x03\xd8\x47\x04\x8a\x9d\x07\xf4\x42\x96\xab\x74\x1f\x0f\xe9\xb5\xb2\x1e\xc6\x52\x7f\x67\xdf\x5f\xe7\x08\xc9\x5b\x9c\xbe\xb8\xb6\x3d\x2b\x57\x13\xef\x06\x84\x71\x46\x5e\x67\x0b\x3d\x49\x3c\x06\x0d\xc8\x8c\x20\x96\x87\x33\x39\x9f\xd7\x06\xbb\xfb\x8e\x93\xee\x61\x32\xae\x57\x20\xd8\x7b\x88\x8e\xaa\x5a\x81\x28\x64\x58\x35\xe8\x25\x38\x70\x83\x33\x05\x10\x3f\x3d\x12\x94\xb2\xa1\x7f\x39\xde\x86\x19\x6d\x18\x46\x37\x6a\x59\x65\xf3\x02\x3c\x8f\xcf\xda\x53\x4d\x92\xd7\x0d\x83\xe6\xad\xe2\x38\x82\xb6\x76\x15\x4d\xda\xc6\x13\x37\x20\x32\x54\xa3\xd6\x25\xdd\xb8\x18\x60\x54\x10\x4d\x86\xff\xc2\x0d\x92\x7e\xa0\xb2\x49\x2b\x05\x3d\x67\x59\xe3\x30\x0b\x12\xe3\xc4\x7f\x9a\xae\xed\xbe\x20\xec\x75\xf4\xc8\x4a\xa5\xd3\x02\x31\x2d\xc5\xca\x88\x65\xdc\x8f\x3d\x65\x92\x81\xde\xb3\xfd\x9d\x5d\xb9\x8e\xbe\x3e\x32\xd8\xd1\x7f\xaa\x6b\x10\xfe\xa9\x98\x1e\x2e\xac\xd0\x39\x0f\xe8\x35\x82\xf2\x98\xa7\x99\x80\x14\xeb\xe9\xc0\x6c\x41\xb4\x2f\xfd\x6a\xa5\xb5\x86\x11\xe5\xd9\x52\x94\xb2\x42\x8e\xca\x0f\xb1\xa6\xa4\x4f\xc2\x1a\x80\x28\xfc\x3c\x28\x54\x12\x11\xda\xef\xf2\x5c\x42\xc2\x27\xdb\x3f\x3a\xfa\xba\x01\x02\xa8\x40\xf4\x8a\xf5\xcf\x70\xc3\x0d\xf6\x2e\xd2\x47\xe3\x35\x77\xb6\x4c\xfd\x7e\x6a\x5a\xca\x48\xb2\x31\xef\x2c\x6f\x86\x10\xb4\x52\x58\xf5\x6e\x46\xee\xdf\xcf\xad\x11\x5b\xeb\xb3\xd8\x02\xf2\x76\x87\x1a\x25\xd9\xf6\x30\x1b\x3f\x45\x07\x63\xc2\x7c\xca\xae\x35\x20\x66\x2d\xce\xdf\x75\xf9\x32\xc4\xe1\x06\xb6\xa1\x50\xef\x1f\x8a\x65\x29\x52\x98\x44\x61\x7d\x9b\x3d\x64\x62\xd3\x92\x63\x17\x2b\x1a\x51\xb5\x82\x3a\xa6\x16\x2a\x4a\xd1\x8b\xe4\x04\x9a\x43\x70\x11\xb3\x15\xa9\x22\xc4\xc5\xfc\x7e\xb2\xfe\xfa\x3b\xf4\xc8\xa3\xc7\xa9\x7e\xfd\x8d\x33\x39\x05\x38\xf1\x57\x6a\x5b\x2f\x30\x1c\x13\x73\x81\x12\x15\x29\x90\x82\x6a\x96\x8b\x0a\xae\xef\xbd\x1d\x1e\xcb\xa5\x17\xf5\xee\xd1\x6a\x53\x53\x16\x45\x8c\x5a\xbd\x7b\xe3\xdc\xfb\xa5\xfe\x84\xf3\xfd\xd6\x76\x1f\x34\xaa\x8f\xea\x0f\xae\x70\xc1\x32\x3e\x4c\xa1\x4e\x23\xea\x18\xd5\xb8\x57\x6c\xa4\xa2\x16\xda\x09\xe9\x28\x16\x39\xb7\xc6\x28\x55\x8a\x80\x99\x54\xe0\x9d\xc6\x96\x8d\x72\xc5\x8f\xd9\x07\xfa\x26\x13\x02\x63\x0d\x6a\x9a\x92\xb4\x81\x70\x03\xea\x3b\xf7\xed\x97\x0f\x22\xa1\xd7\xe4\xd4\xd9\xee\x13\x10\xd8\xfa\x34\x4a\xaa\x8a\xbc\x1b\xc8\x63\x8c\x81\xdb\xd7\xdf\xd8\xb3\x7f\xb5\x6f\xcd\xe3\xd7\x69\xfc\xf2\x8d\x7d\x75\x7b\xff\x2b\xb0\x48\x9f\x4d\x39\x1b\xdf\x61\x3d\xc2\x28\xd8\x84\xfe\xd0\x8d\x91\xb8\xfe\x88\xb4\x1e\x82\x3f\x5a\x6e\xbd\x17\x6f\x15\x68\xb7\xf7\x2c\xd4\xe2\x43\x6e\x1c\x3f\x7a\xa5\x68\xa0\x77\x89\xd4\x72\x23\xbd\x04\xd1\x40\x23\xfd\xa4\xd1\x4f\xdf\xc8\xdc\x45\x3a\xfe\x2b\x36\x14\xd1\x58\xff\x16\xcd\x65\x1b\x4f\x9a\x86\xc2\x26\x79\x80\x41\xeb\x06\xdc\x05\x07\xad\xfb\xec\x93\x36\xd0\x52\xf2\x17\xbd\x06\x8a\xdb\xe7\xd2\xd8\xb7\xba\x24\x01\x0f\x7d\x64\x31\x72\x9f\x1d\x4e\xfb\xbc\x1c\x99\xc0\xc6\x64\x06\x77\x26\xf6\x23\x55\xf2\x98\x0f\x9b\xc3\x4c\x36\x7c\x57\x1e\x3b\x5b\x5d\x64\xdb\xd3\x62\xd5\x79\x7c\xb5\xf1\x72\x13\xf7\x29\x76\x0e\x87\x15\x92\xb7\x36\xb0\x79\xb1\x06\x41\x6e\x4c\x82\xbe\x71\x68\x10\x2d\x63\xbb\xa0\x1a\xb1\xd0\x2d\x4c\x1f\x49\xc2\x8d\x54\x9f\x96\xc1\x5b\x50\x1f\x09\x36\x4b\x16\xad\x00\x06\xc2\xe3\xf3\xc7\x75\x25\x0c\xf6\x1d\x8d\x56\xf3\xa6\xa4\x54\xbd\xda\xd6\x02\xce\x31\x2f\x12\x0d\xc7\xa0\x07\x43\x0b\x3e\xa5\x2b\xf6\xdc\x7d\xa9\x92\x70\x81\xe4\x8d\x30\xa6\x22\x1b\x60\x23\xb4\xe0\x0e\x2f\xf3\xd0\xee\x3e\x51\x6f\xae\xe5\xdb\x57\xb1\x23\x52\x62\xf1\xc6\xa8\x3b\x31\xd1\x7e\x12\xb5\x3c\x59\x54\x46\x0e\xf1\x9a\x16\x55\x6d\x96\x9f\x49\xcf\xd6\xe6\xc8\x21\xb7\x41\x3e\xab\x5a\x6d\x46\xf2\xd4\x3a\xe4\x66\xa4\x99\x8c\xe2\xc6\xc0\xe1\x19\xb6\x10\xe4\x32\x6d\x15\x22\xb1\xdf\xf5\x2a\x7e\xae\x9b\x16\x3f\xa2\x4d\x4c\xb4\x9f\x00\xa9\xfc\x78\x82\xc9\x67\xa6\x45\xf1\x54\x22\xb8\x33\xf1\x5c\x8d\xe9\x25\xb5\xaa\xd1\x6f\x3c\x1a\x9f\xc3\xd3\x4d\x2c\x53\xae\x25\xfc\xe3\xf2\x65\x72\x49\xc1\x38\xfb\x21\xc8\xb4\xb3\x9a\x31\x37\x62\x02\x41\x2f\x5f\x16\x42\x3a\x84\x53\x72\x01\x82\xe4\x45\x7d\xe7\x6b\xb6\x75\x27\x62\xe7\x43\x1e\x61\x82\xda\xe8\x60\x4f\x95\x01\x12\x71\x22\x27\x65\x7d\x44\xaa\x08\xa4\xfb\x67\xe9\x1a\xfe\x91\xd2\xab\x94\xb6\x73\x50\xb0\xbc\x83\x38\xb1\x87\xd7\xfd\xc6\x29\xf6\xe7\xe5\xcb\x3e\xcc\x63\x12\x84\x4b\x90\xec\xa3\x49\x8c\xa4\x66\xf9\x37\x90\x15\xe4\xa6\xa1\x6a\xba\x2b\xc2\x25\xb5\x58\x04\x4e\x4c\xc0\x54\xac\x18\x70\xf1\x5e\x1c\x77\x33\x8d\x7d\x52\xb9\x20\x97\x89\x30\xba\x6c\xc6\x5e\x59\xf7\x78\xe3\x82\xad\xab\x6d\x5d\xe7\x44\x49\x1b\x4f\xec\xd5\xd5\x04\x70\x21\xd4\x35\xe3\x12\x25\x41\x9d\x92\x9a\x03\x15\x8d\x28\x44\xd7\x68\x4e\x1f\x1e\x46\xca\x3a\xcf\xf3\x90\x51\x01\xdc\xe1\xba\x02\x5b\xc3\x39\x77\x6b\x80\x6f\x2a\x6c\x51\xec\x5e\x25\xf2\x25\x0c\x74\x75\x9e\xed\xef\x1e\xfc\x13\x39\xd5\xdf\x7b\xb6\x4f\xe4\x91\x90\x63\xf2\x87\x65\x08\xb3\x63\x5c\x21\x82\x6c\x93\x81\xae\x2e\xd2\x71\x7a\xa0\x57\x58\x7e\x71\xba\xf1\x7c\x4a\x58\xb8\xff\x5c\x77\xa7\x88\xe4\x51\xc6\x85\xc1\x4b\x4a\xe1\xca\xf9\x31\x53\x8e\xec\x1d\x12\x24\x6a\x44\x44\x92\xbc\x35\xa2\x74\x9f\x14\xcd\x11\x26\xfc\x60\x59\x79\xbd\x2d\x52\x5f\x0e\xf4\x75\x08\xbf\x80\xa4\x84\x1c\x28\x1e\xcf\xbf\x09\x3d\xef\x8b\x11\x22\xf4\x86\xe5\x88\xda\x8f\x82\xe4\x60\xf1\x78\x5a\x90\x83\xc5\xa3\xa0\x13\x5d\xe7\xba\x4e\xf7\xf6\x89\x01\xe3\x51\xd4\xee\xa4\xbd\xf8\xb5\x30\x2b\x1c\x45\x25\x20\xcf\xa7\xee\x25\x21\xf6\xbc\x24\xa4\x08\x0b\xca\x7b\x56\xd4\xa1\x03\x9f\xf3\x4c\xee\x96\x3c\xaf\x78\xf8\x06\x57\x6e\xe3\xfd\xb7\xce\xc2\xd3\x08\xb7\x61\xd0\xfd\x2a\x52\xe0\x34\xe9\x0c\xe4\x41\x80\x5f\x91\x04\xe9\x74\xb9\x8b\x11\x08\x2a\xf2\xc3\x10\x8f\x9c\xcb\x99\x17\xd5\x72\xce\x34\x8b\x39\xc8\xa6\x00\x7d\x80\xa9\x82\x69\xae\x6a\x15\xea\xe1\xdd\xab\x1a\x1c\x43\x69\x88\x9f\x33\xdb\x1c\x18\xec\xe8\x14\xd1\x33\x08\x4a\x9c\xed\xec\xec\xea\x3a\xd1\x75\x22\x5b\xa9\xbc\x52\xfc\xfb\xf2\xf8\x38\xd7\xfe\x62\xff\x74\xe7\xd0\x02\xaf\x84\xe7\x96\x01\xf7\xa2\x40\xbe\x6d\xfa\xfb\x93\x68\xab\x0c\x03\x53\x4e\x4c\xb4\xbb\x57\x10\x17\x46\xb8\xad\x96\x2a\xf3\xd5\xab\x28\x56\x44\x42\x06\x6c\x0a\x25\x26\x26\xda\xc1\x91\x7e\xa1\x94\xc0\x2e\x2d\x57\x24\x46\x8c\x40\x23\x9c\x39\xa3\xb4\x58\x26\x90\xa2\x96\xe7\xd8\x71\x98\xaf\x06\x13\x87\x19\xe3\x44\x19\x42\x9c\x02\x0f\x97\x26\x01\x63\x4e\x54\x5f\x91\xe6\x3d\x1e\x28\xf2\x99\x6e\x10\xb8\x8d\x24\x54\x63\x26\x25\x33\xf5\x2f\xaa\xe5\x7f\x94\xf0\x96\x38\x37\xfe\xe2\xb2\x43\xcd\x39\x73\xcb\xce\xfc\x35\xd2\x05\x65\xf7\x6f\xbf\x6c\xbc\xfd\xb9\xf1\xfe\xea\xc7\xdd\x6b\xe2\x51\x80\xd5\xe3\xac\x69\xb1\x76\xce\x32\xd8\x4a\xed\xc0\xc8\x0e\x1f\xa6\x0d\xff\x8f\xe4\xf5\x02\x3d\x4e\x8e\x1d\x3d\xfa\xdb\x36\x52\x72\xc9\xc5\x39\xfc\xa3\x49\xad\x60\xe6\xc8\x10\xcd\x2b\x15\x44\x1c\xf3\x70\xfa\xcb\x01\x3c\x72\x71\x90\xa7\x47\xcc\xbe\x7f\xfb\x7e\xa3\x5a\xfd\xb8\x3b\x8f\xff\xa8\xed\x7c\x5f\x7f\x3c\x85\xd5\x7f\xdc\x9d\x77\x09\xcb\x9d\xbb\x8f\x9d\x9f\xef\x70\x62\xdd\x40\xf6\xc9\xc7\xdd\x79\xfb\xe1\xe3\xda\xd6\x36\x46\x70\xb3\xc1\xfe\xd3\xb7\x00\xc8\xf4\x54\x16\x3d\x1a\x6e\x36\xbf\xb9\xc2\x76\xff\xfe\xe8\xef\x9a\x3a\x82\x3d\xf2\x7a\xe2\x4f\x3c\x72\x04\x50\xab\x2a\xd6\xa8\x6e\xa8\xff\x89\xc0\x51\x65\x8e\x3a\x0a\x37\x4a\x5e\x50\x85\x92\x97\x44\x69\x34\x77\x03\x77\x61\xb2\x3e\xf8\xfd\xd1\xdf\xc5\xf5\x0b\x3c\xf5\x3a\x66\x7a\x9d\xf5\xcd\xa3\xaf\x10\x90\xd4\x87\x48\x93\x80\xad\xcb\x5b\x7f\x9c\x74\x60\xca\x34\x3b\x86\x51\x0d\xa8\x57\xa1\xd1\x05\x1d\xda\x0c\x5c\x54\x65\x43\x1d\x53\x8b\x94\x23\xab\x60\x8a\x1e\xc5\xa3\x5b\xc2\x24\x4c\x6a\xf1\x71\x82\x69\xd5\xf6\xdb\x57\xce\x8d\x5b\xf5\x9d\x47\x1f\x26\xa7\x23\x8d\x64\xa7\x34\x40\x7f\x14\x9e\x80\x25\x2d\xc4\x60\xa0\x01\x78\x84\x50\x44\xe1\xcf\x8d\xbf\x77\xf4\x75\xc3\xd6\xee\xbe\x51\x0a\x90\xec\x77\x19\x46\x28\xfb\xb5\x95\x86\x36\x6b\xd1\xf4\xa5\xe3\x14\x09\x7c\xf8\x38\x45\x84\x7d\xa1\xe6\x29\x01\xbf\xf3\x20\x38\xb4\x27\x26\xda\x4f\x2b\x43\xb4\x88\xab\xb2\x8b\x32\x94\x9a\xef\x02\x5b\xd6\x78\xf9\xa4\x51\x9d\x42\x47\xb6\x58\x62\x32\x0f\x86\xab\xdf\x1f\xbc\x48\xd9\x4c\xe4\x1b\xf1\x41\xaf\xa9\x59\x38\xdc\xda\xdd\xab\x15\x77\x15\x83\x15\xcd\xa5\x41\x93\x7f\x61\x1e\xad\x77\xd3\xb9\x57\xc5\x55\xc8\xa3\x7d\x93\x57\x99\x60\xac\xa6\x2b\x4c\x9a\xf3\x91\x53\x5f\xf0\xc8\xf3\x9a\xd3\xd7\x1f\x4f\x7b\x99\xe5\xf3\x25\x51\x68\xa6\xff\x8e\xd2\x9b\xca\xc4\xae\x49\x27\xfb\x78\x53\xb8\x70\x8a\xc6\xc5\x14\x92\x56\x26\xa2\x31\x8d\xc1\x89\x3e\xf0\x55\x24\x07\xd0\x3c\x2c\x36\xd3\x0c\x9f\xcb\x4d\x85\x6f\xe9\x7b\x78\x79\xf4\xe1\x3e\x69\x0e\xf2\xb4\x8c\x71\x70\x99\xe8\x3c\x11\x5f\x21\x63\xc7\x9a\xb2\xf1\xdb\xe0\xf5\x52\xc5\x44\x2b\x87\x6d\xe2\xb9\x32\xb8\xdd\x12\x96\x1e\xc8\xaf\xf7\x9a\x7c\x5e\x73\x16\x97\xea\x4f\xb6\x8f\x13\x84\xe4\x01\x04\x85\x47\x8d\xea\x1d\xcc\xc9\x27\xe7\x8e\x91\x60\x39\x66\xc0\xbc\x9f\xd9\x5f\xdb\x41\xdb\x86\x55\x99\x80\x5d\xdc\xd4\xfa\x8c\xf3\x5d\xc6\x0a\x3b\x20\x8a\xf4\xcf\x32\x99\x9b\x4b\xa7\x1e\x0f\xc1\x49\x92\x7e\x8f\x15\x97\x92\xd5\x25\x8c\x2a\x93\xdd\x86\xb9\x94\xb9\xaa\x66\xd1\x11\x03\xca\x64\xbb\x08\x76\x25\x24\xdc\xa7\x09\xcd\x75\x2b\x9a\x74\x8c\x3e\x6c\x69\x5a\xf5\xd6\x76\xf0\x90\xcb\x8d\xe8\xc4\x74\x64\x56\x97\x0b\x52\x55\xd4\xf3\x4a\x91\xb6\xb3\x39\x75\xba\xb7\xb3\xe3\x74\x17\xdb\x26\x8f\x74\x9e\xee\xea\xe8\x3f\xd2\xc6\x0e\x2c\x63\xaa\x5e\x31\xf9\x6b\x68\x38\x16\xa9\x25\x8e\xe7\xe0\x3a\x00\x1e\x55\xa3\xba\xd1\x58\x9f\x44\x7d\x3e\x4c\x4e\xe3\xac\x71\xab\x01\x7c\x62\xac\xc7\x45\xb2\x02\xf8\x9a\x99\x39\xfb\xda\xcd\xfa\x83\x2b\x91\xc2\xe2\x96\x60\x78\xdc\x05\x88\xbe\xbe\x60\x8d\x97\x79\x90\x21\x33\x5e\x11\xe8\xfc\x08\xd0\xf0\x11\xdd\x20\x47\x34\x5d\xa3\x22\x5a\x38\x7b\x73\x36\x46\x16\x4e\x59\xce\xbd\xca\x54\x46\x61\xce\xdc\xb2\x2b\x4d\xa8\x98\x6e\x90\x31\x95\x5e\xf2\x01\xc0\x55\x52\x31\x8a\xd2\x7e\x63\xa7\xbc\xd5\xa7\xf5\x95\x1b\x98\xa8\x0e\x77\x45\x67\xfb\x4f\xa7\xa8\x63\xd4\xa7\x45\x86\xe3\x26\xdb\x3c\x64\x50\x5e\x71\xd5\x45\x98\xff\xc5\xb5\x5a\x7a\xda\x4e\x15\xca\xe0\x58\x8d\xc1\x94\x7e\xc8\x9e\xe9\xe2\x7f\xa6\x4b\x55\xf3\x33\xfb\xfd\x2f\xd4\x24\x44\xaa\x42\x68\xc2\x1d\x09\x26\x8c\xc3\x6d\x04\x7f\x72\x4e\x29\x56\x38\x52\xa9\xf1\x77\x74\x2f\xc6\x4e\xc7\x87\x96\x8d\x68\x6f\xce\x86\x92\xe7\x23\x9d\x11\x98\x02\xe1\x3e\x49\xec\xe2\xff\x88\x43\x7e\xe3\xa8\x5d\x31\x69\x51\x87\x90\x0f\x1d\xdb\x2d\xbc\x05\xb1\x68\x72\x89\x6d\xf8\x15\x42\x60\xb8\x99\xd0\x42\x08\x8c\xab\xe4\xdf\x38\xfe\x05\x1b\xd0\x62\xfc\x8b\xac\x0d\xbf\x62\xf0\x8b\xbb\x7d\x1d\x20\xf8\x65\x60\x94\x19\xa6\x0a\x5c\xa4\x28\x16\xf5\x1d\xde\xe8\x07\x10\x5f\x9c\xd5\xb6\x78\x1a\xbf\x3d\xf3\x53\x6d\xfb\x87\xda\xd6\x37\xf5\xdb\xeb\xf6\xaa\x00\xc8\x89\x55\x83\x16\x32\x88\x8f\xc6\xb2\x70\xcc\xd7\x4f\x36\xc3\xe2\x10\x07\x08\x2a\x6e\xaf\xae\x46\xd5\x91\x74\x96\x7e\xc9\x47\xab\x0d\x07\xea\x89\x34\xc3\xe0\x7b\x04\xcb\x4d\x70\x37\x83\xf4\x62\x31\xc2\xb9\x9e\x68\x57\xf1\x2a\x22\x24\x87\x10\x47\x97\xc2\xba\x62\x95\x8e\xd2\x62\x82\xf0\xad\x97\xf6\xf5\xbf\x48\x24\xa8\xda\xb0\x6e\x94\xd0\x0d\x06\x0a\xf3\xa8\xda\xcf\x14\x3f\xbc\x96\x0d\x32\x9a\x1b\xaa\xa8\x45\x0b\x91\xdb\x91\xf0\xbe\x8d\xa8\x9a\x8b\x58\xca\x46\x5c\x99\x32\x7b\x96\xad\x62\xfc\x67\x64\x9d\x55\x34\xb6\x3a\x00\x3c\xac\x10\x98\x18\x75\x75\x43\x6f\x11\x31\xf1\xe3\xee\x1c\x3e\x71\xee\x55\x6b\x5b\x93\xf5\xe7\x37\xed\xc5\x6a\x6d\xe7\x29\xce\xfc\x48\xaf\xed\x7f\x77\xc5\xf9\xf6\x8a\xbd\xb3\xcd\x19\xbf\x80\xc1\x81\x19\x7c\xf3\x33\xce\x8d\x1f\x83\xb4\x0e\x42\xdc\x52\xe8\x0e\x17\xe2\x51\xaa\x68\x10\xd7\x31\x41\x56\xc5\xa4\x86\x49\x86\xc6\xe1\xb6\x3b\x85\x50\xbc\xff\xf9\xb8\x3b\xe7\xcc\x5f\x73\x2f\xa8\x65\xfa\x02\x72\x5f\x81\x5a\x8a\x5a\xe4\x03\x2e\x48\xf5\x13\x3d\xa1\xca\x15\x40\x30\xfc\xc0\x11\xcf\xa3\xfb\x69\x54\x9f\xd5\x77\x66\x13\x1b\x8c\x3b\x70\x62\xf7\xe1\xd6\x98\x28\xcd\xa0\x79\xe0\x1b\x2d\x97\x09\x1d\x93\xa4\xff\xa1\x50\x67\x65\xb2\xf1\xfe\xeb\x88\xe5\x51\xdb\xbe\x51\xdb\x79\x23\xa9\xa3\xe9\xe2\x23\x51\xf9\xd0\x95\x5d\x52\x13\xcc\xc0\x55\x4c\x5a\xc9\x70\x29\x92\x2c\x19\x43\xfb\x13\x47\x2a\x26\x2b\xa7\x93\x96\xf2\xf3\xa1\xcc\x94\x1f\x11\x25\x67\x98\x05\x18\x38\x90\x71\x16\xc0\xb1\x84\x1d\xa3\xf4\x61\x37\x8d\x09\xb3\x64\xb9\x43\x25\x98\x6e\x2d\xa8\x3e\xbb\x1c\xa1\x3a\x6c\x09\xf4\x32\xbd\xe0\x3c\x8b\x19\x76\x7f\x27\xd6\x7c\x70\xb9\x49\x69\xd0\xcb\x93\xf6\x90\xa4\x0e\x7c\xe7\xd2\x0d\x98\xf5\x4b\x73\x92\xd9\xe1\x1c\x75\x0e\x21\x1e\xf9\x90\xbb\x25\x36\x75\x4d\xdc\x3f\x6a\xe6\x7b\xfc\x8b\x6a\x99\x43\x6c\xbb\x48\x27\xe0\x51\xb5\x74\x19\xda\x1b\xfa\x73\x3d\x77\xa7\x8b\xb3\x9d\x84\xf9\x06\x95\x8d\xea\xa6\x05\x4b\x99\x1f\x83\x92\x50\xcb\x8e\xb3\xb2\x8d\x0b\x1a\x72\xcc\x4a\x84\x87\xc8\x6b\xb9\x41\x1e\x0c\x61\x69\x27\x3d\xba\xc5\xf6\x04\xbd\x54\xa2\x5a\x81\x16\xfe\x6f\x69\xdd\x41\x30\xbe\x07\x57\xb0\x76\x67\xe3\xe9\xfe\x8b\x27\x9c\x0b\x6e\x67\xbb\xf1\xf2\x25\x42\x38\x7c\xdc\x15\x29\x26\xb9\xd9\x90\xde\x5d\xc0\x38\x3d\x04\x66\x74\x14\x74\x28\x08\xf6\xc1\x55\xbb\x25\x1c\xfb\x80\x2e\xf2\xc8\x2b\xac\x43\x78\x01\x09\x62\x5a\x0d\xd4\xc7\xd2\x68\x57\x62\xcc\x96\x99\x8d\xfc\xae\x45\xaa\xbb\x81\xd8\x95\x27\x7d\xbf\x47\x8b\xa6\xe9\xeb\x84\xf8\x36\x61\xff\x22\xe5\xaa\x82\xec\xf2\x6c\x75\x05\x93\x1d\x50\x71\x55\x5d\x83\x2b\xd8\xb2\xcb\x76\xec\xc5\x3f\xb7\x79\x94\x0d\xf8\xba\x6a\x7a\x50\xfd\xaa\xe6\xed\x66\x97\x74\x03\x30\x52\x3d\x6a\x22\xe1\x52\x8b\x41\xd2\xe0\x15\x42\xfc\xfe\x08\x13\xaf\x77\x4f\xeb\xac\xbc\xc0\x97\xf1\x39\xbf\xa3\x5d\x59\xc7\x5d\xc5\x7e\xfb\x94\x19\xee\x2e\xb7\x11\x17\x85\xbc\x11\x20\x50\x7c\x65\x0b\x87\x17\x5c\x0c\x7f\xdd\xc3\x4c\xe3\xd9\x14\xae\x2b\x6c\x6f\x84\x03\xcc\xaf\x7e\x92\x61\x6d\xcd\x38\xb1\xf8\xdd\x47\x0b\xd1\xdd\x92\x5b\x0c\xe1\x20\x4d\x06\x39\x48\x0b\x6f\xc0\x45\x95\xcb\x00\x75\xa1\x57\xac\xf3\x1a\x77\xdf\x75\x04\x02\x3c\xc1\x29\x37\x84\xe9\x98\x34\x48\x35\x66\xa8\x23\xa3\x16\x29\xeb\x86\xd5\x0e\x1e\x7c\xaa\x14\xc0\xf8\x53\x8c\x02\xc9\xeb\x05\xf7\xaa\x88\xbd\xd0\x06\x43\x89\xfd\xf5\xff\xf4\xf5\xf6\x0f\xc6\x5e\x13\x89\x89\x12\xa3\xad\x69\xbc\x99\x71\xee\xbe\x61\xca\x7a\xde\xbe\x60\x1c\x29\x78\xf4\x98\xb5\xf2\xcb\x33\x7b\xe9\x47\x67\xe3\xfb\xfa\xda\x4b\x8f\x12\x0e\xb7\xb0\xc6\xb3\x29\xbb\xfa\x0e\x9f\xd4\xd7\x7e\xac\xef\x2e\xd7\x1f\x4f\x21\x72\x30\x1b\x67\x88\x4e\x84\xaa\x06\x3f\x8b\x6c\xc6\x18\x16\xa9\x68\x3e\x45\xa0\xd7\x95\xac\xe1\x6c\x3b\xeb\xc4\xc8\x1c\xf7\x86\xba\xa4\x1b\x34\x78\x81\x20\x6d\x3c\x72\x04\x06\x1b\xcc\x55\x8c\x08\xb6\x17\xab\x8d\x85\xb7\xf6\xe2\xb2\xf3\xf0\xb5\xfd\xe4\x81\xf4\x84\xc1\x34\xa6\x05\xf4\xde\xe1\xbf\xc5\xa1\x85\x6f\x5f\xa1\x1e\x91\xb7\xc5\x82\xff\xbe\x62\x53\x51\xf9\x5f\x21\x36\x95\x35\xbd\x52\x76\x83\xb0\xda\xd0\x95\xad\x13\xad\x52\x2c\x62\xdc\x24\x7f\xe0\x7a\xf6\x10\xb0\x84\xbf\x2e\x3a\x5c\x71\xa1\x18\x74\xc5\xc6\xa8\x77\xcb\x0f\x72\xed\xc5\xea\xfe\xd5\x9b\xf8\x04\x7d\x7a\x5c\x2c\x16\x10\x6a\x2a\x26\x55\x04\x6b\x5b\x5c\xae\x62\xba\xc3\xc0\x12\x07\x5f\xa0\x90\xd0\x8b\x02\x81\x7a\x19\xae\xff\x7c\x62\x69\x9f\x47\x9f\x6d\x1c\x98\xd1\x6e\x40\x48\x40\x89\x93\xc6\x21\xf3\x5c\x49\x19\x27\x18\x00\x59\xd0\x2f\x69\x6c\x05\xcb\x68\x20\x42\xd5\xd2\x75\x74\x6a\xc5\xd9\xf8\x2e\xcd\x3a\xaa\x97\xcb\x7f\x67\x43\x1e\x54\xff\x15\x86\x3c\xec\xf0\x39\x1e\x73\x56\x10\xee\x73\xb0\xe9\x7a\xa1\x59\xfb\x6b\xef\x44\xdb\xdb\x60\xc7\xc0\x1f\x2f\x74\x67\x8b\x86\xe7\x6c\x62\x19\xcb\xf4\x89\xe9\x7b\xf8\x2a\x2b\x62\x96\xc1\xb2\x84\x60\x9e\x81\x4b\xcc\x86\x36\x5f\x8e\x1d\x20\x73\x6e\xec\x5a\xce\x85\x10\x01\xba\x74\xe5\x22\x5e\xe7\x78\x3f\xbb\x97\x5c\x66\x80\x8b\xd7\xd2\x49\xe7\x49\x30\x92\xe4\xca\x11\xd0\xc0\xdd\x07\xd2\x29\xc1\x4c\x27\x4e\x56\xe7\xc7\xc9\xf1\xbb\xb3\xc5\x6a\xed\x97\x87\xac\xea\xd0\x25\x20\xbc\x2d\xee\x05\xd2\xc1\x49\x48\x39\xf6\x92\x6a\xba\xe8\x6d\x05\x1f\xb8\x07\x48\x00\x81\xca\x8a\x75\x80\x32\x3c\x4c\xf3\xc2\x20\x96\x03\x0a\x95\x28\x8a\x84\x5a\xec\x98\xcf\x31\x24\xd8\xde\xf9\x07\xa0\x0d\xe5\x73\xc0\xa4\x56\x4e\x37\x46\x72\xec\x9d\x23\x70\xcd\x12\xfb\x0a\xcc\x5e\x7c\x29\xdb\x82\x03\x7a\x74\x72\x4a\x44\x48\xae\x84\x28\xe6\x72\xb9\x38\x8e\x71\xbc\x9c\x1e\xd1\xf5\x07\x06\x4e\x64\x26\xa9\x68\x96\x0a\x50\x09\xe3\x10\x54\xc5\xfb\x46\x46\x3f\x8c\xa3\x04\x49\x12\xd1\x5a\x8e\x5c\xbb\x60\x4e\x66\x10\x60\xaa\xf6\xee\x86\xbd\xb4\xe0\x00\x62\x12\xbe\x89\x94\x8b\x42\xbb\xe7\xef\x1d\xd0\x4f\xde\x37\xfc\x14\x35\xbd\xce\xba\xe1\xde\xab\xfa\xd4\x0f\xf6\x77\xf7\xed\xa5\x85\xfd\x47\xdf\x21\x77\x6a\x6d\xeb\x36\x07\xc8\x03\xbd\x31\xce\x15\x69\xb8\xf1\x5a\x24\xa4\x78\xd0\x52\x44\x80\x49\xb4\x3d\x71\xc3\xfe\x30\x39\xed\xcc\x2d\x37\x26\x67\x3e\xee\xce\x3b\xdf\x4f\x3a\xab\x4f\xeb\x7b\x5f\xd7\x77\x56\x30\x17\x4a\xde\xc3\x3d\x3a\xdf\x33\xdc\xf8\x91\x36\xdf\xac\x1c\x46\xd0\xf4\x80\x15\x08\x93\x02\xcf\xf4\x58\x2c\xa9\x1f\x9c\xbb\x8f\x79\x74\x09\x4f\xa4\xf0\x79\xc6\x45\x75\x38\x8f\x9e\xd6\xd7\x5e\xb2\x73\x6a\xa0\xa0\xa4\x05\x67\xb9\xba\x1d\x7d\xdd\x61\x4d\x0f\x94\x84\x15\x63\x0d\x87\x2b\xb0\x17\xab\xf5\x9d\xe7\xf5\x1d\x0e\x38\x5a\xdb\xba\xc9\xdd\x91\x0f\xae\x04\x6e\xb9\x52\xe8\xdd\x79\xd2\x93\x1a\xda\x18\xa1\x0d\x54\x33\x99\xc2\x30\x0a\x43\xc1\x2a\x1e\xff\x29\x5b\xa3\x28\xac\x51\xe9\x5b\x22\xae\x92\xb5\x6a\xed\x65\xed\xfd\xa3\xd0\x88\x83\x99\x5a\xbf\xbd\x2a\xa4\xf7\x89\x34\x88\x03\x12\x46\xce\x25\x8a\xe6\xa6\xd9\x03\x27\xe5\xe1\xb6\xce\xae\xbe\xab\xed\xec\xd4\xf6\xee\x60\xae\x7d\xd4\xe3\x14\x6c\x7b\xb3\x76\x87\xd2\xea\xd0\xd8\xfb\x44\xdf\xed\x70\x54\xf6\x27\xf8\xd9\x72\x41\xb1\xa8\x87\xdf\x1d\x6e\x43\x05\x7e\xc4\xe4\x8f\x24\xec\xfd\x38\x65\x25\xd2\xed\xc5\x2a\xd3\x75\x79\xd3\xd9\x78\x92\x84\xd6\x3f\xd8\x3b\xd8\x71\xfa\x02\x32\xc1\x66\xdb\x14\x95\x11\x3c\x4f\xb0\x7f\x88\x43\x4d\x01\x17\x27\xf8\x9e\x40\x98\x5a\x84\xb0\xba\x80\x0f\xb4\xa8\x8f\xa4\x08\x27\x68\xbc\x5d\x6d\x6c\xbd\x70\xe6\x96\x9b\xe3\x0a\x3c\xef\xa8\x73\xf7\xa9\x10\xca\x70\x30\x18\xd8\x17\xb4\xb7\x85\x36\x66\x30\x9e\x2f\x5a\x42\x5e\x45\xdc\xf1\x21\xa9\x9a\x38\xa3\x5f\x5c\x91\x79\x91\x8c\x2a\x26\x19\xa2\xec\xf4\x55\x19\x2a\xa9\x16\xd4\xeb\x5d\x6e\x14\xc7\xa1\x47\x31\xf3\x88\x6d\xb4\xe7\x35\x28\xa4\x29\x25\x7a\x9c\x10\xfc\x4c\xe6\x45\xb7\x1a\xf8\x4d\x2d\xb0\x5f\xbc\xdf\x06\xe8\x7f\x54\xa8\x96\xa7\xdd\x27\x84\x1f\x5d\xa2\x1d\xdb\xe8\xa9\x61\x82\xcd\x51\xd1\x3c\xe3\x39\xa3\x3d\xe6\xd2\xb4\x13\xc5\xb3\xb9\x10\xe4\x61\xb8\x15\x90\x07\x5f\x5c\x30\xa8\x2b\x98\x2a\xed\xa5\xb9\x28\x56\x00\xb0\x4d\xd5\x0a\xf4\x4b\xb0\x93\xf0\x0c\x6c\xa9\xa8\x92\x46\x2f\xf9\xbe\x75\xff\x50\xec\x49\xf3\x71\xb1\x94\x12\x45\x29\xa2\x73\xec\xca\x3a\x07\xa5\x7b\xfd\x9d\xbd\x7b\xc7\x7e\x72\x05\x99\xe3\x63\xad\x42\x74\xcf\x73\xfb\x07\xef\x62\x1f\x6e\xd9\x4b\xf3\xbc\x6c\xf5\x5d\x34\xe6\x66\x79\x13\x8b\x34\xde\x3f\x6c\xac\xcd\x73\x42\xae\xf9\x65\x79\x27\x79\x7d\x1d\x33\x1c\x7e\x55\x97\xaf\x40\xcd\xd1\x03\x24\x81\xb3\xc2\x67\xfb\x4f\x7b\xa1\x71\x69\xf8\x4b\xe4\x92\x38\x0d\x70\x80\x91\xec\xe0\x62\xda\x88\x3a\x1c\x94\x8a\x9e\x18\xa2\x6b\x45\x55\xcb\xe6\x4d\x1d\xf4\xf1\x4d\xdd\x51\xcf\x6f\x88\x4f\x74\x75\x90\x21\x25\x7f\x91\x6a\x85\x36\x72\x69\x54\xcd\x8f\xfa\xb9\x0c\x66\xa5\x5c\xd6\xe1\x5e\x27\x39\x6d\x31\x73\xbd\x2a\x1d\xd1\x3f\x7d\xcd\xde\x54\xd4\xc4\x60\xfb\x62\x01\x49\xbb\xb5\xb8\x24\xd7\xb9\xb5\x6a\xdd\xc2\x7e\xe6\x68\x66\x11\x18\xcf\xd8\x62\x31\x2f\xea\x55\x6f\xa5\xea\xd8\xc3\x61\x4b\xfd\x10\x2b\x69\x4c\x29\x56\xb2\x8b\x0a\x21\x27\xb7\xa4\x0c\x38\xd3\xca\x8a\x35\xda\x5a\xc9\x89\x89\xf6\x3e\x98\xc5\x5d\x1e\x5d\x67\xac\x9f\x95\x54\xb4\x02\x35\x82\xb3\xde\xf7\x46\x8a\x2f\xc3\xc0\x97\x26\xa9\xc3\x5e\x59\x47\xf6\x43\xd7\xd7\x78\xc3\x73\xd1\x7e\x98\x9c\x16\x5a\x19\xec\xd8\xcf\x19\xfc\x33\xb7\x1a\xf7\xcc\x98\x4d\xb1\xa5\xb4\x4e\x26\x11\xb2\x67\xd0\xb9\x9b\x66\x99\x84\xd7\x8b\x22\x4a\x48\x71\x35\x6c\x53\x3f\xf0\xca\xc1\x84\xf8\x0c\x40\x2d\x8b\x00\xb0\xfe\xc8\x26\xd5\x72\xff\x31\x81\xba\x31\xa2\x68\xea\x7f\x1e\xb0\x65\x11\xf2\x9e\x03\xcb\x69\x29\xcb\x31\x2a\xa4\x5c\x54\xb2\x2f\x78\x20\x00\x2c\x94\x96\x1a\xa1\x17\x0b\x07\x1f\x2b\x4c\xc8\x01\xc7\x0a\x13\x71\xf0\x4f\xcb\xa4\x1c\xc6\xa7\x0d\xca\x69\xf9\xd3\x06\x85\xb4\xf4\x69\x43\x02\x78\xc2\x7d\x6b\x42\x0e\x30\x3e\x8c\x02\xa0\x2e\x71\xfb\xc6\x0a\xda\x14\x78\x34\x82\xdb\x51\x5a\x20\x85\x8a\x11\x66\x24\x53\x2a\x96\x9e\x2b\x50\x8b\xca\xe0\x31\xfc\xd7\x1b\x57\x5f\xd8\xd7\xd7\x9d\xef\x27\x9d\xbf\xde\x70\x56\x56\xf7\xef\xbe\xc6\x1b\xcc\x80\x44\xf0\xea\x6c\x0b\x5d\x64\xa8\xaf\x3f\x86\x5a\x68\x6c\x60\x00\x62\x42\x49\x8b\x9d\x16\x90\x03\x51\xbb\x07\x13\x21\x89\xca\x15\x4b\x28\x2b\xa6\x79\x49\x37\xb2\x25\xc2\x63\x41\x7f\x7f\xf2\xfb\x9e\xd9\x00\xd9\x45\xe1\x7e\xd6\x52\x27\x06\x0e\x22\x2d\x0a\xd0\x4d\x0c\xc7\x83\xc8\x20\x93\x5a\x26\x29\x1b\xaa\x6e\xa8\x56\xf6\x2d\xb5\xb5\x8f\xc8\x21\x62\x00\x01\x9d\x96\xd8\xa9\x1b\x36\x74\x97\x73\xfd\x38\x81\x7b\x06\x88\x7d\x01\xcc\x15\x85\x14\x0c\xbd\x5c\xa4\x56\x3b\x71\xc3\xc4\xf8\x03\xa2\x1b\x3c\x96\xd4\x8b\xf5\x72\x7f\xb1\x74\xb6\x80\x67\x3f\x5b\x18\x21\x6c\x58\x37\x0b\x5c\x2d\xc0\xf1\x05\x38\x6a\xe0\x9e\xd6\xf3\x18\xa1\x65\x2d\x24\xa4\x89\x60\xc1\x7a\x2e\xdf\x05\x7e\x19\x0b\x2e\xa2\xfa\x83\x2b\xf6\xea\xea\xfe\x57\x7b\xb5\xad\x9b\xf6\xfc\xbb\xfd\x99\x9b\x62\x9f\x44\x50\xc5\x26\x90\x56\x55\x23\x15\x93\xb6\xf3\xf0\x97\x4e\xee\xa8\x0b\x58\x7b\x78\x73\x91\xd3\xc8\xe7\xbd\x03\x83\xe0\xb5\xd4\x0d\xb8\xee\xcc\xe5\x0c\x45\x2b\xe8\xa5\x1c\x0a\xb7\x74\x32\x42\x35\x6a\xf8\xd7\x21\x86\x07\x5a\x0c\x81\x01\xe5\x8a\x39\xca\x43\x02\x12\x5b\xee\xc1\xbc\x36\xbe\xfb\x01\xaf\x35\xc0\x36\x75\xaf\x44\x39\x38\x5d\x50\x29\xbc\xa7\xe5\x81\xb8\x4b\x37\x3f\xee\xce\x3b\x73\xcb\xfc\xea\x34\xa2\x69\xfd\xf6\xaa\x33\xb7\xe4\x2c\x6f\x7a\x81\x78\xf5\x2b\x6f\xec\xa5\x05\xf4\xad\x39\x0b\xeb\xfb\x93\x53\xd2\xde\x4c\x95\x55\x95\xb6\x78\x6b\x53\xf2\x80\xd7\x14\x87\xb1\xb5\x1f\xd8\x08\x6d\x4a\x49\x39\x14\x35\x30\x74\xe7\x40\xa2\x2e\xd2\xec\xeb\xda\x81\x8d\x9c\xa8\x80\x83\xf5\x06\x64\x4b\xc1\x72\x1d\x77\x5e\x40\x7f\x76\xc5\x6c\x41\xbe\x24\x50\x3c\xa1\x54\x8b\x0d\xf2\x13\x76\x5a\x2c\xdb\xd2\x9e\x8f\x41\xb4\x2d\x69\xec\xa1\x06\x04\xaf\x24\x49\x5e\xaf\x14\x71\x47\x18\x62\xdb\x99\x92\x1f\x95\x44\x03\x70\x04\xb7\xf7\xfb\x77\x5f\x06\x70\x0b\xd0\xfd\x29\x5d\x99\x2c\xc5\xbc\x78\xc4\x24\x15\x4d\xfd\x8f\x0a\xfb\xec\x78\x4d\x4b\xb2\x46\xe8\x30\x49\xfa\x45\x9a\xdd\xee\x43\x12\xa8\xa2\x32\x44\x45\xb0\x0c\x49\x65\x5b\x36\xcf\x25\xa9\x20\xf2\x42\xad\x7c\x64\x83\x72\x5c\x3b\xef\x2e\x33\x12\x11\xa7\x9a\x32\x5b\xc2\x79\xb5\xe6\xac\x5c\x73\x36\x9e\x44\x6e\xe7\x79\x98\x34\x5c\xca\xcb\xbe\x33\xaf\xde\xd2\x75\x52\x62\xa6\x85\x5e\xc6\xb0\x13\x4b\x77\x29\x66\xda\x48\xb9\x48\x15\x93\x27\x79\xa9\x78\xd1\xca\x5a\x2a\xdc\x7b\x9f\x4d\xf1\xbc\xa0\x07\x57\xf6\x27\xaf\xed\xaf\xbd\x6b\xbc\xbf\x6a\x3f\x79\x80\xe1\x05\x8d\x5f\xbe\xb1\x67\x9e\x22\xed\x5f\x82\x62\xac\xe5\x1a\x87\x89\xe3\xc9\x64\x10\x26\xc3\x2d\x38\x5d\x03\x4f\x66\x3f\x2d\xeb\xb0\xc9\x1f\x11\x73\x71\x56\xdf\x45\x5e\x25\x41\xe0\x3e\xe7\xee\x1b\x7b\xf1\xeb\xfa\xed\x55\x84\x82\x13\x46\xa8\xb5\xa8\x54\x90\x08\x73\x62\xa2\x7d\x50\x2d\x8b\x03\x6e\x33\x2a\x1a\x2b\x5a\xa4\xbc\x89\x9f\x3a\xaf\x97\x4a\x00\xe7\x5e\x31\x69\xc1\xbd\x15\x36\xdb\x3d\xec\x5c\x40\x00\xcd\x29\x47\x10\x6e\x9f\x12\xa5\x58\x6c\x43\xcb\xad\xe0\xa3\xfc\x64\xe4\x40\x1c\x0c\xdc\xb8\x0b\x23\x1b\x9f\xc8\x02\x57\x83\x12\xd8\x37\x50\x35\xd2\xf5\xef\x7d\x5d\xfd\xdd\x67\xba\x7a\x06\x3b\x4e\x13\x97\x63\xb1\x80\xe1\xa1\x68\x7c\x32\xad\xf5\x8a\xc5\xd6\x4a\x35\xf3\x5e\x13\xa8\xcf\x70\xa9\x2e\x3b\x4f\xc2\xf2\x39\x46\x0d\x93\xe7\x14\x9d\x51\x35\xb5\x54\x29\x9d\xc3\x27\x97\x2f\xb7\x93\x3f\xe9\x15\xc3\x8d\xc3\x51\x83\x1e\x29\xff\x9d\x43\xd0\x84\x4d\x42\x66\xd4\x73\xce\xca\x50\xb5\xb4\xe0\x6f\x16\x06\x27\xd4\x55\x2d\x17\x63\x8f\x73\xe9\x8a\x23\x4c\xf9\x77\xc0\x00\x28\x04\xec\x67\x55\x7c\x98\x9c\xae\xed\xcd\x3a\xd3\xeb\xf5\x07\x57\xb8\x73\x19\x76\x11\x24\xd6\xad\x3f\xdf\xb4\xdf\xbd\x71\x56\x5e\x20\x7b\x6e\xa8\x98\xa4\x5d\xdc\x35\xc0\x0e\x63\xa3\x8a\x01\xb8\x9d\x86\x6e\x02\xdd\x30\x3b\x6e\x9b\xed\xe7\xb5\x13\xb4\x48\x91\x89\xd1\x42\x63\xc3\xa0\x25\x7d\x8c\x22\x25\xa7\xcf\x16\x04\x06\xb9\xd9\x06\x43\x00\x5e\x83\xa8\x4b\xb6\xa4\x29\xe5\xb2\xeb\x33\xf5\x6b\xac\x68\xb0\x73\x82\xf3\xf8\xbc\xd6\x81\xd1\x20\xc4\x0d\x0b\x21\x97\x14\x8d\x07\x6c\x17\x29\x77\xec\xc6\x83\x39\xfc\x8b\x68\xcd\x41\x52\x03\x7b\x65\x9d\x63\x13\x60\xfa\xfb\xbb\x1b\x40\x52\xf4\x53\x6d\xfb\x07\x38\x86\xd8\x9b\xb3\xf6\xcc\x1b\x84\x57\xaa\xed\x3e\xd8\xbf\xff\xc4\x5e\xd8\xe1\xac\x40\x2e\x95\x91\x9f\xe4\xf3\xee\x0d\x7b\xbf\xba\xdb\xb8\xfa\x9a\x87\x73\xba\xcc\x09\x78\xa0\x0b\xee\x01\xfc\x40\xb7\x58\xc5\xcd\x1f\x6a\xc3\xc8\xad\xc6\xb3\x29\x8e\xe7\xd4\x0c\x06\x41\xec\xa5\xbb\x1f\x77\x05\xb0\x16\xf0\xc5\x54\x0c\xaa\x18\x52\xf2\x17\x2f\x29\x46\x01\x86\x66\x59\xb1\xd4\x21\xb5\x98\xfd\x10\x0f\x87\x70\x34\x28\x0b\x3a\x35\xb5\x23\xbe\x93\xce\xcd\xbd\x62\x9b\xe0\x45\x3a\x2e\x5c\x70\x9c\x8d\x27\x3c\xfd\x7e\xeb\xa6\x73\xbb\xea\xcc\x4f\x61\xc2\x13\xa6\x50\xca\x47\x1f\x5a\x75\xee\xf9\x75\x54\x81\xa5\x1d\x8f\xf4\x5e\xb8\x05\xd8\x8b\x92\xca\x39\xfc\xfb\xdb\x57\x98\x16\xca\x3e\x75\x20\xa3\x4f\x5e\x3f\x8c\x53\x0c\x65\x77\xb9\x22\x31\x5b\xc0\x52\x0c\xab\x9d\x08\x47\x25\x26\x48\x07\xdd\xe4\xff\x22\xda\x8b\xdf\xdf\xf7\x86\x4c\x68\x74\x04\x82\x3f\x3f\x4c\x4e\x7b\x03\x03\x33\x92\x23\xe0\x43\xb2\x21\x81\xf9\x43\x18\x67\x63\x8e\x6b\x79\x0c\x98\xe4\xbb\xa1\x28\x92\xd9\xde\x9d\x76\x36\x9e\xe2\xab\xb8\xb3\x61\x66\x8f\xa8\x8e\x32\x8f\x8a\x52\x0a\x85\x1c\x5e\x41\xe5\xd8\xba\xc6\x31\xa9\x47\x54\xd3\xe2\xce\x2d\x89\x87\x3c\x1a\x03\xd5\x24\xcb\x5e\xac\x3a\x3f\xaf\xdb\xb3\xf3\x1e\x73\xb7\x40\x1d\xdd\x52\x8a\xe4\x0c\x2d\xe9\x86\x68\xb8\xdb\xb3\x33\xf6\xc6\x3d\x67\x72\x47\x08\x44\x82\x42\x94\x92\x5e\xd1\x00\xb6\xb9\x04\xe2\xc8\x67\xb4\x7d\xa4\x9d\x1c\x3b\xfa\xdb\xdf\x9f\x69\x23\xc7\x4e\xb5\x91\x63\x47\x4f\x89\x52\xe6\x82\x95\x7c\xdc\x9d\xab\xfd\x72\xc3\x7e\x36\xfd\x71\x77\x1e\x4a\x7f\x98\x9c\x3a\x76\x8a\xfd\xcf\xd1\x53\xc2\x8c\x37\x81\x0e\x2e\x24\x77\x5e\xd1\xf0\x06\x2c\x8b\x52\x7c\x36\x40\xa6\x1e\x52\xc4\x72\x50\x9e\x43\xd0\x54\xab\x94\x86\xa8\x11\x65\xde\xf5\xac\xe5\x76\x92\x3b\xc6\x06\x80\x41\x4d\x00\x28\x52\xd8\x22\x5f\x54\x4b\x2a\xc0\x41\x43\x2b\x85\x99\x66\x4d\x61\x30\xce\xe4\x8e\x73\x87\xd9\xa7\xb9\x63\xa4\xb1\xb6\x5e\x7f\xb2\xed\xdc\xd9\xdc\xbf\xba\xe8\xdc\x7d\xbc\x7f\x7f\xc9\x9e\x13\xe7\x50\x1e\x9a\xae\xe4\xb3\x13\x98\x2d\x74\xdc\xff\x4d\x38\x16\x5a\x6a\xc0\xc7\xdd\x39\x4c\x1c\xb2\x27\x77\x21\x18\x18\x7f\x49\xfd\x19\x8c\x64\xde\x21\x54\x23\x9d\xb8\xe8\xd5\x82\x1c\x2a\x32\xd8\x4c\x81\x7c\x83\x0d\xe3\x34\xeb\x11\x06\x01\x06\xd7\xa3\x78\x89\x67\x3b\x3a\x7c\xcb\xaa\xa4\x9a\x26\x33\x4b\x86\x0d\xbd\xc4\xa9\x92\x64\x17\xf2\x9c\xea\x08\x7c\xea\xb5\xad\x8d\xfa\xee\xb6\xbd\xf9\x35\x61\x12\x65\xb1\xc8\x67\xfb\x4f\x67\xda\x52\x79\xb4\x0f\x3a\x86\xbc\x08\x48\x2f\xae\xd7\x4f\x2b\x70\x39\x9e\x4c\xcb\xa0\x4a\x49\x08\xb6\xcc\xb9\xb1\x22\x91\x5f\x10\x0f\xe9\xfc\x74\x75\xff\xe1\xac\x3d\xb7\xe9\xd9\x83\x62\x38\xc4\x90\x5a\xee\xc7\x08\xa8\x86\x23\xc9\x53\x6a\x58\x37\x98\x6d\x41\x0b\xed\x64\x20\x3f\x4a\x4b\xd4\xa7\xa8\x62\x92\xdc\xc4\x54\x88\xc1\x17\xcd\x88\xcd\x59\xd4\x9d\x93\xc0\x3f\xb8\xc2\x37\x9a\xbd\x1f\xed\xc5\xaf\xa3\x5a\x7f\x98\x9c\x76\x36\x9e\x80\x70\x88\x6c\x7b\xe7\xac\xcd\x61\x3a\xa9\x73\xaf\xca\xeb\x89\x6f\xd8\x40\xc7\xa9\x2e\x61\xf2\xd3\xed\x75\xe7\xe7\x3b\x02\x52\x95\xb3\x03\x5d\xfd\x72\xd2\x1c\xc8\xd6\x49\xa0\x83\xf1\xa5\xc8\x94\x08\x88\x91\x68\x23\x64\x95\x01\x09\x82\x72\x9a\x9b\xbb\xa4\x20\x7c\x7d\x5c\x60\x5e\x3b\x1c\x4e\x11\x53\x5d\x1c\xe9\x1b\xbc\xa9\x8a\x8b\x5a\x05\x0b\x36\x28\x27\x51\x21\x4c\x3e\xd1\x35\x0a\x69\xce\x80\x34\x8f\xb3\xd5\x25\x10\xe0\x9e\x3c\x6a\x96\x75\x4d\x78\x83\x89\x8a\xd5\x76\x16\x9c\x85\x39\xe7\xd1\x57\xf6\x37\x37\xed\xed\xdb\x98\x6d\x5b\xdb\x9a\x74\x7e\x5c\x73\x26\x9f\x23\x7a\x7c\xa2\x46\x15\x6b\x94\x82\xc3\xc9\x12\xa7\x66\xf0\x6e\x78\xd2\xa8\x8a\x3d\x07\xbe\x48\x3c\x9f\xb4\x71\x07\xc9\x11\xd7\xdf\x71\x24\x2d\x74\x30\xd4\x86\xa7\x81\x8f\xbb\xf3\xdc\x6b\x12\x10\x93\x8c\x21\x1c\xd4\xc5\x82\x20\x4f\x4a\x3a\x3b\xe1\x98\xcc\x0f\xbc\xed\xa4\x0f\x2f\x90\x8a\xfa\x08\x3b\xb7\x4b\x1d\x37\xa8\x11\xda\xa3\xae\x9c\xfa\xb5\x39\x67\xe5\x47\xa0\x1a\x7e\x8b\x86\x6b\xfd\xfe\x8e\xbd\x77\x27\x85\x4e\xfa\x90\xc5\x0e\x6d\x01\x9f\x67\x20\x80\x19\x5e\x02\xca\x46\xf7\xaf\xa4\xd1\x09\x5f\x9d\x19\x8a\xc8\x88\xe0\x05\x48\x05\x25\xc0\x0a\x02\x61\x51\x78\xc9\x95\xa4\x62\x59\x31\xcc\x68\x97\xb9\x19\x2d\xde\x95\x81\x08\xc3\x95\xeb\xf5\xfc\x7b\xe7\xdb\xa5\x70\x77\xc5\x88\x48\x50\xc4\x70\x99\x7a\xa3\xf0\x76\x4d\xdb\x07\x50\x3f\x8b\x0e\xbe\xc2\x6a\xd0\x55\xaa\x70\xc8\x2c\x9c\x88\x52\x2f\x80\xbd\xb8\xec\xbc\x99\xab\x6d\x71\x80\x2b\x8e\xbb\xf3\xe0\x0a\x1e\xad\xe4\xf5\x00\x0a\x45\x00\xa1\x2b\x82\xdb\x02\xb5\x7f\x52\x68\xa4\x88\xf2\x4d\x60\x26\x6e\x63\x82\xa7\xc5\xb4\xc8\xa7\x67\xb5\x21\xcc\xb6\x8b\xf8\xff\x52\xf7\xa9\x87\xcd\xe8\x11\x27\x33\x4d\x60\xbf\x6c\xa1\x46\xf4\x0b\x59\x68\xc3\x85\xe9\x9c\xd9\xf0\x89\x4b\x6b\x4c\xaf\x1d\xc0\xa1\xc4\x82\x7e\x78\xaf\xed\x3f\x9c\xfd\x84\xea\xbb\x08\xa7\x07\x50\x3f\x88\xf6\x71\x28\x8d\x88\xf8\xe0\xf0\xbb\xf3\x24\x4b\x59\x7c\x2d\x2a\x18\x66\xd0\x58\xe0\x76\xaf\x6b\x27\x1d\x4c\x05\x49\x52\x7d\x5c\xdd\x51\x38\xa1\xe4\xba\xf3\xac\xba\x62\x51\x68\xb1\x62\x35\xdc\x6e\x7d\xfb\x0a\xff\x94\x49\x8c\xcd\xdf\xc7\xf5\x41\x84\xcb\xff\xb7\xcb\xee\xc7\x01\x26\x84\x50\x8b\xc7\x7e\x15\xa7\xfe\x8b\xa8\x03\xbc\x4f\x91\xb0\x04\xb1\xbe\x2b\x29\xe3\xa4\x48\x21\x54\xa6\x5c\x36\x49\x49\x29\x97\x91\x98\x29\x12\x29\x32\x56\x29\x6a\xd4\x60\x9b\xcd\x3f\x13\xb8\x51\x50\x9b\x8f\x7c\x62\x02\x0c\xee\xcc\x33\x83\x46\x14\xd8\x16\x27\xf4\xd0\xd5\x58\xd9\xd0\xf3\x94\x16\x44\xf7\x61\xa1\xd1\xb1\x58\x6d\x7c\xb5\x57\xdb\x7b\xef\xdc\x7b\x6c\x6f\x5e\x41\xee\xdd\x50\xd4\x48\x24\x4f\xd1\xb9\xf7\x8d\xbd\x78\xd7\xb9\xbd\x63\x5f\xdd\xf9\xb8\xfb\xd0\xbb\xc7\x48\x47\xe1\x81\x79\xf7\x68\xd9\x39\x77\xd9\xf9\x1b\x73\x85\x1b\xcf\xa6\x30\x55\x55\x78\xc9\xe6\xf7\x75\xa4\x4b\x43\xa3\x34\xb9\x0f\xff\x76\xc3\x76\x25\x1b\x08\x0b\x7e\xa5\xe8\xd7\xa8\x6d\xa5\x27\x4b\x49\x3d\x7a\xcd\x64\x26\x3e\xe8\x65\x8e\xdc\x12\xd9\xd1\xa0\x97\x2a\xde\xd6\x9f\xa6\x7f\x2a\xf1\x86\x42\x12\x9d\x60\x68\x23\x64\x0d\x84\x8b\x9b\xfd\xb5\x77\xa9\x56\xcd\x96\x5b\xea\x6d\x7e\xbf\x7a\x4b\x43\x08\x59\x9f\xb2\xbd\x13\x13\xed\xc1\xc0\x4e\xe4\x73\x87\x49\xe1\xcd\x83\x5f\xa7\xdd\x72\x4d\x12\xdb\x4d\xbf\x2c\xd3\x3c\xf8\xfe\xc0\x37\x3d\xaa\x98\x44\xcf\x43\x60\x62\xe1\x38\x1c\x9c\xb9\xa7\x58\xb8\x32\x7e\x5d\xbf\xbd\xea\x5c\x59\xb4\x9f\x2c\xbb\xee\xe5\x50\x31\x41\xb5\xb0\xec\x14\x8b\xa1\xdc\x12\x3a\xac\x6a\x1c\x04\x8f\xfb\x2d\x15\x63\xa4\x52\xa2\xc2\x7c\x3a\xfb\xe6\x56\x63\x6f\x0f\xfd\x8e\x8d\xab\x2f\x30\x5f\x9a\x2d\x04\x00\xba\xe8\x1d\xa8\x12\x74\x60\x5f\x9d\xab\xe0\x25\xad\xf4\xa4\x32\xe2\xb1\x7e\xac\x24\xae\xac\xa0\xde\xa2\x9e\xbf\x18\x09\xc9\x85\xec\x72\x38\x51\x61\x82\xb6\x98\x7e\xfc\xfb\xfd\xdb\x53\x81\x82\xb5\x9d\xa7\xe8\x3a\xc5\xd4\x6b\x51\x95\x25\xa5\x4c\x14\x32\xd8\x99\xca\xce\x83\x7d\x0d\x5e\x96\x31\xab\x73\xa1\xe9\xcd\x47\x14\x1b\xb0\x1a\x53\xcb\x3d\x7e\x1e\xc0\x6b\x08\x21\x2e\x6e\x4d\x85\xbd\xc4\xa3\x29\x3b\xfa\xfa\xf0\xe1\x89\xde\x33\x1d\xdd\x3d\xe4\xcf\xb9\x9c\x17\x3a\xea\x46\x67\x7e\xc1\x9e\x42\x34\x74\x5f\xc7\xe0\xe7\x5f\x9c\x3f\xaf\xa1\xc8\xa6\x9e\xc9\x56\x55\x2e\x07\x4e\xc7\xbe\xde\xfe\x41\x14\xd9\xf5\xef\x1d\x67\xfa\x4e\x77\x0d\x70\x31\x71\x32\x4a\xe3\x39\xc0\xd9\xfe\x52\x29\x95\x8b\xb4\x3d\xaf\x97\x88\xf4\x3f\xff\x2d\xf8\x6a\x26\xb1\x81\x7e\x28\x8d\x03\xa2\x6c\x48\x2c\x3e\x6b\x3f\x3c\xe9\xbc\x87\x87\x75\x3d\x56\xfa\x6f\x86\x75\x3d\x63\x0d\xd0\xbb\xff\x74\xf4\xe8\xd1\x84\x6e\x39\xce\xde\xc9\x78\xb1\x60\xc6\x30\xd6\x24\x4e\x78\xb4\x30\x90\xd6\xc3\x8f\x88\x93\xcc\x75\xb3\x55\xea\x08\xf7\x22\x20\x0b\x81\x04\x56\x27\xa1\x90\x80\x9d\xeb\x93\x51\x48\x44\x54\x3e\x28\x91\xc4\x59\x8d\x3b\xf5\x69\xc1\xc7\x43\x1e\x56\xb5\x11\x6a\x94\x0d\x55\x03\xef\x71\x49\xc9\x96\x6b\x8d\xe8\x15\x44\x49\xc6\xbe\x80\xe5\x34\x09\xc6\xc2\x13\x97\x8e\xe6\x02\x64\x26\x10\x5c\x04\x44\xa2\x81\xce\x4e\x2e\xd2\x60\x48\x0e\xba\xd1\xc4\xf3\x99\x52\xbe\x34\x80\x3b\x28\x3b\x48\xdb\x99\x52\x76\x42\x64\x76\x50\xba\x8c\xc8\xdd\x95\xab\x05\x40\xaf\xa8\xa9\x57\x8c\x84\xc0\x5c\x94\xcf\x21\xad\xfe\x7a\xc5\xd9\x5e\x92\xde\x01\x36\xd7\x92\x1c\xfb\x1b\xac\x22\x78\x27\x27\xad\x22\x16\xd4\x2d\x5d\x67\xc5\x83\xb1\x25\xf6\x1d\x02\x77\xf2\x7f\xcb\x80\x3b\xb1\x96\xc8\xdb\x62\xc1\xb0\x80\x66\x4f\x89\xf3\xcb\xfe\x3d\xa0\xd1\x63\xc7\x7e\x72\xec\x43\xaf\xd1\xbe\xf5\x36\x31\xd1\xee\x21\xe9\xa4\x33\x39\xa3\xeb\x92\x40\x84\x5c\x81\x10\xdf\x02\xc4\xe7\x72\x5e\xb4\xcf\xe1\x87\x4e\xf6\x7c\x70\xbc\x7c\x88\xf4\x68\x69\xbe\x52\x82\xd2\xb1\x17\xf2\x87\x3b\x06\x32\x5e\xa7\xbb\x9a\xa5\x38\x32\x1e\xca\x81\x30\xb2\x7f\xc4\x55\x94\xa8\x69\x74\x4f\x39\x6c\xc2\x0b\xc1\x5e\x94\xa6\x13\x43\x09\x41\x3e\x2d\xf4\xe1\x7e\x62\x19\x03\x75\x7a\x25\x63\x2e\xcd\x9a\xb4\x4d\x37\x9f\x03\xda\xf6\x88\xb4\x6d\xba\xb8\x4a\xad\x6e\x8c\x27\xeb\xf0\x17\xce\x38\x4f\x54\x1a\xed\x42\xac\xdd\x7f\x87\xb7\xe6\xad\xec\x0b\x71\xbb\x73\x0b\x1f\x2e\xb4\xd8\x36\x33\x98\x0a\x57\x6b\xf9\xe1\x65\x73\x36\x49\x30\x36\xd9\x65\x84\x8c\x91\x2f\x50\xbb\xa8\x2b\x9e\x43\x64\x58\x05\x42\x36\x43\x2f\x81\x15\xd1\xa7\x58\xa3\x89\xeb\xdd\x42\x6d\xe7\x69\x6d\xeb\x46\x6d\x0f\x81\xa9\xaf\xd7\x76\x1f\x87\x6e\xd0\xc1\x63\x1e\x14\x97\xa0\xc7\x41\x76\x58\xac\xbe\xd5\x1d\xd6\xd5\x20\x6a\x11\xa4\xa8\x31\xa5\x11\x11\xa8\xe1\x7f\xaa\xe5\x93\x6a\x91\xfe\x61\xdc\xa2\xe6\xe5\xcb\x6d\xec\x11\xfb\xbb\x53\xaf\x68\x16\x3b\xed\xb1\x2f\x91\xb2\xe6\xb0\xa8\x8f\xbb\xf3\x11\x59\xb5\xad\x17\xf8\x15\x04\x6a\x99\xca\x88\x90\x45\x43\x54\xe4\x20\x40\xf7\x19\x00\xed\xc5\xf1\x1e\x66\x98\x39\xc6\xd2\x91\x79\x17\x58\xda\x2d\xc4\x79\xe4\x19\x19\x6c\x05\x02\x22\x25\x89\x8f\x3c\xa0\x52\x00\x79\x13\xd9\x78\x9d\xb9\x65\xce\x43\x19\x80\xf1\xb3\x6f\xcd\xcb\x80\x50\x99\x7a\x0a\xd1\x35\x9a\x83\x38\x24\x17\x04\x80\xa9\x59\xd4\x47\x84\x80\x4a\x2e\x74\x29\x8f\x31\xb2\xab\xb3\xf5\xc7\x53\x18\xf9\x22\xac\x27\xb0\x0e\x5b\xca\x88\x90\x5f\x25\xb2\xba\x01\xc8\xa2\x44\x26\x60\xb5\xb1\xee\xe3\xcb\x6a\xba\xe0\x22\xac\xa5\xa9\x70\x8a\x90\x22\x76\xaa\x4a\x44\x16\x0f\xb7\x41\x82\x2c\xce\xc4\xc9\xa5\xc8\x4a\x4a\x72\xfa\x38\x1d\xd4\xd2\x4d\x51\x69\x74\x8f\x06\x29\x62\xbc\x85\x4f\x8c\xba\x84\xf3\x19\xd3\x3b\x02\xa4\x2d\xa1\xa2\x92\xfa\xc2\x10\x02\xe0\x39\x4b\x51\x53\x04\x29\x00\x8b\x49\x6a\xc1\xa4\x56\x04\xf9\x4f\xbd\x1e\x43\x4d\x48\xea\x12\x53\x34\xb6\xb6\x73\x5d\xfd\x03\xdd\xbd\xe2\xe0\x46\x08\x75\x12\xc4\x34\x9e\x53\x8a\x6a\x81\xfc\xeb\x40\x6f\x0f\xd1\x87\xfe\x17\xcd\x7b\xf4\x47\x01\x03\x30\xc7\xc9\x7c\xf2\x3c\x82\xb7\x82\xec\xf2\xa4\xac\x18\x4a\x89\x5a\xd4\x30\xdb\xfc\x19\xc5\x39\xcb\x55\x2d\x57\x54\x35\xca\x56\x17\x55\x03\xc8\xeb\x22\x6d\x27\x27\x81\x47\xb2\xa8\x9a\x18\x48\xe2\x5d\x78\x89\xe5\x9a\x94\x92\x82\x9e\x07\xbf\x88\x1f\x6c\x05\x7e\x14\x31\x1b\xa5\x30\x84\x1d\x39\x9a\x80\x8e\xb2\xb6\xcd\x1d\xa5\x18\x2b\x55\xdf\x7b\x69\x2f\x4e\x3b\x77\x36\xc1\x90\xb9\xe6\xdc\x99\xc3\x4e\xb1\xab\xef\x1a\x3f\xad\x7d\xdc\x9d\xaf\xed\x3c\xad\x3f\x7c\xed\x2c\x3c\x75\x16\x6f\xd9\x33\x4f\x9d\xe5\x77\xf6\xee\x22\xce\x2c\x67\x6e\x99\x9d\x55\xdd\xa8\x65\x7c\xf8\x61\x72\x1a\xf3\x93\xc0\x1b\x5e\x75\xe6\xa7\x22\xb5\xd8\x73\x77\x1b\x6b\xeb\x98\xef\x69\x2f\x4e\xef\xdf\x9b\x89\xe5\xc9\x74\x96\xaf\x3a\x6b\xdf\x0b\x97\x81\x43\xff\x7e\xaa\xf6\x7f\xbe\xdb\xaf\xf3\xdd\x2a\x18\x66\x09\xb8\x78\x47\x94\x72\x39\xe7\x9e\xb3\x72\x00\xe0\x76\x84\xe4\x15\x8d\x27\xb0\x6b\x74\x44\xb1\xd4\x31\xe1\x65\x19\x70\xfc\xc7\x0b\x61\x1a\x4f\xee\xd6\xb6\x6e\x36\xbe\xda\xab\x6d\x6d\x37\x5e\xaf\x0a\x73\x01\x3c\x5a\xa6\x1e\xf1\x72\x8e\x5e\x47\x59\xd0\xe6\x39\x04\xae\xef\x93\xa3\xf8\x20\x42\x3c\x6e\xd7\x42\x39\xa6\xd8\x22\xc2\x45\x4d\x50\x92\x99\x35\x45\x7d\xc4\x6c\x73\x33\x3b\x31\xe3\x91\xfb\x40\x4c\x04\xc2\x74\x53\xdb\xc4\x9b\x0c\xda\x32\x6e\xf6\x5a\x6d\xeb\xba\x17\xd6\xff\x61\x72\x0a\x33\x3a\xed\x5b\x9c\x71\x46\xb4\xdf\xfc\x5b\x47\x7f\x4f\x77\xcf\x29\x64\xc4\xc0\xed\x9a\xcd\x4c\xb0\xb6\x3c\x1b\x47\x31\x89\xe2\x79\x81\x71\xfa\x95\x31\x17\xc6\x24\xa3\xea\xc8\x68\x71\x9c\x14\x54\x33\xaf\x57\x0c\x65\x84\x16\x40\xd4\x9f\x42\x02\x4a\xca\x38\x1b\x26\x63\xaa\xa9\xba\x31\xbd\x6c\x15\x36\xbd\x5c\x5f\x00\x41\xc8\xeb\x06\xce\x70\xac\xde\x1c\xa5\xc5\x22\x19\x55\x4d\x4b\x9c\xa4\xd5\xd8\x78\x66\x7f\x7d\x9d\xd3\x69\xd8\xbb\xdb\xf5\xaf\xe6\x38\xc1\x21\xd2\x44\x6d\xce\xe2\x27\xac\xed\xad\xd4\xb6\xb6\xb9\x6f\x7a\x6d\x1e\x33\xda\x71\x42\x61\x51\x78\x8b\x07\x13\xed\x3e\x68\x7c\xf7\x83\x3d\xf3\xa6\xb6\xb3\x5c\xdb\xde\xae\xaf\xdc\xb0\xe7\x36\x79\xe6\xa6\xf7\xc2\xcb\x4d\x7b\xef\x8e\xbd\xb2\xce\xb5\xb4\x17\x66\xed\xc5\x57\xf8\xb4\xb6\xb5\x21\xef\x6b\x64\xc0\xe1\x44\x6b\x3a\x24\x2b\x56\x4a\x90\x0e\x1c\xc1\xe7\xe0\xb7\x2f\x3c\xb6\x1d\xba\xce\xcb\xa1\x68\x26\xf0\x65\xd6\x1c\x29\xea\xda\x08\x35\x02\x8c\x24\x6c\xa1\x44\x3b\x0f\xc5\xc0\xe7\x45\x87\x17\xf9\xed\xd1\xa3\xec\xf7\xdf\x1f\x3b\xda\xe6\xe2\xf2\x34\xcb\xf5\xb0\xa4\x31\x4c\xbd\xd0\x06\x81\x62\xc8\xbc\x59\x1e\x55\x34\xfe\xe1\x20\x9b\xbb\xb3\xa8\x57\x0a\xe4\xa4\x5e\xd1\x0a\xc6\xf8\x11\x93\x14\x14\x4b\x19\x52\x4c\xda\x4e\x3a\x8a\x45\x72\x51\xd3\x2f\x15\x69\x61\x44\x88\x5b\xe8\xe5\x8e\x60\x76\x70\x01\x3d\x64\x21\xa1\x41\xb6\x3a\xaf\x9b\x30\x58\xc4\xe4\x93\xc8\x03\x6d\x11\x43\x2a\xf1\x51\xe3\x6c\x3c\x41\x5a\x39\x7b\x0a\x88\xf8\x5e\xaf\x36\x5e\x7f\xef\xe5\xa2\xe2\x45\x8f\x77\x71\x10\xbc\xa5\x62\xe6\xef\xec\x4d\x7b\x11\x5c\xfd\xc0\x0b\xe1\xac\xbc\xe0\x27\x0e\xd6\xa9\xce\xdc\x32\xeb\x55\xc2\x51\x95\x21\xdb\xc0\x23\xa5\xe0\x89\xc2\xdb\xb3\x91\x9a\x60\x33\x58\x68\x4c\xce\xb3\x61\x15\x6a\x34\x44\xa3\xdf\xd9\x74\x6e\xbe\xb4\xb7\xbf\xa9\x6d\x6d\xd4\xef\xdc\xaf\x6d\xdd\xb0\x37\x9e\xd4\x7f\x60\xfa\xe1\xb0\xf3\x36\x86\x98\x06\x40\x2e\x32\x9e\xbf\xf6\xbf\xda\xb3\x37\x67\x6b\x3b\x0b\x91\x2a\x6a\x5b\x1b\x98\xb8\xec\x33\xee\xe1\x36\x86\x61\x76\xb7\xe6\x83\x2c\xcd\xc2\x6d\xe3\x93\x0c\x71\x0f\x02\x27\x7e\x88\xe3\xd8\x55\x8a\xc5\xe6\xe4\x33\xcc\x7d\xfc\xc4\xa3\xb7\xb5\x41\xeb\xeb\x18\x1c\xb5\xee\x50\x6e\x27\x3d\x3a\x51\x2c\x8b\x96\xca\x96\x57\x41\x49\x29\x50\x97\x75\x43\xc9\xc7\xf5\xe3\x3f\xfb\x50\xe8\x41\xc0\x01\x17\x42\xa1\x40\x4d\xcb\xd0\xc7\x5d\x6e\xbf\xc8\x37\x08\x24\x32\xf3\xbe\x69\xd2\xb5\x9d\x74\x0c\x5b\xd4\x88\xaf\x65\x5c\xaf\xc0\x5a\xee\x46\x71\x1a\x15\xcd\xb5\xb6\xb1\xf3\x5d\x2a\xa3\x9c\x52\xb1\x46\x73\x78\xe1\xad\x37\xfd\xc8\xb5\x81\x76\x96\xca\x5e\xe6\x7e\xbe\x48\x15\xad\x22\x84\x50\x49\x37\xa5\x7d\xeb\x47\x3a\xa5\x63\xa6\x2a\xcc\xa0\x4f\x3a\x5b\x0f\x38\x4f\x39\x74\xbb\x3b\x4f\x71\xda\x22\x5f\x62\x6d\xf7\x81\xbd\xf9\xa8\x51\xbd\xd3\x98\xba\x5d\xff\x79\xa7\xb9\xed\x1f\x77\x1f\xc2\xf5\xd3\xcd\xfa\xe3\xd7\xf6\xa3\xc5\xe6\x17\x98\x6e\x5f\xcd\xd8\xb3\x7f\xad\x6d\xdd\xc0\xe8\x45\x0f\x61\x82\x29\xb9\xfd\xbc\x7e\x7b\xd5\x6b\x60\x50\x9f\x0f\x93\xd3\xd1\xf7\x97\x16\x3e\xee\xce\x3b\xd3\xeb\xb8\x97\x36\x9e\x4d\xe1\x0b\x92\x31\xc2\x56\xd3\xf8\x41\xe2\x3c\x7a\x6a\xbf\x9c\x77\xe6\x96\x9c\xad\x99\xfd\xfb\x4f\x32\x2f\x4b\x80\x41\x62\x51\x43\x53\x80\xe2\x2f\xd4\xd3\xff\x1c\x99\x1f\x01\xd6\xa7\x21\xea\xce\x41\x5a\xe0\x1c\x49\xe8\xff\xe6\xf1\x96\x4d\x53\x3c\x58\x52\x29\x5a\xd4\xa0\x85\x76\x02\x50\x8a\x86\x5a\x52\x0c\x80\x71\x21\x79\xc5\x0c\x2c\x7e\x21\x25\x21\xb1\xa7\x5c\x04\xa0\x83\xa6\x69\x0b\xf9\x98\x2a\x9b\x2a\x25\xc8\x43\x66\xb3\x65\xec\x18\xe1\x97\xdc\xe4\x0f\xf8\x5a\x47\x5f\xb7\xbb\xed\x4b\x0b\xfe\x16\xde\x1c\x1a\x67\xcb\x99\x82\xc4\x78\xcd\xed\x81\x25\x6e\xec\x18\xb8\x9a\x41\xbb\xb1\xdf\xe2\xbf\xdb\x09\xf9\x37\xea\x93\x55\x93\x92\x72\xd1\x5d\x6d\xf8\xeb\x5e\xec\x0d\x30\x7d\x54\x2c\x0e\x81\x78\x49\x73\x5f\xf2\xe7\x7f\xd9\xa0\x63\x54\xb3\x88\x52\x28\x00\xde\xa4\x52\x8c\xaa\x30\x44\x81\x72\x1e\xf9\x7a\xdb\x49\x2f\xb3\x21\x64\x9b\x40\x49\x1d\x31\x14\xd8\x05\x78\x65\x3e\x85\x9b\x56\xe0\xad\xc9\x2b\x9a\x7c\x35\x4f\x5a\x82\x1a\xef\xef\x3b\xf7\xaa\xcd\x6b\x82\x3d\x3b\xb3\xff\xd5\x3a\xae\x4e\x1f\x77\x1f\xe2\xc4\x14\x4f\x49\xbe\x04\xe1\x6b\x08\x67\x18\xd9\xd6\x31\x88\x02\xd3\x5e\x39\x3d\xee\x83\x2b\xb5\xad\x9d\xc6\xb3\xa9\xfa\xed\xf5\xda\x2f\x37\x9c\x7b\x55\x84\x46\xb4\x37\x67\x43\x39\x1b\x3b\x0b\xe4\xdc\x31\x62\x3f\xbd\xbb\xff\x64\x89\xc3\x1c\xba\xe1\xf3\xe4\xdc\x6f\xf9\x0f\x9c\x91\xf8\xe5\xb7\xf5\x85\x4d\xf6\x7a\x8c\xb3\x0e\x82\xae\xe2\x56\x53\xe7\xe1\x7b\xe7\xe6\x77\xcc\xe4\xe6\xc5\x7f\xeb\xbe\x1b\x7c\x0b\x58\xb5\xbe\xae\xed\xfc\x88\x36\xbb\xbd\x39\xeb\xab\xe5\x11\x65\xf2\x28\x2b\x78\x88\xb6\x96\x3d\xf3\xf3\xfe\xdd\x0d\xf6\x6a\xa4\xc7\x6a\x3b\x4f\xf7\xef\xed\x38\x1b\xdf\x71\xba\x64\xb8\x76\xf6\x16\xa2\xda\xd6\xa4\x73\xf7\x59\xe3\xfd\x54\xfd\xf9\x0e\x5b\xd2\xc3\x8b\xb9\xbd\xf9\x13\x22\x1e\x48\x96\x5c\xbf\x17\xec\x5b\xf3\xa8\x91\x78\xc9\x51\x0c\xb6\x45\x1e\x27\xdd\x2e\x25\xd6\xa8\x65\x95\xc3\x20\x70\x88\xe1\x4b\x0b\xc7\x49\xe0\x15\x33\xf4\x8e\xc9\x09\xe3\x3c\xf6\xf7\x4c\xb7\xfa\x9f\x4a\x09\xe1\x99\xd4\xdb\x86\x01\x6d\xd8\x9e\xdb\x0c\x91\x76\x41\x0c\xa9\x1f\xa8\x77\x9c\x04\xc9\xe8\xc3\xaf\x0d\x04\xde\x13\x9e\x5d\xdd\xd6\x61\xda\x32\xe4\xf1\x07\xc1\xfc\x8f\x98\xd4\xba\x00\x9c\x81\x17\x86\xc6\x2f\xb8\x0e\x7c\x91\x5b\xce\xb7\x20\xbe\xb7\x57\xd6\x31\x87\xd9\xbe\xbe\xda\xf8\x6a\xcf\xbd\xbe\x10\x88\x93\xeb\x86\x81\xdc\x96\xa2\x42\x64\x33\x3b\xf5\x27\x2d\x1f\x48\x66\x84\xe9\xf9\x77\xdf\xd8\x57\xb7\xf7\x6f\xdf\x17\x54\xa2\x6a\x05\xfd\x92\x49\xb8\xcf\x85\x9c\x16\x93\x7f\xb8\xaf\x7a\x47\x60\xb9\xc4\x3e\xfd\x12\x35\x06\xd8\xd1\x36\xdb\x78\x33\x54\x8b\x92\x7c\xc5\x28\x92\x21\xbd\x00\xc4\x88\x27\xbb\x4f\x77\xc1\x5a\xcc\x09\xa6\x4d\xab\xa0\x57\x84\x21\xe4\x9b\xb3\x58\xba\xb6\xb5\x53\xdb\xfb\xc6\x9e\xbd\x0f\x57\x62\x57\x6b\x3b\x6f\x90\xdf\x19\xac\x34\xf6\xd0\x95\x23\x51\xc3\xe5\xe9\x05\x5a\x08\xd3\x05\x5e\xc6\x2b\x41\x09\xe0\x80\x0b\xa6\x81\xf5\xe0\xe5\x5a\x7c\x35\xff\x53\x2d\x13\xc5\xc8\x8f\xaa\x63\xd4\xf7\xa6\xf0\xeb\xcd\x14\x41\x8d\xac\xb8\xbd\x77\xcb\x59\xfb\xde\x59\x79\x81\x57\x88\x49\x11\x8e\x7f\xce\xe5\x94\x62\x51\xbf\x94\x2b\x2b\xaa\xc7\x0c\x9a\xc3\x7d\xeb\x7f\x93\x5c\xae\xa0\x9a\xa2\xdf\xbf\xc8\x96\xea\x2b\xa9\x29\xbb\x24\x4d\xf7\xa2\x93\x21\xf4\x5b\xd3\x73\xae\x47\xc5\xfd\x1b\x3c\x1e\xee\x1f\x00\x9d\x04\x7f\x04\x81\x7a\xbf\x10\xae\x3a\x82\x8a\xcf\x9c\x3d\x3d\xd8\xdd\xd7\xd1\x3f\xf8\x9b\x93\xbd\xfd\x67\x72\x27\x3a\x06\x3b\x48\x67\x6f\xcf\x60\x57\xcf\x20\xf9\xbc\xfb\xc4\x89\xae\x9e\x2f\xb2\x09\xec\xeb\xef\x3e\xd7\x31\xd8\x45\x40\x52\x4b\x12\x46\x8a\xfa\x90\x52\x74\x01\x1a\xbf\xf0\xce\x4e\x7f\x76\x73\x2b\xcc\xf6\xf6\xf6\x2f\xc8\x9f\xdd\xe7\xee\x8b\xd9\x6a\x19\x55\x0b\x05\xaa\x65\x2b\x84\x6b\xa8\x68\x6d\x82\xd5\xd0\x79\xf4\x95\xa8\xac\xa5\x8b\x62\x56\xed\xc5\xe9\xda\xd6\x42\x63\x72\x46\x50\x54\xb8\xc2\xe0\x61\x48\x58\x4a\xbf\x24\xce\x1e\x9d\x99\x6a\xbc\xdc\x12\x95\x0c\x52\xaa\x88\x23\x2f\xd1\xbb\x29\x90\x21\x4e\x8f\x4d\x64\x9b\x56\xca\x65\x92\x37\x14\x73\x54\xac\x7d\x10\x06\xe8\xf5\x5f\x9c\x6d\x51\xa7\x97\xcb\xfe\xc5\x19\x40\x0b\xa5\xc6\x15\x42\x88\xa0\x64\xb1\xc2\xfe\x69\x92\x28\x94\x95\x46\x84\xa0\x70\xc5\xf2\x60\x66\xc8\xb0\xa2\x8a\xb3\x85\x31\xb4\x0d\xa1\x61\xec\x27\x3f\x35\x5e\x3f\x8d\x97\xe8\x33\x63\x4a\x81\x72\x22\xe1\xa4\x02\x59\x70\x4a\x39\xee\x87\xab\x89\xfc\xff\x01\x0b\x35\xf8\x76\xbc\x50\x77\xf5\x17\xb9\x4a\xfd\x17\x04\xce\xee\xa1\x71\x8b\x9a\x70\x9c\x2a\xea\x8a\xd8\x5a\xb4\x37\xee\x36\xae\x4f\xdb\x6f\x5f\xb1\xf3\xfc\xde\x5e\xbc\xac\xfc\x30\xc9\xe5\xc6\xa4\x5e\x0e\x71\xc1\xb1\xac\x25\xdc\x93\x58\xd6\x72\x3c\x24\x24\x97\xb1\x60\xb9\x22\x78\xbf\xb3\xef\xac\xa0\x88\x7c\xd6\xbe\x7d\x25\x9b\xac\x50\x58\x0c\x03\x2e\x2b\x1a\x00\x6c\x15\xad\x94\x8b\x8b\x8d\xf7\x02\x6f\x57\x81\x32\xd3\x53\xb8\xae\x57\x9f\xd5\x77\x66\xf1\xc2\x49\x50\x9e\x5b\x14\xc2\x86\x33\x8b\x4c\xb2\xde\x16\x54\x53\x64\xff\xd4\xbf\x9f\xaa\x3f\x14\x40\x22\xb1\x62\xc2\x78\x01\x28\x27\x9a\x01\x60\x88\xc1\xea\x9e\x69\x40\x84\xa3\x61\x0e\x50\x54\x74\x3b\x90\x1c\x31\x23\x25\x66\x13\x66\x19\x09\x72\x8b\x54\x93\x28\x2e\x1c\x2b\xbe\xd2\x86\x84\xe5\x1a\xd1\x2f\x69\xde\x43\xa1\x47\x3b\x06\x55\xd4\xb9\x57\xf5\xd2\x86\x3c\x6b\xdc\xb9\x57\x6d\x5c\x7d\xe1\xac\x5c\xb3\x57\x57\x01\xdc\xc9\x67\x65\x38\xaf\xb9\x31\x58\xf9\x61\xef\xfe\x0e\x34\xca\x61\xe5\x10\x91\xc5\x51\x4c\x5d\xc1\x09\xbd\x13\xdb\xce\x70\x93\x78\x3b\xc3\x8d\xcf\xd8\x4e\xaf\x49\xc1\x76\x06\x75\x4c\x6a\x67\x53\x03\x83\x9d\x24\x6b\xa0\x29\x1a\xf5\xf6\xea\xaa\x78\xc8\x5f\x12\x0e\x9b\xa9\x15\x8f\x2a\x34\xbe\x30\x55\xf2\xa3\x3c\xde\x48\xd5\xc8\x11\x04\x71\x3b\x12\xe2\x4e\xc1\x87\x47\x48\xd9\xd0\xcb\xd4\x10\xe2\xc3\x7a\x65\x31\x25\xc3\xa9\x2e\xd6\xb6\x5e\x60\x4c\xd2\xfe\x57\x7b\x1c\x89\x6d\xe5\x5a\x6d\x6b\xb2\xb6\xf5\xc2\x13\x6a\xff\xf4\xad\x33\xf9\x5c\xa0\x1b\xa2\x1c\x4b\x96\x5c\x48\xb6\x15\x15\x06\x4e\x68\x88\x00\xec\xe3\x9a\xbb\x91\x80\xe6\x68\x10\x7e\x5f\xab\x08\x8d\xd0\x20\xf5\x73\xac\x24\x36\xad\xb7\x6f\x23\x42\x90\x40\x8f\x31\x71\xca\x74\x6d\xfb\x86\x30\x88\x13\x4d\x1e\x62\x55\x0c\x24\xc7\x1c\x1e\x66\x67\x4b\x53\x2f\x52\x42\xf3\xa3\x3a\xdc\x14\x7b\x0e\x76\xaa\x59\xc6\x78\x20\x43\xfc\x84\xbf\x69\x88\xf3\x8b\xe0\x1a\x0d\x3d\xdf\x08\xe8\xce\xbe\xda\xc2\x73\x7b\xee\x8d\xbd\xb8\x69\x3f\xfc\xb6\xb6\xfb\x18\xcd\xa9\x60\x12\x79\x58\x72\xbc\xe6\x6a\x51\x46\xb8\x81\xe7\x79\x61\xc4\xdd\xb0\x41\xe1\x72\x98\x1d\x3c\x85\x9a\xdf\x6c\xbc\x7e\xe7\xcc\x2d\xd7\x76\xee\x35\x5e\x0b\x50\x17\x9b\xe3\xa9\x55\x53\x74\x72\x6d\x7e\xb7\xb6\x25\xf8\x9c\xb1\x62\xdd\x53\x85\x49\x45\x5f\xba\xb9\x98\xfd\xf6\x15\xde\x71\x66\xa8\x07\x08\x50\x91\x9a\x28\x75\x3d\xce\xca\x0b\xef\x2e\x55\x50\x95\x2e\xdc\xf1\x90\x40\x27\xbe\x98\x77\xf8\x28\x49\x61\x74\xd1\x2f\x05\xe8\xb1\xa9\xe4\xc8\xcf\x32\x01\x69\xb2\x53\x8c\x2b\x13\x4c\x6e\x17\x59\xa4\x5b\x2b\xd0\x2f\x2f\x5f\x6e\x23\x06\x55\x4c\x5d\x43\xe4\xfd\x2f\x55\x2b\x34\xa4\xdb\xd8\x36\x6e\x5d\x30\x2d\xc5\xaa\x98\xde\x2b\x03\xf0\xa7\x78\x2a\x81\x5a\x71\x95\x7d\xdc\x9d\xb7\x17\x56\xed\x87\x8f\xe3\x6b\xfb\xb8\x3b\xbf\x3f\x39\x69\x5f\xdd\xae\x5f\x7f\xe3\x4c\x4e\x35\xd7\x27\x6d\x9d\xf0\x70\x25\x39\x93\x79\x65\x85\x1b\x0d\x6f\x8b\xa8\xb8\x45\x47\x32\x32\x6b\x70\x56\x2e\xa2\x6a\xa3\xd4\x50\x2d\xe4\x41\x53\x35\x2f\xaa\x56\xb4\x4e\x40\xe0\x2c\x6e\x26\xf5\x9d\xe7\xce\xb5\xf7\x1c\x8e\xf6\xee\x63\x21\xf9\xbe\x5b\xd5\x98\x17\xbe\xe6\x6e\x03\x9d\x27\x2f\x0c\x0c\x76\x9c\xea\xee\x39\x75\x61\xb0\xfb\x4c\x57\xef\xd9\x41\x77\x4d\x13\x7e\xd5\xd0\xe2\xdf\x5c\x9e\x87\xae\xa1\x3a\x01\x61\x2d\x29\xd6\x3f\x78\xb6\xef\x20\x8a\x05\xcb\x67\x52\x4c\x46\xce\xe2\x3c\xbe\x5a\xdf\xf8\x45\x54\xce\xb4\x7c\x27\xa5\x70\xf9\xb8\xee\xfc\xb8\x86\xbe\x29\x89\x98\x4a\x19\x4f\xab\xa2\x21\x89\x62\x30\x3d\xc2\xb9\xfb\x66\xff\xee\x6b\xd1\xf0\xe4\x10\xcb\xc2\xbb\xa8\xbb\xfb\xf7\x97\x04\x25\xf5\xfc\x45\x99\xa9\xb1\x7f\x7b\x4a\x88\xdb\x22\x5f\x00\x25\x4b\x1f\x16\x14\xce\x44\x28\x29\x6a\xaa\x64\x87\x95\x85\x3f\x02\xcb\x7f\xa6\xe9\xab\xe9\x1a\x19\x52\x4c\x35\x9f\x74\x46\xdf\x7f\xf4\xad\xbd\xba\xed\xac\xf0\x88\x04\xa1\x34\x09\x48\xab\xa8\x0c\xdc\xe2\xab\x05\x2f\x48\x97\xdf\x0b\x71\x2c\x02\x51\x37\x54\xdf\xd5\xb6\x17\xf0\x5e\x08\x3d\xa3\xce\xca\xb6\x6c\xf5\x10\xe3\x3f\x60\x8a\x88\xb0\x94\xf8\x42\x49\x52\x8c\x9d\x59\x44\xe7\x72\x38\x2d\xc4\x97\x63\x76\x11\xba\xaa\x85\x57\x4e\xcc\x28\x42\xf7\xa4\x44\x84\xe7\xfa\x9e\x98\x68\xef\xd1\xb5\x3f\xb0\x2f\xcc\x63\x06\xcc\x0e\x3c\xf2\x4b\x6e\xb5\x58\x15\x7e\x42\x9d\xb8\xbc\xa0\x7e\x21\x57\xb6\x0c\x8b\x46\x92\xd8\x2e\x6d\xad\xa4\xaf\xa4\xe5\x74\x43\x34\xb2\xea\x3f\x54\xed\xc5\xef\x45\xc5\x90\x1d\x53\x98\x10\x24\x76\x28\x25\x90\x5d\x71\xf0\x39\xd1\x55\x3a\x64\x96\x8a\xa6\x36\x66\x84\x8a\xd6\x12\x83\x96\x75\x4e\xa4\x90\xed\x1e\xcd\x9f\x87\xcc\x60\x12\x4d\x6c\x6f\x0a\xa2\x95\x93\x4a\x94\xa8\x21\x11\x59\xe2\x16\x01\x70\x74\x81\x28\x96\x65\xa8\x43\x00\xac\x5c\x50\xcd\x8b\x17\xa0\x97\x8e\xb8\xc0\xef\xa2\xef\x0b\xc0\xee\xec\xc8\xba\x32\x89\x07\xd4\x50\xe9\xf4\x55\x7a\xd6\x56\x2b\x35\xfa\x85\xd3\x57\x88\x3b\x4a\x2b\xb5\xf1\x92\xe9\xab\x82\xf4\xa1\x56\x6a\xc2\x82\xa2\x8a\xd8\xba\xe4\x52\x01\x11\x88\x8e\x17\xcd\xa4\xf7\x8f\xea\x77\xee\x73\xc8\x53\xc9\x84\x4c\x96\x94\x52\x86\xbc\xb8\xa0\x60\x45\xcb\x59\x8a\xf0\x0e\x54\x58\x48\x13\x77\x29\x0f\x50\x90\xdc\xe9\xa4\xc2\xbf\x49\x40\xbe\xe1\xdb\x83\x48\x07\xc9\x0e\x9f\x1e\x2a\x27\x25\x48\x4e\x5a\x48\x96\x44\xf4\x95\x56\xc8\x29\xe4\x92\xc4\xd4\xa0\xc1\x70\x69\xb9\x0c\xc9\xb6\xc6\x85\x48\x36\xa9\x70\x40\x64\xa6\x51\xc6\x8b\x5e\xc0\xa2\x17\x46\x2a\x6a\x81\x74\xf7\x64\x73\xee\xbb\x32\x0e\x52\x58\xfe\x15\x04\x45\xe1\x72\x57\x78\x3d\xf4\x53\x6d\xfb\x07\x41\x41\x55\x3c\x80\x1a\x57\x5f\x08\x0a\x49\xf2\x8c\x65\x39\xc3\x01\xc4\x07\xe1\x71\x3b\x08\xd8\x20\xda\xcc\x40\x4e\x82\x04\x61\x59\x73\xd4\xa3\xe3\x0a\xdc\x54\x15\x54\x53\x76\xb7\x3a\x30\xf0\x39\xe1\x44\x5c\x6f\x5f\xd5\x21\x9e\xb0\x25\xf1\xec\x98\x8f\xbd\x90\x5c\xd1\xca\xba\x9b\xc8\xb4\xd1\x5a\xa5\xfc\xba\x18\x0e\x09\x47\x82\xf9\xfb\xa2\x90\xaf\x50\xe5\xe1\x12\x09\x97\xcb\x09\x1a\x78\xad\x3e\x12\x46\xa5\x48\xa5\x08\xf6\x42\xb4\x24\xc1\x6e\xc9\xa0\x94\xf7\x0d\x86\x85\xc1\x19\xfb\xb7\xe6\xd8\x21\x09\xe0\x1e\x10\x96\x95\xb4\xfa\xe5\x7f\xd5\x2f\x1e\xf8\xd2\x2d\xb6\x2c\x43\x3f\x36\x7d\xd4\xac\x0d\xcb\x50\x17\x3b\xe9\x06\xbf\x9b\xa8\x2e\x69\xf3\x9c\x95\x17\x19\xfa\x32\x40\x27\x79\x90\x1a\xa5\x8d\xb4\x24\x31\x0d\x98\x4b\x2e\x5c\xbe\x2c\xc5\xb0\x80\xfa\x25\xdb\xd6\xc2\x8a\x25\x99\x50\xc8\x9c\x27\x14\x20\x3c\xce\xc8\x4e\x31\x78\x6f\xdc\x52\x41\xbd\x5c\x96\xfa\xba\xc0\x95\x27\x2d\x4c\x14\xc8\xce\x39\x46\x0c\x5a\x50\x0d\x9a\x17\x5e\x8c\xac\xac\x23\xf9\x09\x39\x46\x9c\x1f\xd7\xf6\xaf\xde\xb4\x5f\x3e\xb0\x97\xbe\xb6\x97\x16\x12\x2a\x62\xa6\x6c\xb6\x13\x22\xd2\xc9\x28\x16\xcd\x6e\x06\x4b\xbe\x3a\xde\x02\x8a\x8b\xe9\x15\x88\xc4\xd4\x68\x1e\xf2\x0b\x10\xa4\x03\xae\x3c\xa8\xd1\x86\x49\x64\x23\x3e\x7d\xd6\xa8\xd8\x81\x2a\xa8\x02\x58\xcf\x52\x5c\xfb\xc9\xe8\x03\x83\x42\xe4\x4e\x8f\x80\xbb\x43\x2a\x70\xbc\x2c\x1c\xb2\x3f\xed\xd8\xdf\x0a\x6c\xd9\x8a\x92\x8d\x4a\xbd\xa2\x5d\xd4\xf4\x4b\x9a\x4b\xc0\x24\xf4\x07\xb3\x65\x68\xf5\xa9\xf3\xe8\x2b\xe1\x9d\xab\x47\x89\x27\xbe\x10\x94\x39\x79\x2a\x86\xe8\xe2\x5a\xc8\x61\x56\x31\x84\xb1\x30\xd2\x32\xa2\xc5\xeb\x6c\xff\x69\xd1\xca\x55\x91\x81\xf0\x70\x68\x10\xc8\xa9\x12\x0b\x10\x1a\xf4\x32\x36\xaf\x0a\x07\x7b\xe1\x48\x2d\xa9\x02\x1e\xc5\x92\x3c\x60\x4c\xa9\x26\x41\x04\x17\xb1\xac\xcc\xcc\xea\x63\xd4\x18\xd2\x4d\x64\x84\x76\xe9\x9a\x87\x8b\x8a\x68\x55\x17\x0a\x69\x31\x4f\x7f\x5c\x7c\x34\xb9\x27\x08\x97\xe2\xd4\x66\x3c\x6f\xe2\xf2\x65\xf2\x59\x80\x6a\x1a\xbc\x7b\x3e\x9b\xd3\x80\x65\xa8\xda\xc8\xe5\xcb\x22\x3e\xc8\xa8\xac\x8f\xbb\x73\x3e\x33\x94\x40\x96\x90\xf6\x11\x8d\x5b\xd7\x39\x79\x9a\x4d\x3b\x36\x38\xd2\xc6\x90\xc6\x17\xcf\x16\x59\x3a\x31\xd1\xfe\x07\x55\x53\x0c\x1e\x3b\x11\x24\xe0\x8e\xb4\x22\xd3\xf7\x9d\x98\x68\xef\x3c\xe9\x42\xce\x95\x55\x71\x03\xbc\xb7\x3a\xfa\xba\x93\x45\xc9\x40\x9d\x82\xef\xc9\xb0\x9c\x00\x0e\xab\xa2\x59\xbd\xc3\xee\xc5\xf8\xe5\xcb\x5e\x0e\x9a\x28\x24\x29\xb6\x50\x6d\xeb\x85\xfd\xf6\x15\xe6\x2e\x09\x23\x88\x58\x49\x0c\x52\x74\x71\xc2\x12\x62\x16\x21\xea\xb0\xb6\x0d\x40\x74\x91\x92\xce\x8f\x82\x93\xf7\xc4\x44\xfb\x09\xd5\xbc\x08\x10\x63\x97\x2f\x13\x7d\x98\xf0\x27\x1c\x69\x50\xdc\xaa\x40\xb1\x8f\xbb\x73\xf6\xcc\x4f\x91\x92\xb2\xb1\x7b\x42\xbf\xa4\xb9\xaa\x49\xc2\x9d\x22\x6f\x3a\x3f\xae\x25\x07\x40\xc5\x06\xb6\x9c\xd7\x06\xbb\xfb\x8e\x13\x0f\x15\xed\xa4\xfb\x2d\x02\xf0\x66\x2e\x40\x59\x20\xf3\x1c\xd2\xc8\x31\x7d\x33\x08\x51\x26\xf9\xd4\x71\x55\x47\x59\x8e\x45\x0a\xf8\x78\x66\x1b\x4f\x22\x18\x66\x3c\x04\x2b\x90\xb5\x2c\x1b\x35\xe0\x1e\x3e\xaf\x9d\xb7\xe0\xbf\xd8\x74\x0f\x64\x0f\x93\xbf\xdc\x2c\x31\x72\x69\x94\x62\xaa\xe6\x79\x56\xb2\xaf\x62\x8e\x7a\x1a\x9d\xff\x07\x38\x2e\x01\x8d\x9e\x9b\x39\x79\x49\xb5\x46\x55\x2c\x80\x26\x29\x33\x76\x00\x05\x80\x27\xca\x98\x1e\x6b\x36\x87\x90\xce\xeb\x05\xda\x7e\x5e\x3b\xaf\xb9\x9d\xef\x69\x12\xee\x7b\x93\xd2\x58\xcc\x1f\x2f\x46\xda\x0c\x49\x89\x07\xb6\x23\x05\x5a\xb6\x46\x39\xa9\xa1\x87\x72\x27\xff\x5e\xc1\xae\xf2\x3e\xd5\xce\x02\x66\xf0\x84\x80\x12\xb7\x97\x90\x53\x12\x69\x4a\x11\x1a\x84\x1b\xde\x47\xa2\x9d\x77\x84\x38\x77\xdf\x7c\xdc\x9d\xf7\x32\xe7\xfc\x86\xf0\x78\xc3\xc0\x70\x88\xeb\x12\x6f\x34\x78\xc0\x40\xec\x8c\xe6\x03\x27\x7a\xd0\x40\xcd\xe2\x04\x98\x7d\xce\xdb\x9f\x78\x50\x18\x24\xa3\x25\xe0\xf7\x05\x3a\x07\x47\x50\xe5\x40\x90\x82\x41\x71\x71\x13\x22\x01\x66\x50\xa8\xe3\x49\xcc\x10\x64\x4b\x97\x56\x1c\x27\x97\x74\xe3\xa2\x49\x2a\xc0\xd9\xde\x79\x92\x04\x76\x6b\xb6\x3a\x9d\x51\xbe\x54\x4b\x95\x92\x47\xbf\xd8\x8e\xb8\x36\x3c\xe6\x5c\x35\x49\x84\x9e\x51\x32\x70\xfc\x7a\x6b\x3b\x33\xfb\x93\xd3\x48\x90\xe3\xd6\x79\x2e\xa6\x32\x62\xdf\x9a\x6f\xfc\xf2\x55\x6d\x6f\xc1\xe3\xce\x74\xa6\xd7\x3d\xca\x5b\xe7\x5e\x35\x5a\xbd\xec\xdb\xf8\xf5\x73\x5f\x8e\x19\xd3\xde\x7e\xee\xe6\xf1\x24\xfe\xf7\x43\x69\xf1\xfe\xca\x64\xe3\xd9\x54\xb0\xad\xcd\x15\x1d\xb0\x75\x45\xcc\x55\xf7\xc0\x36\x31\xdf\x52\xa2\x5c\xa4\x00\xdb\x2a\x24\xa9\x23\x81\xc0\x2e\x24\x8d\x77\x4d\xa0\x2c\xc1\x6b\x42\x21\x69\xa3\xda\xd8\x20\xa1\xa5\xf0\xd6\x7b\x86\x96\x12\x77\x5e\xbf\x90\xbf\xf1\xfa\xe5\x64\xfb\x6e\x58\xcf\x74\x6d\x8c\xb4\x2d\x65\xab\xfc\x22\x67\x5a\xa9\xe7\x4c\x96\x8a\x06\xd4\xff\x64\x1d\xf8\x25\x84\x2e\x54\x4a\xee\x47\x31\x03\xdf\x33\xdb\x49\x09\x24\x9b\xd8\xc5\xe7\xb5\x1e\x1d\x30\x4b\x00\xe9\x26\x80\x8f\x22\x9a\x77\xbf\x6b\x3f\xda\x7e\xf4\xbf\x67\xc3\x61\x67\x15\xea\x05\x5a\x44\x24\x60\xe2\xfe\xe9\x9a\xc1\x69\xce\x7c\x72\x11\x09\x29\x70\x13\x13\xed\xbd\x6e\xec\x17\x17\x20\x4d\xd1\x8a\x79\x3f\x61\xba\x45\x5f\x57\x35\x52\x36\xf4\x11\x43\x9c\xa4\x18\x53\xc8\x75\x95\x3e\x6c\xac\xcd\x0b\x61\xb9\x62\xca\x99\x95\x7c\x9e\x52\xf1\xa9\x37\xae\x39\x6f\x5f\x39\x73\x4b\xf6\x75\x41\x9a\x46\x53\xe8\xb8\x47\x80\xae\x10\x13\x8e\x3d\x44\x37\x20\x12\x1d\x43\x04\xc5\x15\x47\xc4\x60\x5c\x7d\x6d\x6b\xdb\xde\xb8\x5b\xff\xf1\x59\x6d\xeb\x95\x33\xb7\x5c\xff\xcb\xb6\x3d\xb9\xdb\xb2\x26\x07\xd5\x20\x43\xdd\xa9\x23\xf1\x9b\x8b\x26\x87\xde\xc3\x46\x83\xf1\x04\x80\x88\xda\xa7\x1b\x16\x9b\xe4\xc9\x11\x01\xa2\x92\x5e\x46\x83\x2c\x58\xc0\x05\x60\x35\xdd\x35\x50\x1a\x3d\xd0\xf4\xb6\x57\x87\x58\x3a\xc6\x07\xb8\x7b\x17\x6e\x04\x83\xba\xa5\x14\xdd\x47\x3e\xf8\x49\xfa\x58\x02\xd2\x2c\x99\x1d\x3b\x39\x40\x86\xbb\x6f\x84\xaa\xa9\x6d\xbd\x90\xed\x1e\xee\x99\xc5\x6d\x59\x82\xc3\x37\xa6\x44\x6d\xeb\x85\xcc\x0d\x8c\x00\xb4\x70\xd3\xef\xaa\x94\x70\xf3\x1f\x53\xc2\x6b\x64\xb2\x57\x40\x52\x1f\xf9\x8c\x1d\x3e\x31\xdb\x4e\x7a\xa7\x93\xaa\xfa\xa8\x34\x89\x36\x56\x64\x75\x6c\xf7\x4e\xad\x31\x47\x46\xee\x19\xe5\xbf\x84\x0f\x54\x48\x40\xe2\xe3\x0e\xa1\x2b\x43\x62\xe0\xb9\x95\x47\x56\xd9\x0f\x93\xd3\x01\x43\x3d\x46\x09\x67\x6e\x59\xa0\x05\x3b\xc3\x7c\x3f\xe9\xac\x3e\xe5\x70\x36\xe0\x2f\x91\xd9\x7d\x48\x2a\xca\xbd\x58\x0a\x0f\x12\xad\x18\xc5\x36\x52\x46\xba\x7a\x7e\x7d\x49\x14\x7c\x0a\x9c\xb5\x00\x70\x72\xfc\x37\xbf\x19\xd7\x2b\xc6\x05\x83\x96\xf5\xf6\xbc\x5e\x12\x37\xd3\x25\x2e\xbd\xe9\xdc\xab\x22\x84\x2b\x3b\x58\x9d\xed\x3f\x8d\x18\xab\x78\xf7\xc9\xb3\x9a\xf0\x29\x92\xca\x0a\xea\x11\x36\x85\x9b\x75\xcc\x38\x85\xb3\x91\x45\x0b\x68\xae\xb8\xa6\x8a\x6b\xa7\x34\x4d\x72\x89\xee\x99\x85\x7a\xc3\x11\x14\xfd\xbf\xbe\xf8\xff\x03\x00\x00\xff\xff\x9e\xc6\x6f\x12\x00\xa1\x03\x00") + +func cfI18nResourcesZhHansAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesZhHansAllJson, + "cf/i18n/resources/zh-hans.all.json", + ) +} + +func cfI18nResourcesZhHansAllJson() (*asset, error) { + bytes, err := cfI18nResourcesZhHansAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/zh-hans.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _cfI18nResourcesZhHantAllJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x7b\x57\xdc\x46\xb6\x28\xfe\xff\xfd\x14\xf5\xf3\xf9\x83\x64\x16\xdd\x76\x32\x39\x77\x9d\xc5\x5d\x77\xdd\x43\x30\x71\x38\xc1\xc0\x01\x9c\x99\xdc\x30\x8b\x88\x56\x01\x1a\xab\x25\x8d\xa4\x86\x30\x0c\x77\x35\xc4\x04\x88\xc1\x76\x12\x1b\xbf\x88\x5f\xb1\x31\x71\x02\x76\xec\xd8\x26\x80\xc9\x87\x71\x4b\xdd\xfd\x97\xbf\xc2\x6f\xd5\xde\x25\xb5\xfa\x51\x6a\xf5\xcb\xce\x9c\x7b\xcf\x59\x6b\x82\xd5\xd2\xde\xbb\xaa\x76\xed\xda\xaf\xda\xfb\xd3\xff\x46\xc8\xec\x7f\x23\x84\x90\x23\x8a\x7c\xa4\x83\x1c\x19\xd1\x46\xb4\xe1\x9e\x81\x8e\x11\xed\x48\x3b\x3e\xb7\x4d\x49\xb3\x54\xc9\x56\x74\xcd\x7b\xc1\x3d\x7f\x21\x7b\x77\x8f\xbd\xf3\xdf\x08\x99\x6b\xaf\x04\xe3\x13\x3d\x65\x92\xff\x18\xea\xef\x23\x96\x6d\x2a\xda\x04\xb1\x66\x34\x5b\xfa\x9c\x28\x16\x51\xb4\x29\x49\x55\xe4\x38\x21\x03\xa6\x6e\x50\x33\xf0\x93\x3d\xa9\x58\x1d\x84\x24\xc6\x89\x45\xed\x98\x99\xd2\x34\x45\x9b\x88\x51\x6d\x4a\x31\x75\x2d\x49\x35\x3b\x36\x25\x99\x8a\x34\xa6\xd2\xd8\x84\xa9\xa7\x0c\xd2\x36\x3b\x72\x44\x93\x92\x74\xe4\x48\xc7\xc8\x91\x29\x49\x4d\xd1\x91\x23\xed\xe5\x8f\xe6\xda\xc2\x46\xb3\xb0\x95\xbd\x76\x06\x89\x75\xb6\x2f\x67\x76\x1f\xe7\x1e\xdc\x70\x9f\x5c\xca\x9e\xb9\xed\x5e\x5a\x7e\x99\x5e\xc8\xcf\xff\x90\xbd\xf4\x2c\x7b\xed\x0c\x7f\xbe\xb0\xd7\xd1\x12\x12\x5b\x3a\x99\x96\x2d\x4d\xfc\xce\x27\xb3\xa9\x24\x0a\x26\xf3\x0f\x64\x78\x92\x5a\x94\x58\xd4\x9c\x52\x12\x94\x18\xaa\xa4\x59\x64\x52\x9a\xa2\x44\xd2\x88\x64\x59\x7a\x42\x91\x6c\x2a\x93\x84\x6e\xd9\x71\xd2\x65\x52\xc9\x66\x33\x2e\xf9\x5f\x28\x9a\x65\x4b\x5a\x82\x92\x69\x45\x55\x89\xa2\x25\x52\x26\x4c\x35\x7e\x21\x9c\x9a\x3f\x90\x7c\xfa\x6a\x66\xef\xba\xbb\xb1\xe6\x9c\xbd\xea\xae\xff\xea\xde\x5e\x76\x37\x56\xf2\x97\x37\x72\xf3\x0f\xb3\xd7\xce\xb8\xcb\x17\xdc\x8d\x9f\x5e\xa6\x17\x9c\xfd\xbd\xec\x8f\x67\xf1\x35\xe7\xe1\x66\xe6\xf0\xac\xbb\xf1\x45\xf6\xe2\x9d\xec\xc5\x9b\xee\xf6\x5d\xff\x35\xd1\x00\x3b\x0d\x83\x58\xb6\x64\xda\x54\x0e\xd9\xc3\xce\xf3\xc7\xce\xa5\x9b\xce\xd9\x4b\xee\xd2\x4a\xf6\xe2\x56\x76\xeb\xac\x73\x70\x5e\xbc\x9f\x39\x50\x9b\x92\xc4\xa4\xa4\x4d\x50\x99\xd8\xba\x87\xa5\x9d\x8c\xa5\x6c\xa2\xe9\x36\x25\xf6\xa4\x64\x13\xc5\x26\x93\x92\x45\x8e\xf9\x13\x65\xc5\x85\x84\x84\xe1\x9b\x9d\x8d\x77\x1a\x46\x9f\x94\xa4\x73\x73\x64\x5a\xb2\x3c\x7c\x24\x65\xb1\x05\xe1\x53\x9e\x4c\x4a\x9a\x4c\x3e\x9b\x9d\x8d\x77\xe1\xdf\x73\x73\x9f\x85\x8f\x3b\xf3\xe2\xb7\xec\xc5\xad\x7c\xfa\xaa\x93\x3e\xeb\xae\x2e\x65\xf6\xef\x92\xb6\xe0\xe7\x6d\xa4\x7c\x66\x8a\x88\x11\x4f\x53\x9f\x4e\x24\x43\x21\x54\x93\x0d\x5d\xd1\x6c\xc6\xd4\x62\x86\x70\x37\x1e\xe4\xb6\xb6\x9d\x9d\x6b\xa4\x73\xa0\x87\x64\x7f\x7c\x98\xdf\xbf\x11\xb2\xae\x83\x7a\x8a\xcd\xb0\x4e\xc6\x28\x49\x69\x49\xc9\x30\xa8\xcc\x76\xb9\xa6\xdb\x24\x91\x32\x4d\xaa\xd9\xea\x0c\xe1\xcf\x6d\x9d\xd8\x93\x94\x48\x86\xa1\x2a\x09\xc0\x29\xa6\x23\xb7\x39\xef\x9c\x5f\x77\x9f\x2d\x3b\x8f\xd6\xdc\x2b\xb7\xd8\xce\x7c\xfe\xd0\x39\xfc\x3a\x7b\x7d\xc7\x59\x59\x73\x37\x1e\xe0\xf3\xdc\xd2\x93\xe0\x8c\x84\x50\xca\x8e\x0f\x42\x4e\x59\x94\xb4\x25\xc6\x49\x52\x32\x4f\x53\xdb\x50\xa5\x04\x25\x31\x8b\x0c\x75\x0f\x7e\xdc\xd3\xd5\xdd\xc6\x48\x9c\x52\xe8\x34\x91\xa9\x95\x30\x15\x83\xd1\x63\x11\x7d\x9c\x28\x9a\xac\x4c\x29\x72\x4a\x52\xf9\xde\xd4\xc7\x89\x44\x26\x94\x29\xaa\x79\x5b\x30\x64\x4e\xf1\x60\x22\xb8\xc6\x61\xf8\x5f\x1d\xac\x66\xf6\xef\xb9\x0f\xee\xe4\x36\xd7\xb3\x4f\x37\x9d\x9d\x6b\xb8\xe3\xb2\xd7\xce\x38\xe9\xb3\xce\xf2\x3d\xdc\xa1\xb9\x07\x0f\xdc\x2b\xe7\xaa\x0d\xb6\xd3\xb2\x94\x09\x8d\x98\xba\x4a\x2d\x32\xad\xd8\x93\xc8\x51\xb8\x2a\xa7\x2c\x6a\xce\xcd\x81\x80\xd3\xcd\x89\x18\x7b\xa9\x8d\x30\xa6\xad\xfc\x8e\x65\x48\x09\x8a\x6f\x45\x1e\x66\x15\x64\xce\x37\xab\xd5\x91\x91\xcc\xe1\x97\xee\xea\x92\xfb\xcb\x61\xee\xfe\x37\xb9\x95\xc7\xa1\x03\x86\xc5\x65\x10\x3f\x18\x96\xcc\x09\x6a\x07\x36\x0f\x63\x3d\x78\x46\x34\x3a\x4d\x00\x41\x4d\xe3\x28\x87\x98\xd9\xbf\xe7\x3c\x5a\xca\x5e\xdf\x71\xb7\xae\xe6\xb6\xb6\xb3\x0b\x7b\xee\xfa\xa3\xec\xb5\x33\xd9\x1f\xf6\xf2\xeb\xdf\x46\xa3\x53\x44\x9f\x6e\x4e\xd4\x44\x5d\x04\xaa\x9e\x9e\xc9\xfe\x7a\x31\x94\xaa\x14\xdf\x1a\xaa\x3e\xa1\x68\x24\x26\x81\x00\x88\xc5\xac\xd3\x8a\x11\xb3\x2c\x35\x06\x27\x3a\x10\xd2\x46\x74\x13\x5e\x65\x62\x25\xe4\x2d\x26\x8d\x53\x86\x61\x52\x0b\x8f\x7d\x42\x4d\x53\x37\x6b\xd9\x26\x51\x68\x71\x97\xd7\x23\x10\xc3\x77\xd6\x57\x5f\x3b\xcb\xcf\xdc\xed\xbb\xf9\xd5\x87\xb9\x07\x77\x85\xf3\xa1\x18\x38\x1f\x9f\x49\xb2\x1c\x33\xd4\xd4\x84\xa2\xc5\x4c\x6a\xe8\x9f\xf9\xb2\xdd\xd6\x89\x24\xcb\x84\x3d\xb4\x44\x3b\xbf\x32\x78\x42\x48\xd7\x07\xa3\x7d\x9d\x27\xbb\x49\x42\x37\x66\x62\x96\x9e\x32\x13\x94\x0c\xf5\x9f\x1a\xec\xea\x8e\x75\x0e\x0c\x90\xe1\xce\xc1\x13\xdd\xc3\xf0\xe7\xa7\x31\xcb\xfb\xe7\xd0\x40\x67\x57\x37\xf9\x34\xa6\x7b\x0f\xfa\x07\x4f\xfc\xe5\x2f\xe4\xd3\x58\x4c\xd3\x63\x26\x85\x73\xe8\x2f\x35\x9e\x69\x84\x90\x7e\x10\x72\x92\xaa\xce\x10\xc3\xd4\xa7\x14\x99\x12\x89\xa8\x8a\x65\x33\x11\x07\xa3\x8d\xc9\x54\x55\x92\x0a\x3b\xe4\x6c\x69\xc2\xc2\xf3\x14\xd4\x8c\x31\x4a\xa6\x4d\xc5\xb6\xa9\xe6\xc9\xf6\x8f\xbb\x3a\x07\x46\xb9\x34\x1b\x22\x01\x95\x89\x78\x2a\x13\x19\xd7\x4d\x22\x69\x33\x64\x4c\x4f\x69\x72\xf0\x30\x10\xce\x23\x21\x24\x3f\xbf\xeb\x7e\xbb\xe4\xa6\xef\x3b\x1b\x8f\xdc\xf3\x17\x32\x87\xd7\xf3\xe9\xcb\xf9\xfd\x1b\xce\xce\xb5\xec\xa5\x55\x77\xeb\x6a\xf6\xe7\xbb\xee\xee\xa2\xb3\xbe\x83\x0b\x9d\x5f\xfa\xce\x79\xb4\x96\xd9\xdf\xcf\xbc\xb8\x94\x4f\x7f\x9f\x7d\x7a\x81\x29\x33\x81\x93\xc2\x79\xf8\xa3\xb3\x78\xaf\x84\xde\xec\x37\x8f\x9c\x3b\x5f\xe4\x76\xbe\x72\x2f\xed\x0a\xa5\x6b\xe5\x39\xe3\x87\x40\xcc\x32\x68\x42\x19\x57\x12\x24\xa1\x6b\xe3\xca\x44\xca\x84\x51\x10\x43\x32\xa5\x24\xb5\xa9\xc9\x74\x63\x22\x11\xe0\x4c\xd4\x47\xf5\xb1\xbf\xd2\x84\x4d\x14\x2d\xa6\x2a\x1a\x8d\x8f\x68\x01\x06\x49\x19\xb2\x64\xd3\x98\xa7\xe4\xc5\x12\xd1\x55\x4d\xa6\xf6\x8a\x96\x77\x5c\x51\x29\x23\xd0\x96\x14\x0d\x14\xf7\x06\x89\x8f\x13\xc0\x35\x3c\x49\x89\x21\xd9\x93\x1e\x33\x04\xbe\x43\x8c\x92\xc6\x58\x86\x69\xb4\x63\x96\xae\x32\xcd\x41\x37\x89\x49\xd9\x4a\x4f\x15\x3e\x45\xfa\xaa\x4d\xc4\x40\xe7\xf0\x87\xa3\xc3\xfd\xa3\x1f\xf4\xf4\x76\xf3\xb1\x76\x7f\x2e\x25\x0d\x95\x32\xc6\x2d\x23\xb1\x03\xde\x98\x85\xff\x25\x84\x8c\x1c\x49\xa8\x29\xcb\xa6\xe6\xa8\xa6\xcb\xd4\x1a\x39\xd2\x51\xf8\x0d\x7f\xd6\x53\x9a\xcd\x1e\xff\x6b\x7b\xd1\xf3\x24\x4d\xea\xe6\xcc\x68\x72\x8c\xfd\xf6\xce\xb1\x77\xdf\xf3\x7e\x9d\x83\x3f\xe6\xa2\xb1\xb0\xb3\xb1\xe5\x6e\xac\xb8\x97\x96\x99\x5e\x73\x7b\xd5\x59\xbc\x8f\xb4\x66\x57\x7e\xc8\xec\x3f\xcb\xec\x6e\x23\x8f\xf3\xc3\x7f\xe5\x57\x67\xe7\x5a\x7e\x71\x2d\xfb\x62\xc7\x39\xff\x05\xf2\x66\x93\xd9\x44\x44\x5c\x45\xb2\x9c\xd5\x45\xe7\xc2\x8f\x22\xe2\xd8\x46\x7b\x70\xd1\xbd\xbd\xec\x51\x89\x8f\xf1\x99\xaf\xc7\x39\xe7\x1f\x32\x79\x7c\xe5\xa1\x7b\xf3\x02\x53\x79\xbd\x5f\xb3\x4f\x2f\x31\xcd\x6e\x79\x3d\x7b\x7d\xd7\x79\xb4\x86\x2f\x57\x1f\x6f\x05\x6e\xa8\x38\x86\xec\xc3\x33\x99\xc3\xb3\xaf\x8d\x19\xde\x80\x00\xe9\xe0\xc3\xf7\xe6\x6a\x4c\xd1\x64\x7f\xa6\x3a\x07\x06\xf0\x29\x17\x79\xa3\x3d\x7d\x43\xc3\x9d\x7d\x5d\xdd\xff\x17\x8b\x96\xe8\x13\xd4\xa8\xc8\x31\xa8\x99\x54\x2c\x8b\x1d\x75\x8c\x61\x46\x8e\x98\x54\x92\x63\xba\xa6\xce\x8c\x1c\x79\x8d\xd2\xe3\xf5\x71\xc8\x3f\x97\x54\x69\x88\x11\x6a\x91\x36\x11\xf8\xe0\x77\x20\x38\x12\x26\x0d\x0a\x59\x3e\x0f\x64\xa0\xb7\xb3\xef\x9f\x48\x7c\x34\x5f\x7a\x34\x3a\x4f\xff\x37\x2b\x2e\xaf\x9b\xc7\x7e\xdf\x02\xa8\x05\x9c\xf4\x7b\x56\x7a\x06\xd8\x36\xb2\x26\xf5\x94\x2a\xc3\x6e\x23\x7f\x57\x0c\xd8\x51\xed\x44\x22\x29\x53\xc5\x2d\x56\x78\xc8\xec\x44\xa2\xea\x09\x49\x25\xb2\x62\xd2\x84\xad\x9b\x33\x71\x32\xa0\x5b\x0a\xec\x7d\xc5\x22\x12\x31\xe0\x5f\x53\x94\x28\x9a\x4d\x27\xa8\xd9\x4e\x2c\x6a\x5b\xc4\x30\x15\xdd\x54\xec\x99\x76\x70\x69\x29\x16\xb1\x74\x70\xd2\x8e\x9b\x7a\x92\xa8\xfa\x34\xb5\x6c\x86\x6d\x52\x99\x98\xa4\x62\xf7\xb8\x47\xb3\xbb\xb4\x92\xfb\xe1\xb1\x7b\xe5\x21\x10\xe7\x71\xc1\x7c\xe1\x1f\x6c\xbe\x4f\x0d\xf6\xbe\x3a\x58\x75\x97\xd7\xdd\x8d\x9f\xb2\x3f\x3e\xcc\x5e\xdf\xc9\xaf\x9e\x79\x99\x5e\xf0\xe9\x65\x4c\xb1\xfd\xbd\x7b\xe9\x17\x50\xe0\xe7\xd1\xcb\xea\x9c\x79\xe0\x2c\x2e\xe7\x6f\x7d\xe9\xec\x9d\x67\x96\xeb\xee\x66\x66\xf7\xa2\x73\x78\xc3\xdd\x48\x67\x5e\x9c\x73\x96\x1f\xb9\x1b\xe9\xfc\x8f\x57\xf2\xe9\xc7\xb9\xdb\xab\xee\xb9\x6f\x9c\x3d\xb1\x8f\xd3\x13\x74\x28\x4c\x65\x14\x5b\x75\x28\x46\x3d\xb6\xb7\x4a\x18\x80\x20\x96\xa2\x4d\xa8\x94\x48\xa6\x29\xcd\xa0\x23\x31\x20\x9f\x98\xe4\xb5\x98\xf0\x46\x97\xe9\x18\x7a\xc1\x29\x31\x53\x2a\x0d\xb3\xe8\x71\xcf\x35\x76\x72\x3b\x3b\x5f\xf0\xb5\xd9\x58\x71\xd6\x77\x32\xbb\xe9\xfc\xd5\xef\x9d\xe5\xcb\xaf\x0e\x56\x73\xe9\x55\x67\xf1\x99\xb3\x78\xdf\xb9\xf0\x63\xc9\x76\x40\xef\x69\x6e\xf3\xbc\xb3\xb2\xd4\xca\xc9\x44\x08\x70\xc0\x04\xe6\x13\x08\x6f\x68\x4e\x11\x2e\xbc\xfe\xbe\x64\x51\xd2\xcf\x8f\x71\x0b\x55\x65\x3d\xa9\xd8\x8c\xd7\x19\xe7\x33\x9d\x02\xbe\xb4\xfe\x96\x92\x4c\x4a\xc6\x4c\x29\x71\x9a\x6d\x10\xf6\x63\x30\xac\x34\xa9\xa8\xb2\xa7\x0f\xb0\x17\x4d\xfa\xb7\x94\x62\x52\x99\x1d\xab\x36\x1f\x45\x9c\x10\x2e\x65\x3e\x86\x43\xea\xaf\x96\xae\xe1\xf0\x28\x9e\x5f\x28\x61\x3e\xe5\xf2\xa0\x20\x4d\x46\x8e\x18\xa6\x6e\xeb\x09\x5d\x45\x75\xc7\x4e\x18\x4c\x6c\x17\x7e\x96\xa9\x65\x2b\x1a\x70\x07\xbe\xf1\xce\xb1\xf8\xbb\xef\xbd\x17\x7f\x27\xfe\xce\xbf\x15\xbf\x69\xe8\xa6\xcd\x95\xa6\x3f\xfe\xf1\xd8\x7f\xe7\xfa\x92\x27\x7b\xfe\xd2\x32\x76\x73\xb7\xef\xe2\x3b\x3e\xbf\x21\x03\xd6\xcb\x74\x08\x8c\x1d\x3d\x1b\x5f\x64\x37\xe6\xb3\x97\xee\xbd\x4c\xaf\x62\x78\xf2\xe6\x1e\x93\x20\xf0\xd1\xcb\xf4\xda\xab\x83\x55\x7e\xda\x3c\xc8\x6f\xa4\x73\x9b\xf3\xee\xfa\xaf\xee\xd9\x9f\x9c\x83\xfb\xce\x37\xab\x7e\x98\xce\xd9\xbe\xe0\x7d\xb1\x50\xf9\x24\xe0\x23\x0c\x9c\x04\x6f\x74\x9d\x44\x7b\xee\x63\x85\x4e\x13\x49\x55\xf5\x69\xf0\x15\xfe\x2d\xa5\xdb\x92\x17\xbc\xf0\x8e\x49\x7c\x28\x8a\x43\x10\xe2\x3b\x90\x4b\x3e\x20\x18\x57\x71\x76\x7e\xcd\x6d\xfd\x9c\xbd\x76\x26\xbf\xb8\x96\xbf\xbd\x26\x20\x45\x92\xd9\xae\x97\x2c\x22\xc4\xe3\xae\x3f\x72\xee\xdc\xc8\x2e\xec\x11\x41\x58\x97\xc8\x3a\xc5\x48\x18\xfd\x5c\xb1\x6c\x06\x4c\x02\x87\xb1\x08\x62\x66\x77\xcd\xbd\xc2\xf8\xd2\x39\xf3\xd8\xd9\xbe\xe2\xec\xfd\xe8\xbc\xb8\xe3\x1c\x9c\x67\x7f\x6f\x6c\x45\x47\xa2\x11\x69\x4a\x52\x54\x98\x41\x74\x5e\x03\xda\x1a\xdd\xd4\xe3\xba\x49\x44\x94\xe6\xe7\x7f\xc8\x5e\xdc\x72\xd7\x0f\x88\xe0\x63\x76\x38\xab\xcc\xac\x99\xf1\x02\xa4\x22\x50\x7e\xcc\x37\x0a\x24\xdd\x30\xc2\x21\xcd\x6f\xb8\xdb\x77\xc4\x90\x68\xd2\xb0\x67\x84\x0b\x7a\xe5\x61\xf6\x87\xbd\xec\xb5\x33\xe2\xef\xd9\x3c\x17\xe6\x96\xcf\xab\x98\x45\x9c\x8d\xad\xcc\xee\x59\x67\xf9\xb2\xbf\xa0\xb0\xe3\x1f\xa0\x30\xea\x10\x32\x0e\xc7\x64\x52\xcb\xd0\x35\x59\xd1\x26\xe2\x64\x40\xa5\x4c\xd6\x27\xa5\xd3\x94\x58\x29\x93\x12\xc5\x46\x0d\x08\x0d\x86\x08\xcb\x4c\xdc\x8d\x07\xce\xf5\x1b\xee\xd2\xca\xcb\xf4\x42\xee\xc7\xb3\xd9\x3b\x7b\x4c\x01\xd9\xf9\x82\x49\x41\x4f\x58\x38\x77\xd7\xdd\x73\xd7\xb9\x8b\xdc\x23\x5a\x7c\x48\x32\x2a\xc7\xf5\x94\x26\x5c\x13\x77\xe5\x30\xb3\xbb\xe6\x2c\x3f\x12\x00\x30\x69\x52\x9f\xf2\x15\x33\x1e\x75\x80\xa0\x8a\x62\xeb\xa6\x42\xad\xb0\xc5\x3e\xbc\xe1\x93\x88\xbe\xff\xcc\xee\x76\xf6\xfe\x7e\xfe\xaa\x28\xb0\x73\x64\x00\xa6\xc9\x1a\x39\xe2\x9d\x75\xfe\x00\xbc\x83\x8e\xcf\x39\x95\x89\x2c\xd9\x92\x68\x2e\x9d\x8d\x2d\x9c\x4a\x76\xa0\x3c\x59\x72\xd7\xaf\xb2\x85\xf5\xc6\x4a\x82\x88\x7c\xb9\x5c\x99\xa6\x36\x9f\xad\x88\x49\x27\x14\xa6\x90\x43\x9a\x07\x44\x99\xe2\x64\x88\x62\x50\x6e\x92\xaa\x86\x88\xcd\xda\xb8\xe0\x70\x9e\x3f\xce\x5e\xdd\xcf\xaf\x9e\x61\xa6\x0a\xa4\x10\xe0\x42\x3b\xe7\xbf\xc8\xaf\xff\x1c\x00\x53\x99\x10\x53\x4f\xd9\xd4\x6a\x2b\xd2\xd0\xd9\x8a\x88\xb0\x7a\xef\xe3\x89\x98\x5d\xd8\xc3\x35\x10\x40\x9f\x9d\x8d\x7f\x4c\x4d\x4b\xd1\xb5\xa1\x49\xdd\xb4\xe7\xe6\x0a\xd1\x66\xfe\xbc\x57\xd7\x26\xe0\xb1\x49\x89\xa4\x5a\x3a\x91\x12\x09\x6a\xd8\x54\x16\x2d\x42\xe6\xd7\x9b\xee\xb9\x7b\xce\xf9\xcb\xa4\x12\x74\x2f\xbc\x5c\x0c\x5d\xb8\x0e\x6f\xfb\x52\x06\xe4\xa8\x50\x73\x7d\x75\xb0\xc2\x58\x0f\x24\xb2\x10\xd8\x1f\xfe\xd0\x69\xdb\x54\x63\xdf\x74\x10\xce\x0a\x30\xae\x31\x45\x93\x18\x57\xfb\x61\xb3\xb1\x19\x62\xe8\xf0\x2a\x38\x42\x52\x9a\x6d\x32\xa3\x4c\x26\x52\xca\x9e\xd4\x4d\x2b\x4e\x7a\x34\xcb\x96\x54\x15\x66\x2b\x65\x79\x02\xdd\x22\x92\x4d\x66\xf4\x94\x49\xf4\x69\x8d\x98\x8a\x75\x3a\xfe\x87\x3f\xb0\x93\xff\xb8\xce\x1e\x93\x69\x49\x03\x0b\x47\xe1\x5f\x83\xd7\x03\x65\xc4\xec\x6c\x1c\x49\x9a\x9b\xfb\x5f\x82\x41\xfe\xe1\x0f\xee\x93\x2d\xf7\xcc\xf9\x0e\x12\x94\x07\x4c\x3e\x5e\xfc\xd9\x7d\x71\x1d\x2c\xe9\x07\xee\xb9\xe5\xcc\x6f\xb7\x33\x2f\x36\x72\xe9\x45\x77\x25\x9d\x7d\xbe\xe5\x3c\x64\x5a\x4f\x66\x6f\x35\x9f\x7e\x9c\x79\xb1\xe6\x3e\xb8\xc8\x34\x9d\x85\x2d\xe7\xb7\xc5\xfc\xad\xe5\xdc\xd2\x03\x66\xc3\xac\xfc\xe6\x7e\x7b\xd1\xd9\x59\xc9\x7d\xff\x9d\xf3\xcd\x2a\x1e\xd5\x41\x2c\xec\x60\xbe\xb3\x95\xbf\xf6\xe0\x65\x7a\x01\x87\xe4\x2e\x6c\xe5\x36\xe7\xf9\x27\x81\x37\x83\x23\x21\xce\xe5\x73\xaf\x0e\x6e\x56\x5e\x8e\x4e\x3f\x6a\xab\x2a\x1a\x25\xb6\xae\xab\x38\x37\x36\x35\xa5\x84\x8d\xea\x45\x97\xaa\xa7\x64\xf2\x01\x93\x05\xa6\xe8\x88\xc8\x6d\xce\xe7\x96\x97\x8a\x5f\x25\x99\xbd\x6f\x9c\xb3\x97\xfc\x3d\x97\xbb\xbd\xea\x3c\xbf\xe7\x2c\x3e\x17\xd0\x72\xfc\xf8\xd1\xc1\xee\x93\xfd\x1f\x33\xbb\xfe\xd4\x89\x9e\x3e\x01\x2a\xd4\x2e\x8e\xa2\x38\x0b\x8e\x3a\x22\x58\x32\xd8\x3d\xd0\x3f\xd4\x33\xdc\x3f\xf8\x49\xad\x18\x7c\xa1\x5a\x3b\xaa\x8e\xba\x71\x75\x44\x44\x56\x33\x06\x21\xe0\x8f\x3b\xfb\xba\xba\x8f\x0b\xc0\xe5\xd3\x8f\xf3\xd7\xce\x85\x7f\x2a\x22\x05\xbf\x15\xe1\xed\xed\xe9\x1c\x12\x7d\xe9\x2c\xdf\x73\x2e\xac\x89\xbe\x1c\xe8\x21\xa7\x06\x7b\x0b\xa9\x22\x35\xa9\x73\xec\x6b\x2f\x03\x4c\xf0\x61\x21\xe1\xab\x3a\x08\xf2\x16\x8d\x4f\xc4\xc9\xa4\x6d\x1b\x56\xc7\xd1\xa3\x92\xa1\xc4\xb9\x11\x18\x4f\xe8\xc9\xb7\xab\x62\x78\x75\xb0\x9c\x39\x3c\xeb\x6c\x2e\x88\x40\xbc\x3a\x58\x89\x40\x45\xe1\xf8\x96\x6c\x90\xf6\xa7\x06\x7b\xe7\x84\x99\xa0\xd5\x01\x8a\x16\xa6\x40\x78\xc8\xe2\xf8\x40\x20\x2f\x6f\xa0\xa7\x9b\xff\x7b\x4e\xe4\x5b\x0d\x40\x2d\xff\xa4\x0e\x34\xe4\x2d\xf6\xfb\x14\x1e\x78\xde\xcf\xfc\xfc\x9b\x9b\xab\xbe\x28\xe5\x10\x5f\x1d\x2c\xc3\xcf\x2b\xcb\xee\xc6\x4f\x65\x10\x23\xad\x11\x7c\x55\xeb\x54\x44\x99\x07\x6f\x9c\x35\x2e\xf6\xc0\x90\x48\x82\x04\xb2\x43\xc4\x1f\x0b\xe5\x4f\xe0\x6b\x21\x8f\x0c\xf8\xee\x5b\x11\x11\xe2\x2f\x99\x25\x5b\xdb\x47\x89\x04\xb5\x2c\x30\xe3\x02\x29\x8b\x86\x64\xda\x4a\x22\xa5\x4a\x26\x19\x33\xf5\xd3\x54\x94\x8e\x85\x0e\x70\x67\xf9\xcb\xfc\xe2\x5a\x76\xe7\x76\xf6\xc2\x97\xd9\x27\xfb\xd9\xa7\x3f\x67\x7e\x3d\x8b\x39\x88\xe0\x75\xb8\xe2\x9c\x5f\x77\x7f\xfa\xaa\x2a\x01\x9e\x4b\x5b\x93\x92\xb4\x8c\x0e\xef\x47\x7d\x7c\x9c\x9a\x8a\x26\x4a\x7d\x43\x8a\xd0\x3d\x9f\x39\xbc\xee\x2e\xad\xe4\x6f\x2d\x66\xaf\xef\x30\x8a\x30\x2d\xf9\xc2\x5a\x16\x0c\xfb\xaa\x74\xfd\x2d\xa5\x40\xc2\x3a\xcf\x93\x27\x16\x4d\xa4\x4c\xc5\x9e\x21\x90\xce\x6d\x81\xd9\x3f\x3b\x1b\x4f\x59\xd4\xd4\x20\xb9\x56\x24\x51\xdc\xed\xef\x99\x8d\xb7\x7f\xaf\xf4\x7d\x92\xdb\xfb\xd1\x59\xfe\x32\xbb\xf6\xd8\x39\xbc\xec\xdc\x7c\xce\xb4\x82\x9d\x15\x67\x71\x2b\x7b\x78\x37\xfb\xf4\x8c\xc0\x6c\x2e\x50\xc6\x93\xce\x4b\x28\x63\x84\x15\xe1\xa9\x4a\x56\xd1\xdb\x45\x44\x65\x9f\x6f\xe5\xb6\x1f\xba\x2b\xdf\x3a\xab\x8b\x41\xd2\x04\x94\xc9\x32\x91\x20\x37\x31\x60\x69\x82\x8d\x26\xd2\x95\xf0\x40\xae\x45\xaf\x00\x14\x29\x53\x25\xa6\x97\x54\x2c\x69\x44\x32\x8c\x50\x04\xc1\x7d\xc7\xdd\xf0\x04\xbd\x76\x42\x2c\xb0\xf2\x80\xc2\x3b\x30\x00\x57\x69\x72\xb7\xa2\x11\xdd\x9c\x60\xcf\xfa\xcd\x09\xfe\xec\x28\xa6\x8e\xb2\x87\x43\xec\x0f\xfe\x18\x97\xe5\x94\x3f\xd1\xf1\xb8\xc8\x7c\x28\x5a\x99\x53\xa5\x2b\xc3\x5d\x4a\x90\xab\x59\x84\xf8\x28\x66\x95\x96\xe2\x65\x46\xa7\x28\x1f\x9c\xf8\xbe\x4e\x7f\x98\x8c\xac\xca\x93\xa2\x2a\x92\x55\x92\xae\xee\x19\xc4\x7c\xbd\xc7\x28\x9b\x36\x6e\x4e\x60\x8e\xb7\x44\x34\xf4\x7b\x77\x7d\xe0\x29\xd8\x47\x25\x06\x29\x4e\xc8\x20\x85\xad\xce\x00\x94\x80\xf5\x54\xf1\x2a\xe0\xd9\xe4\xcb\xd4\x64\x2b\x43\x35\xf4\xb6\xa0\x5b\x9c\xbd\x80\xc1\x5f\x6e\x11\x09\xa7\x7a\x25\x8d\x36\x43\x89\x5b\x23\xb3\xbb\xcd\x9e\x80\xaa\x55\x9a\x3e\xcb\xac\xe8\x73\x37\xb3\x17\x6f\xb2\x31\xa1\x3e\x7f\x14\xdf\x7c\x99\x5e\xc8\x2f\xad\xb1\x05\xfa\xfa\x85\x73\x61\x2d\x1c\x78\x19\x58\x80\xf4\xea\x60\xd5\x5d\x59\xcb\x7d\xf1\xc2\xb9\x74\x93\x19\x3d\x8b\xcf\x4a\xcc\x20\xa1\x3d\x59\x79\x7d\xd8\x0a\x14\xcd\x3b\x9b\x35\x3e\x9f\x6d\xbe\x6d\x84\xdc\xd0\x16\x27\xe4\x13\x3d\x45\x12\x60\xdb\xdb\x26\x33\x35\xf9\x64\xb2\x89\x17\x7d\x05\x73\x6c\x4f\x52\x2d\x60\x48\x2a\x96\xf7\x7a\x70\x91\x14\x6d\x4a\x3f\x1d\xb6\xe0\x71\x42\x3e\xd4\xa7\xe9\x14\x35\xdb\xc1\x42\xe5\x6e\x86\x71\xc5\xb4\x6c\x32\x9e\x42\xeb\x57\xa6\xa6\x65\x73\x9c\x44\x49\x1a\xcc\x3a\xd3\xc7\x8b\x69\x65\x3f\x81\x8d\xce\xfe\x51\x4e\x31\xd2\x26\x74\xdc\x08\x97\x3d\x68\x58\x96\x43\xc5\x75\x2d\xe5\x08\x66\xdb\x42\x20\xc1\xb9\x72\x39\xf7\xc3\x66\xee\xfe\xf7\xcc\xf8\x28\x37\x54\xcb\xe0\xbd\x3a\x58\xcd\x9e\x79\xe6\x1c\xae\xe2\xcb\xee\x76\x91\xc9\x52\x60\x94\xaf\x0f\x9c\xf3\x3f\x56\xe6\xa6\x97\xe9\x85\xcc\xee\x5a\x7e\xfe\x1c\x7b\x7b\x61\x0b\xbd\x30\xce\xe2\xb2\xb3\xb8\xc8\x64\xfc\x8d\xed\xdc\xfd\xef\x83\x04\x65\xcf\x1f\xba\x1b\x2b\x15\x86\x56\x62\x7c\x3b\x2f\x7e\xce\xdf\xfc\x2d\x84\x15\xd5\x80\x07\xb4\xab\xb7\xc7\x5b\x5f\x91\xa7\x4e\x08\x46\x9f\x26\x43\x43\x1f\x82\x97\x87\x6b\x09\x10\xa8\x0a\x49\xcd\xe7\x9e\x7b\x10\x85\x6c\x97\xb1\xcf\xab\x9d\xf5\xaa\xa5\x13\x99\xaa\xd4\xa6\x90\x74\xcc\x6f\xa2\xa0\xef\x2a\xc4\xaf\xb4\xf1\x45\x66\x37\x9d\x79\xf1\xd4\x59\x7e\x90\xbf\x7a\x17\xf3\x88\x4b\x6e\xa2\x08\x10\xe2\xa9\x91\x4c\x59\x36\x19\xa3\xdc\x52\xa3\x32\x19\xa3\xe3\xba\xe9\xfd\x9b\x5f\xdd\x0a\x1b\x2a\xb8\x4c\xd8\x72\x16\x67\xf3\xe3\xd9\xf0\xea\x60\xd5\xf9\x72\xad\xf4\xa7\x90\x8b\x07\x9d\xc2\x53\x54\xf8\xbe\xc8\xf7\x5f\x74\xe0\x88\xbf\xf6\xef\xa3\x41\xea\x78\x04\x58\x78\xa9\x2c\x7f\xf5\x82\xb3\xfc\x2c\x04\x2c\x3a\x4b\x99\x7a\x24\x76\x0c\x8a\x3f\x87\x43\x49\xc1\x38\x0c\x0f\x70\x8e\x2b\x54\x15\xb9\xaf\x8b\xe8\x03\xed\x92\x49\x8a\xdf\x16\x73\x9b\xf3\xee\x4f\x67\x32\x2f\x04\xc1\xa3\xb2\x7b\x62\xc5\x31\x1a\xe1\x81\x25\x3c\xca\x33\xbb\x6b\x55\x3c\x8e\x65\x28\x61\x90\xd3\xba\x79\x1a\x72\x22\x4e\x2b\x86\x51\x50\x7b\x20\xcf\x84\x21\xad\x95\x0e\xf7\xca\xc3\xcc\x6e\xda\x49\x9f\x75\x9e\xdf\xcb\xbc\xd8\xf0\xa5\x55\xee\xf9\x93\xfc\xfc\x39\xbc\x22\x18\xba\x39\x2a\x51\xc9\xdd\xae\x78\x1d\xc0\xd6\x41\xc7\x41\x8b\x00\x5f\xaa\x7d\xba\x9c\xe7\x8f\xf3\x90\xf3\x9f\x5b\x7a\x52\x06\x2e\xfa\x14\x56\x0b\x6e\x08\xc1\x50\x4d\x86\x9b\x28\x8c\xc7\xa8\x65\x13\x59\x91\x26\x34\xdd\xb2\x95\x84\x85\xe9\x01\xaa\x3e\x01\x81\x73\xd1\xe6\x7f\xb4\x04\xdf\x33\x36\xfb\x79\x21\xb7\xb5\xe7\xae\x3f\xcf\x5f\x3d\xe3\x7c\x05\xd7\xdd\x2e\xdf\xcb\x3d\x58\x75\x1f\x08\x2e\xf3\x74\x16\xee\x53\x90\x49\x2a\xa9\xf6\x24\x49\x4c\xd2\xc4\x69\x62\xcf\x18\x94\x7b\x6d\xda\x0c\xdd\xb4\xf1\x12\x8f\xa6\x6b\xb4\x4d\xe4\x19\x08\xce\xb0\x9b\xbe\x9f\xfb\xe2\x85\xfb\xe0\x8e\x7b\xf3\x5e\xfe\xf6\x0d\xe7\xc6\xd9\x82\x0b\x87\xc3\x83\x8b\x38\x00\x50\xec\x18\x08\x50\xe7\x4b\x08\x45\x93\xe9\xe7\x91\x25\x44\xf6\x97\x3b\xce\x81\x20\x58\x18\x04\xaf\x2a\xe3\x34\x31\x93\x50\x69\x8d\x0e\x82\x00\x88\x22\x6e\x00\x89\xce\x58\x62\x8c\xfa\x49\x88\x54\x46\xdf\xf1\x98\x6e\x4f\x12\x3f\x20\x02\x71\x0d\x59\x4f\x4a\x8a\xd6\x76\x94\xff\x21\x0c\x57\x87\x6f\xfa\xc3\xcb\xce\x85\x55\xf7\xea\x02\x26\xa2\x15\x50\x40\x70\xa3\x1c\x45\x4b\x47\x34\xa9\x5b\x76\xdb\x51\xf8\x4f\x2b\x46\x53\x0c\xbe\xa5\x23\xd1\xf4\x18\x43\xc3\x0e\x83\x16\x0c\xa4\x08\xba\x68\x1c\x56\x23\x7e\x24\xbc\xd7\x29\x61\x5e\x03\xb7\x93\xc5\x57\x06\x9d\x47\x4b\x98\xe9\x80\xf7\x28\xb3\x4f\x37\xc3\x2e\x03\xfa\xc0\xd1\xd0\x45\x14\x32\x1d\x57\x34\xcc\x62\x03\xf9\x15\xaa\xb9\x3c\x5a\x42\x4d\x04\x91\x3a\x3b\xd7\xb2\x87\x3f\x14\x50\x87\x29\x29\xc5\xa8\x4d\x5d\x45\x27\x00\x33\xf2\x44\x6e\x2a\x1f\x1b\x5e\x0f\xf5\xf1\xa0\x41\x95\x4b\x2f\x86\xa3\x42\x65\x2d\x32\x26\x98\xb7\x7a\x30\x51\x99\x7c\x2c\xa9\x29\xd1\x9c\x71\x60\xd7\xce\x38\xe9\x83\x30\x30\x78\x84\xab\xe0\x7f\x18\xd4\x55\x8a\x9e\x0b\x46\x34\x29\xbb\x48\x5b\x70\x5f\xe0\xd5\xd5\x7e\x73\x62\x6e\x8e\x54\xf3\x4c\x38\x8f\x96\x70\x7c\x01\x14\x25\x7c\x53\x0a\x12\x4d\x23\x7f\x1a\xca\x28\x11\x7b\x1d\x22\x8c\x09\x11\x85\x0e\x29\xe0\x93\xc1\xc7\xe0\x21\xf1\xbd\x32\x65\xb4\x44\x70\xcc\x14\xcf\x24\xfa\x66\x98\x99\x15\xb8\x88\x1c\x20\x57\x34\x33\x01\xa7\x4d\x31\x61\x15\x66\x2c\x38\xce\x56\x4f\xd8\x9b\x9e\x97\x26\x8c\xbf\xc4\x2d\x3a\x3b\x1b\xf7\x9e\x8c\xc2\x13\x9c\x13\x9f\x2f\x2c\x3e\xf1\x85\xf9\xd0\xcd\x09\x49\x53\xfe\x0e\xc3\xf4\xa7\x24\x55\xab\x03\xaf\xcc\xb5\xea\x3c\x5a\x2a\x72\xf3\x56\x22\xac\xc2\x76\x2a\xa1\x06\xe7\xa7\xc0\x3d\x9c\xfc\x28\xf3\x12\x10\xda\xb3\xb3\xf1\xff\x64\x7f\xf0\x73\x2b\x38\x1f\xad\xf0\x5d\x96\xc8\xfd\x52\xf4\x25\x27\x40\x09\x15\xe2\xa1\xd9\x36\x4d\x1a\x60\x30\xdb\x3a\x91\xf5\x69\x4d\xd5\x25\x19\xf3\x28\x66\x30\xf9\x14\x52\x87\x20\x96\xaf\x51\x9b\x48\xb2\x6c\x52\xcb\xaa\x2a\xe7\xc0\x61\xe3\x1c\xde\xc8\x3e\x7b\x9c\xbf\x76\x3d\xfb\xec\x71\xee\xf9\xc3\xcc\x8b\x35\xe7\xbb\x74\x66\xf7\x6c\xee\x60\x25\x98\xc5\x10\x91\xba\xa4\x32\x61\x4a\xe8\x55\xe6\x16\x47\x0f\x57\x71\x8f\x17\xaa\x49\x54\x9f\x60\x24\x2d\x7b\x7f\x3f\xf7\x62\x25\x0a\x2c\x21\x65\x3c\xff\x04\xd2\x98\x55\x49\x03\xbf\xdc\x80\x2a\x71\xc7\xcf\x67\x44\x1f\xf7\x43\x2f\x9f\x95\x5a\x49\x9f\x79\x96\xf6\xb8\x49\xbd\x4c\x66\x5f\x61\xff\xac\x9c\x2a\xef\xab\x40\xf5\x19\x89\x17\xab\x21\x5d\xba\x66\x4b\x09\x9e\xae\x22\xc9\x49\x45\x53\x2c\xdb\x94\x6c\xdd\x24\xca\x38\xf8\x02\xed\x49\x45\x3b\x8d\xae\x45\x28\x1e\x84\x85\x02\x84\xd3\xc4\x73\x53\x30\xea\x03\x1e\xad\x22\xda\xdb\x48\xf6\xda\x19\x0c\x52\x71\x77\x97\x14\xf0\xe3\x41\xa6\xd4\xe2\x5a\xee\xf1\x7e\xf6\xda\x99\x97\xe9\x05\xb4\x2a\x82\x50\x8a\xc7\xd4\x46\xdc\x8d\x2f\x9c\x47\xe7\x72\x4b\xbf\x14\x8a\xe1\x6c\x2e\xb8\x37\x36\xdc\x85\xad\xdc\x83\xb5\xec\xc2\x5e\x3e\x7d\xd5\xbd\xf2\x10\x4b\x0a\x30\x6b\xf8\xc7\xb3\xb9\xf9\x87\xd9\xa7\xb7\xb1\xea\x10\x46\xcf\x72\xe9\x45\xb1\xe5\x99\xb2\x27\xd9\x6a\x25\x18\xf7\x80\x20\xd7\x74\x2d\xe6\xa5\xa7\x28\x53\x54\x15\x05\x59\x32\xfb\xf7\xf2\xdf\xdd\xc0\x0c\x14\x77\xfd\x57\xe7\xe0\x7c\xfe\xeb\xaf\x9d\xe5\x7b\xd5\x94\x92\x02\x42\x45\x9b\xa8\xc6\x90\x08\x52\xcc\x6a\x01\x60\xcc\xe8\x94\x2c\x42\x3f\x37\x14\x93\x42\xf9\x27\x4c\x5b\x64\x06\xef\x98\x94\x38\x0d\x5e\x7f\x9d\x98\x34\x26\x05\xc6\x1c\xf7\xca\x7b\x41\x65\x8c\xcf\x82\x75\x1f\x46\x52\xc7\x8e\xfd\x31\xe1\xc5\x92\xe1\x5f\x94\xc4\x52\xfc\x39\x9b\x2b\xef\x99\xce\x9f\xe9\xe6\x84\xf7\xc8\xe2\x8f\x40\xee\xe1\xc3\xcf\x18\xfa\x20\x35\xcc\x20\x28\x25\x47\x94\xd7\x01\xf3\xe0\x3c\x7f\x9c\x9f\x3f\xe7\x6e\xdc\xc4\xe4\x3a\x0c\x0a\x64\xaf\xee\x3b\x8b\xf7\xa0\xee\x00\xfb\x27\xbe\xc9\x73\xb1\xc3\xca\x5a\x34\x7b\x78\x6d\x24\x48\x0f\x5e\x28\x29\x21\x49\xbc\x88\xba\xc9\x8f\x20\x10\x0b\xd4\x24\xb2\x22\xf3\x3c\x54\xbc\x7f\x83\x06\x95\xae\x51\x62\x2b\x49\x66\x69\xc9\x22\x85\x16\xc7\x9a\xd9\x4d\xbb\x3f\xdd\x76\xd3\xf7\x33\xfb\xdf\x67\xef\x1c\x80\xd3\xfb\xb6\xfb\xe4\x12\x0f\xa4\x3c\x3a\xe7\x5c\xf8\xda\x3d\xb7\xec\xfe\xf4\x55\xe6\x60\x8f\xed\xe6\xab\x82\x24\xe7\xf7\x7b\x7a\x7b\x7b\xfa\x4e\x90\x93\x9d\x7d\x9d\x27\xba\x07\x45\x1a\xfa\xee\x13\x67\x7d\x07\xb7\x9b\xf3\xed\x6d\x01\xa8\x53\x3d\xbd\xc7\x07\x3a\xbb\x3e\x12\x45\xe0\x9d\xfd\xbd\xec\x8b\x1d\xe7\xde\xe5\xcc\xbe\xc0\x0f\x59\x00\x21\xcc\xe3\x09\xc0\x10\x18\x71\x3e\x90\xda\x03\xfb\xef\x4b\x96\x92\x10\xb9\x67\x05\x9f\xa0\xf7\x79\x82\xda\x36\x8f\x2e\x9b\x36\x95\x6b\xf3\x8c\xbc\xaf\x68\x32\x14\x1c\x2b\x52\xbd\xc0\x6c\x0a\x06\xf3\x19\x33\xe2\xdd\x2d\x55\x2d\xc4\x69\xe0\x31\xa6\x20\x54\xb1\x55\x83\xfa\x93\xef\xc5\x43\x55\x89\x09\x53\x48\x02\x40\x1d\xc2\x5d\x5e\x77\x57\xd2\xee\xc6\x0a\x86\x36\xc2\x4c\x4b\x21\xed\xf6\x24\xf5\xd3\x8e\x4b\xb3\x00\x78\x55\x2b\x8b\xca\x10\x9d\xf0\x92\x05\x82\x15\x4b\x6a\x1c\x46\x6e\x73\x1e\xd3\xe6\x31\x23\xa0\x24\x76\x1d\xfc\x24\x2c\x97\xb6\x19\x83\xf1\xf2\x0b\x9a\x31\x98\x60\x26\x41\xa3\x43\x2a\x29\x66\x87\xbe\x8d\x0f\x87\x87\x07\xd0\x75\x2d\x26\x31\x58\x99\xae\xe0\xfc\x85\x2f\xc3\x3c\xd2\xe1\x88\xc5\xc9\x07\x22\x8c\xd5\x93\x88\x18\x46\x36\xf3\x63\xd4\x9e\xa6\x14\x1c\x59\xc5\x0a\x07\x1c\x49\xc5\xe1\x03\x2e\x87\x61\x37\x09\x08\x2a\x07\x93\x5b\x5e\x2a\xf1\x5c\xfd\x7a\x16\x03\x67\x48\xad\x1f\x54\x08\xa7\xb3\x3c\x53\xa2\x6c\xb2\x44\xaa\x53\xed\x29\x14\xcd\x32\x4a\x9d\x47\x4b\x25\xb9\x0f\xfc\xba\x8e\x2f\x4b\x22\xa6\x57\x30\x4d\x32\xb0\xce\xc2\xa1\x0a\xb5\x23\x6f\x1a\xa3\x59\xac\x32\x1d\x97\x52\xaa\x6d\x15\x0b\x9c\x5a\x92\x7e\xa2\x58\xa0\x3e\xb7\x0a\xcd\x58\x10\x4f\x8c\x53\x6e\x5d\xc8\x6d\x6d\x0b\xbd\x52\xb5\x0d\xce\x97\x39\xcd\x48\x62\xaa\x69\x9c\x41\x09\x55\x6d\x24\xc8\xdb\x42\x96\x6e\x4a\xa6\x50\x13\xd9\x9c\x1b\x41\x42\x7a\x4b\x8e\xd0\x1a\xd8\x5e\xe4\x01\x8f\xc0\xea\xa5\x73\xd8\xcc\xb9\x6b\x8a\xa7\xa2\x6c\xd6\xde\xdc\x6c\x05\x25\x6b\xe9\x87\x55\x36\x7a\xe1\xdb\xa2\x70\x67\x04\xdc\x5e\xe9\x35\x0b\xb2\x6d\xe1\x9f\x81\xe0\x8a\x25\xdc\x93\xf9\x4a\xa5\xd4\x84\x30\x2a\xe3\x4e\x29\xaa\x6c\x30\xeb\x8b\x7d\xe5\xfd\xc3\x5b\xe2\xa2\x3b\x38\x11\xb4\xeb\x4a\x40\xfc\xfb\x39\x75\x10\x10\x2d\x52\x5f\x8d\x82\xea\xf1\x7a\xff\x8b\x1a\x75\xf0\x19\x9b\x92\xbf\xa5\x24\xcd\x66\xd2\xd6\x4b\x32\x91\x34\xaf\xfc\x01\x5a\x68\x12\x49\x69\x0a\x68\x81\x49\x2a\x59\x29\x93\x42\x01\x3e\x55\x39\x4d\xc9\xc9\x76\x72\xf2\xfd\x76\x72\x02\x34\xf4\x13\xef\x0b\xcd\xb7\x35\x67\xf1\x0b\xa6\xb3\x5d\xda\xcd\x2f\x9d\xc7\x64\x14\xf0\x9b\x3c\x77\x37\x56\x9c\xbd\x4d\xf6\x70\x7d\x27\xf3\x62\xed\xd5\xc1\xb2\xb3\xb9\x40\x4e\xbe\x4c\xcf\x9f\x7c\xff\x65\x7a\xfe\x04\x44\x81\x4f\xbc\xff\xea\x60\x85\x71\x09\x14\x3b\xa8\x3c\x94\xae\xce\xbe\xae\x6e\x66\xd5\xd5\x34\x01\xde\x95\xde\x92\xba\x8c\x64\xc0\x54\xa6\x24\x9b\x0e\xb2\xbf\xbd\x1b\x05\xc9\x19\x03\x9f\xc2\xad\xc8\x84\x9e\x3c\xca\xfe\x38\xda\x14\x7c\x83\xdd\x03\xfd\xf8\xcb\xa9\xc1\xde\xe6\x43\x1c\x19\xd1\x46\x46\xb4\xee\x3f\x77\x9e\x1c\xe8\xed\x1e\xea\x18\x29\x2a\x13\xf2\xda\xc7\xae\xaa\xfa\x34\x2f\xca\x6a\x59\x93\x04\x0a\x51\xd6\x6e\xb6\xfa\xe0\x0c\x85\x7c\x7a\x6a\xb0\x57\x74\x59\xbf\xda\xd7\x06\xa9\x2b\x1d\x3e\x00\xa0\xb6\x54\x35\xff\xc3\x94\x3d\x49\x4e\x0d\x75\x0f\xc2\xbf\x06\x3a\x87\x86\xfe\xd4\x3f\x78\x7c\x44\xab\xb1\xe4\x66\x15\x70\xb0\xf0\x7f\xea\x1c\xec\xeb\xe9\x3b\xc1\xd7\x7d\x00\x6a\x50\xb0\xb3\x02\x3c\xa8\x86\x64\x59\xd3\xba\x29\xe3\x7d\xf2\xa2\x9b\x6d\xba\x61\xf3\xca\x28\x93\xca\xc4\xa4\x3a\x43\x64\xc5\x4a\xe8\x29\x53\x9a\xa0\x32\xc2\xfa\xa4\x08\x42\x52\x9a\x61\xf2\x63\x4a\xb1\x94\x31\x0c\x81\xea\xf6\x24\x35\xb1\x3c\x04\xff\xd1\xa4\x09\xdd\x94\x31\x25\x17\xf0\x5b\x93\x54\x55\xc9\xa4\x62\xd9\xba\x39\x13\xce\xa8\x6c\x88\xec\xe8\xfd\xf7\xc0\xc5\x1e\x32\x32\x32\x72\x24\x39\xe3\x13\xc1\xfe\x49\xde\x4a\x59\x18\xb6\xa0\xfc\xc2\x02\xff\xd1\xf2\x04\x1a\x70\xdf\xdb\x51\xc1\x8f\xe0\xff\x1d\x09\xe0\x18\xe1\xcf\x8f\x90\xb7\xa8\x95\x90\x0c\x1f\x9d\x32\x8e\x56\xb1\xa2\xf9\x58\x45\xf9\x30\x11\x16\xb4\x9c\x9c\x23\x25\x84\x1c\x69\x88\x84\xda\x91\xa1\x84\x76\x6f\x6c\x30\x9d\xe1\xe1\x97\xd9\x3b\x07\x99\xdd\x6d\x7e\xed\xf2\xe0\x52\xee\xea\x4d\xee\xb1\x7e\xfe\xc4\x59\xda\xf3\x9e\x08\xd2\x77\xaa\x61\x0f\x2e\x6b\xe4\x45\xad\x73\xa4\x45\xb8\x0a\x83\x84\x11\x42\x19\xa7\x95\xec\x0f\x7b\xee\xad\x03\x1c\x5e\xf1\x80\xab\x0c\x0f\x0a\xc1\x81\xdd\xeb\xd7\x62\x3a\xde\x7f\xb2\xb3\xa7\x42\x15\xa6\x4f\x63\x7e\xb2\x07\xf9\xb0\x7f\x68\x98\x7d\x0f\x35\x79\xa1\x16\xcc\x40\xe7\xf0\x87\xec\x5f\x09\x32\xd0\x39\xd8\x79\xb2\x7b\xb8\x7b\x70\x68\xb4\x73\x68\xf4\x3f\x86\xfa\xfb\xea\x13\x7f\xaf\x87\xb4\xd0\x5d\x5d\x81\x84\xe0\xca\x24\x67\x4c\xc9\xe6\x05\x83\x4d\x12\xa0\x21\x39\xc3\x64\x37\x47\x3f\xae\xeb\x8d\x40\x4d\x60\x41\x9a\xbf\x5a\xba\xd6\x18\x98\xb6\x59\xb6\x4b\xa0\x86\x02\xfb\xa3\x83\xfd\x0f\x42\x85\x2a\x62\x23\x1c\x7c\x8f\x46\xfe\xa4\x68\xb2\x3e\x6d\x91\x01\x7d\x9a\x9a\x43\x20\x03\x19\x7f\xcb\x7a\x6a\x4c\xa5\x31\x60\x73\xb9\x9d\xe0\xc6\xc6\x02\x6e\x1d\x20\x8b\x66\x3d\xe1\xe3\x21\x19\xf1\x10\x8d\x04\x90\xc1\xdf\x73\x28\xa3\x4a\x10\xf2\xcc\x6f\xd2\xcb\x24\x3c\x43\x89\xa5\x83\x04\x28\xdb\x6a\xc1\x57\xdb\x45\xc9\x66\x33\xc0\x6b\x40\x8e\x15\xe3\x70\x26\x8e\x74\xf0\xd1\xbf\x9e\x71\x07\x58\xb4\x01\x6c\xbc\x91\x8b\xe7\xda\xe0\xfd\x46\x86\xba\xbb\x4e\x0d\xf6\x0c\x7f\x32\x7a\x62\xb0\xff\xd4\x40\x8b\xc1\xe3\x26\x80\xf0\x5c\x17\xb4\xd9\xb0\x30\xca\x0b\x45\x2b\x0c\x43\x9d\x81\x3b\x3a\x9e\xa3\xbf\x92\x97\x9c\xa4\x34\x5b\x81\x1a\x04\x33\xbc\xb8\x14\x0f\x40\xd4\x96\xc0\x5d\x52\xa7\x33\x84\x64\xd2\x3f\x78\x82\x7c\x0a\x7a\x6a\x03\x62\x36\x32\x8a\xdf\xeb\x0c\x55\xab\x64\xda\xf4\x83\xa9\x6e\x94\xbe\xa0\x6d\x69\x7d\xd3\x91\x4a\x87\x45\xd4\xc2\xb7\x23\xbc\xcc\xa4\x77\x4a\x60\xa9\xc9\x91\x91\x23\xed\xe2\x9f\x02\x27\xc8\xeb\x2a\x96\xdc\x8a\x6a\xc9\xcd\xa8\x92\xeb\xcd\x43\x78\xa9\x53\x5e\xa2\xd2\xaf\x51\x39\x52\x5c\x2c\x77\x04\x2a\x8a\x8d\x04\x0b\xe6\xfa\x27\xe6\x5c\x45\xa5\xa5\x57\xd1\x52\x9f\x1f\x3d\x29\x25\x3a\x7c\xa0\x15\x07\x82\x67\x53\x72\x46\x1e\x2b\x2c\x77\x29\xe6\x32\xc4\x81\xe5\xad\x74\x58\xd7\x84\xb2\x48\x55\x28\xc6\x5c\x7c\x80\x07\x29\x28\xd2\x1a\x8a\x09\x29\xa8\x29\xb5\x8f\xbc\x0e\x1a\xda\xc2\x37\x57\x31\x92\xff\x73\x74\x5a\x37\x4f\x83\xf6\x7f\xd4\x4e\x1a\x47\xbd\x40\xd2\x28\xb2\x7b\x83\x67\xe6\x1b\xc1\xc9\x7b\x84\xb5\xe0\x9c\xf6\x1c\x85\xf5\x39\x2d\xe0\xee\x07\x2a\x2d\x60\x04\x78\xd6\x42\x91\x19\xd0\x3a\xc8\xa1\x86\x44\x10\x42\x72\x86\xa9\x89\x45\xfa\x54\xe0\xff\xfe\x25\xf8\x43\x4d\x40\x0a\xda\x26\xf9\x17\xfe\x7b\xb0\xca\xc8\xd1\x7a\xd5\xd0\x3a\x69\x6f\x05\xae\x96\x0d\x11\x36\x06\x5b\x4f\xc9\x9a\xd1\x12\x31\x5b\x49\x52\x3d\x65\x93\xe1\x9e\x93\xdd\xfd\xa7\x86\x47\x7b\xfa\x46\x4f\xf6\xf4\x9d\x1a\xee\x1e\x02\xab\xd2\x36\xa5\x04\x25\x6f\xd9\x66\x8a\x92\x7f\x90\x71\x49\xb5\xd8\x7f\x19\x69\x47\x6d\xfd\x28\x3b\x48\xde\x86\xf7\x12\xba\xaa\x9b\xc5\xef\xe1\x0f\x50\xe9\x97\x92\xb7\x7a\xfb\xbb\x3a\x7b\xbb\xc9\x3f\x48\x57\x6f\x77\xe7\xe0\xdb\x75\x72\x67\x59\x67\x9d\xd1\x42\x67\x9d\xd1\xe2\xce\x3a\xa3\xa5\x9d\x75\x46\x2b\x75\xd6\xa9\x8f\x0c\xac\xe8\x2c\x19\x46\x2c\x29\x69\xca\x38\xb5\xec\xc2\x99\xf9\x69\xcc\x20\x47\xbd\x09\xc2\x54\x2e\xf6\x22\xa8\x12\x90\xcd\xe5\x7f\x13\x9f\x49\xaa\xc2\xe2\xa6\xaf\x8d\x82\x86\x08\xf0\xe5\x18\xf1\x33\x9f\x40\x44\x10\x28\x1d\xd5\xd3\x0f\x82\x03\x6f\xfa\xff\x23\x16\x93\x15\x8b\xfd\xf5\x06\x30\x16\x74\x79\xee\x7c\xfd\x67\x2b\x5a\x1d\x69\x6e\xf0\xc6\x18\xd8\x30\x28\xb6\x1b\x01\xa6\x9b\x13\x0c\x52\x23\x20\x30\x63\xbd\x71\x08\xff\x79\xaa\x7f\xb8\x93\x7c\x1a\x4b\x92\xe1\xfe\xe1\xce\xde\xd1\x93\xdd\x27\xfb\x07\x3f\x61\x5b\x59\x21\x9e\x6a\x1a\x78\x68\x92\xc1\x7e\x4f\x80\x59\x65\x3a\x2c\x3c\x96\x48\x51\xd9\x1e\x90\x0a\x18\x10\x31\x24\xc5\x57\x36\x62\x50\x61\x07\x7e\x34\x29\x64\x4f\x7a\x9e\x02\x28\x84\x4b\x06\xbb\x19\xf0\xee\xe3\xa3\x80\x6f\x74\xa0\x7f\x70\x78\xa8\x21\xe6\xf6\x4e\x03\x0c\xcb\x88\xce\x9e\xb2\xff\x6b\xc2\x61\x54\x15\x7f\x99\xc7\xa7\x08\x3f\x3c\x8a\xbf\x01\x2a\x4a\x8e\xc9\x12\x2a\xea\x3f\x25\x23\x50\xc2\x78\x80\xfc\xeb\xb1\x63\xc7\x8e\x85\xae\x47\x07\xbc\xd2\x08\x15\xe1\x1e\x0b\xcf\x1e\x63\x16\xd7\xe8\xe0\xa9\xde\xee\x21\x30\xcd\x5e\x3b\x42\xdf\x54\x68\x51\x81\xf5\x16\x56\x58\x1f\x69\x71\x85\x75\x7f\x6a\x84\x15\xd6\x79\xe9\x6e\xbf\x76\x77\xa1\xe6\xf6\x48\xa0\x7c\xb7\x6f\x28\xdb\x09\x83\xfb\x28\x82\xef\x05\xeb\x78\xfb\xaf\xbe\x73\x2c\x7e\x2c\xfe\xce\x3b\xf1\x63\x47\xdf\x7d\xaf\xc2\x37\x58\xd1\xdb\x7f\xfb\xdf\x8e\xb5\xbf\xf7\xde\x1f\x2b\xc3\xf6\xee\xa7\x14\xde\xc6\x72\x1f\x93\xb6\x6d\xc0\xbc\x40\x94\x9a\xd8\xa6\x34\x3e\xae\x24\xf0\x7c\xfb\xdf\xba\x46\x3b\x0b\xd6\x3c\xda\xf3\x21\x25\xdd\x23\xb2\x67\x94\x4e\x1a\x02\x9f\x14\xf9\x34\x66\x93\xe1\xce\x13\x8d\x09\xea\x26\x91\xf0\x66\x1c\x64\x75\xb4\x67\xf9\xa7\x70\x93\xb5\xc0\x4b\xd6\xf8\xe4\x35\xc7\x5d\x56\xdc\xd4\x65\x04\xdb\xba\x04\xfb\xb7\x8c\x78\x9d\x5d\x46\x78\x6f\x97\x92\x1f\x0b\xed\x5d\x46\xfc\x06\x2f\x85\x0e\x2f\x41\x57\x5b\x41\x49\x86\x86\xb6\x25\xe3\x4e\x59\xd4\x8c\x79\xd2\xdd\x9b\x05\xe8\x09\x0b\x35\xcc\x8b\x7e\xf6\x56\xd4\x0a\x94\x16\xb2\x75\xd2\xf5\x01\x64\x6b\xd4\xea\xd8\x2b\x99\x78\x79\xcc\xff\xd3\x52\xd4\x29\x6a\x96\xb8\xf9\x4c\x29\x39\x3a\x81\xa3\x7d\xaf\x66\x8f\x5e\x64\x5c\x45\xfe\x3d\x1f\xe5\x08\x47\x5b\xb3\x0b\xaf\xb6\x31\x56\x46\x5a\xee\xb3\x8b\x0c\x35\x8a\x37\xad\x5e\xe8\x36\xcc\x95\xaa\x58\x76\x3b\xd1\xc7\xdb\xa1\xe7\x2c\x7b\xd2\x0c\x29\xdc\xd8\x88\x5a\x49\x81\x4d\xca\xc6\xdc\x8c\x11\xc3\xc5\xb6\x98\xad\x9f\xa6\x1a\xe9\xed\x7c\xbf\xbb\x97\x0c\x0c\xf6\x7f\xdc\x73\xbc\x7b\x90\x0c\xf7\x7f\xd4\xdd\x90\xdd\xe7\xa1\xc0\x3a\xa2\xbe\x4c\x7b\x7f\xb0\xff\xa3\xee\xc1\xf2\xd4\x26\x28\xcd\xf8\x69\xcc\x4b\x24\x4b\xe8\x06\x95\x9b\x71\xb4\xc6\x4e\xd3\x99\x72\x81\xea\x3d\xf8\xa8\xfb\x13\x61\xd0\x49\xd8\x87\xae\x35\xcd\x7c\x6b\x25\xfb\x77\xdb\x53\xaf\x95\xdd\x38\xeb\x98\xa4\x86\x1a\xea\x35\xd0\x95\xb3\x35\xec\xd8\xc2\x36\xc1\xaf\x81\x01\x5b\xd4\x70\xaf\xf9\xcd\x3e\x9b\xc3\x67\x91\xdb\xed\xd5\xdf\xf4\xb3\xd9\x5c\xf6\x1a\x0c\x89\x78\xd8\xb9\x1f\x95\xed\xfe\x29\x0c\x89\x96\x46\xda\x1b\x65\xd1\x37\x14\x72\x0f\x21\x1f\x54\x9d\xe4\x0c\xfb\xb3\xc6\x28\x7b\x2d\x70\x5f\x93\x2a\x57\x79\x44\x25\xfb\xbc\x68\x9b\xd7\x99\x77\xf6\xe6\x07\x3c\x29\x99\x54\xf6\x82\x06\x85\x38\x2f\x38\x3d\x4d\xee\xfb\x03\xcf\xf6\x20\x7a\xfe\x1a\x53\xeb\xc0\x83\x5a\x88\xc9\xf5\x0f\x9e\xf8\x0b\xf9\x34\xf6\x37\x7c\x14\x03\x17\x7f\x0b\x11\x8c\x36\x09\x41\x13\x62\x1a\x41\x38\x5e\x64\xa3\x62\x1c\x23\x49\xfe\x2b\xc4\x34\xa0\xf2\x49\x99\xd9\xd0\x7c\x88\x15\xc5\x49\xf1\xab\xb1\x98\x6e\x2a\x13\x10\x21\xeb\x39\xd1\xd3\x57\x51\xce\x25\xc6\x8b\xbe\xfd\x6b\xdc\x4a\x2a\xf6\x64\x51\x96\xfa\xd0\x1f\x13\xe6\x1f\xed\x52\xa7\x3f\x21\xff\xc2\xeb\x15\x49\x90\x43\x6c\x46\x86\xe7\x93\xa5\xca\x92\x51\x04\xaf\xf7\x78\xe7\x40\x9d\xb0\xf8\xf1\x68\xc6\xb0\x86\xf8\xbf\x90\xa1\xce\x93\xbd\xec\x94\xea\x37\xa8\xd6\x73\x9c\x74\xe9\x9a\xc6\x0e\xf7\x71\x2a\x53\x13\x7c\xd9\x21\x55\xf2\x22\x2f\x4b\x99\x6b\xa8\x92\x53\xd4\x20\x5d\x83\xdd\xc7\xbb\xfb\x86\x7b\x3a\x7b\x81\x4d\x55\x32\xf4\xc9\x50\x6f\xff\x89\xd1\xe3\x83\x9d\x3d\x7d\xa3\xa7\x06\x7b\x03\x2c\x3f\xea\x41\x60\x8f\xb9\x82\x36\x20\x59\x16\xde\x91\x21\x16\x65\x87\x33\xf8\xe2\x4d\x2a\x63\xcb\xad\xc2\x79\x0d\x57\x0c\xac\x60\xb9\xf9\x42\xf9\x1d\x92\xd4\x65\xde\xdc\xb4\xbe\x91\xc4\x0c\xe8\xa7\x9c\x4c\x4a\xed\x05\x32\xda\x0b\xc8\xdb\x11\x3b\x53\x04\x03\x54\x57\xa0\x12\x5a\x53\xc0\xf1\x6d\xeb\x9c\x86\x40\xf5\x82\xb2\xaa\x41\x0d\xd2\xcc\x8e\xb3\xd3\x74\xe6\x9d\x82\xa6\xff\x0e\x68\xff\xa7\xe9\xcc\xbb\x85\x67\xef\x06\xd4\xff\x21\x50\xa4\x66\xa0\x24\x48\x50\xb3\x09\x2a\x5d\x90\xa7\xde\x18\x61\x41\x35\x27\x9a\x71\xf6\x1a\x59\xce\x59\x78\x92\x9f\xbf\x91\xd9\xbf\x97\x4f\x5f\xce\x5d\xbd\xe9\xac\xa5\xf3\xd7\x2e\x32\xa3\xe5\xc1\x5a\x6e\x7b\x05\x2d\x19\x2c\x26\x9d\x39\xfc\x12\x5b\x01\xf0\x02\x4e\x5b\xb7\x9d\x83\xf3\xaf\x93\xcf\x9c\x47\x4b\x45\x54\x01\xe5\xd9\x85\x3d\x58\xa3\x57\x07\xab\xe5\xe5\xa5\xb0\xc6\x33\x9a\x6c\xaf\x9d\xbb\xdc\xd5\x25\x67\xe7\x1a\x5a\x8d\xdc\xe0\xf2\x6c\x44\xdf\x28\x6c\x26\x67\xfd\x6e\x64\x99\xa7\xc9\x37\x53\x9a\x35\xc8\x66\x23\x91\x18\x2d\xe8\xd6\x6e\x9e\x50\x6b\x98\xef\x46\x38\xe7\x15\x19\x90\xef\xf8\xc6\x25\x70\x60\xd1\x6f\xef\x96\x58\x97\xd1\xe5\x5c\xf3\xd8\x31\x8a\xb1\x55\x19\x72\x72\x26\x26\x8f\xc5\x92\x8a\x46\xbd\xa5\xf3\xca\x69\xb4\x17\x5d\xc3\xac\x1b\xa4\x9f\x43\x56\x58\x5e\xab\xc2\xe5\xac\xaa\x10\x4d\x49\xd1\xfc\x07\x31\x95\x58\x33\x96\xaa\x4f\x74\x1c\x3d\x2a\x4e\xff\xac\x02\xb2\xf8\xba\x4e\xcc\xf4\x2f\x48\x17\x43\x8c\x1a\x53\x8a\x32\x19\xc8\x5f\xde\x0c\xfb\x7c\x04\x85\x0f\x7d\x16\x0b\x4e\x7b\x07\x3e\xf8\xd7\x7f\x9d\xd6\x99\x72\x5a\x47\x5e\x79\x8d\xab\xef\x87\x84\x02\x44\x16\x27\x78\x7b\xc4\x8e\x78\x04\x57\xbc\x4e\xdb\x51\xf8\xc1\x27\xbe\xce\x94\xf4\x5a\xe7\xb7\xb5\xe4\x37\x64\xa7\x47\x5a\x85\x4a\x3b\xb0\xa1\x78\x4f\x43\xdb\xb4\x35\x88\xa3\xec\xe6\x96\x60\x8e\xb2\xe9\xeb\x43\x9c\x32\x55\x32\x72\xe4\xe8\xd4\xbb\x47\x21\x30\x7d\x84\xc4\xfe\x4c\x4e\x74\x0f\x93\xd8\x87\x64\xe4\x48\x97\xae\xd9\x54\xb3\x63\xc3\x33\x06\xed\x08\x5e\xef\x3a\xfa\x79\x6c\x7a\x7a\x3a\x36\xae\x9b\xc9\x58\xca\x54\xa9\x96\xd0\x65\x2a\xb3\xaf\x65\xd2\xf6\xb7\xff\xc9\xd8\xa0\x03\x32\xd2\xea\xe4\xbb\x72\xaa\x64\xf2\xef\x47\x83\xa9\xd7\xf5\xc3\x85\x8c\xd9\x4f\x63\xca\x14\x53\x4e\xfe\x4c\x4e\x76\x0f\x7f\xd8\x7f\x9c\xfd\xfd\x21\xf9\xb0\xbb\xf3\x78\xf7\x20\xfb\x5b\x26\xc7\x3b\x87\x3b\xc1\x55\xa0\xa7\x6c\x23\x65\x13\x76\x60\x79\x0a\xf1\xfb\x33\x5e\x5d\xab\x40\x92\x40\xca\x54\xdb\xf0\x96\x9c\x41\x4d\x36\x33\x44\x82\x99\xe4\x7e\x54\xee\x91\xa5\x32\x10\x10\x27\x3d\xe3\xd0\x8f\x1b\xe0\x29\x56\x21\x6b\x6c\x4a\x91\x48\x4c\x6e\x27\x12\x19\xe8\x1f\x1a\x46\x80\x63\xd4\x83\x09\xd9\x55\x96\x4d\x25\xb9\xdd\xeb\x64\x45\x82\xab\x04\xe0\xbc\x6f\x2c\x6a\xf3\x0a\x45\xfe\xba\xb1\xbd\x11\x87\xbe\x59\x49\x69\x86\xe8\x53\xd4\x34\x15\x99\x92\x49\x2a\xc9\x4c\x6d\x81\xa4\xb2\xd8\x87\x1e\x68\x80\xe6\xf5\xfc\x48\x52\x7b\x52\xe7\x2d\x08\x62\x7f\x8e\xf3\xa9\xf8\x40\x37\xa1\xb3\x87\xac\x27\x52\x49\xaa\xd9\x80\xa6\x9d\x18\x58\x25\x75\x4a\xb1\x14\x1b\x98\x15\xfb\xa1\xca\x7a\xc2\x8a\x27\x54\x3d\x25\x8f\x63\xaf\xe1\xb8\x6e\x4e\x88\xf2\x7e\x9b\xbd\x6a\x99\xc3\xef\xb0\xfa\xd7\xab\x83\xd5\x92\x65\x83\x02\x4a\x5f\x38\x8f\xd6\x50\x21\xcf\x5e\x3b\x83\x08\xb1\x6c\x18\x5b\x46\xbf\x46\x6e\x3e\x7d\x3e\x3f\x7f\x8e\x31\x24\x86\x7c\xb0\x59\xfa\xab\x83\x55\xcf\xfe\x70\x37\xbe\x70\x2f\xfe\x9a\x5d\xd8\xe3\x1f\xb3\x65\x7c\x75\xb0\x9a\x4b\xaf\x66\x76\x2f\x96\x2f\x16\x7e\x81\x0d\x8f\xca\x96\xca\xef\xc8\x95\xfb\xe2\x05\x10\xb8\xe4\x6e\x5d\xcd\xdf\xda\xce\xbe\xd8\x71\xcf\x5f\x67\x5f\xc4\x3e\xc4\x9a\xa8\xce\xa3\x25\x00\x87\x1d\x56\xdc\xf5\x5f\xdd\x27\x97\x02\x6f\xfd\x99\x97\x6e\x65\x08\x37\x17\xf2\x1b\x69\x58\x34\x77\x7d\x29\xb3\xff\x0c\xeb\x09\xe4\xd3\xb7\x72\x5b\x0f\xaa\xad\x95\xb0\xfc\x4f\xf3\x16\xcb\x3b\x64\x9b\xb9\xc9\x9a\xbd\xcb\x9a\xbc\xcd\x42\xf7\x99\x37\x1f\xcd\xd8\x69\xe1\x1a\x37\x48\xdd\x91\x80\xdc\x1d\x29\x3e\x0f\x46\x6a\x3f\x11\x46\x2a\x9d\x09\x91\xd0\x36\x45\xe0\xf3\x3e\x69\x81\xeb\x21\xe3\x24\x66\xd6\xe7\xd3\x2d\x87\x65\x32\xe6\x1d\x6f\x04\x5a\xc5\x2b\x1d\x8d\xc2\x2c\x8d\x6a\x34\x06\x8d\xdf\x85\x68\x02\x1c\x63\x52\xd2\x3c\x8f\xbb\xd5\x30\xbc\xe2\x20\x42\x63\xb0\x30\xd7\x3d\xea\x95\x83\x26\xdc\x39\x10\xe2\x2d\x4a\xf2\x87\x8b\x71\x45\x78\xcb\x2f\xc3\xb5\x1a\x7d\xab\xee\xe2\x85\x90\x20\xbe\x5c\xd0\xb4\xdb\x05\x1c\x7b\x78\xb2\x7f\xa3\x5c\x15\xe2\x3a\x6b\x0a\xe0\x90\x4c\xb8\x66\x61\xa8\x9c\x08\xd7\x2c\xe8\x11\x32\x3e\x5e\x23\xa2\xd0\xb3\xb1\x02\xc0\x42\xc4\xba\x59\x24\x36\x09\x62\xe5\xd8\x76\x83\x33\x59\x39\xc2\xdc\x04\xa0\x5c\x90\x07\x42\xe1\x31\xef\xa8\x6e\x2e\x70\x0c\x83\x8f\x36\x05\x78\x71\x6c\xb5\x7e\x68\x78\x45\x33\x36\x4e\x25\x3b\x65\xd2\xd8\xb8\x2a\x4d\x90\x0f\xba\x3b\x87\x4f\x0d\x36\x50\x8e\xd0\x83\xea\x8b\x09\xec\x47\xeb\xa5\xeb\x7f\x1a\x33\x20\x65\xff\x2f\xfe\x42\x36\x86\xc5\x9a\x6c\xac\x7c\x21\x03\xd4\xdc\x7a\x8c\xbc\x7b\x60\x5d\xdf\x62\x74\xa1\xc9\x2b\xc2\x81\xb6\x76\x41\x3c\x24\x8d\xae\x07\xd5\xa6\x1a\x04\x30\x45\x35\xdb\xaa\x2f\x4f\x84\x7f\xdb\x10\xfe\xe6\xae\x5d\x10\x5a\x7d\x2c\xc5\xac\x17\x2b\x60\x37\x78\x85\xea\x0a\x89\x2f\x7f\x19\xd1\x46\x6c\xf8\x7f\xbc\x82\xa2\x11\x32\xac\x63\xe3\x03\x6c\x2c\xcf\xec\x5a\x9b\x03\xc2\x8e\x13\x92\x61\xf8\x75\x97\x74\xbc\x6f\x77\x5c\xa1\x13\x3a\xb4\x81\xa1\x9a\xdc\x0e\x85\xd5\x7c\xc3\xd9\xb2\x26\x45\xae\xb8\xba\xc8\xe4\x2d\x60\x18\xa5\xb9\xb3\xf7\x72\x9b\xf3\xce\xf2\x65\x67\x69\xcf\xf9\x66\x15\x1b\xaa\x3a\x1b\x5b\x9c\x1e\xe7\x70\x35\xfb\xe3\xc3\xcc\xee\x57\x7e\x09\xf6\x92\x8e\x0a\x18\xee\x0c\x16\x35\x2c\x21\xbb\xe1\xc9\x2d\xb9\xdb\xf3\xfa\xa6\x36\x9c\xf4\x09\x6a\xc7\xb0\xa1\x6d\x0c\x1b\xda\x36\xc4\xf5\x93\x54\x35\xc8\xa7\x5d\xfd\x27\x4f\x76\xf6\x1d\xaf\x4f\x82\xf0\x96\xf4\xbc\x14\x2f\xaf\x5b\x11\x63\x33\x7a\x74\xb8\xff\xe8\x40\xef\xa9\x13\x3d\x7d\xe4\x1f\x70\xeb\xe1\x1f\x24\x66\x06\x0a\xfc\xe2\x6f\xf0\xf7\xdb\xa8\x4c\xf1\xb4\x0f\x53\x4f\x1a\xbc\xf8\x3f\xa4\xee\x99\x49\x4c\x44\x4d\x69\x2a\x13\x81\x6d\xb1\xf1\xb6\xa0\x5f\xa6\x9a\x2b\xb0\xf9\x14\xe6\xaf\xde\xcd\x7f\x77\x03\x5d\x79\x40\xce\xab\x83\x55\xe7\xc2\xa6\xb3\x02\x7e\x3c\xe0\xf2\x7c\xfa\x31\x63\xdc\x3b\x7b\xb9\x07\x6b\x55\xfd\x5f\xcd\xa4\xd0\x8f\x33\xd7\x3a\x8b\xa1\xaa\x6c\x09\x85\xff\xe7\xe8\x71\xde\x83\xce\x3a\xca\x6b\x30\x8f\xeb\xfa\x98\x64\x86\x7e\x55\x21\xfe\x50\xfc\xf5\xa8\xaa\x68\xa9\xcf\x47\xa5\xa4\xfc\xdf\xdf\x0b\x85\x14\x33\xc9\xc9\x99\x18\x94\x7a\xe6\x00\x68\x62\xb2\x3e\x9b\xf2\xb5\x41\xae\x69\xf4\xcd\x40\x28\x5c\xa4\xba\x80\x33\xe9\x17\xac\xb7\x5d\xdf\xb1\x86\x2d\xbf\xde\xd2\x93\x8a\x4d\xbc\xd8\x1f\xc8\x54\xbf\x18\x33\x36\x26\x53\x34\x52\x94\xed\x40\x62\x31\x9f\x17\xd0\x93\x0b\xec\x0d\xdc\x3d\xa6\xdb\x93\xd5\xca\xe7\x02\xc8\x57\x07\xcb\xd9\x8d\xf9\xec\xa5\x42\x5f\x38\x4c\x40\x72\xbe\x59\xc5\x82\xb9\x98\xeb\x13\x4c\xf4\xc1\x0e\x62\x41\xec\xce\xa3\x25\xdc\xe1\xb9\x83\x5d\x67\xf1\x9e\xb3\xf8\x43\x2e\xbd\x58\xb5\x96\x2e\x6f\x75\x16\xb3\x2c\x9d\xbc\x55\x3a\x10\x9e\x96\xcf\xcb\xa8\xe8\x63\xb6\x04\x79\xf6\xba\x46\xa1\xda\x50\xf9\xdc\x44\x1a\x2d\x62\x7b\x75\xb0\x5c\x4c\x39\x13\x59\xa7\x06\x7b\xd9\x50\x0f\xbf\x74\xce\xaf\x3b\x87\x97\xfd\x06\x65\xbc\x30\xf2\xfe\x3d\x2e\xbd\x78\xfb\xb4\x68\x63\x4b\x95\x97\x27\x86\x10\x6f\x69\x9c\xbf\x29\x85\x9f\x6b\xc6\xd9\x8a\xfa\xcf\x55\x88\x68\x45\x19\xe8\x5a\x50\x36\xb7\x1a\x74\x28\x66\x2f\x75\x80\xbc\x65\xf1\x94\xa0\xca\x9b\x5b\xb2\x88\x64\x4e\x40\x24\xc2\x6a\x68\xa8\x1e\xc2\x57\x07\xcb\x18\x7d\x13\x6d\xe9\xcc\x8b\x8d\xec\x02\x5b\x50\xf7\xd2\x6e\xc4\x31\x62\x66\x78\x8f\x97\x8a\x96\xf2\x6d\xf6\xbf\xa0\xd5\xc5\xf3\xa7\xff\x12\xf4\x69\x58\x84\xd7\x40\xad\xb7\x0e\x7e\x13\x50\xff\x57\xaa\x99\xdf\xb2\x73\xa2\x12\x9a\x66\x32\x75\x0d\xf0\x47\x9a\xd5\x01\xa0\x2a\x16\x51\xea\xcf\x48\xc4\x46\x00\x15\xd1\xb5\xf8\x2c\xab\xba\x5d\xf4\x94\xa8\x09\x5c\xd5\x4f\x1b\xf4\x15\x24\x25\xa3\x50\xe9\x88\x19\x7e\xaf\x31\x08\x14\x8a\xfb\xf5\x04\x82\x6a\x24\xa1\x55\xc1\xa0\x2a\x64\xbc\x86\x80\x50\x52\x32\x4f\x53\xdb\x50\xa5\x04\xad\xcf\x71\x15\x04\x10\xb8\xa6\x54\x9f\x21\xce\xfb\x6e\xfb\x0e\x43\xef\xfa\x9b\x45\xa6\xde\xf1\xf2\xa8\xd9\x9f\x7e\xbc\x87\xfd\xdd\xdb\xd9\x47\xa6\xde\x2d\xfc\xfc\x2e\x3c\xaa\xfb\x14\x6b\x26\x0d\x45\xc7\x19\x19\x9e\x54\x2c\xa2\x1b\x94\xdf\x49\x85\xfe\xd8\xfc\xee\x90\xad\x93\x2e\x55\x4f\xc9\xe4\x03\x4c\x5a\xf8\x1f\x7e\xd2\x34\x46\xa2\x02\x65\xc8\xc7\x78\x6a\x72\xc2\xab\x5b\x65\x52\xac\x8e\x89\xd2\xb6\xb4\xa5\x63\xf1\x97\x92\x6a\x53\x68\xe7\x8c\x05\xbb\x94\xa4\x64\xc2\x91\x40\x12\x92\x45\xe1\x7b\xbb\x8c\x48\xe8\xf2\x8c\x0b\x2c\x95\x90\x45\xa6\x27\x95\xc4\x24\x51\x18\x23\xc2\xd9\x01\x4e\xa3\xa9\x77\x08\xef\xc5\x46\xde\xc7\xd7\x3a\x07\x7a\x3c\xe1\x1f\xfa\xe1\xbb\xf0\xe6\xd8\x0c\x31\x69\x52\x32\x8c\x60\x0b\xba\xc2\x78\xa0\xc8\xd4\xd4\x3b\xd0\x09\x1d\xa8\x9b\x7a\x17\xff\x8e\x13\xf2\x27\x3c\xb1\x93\x49\x0a\x47\xf8\x69\xaf\x18\x18\x7f\x9d\xf0\x56\x4a\x84\x4d\xd4\x64\x0a\x5b\xe8\xca\xfa\xb4\xe6\xbd\xc4\xa9\xb3\x75\x62\x98\xe0\x92\x25\x92\x2c\x2b\x78\xff\xb8\x94\x84\x31\xca\xbe\xc6\x0c\x46\x39\x4e\xfa\xb5\x04\xad\x40\xed\xa4\x34\x45\xc9\x18\xa5\x9a\xc7\x58\x72\xbb\x87\xac\x50\x2a\x87\x1d\xc5\x30\x1a\x7e\xc9\xd8\xa4\x49\x7d\xca\xab\x17\x59\xc4\x18\xf5\xd5\x8a\xd4\x0b\x11\xd3\xfa\xbe\x6f\xa0\x2e\x64\x21\x8f\x22\x36\x91\x52\xea\xac\x13\xa2\x9b\x13\x10\x7b\xb2\x1a\x21\xa3\x3e\x73\x1f\x4e\x7b\xb9\xbe\x4f\xc1\xd5\x50\x27\x5a\xfc\x16\xea\xec\x4e\xd2\xc4\x69\x2b\x95\xac\x6f\xea\x8c\x94\x39\x51\x2e\xcd\xca\xc2\xc2\xad\x84\x1d\x2e\x07\x25\xcb\x4a\xc1\x15\x97\x49\xc9\xc6\x64\xb6\x62\x19\x63\x52\xcb\xd0\x35\xd4\xd1\x7d\x09\x55\xd6\xb9\x56\xb1\x88\xc6\xd4\x31\x6d\x82\x9a\x81\xda\x53\xba\x89\xbf\xd8\x1c\x0c\x18\x12\x5c\x14\xbd\x7b\xec\x18\xfb\xfd\xbd\x77\x8e\x15\xb2\xdd\xca\xe0\x4e\x4a\x16\x6e\x5f\x8c\x80\xca\xed\x44\xa5\xd2\x14\xb8\xc8\x21\xb1\x87\x5b\x08\x50\x57\xa0\x68\xa7\xb6\x59\x90\x82\x37\x26\x59\x34\x4e\x3a\x55\x95\x9c\xd6\xf4\x69\x95\xca\x13\x70\x7d\xbf\x22\x2e\x2f\xb1\x4e\xbc\xfd\xdb\x89\xa2\x25\xd4\x54\x51\x73\xce\x31\x6c\x3f\x89\x62\xc4\x7b\x78\x9a\xce\x58\xf5\xc9\x8a\xe2\x35\xd5\xc7\xc7\xa9\xc9\xb0\x15\x05\xed\xf8\xd1\xd7\x0c\x86\x0c\x47\x10\xf0\x07\xb7\x84\x7d\x7c\xec\x95\xd9\x07\xf9\x42\x52\xd5\x50\xc1\xde\x3a\xce\xa8\x8f\x21\x0a\x34\x06\x39\xc2\x63\x93\x38\xe9\xd3\x89\x64\xdb\x94\xd9\x94\x1e\x82\xa4\x24\x83\x01\xcc\x35\x8b\x0a\xf3\xf8\x3f\xfc\xd0\x10\x4c\xa0\x67\x78\xb3\xad\xa4\xa7\x6c\x22\x53\xcb\x36\xf5\x19\xef\xbc\x2d\x55\x13\x18\x9a\x84\xc4\x14\x0d\x3e\x37\x65\xb4\xc6\x49\xe7\xb8\x4d\xcd\xca\x58\x66\x78\x42\xe9\xb4\xa4\x41\xca\xa9\x99\xd2\x08\x55\x98\xb1\x1e\x92\x1a\xa4\x97\xfd\x58\x38\xdd\x13\x3a\xd3\x3c\x6c\x0a\xc4\x26\x54\x2a\x69\x29\xa3\xde\xed\x62\x4d\xd6\xa7\x39\x07\x12\xf9\xea\xff\xbe\xbe\xc3\x05\xf9\x49\xd4\x7a\xb2\x59\x20\xfd\x10\x4f\xd3\x01\x86\xfa\x5d\x5a\x32\x38\xb0\x06\xfd\x68\x6b\x5f\xf7\x9f\x46\x1b\x32\xbf\x11\x60\xa5\x2c\xd8\x02\x82\xe2\x47\x8d\xa0\xf1\x54\x30\x06\xb5\x5e\xfd\x89\x83\x12\xe6\xf6\x31\xd8\x4d\xd1\x29\x8a\x11\x09\x32\xf1\x82\xd8\xf0\x51\x43\xb8\x02\x49\x5e\x00\x99\xfd\x55\x27\x40\x43\x8f\x79\xaa\x5b\xcc\x6c\x02\xe3\x05\xe0\x7d\x1a\x0c\x9b\xd6\x77\xf6\x86\xc0\xab\xb2\xa7\x9a\x3d\x2e\xcb\x96\x26\x68\x63\x3e\x2c\xde\xcf\xa1\x29\x40\xa0\xad\x82\xaf\x88\xf9\x1b\xbd\xa7\xef\x78\xf7\x9f\xeb\x83\x1b\xa8\xa8\x53\xa7\x90\xf6\xf2\xc5\xd9\xfe\x55\xe9\x14\xad\xb3\x6d\x83\x99\xd2\x62\xb6\x64\x15\xd2\x2c\x08\x4f\x96\x80\xb6\x18\x4c\xae\x0d\x77\x0e\x7d\x14\x64\x82\x92\x72\xb0\x89\x71\x70\x38\x42\xc5\x57\x59\xb1\x0c\x55\xc2\x3a\xd9\xe0\x85\xe4\x1a\x8b\x64\x18\xbe\xae\xa4\x30\x73\x5e\xb2\x4e\x5b\x70\x0f\x05\xbc\xe6\x80\x1f\x70\x29\x16\x49\x69\xca\xdf\x52\xb4\x9d\x4c\x98\xd4\x28\x3a\xe7\xdb\x2c\xc2\x6f\xc4\xa0\xa2\x46\x03\xdf\x31\x3b\x5f\xa1\xd3\xf0\xa4\x50\xe5\x8b\x91\x10\x1e\xf5\xf7\x47\xcf\x3d\x6c\x23\x23\x23\x47\xc6\x52\x9a\x0c\x95\xb8\x69\x82\x98\xd2\x69\x4a\xe4\xb1\x0e\x6e\x9d\xe3\x1d\x0c\x9c\x16\xfe\xa8\xde\x49\x87\x7e\x7c\x54\x9b\x52\x4c\x5d\x4b\x52\xcd\x8e\x4d\x49\xa6\x02\xa9\x6a\xc0\x14\x0d\x81\x2d\x4e\xe0\xae\x8f\xbf\x2c\x68\xd2\x12\xb8\xd6\x51\x48\x1d\x82\xaa\x06\xa7\xc9\xf1\x9e\xa1\x8f\x4a\x8b\x12\xd5\x99\xf1\xd9\xfc\x76\x4a\x4d\x99\x02\xc1\x69\xd6\x08\x30\x2f\xcb\xf1\xd3\xd8\x18\xc1\xa3\x89\x4d\x9b\x8f\xa3\xc1\x64\xc7\x72\x3d\xb7\xa1\x91\xf3\xe3\xb5\x31\x18\xd5\xb2\xcc\x5b\x0a\x3c\x74\xf3\x37\x31\xc9\xbc\x35\xa0\xca\xcb\x7a\x35\x1f\x62\xd4\x19\xb2\x60\x5c\x8d\xe3\x6f\x14\x4a\xbd\xcc\x68\xc7\x82\x19\xbc\xa4\xbb\xef\xe3\xd1\x8f\x3b\x07\x8b\xff\xf1\x71\x67\xef\xa9\x7a\xa7\x58\x90\xb4\x48\xda\x0c\xdd\xb4\xdb\xfe\xd1\xa6\xe9\x1a\xad\x2f\x21\x52\x0c\xfb\x2d\xc3\xd4\x41\x9a\xfc\x83\x40\x30\xe8\x1f\x90\x82\xf5\x76\xa0\x4d\x29\xa2\x0d\xba\xa9\x0c\x93\x26\xa0\x9c\xcc\x58\xca\x86\x2e\x45\x89\x04\x35\xa0\xfb\x90\x6e\x92\x36\x0e\xb0\xad\x3e\x6b\x97\x51\xaa\x9b\x13\x31\x53\x57\x69\xe1\x1e\x00\xb3\x2d\x06\xfb\xb1\x94\x6a\x2b\xc0\xc2\x68\xd9\x5f\x1e\xf7\xb6\xf5\x9b\x13\x27\x25\x4d\x9a\xa0\x66\x1b\x89\x91\x1e\x6d\x4a\xb1\x29\x0f\xdb\xb3\xa7\x10\xe5\xb6\xda\x89\x45\x55\x68\xd2\xa1\xc9\x24\x01\xed\x5c\xd1\xcd\xde\xce\x1d\x23\x36\xb1\x0c\x8a\x2e\x41\x68\xf6\xcb\x9b\x82\xb4\xbd\xaf\xa8\xaa\xa2\x05\x31\x74\xf1\x5a\x36\x05\x0c\x4c\x3b\x19\xc3\xf7\xd8\x0c\xeb\x29\xcd\xe6\x21\xf5\x19\x76\xd8\x13\x45\x1b\xd7\x0b\xc4\x76\xa6\x64\xc5\xd6\x01\xd4\xa0\x57\x45\x92\xf0\x83\xc2\xd6\xc1\x47\xce\x3e\xe0\xf1\x1c\xa8\xca\x57\xf7\x44\xa2\x5f\x81\x4d\x1e\xf8\x16\x1a\x5a\x94\x52\x58\x25\xea\xe1\xc7\x4c\x23\x83\x4b\x0c\xe0\x6c\x45\x8f\x04\xba\x57\xdb\x8a\xdd\x14\xf5\x6f\x8c\xea\x9a\x54\xf4\xd2\xc6\x2d\x26\xa2\xbe\x42\xb7\x75\x13\x55\x7e\x8d\x08\x7e\x2a\xbd\x51\xd4\x3c\xf8\xa3\x05\xf8\x81\x4b\x45\x0d\xc2\x2f\xdf\xf3\x68\x88\x37\x2c\x50\x22\x80\x2f\x17\x2c\x43\xec\xa3\x28\xa2\x85\x3d\xe1\x15\xb9\xf8\x4d\x09\x8c\xbf\x4a\x64\x42\x99\xa2\x1a\x26\xb9\x04\x81\x1e\x67\x16\x9c\x6e\x88\xe4\x89\x64\x18\x45\xfe\x5a\x5f\x48\x71\x3b\x2b\x20\x19\x82\x50\x03\x82\x05\x36\x23\x7b\xb7\xdd\x7b\xd1\x97\x73\x36\xc4\x07\x20\xa7\x5f\xb1\x90\xb4\xfa\xa7\x95\x37\x48\x7d\xa3\xfb\x31\x1a\x11\xaf\x73\x3f\x4e\x4a\x26\x8d\xf1\xf0\x72\x93\x9a\xf2\x05\xdc\x52\x8d\x7e\xef\x47\x5f\xa1\x6d\x43\x91\xe5\x14\x83\x46\x59\x75\x5a\x23\x21\x77\x0d\x1b\x05\x58\xe7\x01\xe8\xdd\xa5\xc3\x32\xb8\x54\x6e\xf4\x4e\x1d\x02\xf4\x63\xcf\x8d\x2e\x47\x9d\xa3\x0a\xdc\x6d\x03\x43\x3d\xe8\xad\x8a\x29\x9a\x4c\x3f\xff\x0b\x94\x89\xe7\x8e\x14\xf6\x8f\x5e\xf2\xe9\x98\xa2\xc9\xa3\x92\x2c\x9b\xd4\xb2\x3a\xfe\xc2\x44\x42\xc7\xa4\x6e\xe1\xff\xb0\x7f\x21\x37\x9c\x56\x0c\x48\x78\x8a\x41\x49\x71\xa0\xa8\xf0\x83\x49\x93\xba\x4d\x63\xf4\x73\x9a\x48\xf9\xbf\xf0\x8a\x1d\x31\xc3\xa2\x29\x59\x8f\xd9\xf6\x0c\x3c\x1e\xd7\xcd\x04\x2d\x7d\xe8\x5d\x97\x0c\x3c\xae\x77\x0a\x62\x09\x5d\xae\x53\x6e\x59\x93\xbc\x3f\xa8\xdc\x98\xb7\xd0\xb2\xa5\xc4\x69\x32\x34\xdc\x90\x57\x1e\x80\xd4\xc9\x08\x55\xe5\x5e\x43\x60\x9b\xe2\x53\x69\xdc\x27\x6b\xd9\xba\xd1\x18\x04\x5b\x32\x27\xa8\x5d\x29\xc5\xb8\x4e\x70\xd6\xe9\x06\x13\x2e\x6d\x6a\x26\x15\x8d\x1d\x0e\xc5\xbe\x58\xf0\xbd\xf6\x1c\x0f\x35\xd2\x4b\xbe\xe5\x9e\xcc\x3f\xd6\x45\x47\x4a\x83\x36\xe7\xc5\x85\xd5\xf8\x65\xf9\x0a\x05\x1b\x0a\xa9\x90\x1f\xf6\x0f\x0d\xf7\xf1\x34\xee\x40\x5f\xf0\xfa\x5d\x82\x2d\xa1\x24\x74\x1e\x2b\x62\x0c\xa6\x5c\x26\x67\x4c\xc9\xa6\x60\x0b\x52\x33\xac\xf1\x68\xf3\x06\xfc\xfa\xd1\x57\x74\x21\x37\xc3\x23\x5b\x0b\x82\x80\x07\xa3\x0b\x2c\xf3\x40\x9e\xa2\x64\x18\xea\x0c\x54\xbc\xfd\x5c\xb1\x20\x45\xcf\x4b\x0a\x08\xd4\x5d\xb2\x48\x4a\xb3\x15\x95\xd9\xe1\x33\xbc\x0b\x27\x48\x1e\xf1\x5d\xca\x48\xc4\x87\x57\x46\x69\x4c\x01\xa8\x0d\xc5\xef\x77\x86\x90\x71\x7d\x09\xd6\x14\x0f\xa6\x07\xbc\xe2\x41\xd4\x44\xe6\x8c\x84\xe0\x77\x38\xf5\x25\xf7\x22\xf1\xce\x6c\xfd\xe6\x7d\x4a\x7b\x93\x17\x00\xaa\x60\x7f\x3d\x57\x00\x6a\x26\xa2\x55\x97\x00\xaa\x12\xe2\x5f\x03\xa8\xb2\x16\x70\x0d\xa0\x4e\x12\x42\xdd\xe7\x0d\xc0\x6c\x81\xb3\xb8\x2a\xe0\xff\xe7\x2e\xae\x6d\x2a\xcb\xac\xf8\x06\x1d\xc7\x22\xa8\x01\x0f\x41\xc3\x70\x5b\xe2\x35\x8c\x8c\xe0\xff\xf9\x0d\x6b\x9e\xd8\x16\xf8\xc7\x52\x86\x2c\x09\x4b\x49\x1a\xa4\x50\x11\x65\xa0\x7f\xa8\x67\xb8\x07\xbb\x70\x73\x3f\xc0\x3f\x7c\xcf\x04\x3c\x54\xf5\xc4\xe9\x7f\xc4\x62\x29\x8d\xfd\x51\xa7\x39\xd3\x2a\x6a\x4a\x83\x2e\x03\xec\x14\xe2\x5d\xf2\xc7\x28\x91\xc8\xdf\x15\x03\xea\xb8\xb4\x17\x2e\x2d\x06\x1f\x02\x73\xa9\x7a\x42\x52\x89\xac\x98\x34\x61\xeb\xe6\x4c\x9c\x0c\xe8\x96\xe2\xdd\xf0\x91\x88\x01\xff\x9a\xc2\xee\x12\x13\xd4\x64\xb2\xd0\xb6\x88\x61\x2a\x3a\xd3\x92\x90\x21\x18\x0b\xe8\xa6\xed\xe5\x21\xab\xfa\x34\xb5\x20\x1d\x77\x52\x99\x98\xa4\x96\x5d\xa7\x6e\x83\xf3\xd6\x40\x8f\xad\x22\x08\x5e\x61\xcc\x24\x19\xee\x1f\xee\xec\x0d\xb4\xd6\xaa\xd8\x6f\x4b\x83\x84\x3f\xcf\x9a\x6c\x72\xc7\x2d\xf2\x0f\x82\x0b\xfb\x06\x3b\x72\xf1\xc9\x09\x37\x3a\xbc\xe6\x14\xff\x31\xd4\xdf\x37\x3a\x78\xaa\xb7\x7b\x28\xac\x21\x4f\xeb\x10\xfa\x95\x5f\xf0\x7a\x1a\xaf\x59\x0c\x6a\x57\x3d\xed\x17\x7b\x6c\x6f\x9f\x40\xb2\xbe\x44\x2c\x45\x9b\x50\x29\x91\x4c\x53\x9a\xc1\x30\x65\xa0\x81\xa2\x45\x14\xcd\x52\x64\x4a\x64\x6a\x25\x4c\x65\xcc\xcb\x65\x07\xff\x78\xa1\x1c\xf1\xc7\xd0\x78\xf1\xaf\x96\xae\x61\x9f\x10\xae\x80\xf1\xcd\xf9\xa9\xd7\x0f\x21\xd0\xaa\x1d\xae\x2d\x9b\xba\xad\x27\x74\xb5\xd0\x85\xd1\x4e\x18\x3c\x14\x11\x7c\x4f\xa6\xcc\xa8\x80\xa9\x2e\xbc\xfa\xce\xb1\xf8\xb1\xf8\x3b\xef\xc4\x8f\x1d\x7d\xf7\xbd\x0a\xdf\x70\xe1\xee\xbd\xfd\x6f\xc7\xda\xdf\x7b\xef\x8f\x95\x61\x27\x4c\xc5\x28\x86\xdd\xc9\x78\x13\xb2\x0a\x60\x8f\x43\x85\x17\x62\x9b\xd2\xf8\xb8\x92\xc0\x7d\xfe\xbf\x75\x8d\x76\x16\x9a\x8a\xf8\xbd\xe3\xff\xf2\xfb\x33\x93\x3c\xd6\x0b\x69\xdd\xc3\xb6\xbb\x57\x74\xae\x62\x5b\x55\xf2\x69\xcc\x26\xc3\x9d\x27\x1a\xdd\x6f\xcd\xa1\xe1\x0d\x34\x79\x2d\x19\xc1\x3f\x53\x0f\xd7\x80\xf0\x68\x51\x27\xd7\xf2\xc9\x69\x4e\xa3\xd6\x84\x9a\xb2\x6c\x6a\x8e\x6a\xba\x4c\xf9\x5e\x0e\x48\x10\xfe\x0e\xb3\x1a\xf0\xb7\x7f\x6d\x2f\xfd\x31\x49\x93\xba\x39\x33\x9a\x1c\xc3\x17\xde\x39\xf6\xee\x7b\xfe\x2b\x73\x45\x4d\x5e\x45\xcb\x01\xb5\xe1\xf4\x71\x8c\x21\xc5\x64\xee\x87\x94\xa1\x83\x3d\xde\xae\xf2\x6e\x0b\x4d\x9b\x8a\x6d\x53\xcd\x9b\xdf\x8f\xbb\x3a\x07\xbc\x6c\xfc\x21\x12\x08\x4d\x10\x2f\x34\x81\x1a\xae\x36\x43\xc6\xf4\x94\x26\x17\x89\x80\xf0\xec\xdd\x92\xe9\xc6\x06\xfb\x06\x99\xd0\x55\x39\xc2\x8b\x1e\xe7\x9a\x52\x72\x74\x02\x27\xe6\xbd\xd2\x1e\xb4\x82\x0f\xa3\x34\x62\x8d\x00\xc8\x86\xb5\x61\x33\xdb\x4e\xf4\xf1\x76\x98\x4b\xf6\xa4\x19\xa2\x25\x30\x46\x6f\x84\x30\xbe\x66\xc2\x6e\x59\x3f\xda\x90\x85\x6d\x1e\x3c\x9b\xf0\xb9\xf7\xa7\xbe\x19\x13\x1f\x52\x7e\x7a\xb8\xff\xa3\xee\x86\x6c\x99\xf0\x5b\x2f\x65\xfd\x4f\xc9\xa9\xc1\xde\x86\xd0\x35\xda\xde\xb6\x02\x9c\x80\x95\x1f\xa5\xc9\xad\x46\xfe\xeb\x2b\xdf\xff\x05\xba\xa4\xd6\x36\x92\xdf\x47\x97\xd4\x9a\x69\x7e\x5d\x5d\x52\x6b\x26\xac\x86\x2e\xa9\xaf\x9f\xe5\x9a\xda\x25\xb5\xb5\x7c\xd6\xcc\x2e\xa9\xaf\x81\xbb\x6a\xef\x92\xda\x18\x67\xfd\x6e\x64\x59\xcb\xbb\xa4\xd6\xce\x66\xbf\x9b\x2e\xa9\xf5\xf0\xdd\x9b\xea\x92\xda\x10\x3b\x46\x31\x0c\x9a\xd2\xc5\x93\x44\x6b\xe3\x59\x1f\xf6\x88\x0d\x55\xab\x42\xac\xbd\xa1\x6a\x35\x90\x2d\xeb\xad\x58\xdb\xda\x14\x56\x86\xc9\x40\x5c\x15\xb6\x26\x85\x15\x61\xcf\xfd\xd5\xa8\x37\x41\xb7\x19\x4b\xd6\x1a\xc4\x2d\x6b\xae\xf9\xc6\x18\x60\xea\x8f\x92\x51\x67\xf6\xe0\x14\x35\x2d\xa5\xce\x99\xe6\xdf\xfa\x42\xab\x2d\x31\x4e\x62\x53\x6d\xe0\xd7\x84\xbf\x63\xfc\x8d\x36\x70\x36\x4a\xaa\xa5\xfb\x97\xa3\x6a\x76\x38\x0e\x0f\x76\x76\x75\x93\xee\xc1\xc1\xfe\x41\x76\xd0\x75\x0e\xf7\xf4\x9d\x20\xbd\xfd\x27\xa0\x99\x1f\x99\x9d\x8d\x0f\x48\xf6\xe4\xdc\x5c\xc7\x88\x36\x3b\x1b\xef\x36\xcd\xb9\xb9\xda\x30\xf4\xf6\xf0\x12\x50\x3c\xd0\x97\xa4\x9a\xdd\x51\x1b\x08\xbc\xe5\x5d\xdb\x37\x03\xa7\x6a\x7b\x5f\xd2\xc0\xdd\x0b\xec\x65\x41\x38\xc9\x2f\x3e\xa3\x8f\x13\x66\x75\xf9\x07\x1b\x58\x5d\x02\xe8\xd9\x33\xb7\xdd\x27\x97\x32\x2f\x96\x9d\xfd\xbd\xcc\xfe\x95\xdc\xe3\x7d\x54\xb9\xdc\xf5\x5f\x51\xd9\x71\x1e\x6e\x66\x0e\xcf\x8a\x89\x68\x94\x00\xe7\xfc\xc3\xcc\xfe\xbd\xd7\x41\x00\x79\xeb\x38\x76\x77\xec\xf0\x3b\xc0\x50\x61\xad\xe8\x88\x64\xbd\x3a\x58\xc6\x0e\x9f\x4e\xfa\xa0\x83\x64\x37\xe7\xdd\xed\x3b\xe2\x4a\xc1\x92\xc6\x96\x8c\xb7\xf5\x2b\x2d\xc4\xd3\x5e\x54\x42\x0a\xf6\x8e\x5f\x60\x2a\x99\xb2\x6c\x32\xae\x98\x16\xd4\x12\xe4\x65\x8f\x42\x57\xd4\x59\x7e\x90\xbf\x7a\x17\x69\xf6\x48\x5d\x75\x7e\x5b\xcc\xdf\x5a\x76\x16\x97\x83\xbf\xe6\x97\xbe\xce\x7f\xfd\xc8\xf9\x66\x35\x9f\xfe\x3e\xfb\xf4\x42\x28\xe9\xe0\xa9\x0c\x16\x9e\xf4\x2b\xe9\x79\xe5\x88\x24\x9e\x01\x4c\xe5\xd0\xa8\xb5\x47\xe4\x65\x67\x69\xcf\xdd\x78\xc0\x26\x70\xe7\x5a\xf6\xfa\x8e\xbb\x75\x35\xfb\xc3\x5e\x7e\xfd\x5b\x36\xc3\xbb\x0b\xce\xad\x5f\x90\xc8\xea\x54\x41\x95\x41\x45\x1b\xd7\xbd\x56\x05\xe3\xba\xc9\xa4\x01\x2f\x88\xd8\x27\x25\xe9\xdc\x5c\xd3\xc9\xcc\xfc\x7a\xb6\x1c\x09\xb3\x15\x80\x4d\x72\x4f\x96\x72\x5b\x5f\x85\xd2\xfe\xa6\xf7\x2f\xa3\xc1\xab\x50\x3c\xa6\xdb\x93\x44\xd5\x13\xa7\x81\xf9\x30\x08\xce\x6b\x3b\x0b\x4b\x9a\x65\x76\xd7\x72\x5f\xbc\x70\x2e\xac\xba\x57\x17\xd0\x6a\xca\x9f\x5b\x77\x76\xae\xe5\x96\x97\x72\xf7\xbf\xcf\x5f\xbd\x8b\xff\xcc\xcf\xef\xe6\x6f\x2d\x8a\x7b\x59\x54\x20\x84\x49\x6f\xbc\x39\x30\x37\x07\x04\xcd\xce\xc6\x8f\x63\xac\x5e\x9e\x9b\x8b\x4e\x4f\x31\xa0\xdc\xf2\x52\x31\xa0\xc8\x34\xf9\xe9\x05\x63\x8a\x8d\xdb\x93\xcd\xcf\x51\x9c\xa6\x70\x72\xb8\x39\xb9\xbf\x97\x7d\xb1\xe3\xdc\xbb\x9c\xd9\x7f\x96\x79\xb1\xe6\x2c\x7e\x91\x5b\x5e\xc2\xe9\x39\x1a\x9c\xab\xa8\x14\x41\x76\x9a\xad\x4f\x50\x28\xc7\x05\x41\x55\x3f\x73\x4e\xd2\xe4\xa3\x50\x01\xda\x9e\x8c\x3e\x53\xce\xcd\x5b\xb9\xe5\xa5\xcc\xee\xbe\xfb\xc3\x4d\xbf\x12\xfa\xab\x83\x65\x77\x79\xfd\xd5\xc1\x0a\x5a\xbd\x51\x89\x33\x25\x4d\xd6\x93\xb1\x0a\x34\xb2\x47\xed\x0d\x52\x9a\xbf\xb6\xc5\x68\x04\x7a\x9d\x9b\xb7\x5e\xa6\xe7\xeb\xa5\x1a\xb3\xcd\x74\x93\xd7\x38\x99\x0c\x14\x05\x84\xa8\x4f\x3b\x3b\x2b\x4e\xf3\x1b\x5d\x10\x98\xc1\x94\x0c\x8c\xfa\xe0\x13\x1e\x64\x21\x92\x21\xba\x04\x92\xdb\xf9\xca\xbd\xfe\x8b\xbb\xbc\xee\x3e\xb8\x93\xdb\x5c\x2f\xe9\x47\x84\x5b\x34\xb7\xb5\xec\x5e\xda\x7d\x99\x9e\xcf\x7e\x3f\x9f\xbd\x73\x13\xe5\x4b\xfe\xea\x05\x67\xf9\x99\xf3\xcd\x6a\x6e\xeb\x8a\xfb\xe5\xb3\xfc\x8f\x17\xf1\x49\xe8\x68\x82\x72\x83\xa7\x38\x95\x1e\x36\xe1\x74\x06\x4e\x0d\x26\xcb\x02\x02\x25\x14\xaf\x3d\x63\x40\xe0\x0d\x6f\xd4\x13\xbc\x51\x5f\x68\x70\xac\x6b\xe1\x93\x54\x2b\x94\x30\x52\xa0\x5d\x9e\x67\xc7\x84\x0e\xb6\x50\xfb\x1f\x4a\xfe\x87\x40\x65\xa6\xb6\x07\x32\x1e\x17\x31\xab\xbb\xfd\xbd\xb3\xb1\x85\xb0\x11\x24\x7b\x57\x00\x95\x26\xa0\x50\x2e\x5b\x23\xb0\x09\xaa\x81\xc5\x56\x57\xc8\xd3\x62\xb0\xc1\x32\x85\x50\xd7\x97\x6b\xdf\x4c\xf0\x75\x0e\xf4\x7c\x8c\xff\x9a\x9b\x83\x06\xd0\x8a\x49\x2d\xc2\x94\xde\xc0\x4b\x27\x15\xad\xab\xb7\xf0\x1e\xf6\x95\x66\x9a\x7b\x22\x65\x9a\x54\xb3\xd5\x19\xb6\x0c\x81\x0f\xde\x57\x34\xc9\x9c\x09\x7c\x30\xac\x93\x94\x31\x61\x4a\x32\xc5\x32\x44\x5d\xbd\x3d\xc5\x8d\xa3\x3b\x7c\x9b\x67\x42\xb1\x27\x53\x63\x90\xc8\x1b\xec\x1e\x7d\x34\xa1\x2a\xff\x22\x7b\x3d\x68\x6a\xd3\x8d\xab\x4f\x40\xc8\xe0\xbb\x7a\x7b\x4e\x2a\x30\x88\xaa\xc3\xc6\x49\x7a\x8d\xe3\x2d\x1f\x59\x70\x44\xd9\x95\xe5\xfc\x46\x3a\xb7\x39\x0f\x43\x0a\x0c\x85\xfd\x82\x8d\xdd\xb3\xd7\x77\x9c\x95\xb5\xec\xb5\x33\xd9\x95\x65\x77\xe3\xa7\xec\xc2\x5e\x70\x1c\x2f\xd3\x0b\xbc\xb7\xda\xda\x52\xf6\x97\x6b\xec\xfd\x6b\x67\x18\xb0\x60\xc3\xf6\x5a\x47\x12\x61\x89\x8a\x9a\x49\xd8\xba\xae\xd6\xb6\xdc\xe0\xa6\x2c\x84\xcd\xbd\x70\x3a\xc6\x94\x78\x8d\x2c\x2f\xec\x0d\xd5\x2c\xd9\x1b\x54\x23\x42\x6b\x37\x28\x9f\x0b\xad\xf0\x37\xb6\x9c\xc5\x67\x99\xdd\xaf\xdc\x73\xf7\x72\xf3\x2f\x98\xdc\xbe\x79\xcb\xdd\x5d\x74\xd6\x77\x5e\x1d\x2c\xa3\x17\x3e\xbf\x7f\x03\xbd\xf0\x62\x1b\x80\x0f\xf5\x43\xaa\x8a\xe4\xa0\xbb\xba\x94\xd9\xbf\x9b\x7b\xf0\xc0\xbd\x72\x2e\x1c\x08\xd3\x37\x43\x81\xe0\x79\x18\x0e\xe4\x33\xc6\x00\xf8\xf7\xdc\xdc\x67\x44\xc1\x92\xdc\xdc\x04\xc6\x52\xdb\xfc\x0e\x04\x95\x31\x67\x51\xc3\x74\x8d\xae\x0f\xbc\x85\x3b\x2a\xa9\x8a\x64\xc5\x09\x19\xc4\x72\x8d\x0c\x40\x09\x58\x6f\x89\xab\x80\xd7\x88\x6e\xca\x58\x29\xd4\xf3\x27\x63\x7a\x18\x7b\x01\x17\x10\x74\x53\x8b\x0a\x05\xe5\x4a\xda\xd9\x59\xc9\x7d\xff\x1d\x5b\xa0\xbb\xeb\xee\xb9\xeb\xb8\x8e\x99\xdd\x6d\x76\x96\xc1\xb4\x90\xb6\x20\x71\x6d\xc4\xbd\xf2\xd0\x39\x77\x33\x7b\xf1\x26\x1b\x13\xbe\x72\xd4\x59\xbe\xe7\x5c\x58\x7b\x99\x5e\xc8\x2f\xad\xb9\xeb\x8f\x9c\xaf\x5f\x38\x17\xd6\xc2\x81\x97\x81\x05\x48\xaf\x0e\x56\xdd\x15\x50\x60\x20\x02\xe3\x2c\x3e\x43\x10\xce\x37\xab\x78\xf6\x88\x95\x13\xc1\x0a\x05\xfa\xaf\xe0\xcc\x43\xbf\x0d\x9c\x51\x46\xc2\x00\xfc\x89\xc6\x48\x1b\x17\x63\x09\xc8\xc6\xb3\xcd\x99\xc2\x95\x16\x38\xcf\x04\x5f\x79\x65\x99\x35\x6f\xee\x31\x11\x99\xbf\x1e\x5c\x26\x45\x9b\xd2\x4f\x87\x2d\x79\x9c\x90\x0f\xf5\x69\x3a\x45\xcd\x76\x28\x27\xcb\x13\x03\xd1\x9a\x1d\x4f\xa9\x2a\x23\x49\xa6\x26\x53\x4c\xb0\x14\xb4\x92\x34\xa4\x04\x6c\xe1\x22\x5a\xd9\x4f\x7e\x52\x5b\x39\xc5\x48\x9b\x90\x2d\x84\x0b\x1f\x58\xc6\x0a\x50\x83\x6c\x53\xe0\x09\x77\x61\x0b\x1d\x04\xce\x95\xcb\xb9\x1f\x36\x51\x7b\xe7\xcb\x1a\x0a\xef\xd5\xc1\x6a\xf6\xcc\x33\xe7\x70\x15\x5f\x76\xb7\xef\x06\xdf\x2f\xb0\xca\xd7\x07\xce\xf9\x1f\x2b\xf3\xd3\xcb\xf4\x42\x66\x77\x2d\x3f\x7f\x8e\xbd\xbd\xb0\xe5\x2e\xad\xe4\x7e\x78\xcc\x6c\xfa\xc5\x45\x67\xf9\xcb\xec\x8d\xed\xdc\xfd\xef\x83\x04\x65\xcf\x1f\xba\x1b\x2b\x15\x86\x16\xc4\xcc\xf8\xf9\xc5\xcf\xf9\x9b\xbf\x55\x65\x46\x2c\x02\x1c\xc7\x62\xd0\xd0\xf0\x94\x67\x75\xc9\x74\x5c\xd1\xa8\x4c\x92\xba\xc9\xd8\x41\x62\xf2\x35\x21\xdc\xa6\xec\x90\xf1\xdb\x73\x7a\xe3\x72\xb7\xef\xba\x97\x2f\xbb\x5b\x57\xf9\xe4\xee\x5c\xcb\x1e\xfe\xe0\xdc\xbd\xe6\xfe\x74\xbb\x1a\x5d\x16\x56\x94\xa6\x32\x19\x9b\x09\x08\x14\x5e\x39\xb3\x46\xff\x9d\x9e\x34\x52\x3c\xd9\xdf\x9a\xd4\xd1\x2c\xb0\x26\xa5\x77\x08\x84\x68\xbc\xca\x8b\x9e\x0c\x03\xdd\x07\x82\x32\xa2\xb1\x6e\x2d\x67\x77\x2e\x67\x76\x37\xf3\xb7\x1f\x66\xef\xee\x15\x09\x8e\xbd\xd5\x7c\xfa\x71\xe6\xc5\x9a\xfb\xe0\x22\x93\x20\x80\xc5\x49\x8b\xd4\x50\x20\x0c\x32\xf6\xd8\x7b\x4c\x6d\x2c\x1b\x6a\x3b\xee\x54\x76\xcc\xd9\xd2\x69\x4a\x24\x32\x3d\xa9\xa8\x94\x54\xd5\x58\x81\x48\x5f\xc0\x95\x30\x07\x20\x7c\x75\xb0\x9a\x4f\x5f\xc5\x03\x11\x15\x8d\xcc\x6e\x3a\xb3\x77\xdd\xbd\xba\x90\x5f\xff\x36\x1e\x8f\x13\x11\xd9\x9a\x46\x13\x10\xb7\x93\x53\x49\x68\x2e\x61\xd2\x04\xd5\x6c\xbc\x28\x01\x16\x8a\x61\x80\x2a\x63\x18\xdc\x87\x02\x22\x66\x82\x3d\xeb\x37\x27\xf8\xb3\xa3\xdc\x0c\x9b\x9d\x8d\xc3\x55\x0a\xfe\x58\xb2\xd8\x93\x53\x3c\x98\x31\x37\x17\x8f\xc7\x85\xd7\x50\x9c\xe7\x8f\xf3\xe9\xef\xdd\x73\xf7\xd8\xe6\x81\x71\x67\xf6\xef\x15\x7f\x4e\x72\x7b\x3f\x3a\xcb\x5f\x3a\x0b\x87\xce\xd2\x5e\xf6\xe9\x99\xec\xaf\x17\x8b\xc8\x38\x8a\x96\x59\x29\x15\x99\xdd\xed\xa0\xda\x50\x3c\x1a\xb0\xa2\xd2\xb9\xdf\xbe\x76\x2f\xdf\xcb\x3d\x58\x45\x0a\xab\xcd\x95\x2d\x29\x20\xf7\x7e\xc7\x93\x94\xfb\xed\x45\xee\xd7\xbb\x4d\x9c\xa4\xea\xd3\x63\x28\x14\x95\x3a\xec\xbd\x42\x12\xba\x4c\x0b\x6d\x74\x7d\x35\xcf\xd6\x89\xa4\x41\x57\xb1\xc2\x99\x11\xfc\xfd\x2d\xde\xc0\xc5\x96\x50\x49\x94\xec\xe0\xcf\x42\xaf\xf0\xa3\xa5\x52\xdb\xfd\xdc\x4d\xe7\xfe\xd9\xec\x9d\x83\xdc\xdd\xa5\xdc\xf7\x2f\x9c\xe5\x47\xce\xf9\xcd\xcc\x6e\xda\x49\x9f\x45\xc1\x1b\x7c\x9f\xe9\x89\xbb\x9b\x5c\xa1\xb8\x74\xd3\x39\x7b\x29\xf7\xc3\xe3\xe2\x17\x84\x6a\xa3\x01\x25\xde\xf9\xa0\x21\x3d\x9c\xb3\xc3\x10\x3c\xea\x34\x8c\xb9\x39\xc8\x0b\xc5\x02\x0c\xfc\xc7\x61\xf8\x17\xfe\xd8\x18\xb7\x84\x0a\x0f\xe1\x26\x7a\xb4\x94\x39\xfc\xd2\xdd\xbb\xe0\x1c\xde\x28\x5d\xf8\x20\xdd\xfe\xe4\xd5\xc4\x4a\xcc\x8c\x01\x5f\x6c\x29\xe8\xc0\xa8\xc5\x56\x32\x68\x21\xd0\x9d\x47\xc1\x63\xcd\xf3\x91\x94\xfa\x73\x47\xb4\x6e\xd3\xd4\xcd\x0e\x52\x25\x9e\x84\xae\x58\xf4\xa2\xe7\x96\x9e\xa0\xdb\xa4\x02\xb4\xfc\xea\xc3\xdc\x83\xbb\x01\x70\x55\xe8\x4b\xe8\xc6\x4c\xf1\x61\xd3\x41\xbc\xe0\x96\x5e\x8d\x1c\x3e\xb3\x82\x23\xa7\xa3\x08\x4e\x15\x3a\x64\x8a\xe5\x30\x78\xed\x7e\xb4\x89\xc9\xb4\x6e\x82\x0f\xc3\xbf\xe1\xf4\xff\x55\xf1\xa5\xdf\x65\xc7\xfa\xf9\xc3\xdc\xed\x55\xe7\xf9\xbd\xcc\x8b\x8d\xec\xf5\x9d\xfc\xea\x99\x57\x07\xf3\xd5\xf0\x8f\xb3\x75\x62\x86\x1e\x04\x71\x78\xcf\x7d\xa1\x15\x70\x98\xd9\x5d\x73\x96\x1f\x61\x74\x26\xfb\xec\xb1\x73\xf3\x66\x34\x04\x86\x01\x29\x25\x32\x68\x4c\xbe\x74\x6a\x23\x18\x10\x54\xc6\xa9\x25\x6a\x1d\xc7\x4e\x51\xf0\xf8\xa3\x55\xc8\x84\x9d\x47\x06\x1a\x62\xcc\xdc\x2e\x81\x5a\xd2\x9d\x3c\x12\x89\x70\xa5\x8c\x02\xa4\x53\x9a\x95\x32\x0c\xb8\x1b\xd6\x0b\x4f\x41\xe3\x1f\x9e\xa4\xd0\xda\x42\xe3\xaf\x5a\x44\x32\x69\x87\x50\xde\xfb\x54\xe6\x1e\xdc\xc8\x6d\xa5\xb3\xdf\x3c\x72\xee\x7c\x21\x04\xff\x32\xbd\xe0\x3c\x7f\x9c\xbd\x79\x0f\x32\xcd\x0a\x1f\x38\x9b\x0b\x99\xdd\xb3\x1d\x62\xc9\x5d\x34\x06\xf0\x4d\x82\x3f\x18\x2c\xc6\xc2\x2e\x19\x50\x25\xae\xa1\x56\xa3\xb6\x30\xa7\x95\xbe\x2e\x44\x61\x22\xd1\xc3\x37\x7f\x8d\x7a\x62\x25\x10\xe5\xf1\x20\x5b\xf7\x65\x4c\x70\xf1\xab\xae\xc6\xe6\xbc\x2f\x4c\x2a\xa8\x13\x15\xa5\x4b\x34\x42\x8b\x44\xbe\x7f\x32\x48\x9a\xf2\x77\x3c\x1c\x51\xfc\x0a\x29\x74\x36\xb6\x8a\xe4\x34\x3f\xd8\x3d\xba\x4b\xe4\x75\x75\xa2\x2c\x6a\x2a\x92\xaa\xfc\x9d\x06\xe3\x77\xe1\x52\x64\xef\xbc\xb3\x7c\xd9\x59\x5d\x0f\x8d\xb0\x55\x40\x80\x99\x19\xc2\x68\x56\x09\x74\xf7\xfa\x2f\xee\xfa\xa3\xfc\xad\xc5\xec\xf5\x9d\x10\x03\xc4\x43\xc3\x8f\x5e\xdd\x9c\x88\x83\x5c\xed\x1c\xe8\xa9\x7e\x5e\x38\x8f\x96\x70\x32\x99\x98\x5a\xd8\xc3\x03\xed\x65\x7a\xa1\x18\x82\x18\xb3\xd6\x66\x7b\xa9\x6c\x36\x4d\xe2\xd5\x53\xd0\x16\x53\x86\xaa\x4b\x55\x82\xc4\x98\x63\x79\xed\x47\x67\xfb\x0a\x66\x37\x66\xf6\xef\x65\x0e\xaf\x67\x76\xbf\x72\x16\x9e\x54\x41\xaa\x1b\x54\x0b\x44\xc5\x42\xec\x1f\x7e\x30\xae\x9f\x65\x3a\x4f\x20\x08\x86\x28\xab\xa0\x99\x36\x15\x9b\xfa\x97\x6a\xc3\x87\xf3\xf0\x47\x67\xf1\x1e\xbc\x1b\x0a\xda\x4b\xfc\x1b\xee\x1a\x40\xb7\xbb\x88\xcf\x61\x7a\xe0\x35\x74\xb9\x57\x81\xe7\x4f\x46\x28\xbc\xe0\x0c\x54\x01\xc8\x6f\x6b\x2b\x10\xf2\x60\xba\x1b\x5b\x57\x55\xb2\xa9\x49\x52\x96\x90\x6a\x6f\x77\x66\x76\xb7\x11\x23\x9e\x7e\xb8\xb4\xd9\xad\x35\xe7\x90\x3b\x9e\xa2\x61\x07\xdd\x98\xdb\xf8\xd0\xdc\x75\x6c\x06\x9a\x0d\xe8\xe6\x84\x45\xde\x82\xb4\x31\x28\x93\x20\xd4\x99\x71\xd4\xe7\x1f\x66\x0e\xaf\xbb\x2b\x69\x77\x63\x85\x93\x07\x34\x30\x1d\x0e\xc8\x7b\x75\xb0\xec\x7c\xb1\x98\xbf\x7a\x21\xbb\x73\x3b\x7b\xe1\x4b\xb1\x26\xec\x91\xa7\xd1\x69\x08\xf3\x84\xa2\x75\xd7\x1f\xf9\x01\x9e\x2a\xf0\x30\x62\x89\x51\x55\xaf\x0b\x42\xcd\x1c\x92\xbd\x76\xc6\x8f\x4d\x46\xc3\x87\xe5\x47\xfc\xfe\x58\xe2\xf0\x18\x1f\xd0\xf6\xdd\x12\x0b\x04\xf1\x45\x62\x50\xef\x6a\x30\x09\x2b\x58\xc7\xd7\x6b\x67\xc5\x59\xdc\xca\x1e\x32\xe3\xae\x2a\x54\x3c\xf7\xa4\x14\x24\xa8\x8a\x5b\x1d\x06\x53\xba\xf3\x5f\x7f\xed\x2c\xdf\xcb\x6d\x5d\xc9\x5d\x15\xe9\x65\xa5\xf0\xf1\x6a\x4e\x04\xd8\xce\xf2\x97\xf9\xc5\x35\xe4\xa3\xec\x93\xfd\xec\x53\x91\x07\xbc\x14\x43\x95\xe8\x68\x11\x8e\xb0\xb4\x0a\x1f\x6e\x48\x6a\x09\xdf\x9a\x70\x56\x56\x01\x93\x32\x55\xce\x26\x70\xfd\x12\x8f\xef\xa8\xa2\x00\xd3\x54\x3c\x51\x40\x4e\x0d\xf6\x72\x56\xc5\xac\xfb\x9a\x44\x82\x46\x3e\x1c\x1e\x8e\xb4\x23\xe0\xbd\x28\x3c\x19\x04\xd9\xe1\xdf\x9b\xf4\x12\x0b\xf1\x60\xe3\x25\x7a\xb0\x0c\x08\xaf\x53\x17\xa1\x2c\x9d\x9f\x8e\x58\x2e\xf0\x6b\xc1\xf4\x16\xaf\x03\x34\xd0\x3f\x38\x0c\x57\x9b\x02\xa9\x0d\x6f\x87\xa6\x4a\x17\xc1\x4c\xce\xf0\x6e\x47\x51\xcb\x3d\x15\x55\x18\xaa\x15\x70\x59\x09\xbb\x22\xc0\xf0\x28\xde\x4c\xf0\x25\x25\x9a\x4a\xc0\x1f\x1d\xd7\xf5\xda\x51\x88\xab\x2f\x35\x5a\x7c\xc9\xe7\x3d\x46\xba\x67\xd4\x05\xb2\x38\xf0\xcc\xf3\x2b\xfb\x1b\x29\x6b\x92\xca\xc4\x4a\x41\x1d\x20\x08\x59\x84\xcb\xce\xe7\x8f\xf3\xb7\xbe\x74\x96\x7f\x70\xcf\x6d\xe5\xd3\xf3\x99\x5f\xcf\x96\x88\xec\xe0\x3f\x83\x16\x63\x35\x72\x75\x73\x22\x5c\x9a\xc0\xc1\x5a\x05\x4a\x5d\x05\x6c\xc2\x45\x7a\x6e\x79\x09\xa5\x6d\x51\xe0\xf4\x9b\x55\x14\x95\x28\x68\x9c\xf3\x5f\xb9\x37\xef\x65\x37\xce\xa2\x8f\xcf\xf9\x66\xd5\xb9\xf5\xb3\xf3\xf5\x57\x42\x7b\xb1\xbe\x4a\x4e\x11\x09\xcd\x6d\x2d\xe7\x1e\xef\x3b\xbb\x4f\x5c\xc8\xae\xc9\xec\x5f\x71\x7f\x3a\xc4\xa5\xa8\x42\xd0\x69\x3a\x53\x5b\x4e\x4d\xf9\xa9\xc1\x0e\x6d\x48\xba\x0c\x41\x04\x83\x2c\x65\x50\x53\x4f\xfa\x7e\x97\x42\x91\xa0\x71\x78\x2b\x3c\x6f\xe4\xd6\xaf\xee\xb7\xdc\xeb\x52\xc2\x8b\x98\xd3\xc8\x89\xac\x9d\x2f\xb9\x5f\xb5\x99\x7e\xe9\xba\x3c\x8d\xee\xfa\x41\x4d\xbe\xc3\xf2\x01\x17\x0d\x41\xec\x36\xf4\x06\x5d\xb0\x7c\x66\x67\xe3\xef\x7b\xff\xe8\x8b\x34\x88\x72\x43\x40\x00\x24\x9c\x04\xae\xa0\xcf\xce\xc6\x8f\xc3\x5f\x7c\x74\x8c\x3b\xcb\xa6\xbf\x69\x1e\xdd\x80\xa0\x29\xc6\xe0\x6b\xf2\xa5\x04\x55\x1f\xc8\xeb\xa7\xb6\x3a\x4d\x78\xa7\x7a\x76\x36\xfe\x9f\xec\x8f\x96\xd0\x95\x5f\x5c\xcb\xdf\x5e\x2b\xc1\x51\x9d\xb2\x32\xc3\xc1\x9f\x6f\xb1\x4f\x29\xc0\x76\xc1\xd7\x49\x74\xfb\x01\x30\x03\xca\xd9\xd9\xf8\x87\xfc\xf4\x8f\xca\xea\x08\xbd\xfc\xcb\x88\xe8\x4e\x0d\xf6\x8a\xf8\xba\xd5\x01\x0c\x11\x03\x09\x24\x8b\x7f\x3b\xd4\x27\xbb\xfa\x30\x8b\xad\x32\xf6\xa1\xf7\x64\x14\x9e\xf8\xc3\x49\xf9\xd4\x45\x19\x4b\xaa\xf2\x58\x82\x86\x5d\x25\x5c\x55\x89\x2d\x35\xf6\x38\x71\x5d\x78\x2e\xb1\x19\x8c\x3c\xdd\x45\xdf\x14\x51\x59\x6e\x24\x46\x99\xc7\xa2\xd6\xc7\xb3\xb3\xf1\x96\x30\x83\xc8\xc6\x2c\x20\x6c\x80\xd4\xa2\x93\xb3\x02\x7b\xb7\xf0\xc4\x2c\xe7\xe9\xa2\x93\xb2\x89\xa3\xf6\x33\xac\xcb\x3c\xe5\x35\x2b\x0e\xcd\xe2\xba\x3a\xd5\x87\x80\x52\x57\x36\x98\xe8\xf3\xc1\x54\xca\xc2\xd7\x1f\xd1\x99\xc0\x41\x1e\x32\x67\x3d\xfc\x51\x4b\x26\x24\x74\x80\x25\x98\xfd\x70\x04\x6a\xb5\x95\xc6\x12\x61\x32\x26\x25\x93\xca\x22\x9d\xa6\xb9\x5b\xd8\x59\xfc\x99\xa9\x7d\x75\x6a\x2b\xc8\x8e\x15\xf5\x83\x37\xa8\x7a\xe1\x75\x81\xfa\x34\x8a\x8a\x1b\xac\xd2\x5e\x7c\x1d\x9b\xae\xb0\xbd\x2a\xee\xbe\xea\xa3\x81\x56\x0d\xcd\xc9\x97\x89\x38\xd2\x2a\x04\xe1\x65\x04\xaf\xa8\xa2\x30\x4c\xf8\x4f\x26\xfc\x7c\xbf\xba\x7b\xfe\x42\xe6\xf0\xba\x38\x26\x59\x7d\xc5\x60\x82\xfc\xbc\x8d\x68\xe3\x29\x21\xa2\xd2\xe7\x22\xa4\xde\xd5\x72\x32\x4d\xa1\xf4\xe1\x5f\x79\xc2\x15\xcf\xd7\xb7\xcd\x19\x22\x4d\x48\xe2\x5c\x52\xe7\xf9\x63\xf7\xec\x37\xd9\xa7\x97\xb0\xa4\x09\x4f\x8e\x5f\x5a\xcb\xfd\xb0\x29\x8e\x12\x16\xd0\xb6\x17\x78\x41\xd1\x20\xe5\x1d\xf2\xf8\x78\x61\x87\x76\x08\x17\x53\x42\x3f\x37\x74\x8b\xfa\x09\xd3\x11\x4b\xbd\x95\x97\x79\x13\x8c\x21\xbf\xf4\x9d\xf3\x68\x0d\x33\xbd\xb2\x4f\x2f\x94\x38\xa5\xd8\x90\x36\xe7\x9d\xc5\x9f\xf2\xeb\x67\x9d\x8d\xad\x12\xec\x18\xef\xcf\xed\x7c\xe5\x5e\xda\xc5\x34\x1c\x6f\x22\x96\xf3\xe9\xf3\xf9\xf9\x73\xb9\xdb\xab\xce\xe2\x7d\xb8\xee\x74\xd1\xbd\xbd\x8c\x0c\x22\x8e\xe8\x70\x8f\xc6\x40\xf8\x75\x1d\x9e\x33\x12\x76\x4b\x87\x03\xf2\x2e\xe9\x10\x59\xc1\xc0\x6c\x52\xb2\x13\x93\x11\xc0\x66\x76\xd7\xb2\x3f\x6d\x8a\x80\x5b\xb6\x9e\x0c\x5e\x03\x9c\xc1\xd4\x85\xb7\x68\x7c\x22\x4e\x92\x33\x85\x02\xc4\x6f\xb3\x05\x3d\xa1\xd8\xe0\x6c\xc7\x9f\xdb\xaa\xdd\x99\xf8\xab\x34\x25\x15\x20\xc4\x27\x14\xbb\xad\x08\x0c\xa4\x4a\x48\x64\xcc\x94\xb4\xc4\x24\xfb\xc1\x96\x26\xea\x87\xfd\x2f\x53\x7f\x8c\xff\x31\x7e\xac\x0d\x3b\x93\x7a\xff\xb0\xa5\x89\xb7\xf1\x2a\x8b\x45\x61\xa0\x76\x4c\x09\x84\x78\x2d\xa2\x6b\xea\x4c\xbb\x7f\xc5\xaf\x8d\x67\xe2\xb4\x31\x72\xda\xb4\x94\xaa\x8a\x0a\x44\x64\x0e\xbf\xe3\xc9\x1a\xd7\xce\xe4\x96\x1e\xe4\xb6\x16\x82\xbe\x8f\x57\x07\xcb\x99\xc3\xb3\xce\xe6\x42\xd1\x24\xbe\x3a\x58\x79\x99\x9e\xe7\xc3\x2f\xbc\x52\xcf\x44\xbe\x3a\x60\x7b\xd4\x5d\x5e\x77\x2e\x80\xb8\xbb\xf8\x90\xb1\xe6\xd6\xd5\xec\xcf\x77\xb3\xd7\xce\x90\x66\xe0\xf0\x27\x34\x77\x7b\x2b\x7b\x77\xaf\x30\xa7\x88\x06\x06\xb3\x90\x3b\x7b\xcf\x39\xff\x20\xb7\x39\x8f\x52\xcb\x59\xbc\xef\xec\xef\x15\xcf\x04\x93\x24\xfc\xda\x6a\x61\x7a\xdd\xe5\x75\x6f\x7e\xc3\x58\x73\x92\x4a\x32\x35\x2d\x4c\xca\x4f\xa8\x29\x99\x7a\xc2\x83\xb7\x0d\x6b\x2f\xca\xd7\xe6\xc5\x3e\xa9\x4c\x92\x29\xd5\x56\x0c\x95\x12\x5b\x49\x0a\xfb\xa4\x01\xd9\x4f\x9d\xc5\x7b\xb9\xcd\x79\xf7\xe7\x05\xbe\xef\x61\x31\xdd\xad\xab\xf9\x5b\xdb\x6c\x8a\x03\xc9\xdb\xfc\x4a\x29\x24\x6f\x57\x26\xfb\x78\xcf\xd0\x47\x35\x1d\xa8\xc7\xfb\xbb\x3e\xea\x1e\x1c\xed\x39\xd9\x79\xa2\xb6\x0a\xc9\x75\x94\x3a\xc7\x4f\x86\x44\x42\x23\x24\x9f\x8c\x7f\x29\x4a\x39\xc7\x4f\x3b\x04\xdf\x4a\xd6\xe4\x98\x2e\x99\x72\x87\xef\x3f\x10\x9d\x41\x67\xd2\xb9\xdb\x5b\xee\x77\xbf\x05\xde\xac\x0c\x12\xd2\xf2\x79\xbc\xdc\xa4\x3c\x81\x14\xb4\x57\x11\x68\x48\xbb\x77\xd7\x1f\xe5\x9e\x2c\xb9\x7b\x17\x50\xa7\x8c\x00\x1c\x35\x95\xda\x50\xa0\x8e\x11\x05\x11\xd4\x4c\x88\x90\xb3\x01\x95\x0d\xaa\xe6\x6c\xf8\xf0\xaa\xe6\x6c\x00\xbc\xea\x39\x1b\x3e\xc0\xd0\xb4\x44\x84\x16\xca\x3d\x1e\x9c\xd0\xe9\x03\x30\x91\xe6\xab\xfa\x5c\x45\x9a\xa6\xe8\x31\xfe\x60\x65\x89\xaa\x31\xfe\x32\xf8\xe1\x31\xfe\x60\x4d\x8b\x88\x31\xfe\x32\x0c\xd5\xa2\x35\x65\x75\x33\x22\xc2\x15\xf7\xa4\x2f\x2f\xb6\x51\x0d\x64\xd0\x14\x0e\xe7\xcb\x80\x21\x5b\x0d\x68\x58\x2e\x02\xb2\x65\x48\x2e\x42\x31\x18\x6e\xfc\xc2\x8d\x1f\xa5\x70\x29\x4f\x93\x2c\x4b\x99\xc0\x23\x27\xf8\x1e\x66\xab\xab\x6a\x78\x23\xce\x20\x11\xc8\xda\x28\x25\x5e\x1d\xac\x66\x76\x37\x9d\xf3\xeb\xee\xb3\x65\x77\x75\xc9\xfd\xe5\x90\x67\x11\x79\x75\x42\x82\x9f\x54\xa1\x3e\x2c\x5f\x08\xd0\x57\x49\x16\xf2\x00\x41\xfa\x93\x31\x29\x69\x54\xc6\x1d\x66\x91\xb7\x94\x38\x8d\x13\x7b\x52\xb7\x28\xbf\x4e\x60\x52\xae\x7c\x1a\x06\x95\xf1\x42\x02\xd3\xcc\x85\x79\x52\xc8\x26\x30\xb6\xfc\xfc\x5e\xf6\xd2\x55\xdf\x99\xcc\x54\x93\xbd\x4d\x67\xed\x09\x3b\x63\x37\x1e\x38\x8f\xd6\xdc\x2b\xb7\x72\x4b\x4f\x4a\x43\x79\xfc\x65\x81\x9e\xed\x11\x1f\x25\x8b\x03\xa5\x68\xd5\x2c\x8e\x4a\x20\xcb\x73\x2b\xb0\x5e\x0d\x0f\xf6\x47\xcf\xdf\x08\xb4\x15\x24\x84\x94\x9f\x00\xd1\x10\x05\xb3\x37\xaa\xf6\x29\x2c\x02\x50\x5f\x5f\xae\x88\x00\x6b\x6e\xb5\x55\x37\xdc\x08\xdd\xb3\x22\xc3\x6e\x5d\x43\xac\x02\x27\x85\x64\xc0\xe1\x0e\xa9\x9a\x2e\x5f\x80\x15\x92\x30\x81\xd2\x26\x24\x61\x82\x43\x49\xb0\xc3\x42\x55\x85\xe5\x96\x9c\xe7\x8f\x51\x36\x21\xc4\x50\x58\x28\x14\x99\x29\xa7\x68\x01\xfd\x5b\x4c\x65\x18\x34\x2b\x72\x42\x1f\x1e\x15\x55\x13\xfa\x00\xec\xef\x25\x9e\x1f\x5c\x9f\xe8\xd7\x81\x6a\x8f\xe7\xfb\x83\x6e\x28\x9e\x5f\xa6\x24\xd6\x12\xcf\xf7\x49\x68\xb5\xef\x3b\xa0\x7c\x46\xf6\x7a\xfb\xc4\xfd\x2e\x83\x14\x65\xca\x5a\x68\x90\xa2\x8e\xf0\x84\x3f\xfc\xd6\x79\xf5\x45\x8c\x5e\x9d\xa6\xd6\xa6\x28\x04\x6c\x8c\xa8\x01\x05\x9f\x32\x3f\x72\x3f\xc8\xfe\x98\x9b\x0b\xb9\x7d\x5c\x23\xa4\x68\x5b\xb1\x10\x83\x0f\x7c\x16\x11\x91\x1f\xb5\xaf\x05\x4d\x78\xa8\xdf\x47\xf2\xda\x42\xfd\x65\x22\x3f\x7a\xa8\x3f\x40\x6c\x94\x50\x7f\x33\xf6\x6e\x44\x43\xf1\xf5\x04\xf9\x43\x8d\xcc\x08\xe1\xee\x32\x52\xff\x89\x03\x3d\x81\xb9\x88\x1e\xd6\x29\x4c\x80\x38\x50\xda\x64\xe9\x59\x47\xf0\xb3\x84\x4a\x3f\x7c\x54\x7c\x27\xae\xf0\x1c\xf3\x31\x5a\x71\x7e\x15\x96\x24\x88\x89\xdf\x6f\xf6\x97\xa6\x88\xba\xea\xa3\xaa\x14\x52\x6b\x09\xf5\xb5\x47\xe0\x8e\x17\xba\xa1\x75\x04\xb8\x2a\xf0\x58\x28\x55\xb0\x28\x92\xf8\x2b\x01\x3e\x5b\x52\xd4\xda\x4a\x88\x1d\x57\x64\x28\x56\x93\xa4\x92\xf6\xbf\x44\x13\xb4\xb0\xe5\x5e\x79\xe8\xae\x2e\xbd\x3a\x10\x49\x2d\xac\x32\xe9\x35\x90\xe5\x69\xc3\x41\xbd\xdf\xbf\x73\x29\xd2\xdd\xe7\x37\xb2\x17\xb7\xdc\x95\x34\xba\xd3\x91\x55\xb2\xd7\xce\x38\xdb\x57\x98\xd5\xf1\x93\xe0\xea\x63\x09\x62\xa8\x1a\xef\x89\xa3\x80\xbe\xe6\x17\x08\xd4\x31\x08\xe9\x5d\xeb\x0a\x25\x06\x8b\x1b\xb8\xcb\xeb\x45\x97\xb9\x7e\xe5\xb9\x22\xec\x79\x49\x01\xd2\x3a\x48\xf5\xa7\x28\x48\x69\xb4\x29\xaa\x0f\xbb\x61\xd1\x94\xac\xc7\x6c\x1b\xee\xb6\xe9\x89\xea\x6b\x12\xfc\x84\x1d\x12\x2f\x04\x59\xd2\x1e\x06\xcb\x9a\xf4\xaf\x95\x05\xe2\xb3\xe1\x83\x2a\xf6\xef\x30\x18\xe1\x48\x20\x45\xbe\x70\x25\xd3\xd4\x93\xbc\xc4\x16\x5c\xdc\x03\x55\x1d\xdb\xb0\x8b\xd1\xba\xdb\x77\x78\x78\x2a\x60\xce\xe4\xd3\x8f\x73\xb7\x57\xb3\xcf\xb7\x72\xdb\x0f\xdd\x95\x6f\x9d\x55\x91\x7f\x2c\x40\x47\xca\xc2\xba\x1c\x5e\xb7\x5d\x62\xe9\xe8\x18\x83\x7e\xbc\xbc\x31\x64\x61\xd1\x35\x19\x02\x53\x29\x0b\xbf\xe6\x1f\x89\x82\x28\x50\x68\x99\xdf\x20\x5c\xf9\xd5\x4d\xdf\x7f\x75\xb0\x9a\xdb\xf9\xb6\x50\xcc\x11\x0b\x08\xc1\xe2\xfb\x85\xb6\xf0\xcd\x30\xca\xf9\xd5\x02\x46\x93\x3e\x8e\xdb\x03\xca\x26\x49\x5a\x05\x6b\xa7\xec\x5c\x6f\xda\xa1\x86\x8b\x5f\xf9\xd8\x2d\xdc\x6b\x2f\x21\x2d\xc8\xec\x62\xd9\x5b\x3a\x4c\x36\xf5\xaa\xca\x0b\x64\xeb\xe3\xe2\xc1\x8d\x07\xe4\x43\x60\xa4\xd1\x0c\xe4\xc0\x48\xfb\x2a\x8c\x34\x28\x48\x76\xb7\x45\x03\x67\x32\x06\xde\x2c\xdf\xdc\x2d\x1a\x2f\x63\xc4\xd6\x19\x7e\x30\x76\x41\x02\x54\xab\xe7\xa0\x02\x6b\x57\x9b\x8c\xdf\xdf\x44\x34\x61\x17\x30\xa9\xcc\x4b\x5c\x60\x2e\x44\x51\x75\x8e\xaa\x56\x20\x9e\x04\xe5\x25\x3d\x00\xae\x7b\xf1\xa1\x7b\xfe\x97\x3a\x88\x40\x8d\xb4\xad\x58\x1f\x8f\x48\x0c\x57\x18\x4b\x3f\xae\x85\x28\xe8\x4b\x3b\x34\xf4\x61\x50\x6d\xf1\x43\x3a\xa1\x02\xd9\x0f\xc9\xc0\xe7\xd5\x8f\x5e\x51\xd0\x55\xfc\x01\x2f\xb8\x8c\x89\x2f\xef\xfe\xeb\x7f\x3f\xd9\x0e\x0d\x37\xd9\x7f\x4e\x88\x02\x2b\x58\x4f\x19\xeb\x26\x17\x92\x3c\xd8\xc7\x2f\xd3\xf3\xf0\x35\xfb\xef\x09\x71\xdc\x44\xb1\x0c\x55\x9a\xf1\x0a\x12\xc3\x1d\x39\x5b\xb2\x53\x7e\x51\x2e\x51\x8a\x15\x54\x7b\x2b\xbd\xfa\x97\xbe\x9f\xfb\xe2\x85\xf3\xcd\x6a\xf6\x6c\xda\x5d\x14\x05\x17\x75\x5e\xf8\x47\xd5\x4d\xe5\xef\x94\xe8\x29\xdb\x48\x89\xaa\xce\x64\x76\xd7\x9c\x47\x4b\xb9\x83\x5d\x67\x69\x2f\xf7\xf5\xe5\xdc\xca\xe3\x50\xa0\xf4\x73\x9a\x48\x61\x68\x98\x26\x75\x9b\x7a\x65\x1a\x43\xa0\x43\x9d\xbe\xfc\xfc\xad\xec\x8f\x0f\xb1\x54\x5f\x28\x82\xa4\x64\x78\x71\x67\xec\x53\x8a\xb7\xda\xf9\x75\xc2\xa4\x3e\x45\xbd\x90\x19\xe8\x27\x86\x49\xa7\x14\x3d\x65\xe1\x2d\x4b\x0b\x8b\xeb\x85\x5e\x84\xcf\xec\xae\xe5\x36\xe7\xd9\x98\xc1\xfd\x52\x88\x86\x15\x5f\x8d\xe7\x71\xc3\xc3\x1b\xe5\x57\xe6\x9d\xc5\x65\x67\x65\x8d\xdf\xce\xdc\xdd\xce\xde\xdf\xaf\x16\x07\xc7\xa1\x41\xb5\x30\xef\x5a\x9e\x34\x6e\x53\x13\xa8\x0e\xd1\xa7\x36\xb6\xfc\x3b\xa0\xce\xe1\x2a\x90\x04\xc4\x43\xf1\xaf\x08\x91\x0c\x3d\x71\x9a\x9a\x31\x25\x09\xf7\x1f\x75\xbf\x04\x03\xf2\x3f\x53\xa4\x8e\xca\x81\x57\x62\x4c\xae\x8a\xb6\x81\x9f\x77\xc4\xf6\x67\xf0\xab\xc2\x9e\xa8\x0c\x50\xbc\x31\xf4\x44\x2a\x49\x35\x1b\x50\x90\x94\xa9\x56\xcd\x5a\x71\xd7\x97\x32\xfb\xcf\xc8\xa9\xc1\xde\xaa\x69\x2b\xe8\x0b\xc7\x81\x06\x22\x4b\xc2\x4d\xee\x15\x91\xe0\x43\x09\x7c\x12\x42\x3f\xc3\x21\x2c\x0e\x19\x9e\xa9\xc3\xeb\x1b\x13\xc9\xb6\x69\xd2\xb0\xc9\xb8\xa4\xa8\x54\xf6\xaa\x7a\xe9\xe6\xdc\xdc\x88\x36\xa2\x9d\xc2\x22\xb6\x90\x92\x05\x85\x1a\xdb\xfd\x1a\xaa\x16\xb6\xeb\x9e\x92\x14\x15\xd3\x37\xd9\x6e\x60\x72\x76\x42\x99\xa2\x30\x9d\xe2\x7a\xf8\x67\x73\x07\x2b\x58\x7a\xd4\xb9\xfb\xb3\x7b\xe9\x72\x29\x5a\x5e\x0f\x05\x2a\x39\x42\xc9\x51\xf8\xe7\xe1\x8d\xec\xd3\x4d\x66\x45\x5e\x3b\x03\x39\x85\x4c\x37\x3e\xbc\x1c\xac\x0d\x26\x4c\x5f\xf5\x86\xeb\xd7\x99\xe4\x95\xc8\xda\x2c\x2c\xd0\x6e\xa5\x92\x44\xd6\xa9\x55\x48\xb7\x84\xab\xc3\x24\x49\x6d\x49\x96\x84\x89\x2c\xee\x4a\x9a\x0f\x46\x5c\x13\x33\xbb\xcb\xc4\x25\x56\x3e\xc7\x04\x4d\xe7\xc2\xb2\x73\xe6\x31\x3b\x5e\xf6\x7e\x04\x0c\x24\xf7\x64\xc9\x5d\x17\x34\x09\x39\x9e\x4a\x1a\x45\xf5\x26\xd9\x4a\x50\x49\x06\x49\x83\x25\x16\x45\xbb\x17\x4a\x40\x06\x0b\x37\x32\x2b\x23\xbd\x9a\xff\xee\x86\xf3\xe8\x90\x49\x43\x78\x58\x19\x6d\x77\xdf\xc7\x3d\x83\xfd\x7d\x27\xbb\xfb\x86\xc9\xc7\x9d\x83\x3d\x9d\xef\xf7\x76\x13\xe8\xc1\x2f\x4c\x2a\x0b\xa4\xd5\x86\xc5\xe9\x42\x20\x0b\x59\xb9\x0c\xb4\x80\xad\x2b\xc1\x8e\x04\xb5\x3a\xbc\xda\x6a\xb0\x7a\x01\x7a\x11\xea\x87\x67\x84\xa9\x39\xdd\x49\xc3\xc6\x7a\xac\x44\x37\xc9\xb8\xae\xca\xc2\xa4\x0f\x01\x00\xdc\xb4\x90\xd2\x60\x98\xfa\xe7\x33\x5e\x8d\xfe\xce\x81\x1e\x2f\x97\x52\xe8\x23\x81\x22\xcf\xf0\x26\x26\x4a\xb2\xcd\x06\x90\x06\x18\x24\x92\xbb\x7a\x29\x7b\xe1\xcb\x50\xbc\x0d\x78\x8b\x00\x79\xcd\xde\xa2\x62\xbc\xcd\x72\x16\x61\xbf\xd1\xe6\x3a\x8b\x2a\x51\x5a\x93\xaf\xa8\x78\x82\xea\x42\xae\x9b\xd0\x3e\x6a\x0c\x7a\x30\xaa\xba\x30\x9f\x08\x51\x2d\xaf\xa3\x5e\x9e\xbf\x7d\x5e\xa8\x99\x71\xc0\x35\x7a\x88\x10\x7e\x54\x0f\x11\xc7\x51\xec\x20\x0a\x68\x14\x11\x7c\x43\x80\x30\xb7\x39\xcf\xd0\xae\x1f\x04\x9d\x41\x6c\xee\xaa\x66\x48\x06\x28\x68\xa5\x6b\x08\xc9\x6c\x8e\x53\x08\x48\xfe\x9d\xf8\x84\x70\xb9\x5b\xe1\x13\x2a\x1d\x65\xa3\x2e\xa1\xa6\x0c\xb4\x75\x2e\xa1\x86\x86\xdb\x5a\x8f\x10\xb2\x6e\xeb\x3d\x42\x15\xa6\xe0\x77\xe5\x10\xaa\x77\x1e\x1a\xdf\x02\x0d\xfa\x83\xf0\xf0\xaf\xcf\x1f\x24\xa4\xa1\x4e\x77\x10\x4e\x62\x63\xee\xa0\x6e\x4d\x36\x74\x45\xb3\xc9\x5b\x8c\x90\x49\xdb\x36\xa0\x3d\xd3\xdb\x22\x5d\x4e\xfc\x7e\x38\x78\x99\x1a\x26\x4d\x48\xe2\xa6\x86\xa2\xef\xa7\x0a\xd7\xdf\x66\x67\xe3\x1f\x4b\x9e\x7b\x79\x5a\xb2\x78\xe5\x4f\x5b\x38\x4d\x7e\x3f\xbf\x80\x1a\x5b\x04\x45\x68\x0d\x81\xa5\xc5\x37\x4f\xc5\xe4\x20\x36\xfa\x13\xa7\x7a\x8e\xb7\x75\x88\xea\xf2\x20\x4f\xc2\x4b\x70\x7d\xb7\x02\xb3\xbb\x57\x17\xb2\x57\x0f\xb2\x17\x6f\x7a\x05\xa3\xc3\x88\x81\x43\x1d\x2b\xeb\x83\x7e\x1a\x52\x8c\xe8\xc5\x0e\x6a\xa6\x25\xf0\xc3\xa0\x27\xbc\x9b\x9a\x85\x5a\x44\x8a\x4a\xc5\x83\xc3\xa2\x1f\x81\x0a\x42\xee\x83\x8b\x35\x0d\xc7\x47\xc8\x87\x53\xbd\x9b\x2b\xc7\x59\x69\x64\xc1\x8f\xa3\xe0\xb4\x79\x19\xd5\xaa\x15\xbf\x4b\xeb\xa7\x96\x8e\xb0\x26\xac\xa1\xf5\x5a\xf9\x6d\x57\xa8\xcb\x5a\xcf\xba\x55\xbc\x61\x1b\xa1\x88\x78\x95\x5b\xb6\xa5\x3c\xea\xd5\xad\x0d\xad\x28\x2e\x20\x8d\x13\x55\x9b\x00\x00\x50\x72\xc5\x1c\x4e\xdc\x45\x51\xc6\x58\x31\x7b\xb3\xf2\x26\x8c\x3a\x3a\x39\x3c\xa7\x33\x4a\x79\xe0\xb0\x74\xcd\x8a\x64\x85\x17\x0b\x8e\x4e\x57\x53\x89\x8a\x4e\x51\x90\x0f\xb8\x3a\x30\xa2\x9d\xf4\xae\x26\xa2\x65\x00\xb7\x60\x7d\x4b\x01\xb2\xdc\x4d\x6a\xa7\x4c\x8d\xca\x71\x32\x80\xd7\xb7\x99\x99\xd0\x96\x18\x27\x89\x94\xa9\xb6\xe1\x17\xdc\x46\x4c\x10\xdd\x54\xb0\x7f\x11\x78\x80\xea\xe2\x35\x61\xd4\xa6\x4a\xd2\xc4\xd9\x5c\x7a\xb1\xf8\xd4\xad\x49\x20\x8a\xf1\xa2\x7a\x10\x8a\xbd\x10\x97\x11\x62\x0f\xc5\xed\x37\x6d\x01\x59\x5c\x58\x57\x71\xb5\x3d\xf0\x9c\x55\x14\xc6\x45\x5f\x47\x42\x6a\x19\xba\x66\xd1\xc8\x58\x9d\xeb\x37\xdc\xa5\x95\x3a\xb1\x52\x91\x12\x56\xc5\xcb\xd1\xe0\xea\x0a\xd1\x86\x2f\x6e\x40\xc5\xab\x7b\x71\xc7\xb1\xc7\x74\xc0\x11\xcd\xcc\xb9\x48\x02\xea\xd1\x59\x77\xe5\xd0\x39\xff\xd0\x57\xd6\xeb\x95\x4a\xe5\x34\xe0\x4d\xb1\xea\xe2\x28\x48\x02\xcc\x43\x5d\x32\xc8\xc3\xdf\x80\xb0\x06\x42\x9a\x2c\xac\x23\x90\xd5\x54\x9a\x22\x13\x54\xad\x0f\x06\x20\x2e\x52\xff\x6a\xe7\xc7\x52\x9d\xba\x70\xf2\x46\x49\x14\xe4\x63\xaf\xae\x55\x8b\xc0\x36\x40\x61\xf3\x88\x8a\x46\x47\xa5\xc4\xe1\xa8\xb4\x54\xcc\xfc\xad\x8f\x1a\xdd\x9c\x96\x4c\x20\x88\x49\x2f\xa1\x6d\x90\x7b\xb1\x92\x9f\xbf\xe1\xdc\xbc\x55\x93\x80\x9c\xc0\x6a\xa7\x90\x57\x90\xd0\xe5\x10\xd3\x03\x62\x5a\xf0\x1e\xf7\x8a\xde\x39\xa8\x1b\x93\xa2\x8d\xeb\x22\x53\x37\x80\x88\x73\x7a\x3d\x58\x82\x2d\xa9\xac\x54\x32\x09\xcd\x7d\x42\x31\x06\x3d\xbe\xee\xd7\x57\xd8\x19\x5b\x0f\xe2\x42\xcb\x55\xaf\xb0\x2c\x8f\xeb\xcd\xce\xc6\x3f\x50\x54\x3a\x20\xd9\x93\x62\xe6\x39\xbc\x51\xd4\xe6\xb0\xe8\x1b\x1e\x56\xc4\x4c\x81\x9a\xb7\xbf\x47\x1f\x84\x6f\xd8\xfc\x87\x4f\x06\xd4\x97\xa9\x38\xff\x51\x90\xe8\x1a\xd6\xbc\xc0\x2b\x0e\x11\xf8\x2a\xb3\x9b\x76\x7f\xba\xed\xa6\xef\xe3\x8d\x85\x7a\x79\x8b\x4f\xb5\x17\x1c\xc5\xf9\x37\xa9\xa1\x8b\xd1\x1f\xde\xf0\x43\x9e\xe5\x61\xdb\x60\x10\xb4\x2e\x82\xb0\x48\x08\xb6\x70\xa2\xd8\x60\xc8\x4f\xcf\xae\x62\x3c\x01\x31\xbc\xa5\xd9\xa3\x73\xce\x85\xaf\xb3\xd7\xce\x64\x5e\xac\x65\x5f\x94\xae\x7a\x11\xb0\x10\x9a\xe0\x4a\xb9\xa4\x2a\x7f\x67\x84\x0d\x0e\x74\x79\x4e\x48\xb1\x44\x79\xfa\xdc\xb9\x7f\x16\x7d\x39\xf0\x01\x0f\xeb\xd4\x32\x11\x49\xc9\xb4\x26\x25\x50\xc1\xfe\x63\xa8\x5f\x54\x2a\x04\xf3\x7c\xe1\x8d\x52\x21\x19\x06\x5c\x37\xa8\x56\x10\x5e\xd0\xdf\x0f\x26\x57\x84\x05\x1a\xa5\xc0\xdb\xf9\xf4\xf7\xd9\xe7\xd7\x6a\x1a\x89\x87\x2c\x52\x67\x16\x51\x4f\x96\x1a\x06\x67\x48\xa6\x55\x65\xda\x9c\x95\x75\xf7\xc6\x85\x9a\xa7\xcd\x83\xcc\xeb\xda\x84\x02\xc7\x12\x34\x75\x00\xf7\xcc\x8b\x3a\x4c\x41\xde\x93\x3e\x82\xd3\x0d\x12\xa8\x6a\x76\xba\x19\xa6\xee\x39\x18\x25\x03\x3d\x52\xd0\xe9\x17\x3a\xb9\x82\xa8\x6d\x8b\xb0\x41\x31\xe0\x1c\xfc\xa8\xc2\x5d\xd9\x8a\xab\x1e\x75\xc3\x56\xa2\x33\x32\x61\xad\xa0\xa2\x20\x53\x99\xe8\xa0\xa6\x58\x72\x00\x09\x99\xc3\x2f\x73\x4b\x0f\x32\x07\x7b\x4c\x6e\x5c\xdd\xca\x5e\x3b\x53\x87\x24\x35\xa9\x24\x1f\x9d\x36\x15\x7e\xb8\x6a\xe3\xca\x84\x10\x6d\x35\x38\xe5\x8e\xd6\xaa\xea\x5c\x6e\x27\xed\x9c\x5f\xaf\xe2\x71\x8d\xa6\xc8\x79\x14\x54\xd9\x19\x88\xb1\xa2\xb1\x5d\x0b\x74\x58\xa7\x50\x14\xbe\x71\x5d\x11\x57\xf5\x55\x29\xc3\x56\x95\x2b\x10\x6d\x80\x1f\xea\xc2\x3c\x6e\x52\x48\x0d\x6c\x8c\x1b\x7c\x28\x7a\xe1\x1a\xa6\xf8\xe4\x80\x63\xd8\xbd\xf4\x0b\xdb\xf1\xfd\x9d\xec\x03\xbc\x54\x59\x23\xe9\x49\x7d\x2a\xa0\xa6\x78\x3d\x27\xeb\xa2\x5f\x93\x92\xf5\x7b\x66\x83\xad\xd7\x9b\xeb\x9f\xe5\x02\x1b\x34\x4d\x31\x03\x3a\x87\x37\x90\xfb\x2a\x87\x15\xaa\xcc\xa2\x8f\xc1\x57\x33\xa1\x57\x6d\x11\x0b\x56\xd7\xaf\x0e\x6f\xf8\x9c\xe8\x55\x5e\xe3\x3a\xa8\xd8\xbe\x89\x3a\x07\x96\xae\x4e\xf9\x77\x9f\x23\x08\x99\xfb\xdf\xbb\x37\x2e\x60\x9e\x6c\xbd\xb2\x05\x52\x68\x4b\x2c\x9f\x08\xd3\x10\xec\x99\x5b\x74\x64\xd4\x3b\x74\xdb\x54\x28\x8c\xdd\xb2\xa5\xc4\x69\x21\x73\xbb\xdf\x3e\x67\x52\xee\xd6\x97\xd9\xf5\xda\x0c\xbc\x52\x0c\x51\x4e\xc4\x50\x64\x11\x07\x96\xd2\x34\xaf\x06\x2e\x7c\xd3\xa5\xea\x29\xb9\x4b\xd7\x6c\x53\x57\x55\x6a\x9e\xa4\x96\x25\x4d\x88\xaf\x95\x87\xc1\xb6\xa4\xa9\xe0\xc9\x14\x85\x79\xc1\x64\x09\x71\x04\x45\x1d\x16\xb4\x6d\xac\x5f\x8e\x60\x1f\xc7\xe6\x4a\x10\x9f\x24\xbc\x16\x30\x0a\x69\xb0\xa3\xf6\x8c\x41\xc3\xfc\xc5\x48\x49\xc1\x5f\x5c\xfe\x71\x4d\x5c\x86\x31\xc3\x92\xed\x14\xa9\xf9\x24\x0f\x25\x8a\xb7\x52\xb4\x16\x94\xa5\x64\xd4\xb7\x3e\x48\x4c\x73\xd7\xc7\xd3\xc5\x6c\xbd\x86\x78\x2e\x34\x90\x6c\x2c\x9e\xfb\x77\xc5\x30\x4a\x16\x44\x84\xed\xfb\x6f\xb3\xbb\x3b\x21\x4b\x10\x86\xa6\xa2\xd7\x92\x28\x16\xbf\xef\x69\x48\x16\x2f\x1e\x2c\x61\xb7\x74\xc9\x9c\x80\x5c\x7d\xcc\x6a\x19\xd0\x2d\xa8\xdb\xd6\x46\xc6\x52\x76\xf0\x9f\xec\xd4\x52\x4c\x6a\x11\x49\x23\x8a\x66\xd3\x09\x6a\xc6\x09\xf9\x80\x59\xc8\xba\x49\x89\x35\xa3\xd9\xd2\xe7\x64\x92\xaa\x46\x3b\x34\x8a\xfa\x2c\x31\xee\xf5\xf2\x2a\x2c\x7d\x6c\xf2\xb3\x2a\xb9\x29\x0b\x4f\x9c\xc5\x7b\x38\x48\xc1\x48\x32\x2f\x36\xa0\x5b\x72\x81\x34\xa6\x87\x1d\x5c\x72\x2f\xed\xbe\x3a\x58\xcd\xbc\xf8\xd2\xbd\xf2\x30\xf8\x6b\x7e\x23\xcd\x8e\xc7\x4b\xbf\xb8\x97\x76\x5f\xa6\x17\x9c\xcd\x85\xfc\x46\xda\x59\x7c\x96\xd9\x5f\xcf\x3d\xb8\xe1\x3e\xb9\x84\x57\xc7\xb1\xc2\xaa\x73\xfe\x8b\xfc\xfa\xcf\x18\x25\x2c\x27\xbe\x2d\x3c\xef\x43\xac\x7d\x55\xdf\xb0\x1d\xa4\x4f\xc7\xaa\xc1\x50\x4a\xb6\xda\x05\x22\x0e\xd0\xef\xac\x5b\x7a\x8d\x05\x6a\xea\x86\xa2\x63\x6a\x87\x4c\xf4\x94\x4d\xa6\x25\xdc\x0f\x80\xd2\x9a\xd1\x12\xe4\xaf\xfa\x18\x98\x85\xdd\xa6\x09\x17\x31\xda\xd8\x5e\x19\x57\x34\xc5\x12\xd5\x4a\xf6\x08\xca\x6e\xaf\x38\x87\x8b\xf9\xef\x6e\x38\x17\x56\xdd\xed\x7b\xd8\xc7\xbb\x04\x96\xb3\xb3\xea\x2e\x5f\x70\xaf\x2e\xe4\xd3\x87\xee\xd5\xf0\x09\xad\xb2\x2d\x23\x6e\x3f\xbc\xd8\x64\xc1\xcd\x26\xd0\xbd\xf0\xfa\x11\xe5\x7d\x79\xa9\x0c\x59\xd9\x94\xe7\x1c\x89\x36\xe5\x85\xaf\x9d\xe7\x8f\x79\x62\x10\xf4\xe2\x65\x62\x9a\x7d\x98\xfd\xf1\x61\x7e\xff\x46\xd0\x96\x17\xd1\x61\xa0\x17\x2d\xe8\xdb\xc5\x4c\x5b\x09\xdd\xad\xfa\x38\x39\x4d\x67\x8e\x4e\x49\x6a\x8a\x12\x43\x52\x4c\x8b\xb7\x98\x27\x7a\x02\xda\x7b\xc9\xc1\x66\xe3\x44\xa3\x92\xd9\x31\xa2\xb1\xe9\xfd\x24\xa9\x0e\x69\x8a\x61\x50\x7b\x6e\x4e\x54\x6c\x39\x7f\xeb\x82\xbb\x71\xb3\x88\x55\x16\xf6\xf2\x6b\x4f\x9d\xf4\x41\xf6\xe9\x19\x3c\x86\x47\x34\xb8\x99\x74\x2f\xf7\xdb\xd7\x99\xdd\xb3\xce\xf2\x65\xf4\xd8\xa1\xe9\x1b\x6c\x60\x5e\xa2\xe3\x95\xd3\x10\x79\x0a\xac\xa2\x39\xa8\x85\xf6\xb0\x1e\x64\x3e\xa6\xc2\x79\xe1\xa1\xb1\xa8\x37\xd3\xe4\x7f\x8e\xa4\x8e\x1d\xfb\x23\x25\x30\xe3\xed\x20\xf3\x14\x1b\x72\xc4\xa0\x30\xc9\xf0\x8c\x41\xc5\x99\x27\x48\x53\x00\x41\x76\x61\x2f\xb3\x9b\xce\x3e\x3d\x93\xfd\xe5\x8e\x73\x70\x29\xbf\xf6\xd4\x47\xe0\xa4\x0f\x50\x3a\x39\x6b\xfb\x4c\x40\xf9\xc0\xc5\x22\x25\x30\x80\x01\x53\x37\xa8\x69\xcf\x94\x0c\x64\x4c\xd7\x55\x2a\x09\xab\xd1\x17\xe8\x2b\xf9\x3e\xbb\xb0\xe7\xec\x7e\xe1\xde\xb8\xdc\x08\x72\x8f\x61\xf9\x61\x20\xec\x9c\x1d\x46\x05\x4a\x65\x5c\xc6\x66\xd0\x62\xd9\xa6\xa2\x4d\xd4\x45\x8a\xb3\x7d\x39\xb3\xfb\xb8\x71\x52\xb4\x54\x72\x8c\x9a\xe5\xac\xe4\xbd\x1e\x95\xa5\x2a\x4d\xd6\xae\xb3\x7d\xb9\x94\x8b\x8a\xe1\x0a\x29\xff\xa0\xb3\xa7\xb7\xfb\xb8\x48\xb4\xc1\x55\x31\xc1\x87\xdd\x9d\xc3\xa7\x06\xbb\xc9\x07\xbd\x9d\x27\x84\x77\x6e\x20\x53\x1e\x6b\x7c\x47\x80\x22\xbc\x35\x14\x00\x23\xc8\x0b\xfd\x00\xee\xd2\x11\x2c\x27\xeb\x85\x5a\x4d\x1d\x2f\xd2\xa5\xac\x10\xdf\x4d\xa1\x9b\xfa\xfd\x6f\x72\x2b\x8f\xb1\x5e\x6c\xf6\xe9\x66\xa1\x59\xc5\xd5\x05\xef\xca\x5c\x28\xee\x71\x6a\x27\x26\x8b\x34\x5a\x2b\x4a\xbe\x9c\x7b\xfe\x02\x33\xe1\x82\x0e\x75\x0f\x61\xa4\xdc\xb8\x52\xec\x18\xfa\xb7\xbc\x7c\xeb\xd2\x16\xfd\xbc\xfa\x42\x55\xcb\x1d\xc9\x0a\xed\xda\x57\x89\xce\x1a\xa9\x8c\x3e\x41\x62\x94\xd1\xa7\x86\x4e\x51\xcd\xb6\x22\x19\x3b\x88\x34\xb3\x77\xb6\xd2\x7a\x84\x1b\x38\xa5\x58\x75\x73\x22\x86\xb9\x68\x6c\x49\x80\x27\x71\x3e\x07\x75\x95\x0e\xeb\xfc\xae\x78\xc9\xba\x54\x9d\x0f\xe4\x56\x31\x24\xc8\xd7\x2e\xa0\x6e\x6c\xe2\x74\x73\xa2\x96\x69\xf3\x53\x7b\x1a\x99\x36\xf0\x30\x99\x58\xf6\xce\x8a\xca\xaf\xb9\xe7\x0f\xb3\x17\x7f\x76\xae\xf2\x12\x76\x8d\x70\x28\xde\x38\xaf\x01\x31\xba\xb8\xea\xc6\x07\x39\x19\x15\x18\x05\xd2\x2c\x9a\xc4\x2a\x22\x58\x98\xdc\x1f\x20\xa0\x31\x76\xc1\x54\xac\x78\x6d\xf9\x37\x9c\x75\xbc\x94\xac\x0a\xe8\x23\xa4\xdb\x70\x4a\x6c\x9d\x5b\x69\x4c\x05\xd0\x13\x92\x4a\x6c\x9a\x34\x74\x53\x32\x67\x98\xb5\x8d\xa9\x02\xde\xe5\x9c\x6a\xf5\xfc\x23\x62\xfa\xab\xa5\xe3\x65\x47\xaf\x9d\xc1\xa8\x77\xa9\x39\x2c\xd0\xc7\xef\x59\x63\x9b\xcd\x92\x2f\x0b\xb7\x41\x19\xec\x88\x64\x78\x36\x40\x3b\x49\xf9\x17\xc9\x0d\xc9\xb4\x68\xc5\x0e\x40\xc2\x53\x31\x48\x57\x50\xc1\x2f\x5c\x0d\x87\x20\x6a\xd1\x7d\xde\xf0\xe3\xd1\xd6\x49\x52\x3a\x4d\xbd\x10\x01\x16\x95\x40\x1a\xaa\xf2\x31\xa2\xcc\xed\x7c\x1b\x4c\x61\x70\x97\x2f\x30\xf5\xec\xfc\x43\x34\xb0\xaa\x3b\x06\x83\x84\x40\xec\x3e\x2c\x02\x8d\x28\x03\xe1\xfb\x6a\x30\xb1\xd2\x03\xc6\x5c\x22\xad\x39\x78\xa6\xbd\x98\x4b\x88\x75\x58\x40\x31\x0d\x6c\xc1\xef\x5c\x7a\x5d\x9c\x5f\x4b\xbb\x32\x24\x39\xac\xb2\xdf\x46\xa5\xdb\x57\xa2\x96\xa7\xd7\xbf\xcf\x6e\x88\x3b\x29\x83\x86\x11\xb8\x2b\x2a\xbc\x6b\xf4\x01\xbf\x0b\x3a\x3b\x1b\xe7\x7f\x7e\xa0\x4a\x13\x73\x73\x84\x17\x15\x13\xa6\x6b\x3b\xcf\x1f\xf3\x34\x67\xd0\x2c\xcb\x00\x88\xb5\x65\x11\x46\xbc\xaa\x1a\x8a\x30\x70\xcb\xb4\x66\x84\xa2\x54\x86\xb0\xab\xa8\x1f\x30\x21\xa7\xe9\x36\x77\x1c\x81\x1c\x54\x67\xda\x71\x17\x5a\x6c\x14\x70\x35\x96\xbd\x45\x3f\x57\x2c\xdb\x22\x92\xcd\x2b\x49\x40\xf9\xf7\xd9\xd9\x38\xfb\xd1\x08\x4d\xeb\xda\xd8\x72\x37\x7e\xca\xfe\xf8\xb0\xe0\x70\x82\x88\x3c\x3a\xcd\xb2\x77\xf6\x9c\x9d\x6b\xf8\xc4\xd9\xbe\xc2\x5e\x5e\x3f\xf0\x0b\x4a\x14\x4a\xe1\x06\xd0\x54\x1e\x89\x6e\x26\x28\x2f\x32\x4f\xde\x92\xb1\xb2\x8a\x61\xea\x50\x44\x43\x37\x31\x5c\x6a\x26\x81\x2a\x61\xaf\x84\x83\xe7\xce\xf2\x33\xbc\x8c\xf0\xea\x60\x39\xb3\xbb\xe6\x9e\xbf\x90\xbd\xbb\xc7\xeb\xd4\xdd\xd9\xcb\x3d\x58\x13\x96\xfd\x08\x10\xc0\x34\xe9\x69\xc5\x9e\xd4\x53\x76\x11\xde\x48\x68\x57\x73\xe9\xd5\xcc\xee\x5a\x10\x67\x18\x42\x5e\x00\x04\x2f\x11\x83\xd4\xac\x1d\x33\x14\xf4\x08\x8a\xcd\x9a\xa9\x48\x2a\x13\xa6\x54\xdf\xb8\xb3\xf7\xf7\x73\x2f\x56\x6a\xc6\x58\x53\x69\x45\x40\x14\xb5\xb4\x22\xc2\xe7\x31\x45\x4f\x82\x7a\xc3\x42\x8e\x0a\xc5\x23\x0a\x2a\xfa\x43\x44\xa6\x0a\x43\x9e\xd2\xc6\x78\x16\x6e\xed\x8b\x09\x5d\x03\xf2\xd0\x7e\xaf\x86\x49\x3d\xd1\x3d\x3c\xdc\xd3\x77\x82\x0c\x0d\x77\x0e\x0e\x0b\x6d\xfd\xfc\xfa\x59\xe7\x3e\xbf\xb7\x15\x09\x8e\xc8\x5a\x0f\x02\x12\x58\xeb\x27\x7a\xfb\xdf\xef\xec\x25\xfd\x03\xc3\x3d\xfd\xe2\xbe\x57\xce\xfe\xf7\xce\xcd\x9b\xf9\xf9\xdd\xfc\xad\x45\x11\x20\x6a\x13\xa9\x10\x2d\xf7\xdb\xf8\xc1\x45\x08\x6b\x92\x24\x54\x85\x99\x7c\xe1\x09\xb9\xec\x45\x28\xbc\xf0\x2c\xfb\xe3\xc3\xec\xb5\x33\x7e\xb8\x3c\xac\x73\x20\xc3\xcc\xe4\x67\x79\x38\x0e\x9d\xb4\x8c\xb7\x42\x3b\x53\x94\xa5\xe6\x56\x0e\xee\x39\x69\x31\x01\x18\x15\x57\x55\x2f\xdf\x91\xd7\xc7\x4a\x4a\xe6\x69\x6a\x1b\xaa\x94\xa0\x55\xaf\xfc\x1e\xde\x70\x76\x17\x9c\x5b\xbf\x70\x72\xf0\x5a\x38\x24\x43\x0a\x4f\xdd\x13\x85\x44\x64\xeb\x8d\xf4\x79\x00\x52\x1b\xe9\xf3\x50\x75\x68\x01\x0f\x4e\x3c\x2e\xbc\x3c\xc4\xa7\x10\x73\x6b\x03\xfe\x1b\xfc\x26\x14\x81\xe7\xa4\x11\x77\xcc\x6d\xe1\x3c\x79\x85\xa2\xc1\xa3\x52\x75\x2e\x68\xe0\xc6\xb4\xd5\xa4\x26\xb9\x6f\x84\x09\xc2\xf5\xcd\x80\x21\x53\x7d\x4a\xc0\x8f\xd4\x8a\xb9\xa8\xc2\x6b\xaf\x6b\x36\xd0\xef\x15\x81\x8f\x31\xc3\xf4\xbf\x2a\x53\xa0\xe6\x5a\x95\x1d\x78\x95\x47\x10\xda\xc4\x4f\xe7\x78\x3d\x13\x52\x4c\x43\xf9\x31\x34\x8e\x81\x7f\x9f\x8a\x28\x23\xa9\x0c\x25\x82\x10\x0c\x4b\x52\x71\xd2\x07\x22\x07\x81\x87\x5d\xd1\xc6\xf5\x16\x97\x09\x11\x8a\x44\x3f\x8e\x59\x75\xb5\x7d\x2a\x5f\x5b\x67\x0e\x3c\x60\xaa\x74\xe6\x28\x8c\x20\x2a\xf9\xd5\x9a\x18\xb4\xaa\x87\x7b\xf8\xb9\x54\xb9\x7b\x41\x0d\xeb\xf3\xbb\xec\x3a\x84\xda\x55\x0b\xbb\x0e\x05\x46\x6f\xfd\xf3\x0d\xb5\xea\xb0\x44\xf5\xa2\x9a\x70\x5e\x46\x38\xe5\xd0\xf8\xb6\x0a\x5d\x29\x4d\x6a\xe8\x96\x62\xeb\xa6\x42\x2d\x12\x8f\xc7\xab\x08\xc7\xc3\x1b\xa8\x58\x87\xdc\xc7\x02\x20\xd1\x89\xf0\x09\x98\x21\xa2\xa4\x0e\x1f\x37\xa6\x6b\x84\xe0\xee\x20\x82\xa4\x0c\x0f\x75\xc5\x7e\x2c\x20\x48\x9a\x2b\x98\x2b\xb6\x63\x21\x11\xf7\x3d\x10\xd9\xc4\xa2\x62\x01\x8a\xaa\xe2\x2e\x8a\x55\x95\x91\x40\x1a\x65\xd4\x92\xa8\x56\x04\x8e\xe5\xe5\x92\x2b\x6c\xed\x9a\xfb\x6a\x55\x04\xd9\xdc\xc1\x39\x87\x5f\x47\x1f\x53\x45\x05\x21\xa2\x1e\xd5\x30\xb1\x35\xf8\xb8\x3d\x07\x67\x83\x23\x7b\x1d\x43\xa8\x8d\xd8\x94\xa7\xf2\x43\x85\xf7\x62\x25\x88\xf0\x46\x3b\xf8\xf0\x04\x7b\xd6\x17\x69\x1b\x56\x56\x72\x2a\x00\x02\x5a\x37\xcf\x3b\x2b\x4b\x55\x77\x65\x31\x6d\x56\xab\xb4\xb1\x6a\x44\xf0\x96\x68\x58\x37\xaf\xb9\xe2\x89\x1f\xb3\x55\x8b\xd5\x09\x88\x61\x8b\x58\xe8\x8a\xf6\x3e\xfc\xc5\x58\x4e\x93\x2b\x65\x8e\xf8\xff\x6e\xba\x42\x5e\xb9\x69\x9a\x4f\x8f\xf3\xcd\x6a\x11\xd3\x06\x09\x61\x56\x5a\xcb\x26\xa1\xbc\x96\xe1\xef\x6f\x76\x5e\xa6\xe7\xcb\xea\x1b\xfe\xfe\xe6\xec\x35\xb3\x4b\xa5\x19\x69\xdd\xa8\x5f\xe7\xe0\x9a\x33\x8a\xd7\xca\xbf\x2d\xe6\xc3\xdf\xc7\x26\x7d\x33\x7b\xf0\x35\x6c\xb6\x66\x6f\x25\xff\x4a\x6a\x45\xed\xb4\x49\x86\x67\xb0\x3b\x68\x64\xd2\x70\x6b\x37\xdf\xcc\x14\x35\x06\x8d\xa0\x6b\x15\x15\x52\x67\x06\x17\x8f\x12\x46\x29\x20\xdd\x8a\x79\x2d\xc7\xe5\xb3\x02\x56\xd2\x8d\x68\xab\xd5\x35\xae\x68\x2a\x64\x4b\x08\x2d\x0f\xac\xbd\xb9\x8e\xac\x25\x21\xbb\x9a\xe3\x60\xd1\x82\x7b\xfe\xc0\xdf\xdc\x38\x5b\x3a\xbc\x0a\x7d\x66\x5b\xe3\xd3\xa8\xd8\x68\x36\xba\x57\x23\x40\x68\xb3\x8d\x87\x20\x65\xd1\xe8\xb0\x2a\xb5\xb8\x0d\x5d\xfc\x68\x82\x33\xca\xf2\x97\xe2\x0b\x36\xbb\x8d\x22\x49\x6d\x29\x71\x1a\x8b\x5a\xb3\xbf\xe6\xe6\xda\x8a\x39\xdb\x3f\x9b\xdf\x58\xa4\xaa\x84\x82\x50\x2e\xc7\x0b\xdf\x45\xc3\xa9\xbe\x82\x70\xa7\xfc\x9f\x7f\xd4\x55\x07\x6a\x4b\xd6\xe9\x66\xc5\x24\x23\x0a\xb3\x70\x82\x30\xa5\xba\x72\x77\xe8\xa3\xa2\x38\x4c\x33\xfb\xa6\x8b\xb6\x12\xe0\x17\x45\x5c\x70\xce\xfd\x5b\x30\xf5\x0f\xb1\xb5\xc7\x42\x79\x03\x6c\x9f\x64\x31\xa7\xa8\xfa\x98\xa4\x12\x1d\x52\xc9\x85\xcd\xbc\x2a\x7f\xfb\x61\x77\x67\xef\xf0\x87\xa3\x5d\x1f\x76\x77\x7d\x34\x3a\xfc\xc9\x40\x77\x63\x5f\x93\x64\xca\xb2\xc9\x18\x25\x23\x47\x0c\xdd\xb4\x47\x8e\xb4\xb3\xbf\xb0\x30\x11\xfb\x87\x6e\x92\x91\x23\x93\xb6\x6d\x8c\x1c\xa9\x0d\x51\xff\xd0\x70\xcd\x1f\xf4\x75\x9e\xac\x71\x38\xc3\xc3\x03\x58\x3b\x09\xda\x95\x25\xd4\x94\x0c\x9a\x11\x16\x87\xc3\x1b\xb5\x63\xba\x3c\x03\xe3\x68\xfb\xf7\x36\x32\xae\xab\xaa\x3e\x4d\x65\x32\x36\x43\x24\xcc\x3d\x85\xbb\xcd\xb6\x0e\x85\x77\xe0\x43\xbf\x16\x93\xa8\xa6\xc8\xe6\x7c\xe6\xc5\x53\x67\xf1\x1e\x26\x4d\x3b\x8b\xf7\xdd\xf5\x25\x5c\x7a\x6c\x9b\x84\xb5\x98\x5e\x1d\xac\xba\xcb\xeb\x70\xe7\xfb\xdf\xdb\x5e\x1d\xac\x3a\x8b\xcf\x9c\xc3\xd5\xfc\x77\x77\xdc\x73\xf7\x72\x5f\x5f\xce\x6d\xce\x43\x6c\x64\xdb\xaf\x83\xe4\xae\x5f\xc5\x98\xbf\x73\x41\x90\x48\x07\xd0\x93\xd4\x9e\xd4\x65\xf2\xd6\x89\xee\xe1\xf6\x81\xfe\xa1\xe1\xf6\x81\x53\xc3\xed\xc7\xbb\x7b\xbb\x87\xbb\xdb\xa9\x9d\x10\xe5\x9f\xc2\xb7\x4c\xf7\x7c\x72\xe9\xd5\xc1\xf2\x89\xee\xe1\x97\xe9\x79\xf6\x39\xfb\xcf\x29\xf6\xbf\x08\x82\x64\xb7\x57\x84\x69\xa8\x1f\x96\x26\x1a\x88\x58\xb7\x3c\xfc\xae\xc0\x26\x44\x00\x5d\xec\x31\x5e\x0b\x14\xe0\xd1\x2d\x1b\x96\x05\x7b\xe9\x25\x67\x62\x56\x6a\x0c\x53\x96\x44\xc3\xcb\xec\xee\xbb\x3f\xdc\xc4\xeb\xe5\x85\x96\x7a\xc1\x2f\xc5\xa3\xf2\xb0\x79\x3e\x65\x98\x2a\xec\x06\xf9\x16\xaf\x2e\xc0\x33\xfa\x26\x25\xf6\x27\x4f\x9e\x0a\x9d\x69\x74\x67\x43\x32\x5f\x11\x61\xce\xe2\xcf\xd9\x8b\x5b\x98\xfa\xc4\x8e\x94\xdf\x16\x73\x9b\xf3\xf9\x5b\x8b\xd9\xeb\x3b\xd5\x09\x4c\xf1\x02\x09\x09\x3d\x39\xa6\x68\x85\x9c\x58\x72\xbc\xff\x64\x67\x4f\x1f\xdc\x02\x80\xba\xe1\x33\xb8\x03\xbc\x86\x96\x63\x8a\xb0\x59\x66\x6e\x79\xc9\xfb\x3a\xb3\x9b\xce\x3d\x7d\xee\x37\x5c\x2c\x26\x7c\x35\xb3\x7f\x0f\x3b\x50\x31\x7a\x21\x03\xd4\x77\xda\xb7\x88\x6a\x4c\x54\x6d\x26\xdd\xc1\xfc\xd5\x9a\xa8\x67\xd2\x45\xa6\x9a\xed\xd1\x58\xe0\x10\x51\x5e\xfc\xc5\xad\xcc\xe1\x97\xb9\xed\x2b\xce\xf2\x3d\x12\x60\x08\xf2\x16\x7c\xf5\x36\x29\x21\xb4\x32\x11\x3d\x7d\x43\xc3\x9d\xbd\xbd\xdd\xc7\xc9\x40\xef\xa9\x13\x3d\x7d\xa4\xab\xff\xe4\xc9\xce\xbe\xe3\xa2\xeb\xae\xce\xf3\xc7\x98\x6f\xcd\x38\x2b\x78\x53\x25\xa4\x05\xaa\x10\x87\x30\x2b\x36\x14\x89\x20\x4f\x16\xb0\xf4\x75\x75\x8f\x9e\xec\x3e\xd9\x3f\xf8\x49\x4d\x42\xbe\x67\x42\xd3\x4d\x5a\x5c\x5e\x4e\x44\xdb\x6f\x2f\xb2\x97\xee\x95\xd4\x94\x13\x40\xd5\xc8\x9f\x14\x4d\xd6\xa7\x2d\xd2\xc5\x0b\xcb\xf6\x2a\x1a\xd6\xe2\xb7\x14\x6d\x42\xa5\x31\x66\xf5\x50\xb9\x9d\x50\x2b\x21\x19\x54\x86\x5b\x38\x1d\xa4\x6d\x76\x64\x64\xe4\xc8\x94\xa4\x2a\x32\xfb\xa3\x83\xfd\xcf\x5f\x2d\x5d\x63\xff\x15\x56\x38\x70\x36\xb6\x5e\xa6\x57\x3d\x84\x38\x55\xb9\xdb\xab\x2f\xd3\x6b\x99\xdd\x6d\xb8\x39\x0d\xfd\xeb\xd7\x77\x9c\x83\x4b\xb9\xab\x37\x73\xcf\x9f\x38\x4b\x7b\xec\x40\x89\x84\xb3\xda\x00\x07\xf4\x69\x6a\x0e\x4d\x52\x55\x85\xe1\xc9\x7a\x6a\x4c\x38\xbc\x91\x23\x61\xb8\x84\x5a\x80\xb3\xb1\x55\x09\x5d\x70\x74\xf9\xeb\x57\x2b\x8f\xae\x2a\x4a\xc1\xf8\xf0\xb8\xf7\x0b\xe5\xf1\xa2\x9b\xde\xf9\x1f\xda\x81\xd8\xd9\xd8\xc2\xf6\xc3\x99\xdd\x6d\x67\x75\xd1\x3d\xfb\x13\x2f\x98\x07\x45\x39\x85\x08\x75\xd3\xa4\x09\x9b\x9c\xb2\xa4\x89\x90\x9d\xef\x3e\xb9\x94\xd9\x5d\x73\xb7\xbf\xcf\xde\x11\x64\xe2\x97\x80\x8a\x93\x4e\xad\x50\xee\x46\xb1\x48\x52\xf1\xba\xf4\xf0\xae\xca\xf0\xb2\x3a\x43\xa8\x96\x50\x75\x8b\xca\xf1\x11\x4d\x68\xda\x96\x50\xf0\x32\xbd\x80\x45\x68\xf2\xf3\x7b\x2e\xdc\x14\x80\x1e\x86\x0f\xf0\x57\x67\xe3\x91\x7b\xf6\xa7\xcc\x8b\xf3\x70\xd3\x51\x64\xc5\x96\xd1\xdb\xe5\xd7\x62\xd6\x28\x19\x57\xa5\x09\x8b\xbc\x45\x3f\x4f\x50\xc3\x26\xb1\xf1\xb7\x49\x42\xd2\x18\xdd\x63\xbc\x2b\x20\x95\xc9\xf4\x24\xd5\xbc\xce\xc3\x24\xe9\xb5\xc8\x80\x14\x6e\xcc\x6a\x29\xde\xdf\xc2\x7b\x60\xe5\x63\x3b\xbc\x51\x5a\x43\x12\xda\x17\x3b\x77\xaf\x39\xe9\xb3\x25\xa5\x8a\x0a\xb7\x07\xef\x5d\x66\xa0\xbc\x7d\x88\x57\xfb\x5f\x1d\x2c\xc7\xc6\x49\xfe\xea\x5d\xe7\xee\xfa\xab\x83\x15\xe1\x9d\xa8\xb2\xd9\xa8\xae\x55\xa3\x1e\xad\xe9\x1a\x1d\x39\x32\x32\xa2\x8d\xd4\xb0\x78\xe5\xc0\x9d\xdf\x16\xf3\xb7\x96\x99\x66\xe9\x83\x77\x97\xd7\x4b\xe1\x47\x23\x7d\xd0\xab\x9e\xd4\x26\x19\x06\xf4\x4e\x26\x54\x9b\x2a\xfc\x01\xf9\x97\x6d\xcc\x86\xf2\xf8\xd3\xaa\x89\xf5\xb0\xc8\x51\x15\xe8\x58\x39\x09\xb9\xb4\x06\x26\x0c\xa1\xbd\x15\x14\x37\x81\x4e\xbf\x05\x8c\x77\x51\xa4\x09\x74\x56\x80\xd9\x28\x9d\x9d\x03\x03\x64\xa8\x7b\xf0\xe3\x9e\xae\xee\x51\xef\xe4\x6e\x98\xd0\x8a\x40\x9b\x40\xe9\x28\xb3\x1a\x21\xe0\xc6\xf5\xc1\x26\x10\x8a\x30\x9d\x6f\x56\x7d\x1d\xb3\x99\x74\x96\xef\xe8\xa6\x92\x5c\x0e\xbe\xa9\xd4\xb7\x82\x31\x0a\xc4\xb7\x90\x43\x0a\x64\xd6\x4d\x61\x90\x98\x66\x10\xd2\xd0\x74\x35\x3a\x33\xef\x9f\xea\xe9\x3d\x3e\xd0\xd9\xf5\x11\x80\x6b\x27\x7d\xdd\x7f\x1a\x2d\x7e\xd6\xf0\xd2\x16\x83\x7b\x99\x9e\xaf\x80\xa3\xd1\x61\x78\xbb\xbe\x15\xac\xc9\x61\xb7\x84\x31\x03\xd2\x4a\x6b\x88\x21\x9a\x24\xa2\x7a\x3b\xdf\xef\xee\x6d\x27\x03\x83\xfd\x1f\xf7\x1c\xef\x1e\x84\x09\x1d\xee\xff\xa8\xbb\x71\x81\x0a\x90\x5f\xa6\xe7\x7d\xd0\x6c\x3e\x11\x74\xd3\x89\x6e\x36\xa9\x8d\x12\xd8\x3f\x78\xa2\xe8\x6c\x6a\x84\x38\x06\xab\x89\x67\x52\x29\x69\x0d\x4e\x5d\xf3\xa9\xe3\x72\xe9\x3f\x4f\xf5\x0f\x77\x36\x83\x3c\x4f\x08\x21\xc0\x46\x09\x1c\xec\x1e\xe8\x2f\x9c\x8a\xa7\x06\x7b\x1b\x26\xb1\x00\x91\xcd\x23\x83\xd8\x28\x8d\x43\xdd\x5d\xa7\x06\x7b\x86\x3f\x19\x3d\x31\xd8\x7f\x6a\x00\x08\xed\x1f\x3c\xd1\xce\x23\x0f\x92\x4a\x86\x06\x3a\x9b\x20\x26\x4b\xd0\x30\xea\xfb\x07\x4f\xa0\xf3\xcd\x39\xff\x55\x7e\x7e\x97\x7d\x9a\xbe\xcf\x4c\x7e\xc4\xd8\x82\x81\x0d\x74\x0e\x7f\x38\x3a\xdc\x3f\xfa\x1f\x43\xfd\x7d\xa3\x83\xa7\x7a\xbb\x87\x46\x3f\xe8\xe9\x6d\xc9\xe0\x44\xa8\x9a\x3b\xaa\x76\x7f\x87\xb6\x62\x95\x5e\xa6\xe7\xbd\x1d\xdb\xac\x25\xc1\x03\xf2\xfd\xc1\xfe\x8f\xba\x07\x51\x9d\x28\x7e\xd6\x84\x11\x04\xc1\x71\x75\xa2\x04\x47\xb3\x87\x71\x6a\xa8\x7b\x10\xe5\xd0\x40\xe7\xd0\xd0\x9f\xfa\x07\x8f\xb7\x37\x65\xb3\x97\x8d\xc5\x43\xc4\x4e\x1f\x8e\x89\x3d\x6d\x8a\x14\x28\x51\x5d\xbc\x07\x1f\x75\x7f\xd2\xb4\x71\x54\x04\xde\x74\xca\xd9\x6e\x08\x2e\x7a\xd3\x34\xbd\x32\x80\x6c\x63\x54\xc4\xd4\x92\x31\xb5\x74\x45\x82\xea\x6b\x53\x56\x05\xc5\x51\xf3\x54\x07\x04\xd8\x44\xe5\xa1\x40\x61\x73\x94\x87\x02\x81\xcd\xd1\x1d\x00\x5e\xac\x60\x52\xc3\x3f\x01\x74\xac\x29\x76\x57\x00\xbe\x2f\xe0\x83\xf0\x9b\x42\x3f\xaa\x2a\xb0\x47\x0a\xff\x6c\x0a\xe5\x15\x21\x37\x91\xe6\x06\x2d\xf0\x26\x12\x55\x38\x5d\x40\x2f\x1b\xec\x6f\x82\xc2\x12\x38\x48\xfa\x07\x4f\xbc\x4c\xcf\x03\xd4\x26\x53\x0a\x73\xd0\x2a\x82\x01\x78\xb3\x08\x6f\xcc\xba\x6e\x00\xaf\x61\x8c\x6a\x52\x92\xb6\xf3\x7c\x01\xf8\x47\xc3\x73\xe5\x41\x7d\x99\x9e\x0f\x82\x6d\x78\x92\x1a\xa0\xa9\x7e\xac\x7e\x99\x1b\x3e\x51\x50\xf6\x8d\x09\x44\x83\x37\x49\x68\x78\xba\x8a\x31\xbc\x4c\xcf\x03\x0a\x26\x13\x7d\x14\x8d\x4e\xdd\xa4\x6e\xd9\x40\x34\xef\x79\xdc\x28\xc9\x00\x8f\x51\xc8\xe1\x35\x4a\x9f\xae\x42\x51\x7b\xcc\x73\x62\x74\x6a\x74\x3a\xf0\xa0\x31\x6a\x73\xcb\x5f\x05\x43\x6c\x98\xcc\xe0\x7c\xb3\xea\xae\x3f\x2a\x7f\xde\x8c\x91\xe8\xe6\x04\x41\x66\x61\xc3\xf0\xfe\xd5\x84\x61\x60\x46\x1f\x12\xfa\x32\x3d\xef\xae\x3f\x0a\x3e\x69\x98\x74\x73\xa2\x05\xc2\xc0\x83\xda\x64\x61\xc0\x73\xef\xdb\x8b\xae\x49\xb4\x97\x57\x74\x68\x90\x7c\x4c\x95\xf7\xef\x0f\xe2\xbd\x08\xff\x9f\x58\xbb\xa1\xe1\xa1\x40\xda\x75\xe9\x64\xd7\x23\xe4\x20\xf7\xb7\x39\xcc\x30\xf5\x8e\x67\x55\xb0\x3f\x7d\x57\x23\xfb\xbb\xb7\xb3\x8f\x4c\xbd\x5b\xf8\xf9\x5d\x7c\xd4\x28\xa3\xd4\x8e\xb1\xd1\x31\xce\xce\xc6\x3b\x3d\x8a\xc5\x65\x75\x45\xf4\x96\x7c\x1d\x0d\xf7\xf0\x24\x85\x0c\x03\xbf\x51\x74\xb0\x33\x90\x27\xf0\xf0\x35\x5f\xfc\x25\x24\x8d\x8c\x51\x62\xa5\x78\x9a\x42\xb1\x37\x9e\xe8\x26\x66\xaa\x15\xb2\x13\xe2\x33\x49\x35\x34\x43\xc1\xd9\xd8\xca\x9e\x3f\xcc\xdd\x5e\xcd\x5e\xdf\xc9\xaf\x9e\xc9\xec\x6e\xfb\xa5\x49\x4b\xf2\x14\xb0\x46\xa9\x7b\xfe\x42\xe6\xf0\x7a\xb9\xb0\x74\x97\x8b\x7a\x63\x46\x9a\x03\x51\xca\x96\x3f\xc3\x38\xe1\xa2\x3a\x48\xa5\xd0\xfc\x34\x5a\x48\x80\xf4\x27\xe5\xb3\xc0\xea\x60\xb2\xfa\x67\xd0\x4d\x82\x17\x45\x9d\x52\x64\x2a\xca\xda\xab\x86\xd7\xab\x61\x9d\x94\xec\x8e\x42\xff\xab\xff\x9f\xbd\x7f\x6d\x8a\x23\xc9\xd2\x45\xe1\xef\xef\xaf\xf0\xb7\xf7\x31\x53\x8d\x6d\x92\x92\xba\x7b\xb6\x1d\xd3\x7c\x18\xa3\x11\x52\x31\x2d\x09\x0e\xa0\x9a\xe9\xdd\x2a\x93\x05\x99\x0e\xc4\x56\x66\x44\x4e\x44\xa4\x54\x0c\x5b\x66\x09\xba\x90\x14\x20\x54\xd5\x12\x25\x24\x4a\xb7\xd2\x85\x52\x09\x41\x51\x17\x21\x40\xaa\x1f\xa3\x8c\xc8\xcc\x4f\xfa\x0b\xc7\x7c\x2d\x8f\x08\x8f\xc8\x74\x8f\xc8\x04\x55\xf7\x36\x3b\x33\x66\xd5\x22\x23\x7c\xf9\x72\x0f\xbf\x2c\x5f\xbe\xd6\xf3\xfc\xdb\xf0\xc0\xe9\xe3\x7a\x1e\x88\xb9\xce\x3a\x67\x9d\xb3\xc6\xa7\x5a\x5e\xcf\xf1\xb7\x11\x3f\x56\x2b\x14\x81\x74\xf4\xaf\x67\x0d\x42\xa6\xd8\x7f\x08\x06\x32\x3b\x66\xd6\xcc\x9f\xfd\xdd\x51\x72\xf6\x77\x4e\xb6\x78\xf6\x77\x5d\xfe\xb3\x1c\x50\x1d\x82\x6a\xf8\xf8\xc8\xe1\xee\xdf\xff\xf1\x8f\xdd\x47\xba\x8f\xfc\xdf\xc2\x6b\x45\xd3\x72\x6c\x7c\xe1\x0f\x7f\x38\xfc\x3f\xce\xfe\x8e\x3d\xb8\x74\xd6\xf8\x4c\xd2\x44\x50\xca\x7b\xb0\xe7\xee\x2d\x05\xdd\x7e\x94\x20\x92\x97\xa4\x35\xde\xea\x9c\x77\xab\xe2\xc7\x43\xf1\x77\x6b\x1b\x57\xaa\x6f\xe7\x7f\xdb\x16\x25\x7c\x9d\x12\x8e\x8a\x4f\x23\xc0\x5e\x91\x81\x10\xc4\xbd\x4c\x4d\x75\xfb\x94\x24\x3c\xd0\xb7\xb3\x01\xc1\xab\xd4\x8a\xc5\x8c\xbf\xed\x64\x74\x23\x47\x3f\x17\x42\x8c\x0c\x3a\xae\x39\xfa\x85\xf6\xf8\x90\x9b\xaa\xd0\x0d\x88\x3f\xe3\xc8\x61\x61\x88\x73\x9b\x52\x11\x30\xb7\xf7\x64\x3f\xc7\xcb\x91\xad\x12\x10\x41\x09\xef\x89\x31\x94\x4a\xa9\x02\xbf\xe9\xd4\x54\xf7\x20\xfc\x0b\xf9\x91\x13\x33\x13\x9b\x40\x78\x5b\x49\x90\xd7\x6d\x64\xa5\x01\x97\xb0\x4b\xab\x8b\x92\x53\xb4\x60\x5a\x93\x4a\x09\xf5\xb5\xdb\xde\xb5\x5f\x1a\xdf\x4b\x83\x35\xb9\x28\x7f\x7c\x69\xc4\x30\x8d\x8c\xff\xe5\x7d\xaa\x1f\x65\x15\x41\xd4\x54\xe3\x9b\x7b\xf5\xad\x07\xde\xad\x6d\x24\xf9\x51\xd7\xd8\x66\x76\x46\x3f\x1f\x45\x30\x91\x5b\x51\xf8\xca\x56\xe8\x26\x42\x67\x14\x81\x51\x89\xb5\x2b\x0f\xbd\x5b\x15\x75\x8d\x43\x9c\xae\x81\xfd\xaf\x82\x0e\xd5\x67\x62\xc0\xd7\x48\x1a\xc9\xc3\xc3\x27\x49\x2f\xb5\x9c\x60\xca\x0f\xf6\xb3\xb5\x6b\xa4\x7f\xf0\x28\x39\x63\x53\xe0\xa4\xd3\x8a\x3a\xc9\x64\xec\xf3\x7a\x31\x63\xdb\xf9\x0c\x14\x84\x5a\x81\xa1\x2d\x6b\x1a\x8e\x6e\x94\x28\xdf\x4c\x0d\x66\x42\xd2\x6c\xc9\xa2\x69\xe8\xcd\xda\x53\x0e\xa8\xdc\x80\xb2\x61\x44\x2f\x26\x51\x87\xfa\xef\x03\xfd\x04\x93\xe4\x5d\xfb\xb2\xbe\xce\xbb\xbb\x59\x88\x52\x11\x66\x52\xb0\x95\xf5\x28\xcf\xf8\x1a\x34\x2d\x87\x69\xd2\xc3\x7f\x17\x87\x2e\x30\x31\xc9\x6c\x22\xa8\x3c\x06\x18\xeb\xde\x7f\x10\x97\x1b\x7b\x1c\x8c\x6e\x24\x63\x4a\xd4\x35\xa0\x79\x43\xaa\xe7\x12\x22\x6c\xcb\x56\x11\xa1\x2e\x44\xb7\x4e\x33\x6e\x90\xb2\x6f\x5f\x93\x20\xe4\xeb\x4b\x3d\x0f\x52\x70\x4e\x07\x5d\x2c\xa6\xe9\xcb\x8d\x22\x94\x1b\xe9\xa7\xc0\xce\x81\x61\x97\xc9\x42\x08\x6c\x37\x19\xcc\x53\xcd\xa6\xfe\x43\xa2\x11\x61\x31\x30\x47\xff\x17\xdb\x6d\x80\xc7\x1f\x34\xf4\xf3\x8f\xd8\xe4\xd0\x74\xe0\x8c\x6a\x51\x40\xba\xb0\x83\xd9\x58\xfb\xf9\x29\xab\x1d\xc3\x57\x59\x83\x84\x8f\xf3\xae\x3c\x13\x9a\x97\x51\x0b\xa3\x36\xf7\x5d\x75\xf7\x17\x8c\x04\x76\x17\xae\xba\x37\xbe\xc7\x17\xc4\xa7\xd5\xd7\xf3\xdc\x10\xf1\x13\x25\x14\xf1\xb0\xa8\x76\x48\x62\x7f\x68\x6a\xaa\xdb\xa2\x45\x13\xad\x82\x43\x24\xe3\x6f\x5c\xf0\x4a\xce\xa4\x68\x2d\x02\xec\xbf\x72\x30\x34\x49\x0a\xa8\xee\xb1\x91\x24\x13\xd9\x3f\xf1\x11\xb3\xb6\x01\xed\x3f\x41\x5d\xdd\x3e\x8f\x99\xcd\x30\xb7\x8e\xe9\xf6\x79\x9e\x1c\xdd\x1e\x71\x4c\x30\x9c\x6a\xdf\x4e\xd7\x1e\xdd\x6f\xac\xdc\x68\x3c\x5c\x4c\x2b\x72\x9f\x1a\x1e\x8c\x52\x49\x7a\xb0\xd1\xdd\x26\x99\x7a\x7f\xc4\x9c\xca\x80\x3d\x95\x81\x4c\xb0\xa2\x66\x69\x05\xd0\x64\xa2\x29\x1b\x2c\xa1\x2d\x2d\xa4\xb9\x4b\x97\x81\xfa\xa5\xa5\x38\xa5\x66\x81\x1b\x23\x6b\x96\x0c\x5c\xb6\x83\x4d\xbf\x97\xfd\xc4\xfa\xa7\x3f\xf2\x92\xb0\x86\xa3\xfb\x30\xd1\xf4\x08\x54\xf7\xcd\x9c\x8a\xaf\x6d\x73\x5d\xe2\x2b\xe1\x72\xbe\xfe\xad\xda\x4c\x89\x35\xa6\x00\xb6\x16\xc9\xeb\x05\x1d\xdb\x84\xc6\xd7\x49\xf6\x77\x3b\xc3\x26\x66\x96\x35\x56\x6e\xb8\x95\x5f\x94\x02\x53\xe9\x17\x69\x7a\xa4\x83\xf7\xdb\xb5\x4d\x92\x63\x56\x5f\x9b\x1d\x99\xac\x68\x9e\xda\x36\x71\x26\x34\x43\x7c\x93\x7f\xcc\x03\x50\xd9\xdd\x5c\xf2\x96\xf7\x5a\xc9\x56\xea\x0f\xc7\xcf\xa4\x0c\x56\xbe\xd1\x06\x68\xc9\xb0\xec\x8b\xcb\x6a\xd2\x66\x18\x78\x43\x48\xc8\x9b\x4a\x0a\x9a\x8c\x6b\x40\x74\x64\x04\x9b\x13\x27\x4e\x5d\xbd\xec\xad\xce\xb9\x9b\x8b\xde\xed\x07\x09\x75\xb6\x18\xd9\x6d\x0f\x6b\xc9\x80\x6e\x73\x34\x1f\xd4\x24\x3b\xb0\xe9\x25\x51\xa8\xe3\x9d\x4c\xae\x58\x87\x3b\x19\x58\xc0\xc8\x2a\x57\x72\xf8\x39\xa5\xe4\x70\xac\x03\xd9\xa8\x09\xf8\x79\x84\x77\x81\x53\xfb\xfe\x83\x34\x96\xa0\xa3\x17\x28\xd0\xaa\x04\x1b\xce\x08\xfe\xd2\xce\x27\x42\x2a\x68\x61\x97\x69\x25\x43\xa9\x46\x88\x60\x7e\xa8\x89\x3d\xf5\x10\xc2\x55\x02\x39\xec\xa7\x5a\x3e\x15\xf3\x7c\xb8\x1b\xb6\x90\x87\x30\xe7\x0a\x99\x32\x55\x75\x07\x2f\x87\x0a\x9a\xa1\x8d\x53\xc4\x53\xe8\x82\x5f\x28\xd2\xb8\x8d\x71\x22\x28\x04\xb6\xe0\x3c\x4d\x80\x1d\x21\x75\x47\x37\x66\xca\xf5\xef\xe7\xdd\xaf\x16\x10\x75\x2a\xc0\x45\x08\x02\x03\x39\x25\x15\x12\x32\x01\x0c\x04\x33\x58\x80\x52\x4a\xee\x71\x96\xa8\x6a\xd3\x3c\xb3\xaf\xd9\x83\xec\x84\x66\x8c\xe3\xad\x05\x6f\x83\x4d\x1d\x62\x17\x29\xd2\xde\xc0\x2c\xb1\xdb\xd6\xfa\x5d\x79\xba\x31\xbd\xed\x2e\x2d\xbb\x5f\x2d\xd4\x5f\x7e\xe1\xdd\xfd\x09\x6f\x2c\x82\xd6\x20\x03\xb7\xf7\x4b\xa5\xbe\xb5\x8b\xf3\x46\xd6\x88\x7f\x33\x47\xc9\x47\x53\x53\xdd\xff\x66\x8e\x9e\x38\xd3\x7f\xec\xd2\xa5\x7f\x22\x63\x40\xb2\xc6\x27\x9a\xfa\xd4\x9a\x5a\x66\xd1\x44\xa7\x91\x3f\x11\x26\x34\x9b\x8c\x52\x6a\x10\x8b\x6a\xd9\x09\x9a\x43\x5f\x38\x1b\x3f\x78\xa8\x29\x68\x93\xc4\x76\xf4\x7c\x9e\x6d\x6f\x56\xc9\x40\x1e\x5b\xcc\xa6\xec\x3d\x1e\x6c\x8d\xdd\xe4\x2f\x66\xc9\x62\xbf\x60\x51\xd3\x82\x92\x13\xda\x05\x8a\x94\xfb\x02\xa0\x56\x7b\x80\x25\x27\x35\xdb\x21\x03\xbe\x3e\x32\x6f\xce\xdc\xa2\xf7\xe2\x61\xf5\xcd\xaa\xf7\x44\x92\xa8\x09\x62\x4a\xc5\xbc\xa9\xe5\x68\xae\x3d\xff\xcd\x49\xdd\x76\x00\x61\xdb\x27\x97\x09\xc9\xd8\x71\xb0\xcb\x94\xaa\x7c\xed\xce\xee\x70\xf6\x75\x18\xc9\x1c\x0e\x0a\x09\x6d\x84\xf3\x73\x52\xbd\x17\x34\x3d\x0f\x13\x8e\x9f\x98\xf8\x65\x86\x94\x42\x08\x2a\xe6\xf0\xde\x4b\x1b\x98\x02\x9f\x36\xf7\x5b\x5a\x2b\x34\x1d\x93\xf2\x75\x9a\x13\xd1\xbe\x4d\x8b\x3d\x82\x32\xb9\x9c\xf8\x48\x97\x72\xc4\x85\x2a\x42\x1e\x7e\x00\x04\xee\x55\x96\xb9\xde\xaf\xb6\xbc\xe5\x4d\xf7\xd1\xbd\xe0\x91\xd8\x79\xd8\xaa\x64\x2f\x69\xd0\x98\x90\x3c\x27\x4d\x9f\x09\xbc\x39\x09\x72\x4d\x6b\x3c\x8d\x44\xbc\x36\x4e\x90\xc5\x11\x97\xf9\x00\xcb\x22\xce\x0c\x87\xe2\xe1\x28\x14\xfe\x8f\x22\x8c\xa4\x7a\xf4\xe1\xb5\x13\x12\x98\x56\x96\xf9\x9f\xa0\x8d\xd8\x9f\x2a\xd4\x83\x40\xbf\x18\x74\x71\x9a\x8e\x4c\x44\x24\x16\x84\x47\x2f\x92\x0f\x70\xa2\x09\x57\xc7\x49\x4a\x04\x80\x62\x1a\xa0\x06\xa9\xeb\x6b\xea\x45\xac\x3b\xa9\x0e\x84\xbc\xfa\x48\xe3\xf7\xd0\xba\xcd\x8e\x37\x16\xcd\xb0\x21\x8a\x89\xce\xc4\x9e\xb4\x1d\x5a\xe8\xe2\xe8\x35\xe0\x05\x32\xfc\x35\xd9\x18\x0f\x1e\x3b\x13\x9a\x03\xb7\x95\x56\x09\x2e\x33\xa5\xe8\x23\x91\x6f\x02\x97\xd6\xef\xf7\x2a\xf8\x0f\xef\xf6\x46\xc0\x56\x1a\x23\xfe\x6a\x3c\xb8\xe1\x5e\xad\xe0\x64\xe0\x6e\x1f\xc0\x88\x64\x65\x21\x3d\x1e\xd7\x5b\xff\x47\x39\x44\x4c\xd0\x76\xf6\x3d\x71\x89\xe0\x0b\x59\x5b\x2b\x85\xb0\x28\xc4\xd6\xb3\x60\x8d\x48\x51\xbf\x80\x6b\x2e\x7c\x72\x73\xac\xe3\xb9\x85\xc3\xe0\xf5\xbc\x38\x06\xda\x9b\x58\x01\x50\x15\x40\x14\xb4\x3d\xec\x12\xe0\xb0\xb0\x9a\x60\x31\x37\xc7\xc6\x28\x33\x03\x83\x0a\x05\x00\x49\x65\xc5\x08\xf0\xc8\x51\xcf\x60\xfd\xc5\x3b\x6a\x04\xaa\x49\x55\x37\xae\x65\x3e\xa3\x30\x47\x10\x54\x57\xea\x6f\x5f\xd8\xaf\xec\x3c\xba\x73\x03\xe1\x01\x53\xd5\x08\x17\x79\x6d\x55\xc4\x71\x29\x92\xaa\x10\xc8\xd2\x84\x55\x2a\xf1\xe3\xe1\x1a\x25\x7c\x42\x44\xfd\x51\x54\x14\x90\xa7\x68\x4d\x6b\xa4\x7a\xc6\x08\xcb\x5e\xc0\x69\xa2\xa8\x27\x42\x17\xa1\x94\x1c\x63\x7e\x50\xc8\x8c\x83\xdd\xf3\xce\x62\x96\xb7\x39\xd6\xf4\x14\x8e\x82\xdc\xc2\x14\x6e\x23\x12\xbe\x9b\xb0\xc5\x34\xee\x5e\x63\x9d\x7a\x73\xcd\x5b\xde\x6b\xb9\xa2\xa5\xdc\x8f\x64\x6a\x73\x8e\x63\xa6\x3e\x47\xf2\x4b\xa7\xa3\xc8\x1b\x2c\xea\xd8\xa9\x76\x11\xc8\x65\x1b\xd1\xee\x12\x96\x4f\x01\x19\x19\x8f\x24\x69\x2a\x08\x61\x91\x53\x08\x17\xef\x4d\x52\x08\xe7\xc0\xc6\x69\xb4\x6e\x02\x29\x56\x88\x47\x9c\xc5\x24\x9e\x4b\xb9\x00\xf6\x7d\xf9\xd5\x3a\xcd\x11\xbc\x0d\xb7\x13\xaf\xd2\x71\x24\x4a\x30\x90\xa4\xd7\xe8\x27\x81\x04\xde\xf7\x82\x5c\xd4\xac\x9c\x6f\x5e\xe3\xa0\x62\x47\x31\xdd\x06\x47\xbb\x1f\x93\x94\xa3\x63\xba\x41\x73\x78\xa4\x02\x3f\xa3\xc9\x0e\x5f\x32\xed\x80\x05\xd9\xbd\xff\xa0\xfe\x66\xae\x31\x7d\xaf\xfe\x74\xc9\x7b\xb0\xf7\xae\x3c\xe3\xad\x3f\xc6\xdb\x21\x77\x69\x83\x1d\x53\x5f\xde\xa9\xbd\xfd\xce\x7d\x7c\xc7\x7b\xf1\x50\x7a\x9f\x73\xd2\xcc\x9e\x8f\x32\xd3\x03\x89\xbb\x05\xb4\x83\xa4\x54\xcc\x69\x8e\x74\x0b\x6f\x5c\x5f\x66\x36\xbe\x60\x55\xe3\xf9\xb8\x71\x7b\xcb\x5b\x7f\x04\x87\x66\xd9\xca\x64\x22\x8c\x23\x91\x07\x4d\x6c\xce\x06\xfb\x5f\x6d\x65\xd7\xbd\xfa\x24\x41\x92\x29\xc7\xff\x89\x89\x9a\x95\x00\xf5\x9c\x34\xc7\xc7\x69\x8e\x50\xcb\x32\x2d\x69\x28\x00\x9b\x08\x7b\x73\x6c\xe1\x5d\xd8\xa8\x3f\x7f\x2c\x73\x9e\x32\x59\x70\xa2\x2e\x39\x49\xa3\x0c\x55\x52\x8c\x26\xf3\x3c\xa0\x5e\x16\xc1\x07\xc4\xec\x48\x0c\xe3\x38\xd4\xcc\xce\x14\xbd\x3f\x53\x8f\xed\xb7\xe1\x09\xac\xe9\xe2\xad\xba\xbd\xee\x6e\xce\x7b\x73\x6f\xe3\x55\xb6\x56\xf1\x54\xcf\xe9\xfe\xe3\x7d\xc3\x23\xe7\x06\x7b\x46\x3e\x69\x6b\x6a\x76\x80\x10\x76\x4a\x3b\x4f\x89\x06\xdf\x3c\x13\xdc\xcc\x36\x87\xab\x06\x96\x82\x63\x92\xde\xe3\x60\x45\xcb\xbe\xe8\xcb\xbf\x05\xc3\x83\xdf\xb4\x06\x90\xf3\xe8\xa3\x5f\xda\xa8\xbe\xbd\xcb\xa4\x88\x0b\xbb\x8a\xbc\x18\x74\x84\x49\x05\xab\xe1\x21\x3b\x12\x5d\x6b\x13\xd3\xc8\x4f\x92\x0b\xba\xad\x33\x05\x2f\xea\xce\x44\xc4\xda\x60\xed\x51\x9c\x8a\xea\x6b\xeb\xb5\x99\x1d\x77\xe9\x79\xfd\xf2\x1b\xf6\x21\x5f\x6d\xe1\xca\xcf\x6d\x10\xdf\xa4\x72\xaf\x3e\xab\xad\xce\xbb\x95\xcd\xe6\x75\x36\x06\x4f\x2e\x6b\x83\x00\xd1\x44\xb2\x16\xd5\x40\xb1\x12\xec\x4e\x63\xa5\x7c\x7e\x92\x68\x8e\xec\x9e\xd0\x7d\xb5\xd5\x78\x70\xcd\xad\x7c\xe7\xae\xae\x21\x25\x58\xf5\xcd\x22\x5b\x25\x76\x77\x6a\xdf\xcf\xc7\x62\x23\x65\x73\xe8\x94\x56\x24\x1a\x19\xe9\x55\xa3\xef\xe1\x75\x02\xbc\xa6\x32\xca\x41\x98\x91\x0c\xe6\xc7\xc5\x09\x30\x7e\x29\xe5\x1d\x3d\x8b\x31\x77\x84\xf4\x1e\xc7\x7c\xa1\x82\x56\xcc\xa0\x0b\x3c\x80\xf1\xe0\x29\x6f\x7f\xcd\x64\x26\x7c\xcc\x41\x1f\x0b\xf5\x33\xf6\x2b\x84\x0b\xb0\x59\xf4\x19\x02\x3b\x11\x42\x62\xbd\xd0\x4e\x35\x1f\x65\x32\xb0\x0b\x0d\x0e\x0c\x8d\x90\xff\x4d\x32\x19\x4b\x33\x72\x66\x01\x7e\xfc\x27\xac\xa0\xef\x3f\x7a\x4e\x0d\x9e\xec\x1b\xe6\x62\x9b\x65\x16\x26\x33\x5a\xb1\xe8\x07\x5d\x76\x67\xcd\x02\x51\xfe\xdf\x7f\x13\x5f\x6d\x43\xa8\xd0\x23\x85\x49\x48\x8b\x88\x08\xc5\xdf\xba\x0f\x4a\x36\xef\xe9\x31\xd3\x6c\x29\xfb\xe3\x31\xd3\x6c\x4b\x3e\x74\xf3\x3f\x1f\x3e\x7c\x38\xa1\x43\x8e\xb2\x77\xda\x5c\xee\x8a\xfc\x78\x6b\xfa\x87\x13\xb6\xa4\x39\xcc\x82\x50\x10\x7e\x6f\xce\x7a\x0f\x5e\xe3\x19\x04\x47\x74\x7d\xf6\x47\x66\x1e\x24\x3a\x27\x4f\x69\x9f\x93\x8b\x9a\xee\x20\xc7\xb9\x0f\x6c\x1d\xac\xab\xc0\x65\x5f\x2a\x76\x31\xdb\xb9\xa0\x1b\x25\xb9\x71\x10\x89\x59\xc2\x75\x14\x98\xec\x61\xf1\x29\x37\x6e\xbd\xaa\xad\xcf\xb9\x6f\xaf\x7a\x2b\x33\x8d\xe5\xbf\xbd\xdf\xab\xb0\x65\xea\xc6\x6d\xa9\xaf\xa1\x59\xaf\xd0\x60\xe1\x06\x7c\x0a\xa5\x44\x5b\x45\xb4\xde\x0f\x44\x29\xc7\x24\xd4\x76\xb4\xd1\xbc\x6e\x4f\x10\x8d\x64\x4d\xc3\xa0\x59\x56\xb3\xe8\xf0\x81\x51\xc8\x4e\xca\xf9\x92\xff\x88\x9d\x4b\x4c\xb9\xd7\x57\x5a\xb5\x5e\x28\x15\x88\x56\x80\x60\x05\x73\xcc\xbf\x17\x44\x03\x39\x08\xf9\x0a\x23\x1f\x34\x03\xdd\xf6\x88\xb3\x7b\xe4\xf0\xef\xff\x78\xaa\x8b\x1c\x39\xd1\x45\x8e\x1c\x3e\x21\x73\x30\xb5\xf8\x88\x68\x5a\x5e\x7d\xe5\xad\xce\x89\x97\x87\xde\xad\xed\xc6\xec\x52\x75\xfb\x8b\xc6\xca\x8d\x10\x93\x17\x6a\x79\x57\x9e\x3e\x72\x82\xfd\xe7\xf0\x09\x55\x4f\x1e\x64\x73\xba\x49\xe6\x08\xb3\x8c\x2c\x6a\x03\x7b\xb6\x66\x90\x92\x01\x77\x41\x34\xc7\xeb\x90\x1a\x65\x07\xdf\xe4\x77\xe5\x99\xcc\x11\x52\xdd\xfd\xb6\xfe\x70\xad\x76\xe5\x21\xde\x17\x61\x69\xa9\x5d\xfe\x77\xe8\x10\xf2\xd1\x31\x3a\xa6\x95\xf2\xce\xd1\xf0\xd9\x6f\x38\x30\xd4\xbd\xf4\x7e\xaf\xd2\x78\x70\x83\x59\x3a\xe5\xbd\xa3\x24\x78\x9e\x38\xa0\x30\xfe\x92\xf5\x1f\x77\x10\x82\x73\xb5\xa0\x4d\xb2\x63\x97\x6f\xd5\x40\xa8\x2a\xeb\x1a\xeb\x02\xc5\xfb\x6b\xe9\x02\x02\xad\x44\xdb\xaf\xfa\xeb\x37\xb5\x5b\x2b\xee\xfd\x07\x68\xd5\x04\xb1\x73\xde\xad\xed\xda\xdd\x97\xd8\xe2\x0f\xa3\x9c\xf0\xa5\x0e\x4b\x7d\xc3\x6d\x6a\x1a\xed\xe0\xc3\x89\x1d\x0b\x4b\xde\x47\xe1\xea\xf5\x4f\xb0\x28\xf7\x9e\xec\x67\xeb\x20\x2c\x8a\x31\x5f\x0a\xee\x1d\x5d\xc4\x74\x26\xa8\xc5\x83\x43\x89\xad\xe7\xa8\x7f\x67\x69\x43\xcb\x59\x09\x59\xfc\x38\x93\xce\x57\x68\x71\xfc\x05\xfb\x0a\x2c\xdb\xe1\x50\xdb\x7d\x52\x7b\xf6\x15\xb3\x95\x97\x5f\x56\xdf\x2c\x82\x27\x7b\xc1\x5d\xda\xa8\x5f\x7e\xe3\xad\x5e\x46\x54\x50\xf7\xea\x2f\xd5\xdd\xe5\x30\x0c\xf5\xfb\x0d\x0c\x02\x90\xb4\x5d\x15\xdc\xae\x2a\x82\xf7\xd0\x7c\x6a\xfe\xfe\x9f\xff\x07\x9b\x99\xfe\x04\x95\x7d\xc0\x58\x5c\x46\x38\x77\x58\x79\x98\x35\xfe\x14\x92\x7f\x2b\xbc\x5d\x4e\x75\xd3\xcc\x2c\xf2\xe9\x8d\xd8\xab\xad\xa5\xea\xe3\x96\xe6\xd0\x16\x57\x3b\x70\x20\x35\x0d\x1a\xe5\x5c\x72\x4c\xa2\x19\xf0\xd5\x15\xd6\x8a\x78\xde\x7a\x7b\xcf\xbb\x7f\xc3\x2d\xcf\x8b\x87\x94\xda\xb3\xdd\xfa\x9b\xb9\xfa\xec\x8f\xee\xd2\xd3\xea\x76\x39\xf6\xb4\xb5\xa2\x0a\x8a\x01\x15\x12\x37\x2b\x26\x05\xc4\x86\x72\x12\xe0\xeb\xd3\x7d\xff\x7e\xae\x6d\x5a\x83\xd3\x67\x4e\x05\xe8\x1d\x32\xac\x6f\x49\x49\xad\x20\x3d\xc5\xa8\x9a\xc7\x2c\x10\x73\x8c\x68\xc4\xa2\xe3\xba\xed\x50\x2b\x72\xeb\x2b\x3f\xd1\xd5\x56\x76\x1b\x0b\x57\x02\xaf\x41\xed\xce\x95\x7d\x54\x43\x2e\x4e\x50\x0b\x0f\xc9\xe1\xdd\x33\xbf\x3d\xd2\x6d\x92\x37\xb3\x6c\xf1\x93\xed\x3e\xc1\xfd\xb2\x78\xf9\x3d\x57\x76\x57\xe1\x46\xbc\x49\xd5\x44\x3d\x1d\x13\x82\x5c\xf8\x21\xdc\x3e\x4f\x3e\x1a\xa7\x06\xb5\x60\xfd\xd5\xc7\x88\x59\xd0\x1d\xc5\x66\x28\x17\xdc\x5e\x40\xc2\x69\x7a\x91\x0c\x72\x60\x57\x59\xcb\x97\x37\xdd\x8d\x6b\xb5\x47\x7b\x72\x09\x86\x7c\x58\xb0\xd2\xaa\xae\x30\x23\x39\x1a\xc4\xa6\x4e\x37\x66\x7d\x4c\x4d\x75\x9f\x34\xc7\x75\x63\x44\x2f\x5e\xba\x74\x88\xf0\xf8\xa6\x9e\xc1\x7e\xfe\x03\x3b\x91\xe0\x4d\x89\x66\x04\xe5\xe5\xee\xcb\xe7\xe8\xb1\x80\xda\xd8\x92\xbb\x7b\xef\x5d\x79\x06\xb7\xaa\xa6\xba\xbc\xca\x72\xb4\x32\xb6\x88\x6f\xce\xa2\xb7\x03\x7d\x21\x81\x08\x69\xb3\xb4\xa2\x2e\x69\x96\xef\xf2\x72\x4c\xf0\xff\x0b\xea\x77\xac\x7d\xe0\x45\xdb\x7d\xc2\x3d\x33\xf0\x92\x42\xb9\x22\x38\x59\x6c\x32\x66\x96\x0c\xa0\x4f\x80\x68\x2f\xee\x72\x93\xcc\xc7\xd5\x35\xf1\x2d\x22\xe6\x9e\x46\x80\xb0\xe1\x82\x57\x55\x37\xaf\x56\x3a\xd5\xb8\xd0\xea\xee\x6e\xf5\xcd\xad\xe4\x03\x24\x13\xea\x67\x8f\xfa\xf9\xa4\xf2\x54\x55\xcc\x01\x46\xd9\x2a\xa8\xd5\xd3\xa6\x10\xea\xd1\x8e\xc2\xc9\x31\x1f\xa7\x4d\x1e\x44\x66\x93\x8b\x14\xb8\x07\x72\xd2\xf9\xb3\xfa\xbc\x51\xde\xaa\x3f\x5c\x40\xd9\x18\x19\x26\x95\xea\x5f\x25\xb6\xa1\xad\xea\xd6\x10\x24\x16\x8b\x79\x6a\x91\xbc\x39\x3e\x6e\xd1\x71\x08\xc7\x0a\x86\x35\x54\xd3\x4d\x7a\x31\x57\xd2\xa2\x8e\xa5\xd3\x0b\x94\xbd\x6b\xcb\x66\x22\xa6\x90\x78\xcf\x6f\x56\xb7\xd7\x11\x31\x9e\x9c\x14\x44\x27\x8c\x5b\xb8\x22\x68\x4d\x7e\x25\x6b\xed\xd6\x57\xb1\x08\xa9\x28\x65\x56\xed\xce\x95\xea\xce\xbc\xea\x4b\x21\xfc\x7c\xb0\x63\x74\x93\x56\x5f\x4f\xb1\xf0\xe0\xb6\xc1\xc7\x32\xdc\x95\xbc\x2b\xcf\xb4\xfc\xac\xaa\xe5\xc4\xb4\xc6\x31\xd4\x10\xee\xbd\x7d\xaf\x6d\x17\x10\x2e\xb0\x49\xc9\x11\xf3\x9b\x56\xc6\x48\x39\xb9\x92\xf1\xe5\x0d\xb1\x29\xbe\xe2\xe1\x3e\x01\xc7\x42\xbc\x2a\x76\xfc\x52\x96\x54\xb6\xc7\xb4\xe4\xcd\x39\x8e\xc4\x57\x61\x5d\x6d\xea\xee\x55\x96\x5b\xea\xde\x2c\x57\xa5\xe1\x07\x50\xec\xa0\xf5\x91\x7f\x77\xc5\x98\x4c\xa3\x59\xf2\x57\x4e\x18\xaf\xed\x2d\x43\x8a\xb0\xb6\xd3\x66\x34\xa4\xa0\x1d\xb9\xa9\x22\x0c\xfc\x0a\xda\x95\x2c\x75\xd5\x33\x81\x3c\xfc\x80\x1a\x17\xc8\x05\xcd\xd2\xb5\x51\xb6\xdd\x82\xbb\x04\x82\x64\x6d\x2a\xbf\x3c\xbc\x13\xec\xf8\x7c\x47\x81\x08\x84\xda\x57\x9b\xee\xa3\xcb\x6c\xa9\x50\x6c\x59\x7e\xb5\xf1\xc0\x03\x79\x75\x2d\xeb\x4a\x0e\x20\x38\x6d\xa6\x8c\xe2\xc3\x15\x38\xa5\xc0\x28\x55\x71\x3b\x56\x42\x5b\x17\xfc\x42\x5d\xe7\xe9\x64\x84\x96\x37\xf0\x6e\x85\x14\xbb\x7e\x86\x4c\x9a\x8d\x46\x38\x54\x4a\x25\x84\x64\xbd\xaa\x50\x9a\x98\x8e\xa1\xb0\x3f\x53\x1e\x8e\xcf\x8d\xb7\x03\xd1\x3e\x30\xe4\x3a\x69\x40\x2b\xe5\x12\x1b\x15\x46\x8f\xb5\xfd\x99\x93\xa3\xc5\xc2\x7a\x3a\x10\x2f\x17\xf9\x01\x76\xab\xfd\x6d\x52\xed\x99\x03\xf8\x7a\x1b\xfb\x42\xdb\xbb\xbf\x7a\xd3\xe7\x11\x92\x9a\x6d\xeb\xe3\x86\xfc\xa8\x0d\x36\x93\xf7\xd3\x5b\xbe\x33\xa4\x92\xd9\xce\x56\x93\x20\x90\xc7\x66\x1d\xc4\xc2\x1d\xb9\xf0\x49\xb3\x7c\x87\x81\x61\xe2\xd2\x9a\x66\xf5\x16\xab\x4a\xb7\xd8\x42\xe8\x6f\x18\xd0\x70\x20\xed\x85\x35\x37\x08\x69\x48\xd5\x64\x08\xab\xf0\xa3\x91\x0e\x42\x89\x20\xb4\x02\xa3\x91\xd2\xea\x81\x89\x54\x91\xcc\xfb\x0e\x12\x93\x4f\x9b\x02\xfc\x45\xaa\x41\x29\xa0\x6a\x48\x24\x3a\x70\xfa\x02\x96\xc3\xd0\x8b\xd0\x7b\x1c\x5c\x16\xd1\x89\x9e\x37\xc7\xd9\x4b\xf2\xb1\x82\x71\x4d\x51\xe7\x41\xb3\xa4\xea\xee\x93\xe0\x45\xb9\x52\x76\xa9\x58\x34\x2d\x87\xe6\x08\x30\x2e\x02\x39\x5b\x9b\x7d\xe5\x00\x0a\x94\x8e\x6e\x78\x47\x3b\x4f\x89\x6d\x16\xd0\x3b\x2f\x3b\x3f\xae\x5c\xa9\xaf\xed\x1e\x25\x8d\xf2\x0a\xfa\xd5\xf9\x71\x7e\xbb\x5c\xdd\xb9\x8b\xde\x78\x49\x65\xc1\xc5\x47\xe0\x3c\x96\x8d\x28\xd8\xfc\xa4\x43\x65\xe0\xcf\xb2\xcc\xb9\x47\x3b\xd2\x68\xc8\x81\xc1\x91\xfe\x81\xd3\x52\xd2\xc3\xc6\xf4\x76\xe3\xc1\x55\x89\x8f\x77\x60\xe8\x04\xe9\x39\x76\xaa\xff\xb4\xac\x5e\x30\x9d\xd1\xe8\x91\x86\x6e\x07\x42\x64\x2a\xc4\xa4\xa8\x74\x39\x73\xac\x7f\x64\x60\x48\x29\xc7\xdd\xf8\xce\x7b\xb0\xed\xfe\xed\xa1\x5c\xcc\xa9\x9e\xd3\x3d\x27\xfa\xd4\x62\x50\x1d\x95\x18\x99\xff\x5a\x75\x9e\x60\xc5\xd4\xdd\x20\x6b\x3d\x24\xa3\x92\x43\x99\x8c\x56\x2c\x42\x04\x86\x2d\xdb\xe9\x93\x04\x18\x66\x10\x21\x72\x48\x00\x9b\x02\x3a\x50\x1f\xc6\x46\x2b\x16\x43\xda\x3a\x01\xc7\xc3\x99\xa0\xe4\x10\x1e\x58\x0e\x11\xcd\x71\x2c\x7d\x54\x1e\x5d\x94\xa4\x48\x51\x73\x26\x3a\x6d\x04\xeb\x81\x4e\xcb\x0a\x81\x41\x1d\x8b\xe0\x37\x94\x18\x26\xb3\xbf\xef\xc1\x45\xec\xa3\x33\xf0\x88\x9a\x81\x0d\xbb\x43\x19\x5a\x87\xe5\x3a\xad\xcf\x6a\xb3\x9c\x34\x25\x41\x39\xdb\xac\x71\x9e\x4b\x5b\xa0\x86\xd3\xde\xf5\x04\x2b\x8b\xa9\x49\x38\xfa\x6d\x31\x43\x42\xb8\xe8\x95\xad\xe4\x00\x3e\x83\x06\x6a\x2c\x42\x3e\x49\xe3\x08\x87\xbe\x96\xb7\xa8\x96\x9b\x44\x40\x19\xd9\xb6\x11\xe1\xfd\xe7\x05\xdd\x57\x5b\x2a\xa8\x98\xa6\x8a\xa2\xd0\x35\x90\x0d\x89\x7f\x63\x84\xbe\x3e\x2a\xa5\xa6\x6d\x55\x7b\x00\x54\xe3\x55\x96\x39\x2f\x25\x84\xed\x77\xa4\x8c\x94\x32\x53\x55\xb1\xd4\x7e\x18\xb0\xc6\x13\x56\x60\x49\x84\xe6\x40\x72\x4a\x55\xc2\xa7\x0d\x8a\x47\x6e\x4e\x58\x3b\xd1\x9d\xdd\xe6\x00\xd5\xc7\x75\xc0\x94\x24\x05\xad\x58\x44\x94\x25\x08\x0e\xd7\xb2\x88\xe9\x02\x48\x4c\x3c\xf0\x1c\xee\x7a\x3e\x77\xa8\x65\x68\x79\xce\xf8\xec\x4c\xfa\x26\xa7\xec\xaa\x5a\x52\xf1\x05\x6a\x59\x7a\x8e\x06\x70\x4f\x39\x0c\xcf\xe0\x40\x52\x24\xa7\x5b\x34\xab\xb8\x5c\xad\xbd\x79\xe9\x2d\xdd\xc5\xf0\x0b\x0e\xeb\x04\x80\xa2\x09\xbc\xd5\xd2\x6a\x83\x74\xe2\xb6\x6b\x17\x2f\x54\x3b\xd1\xc4\xa2\x10\xe5\xc1\x2c\x3b\x67\x82\xc6\x22\x95\xfc\xb5\x82\x1a\x17\x74\xcb\x34\xe0\x8a\x48\x1b\x73\xa8\x45\xb2\x66\x71\x32\xc3\xb3\xc7\xb2\x66\xa1\x98\xa7\x8a\x18\xbe\xd5\xb5\xc8\xfb\xee\xcb\x05\xaf\x72\xa3\xfa\x7a\xde\x7d\xbb\xf0\x7e\x6f\x01\x5b\xc3\x83\xa1\xe1\xa8\x51\xdd\x5e\x8f\x67\x40\xce\x2e\x7a\xcb\x9b\x18\x37\xd2\xba\x41\x6d\x47\xb2\x0f\xf6\x9d\x3e\xd6\x7f\xfa\x44\x7b\x65\x06\x86\x46\xda\x2c\x30\xdc\xcf\x4c\xd7\xf6\x0a\x69\x7a\x2e\x1a\x7f\x2e\xbb\x8e\xdb\xbd\x5d\xdf\xda\x4d\x0e\xab\x18\xd4\x2c\xad\x40\x1d\x6a\xd9\x44\xb3\x01\x4f\xa6\x4d\x7d\x6c\x1b\x71\x3a\x22\x32\x00\x3b\x10\x42\x9e\x88\x26\xfa\x6b\x83\x91\xe2\x9f\x44\xf1\x14\x2e\x1b\x1c\x33\x3f\x36\xa6\xef\x21\x84\x07\xc2\x1a\x83\x70\x8e\xdb\x00\xd1\x4f\xcd\xfe\x5b\xd5\xd9\x3c\x8d\xb6\x82\x93\xe2\xc0\xb5\x95\x39\x2d\x92\x74\x56\xc4\x10\xa8\x02\x08\xfc\xa2\xe4\x02\xb5\x82\x84\xa5\x70\xf3\x29\x68\x4e\x76\x42\x29\xb6\xf1\xdd\xd7\xf5\xf5\xb9\xea\xf6\x62\xed\xc5\x53\x59\x15\x10\x79\x6d\x25\xc7\xe2\x4b\xb8\xf4\xfd\x5f\xd8\xaa\xf7\x4f\x09\x75\xa4\x22\xf0\x3f\xa0\x7a\x54\x55\x74\x2e\x1d\x0c\x8e\x7c\xde\xbc\x08\x2e\x87\x30\x11\x20\x1d\xae\x4e\x98\x16\x11\xc7\xd6\xa9\x6e\xaf\x57\xb7\x17\xbd\xeb\x4f\xdc\xa5\xaf\xd3\xea\xc2\xf1\x41\xe4\x71\xe7\xf1\xb7\xe4\xa2\x1c\x8c\x7b\x08\xf6\x26\x40\x42\x60\xbb\xf3\x7f\xe9\x18\x0d\xe1\x6f\x21\xcc\xd8\x84\x7b\xe6\x70\x4b\x49\xdc\xd1\x22\xcb\x7d\x74\xff\xe2\x94\xe8\x4d\x2f\xb8\x57\x9f\xb9\x2f\x5f\x57\x5f\xcf\x83\x02\x31\x34\x44\x75\x3b\x22\x6d\xf0\xd5\x97\xed\xb5\x50\x99\x57\x59\x6e\xbf\x1a\xbf\x53\x60\xf9\xc9\x01\x1c\xd3\x68\x0b\xef\xa4\x55\xca\x4b\xb7\x4e\x75\x05\xfe\xe9\x56\x36\x84\x45\x60\xaf\x14\x2a\xc3\xe9\x19\x41\x4d\x46\x39\x52\x35\x1e\xa6\xfd\x8c\x17\x91\x55\xca\x31\xf9\xa5\xfe\x64\x38\x95\xd8\x8f\xa3\xba\xd4\x67\xf7\xa1\xab\x2e\x19\xfb\xa8\xdc\x31\xb9\x49\xc9\xa5\x26\xae\x41\x90\x76\x7f\xad\xbe\x7e\xdb\xad\x3c\x21\xfb\x58\x90\xa8\x35\x66\x5a\x05\xb6\x29\xe9\xcc\x8c\x22\x1c\xdc\x9a\xd9\x86\x0e\xb5\x0a\xba\x41\xc9\xc5\x09\x0a\x21\xb8\x1a\x6f\x2b\x07\x48\xc8\xfb\x47\x2a\x36\x8c\x0d\x53\xea\xe2\xc5\xed\x73\xf3\x21\x0e\x03\xef\xf9\x23\xef\xfe\x13\xbe\x63\x55\x1e\x7b\xcb\xaf\x50\xcb\xda\xdd\x97\xee\xdc\xa2\x77\x7b\xc3\xbd\xf1\x54\x75\xea\x1a\xcc\x6b\x46\xfc\xa4\xe5\x2f\xa8\xe1\x45\x16\x5f\xb3\xb8\x15\x23\xd1\xac\xe9\x75\x34\x65\x98\x92\x60\xcd\x24\x40\x85\x82\x26\xa1\x0c\xf6\x27\x97\x13\x7a\x84\x52\xf9\x90\xb1\xb6\x96\xa2\xda\xad\x79\x02\xa0\xf6\x5b\x44\xda\xb2\xe9\x8a\x61\xb8\xd2\x50\x3f\xa9\x12\x04\x6f\x47\xeb\x4f\xa7\x31\xa8\x36\x96\xee\x28\xd7\xf1\x68\xeb\x36\xa9\x14\x90\x14\x91\x56\x61\x0b\x87\x6b\x32\x3a\x49\x34\x66\x7b\x39\x7a\xb6\x94\xd7\xac\x34\x08\x1e\xb5\xb9\xd7\xee\xcb\x3b\xdc\xed\xb9\xb4\x81\x47\xec\x60\x04\xc8\xea\x05\x24\xdf\xec\x84\x69\xda\x94\x50\x1d\x27\x07\xdb\x72\xd9\x4c\xc8\xe9\x36\xfc\xbb\x9b\xfc\xc9\x64\x9b\x3d\x04\x20\x69\x16\x45\x0a\x04\x36\xa5\x1c\x07\x27\xfc\x28\xd2\xf2\xe3\xd2\x03\x81\xad\xc0\x3a\x81\x9e\x7c\xd9\x49\xb6\xfe\xfd\x7c\x63\x7a\xdb\xfb\xdb\xac\xfb\xf2\x75\x1d\x98\x20\x6a\x4f\xa7\xbd\xf5\x47\xef\xca\x33\x6c\x34\x5d\x9d\xae\xaf\xfd\xe0\xae\xae\xd5\xee\x6e\xbb\x37\x16\x10\xdf\xa9\xba\xbd\x8e\x86\x63\xa3\xbc\xe2\x5e\xfd\xce\x2d\xcf\x07\x91\x4c\xca\x06\xe2\x7d\x04\xd1\xc6\x35\x69\xd6\x35\xd3\x06\xce\x46\xaa\x94\xeb\x18\xf2\x31\x86\xf0\x6a\xd9\x48\x26\xab\xf8\xa9\xe2\xde\xd2\xd4\x1e\xa3\x00\xd2\x98\x7f\xcf\xab\xcf\x54\x3e\x24\xc5\x45\x22\xe6\xfb\x13\x55\xc0\xb4\x88\x3a\xa3\x08\x91\xe5\x92\x74\x84\x12\xe0\xcd\x63\x53\x32\x9f\x97\x5e\xa1\xba\xaf\xb6\xdc\xa5\x65\xef\x97\x4a\xa4\x12\x80\x14\x50\x56\x02\xa9\x62\x01\x76\x7f\x4b\x3f\x50\xea\xd6\x34\xc9\x49\x5c\x0c\xe5\x2a\xe8\x76\xe0\x83\x73\xb4\xf3\x54\xea\xef\x4b\x56\xc2\x7d\xb5\x55\x7f\xf4\x3d\x9b\xa1\xb2\x4c\xea\xc1\x10\x4f\x08\x94\xc9\x91\xb3\xbf\x8b\x24\xab\x9f\xfd\x5d\xcc\x21\xd8\x45\x8a\x38\x3e\x4b\x36\xf5\xf3\x0e\x90\x0d\x46\x19\x2b\xcf\xce\x5e\xcd\xa2\x65\x78\x44\x81\x2b\x11\x79\x5d\xf0\xfe\x2e\xc8\x4c\xf0\x89\xa5\xa4\xd3\x91\xb7\xe9\x3f\x4b\xd4\x66\x6b\x07\x5f\xe5\x99\xa9\x62\x4d\x0a\xa9\xeb\x6c\x1f\x9c\x34\x4b\x16\x19\x18\x96\x5e\x7c\x7a\x73\x40\xaf\xf4\xc3\x4c\x1c\x0a\x0e\x03\x7d\x20\x75\xdd\x9b\x59\x23\x03\xc3\x04\xb5\x84\x18\xcb\x85\x46\x79\xab\xfa\x66\x51\x91\x7c\x3d\x18\x23\x9f\xf0\x77\x60\x31\xff\xbb\x64\xe8\x3e\xa4\x86\xb4\x73\xfd\x44\xf0\xfa\xb3\x6f\x1b\x2b\x8f\x55\xe4\x14\x58\x43\x52\xaf\xc5\x15\xba\x30\x35\xd5\xfd\x29\xb5\x6c\xc0\x25\x8d\xaa\x97\x5e\xb9\x64\xb5\x48\xa4\x9a\xda\x5c\x45\xae\xa7\x8f\x7e\xca\x96\xba\xa4\xe4\xf5\xf0\x78\x86\x50\xa7\x0a\x91\xb1\x73\x60\x68\x50\xa6\x3b\x08\x8a\x26\xa5\xe2\x24\xa8\xd6\xa1\xa5\x69\x9b\xd4\xc6\x88\x65\x2b\x9c\x47\x05\xc3\x56\x5e\xab\xa5\x1b\x0e\x04\xda\xf3\xd9\x42\x72\xba\x36\x6e\x98\xb6\xa3\x67\xc1\x08\xb2\x9d\x9c\x12\xf8\x03\xca\xe2\x04\xa9\xaf\xed\x78\xcb\xaf\xdc\xca\xd7\xee\xe2\x66\x7d\xf6\x47\xbf\xa8\xa2\x5e\xb3\xe4\x10\x8d\xe4\xc1\xf9\x3f\xc6\x43\xf4\xd9\x06\x1a\x3b\xb5\xc6\x0e\xa9\x5a\x80\xf6\x12\x1c\xd9\xf8\xf5\x61\x0c\x66\xf3\x58\x5f\x0f\x19\xd5\xb2\xe7\xa9\xd4\xa4\x74\x17\x37\x11\x5c\x0a\xc9\xa5\xc0\xdc\x66\x27\x46\x3c\x84\xe1\x51\x16\xc4\xb8\x6f\x17\x6a\xdf\x6f\x54\xb7\xbf\xe0\xd6\x79\x94\x51\x02\x81\x56\xdd\x97\x77\xb0\x34\x1e\x75\x55\x0d\x67\xda\x5d\xc0\xd1\x2e\xd3\x0c\xba\xb1\x36\x57\xf1\x56\x5f\xc8\x24\x99\xa3\x79\x5a\x20\x16\x2d\x98\x17\x58\xab\x73\xe6\x45\x03\x61\x3a\xfd\x95\x8e\xd9\x0a\xb4\x20\x1c\xe7\xe5\x2c\x0e\xcf\x76\x1b\x2b\x8f\xbd\x3b\xdf\xbb\xeb\xb7\xc5\xee\x70\x5f\x6d\x55\xb7\xe7\xeb\x7b\x73\xe2\x92\xe6\xad\xcc\xd4\x56\xf6\x6a\x37\xef\xbb\xb7\x96\x1a\x0f\x17\xa4\x2b\x9c\x65\x02\xd0\x12\x1e\x8b\x20\xd5\x67\x74\x92\xd8\xfa\xb8\xa1\xe5\xd1\x6c\x85\x7f\x5e\xba\xd4\x4d\xfa\x3e\xd7\x83\x4c\x4c\x60\x3b\xd2\x9d\x5e\x33\x27\x9f\x6c\xee\xdd\x07\xd5\x5f\x1f\xd6\x57\xee\x8b\x62\x48\xbd\xbc\x50\xfb\x79\xc6\x5b\x7f\x54\x5f\xb9\x55\xbb\x71\x8d\x7d\x9b\x9d\xa5\x77\xe5\x99\xda\xcf\x37\xbc\x6f\xee\xbb\xd7\xef\xbb\x77\x91\xf9\x43\x90\x2f\xd3\x1c\x70\x80\x5b\x82\x02\x07\x39\x24\x21\x6e\x37\xc2\x0d\x21\xa6\x2f\xde\x61\x91\xbc\x69\x8c\x53\x2b\x8c\x1a\x09\xf8\x2c\xe0\x73\x51\xa2\x23\xba\xae\xc3\xf6\x23\x66\x2f\x2a\x18\xd0\x44\xbf\x00\x66\xa1\xb8\x95\x4d\x1c\x63\xad\x14\xe4\x86\xed\xb5\x45\xef\xe6\x86\xb7\xf4\x93\xb7\xfe\x18\x41\x80\x91\xc2\xc2\xdd\x9c\x75\xaf\xfe\x82\x9f\xfb\xfd\xde\x42\xed\xca\x2f\xee\xdb\x05\xf7\xda\x62\xfd\x3b\xb6\xb7\xaa\x80\x8c\x06\xd5\x17\x37\x68\x48\x4a\x23\x32\x06\x4b\x16\x0f\xf5\xc2\x93\x96\x00\xc5\x8e\x7a\x27\xa1\xf8\x78\xdb\x57\xd9\x08\x85\x73\x54\xeb\xd2\x69\xeb\x8d\x9c\x61\xdb\xad\xb6\xa9\xb0\xa4\x56\x40\x28\xf0\xc9\x41\x4d\x8b\x00\x7d\x8b\x9f\x48\x01\x09\x9b\x68\x4e\x71\xcc\x36\xf9\x02\xcb\xce\x0a\xd1\xd5\xc6\xbb\xbe\xd6\x28\x4f\x7b\x95\x65\x77\x73\x16\x53\x29\x38\xad\x4b\x65\xb3\xb6\xf4\x16\xb3\xc3\x93\xd3\x88\xb8\x8a\xb6\x6e\x8c\xe7\xd1\xe9\xf7\x11\x4c\x3f\xce\xd2\x87\x4b\xb3\x3f\xc4\xa5\x59\xea\xa0\x0a\x8c\xcb\xb2\x58\xe5\xfb\xbd\x4a\x75\x7b\x91\x19\x6b\x2f\xef\xf0\x00\x35\x61\x10\x4b\xd3\x69\xdb\xd3\x29\x06\xa9\x02\x6c\x85\x01\x42\xcb\x5f\x33\xa3\xe4\x4f\x67\xfa\x4f\x1e\x1b\xec\xe9\xfd\xf3\x39\x1f\xff\x25\x4b\x7a\x07\x4e\x9d\xea\x39\x7d\x8c\xfd\xe1\x3b\xa8\xd8\xbf\xc7\x48\x04\x63\x09\xb0\x62\x72\x66\xf6\x3c\xb5\x32\x7a\x41\x1b\xa7\xe4\xd8\x40\xef\x9f\xfb\x86\xce\xf5\x9f\xea\x39\xd1\xf7\x19\x56\xfc\xd7\x8c\x4e\x22\xc9\xa5\xac\xd4\x79\x72\xac\x7f\xf8\xcf\xec\x5f\x05\x82\xe0\x4b\x9f\x35\xa1\xd1\xb0\x5f\x8a\xc4\xaf\xc7\x26\xc3\x23\x3d\xbd\x50\xc4\x21\x23\xfd\xa7\xfa\x06\xce\xc0\x1b\x25\xf2\x49\x5f\xcf\xc9\x91\x4f\xce\xf5\x7e\xd2\xd7\xfb\xe7\x73\x23\x7f\x19\x44\x08\x9b\x30\x76\x83\x0c\x0d\x9c\x19\xe9\x3b\xe7\xc3\xd9\x80\x4a\x62\xa8\xcd\x67\xfc\x6f\xbf\xc7\xfc\xbf\x41\x82\xff\x07\x5c\x27\xa2\x60\x8c\x51\xc1\xa7\x01\x3c\x0e\x7c\x93\x42\x29\xef\xe8\x45\xfc\x26\x76\x9c\xc5\x91\x7f\x87\xec\x18\x7e\x82\xe6\xce\x6c\xcf\xc5\x97\x58\x9f\xec\x76\xad\x69\x9c\xf1\xd1\xf9\xf8\x0e\x3b\xc1\x27\x4e\x08\x60\x74\x6f\x4b\x55\x20\x7e\x21\xc7\xe8\x98\x6e\x20\xfb\xf1\xd4\x54\x37\xfc\xd6\x4e\x20\x05\x02\x66\x62\xf0\x66\x5c\x40\x42\x40\x05\xd6\xcf\x16\x13\x08\x31\x46\xd8\x1a\xca\x56\x9d\xfc\x64\x80\x6e\x60\x5a\xe3\xe4\x23\xfa\xb9\x0f\x8f\x02\xf1\x87\x26\x86\xc4\x58\xd4\x2e\xe5\x1d\x34\xb9\x40\x02\xd2\x74\x8e\x05\xd7\xdc\x00\xff\x29\x4d\x9f\x7f\x3a\x8d\x81\xcb\xb5\x9f\x9f\x7a\xcb\x9b\xfc\x36\x0d\x03\xd9\x80\x3c\xa9\xf1\x70\xf1\xfd\x5e\xc5\xbb\xfe\x55\x63\xe5\x71\xa3\xbc\xe2\x96\xe7\x31\xf0\xcf\x5b\xbd\xec\x6e\x5e\xaf\xcf\xfe\x84\xc5\x83\x5b\x79\x78\x5f\xb2\x32\xa4\x6a\xaa\x12\xd4\xab\xa5\xb6\x3e\xe6\xac\x0a\xb5\x14\xab\x8e\x7d\x99\x54\x5e\x02\x94\x1a\x2f\x9a\xe0\x18\x18\xea\xfb\x7f\xce\xf4\x0d\x8f\x48\xe1\xf1\xc0\xd4\x96\x99\x5c\x43\x7d\xc3\x7d\x43\x9f\xf6\x1d\x3b\xc7\x57\x86\x81\xa1\x91\xf6\x52\xde\x87\xfa\x86\x07\x07\x4e\x0f\xcb\xd3\xf3\x81\x3a\x4c\x5a\xfd\x00\x20\x5d\x49\xdd\x4d\x40\x98\x77\x54\x06\xe4\x0f\x3a\xb7\xa9\x2e\x14\x91\xf6\x15\x9c\x83\x24\xd1\x8d\xe1\xda\xd9\x5e\x8d\x67\x4e\x9f\x6e\x37\x0c\x61\x88\x6a\xb9\x0c\x40\xd2\x71\xe8\x51\x07\xf3\xdb\x74\x63\xcc\x24\xc8\xad\x8b\x34\xa2\xd2\xc3\xc0\xcd\x8d\xfa\xcb\x32\xf7\xb5\xc2\x0c\xc3\x65\xce\x5d\xfa\xc2\x7d\xf0\x83\xfb\xe5\x17\xd2\x2e\xa5\x1a\x3b\xa8\xe7\x68\x9e\x3a\x94\x98\x56\x71\x42\x33\x68\x8e\xa7\x7f\xfd\x6b\xbb\x8d\x50\x88\x42\x33\xb4\x50\x54\xd0\xf5\xac\xde\xaf\xdd\xb9\x52\x7f\x3a\xed\x56\x9e\xb3\x05\x61\x7a\xa7\x76\x6b\x25\xb8\x73\x71\xbf\xbe\xfe\x7e\xef\xbe\x28\x25\x85\x12\xfc\x0a\xe3\x94\x99\xa3\x79\x24\xa9\x0a\xfe\xf4\x57\x60\x23\x47\xe8\x05\x6a\x4d\x3a\x13\x60\x68\xd9\xb6\x99\xd5\x43\xd0\x17\xdd\x91\xf5\x41\x4c\x5b\x75\x2d\x9c\xb1\xa2\x02\x96\xf5\xdd\xed\xc6\xd7\xab\xf5\xe9\x8d\x00\x65\x1a\x13\x77\xb0\x81\x07\xd2\xaa\x03\xd1\x39\x85\x3e\xfc\xfe\xa3\x45\x5e\x54\x84\xab\x06\x41\x49\x8a\xfc\x8a\x65\x20\x9f\x6b\xbe\x0f\x71\x20\x4d\xe0\x34\xbd\xd8\xf4\xe8\x5f\xcf\x96\x0e\x1f\xfe\x83\xd4\xb3\x11\xb4\x68\x73\x36\x51\x0d\xf7\xed\xbd\xf0\x4e\xa6\xa5\x1a\x01\xc4\x89\x4c\x1b\xde\x2b\x5c\x27\x55\xdf\x14\x4b\xd6\x78\x33\x40\x4b\xf3\xb9\x04\x3b\xa7\x37\x6f\x96\x72\xe4\x38\x3b\x38\x5a\x93\xc9\x9f\xef\xed\xbd\x68\x09\xc0\x1e\x10\xce\x21\x61\xbe\x5a\xac\xb2\x14\x1f\x35\xaa\xb8\x9f\x95\xd6\x7c\x13\xf8\x21\xf4\x16\x13\xd9\x9a\x6b\x54\x2b\x9f\xa5\xfa\x05\x70\xcc\x85\x4c\xa5\x59\x6a\x39\x18\x42\xc3\xf9\x30\x65\x87\x94\x9b\xbf\xb8\x95\xcd\x18\x4d\x17\x67\x3c\x0c\x79\x4a\xa5\x7b\x1a\xe5\x61\x48\x3c\x36\xe2\x90\x4d\xe8\xe7\x34\x5b\x72\xc0\x83\xac\x31\x15\x34\x20\x3e\xf6\x6f\x5f\xf2\x9a\x43\x6d\x07\x6c\x61\x9a\x13\xb0\x27\xe0\xb8\x1f\x3e\x17\x63\x99\x3e\x0a\x92\x80\xba\xc2\xac\x50\x1d\x08\x76\xec\xae\x10\x97\xa1\x0b\x99\x0f\xba\x08\x75\xb2\xdd\xed\x61\xa5\x0c\xd1\x6c\xc9\xb2\xf5\x0b\x34\x3f\xe9\x7b\x20\x42\x58\x74\xa4\xf9\xd1\xf3\x39\x4e\x93\x69\xb7\xf8\xfa\x40\x83\x36\xaa\xd9\x34\x38\x89\x15\x34\x80\xcd\xe5\x7e\x43\x3c\xd4\xc6\x72\x5a\xa5\xf9\x1f\xf7\xea\xbf\xfe\xe4\xae\x6e\x36\x8f\x18\xe4\x4d\xe3\xa4\x25\xe8\x93\xc2\x21\xff\xd5\x82\xbb\x7e\x23\xa0\xda\xac\x97\x17\x98\x19\xb5\xb9\x28\x4b\x84\xf5\x96\x6e\xb8\xb3\x3b\x68\x2c\x75\xd0\x23\x21\xcc\xed\xff\x01\x5d\x83\x98\x4e\x1f\xa0\x83\x78\xa7\xc4\x29\x27\xa4\x61\xae\xa0\x54\x1b\xf4\x12\x41\x0d\x9c\xde\xc0\xcc\xf3\x89\x8c\x21\xc4\x32\x63\xe8\xed\xbd\x20\xe7\x2d\xe8\x0a\xce\x72\x00\x06\x66\x42\x65\x25\x8b\x33\xc6\xf0\xba\x54\x78\xe7\x6c\x4f\x11\x21\x89\xfd\xea\xc8\x99\xa1\x93\x4a\xf4\x5a\xbf\x36\x20\x3f\x12\xa0\x71\xf0\x6a\x56\x37\xa4\xa9\x05\xf8\x61\xc1\x70\x10\xf0\x6f\xf0\x42\x56\x5d\x95\x11\x49\x27\x54\xca\x4f\xce\x10\x0c\x85\x32\x43\x75\x5f\x5f\x06\xed\xd5\xa4\x2f\x13\xcf\x41\x85\xfb\x20\xcd\x12\x77\xa3\x38\x06\x0a\x3b\xb7\x9a\xf1\x30\xfe\x8f\xf9\x60\x62\xdb\x0b\xfb\x87\x6f\x08\xda\xec\x97\x5e\x0c\xc4\x39\x63\x53\x2b\xd9\xf3\x57\xdd\x7d\xd2\x54\x86\xd4\x77\xbe\x77\x2b\xd7\xde\xef\x2d\xb8\x6f\xef\xb5\xca\x05\xf8\x98\xe0\x48\x8c\xd7\xcf\x2f\x17\xe4\xc0\x2c\x4d\xdf\x25\xd2\x01\x52\x47\x63\xd0\x77\x56\x84\xb1\x1c\x3b\x0c\xe2\xf0\xa7\xa6\xba\x31\xbf\x9a\xb7\x20\xec\x34\xfc\x79\xc0\x1a\x8f\x76\x1b\xfe\x0c\xca\x7f\xf0\x8e\x8b\xaa\x10\x76\x5d\x54\x07\xec\xbc\x60\x68\x35\x35\x09\x3b\x2f\x4e\xc7\xfe\xc1\xfb\xec\xb7\xeb\x9a\x0f\xd7\x01\xfc\x7a\x13\x89\xdb\x0f\x68\x96\x31\xa5\x8c\x54\xce\x75\xde\x1d\x61\x81\x0f\x3c\xbf\xc2\xeb\x59\x68\x70\xbb\x1d\x94\x48\x34\xd0\x66\x25\xe0\x10\xd6\x42\xfb\x4e\x66\x13\x60\x32\xc5\x97\x6f\xdc\x1b\x8b\xc9\x68\x5b\x81\xd8\x74\xf6\x86\x20\xbb\x3d\x50\x91\xa6\x7a\x12\xc8\x75\x5a\xd4\xa4\x88\x86\x0b\xa5\x2b\x7c\x7a\xa2\x48\x55\x74\x92\x2f\x4c\xb5\xd3\x47\xd4\x4b\xf4\x15\x87\x12\xe5\xc4\x45\x11\xed\x14\x49\x5a\x20\x8b\x5f\x03\x45\x07\x6d\x70\x6c\xfe\xfb\xcd\x44\x77\x73\xb6\xc5\x34\xfc\xb8\xb3\x49\x18\xe9\x91\x99\x9d\x48\xe3\xd4\xd3\x84\x75\x4f\x08\x47\x8e\xe7\xfb\x3f\xf9\x7f\xc7\x7b\x2b\xf6\x20\x91\x84\x66\x73\x56\x9c\x55\x12\xe9\xad\x75\x6f\x51\x95\xba\x11\x4d\xdf\x2f\xfe\x8d\x3f\xec\x87\xdb\xe7\x27\x88\x2e\x29\xbc\xa7\x52\x36\xa4\xd3\x56\xc8\x56\xa5\x68\xed\xaa\x76\xa5\x6c\x54\x93\x43\x22\xee\xb5\xfa\x7b\x5b\x9d\x9d\xcc\xc5\xd6\xf7\xd6\x92\xee\x4a\x77\xb7\x1d\x76\x9c\xdf\xe4\x81\x7c\x4e\xac\x3a\xec\x37\xe1\xc7\x56\xbd\xf6\x5b\x74\x0f\xef\x88\xb0\x93\x62\xca\x4a\x7a\x22\x7c\x43\xd1\x0f\x45\x53\x19\xf1\x9a\x06\x1c\x77\x08\x3d\xff\x41\xca\xc0\xf0\xf0\x27\x18\xfe\x19\xc4\xa1\xa9\xb7\xc0\x80\xb5\x93\x27\x02\x40\x8c\x33\x48\xa9\xdd\xb9\x82\x77\x03\x6d\x55\x8c\xfc\xd4\x80\x71\x12\xc3\xc1\xe7\x31\xc6\x90\xd9\xab\x66\xd1\x5b\x5d\x8b\x80\x87\xbf\x7c\xed\xae\xac\xe1\x5e\x5f\xdd\xfe\x82\xeb\x09\x5c\xd5\x69\xf5\x44\xaf\x83\x34\x76\x29\xe8\x68\xb9\x0b\x0f\x43\xdb\x80\x78\x0a\x03\x80\x90\xc0\xfb\xac\x31\xd2\x3f\x78\x94\xf4\x8f\x91\x49\xb3\x04\x31\xe7\xa3\x74\x42\x37\x72\x44\x23\x63\xba\x45\x2f\xc2\xf1\x1d\xee\x67\x00\x66\x35\xe0\xa3\x29\x5a\xe6\xe7\x93\x5d\x98\xc2\x87\x31\x7a\x13\x8e\x53\xb4\xcf\xc1\xef\xad\xb3\x14\x75\x9b\x64\x4d\xcb\xa2\x59\x27\x3f\x89\x00\xb9\x7d\x79\x9b\x76\xf1\xf4\x11\x08\x42\x35\xa8\x73\xd1\xb4\xce\x0b\xbc\x16\xb2\xb9\xf0\x7f\x70\x83\x94\x1f\xa8\x68\xd3\x52\xce\xcc\x38\xce\x24\xcc\x00\x75\xec\x3a\xb8\xae\xc4\x22\x98\x4e\xad\xac\x81\xe6\x88\xed\x68\x4e\x9b\xb0\xd1\x43\xd8\x5b\x36\x19\x1e\x38\x33\xd4\xdb\x97\xe9\x19\x1c\x24\x23\x3d\x43\x27\xfa\x46\xe0\x9f\x9a\x1d\x00\xf2\x4a\x2f\xf9\x01\xb6\x47\x52\x1e\x13\x53\x55\xe0\xbc\x81\x02\xcc\x44\x44\xcb\x33\xac\x53\x59\x65\x64\x26\xc2\x3a\x94\xa6\x36\x4e\x85\x00\x31\xac\x64\x50\xc1\xd6\x80\xbc\x07\xfc\x0a\x4f\x16\x63\x3a\xe4\xd3\x96\x42\x72\x2b\xdb\x39\x7a\x06\xfb\x01\xf5\x28\x47\xcc\x92\xf3\x2f\xe0\x2a\x07\x03\x18\xa9\xc2\xd1\x5f\xde\x1e\x32\xc1\x10\xb5\x1d\x6d\x3c\x95\x8d\x2f\x26\xfc\xa6\xb1\xf4\xfd\xe4\xe3\x7f\x1c\xf7\x53\x73\x3b\x0e\xcc\x46\x57\xec\x76\x88\x3b\x90\xe6\x10\x05\x69\xff\x29\xbb\xd6\x82\x08\xb8\x56\x17\x68\x97\x2e\x41\x64\xaf\xb0\x05\x45\x7a\xff\x40\xec\x4b\x99\xc2\x24\x8e\x9a\xdc\x7c\xe5\x26\xb7\x2b\x39\x2e\xb4\x66\x10\xdd\xc8\xe9\x17\xf4\x5c\x49\xcb\x07\xd1\xa1\x40\x4a\x09\x97\xcf\x6c\x21\x2a\x49\x61\x44\xff\xf6\xca\x5d\x5a\xe6\x64\x2f\xf3\x65\xef\xea\x3c\x53\xa2\x3c\xef\x56\x9e\x60\x34\x27\x66\x24\x25\xaa\x90\x23\x39\xdd\x2e\xe6\x35\x5c\xd4\x07\x7a\x02\x66\xd2\x20\x82\x3e\xa0\x4b\xa7\xb6\x22\x1c\x19\xf5\xa9\x6e\x3f\x6d\x3c\xdc\xa8\x3d\xe6\x0c\xce\x8d\x3b\xd7\xbd\x97\x3f\x73\x32\xeb\x3b\x57\xb8\x78\x15\x93\xa9\x54\xb3\x71\xfd\x02\x35\xf8\xf5\xda\x78\x49\xcf\x75\x13\xd2\x93\xcf\x73\x2a\x93\x09\xaa\xe5\x01\x23\x2a\xc7\x3b\x8d\x2d\x1b\xc5\x52\x98\x05\x00\x0c\x5a\x36\x04\xdb\x5a\xd4\xb6\xe5\x09\x09\xf1\x66\xfc\xfc\xd4\x7d\x79\x27\x16\xc9\x4d\x4e\x9c\xe9\x3f\x06\xa0\xd5\x97\xbd\x2f\xbe\x74\x2b\xbf\xc4\x9e\x73\x46\x6d\xe0\x35\xf1\xca\xcf\xea\x97\xdf\xb8\x5f\x2d\xe0\x37\xaa\xef\x6d\xbb\xb3\x3b\xd2\x08\xda\x84\xd6\x9b\xd6\x78\xab\xd6\xc7\xda\x0a\x81\x23\x1d\xb7\x35\x88\xcf\x6a\x6a\x65\xf0\x44\x6c\xdf\xfe\x1a\xc4\x4f\x56\x29\x1a\x15\xf8\x90\x3a\xff\x88\x7e\x2a\x6a\xf3\xe7\x0b\x92\x54\x0f\xba\x61\x99\xf3\x74\xf2\x37\x69\x9c\x58\x21\xf9\xad\xda\xc8\x36\x8d\x34\xad\x83\xfd\x6e\x1f\x23\xd2\x8f\xc1\x6b\x1e\x91\x51\x46\xf8\x03\x69\x94\xa3\x65\xcf\x07\x8d\x92\xb7\x89\xbd\xb6\x8f\x36\xb9\x0f\xae\xd5\x96\xbf\x68\xd5\xa6\xe0\x49\x27\x6d\x0a\x12\x65\x84\xbd\xc4\x16\x37\x13\xf6\x90\x6a\x59\x4c\xa2\xcd\x60\x8a\x1b\xbe\x9b\x62\x9b\xf1\x36\x96\x78\x76\xdd\xd2\x86\xb7\xb6\xc2\x1a\x03\x3b\x4d\xb0\xfd\x88\x1b\x0f\x06\xd8\x26\xe8\xdb\x0a\x5d\xa2\x63\xe0\x19\xae\xaa\x04\x5b\x86\xed\x8e\x8a\xac\x1b\xa5\x4a\x1d\xa3\xcb\xa0\x4a\x6a\x00\x99\x76\x14\x03\x64\x09\xa4\x7b\xc8\xe7\xf9\xd2\x11\xc5\x35\x8f\x07\xb0\x05\x13\x50\xa9\x21\x8e\xb5\x7a\x65\x96\xcf\x28\x21\x44\x4d\xc4\xce\x85\x28\x9e\x25\x77\x6e\x56\xa9\x2a\x78\x7e\x82\xd1\xc6\x14\x65\x83\x6d\x9c\xe6\xfc\xa1\x66\x1f\x98\x0f\x53\xd4\xde\x7d\xb5\x15\x19\x94\x77\xae\xe0\xb8\x54\x18\xac\x2d\xd4\x9d\x9a\xea\x3e\x8e\x5a\x1e\xcf\x6b\xe3\x07\xe8\x6e\x45\x55\x9b\xe5\xb7\xa5\x67\x67\xf3\xe5\x80\xdb\x90\x38\xc3\x3a\x6d\x49\xf2\x34\x3b\xe0\x96\xa4\x9c\x98\xf2\xf6\xc0\xf1\x17\x36\x12\xa4\x85\xed\x14\xd7\x71\xc8\xbf\x45\xfc\xc4\xb4\x1d\x7e\xce\x9a\x9a\xea\x3e\x06\x52\xc3\xf4\xd7\xbe\xcf\x75\xdb\xa1\x78\xb4\x90\xf8\x3c\x82\xab\xc5\xf4\x92\x3a\xd5\xe8\xe3\x80\xfb\xe8\xe0\x74\x93\xcb\x54\x6b\x09\xff\xb8\x74\x89\x5c\xd4\x30\xe8\x7e\x14\x52\xf0\x9c\x66\xdc\x8e\x16\x41\xa2\x97\x2e\x49\x91\x21\xa2\xc9\xba\x80\x67\xf2\xbc\x51\xfe\xb6\xf6\xf3\x8d\xfa\xec\x8f\x09\xd4\x00\x8a\x44\xea\xa1\xe8\xad\x7a\xaa\x2c\x90\xd8\xa5\x71\x52\xe6\x47\xac\x0a\x01\x30\xa0\x9d\xae\xe1\x1f\x29\xbd\x4a\x69\x3b\x27\x21\xd3\x7c\x48\xa0\x37\x09\xba\xdf\x3a\xc1\xfe\xbc\x74\x29\xc4\xa6\x4c\x82\x81\x89\x91\x9d\x34\x49\x52\x54\xae\xfe\x0c\xaa\x82\xdc\x46\xd4\x6d\x7f\x51\xb8\xa8\xe7\xf3\xc0\x26\x0a\x58\x90\x25\x0b\x9c\xe7\xf9\x49\x3f\x07\x39\xe4\xde\x13\x49\x5d\xa4\xab\xda\x63\x24\xa8\x0a\xe3\xe2\x97\x9e\x7b\xab\x97\xd1\xb3\xe9\xae\xae\x21\xbb\x12\x3e\x15\xdb\x5e\xdd\x96\xb9\xcf\x41\xe9\x36\x97\x2b\x05\xc0\x95\xd2\x40\x28\x19\x44\x23\xa6\x41\x33\xe6\xd8\x18\xb2\xfc\x05\xd7\x08\x6d\x2a\x80\x7b\x5e\x9f\xb0\x53\x7c\xea\xef\x14\xf0\x71\xa5\x2d\x92\xed\x5e\xb2\xab\x81\xe1\xbe\xde\x33\x43\xfd\x23\x7f\x21\x27\x86\x06\xce\x0c\xca\x84\x26\x12\x0c\x44\xc5\x48\x95\x13\xe4\x48\xb2\x52\x86\xfb\xfa\x48\xcf\xc9\xe1\x01\xa9\x88\xa5\xa7\xf5\xa7\xf3\xd2\xc2\x43\x9f\xf6\xf7\xca\xd8\x31\x55\x6c\x1f\xbc\xa4\x12\x78\x9d\x9f\x31\xe1\x0a\x36\x85\x14\x59\x0b\x44\x31\xea\x76\xc8\x52\x81\x52\x34\x44\x9a\x12\x84\x65\xd5\xf5\x76\xc8\x16\x3a\x3c\xd8\x23\xed\x7b\x45\x09\x35\xd8\x3d\x1a\xec\xaa\x3e\x0f\x65\x48\x21\x86\x05\x21\xb2\x96\xa3\x14\x35\xd4\x3d\x88\x49\x80\xba\x47\x41\xc7\xfa\x3e\xed\x3b\x39\x30\x28\x87\xbb\x07\x51\x8d\xe5\xf9\xda\xca\x5e\x75\x67\x27\x41\x5a\x02\x74\xbe\xd0\x3a\xb5\x20\x29\x78\xbe\x22\x74\x08\x0b\xaa\x7b\x56\xd6\xa7\xc3\x9f\xf0\x44\xef\x8e\xae\x51\x65\x77\xa8\xb5\x3b\x57\xc8\xf0\xf0\x27\xb2\x3a\x4f\x92\x5e\x21\x2d\x02\xae\x05\x89\xc8\x38\xcc\x6f\x08\x81\x57\x23\x3b\x06\xc1\xc9\x99\x8c\x7d\x5e\x2f\x66\x6c\x3b\x9f\x81\xe4\x0a\x50\x01\x08\x36\x98\xb2\xba\x51\xa2\x01\x46\xbf\x6e\xc0\x89\x94\x46\x68\x4c\xdb\x1b\xf3\x23\x3d\xbd\x32\x4a\x09\x49\x89\x33\xbd\xbd\x7d\x7d\xc7\xfa\x8e\xb5\x57\x2a\xab\xe5\xff\xb1\x6e\x6d\xbc\xbf\xfd\xe4\x5e\xfd\x0d\x6e\x6a\x86\x7d\x9f\x41\xc2\x4e\x29\x6e\x46\xb2\xdd\x31\x8a\x7c\x39\x35\xd5\xed\x3b\x24\xce\x8d\x73\x6b\x2d\x1d\x5c\x96\x50\x57\x4b\x29\x09\x39\xb1\x29\xf4\x98\x9a\xea\x86\xdb\xf0\x73\x85\x04\x1a\xee\x44\x5d\x5a\x48\x92\x28\x85\x53\x68\x82\xe6\x8b\x04\x52\xc6\xb2\x1c\x8a\x0e\xf3\xc7\x60\x06\x31\xa3\x9c\x68\xa3\x88\x5c\x10\xc0\xd6\x24\x40\xd6\xc9\xea\xcb\xd3\x6c\x40\x6b\x45\x3e\x32\x2d\x02\xbe\x49\x42\x0d\x66\x57\x32\x93\xff\xbc\x5e\xfc\x27\x05\xe9\x0a\x3b\x13\x73\x8e\xab\x8a\x57\x59\xf6\x16\xe6\x48\x1f\x94\x6d\x2c\xfe\x5c\xdd\x7d\x52\x7f\xf5\x63\x63\xfa\xfa\xfb\x3d\x69\x2a\x94\xaf\x01\xce\xa0\x0e\x15\xe0\xe4\x8b\x1d\x2a\x00\x9c\xf6\xf0\x79\xba\xf0\x7f\x48\xd6\xcc\xd1\xa3\xe4\xc8\xe1\xc3\xbf\xef\x22\x05\x9f\x8e\x9d\x03\x4a\xda\xd4\x11\x73\x4b\x46\x69\x56\x2b\x21\x70\x59\x40\x35\x50\x14\xc0\xd4\xe5\xb1\x9c\x01\x7f\x7d\x63\x61\xa3\xfe\xfc\xf1\xfb\xbd\x05\xfc\x47\xed\xd1\x1e\xd6\xfd\x7e\x6f\xc1\xe7\x77\x47\xee\x01\x4e\x53\x25\xa4\xa5\xbc\xdf\x5b\x70\xef\x3e\xa8\xcd\xec\x08\x39\x12\x8b\xee\x0f\x2f\xbc\xe5\x3d\x55\x78\x68\xb4\xcd\xdc\x95\x85\x8d\xfe\xe3\xe1\x3f\x34\xf5\x02\xfb\x29\xe8\x86\xbf\xf0\x20\x10\x80\xb6\x2a\x39\x13\xa6\xa5\xff\x17\x02\x4c\x15\x39\x8c\x29\xb8\x98\x82\xd8\x08\x2d\xab\x08\xb8\x68\xee\x03\xee\x19\x66\x7d\xf0\xc7\xc3\x7f\x68\xea\x14\xf8\xc9\xef\x15\x6f\x66\xcd\x5b\x7d\x5e\x5b\xdc\xf2\xae\x57\xbc\x17\x5f\x00\xf4\x0c\x70\x34\x80\xc1\x1e\x01\x59\x9b\xbf\x55\x7d\xb3\xda\x49\x67\x1c\x25\x3d\x98\x5f\xcd\x4e\x67\xd4\x00\xfa\x5a\xe8\x83\x9c\x09\x5d\x00\x04\x5b\x45\x4b\xbf\xa0\xe7\x29\x87\x61\xc1\x54\x3e\x8a\x27\xba\x84\x69\x99\xd4\x01\x47\x89\x37\xff\x55\xed\x67\x4e\x3b\xf1\xae\x3c\xc3\xda\x8c\x28\x71\x9b\x95\xda\xcd\x35\xef\xc5\x17\xee\xd2\x06\x6f\xf0\xfa\x63\xc4\x9a\x94\x1e\x92\x15\x4d\xc5\x78\x9f\x61\xf8\x09\x61\x8c\xa2\xc3\x00\x9f\xf7\x0c\xf6\xc3\xf6\xef\xbf\x11\x8c\x0a\x7c\x1c\x49\x9e\xed\xa4\xc5\xcd\x5a\x44\x47\x40\x2b\x2d\x84\x01\xd1\x4a\x0b\x69\x47\xe8\x59\x4a\xe0\x72\x79\x04\xee\xae\xa7\xa6\xba\x4f\x6a\xa3\x34\x8f\xab\xb5\x0f\x4c\x94\x9a\xc4\x83\x93\x39\x7e\xf9\xa5\x5b\x79\x82\xb7\xd5\x72\x89\xc9\xe4\x1e\xbe\x7e\x7f\x0a\x82\x62\xdb\x62\x14\x51\xc5\xb7\xa6\x26\x18\xf1\x75\xf0\x1d\x30\xfe\xea\x06\x2b\x9d\x4f\xf2\x26\x51\xe0\x5d\x79\x41\x74\xe7\xbc\x2b\x2f\x56\xb7\x17\xbd\xdb\x1b\xb5\x9b\x3f\x04\x2b\x95\x37\x57\x46\x7c\x27\x75\xf5\x09\x26\x6d\xba\xc2\xa4\x39\xaf\x39\xb5\x4b\x48\x9d\x1f\x9d\xbe\xfe\xd6\x3c\xa0\x6d\x7d\xd0\x04\x4e\xd1\xf4\xdf\x54\xe9\xdb\x4c\xec\x9a\x74\xb2\x8f\x36\x85\x08\xa7\x68\x5c\x8b\x42\xca\xca\x64\xbc\xae\x2d\xc0\xa9\xf7\xed\xbc\x4c\xf7\x11\x44\x16\x5b\x39\xb7\x6b\xe2\x17\xf2\xb3\xe8\x3b\xfa\x04\x41\x0a\x7e\xb4\x1b\x9a\x23\x39\x1d\x6b\x12\xae\x56\x4c\x9e\xc3\xaf\x91\x0b\x47\x9a\x12\xf9\xbb\xe0\xf5\x42\xc9\x46\xe3\x87\x6d\xef\x99\x22\xdc\xd0\xa9\x7b\x4a\x4c\xcd\x0f\x86\xe6\x59\xc3\x5b\xba\x51\x7b\xbc\x73\x94\xb8\x4f\x67\xbc\x7b\xab\xde\xcc\x9a\x7b\xfb\xeb\xfa\x77\x4f\x31\xa9\xbf\xf6\xe2\x05\x39\x42\x00\xa2\x30\x2e\x82\xd9\x3a\x73\xb3\xee\xaf\x57\x1b\x0f\x2a\x68\x09\x31\x35\x12\x50\x94\x9b\x7a\xa4\xcd\x69\x9f\xcc\x93\x3b\x2c\x0b\xf5\x6f\x67\x66\x37\x97\x4e\x3d\x97\xc5\x19\x93\x66\xff\xe5\xde\x2a\x69\x29\x55\x5d\xd2\xc8\x32\x95\xf7\xcc\x27\x11\xd6\x0d\x87\x8e\x5b\x50\xa6\x3d\xdf\xb1\x2f\x21\xc1\xff\x26\xb5\xef\x9d\x78\x1e\x33\x5e\x87\xab\x7c\xc8\x38\xbe\xe2\x70\x9c\x89\x19\xce\xac\x2e\x1f\xe7\x2a\x6f\x66\xb5\x3c\xed\x66\xb3\xed\xe4\x40\x6f\xcf\xc9\x3e\xb6\x7f\x1e\xea\x3d\xd9\xd7\x33\x74\xa8\x8b\x1d\x72\x2e\xe8\x66\xc9\xe6\xaf\xa1\x75\x99\xa7\x8e\x3c\x28\x04\x55\x42\x60\xab\xfa\xf3\x7b\xf5\xb5\x32\xea\xf3\xae\x3c\x83\x33\xc9\xaf\xc6\xbb\xbd\xe1\xd7\x83\x53\xc6\x5b\xbd\x8c\xe8\x2d\xee\xd5\x8a\x3b\xb7\x58\xbb\x73\x25\x56\x5e\xde\x18\x8c\x92\x3b\x07\xf1\xd7\xe7\x9c\xc9\x22\x8f\x35\x64\x46\x2e\x22\xae\x1f\x02\xf6\x41\x62\x5a\xe4\x90\x61\x1a\x54\xc6\x86\xe7\x6e\xce\xb6\x90\x85\x73\x97\x9f\x6a\x66\x76\x7c\x61\x5e\x65\xd9\x97\x26\x55\xcc\xb4\xc8\x05\x9d\x5e\x0c\x61\xc9\x75\x52\xb2\xf2\xea\xaf\x59\x59\xf6\x9e\x3f\xaa\x3f\x5d\xc6\xc4\x77\x70\x37\x9d\x19\x3a\x99\xa2\x8e\x89\x90\x1f\x1a\x4e\xa9\x6c\x33\x51\xc1\x82\xb5\xaa\x0e\x8f\x63\x5e\x65\x59\xe9\x19\xa4\xc0\x76\x96\xb2\x53\xa5\x32\x38\x00\xa4\x08\x11\x00\xe9\x33\x7d\xfc\xcf\x54\xf9\x6b\x02\x52\x40\xf8\x85\x9a\x84\x28\x55\x88\xcc\xb9\x43\x62\xee\x39\xf8\x31\xf8\x2f\x9f\x6a\xf9\x12\x07\x41\xb5\xfe\x81\x5c\x6b\xec\xe0\x31\xfb\x8d\xbb\xb9\x78\x70\xb9\x8a\xee\xe6\x6c\x24\x1b\x3f\xd6\x25\xc2\x44\x88\xf6\x4c\x62\x47\xff\x67\x2b\x38\x39\x0e\x08\xd6\x22\x3b\xea\x40\x32\x01\x5b\x03\xd1\x05\x6d\x68\xd1\x6b\x89\xcd\xf8\x0d\x62\x6a\xb8\xe1\xd0\x41\x4c\x8d\xaf\xe4\xdf\x39\xa0\x06\x1b\xd0\x79\x40\x8d\xaa\x19\xbf\x61\x34\x4d\x33\xe3\x7a\x47\x8d\x99\x60\x46\xac\x06\xfe\x17\xcd\xa1\xe1\xf5\x39\xde\x2c\xc8\x7d\x6f\xf5\xca\xac\x4f\x4f\xf1\x43\xed\xe6\x1a\xfa\x52\xf0\x9a\x5c\x5e\x13\x1a\xd4\x50\x43\x3c\x3e\x86\x23\xca\x7e\xa0\xd9\x16\x68\x1b\x15\x8f\xba\xa3\xd6\x71\x8d\x14\x5d\x66\x5e\x0c\xe1\x70\xa3\xb1\x80\x32\x27\x2b\x44\xa1\x22\x20\x6f\x8a\x6b\x6b\xa8\x20\x9f\x8f\x11\xd1\x27\x9a\x5c\x58\x4b\xcb\xb8\xf8\x14\x86\x17\xab\x74\x82\xe6\xd5\xc2\xeb\xcf\x9f\x7b\xb7\xaf\x2b\x24\xe8\xc6\x98\x69\x15\xf0\x52\x0d\x14\xe6\x51\xbb\x1f\x69\x61\xf8\x2e\x1b\x6d\x34\x33\x5a\xd2\xf3\x0e\x42\xc5\xdb\x93\xb6\x43\x0b\x5d\x44\x37\x7c\x3c\x54\x36\xf4\x8a\x94\x99\xba\x6c\x51\xe3\x8f\x91\x84\x57\x33\xd8\x62\x01\x10\xb4\x32\xb0\x2d\xde\xdd\x10\xd4\x8b\x90\x8c\xef\xf7\x2a\xf8\xa7\x77\x7b\x23\xf4\xf6\xc5\xd8\x31\x1f\xdc\x60\xe6\x1d\x24\x9d\x73\x86\x32\x70\xf9\xb0\xb2\x0b\x57\xbd\xf9\x17\x3c\xa5\x82\xff\x38\x27\x45\x45\x85\x8e\xf0\x91\x24\x95\x2a\x8a\xa8\x91\x09\xb2\x4a\x36\xb5\x6c\x32\x3a\x09\x3e\x73\x99\x63\xf0\xed\x37\xe8\xd4\x16\xa5\x07\xde\x22\x45\x05\x00\x13\x98\xa3\x8e\xa6\xe7\xf9\x38\x13\xf9\x87\xe2\xa7\x59\x75\x93\x10\x71\xbf\xe9\xe8\x17\x90\x11\xd5\xbf\xfb\xb1\xf6\xd3\x26\xc2\x66\x29\x54\xc2\x0d\x39\xb1\x07\x71\x0f\x4d\xec\x41\x8b\x66\x81\x75\xb5\x58\x24\xf4\x82\x2a\x23\x10\xa7\xd0\x6a\xb9\xfe\xeb\x97\x31\x43\xa4\xba\x33\x2f\x45\xf7\x80\x3a\x9a\xbc\x23\x89\xca\x8b\xee\x90\xc4\x26\xd8\x82\xbf\x26\xa5\x64\x74\x9e\x24\x4b\xc6\x5c\x81\xc4\xc1\x8a\xb7\x26\xe9\xa4\xa5\xfc\x7c\x3c\xe4\x20\xdd\x47\x44\xc9\x9d\x4c\x04\x4c\xc7\x4e\x31\x11\xe0\xa0\xc2\x0e\x56\xe6\x98\x9f\xdf\x84\x99\xb3\xfc\x66\x46\xcc\xc1\x96\xd4\xdd\xbe\x1c\xa9\x3a\x6c\xf1\x0b\x12\xc1\xe0\x90\x8b\xa9\x77\xff\x20\xf6\xbd\xb8\xca\xa4\x34\xee\x95\xd9\x7c\x98\xbe\x56\x7f\xfe\xab\x77\xeb\x27\xe5\xee\xcb\xfa\xa5\x39\xfb\xec\x60\x0e\x3f\xfb\xb7\x35\x0e\xba\x5b\x62\xd9\x6c\xf2\x9e\xd1\xdb\xf6\xf1\x9f\xd7\x8b\x1c\xba\xdb\x47\x41\x81\x1b\x59\xc7\x54\xe1\xc9\xe1\x7d\x70\x80\xeb\x80\x13\x2d\x40\xf1\x4e\x9a\x65\xac\xca\x09\xd3\x76\x60\x1d\x0b\x03\x5b\x94\x75\x55\xb7\x77\xbd\xef\xee\xe3\x6a\x86\x44\xbb\x0a\xe1\x11\x06\x5f\x6e\x96\x8b\x71\x31\xdd\xe4\xb4\xe9\xb0\x0d\xc1\x2c\x14\xa8\x91\xa3\xb9\xff\xbf\xb2\x6e\xac\x4f\x38\xca\x73\x22\x8f\xdd\x9d\xfa\xfa\x26\x36\xf6\xfd\xde\xb4\x44\x9f\x44\x88\x08\x45\xb9\x83\x60\x86\x47\x41\x07\x02\x88\x2f\xae\xd4\x1d\xc1\xe2\x0b\xba\xa8\x03\xb7\xb0\x0e\xa9\x33\x12\xc4\x74\x1a\xf3\x8f\xa5\xd1\x90\xc4\x90\x2f\xbb\x3d\x6e\xbe\x0e\x99\xf8\x86\x5b\x2e\x38\xe9\xfb\x3d\x5e\x34\x4d\x5f\x27\x84\xc7\x49\xfb\x17\x39\x61\x35\x64\xd7\x67\x8b\x2a\xd8\xe8\x00\xb7\xab\x9b\x06\xb8\x63\x8b\x3e\x43\x73\x10\x47\xdd\x15\xf0\x40\xe0\xeb\xba\x1d\xe0\xff\xeb\x46\xb0\x89\x5d\x34\x2d\x80\x60\x0d\x98\x8f\xa4\x2b\x2c\x46\x54\xdf\x5c\xf3\x96\xf7\x90\x14\x20\xc6\x19\x1c\xf8\x6c\xbd\xd5\xe7\xf8\x72\xc0\x73\xcc\xfd\xb5\xab\x6b\xb8\x9f\xb8\xaf\x9e\x54\xdf\xac\x06\xec\x49\x28\x2d\xc2\x47\xf1\xfc\xa6\xdc\x83\x0b\x67\x16\x5c\x0f\x7f\xdb\x33\x4c\xfd\xe9\x74\x40\x5c\x87\x47\x97\xdf\xf6\x0c\xc3\x1a\xda\xe6\xdc\xe2\xbe\x8f\x0e\xe2\xc3\xd5\x5e\x0c\xe9\x50\x4d\x86\x3e\x48\x0b\x7a\xc0\x45\x15\x8b\x00\x80\x61\x96\x9c\xb3\x06\xbf\xea\xeb\x11\xa2\x44\xe1\x02\x6f\x14\x33\x3e\xa9\x48\x69\x66\xe9\xe3\x13\x0e\x29\x9a\x96\xd3\x0d\x97\xfd\x54\xcb\x81\xe5\xa7\x59\x39\x92\x35\x73\xbe\xb7\x88\xbd\xd0\x05\x43\x89\xfd\xf5\x7f\x0d\x0e\x0c\x8d\xb4\xf4\x14\x49\x59\xa7\x9a\x5a\xd3\x28\xbf\xf5\x56\x66\x98\xb2\xc1\x9d\x20\xdc\xee\xb9\xab\x6b\xde\xfa\xb7\xb5\x47\x3b\xc8\x32\xe7\x5d\x7f\x52\x9f\x7e\x23\x16\x64\xbb\x18\x0c\x2f\xae\x86\xd8\xeb\x08\x54\xdc\xf8\xe6\x9e\xbb\x39\xeb\xde\x7f\xe0\x6e\x7c\xcf\x26\x93\x0f\xb5\xab\x9a\x2b\x96\x43\x4a\x46\x48\x46\x18\x74\x22\x6b\x32\xdb\xce\x7a\x31\x94\xc7\x77\x55\x17\x4c\x8b\x8a\x1e\x03\x65\xb3\xab\xdb\x8b\x5e\xe5\x86\xfb\xc5\xfd\x48\x6b\x9f\xce\x34\x56\xcb\x3c\x75\x92\x9f\xf4\x43\x66\xca\x58\x9d\x0a\xb5\x69\x0e\xaf\xf3\xf0\xdf\xf2\x28\xc5\x57\x5b\xa8\x4c\xec\x6d\xb9\xe0\x7f\xac\x60\x57\x54\xfe\x37\x08\x76\x65\x4d\x2f\x15\xfd\xd0\xad\x2e\xbc\xf5\x36\x89\x51\xca\xe7\x31\xfe\x92\xff\xe0\x5f\xf5\x21\x8a\x09\x7f\x5d\x76\xb0\xe2\x42\x31\x42\x0b\x62\x96\x7c\x4f\xf9\x77\x3b\x6e\x79\x0f\xc9\xb8\x1b\xb3\x8b\xf5\xb5\xf5\xda\xcc\x0e\xde\xf3\x71\xc9\x58\x46\xaa\xac\x9c\xc4\x11\x4c\x6e\x79\xb9\x92\xed\x8f\x04\x47\x1e\x9d\x81\x42\x22\x2f\x4a\x04\x9a\x45\xf0\xfb\x85\x7c\xd7\x21\xf9\x3f\xdb\x3a\x30\x55\xde\x82\x00\x82\x02\x27\xa8\x43\x96\xbb\x82\x36\x49\x30\x8a\x32\x67\x5e\x34\xd8\x1a\xd6\xa6\xa1\x08\x55\x2b\x57\xd2\xe9\x55\x6f\xfd\x51\x9a\x95\xd4\x2c\x16\xff\xc1\x46\x3d\xa8\xfe\x1b\x8c\x7a\xd8\xe3\x33\x3c\x4c\x2d\x27\xdd\xec\x6e\xfe\x10\x80\xbd\x57\xdf\xde\x95\xed\x6e\x23\x3d\xc3\x7f\x3e\xd7\xdf\x5e\x78\x3d\xe7\x29\x6b\xb3\xcc\xa0\x9c\x1b\x88\xaf\xb3\x32\x22\x1b\x2c\x4b\x08\x26\x2e\xf8\x94\x6f\x68\xf8\x65\xd8\x11\x32\xe3\x47\xb9\x65\x7c\xd4\x11\xa0\x70\xd7\xce\xa3\x1f\x27\x78\xec\x7b\xb7\x6c\x81\x06\xd8\x31\x49\xef\x71\xb0\x91\x92\x94\x23\x84\xf8\x0b\x7e\x2a\x1d\xd8\xda\xf1\x32\xf4\x07\x71\xb2\xed\x80\x0e\x1e\xc8\x83\x59\xdd\x11\xf7\x1f\xbc\x2d\xef\x06\xd2\xc3\xc9\x4e\x39\x22\x93\x6e\xfb\x70\x6e\xb9\x10\xd4\x07\x88\x06\x81\x25\x8b\xf5\x80\x36\x36\x46\xb3\xd2\xb0\x96\x7d\x0a\x55\x28\x8a\x5c\x5d\xec\xa4\xcf\x61\x2a\xd8\x36\xf9\x27\xe0\x26\xe5\x33\xc0\xa6\x4e\xc6\xb4\xc6\x33\xec\x9d\x43\xe0\x63\x69\xf9\x0a\xcc\x5d\x7c\xa9\xbd\xe5\x06\xf4\xe8\xe5\xb4\x8b\x90\xaa\x09\xb1\xd0\xc5\x62\x7e\x12\xc3\x7f\x39\x05\xa3\x7f\x2b\x28\x9c\xcb\x6c\x52\x32\x1c\x1d\x70\x18\x26\x21\x00\x8b\xf7\x8d\x02\x0b\x84\xdb\x0a\x8d\x95\xc7\xcc\xa6\x79\xb5\x25\xc2\x4b\x21\x35\x23\xda\xd2\x31\x47\x0c\x3b\x4a\xdc\x78\xea\xce\xcd\x32\xcb\x63\xf5\xb2\xbb\xb9\xe8\xbe\xbc\xec\x96\xbf\x74\x9f\x7c\xcd\xc6\x0d\x50\x3c\x4a\x8d\xa1\x7f\x74\xc0\x3f\x75\x57\x05\x81\x65\xde\xea\x5c\xe3\xf6\x56\x6d\xfa\xfb\xda\xdc\xb5\xea\xaf\xdf\xd4\xd7\x5f\xf9\x2c\x16\x37\x39\x78\x1e\xe8\x3d\xc8\xf4\x43\xcb\x0b\xfd\x25\xee\xab\x2d\xb4\x3f\xf9\x6d\xb1\xd8\x0c\xd1\xd4\x64\xc7\x38\xe8\x63\x2c\xec\x3d\x7f\xe4\xdd\x7f\xe2\xcd\xb0\x43\x4f\xed\x97\xad\xfa\xab\x8d\x46\xf9\xdb\xda\xab\x3b\xea\x6e\x3e\x6d\xf2\x5d\xc4\x0f\x31\xe9\x0a\x0d\xce\x31\x44\x64\x17\x0c\x4f\x98\x28\x78\xda\xc7\x62\x49\x9d\xe1\xad\x3e\x77\x37\x67\xf1\xc8\x8f\xa6\x85\x9f\xae\xb1\x20\x9a\x99\xcd\x35\x55\x77\x9f\xb4\x2c\xa8\x68\xca\x19\xae\x77\xcf\x60\x7f\x54\xe5\x7d\xe5\x7c\xf9\x2d\x11\xd4\x8d\x54\xf0\x7e\x6f\xa1\xf6\x7a\xaf\xb6\xc3\xdb\x53\xdd\x5e\xe4\x97\x94\x77\xae\x08\x8e\xaf\x14\x6a\xf7\x1e\x0f\x84\x46\xb6\x4c\x68\x02\x35\x6c\xa6\x2f\x0c\xc9\x48\x5c\x4b\xc0\xbf\xca\xd6\x2f\x0a\xeb\x57\xfa\x86\x48\xab\x64\x8d\x7a\xb4\x53\xfd\xf5\x1b\x3e\x9c\x84\x51\x87\x73\xb7\x76\xf3\xbe\x77\xab\x92\xaa\x55\x1c\xc7\x30\x76\x7c\xd1\x0c\x3f\xb1\x1f\xf8\x30\x0f\xb6\x89\x18\x39\x53\xdd\xdd\xad\xbe\xb9\xd5\x80\x04\xff\xf8\x7d\x94\xd8\x07\x4d\x0a\x1e\x60\xeb\x23\xe3\xf0\x03\x7d\xc4\x03\xd4\x3b\x9c\xfa\x67\x8a\x39\xcd\xa1\x01\x18\x78\xb4\x21\x25\x78\x88\x19\x26\x49\x50\xff\xad\x34\x96\x4b\x7f\xbf\xb7\xe0\xdd\xfd\xc9\x5b\xde\x44\x76\xcd\x64\x6e\x80\x91\x81\x91\x9e\x93\xe7\x90\x96\xb6\xbd\x6d\x54\x1b\xc7\xf3\x07\xfb\x87\x3c\x5c\x75\x6d\xa5\xf6\xc3\x63\xf1\x3d\x89\x30\x3d\x0f\x71\x79\xc2\x7d\x69\xde\x1c\x4f\x11\x77\x80\x37\x36\x5e\x65\xb9\x75\x00\x02\x5c\xa6\x7a\x5f\x3f\xa9\x3f\x5f\x90\xd5\x2c\x44\x06\x8a\xf6\xb9\x9c\x79\xf1\xd5\x56\xb0\xb2\xf2\x5b\x08\x58\x5f\xe3\xa5\xd5\xd5\xb5\x3a\x7a\xa4\xab\x12\x6f\x42\x83\x2a\xa3\xe5\x25\x95\xda\xe7\xc9\x84\x66\x93\x51\xca\x4e\x71\xa5\xd1\x82\xee\x80\x0e\x81\xb3\x24\x3f\x09\x3d\x8d\xa9\x4f\x6c\x8f\x3e\x6b\x40\x21\x43\x2b\xd0\xa3\x84\xe0\xe7\xb3\xcf\xfb\xd5\xc0\x33\x3d\xc7\x9e\x04\xcf\x86\xe9\x7f\x96\xa8\x91\xa5\xfd\xc7\xa4\x83\x41\xa1\x1d\xb3\x11\xa8\x65\x83\xb9\x52\x32\x02\x3b\xbc\x4d\xcb\xce\x67\x95\x27\x5a\x60\xbd\x21\xe6\xc4\x58\x27\x98\x13\xa1\x38\x31\x48\x4c\xcc\xdc\x0e\x72\x6b\x34\x47\x40\x94\xd3\x8d\x1c\xfd\x1c\x4c\x2c\x3c\x4b\x3b\x3a\xaa\x64\xd0\x8b\xe1\xfd\x7c\x78\xb8\x0e\xa4\x85\xf0\x5d\x5a\x81\xa2\x14\xd9\x29\x0e\x28\xed\x39\x58\xde\x4f\x8f\xdc\xbd\x5b\xf5\x95\x5b\xe0\x6d\x6b\x61\x4a\xe2\x15\x3f\x33\x18\xb6\x9f\x72\x62\xb0\x05\x1f\x46\xf4\xee\xb6\x7b\x63\x01\x25\x54\x5f\xcf\xc7\x27\xcf\xf2\xa6\x8a\x8f\xc3\xef\x9e\xa0\x97\x5b\x0c\x84\xdf\xf4\xce\x58\xa2\xe6\xc4\x3e\x52\xd3\x59\xe1\x33\x43\x27\x83\x08\xbb\x34\xfc\x29\x6a\x49\x9c\xa5\x58\x20\x50\xdb\xbf\x98\x2e\xa2\x8f\x89\x52\xf1\x4e\x87\x98\x46\x5e\x37\xda\xbb\x94\x1d\x09\x91\x53\xfd\xf1\xce\xbd\xcc\xc7\xfa\x7a\xc8\xa8\x96\x3d\x4f\x8d\x5c\x17\xb9\x38\xa1\x67\x27\xc2\x0c\x09\xbb\x54\x2c\x9a\xe0\x19\x4a\xce\x98\x6c\xbb\x5e\x9d\x8e\x9b\x1f\xbe\xe6\x60\x12\x1a\x72\xf4\x7e\xb9\x80\xa4\x3d\x5c\x5e\x92\xeb\xdc\x59\xb5\x7e\xe1\x30\x69\xb5\x6d\x11\x18\x10\xd9\x61\xb1\x20\x7e\xd6\xec\xa4\xea\x96\x27\xca\x8e\xfa\xa1\xa5\xa4\x0b\x5a\xbe\xd4\xbe\xa8\x08\x26\x73\x47\xca\xc0\x85\x5c\x51\x73\x26\x3a\x2b\x39\x35\xd5\x3d\x08\xb3\xb8\x2f\x60\x14\x6d\x79\x63\x4b\x4a\x46\x8e\x5a\xe2\xac\x0f\xef\x35\xe5\x76\x84\x40\xc4\xe8\x5f\x4a\xce\xb3\xe3\xf2\xea\x1c\x5e\xd8\xc9\xab\x7f\x57\x9e\x91\x9a\x17\x13\x14\xa2\x2a\x3a\xea\x2e\xdc\x2c\x5b\xec\x86\x1d\x25\x8e\x32\x89\x90\x92\x83\xb7\xc4\x69\x56\x49\x78\x3d\x2f\x23\xb0\x94\x57\xc3\x76\xf3\x7d\x2f\x1c\x4c\x48\x48\x62\xd4\xb1\x08\xc0\xff\x8f\xed\x51\x1d\xf7\x1f\x13\x68\x5a\xe3\x9a\xa1\xff\xd7\x3e\x5b\x16\xe3\x06\xda\xb7\x9c\x8e\x92\x2a\xe3\x42\x8a\x79\xad\xfd\xf5\x0e\x04\x80\x81\xd2\x51\x23\xcc\x7c\x6e\xff\x63\x85\x09\xd9\xe7\x58\x61\x22\xf6\xff\x69\x99\x94\x83\xf8\xb4\xa2\x9c\x8e\x3f\xad\x28\xa4\xa3\x4f\x1b\x11\xc0\x93\xfc\x3b\x13\xb2\x8f\xf1\x61\xe5\x00\xfd\x89\x9b\x37\x8e\x68\x52\xe0\x99\x08\x3c\xaa\x34\x47\x72\x25\x2b\x4a\x7c\xa6\x95\x1c\x33\x93\xa3\x0e\x55\xe1\x74\x88\x6e\x80\xfa\xec\x73\x77\xfe\x96\x3b\xfd\xb3\xb7\xfd\xc2\x5b\xbd\x8f\x70\xda\xe2\x0b\xe8\x07\x6d\x3c\xb8\xe6\xee\x48\xae\xd9\x50\xe5\x70\x18\x75\xd0\x5e\x61\x0c\x62\x66\x4a\x87\xfd\x26\xc8\x81\xa8\xdf\xfd\x89\x50\x44\xf5\xca\x25\x14\x35\xdb\xbe\x68\x5a\xed\x65\xdb\x63\xc1\x70\x8b\x0a\x3f\x28\xb3\x02\xda\x17\x85\x5b\x5a\x47\x9d\x28\x1c\x45\x3a\x14\x60\xda\x18\xda\x07\xf1\x45\x36\x75\x6c\x52\xb4\x74\xd3\xd2\x9d\xf6\x77\xd5\xce\x3e\x22\x87\xab\x01\x78\x76\x5a\x60\x27\x6e\xd8\xd3\x7d\x6a\xf8\xa3\x04\x7c\x0c\x10\x41\x03\x80\x2f\x1a\xc9\x59\x66\x31\x4f\x9d\x6e\xe2\x87\x9c\xf1\x1f\x88\x69\xf1\xa0\xd4\x20\x6e\xcc\x7f\xe2\x98\x6c\x0d\x6f\xff\x74\x61\x45\x20\x6b\xfd\xec\x72\x3d\x07\x07\x18\xe0\xbf\x01\x67\x6e\x70\xef\x84\xb6\xb5\x94\xec\x26\x06\x51\x1b\xe6\x9b\xd7\x5e\x3c\x75\x6f\x54\xd0\x69\x8b\x37\x4b\x98\x5b\x24\xbf\xbf\x10\x95\x6b\x42\x8d\xd5\x0d\x52\xb2\x69\x37\x0f\xa2\xe9\xe5\x17\x7d\x82\xa9\x87\xfe\x8a\x8c\x41\x3e\x19\x18\x1e\x81\x7b\x4f\xd3\x02\x07\x68\x26\x63\x69\x46\xce\x2c\x64\x50\xb8\x63\x92\x71\x6a\x50\x2b\x74\x82\x58\x01\x8a\x32\x84\x15\x14\x4b\xf6\x04\x0f\x28\x48\x6c\x73\x08\x85\xbb\xba\xe6\x5f\x18\xac\x83\x6d\x1a\xf3\x93\x8a\x7a\x55\xdf\x5e\x43\xff\x2d\xc6\xf2\x22\xe9\xd1\xfb\xbd\x05\xaf\xb2\xec\xbf\x1d\x55\xb9\xfa\xf6\x5a\xed\xe6\xa3\xda\xcd\xfb\xde\xf2\x66\x10\xf5\x07\xf8\x44\xbf\xb8\x6f\x17\xf0\x0a\xcf\xbb\xbe\xd6\x28\x4f\x2b\x3b\x37\x55\x7a\x56\xda\xe2\x9d\xcd\xcd\x7d\x7a\x2c\x0e\x62\x9b\xdf\xb7\x41\xda\x94\xdb\x72\x20\x6a\x60\x28\xd0\xbe\x44\x9d\xa7\xed\x2f\x70\xfb\x36\x78\xe2\x02\xf6\xd7\x1b\x90\x7c\x05\xeb\x76\xab\xb3\x03\x5e\x8f\x97\xec\x0e\xe4\x2b\xa2\xcf\x13\x4a\x75\xd8\xa0\x30\xf3\xa7\xc3\xb2\x1d\x6d\xfe\x18\x93\xdb\x91\xc6\x01\x26\x81\xe8\x9d\x24\x59\xb3\x94\xc7\xad\x61\x94\xed\x6b\x5a\x76\x42\x1e\x5c\x80\x70\x69\x8d\xf2\xb7\xde\xf5\x27\xee\xab\x2d\x1e\x92\x86\xb7\x04\x91\xdb\x53\xe5\x2a\xe5\x68\xf6\xf9\x43\x36\x29\x19\xfa\x7f\x96\xd8\x10\x40\xef\x2d\x69\x37\xfa\x87\x49\x32\xcf\xd3\xf6\x8d\x41\xe4\x9e\xca\x6b\xa3\x54\x06\x00\x91\x54\xb6\x63\xb3\x5d\x91\x68\xa2\x2e\xd4\xc9\x07\xb7\x28\x07\xde\x0b\x5c\x9c\xb1\x50\x3b\xdd\x56\x19\x18\x08\x4c\x84\xd7\x7a\x31\x47\x3d\xba\xfd\x7d\xac\x2e\xf9\xa7\xe6\x1a\x38\xa6\x49\x0a\xcc\xe4\x30\x8b\x18\xd4\xe2\x98\x3e\x2f\x4e\x17\x29\xe6\xa9\x66\xf3\xfc\x31\x1d\x5d\xb0\xac\xb1\xd2\x9d\xf9\xe9\x34\x4f\x39\xba\x73\xa5\x31\xbd\xdd\x78\x70\xd5\x7d\xfc\xdc\x7d\x7c\x87\xc7\x63\x2c\xfe\xec\x5e\x7d\x82\xfb\x6d\x82\x62\xac\xf1\x06\x87\xac\xe3\x79\x6a\x10\x84\xc3\x2d\x3b\xd3\x80\x9b\xcf\x21\x5a\x34\xc1\x04\x38\x24\xa7\xfe\x5c\x5d\x8b\xbd\x4a\xaa\xdb\x5f\x60\x17\x21\xa0\xa0\xb7\x32\x53\x5b\xd9\xab\xdd\xbc\x8f\xc8\x74\xd2\x18\xb8\x0e\xf5\x12\xa9\x37\xa7\xa6\xba\x47\xf4\xa2\x3c\xa4\xb7\x7d\x5d\x5b\x4a\x97\xe9\x6f\xe3\x07\xcf\x9a\x85\x02\x00\xd0\x97\x6c\x9a\xf3\xbd\xc6\x76\x77\x80\xf8\x0b\x70\xa5\x19\xed\x10\x72\x04\x50\xa2\xe5\xf3\x5d\x68\xdd\xe5\x42\x6c\xa1\x36\xd9\x17\x47\x04\x8f\xbc\xa4\x20\x1f\xcb\x8a\xe8\x58\x51\x08\xfb\x12\xba\x41\xfa\xfe\x63\xb0\x6f\xa8\xff\x54\xdf\xe9\x91\x9e\x93\xc4\x27\x78\xcc\x61\x0c\x2a\xda\xa8\x4c\x71\xb3\xe4\xb0\x35\x54\x6f\x7b\x0f\x12\xea\xb3\x7c\x86\xcd\xde\xe3\xb0\x94\x5e\xa0\x96\xcd\x13\x98\x4e\xe9\x86\x5e\x28\x15\x3e\xc5\x5f\x2e\x5d\xea\x26\x7f\x31\x4b\x96\x1f\xda\xa3\x8b\x97\x56\xe1\x3b\x07\xa0\x09\x9b\x8d\xcc\xea\xe7\x84\x99\x91\x6a\x69\x2e\xdc\x44\x2c\xce\xe4\xab\x3b\x3e\xea\x1f\x27\xf1\x95\x29\x21\x7e\x0a\x8c\xad\x7a\x57\x5e\x68\x4c\xdf\x6b\x94\xa7\x59\x45\xef\xca\x8b\x88\x5d\x59\xbb\x73\x85\xef\x2f\xb0\xaf\xb8\x77\xef\xb9\x0f\x7e\x70\x5f\x5e\x76\x37\xef\x78\xab\xcf\x91\xc2\x57\x31\xd1\x43\x8a\x04\x76\x52\x9b\xd0\x2c\x00\x18\xb5\x4c\x1b\xe8\x8d\xd9\x59\xdc\xee\x3e\x6b\x1c\xa3\x79\x8a\x14\x90\x0e\x1a\x20\x16\x2d\x98\x17\x28\x72\x81\x86\x6c\x47\x60\xaa\xdb\x5d\xf0\xf9\xe1\x35\x88\xec\x64\xeb\x9a\x56\x2c\xfa\x97\xa9\x61\x8d\x25\x03\x76\x53\xb8\x55\x3e\x6b\xf4\x60\x1c\x09\xf1\x03\x4a\xc8\x45\xcd\xe0\x41\xe1\x79\xca\x6f\x7c\x5b\x83\x45\xfc\xab\x6c\xe1\x09\x98\x1a\xbc\xdb\x1b\xee\xea\x1a\xc7\x3e\xc0\x34\xf8\xd7\xf3\x8d\xe5\xbf\x21\xe0\x03\x1c\x56\x38\xa0\xd3\xcb\xcb\xde\xea\xe5\xda\xb3\xdd\xc6\xca\x63\x7c\x3d\x20\x61\x0a\x8e\x1c\xd5\xed\xa7\xd5\xed\x9b\xee\xe6\x2c\x67\xe4\x12\xe8\x20\xf0\xa8\x27\xee\x05\x3c\xd0\x4b\x30\x0b\xf0\x68\x34\xb3\x56\x7b\xb4\xe3\xbe\xbc\x53\x7f\x3a\x8d\x35\xb7\x46\x9d\x20\xee\xd7\xd7\xdf\xef\x49\x20\x34\xe0\xeb\xe9\x18\x91\x31\xaa\x65\xcf\x5f\xd4\xac\x1c\x0c\xd1\xa2\xe6\xe8\xa3\x7a\xbe\xfd\xd3\x3e\x9c\xd6\xd1\xe0\xcc\x99\xd4\x36\x0e\x85\xf7\x79\x7e\xc2\x17\xdb\x18\xcf\xd3\x49\xe9\xda\xe3\xad\x3f\xe6\xd9\xfe\xdb\x8b\xde\xcd\x0d\x6f\xe9\x27\x4c\xb1\xc2\x74\x4d\xf5\x48\x44\xab\xcf\x3f\xee\x4e\x68\xb0\xd0\xe3\xd9\x3f\x88\xcf\x00\x7b\x52\x51\x39\x07\xc0\xc7\x1b\x14\xcc\x42\xf5\x73\xf1\x30\x93\x50\xad\x02\x0c\x5b\x0c\x9d\xf7\x39\x2b\x31\x41\xc1\xd1\x2c\xa7\x9b\x48\x07\x29\xe6\x63\x8b\x97\xea\xff\x2a\x9f\xd8\x10\x3e\x7a\xbd\x3e\xfb\x93\x8c\xd9\x94\x4f\x6d\x7f\x84\x60\x44\x4d\x0c\xfa\x48\x35\x30\x30\x69\x09\x43\x75\xec\x49\x23\x8b\x61\x99\x7c\x87\x94\x82\x1d\x7c\x73\xcf\xbd\xb1\xe0\xad\x3f\xc1\xb7\x03\xa8\x5f\x4c\x2a\x92\xd5\x54\xe4\x21\x56\x5a\x2e\x97\x41\xbf\x55\x86\xad\x75\x1c\x57\x7b\x5c\xb7\x1d\x7e\x27\xa6\xb8\x58\x8f\x07\x54\xc5\x65\xb1\x73\xfe\xca\x6e\x63\xe1\x4a\x40\x22\x2e\xd1\xc6\x74\xb4\x3c\x39\x45\x0b\xa6\x25\x1b\xf9\xb5\xed\x37\xf5\xb5\xdb\xde\xb5\x5f\x1a\xdf\x4b\xa0\x9c\x51\x88\x56\x30\x4b\x06\x60\x4e\x17\x40\x1c\xf9\x88\x76\x8f\x77\x93\x23\x87\x7f\xff\xc7\x53\x5d\xe4\xc8\x89\x2e\x72\xe4\xf0\x09\x59\xb2\x9e\x58\x89\x77\x6b\xbb\x31\xbb\xf4\x7e\xaf\x52\x7d\x3b\xef\x3e\x9d\x41\x09\xef\xca\xd3\x47\x4e\xb0\xff\x1c\x3e\x21\x4d\xb9\x93\xe8\xe1\x23\x8b\x67\x35\x03\x3d\x67\x6d\x29\x86\x93\x63\x69\xa3\xba\xfb\x84\xc7\x9b\xdc\xb9\x72\x80\xda\x1a\xa5\xc2\x28\xb5\xe2\x8c\xc0\x81\x51\xdd\x4d\x32\x47\xd8\x38\xb0\xa8\x0d\x28\x49\x1a\xdb\x03\xf2\x7a\x41\x07\x58\x6b\x68\xa9\x74\x66\x37\x85\xcf\xd4\xb6\xdf\x60\xc4\x70\xe6\x08\xa9\xee\x7e\x5b\x7f\xb8\x56\xbb\xf2\xb0\xb1\x72\xc3\xad\xfc\x82\xad\x90\x4f\xf4\x83\xd2\x95\x7c\x74\x0c\x13\x96\x8e\x86\xcf\x64\x5d\xdf\x59\x03\xde\xef\x55\x30\x71\xc9\x2d\xef\x01\x68\x39\x3e\x4f\xfd\x19\xac\x64\x1e\x25\x54\x23\x9d\xb8\xb8\x37\x42\x0d\x5f\x29\x36\x53\x22\xdf\x62\x43\x39\xcd\xe2\x54\xff\xf5\x4d\xfd\xf5\x63\x71\x65\x6a\x2d\xf1\x4c\x4f\x4f\x68\x74\x15\x74\xdb\x66\x56\xcb\x98\x65\x16\x38\xf5\x93\xca\x99\x8f\x04\x4e\xde\xf3\x9b\xd5\xed\xf5\xc6\xf4\x8e\xb7\xb7\x44\x98\x38\x55\xb8\xf3\x99\xa1\x93\x6d\x6d\xb1\x3c\x50\x08\x2f\x95\x82\x70\xca\x20\x6a\x38\xcc\x6a\xf0\x09\xab\x6c\xc7\xa2\x5a\x41\x0a\x0b\xed\x6e\xce\x56\xb7\xb7\xbc\x9f\xa7\x03\xde\xaf\x78\xc4\x18\x04\x5a\xd6\xee\x5c\x91\x23\x33\x46\x74\xf2\x3f\x83\xa0\x17\x8e\xa1\x40\xa3\x31\xd3\x62\x86\x06\xcd\x75\x93\xe1\xec\x04\x2d\xd0\x90\x6c\x8b\x49\xf2\x93\x62\x21\xc4\x5f\xae\x75\xfd\xcd\x5c\x63\xfa\x5e\xc8\x56\x86\x43\xf1\xce\x95\x60\xd7\x61\xc2\xd8\x36\xb8\xfe\x18\xc4\xb2\xa6\xdc\xfb\xc5\x7b\x36\x8f\x09\xad\xde\xed\x0d\x5e\x43\xeb\x26\x0d\xf7\x9c\xe8\x93\x27\x5c\xad\x79\x3f\xde\x92\xf0\xc1\x9c\x19\xee\x1b\x52\x92\xfd\x04\x69\x42\x2a\xbe\x9f\x50\x8a\x4c\x89\x98\x18\x85\x36\x32\x42\x9c\x04\x64\x8d\x33\x86\x9f\x35\xa5\x21\xdc\x7e\xab\x68\xbe\x6e\x38\xb1\x22\xfa\xbb\x3c\x5f\x11\x29\x00\x00\x2f\xbf\x65\x86\x1c\x58\xb4\xa2\x9c\x44\x85\x30\xcd\xc5\x34\x28\xe4\x57\x03\x20\x3e\x4e\x52\x9f\xff\x80\x5f\xfe\x51\xbb\x68\x1a\x52\x5f\x27\x57\xec\xed\x3d\x64\x2b\x70\xef\xde\xf3\x66\xe7\xaa\xdb\xeb\xb5\xc5\x2d\xf7\xed\xd7\xd5\xed\xb2\xf7\xe2\xa1\x57\x7e\x56\xdd\xfd\xb6\xf6\x68\x2f\x51\xa9\x92\x33\x41\xe1\x9a\xca\x91\xba\x56\xb8\x19\x0f\x90\xf4\xd2\xdd\x25\x14\x89\x07\x97\x2e\x7e\xb9\x72\xc8\xbf\x2b\x39\x94\x12\xc8\x98\x37\x0f\x4e\x07\xef\xf7\x16\xf8\x8d\x8b\x20\x26\x19\xd1\x58\xd4\xc5\x81\xe0\x50\x4a\x7a\x7b\xe1\xec\xcc\x4f\xc1\xdd\x64\x10\xdd\x4b\x79\x73\x9c\x1d\xe6\x95\x97\x3e\xbe\x46\x8f\xbd\xe5\x57\xbe\x1c\x40\x96\x7e\xf1\xae\x3c\x53\x67\x36\x3e\x33\x67\x6b\x2b\xbb\xee\xd5\x34\xfd\x63\x8e\x3a\xec\x34\x27\xdc\x94\x0a\x21\xcf\xf0\x12\xf0\x4f\xfa\x7f\x25\x0d\xd0\xa5\x65\xf7\xed\xd7\x1c\x06\xe1\xf9\xcd\x78\x59\xb6\x82\x88\xc1\x56\xe8\x02\x4b\x52\xb1\xa8\x59\x76\xbc\xcb\xfc\x84\x99\xc0\x8f\x20\x83\x93\xe5\x7a\xcd\x2d\x7b\xf7\x6e\x44\xbb\xab\x85\x88\x04\x45\x2c\x9f\x82\x38\x8e\xa8\xd7\xb4\x77\x00\x9b\xb5\xec\x44\x2c\xad\x06\x2f\x58\x35\x0e\xd4\x85\x73\x51\x79\x65\xe0\x2e\x2d\x7b\xbf\x54\xf8\x09\xcb\xe7\x00\xc7\x13\x96\xba\x12\x80\xbf\x10\x40\xc1\x62\xb0\x31\x50\xf5\x07\x05\x64\x6a\xd6\x3c\x5e\x53\xec\xc4\x18\x53\x51\x9a\xf0\x7b\xc6\x18\xc5\xa4\xbe\xd8\x35\x61\xea\xde\x14\xb1\x20\x43\x22\x68\x76\x02\x63\x7b\x64\x07\x95\xe2\x0d\x92\x83\xa6\x5b\x94\xa4\x9a\x8d\x9d\x56\xf9\x94\x6d\x29\x88\x80\x2c\x4d\xc8\x23\xd5\xd7\xf3\xe2\x9b\x8d\xbb\xd7\x3e\x60\x23\x7c\x8c\xd5\xfd\x35\x42\x84\x1c\x39\xa8\xa6\xc4\x6e\xee\x70\x18\xf0\xd4\x4e\x55\x80\x2e\x1f\xa0\x22\x1a\x60\x65\x96\x9b\xbe\xbe\x9d\xb4\x3f\x15\x14\x79\xfd\xad\xea\x8e\xa3\xca\x24\xd7\x9d\x65\xd5\xe5\xf3\x72\xbb\xf5\xd5\x16\xff\x18\xf0\xdf\x64\x89\x2d\x21\x04\x70\xad\x90\xd1\x05\xfc\xfd\x00\x06\xb0\x0f\xa5\x20\x6e\xad\xd1\x67\x15\x70\x70\x12\x46\x83\xe0\x53\x24\xac\x48\xac\xef\x0a\xda\x24\xc9\x53\x88\xb4\x29\x16\x6d\x52\xd0\x8a\x45\xe4\x98\x8a\x85\x9b\x5c\x28\xe5\x0d\x6a\xb1\x5d\xe7\x5f\x08\x38\x16\xf4\xe6\x53\x9f\x9c\xaa\x83\x5f\xfb\xd9\xa2\x35\x05\x46\xc6\x31\x33\xe2\x2d\x2b\x5a\x66\x96\xd2\x9c\xcc\x45\x26\x0e\x0a\x77\x69\xa3\x7e\xf9\x4d\xe0\x31\x73\x37\x17\xbd\xdb\x0f\xea\xb3\x3f\xc6\x03\x50\x62\xe9\x90\xee\xec\x4e\x6d\xe9\xad\xb7\xb7\xe4\xfd\x74\xef\xfd\xde\x5d\x74\x67\xbc\xdf\x5b\x48\x49\x39\x02\x10\x00\x68\xe8\x79\x2b\x33\xe8\x8e\xab\x3f\x9d\xc6\xb4\xd8\x46\x79\xab\xfe\x70\x41\xe5\x80\x0b\xfb\x3d\xd6\xbd\x91\x11\x9b\xdc\x9f\x7f\xe7\x21\x1c\xef\xe3\x76\x07\x6e\x88\xa1\x90\xd0\xdf\xed\x8c\x64\x3b\x99\x66\x10\x7a\x99\x63\xc9\xc4\x76\x3a\xe8\xa5\x52\x60\x12\x28\xfb\xa7\x79\xbb\x68\x59\x5b\xbd\x32\xcb\x7b\xb2\xd4\x64\x6a\x60\xf6\xd7\xeb\xf9\xc0\x89\x93\x6a\xf9\xec\xb8\x99\xc1\x5e\xf8\xdb\x36\x53\xdc\x3c\x3f\x68\x63\xa7\xa6\xba\xc5\xe8\x50\xe4\xaa\x87\xe9\x10\xcc\x80\x94\x8d\x96\x7e\xb1\xd4\x9d\xa1\x56\x26\xb1\xe9\xf4\xf3\x22\xcd\xc2\x15\x21\x5c\x64\x4f\x68\x36\x31\xb3\x10\xe0\x98\x3b\x0a\xa7\x69\x7e\xa7\x2c\x3b\x5b\xe0\x15\xf4\x37\xf7\x1a\x0f\x6e\x78\xab\xf7\x59\x75\x78\x1d\x1d\x29\x2b\xa9\x1b\x16\x9e\x7c\x3e\x92\xaa\x42\xc7\x74\x83\xa3\xf3\xf1\x3b\x4e\xcd\x1a\x2f\x15\xa8\x34\x3d\xaf\xfe\xec\x5b\xb8\x30\x9b\xab\x7f\xfb\x0d\x5e\x53\xba\x7b\xb7\xbc\x5b\xdb\x6c\xc3\x9a\x2b\x23\x26\x64\xec\xcc\x95\xa0\x0f\x1b\x09\x5c\x9d\x20\xe9\xe5\x74\x2a\x53\x5f\xd4\x45\xac\xb0\x95\x1c\x89\x0e\x79\x33\x7b\x3e\x16\xf7\x0b\xf9\xed\x70\x00\xc3\xec\x70\xa9\x6f\x12\x6a\x6f\x5c\x5f\x76\x5f\xde\x11\xc3\xb6\x11\x81\x0a\xaf\x60\x31\x05\x5c\x56\x79\x41\x2b\x12\x8d\x8c\xf4\xa6\xb1\x0b\x71\x07\x84\x97\x55\x44\xf8\x5c\x68\x6a\x73\x93\x8b\x15\xac\xcc\xd4\x72\x8f\x9e\x05\xcc\x1d\x42\x88\x0f\xb7\x53\x62\x2f\xf1\xc8\xcd\x9e\xc1\x41\xfc\xf1\xd8\xc0\xa9\x9e\xfe\xd3\xe4\xaf\x99\x4c\x10\xaf\xea\xc7\x83\x7e\xc6\x7e\x85\xe0\xeb\xc1\x9e\x91\x4f\x3e\x3b\x7b\xd6\x40\x91\x4d\x3d\xd3\x5e\x55\x99\x0c\x5c\x5d\x0e\x0e\x0c\x8d\xa0\xc8\xbe\xff\xe8\x39\x35\x78\xb2\x6f\x98\x8b\x69\x25\xa3\x30\x99\x01\x58\xf0\xcf\xb5\x42\x31\x4f\xbb\xb3\x66\x81\x28\xff\xef\xbf\x89\xaf\xb6\x25\x56\xe8\x87\xc2\x24\x60\xe0\x46\xc4\xe2\x6f\xdd\x07\x27\x9d\xf7\xf0\x98\x69\xb6\x94\xfe\xf1\x98\x69\xb6\x59\x03\xf4\xee\x3f\x1f\x3e\x7c\x38\xa1\x5b\x8e\xb2\x77\xda\xf4\x48\xd8\x2d\x58\x77\x12\x49\x76\xd0\x6a\x41\x8c\x99\x30\xd6\x4e\x31\xeb\xed\x8e\xf9\x2e\x70\xc5\x11\x68\x2e\x02\xe3\x08\x58\x36\x7e\x90\xa2\x43\x61\xa5\x0a\xea\x0b\xd8\xe9\x3e\x1c\xf5\x05\x28\x2e\x89\x36\x90\xf0\x62\x04\x2d\x52\xf5\x24\xc6\x09\xd0\x5c\x08\xe7\x3c\xa6\x1b\xe3\xd4\x2a\x5a\xba\x01\x57\xd1\x05\xad\xbd\x4c\x6f\x44\xd4\x20\x5a\x32\x1e\x07\xac\xad\xc9\xc0\x1a\x81\xc0\x54\x51\xe0\x5c\x6a\x22\x3d\x87\x20\x15\xcd\x7a\x76\xf6\x51\x06\x5e\xa2\xe4\x66\x7e\xd3\x94\xf2\x95\x81\xe3\xa2\xec\x66\xba\xd2\x94\x35\x24\x91\xde\x8b\x75\x28\xe0\x08\x7c\xb9\x86\x80\xe0\x45\x6d\xb3\x64\x25\x84\x05\xa3\x7c\x9e\x30\x71\xe7\x4a\xfd\xc7\x59\x6f\xe7\x86\xd2\xb5\xd8\x5c\x51\x72\xf0\x71\xac\x16\xd1\xe1\xa7\xac\xa5\x25\x50\x5d\xba\x2e\x93\x42\xcc\x25\x76\x22\xe2\x91\xf2\x7f\xab\xf0\x48\xb1\xa2\xd8\xdb\x72\xc1\xb0\xc2\xb6\x9f\xa5\x17\x96\xfd\x07\x00\xd8\xe7\x1f\xf2\x83\xe3\x39\x06\x8d\x0e\x2d\xc4\xa9\xa9\xee\x00\xf1\x27\x9d\xa5\xda\xbc\x56\x49\x84\xa8\x55\x88\x90\x48\x40\x64\x30\xa7\x7f\xfb\x04\x1e\xf4\xb2\xdf\x47\x26\x8b\x07\xc8\x02\x97\xe6\x3b\x25\x28\xdd\xd2\xdf\x7f\xb0\xa3\xa0\x4d\x87\xbd\xaf\x59\x8a\xf3\xe7\x81\x9c\x2e\x9b\xf7\x94\x56\x75\x25\x2a\x1b\xdf\x67\x0e\xd8\xf9\x23\xdb\x9f\xd2\xf4\x63\x24\x39\x29\x24\xc7\x3e\xd8\xaf\x9c\xcc\xc6\x9d\x5e\xd5\x16\x4e\xb8\x26\x9d\xd3\x4d\x6d\x41\xe7\xd3\x52\x9d\xe3\x8e\xb0\xd4\xea\xb6\xb8\x31\x3b\xf8\x35\xb4\xd5\xa5\x57\x1a\xed\x22\x0c\xe6\xff\x80\x1e\xf9\xce\xb6\x88\xd8\x76\x2d\x71\xc3\x27\xf7\x4e\x64\xe1\x6d\x26\x6d\x95\xae\xdc\xea\xb3\xce\xe6\x6c\x92\x60\xde\x6a\x4e\x7f\xd9\x42\xbe\x44\xed\xbc\xa9\x05\xf7\x2d\x63\x3a\x70\xcd\x59\x66\x01\x6c\x8a\x41\xcd\x99\x48\x72\x27\xbe\xbd\x17\xbe\x09\xc9\x13\x33\x3f\x8a\x9b\x2d\xc2\x9a\x24\xd5\xbd\x9f\x3d\x16\xeb\xec\x7c\x8f\xf5\x75\x88\x5b\x05\xc9\x75\xa6\x35\x24\x84\x1a\xfe\xa7\x5e\x3c\xae\xe7\xe9\x9f\x26\x1d\x6a\x5f\xba\xd4\xc5\x7e\x62\x7f\xf7\x9a\x25\xc3\x61\x87\x41\xd6\xff\x29\x6b\x8e\x8a\x7a\xbf\xb7\x10\x93\xe5\x96\xe7\x95\x9d\x6f\x6b\xe3\x52\x96\x10\x59\x91\x7d\x01\xf9\xef\x1f\xad\xdf\x57\x40\xc0\x15\x05\x86\x61\x60\xa7\x77\x10\x97\x92\xe7\x80\xb0\x95\x07\xe8\xa1\x14\xd7\xf0\x42\xcd\x21\x6c\x68\x75\xf7\x09\xf2\x0e\x7b\x95\x65\xce\x44\x2c\xa6\x5d\x20\xeb\xe5\x57\x0b\x2a\x30\x57\xa6\xa6\x46\x4c\x83\x66\x20\xde\xc9\xc7\x27\x60\xea\xe6\xcd\x71\x29\xda\x93\x9f\x4e\xcd\x03\x99\xdc\x8d\x6b\xb5\x47\x7b\xd5\xb7\xd7\x30\xc2\x46\x5a\x95\xb0\x14\x3b\xda\xb8\x6c\xf4\xb4\x38\x8c\x00\x32\xa4\x42\x2c\xc0\xc9\xb1\xce\xe4\x8b\x6b\xba\x38\xa6\xa0\xa2\xa6\xf2\x29\x02\x98\xd8\x61\x2b\x09\x41\xbd\xb9\x25\xb2\x04\x32\x26\x2e\x51\x8a\xaa\xb0\x22\xcb\x30\x28\xaf\x8c\x2c\xb2\xf1\x32\x56\xe4\xc6\x09\x16\x4b\x29\x48\x14\x17\x1d\x25\xa9\x89\x94\x53\x54\x16\x05\x3b\x80\x8b\x3c\x75\x35\x51\x34\x03\x2c\xa0\x90\x8f\xf9\xb6\x48\x66\x90\x7a\x85\x86\x9a\x90\xbe\xa6\x45\xd1\x96\xb5\x7d\xda\x37\x34\xdc\x3f\x20\x0d\xa8\xc4\xc0\x2a\x49\x1c\xe5\xa7\x5a\x5e\xcf\x91\x7f\x1b\x1e\x38\x4d\xcc\xd1\xff\x45\xb3\x01\xdd\x93\x60\x09\x66\x38\x79\x51\x96\x47\x0a\x97\x90\x59\x9f\x14\x35\x4b\x2b\x50\x87\x5a\x76\x57\x38\xaf\x38\x59\xbb\x6e\x64\xf2\xba\x41\xd9\x72\xa3\x1b\x80\xe6\x9d\xa7\xdd\xe4\x38\x30\x66\xe6\x75\x1b\x63\x56\x02\xc7\x98\x5c\xae\x4d\x29\xc9\x99\x59\xb8\x6e\x09\x43\xbb\xe0\x7a\x46\xce\xbb\x29\xa5\x85\x01\x4e\x2a\xb4\x56\x90\x7e\x13\x03\x9b\xdd\xa5\xcb\xde\xad\x6d\x70\x3a\xcc\x79\xb7\x2a\xd8\x1d\xb5\xb9\xef\xe0\xa6\xa2\xd2\x28\x2f\x35\xa6\xaf\xd7\x1f\x2e\xb8\x57\x9f\x01\xd3\x3a\xdb\x28\xbc\xb9\x32\xce\xa9\xf7\x7b\x73\x48\xb1\xd4\x58\x2d\xb3\x1f\x21\xb1\x27\x2e\x16\x46\x26\x2e\xe1\xee\xd2\xe5\xc6\xf2\x0f\xde\xf2\x6c\x75\xf7\x97\xea\xee\x13\x8c\xcd\x93\x71\x81\x4a\x67\xff\x81\x7f\x36\xdd\xf8\xff\x3e\xd7\x07\xfd\x5c\x25\x0c\xe1\x04\xac\xbe\x43\x5a\xb1\x98\xf1\x8f\x57\x19\x40\x95\x3b\x44\xb2\x9a\xc1\x33\xe9\x0d\x3a\xae\x39\xfa\x05\xa9\xc7\xec\xeb\xaf\xbd\xb5\x95\xd6\x42\x6a\x77\xae\xb8\xe5\xbd\xea\xf6\x62\xfd\xf2\x1b\xef\xf6\x46\x7d\xeb\x81\x34\xc3\x20\x60\x9c\x3a\x2d\x5f\xb9\x11\x4f\x5a\xb5\x6c\x7f\x8a\x08\xfc\x83\x6a\x5c\x21\x8e\x75\x0f\xbb\xb4\x54\x8e\x2d\xb7\x87\x70\x09\x93\x94\x64\x56\x4d\xde\x1c\xb7\xbb\xfc\x54\x52\x4c\xb3\xe4\xd7\x24\x36\x82\x73\xfa\x39\x74\x72\x02\x0f\x34\x64\xfc\x34\xb9\xea\xf6\x17\x41\x8e\xc0\xbb\xf2\xb4\xfb\xe0\x07\xf7\xcb\x2f\xdc\xaf\x38\x95\x8e\x6c\x5f\xf9\xf7\x9e\xa1\xd3\xfd\xa7\x4f\x20\xd3\x06\x6e\xce\x6c\x42\x82\xb1\x15\x98\x36\x9a\x4d\xb4\xe0\x2a\x19\x67\x5d\x11\x33\x6c\x6c\x32\xa1\x8f\x4f\xe4\x27\x49\x4e\xb7\xb3\x66\xc9\xd2\xc6\x69\x0e\x44\xfd\x25\x22\xa0\xa0\x4d\xb2\x61\x72\x41\xb7\x75\x3f\x5e\x98\xad\xb9\x76\x90\x5c\x0c\x68\x0c\x59\xd3\xc2\x89\x8d\xd5\xdb\x13\x34\x9f\x27\x13\xba\xed\xc8\x53\xc0\xea\xeb\x4f\xdd\x2f\xbf\x40\xed\xdd\xbd\x57\xb5\xcb\x15\xce\xde\xb8\xbd\x58\x7f\x3a\xcd\xcf\x7a\x60\xe1\x71\x83\xeb\xcd\x6a\x6d\x66\x07\xaf\xb8\xeb\x0f\x17\x30\xa7\x1e\x4b\x5f\xfd\xa5\xba\xbb\x5c\xdd\xd9\x09\x82\x94\x6a\xab\xf3\x6e\x65\x53\x2c\x1d\x10\x24\x08\x81\x4c\xb3\xee\xd5\x5f\xea\x6b\xb7\x1b\x0b\x57\xdc\xd5\x35\x32\x0c\x3a\x7b\xeb\xaf\x6a\x6b\xf3\xd5\xed\x75\x75\x9f\x23\xbf\x0f\x27\x92\x33\x21\x3b\xb2\x54\x80\x3c\xe4\x18\x60\x08\x77\xc1\xf0\x10\x7a\xe8\xc2\x20\x4f\xa3\x99\x9a\x98\x99\x71\x24\x6f\x1a\xe3\xd4\x12\x28\x57\xd8\x3a\x89\x06\x1e\x8a\x81\xcf\x8c\x77\x63\xe4\xf7\x87\x0f\xb3\xe7\x7f\x3c\x72\xb8\xcb\xc7\x0d\x6a\x96\x1b\x20\x5c\x63\x28\x7c\xae\x0b\x62\xd0\x90\x5c\xb4\x38\xa1\x19\xfc\x03\x42\x1a\x79\x6f\xde\x2c\xe5\xc8\x71\xb3\x64\xe4\xac\xc9\x43\x36\xc9\x69\x8e\x36\xaa\xd9\xb4\x9b\xf4\xe4\xf3\xe4\xbc\x61\x5e\xcc\xd3\xdc\xb8\x14\x54\x31\xc8\x4f\xc1\xd4\xe4\x1c\x5e\xa3\x45\x84\x8a\x6c\x7c\x41\x37\x61\x04\x8a\xcd\x27\x53\x80\x22\x23\x07\x7b\xc2\xd1\x43\xbc\xf5\xc7\x48\x9e\xe7\x4e\xcf\xd6\xd7\xd6\xeb\x5b\x0f\xea\x5b\x2f\x82\xe4\x57\x9e\xfa\x14\x38\xf8\x9b\x5c\x55\x3c\x36\xfc\xda\x22\x9a\x42\x6c\x09\x5f\x7d\x8e\x19\x0c\xd0\xb5\x5e\x65\x99\xf5\x6d\x98\x6e\xfc\x6a\x0b\x33\x01\x44\xf9\x38\xb6\xdc\xcd\xd9\xc6\xf4\x4e\xed\xd6\x4a\xed\xce\x15\x1c\x55\xb5\x5b\x2b\x6c\x60\x45\x1a\x4f\x90\x62\xdb\xdd\xf9\x1e\xe1\x99\xdc\xcd\xd9\x20\xd3\x39\xf6\x66\x75\x7b\xdd\xdd\x5c\x8c\x37\x04\x93\xa7\xef\x3f\xa9\xaf\xdf\x0e\xe8\x03\xb9\x8f\x10\x03\xf5\xbe\x5a\x10\x69\xa6\x71\x0b\xfa\x0d\x07\x73\x80\xbe\xd3\x7a\x30\xe3\x28\xd5\xf2\xf9\xe6\x24\x36\xcc\xa3\xfc\xc0\xe3\xb4\xb3\xe1\x19\xea\x28\x8e\x4f\x7f\xd0\x76\x93\xd3\x26\xd1\x1c\x87\x16\x8a\x4e\x50\x41\x41\xcb\x51\x9f\x22\x44\xcb\xb6\xea\xc7\x7f\x09\xa1\xd8\x45\x4c\x03\x1f\xa5\x21\x47\x6d\xc7\x32\x27\x7d\x96\xc2\xd8\x37\x10\x12\xa4\x79\xdf\x34\xe9\xda\x4d\x7a\xc6\x1c\x6a\xb5\xae\x65\xd2\x2c\xc1\xea\xed\x87\x82\x5a\x25\xc3\xb7\xa6\xb1\xf3\x7d\x5a\xa6\x8c\x56\x72\x26\x32\xe8\xdf\x36\x9b\x1e\x72\x6d\xa0\x9d\x85\x62\x00\x10\x90\xcd\x53\xcd\x28\x49\x11\x5b\xd2\x4d\xde\x38\x4f\x7d\xba\x29\xdc\x62\xaa\xc2\x94\xf9\x8d\x27\xac\x7a\xaa\x72\xb4\xf9\x60\xaa\xc2\xcc\xc5\xa9\xca\x69\x8d\x6e\x7f\x5d\xff\xee\x69\x7d\x7a\xa3\xf6\xf3\x43\x59\xc3\xdf\xef\xdd\xe5\x31\xff\xeb\x8f\xf9\xb6\xc8\x76\xb8\xc5\xda\x83\x9f\xdc\x6f\xef\xc9\x4b\x2d\x60\x13\x78\xea\xbb\xdf\x03\xa2\x62\xac\x99\x51\xc9\xd5\xd7\xf3\xee\xdb\x85\xf7\x7b\x0b\xde\xcc\x1a\xee\xa0\xf5\xa7\xd3\xf8\x8e\x62\xbc\xb0\xd5\xb3\xf5\x80\xa9\xbe\xbd\xe6\xbe\x5c\xf0\x2a\x37\xbc\xed\xab\x8d\x95\xc7\x6d\x2f\x51\x00\x79\xe2\x50\xcb\xd0\x80\xb9\x30\xf2\x1d\xfe\x25\x36\x57\x04\x2e\xab\x51\xea\xcf\x47\x9a\xe3\x54\x4f\x78\x11\xce\xe3\x36\x9b\xa6\xbb\x58\x52\xcb\x3b\xd4\xa2\xb9\x6e\x02\xd0\x8e\x96\x5e\xd0\x2c\x00\x8e\x21\x59\xcd\x16\x16\xc2\x88\x92\x90\x32\x54\xcc\x03\x9e\x42\xd3\x14\x86\x4c\x4f\x9d\x4d\x9b\x02\xe4\x36\xb3\x99\x73\xe1\x08\xe1\x6e\x6d\xf2\x27\x7c\xad\x67\xb0\xdf\xdf\xec\x95\x05\x7f\x0f\x6f\x8e\x4e\xb2\xa5\x4d\x43\xb2\xbf\xe6\xf6\xc0\x72\x77\xe1\x08\x5c\x35\x83\x76\x17\x7e\x8f\xff\xee\x26\xe4\xdf\x69\xc8\xbf\x4d\x0a\xda\x79\x7f\xe5\xe1\xaf\x07\xc1\x39\xc0\x46\x52\x72\x38\x24\xe3\x45\xc3\x7f\x29\x5c\x0b\x8a\x16\xbd\x40\x0d\x87\x68\xb9\x1c\xe0\x5f\x6a\xf9\xb8\x0a\xa3\x14\x58\xf4\x91\x8b\xb8\x9b\x0c\x30\xcb\x41\xb5\x21\x14\xf4\x71\x4b\x83\x1d\x81\x57\x16\x32\xd3\x19\x39\xde\x9a\xac\x66\xa8\x57\xf6\xa4\xe5\xa8\x51\x5e\xf1\x6e\x6f\xc4\x26\x35\x04\xdd\x3c\x6b\x5c\x5e\xc3\x95\xea\xfd\xde\x5d\x9c\xa1\x49\x73\x93\x9b\x9b\xfc\x65\x00\x59\x8c\x6d\xe5\x18\x50\x81\xc9\xb5\x9c\x00\xf8\xce\x95\xea\xf6\x6e\xfd\xe9\x74\xed\xe6\x5a\xa3\x7c\xd3\xbb\xbd\x81\xe7\x4b\x98\xb0\xc2\xba\xf1\xf6\x5e\xed\xc5\x0b\x72\x04\xb2\xd8\x96\x5f\x7b\x0f\x2b\x1c\xc0\xc2\x0f\xca\x67\x4f\x7f\x1f\x3e\xe5\x01\x90\x9b\xb3\xac\xf8\x9b\xd5\xa0\xec\xbb\xf2\x82\xf4\x0a\x0f\xb1\x6d\x14\xcb\x2e\x5b\x47\x96\x96\xab\xbb\xdf\xd6\x66\x76\x42\xb9\x50\x2b\xc6\x7c\xdd\xb9\xd2\x5c\x88\x2d\x2c\x60\xe4\xb3\x65\x64\x73\x36\xd6\x0a\x04\x69\xc1\x60\x2e\x04\xa1\x6c\x7c\xbd\xda\x58\x9e\x0b\x5e\x6b\xa9\x45\x75\xf7\x49\xe3\xf6\x96\xb7\xfe\x08\x01\x4e\xf0\x30\x10\xac\x63\xb5\x67\xbb\xf5\x37\x91\xc5\x3f\x58\xca\xdc\xc5\x1f\xdd\xa5\x0d\xf7\xed\xbd\xe6\x65\x1c\x97\xf7\x50\x3d\x2c\xfe\xd5\x02\xea\x29\x5f\xad\x34\x8b\xed\xb4\x47\x49\xbf\x4f\x03\x36\xe1\x38\xc5\x28\x8c\x1d\x22\x12\xd3\xdc\x51\x22\xbc\x62\x47\xde\xb1\x39\x83\x5e\xc0\x85\xdf\xd6\x65\xc0\x87\x52\x42\x7a\x98\xf5\xa7\x0f\x22\x27\xbb\x95\xcd\x08\x53\x59\x50\x39\x06\x01\x1e\x25\x22\x47\x7f\xf4\x35\x5b\x78\x4f\x7a\xe8\xf5\x5b\x87\xe9\xd4\x00\x2b\x20\x32\x13\x1c\xb2\xa9\x73\x0e\x48\x14\xcf\x8d\x4e\x9e\xf3\x6f\xfe\x65\x77\x78\xa1\x21\x02\x57\x66\x98\x5b\x3d\xf7\xda\x2b\x3f\xf3\xfd\x1e\x12\x71\x6a\xdd\x30\x96\xdc\xd1\x74\x88\xa5\xce\x9b\x52\xe7\xbf\x5f\x3f\xc2\x2a\xa0\x03\x20\x06\x6c\x26\xa9\x4a\x37\x72\xe6\x45\x9b\xf0\x8b\x19\x72\x52\xce\x67\xe2\xbf\x1a\x9c\x9c\xd5\x12\x07\xcd\x8b\xd4\x82\xb3\x70\x7b\xa3\xce\xd2\x1d\x4a\xb2\x25\x2b\x4f\x46\xcd\x1c\xf0\x45\x1e\xef\x3f\xd9\x07\x8b\x39\xe7\xdd\xb6\x9d\x9c\x59\x92\xc5\x1e\xba\x9b\xb3\x58\xba\xba\xbd\xdb\xf8\xfe\xa6\xbb\xf1\xbd\x7b\xf5\x09\xba\xd3\x02\xe2\x6b\x6f\x6d\xc5\xdb\x59\xae\xef\x6d\xbb\xb3\x3b\x2a\x2d\x7c\xfa\x62\x20\xba\xb0\x7d\x20\x69\xf4\x23\xca\xab\x0f\xd2\x25\xb0\x6e\x74\xd3\xb5\xae\xe6\x7f\xea\x45\xa2\x59\xd9\x09\xfd\x02\x0d\x2f\x5f\xb8\x4f\x34\x45\xa0\xe4\x7f\xe9\x45\x52\xfd\xf5\x1b\x77\xfd\x36\x6b\xe0\xea\x73\x74\x3d\x26\x07\x4e\xfe\x35\x93\xd1\xf2\x79\xf3\x62\xa6\xa8\xe9\x01\x6d\x6a\x06\x37\xbf\xff\x4d\x32\x99\x9c\x6e\xcb\x9e\x7f\xd6\x5e\x26\xb2\xa2\xa6\xf6\x25\x19\x66\x10\x03\x0d\x01\xe6\x86\x99\xf1\x6f\x5e\xfc\xbf\xe1\x72\xc4\xff\x03\x30\x9e\xe0\x0f\x11\x7a\xf8\x33\xe9\xfa\x23\xa9\xf8\xd4\x99\x93\x23\xfd\x83\x3d\x43\x23\x1f\x1f\x1f\x18\x3a\x95\x39\xd6\x33\xd2\x43\x7a\x07\x4e\x8f\xf4\x9d\x1e\x21\x9f\xf4\x1f\x3b\xd6\x77\xfa\xb3\xf6\x04\x0e\x0e\xf5\x7f\xda\x33\xd2\x47\x40\x52\x47\x12\xc6\xf3\xe6\xa8\x96\xf7\xd1\x25\x3f\x0b\x0e\x63\x7f\xf5\x73\x3c\xec\xee\xee\xee\xcf\xc8\x5f\xfd\xdf\xfd\x17\xdb\xab\x65\x42\xcf\xe5\xa8\xd1\x5e\x21\x5c\x4d\x65\x93\x03\xd6\x45\xef\xc5\x17\xb2\xb2\x8e\x29\x8b\x83\x75\xe7\x6f\x55\xdf\xac\x4a\xd1\x31\x34\xe9\x2a\xe3\x5e\x5d\x6b\x5c\x96\x84\x6e\xc3\xd0\x94\xe7\xb4\xbe\x7c\x5d\x97\x39\x90\xa3\x4c\x31\x8a\xa4\x58\xb8\x0e\x95\xc8\x90\x26\xed\x26\xd3\x70\x6b\xc5\x22\xc9\x5a\x9a\x3d\x21\xd5\x3e\x12\xa2\x71\x63\xd1\xdb\x28\xcb\x25\x05\x3e\x37\xc0\x3c\x4a\x0d\x78\x84\xd8\x45\xc9\x62\xa5\xf1\x0e\x4d\x12\xa5\xb2\xd2\x88\x90\x14\x2e\x39\x01\x0a\x0e\x19\xd3\x74\x79\x0e\x33\x0f\x8d\x03\xc0\x1a\xf7\xf1\x0f\xde\xad\xaf\x5b\x4b\x0c\x39\x41\xe5\xdf\xbd\xd1\x8a\xd2\x53\x22\x0e\x4e\x3b\x47\xc3\x58\x37\x99\xd4\x26\x9b\x55\x2c\xd3\x5a\xb4\xbf\x7f\xc8\x2e\x59\xc5\xad\x42\x76\x4d\x3e\x3a\xe9\x50\x1b\xce\x67\x79\x53\x93\xdb\x90\xd5\x37\x8b\xee\xd5\xcb\xb5\x9f\xaf\xbc\xdf\xab\xb8\xaf\xb6\xaa\xdb\xf3\xf5\xbd\x39\x29\xae\x55\x76\x8c\x64\x32\x17\x94\xb7\x27\xf2\x82\x17\xda\x2d\xe1\x9f\xf1\xda\x2d\xc7\x23\x4d\x32\x6d\x16\x2c\x96\xda\x7b\x5f\x39\x8f\xdd\x57\x5b\xaa\xe9\x0b\x85\xe5\x20\xe7\xaa\xa2\x02\xf2\xac\xcc\xaa\x7c\xfe\xdc\xbb\x7d\x5d\x56\x9a\x99\xa5\x52\x7b\xf4\xbb\x1f\x6b\x3f\x6d\xa2\xc7\x4b\x52\x9e\xdb\x18\xd2\x86\xd7\x9e\x4e\x7b\xeb\x8f\xa4\x85\x65\x36\x51\xed\xdb\xe9\xda\x23\x49\xea\x05\x2b\x26\x8d\x37\x80\x72\xb2\x49\x00\xc6\x19\x2c\xf6\x6d\x7d\xda\x68\x40\xcd\x3e\x8a\x4a\x63\x71\x12\x23\x6e\x94\xf4\x73\x98\x36\xa4\x2a\xd8\x94\x52\xa4\xdb\x44\xf3\x81\x65\xf1\x95\x2e\x64\x77\x37\x88\x79\xd1\x08\x7e\x94\x42\x0e\xb5\x4e\x54\xf2\x6e\x6f\x60\x46\x12\x3e\x0f\x2c\x75\x77\xb3\xe2\xfe\xf0\x22\x60\xd9\x38\x6b\x04\x2c\x14\x67\x0d\x3f\xb8\x2b\x3b\x16\xf8\x06\x41\xad\x0c\x6a\x70\x88\x9d\xcc\x11\x04\x56\x90\x9c\xd0\x4f\x2d\x9b\x1b\x6d\x19\x6f\x6e\xb4\x0f\x3a\x68\xae\xd0\xb2\xb0\xb9\x51\x4d\x13\x9a\xdb\xd4\xce\x68\x67\xa9\xda\x69\x4b\xa7\x01\x94\x96\x4f\x83\x8b\xb2\xa1\x84\x1e\x96\xd6\xc5\xa8\x96\x9d\xe0\x71\x4b\xba\x41\x0e\x21\x00\xdd\xa1\x08\x5b\x0c\xfe\x78\x88\x14\x2d\xb3\x48\x2d\x29\xd0\x6d\x50\x36\x00\x4e\xf1\x36\x96\xdc\xf2\x3c\xfe\x89\x58\x72\x08\x84\x19\x48\x74\xaf\x3e\x73\x5f\xbe\x96\x28\x86\x98\xcd\x0a\xfb\x0d\x92\x7d\x65\x85\x81\x1f\x1b\xa2\x0b\x07\xb9\xda\x7e\xdc\xa2\x3d\x21\x92\x0c\x18\x25\xa9\x79\x2a\x32\x60\xb7\x94\x54\xdd\x5e\xf4\x66\xe7\xea\xdf\x6d\x79\xb7\x37\x6a\xdf\xed\xb8\x65\x49\x28\x02\x38\x4a\x65\xab\xc4\xce\xbc\xf4\x2c\x88\x26\x11\x71\x4a\x16\x72\x82\x8e\x8d\xb1\x03\xa8\x6d\xe6\x29\xa1\xd9\x09\x13\xdc\xd1\xc1\x1d\x3e\x35\x1c\x6b\x52\x48\x49\x3f\x16\x6e\x21\x52\xbb\x05\x07\x06\x5e\x9e\xb3\x23\xf7\xd5\x27\xe8\x9d\xf4\xae\x3f\x73\x97\x36\xf1\x8a\xd4\x5b\xe1\x16\x97\x54\x76\x6b\xdd\xf5\xbc\x8a\x5e\xc4\x7b\x7e\xd3\xbd\x21\x49\xfe\x1a\xb3\x28\x38\xa0\xd9\xb9\x54\x7a\x72\x58\xac\x6f\xed\x7a\x95\xe5\xea\xee\xed\xfa\xd6\x6e\x6b\x39\xcd\x51\xda\xba\x2d\x3b\xd8\xb6\x88\xe8\xbe\xbd\xd1\x86\x58\xff\xd0\x61\x53\xa9\xf3\xc3\xa7\xa8\x68\x8e\x1e\x6f\xa3\x1e\xa0\x7d\x45\x3a\xa6\xf4\x2d\x59\x7d\xce\xc9\x31\x66\x76\x24\x8b\x07\x3b\xbb\x4b\xb7\xb1\x5d\xef\x3b\xc9\x3e\x14\x1c\x4e\x0a\x2a\x1c\x60\x8e\x6d\xa4\x86\x02\x8e\x89\x52\x1e\x77\x62\x02\x55\x67\x1d\x5f\x2c\xd8\xe3\x3e\x12\x4a\xbf\x91\xa3\x9f\x5f\xba\xd4\x45\x2c\xaa\xd9\xa6\x81\xb4\x02\x9f\xeb\x4e\x64\x58\x77\xb1\xdd\xdd\x39\x67\x3b\x9a\x53\xb2\x83\x57\x86\xe1\x4f\xf9\x41\x00\x34\x6b\x55\x19\xdb\x09\xae\xdf\x77\xef\x3e\x68\x5d\xdb\xfb\xbd\x05\x65\x75\xca\xc6\x49\x0f\x3b\x8a\x83\x5b\x50\x56\x7a\xfe\xe0\x4d\x91\x15\x77\xe8\x78\x9b\xf4\x21\x9c\x8f\x8c\xe8\xc6\x04\xb5\x74\x07\x19\xe0\x74\x23\x08\xd1\x95\xd9\xab\x42\x2c\x2e\x26\x8b\xd4\x5e\xef\x79\x73\xbf\xf2\x6d\xe6\xca\x43\xef\x96\x24\xca\xde\xaf\xf0\x42\x10\x2c\xe7\xef\x0b\xbd\xc7\xcf\x0d\x8f\xf4\x9c\xe8\x3f\x7d\xe2\xdc\x48\xff\xa9\xbe\x81\x33\x23\xfe\xe2\x26\x47\x01\x11\x77\x83\xe6\xf2\x3c\x50\x0e\xd5\x11\x84\x75\xa4\xd8\xd0\xc8\x99\xc1\xfd\x28\x26\x96\x6f\x4b\x31\x15\x0f\x8d\x2a\x64\x3d\xaf\xd9\x4e\x78\x29\x2a\x1b\x51\x73\x8b\xde\x8b\x87\x78\x0b\xa6\x10\x53\x2a\xe2\x61\x56\x3a\x30\x51\x0c\xa4\x62\xc8\x86\x27\x07\x88\x96\xb5\x64\x75\xae\xb1\x22\x41\x8b\xc9\x9b\xd9\xf3\x2a\xab\x03\xa1\x47\x5a\x97\x55\xae\x82\x09\xeb\x1f\x96\x95\xb5\x39\x28\x2c\x6b\xb0\x62\xab\x55\x05\x5b\xb2\x62\xed\xa5\xa1\x18\xa6\x41\x46\x35\x5b\xcf\x26\x9d\xdc\x99\xc9\x7c\x7f\xc7\x5b\xe5\xd1\x10\x52\x69\x0a\xc4\x59\x59\x19\xf0\xfa\xeb\xb9\x20\x12\x98\xbb\x90\x38\x1e\x82\xfc\x38\xd6\x98\xfe\x0e\x11\x08\xbd\xb9\x72\x00\x7e\xac\xda\xdf\xe4\x98\x14\x98\x8a\x22\x2d\x25\xeb\x14\x65\x31\x76\x90\x91\x5e\x5d\xb0\xe3\x43\xeb\x72\xcc\x4c\xc2\xdb\x71\x59\xcb\xc1\x46\xc2\x6b\x4d\x85\x88\xe0\xb6\x7d\x6a\xaa\xfb\xb4\x69\xfc\x89\x7d\x64\x1e\xa6\x60\xf7\xa0\x3b\x40\x9e\xce\x80\x55\xc0\x97\x56\x16\x97\x54\x2f\xe5\x0b\x57\xc1\xe3\x28\x52\xe9\x95\x8d\x55\x74\x95\xb2\x9c\x69\x49\x0d\x92\xfb\x0f\x64\x65\x90\x1c\x54\xee\x98\x93\xde\x3f\x25\xd0\x7a\x61\xec\xac\xd4\xe9\x0e\xd9\xab\xb2\x99\x8d\x59\xa7\xb2\xa5\xc4\xa2\x45\x93\x53\x42\xb4\xe7\x5c\x0b\xa7\x21\xb3\x62\xa4\x96\xbf\x30\xf7\x6a\xf3\x65\xef\xaa\xc4\x40\x89\x49\x93\xb5\xa5\x59\x9c\xbc\x5d\x00\x85\x9d\x23\x9a\xe3\x58\xfa\x28\xe0\x44\xe7\x74\xfb\xfc\x39\xe8\xab\x43\x3e\x82\xbd\xac\xcf\x00\xa4\xde\xfd\xf5\x6a\xfd\xe9\xb4\xfb\xc3\x0b\xaf\xfc\x2c\x52\x3a\x7d\x95\x81\xe1\xd5\x49\x8d\x61\xe1\xf4\x15\xe2\xce\xd2\x49\x6d\xbc\x64\xfa\xaa\x20\x3f\xa9\x93\x9a\xb0\xa0\xac\x22\xb6\x32\xf9\x94\x47\x04\x02\xf2\x65\xf3\xe9\xd7\x6f\x6a\xb7\x56\xb8\xc3\x41\x36\x27\x93\xc5\xa4\x11\xa0\x2e\x2b\x29\x58\x32\x32\x8e\x26\x75\x8f\x4a\x0b\x19\xf2\xce\xe4\xa8\x87\xb2\x50\xf6\x54\xe8\x3b\xc9\xb8\x3b\x7c\x6b\x90\x9a\x53\xf2\x0d\x3e\x3d\x50\x4f\x4a\x88\x9e\xb4\x20\x30\x89\x60\x2f\x9d\xf0\x6b\xa8\x25\xc9\x09\x51\xc5\x60\x6d\xb5\x0c\xd5\x9e\x06\x42\x54\x3b\x54\x34\xfe\xb2\xad\x51\xc6\x8b\x9e\xc3\xa2\xe7\xc6\x4b\x7a\x8e\xf4\x9f\x6e\x2f\x0c\xc0\x97\xb1\x9f\xc2\xea\xaf\x20\x29\x0a\xde\x5e\xa9\xa7\x48\x0e\x0f\x66\xeb\xf2\x01\x54\x9f\x7d\xee\xbe\x95\x30\x91\xa8\xd2\x9a\x55\xa9\xc9\x02\xb0\x84\xdc\xc9\x2b\xe0\x42\xc8\x76\x32\x90\x93\x20\x41\x5a\xd6\x9e\x08\x78\xc6\x04\xbf\x55\x4e\xb7\x93\xdc\xad\xd3\xab\xb5\x9b\x6b\x84\x95\xc7\x1c\xb7\x8e\xe4\xb3\xf3\x3e\x76\x83\xa2\xa6\xd5\x35\x3f\x65\x6a\xbd\xa9\xd6\xf6\x9a\xc5\x9d\xc8\x70\x52\x38\x24\x02\x06\xc8\x82\xc5\xb0\xfa\xe8\xab\xe8\x68\xee\xb4\xe5\xbe\x0a\x41\xc3\x0f\x45\x01\x30\xd4\x9a\x60\x47\xc4\x8b\xb0\x8e\x89\x2b\x95\xae\x63\x82\xef\x30\x26\x0f\xe7\xf0\xbf\x75\x75\x7b\xbe\x5e\xbe\x5a\xbb\x73\x45\xa8\x25\xe5\xb0\xfa\x8d\x3f\xb7\xf0\x99\x93\xee\x0b\xf6\xd1\xa8\xa6\x2f\x99\xb2\x4d\x9d\x7d\x29\x76\xcc\x15\xbf\x96\x94\x78\x71\xf5\xf9\xbe\x3f\x97\xc0\x91\x99\x54\x55\xfb\x9d\xe8\xa8\x82\x1c\x20\x2d\x5d\x51\xd4\x72\x80\xb6\xa6\xbd\xad\x84\x15\x53\x98\x4c\x40\x01\x28\x37\x99\x14\x67\x17\xd5\x79\x05\x3d\xb7\x1d\x15\x34\x8b\xc5\x84\x95\x57\x7a\xdb\xce\x0b\x13\x0d\xb2\x80\x8e\x10\x8b\xe6\x74\x8b\x66\xa5\x07\xd5\xd5\x35\x72\x84\x78\x2f\x1e\xfa\xc1\xe4\xd7\xdd\x1b\x5f\x62\xb0\xb4\xaa\x16\x66\xb4\xb6\x77\x16\x44\x06\x1c\xcd\xa1\xed\x1b\xbc\x8a\xef\xed\xad\xcc\x48\x37\x57\x87\x13\x31\x66\x4d\xc3\xa0\x59\x48\x5c\x40\xc8\x0f\x70\x6c\x50\xab\x0b\x33\xd5\xc6\x43\xba\xaf\x09\xf9\x8d\xa9\xa4\x0a\xa0\x68\x53\x7a\xf9\x92\x39\x0f\x45\x21\xca\x5b\x0e\x51\x94\xea\x8a\x03\x6e\x90\x24\x47\xad\x87\xf7\xdc\x7b\x92\x61\x57\xd2\xda\xa3\x8a\x2f\x19\xe7\x0d\xf3\xa2\xe1\xd3\x46\x49\xaf\x81\xbd\x17\x5f\x34\x56\x6e\x54\xb7\x17\xa5\xe1\x29\x01\x7f\x9f\xdc\xf3\xa7\x6a\x6f\xc9\x92\x79\xa8\xa5\xb4\x6b\x25\x4b\x1a\x0d\xa3\x2c\x23\x5b\xb6\xce\x0c\x9d\x94\xad\x59\x25\x15\xb2\x0f\xa7\x43\x93\x16\x95\x1a\xed\x09\x04\x64\x25\x8e\x18\xc3\xb1\x5e\x52\x45\x40\xca\x25\x05\x88\x9b\x49\xca\x04\x18\x30\x72\x59\x6d\x53\xc5\x5f\xa0\xd6\xa8\x69\x23\xad\xb5\xcf\x39\x3d\x96\xd7\x64\x8b\xb9\x54\x48\x87\xb9\xff\x93\xf2\x13\x88\xec\x3e\x98\xb3\xb1\xf1\x94\x8a\x4b\x97\xc8\x47\x02\x5f\x36\xdc\xe4\x85\xec\x53\xc3\x8e\xa5\x1b\xe3\x97\x2e\xc9\x98\x2b\xe3\xb2\xde\xef\x55\x42\x26\x2b\x89\x2c\x69\x20\x1f\x1a\xb1\xfe\x3d\xe4\x49\x36\xe7\xd8\xe0\x48\x1b\x54\xda\xba\x78\x8c\x7f\x3f\x39\xda\x74\x6a\xaa\xfb\x4f\xba\xa1\x59\x3c\x6a\x42\x24\x12\x8f\x35\xa4\xad\x4f\x3c\x35\xd5\xdd\x7b\xdc\x07\xb0\x2b\xea\x1d\x97\x55\x61\x42\xc9\x4b\x9b\x25\xc3\x19\x18\xf3\xdd\xdb\x97\x2e\x05\xb9\x6b\x52\xe4\x91\x57\x5b\x98\xa5\x44\x5a\x15\x97\x46\x04\xb1\x97\x31\x04\xd1\x07\x16\x53\x47\x24\x36\xbf\x9f\x10\xa3\x38\x35\xd5\x7d\x4c\xb7\xcf\x03\x1e\xd9\xa5\x4b\xc4\x1c\x23\xfc\x17\x8e\x47\x28\xaf\x47\x28\xf6\x71\xac\x8c\xb4\x26\xf3\xa2\xe1\xeb\xa5\x08\x57\x92\x96\x6f\x8e\x3d\x39\x6b\x8c\xf4\x0f\x1e\x25\x01\x36\xda\x71\xbf\x4f\x05\x94\x34\x1f\xa7\x4c\xc8\x47\x87\xe4\x72\x4c\xe4\x14\x91\xca\x64\x1f\x4f\x52\x75\x9c\x4a\x59\xa2\xc0\xfb\xbd\x05\x84\x02\x41\x9a\xf9\x18\x88\x19\x47\xc8\x15\xd2\x97\x55\x83\x01\xae\x6e\xcf\x1a\x67\x1d\xf8\x7f\x6c\x7c\x00\xb6\x87\xd9\x5c\x7e\xda\x17\xb9\x38\x41\x31\x6d\xf3\x2c\x2b\x39\x58\xb2\x27\x02\x9d\xce\xfe\x0e\xce\x33\x40\xd9\xe7\x67\x51\x5e\xd4\x9d\x09\x1d\x0b\xa0\x09\xc9\xec\x13\x40\x07\xe0\x49\x2f\x76\xc0\xd2\xcd\x71\xa5\xb3\x66\x8e\x76\x9f\x35\xce\x1a\x7e\xf7\x07\x9a\x44\x7b\xdf\xa6\xb4\x25\xe8\x4f\x10\x02\x6d\x47\xa4\xb4\x06\xb8\x23\x39\x5a\x74\x26\x38\x75\x62\x80\x76\xa7\xfe\x62\x62\x57\xf9\x1f\xcb\x7d\x7b\x8f\xa3\x00\x89\xab\xd8\xf5\xfb\xee\xb3\xf9\xda\xa3\x3d\x84\x9a\x6b\x2c\x5c\x71\xaf\x3e\xe3\x99\xcf\x2d\x7b\xcf\x5b\x99\x79\xbf\xb7\x10\x24\xc3\x89\xb1\xda\x3c\x36\x50\x18\x14\x2d\xba\x85\x8d\x89\xfb\x4f\x6a\xab\xf3\x01\x62\x90\x28\x22\x40\x0c\xe2\xb2\x38\xb8\xd0\xab\x1f\xdc\xab\x4f\x30\x7f\x2c\x11\xc2\x2f\xcd\x20\xc2\xe1\x53\xda\x17\xae\xa0\x28\x2e\xe8\xe2\xfd\x63\x0d\x4e\x4d\x75\x1f\xc7\x8c\x3f\xb6\x28\x19\xf9\x49\x72\xd1\xb4\xce\xdb\xa4\x04\x14\xf1\xbd\xc7\x89\xb0\xc5\xb2\x15\xeb\x94\xf6\xb9\x5e\x28\x15\x02\x8e\xc7\x6e\x04\xb8\xe1\x41\xe2\xba\x4d\x62\x1c\x90\x8a\x71\x13\xd6\xeb\xad\x96\xdd\xc7\x77\xdc\xcb\x57\xab\x6f\xd8\xf9\xda\xad\x6c\xfa\x35\x73\x66\xc9\x16\x15\x73\x36\x79\x1f\xb1\xd0\xbb\xbd\x11\xaf\x5a\xf5\x65\xc2\xba\xf9\xed\x8a\xdd\xa2\xad\x43\xfc\xe2\x25\x90\xf8\xdf\x0f\xa4\xb5\x8d\xd5\x72\xfd\xe9\x74\x73\x0b\x9b\xab\xdb\x67\x1b\xf3\x98\xb8\x1e\xa0\x6e\x62\x06\xa5\x42\xc5\x58\x01\x55\xfe\x87\x10\x77\x85\xd4\xf4\xbe\xd9\xd2\x4e\x78\x99\x54\x48\x1b\x71\x67\x6c\x68\xd0\x42\x74\x5b\x3d\x45\x0b\x89\xbb\x6a\x58\xe8\xe3\x68\x09\x45\x2d\x82\x86\xe9\x5a\x17\x2d\xd3\x46\x7b\xc2\x52\xa7\x3a\xa9\xea\x54\x9b\x75\x0d\xeb\xff\xc5\x7a\xef\x73\x88\x48\x28\x15\xfc\x8f\x62\x0b\xdf\xb3\xbd\xd3\x0d\x48\xb6\xb1\x7f\xcf\x1a\xa7\x4d\x40\x32\x01\xfc\x1b\x01\x35\x45\x36\xf5\xfe\xd0\x7d\xb8\xfb\xf0\x7f\x6f\x0f\x8f\x9d\x55\x68\xe6\x68\x1e\x51\x80\x89\xff\xa7\x6f\xb7\xa6\x39\xa7\xa9\x45\x24\xe4\xb1\x4d\x4d\x75\x0f\xf8\x51\x59\x5c\x80\x32\xcf\xaa\xc5\xfb\x09\xd3\x2d\xfe\xba\x6e\x90\xa2\x65\x8e\x5b\xf2\x4c\xc3\x16\x85\x90\xe5\x4f\xea\x92\x6b\x51\xc2\x2e\x65\xb3\x94\xca\xcf\xa8\xcd\x45\x98\x21\x5c\xb9\xe1\x7e\x21\xb9\x57\x6c\x0a\xef\x0e\xd8\xd5\x35\x62\xc3\x01\x85\x98\x16\x44\x8b\x63\xd4\x9e\xbc\xde\x98\x98\x80\x44\xdd\x5d\xff\xba\xba\xbd\xe5\x55\x96\x55\xa1\xe2\x29\xd4\xd8\x57\xf5\x6d\x54\x9c\x3a\x4e\xbe\xb9\x68\xda\xc0\x78\xd8\x5e\xf0\x76\x1f\x00\x50\x07\x4d\xcb\x61\xb3\x3b\xf9\x8a\x5e\x56\x32\xe1\xea\xde\x47\x5a\xb5\xfd\xc5\x4f\x79\x97\xdf\xf4\x76\x90\xcd\x20\x97\x8e\xb7\xf5\xfe\x5e\x85\x0b\xff\x88\xe9\x68\x79\xff\xa7\x10\xf9\x44\x7d\xb3\xdf\x24\xec\xe3\xb8\x24\xb7\x3c\xcf\xb1\x42\xd4\x41\x00\x21\x8a\x7a\xd0\x90\x84\xdb\xd6\x16\x25\xd8\xb9\x5f\x71\x07\x8b\xc0\xb2\xe0\x76\xf7\xd5\x4b\x70\xc3\xb7\x28\xc1\x1a\xa4\x76\xce\x2b\xaa\x21\x1f\xb1\x13\x26\x66\xbe\x29\x1d\x2c\xaa\x5a\xe3\x42\x14\x4a\x38\xb1\xd5\xae\x3b\x38\x85\xb6\x38\x83\xf2\xeb\x47\xfe\x24\x7a\x3c\x42\x62\x91\x10\x51\x08\x2f\x12\x14\x36\x9b\x5f\x79\xb0\x6a\xbe\x2b\xcf\x08\xb6\x75\x8b\xea\xbd\xca\x72\xeb\xfa\xf1\x6c\xea\xdd\x7f\xc2\xb1\x69\xe0\x9a\x42\x65\xbd\x21\x39\x29\xbf\x32\xd2\x78\x1c\x66\xc9\xca\x77\x91\x22\x72\xdb\x73\xdf\x21\xd1\xf0\x57\xe0\xb5\x05\xdc\x8f\xa3\x1f\x7f\x3c\x69\x96\xac\x73\x16\x2d\x9a\xdd\x59\xb3\x20\x6f\x1f\xd6\x01\x1e\xe4\x0d\x04\x64\xad\xdd\xb9\x42\xce\x0c\x9d\xc4\x63\x04\x7a\x1d\xab\xdb\x65\xb7\x3c\xcf\x7f\x45\xca\x59\x49\x3d\xd2\xa6\x70\xe3\x8c\x99\x98\x70\xca\x71\x68\x0e\xed\x0e\xdf\xe6\xf0\x0d\x8e\xa6\xa9\xab\xd0\xbd\x6d\xa1\xc1\x2c\x06\x45\xff\x7f\x9f\xfd\xbf\x01\x00\x00\xff\xff\x6c\xa0\xf8\x3a\xa7\xa6\x03\x00") + +func cfI18nResourcesZhHantAllJsonBytes() ([]byte, error) { + return bindataRead( + _cfI18nResourcesZhHantAllJson, + "cf/i18n/resources/zh-hant.all.json", + ) +} + +func cfI18nResourcesZhHantAllJson() (*asset, error) { + bytes, err := cfI18nResourcesZhHantAllJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cf/i18n/resources/zh-hant.all.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "cf/i18n/resources/de-de.all.json": cfI18nResourcesDeDeAllJson, + "cf/i18n/resources/en-us.all.json": cfI18nResourcesEnUsAllJson, + "cf/i18n/resources/es-es.all.json": cfI18nResourcesEsEsAllJson, + "cf/i18n/resources/fr-fr.all.json": cfI18nResourcesFrFrAllJson, + "cf/i18n/resources/it-it.all.json": cfI18nResourcesItItAllJson, + "cf/i18n/resources/ja-jp.all.json": cfI18nResourcesJaJpAllJson, + "cf/i18n/resources/ko-kr.all.json": cfI18nResourcesKoKrAllJson, + "cf/i18n/resources/pt-br.all.json": cfI18nResourcesPtBrAllJson, + "cf/i18n/resources/zh-hans.all.json": cfI18nResourcesZhHansAllJson, + "cf/i18n/resources/zh-hant.all.json": cfI18nResourcesZhHantAllJson, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "cf": &bintree{nil, map[string]*bintree{ + "i18n": &bintree{nil, map[string]*bintree{ + "resources": &bintree{nil, map[string]*bintree{ + "de-de.all.json": &bintree{cfI18nResourcesDeDeAllJson, map[string]*bintree{}}, + "en-us.all.json": &bintree{cfI18nResourcesEnUsAllJson, map[string]*bintree{}}, + "es-es.all.json": &bintree{cfI18nResourcesEsEsAllJson, map[string]*bintree{}}, + "fr-fr.all.json": &bintree{cfI18nResourcesFrFrAllJson, map[string]*bintree{}}, + "it-it.all.json": &bintree{cfI18nResourcesItItAllJson, map[string]*bintree{}}, + "ja-jp.all.json": &bintree{cfI18nResourcesJaJpAllJson, map[string]*bintree{}}, + "ko-kr.all.json": &bintree{cfI18nResourcesKoKrAllJson, map[string]*bintree{}}, + "pt-br.all.json": &bintree{cfI18nResourcesPtBrAllJson, map[string]*bintree{}}, + "zh-hans.all.json": &bintree{cfI18nResourcesZhHansAllJson, map[string]*bintree{}}, + "zh-hant.all.json": &bintree{cfI18nResourcesZhHantAllJson, map[string]*bintree{}}, + }}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/terminal/color.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/color.go new file mode 100644 index 0000000..13edb8b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/color.go @@ -0,0 +1,144 @@ +package terminal + +import ( + "os" + "regexp" + + "github.com/fatih/color" + "golang.org/x/crypto/ssh/terminal" +) + +const ( + red color.Attribute = color.FgRed + green = color.FgGreen + yellow = color.FgYellow + magenta = color.FgMagenta + cyan = color.FgCyan + grey = color.FgWhite + defaultFgColor = 38 +) + +var ( + colorize func(message string, textColor color.Attribute, bold int) string + TerminalSupportsColors = isTerminal() + UserAskedForColors = "" +) + +func init() { + InitColorSupport() +} + +func InitColorSupport() { + if colorsEnabled() { + colorize = func(message string, textColor color.Attribute, bold int) string { + colorPrinter := color.New(textColor) + if bold == 1 { + colorPrinter = colorPrinter.Add(color.Bold) + } + f := colorPrinter.SprintFunc() + return f(message) + } + } else { + colorize = func(message string, _ color.Attribute, _ int) string { + return message + } + } +} + +func colorsEnabled() bool { + if os.Getenv("CF_COLOR") == "true" { + return true + } + + if os.Getenv("CF_COLOR") == "false" { + return false + } + + if UserAskedForColors == "true" { + return true + } + + return UserAskedForColors != "false" && TerminalSupportsColors +} + +func Colorize(message string, textColor color.Attribute) string { + return colorize(message, textColor, 0) +} + +func ColorizeBold(message string, textColor color.Attribute) string { + return colorize(message, textColor, 1) +} + +var decolorizerRegex = regexp.MustCompile(`\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]`) + +func Decolorize(message string) string { + return string(decolorizerRegex.ReplaceAll([]byte(message), []byte(""))) +} + +func HeaderColor(message string) string { + return ColorizeBold(message, defaultFgColor) +} + +func CommandColor(message string) string { + return ColorizeBold(message, yellow) +} + +func StoppedColor(message string) string { + return ColorizeBold(message, grey) +} + +func AdvisoryColor(message string) string { + return ColorizeBold(message, yellow) +} + +func CrashedColor(message string) string { + return ColorizeBold(message, red) +} + +func FailureColor(message string) string { + return ColorizeBold(message, red) +} + +func SuccessColor(message string) string { + return ColorizeBold(message, green) +} + +func EntityNameColor(message string) string { + return ColorizeBold(message, cyan) +} + +func PromptColor(message string) string { + return ColorizeBold(message, cyan) +} + +func TableContentHeaderColor(message string) string { + return ColorizeBold(message, cyan) +} + +func WarningColor(message string) string { + return ColorizeBold(message, magenta) +} + +func LogStdoutColor(message string) string { + return message +} + +func LogStderrColor(message string) string { + return Colorize(message, red) +} + +func LogHealthHeaderColor(message string) string { + return Colorize(message, grey) +} + +func LogAppHeaderColor(message string) string { + return ColorizeBold(message, yellow) +} + +func LogSysHeaderColor(message string) string { + return ColorizeBold(message, cyan) +} + +func isTerminal() bool { + return terminal.IsTerminal(int(os.Stdout.Fd())) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/terminal/debug_printer.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/debug_printer.go new file mode 100644 index 0000000..f71506e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/debug_printer.go @@ -0,0 +1,16 @@ +package terminal + +import ( + "time" + + . "code.cloudfoundry.org/cli/cf/i18n" + "code.cloudfoundry.org/cli/cf/trace" +) + +type DebugPrinter struct { + Logger trace.Printer +} + +func (p DebugPrinter) Print(title, dump string) { + p.Logger.Printf("\n%s [%s]\n%s\n", HeaderColor(T(title)), time.Now().Format(time.RFC3339), trace.Sanitize(dump)) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/terminal/table.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/table.go new file mode 100644 index 0000000..aefea03 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/table.go @@ -0,0 +1,369 @@ +package terminal + +import ( + "bytes" + "fmt" + "io" + "strings" +) + +// PrintableTable is an implementation of the Table interface. It +// remembers the headers, the added rows, the column widths, and a +// number of other things. +type Table struct { + ui UI + headers []string + headerPrinted bool + columnWidth []int + rowHeight []int + rows [][]string + colSpacing string + transformer []Transformer +} + +// Transformer is the type of functions used to modify the content of +// a table cell for actual display. For multi-line content of a cell +// the transformation is applied to each individual line. +type Transformer func(s string) string + +// NewTable is the constructor function creating a new printable table +// from a list of headers. The table is also connected to a UI, which +// is where it will print itself to on demand. +func NewTable(headers []string) *Table { + pt := &Table{ + headers: headers, + columnWidth: make([]int, len(headers)), + colSpacing: " ", + transformer: make([]Transformer, len(headers)), + } + // Standard colorization, column 0 is auto-highlighted as some + // name. Everything else has no transformation (== identity + // transform) + for i := range pt.transformer { + pt.transformer[i] = nop + } + if 0 < len(headers) { + pt.transformer[0] = TableContentHeaderColor + } + return pt +} + +// NoHeaders disables the printing of the header row for the specified +// table. +func (t *Table) NoHeaders() { + // Fake the Print() code into the belief that the headers have + // been printed already. + t.headerPrinted = true +} + +// SetTransformer specifies a string transformer to apply to the +// content of the given column in the specified table. +func (t *Table) SetTransformer(columnIndex int, tr Transformer) { + t.transformer[columnIndex] = tr +} + +// Add extends the table by another row. +func (t *Table) Add(row ...string) { + t.rows = append(t.rows, row) +} + +// PrintTo is the core functionality for printing the table, placing +// the formatted table into the writer given to it as argument. The +// exported Print() is just a wrapper around this which redirects the +// result into CF datastructures. +func (t *Table) PrintTo(result io.Writer) error { + t.rowHeight = make([]int, len(t.rows)+1) + + rowIndex := 0 + if !t.headerPrinted { + // row transformer header row + err := t.calculateMaxSize(transHeader, rowIndex, t.headers) + if err != nil { + return err + } + rowIndex++ + } + + for _, row := range t.rows { + // table is row transformer itself, for content rows + err := t.calculateMaxSize(t, rowIndex, row) + if err != nil { + return err + } + rowIndex++ + } + + rowIndex = 0 + if !t.headerPrinted { + err := t.printRow(result, transHeader, rowIndex, t.headers) + if err != nil { + return err + } + t.headerPrinted = true + rowIndex++ + } + + for row := range t.rows { + err := t.printRow(result, t, rowIndex, t.rows[row]) + if err != nil { + return err + } + rowIndex++ + } + + // Note, printing a table clears it. + t.rows = [][]string{} + return nil +} + +// calculateMaxSize iterates over the collected rows of the specified +// table, and their strings, determining the height of each row (in +// lines), and the width of each column (in characters). The results +// are stored in the table for use by Print. +func (t *Table) calculateMaxSize(transformer rowTransformer, rowIndex int, row []string) error { + + // Iterate columns + for columnIndex := range row { + // Truncate long row, ignore the additional fields. + if columnIndex >= len(t.headers) { + break + } + + // Note that the length of the cell in characters is + // __not__ equivalent to its width. Because it may be + // a multi-line value. We have to split the cell into + // lines and check the width of each such fragment. + // The number of lines founds also goes into the row + // height. + + lines := strings.Split(row[columnIndex], "\n") + height := len(lines) + + if t.rowHeight[rowIndex] < height { + t.rowHeight[rowIndex] = height + } + + for i := range lines { + // (**) See also 'printCellValue' (pCV). Here + // and there we have to apply identical + // transformations to the cell value to get + // matching cell width information. If they do + // not match then pCV may compute a cell width + // larger than the max width found here, a + // negative padding length from that, and + // subsequently return an error. What + // was further missing is trimming before + // entering the user-transform. Especially + // with color transforms any trailing space + // going in will not be removable for print. + // + // This happened for + // https://www.pivotaltracker.com/n/projects/892938/stories/117404629 + + value := trim(Decolorize(transformer.Transform(columnIndex, trim(lines[i])))) + width, err := visibleSize(value) + if err != nil { + return err + } + if t.columnWidth[columnIndex] < width { + t.columnWidth[columnIndex] = width + } + } + } + return nil +} + +// printRow is responsible for the layouting, transforming and +// printing of the string in a single row +func (t *Table) printRow(result io.Writer, transformer rowTransformer, rowIndex int, row []string) error { + + height := t.rowHeight[rowIndex] + + // Compute the index of the last column as the min number of + // cells in the header and cells in the current row. + // Note: math.Min seems to be for float only :( + last := len(t.headers) - 1 + lastr := len(row) - 1 + if lastr < last { + last = lastr + } + + // Note how we always print into a line buffer before placing + // the assembled line into the result. This allows us to trim + // superfluous trailing whitespace from the line before making + // it final. + + if height <= 1 { + // Easy case, all cells in the row are single-line + line := &bytes.Buffer{} + + for columnIndex := range row { + // Truncate long row, ignore the additional fields. + if columnIndex >= len(t.headers) { + break + } + + err := t.printCellValue(line, transformer, columnIndex, last, row[columnIndex]) + if err != nil { + return err + } + } + + fmt.Fprintf(result, "%s\n", trim(string(line.Bytes()))) + return nil + } + + // We have at least one multi-line cell in this row. + // Treat it a bit like a mini-table. + + // Step I. Fill the mini-table. Note how it is stored + // column-major, not row-major. + + // [column][row]string + sub := make([][]string, len(t.headers)) + for columnIndex := range row { + // Truncate long row, ignore the additional fields. + if columnIndex >= len(t.headers) { + break + } + sub[columnIndex] = strings.Split(row[columnIndex], "\n") + // (*) Extend the column to the full height. + for len(sub[columnIndex]) < height { + sub[columnIndex] = append(sub[columnIndex], "") + } + } + + // Step II. Iterate over the rows, then columns to + // collect the output. This assumes that all + // the rows in sub are the same height. See + // (*) above where that is made true. + + for rowIndex := range sub[0] { + line := &bytes.Buffer{} + + for columnIndex := range sub { + err := t.printCellValue(line, transformer, columnIndex, last, sub[columnIndex][rowIndex]) + if err != nil { + return err + } + } + + fmt.Fprintf(result, "%s\n", trim(string(line.Bytes()))) + } + return nil +} + +// printCellValue pads the specified string to the width of the given +// column, adds the spacing bewtween columns, and returns the result. +func (t *Table) printCellValue(result io.Writer, transformer rowTransformer, col, last int, value string) error { + value = trim(transformer.Transform(col, trim(value))) + fmt.Fprint(result, value) + + // Pad all columns, but the last in this row (with the size of + // the header row limiting this). This ensures that most of + // the irrelevant spacing is not printed. At the moment + // irrelevant spacing can only occur when printing a row with + // multi-line cells, introducing a physical short line for a + // long logical row. Getting rid of that requires fixing in + // printRow. + // + // Note how the inter-column spacing is also irrelevant for + // that last column. + + if col < last { + // (**) See also 'calculateMaxSize' (cMS). Here and + // there we have to apply identical transformations to + // the cell value to get matching cell width + // information. If they do not match then we may here + // compute a cell width larger than the max width + // found by cMS, derive a negative padding length from + // that, and subsequently return an error. What was + // further missing is trimming before entering the + // user-transform. Especially with color transforms + // any trailing space going in will not be removable + // for print. + // + // This happened for + // https://www.pivotaltracker.com/n/projects/892938/stories/117404629 + + decolorizedLength, err := visibleSize(trim(Decolorize(value))) + if err != nil { + return err + } + padlen := t.columnWidth[col] - decolorizedLength + padding := strings.Repeat(" ", padlen) + fmt.Fprint(result, padding) + fmt.Fprint(result, t.colSpacing) + } + return nil +} + +// rowTransformer is an interface behind which we can specify how to +// transform the strings of an entire row on a column-by-column basis. +type rowTransformer interface { + Transform(column int, s string) string +} + +// transformHeader is an implementation of rowTransformer which +// highlights all columns as a Header. +type transformHeader struct{} + +// transHeader holds a package-global transformHeader to prevent us +// from continuously allocating a literal of the type whenever we +// print a header row. Instead all tables use this value. +var transHeader = &transformHeader{} + +// Transform performs the Header highlighting for transformHeader +func (th *transformHeader) Transform(column int, s string) string { + return HeaderColor(s) +} + +// Transform makes a PrintableTable an implementation of +// rowTransformer. It performs the per-column transformation for table +// content, as specified during construction and/or overridden by the +// user of the table, see SetTransformer. +func (t *Table) Transform(column int, s string) string { + return t.transformer[column](s) +} + +// nop is the identity transformation which does not transform the +// string at all. +func nop(s string) string { + return s +} + +// trim is a helper to remove trailing whitespace from a string. +func trim(s string) string { + return strings.TrimRight(s, " \t") +} + +// visibleSize returns the number of columns the string will cover +// when displayed in the terminal. This is the number of runes, +// i.e. characters, not the number of bytes it consists of. +func visibleSize(s string) (int, error) { + // This code re-implements the basic functionality of + // RuneCountInString to account for special cases. Namely + // UTF-8 characters taking up 3 bytes (**) appear as double-width. + // + // (**) I wonder if that is the set of characters outside of + // the BMP <=> the set of characters requiring surrogates (2 + // slots) when encoded in UCS-2. + + r := strings.NewReader(s) + + var size int + for range s { + _, runeSize, err := r.ReadRune() + if err != nil { + return -1, fmt.Errorf("error when calculating visible size of: %s", s) + } + + if runeSize == 3 { + size += 2 // Kanji and Katakana characters appear as double-width + } else { + size++ + } + } + + return size, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/terminal/tee_printer.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/tee_printer.go new file mode 100644 index 0000000..ab3e003 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/tee_printer.go @@ -0,0 +1,63 @@ +package terminal + +import ( + "fmt" + "io" + "io/ioutil" +) + +type TeePrinter struct { + disableTerminalOutput bool + outputBucket io.Writer + stdout io.Writer +} + +func NewTeePrinter(w io.Writer) *TeePrinter { + return &TeePrinter{ + outputBucket: ioutil.Discard, + stdout: w, + } +} + +func (t *TeePrinter) SetOutputBucket(bucket io.Writer) { + if bucket == nil { + bucket = ioutil.Discard + } + + t.outputBucket = bucket +} + +func (t *TeePrinter) Print(values ...interface{}) (int, error) { + str := fmt.Sprint(values...) + t.saveOutputToBucket(str) + if !t.disableTerminalOutput { + return fmt.Fprint(t.stdout, str) + } + return 0, nil +} + +func (t *TeePrinter) Printf(format string, a ...interface{}) (int, error) { + str := fmt.Sprintf(format, a...) + t.saveOutputToBucket(str) + if !t.disableTerminalOutput { + return fmt.Fprint(t.stdout, str) + } + return 0, nil +} + +func (t *TeePrinter) Println(values ...interface{}) (int, error) { + str := fmt.Sprint(values...) + t.saveOutputToBucket(str) + if !t.disableTerminalOutput { + return fmt.Fprintln(t.stdout, str) + } + return 0, nil +} + +func (t *TeePrinter) DisableTerminalOutput(disable bool) { + t.disableTerminalOutput = disable +} + +func (t *TeePrinter) saveOutputToBucket(output string) { + _, _ = t.outputBucket.Write([]byte(Decolorize(output))) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/terminal/ui.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/ui.go new file mode 100644 index 0000000..159b720 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/ui.go @@ -0,0 +1,312 @@ +package terminal + +import ( + "fmt" + "io" + "strings" + + . "code.cloudfoundry.org/cli/cf/i18n" + + "bytes" + + "bufio" + + "code.cloudfoundry.org/cli/cf" + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/trace" +) + +type ColoringFunction func(value string, row int, col int) string + +func NotLoggedInText() string { + return fmt.Sprintf(T("Not logged in. Use '{{.CFLoginCommand}}' to log in.", map[string]interface{}{"CFLoginCommand": CommandColor(cf.Name + " " + "login")})) +} + +//go:generate counterfeiter . UI +type UI interface { + PrintPaginator(rows []string, err error) + Say(message string, args ...interface{}) + + // ProgressReader + PrintCapturingNoOutput(message string, args ...interface{}) + Warn(message string, args ...interface{}) + Ask(prompt string) (answer string) + AskForPassword(prompt string) (answer string) + Confirm(message string) bool + ConfirmDelete(modelType, modelName string) bool + ConfirmDeleteWithAssociations(modelType, modelName string) bool + Ok() + Failed(message string, args ...interface{}) + ShowConfiguration(coreconfig.Reader) error + LoadingIndication() + Table(headers []string) *UITable + NotifyUpdateIfNeeded(coreconfig.Reader) + + Writer() io.Writer +} + +type Printer interface { + Print(a ...interface{}) (n int, err error) + Printf(format string, a ...interface{}) (n int, err error) + Println(a ...interface{}) (n int, err error) +} + +type terminalUI struct { + stdin io.Reader + stdout io.Writer + printer Printer + logger trace.Printer +} + +func NewUI(r io.Reader, w io.Writer, printer Printer, logger trace.Printer) UI { + return &terminalUI{ + stdin: r, + stdout: w, + printer: printer, + logger: logger, + } +} + +func (ui terminalUI) Writer() io.Writer { + return ui.stdout +} + +func (ui *terminalUI) PrintPaginator(rows []string, err error) { + if err != nil { + ui.Failed(err.Error()) + return + } + + for _, row := range rows { + ui.Say(row) + } +} + +func (ui *terminalUI) PrintCapturingNoOutput(message string, args ...interface{}) { + if len(args) == 0 { + fmt.Fprintf(ui.stdout, "%s", message) + } else { + fmt.Fprintf(ui.stdout, message, args...) + } +} + +func (ui *terminalUI) Say(message string, args ...interface{}) { + if len(args) == 0 { + _, _ = ui.printer.Printf("%s\n", message) + } else { + _, _ = ui.printer.Printf(message+"\n", args...) + } +} + +func (ui *terminalUI) Warn(message string, args ...interface{}) { + message = fmt.Sprintf(message, args...) + ui.Say(WarningColor(message)) + return +} + +func (ui *terminalUI) Ask(prompt string) string { + fmt.Fprintf(ui.stdout, "\n%s%s ", prompt, PromptColor(">")) + + rd := bufio.NewReader(ui.stdin) + line, err := rd.ReadString('\n') + if err == nil { + return strings.TrimSpace(line) + } + return "" +} + +func (ui *terminalUI) ConfirmDeleteWithAssociations(modelType, modelName string) bool { + return ui.confirmDelete(T("Really delete the {{.ModelType}} {{.ModelName}} and everything associated with it?", + map[string]interface{}{ + "ModelType": modelType, + "ModelName": EntityNameColor(modelName), + })) +} + +func (ui *terminalUI) ConfirmDelete(modelType, modelName string) bool { + return ui.confirmDelete(T("Really delete the {{.ModelType}} {{.ModelName}}?", + map[string]interface{}{ + "ModelType": modelType, + "ModelName": EntityNameColor(modelName), + })) +} + +func (ui *terminalUI) confirmDelete(message string) bool { + result := ui.Confirm(message) + + if !result { + ui.Warn(T("Delete cancelled")) + } + + return result +} + +func (ui *terminalUI) Confirm(message string) bool { + response := ui.Ask(message) + switch strings.ToLower(response) { + case "y", "yes", T("yes"): + return true + } + return false +} + +func (ui *terminalUI) Ok() { + ui.Say(SuccessColor(T("OK"))) +} + +func (ui *terminalUI) Failed(message string, args ...interface{}) { + message = fmt.Sprintf(message, args...) + + failed := "FAILED" + if T != nil { + failed = T("FAILED") + } + + ui.logger.Print(failed) + ui.logger.Print(message) + + if !ui.logger.WritesToConsole() { + ui.Say(FailureColor(failed)) + ui.Say(message) + } +} + +func (ui *terminalUI) ShowConfiguration(config coreconfig.Reader) error { + var err error + table := ui.Table([]string{"", ""}) + + if config.HasAPIEndpoint() { + table.Add( + T("API endpoint:"), + T("{{.APIEndpoint}} (API version: {{.APIVersionString}})", + map[string]interface{}{ + "APIEndpoint": EntityNameColor(config.APIEndpoint()), + "APIVersionString": EntityNameColor(config.APIVersion()), + }), + ) + } + + if !config.IsLoggedIn() { + err = table.Print() + if err != nil { + return err + } + ui.Say(NotLoggedInText()) + return nil + } + + table.Add(T("User:"), EntityNameColor(config.UserEmail())) + + if !config.HasOrganization() && !config.HasSpace() { + err = table.Print() + if err != nil { + return err + } + command := fmt.Sprintf("%s target -o ORG -s SPACE", cf.Name) + ui.Say(T("No org or space targeted, use '{{.CFTargetCommand}}'", + map[string]interface{}{ + "CFTargetCommand": CommandColor(command), + })) + return nil + } + + if config.HasOrganization() { + table.Add( + T("Org:"), + EntityNameColor(config.OrganizationFields().Name), + ) + } else { + command := fmt.Sprintf("%s target -o Org", cf.Name) + table.Add( + T("Org:"), + T("No org targeted, use '{{.CFTargetCommand}}'", + map[string]interface{}{ + "CFTargetCommand": CommandColor(command), + }), + ) + } + + if config.HasSpace() { + table.Add( + T("Space:"), + EntityNameColor(config.SpaceFields().Name), + ) + } else { + command := fmt.Sprintf("%s target -s SPACE", cf.Name) + table.Add( + T("Space:"), + T("No space targeted, use '{{.CFTargetCommand}}'", map[string]interface{}{"CFTargetCommand": CommandColor(command)}), + ) + } + + err = table.Print() + if err != nil { + return err + } + return nil +} + +func (ui *terminalUI) LoadingIndication() { + _, _ = ui.printer.Print(".") +} + +func (ui *terminalUI) Table(headers []string) *UITable { + return &UITable{ + UI: ui, + Table: NewTable(headers), + } +} + +type UITable struct { + UI UI + Table *Table +} + +func (u *UITable) Add(row ...string) { + u.Table.Add(row...) +} + +// Print formats the table and then prints it to the UI specified at +// the time of the construction. Afterwards the table is cleared, +// becoming ready for another round of rows and printing. +func (u *UITable) Print() error { + result := &bytes.Buffer{} + t := u.Table + + err := t.PrintTo(result) + if err != nil { + return err + } + + // DevNote. With the change to printing into a buffer all + // lines now come with a terminating \n. The t.ui.Say() below + // will then add another \n to that. To avoid this additional + // line we chop off the last \n from the output (if there is + // any). Operating on the slice avoids string copying. + // + // WIBNI if the terminal API had a variant of Say not assuming + // that each output is a single line. + + r := result.Bytes() + if len(r) > 0 { + r = r[0 : len(r)-1] + } + + // Only generate output for a non-empty table. + if len(r) > 0 { + u.UI.Say("%s", string(r)) + } + return nil +} + +func (ui *terminalUI) NotifyUpdateIfNeeded(config coreconfig.Reader) { + if !config.IsMinCLIVersion(config.CLIVersion()) { + ui.Say("") + ui.Say(T("Cloud Foundry API version {{.APIVer}} requires CLI version {{.CLIMin}}. You are currently on version {{.CLIVer}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads", + map[string]interface{}{ + "APIVer": config.APIVersion(), + "CLIMin": config.MinCLIVersion(), + "CLIVer": config.CLIVersion(), + })) + } +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_unix.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/ui_unix.go similarity index 76% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_unix.go rename to vendor/code.cloudfoundry.org/cli/cf/terminal/ui_unix.go index aae69e9..e579321 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_unix.go +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/ui_unix.go @@ -1,38 +1,38 @@ // Copied from https://code.google.com/p/gopass/ -// +build darwin freebsd linux netbsd openbsd +// +build !windows package terminal import ( "bufio" "fmt" - . "github.com/cloudfoundry/cli/cf/i18n" "os" "os/signal" "strings" "syscall" + + . "code.cloudfoundry.org/cli/cf/i18n" ) const ( - sttyArg0 = "/bin/stty" - exec_cwdir = "" + sttyArg0 = "/bin/stty" + execCWDir = "" ) // Tells the terminal to turn echo off. -var sttyArgvEOff []string = []string{"stty", "-echo"} +var sttyArgvEOff = []string{"stty", "-echo"} // Tells the terminal to turn echo on. -var sttyArgvEOn []string = []string{"stty", "echo"} +var sttyArgvEOn = []string{"stty", "echo"} -var ws syscall.WaitStatus = 0 +var ws syscall.WaitStatus -func (ui terminalUI) AskForPassword(prompt string, args ...interface{}) (passwd string) { +func (ui terminalUI) AskForPassword(prompt string) (passwd string) { sig := make(chan os.Signal, 10) // Display the prompt. - fmt.Println("") - fmt.Printf(prompt+PromptColor(">")+" ", args...) + fmt.Printf("\n%s%s ", prompt, PromptColor(">")) // File descriptors for stdin, stdout, and stderr. fd := []uintptr{os.Stdin.Fd(), os.Stdout.Fd(), os.Stderr.Fd()} @@ -61,7 +61,7 @@ func (ui terminalUI) AskForPassword(prompt string, args ...interface{}) (passwd func readPassword(pid int) string { rd := bufio.NewReader(os.Stdin) - syscall.Wait4(pid, &ws, 0, nil) + _, _ = syscall.Wait4(pid, &ws, 0, nil) line, err := rd.ReadString('\n') if err == nil { @@ -71,7 +71,7 @@ func readPassword(pid int) string { } func echoOff(fd []uintptr) (int, error) { - pid, err := syscall.ForkExec(sttyArg0, sttyArgvEOff, &syscall.ProcAttr{Dir: exec_cwdir, Files: fd}) + pid, err := syscall.ForkExec(sttyArg0, sttyArgvEOff, &syscall.ProcAttr{Dir: execCWDir, Files: fd}) if err != nil { return 0, fmt.Errorf(T("failed turning off console echo for password entry:\n{{.ErrorDescription}}", map[string]interface{}{"ErrorDescription": err})) @@ -83,10 +83,10 @@ func echoOff(fd []uintptr) (int, error) { // echoOn turns back on the terminal echo. func echoOn(fd []uintptr) { // Turn on the terminal echo. - pid, e := syscall.ForkExec(sttyArg0, sttyArgvEOn, &syscall.ProcAttr{Dir: exec_cwdir, Files: fd}) + pid, e := syscall.ForkExec(sttyArg0, sttyArgvEOn, &syscall.ProcAttr{Dir: execCWDir, Files: fd}) if e == nil { - syscall.Wait4(pid, &ws, 0, nil) + _, _ = syscall.Wait4(pid, &ws, 0, nil) } } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_windows.go b/vendor/code.cloudfoundry.org/cli/cf/terminal/ui_windows.go similarity index 87% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_windows.go rename to vendor/code.cloudfoundry.org/cli/cf/terminal/ui_windows.go index d18ea67..d964e5c 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/cf/terminal/ui_windows.go +++ b/vendor/code.cloudfoundry.org/cli/cf/terminal/ui_windows.go @@ -11,7 +11,7 @@ import ( // http://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx const ENABLE_ECHO_INPUT = 0x0004 -func (ui terminalUI) AskForPassword(prompt string, args ...interface{}) (passwd string) { +func (ui terminalUI) AskForPassword(prompt string) (passwd string) { hStdin := syscall.Handle(os.Stdin.Fd()) var originalMode uint32 @@ -30,7 +30,7 @@ func (ui terminalUI) AskForPassword(prompt string, args ...interface{}) (passwd return } - return ui.Ask(prompt, args...) + return ui.Ask(prompt) } func setConsoleMode(console syscall.Handle, mode uint32) (err error) { diff --git a/vendor/code.cloudfoundry.org/cli/cf/trace/combined_printer.go b/vendor/code.cloudfoundry.org/cli/cf/trace/combined_printer.go new file mode 100644 index 0000000..9af91f8 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/trace/combined_printer.go @@ -0,0 +1,35 @@ +package trace + +type combinedPrinter []Printer + +func CombinePrinters(printers []Printer) Printer { + return combinedPrinter(printers) +} + +func (p combinedPrinter) Print(v ...interface{}) { + for _, printer := range p { + printer.Print(v...) + } +} + +func (p combinedPrinter) Printf(format string, v ...interface{}) { + for _, printer := range p { + printer.Printf(format, v...) + } +} + +func (p combinedPrinter) Println(v ...interface{}) { + for _, printer := range p { + printer.Println(v...) + } +} + +func (p combinedPrinter) WritesToConsole() bool { + for _, printer := range p { + if printer.WritesToConsole() { + return true + } + } + + return false +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/trace/logger_provider.go b/vendor/code.cloudfoundry.org/cli/cf/trace/logger_provider.go new file mode 100644 index 0000000..0906023 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/trace/logger_provider.go @@ -0,0 +1,46 @@ +package trace + +import ( + "io" + "os" + "path/filepath" + "strconv" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +func NewLogger(writer io.Writer, verbose bool, cfTrace, configTrace string) Printer { + LoggingToStdout = verbose + + var printers []Printer + + stdoutLogger := NewWriterPrinter(writer, true) + + for _, path := range []string{cfTrace, configTrace} { + b, err := strconv.ParseBool(path) + LoggingToStdout = LoggingToStdout || b + + if path != "" && err != nil { + var file *os.File + err = os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm) + if err == nil { + file, err = os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) + } + + if err == nil { + printers = append(printers, NewWriterPrinter(file, false)) + } else { + stdoutLogger.Printf(T("CF_TRACE ERROR CREATING LOG FILE {{.Path}}:\n{{.Err}}", + map[string]interface{}{"Path": path, "Err": err})) + + LoggingToStdout = true + } + } + } + + if LoggingToStdout { + printers = append(printers, stdoutLogger) + } + + return CombinePrinters(printers) +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/trace/printer.go b/vendor/code.cloudfoundry.org/cli/cf/trace/printer.go new file mode 100644 index 0000000..222e4a2 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/trace/printer.go @@ -0,0 +1,10 @@ +package trace + +//go:generate counterfeiter . Printer + +type Printer interface { + Print(v ...interface{}) + Printf(format string, v ...interface{}) + Println(v ...interface{}) + WritesToConsole() bool +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/trace/trace.go b/vendor/code.cloudfoundry.org/cli/cf/trace/trace.go new file mode 100644 index 0000000..6e55474 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/trace/trace.go @@ -0,0 +1,32 @@ +package trace + +import ( + "fmt" + "regexp" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +var LoggingToStdout bool + +func Sanitize(input string) string { + re := regexp.MustCompile(`(?m)^Authorization: .*`) + sanitized := re.ReplaceAllString(input, "Authorization: "+PrivateDataPlaceholder()) + + re = regexp.MustCompile(`password=[^&]*&`) + sanitized = re.ReplaceAllString(sanitized, "password="+PrivateDataPlaceholder()+"&") + + sanitized = sanitizeJSON("token", sanitized) + sanitized = sanitizeJSON("password", sanitized) + + return sanitized +} + +func sanitizeJSON(propertySubstring string, json string) string { + regex := regexp.MustCompile(fmt.Sprintf(`(?i)"([^"]*%s[^"]*)":\s*"[^\,]*"`, propertySubstring)) + return regex.ReplaceAllString(json, fmt.Sprintf(`"$1":"%s"`, PrivateDataPlaceholder())) +} + +func PrivateDataPlaceholder() string { + return T("[PRIVATE DATA HIDDEN]") +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/trace/writer_printer.go b/vendor/code.cloudfoundry.org/cli/cf/trace/writer_printer.go new file mode 100644 index 0000000..9f03349 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/trace/writer_printer.go @@ -0,0 +1,34 @@ +package trace + +import ( + "io" + "log" +) + +type LoggerPrinter struct { + logger *log.Logger + writesToConsole bool +} + +func NewWriterPrinter(writer io.Writer, writesToConsole bool) Printer { + return &LoggerPrinter{ + logger: log.New(writer, "", 0), + writesToConsole: writesToConsole, + } +} + +func (p *LoggerPrinter) Print(v ...interface{}) { + p.logger.Print(v...) +} + +func (p *LoggerPrinter) Printf(format string, v ...interface{}) { + p.logger.Printf(format, v...) +} + +func (p *LoggerPrinter) Println(v ...interface{}) { + p.logger.Println(v...) +} + +func (p *LoggerPrinter) WritesToConsole() bool { + return p.writesToConsole +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/v3/models/models.go b/vendor/code.cloudfoundry.org/cli/cf/v3/models/models.go new file mode 100644 index 0000000..3b25219 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/v3/models/models.go @@ -0,0 +1,29 @@ +package models + +type V3Application struct { + Name string `json:"name"` + DesiredState string `json:"desired_state"` + TotalDesiredInstances int `json:"total_desired_instances"` + Links Links `json:"links"` +} + +type Links struct { + Processes Link `json:"processes"` + Routes Link `json:"routes"` +} + +type Link struct { + Href string `json:"href"` +} + +type V3Process struct { + Type string `json:"type"` + Instances int `json:"instances"` + MemoryInMB int64 `json:"memory_in_mb"` + DiskInMB int64 `json:"disk_in_mb"` +} + +type V3Route struct { + Host string `json:"host"` + Path string `json:"path"` +} diff --git a/vendor/code.cloudfoundry.org/cli/cf/v3/repository/repository.go b/vendor/code.cloudfoundry.org/cli/cf/v3/repository/repository.go new file mode 100644 index 0000000..f3a7d62 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/cf/v3/repository/repository.go @@ -0,0 +1,89 @@ +package repository + +import ( + "encoding/json" + "net/url" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + "code.cloudfoundry.org/cli/cf/v3/models" + "github.com/cloudfoundry/go-ccapi/v3/client" +) + +//go:generate counterfeiter . Repository + +type Repository interface { + GetApplications() ([]models.V3Application, error) + GetProcesses(path string) ([]models.V3Process, error) + GetRoutes(path string) ([]models.V3Route, error) +} + +type repository struct { + client client.Client + config coreconfig.ReadWriter +} + +func NewRepository(config coreconfig.ReadWriter, client client.Client) Repository { + return &repository{ + client: client, + config: config, + } +} + +func (r *repository) handleUpdatedTokens() { + if r.client.TokensUpdated() { + accessToken, refreshToken := r.client.GetUpdatedTokens() + r.config.SetAccessToken(accessToken) + r.config.SetRefreshToken(refreshToken) + } +} + +func (r *repository) GetApplications() ([]models.V3Application, error) { + jsonResponse, err := r.client.GetApplications(url.Values{}) + if err != nil { + return []models.V3Application{}, err + } + + r.handleUpdatedTokens() + + applications := []models.V3Application{} + err = json.Unmarshal(jsonResponse, &applications) + if err != nil { + return []models.V3Application{}, err + } + + return applications, nil +} + +func (r *repository) GetProcesses(path string) ([]models.V3Process, error) { + jsonResponse, err := r.client.GetResources(path, 0) + if err != nil { + return []models.V3Process{}, err + } + + r.handleUpdatedTokens() + + processes := []models.V3Process{} + err = json.Unmarshal(jsonResponse, &processes) + if err != nil { + return []models.V3Process{}, err + } + + return processes, nil +} + +func (r *repository) GetRoutes(path string) ([]models.V3Route, error) { + jsonResponse, err := r.client.GetResources(path, 0) + if err != nil { + return []models.V3Route{}, err + } + + r.handleUpdatedTokens() + + routes := []models.V3Route{} + err = json.Unmarshal(jsonResponse, &routes) + if err != nil { + return []models.V3Route{}, err + } + + return routes, nil +} diff --git a/vendor/code.cloudfoundry.org/cli/plugin/cli_connection.go b/vendor/code.cloudfoundry.org/cli/plugin/cli_connection.go new file mode 100644 index 0000000..4964b1e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/plugin/cli_connection.go @@ -0,0 +1,383 @@ +package plugin + +import ( + "errors" + "fmt" + "net" + "net/rpc" + "os" + "time" + + "code.cloudfoundry.org/cli/plugin/models" +) + +type cliConnection struct { + cliServerPort string +} + +func NewCliConnection(cliServerPort string) *cliConnection { + return &cliConnection{ + cliServerPort: cliServerPort, + } +} + +func (c *cliConnection) withClientDo(f func(client *rpc.Client) error) error { + client, err := rpc.Dial("tcp", "127.0.0.1:"+c.cliServerPort) + if err != nil { + return err + } + defer client.Close() + + return f(client) +} + +func (c *cliConnection) sendPluginMetadataToCliServer(metadata PluginMetadata) { + var success bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.SetPluginMetadata", metadata, &success) + }) + + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + if !success { + os.Exit(1) + } + + os.Exit(0) +} + +func (c *cliConnection) isMinCliVersion(version string) bool { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.IsMinCliVersion", version, &result) + }) + + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + return result +} + +func (c *cliConnection) CliCommandWithoutTerminalOutput(args ...string) ([]string, error) { + return c.callCliCommand(true, args...) +} + +func (c *cliConnection) CliCommand(args ...string) ([]string, error) { + return c.callCliCommand(false, args...) +} + +func (c *cliConnection) callCliCommand(silently bool, args ...string) ([]string, error) { + var ( + success bool + cmdOutput []string + callCoreCommandErr error + getOutputAndResetErr error + disableTerminalOutputErr error + ) + + c.withClientDo(func(client *rpc.Client) error { + disableTerminalOutputErr = client.Call("CliRpcCmd.DisableTerminalOutput", silently, &success) + callCoreCommandErr = client.Call("CliRpcCmd.CallCoreCommand", args, &success) + getOutputAndResetErr = client.Call("CliRpcCmd.GetOutputAndReset", success, &cmdOutput) + + return nil + }) + + if disableTerminalOutputErr != nil { + return []string{}, disableTerminalOutputErr + } + + if callCoreCommandErr != nil { + return []string{}, callCoreCommandErr + } + + if !success { + return []string{}, errors.New("Error executing cli core command") + } + + if getOutputAndResetErr != nil { + return []string{}, errors.New("something completely unexpected happened") + } + + return cmdOutput, nil +} + +func (c *cliConnection) pingCLI() { + //call back to cf saying we have been setup + var connErr error + var conn net.Conn + for i := 0; i < 5; i++ { + conn, connErr = net.Dial("tcp", "127.0.0.1:"+c.cliServerPort) + if connErr != nil { + time.Sleep(200 * time.Millisecond) + } else { + conn.Close() + break + } + } + if connErr != nil { + fmt.Println(connErr) + os.Exit(1) + } +} + +func (c *cliConnection) GetCurrentOrg() (plugin_models.Organization, error) { + var result plugin_models.Organization + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetCurrentOrg", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetCurrentSpace() (plugin_models.Space, error) { + var result plugin_models.Space + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetCurrentSpace", "", &result) + }) + + return result, err +} + +func (c *cliConnection) Username() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.Username", "", &result) + }) + + return result, err +} + +func (c *cliConnection) UserGuid() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.UserGuid", "", &result) + }) + + return result, err +} + +func (c *cliConnection) UserEmail() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.UserEmail", "", &result) + }) + + return result, err +} + +func (c *cliConnection) IsSSLDisabled() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.IsSSLDisabled", "", &result) + }) + + return result, err +} + +func (c *cliConnection) IsLoggedIn() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.IsLoggedIn", "", &result) + }) + + return result, err +} + +func (c *cliConnection) HasOrganization() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.HasOrganization", "", &result) + }) + + return result, err +} + +func (c *cliConnection) HasSpace() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.HasSpace", "", &result) + }) + + return result, err +} + +func (c *cliConnection) ApiEndpoint() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.ApiEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) HasAPIEndpoint() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.HasAPIEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) ApiVersion() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.ApiVersion", "", &result) + }) + + return result, err +} + +func (c *cliConnection) LoggregatorEndpoint() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.LoggregatorEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) DopplerEndpoint() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.DopplerEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) AccessToken() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.AccessToken", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetApp(appName string) (plugin_models.GetAppModel, error) { + var result plugin_models.GetAppModel + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetApp", appName, &result) + }) + + return result, err +} + +func (c *cliConnection) GetApps() ([]plugin_models.GetAppsModel, error) { + var result []plugin_models.GetAppsModel + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetApps", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetOrgs() ([]plugin_models.GetOrgs_Model, error) { + var result []plugin_models.GetOrgs_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetOrgs", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetSpaces() ([]plugin_models.GetSpaces_Model, error) { + var result []plugin_models.GetSpaces_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetSpaces", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetServices() ([]plugin_models.GetServices_Model, error) { + var result []plugin_models.GetServices_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetServices", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetOrgUsers(orgName string, args ...string) ([]plugin_models.GetOrgUsers_Model, error) { + var result []plugin_models.GetOrgUsers_Model + + cmdArgs := append([]string{orgName}, args...) + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetOrgUsers", cmdArgs, &result) + }) + + return result, err +} + +func (c *cliConnection) GetSpaceUsers(orgName string, spaceName string) ([]plugin_models.GetSpaceUsers_Model, error) { + var result []plugin_models.GetSpaceUsers_Model + + cmdArgs := []string{orgName, spaceName} + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetSpaceUsers", cmdArgs, &result) + }) + + return result, err +} + +func (c *cliConnection) GetOrg(orgName string) (plugin_models.GetOrg_Model, error) { + var result plugin_models.GetOrg_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetOrg", orgName, &result) + }) + + return result, err +} + +func (c *cliConnection) GetSpace(spaceName string) (plugin_models.GetSpace_Model, error) { + var result plugin_models.GetSpace_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetSpace", spaceName, &result) + }) + + return result, err +} + +func (c *cliConnection) GetService(serviceInstance string) (plugin_models.GetService_Model, error) { + var result plugin_models.GetService_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetService", serviceInstance, &result) + }) + + return result, err +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_app.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_app.go similarity index 91% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_app.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_app.go index 55c9f59..0b987ff 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_app.go +++ b/vendor/code.cloudfoundry.org/cli/plugin/models/get_app.go @@ -20,6 +20,7 @@ type GetAppModel struct { PackageUpdatedAt *time.Time PackageState string StagingFailedReason string + AppPorts []int Stack *GetApp_Stack Instances []GetApp_AppInstanceFields Routes []GetApp_RouteSummary @@ -50,10 +51,8 @@ type GetApp_RouteSummary struct { } type GetApp_DomainFields struct { - Guid string - Name string - OwningOrganizationGuid string - Shared bool + Guid string + Name string } type GetApp_ServiceSummary struct { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_apps.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_apps.go similarity index 95% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_apps.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_apps.go index 9fe3179..37f9118 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_apps.go +++ b/vendor/code.cloudfoundry.org/cli/plugin/models/get_apps.go @@ -9,6 +9,7 @@ type GetAppsModel struct { Memory int64 DiskQuota int64 Routes []GetAppsRouteSummary + AppPorts []int } type GetAppsRouteSummary struct { diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_current_org.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_current_org.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_current_org.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_current_org.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_current_space.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_current_space.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_current_space.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_current_space.go diff --git a/vendor/code.cloudfoundry.org/cli/plugin/models/get_oauth_token.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_oauth_token.go new file mode 100644 index 0000000..64d1a54 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/plugin/models/get_oauth_token.go @@ -0,0 +1,5 @@ +package plugin_models + +type GetOauthToken_Model struct { + Token string +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_org.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_org.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_org.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_org.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_org_users.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_org_users.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_org_users.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_org_users.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_orgs.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_orgs.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_orgs.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_orgs.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_service.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_service.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_service.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_service.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_services.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_services.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_services.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_services.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_space.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_space.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_space.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_space.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_space_users.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_space_users.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_space_users.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_space_users.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_spaces.go b/vendor/code.cloudfoundry.org/cli/plugin/models/get_spaces.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/models/get_spaces.go rename to vendor/code.cloudfoundry.org/cli/plugin/models/get_spaces.go diff --git a/vendor/code.cloudfoundry.org/cli/plugin/plugin.go b/vendor/code.cloudfoundry.org/cli/plugin/plugin.go new file mode 100644 index 0000000..c5b6358 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/plugin/plugin.go @@ -0,0 +1,70 @@ +package plugin + +import "code.cloudfoundry.org/cli/plugin/models" + +/** + Command interface needs to be implemented for a runnable plugin of `cf` +**/ +type Plugin interface { + Run(cliConnection CliConnection, args []string) + GetMetadata() PluginMetadata +} + +//go:generate counterfeiter . CliConnection +/** + List of commands avaiable to CliConnection variable passed into run +**/ +type CliConnection interface { + CliCommandWithoutTerminalOutput(args ...string) ([]string, error) + CliCommand(args ...string) ([]string, error) + GetCurrentOrg() (plugin_models.Organization, error) + GetCurrentSpace() (plugin_models.Space, error) + Username() (string, error) + UserGuid() (string, error) + UserEmail() (string, error) + IsLoggedIn() (bool, error) + IsSSLDisabled() (bool, error) + HasOrganization() (bool, error) + HasSpace() (bool, error) + ApiEndpoint() (string, error) + ApiVersion() (string, error) + HasAPIEndpoint() (bool, error) + LoggregatorEndpoint() (string, error) + DopplerEndpoint() (string, error) + AccessToken() (string, error) + GetApp(string) (plugin_models.GetAppModel, error) + GetApps() ([]plugin_models.GetAppsModel, error) + GetOrgs() ([]plugin_models.GetOrgs_Model, error) + GetSpaces() ([]plugin_models.GetSpaces_Model, error) + GetOrgUsers(string, ...string) ([]plugin_models.GetOrgUsers_Model, error) + GetSpaceUsers(string, string) ([]plugin_models.GetSpaceUsers_Model, error) + GetServices() ([]plugin_models.GetServices_Model, error) + GetService(string) (plugin_models.GetService_Model, error) + GetOrg(string) (plugin_models.GetOrg_Model, error) + GetSpace(string) (plugin_models.GetSpace_Model, error) +} + +type VersionType struct { + Major int + Minor int + Build int +} + +type PluginMetadata struct { + Name string + Version VersionType + MinCliVersion VersionType + Commands []Command +} + +type Usage struct { + Usage string + Options map[string]string +} + +type Command struct { + Name string + Alias string + HelpText string + UsageDetails Usage //Detail usage to be displayed in `cf help ` +} diff --git a/vendor/code.cloudfoundry.org/cli/plugin/plugin_shim.go b/vendor/code.cloudfoundry.org/cli/plugin/plugin_shim.go new file mode 100644 index 0000000..42c6457 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/plugin/plugin_shim.go @@ -0,0 +1,44 @@ +package plugin + +import ( + "fmt" + "os" + "strconv" +) + +/** + * This function is called by the plugin to setup their server. This allows us to call Run on the plugin + * os.Args[1] port CF_CLI rpc server is running on + * os.Args[2] **OPTIONAL** + * SendMetadata - used to fetch the plugin metadata +**/ +func Start(cmd Plugin) { + cliConnection := NewCliConnection(os.Args[1]) + + cliConnection.pingCLI() + if isMetadataRequest(os.Args) { + cliConnection.sendPluginMetadataToCliServer(cmd.GetMetadata()) + } else { + if version := MinCliVersionStr(cmd.GetMetadata().MinCliVersion); version != "" { + ok := cliConnection.isMinCliVersion(version) + if !ok { + fmt.Printf("Minimum CLI version %s is required to run this plugin command\n\n", version) + os.Exit(0) + } + } + + cmd.Run(cliConnection, os.Args[2:]) + } +} + +func isMetadataRequest(args []string) bool { + return len(args) == 3 && args[2] == "SendMetadata" +} + +func MinCliVersionStr(version VersionType) string { + if version.Major == 0 && version.Minor == 0 && version.Build == 0 { + return "" + } + + return strconv.Itoa(version.Major) + "." + strconv.Itoa(version.Minor) + "." + strconv.Itoa(version.Build) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/checksum.go b/vendor/code.cloudfoundry.org/cli/util/checksum.go similarity index 93% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/checksum.go rename to vendor/code.cloudfoundry.org/cli/util/checksum.go index e37a831..0e2cf13 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/utils/checksum.go +++ b/vendor/code.cloudfoundry.org/cli/util/checksum.go @@ -1,4 +1,4 @@ -package utils +package util import ( "crypto/sha1" @@ -7,6 +7,8 @@ import ( "os" ) +//go:generate counterfeiter . Sha1Checksum + type Sha1Checksum interface { ComputeFileSha1() ([]byte, error) CheckSha1(string) bool diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/color.go b/vendor/code.cloudfoundry.org/cli/util/configv3/color.go new file mode 100644 index 0000000..c2eff69 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/color.go @@ -0,0 +1,49 @@ +package configv3 + +import "strconv" + +const ( + // DefaultColorEnabled is the default CFConfig value for ColorEnabled. + DefaultColorEnabled = "" + + // ColorDisabled means that no colors/bolding will be displayed. + ColorDisabled ColorSetting = iota + + // ColorEnabled means colors/bolding will be displayed. + ColorEnabled + + // ColorAuto means that the UI should decide if colors/bolding will be + // enabled. + ColorAuto +) + +// ColorSetting is a trinary operator that represents if the display should +// have colors enabled, disabled, or automatically detected. +type ColorSetting int + +// ColorEnabled returns the color setting based off: +// 1. The $CF_COLOR environment variable if set (0/1/t/f/true/false) +// 2. The 'ColorEnabled' value in the .cf/config.json if set +// 3. Defaults to ColorEnabled if nothing is set +func (config *Config) ColorEnabled() ColorSetting { + if config.ENV.CFColor != "" { + val, err := strconv.ParseBool(config.ENV.CFColor) + if err == nil { + return config.boolToColorSetting(val) + } + } + + val, err := strconv.ParseBool(config.ConfigFile.ColorEnabled) + if err != nil { + return ColorEnabled + } + return config.boolToColorSetting(val) +} + +func (config *Config) boolToColorSetting(val bool) ColorSetting { + if val { + return ColorEnabled + } + + return ColorDisabled +} diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/config.go b/vendor/code.cloudfoundry.org/cli/util/configv3/config.go new file mode 100644 index 0000000..732115e --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/config.go @@ -0,0 +1,484 @@ +// Package configv3 package contains everything related to the CF CLI Configuration. +package configv3 + +import ( + "encoding/json" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "time" + + "code.cloudfoundry.org/cli/version" +) + +const ( + // DefaultStagingTimeout is the default timeout for application staging. + DefaultStagingTimeout = 15 * time.Minute + + // DefaultStartupTimeout is the default timeout for application starting. + DefaultStartupTimeout = 5 * time.Minute + // DefaultPingerThrottle = 5 * time.Second + + // DefaultDialTimeout is the default timeout for the dail. + DefaultDialTimeout = 5 * time.Second + + // DefaultOverallPollingTimeout is the default maximum time that the CLI will + // poll a job running on the Cloud Controller. By default it's infinit, which + // is represented by MaxInt64. + DefaultOverallPollingTimeout = time.Duration(1<<63 - 1) // math.MaxInt64 + // Developer note about constant above ^^^ do not replace with math.MaxInt64 + // This will require the math package which is a dynamically linked library. + + // DefaultTarget is the default CFConfig value for Target. + DefaultTarget = "" + + // DefaultUAAOAuthClient is the default client ID for the CLI when + // communicating with the UAA. + DefaultUAAOAuthClient = "cf" + + // DefaultCFOClientSecret is the default client secret for the CLI when + // communicating with the UAA. + DefaultUAAOAuthClientSecret = "" +) + +// LoadConfig loads the config from the .cf/config.json and os.ENV. If the +// config.json does not exists, it will use a default config in it's place. +// Takes in an optional FlagOverride, will only use the first one passed, that +// can override the given flag values. +// +// The '.cf' directory will be read in one of the following locations on UNIX +// Systems: +// 1. $CF_HOME/.cf if $CF_HOME is set +// 2. $HOME/.cf as the default +// +// The '.cf' directory will be read in one of the following locations on +// Windows Systems: +// 1. CF_HOME\.cf if CF_HOME is set +// 2. HOMEDRIVE\HOMEPATH\.cf if HOMEDRIVE or HOMEPATH is set +// 3. USERPROFILE\.cf as the default +func LoadConfig(flags ...FlagOverride) (*Config, error) { + filePath := ConfigFilePath() + + var config Config + if _, err := os.Stat(filePath); os.IsNotExist(err) { + config = Config{ + ConfigFile: CFConfig{ + ConfigVersion: 3, + Target: DefaultTarget, + ColorEnabled: DefaultColorEnabled, + PluginRepos: []PluginRepos{{ + Name: DefaultPluginRepoName, + URL: DefaultPluginRepoURL, + }}, + UAAOAuthClient: DefaultUAAOAuthClient, + UAAOAuthClientSecret: DefaultUAAOAuthClientSecret, + }, + } + } else { + file, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + + err = json.Unmarshal(file, &config.ConfigFile) + if err != nil { + return nil, err + } + + if config.ConfigFile.UAAOAuthClient == "" { + config.ConfigFile.UAAOAuthClient = DefaultUAAOAuthClient + config.ConfigFile.UAAOAuthClientSecret = DefaultUAAOAuthClientSecret + } + } + + config.ENV = EnvOverride{ + BinaryName: filepath.Base(os.Args[0]), + CFColor: os.Getenv("CF_COLOR"), + CFPluginHome: os.Getenv("CF_PLUGIN_HOME"), + CFStagingTimeout: os.Getenv("CF_STAGING_TIMEOUT"), + CFStartupTimeout: os.Getenv("CF_STARTUP_TIMEOUT"), + CFTrace: os.Getenv("CF_TRACE"), + HTTPSProxy: os.Getenv("https_proxy"), + Lang: os.Getenv("LANG"), + LCAll: os.Getenv("LC_ALL"), + Experimental: os.Getenv("CF_CLI_EXPERIMENTAL"), + CFDialTimeout: os.Getenv("CF_DIAL_TIMEOUT"), + } + + pluginFilePath := filepath.Join(config.PluginHome(), "config.json") + if _, err := os.Stat(pluginFilePath); os.IsNotExist(err) { + config.pluginConfig = PluginsConfig{} + } else { + file, err := ioutil.ReadFile(pluginFilePath) + if err != nil { + return nil, err + } + + err = json.Unmarshal(file, &config.pluginConfig) + if err != nil { + return nil, err + } + } + + if len(flags) > 0 { + config.Flags = flags[0] + } + + return &config, nil +} + +// WriteConfig creates the .cf directory and then writes the config.json. The +// location of .cf directory is written in the same way LoadConfig reads .cf +// directory. +func WriteConfig(c *Config) error { + rawConfig, err := json.MarshalIndent(c.ConfigFile, "", " ") + if err != nil { + return err + } + + err = os.MkdirAll(filepath.Join(homeDirectory(), ".cf"), 0700) + if err != nil { + return err + } + + return ioutil.WriteFile(ConfigFilePath(), rawConfig, 0600) +} + +// Config combines the settings taken from the .cf/config.json, os.ENV, and the +// plugin config. +type Config struct { + // ConfigFile stores the configuration from the .cf/config + ConfigFile CFConfig + + // ENV stores the configuration from os.ENV + ENV EnvOverride + + // Flags stores the configuration from gobal flags + Flags FlagOverride + + pluginConfig PluginsConfig +} + +// CFConfig represents .cf/config.json +type CFConfig struct { + ConfigVersion int `json:"ConfigVersion"` + Target string `json:"Target"` + APIVersion string `json:"APIVersion"` + AuthorizationEndpoint string `json:"AuthorizationEndpoint"` + DopplerEndpoint string `json:"DopplerEndPoint"` + UAAEndpoint string `json:"UaaEndpoint"` + RoutingEndpoint string `json:"RoutingAPIEndpoint"` + AccessToken string `json:"AccessToken"` + SSHOAuthClient string `json:"SSHOAuthClient"` + UAAOAuthClient string `json:"UAAOAuthClient"` + UAAOAuthClientSecret string `json:"UAAOAuthClientSecret"` + RefreshToken string `json:"RefreshToken"` + TargetedOrganization Organization `json:"OrganizationFields"` + TargetedSpace Space `json:"SpaceFields"` + SkipSSLValidation bool `json:"SSLDisabled"` + AsyncTimeout int `json:"AsyncTimeout"` + Trace string `json:"Trace"` + ColorEnabled string `json:"ColorEnabled"` + Locale string `json:"Locale"` + PluginRepos []PluginRepos `json:"PluginRepos"` + MinCLIVersion string `json:"MinCLIVersion"` + MinRecommendedCLIVersion string `json:"MinRecommendedCLIVersion"` +} + +// Organization contains basic information about the targeted organization +type Organization struct { + GUID string `json:"GUID"` + Name string `json:"Name"` + QuotaDefinition QuotaDefinition `json:"QuotaDefinition"` +} + +// QuotaDefinition contains information about the organization's quota +type QuotaDefinition struct { + GUID string `json:"guid"` + Name string `json:"name"` + MemoryLimit int `json:"memory_limit"` + InstanceMemoryLimit int `json:"instance_memory_limit"` + TotalRoutes int `json:"total_routes"` + TotalServices int `json:"total_services"` + NonBasicServicesAllowed bool `json:"non_basic_services_allowed"` + AppInstanceLimit int `json:"app_instance_limit"` + TotalReservedRoutePorts int `json:"total_reserved_route_ports"` +} + +// Space contains basic information about the targeted space +type Space struct { + GUID string `json:"GUID"` + Name string `json:"Name"` + AllowSSH bool `json:"AllowSSH"` +} + +// EnvOverride represents all the environment variables read by the CF CLI +type EnvOverride struct { + BinaryName string + CFColor string + CFHome string + CFPluginHome string + CFStagingTimeout string + CFStartupTimeout string + CFTrace string + HTTPSProxy string + Lang string + LCAll string + Experimental string + CFDialTimeout string +} + +// FlagOverride represents all the global flags passed to the CF CLI +type FlagOverride struct { + Verbose bool +} + +// Target returns the CC API URL +func (config *Config) Target() string { + return config.ConfigFile.Target +} + +// PollingInterval returns the time between polls. +func (config *Config) PollingInterval() time.Duration { + return 5 * time.Second +} + +// OverallPollingTimeout returns the overall polling timeout for async +// operations. The time is based off of: +// 1. The config file's AsyncTimeout value (integer) is > 0 +// 2. Defaults to the DefaultOverallPollingTimeout +func (config *Config) OverallPollingTimeout() time.Duration { + if config.ConfigFile.AsyncTimeout == 0 { + return DefaultOverallPollingTimeout + } + return time.Duration(config.ConfigFile.AsyncTimeout) * time.Minute +} + +// SkipSSLValidation returns whether or not to skip SSL validation when +// targeting an API endpoint +func (config *Config) SkipSSLValidation() bool { + return config.ConfigFile.SkipSSLValidation +} + +// AccessToken returns the access token for making authenticated API calls +func (config *Config) AccessToken() string { + return config.ConfigFile.AccessToken +} + +// RefreshToken returns the refresh token for getting a new access token +func (config *Config) RefreshToken() string { + return config.ConfigFile.RefreshToken +} + +// UAAOAuthClient returns the CLI's UAA client ID +func (config *Config) UAAOAuthClient() string { + return config.ConfigFile.UAAOAuthClient +} + +// UAAOAuthClientSecret returns the CLI's UAA client secret +func (config *Config) UAAOAuthClientSecret() string { + return config.ConfigFile.UAAOAuthClientSecret +} + +// APIVersion returns the CC API Version +func (config *Config) APIVersion() string { + return config.ConfigFile.APIVersion +} + +// MinCLIVersion returns the minimum CLI version requried by the CC +func (config *Config) MinCLIVersion() string { + return config.ConfigFile.MinCLIVersion +} + +// TargetedOrganization returns the currently targeted organization +func (config *Config) TargetedOrganization() Organization { + return config.ConfigFile.TargetedOrganization +} + +// TargetedSpace returns the currently targeted space +func (config *Config) TargetedSpace() Space { + return config.ConfigFile.TargetedSpace +} + +// StagingTimeout returns the max time an application staging should take. The +// time is based off of: +// 1. The $CF_STAGING_TIMEOUT environment variable if set +// 2. Defaults to the DefaultStagingTimeout +func (config *Config) StagingTimeout() time.Duration { + if config.ENV.CFStagingTimeout != "" { + val, err := strconv.ParseInt(config.ENV.CFStagingTimeout, 10, 64) + if err == nil { + return time.Duration(val) * time.Minute + } + } + + return DefaultStagingTimeout +} + +// StartupTimeout returns the max time an application should take to start. The +// time is based off of: +// 1. The $CF_STARTUP_TIMEOUT environment variable if set +// 2. Defaults to the DefaultStartupTimeout +func (config *Config) StartupTimeout() time.Duration { + if config.ENV.CFStartupTimeout != "" { + val, err := strconv.ParseInt(config.ENV.CFStartupTimeout, 10, 64) + if err == nil { + return time.Duration(val) * time.Minute + } + } + + return DefaultStartupTimeout +} + +// HTTPSProxy returns the proxy url that the CLI should use. The url is based +// off of: +// 1. The $https_proxy environment variable if set +// 2. Defaults to the empty string +func (config *Config) HTTPSProxy() string { + if config.ENV.HTTPSProxy != "" { + return config.ENV.HTTPSProxy + } + + return "" +} + +// BinaryName returns the running name of the CF CLI +func (config *Config) BinaryName() string { + return config.ENV.BinaryName +} + +// Experimental returns whether or not to run experimental CLI commands. This +// is based off of: +// 1. The $CF_CLI_EXPERIMENTAL environment variable if set +// 2. Defaults to false +func (config *Config) Experimental() bool { + if config.ENV.Experimental != "" { + envVal, err := strconv.ParseBool(config.ENV.Experimental) + if err == nil { + return envVal + } + } + + return false +} + +// Verbose returns true if verbose should be displayed to terminal and a +// location to log to. This is based off of: +// - The config file's trace value (true/false/file path) +// - The $CF_TRACE enviroment variable if set (true/false/file path) +// - The '-v/--verbose' global flag +// - Defaults to false +func (config *Config) Verbose() (bool, []string) { + var ( + verbose bool + envOverride bool + filePath []string + ) + if config.ENV.CFTrace != "" { + envVal, err := strconv.ParseBool(config.ENV.CFTrace) + verbose = envVal + if err != nil { + filePath = []string{config.ENV.CFTrace} + } else { + envOverride = true + } + } + if config.ConfigFile.Trace != "" { + envVal, err := strconv.ParseBool(config.ConfigFile.Trace) + if !envOverride { + verbose = envVal || verbose + } + if err != nil { + filePath = append(filePath, config.ConfigFile.Trace) + } + } + verbose = config.Flags.Verbose || verbose + + return verbose, filePath +} + +// DialTimeout returns the timeout to use when dialing. This is based off of: +// 1. The $CF_DIAL_TIMEOUT environment variable if set +// 2. Defaults to 5 seconds +func (config *Config) DialTimeout() time.Duration { + if config.ENV.CFDialTimeout != "" { + envVal, err := strconv.ParseInt(config.ENV.CFDialTimeout, 10, 64) + if err == nil { + return time.Duration(envVal) * time.Second + } + } + + return DefaultDialTimeout +} + +func (config *Config) BinaryVersion() string { + return version.VersionString() +} + +// HasTargetedOrganization returns true if the organization is set +func (config *Config) HasTargetedOrganization() bool { + return config.ConfigFile.TargetedOrganization.GUID != "" +} + +// HasTargetedSpace returns true if the space is set +func (config *Config) HasTargetedSpace() bool { + return config.ConfigFile.TargetedSpace.GUID != "" +} + +// SetOrganizationInformation sets the currently targeted organization +func (config *Config) SetOrganizationInformation(guid string, name string) { + config.ConfigFile.TargetedOrganization.GUID = guid + config.ConfigFile.TargetedOrganization.Name = name + config.ConfigFile.TargetedOrganization.QuotaDefinition = QuotaDefinition{} +} + +// SetSpaceInformation sets the currently targeted space +func (config *Config) SetSpaceInformation(guid string, name string, allowSSH bool) { + config.ConfigFile.TargetedSpace.GUID = guid + config.ConfigFile.TargetedSpace.Name = name + config.ConfigFile.TargetedSpace.AllowSSH = allowSSH +} + +// SetTargetInformation sets the currently targeted CC API and related other +// related API URLs +func (config *Config) SetTargetInformation(api string, apiVersion string, auth string, minCLIVersion string, doppler string, uaa string, routing string, skipSSLValidation bool) { + config.ConfigFile.Target = api + config.ConfigFile.APIVersion = apiVersion + config.ConfigFile.AuthorizationEndpoint = auth + config.ConfigFile.MinCLIVersion = minCLIVersion + config.ConfigFile.DopplerEndpoint = doppler + config.ConfigFile.UAAEndpoint = uaa + config.ConfigFile.RoutingEndpoint = routing + config.ConfigFile.SkipSSLValidation = skipSSLValidation + + config.UnsetOrganizationInformation() + config.UnsetSpaceInformation() +} + +// SetTokenInformation sets the current token/user information +func (config *Config) SetTokenInformation(accessToken string, refreshToken string, sshOAuthClient string) { + config.ConfigFile.AccessToken = accessToken + config.ConfigFile.RefreshToken = refreshToken + config.ConfigFile.SSHOAuthClient = sshOAuthClient +} + +// SetAccessToken sets the current access token +func (config *Config) SetAccessToken(accessToken string) { + config.ConfigFile.AccessToken = accessToken +} + +// SetRefreshToken sets the current refresh token +func (config *Config) SetRefreshToken(refreshToken string) { + config.ConfigFile.RefreshToken = refreshToken +} + +// UnsetSpaceInformation resets the space values to default +func (config *Config) UnsetSpaceInformation() { + config.SetSpaceInformation("", "", false) +} + +// UnsetOrganizationInformation resets the organization values to default +func (config *Config) UnsetOrganizationInformation() { + config.SetOrganizationInformation("", "") +} diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/home_dir.go b/vendor/code.cloudfoundry.org/cli/util/configv3/home_dir.go new file mode 100644 index 0000000..6fff11d --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/home_dir.go @@ -0,0 +1,24 @@ +// +build !windows + +package configv3 + +import ( + "os" + "path/filepath" +) + +// ConfigFilePath returns the location of the config file +func ConfigFilePath() string { + return filepath.Join(homeDirectory(), ".cf", "config.json") +} + +func homeDirectory() string { + var homeDir string + switch { + case os.Getenv("CF_HOME") != "": + homeDir = os.Getenv("CF_HOME") + default: + homeDir = os.Getenv("HOME") + } + return homeDir +} diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/home_dir_windows.go b/vendor/code.cloudfoundry.org/cli/util/configv3/home_dir_windows.go new file mode 100644 index 0000000..253aac6 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/home_dir_windows.go @@ -0,0 +1,27 @@ +// +build windows + +package configv3 + +import ( + "os" + "path/filepath" +) + +func ConfigFilePath() string { + return filepath.Join(homeDirectory(), ".cf", "config.json") +} + +// See: http://stackoverflow.com/questions/7922270/obtain-users-home-directory +// we can't cross compile using cgo and use user.Current() +func homeDirectory() string { + var homeDir string + switch { + case os.Getenv("CF_HOME") != "": + homeDir = os.Getenv("CF_HOME") + case os.Getenv("HOMEDRIVE")+os.Getenv("HOMEPATH") != "": + homeDir = os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") + default: + homeDir = os.Getenv("USERPROFILE") + } + return homeDir +} diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/locale.go b/vendor/code.cloudfoundry.org/cli/util/configv3/locale.go new file mode 100644 index 0000000..99da3e0 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/locale.go @@ -0,0 +1,35 @@ +package configv3 + +import "strings" + +const ( + // DefaultLocale is the default CFConfig value for Locale. + DefaultLocale = "" +) + +// Locale returns the locale/language the UI should be displayed in. This value +// is based off of: +// 1. The 'Locale' setting in the .cf/config.json +// 2. The $LC_ALL environment variable if set +// 3. The $LANG environment variable if set +// 4. Defaults to DefaultLocale +func (config *Config) Locale() string { + if config.ConfigFile.Locale != "" { + return config.ConfigFile.Locale + } + + if config.ENV.LCAll != "" { + return config.convertLocale(config.ENV.LCAll) + } + + if config.ENV.Lang != "" { + return config.convertLocale(config.ENV.Lang) + } + + return DefaultLocale +} + +func (config *Config) convertLocale(local string) string { + lang := strings.Split(local, ".")[0] + return strings.Replace(lang, "_", "-", -1) +} diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/plugins.go b/vendor/code.cloudfoundry.org/cli/util/configv3/plugins.go new file mode 100644 index 0000000..c895904 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/plugins.go @@ -0,0 +1,83 @@ +package configv3 + +import ( + "path/filepath" + + "code.cloudfoundry.org/cli/util/sorting" +) + +const ( + // DefaultPluginRepoName is the name of the preinstalled plugin repository. + DefaultPluginRepoName = "CF-Community" + + // DefaultPluginRepoURL is the URL of the preinstalled plugin repository. + DefaultPluginRepoURL = "https://plugins.cloudfoundry.org" +) + +// PluginRepos is a saved plugin repository +type PluginRepos struct { + Name string `json:"Name"` + URL string `json:"URL"` +} + +// PluginsConfig represents the plugin configuration +type PluginsConfig struct { + Plugins map[string]Plugin `json:"Plugins"` +} + +// Plugin represents the plugin as a whole, not be confused with PluginCommand +type Plugin struct { + Location string `json:"Location"` + Version PluginVersion `json:"Version"` + Commands PluginCommands `json:"Commands"` +} + +// PluginVersion is the plugin version information +type PluginVersion struct { + Major int `json:"Major"` + Minor int `json:"Minor"` + Build int `json:"Build"` +} + +// PluginCommands is a list of plugins that implements the sort.Interface +type PluginCommands []PluginCommand + +func (p PluginCommands) Len() int { return len(p) } +func (p PluginCommands) Swap(i int, j int) { p[i], p[j] = p[j], p[i] } +func (p PluginCommands) Less(i int, j int) bool { return sorting.SortAlphabetic(p[i].Name, p[j].Name) } + +// PluginCommand represents an individual command inside a plugin +type PluginCommand struct { + Name string `json:"Name"` + Alias string `json:"Alias"` + HelpText string `json:"HelpText"` + UsageDetails PluginUsageDetails `json:"UsageDetails"` +} + +// PluginUsageDetails contains the usage metadata provided by the plugin +type PluginUsageDetails struct { + Usage string `json:"Usage"` + Options map[string]string `json:"Options"` +} + +// PluginHome returns the plugin configuration directory based off: +// 1. The $CF_PLUGIN_HOME environment variable if set +// 2. Defaults to the home diretory (outlined in LoadConfig)/.cf/plugins +func (config *Config) PluginHome() string { + if config.ENV.CFPluginHome != "" { + return filepath.Join(config.ENV.CFPluginHome, ".cf", "plugins") + } + + return filepath.Join(homeDirectory(), ".cf", "plugins") +} + +// Plugins returns back the plugin configuration read from the plugin home +func (config *Config) Plugins() map[string]Plugin { + return config.pluginConfig.Plugins +} + +// PluginRepos returns the currently configured plugin repositories from the +// .cf/config.json +func (config *Config) PluginRepos() []PluginRepos { + return config.ConfigFile.PluginRepos +} diff --git a/vendor/code.cloudfoundry.org/cli/util/configv3/user.go b/vendor/code.cloudfoundry.org/cli/util/configv3/user.go new file mode 100644 index 0000000..26ae04b --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/configv3/user.go @@ -0,0 +1,30 @@ +package configv3 + +import "github.com/SermoDigital/jose/jws" + +// User represents the user information provided by the JWT access token +type User struct { + Name string +} + +// CurrentUser returns user information decoded from the JWT access token in +// .cf/config.json +func (config *Config) CurrentUser() (User, error) { + return decodeUserFromJWT(config.ConfigFile.AccessToken) +} + +func decodeUserFromJWT(accessToken string) (User, error) { + if accessToken == "" { + return User{}, nil + } + + token, err := jws.ParseJWT([]byte(accessToken[7:])) + if err != nil { + return User{}, err + } + + claims := token.Claims() + return User{ + Name: claims.Get("user_name").(string), + }, nil +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/map.go b/vendor/code.cloudfoundry.org/cli/util/generic/map.go similarity index 92% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/map.go rename to vendor/code.cloudfoundry.org/cli/util/generic/map.go index 9fb4f00..13d52d9 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/map.go +++ b/vendor/code.cloudfoundry.org/cli/util/generic/map.go @@ -1,8 +1,10 @@ package generic -import "fmt" +import ( + "fmt" + "reflect" +) -// interface declaration type Map interface { IsEmpty() bool Count() int @@ -17,10 +19,8 @@ type Map interface { String() string } -// concrete map type type ConcreteMap map[interface{}]interface{} -// constructors func newEmptyMap() Map { return &ConcreteMap{} } @@ -33,6 +33,8 @@ func NewMap(data ...interface{}) Map { } switch data := data[0].(type) { + case nil: + return newEmptyMap() case Map: return data case map[string]string: @@ -56,7 +58,6 @@ func NewMap(data ...interface{}) Map { panic("NewMap called with unexpected argument") } -// implementing interface methods func (data *ConcreteMap) IsEmpty() bool { return data.Count() == 0 } @@ -115,17 +116,15 @@ func (data *ConcreteMap) String() string { return fmt.Sprintf("% v", *data) } -// helper functions func IsMappable(value interface{}) bool { + if value == nil { + return false + } switch value.(type) { case Map: return true - case map[string]interface{}: - return true - case map[interface{}]interface{}: - return true default: - return false + return reflect.TypeOf(value).Kind() == reflect.Map } } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/merge_reduce.go b/vendor/code.cloudfoundry.org/cli/util/generic/merge_reduce.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/generic/merge_reduce.go rename to vendor/code.cloudfoundry.org/cli/util/generic/merge_reduce.go diff --git a/vendor/code.cloudfoundry.org/cli/util/generic/slice.go b/vendor/code.cloudfoundry.org/cli/util/generic/slice.go new file mode 100644 index 0000000..d523660 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/generic/slice.go @@ -0,0 +1,10 @@ +package generic + +import "reflect" + +func IsSliceable(value interface{}) bool { + if value == nil { + return false + } + return reflect.TypeOf(value).Kind() == reflect.Slice +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/glob/glob.go b/vendor/code.cloudfoundry.org/cli/util/glob/glob.go similarity index 96% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/glob/glob.go rename to vendor/code.cloudfoundry.org/cli/util/glob/glob.go index 659e0af..860ac68 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/glob/glob.go +++ b/vendor/code.cloudfoundry.org/cli/util/glob/glob.go @@ -32,7 +32,7 @@ var globRe = mustBuildRe(`(` + charPat + `|[\*\?])`) // - `**` matches zero or more chars in zero or more components func translateGlob(pat string) (string, error) { if !globRe.MatchString(pat) { - return "", GlobError(pat) + return "", Error(pat) } outs := make([]string, len(pat)) @@ -97,9 +97,9 @@ func (g Glob) Match(path string) bool { return g.regexp.MatchString(toSlash(path)) } -type GlobError string +type Error string -func (e GlobError) Error() string { +func (e Error) Error() string { return "invalid glob pattern: " + string(e) } diff --git a/vendor/code.cloudfoundry.org/cli/util/sorting/alphabetic.go b/vendor/code.cloudfoundry.org/cli/util/sorting/alphabetic.go new file mode 100644 index 0000000..136bb68 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/sorting/alphabetic.go @@ -0,0 +1,43 @@ +package sorting + +import "unicode" + +// Alphabetic is an array of strings that can be alphabetically sorted +type Alphabetic []string + +func (s Alphabetic) Len() int { return len(s) } +func (s Alphabetic) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func (s Alphabetic) Less(i, j int) bool { + return SortAlphabetic(s[i], s[j]) +} + +// SortAlphabetic will return true if string a comes after string b +func SortAlphabetic(a string, b string) bool { + iRunes := []rune(a) + jRunes := []rune(b) + + max := len(iRunes) + if max > len(jRunes) { + max = len(jRunes) + } + + for idx := 0; idx < max; idx++ { + ir := iRunes[idx] + jr := jRunes[idx] + + lir := unicode.ToLower(ir) + ljr := unicode.ToLower(jr) + + if lir != ljr { + return lir < ljr + } + + // the lowercase runes are the same, so compare the original + if ir != jr { + return ir < jr + } + } + + return false +} diff --git a/vendor/code.cloudfoundry.org/cli/util/testhelpers/commands/requirements.go b/vendor/code.cloudfoundry.org/cli/util/testhelpers/commands/requirements.go new file mode 100644 index 0000000..d000c04 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/testhelpers/commands/requirements.go @@ -0,0 +1,16 @@ +package commands + +import "code.cloudfoundry.org/cli/cf/requirements" + +func RunRequirements(reqs []requirements.Requirement) error { + var retErr error + + for _, req := range reqs { + if err := req.Execute(); err != nil { + retErr = err + break + } + } + + return retErr +} diff --git a/vendor/code.cloudfoundry.org/cli/util/testhelpers/commands/runner.go b/vendor/code.cloudfoundry.org/cli/util/testhelpers/commands/runner.go new file mode 100644 index 0000000..7a1582a --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/testhelpers/commands/runner.go @@ -0,0 +1,85 @@ +package commands + +import ( + "fmt" + "os" + + "code.cloudfoundry.org/cli/cf/commandregistry" + "code.cloudfoundry.org/cli/cf/flags" + "code.cloudfoundry.org/cli/cf/requirements" + testterm "code.cloudfoundry.org/cli/util/testhelpers/terminal" +) + +type RunCommandResult int + +const ( + RunCommandResultSuccess = iota +) + +func RunCLICommand(cmdName string, args []string, requirementsFactory requirements.Factory, updateFunc func(bool), pluginCall bool, ui *testterm.FakeUI) bool { + updateFunc(pluginCall) + cmd := commandregistry.Commands.FindCommand(cmdName) + context := flags.NewFlagContext(cmd.MetaData().Flags) + context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing) + err := context.Parse(args...) + if err != nil { + fmt.Println("ERROR:", err) + os.Exit(1) + } + + var requirements []requirements.Requirement + requirements, err = cmd.Requirements(requirementsFactory, context) + if err != nil { + return false + } + for _, requirement := range requirements { + if err = requirement.Execute(); err != nil { + return false + } + } + + err = cmd.Execute(context) + if err != nil { + ui.Failed(err.Error()) + return false + } + + return true +} + +func RunCLICommandWithoutDependency(cmdName string, args []string, requirementsFactory requirements.Factory, ui *testterm.FakeUI) bool { + cmd := commandregistry.Commands.FindCommand(cmdName) + context := flags.NewFlagContext(cmd.MetaData().Flags) + context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing) + err := context.Parse(args...) + if err != nil { + fmt.Println("ERROR:", err) + os.Exit(1) + } + + defer func() { + errMsg := recover() + + if errMsg != nil { + panic(errMsg) + } + }() + + requirements, err := cmd.Requirements(requirementsFactory, context) + if err != nil { + return false + } + + for _, requirement := range requirements { + if err = requirement.Execute(); err != nil { + return false + } + } + + err = cmd.Execute(context) + if err != nil { + ui.Failed(err.Error()) + } + + return true +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/make_tls_cert.go b/vendor/code.cloudfoundry.org/cli/util/testhelpers/net/make_tls_cert.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/make_tls_cert.go rename to vendor/code.cloudfoundry.org/cli/util/testhelpers/net/make_tls_cert.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/request_matcher.go b/vendor/code.cloudfoundry.org/cli/util/testhelpers/net/request_matcher.go similarity index 93% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/request_matcher.go rename to vendor/code.cloudfoundry.org/cli/util/testhelpers/net/request_matcher.go index c1693e9..84950c2 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/net/request_matcher.go +++ b/vendor/code.cloudfoundry.org/cli/util/testhelpers/net/request_matcher.go @@ -52,12 +52,12 @@ func RequestBodyMatcher(expectedBodyString string) RequestMatcher { actualBody, err := bytesToInterface(bodyBytes) if err != nil { - Fail(fmt.Sprintf("Error unmarshalling request", err.Error())) + Fail(fmt.Sprintf("Error unmarshalling request: %s", err.Error())) } expectedBody, err := bytesToInterface([]byte(expectedBodyString)) if err != nil { - Fail(fmt.Sprintf("Error unmarshalling expected json", err.Error())) + Fail(fmt.Sprintf("Error unmarshalling expected json: %s", err.Error())) } Expect(actualBody).To(Equal(expectedBody)) diff --git a/vendor/code.cloudfoundry.org/cli/util/testhelpers/net/server.go b/vendor/code.cloudfoundry.org/cli/util/testhelpers/net/server.go new file mode 100644 index 0000000..79be4b7 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/testhelpers/net/server.go @@ -0,0 +1,148 @@ +package net + +import ( + "fmt" + "net/http" + "net/http/httptest" + "net/url" + "strings" + + "github.com/onsi/ginkgo" +) + +type TestRequest struct { + Method string + Path string + Header http.Header + Matcher RequestMatcher + Response TestResponse +} + +type RequestMatcher func(*http.Request) + +type TestResponse struct { + Body string + Status int + Header http.Header +} + +type TestHandler struct { + Requests []TestRequest + CallCount int +} + +func (h *TestHandler) AllRequestsCalled() bool { + return h.CallCount == len(h.Requests) +} + +func urlQueryContains(container, containee url.Values) bool { + //Cloud Controller often uses "q" as a container for search queries, which may be semantically + //equivalent to CC but be actually different strings. + + //Example: "foo:bar;baz:qux" is semantically the same as "baz:qux;foo:bar". CC doesn't care about order. + + //Therefore, we crack apart "q" params on their seperator (a colon) and compare the resulting + //substrings. No other params seem to use semicolon separators AND are order-dependent, so we just + //run all params through the same process. + for key := range containee { + + containerValues := strings.Split(container.Get(key), ";") + containeeValues := strings.Split(containee.Get(key), ";") + + allValuesFound := make([]bool, len(containeeValues)) + + for index, expected := range containeeValues { + for _, actual := range containerValues { + if expected == actual { + allValuesFound[index] = true + break + } + } + } + for _, ok := range allValuesFound { + if !ok { + return false + } + } + } + + return true +} + +func (h *TestHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + defer ginkgo.GinkgoRecover() + + if len(h.Requests) <= h.CallCount { + h.logError("Index out of range! Test server called too many times. Final Request:", r.Method, r.RequestURI) + return + } + + tester := h.Requests[h.CallCount] + h.CallCount++ + + // match method + if tester.Method != r.Method { + h.logError("Method does not match.\nExpected: %s\nActual: %s", tester.Method, r.Method) + } + + // match path + paths := strings.Split(tester.Path, "?") + if paths[0] != r.URL.Path { + h.logError("Path does not match.\nExpected: %s\nActual: %s", paths[0], r.URL.Path) + } + // match query string + if len(paths) > 1 { + actualValues, _ := url.ParseQuery(r.URL.RawQuery) + expectedValues, _ := url.ParseQuery(paths[1]) + + if !urlQueryContains(actualValues, expectedValues) { + h.logError("Query string does not match.\nExpected: %s\nActual: %s", paths[1], r.URL.RawQuery) + } + } + + for key, values := range tester.Header { + key = http.CanonicalHeaderKey(key) + actualValues := strings.Join(r.Header[key], ";") + expectedValues := strings.Join(values, ";") + + if key == "Authorization" && !strings.Contains(actualValues, expectedValues) { + h.logError("%s header is not contained in actual value.\nExpected: %s\nActual: %s", key, expectedValues, actualValues) + } + if key != "Authorization" && actualValues != expectedValues { + h.logError("%s header did not match.\nExpected: %s\nActual: %s", key, expectedValues, actualValues) + } + } + + // match custom request matcher + if tester.Matcher != nil { + tester.Matcher(r) + } + + // set response headers + header := w.Header() + for name, values := range tester.Response.Header { + if len(values) < 1 { + continue + } + header.Set(name, values[0]) + } + + // write response + w.WriteHeader(tester.Response.Status) + fmt.Fprintln(w, tester.Response.Body) +} + +func NewTLSServer(requests []TestRequest) (*httptest.Server, *TestHandler) { + handler := &TestHandler{Requests: requests} + return httptest.NewTLSServer(handler), handler +} + +func NewServer(requests []TestRequest) (*httptest.Server, *TestHandler) { + handler := &TestHandler{Requests: requests} + return httptest.NewServer(handler), handler +} + +func (h *TestHandler) logError(msg string, args ...interface{}) { + println(fmt.Sprintf(msg, args...)) + ginkgo.Fail("failed") +} diff --git a/vendor/code.cloudfoundry.org/cli/util/testhelpers/terminal/ui.go b/vendor/code.cloudfoundry.org/cli/util/testhelpers/terminal/ui.go new file mode 100644 index 0000000..8354891 --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/testhelpers/terminal/ui.go @@ -0,0 +1,179 @@ +package terminal + +import ( + "fmt" + "io" + "strings" + "sync" + "time" + + "os" + + "code.cloudfoundry.org/cli/cf/configuration/coreconfig" + term "code.cloudfoundry.org/cli/cf/terminal" +) + +type FakeUI struct { + outputs []string + uncapturedOutput []string + WarnOutputs []string + Prompts []string + PasswordPrompts []string + Inputs []string + FailedWithUsage bool + FailedWithUsageCommandName string + ShowConfigurationCalled bool + NotifyUpdateIfNeededCallCount int + + sayMutex sync.Mutex +} + +func (ui *FakeUI) Outputs() []string { + ui.sayMutex.Lock() + defer ui.sayMutex.Unlock() + + return ui.outputs +} + +func (ui *FakeUI) UncapturedOutput() []string { + ui.sayMutex.Lock() + defer ui.sayMutex.Unlock() + + return ui.uncapturedOutput +} + +func (ui *FakeUI) PrintPaginator(rows []string, err error) { + if err != nil { + ui.Failed(err.Error()) + return + } + + for _, row := range rows { + ui.Say(row) + } +} + +func (ui *FakeUI) Writer() io.Writer { + return os.Stdout +} + +func (ui *FakeUI) PrintCapturingNoOutput(message string, args ...interface{}) { + ui.sayMutex.Lock() + defer ui.sayMutex.Unlock() + + message = fmt.Sprintf(message, args...) + ui.uncapturedOutput = append(ui.uncapturedOutput, strings.Split(message, "\n")...) + return +} + +func (ui *FakeUI) Say(message string, args ...interface{}) { + ui.sayMutex.Lock() + defer ui.sayMutex.Unlock() + + message = fmt.Sprintf(message, args...) + ui.outputs = append(ui.outputs, strings.Split(message, "\n")...) + return +} + +func (ui *FakeUI) Warn(message string, args ...interface{}) { + message = fmt.Sprintf(message, args...) + ui.WarnOutputs = append(ui.WarnOutputs, strings.Split(message, "\n")...) + ui.Say(message, args...) + return +} + +func (ui *FakeUI) Ask(prompt string) string { + ui.Prompts = append(ui.Prompts, prompt) + + if len(ui.Inputs) == 0 { + panic("No input provided to Fake UI for prompt: " + prompt) + } + + answer := ui.Inputs[0] + ui.Inputs = ui.Inputs[1:] + return answer +} + +func (ui *FakeUI) ConfirmDelete(modelType, modelName string) bool { + return ui.Confirm(fmt.Sprintf( + "Really delete the %s %s?%s", + modelType, + term.EntityNameColor(modelName), + term.PromptColor(">"))) +} + +func (ui *FakeUI) ConfirmDeleteWithAssociations(modelType, modelName string) bool { + return ui.ConfirmDelete(modelType, modelName) +} + +func (ui *FakeUI) Confirm(prompt string) bool { + response := ui.Ask(prompt) + switch strings.ToLower(response) { + case "y", "yes": + return true + } + return false +} + +func (ui *FakeUI) AskForPassword(prompt string) string { + ui.PasswordPrompts = append(ui.PasswordPrompts, prompt) + + if len(ui.Inputs) == 0 { + panic("No input provided to Fake UI for prompt: " + prompt) + } + + answer := ui.Inputs[0] + ui.Inputs = ui.Inputs[1:] + return answer +} + +func (ui *FakeUI) Ok() { + ui.Say("OK") +} + +func (ui *FakeUI) Failed(message string, args ...interface{}) { + ui.Say("FAILED") + ui.Say(message, args...) +} + +func (ui *FakeUI) DumpWarnOutputs() string { + return "****************************\n" + strings.Join(ui.WarnOutputs, "\n") +} + +func (ui *FakeUI) DumpOutputs() string { + return "****************************\n" + strings.Join(ui.Outputs(), "\n") +} + +func (ui *FakeUI) DumpPrompts() string { + return "****************************\n" + strings.Join(ui.Prompts, "\n") +} + +func (ui *FakeUI) ClearOutputs() { + ui.sayMutex.Lock() + defer ui.sayMutex.Unlock() + + ui.outputs = []string{} +} + +func (ui *FakeUI) ShowConfiguration(config coreconfig.Reader) error { + ui.ShowConfigurationCalled = true + return nil +} + +func (ui *FakeUI) LoadingIndication() { +} + +func (ui *FakeUI) Wait(duration time.Duration) { + time.Sleep(duration) +} + +func (ui *FakeUI) Table(headers []string) *term.UITable { + return &term.UITable{ + UI: ui, + Table: term.NewTable(headers), + } +} + +func (ui *FakeUI) NotifyUpdateIfNeeded(config coreconfig.Reader) { + ui.NotifyUpdateIfNeededCallCount += 1 +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/generator/generator.go b/vendor/code.cloudfoundry.org/cli/util/words/generator/generator.go similarity index 78% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/words/generator/generator.go rename to vendor/code.cloudfoundry.org/cli/util/words/generator/generator.go index d3895a5..575581a 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/words/generator/generator.go +++ b/vendor/code.cloudfoundry.org/cli/util/words/generator/generator.go @@ -5,9 +5,11 @@ import ( "strings" "time" - . "github.com/cloudfoundry/cli/words" + . "code.cloudfoundry.org/cli/util/words" ) +//go:generate counterfeiter . WordGenerator + type WordGenerator interface { Babble() string } @@ -27,8 +29,8 @@ func (wg wordGenerator) Babble() (word string) { } func NewWordGenerator() WordGenerator { - adjectiveBytes, _ := Asset("words/dict/adjectives.txt") - nounBytes, _ := Asset("words/dict/nouns.txt") + adjectiveBytes, _ := Asset("util/words/dict/adjectives.txt") + nounBytes, _ := Asset("util/words/dict/nouns.txt") source := rand.NewSource(time.Now().UnixNano()) return wordGenerator{ diff --git a/vendor/code.cloudfoundry.org/cli/util/words/words.go b/vendor/code.cloudfoundry.org/cli/util/words/words.go new file mode 100644 index 0000000..d5ad7ce --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/util/words/words.go @@ -0,0 +1,264 @@ +// Code generated by go-bindata. +// sources: +// util/words/dict/adjectives.txt +// util/words/dict/nouns.txt +// DO NOT EDIT! + +package words + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _utilWordsDictAdjectivesTxt = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x6c\x5d\xd7\x9a\xe4\xac\xae\xbd\x9f\xb7\xc4\x98\xb2\xf9\x1b\x83\x87\x50\xdd\xee\xa7\x3f\x9f\xb4\x24\x41\xcd\x3e\x37\x66\x89\x28\x92\x10\xd1\x6e\x73\xbe\xc7\xec\xd2\x1f\xb7\xb9\xd8\xc2\x4e\x66\xde\x4b\x76\x5b\x0a\x8a\x61\x2b\x8e\x2d\x7a\x32\xba\x7a\xf8\x89\x1c\x78\x73\x1d\x60\x8f\x5e\x9c\x08\xe5\x2e\xa0\xc7\x37\xdb\x95\x4b\x52\x63\x54\x46\x23\x38\x7c\x60\x8f\xa1\x56\x67\xa0\xc7\x02\x9f\xa1\x35\x04\x0e\x0f\x5c\x4f\x8e\x04\x89\x9c\xa5\x56\x04\x8e\x7b\xcc\x07\x99\x42\x96\x23\xe4\xd0\x99\xdb\x58\xcc\xac\xe5\x3e\x81\x6b\x8d\x1d\xf1\x01\x0a\x87\xff\x05\xdf\xc5\x10\x8b\x51\x5d\x2f\xf5\xf9\xe3\xb6\x44\x9e\x98\xa7\xa4\xde\x13\x3e\xf7\xe9\x2a\x32\x93\xc2\xdd\xa3\x87\xa7\x50\xf9\xdb\x28\xc2\x34\xc0\x57\x1a\xed\x64\x83\xf3\xc7\xd1\xe6\x52\x2f\x0e\x50\x52\x6c\xa7\xc4\x59\x52\x9c\x3e\x96\x0c\x97\x0a\xaf\x35\x1e\x52\x92\xa5\xf6\xf8\x72\x5e\xf2\x4d\x54\x99\x0e\xcc\x64\x19\x89\xf3\x5c\xde\xe1\xa8\x65\x64\xaa\xc8\xf2\xf3\xc7\x6d\xd5\xed\x28\x82\xea\xb2\x3f\xa3\xeb\xe4\xbb\xc6\xfd\x90\xc4\x08\x86\x15\x53\xc8\x5a\xcc\xb9\x1c\x5a\x0e\x75\xdc\x14\x4f\xf3\xa1\xa1\xa1\x34\xb0\xd3\x62\xee\x27\x5a\x86\xc0\x4c\xb0\xa4\xc1\x69\x31\x88\x0d\xd5\xc3\x04\x4a\xba\x95\xf4\x96\x44\x08\x4a\x5c\x25\x3b\x01\x75\x33\xd7\xba\x21\x3d\x02\xe6\x8a\xa6\xd0\x4a\xbd\x7b\x2c\x57\xe8\x55\x12\x20\x9a\xf9\x6d\x3d\x5c\x11\x35\xd6\x7a\xc8\x7d\xe2\x7a\x48\x34\x3d\xd4\xa6\x9e\x63\x56\xcb\xea\xfc\x04\x48\x99\xa1\x16\xba\x50\x12\xae\x8e\xc6\x60\x54\xf2\x29\xd5\x30\xb2\x94\xfa\x68\x92\x8b\x21\x09\x8d\xde\xc1\xf9\xf8\xfd\xfd\xe3\xb6\xa7\xa1\x5d\x3c\xad\x91\xe9\xdd\x1e\x2e\x8a\x41\x00\xec\x72\x3f\x9d\x0f\xcc\x3e\x13\x31\x07\x41\xc5\xbb\x7a\x4f\x87\xe2\x93\xdb\x17\x32\xee\x8a\xee\x1e\xea\x73\x70\xd5\xc0\xa2\x23\x15\x82\xf0\x7f\xe7\x88\xd4\xea\x1e\x1d\xbb\xd5\xe8\xe3\x2e\x76\x71\x47\xd0\x2a\x71\xd6\x3b\xa4\x24\x21\x09\x1b\x14\xd0\x5d\xa2\xee\xc5\xf1\x0c\x89\x64\xa4\xd0\x20\x06\xbc\x0f\x29\x54\x94\x8c\xe0\xbc\x17\xc3\x28\x5b\x4f\x7e\x53\x68\x4d\xe0\x30\xff\x84\x13\xa3\xbb\x9b\xe5\x8d\xae\xce\x88\x2a\xcd\x53\x3b\x8d\xea\xda\x9a\xd4\x1e\xe3\x52\x91\x57\x1f\xf7\x90\xbb\xc0\x3b\xf6\xba\x40\x14\xb2\x4f\xee\x12\xd9\xe0\x7d\x8a\x97\xb3\x04\x99\x88\xed\x93\xfc\x9d\xe4\x3b\x76\x94\x05\x61\x41\x25\xb9\x1d\xbc\x95\xe4\x84\xcb\x72\x5d\x65\xd7\x60\x20\xd0\x42\x26\xa5\x9c\x2b\xfd\x16\xbf\xf7\x14\x26\x46\x4a\xa4\x75\x46\x59\x77\x29\x98\x52\x77\x8d\xb8\x59\x36\x4a\x53\x3e\x46\x36\xcb\x3a\x2b\xaa\x06\x93\x51\x20\x90\xf8\x48\x7d\xd4\x85\x35\xa5\xc5\xf5\xda\x24\xf8\xb8\x46\xd2\x58\x19\x9b\x97\xca\xa2\x88\x40\x03\x03\xc3\xca\x72\x34\x95\xc2\x8a\xcd\xda\x6a\x0e\xc4\x03\xd8\xcb\xc5\x71\x84\x94\x46\x72\x95\x50\x86\x40\xf0\x24\xb7\xa5\x75\x06\x49\x32\xd4\x0d\x5f\x78\xa8\xa5\xc1\x56\x7d\xbd\xc5\x9b\x96\x41\x68\x65\x7f\x72\x30\x24\xfe\x3a\xf5\x76\x24\xc6\x30\xbe\x4a\xbd\x40\xa1\x48\x31\x34\x91\xa1\xe2\xc9\x87\x2e\xa2\x8a\x33\x11\x7a\xc9\x6a\x2d\x71\x3e\x29\xa8\xd5\xc3\xa2\xc4\x9f\x21\x26\x14\xff\x19\xa4\x8b\x9e\x31\x88\xe8\xf4\xa7\x39\x26\x77\x3d\x3b\x38\x07\x16\x81\x71\xa6\x52\xcf\x67\x47\xfa\x44\x94\xfb\x7c\xb4\xef\x9e\x45\x12\x29\x69\x88\x8f\x92\xf7\x1a\xfb\xc4\xe5\x4e\xae\x09\x5d\x0b\x35\xf2\x09\x69\xa4\x4d\x93\x42\x94\xb5\x5c\xea\x25\x3f\x5e\xc4\x4b\xf4\x52\x56\x0c\x98\xcb\xb8\xb3\xb7\xb8\xc7\x57\x94\xdc\xc4\x7d\x16\x95\x61\xce\x72\xdc\x69\xb0\x17\x07\x4d\x56\x90\xda\x76\x01\x43\x32\x17\xf7\xa1\x51\x51\x09\x69\xfd\xc4\x6c\xc2\x94\x60\x7c\x95\x14\x3f\x48\xf5\x55\xcd\x1a\xb1\xe4\xe9\x06\x87\xaf\x5c\xbe\x53\xb0\xf1\xd3\x23\xdf\xb9\x40\xde\x15\xff\xb5\xc5\xc4\x28\x24\x2a\x9f\x20\x90\xc3\x96\x44\x4d\xa4\x64\x29\xea\x52\x59\x07\xf3\xa5\x5d\x32\x56\xfa\x42\x8d\x61\x2f\x92\x56\x19\x62\xfd\x77\xb8\x98\xd1\xc0\xfe\x8e\x68\x8d\xf4\xef\x88\x2a\x50\xff\x8e\xd8\xa2\x74\x9a\xca\x1e\x6b\xc4\xf7\x2a\x59\xf2\xc4\x55\xcc\x6c\xd6\xb2\x49\x9d\xd6\x65\x34\xa9\x05\x3d\x47\x1d\x96\x6e\x54\xcb\x5e\x38\xc9\x5a\xf6\x5a\x2e\x4e\xc5\x2a\xa7\x96\x43\x3b\x48\x25\xfd\xe6\x14\xdb\x54\x0e\x41\x57\x38\x2c\xda\x2c\x1c\x64\xe3\x85\x5a\xcc\x02\x35\xa6\xfc\x5c\x1a\xe4\xb9\xd4\xf2\x0e\x5d\xbc\xde\x67\xd1\xe4\x6f\x4a\x95\xc7\xaa\x5a\xda\x5d\xaa\x7a\xee\xa1\x8a\xe7\x1e\x44\x86\x54\x69\x31\x55\x7a\x9a\x8a\x3f\xd1\x96\xbd\x88\xe1\x1e\x33\xc6\xcd\x2e\x0d\xa1\xcf\x96\xd0\x63\x2e\x9b\xf3\x31\x25\x89\x8b\x2c\xfc\x69\x43\x37\x91\x5a\x48\x84\x8f\xea\xa0\x9c\x32\xc5\xb5\x42\x20\xc5\x19\xda\x3a\xc0\x24\x2c\xaa\xab\xd4\x25\xf8\xf5\x98\xe0\x10\x72\x61\x62\x1d\xf0\x59\x4c\x6b\xde\x4a\x96\x31\x55\x5a\x88\x8c\xa5\x64\x68\xcb\xeb\xc3\x49\x11\x01\x51\x1c\x03\xed\x77\xa4\x20\x80\xf4\x55\x43\xe0\x62\x80\xee\x31\xc5\x7c\x20\xda\xc7\x73\xd9\xee\xce\xf7\x07\xed\x67\x77\x07\xc7\x4d\x66\xe8\xbd\x00\xb1\x71\xf1\x40\x05\x93\x87\xdf\xdd\xe9\x00\xcf\x48\x87\x1b\x22\x98\xf9\x5d\xe6\x26\xbb\x8c\x76\xfb\x1e\xd5\x84\xe6\xc6\x00\x5e\xf7\xd8\xdd\x45\xa3\x3d\x89\x4b\xa2\x34\xb2\x3d\x4e\x1f\x05\x8e\x29\x6c\xd5\xc5\x8c\x18\x52\xb8\x9d\x44\x56\x30\x56\xed\x34\x9d\xd1\x14\x65\x66\x43\x20\x9a\x95\xc4\x18\x32\x75\x29\x92\x17\x2a\x1e\xc9\x8a\xaa\x1d\x26\xa7\x1f\x32\x7a\x87\x12\xab\xd7\x29\xaa\xf7\x40\xda\xf7\x1e\xfe\xa2\x22\x76\x9d\x32\xed\x67\x50\xd5\x86\x21\xdb\x45\x27\x7d\x9a\x54\x39\x69\xb6\x7b\x74\xf7\x59\x6a\xe8\x0b\x21\x15\x2e\x14\xd2\xc1\x24\x63\x8f\x77\xd1\x21\x91\xf0\x2d\xda\x1c\xf0\x8f\x42\x1a\x39\xf7\xff\x9c\x14\x01\x66\x54\xcc\xca\x7f\x25\x66\xee\x3e\xfb\x7f\x63\x4e\x0e\xf7\xff\x46\xf6\x06\x75\xd2\xb5\xff\x37\x54\x1f\x61\x78\x89\x4e\xb6\xff\x37\xde\x68\x11\x17\x65\x01\x03\x08\x63\xd2\xc0\xe1\x5f\x29\xf3\x46\x84\x55\xed\xb4\x78\xc3\xf3\x0c\xb6\x58\xaa\x9a\x08\x28\x96\xbd\x9b\xd7\xde\xd5\x9d\xc4\xb5\x68\x20\x4a\x10\xff\xe8\x08\x7b\x31\xfd\x76\x2f\xd6\x6e\x0b\xb4\x51\x32\x95\xab\xa2\xad\xb7\x28\x3b\xda\xae\x6a\x80\x8f\x1a\x72\xa8\x2c\x30\x09\x16\x4f\xd3\x3c\xcf\x33\x5b\xd8\x95\x48\x89\x34\x1f\x7b\x94\x69\xcd\xde\x7c\x8d\xdc\x42\xe6\xcc\x69\xb7\x09\xd3\x3e\xa7\x45\x3b\x15\xa3\xf1\x39\xae\x8d\xc5\x22\x80\xfa\xc8\x94\xc8\xa0\x39\xed\xfe\x76\xd9\x33\x6b\x54\x13\xee\xc0\xb8\xb9\xbf\x75\xea\xbc\xd3\xbc\x2d\x62\x5d\x40\xb1\x7a\xc9\x8b\x97\x51\xc3\x6b\xa4\x49\x34\x16\x89\x42\x69\x80\xba\x41\x32\x11\x54\xad\x8f\xb1\x98\x1d\x3c\x13\x52\xbd\x1b\xc4\xaf\x12\xd3\x1a\x0b\x1d\x64\xa2\x8a\xde\xc5\x6b\x6b\x7b\xb2\xe3\xc1\x24\xfc\x71\xc1\x33\xe7\x61\x0f\xee\x00\x88\x24\x8a\x49\xe0\x85\x8c\xbc\x86\x92\xac\xe0\x43\xc1\x48\x10\xaa\x48\x45\x19\x49\x42\x8d\x2f\xe9\x2b\x04\x79\x68\x08\x34\xae\x7a\x1a\x6b\x66\xef\x66\xbb\xa4\x62\x36\xd8\xc8\x4b\xc8\x4c\x1d\x2a\x17\x42\xc3\xca\x22\x47\xe0\x11\x38\x18\xb6\x0c\x19\x96\x00\x41\x35\xb7\x60\x03\x34\x21\x1d\x83\x26\x16\xff\x32\x0c\x85\xba\xf0\xb0\x32\xc0\x72\xd9\x0b\xc4\x04\x89\x60\xf0\xa7\xcb\xd3\x53\xd8\x17\x8c\xb1\x2c\xd0\x50\x3f\xfa\x07\x14\x2f\xa4\xc0\xb9\x1e\x92\xb8\xdd\xa7\x15\x45\xf3\x52\xea\x95\xa6\x2b\x1a\xb8\x9f\xa1\x5e\x1f\x79\xb6\xda\xa9\xe3\x90\x91\x28\x50\x45\x87\xd6\xcf\xa0\x09\x35\x11\x4c\x34\x9b\xb1\x2c\xbd\x82\xa3\x49\xfb\x2b\x6c\x35\x52\xb3\x79\xbd\xd0\x7c\x5e\xaf\x80\xe1\x83\x01\x8b\x31\x20\x74\x60\xc3\x1d\x7e\xb1\x3a\xf5\x7a\x85\xde\x47\x69\x85\x60\x94\x6e\xf3\x7a\xc5\x14\x35\xd2\x28\xa1\xb9\xe0\xd8\x80\x8f\x2c\x03\xd0\xeb\x15\xeb\x65\x9e\xeb\xe5\x56\x6b\x34\xde\xd7\x2b\xfe\x20\x12\x99\x3f\xbe\x5e\x29\x2e\x83\xba\x90\x08\x26\xeb\x51\xaf\x97\xcd\x06\x5f\xaf\x5a\x72\x77\x0a\xe0\xaf\xa0\x2c\x4a\x0d\x17\xaf\x92\x80\xad\x52\x43\x73\x51\x50\x3f\xcb\x38\x4e\x8a\xab\xc2\xae\x53\x25\x90\x80\x20\xd4\x4e\x32\xd8\x1a\x96\x07\xea\xe6\x70\xd7\x5c\xa1\x3b\x1c\x29\x32\xa2\x78\x1f\x5c\xe3\x5f\x81\x11\x8f\x87\x87\xfb\x25\x8a\x62\x39\x02\x23\x64\xe8\x08\xa9\x50\xf9\xcf\x78\x88\x47\x62\x98\xc1\x7b\x22\x0e\x34\x78\xed\xf2\x38\xdc\x0e\x33\x95\xcb\xd6\x13\x8e\x23\x8d\xae\x8b\x6c\x4a\x50\x01\x29\xfe\xf0\xa6\x1d\xe6\x38\xaa\x9b\x73\x70\xa2\xde\xe6\xb1\x86\x43\x63\x23\xd8\x17\x94\x1e\xc3\x8b\x67\x54\x22\x61\x19\x68\x8e\xd3\x71\x81\x71\xf3\x3b\xa2\x0c\x1a\x47\x9c\xba\xce\x61\xeb\x96\x8c\x8a\x9a\x90\x3c\x47\x0a\xee\x62\x83\xe2\x4d\xf1\xba\x42\x65\xc0\xf9\x22\x49\x13\x32\x83\xde\xe1\x50\xbe\xff\xb8\x43\x55\xb7\x63\x1a\xd0\xb4\x09\x71\xa6\xd9\xe4\x04\xb2\x2e\xe7\x1e\x85\xaa\x41\x98\x82\xba\x4d\x06\x04\x0c\xa1\x5f\xee\x28\x26\x5d\x0e\x15\x92\x54\x64\xb0\x08\xa2\x34\x11\xda\xd9\x68\x3c\xd0\x33\x80\x97\x28\x2b\x09\x6c\xbb\x74\xd5\x63\x15\x8d\xc7\xa7\x68\x3c\xea\xe2\xb0\xda\x66\xcc\x44\x15\x89\x6d\xeb\x65\x61\x72\x21\xa7\xfb\x8c\x4e\x09\xb8\x3d\x77\x86\x08\x3e\x86\xb6\xdf\x11\xdb\xf9\xc7\x9d\xb1\x51\x95\xf8\x89\x28\xc0\x59\x78\xec\x3a\x07\xcd\x02\xcf\x91\x8f\xc0\xd3\xb1\xb8\xf3\x58\x18\x77\x34\xf1\x78\x8c\x98\x52\xe8\xdc\x85\x62\xe2\x05\x3e\x4f\x88\xcb\x33\xa6\x51\x6d\x96\x2b\x04\x44\x64\xbc\x10\xcd\x25\xd1\xd4\x8d\x26\x91\x04\x22\xd5\x35\x19\xd4\xb6\x62\x55\x77\x70\x1c\xeb\x5d\x4b\x79\x11\x68\xd1\x7f\x91\xd9\x23\x77\xee\x58\xbf\x4b\xed\xe7\x43\x88\x3e\x2d\x11\x47\x5f\x31\xf3\x07\xdd\x2f\xf1\xd4\x91\x1b\x0b\xab\x63\xc9\xa9\xc8\xc2\x3a\x04\xe6\xf6\x69\x53\x0d\x23\x6d\xd0\x3e\xd9\x44\x25\xa7\x2d\x8a\xc9\x33\x07\xea\xfd\x06\xa9\xd4\x84\xe0\x24\x18\x62\x16\x9f\xb6\x51\xc5\x16\x13\x2c\x05\x4d\x9a\x6a\xf2\x1c\x95\x8f\x3b\x0b\xd8\xe4\x93\x63\xba\x9c\x25\xd9\x48\xf4\x41\x22\x14\x59\x3c\xe0\x68\x0f\xe7\xb3\x0b\xaa\x97\x03\xe7\x41\xba\x6d\x0a\x3e\x76\x9e\x9c\xa6\x70\x6d\xa4\xd3\x52\xf1\xa4\x50\x29\x9b\x01\x95\xc6\xa6\x36\x9f\x85\x40\xa8\x51\x8b\x44\xf9\x13\x0d\xdc\xa7\xab\xc8\xcd\x8b\xf4\xb2\xf2\xc7\x25\xd6\x45\xd2\xc1\x93\x10\xcf\xa8\x89\x09\x36\x0f\xce\xe8\x51\xc4\x48\xee\x40\x6c\xc7\x92\xd8\x31\xb3\x7c\xac\xd9\x3d\xca\x7d\xba\x03\xe5\x78\xd0\x0c\xe0\x12\x3f\x35\xf6\x53\xb0\xf6\x8e\x04\xbd\x37\x45\x9d\xc6\xa5\x18\x44\x7e\xea\x6a\x57\x8a\xaa\xad\x0b\xe2\x92\x02\x84\xd8\x4a\xbc\xea\xc0\x45\x15\x6f\x31\x4e\x88\x99\x14\xff\x0e\x96\xc0\x04\x0a\x9b\x8d\xbf\x7d\x54\xcd\x07\xe2\xf8\x72\xa7\x88\x08\x83\xec\xfa\xe5\x4c\xe7\x26\x2c\x1e\x92\xad\x28\x31\x61\x05\x31\x09\x0d\x8c\x96\x42\xa0\x2d\x01\x7e\x27\xd6\x36\xf9\x85\x35\x82\x94\x9c\xac\xd8\x10\xea\x65\x41\x3b\xa3\x7a\x60\x25\x3b\xe9\x4a\x67\x4a\x41\xd7\x87\x18\xee\x30\x23\xf2\x9d\xc2\xa1\xc2\x42\xb0\xe4\x32\x85\xa3\x62\x76\xcc\x10\xa6\xb0\x10\xd2\x5c\x08\x20\x6a\x44\xa7\x81\xaa\x8c\x5a\x0c\x05\xbc\xe3\x64\x85\x30\x1a\xb3\xaa\x25\x04\x64\x54\x4e\x09\xd5\x94\x62\xb7\x41\x33\xa5\xb2\x39\x94\x5e\x2a\x5e\x83\x14\x7f\xf6\x53\x56\xa6\x52\x2a\x7b\x44\x06\x0a\x8d\xf8\x62\x67\x8c\xd0\x08\xac\x96\x56\x13\x1f\x39\x28\xf9\x70\x30\x1f\x0b\x7e\xbb\xae\xae\xb7\xb3\x40\x77\x48\xee\x50\x2c\x6b\x3e\x0c\x9f\xc4\x43\x0d\xe1\xe4\xda\xa5\xe5\x01\x4a\x71\x49\xcf\x9d\xa4\xa2\x4a\xaf\xf1\x83\x07\xd5\x22\x09\x76\xcb\x67\x7f\xd4\xf2\x4d\x32\x35\xa5\xf2\x6d\x6e\xdf\x28\xac\x51\x59\x4e\xa7\x24\x3b\x3c\x29\x8d\xb7\x94\x87\xb4\x99\x8b\xc4\x2b\x95\xf9\x55\xf2\x0e\x21\xcc\x90\xac\xb4\xec\x8a\x74\xed\x92\x8f\x76\xc6\x9b\x0a\x81\x85\x34\xe5\xd9\xb3\xcb\x1d\x9a\x6c\x4a\xa4\xfb\x74\x9b\xf8\x57\xc8\x91\xdc\xa7\xbb\x42\x55\xfb\x3c\x8c\x40\xb0\x36\x57\x3e\x13\x35\xbe\xae\x5b\x30\x8c\xb2\x5a\x49\xc5\xf7\x50\xb3\x18\xe2\xb6\xf6\x9d\x4e\x53\xe5\xab\x30\xea\x63\x87\x8a\x90\xc8\x39\x0a\x1a\xda\x94\x31\x6f\x4f\xe3\x12\x99\xc7\x40\xe7\x4b\x4c\xcd\xf1\x38\x4d\xd1\x3f\xba\x31\xfb\x0e\x22\x6b\xdf\xa1\x20\x32\x06\x3c\xd2\xbc\x91\xb7\xef\x48\xd4\x45\xb2\x53\xc6\x23\xc1\xc8\xcd\xe5\x32\x46\x85\xcb\xd5\x75\x3b\x4d\x48\x75\x7a\x52\x8a\xfb\x74\x6b\x4d\xa3\xea\x61\x54\x1e\xe8\x67\x84\xe8\x47\x97\x1b\xb2\x8c\x78\xb9\x5f\xe2\xf1\x72\xd0\x83\xae\xcd\x1d\x98\x0a\x5f\x1b\x45\xb4\x8b\xc6\x76\x6d\x41\x06\x62\x42\xe2\x81\xe7\x2b\xd7\x16\xf7\xf0\xc3\x7a\x9a\xc0\x8a\x00\xc0\xe2\x15\xcb\x33\xd7\x16\x8f\xa1\x36\x54\x12\xea\xb5\x85\x9f\xa1\x90\x47\x5c\x89\xae\x3d\x29\x39\x56\x1b\xae\x2d\xce\xf9\x02\x08\x89\xe7\xed\x92\x44\x9e\x1e\x74\x86\x6b\xab\xa5\x99\x7c\x10\x8a\x63\x1f\xa4\x08\x18\x44\xa8\x91\xb4\x50\xb6\xd1\x4e\xc9\x64\x40\xa2\x61\xe3\x8e\x77\x05\x99\xc3\x5e\x21\x45\x5d\xfe\x10\x2c\x05\x1b\x52\xd9\x74\xde\x7a\xe9\x70\x73\x85\xbc\x2f\x48\x92\x09\xb9\xd4\x7a\x06\x66\x43\xb0\x84\x22\x5c\x56\x87\xa2\x2e\xd6\xaa\x74\xdc\xe2\x49\x8f\x36\x47\x10\x3c\xb2\x5d\xa1\xea\x22\x1f\xf5\x23\x65\xa8\xf3\xbe\x3d\xe0\xf9\x34\xac\x53\x0a\xd6\x2c\xab\x2c\xb9\x44\xc6\x5e\x71\x36\xb2\x68\x1b\xb3\x06\x99\x0b\xf8\xf7\x1a\x60\x07\x9d\x61\x74\x29\xb4\x6b\xd6\x05\x0d\xaa\xce\x1b\xe0\x38\x2e\x48\x44\x36\xfb\x44\x48\xed\x2a\xb9\x88\x91\xcc\x95\x14\x4b\xc4\x97\x65\x7c\xbd\xb2\xd6\x50\x09\x9b\x0b\x24\x55\x19\x49\xde\x8a\xd4\x67\xd1\x0a\xc5\x61\x85\xcb\x46\xae\xab\x54\x9e\x03\x5f\xb2\x9e\xc8\x32\x56\x51\xc7\x57\x07\x5b\xc6\x32\xd8\x5e\x77\x50\xb6\xee\x65\xe5\xe0\xba\x4f\x9a\xe2\x97\x2f\x44\x71\x9f\xd1\xd5\x7e\x56\x11\x9b\x44\xeb\xaa\x88\x60\xf5\xa6\xb5\x24\xb0\x2f\x84\xea\x48\x4a\x5a\x90\xea\xfc\xa9\xfe\x6c\x2b\x84\x89\xb3\x16\x73\xd0\x2d\x1c\x26\xfa\x23\x65\x7e\x9f\xf1\x08\xd9\x1c\x8e\xa2\xec\xc7\x2f\x57\x9f\xc9\xe2\x9d\x83\xec\xe4\x30\x45\x33\x8c\x87\x65\xda\x42\x06\xa3\xcc\x63\xdb\x5c\xc0\xe2\xd3\xa4\x56\x27\x54\x86\x51\xca\xc6\x1a\x79\x3f\x83\xb3\x42\x35\x4a\x0b\xa2\x9f\xb2\x18\xc6\x44\xf9\x5a\xa0\xc5\x46\xfe\x4f\x16\xbb\xa0\x8a\x95\x90\x0e\xf7\x04\x45\x99\x26\x58\x25\x16\x2b\x0c\xde\x7c\x61\x88\x4c\xa6\xe0\xb1\x6d\x4f\xb0\xc2\x68\x42\xfe\x44\xef\x46\x52\xfc\x2a\x29\x4a\xd2\x0b\x50\x3d\x0f\x58\x97\xf8\xae\x7b\xa4\x64\x3d\xe5\x1e\xaa\x8a\x5e\xba\xc5\x7c\x0d\x5e\x1e\xbc\x46\x83\xac\x96\xa1\xfb\x7a\x9c\xec\xc8\x5e\x0f\x94\xad\xeb\x39\x76\x37\xa3\x02\xc5\x89\x33\x9c\x5e\x54\x68\x80\xc8\xe6\x43\xbb\xf7\xb3\x44\x22\xc1\x92\x96\x54\xd6\xd5\xfa\x6c\xe7\x98\xb2\x4a\x99\xbc\x9c\xd1\xc8\x7a\x38\x23\x28\x79\xca\x84\x42\x61\xeb\x0b\xa5\x9e\x54\x98\x12\xc4\x38\xcd\x48\xed\x4a\x1a\x50\xb5\xf2\xdc\x64\xcc\xeb\x46\x1e\x11\xd3\x1e\x2b\x2c\xd9\xed\xb5\x5c\xe2\x8c\xc9\x58\xb6\x65\xcc\xbc\x2e\x56\xe6\xb9\x74\x63\x10\x3c\x1c\xe9\xb9\x25\x61\x81\xd3\xbe\x4f\xfb\xe9\x1f\xb3\xaa\xec\x8e\xea\xae\x4b\x4b\xcc\x08\x78\xd2\x53\x27\x84\xa6\x27\x9c\xd8\x62\x24\x73\xa9\xec\x4c\x0c\x00\x6a\x06\x53\x39\x24\x5b\x8b\x9a\x95\x5d\x7a\xa4\xe9\x10\x34\xbb\x5f\xb5\x33\xf1\x99\x9d\x29\x95\xd9\xe5\xbd\x4a\x5c\xb3\x0a\x6f\x67\x3e\xef\x89\xa4\xab\x10\x22\xd9\xd6\x58\xb4\x13\x45\xed\x46\x3d\xcd\x8a\xbc\x49\xe5\xc5\x50\x9c\xdd\xdd\xb5\xa4\xef\xfe\xf8\x4f\x08\x1f\xd5\x0b\x43\x04\x34\x0e\x12\xa3\x13\x09\x77\xcd\x55\xaf\xb0\xc7\xc3\x0a\xb0\xf5\x72\x69\x2a\xfd\x0c\x66\x8f\xe1\x2f\xbb\xae\xeb\x2b\x02\x59\x7f\x2f\x4b\x11\x93\xad\x95\x20\x11\x56\x74\x26\x46\xb2\x27\x0d\x97\xbd\xfb\x53\x75\x03\x86\x52\x09\x04\xe3\x84\xd0\x60\x00\x79\x70\x62\xf8\xb0\xf9\xc8\x7e\x6c\x96\x33\x73\xd9\xc7\x84\x05\x8a\xcc\xa7\x7b\x90\x0a\x16\xb3\xc8\x64\xf1\x99\x7d\x75\x7f\x1c\x9f\xdc\x0a\x62\x46\x1a\x33\xf3\x1e\x9a\xa4\xbb\xd7\x62\x47\x4b\x98\xa8\xce\x1c\xf6\x58\x82\xc7\x00\x44\xa4\x88\x53\x82\x22\x1c\x05\x9a\x0f\xeb\x60\xdc\x97\xf2\x47\x68\xde\xdb\x06\x15\xfc\x5e\xc0\x30\x23\x8e\x29\xf8\xb3\x00\x58\xa3\x08\xd4\xf4\xc1\x98\x74\xc8\x70\x15\xaf\xdb\x7a\x44\x98\x96\x4d\x84\x0e\xb0\x13\x23\x89\x45\x27\x20\x42\x55\x99\x1c\xf2\x3c\x10\x90\xc3\x1d\x97\xc8\x30\xd3\xcc\x01\x67\xc3\x72\x18\xfe\x64\x43\x26\x5b\x39\x0c\x49\x89\x74\xe8\x0b\xc9\x8c\x2a\x27\xdf\xf2\xab\x3a\xdf\xa1\xcb\xe6\x03\x52\x37\xcb\xb9\xc7\x7c\xc4\xa9\x0b\x12\xc1\xf2\x6f\xc9\x07\xac\xa4\xf9\x1c\xd1\xb6\x4e\x09\xb7\x3b\x54\x91\x50\x07\x56\xc4\xd8\xa4\xd1\x25\xf3\x8a\x9b\x88\x6c\x22\xb8\x11\xf3\x52\x1e\x0d\x0b\xf9\xc0\x94\x85\xcd\x0e\x27\x29\x91\xd3\x55\x51\xb2\xf2\x19\x76\x43\xa4\xa1\x09\x8e\xbb\x8c\xda\xf9\x7c\xf6\x2a\x35\x41\x70\xb1\x45\x5c\xd1\x4b\x18\x5e\xfc\xcd\x31\x41\xe9\xcb\xf1\xc2\xae\x97\x2c\x00\x13\x9d\x64\xf3\x53\xb1\x44\x70\x49\x75\x30\x90\x52\x8a\x17\xe6\x4a\x19\xc7\xd3\xa6\x65\x61\x93\x17\x58\x60\xc2\x45\x79\x68\x21\x7e\x19\x16\x83\x0b\x57\x31\xb6\xf0\x57\x2c\x5c\x34\x39\x0f\x42\xe8\x20\xed\x57\x43\xe8\x6a\x00\x61\x5d\x04\x00\x96\xa6\x27\xb8\x58\x1a\x73\xbb\x9b\x29\x9e\x96\x02\x9b\xaf\x2f\xeb\xda\x79\x66\x3a\x07\x8f\xcd\xc1\x9c\xc3\x8f\x08\x0e\x42\xba\x88\x9e\x73\x3c\x63\x52\x07\xc6\xe4\x64\xc1\x3f\x6d\x96\x10\xd0\x1b\x72\x2e\xfd\x03\x42\xcc\xe4\xd2\x65\xb2\x9a\x73\x19\x59\x67\x0b\x39\x97\x87\xd5\x8a\x9c\x07\xa2\x92\xca\xcb\xda\x9c\x32\xa9\x27\xe2\x77\x24\xde\x44\xcf\x79\x64\x1f\xcd\x92\xb0\x26\x08\x02\x49\x16\x34\x11\x59\x2d\xc8\x65\xa9\x78\xc2\x60\x06\xab\xde\xd9\x96\x53\x72\xb9\x63\xeb\xe7\xd2\x6f\x4a\x25\xbd\x2b\x29\x12\xbb\x7e\x4e\x20\x76\xba\x94\x42\x08\xa6\x6c\xd7\xe6\xf2\xa3\xe3\x7e\xf9\x31\xc0\x46\x43\x26\x5b\xc0\x6a\x45\x6e\xdf\xba\xce\xc0\x50\xc4\x76\xc7\xee\x81\x38\xf4\x65\x2f\x41\x88\x5f\x73\xb2\x85\xba\xdc\x5d\xf5\xea\x87\xc7\x2f\x25\x5a\x3f\x95\xd3\xee\xec\x04\x78\xee\x61\x0b\x29\x8d\x8b\xa1\x0f\x7a\xd8\x33\xf7\xb0\x47\x5e\xa6\xc9\x4c\xc8\xa6\x5a\xee\x21\x95\x5b\x2d\x09\x22\xd1\x40\xf3\xbf\x5d\xed\x2f\x3e\xdb\x0b\x87\xec\x34\xbe\x9c\x27\xe0\x9a\x62\xd4\xc5\x9b\x9e\x17\x62\x2c\xad\xa1\x87\x3c\x6e\x6c\x65\xe5\x1e\x4a\xdd\xa2\xc6\x75\x87\x3c\x52\x8f\x97\x06\xbf\xab\xcb\xbb\x7a\xbc\x6b\xa1\x79\x0e\x35\x56\xa6\x6b\x2c\x88\xad\x96\xdb\xd5\x18\x24\x92\x13\x2b\x02\x0c\xa2\x06\x3e\x67\xe9\x2f\x27\x87\xf3\xc7\x48\xdd\x4f\xf4\x42\x2d\xda\xb3\x3a\xbf\x62\x88\x74\x40\xb3\x2e\xf7\x32\x2c\x82\x9e\x5a\x9f\xd1\x1f\xd4\xd2\x1a\xff\xb5\x12\x3e\xd8\xf2\x1f\x4f\x9a\x38\xc3\xc5\x5f\x72\x1f\x89\xcb\x02\xfc\x4a\x2d\x9e\x4d\xfe\xac\xe4\xea\x6e\x1a\xdc\x42\x6b\x51\x91\x85\xed\x26\x09\xad\x8b\x95\x4a\x9e\x6e\x4d\xbe\x95\x8f\xd8\x40\x22\x74\xe4\xcf\xc7\x66\xe4\x4a\x6b\x25\xc7\x7f\xb6\x28\x61\x53\x71\xa8\xf9\x83\x54\xd7\x58\x7d\x75\x2f\x89\x0e\x5b\x1c\x60\x21\x4e\xc1\x08\xf2\x43\xe1\xec\xd1\xd1\x3c\x9e\xd4\x1a\xff\x7c\xd2\x3d\xfa\xff\xb1\x90\x4c\x90\x46\x18\xdb\xb5\x60\xf3\xac\x94\xf8\xdc\x9c\x17\x55\x94\xb1\x9e\xc4\x63\xca\xce\x45\x10\x15\xe5\x48\x26\x61\x53\x00\x28\x1e\xd6\xdd\xe2\x62\x51\xcd\xa3\x77\x0d\x1d\x26\xf2\xf1\xf3\x67\xfa\xe9\xae\xd6\x53\x12\xf2\x21\xeb\xf1\xef\x49\x59\x14\xd4\x88\x79\x03\xc0\x0a\xc8\x87\x1a\x78\x89\x25\x7d\x90\x16\xe2\x4c\xb6\xf4\xc1\x64\x21\x51\x25\x1a\x51\x8f\x3e\xde\x5a\xab\x04\xbb\xca\x34\x50\x5a\x5d\x4c\x40\xc0\x13\xf1\xb6\xc0\xef\x98\x26\x12\x01\x14\x69\x42\xd7\xac\x48\xfd\x5a\x3c\x29\xd4\xe3\x31\xb8\xf8\x89\x97\x4e\x23\x98\xca\xe6\x50\x8e\x03\x63\x55\x8f\xbe\xb8\x43\xd6\xf2\x26\xd5\xa7\xeb\x75\x85\xea\xad\x1c\x8c\x5c\x32\x5f\xae\x6b\xe4\xff\x97\x5e\x42\xd9\x6c\x9c\xe9\xfc\x0a\xbb\xad\x39\xc3\xa6\xf1\x09\xec\xd5\xa2\xc7\x3e\x66\x85\x2c\x16\x16\xed\x6a\x05\x15\x87\x6d\xbb\xae\xc1\x82\x7c\xe3\x7c\xc3\x3f\xa4\x45\x52\x6b\x69\xd3\xb9\xb1\x26\x23\x61\x6b\x58\x5a\x84\x10\x1a\x8e\x49\xe5\xd6\xce\xd5\x32\xa1\x13\xd9\x6e\x3b\x68\x06\xd5\xcf\xe3\x93\xa8\x5d\x44\x64\x73\xd8\x69\xa6\x22\x65\xbf\x93\x26\x3f\xbb\xe0\x24\xd5\x6f\xbc\x4f\x16\xf4\xe6\x23\x0e\x9d\x34\x11\xf1\x2e\xd5\x83\xbf\xbd\xd8\x9c\x6e\x12\x1a\x4b\xb9\x42\x9b\x6e\xdd\xac\x17\x2f\x26\x54\x76\x39\xe5\x4d\xf0\xc9\xb3\x09\x2a\xa1\x01\x98\x44\x93\x0c\xde\xa7\xd0\xe2\xea\x1c\xf6\xe1\x67\xc1\x1a\xa5\xae\x47\x99\x8d\x49\x89\xe9\xd6\x3f\x1c\xfb\x87\xeb\x75\xc7\xd9\xfc\x71\x98\x6e\x7a\xce\xfd\x1c\xc2\x87\x58\xfc\x3e\xb3\x54\xc2\xd2\x0a\x18\x4b\xd5\x86\x77\x49\xb3\x15\x1a\xa5\x69\x18\x2d\xdd\xd8\x2c\x96\x84\x7f\x6e\x97\x67\xdc\x3f\xb7\x48\xf0\x0f\x1f\xab\x18\xb7\x83\x49\x8c\xaf\xb8\xf8\x7c\x85\x5a\xcb\xe5\x0e\x1b\x64\xe3\x2b\x0c\x19\x11\x05\xae\x9e\x99\x5e\xa4\xda\xab\xb8\x4b\x5b\xd7\xab\x8c\x64\xb8\x46\xbf\xe4\xea\x35\xf2\x21\xf0\x70\xd7\x66\xde\x6c\x30\x8f\x47\x2e\x96\x8c\x60\x0d\x50\xde\xa1\xe6\x2b\x88\x3c\x99\xa4\xba\x5b\x5b\xfa\x5c\xc2\x61\xfa\x2d\x27\x60\xfe\xa5\xc5\xc7\x19\x43\x75\xd5\x9f\xff\x90\xc2\xc7\x24\xcd\xbd\x75\x5d\x4c\x27\x72\x5c\x22\x4a\x19\xcd\x72\x3a\x9f\x23\x5a\xce\x4e\x3b\xec\x91\x7b\xfc\x0a\x7d\x6a\x30\x34\x93\x80\xd2\x15\x53\x70\xc7\x08\x02\xdf\xc1\x0a\x88\x89\x49\xc5\x4d\xd5\x31\xc5\x33\x51\xde\xfb\x96\xd8\x64\xe3\xfb\x83\xb0\x70\x44\xa2\x6d\xa5\x72\x38\xdb\xae\x07\xbd\xc4\x57\x7a\x0f\xd2\x08\x2f\xe7\xcf\x55\x8f\x00\x1d\x56\x6c\x3e\x97\xa6\x74\xb9\xe4\x6c\x88\x24\x35\xb4\x7e\xc8\x79\x39\xf0\xf7\x2f\xbd\x34\xaf\x2b\xec\xd1\x85\xb7\xc6\xa0\x27\x02\x0d\x7f\x78\xf4\x53\x7c\x32\x69\x0c\x86\x3d\x2e\x71\xd4\x23\x54\x83\x5a\xb2\xb2\xc3\xc9\xa8\x9f\x65\x5f\xe0\x87\xfd\x4c\x3f\xfa\x5a\x36\xcb\x1b\x15\xab\x5b\xc6\x6f\xb1\x90\x32\x91\x0d\xb4\xe9\xbb\x35\xed\x8e\x57\xd9\x79\x7f\xd4\xe0\x12\x07\xe8\xb5\x38\x0a\x2f\xbd\xad\x58\xa3\x04\x15\xff\x21\xfd\x27\xf5\x8f\xeb\x92\x12\x5b\x3c\x4a\x2c\xd1\x4c\x1f\x7c\x23\x62\x0d\xc2\x16\x9f\xdc\xf1\xde\xb8\x11\x32\x60\xca\xd6\x8e\xa2\x35\x0e\x22\x45\xaa\x5f\x63\xea\x22\xd7\x33\xfd\x3c\x8b\x28\x20\x2e\xad\x2b\xe5\xb5\x23\x2b\x31\x23\x37\x9b\x85\xc3\xec\xe4\x48\xd8\xc4\x4b\x80\x40\xf4\xb1\x50\x71\x71\xea\x16\x8e\xe6\xf3\x4b\xa8\xa2\xc2\x32\x97\xd8\x82\xa0\x4b\x75\xac\x6c\xa3\xdb\xa2\xeb\x47\xbd\xc5\x4b\x6a\xc3\x4e\xda\x85\x25\x5b\xee\x3e\xd7\x54\x56\x52\xbd\x57\x6a\x85\xe5\x07\xc4\x4f\xdc\xe5\xb4\x1c\x53\xcf\x11\xf2\x54\xb4\x6e\xe7\xe3\x6b\x46\x75\xbb\x5b\x75\x71\x82\x49\xd1\x87\x8f\x35\xa9\xdb\x55\x3e\x15\x62\x44\x8b\xd3\xa7\x50\xd3\x6b\x8a\xce\x44\xf4\x24\xb5\x07\xd0\xc4\x26\xcc\xd0\xfd\x5c\x84\x20\x1f\xcb\x58\x9a\x32\xd3\x56\xcb\x77\xd0\xf2\xbd\x69\x8a\xba\x9b\x35\x75\x36\x97\xa6\xb7\xda\x4a\xce\xca\x2d\xe9\x1f\x29\x64\x51\x56\x94\xec\x9f\x54\xb4\x88\x6d\x89\xb4\x47\x5e\xb4\x9c\x33\xad\x95\x56\xef\x6a\x23\x59\x3b\x3f\xa4\xe6\x7d\x5a\x9b\xd4\x83\x25\x0c\xab\x5b\xbc\xd4\x55\x77\xe1\x15\x78\x23\x16\x2d\xfc\xb6\xa6\x75\x97\x3d\x48\x83\xba\xcb\x2c\xc7\x12\x96\x58\x8a\xac\x06\xc4\x1b\xbb\x94\xd3\x3e\x9a\xfa\x79\x97\xb4\xa8\x1e\x77\xb9\x07\xc9\xe7\xa5\x83\xdc\x34\xb8\x4a\x87\xbc\xab\x5b\x74\x3c\xa3\x34\x5e\x5d\x02\x55\x78\x16\x91\x9a\x77\x2d\x76\x71\x65\x25\xa3\xc5\xfb\xb1\xf0\x10\xef\xba\xf4\xb4\xfb\x99\xfa\xe6\xfd\x54\x6b\x06\x7f\xf5\xfe\x10\x30\x56\x26\x7b\xe4\x8d\x56\xf5\x53\x9d\xcd\x2a\xaa\xdb\xa3\x4e\x40\x18\x5b\xaf\x10\x4a\xd2\xae\xab\x0c\xa9\xff\x23\x43\x6a\xd0\xcb\x5b\x46\x68\xc0\xe0\x66\x16\x6b\xf8\x27\x90\x09\xb5\xaa\x7c\x92\x4a\x3a\x23\xe2\x02\xb1\x98\xd6\xd2\xaa\xe1\x95\xc2\xcf\x42\xc9\x72\x8f\xc0\x19\x45\x8a\xc7\x8c\x81\x09\x69\xc0\x55\xdb\x79\x0d\xf7\xd8\x68\x82\xa0\xbe\x5a\x2f\x75\xc9\xfa\xa7\x1e\x5a\xcf\x30\x66\x6d\xd7\x88\xdb\x5c\x06\x97\xec\x95\xcb\x69\xc7\x9a\x27\xf9\x99\x78\x34\xc8\x90\x96\xd1\xbc\xbd\x70\xc0\xd4\x59\x96\xe6\x4d\x64\x51\x97\x68\x9d\x95\x71\x8f\x2f\xf3\x55\xea\x36\x66\x98\x1a\xef\x29\xc3\x5b\xc8\x24\x86\x4c\x04\x12\x3d\xb4\x20\x5a\xb8\x67\xb7\x6e\xc1\x66\x50\x2d\xfa\x45\x53\x68\x5f\x1f\x2c\x7e\x61\x61\x88\xc1\x6e\xd1\x26\xf7\x56\xfd\xa6\xa5\x78\x03\x5c\xe5\xcb\x3c\x14\x6b\x79\xcd\xfa\x21\x0b\x8d\x99\xdb\x72\x97\x3a\x73\x75\xbb\x76\x99\x30\x6b\xf7\x5a\xe0\x46\x2d\x81\xef\x14\xbb\x35\xc4\x76\xd7\xe0\x26\x73\xdd\x4d\x05\xb1\x75\x59\xeb\x8b\x7a\xd3\x81\x61\xbc\xe6\x7c\xbc\xf5\x8a\x4d\x2e\x86\xe5\x56\xb1\xdb\x96\xd5\xce\xd8\xc6\xa6\x17\x33\x98\x7a\xbd\xaa\x3b\x94\xb8\x43\x5d\x07\xd2\xd5\x62\x61\xf9\xb9\xe6\xf2\xd8\xa4\x34\x0c\x68\x29\xd2\x27\x7f\xe8\x72\xed\xc9\x22\x4a\xda\xc3\x07\x96\x35\xce\xee\xf2\x97\x00\xd2\x93\xce\x15\x6b\x09\x74\x57\xbb\xab\x16\xe0\x47\xcd\x19\x7d\x0f\xd7\x1d\xaa\xb5\xe1\x7e\x86\x75\x61\xcf\x68\x6b\x54\x62\xf1\x28\x61\xdc\x9c\x8b\xf8\xed\x26\xea\xbb\xac\x5e\xf7\xd8\x49\xd6\xcc\x64\x95\xd2\x10\x63\x0b\xd5\xb6\x60\x88\x9e\xf3\x35\x39\x2d\xa8\x48\x42\x8c\xac\x71\xf1\xcd\xc8\x3e\x25\xe2\xdb\x79\xbf\xaa\xe7\xef\xa8\x95\xf3\xa6\xce\xc8\xe8\x1b\xcd\x32\x05\x91\x49\x69\xae\xe1\xca\x39\x88\x2c\xe7\x8e\x72\xff\x54\x4a\x4a\x2e\x97\x75\x5b\x23\x90\xc0\xdc\x1b\x50\x05\xa9\xe2\xac\x7a\x1e\x5e\x6e\x78\x66\x5b\x42\x90\xed\x3b\x5d\xf9\xff\x81\xcc\x2a\xd9\xfd\x71\xb6\xf6\x55\x2a\xcf\xeb\xf8\xa2\xda\x1f\x77\xbb\x6a\xb7\xf8\x6e\xd7\x83\x58\x6a\x2d\xdc\x72\x78\x9e\xb4\x01\x16\x7b\x53\x47\xb8\x79\x15\xe3\x0d\x47\x69\xac\x40\x94\xfd\x39\xe4\xdf\xa7\xe3\x63\x91\xf7\xe9\x82\xf0\x79\x9f\xee\x8b\xbb\x33\x03\x58\xc8\x39\xa8\xfb\xc4\xa3\x36\xf7\x19\xb0\x8c\xc6\xc0\x36\x95\xee\x73\xc6\xa1\xa6\x2c\xf8\x33\x90\x14\xd1\x56\x70\x6f\x52\x64\xae\x10\x13\xaa\xad\x98\xba\x9d\x75\xdb\xa9\x0d\xec\x2f\xdc\x51\x5a\x81\x34\x93\xdb\xae\xc5\xdf\xcb\x0d\x88\x9b\x3b\xcb\x1d\xdf\xb2\x89\x7b\x27\xbe\x69\xc9\x4e\xc9\xc9\x5d\x0d\x53\x3d\x6e\xe9\x71\x77\xe6\x83\x6f\x77\x0e\x42\xc9\xe1\x8d\x3b\x17\x71\xc0\x61\xb8\xbb\x78\xa7\x47\x2d\xee\xb9\x1d\x40\xb0\x3b\x95\x43\xcb\xc2\xfe\x5d\x96\x07\x00\xee\x22\xb7\xb3\xee\xe2\x21\x70\x08\x3c\x10\x4b\x77\xf1\x8f\x1d\x35\x15\x75\x88\x74\xa1\x4b\x40\xf4\x12\xc7\x2e\x3e\xe4\xc2\xd0\x6d\x5b\x86\x77\x39\xc0\x6b\x39\xc2\xac\xa6\xb9\x1d\x70\xaf\x7b\x05\x77\xf9\xfa\xe0\xd8\xf4\x28\x5e\xfa\x37\x20\x35\x4b\xfa\xbc\x20\x9a\x2c\x48\x4d\x95\x3b\x5c\x5a\x14\x56\xd3\x85\x97\xd5\x0e\xcb\xf2\x42\x22\x56\xd2\x01\x51\x6b\x0c\xc3\xb4\x8d\x02\xf5\x3c\x8a\x42\x28\x06\x42\xf1\x76\xc6\x5d\x5a\xb0\x14\x5a\x2c\xb7\xf2\xd9\xee\x22\xe5\xde\x3a\x96\xef\x09\xa9\xb4\xbf\x8b\x9d\xd8\x62\x38\xb9\xfc\x87\x47\x0a\xc1\xd7\x08\xee\x5b\x47\x9c\xfb\x76\x50\x37\x08\x98\x70\xbb\x6f\x87\x57\x52\x7a\x61\x62\x5c\x8e\xcc\xe0\x64\xaf\x92\xa1\x84\x0f\xae\x99\x65\x92\x86\x7b\x87\xbc\xe3\x06\x17\x20\x12\x08\x34\x48\xa0\x60\x80\xb1\xfd\x35\x09\x09\x5b\x59\xe7\x78\x83\xe8\x71\x81\xbf\x92\x66\x72\x63\xd7\x44\x93\x93\x23\x5b\xf7\xad\x07\xd9\x09\xf9\x15\x76\xf3\xa0\xe7\xc2\x08\x83\x3f\xbe\x79\x40\xa0\x44\x7d\xf5\x04\x18\xce\x84\x24\xb4\x3c\xb6\xa4\x5e\xda\x44\xb1\x4f\x90\x1e\x85\x56\x98\xa5\x59\x26\x04\xc2\x53\x75\xd1\x22\x21\x2c\x7e\x6a\xf0\x96\x11\xc6\x33\x26\x21\x17\x7f\x9a\x9d\x1a\x4e\x52\xa5\x2c\x18\x53\xea\x0f\xaf\x34\xdd\x77\x2d\xce\x9f\x16\x35\x11\x18\x40\x88\xd8\x66\xbc\xe5\xae\x93\x01\x26\xfa\x8a\xcd\xdb\x7b\x7a\xfa\x89\x97\x70\xc8\x10\xfe\x47\x52\x16\x46\xed\x01\x9b\x5a\x77\x75\x3c\xba\xde\x35\x4e\x21\x59\x4b\x96\x61\x80\xb7\xc5\xd8\xfc\xa6\xe8\x1a\xb6\xf6\x6e\x0a\x28\x27\x9b\x6f\x5d\x86\x21\x00\x09\x21\xef\x1b\x24\x85\x85\x93\x5f\x4e\xa3\xdb\x9c\xe4\xaf\x3e\x67\x60\xb3\x11\x9a\x8a\xc0\x05\x32\xea\xef\x58\xa4\xee\xdf\x11\xb1\xdd\xfc\x77\x44\x3e\xf5\x5f\xdd\x16\x73\xe1\x01\x44\x36\xb2\xab\x0a\x37\x9e\xc8\xec\x70\xf1\x67\xc6\x2b\x49\xd5\x05\x3d\xc6\xc9\xf0\x31\x62\xde\xb5\xa8\x2e\x07\x11\x06\x04\xf9\x0c\x40\x75\xc3\x0b\x83\x75\x8b\x7a\xc5\x1d\x30\x29\xa0\x8a\x07\xd2\x06\xa2\xd4\x9b\x3d\x97\xc9\xdb\x56\x6a\x80\x87\xc2\xa3\x27\x9b\xd3\x49\xee\xcd\x00\xff\x1d\x12\x7a\x29\x08\x22\xe1\xdd\xf3\x86\x77\xf5\xc2\xb0\x3f\xdd\xa2\x7c\x11\xc9\x25\x40\x26\xea\x96\xa0\x1e\xe6\x99\x58\x3c\xef\xb1\xf8\xd0\x38\x97\xfe\xdc\x87\x5a\x33\x87\xfe\x0c\x87\xac\x63\x19\xee\x01\x44\x96\xb3\xa3\x84\x75\x87\x77\x62\x0d\xc2\x52\x53\x89\xfe\xdc\x0b\x94\x00\x73\x47\xb1\x72\xe5\x39\x39\x07\x46\x54\xb8\x69\xe6\xa2\x81\xa2\xdd\x37\x61\x42\xef\x92\x10\xd1\x49\x7c\xe7\x95\x92\x32\x23\xaa\xba\xf7\x8a\x25\x67\x51\x2d\xcb\x12\x53\x7c\x45\xd9\x4c\xac\xfa\xf4\x8c\x1c\x71\xa8\xf2\xe4\x46\xdd\x03\x0d\x13\x75\x47\x6d\xed\x98\x28\x49\xcd\x06\x1b\x66\x6b\xc8\xd1\xcb\x61\xe6\x1a\x32\x1a\x54\x98\xa3\x77\x95\xab\x13\x55\x6f\x4e\xd4\x59\x88\x6b\x11\xce\xa6\xbb\xb6\xdc\x43\xd4\x0e\x06\x92\x20\x5f\xbb\xf5\x0a\xf4\x04\x3d\xa8\xac\x81\xc4\x2e\xce\xf3\xb8\x4c\x2c\xde\xa3\x9e\x35\xa8\x47\x11\x53\x5e\xfa\xaa\xc7\x90\x7b\x64\xe2\x75\x2c\xd7\xca\xea\x01\xce\xce\x47\xd6\xc1\x15\x31\x9b\x5c\x62\x51\x46\x26\x02\x05\x36\x28\x16\x9d\x6f\x7d\xec\x6d\x33\x91\x8a\x3f\x67\x1f\xfd\x92\x4e\xcf\x8f\x4b\xd5\x2b\x1e\x10\x46\x40\xf0\x72\xe9\xb9\xc2\x7a\xc5\xbb\xe0\x10\x52\x95\x1b\x99\xf5\x82\x7c\xab\x97\xf4\xbf\x4b\x9b\xe6\x55\xea\x2d\x17\xb8\xeb\x55\xa0\xdb\xe2\xf4\x1c\x7d\x25\x75\x55\xb5\x28\x25\x29\x90\x3b\x1c\x47\x94\x70\x8c\x0b\xc3\x4a\x1d\x4c\xbc\xe0\x22\x4f\xad\x78\xcc\xb1\x52\x53\xd0\x23\xdc\x95\xef\xdb\x8a\xb7\xd0\x30\x31\x05\xe2\x12\xad\xe7\x87\xe7\x59\xb2\x1f\x45\x5b\xcb\x21\x49\x94\x6f\xc9\x27\x21\xe4\xb4\x96\x6f\x2a\x8b\x3a\x83\x2e\x21\x5b\xc8\x0b\x42\x2a\x84\x68\xa2\x81\x3c\xb5\x90\x8b\x18\x70\xe5\xf3\x97\x55\x85\x3f\x83\xd2\x7c\x0a\xa2\xb6\xc1\xe2\xad\xde\x7b\x68\x90\x9e\x9d\x6f\xc6\xd6\x7e\xea\xca\xf0\x3c\x2c\xa4\xc8\x89\x07\xb9\x49\x20\xd0\x1b\xaa\x88\x08\x58\xa2\x27\xf5\x57\x64\x10\x61\x55\xd0\x8c\x10\x6f\xac\xd6\xa0\x98\xbb\xea\x3b\x82\x7a\x58\xe0\x3e\x31\xaa\x42\x89\xf7\xe2\x8b\x47\xfa\xda\xf9\x00\x23\x19\xad\xb3\xf9\x72\xde\xde\xda\xa8\xbc\xec\x22\xd9\x88\xeb\xe1\x3c\xbe\x6a\x91\xc5\x41\x64\x9e\x3c\xa9\xc7\xcb\x85\x75\x68\x13\x1d\x79\x9f\xb7\xc3\xea\xb3\x39\xed\x32\x4f\xb8\xe3\x91\x4a\x47\xe0\xa7\x87\x5c\xfe\xd7\x06\x3e\xbb\xbd\x69\x33\xeb\x7f\x56\x7f\xdb\x82\xdc\x96\x61\xc4\x61\x14\x99\x3b\x27\x4f\x03\x93\x68\x7a\x80\xd4\xdc\x18\xc5\x69\xc9\x25\x46\x48\xcf\x49\x02\xbf\xe1\x5e\xbb\xd3\x9b\xfe\xcd\xeb\x7c\xbf\xc9\x41\x26\x98\xb0\x49\xe1\x8e\xce\xae\x7c\x35\x3f\xe7\x41\xcd\xdb\x61\x5d\x82\x32\x2a\x35\xbf\x3c\xbb\xd4\xf4\xe4\x70\xf3\xd6\x18\x9a\xaf\x51\xde\x5f\x69\x38\x17\x37\x17\xb4\x74\x35\x4b\x2f\x69\xb5\xd3\x51\xe1\xb7\xd3\xb1\x84\x69\x67\xc8\xf4\xe5\xba\x26\x83\xea\xba\x89\xb6\xd6\xce\xe7\x8f\x6b\x31\xa3\x04\x65\xe1\xaa\xd9\x89\xd7\x76\xbb\xea\xf4\xf9\x8b\x76\xeb\xb5\x0a\x46\x48\xeb\xd6\xb7\x2e\x1b\x4d\xd2\xc0\x07\x23\xb4\x80\x46\x93\x60\x29\x95\xfb\x7c\xf0\xae\x92\x20\xc4\x14\xf5\xbd\x9e\x86\x79\x69\x6b\x4e\xcf\x54\xb6\x46\x53\x07\x3d\x9e\xd4\x9a\x1b\xa9\x9b\xcb\xa3\x28\x60\xf3\x5d\x21\xbc\x86\xca\x1d\x81\x41\x54\x8f\xf6\xc0\x29\xb0\xf9\x44\xf2\x2d\xe8\xc5\x3c\x86\x22\x54\x5b\x0b\x6f\x3b\x49\xd2\x5a\x94\x81\xb2\xb5\x78\x68\x4b\x68\xf1\x9a\x1c\x33\x36\xdf\x4d\x91\x94\x06\x97\xb0\xf8\x2c\x8b\x36\x3e\x29\x3e\x66\xf2\x41\x72\x91\x8a\x05\x22\x93\xd7\x4c\x05\x48\xf8\x2c\x6b\xaf\xc4\x79\x9f\x5e\xb5\x1c\x8a\x65\x78\xb8\xa6\xe8\x52\x5e\x06\x5a\x4a\x1b\x58\x53\x26\x70\x9b\xff\x2a\x6e\xf2\xbe\xa9\x0a\x7b\x9d\x19\xb7\xee\xa8\xf8\x48\xa5\xd6\xf6\xce\x92\x15\x09\x13\xc4\x91\xec\xc6\x77\x3e\x05\x68\xef\xec\x27\x76\x7e\x18\x60\x3e\x3e\x0f\x5d\x02\xa1\x2b\xcc\x6b\x03\x0c\x05\x50\x8b\xee\xb3\xb5\x76\xb9\x12\xce\x40\x56\x01\xa9\xf7\x6b\xbf\xee\xd5\x1d\x78\x60\x40\xae\x04\xb4\x5e\xf5\x61\x13\xbe\x06\xab\x39\x5c\x9e\xb3\x21\x82\xef\x38\x8a\xff\xa9\xd4\x10\xa1\x2b\xde\x8c\x65\x85\x73\x62\xf5\xa5\xaf\xd4\x30\xd6\x9d\x3f\x4c\xba\x4b\xff\x4c\x6a\xee\xff\xb4\x3e\xe4\xe4\x7e\xeb\xfc\x04\x9a\xde\xba\x6a\xdf\x8e\x14\xba\x79\xf7\x72\x59\x5d\x6d\xcf\x75\x77\x1d\xe2\x41\x08\xcc\xf3\xf6\x4e\x7b\xf2\x1e\xd4\xba\xcb\x11\xae\x69\xd6\x05\xfd\x00\xbc\xd5\x68\xe2\x02\x7b\xbe\x1c\x80\xb4\xe4\xad\x9d\xce\x0b\x60\x8c\xec\xc4\xde\xbc\xd9\xc1\xa7\x89\x48\xd2\xf0\x73\x3b\x0e\xdc\x10\x5e\x47\xdf\x7e\x06\xd4\x39\x83\x06\xab\x58\xa9\x5f\xf4\x33\x05\xf1\x53\x32\x4f\x94\x69\xd8\x4d\xe9\x0f\x0f\x75\xd4\x28\x7b\x92\x1e\xd1\x71\xe3\x20\x30\x62\x29\x24\x4f\xbf\x28\xc9\xd1\x60\x3f\x96\x6f\x91\xf4\x15\x71\x0c\x3a\x3f\xef\xe8\xa3\x7d\xd9\x0d\xea\x25\x07\x73\x64\x0b\x9a\xcd\xc9\xe9\xc2\x5e\x71\x19\xa8\x43\x82\x74\xe8\x12\xbd\xea\xa0\xdd\x6b\xbc\xe9\x5b\xbc\xfa\x97\xc5\x17\x00\x6a\xc0\xbc\x18\xde\xbb\xcd\xb0\x19\xb2\x43\x77\xfe\xcb\xec\x74\x30\xea\x3d\x5c\xfa\x34\x58\xef\x3a\x8c\x75\xe8\x8d\xbd\xcf\x03\x69\xc0\x6f\xf1\x86\x57\x12\x7a\x37\xfd\x0d\xd0\x3c\xe0\x0d\x57\x06\x62\xa5\x3d\xa4\xcb\x66\x56\x5f\x26\xc6\x9d\xdf\x2f\xd6\x88\xec\x2d\x63\x82\xa7\x04\xaa\x71\x1b\xd3\x07\x11\xea\x05\x95\xd9\xe7\xb2\x11\x30\xbb\x7e\xcb\x33\x33\xb6\xfa\x8d\xfd\x32\xd6\x8f\x87\xd7\x37\x6b\xc6\xee\xa4\x3c\x87\x0c\xe8\x43\x1e\x9d\x1b\x7b\xd4\x0d\x66\x82\xda\x55\x08\xbf\x63\x1b\x08\x2c\x89\x0d\x7d\xad\x6f\x1c\x18\xd5\xc7\xc1\xb3\x03\x44\x78\x2c\x33\x05\x10\x54\x08\xe3\xc0\x24\x6d\x1c\xbc\xd3\x35\x12\xd9\x71\x6f\x18\xd7\x72\x7d\x79\xe8\x8a\xba\xf8\xae\x58\x10\x1f\x34\x4f\xe2\x4e\x81\x05\x71\xfa\xf2\x0b\x29\xc3\x1a\x8c\xa0\x1e\x14\x7e\xb6\xa7\x31\xdf\x09\x1b\xb2\xa9\x34\xf4\xbd\xb0\x51\xa3\x3e\x78\x35\x6a\x91\x84\x69\x02\x9f\x19\x70\x98\x46\x73\x73\xcd\x55\xbb\x45\xe7\x03\x12\x1f\x3d\xc8\x92\x37\xc1\xca\xfe\x20\x40\x47\xe7\xb3\xdb\x02\xe5\x90\x89\x22\xb5\xfd\x52\xcb\x2f\xb5\xd3\x3b\x49\x84\x74\xbe\x38\x31\xfc\x9c\x32\x11\x54\x24\xb6\x7a\x4a\x6c\xf4\x53\x6b\x9e\x91\x8c\xdd\x42\x70\x01\x32\xd4\x8d\x11\xa5\x24\x9f\x4c\xfd\xae\x61\x7e\x2d\x0c\x04\x85\x3d\x2f\x3e\x7a\xd9\xe2\xba\x32\x3c\x7a\x59\xce\x02\x13\x35\xdf\x31\x25\x6a\xbe\x62\x31\xe6\x44\x70\xf4\xb2\xc7\x5d\x44\xeb\xe8\x65\x16\x81\xae\x53\x03\x99\xa5\x9e\x74\x07\x36\x6b\x1d\x2c\x46\xff\x87\xa5\x79\xb2\x6c\xf4\x12\xbd\x06\x88\xd7\x35\xb8\x75\xf5\x62\xcf\xed\x0c\x9a\x92\xca\xa6\x21\x61\xcb\xc8\xe5\x16\xa4\x31\xd8\xc1\xf5\x81\xeb\x7a\x28\x3f\x7d\x06\x09\x48\xfd\xde\xa7\xc5\x65\x3b\x08\x84\xe7\x23\x19\x4c\x75\xcb\xf1\xdd\x16\x20\x39\x69\xe3\x38\x48\xe6\x48\xe5\x18\x2d\x09\xcb\x50\x43\xc8\x58\x90\x7d\x36\x42\x2a\x4d\x09\x63\x75\x66\xf4\x71\xb1\x50\x19\x3f\x92\xff\x9f\x98\x22\xe4\xc7\x4f\xd4\xdc\xff\x14\x7b\x64\xf8\x6d\x2a\xe8\x9b\x9f\x2b\xe7\xdc\xbd\x43\x4a\xd4\x90\xde\x73\x75\xe4\x1d\xf2\x81\x17\x08\xe5\x3d\xc1\xb7\x6a\xc3\x6f\x9a\x2b\x20\x06\xd3\x40\x71\x31\xe4\x2d\xcf\xaa\xbc\xd1\x7d\xc5\x6e\xa7\xcf\xcb\x0d\x66\xf3\x1d\xeb\xc0\x01\x95\x77\xe4\x13\x86\xa8\xd6\xf9\xd8\xe0\x9b\xba\x1c\xe2\xd4\x97\x43\xde\x78\x38\xe4\x3d\x52\x83\x99\x45\x3a\x7c\xff\x71\xdf\xee\x4b\x46\x2b\x42\x79\x81\xdc\x02\xbe\x1d\xf5\x68\x0e\xfe\x1d\xe2\x71\x92\x81\x2e\xf0\x2d\x2f\x2a\x7e\x73\x1e\xbf\xcf\x58\xc9\xf8\xfa\xe6\xf7\xed\x64\x9a\xfe\xcd\x0f\xbb\x7d\x53\x54\x00\xb0\xfe\x41\x2f\x85\xc2\xff\xc3\x03\xf1\x8f\x2e\x6a\xfc\x2c\xcf\x17\xfd\x44\x6d\x74\x3f\xe8\xb5\x3f\x09\x5f\x16\x95\x3f\x18\x0c\x7e\xca\x7c\xc0\xf6\x77\xee\xdc\xfc\xc6\xbd\xd0\xf7\x1a\x78\x40\xe9\x97\x28\xbe\xc0\xf8\x8b\x70\xbf\x18\x9c\x7f\x0b\xcb\xe9\x5f\x14\xe3\xef\xc3\x57\x71\x37\xb7\x15\xd6\x12\x09\x3d\x6a\x72\xb2\x9b\xf3\x9e\xa4\x2d\xdf\x2b\xa0\x89\x2e\x55\x92\x10\x14\x05\x41\x15\xb9\xc0\x24\x6b\x19\xc9\x9e\xda\x46\xc3\x75\x92\x1b\xa4\x46\x3c\x7f\xf0\xa8\x2f\x15\xc2\xe6\xfc\xd7\xc6\x8f\xe2\x29\xe2\x72\x63\xa2\x06\xc7\x87\x09\x88\x10\x0f\x47\x70\x55\xe0\xe9\xf2\x2e\xd0\x82\xf0\x03\x79\x04\x48\x2c\xdf\xb7\x38\xb7\xef\x70\xc3\x9a\x6b\x6c\x5e\x8d\x10\x84\x77\xf8\x3f\xde\x93\xfc\xf3\xef\xeb\x92\x4a\xcb\xed\x13\x25\x65\x50\xf9\x24\x17\xef\x32\x39\x00\x49\xfd\x7e\x73\x5e\xdf\x32\x07\xcc\x41\x00\xfc\x91\x8f\x7d\x47\x35\xec\x87\x16\xc6\x7e\x04\x14\x9b\xbc\x5b\xbe\xf1\x53\x84\x5c\x34\xc7\x41\x13\x5a\x98\x9c\xf9\xe3\x20\x8f\xc7\x77\x3c\x0e\xce\xbf\x74\xe1\xcd\xc5\x2a\xd5\x1c\x6b\xe6\xc8\x62\x27\xea\x2b\x68\xf5\x24\xa7\xb7\xec\x08\x0f\xac\x27\x6c\x2e\x79\x4c\x27\x36\x97\xf0\xc1\xd1\x56\xe0\x33\xb8\x5d\x20\xf8\x49\xc2\x7c\xda\xf1\xae\x2f\xa1\x1a\xa5\x02\x13\x4b\x09\x32\x25\x63\xe9\x0b\xdc\x93\xc9\xdc\xa7\x2f\xe2\x2c\x25\x7e\x62\x10\x40\xb9\x13\x39\x4a\x28\x28\x88\x6d\x41\xff\x5c\x60\xe5\x55\x16\xd9\x05\x21\xcc\x11\x5f\x92\xde\xa5\xe9\x5d\xea\x7e\xb1\x3b\xef\xee\xb2\x69\x0d\xc1\x30\x5c\x9a\xbb\x44\xee\x81\x80\x1f\x02\xd6\x15\x98\xca\x1f\xbe\x38\x72\x68\x0d\xbb\xc0\x2a\x25\x97\x39\xde\xec\xb2\x6b\x6c\xf2\x1b\x00\x1b\xdf\x90\x76\xf0\xb0\xbb\x6c\x70\x23\x09\x8f\x10\x84\x1f\x06\xe2\x26\x85\x9a\xf7\x92\x82\x24\x44\x38\x1a\x66\xdf\x52\x07\x34\x51\x60\xdb\x63\xdc\x64\x7c\x49\xcd\xe7\xac\xde\xb3\x1c\x86\x10\x88\x72\xba\x3b\xe6\xb1\x8c\x7e\x25\x4c\xc5\x2b\x56\x00\xc8\x74\xdd\x20\x3a\xf8\xef\x22\x6c\x60\xbd\x78\xe3\x1d\x95\xa1\xde\x25\x81\x8a\xea\xae\x3b\xaa\x87\x4c\xae\x9e\x2a\xad\xa9\x6a\x2b\xa8\x9c\x87\xca\x10\x11\x87\x97\xf3\x8a\x62\xeb\x0a\x4b\xe9\x06\xc4\xce\xda\x6a\x0d\x5f\x79\x90\xd8\x60\x9c\x82\xf4\x94\x8a\xb4\x25\x65\x30\x84\x46\x5d\x85\x0b\x69\xad\x55\x5b\x6b\x55\xd1\x53\xb9\xd9\x6a\x71\x55\x69\x65\x55\x5b\x59\xe5\xfa\xaf\xd9\x79\x94\x79\xd5\x56\x59\x97\xd6\x6a\x33\xe7\x09\xb9\x9c\x6b\xd1\x67\x1d\x18\x47\x01\x26\x7a\xea\x2a\x76\xec\xc1\xd6\xcd\xd5\xaa\xb5\x53\x5d\xd7\x5a\x91\x42\xab\x21\xb3\x61\x27\xb0\x89\x18\xdc\x45\x2a\x4b\x65\x7e\x3a\x06\x9d\xbc\x7e\xc7\xc6\xd1\x3c\xe8\x6b\x8d\xbd\x37\xac\x72\x09\x60\x41\xd1\xc2\x56\x6a\x66\x70\x06\x57\x51\xec\x4d\xbb\x7a\xe3\x22\x69\x28\x90\x76\xa2\x11\xa2\xa9\x37\xdc\xa1\x04\x98\x2b\x80\x42\xeb\xda\x2f\x91\xaf\xf8\x83\x58\x23\x0d\xea\x6c\x4a\x0c\x29\x36\xcf\xc3\x13\xa0\x70\x24\x72\xaa\x45\x2d\xf0\x86\x83\xad\x84\xbe\x42\x57\x4b\xfc\xf2\x40\x01\x62\x6c\x54\x0c\xad\x53\xd3\x03\x92\xb9\x96\x40\x8e\x57\x8e\xdc\x6c\x3c\x23\xe7\x5c\xf6\x53\xdf\xe5\x57\x2c\xf0\xe1\x44\xfb\xf9\x58\x25\xf7\xf3\xd1\x1d\xb0\xcd\x29\x2b\x9d\x23\xe9\x0e\x8f\x04\x10\x44\x53\xea\x5d\x9a\x52\xef\x68\x42\x64\xca\xcc\x0b\x04\xab\x28\x04\x17\x61\xd5\x3b\xf1\xdb\xbf\xd1\x8a\x07\x84\xeb\x68\x25\x53\xa0\x6f\xe9\x6c\xdf\xda\xd9\xbe\xa9\x6f\x05\xdd\xc1\x66\x04\x0b\x79\xcf\x6a\x93\xfe\x13\xdc\xfe\xe2\xbf\x30\x11\xe2\x38\xd8\xa4\x38\x82\x8a\xeb\xe0\x10\xd9\x17\x02\x7c\x69\x04\x5f\xea\xfc\xc5\xce\x97\x04\xbf\x34\x38\x2f\xbc\xb1\x89\xf8\x2f\x0d\x78\x69\xc0\x8b\x03\x66\x25\xa5\x91\x07\x57\x85\xb7\xba\x6b\x90\x6a\xbc\x54\x89\xad\xaa\x45\xeb\x49\x52\x66\x84\xb4\xe5\x89\x29\x20\x4e\xa5\x6b\xe4\x9d\xfa\x4b\x70\x38\x81\xb9\x05\x37\x24\xc2\x81\xed\x3a\x46\x91\x9b\x74\x20\x4d\x57\x5c\xdf\x2a\x35\x83\x77\xe9\x62\xf6\x7c\x91\x1c\xca\xa3\xfa\x5b\xd8\x5f\x8e\x93\x57\xb6\x95\xe9\xbd\x92\xba\xc0\xc6\xce\xa9\x07\x7f\xaa\x49\xcc\x85\x17\x72\x40\x26\x47\x10\x5e\x12\x43\x78\xb1\xbb\xc4\x13\xaa\xf8\xab\xea\xaf\xb2\x73\x4f\x26\x10\x83\xf6\x04\xbc\xb8\x4b\x36\xc7\xe1\x58\xe3\x08\xa7\x7b\x47\x9e\x30\x2b\x94\x21\x37\x60\xc5\x72\x0b\x67\x49\x9a\x15\x82\xcc\x22\xf6\x5f\xb6\x90\xf8\xa3\xff\x53\xa1\x21\x80\x1a\xbf\x44\x90\x52\xf4\xa5\xc1\x3a\x1e\x78\xe7\x99\x70\xf9\x6e\xc2\x0d\xbf\xf1\x07\xc4\xba\x53\x48\xd8\x11\x20\xf0\x46\x02\xe5\x5b\x7e\xc8\xb5\x85\x24\x69\x76\x29\x06\x3c\x19\xb7\x05\x3c\x47\xb4\x85\x6c\x0d\x3b\x2b\xc3\x79\x87\x6c\x0b\x3c\x34\x86\x1c\xdc\x0d\xaf\x61\xb7\x9b\x5a\x4a\x95\x0a\x2f\x68\x01\x6c\x06\x8d\x8f\x09\x66\x9f\x61\x94\x60\xef\x92\xc4\x36\x1e\x27\xb8\xcb\xf1\xc8\x62\x38\x38\x41\x67\x15\x7f\xac\xc0\xb3\x89\x54\x3a\x0e\x4b\x6d\x21\xff\xc2\x81\xf5\x7a\x32\xa1\x07\x02\xec\x81\xa4\x5d\xf8\x3b\x82\xeb\xa7\x64\xad\x6e\xa1\xda\x6b\x7b\x5b\xa8\xe1\x45\x09\xd4\xb8\x89\xb6\x4d\x90\x57\xff\xb6\x50\xeb\x23\x19\x21\x84\x02\xaf\x2d\xd4\x2f\x32\x1f\xa8\xa8\xa1\x05\x9c\xb5\xdd\x42\x2b\x1d\x79\xc1\x46\x08\x86\xb4\xd0\xee\xc2\x01\xdb\x2d\x15\xc9\xb9\xea\xfc\xa4\x38\xb9\xf3\xda\xd5\x16\xfa\x48\xc6\xd3\x3b\x26\x84\xfd\x3e\x63\xfb\x82\xd6\x11\x7e\x5d\x26\xa1\x15\xf5\x9d\x10\x42\xfc\xd2\x03\x00\x74\x88\xb8\xec\xf8\x6d\x91\x37\x63\xb7\x38\x57\x8a\x26\x86\x3b\xcf\xbe\xb6\x28\xc3\x4d\x14\xa5\x23\x6e\x38\x35\xc1\x80\x78\x27\x73\x8e\xc7\x2b\xa5\xbe\xf8\x26\x3c\x33\x0f\x4a\x05\x2d\x53\x97\x93\xa7\xe2\x40\xde\xe1\xb0\x68\x08\xa3\xd5\x7f\x90\xd3\xaf\x3c\x1a\xab\x14\xc6\xa0\x49\xac\x61\x0b\x72\x28\x78\xb5\x5f\x23\x2c\x1f\x81\xfa\x9a\xa7\x7e\x86\xe9\x91\x9f\x32\xb8\xc3\x58\xfc\x02\xe1\x0c\xee\x16\xbd\xbb\x78\x5f\x9e\xd0\xdd\xa4\x78\xa9\xb1\x07\x8c\x86\x82\xa1\x96\x44\x3d\x10\x41\x48\xd7\x82\xb6\xa8\x8f\x02\x6d\xd1\x97\xa4\xef\x29\x32\x51\x38\xb6\x72\xdd\xce\x77\x46\xd9\xbb\x77\x00\x92\xec\xf0\x55\xe2\x1f\x06\xa4\x5c\x90\x71\x17\x89\x60\xb4\x9b\xc4\x81\xde\xff\xdd\xa2\x4a\x55\xfc\x79\xac\x2b\x9a\x6d\x61\x8f\xd5\x9e\x9a\xdf\xa2\xf1\x1d\xf2\x3b\xe4\x61\x80\x7c\xbe\x70\x71\x82\x00\xae\xb0\x6f\xf1\xc5\x89\xbd\xa0\x7b\xc4\x57\x72\x87\x2a\xb5\xf1\x95\x98\x47\x3c\xf7\xbe\xd9\x7b\x6a\x40\x45\x3d\x95\x6a\x80\x07\x46\x99\x08\xc6\x17\xff\xb8\x43\x98\x3a\xdc\xa5\x75\x27\xeb\x60\x5b\x3c\x42\x46\x67\x8d\xbc\x04\xc4\x26\x0f\x32\xf1\x50\x21\x1e\x8f\xcc\x6f\x15\x06\x09\x01\xb5\x37\xda\x44\x30\x9e\x65\xb0\x48\x8f\xff\x8d\x03\x6c\x24\xb7\x21\x8b\x0c\xc4\x4a\x6b\x27\x61\x62\xc9\x26\xa7\x98\x68\x62\x29\x0b\x46\x1b\x1f\xe2\xe2\x62\x60\x80\xb0\xf2\x5f\x1a\xdd\x01\x20\xd3\x62\x93\x59\x28\xbf\xc5\xcd\xe1\x53\x2c\x99\x26\xa0\x91\x24\xbe\x24\xc5\x08\x89\xa5\xf2\xcd\xde\xca\x26\x91\x17\xed\xdb\x97\xb3\xda\x94\xbd\x13\x06\x48\xf9\x0a\xb9\x09\x68\xd8\x78\x20\xc8\xb7\x01\xfc\x84\x52\xbc\x17\x71\x23\xcd\xf8\xe2\x83\xb4\x64\xa6\x60\x29\x11\x87\x09\xae\x9d\x4f\x99\x6c\x11\x75\x24\x81\x32\xd8\xc8\x58\xcb\xde\xa2\x0e\x2c\x31\x1b\xb7\xfa\xc2\xfb\x16\xed\xf0\xf7\x16\xcb\xbf\xb2\xa6\xfc\xaf\xb8\x29\xde\x1a\x57\x99\xdd\x4a\x7e\x7f\x34\x91\xf8\xc5\x0f\xf2\xfc\xc4\x8b\x70\x2a\x7b\xe0\x67\xf6\xc1\x9a\xfd\xdd\x61\x42\xf8\xb2\x25\xe8\x05\x8b\x8b\x3e\x7e\x65\xd8\x96\x65\x97\xdf\x84\x6e\xba\xbd\xc0\xe0\x83\xbd\xe5\x41\x92\x0f\x4a\x5c\x57\x62\x49\x96\x9f\xab\x95\x83\x74\x44\x3e\x92\x8a\xdd\xa6\x25\x2c\xb7\x5f\x37\xdb\xd0\x30\x24\xb6\xb2\x6a\xbb\xe1\x2d\x26\x32\xca\xb5\x00\xf8\xb2\xed\x46\xc2\x72\x7e\x8c\x60\x7b\xbc\x04\xbe\x25\x41\x9d\x76\xc5\x22\xc7\x04\xb6\xb9\xca\xa3\x08\xb6\x3d\xf8\x33\xaf\xf9\x11\x3f\x3d\x2a\x78\x10\x93\xbd\x2c\xc3\x10\x0d\xfa\x96\xd3\x25\x0a\xb9\x1d\xdc\x7c\xae\x64\x8b\xfc\xbb\x20\x69\x7b\xb8\x0a\xb8\xcd\xfb\x7a\x5b\xbc\x63\x56\x47\x19\x2c\xee\xa7\xba\x0b\xab\x5c\xf1\xef\x70\x7b\x15\x7e\xff\x0e\x3e\xe4\xc3\x4d\xbc\xaa\xbc\xe3\xcb\x60\x00\x22\x7d\x2a\x34\xcf\x58\x77\xfd\x71\x13\x61\x19\x45\x55\xcb\x66\xc1\x3a\x47\xed\x1a\x5e\xba\x91\xbc\xc5\xe6\x47\x14\x15\x33\xb6\x45\xfe\x36\x99\x7c\x12\x10\xd1\xd8\xce\x72\x4b\xcc\x0c\x25\x90\xac\x6d\x0a\x62\xe6\x19\x81\xc1\xd6\xc2\x4f\x8f\xdc\xbc\x65\x0f\x6f\x8b\xba\xd6\x12\x5b\x17\x73\x24\x2f\x69\xd8\x46\xf1\xf6\x71\x09\x67\x8b\x1a\xb8\xfb\x13\x22\x89\x01\x4b\xa4\x1e\xd4\x8d\xd5\xa0\x28\x6a\x66\xec\x92\x17\x28\x38\x6c\x40\x32\xf3\xe4\x2b\x76\x7d\x86\x5f\x21\x33\x3c\x72\xfc\xcb\xa3\x8c\xbc\x0a\xcc\xe0\x2d\x45\xf7\x76\x55\xa4\xf1\xbb\xc8\xdc\x3a\x7e\x87\xf0\xc5\xd5\xf4\x04\x28\xe6\xf1\x97\x66\xf1\x64\x22\xfd\xe4\xfc\xd7\xa2\xc0\x11\x79\x0c\x99\xbc\x26\xb7\xef\xac\xf5\x27\xb7\x8b\xce\x9a\x1c\x7b\xc2\xc9\x07\x02\x61\xa2\x1d\x06\x4f\x67\x08\x68\x88\x2b\xc8\x1f\x0c\xb6\xc4\x7f\xbb\x65\x93\x3d\xe7\x2f\x7c\x43\x57\xbf\xd9\x66\xd7\xc0\x1c\x88\x5d\x9a\xe3\xef\x7d\x06\xb4\xae\xe4\xb0\x68\xc3\xe6\x85\xac\x30\xe2\x26\x4a\xb8\xf8\xc2\x5b\x1d\x20\xf8\xdf\x01\xfd\x83\x34\x02\xe7\xc7\x04\xcb\x0f\xdb\x40\xe1\xfc\x10\xb0\x1c\x20\x60\x62\x18\x62\x0e\xf9\x5c\xcf\x06\xb1\x9b\x82\xee\x3b\x13\xfc\xc2\x97\xab\x36\xd1\x8c\x92\x6a\x1b\x80\x9a\x07\x21\x8a\x21\x6c\x1b\x1b\x01\xcb\xa1\x89\x34\x0c\xae\x7d\xfc\xe2\x18\x5d\x3f\xe1\xf4\xf8\x86\x39\x68\xa2\xc9\x41\xcc\x07\xd7\x54\xcc\x58\xf2\x4e\xb1\x35\x54\x40\x6c\x4d\x0a\x95\x9b\x34\x7b\xea\x67\x10\x43\xfc\xe0\x44\xc1\x21\x10\x4b\x01\x29\xfe\xfe\x6a\x03\x00\x24\x54\x30\x35\x4b\x05\x4b\xb2\x64\xaa\x06\x41\x18\x1c\x31\xe0\x6c\x11\xe2\x2c\x17\xff\xc5\xc1\xb9\xc2\x4b\xde\xc5\xb6\xec\x7e\x90\x04\xe0\xb4\x4b\x91\x78\xca\x7e\x8c\x98\xb8\x48\x4b\xd9\x25\xce\x22\x12\x83\x11\x9a\x46\x29\x7b\x3b\x4b\x17\xd4\x45\xb6\x30\x31\xfc\x97\x45\x8a\x73\x0f\x12\xdb\xa3\xd6\x97\xf8\xbd\x34\xfe\x4b\x79\x2e\x97\xa5\x74\x71\xa8\xd6\xa6\x15\x61\xb6\xd4\x3e\x2e\x08\x41\x3b\x4f\xae\x53\xd1\x86\x5c\x7a\x2f\x30\xd8\x7a\xb4\xa0\xac\x8f\x26\xa1\x09\x20\xf0\x68\xec\xe9\x5b\x1c\xbe\xd5\xfe\x5b\xbd\x7e\xb7\x69\x05\xaf\xf8\xfe\x22\x2b\xdf\xbf\xea\xef\xd7\xfc\xfd\x92\x8f\xb1\x6d\xa8\xf9\xc1\x4f\xae\xb1\xef\x11\xbc\xd6\xe5\x08\xa8\x8d\x21\xbf\x58\xda\xd2\x10\x8b\xbc\x87\x8a\x26\x32\xb8\x61\x8f\x8a\x68\x64\xfd\x8d\x80\x64\x94\xd7\xa6\xd1\x21\x87\xb4\xb3\xe2\xe4\xcf\x46\x8c\x90\xef\x22\x6b\x29\xc5\x35\x3e\x06\xca\x00\x51\x14\x5d\x2e\x29\x4e\x6d\xf6\x83\xf2\x53\xf6\xa8\x74\xa4\xd6\x58\x44\x77\x2d\xbc\x55\x51\x0e\x4a\xb4\xe8\x36\x45\x89\x9c\x3d\x32\x64\x39\xb5\xe0\x5f\x2d\x5b\x89\xc6\x22\x86\xb5\x92\x76\xfe\xd8\x62\x63\x49\x18\x5b\x80\xa7\xca\x31\xff\x50\xb2\x95\xd4\xce\x48\xc9\xe8\x32\x41\x91\x23\x7a\x5b\xb9\x36\x87\x2f\xf8\xb8\x36\xa7\x7f\x54\x62\x02\x3a\x63\xb9\x36\xb5\xc1\x8f\x5e\xb6\x82\xe5\xf7\x92\xf7\xb3\xc8\x26\x48\xd1\xa5\x78\x61\x25\xdb\x4a\x8b\xed\x6f\x11\x40\xb2\xf9\xc4\xb6\xf1\x56\x32\xd7\x3e\x19\x54\xf7\x25\x7f\x85\xca\xd6\x59\xc5\x2a\xa0\x04\x53\xdf\xe6\x3d\x53\x61\xe2\xf3\xcb\x4e\x05\x5d\xb7\x14\x59\x7d\x23\x80\xc0\x25\x05\x52\x2d\xac\xa3\x14\x5d\xe1\x2b\x45\xaa\x17\xb3\x87\xa2\xfd\xa0\xf0\xef\x52\x81\xd0\x48\xd9\xe4\x84\x0b\x35\x51\x79\x51\x96\x2f\x48\x70\x39\xf1\x79\x49\x2b\xbf\xba\x63\x30\x66\x20\x11\xd5\xa0\x41\x78\xcf\xa5\xc8\x7f\xeb\x36\x48\xea\x52\x71\xd4\x62\x2b\x78\x85\x79\x2b\xac\xfb\x94\xf6\xc5\xa9\x37\x48\x2a\x36\x99\x8b\xf6\xc5\xae\x90\x0a\x05\x7d\xbc\xb4\x16\x1e\xd0\x4d\xbc\x37\xf5\x4e\xfd\xaf\x74\xf9\xb3\xda\x66\xc2\x60\xca\x02\x11\x05\x3c\x43\x16\xc6\x7a\x7d\x70\xc8\x03\xd0\x46\x18\xa6\x1a\xfb\xe8\x49\xeb\xb5\x77\x2b\x5d\x82\x58\xe6\x29\xd4\x45\x33\x83\x43\x7a\x1e\xff\xfb\x8b\xd4\xab\xc2\xcf\xa6\x92\x99\xb8\x58\xec\xcd\x4b\x86\x68\x58\x23\xfb\x87\x8d\xdd\x5c\xd0\xae\xc8\xcc\x30\x35\x5a\xb9\x4a\xc0\x08\x6b\x93\x84\xb4\x1a\x47\xd5\x2a\x1f\x38\x6f\x17\xf6\xc2\x11\x70\xc1\xbc\xf5\xd9\x96\xad\xbc\x69\xf4\x2a\xfc\x23\x88\xad\x7c\x93\xf4\xe1\x50\xdf\xba\xb6\x49\x88\x82\x7c\xeb\x3e\x8a\x1c\x5c\xdf\xe4\xd8\x3a\x99\x02\x7e\xc4\xc4\x36\x73\x75\x3e\xa4\xc0\xed\x8c\x2f\xfa\x50\xb9\x02\xd0\xe8\xcb\x88\xc6\x7e\x79\x85\x9b\x2d\x1e\x7b\x25\x57\x49\xc8\x03\x10\xd5\x4d\x8f\x38\xa6\xfd\x0f\x39\xfd\xea\x45\x27\x50\xf3\xec\x24\xe8\x61\x6e\x5c\xea\xd5\xf9\xaf\x90\x85\xcf\x2f\xe5\xbd\x07\x61\xb8\x07\x65\x58\xf3\xd2\xe5\x16\x08\x63\x14\x46\x75\xfb\xa3\xe7\x2e\x98\xf0\xb2\xe7\x45\x58\x0f\xa4\x30\x81\x63\x1d\x5b\xe5\xff\xac\xd1\x14\x23\x33\xa1\xd1\xc4\x1d\x89\x44\xf4\x7f\x00\x6a\x5a\x84\xcc\x93\x2c\x8f\x13\xe2\xdf\x50\x31\x7a\xc8\xf8\x0a\xea\xe9\x12\xfd\x43\x10\xe2\xb8\xb6\xc4\xde\xb2\x55\x48\x9e\x35\x42\x10\x2b\x16\xc0\xc5\xae\xbf\xaa\x45\xeb\xe1\x90\xb2\xb3\xe5\x56\x40\xe1\x47\x9b\x67\x75\xf9\x2b\x06\x35\xab\x02\x30\x91\xbf\xc0\x83\x66\x31\x5b\x16\x33\x32\x81\x2a\xc0\x59\x6e\x01\x70\x6f\x27\xdc\xdb\x86\x45\xe1\x8a\xc7\xfc\x44\x0c\x31\x25\x41\x9a\x05\x69\x52\xa3\x2c\x12\xaa\xee\xb8\x54\xdb\x72\x61\x04\x2f\xac\x05\x54\x5e\xa1\xa2\x2f\x7b\x7b\x4b\x1b\xf9\xe6\x0f\xf8\xfb\xa5\xbe\x58\x83\xd3\xcc\x06\xb7\xeb\x0e\x51\x0d\x4e\x76\x5a\x09\xbd\x6c\xf4\x64\xaa\x16\x92\x0d\xd5\xf6\x4b\x08\xe5\xc0\xf5\x17\x56\x9f\xba\xca\xcb\x90\xdb\x03\x01\xf0\x0d\xd4\xba\xc0\x25\x4c\x97\xe3\x14\x4c\x10\x9f\xc1\x63\xca\x57\x43\xb0\xca\x62\x28\x87\xa2\x88\xda\x35\xa5\xf0\x1b\xcc\xcb\xaf\x08\x39\x82\x92\x6a\xf8\xd5\x44\xc3\x2f\xc7\x2d\xe7\x94\xb7\x1a\xde\xd1\xbb\xb1\xa3\x0d\x85\x77\xbc\xe5\xed\x56\x26\x6a\xe1\x3f\xc8\x12\x85\x85\x25\x3d\xdf\x4f\x20\x28\x12\xbd\x14\x80\x53\x89\xda\x11\x23\xf6\x71\xd9\x04\x4f\xd1\x7f\xf1\x58\x43\x80\x23\x64\x89\x5d\xa3\x4e\x7d\x18\x89\x57\xfd\xbb\x38\xa0\xb9\x1f\xd3\x43\x9a\xb6\x29\x60\xb7\xa0\xc6\xf0\xc2\x57\x9d\x02\x38\x3f\x9c\xe8\xc5\x95\x7f\xf9\x06\x43\x2c\x52\xe2\x93\xfe\x86\xa0\xea\x56\xfc\x66\x8e\x4c\x8d\xeb\x6a\x9d\x47\xf1\x1a\xa9\xaf\xb0\x9f\x6c\x3c\x48\x8f\xb0\x3e\x1f\xb3\x44\x9f\xbf\xcc\x0b\x87\x6d\x92\x58\xfb\xe2\x6f\x9f\xd9\x68\x36\x44\x31\x66\xdf\x34\x6c\xfd\xd9\x6a\x71\x3b\xbe\x1b\xcf\xeb\x08\x21\xfa\xe2\xe5\xeb\xc8\xc0\x5f\xf9\xb6\x5a\xbe\x42\x36\xdd\xab\x96\x2b\xd8\x05\xcc\x0d\x07\xc8\xd8\x80\x94\x2b\x26\x50\x18\xe9\x79\x69\x21\xa1\xcf\x01\x4f\x6b\x16\x2f\x97\x48\x7f\xb6\xd0\xc5\x97\x4a\x2a\x8e\x64\xa2\x64\x6e\x6f\x3a\xcf\x00\xe0\xc2\xb1\x19\x07\x21\xf8\xd1\xae\x67\x3a\x51\x35\xa5\xa8\x62\xb2\x50\x0b\x8b\x01\x1a\xf6\x93\x3a\xd8\xd3\xbe\x8a\x57\x7b\xf1\xcd\x06\x8d\xe0\x5c\x44\xdf\xea\xfd\x5b\x2a\xa8\x40\x32\x0c\x9e\xe0\xd6\x71\x5d\xee\x08\x17\x23\x94\xd7\xc8\x81\x58\x1e\x4d\x7b\xf6\x68\xe8\xd8\xa6\xa1\x57\xfd\xeb\x0f\x23\x8e\x8c\xef\x95\x6e\x75\x70\xc8\x8e\x98\xbb\xb3\x47\x30\x88\xd2\x52\x1a\xd2\x0e\x9f\xb9\x20\x55\x1f\x3d\xa6\xb8\x8d\x0d\x6f\x40\x6f\x63\xdb\xb4\xa5\x00\x72\x68\x82\x5c\xb8\x00\x54\xb8\x84\x1e\x32\x0a\x71\x39\x36\xd4\xd2\xf0\x1c\x33\x19\x39\xc8\x3a\xc8\xc0\x2b\x1c\xbc\x7d\x36\xbc\x2f\xb6\x4a\x3c\x30\x03\x1d\xd2\x93\xf9\x40\x86\x24\xed\xbf\xda\x19\x02\x83\x5e\x64\x07\x69\xf8\xaf\xef\x33\xe8\x46\xf9\xf0\xd8\xfb\x18\xfb\x11\xf8\x41\xad\x6d\x48\x65\x0f\x99\xa9\xd8\x64\x68\xbc\x5e\x73\xab\x73\xbc\x5e\x7a\xdc\x6d\x1c\xb6\x33\x3c\xe4\x14\xd5\xd0\x53\x54\xe3\xa0\x98\x4e\xe2\x32\xea\xf6\x26\x21\x3e\x5e\xcf\xa9\x44\xcc\xac\x47\xda\xa8\xe9\x8e\xb4\xd9\xf1\x9f\x91\x64\x83\x69\x24\x52\xb3\x02\xdf\x93\x13\x8a\x6d\x0f\x0e\x17\xaf\xe8\xbc\x00\x36\x6d\x1e\x3e\xe4\x54\xd4\xd0\x53\x51\xd8\xb8\x1f\xb2\x1c\x4c\xea\x61\x9f\x7e\x93\xce\x0e\x00\x91\x77\x82\x32\x3f\x19\x29\x2d\x9e\xf5\xdf\x54\x8c\x39\xeb\x29\x59\x18\xe1\x2f\x3d\x92\x61\x79\x93\x72\x1b\xd7\x0d\x86\xc8\x64\x86\xae\xfb\x4b\x44\x0f\x20\x17\xc5\x75\xe3\xca\x1c\x21\xa2\xb3\xe8\xd4\x00\x1c\x2e\xb3\x4e\xcd\xef\x5e\xf2\xaa\xc8\xe0\xf2\x64\xed\x7a\x64\xbc\x74\xbf\x0d\x1c\x6a\x18\xe5\x61\x19\x36\xea\x0e\xe5\x8b\x81\x30\x4f\x50\x82\xd5\xe0\x86\x1c\x2e\xde\x46\x3d\x78\x95\x70\xd4\x23\xe9\xae\x0d\xb0\x16\x46\x95\x86\x5c\xb5\x1d\x73\x07\x1e\x35\x4b\x96\xab\x24\x95\x91\x71\x3e\x32\x67\x4e\xa5\x34\x71\x2d\x43\x50\x95\xe8\xaa\x46\xc7\x4d\xb1\x36\x70\xd1\x70\x35\x9e\x11\x57\x5d\x6d\x76\x3d\x88\x08\xd1\xa6\x46\xed\xa7\xe5\x07\xfd\x7e\x88\x72\x33\x54\xb7\x31\x39\x60\x62\x00\x52\x60\xb4\x08\xff\xe2\x5d\x7d\xc7\x1c\xe4\xba\xd5\x36\x1a\x3a\x5a\xfb\xc2\xa0\x43\x2a\x1b\x3c\x77\xf5\x8d\x43\x25\xac\xfb\x8f\x86\x15\x96\xd1\x49\xe8\xd3\x17\x42\x6e\xf4\x50\x32\x84\x04\x3f\x93\x83\xa8\x7b\x0f\xf5\x15\xe5\xdf\xab\x42\xea\xae\x3d\x53\xc2\x34\xc3\x69\xcb\xf1\x75\x59\x83\x22\x94\xcd\x9f\x9e\xd8\x63\x08\x7f\x35\xe8\x1a\x98\x12\xe2\xe3\x99\x85\xd9\x1f\x9e\x36\x92\xf9\x50\x89\xff\x14\x2a\x58\x6d\xc9\x58\x09\x43\x28\x5b\x15\x7b\x8e\x42\xd9\x79\x5a\xd3\x58\x08\x26\x36\xa8\x75\x7a\xb7\xe9\x4d\x17\xef\xb6\xcd\x89\x56\x00\xfc\xc0\x5c\xdd\x93\x6e\xea\xf2\x43\x19\xc9\x21\x8a\x64\xa1\x0a\xdf\x5d\x21\xd0\x00\x3c\x1e\x9b\x20\x47\x7f\xe2\x29\x13\x43\x1c\x8d\x3f\xc3\x8f\x58\xf2\x9a\x3e\x09\x51\xef\x7c\xd9\x5d\xc0\xb8\xc8\xc4\x8a\x79\xce\x43\x08\xbf\x4c\x25\x84\x4d\x19\x46\xb2\x20\xb2\x60\x24\xa3\x8f\xb2\x28\xa4\xc2\xf0\xce\xeb\xdf\xdc\x08\xa2\x40\x7c\x1f\x4d\xb2\xe3\x07\x36\xb6\xbc\xdb\xe5\x1a\x19\xa1\x37\xaf\xc0\x0a\x42\xd8\x7d\x8f\x9e\xb3\xbb\xef\x7c\xb4\xd9\xcb\x01\x57\xef\xf8\xd2\x3d\x8c\x88\xf0\x5c\xac\xfb\x85\x28\x86\x0f\x2e\x03\x20\xa6\x00\x76\x43\xb6\x3d\x27\xef\x42\xe3\x3f\x30\x46\x63\x35\xb4\x3b\x76\x9a\x8d\x13\x1c\xe0\x8b\x00\xfb\x7e\xbd\x42\x44\x46\x5f\x9d\x8f\xb7\x79\xfd\x17\xb6\x9f\xd5\x7b\x04\xe2\x82\x47\x04\x36\x1a\x31\x79\x5c\xee\x20\x83\x9c\x62\xcd\x6c\xb4\x56\x10\x47\x72\x57\xec\x60\x96\x21\x0a\x0b\x90\x99\x4a\xa4\x94\x73\x67\xf7\x2e\xd1\xe0\xc8\x6c\x01\x65\x20\xd6\x82\x81\x24\x27\x04\x75\x54\x21\x0a\x49\xf9\x30\x23\x92\x79\x26\x41\xce\x14\x19\x78\xa5\x80\xf1\x12\x96\x0f\x2e\x01\x8c\xc3\x2c\x21\xf5\x04\x4a\xeb\x4a\x3e\xca\x01\x04\xc1\xfc\xdb\x29\xc3\x16\xb6\x8b\xad\xdc\xc6\x16\xd8\x85\x49\xbd\x76\x6d\xb8\x64\xc9\xb2\xde\xc1\x56\xac\xa9\x0e\xe5\x3b\xbc\x1c\xfe\x2b\x24\x58\x7d\x33\x16\xdf\x21\xef\x55\x1a\x6f\x0a\xb9\x4b\x35\x03\xa2\x6d\xe9\x9f\x6b\xbd\x4b\x2f\xa9\xe0\xf4\x92\x0a\xe6\x57\x82\xc1\x68\xdc\x14\xf8\x22\x40\xee\xf9\x7a\xfc\x4a\x97\xe3\x8d\x7a\x41\x73\xc1\x70\xb1\xcc\xa7\x38\x7b\xd7\x24\xc4\x53\x2c\xb7\xd4\x73\x8a\xf7\x73\x44\xc5\x4b\xb4\x29\xf6\x93\xc6\x57\x71\x2a\x4d\x82\xa2\x25\x27\x2d\x9c\x54\xbe\xc9\xe0\xea\xbf\xac\x20\x2f\xb4\x55\x39\xd5\xec\xf9\x30\xb3\x77\xc9\x9e\x21\x61\x8c\x74\x4a\x8d\x4b\xf9\xca\xeb\x7b\x40\xb2\x46\xba\x12\x60\xe2\xc6\x01\x7c\xef\xd2\xb8\xf0\xb4\x80\x77\xe9\xad\x26\x8c\xc7\x4b\x4b\x7c\xbc\xb5\xcf\x87\x8f\x61\xe2\x1d\x2c\x69\xde\x97\xe3\xf5\x5d\xef\xae\x0d\x5d\xfe\x12\x35\x5b\xcf\x99\x88\xa9\x62\xf5\xba\xdd\xdc\x43\x05\x69\x27\x88\x8c\x44\xcc\x77\x50\x31\xa4\xff\xc4\x23\xb4\x66\xe4\xba\xcb\x6e\xbd\x87\x74\x14\xfe\xe2\xef\xb4\x88\x30\x53\x43\xe0\x3d\xa1\x89\x39\xf6\x49\x10\xf3\xd9\x07\xad\xf8\xac\xdb\xf4\x0c\xab\x3a\x4b\xc7\xcb\x78\xbe\x0b\xe0\xd7\x65\xb1\x83\x7c\xc8\x22\xff\xf2\x6e\xd5\x94\x77\x71\x89\x88\x68\x7f\xa4\x70\x72\x30\x60\x7e\x27\xa7\x92\xc6\x97\xa6\xff\x65\xe9\x67\x87\xde\x9b\x21\xa8\x72\x8e\xcb\x98\x85\x05\x16\xaf\xeb\x2b\x5e\x7f\xa6\xe3\x79\x9d\xc5\xbb\x5c\xb4\x9d\x67\xbd\x82\x3d\xa1\xda\x2b\x5f\x45\x93\xec\x6e\x8b\x28\x9a\xbe\x72\xd2\xd1\x97\xc8\xc4\x94\xdc\x30\xba\x86\x10\x51\x08\xa4\xd5\xd1\x99\x73\x17\xf1\x91\x7b\xa9\x06\xe2\x44\x4d\x80\xa6\xc5\xdc\x6b\x5e\xde\x4e\xc7\x2c\xce\xd5\x2d\x35\x77\xcb\x45\x49\x20\xe9\x4a\x37\x17\xd3\x3d\x5f\x54\x11\x82\xc5\x0e\xa3\x2e\x96\xdd\x7e\x6b\xfd\xf1\xdf\x0c\x25\x7e\x17\xa7\x6e\x40\x12\xa1\xc1\x62\xfc\x00\x09\x97\x40\x22\xdf\x6e\x91\x58\xfc\x82\xd8\x3e\x39\xa9\x26\xf0\x6f\xbd\x8f\xc5\x90\x8f\x1b\x4d\x5f\x68\x0e\x77\x15\x65\xe0\x6e\x93\x9b\xa6\xc9\x35\x6d\xd9\xb7\xfd\xaf\x16\x78\x08\x78\x1b\xb7\x24\x5e\x25\xf8\x10\x15\xa6\xba\x7c\xa0\x11\x57\x2a\xbd\x60\x08\x75\x52\xdd\x1b\xbf\x28\x02\xb5\x39\x8c\xe8\x75\x2b\xda\x83\x2a\xfe\xc0\xc8\x20\x1b\xeb\x75\x13\x35\x84\x81\x0d\x5f\x4c\x69\x59\x33\xf1\xbb\x10\xc2\x3b\xc1\xe9\xfd\xb1\xd8\x7f\x9e\x64\x40\xed\x1e\xe1\x61\x64\x9f\x26\x94\xa2\xe1\xf7\x98\x84\x4b\x86\x86\x45\x0b\x25\x1c\xb3\xe9\x55\x4c\xc8\x05\x7d\xf9\x85\xe4\x9f\xcf\x9b\x28\xa0\x70\xb8\x66\xc1\x28\x9c\x3d\x96\xae\xb9\xde\x63\x79\xbb\x66\x8c\xec\x32\xc8\xd6\x7d\xcc\x22\xda\x47\x48\xa8\xe0\x1a\x5e\x35\x08\x18\x1c\x97\xaa\x32\xfa\x9b\x03\x42\xdf\xa5\x52\x8f\x22\x19\x38\x2b\xb2\x8a\xea\x56\x71\x8c\x84\x81\x36\x88\x1a\x67\xd6\xa4\x39\xd4\xd9\x76\xab\xf6\x94\xfa\x85\xf1\xbd\x6a\x9a\x09\x7d\xb5\x5e\xfa\x54\x85\x77\x55\x52\xc9\xae\x35\x69\x0b\x59\xf3\xb1\xd6\x6f\xe6\x73\x10\xbc\x9c\xa1\x94\xf4\x58\x22\xa4\xcb\x03\x6a\x08\x8c\x8b\x55\xab\xbc\x74\x91\x29\x95\x9f\xcc\xe3\x5e\x54\x6f\x13\xcd\xf5\x96\x59\x32\xff\x73\x0d\x7c\xdf\xfa\xec\x08\xe3\xa5\x46\xf8\xa7\x45\x8e\x80\xd2\x7a\x3e\x93\x09\x79\x8b\xc4\xbb\x2a\x4f\xba\x11\x2a\x2c\x72\x6a\x7d\xd4\x86\x97\xdd\xbd\x93\xeb\x8f\x04\x62\x72\xa6\x5a\xd4\xbe\x36\x8e\xfe\xa1\x8d\xd7\xe1\xb5\x93\x2c\x8d\x12\x10\x99\x61\x2c\x11\x3d\xce\x72\xfe\xe0\xdf\x52\xd6\x54\x5a\xc0\x2a\xb8\xd7\x4b\x18\x04\x2e\x89\xbb\xe9\xed\x01\x82\xe2\xff\x14\x5e\xed\x6a\x04\x41\x05\x7f\x07\x3c\x6b\x86\x5a\xb7\x48\x3b\x5f\x09\x1d\x13\x4b\xbc\xc0\x6a\x5f\xcd\x7b\x3c\xb4\x81\x00\x43\xe8\x61\x12\x0a\x53\x13\xed\xe5\xf5\x22\x73\x70\x0e\xdb\x50\x19\xdb\xe5\xa7\xae\x8c\x44\x92\x50\x95\x0d\x73\xf7\x67\x0d\xff\x43\x70\x2c\x5d\xff\xd4\x0a\xf8\xb4\x4b\x7d\x8d\x6b\x13\xeb\x3d\x96\x5b\x94\xa1\x6e\x3f\x63\x25\x3c\x27\x1e\x5d\xff\x86\x0a\x78\x1b\x94\x6e\xae\x17\xa3\x0d\x49\xd4\x57\x90\x46\xd7\xed\xbf\xa6\x84\x6f\xfd\x13\x27\x08\xd9\x4d\x9a\x84\xb9\x3c\xda\xbc\xbb\x3d\x4e\xca\x78\x24\x85\xfc\xfe\x40\x32\x28\xd1\x10\xd4\x5c\xe0\x87\x4d\x82\xd4\xbd\x9e\x10\x2b\x0c\xd5\xa7\xbd\x86\x3c\x09\x49\x45\x09\x71\x53\x19\xd6\xbd\xb6\x22\xd9\x52\x15\xc0\xfa\x05\x21\xee\x7c\xdd\x9f\x77\x80\x92\xd1\xfd\xc9\xd7\x6d\xc5\x9d\xad\x82\xd7\x67\x84\x41\x98\xf0\x07\x71\x2d\x0e\x92\x69\xc5\xd3\xe5\x77\x09\x32\xae\x90\xcd\x85\x08\xf3\xc8\x7f\x92\x16\x6c\x12\xb0\x87\x8a\x41\x5f\x9a\x61\x7f\xc9\x10\xd7\xe5\x36\x99\x77\xa4\xac\x48\xd2\x36\x73\xef\x67\xd8\xab\x49\xae\x7e\x5a\x9b\xc0\xff\x32\x00\x3e\x4e\x35\xe2\x7d\x67\xb8\x7d\xa9\x28\xd6\xae\xd7\x67\x13\x04\x02\x9b\x15\xe7\x79\xbd\xec\x4a\x79\xbe\xfc\x23\x5d\xab\xb3\x14\x1a\x90\x07\xd8\x72\xf1\xfc\x10\x03\x7d\x2d\xcd\x91\xe6\x2c\x71\xa4\xf8\x4a\x2a\x55\xf5\x66\x2a\xa3\x8c\xb0\xf6\x64\x13\x13\xe8\x2a\x43\xab\x63\x60\x96\x32\xda\x9c\xe0\x31\x7e\xc3\x51\xd9\xd2\x5e\x39\xac\x86\x06\xff\x7c\x92\x99\xd1\x7b\x55\x80\x9c\xd0\xdb\x25\xb4\x9c\x37\x72\xf0\x56\x79\xf0\x0e\x2a\xf0\xdf\x38\x0e\x4e\xa0\x43\x57\x7e\x02\x74\xdc\x60\xd2\x0e\xcb\x05\x61\x77\xe4\x31\xf0\x29\x12\xf6\x90\xc2\x56\x21\xa2\x04\x32\xbf\x82\x59\x16\x51\x04\x58\x92\xe0\x3d\x0d\x36\x44\xe0\xf0\xe8\x22\xf1\xa7\x04\xe9\x0c\xd0\x83\x20\x39\xa9\x2a\x44\x9b\x90\x38\x67\xb1\x2b\x6f\x8b\x81\x90\xc8\xae\x20\x57\xf1\x7c\xc8\x65\xc3\xc8\xbf\xae\x74\x84\xac\xc7\xf8\x7d\x20\xdd\x4a\x82\xe5\x26\x47\x2f\xe6\xaf\xd7\x14\xe5\x3f\xcb\x0f\xd8\x08\x0e\x71\x1c\x33\xc4\x50\x9d\x21\xe4\xee\x86\x06\x07\xcc\x06\x39\x4d\x39\xf1\xbf\x9c\xf7\x67\x68\x71\xe1\xbc\x25\x80\xc5\x49\x13\xe1\x1d\xce\x76\xe4\x9b\x09\x9c\x5b\x25\xa8\x93\x0c\xfc\x1d\x4e\x4d\xe9\xd9\x44\x4c\x0e\x95\x93\x1a\x5f\xe3\x50\xbf\x72\xa3\x8f\x71\xc1\xc5\x4d\x60\x15\xf3\x4c\xec\x85\x17\x65\x41\xc4\xdd\x60\x0a\x3e\x62\x6a\xc2\x64\x43\x13\x07\xb6\x63\xa2\x44\x8f\x0b\xc6\x2d\xb9\x9d\x85\x35\x2a\xb7\xc0\x50\x44\x05\xe2\x33\x0a\x78\x1a\x4f\x30\x37\x0d\x39\xb9\x20\x17\x23\x2c\x66\xa6\xfa\x29\x07\x67\xe6\xb5\x09\x6f\x2b\xc5\x84\xd0\x5c\xab\x68\x99\xa1\xa2\xc4\xaa\x77\xc2\x45\x95\xb7\x4d\x09\x85\xe4\x28\xbd\xca\x67\xc5\xb8\x7d\x56\x6a\xda\x49\x81\xf6\x55\xa6\x38\x4d\x02\x12\x31\xa1\x76\xc7\xe9\x41\xb5\x53\x10\x53\x3d\x15\x3a\x36\x1f\x34\x6e\x44\x20\xb5\x65\x3f\xf6\x5b\x7f\xea\x47\x58\x4c\xc4\x69\x4a\x60\xa8\x79\x08\x98\xaa\xd1\xc4\x88\xc7\x1e\xd3\xf0\xf2\x4a\x92\xb7\xd0\x5d\xff\x56\x2f\xd8\x6b\x57\x66\x0a\xac\xe9\xf9\x5b\x1f\xea\x5b\xa3\xe4\x83\x2d\x7e\x2e\x1a\x86\xa6\x02\x4c\x9e\xd1\xf3\xba\x8a\x48\x3a\x21\x4f\x55\xc3\x3c\x5c\xef\x4f\xd9\xe3\xf7\xa7\x0b\xbd\xdc\xf2\x43\x68\x50\xf2\x94\x94\x3f\xdd\x8b\xef\xea\x09\xa0\x91\x90\x90\x86\x7b\xc9\xb2\x14\xa1\x87\x0c\x39\xc7\x01\x24\x4e\xb1\x6e\xa5\x66\x81\xea\x9c\xdc\x2f\x78\x48\xee\x97\x2b\xff\xe4\x55\x42\xd4\x97\x62\xe1\x27\x2d\xcb\xbf\x2b\x25\x11\x78\xbd\xb6\x0a\x02\x6f\x46\x79\x6e\xb1\x54\x76\xa7\xdc\xd4\x17\x80\x2c\xa4\x2f\xe5\x2e\x7d\x61\xd3\x9a\x21\x8c\x14\xf4\xd5\x4c\xa5\x78\xe4\x3f\x5d\x7a\xf8\x3e\x25\xc1\x2b\xa4\xa0\xcc\x02\x6b\x84\xd7\x1d\x6a\x17\xce\xaf\xdb\x26\xa8\x4a\x98\xaf\x14\xde\x06\x1c\x10\x27\x9f\x3d\xa6\x44\x8c\x12\x72\x90\xe5\xbe\x9e\x40\xb3\x95\x7c\x11\x40\xbe\xb0\x40\xe3\x92\xe2\x21\x61\x10\xf3\xa1\x99\x5a\xf2\x27\xcf\x9f\xc8\x5b\xbc\x9a\x48\x57\xe7\x22\xcd\xe0\x36\xb7\x3b\xd4\x99\xa7\xfb\xc5\x05\xc4\x10\x07\xa2\x08\xe1\xe6\x8c\x3f\xa1\xc3\x55\x89\x1f\x84\xea\x43\x46\xff\x7e\xd2\x1a\x73\xf5\xc5\x25\x66\xbb\x1a\xdb\x75\xb2\x5d\x0f\xa4\x55\x8d\xfd\x3a\xd9\xaf\x52\x2e\x55\x8b\xa5\xc6\xd2\xb5\xe4\xed\x8d\x7e\xc6\x96\xd1\x1a\xe5\x7c\x19\x61\x3e\x4d\x2d\x5e\x04\x4b\x86\x40\x91\xa8\x9c\x84\x46\x76\x49\x33\x91\x67\x5e\x09\xe5\xc1\xc6\xdf\x11\xc1\xad\x71\x36\x59\xab\xc8\xe4\x64\xc4\xb6\x2e\x4e\xbe\xe1\x30\xed\x97\xc2\xe9\x13\xad\x7d\xe3\x73\x3a\x76\x3a\xc4\xdd\xac\xd4\xa0\x7e\x92\x89\xd2\xc3\xfc\x81\x4c\x79\xc1\xc8\xb0\x30\xd0\x2e\xc4\x80\x46\x4f\x33\x21\x31\xc1\x7c\xeb\xb3\x3a\xdb\xd8\xa4\x5d\x76\x6c\x7f\x12\xb2\x5c\x61\xe7\x8c\x81\x14\x81\x9c\x51\x62\xc4\x2e\xe3\x1d\xad\x30\x83\xbb\xf9\xab\xe1\x83\x3c\x99\xc6\x88\x53\x21\xb3\x2a\x92\xd2\x08\x9e\x7b\x70\x08\xd2\xe1\x19\x70\x1a\x21\x98\x9f\x20\x7e\xa4\x59\xca\x25\x63\x01\xe2\xb9\x9a\xe7\x9a\xc4\x37\x8c\x86\x14\x43\x0b\x37\x1e\x58\x60\x82\xdd\x48\xdc\xa0\xd9\x0b\xe4\x32\x0b\xf6\xa2\x31\x30\xeb\xa8\xb8\x07\xc5\xc6\xac\xbc\x70\xc5\x0f\xfd\xfa\x0c\x97\x3d\xf7\xc4\x44\x0d\xfa\x12\x3e\x93\xed\x2a\xe6\xd4\x9e\x2c\xf7\xf9\x99\x34\xe9\x4d\x78\xb9\x25\x09\x0b\x9d\x08\x9d\xf3\x2f\xfe\x84\xf1\x83\x41\x43\xc8\x49\x2e\x77\xd9\x6d\x7d\xee\x0c\x7f\x87\x16\xfa\xdf\xc1\xb9\xae\xba\xc9\x4c\x58\x6e\x70\x10\xec\x70\x1d\x1b\xe2\x64\x80\x28\x9b\x34\x80\xd0\xb4\x01\x84\xd6\xf3\x40\x23\x08\x0d\xc6\xbb\x62\x7b\x0a\x28\x9b\x1d\x9f\x62\xf2\x67\xf8\xd6\x34\xbf\x25\xb2\x6f\x8d\xeb\x9b\xfc\x46\x6d\xe9\x0c\xfa\x73\x07\xc1\xcc\x8d\xfc\xe1\xd3\x9f\xf2\x39\x23\x19\x41\x47\xb5\xf8\x7a\x95\xcc\x9a\xdf\xc9\x17\x13\x99\x8f\x98\xb6\x84\x33\xfe\x84\x77\x54\x7d\xc4\x8b\x31\x0c\x34\x70\xda\xa5\x0c\x08\x31\x2f\x29\x3a\x48\x64\x46\x48\x33\x4d\x1e\x12\x26\x0c\x00\x9c\x87\x98\x24\x60\x91\x1f\x61\xf8\x13\xff\x33\x44\x2c\x57\x0e\x2a\xa9\x80\x25\x3d\x39\xb3\xa0\x08\x51\xf1\xa9\x05\x32\x35\x44\xee\xbf\xea\xab\xff\x9a\xaf\xfe\xcb\xbe\x6e\x59\x60\x26\x04\x4f\x37\x4e\x1f\xf8\x33\x2e\xba\xcd\x42\x80\x25\x7b\x45\x73\xc1\xea\x72\xe3\x21\x65\xc3\xd3\x01\x7f\xf1\x27\x7c\x0b\x4b\xf5\x56\x8e\x2a\x0f\x86\xb1\xd6\x21\x40\x9b\xa7\x20\x44\xd2\x74\x2c\x64\x24\xe5\xd0\x4d\xa4\xc4\x8e\xfb\x4b\x82\x50\x92\x6f\x97\x2a\x62\x22\x04\xcb\xe4\xae\x07\x53\x4e\x40\x69\xee\xa9\xd4\x30\x17\xa5\x4e\xd9\x88\x62\x33\x4f\xab\xae\x96\xc5\xf9\x30\x09\xfe\xbd\x97\x12\xf8\xe1\x0b\xb3\x32\x49\x8d\x61\xaa\x86\x4a\x75\xec\xf4\x32\x39\x1d\xd8\x7f\x71\xb9\xf8\x87\x67\x0d\x67\x21\x19\xc8\x66\x49\x8e\x73\x5c\xa2\x69\x0a\x04\xab\x98\x5c\xa6\x25\xca\xa2\xc0\x59\xbe\x74\x44\x28\x5f\x81\x83\x89\xc0\x2c\x2a\x2f\xf1\x2b\x2c\x32\xd9\x39\xb9\xa3\x1c\x83\x03\xa4\x50\x1d\x73\x54\x12\x14\xe1\xe5\xc7\xd6\x84\xa7\x32\x56\xf2\x0e\x79\x48\x20\xd2\xf4\x64\x52\xdd\x7c\xe8\xf1\x65\xa1\x1a\x0d\xfc\xd3\xaa\xe8\xf0\x52\x4a\x03\xa7\xa5\x09\xab\xa5\x29\xaf\x85\x05\x70\x99\xba\x48\xb9\xa5\x41\x31\x80\xa7\xfb\x96\x1c\xdd\xdc\xa0\xf8\x90\xbf\x07\x60\xae\xea\x6e\xe6\x15\x1a\xae\x6a\xfd\x6b\x21\x01\x76\x6e\x72\xa5\xee\x45\xf6\x76\x4e\xdc\x03\x80\x29\x59\xab\x41\xcd\xa5\xdf\x10\x15\x11\x38\x4a\x80\xe8\xae\x4d\xdc\xd4\x28\x2e\x25\x97\x7b\x31\x5a\x83\x88\xc2\x59\xea\xbc\x32\x49\xd4\x47\x02\x1f\x1d\xb3\x60\x6a\x74\x56\xbe\x93\x26\x6d\x8c\x7f\x1c\x77\x39\xa9\x25\x79\xdb\x77\xfe\xc1\x47\x51\x9e\x78\x49\xa0\xda\x76\x81\x40\x59\x30\x10\x8a\x1f\xa3\x99\x84\xe4\x09\x47\x2a\xd9\xd4\xf5\x79\xc6\xd4\x54\x3e\xe3\x5e\x22\xa0\xe0\x5b\x98\xb8\x2e\x7e\x4a\xff\x37\x58\x52\xe1\x4e\x94\x36\x35\xc6\xf2\x52\x2c\x28\x2e\xb1\x5a\x94\x85\x5c\xec\x17\xc3\xff\xd2\x12\x41\xfe\x48\x68\xd9\xcf\x65\x4a\x67\xc2\x0b\x61\x6e\x72\xe0\xd3\x9f\xf5\x69\x81\xaf\xd0\xe1\xf7\x07\x6c\x31\x97\xa6\x98\x4a\xd2\x21\xf8\xcd\x0c\x96\x89\x63\xdb\xd0\x84\x19\x70\x13\x1e\xdb\x46\x2d\x97\x0f\x1b\xca\xb1\x38\x7f\x0e\x9d\x9f\x0d\x9b\x9f\x0d\xcc\xc5\xc6\x75\x89\xcb\x75\xa9\xcb\x75\xc1\xe5\xc6\xb0\xc5\x77\xac\xc0\xc5\xc8\x22\x02\x46\x56\x19\x30\x32\x77\xfe\x51\x75\x5c\x01\x82\x5b\x95\x53\xd7\x02\x21\x57\x18\x6a\x98\xcb\x65\xc3\x30\x93\xa4\x2a\x27\xd6\x08\xd5\x78\x90\x46\x81\xed\x93\xf3\x99\xb2\xf6\x49\x85\x57\xed\x94\x58\x24\xe6\xa3\x26\x2a\x1c\xff\x2b\xf3\x71\x93\xf5\x04\x80\x2c\x00\x6e\xbc\xf6\x88\x0d\x3e\xc1\x3c\x61\x06\xe6\xf3\xc6\x82\x7f\x05\x73\xc7\x14\x5e\xe2\x8e\xe3\xa0\x0c\x90\xd3\x78\xe8\x42\x9a\x3c\x2a\xc0\x26\x8d\x1f\x51\x9f\x4c\xf0\x34\xf4\xa2\xa1\xc5\x3c\x03\x5a\x89\x33\xa2\x80\x59\xee\x8b\x0a\x9a\xed\x8d\xa4\xaa\x13\x2f\xb2\xf4\x10\xe5\x8e\xb2\x00\x24\x73\xe8\xde\x7e\xcc\xd9\x6d\xf8\xcb\x1f\xe3\x0b\xb1\x64\x77\x41\x89\x11\x38\x6d\x9f\x24\x88\x01\x75\x14\x54\x4c\xa4\x14\xaa\x77\xd8\xd1\x8e\xd5\xcb\xfa\x6e\xac\x7e\xf0\x6b\x18\x82\xc0\x53\xb5\x73\x34\x80\x55\x01\x74\x55\xc1\xbc\xa2\x41\xf8\x22\x81\xc7\x1a\xae\x52\x9f\xce\x78\xa5\x0b\xd8\x97\x34\xae\xac\x31\x5e\x2f\x7e\x69\x27\x9a\xf3\x2b\x8d\x19\xd1\x2b\x0d\xe3\xe7\x3a\x9e\xba\xc6\xf9\x9f\xf3\xd3\x63\x2a\x5e\x7f\xd0\xfe\x8f\x85\xf9\x67\x9b\x19\x3c\x8d\xc9\x43\x76\xef\x78\xcc\xec\x0a\xbd\x78\xce\xa3\xaf\x64\x59\x8a\xe4\xc2\xa5\x76\xe0\x5a\x3e\xfc\x35\x2f\x3f\x91\x56\x52\x6f\x13\x4c\xfa\x9e\x05\x7a\xb5\x25\x26\x7e\xcc\x66\xc5\x8b\xb7\xee\xd6\x02\x9b\x4b\x60\x20\xe5\x29\x69\xa1\x4a\xb2\x4c\x57\xa9\xef\x7a\xf2\xb9\x51\x20\xb4\xd2\x2a\x0f\x13\x13\x2a\x7e\x5c\x1a\x9f\x12\x1a\xa3\xd0\x52\x27\x15\x1d\xae\xca\xa5\x09\xf1\x83\xb3\x8a\x11\xe7\xe0\x02\x23\x7e\xfe\x9b\x13\x6a\x21\x39\x32\xb4\xf4\xdb\x55\x72\x77\xf0\x76\xbb\x5d\x50\x93\xf5\x8e\xd8\x6c\xde\x8c\xa7\xf4\xd8\xc0\x2e\xae\x8c\x7c\xb1\xcd\x31\x49\x27\xfe\xd1\x2a\x41\x2e\xc9\x7b\x59\x94\x8f\xba\xf6\x16\x7b\xfc\x0d\x2c\xca\x62\xd7\x6e\xd8\x25\x8e\x47\xbd\x88\x42\x4e\x00\xfd\xfc\xad\xdb\x90\xf1\xcd\x5e\xdf\x34\xac\xd1\x57\x27\xcc\x82\xad\x21\x0a\x09\x5e\x88\xf8\x5d\xfc\xfd\x7e\xfa\xfb\xfd\xf0\x47\x1c\x24\x2a\x0f\x3c\x29\x40\x78\x0e\x2f\xc9\x45\x5c\x94\x67\x04\x2e\x93\x8b\xf5\x2d\x73\xf4\xe4\x2e\x33\xf5\x5c\x4a\x92\x17\xcb\x08\xd0\x80\x91\xdc\x25\xda\x67\xe2\x03\x3f\x18\xc6\x92\xcb\xc7\xb4\xfe\xd2\xa8\xb3\x01\x2c\x93\x24\x12\x48\x85\xcc\x06\x0d\x2c\x39\xf9\x49\x03\x23\x2a\x1c\x98\x48\x99\x90\x54\x57\x92\x2b\x4f\x02\x5a\x17\xa4\x8b\xa5\x42\x78\x2b\x9b\x69\xc1\xa5\x23\x24\x8a\x47\xcf\x3f\x24\xbe\x2b\xe5\x55\xe1\x4e\xae\x9f\x68\xeb\x49\x97\x28\x92\x1b\x34\x49\x41\xa1\x60\x97\x28\xe9\x63\xd9\x82\x8a\x9e\x2c\x24\x12\xed\x3f\xf1\x9f\x9d\xd8\x40\x6c\x6f\x3d\xe2\xa4\x50\xad\xd1\x79\x92\xfb\x3e\xdd\x75\x21\x7b\xdf\xca\xdb\x13\x98\x81\x47\x4a\x4e\x1a\x13\xdf\x78\xe5\xaf\x64\x9c\xdf\x90\xe3\xa0\x40\x5c\x34\xc1\xe5\x66\xee\x70\xab\x93\x56\x85\x81\x70\xa3\x8a\x16\xe2\xad\x5e\xfc\xe9\xc8\x88\x3b\xab\x9d\x29\xc8\xa3\xa4\xd2\x8a\x98\x94\x25\x22\x23\xc4\x89\x7f\x13\xee\x53\xb8\xf9\x91\x6d\x14\x6b\xc0\xdf\x89\x25\x95\x7a\x58\x4e\x44\x43\x4a\xa1\x7e\x21\x93\xa1\x7e\x69\x5e\x18\x21\x2f\xf5\xcb\x02\x7c\x51\xd7\x4b\xa1\x0e\xdc\xc2\x51\xc8\xa9\xbc\x11\x50\x9e\xad\xf3\x29\xea\x52\x50\x8a\xf8\x2f\x15\x80\xda\x89\xae\x04\xc0\x09\x45\x5d\xcb\x26\x44\xe9\xc4\x4b\xd6\x4e\x08\x71\xbe\xe4\x75\x9a\xf5\x69\x9a\x3f\xff\xbc\x53\x43\xa4\x08\x6b\xd9\xb7\x49\x31\x1f\x92\x56\x3e\x34\xad\x7c\x70\x0a\x59\xc3\x2c\xba\x25\x11\xaa\x4c\xa6\x98\xff\x0e\x49\x5b\x27\xe4\x84\xb8\x2c\xe3\xdf\x11\x94\xe3\xbf\x83\x9b\x4b\xfc\x3b\x24\xf7\xbc\x26\x93\x3e\x6b\x2e\xe2\x0e\x87\x17\x15\x33\x45\x39\x86\xc6\x40\x0e\xb0\xa5\xe2\xc0\x52\x71\x5a\x7e\xc5\x6b\x0d\x14\x39\xf2\x4c\xe0\x61\xc3\x26\x53\x49\x5e\x43\xf0\x89\xef\xc3\xfb\x54\xf4\xe9\x12\x85\x1a\x1b\x08\xf1\x1b\xb5\x33\x41\x17\x49\x85\xb5\xbf\x84\x91\x86\x0c\x79\x0c\x95\x70\xaf\x78\x60\x73\x62\xe6\xb7\x9f\x72\x3e\x84\xa0\xc6\xcb\x93\xfe\x54\x06\x1a\x7a\x19\x3b\x6a\x80\x01\xd7\x40\x91\x8b\x36\x40\x12\x6a\x20\x57\x6f\xe5\xfb\x0d\x29\x20\xd7\x9f\x7c\x2a\x0f\xf2\x3a\x36\xad\x62\xd5\xcd\x93\xe9\xe6\x09\xba\x79\x1a\x9b\xee\xb2\xa7\xc1\x6b\x91\xc9\x6a\x4b\x95\x6e\x02\x92\x34\xdf\x35\x21\x43\xc4\x1c\x03\x44\x77\xb1\x90\x1a\x37\xa6\x8b\xf6\xfa\xae\xd7\x07\x0e\x7c\x1a\x38\x70\x90\x9e\x9b\xa7\x9e\x6c\x92\x88\xc9\xe1\xe2\xf2\xca\x58\x63\xcc\x71\xd7\xb7\xe7\x19\xdb\x36\x8f\xfd\xfb\x91\x10\xc6\xe3\xe2\xf6\xff\x06\x3f\x23\x42\x70\x40\xe7\x2b\xee\x50\xf5\x0e\x10\xc2\xb5\xcc\x53\xca\x45\xb6\xbc\xd9\x6c\x62\xa1\x32\x99\xe6\xb2\x5c\x00\x58\xcd\x2f\xae\xfa\x2e\xf1\xd6\xa6\x46\x15\x13\x81\x5b\x47\x40\x2e\x47\x7d\x90\xc1\x17\x3c\x85\xe7\xcb\x86\xd7\x5b\x01\x90\x95\xed\x9b\xdf\x2e\xf1\x85\xef\x70\x91\xc1\x1e\xe6\x13\xdf\x84\xb9\x24\xc9\x14\xfa\xe1\x1f\xc9\xfa\x42\x13\x19\x92\x97\x00\xcc\x9a\xff\x82\xb0\x2c\xfe\x8b\x2f\xe1\x7b\x79\x5d\xc4\xeb\xe3\x22\x5e\xde\x16\xf1\xd6\x4d\x8a\xff\xca\xe1\x51\x3b\x5b\x95\x2b\xfe\xab\x8d\xca\xa0\xe4\x26\xc7\x1e\x8b\x5c\xe7\xf4\x65\x8f\xfa\x98\xb8\x2f\x61\x1f\x73\x28\x2b\x21\xb9\xec\x8e\xf4\x40\x3c\x14\xd9\xcb\x2f\x21\x95\x0b\x3c\xce\x9d\x76\x83\x08\x98\x79\x0d\x65\xc5\x48\x34\xfc\x1d\xb0\xac\x3e\xa2\x3a\x09\x89\xd6\xcb\x98\xdb\x40\xc0\x3f\x98\xe0\x95\xd4\x2d\x09\xad\xba\x54\x09\x6f\x18\x3f\xd4\x49\xb9\xfe\xc3\x4f\x97\x3f\x6c\xf9\xf2\x7a\xa1\xa1\x32\x90\x32\x78\xbd\x74\xf9\xb1\xbc\x20\x1e\xcb\x81\x90\x87\xaa\x61\x8c\xa4\x15\x1e\xd2\xf0\x0e\xfc\xc7\x98\x80\x2a\x4d\x80\x08\x9a\x67\x1b\x63\x2c\x61\x55\x6f\x02\x14\xaf\xf2\x90\x19\xc3\xa6\xd9\x07\x96\x80\x27\x1e\xf1\x24\x20\x39\x39\xed\x27\x4c\xbe\xe8\x6d\x83\x12\xb3\x8f\x38\xfa\x6c\x90\xe3\x8d\x99\x35\x6d\x2b\xae\x38\x4f\x2a\x14\xcc\x98\xca\x97\x9c\x04\xe1\x25\xb5\x92\x9c\xb7\xd1\xb2\xa4\x9d\x3f\x68\x3d\x69\xef\xa3\xf2\xb2\x5c\x49\xa1\xe8\x6d\x7f\xbe\x33\x88\x90\xa2\x41\xe8\xa2\x41\x49\xc9\x6d\x45\x75\x6a\xa2\x6e\x2d\x2d\xc6\xd1\xb0\x48\x63\x7e\xc7\x70\xfa\xb0\x70\xc1\x4f\xdb\x80\xb3\x57\x40\x71\xb1\xd5\x22\x07\x31\x43\x46\xf9\xb1\x10\x93\x07\xe6\xc2\x04\x33\x4d\xd0\x65\x39\xaf\xa4\x14\xb5\x10\x52\xb2\x93\x74\x84\x33\xba\x60\x4a\xb1\xcd\x14\x8a\x9f\x3e\x44\xcb\x27\xf4\x77\x44\x85\x78\x86\x8c\xe0\x90\x5a\x4b\xb2\x71\x5f\x64\x70\x61\xd3\xca\x63\x1e\xbf\x25\x9c\xa5\x97\x27\x3d\x86\xc2\x68\x2f\x02\x66\x5e\x4b\xe5\x87\x6e\x81\x86\x58\xe1\xf6\x41\x59\x6f\x1f\x94\xcf\xdb\x07\x4c\x6a\xa9\x14\x2b\x7d\xc8\xcf\x54\xf8\xc2\x16\x03\x0c\x87\x25\x95\x31\x19\x19\x1f\x0c\x0c\x4b\x77\x2c\x51\x0e\x8b\xb3\x4b\xdb\x19\x1b\xa6\xff\x34\x6f\xde\xe0\x6b\xe0\xd9\x17\x46\x72\xa8\x42\x61\x0f\x86\xad\x51\xc9\x7c\x5b\x00\x66\x17\x4c\x30\x10\xe1\x23\x2a\x11\xaf\xf2\xb1\x14\xbf\x36\x6b\x52\xd7\xa6\xb5\x76\x6d\xd6\x6f\x18\x5a\x7e\x84\x9a\x9e\x74\xe6\x51\xae\x4d\x72\x74\x6d\x83\x4b\x9c\xcd\xa8\x91\x8c\xa6\xa1\xc2\x4c\x2f\xec\x12\x36\xec\x60\x2a\xc8\x78\xc4\x00\xb1\x04\x1e\x7c\x2e\xdc\xb7\x65\x70\x8a\x17\x95\x9b\x97\x4e\xd8\xca\xf5\x92\xe0\x2f\x0d\xfd\x2a\xd5\x52\x23\xac\x3c\xbe\x38\x2e\x24\xaa\xd1\xb0\xb2\x50\xae\x29\xce\xae\x28\xd2\xf4\xba\x9c\xbc\x7d\x22\x58\xbc\x5e\xfa\xb2\x04\xe1\xe0\xa6\xe0\xb8\xae\x70\x95\x7f\x88\x59\x86\x4a\xbf\x57\x57\xb4\xad\xeb\x0a\xfa\x00\x0b\x88\xfd\x03\x2f\xbe\x9a\xc6\x95\x3f\x92\x65\xaa\x2b\xd1\x17\x87\xee\xb4\xa6\xe6\x8f\x94\x8c\x28\xd3\xad\xfa\x4f\xa8\x8d\xf6\xba\x96\xaa\xbf\xec\xea\x16\xe1\x16\x26\x07\x4c\x4c\x6f\xad\xcd\x64\x63\x6b\xb3\x0c\xa2\x1c\x16\x07\xc4\x61\x17\xc2\x7d\xf2\x5c\x76\x19\x75\xaf\xab\x64\x31\xa6\x63\xe6\x5f\xe7\x0b\x6e\x21\xb7\x15\xc7\xe9\x8d\x49\xa9\x62\x2a\x69\x1e\x02\xae\xab\x2c\xf5\x51\x8c\xdf\xa1\x56\x23\xaf\x39\x1f\x59\xfe\x43\x6e\xc4\x12\xc2\xa6\xad\xa0\x16\x1e\x41\x69\x84\x1f\xd1\x35\x6b\xbd\x44\x75\x85\x33\xf3\x63\xa9\xa2\xd1\xa1\x00\x5c\xd2\x65\xf9\xe1\x5a\x31\x35\xa7\xb7\x5b\x93\x16\xaa\x2f\x84\x36\xd4\xdb\xe5\x67\xe2\x3a\x43\xcc\x6a\xbb\x5d\xed\x97\x0e\x90\xd7\x6d\xd3\x7e\xe0\x35\x62\xa6\x66\x6c\x3a\x57\x27\xbc\x70\xd6\xab\x8e\x97\x17\x9f\x8e\x57\x87\x90\x12\x46\xe4\x8b\x7f\x1d\x2f\x95\x7d\x87\x3c\xd3\x23\x3c\x6b\x0a\xa4\x14\xf6\x1d\xba\x85\xee\xd1\x78\x8f\x69\xfa\x48\xb2\x7a\xc8\x70\x8a\x34\x22\x44\x19\x21\x6c\xd9\x21\x2d\x52\x80\x8c\xa2\x04\x97\x92\x10\x42\x63\xb7\xd3\xec\x4c\xf4\x19\x7d\xb0\x08\x8d\xad\x14\x7e\xd4\x9c\xd9\x01\x61\x31\xfc\xac\x85\x29\x3f\xc1\x17\xa8\xcc\x46\x39\xa6\xaf\xd8\xa2\x8f\x5e\x56\x75\x99\x58\xfb\xbe\x92\xc2\x75\xc9\x33\x3f\x8c\x25\x3a\xc6\xd1\x1c\xc4\xf3\xac\x09\x4c\xf2\x18\xc4\x1e\x0c\xcd\xcc\xe8\xdf\xf1\x15\x9b\x4c\xb9\x4b\xb3\x0e\x79\xdb\xda\x29\xe1\x31\xe5\xdb\xfa\xe3\xfb\x85\x7c\x2b\xd5\x34\x79\xbe\x66\x32\x7d\x2d\x32\xe5\xb6\x1b\x28\x84\xe3\x64\xdd\x8e\x2a\x11\x2e\x10\x4a\xe0\x40\xfe\x6c\x2f\x50\xf9\x92\x87\x91\xad\x2a\x40\x4b\xe1\x8e\x7a\x2c\xf2\x52\x49\x09\x38\x0b\x9d\xfb\xaf\x71\x36\x7b\xb3\xc9\x50\x3c\x3a\x4d\x66\x70\xda\x25\xb2\x0f\x11\xf5\x41\xe8\x3d\x6d\xb3\x2d\xbd\x0a\xc5\xbd\x29\xfb\x70\x77\x27\xab\x55\xa0\x34\xc9\x6c\x27\x4e\x00\xc7\xb4\x1d\x53\xb2\x65\x1f\x6a\xd6\xf4\x2a\xe9\xc1\xc1\x70\x2f\x0a\xd5\x83\x95\x3b\xb0\x4e\x40\x40\x49\x52\xa7\xa4\x73\x3a\x89\xea\x94\xd0\xe7\x9c\xd1\x65\x7f\xaa\x52\x98\x79\xe3\x59\xd6\x62\x4a\xe6\xcd\x18\x4d\x83\x37\x68\x0c\x49\x19\x67\x1f\x73\xd6\x68\xf8\x48\x49\xc9\x3e\x8d\xdd\x42\x25\xf9\x03\x21\x70\x9b\xe5\x61\x8a\x66\xf6\xc5\x5b\xd1\xf0\x78\xcf\x9d\x2b\x7b\xd9\x49\x16\xb4\x58\x5a\xda\x35\xf4\x25\xdb\x35\x58\x34\x43\x5e\x67\x66\x7c\x47\x9d\x5f\x0b\x61\x0c\x8d\x5a\xcd\xa1\x35\x37\xe1\x64\x73\xcc\xb2\xc4\xfb\xe2\xbe\xe4\x3d\x5c\x2a\xbb\x80\x95\xa1\x7d\x8a\x4a\xe0\x59\xff\x42\xbe\xcd\x0d\xf5\xb0\xcf\x3e\x26\x37\x40\x45\x99\x11\x4a\x13\xdf\xe3\x91\x61\x9a\xf8\x53\x2c\x49\xc7\x25\xad\xd8\x55\x8c\xe5\xbd\xa4\xc9\x5e\x11\xf9\x9e\xf7\x32\x33\x30\xac\x3c\x08\xbe\x15\xf5\xc5\x76\x89\x7a\x58\x5d\xed\xf6\xbf\x49\x23\xa4\x87\xe6\x7d\x88\x64\x64\xe2\x91\xfe\xb0\x3f\x38\xb8\x01\x64\x73\x99\xfc\x72\x73\xe3\x8a\xa8\x5a\x65\xf5\xc0\x30\x07\x7a\x85\x7d\xaa\x32\x79\xd9\xc1\x62\x42\x07\x4e\xc2\x6f\xb3\x7d\x3b\x51\x45\x99\x90\xd4\x19\x4a\xd2\xc1\xc6\x52\xc6\x96\x4f\x23\x78\x99\x6c\xd2\xc2\xa3\x4e\x5d\x05\x29\x1b\x51\x2b\xef\x15\x8f\x75\xda\x61\xb4\xf0\x6e\x43\x1f\xc1\xb0\xe2\x5d\x81\x16\xe5\x2b\xd6\x6b\x7a\xa8\xd7\x2c\xa7\xc8\x3f\xcd\x67\xd4\xfc\xf4\xd2\xfc\xf4\x92\xdc\x21\x0a\x96\x60\xe3\x20\x45\xff\x81\x2d\xc4\xd0\x8c\x15\x91\x01\x34\x9d\xb1\xd8\x0b\xce\x72\x10\x9a\x63\x05\x08\xe1\x85\xb4\xdd\xaa\xb9\x1e\xb3\x70\x97\xae\xff\x32\xb1\xcc\x50\xf9\x38\x16\xb9\xab\x4f\xdd\x03\x4a\xf1\x12\xea\x0a\x6d\x2e\x93\xf5\x77\x88\x02\x51\xb1\x47\x2a\x57\xa8\x32\xb9\xca\x47\x1a\x3d\x66\x29\x09\x21\x2c\x4c\x75\x7d\x24\x75\x03\x31\x2b\x4e\x2d\xa4\x7c\x8e\x1a\x8e\x0f\xd7\x70\x2c\x11\xad\x0d\xe8\xa8\x5a\x92\x47\x1d\xd2\xda\xc0\x8c\x0a\x57\x59\x8e\x05\xc8\x02\x96\x65\xc5\xbc\x48\x68\x79\x22\x8d\xbd\xff\x17\xbc\xdd\xe1\x34\x0a\x2e\x45\x5b\x10\x21\x4e\xfc\xbf\x71\x98\x4f\xdc\x96\x00\x90\x3e\xc5\xd0\x78\x06\xf5\x16\xdf\xd9\x77\x03\x8b\x17\xa2\xde\x1f\xc4\xf4\xaf\x8c\x88\x06\x47\xa6\x59\xcd\x45\x11\xc6\x48\x3f\xcf\x45\x11\x60\x4d\x27\xdb\xa2\x48\xce\x53\x43\xcb\x39\xbe\xa5\xa6\x72\x7c\x4b\xf9\xe6\x32\xdb\x50\x2e\x86\xc6\x26\xc5\x6b\xe7\x47\x4a\xfe\x3b\x6c\x66\x94\x9b\xcb\xc7\x88\xba\xcc\x94\x9b\xd3\x91\xb7\xf9\x18\xec\x98\xb8\x90\xaa\x6e\xf0\xca\xa3\x75\x5e\x5b\x86\xcc\xb2\xa9\xac\x6c\xb6\xe0\x67\x5f\x03\x21\x0d\xa8\x05\x3f\xa6\x83\xdc\xc6\x61\x38\x97\xbc\xb2\xfd\xc6\x9d\xf1\xdf\xf1\x09\xa3\x06\xa9\xa6\x90\x30\x56\x4f\xf5\xbd\x54\x69\x8b\xfb\x92\x65\x26\xfa\xc4\x92\x61\xfd\x7d\x3b\x63\x5d\x8b\x64\x68\xf2\x5d\x09\x6e\xa7\xad\x58\x47\x6d\xcb\xf0\xd2\x4a\x8a\xfb\xcc\x36\x3f\xf2\x95\xd4\x65\x48\xb2\xfa\x9b\x76\xc6\xb6\x18\xc0\x58\x93\xba\x83\xbc\x54\x42\x38\x7a\xed\x3d\xf8\x3d\xbe\xc6\x2e\xff\xca\xd7\x30\xaa\x34\xc8\x75\x53\xe5\xa8\xc7\x6e\xa5\x47\x78\x29\x18\x90\x12\x5b\xaf\x73\x3a\x22\x94\x94\x8d\xfd\x14\x5d\x88\x7c\x58\x7c\x75\x2c\x21\x96\x01\x53\xa8\x99\x52\x9d\x83\x66\x1b\xdb\x3c\x49\x40\x64\xc0\x3f\xa3\x85\x5f\x55\x1d\x9b\xfe\xdd\x5f\xf1\x0c\x9f\xba\x8c\x31\x0c\xd5\xf6\x9a\xbe\xaf\x6b\xf1\x7d\xcd\x01\xc3\xfe\x63\xef\x0b\xff\xe8\x5c\x9a\x5e\x77\x87\x29\x0b\x8c\x51\xda\x7d\x29\x90\x6e\xc5\xc1\x7f\x60\x9d\xd6\xcb\x12\x04\x28\x0d\x1c\xae\xac\xa5\xd1\x03\xcd\xe9\x3e\x08\x0b\x12\xae\xbb\xd4\xd9\xee\x85\x06\xbb\xfc\x1b\xef\x35\x92\x3e\xcc\x9b\x4d\xa6\x18\x0b\x6b\xf6\x67\x6f\x23\xd4\x7b\x5d\x39\x6b\x4b\xd8\x1f\x2b\x04\x82\x75\xc5\x12\x69\x3c\x2c\xd5\x68\x13\xb5\xdc\x67\x33\xe8\x31\x5b\x33\x60\x9c\x0c\xf5\x69\x69\x39\x8e\xd9\xe2\x13\x6d\xa4\x17\xd5\xe8\x09\xcd\x1c\x80\xf8\x70\xb1\x69\x02\xd3\x12\x63\x75\xcb\xd4\x82\xa8\x54\xfc\xd7\xb7\xa8\xe2\x5d\xef\xfe\x0a\xb4\xf2\x64\x62\xc5\x96\x6e\xb5\x4d\x2c\xe0\xb1\xd8\x5b\xb1\x54\xb7\xc7\x29\xcf\x85\xb4\x02\x17\xf2\xbd\x3a\x4a\x23\x64\xaa\xf5\x98\x57\xf7\x52\x37\x1d\xd8\x7b\xe5\xeb\x2f\x93\x98\xb3\x58\x26\xd7\x44\xee\x91\xa7\xc7\xba\x38\x58\x52\x6d\x65\xb1\x2d\xf1\xf0\xe1\x78\xa0\xe5\xff\xca\xb0\x91\x6a\x9b\xff\x67\x37\x6a\x29\x24\xfd\x5f\xbb\x11\x26\x8a\x94\x94\x04\xa2\x45\xf7\x5e\x22\x7b\x6b\x39\x96\x34\xfb\x06\x11\x32\xe8\xf4\x5a\xf8\xf7\xc9\x1a\x65\xb1\x3f\x27\x13\x39\x2e\x67\x23\x4f\x1f\x57\x48\x93\x68\xb3\xcd\xd8\xfc\xea\xbd\xec\x30\x12\xc1\x7f\x5a\xf6\xda\xe9\xde\xeb\xb0\xfb\x9e\xc3\xee\x3b\x58\x47\x7f\x87\xac\xc3\xd1\x5b\x7f\xa4\x54\x8d\x9a\x61\xb3\x36\x16\x81\x10\xfe\xef\x50\x0f\x0b\x5d\xdb\x8c\xb4\xea\x8c\x8b\xe1\x1a\x91\xf6\x88\x35\xd7\x8c\x95\xb5\x1f\x18\x8f\x45\xb6\xb4\x46\xc2\x71\xc5\x16\xef\x6c\x94\xef\x98\xfd\xf4\x83\x87\xb5\x19\xbe\xa5\xc8\xf9\xff\xd2\x33\xe4\xdc\x40\xc9\x7c\xb8\x4b\xd8\x03\x94\x6c\x12\xb1\x84\x48\x63\x99\x9b\xbe\x0b\xff\xd8\x63\x16\xfa\x48\x96\xf9\x91\x6c\x06\xc8\x78\x06\xb2\xd5\x10\x79\xb2\xd4\xeb\x8b\xa5\xbe\x94\xc4\x1f\x6c\x56\x94\x7b\x4e\x8c\x4a\xdd\x65\x87\x0e\x48\xac\x6f\x3d\x51\x5f\x6e\xd7\x14\x05\x43\xd2\x80\x78\xf1\x8d\x6a\xf6\xbe\x79\x6f\xbc\xdc\x37\xae\xfe\x95\xbb\x3a\x6c\x83\x97\xbb\x1a\x28\xc9\xc9\x6e\x2a\x61\xd9\x44\xbb\xeb\x7c\x29\x03\x04\xde\x11\x53\xbc\x38\xe0\xe8\x4f\xb9\xa5\x39\xdd\x76\xe6\xad\xdc\x0f\x3f\x9b\x2b\xb9\xfe\x3b\x82\xdc\x73\xe7\x0b\xb2\xba\xc3\xc2\xd7\xec\x4d\x47\xb6\x4b\xf7\x40\x59\x11\xc4\x6c\xdd\xec\xe8\x10\xaf\x20\xc0\xe4\xac\x55\xd1\xc3\xeb\x6e\x11\xef\x31\x25\x5c\xa9\x20\xcc\xb1\xeb\xc6\x82\xbc\x20\xe8\x4b\x0d\xc6\xad\x5e\x77\x5d\x8e\xba\xe2\xdf\x5e\x64\x60\x0b\xa4\xea\x76\xb7\xbc\x98\x52\xf4\x5c\x4e\xa9\xbc\x17\x59\x2f\x25\x2f\x61\xf8\xd2\x87\x59\x19\x23\xce\x3c\xa3\xc7\xeb\x71\x45\x94\x56\x7d\x51\x85\x40\x15\x9b\x97\x98\x4b\xc6\xb3\x30\x93\x95\x99\x7c\x69\x34\x43\x4d\x6a\x0d\xc8\xb9\x60\x09\x3a\xc4\x64\x6e\xad\xb6\x59\x80\x19\x53\x45\xb7\xc2\x6a\xc9\xce\x8e\xe4\x30\x95\xc0\x0d\xa1\x09\xeb\x23\x40\x03\xe1\xe2\x23\x90\x16\xc8\x7a\x72\x7c\xbd\xe2\xa1\xbf\x80\x13\x80\x28\xee\x75\x67\x47\x28\x64\xf5\x9e\x7b\x3c\x84\x25\xdf\xf7\x90\x25\x91\x7a\x0f\x3d\xd1\xa9\x58\x32\x55\x9d\xf4\xc2\x5a\xe7\x1c\x86\x71\x5c\xb1\xa6\x59\x4d\x84\x56\x6e\x22\x33\xc0\x32\xaf\xac\x6b\xeb\xa9\xa1\xdd\x25\x5b\x22\x71\x2f\x52\x85\x35\x1e\x96\x44\xd9\x74\xaf\x44\xb0\x85\x2e\xfb\xf4\xd4\x66\x02\xc5\x22\x1c\x77\x57\x13\x7b\x9f\x0c\x2d\xd0\x50\xed\xa1\x36\x7d\x1f\x87\xd4\x0b\xcc\x52\x19\xa0\x68\xbb\x3d\x18\x51\xea\x68\x5e\x98\x79\x4b\x4f\x7b\x36\x39\x6d\x5a\xea\x73\x6d\xe0\xff\xb9\x36\xad\xc4\xe7\xda\xb0\x59\x52\x9f\x1c\xe6\xcf\xd7\x7d\x69\x41\xae\x4d\xe0\x5a\x0a\x7d\x29\x85\x16\x03\xbe\x15\x86\xd8\x71\x55\xb6\x6b\xbd\x7c\x5d\x70\x5d\xa1\xb4\xab\x1c\x92\x79\xc0\xc5\xd6\x7c\x2e\x2d\x69\x12\xea\xc6\xfd\xae\x5d\x7a\x32\xcd\xa0\xba\x67\x87\xbb\x7f\x84\xab\x93\x54\xe5\x0c\x8e\x2a\x17\x4d\x4b\x50\x7e\x2e\x2b\x00\x7c\x77\x1e\x29\x5a\x2f\xeb\xa9\x46\xa2\x9b\x77\x2a\x04\x1b\x79\xe9\x8e\xf5\x4b\x94\xd0\x3f\x5a\xf2\xaa\x24\xaf\xaa\x6d\xe7\xeb\x00\x1c\x40\x16\x73\x7b\x77\x7c\xb7\xb7\xd8\xd3\xaa\x80\x1c\xf2\x49\x61\x97\xe2\x52\x5c\x17\x07\x14\x86\x12\x48\x40\x97\xef\x86\xa3\x0f\x1f\x73\x64\x83\x1b\xc2\x60\x97\xec\x63\xba\x70\xe1\xb7\x8c\xdc\xf4\x81\x3c\xe0\x49\xf4\x89\xc2\xd4\x37\x41\xf5\xfe\x8f\x0d\x2e\x54\xef\x46\x96\x24\xfd\x83\xc9\x97\xa9\xa8\x20\x43\xec\x8a\x97\x5d\x62\xa6\x6f\x3c\xf6\x29\x44\x2d\x73\x2d\x93\x6d\xf8\x18\x39\x84\x33\xd3\xcd\x25\xd1\x7a\x98\xc4\xfb\x34\x1a\x81\x14\xe7\xe0\x67\x28\xa2\xda\xd6\x47\xf1\x2d\x86\x15\xfc\xb8\x6d\x12\x37\xaa\x3b\xa4\x32\x87\xf4\xe9\xb1\x8e\xd5\xa3\x62\x71\x78\xd4\x6e\xde\xb4\x35\x01\xb5\x2e\x90\x6a\x6c\x34\x7e\x7a\xd9\x97\xd1\x4f\x7c\xb9\xef\x90\xc9\xd6\xf2\x77\x31\xcf\xff\xf3\x40\x72\xa4\xdb\x89\xee\xfc\xb6\xe5\x81\xb7\x1e\x32\x64\x65\x93\x8d\x6e\x4e\xb2\x56\xfb\xd6\xd6\xf6\x8d\xe7\x73\x7d\xf9\x86\x34\xff\x96\x8e\xfe\xdd\xf4\x80\x65\xf9\xe1\xf8\x7f\xe4\x0d\x8c\xf2\xc3\x27\x14\x16\xc4\xce\x14\x85\x1c\xf6\xfa\xe5\xfe\xff\x8b\xfe\x8f\xab\x95\xfc\x7b\x19\x31\x88\xa3\xdf\xe7\x8f\xaf\x6e\x63\xf1\x42\x26\x7b\x02\x20\x77\x42\xf0\x01\x6e\xaa\xdb\x30\x11\xaa\x4e\x6f\x3d\x13\xd2\xff\xd7\x31\x61\x66\xfd\xcf\xf9\x2f\x60\x6e\x04\x04\xfe\x73\xdf\x00\x28\x18\x46\x92\xa6\xd7\x23\xb6\x0c\x39\xd5\x57\x17\xb7\x57\x57\xa7\x57\xd7\x90\xaf\xce\x7e\xf0\xc6\xb8\x00\xf8\xe1\x03\x9f\xd5\x1d\xca\xf3\x55\x62\x63\x9b\xeb\x06\x73\xd7\x5d\x72\x76\xec\xa6\x2f\x40\x32\x62\x4f\x58\x1c\x65\xb3\xc3\x61\x79\x58\x8e\x29\x3d\x53\xb3\x10\xe6\x66\x3f\x8d\xf7\xfa\x0f\x0e\x6f\xff\xe0\x60\xa4\xec\xe7\x2f\xae\x77\xfc\x96\xc3\xe3\x6f\x1c\xcc\xdc\x6d\x1c\xb5\x53\xca\x0d\x21\x5a\x9b\x0a\x6f\x95\x1f\x8a\x02\x68\x9c\x76\x90\x95\xa1\x78\x7c\x87\x4c\xc6\xb7\x96\xf3\xb7\x15\xf3\x37\x32\xfc\x8b\x74\x7f\xc5\xfd\x57\x9d\xb9\x6d\x04\x27\x99\x60\xc0\x0e\xfc\x97\x71\x32\x2e\x75\xb9\xcc\xe5\xc2\xfb\xcc\x55\x7f\x31\x0e\x04\x9e\xe6\x13\x42\x04\x11\x85\xf4\x07\xbe\x9b\x08\xe1\xa9\xb0\x3e\x86\x65\x96\xce\xd4\x5b\x7c\x63\x6d\x01\x08\x15\x17\xb0\x83\x00\x33\x42\x3d\xaa\x41\x86\x72\x02\x96\xd6\x1e\xb5\x11\x85\x5d\x94\x12\xfe\x25\x47\x82\x89\x80\xf2\xe7\x70\x42\xb7\xe4\x33\xdc\x9a\xcf\x70\x73\x8a\x97\xd3\x1f\xfd\x33\x81\x39\x6a\x0d\xd0\xbe\x6a\xc8\xf2\xc7\x6e\xc0\xe4\x18\x88\xea\x58\x43\x91\xfb\x11\x35\x4c\xf5\xbe\x86\xd2\x8a\x64\xf6\x96\x7d\xbb\x1a\xa6\x22\x25\x2f\xcf\xc2\x03\x43\x2d\x5b\x26\x0a\xca\xbe\x79\x29\x26\xb9\xa4\x00\x00\xce\x1b\x0a\xbe\x09\x5f\xad\xeb\xcd\x54\xc2\x9a\xe3\xf6\x24\x31\x90\x92\x5d\x5f\xa9\x41\xaf\x2d\x03\xc1\xee\x8d\x29\x4d\x0d\xdf\x1a\xc1\x37\xff\x5e\xc5\xd7\xb8\x71\xae\xe3\xa6\x17\x73\x6a\xf4\xf6\x0a\x5e\x8d\x38\xf8\x4a\xe6\x7d\xba\xfa\x64\x1c\x7b\xad\xf1\xd2\x76\x12\xe7\x7a\x18\x63\xd5\x24\x16\x42\x42\x48\x1d\xc5\x4b\xeb\x28\xf2\x09\x66\x79\x91\x11\x0f\x32\x72\x5a\x59\x0c\x5e\x46\xe0\x3f\x7c\x48\xc8\x6c\xf2\x87\x20\xc2\xea\x95\x50\x82\x2c\xf6\xe2\x7d\x27\x74\xca\xd8\xe0\xd0\x6e\x7c\x51\xab\xb1\x29\x23\xcd\x18\x69\x60\x04\x67\xea\x6a\x14\x05\xa7\x46\x6a\x3a\xd2\xe6\xf5\x88\x2c\x03\xdd\xd7\x07\x21\x1b\xfb\xb5\x68\x47\x2c\xd6\x11\x0b\x3a\x62\x11\x99\x5b\x7c\xd9\x23\x34\x8a\x5a\x3c\x3f\xa5\xef\x2b\xfe\xca\x40\x26\xd5\x47\x29\xe2\x55\x9e\x42\xad\xac\x10\xc2\x4a\xf7\xed\x08\x6d\x0e\xdb\x4f\x8c\x4b\xea\x86\xcd\xaf\xec\xf4\x2a\xa9\xe6\x2b\xd4\x3e\x2f\x08\x91\x8d\x3c\xbd\xc2\x50\xc7\x7b\x22\x70\x95\x89\x51\xf9\xce\x40\x32\xb6\x94\x8e\x4d\x75\x00\x16\xf3\x65\x68\x71\x92\x0a\xc0\xcd\xae\xf0\xf5\x7b\x92\x72\x1c\xe6\x5b\x18\xfe\xce\xde\xc9\x1d\x00\x22\xd4\xd2\x2c\x24\xe3\x03\x87\xc0\xd8\xe4\xea\x18\xf3\x44\x36\xe3\x38\x3d\x48\xd3\x1d\x7b\xc0\xb7\xc2\x60\x76\x46\x48\xf8\xea\x2f\x5b\x7c\x1d\x7a\xe1\x82\x10\xea\x8c\x01\xfc\xcb\xff\xa1\x14\x99\xe5\x03\x13\xc6\xa5\x5e\x2e\x1e\xae\xab\xdd\x93\xad\xb8\x27\x5b\xc7\x75\x23\x44\xd6\xa3\xf2\x55\x7f\x0c\xa1\x08\xde\xf1\xc8\x42\x1d\xb9\x40\xbe\x89\xdc\xd4\x3f\xa2\x30\x42\xd9\x8c\x16\x11\xe5\xbc\xad\xc6\x18\xde\x25\x6b\xf2\x42\x46\xd5\x9f\x1c\x30\xd2\x22\xe5\x35\xc0\x3a\xb4\xf6\x08\x48\x4f\xc7\x3d\x85\xfa\x58\x7f\x7a\xca\xf9\xec\x55\xa0\x2e\x68\xd4\xc7\x76\x96\xea\x73\x23\x65\x32\xb3\xbe\xf9\x48\x94\x9a\xe5\xd3\xba\xd8\xbd\x29\x50\xf5\x69\x5d\x57\x2d\xd8\x46\x6e\x08\x4d\xac\xd1\xdb\x75\x21\x10\xca\xe0\xdd\xd7\x0b\xd8\x9f\xf4\x0c\x4a\x36\xab\x3b\x1e\x75\x9c\xd4\xa7\xdb\x12\x32\x3f\x4b\xa2\xba\x2e\xc1\x44\xf5\x27\x77\x61\xc2\xef\x92\xbc\x9b\x0c\xfd\x96\x09\x1f\x19\x31\x24\x9f\xd6\x76\x85\x46\xb1\xaf\x65\x00\xac\x9d\x5c\x48\x49\x16\xc4\xef\x87\xdb\x9a\x01\x58\x80\x2d\xc5\x94\x95\x1e\x74\xd3\xb5\x07\x8c\x0b\x63\xdb\x58\xe0\xe0\x75\x15\x7d\x5a\x65\xc8\x3f\xd9\x09\xa0\x96\x86\x2c\x50\x8f\x0d\xc1\xbc\xbd\x92\x48\x10\x63\xe4\xf0\xe3\x9a\x96\xbc\xa4\x2d\x0d\x73\xec\xbb\xfc\xe0\x84\xe1\xf3\x87\x82\x43\x67\x18\xe9\xb2\x69\x35\x61\x2d\x18\xc2\xd8\xb0\x1e\x49\x6e\x2e\xc9\xdb\x9e\x43\x8e\x28\xf3\xee\xcf\x74\x79\x63\xc4\x18\x49\x56\xb0\x47\xc2\xb4\x88\xcc\x6a\x40\xbc\xd8\x83\x7f\xe3\xda\x54\x1f\x63\x28\x4c\x5e\x9b\x70\x31\xaf\xa1\x12\xd4\xdc\xe9\x65\xd4\x91\xf9\x0f\x4e\x0b\x66\x95\x62\x60\x6d\x6a\xe0\x97\xf0\x30\x99\xf3\xac\xef\xae\x0f\x7b\xb6\x7c\x64\xb3\x82\xd0\x1b\x77\xdc\x65\xa8\x1e\x72\xbd\x67\xdc\xfa\x62\xf4\xc0\xd4\x62\xf0\xcb\x13\xe3\x96\x4b\xa4\xe3\xe6\xae\x49\x86\x15\xdf\xad\xa6\x28\x30\xba\x61\x3e\xe4\x4c\x00\x4c\x66\x53\x97\x52\xc6\xdc\x50\x1c\x75\x53\xef\x72\x8c\x9a\x00\x98\xa9\xb8\x0c\xc5\x26\x89\x94\x51\x77\x62\xc6\x4a\x54\x63\x90\x62\xc1\xbf\x66\xbc\xfe\x6b\x86\x01\xe2\xe1\x76\x50\xaf\xb1\x1f\xa1\x64\x10\x38\x8d\x34\x6a\xb5\xe2\xa9\xb8\x8f\x27\x53\xc2\x51\x9b\xb0\xda\x8c\x53\x9c\x92\x1b\x95\x03\x76\x7b\x37\x8e\x70\x82\x81\xfc\x0f\xe4\xe7\x6d\x8d\xb2\xbe\x85\xb3\xb7\x72\xf6\xd6\x1f\xfa\x13\xa6\x48\xf1\xff\x19\xaf\xff\x9f\x61\xa0\x33\x5a\xc1\xc8\x0c\x63\x84\xe0\x2f\x3f\x9a\x3c\x1a\x6a\xab\xdd\xe8\x7e\x00\xcc\x0d\x86\xe0\xd1\xba\x3c\x69\x33\xf8\x21\x0d\x14\x39\x43\xce\x93\x6d\x89\x93\x6c\x76\x64\x04\xfe\x54\xfe\x32\x43\x58\x94\xaa\x40\x52\x66\xbd\xbc\xe1\x45\x54\x68\xbc\x88\xf4\x68\x64\x0f\x44\x14\x19\x5d\x40\xc1\x57\xa4\x29\xc1\x5b\x5e\xf5\x20\xac\xbe\xf0\x06\xe6\x33\xff\xe2\xf1\x6c\xa1\xca\xb3\x52\x8f\x77\xf6\x44\x3b\x61\x94\x8b\x9c\x18\x7b\x3c\xa4\x11\x4c\xca\x2f\xa1\x6c\x40\xfd\xc8\x3a\x15\xc1\x1b\x47\xf0\x19\xa6\x70\x28\x9e\x3f\xa9\x14\x52\x9f\xa0\x02\x85\x93\x56\x0f\xdf\xe5\xc3\xa3\x0e\x8c\x71\xb2\xfe\x11\x4e\xd3\xf2\x8a\x02\x13\xf6\xc4\x24\x28\x61\x82\xf1\x4c\xed\xda\x54\x4e\x3f\x97\x8a\xc7\xe7\xda\xca\x7c\xd2\x72\x52\x12\x62\x8a\xe4\x07\x8b\x6b\x0f\x0e\x4c\x3f\x57\xa1\x49\x28\xee\x58\x3f\x9a\xe9\x5c\xe4\xd4\xf9\x73\xcf\x47\x2f\x9f\xfb\xd4\xeb\x15\xcf\x5d\x45\x99\x7f\x5a\x97\x1f\xb8\x3c\x90\xce\x8f\xdc\xd3\x54\x2c\x9e\xec\x01\x9d\x67\x2d\x36\x5e\x6e\xc3\xb0\xfd\xf4\xe2\x68\xfc\xea\x76\x86\xe6\xe9\x05\x6f\x8a\x29\xa1\xc3\xf4\xd3\xe7\x23\xac\x13\x8b\x2f\x4e\xcf\x6e\xb4\x3e\xcb\xe2\xe4\x63\xcf\xba\x3c\x9d\xdb\x94\xb5\x31\x21\x67\x98\x49\x4a\x40\x9a\x66\xa9\x9b\xce\xb8\x08\xeb\x03\x2d\x82\x35\x76\xce\x23\x42\xea\xab\x65\x04\xcb\x8f\x22\xec\xb8\x2c\x21\xf4\xc9\xb2\x47\x87\xea\x5f\xfe\xe1\xeb\x9f\xdd\xe1\x6a\x39\x81\x92\x52\xe8\x8c\xea\x23\x4f\x17\xd9\x5f\x55\xe5\x7f\xaa\x5a\xcb\xbb\xe3\x49\xa9\xfd\x96\x68\x97\x17\x2f\x77\x7d\xf0\x72\xe7\xb7\x2d\x77\xf7\x22\x78\xb8\x83\xa2\x3d\x46\xa8\x35\xc8\xf5\xa3\xdd\x91\x4e\xb7\xbb\x78\x85\xcc\x86\xc4\x13\x73\x47\x44\x0c\x9a\x81\x0e\xc4\x41\xf8\x0f\x58\xbb\x4b\x5d\xc2\x5c\x4e\x9e\x38\xdc\x9d\x1e\xd0\x24\x44\x63\xcc\xee\xae\xb2\x53\xe2\xd7\xcd\x1f\x92\xb0\x64\xe2\x81\xae\xdd\xe9\x8d\x0f\x46\x9d\x73\x9f\xf7\xc8\x17\x7b\x09\xd5\x88\x6c\xe4\xbd\x0e\x45\x0f\xe2\xe0\x75\x4a\x36\x30\xa8\x02\x52\xcd\xed\x2e\x7f\xfd\xd9\x1d\x3f\x06\x46\x46\x62\x8f\x15\xec\xd4\x2f\xfe\x20\x8e\xfa\xc5\x83\xf0\xee\xf8\xff\x50\xbb\xfc\xe0\x74\xd7\xff\x9b\xee\xb2\xce\xb2\xf3\x6f\x4e\x77\xd7\x3a\x56\xe2\x76\xd7\x1e\x7b\xda\x85\x88\xc1\xf7\x97\x80\xa8\x85\xee\xb2\x7a\x41\x12\xd8\x00\x5b\x07\xe1\x15\xe7\xba\xe4\x04\xcf\xee\xba\x6c\xf2\xec\xae\xb3\xe4\xdb\xdd\xd8\x28\x1d\xfe\x55\xb1\xe6\x4f\x08\x12\x0c\x46\xb0\x27\x59\x22\xdd\xdd\x77\x16\xd7\x67\xaf\xc1\x5d\xe4\xf8\xa4\x42\x39\xe0\x56\xf6\x67\x47\x1b\xfb\xb3\x07\x92\x9a\x94\x55\x80\x26\x56\x0f\x1b\xb7\xcb\x64\xbe\xe8\xc3\xf2\x60\x0f\x2e\xf7\xb3\x96\xbb\x5c\xa5\xa2\xfd\xd1\xc8\xb5\x07\xd7\xf9\xb7\xe6\xbb\xfd\xf7\x14\x88\x79\x60\xf4\xc0\x24\x43\xef\x5a\x11\xc2\x5f\x2d\xf6\xb0\xf1\x63\xbe\x80\x31\xe9\xed\xa3\x3d\x6c\x25\xbb\x48\x09\x6c\x92\xb3\xe0\xf9\x35\x3a\x36\x69\xdc\x26\x80\x1d\x08\x42\x78\x06\x1c\xf0\xd9\xf1\x76\x2f\x11\xba\x15\x4f\xf8\x92\xb6\x11\xf8\xd7\x32\x30\x23\x0c\x1c\xb4\x24\x28\x2f\xd7\x11\x6c\x4f\x4a\xfc\x2b\x17\x22\x1e\xe1\xdc\xbb\x27\xec\x59\x39\x7a\x94\xb7\xe0\x1a\x52\x0c\xb1\xa3\x3c\x7c\xb8\xf0\x7d\x47\xe1\x0c\x6f\x39\x33\xe0\x65\x44\x46\xcc\x9a\x9c\x28\xd9\x83\x8f\xbb\xa6\xc3\x3f\x1d\x66\x73\xc0\x2f\x81\x2e\x4e\x43\x78\xb4\xf7\x9d\x09\x5f\x62\x37\x73\x33\x9f\xc6\x21\x42\x76\xab\x00\x91\x9c\xbc\x9e\xf1\x00\x9b\xd7\xa4\xb7\x61\x14\x4f\x2f\x60\x2a\x85\x3c\x63\x4b\x72\x46\x49\x60\x9f\xe8\xc3\x8b\x45\xa2\x11\xc7\x37\xee\x6c\x00\x0b\x92\xc3\xe9\x84\x12\xb6\xe0\x08\xda\x55\x0c\x25\xc0\x86\x5c\xa2\x10\xa8\xf7\x1f\x88\xe2\xb3\xa9\x1a\xda\xce\xac\x32\xb1\x9c\xa3\x22\xba\x2e\x50\x78\xe0\xe5\x35\x00\x6b\x3d\x72\xda\x1d\x48\x72\x22\xd3\x14\x42\x17\x77\x18\xd6\xea\xe1\x5f\xb4\x4b\x46\x6f\xe6\x16\xad\x77\x97\x2b\x2c\x82\xb4\x84\x76\xbd\x46\xb5\x07\x3d\x21\xce\xa8\xaf\x90\xd3\x97\xa5\xc7\x3d\x84\x9b\x3f\xdf\xae\x73\x2f\x7e\x39\x95\xa3\xe1\x35\x6b\xf5\x15\x5c\x93\x28\x5e\xc1\x62\x7b\x05\x8d\x8d\x90\xc4\xf7\xb2\xbb\x77\x82\xa7\xfd\x3e\xad\xdb\x62\x3d\x63\xce\x4d\xa3\xab\xe6\x55\xf2\x3f\x4f\x8e\x33\x5e\xdc\xd1\x96\x5e\xa1\xbe\xad\x98\xe5\x89\x14\x06\x62\x81\xff\x66\x11\x4a\xe6\x96\x27\x8a\xdd\x80\xb0\xc0\x27\xaf\xc5\x3d\xd9\x72\x31\x11\xba\x9f\x2c\x18\xc9\xa7\x59\x16\x29\xfc\xc0\x4e\xcf\x60\x0b\xb4\x5a\x12\xea\xad\x2e\xf0\x5d\x4d\x38\xbc\x98\x51\x3e\xca\x2b\x26\xfc\xf2\xf9\x6a\x0d\xc8\x07\xa2\x31\x8d\xdb\xc3\xff\x91\x75\x65\x6b\x8e\xb3\x3a\xf0\x7e\xde\x92\xd8\xc4\xe6\x6f\x0c\x1e\x30\xe9\xa4\x9f\xfe\x7c\xaa\x92\x84\x7b\xce\x45\x42\x09\xb3\xaf\x62\x93\xb6\x16\xac\x70\x01\x3d\x2a\xa5\x5e\xf6\x05\x51\x09\xc0\x6c\x14\xb7\x16\xad\x22\xb6\xd9\xee\xf7\x64\x05\x39\x1f\x81\x1b\x66\x7b\x48\x4b\x62\x3b\x4c\xe0\x59\xd6\x88\xab\x9f\xa6\xa1\x6b\x8d\x5c\x80\xab\x09\x87\xff\x59\x49\x65\x0b\x2f\x7b\x7e\x6f\x25\x9a\xe3\xe6\x08\x7b\x97\xc8\x1e\xb4\xbe\x71\x44\x50\xa8\x41\xf0\x98\x1b\xc0\x9d\x72\xff\x4f\x11\x07\x51\x40\xcd\x27\x30\x27\x6b\x68\xe3\xb1\xe8\x52\x89\x33\xd8\xbf\xc3\xdb\x52\x4e\x33\x15\xd7\xcd\xf6\xe5\x6d\x34\x5f\x01\x99\xcd\x57\xd5\x52\xf1\x27\x33\x84\x0c\x74\xbc\xc5\x38\xc2\x26\x4c\xa8\x0d\x43\x4a\xfe\x4c\x12\xac\xa5\x20\xef\x2e\xf6\x56\x76\xb5\x97\x72\x02\x1a\x9e\x86\x31\x61\x07\x8e\x3d\x01\xba\x4e\x09\x47\x7a\x08\xcb\x88\x6b\x65\x42\x79\x7c\x69\x34\x1e\x63\x2a\x66\x64\xc9\x84\x8a\xae\xf1\xa8\xaa\x92\x55\x20\xdb\xcb\x5c\x13\xdc\xb0\x3a\x2e\x29\x2c\x06\xca\x1f\x53\x68\x09\x53\xd6\xff\x3a\x16\x1e\x26\x3a\xf0\x8e\x2d\x84\x7e\x59\x49\x2a\xe1\xad\xd7\xe9\x17\xbf\x5a\xb2\xec\x2c\x7a\x8d\xc7\xc8\x5a\x23\xc7\x68\x51\x8d\xa6\x66\x57\x7b\x0b\x5e\x7b\x30\x56\x4b\x6a\x6a\x7b\x35\x99\x9c\x40\xf5\xb7\xa8\x43\xda\x09\x2f\x06\xf0\xdb\xda\x78\x7c\xa3\x78\x53\x6a\x8d\xc5\x46\x20\xca\x5e\xf0\x1c\x19\xf9\xe2\xb7\xcb\x5d\x5d\x37\x4b\x05\x5d\xff\x1b\x0d\xe4\xa6\x74\x7b\x6d\x0f\x7c\xd5\x1b\xc5\x88\x39\x95\x94\x8b\x1d\x43\xef\xfd\x19\xb6\xec\x5e\x32\x0a\x26\x75\x09\xb5\x7e\x04\xaa\xe0\x19\x44\x31\x60\xaf\x18\x56\x3d\xfd\x59\x63\x19\x3e\xa8\x94\x71\x78\x47\x28\xa3\x2c\xe9\x17\xd6\xe1\xa2\x16\x16\x6e\x2d\xd7\xad\xfc\x4e\x6e\x66\x13\x1c\x96\xf2\x33\x8c\xd3\x3a\xfb\x39\xe7\x0c\x81\xac\xe8\x33\xd9\x78\xe8\xaf\x54\xd7\x68\x8f\x44\x89\xcc\xae\x5a\xca\xf8\x2e\x13\xc0\xef\xab\x09\xd1\x2e\x77\xd0\x27\x4a\x5e\x5d\x67\x0b\x9c\x75\xcf\x16\x17\xf7\x06\xac\x71\xb4\xe8\x59\x26\x9e\x1f\xd6\x1b\xe6\x3b\x35\x85\x16\x62\xb7\x99\xef\xc6\x73\x00\xd6\xa3\x5e\xb5\x81\xd2\xdd\x42\x85\x9e\x82\xa4\xc9\x1a\xde\x3b\xec\xd9\xe4\x1a\x9b\xcb\xb7\x57\x2c\x2e\xd1\x39\x9a\x0f\xcc\x4d\x86\x4c\x49\x50\x4b\x96\x88\x66\xec\xdc\x8c\x93\x51\x6a\x59\xdc\xe2\x57\xc6\xb0\x1d\x3a\x50\xb4\xbb\xe0\x46\x25\xd1\x50\xda\x5d\x4c\x94\x92\xc7\x74\xa3\x7b\xd2\x46\xe9\x2a\x97\x24\x97\xb9\x2a\x76\x56\x8c\x5f\x11\x68\xf0\x05\x7f\x5c\x7f\xb4\xba\x79\xfa\xea\x66\x65\xdf\x5e\xa9\xdb\x3a\x02\x0f\xf5\xd8\x0e\xf8\x66\x8f\xb9\x9c\xb2\x06\x89\x8d\x8b\xee\x51\xdb\xa7\x00\xc4\x4b\x50\xb5\x8f\x0b\x65\x21\x47\xe5\xce\x3a\xd4\x52\xc8\x58\xdd\xd3\xb2\xb0\xce\x81\x34\x24\x40\x0d\x3e\xad\x73\x26\xc3\x6b\x8e\x5f\x98\xc9\x17\xac\x3e\xb7\x62\x01\x6b\x5b\x26\x60\x2f\xee\xc9\x9a\x7a\x4f\x4d\x3d\x34\x9b\xda\x7b\xd2\x61\xb8\x7f\x3d\x94\xd1\xed\x07\xdf\x2f\x09\x62\x59\x76\x97\x86\xbe\xc6\x5e\x75\xc8\xe8\x67\x48\x8d\x73\x28\xa0\xa6\xc0\x3b\x68\x3f\xf5\x49\x3f\x60\x9f\xf0\x8a\xe6\x2b\x5d\x3a\xdd\xf4\xb3\x7a\xe9\x9f\x3a\x94\x43\x96\xde\x4a\x70\x0d\x06\x79\xb5\x6a\x8c\xc1\xed\x85\x86\x13\x2c\xa2\x91\xb5\x80\x2e\x93\xe3\x44\x88\xc0\xae\xa0\x43\x9a\x3f\x87\x58\xe3\x35\x79\x8c\x6b\x72\xb0\x60\x31\xbc\x12\x78\x31\xcb\x5d\x35\xdd\xcc\x77\x7c\xc5\x3b\xc6\x92\xd4\xa8\x7b\x00\x8c\x1a\xd0\xba\xdb\x15\x5b\x37\x27\xdd\xd3\x51\xcb\x0d\x59\x10\xf5\x9d\xb4\xdd\xf8\x95\x2a\x81\xc9\x07\xc8\xab\xa5\x09\x4c\xaf\x9e\x50\xc6\x69\x8c\x05\x29\xa0\xa2\xa6\x7a\x04\x6d\xae\x4a\xb3\x86\xc7\xdc\x92\x5a\xe3\x2b\x74\x9f\x7e\x5e\x31\xd7\x53\x93\xf5\x4a\x13\x20\x45\xaf\xe4\xce\x7c\xa0\x7b\xa5\x45\xeb\xfa\xa5\xa5\x0e\x51\x8e\x3b\x00\x63\x7e\x79\xcb\x78\xb1\xad\xbd\x2a\xbb\xc3\xab\xfa\xe8\xf2\xaa\x43\x62\xf8\x5e\x72\xf8\xc6\xb7\xef\x1c\x70\x6e\xb0\xea\x89\xff\x1a\xbf\x25\xba\x37\x97\x29\xef\xcb\x56\xe1\x6f\x9d\x9b\xde\x57\xab\x6a\x50\x95\xa3\x59\x72\x83\x99\x18\x72\x51\xa3\x12\x2e\x81\x54\xc9\x6e\x1f\x3a\x2a\x6e\x06\x2b\xf1\x6c\x61\xfb\xb3\xa6\xf0\x08\x5d\x8a\x2c\x85\x07\x76\x15\x05\x40\x87\x9d\x01\xf1\x93\x5c\x9b\x9d\x40\x15\xb7\x2c\x50\xf2\x0e\x43\x69\x66\x3d\x05\x3f\x9b\x17\x4c\xc9\xd3\x6b\x0a\x6b\xcc\x27\x76\x5b\x05\x57\x88\xfc\x13\xa4\x62\x9c\xd7\x14\x62\xb3\x34\xd8\x26\x27\xa0\x77\xe3\x14\xb6\x62\xd3\x1a\xb1\xb9\xb1\x88\xe7\xe1\xa3\x94\x57\x84\xee\x39\x45\x96\x1e\xc1\xc6\xba\xdd\x29\xfd\xea\x1f\xea\x96\x2c\xf8\xfc\xf1\x48\xb9\x8d\x0a\xf0\x63\x76\xca\xf2\x2e\xc4\xd2\xae\x68\xda\x31\x90\x91\x85\xae\x23\x2b\x82\x48\x7d\xd9\x75\x28\xc1\xb5\x70\xdb\x5e\x86\xb3\xd5\x02\x28\xd5\x62\x38\x43\xb7\xdc\x9e\x71\x75\xdb\x3d\xb8\xc0\x41\x23\xe9\xd3\x95\xf9\x01\xb7\xb0\x79\xf9\x9c\xfb\x07\x4f\x3b\x04\xd6\x1b\xd1\x96\x5d\x8d\x69\x41\x1f\xcd\x8b\xa4\xb5\x3d\xea\xc7\xb6\xc7\x69\x37\x3f\xd7\xf9\xbd\xc6\x9b\xad\xb9\xb8\xf6\xc6\x53\x97\x35\xb1\xb7\x2e\x44\xd6\xfa\xba\x15\x93\x9f\x2e\x00\x7f\x58\xe6\xd7\xae\xf3\x28\xa0\x7a\xbe\xea\xa1\x3b\xf6\x24\xcc\x56\xdb\xdf\x6c\x46\x3f\x95\xff\x78\x2b\x46\xe8\x4b\x96\x64\x3d\xe2\xd1\x42\x91\x22\x90\xee\x95\x16\x9d\xc9\xd3\x3c\x5a\x10\xfc\x91\xff\x3d\x68\xc9\xdd\x95\x0d\x08\x65\x87\xe4\xc0\x96\x1e\x85\x16\x1c\x28\x73\xd4\xaa\x5a\xb6\x9a\xf4\x74\x80\x94\xd5\x99\x89\x5e\x27\x9a\x4e\x72\xd2\xea\xfe\x75\x59\x76\x4d\x0b\xd5\x0d\xe0\x95\x94\x8d\x4c\x69\x71\xc9\x3e\x6b\x5a\xb9\x47\xbf\xa6\xf5\xa3\xa9\x58\x3f\xc5\x52\x1d\x75\x0d\x8a\x87\xa8\x7a\xbe\xb2\x26\xef\xa5\x14\xbe\x24\xa6\x5a\x3c\x6d\x73\xc3\x90\x0e\xb7\x93\xcc\x20\xd2\x92\xd4\x5a\x78\x79\xba\xe7\x53\x76\x41\x7c\xfb\x2d\xc8\xa7\x8b\xf4\x7c\x0e\xe5\xea\x08\x61\xb9\xa1\xaf\xcb\x88\x9a\xbc\xa0\xb7\xd0\xb5\x0f\xcc\x21\xc4\x1f\x56\x29\xd4\x62\xf0\xcd\xaf\xb4\x71\xfe\x81\x79\xa9\x85\xae\x2c\x00\xa9\x37\x8e\xb8\xe0\x61\xab\x51\x67\xe2\x23\xe3\x35\x6d\xb9\x5e\x6a\x68\xac\x85\x37\x72\x81\x54\xca\xd2\xea\xea\x61\x04\xf9\x3b\x6d\x23\x90\x18\xdb\xb1\x4d\x73\xbf\x36\xe9\xb5\x0f\x82\xfa\x96\x42\xcf\x81\xa7\x98\x2b\xb0\xce\xc0\x40\x28\x3c\x01\x97\xda\x30\x5c\x59\x59\xf8\x00\x61\xcb\x8c\x94\xa3\x8f\x97\x06\x11\xb9\x10\x6a\x7b\x41\x00\x08\x26\x40\xa3\x94\x48\x1b\x6b\xca\x6a\x2c\x8f\x17\x73\x29\x05\x77\xcc\xad\x50\xc3\x9c\xf6\x92\xed\x37\xfb\xc2\x2f\x81\x77\x43\x72\xc1\x62\x28\xff\xa3\x04\xb2\x78\xa4\x32\x34\x23\x47\xea\x9d\x89\x3f\x0e\x7e\x3b\xb0\x94\x4c\x07\x64\x75\xad\x09\x3b\xf1\x1a\xc3\x29\x4c\x4d\xe2\x2b\xfe\x55\x65\xb8\xae\x26\xc2\x75\x85\x04\xd7\x35\xf1\xca\x29\xcd\x6e\x26\x3e\x7f\x8d\x03\x06\x5c\x15\x3b\x6e\x48\x32\x0b\x51\x2b\xe1\x9a\xec\x84\x21\xd5\x25\x76\xd8\x54\xef\x37\x15\xcc\x1f\x61\x5a\x14\x9c\x3a\xb0\xa9\x4a\xcd\x35\xe9\x2d\x7e\x01\x5c\xb3\xa7\xda\xae\x5d\x3b\xae\x1a\xae\x1f\x62\x4d\xe7\x1e\x64\x62\x4f\xe7\x2e\x83\xa0\xfa\x20\x01\x66\x04\xb8\x96\x0d\x91\x28\x76\x37\xb5\x6c\x16\xca\x47\x55\xf7\x01\xe7\x68\xe1\xd8\xd9\x8d\xc0\xba\x56\x54\xac\x9e\xfd\x02\xbc\x61\xf8\x09\x1e\x08\x53\x35\x4d\x82\x52\x3b\x1d\x9b\x23\x37\x57\x33\xcd\xc6\x5a\xe0\x99\xeb\xb9\xeb\x68\x2d\xd8\x40\xbf\xb0\xc7\xc2\x54\x95\x8a\x42\x86\xe6\x19\x98\x60\x86\x12\x35\x84\xd0\x44\xdd\x9d\xa7\x54\xda\x69\x03\xe0\xd9\xc3\xe2\x93\xc3\xd9\xeb\x11\x8a\x9e\xa5\x25\x55\x6f\x46\x80\x13\xdc\xe9\xd0\xb8\xb2\x74\x7e\xa4\x96\xb0\x1b\x96\x64\xe9\x99\xfc\x15\x0e\x21\x5a\xe2\x7c\x81\xe3\x58\x1b\x87\x50\x36\xe6\x52\x45\xb6\x98\x0d\xff\x48\xae\xea\x3d\x03\xd0\xe9\xbf\xed\x36\xaa\xdb\x0b\x1c\x41\x07\xfb\x5a\xe3\x59\x24\x4c\x04\xd0\xc3\xfa\x0a\x85\x6f\x2d\xee\x14\x43\xe8\x61\x6b\x51\xd7\xd0\xa9\x87\x9c\xeb\xb7\x13\xe7\x59\x13\xb7\xe1\x52\x57\xa5\x67\x82\xbc\xe9\xf6\xc7\x68\xc6\x00\xf5\x05\xaa\xfc\x88\x9a\x8e\x7d\x7d\x91\x35\xab\x39\x10\xcc\x20\x96\xd8\xce\xcb\xed\xa7\xba\x37\xa1\xa0\xea\x15\xc5\xd1\x17\x69\x56\x9a\x67\x10\xb6\x64\x71\x2a\xdf\x30\x7a\x7e\xbf\x9d\xd0\xc8\x4c\x79\xdb\xc2\x13\x32\x31\x81\x37\x41\x7f\x24\x4d\x76\x1c\x28\x13\x62\x44\xa2\x58\x1d\xf6\x9b\xd8\x07\x52\xb6\x78\x04\xa1\x2f\xbd\x95\xd0\x77\xd4\xa0\x28\x1c\x08\xd0\xb7\xf3\x40\xb4\x70\xcb\x37\x9e\x55\x68\xa3\xe8\xf3\x71\x05\x08\xdf\x81\x55\x82\xa1\xcd\x5b\xd8\xa4\xa2\x59\x9f\x16\x5f\x8b\x97\x7d\xf4\xe6\xd7\x6f\x52\x89\x40\x25\x2e\xfe\xec\xa3\x5e\x12\xd6\x8a\x32\x72\x7a\x9e\x97\x88\x6f\xa4\x95\xb7\x5e\x00\x02\xec\xb3\x69\x0c\xdb\xff\x51\x6c\xa1\xad\x21\x15\x36\xee\xae\xe7\x81\xa9\xc7\xe3\x51\xd7\xa4\xf8\xb4\xb1\xad\x6f\x2d\xe8\xea\x2b\xf5\x6d\x24\x0f\x7b\x1b\xfd\x72\xeb\x6e\xe9\x56\x88\x31\xbe\xef\xa1\x99\x6a\xcf\xd5\xa6\x8d\xbe\xcb\xfa\x2f\x2b\xae\x45\xbb\xca\x5e\x4b\xf5\xa2\xde\xe1\x3b\x99\xc8\x51\xc1\x26\xc2\x8e\xfe\x52\x11\xfe\xca\xf0\x73\xb6\x0d\x3c\xbf\xb7\x06\x20\x5d\x68\xf3\x40\x95\x9a\x2e\x49\x6a\x01\x26\x28\xa8\xed\xda\x90\xfe\x0b\xfd\x4b\x51\x9d\x4d\x5f\xa5\xa8\x28\x32\xa7\x3c\x43\x51\xa0\x81\x7f\x59\xdf\xc9\xe9\xcb\x7c\xe7\xfa\x61\xd9\x1f\x6a\xa4\x59\x37\x26\x64\x51\xe0\xbd\xa9\xd6\x47\x5c\x79\xa8\x94\x7a\x6d\x94\xcb\x61\x90\x45\x0c\x69\x80\x91\xc8\x25\xfe\x09\x65\xaf\xaa\x80\x4b\xff\x85\x67\xab\x3a\xfd\x68\x4c\xb0\xf2\xef\x40\x5a\x86\x67\x6c\x77\x07\x96\xca\x33\xb5\xa4\x05\xe0\xbb\x2f\xa9\x43\x8c\x9f\xc7\x94\xc3\x47\x5d\x64\x88\xdc\xbc\x7d\x11\xae\x44\xd3\x59\x67\xd2\xaa\x36\xc4\xfb\xf6\x28\xa8\xae\x1b\x9a\x4e\x68\xa5\x9d\xad\x9e\x2a\x1a\xc1\xc2\x98\x36\xf9\x1f\xfa\x32\x07\x2f\x77\x3c\xae\x3b\xbc\xac\xa1\x9e\xe3\xf2\xf1\xe0\xef\x08\xd9\xd4\x21\x80\x4c\xd1\x9a\xfa\xdf\x91\xee\xe9\x6c\x71\x0b\x6d\xd5\x1e\xd1\xe2\x2d\xf0\x16\xa1\x32\xe4\x1f\xd2\x5c\xea\x2b\xcb\x35\x41\xb5\x6c\x7f\x86\xc5\xda\x24\x69\xed\x91\xdd\x47\xc3\xee\x7b\x4b\x82\xef\x83\x82\x8b\x87\x31\xac\x19\xea\xf1\xf4\xbd\x1d\xa1\xda\x6d\xe9\xd1\xbb\xf1\xf9\xbd\xa7\xec\xbe\xd3\x91\x38\x8b\x2b\xf4\x28\x48\x59\x0a\x93\xdf\x03\x05\x75\x06\x4b\xa3\x40\xb3\xae\x8b\x97\x1f\x70\x76\x34\x9d\xe4\xe1\x2e\x20\x11\x86\xe8\x35\xfd\x15\x1d\x5a\xfb\xb0\x63\x48\x60\x6b\x90\xf3\x06\x84\xe0\xc3\xf9\xd8\x49\x30\xda\xcb\x0c\x3f\x35\x4e\x7a\xfa\x2e\x66\xbf\x6c\xa4\xbb\x22\x5e\x0e\x10\x79\x0f\x00\x76\x48\x4f\x09\xa2\xf4\x14\x69\x81\x5f\x69\xf6\x3e\x60\x2b\x30\x21\x34\xd8\xa4\xe3\x06\x45\x5e\x38\x5b\x32\x45\x60\x10\x6f\xc3\x41\x70\x34\x19\x72\xa7\x3d\x54\x50\xda\x44\x55\x84\x88\x22\xaf\x72\x93\x12\xb2\x62\x0b\xca\xda\xd5\x94\x03\xe2\x84\xbb\x99\x83\xa0\x10\x97\x82\xb1\xed\x0a\xbd\x83\x02\x5a\x19\x4e\x49\x19\x4e\xcd\x34\xb8\xa4\x0c\x10\x73\x32\xb9\x46\x7b\x58\xf2\xb9\xb5\x00\xd1\x38\xd8\xbb\x45\x14\x23\x3f\x87\x56\xee\xd0\x58\x67\xe5\x5f\xaa\x34\x6b\x4d\xd7\x6e\x27\x11\x0e\x11\xf3\xb5\x27\x65\x68\x81\x58\x63\xd7\x2e\xcc\xa4\x06\xd1\x92\x49\x85\x5f\xd3\x75\x3b\x74\x48\xc3\xd6\xd9\x7c\x50\xbb\x26\x7d\x41\xb9\x26\x13\x65\x01\x84\xb5\x00\xa4\x74\xf8\xc0\x41\x8a\xeb\x57\x60\x2d\x06\xc3\x68\x1d\x2e\xd4\x42\xa1\xee\x2a\x92\x40\x89\x98\xa8\x0b\x41\xbe\x82\x7e\xd9\x4d\x1c\x41\x28\x0f\x31\xcb\x8a\x8c\xbd\xf4\x52\x4e\x7a\x79\x15\xbe\x26\xdf\xf0\xe2\x0e\xd8\x2b\xf5\xa4\x86\x39\x99\x29\x4c\xb7\x04\xea\xf1\x4d\x7a\xd5\xe6\x03\xbd\x60\xb5\x1d\x79\xf3\x90\x55\x44\xc5\x9a\x7e\x3e\x9b\x32\xfc\x3f\x3f\x1c\xcb\x7e\x7e\xc8\x28\xff\xfc\x28\xa3\xfc\xf3\xf3\xe1\x3f\x72\x79\xd4\xf5\xcf\x5a\x19\x7a\xe5\xbe\x44\x5d\x6a\x0f\x05\xeb\x95\xba\x50\xbb\x06\x41\x72\xc4\x5a\xaf\xcb\xd5\x52\x09\x58\x0f\x28\x86\x83\x61\x02\x11\xd7\xba\xea\x34\x0a\x80\x08\xeb\xed\x82\x56\xbd\x5f\xd1\x02\x61\xeb\x1f\x10\xda\x24\xeb\xef\x4b\x57\x75\x95\x45\x6b\xdd\xc0\xe8\x57\xbe\xe4\xa4\x29\xd9\x13\x20\xab\xf3\xba\x6d\xe4\x5f\xea\xa6\x89\xe5\xcb\xce\xb5\xda\x06\x60\xe5\xee\x76\xe5\xd4\x5a\x73\xb0\xf7\x66\x6b\xcd\x8b\x38\xcc\x1c\x9e\xa0\x17\x92\x3e\xf4\xf9\xc0\x5a\xb3\x8c\x3e\x73\x4f\x48\xe9\x16\x98\xf6\x9c\x9f\x61\x61\xa0\xdc\x38\xaf\xf9\x88\xfa\x09\xe2\xb3\x89\x5c\xce\x3a\x88\xda\xab\x02\x69\x4a\x2a\x01\x7d\xe5\x3a\x4d\x52\x81\xb5\x3e\x44\x80\x23\x17\xb2\xe6\x87\x57\x02\xad\x40\x25\xd8\x6c\x55\x86\x37\x4c\x55\xeb\xb6\x56\x3b\x02\xb9\x1d\x5b\x0b\x8c\x56\x3b\x87\xaa\x73\x59\x6b\x29\xa1\xad\x30\xb5\x0a\xa9\x00\x69\xad\xa5\x27\xf1\xe5\xad\xe0\x8c\x12\x30\xd7\x9f\x55\x97\x9f\x55\x56\x9f\xb5\x71\x3b\xb8\xb6\x43\x83\x68\x07\xbc\x8a\xc1\x0f\x3d\xac\x34\xb2\x1a\xa9\x03\xf8\xde\xb1\x60\xdd\x7f\x12\xa8\xea\xf0\x81\x5f\x90\xff\x4a\x02\x4b\x94\x49\x8c\xe3\x21\x9d\x59\xf0\xcd\xd5\x25\x69\x9a\xe7\xed\x15\xd3\x53\xe5\x42\xb2\xea\x3a\xb2\xb2\xf3\xab\x7a\xed\xb5\x5e\x6c\x1d\x97\xb9\x72\x67\x08\x0c\x7f\x9c\x4c\x2b\xd5\x45\xc3\x64\x10\xe3\xa1\xc3\xb1\x20\x36\xa5\x81\x86\x35\x36\x5e\x26\x25\x40\x70\x32\xb8\xbb\xdd\x75\xb3\xfc\xd0\x84\x81\xcf\xef\x3f\x6b\x7d\x59\x2b\x78\xf9\xd1\x58\x7d\xb1\x72\x74\x59\x5b\xbf\xd7\x0f\xff\xd5\xda\xf6\x6e\xea\xf7\x53\xfe\x50\x0d\xdf\x45\xfa\x18\x80\x3e\xe8\x14\x68\x6f\xd2\x80\x53\xce\x00\x4c\xdb\x77\xd1\x94\xe9\x8b\x38\x00\xa6\xe4\xbb\xe0\x64\x9a\x28\x61\xaa\xaa\xdf\x85\xcf\x16\x05\x5d\x4d\x86\x00\xc6\xf0\xcd\x86\xf5\x5d\x90\x44\xf9\x7b\xeb\x66\x4a\x7d\xcf\xc3\x88\xfa\x13\x71\x83\x91\x8f\xd0\x57\x7d\x7d\xbe\x56\x19\xbe\x5a\x78\xc8\xdf\xb2\x83\xbd\x6f\x81\x52\x1d\xd7\xc6\xab\xcd\x2d\x3c\xb5\xe4\xed\x35\xf8\xea\xaf\xc1\x57\xbe\x01\x5f\xf1\xf4\x5b\xaa\x49\x40\xf6\x62\xe4\x3b\x70\x31\x2a\x05\x28\x38\x94\x62\x14\x7c\x43\xcc\xfa\x9c\xaf\x9b\x3d\xfb\x58\x5b\xd0\x41\x86\xa0\xdb\x77\x21\x7e\x6e\x84\xde\xd7\x99\x98\xd9\x39\xcd\xc9\x19\x27\x82\xf2\xa9\xb5\x69\x49\xb5\xc0\x96\x49\xbe\x40\xf3\x38\xdb\x0e\x31\x72\xf2\x6d\x41\x7c\x67\xd2\xe5\xcf\xda\xa2\xf1\x75\x82\xd0\x36\x5b\x0c\x87\x03\x86\x67\x6f\xb4\x57\x7f\x99\xbd\xfa\xcb\x6c\xbb\x45\xdc\x70\xdd\x57\xfe\xcd\x4f\xc3\x26\xa2\x82\x4b\x11\xc7\x4d\x81\xf0\xc3\x42\x8e\x69\xd9\x61\x6c\x30\xf8\xf0\x78\xf5\x87\xc7\x2b\x1f\x1e\xaf\x2d\x45\xb8\x4b\x71\xa3\xd1\xf0\x0f\x17\xc9\xea\x37\x79\xfd\x26\x7d\xed\x0f\x04\xef\xc6\x1e\xb6\x54\xbe\x26\x62\xed\x73\x9f\xcc\x6f\x48\xb4\xf4\x8a\x13\x35\x0b\x88\x57\x00\x5a\x4d\x7c\xa0\xb0\xb6\x9a\xf1\xaf\x8d\xa1\x56\x5e\x99\x26\x40\x2a\x6a\x45\x69\x57\x1d\x17\x09\xf4\x0b\x62\xac\xa7\x96\x63\x3d\xbb\xd6\xbb\x20\xd4\x69\xb5\xa2\xa8\x5e\x14\x95\x45\x31\x07\x8a\x76\x1b\x29\x9a\x0d\x15\x8d\x72\x27\x9a\x23\xfd\x8a\x7b\xd6\xad\x7e\x5b\xb0\xdf\x1e\xec\x37\x82\x1d\xcf\xa7\xf4\xcd\x36\x74\xb2\x6c\x83\xbb\x93\x34\x91\xb8\x71\x68\x1e\x01\xe0\x79\x1c\xc8\xe3\xf0\xfd\x42\x54\xae\x9e\xf5\xb7\x4f\x60\x10\xe4\x33\xda\xa7\xff\x21\x73\xe4\x82\xb6\xd7\xf1\xe0\x9a\x09\xf7\x65\xe1\x09\x88\xb3\xd2\x40\xb4\x63\xd9\x63\xef\x2c\xa9\xb1\x7c\x25\x33\x9a\x9a\x92\x8e\x41\x19\x7a\x62\x32\xf5\x63\x95\xc1\x6f\x40\xff\xcc\x3a\xa2\x47\x17\xb3\xc3\xbc\x44\xf1\x29\xb5\x38\x74\x92\x1e\x99\x9c\xd3\x38\x1e\xb8\x99\xf0\x25\x90\xb5\x37\xf4\x81\xf8\xaa\x4a\xaf\x56\x68\xba\x5a\x47\x59\x58\x38\x02\x60\x5d\xd6\x68\x9a\xe9\xd6\x81\xcd\xf5\x71\xe7\x64\x40\x24\x8c\x59\x02\xcb\x04\x52\x72\x43\xbb\xfd\x38\xf5\xdf\xa6\x75\x17\xe3\x6c\x88\x05\x44\x8c\x02\x94\x34\xea\xde\x0b\x1b\xe8\x14\x7b\xbc\xfa\x8d\x22\xdc\xa7\x1b\x5d\x4b\xaf\x5b\xe9\x75\xbe\x78\x18\xfd\x4b\xd2\xc0\xb7\xba\xab\x3d\xd5\x5d\xed\xa5\xae\x00\x7d\x99\x81\x27\xbb\xeb\xd0\x8d\x88\x61\xa7\x5c\xe3\x4a\x18\x3f\xbe\x43\x7b\x22\x44\x6d\x08\xda\x0e\x3e\x76\x8c\xaa\x40\x92\xf6\xd1\xbe\xf6\xc1\x6d\xcd\x3f\x38\x7a\x83\x13\x31\x59\x53\x80\x8e\x2a\xae\x96\x36\x27\xf9\x8c\xc7\x31\x12\x04\xc2\xe6\xf8\x1b\x81\x08\x4b\xf0\x60\x6d\x8d\xf2\xa9\x5a\x3b\x9f\x1e\x62\xb7\xd3\xd4\x4f\xc7\x11\x2d\xe1\xd2\xf4\x88\x53\xa1\x59\xaa\xcb\x58\xae\xa8\x2e\xef\x01\x58\xe2\x3a\xa5\x20\xad\x9f\xfe\x95\x8a\x7d\x9c\xe7\xeb\x9f\x7e\xc4\x52\xed\x40\xd9\xa9\xaa\xe4\x19\x66\x88\x67\x3c\x0d\xf1\x55\x12\x51\x37\x64\xf1\xa8\x52\x50\x41\x76\x4c\xf1\xe9\x67\xb1\x10\x4b\x34\x1b\x8f\xa4\xd4\x69\x47\x70\xc5\x1c\xe7\x64\xfc\xe9\xfa\x94\x4d\x90\x45\xe3\x07\xd3\x9f\x8e\x35\x62\xc4\x33\x80\xa8\x7a\x99\xc4\x44\x1b\x02\xf8\x8a\x30\x3f\xf2\x5f\xd4\x16\x62\x5c\xe1\xa1\x9f\x39\x5d\xe0\xbc\x84\xf9\xd8\x1f\xb5\x15\x43\xa3\xac\x84\x51\xad\xa4\x7d\x2a\x60\x30\xd7\x9e\xdd\x2e\xdf\x2c\x3f\x34\xff\x8e\xf0\x15\xd7\x1b\x2e\x13\x7b\x8c\x7d\xbf\x11\xe0\x4f\x80\x10\xc4\x77\x92\xe9\x2a\x86\x8e\xf5\x00\x05\x92\xc8\xf7\xce\x58\xbb\x46\xd9\x2f\x4b\x6c\xe7\xf3\x1b\x82\x62\xe6\x51\xd5\x99\x03\x8d\x87\x80\x1e\xf8\xb7\x55\xa6\xa5\x7f\xb4\xe0\x38\x3c\x46\xdc\x5d\x8c\x8f\x5a\xfe\xc4\x07\xb6\x12\x64\x50\x88\x0f\x19\xc1\x84\x9f\x8e\x4b\xc8\x0b\xb7\x28\xe3\x12\x28\xbe\x42\xd0\x58\x09\x78\xb3\x25\x2e\xa6\x2a\xc1\x51\xc8\x82\xf7\x0f\x2f\xe4\xc6\x65\xc9\xb1\x27\xeb\x20\x4a\xea\x9d\x91\x5f\x14\xbf\xe2\x85\x53\x5c\x56\x08\x24\x8c\xcb\xca\x8b\x14\x71\x89\x1d\xf4\x6e\xe9\xd8\x53\xa9\x7a\x33\x70\x74\xa1\x2b\xbf\x43\x7e\xa1\x22\x34\x9c\x65\xaf\x67\xe3\xc1\x7c\x5c\x76\xc9\x57\x0e\xc7\x49\x92\x57\x59\xfe\xe0\x19\xc8\x76\x03\x88\x71\x6a\x30\xbf\x61\xff\xe2\xd6\x66\xe7\x22\x8e\xe3\xa2\x9a\xef\x05\xe0\x0d\x5c\x5c\xf4\x4e\x06\xef\xd0\xc4\xc5\x29\x57\xff\x15\x97\xcb\x4f\x01\x05\x9b\x14\x20\xc1\x7a\xa3\xd2\xa0\xba\xd0\x7b\x8e\xfa\xc1\x0e\xe8\x15\x5b\x90\x47\x6c\x6a\x69\x2f\xaa\x04\x9f\x41\xc6\x1d\x73\xae\xd7\x2c\x01\xcd\xcc\xa1\x1f\xe1\xba\x53\x8a\x4d\x63\x1e\xf0\x15\x35\x76\xeb\xbb\x82\x7f\x6a\x28\x0a\x68\xd3\xaa\x3e\x2a\xa4\xb7\x86\x65\x27\xbe\x7c\x4e\xf8\x1f\x58\xcf\x02\xfe\x44\xbd\x1c\x6a\x50\xfc\xac\x2a\x19\x35\xae\xdc\xcd\x89\xeb\xfc\x14\xcb\xc5\x87\xeb\x71\xdd\xb8\x2b\x18\x57\x2c\xe2\x61\x48\xd7\x90\x05\xbe\xca\xe0\x89\xb8\xae\x91\xc5\x74\x45\xb8\xc4\x89\xb6\xba\x2d\x01\x65\x83\xf4\x30\x78\x37\xf3\xae\x7e\x50\xf1\xcb\x3e\x33\x14\x7d\x4f\xe3\x6f\x68\xa2\xb0\x05\x76\x79\x30\x52\xe9\x56\x54\x95\x5b\x31\xf2\xd9\x6d\x8c\xd2\x4f\x85\x17\xe7\x7f\xa3\x01\x17\x12\xe8\xf3\xc9\x54\x3c\xfd\xd9\x4d\x7c\xfa\x03\x1b\x85\x2f\x43\xcc\x3c\xa0\x70\x46\x82\xf4\x56\x62\xb4\xab\x24\x00\xf6\x0e\xc6\x09\x0f\x8d\x4e\xd3\x62\xc5\xfd\xb4\x77\x31\x82\xb6\xc4\x40\x73\x6d\x33\x00\xbd\xa3\x10\x9f\xcf\xda\xb0\x28\x25\xb2\xa4\x8c\xbc\xa9\x43\x9e\x06\x45\x5c\x42\x41\x79\x6d\xe2\x6d\x0b\x99\x97\x39\xca\x9f\x68\x17\x48\xe2\x46\xae\x31\x6e\xd5\x47\x96\xad\x72\x76\x8b\xdb\x3c\x69\x8e\x5b\xbd\xcc\xb6\x45\x8a\xb8\x8e\x89\x57\xb8\x28\xd5\x0d\x0b\x3e\xc0\x67\xcd\x2b\x91\x5a\xa4\x68\xe8\x8c\xa5\x7c\xfe\xc4\x04\x07\x0d\x73\x6c\x4c\x3d\x6e\x1a\x8e\x22\x89\x0f\x5a\x57\xd7\x27\x4e\xca\xe3\x7f\xc1\xd5\xb6\xe3\xed\x0a\x52\xae\x9a\x06\x27\x52\x5b\xa6\x52\x4c\xeb\x8f\x14\x7d\x60\x8f\x5d\x62\x5e\xa5\xea\x33\x4f\x86\xc4\x94\x16\x90\xd7\x96\xae\x65\xff\x13\xb3\x87\x1f\x75\x03\xcd\xf9\x16\x03\x6e\x57\x83\xf4\xce\xcb\x3f\x4d\x11\x25\xff\xd0\xd3\x07\xde\x80\xdf\xbd\x3c\x6e\xe3\x31\x6d\x70\x23\xc1\x37\x53\xcd\xd2\xde\x54\x1b\x4d\x0e\x46\xa9\xdb\x95\xc2\x69\xc3\xb7\xa7\x46\x2b\x7f\xa6\xa4\xdd\x8a\xfa\x37\x9a\x7f\xed\x67\x84\xff\x38\x34\x76\x48\xc9\x3c\x8e\x54\xac\xa5\xaa\xd5\xbd\x20\xfc\x9e\xa1\xd1\x71\xd9\x43\xb9\x87\x7f\xc4\x2b\xe4\x6c\x0b\xe9\x69\xd9\xee\x9e\x7e\x97\xbe\x6a\x39\x33\xea\xf3\x6f\x1a\x8b\xa9\x96\x70\x7a\x5c\xb3\x42\xc1\x09\x29\xac\x5d\xa7\x4f\x92\x2a\x9f\xc6\xa9\xbb\x53\xbf\x93\x38\xe9\xeb\xdf\x88\x71\x21\xd1\x26\xb9\xff\xb3\x9a\x29\x70\xd1\xdc\x4a\xeb\xa5\x38\xa3\xf0\xa8\xe4\xfe\xf9\xba\xd7\xf9\x94\xab\x6f\x16\xff\x14\x5e\xff\x14\x65\x3f\xd5\x42\x1f\xb5\x1b\x15\x97\xbd\xfc\x1f\x39\xbd\x5f\x7b\x6c\xe1\x8c\xe3\xee\x65\x5a\xfd\x76\x77\xdc\xc8\x7b\x61\xe9\xb5\x45\xa3\x3e\x37\x42\x4f\x04\x62\x8e\xf1\x90\xa4\xca\x32\x0a\x2f\xce\x68\xb9\xa5\x00\xa7\x7a\x1a\x17\xa7\x9e\xb2\x98\x63\xb1\x7c\x9c\x3b\x14\x01\xf4\x3b\x55\xa2\x63\x4c\x6d\x39\xbe\xb4\xff\xc7\x17\x07\xa9\xfc\x4c\x05\xff\x1d\x04\x27\x87\xbc\xa7\x3f\x78\xba\xa6\xfc\x5a\x4e\x3a\x8b\x65\xbd\xc0\x12\x73\xb2\x0b\xe9\x0a\xb5\xf0\xe7\xfd\x02\x99\x68\xce\xae\x6c\x82\x60\x26\x93\x00\x76\xd8\x9d\x81\x81\x41\xe7\x10\x3f\x75\x71\x39\xd7\x31\xd7\xe2\x6d\xb6\x52\x6d\x45\xcc\x36\x32\x8d\xc5\x94\x43\xd8\x4b\xb6\x68\x53\x42\x7e\x31\x33\x9f\xab\x31\xd3\x1f\xde\x80\x89\x47\x80\xbc\xab\x55\x10\x76\x8f\x61\xda\xdc\x4a\x2c\x01\x01\x21\x0f\x47\x28\x8b\x1d\x4a\x3a\xa1\x5f\xda\xa6\x73\xdc\x11\x20\xa1\xce\x1c\xf5\x39\x3e\x1f\x8f\x70\x5d\x60\xb2\x8f\x47\x8e\xca\xd6\x1c\xca\xbe\xc2\x24\x77\x73\x3c\xea\x37\x5d\x35\x9f\x6e\x81\x19\xe4\xa3\xe1\x24\x9c\x0e\x4c\x8c\x14\x71\x32\x4b\xed\x60\x13\x23\x4b\x42\x4d\xc7\xce\x2b\xb9\xe6\xc9\x38\xf5\x4e\xc6\x43\x4f\xa3\xf8\x86\x0f\xe5\x15\x21\x27\x26\x1e\xec\x38\x47\xda\xda\x2c\xad\x64\xd7\x22\x14\x32\x0c\x3e\x01\x89\x76\x35\x21\xe2\x18\x95\xed\xfe\xa8\xc6\xde\xab\x76\x46\x26\xa0\x7a\x88\x8a\x74\x46\x20\xc9\x09\xd9\x06\xb7\xe3\x0c\xf6\x55\x25\xaa\xc4\xe3\x8c\x66\xb3\x07\x03\x9f\xee\x6c\xda\x71\x26\x1d\x27\x81\xcc\x6d\xd6\xa7\x1c\xd0\x0a\x31\x11\x72\x7b\x42\x2a\x84\x9a\x17\xc0\x87\xff\x58\xcd\x1c\xe7\x87\x2b\x84\xe3\xfc\x40\xee\x73\x3c\x66\xed\x2b\x47\x78\x98\x14\x76\xa2\xa7\x45\xa1\xe7\x5b\x00\xda\x35\x8e\x51\x94\x31\x91\x12\x41\x0c\x25\xe8\xb9\x3f\x10\x3c\x94\xe0\x8e\xca\x95\x26\x4b\x7d\x23\x11\x31\x69\x2b\xf2\x12\x1a\x5e\x9e\x08\xf0\x7b\xda\x94\xd0\x18\xb1\x67\xde\x02\x80\xce\xdb\x65\x89\xa9\xf0\x9b\x1d\x09\x39\xbc\x6e\xc4\x1c\xe2\xcd\xe2\xf8\x44\x77\xc2\x81\x67\x03\xac\x37\xa1\x2f\xa0\xc9\xe4\x96\x05\xa7\x1f\xb1\x2c\xee\xab\x1e\x29\x58\x2a\x20\x79\x4d\x1a\x4a\x51\x79\x53\x5a\x06\x37\x51\x36\xd2\x6c\x8f\xf8\x30\x54\x1d\x36\x19\x1d\xc4\x54\xd9\x94\xb1\xe8\x7a\xae\xac\xb1\x71\x03\x03\x50\xed\xd8\xbe\xca\xca\xb5\x6c\x59\xe7\x4a\xa8\xac\xfe\x5c\xc3\xf1\xed\xc3\x89\xae\x27\xd8\x58\x45\xc1\xb6\x74\x02\xc6\xe8\xab\xc8\xfa\xe7\x2f\xf2\xe6\xd2\x24\x04\x39\x8d\x02\x5b\x7d\x01\xa6\x50\x5d\xc4\x66\x81\x51\xb0\x9b\x22\xf3\x64\xab\xb0\xb2\x9a\xcc\x1a\xc0\x8f\x77\x91\xb2\x92\x7f\xd0\x90\x67\x6b\x5a\xef\x0b\x34\xa1\xa2\xaa\xf9\x07\xa1\xab\x35\x85\x16\x85\xaf\xd1\x04\xd7\x59\x48\xe7\x15\xdb\x67\xab\x17\x0b\x41\x6f\x1e\x12\x46\x16\x9d\xaf\xe8\x04\xeb\x74\x2f\xf0\x2b\x52\x67\x07\x08\x65\x46\x04\x9e\x3c\x54\x14\x7c\xed\x71\xb1\x74\x5d\x7b\xcc\xbf\xb0\x55\x8d\x3d\x2e\x00\x86\xe4\x1a\x20\x1b\x05\x8b\xed\x35\x12\xa1\xc1\xad\xa3\xb1\xed\xca\x60\xc8\x88\x89\xba\x13\x13\xea\x5c\x4a\xc4\x26\xfa\xf4\x33\x6e\x62\xda\x42\x3a\x0d\x0c\xb8\xdf\xc2\xc6\x48\x36\xd3\xcc\x06\xc8\xbc\x6d\x39\x68\xce\xb6\xc6\xc3\x1c\xa2\x62\xe8\x60\x96\x36\x6c\xaa\x23\x98\x3d\x94\x05\x5f\x05\x30\x46\xbd\x44\x27\x0e\x93\x1e\x14\xc7\xf2\x5f\x80\x28\xf5\x58\xfe\xb3\xd1\xaf\x64\xbf\xcc\x19\x4b\x89\x81\x5d\xab\x44\x3b\xcc\x06\xe6\xb6\x22\xa1\x9d\x5e\xc7\x52\xc6\x27\xa8\x11\xd5\x44\x09\x12\x88\x15\xa7\x39\x31\x7e\x34\x86\xda\x0e\xfe\x33\xab\xf5\xfb\x4f\x2c\x68\x4a\x4c\x5f\x0b\xa7\x84\xa0\x77\x1e\x22\x4e\xdd\xb4\x39\x5d\xa1\x6c\xd9\x12\x7a\x09\xdb\xb4\xb3\x90\xae\xd8\xdc\xb6\x99\x0d\xbd\xc4\xe6\xbd\xce\xb1\xb9\xd0\xbd\x02\x8a\xee\x4e\xdd\x6a\x41\x49\x16\xeb\x15\x21\x00\x4d\x09\xe5\x1e\xcb\xb5\x8f\xee\x43\xd5\xb5\x7f\x0e\x9b\xd7\xcb\x95\x1a\xd2\x61\x5b\xff\xb1\xdc\x36\x56\xca\xdc\x4c\x29\x73\x33\xa5\xf0\x35\x09\xcc\xd9\x6d\x85\xf0\x94\xd7\xe3\x9e\xf2\x7a\xf8\xcb\x6e\xa3\xf8\xb2\x9b\x14\x6e\xe0\x18\xe9\xfd\x55\x77\x57\xca\xe5\xb9\xd6\x1d\x92\x72\xb5\x78\xb6\x58\xe2\xd0\xb1\xc0\xdf\x4c\x2b\xd4\x7c\xf8\xf3\x69\x7b\x3d\x7d\xb3\xd6\x69\x49\x6f\xb9\xc4\xf2\x32\x97\x7c\x64\x27\x66\xab\xc5\x58\xd7\xf2\xcd\x33\x9e\x3f\xb1\xfc\x54\xad\x76\xbb\xeb\x21\xc8\xca\xf2\xe7\x73\xd8\xa2\xc9\xc7\x30\xbe\xe4\x8f\x78\x05\xb7\xd0\x24\xbb\x2a\xc8\xd7\x29\xa7\x4a\x2a\x88\xa7\xbd\x7c\x8a\x67\x78\xd3\x8c\x09\x4d\x43\x4c\xe3\xa2\xce\xfb\x64\x77\xc6\xb2\x7e\x0e\x3a\x05\x92\xac\x9d\xb3\xf2\xcf\xf8\xb6\xf5\xf9\xb9\x73\xca\x39\x77\x61\x93\xe0\x65\x4f\xe7\xc9\x78\x76\xae\x95\xcf\xe4\xd5\x7f\x26\xe5\xfa\x4e\x3c\xa2\xdc\x0d\xf2\xbe\xbd\x43\x78\x5a\xe2\x2f\x54\x88\x64\x32\x81\x79\x69\xd8\x0b\x33\x7f\x26\x6a\xc0\x34\x87\x37\xd5\x52\x42\xf2\xca\x87\xa0\xd1\xa2\x3a\xa1\x1c\x39\x45\xca\x86\x9c\xc9\x64\x66\x00\x1e\x13\xcc\xe6\x27\x34\x9b\x30\x91\xb9\xe1\xab\x67\x81\x33\x84\x64\x05\x99\xd6\x6a\x76\x43\x53\x4e\x65\x90\xf1\x4c\x3a\x7b\x9d\xfe\xdc\x47\x60\xd4\x6f\x9a\x63\xdf\x5e\x04\x44\x93\x12\x64\x20\xd7\x4b\xb3\x6a\x4f\x76\x1c\xae\x9a\x5f\x9d\xf5\xcf\x34\x5f\x15\x92\x38\xb5\x1a\xb6\x8f\x85\x9b\x79\x30\xa1\x48\x73\x95\xd3\xe1\x49\x10\xac\x95\x63\xcd\xf2\x4c\xba\xb5\x72\x26\x9f\x48\xcf\x74\x7c\xea\xad\x4a\x8b\x37\x03\xef\x6b\x67\x3a\xdd\xd2\x5f\x85\x08\xc6\x5e\x00\x51\x2c\xf5\xc0\xe9\x1a\xa8\x5c\xe3\x6a\x18\xef\xff\x14\x7f\x28\xe5\xd4\xb0\x87\xf3\xe9\xd1\x9d\xf4\xe4\xd0\xe2\xdc\x6d\x33\x86\xd8\x6a\x89\x2f\x3c\xe2\x79\xeb\x22\x78\xc3\x46\x97\x44\xda\xd6\x48\xe4\x0f\x70\xf4\x92\xf5\x7b\xe0\x82\xb9\x69\x75\xe2\xa6\xb1\x7d\xbf\xdc\xe5\x65\x0d\x0d\x4f\x43\x6e\x0d\xad\x5f\x35\xb3\xf7\x25\x7d\x4a\x08\x04\x89\x84\x10\x0e\x6e\xe5\x2c\x88\x83\xb7\x60\xed\xe7\x40\xfc\xbc\x87\x6c\x8d\xcc\x79\x06\xc0\x7c\x87\x5a\xd3\xc4\xc6\xaf\x3a\x6d\x12\xc8\x69\x73\x79\x68\x5e\x7e\x3a\x8a\x2b\xa0\xdd\xfb\x63\x65\xf0\xa3\x05\x6a\x03\xde\x59\x71\xf9\x33\x9e\xb5\x7c\xe8\xcf\x04\xe2\xc6\xb3\xbe\x3f\x7f\xe2\x5f\xaa\x80\x13\x33\xf3\xdf\xf7\x2a\xff\x8e\x50\x12\xdd\xfe\x1d\x76\x9c\x22\x48\x17\x51\x02\x95\xc9\xfe\x3b\xa2\x74\x2a\xfa\x4a\xa1\x6c\xcc\xc3\xdf\x91\x6e\x2f\x1e\x84\xb4\xcb\xac\x82\x39\xf3\xfe\x1d\xc9\xee\x21\x01\xa7\x87\x2d\xf0\x94\x4a\xe6\x17\x04\x2b\xf6\xef\x48\x47\xcd\x71\xf1\x68\x4a\xa4\x51\x97\x4b\x13\x94\xce\x4a\x9d\xf0\xc4\x05\x62\x20\x8c\xba\xe2\x2f\xe8\x5e\x5a\x7d\x58\x36\x53\xc3\x5d\x27\x41\xd4\x35\x25\xc8\x0b\x21\x79\x2e\x6c\x3f\x85\xf0\xc5\xaf\x2f\x8e\x3a\xd0\x1f\x47\x2f\x84\xe2\x90\x88\xd3\x5a\x0b\xdd\x3e\x83\x51\x6d\x91\x07\xb7\x02\xe6\x74\xdb\xe2\xb5\xeb\xea\x9d\x90\x4e\x6c\xc3\xa2\x6d\x6c\xf8\x6d\x9b\x8b\x25\x59\x7e\xb0\xa1\xc8\x8a\x94\x57\x0d\x04\x46\x17\xdd\x10\x55\x2a\x7c\x6c\xa9\x4c\x07\x75\x76\x6b\x2b\x6b\x7d\xcd\x1f\x5b\xd5\x75\x7c\xab\xb8\x8f\x1d\x4d\x7d\x4f\x6c\xce\x4e\xb4\xda\x41\x77\xfb\xa0\xb7\x34\xa3\xea\xf4\x89\xad\x9a\xe4\x67\x13\x5f\x25\x26\x42\xd3\x8d\xd5\xd6\x76\xd4\x66\x23\x73\xdc\x5a\x2d\x9a\xb8\xa6\xb7\xe7\xa0\x72\xed\x47\x8c\xeb\x7b\x4f\x08\x62\x3c\x6c\x0f\xd4\xc5\x88\x0b\x32\xe6\xa8\x8d\x35\x5d\x66\x5a\x8a\xc6\x71\xaa\x0f\x7d\x70\x44\x64\x5f\x4f\xf5\xfa\xe9\xe9\x8c\x59\xbb\x69\xfb\x5c\x7b\xc4\x60\xa8\x88\x49\x06\x36\xd4\xf8\x80\x82\x78\x32\x65\x37\xb2\xde\x2c\x96\xcf\x8d\x38\x6b\x62\x53\xeb\x8b\xde\x67\x02\x52\x8e\x51\x60\x92\xa5\x63\x5f\x64\xc9\x89\xc1\x10\x4f\xa4\xaa\xfa\xd9\x6f\x72\x46\x84\xf4\x33\xd0\x0e\x31\xb4\x11\x97\x3b\x63\x87\x22\x4b\x26\xaa\x83\xc3\xc3\xd0\xdd\xab\x32\xb3\x38\xe1\x83\xcd\x99\xc2\x06\xef\x7f\x47\x38\xb0\x90\xef\x3d\x7c\xb4\x59\xf0\xfe\x3e\xdc\xb1\x6a\x21\xd2\xc1\xee\x7d\x3b\xc5\xdd\x43\x8c\x0c\x50\xe1\x60\xdb\x13\x76\xe6\x6f\x00\x01\x5d\xe9\xb0\xaf\x49\x85\x83\x09\x54\x49\xc8\x38\x3a\xa1\xbb\x96\xf2\x8a\x56\xd2\x2f\x9f\x3a\xf4\xed\x19\x44\x64\xd0\xd5\xe0\x0b\x5a\x45\x70\x3e\x1a\xb7\x85\x54\xd3\x33\xcc\x28\x46\x47\x12\x65\x15\x87\xd2\x00\x40\x70\x97\xee\xc6\x5f\x3b\x39\x8f\x6b\x2f\x73\x1d\x2e\x84\x46\x0f\x68\xdd\xef\x46\xd0\x6f\xa9\x3b\xd5\xd0\x2e\xbf\x29\xfb\x9a\x79\x2d\xfe\xb2\xef\xca\x92\x3b\x34\x77\xc7\xe8\x69\xb9\x5b\xdd\xf1\x27\x5b\x52\x20\xe4\x54\xcc\xf2\x91\x2f\x37\xbe\xea\xfa\x38\xbf\xef\xf0\x6e\xaf\xe3\x91\x91\xba\x9a\x1a\x4b\xc8\x14\x09\x2f\x10\xe2\x6a\xe3\x98\x8f\xcc\xe3\x50\xd1\xa9\xfd\xff\x28\x09\x7b\x98\x44\x2c\x43\xe6\xec\x1f\x57\xae\xf0\xe5\x86\xf1\x45\x8b\x78\x28\x77\x35\x6c\xc5\x38\xc0\x10\x5b\x70\x7e\x3d\x24\x8e\x32\x96\x1d\xb5\x35\xf4\xfa\x47\x1c\xc2\x3c\x73\x2a\x21\xec\x37\x6b\x4f\x82\x1d\x39\x10\x98\xeb\xda\x1e\xa6\x1d\x8f\x24\x24\x81\x28\x54\xd7\x16\xda\x98\x01\x8f\x5b\xb8\xd6\xe1\x06\x1f\xb3\xc2\xbc\x08\x70\xb3\x24\x8e\xb3\x5e\x64\x1e\x46\xdb\x3f\xd7\xae\x30\x61\x5f\xc1\x17\x1c\xa3\x7d\x16\x8b\xb4\x7d\x64\x25\x21\xad\x77\xb4\x8f\x2f\xd4\x06\x06\x23\x72\xce\xc0\x1a\x10\x91\xd9\x72\x91\x26\x48\x77\xef\x46\x87\xa2\xae\x0d\xaf\x9e\xe2\x30\xb6\x69\xe8\x7a\x7c\x5c\x7a\x85\x00\x80\x39\xb8\xf6\x50\x78\x02\x30\xf0\xa8\x58\xfa\xcf\xf0\x6d\x90\xe1\x5b\x1f\xaf\xb0\x0c\x94\x17\x00\x3b\xf5\x4b\xaf\x52\x0a\x48\x0a\x36\xdb\xe4\x7f\x85\x3c\x6e\xc8\x7c\xf8\x31\x17\xa1\x79\x2b\x5b\xa4\xc8\x11\xc3\x2c\xe8\x57\x38\xf5\xb9\x9e\x42\x0b\xc6\x66\xa4\x17\x5f\xe6\xc4\xa9\x44\x34\xbe\x62\xc1\x5f\xc7\x3f\x4f\x7a\x05\x70\xf8\x35\x25\xa1\xf1\x15\xdb\x23\x52\x00\xae\xe0\xad\x45\xfa\x6b\xa8\x64\xb5\xd5\x19\xf0\x15\xdb\x67\x0d\x9f\x3f\xf1\xc5\x47\x4c\x6a\x62\x58\x32\xd8\xf0\x19\x16\xc5\xb2\x95\x74\x73\xe5\x65\x2c\x87\x70\x14\x0e\x34\x2f\x53\x6d\x67\xbc\x2b\xed\x54\x42\x9d\xf0\x92\x66\x7c\x87\xe5\xe2\xff\xa4\x91\xd6\x77\xd8\xb6\x48\xa1\x01\x8e\xe1\xf7\x1d\xb2\x5a\xfa\xf1\xcb\x3b\xdc\x9e\x7c\x1a\xa5\x2c\xe0\x5b\x98\x45\xb4\x9e\xb7\x2c\x3a\x6d\x6e\x7c\xeb\xdd\x9a\xb7\xac\x90\xe1\xce\xef\xd6\xbc\x97\x18\xb5\x19\x00\x32\x39\x4b\x54\xb6\xed\xed\xa3\xec\x7b\x89\xa7\xbb\x3b\xe7\x7e\xbe\x53\x79\x62\xd6\xd5\xdb\xc4\xc0\x0a\xb2\x07\xc5\x82\x75\xae\x7a\x53\x33\x9b\x05\x63\xa3\xde\xdb\x4f\xa1\x80\x98\x0a\xdf\x62\x11\x88\x02\x59\x92\x16\xdd\x22\x4c\x38\xa4\x94\xc5\x37\x5f\x17\x7b\x6a\xfc\xad\xb1\xe0\xe1\xd9\xcc\x63\x4d\x0e\xed\xdd\x8a\x13\x98\xdd\x49\xbc\xdc\xcd\x4b\x5b\x34\x28\x0d\xb1\x6e\x33\xa1\xc0\x96\xc2\x7a\x1c\xa3\x18\xcf\x39\xc9\x7f\x3f\x5b\xca\x1a\x4e\xf7\x54\x82\xa6\xd3\x4e\x68\x87\x7b\x43\x33\x51\x56\xa0\x41\xa9\xe8\x56\x41\x50\xed\xa2\x25\x62\x3a\x1f\x14\x9a\x1b\x15\xe1\x0a\xd4\xbd\x90\x46\xbb\x15\x81\x3e\x10\x06\x7a\x69\x03\xa1\xbc\x57\x01\x5e\x43\xa3\xcf\x40\x6d\x2f\x4d\x20\xfd\xc6\x45\x3b\xfd\xdb\xf5\xd8\x2b\xa4\x9f\xb8\x8c\xcb\x1d\x78\xef\x01\xb6\x76\x4c\x0c\xc7\x9c\x65\x7c\x1f\xe6\x0d\xce\x89\x9f\x8e\xd3\x5f\x5d\x3a\xe5\xe5\xec\xfa\xbf\x15\xd2\x52\x56\x46\x08\xae\xcd\x06\xe7\xe7\x04\x82\x86\x7e\x56\x0f\xcf\x9a\x6d\xfb\xeb\x2d\x4b\x4b\x94\xdf\x8e\x03\x14\x7a\x26\x7e\x39\xd4\xc2\xd8\xd3\xc3\x5b\x07\xb0\x6b\xf6\x32\xfa\xe5\x9f\x98\xd1\x3d\xe5\xd0\x34\xfc\xe4\x02\x8b\xe3\x7b\x4a\x3e\x8d\xef\xb4\x45\xba\xa0\x04\x0f\x31\x35\x19\xaa\x68\x3c\xbe\x55\xaa\xac\x00\x44\x96\x74\xc2\x7d\xeb\x63\x44\x03\x2c\x06\xc7\x6c\xf5\x77\x12\xbe\x27\x97\xf5\xb6\x03\x8e\xb7\xef\x6b\xbe\xed\x5c\xe2\xed\x87\x11\x6f\x5f\x85\xbc\x6b\x99\xa3\x98\x9f\x76\xbc\xeb\xb9\xcb\x12\xfd\x50\xc2\x8e\x0f\xde\xf7\xd3\x83\xb7\x4d\x1a\x6f\x6a\xf6\x46\xaa\xab\x54\x98\x46\x2b\x50\xbd\x29\x54\x7b\x6e\xbf\xbc\x6f\x27\x0a\x6f\x3f\x50\x78\xd7\x7e\xee\xb1\x99\xdb\x4e\xed\xaf\x8a\x34\xc9\xfd\xc2\xeb\x62\x22\xf5\xa5\x1c\xf9\x7b\x9e\x2e\xbc\xfd\x13\xcf\x18\xde\xa7\x89\x48\x25\x44\x08\x02\x92\xdb\xf5\x3b\x9c\x48\x5b\xbe\x61\xb4\x03\x25\x2c\x87\x20\x5f\xf4\x21\xab\x7b\x14\x90\x3f\x14\x56\x88\x12\x3a\xa3\xaf\xb5\x80\x39\x18\x9c\xbc\xc9\xa3\x2e\xf8\x4e\xdc\x11\x8b\x4b\x88\x6b\xc6\x4f\x0a\x05\xe2\xef\xc3\x15\xaa\xdf\x99\x5b\x97\x9f\x4c\x6c\x91\xb7\xe4\xb2\x97\x27\xb9\xde\xb0\xfb\x69\xf7\x64\x18\xe1\x79\x8f\x2e\x6d\xee\x46\x58\x16\xad\xe3\x9f\x69\x0e\xf9\xa7\xed\x4f\xbf\xcf\xd4\x26\xec\x3e\xda\x9e\x39\xf8\x44\x0a\x75\xd5\xd7\x44\xe6\x22\xce\x38\xb3\x0f\xe3\xf3\x02\x3b\x71\x42\x51\xe4\xea\xbd\x9c\xd8\x5d\x80\xb0\x10\x6b\x9a\xf6\x6d\xba\x6f\x37\x17\xde\x42\x72\xb5\x62\xac\x65\x96\x4d\x2d\xf6\xdd\x24\x63\x08\xec\x13\xb1\x78\xe7\x9b\x78\x25\x6c\x40\x55\xe2\x43\x78\xf9\x8d\x85\x37\x45\x82\x6a\x30\x2e\x09\xd4\xb0\x05\xa5\x84\x55\x5b\xf3\x39\x1c\xd0\xad\xeb\xd9\xbc\x56\xc6\xe6\xe5\x6c\xa7\xe0\xef\x73\xb4\x6d\x32\x2b\x46\x49\x32\xf8\x4c\x5e\xdc\xf4\x20\xab\x30\x8c\x34\x78\xc3\x9e\x89\x1a\xa7\x7d\x08\xbe\xa4\x95\x4b\xb0\x8c\xef\xdb\xfa\xf4\xdd\xc7\xf3\xa9\xcf\x0e\xe2\x5b\xbb\x86\x2a\xbd\xcd\x13\xea\x7e\xc6\x7b\xaa\xc3\x15\xec\x0d\x5b\x1f\x76\x13\x24\xb7\xeb\x77\x38\x91\x96\xd2\x75\x93\x96\xa4\xd4\x4b\xdd\x0c\x9b\x9b\x15\xdf\xec\xab\xc6\xdd\x26\x87\x67\xb2\x1c\xfd\x93\x85\xdf\xea\xe4\xa9\xae\xd8\xda\xac\x5f\x3e\x14\x57\x53\x1d\xdc\xdf\x80\x0b\xd9\x4e\x8f\xb9\xda\x3c\x6f\x2f\xbe\x19\xd3\x14\x82\xa0\x04\xdd\xb4\xc0\xff\x25\x14\x55\x32\xa3\xe4\xd9\xb9\xf9\x07\x2a\xe6\x7c\xa3\x5c\x4b\x36\x49\x6b\xb3\xf3\xf9\xb8\x61\x8b\xe2\xa6\xb7\x08\xf4\x9a\x6e\x7e\x56\x6d\xe0\x57\x0b\xb7\x4b\x2e\x42\xaa\x38\x1a\xe0\x2d\x64\xbd\xe5\x25\xd4\x7f\x63\xd5\xdb\xb6\x90\xcc\xc8\x7b\xa0\x02\x8f\x40\xc1\x95\x24\x7c\x85\x0b\x6a\x94\x35\x94\x68\x84\x87\xec\xcd\xa5\x85\x32\x96\x1c\x2d\x91\x54\x92\xcf\xc2\x6b\x14\xcc\xe7\x61\x41\xed\x94\x67\x0f\x54\x75\x97\xad\x3e\x6f\xfd\x4b\x6c\x46\x49\xd3\x75\x8f\xa5\x7b\xd5\x1a\xa9\x7e\xfb\xc7\x76\xc8\xdf\x50\xd6\xd5\x1a\xf7\x7d\xf3\xb4\xb8\xb5\x8b\x16\x86\xcc\x60\x96\xa7\x57\xd8\xb4\x4b\x00\x27\x8f\xff\x15\xfa\xad\xf0\x5f\x71\x4f\xbf\x48\x6f\x2f\x20\xf0\xc6\x77\x12\xfa\x85\x9b\x72\x00\x66\x11\x9b\x81\xce\x48\x53\xe9\x9a\x72\x88\xb9\xa4\x94\xcb\x33\xce\x76\x50\xef\x71\xd5\x7b\x5c\xf5\x1e\xd7\xf0\xae\x08\x55\x7e\x8e\xf0\x79\x3c\x74\x9f\xf9\x6d\xe2\xa1\xe3\x7b\x64\x1d\x0b\xf4\xd2\x98\x3e\xe1\x89\x1f\x69\x57\x1f\x9d\x90\x3e\x7c\x9f\x1a\x3f\x7c\x2f\xfd\x0c\x0f\xf9\xe9\xb6\x03\x6e\x48\xaf\x62\x34\x9b\x0a\x9e\xe1\xc1\x0b\x40\x7e\x6b\x5a\x00\xc2\x12\x70\x91\xe6\x6c\xfa\xe4\x31\xbf\x18\x74\x37\xb5\x83\x08\x51\xc8\x84\x3c\x03\xc4\x18\x89\x89\xb5\xaf\x98\x6c\x25\x44\x74\x62\xab\x05\x85\x0c\xe2\xd2\xa9\x45\x65\x83\x20\x27\xa6\xde\x5a\x4d\x4e\xac\xcf\xc0\xaa\x85\xe9\x49\x58\xd5\xf3\x0a\x05\x65\x34\xfb\x45\xd0\x77\x98\x1f\xf9\xb7\xec\xad\x1a\x41\x5c\x10\xfe\xe6\xa5\x94\x4a\x90\x92\x16\xa0\xff\xf6\x32\x17\x04\x03\x4b\x0d\x7f\x46\x58\x6a\x13\xb5\xaf\x00\x68\x3c\x19\x43\xb9\x98\x2c\xbe\xac\x7b\xcb\x82\x6a\xf9\x85\x4b\x54\x04\x45\x4f\xcf\x90\xb3\xde\x2f\x17\x98\x98\xbd\x9c\xeb\xb7\x18\x3d\xf2\xbf\xd1\x40\x4e\xe7\xcd\xad\x67\x38\x90\xde\xc3\x72\x7b\xa4\xcc\xe8\x01\x9a\x02\x2d\xce\x23\xe5\x0f\x73\x72\x50\xc6\xc6\x93\xec\xf0\x13\x37\x0c\x59\x3e\xe5\x11\x96\x2f\x31\x97\x04\x07\x65\x49\xcc\x69\x91\xf6\x80\x38\xca\x22\x05\x8c\xa7\x45\x4f\x5c\x7f\x30\x93\x5f\x37\x2d\xa3\x62\xe6\x15\xfa\x11\x36\xec\x44\x91\x62\x6a\x70\xb6\x01\xb3\xac\x30\xbe\x83\x84\xdb\x96\xc4\x7f\xa6\x67\x9e\x38\x00\x57\x94\x87\xaa\x89\x10\xa0\x5a\x79\x9e\xa1\xd5\xb1\xec\x00\x2d\xe8\xa5\x95\x67\x68\x3d\x46\x99\xd0\x04\xa9\x9e\x83\x27\xde\x3a\x35\x5c\xac\x7a\x86\xae\xb5\xd5\xa9\x71\x14\xc0\x5a\x9d\x42\xb3\x56\x71\x56\x8e\xd1\x1a\xa1\x11\x4e\x13\x33\xb5\xc6\x3d\x03\x03\xbf\xd2\xaa\xf5\xda\xaf\xb4\x59\x0c\xd7\xa0\xdd\x85\x98\xaf\xd9\xdc\x99\x3c\x4a\x6d\x79\x42\x04\xa9\x86\x06\xc8\x6c\x02\x7e\x00\xaa\x95\x82\x40\x73\x99\x58\xa8\x57\xda\xec\x63\xda\x18\xef\x95\xb6\xc1\x08\x04\x98\x7b\x37\x35\xf8\x2b\x5a\x76\xae\x0b\x8d\x8e\x2f\xf3\x69\x22\x57\x97\x76\x8d\xeb\x42\x32\x06\x95\xc9\x08\xa2\x39\x58\x71\x43\x4b\x76\x64\x0d\x00\x00\x21\x8c\x6c\xd1\x8e\x8c\x40\x06\x07\x8e\x61\x4d\x06\x6a\x95\x5a\x95\x4f\xaf\x58\xb5\x0a\x5e\xbc\x67\x21\xc0\x06\x90\x17\x54\xe4\xc3\xd4\x00\x5f\x75\xcc\x8f\xc3\xbe\x8e\x96\x2e\xb3\x52\x87\xfa\xb0\xfe\x29\x53\xff\x33\x06\xc8\xec\x7e\xda\xd3\x3a\x01\x1c\x59\x4d\x8d\x8b\x80\x4b\xdd\xe8\xe2\xf9\x19\x51\x19\xa6\x66\x5d\xc9\x3b\xda\x26\xa1\x8f\x56\x95\xba\xfb\x87\x7a\x8d\x49\x30\x4d\x82\x3f\x00\xa6\x71\x91\x18\x25\x1f\x1f\x2d\xc9\x50\x2c\x4b\x24\x12\x94\xe5\x40\x2c\xd5\x0f\x30\x36\x64\xed\xd1\x30\x8e\x47\xd5\xee\xfe\x8c\xcb\xc8\xf4\xb9\x0c\xe9\x78\x30\x38\xe5\x3f\xe3\x8a\xb3\x55\x9a\x6c\xe1\x31\x32\xfb\x62\x34\x35\xa5\x12\x05\x30\x35\xba\x2f\xf7\x8c\x96\xd0\x98\x53\xd9\x58\x56\x80\x66\x6d\xc5\x46\x09\xed\xcf\x98\x5a\x12\x6f\xa9\x4b\x1b\x88\x79\xed\xba\xfa\x76\x8c\xd1\x11\xf7\xbd\x99\x2b\x2c\x67\x98\x53\x6c\x66\x3f\x6d\xd9\xf7\x8c\x59\xb7\xe0\x9f\x31\x77\xba\xe5\x65\x41\x01\x1e\xec\x11\xe0\xf6\x48\x1c\x82\xa3\xcb\x1b\x7f\xc6\xa3\x32\xe3\xb2\xe6\x63\x1d\xe8\xf6\xea\x13\xb7\x32\x91\xde\x12\x29\x33\xd8\xd0\x45\xdb\x22\xa9\x87\x22\xdf\x67\x6c\x36\x90\x6b\x39\x82\xbb\x79\x92\xaf\x79\xc6\x86\x05\x1b\x43\x6d\x73\x8d\xf8\x54\x89\xfc\x34\x51\xb8\x4d\xc7\x11\x01\x4c\x4e\x43\x34\xad\x7a\xf8\x3c\x72\x02\x40\xf9\x35\x8c\xaf\x62\x78\x73\x68\x6d\xbe\xe7\x05\x85\x17\x1e\x38\xbd\x9a\xe4\x65\x1f\xd5\xcb\xb0\xc1\x53\x57\x30\xaa\x3c\xba\x5b\xba\x49\xd8\x64\x7f\xd7\x2c\xed\xc4\xfc\xe8\xba\xf1\xf1\xb0\x0a\xad\xae\xbd\x50\xab\xaa\x57\xfa\x19\x21\xc4\xea\xa9\x4f\x9d\x9e\x91\xd4\xb5\x40\xe8\xd3\x53\x52\xb7\x5b\x1d\x09\xd6\xd2\xb8\x54\x9f\x8e\xa0\x15\xff\x67\xd0\x1c\xc8\xe8\x34\x7d\x74\xf7\x71\x79\xb7\x1b\xf4\x29\x86\x39\x1c\x29\xe7\x78\x55\x6f\x0e\xaf\xa8\x5d\xed\xe5\xbe\x5e\x56\xaa\xdf\xa8\x2a\x29\xf2\x9f\x1f\xb4\x80\x9f\x9f\xcf\x9f\x67\x7a\xb0\x95\x24\xd3\x34\xfb\xc4\xe5\x84\x41\x10\xdd\x4a\x19\x01\x41\x19\xd3\x0c\xd1\x2f\x6b\x4c\x72\x02\xed\xc0\x50\x09\x5e\x3c\x53\x42\x43\xf6\x43\x63\x10\x4b\x90\x2a\xf0\xf9\x4f\xac\xd2\x4a\x53\x6f\x8f\x00\x9f\x77\x3f\x0e\xec\xab\xb3\xd8\xcf\xf4\x50\x53\x06\x0f\x31\xd8\x22\x92\xf3\x7a\x69\xb2\x78\xfa\xce\xe5\x99\xd6\x15\xb7\xc5\x01\xa4\x60\xd6\x0d\x0d\x34\xad\x3a\x23\x24\x59\xaa\x4a\xe1\x0a\xc0\x23\x40\x43\xd2\xf4\x09\xa5\xca\x80\xc4\x63\x6c\x4b\x54\xa3\xa9\x49\x97\x4d\x3d\x37\xf3\x2a\x63\x58\x7a\xea\x3b\x37\x41\xfc\xc7\xdb\x36\x01\x1f\xbe\x6d\x7b\x26\x4a\x35\xa2\x09\xaf\xdb\x06\xeb\x5d\xbb\x67\xda\x06\x47\x98\xb4\xd9\x7c\x02\x94\xd5\xbc\xcc\x42\xf3\xbc\x71\xaa\x81\xa9\x55\xed\x2d\x3f\xe5\x60\xcf\x62\x0c\xc3\x2d\xa1\x39\x69\xfc\x67\x09\x09\x48\x74\x83\x98\xb2\x5a\xa7\xc7\xe8\x2a\x31\x56\x28\xed\x03\xc9\x5b\x4f\x4e\x5b\x8b\x0c\x5c\x07\xc6\x94\x0f\x07\xcc\xb2\xbe\x6b\x11\xa0\xe5\x9c\x0f\xa4\x8c\xad\x2e\xd7\xce\xd0\xed\x02\xab\xc0\x5d\xbd\xea\x9b\x70\x20\xf8\xb9\xa6\x9b\x16\xae\x89\xc5\x38\x1e\x9a\x9b\x83\x6d\x1d\x39\x51\xe6\x22\xb1\xf5\x14\xe1\x2a\x6f\x08\xfe\x74\x73\xe3\x69\xaa\xa6\x04\x34\xfc\xf7\x73\x14\x01\x9b\x76\x35\x57\x40\x49\x28\x29\x2a\x29\x64\x7e\x23\xff\x28\xe6\x17\x3f\x90\xe3\xa5\xe6\xb2\xa7\x0a\x92\x79\xea\x55\xcd\x67\x2a\x85\x5f\xdd\x3d\x87\x64\x98\xc8\x32\x1b\x4e\x8b\x01\xea\xc7\x9e\xc9\x2b\xba\x45\xca\x6d\x78\x26\xd4\x41\x3b\x82\xee\xcb\x3d\x53\x43\x9a\x1a\xfc\xb7\x7e\x15\x7a\xe8\x4c\x99\xee\x78\x08\x60\x54\xdd\x4a\xb7\xeb\x9a\x02\xb2\x43\x9f\x10\x65\x18\x69\x1a\xaf\x49\x99\x84\xf9\x60\xa1\x82\xd0\x56\x21\x18\xe9\xeb\xdd\xf5\x10\x09\x31\x26\xb0\x84\xeb\x10\xd0\xf5\xb9\xf0\x33\x5d\x0b\xe2\x23\x9f\x93\x2e\xab\xcf\x8b\xed\x55\x58\x43\x18\xec\xdd\xaf\x88\x37\xa4\x02\xac\x57\xbd\xd5\xc3\xdb\xba\xc5\x1b\x1e\xdf\x93\x89\x51\x69\x69\x4f\x93\x96\xf6\x84\xb4\xb4\x67\x0e\x0f\xe8\xe4\x57\x20\x1f\x04\xf1\x8b\x6a\xc6\x7d\xe6\xb0\x2c\xd2\x29\x72\xd8\xa2\x09\x21\x54\x42\xdb\x7f\x0e\xda\xaf\x09\x18\x0c\x7a\xb6\x0c\x89\x3a\x4e\xe5\xa0\x0c\x09\xf4\xd5\x15\xb8\xf9\x8a\x66\xf5\xa5\xfe\xbf\xcc\xfb\x17\x7c\x1f\x0f\xfe\x07\x1a\xf5\xa3\x1e\x55\x5c\x18\x90\xb6\x82\x4c\xe9\x3e\x34\x19\x06\x44\x1e\x8b\x69\xb1\x1c\xda\x29\x73\x38\x10\x7c\xd9\x3c\x01\xa5\xe0\xb2\x8e\xa2\xa3\x8e\x0b\xcd\x36\x87\xd3\x5c\x9c\xa7\x4e\x4e\x02\x35\x2a\x95\x4a\x0d\x04\xcf\x4d\xa3\xd4\xb6\x95\x4d\xaf\x2a\x10\x5c\x00\x5f\xcf\x0a\xcd\x22\x02\xbd\xc3\x67\x63\xf1\x73\xb8\x94\x57\xcc\x61\x94\x45\x13\x32\xa8\xa6\xd6\x50\xd7\xcf\x17\x42\xb5\xa7\xd4\x02\x2b\x99\xea\x3c\xd9\x73\x40\xad\x85\x57\x55\x16\x1b\x90\x9e\xeb\x98\x5e\xc6\xcd\xcf\xb8\x39\x1d\x74\xfb\xcd\xc4\x7c\x6b\x52\xbe\x2d\x21\xdf\xe6\xeb\x1b\xce\xde\xd2\x66\xb3\x33\xbf\x82\x3e\x7f\xa8\x7b\x90\x33\x58\xbe\x89\xd1\x7e\x66\xe5\xd9\xb3\x3f\x9d\x07\x64\x1c\xf6\x7c\x1e\x08\x81\x44\xdb\x4c\x01\x34\xf7\xd1\x58\x48\x81\xea\x55\x00\xbd\xc6\x85\x5e\xd9\x8b\x72\xb4\x0a\x8a\x5e\x41\xd1\xba\x3f\x90\x7f\xcd\xb7\xcf\x1f\x9a\x30\x58\x1e\xd0\xa0\x28\x46\xd2\x04\xbd\x93\x99\x96\xcf\xf7\x2d\x9b\x6f\xbf\x7e\x24\x04\x17\x6e\x02\x1a\x9d\x7e\xb4\xb8\xd3\xf2\x85\x61\x35\x27\x95\x8a\x64\x08\x29\x71\x1d\x81\x84\x70\x77\x74\x75\x26\xa0\x13\xe0\x83\x35\x9a\xe4\x6d\x26\x15\x5d\x74\xe6\xc4\xc6\x93\xce\x93\xdd\x2a\x9d\xa7\x3a\x39\x4f\x16\x53\x9a\x42\x5e\x27\x61\x71\x37\x93\x76\xfb\x34\x21\x27\xcf\x5c\x6d\x36\x12\xc4\x98\x01\x10\x6c\x0d\xd3\x95\x44\x5c\x97\x05\x93\x9f\x80\x91\xcd\xdf\x62\x0b\xa5\x5c\x17\x1d\x16\xea\x62\xe3\x42\xf5\x16\x55\xd9\xa2\xea\xb6\x99\x47\xbd\xfb\x08\x84\x5a\xa9\x75\x35\xc7\x55\x99\x9b\x5c\xbd\x4f\x54\xeb\xc5\xd5\x7b\x71\x65\x2f\xe6\x9a\x24\xd7\x16\xb9\xd6\x98\x82\x06\x00\x2f\x26\xbe\x25\xff\x9a\xf4\x5d\x1a\x7d\x25\xb5\xb4\xf5\x80\x60\x8e\xf9\x99\x1d\x0e\x32\xaf\x9e\xb9\x62\x5d\xa9\x25\xe2\xdd\x4e\x3b\x9a\x0a\xbc\x13\xc0\x59\x17\x40\x1d\x9b\xd4\x3b\x85\x9a\xb3\xef\xa8\x3e\xe9\x6a\x2c\xd7\x60\xbd\x62\xfb\x81\xca\x1c\x9e\x79\x50\x6d\xb6\x82\xae\x56\xe2\x71\x90\xad\xc9\x94\x91\xf5\xcc\xc3\x87\xe7\xf1\x15\xe1\x40\xab\x63\x58\x6d\x0c\x54\xc1\xa8\x0f\x6e\x32\xe5\x71\x2b\xa8\x31\xed\xec\xca\x18\x09\x7d\xd9\xf5\xcc\xa3\x41\xf4\xdb\x33\x0f\x5f\xd5\xe5\xe1\x86\xe6\x6a\x5c\x8c\x5a\x1b\xd3\xb0\xb6\x34\x64\xdc\xe4\x17\xfc\x63\xd7\x96\x26\x99\x65\x81\xf5\xe0\x9d\xc2\x67\x1e\xde\x1f\x89\xe0\xf5\xa3\x45\xfc\xe1\x16\x58\xfe\x3c\x72\xfd\x96\x71\xeb\xc3\x12\xa4\xb6\xe3\x67\xd5\x99\xa5\xda\xcc\x52\x6d\x46\xa9\x2a\x34\x4e\xc0\xe7\x0f\x9f\x31\x3c\xab\x5d\x84\x78\x56\x19\xcd\xfe\x3c\x2b\x17\x57\x75\xae\x9e\x2a\x97\x4f\xf5\xb6\x7e\xaa\x1b\xa5\xec\x3c\x29\x00\xf4\xa9\x02\x40\x9f\x26\x00\x54\x80\x44\xa1\x93\x68\xdd\xb8\xa3\x58\xf5\x3c\xff\x49\xa9\x9f\xc2\x1a\x28\x9d\x57\xe6\xaa\x66\xbb\x17\x07\xc8\xc0\xb9\x47\x89\xbb\x0b\xd1\x4c\xda\x2f\xf8\xb7\x0b\xc8\xc0\xd6\x8e\x6b\x4e\xba\x27\x24\xa8\xc3\xfc\x62\x2a\xf2\x57\x66\x75\x2b\x62\x73\xaf\xf9\x8b\xc3\x12\x01\x72\x91\xbf\x3a\x12\x95\x6d\xbb\xaf\xba\xce\x02\x42\x14\x7d\x2d\xeb\x90\x7f\x16\x9c\x75\xe3\x5a\xf3\x1e\x1a\xf7\x9f\x1d\x23\x54\x12\x1f\x20\xa6\xa8\x66\xe5\x0b\x74\xa2\xad\x94\x87\x49\x93\x7e\x2e\x0b\xf5\xe2\xc2\x49\x40\x65\xbe\xea\xd5\x6b\x23\xf8\xae\xad\xfc\x79\xca\x18\x81\x70\x1b\x2e\x54\x65\x47\x28\x0e\xc0\xa4\x9b\x0f\x93\x62\xa9\xb5\x47\x82\x84\x48\x45\x8c\xca\x5e\x05\x02\xad\x34\x30\x05\x0b\xd0\x74\xb5\x25\x9e\x5d\xdb\x57\xd3\x5d\x11\x01\xa7\x46\xba\x24\x3c\x2f\x7a\xd6\x66\x75\xde\xac\xa0\x90\xf6\x16\x79\x19\x0a\x28\x57\x6b\x94\x2d\xce\xdd\xcc\xda\x22\x65\x32\x11\x15\x7e\xdf\xb1\x33\xac\x40\x03\x48\x1b\x72\x10\xbf\x8a\xd7\x56\x8b\xdc\xcc\xad\x2d\x16\xee\x87\x0b\xc2\x36\x50\x6d\xf1\x0c\x90\xe6\x2c\xb0\x87\xa4\x20\x7a\xae\xa3\xef\x0b\x57\x88\x32\x2f\x0c\x88\xbb\x12\x00\xc9\x91\x67\xaa\x5f\x56\x1c\xf1\xda\xf1\x6e\x4c\xcb\x2c\x6a\x2d\xb5\x67\xd4\x63\x41\xc1\x3c\xe5\x7d\x56\x7b\xd2\x08\x64\x5e\x36\xde\x92\x22\x72\x3f\x9b\x0a\x4c\x24\xd4\x92\xf9\x62\x32\x39\xfa\xc1\x64\xb6\xbf\x2c\x61\x5f\x96\xac\x2f\x94\x69\xd6\xc4\x1c\x16\xd4\x11\xd4\xc8\x6a\x58\x07\x99\xca\x96\xa7\xaa\x65\x28\x5a\x46\x44\x87\x73\xfd\x15\x37\x4b\x60\x78\x5d\xdb\x18\xd4\x0e\x9b\x3b\x09\xd5\xe1\x98\x91\xe8\x9a\x8c\x80\xfc\x3b\xb0\xb2\xef\xb5\x79\xf9\x5f\xfb\x52\x0f\x8d\xf1\xda\x29\xef\x54\x20\x57\xf2\x02\xec\x00\x44\x70\x57\xa3\xa7\xa3\x12\x5e\x63\xd5\x2d\x90\xda\xae\x02\x46\x05\x91\xf9\x6e\xb5\x40\xeb\x34\xd7\x28\xde\xd4\x2f\x1d\xce\x9a\xef\x15\xd4\x06\x31\x62\x62\x6a\x71\xfe\x84\xb2\x4a\x3c\x10\x31\xef\xdd\x0b\x94\xb5\x6d\x10\x3f\x37\x42\x2b\xa6\xeb\x69\xe9\xb3\xca\xb0\x32\xd6\xa6\x2b\x09\xb4\x21\xf4\x4d\x34\x8a\x31\x19\xff\x8a\xdd\x59\xab\x1b\x27\x50\x76\x10\x87\xc8\xd8\x87\xaa\x72\x7b\x42\xe1\x02\x37\xa4\x15\x6a\xd6\x94\x60\x3a\x46\x5b\xf6\x00\x93\x8b\xb8\x3a\x9a\x65\x77\x34\xdb\x3f\x11\x28\xc6\x0b\x7b\xe4\x62\xa0\xbc\xb0\x23\xdf\x0c\xc0\xea\xcd\x16\xf9\xd6\x06\xf9\xd6\x58\xde\x12\x1e\x17\x7c\x2a\x5d\xf6\x59\x65\xb9\xd7\xe6\x61\x61\xf3\xd3\x42\x41\xb6\xd7\xa2\x58\xbf\xf3\xeb\x96\xf8\x65\xb3\xd5\xb5\xc1\xf6\x71\x2c\xb9\x56\x98\x7e\x94\xe0\x1a\xaf\x85\x04\x2f\x87\x45\x70\xc4\x89\x58\x42\xb8\xd2\xac\x76\xe5\x8b\xff\xe6\x06\xea\x78\x9f\x2d\x70\x85\x8c\xc3\x6b\x4d\xbe\x30\x14\x9c\x4c\x5b\x18\x90\xf4\x0a\xa0\xac\xa3\x4a\x95\x7f\xb6\xf0\xf3\x83\x79\xb1\x45\x5d\x62\x12\x48\x91\x00\x49\xa3\x13\x20\xa1\xcb\x6a\x45\xdd\x00\xd1\xd1\xf2\x95\xf1\x31\xe2\x0f\x12\xfc\x04\x70\x8c\x6c\x7a\xcc\xd5\x62\x3c\x42\xc7\xad\x03\xc1\x08\x43\xfd\x43\x2f\xff\x6a\xae\xae\x5d\x25\xb4\x0a\xf1\xbd\x73\xa3\x9e\x44\xca\x19\x40\x9b\xaf\x20\xfd\x36\x19\xfe\x16\x0f\xc4\xaa\xdb\xc7\x2d\x16\x4e\xa2\x2d\x16\x88\x45\x7f\xb6\x48\xc1\x28\x06\x2c\x2c\x12\x1c\x5f\x5a\x64\xae\xfb\x4e\x51\xc0\xcf\xa6\x83\x62\x8b\x1e\x0d\xf7\x1e\xc4\xd4\x12\xb1\x63\x28\x65\x7f\xf5\x1e\xcf\xb3\xcd\x3d\x49\x85\x1a\x42\xe2\x0d\x19\x82\x9b\x9d\x96\xf0\x6d\xe7\xb1\xd9\x86\x63\x4b\x14\x5d\xfc\xc4\xb8\x63\xe7\x61\x4a\x30\x2c\x1b\xf1\x5b\xda\x12\x2d\xaa\x1e\xbd\xb4\x94\x19\x86\xaf\xe9\x09\xd1\x23\x04\xca\x58\xb0\x4e\x58\x60\xdd\xb5\x51\xa4\x6e\x8d\x22\x75\xb4\x85\xf4\x52\x06\xa8\xd9\xd6\x49\xf3\xbd\x13\x41\xd9\xed\xf2\xcd\xf2\x43\x53\x0c\x5f\xa8\xb4\xba\xe1\x12\x81\x80\xcd\x4c\xfa\x76\xde\xae\x91\xb9\x6b\x2a\xcb\xfd\xd9\x84\x11\xe3\x5a\xb0\x55\x2d\x47\x31\x95\xb7\x16\x6c\x81\x6b\x9f\xac\x58\xe7\x4d\xcb\x64\xcb\x02\x21\xa6\x75\x3d\x43\x4b\x51\xbd\x34\x7c\xee\xd7\x43\xb7\x98\x04\x33\xaa\xae\xb5\x5e\xbb\xd5\x7a\xed\x1e\x8a\x4d\xc2\x82\x90\x68\xdd\xa6\x24\xa0\x6b\x6c\x53\xca\xc0\xa8\x5f\x46\xb7\x2f\xa3\xf3\xcb\x8f\x7d\xf9\xf1\x2f\x2c\x37\x8e\xfa\x26\xd3\xf7\xe9\x32\x7d\x81\x18\xe1\x37\xc3\xf8\xb6\x30\xbe\x3d\x8c\x6f\x84\x31\x16\xe6\x63\x2c\xae\xab\x53\x09\xbf\x98\x21\xe4\xd0\x0f\x38\xaf\x6b\x63\x33\x15\xb5\xcf\x36\x92\x06\xa0\x7b\x72\x02\x18\x17\x00\xe2\x1a\xc9\x42\x4a\x56\x34\x82\x58\x34\x23\x21\xa5\x54\x18\xa0\xdc\x77\x53\xa9\xbb\x0a\x18\x08\xe5\xee\x02\xc0\x83\x6b\x91\x7f\xb6\x71\x79\x7d\x8f\x2b\x71\xa5\xac\x45\x31\x1e\x2c\x1c\x98\x6a\xf1\xf9\xf3\x1c\x78\x2c\xf8\x1c\x9b\x9d\x86\x31\x6b\x63\x1b\xda\x0f\x54\x0a\x9e\x98\x70\x98\x37\xcd\xb1\xa0\xe1\x90\xc2\x2f\x14\x91\x01\x01\xd6\xef\xc9\x8e\x39\x86\x8c\x58\x23\xab\xe8\x7d\x45\xe4\x2f\x80\xa5\x5f\x02\xa8\x6b\xb6\xe8\x91\x5f\xa4\x8f\x80\x3f\xac\x1b\xc4\xe4\xea\x63\x1c\x16\x04\x58\xca\x61\xd3\xc4\xb0\x3d\xbf\xc1\xd5\xd8\xd0\xc5\xd8\x38\xd2\xe6\x3e\xe4\xaf\xf8\x88\x34\x6e\x3a\x51\x9e\x03\x12\x62\xd8\x5d\x46\xc1\x0a\x77\x94\x88\xab\x7d\x00\x91\x1f\x18\x66\x61\xc1\x41\xc1\x1e\x0d\xce\x35\x02\xc9\x34\x09\xd2\x17\x38\xc0\xbc\xeb\x0b\x68\xcd\x68\x94\x8d\xf5\x41\xdd\x7c\x62\x0e\xe5\xe7\x47\xf1\x2b\x0e\xa3\x80\xbd\x1c\x54\x56\x48\x93\x69\xf8\x42\xca\x4a\xcc\x16\x63\x51\x61\x8d\x02\xd5\x71\x31\xc7\xc2\x43\x8c\xa6\x6b\xaa\xd1\x9e\xa3\x59\xbb\x1b\x2d\x3d\xb0\xb2\x1c\x2d\xd5\x5e\x69\xf2\x83\xf2\x8d\xb6\xf7\x30\x5a\x09\xb6\x89\x36\x5a\x49\x73\xff\x78\x34\xec\x41\x60\xc5\x8e\xf8\x5a\xab\xdf\xfe\xa9\x7e\x9b\x9f\x56\xbf\x91\x0e\x14\xea\xed\xbe\xc7\xe0\xcd\xac\xe7\x68\xa3\x78\x1a\x01\x35\x25\xd2\x6f\x47\x5f\x48\x75\x8b\xb5\x5b\x62\xf4\x32\xc0\xe8\x56\xfa\xdc\x9a\x17\x23\xc3\x67\x7f\x0c\x3d\xef\x1a\x5d\xfb\x46\xb7\xbe\x81\xdd\x16\x15\x00\xfd\x34\x01\xd0\x00\xde\x70\x30\xb0\x0c\x6e\x1c\x88\x61\xef\xab\x9f\x43\xf8\x21\xf0\xde\xe3\x56\x1a\xb8\x11\xc0\xaa\xd7\xd9\x61\xd8\xe4\x30\x64\xf8\xdf\xc2\xe3\x01\x9d\xaf\x0a\x56\x03\x97\xda\xc1\x09\x15\x98\x6d\xbc\x36\x06\x83\x73\x26\x20\x32\x0e\xf4\x9d\xca\x0a\x71\x60\x5b\x60\x16\xb7\xb0\x32\xc8\xb5\x66\x74\xb2\x2d\xac\xad\xe2\xe1\x28\x04\xcb\x6c\x76\x85\x79\x53\xfd\x6c\x9b\x71\xa3\x00\x12\x00\xc6\x37\x18\x4d\x3f\xe4\xb0\x5c\x61\xab\xdb\x88\x7f\xfc\x9a\x24\x01\xe3\x02\x3a\x77\x36\x6d\x23\xf5\x29\xec\x16\x32\x78\x54\x31\x59\x41\x82\x98\x32\xde\x0a\x17\x93\x82\xfe\x89\x3e\x9a\xbd\x9c\xe3\x84\x89\xba\x73\x00\xd5\xb0\x3b\x48\x24\x36\x35\x87\x17\x4f\xce\x96\xef\x9c\xeb\x69\x2e\xcc\x07\x14\xfb\x6c\x21\xbf\x82\xa6\xe5\x35\x95\x29\xff\xa2\x42\x36\xda\x4e\x68\x95\xd4\xbd\x2a\xa5\x2e\x2f\x16\x50\x4d\xbf\x1d\x8f\xba\x49\x63\x01\x4a\x8c\x53\x47\xad\xcd\x4e\x2a\x04\x60\xf8\x13\xc0\x40\x8e\x68\xcf\xac\x1d\x33\xe1\x42\xe8\xb3\x45\x0a\xc4\xd8\xb8\x01\xb5\xe9\xfe\xd3\x16\x8e\x43\x2a\xf1\x70\x51\xbb\x37\x8c\xac\x1c\xd5\x25\x48\x80\xb0\xf7\xe2\x42\xb8\x34\x86\x2d\x20\x94\xb2\xe1\x94\x53\x41\x33\x80\xea\x14\x14\xcd\x8a\x51\x0b\xd2\x2a\x16\x88\x12\x17\xc0\x56\x02\x54\xa6\xe7\xca\xec\x41\x95\x9f\x18\xcd\xf2\x58\xb6\x6f\x28\x76\xdb\x42\x51\x9f\x57\x8e\x6c\x94\xa7\x96\xdc\x29\x5e\xda\x43\xa5\xfc\x10\xe2\x03\x15\x32\x8a\x19\xad\x9d\x0b\xf4\xaf\xb1\x68\x91\x37\x09\x76\xa0\x66\x9a\xf6\x9c\xb6\xd5\x0f\xbb\x1b\xce\x72\xb6\xd0\x72\x50\x66\xca\xb0\xfa\xcd\x38\x90\xdc\x02\x2e\x8c\x98\x83\x12\x2f\xfb\x5e\x12\xff\xf5\x38\x71\x0b\xad\x69\x06\x5a\x1b\x5a\xc0\x6d\xf6\xaf\xae\xed\xd8\xaf\x10\x02\xb2\x20\xbb\xb9\xc9\xba\x27\x02\x28\x59\xec\x6c\x0b\x1f\x56\x72\x97\xfe\x6e\x0d\xab\x7b\xe7\xef\xb3\x4d\xf7\x7b\x83\xe6\x40\x48\x13\x75\x27\x03\xe1\x86\x2b\x71\x3b\xc8\xab\x85\xbc\xd1\x9f\xf9\xbf\x9a\x8e\x51\xfd\x6a\x75\x29\xf1\x60\xdb\x98\x54\x31\xaa\x66\x77\xa7\x0f\x7e\x48\x98\xc0\xa5\x3b\x75\xfd\xa6\xf5\x71\xf3\xff\xd9\x78\x18\x7b\x3c\xc3\xf4\x93\xca\x15\xfb\x85\x5d\x37\x5a\x50\x6a\xc2\x0d\xfb\x17\xef\xaf\x1d\xd2\x36\xa7\x33\xbf\x5b\x01\x52\x11\x8b\xfa\xb2\x12\xbd\xac\xab\x42\x94\x27\xeb\x08\x77\x1b\xb7\x30\x56\x29\xb9\xb1\x59\x5b\x1c\x87\xfa\x19\x68\x89\x63\xb6\xde\xf1\x63\xa1\x90\xc5\xa5\x89\xe2\x1f\x98\x19\x5e\x29\x64\x36\xf9\xef\x2f\x3a\xf8\xfe\x52\x07\xdf\x68\x70\xdf\xa8\xa5\x1f\x4b\xd5\x8f\x4c\x13\x0c\x32\x62\x3d\x4c\xc5\xa9\x9b\xdd\x99\xdb\x62\xba\x6a\xb1\x17\x56\x1b\x24\xf9\xb2\x4f\x29\xa4\x2d\x2c\x0e\x48\x78\xdf\xe2\xf1\xbc\x72\x5a\x76\x41\xdc\xc2\x04\x80\xea\x56\x3a\xd7\xec\xc5\xc3\x9c\x69\x02\x0e\x53\xc4\x0e\x48\x8f\x1c\x9b\x60\x4a\x2e\x04\x28\xd3\x4d\x8c\x36\x2e\x48\xb7\xba\x05\xcf\xfa\x8e\xc7\x31\xf2\xdd\xc3\x47\xfe\x6f\xdf\x99\xd9\x12\x55\x85\xff\x84\x6a\xaf\x35\x05\x64\x36\xb6\x21\x64\xd4\xcf\x8d\x02\x23\x02\xa8\xa1\x69\xcc\x25\x5e\x7b\x4e\x61\xb9\x41\xc8\xb2\x71\x72\xc6\x3f\x49\x8d\xf1\xe2\x87\x44\x52\x09\x65\xf0\x04\x52\x26\x82\x22\xb5\xaa\xa3\xf1\x69\x80\x8c\xfb\x64\x2f\x05\x1d\xf4\xad\xf2\x60\x1d\xf1\xeb\x15\x23\xcd\x14\x7c\x66\x14\x4a\x2d\x99\xc7\xcb\x8d\x55\xcd\x43\xef\x04\x4f\xea\xa3\xb8\xa9\x89\x8a\x13\xf0\x5d\x6f\x9f\x31\xba\xc7\x72\x81\x1c\x4c\x02\x9e\xde\x88\x79\x9a\x08\xe8\x2d\xfa\x2b\x40\x81\x26\x8b\x19\x58\xfa\xa7\x95\xdb\x9d\xe4\xf7\x15\x92\xf4\x01\x2e\x05\x6a\xa8\x40\xe6\x09\xe9\xc1\xe4\x38\x4f\xa8\xf6\x2e\xc6\x61\x8b\x55\x8b\x72\xc6\xeb\xd7\xed\x80\xcb\x2f\x44\xa7\x47\x5c\x27\xb4\x9c\x98\xf0\x26\x83\xb7\x00\x27\x49\x4f\xf6\xb2\x1f\x90\x02\x61\x00\xf5\xb9\x07\xb1\xc6\x7b\x56\xca\xb8\x9c\x50\x5d\x70\xae\x8c\xb5\x69\x2c\xba\xba\x00\xd2\x77\xfa\x82\x3f\xc5\x47\x00\x67\x48\x62\xc5\x93\x7f\x0d\xc0\x64\x0b\x08\x54\x1e\x25\x42\x10\xa5\xb5\x98\x66\x32\x48\x04\xa7\xa0\x19\x6e\x47\x40\xd5\x36\xee\x0a\x11\xa8\x87\x03\x1b\x60\x1b\x1e\x38\x6a\xf9\xfa\x7b\x24\x85\x6e\x27\x23\xa2\x3e\x50\x62\x63\x6f\x36\x9a\x34\x1b\x46\xda\xc1\xc3\x99\x2d\x36\xa8\x22\x67\x74\xb5\x08\x13\xa4\x31\xca\x12\x8d\x61\x0a\x62\xf7\xe9\x7e\x18\xad\x18\xc1\x6b\x8b\xe8\xa6\xea\xd0\xe1\xed\xbb\xbd\x67\x13\x6a\x34\x0d\xc0\xf8\xf9\x2d\x5e\x9a\x91\x2b\x38\xda\x7b\xb4\x72\xb8\xcc\xf2\x7b\xc3\xf5\x87\x2d\x7e\xba\x0e\x36\x02\xc4\xcd\x1e\xa4\x07\xed\x7a\x57\x19\x80\x9c\x93\x22\xfb\x2a\x3d\x6b\xaf\xfe\xb1\xce\x8f\xb6\xad\x42\x04\x67\x03\x47\x59\x5b\x7a\x3c\x24\xd2\xf4\x78\xa0\x68\xd2\x0a\xf5\xca\x34\x9b\x9a\x12\x44\x5a\x65\x92\x92\x7f\xf4\xdb\xf4\xc4\x84\x64\x5a\xa3\xb6\x24\xcc\x50\x94\xf9\x9b\xa8\xff\x15\x56\x1f\x58\x72\x90\x36\xe5\xf5\x08\x10\xe0\x06\xb6\x2d\xe9\x91\xa2\x00\x84\x78\x2c\x2d\x2c\x5f\x02\x32\x98\xaa\x74\x1c\xe4\x95\xd2\x21\x3c\x9b\xde\x09\x13\x93\xf5\x06\x4d\xce\x10\xcc\xb2\xf1\xba\xd7\x96\xea\x22\x2b\xd1\x2d\x9d\x3d\x82\xa5\x48\x67\xff\x58\x8a\xce\xfe\x61\xbe\x4f\x55\x13\xb2\x25\x68\x2a\x66\x2e\xda\x6a\xb3\x61\x6a\x5a\x3e\x0d\xa9\x6c\x55\xd6\xc0\x9b\xe9\xb9\xda\xf4\x06\x53\x03\xc2\xcd\x41\x00\xdd\x53\x01\x46\x79\xe6\xb0\x04\xfc\xc3\x01\xae\xc5\xc1\xc4\xa9\x3b\x90\xf5\x95\x89\xe9\x06\x9f\x57\x4d\x4d\x0e\x6b\xd2\x48\xd6\x64\x6f\x18\x41\x54\x4d\xc4\x4a\xfe\x3f\x87\xf4\x95\x90\x80\x84\x7b\x94\x0a\xba\x5a\x7d\x60\xbc\x18\xf7\x51\x2d\x8d\x7a\x19\x5a\x91\x5b\xb2\x50\x26\xdb\x2a\x68\x68\x7c\x82\xd4\xa1\x35\xf4\x1c\x2c\x4a\x8f\x11\x57\x0a\x36\xbc\x98\xdf\xb2\xb1\x8c\xd9\x79\x46\x41\xe6\x57\xf5\x55\x01\xc1\xf5\x58\x66\x69\x8e\xc5\x6e\xba\x92\x28\x1c\xe4\x80\x69\xf9\x83\xf4\x9b\xc6\x35\x41\x3a\x7e\xe4\xf8\x40\x59\xc5\x87\x25\x33\xe2\x2c\x54\x4c\x2d\xb3\x18\x2f\x26\x0c\x00\x09\x8b\x68\x7b\x39\x4a\xea\x8d\xe3\xcf\x91\x9c\x0f\x57\x34\x39\x3d\xf0\xf7\x80\x4f\x31\xe1\x31\xad\x2b\xda\xe7\x94\xec\xb6\x65\xec\xfa\x6e\x39\xf1\x52\xc1\x96\x2b\x53\x54\x1f\xac\xd2\xfa\xb0\x5a\xae\x0f\x46\x50\x1f\xb5\x93\xd6\xe2\x16\xe0\x6c\x4c\xae\xcb\x4e\x39\xb9\x0e\x19\x0e\x64\x68\x1a\x32\x9f\xf5\x60\x6e\x6b\x25\x2b\x45\x80\xb4\xd6\x6a\xa5\x55\xeb\x81\x84\xb9\x74\x26\x60\x8d\xad\xf7\xa0\xed\x4d\xa0\x37\xbe\xda\x4d\x0a\x9f\x62\x43\x1a\x0d\x2a\xd9\xc1\xa5\xc8\xdd\x5b\xcc\xbd\xdf\x27\x58\xd0\xb3\x17\x08\x75\xee\xa1\x7d\x0a\x44\x54\x6d\xbc\xdc\x62\x62\x18\x4d\x06\xe3\x4d\x00\x23\x60\xa5\x44\x05\x62\xeb\x5e\x8e\xe9\xf1\x65\xad\xc1\xd4\x42\x6e\x7a\x3b\x60\x83\xb0\x77\x78\x19\x0b\xd7\x40\x79\x2c\xb6\x96\x16\x58\xe2\x9d\xea\x13\x60\xea\x52\xe8\xb6\xd0\xf1\xb4\xe5\x61\xb1\x8c\x28\x19\x18\x2c\xa4\xa1\x25\x33\x0e\xfc\xd9\x1c\x9a\x6d\x3b\x52\xd0\x41\x97\xc7\x61\x4e\x4f\xf5\xab\xfb\xbc\x40\x08\xf3\x62\x19\x8d\x4b\xd7\xc1\x79\x18\x87\x9e\xc7\x75\x55\x85\x9f\x25\x68\x5d\x7d\x96\x09\x9a\x82\xb9\xea\x57\xe2\x06\xf5\xaa\x3a\xc8\xec\x60\xda\xb1\x60\xa6\x6f\x2b\x86\xcf\x2c\x86\xcf\x57\x3d\x29\x48\x48\xf1\x9b\x90\x0c\x88\x98\x7e\x87\x6d\x53\x79\x53\x30\xa7\x6d\x91\x95\xc9\x4a\x13\x05\x51\x4c\x63\x16\xd0\x47\x8c\x4b\x5d\x5e\x14\xe6\x24\x88\xc5\x59\xf4\xe1\x93\x02\x7a\xba\x2e\x78\xe2\xc5\x83\xad\xc4\xd4\x51\xa7\x00\xe8\x8f\xca\x37\x8b\x21\x53\x42\x71\x81\xb9\x13\x4a\xc1\x0b\xc1\xe8\x94\x8f\x2c\xf5\xaa\x8f\x84\xab\xf8\x5b\xd5\x27\x8b\x5b\x0d\x99\x2d\xaf\x86\x2b\x4a\x46\x6a\xc0\xbd\x4c\x31\xd5\xc5\x83\xfb\x1d\xf5\x51\x65\xce\xa9\x6b\xc7\x28\x58\x85\x57\x40\x0b\xad\x89\x82\xce\xb6\x9a\xd7\x58\xc4\x48\xa1\xa1\xa8\x6b\x09\x68\x84\x62\x26\x03\xce\xa7\xd5\x02\xf9\x4e\xb0\xde\x34\xae\x82\x45\x49\x2d\x6a\x9d\xd6\x09\x16\x35\x99\x98\xe2\xb2\xb9\x6e\x98\x6e\xeb\x52\x97\x3b\xa4\x1b\x40\xf5\xeb\x3b\x4e\x02\xab\xc5\x61\xea\xdb\x0c\xaa\x03\x53\xe3\xe6\x58\xed\xaf\x3d\x6a\x2c\x9f\x35\x1a\x60\x50\x75\xc5\x1f\xcb\xb1\xf2\x18\x50\x81\xd4\xb1\x20\x29\xc9\x1a\xf1\xff\xd4\xcf\x4f\xfb\xfa\x84\xb5\xda\x9a\xa5\x6e\x0f\x03\x95\xb8\x7c\xa1\xae\x2a\xf4\xd4\x9f\x0c\xad\xc7\x6f\xea\x62\x13\x2c\x36\x4d\x98\x02\xf0\x4f\x7e\x2b\x04\x48\x2d\x58\x67\x6d\xe3\x62\xbe\x72\xb6\xac\x3a\x59\x56\x5c\xa7\xd7\x28\xf1\x78\x44\x86\x33\xa2\x62\x76\x2c\x4e\x63\x79\x6b\x63\xac\xf2\xd7\x7b\x92\x41\xa0\x8e\x66\xed\x8c\x97\xda\x68\x22\x82\xa1\xed\x6c\x5c\x57\x80\x21\xee\x5f\xb1\xe9\x44\x09\x08\xdd\xa1\x84\x7a\x9c\xb1\xd5\xef\x00\xb6\x4a\x4c\xf9\x46\xfe\xa9\x85\x07\x05\x65\x6e\x2d\xf0\x72\x11\x00\x13\xd6\x6c\xa3\x5f\x50\x52\x47\x9c\x4e\x9a\x3e\xf5\x05\x30\x7e\xbb\x09\xa3\xf3\x81\x39\x94\xf6\xf7\xc2\x24\x50\x62\xfa\x26\x0f\x26\xf2\x46\x20\x99\x73\x25\xb2\x40\x08\x8a\xb7\xc9\x13\xc3\x3b\x12\x1f\xd1\x13\xda\x21\x0a\x45\xf4\x36\xf3\x48\x71\xbd\xea\xc1\x94\xcf\xdc\x30\xbf\x94\x95\xff\x7e\xcf\x09\x54\x32\xa5\x21\xa4\x30\x7f\x2b\xaa\x44\x47\xbd\xbb\x3f\x43\xd3\xf2\x95\xc5\x93\x4d\xed\x82\x2f\x2f\x3a\xe5\x72\x00\x50\xf3\x82\x66\xd2\x8b\xc9\xaa\x06\x3e\xf7\x4f\x53\x7c\x59\x09\xf3\xfc\x5e\x01\x17\x2c\xc0\x1e\xee\xc8\xfe\xd2\x48\x49\x4a\xa3\x54\xc2\x38\x18\x52\xcc\xd2\xe9\xc9\x3b\x23\xf2\x72\x6a\x12\xce\xdd\x82\x9d\xab\xd9\x89\x99\xd3\x73\x57\x69\x59\xc4\xb3\x88\xcf\xdd\xf6\x24\x5a\x38\xb5\x6e\x4f\xab\xda\xf3\xaa\x9e\xe4\x13\x71\xf6\xd3\xb2\xd8\xb9\x2f\x2f\xc0\xaa\x51\x39\x90\xe6\x6c\x66\x73\x36\xb3\x39\x9b\xd9\xc8\x66\x36\x7d\x98\x0b\x60\x6e\x66\x0d\xf8\x8d\x24\xe2\x8f\xc6\x65\x17\x8e\x00\x79\x04\x41\xc4\x65\x60\x0b\x2f\x0f\xeb\xe5\x61\x09\x62\xcf\x79\xe1\x31\x00\x00\x93\xf7\x62\xe5\xbe\x4c\xc9\x36\xf0\x75\xeb\x1e\x2f\x7b\xac\xbf\xb5\x00\x9f\x9f\x47\x0c\x6d\x65\x67\xb0\x0e\xf9\xa3\x23\x4e\xa3\xb2\x45\xc4\x2f\x50\x57\xc3\x4d\x75\x2f\x2a\x40\xcc\xd0\x9d\x28\x06\x89\x6b\xa9\xda\xd3\x62\xb8\xcc\x85\x3f\xa0\x17\xe2\x45\x33\xae\x1a\x52\x5c\x2d\xa4\xb8\x5a\x94\x51\xd7\x22\x82\x10\x7a\x2c\x4c\x61\xc4\xfd\xbd\x2f\x45\xdf\x96\x01\x5e\x9b\x37\xdf\x5b\x50\xc6\xb3\xc5\xb4\x21\x14\x99\xcb\xa2\x76\xe4\x68\x77\xad\xb6\x16\xbf\x2d\x1a\x44\xa2\xa5\x90\xe2\x53\x43\x4a\xf1\xc5\x70\xd2\x13\xcf\x8c\xb0\xfe\x23\xa1\x4e\x73\x0e\x34\x90\x8c\x74\xe0\x8f\x19\x4b\xca\x23\xb7\x44\xfe\x0b\xa6\x5a\x48\x74\xf6\x9e\x69\x6b\xe9\xd4\x06\x94\xd8\x1f\x92\x36\xdf\x64\xcd\x37\x59\xc3\x4c\xe7\x19\xe8\xd0\xfb\x50\x3a\xdd\xf5\x74\x7e\x6a\xb8\x27\x83\xc3\xbf\x6e\xf0\x0b\xe0\x33\x0e\x81\x59\xfd\xf6\x6c\x7e\x7b\xa6\xeb\xcb\x3f\x5d\xf3\xdb\xc5\x8f\x97\x25\x47\x59\x21\x02\xba\x01\x2b\x84\xcb\x26\x2c\x12\xbd\x8a\x62\xa8\x4f\x74\x29\x14\xf7\x7a\xe5\x64\xf3\x2b\x27\x1b\xaf\x9c\x6c\xad\x2a\xcb\xd4\xaa\x33\xdc\x84\xcc\x7e\xad\x2f\xf5\x28\x80\x1e\xeb\x0b\x1e\xb5\x5b\xd7\x3e\x47\xfd\x6a\xdb\x0a\x4d\x78\x79\xb5\x92\xa1\xe1\x4b\xed\xe0\x71\x2c\xbb\x86\x09\xc4\x40\xc7\xb2\xf3\xa3\x57\x9b\x40\x4b\xd0\xf0\xee\x52\xed\x50\x58\xe0\x65\xe1\x5c\x1e\x0c\xa3\x60\x27\xb8\xe5\xe8\xdb\x02\xfd\xd6\x54\x7f\x97\x3f\x5b\x1b\x7c\xfe\xa4\x00\x21\x0c\x1c\xce\xb6\xf1\xe8\x97\x34\x7b\x81\xf6\x26\x05\x90\xde\x07\xef\x6d\x01\x38\xd2\xc6\x3e\x9e\x4f\xfe\x6b\xd0\x7a\xcd\x9e\x08\x45\x8d\xfb\xf6\x5b\x93\x25\x45\x1b\xc7\x23\x93\x60\x2b\xb6\x55\x44\x1b\xdc\xcf\xb7\x5b\x23\x9b\xdf\x1a\xd9\x78\x59\x64\x6b\x43\xf7\x78\xdb\xe8\x7b\x8a\x7f\xb6\x11\xf4\x22\x30\x91\x8c\x79\x43\x7b\xf0\x80\xe8\x79\x9d\x7f\x85\xb8\x21\x14\xe6\x78\x08\x97\xa1\x1b\x68\x24\x6c\x6a\x1e\xab\x7c\x8f\x6d\xad\xe6\xdf\x24\x42\x09\xd2\xb6\x3a\x92\x45\x9d\xd6\xf8\xa8\x15\x37\xeb\x9c\xf8\x10\xae\x34\xcc\x47\x66\xb7\x14\xe0\x56\xac\x51\x02\xc9\xab\xa0\xf9\x11\xe1\x5c\xaa\x76\x77\xd3\xc4\x66\x69\xf4\x43\x55\x95\x09\x10\x57\xfa\x0e\x53\x40\x32\x60\x0e\xa4\xf0\xec\x00\x67\xe8\x96\x24\x54\x7e\x6f\xe3\xb0\xf9\x54\xaa\x61\x85\xc1\x04\xd9\xe9\xc6\x38\x0e\xfb\x0e\xf7\x53\x9e\xa5\x12\xf8\x68\x36\xdc\xed\x1a\xe5\xac\xdf\xdc\x73\x18\x7c\x76\x44\x13\xe1\xf5\x1d\xd6\xca\x10\x0c\xdf\xd6\x04\xaa\xf4\xa3\x85\xd2\xad\x4c\xbc\xd0\xfb\x55\x59\xce\x1d\x45\x63\xd6\xba\x4a\x19\x17\x67\x13\x98\xf0\x78\x75\x38\xbb\xb0\x07\x81\x17\x14\xe6\xf2\x8a\xad\x97\x74\x32\xb4\xeb\xd2\x53\x9b\x71\xe9\x6e\xa9\x02\x5c\xee\x24\x51\x4b\xe8\xf2\xe5\x73\x94\x50\x2e\x28\x9b\x02\x86\x62\x01\x22\xf0\x03\x9f\xa3\x50\x3d\x92\x3a\xf0\x63\x6e\xe0\xcf\xc4\x6d\xe7\x26\xb2\xe0\x7e\xea\x0e\xb6\x13\x16\x14\x08\xf7\x63\xa2\xf9\xb6\x4f\x09\x11\x8b\x1a\x00\x53\x00\xa9\x94\x4c\xdd\x44\xca\xf3\xdc\x08\x44\x02\xd2\x75\x66\x09\x0d\x35\x55\xb6\xff\x7f\xa7\xef\x0e\x0c\x0a\xd3\x68\x04\x75\x81\x6f\x9f\x62\xc9\xf9\x95\x1a\x4f\xcc\x3d\x2d\xbf\x93\xf2\x4f\x4a\xe2\x62\xb2\x11\xa5\xac\x1e\x90\xe5\x2b\x68\x4d\x35\x2a\xbf\xfe\xc1\xaa\xf6\x4e\xda\x52\xee\x63\xdb\xab\x02\xf8\xf1\xec\xce\xc9\x7e\xe6\x9e\xeb\xc7\xf6\x5c\x3f\xbe\xe7\xfa\x41\xbd\x7f\x5c\xc1\x1b\x20\xda\xe3\xa7\xe9\x11\xcb\xe7\x26\xc9\x40\x08\xec\xbf\x7e\xe6\x21\xec\x07\x92\xe6\x61\x5c\xe1\x91\xb4\xf5\x7c\x5c\x57\xe3\x1e\x1e\x7a\x7f\x75\x97\xcf\x91\x86\x49\xf4\xbb\x11\xed\x73\xa3\xe2\x0a\x82\x1d\x86\x48\x93\x08\xc2\x3e\x0f\xb3\x18\x6b\xe2\xc7\x05\xf7\x6e\xc5\xcc\x1f\x18\x05\xf7\x32\x77\xac\xc7\xf7\x10\x25\x41\xf1\x08\x1b\x37\x65\xd8\x0d\x69\x83\x5b\x31\x80\x99\xc6\xe5\x20\x2d\x06\x26\xac\x4b\xfb\xb8\x03\x6b\xef\x4a\xa5\x75\xa2\x54\x0c\xb3\x2d\xdc\x89\xe9\xff\x94\xe5\x6e\xea\x77\xf2\x16\x95\x9d\xf5\x28\xf9\x86\x50\x71\x25\x7e\xea\xfc\x00\x9d\x13\x3b\xb7\x95\xc4\x90\x55\x84\x2f\x2c\x60\x61\x67\x6e\x20\xb6\x5c\x1f\xbf\xb0\xe7\xc1\x72\x50\xf3\xc7\x52\xa5\x1b\x4c\x80\x2a\x04\x1b\xb8\x35\x2a\x73\x37\x82\xcd\x06\x94\xb7\x80\x78\xa8\x94\xcc\x3d\x6c\xb8\x5b\xbd\x87\x6d\x83\x80\x22\x03\xf0\x02\xa8\x69\xdd\xb6\xd0\x56\x98\xd2\x64\x25\x0a\xdf\x7a\xba\x13\xf4\x87\x17\x4b\x8d\x89\xdf\x92\x17\xf4\x96\x6e\xc5\xbc\x25\x6b\xb2\x7b\xe0\xa6\xcb\x1e\xb6\xc6\x47\x3b\x7b\x48\xb9\x5f\xb8\x63\xb4\x87\xe4\x42\x67\x76\xdd\xbc\xdf\x6d\xef\x5e\x00\x46\x5f\x00\x86\x91\xd0\x6e\xf3\xf2\xa9\x12\x0e\x5a\x6b\xa6\xdb\xfc\x34\x8e\x1d\xb8\x8e\x86\x26\x99\x9f\x67\x58\x68\x99\x78\x3b\x75\x87\x3c\x2a\x5a\xe5\xc1\xe4\x66\xec\x7a\xce\x46\xef\x34\xda\xab\x51\x95\x91\x83\xd2\x4d\x42\x68\xea\xe3\x0e\xb9\x41\x46\x61\x36\x9a\xee\xec\x87\x98\x7b\xc8\x36\x47\x08\x64\xff\xd1\x09\x79\x0f\x07\x2e\x37\xad\xba\x25\xba\x53\xfd\xc0\x1e\x0e\xd3\x19\x45\x88\xc4\x0b\x50\x51\x3c\x24\x2c\x88\xc3\x83\xe7\x4c\x4b\x13\x85\x74\x1c\x75\xf9\xf2\x8f\x92\x9b\x43\x07\x8b\x83\x27\xeb\x00\x8c\xba\xac\x7c\x3d\x27\x68\x69\xe1\xc9\xa2\x2d\xab\x1a\x69\x09\xe7\x69\x18\xb1\x94\x55\x63\x11\x1e\x53\x53\x2b\x50\xd3\xa5\x9c\xe7\x6e\x07\x2b\x00\xb5\x1e\x1a\xc6\x11\x56\xda\xf5\xf8\x5d\x08\x84\xf7\x33\xc0\x76\x49\xdc\x1c\x69\x74\xdf\x7c\x4f\x44\xf8\x8a\xf4\xfe\xdd\x78\x07\x9b\x98\x1a\xb1\x04\x4b\xae\xcb\x66\xe9\xdb\xd6\x2a\x15\x70\x6a\xda\xce\xac\x83\xce\xa9\x35\x78\x66\x6f\xe0\x5c\xb5\xec\xf6\x40\x7d\xc7\xfb\xf4\x3d\x9c\xea\xe1\xd2\xa6\xdf\x42\xd9\x06\xd8\x30\xc1\xca\xd6\x11\x22\x8d\xed\x51\xad\xaa\x04\xb2\xb0\xdb\xc3\x5e\xab\x2a\x56\x6b\xaf\x83\xb6\x2e\xf5\xa5\x35\xef\x97\xb4\x08\xd5\xce\xdb\x02\xa0\xf6\x84\xa6\x75\xd3\xac\x6e\xda\xda\x97\x16\x1e\xe6\x5b\x32\xd0\xe2\xec\x82\x2d\x6a\xdd\x08\xd0\xfa\x6d\x99\x9a\x66\x30\xaf\xed\xa1\x1d\x9a\xb7\xc3\xd2\xcb\x0d\x60\x05\x9a\x70\x68\x38\xb0\x44\xba\xee\x03\xc5\x3f\xf3\x03\x2f\x14\xed\x01\x9b\x70\x16\x20\xb0\xa6\xc3\x6a\xa6\x9d\x6e\x53\x6b\x71\xfc\x31\x84\xf6\xd1\x46\x3f\xad\x1a\x5e\xc6\x48\xef\xa1\x7f\xc9\xdf\xc5\x06\xde\x2f\xad\x9c\x7e\x59\xd3\x24\x37\x48\x13\xa5\x24\xbc\xdf\x1e\x6c\x3e\xbc\x96\x7d\xa2\xb8\x7c\x29\xb8\x9e\x3a\xb2\x80\xd0\x74\x5c\xd6\xf2\x2d\x16\x4b\x83\x39\x18\xfa\xfc\xdc\x10\xe2\x1b\x78\x73\xbe\x9b\x64\x02\x02\xf5\x38\x74\x7e\x1e\x45\x07\x8b\x41\x3d\x0c\x10\x7d\xad\x02\x25\x80\xb9\xb6\xd8\xc3\x4b\xef\xed\xed\xe1\xfb\x8b\xdd\xe6\xdb\xfa\xfc\xf7\x57\xa9\x6c\x85\xdf\xd7\x5e\x5b\x91\x38\x3f\x51\xfe\x7f\x6c\xa1\x43\xa8\x01\x08\x64\x85\xfe\x58\x59\xfd\x60\x1b\x67\x0f\x3f\xcc\xc4\x8f\xe6\xe0\xe7\xf3\x47\x1a\x60\x90\x25\xa7\xb5\xc4\x18\x56\x4a\x0c\x11\x04\xe7\x30\xd5\x82\xe1\x45\x3d\x21\x10\x70\x48\x95\x60\xd8\x16\xa2\xaa\x3b\xdc\x48\xdb\x00\xf1\x8e\x41\x00\x9c\x70\x39\x22\x20\xf1\x7b\xa6\x24\x43\x22\x8d\xcf\xe4\xbc\x10\x5a\x00\x90\xf9\xb2\xc7\x70\xaa\xcf\x13\x54\xb3\x00\x9b\xed\xcc\x08\xd6\xb5\x31\xfa\x54\xa0\x2c\x27\xe0\x07\x1e\x3b\x4d\xaa\x7e\xc9\x60\x63\x3d\x4f\xcc\x67\xcc\x17\xd1\xee\xa1\x5d\x9a\xae\x06\x05\xb8\x06\xd4\xd9\x74\xd5\x22\xdf\x37\x81\xc0\xf6\x91\xa3\x58\xe6\x07\x8c\x90\x44\x4d\xd1\x77\x68\x87\x3b\x40\xb6\x2e\xcb\x96\x26\xec\xd2\x42\xba\x76\x6e\x51\xed\x2e\xed\x6d\x37\x69\x6d\x00\x9a\xd2\x59\x80\x33\x1b\xd7\x6e\x65\xa2\x05\xe9\x49\xbf\xec\x83\xee\x13\x00\x95\x3b\xfc\x28\xb0\xba\x78\x69\x3c\x2f\x2d\x90\x97\x45\xf7\xa2\xcb\x4f\x8f\x42\x3e\xd6\x7a\x90\xad\x8c\x8f\x78\xee\x54\xe6\x2f\x98\xdd\x9a\x00\xf3\xb5\x40\xfb\x66\x6f\x27\xf7\xb8\xc8\xf0\xcf\x43\x38\x31\x26\x7f\x13\xd7\x2d\xee\xd8\xb9\xd9\x5d\x54\xc6\xae\x92\x32\x76\x13\x94\xb1\x43\x4e\xc6\x1e\x57\x0e\x75\x30\x39\xa2\xc5\xb8\xb2\x3c\xa3\xb5\x68\x5c\x08\x14\x43\xe9\xa7\xd6\xf9\xd3\x6a\xfa\x89\x7a\xd9\x54\x39\x8c\x23\xe4\x2d\x6d\x52\x21\xe9\x60\xc5\x58\xe2\x8d\x11\x8a\xbc\x42\x47\x10\x43\x21\x28\xd7\x6e\x0c\x83\x90\x9a\xae\x9c\xcc\x25\x46\x29\x31\x31\xa5\x29\xd0\x6f\x7e\xcf\x8c\xc4\xde\x38\x1e\x0b\x31\x4b\x28\xff\xe2\x00\x63\xbe\x71\x80\x20\xb8\x21\x4f\x45\x6e\x71\x86\xe6\xa7\x65\xa0\x8c\x1f\x04\x56\x5e\x55\xb0\x5e\xb8\x22\x6e\xd3\x0d\x77\xc6\xf7\x98\xf3\x23\xca\x70\x17\x73\x66\xa1\xe4\x83\xf9\x39\xe2\xe5\x40\x5b\x5d\x3e\x52\xb1\xb4\x00\x6a\x8e\x89\x75\x22\xff\x45\x32\x75\x87\x15\xef\xa9\x7d\x25\x9f\xac\xd4\xac\xd3\xcf\xff\x2d\x62\xe6\x1a\x86\x4b\x18\x5b\xc1\x88\x69\xeb\x07\x5b\xcc\xcc\xb5\xcc\x7d\x29\xf3\x6b\x25\xe3\x0b\x99\xfb\xda\xe5\xf7\xd2\xe5\xf7\x52\xe5\xf7\x4a\xe5\xbe\x50\xb9\xad\x53\x6e\xcb\x14\x81\x83\x35\x73\x40\x5b\x3b\xbf\xc7\x26\xac\x29\xad\xed\xbf\x85\x62\x90\x5a\x2c\x05\xde\xfc\x24\x55\x43\x04\xf8\x59\x9b\x8e\x2b\x47\xfa\x0a\xed\x53\x35\x75\xe9\x88\x57\x78\xf0\xc1\x1f\x48\x5d\xf9\x43\x1b\x91\x45\x78\x86\x66\xb9\x49\x67\x8e\x9b\xc1\xba\xa2\x69\x1f\xe9\x54\x09\x61\x50\x56\x44\x55\x02\x77\xac\x89\x00\x65\x4d\x9a\x5a\x8d\x76\xc5\xde\xa0\x8e\xf4\xf3\xd9\x34\xa8\xaa\x1a\x9c\x2c\xad\xbf\x17\x6e\xf7\x75\xdb\x6d\xd9\xf6\x7b\xd5\xe6\x94\x95\xa9\x56\x9e\xad\xdb\x6e\xcb\x36\x83\xe6\xc2\x97\x70\xbf\x56\x70\xb2\x80\x4b\x6b\x6c\x9e\x26\xef\x22\xbe\x9a\x13\xa4\x97\x16\xf7\x78\x9c\x98\x6d\x0e\xe5\x8a\xe2\x81\x29\xac\xac\x71\x09\x1b\x17\x31\x24\xbc\xae\x40\xb9\x6e\xe1\x5d\xaf\xf7\xec\xb1\xe8\x1c\x80\x93\x66\x1b\xd3\x6a\xbb\x37\xbc\x53\x7e\x90\x58\x8b\x2c\x9c\x9a\xb0\x53\x4a\x50\x93\x76\x5e\x1e\xed\x79\xcd\x48\x15\x5b\x38\x57\xb8\xb5\x97\xf3\x0a\x87\xd5\x2e\xf0\x75\x73\xa7\x9a\x14\x81\x9b\xd6\x26\xa1\x45\x07\x68\xf6\x54\xd7\x44\x38\xb3\x78\x5e\x41\xb5\x14\xee\xd2\xce\xb1\x02\x8e\xed\xe1\x63\x65\x7b\x40\x74\x07\x40\xa6\x41\x16\x2a\xb6\x87\xde\xc9\x04\xc4\xe8\xdd\x1e\x3a\x7a\xb7\x87\x9d\x46\x0a\xd6\xe1\xa1\x3d\xb4\x38\xdb\x43\xea\xa1\x2d\x23\x73\x78\x6e\xd1\x84\xaa\x1b\xc6\xf4\xda\xf4\x5d\x89\x34\x63\xff\x7c\xe8\x90\xde\x8e\x70\x42\x93\x3c\xcb\xb9\x1d\xb1\xc4\xe1\xd8\x40\xba\x03\x06\x25\x10\x95\x29\xc8\x12\x54\x34\x4b\x25\x69\xc1\x37\x0e\x08\xad\x9a\x8b\xd3\xc2\x3c\xe3\x1c\x7b\x26\x41\xef\xe0\x89\xe8\xa1\x53\x41\x08\x81\x0e\x87\x1d\x6a\xcc\x39\x15\x13\x6b\x21\x5f\x41\x7b\x2d\x80\xb6\xaf\x2b\x24\xb5\x8c\xad\xaa\xb1\xc4\xc6\xa8\x40\xb8\x8e\xb5\x1b\x1d\xef\x84\x86\x0e\xf2\xda\x6b\xb9\xd1\x39\x5d\xee\xd4\x46\xb0\x0b\x7a\x1c\x97\xeb\x93\x7f\x11\xd3\xd7\x5a\x91\x25\xc2\xb7\x22\xdd\x00\x24\xf1\x4b\xd0\x29\xad\xf4\x85\x80\x12\xb1\xc4\xdf\xd4\x4c\xbf\x8f\xf3\x20\xee\xa9\x9d\xb3\xec\x8d\xf2\x72\xd0\xdd\x5c\x12\x39\x2e\x50\xb6\x6a\x64\xdd\x6e\xdf\x3e\x33\x32\xef\x56\x20\x7c\xe0\x15\xaa\xdc\x0b\x4e\x35\xa2\x92\x90\x31\xca\xa1\x32\x26\x4a\xb4\x1b\xa1\xaf\x9e\x94\xf4\x31\x13\x54\x65\x97\x05\xbe\xee\x69\xb0\x3d\x65\xa5\xae\x0f\x39\x24\x21\x7c\xf6\x07\x11\x67\x65\x49\x46\x6f\x94\x0e\xe3\xc0\x2d\x2d\xfb\x0c\x6e\x8e\x89\xa0\x3e\xd3\xa1\x29\xbd\x9e\x14\x3c\x0d\x6f\x86\xdf\xda\xf3\xde\x81\xbb\xc0\x82\x56\x35\xe3\xa1\xed\xf6\xed\x23\xdb\x3b\xe0\xba\x04\x47\xc1\xf7\x1c\xe5\x04\x4e\xd7\xb7\x21\x8e\xc4\xcd\xbe\xbe\x3f\xc0\x54\x67\xad\x88\xa9\x7a\x63\x04\x74\xdb\xcb\xbc\xdd\xc6\xc5\xf7\x1c\x16\xdf\xe1\x94\x95\xc3\xc5\xd4\x9f\x6e\x99\x83\xf9\x3b\xeb\x3a\x91\x45\x81\xa9\x51\xad\x6f\x03\xe5\x7b\x8e\x93\xca\x44\xa4\x07\xa5\x42\xec\x7a\x06\xb5\xe3\xd4\x09\x5b\x11\x76\xda\xb4\x5b\x17\x4f\xeb\xd4\xe0\x09\x82\x20\xe6\x00\xe7\xe4\x8f\x52\x6c\x36\x90\x2b\x64\xa6\x52\xe4\x4e\xbe\x00\xdb\xd5\xbf\x61\x75\x52\xd7\x91\xed\x83\xdd\x9b\x23\xe1\xea\xa6\x7f\x93\xe6\x4f\x47\xb3\x74\x7b\x0e\x05\xe2\xdc\x79\x47\x5b\x88\xd1\xec\xc3\x33\x80\xc5\xfb\xb3\x83\x0b\x4f\xdb\xce\xed\x53\x01\x58\x1e\xa5\x6d\xbf\x3b\x51\xa1\x56\x02\x6d\x63\x0c\xe2\x4e\x59\x2a\x19\x87\xc8\x34\x65\xe2\x48\x39\x57\xdc\xa7\x52\xf4\x01\xc0\xbf\xae\x9e\x12\xca\xab\xac\xfa\xc2\x57\xa0\x01\x5b\x97\xb8\xfc\x85\x5d\x18\xa6\xb2\x5d\x3b\x11\xbe\x9d\xf6\x05\xfb\x36\x62\x34\x1a\x08\xe3\x3c\xf5\x59\xc2\x84\xc8\xb4\x6e\x6b\xd9\x59\xbc\x80\xba\x84\xe3\xd4\x8f\x75\xd5\x25\x81\xe0\x59\x86\xe7\xe9\x2f\x34\x48\xa8\x1a\xc7\x1d\x27\xf8\x7b\x3a\xfb\x5e\x25\x30\x5d\x53\xa7\xb6\xa4\x02\x33\x9a\x45\xbf\x12\xcd\x71\xc1\xbc\xa2\x0e\x2d\xa9\x61\xd5\x26\xbd\x2c\xe1\xa5\x02\x3c\xf6\x13\x16\x62\xe8\x0e\x65\xea\x57\xe0\x8b\x78\x08\x49\x8e\x34\xf4\x2e\x0f\x31\xbd\x5c\xf3\x05\x0d\x28\x1f\x9a\x41\xd8\xf8\x2b\x84\xb9\xb7\x66\xd3\x6f\x53\x20\x08\x0f\xfb\x9f\x07\x2b\xb0\x82\x9c\xef\x9b\xd7\x49\xbb\x8b\xfd\xd3\xd3\x6f\x2b\x15\x79\xe7\x6a\x52\x6f\x1a\x52\x15\xce\xaf\xbf\x13\xdb\x7e\xad\xca\x52\xbf\x1a\xdf\x86\xee\x49\x0a\xfe\xe2\x8d\x00\x05\x5d\xad\xa4\x6a\xfc\x09\xf9\x9e\xac\xe1\xe9\x73\x8c\x3d\xd9\xaa\x3d\xe9\x6d\x85\xbd\xf2\x7a\x3b\x4d\xf1\x53\x43\xeb\xb4\xff\xc8\xbf\x4a\xb7\xde\xeb\xe3\x41\xd1\x6e\x7b\x55\x56\xa8\x3e\x4a\x80\x00\xb5\xbd\x2e\x7f\xf6\x6a\xe1\x41\x60\x87\x18\xe0\x54\x54\x3a\x87\x70\xc1\xba\x19\x51\xbf\xa2\x04\xac\x0f\x24\xf6\x6a\xfb\xc7\x35\xeb\x95\x1e\x41\x70\xc1\x74\xe1\x82\x06\x8d\x0b\x26\xc7\x76\xc8\x3d\x53\xc3\x37\x65\x2a\x94\xa0\x49\x9d\x38\xb7\x5f\x73\x55\xc5\xae\x80\x10\x6d\x27\xc8\x06\xf7\x9a\xeb\x7d\x25\x23\xa4\x4d\xa8\x35\xd7\x73\x6f\x33\x1c\x7d\x8f\x04\x58\xe2\x70\x7b\xbc\x67\x89\xe6\x5d\x27\xa8\x9a\x75\x61\x56\x73\xbf\xb8\xf9\x52\x65\x30\xa8\x47\xc8\xb3\x9a\xeb\x61\xa3\xae\x20\xba\x02\xf8\x56\xa8\x65\x73\x44\x2d\x0d\x00\x14\xc4\x61\x05\x2e\xcb\x3d\x18\xdc\x61\xaf\x47\xbc\x65\xc1\x08\xa6\xee\x88\x76\x32\x4a\xec\x85\x74\xf8\xd3\x29\x60\x5f\x77\x82\xd0\x0c\x1d\x91\xfb\x54\x02\xce\x51\x00\xb8\xc7\x53\x0f\x54\x98\xbd\x73\xda\x79\x27\x7f\xd7\x1b\xf9\x62\xe6\xa8\x61\x53\x9c\x3d\x00\x3a\x63\x3d\xe6\x06\x05\x30\x79\xc4\x7a\xdc\x39\x44\xa3\xe2\x84\x9a\x1f\x7d\x1f\x67\x84\x32\x83\xf5\x50\x6e\xaf\x62\xa9\x47\x6f\xbf\x4a\xa5\xfe\x2e\x96\x7a\x2f\x97\x7f\xf8\xc0\x7a\x38\x17\x58\x8f\xc9\x03\xd6\xf9\x92\x5c\xb1\x5b\xcf\x04\xdd\xea\xb9\xa6\x7b\xa9\x1a\xa5\xdf\x26\xe3\x77\xbb\x79\xad\xf8\x16\xc4\x3d\x03\xbf\x92\x4f\x1d\xf8\x8a\xcc\xd2\xb8\x3c\x85\x6e\x3d\x2b\xdd\x38\x3a\x41\xc6\xcf\x49\xc0\x5b\x30\x8f\xce\xd8\x09\x56\xb6\xae\x1e\xf5\x0a\xef\xa4\x29\x14\x48\xb7\xce\xd0\xd5\xe3\x57\x56\x55\x21\x36\xa0\x35\x25\x7f\xa0\x29\xd8\x18\xb7\x7a\x98\xa0\x8b\xbd\x1e\xd2\xa0\x0a\x9b\x4f\x89\x9f\x55\x3b\x84\x1e\x3f\x8b\x89\xfd\x1b\x01\xda\x45\x8a\x4a\x45\x00\xea\x63\xf9\x62\x62\x4b\xa2\xa1\x7a\x38\x88\x30\xb4\x15\x15\x83\x04\x64\x81\x98\x4a\x0e\x42\xb5\x85\x68\xd4\xdd\x44\x2a\xee\x26\x18\x15\x60\x70\x27\xaf\xd6\xf5\x3b\xa9\x0c\xae\xbd\xd6\xa7\xf5\xea\xfa\xa4\xd7\xa7\x79\x7d\x9a\xd7\x2f\x7e\xf8\x62\x57\xa9\x5f\xda\x57\xea\x97\xb9\xfc\x72\x97\xdf\xb5\xa1\x3c\xea\x69\xdf\x94\x13\xa8\xbc\xa5\x27\xa6\x7e\xb1\xf3\xad\xca\xc1\x4d\xb3\xda\xd2\x8f\xde\xb8\x51\x7c\xf1\x2b\x5b\x4d\x3b\xc8\xff\x56\x3b\xe8\xa9\xad\x3c\x72\x84\xbc\x17\xc1\x48\x68\xd3\xd1\xbb\x79\x38\xba\xc1\x50\x9d\x09\xab\x5c\x16\x28\xb4\xed\xc0\xea\x6c\x7f\x6d\x2d\x16\xb2\xaa\x95\x6a\x53\xc5\x4c\x2c\xb2\xd6\x30\x1c\x34\xab\x93\xd6\xe3\x1e\x12\x47\x44\xdf\xa2\x17\x74\xe6\xa0\x75\xdf\x3a\x86\x9d\xd6\x59\x84\xad\x6b\x11\xb6\x0e\x6b\xbd\x0b\x24\x68\xca\x9a\xdd\x6b\xb7\xa2\xf2\x40\xfb\x69\x4b\xf4\xda\xf1\x20\x78\x37\xc9\x4d\xfa\xae\x10\x9c\x8e\xe4\x42\x2d\x21\x89\x5a\x4c\x3b\x08\xa9\x57\x57\x37\xfd\xa4\xd8\x97\xbd\x42\x25\x8d\x18\x9c\x3e\x79\xbf\x71\x97\x66\xe1\x40\xe3\x1f\x38\xb3\x9c\xcd\x6d\xb4\x8c\x03\x11\x3d\xe2\xae\xa3\xfb\x24\x31\x7a\xfc\x8a\xf1\xb4\x03\x60\xbf\xe3\x07\x74\x84\xb4\xaa\x7b\xbf\x95\x0d\xea\x3b\x3d\x39\x47\xe0\xe8\xb4\x7e\xf3\x3c\xa5\x7e\x6c\x4a\x1e\x8f\x87\x7c\x1e\x6b\x7a\xd8\x74\x37\x24\x0f\xaa\x79\x67\xd7\x7b\x79\xbb\x5d\xcb\xdb\xf5\x56\xde\x8e\x4b\x79\xfb\xd8\x22\xfe\x1a\xfe\xf1\x5d\x05\x0c\xef\x23\xb3\x7d\xc3\xc4\x97\xcc\x23\x95\x91\x85\x3f\x1e\x88\xf6\x08\x85\xff\x91\x86\xce\xf0\x80\x2a\x53\x06\x04\xf3\x2c\x08\x53\xc7\x38\x18\xc5\x01\x59\x30\x34\x9b\x9a\x88\xea\x78\x30\xa3\xe3\x58\xdb\x38\xc4\x54\xbd\x9e\x82\xd0\x18\xc6\xc1\x88\x18\x5c\xca\xaa\xe9\x92\x58\x32\x7e\x1c\x11\xce\x0e\x0d\xe8\x20\x5f\x3f\xa8\x82\x05\x26\xda\xa2\x00\x4f\xb6\x42\x73\xa0\x65\xa8\xef\x12\x05\x0c\xf7\x34\xe6\x57\x95\x1b\xbe\x8f\xe3\x7c\x04\xae\x23\xf4\x1a\xe3\x6e\xb7\x18\x05\x98\xfb\x13\xc9\x50\xd9\x48\xfb\x28\xcb\xee\xbe\xca\xda\xe2\x0a\x59\x89\x8a\x65\x11\x31\x5c\x01\x81\xc2\x0f\x00\x72\x5b\x90\x27\xbd\x60\xbf\xeb\x79\xa4\x18\xda\xcc\x54\xe8\xf0\x3e\x9a\x39\x69\x3c\x63\x1a\x76\xa4\x25\x80\x45\xd4\x1f\x7e\x11\x60\x74\x1e\xd7\x8d\xae\x8d\xa0\x5b\x23\xe8\x3a\xb6\xe9\xad\xbb\xfd\x13\x16\xec\xeb\x17\x60\x9e\xfc\x7c\xa8\x04\x5e\x4c\x54\xb7\x98\x32\x77\xa1\xca\x3e\x8f\x96\x56\x3b\x7f\x26\xf1\x33\x09\x56\x84\x2c\xd3\xb9\xe9\x2d\x48\x37\xf3\x05\xb6\x65\x57\xb0\xe1\x71\xc1\x5c\xd0\x0b\xe0\x42\x54\xd0\x4f\x35\x53\x6d\x3c\x34\x33\xb8\x04\x97\x75\xff\x43\x17\x51\x82\x97\xd0\x1e\xd5\x64\x0d\xd0\x26\x9e\x7b\xc8\xfe\x1d\x14\x33\x25\xe4\x4e\x39\xc0\x24\x52\x29\xe1\xa8\x9f\x7c\x27\x9d\xfa\x70\x62\x16\xec\x5b\xd8\x42\xb8\xe6\x1c\x50\x26\x47\x1a\x84\x31\x26\xc4\x36\x54\xdf\xa9\xa0\xa1\x3b\xa7\x71\x23\xec\x9b\xa5\xf5\x2b\x29\xcb\x23\xc4\x2d\xac\x5f\x01\xe5\x8f\x55\xcc\xea\xfb\x56\x84\x3f\xd3\x5e\x85\x0a\x10\xc7\x65\x0f\x65\x06\x70\xc4\x75\x74\xe9\xf5\x24\xae\x90\xb3\xaf\xe1\xd5\x2a\xd6\x7f\x22\xb5\x1d\x95\x89\xed\x8b\x71\x76\x13\xfb\x97\x3d\xcc\xc2\xb1\xed\x7c\xc3\xb7\x0f\x3c\x20\x20\xfe\xe4\x7c\xaf\x59\x5b\x13\x00\x3b\xa8\x5e\x4d\xa7\x7f\x6d\x7b\xfa\xb1\x88\x6d\x6e\x9c\xd8\xbf\x28\x17\x0e\x3c\xf2\x53\x2f\x8a\x08\x69\x3b\x69\xc0\x7c\x34\x66\xb8\x85\x53\x37\x90\xcd\xe2\x98\x5f\x6b\x0b\x8b\x7f\xba\xa5\xd2\xc2\x7d\x7f\xcc\x64\xfe\xb5\xfb\x45\x72\xea\x1f\xbd\xfc\xf4\x81\x04\x44\x31\x6e\x0d\x65\x12\xf6\x6d\xd6\xc9\x96\x34\xa0\xed\x56\x39\xdb\xbd\x6c\xb7\x5b\xf1\x6d\xb7\x42\xb9\x2d\xc1\x3e\x79\xee\x42\x7c\xf2\xed\x04\xe3\x46\x20\xb6\x3c\xb3\x66\x0b\x2f\x02\x75\x7e\x40\x04\x0a\x41\x32\x30\xb9\xde\xcf\xa1\x6c\x8d\x00\x0e\x49\x47\xa9\x7a\x93\x4e\xa0\xb5\xf5\xa3\xdc\xb2\xc8\x82\x39\xc3\xe3\xd3\x3b\x2c\xce\x10\xfb\xb5\x43\x42\x07\x88\x6b\x6f\x6a\x9f\x37\xb7\x95\x81\x8e\xb6\xb1\x85\x65\xa1\x86\x1e\xa5\x18\x60\x34\x25\xae\x8a\x87\x3b\x58\xd3\x59\xbb\x11\x3a\x1c\x01\x76\xe3\xb2\x41\xce\xd8\x84\xb8\xda\xb0\x62\x10\xba\xc8\x62\xf7\x46\xe9\x99\x0b\xa9\x2d\xe6\x7f\x08\x4f\xea\x39\x9d\xb5\x65\x0f\xf7\xd1\xe3\xc4\xd1\xca\x23\x68\x61\x92\x34\xd7\x8f\xe0\x71\xdf\x22\x96\x05\x37\x57\x8b\xa0\x5a\x58\xf6\xcf\x6d\x98\xa4\x5d\x59\x66\x51\x3d\xda\xb8\x0c\xcb\x08\x3b\x28\x3a\xca\xe8\x32\xbf\x5d\x21\xeb\x3d\x00\xa5\xf7\xd0\x26\x99\x5e\x7a\xab\x96\x24\x9e\xed\x7b\x2e\x96\x1a\x36\x95\x0c\xad\xf4\x01\x2d\xcf\x4e\x96\x67\x5a\xc1\xb9\x2a\xd9\xa1\xda\x2e\x79\xbe\x69\xf5\x8b\x8c\xed\x15\x66\x6d\x8a\xcd\x95\x2e\x53\xd1\xaf\x76\xad\xc5\xc5\x02\x6d\x76\xde\x03\xea\x13\x4a\xf5\xc4\xaf\x51\xb5\x30\x4f\x6a\xc6\xb5\xc6\xc3\x37\x58\x41\x27\x56\xb4\x05\xb5\xa6\xa0\x4a\x6e\x95\x5c\xda\x2d\x64\xf9\xb0\xd7\xdf\x35\xa0\x9b\xb2\x0e\x2d\xa4\x98\x23\x34\xde\x92\x38\x66\xc3\x9b\x2d\x52\x38\xd0\x5b\x0e\x41\x5a\x11\xc4\x12\x21\x49\xdc\x9c\x96\x6b\x1f\xdd\xae\x35\xc0\xe6\x57\x6b\x8e\x3e\x64\x0b\x31\xae\x5b\xdd\x92\xaa\xd6\x6b\xe2\x7b\x31\x4e\x5e\xc9\x41\xbd\xb7\x20\x6f\x3a\x2e\x49\x73\x7c\x13\x64\xba\x48\x48\x4d\x69\x98\xa0\x6d\xf5\x0f\x6c\x4b\xfe\x1b\xe1\xee\xfc\x0d\xba\x93\x37\x6a\x16\xfc\xaf\x3d\x6c\xb1\x98\x7b\xea\xa4\x7c\x8b\xf9\xc3\x73\x36\x7b\x33\x4a\xfa\x38\x86\xa5\x3b\x15\xac\x49\xa8\x8e\xf6\x66\x93\x36\x6f\xa2\xa9\xb5\x7b\x91\x7c\x85\x3c\xd3\xf4\x05\xa1\x36\x1e\xf2\x9c\xdb\x65\x7d\x11\xb9\x1f\x41\x3c\x16\x1c\xa1\xcf\xaf\xe9\xbc\xe5\x34\xa7\xf3\x46\xdc\x07\x05\x68\xa9\xf0\xac\x1c\xe1\xf6\x49\xa6\xf5\x39\xcc\xab\x85\x9d\x45\xfd\xa6\xef\x5e\x5c\x3e\x90\xd9\xdc\xdd\xff\x76\x6b\xf3\x01\x9e\x42\xc8\x28\x9a\x67\x4a\xea\x0a\x46\x94\xb8\xb9\xa7\xca\xe5\x1f\xf0\xa7\xdf\xaa\xa8\x04\x5d\x3e\x82\x88\xe3\x56\x5f\x25\x5d\x37\x2e\x4b\x2c\xaa\xce\xbe\x82\x07\x84\xc3\x59\x13\xac\x0f\x53\xa8\x4c\xd2\x13\xe8\x7b\x2e\x24\xae\x9d\x67\x94\x4e\xf1\xd5\xbf\xc5\x50\xbb\x17\x77\xed\xb7\x6a\x39\x43\x0b\x94\x45\xa1\xe4\xbd\x1b\x19\x65\x49\x3b\xc3\xd5\xd2\xcd\x2f\x0e\x6f\x43\xbe\x5b\xf4\xd9\x09\x7e\x97\xfb\x99\x6e\xe1\x26\x13\x67\x4e\x32\xdf\x3a\xb2\x5e\xb2\x05\x14\xb6\xd0\x4f\xa4\x68\x73\x05\x15\xb0\x41\xba\xfd\x93\xcd\x53\xf8\x83\x5b\x44\x46\x7a\x2a\x46\xd3\x82\x3c\x3f\xed\xe6\xee\xd3\xe2\xdb\xa7\x0d\x7f\x8c\x41\x2a\xde\x67\xd6\x16\x25\x87\xd6\x55\xda\xfe\xb9\xf6\x63\x06\x2f\x8b\x8a\x7b\xa3\x69\x69\xaa\x7b\xa6\xc5\x64\x62\xa5\xb0\x42\x2a\xd8\x2c\x00\x01\x9d\xf2\x1e\x54\x5f\xf6\x7a\x2f\x97\xbe\xb4\x71\xde\x82\xee\xb1\xf4\x5b\x33\x11\xd2\xbb\x34\x88\xbb\xcb\xcb\x5f\x7b\x7c\x58\x47\x1e\xaa\xf0\x56\x68\xb5\x5e\x1b\xfd\x0c\x97\x17\x45\x3f\xa3\x8b\x78\x52\x0b\xbf\x65\x03\xf2\x9a\x93\x47\xc7\xe5\x41\x27\xea\xcd\xd5\x78\x5c\xd6\x49\xfa\xd8\x20\x2b\xea\x31\x2d\x98\xf3\x69\xf1\xb9\xcf\x39\x57\x5c\xf6\x32\x83\xba\xe2\xed\x4b\x31\xbe\xc6\x94\xfc\x93\x70\x5e\x16\xc4\xa7\x79\x83\xba\x66\xc6\x2f\xdd\x3d\x22\x7e\xbb\x75\xe3\x3d\x9c\x89\x3d\x20\x3b\x52\x36\x62\x7e\x72\xa1\x87\xa4\xd2\x96\xb2\xb7\x90\x57\xa2\xb4\x5d\x12\x35\x0f\x15\xd3\x2c\xf4\x8d\xef\x9b\x6c\x9f\x0e\xa1\x7b\x2c\x56\x25\x5e\xaa\x45\x56\xa4\x0a\x6b\x28\xc1\xd6\x49\x67\xa9\xb7\x49\x46\x79\x6f\x98\x0c\x6b\xb2\xa2\xe7\x9d\x15\x3d\x4b\x3d\xeb\x71\xda\x87\x7e\xda\x40\xea\xdc\x83\x00\x5b\x97\x91\xb8\x7d\xb0\x85\xd9\x59\x8d\x07\xad\xce\xc1\xcd\xb3\x14\xc1\x77\xa6\x8c\x4b\x57\xeb\xc1\xa4\xb4\x3c\xe6\x4d\x43\xc1\xbe\x39\x02\xc2\xae\x65\x08\x01\xf5\x04\x7c\x39\x47\x7a\x32\x3f\xd8\xce\xf7\x7c\x9b\xc0\x4c\x83\x1a\xda\x5c\x06\x9f\xf5\xce\x1b\xd4\x5f\xac\x41\x35\x69\x9d\xc0\x51\x83\x91\x72\x76\x70\xf9\xd7\x32\x91\x25\x73\x8b\x8e\x20\x2d\x48\xfd\xdf\x66\xf8\x5f\x43\x97\xdf\xea\xf8\x9c\xf5\x36\xe3\xde\x56\xcf\x67\xcd\xe9\xf8\x4d\x58\x99\xda\x65\xcb\xcf\x59\x0f\x9b\x13\x6a\x99\x35\x50\x92\x4f\xa9\xf5\xdc\x73\xa5\x3a\x5f\x52\xb5\xcf\x19\xd4\xc9\xe9\xd8\xee\x76\x90\xe8\x56\x0e\xb7\x21\xbb\xfa\x88\x5d\x7f\x0f\xcf\xb5\x2d\x7e\xdd\x51\x28\x88\x43\x15\x34\x07\x8d\x7a\x1b\x33\x64\x5a\x3a\x2c\x47\x7a\x79\x4b\xd0\x6d\x45\x7b\xce\x05\xed\x59\x6f\x7d\x1e\xe7\x08\x5e\xa7\x58\xe8\xb6\x8f\x63\x0b\xf3\x36\x2e\xd4\xfb\xbc\x56\x6f\x63\x44\xf5\x21\xe2\x76\xa5\xe4\x73\xd6\x77\x28\x5e\xc4\x3a\x58\xf4\x74\xe7\x7c\x8d\x52\x0f\xfd\xb6\xe2\x3d\xfb\xaf\x15\xef\xd9\xe7\xda\xf6\xec\xf7\x8d\x87\x16\x78\x1b\x57\x01\x36\x31\x3f\x38\x09\x64\x9e\xfb\xe5\x43\x6f\xd7\x0b\x44\x6e\x4f\x8f\x68\xb1\xb7\xa5\xf0\x15\xff\xa8\xb4\x67\x3d\xe7\x17\x63\x9e\x7c\x83\x62\x28\x69\xd1\x0d\x63\xdc\x0c\x4e\x2a\xbf\x24\xa9\xf4\x92\xb4\xec\xc5\x73\x74\x27\x24\x10\x21\x6d\x54\x91\x22\x43\x65\xa5\x65\xbf\xf6\x0f\x5d\x5f\xfb\xe7\xee\xf9\xe2\x2a\x58\x11\x0f\x1f\x8c\xc0\x38\x75\x27\x18\xa6\x90\xb6\xa8\x57\xb2\xf3\xcd\xc3\x9d\xbc\x85\xca\x30\xd3\x92\x91\x99\x14\x1b\xfe\xfb\xf5\x27\x51\xd7\x5d\x52\x4d\x77\x10\xa8\x97\x96\xca\x22\xa8\xa5\x2e\xda\xb0\x41\x70\x31\x03\x38\xd3\x5f\x8b\xdf\x74\x26\xe1\xc9\xac\x45\x4f\x1f\xd3\x52\xbb\x5d\x05\x4a\x0b\xcf\x37\xd2\xc2\x2f\x9f\x3f\xc2\x9e\x3f\x47\x86\xc9\x31\x0e\x0c\x3b\xca\x7b\x72\xee\x02\x95\x0d\x21\x7c\x45\x01\x07\x1a\xfe\xf5\x07\x4b\x4a\x3a\x53\xf9\x9a\x44\x2a\xa5\x23\xad\x71\x26\x79\xbd\x4b\xee\x14\x4a\x8b\x79\x8d\x2a\x83\x44\x96\x38\x36\x62\x0b\x9e\xe7\xa8\xa0\xda\x3f\x10\xa1\x24\x1f\x47\x05\x9b\x00\x32\x60\x8f\x37\xdd\x42\xb1\x46\x29\x58\xb7\xd7\x00\x79\xe2\x08\x98\x43\x9f\xee\x6d\xdf\x56\xb0\xf3\x59\xa0\xfa\xa7\xdc\x92\xe4\x26\x59\xe3\xb4\x22\xf7\xa8\xf7\x15\x9b\xfa\x89\xfa\x9a\xd3\x3a\xab\x6d\xad\x3c\x91\x4d\xeb\x07\xc7\x8f\xe9\xf9\xfc\xfc\x49\x9b\x5a\x6e\x45\xc5\xed\xa5\xad\xe8\x42\x08\x28\x29\xaa\x66\x1e\x89\x4f\x9b\x04\x37\x73\x57\xa1\xd4\x21\xe5\x18\x16\xf9\xaf\x0b\x76\xdd\x12\x44\xde\xa6\xfc\x15\xfe\xa4\x2c\xa4\xf2\x54\x02\x06\xaf\x35\xa4\x9c\x23\x15\xf4\x10\x5d\x09\x0f\xfd\x52\xce\x38\x08\x90\x0c\xe5\x9c\x1e\x38\x85\x10\xb4\xa4\x0b\xe6\x61\x69\xcc\x39\xfd\x1d\x89\xce\x2e\x0a\xc0\x4b\xd9\x5b\x67\xce\x57\x3c\xce\xa8\xe1\x0c\x93\x2a\x6a\x18\x47\x4e\x93\x60\xbb\x73\x92\x29\x1d\x5d\x55\x33\x19\xd6\xb0\x04\x6a\xa3\x05\x65\xae\xab\x39\x75\xe5\xc9\x4e\xcd\x08\x5c\x13\x87\x12\x2c\xd1\xac\x9a\x06\xd3\x11\x54\x7c\x14\x50\x33\x3b\x4b\x3d\xa1\xdb\x49\x84\x44\x16\x83\x51\x2f\x75\xcc\x64\x1e\x8f\xb8\x60\xeb\x36\x1d\x8f\xf4\x48\xee\xf8\xd1\xb8\x57\x62\x88\xde\x20\x01\x4c\x8c\x2a\xff\x05\xff\x9a\x9f\x63\x3e\x8b\x56\x0c\x1f\x47\x50\xa9\xc4\x02\x8b\x19\xd2\x2e\x20\xce\x59\xb3\x81\xeb\xf7\xf8\x18\x43\xd7\x43\x64\x21\x28\xc6\x90\x68\x71\xdb\xa3\x9a\x37\xf0\xbd\x34\x6f\xbe\x5a\x97\xea\x00\x48\x66\x27\x8b\x42\x56\xff\x71\xa4\x6d\x96\xbb\x52\xa8\xa0\xe3\x48\x96\xb4\xd4\x17\xf3\x9a\xae\xb4\x59\xd0\x15\xaf\xc6\x05\xac\xda\xac\x0e\x5d\x0d\x0b\x68\x0c\xb0\xb6\xeb\x06\x94\x6d\x74\xf2\xc7\xc9\xcb\xc2\x7a\x99\xd5\x28\x6a\x38\x53\xf5\x8b\x62\xa8\xc3\x5e\xd7\x12\xeb\x08\x36\xb1\xba\xea\x8e\xac\x82\xce\x00\x2d\x35\x04\x18\x76\x81\x58\x4f\x67\x48\xcd\xdd\xe9\x43\x0f\x81\x8d\xff\xe9\x4c\xa5\x30\xc3\x42\xf9\x5a\x14\xe4\x8c\xa0\x5d\xac\x18\x20\xb3\xec\x3d\x4c\x78\xb3\x55\xb9\xfd\x4e\x68\xda\x7a\xb7\x14\x5d\x89\xb5\x71\x42\x18\x52\x3a\xce\x18\xf4\xad\xa1\xe0\x65\xb9\x43\x3a\x8c\xcb\x32\x74\x24\x12\xe2\x86\x57\x8b\x38\xae\x16\x6a\x5c\x6d\x2d\x78\x23\xd0\x0e\x84\xb2\x72\x89\x39\x9b\xfb\xb2\x4e\x84\x41\x42\x50\xbc\xbc\xdc\x62\x49\x97\xbb\xb0\xbc\x51\x00\xb8\x46\x62\x1d\x9c\xd0\x9a\xf1\x19\x9b\xaf\xfb\x26\x65\xee\x96\x74\x7a\x8a\xdb\x33\x2e\x37\x34\x7d\x80\x32\x1f\xcf\xda\x3c\x72\x8f\x21\xf9\x74\x0a\xca\xca\xa5\x99\x3a\x01\x10\xde\x37\xb1\x09\x74\xb3\x4f\xb3\xe6\xb0\x00\x4f\xf7\xe4\x76\xed\x4a\xb2\x1c\x4c\x33\x80\x6b\xb4\xc7\x0c\xe2\xe5\x51\x5e\xa6\xce\x07\xc4\xad\x48\x2e\xef\x88\x67\xe4\x6b\xf4\x74\x9c\xa9\x6c\x1a\xa2\x05\x90\xfa\x2e\x46\x0e\xde\x00\x72\x58\xbc\x22\x73\x18\x9e\xd4\x1c\x55\xb2\x1c\xf0\xac\x6c\xec\x03\xdb\x00\xa0\x14\xd3\x90\x4d\x5f\x21\x71\xba\x08\xd8\x34\x73\xf5\xaa\x16\xe8\xee\xaa\xb5\xd8\x8a\xbb\xf5\x0a\x58\xd4\xb5\xac\xd1\x7d\xd5\xd9\x55\x04\x32\x5b\xae\xa0\x50\xb0\x77\x95\xda\xb5\x85\xd5\x59\xf2\x55\xf7\x03\x09\x87\x63\x6b\x74\x2e\xca\x48\xf0\x0b\x55\xcb\x84\xe3\x44\xc4\x4b\x4b\x29\xe4\xbd\xc5\x99\xdf\x16\x97\xd4\xe9\x22\x6e\xc5\x5d\x0b\x9e\x4e\x7e\xd7\x7d\x8b\x33\x75\xc0\xf5\xe6\x8f\x64\xbe\x11\xde\x00\x95\x26\xa7\xa7\x24\x8b\xb0\xa5\x7e\x0b\xa3\x3e\x26\x3c\xce\x6b\x10\x9d\xb1\x11\xbc\xe6\xd7\x57\xb2\xce\x29\xb8\xdf\xaa\x57\x69\xcb\xc1\x30\x77\x13\xcc\xcc\x8e\xd4\xbb\x56\xcb\xc8\x96\xa4\x51\x7c\x30\xe0\x24\x75\xce\x21\x75\xf8\x44\x77\x8e\x4b\x4a\x87\xa5\x51\xc2\xb2\x78\xd1\x14\x3f\xa7\x12\x48\xe7\x25\xac\xe1\xd4\x50\x4a\x58\xe3\xdf\xa1\xdf\xd7\xd9\xd5\x4a\x58\x5f\xd8\xd0\xb9\x88\x6d\x26\x29\x21\x27\x7d\xe2\x2e\xd8\xb4\xb9\xa7\x82\xf9\xb5\x84\xa2\xec\x52\x09\xe7\x19\x83\x7b\x3a\x65\x28\xbb\x11\x16\xf0\x89\x46\xef\xf6\x3c\xb0\x01\x94\x06\x31\x3f\x80\xb2\xd4\x0b\xb9\xcb\xb2\xf3\xf6\x79\xd7\x65\x28\xc9\xea\x63\x35\xc9\xb3\x25\x4b\x15\xa2\x6d\xdb\xb0\xcf\xed\x32\xd5\x05\x24\x9e\x09\x2b\x55\x12\x6c\x32\x25\x5c\x92\x5e\x0d\x7e\xac\x16\xef\xd8\xb0\xb3\x2c\xa8\x9f\x7a\x9e\x93\xca\xa3\x86\xb6\xc2\x2c\x34\x5a\x81\x31\x48\x82\xf3\x2b\x4b\xc8\xa6\x03\x1c\x84\xb1\xba\x65\x09\xae\xf8\x0e\xc4\xe4\x6b\x94\x42\x53\x2a\x4b\x38\xdd\xf3\x19\x2c\xea\x25\xb4\xc5\x87\xf9\x82\xa3\xb5\x6b\xa2\x19\xce\xb8\xcc\x83\x4c\x26\x81\x21\xda\xb0\x5f\xa4\xf1\x04\xc6\x1f\xbb\x0e\x85\x65\xd9\xab\x86\x25\x40\x1d\xa2\xd9\x33\x4c\x40\x76\xa9\xe2\x93\x46\x59\xa0\x1f\x08\xa6\x79\xe9\x9a\x81\xd4\xb5\xf0\x16\x3e\x59\x12\xf0\x4a\xb0\xe0\x68\x09\x64\x0c\x26\xe1\xcc\x42\x36\xa1\x1f\x82\x8d\x73\x07\x64\x7c\xd9\x6b\x69\x31\x56\xb8\x2c\x35\x36\xeb\x22\x4b\xdd\xf8\x6f\x1c\xa4\x62\x46\x5b\xb1\xe2\x30\xf4\x63\xb6\x3b\x4e\xbc\x00\x8f\xc7\xd0\xcd\x53\x50\xd1\x72\x4e\x75\xb2\x00\x77\xbe\xf0\x46\x5f\x46\xd6\xd5\x2a\xa1\x0a\xff\xe4\xdd\xc0\x49\x2b\xe5\x3a\xd9\x28\x21\x84\x6d\x32\xd4\xee\xd6\xb7\xf4\x78\x07\x13\x9c\xa3\xc5\x79\xe2\x45\xb2\xe2\x5f\x7d\xe8\x66\xf1\x9a\x74\xbf\x7f\xbe\xa5\xa1\x2c\x51\x15\x07\x93\xba\x15\xb1\xb0\x29\x7d\x7e\x5a\x93\xc6\x5d\xb6\x36\x2c\x49\x82\x2d\xeb\xa5\xc7\x65\x78\x4e\x9d\xca\x1f\xa3\xff\x4e\x6f\x4a\xb0\x7b\x0a\x9d\x7c\x7a\x9b\xe4\xe5\x54\xbf\xa6\xcf\x9a\x6f\xee\x78\x72\x40\x7c\xa6\xe5\x96\x96\x6b\x7e\x18\xc7\xf4\x71\xc5\x7e\xcb\xbc\xb1\x19\x8a\xa7\xf7\xab\xd5\x7c\x8b\xe7\x6a\x32\x0f\xce\x5a\x29\xaf\x58\x92\xfb\xfc\xe7\x93\x34\x7f\xa3\x6a\x5b\x93\xf5\xdc\xda\xce\x3a\xf3\x08\xe2\x62\x13\x57\xc2\xda\x9b\x52\xaf\xe9\x30\x6a\x39\xf1\x84\x9a\x28\x6d\x1e\x4b\x6b\xe3\xbc\x26\x32\x7b\xc8\x45\xb9\x6e\x50\x83\x6c\x73\x34\x07\xd6\x78\x21\x98\x93\xc0\x7b\x5c\x8b\xfa\x0e\x04\xf8\xf0\x31\xa2\xcd\x81\xad\x45\xd3\x2f\x4c\x42\xbb\x72\x4b\xc7\xad\x63\xb7\xe1\x15\x32\x1e\xb7\xce\x0f\x82\xa9\x12\xa8\xae\xc7\x43\xa3\x1c\xab\x26\x69\xe4\xd9\x89\x46\xf6\x01\x53\xa0\x7b\xca\x0c\xfe\x78\x68\xc2\x46\x09\x94\x71\x2f\xd8\x0b\x5e\x75\x08\x02\xdd\x2c\x6d\x38\xd0\xb3\xea\x54\xd6\xb0\x59\x8c\x6b\x7c\xb0\xa2\xd6\xa8\x99\x5e\xe3\x92\x56\x9d\x6a\x89\x19\xa6\xe0\x73\xf7\x96\x2c\xa4\x05\x17\x6f\x23\xe0\x1a\x79\xa5\xe1\x46\x36\x0b\xe0\x19\x7c\x9d\x28\x94\x54\xcf\x24\x8c\x55\x37\xe2\x65\xb8\xdc\x5c\xdd\xa2\x79\xa6\x92\x34\x91\x7b\xea\x9e\x78\x6e\x7a\xe8\x87\xec\x3e\xf5\x5a\x83\xc0\xa3\x50\xe5\x28\xcb\x76\x8d\x87\xf4\xa8\x99\xad\x62\xe5\xe1\x8b\x19\x4c\x75\x2d\x3d\xdc\x49\xbf\xa0\xb8\xd4\xc8\x6b\xaa\x5d\xb9\x91\xd7\x9d\xb2\x29\x7a\x8d\xaf\x3a\x18\xe4\x9b\xfc\xa5\x20\x1d\x96\x65\xf1\x6d\x1d\x78\x9d\x23\xeb\x7a\x4b\xac\xcd\xfa\x6b\x5a\x6e\x2e\xbd\xcd\xad\xe9\xf9\xb4\xd1\x7f\x4d\x7a\xbe\xa0\xd0\xec\xba\xe6\x2f\xf9\xc1\x9a\x13\x1a\xdd\x56\xd4\x08\xe6\x09\x7b\xa5\x65\x4d\xda\x45\x57\x29\xef\x56\xdc\xb3\x50\xe7\x75\x23\x65\x44\x09\x93\x84\xcc\x4e\x83\xd7\xb4\x9d\x9d\x0b\x74\x9a\xc5\x36\x49\x76\xe0\xbb\x85\xa6\xb2\x9f\x73\x08\x17\xaa\x76\xcd\x57\x9f\x73\xc0\x9a\x7a\xaf\x79\x38\x71\xa5\x62\x19\x00\xf4\xb0\x24\x9a\xe1\xcb\xbc\xb2\xa6\xdb\xb8\xb7\xa6\x57\x82\x7c\xed\x09\xbd\x3a\xd3\x2b\x79\xeb\xac\x10\xd9\x2d\x20\x6b\x69\x57\x97\xe7\x25\x84\x6f\x03\x95\xb5\xd6\x06\xa3\x79\x06\x5a\xf8\x46\xa9\x8f\xc7\x74\x35\x6c\xac\x5d\xa5\xb5\x4d\x64\x8b\x02\x52\xcc\x82\x2a\x91\x15\x74\xce\xb6\x3e\x7c\xac\x5d\x47\xd7\x96\x23\x40\xbf\xf6\xab\xb9\xa5\xed\xa5\x95\xf8\x68\x3a\xfd\xfa\x50\x29\x4b\x7d\x14\x6e\x5c\x87\xcd\xff\xf1\xf9\xbc\xa1\x25\x4e\xc2\x3b\x2f\x31\x4b\x2e\x3e\xa5\xcf\x19\x07\x08\x4a\x27\x99\x68\x5b\xc9\xc5\x6e\xfd\x08\xf2\x19\x20\x9a\x80\x70\x81\xc3\x5b\x7d\x9c\xac\x53\x2c\xc1\x47\xbb\x88\xb9\x42\x96\x0a\x4a\xff\x1d\x49\xb8\x66\xf2\x70\x42\x5d\xb7\x2f\xaf\x90\x99\xd0\x16\x7c\xef\x4c\x88\xee\xb0\x69\x7a\x9a\x6e\x21\x97\xd8\x48\xeb\xf4\x1e\xfb\x64\x71\x63\xef\x3e\xed\xdb\x62\xad\x48\xb7\xb2\x29\x3a\xbe\x7c\xc0\x8b\xaf\x99\x90\x37\x39\xa5\xf8\x5e\x86\x47\xfc\x86\x3c\x26\x73\xfc\x76\x26\x21\xbe\x7d\x9a\x8d\x6f\xdf\xa7\x01\x36\x9e\x48\x70\x4b\xb1\x2c\xac\x31\xa1\xd4\x49\x9a\x3e\xb5\x09\xc4\xf7\x99\x83\x0f\x5d\x42\xcd\x62\x78\xdb\xe2\x1e\xb0\xce\xd0\x6f\x0c\x97\x51\xf6\xc9\x97\x89\x20\x8a\xd7\xe1\xfb\x9a\xa3\x78\x7c\xff\xd3\xd9\xc4\xa2\x9d\x93\x68\x9e\x86\x67\xc8\x36\x82\x3f\x79\x47\x4a\x40\xb9\xf4\x19\x98\x12\xfa\x1d\x0c\x8f\x22\x1e\x43\x95\x67\x68\xdc\xce\x2b\xcf\x70\x0d\xe5\x48\x6e\xd3\xce\x53\xaf\xeb\x13\x69\xdb\x9c\xed\xf7\x19\x17\xae\x86\x9e\xb8\x07\x77\xd9\xf7\x4c\x1f\x56\x11\x1c\x71\x59\xef\xcf\xd8\x3c\xec\x96\xd0\xcb\x9f\x7c\x07\x0d\x50\x03\x34\x2f\x9a\xfd\xcd\xad\x65\x23\x65\xdf\xed\x29\x3e\xc3\x11\xf4\x74\x30\x9c\x64\xba\xeb\x04\xb7\x43\x8c\x1c\x0e\x6b\x65\xc4\x3a\x61\x3c\xb3\xe5\x3a\x87\x39\xda\x3e\x71\x7d\x51\xe7\x0c\x23\x74\x4c\x21\xc9\xf8\x73\x7c\xab\x67\xbd\xbe\xa6\x70\xfa\x7c\xdf\x3d\xce\x39\x09\xd8\x02\xa9\x93\xa1\x7a\xe6\x21\x0d\xd3\x5d\x8d\x9b\xb5\x95\xa0\xe0\x9f\x5f\x50\x2b\xb3\x36\xcf\x22\x2f\x40\x29\x98\x39\x21\xf5\x32\x27\x4c\xfb\xdc\x3b\x2a\xcf\x16\x96\xda\xc9\xe6\x3d\x5b\xe0\xc3\x10\xc0\x23\x34\x3d\x1a\x10\xca\x1b\xee\xb3\x05\x5e\x7f\x11\xe8\x3c\x3e\x34\x55\x1b\xfb\xe5\x04\x63\x50\x8a\x17\x0e\x84\xee\x8b\x7d\xf1\x56\x67\xcb\x90\xe7\x50\xa1\xec\xd8\xbf\x33\xae\x65\x8b\xba\x23\x2b\x68\x18\xf2\xc1\x60\x4e\xd4\xae\x6b\x28\x95\xad\x72\x9a\x34\xa1\xdf\x40\x57\xb2\xd9\x53\x09\x36\x09\xca\xcf\xd7\x0a\xd9\x66\xf7\x35\x31\xdc\x44\x52\x2e\xdb\xd0\x22\x99\xa2\x5d\x15\x23\x8a\x3d\x64\x76\x1e\x17\xe0\xe7\x90\xa9\xf2\x85\xe8\x94\x51\xa2\x98\xfe\xd3\x2d\x54\xc1\x4c\xdf\xfd\x11\xa4\x50\xfe\x78\x2a\x15\xab\x30\x7d\xcb\x93\x4a\xd2\x93\xe9\x32\xcf\x58\x4a\xfa\x3b\xac\xab\x26\x6d\x53\x69\xe6\xfe\xbf\xe8\x8d\xf4\xbf\xb1\xfa\x6e\xc8\x7f\xc3\xb9\x81\xff\x9c\x9f\xfe\x6f\x70\x17\xe4\x3f\xe7\xab\x79\x1a\xac\xca\xc0\x53\xf9\xd2\xa6\xff\xa5\x4d\xf4\x4b\x62\xc8\x01\xcc\x12\x64\x17\xa4\xc2\x07\xfe\xa9\xe0\x08\x05\x85\x81\x87\xd3\x76\x52\x50\x0a\x02\x2c\xfa\x9e\x1a\xa8\x9f\x8d\x7e\x0a\x2f\xf6\x6a\xeb\xb6\x7e\x56\xaa\xd6\x5d\xa9\xb6\x26\xc4\xe1\xa2\x86\x57\xef\x5e\xea\xcb\xfa\x03\x20\x8b\xa0\xd4\xb7\x66\xa7\x8c\xc3\x47\x31\x62\x86\xc1\x3b\x85\x74\x53\x1f\xb8\x5f\x8c\x18\xeb\xdc\x0c\xaa\x7e\xd1\x2b\x95\xba\x1a\x8b\x5f\x9f\x4f\x9f\x87\x2a\xe6\x78\xb5\x3f\x3d\x9e\x3a\x77\xf8\x4b\x3d\xb9\xb3\x0b\x3c\x57\x93\x76\x57\x31\xb9\x3a\xe7\x24\x69\xb6\x17\x38\xa9\x9c\x7b\xe8\x62\xca\xe4\xae\xdb\xe4\x82\x2d\x0a\x81\x2c\xc1\xbf\x23\x75\x3f\xaf\x33\xea\x15\x1d\x5b\xf7\xeb\x21\x8f\x87\x55\x72\x67\xdb\xea\x7c\x1c\xf6\x01\xbc\x6c\xee\x04\x44\x2a\xef\x4b\x02\xdd\xf1\xd5\x78\x9c\xd2\x1a\x53\xfa\xa5\x2e\x9d\x3b\xed\x98\x7e\x14\x44\x47\x3e\xbb\x81\x70\x97\x3a\xe2\x13\x5a\x81\x0b\xa5\x8d\xaf\xc7\x05\x5b\xaf\xa5\x0b\x5f\x7c\x19\x4a\x16\x57\xf1\xbc\x83\x4d\x61\x1b\xea\x71\xee\xce\xf4\xd8\xae\x1b\x44\xd3\x17\xe0\xd9\x72\x25\x12\x82\x27\x87\xdf\xf7\xca\x78\xd3\x1a\x3b\x4d\x2b\xc9\xb4\xed\x3c\x45\x13\xc8\x65\x17\xa3\x4d\x65\x89\xea\xa9\x0c\x1b\xa6\x14\x33\x8d\xe9\x44\x37\xea\xbe\x49\x37\x77\x4a\x7a\xf5\x3d\xd7\x6e\xbc\xf6\x64\xf3\x7b\xcd\xaf\xf9\xf5\x65\x9f\x0f\x68\x6c\x52\xa4\xc9\xab\x47\x99\xfe\xc7\xa2\x6c\x6f\x3f\xe7\x18\x01\xec\x05\x70\xfa\xd4\xd8\x5d\xd1\xaa\x63\x2d\x98\xd3\x9b\x21\xe0\xcd\x73\xf2\x76\x4f\xcc\xde\xe8\x5b\x36\xd8\x44\x08\x36\xee\x51\x0f\xbe\x3a\xbf\xad\x55\xee\x57\xfb\xef\x94\x86\x05\x52\x1d\xde\xd6\xa8\x4a\xb8\xaf\x36\x96\x5f\xce\x3c\xf5\x4a\x59\xc3\xbd\xda\xf0\x7d\x91\x3e\x1e\xb7\x3e\xda\xc7\x03\x09\x56\x7f\xe3\x39\xf9\x21\x21\x9c\xbb\xef\x3a\x4d\xf6\x91\x3d\xa3\x23\x5b\x85\x8f\xf3\xe6\xeb\x9c\x67\x3f\xa0\x6e\x7c\xe6\xdc\xa1\xec\x3a\x26\xf7\xd1\x36\x8b\xa1\x1d\xd5\xde\x16\x82\x6c\xf7\x3a\x9b\x24\x8b\xe8\x76\x7f\x34\x95\xfe\xcd\x05\xc3\x45\x16\xfc\x9a\x33\xff\x15\x9a\xad\x93\xae\xb8\x59\xec\x80\xd9\x00\xa2\x07\xd2\xc2\xbc\xe2\x36\xfc\x84\xd4\xae\xce\xdb\x27\xbf\x47\x7f\x27\x6c\x21\x39\x2f\xd5\xdf\x70\x72\xc7\xbe\x1a\xba\xa2\x8f\xd2\xbc\xa0\x61\xb8\x70\x47\x99\xb7\x5c\x69\x5a\x11\x5c\x3e\x24\xe3\x78\x60\xda\x5e\x7a\xa0\x6c\x58\x6b\x5d\x56\x4b\x4b\x58\x71\x31\x4f\xa9\x05\x5d\xff\x63\xa4\x8d\xb9\x17\xdf\x11\x79\x88\x2d\xcc\xec\xb6\xb0\xda\x01\x31\x28\x36\x03\xa0\x57\xac\x93\x52\x81\x44\x4a\x94\x1b\xc1\x3b\x84\x1e\xf4\xbc\x52\x48\xba\x99\x6a\x59\x27\xbd\x2c\x5b\x68\x9f\x8b\xcf\xca\x48\xea\x9d\x37\xf7\x0b\x25\xeb\x8a\x29\x3f\x58\x71\x4b\x6e\xcf\xdb\x5c\x84\xd3\xf5\x68\xbf\x62\x7d\x85\x94\xbd\x6d\x34\x0a\x2d\x30\x98\xb3\xb5\x83\xf6\x08\x5e\x3f\x82\xbf\x14\xc5\x75\xda\xb2\xd2\x9b\x35\x01\x0a\x76\xde\x76\x25\x5a\xe0\x9d\x58\xa3\xca\xb2\xdf\xf1\xed\x53\x0c\x97\x7f\x4a\x5b\x58\xa3\x11\xf5\xee\x6e\x09\x33\x71\x82\x67\x45\x2d\xe1\xbc\xa7\x7c\x09\x6d\x4d\x65\x7a\x6b\xf5\xb2\x52\x5d\x42\x3b\x6f\x1f\x70\x74\x76\xf3\x76\xa5\x1c\xb6\x5b\x4b\x59\xa4\x16\x0c\x5e\x7a\x61\x59\xc9\xd1\x7f\xa5\xe0\x15\xdb\xcd\x5f\xcc\x79\x96\x38\x64\x79\x78\xac\x7e\x18\x04\x02\x62\xa8\xfd\x53\xbf\x75\x80\xb6\xdc\xe6\x2e\x27\x2d\xad\xff\x63\xeb\xca\xd6\xa3\x65\x99\xed\xf9\x7b\x97\xb4\xd2\x4a\x1a\xc1\x8f\xc1\xc4\x5c\xfd\x7e\x6a\x2e\xf3\xef\x83\xa4\xd7\x62\x9e\x65\xac\xda\x43\x91\x6b\x43\xc4\x6b\x59\x2d\xa0\x7d\x36\x29\xec\x25\xe5\x64\x59\x4c\x43\xd1\x25\x4d\x05\x5f\x7b\x29\xbc\x7c\x5b\x59\x32\xdf\xc7\x64\x36\x5f\x8c\xea\xb2\xdc\x9b\xb6\xeb\xa5\xe6\x1c\xb7\xe8\x89\x8e\x43\xc0\x49\xe5\xa0\xb0\x79\x94\x3f\x4c\x62\xab\xc7\x91\x7a\xb7\x96\x4b\xe7\x35\x4f\xa6\x0b\x6d\x6f\xe2\x4a\xb4\x1e\x67\x28\xb7\x23\xed\xe1\xfe\x34\x4d\x10\x6c\x54\x9e\x25\x54\xcb\x7a\x5b\xfe\x91\x69\x41\x21\xd3\x1e\xba\xd4\xf2\xfe\x53\x63\x72\x02\xe2\x0c\xe8\x48\xc3\x1b\xd4\x66\xad\xa8\x42\xcb\x58\xd3\x32\xaa\x4b\x80\xdb\xc7\x43\x03\xbe\x35\x2b\xec\xac\xcd\x15\x6e\x3b\x67\xf7\x35\x86\x82\x1d\x2c\xba\x7e\x58\xea\xbb\x4b\xc6\xf0\x99\x9c\x45\x9b\x05\xaa\xf7\x16\x57\xcd\xf5\xa2\xe6\xaa\xa5\xdd\x10\x54\xa6\xbd\x0b\x30\xd0\xfd\x7a\x24\xfd\xb4\x61\x6b\xb9\x6d\x84\x5b\x23\x4f\xfa\x5d\x91\xad\xae\x70\x56\x98\xd8\x8d\xe3\x69\x12\xe5\xee\x83\x71\x8d\x4a\x77\xb5\xa5\xf6\x1f\x25\xb9\xa6\xb7\x2e\x5b\x91\x6e\xc9\x02\x4e\x7d\x49\x67\xe6\x0b\x75\x6c\x32\x5a\x5a\x24\xe4\xda\x74\x14\x8f\xc7\x99\x1a\x07\x12\xcf\xe4\x3e\x32\xf1\x4c\x03\x85\x0f\x8b\xcb\xff\x26\xac\x32\x86\x19\x74\xad\xea\xd8\x79\x02\x41\x78\x86\xa6\xc5\xf7\x0e\x8b\xfa\x78\x3f\x3f\x4e\xef\x90\x64\x68\x7c\x87\x23\xe5\x5b\x70\x5f\x7c\x3f\x7d\x47\xbe\xa5\x46\xa4\x44\xf7\xb1\xf0\x5b\x3d\x44\xe5\x76\xb6\x70\x9e\xb0\x03\x49\x2f\x54\x95\xd6\x8c\xea\x98\xf6\x4e\x39\x3c\xba\x8e\x18\x3c\x5c\x88\x4f\xd9\x26\x21\x7c\x59\xf4\x35\x8b\xfa\x78\xe2\xf8\xd6\xc1\xf2\xdb\xaa\xd5\xfe\x5b\x37\x88\x47\x6c\x5b\xc8\x74\x33\x9e\x59\xd9\x72\xe2\x05\xfc\xa0\x57\x87\x7a\x62\xe7\xb8\x54\xfe\x96\xb2\x84\x93\x5d\x69\x9b\x9a\x6b\xa6\xf5\xe5\x98\x1b\xb6\x1e\x6a\x32\xc9\xc4\x29\xb5\x14\x03\x37\x13\xd8\x5a\x9d\x27\x43\x67\x7a\x6b\xb5\xb0\x16\x18\xc2\x0f\xa8\x32\x7f\xc9\x80\xc5\xaf\x10\xe1\xcd\x84\x11\x5b\x3a\xe4\x57\x6e\x83\x21\xf3\x3b\xff\xc8\x71\x97\x42\xcb\xc1\x26\xb7\xb8\xa7\xa7\xe5\x97\x3a\xaf\xfd\x47\x6c\x5f\x61\xd1\x52\xff\x0a\xaa\xf1\x9e\x78\x7c\x34\xcf\xaf\xb8\x3c\xed\x6c\x90\xf8\x9a\x9b\x83\x16\xa9\x3c\xf7\x40\x92\xc3\x4b\x93\x9e\xc3\x4b\x2f\x5f\x11\x5f\x70\x87\x5f\x7a\x09\x34\x36\x6b\x9a\x39\xc0\x48\xa2\x64\xa8\x7a\x1e\x32\x48\xaf\xa6\xed\x34\xa7\xed\xd9\x70\xc5\x40\x1b\x21\x8c\x64\xe6\xb5\x44\x0d\xb7\x4a\x69\xe7\xfa\x32\xc3\x97\x0e\xbf\x8f\xf6\x92\xab\x8e\xbb\xb9\x2e\x0f\xf3\xe9\xb2\x35\xad\x74\xf3\x5c\x2d\xfb\x53\xb3\x73\xd8\xc4\xf3\x08\x39\xbb\x99\xe7\x81\x3a\x4c\x6f\x23\x7e\xda\x73\x04\xb7\xc5\x47\xdc\x4d\x1f\xdc\x6e\x21\x31\x2d\xd8\x23\x90\x0c\x40\x26\x8f\x49\xa0\xbf\xb7\x4b\x7c\xb5\x2f\x3b\x91\x6a\x6e\x0f\x9b\xcb\x10\xb1\x19\xd1\x81\x02\xfc\xa3\x59\xe3\x42\xcd\x28\xac\xef\xad\xd1\x1f\x71\x04\x3f\x55\x23\x71\x17\xde\xf6\x78\x3a\x86\xa5\x8f\x3a\xd6\xc3\x01\x3d\xc7\x74\x3d\x04\xef\x61\x5d\x6a\x3b\x86\xd6\xc6\x91\x7e\x9c\x3f\x57\xe8\x35\x47\x57\x9d\x47\x7d\x34\xa6\xa3\xe2\x0a\x98\xc9\x2c\xab\x27\x69\x49\x96\x07\xeb\x1b\xc7\xe3\x93\xad\x95\x52\x82\x25\x93\x94\xa2\x31\x84\x2e\xe7\xb1\xda\xc4\x45\x6b\xb1\xc4\xa1\xdf\x9a\x12\x2d\x2e\x7c\x97\xab\xfd\xbc\xd8\x97\xb9\x54\x83\x73\xc9\xda\xe8\xcb\x2c\x36\x40\xd6\x25\x06\xf5\x5c\x1f\x73\x57\xdf\xc4\x71\xdf\x4c\xcc\x73\xba\xb4\x74\x48\xd4\x07\xc1\xf6\xb2\xef\x6f\xed\xdd\xbe\x01\x27\x4e\xe6\x25\x23\x67\xc8\xa7\x9b\x14\x9f\xcf\xb9\x3d\xea\xd2\x5d\xf6\xfb\x30\xfb\xe6\x46\x65\x62\xbb\x8d\x30\xce\xc0\xb9\x49\xd1\xfb\xc8\x29\x1c\xda\x0a\x8c\xfb\x38\xeb\xcf\xdd\x7d\x94\x32\x5f\x72\x5b\x2a\xc8\x56\x11\xd6\xc6\x3c\xe7\xa0\x01\xbb\x3b\xc5\x8e\xff\xb1\xb6\xf2\xb5\x0b\xb8\xcc\xae\xd0\x9d\xe5\x08\x36\x13\x25\xa6\xc5\x19\x47\xb2\xd6\x7b\xe2\x96\xb7\xf5\x3c\x77\xa9\x96\x69\x89\x2e\xab\xd9\x35\x9d\xb3\xba\x75\xe2\xe9\x82\xac\x7e\xf1\x75\xf2\xbd\x78\xc2\xdd\xf9\x68\x11\x26\xf3\xc6\xc6\xc3\x6e\x3c\x9a\x32\x1b\x5c\xce\xde\x91\x24\xcf\x66\x88\xd6\x3f\xf3\xee\xb3\xf1\xf3\x9c\xd5\x99\x40\xba\x9e\x6e\x86\x3d\xb9\x61\x13\xbc\x1b\xe4\x5c\xfc\x24\xab\xe4\x11\xdb\xbd\x59\x11\xcf\x97\xfa\x9b\xf9\xa8\x36\x71\x3c\xe7\xa3\x81\xb6\x20\x1d\xa1\x05\x1b\xdd\x5b\x48\xf9\x3b\xa8\x13\x8d\xa5\xc5\x2d\xf9\x59\x05\x70\x4b\x33\xde\xd1\x55\x9c\x6d\xf5\xd9\xf0\xb0\x59\x6b\xbc\x45\xe7\x4c\x6f\xb6\x13\xed\x67\xd5\x0d\x55\x34\x78\x6c\x41\xb4\x1a\x24\xc8\xba\x59\xf5\x00\xf1\x85\x47\xfc\xf2\xb6\x3a\xec\xb7\x79\x5a\xba\xec\xb6\x93\x30\xf1\xd4\x97\x70\x5a\xbc\xee\xed\x37\x73\x3c\xfd\x65\x12\x83\xdc\xf4\x44\x26\x07\x9e\x4c\x5c\xba\x7a\xdc\x7c\xe9\xf5\x78\x24\x67\x67\x8f\xc2\xd9\xe0\x74\xb8\x87\x43\x2b\xb7\xc7\x1f\xfd\x14\xf5\x3d\xbd\x6d\x1e\xd9\xf7\xca\xb3\x38\xbc\x02\xa7\xbd\x08\xb7\x73\x1d\xb6\xf1\x84\xd8\x2d\x44\x76\x78\x07\xf5\x66\xcd\x07\x3f\x41\x67\x12\x5d\x68\x78\x5f\x49\x89\xaf\xac\x7e\xba\xdc\x9d\x6e\x9b\xa2\x9f\x36\x06\xf5\xe1\x9a\x1d\xc9\x0a\x76\x4c\x3e\xdd\x7d\xb8\x8f\x0a\x29\x54\x92\x48\x06\xbd\x8f\x64\xec\x52\x39\x5a\x0c\x87\xe1\x38\x14\x9b\x9b\xf9\xfa\x72\xdb\x87\xf8\xd0\x3d\x1e\x1e\x5b\x37\x36\x2e\xbe\xfd\x47\x7c\x68\x5c\xf0\x81\x0e\xae\x14\x68\x2d\xa0\xd8\xe5\x6f\xa0\x38\x02\x37\xe7\x19\x7b\x23\x59\x84\xc2\x6a\xd9\xb4\x6a\xdd\x68\x31\x52\xef\x53\x9d\xd1\x41\xe2\xc0\xe7\xf1\x2f\xff\xe5\x87\xd1\xba\xbb\x23\x5d\x31\xba\xa2\x4b\x77\x4b\x2f\xc3\xfc\x86\x9e\xd8\x7c\x59\xc5\x22\xf1\x41\x4f\x37\x71\x9b\x7e\x7f\x91\x88\xd4\xdb\x2c\x09\x62\xd3\x6d\x9c\xd9\x5e\x32\x45\xbd\x82\x9b\xdf\x5d\x41\x67\x4b\x57\xc8\x97\x05\x77\x3d\x3e\x7e\x57\x70\x61\xe9\x23\x7f\x62\xd1\x85\x16\x5d\x63\xb3\xab\x96\x44\x7c\x7f\x64\x9a\xba\xb3\x6e\xde\xf2\xb1\x13\x79\xc5\xe2\x49\x7b\x99\xcb\x36\xdc\x14\xe0\x8a\xfd\xe1\x2d\xb1\x08\x7b\x66\xd9\x3e\x7d\x17\x4c\xc1\x35\xe3\x35\x4f\x29\xb7\xef\x2a\xc3\x89\x28\xc5\x43\xf2\x73\xdb\xc0\xfd\x6b\xd9\xf8\xad\xd5\x7a\x64\xb7\xcf\x96\x75\x20\x58\xcc\x93\xbd\x7c\x31\xe4\x72\x3e\x8c\x39\xf4\x93\x56\x1d\x25\xd3\xc1\x45\x82\x00\xed\x2b\xb5\xb7\x9a\xf5\x34\x81\x30\x95\x6c\xf5\x13\xbd\xda\x06\x65\x90\x5b\x66\xfd\xb1\x4d\x30\xc4\x3c\xfe\x12\xe6\xce\xd7\x42\x78\xad\x55\x7b\x47\x0b\xb8\x2b\x8a\xc7\x49\x40\xdc\x06\x65\x0b\x6e\xd7\xa7\x05\x3d\x47\x1a\x28\x64\x4b\x4f\x77\x46\x0b\x2c\x6d\x00\xb1\x5f\x4f\xb4\xf0\x98\x23\xb7\xe0\xe6\xc1\x40\x9a\x3a\x73\x13\xdf\x16\x7c\x1e\xa1\x1f\xe9\x61\x02\x12\xcb\x88\x9b\x9e\xb6\x70\xf6\x1b\x45\x73\x21\xb1\x11\xb1\x05\xad\x1c\x54\xea\x9f\x67\x13\x47\x13\xd7\xbd\x6c\xe5\x1b\x79\x0b\x97\xdc\x74\x1b\xa4\x77\x9f\x82\x8a\x74\x8c\x37\xe4\xa9\x24\xa0\xd2\x39\xb8\x6a\x57\xdc\x88\x48\x1d\xb7\xea\x9e\x78\x08\xbb\x94\xe8\x42\xa3\x55\x7b\x79\x02\xac\x75\x06\xfe\x0c\x4f\x68\xfa\x43\xb5\xb8\xaa\x3b\xd8\xa3\xdb\xd0\x1a\xd9\xb4\xa9\x51\xd3\xfd\x2f\xbb\x44\x06\x50\x1d\x10\x96\x43\x94\xa9\xc9\x9a\x87\x5e\xb7\x18\xb3\xf1\x89\xcb\xec\x72\x12\x85\x8e\xb0\x8e\x07\x03\x2e\x05\x1c\x8f\xd0\x92\x37\x2d\x2e\x79\xa9\x55\x2e\x7b\xd3\x5a\xae\x90\xa7\xc2\x96\x14\x72\x6a\xaf\xc8\x57\xa0\x60\xc8\x10\x4b\x18\x5a\x1c\xe4\x1c\x5c\x8f\x63\xa0\x4b\xdf\x92\x00\xaa\x16\x32\x33\xf2\x41\x25\x6e\x45\xe6\xf6\x5b\x2f\xeb\xee\x97\xdd\x5f\x41\xb8\x85\x07\x71\x29\xf0\xe7\x9e\xc2\xa8\x38\x90\xa9\x8d\x3c\x59\x2e\x97\xa6\x4b\x8f\x9d\xaf\xb4\xd9\x25\x73\x77\x65\xfd\x4a\x3a\x09\x47\xc8\xfe\xbb\x5a\xbb\x69\x34\x12\x8e\x38\xf1\x1c\x06\x46\x44\x76\x5a\x75\x70\x40\xc8\x0e\x6b\x9e\x4b\x94\x70\x81\x50\x67\x65\xa8\xc6\xb2\x1c\xd2\x41\x15\x81\xc6\x5c\xf3\x45\x15\x36\x73\xd1\x01\xed\x9b\xe6\x70\x3a\xe2\xa2\x60\x50\xf8\x2f\xfb\x8f\x75\xad\x0e\x42\x39\xd0\x4a\x55\xb5\x68\x26\x55\x9b\x99\xaa\x3e\x8f\xad\xa5\xea\x0e\xd9\xd9\xed\xaa\x24\x0c\x57\x65\x85\x5f\x79\xae\x45\xe9\x6f\xfc\x84\x84\x94\xe7\xa5\xa6\x8a\x66\x01\x4a\x33\x6f\xf4\x04\xba\xa5\xb5\xba\x09\x3d\x50\x72\x88\xd3\x96\xf6\x41\x69\xb4\xa9\x55\x79\x74\xd4\x6a\x59\x72\x20\xf0\x4e\xb4\xdb\xdb\x6a\x61\xc5\x18\x89\x57\xde\x8d\x15\xdd\x01\xe0\xb4\xb0\x32\xcf\x44\xab\x04\x4c\x01\x22\xaa\x21\x13\xd0\x64\x10\xbf\x20\x9e\x61\xc8\x2d\xbe\x26\xeb\x31\x00\xb2\xe4\x20\x57\x37\x81\xe1\xe1\x86\xa3\x7a\x01\x02\x98\xdc\xdc\x6c\x2d\xae\x31\x9a\x2f\x1d\xe0\x5a\x8b\x36\xdb\x01\xd2\xc2\xe6\x89\x1c\x3c\x03\x9b\x96\x86\x4d\x34\x69\x22\xa1\xc1\x96\x96\x2f\x9c\xb7\x98\xe3\xc5\x59\x8e\x39\xc5\x4b\x7d\xea\xa2\xa6\xb5\x28\xcf\x54\x11\xae\xc9\x88\x0e\xb2\x40\xaa\x79\xd6\x93\x1e\x5c\x03\x05\xcb\x36\xae\x78\x1d\x8b\x57\x7a\x32\x2b\x07\x77\x7e\x8f\xcc\x1e\xbb\xc1\x4a\x2a\xc9\x80\x80\x32\xb2\x78\x66\xcf\x78\x28\xb4\x14\xd9\x10\x8d\x24\x35\x67\xa3\x8b\x32\x65\xec\x4e\x9f\xc3\x01\x6e\x3e\xe5\xa3\xf9\xb2\xba\xf8\xdc\x95\xa0\x05\xa6\x1d\xbe\xb5\xb4\x39\x64\xed\x49\x07\x2b\x80\x93\xcb\x3b\x69\xfd\xf1\x53\x2d\x04\xe2\x8e\x4f\x9c\x5a\xab\xc3\x05\x24\xcb\xbb\x1e\x96\x4a\x8a\x1f\x52\x67\x01\x4e\xa9\x8b\x62\x7b\x40\xa8\xde\x81\x31\xc9\x03\x4a\x3d\xcc\x1f\xda\xa5\xe9\x0b\x6b\x13\x07\xa4\x20\xa1\x4a\xa2\x04\x8b\xb8\x3d\xe4\x53\x30\x5f\xad\xc2\xeb\x3a\xf0\x91\xc6\x6d\x6b\x7c\x38\x8c\x88\x9a\x1d\x41\xec\x5e\x9d\x15\x69\x00\xc0\xce\xd9\xeb\x53\xa5\x21\x18\x1c\x77\x86\x5f\x92\xed\x84\x80\x84\x77\x10\xba\x45\xaa\xce\x83\x93\x3d\x2b\xd1\x00\x24\x92\x72\x10\xb7\x30\x0b\xe3\x9d\x77\x1c\x00\xc6\xc4\xe1\x20\xa4\x45\x3b\x13\x71\x62\x2e\x6a\x13\x33\x15\x55\x42\x44\xbd\xb1\x92\x07\xc6\x02\x73\x12\x07\x4d\x7d\xdd\xa1\x54\x00\x6b\x12\x25\x4b\x48\x54\x62\x89\x12\x0e\x64\xad\x9c\xa0\xb5\x76\x2c\x23\x95\x84\xd2\xab\xde\x7d\xef\x26\x61\x59\x71\xe5\x6c\xb3\x78\x48\x40\xb1\x28\xaa\xae\x28\x85\xb1\x7b\x96\x20\x05\x50\x32\xb8\x69\x60\x22\x6e\xc5\x8b\x19\x4a\xbd\xb2\xf8\xdd\xd4\xeb\xc7\x95\x38\x77\x7c\x00\xc3\x41\xfc\x1c\x76\xdd\xb9\xea\xa6\x5e\x02\x30\x29\x15\x4b\xbd\x1e\x61\xe3\xf3\x09\xd4\xb9\xad\x40\xac\xb5\xf4\x5c\xd9\xf9\x92\x2b\xf1\x44\x5d\xa3\x88\xa5\x14\x59\xff\x58\xea\xf5\x0c\x8b\xb8\x3c\x63\x19\xd4\xf0\x50\x80\xa5\x06\x6c\x2c\xb0\xad\x6c\xee\xf5\x8a\x12\xcf\xd9\x19\xaa\x8b\x24\x20\xb6\xf4\x3c\x9d\xbd\x49\xfb\x39\xef\x85\x4b\xc6\x64\xcc\xf4\xda\x51\xfe\x11\xa2\x98\x3a\xd7\x09\x42\xb6\x3f\x2a\x47\x04\xa3\xd3\x7a\x4b\x0a\x58\xb2\x15\xa2\x78\x68\x03\xec\x43\xca\x8a\x4e\x64\x69\xca\xdf\x45\x9a\x15\x20\xde\xd6\xe8\xbe\x11\x90\x52\x1e\xeb\x6f\x63\x4f\xd6\x58\x87\xf4\x8a\x21\x0d\x61\x70\xef\xd7\x2b\x96\x9d\x95\x67\xc0\xfa\x9d\xeb\xba\x4f\x1c\xbe\x60\x41\xcf\x3d\x1f\xf2\x8c\x45\x35\x76\xda\xf2\x19\xd4\x51\x59\x57\x90\xaa\x0a\x4a\xac\xd5\x87\x34\x06\xa1\x80\x19\x08\x69\xe8\x41\xe2\x20\xe1\x75\xe4\x19\x1f\x5d\x80\xfd\x85\x52\x04\xae\xda\x48\xd3\x46\xba\xe8\xf7\x2b\x2c\x9f\x57\xad\x30\xe8\x00\x8c\x06\x30\x59\x0c\xc5\x65\x8e\xdb\x3f\x77\xd6\x86\x30\xbd\xa9\xd9\x7d\xe1\x16\x06\xfc\x67\xe7\x38\xe0\x7d\x05\xd4\x29\x04\x3f\x90\x0b\xfa\xed\x03\x01\x04\xb0\x71\x34\x29\x1b\x20\xef\xf8\x2f\x07\x28\xb7\x2f\x6c\x59\x09\xc3\x39\xd8\xfa\x38\xc0\x7b\xd9\x32\xfe\xd0\xa5\x70\x00\x3c\x81\xfe\x0a\xa5\xd4\xe5\xf3\xef\x2b\x34\xea\xa9\x04\x48\x4f\x3a\x61\x4a\x1e\xa1\x81\xb1\x34\x4e\x43\x47\x4d\x25\x5f\x30\x24\x16\x03\x1c\x71\x3f\xf1\x5f\xc0\xff\x91\x1e\x63\x12\x54\x00\xd5\x47\x08\x12\x37\xcb\xa0\xac\x23\xc0\xbc\xe3\x4d\x86\xaf\xf0\xad\x6a\xaa\xbf\xc2\x37\xc7\xfd\xcd\xd1\xfc\xfe\x92\xa7\xdf\x5f\xf6\xf3\xfb\x7b\xff\xfb\x8a\xd4\xc7\xbe\xe2\x17\x5e\x38\xc1\xdf\xf8\xef\x2b\x66\x14\x12\x01\xbf\x5c\xad\xb1\x9e\xac\x1e\xfc\x2b\x36\xbc\x5b\x4d\xbf\x10\x54\x6c\x9f\x6f\x98\x8d\x22\x82\x40\x1b\x67\x98\x9f\x7d\x7f\xc5\x8e\x57\x4b\xbf\xf8\x32\xc0\x57\x1c\x43\xe5\x22\x7c\xc5\xef\xc8\x55\x94\xb6\x8d\x32\x9d\x48\x61\x14\xfc\x42\x75\xa4\x8d\xed\x8f\xf3\xdf\x57\xa2\x2a\xc2\x8b\xf4\xe8\x06\x01\x96\x37\x2c\x36\xa1\x84\x2a\x29\xea\xfc\xaa\xcb\x27\xde\xe8\x08\x11\x05\x52\x17\x18\xdb\xbf\xf8\x18\x07\x7e\xcb\xfa\xef\xab\xf2\x1a\x0d\x00\x56\x00\xfc\x72\x28\xb8\x16\x14\xb3\xc9\xd3\xea\x2f\x88\x94\xd1\x47\x8c\x48\x0b\x1c\xfd\x42\xc1\xd4\x0c\x49\xad\x79\xb0\xf1\x10\x63\xf1\x99\xa1\xda\x6a\x29\x09\x5a\x56\xe5\x16\x56\x07\x9a\xce\x56\xe8\xe6\x17\x43\xca\x08\x43\xcc\x6f\xc5\xfb\x05\x5f\xf5\x3b\x63\xea\xbe\x39\xf6\x6f\x89\xfd\x1b\x63\x47\x05\x29\x5f\xf5\xe6\x28\x6f\xac\xc3\x89\x87\xb9\x5f\xf3\x45\x12\x2d\x09\x50\x1f\x9c\x2b\x0b\x2f\xfb\x9a\x2b\xdf\xb5\x42\x44\xfe\x11\x61\x41\x02\xe2\x7d\x66\xc0\xf4\xad\x46\xa4\x86\xbc\x5f\x43\x08\x07\x13\x86\xdc\xa7\xa6\xbe\x97\xa4\x0b\xfe\xe6\x5a\xad\xf1\x8a\x92\x5d\xff\xa7\xe3\x75\xf8\x8f\xc9\xc7\x8b\x0c\xbc\xac\x91\xe3\xf6\xaf\x29\x42\xee\x00\x61\x91\x4c\x96\x11\x07\x00\x42\xcb\x29\x16\x68\xe6\xf3\x38\x39\x4a\x52\xae\xf1\x25\xca\x35\xbe\x50\xa7\xc6\xd7\x2c\x8b\x06\xae\x72\xa0\xbf\x66\xd9\xb0\xc0\x27\xb5\xc4\x59\x52\x05\xaf\x0d\xed\x1a\x15\x67\x93\x6c\xe1\x02\x8b\x6c\x52\x5f\xf9\xa9\x0d\x12\x91\xdd\xe1\x49\x12\x97\x54\x96\x8d\x2b\x6d\xb6\xbb\x25\x1a\xf7\x26\xed\xae\x7c\x4d\x4c\x25\xee\x5a\xb3\x1b\xc2\x54\x35\x80\xa5\x34\x09\x63\x62\xba\x8a\x91\x63\xac\xa5\x3f\xc4\xe7\x15\x29\x8f\x57\x14\x61\x69\x88\x13\xfa\xf9\x19\x01\x05\x6a\x50\x41\x7c\x60\x95\xf0\xef\x13\x3e\xa8\x74\x4f\x04\xc8\x7d\x42\x8e\x69\x15\x01\xfe\xc0\xca\x4a\x07\xbc\x9f\x50\xb6\xd0\x2a\x69\xa2\xfd\x84\x9a\x51\x9d\xdf\x27\xe0\x64\xe8\x13\x70\x0b\xfe\x1f\xaa\x95\xde\xc2\x21\x50\xee\x4d\x20\x21\x31\x34\x08\x4d\xa6\x9c\x51\x21\xf4\x71\x34\x88\x71\x8f\xf0\x62\xe7\x83\x65\xde\x03\x92\xe9\x0c\x60\xfa\xde\x7e\x54\x44\x3c\x20\x5c\xbb\x7f\x44\xbd\xfb\x27\xc6\x02\xff\xa8\xd5\xb0\xf2\x1d\xb2\x60\xe1\xa4\x9f\x78\x9c\x03\xff\xdf\xff\x3e\xd1\x04\x5f\x01\xe6\x5f\x58\x1e\x7d\xd0\x7b\xa3\x6c\xd2\x0d\x1e\x68\x65\x24\x84\x9b\xa7\x8e\x44\xd2\xca\x80\x67\x4a\x44\x44\x4a\x27\xb1\x1e\x05\xa8\x11\x5b\xc2\x27\xfe\x1d\x57\x85\x90\xb4\x56\x34\x37\x08\x21\xa1\xed\xe6\xfe\xfb\x89\xa3\xe2\x3f\x4b\xb8\x28\x42\x04\x84\x05\x84\x63\xfb\x87\x75\x6d\x7d\xf6\xf0\x49\x54\xa3\x7b\x5c\xf1\xe1\x03\x01\xac\xf1\xb4\x90\x16\x2c\x00\xe4\x3c\xd1\x0a\xe5\x93\x56\xd1\xd1\xf5\x49\x2c\xe2\xe0\x93\xb2\xe6\x52\x21\x86\x92\x61\x48\x86\x1f\xf6\x00\x13\x30\x34\x29\xa6\xec\xe0\x93\x0a\x9a\xac\xa2\x00\x10\x30\xc7\x09\xcb\xa2\xd8\x04\xf4\x41\xe8\xc6\x9f\xc6\x4e\x5b\x54\xd7\x7c\x5c\xa3\x08\xd3\x50\x48\x85\x3b\xcf\xc9\xff\x70\x76\xd1\xd9\xc6\xa5\xc9\x7e\x1f\x7e\x87\x76\x90\x54\xb6\xb5\x1e\x12\xf5\x66\x80\x53\xbc\x69\x8a\x37\xce\x3d\x0e\x3b\x1f\x7e\xe1\xf4\x91\x27\x4e\x1f\x7c\xe3\xb4\xd2\x2f\xda\x73\x50\xed\xc3\xfe\xda\x20\x7b\x16\x60\xf6\x81\x09\x5f\x14\x57\x88\xc1\x1b\x8f\x04\x1f\xdc\xb9\x85\x6f\x0e\x21\x35\x04\x9f\x39\x9e\x3b\xe6\x2b\xcf\xf1\x7b\xff\xfb\x14\x9e\x8d\x31\x80\xd4\x14\x9c\x8f\x7d\x4a\x38\x3b\xa9\x22\xfa\x94\x80\xca\xb0\xf0\x17\x6d\x2e\x0c\xbd\x88\x50\xab\x0f\x7c\x05\x63\x7b\xc1\xb7\x9a\x1c\x26\x8f\x3e\x45\xc2\x11\x02\x81\xa4\x37\x0d\x7f\x84\x30\x8d\x25\x6d\xfb\x10\x43\x80\xe8\x8e\x37\x8b\x10\x61\x28\xf5\xf5\xa2\x24\x23\xc0\x24\xd7\xd7\xeb\xc6\x1f\x0e\xa8\x2e\x9f\xb5\x7e\x17\x42\x1c\x22\x7e\xd2\x3f\xa5\x4a\x0c\x75\x88\x63\x09\x77\x0c\x0e\x77\x0c\x09\x17\x3e\xe8\x9f\x52\xbf\x39\x09\xf4\x78\x0f\x7e\x73\x94\x4f\xac\x32\x0e\x17\x75\xd6\xb1\x4a\x31\x62\x10\xc4\x6c\x99\x78\xa3\xe6\x41\x00\x23\x41\xfd\x60\x9f\xfa\xa9\xaf\xb8\xff\xfb\xb0\x2e\xb9\x8f\xe8\x92\x03\x00\xd6\x7d\x07\xd3\x16\x58\x68\xfd\x67\x0e\x1c\xc3\x6f\x53\x4f\xf8\xb9\xcf\x1d\x1a\x67\x26\x09\x9c\x48\x01\xe4\xf0\x8a\x19\xef\x5e\xf0\xed\x35\xfa\x41\xed\x19\x00\x73\xc4\x9f\xca\x37\x5b\x11\xd3\x6d\x1e\x84\x57\x84\x6f\xb3\x5e\x76\xe3\x00\x50\xfa\x25\xfe\xe2\xd7\x9d\x50\xe7\xe8\xf8\x6d\x0b\xa0\x29\xee\xa6\x9a\xb5\xb0\x56\xda\x9f\xcc\xe1\x75\x37\x51\x19\x95\xc3\xb2\x88\xd8\xe4\x1c\xf8\xe3\x88\x00\xaa\x09\x00\x6d\x47\x11\x2a\x83\xc1\xc0\xf0\x55\xd4\x11\xc2\x91\x32\x2c\xa0\x72\x58\xf6\x86\x17\x6f\x18\xc1\x78\x9b\x03\xce\x2c\xf0\xa7\x63\x20\x09\x55\xae\x03\xfa\x04\x98\x41\xe1\xa0\x00\x2c\x4f\x58\x25\x2a\x6c\xe8\x06\x47\x52\xfe\x25\x77\x2d\x1d\x06\xf0\xab\x9c\xc3\x82\xbb\xcf\xf8\xcb\xdf\x5c\xc0\x51\x7e\xa9\xc8\x96\xc1\x1f\x6a\xbe\x28\x8a\x3f\xbc\x86\x02\xcc\xfb\xc7\x08\x19\x4c\x0e\x6a\x96\xd0\x52\x27\xc4\xb9\x02\xc0\x46\x7c\x0b\x31\x87\x05\xd2\xb0\xae\x51\xca\x1e\x21\x15\x27\x40\xb2\x85\xce\x9c\xc3\x1a\xa1\xc0\xd6\x9b\xd9\x2d\x3e\x6e\x76\x1f\xaf\x4a\xff\xb7\xbb\x51\x71\xc5\xab\xe2\xf6\x1a\xe5\x18\xd2\x8a\x4b\xaf\x1c\x36\xdd\x6b\x50\x4c\x59\xda\x2a\x17\x05\x5a\xa5\x0d\x62\x4a\x0d\xc6\x73\xf8\x85\xff\x1f\xaa\x9b\x0f\xd7\xcd\x07\xcc\x8e\xd7\x4a\x8d\x97\x04\xb3\xc0\x2f\xa7\xe9\xa0\x7f\x99\x1a\x28\x82\x21\x46\x92\x18\xc4\xad\xd2\xfd\x62\xa2\x54\x60\x87\x1c\xd5\x10\xc4\x66\x74\x44\x0a\x08\x23\x3f\xe4\xde\x2f\x5d\xdd\x64\xa7\x78\x89\x93\x7f\x1f\x0e\x36\xfa\xe1\xc0\x69\x5a\x90\x03\xab\x7a\x03\xa0\x1a\xdb\x85\xa0\xda\xb2\x1c\x0a\x25\xba\x68\x4b\x2f\x4b\xac\x59\x0d\x29\x65\x65\x91\x0c\x95\x25\x89\x8f\x95\xac\xd6\xbd\xe6\x95\x12\xc0\x1f\x4e\xdd\x4f\x44\x40\xfa\xac\x09\x72\x69\x97\x35\xcf\xd7\x0b\x25\xf3\x39\xe6\xac\x24\x38\x3c\x12\xc9\x81\xd8\x36\x29\x9c\x6d\x26\xf9\xed\x7b\x12\xbb\xca\x0d\xb7\x24\x6a\xfb\xc5\xda\x72\xf9\xe0\x3f\x34\xad\x99\xfb\x2c\x17\x55\x99\x9b\x94\x1a\xcc\xd9\x22\x76\xdc\x53\x7a\x04\x5e\x0e\x02\xd7\x67\x5a\x51\xa7\xa4\x22\xac\x4e\x14\x1f\x87\xd6\x9d\x2b\xe8\xa4\x9d\x65\x00\xa3\x05\x2c\x82\xb6\x44\xae\x8d\xb6\xec\x58\xc3\x6d\xd5\x9a\x6b\x6b\x62\x23\x6e\x73\x4d\x4a\xae\xad\x90\xde\xb6\x85\xb2\x56\x04\x91\xfe\x37\xfa\x21\xc7\xdb\x1e\xc7\x20\x6b\x2a\xcb\xb6\x21\xa3\xfe\xd7\x12\xed\x5f\xe5\xd0\x3e\x6c\x4d\x27\x32\x00\x30\xf4\x0b\xb3\xd1\x2e\x7e\x8f\x8a\xf0\x0c\x5c\x6c\xed\x92\x47\xa8\xb0\x9c\xa4\x3b\x71\x84\x78\xf8\x04\xc8\x82\x57\x3d\x51\x67\xf5\xdc\xff\x78\x94\xd9\xcb\x83\x99\xed\x68\x61\xd9\xc9\x75\x5f\xd2\xc5\x63\x3b\x8a\x6f\x84\x1f\x6e\x5c\x98\x75\xda\x11\xe0\x76\x4a\x95\x30\x22\x0e\x22\xf0\xc3\xab\x1e\x20\xd8\x67\x69\x20\xa5\x83\x2f\xfc\x4d\x5b\x0b\x6b\x64\x4c\xb9\x21\x44\x51\x0e\x2a\xdf\xb1\xd3\x28\x35\x76\xaa\xa5\xb1\x27\xb1\xe0\x5a\x1a\x3b\xda\xa7\xc5\x5a\xdb\xa0\xa2\xb6\x2b\xd6\x86\x1b\x7d\x17\x98\xb2\xf3\x46\x5a\xd7\x72\x18\x9c\xca\xc1\x2f\xc5\x01\xe2\xe5\x22\x06\x1c\x25\xcb\x98\x43\xc0\xa3\xdf\xdc\x76\x31\xdb\xf6\xa1\xe3\xed\x2c\x8b\x9a\xab\xfc\xcd\x1c\x66\xd3\xe6\x37\x49\x68\x56\xc6\x37\x6f\xf8\x53\x6f\x48\xf0\x65\xdf\x8d\x8b\xb2\xf3\xfd\x9e\xc0\xbe\x39\xe8\x6f\x4e\xcc\x77\x81\xf8\xbf\x6f\x1d\xd8\x11\x82\xd9\xcf\xbf\x1c\x7e\x83\x18\xff\x52\x01\xfe\x72\xf9\xfd\xce\x4c\x4d\x14\x00\xe5\xfe\xf7\xc6\x7f\x18\x9b\x0a\xb8\x45\x84\x5e\x09\x80\x67\x40\x37\xfc\xe0\x37\x03\x7e\x38\xbf\x31\xac\xec\x74\x15\x97\x34\x2e\xc5\xb0\xaa\x0b\xf4\x09\x4b\x1b\xf8\x61\xe7\x6f\x71\xfe\x16\x67\xa4\x60\x17\x00\xba\xff\x88\xf9\x07\x69\x86\x7f\xad\x48\x0a\xf1\xbc\x1f\x7e\xd1\xb2\x8b\x31\x6b\x55\xcd\x11\x9b\x51\x11\x80\x8e\x2e\xf2\x71\xf1\x34\x3a\x47\x18\x19\xb0\x4a\x64\x97\x9d\x00\x7e\x79\xe2\x72\x0b\x92\x79\x1e\x20\x4a\xfc\xba\x71\xe2\xd7\x0d\x42\x8e\x0b\xb7\xcc\x18\x1b\x39\x88\x8d\x1d\x50\xd4\xa4\x6d\x3b\xc3\x92\x0e\xfe\xa5\x4e\xbf\x6c\xba\x61\xcc\x9b\xec\x14\x01\xc4\x9b\xc6\x04\xe8\x16\x27\x62\x9e\x89\xc5\x0d\x57\xe9\x68\x88\x1d\x2e\x6e\x9c\xae\x4d\xd2\xb5\x6d\xa9\x88\x15\xba\xa3\x01\x92\x2e\x6e\x92\xcf\xd4\xf9\x98\x41\xb0\x86\x9e\xc6\x3f\x27\xf9\xdc\xe0\x6a\x98\x6a\x78\xe3\x62\xd9\x38\xf7\x9b\xa8\x55\xc9\x31\xd5\xe3\xae\x30\x35\x22\xd6\xf7\x83\x6e\xef\x28\x5e\x0c\x52\x29\x27\xb9\xc3\x4f\x30\x8a\x99\x94\x3d\x61\x48\xfa\xe7\x83\x99\x3d\x68\x13\x17\x01\x27\xe0\xa8\xd0\x33\xe2\x31\x9b\x18\x90\x3a\x82\x2c\x0f\xb4\x72\x2c\x1b\x8f\x2b\x8c\xb0\xb8\x00\x82\x47\xba\x34\x06\xbf\x1d\xff\x53\x75\xf0\x45\x98\x1c\x4b\xe7\xb4\x94\xce\xe1\x97\x41\x5f\x0a\x98\x4c\x14\xfc\x21\x1f\x38\x72\xd0\x38\x89\x04\xf7\xba\x0c\x52\xf0\x2a\x8b\x18\x71\xef\xe9\xa0\x90\xf8\x3f\xa6\xbb\x16\x6a\x09\x67\x5a\x49\xe7\xa1\x0e\xf6\x66\x84\x21\x00\xc3\xe8\xce\xda\xd0\x27\xfc\x92\xd7\x86\x5f\x5a\xf8\xa5\xd4\x9d\xe2\x65\xd4\x35\x2c\xac\xd3\x05\xe9\x67\x36\x76\x32\x4c\xe9\x08\xb1\x56\x3b\x7d\x44\x80\xb5\xb6\x73\xd8\xa3\x76\x3e\xf8\x13\xa2\xf0\x4c\x38\xf0\xc7\xde\xb1\xb8\xfb\xa8\xaf\xc4\x29\xe0\xce\x36\x76\xf8\x84\x92\x81\x0e\xe5\x71\x90\xd2\x7d\x02\x5c\xe0\x93\xd4\xb5\x00\xe0\x4a\x99\x8b\x9c\x1d\x8a\x92\x33\x3e\xa1\x55\xfa\x60\x0e\x56\x25\x85\xca\x78\x2e\xf5\xac\xa4\x17\x0b\x49\x6b\xf4\x39\x64\x5c\x95\xb0\x8b\x8f\x46\xf4\x71\x80\xc3\xfa\xa8\x0a\x07\x24\x1a\xf5\xc7\x47\xfd\xa9\x27\x4d\xf3\x11\x5a\xdc\x1f\x17\xf7\xc7\xc5\x7d\x45\xfa\x2f\xcd\x9a\x2f\x07\x00\x90\x32\x60\x44\xce\xed\xc2\x8d\x10\x6c\xbf\x30\x9d\x77\xb3\xf9\xc7\x64\x3e\x7e\x43\xf2\x7f\x38\x84\x9f\xb4\xe8\x1a\xf3\xc1\xd4\x96\x67\x20\x86\xd5\x06\x4f\xdf\xb8\x04\x1e\x1c\x5c\x70\xc2\x13\x69\x82\xce\x49\xe5\x3a\x2a\x84\xc4\xa4\x57\xa4\xa6\x47\x32\x07\x31\xf5\x04\x2b\x5b\x37\x91\xe6\x91\xd3\x2b\xf1\x17\x9f\x10\xfb\x6b\x2e\x60\xf3\xc7\x0a\x8b\x72\x5a\x54\x5c\x12\x62\xf9\x6c\x00\xe6\xe9\x48\xc2\xfd\x16\x2c\x6f\x84\x94\x5e\x44\x9c\x77\x47\x30\x1e\xa4\xe4\x15\x86\x50\xdc\x10\xc1\x11\x2a\x91\x20\x88\xf2\x2f\x27\x7c\x98\x9e\x13\x7f\x1a\x53\x84\x09\xa6\x08\x54\x46\x90\xf1\x87\x4e\x2a\x73\x7a\xa3\x96\xf8\x2c\x1b\x27\x59\xf6\x4d\x10\x54\x18\x84\xd3\x3b\xf6\x70\x25\x82\xbc\xb8\x71\x4f\xc7\xb2\x5c\xa4\xc8\x28\x32\x04\xa7\x71\x22\x3c\x04\x01\x25\x50\x36\x61\x10\xd1\x6c\x15\xd0\x77\x44\x6d\x41\x59\x94\x72\x00\xc0\xfa\x16\xcc\xa5\xb9\xf1\x50\x09\x40\x66\xaf\x69\x2b\x95\x6e\x70\xe2\x4e\x67\x4e\xb4\xe1\x4f\xbf\x23\x12\xa0\x42\xfd\x70\xb2\x3f\xf4\x4f\x19\x6e\x9b\x30\xc0\x84\x7f\xf0\x03\x90\x44\x8f\x6f\x4e\xfa\x4e\x13\x20\x96\x2c\x1f\x81\xe5\x74\x04\x7c\x77\x94\xd3\xf1\xa2\xe8\x8e\x17\x3a\x38\x5e\x18\x28\xaa\xe3\x81\x1f\xce\xf7\x11\x0d\x70\x00\x90\x53\x0e\xc2\x32\x7d\x50\x9a\x0e\x4e\xd1\xc1\x4d\x4f\xc4\x24\x11\xc2\xc6\xa6\x8a\x28\x10\x52\xdc\x74\xe3\x0d\x81\x44\x97\x50\xa5\x19\xba\xa2\xfd\x47\x00\xda\xc4\x0e\xdf\xc0\xe0\x8b\xc7\x2e\x4e\x2c\xb8\xe3\xec\x18\x93\x14\xa4\xb4\xa3\x12\x0d\x64\xfa\xe1\x73\x1e\x7e\x39\x88\x3f\x83\x5c\xa0\x48\xea\x8c\x52\x02\x31\x45\x45\x0a\xa0\x44\xf8\x9a\xa6\x22\x2b\xd3\x54\x22\xf2\x6d\x52\x40\xdb\x94\xfa\xc7\x55\x21\xa5\x4c\xa0\x38\x11\xaf\x54\x6c\x85\x8b\xad\x7c\x28\xce\x9a\x23\xf9\x1a\x6c\x3f\xc4\x81\x94\x4f\x19\x18\x27\xfc\x93\x03\x5c\x40\xb2\x6f\x0c\x98\x93\x5b\x0b\x36\x0e\xd6\x6f\x29\xaa\x2d\x73\xe2\xd5\x78\x3a\xd9\x9d\x69\x38\x03\xac\x3a\x3d\x85\xd1\x98\x97\x4e\x2a\x51\x91\xa6\x0f\x48\xa6\x33\xe9\xac\x27\xa9\x2b\x43\x48\xda\xa7\x01\xf2\x89\x7f\x4e\xe7\x89\x49\x3b\x4f\x48\xd0\x7f\x33\xbe\x59\x7e\x07\x11\x19\x03\xff\x9b\xb2\x17\x94\xfe\x9b\x95\x87\x0a\x40\xe0\xab\xc9\xfc\x21\xf5\x5e\x0f\xfe\x61\xaa\x3a\xb1\x32\xdd\xe6\xcb\x72\xba\x49\x1a\x67\xb2\xfc\x4a\x9d\x90\xe0\x8e\x7f\xaa\x8f\x26\x27\xfd\x58\xa6\xb1\x13\x37\xda\xe8\x87\xa3\x03\x34\xfe\xc9\x1e\x1d\xcc\x8e\xad\x8c\x8c\x50\x9c\x34\x5f\x86\x5f\x69\xbe\x02\xc5\x1e\x0a\x2b\x0a\xbc\x87\xb8\x19\xf5\x78\x40\x76\x8e\x49\xe6\x0b\x62\x88\x78\x64\xa6\xd7\x6c\x19\xb7\xba\xe9\x87\x72\x37\x32\x95\xe1\x50\x07\xa2\x7c\x9c\xa1\x4f\x0c\x70\x2e\x9f\x8b\x63\xb8\xa2\x82\x15\xff\xf3\x00\x74\xe9\x00\x74\xc9\xa8\x7b\xd1\x48\x74\xc5\x96\xd8\x2d\xd7\xdf\x25\x73\x96\x74\xb1\x17\x2c\x13\x1a\xa1\x2b\xee\x10\xc3\x0f\xb9\xa9\xe1\xcd\xfe\x6a\x38\xc4\xe8\xb8\xe1\x3f\x77\xe5\x1a\xc6\x4e\xff\x71\xc4\x06\x40\x15\x83\x6f\x7d\xf9\x99\x6f\xae\x38\xb4\xd5\x57\xb4\xf1\xb0\xbe\x70\xd6\xc7\x6f\x7f\xe9\x17\x9d\x62\xf6\xf1\x09\x02\x2f\x9a\x08\x63\x49\x20\xfc\x55\xe3\x61\x08\x5b\x6f\x25\x41\x27\xb9\xf2\x41\x51\x96\x9d\xf6\x5c\x97\xca\xfa\x69\x08\x8e\x0a\x71\xf2\xb4\xb7\x2e\x1a\xf7\xcc\xf2\xd9\xae\xcb\x44\x51\x0f\x04\xa8\x6b\x56\xd9\x5f\x47\x04\x39\x8a\x78\xe1\x0a\x7f\x29\xe6\x37\x0d\x14\xf8\x0b\xc5\x5b\xdf\xdc\xf2\xeb\x1b\x06\x8a\xba\xc1\x32\x43\x8a\x60\x0b\x35\xae\x98\xaf\xcd\xb6\x65\xea\xb6\xc5\xc6\x7b\xf5\x40\xa8\xf8\xb9\x59\xc0\x2f\x87\x47\x4b\xaa\xca\x2b\xaa\xba\xf9\x91\x82\x18\xf5\x02\xc4\x49\xf1\x11\x96\x27\xa4\x60\xeb\x29\x29\xc1\x29\x1e\x41\x48\x30\x8e\xcb\x92\x60\x20\x5c\x14\x85\xfe\x51\x0b\x24\x80\xe9\x28\xd8\xf0\x60\x28\xa4\x66\x80\xcd\xaa\x6c\xa1\xd0\x65\x36\xc0\xf1\x12\x94\x96\x30\xa9\xb4\x0b\xe7\xb3\x6c\xb6\x43\x52\xcb\x46\x22\xc6\x10\x49\x70\x1d\x96\x34\x89\x83\xc5\x87\x22\x00\xbe\x43\x26\x1f\xdf\x09\x9b\x55\xc5\x6f\x41\xad\x34\xae\xe3\x6f\x97\xdf\x81\x00\xad\x71\x1c\xac\xf5\x44\x82\x1e\xcf\x5d\x35\x51\x0e\xe6\x6b\x85\x31\x10\xd0\xb9\x53\xc7\xad\x38\x72\xd6\xb3\x27\xaa\xa5\xff\x26\x4b\xb8\xcd\x6c\xdf\xa4\x03\xb5\x95\x4b\xa8\xad\x52\x42\xb2\x99\xc7\xfb\x9e\xb5\xad\x34\xed\xae\xb2\x94\xac\xfc\x66\x22\xd7\x56\xfe\xe5\x2a\xdd\xa0\x53\xa6\x3b\x7c\x52\x71\x27\xa8\x62\xd7\xd3\x0e\x47\x81\xcc\x05\x06\xcc\x3a\x57\xfc\x47\x85\x3a\xe9\xc5\x16\x02\xf0\x3c\x1b\xd3\x86\xac\x53\x0a\xe1\x17\x83\x9d\x18\xc3\x1c\xec\xf9\xa2\xe5\x4e\x9d\x17\xfd\xf2\x68\x54\x65\x34\xaa\x97\xa4\x5b\x06\xa4\xaa\x03\x12\x20\xca\x05\x0d\x48\x55\x87\x9f\xaa\xab\x85\x8a\x4f\x93\x3e\x04\x28\x2b\x3c\x1a\x7d\xc3\xdf\x8b\xfc\x7f\xd3\x34\xa0\x7e\x63\x04\xdf\xb2\x6f\x05\x88\x1d\xcb\x06\x19\x20\x88\xea\x9b\xd2\xff\xcd\x69\xfa\x96\x24\x7d\x63\x42\xbe\x31\x50\xac\xf2\xef\x4e\x0e\x3a\xd9\xff\x48\x85\xff\xd4\x95\xbf\xc3\xf5\xc6\x5a\xfd\x8d\xb4\x69\x81\xe0\xfe\x67\x1b\xd4\xf3\x85\xd3\xe1\xc9\xea\xc0\x68\x5e\x3f\x4d\x39\x98\x60\xfc\x74\x22\xa6\xd6\x82\x90\x10\x7d\x68\xe7\x02\xa3\xf1\xb4\x8d\xc3\x49\x8a\x08\xe9\xb7\xa3\x0b\x1e\xd2\xe6\xf2\x81\xc0\x16\x59\x7f\xcc\x65\xea\x42\x62\x2e\x33\x53\x78\xa8\x8b\x1d\x03\xa2\xb9\xdb\xdc\xb6\x20\xdb\x45\x73\x13\xd9\x87\x79\x7e\xe2\x77\x80\xa9\xd2\x3c\x70\xdc\x9e\x30\x0b\x65\x57\xc7\xab\xf6\x80\x2f\x1a\x00\x43\x82\x31\x8d\x47\x92\x3b\x1d\x88\x2d\xc5\xb2\xc7\x32\x8f\x13\x3e\x7f\x7c\x1b\x26\xcb\x6d\x18\x04\x50\x33\x78\x2b\x86\x24\x36\x64\x12\xd4\x8a\x3f\x98\xca\xb2\xec\x91\xaf\xf9\x23\x11\x44\xea\x52\xf3\xa4\x6e\x3d\xa9\x57\x4f\xee\xd4\xb3\xe0\xdd\x54\xb2\xa0\x97\x89\x79\x96\x8f\x8c\xa5\x93\x1e\xca\xd1\x2f\xc5\x06\xf1\x9f\x38\x85\x9e\x27\x05\x8c\x7b\x13\xb3\x4b\xfd\x60\x3a\x3b\x6d\xc8\xe0\x2f\xc6\xd3\xe1\xcb\x8f\x07\x71\x18\x6e\xd7\x7d\x80\x49\x57\xd3\xe0\x97\xbd\x0c\xf1\x42\x67\x3d\xa6\xc7\x8e\x4e\xef\x56\xfe\x55\xef\x5c\x86\x1d\x3e\x16\x93\x0e\xe7\xe6\x88\x3a\x73\x9b\x7c\x4e\x37\xf1\x9e\x46\x9e\x3f\x93\x64\x76\x13\x42\xab\x1b\x37\xed\xee\x25\x94\xb1\xb3\xaf\x7b\xd9\x8b\x6e\xb2\xdf\xc7\xb9\x87\xb2\xe1\xe7\x4a\xb0\x4e\x1d\xd1\x60\xa8\x33\xb9\xad\x81\xcc\x36\x0e\x90\x2d\xf7\x03\x57\x63\x50\x84\x08\x0e\xba\x72\x92\xef\x42\x47\x28\x77\xf9\xa1\x2e\x7f\xeb\xde\xc8\xad\x31\xd4\x52\x02\x8e\xdd\xb7\x4e\x59\x6f\x1c\x8d\x09\x49\x09\xf0\xde\x00\x9d\x53\xdd\x74\xa7\x03\x7e\x69\xa6\x7f\x8f\x5d\xf7\xb1\x31\xdc\x23\x2c\xe1\xd5\x22\xfe\xd2\xc5\xea\xc3\x0e\x66\xf1\x03\x48\x13\x19\x82\x54\x0f\x82\x21\xa9\x47\x58\x3e\xa9\x84\xef\xb8\x32\x1c\x15\x4f\x1e\x8e\x80\x4a\x43\x8f\xb0\x34\xd9\x36\x42\xbc\xe4\x44\xdf\x60\x62\xb7\x42\x1c\x53\x10\xc9\x97\x19\x89\x6e\xed\x12\xb3\x95\x0a\xf2\x23\x8e\x58\x6d\x4f\x8d\xcc\xf4\x95\x20\x52\x79\xd7\xe7\xc8\x88\xc4\xf8\x52\x33\x61\xde\x88\x63\x22\x11\x70\xa3\x20\x4c\xb7\x9d\x09\x0f\x69\x12\x4c\x69\x13\x0e\xc8\x94\x70\x38\x0d\x50\x08\xeb\x12\x4e\xf8\x59\x51\x40\x09\xa1\x3e\xf0\x57\x38\x74\xf9\x23\xac\x2d\x6d\x21\xd3\x32\x49\x58\x0a\x05\xf0\x6c\xf5\xdf\x11\x62\xc1\x37\x0b\x47\x88\x7d\xd4\x0e\x26\x5b\xf8\x4d\x85\x7c\x23\xbc\x01\x6c\x75\xe0\x2f\x17\xcb\xa6\xe2\x49\x08\x37\x42\x52\x13\x1b\xea\x7d\xa2\x64\x6f\x25\x76\x76\x88\xa8\x08\x22\x87\x71\x28\x70\x15\x85\x74\xbf\xd7\xa6\x77\xf8\xd9\x8c\x6f\x18\x09\xab\xdc\xac\x90\x49\x31\x23\x21\xb9\x58\x62\x8b\xa7\x86\x02\x22\x36\x8c\xad\x24\x11\x78\x8f\x04\x35\x97\x2d\xd1\x11\xb6\xe0\x17\xf0\x88\xf5\xc4\x08\x98\x09\x85\x3a\x42\x5a\x23\x97\x19\xa0\x0c\x65\x95\xe8\x44\xe9\x08\x69\xc3\xfe\xc0\x6f\x9a\x00\x60\x43\xe6\x3b\xce\x47\x48\x05\xff\x8d\xa0\x5d\x23\x41\x3d\x7f\x45\x6e\x97\x5f\xf2\xfe\xf4\x08\x1f\x76\xf0\x91\x8e\xf3\x89\xf8\xf4\xff\xdf\x11\xb2\xa6\x25\x93\xe4\x35\x02\xd6\x94\x81\x41\x47\x37\x47\xba\xa3\xcb\x14\x85\x47\x50\x0d\x01\xa7\xd8\x33\x2a\x07\x8b\xab\x42\x2a\xd3\x1c\xd6\xaf\xd9\xd5\xbc\xd5\x44\x89\x40\x21\xf8\x08\x58\x94\x05\xbb\x40\xd9\x16\x14\x53\xa3\xff\x89\x53\xd5\x24\x46\x1a\x4f\x8f\x90\x51\xc3\x0e\x16\x39\x66\x36\xc7\x55\xab\x92\x30\x7c\x73\x01\x6b\x65\xe6\x78\x91\x7c\xd9\x23\x64\xfe\xd6\x03\xda\x0a\xff\x04\xb6\x3a\xce\x46\x37\x84\x51\x44\x11\x17\x66\x2e\x30\x41\xe3\x51\x26\x8b\x8c\x65\x80\x34\x7c\xe5\x5a\x6e\x4c\xea\x99\xb6\xdd\xaa\x3c\x63\x8f\xc8\x97\x19\x5c\x81\xdb\xf7\x01\x9e\xa4\xdc\x49\xf8\x11\xca\x3d\x7a\xcb\x98\xa0\x32\x90\x04\xe2\x10\x72\x1c\x72\xf9\xfc\x08\x45\x14\xac\x12\xe4\xdd\x1a\x22\x5c\x74\x25\x6c\xd4\xd9\x4b\xe8\xec\x67\x50\xc5\xcb\xd3\x56\x27\x5c\x49\x21\xc6\x54\x44\xbd\x04\x43\x71\x8d\x45\xa0\xa3\x72\x89\x53\xde\xde\x1d\xa1\xc0\x87\xf6\x08\x85\x24\x46\x13\xa0\xcc\x94\x2d\xa2\x67\x5c\x20\xd1\x2f\x8e\x45\x30\x65\xc3\x53\x1e\x2a\x07\xf6\x96\xde\x6c\x8b\x40\xbe\x0b\x25\xbd\x6b\x5e\x19\xb4\x03\xc1\x39\xa5\xc7\x10\x6e\x8a\x86\x9a\x4b\x69\x7d\x30\x2a\x49\x77\xe6\x94\x64\x49\x09\x7f\x5a\xa8\x63\x16\xce\x66\xc1\xe9\x04\x01\x0d\xa8\xf0\xd4\x82\x21\xb9\xa7\x9e\x5d\x6c\xf4\x29\x76\xbf\x51\x05\x56\x1d\xa1\xfc\x37\x03\xfc\x70\x50\xe2\x76\x92\x25\xcc\xfd\x18\xbd\x03\x3e\x36\xe1\x4c\x08\x25\x3b\x92\x61\x8d\xe4\xcc\xf2\x4d\x3c\x4f\x76\xdc\xc2\xe4\x11\xbe\x2d\x3c\x1b\x3c\xf0\x92\xc2\x11\xda\x16\x28\x42\x04\x43\x9b\x25\xbf\x78\x07\xd0\xc2\x45\x49\xc0\x93\x77\x1e\x6b\xf1\x54\x08\x7e\x30\x93\x2d\x0d\x76\x81\x4b\xbd\x23\xb4\x0f\x16\x52\xfb\x44\x29\x75\x80\xb8\xea\x3b\x42\xcb\x41\x7a\x5b\xa3\x51\xad\xd1\xf6\x18\x00\x4c\xd4\x41\x7a\xa7\x8e\xd0\x5a\xb2\x26\xdd\x70\x97\x04\x7e\x69\xd5\x70\x84\x46\x93\x3e\x06\x58\x6b\xad\xef\x9c\xfd\x06\x13\xc0\x23\xb4\x11\x73\xa0\x5f\x7c\x6a\x8f\xd1\x0c\xce\xd1\xb8\x25\x07\xe3\xe6\x2f\xf8\x83\x90\xab\x2b\xca\x88\x07\x90\x10\x8c\xae\x54\x06\x9d\xf2\xda\x3f\x1c\x2f\xbe\x6d\xe3\x96\xd1\x79\x34\xe8\x9d\xd2\xd9\x3b\x27\x93\xae\x74\xc3\x2f\x37\x1c\x58\x30\x1e\x28\x09\x97\xba\x8c\x4e\x57\x19\x92\x6d\x92\x0e\x88\x90\x3b\x20\x3e\xbc\xc6\x58\x86\xfa\x90\xb4\x70\xdf\xee\xa3\xaa\x2c\x28\x60\xb3\xbd\x82\xf8\x21\x5c\x8b\xb7\xa2\x80\x07\x1f\xe5\x23\xe2\xa0\xa1\x34\x19\x34\xf2\x42\x40\x72\x3c\xb0\x5b\x8f\x5d\xaf\xd1\xe2\x39\x2f\xfc\x97\x00\x5a\x0a\x6d\xa1\xc9\x14\x63\xf2\xd8\xf4\x7d\x33\x11\xda\x76\x26\x5c\x17\x81\x07\x89\x2a\x44\x0c\x1f\xdc\x3e\x98\xe1\x73\x40\xaa\x9b\xd1\x38\x37\x00\xb0\xe4\x00\xdc\x34\x23\x18\x03\xff\x61\x9d\x0d\x2d\xee\x61\xc5\x4d\x1b\x81\xa8\xcf\x59\x06\x1a\x54\xed\x0c\x3f\x83\x7b\xc5\x5c\x33\x66\x6a\xd2\x70\x35\x7b\xcd\x11\x07\xf1\xef\x0d\xeb\xf9\xfb\x43\xcd\xea\x27\xfd\x33\x31\x73\x84\xd2\x19\x57\x61\x07\x06\x76\xa3\xcf\xbb\x52\xd6\x7f\xa5\xfb\xfe\x52\x93\xf9\xe5\x16\xf3\x7b\xff\x3b\x62\x58\x2b\x5d\xe3\x38\x62\xc0\x98\x62\xc0\x79\x42\x0c\x34\x7a\xe1\x2f\x38\x8f\x21\x8b\xbb\x8c\x1e\xf9\x8d\x2a\xa0\x54\x36\xcc\x34\x41\x71\x86\x62\xcf\xf1\x84\xe1\x88\xa1\x67\xf9\xe5\x60\xbb\x86\xdb\x29\x3c\x39\x67\x27\xc8\xae\xe5\x9c\xfd\x88\x01\xab\x25\x86\xc1\xfe\x87\x78\x87\xef\x5f\x5c\xf6\x40\x97\x20\x19\xe2\x3d\x7e\xc1\x43\xb1\xde\x06\x3c\xe2\x4a\x8f\xd1\x8e\xb8\xae\x99\xf6\x1f\xf0\xa9\x74\xbc\x30\x10\x14\x03\x84\x3f\x85\x7e\x58\x68\x09\x89\xed\xc3\x3a\x64\x01\x7e\xe2\x90\xfb\x51\x5c\x39\x19\xf0\x2b\x9f\x4b\x25\x54\x60\x6b\x5a\x64\x8e\xc5\x98\xdd\x40\x3f\x6f\xb2\x37\x4c\x26\x74\x0d\x03\xb0\xa6\xac\x2e\x2d\x0a\x48\x14\xde\x3c\xe0\x67\x72\xab\x20\x44\x05\xbf\xce\x8e\x1d\x36\xc6\xcf\xbf\x23\x6e\x41\xdf\xda\x02\xa1\xc5\x09\xc4\xa0\xcb\x11\xbc\xef\x31\x76\x76\x90\xab\x7d\x39\x91\xe2\xb9\x03\x96\xc9\x16\xf8\x0a\x21\x40\x59\x4f\x00\xe4\xe5\x44\xdc\x82\x3c\x56\x54\x8c\xe6\xbc\x6a\x8a\x39\x94\x65\xaf\x59\xb0\xfe\xca\xec\x04\x49\x57\xb7\x49\x11\xe5\x07\x2f\xed\x9d\xb1\x1d\xea\x98\x81\x4e\x8d\x22\x87\x9d\xaa\x34\x2c\x84\x5c\x7b\x80\x35\x78\x91\x91\x46\xb7\x35\x35\x01\x39\xb1\x2c\x56\xc1\x62\x5e\xbf\xe1\x07\xdf\x75\xd0\x2f\x5b\xd4\xb5\x05\x0d\xa9\xf2\xcd\xd5\x23\xb2\x28\xfc\x23\xea\xf6\x0a\x8b\x78\x8c\x9e\x54\x2d\x50\x15\xff\x88\x7a\xdd\xc5\xaf\xb4\x35\x00\x58\xb7\x00\x7e\xd9\x96\xd7\x4f\xb1\xe0\xc5\x42\x74\x87\x90\xbc\xf0\x35\x13\x00\xa4\x92\xe1\x88\x85\x6d\x58\xb2\x24\x21\x2e\x64\x80\x75\xa9\xcb\xa2\x16\xc8\xd8\xae\xd3\xbc\x1e\x10\xaa\xc7\x96\xe2\x2e\xf5\x0c\xb3\x93\x17\x84\xe4\xbe\xb6\xb6\x87\x8d\x30\xdb\xf6\x48\xc3\x85\x9c\x6f\x03\xda\xe3\x95\xb0\x43\x8b\x70\x4b\xa7\xa8\x94\x21\x9a\x0d\xfd\x91\xda\x2b\x63\xb7\x34\x8c\xbd\x4a\xd3\x27\x41\x27\xe4\xff\xdc\x39\x6b\x6d\x61\x15\x52\x08\xcf\x51\x11\xc4\x42\x1d\x07\x65\x83\x4b\x65\x11\xa1\xb1\x33\xb6\x25\x51\x9a\xdb\x92\x38\xcd\x6d\x99\x5c\x23\x88\x30\xf4\x55\xce\x99\x8f\x88\x9d\xb4\xd1\x20\x85\x02\x08\x78\x8a\x12\x5b\x5a\xf9\xe3\x88\x13\xbe\x28\x0d\x46\x9b\xa3\x0c\x9a\x8d\x4f\x63\x11\xf1\xed\xf6\x23\x36\xdd\x90\x01\xbc\xd0\xbc\x29\xb6\x46\xe3\x62\x6b\x3c\x2e\x36\xcc\x50\x87\x36\xf0\x0f\x45\x84\xba\x9e\xaf\x02\x43\x05\x72\xbb\xeb\xfb\xdc\x02\xfc\x52\xb6\xa8\x02\x3b\x86\xdf\x6b\x38\x51\xc7\xfb\x42\xad\xa5\xbb\x54\xb8\x17\xfc\x48\x1a\xf7\x66\x7d\x46\x0f\x70\x95\xb1\x80\xa0\x98\xd2\x08\xd4\xeb\x16\xfa\xe0\x14\xd5\x2d\x4b\x1c\x5b\xae\x0a\x4b\x20\xf1\x07\x40\xdc\x78\xd5\xff\x67\xb7\x24\x76\x37\xcc\xd3\xab\x72\x09\x99\xce\xf9\x04\xa9\xe1\x2d\x89\xe4\x0b\x44\x00\x45\x38\x35\xe1\xda\x02\x35\xff\x0e\x6b\x2b\x41\x58\xe2\x32\x03\x8b\x38\xe1\x8a\x23\xe0\x3f\xd9\x1c\x8a\xf2\x50\x8c\x11\xe5\x40\x25\xb4\x22\x54\x21\x05\xc2\x0a\xdb\xa8\xdc\x66\x24\xb1\x08\xb2\xa2\x80\xd5\xba\x28\x30\x43\x41\xaf\xf1\x14\xf7\x04\x39\x24\xbf\xc3\x84\xf2\x60\xb1\x81\x0d\xf9\x06\x22\xd0\x71\x4f\xe4\x93\x13\xb2\xfd\x90\x07\xe5\x80\x9f\x33\x33\x15\x2e\x8b\x48\x2b\x81\xb1\x84\x7e\xee\x55\xdc\x10\x64\xaf\xe7\xde\x82\x26\x51\x88\xda\xdd\xdd\x13\x75\x56\xe2\x34\x3f\xfd\x5e\x76\xd7\x10\x46\xe8\xd2\x99\x11\x8a\x3b\x16\x96\x87\x70\x8f\xb4\xf2\x27\xac\x2e\x44\xea\x29\x11\xad\xfe\x11\xf0\x5a\x04\xe3\xdf\xca\x2e\x7e\x2b\x99\xa0\xb8\x73\xf1\x17\x0f\x91\xb7\x65\xa4\xf6\xff\xa1\xec\xd8\xf7\x4f\x68\xcf\x06\x86\x42\x1e\x8b\xb0\xb9\xbb\x5a\x79\xb6\x7e\xa4\x67\xd0\xd3\xee\x23\x8e\x3d\xe2\xd6\x41\xa4\xa7\x88\x81\xe1\x0f\x36\xd7\xfd\xe6\x38\x01\xac\x37\x55\x7b\x5a\xa6\xb4\x54\x9a\xe6\x92\x1f\xfe\xc8\x73\x47\x1d\x9a\x53\xfb\x0c\x8d\x47\x4a\x1a\x89\x71\x50\x42\x13\x66\x80\x36\x8f\x18\xcd\x7d\x20\xc6\xe0\x86\x39\x74\x4e\x36\x4b\xa2\xff\x01\x06\xd4\x14\x50\xde\x02\xfd\x62\xc1\x08\x12\x53\x34\x5b\xe8\x21\xc6\x81\x2f\x06\xe1\xa7\xd5\x50\x02\x6f\x0d\x7b\x86\xbe\x96\x56\x5f\xfc\x21\x42\x9c\xd4\x14\x5b\x06\xa1\x45\x01\x9e\x30\x30\x91\x32\xf6\x4c\x6c\x49\x22\x8b\x32\xdd\x21\x36\xe6\x7d\x7b\x13\xf5\xc3\x9f\x60\xc1\xea\xb6\x4a\x3e\x05\xab\x2b\xa7\x5e\x00\x0d\x68\x80\x05\xe4\x84\x8c\x78\x0e\x3d\x30\x6a\xba\x62\xb9\x52\xab\x22\xac\x1d\x8d\xb6\xac\xe5\xa1\x6d\x2e\x3d\xb6\xb0\x91\x59\x4e\x1e\x59\x90\xd6\x62\x58\x6d\xf0\xb1\x13\xae\x83\x80\x96\x48\x33\xb9\xf4\xd8\xcf\x06\x76\x86\x1c\x6b\x79\x14\xd6\xc3\x48\x02\x3c\x43\x0b\xbc\x1e\x47\xba\xd7\xf1\x4c\xb1\x8d\x21\xcc\xcc\x2d\x7f\xb4\x93\xee\x92\x27\xb7\x4b\x8e\x98\xc5\x7b\x78\x22\x21\xa1\xac\x22\x8e\xd0\xe7\x57\xa6\xc2\xe9\xb9\xb3\x9e\xfc\xce\x3a\x10\x9d\x1b\x23\xa1\xd1\x1f\x66\x58\x09\x96\x26\xfc\x83\x67\x9c\x08\x71\xdf\x25\xad\x09\xfe\x89\xa9\xbc\x51\x3c\xd2\xda\x42\xa7\x0c\xaf\x7d\x4f\x27\xfe\xce\xe3\xc0\x05\x68\x5a\xbf\x03\xfd\xc4\xf8\x21\xd7\xdf\x28\xb3\xd1\x30\x3a\x7b\xbf\xa1\x13\xa6\x37\x5e\x89\xa7\x5f\x8c\xe6\xfd\x06\xdb\x6d\xa7\x25\x18\x01\xb4\xd8\xf6\x81\x36\xa5\x42\x77\x41\xa5\x84\x38\x45\x64\x88\xf9\xdc\xf4\xe6\x23\x63\xf8\x62\x21\xc2\xad\x81\x94\x03\x9d\x03\x1d\x29\xaf\xf8\x2f\x7e\x9f\xad\xd6\x37\x63\x74\x82\xaf\x79\xe0\x17\xc5\x2c\x11\x20\x93\x0f\x25\x29\x7f\x38\x45\xf9\xc3\xfd\x39\x7f\x7a\x3d\x4f\x2a\x33\xc2\xe4\x1e\xff\xe3\x60\x03\x3f\xef\x1c\x67\x23\xc8\x0f\x33\x08\xd3\x24\x19\xb7\xc8\x69\x69\x0d\xcb\x6d\x8e\x32\xf3\x5e\x61\x3a\xe0\x8f\xbb\x90\xb4\x8a\xa3\x76\x99\x93\xca\x52\x2f\x15\xd9\xa4\x4a\x25\x34\x7c\x2b\xa4\x5a\xc5\x8f\x54\x16\x4a\x23\x3e\xa4\x82\x1f\x9c\x6d\xca\xeb\xe3\x43\xae\xce\x1d\x28\x3a\x45\x7a\x82\x62\x8c\x13\x77\x0e\x52\xe1\xb1\x34\xc1\xb8\x99\x0a\x27\xbb\xa4\x83\x62\x4e\xfd\x93\x1a\xc7\x6d\xa7\x27\x88\x1b\x15\x2a\x41\xae\x9f\x52\xa1\x58\x8a\x6e\xfd\xa3\x70\x42\xf2\xf1\x83\x1b\x12\x3c\xcd\x49\xf0\x81\xa4\x45\x33\xca\x92\xe3\xc6\x4d\x93\xd2\xc4\x73\xd2\xd4\xb8\x9a\xda\x47\x0d\x20\xc9\xad\xc9\xa7\x2d\x35\xba\x50\x84\x80\x73\x8e\xc5\xd3\xc3\xb2\xcc\x8e\xc9\xee\x61\x65\x99\x0f\x46\xbb\x60\x18\xd6\x7f\x19\xe3\x7c\x55\x31\xde\xc3\x24\xd8\xe2\xce\x2a\xb2\x8e\xd4\x5f\x71\xab\x78\x61\x0b\xf0\x1c\x83\x8e\x0a\x52\x5f\xa2\xbc\x5e\x47\x92\x33\x0b\xf3\x3c\x50\xc2\x16\xdd\x65\x01\x9c\xa8\x5a\x3a\xa9\x9c\x5f\x15\x72\xf0\xcb\xcc\x23\x5d\x62\xb3\xa6\x80\xd7\x75\x84\x2d\x43\x6c\x64\x83\x1b\x10\x76\xc7\xce\xba\x7a\xc9\xfa\x0d\xbd\x5a\x92\xf6\x8e\x81\x84\x89\x00\xae\x5a\x2e\xac\x02\xf5\x48\x7d\x9b\x89\x33\xee\x95\xa4\x22\xf5\xd2\xc4\xc1\x60\xc4\x23\x71\x81\xc9\x13\x99\x83\x64\x50\x51\xce\xeb\x76\x17\x87\xfa\x30\xc2\x25\x70\x86\xe5\x13\x36\x0a\xe2\xa4\xe7\xd5\x80\x1a\x34\xe9\x33\x0b\xab\x93\xc0\x7c\xe5\xb4\x48\x8c\xc8\xe8\xc4\x23\x75\x92\x20\x07\x1f\x1e\x49\x6d\xdb\x6f\xce\x50\xdf\xc3\x49\x55\xd4\x39\x85\x43\x0e\xa1\x10\x92\x1d\x8f\x4b\x5d\x86\xa5\x3e\xa4\x8b\xc3\x92\x92\xce\xe8\x01\xdf\xf4\xff\x24\x2b\x7c\x0d\xd5\x47\xad\xc0\xe8\x6c\xff\x48\x63\x6f\x69\xe5\xcf\xb5\x5c\xf5\x23\xc4\x89\x53\x41\x95\x47\x1a\x95\x34\x48\x51\xeb\x1f\xdc\x21\x46\xc3\xa3\x35\x1c\x56\xe8\x60\xd2\x9e\xc0\x8b\xb6\x84\x23\xfd\x60\x6c\x3f\xdc\x88\x7e\x6a\xbe\x69\xcb\xa9\xe0\xbd\x47\xf8\xa1\x0f\x76\xe5\x83\x8f\xfa\x7a\x61\xb7\xa3\x4b\x6d\xf8\xc3\xf7\xe5\x08\xff\x0a\xd6\xa5\x97\x42\x48\x02\xe4\x11\x55\x17\x1c\xb0\x08\xc3\x2f\x2c\x01\xde\x5b\x00\x52\xf8\x87\xed\xa4\xce\x2b\x1d\xed\xd6\x55\xa4\x7f\x00\xc4\x6b\x17\x00\x30\x4d\xa4\x0d\xe6\xa8\x58\x0d\x95\x2a\xa1\x26\xc4\x2d\xc0\x7f\x32\xe0\x8a\x50\xd9\x37\x47\x4d\x83\xbd\x0c\xf1\x04\x75\x54\x33\x26\x29\xf3\xde\x45\xcd\x2b\x1a\xca\x29\x38\x5d\x82\x3e\x2a\x0c\xce\x74\x02\x51\x61\x4c\x96\xc4\xe5\x3c\x79\xa3\x82\x21\xb4\x56\x84\xbc\xad\x5e\x33\xf6\xfa\x9a\xef\xd7\x4a\x17\xe4\x09\x63\x66\x01\x90\x91\x68\x33\x20\x44\x66\x25\xd0\x76\x33\x02\xca\x15\x0c\xee\xab\xfc\x62\x10\x25\xac\x31\xf3\xa2\x07\x88\x94\x63\xd1\x9d\x53\x3c\xd1\x55\x07\x4d\xc3\x6c\x7c\x3f\x4f\xb0\x7a\xd4\xf1\x1a\x31\x1b\xd2\x25\x55\x40\xb4\x45\x52\x0b\xa9\xa5\x3b\x6a\x59\xf9\x37\xf2\x87\xa7\xb2\xba\x02\x00\x77\x5c\xe9\x97\xeb\xa0\x6c\x95\x8e\xe4\x11\x51\xc1\x51\xd3\x2b\x89\x9c\xa6\xcc\xc1\x25\x7e\xd1\x6c\xe7\x84\x0c\xd8\x5a\x5b\x53\x21\x1d\xbf\x47\x2d\x2c\x43\x09\x10\xff\x56\xfc\x27\xa5\x56\x2d\x1b\xf5\x45\xe7\x88\x80\xb2\x66\x93\x25\x33\x12\x52\xdd\x73\x42\xd5\x4d\x3b\x39\xa3\x28\x3c\x90\x53\xe1\xc4\x00\x2a\x7b\x62\x71\x97\x29\xa7\x22\x08\x50\xa0\x38\x96\xf3\x00\xc0\x75\xdc\x39\xae\xd5\x0c\xb8\x55\x22\x1a\x52\x15\x75\xb9\x97\xcc\xde\x57\xfd\x95\x49\x22\x10\x12\x6f\x87\x50\xf7\x0e\x6b\xa9\x56\x65\x32\x16\x33\xd2\x02\x61\x31\x81\x47\x35\x01\x31\x87\x0a\x7a\x15\xd4\x9d\xb1\xba\xd6\x0b\xa3\x0f\xc6\x09\x46\x6e\x76\x34\x7b\x36\x2c\xae\xee\xc2\x62\xbe\x81\xed\xf7\x4a\xd2\x0f\x84\xb0\x1f\xbc\x3a\xf1\x43\xd5\x94\x16\x89\x3f\x87\xd1\x14\xf3\xb5\x7d\xc2\x43\x22\xe3\x09\x4e\xb5\x57\x06\x80\x6d\x2f\x1a\x48\x94\x58\x58\xc2\x20\x41\xd9\xd2\xa8\x76\x4c\x5a\xfd\x31\x29\xca\x13\xb4\x31\xc4\x9d\x08\xd4\x62\x97\x6a\x6a\x31\xd1\x81\x48\xf6\xb0\x19\x96\x7e\x51\xcf\x7d\xec\xb5\x6c\x1c\xee\xb9\xdf\x59\xab\xc1\x2e\x35\x00\xc9\x51\xf2\x73\x4a\xd7\xaa\x67\x95\xee\x89\x90\xad\x6b\xb6\x3a\x3b\xab\x39\xa6\x47\x72\x00\xdb\x6e\xad\xb0\xc7\xd3\x12\xd9\x2b\x1d\x04\x20\x94\x2a\xb4\x2d\x72\x20\x23\x2d\x92\x57\xc4\x66\x81\x8b\x6d\x44\xb2\xbf\x81\xe4\xb6\xd0\xef\x9c\xc3\x4b\x2c\xee\xc3\x95\xee\xd8\xa3\x25\x5a\x08\x67\x8d\x97\x33\x84\xc4\x89\xf5\x1a\x7c\x32\x40\xdf\xa1\x62\xef\x07\x98\x6c\xf9\xd6\xa4\xf0\x3d\x30\x84\xb7\xa0\x2b\xd0\x6d\x8b\x5a\xea\xef\xbd\x49\x09\xf5\x2a\x71\x76\x6d\x68\xa8\x66\x08\x7e\xf7\x8c\xcd\x91\x1e\x3c\x52\xbc\xb6\xdb\x51\xcb\x38\x6a\x4b\x39\xf3\x83\x96\xa3\x16\xd1\x87\x2b\x50\x46\x4b\x0c\xe5\x57\xdd\xd5\x95\xbe\x60\x75\xe5\x2f\x58\xc5\x8f\x15\xcd\xd8\x2a\xbd\x08\x85\x5f\xf6\x5e\x4b\x4e\xe8\xaa\xf4\x1d\xaf\x36\xd5\x4a\xba\x78\x3f\x08\xd1\x00\x87\xb7\x0a\xae\xce\x08\xf0\xa4\x18\x4e\x8e\x00\xd6\x31\x55\x2e\xbd\x01\xe2\x11\x0b\x00\x26\xa9\x31\xd5\x06\xd5\xe4\x04\xaf\xb6\x17\x36\xab\xf6\xa2\x0b\x49\xb5\xad\xb2\x34\x01\x88\x25\xda\x22\x25\xb9\x6d\xa1\xf0\x58\xc1\x5a\xba\xa1\x84\x5e\xb3\x60\x00\xec\xa6\x04\x4c\x0c\x57\x30\xbe\xeb\xc4\x6e\x45\x93\x18\xdc\xfa\xb3\x21\x8a\x99\x62\xe9\xeb\x8a\x29\xdd\xd0\xcd\x9c\x7f\xf3\x3b\xcc\x9c\x2a\xa6\x0d\x96\x91\x48\x10\x93\xa2\xc2\x4b\x8e\xda\xa5\x81\xf1\x86\x6d\x95\x0d\x5b\xbc\x52\x7d\x54\x3c\x5f\xc6\x35\x38\x07\x82\x90\xcc\xc8\x03\xbf\xc7\x05\xc0\x4b\xd2\x3a\x76\x74\x40\x93\x30\x59\xd7\x56\x95\xa6\x8e\x37\xc2\x82\x33\x67\xbd\xec\x74\x53\x4c\x9c\x64\x8a\x59\x4e\x78\x2a\xef\x7e\xd5\x99\x72\xe6\x1f\x98\x36\xcd\xcc\x8d\x0b\x01\x26\x64\xd2\x5c\x68\xe2\x6d\x2d\x0e\x8e\x08\xe5\x79\xd2\xed\xa2\x3a\x1b\x4f\x1b\x67\xe7\x43\x60\x40\xe8\x95\x0b\x63\x4a\x61\x4c\x2c\x8c\x29\x79\x9e\x9a\xe9\x29\x2b\x31\x40\x28\xa2\x11\xa7\xe0\xc0\xc8\x47\x2d\x25\x40\xc8\x17\x67\x83\x2f\x88\x1f\x55\x73\x7a\x91\x8f\xef\xd7\x6c\xd0\xb8\x26\x6e\x64\xe1\x9d\xe7\xc3\xee\x3c\x03\x94\xaf\xd4\x5c\x4c\x99\xac\x27\x50\x2d\x73\x11\xa9\x14\xc7\x94\xa7\x8c\x07\xdf\x97\x3e\xe4\xbe\x34\x02\x88\x74\xd2\x0e\x20\xde\x9a\x3e\x26\x4d\x08\xe7\x52\xcf\xd9\xe8\xaa\x34\x10\xdc\x0b\x9e\x0b\x07\xd9\x2a\x5e\x4a\x3e\xe6\x4a\xc5\x8e\xbf\x18\xe4\xba\xaa\x34\x25\x20\x10\xe0\xfa\x0e\x60\x43\x0f\xdd\xe9\xb7\x93\x01\xd8\x6e\xdf\xf3\x38\x71\x52\xc5\x10\x93\x8a\xd5\x3e\x33\x13\x66\xb9\x52\x0a\xf3\x10\x0d\xc9\x80\xd3\x93\x34\x7e\xf2\xc6\x4c\x1e\x70\x3f\xe8\x5f\x6b\x6c\x08\x68\x40\xb3\x42\x80\xaf\xcc\x99\x00\x8c\xaf\x1e\x9e\x2c\x69\x28\x4b\x38\xd3\xf0\xac\x5b\x8c\x4b\x68\xa9\x38\x3b\x62\x1c\x90\x2a\xc9\x60\x46\xba\x4c\x8c\x60\x0b\x00\xb2\x87\x52\x62\x56\x6f\x44\x8d\xc3\xa4\x53\xa3\x20\xa2\x56\x6d\x99\xc9\x68\x4d\x12\x7e\xcd\x28\x12\x8a\x49\x21\x3d\x13\x42\xdb\x6a\xe1\xd5\x46\x37\x42\x88\x74\x97\x51\xbf\x8d\x8a\x06\xa4\x98\x75\xfc\xa5\x1c\x0b\xca\xab\x12\xcb\x35\x96\x67\x55\x38\x03\x71\x8f\xfa\x54\xd5\x3e\x1d\xaa\xbe\x9b\x0d\x4c\xa5\x39\x1b\x38\x95\xab\x68\x12\xcb\x46\x7b\x03\x40\xde\x61\xf1\x70\x38\x22\x73\x71\xa2\x07\xcf\xe1\x89\xf1\x89\x22\x92\xf4\x8a\x5a\x66\xa2\xba\x94\x89\x9a\xf6\x61\x35\x4a\xcc\x5c\xe5\xb0\xf1\xcb\xc0\x3f\x5c\x7c\xe7\xea\xc2\xa4\xdb\x37\x04\xf3\xaa\xc8\xaa\x9a\xd6\x17\x88\x26\xaa\x8f\x26\xe2\x54\x97\x12\x17\xbd\xa1\x9e\x69\x9c\xfc\xa0\x1c\xf1\x3e\xc5\x94\xe5\x7e\x22\x36\x91\x5b\x4c\x59\x82\x93\x67\xce\x12\x05\x2e\x39\xf2\xb4\xd2\x78\xf5\xd6\x11\x91\x3b\x8a\xa7\xb4\xed\xe6\x28\x59\xdb\xe3\xd7\xaf\x82\x69\x46\x8c\x04\x9f\xd3\x29\xd4\xf8\xf0\x61\x9d\x40\x2b\x00\xbd\x9d\x8d\x84\x2f\xb1\x10\x96\x79\x31\x32\x9b\x00\x13\x1d\xd6\x5f\x54\xaf\x0c\xb1\xd8\x2e\x8d\x95\x94\x1e\x0a\xd4\xca\x2c\xb2\xee\x27\x42\x2f\x8f\x89\xc8\x74\xda\x88\x86\x05\xac\xe6\x87\xa5\x1b\xdb\x8c\x73\xb2\xea\x65\x71\x20\x16\x97\x4c\xd8\x99\x7e\x18\x08\x8f\x24\xce\x4e\x75\x11\xdb\xbb\x5a\xb3\x50\x6a\xd6\xdd\xb2\x7f\xee\xa1\x47\x83\x52\x7e\x67\x2a\x56\xf7\xa7\x8f\x3e\xab\x61\x5a\x9c\x0b\x7b\x1d\xe4\x0d\x2e\xb1\x67\x71\xc1\x4c\x34\x9f\x27\x29\xbb\x26\x3c\xdb\x59\x25\x2d\x8d\xb4\xf0\x32\x5e\x9f\x78\xc4\x07\x59\x8d\x2d\xe6\xee\x48\xef\x64\x56\x87\x0b\xf9\xd0\xf2\x6b\x55\x72\xd3\x48\x14\x37\xe2\x1e\x16\xcb\x19\xee\xca\xe6\xff\xa5\xe2\x76\x69\x31\x16\xc6\xaa\x6d\xce\x53\x75\x19\x4f\x1b\x0e\x7b\x6c\x96\x8d\x6e\x9d\xbd\xc3\xe2\x47\x93\xd7\x79\x11\x81\xf8\x8c\x1a\x92\xae\x77\x88\xf9\x4f\x24\x33\x0d\xfa\xc4\xed\xf5\xd5\x98\xf7\xa7\x1d\x18\xb0\x3a\x1a\x61\x8b\x0a\xfd\x10\xd0\xa1\x0f\xdd\x86\x15\xb6\x30\x5c\x61\xa3\xc2\x37\xf5\x33\xf3\xf2\x97\xb0\x3b\x52\xdc\x96\x9f\xd4\xa5\x5d\xb5\xb3\x11\x4b\x6e\x64\x46\xed\x58\x8c\xf4\x0b\x31\xe6\x2b\x1a\x6a\x8f\xa0\xa6\x1b\x41\xec\x65\xc1\xc4\x7d\x6b\x9e\x23\x11\xd6\x21\xf4\x0a\x59\x1a\xaf\x6a\x48\x63\x56\xd4\xdc\x65\xf4\x4a\xf1\xdb\x10\xcd\xcb\x80\xd8\x67\xe0\xaa\x49\x3f\x61\x57\xc5\x91\x47\xc9\x84\xa5\xe9\x3c\x60\x6a\xb0\x00\x22\xf5\x58\xa6\x21\x16\x90\x5c\xc1\x9f\x6d\x95\xd9\x24\xc4\x8f\x4d\xa7\x49\x5f\xa4\xab\x32\x13\x0f\x1d\x66\x3b\x58\x0c\x24\x41\xf6\x43\x75\x28\xd7\x40\xa6\x1e\xe2\xcc\xbe\x88\xac\x05\xc0\x39\x92\x0e\x1b\xc2\x1c\x4c\x5f\x70\x7a\x2a\x47\x25\x93\x6f\x39\xf1\x3b\xb2\x43\xde\x91\x01\x68\xb5\x92\xc8\x78\x21\xe8\x71\xc7\xff\xdc\x4f\x7b\x5a\x12\xdd\x14\x07\x68\x2b\xa3\xd9\x79\xa6\xdb\x65\xa6\xdb\x31\x3f\xbc\xba\x99\xb2\xba\x99\x7d\x04\x9e\xd7\x21\x4a\x95\x71\xe4\x59\x0d\x6f\x97\xcb\x5b\xb5\x03\x1f\x9f\x1d\xac\x8b\x06\x7e\x75\xc9\x36\xf5\xf2\xc9\x1c\x36\x90\x61\x91\x0e\xde\xd6\x99\xf8\xd5\xa3\x21\x6d\x88\x14\x70\x80\xdc\x98\xc6\x40\xd9\x08\xd4\x62\x81\xa0\x2d\x7d\xe7\xa4\xed\xfe\xfe\xe6\x98\x2b\x9f\x41\xcc\xdf\xdf\xfb\xdf\x71\x87\x8c\x8b\xc3\x3b\xf4\xb1\x53\x12\xee\x85\xef\xe5\xdc\x22\xec\x45\x11\x9b\xca\x45\x8f\x7b\x95\x26\x70\x43\x9e\xa9\x73\x21\x64\x33\xdb\xdf\xba\x23\xed\xb4\xdc\xb9\xee\x37\xa1\x4a\x3a\xdf\x32\x42\x7e\x83\x71\xcb\xc2\xf5\x76\x5e\x35\x15\x2e\x11\x08\x7b\x23\x7c\x92\x8a\x06\x40\xf4\x43\x69\x6a\x29\x40\x3c\xed\x88\x3e\xf9\x48\x75\xbb\x49\x28\x3f\x97\xb9\x9b\xde\xa7\x87\xf9\xe9\xc6\x11\x0b\xc4\x00\x70\x8f\x58\x9c\xb0\xd9\xd8\x15\xd4\x45\xf6\x54\x6f\x27\x04\x01\xc9\x59\x23\x9a\xff\x40\x01\x94\xf0\xaa\x2f\xb4\x23\xd4\xf7\x7f\x25\x2c\x30\x10\xe2\x0f\x44\x50\xc2\x8a\xa3\x64\x09\xf1\x22\x2f\xb4\x0c\x52\xf9\xbd\x08\xca\x46\xbf\x18\x00\x2c\x8b\x4a\xc0\xa7\x8b\x25\xa4\x37\xfc\xa3\x3d\x89\x22\x2a\x16\x4a\x48\x24\xef\xbf\x04\x68\x4d\x25\xb0\x00\x94\x42\xf7\x3e\x4b\x38\xf7\x41\xd7\x64\x08\x52\x42\x4e\x9a\x30\x96\x70\xb2\xe3\xf3\xa4\x94\x9c\x27\xa7\xa4\x2d\xa9\x77\xda\x09\x21\x22\xa8\xf2\x95\x29\xc4\xba\xc3\xc8\x6c\x50\xf0\x0d\xc5\xfd\x17\x68\x10\x05\x7f\x13\x39\x69\xfc\x04\xa4\xe0\x0b\x02\xf8\x19\x7b\x24\xef\x9d\xfe\xe3\xa8\x54\x68\x27\xba\x84\x5e\x45\x47\x3f\x60\x95\xd7\x8a\x84\x6b\x02\xb0\xea\x74\x46\x62\x62\x13\x71\xd3\x1f\xb3\xc5\x7d\xb6\x04\x0a\x6b\x50\x81\x69\xe7\x44\x58\x39\x95\x2c\x49\xa9\x38\xcb\x54\xcb\x77\x5a\xe3\x3f\xd6\xe3\x83\x3f\x52\x22\x83\xa3\x18\x1a\xc5\x40\xcf\x93\xaa\x1a\x7f\xd5\xed\x6c\x91\x6b\x6d\xcc\x26\x0d\xbd\xa0\xe0\x41\x0a\x65\xca\x25\x01\x82\x10\xd2\x3c\x33\x25\x0c\x00\x57\x1b\x40\xaa\xde\xd9\x23\x89\x71\x43\x48\xc5\x3f\x07\x17\xcd\x45\xff\xf9\x9b\x0e\x68\xe3\xf2\xbf\x4c\x4b\x53\x89\xe1\xc4\x7f\xd0\x56\x63\x68\xaf\x1b\x7e\xc6\xbf\x12\x5f\x3c\x39\x41\x14\xe9\x07\x2b\x96\x00\xc4\x85\x48\x00\x78\x5c\x62\xef\xb0\xe8\x22\x24\xa2\x73\x84\x91\x53\x7e\x9a\x8d\x00\x4b\x23\x2e\x9f\x91\xa2\x18\xca\xe5\x18\x83\x98\xca\xa5\x55\x7e\xa4\xe3\xb0\xd8\xe0\xf5\xc4\xb0\x38\xa2\x18\xef\x22\x11\xe6\x4b\x54\x48\x34\x20\x3a\x48\x29\x71\x19\x81\xfb\x29\x42\xd9\x66\x21\x46\x08\x92\x1a\xf1\xa6\x01\xfc\x62\x8d\xe1\x2f\xd4\x57\x8c\x2b\xbf\xfb\x21\x88\x79\x89\x2b\x94\x84\xac\x1c\x4b\x74\x85\xbe\x49\xc9\x6c\x39\x2e\x83\xc2\xdc\x32\xa9\xa5\x24\x84\x87\x9c\x25\x6e\x75\xd0\x19\x5d\x89\x69\xdb\x45\x40\xb3\x92\x5b\xe0\x7c\x58\x4c\xb2\xf9\xd0\x2e\x72\x89\x79\x1e\x78\x3b\x0b\x25\xa8\xef\x74\x14\x21\x32\xd7\x49\xaa\xfa\x72\x77\x23\x56\xec\x47\x6d\x78\xad\xfe\x5f\x89\xd5\xde\x4a\x97\x58\x61\x14\x2e\x14\x4c\xb5\x43\xf3\x12\xb5\xf6\x5c\x20\x34\xbe\x0f\x33\xee\x52\x77\x95\xfb\x64\xac\xb5\x8d\xbd\xae\xf5\x07\x30\xdf\x35\x02\xc4\xc3\x6f\x89\x75\xd0\x66\x17\xa2\x46\x46\xd3\xfc\x9c\xa8\x7a\x1d\x73\x88\x5a\x91\x68\xa7\x19\x88\x4b\xc7\xb9\x37\xfa\x42\xca\x25\x57\xfa\x5d\x93\xd8\xaa\xa7\x26\x27\x40\x44\xf8\xac\x85\x88\xf4\x5b\x24\x1d\xda\x8f\x78\x47\x66\xbe\x2c\x30\xd4\x97\x0a\x58\xcc\xea\x90\xf2\x10\x88\x61\x48\x02\x50\xb8\xac\xac\x26\xe1\x57\x7a\x47\xbb\x70\xa0\x8b\xed\xa2\x68\xda\x05\xd5\x8c\x2a\xad\xa1\xdd\xc0\x57\x43\xd4\x4a\x02\xc0\xde\xcb\x8f\x91\x00\x80\x63\x94\x0d\x44\x3f\x28\xb9\xb2\x44\xb1\x1f\x03\xff\xb1\xef\x31\xb4\x41\xeb\xfd\x42\x84\x10\xc8\x94\xa6\x33\xa9\xf7\xd0\x70\x07\x3f\x32\xf3\x00\x92\x72\x3c\x0e\xb6\x20\x3c\xc4\x46\x40\x0d\x72\x24\xfb\x60\xec\x49\x8f\x34\x91\xe0\x54\xa6\x30\xae\x8e\x6c\x1a\x23\x5e\xbf\x73\x30\x1b\x6c\x0a\xc5\x9e\x8f\xee\x90\xe4\x5b\xa3\x39\x5c\x94\xf2\x4d\x43\x2c\x73\x55\x64\x1a\xa3\x36\x87\xc9\x57\xe6\xb4\x07\x3c\x0d\x24\x2d\xa6\x45\xc3\xa8\x12\xbc\x01\x1b\x46\x53\x83\x21\xc3\xd0\x6c\xb5\xcb\x5b\x17\x64\x1a\x82\x1c\x41\x29\x11\xac\x0a\x68\xe5\xd2\x2f\xfe\x4a\xca\x07\x36\x83\x39\xa8\xe6\x68\x4a\x12\xbf\xe1\x0f\x65\x89\x94\xf8\xfd\x0e\xa4\x75\xa5\x44\x7c\xee\x57\xe2\x77\xa7\x41\xef\xbb\xf3\xa0\xf7\xdd\xb9\x5d\x7e\xf7\x33\x9c\xb4\xb9\x0c\xe4\x1b\x7a\xf3\x8d\x10\xfe\xff\x8c\x7f\x25\x91\xe8\xef\x92\x16\xfa\xd7\xf0\x3f\x84\x92\x96\x0f\xbe\x3d\x61\x20\x03\x2f\x32\x46\x75\xe0\xee\x9d\x20\x8a\x94\x08\x79\x1c\x74\xc7\xad\xa4\x55\xd6\x1d\x85\x65\x4d\xcb\x88\x0b\x74\x6e\x64\x43\xe2\x87\xe8\x57\x38\xa6\xe4\x0d\x3d\x24\x6d\x3b\xfe\x1b\x4b\x40\x09\x60\xa6\xdc\x80\x50\x85\xcf\x2d\xdf\x20\xc4\x5f\x7e\x86\x89\xf8\x3b\x64\xdc\x49\x2f\x69\x6b\x7c\xd1\x02\xa0\xad\x14\x4b\x82\xcf\x13\x55\x07\xca\xad\xc3\x1f\xbc\x94\x54\x52\x59\xea\x71\xd6\x7a\x52\x70\x25\xe2\x76\x1f\x80\x11\x61\x7c\x23\x98\x22\xa1\x72\xb3\x33\xa4\xf4\x9d\x4b\xf5\x45\x91\xd0\x25\x3e\xf8\xcd\x52\x5c\xe7\x09\xe9\x6d\x57\xa0\x32\xeb\xe9\x1f\xca\xff\x80\xff\x0d\xc5\x9e\x23\x42\xbb\xd1\xe4\x66\x08\x60\xb2\xf0\x62\x00\x91\xcb\x08\x09\x38\x8b\x61\xbf\x73\x9f\xf9\x3d\x25\x1c\x76\xc1\x05\x2e\xb3\xa4\x84\xb3\x24\xd4\x5c\x52\xd2\x45\x9f\x5d\x56\x0e\xa1\xba\x21\x48\x35\x44\xc1\x7b\x3a\x38\xa5\xa8\x98\x1e\xf8\xdf\xe8\x07\x1d\x51\x11\xd7\x25\x89\xb6\xe0\x52\x97\x11\x0e\x99\x98\xd4\x65\xa4\x3c\x17\x18\x29\x18\xb2\xfb\x91\xc8\x16\x95\x3b\x01\x9a\xe4\x7e\x45\x46\xdb\x3f\x85\x94\x12\xf2\xf6\x9d\xec\xdc\x95\xaa\x77\xdd\x4a\xe5\x9f\x04\x6d\xa1\x26\xb0\x4c\xfc\x4a\x07\xd1\x80\xf1\xbb\x26\xea\x37\xf8\x8b\x89\x4e\x34\x9a\xd6\x04\xdd\xa3\x1e\xf8\x18\xa9\xd4\x23\x96\x45\x25\xf8\x2a\xa5\xa1\x95\x37\x0a\xf9\x97\xdb\x0f\x12\xce\xf4\xa1\x66\xba\xd8\x72\x98\xbc\xda\x40\x54\xf1\xdc\x8e\x3c\x94\xf0\x52\x5d\x51\xc8\x12\xae\x29\x11\xaa\x56\x25\x64\xb5\x99\xa3\x46\x1a\x94\x09\xa7\x95\x67\x96\xc8\xaa\x23\xac\xb0\xd4\xb0\x24\x13\x79\x7b\x79\x97\xed\x45\x75\xc3\x44\x13\xd1\x6b\x3b\x2d\xe2\x3e\x42\x2a\x66\x37\xe2\x41\xb3\x2b\x62\x2d\x2c\xc3\x63\xe8\x56\xc0\xa6\xa6\x76\x09\x2b\x1e\x88\x3a\x8c\x25\x52\xc2\xb2\x44\xcd\xf9\xb2\xc4\x2c\x02\x50\x3c\x97\xb2\x58\x16\xda\x8f\x53\xec\x3c\x16\x5c\xa9\x33\x39\x69\x60\x22\xd2\xbb\xf9\x4f\xac\xb5\x83\x58\x3d\x8e\xba\x6a\x61\x08\x77\xa1\xd6\xe3\x0c\xe5\x76\x9c\x8e\x9e\x89\xb4\xb8\x26\x4b\x4d\x8b\x2e\xd9\x6d\x9a\xf9\x34\xef\x74\xe9\xc6\xfc\xcc\x63\x66\x1f\x1d\x73\x0d\x66\x76\xb5\x4b\xab\x94\x1e\xab\x62\x75\x58\xf2\xf3\xdf\x4c\x32\xfa\x19\xd5\x10\xfe\x9b\x89\x95\xae\x23\xe5\x51\x9c\x20\xbf\x41\x63\xa6\x4e\xb4\x44\x27\x6d\x8b\x3b\xcc\x59\x90\x66\xb6\x86\x73\x68\x10\x48\xe4\x13\xc0\x5c\x92\x21\x62\x31\x10\xaf\x49\xdb\x0a\x62\x75\x24\x52\x2c\x90\xc4\x93\x32\xb4\xee\xa4\x12\x57\xb0\xba\xde\xa3\xb6\xb3\xf5\x2b\x68\x01\xac\x5f\xf8\xe8\x48\x12\xf1\x55\xad\x05\xbb\xdb\xb9\x9e\x5a\x28\xa8\x05\xcd\x58\x77\x99\x93\xdb\xc7\xff\x63\x20\xd1\x3e\xae\x27\xb3\x09\x6b\x1d\x36\x66\x56\x43\x53\x51\x7d\x19\xd6\x66\xa9\x9d\x99\x83\xbe\x42\x19\x61\x8b\xd2\xf5\x56\xd4\x87\x3e\xd2\x83\xd3\x3e\x21\xd3\xf6\x4a\x9c\xff\x68\x0d\x8f\xf4\x70\x51\xd8\xaa\xc2\xc9\x13\xf6\xf2\xc6\x57\x5b\xec\xf0\x2d\x4f\xb8\x88\xc8\x31\xa7\x63\xe6\x32\x15\x6b\x68\xdb\x96\xeb\xe1\x3b\xb5\xa8\xe7\xe5\xe2\x32\x6d\xbd\xec\xfd\xa1\xbe\x97\x0c\x50\x6b\xb3\xb0\x46\x97\xdf\x09\x27\xbd\xc8\x06\x3c\x2f\x95\x5e\xeb\x22\xd9\xe2\xab\x85\x3f\x44\x1c\xa6\xe8\x62\x44\xb1\x27\x52\xf0\x28\xb0\x77\x65\xa8\xe8\x13\x58\xef\x19\xb2\x1c\xb7\x84\x1b\xbd\xc2\xf0\x0d\x85\x27\xe6\x32\x9b\x4d\xe3\x29\x33\x32\x16\x28\xba\x3e\xa8\x64\x32\xe7\x79\x49\xc5\xe5\x73\x0f\x2f\xad\x22\x65\x62\x8b\x82\x08\x2c\x2b\xa3\x4d\x1b\xec\x8f\x97\x6b\x1c\xc7\x4b\xb4\x8f\x22\x8b\x96\x65\x7d\x7b\x8b\xa4\x6a\xfb\x39\xce\x3d\xbd\xa4\xac\x89\x88\x55\xa1\x37\x80\x16\x15\x1b\x98\xbd\x0e\xf7\x85\x9f\x02\x38\xcc\x69\x47\x66\x3e\x78\x35\x60\xd8\x9c\xdd\xbf\x9a\x3e\xb9\x3d\x4f\x98\xe4\x28\x38\xac\x7e\xf4\x52\x2a\x51\x5e\xee\x18\x16\x87\x30\x1d\x96\xf6\x53\x2c\xd1\x8f\x7e\x21\x4c\xe3\xdd\xb4\x5a\xcb\x96\xa5\xec\x49\xbf\x8b\x38\x21\x0d\x00\x06\x9d\xb1\x7a\x28\xf1\xc7\xf2\x85\x73\x54\xa3\x23\x6c\x8f\xf2\x1d\x78\x92\xa0\x2d\x44\xb8\xd4\x27\x9f\xfd\x11\xd4\x84\xe3\xd3\x45\x0d\xe3\x84\xa9\x48\xfc\x1f\xc6\x99\x3f\x61\x21\x9d\xd5\x92\x88\xd8\x9d\x41\x87\x5e\xc0\xc9\x8d\xee\xa7\x2a\x63\x57\x26\x19\x04\xd2\x1f\x56\xdd\x59\xd1\xb9\x35\x93\xa2\x1f\x56\x7a\x12\xe1\x89\xec\xa5\x21\xcf\x2c\xc5\xc0\x98\x96\x09\x53\x2d\x12\x3c\xb4\x34\x4b\x12\xb2\xe4\x3c\x57\x9f\xb6\x16\x97\xe4\x83\xe2\x07\x18\xde\x81\xbc\xc8\x60\xae\xca\xe3\x85\x9f\x2d\xfd\x0f\xd7\x10\xff\x9b\x41\x4a\xfe\xbf\xa9\x23\x78\x7b\x25\xf7\x29\x21\xc6\xc9\x87\x06\x3c\x22\xeb\xb2\xf2\x06\x3a\xdc\xc1\x78\xa2\x97\xc8\xc8\x60\x5a\x58\x1b\x5d\x0b\xd4\x04\x34\xd3\x5e\xf9\x97\x4b\x78\x69\xec\x47\x34\x7b\x66\x62\x7b\xa4\xcd\x45\xc5\x97\x95\x11\x37\xd6\x77\x8b\xa4\xeb\x20\x47\x50\xbc\xf3\xbd\x70\xc2\x72\xc8\xe9\x99\x26\xd4\x4d\x57\x9b\xed\xd3\x90\x7c\x7b\xf8\xe9\x2f\x8c\x8f\x5c\xc3\x84\x47\xdb\x0e\x92\x68\xa4\xa9\xa4\x30\x36\xb0\xb0\x3a\x6f\xa9\x03\x3c\x93\x0d\xc5\x44\x24\x37\xc4\xa4\x45\xa1\xb0\x10\xb1\xe9\x6e\xfe\xd9\x7b\xb4\x59\x7a\xef\xfe\x7b\x82\x4c\xc2\xee\xe9\x70\x7d\x9c\xa9\x0b\x85\xf9\xf5\xb4\xd7\xe8\x7b\x5d\x92\xf3\x5d\xb1\xc5\x6a\x47\x14\x03\xf5\x5d\xf5\x23\xdb\xfb\x3c\x34\x0d\xf3\xb0\x29\x58\x1f\xbb\xd5\xa3\x0d\x84\xa8\x11\x6d\xd3\x82\x94\x47\xb2\x4f\xc6\x6e\xf5\x66\xad\x27\x6a\x97\xb5\x3d\x8d\xa3\xf6\x73\x8f\xed\x7f\xa8\xb8\xd5\x18\xfc\xf8\xac\xfb\x2c\x8a\x39\x1f\x63\x04\xba\x3e\xc7\xc4\xd5\xf3\x18\x2d\xbd\xa6\xe6\x71\xae\xda\x8b\xe7\xf6\xec\x13\xb3\xb9\xb1\x65\x36\xdf\x97\xe6\xd8\x49\x25\x89\x27\x9c\x28\xa5\xd2\x68\xe6\x80\x81\xd6\x07\x8c\x1a\x3b\xfc\x3a\x10\xcd\x0e\xe7\xc3\x75\xa0\xa9\xf2\xf9\x98\xb1\x42\x79\x60\x17\xcc\x3b\x24\xfd\x3f\xc9\xf9\x12\x42\xc1\xbf\x60\xdd\x25\x3d\xec\x15\xac\x99\xbd\x42\xf9\x18\x6e\x2f\x9d\x3e\x31\x59\x0c\x73\x9c\x2f\x14\x47\x29\x21\x75\x71\x31\x76\x2e\xee\x57\x0c\x6d\xa5\x7c\x00\x34\x53\xd4\xb4\x4b\x38\xa7\x78\xa9\x45\xce\x30\x74\x70\x73\x7a\xc5\xb2\xaa\x4d\x41\xc1\x74\xab\x27\xea\x0a\x98\xa4\x22\x16\x11\x5b\x07\x2c\x85\xce\x7e\x92\x6e\x39\x94\x57\xda\xea\x10\x63\xd4\xd9\x48\xe3\xcb\x2b\xe5\xa4\x4e\xb2\x15\x4b\xb2\x64\xfc\xa9\x29\xf7\x48\x1a\xd9\x50\x77\xa8\xf1\x8a\x90\xc8\x92\x05\x96\xc3\xf2\x61\x70\x68\xf8\x39\x1c\x78\xb8\x4e\x18\xda\xfa\xa1\xee\xa3\xae\x79\x5f\x99\x1e\x00\x0a\x54\x63\x97\x3c\x14\x1a\xae\x8e\xaa\x36\xfb\x57\xae\xf5\x50\x8c\x6f\xc4\x84\xd5\xa0\x23\xf2\xab\xae\xb4\x51\x82\x48\xcc\x52\x56\x58\xf1\xb9\x0b\x42\x14\x32\x26\xe6\x23\xf0\x40\xce\x90\x8b\xa3\x05\x4d\x70\x43\x25\x57\xec\xbe\xc5\x60\xed\xac\xb9\x1c\x36\x7c\x44\xc5\x3e\xea\x21\x2b\xd9\x57\xab\x96\x9e\x56\xbf\xbb\xe2\xc9\x2b\xf4\xd7\x5c\xd5\xc1\xcc\x2f\x3e\x56\x16\xd6\x04\xb9\x5e\x0b\x54\x61\xbd\x79\xf8\x7b\xcd\xb6\xc6\xc2\xbb\x3f\xc0\x62\x98\xf6\x21\x7c\xcd\xa6\x43\x07\x60\x8d\xb1\x59\x11\xc2\x42\x9c\xb6\x97\x00\x53\x61\xce\x31\x60\x5d\xc2\x19\x9b\xb2\x4b\xb0\x84\x35\x16\x6e\xd2\x88\x07\xa1\xf7\x3b\xca\x8a\x7b\x09\x1f\x75\x9c\x17\x39\x01\x23\x46\xf7\x70\x98\x4c\x6d\xad\xcc\x86\xf3\xe7\x3e\x99\x4b\xc8\xb2\x02\x59\x42\x9e\x47\x49\xde\x25\x70\x8d\xa1\x2c\xd1\x05\x5a\x16\x2d\xba\x05\xaa\x55\x77\x0f\x16\x98\x8f\xbe\x6c\xcf\xab\x2c\xe1\x64\x81\x5e\x4c\xb8\x8e\x18\x3e\xdc\x0d\xd6\x96\x4a\x54\x84\xca\x10\xeb\xe9\xd7\xa2\x3f\x87\xd9\xb4\x97\x4c\x3e\x11\x17\x19\x29\x97\xd0\x54\x31\x0a\xd1\x11\x5d\xf0\xd4\x72\x17\x68\xee\x9b\xcb\x74\x9f\x2e\x45\x7d\xba\x6f\xd2\x12\x46\x58\xf2\x8d\x22\x1a\x3c\x15\xc7\xc3\xd6\x21\x40\x5a\xdb\xcd\x61\x77\x5f\x23\x18\xfc\xdd\x12\xc3\x51\x75\xef\x97\x82\x8b\x6a\xdb\xf6\x44\xec\x66\xb7\x42\x41\xf1\x44\x82\xac\x86\x75\xd7\x07\x55\xbd\x0e\x1e\x18\xf5\x0a\xb3\x62\x29\x27\x68\xf0\x8d\x4b\x09\x71\x72\x36\x53\xe7\x9c\x72\xeb\x19\x21\xca\x1f\x64\xf4\x72\xa6\x87\x7e\x0e\x84\x69\x58\x6d\x58\x8b\xdd\xc3\x5b\x2a\x60\x0f\x99\x3b\x1f\xc0\xcf\x2d\x28\x47\x92\xf7\x4e\xb4\xb0\x94\x43\x66\x74\xc7\xda\x88\xd6\xf2\x1e\xaa\x64\x7e\x0f\x8d\x3e\x74\xfd\x7f\x4c\xcc\x75\x7b\x84\xdb\x44\x72\x96\xd0\x61\x96\xb6\x11\xb9\xec\xe9\x90\xc9\x89\x60\xb5\xb9\x42\x36\x2b\x20\x92\xff\xbd\x66\xf3\xe4\xe6\xc4\x48\x50\xbf\x57\x16\x5a\xcc\xa6\x58\xd0\xb3\x2d\xbb\xa4\x1b\xf0\x56\xa5\x78\xf8\x56\xb9\x41\x72\xa5\x37\xca\x8d\x48\x62\x52\xd3\xc9\x0c\x63\xed\x10\x4c\x79\x26\x89\xf4\xe8\x4b\x4b\x2f\x17\xd0\x41\xf2\x34\xa5\xc5\x91\xd1\x19\x69\x6b\x97\xe9\x08\x45\x9b\x1e\x9a\x5c\x81\x6f\x50\xa3\x89\x95\x6c\x1a\x56\x05\xe9\xd2\x57\xbf\x46\xd9\x4b\x0e\x49\x3f\x99\x4b\x76\xbb\x0f\x4b\x0e\x76\x1e\xa2\x54\x7d\x75\x9e\x96\x30\xe4\x24\x21\x79\x78\x42\x6e\xbe\xa4\x7a\x32\x4c\x53\xf9\xd5\xe2\x83\x6b\xec\xae\xfe\x51\x21\x92\xfa\x64\x62\x76\x2f\x8b\x2e\x1d\xb2\x81\xbe\xc0\xf7\xd5\x61\xf3\x50\x13\x4b\x67\x27\xd6\xd9\x6b\x1d\x5a\x59\x35\x6c\x6e\xe4\x27\xf6\xc7\x52\x6b\xa9\x86\xec\x46\x6d\x62\xea\x74\xb5\xbc\xd7\xd8\x96\xa4\x41\x02\x91\x00\x36\xf5\xbc\x15\x69\x70\x75\xb3\x1d\x3c\x24\x56\x7b\xc4\xc4\x8b\x6d\xc9\x02\xee\xea\x25\x15\xda\x6a\x7f\x32\x2e\x82\x9a\x55\x01\xad\xd1\xe4\x68\x5c\x46\x78\xd2\x3f\xb6\x1a\x0f\x33\x1b\x0d\x6a\xe6\x8b\xea\x4c\x74\xd7\x6e\xc1\x77\xd5\xe6\xd1\x86\xb4\x9a\x6b\x73\xd1\xd5\xa6\xe5\x77\xbc\xc2\x10\xe4\x76\x24\x89\x3a\x57\x30\x36\x6b\x00\x44\xd5\xa5\xa4\xcb\x06\x9a\x7a\x90\xc8\x3c\x5b\xba\x39\x23\xf5\xc7\x06\xd2\x63\xc1\xc0\x76\xe9\x84\x3e\xac\xdb\x92\x2c\x38\x94\xd6\xe0\x83\x4b\xbd\x93\x70\x06\xe1\x63\x98\x6b\x96\x0e\xc8\x6c\xba\x64\xcd\x82\x3b\x2c\x9a\x57\x31\xb0\x80\x67\x71\xa5\xaf\xd4\x85\x30\xbc\xf3\x33\x96\xee\xc3\x63\xfe\xc7\xde\xb2\x75\xc6\xa1\xcd\x08\x88\xf7\x39\x92\xf7\x98\xc3\xe2\x5c\xe6\x90\x7a\x70\xf4\x76\x1e\x6b\x4f\x43\xbd\xd5\xf9\x28\x56\xda\xe6\x59\xd3\xff\x9a\x98\xff\xe7\xd6\x90\x33\xb9\x9c\x41\xff\xe3\xa0\x3f\xac\x2b\x54\xd0\xfa\xa0\x2e\x82\x99\xbd\xe3\x99\xbb\x96\x07\x7f\xaf\x65\xc0\x55\xae\xce\x8b\xbc\x5c\x7a\x30\xa9\x8d\xb2\xc4\x53\x4e\x75\x90\xb9\x54\xf1\x67\x46\x93\xc1\xdc\x45\x9d\xe7\xea\x6c\x7d\x6f\x2a\xcb\x6c\x36\x10\x14\x98\x6d\x5b\x99\x22\xd5\x04\xaf\x8f\xa2\x23\xaa\x81\xd2\x0c\xd4\xc5\x82\xcf\x8e\xb4\xa1\x96\x35\xf9\x4e\xc3\xd4\x82\x9e\x36\xaa\xe1\x8b\x2a\x1f\xcf\x5c\x5c\xd6\x90\xa9\xd3\x77\x64\x41\x13\x42\x9b\x1b\x0f\xca\xdb\x0d\x64\x4c\xb4\x9f\x01\xb7\x50\xdf\xc9\xd2\xf2\x76\x03\x44\x79\x27\xbd\xaa\xe5\xb8\x95\x2c\x70\xef\xba\x2f\x3e\xfe\x9c\x7c\xd2\x89\x6a\x50\x9b\x6d\xb7\x22\x2b\xc9\x4a\x6b\x8b\xdd\xbb\x6c\x61\xf8\x39\x00\x98\xe8\x8d\x38\xe6\xd3\x72\xba\xb5\xa9\x43\x42\xf9\x8a\x2a\x85\x9b\x0d\xe6\xa6\xd1\xf0\x63\x25\x21\xc5\x27\xaf\xc4\x07\xab\x7e\x2c\x28\x65\xbe\xac\x24\xe9\x3a\x95\x0d\x43\xa5\x2f\x0f\x82\xa2\xbe\x2d\x01\x3d\x2e\xd3\x05\xe5\x36\xe3\x90\xfd\xe7\x72\xc2\xcc\x45\x85\x77\xbc\x7c\x43\x62\x13\x17\x5c\xbb\x5c\x70\xf8\x5a\xc2\xf9\xaf\xd9\xa7\xa4\xba\x0a\xe8\xb5\xf9\x74\xf0\xee\xa1\xf3\x6a\x3b\x88\xc0\x46\x1a\x3e\xa1\x40\xad\x6b\x13\x7d\x24\x73\xb4\xe0\xdb\x15\x69\x6e\x70\x1e\xda\xa3\xa9\x98\x62\x07\xe5\xd3\x27\x7c\xb4\x47\x37\xe8\x3a\x79\x44\xfc\xa8\x2a\xe2\xd6\x74\xfa\x3c\x7c\x48\xd3\x35\x5f\xbf\xbf\xb8\xd4\x32\xc2\xe6\xea\x91\x1e\xa4\x98\x4f\x7e\xa0\xe2\x9c\x47\x18\xbb\xff\x18\xd4\xc6\x82\x8d\x1e\x46\x9a\x18\xe0\xbe\xaf\x23\x9f\xde\xbd\x1f\x52\xc6\xb3\x99\x8d\xd8\xe4\x96\x87\x51\x6f\xfd\xe3\x06\xcc\x91\x36\x1f\x6e\x2a\x7e\x70\x1a\xb6\x65\x4a\xcc\x17\x36\x50\xe7\x13\xdf\x3a\xb9\xf2\x1c\x28\x48\xd2\x32\x8d\x1b\x98\xde\x3b\xed\x68\x5a\x26\xfc\x0e\xa7\x72\x1f\x5e\xcd\xf9\xe1\xbf\xe6\xac\x0d\x05\x99\x0f\xac\x5e\xb1\x75\x6b\xa5\x63\x1e\xc1\xf7\xbe\xeb\xd1\x8b\x2f\x96\x5a\x9b\x95\x37\x97\x6f\x60\x16\x34\x84\xeb\x92\x81\xd4\x3b\xed\xe1\x6f\x50\xbe\x22\xaf\x74\x69\xa2\xea\xf9\x98\xd0\xd4\xb6\xba\x43\xe3\xa5\x9e\x39\x14\x69\xbd\xed\xac\x36\x9c\x13\x51\x7f\x40\x65\x95\x5b\xdb\xa9\xb7\x0b\x91\x36\x9f\xcf\xd6\xa2\x9f\x76\x33\xfd\x63\x8b\xaa\xc3\xc4\xa0\x9f\xb5\xd8\xb7\x42\x0c\x5c\x08\xf5\x55\xdb\x23\x48\x36\xb0\x40\xc9\x40\xeb\xb1\xb5\xea\xa6\x22\xc8\x9c\xe7\xee\x3c\xce\x73\x38\xe8\xfd\x4c\xd7\x1b\xdd\x9e\x43\xd5\x2d\x8f\xda\x0f\xbb\xa6\x0d\x9c\xa5\xc6\x88\x43\xa1\x92\x28\x27\x54\x06\xf9\x84\x4e\x13\x5c\xc9\xa1\xc1\x3b\x26\x4e\xd1\x7c\xd6\xdc\x15\x75\xc1\xda\x42\xd1\x9d\x30\x91\x47\x46\x58\x8b\xb1\x45\x2b\x00\xbc\x70\x13\x1c\xb3\xdd\x8e\x16\xe3\x69\x21\xe9\x3a\x86\xe0\xca\x78\xd8\x0e\xe2\xd2\x92\xf5\xfa\x46\xa2\x00\x09\x5a\x09\x21\x4e\xbf\x1a\xec\xd4\xf9\x35\x40\x7a\x15\x80\xa4\x87\xd5\x1c\xf5\x47\x2c\xb7\x1c\x32\x31\x94\x00\xec\xe9\xb6\xa7\xb6\xca\x52\x13\x49\xbc\x70\x89\x68\xe6\xc3\xb7\xff\x99\x4f\xf5\x4b\x4f\xdb\x9e\x6c\xfc\xe5\x1c\xae\xbb\x3d\x41\x58\xcc\x8f\x97\x2e\xc4\x1f\xb7\x92\x96\xd9\x3c\x5e\x75\x18\x99\xb6\xc1\xe4\xe6\x82\xb3\x75\x73\x3c\x42\x32\xe7\xf2\x56\xdd\x13\x8e\xbb\x0f\x12\x3b\x23\xe4\x90\xa6\x37\x6d\x8d\x4c\x22\x8b\x14\x91\xeb\x35\x1c\xc1\xb6\x7e\x90\xb1\xfb\x35\x14\x3b\xbc\x5c\x43\xfb\xd0\xaf\x5e\x0f\x5a\x63\x58\xa9\x27\xaf\x31\xbc\xe5\x37\xf2\x7c\x8e\xb0\x04\x15\x5f\x56\x9c\x48\xcc\x02\xa5\x3d\xfe\x2f\xbf\xd8\xad\xed\x07\x03\x76\x9b\xbd\x40\x55\x78\x0d\xf3\xdb\xac\x6e\x0d\x71\x89\x56\xb5\xc4\x9c\xd5\xe9\x62\x4a\xab\x7c\x6e\x80\x74\xb3\xc8\xc1\xa6\x9e\x48\x9b\x4f\x20\x52\x67\x9b\x2e\xdd\x5e\x5a\xe3\x52\x75\xe5\xc1\xc4\x3c\xea\xbe\xcd\x1a\xfd\x55\x2a\x66\x1a\x22\x4c\xd1\x35\xf9\x7e\x8a\xce\x4c\x7c\xc5\x93\x7e\xdf\x8f\xd4\xbe\x03\x3e\xbc\xe6\x0c\xbf\x63\xe8\xe6\xdd\xdd\x55\x62\x72\xa9\x4d\x79\xb8\x2b\xdd\x59\xb5\xe0\x6c\x9a\xd6\x0e\xe1\x24\x8d\xc3\x2f\x09\xd6\xf8\x4e\x41\xdd\x25\x7e\x05\x40\x24\x5b\x0a\x6c\x9a\x83\x44\x8a\xcd\xd6\x05\x84\x47\x74\xd8\xd2\x95\x55\xa1\x3b\xf3\xb8\x68\xc9\xbf\xf3\x23\x77\x24\x51\x91\x30\x4c\xbe\x09\x6e\xb1\xe8\x9a\x46\x99\x7a\xda\x9a\x0e\x59\x6b\xdc\x93\x6e\x20\xad\x76\x94\xbb\xfa\x83\xdc\x35\xe6\x28\x6f\xf6\x88\x92\x4a\xf9\x28\x6c\x71\xb8\x44\x17\x53\x4e\x45\xe7\xe2\xc0\x54\x71\x33\x73\x1f\xe6\x5c\x25\x23\xb6\xd2\x04\x6c\xf5\x75\x84\x62\x16\x87\xbb\xcd\x60\x4c\x12\x4c\xa2\x95\xac\x0e\x98\x5b\xca\xca\xda\x78\xd4\x17\x2c\x5e\xe5\x8a\xaf\x7c\x02\xc1\xc4\x77\xe3\x32\xcb\x92\x5c\x37\x17\xfe\xc7\x5e\x9b\x6d\x5d\x6b\xd3\x91\x7b\x8d\x67\x68\xc3\x56\xb5\x6b\x3c\xdd\xc6\xce\x1a\xcf\x1c\x2d\x24\x20\x1a\x0c\xbf\xb5\x27\xdc\xc2\x65\x38\x2e\x2e\x35\x4c\x35\x08\xa4\x16\x08\xdf\x73\xf1\xae\xd3\x1f\xe7\xe9\xe9\x5e\xce\xb8\x98\x78\xaf\xbd\x3b\x8f\x7e\x64\x6a\xd0\x26\xb8\x92\x5b\x72\xdd\xaf\xb9\xb1\xe8\xe9\x23\x5d\x2e\x19\xad\x6e\x7f\x99\x26\x09\xf7\xad\xcd\x23\x2d\x0d\x3d\x56\x7f\x78\x11\x63\x3c\xc8\xc3\x4e\xf2\xd5\x93\x8d\x5e\xf8\x00\x53\xb2\xd8\xcf\xaa\x0d\xec\xb1\x5c\x5a\x23\x5f\xb8\xff\x95\x30\x86\xbb\x0d\x04\x2c\x65\xb5\xa1\x15\x86\xd9\x11\xb7\xa0\xc8\xc0\xf5\xbc\x11\x9b\x0d\x45\xa3\x16\x57\x5f\xc3\xcd\xb4\x98\x69\xc1\x8c\x96\x7c\xbb\xba\x62\xae\xa7\x45\x8b\x54\xc3\x41\xf6\x70\x6d\x83\xda\xe5\x1b\xc8\x65\x1d\xf4\xaa\xbe\x4f\x5c\x75\xb2\xfb\x9f\x61\x9f\xd6\xf8\x33\x14\x27\xbb\xb7\x08\x58\xce\xf7\x04\x73\x40\x29\x6c\x1a\x28\x8b\x9e\x0d\xe6\xcb\x8b\xfe\x23\x13\xdc\x1d\xf6\x44\xdd\x12\x31\xbb\x5b\xfb\x5c\x0a\x47\x94\x63\xae\x35\x85\x73\x0f\xc5\x12\xd9\x87\xdc\x71\x20\x62\x01\x92\x72\x18\x73\xba\xec\x76\x64\x20\xcc\x5b\x8e\xea\xe8\x70\x2b\xff\x35\xad\xc1\x12\x1a\x47\x74\x58\xd3\xf8\x96\x8f\x8e\x54\x59\x7a\xbf\xf1\x7e\xab\x12\x9d\x3d\xa4\xf7\xdb\xb7\x83\xf4\x7e\xcf\xee\xe1\x6a\x38\xb9\xd0\xf4\x3e\xf9\x9a\x70\x6f\x48\xad\x36\xbb\xc0\xc5\x44\x42\xce\xc1\x4d\xcd\x80\xda\xd4\x27\xc9\xcb\x49\xde\xa6\xb3\xfd\xe5\x35\x61\x7b\xde\x35\xc8\xba\xc4\x4e\xab\x8b\x35\x9d\x3b\xe9\x33\xc8\x0f\xba\x3c\xd8\xf0\x9c\xa4\x17\x12\xcd\xd5\x35\x8e\xd3\xb5\x3b\x27\x8d\xc8\xa8\x64\xa2\xc9\xc3\x4e\x20\x28\x74\x59\x6f\xad\x00\xef\xae\xc9\xf6\xd7\xb4\x15\x2b\x53\xc9\x54\x5f\xa2\x5e\x0f\x00\xb6\x07\x5d\xea\x9a\xf0\x23\xf3\x6a\xd2\x90\x3c\xb7\xc0\x90\x3a\xff\xf6\xb8\x00\xd9\x2c\xc3\x07\x56\x2f\x37\x57\x41\xb1\x25\x7e\x86\x00\x06\xc9\xaf\x08\xbc\xc9\x15\xff\x98\x54\xf3\x65\x13\xf4\x35\xf5\x18\x2c\xaf\x6f\x92\xb2\x65\x06\xdb\x74\x04\xb7\x3a\xa6\x95\x5a\x2a\x23\x6e\xcd\xc7\x8e\x62\x9c\xf9\x35\x24\x1a\xf8\x9d\xc1\x35\xf5\x33\xb4\xe0\x4a\x0f\xe8\x50\x3b\xb7\x7f\x2c\xd4\x57\x2e\x9a\x24\xef\xc0\xe7\xc2\xdd\xeb\x24\xa6\x49\x38\x49\x36\x84\xa6\xfa\xbf\x19\x72\x7a\xdf\x96\x0a\x5c\x2c\x3f\x99\x06\xeb\xb6\x18\x81\xb9\xce\xd8\x7b\x3a\xad\x8b\x10\x73\xfe\x6a\xbe\xcc\xdf\x70\x57\x90\x90\x3e\x0a\x65\x90\x0a\x94\xfd\xe9\xc2\xdd\x2b\x76\x06\x2e\x4c\x9b\x18\x10\x79\x5a\xb9\xe0\xed\x71\x8e\x30\xe7\xf4\x31\xa2\x74\xde\x61\x72\x85\xfe\xd8\x73\x02\x3e\xf5\xb9\xd0\x9a\xdc\x26\x10\x11\xb3\x71\x9f\x7f\x24\x16\xe4\x65\x93\x81\x74\xd5\xb6\x48\xd2\xae\x99\xd5\x7f\x5d\x46\x4b\x25\xa4\x16\x3d\xcd\x4c\xa6\xfb\x84\x09\xe3\xc6\x5d\x37\x1b\x2a\x18\x8b\xc3\x23\xea\xb7\x96\xb1\x56\x9f\x72\x8d\xff\xd0\xb7\x0a\x6b\x7d\xf4\x30\x60\x51\xaf\x5c\xad\x15\x3e\x15\xec\x6e\xbe\xac\xef\x02\x11\x37\x22\x3d\x17\x71\xb2\x7b\x79\x48\xd4\x51\x3d\xf5\x44\x7b\x6d\x53\xee\x4b\x31\x14\x73\x6d\xb5\xd3\xdd\xbe\xc1\x35\x14\x07\x39\xf9\x72\xb4\x38\x7b\xdc\x95\x5e\x6d\x37\x7f\x9d\xee\x93\xc3\x2a\x84\x0d\x72\x74\x77\xd1\xb3\x73\xc1\x62\xd3\x4f\xbd\x49\xab\x84\xec\x48\x5b\x1f\x02\x1d\x37\x23\x0a\x88\x2e\x04\xb5\x90\xe2\x6b\xe6\x2c\x0b\xa9\xb8\xb8\x33\xac\xb8\x2c\x39\xf6\xa4\xb1\x7b\xce\xb1\x2c\x7b\x15\x3b\x9b\x0e\xc0\xda\xf5\xe4\x9e\x4f\x58\x12\x00\xc4\x3b\x72\x01\xd9\x2d\x57\xc1\x62\x63\xd3\x82\x88\xad\xec\x89\xd9\x95\xee\x54\x45\x3b\x78\x8f\x6b\xb2\x69\x40\x14\x5d\xb2\x82\x87\x38\x9a\x8b\x1b\xe0\x98\x5e\xce\x1d\x8f\xd8\xd1\xbf\xc2\x01\xd2\x2e\x5b\x4e\x01\x1f\x62\x93\x16\xdb\xc1\x45\x9a\xcc\x95\x2e\xa8\xe2\x56\x7d\x51\x6f\x55\x1b\x92\x60\x4e\xd0\x56\x87\xb7\x1a\x0f\xbb\x16\x75\x87\x3f\xa6\x55\xa6\x36\xf1\x2b\xf8\x2b\x27\xf1\xcb\xd6\xe7\x84\x39\x09\x39\xbc\x74\xb7\x56\x88\xb8\x13\xaa\x4e\x35\x0d\xd9\x87\x10\x17\xcd\x02\x63\x4e\x1a\x31\xad\x0a\xa2\xbf\x9e\x55\xbd\xec\x15\x73\x8c\x47\xed\xb7\x7c\x52\x63\x8e\x36\xb6\x08\x51\xab\xcb\x25\x32\x2d\x72\x1f\x27\x66\x9b\x68\xc4\xfc\xf8\xfa\x0a\x95\xe2\xc8\xae\x15\xe6\x47\x2b\x14\x55\xdb\x88\xe7\x92\x56\x17\x15\x53\x09\xd2\x2a\xf2\x08\x32\x48\x21\x54\x1f\x47\x28\xfe\xd9\x48\x3c\xf0\x32\xae\x7c\x4d\x94\xaa\xf3\x57\xbb\xb5\x15\x12\xe1\x34\xfa\xdb\x07\xf1\xb0\xc1\x3e\x1e\x6e\x51\x10\xed\x16\x73\x3c\xe4\x89\x3e\xe2\x64\x95\x72\x9c\xb9\xde\x1a\xe1\x39\xa8\x3c\xfc\x1e\x23\x10\x69\x50\xb8\xbf\x57\xcf\x10\x79\x14\x14\x83\xff\x8f\x73\x04\x45\x9f\x9a\x46\x3f\xce\x21\x91\x78\x0b\xe4\x40\xca\x9f\x64\x3e\xa8\xd5\x1b\xbe\x44\xe6\xeb\xad\x1f\x26\xc2\xea\x6e\x6b\x55\x57\xc3\xb1\x24\xfb\xdc\x28\x91\x04\x91\x50\xc5\x22\xa1\x30\x55\xaf\x76\x36\x03\x6d\x2c\x19\x96\x79\x71\x24\x95\x18\xc9\x62\x1b\xf4\xb4\xc1\xf8\x3e\xfd\x20\x89\xaf\x83\xd4\x4e\xde\x20\xff\xa1\x92\xba\xd1\xa2\xcb\xfd\x3c\xec\x5d\x9a\x30\xa9\x97\xe7\x46\xc7\x9f\x7d\x8e\x58\xae\x64\xa5\xa6\xcb\xc6\xa7\xb6\xa6\x82\xaa\xee\xa0\x01\x09\xe1\x64\x9d\x9a\x9e\x33\x2d\xb3\x45\x5a\x2d\xc4\x33\x3d\x16\x84\xf1\x4c\x59\xbf\x36\xf1\x84\x69\xf1\xa9\xde\x88\x24\xf5\xd9\xeb\x6a\x0e\xeb\xea\x22\x10\xbd\x79\xc8\xea\xc2\x37\x3c\xe3\x7f\x7a\x60\x07\x50\xcd\x74\x17\x9e\x89\x14\xd5\x7f\xd3\xad\xf0\xe2\x7f\x33\xa2\xe0\xbc\xc2\x4c\x25\x6c\x32\x1d\x2e\x6c\x11\x5a\x27\xac\x2e\xe6\x0e\x88\xd6\x06\x89\x44\x14\x8f\xc4\xb4\xf8\x9b\x1b\x51\x5b\xe5\xbd\x33\x44\x1c\xb4\x1d\x17\x45\x3b\x2c\x8a\x4d\x5e\xaa\x02\x92\xa2\x6c\xad\xea\x09\x6b\x6c\x73\xe5\x7d\xc9\xe8\xa6\xc0\xb1\x57\x6b\x90\x34\x1b\xe6\x54\xbb\xa7\x72\xcf\x17\xa4\x30\x95\xd2\x73\xe2\xd8\x67\xd3\x8f\x10\xeb\x51\x46\xb8\xeb\xbd\xd3\xa8\x23\xc6\xd0\xcb\xf8\x71\xec\x45\x0d\x8b\x37\x75\x8d\x5a\x19\xdb\x4e\x7d\x69\xc9\x50\xcc\x51\x30\xbe\xe4\xf3\x0a\x36\xa4\x5d\xc1\xbe\xde\x97\x6e\x8e\xc6\x2b\x14\xf7\x81\xbd\xdc\xcb\x3f\x25\x1c\xf4\x15\x4e\xbb\x46\xc6\x6c\x58\x30\xfe\x14\x32\x5e\xfa\x8c\x3f\x5e\xba\x8e\x60\x28\x85\x7a\x25\xf9\x2d\x8b\xa5\x0c\x88\xf8\xac\xae\x2d\x5c\xf8\xca\x5f\xc7\x61\xa5\xdc\x35\x2f\x5b\x83\xc4\x9f\x60\xb7\xeb\x90\x98\xc5\xb6\xb9\xbe\x2f\xf4\xaf\xb5\x44\x29\x5c\xba\xff\xcf\x12\x4f\xf5\x8b\x87\x11\xe2\x11\x89\xa6\xed\xc7\xdd\x3a\x8a\x3f\xcf\x5b\xc0\xf1\xc7\xdd\x21\x25\x62\xf1\x21\xb3\xd8\x92\x8b\xc0\x1f\x6a\x00\x9d\x2e\x82\x99\x4f\x6f\x67\x57\xad\xe3\x4f\x5c\xe6\x78\x32\xf5\x86\xd7\x10\xc4\x13\x7c\xa6\x18\xb5\x25\xf9\x00\x9a\xf9\xd8\xc3\xec\x9a\x7f\x24\x5a\x6d\x4c\xd5\x65\xc2\x77\xb9\xb6\xe3\x27\x46\xea\xa0\x36\x9f\x71\xa2\x9a\x05\xdd\x75\x89\x3f\xa9\x8f\x3f\x58\x9a\xcf\x8f\x6d\x63\xc6\x9f\xaa\xf1\x9c\xfa\x78\x83\xb0\x3a\x39\x83\xad\xa8\x99\x3d\x88\xa4\xe5\x8c\x8b\xc8\x56\x00\xb2\x6a\x8f\x16\xa2\x09\x00\xae\x8b\x6d\xa0\x6e\x02\xf1\x73\x46\x18\x0b\x16\x4d\x0a\x52\xef\xd7\x6f\x65\x22\x97\x58\x92\x0b\xc4\x7d\x7c\x7e\xec\x62\x0d\x2b\xa5\x72\xee\x72\x70\x13\x31\xa6\xe6\xd1\xbd\x28\x65\xe6\xdd\xfa\x7e\xcb\xd4\x79\xad\xae\x64\xe8\xbb\xab\x49\xae\xc5\x95\x27\xd4\xa0\x31\xdc\x38\x7f\xd4\xbf\xdf\x4b\x8f\x3f\xee\x02\x60\xfc\xb1\xe2\x1e\xd1\x2a\x6f\xb8\x4b\x8a\xc8\xfa\x1f\xf6\x20\xd6\xf9\x46\x74\x95\x39\x62\x99\xae\x83\x33\x35\xdb\xc7\x3e\xb5\x19\x68\xfe\xdd\x28\xce\x58\x3f\x95\x3f\xb8\xb3\xa1\xf0\xb1\xab\x61\x26\xea\xb8\xba\x8e\x84\x1b\x11\xce\xad\x6d\x5a\x30\x49\x4f\x3b\xef\x71\x4d\x4f\x9f\xf6\x51\xfb\xc1\x75\x81\xb3\x4b\xa5\x4b\xe9\x33\xd1\xac\x34\x37\x7e\x4c\xeb\x23\x28\xf8\x1e\xf3\x84\x12\xcc\xa5\x6d\xbf\x51\x82\x86\xc3\x0f\xc6\x13\x89\x37\xac\x86\xac\x53\xbf\x43\xce\xb6\x40\x7b\xe3\x33\x7e\x8e\x47\x25\xa0\x1b\x6e\x84\x8b\xcd\x29\xdf\xa1\x2d\x0e\x1f\xf4\x8b\xfa\xd7\x24\x8f\x6f\x98\x0e\xae\x16\x05\x27\x7c\x88\x27\xff\x6a\xe7\x1d\x44\x81\x18\x92\x99\x69\x56\xfe\x0e\x97\x7d\xd3\x90\x50\x3d\xf8\x93\x57\x55\xf4\x86\xf8\xd5\x92\x18\x2f\xb3\xb0\xe1\x2a\xf3\x20\xb9\x68\xc9\xe6\x51\x83\xd0\xc7\x62\xef\x18\xb3\xc2\xbc\x76\x5b\x44\xbc\x69\xa1\x25\xd9\x89\xd9\x3e\xe4\xef\x58\xf0\x11\xbf\x06\xdc\x70\xec\xd0\xd0\xdb\xe3\xd1\x27\xf3\x87\x5b\x8d\xb2\x55\xab\x14\x98\x14\x29\x1c\x9a\xaf\x76\xf1\x90\x07\x30\x71\x28\xdd\x42\x9f\xab\x64\xf6\x62\xd9\x5c\x8c\x25\xb0\xf4\x32\xf8\x68\x2d\x76\x59\xef\x9d\xd6\xb9\xb0\x00\xa6\xf2\x4e\x9b\xbb\x74\xf1\x46\x99\xef\x45\x0b\xc2\xda\x4a\x82\x46\xa4\xb9\x4e\xc7\xab\xc9\x03\x12\x25\x94\xda\x54\x60\x55\x28\xbe\xdc\x46\xbd\x1d\x48\xbf\x53\x8b\xa4\x47\xa4\xf0\x85\x54\x76\xdd\x65\x64\x79\xd3\x85\x72\x8d\xcf\x84\xeb\x3f\xd8\x2a\xd4\xe5\x33\x87\xad\x89\xf8\x0c\x26\x83\x31\xbd\x14\x7a\x67\x98\xf3\x5b\xc8\x63\xca\x74\xf9\x9d\xc3\xb7\x84\x19\x7f\xb4\x0d\xe6\xd4\xdc\xce\xee\x3b\x57\x1d\xd5\xde\xb9\xfa\x67\xbd\xef\x5c\xbf\xad\xa7\xe5\x09\xfd\xd3\x9c\x4e\x8d\x45\x77\xdd\xde\x79\xd6\x66\x53\xc0\x77\xbe\x2d\x5d\xb2\x8a\x7d\xd7\x9c\xf5\xdd\xe4\xbb\x36\xf7\x28\xf6\x5d\x5b\x5c\xe0\x2b\x61\x34\x6d\x45\xa0\x8c\x40\x80\x65\xee\xf0\xae\x78\x75\x4a\x63\x21\x6a\xfe\x37\xbd\xf2\x81\x02\x20\xb3\x21\xeb\xcd\xd5\x5d\x37\x06\x62\x2f\x88\x91\xa9\xf7\xe1\xde\xca\x10\xbd\x9d\xa5\xbd\x2c\x7a\xc3\x42\x37\xfb\x62\xac\x53\xbb\x69\x0b\x9b\x34\x89\x16\x36\xd7\xb5\x9a\xab\xd9\x16\x8a\xee\x8c\xbc\xa1\xa7\xca\x87\xe3\xdd\xc2\x5c\xad\x7a\x5b\x8c\x7a\x09\x0a\x89\xc6\xa2\xc2\xbf\x00\xeb\x0e\xc9\xbb\xb9\xcf\xf5\xbb\xa5\x8d\x3b\x64\xab\x5a\x9e\x00\x35\x14\xb9\xb6\xfc\x9e\x9b\xce\xb7\xde\xcf\xbb\x54\x78\x89\x42\xbf\x98\xc2\xcc\x72\x0d\x36\x33\x01\xca\xd1\x4c\x97\x41\x39\x81\x73\xc7\x6f\xef\xa9\x23\xc8\x1c\xd3\x9e\xaf\xa9\xfa\x74\xc2\x57\x28\xf2\x09\x75\x7a\x24\x98\xb5\x28\x47\x91\x5b\x68\x4d\xf7\x48\xb6\xd0\xa3\x41\x7a\x9d\xba\xd1\xdd\x45\x5d\xac\x32\x17\x67\x51\xaf\x7f\x6e\xb1\x44\x13\xd0\x62\x8c\xf2\x47\xf7\x46\xf4\xab\x2e\xd7\x48\xcc\xab\x8d\x4b\xc8\x2c\x94\xe6\x83\x18\x66\x3e\x9c\xb9\x94\xc8\x16\xcb\xe4\xab\x70\x5b\x74\x82\xd4\x1c\x13\x3f\xd5\x25\xb5\x3e\x12\x2a\xaa\xd4\x3c\x11\xbb\x76\x04\x09\xde\x2e\xfb\x6e\x32\xbd\x91\xdc\x3c\x66\x3b\x5b\x6c\xb3\xc8\x2d\x34\x26\x62\xa3\x75\x17\x6d\x1b\x74\x4b\x99\x5b\xc2\x96\x64\x37\x67\xcb\x41\x86\xd9\x2d\x07\xbc\x15\xb1\x2a\x91\x6b\xa7\x4c\xa4\x66\x72\x90\xb2\x16\xad\x19\x88\xe7\xb0\xba\xaf\xfd\x8c\x14\x68\xbd\x62\x73\x3b\x2b\x5b\x0b\x8b\x3c\x39\x07\x2c\xe3\xe1\xd6\xc2\x3a\x65\x2c\x46\x75\xc7\x0a\xfd\xd9\xba\x2a\x2a\x31\x6c\x7e\xb4\x4a\x1e\xf5\x81\x64\xa8\x8d\x1b\x40\xf0\xb5\x81\x0e\x20\x5b\x0b\x57\x2c\x82\x92\x97\x0e\xa6\x06\x5c\xba\x2d\x06\x6e\xc2\xa8\x98\xa1\xf0\x33\x85\x66\x99\x89\x87\x14\x6a\x4b\xf1\x92\x14\x9a\xbc\x01\xc4\xea\xda\x9e\xc8\x6f\xad\x6a\x77\x25\x2c\x16\xd3\x06\xc8\x6d\x0e\xbd\x11\xb9\x87\x97\x0d\xc4\x48\xa6\x58\x2c\x1f\xd2\x4e\x89\x24\xe7\xb9\x24\xbd\x68\x6a\x9c\xe7\xc9\x7b\x68\x87\x74\x63\xc6\x9c\xba\x3d\xfc\x86\xb6\x0a\xd1\xb3\x8b\x3d\xae\xea\x1e\x61\x57\x0b\xed\xc2\x7b\xd4\x4d\xb1\x3d\x1e\x2a\x7e\x19\xd8\x69\x16\x8f\x1b\xb3\x42\x39\x55\xb1\x59\x67\xc4\x33\x77\xe7\xae\x6a\x00\xd5\x9c\xf4\x24\xd3\xdf\x3d\xba\x11\x6c\x4f\xb1\x99\x1c\x26\x63\xec\x2d\x45\xdd\x65\x12\x2c\x36\xf8\xaa\x62\xf1\xd8\x6c\x9a\x8e\x7c\xc6\xd8\xb6\x1e\x49\xa5\x8a\xec\xf5\x40\xb5\x6d\x52\x2a\x44\x1d\x33\x09\x53\x3b\x7c\x07\x38\x87\xf3\xe5\xd2\x3f\x0f\xda\xb4\x43\xf0\x34\x96\x81\x6f\x9f\xf6\x30\x75\x9f\x3a\x5f\x54\x9d\x92\x82\xa7\x54\xc2\xbd\x36\x9f\x10\xa0\x22\x15\x1b\xe8\xd6\xdc\x70\x85\x94\xf5\xb8\x23\x3d\xa3\x3d\x86\x37\xc6\xb9\xbf\xcf\x22\xcb\xf9\xfd\x3e\xab\x1d\x4c\x19\x23\x97\x69\x41\x75\xa0\xba\x29\x9c\x56\xde\x65\x43\x90\xbc\xb1\xf5\x46\xd6\x03\xa5\xc4\xc6\x5b\x25\x62\xe7\x44\x91\x28\x11\x3b\xd5\x9f\x89\xec\xce\x9c\x99\xb4\x69\x4d\xa5\xad\x58\x8b\x43\x92\x8c\xa0\xde\x7d\x73\x58\x65\x1a\x91\xb2\x1d\x12\xa4\x9c\xa7\x1f\xbf\x8d\x9b\xbd\x2d\x7c\x93\x7b\xfc\x89\xd8\x5d\x05\x4c\x78\x4d\x98\xbb\x05\x13\x57\x22\x30\x75\x96\xeb\x8d\x4a\x56\xcf\x24\x05\x42\x25\x58\x97\xc1\xc3\xdd\x0b\x66\x62\x11\xb8\xe1\x2f\x1d\xf0\xa9\xe2\xdc\x1e\xc7\x2c\x51\x91\xb4\xc5\x74\x9c\xba\x20\x4e\xc7\x19\xdd\xbd\x33\xa0\xfe\xc5\x9c\xe3\x92\x3b\x7f\x17\x1f\x59\x32\xa7\x80\xad\x5d\xa0\x81\x54\xc2\x71\xfa\xe3\x30\xa0\x8f\x9c\x9e\x2d\x6e\xc5\x8a\x45\x36\x38\x5c\xba\xfe\x6e\x79\x24\xff\xca\x11\x88\x2b\xab\xd3\x3d\x19\x4d\x7f\x04\x53\x24\x14\x08\x21\xd5\x21\x64\x65\x16\xbb\xbe\xfb\x79\xbe\x39\x4e\xf8\x08\x5b\xa3\x20\xe6\xea\x80\x0d\x78\xc4\x4e\xfe\x75\x63\xb2\x17\x25\xeb\x93\x9b\x83\xe6\xe4\x9c\x31\x95\xca\x2e\x7f\x2e\xe6\x98\x81\x45\xd6\x66\x37\x6b\xba\x10\xaa\xd9\x5d\xe3\x8f\xc4\x8b\x97\xca\x34\x96\x35\xd9\x00\x93\xf0\x32\xc5\x3a\x25\x37\xc2\xac\xb8\xcb\x3a\x17\x0d\xc7\x2e\x61\x27\xff\x14\x12\x48\xde\x2c\xe6\xe9\xf2\xbc\x4e\x9f\xe1\x75\xe2\x59\x47\xf6\x4c\x93\xc2\x7b\x75\x08\xd4\xcd\x3b\xe4\x6c\x91\xbe\xf5\x3a\x33\x61\xcd\x3c\x12\x0d\xc9\x5d\xcf\x46\x62\xfb\x6b\xc9\xad\x55\xd3\x73\xbd\x28\xd4\xca\xf7\x79\x9b\x1a\xb8\x8f\x3e\xfb\x8b\x63\x89\x57\x81\x16\x0d\xad\xa5\x9c\xbd\x5f\x5c\x25\x3f\xc5\x4f\xcf\x09\x43\x2a\xf6\x38\x3e\x3d\xbf\xb0\x4c\x25\x09\x7e\xf3\x97\x99\xa6\x3d\x59\x52\xbe\xa6\x2b\xe4\xea\xe5\xbf\xa4\xf2\xdf\xd4\xed\xcf\x84\xef\x15\x35\xe2\x7e\xa6\xde\x5d\xeb\x7b\x5c\x39\x12\xaa\x0d\xe7\xcf\x9b\xc3\x24\x8f\x04\xff\xc7\xc0\xfc\x37\x77\x07\xc7\x73\xd7\xf6\xf0\x6e\x98\xe6\x7d\x44\x7c\xb5\xaf\x71\x0e\x92\x0f\x25\x09\x7e\x3c\x26\x42\xea\x0e\x13\x8c\x7b\xfb\xc7\x19\x02\x1a\xfd\xe9\x44\xf8\x1e\xa9\xf9\x30\x48\xd3\xbd\x59\x3f\x47\x83\x11\xdb\x59\x73\x78\xc4\x4a\x06\x2e\xda\xb3\xc5\xf1\x88\x14\x0d\xfe\x06\x43\x66\x7f\xbc\x79\xde\xe6\xa9\x2d\x81\xa9\xb7\xee\xbe\x7b\x08\x7f\x44\xf1\x78\x8f\x97\x0a\xaa\x3d\x08\x9a\x35\x64\x2e\x04\xe6\x1a\x43\xab\x28\xe3\xc3\x1b\x5c\x76\x9d\x4e\xb8\xa5\x70\xba\xa6\xea\x2d\x2e\xdb\x6b\x04\x62\x87\x56\xa9\xae\xfa\xe9\x92\x39\x1d\x00\x67\x26\xab\xd4\x24\x17\x41\x52\x93\xf3\x3b\x42\x9c\xb7\x96\xfc\x97\x40\x45\xaa\x24\x27\x51\x25\x35\x55\x2a\xc7\xcc\x95\x4d\x6b\x78\x6a\x26\x09\x6b\xcd\x36\x3d\x89\x98\x37\x27\x4d\x08\xd8\xf0\xee\x64\x1a\x4c\x58\x9d\xf5\xea\x6e\xa8\x24\xf7\x48\x38\x75\xd5\x10\xa0\x44\x8a\xaa\x77\x3d\x74\xfe\xaa\x28\x16\x5d\xfb\x0d\x09\x25\x16\xcb\x87\x84\x62\x66\x3c\x4a\x20\x4b\x0f\x97\x3c\x68\xc0\x90\xb1\x4a\x68\xcd\xae\x8f\x7d\xb9\xf9\xbb\x60\xb2\xf9\x24\x5d\xae\x7f\x4a\xfd\xce\x71\xb5\x9e\xf5\xa9\x7d\xa7\x0b\x5d\x39\xbc\x74\x9f\x16\xb1\x91\x65\xf0\x34\x13\x21\x67\x13\xb1\xd6\x9c\xed\x78\x64\xff\x1c\xd8\x34\x54\x1a\xd1\x60\xfd\xd4\x2e\x87\xb6\xe8\xa7\x0f\x75\x57\x8a\x1f\x59\x7d\xe6\x28\xf2\xd2\x72\x54\x61\x5b\x39\xf2\xe6\x0f\x80\x51\x19\xa5\x6e\xdd\x1a\xe8\x50\xc1\xad\x39\x6e\x4e\xc8\x5b\x8e\x67\x5a\x51\x35\x84\x04\xa2\xbc\x3c\xb9\x79\x30\x38\x76\xf1\x35\xf0\xd6\xf0\xf2\x20\x62\x77\x45\x01\x53\x04\xc3\x64\xad\xd7\x9c\x5e\x51\xb6\x09\xe8\xf9\x4d\x66\x98\x56\x4b\x65\x5a\xdc\xdd\x59\x62\x5c\x10\x28\x5a\x2f\x99\x3b\x2d\x96\xc7\x04\x14\x99\xda\x14\xa9\x4b\x95\xa9\x92\xe9\xe4\x46\xea\x2f\x95\x4f\xd8\xd8\xe3\x7f\x33\xbe\x5d\x6a\x81\x6a\x7d\xa4\xff\x66\x5a\x0d\x59\xc5\xda\x31\x25\x89\x40\xce\x06\xa9\x71\xe7\x34\xd2\x66\xc9\x1e\x53\x4b\x8f\xb1\x78\x91\xf4\x5f\x1a\xde\x4f\xba\x74\x24\xc8\x72\xc7\x02\x81\xbd\xb4\x64\x2a\x8e\x2c\x3c\x55\x9e\x63\x58\x6c\xac\x7c\xab\x46\x56\x7f\xea\xda\xe4\xf6\xa0\x31\xf1\x72\x33\x98\x8f\x15\x03\x51\xcd\x1c\x6a\x9b\x26\x60\x93\xad\x3c\x37\x70\xa5\x6e\x84\xd1\x6b\x45\x5c\xf3\xb8\x9e\xe5\x1b\xec\xb4\x7b\xed\xf9\x3e\xce\x5d\x56\x6b\xf9\x6e\x0e\x50\xc2\x8e\xb0\x69\xbf\x17\xfc\xb0\xe1\x12\x3a\xc2\x27\xce\x93\x50\x0e\x32\x05\x64\x5c\x0c\x73\xbc\x47\xc8\x96\xbf\x83\x04\x6d\x53\x4a\x8f\x90\xb3\x0e\x2c\x47\x70\xb2\x6c\x60\xd9\xfd\x26\x8d\x0d\x88\x4f\x37\xd1\x51\x6e\x6e\x8b\xf4\x7e\xc2\x5a\x69\x47\x28\x53\x52\x57\x26\x9e\xc4\xa9\xc3\xc6\xbb\x8d\x07\x0a\x03\xcb\x0a\xd3\x21\xc6\x1f\xfb\xb4\x1f\xa1\xb5\xe4\x9e\x95\x02\x97\x76\x7d\x04\x9d\xe2\x1e\xa8\xf7\x45\x03\x1e\xcf\xd5\xd4\xe1\xb6\xbc\x51\x19\x94\xae\x9d\x8d\xa9\x6d\x4b\x26\x70\xed\x40\x5d\x14\x96\x7f\xc8\x05\xa2\x18\x9c\x14\xb7\x23\xc2\x1c\x48\x83\x20\xa6\x71\xc7\xd5\x2e\x6d\x1d\xd1\x7d\x54\x0e\xbb\x35\x77\x3c\x9e\x6d\x22\x93\x8d\xd2\x03\x77\x8d\x9c\xd5\xb4\x93\x9d\x23\x66\xb9\x65\x45\x50\xea\x1a\x88\xbb\xed\x7c\x44\x7d\xb8\x79\xc4\x12\x16\xc3\xab\x4e\x56\x8e\xa8\x99\xd6\x09\xe5\x11\x1b\x58\x27\x49\x2f\x0c\xfc\x3c\x30\xa8\xbe\x60\xc3\x76\x40\x41\x06\x3a\x56\x38\x2a\xe1\x8e\x80\xaa\xfa\xcd\x9e\x34\xf7\x9b\x77\x94\x9d\xbd\x3c\x99\x79\x46\x1d\x43\xc6\xa3\x73\x1b\x6b\xb3\x6d\x13\xcf\xd5\xf5\x6e\x65\x46\x58\x6d\x2c\x14\x1f\x5b\xf3\xef\xf3\x8f\xb4\x34\xd9\x49\x42\x6c\x5b\x47\x8e\xb2\xdf\xa4\x47\x30\x08\xb5\x0e\x90\x48\x27\xc2\x57\xca\xe2\x4a\x05\x40\xc3\xc0\xd2\xfc\x61\xc0\x91\x4a\x3a\x0c\x76\x13\x37\x7b\xa4\x16\x16\xdd\xc3\x3e\x52\x5f\x76\xdb\x82\x05\x2a\x73\x41\x96\x42\x25\x35\x98\x48\x68\x23\x37\x2c\x62\x92\xa8\xfa\x92\x4a\x67\xed\x30\x00\xf4\xcd\x29\xe2\x62\xc8\x1a\x7b\x15\x0d\x44\x57\x7c\x70\x0d\x77\xb5\x4d\xea\xa3\xf2\x76\xb7\x69\x9b\x46\xe2\x76\x4c\x0e\x12\xbc\x2d\x29\x20\x29\xdc\x4f\xb6\x78\x62\xe9\xb0\x1b\xf3\x47\xf5\xe9\x2b\xee\xd5\x18\x30\xa8\x5a\xb3\x6d\x12\x76\x93\x1e\x50\xb5\xf5\x57\xf7\x72\x9f\x89\xce\x6d\x51\x41\xb6\x66\x6b\x96\x11\xf4\x43\x70\xd4\xcb\x06\xaf\xb9\xa4\x1c\x36\xb3\x9b\x8b\xa2\x2c\x92\x08\x55\x4f\xb4\xe1\xe4\xef\xa7\xff\x51\x10\x8d\x26\xa2\xe8\x16\x89\x09\xd5\x10\x5d\xb1\x08\x6d\x48\x9d\xe3\x11\x9c\x1b\x5d\xe6\x70\x69\x93\x35\x22\xab\x25\x45\xa4\x45\x75\xdb\x27\x59\xb5\x87\x32\x76\xdd\xcf\x6b\x10\x2d\xb5\x3c\x95\x6c\x12\xaf\x86\x6d\xa4\xf5\xeb\x41\xc1\xce\x97\x73\x46\x57\x25\x54\xfb\xa4\x42\xe7\x7a\x0e\x8b\xff\x52\x60\x8b\x0f\x52\xfb\xd8\x14\x72\x01\x3c\x34\x38\x02\xb5\xce\xc2\xd8\xe2\x30\x3d\x86\x42\x92\x06\x6e\xda\x0c\x81\xa9\xc6\x3d\x20\xed\xd2\xc0\xbb\x3e\x11\x10\xcd\x72\x84\xb4\x78\x44\x6d\x59\x2d\x4e\x0b\x58\x2d\x5e\xb7\x16\x30\x19\xc3\x44\x5d\x95\x4c\x1d\x1e\xea\xab\x98\x32\x74\x1a\xa1\x8a\x69\x66\x2a\x7f\xf4\x2e\x95\xa2\x07\xde\xa5\x6a\x5b\xa2\xa7\xd9\x5a\x55\xd5\xe3\x09\xdf\x1a\xc1\xcd\xee\x39\x94\x39\xf4\x2a\x2a\x62\x9d\x17\x33\xa3\x42\xae\x2f\xbb\xdf\x56\x5f\xee\xd1\x82\x10\x4d\x59\x7d\x65\x5b\x3d\x32\xe1\x01\xa7\xbe\x50\xb8\x14\xa7\x96\x99\x84\xf9\x47\x12\x15\x19\x70\x22\x81\xf4\xfe\xb0\xd3\x2b\x62\xf5\xd5\x87\x7e\x2c\x94\xa8\x43\xbf\x45\x53\x5f\x7a\x15\xbb\x3e\xf4\x1f\xd5\xc5\x6d\x72\xd6\x45\x1e\x9a\x12\x92\x34\x2c\xcb\x3c\x7d\x02\x17\x12\xee\x41\x77\x37\xf0\x5d\xbb\x7d\x73\x81\x0a\xf4\xaf\x64\xea\xf3\x99\x4c\x7d\x3b\x11\x0c\xf5\x6d\x42\xbe\x09\x4b\x4c\x2c\xb3\xba\xe6\xb7\x3d\x71\xae\x50\xb0\x3a\xe4\x1a\x63\x2f\x5e\xcd\x0e\xde\x79\xe6\xc4\x9c\xb6\x8d\xc8\x52\x84\x16\x87\x39\xa7\x44\x34\xa3\x7e\x9f\xbc\x9e\xa9\x24\x93\x48\xac\x54\xad\xdd\x8b\x43\x24\x1a\xa6\xbf\xd6\x07\xac\xda\x4c\xbe\x9e\x9a\x0c\x1d\x1d\x00\x1e\xd6\xa8\x94\x99\xad\xa6\xaf\xc9\xef\xb2\x9b\x02\x93\xda\xf4\x8c\xb9\xb6\x4d\xc4\x77\x57\x6c\xeb\x9a\x40\x62\xec\x3e\x6d\x5a\xe0\xad\xb8\x8b\x0d\xa6\x18\x94\xb1\x3b\x02\xf6\x9c\x5d\xf7\x85\x27\xbe\xb5\x1f\x32\x5e\xd4\xee\x6f\x25\x32\xe3\xa2\xb8\x62\xcb\xe1\x94\xd7\xe8\xf5\x5b\xae\x57\xd4\x1f\xb7\x36\x64\xc2\x5e\x7e\xd2\x6a\xab\x36\x62\xea\xee\xde\x4c\xce\xcf\x19\x16\x77\xab\x85\xd8\xe2\x20\xa5\x58\x88\xb4\x2c\xe2\x52\xf2\x67\x80\xc2\xa3\xab\x5b\x67\x48\x1c\xae\x7b\xfb\x4c\x84\x43\xca\xd9\xa6\xd7\x67\x30\x41\x3c\x67\x28\x5e\x37\x82\xa3\xe2\xf3\x54\xe0\x5c\x9d\x0f\x27\xcd\xde\xcd\x2b\x31\xbb\x15\x77\xf3\x94\xe6\x1c\x0d\xdf\xc3\xbc\xf5\xf4\x97\xa8\xa7\x55\xef\xb6\x90\x8e\x17\xb5\xc8\x29\xb8\x79\xd0\x19\x5a\xd5\x99\xcf\xa9\xaa\x02\x4e\x5b\x00\x21\xd4\xac\x37\xd1\x57\xa3\x61\x8f\xc4\x4f\xc0\x01\x73\x98\xbd\x47\x59\x8b\x01\x31\xef\x34\xf0\x0d\x61\x43\xda\xfb\x19\x86\x6b\xcb\xc4\xa4\xde\x6d\x85\x75\x06\x68\xa1\x32\xfe\x20\xd3\x19\x81\x31\x75\xdb\x52\xd5\xe2\x19\x10\x8a\x84\x28\xf3\xc4\x33\x86\x0f\x9b\xc5\x65\x16\xb9\x98\x77\xc6\x95\xf5\x9b\x7b\xc2\xc1\xc6\x35\x6d\x2d\x8a\xaf\x2f\x77\x5e\x74\x46\x98\x81\xb1\x27\x49\x71\x74\x97\x67\x9d\x36\x1c\xb7\x8b\x7d\x9a\x14\xbb\x33\x96\x68\xb2\x4d\x98\x0d\xb3\x4c\xc3\xfc\xf8\x73\xb8\x13\xd6\x4f\x26\x74\x83\xa9\xfa\xa3\x8d\x75\x6f\xe9\x46\x9c\xf3\xb1\xef\xce\x6c\x9a\x5d\x3a\x93\x46\xda\x96\xa9\xc3\xde\x19\x9b\x9d\xf6\x30\x71\x71\xbc\xed\x60\x4d\x98\xa5\xc7\xdd\x56\x3b\x63\x4b\x32\x2f\xc2\x83\xc9\x55\x4a\x90\xb0\x26\xc4\xdd\x33\x26\x66\x01\x7c\xc9\x0e\xc0\x49\x37\x82\x34\xb9\x47\x74\x5e\x8e\xe8\x6a\xaa\xf9\x6f\x8a\x50\x67\x39\x2c\xed\x4f\x4d\x45\x68\xe0\xca\x87\xe4\x55\x6a\x52\xbc\xf8\x4a\xa1\x32\x14\x01\xbd\x62\xd3\x16\x40\xd4\xf9\xb5\xe3\x1d\x66\xce\xce\x55\x57\x9f\xf6\xbe\x85\xa8\xcf\x09\x52\x4d\x00\x89\x32\x14\x32\x4d\x45\x24\x53\x8b\xe1\x82\xf4\x38\x6c\x61\xd8\x69\x00\x13\x8b\x0d\x35\xd9\xe8\x10\x17\xf1\x22\x86\x44\xc7\x44\x46\x91\x3d\x6c\x75\xd1\xb1\x6b\x0f\xed\x08\x4b\x9c\xff\x0f\x17\xf7\xb1\xe8\x00\x09\x58\xa7\x7c\xe7\x9e\xb2\x53\x9e\xfd\xc7\xc0\xdc\xb8\xa1\x41\x99\xb3\xed\x2a\xf1\xdf\x51\xb1\x97\x75\xf8\xb9\x57\xd5\x1d\x86\x78\x3c\xb1\xba\xef\xb6\x0d\x47\x4c\xa7\x4c\xe7\x5e\x87\xff\xca\x7a\x2e\xde\xdd\x25\x48\xbf\xff\xf0\x50\x80\xfc\xa0\x6c\x8f\xa2\x26\xa5\x80\x93\xbb\xa3\x79\xa6\x62\xd2\xea\x58\x82\x32\x3b\xcb\xa1\x44\x1d\xfc\xed\x5c\xe3\xd4\xad\x1f\x14\xd3\x69\x1a\x76\xd1\xc0\x0e\x43\xcf\x1c\x5d\xeb\x03\x22\x4d\xc8\x76\xb4\x01\x72\x2b\xc8\x8f\x15\xd3\x99\xe7\x53\x35\xd5\x69\xca\xaf\x6b\x39\xab\x16\x42\x4d\x5d\x05\x11\x9e\xb0\x98\xb7\x29\x02\x53\x89\xb5\x66\x13\xf5\x8f\x9b\x29\x46\xca\x6a\xf3\x43\x62\x1a\xe2\xa9\xdd\x19\xa0\x1a\xb7\xf2\xa8\x29\xab\xc3\xda\xce\xfd\xd6\xe5\x95\x7f\xf5\x81\xc2\x9b\xf4\xd6\x36\xb0\x16\x6e\xb3\x34\xcd\x9c\x8c\xad\x2c\x6a\xef\x2a\x82\x89\x89\x39\xb5\xf2\xae\x7d\xec\xf3\xd0\xf0\x5d\xc4\xee\x59\xd0\xd9\x48\x76\xbd\xd8\x35\x27\xca\x9e\x09\x47\xd4\x82\xbd\x67\x55\x22\x0e\x9d\xda\x97\xb3\xc5\x45\xa5\x35\x2a\xd1\xe8\xa2\xee\xfe\x22\x3e\xdd\x46\xe2\xd9\xa2\x6d\xfa\x02\x71\xfb\x09\x44\x2d\x0f\x44\xcd\xd2\x5d\x0c\x20\xf6\x88\xd3\x44\xa2\xd1\xbd\x14\x4d\xdc\x6e\x0f\x63\xce\x16\xf1\xa0\x4c\xdd\xf9\x63\xb3\x93\x84\x7b\x72\xe6\xe3\xe9\x64\xe4\x09\xb5\x74\x53\x85\xe9\xb8\xdb\xdc\x42\x1a\x89\x2a\x59\x60\x76\xba\xa0\xba\x9f\xcc\x30\x7d\x86\xe5\xd6\x8e\x42\xbd\xff\xf4\x2c\x6d\x7d\x8f\x0c\xd8\xc9\xe1\x3d\x5b\xb4\x27\xa7\x40\x9e\xf1\xe2\x09\xf2\x1f\x2a\x1e\x53\xec\x23\x73\x5e\xf1\x6c\x48\x2d\xca\x92\xce\x2c\x59\x4b\x3e\xc0\xa4\x37\xe4\xce\x96\xae\x94\xe3\x26\xce\xaa\x7d\x58\x00\x5b\x68\x40\xb4\x4c\xeb\x2b\x47\xd7\xfa\x94\x4a\x3e\xeb\xe2\x57\xc6\xc0\x9d\xf4\x50\xa0\xd3\x35\x8f\xea\xae\xbb\x30\x93\xb4\x55\x77\xf9\xe5\x6c\xf5\xcd\xb7\x84\x01\x5a\x97\x23\xe2\x63\x7b\xa3\x4a\xe1\x64\x3c\xb9\x1a\xaf\xef\xe4\x90\x4b\xc6\x06\x6b\xa0\x47\x1b\xaf\x5e\xb1\xe9\xd9\xaa\xbf\x07\x22\xd4\xca\xc4\x09\x50\x10\xa6\x4e\x33\x0c\xd5\x7c\x00\x03\xd4\xad\xca\x89\x6a\x51\xe6\xf4\xc3\xe8\xb0\x4f\x3e\xca\x9f\x17\x5d\xdc\x4c\xbb\xc5\x6c\xaf\xfa\xcf\x56\x61\x6d\x64\x99\x02\xe6\x2d\x63\xb6\x56\x56\x4d\x11\xa5\x12\x2d\xb3\x33\xd9\x9e\x94\x50\x1f\xd0\x53\x59\xa3\x33\xc9\x7f\xf8\xf8\xe3\x40\x6b\x0d\x9a\xae\x7e\xc0\x5a\xed\x41\x93\xf2\xa7\x17\xd6\x7e\xfa\xd2\x1a\x8f\x72\x1e\x8f\x72\x1e\x26\x27\x0b\x18\x8e\x98\x9a\x42\xf7\x6c\x0c\xd8\x7c\xd9\x1c\xae\x55\xd7\x8b\xeb\x95\x56\x4d\xa5\xbd\xff\x55\x62\x0d\x0b\xaf\x51\x38\xf6\x68\x85\x4c\x35\x83\xfe\x3d\xf0\xd9\xa6\x05\x3b\x7d\xa0\xfd\x86\x55\x9c\x6c\x1d\x11\xf5\xd0\x39\xab\x5e\x27\xeb\xd3\xc4\xbb\xb2\x79\x87\x51\x6f\x6f\x4f\xb8\x88\x4b\x80\xf3\x95\x1d\x72\xb3\xf6\x19\xe5\x11\xd9\x39\xf3\x61\x59\x9c\xd9\xee\x31\x31\xe1\xdc\x4e\xbb\xc2\xc4\xd8\xdc\x15\x2f\xb9\xfe\x9c\x2a\xa2\xfb\x9c\xe5\x11\xa9\x7b\x06\x05\xc4\x85\x6d\x9d\x70\xb6\x65\xb7\x8b\x7e\xe7\x6c\xae\xf1\x23\xb1\x51\x61\x36\x3b\x66\x38\xdd\x6d\x8b\x73\xb6\x53\x1f\x8d\x9e\x13\xa6\xe1\x92\x9e\xa6\xcf\x60\xce\x39\xdc\x9b\x23\x66\x3a\x86\xdd\xb6\xb4\x7d\x0a\xb0\x42\x66\x1f\xd8\xff\x20\x68\xc7\x5b\x78\xbd\x4c\x11\x4d\xd3\xb7\x09\x78\x61\x86\xa2\xa2\xbb\x33\x1c\x1c\x13\xf1\xbc\x9a\xcf\x35\x55\xbb\xa2\xd5\x82\xbd\x88\x06\x1c\x1f\x64\x25\x54\xd6\x7a\x30\xda\x34\xf8\x61\x2e\x47\xf4\x98\x3d\xb9\xe7\x04\x7e\x6f\xae\xfd\xdd\x8e\x7f\x18\xfc\x71\xc3\x4b\x6a\x98\xb2\xb8\x3b\x80\x44\x39\xfd\x6e\xa2\xda\xfc\xcd\x68\x24\xbf\x0f\x2b\x99\x4e\xb6\x18\xba\x8d\x4e\xc4\xd4\x0a\xaf\xc3\xf0\x78\xd2\x48\xce\xaf\x6a\x07\x6f\x0f\x09\xbe\xcd\x4b\xf0\x6d\x5e\x82\x6f\x8b\xee\x95\x3c\xcd\x9c\xa2\x86\x90\xe0\x13\xc7\xf9\x14\x36\x2c\x14\x5f\xe5\xf1\xa1\x60\x09\xe8\x74\xa1\xa2\x2e\x1f\x29\xa0\xc5\x74\x02\x02\xf1\x7a\x76\x80\x97\xc5\x54\x4a\x02\x77\xe2\xe8\x1a\xbe\x09\xdf\x64\xae\x8c\x72\x29\x6c\x0b\x8e\xa9\x46\xf3\x10\x07\xae\xbc\x4a\xc5\x2c\xb3\x59\x4e\x67\x6b\x9a\xa4\x35\x46\x97\x91\xd5\xcb\xfc\x17\x2a\x61\xae\x6e\x26\xd4\xa2\xde\x7c\x6d\x5e\xfc\x30\x11\xe7\xc6\x35\x30\x2f\x8b\xb8\xc5\xb7\x13\xd9\xd6\x4c\x96\x6f\xf3\x52\x79\x99\x68\x78\xef\x47\xe9\xfd\xb9\x44\xda\xe2\xdb\x89\x5e\x13\xf6\xd7\x56\x3d\xb7\xb4\x45\x6b\x3f\xef\x19\xad\x9a\x80\x18\xf3\x32\x7f\x95\xfd\xb5\xd5\x70\x37\x77\x51\x5c\x98\x64\x66\x73\x3a\xaa\x88\xb9\xca\xf6\xb3\x96\x16\xbd\x36\x2a\x66\x5a\x97\x69\xb3\x5e\xa1\xeb\x46\x9a\x5b\x5b\x6e\xf3\xe3\x20\xab\xc5\x6c\xef\x71\x5b\xcc\xae\x19\x39\x95\xa2\x0d\x25\x2d\x69\x1f\xc3\x1b\x0e\xea\x0e\x19\x07\xee\xb7\x6f\x80\x8d\xe1\xdc\x91\x44\x60\x29\xd8\xa3\xba\x7e\x79\xcc\x67\x61\x95\xf8\x6d\x96\xa5\xce\x62\x4d\xe7\x0c\xc9\x15\x0e\x6e\xd2\x1a\x19\x2d\x79\x7a\x3f\x88\x05\xe1\x34\x68\x23\xd3\xa2\x72\x13\x2a\x20\x65\x04\x23\xee\xe9\xb0\x50\x49\x2e\x2e\xe5\x5d\x88\x26\xa0\x59\x89\x44\xe0\xd6\xa8\x2d\xfe\x51\x6d\x84\x06\x7e\x8d\x62\x06\xbe\x06\x9d\x8c\x60\x26\xcf\x00\xac\xb1\x3c\x67\xe3\xc2\x5d\xba\x71\x52\x40\xf3\x58\x60\xbe\x5a\x91\x79\xa7\x2e\x55\xff\x4d\x5f\x07\xff\xcd\x24\x1a\x9e\xf0\xc3\xe9\xd3\x83\x54\x1b\xa8\x5f\x5e\xfd\x59\x4d\x21\x9d\x86\xb3\x0d\xc0\x3d\x75\xab\x07\xdc\x7f\x73\x41\x74\x6b\xbc\x48\x24\xbd\xbd\x66\x1f\x95\xea\x66\x6e\x11\xef\xdf\x3a\xab\xd3\xe7\xa5\x9f\xd5\xd7\x07\x51\x0d\x73\x54\xdf\x48\x49\x3d\x8c\x54\x84\x57\x0e\x23\xcc\x92\xe6\x55\xc3\xc0\x5a\xb1\x3d\xe4\xa7\x82\x49\x77\xa2\x58\x94\x9b\x97\x11\x52\x56\xe4\x3e\x85\x23\xb4\xf5\xe1\xac\xad\x6e\x44\x18\xaa\x39\xb8\xa1\x62\x2f\x73\xa7\x9a\x7f\x01\x6b\x32\x46\xd2\x51\x68\x24\xfb\x16\xc0\xcc\xdb\xb5\x6f\x3f\x11\x07\xe6\x67\x27\x71\xcc\x56\x0c\x99\xa7\xcb\x34\x27\xe1\x92\x77\xaa\xb9\x7d\x80\x2e\xbf\xb3\x80\xb4\x47\x07\x57\xc3\xc9\x85\xdb\xba\x0b\xb7\x8d\x87\x95\xa5\xeb\x4a\x7e\x4c\x71\xf7\x92\x81\x7c\x3c\xc9\x56\x6f\x7f\x04\xfb\x34\x2f\xd9\xa7\xed\xd1\x3d\xa2\x6b\xbb\xdb\x32\x6b\xfb\xcd\x3b\x22\x80\xd4\xfd\x3d\xf6\x43\x1d\x20\x66\xbf\xaa\xd5\x4a\x5f\x54\xe3\x19\x89\x98\x9d\xba\xd8\x6c\xf8\x26\xd2\x46\xef\x7a\x84\xa2\x78\xb8\x19\x5e\xb5\x8b\xd2\xed\x71\x62\xdf\x9c\x68\x75\x7c\x94\xc9\x40\xcb\xb0\x4e\xd1\xf5\xde\xe4\x1a\x65\x9b\xfe\x95\x93\x32\x2e\x93\xe9\x9a\xe3\xd4\xdd\xc9\xf6\x78\x2d\xd6\x1e\x6f\xc5\xda\xa4\xcc\xcc\xd3\xad\x15\x9a\x5c\x82\x40\x9d\x1e\x6a\x28\x59\xed\x61\x41\x65\xa2\xe5\x41\x22\xb3\xd8\xd6\xca\xc9\xeb\x61\x69\xee\x64\x15\x28\x55\x05\xa0\x64\xc7\xdf\x4a\x29\x85\x48\xb3\x89\x56\xec\xf6\x89\xe8\x78\xc5\x52\x02\xb1\x6b\x94\x3d\x64\x4d\x41\x76\x97\x46\x81\x49\xe9\xf4\x90\x2f\x77\x99\xb1\x3b\xc9\x38\x3d\x94\x65\x24\xf7\x3c\xb5\x07\x09\xad\x6c\x53\x43\x3e\x6b\x71\xb3\x3b\xe0\x4d\xf6\x17\x60\x49\x66\x16\xd0\x61\x17\x07\x25\x9b\x40\x7e\x35\x97\x23\x75\x9d\xe5\x77\xba\xec\x28\x39\xbb\xd4\x58\x84\x2b\xf4\x25\xe4\xd5\x61\x83\x65\x0d\xb2\x3f\x8b\x0b\x27\x0e\x63\xd9\xe3\x3a\xb3\x11\xed\x11\x42\x7e\xd5\xce\x69\x89\x35\xc6\x69\x5e\xf6\xf4\x5b\x71\xff\x5d\x1d\xd4\x1c\x1a\xed\x8b\x11\xe9\xc3\x5b\x75\xe7\x37\x59\xb0\x28\xe4\x48\x0a\x6b\xd1\x0b\x5b\x7d\x69\xe1\x34\x9c\x4e\xbd\x4b\xd4\x97\x99\xff\x97\x71\x9a\x1f\x8b\x10\x66\xd9\xb0\xb8\x7a\x6c\x96\x75\x58\x02\xac\x6a\x65\xcb\x81\x1e\x97\x16\x87\x21\xbd\xdc\x4b\xd4\xc6\x1c\xe6\xde\x57\x55\x1b\xdb\x86\x7a\xbc\x53\x01\x52\x5d\x80\xb2\x54\xe8\xb8\x5b\xac\x01\x3b\x81\x51\x3d\x6e\xae\xcf\x30\x11\x77\xee\x04\xa3\xa3\xfc\x51\x2b\x04\xd2\x69\xf7\xb0\xb3\xb4\x26\xd1\x79\xd4\xa3\x4d\xdd\xbb\x17\x26\xda\x6d\x3e\xdd\xa3\x8d\x65\x3d\x96\xe0\x33\x00\x2d\x35\x1a\x7c\x2e\x47\xbb\x9b\x41\x21\x5e\xcc\x5b\xb2\x88\x90\x48\xf3\x63\xa6\x51\x97\xfe\x88\x4d\x0b\xb8\xf4\x69\xa6\xf3\x4f\xa4\x53\xcb\xee\xa1\xe4\x0c\x45\xf5\xf1\x27\xad\xfb\x09\x6a\xe7\x9d\x6d\x89\xd4\xef\x73\xf7\x78\x0e\xcd\xe3\xa9\x91\xfc\x37\x4d\xac\x80\xd3\xb2\xf7\x54\xb1\xd7\x49\x18\x62\xd4\x76\x6a\x67\x25\x82\xc5\xa1\x8a\xa8\xe9\xf6\xd8\xb4\xeb\x6e\x1c\xde\x86\xb2\x0f\x3d\x52\x81\xc3\xd2\xed\x96\xa2\x3d\xfe\xe4\x54\x3e\x12\xf1\x8f\x94\xd6\xae\x12\x59\xfa\x8e\x67\xfc\xca\xa2\xea\x98\xef\x7b\xd2\x2b\x29\x7d\x6f\xde\xc2\xcb\x6a\x26\x26\x56\xe9\x95\x44\xd3\x75\x4f\x8b\xed\xc0\xc1\x5c\x52\xc4\x1a\xa2\xe6\x09\xf1\x8d\x5a\x28\xa4\x3e\x61\x81\xf4\xd6\x0b\xd0\x4a\x2d\x90\x9c\xf4\x78\x0e\x89\x96\x51\x3a\x92\xf4\xa1\x84\xb2\x53\xa3\xc3\xea\xdd\x16\xe5\xdd\xe7\xe0\x13\x73\x94\xae\xf5\xb1\xda\xfd\x38\xd9\xcd\xfd\xa3\x62\x2c\xfa\xc7\x95\x0b\xc9\xb1\x90\x54\xe4\x70\xc5\xbd\xda\x90\x9c\xd3\x29\xbf\x67\xe4\x3c\x66\xe7\xfb\xa8\x5a\x70\xf5\x45\x4f\x89\x10\xa8\xa1\x3d\x63\x42\x9c\x0d\x59\x4b\xaf\x4b\xd2\xd4\xd7\xe5\x71\xd2\xd9\xe5\x42\x6f\xaf\x5e\x5a\x14\xb0\x55\x81\x6e\x46\x30\xd3\xaf\x4f\xcd\x53\x23\xb7\xc9\xba\x4d\xd5\xf1\xec\xd7\x92\x71\x7a\x75\xef\xbd\xfa\xef\xe0\xe9\x7a\x09\x5e\x10\xe2\x18\x4e\x6b\x86\x67\x68\x1f\x8f\x9d\x1b\xed\x47\xa7\x3d\x5e\x82\x45\x82\x19\x63\x81\xc8\xd8\x21\xd4\xbb\x74\x1f\x68\xa2\x8b\xc3\xce\x9f\x26\x12\x86\x6e\x1b\x96\x81\x36\x8b\xcd\xb7\x29\xa6\xd2\x82\xcf\x3d\xaa\x43\xd5\xe3\xc0\x50\xcc\x53\x36\x60\xc9\x92\x49\x3e\x20\x7e\xec\x04\x90\x83\x4d\x1a\x6a\xd2\x97\xb2\x84\x35\xc9\xa9\xa9\x40\x0e\x26\x6a\x55\x61\xa1\x1c\x8d\xaa\x48\xfc\x7e\x56\xdb\x02\xe8\x27\x4d\x2e\xd9\xc6\x9e\xd7\xc2\x7c\x4f\x06\x1a\x73\xed\xd7\x39\xdd\x49\xdf\xed\x23\x1c\xa7\xb3\x28\x6b\x68\xab\xc7\x5a\x53\x23\x94\x5f\x3e\x86\xe8\x23\x58\xa2\x54\x86\x43\x1f\xfe\xa5\x32\xb2\xee\xad\x5c\x7b\xb3\x59\x33\xc0\xe9\x93\x39\xf4\x2e\x49\x1f\x31\x4b\x9d\xc2\x78\x5c\xc7\x7d\x4a\x5a\x98\x4a\xe8\x4a\x25\x7c\xdd\x85\x87\x48\x3f\x0a\x38\x5c\x1c\x68\x34\x4a\x1e\x76\x24\x3b\xcf\x51\x68\x54\x0b\xb4\xaa\x0a\x9a\x3e\xea\xc9\xbf\x36\x7a\xa3\x10\xb7\x4d\x92\xc4\x44\xfc\xe2\x86\xb0\x34\xde\xd1\xe2\x30\xc1\x07\xf8\x1a\x7d\xa8\x55\xb2\xc7\x3e\xc0\xb4\x0f\x8d\x66\x2a\x3a\x81\x68\x59\xb4\xff\x63\xeb\xca\xf6\x24\x75\x99\xe5\xfd\xbc\x25\xa5\x94\xf2\x6f\x04\x86\xc5\x6e\xfb\xe9\xcf\x2f\x23\x17\xa8\xf9\xce\x45\x95\x11\x08\xc8\xbe\x93\x69\x87\x3c\xf8\xec\xac\x0d\xb8\x84\xa9\xbd\xb1\x87\x05\x5a\x69\x79\x66\x65\xec\xa6\xf1\x4f\xa0\x78\x34\x5e\x1f\x2a\x6d\xdb\xc0\x11\x62\x71\x34\xd6\xc3\xc5\xc4\xc6\x1c\xd1\x8c\x57\x9c\xaa\x0a\xdb\x78\x41\xf6\xf6\xbe\x90\x30\x6d\x5e\xcb\x44\x94\xe8\xb2\xf2\xa1\xd4\xbe\x21\x0a\x34\xff\xa1\x9a\x52\xe3\x85\x8d\xeb\x85\x86\x5d\x8f\xbd\x09\x5b\x5e\xd9\x79\x24\x62\xdd\xcd\x81\x80\xd2\xfb\x5f\xee\x8d\x4e\x95\xb7\x46\xe7\xb0\x71\x35\x99\x1f\x67\x23\xf3\x43\x67\xfe\x04\x27\x5a\xd6\x50\xdb\x78\x8d\xfa\x92\x61\xe9\x78\x2d\xa7\x96\xda\xd8\x68\x74\x2c\x32\x93\x84\x2d\x9f\xdf\x96\x55\xf8\x36\xd6\x31\xec\xd8\x9b\xa5\xc0\x7b\x39\x8e\xd0\xc6\xb1\xaa\xd6\x51\xaa\x5e\xc4\xf7\xb0\xce\x73\xc4\x72\x2e\xac\x7c\x88\xd8\x58\xb8\x46\xbc\x7c\x28\x74\x20\xbe\xac\xdd\x09\x5d\x5f\x36\x4d\xd6\xe5\x48\xb2\x90\x35\x89\xcb\x7a\xfa\x84\xe8\x5c\xcd\x53\xb6\xbc\x5c\x2e\xa3\xb5\xe5\x3e\x15\x16\x90\xd6\x4e\x7a\xb4\xf5\x30\xa1\x52\x75\xd8\x8a\x89\x32\x65\x32\x3f\xf1\xd9\xcc\x32\x35\x9b\x6b\xab\xfb\x3d\xa5\x96\xb7\xef\x70\xe9\xaa\x46\x7b\xe2\xe7\x7d\x4d\x31\xb0\xee\xf1\xb9\x5e\x76\xde\xd3\x88\x5a\xbd\xec\xb4\xad\x62\x7b\x53\xdc\x14\x73\x2d\x74\xf5\x14\x92\xa5\xb7\x95\x68\xce\x3e\x57\xe9\x53\x56\x4e\x7b\xd2\x76\x56\x4b\x7e\x61\x9f\xef\xe6\x57\x99\x9b\x4f\xb8\x2d\xa7\xd5\xe5\xf9\x90\xbc\xdd\x9e\xa4\x67\x22\x05\x9a\x1f\x39\x3d\xd7\xf4\xc2\x0e\x9e\x2b\x36\x7b\xdd\xee\x65\x1b\x99\xef\x4e\xdf\xac\x91\x03\x5d\xac\x2e\x5b\xfb\x44\x97\xe8\xf4\x35\x32\xad\x2f\xf3\x6f\x63\xfc\xb6\x3b\xbb\x02\xc3\x50\x62\xb9\x06\xa3\xcf\x55\xbe\x8e\xd3\x2c\x6a\x25\x7e\x59\xa1\x94\x4b\x72\xdd\xa1\xa1\x57\x77\x2c\x6d\x6e\x32\x2d\x97\xdd\x25\x09\x2b\x10\x67\x66\x77\x75\xdd\x1a\x16\xaa\xdf\xaa\xcb\x46\x71\x77\xb5\xaa\xf9\xe8\xeb\x40\x14\xfc\xd2\xf1\x90\xb1\xdf\xe9\xe9\xcf\x02\xa7\xde\x11\x23\xe2\xcd\x2a\xdd\xa7\x2f\xc7\xae\xba\xdf\xa6\x30\x74\x90\xb9\x0f\xbf\x50\x7d\x1f\xfd\x72\x5e\x6d\xa1\xf3\xfd\xbf\xf6\xe7\xae\x3d\x98\x15\x6e\x62\xf3\xc2\xa1\x31\x0d\x55\x54\xf3\x6b\xb9\x74\x21\x6c\x36\x6e\x62\xd0\x97\xb7\x92\x8c\xac\xd9\x3b\x2e\x98\x5b\x3f\x26\x56\xdf\xba\x4f\xd3\x73\x1a\x9e\x2f\x4c\x4f\x78\xf5\x55\xe8\x6b\xf7\x69\x68\xdb\xfd\xa9\x8f\x6f\xd5\xff\xfd\x8f\xc4\x63\xa8\xe1\x9b\x82\x6e\x88\x2e\xca\x5c\xba\x6f\xcb\x67\x69\x10\x38\x1b\xeb\xe5\x9c\xc8\xa2\x40\x1c\x50\x63\x77\x7a\x3b\x85\xa1\xd8\xde\x58\x33\xfa\x79\x61\x60\xbd\x36\xdc\x4f\xbf\xa8\xbf\x9c\xcc\x6c\x2e\xe5\xe1\xfc\xcc\xdd\xd3\xe7\xea\x17\x87\x8b\x1c\x38\xa2\xf3\xc0\xeb\x64\xf6\xb6\xba\x62\x87\x71\x17\x3a\xdf\x5f\x0b\xcc\xcb\xb9\xd1\x7e\xce\x49\x73\x3f\x73\x75\x9b\x9a\x57\x93\xd5\x00\x3c\x15\x63\x74\xd5\xc8\xb9\xea\xcc\xea\xe1\x7a\x59\x69\x09\xd6\x04\x84\x8e\x5b\xe3\xda\x9b\xf6\xd0\xa3\xbd\xb1\x76\x25\xc7\xa5\x4c\x82\xf0\xa8\x85\xb1\x7a\xc5\x44\x8b\x80\x2e\xa3\x59\xa3\xd6\x73\xf9\x3c\x96\xdb\x73\xb5\x99\x47\xcf\x1d\x47\x30\x74\x11\x0c\xd2\x56\x00\xd6\x0d\x8b\x0f\x01\xd7\x7d\xaa\x62\x65\xf9\xd5\xd6\x35\x2f\x74\x16\x08\x33\x93\x82\x56\xf5\x2a\x01\x23\x73\x69\x7b\xf9\xcb\x9e\x10\xe0\x62\xdc\xed\xe0\x6a\xaf\x2e\xad\x03\x3e\xe5\xd6\x65\xc3\x60\x19\xe6\x28\x5f\x9a\x55\x98\xcc\x03\xfb\xe0\xeb\x56\x31\x0c\x74\x1d\x8a\xc9\x47\x5c\x97\xc5\x31\x30\x6c\xd6\xc6\x0f\x1a\xd6\xaf\xf3\x75\x95\x49\x97\xc1\x90\x18\xb4\x7f\xf9\x0c\xda\xed\xe3\x07\xf9\x60\x75\x71\xf8\xb1\xc6\x0a\x4d\x29\x1f\x44\x13\x36\xbc\x34\xa8\x50\xdc\xaf\x99\x13\x0e\x6a\xcd\xed\xa6\xde\x87\x81\x39\xb8\x2d\x05\xad\x59\x5d\x8e\xa8\xf7\x9a\x69\x0a\xa0\xc1\x1b\xba\xb8\xd5\x17\xa1\x61\x38\x6b\x66\xb3\x77\x65\x9a\xb7\x63\xf6\xac\x8b\x18\xc3\x3e\xae\x11\x67\xc1\x1d\x5a\x46\x70\xd8\x5f\x9b\x66\x25\xf2\x6a\x69\xfc\x9e\x72\x9a\xc6\xdc\x65\xda\xd8\x9f\xb2\x1e\x8d\x5e\xa8\xbe\xaf\xb3\xcb\x15\xbc\xbe\x91\xe0\x8c\x57\x80\xca\x14\x4e\x47\x61\xfa\x2e\x6e\x56\xcf\xc7\xf5\x0a\x36\x46\x1b\xc9\xa5\xa0\x03\x9d\x91\x76\x5f\x79\x02\x2e\xf9\x35\x4d\x24\xd5\xc4\x20\xe7\x5d\xd8\xd0\x95\x3c\xc6\xdd\x2f\x78\xba\x59\x56\x3f\x46\xb2\x09\x29\x41\xd1\x08\x3f\x52\xc8\x49\xc0\xdf\x21\x9e\xcc\xbd\x54\xc2\xfe\x83\xa8\x07\xf3\x23\x01\x85\x90\x63\x55\x6a\x38\x4e\x0e\x96\x4e\x62\x86\xa9\x5f\x9a\xda\x2c\xc6\x3c\x78\x65\x7b\x67\xa3\xcd\x35\x0d\xc2\xda\x4f\x8f\x6e\xd7\xae\x46\x0f\x6b\x83\x05\x2a\xc3\xbc\xdb\xe9\xc2\xe4\xed\x36\x16\xbd\xc8\xce\x6f\x67\x67\x45\x6f\x67\x17\x08\xef\x29\xee\xf9\x76\xb2\xde\x76\xbb\x68\x05\xee\x76\xd1\x44\x1d\x11\xd6\x8f\x2c\xe3\x29\xa8\x49\x31\xeb\xf3\xe8\x04\xb0\x7a\xad\x3b\x5f\xf7\x14\x33\x72\xbb\x79\xe3\x9c\xb1\x2c\x28\x09\x11\x5b\xfe\x58\x64\x71\x81\x19\x3e\x31\xd5\x62\xac\xf1\x59\x34\x2c\xdc\x3e\xd9\x6a\xee\xed\x93\xa9\x79\xbd\xed\x3a\x33\xce\x4c\xc7\xc5\xf7\x45\xfe\xee\xed\xeb\x4b\xdd\x12\xb2\x04\xf6\x75\x59\xa8\xbb\x57\x09\x71\x37\x46\x22\xd3\x7d\x9a\x8b\x73\xb8\x66\xf3\xaa\xe6\x21\x48\x57\x57\xd6\x19\xdf\xbe\x85\xc5\x8d\xb5\x15\xb7\xff\x99\x92\xd2\xa7\xc6\xa6\x3b\x90\x2f\xe1\x83\x88\x03\x10\x29\xf1\x77\xd8\x96\x64\x0f\x87\x2d\x7e\xdf\x54\x40\x66\x88\x21\xac\x70\xfa\xbd\x98\x77\x91\x17\x74\x87\x29\x20\x0b\xd8\x92\x2e\xd4\x59\xa6\x42\xb5\x20\xcd\x5e\xf6\x0e\xf3\xa8\xe4\x0d\xad\xac\x6a\xbb\x89\x04\x9d\x1b\x0a\x54\xc5\xb2\xad\x81\xac\x07\x68\x3f\x4e\xcf\x12\x99\xd1\xd5\x2d\x16\x46\x96\x59\x2a\x29\x06\x60\x31\x9d\x0a\xe6\x40\x74\xfe\x78\x87\xfe\x71\xd2\xed\x0e\x77\x98\xf7\x26\x97\xed\x7e\xd3\xfe\x04\x20\x8e\xf3\x2a\x6f\xe1\x16\x3d\xe5\xf4\x9c\xae\x2c\xe5\x91\x76\xd3\x14\x35\x78\xb5\xb6\x56\xe9\x1c\x37\xbd\x16\x7c\xe3\x16\xcc\xfc\x86\x2d\x7e\x13\xb4\x91\xec\x6d\xdb\xfe\xf7\x80\x5b\xf5\x69\x44\x59\xd4\x01\x42\x29\xfb\x76\x51\x87\x78\xdf\x0e\x6a\xa6\x34\x18\x42\xd9\xe9\xb7\x9b\x93\xab\x6f\x67\x05\xf3\xdb\x75\x2a\xbe\xd2\xd6\x7d\xbb\x79\xe7\xed\xdb\xfd\x28\xf2\xa6\x3d\xf2\xdb\xeb\xdd\xbb\xef\x90\x0e\x45\xd0\x1e\x2c\x76\x73\xde\x1f\x06\xb6\xd2\xfe\x9d\x45\x0c\xf5\x13\xbc\xed\x5a\xfc\x7a\xdb\x3a\xfe\xf5\x15\x72\xc1\x7e\xf3\x1e\x9c\x64\xcb\xaf\x26\xd1\xaf\x9d\x36\xff\x9d\x97\xc1\x7f\xf3\x1c\x68\x2b\x86\xf5\xfc\x15\xc3\x17\xd9\xd6\xeb\x40\x32\x34\x9e\xd2\x23\xeb\x65\x17\xdd\xea\x95\xe7\xf5\xe8\xda\xcf\x97\x1c\x84\xa8\x34\x35\xa0\x28\x63\xa7\xd9\x58\x9a\xe4\x9b\xd7\x9a\x89\x4d\x4b\x66\xa1\xa6\x2b\x43\x92\x52\xed\xe7\x44\xd3\x0d\xa7\xa7\xba\x23\x26\xef\x9a\x7f\xa9\xa6\xa0\x16\xb0\x51\xd3\x02\xcb\x64\x6a\x79\x4a\x74\x27\xbc\x74\xf7\x2b\x45\x5c\xdb\xe7\xcb\x8f\x37\x33\xa5\x5a\xb7\x24\x84\xe4\x6f\x2d\x35\x5c\xdf\x6c\x23\x7a\x39\x34\xd2\xb7\x13\x16\x11\x3e\xcc\x41\x1b\xc0\x37\xc5\x02\x6f\x4e\xe4\x67\x9f\x9b\x87\xcb\x89\xd4\xe9\x8d\xdd\x1f\x20\xa4\xbe\xe4\xed\xcc\x95\x47\x36\x34\xde\xe1\x92\xd1\xf3\xa0\x44\x30\x81\x12\x63\xb9\x67\x7a\xfb\xe8\x7b\xe7\xeb\xe2\x34\xae\x94\xb1\xfa\xed\xaf\xdd\x53\xbf\x19\x68\x66\x03\x83\xca\x11\x66\x0d\x16\x3f\xec\x35\xbd\x1a\xaf\x57\x44\x2a\x33\xa0\x74\x26\xf4\xd0\x03\x35\x9b\x1e\xb0\x3d\x36\x19\x66\x8c\x2d\x42\x22\x1b\x9e\x14\x07\x02\xbc\xfb\x25\x08\xa9\xc3\x18\xed\x07\xa0\xca\x09\x67\x12\x9d\x9e\x79\x98\x1c\x8c\x1a\xef\x11\xff\xa4\xa1\x72\x2c\xc6\x71\xf8\x4e\xcf\x18\xf1\x67\x4d\x19\xb0\x74\xda\xe3\x7a\xe1\x4f\xa7\x09\x80\x9c\xac\x34\x50\xa3\xda\x06\x7d\x82\xf2\x52\x44\xbc\x89\xc2\x41\x06\xf8\xfa\xa5\x9b\x47\x84\xc4\x67\xe9\x42\xc6\x75\x89\xa3\x8b\xfb\x36\x00\xae\x61\x23\xb1\xb0\x0a\xaa\x44\x23\x71\xed\x1b\x49\x6a\xea\x28\x3c\x51\x19\xd5\x8e\xf8\x00\x4a\xe1\x19\x7c\xa0\x6f\x91\x4b\x33\xfa\xab\xe6\xef\x44\x40\xbc\xea\x97\x3f\xd0\xd0\x8c\x45\xd1\xfe\x22\x3d\x64\x8a\x0e\x19\x1d\x94\x12\xec\xd9\x3a\x86\x48\xb2\x8d\xfb\x6c\x3d\xe8\x38\x1f\x32\xd9\xbc\xbd\x21\x16\xf9\x09\xed\x87\x58\x45\xbc\x5c\x0a\x6e\xfb\x20\xb0\xd4\xba\x3b\x28\xab\xb2\x7b\x53\xc1\xcb\xee\xcb\xa7\x3f\xd9\xd1\xc4\x38\x3b\x4e\x73\x7a\x52\xc0\xb3\xdc\xfe\xcf\x34\xb5\xfe\x93\x5f\x22\x9d\xe4\x4f\x7e\x6d\xd1\xdd\x94\xf2\xf9\xb5\x61\x76\x2b\x4f\x17\x81\xea\x2e\xef\x46\xf2\x8c\x58\x20\xf0\x1f\x13\x8b\x92\x5f\x3e\x34\xc7\x20\xb2\x8e\x18\x46\x5f\x54\xe0\xf2\xcb\x37\x58\xe6\x43\xaf\x22\x33\x45\x26\x53\x53\x9c\xca\xa7\x2c\x95\xfc\xfa\xcf\x6e\x55\x28\xa6\x02\x98\x5f\xd1\xa5\x8d\x8b\x35\x88\x3e\xe4\xa5\xc8\xd2\xc9\x33\x72\x26\x83\x05\x90\x0a\x1f\x01\x1a\x8f\xd3\x53\x35\xe5\x28\x96\x0f\xc6\xc0\xc2\x52\xf2\x2b\x66\x76\x91\xd3\x81\x04\x7e\x69\x85\xcd\xaf\x2c\x89\x96\x6f\x8e\x66\xf5\x45\x8f\xe2\xe6\x57\xdb\x7c\xf2\x78\x8e\x8a\xa7\x1c\x92\x60\xa4\x96\xf4\xd8\xe9\x14\x07\xb3\x4a\x7b\x99\xa2\x5e\xf2\xab\xe5\x28\x37\x41\x18\xe3\xcb\x2a\xfc\x85\x10\x4f\xd6\x20\xf4\xc5\xcb\x3d\x26\x93\x00\xa3\x72\xa7\x56\x91\x30\x8c\xd9\xc3\xee\x37\x3c\xe4\xe2\x52\x7e\xf5\xc1\xe2\x06\x08\x21\xf3\xc6\xf5\xaa\x1c\x3c\x3e\xfb\xa8\xd2\x64\xf2\x0b\x27\x11\xbd\x02\x38\xdf\x36\xa7\x31\x30\x28\x01\xd8\xf8\xee\x27\xde\x44\xbe\x9b\xc4\xf2\x67\xd4\xa8\x89\x0f\x23\xe2\xcd\x94\x3a\x33\x09\x97\xea\xcd\x2a\x39\x20\x37\xea\x2a\x97\x86\xdc\x7a\x0c\x70\xf0\xe4\xf2\x4f\xc8\x3a\xa2\x0f\x06\xef\x79\x87\x94\x9f\xd4\x54\x10\x42\xc6\x6e\xa7\x24\x27\x81\x87\x1e\x51\x97\xdc\x16\x0c\x3f\xce\xea\xd9\x66\xe5\xaa\xb2\x75\xa7\xbd\x08\xe1\x1d\x4e\xba\x3b\x24\x46\xdd\x9d\x7e\xaf\x02\xf9\xff\xd2\x6f\x75\x97\xf8\x9f\x8f\x6e\x00\xaa\xa5\xd6\x9f\xc8\xbe\xdf\x62\x22\xb7\x3a\xf3\xd6\x7d\x82\xf4\x3c\x43\x91\x42\xdc\xf3\xda\x05\x11\xc7\x90\x37\x6f\x7d\xe0\xea\x26\x03\x54\x8e\x4d\x3e\x37\x2c\xcb\x46\xcc\x90\x2a\xf6\x27\xef\xfb\x1f\x11\xed\x97\xf7\xb9\x7a\x91\x77\xac\xbd\x53\xcf\x0d\x48\xf5\x91\x9d\x82\x59\x8a\x83\x51\x82\x02\x68\xbf\xcf\x4c\x2f\xc0\xe7\x3d\xd7\xf7\x80\xa9\x89\x14\x22\xcc\x79\xbe\x9b\xa5\xa1\xb6\x86\xbe\x7a\xa8\x3f\x5b\x45\x0c\x65\xbf\x43\x12\x59\xf6\x89\xba\x72\xff\x27\xfb\x96\xcb\xe9\x0e\x0f\x43\x11\x8a\x99\xdf\xef\xcd\xb5\xfe\x07\xd2\x88\x78\x54\xcd\x30\x18\x6c\xdc\x37\x4c\x79\x45\xd9\x36\xfa\x80\x64\x35\x24\xbf\xdf\xa7\x4b\xfb\x1f\x88\x2f\x32\x27\x7c\xac\x73\x8a\x34\x62\x24\x5f\x46\x8b\xf2\x7e\xb7\x0d\x2a\x4e\x08\x9d\xb9\xc2\xd7\x16\x76\x7e\x62\x9a\x94\x8f\xea\x61\x17\xc7\x74\x73\xd8\x03\xd2\x31\xc4\x37\x8e\x45\xe7\x80\x51\x03\x1e\x14\x95\x10\xf9\xeb\x94\xe1\x54\xf0\x43\xe4\xe1\x34\x64\x29\xe5\x2f\xf7\xfc\xc9\x71\xa7\x1f\x7d\x34\xee\xe4\x34\xee\x70\x19\xf7\xb7\x4b\x07\x4a\x44\xd4\x1e\x89\x90\x08\x8a\xcb\xd1\xbf\x21\xee\x2b\x47\xcf\xff\x33\x77\xa3\xcf\x97\xab\x87\xab\x42\x9e\x48\x8f\x4a\x73\x4f\x5e\xec\x9e\x12\x9c\x70\x0a\x67\x91\xe1\x44\x30\x6f\xae\x16\xfe\x06\x91\xd3\xf9\x6e\x0c\xb2\x20\x26\xe1\xd3\x97\x4c\x54\x66\x1e\xb3\x66\x0d\x1d\x51\xdd\xcd\x27\x32\x78\xa5\x3b\xc7\x70\x5b\xb4\xc2\x8d\x3a\x20\x3d\x78\x96\xa1\xc5\x94\x1e\x95\x75\xa3\x3c\x5f\x97\x83\x34\x63\x80\x80\x5b\x25\x80\xb3\xd8\x5e\x29\x6c\xf9\x2a\x38\xcb\x0e\xb6\x87\x79\x90\x9e\xf8\x5b\xa6\xcb\xc0\x14\x12\x7e\xaa\x75\xbe\x9d\xcf\x90\x6f\x56\x00\xcb\x15\x72\x82\xb7\x7e\x09\xc9\x41\x3e\x24\x07\x45\x3f\x30\x4d\x2a\xe7\x33\xa7\x4d\xae\x05\x12\xe2\xf1\xb4\x21\x0a\x4b\xda\x58\x11\x0e\x01\x76\xe0\x71\x3e\x17\xcf\xbc\x55\x91\x88\xa0\x72\xb3\x72\x3a\x32\x5b\xa7\x96\x17\xc5\x89\xd0\xf3\x27\x27\x2a\x4c\x29\x5f\x52\xd7\x09\x75\xfb\xe0\x24\xf0\xab\x0e\x5e\xdb\xc9\x49\x4a\x78\xe2\x02\x4e\xcd\x83\xcc\x22\x16\x0c\x27\xdd\xa2\xb1\x7a\x84\x69\x89\xee\x63\x66\x95\xa0\x98\xa7\x2f\x59\x05\x57\x67\x16\xee\xf0\x67\xce\xc5\x72\x16\x51\x9e\x04\x1e\x7e\x47\x05\x20\xb7\x22\xc6\xbf\xa8\x46\xf4\xa0\xca\x90\x7f\x9f\x3f\xb9\xb8\x8d\x3e\x50\x9c\x75\xbf\x85\x4f\x57\xe7\xe2\x30\x88\x28\x54\x89\x8a\x4f\x2e\x40\xc9\x1f\xc1\xed\x74\x81\x0d\xb7\x50\xb7\x11\xc8\x91\x36\x18\x85\x77\x1b\x58\xae\xd8\x34\x42\x68\x16\xd1\x63\x53\xee\x58\x2e\xbc\xa4\xdb\x19\x66\xea\x7c\xa9\x58\x47\x1f\x76\x1a\x1f\x12\xd9\x83\x00\xd3\xb7\xc2\x84\x33\xc3\x20\xfc\x65\x3d\x4d\xb9\x9c\xfd\x74\xf1\x5a\xe1\x6a\x3e\xdd\x2e\x94\xdd\xb3\x81\x2c\x66\xff\xc3\x57\x1b\xb2\x3b\xf8\x0f\x87\x8d\x29\x46\xed\x43\x86\x5a\x2e\xa1\xf5\x33\x1f\xc9\xf5\x93\x23\x51\xc2\x8e\x98\x95\x5c\xfb\x40\xa2\x33\x92\xb2\x6e\x02\xd7\x58\xda\x5a\x37\xa0\x89\x68\x84\xf2\xd9\x18\xb7\x8e\x65\xde\x50\x5a\x04\xb4\xad\xd2\xd9\x72\x29\x83\xc5\x46\x70\xd3\xb2\xf1\x13\x6d\x6f\xe9\x1a\x66\x0e\x89\x14\xdb\xd2\x21\x1a\x75\x11\xe0\x66\xd2\xda\x72\xe9\x6b\x2a\xf1\xca\x55\x2e\x2a\x24\x33\x57\x67\x20\x1d\xcf\x1f\x56\x30\xcb\x96\x01\xb9\xf2\xd5\x57\x50\x6b\x8c\x28\xd2\x53\xf8\xdb\x84\x88\x23\xb5\xaf\xbb\xb6\x11\x44\x10\xa2\xba\xeb\xd1\x0a\x08\x8a\xa3\x7a\x8c\x53\x3f\xa1\x7a\x41\x51\x9e\x15\xaf\xf8\x70\x4a\xae\xac\x98\x4a\x25\xca\xc9\x33\x34\x44\x58\xc9\xb4\x21\x39\x23\x58\x13\x81\xe9\xb5\x40\x73\xf0\xbb\x38\xf8\xfd\x70\x30\x7b\x99\x95\xd9\x5b\x51\x05\x2f\x84\x0b\xee\xc4\x66\x0d\x12\xac\x5b\x18\x97\x72\x15\x1c\x4c\xd4\xc2\xa1\x31\xe0\xe5\x62\x93\x92\x27\x80\xf3\x5c\xc5\xe5\x09\x50\xc3\xe4\x30\x8c\x9d\x02\xf4\x14\x52\x41\x67\x65\x35\xb9\x26\x8c\x21\x6b\x0a\x9d\x23\x04\xd0\xb6\x13\x55\x18\x0c\xe5\x8b\x91\x46\x66\x12\xf8\x9a\x5f\x8e\x1a\x19\xcd\xd7\xd9\xfa\x55\x6d\x34\xeb\x6a\x5b\xeb\x6a\xcd\x1a\x42\xea\x43\xea\x93\x78\x28\x54\x33\x0d\xf7\xff\xe4\x4a\x5d\xeb\x83\xb0\xd6\xfc\xfd\x07\xe2\xfd\xf8\x7f\xf3\x34\x27\x85\x17\xc4\xce\x2a\xc7\x58\x44\x3a\x60\x5a\xf0\x0f\x83\x19\x22\x93\xc0\xc6\xd0\xea\x36\x98\x64\xf1\x22\x57\x10\x44\x25\x32\x83\x14\xbf\x1b\x14\x51\x49\x93\x3f\x13\x27\x3f\x61\x9e\x58\x04\xf1\x0b\x51\xe3\x7a\xe6\xeb\xa5\x44\x5b\x2a\xe0\x1e\xb6\x19\x40\x19\x68\x13\xec\x39\x29\xaa\xd3\xba\xaa\x70\xc8\x8d\x77\x46\xd0\xa1\x00\x5b\xaa\xb3\x4c\xc4\x8c\x6b\x73\x54\xe3\x51\xdf\x0d\x54\x79\x8a\xcb\x80\x3d\xed\xcc\xa5\xb1\x5d\xdc\x0c\xb5\xd9\xdc\x36\xee\xef\x1a\x6b\x7a\xcc\x4d\xd7\xf6\x09\xe9\x70\x99\x60\x80\x2f\x3c\x68\x69\xdd\x73\xbd\x9f\x82\x18\xa7\x14\x46\x42\x73\xc0\x4e\xc4\xb2\x8e\x48\x60\x6f\xb4\x20\x1a\x14\x7f\x67\xb8\xfa\xa2\x6b\x11\x4c\x0e\x8e\x30\x96\xee\x16\x78\x7e\x2b\x64\x0e\x7a\xaf\x6e\xd3\xda\x0f\x92\xd1\xea\x0b\xe4\x38\x91\xd7\x27\x37\x81\x3a\xd7\xe8\xa7\xaf\xc7\x40\x3b\x47\xf0\x3b\xd7\xb8\x53\x5b\x06\xdf\x7b\x40\x4f\xd9\xf3\xc6\x92\x82\x73\xa7\x8f\x3d\xe9\x98\xe1\xef\x2b\xb4\x60\x75\x2b\x0e\xc3\x52\x62\xd8\xa0\x42\xd6\x98\xf2\x30\xa7\x43\x0b\xe4\xd0\x58\x0e\x1d\x4f\x8c\xee\x1a\x0f\xbc\x47\x7f\x65\x8c\x5c\x08\xa0\xb2\x8d\xbe\x73\x07\x38\xfa\x9e\x69\x6e\xc5\xcf\xf6\x10\xf2\x95\xff\xb1\x54\x4b\xe8\x61\x9b\x32\x14\x1b\x3d\x3a\xf6\x83\x9e\x18\x75\x8c\xce\x5a\x68\xf3\xe8\x57\xde\xd9\xb6\xba\x86\x67\xd5\xf1\xff\xc1\x05\x67\xf4\xea\x2f\xfe\x4c\xd5\x20\xb6\xf0\xeb\xf1\x2c\x19\xab\x48\xa3\xdb\x2e\x69\x1e\xbc\x20\x4c\x4f\xef\x0a\x0e\x43\x10\xce\x35\xfd\xc9\x98\x83\xf2\xd6\xdc\x1f\x59\x13\x31\x61\xb6\xf9\xf6\x32\x6a\xd4\xcb\x19\x0c\x5a\xf7\x52\xb8\x41\x07\x0b\x3a\x14\xc2\x05\xf3\x36\xfd\x3f\x0c\xb1\xca\x40\x68\xcf\x90\xcc\x08\xfc\x16\x99\x82\x42\x82\xae\xaa\x83\x1f\xfa\xb4\xe3\x07\xa0\x31\xf2\xf3\x62\xed\xfb\xea\x9a\xa9\x06\x69\x0a\x38\x31\xfa\xab\x36\xd3\x41\x75\x15\x08\x4a\x42\xd4\xf8\x67\x3a\x2f\xc5\x55\x1f\xf5\x4d\x81\xd0\xab\x25\x64\x45\x2f\x58\x9b\x81\x44\xbe\x1e\x63\x2a\xa9\x66\x93\x4b\x9e\x5d\xef\x08\x82\xb6\x26\x77\x48\x85\xa9\x90\x27\xa5\x55\xbf\xdd\xbb\x83\x3c\x6f\x21\x72\xd7\x36\x63\x07\xb2\x9d\x98\x45\x13\x16\x55\xc5\xc0\x41\x9f\x1d\x25\x91\x60\x0c\xfd\x14\x57\x31\x7f\x27\x46\xd9\xb5\x6e\x1e\x60\x4a\x09\x90\xbf\x50\x24\x19\x5f\xe6\x6b\x1e\x89\xf5\xc0\x80\x55\xa7\xa1\x90\xf2\xc7\x30\xb2\x28\x38\x66\xa3\x4b\x6c\x5f\x23\x7e\x3d\x82\x28\x9e\xe6\xcb\xa8\xbb\x4f\x2d\x5f\xe2\xd5\x68\x6c\x6b\x73\x29\x29\x2a\x56\xea\x36\xb7\x38\xdd\x5c\xf5\x1a\xf6\xcd\xc9\xf2\x2f\x93\xd6\x15\x0c\x17\x0d\xea\xf9\x2b\xe6\x7c\xfd\x53\xf0\xe2\x2b\x5f\xd8\x9a\xb4\xf2\x0e\x2d\xc8\xe9\x74\x63\x97\xa9\x77\x45\x51\xe5\x83\x85\xcc\x42\xdc\x35\x01\x89\x88\x6b\x9a\x49\x5c\xb8\x90\x21\xfc\x0e\xf2\x26\x62\x1a\xc0\x08\xbb\xd7\x82\x6f\xc9\xbc\x2d\x8a\xb4\x17\x26\x68\x17\x09\x69\x8e\x6d\xf9\xba\x72\x32\x38\x92\xde\x3c\x12\x13\x13\x29\xa0\x9c\xe5\x03\x4e\xea\x7f\x26\xb6\xec\xdb\xec\x9e\xa3\xa5\x86\x1d\x7c\x57\x66\x52\xcc\xd4\x20\x88\x64\x7f\xe5\x7d\xf1\x4d\x44\xbc\x2e\x6c\xf5\xab\xd7\x60\xee\xb2\x44\x35\x97\xc5\x06\x2e\xb6\x0b\x86\x24\x33\x86\xa3\xce\x42\xb9\xe5\x5b\x56\x1d\x40\xc4\x4a\xf5\xa2\x96\x97\x59\x58\x8a\x01\x96\x36\x34\x4c\x83\x0f\x8e\x32\x9e\xa6\xb3\x34\xd0\xa8\xbb\xb3\xa7\xbb\x77\x55\xc0\xe6\x76\x4d\xcc\xdd\x6f\x7a\x8f\x9f\xa9\x2f\x02\xde\x4b\x5b\xb1\x2f\x72\xee\x84\x5b\xa2\xef\x9e\x35\x02\x75\x6f\x74\xfb\x20\x33\x30\xa6\x18\x4d\xd8\xda\x44\xee\x54\x20\x27\x99\x27\xc0\x84\x87\x3a\xbd\x59\x56\x94\xc1\xbb\x0b\xda\xee\xed\xfe\xce\x9a\x65\x7b\x78\xbf\x87\x94\xbc\x3d\x88\x8c\x7a\x26\x58\xfe\x5a\xc8\x54\x93\x28\x46\x56\x0a\x76\x08\x20\x09\x2b\x19\xda\x78\xec\x41\x56\xa6\x09\xe7\xad\x57\x9d\xd0\x80\x8b\x10\xc3\x95\x68\xf2\xa1\xf7\x25\xa0\x6a\x4a\x98\x48\x46\x0d\xf6\xc1\xbb\x43\x6a\x93\x77\x35\x79\x69\x22\xa0\xa2\x18\x60\x1f\x4b\x9d\xf1\x14\x55\x23\xd1\xbd\xb2\xe5\x88\x8f\xfe\xd0\xd8\xf8\x18\x43\x99\x01\xf1\x57\x9e\x9d\x66\xf5\xaa\xa8\x67\x25\xf3\x9d\xdc\xa3\x16\x26\xa5\xca\xa7\x7e\x8e\x16\x9c\xb5\x4d\x3e\xdd\x96\xe1\xfe\x47\x44\xcd\x30\xd9\x96\xa6\xc8\xff\x14\x37\xcb\x97\xff\xc1\x25\x30\x0d\xe4\x4f\xc1\x0d\x3a\x25\x6b\x31\xf1\x3f\x2a\x61\x83\x19\xc6\x14\x82\x55\xea\x19\xb1\xb7\xdb\x82\x7c\xea\xed\xb6\x59\x6d\x41\x56\x1a\xcc\x41\xe8\xd6\x35\xbd\xdd\x25\x65\xe8\xed\xae\x10\x83\xd4\x9c\xb7\x2c\xfd\x00\xa6\x2d\x4c\xeb\xad\x1b\x10\x5d\x74\x4c\xd5\xf8\xce\x73\x24\xf2\xf6\xae\x9a\x4b\x7f\x85\x84\xb1\x3a\x48\xed\x16\x68\xd6\xad\x27\xf8\x9b\x9f\x81\x9a\x77\x81\xf2\x2a\xea\x27\xa2\xb7\xe6\xfc\x1d\x73\x0d\x06\xbf\xe7\x87\xe3\x30\x2f\x73\x12\x0b\x39\x47\x6d\xf9\xdf\x19\xd7\x7b\x04\x5e\x13\xf2\x38\x0c\x58\xc3\x2d\x9a\xf7\x15\x5f\xb3\xa1\x7c\x57\x17\xcc\x52\xda\x4e\x08\xe2\x52\xfa\xa5\xc8\xea\xd0\xbb\x7a\xf5\x46\xb7\xab\x40\xa0\x2d\x5f\x60\xb0\x2e\x7f\x55\x89\x4f\x1c\x82\x85\x34\xb9\x0f\x56\xe2\x23\xb0\x4b\xf0\x58\x53\xba\x5e\x0a\x83\x49\x78\x6b\x60\x8f\xe8\x0c\xfc\xca\xdb\x98\xf3\xc5\x85\xdb\x14\x99\x0b\x11\x4d\xe6\xc2\x5a\xb1\x50\x50\x5d\xd3\x20\x1e\xb3\x8a\x12\xec\x8a\xfc\xae\x86\xa2\x9f\x86\x49\x6e\x86\x86\xe4\xc9\x31\x42\x94\xea\xc5\xab\xfb\x00\xa5\x84\xf8\x18\x56\x54\x77\x03\x66\x24\xd9\x79\xba\x66\xbe\x74\x0d\xf7\x89\x94\x17\x63\x2f\x91\x27\x60\x46\x75\xbe\xbd\x15\xc5\xa2\xb1\x3b\xc3\x21\xbe\xe7\xcb\x6b\x78\xb2\xb5\x4e\xaa\xe8\x9a\xb1\x98\x0d\x19\x14\xb3\xb6\x6b\x43\x66\xa8\xe5\xf3\x1c\x15\x07\xec\x80\x1f\xdc\x02\xd4\x06\x67\xd1\x1b\xcd\x54\x9c\x2c\xea\x9e\x41\x57\xf5\xca\x30\x50\x95\xca\xc6\x43\x5f\xd9\xb2\x1e\xb7\x70\xdd\x28\xc6\x31\x20\x53\xde\xcb\xf4\x53\xbd\xad\x98\x89\xea\x5a\x66\x8b\xca\x57\x35\x18\x4b\xdf\x29\x5a\x56\x25\x9e\x53\x63\xaa\xb0\x1c\x17\xf2\xd1\xcf\x7d\x68\x2f\x55\x83\xd4\xe6\xcb\xea\xdb\xf4\x96\x5a\x8f\x6c\xc9\xf9\x9f\x9c\x33\x02\xd6\xfd\x36\xe0\x47\x73\xf6\xbf\xfc\x98\x0d\xc8\xa3\x55\xf6\x85\x8d\x22\x02\x41\x0a\x63\x74\x06\xaa\xe4\x6d\x74\x6d\x0b\xb3\xe5\x8f\xda\xf9\x44\x37\x44\x06\x0f\xb3\x5b\x1b\x9b\xe8\x78\x04\x17\xd1\xb9\x89\x77\xfe\x5b\x80\xe8\x18\x64\xbc\xad\xe3\xae\x68\x43\x77\xd3\xd4\xc7\xe4\xd6\xe2\x18\xb3\xeb\xf2\x8d\xfc\xee\x6a\x76\x58\x59\xe2\xed\x75\x00\x1d\x97\xc6\x3c\xe4\xc3\x10\xf3\x02\x34\x96\x81\x63\x1c\x1a\xea\xf1\x33\xaa\x0d\x7d\x98\xa9\x25\xd3\x63\xc7\x44\x66\x03\x17\x4e\x4d\x69\x22\x8b\x12\x35\x40\x1d\x42\x5f\xde\x7f\x09\x88\x31\x7f\x2b\xcc\xb3\x1f\xb9\x68\xec\x6d\x5e\xf8\x2a\x71\xbe\x7c\xef\x3a\xee\xb9\x82\x55\xeb\x2b\x44\x35\xe3\xe3\xb5\x56\x52\xaf\x90\x74\x46\x4b\x33\x76\xa9\xb3\x57\x0e\x86\x34\xd1\x81\x16\x87\x79\xd4\xa4\x01\x48\x8e\xd7\xea\x08\xea\x98\x32\x69\x43\x97\xfc\x41\x45\xd4\xec\x9a\x6e\x20\x66\xd5\x5a\xbe\x14\xa4\x2b\x4b\x59\x2b\x97\x9c\x53\x03\xd4\xe3\x37\x44\xe6\xa1\x0f\x26\x92\x69\xeb\xb1\x06\xa2\xef\x75\xc4\xba\xec\x79\x12\x5b\xd6\xc6\x89\x2e\xcb\xa5\xb7\xaf\x85\x6f\x29\x28\xd4\xb0\xab\x7e\x09\xc3\xb3\xda\x2c\x4a\x22\x98\x76\x0b\xdf\xd4\xe9\x00\xb6\x04\xa9\xf0\xb8\x49\xeb\xc2\x2a\x99\x1e\x3c\xcc\x59\x41\x89\xd8\xcd\x61\x34\x66\x03\x55\x70\xf3\x6c\xda\x82\x48\x17\x0d\x6e\x1c\x17\x8f\xdd\xa7\xc0\x71\x61\xc1\xbe\x61\xd2\xc7\x99\xa9\x3c\x05\x66\x65\xc6\x4f\x45\x8e\x33\x69\x73\x2e\xa6\x9b\x86\x80\xdf\xb3\x60\x83\x68\x7f\x88\xa5\x07\xc9\xa5\x55\x1a\xf4\xca\x87\x79\x3f\x85\x18\x0b\x65\x99\xc1\x46\x7e\x14\x8a\xd4\x60\x65\xc5\x60\x52\xaf\x73\x7e\x2b\x5a\x64\xf4\x8a\x89\x8a\xda\x15\x2a\xd2\x6f\xc1\x46\x68\x4d\x2b\xf5\xdf\x11\x64\x66\x50\x9d\xd4\xfa\xba\x2c\x2d\x55\x93\xdf\x29\x44\x7a\xce\xfa\xd1\x41\x2d\x52\x18\x99\xce\x49\xea\x94\x1f\xc8\xec\x0a\x4d\xe1\x14\x70\x67\xee\x68\xbe\x2a\x65\x13\x72\xdc\xb4\xfe\xaa\xc4\x35\xf1\x33\x6c\x12\x52\xbe\x1c\xcd\xf0\x2d\x56\xc3\xa1\xc3\x3a\xac\x7b\x58\xf9\x61\x01\x5b\x82\x72\x9d\xc6\x45\x1c\xe6\x21\x9d\x7d\x1d\x3b\x1b\xad\x72\xa3\x98\xef\xf2\xd4\x11\x8b\x09\x6c\x62\x32\x36\x31\xde\xe6\x08\x91\xef\xe3\x6a\x29\x6c\x5b\x1d\x4b\x69\x6b\x7e\xd3\x16\x92\xa1\xb8\xb1\x65\x64\x26\x3d\x2c\x15\xb8\xd1\xb4\x43\x5f\xcd\x06\x59\x65\xb6\x30\xa6\x29\x82\xc0\x1f\xf5\xf4\xcc\xb5\x2b\x12\x10\xac\xff\x6d\xe1\x2a\xea\x3a\xc8\xe0\x70\xca\x29\x01\x8b\x6e\xfb\x52\x64\x3d\x5b\x9b\x5d\x54\xd3\xf6\xbc\x5d\x39\x4b\xa7\x24\xc2\x45\x18\xbe\xc5\x1e\xd5\xd8\xa4\x50\xa5\x87\x30\xcd\xfd\xd4\x2c\x9d\x72\x3f\x2c\x29\xb1\x6f\xa2\x95\xb0\xe5\xc1\xf5\xd7\x84\x80\x08\xb1\x9a\xb9\x4a\xd4\x10\xae\xe3\xd2\xf6\x77\x78\x77\x59\x24\xba\xd3\xb8\x77\xf7\xe8\xd7\xba\x77\xbb\x4d\x76\xc0\xc4\x6d\x0f\xef\xb7\xa2\xeb\xe3\x03\x3d\x0f\xb5\x8e\xc3\xa7\x0c\xab\x9b\x69\x04\x99\x09\x06\xad\x52\xb6\x5e\xb5\xa3\xa6\x71\x90\xc1\x31\xfb\xc5\xd6\xc7\xfb\xad\x7e\xf2\x0d\x7c\x86\xef\xb5\x45\x69\xa3\x20\x5c\x73\x0c\xd1\xac\x84\x2d\x57\xc5\x85\x97\xa5\xdb\x68\xdf\xba\x48\xb0\x5c\x20\x26\xca\x86\xf3\xf2\x2f\xb3\x4b\x81\xbe\xb7\x8b\xb2\xcc\x66\xc0\x3b\xf4\x90\x2e\x6c\x97\x99\xfe\x1c\xd0\x2d\x17\x33\x99\x06\x29\x6a\x54\x1c\x04\x50\xfd\xb4\xae\xb6\x9f\x35\xe8\x70\xa7\x5b\xea\xda\x9d\x45\x21\xc1\xd0\xac\xf0\x76\x1f\x11\xa4\xca\xf2\x03\x2e\x79\x99\xe7\x75\xcc\xd9\xb1\xc9\x32\x24\x72\xbb\xd9\xb4\xd9\x35\x1b\x10\xbd\xd8\xc2\x24\xd1\xc0\xc7\x96\x4d\x99\x6b\x00\xee\xb5\xf9\xb9\xc3\x1c\x02\x7f\x3b\x9b\x86\x7e\xeb\x48\xef\xdb\xbb\x2f\x05\xb1\x9f\x66\x68\xaf\xbd\xcd\x0e\xbf\xbd\xa5\xc3\xb7\x64\xe4\xf7\xe9\xa3\xad\x0f\x7f\x07\x69\xd6\xbe\x75\xc8\xf4\x1d\xf8\x3a\x9e\x60\xf1\x12\x47\xfb\x35\x1c\x68\x15\xd9\xb3\x5f\x1b\x55\xdb\x46\xd8\xcd\x67\xa4\xf3\xcd\x4d\xa0\x9e\x55\xce\x77\x68\x6e\x93\x5d\x09\xec\x70\xdd\x79\xb9\x95\x91\x6f\xee\x7a\x21\x6b\x2e\x7f\xf3\x8c\x1c\x0f\x0a\xc2\xb7\x9c\xa9\xfa\xe1\xfd\xd0\x9f\x57\xcc\x79\xff\x03\x15\x65\x48\x6c\x02\x0d\x6f\xa0\xb4\x8c\x7b\x2a\x53\x60\x06\x7d\x65\xfc\x32\xe8\xd6\xd9\x54\x68\x96\x7f\xa6\xa1\x7c\xe5\x99\x5b\xaf\x3f\xcf\x76\x46\xde\x58\xfa\x79\xf4\x23\x8f\xec\xad\x32\x50\x6f\x9e\x9e\x37\x32\xfd\xe5\x43\x0b\xf4\xd0\x34\xf9\x65\x29\x02\xc5\x6d\x7e\xa7\xff\xf3\xd9\xf9\xb2\xee\xc4\x5d\x2c\x30\x0d\xdb\xc4\x94\x58\x93\xb0\x2d\x8c\x0f\xa6\x4e\x35\x41\xdc\xfb\x2e\xda\xd4\x8a\xdb\x58\xee\x14\x01\xbb\xec\x5b\x4c\xe0\x71\x71\x7e\xf7\xd5\x89\x5d\xc3\x38\xbf\x48\x5c\x64\xd5\x8b\x46\xb6\x6e\x80\xcd\x02\x7b\x71\xe4\xdd\x21\xe1\x64\x14\xa9\x23\x48\x7a\x62\x81\x9f\x40\xeb\x2c\x4c\x89\x70\x17\x4b\x7c\xf9\xa1\xb8\xff\xdc\xe5\x60\x14\x25\x7d\xe8\x29\x3e\x46\xe7\xa7\x1a\x21\xd0\xfc\xd2\x33\x36\x9f\x14\x61\x81\x41\xee\x38\x2a\xf1\xc1\xec\xed\x16\xc3\x3c\x32\xf5\xbf\x46\x66\xcf\x6f\x1f\x76\xfc\xf6\xef\xfb\xd4\xf3\xf5\x69\x65\x9a\x98\xad\x4f\xb6\x9c\xcb\x34\x83\xd5\x87\xf4\x6f\x20\xec\x2a\x2a\x53\xbb\xee\xf2\x49\xf5\x3d\x1f\x46\x51\x18\x5c\x9a\x98\x9d\x74\x29\x0b\xac\x3e\x4f\x9e\xb8\x53\x04\xec\x25\xb7\x00\x35\xf9\x31\x01\x60\x90\xd8\xe4\xe6\x42\x5d\x1c\xfb\xa5\x27\x16\x09\xc2\x23\xef\xbb\x09\x44\xf8\xa4\xec\xd3\x67\x0e\xfe\x9b\x81\xff\x9b\x43\xff\x5f\x06\x7d\xe6\xcf\xbf\xd9\xf3\x3f\xb9\xf3\xff\x64\xce\xdc\x72\x17\xb2\xda\x5e\x72\x69\xbd\x53\x03\xfa\xe1\x87\xcd\x78\xc1\x3e\xf3\x77\xe5\x6a\x7f\xd1\x86\xc7\x5c\x54\x40\x4c\xf2\xe9\xff\x9a\xe3\xff\x66\x38\xf1\xf1\xf1\x76\xac\x6f\x2b\xfe\x51\x69\xa3\xef\x33\x47\x43\x12\x55\xf9\x0b\x66\x27\x10\xcf\xe4\x9b\x14\x1c\x6a\x81\x8b\x8b\x11\xe7\xa7\x19\x48\x36\x47\x29\x12\xaa\x79\x11\x10\x59\x8f\xea\x1c\xaf\x59\x22\x2e\x57\xe5\x21\x6f\x3a\xac\x5f\x81\x83\x77\x05\x09\x20\x9f\x83\x23\x00\x7b\x45\x0b\x6a\xe1\x9d\x3c\x45\xec\xba\xf0\x99\x8e\xe2\x62\x7b\x34\x56\xbd\x8a\x97\xbd\xaa\x9f\x9d\xbf\x39\x76\xf6\x00\xe4\x59\x4b\xe2\x55\x3c\xa2\x7a\x95\x33\xb2\xb2\x92\x02\x9e\x1c\xfe\xf4\x24\x6b\x71\x69\x1e\xbe\x21\x52\x27\xf2\x0a\x77\x97\x2c\xd6\x69\xf7\x97\x98\x7a\xe8\x92\xff\xc0\xf8\xb4\x32\x7c\x4e\x6e\x76\x14\xc7\xad\x67\xd2\x7a\x98\x66\x09\x4d\xa7\x36\xdd\x09\x52\xc0\xf0\x8c\x6a\xc0\x07\xd2\x8a\x4b\x33\x6e\x89\xc5\xf0\x4c\xc4\xde\x2c\xc2\x79\x0a\xae\x7f\xa3\xd7\x05\x44\xff\x5e\x9c\x48\xa8\x21\x50\x9d\x44\x63\x96\x52\x81\xea\x5d\xb3\x14\x32\x49\x15\x05\x07\xe6\xf9\x7a\xe0\xaa\x83\xf3\x53\x01\x27\xb3\x9c\xe4\xc5\x52\x6d\xfe\xa9\x33\x54\x6d\xc3\xa5\x6f\x00\xd5\x3c\x09\x98\x6d\x64\x62\x95\xf3\xac\xda\x13\xff\x39\x21\x33\x8b\xc3\x61\x06\xc9\x9f\xe2\x1e\x24\x3c\xce\x78\xb2\x24\x4b\x10\x4a\xd6\x12\x22\x75\x8d\x66\x35\x44\x4e\x20\x06\x62\x23\x66\xeb\xaf\xc1\x9a\xff\xb3\x68\x0e\x65\x28\x05\xb3\xe8\xb3\x88\xad\x02\x3f\x24\xd9\xcb\x50\xc7\xcf\x12\xbc\x87\x8b\x7c\x79\xea\x52\x58\xab\xd3\xf3\x42\x53\x2d\x29\x21\x16\x59\x64\x2f\xb6\x73\x18\x1c\x4d\xd0\xee\xb9\x3f\x26\x24\x65\x0b\x90\x83\x56\xdd\x1e\x0e\x2d\xdd\x93\xc8\x57\xf7\xd0\xdc\x4a\xb4\x04\x43\xfd\xe9\x44\x66\xc5\xa4\x22\x11\x79\xf3\xc1\x75\x85\x3c\x92\xa9\x6e\x96\x6b\xc2\x16\xcc\x23\xe6\xd6\xb8\x24\x57\x51\xed\x69\x48\x7c\x3f\x72\x0a\xe6\x32\x27\x8b\xcc\x2c\x3f\x8a\xdb\x8c\x42\xf4\x3f\xf2\x2a\x46\x16\xb2\x64\xea\x5a\x15\x48\x7b\xc3\xc4\x97\xc0\xc7\xdf\x3e\x0d\xa4\xc0\x7d\x18\x8d\x66\x26\x16\x16\xd6\xda\xc3\xe8\x97\x1b\xaa\xea\x96\x8e\xa2\xba\xcb\xef\x16\x38\x19\x7b\x02\xf2\x6a\xe5\xc3\x44\x4e\xe3\x19\xd6\x6f\x41\xbf\x3c\x10\x9f\x2b\x04\xca\xdc\xc8\x00\xed\x02\x64\x80\x59\x5d\xf1\x5c\x19\x81\x2c\x98\xe5\xac\xa2\x4d\xc7\x98\x86\xaf\x9c\x8f\xe5\x43\x89\x5e\x33\xa2\xe4\x3d\xa8\x97\xff\x74\x55\xd5\x35\x1f\xbd\xe6\x75\xb3\x3c\x02\x0a\xbb\xda\x09\xfd\xd3\x4d\x8e\x12\xb0\x55\xc2\x17\xf3\xe4\xca\x42\x96\x57\x7d\x66\xa1\x89\xa7\x02\x39\x9f\xaa\x91\xef\x35\xe7\xa2\xc8\x92\x51\xc4\x66\x00\xdf\x2e\xb0\xb3\x1f\x89\x92\x48\x7a\x2a\xae\xee\x3c\xd0\xa9\xbb\x6c\x82\x30\xd4\x74\x13\xb1\x9d\x90\x7f\xb2\x9d\x8f\x35\x04\xa2\xbd\x97\x81\xaf\x06\x2d\xe0\xd8\x8f\x6b\x6a\x55\xeb\xde\x5a\x5d\x3c\xfa\xd2\x7a\xfa\x68\x95\x8c\x65\xad\x12\x28\x01\x97\x29\x81\x9b\x34\x9c\x35\xb4\x27\x46\xf7\x62\xf2\x15\x52\xd3\x3e\xa5\x7e\xe9\x07\xd0\x59\x60\xbf\x22\xff\xf9\xd4\x2b\x4c\x8c\xaf\xd2\x0a\x44\xd8\xae\x70\x04\xee\x01\x55\xe5\x30\x21\x51\x05\xc1\x70\x93\xa7\x96\x97\x1c\x36\x71\x9c\xad\x22\xcd\x3b\x0a\x20\xcf\x35\x91\xda\xd5\x97\x9d\xb3\x84\x9e\xdc\x1f\x13\xd4\x97\x3f\x4f\x93\x62\x0c\x68\xa6\x38\x18\x6a\x90\x8d\xeb\x2c\x6a\x56\xb0\x5b\xf4\x3a\x46\xa8\x96\x6c\x2d\xeb\x8c\x00\x90\x13\xa0\xc9\x4d\x8b\xe2\x6a\x77\x3a\x6b\xaa\x52\x73\x20\x8c\x8a\xd1\xe9\x13\xae\xcd\xb0\x57\x32\x3c\x16\x3d\x03\xaa\x79\xd9\x0c\xb5\x7f\x55\x68\x69\xd6\x67\xaf\x5d\x7b\x68\xfc\x50\x2a\xa3\xaa\xda\x93\xdc\xe0\x25\x5c\xc3\x7e\x58\x93\xdd\x07\xab\xd0\x17\xf8\x76\x9b\xd1\x47\x5d\xc0\x8f\xb6\x9d\x08\x4b\xfb\x3b\x02\x77\x19\x40\x02\x1b\xfe\x1c\xff\x73\x04\x78\x19\x18\xca\xa1\xf7\x3f\xa2\x23\x1a\x13\xfa\xa9\x2f\xda\x94\x45\x03\xbc\x63\x9e\x7d\x17\x2b\xfe\xd1\xcd\x81\xf8\x67\xd9\x26\x10\x28\xa1\xe3\xf3\x0c\xf4\x34\x83\x92\xab\xd6\x10\x0c\x5c\x5a\xe7\x21\x1d\x3d\x9b\x3e\xf9\x45\xe6\xfa\xd5\x3a\xf7\x9e\x8d\xef\x3a\x31\xf0\xe6\x07\x15\xf1\x6e\xf5\xba\x6f\x27\xfb\x07\x00\x8f\xfa\x76\x8a\xe5\xbe\x9d\xdf\x99\xeb\x0a\xae\xb7\x17\x27\xb2\x5b\x05\x20\xfc\x84\x34\x2d\x4c\x11\x36\x34\x5f\xdb\x19\x09\xd3\x83\xbd\xb4\x66\xdd\x3e\x72\x7e\xce\x75\xfa\x99\x21\xb2\x89\x2d\x2d\xf3\x11\x3b\xbd\xcd\x30\xe5\x2b\x4f\x66\x3d\x5d\x3f\x3f\xfd\x02\xc9\x34\x70\xcd\xea\xe7\x37\x16\x2e\x75\x73\x46\x9e\x1a\x9a\x1a\xd0\xea\xc5\x89\xd9\x95\x62\x7d\xa3\x95\xaa\xd7\x40\x09\x51\x8d\x84\xe4\xdd\xe1\x17\xa2\x2f\xb2\xb9\xc5\x20\x57\xb0\x54\xf8\x5e\x71\xef\xaa\x75\x35\x6f\x6a\x6e\x53\x9d\xbe\x0e\x7c\x7a\x95\x92\xd4\x31\xd0\xd1\x44\x07\xe1\xc2\x06\xfc\xbb\xbc\xc0\x58\xbf\xcf\x66\xa7\x23\xee\xdd\xe1\x3d\x32\x48\xec\x12\xd6\xe4\x00\xe6\xea\x05\x0c\x3f\x86\x34\x8b\x28\x4b\x23\x71\xd1\x18\xdc\xed\x8e\x26\xc3\xaa\xd1\xb4\xcc\xdd\x68\xca\xee\x9c\xb8\x9a\x7c\xa3\x40\x7d\xeb\xe7\xf8\x2a\x76\xf1\x2a\x8c\x0c\x08\x5e\x10\x60\x2f\xbc\x2d\x7d\x40\xde\x20\x15\x58\x06\x54\x60\x09\xcd\x97\x0f\x1e\x79\xc3\xc1\x4f\x81\x30\xfb\xa2\x3c\xf7\x4e\xcd\xbf\xd4\xe7\x2f\x75\xcb\xd6\x94\xd5\x88\x93\xce\x40\xf2\xc1\x1a\xf5\x83\x55\xd6\x07\x3c\xf4\x2d\xd0\x03\xc6\xcd\x02\xd9\xc5\x49\x57\x17\x94\x54\x1e\xf2\x13\x8a\xdf\x36\x89\xe8\x06\x61\x46\xc5\x6f\x5f\x6c\x9d\x9e\x4d\x0c\x10\x4a\x0e\x3a\xf7\xec\x50\xe5\xa5\x4d\x0a\x93\xee\x19\xfd\xaa\x7f\xd2\x04\x10\x60\x5b\x83\xeb\x9f\x69\x88\x9f\xea\xe1\x15\xe1\x3b\x80\x43\x71\xea\xbe\xfd\x1d\x5e\xb0\xd8\x4d\x32\xa6\xf0\x3b\x7f\x76\x87\xe4\x63\x4a\x83\x7d\xc7\xd2\x68\x59\x16\xcd\xe6\x1a\x19\x8d\xe9\xa4\xcd\x50\xc8\xce\xb5\x13\x10\x34\x0d\xa9\x66\x19\xe1\x68\xec\xd2\xbe\x98\xfe\x7a\x42\xb2\xcf\xa3\x50\x4c\x31\x4d\x8e\x13\xb2\xbf\x7a\x31\x84\xa0\xd5\x21\xbf\xab\xe8\x89\xe2\xf7\x91\x2c\x14\x3a\xee\xf5\xda\xcd\x78\x7f\xc3\x77\x7a\x20\x03\xfd\xcd\x49\xe5\xbf\x3d\xd9\x3b\x22\x0b\x61\x00\x82\x83\x43\xca\x01\xe6\x0c\xfc\x61\xd3\xb6\xcf\xaa\xf6\x11\x00\xd6\xb9\x4f\xcf\x7a\x70\x5b\xe6\xa3\x58\x8f\xd1\x1d\xb8\x60\x07\x6d\x5b\x32\x30\xa2\x96\x56\x93\x2d\xc6\xb1\x21\xf9\x79\x1d\xb6\xf8\xd8\x39\xf8\xac\x99\xa7\xf8\x78\xc3\xf8\x2a\x67\x38\x38\x19\xd1\x60\x40\xa9\xbf\xb4\x17\xac\xe0\xdf\x70\xb2\xea\x96\x5c\x4a\xf2\x9d\xc5\x70\x0b\xda\xd0\x03\x4b\x98\x70\x5c\x1e\xb1\x07\x32\x53\xb4\xad\x3e\xed\x3c\x3d\x41\x7a\xa5\x5d\x73\x94\xd0\xb8\xd4\xae\xdf\x4c\xb4\x66\x92\xf2\x9d\x7c\xaf\xd8\x41\x50\xcc\xbe\xf9\x2e\x42\xa0\x0c\x23\x45\x53\xe0\x2b\x2f\x8c\x53\xd3\xb0\x87\x2e\xa1\x08\xaa\x70\xba\x78\x19\x30\x7a\x9a\xdc\xef\xfc\xd4\x08\x26\x9c\xc0\x2f\x7e\x59\x0e\x11\xd9\x9d\x78\xea\xc8\x57\x30\xaa\x53\x9a\xbd\xb7\x6c\xe9\x43\x23\xda\xee\xb6\xfe\x44\xc6\x7c\xb3\x48\x21\x86\xda\xc0\xd5\x5d\x32\xbf\x64\xaa\x2f\xce\x67\x67\xc9\x8f\xc6\xd4\x0e\xe1\xfc\xf3\x30\x91\x83\x10\xac\x80\xed\xd0\x18\x77\xcc\x47\xc4\xbe\x75\x58\x44\xf8\xfe\x10\x43\x1b\x1f\x63\x57\x99\x3b\x46\x82\x72\x75\xbf\x60\x5d\x90\x0d\x47\xec\xe1\x92\x14\x93\x43\x2d\xc5\xe7\x12\xb5\x54\x14\x19\xfd\xf8\x12\x21\xdd\xb9\xf8\x52\x70\xc6\x59\xf2\x5c\xd9\x23\x78\x9a\xb2\x09\xb7\x7c\xf4\x44\xcb\x87\x95\x00\x5f\x5a\x48\xda\xd9\xf3\x85\x3a\x3c\xf6\x2c\xb3\x48\x5f\x68\xa4\x2b\xc5\xa7\xc8\x50\x17\xf7\x26\xf4\xfa\x12\x7d\x55\xb5\x5a\x02\x4b\x63\x51\x6d\x5f\x4f\xb1\xe4\x4e\x55\x61\xd0\x02\x87\x98\x9e\xe6\xc5\xa9\x35\xad\x62\xe1\x4b\xa0\x68\xc1\x44\x2c\x91\x83\x75\xd3\xf1\x3e\x43\xf3\x54\xa4\x41\x00\xda\x48\x50\x88\x5a\xe9\x56\x01\xea\x2e\x32\x61\x8a\xaf\xfe\x90\x34\xb6\x83\x22\x04\x59\xb8\x42\xf1\xf5\xed\xb7\xae\x4f\x8d\xda\xdb\x2f\xb2\x36\x94\xdf\xf2\xaa\xde\x1c\xd2\xb7\x9c\x49\x25\x98\x63\xe0\x5c\xae\xef\x6c\x1f\x7e\x67\x2d\x89\x0c\xd5\x07\x9a\x45\x4f\x2b\xd7\xc7\x0b\xae\x9d\xf5\x3d\x2e\x2d\x22\x84\x1f\x7e\xa6\x4d\x83\x2f\xc7\x92\xa9\x44\x38\x59\xa2\xc7\xb9\xbe\xba\x87\x15\x4b\xf0\x03\xe6\x16\xf3\x45\x59\x8c\x59\xe6\x23\x98\xb7\x4e\xa1\xe2\x74\x58\x5d\xb1\x3a\x39\x9d\xef\xe6\x55\x0c\x49\x61\x75\x9a\xa0\xd8\x6c\x36\xc8\x2b\x06\x02\xc5\x13\x0b\xe4\x1e\xb4\x49\xac\x61\xcf\x1a\xda\x5d\xe7\x6a\xbe\x06\x5c\x6c\x14\x90\x18\x44\xd6\x73\x0b\xac\xc5\x80\x90\x19\x3e\x49\xb2\x25\x60\xda\x1b\x27\x64\x1f\xa2\xa6\x6c\x88\x6a\x31\x3e\x7a\x4a\x9b\x98\xad\x93\x28\x56\x6b\xc9\x69\xc4\x92\x37\x50\xce\xba\xe2\xf0\x41\x36\xc1\xa3\x4a\x5b\x52\x83\xb4\x30\x04\xb2\x25\xd4\xec\x63\x6b\xc8\x7e\x5b\xd0\xce\x88\xaf\x00\x2a\xd4\x00\xe5\x36\x93\x8a\xaf\xd9\xa9\x25\x35\xa5\x4e\xdc\x30\xab\xf6\x60\x68\xa3\x8d\x0a\x7d\xb3\x1a\x10\xe0\xd5\x5c\x3f\x55\xba\x39\x6e\xae\x6e\x0b\x54\x1b\x72\xdd\x8e\x9b\x29\x2d\xe1\x7c\x1f\x86\x81\x14\xee\xd0\x4e\xcb\x01\xd5\x31\xb2\x60\xf5\xb9\xe4\xcb\xa7\xcc\x59\xd6\x5a\xe6\x4e\xc1\xbe\xd5\x5d\xd4\x60\xb6\x9e\xb5\x90\x35\x95\xcb\xae\x44\x73\xa3\x7b\x8b\x55\x3f\xbd\x15\xa0\xbe\x94\x10\x6a\x08\xfb\x8a\xd5\x3e\x4a\x3d\xd7\xee\x60\xd2\x09\x89\x7c\x87\xf4\x15\x39\x76\xff\xe1\x4c\x4d\xf1\xf5\x0b\x7f\xdc\x2e\x57\x1d\x91\x56\x19\x91\x62\x36\x88\x33\x96\xec\x37\x46\x21\x1c\xa3\xcb\x25\x69\xdf\x2e\x97\xf8\x5e\x76\xc1\x71\x46\x49\xc7\xcb\x3b\x79\xad\x52\x2d\x14\x73\x3b\x70\x89\xc2\x10\x81\xb3\x65\x4e\x72\xf4\x82\xe1\x97\xc7\x58\xba\x66\x2d\xc0\xb9\x2e\x76\x97\x56\x6a\xb9\xb5\x4e\x4c\x02\x2c\xdb\xde\x40\xf0\x87\x06\x23\x36\xaa\xaa\xc5\xf7\xa1\xa1\x00\x86\xe3\x12\x71\x36\xa8\xe0\x56\x47\xe1\x13\x48\xf3\x9b\xac\xed\x89\xe3\x06\x2c\xa5\x44\x4f\xf0\x12\x5c\x02\xde\x6c\x1c\x51\x9b\x79\x31\xe5\x12\x09\xd3\x58\xb4\xa9\xda\x6e\x32\xf1\x34\x27\x24\x0a\x6e\x62\x41\x9f\xc5\x24\x12\x5a\x21\x5a\x58\x5b\x09\x9b\xb3\xc4\x24\x36\x26\xb6\x56\x1f\x58\xdb\x69\x22\x0c\x86\xe8\xa4\x66\xac\xb9\x86\x90\xf4\x53\xcb\x03\xe6\x28\xfa\x81\x1e\xb4\x44\xf4\x51\x5f\xea\x18\x78\xa6\x9e\x52\x71\x32\x5a\x63\xf3\xa1\x83\xd4\x7a\xdb\xc7\x6e\xcd\x00\xd5\x97\xc1\x50\xba\x28\x53\x6c\x59\x70\x5a\x04\x1e\x36\x29\xc8\x4d\x0b\x72\x43\x01\x6e\x9d\x92\xef\xf2\x80\x3a\x97\x27\xf8\xd6\x51\x15\xce\xab\x23\xf0\x82\xb8\x92\x75\xde\xcf\xa5\xe7\xb4\xdb\x59\x0c\x07\x80\xbd\x96\x34\xc7\xbd\xfe\x2f\x79\x29\x0d\x27\xa1\x20\xd6\xc4\x07\x2f\xab\x8a\x82\x50\x57\xe5\x52\xb2\x00\x33\x1a\x6a\xd8\xf9\x9f\xcd\xfb\x1c\x9e\x76\x93\x33\x01\xcc\x19\xd9\xeb\x2c\x46\xc0\x32\xf7\xec\xf3\xca\xbe\x12\x83\xba\xa8\xb2\x10\x0e\x63\xcd\x51\x1a\x70\x82\x6a\x45\x16\x2a\xfc\xba\x50\x41\xa4\x29\x60\x17\x3d\x6c\x59\x46\x15\x82\x35\xa9\x64\xd6\xdc\x75\xd6\xdc\x7b\x78\xe7\xe3\xe0\xea\xc4\xe2\x0c\xe9\x89\xe8\xf0\xc5\x75\xc8\x50\xda\x1d\x87\x19\xd8\x60\xde\x9e\xae\xe3\x45\xa2\x06\xa3\x63\x61\x03\x0c\x71\x9d\x80\xba\xd5\x93\x05\x30\x94\xd3\x25\x5f\xf3\x56\x9f\x86\xac\xa3\x7c\x65\xa3\x83\x37\xfe\x8c\x20\x3a\xa7\xa3\xf1\xf4\xe5\x0e\x16\xbc\xf4\xc9\xd3\x27\xdf\xfe\xa1\xab\x7d\x83\x7d\x5a\xeb\xd3\x4a\x96\xb9\xd2\xe9\xea\xe5\x36\x95\x6f\x2f\x34\xef\x4f\xd2\xb0\xad\x7c\xb1\x71\xa4\xac\x3e\x83\x4b\x56\xad\x6c\xb1\x5d\xb2\x0f\xff\x50\xb6\xfc\x58\xca\x35\x7b\x72\xe6\x9d\x38\x04\xa4\x23\x90\xd3\xc7\x38\x8b\xd5\xb9\x00\x11\x02\xc9\xd0\xcc\xec\xfb\x3e\x65\x16\x67\x39\xa1\xb4\x8a\xc4\x59\x35\xd4\x84\x62\xef\x89\x1e\xb9\x14\xa4\x1a\x9e\x90\x00\xac\xa7\x63\x16\x26\x3e\x05\x3e\xca\xb1\x42\xf8\x14\x22\x45\x98\x27\x13\x44\xa0\xe7\x5a\x88\xa5\x98\x42\x71\x91\x0b\x57\x19\x6e\xae\xc9\x60\xee\xf9\x9e\xe1\xe2\x5e\xe7\x8c\xfe\x85\x0a\x0f\x20\x53\xab\x89\x61\x37\x7a\xdd\x6d\x54\x88\x15\x26\x10\x54\x0b\x41\x54\x31\x00\x25\xdd\x09\x3e\xf4\xb4\xfd\x6c\x82\xf2\xdd\xbc\x71\x82\x70\x5b\x4b\x0f\x6e\x0d\xce\x9c\xbc\x7e\x8d\xa0\x82\xd6\xcf\x49\xec\x35\x3b\xd0\x15\x9d\x53\x12\x28\x27\x0e\x16\x3d\x9b\x3e\x3b\x00\x35\x16\xea\x0d\xf0\x4a\xb8\x49\x21\x22\x83\x08\x40\x49\xdd\xbc\x16\x86\x29\xa7\x1e\x58\x84\x1b\x00\x6b\x49\xc8\x6b\x49\xc8\x09\x21\x6d\x54\x0a\x87\x58\x85\x8c\x0e\x11\x97\x64\x94\x4b\xa0\xc9\xef\x50\xc8\x15\x5a\x93\xae\x43\x63\x73\x5a\x09\xb2\x98\xf0\xe8\x26\xd1\x0b\x06\x2f\x16\x30\xc1\x38\x4c\x1f\x36\x4b\x4e\xc5\x1c\xd0\x9e\xb7\x9c\x54\xcb\x38\xb8\xdd\xf8\x64\x66\x15\x7a\x12\x75\xe9\x75\xc3\x9b\x89\xdf\x34\x85\x7a\xf6\x36\x9a\x22\xf6\xe6\xf3\xc6\xc0\xd2\xaa\x03\x52\x16\x70\x47\x60\x54\xdf\xd1\x58\xf2\xd3\x44\xa5\x4d\x80\xc4\xb0\x2e\xb5\xc3\x64\x5c\x21\xcd\xe4\x9d\x0d\x2e\x95\x6c\xbf\x9d\x7a\xc8\x8c\xf9\x0c\xa9\xc9\xe7\x00\x53\xc9\xb1\x20\x65\x49\xcb\x39\xd9\x00\x3b\x65\xba\x03\xa2\xa6\xd5\xdb\xcc\x9d\xe8\xd4\x68\xca\x14\x6a\x03\x55\x8e\xc6\xff\x1a\x69\x10\x6c\x14\x0f\xd2\x67\x56\xe8\xc6\x2a\xf0\xa2\xb4\x86\x0d\x4e\x99\x12\x82\xe4\x34\x61\xf9\x4c\xa7\x4f\x0d\x1d\x6c\x54\x67\x90\xac\x38\x03\x7e\x3a\xbd\x73\xec\x0e\xa4\xf2\xce\x36\x3d\xed\x5c\xd6\x42\xf8\x9d\x9c\xbd\x01\x50\x61\x27\x90\x53\xe7\x0d\xd9\xd3\x4c\xf2\xe1\xe4\x3c\x1c\xb3\xea\xf6\x47\xb0\x7d\xe7\xa3\x9d\x26\x86\xdb\x9f\x2c\x51\x0b\x36\xfa\x19\xda\x02\x60\x6f\x1c\xdc\xee\x3d\x6b\x27\xf3\x44\xb7\x75\x49\x6d\xc3\x1f\x6f\x50\x3f\x1f\x3d\x96\x40\xa8\xe2\xe1\x95\xcb\x23\xe6\x2d\x3a\x96\x40\x38\x29\x17\x11\x62\x3c\x4b\x07\x9c\x9d\x11\x31\xb3\x7f\x99\x51\x9f\x1f\x53\x62\x8e\xbb\xfb\x91\x57\xab\x3f\x5a\x5f\x9f\x66\x4d\xa3\x42\x76\xd9\x16\x10\x1c\xf6\x5f\x80\xd7\xa6\xe0\x69\x41\x05\x78\x32\x39\x92\x06\x4a\x88\xee\xca\xc2\x60\x49\xc4\x16\x3e\xce\xcd\xfd\x63\x20\x76\xf2\x46\xfd\xa7\xa4\x48\xcb\x34\x9f\x14\xd2\xb3\x8c\x7a\x01\x3f\x0e\x17\xfe\x6b\xa2\xb6\xb4\x11\x01\x5c\x0a\xe9\x07\x37\xcb\x1f\xaf\x3f\xdf\x2d\xdf\xf9\xf8\x80\x0a\x57\x04\x99\x7a\x54\xff\xe5\x6a\xbd\x8d\x6d\x53\x59\x84\x30\x60\xd5\x36\x25\x88\xf4\x32\x5e\x30\x0a\x3c\x13\xa5\x47\x6b\xe1\xca\x04\x7f\x7f\x71\xb4\x96\x00\x46\x69\x61\x73\x55\xf6\x3c\xc2\xe6\x9e\x91\x00\x78\x88\x4b\x13\xb7\x1d\x0f\xf4\x77\x41\x37\x69\xc2\xc6\x33\x67\x3e\x79\x16\xb6\x1c\xb9\xb3\x08\x9b\xac\x99\x85\xad\x0a\xb7\x80\xa9\xb6\xbe\xc2\xda\x20\xe5\x8b\xba\x81\x12\xfc\xcb\x45\x72\xe8\xf9\xef\xca\xd4\xaa\x06\x59\xe7\xc4\x25\x6f\x6e\xb7\x09\x8a\x0b\x5c\xec\x81\x91\xa8\xe5\x34\x84\xcf\xf8\x5f\x6b\x76\x27\xc6\x9b\x83\xb7\x7e\xc2\x97\x7a\xcf\x29\xc6\x92\xbb\xe5\xb9\x03\xf0\x3f\xa7\x45\x3c\x5c\x8d\x12\xe3\x78\xd4\x20\x75\x60\x62\xf8\x3d\xa7\x46\xb6\x63\x80\x83\x62\xec\x55\x14\x21\xd0\x38\x24\xf6\xcd\xc3\x18\x86\xd3\x14\xfe\xe7\xc4\x25\x34\xf0\x71\xb0\x10\x73\x57\xdb\x45\x45\xc2\xe2\xf2\x73\x99\x1b\x63\x84\x64\x41\x30\x24\x5d\xbc\x25\x54\x7c\x4a\xb0\xa9\x89\xcd\xcb\x07\x41\x97\x91\x03\xc6\x39\x21\xbd\x43\x05\x3b\x06\x35\x12\xc1\x8e\x18\x06\x1e\xee\x04\x19\xe5\x84\xc4\x0b\x22\x21\x25\xf6\x86\x77\x15\xf0\xe4\x7d\x31\x86\x91\xc6\x06\xf6\xc2\xce\x33\x08\xf5\x66\xaf\x61\x0d\x37\xa4\x64\x86\x38\x6d\x85\xc2\xa9\x7b\x31\x0c\xd8\x79\xa7\x72\x8c\x08\x71\xb4\x8b\x8c\xc3\x09\x70\x7c\xca\x3c\xdb\x17\x78\x95\x3d\xc8\x22\x7b\x28\xe4\xee\xef\xc0\x04\x8a\xa6\xfa\xea\x44\xda\xa1\x50\x2d\x27\xdb\xe6\xac\xc8\x32\x7e\x80\xa6\x28\x55\x30\xc9\x63\x16\x2f\x86\xa7\x56\xcb\xd0\xec\xa5\x8e\xf7\x28\xe3\x64\xb3\x86\xda\x26\x99\x1e\x13\x94\x9d\xe6\x60\xc7\x13\x08\xf9\x3a\x4d\x39\x1a\x76\x54\x81\xd0\x7c\x49\x21\x93\x75\x45\xac\x90\xc9\xa8\x1f\x8d\x3d\x0c\x14\xc1\x62\xd0\x2f\xe0\xa2\x24\x3d\x25\x01\x6f\x08\xf9\x2f\xe1\x27\xc8\x54\x25\xfc\x3c\x9c\xd5\xbf\xbf\x81\x92\xe0\x4f\x89\x4e\x76\x70\x09\xf0\x58\x03\x08\xa9\x13\x6d\x23\x3b\xda\xfe\x35\x4b\xa9\x21\x6f\x05\xa9\xc5\xc4\x9b\x76\xd1\x61\x95\x34\x3a\x0e\x63\x74\x07\xdb\x3d\x82\x1d\x8e\x21\x22\x12\x9a\x81\xa7\x20\xbc\x95\x22\xf6\xd1\x1d\x03\xfe\x07\x94\x5c\xdc\x19\xc5\xbf\x06\x35\x51\x69\x8a\x2e\x79\x0d\x48\xf2\x5d\x2a\x4d\x64\xbd\x84\x00\x92\x73\x84\xb4\x11\x99\x58\x2c\xaf\x4b\x9e\xd1\xa5\x2f\x8d\x6f\x92\x6d\x75\x42\x32\x30\x8a\x2e\x99\x74\x37\x22\x5d\x53\x89\xd2\x43\x9e\x5d\x25\xbb\x82\x06\x1a\x88\x08\x36\x8f\xbb\xbd\xe7\x5a\xc1\x80\x53\xb1\x71\x09\x61\xd0\x3a\x23\xc4\xb0\x5d\x32\x1a\x88\x4e\xb4\xc0\x0b\x52\xdf\x08\xb3\xcd\x1e\xb6\xc6\x20\xcf\x68\x77\x76\xd1\xc5\xff\xae\xde\xcb\x0c\x81\x81\xb6\x7a\x60\x79\x7b\xdc\x7c\x27\xf9\xda\x59\xb0\x2f\x50\x1f\xfb\x64\x0f\xff\xaf\x99\xda\x1f\xbe\x93\xc4\xc3\x61\xe2\x5f\xa3\x76\xc5\x25\xb3\x87\x4f\xad\x27\x6a\x9d\x5d\x08\x66\xc4\x39\xfd\x68\x1a\xe3\x3a\x7f\x89\x5e\xd7\xf0\xa2\xd7\x63\x8e\x40\xc8\x71\xef\xf8\xe8\x08\x01\xdd\x7c\x62\xec\xd5\x75\xb3\x93\x44\xd1\xbf\x5e\x0f\x1e\x1e\xad\x14\x4d\x44\x58\xa4\x22\x42\x68\x8c\x23\xe8\xf7\x43\x2b\x05\x41\xf5\x22\x64\xdd\xc5\x24\xcc\x83\x2d\x66\xbc\x7c\x45\xf3\x6f\xb9\x59\xbc\xe0\xa0\xef\xa4\xb6\xdb\x75\xe7\x12\x3d\x24\x42\x72\x08\x18\x76\x21\xb6\x23\x12\x3d\xcf\x86\xa3\x1c\xb4\x8e\xbe\x85\xdc\xdc\xe0\x63\x92\xd1\x77\x99\x14\x46\xcf\xed\x1b\x3d\xd5\x97\x51\x4d\x36\x34\xb3\x3d\x73\xd0\x46\xcd\x25\xf9\x71\xa9\x97\x3f\x5a\x77\xfc\xcf\xac\x3b\xd2\xe4\xf0\xbd\xb8\x22\xab\x0e\x22\x15\xa9\x44\xca\x68\x49\x17\x40\x2e\x97\x59\x72\x32\x77\x8e\xa0\x76\x81\x2a\xbf\xa5\xc4\x21\x03\x13\x06\x28\x95\x63\xd3\x7a\x38\xd0\x55\xc7\x71\x1c\x6a\xfb\xd0\x37\x72\x46\x21\x8e\xcb\xe1\xf0\x02\x81\xce\x06\x2f\xb5\x7c\xbd\x16\x45\x11\xc6\x8d\x4c\x63\xc4\x8f\x9e\x56\x05\x20\xbe\xa3\x09\x52\x23\x09\xe8\xa5\xe1\xbc\x2c\x0c\xf6\x6a\xbe\xbb\x10\xf2\x0b\x7d\x3f\xee\xb0\xd3\xbf\xd4\x79\x02\xfa\x02\xd6\xd2\xee\xb5\xc4\x0e\xdb\x12\x8d\x92\x83\xa3\x06\x16\x0a\x01\xc2\xdb\x39\x78\x56\x79\xf2\x17\x9b\x26\xfa\xe0\x9d\x2a\x3c\x13\x9e\x92\xaf\xe3\xe6\x36\x64\xdc\x61\xb6\x0d\x93\xd8\x3b\x8a\x6e\xf2\x63\xaf\x6e\xa0\x32\x53\xd1\xe0\xbe\x95\x91\x8e\x6b\x57\x46\x8e\x85\xdb\x62\x04\x8a\xd4\x96\x37\x7b\x39\x27\x6a\xcc\x74\x90\x3d\xcb\x5e\xd6\xdc\xca\xaa\xa6\x15\x08\xc9\x9b\xed\xcc\x54\xe6\x93\x52\x99\xc7\xb6\x59\x8a\x50\xd6\x12\x94\xb7\xaf\xcb\x55\x7d\x07\x8b\x99\xfe\x86\x0e\xe7\xf2\x7e\xb0\x0b\x7a\xc2\xc5\x7e\x90\x35\xd9\xb0\xcd\x3b\x57\x66\xc6\x2d\x0b\xf8\x15\xe0\xbb\xc6\xc2\x20\x45\x30\xf3\xcc\x2a\xeb\x71\xec\xac\xe7\x5e\x72\x60\xd1\xc7\x25\x87\xaf\x20\xa3\x08\xc0\xd9\x9f\x30\xb5\xf9\x78\x96\xfb\x74\xf4\xa4\xc1\x06\x23\xf1\x16\x92\x87\xe8\x21\xf7\x0f\xb3\x9c\x6b\xcd\x5f\x34\x04\xcc\x92\x16\x5f\x58\xd6\xca\x9a\x22\x48\x05\x14\xbe\x8c\x13\xab\xe2\x24\xba\x65\x9d\x9c\xe5\x2b\xf0\x13\xb7\x5a\x24\x27\x62\xc8\xd7\xa3\x47\x7b\x20\x57\x09\x01\x88\x18\x0a\xe6\x69\x2e\xa3\xae\x2c\xaa\x45\x09\xb0\xc5\xe8\x93\x01\x89\x04\x20\xa7\x4e\x94\x99\x87\x00\xf1\x62\xe9\x8f\x72\x8c\x83\x93\x23\x3e\x3c\xd2\x20\xb0\xfb\x28\xfb\xc2\xc4\xd2\x5e\x27\x96\xe3\x24\x84\xe5\x00\xa4\x41\xf6\xfd\x59\x8e\xf1\x12\x93\x35\xcd\x1c\x9f\x17\x2f\x04\xe7\xf8\x50\x4b\xe9\xe5\x7e\x88\xd0\xe5\x8d\x7e\x6c\x3b\x5d\x0b\xe2\xe9\x72\xa1\x48\x99\x9f\xd0\x5c\x48\x41\x8f\xcf\xc7\x22\x3d\xf1\x67\x8b\xfa\xea\xe9\xa7\xd3\xdc\x00\x33\xa2\x67\x73\x08\x4e\xc3\xd0\x64\x77\x8f\xc8\xfc\x98\xef\xa7\x7e\xed\x9d\x03\xbb\x3a\x70\x15\x53\x6d\x1c\x4e\x84\x75\x08\x31\x73\x9f\x16\xf3\x98\x3b\x83\x79\x8d\x46\x98\xf8\x39\xcb\xd0\xa3\xdb\xff\x39\x3e\x27\x0d\x8b\xab\x98\xeb\x51\x20\x81\xd8\xbf\xcc\xf1\x61\x15\x45\x82\xd4\x21\x77\x77\xf6\x7d\x3e\x03\x60\xeb\x6c\x66\x22\xb6\x93\xf5\x71\x44\x64\xcf\x99\xe0\xe2\xc0\x0e\xa9\xe7\xf8\x14\x96\xb0\x0a\x68\x9b\x58\x44\x4e\x27\x49\xa8\xcb\xc4\x02\xa7\x05\x5d\xc4\x61\x22\x1d\x28\x11\x5e\x95\x51\xa4\x56\xb2\x98\xd9\x4b\xf3\x49\x76\x74\x73\x7c\x9a\xb7\x80\x35\x5f\x66\x68\x9a\x15\xca\x86\x9d\x66\xc7\xd8\x0e\x3f\x09\xb1\x85\x73\x70\xbb\x9b\x90\xe3\x33\xaf\x69\x2d\x44\x92\xa6\xcf\x32\xd2\x2d\x17\x6d\x51\x98\xf0\xa3\xc5\x7d\xa4\xe6\xfa\x90\x55\x81\x1c\x1f\x3d\x65\x45\x30\xa4\x27\x86\xdd\x4b\x01\xfe\xcd\xac\x59\x8c\x31\x9c\xdb\xb5\xc1\x7c\xcd\xfa\x7c\x5d\x8e\x1c\x2c\x57\x37\xf3\x25\x29\x93\xb6\x33\xe3\x3b\xb3\x47\x34\x71\x2e\x25\xa7\xce\x77\xa4\x05\xc0\x65\xe2\x3b\xac\x39\x53\x3e\xeb\x3c\x32\xeb\x3c\x32\x17\x3e\x07\x9b\x0b\x26\x41\xb9\xc8\x3c\x3e\x17\x6a\xbe\xe0\x41\xe1\x15\x8b\x5c\xca\x63\x07\x6f\x89\xa8\x07\xf0\x4e\xda\x8a\x32\xa2\xed\xfd\x1a\xd1\x4f\xca\xe9\xc0\x5c\xf5\x04\x3a\x10\xfb\x52\x79\x6e\x99\xab\x86\xab\xce\xe4\xd0\xb3\xf8\x59\x8e\x2d\x64\x3d\xb6\xc0\x87\xd7\x21\x76\x9c\xeb\x88\x3a\x80\xb4\x6e\xce\x59\x60\x2e\x5e\x15\x7d\x83\xfa\x0f\x21\x9d\xa6\xc2\x17\x80\x9b\xe3\xaa\xdb\xbc\x84\x78\x4e\x95\x2b\x0d\x4c\xc5\xf3\x1e\xb6\x2c\xaf\xe5\xfe\xa0\xc8\x9c\x51\x7f\x66\x94\xf5\x6c\x3f\x01\x09\x7a\x8f\x1a\xf6\x1e\x11\x78\x88\x99\xd4\x40\xf5\xaa\x63\xfa\x5c\xfb\xa0\x59\xa7\x16\x0f\xa4\xba\xe9\x1b\xf8\xd0\x2f\x60\x92\x7a\x04\xe0\x0a\xa4\x41\xa4\x42\xd3\x21\xc9\xa2\x06\xaf\xe4\xd6\x3c\xdf\x78\x60\x24\x5e\x10\xc4\x54\x37\xeb\x39\x8e\xdc\xba\x7b\xed\x99\x95\x96\x83\x6d\x5e\xb5\xe7\x83\x8a\x69\xa4\xf9\x1b\x97\xeb\xd6\xdd\x95\x64\xab\x84\x88\xb9\x4c\xf3\xf2\x0f\x68\xf7\xc9\xde\xe5\x6a\xe6\x54\x00\xe5\x44\x0c\xd3\xd6\x65\x74\xb1\x30\x75\x57\xd6\x43\x1e\x64\x50\xb1\xeb\x1b\x95\x9c\x5a\x18\xc0\x3e\x2c\x3e\xdd\xf3\xe4\x8d\x58\xeb\xa7\xf6\x4f\xad\xbb\xb1\xcb\xe6\x3a\x48\x5d\x9d\xfd\x98\xe7\x3f\x7a\x45\x32\xb7\xfe\x72\xa5\xb3\xc2\x01\xb0\xea\x64\xd3\x1f\xc4\xbb\x2f\x88\x50\x61\x46\xf5\xd8\xde\x8d\x6d\x33\x18\x5f\xf2\x8d\xd7\x80\x3a\x5e\x82\x9b\xf3\x9b\xc1\xa4\x0b\xc6\x60\x75\xc7\x1d\x38\xc5\x69\xbe\xe0\x1b\x46\x8c\x7b\x88\x36\xb0\x87\x49\x77\xb5\x9e\x66\x97\x2f\x0b\x13\xd4\x33\x75\xc0\x3a\x55\x05\xa9\xfe\x25\xe7\xbc\x95\x9a\xc5\x1c\x73\x52\x34\xae\xc5\x96\x4a\xf8\x4d\x5d\x78\xda\x9f\xf9\x32\xa5\xf1\x0a\xe6\x47\xfa\x3b\x7c\x33\x7b\x2d\x27\x56\x41\x25\xfc\x36\x9d\x28\x6a\x30\xa2\x16\xd7\xbe\xcd\x12\xb8\xf1\xed\x4c\x42\xd5\xf7\x59\x77\xba\x09\xd3\x65\x32\x36\x3e\x83\xc1\xc4\x62\x32\x5e\x41\x7d\xd2\x23\x82\x80\x26\x8a\x94\x29\xeb\xec\xe7\x7a\xd3\x77\x7f\xfb\x98\xcb\xb5\xd8\x0f\xce\xf6\xe3\x99\x96\xb3\xba\x63\x96\xac\x3d\xb8\xa5\x34\xef\x01\xa2\x2a\xd5\xf7\x70\xcc\x30\x04\xcc\x48\x92\x90\x72\x42\xd5\xa8\xbd\x14\xbe\x7d\xd2\xf9\x91\xe6\x4a\xa9\xf9\xd6\x70\x86\xa6\x2b\xa7\xc4\xb2\x5e\x26\x20\x62\x29\xb0\x3f\x0d\x17\xf9\xc4\x0f\x6c\x3f\x06\xc9\x5d\x1f\xfd\x12\x49\x65\x52\xf4\x7d\x92\xf2\xa2\x9f\xf7\x25\x88\xae\x0c\xb0\x1a\x72\x15\x34\x8a\x45\x76\xd1\x92\x05\xda\xcf\x4b\xeb\xa2\xff\x09\x51\xa3\xfe\xf6\x2f\xe8\xe4\x65\x7c\x59\xb8\xdf\x5e\x43\xf3\xce\x0b\xbc\xd5\xbf\xc3\xa5\x23\x06\x19\xa8\x10\xd5\x59\x49\xeb\x22\x33\x54\xa1\x3a\xb6\xa3\x9b\x84\x6b\x28\x45\x30\x8d\x2e\xf5\x4e\x28\xd3\x4c\x15\x68\xf2\x62\x99\x7b\xfa\x1f\x57\xb4\x94\x9f\xa1\x94\xbc\xb9\xcb\xfc\x81\xe6\x49\xc3\x5a\x3a\xcf\x47\xa3\x7d\x3e\x25\x59\xa3\xb9\x08\xc3\x2c\xac\x2d\xc2\x0b\x50\x87\x61\x9b\x99\x85\x3b\xdc\x92\xd9\xac\x7f\x4d\x49\xda\x5c\x4d\xce\x32\x32\x24\x3b\x2d\xcc\x2c\x0e\x9f\x7e\xf5\x23\xa9\x43\x71\xb3\xd0\xff\xc6\x61\xad\x1e\x0d\xab\xc4\x38\xba\xed\xac\xcf\x65\xac\xde\x13\x3e\xe9\xf8\x20\x9a\x1b\xd1\x9b\xb9\x4f\x6b\x23\x2c\x92\x1e\xb5\x42\x4a\x57\xd8\xfa\xe5\xa2\xb3\xe2\x7e\x39\x56\xc3\xa9\x78\x69\x76\x2f\x97\xf6\x30\x3b\x23\x53\x59\xc9\xa4\x5a\xe6\x5e\x54\xeb\x24\x9d\xaf\x8f\x86\x9b\x98\x46\xe6\xf2\x7b\x70\xfe\x5e\xd9\x02\x93\xc1\xd5\xca\x58\xbc\xf2\xb3\xd3\xbb\x20\x92\xc8\x9b\xbd\x94\xf5\x1a\x15\xd3\xd6\xeb\x30\x56\xc3\xe2\xfd\x47\x2d\xa4\xb8\xea\x69\x70\xa2\x34\x18\xb9\x18\x42\x99\x81\xa4\x96\x6a\xf7\x01\x79\xb6\x19\x8a\xe7\xc7\xef\x5e\xaf\xec\x4e\x03\x79\x2d\xf7\xa9\x09\xf9\xad\x9a\x2b\x3e\x1c\x3c\x99\x35\x11\x0c\x8f\xe5\xc5\x87\xad\xe9\x41\xd6\xb6\x26\xe5\xdd\x02\xa6\x4a\x51\x0b\xf7\xe0\xb7\x26\x5b\x5e\x9a\x96\xa9\x90\x8a\x99\xfa\x68\xf5\x3e\xd7\xd9\x4e\xb3\xf2\x20\x2b\xdb\xa6\x56\x07\x44\x74\x97\x10\x5e\xc4\x6a\x30\xb3\x4e\x6f\xb9\xbd\xce\xcc\x7a\xce\xe5\x52\xae\x30\xbd\x98\xcb\xb4\x8f\x6b\x42\xb9\x9a\x0a\xda\x67\x27\xb8\xee\xe1\x7e\x50\xf5\xc6\x2f\x0d\xb1\x5d\x54\x12\xb7\xcb\x09\x7d\xa6\xf3\x00\x3d\xf1\x73\xad\x6c\xeb\xf9\x2d\xd0\x65\xe2\x43\x54\x0e\x06\x00\xf7\x73\x79\x13\xfa\x08\xd6\x8e\xaf\x2b\x4d\xad\x7f\x0e\x38\xfb\x3a\xce\xec\xa5\x52\xb5\xd3\x37\x34\x31\xb2\x41\x9d\xb1\xf9\xb6\x75\xad\xde\x65\xbc\x7c\xed\x8f\xe1\xd9\xad\x97\x01\x61\x99\xea\x68\xc4\x4b\x4e\x39\x82\x95\xa5\xbe\x96\x47\xee\x6a\x00\x57\x77\x59\xbf\x56\x9e\x6a\xc1\xc0\xf8\xcb\x88\xdf\xb4\xc8\x54\x9f\x0c\xb5\x51\xa7\xf2\x3c\x36\x9a\x8d\x5f\x3d\x6d\x5d\x0f\x6c\xbe\xc8\xbc\x94\x40\xa8\xd9\x88\xa9\x8e\x97\xcf\x9a\x77\xcd\x6d\x33\x23\xdb\xe6\xea\xdc\x26\x80\xc1\x99\xe3\x2c\xa8\x6d\xcb\xf5\x35\x8c\x79\xd7\xa4\x38\xb7\x70\x58\x8f\x28\x58\x3e\xd6\x0a\xef\x79\x88\x13\x1c\x9a\x53\x8b\xe5\x7c\x8e\xcb\xde\xcc\x71\x5f\x2b\xd1\x0a\x41\xd3\x2b\xbb\x82\xbb\xce\x9d\x5a\x6f\xa3\x94\xb1\xd4\xc0\x06\x01\x23\x6a\xf7\xb9\xf8\x1c\x84\x52\x15\x59\x00\x82\x0b\x77\x93\x2e\xa3\x9c\xee\x5e\x96\x31\xdd\xd9\xd0\x56\xae\x85\x29\x11\x19\x56\x84\x4f\x17\xdd\x65\x24\x57\xb7\x19\xc1\x7c\x4e\xdd\x04\xeb\x94\x64\x17\x9e\x10\x65\xbd\xd6\x84\x5e\x5d\xf1\xbf\x9a\x38\xbd\xba\x25\x4f\x3b\x15\xc6\x99\x4f\x7d\xcc\x61\x5e\x7f\xae\x62\xa1\x59\x67\xb5\xc4\x92\x38\x18\xd7\x2b\xcc\x79\xc8\xb8\x5e\xd3\x4e\x35\xe0\xbb\xff\x24\xea\x69\x97\xbb\x55\xb9\xf5\xdb\x6d\x9b\x15\xaf\xdb\xd5\x90\xa3\x86\xf8\xf6\xc9\x57\x8d\xcc\xed\x2d\x37\xef\x65\xb0\x8e\x43\xd2\xaf\xc9\x9a\x85\x49\x35\xfc\x13\xfe\x09\x22\x0a\x22\xb7\xfe\xfb\x1c\x34\xc7\x3a\x9f\xa6\x5e\x4f\x13\x4e\x50\x9d\x17\x77\xc9\x86\xee\x5a\x13\x20\xd3\xa2\x4e\x53\x02\x5e\x1b\xe0\x3d\x1c\x3c\xb0\x74\x61\xf7\xf1\x18\xd9\x6a\x3a\x28\xdc\x4a\x37\xcf\x22\x73\xb2\x9c\x0d\xce\x7a\x36\x38\xe3\x18\x70\x1e\x1b\x2f\xa5\xea\x76\x55\x1e\xbc\x4f\x92\xbf\x77\x6c\xe7\xe5\x6f\x99\x80\x8b\x48\x5a\x00\x99\x13\xff\xfe\xe6\xc8\x19\x58\xe5\xec\x0f\x3f\xd9\xa7\x6a\x47\x80\x80\x30\x0b\xae\x4e\x7a\xfb\xea\x7c\xd2\xd9\x6e\x75\x9e\x3b\x16\x7d\xd3\xe5\xe8\xef\x1c\xd2\x57\x17\x9a\x2a\x82\x9f\xcd\x22\x6e\x32\xd2\xe4\x88\xf2\xab\xba\x47\x42\x08\xc4\x41\xac\xde\xbd\x5a\xae\x2f\xa4\x1d\x08\x15\x5c\xc1\xa2\xa7\x88\xf0\xb6\xa9\xb4\x72\x66\x76\x7f\x89\xd8\x9c\x88\x57\xbb\x3c\x5d\xe7\xed\x69\x81\x98\x05\x54\xb9\x40\x4d\xcf\x20\x9c\xd5\x2a\xa0\xd0\x9b\x84\x5b\x42\x3b\xe7\x3a\x50\x91\xa2\x40\x64\xb7\x0e\x01\x72\xf5\xfe\x0e\xb4\xeb\x84\x4f\x5f\x35\x22\xfb\x7f\x76\x63\x61\x32\xb1\xf6\xdf\x68\x8b\x77\x57\x48\xc1\x24\xb7\xc3\x64\x44\xf1\xe3\xd6\x45\x78\x21\x28\x73\xd5\x3b\x4c\x96\xc4\x6b\xff\xa3\x77\x30\xaa\x5f\x75\x32\x11\x9d\xaa\x98\xc0\x16\xf5\xb0\xc4\xe3\x96\x4f\x6e\x9c\x88\x1c\x54\x79\x94\x70\x91\x06\xd2\x5d\x38\x22\xe5\xa4\x26\x6c\xc5\x52\x7e\xbc\x8b\x5d\xd2\xff\x7a\xb9\xd6\xdc\xae\x85\xc5\x4f\x4d\x4f\x44\x34\xd9\x92\x2b\x67\xd6\x80\xa4\xee\xf9\x1a\xe6\x27\x93\x4b\x99\x30\x0a\x4d\x66\x52\xd5\xeb\x12\x49\xf5\xab\x34\x0d\x66\x4d\xdf\xb4\xcd\x1b\x9c\x2e\x5b\x0b\x47\x92\x98\xc9\x89\xb7\xea\xe7\x22\x07\x61\x5b\xe3\xa8\x5e\x96\x38\xaa\x7f\x51\x53\x1a\x73\x65\x5c\x5f\xd0\xba\x6b\x58\xa2\xf6\xe2\x41\x24\x40\x10\x1f\x5e\x3e\x66\x29\x76\x2f\x9f\x76\x79\xef\x7b\xcd\xfd\x14\x12\x45\x69\x13\xe1\xbc\x1b\xaa\x09\x4f\x5b\x3f\x01\x4e\x0b\x09\xea\x5b\xcd\x6e\xdf\xa8\x1f\x15\xa7\x35\x5f\xbc\xb6\x0c\xbc\x3a\xc9\xe9\xd7\x33\x1a\x9c\x62\xba\xea\x42\x68\x3f\xe4\xa8\x04\x11\xaa\x9c\x38\xb8\x55\xfd\xe6\x22\x25\x88\x14\x81\xcd\xa5\xcd\x6b\x8c\x37\x07\xe5\xe2\x96\xe8\x9b\x2b\x34\x06\xe4\x70\xd8\xba\x0c\x60\x30\x27\x35\x69\xc9\xfd\x67\x51\x86\x0c\xb8\xb6\xea\x31\x13\x42\x63\x57\xcb\xc3\x6e\x7c\x28\x13\x57\x7e\x97\xbb\xf1\x8a\x25\xc2\x4c\xb4\x99\xd9\xbc\x26\x2e\xc4\x31\xcb\x5c\x82\x99\x95\x55\x3b\x66\x4b\x70\x2e\xf7\x08\xab\x6a\x09\x89\x19\x76\x25\x2a\xeb\x82\x98\xdd\x7a\xad\x7e\x3b\xdd\x55\x64\x0a\x0a\x56\x35\x94\x76\x36\x92\xb0\x0c\xe3\x08\xb2\xea\x72\x81\xfa\x01\x8b\x67\x28\x61\x13\x0f\x82\x4a\xc2\x53\x6c\xa1\x26\x66\x0e\x9a\x98\x69\x0b\xb0\x45\xe9\xbf\x0c\xca\xe7\xa2\x4e\xb1\x09\xeb\x06\x1b\xe1\xec\x14\xe6\x6d\x7b\x78\x64\x0d\x12\x26\xd2\xcf\xe5\xc3\x84\x71\x18\x93\x30\xe6\x90\xb8\xc5\x66\x16\xa3\x2b\x6d\xda\x04\x0d\x0b\xa5\x71\xea\x4a\x8f\x20\x55\x9c\xd8\xb0\xd8\xe4\xa8\xd7\x78\x99\x8c\x85\x5d\x50\x1c\xa0\x81\x54\x4d\x59\x42\xa6\x36\x38\x18\xa4\xe5\x92\xb4\xf0\xb6\xbe\xd5\x5b\xcd\x60\xb2\x7c\xa7\x58\x73\x29\x27\x5d\x4e\x11\xd2\x34\xb3\x99\x4c\xef\x8e\xfa\x51\x48\x72\x4a\xb3\x6b\x58\x56\x04\x41\xda\x92\xba\xcb\x82\x60\xfd\x5f\x69\x02\x6c\x84\xcb\x68\xd3\x46\x75\xab\xcf\xa0\x63\x79\x1b\x68\xbc\xbd\xbc\x66\x71\xdf\x66\x01\x42\xcc\xd7\x74\xa9\x72\x76\x0b\x78\x37\x8b\x35\x59\xb1\xa8\xd5\x37\xec\xc5\x68\x72\x55\x5b\xea\x22\xd6\xa4\x3f\x65\xa4\x8e\x9a\x86\x58\x6f\x27\x13\x0c\xd6\xb3\xf0\x4a\xa5\x42\xad\x83\xeb\xb6\x68\xf5\x6b\xb7\xb6\x66\xd7\xa8\x4b\x73\xbe\x8d\xaa\x1d\xe8\xf6\x6c\x91\x67\x78\x84\xb5\xfd\xda\x9d\x25\xf7\xee\xea\x17\x3f\xb5\x29\xda\xbd\xeb\x67\x14\x38\xab\xd4\xee\xdf\x33\xfb\x76\xaf\xc2\xb7\x99\x54\xf7\x70\x98\x76\x0f\x6d\x3d\x52\x8a\x17\xb5\x61\xc2\x12\xab\xff\x01\xbb\xec\xb0\x34\xb3\xb4\x8e\x0d\x76\x2b\x64\xbb\xa7\x29\xf7\x65\xf9\xcd\x1a\xc6\xb4\x02\x4c\x7d\x63\x20\xa2\x42\x8c\xf1\x92\x41\x3b\x95\xcc\x3e\x34\x20\xbc\xa8\xeb\xfe\xa5\xf6\xed\x5e\xc3\xf2\xc1\x65\x89\xb7\xea\xa0\xd1\x2f\xeb\xba\x15\xc2\xee\x34\x40\xb2\x06\xce\x68\x96\xaa\x5d\xb5\xdf\x29\xd6\xe4\x0e\xba\x10\x03\xdc\x17\x7f\xa6\x15\xeb\xb1\x6c\xc5\x98\xa0\x68\xdd\x60\x2c\xc7\x59\x08\xaf\x8b\xc3\xe0\x51\x77\xe2\x89\x35\xd7\xba\x25\x52\x68\x53\x03\x9e\xf2\x91\x96\x40\x34\xa8\x72\xb6\xb7\xeb\x22\x01\x0c\x4c\x82\x38\xe8\x2d\x6a\x74\x88\xe4\x6d\xd8\xa2\x31\xd1\xcb\x5b\x12\x62\xb8\x2d\x21\xcf\x55\x46\x13\x7b\x1e\x2f\xf3\xc9\x6e\xd0\x54\x4f\xc3\x1d\x29\x8f\x80\x7f\x87\xfb\xc2\x17\xa8\xea\x66\xa9\x68\x8a\xd9\x2b\x8f\x71\x4e\x50\x32\xd6\x7c\xf0\xef\xa5\x1c\x33\x91\xa6\xc2\xc7\xe5\x85\xdd\xc5\x99\xd8\x6c\xcd\xa2\xb1\x2e\x8c\x13\x0b\x87\xb6\xee\xfe\x82\x82\xaa\x8d\x5f\x88\x56\x0b\xc0\xbc\x84\xe5\xb2\x36\xc3\xa7\x23\x24\xef\x75\x50\xe1\xd3\x7f\xf9\xd1\xa4\xf4\xe9\x0e\x35\xa7\xe5\xb3\x25\x6f\x32\xac\xf2\x4b\xbb\xb3\xae\xb0\x13\xb3\xa1\xb3\xd7\xf9\x7f\xf5\xfe\xb6\xee\xc9\xdf\x39\x8e\x25\x30\x46\x25\x36\x3f\x32\x3d\xf1\x3f\x1f\xdd\x86\xff\xd9\x66\xd7\xb4\x8e\xc9\xfd\x4f\xf1\x7b\xf8\xf0\x01\x22\x0b\x66\xb0\x7f\x70\x5e\x55\x8b\xf5\xa2\xf5\x0d\xac\xcf\xae\x6a\x4a\x1b\x03\x96\xd2\xfa\x76\xed\xb4\x61\xc6\xdb\xfc\x99\x9a\xd7\x88\x88\xe2\x35\xc0\x6d\x96\x02\xe4\x73\x55\xbc\x58\xaf\x73\x1c\xf5\x86\x3a\x8c\x26\x10\x3a\xae\x00\x75\x68\xf6\x0e\xc7\x98\x2d\xd4\x9b\xca\xb0\x36\xd8\xef\xf0\x63\x5e\x86\x1f\x31\x8b\xee\x50\x19\x49\x2b\xe3\xe0\x43\xbe\x3b\x83\x6f\xcb\xf6\x77\xae\xaf\xb0\xef\x3e\x09\xb9\xdc\x92\x9c\xef\xea\x66\x3e\xbe\x6b\xf0\x69\x8f\xf2\x22\x6b\x12\xab\xee\x34\x63\x5e\xe2\x7c\xb8\xcb\xf3\x73\x6e\x93\x10\xa3\x0a\x2c\xdd\x86\xed\x8d\x10\x9c\xeb\x96\xd5\x1f\x87\xaf\x48\x15\xdb\x31\xa9\xfe\xb0\x8a\x7e\x68\x55\x3e\xa8\x5b\x93\x4a\x2b\x97\x2f\x25\x35\x4f\xf7\x8b\xfb\x45\x34\x1c\x99\x7b\x2b\x32\x38\x11\x6f\x4e\x95\xce\x43\xf0\xc7\x5d\x1a\xf0\x79\x6a\xa6\x7a\x9a\xc4\xed\xee\x61\xd8\x34\x83\x58\xe5\x58\xa9\x5e\x14\x81\x71\x6a\x4d\x2d\x60\x20\xc5\x6b\x49\x08\x17\xf6\xfa\x39\xcc\xaa\x0d\x4c\xac\x25\x37\x0e\x2d\x25\x21\xed\xfe\x25\xb9\x45\x78\xe9\x67\xc2\xbc\xef\xc7\x24\x1e\xcb\x1b\x48\x26\x17\x2f\xde\xd1\x2f\xf9\x11\xd2\x7f\xc3\x66\x08\x21\xb5\x90\xc6\x0c\xa2\x6a\x02\x9b\x96\xa7\x6a\x30\xd0\x45\x33\x98\xf1\x30\x3f\xdc\xa1\x77\x67\x89\x73\x9a\xf3\xca\x90\xf4\xde\x3d\xb0\x28\xeb\x25\x52\x6b\x38\x96\xd6\xf1\xbf\x3c\x6a\x5a\x66\x3a\xd0\x12\xe6\x75\x6a\xc1\x3a\xc3\x34\xe3\x85\xb1\xbb\x91\x02\x4f\x1b\xff\x1b\xb7\x4f\x92\x33\xba\x89\x44\x68\xeb\x5e\x61\x3a\x06\xa4\xea\x11\x86\xea\x6c\xbd\xd1\x47\x06\x5d\xc1\xb7\x54\x63\xd9\x4a\x02\xa0\x8e\x9f\xb3\x97\xca\x50\x8b\x16\x59\x08\xc0\x15\x6b\x16\x40\xd5\x30\x06\x78\x59\xc9\x88\x81\x02\x20\xc6\xa2\x5e\xcc\x70\x17\x97\x7c\xf4\xb9\xfa\x38\xb4\xc3\x8f\xa2\x94\x04\xf0\x7a\x71\x9d\x99\xda\xc1\x4a\xf5\xeb\xde\x14\x58\xd0\x49\x85\xed\x4c\x11\xec\x56\x14\xaf\x55\x80\x20\x51\xdb\xa7\xaa\xfe\xe2\x92\x67\x82\x74\x19\xfa\x7b\xe2\x99\xd5\x17\x25\x91\x05\x79\xd9\x6c\x22\xd2\xcf\x3c\xbd\x30\xf9\xbb\xc0\x71\xce\x0e\xaf\xbc\x7b\x9e\x8a\x5f\x59\x23\x40\x2d\x8f\xf6\x33\x42\xc2\x27\xdb\x8c\xda\x08\x85\xa2\xa3\x2d\xf3\x95\xd3\x98\xcd\xff\xa5\xcb\x20\x17\x5a\x39\x41\x49\x9a\xbe\x8b\x97\xd9\x01\xa6\x83\x3e\xcc\x5b\x6a\xa7\x18\x35\x59\xbd\xb1\x1d\x31\xc0\xb0\x85\x22\xee\x86\x4d\xf8\x6c\x6f\x8c\x60\xb7\x00\x53\xe8\xd5\x3c\x39\xcd\x8e\xa4\x0b\x1b\x22\x58\x07\xc0\xaa\x46\x72\xd6\x81\x24\x27\xd9\x90\xbc\x65\xf7\xa2\x14\x4d\x98\xd5\xcd\xe4\xf3\xcc\x9d\x65\xaf\x8d\x88\x79\x39\x77\xda\xea\xb2\x1e\x29\x90\x4b\xa5\xed\xa7\x11\xac\xcd\x73\xca\x98\xe6\x34\xe0\x65\xf9\x2d\xbf\x44\x11\xb2\xc6\x20\xbf\xba\x9b\x03\xb4\xfc\xa2\xb1\x9b\xd9\xbd\xb5\x14\xe7\x6d\x73\xcd\xba\xd9\xbc\xf1\xbc\x3b\x0a\x19\x25\xe8\x0b\x2f\x0b\xae\x3e\xdb\xcc\x23\xef\x59\x7b\xd0\xfc\x39\x1a\x99\x9a\xdb\x98\x58\xcb\x91\x21\x37\x9c\xbd\xd4\xe5\xab\x45\x95\x1b\x31\x49\x22\xdb\x09\x24\x78\xd8\xc7\x6b\x38\x34\xb1\x16\x9d\x6f\xc4\xc4\xbd\xe8\xa9\xb0\x1c\x30\xed\x10\x02\x65\x6a\xc5\xaa\x0f\x16\x5b\xb3\xab\x07\x96\x32\x5d\x9c\x8c\x86\xff\x11\x35\x0c\x03\xdb\x33\x04\xeb\xa1\x71\xc7\x24\x42\x46\x85\xd8\x26\x20\xe1\xc4\x85\x5e\xa4\xfc\x78\x35\x9e\x52\x59\xc0\x86\x14\xcc\xf5\x3e\x6e\xf5\x25\x1c\x33\xb6\x7a\x09\x8e\x90\x64\xc1\xb2\xdb\x57\xfd\x72\x6f\xa9\x7a\x3d\x9e\xad\x48\x4d\x63\xd8\xbc\x22\xb3\x10\xc3\x62\x03\x27\x11\xb9\xb0\x7d\xce\x05\xe6\x7e\x21\x30\x8e\x98\x71\xcd\x56\x66\x03\x99\x82\xa3\x21\x1a\xc8\xac\xe3\xc7\x75\x99\xde\x2f\x4b\xeb\x5e\xc7\x69\x12\xb6\x1a\x2e\xf5\x08\xba\x3e\xf5\xa3\x73\x5b\x12\x44\x2f\x7e\x13\x19\xda\x73\xff\x23\xd5\xbb\xfa\x32\xfc\x2b\x66\x46\xc9\x3a\xd7\x32\xa0\x11\x4f\x3c\x1e\x5a\xeb\x6c\x2b\xb2\xfa\xea\x36\x89\x5e\x75\x7b\xc8\x0c\x42\xac\xd9\xed\x8a\xbf\x79\xa4\x52\x97\x1a\xc8\xaa\xe4\x00\xb0\x9d\x92\x13\x93\xad\xeb\x7b\x3e\xfc\xa8\x48\xf6\xba\x27\x95\x42\x58\xb5\x4f\x9c\x8a\xe6\x40\xec\x33\x65\xbc\x22\x4d\x44\x99\xa9\x3a\x65\x10\x5c\x99\xd7\x46\x80\x97\x31\x6c\x10\x56\x3d\x76\xde\xe7\x57\xff\x99\x13\x2c\x9b\xa4\xd5\x4f\x45\x73\x44\xf2\x25\xf2\x45\x09\xcb\x6a\x40\x73\x5b\x9d\x28\xcc\x4a\xdf\xdc\xe1\xa5\xa5\x34\x5d\x72\x8c\xad\xbc\x36\x57\xe7\xe8\xbd\xb9\x1e\xda\xdb\xd9\x8c\xb8\xb9\x5b\x46\x10\xed\xf5\x74\xed\xe4\x19\x87\x4f\x82\x88\xac\x5b\xb0\xcc\x32\x5b\xb2\x45\x0c\xd1\x29\xff\x56\x1b\x79\x88\x71\x0d\x2f\x4d\x2c\xd1\x57\xfe\xc9\xb8\x8c\xf0\x36\xae\x7c\xd9\x5b\x7b\xd8\xb0\x32\xab\x31\xa2\x2e\x77\x24\x7d\x63\x4d\x3c\x43\xb5\x23\xc1\xf1\x73\x12\x2e\xea\x02\xa7\xf7\x69\xf6\xfc\xd0\x92\xb7\xb8\x59\x66\x5b\x6d\x8e\xf2\x9a\x2f\x66\x58\x6f\xf3\xf7\xcc\xdf\x9c\x3a\x67\x1d\x09\xab\x40\x2d\x68\x9d\x03\x92\x30\x41\x21\x0e\x43\x5b\x0f\x6d\x3a\x4a\xa0\x56\x3e\x5f\xb9\xb2\x97\xc5\x6f\x96\x86\xb6\x4d\x4d\xd8\x22\x5b\x42\x75\x33\x7d\x6c\x71\xd4\x5a\x8b\xd6\xb2\xbc\xb2\xeb\x69\x55\x36\xb7\x50\xa3\x9b\x35\x11\xad\x7b\x77\x31\x08\xbc\x2e\x62\xc5\xa3\xcf\x4a\x81\x63\x60\x5f\x3c\xa3\x6a\x7d\xbc\x74\xc7\xc1\x94\xcc\x41\x59\xe5\xab\xcd\x79\x2c\x31\x9a\x1f\x68\x4c\x07\xb6\xe4\xb4\xb8\x4e\xbd\x73\x60\xc7\xb2\xe6\xd9\x46\x98\x99\x36\xae\x05\xce\x72\x62\x6a\x31\x41\x4a\x59\x57\x13\x16\x2e\xf1\x58\x37\xe7\x71\x7e\xe1\xd0\x8c\xb0\x6d\x7a\xc2\x53\xc1\x1d\x53\xd5\x6f\x07\x66\xa3\x16\xec\xe6\xeb\xcc\x6f\xdd\xda\x67\xd6\xe7\x22\x51\x7b\xd2\x52\x75\xa7\x5a\x3c\x61\xba\xea\xd5\x5d\xb2\xf5\x8e\xa9\x07\x0f\x44\x64\x6b\x7c\x10\x71\xe4\xa3\x87\x24\x9a\x95\xe8\xab\xab\xd8\x10\x1c\xa7\x0c\x25\xd1\xfb\x94\x5c\x0b\xb2\x73\x0f\x0c\x45\x7a\xd3\x4a\x5b\xad\x68\xe3\xdd\xd7\xda\xd2\x55\xc9\x30\x70\xb5\x89\x63\xc7\x6a\x99\xda\xa9\x36\xe3\x90\x75\x41\xc5\xcb\x08\xb0\x8b\x76\xce\x30\xe9\xb2\xe4\xd4\xcf\x8f\xf9\xf3\x3c\xd1\x40\xf8\xd1\x0d\x0f\x3d\xcd\x40\x08\x7a\xb6\x09\x59\x5a\x4c\xcf\x74\x0b\xda\xcf\x93\x0e\xc0\xeb\xee\x6c\xa7\x66\x4a\x90\xad\x0d\xf5\x2e\x63\x35\xd9\x70\xaf\x26\x8d\xab\xb2\xe4\x2d\x3c\xa4\xde\x11\x6a\x9c\x61\x76\x18\x82\xb0\x9c\x22\x00\x5c\x65\x3f\x90\x41\x85\x82\x1d\x66\x76\x1e\xa2\x7a\x9a\x0b\x22\xc0\xa3\x87\x38\x77\x4a\x6e\x17\xa2\x7c\x4c\x6f\x4d\x00\xb1\xf7\x34\x6b\x54\xb3\xd9\x72\xd9\xb9\x07\x82\xf5\x65\xa8\xdb\x26\xd5\xcd\x82\x18\x24\x57\xef\x70\x84\x28\xe3\x93\x7b\x1a\x5a\x07\x47\x50\x83\x69\xa7\x25\x18\xf6\xe5\x45\x5c\x92\xf6\x9b\x9b\x2a\xd5\x1a\x08\x38\x5b\xa6\xef\x5c\xa3\x2c\xc3\xd8\xa1\x00\xff\x64\xd1\xa4\x58\xaa\xff\x7d\x0e\xab\x58\xc1\x15\x7b\xca\x16\x41\xd0\x0b\xe6\x75\xce\xb3\xc3\xe6\x1f\x3c\xbe\xf8\x1e\x81\x20\x64\x1c\x41\xbc\x14\x8d\x37\x04\xd4\x99\x6f\x7d\x85\xe2\x96\x21\x3b\xf6\x7a\xe2\x92\x21\x3c\xba\xf0\x27\xa7\x20\x2b\x1f\x8d\xb4\x21\x56\xb8\x64\xa8\x0c\x89\x10\x82\x3c\xff\xab\x83\x60\x1b\x42\x73\x34\xc6\x48\x87\xf0\xe1\xca\x8b\x9d\x3c\x17\x9a\x8c\xc8\xc7\x6c\xb7\x25\x5c\x2d\xb0\x3f\xc3\xee\x67\xd5\x30\x5b\x01\x40\x89\x20\x43\x8e\x20\xe1\x47\x40\x6b\x1a\xd7\xa4\x53\x43\x20\x5c\xf7\xa8\xc1\x3a\x58\x42\x49\xfd\xb2\x5b\xe4\xd5\xee\x18\xf2\x71\xe6\x1a\x9a\x65\xa3\x29\xd2\xa8\xa1\x35\x7c\xae\xc9\x2c\x22\x70\x40\x6f\x6e\xc4\xe8\x29\xe9\x71\xcb\x07\x6e\xdc\x44\xe4\x67\x67\x10\xfd\xc1\x21\xba\xc9\xab\x0c\xcd\x47\x32\x02\xcb\xee\x05\x7d\xc0\xa1\x5d\x1f\xac\x0b\xc3\x3e\x18\x86\xc5\xd9\x6d\x4e\xce\x79\x12\xa6\x0e\xc1\xd9\x1b\x39\xf7\x21\x5e\x12\xed\x9c\xfe\x2c\x16\xeb\x50\x24\x16\x76\xac\x02\x5d\x5c\x1b\xf3\x7a\x6e\x43\x2d\x40\x36\x95\x92\x5c\xe6\x0b\x88\x6d\x6c\xea\x25\xd3\x5f\xa5\xe8\xa2\xd5\xea\x51\xe5\xde\x19\xb0\xf7\xf6\xb9\x50\x21\xc4\x00\x38\x06\xcf\x36\x62\x0c\x16\x9d\x18\x73\x37\xdb\xb1\xfb\x25\x60\x97\xeb\x7e\x54\x86\x3e\xed\x66\x2b\xe9\xd5\x47\xc5\x9c\xd2\x29\xf9\x9f\xe9\xb8\xd8\xb5\x13\x22\xb8\x64\x6a\x1e\x14\xb9\xea\xb3\x18\xd4\x4c\x15\x79\xba\x2e\x35\xdf\x92\xa8\x34\x51\x5d\x42\x05\xd9\xaf\x5b\x75\xdb\xf3\x41\xbb\x7c\xaa\x5e\x62\xce\x3e\x63\xb2\x64\xdf\x69\x18\x72\x99\x57\xb8\xb8\xc6\x65\xa1\x77\xb7\x7d\x09\x82\xb8\x76\x49\x9e\x31\x33\x72\xec\xc1\x8a\xc7\xa0\x5e\x48\x50\xb6\x89\x45\xd6\xc1\x6d\x7e\xb9\x14\xda\xa9\xdf\x7d\xb9\xf4\x55\x47\xe9\x1c\xe4\x97\xab\x87\x0b\xb2\x52\x93\x5f\xae\xf9\x97\x8b\x51\xf0\x97\xef\x93\x49\x71\xcf\x2f\x6f\xfe\x46\x1b\x3c\xe4\x57\xcc\xdb\x17\xa4\x40\xd4\xfc\xca\x6d\x13\x75\x38\x4a\xe4\xe6\x17\xd1\x1f\xfd\x56\x7e\xb6\xdc\x39\x48\xa3\x85\xc4\x15\x32\x6f\xee\x92\xbe\x33\xdb\xd9\x0c\xb8\xa4\x06\x62\x58\x45\x25\x2a\x47\xb2\xf2\xe6\x53\xcb\xb5\x9d\xa1\x28\x1b\x18\xb3\x66\xb9\x07\x13\x7e\x2d\x4d\xe6\x6d\x18\xc2\x73\x0f\x9b\x3a\xd6\x1a\xd0\x71\xe6\xed\x1c\x75\x3b\x81\xd4\x24\xdc\xe2\x84\xea\xb4\x14\xed\xf5\xf4\x41\xde\xa2\xaf\xc7\xa3\x68\x9a\x06\x0d\x6d\xf6\x75\xd3\x30\xf0\xe9\x00\xb9\xdf\xf5\xc9\xd5\xf6\x72\x60\x20\xe3\x62\x8e\x26\x49\xbe\xfc\xfe\x08\x9a\xc7\x03\xb2\xdc\xd1\x51\x0f\x41\xba\xd9\x1b\xb3\x72\x6e\xf9\x2a\x3e\xb5\x4f\xde\xc3\x4a\x6b\xbe\xf8\xd4\x45\xd6\x63\x04\xfa\x0e\xaa\x05\x16\xa7\xe9\x0d\x69\x33\x93\xcb\xc4\x69\x72\x5d\xa5\xfa\x97\x5b\x48\x53\xc3\xc2\xff\x6a\x07\xbb\xb9\x33\x63\x72\x6a\x23\xae\x11\x48\x9d\x17\xd7\x8d\x63\x50\x31\x59\xb0\x5a\xb2\x41\xf4\xb4\xed\xfe\x4e\xce\x93\x89\xcc\x2a\x10\xf5\xdd\x53\x34\xf9\x7b\xde\x9d\x97\xcf\xf7\xbc\x4f\x28\x07\xc0\x27\xb6\x37\xb6\xce\x9d\xb7\x71\xc9\x49\xc0\xbc\xd9\x69\x0e\x40\x1b\xf8\x65\xd9\x21\xe7\x2a\xa8\xdb\xe5\x2b\x66\xaf\x76\x2f\x77\x17\x39\x3a\x7b\x38\xc4\xb9\xcd\x81\xf2\x1e\x9a\xab\x97\xd3\xca\xbd\x87\xd6\x64\x5e\x2f\x54\x8e\x48\x28\xe7\x51\x92\xe0\x5c\xb9\x05\xd9\x2b\xcb\xb5\xae\x19\x9b\x1f\x1c\xe2\x7d\xd9\xb1\xc8\x73\x53\x24\xdb\xa6\x2b\x08\x6f\xa0\xbe\xc3\x6a\x14\x2e\x3b\xca\x5f\xb3\xbf\x24\xce\xfe\x2a\x81\xab\xa5\xbf\x4a\xcc\x8f\x5f\x71\x9d\x58\xa3\xe2\xd3\x9b\xc2\x37\x69\x74\xf5\x98\xf4\xef\x70\x51\x8a\xb8\x2d\x65\x7c\x10\x1e\x78\x4c\x2e\x45\xce\xff\x40\x28\xb4\xc4\xc5\xb6\x31\x3f\xd9\x0c\xfd\x0f\xcb\x4e\x26\xd4\x59\x8b\x04\x91\x37\xcd\x73\xf9\xe3\xef\xb9\xed\x49\xd8\xf3\xb3\x5e\x1c\xa5\xb7\x6b\x9b\x7c\xf8\x0d\xc5\x2b\xea\xf1\x5b\x6e\x6c\x32\xb2\x74\x9e\x13\x50\x82\x66\xd9\x26\x9f\x90\x16\x29\xed\x02\xee\xfb\xb0\xd5\x5c\x7d\x38\xd8\x6a\x1e\x89\xbd\x1d\x5c\x87\x55\x80\x3f\x64\xe1\xbe\x64\x9c\xbb\xc8\x42\x15\x6c\x45\xf3\xe0\xb9\xb8\x06\xe8\x88\xb9\x4b\x69\x64\xa8\xed\xfa\x94\x1a\x53\xa7\xd8\x5a\x83\x1a\x5c\xd6\x9e\xf1\x41\xd4\x62\x65\x85\x43\x84\xd6\x14\x58\x4e\x7b\xe6\x33\xbc\x96\x4d\x67\xa1\xcb\x2b\x49\xf6\x70\x5d\xe1\x98\x49\x1b\xa0\xda\x94\x63\xff\xb1\x69\xb7\xb0\xd0\x16\xeb\x66\xf8\xfb\xaf\x21\x7b\x4f\xfd\x89\xf6\xc1\x34\x8c\xfc\xf8\x56\x67\x6d\xe8\xc6\x6f\xdf\x6c\x6c\x31\xb7\xe0\x88\xfd\x37\x17\xe7\x80\x2d\xca\x73\x61\x3f\x47\xf7\xe2\xae\x5c\xf6\x96\xb3\x5e\xbe\x53\xc4\x2e\xa0\xf1\x55\xfa\x21\xd5\xfe\x5a\x33\xe4\xb9\x59\x83\x36\xa5\xbb\x01\x8b\x27\xa8\xaa\x9b\x58\xff\xc1\x23\x8b\x88\x19\xc0\xe1\x95\x5c\xae\xd6\xc0\x4b\x71\x19\x27\x1e\x10\x2e\xd9\x66\x92\x3e\xd9\x58\x5f\xd8\xc3\x58\x8e\x45\x10\xca\xda\xb5\x5e\x76\x16\x98\xa0\x48\x35\xe7\xfe\x86\xa7\x3c\x04\xa5\x88\xd2\x40\x54\x32\x18\x3b\x58\x96\x8e\x93\xe9\x77\x75\x83\x4b\xd0\x87\xb1\x75\xaa\xb2\xb1\x25\x1e\xa6\x0c\x09\x1f\xf3\x1d\x71\x79\x37\x73\x86\x30\xa7\xe6\x55\xd8\xcf\x67\x13\x39\xfe\x35\x2f\x3b\x48\x86\xe5\xd3\x0b\xe5\x0f\xcc\x3e\x48\x37\x98\x08\xe0\x7b\xdc\x64\x24\x7f\xe4\x3e\xfb\x56\xd3\xe9\x00\x5d\x84\x41\xbf\x92\x47\xb2\x49\xa5\x30\x54\xa1\x34\x92\x0c\x25\xc5\xa2\x70\xf9\x24\x33\x49\xcc\xe2\x0e\xf5\x81\xe0\x74\xc4\xec\x9e\x6f\xcc\x41\xf2\x7b\xc8\x1c\x9a\x55\x81\xe1\xc2\xf4\xa5\x69\x4a\x63\x92\x93\x14\xa0\xe2\xac\x5d\x87\xa6\x24\x85\xe9\x89\x06\xc4\x19\x97\x33\x88\xa5\xe7\xc8\x95\xd3\xb7\x60\x41\xd6\x7d\x80\xbc\x48\x1e\xad\xb9\x04\x0b\x83\xc9\x8c\x13\x6c\x51\x02\xd1\x38\xd9\x71\xee\x5c\x64\x2a\x98\x65\x3b\x44\xf0\x22\x0a\x60\xd2\xb8\x92\xbe\xbe\x92\xa0\xae\x52\x03\x88\xb6\xe9\xc3\xb2\xa3\x92\xed\xfe\xc1\x27\x4b\xcc\x3e\x5e\x7d\xbc\xb1\xd3\x62\x8c\x17\x6b\x32\xd9\x64\x42\x1d\x06\x50\x97\xfd\xb7\x2c\x9b\x06\x5a\xbc\x98\x4a\xa5\x2c\x63\x9d\x1e\x14\xcd\x08\xdb\x06\xc9\xcb\xee\x47\xae\xde\x0a\xb9\x40\xb1\xed\x5f\x3e\x32\xf8\x77\x9c\x58\xfd\x3e\x27\x2e\xb6\x0d\x42\x68\x1c\x3c\x08\xf8\xd8\xd4\xc8\x58\x72\x97\x11\x78\xf5\x2d\x1c\x69\xf1\x6a\xdd\xc4\xc8\xb2\x04\x3c\xe9\x1c\xdd\xd4\x8f\x41\xc1\xbf\xbb\x1d\x8b\x81\x46\x26\xc8\x06\x51\x5e\xb6\x3b\x74\x3b\x3a\x7f\x6c\x32\x64\x6c\x28\x70\x77\xf0\xb1\xb7\x90\xd7\x2d\x85\xdc\xfc\x56\x3d\xb7\xb4\xd0\x43\x31\xcd\xb5\x85\x6d\xbc\xa0\x81\xa7\x35\xed\x4c\xec\x53\x1f\x7a\x5a\x6b\xc6\x82\x3d\x40\xb6\x25\x81\xc6\xd7\xc7\x04\x88\x2f\x65\xf6\x29\xc0\x5a\x24\x5b\xb1\x4e\x81\xd7\x37\xb2\xdd\x20\xab\xb8\xe8\xac\xf5\xc8\x74\x9a\x28\xe4\xe2\x8e\xc5\x82\x89\xf4\x13\xac\xb4\xaa\xe6\x36\x5e\x1f\x73\x00\x2c\xb8\xcb\x78\x9e\xf9\xfb\x5d\xa5\x4d\x68\x03\x0a\x20\x9a\xbd\xc2\x4c\x9c\xa1\x2d\x81\x67\xdc\xec\x4b\x3b\xb7\x0a\x1c\xe2\x6e\x52\x90\x80\x69\xec\xba\x30\x19\x86\x53\xb7\xf4\x7e\x33\xfa\x91\x87\x15\x9c\x2e\x83\x18\x28\x6b\xe1\x42\xde\xd7\x1e\xb9\xcf\xd4\xeb\x73\x4f\x57\xb0\x26\x65\xf7\x36\xab\xed\x7e\x8a\x5f\x63\x26\x81\xf0\x7a\x31\x20\x77\xaf\x42\xb7\x09\xd7\x35\x0a\xbe\x66\x95\x25\x54\x59\xb9\xa4\x14\x95\x6e\x1b\x10\xb8\x6b\x11\xc3\xb8\x0c\xf3\xd2\x6d\xee\xd6\x1e\x2e\x4b\xd1\x99\x0a\x90\xc4\xd0\x8a\x52\x5f\x3f\x32\x77\xc3\x73\x9f\x32\xf7\x88\x24\x2f\x53\x01\x86\xfd\x83\xe8\x47\xb5\x90\x4c\x31\xe0\xc0\x51\x54\x24\x4c\xd2\x3f\xde\x19\x51\x01\x64\x15\x52\xbc\x7d\x54\xcc\x82\x11\x92\x10\x95\xd2\x53\x59\xde\xb6\xfa\x2c\x12\x7b\x0c\xaa\xf9\x6f\x9e\x68\x9d\x9d\x81\xa7\x89\xc7\xfa\x0e\x1b\xd3\x9a\xdc\x20\x2b\xbe\x15\xef\x06\x6c\xaa\xfc\xb9\x4c\x4f\xf4\x90\xa9\x79\xaf\x63\xb7\x2c\xb4\x0d\xea\x8c\x33\x19\xd3\xb8\x85\x05\xca\x87\xc6\x4b\xb7\xe0\x0d\x4b\x1d\x1c\x48\xf8\xc1\xc2\x3e\xa5\xe1\xd6\xc5\x78\x06\xd2\x90\x8d\x14\x70\x04\x9e\xad\xe8\x8e\x60\x96\x8b\x89\x1a\x78\xa6\xfc\x86\x95\x6e\xc9\xbe\x5d\xbe\x7d\xd5\xf5\x17\x82\xda\x56\xdd\xc1\xa2\x64\xc7\x4c\x05\xa9\xed\xa0\x47\x26\xf3\xb2\x14\x2f\x58\xeb\x8c\xdd\xff\xca\x1f\xeb\xf2\xc2\x38\x15\x78\x55\x3e\x7f\x73\xcf\xf5\x6d\x13\x25\xb9\xdb\xcf\x00\x6d\x90\x26\xed\x98\xc1\x18\x3b\x6f\x75\x8c\x90\x20\x78\xb0\x0e\xed\xc4\x87\x9c\x84\xd6\x1b\xde\x04\xec\xde\x8e\xde\x7e\xaf\xbc\x67\xd2\x5c\x44\x61\x6d\x58\x84\x84\xcf\xcd\x5d\x97\xa7\x3e\x90\x80\x49\x6c\x6f\xbe\x2c\x67\x0e\x9a\xa7\xcf\xe7\x9d\x8f\x2e\x13\xcb\xf2\x98\x4b\xb8\x42\xe7\xe5\x3f\x36\x98\xd2\x74\x98\xbf\x45\x33\x1c\x22\xca\x46\xcb\x45\x38\x36\x88\xd1\x1f\x59\x05\xcf\x8a\xd1\x2d\x57\x97\x99\xf2\xa2\x29\x52\xc4\x0c\x64\xd0\xb0\xf0\xc7\xd8\x2b\xec\xfe\x47\x8e\x90\x8b\x91\xa8\xc4\x60\x96\x3e\x34\xf6\xff\xaf\xd9\xf4\x38\xb9\x65\x7c\xa6\x46\x75\x3b\xff\x71\xda\x97\xa4\x52\xba\x78\xb2\x79\xb9\x96\x2d\x7c\x4d\xc2\x74\x70\xbb\xb1\xb2\xc5\xaa\xc8\xbb\x10\x36\x45\x0c\x7f\x18\x7c\xe4\x1c\x99\x06\xdc\x18\x63\x86\xd7\x6b\x9e\x2c\xb2\x8c\xfe\x31\x98\x5e\x14\x96\x14\xba\xe4\x52\x59\xaf\xea\xb0\xd1\xdf\xe1\x16\x5f\xea\x76\xba\x85\xad\x4b\xc8\xff\x63\x34\x3f\xb4\x5c\x1b\x34\x83\x35\x6d\xf5\xf2\xe0\xca\xa6\xeb\xd6\x68\x7c\x3d\x43\x34\xd7\xa2\x17\x3b\xcf\xa5\xd7\x7d\xff\x31\x30\x3b\xba\x96\x6c\xd4\x04\x27\x31\xf7\xc9\xdb\xd1\x0e\x33\xb9\x33\x8f\xff\xd9\x60\x51\x64\xf1\x8f\xc1\xf4\x26\xfc\x93\x51\xf3\x4a\x21\xe8\xe6\xd2\x6e\x59\xbb\xb9\xb2\x44\xcc\x44\x18\x2a\x5b\x6f\xeb\xb1\x99\xea\x1c\x64\x86\x65\x60\x6e\x31\xc4\xc0\xaf\x45\x72\x3b\x45\x33\x1c\x33\x5b\xeb\x65\x9a\x3d\xae\x63\x98\xdb\x65\x19\x57\x0d\x4c\xb0\x92\x18\x5c\x34\xcd\x1d\x75\xf1\x43\xd6\x63\x67\x14\x72\x5a\x96\x88\xd4\xe8\x88\x34\x29\x5f\xbd\xd6\xc5\xd5\xc5\x61\x95\x8b\x55\x42\x69\x90\xb6\x7f\x78\xa3\x26\x96\x3f\x5b\x1e\xb5\xaf\x8e\xec\x12\x93\xd0\xe5\xca\x12\x9b\x8c\xd7\x4c\x3c\xc2\xd3\xee\x88\x1d\xbb\x65\xfb\x62\xb0\xc4\x74\x5d\xea\x64\x83\x79\xed\x46\xf8\x22\x29\xe9\xd3\xe4\x7f\xac\xac\xbe\xdc\x33\x74\xf3\xb2\x09\xe8\x7a\x95\x84\x0d\xe6\x6d\x12\xe1\xcb\x85\x12\x36\x89\x36\xfe\x63\x7e\xbd\xea\xc3\xc3\x1f\xe1\xf9\xd3\xfe\x87\x00\x25\x31\xea\xe7\x68\xc1\x2d\xb5\xd3\x17\xe8\x30\x9c\xae\x78\x35\x53\xd6\x74\xd8\xa8\x3e\x2d\x14\x1f\x65\xe8\xcf\x66\x7d\xad\x16\xbe\x3f\xd7\x3f\x15\xc3\xdf\x9f\xcd\xa2\xf1\x69\xe3\xe3\xe2\x06\x8c\xde\x2e\xc8\x96\xb6\xd0\x6b\x7e\xf1\xed\xaf\x90\x66\x7a\xbe\xa1\x36\xcf\xba\x93\x77\x98\x11\x3f\x5c\x5b\xca\x0d\x5f\x15\x8b\x2b\xb3\x40\x09\x5b\xdf\x76\xef\x8d\x3d\x4b\xa9\x3e\xfd\x6c\x4c\x4e\x5f\x2f\x57\xce\xaa\x63\x47\x35\xcc\xff\x90\xc5\xc1\x8f\x2a\xf5\x65\x6e\xd7\x0d\x3e\xe8\x7c\xcf\x67\x46\x26\x5e\xdb\xd3\xf3\x29\xbe\xda\x88\x14\x46\x3c\xf8\x99\xee\xc3\x85\x83\xa1\x93\xaf\x37\x0b\xc4\xa4\x39\x4b\xcb\x90\x58\x81\xdf\x5a\x7a\xd8\x8c\x87\x20\xcc\xf9\x6c\xca\xa7\x9d\xc5\x6c\x0d\x62\x48\x72\xe2\x82\x59\xcb\x1f\xad\xb7\x1e\xd8\x17\xc2\x47\x8f\x77\xe3\x7d\xc9\x2e\x39\x24\xa3\x58\x4f\xe6\x2b\x9f\x87\xf3\xd9\x44\x8f\xe2\x0b\x4b\xc7\x58\x43\x35\xcf\xe1\x33\xcd\x2f\x6b\xfd\x2e\xd7\xb6\xb1\xb4\x25\x76\x20\xde\x18\x1f\x44\x60\x6a\x4b\x8d\xe6\xf5\x5c\x6f\x14\x4a\x39\xb6\xb6\x17\x17\x1f\x48\x9b\xc5\x52\x57\x0a\x8d\xb4\x6e\x24\xad\x15\x54\xe9\xf4\x2a\xa7\xbc\x89\x00\xdf\x69\x20\x82\x6c\xc5\xa0\x2e\xb6\xeb\x67\xde\xf0\x19\x77\x8b\x38\x35\x8d\x51\xcf\x56\x4f\x23\x1c\xe6\xb3\xc2\x3f\x4f\xb5\x83\xce\x83\xed\x42\x3f\x4a\x45\xca\xb3\xcf\x52\x09\xb0\x20\xf9\xdf\xa1\xe6\x3c\xa1\xcd\x54\xcf\x5b\x0b\x0b\x1f\x76\x2b\xcd\x2a\xcf\x7c\xcd\x46\x3e\xcf\x2c\x29\xee\xb0\x0a\x53\x5c\x59\xcc\x2b\x8d\x4d\x3f\xe8\x33\x43\x4e\xbc\x85\x95\xdb\xaa\x21\x73\x53\x24\x2f\x74\xaa\x84\x55\x03\xd5\x61\xca\x5c\x55\x02\x0a\xfb\x50\x2b\xf7\xbf\x66\xd3\x9f\x4f\x35\x70\x6c\x16\x66\xca\x15\x96\x7c\x25\x78\x19\x4d\xcd\x83\xd5\x42\xd7\xd6\x7e\x39\x54\x2d\xbc\x2c\xd9\xfc\x21\xd3\x94\x4d\xec\x9a\x95\x50\x3d\xbe\xa3\xf4\x5a\x07\x03\x9f\xfb\x45\xab\xd1\xda\x8d\x2d\xeb\xa4\x9f\x7c\xb5\x61\x2b\x41\x66\xc0\x8b\x38\x4c\x3f\x0f\x53\xb3\xd9\x53\xd7\x7c\x59\x96\xff\x84\x2f\xe7\x98\x17\x13\x6b\x64\xea\xd2\xac\x2c\x87\x9b\x85\xcf\x15\x40\x31\x68\x61\x69\x39\x95\xce\x38\x2e\xe7\x95\x85\xe7\xeb\x95\x55\xf5\x06\x1b\xd9\x4a\x9e\xd0\xc7\x5e\x35\xb7\x55\x0b\x18\x4e\x30\x53\xc3\x36\xc3\xd3\x5c\x0f\x6b\xdf\xd0\x36\x37\x33\x91\x57\x03\xab\x65\xd2\xba\x3a\x28\x06\x73\x55\x90\x0d\xfc\x47\x48\x9a\xee\xc0\x4f\xff\x7d\xbd\x83\xa5\x3e\xce\xd4\x4f\x16\x54\x33\xe0\x42\xa7\x5f\x5f\x3e\xfa\x59\x63\xf5\x18\xef\x42\xd6\x4c\x62\xa5\x6a\xd3\xc2\xd4\x0a\x22\x3c\xe8\x42\x28\xf3\xbf\xc3\x2d\x03\x5a\x1a\xfb\xd1\x94\x6e\xf1\x8f\x4c\x8e\xeb\xc3\x24\x1c\x6b\xbe\xcc\xc3\xb8\x4c\xc7\xab\xcf\x98\x0d\xd5\xe9\xca\x74\x3d\xaa\x2a\x26\x53\x12\x15\x0c\xba\xef\xf5\xa3\x53\xd7\xd3\x91\x4a\x3e\x5a\x8a\x7b\x1d\x50\xdd\x7e\xe6\xe0\x1d\x54\x1f\xfe\xa4\x33\x8c\x37\xae\x4a\x2b\xfb\xf5\x6e\xe9\x41\x7e\x73\x3e\x62\xf6\xf6\x89\x75\xa9\xa9\x7d\xb6\x3c\x21\x4a\xa3\x16\x7a\x77\xbc\xda\x22\x50\x32\x24\x4b\x4c\x33\x0e\x1b\x11\x82\x98\xf5\x7e\xb2\x74\x2f\x62\xb8\x59\x2f\x58\xd5\x97\x4d\x8c\x8f\x3e\x7c\xfc\x09\x15\x56\xd7\xac\x98\x24\x6b\x76\x57\xaa\x8e\x6c\x5a\xf5\x0f\xb5\xf7\xcb\xa7\xf3\x7a\x51\x1e\x06\x87\x8b\xb7\x4b\x93\xaa\xbe\x35\x65\x13\xdb\xec\x0e\x2d\xca\x3a\x3c\xf8\x6c\x62\x88\xd9\x88\x65\x92\xf9\x2e\xf7\x5c\x05\x4f\x09\x85\xa0\xab\x70\xbe\x7f\x0c\xcc\xf9\x3f\x2a\x55\xff\xd7\x6c\xda\xfc\xd8\x5b\x82\x51\xf3\x3f\xc3\xde\x5b\x15\x63\x72\xcd\xbc\xc3\xfa\xa5\x2b\x7e\x2c\x26\x13\xe5\x2b\x5c\x4b\x22\xa9\x62\xc1\x26\x12\xf4\x67\xcc\xeb\x3f\x51\xc7\xa8\x13\x79\xd1\xa1\xb4\xde\x82\xdb\xfd\xa2\xe8\x84\x08\xcb\xcc\x17\x9b\xca\xf6\x95\xe5\x7f\xa8\xb8\x7c\x8e\x20\x1e\x3e\x87\x5a\x79\xe2\xcc\xbc\x0f\xaa\x36\x17\x15\xab\x54\x6d\x79\x70\xd4\x39\xca\xe3\xe5\xeb\xe0\x79\xfe\x14\x0e\x88\x26\xfe\x4f\x19\xdb\x97\xc3\x3f\x4e\xbc\x8f\x7d\x0f\x49\xb6\xa0\xc7\x8e\x03\xb7\x03\x5a\x2a\x86\x67\x69\xb1\x53\x9c\xe0\x78\xbf\x71\xd6\x12\x4f\x1a\xba\x8d\xf7\x9b\x2c\x8a\x92\xb4\x71\xc0\xd9\x11\xb4\xc9\x33\x08\xc7\x87\xa9\xbc\x1e\x81\x3c\x09\x8d\xaa\xe4\x08\x8d\xf5\xea\x8c\x2f\x84\x8a\x4f\x48\x8c\x18\xfd\xc3\x8b\x96\x53\x7e\x21\x23\x6a\x0d\x81\xf0\x85\xc8\x3a\xbb\xf0\x44\x88\xa2\x5c\xa9\x03\x50\x1f\xca\x04\x1c\xcf\x58\xe0\x1f\xf5\x02\x88\x22\xa1\xcc\xdf\xb8\xf5\x0a\x3b\xa0\x6e\x98\x33\xf9\x5d\x88\xa6\xae\xe1\xc8\xce\xe5\x4e\xe1\x30\xb5\x6a\x84\x38\x90\x49\xa5\x89\x11\x7a\xf0\xe8\x6a\x19\x72\x67\x91\x38\x7a\x57\x8a\x01\x37\x28\x23\xc9\xac\x6b\x88\xde\xa9\x91\xc4\x4b\xf5\xd0\x34\xf1\x0f\x3d\x59\x32\x12\x7d\x02\xc3\xc2\x29\xf5\x11\x88\x13\xa3\x84\x22\x82\xa7\x46\x29\x7c\x42\x7d\x98\x38\xfa\x51\x5f\x31\xa4\x9d\x00\xb5\x89\xe2\x75\xe5\xbf\x17\xfa\xee\x51\xfd\xe9\x45\x20\xd1\xa8\x08\x0d\x5f\x27\x19\xf5\xb0\x65\xce\x51\x55\xa3\xd1\xd0\xd1\xcb\xd0\x49\x84\x00\xb6\x16\xba\x2a\x41\x1d\xb5\x44\x0e\x4d\x2d\x59\x0e\x26\x30\x94\x80\xdb\x05\xb2\x51\x0b\x2b\xb0\x1d\x75\xbe\xd4\xfd\xbd\x51\x1b\x27\x11\x3d\x39\x58\x6d\x68\x50\x1a\x6b\x75\x1b\xb5\x51\x9a\x58\x5e\xd6\xc1\x15\x54\x94\xdf\x0c\x51\x94\x35\x54\x4f\x16\x01\x14\x4f\xa8\xcb\x1a\x8d\x52\x35\x05\x1e\xed\x0f\x39\x13\x3d\x9a\x01\xd5\xbe\xcd\xa8\x0a\x60\x9f\xbb\xcc\x8b\x46\xa7\xb9\xa0\x42\xc9\xb9\x5e\xbd\x6a\x21\x27\xac\xd5\x17\x30\xa8\x31\x02\xda\xeb\xb2\xa0\xf6\x88\x2a\x8f\x67\x4b\x72\xdb\xe8\xd9\x92\x8e\x2b\x4d\xb3\xca\xe3\x97\x86\x85\xc8\x72\x6f\xf6\x11\x0f\x44\x5c\xe6\x73\x5c\x5c\x30\x9e\x83\xbd\xd9\x0d\xf2\x07\x61\xf9\x0b\x55\x51\x2f\xf0\x3d\xda\xfd\xb0\x30\xe6\x27\xd7\xca\x37\x2b\x18\xf1\x9b\x5a\xcf\x3c\x0d\xb3\x98\xb2\x94\x35\x09\x82\x89\x23\x65\xc4\x65\x83\x31\xa7\xef\x53\x7d\xca\xaa\x2e\xc5\x08\x87\x4b\xa4\x97\x3e\x15\xaa\x7a\xb5\x71\x7f\x2a\x4b\x35\xb3\x81\xb4\xce\x04\x9e\xba\x2c\x34\x3e\x7c\xb6\xd4\x5e\xac\x6b\x6e\x4f\x5d\x74\x09\x3f\x95\xba\xe1\xa8\x50\x62\x0d\x24\xa1\x58\xd2\xb9\xe6\x18\x0e\x59\x0f\x7c\x16\xcd\xef\x84\x1f\xfd\xd6\xe5\x8e\xe4\x27\xd1\x5b\xee\xcf\x1c\x49\x3f\xd5\x14\x3c\x3f\x35\xb7\x11\xdf\x43\x89\xdc\x13\x02\xfe\xd1\xc0\x88\xde\xf9\xa7\x0e\x1c\xa1\x7d\xba\x8e\x0e\xfe\x0e\xb7\x57\x97\x0e\xca\x53\xc1\xd4\x6e\x2a\x44\x12\x83\xc8\x45\x76\x60\x75\x17\xf4\xe6\x32\xb3\x77\x10\x3f\x82\x2e\x64\x08\x13\x71\x00\xcc\x54\xab\x23\x33\xb9\xa7\x22\xc4\xbe\x90\x79\x70\xdd\x98\x8d\xcb\x21\x29\x99\x14\xbf\xab\xb5\x51\xa2\xff\x31\xc8\xba\xc1\x56\x16\x72\xfa\xe0\xd4\x72\xfd\x1d\xee\x80\x3a\x26\x01\xad\x33\x7a\xe8\x11\xa2\xc6\x38\x70\xa8\xbe\xc4\xe6\x97\x5a\xfc\x82\xbd\x18\xa4\x62\x0a\x16\x69\x43\xc2\x38\x2d\xa3\xca\x0f\x90\x33\x92\x68\x99\x08\x5f\x54\x97\xa0\x50\x92\xe3\x81\x39\x8a\xfa\x96\xfa\xe2\x2c\xf5\x71\x2d\x8a\xa1\xff\x0e\xf7\x77\x38\x08\xd3\x02\xc1\xc6\x64\x52\x97\x1c\xb7\x5a\x7d\x6c\xf9\x12\x6c\xde\xd6\xfa\x18\xec\x2e\xf1\x13\x62\x87\x04\xc5\x47\xd1\x35\x35\xfd\xc1\x84\x73\xbb\x76\xce\x80\xda\x7f\xf5\x44\x9b\x30\xb1\x80\xe5\x30\x4e\x03\x5e\x19\x83\x73\x6a\xc2\x72\x90\xd2\xd5\xfb\xc8\x75\xf7\x1b\xcb\x53\xef\x48\x84\xdb\xfc\xc2\x15\xc8\xbf\xc3\xe3\x98\x3c\x03\x09\x84\x77\x8d\xb3\x01\x00\xf9\xe0\x5d\x83\x65\xd1\xf0\xc4\x48\x2c\x01\xb1\x2d\x6f\x5e\xf8\x84\x18\x7a\xd1\x16\xf5\x77\x78\xed\x99\x19\xaa\x37\x95\x37\x6c\x80\xa8\xae\x13\xe0\x36\x1a\x2a\x15\xf4\x34\x92\x12\xea\x07\x14\xab\x17\x2a\xde\xf4\xef\x08\x2f\x3e\xea\xf9\x77\x84\xed\x8b\xff\x5b\x88\x12\xd1\x20\x0d\x3a\x21\xf9\xe7\x1e\xf1\xef\xa0\xce\xb9\x23\xcd\x42\x94\xa7\xa4\x6d\x90\x84\x0d\x69\x1b\xbc\xd1\x4b\x78\xf7\x9b\xd5\x4f\xb0\x25\x85\x21\x26\x59\xde\x64\x5c\x17\x25\xf4\x77\xf8\xf7\x02\x73\x0c\xea\x2f\x25\x87\x79\xf5\x77\xf8\x59\x5f\x41\xad\xc2\x86\xd4\x82\x04\x8d\x0b\x14\x64\xdd\x37\x59\x1d\x00\xe5\xb8\xa4\xbe\xd4\xcd\x50\x0a\xe7\x2e\x4d\xc1\x38\x21\x83\xa6\xc7\x4f\x16\x17\xbf\xbf\xfa\x0a\x4a\x44\xc9\xb7\xbc\xc7\xf0\x92\x9c\x31\xcc\x6f\xd2\xee\x2e\x7a\xaa\x7f\xb9\xb3\xec\xf7\xea\x5e\x2f\x11\x40\x28\x10\xa9\xbb\xe0\xf9\x46\x5e\xc8\xff\xfe\xa7\xba\x0d\xf2\x41\xf0\x84\xe9\xe6\xa1\x5b\x8f\xc1\x68\x7f\xb0\xf7\x85\xde\x55\x51\x62\x84\x2e\xc5\x84\x65\x57\xb7\x51\xa9\xc4\xa3\xf5\x3f\x72\x9a\xab\xba\xed\x4b\xd4\xb5\x31\x7c\xf0\x8c\xa0\x84\xf7\x3d\xe2\xeb\x3b\x57\x60\x80\xc8\x8f\xd4\xf9\x29\x0b\x17\x82\x6f\xb1\xd4\x11\xb4\x5d\xe2\x26\xa2\xd2\x00\x58\x05\x20\xee\xd2\xcb\xfc\x14\xd8\xa6\x9f\x1f\x4c\x5c\xcf\xee\x10\x8c\xbb\x0c\x86\xd2\xa3\xad\x44\xad\x85\x26\x1a\xe7\xc1\x3e\xfc\x8b\x03\x45\x5e\xf0\xd4\x86\x0f\x03\xe9\x9f\x81\x8b\xfb\x3b\x24\x84\xb2\xce\x02\x2c\xe7\xfb\x17\xac\x3e\x4f\x4d\xf6\x4c\x97\x4d\x52\x18\xac\x97\x64\xcd\x60\xf5\x9a\xe5\x5d\x13\x14\xcd\x86\xd5\xb1\xa0\xfd\xea\xde\x6f\x2a\xb3\xf4\x8c\xbe\xa9\xa2\xba\xea\x8e\x03\x79\x74\xe0\xc0\x49\x75\x47\x0f\x97\x27\x00\xc1\x04\x78\x05\x84\x66\xa1\xba\x90\x5e\xa2\xb4\x59\x30\xac\x26\x2e\x1d\xa2\x28\x99\x80\x59\x2f\x35\xe7\x37\x10\x6c\x36\x29\x09\xa1\xf9\x89\xf0\x91\xc6\x36\xfe\x83\x2e\xb9\xea\xbe\x60\xfa\xc5\x41\xc6\x21\x4f\x97\xf6\x0c\xac\x85\x93\x87\x31\xd5\x5d\x48\x9d\xeb\xc5\x32\xad\x10\x29\xec\x49\x69\x0c\x2f\x75\x70\x49\xc0\xaf\x8b\xbd\x95\xba\x70\x15\x77\xa8\xd5\xc2\x25\xed\x6a\xa7\x96\xe4\xab\x75\x07\xc7\x5a\xf4\xb4\x99\x65\xc4\x3e\xa6\x0d\xd5\x2d\x6d\x2c\xd7\x04\x42\x29\x60\xbe\x67\x72\x9b\x38\x8d\xd3\xc1\xe9\x94\x0e\x49\xa7\x74\x50\x94\xd3\x17\xd7\xa6\x24\xb1\x15\x8d\xba\x55\xb4\xdd\xd2\x13\x0a\x00\x34\x3e\x45\xa6\x9e\xd5\x15\x7c\xb5\xb0\xc6\xa9\xea\x4a\xc7\x1f\xb7\xdb\x15\xc2\x67\xbd\x78\x45\x98\xdd\x54\x8f\xbf\xb7\xdb\xac\xee\x09\xbb\xe5\x8d\xd6\x56\x82\xf0\xb7\x22\xd4\xd5\xd7\x50\xd8\x1c\x81\xaf\x1c\xea\xb6\xb9\x28\xa9\x00\x48\x31\x42\x34\xac\x00\x36\x0d\x50\x2b\x1c\xff\x56\x24\xfe\xad\x88\x1f\x85\x5c\x75\xf9\x6e\xf7\x06\x8a\x7b\xd8\x46\x3f\xf1\x07\x53\x0d\x36\x1a\xf4\xea\xb4\x05\xe2\xdb\xcb\xfc\x84\xef\xbd\x73\x7a\xf6\x1e\x21\xca\x39\x21\x32\xc4\x44\xc1\x37\x08\xbe\x8c\xa6\x6b\x6c\x9c\x42\x3c\xa1\xad\xee\xf6\x1c\x9b\x1b\x2a\x3b\x18\xb0\x8d\x1b\x9a\xc3\xf1\x84\x79\xe0\xa9\x54\x75\xdf\xf4\x7b\x65\xfe\xd2\x37\x7f\x5e\xab\xce\xaf\x9c\xf6\x83\xc4\x6d\x8e\xa1\x97\x4c\xa8\xcf\x1f\x13\xb4\x5d\x55\x5f\xef\x2a\x66\x5b\xb0\xbe\x47\x44\x57\xb9\xd9\x44\x44\x46\x12\xcb\x0e\xc1\xbf\xd0\x88\x3f\xcf\xea\x16\x78\xa5\x5d\x1d\xc9\xe2\x06\xd0\xef\x34\xfc\x55\x97\x5d\xd6\x0f\x58\x50\xf5\xf3\xfb\x41\x28\x92\xde\x15\x35\x2b\xb8\x1d\x6a\x31\xab\x57\xa6\x5c\xf0\xae\xa2\xfc\x9b\xf1\xb7\xab\x70\xd7\x64\x0c\xc2\x90\xfd\xea\x7d\x7a\x00\x59\xd2\x12\x63\x08\x41\xf9\x32\x84\x4c\xf0\xaf\xb0\x6b\x42\xbd\x62\xfe\x4e\xf4\xcc\xa8\xbe\x2c\x2e\xba\xfa\xd7\x78\xbf\xd5\xc6\xe8\x9a\x52\x9b\x8b\x5b\xe8\x95\x6d\x52\x89\x35\xf3\x12\x58\xa8\xff\xfd\x41\x33\x72\x67\x73\x45\x63\xba\xf9\x70\x1b\x64\x5f\xbc\xe6\x0d\xa1\x81\x14\xdf\x68\x10\x16\x1d\x1b\xea\x2e\x8b\x60\xb6\x7a\xba\x6a\xe9\xb2\x9d\xbe\x6e\x27\x81\xb0\xeb\xe5\x3d\x21\x1c\xdb\x2d\xe0\x12\x63\x9c\x50\xbf\x28\x4c\x82\x19\x2c\x9a\xd2\x8a\xf8\xed\xcb\x52\x7a\x8b\x2e\x5c\x86\x43\x5a\x61\x17\x74\x2b\xca\xcd\x5e\xe7\x66\xe1\x14\x99\x8e\x22\xd0\xd8\xac\x4c\x59\xc7\x26\xb1\x18\x59\x6a\xf7\x11\xf9\xc5\x75\xa9\x4c\xd6\xc9\x34\xe4\x72\x99\xd0\x5e\xf2\xd5\x42\x7d\x99\xb6\x60\x19\xa5\x67\xc2\xed\xdd\x1e\xba\xbc\x10\xf1\xad\xbb\xb2\x3a\xb6\x7f\x58\x30\x4f\x56\x41\x7a\xff\x18\xa8\xc7\x53\xb4\x1e\xcb\xf8\xb5\x10\xd4\x5d\x53\x37\x0f\x2b\x17\xf9\xb6\xea\xb2\x41\x48\xbb\x80\xf9\x0d\xbd\x23\x28\x50\x22\x50\x83\x89\x95\x9d\x4c\xdf\x8d\x5d\x47\x17\x44\x66\xf6\x76\xf6\xb1\xeb\xe9\x34\xa8\x2c\xa1\x1e\x51\x70\xe5\x8d\xd9\xea\xf5\x0e\x21\x21\xd3\xa2\x33\xc5\x02\xb3\x1c\x60\x33\x93\xec\xdf\x67\xf7\xe0\xf7\x1d\xcd\xcd\x8e\x1d\x6e\x7a\xa2\x5d\xf3\xbb\xf7\x5a\x96\x76\x88\x2e\x3d\x80\x2e\x67\x39\xbc\x43\x70\xa9\xfa\x22\x44\xd2\x0d\x94\xe3\xb8\xdb\xfd\xab\xea\x77\xbb\x13\x85\x00\xc9\x15\x44\xf1\x2e\x40\x89\x95\x7a\x1e\xee\x70\xa3\x6a\xec\x7c\x06\x4c\x44\xc3\xea\x6b\xc2\xc8\xf9\xdd\xe4\xc7\x08\x96\x12\xb0\x8f\x8d\xdf\x2f\x85\x60\xb7\xdc\xde\x45\xd7\x02\xa1\x79\x0c\xef\x83\x51\xe7\xe0\xbd\x34\xc6\xf4\x44\xf2\x60\x18\xe5\xfd\x17\xfe\x55\xd2\xab\x41\x98\xb2\xcc\x57\x58\x4e\xda\x10\xb1\x24\x51\xab\x43\xef\x19\xd1\x37\x77\x5c\x9e\x65\x44\x8a\xd9\xac\x54\xef\xe8\x7f\x34\xf8\xc0\x62\x3a\xf8\x0b\xef\x3c\x1b\x19\xec\xa9\x2e\x50\x7d\xe0\x8d\x55\x48\x0e\xdd\x34\xfd\x80\xcd\xdf\x6a\x9d\x13\xa0\x0d\x72\x85\x22\xeb\x00\x47\x9d\xee\x93\xc6\xfd\x5d\x7d\xc3\xa1\x20\x81\x5c\x54\xde\x35\x1c\xb3\x38\x2a\x53\xbf\x42\x92\x24\x7a\x8b\xd4\x4c\x88\x29\xd5\x92\xf5\x1e\xcd\x50\x5f\x90\x78\x76\x38\x6b\xdb\x0e\x44\xe0\x70\x56\x77\x01\xe1\x1f\x21\x0e\x15\x21\x29\x97\x7c\xd8\x48\xac\xb2\x8c\x6a\xf1\x73\x11\xfe\x5c\xfd\x21\x9b\x8d\x84\xe4\x00\x14\x41\x49\xaf\x63\x39\x4f\x43\xac\xcd\x7e\x94\x09\x92\xfb\x80\xb4\x84\x69\x3c\x87\x36\xfe\xb0\x07\x87\xb4\x5a\xaf\x71\x54\xaf\x11\x26\x28\xe1\xaf\xde\xba\xb7\x63\xc4\x05\x55\x79\x6a\xb0\xf9\x88\x4c\xf5\xa7\x7b\x05\x5b\xda\xe1\xb5\x6f\x4d\xd1\x40\xa3\xd8\x02\x1d\x53\x7f\x58\x36\xa9\x8e\xcc\x7c\x68\xb2\xea\x6c\x90\x32\x0b\x87\x72\x10\x4e\x16\x8d\xc9\x5e\xda\x0d\x45\x86\x62\x98\x03\x4b\xeb\xa9\xde\x44\xde\x43\x9a\xe7\x44\x48\x9a\x38\x93\x62\x51\x17\xcb\xe4\xf6\x0a\x34\x81\x23\x6e\x63\x88\xf9\x8f\x96\xa1\xe8\x7e\x50\x33\xa3\x77\xf6\x21\xef\xb4\xf6\x47\x7f\x98\xa1\x48\xf0\x20\x78\x73\x44\x44\x38\x28\x80\x18\x50\xe5\x62\x4b\xc1\xdf\xf6\xf6\x08\x7a\x82\x59\x58\x33\xf3\xc1\x96\xdb\x69\x96\xcd\x99\xcc\x1f\x09\x74\xf6\x5f\x0e\xa1\x40\x04\xe8\x97\x58\x83\x72\xb9\x05\x46\x01\x12\x0e\x9d\xd6\xf8\x2b\x1c\xf2\x72\x36\x1a\x57\x48\x52\xb6\x71\x92\x49\xbe\x77\x05\x71\x69\x8d\xe0\x15\xac\xe0\x10\x14\x6b\x8b\x8c\x75\x30\x0d\x64\xae\x4d\x72\x0f\x50\x03\x92\xbb\x97\x47\x95\x67\x63\xeb\x1a\xe1\x0b\x4a\x3f\x20\x7e\xd3\x2a\x02\x63\xf9\x06\x67\x75\x72\x1a\x50\x53\x64\x4c\x50\x82\x2a\xb7\x1a\x85\x68\xe4\x53\x90\x40\x2f\xf7\x19\x89\xdc\xe6\x75\xfe\xe6\xf6\x93\x80\x84\x38\x69\x9c\xf9\x36\xe3\x8a\xd5\xd5\xbc\xe6\x58\x3d\x4b\xfe\xff\xf3\x21\x19\xb3\xfa\xe2\x42\x35\x98\xf6\x3f\x2c\xff\x51\x0d\x2c\x6a\x45\x94\xf7\x56\x5f\xbc\x8b\x13\xf6\x05\x22\x7c\x7a\x97\x11\xe2\x1e\x25\xc5\x45\x9c\x02\x8a\x92\x1d\xe5\xad\xbe\x44\xdf\xf5\x29\x26\xaa\xb3\x98\xa1\xcc\xb8\xbc\xee\x39\x11\x1a\x88\x3a\x9e\x14\x17\x3e\x49\xae\xad\xe2\x2a\x65\x19\x6c\x95\x26\xf7\xaf\x81\x16\xf8\xb2\xf4\xa6\x65\x36\x51\x1f\xf3\x00\x26\x12\x06\x60\xc9\x03\x96\x03\xe2\x0d\xd9\xb0\x6b\x0a\x08\x01\xde\xf8\xce\x06\xf0\x3e\x36\xfb\x5c\x9e\x7d\x35\xd6\x18\xa6\xb7\x5a\xea\x8a\x26\x62\x0f\xd1\xcb\xfc\x81\x30\x16\xb9\x80\x72\x80\xc7\xe3\xb5\x54\xd3\x32\x76\xcb\x78\xec\xf3\xb2\x1f\xa2\x5b\x16\xf2\x1f\x57\xcb\xd8\x51\x64\x68\x19\x20\x22\x32\x34\x44\x32\x1e\x55\xe9\x8a\x8a\x2c\xc2\x7f\xe7\xa8\xae\x59\x09\x69\xdb\xac\xa4\xc0\x1c\xa2\x36\xcb\x50\xf3\xb3\x83\x6e\x34\x60\xe3\xe5\x01\xdf\xfc\xf5\x8a\x1c\x6a\xca\x33\x4e\x7a\x13\xe8\xc7\x10\x01\x02\x90\x40\xce\x13\x51\x13\xf3\x07\xc3\x3e\xd4\x74\xa8\xd1\xc1\x35\xaa\x85\x18\xb8\xc4\xb6\x90\x74\x3d\x1d\x84\x13\xb6\xf1\x56\x1e\x81\x26\x79\x41\x48\x63\x15\x9a\xe4\x1f\x21\x0d\x87\x8d\xf6\x20\x7a\xc2\x80\x58\xcc\xd1\x62\x91\xa3\xc4\x82\x00\xfb\x9d\x25\xb3\x54\x7f\x16\x50\x31\xb7\xa3\x6a\xdf\x33\x65\x5b\x0a\x5e\x8c\xc5\x76\xb1\xca\xbd\x9e\xac\x25\x16\xe5\x18\xae\xc8\xc4\xb4\x14\x34\x01\x99\x8a\xd9\x23\xf5\xbb\x6b\x8b\xc5\x9a\x89\xaa\x68\x9a\x50\x5b\x84\x25\x8b\xcd\x4c\x7d\xee\xd9\xc2\xc2\x37\x56\xe5\x7d\x9d\x8d\x11\xdf\x5d\xe5\x04\xe1\x6b\xac\x6c\x67\x44\x4d\xf8\xa1\x43\xbf\x36\xae\xcb\x66\x84\x26\x74\x10\x52\x04\x75\x1a\x08\xc8\x40\x47\xaa\x1f\x4a\x11\x3f\x28\x07\x5a\xb8\xf8\xd4\xe6\x3c\x54\x88\xbc\xea\x2e\x86\x4f\xcc\x91\xee\x34\x2a\x53\x73\x91\xeb\x56\xbd\x14\x48\x2d\x8b\x3d\x48\xf7\xa0\x9a\x62\x15\x75\xaf\x30\xfb\xb4\xe7\x7e\xf2\xbd\x7a\x32\x93\x44\xef\x21\x0d\xa4\x4e\xe7\x23\xd1\xd5\xf7\x3c\xac\x91\xea\xcb\xc0\x77\xde\xe2\x53\xac\x10\x1e\x42\x51\x96\x21\x09\xa6\x69\x8e\x01\xb6\xe1\x41\xaf\xb6\x48\x4d\x58\x14\x79\xb3\xec\x3d\x6b\x2d\x7b\xcd\x7b\x98\x69\xd7\x2b\x35\x65\x3f\x8c\x8e\xea\x6c\x7e\x2c\xd4\x2b\x5c\x3d\x88\x3a\x02\x15\x2d\x94\x00\xcd\x57\x19\xc3\x09\xb1\x84\x5a\xae\xf4\x82\x71\xcf\xc0\xc0\x01\xe9\x24\xbf\x8f\xaa\x25\xa5\x0f\x78\xac\xd7\x03\xd1\x01\x8c\x64\xd9\x6c\x03\xf2\x61\x6b\x05\xf7\x6c\xab\xee\x75\x44\x77\xcf\x61\x1c\x20\xc7\xef\xf6\xe9\x90\xea\x09\x28\x85\xff\xf6\x69\x88\x2b\xc9\xc1\x39\xc9\xbe\x7d\x7d\xcd\x31\x84\x32\xf5\x8e\x86\x0e\x0a\xba\x81\x20\x9e\x55\xad\xab\x90\x3d\xb6\x40\xf1\xeb\x1f\xdf\xc2\x4b\x86\xb8\x77\xf0\xdf\xfa\xf9\xe0\xbf\x35\x94\xc1\x16\x78\x04\x8a\xb3\x66\x09\x24\xb7\x15\x09\xdc\x66\x74\xcf\xce\xf4\xa6\xf1\xac\x94\xef\x3b\x6f\x6a\x65\x2e\xf4\xdc\x39\x4a\xcb\x71\x6b\xd3\x78\xe7\x78\x8b\x11\xf5\x4f\xf6\x59\xeb\xac\xbe\xa1\x00\x9e\x2c\x7c\x6b\x7b\x76\xba\x83\x37\xd0\xea\xe9\x2e\xbd\x68\x5c\x4f\x57\xf8\xea\xb7\x22\x0e\xd5\x29\x42\xb9\xaa\x4a\xaa\x9c\x88\x22\x7b\x7a\x9b\x09\x9e\xde\xb6\x35\x08\x76\x73\xd6\xf9\xec\x1b\x60\x55\x0b\x7a\x59\x62\x1e\xbc\x15\xc4\x01\xf3\xe3\x52\xa3\xe7\x8f\xe8\x58\xa5\x87\x5d\x88\xd9\x3e\x28\xc7\x20\x24\x0b\xa2\x42\x71\x86\x0b\xc3\xfc\x91\xf0\x6b\x07\x2b\x98\xac\x1e\xfc\xea\xde\x10\x41\xb9\x27\xcf\x38\xd7\x72\x1a\x2b\x94\x84\x46\xf2\x4e\xc3\x09\x81\x6c\x2c\x09\xc9\x27\xdd\x3f\xce\x12\xd7\x53\x15\xd0\xd5\x33\xdb\xe9\xcd\xca\x47\xfb\xea\xf9\xa4\xed\x54\xb1\x62\xf0\xf5\xe9\x27\xa7\x04\x03\x72\xc7\x13\x92\xf0\x72\x71\xa7\xc7\x4b\x64\x0c\x32\x7c\xe8\xc9\x65\x32\xbc\xc4\x7c\x3b\xff\x40\xb4\x6d\xef\x10\xe3\xca\x98\x2c\xca\xd8\x8f\x8f\x46\xd7\xb0\x1f\x32\x48\x22\x54\x32\xb6\xee\xc2\xce\x5b\x16\x78\x36\xb6\x05\xa7\x41\xae\x42\xd4\xf0\x26\x17\x6f\xe9\xab\xc2\x71\x76\xfe\x17\xbf\x55\xf4\x33\x10\x6a\x37\x01\x2c\x20\x31\x10\xeb\xbc\x2a\x1c\x8e\x80\x7f\xbd\x88\x0a\x28\xce\xf3\x30\xc3\xe8\x29\x0c\xd7\x3b\x54\xfa\xc4\x25\x9f\xe6\xdd\x9c\x40\x25\x26\x24\x99\xce\x87\xb4\x83\x62\xff\x45\x97\x14\x42\x3a\xf4\xed\xc1\x3b\xd4\x55\x0f\x0d\xe2\xee\x80\x7c\x25\x73\xfe\x87\xc2\x07\x7f\x79\xf3\x23\x14\xde\xb2\x08\xa5\xd0\xdc\x57\x24\x86\xd6\xd0\xbe\x38\x9d\xda\x97\xa4\x53\x93\xe5\xd7\xd0\xbe\x60\xef\xef\xa0\xff\x96\xa3\xfb\x53\x03\x7a\x3b\x6c\x67\x85\x2e\x0d\x1d\x4d\x63\x46\x87\xc9\xb0\x46\x21\xf4\x5f\xf6\x96\x9e\xf0\xb6\xff\x92\x6f\x37\x1f\x38\x06\x10\xe7\xb7\x1c\x76\x20\x24\x99\x91\xdd\x6e\x40\x84\x8e\xd6\x4c\x31\xc9\xb2\x77\x93\x9d\x6e\x1f\x64\xd1\x97\x58\xf3\x4b\xc2\x93\x5f\x99\x5b\xbc\xfc\x12\xbd\xac\x10\xad\xd7\xe5\xc1\x73\x92\xbc\xc9\x5c\x35\x6f\x5f\xbc\xa8\x91\x37\x4e\x08\x3c\x61\x7b\xa3\xf8\xe7\x1d\xfb\x2d\x59\x03\xb4\x8b\x8f\x3e\xf5\xc3\xa7\xb9\x0f\xab\x06\x52\x91\x3f\x28\x95\x5d\x35\x90\x8d\x55\xa5\xda\xf2\x64\x11\x34\x53\xf3\x31\x50\xc6\x72\x88\x1c\x9c\x10\x25\x38\x81\xb2\x2d\xeb\x3c\x39\xc7\x18\x36\xde\x7e\x63\x88\x43\x27\xc0\x62\x96\xfc\xf6\x05\xd0\x73\xf9\x83\xa3\x4b\x7f\xec\x00\x93\x02\xc9\xad\x7c\x15\xfe\xa8\x4e\x46\x08\x70\x3c\xb3\xa4\x4a\xd6\x54\xc9\x48\x95\x7c\x89\xf1\xa5\xc6\x17\x8c\x51\x26\x73\xd6\x7c\xb4\x0c\x90\x95\xe6\x5c\xbc\x02\x76\x2f\xfb\x69\xb9\x90\xeb\xa6\x6d\x7a\x6e\x1e\x1d\xbe\x1e\x36\x34\x71\x21\x04\x70\xb3\xbb\x66\xde\x75\x15\x85\xd5\x90\x89\x01\x69\x17\xfc\xd0\xc2\x31\x27\x82\x59\x07\x72\xaa\xf0\xb7\xe6\x0e\x41\x51\x51\x11\x7f\xb9\xcb\xb6\x6f\xee\xdd\x53\x82\xf5\x41\x7d\x71\x1e\xc7\xc9\xff\x9c\x4e\xe3\x38\xdb\x99\xf1\x22\xc9\xbf\x97\xa7\xee\xd0\x11\xe6\xac\x20\xc0\xae\x8a\xef\x78\xd0\xd7\x47\xe3\xb7\xd2\x27\xe7\x6f\xaa\xef\xf4\xcf\x76\x1f\x04\xec\xb1\x0a\x35\x5e\x2f\x4f\xa1\x1e\xaf\x57\x68\xfc\xe4\x02\xc2\x80\x12\x91\x10\xde\x48\x12\xd9\x89\xe3\x3a\x5e\xb6\x6b\x3e\x5e\x61\x43\x98\xc7\x0b\xa7\xf0\xe8\xe9\x99\xbe\xe1\x58\xa5\x01\x10\x94\x67\xc5\xe9\x11\xb2\x64\x73\xb5\xb1\xef\x5a\x81\x19\x22\x77\xc6\xce\x6b\xca\x78\x22\x48\x3b\xc5\x6a\xec\x78\x17\x54\xf0\xb7\x88\x27\xa8\x83\x47\x4d\xe3\x6d\xe1\x7c\xbf\xf1\x99\xf7\x3b\xea\x93\xfd\x7d\xf3\x47\x79\xc7\x7f\x1c\x68\x2f\xc7\x21\xfb\xda\x43\xe7\x12\x43\x43\x7e\x71\x42\x5c\xb3\xbe\x0f\x69\x6b\xc7\x55\x04\xa4\x4d\xe6\x0c\x03\x53\xc2\x91\xa4\x84\x0d\xf4\xa3\x23\xf1\xc9\x00\x3c\x11\x93\xc4\x7b\x94\x23\x51\xb1\x1b\xff\xd4\xfe\xf1\x51\xf9\xc7\x3f\x75\x7f\x7c\xd6\xf5\x91\xba\xf8\xdd\xd5\x6f\xee\x57\x46\xa2\xde\x6d\x14\x5b\x8b\xc6\x3d\xe1\x2a\xe7\x5f\xab\x9e\x7f\xad\x38\xf7\x5a\x47\x6b\x5e\xdc\x11\x92\xd0\x13\xc4\x4b\x2e\x35\x4d\x3e\xd5\xf4\x53\x4d\x0b\xf8\x68\x1d\xed\xde\x68\xb0\x6f\x87\x0e\x86\x5c\xbc\x10\xa0\x66\x9c\x53\x5d\xd6\x40\x46\x67\x21\xd4\x0c\xb8\x6c\xc8\x2e\xf6\xd0\x5d\xec\x21\xbb\xd8\xa3\xf7\xe7\x4f\x73\xaf\x97\xdc\xdc\x6f\xee\x25\xe5\xa5\xb9\x17\x1a\x8c\xe6\x5e\xdc\x27\x37\xb7\xe1\xea\xf9\x66\x48\xea\xa5\xd2\xe4\x15\xe6\x37\x51\x09\xb4\x9a\x85\xdd\x20\x9f\xe6\x54\x26\x63\xbd\x4f\x8a\xb0\x88\x5e\x7b\x01\x1d\xfe\xfb\xba\xe7\xce\x6f\x71\xfe\x86\xc0\xd7\x16\x69\x76\x86\x0f\x7c\x49\xe8\x37\x7d\x56\xb6\x5c\x55\x37\x0b\x30\x16\xb2\xe4\x86\x95\x6a\x87\xe0\xd6\x6f\xd5\x15\xf1\x71\xeb\x8a\x08\x35\xf8\x6e\x63\xd8\x5c\xda\xba\xc0\x8d\x6f\xc7\x34\x47\xbe\xc9\x28\xb7\xb9\x37\xf9\x76\xc8\xb1\x8a\xe6\x0e\x96\x7b\x2c\x00\xb1\x41\x9a\x84\x98\x35\xc9\x01\x29\x43\x42\xe2\xb4\x57\x31\xd0\x8c\x28\x0f\x15\xb5\x2e\x90\xac\x47\x27\xa7\x50\x74\xa5\x87\x9e\xfa\xdd\xe8\x2e\x97\x76\xcb\x56\xa6\x92\x5d\xd1\xd5\x80\x0f\x45\x57\x1f\xf9\x52\xd4\x84\x88\xfe\x25\x19\x1c\x11\x9f\x18\x36\xcb\xd3\x18\xb6\x47\x4d\xa9\x79\xa0\xa7\x95\x87\x28\x9e\xc7\xfc\x2d\x0f\x2a\x6c\x8c\x10\xdc\x4b\x86\x97\x0c\xb9\x68\xc4\xc2\xb3\x6a\xa0\x74\xd0\xe0\x48\x21\x27\x27\xaf\x39\xe0\xd9\xb3\x3e\x25\x23\xa3\x74\x1c\x90\x86\x02\xdf\x3a\x27\x56\xec\x81\xe7\xb7\x80\x1c\x0a\x4d\xd2\xd8\xbf\x5d\x17\x5b\x70\x4a\xad\xa9\xc4\x60\xa0\x31\x64\x20\xdd\xd4\x24\xea\x7e\xcc\xaf\xde\x9a\x66\xb7\x3b\xfc\xc4\xd3\xe9\xed\xab\x44\xef\x72\x55\x63\x7a\x91\x35\xd9\xfd\x69\x2a\xa5\x13\x05\x8b\x4f\xca\x32\x54\x5d\x76\xcc\x64\x91\xc5\x88\x3a\xde\x96\x90\xe1\x5a\x84\xe4\x2c\x7a\xbf\x86\xa3\x43\x55\x9e\x28\x3b\x32\x98\x05\xe0\xbc\x48\x7b\x71\xc5\x73\x08\x76\xfc\xc3\x94\x9d\x89\xa3\x63\xcc\x6c\x86\xea\x14\x4e\x26\xd1\xa2\xa2\x60\x79\xcf\xbb\xa8\x4c\xee\xac\x2e\xc3\x8e\xab\x38\x84\xd4\x44\x44\x0b\x98\x16\x96\x86\x33\xc0\x56\xe0\x8a\xf4\xdd\x40\x49\xcc\x50\x70\x8a\x14\x40\x3c\xb9\x38\x94\x90\xf6\xe9\x32\xa7\x05\xa3\x72\x33\x52\xa3\x3e\x5f\x17\x4e\xa4\x52\x24\x91\x4a\xa1\x80\x40\x5f\x19\x1c\xe9\x19\x76\xc0\xe2\xa3\x41\x99\xbc\x09\x91\xf6\xad\xd4\xfc\x9b\x81\xea\xe6\xa4\x51\xa8\x1b\x17\xf7\xba\xe5\xe8\xaf\x4b\xcd\x08\xb3\x07\x75\x5e\xf6\x02\x99\x5e\xd7\x4d\x9e\x7b\xe6\x30\xd4\x2f\xc9\xc2\xfa\x45\xc1\xac\xd4\xc2\x51\xaf\xdb\x5c\x55\x1b\xd5\x6d\x3e\x05\x8b\x60\xb5\x1a\xd3\x1a\x47\xb5\x35\x72\x8a\x9b\x25\xf4\xf4\x54\x2c\x65\x3f\x84\x80\xd6\xd3\x4e\x23\xba\x79\xe5\x94\x51\x33\x6b\x4d\x0e\x7e\x49\x78\x16\x7d\x39\x4c\xc2\x62\x93\x8b\x65\xef\x37\x7f\x51\xfa\x53\x46\x5c\x79\xfb\xa8\x89\x8b\x53\x7f\xb8\x6b\xc0\x93\xbf\xfb\x68\x43\x36\x44\x1e\x3f\x21\x8e\xcb\xd8\x24\xdb\xc6\x46\x1f\xa6\x61\x04\x9b\x27\x7b\x91\xf8\x8d\x14\x35\x9a\xfc\xd1\xc4\x19\xb8\x39\x99\xaa\x12\x6e\x22\x6e\xa9\xb9\xd1\xdd\x9f\xe6\xb4\x7e\x43\xf3\x4f\x73\xb7\xd6\x71\x2c\x94\x34\x77\xe7\xca\x9f\x02\xc0\xa7\x6e\x39\x98\x05\xc4\xa9\x7f\xd3\x6c\x53\xac\x8d\x69\x6f\x4c\x8b\x63\xb1\x49\x01\xfd\xde\x69\x74\x80\x66\x0b\x10\x66\x12\xc8\x9f\xb0\x65\x69\x69\x01\xd9\xe5\x4f\x78\x57\xea\x74\x24\xc3\x7f\xf4\x88\x68\x93\x0d\xa3\xb6\x51\x6f\x2f\x1b\xd3\x20\x08\x11\x03\x0a\x10\xa1\x07\x8f\xb0\x85\x9d\x1d\x04\x9c\x2e\x06\x82\xb7\x9b\xe3\x65\x00\x02\x55\x4c\xa2\x7a\x1f\xad\x7d\x23\xfc\x8d\xeb\x03\x04\x77\xf6\x82\x46\x8f\x78\xa8\x0f\xd1\x27\x7d\xea\x82\x06\x31\x09\x56\xd4\x50\xc5\xd5\x2f\xf5\xa4\x68\x34\x22\xcc\x79\xaa\xd4\x36\xc7\x6b\xe9\x00\xfc\xd5\x94\x34\x78\x49\x0e\x0e\x36\x1c\xff\xc5\xbf\x7c\x4a\x86\x7c\x40\xf0\xae\x9c\x53\x1a\xfb\x4a\x25\xc6\xac\x9c\x84\x80\xc5\xb7\xa0\xfa\x6d\x8e\x2f\xd4\x2b\x78\x04\xe5\x73\xb0\x66\xd1\xb6\xb9\xea\x5e\xce\x9b\x3b\x30\xf1\xad\x6e\x5e\x1e\x55\x9e\x1c\xa8\xea\xb7\x2a\x3d\xa9\x12\x78\x5c\xdf\x9a\x08\xf5\xad\x69\x5a\x35\x9f\x2a\x54\xcc\xa9\xcf\x66\x11\x0e\xff\x8f\xad\xeb\x5a\x77\x9c\x55\x96\xf7\xf3\x96\x48\xc2\x12\xbf\x11\x30\x04\x7b\x79\x3d\xfd\xf9\x3a\x54\x83\xe7\xec\x0b\x9b\x2a\x72\x12\x99\xa6\x5f\x1e\x1a\x9d\x4f\x4f\x10\xd0\x71\xf2\x84\x12\xdd\x3e\xdb\xa1\xdd\x75\x1c\x3c\x50\x8c\x63\x90\x4a\xdb\x95\xbb\x60\x0a\x46\xda\xcb\x7d\x19\x91\xaf\x84\x7d\xc7\x56\x39\xbf\x24\xe4\xeb\xc4\x30\x2f\x5d\x72\xed\xf2\x87\x66\x2c\x96\x10\x19\xf1\x54\x45\x90\xba\xbd\xe4\xe4\x10\x81\xfa\xcb\x6b\x22\xf4\x9d\x37\x73\x13\xda\x0d\x9b\xa1\x49\x9b\xb9\x5f\xe1\x37\xab\xa2\x57\xa6\x26\x91\x84\xeb\x5a\x9e\xef\x66\xa6\xf7\x98\x94\xe4\x85\x70\x8e\xf3\x2a\xdf\x67\x5f\x1c\x30\x9b\xb6\xca\x55\x35\x7f\x84\x7d\xf4\xbb\x05\x9d\x0e\xfb\xf5\xb9\x85\xdc\x2e\xf6\xdf\x8f\xa2\x5f\xa9\xbb\x0a\xb9\xa2\x30\x66\x73\x16\x01\xa0\xc9\xc4\xf5\x7f\x86\x61\xe2\x1c\xb7\xfc\x91\x4a\x45\xe4\x0c\x35\x82\x55\xeb\x7d\xf7\xe0\x7c\xe2\x14\x11\xc8\x8a\xc4\x0b\xeb\x75\xa7\x44\x01\x85\x1a\x06\xbf\x85\xcb\x03\xed\x3d\xa4\x5d\x1d\x27\x3e\x73\xc5\x1f\x60\xa8\x55\x3f\x24\x46\x12\x9e\x48\x17\xd0\x2d\x4a\xad\xd5\x61\xc8\xa8\x95\x80\x38\x88\xfc\x30\x9f\x49\x1f\x65\x0d\x69\xb6\x09\xe5\xcd\xd2\x4c\xec\xf0\x75\xb5\x67\x3e\xd8\x04\x84\x49\xb9\x3e\x31\x4e\x4b\x8d\x53\xc6\xc8\xc3\xbe\x26\x57\xe0\x6e\xe8\x77\x5a\xc8\xb7\xe9\xb3\x4f\x39\x1e\xfa\xbd\xe4\x98\x8b\xc7\xf0\x7b\xcf\xf7\xa6\xf1\xc8\x85\x67\x04\x3b\x0d\x2a\xa4\xc4\x72\xc1\x9d\x6a\xc2\x7d\x21\x75\x1b\x5d\x91\x59\xae\xd6\xc7\xef\xb9\x26\xf9\x1e\x72\x2d\x56\x5a\xb9\x96\xb0\x20\xa9\x73\xb9\x67\xcb\x11\xbd\x96\xc0\x2f\xb0\x1f\x95\xcf\x28\xb7\x3d\xbf\xa3\x78\x55\xdd\x79\xb2\x4e\xd5\x26\xb8\xba\x94\xbc\x98\x14\x4d\x5a\xc5\xf0\x49\x11\x57\xc6\x2a\x43\xa8\xbd\xba\xae\xfb\x62\x8a\x61\xb3\xeb\x85\x5f\xc5\x9a\x1e\xc1\x52\xec\x8c\xc5\x8f\x77\x84\xb3\x77\x34\x57\x6f\x8d\xd8\x3b\x99\x61\x9a\x86\x89\x0d\xbd\x7b\x8a\xea\x77\x6d\xe9\xaa\x6e\xb8\x30\xe2\x92\xab\xba\xef\x22\x48\xc3\xf6\xdc\xc6\x8a\x04\x07\x52\x6f\x24\x91\x91\x04\x12\x6e\x49\x62\x40\x6f\x54\x43\x11\x31\x62\x6d\xaf\x79\xc3\x5e\x22\x11\xb9\xbb\x42\xe8\xa1\xb3\xea\xbd\x66\xcd\xd1\x5c\x2e\x6a\xdc\x66\x41\x56\x99\xe8\xee\x75\x6c\x1b\xe2\x3a\xb6\x4d\x3c\x18\xe8\xb8\x05\x49\x4c\x86\x74\xdd\x55\x6f\xa1\x03\xa9\xe1\xe3\x21\x86\x7c\x62\x52\x42\x18\x25\xa2\x0a\xd5\x51\x2c\x4a\x7a\xe8\xa0\xed\x23\xf2\x71\xff\xf6\x77\x30\x43\xa3\x39\x74\xb6\xb9\x8f\xfb\x96\x80\x18\x70\x38\xe3\xbe\x29\x98\x91\x38\x55\xa3\x56\xf9\x90\x19\x88\xf7\x43\x66\xbf\xfb\xe8\xfb\xe5\x31\x66\x34\xa6\x1e\x77\x7d\xbc\x5c\x21\x7a\xca\xd1\x81\x3e\xe5\x12\xf3\x4f\xb9\x4c\x6f\x76\x69\x0c\xd9\x2f\xef\xb6\x5c\x13\x83\x87\x2c\x51\x37\xef\xce\x50\x3b\xab\x59\x35\x74\xf8\xe2\xf5\xda\x41\xf3\x34\x4d\x36\xc8\x89\x64\xb5\xb1\x33\xcd\x08\xef\x28\xad\x2c\x0a\x1a\xce\xab\x56\x30\xef\x58\xde\x28\xa3\x16\xf6\xe7\x9f\x36\x0f\xa7\xdb\x7b\x8d\x02\xe0\x57\x07\xd0\x65\xf5\xe6\x37\xd4\x05\x42\xf4\x75\xfa\xcd\xa6\x5f\x7e\xc3\xb5\x61\x40\xb6\xc0\x3f\x5f\xf9\xdc\x57\x5b\xce\x88\x37\xbf\xc7\xc1\x13\x28\x3b\x6d\xdd\xf8\x90\xb3\x2a\x3c\x26\x60\xd4\x78\x7b\x85\xf5\xab\xef\xaa\xe8\x8a\x09\x63\xdd\x11\x54\x22\x1e\xb1\x10\x70\xd6\xc3\x3c\xce\xcb\x1e\xf7\x3c\x4f\xd2\x20\xa6\xae\xd9\xd3\xf8\x78\xac\x52\x55\xed\x31\x3c\x2f\x82\x8a\xc2\x29\xc5\x23\x25\x8c\x48\x39\xb8\xe4\xbd\xee\xed\xcf\x77\x2e\x9b\x3f\x4e\x8e\xf9\x5c\xcf\x04\xc6\xb8\xe6\x8b\x72\x14\x0e\x3d\x0b\xd5\xf8\xec\xae\x06\x84\x33\x41\x82\x5e\x0a\x10\x9c\x7e\x28\x1e\xb6\xe5\xb8\x6e\xc3\x71\x5d\x02\x5a\x96\x5e\x27\xd7\x7c\x80\xb7\x79\x1f\xf9\x5f\x06\x27\xde\xdf\x51\xdd\xdd\x11\x0e\x6f\xb6\x81\xa7\x75\x81\xea\xd4\xe4\x94\x9f\x72\x10\x9c\xc1\xa9\x91\x60\x68\x79\x1d\xce\xe4\x87\x66\x72\x38\x13\xf2\x1b\x73\x36\x2f\x4f\xc0\xb1\x3a\x07\x66\x2b\x53\xeb\xb7\x65\x9c\x61\x33\xd1\x45\xd3\xe6\xf5\x80\x71\xf3\xff\x49\xac\xa2\xd3\x59\x15\xdf\x04\x57\x33\x1c\x2e\x26\xc4\xfd\x0f\xab\x92\x91\xd1\xcb\x3d\x43\x43\x1c\x06\xcd\x08\x8e\x2c\x3e\xae\xe3\xc7\x95\x99\x45\xdd\x06\x16\x22\x9e\xf2\xd5\x34\x55\x93\x94\x47\xd4\xc1\xb2\x8f\x0f\x9c\x75\xe1\x0a\x13\x1f\xb2\x1a\x03\x29\x48\x04\xf4\x16\xf9\x84\x1c\x96\x8e\x21\xf9\x38\x94\x24\xec\xf6\xc1\x32\xc9\xb0\xd8\xf5\x22\x35\x8c\x90\x6c\x86\x28\x92\xc2\xb8\x83\xdb\x70\xaa\x88\x19\x44\xf0\xae\x04\x36\x75\x14\xc9\x90\x3a\x72\x05\x8b\x9e\xae\x19\x29\x1b\xb2\xf6\x2b\x54\x0e\xbf\xc1\xaa\x16\xc3\x1d\xdc\x71\xf9\x66\xe4\x64\x19\xcb\xda\x73\xf1\xa3\x38\x7b\xbe\xf8\x72\xbc\x30\x91\xe5\xfb\x0f\x33\xbb\x43\x65\x34\x30\x4b\x53\x5a\xb0\x72\x5d\xf3\x5d\x08\x5c\x2e\x42\x77\x95\xeb\xf8\x69\x21\x66\xf7\x30\xd9\x01\xc2\xff\x09\xe6\xd4\xe6\x84\xb0\x88\x60\x5e\xb0\x66\x46\xe2\xa3\x1f\x02\x17\x19\xbb\xff\x5f\x07\xb6\x54\x16\x2e\x63\x8a\x6a\xf7\xfb\x92\x49\x15\x85\x31\xc5\xdd\x32\x1d\x90\x13\x05\x96\xf2\x8d\x78\xf3\x36\x3b\x03\x1f\x11\xaf\x45\xcc\xec\x37\xd5\x80\xb6\xa5\x92\x85\xed\xab\x96\x05\x1a\xe8\x96\xcb\x4f\xff\xa3\x77\xfb\x05\x8f\xe5\x8e\xb9\x40\x84\x9b\xc7\xe3\xe1\xb4\xda\x6d\x79\xd4\xd3\xe7\xa0\x6e\x47\xf5\x6e\xa8\xd8\xd3\xc6\x35\x70\xc3\x4e\xd7\x37\xd5\xc0\xf9\xe6\x53\xd2\x10\xec\x41\xb4\x69\xbd\x6e\x22\x92\x46\x99\xc8\x1a\x30\xb7\x7c\x6a\x50\x60\x5f\x2a\x09\x4d\x49\xe5\x7e\x3d\x33\x1f\x23\xda\xdc\x9b\x8f\x6b\x79\xed\x82\xc0\x12\xbe\xa8\xfd\x72\xd9\x9c\x5d\xcb\x07\xb4\x87\xba\x5b\xed\x90\x57\xd2\x7e\x11\xb4\xbd\x93\x26\xcc\xd7\x85\xe8\x35\x69\x21\x32\x0b\x20\x98\x59\xbe\x3d\x0c\x88\xfd\x1d\x61\xd2\x3c\x23\xc4\x63\xec\xe6\x41\xb6\x99\x57\x56\xcd\xf7\xa5\x8e\x2f\xaf\xa6\x81\x8e\x84\x9b\x22\xa2\x93\x76\xef\xa2\x79\x92\x44\xc6\xfb\xe4\x8b\x57\xa9\xe9\x2e\x80\x32\x93\xbf\xab\x1a\x3d\xa4\xb1\x98\xeb\x33\x41\xd3\xf9\x8b\xef\x94\xec\xfe\x9b\x77\xa5\xf5\xb0\x72\x5d\x24\x80\x30\x9f\x92\x75\x41\x47\x35\x62\xe8\x13\x43\x3a\xd0\xa4\x18\x43\xf0\x9f\x99\x92\xc3\x85\xf8\x51\x94\x4e\x8c\x80\xee\x70\x78\xf7\x50\x40\xcd\xa5\xc6\x8c\xc8\x47\xc3\x38\x3c\x9e\xfe\x57\x66\xd9\xcf\x38\x74\x18\x50\xe7\x6a\x26\x10\x8a\x2a\x6c\xde\xd7\x12\xde\xe7\xc7\x75\xe8\x33\xbd\xb3\xc2\x1f\xc1\x95\xcb\x59\x13\x75\x84\x7d\xee\x53\x30\x3f\x7d\xb3\x80\xf8\x88\x9e\x42\xee\x99\xa1\x3f\x6a\x32\x07\xaf\x70\x98\xfe\x0b\x39\x2c\xef\xa4\x21\x4a\xf9\x86\x8d\x4c\xfd\x0b\xa2\xa2\xc4\xca\xe1\xc8\xf5\xc6\x57\x6f\x82\x87\x57\x82\x30\xf5\xdb\xc2\x5b\x6b\x84\x3d\x26\xd3\x8c\xfd\x2c\x5c\x1a\x9d\x97\x69\x22\x44\x3d\x9a\xb2\x87\x85\x95\x30\xcb\xd7\x17\xb8\x29\x53\xcf\xf2\xc3\xff\xcc\x61\x2a\x31\x3c\x89\x26\xac\xe8\xb6\x06\x48\xd3\xc1\x1a\xd3\x29\x3d\x58\x35\xec\xab\x65\x1c\x56\x7f\x88\x66\x4d\xad\xff\x29\xfa\xce\xd7\x2c\x4d\xff\xa3\x6f\x8f\xac\xc4\x1a\x0e\x7d\x00\x4d\x8d\x8d\x2d\xe6\x27\x5e\xd0\x16\x9a\x0c\x84\x76\x99\xa5\xde\x0d\xfe\x00\xc5\xec\xba\x8c\x12\x89\x0c\xed\x64\xf8\x82\x55\x34\x08\xcb\xb9\xb5\xa5\x39\x7b\x8c\xf4\x15\xad\x51\xd7\xd0\x46\x33\xd4\x47\x9d\x29\x3d\xed\xd4\xdd\x17\x53\x4f\xce\xe8\xe0\xfd\x19\xf3\x66\x0d\xe9\x99\x5f\x5e\x5e\x6b\x55\x8b\x97\xab\x87\x01\x8f\x6f\xed\xf2\x75\xce\x65\x98\x5a\xa7\xad\x18\xce\x21\x01\x79\x25\x30\xcb\xcd\x6a\xe3\x22\xfd\x78\x52\x9b\x7a\x40\x03\x51\x66\xd1\xc8\x9b\x0d\x65\xae\x0f\x0b\xe1\x85\xbf\x21\xb1\x7c\x03\xab\xd0\xff\xe5\xd9\x51\xfc\x37\x8e\x60\x6d\xf1\x7f\xa3\xda\x80\x4b\xb1\x9a\x4c\x19\xc4\xca\x4c\x02\x31\x73\x95\x3f\x2c\xf8\x2f\x0a\x53\xe4\x0e\x6b\x03\xa4\xb7\x77\x04\x2e\x43\x29\x79\xb3\x1f\xc8\x2c\x27\x8b\x6d\xfc\x20\xbb\xe2\x67\xa6\xe9\x76\xe7\x8a\x93\x65\x37\x88\x99\xc5\x30\xbb\x08\x62\x72\x37\x41\x58\x72\xa7\xb7\x96\xeb\x76\x29\xf9\xa5\xc2\xdc\x2e\x8d\x07\x5f\xce\xd3\x98\xdc\x7a\x08\x80\x21\xbc\x10\x69\xc7\xab\xab\xae\x6b\xb7\xe6\x6d\x97\x49\xdd\x1d\x16\x71\x3e\x0b\x9d\x4e\x3d\x95\x45\x32\xd3\x7b\xab\xb3\x9d\xbd\x7d\x17\x41\x53\x20\x73\xf4\xbe\x50\xb8\x0d\x3a\x0e\xba\x43\xb2\x92\x51\x6c\x95\x66\x15\xd6\xcc\x3c\x6f\xa8\x7d\xfa\xbe\x1b\x08\x1e\xf8\xfd\x62\xe6\x6a\x79\xc7\x4d\x35\xfa\xa5\x9d\xd9\x22\x84\x59\xe8\x48\xdd\xcd\xb2\x5f\x38\x1c\x7c\xa6\xe5\xcf\x32\x06\x13\x41\xcc\x0b\x54\xfd\xc4\x12\x2f\x04\x41\x47\x65\x34\x2b\x09\x53\x7f\x69\xa9\x92\x6b\xa6\xbf\xde\xce\xf9\xd2\x41\x46\x25\x5f\x5f\x88\xb2\x89\xbd\x54\x82\x49\xcf\xbc\xc9\x21\x04\x7b\x62\x44\xf2\xde\x67\x77\x97\xf2\xed\xf0\x8d\xa5\xd9\xda\xa5\x71\x48\xcc\xf2\xf6\x9f\x9f\x7d\x71\xde\x62\x78\x59\xf5\x35\xb9\xd1\x4c\x8a\x4f\x0a\x7a\xb8\x67\xf4\xb3\xbc\x72\x8a\x1c\x82\x70\x69\xc1\x61\x36\x64\x2c\x58\xfa\xc8\x3f\x42\xcc\xf5\x0b\xc6\x2f\x94\x7f\x7e\x41\x4a\x20\xb3\x9f\xcf\xe9\x67\xcb\x53\xdc\x1e\x1e\xa1\xf5\x2f\xa2\x7e\xb1\x70\x6a\x99\xa2\x12\x89\x36\x5f\x11\x71\xd4\x4d\x07\xe4\xc2\xa6\x87\x10\x4d\xad\x2c\xcb\xc9\x5f\x61\xcd\x7a\xcc\xe2\x1a\x56\x5b\x88\x98\xf4\xd1\x6f\x3a\xcd\xeb\x4c\x63\xe1\x5d\x1c\x34\xdd\xc5\x3b\xb9\xe0\x22\xe4\xb0\xf9\xb1\x11\x78\xb2\x8c\x99\x08\xcf\x01\x7b\xf1\x15\xb2\x0c\x94\xea\xc5\x44\x30\xac\xa3\x30\x9b\xe5\x59\x3c\x3f\xdc\x8a\x88\x5c\x3e\xe5\xdb\xa3\xa2\x2c\xb2\xb1\xff\xe5\x66\x23\x37\xfa\xec\xf5\x04\x9b\x68\x55\x3f\xdb\xc2\x12\xf6\x65\x64\x56\x66\xb8\xcb\x50\xa7\x24\x9c\x25\xff\x62\x70\x93\x43\xcb\xf6\xbd\x4e\xc1\xda\xc2\x8a\x75\x23\x8a\x67\xb5\x60\xb1\xc4\x02\xf9\x36\x88\x39\xaa\x7e\x36\xc7\xc5\xae\x55\x09\x83\xa0\x6d\x65\x56\x03\x4b\xcd\x50\x8f\x65\xa0\x8a\xe7\x5e\x81\x97\xb5\x40\xd6\xb0\xdb\x1e\xca\xa7\x55\xae\x99\x87\x55\x5b\x79\x56\xcc\xa2\x61\x6f\x8f\x29\x7d\xe9\x87\xb6\xbc\xb0\xc4\x74\x4a\xcf\xfd\x97\x7f\xd9\xb0\xbc\x15\xd9\xab\x02\xd3\x92\xd2\x91\xe6\x18\x6d\x8a\xb6\x24\x06\x69\x4e\x82\x2b\x34\xff\x69\x9f\xaa\x7b\x8b\xba\x08\x46\x51\xbe\x34\x6b\x8b\x14\x10\xa1\x73\xa6\x30\xaf\xc0\x0b\xc3\x45\x5c\x61\x26\x16\x5c\x68\x9b\xed\x37\x13\x84\xa5\x37\xcf\x94\x94\xb9\x2e\x46\xbc\x87\x6a\x61\xad\x77\x44\x54\x67\x79\x19\x90\x75\x70\x82\x7f\x25\xc8\x06\x3e\xed\xae\x68\x36\xb2\x76\xba\x58\x88\x2c\xb0\xde\xa1\xda\x4c\x1c\x87\xe1\x18\xda\x3c\x4e\x4f\x7c\xac\xd8\xec\xcb\x51\x08\x82\xcb\xee\x22\x51\xac\x1b\x13\x4c\x7d\x1d\x8b\x2f\xdc\x4a\xa7\xf9\x6a\x99\xd9\x9e\x21\x62\x0e\xb4\x4a\x06\x17\x1e\xfd\x9d\x00\x03\x2c\xdd\xc9\xdd\xdb\xf8\xb2\x77\xe3\xd0\x11\xb1\xc2\x4b\xcb\x56\x99\x54\x9c\xb8\x62\xbe\x83\x6c\xa3\xd2\xd6\xc3\xe3\x01\x74\xb3\x2b\x1d\x80\xcb\xbd\x65\x6b\x89\xda\xd8\xba\xaf\xd5\x25\xaf\xa5\xde\xc6\x36\xea\x66\x64\xdf\x65\x8d\xd1\x30\x9a\x4f\x7e\x4f\x30\x2d\xeb\x1f\xed\xed\x91\x55\x9f\xb4\xac\x64\x75\x3e\x0a\xa8\xc1\x75\xff\x33\x5d\xf4\xcb\x3b\x1b\xa5\x83\x4c\xb3\xaf\xef\x4b\x1e\xc1\x63\xb4\xbc\x04\xa7\xdc\x6a\x77\xc7\x9b\x03\x42\xf4\x3c\x29\x93\xb1\xcd\x3e\x9b\xb7\x05\x1b\x26\x0f\x33\xb9\xaf\xd0\xab\x65\xe1\x2b\xc3\xa3\x57\x8e\xce\x46\xeb\xaf\x1c\x77\xeb\x65\xa9\x36\x63\x49\xfb\x0e\xaf\xc1\x46\xa8\x0d\x6f\xef\x9f\x3a\xd6\x79\x63\x90\xf6\xf1\x2c\xc9\xbe\xd1\xf4\x71\xce\xc6\x4a\x0c\xbc\x2e\xa1\x5f\x45\x9a\x93\x6c\xbd\x7e\xdc\x7c\xb2\x96\x3f\x49\x4c\x52\xc8\xd4\x1e\xa7\x26\x2d\xe7\x14\x71\x6f\x18\xf5\x48\xa9\x2e\x16\xe3\x3e\x66\xf3\x36\xd3\x4c\x36\x8f\x24\x34\xa7\x4e\x7c\xbc\x44\x04\x81\x0b\xe1\xc8\xb5\xa1\x81\x8c\x59\xa5\x53\xd3\xa5\x97\xc4\x57\x13\x81\x83\xc6\x78\xf9\x70\x14\x23\x0a\x3d\x24\x8f\x5d\xaa\xa2\x0b\x41\x45\xcf\xc4\x10\xe0\x7d\x5e\xbb\x36\xde\xe6\xb5\x71\x85\x12\xa7\x22\x7e\x17\x9b\x34\x09\xe2\x8c\x29\xdd\x54\x95\x69\x48\xd8\xdf\x90\x77\x28\xec\x15\xaa\x7a\x81\x42\x20\xb4\x4a\x58\x14\x1d\x5d\x0a\x23\x48\xc3\x8c\xa4\x8c\x33\x81\xd7\x0a\x74\xcd\xdb\x24\xdb\x0a\xd4\xd5\xb5\xd2\xe5\x44\x93\x62\x88\x4f\x65\x72\x03\x2c\xb1\x1c\xee\x9c\xd1\x19\x45\x72\x60\xc4\xfd\x12\x57\x7f\x07\x0e\xc6\xfa\xbf\x43\xdc\xb0\x1a\xd4\xd4\xab\x20\x0d\xc5\xc8\x43\x25\x62\x47\x3f\x1d\xa1\xb6\x66\x4b\x40\x4b\xa5\xca\x1f\x37\xa2\x55\x77\x21\x70\x38\xc7\x23\x93\xe5\xe4\xbe\x00\xfd\x80\x6a\xd8\x75\x68\xf7\xb5\x14\x5f\x43\xc6\x5a\x21\xda\xca\x6a\x1d\x6b\x5d\x3e\xf9\x9a\x6f\x11\x37\x46\x70\x5e\x90\x6e\x7c\x3e\x21\xa9\x95\x2e\x8d\xbb\x7e\xd8\xb5\xf0\xa9\x0d\xde\x3f\x55\x22\xc6\x05\x97\x0d\x70\xe3\x93\x54\x69\x01\x6b\x35\x07\x15\x2b\xde\x75\x48\x61\xe8\x85\x70\x06\x56\x65\x05\x6b\xf2\x5f\x76\xd4\x5a\x5f\x94\x20\x35\xcb\xff\xd7\x0c\xb0\xb9\x5b\xaa\x72\xfb\x3b\xbe\x97\x79\x49\x83\x45\xdd\x4a\xcd\xd5\xc3\x22\xcb\xf8\xc6\x8e\x74\x7a\xa9\xe5\x96\xc2\x1e\x6c\xf5\x50\x17\x65\x7b\xc7\x81\x67\xdf\xe5\xd2\x42\xf3\x2f\x9f\x1e\xb2\x54\xfe\xe2\x97\x9f\xa4\x2e\xbf\x16\x35\x78\x85\xa8\x20\x2f\x29\x74\x52\xaa\xaa\x3c\x7c\xd2\x53\x06\xfe\x8d\x73\x4d\x8c\x24\x2b\x7e\x66\x55\x25\xd8\xb4\x3e\xff\xcc\x7d\x8c\x9f\xf9\xfd\xfd\xac\xcb\xde\x3f\x96\x15\x3f\xb2\x83\xf8\xa3\xfb\x87\x3f\xf3\x53\xf8\x59\x2a\xc6\xcf\xfc\x72\x7f\x3a\xe7\x19\x2f\x65\xb1\xca\xb5\xe8\xa7\x2f\x1f\xed\x4f\xa7\x0c\x7a\x64\x1c\x9d\xba\x70\x4a\xf0\xb2\x53\x82\x97\x9c\x12\xbc\xdc\x21\x73\x03\x02\x92\xbe\xcb\x1d\xfc\x30\xa6\x00\xdb\xd2\x60\xb6\xd8\x90\x2c\x60\x28\xfe\xf0\xbf\xde\xf8\x13\xa4\x36\x44\x22\xb1\x02\x09\x9b\x4f\x4c\x5c\xee\x84\x15\xb9\x2f\x46\xc0\x1b\x52\x47\x4f\xb8\x79\xb2\x13\x1c\x3b\xbc\xf4\x74\xfa\xe5\x6e\xe9\x98\x04\x48\xd3\x7c\xb9\xdb\x3f\xdc\x2e\x89\xb8\x91\xc0\xdb\x12\x98\xfa\x07\xbe\x14\x84\x57\xfc\x44\x87\x28\xb0\x5e\x7c\xd4\xc8\x30\x92\xe8\x14\xde\x0a\xbe\xd0\x48\x5f\xae\x9a\x07\xf5\x09\xdf\x6b\xa1\x7f\xde\xa6\x7c\x2a\x12\x40\x13\x34\xb9\x2b\xd2\x2e\x9c\x4d\xbd\x1c\x0f\xc4\x2f\xf7\x8e\x08\xf9\xad\xdd\xc4\xe5\xdd\xc3\x10\xb7\x6e\xa4\xaa\x2d\xef\xba\x9c\xc6\x51\xc4\xf1\x23\x68\x2e\xf8\x30\xc2\xe5\xb5\x5b\xbd\xfc\x31\x11\xec\xf8\xa4\x5e\xf8\x04\x1f\x54\xfc\x30\x21\x39\x96\x49\x60\x6a\x99\x4b\x71\xd6\xcd\x04\x05\xef\x03\xf2\xc1\x4b\xdf\x46\xaa\x86\x12\x91\x8f\x3e\x46\xe4\x83\x8f\xb1\x5d\x79\x7f\xc2\x2a\xc7\x39\xda\x79\xc2\x2b\xe8\x6d\xc2\x76\x05\x1f\x0f\x68\x12\x94\x50\xc4\x6b\xf5\x37\x3c\x74\x78\x4e\x48\x4d\x1e\x7d\x1a\xc2\xf9\xa3\x53\x30\x21\x52\x0d\x09\xf7\xcd\xa7\xe7\xaf\x90\xf8\xb0\xd4\x15\x34\x53\x02\xf2\x84\x67\x03\x17\xce\x09\x5d\xa1\xa0\xfa\x84\xc2\x55\x82\x50\x35\xbf\xab\xf8\xfd\x12\x4f\xf3\xfe\xc4\x11\x78\xc2\x3c\x34\x25\x80\xe4\xe7\x83\x3f\xa1\x8c\x6a\x97\xcf\xc1\x6d\xe1\x95\x4b\xd3\x1d\xc0\x2b\x97\x77\xa6\xaf\xfe\xb2\x93\x63\x84\xf8\x96\x2c\xa1\x2e\xff\x33\x98\x2a\x67\x8f\x2f\xb9\x70\xd7\xae\x6c\xad\x98\x40\xc9\x38\x82\x16\x8b\xb7\xc6\xf6\x2d\x49\x27\x95\x93\x2e\x9f\x79\xc5\xc1\x08\x46\xe2\xbc\xfa\xf7\x21\x8a\x04\x66\xa7\xaf\xae\x1a\x3c\x7f\xb5\x55\x5e\x59\x23\x10\x45\xb9\x8b\x59\x49\x48\x09\x43\xd3\x45\x93\x50\xf3\xb0\x20\x09\xaa\x05\x1c\x9f\xba\xe6\xf1\xa9\x4b\x8f\x4f\x5d\x7c\x69\x4e\xf2\x77\xe0\xdc\xf0\x35\xa8\x9f\x50\xd7\x64\xe9\xc3\xae\x3f\xec\x32\xb8\xe8\x4e\xe9\x8e\x83\x0e\xbf\xc2\x26\x97\xb0\x04\xb0\xb0\xf5\x16\x36\xb9\x32\x43\xaa\x00\xb4\x99\x04\x32\x05\x18\x0e\xcf\xa2\x35\x19\xcc\xfd\x60\x66\x7a\xfb\x5d\x08\x50\x2b\x31\x74\x99\xa7\x84\x43\x4b\x32\x78\x5c\x41\x91\x84\x05\xff\xd2\x98\x87\x53\xc6\xf6\xe1\xd4\x83\x76\x04\x60\xa2\x15\x1e\xa7\x7f\x48\x35\x4b\x7a\xf7\x48\x11\x7b\x4a\xf0\x43\x2a\xde\x32\x61\x28\xa7\x9d\x05\x75\xf6\xed\x86\x2a\xf9\x72\xf2\xf4\x07\xe9\x3e\x13\x0b\x88\xe7\x8c\x52\x2c\x23\xd5\x20\x9d\x58\x88\x18\x1b\x11\xe2\x40\x6c\xbd\x9a\x90\xe6\x43\x84\x08\xe7\x16\xe2\x93\x6a\x6a\x88\xd2\xfe\xb3\xca\xd1\x8d\xda\x98\x84\x48\x55\x2a\x70\xf3\x10\xf4\x96\x10\xab\x62\xab\xb3\xf6\xcb\xb1\x1f\xfa\x92\xa4\x20\x8d\x71\xc4\x95\x68\x81\xb0\x27\xce\xec\x18\x3e\x63\x1b\xc0\x85\xdb\xd5\x3c\x6c\x03\x24\xdc\x3c\x6c\x09\x77\xe0\x4e\x3e\xdc\x9a\x9e\x3b\xeb\x6b\x06\x2d\xdc\x85\xca\x3a\x33\xe2\x42\xb9\x59\x9a\x3f\xab\x41\x5f\xcb\xeb\xaa\x8f\xdc\xa7\x19\xeb\xae\xe1\x0d\xad\x7c\x37\x4e\x81\xe8\x7c\x96\xb3\xf6\x86\xfc\x51\x86\x36\x03\x96\x01\x62\x48\x3b\x8f\x64\x42\xc2\x03\x06\x2d\x24\x9c\x8c\x24\x44\xce\xe4\x80\x69\x48\x7a\xf4\x88\x6f\xbc\xab\x72\x88\x2a\x35\x12\xe3\x18\x06\x5d\x43\xe1\x45\x75\x05\x12\x5d\x46\xd8\x74\x51\xc6\xaf\x3c\x2f\xa6\xa7\x6c\x73\x28\xab\x5c\xd6\x82\xc5\xd7\xa7\x95\x50\x32\x55\x8a\x29\x65\x48\xdb\x91\x34\xa7\x21\x59\xa7\x3b\xdf\x21\xe9\xb3\x24\x8c\x74\x4f\x1f\xef\x99\xd9\x4b\x66\x02\xd4\x67\x86\xe2\x84\x20\x3f\x37\x21\x7e\x59\xc5\xae\x3e\x49\x21\xeb\xf9\x6e\x52\xd5\x49\x1d\x85\xa2\xd1\x9a\x2e\x28\x84\xd6\xe4\x00\x36\x67\x8c\xba\xb7\x67\x06\x14\xb2\x8b\x2e\x87\x85\x03\xbf\x79\xa3\xf1\xfb\x91\x81\x6a\xf8\x29\x3e\x51\xef\x12\x7e\x68\xbc\xfa\x45\x68\x4c\x17\x7e\xf4\x5f\x06\xae\xe1\xa7\x7f\x60\x47\xcf\x6e\x85\x5f\x6f\x80\x3c\x94\x93\xe5\x41\x4f\x95\x87\xdf\xcf\x9f\xf6\xd4\x4b\x1c\x4f\x08\x53\x6e\x4f\x1f\xe4\xda\xb5\xbc\xf1\x86\x1c\x02\xe1\x04\x3c\xed\x20\xff\xd3\xdb\x21\x60\x86\x30\x97\xf3\xbd\x4f\xff\xe6\x3f\x39\x1c\xf3\xd4\x2b\x43\xcf\xe0\xac\x19\x9c\x98\x7d\x0b\x87\xf6\x3a\xcf\xe0\x77\x8a\x42\x78\xe8\xe9\xae\x67\x90\x73\xcb\x58\x4e\x22\x55\x35\xf8\xac\xee\x33\xa4\x47\x0c\x7c\xcb\xe3\x19\x44\x50\x36\x01\x38\x46\xc4\x43\x4a\xe2\x5a\x2e\x1c\x2b\xa0\xec\x20\x24\x8e\x85\x74\x16\x51\xd1\x9e\xd6\x7b\x33\x52\x5f\xe4\xae\x6d\x7b\xe6\xfc\x1c\xf7\x9f\xf6\xfc\xe8\x79\xd4\xa7\xde\xb8\x7c\xea\x68\xf2\xf9\xe1\xf3\xd2\x12\x9b\x8f\xb4\xe5\xd1\xc9\xdd\xf2\x16\xdd\xfe\xa4\x7f\x1d\x0d\x47\x1b\x0d\x47\x19\x0d\x47\x0c\x82\xa3\x0d\x82\x09\x49\x08\x51\x85\x84\x2b\x10\x67\x49\x9c\x95\x4b\x8e\x68\x47\x27\x22\x34\x79\xe3\x52\xec\x76\x58\xe5\xfd\x80\xc8\x96\x3a\xff\xbf\x38\x45\xd1\xbd\xf0\x3e\x72\x8b\xde\x49\x8d\x11\xc0\xee\xbc\xa3\x5a\x13\xd1\xd3\x47\xef\x9f\xf2\xaf\x16\xfd\x13\x16\xfd\x33\xa8\xca\x0e\x7c\xe1\xd2\x22\x00\xab\xc5\xac\xea\xe8\x29\xda\x18\x92\x90\x38\xeb\xb0\xdd\xcd\x76\x17\x93\x97\x37\x57\xe8\x0c\x59\xe2\x16\x5b\x1f\x18\xeb\x46\x9b\x9a\x46\x3e\xb2\x1b\x6d\xcc\x48\x88\x6f\x47\x12\x3c\x60\xe7\x90\x0c\x93\x50\x35\x48\xa9\x09\xac\xa8\xe9\xcd\x7f\x6a\xe9\x86\xb5\x5b\x16\x59\x23\x8f\x1a\x45\x85\xfd\xf6\x61\x85\xff\x93\x66\x16\x03\x71\x99\x38\x93\x30\x8a\x8c\xa1\xe4\x97\x58\x29\xc5\xd7\xb0\x42\xb1\x4f\x18\xe9\x2b\x72\xc1\x93\x80\xd9\x9c\xf6\xc4\x84\xa5\x27\xb4\x18\xfa\xa5\x76\x3b\x42\xea\xf0\xc6\x3a\xc1\x98\x51\x3f\x33\x7c\xcc\xe6\x63\x16\x1f\xb3\x1c\x3e\x20\x55\x6d\x60\x98\x4d\x88\x6d\xe8\x9a\x63\xcc\x63\x87\x9d\xb1\x9b\xa5\xb1\x8b\xad\x71\x8a\xfa\xd2\xf7\x4c\x0c\x8a\xb5\x97\x97\x3a\x4a\xf3\xba\x38\x0e\xad\xf1\xe3\x40\x8d\xe7\x37\xdb\x5a\xd4\xb7\xd8\x08\x68\x1a\x46\xd8\x51\x27\xc6\xbd\xa1\x0d\x16\xcc\xed\x7a\xc4\x39\xf7\x68\xe7\xdc\xa3\x9c\x73\x8f\x83\xcb\x6c\xd4\x17\x37\xf7\x71\x20\x8d\xc3\xd2\x38\x24\x8d\x9f\x3f\xed\x76\x3a\x6e\xbf\x1d\x8d\x63\xe9\x9f\x63\x72\xbb\xea\xce\x83\xab\xc3\xed\xea\xcd\x36\x69\x30\x7e\x3b\x1d\x80\x13\x60\x5d\x15\x11\xc8\x88\xf2\xf4\xc6\x47\x7b\x7b\x27\x45\x2f\x80\x02\x26\x44\x8e\xf8\xf9\x7f\x52\xf9\xe3\xba\xf1\xca\x0b\x23\x75\x82\xe9\xd4\x2d\xd3\x26\x1a\x98\xd8\x55\xef\x3b\xe0\x8a\xc0\x1d\x2a\x2e\x68\xdc\x19\x17\xed\xef\x8c\x46\x86\x91\xe9\x69\xd3\x7c\x8b\x8c\x12\x51\x39\x88\xcc\xb1\xc8\x99\xba\x21\x56\x34\x36\xb6\xda\x70\xcb\x1b\x85\xaa\xab\x95\xf0\x1e\xc7\x89\x70\xc6\xc9\x7f\x27\xfb\x4b\x2a\xfb\x3b\x70\xa9\x44\x91\x69\xc2\x95\xf4\x32\xb7\xca\x42\x50\xa0\xb6\x28\x77\x93\x34\xa4\x09\xcb\x0a\x09\x2f\x1e\xb5\xe4\x90\xb2\xa4\xeb\x0a\x09\xeb\x0a\x89\xd7\x15\x92\xd3\x8f\x31\x41\x9e\x3b\x23\xb5\x8a\xef\x21\x49\x43\x9b\x1c\x46\x09\x49\xd6\xb5\xd3\xbc\x1b\x93\xec\x6a\x4c\x9a\x37\x63\x92\x5e\x80\x49\xee\xf7\x57\xcd\x7e\x7f\x61\xf4\x4b\x4d\x6c\xf2\x88\x97\xb7\x88\x11\xa2\x9a\x91\xe4\xee\x4b\xf2\x32\x33\x4e\xde\x57\xfe\xd6\x08\x68\x34\xf8\x9a\x27\xfd\x57\x51\xd8\x7d\xd0\x3b\x24\x02\x4c\x8b\xaa\x23\x01\xf2\x32\x14\x64\x0b\x9a\x93\x64\xcd\x49\x92\xe6\x24\x05\x4b\x50\x98\x09\x0a\x9a\x20\x11\x77\xdd\x52\xde\x36\xf1\x98\x1a\x9e\x94\xb3\x7a\x96\x33\x3c\xcb\x99\x3d\xcb\xb9\xc3\xa4\x9b\x49\x17\x13\xce\x87\x2c\x25\x99\x59\x38\x26\xab\x9a\x44\x42\x12\xd5\xfc\xde\x64\xfb\x2b\xe5\xf7\xee\x4a\x11\x8b\x6f\xf5\xf7\x0d\x6f\xdf\x70\xf8\x36\x77\xe4\x33\xe6\x8d\xc9\xa6\x8d\x49\x66\x8d\x09\x77\x6e\x92\x5d\xb9\x21\x14\xd5\x88\x95\x93\xff\x4e\xb1\x75\x9e\x5c\x3c\xd9\x49\x62\x59\x25\x57\x19\x75\x89\x00\x07\x9d\x5d\x69\xe3\xa0\x4e\x21\xbb\xc2\xff\xfa\x75\xa8\xc4\xa5\x96\x37\xf6\x61\xf3\xb5\xc9\x51\xc1\xbc\xd5\xf0\x77\xe0\x98\x4f\x56\x61\xb4\xfa\x2a\xe8\xd7\xc6\x5a\xde\x83\x2c\x91\xe6\x3d\x64\xbf\xe7\x24\xeb\xcc\xc4\xec\xa6\xa3\x12\xc0\x98\xcf\xe9\x98\xdf\x31\x35\x3c\xf7\xbf\x99\x7e\x6f\xf8\x66\x7e\xd7\x47\x92\xa6\xcf\x08\x10\xc8\x7f\x5a\x3e\x9c\xd2\xe3\xa0\xd9\x9b\x0a\x74\x6a\xf9\xd1\xf9\x0f\x6f\x28\x12\xe6\x7a\x22\x57\xa6\x72\x38\x93\xfc\xbb\x3f\x2c\x02\x8b\xfe\xec\xae\x3f\xcb\xd9\x69\x39\x1e\x41\x86\xcf\x99\x73\x00\x6d\x99\x6e\x26\xe6\xe8\xf5\x09\xa8\x96\xe3\xc3\x75\x91\x6f\x92\x63\xe0\xbf\x3d\x74\xf5\x8a\x86\xdd\xf4\xcf\x2d\x2a\x01\xbc\x4a\x26\x24\xc6\x21\x68\xf0\x8c\xa7\x8b\x7e\x87\xed\x3e\x0e\x5d\x4a\xcf\x31\x23\xef\x62\xeb\x41\x76\x1d\x54\x38\x29\xa9\x6c\x65\x60\x70\x4f\x50\xb4\x5e\x08\x8c\x85\x92\x92\x0a\x21\x2a\x38\x64\xce\xa7\x8c\x51\x4a\xf7\xbc\xc7\x3b\x31\xfb\x48\xac\x44\x2f\xf3\xd2\xc9\xcc\xa6\x6e\x19\xe6\x5b\xaa\xd4\xbd\xd1\x5c\x90\xaf\x29\x72\x44\x74\xb7\x95\x27\x97\xff\x6c\xbd\xe6\x3b\x85\x87\xdb\x65\xfb\x8a\x89\x37\x47\x72\x2b\x94\x40\xcc\x7f\x07\x74\x75\x97\x56\xe4\xab\x8a\xc2\xb1\x4a\x27\x37\x50\x59\x05\xaa\x31\x90\x0f\x41\xe2\xb6\x78\x9d\x60\x03\x16\x32\x0c\xf8\x73\xc9\x89\xff\xfb\xf5\x70\xfc\x69\x15\xdc\x33\x00\x92\xc9\x31\x4d\xe0\x6e\x39\x2d\x96\x59\x42\x04\xbc\x37\x71\x11\x18\xdc\xd8\xd8\x26\x8b\xc4\xb6\x26\x43\x9c\x5c\x37\x3f\xd3\x5e\x37\x76\x52\x77\x78\x53\x0f\xae\x3f\x9c\x95\xd5\x1f\xb2\xff\x93\x79\xa3\x20\xcb\x36\x01\x05\xce\xfd\x7f\xd6\xfb\xab\xa2\x72\x76\x54\xe9\xd8\x59\x15\xbb\x15\xad\x53\xae\x5c\xc3\x54\x48\x33\x01\x3e\x7b\x48\xee\x9b\x4a\x7e\x6b\x59\x4e\x97\x66\x9d\x85\x88\x2a\xb7\x61\xf2\xd8\xaa\x87\x3e\x35\x56\xf4\x09\x0d\xac\x0d\xe5\x21\x73\xa6\x3c\xa2\x69\x68\x36\x43\x64\x7e\x83\x20\x2d\x06\xb0\x95\x30\x2f\xcb\x43\x73\x6d\x20\xd7\x06\xda\xb6\x81\xb6\x8d\x27\xc3\x79\xb0\x2d\x95\xa4\x2b\x08\x16\xeb\xc1\x02\xbe\x1a\x4b\xea\x63\x95\x52\xc6\xea\xa5\x2d\x39\x41\xef\x30\x4f\x9e\x2c\x4d\x22\xb3\xa9\x95\x99\xd5\xe9\xc8\x1c\xc8\x64\x47\x21\xbf\x38\xc3\x64\xa2\xe9\xdd\xdb\xaf\xe1\x0a\x4b\x93\x7c\x5b\xb4\x70\xb5\x53\xc9\xbf\xbf\x3c\x3f\x2d\x0e\xe9\x2d\x4e\xda\x68\xbc\xc6\xd4\x8a\x3b\xb4\x93\x2d\xee\xc0\x62\x58\x71\xba\x1c\x52\x5c\xd2\xdd\xd3\xe2\x92\x01\x5e\x7d\x2e\xb6\xa3\x50\xb4\x9b\x28\xae\xf2\x5b\x50\x0c\x10\x1c\x36\x1b\x8a\xab\x06\x78\x95\xa1\xb8\x59\xcf\x14\xc3\xbc\x8a\xf7\xcd\xab\x52\x55\xa5\xdc\x29\xae\xdd\x2c\xa9\x52\x90\xb6\x52\x8c\x71\x83\xb9\xe8\x59\x11\xea\x3a\x9c\xa5\x48\xba\x11\x3e\x9a\x26\x1e\xf7\x4b\x9b\xd2\xe2\xba\xe6\x49\x0f\xb9\xfb\xbb\xc8\xb9\x36\x39\xa6\x76\xe8\x48\xb8\xb8\x6e\xd6\x5f\xc1\x77\x51\x79\xfe\x5e\x3c\xe6\xc6\x05\x83\xa2\xe2\x35\x9b\xfd\xd2\x17\x12\x41\xb3\x2e\xd8\x34\xb1\x2c\x59\x70\x3a\xab\xe0\x25\x1c\x39\xc9\xb3\x4b\x31\x2a\xfc\x36\xd0\x6c\x63\x26\x4b\x5c\x8c\x71\x5c\x01\xcf\xdd\x0b\x98\xaf\xca\x29\xb7\xc5\x0f\xa1\xfc\x58\xeb\xff\xd2\xc3\x5d\x3c\xd1\xb2\x06\x5f\x28\x4e\x27\x08\x2b\xfc\xd2\xf7\x97\xd6\xb7\x6b\x7b\x3d\x4e\x4f\xcf\xd4\x3f\x5f\xc7\x68\x8a\xf7\x18\x55\x17\xef\xf9\x41\x00\x06\xfc\xad\x17\xbb\x04\x59\xec\x16\x64\x91\xdb\x8f\xc5\x47\xc7\x27\x66\x8a\xcd\x41\x08\xe9\x47\x5c\xec\xdc\x06\x9f\x0f\xdc\x7d\x0f\xc8\xb9\xaa\x7d\x9c\xa0\xbc\x7f\xba\xc4\x8d\xd9\xa9\x57\x6d\x94\x72\xd5\x15\x58\x2e\xad\x28\x42\x7f\xf3\x37\x49\x0b\x81\xef\x50\x4d\xf6\x02\x13\x2e\xf0\xcb\x9d\x49\x91\xf4\xb2\x7c\x1e\x71\x16\xc5\xa5\x57\xed\xcb\x25\x07\x03\x48\x45\x4d\x60\x28\x89\xb9\x70\xf0\x9c\x90\x0e\x3d\x08\x6a\x36\x0b\xea\x1e\x50\x7a\x83\x22\x93\xa0\x72\x85\xb4\x77\x78\x2f\x38\x80\x9c\xdc\x7f\x10\xfa\xe1\xa9\x28\x23\x04\xfa\x39\x25\x69\x04\xd6\x38\xeb\x2b\xc6\x8a\x6e\x97\x66\xbd\xd0\xd3\x09\xc5\x96\x44\x08\x69\x7a\x6c\xbe\x4c\xe8\xc3\x8a\x14\x7e\x50\x41\x3b\xc5\xae\xc2\x95\xb0\xb3\x85\x43\x52\x80\x59\x45\xb1\x59\x05\x23\xfe\x26\x65\x56\x51\xc2\x23\xa2\x63\x2e\xe1\x69\x01\x3d\xd5\xdd\x13\xce\x9e\x6c\xd9\xc6\x7b\x0c\x2f\xd8\xe6\xf1\x53\x61\x89\xad\xa6\x75\x44\xf5\x82\x91\x78\x42\x50\x02\x4f\xdc\x32\x17\x6d\x32\x6c\x5b\xa9\xd8\xae\x52\xb1\x17\x19\x09\xc2\x2b\xf3\xc8\x46\x0d\x25\x60\xd3\xa8\x84\x24\x6d\x99\x8e\xfe\x0a\x1e\x2e\x24\xa4\x1b\x16\x85\xf7\x04\x4b\xa8\xd6\x38\xc8\xa9\x1a\x52\x24\x28\x7d\x76\x98\x90\x44\xcd\xaa\x55\xa8\x4b\xa0\x95\x37\x5f\x04\x69\xe6\xd1\x18\x42\x9b\x36\xc2\xd3\x55\x47\x8a\xaa\x8e\x70\x19\x0d\x0d\x65\x91\x15\xab\xd4\x9b\x01\x6c\xe7\xfd\x72\x5e\x1e\xd2\x57\xba\xb2\x59\xc3\x82\x76\x26\x61\x69\x84\xc2\x2a\xe4\xaf\x04\xa9\x17\xad\xf1\xfb\x9c\x8c\x44\xed\x32\x18\x28\x10\x66\xdb\x4a\x74\x49\xde\x6f\x06\xc4\x20\xb7\xf0\xe2\x25\x97\x88\x20\x2e\x13\x82\x1f\x56\xf9\xdf\x7b\xd9\xb6\x60\xa4\x96\x6d\xbb\x5a\x20\x77\x8e\x84\xc4\x81\x9e\x67\x66\xc4\xa9\x60\x60\x59\x4e\x2c\x2f\x78\x42\x99\x37\x11\x92\xcf\x53\x2f\x3c\x97\xb9\xbe\x58\x62\x48\xb6\xda\xaf\x84\x03\xc5\xcb\x29\xcb\xc6\x5e\x89\xa3\xd2\x7c\xa7\xe4\x80\x66\x33\xeb\x13\xf5\xad\xd8\xf2\x4b\xc9\xe9\x70\x1c\x4a\x4e\xc7\x07\x0d\x47\x86\xcc\x73\x85\x52\xee\x59\x97\x83\x05\x70\xfa\x09\x4d\x81\x29\x44\x39\xc4\x79\x40\xb2\xa8\xb8\x59\x05\xe2\x88\x17\x73\x4a\xce\x11\x1e\xe7\x04\x3b\xc9\xec\x24\x44\x00\xc3\xf4\x22\x03\x73\xea\xc7\x65\xa4\xa0\xed\x74\xe6\xd7\x9d\x14\xe6\xfd\x83\xb8\xcc\x3b\xbf\x8c\xd1\xe0\x67\xad\x5b\xd9\x1e\xfc\x56\xfc\xd1\x6d\x48\x65\xe6\x0b\xd5\x39\x3d\x6f\x5c\x72\xed\x52\x1b\x68\xd0\x2c\x51\xae\x1d\x51\xae\x9a\xf1\xb9\x6a\x8f\x97\xb1\xae\x4f\xa8\x99\x64\x08\x63\x12\x58\x17\x45\xbf\xe3\x6c\x4e\xf0\xb9\x65\x2b\x5b\x1d\x94\x17\x59\xaf\x28\x79\x34\x2b\xa5\xa1\x26\xa3\x4f\x1d\x75\x5f\xdd\x47\xe2\x8c\xe7\x1f\x05\xa9\xa1\x77\x22\x03\xb3\xc8\x7c\xa1\xe8\x74\xa1\xd4\xa0\x7b\x06\x8a\x4c\xf3\x23\xea\xa5\x19\x51\xe7\x3e\xaf\x61\xd8\x95\xbd\xde\x42\xe3\x48\x58\x48\xd3\x2b\x4c\xd4\x8a\x49\xbc\x16\x28\x4e\xec\xf3\x65\xa8\xa6\x63\x17\x6f\xc6\x2e\x39\xcd\xc5\x55\x3f\xa2\x29\xbb\xea\x65\xdc\xd6\xde\x0e\x5d\x06\x17\xd0\x54\x4b\xfd\x1d\xbc\x20\x5e\x86\x9e\x8d\x2b\x90\xa7\x46\x40\x82\x1b\x55\x9a\xce\xa1\xe5\xf9\x77\xe0\x44\x93\x22\xf2\x91\xe1\x87\x55\x9e\xef\x93\x1a\x61\x09\x2b\xa4\x0c\xc5\x92\x6c\x6c\x13\xe0\x60\x09\x68\x9b\xce\xcf\x8f\x73\x41\xf3\xd3\xe3\x12\x09\x86\x3d\x7b\xf1\x59\xe6\x32\xfc\xf8\x38\x9c\x68\x0b\xa6\x48\x03\xe3\x16\xec\xef\xc0\xfa\x9e\x22\x31\x94\x85\x3d\x52\x6f\xf5\x4d\x7a\xd0\xbf\x23\x88\xb4\x1e\x7e\x60\x5a\xd4\xca\x32\x4a\xe2\xc4\xd2\xfa\x12\xf3\xab\x91\xff\xc7\x4c\x72\x52\xa0\x26\x23\xd4\x5b\xe3\xc2\x48\xe2\x12\x78\xd9\x9a\x54\x79\x9d\xca\xf0\x74\xa5\x42\x85\xfe\x8e\x60\x29\x0d\x33\xa5\x41\x53\x6a\x66\xd3\x88\x4d\xba\xdb\x77\x96\xfb\xd9\x9d\x2c\x64\x76\x87\x11\x78\x37\x91\x9b\x84\x0e\x51\xd8\x89\x54\x56\x56\xc9\xab\x8e\xa5\xdd\xee\xf4\x96\x1b\x03\xd9\x17\xee\xee\xe4\xff\xc0\x1e\xa8\xd8\x62\x46\xfc\x79\x74\x3c\x3f\x4c\xa8\x2e\x48\x3d\x8c\x6e\xc7\x21\x43\x22\xe7\x2d\x0d\xf0\xc4\x2e\x82\x59\x4f\xd8\x9d\x04\x11\x9f\x08\x2c\x6a\xd2\xa2\x25\x8d\x8f\x2b\x74\x17\xdf\xbc\x23\x40\x20\xd7\x7e\x11\xd2\x3b\x5d\x02\xba\x57\x64\xdd\x53\x77\x77\xc1\x91\xad\xee\xf0\xa0\x3b\xc1\xc3\xd5\x03\xbb\xbe\xfc\xfe\xb1\x2e\xeb\x76\x97\x92\x44\x2b\xad\xde\xa4\x04\xf0\xeb\x24\x76\x45\xde\x0d\x23\x74\x7d\x22\x56\xa0\x94\xd9\xe5\x19\xe5\xb5\x5e\x3a\x18\xe8\xce\xf6\x0f\x04\x6a\xd6\xd5\x5d\x0a\xb8\x3e\xf9\xdf\x6c\x98\x79\x95\x60\x75\x21\x44\x80\x94\x67\x95\x92\x6b\x61\x66\x69\x47\xc2\xba\x96\x70\xb7\xca\xd1\xc5\x1f\x34\x48\x8c\xd4\xcb\x8e\x93\x79\x0c\x3f\xa2\x36\x5e\x18\x67\x64\x4d\xbe\x31\xb5\xf3\x86\x1d\x0d\x5d\x97\xee\xba\x3d\x3d\xc5\xb0\x59\x05\x90\x06\x88\xa6\x7f\x31\x74\xcd\x96\x3e\x34\x62\x63\xc6\x6c\x78\x0b\x6f\xa8\xfc\x25\x82\x33\x75\x03\xd5\x76\xdc\xd5\xb3\xd7\x23\xed\x5c\x8a\xa3\xe6\x88\xda\xf7\x82\xfd\x97\xe5\x82\xca\x81\xec\xde\x1d\xb2\x2c\xd6\xf5\xed\x5f\x05\xd0\xfa\xb0\x12\xcd\x76\xd4\x4d\x3a\x81\x70\x10\x71\x64\x50\xb0\xc6\x9f\xb1\x78\x70\x63\x94\xd3\x21\x47\xa9\x9b\x20\xa5\x6e\x92\x94\x08\xe9\x26\x7a\x17\xa9\x4a\xdd\xcb\x62\x6c\xf7\xae\x6b\x6a\x3c\x4d\xea\x3e\xa7\x60\x8b\x3c\x66\x99\xdd\x84\xed\x74\xef\xa3\xe9\x45\xd3\x2b\xf2\xcf\x53\x75\x01\x66\xa9\x60\x9a\xd0\x3d\x77\xde\x2c\x7d\x0a\x6a\x17\xfd\x29\xe0\x78\x11\x48\xd5\x59\x32\x85\x58\xb5\xa4\xdc\xf0\xeb\xbe\x25\xac\xb4\x23\xeb\x52\xde\x75\xa8\xd2\xd7\xd9\x63\xff\x16\x68\x43\xf4\xd2\x5b\x38\x84\x8b\x87\xa5\xe2\xbb\xca\x9f\x64\x06\x99\x8c\x42\x20\xb9\x8e\x58\xd3\x90\x79\x03\xed\x86\xa7\x4c\x6c\x21\x86\x75\x64\xe2\xdf\x17\x09\x3a\x8c\x3f\x80\xbc\x4e\x91\x08\x16\xa4\xaf\x20\x7d\xe5\x1d\x1a\x83\xba\xe7\x8a\x89\x98\x30\x3b\x0a\x45\x74\xc4\xb0\x98\xfa\xac\x8a\xca\xa4\x61\xbc\x5f\xd5\x1a\x12\xe3\xc6\xce\x94\xdb\x34\x5b\xb2\x6d\x32\x49\x62\xf5\x39\xb4\x7c\xfb\x6a\xc6\x38\xc0\x23\xa4\xcb\x4d\x2d\x26\x58\xf4\x10\x62\x2b\x3e\x4c\xf5\x7d\x19\x25\x4b\x4c\x4c\x1c\x8d\xb0\x4f\x91\x7c\x46\x78\x7c\xde\x0d\x58\x3e\x9c\x1a\xf0\x34\xb6\x92\x5f\x23\x12\x93\xa4\xde\x25\x54\x73\xac\x39\x12\xca\x7b\xf4\xe1\xc8\xb7\x6b\xb2\xb6\x41\x7a\x26\x77\xba\xfb\xda\x33\xea\x64\xbf\x38\x45\x12\x1f\x25\xe2\xdf\x5b\xf4\xc8\x81\xae\x5d\xf4\xb0\x49\x0b\x4e\x03\x62\x6b\x3b\x27\x99\x66\x7a\xb1\xb8\x87\x1d\x9d\x14\xbf\xf4\x22\xaa\x7c\xce\x41\x5f\xe5\x10\xa4\xaa\xd6\x95\x80\x7d\x62\x42\x14\x01\xbe\x62\xd5\xb1\x93\xd8\x69\xb2\x4f\x03\xc0\x3e\x33\x8e\xcf\x78\xd2\x3f\xbf\xb7\xcd\x08\x1f\x5b\x10\x69\x39\x72\x3b\x4b\x63\x33\x0f\xb6\x75\x1b\x88\x76\x19\x7c\x76\x9c\xed\x21\x90\x59\xe9\xb0\x50\xec\xcb\xe6\xcb\xaa\x41\x9a\x6a\xc6\x66\x25\x74\xd8\x08\xd6\xb7\x07\xbd\xd4\x29\x40\x8b\x81\xb0\x59\x40\x73\x17\x6a\x59\xce\x00\xf6\x50\x2b\xa2\x5c\xab\xc6\xaa\x56\x2c\x88\x2b\xd6\xac\xb2\xb3\x51\x9d\xe6\xd9\x5a\xf3\x33\xf2\x3b\x5b\x7e\xcb\x39\x60\xce\x12\x81\xea\x19\x11\xce\x5e\xdb\x68\xeb\xb6\x61\xdf\xb3\x14\x44\xd6\x03\x12\x02\xc4\x3b\x3e\x20\xd1\xb3\x96\x7f\x0e\xfb\x15\x66\xed\x90\x5d\x30\x56\x42\x67\x7b\x51\x05\xfb\x30\x9a\xad\x63\xbe\x9d\x5c\x87\x17\xf4\x11\xd0\xc5\x4f\x94\x32\x83\x09\x31\x93\xef\xdf\xfb\x55\x53\x40\x65\xcf\x77\x3e\x9c\x17\x4d\x0c\xce\x72\xf2\x13\x1d\xa2\x9c\x7a\xbb\x91\x30\xd2\x8e\x25\x1c\x42\x1c\x9d\xa4\x49\x4f\x48\x79\xd2\x73\x3e\x9d\x67\xa6\xbc\x2b\x26\x4e\xb1\x9f\x4f\x48\x2c\xf0\x71\x1a\x35\x45\x91\xe6\xea\x3f\x62\xca\xb7\x7b\x14\xa9\x6a\x19\x5f\xef\x0d\x71\xd3\x31\xb4\x00\x89\x42\xbd\xcd\xd7\x7b\xba\xd0\x05\x23\x82\x1c\x31\xb1\xa1\xd7\xc5\x7a\x1e\x5d\xfe\x6d\x8b\x94\x88\x94\x7d\x75\xda\x9f\x0a\x78\x64\x79\x24\x7f\x0a\x3d\x63\xa0\x61\x56\x11\x14\xd0\xf9\x55\x7d\xa8\x18\x81\x31\x69\x5d\x91\x7d\x7a\x4a\xf4\xe3\x03\x93\x2f\xa2\x62\x17\x9b\x11\xbc\xb1\xcc\xac\xba\xf1\xce\x40\x3e\x86\xea\x68\xd8\x8e\xc6\xb5\x6a\x7d\xa9\xae\xcb\x86\x16\xdf\xc0\xc4\xa2\xa2\x5c\xc7\x94\xef\x0d\x30\x48\x60\xdd\x4e\xa4\x31\xb1\xfb\x9e\x2b\x83\xcf\x92\x87\xd5\x8d\x5d\xf3\xe9\x7d\x39\x05\x16\xf9\x37\x22\x8f\x29\x98\x22\xc9\x0e\xef\x9e\x8b\xf9\x47\xd4\xdb\xec\xdd\xd3\x1e\x0a\x97\xa1\x39\xe1\x43\x60\x87\x62\x71\x8e\x3d\x72\x81\xb0\xa9\x87\x55\x7b\xf5\x25\x74\x83\x3d\xef\x79\xd7\xe4\xe0\x9a\x69\xaf\xf3\x94\xa5\x60\x44\xc7\xce\x5f\x08\xe6\xe0\x82\xe6\x27\x35\xea\x49\x00\x5b\x90\xe7\xbb\x18\x2c\x85\x1a\x70\xa9\xbf\xd7\xf0\xf0\x1a\x5c\x78\xe0\x3b\xab\xe1\xb4\x52\x09\x67\x40\x59\x05\x7e\x13\x86\xef\xae\x78\x7c\x00\x35\x68\xcb\x5c\xd1\x80\xc9\x43\x5a\x47\x36\xd8\x15\x5d\xfa\xa6\x83\x91\x8f\x62\x0b\x15\x8b\x0e\x5d\x17\x1d\x7a\x0d\x5a\xbb\x42\x99\x71\x2b\x9a\x0f\xa1\x20\x17\x42\x61\xcb\x79\x93\x0a\x92\xb7\x60\x12\x8f\x85\x49\x8f\x5b\xf3\x36\x3b\xd3\x49\x24\xdb\xf3\x6d\x6a\xf7\xb0\x8f\x46\xae\xce\xe6\xab\x66\x49\x6e\x4e\xa7\x7e\x9e\x2a\xba\x80\x80\xc4\x63\x40\xac\x9c\x42\x8b\xfa\xb8\xcb\xac\x0a\xa3\x5f\xfa\xf1\xf3\x2b\x2e\xe2\xeb\x47\xd7\x45\xfb\xd8\x44\x88\x54\x97\x07\x87\x58\x95\x6e\x54\x8e\xa9\xf4\x71\xd8\x4d\x52\xc5\xe2\xef\xd0\x57\xa1\x19\x89\x0f\x87\x86\x23\x2f\xff\xb0\xca\x3e\xa8\x0c\x5c\x01\x9c\x93\x78\xb9\x47\x90\x7a\xc8\x27\x6d\xbb\xbe\xcd\x43\x80\x0b\x6e\x14\xff\x80\x04\x42\x22\xe9\xd0\x40\xf0\x20\x43\x1f\x15\x11\xa8\x3a\x2d\x61\x20\x01\x55\x9e\x96\x0c\x5e\x6a\xeb\x1f\xe9\x89\x3f\x36\x90\xff\x58\x2f\xfc\x91\x45\x08\x56\xa5\x2c\xb0\x24\xda\x3f\x71\x19\x40\x7e\x62\xbe\x3e\x52\x6c\x9f\x68\xaa\x59\x2d\xaa\xd6\x79\x1e\x4e\x9e\x2a\x6f\xc3\xc9\xdd\xde\xe1\x28\x25\x63\x73\x1b\x2e\xf8\x8f\x6d\xca\x71\x9c\x98\xca\x95\xaf\x00\x74\xa7\xd2\x93\x88\x51\x80\xa2\xea\x87\x45\xa4\x42\xb7\xe6\xa3\xe6\xdb\xaf\x64\x5a\xca\x77\x80\x9f\x03\x2b\x00\x4c\x14\x1c\x87\x5e\x50\x26\xfc\x9f\x93\x85\x34\xc2\xb7\x9e\xbc\x9f\xa6\x23\x8a\x91\xee\x26\x8d\xcd\x3d\xf4\xa5\x7f\xc2\xa7\x08\x16\xf5\x2b\x81\x53\x59\x67\x65\xd0\xbd\x01\x89\x7e\x3c\xfd\x56\x9d\xe6\x02\x88\xfa\x1f\xf9\x25\x58\x46\x3c\x00\x56\xc7\x49\x8d\xd3\x4e\x3d\xbb\xe2\xd3\xb2\xcb\x0e\xd7\x4c\x2c\x41\xa5\xee\xaa\x8c\xd7\x99\x04\x9e\x2e\x8f\xcd\x95\xcc\xe3\x15\xd1\x2f\xc5\x55\xa4\xa9\x14\xdc\x65\x17\x82\xb7\xa1\x17\x9a\x35\x65\x7f\x87\x83\x8a\x10\xfe\x0e\x8f\x72\xa8\x6e\xbf\x64\xdf\x8f\xc8\x96\x2b\xa2\xcd\xd8\x6c\x6d\x53\x0a\x09\xd1\xfd\xf2\xad\x64\xcb\xed\x19\xf7\xba\x0f\x24\x50\xa0\x7a\x6c\xbe\x22\xa4\xee\x1b\xcf\xca\x18\x5b\xbf\xb8\x30\xa4\xa6\x7e\xba\x9f\x11\x54\xa2\xbe\x51\x8c\xe4\xf8\x06\x11\x3e\x17\x86\xf5\x8b\x45\x43\x3d\xa2\x2a\x73\x3a\x14\x85\x5e\xdd\x10\x84\xe6\x7a\x6c\x10\xdd\x49\xa8\xfb\x64\x89\x01\x91\x68\x0c\x79\x7c\x9d\x21\xbc\x19\x55\x5f\xdf\x5d\x88\x3a\x9e\x92\x34\xc7\xe6\x5e\xbe\xb2\xdc\x89\xb1\xb9\x1f\xe4\xdf\x4f\x88\xd0\x89\xa8\x91\x9b\x48\x30\x52\xa0\xae\xb7\xea\xf4\xa1\x4c\x26\x79\x92\xdd\xf9\x1d\x28\xee\xce\x8a\x6e\x77\x2c\xbc\xcb\x60\xf5\x0a\x63\x6e\xb0\x7f\x17\x97\x2c\xb6\xbb\x4b\x3b\xa6\x16\xc6\xcc\x33\xd9\x47\x22\x54\x1a\x52\xab\x12\x32\xf7\x19\x64\x3d\x42\x82\xe7\xd5\x3e\x6d\x60\xf5\xa0\xf6\x10\x1d\xae\x68\x8f\x8d\xf7\x66\x3b\x52\xe3\x45\x9a\x89\x06\x40\x4c\xf3\x79\xbf\x3c\xda\x48\x22\x39\x1d\x66\x90\x6b\xd0\x7a\x02\xbc\x9a\x24\xc9\x41\x22\x8b\xad\xc5\x52\x9d\x56\x2a\x64\x50\x8e\x6d\x4a\xdd\x9c\x98\x67\x0f\x44\x4d\x06\xe7\xd8\xf6\xe8\x06\x32\x34\xba\x17\x92\x1c\xdd\x4b\xab\x39\xc3\xe9\x55\x0c\x56\x25\xa6\x88\xce\xb1\xed\x39\x46\x7f\x86\x6f\xa2\x7e\xe5\x38\xee\xa4\xce\xf3\x7d\xfb\x74\xd8\x47\xae\x5c\xa3\x92\xef\x3b\xb4\xe6\xaa\x79\x73\x97\x55\x54\xc4\xaa\xf3\xf2\x5f\x7c\x7a\x27\x6f\xe9\x2b\x9e\x6d\xcd\x9e\xd3\xee\xe0\xc8\xc4\x78\x2a\x69\x78\x6b\x57\x35\xae\x99\xbb\x39\x3d\xec\x9d\x61\xe5\xb9\xde\xda\x13\x6d\xbb\x65\xfd\x92\xf1\x39\xfd\xc7\x72\x00\x5f\xff\x72\x38\xb1\x7a\x95\x53\x0a\x2f\xfd\x80\x17\x91\xa1\x42\x2c\xc7\x33\x8b\x22\xb3\xe8\xf6\x70\x8e\x69\xad\x87\xa4\xc2\x2a\x84\xd6\x99\x8c\x97\xff\x01\xb2\x0e\x92\x57\x8b\x50\x8d\x20\x46\x54\xe0\xac\x9c\xcb\x9b\x06\xcc\xd2\x8a\x07\xc2\xaa\x7d\xa6\xb8\x7e\xee\x8d\x87\x9a\x44\x1a\xa2\x53\x5d\x42\xb6\xe1\x71\x6d\xc1\x96\x01\x02\x0f\xc5\xdc\x4e\x6b\x7e\xd6\x70\xdb\xa7\x68\x27\xf2\x08\x8f\x7d\x46\x74\x95\x7d\x3a\xb6\x7d\x6c\xea\x98\x80\xda\x1f\x1b\x52\xcb\x08\xba\xb1\x57\xc4\x41\xf1\x01\x82\x86\x71\x1f\xc9\x6b\xb2\x47\xb5\x43\x43\xc4\x6c\x67\x96\xc9\xf2\x6d\x7c\x16\x83\x29\x61\x75\x21\xe2\xc3\x31\x85\x9c\x13\x89\x5d\xfb\x6a\x82\x1a\x5b\x85\xb0\x9f\x8e\x6a\x06\x82\xcd\xa4\x6b\x3a\x14\xc2\xd2\xda\x35\x2d\x54\x8d\x8b\xab\xfd\xb6\x7a\x73\xf8\xe5\x43\x39\x74\xd1\x52\x90\x46\x2c\xb8\x1d\x9f\xe0\x11\x1c\x8b\x16\x07\x29\xae\xe1\x23\x60\x01\xac\xd5\x9d\xd6\x40\x1c\x61\x86\x19\x1a\xea\x9d\x42\xf8\x20\xcb\x5d\x92\x6b\xcc\xe6\xb7\x02\xa9\xab\x63\x3b\x68\x30\xb1\x3e\x0a\xf4\x8f\x16\xdc\xe7\xaa\x6d\xd9\x81\xd1\xe2\x76\x0c\x89\x81\xdf\x7b\x9e\x89\x03\x13\xbf\xfc\xe3\xe1\x2d\x54\x1f\xfd\xcc\x9b\x29\x63\x75\x62\x98\xe4\x84\xd1\x19\xb0\x04\x74\xbb\x7a\x5a\xe7\x31\x99\x18\xa6\x23\x73\x3f\xa3\x9e\x2c\xcf\xdb\x33\xed\x41\x3a\x3a\x5f\xc2\x19\x73\x47\x2c\x94\x69\x3c\x4a\x58\xdd\xfc\x1d\x13\xcc\x6a\xea\xff\x8e\x29\xb2\x65\x6c\x2a\xdf\x95\x81\x66\x96\xd7\xda\xe9\x1b\x2f\x67\xeb\x48\x87\x2a\x82\x35\x77\xbe\xf1\x73\x76\x52\x06\xfe\xe5\xeb\x59\xbd\xe7\x5e\xc1\xff\x74\x13\xc9\x23\xac\x6a\x05\x79\x50\x37\x2e\x69\x27\x18\xa6\xae\x7d\xb8\x0f\xd7\xa6\x7e\xeb\xc1\xba\x8a\xc9\x38\xb3\x1e\x7e\xab\x3a\xc2\x78\x50\x1f\x2b\xe5\xf3\x08\x7a\x28\x7a\x6c\x8f\xe8\x7f\x86\x36\x3c\x82\x55\x3f\xc7\x20\xdf\x24\x23\xf5\x3c\xf3\x71\x36\xf5\x24\xb7\x66\x79\xf5\xa8\x6e\x9f\x9d\x8c\x31\x69\x49\x1f\xd5\xfb\x5f\x1d\xab\x3d\x6a\x46\xc5\x78\x8c\x88\xb1\xd7\x2a\xf6\x95\x58\xdb\x55\xb5\x04\x9f\x0e\x23\xc1\xd3\xcf\x77\xa1\x26\x93\x58\x9f\x3e\xa1\x4c\xf8\x3c\xb9\x7d\xc0\xc4\x34\xd8\x45\x58\xec\x42\x60\x56\xad\xd1\x3c\xa3\xb3\x5c\x3a\xa3\x43\x76\x9f\xd1\xc6\xa4\x67\xcc\xdb\x0a\x25\x17\x19\xc2\x59\xb6\x09\xd3\x19\x73\x6b\xf0\xc2\xaa\xe5\x52\x27\xcf\x38\xee\xd9\x69\x9c\x95\x07\x66\xe2\x14\x00\x4f\x8c\x11\x5a\xe4\x81\x7d\x51\x98\x17\x34\x21\x97\xff\x71\x27\xb2\xf6\x0a\xb5\x69\x47\x76\xe5\xfc\x94\x4a\x42\x83\xa4\x5f\x2b\x16\x16\x3f\xab\x00\x75\xff\x1a\xb7\xa4\xf3\xfa\xb8\x18\xd2\x44\x1e\x30\xc3\xfc\xf6\xe8\xb2\x74\x72\xaa\xc0\x8b\xa7\x61\xef\x88\xb4\x42\xb1\x1c\xee\x0d\x42\x85\x16\x72\xac\x4c\xeb\x5d\xb8\x55\x28\x32\xc3\xd9\xec\x86\xc4\x6f\xa7\xd9\x54\x25\xa4\x75\x2c\x13\x68\x14\xc2\x22\xb4\x18\x47\x77\xdf\x36\xe6\x09\xa9\xfb\x73\xcc\x16\x6b\xe1\xd3\x42\x9a\xf5\x93\x4f\x3c\x2d\xb8\xf5\x30\x59\xb8\x0d\x2e\x22\x0d\x17\x6e\x81\xce\x31\x05\x30\xa7\x63\xce\x77\xff\xf3\xcb\x47\xf1\xdf\x6c\x5e\xa7\x60\x5f\xc3\xe2\xe7\x7f\xe3\x44\x9b\x4d\x50\x2d\x58\xf5\x59\x07\x51\xff\x8d\xa4\xb9\x11\xdd\xa6\x7e\x51\x25\x4f\xf8\xd6\xa3\xdb\x47\xd2\x2a\x4d\x98\xe7\x4a\xca\x92\xd9\x49\xbb\xcf\xd1\x58\xfd\xa4\x13\x5e\x11\xd6\x06\x31\xa2\xf7\xac\x5f\x4c\x5d\xf9\x7e\xa9\x35\x88\x6f\x20\x68\x03\x44\x19\x2d\x23\x17\x62\xb8\xa1\x1b\x4c\x2b\x79\xf5\x39\xa4\x73\x40\xb3\xab\x08\xd1\xb1\x2d\x1f\xa1\x48\xaa\x20\x15\x66\xe3\xde\xd4\x68\xa0\xb9\x82\xb0\x62\x20\x89\xd1\xc0\x7d\xfd\xb1\xdd\x54\x79\xc4\xee\xed\x20\xf7\x40\xf0\x2e\x80\xfb\x2b\xd5\x5c\x26\x76\x44\xb4\x7a\xdc\x1e\x1d\x18\xa3\x04\x94\x77\xe9\xbd\x54\x44\xf0\x6c\x10\x56\x99\xc1\xc4\x52\xb0\xfc\x9d\x35\xf7\xf6\xf5\x94\xf8\x12\x42\xdf\x72\xfb\xda\x26\x86\xac\x61\xc1\x38\x7d\xb6\x32\xf5\x2b\xec\xf3\x70\x35\xd1\x88\x6a\x76\x73\x2d\x19\x1a\xd1\x90\x2c\x4d\xba\x3a\x23\xb5\x97\x26\x22\x50\xb5\xd2\xdd\x39\x7a\xab\x07\xb7\x1c\xd0\x13\x28\xc2\x82\x19\xab\x14\x30\x46\x35\xa3\x28\x8c\x48\xea\x46\x3a\xe0\x76\x34\xf3\x32\xb9\xdd\xfa\xe6\x29\x2c\x98\xb0\xb6\xbc\x26\xbf\x70\x6c\xc9\x1b\x0a\x73\xf8\x9a\xf2\xa1\x07\xa1\x80\xd5\xb7\x8c\x61\x4f\x9a\x8f\xbf\x0b\xe3\x5d\x71\x1d\x8b\x89\xa8\x5f\x52\x7b\xc5\xd3\x3c\x63\xcb\x5b\xc4\xb2\x4e\xde\xda\xae\x19\x97\xb7\x96\xd1\x3a\xe5\xad\x0f\x09\x34\xef\xda\x50\x32\x90\xe8\x67\x4b\x60\xfe\x1e\x69\xe4\xa8\x19\xab\xcf\xff\x33\x62\xb9\xf0\x8a\x35\xfd\x79\x8e\xb9\x50\xf1\xf9\xa6\x8f\x79\x5b\xb7\xe5\x8b\x9c\xec\x00\xed\x70\x64\xb3\x7b\x81\x70\xc0\x18\x71\x81\x54\x62\x82\x8b\xf6\x4b\x85\xf5\x31\x54\x87\x2f\xed\x21\x0a\xd5\x49\xf1\xd8\x84\x09\x1b\x54\x1b\x55\x15\x17\xa3\x8f\x86\x3f\x9a\xc4\xe2\xaa\xde\x06\x64\xdc\xed\x5d\x09\xa2\xdd\xd6\x13\x8a\xeb\x15\x65\x57\xa8\x45\x45\x1a\x8c\x1c\x60\xc8\xa9\xe2\x8f\x91\xf6\x08\x03\x22\xc8\x37\x63\xf0\xc3\xa8\x5a\x8e\x71\xe8\x3a\x69\xa1\x49\x0a\xac\xc5\x3e\xad\xa4\x3e\x7b\xe7\xc2\xfd\x21\x0d\x6d\xf7\x6f\x3a\x4d\xe7\x8c\x90\x68\xe6\xe3\x2a\x60\xdd\x56\x1e\x17\x31\xc5\x44\x7a\xc8\x33\x8e\x4a\x34\xf8\x5e\xb1\x18\x54\xae\xa5\xfd\x56\x02\xef\xf0\xd4\x23\xc1\x0f\x12\x8f\x78\x04\x7c\x30\x25\x72\xd7\xa5\xda\xd1\x25\x7b\xc0\x9a\xa8\x7d\x6f\x25\xfa\x1f\x45\x19\x7e\xe5\xf8\x99\xb9\x00\xe1\xc3\x04\x6b\xb9\x3e\x7a\xaf\x6c\x6c\xa5\xfa\xdd\x97\x59\x32\xa0\xc1\xf8\xb1\x0c\x14\x4a\xf5\x8f\xf9\x5c\x17\xf3\x8b\x46\xdc\x11\xa6\x65\x74\x33\x0a\x68\xd1\x4b\xcd\x5f\x6e\x56\xd9\xc3\xc2\x43\x47\xdf\x54\x6a\xe6\x73\xb6\x8b\x29\x8e\x53\x31\x31\x91\xc2\x63\x2b\x34\x15\x40\xc7\x5e\x30\xcf\x2e\x23\xde\x36\x4c\x2e\x9f\xea\x6e\xcc\xea\x94\xa8\x35\x10\x33\xb3\x71\xf1\xdf\xe1\x8e\xba\x2c\x34\x0b\x97\xb2\xfe\x3b\x42\xfa\x3b\xfc\x43\x6a\x60\x75\x07\xfa\x76\x81\x9a\x4d\x26\x88\x98\x21\xfc\xa9\xee\xd6\x52\xad\x0e\x2b\xf7\xd5\x66\xad\x8c\x66\xa0\xd5\x2f\x30\x59\xdc\xaa\x2f\x2e\x1d\x8a\x34\xe9\xd5\x97\x3e\x5b\x46\x2e\x03\xe4\x66\xf5\x36\x8e\xaa\xbe\xf3\x14\x42\x0d\xae\x7c\x6b\x86\x29\x54\x5b\x44\xb4\x05\x01\x56\x93\x60\x31\x15\x99\xc2\x63\xa3\xa2\xd1\x7a\x53\x73\x1f\x12\x2f\xbc\xb1\x4f\x08\xa3\x59\x93\x1b\x6c\x10\x36\xec\x95\xe7\xb1\xcd\x77\x72\x09\x47\x8c\x93\x97\x97\x35\x89\xd4\xb0\x21\x71\xf2\xb2\x22\xa3\xf5\x51\x3a\xa2\x2a\x61\x55\xa1\xe6\x8c\x09\x32\x25\xf8\x17\x1b\x1a\x10\x7d\xc9\xa8\x9a\x79\x9d\xf1\xf2\xf5\x15\xcc\x72\x43\x65\x9f\x32\xbd\x08\x1f\xe8\xc8\x09\xfe\x5a\x0c\x55\xb6\x93\x20\x04\xa3\x42\x9c\x08\x25\x8b\x5b\xe0\xc3\x55\x0c\x33\x2a\x78\xc3\xb7\x6c\x8b\x19\xcb\xbd\x36\x22\x97\xcd\x9b\x80\xd5\xe1\x9c\xc6\x7c\x4d\x61\xec\x0a\x8a\x42\x0d\x5b\xef\x98\x10\x8a\x36\xd5\xf8\x3a\xed\x3f\x36\x9c\x14\x05\xc6\x67\xae\x18\x35\x5f\xe8\x0b\x66\x36\xa6\x6f\x3d\xf4\x31\xbf\xea\x49\x35\xd7\x84\xc3\x8f\xaf\xad\x7a\xd6\xc0\x67\xa6\x50\xa3\xc1\xef\xf0\x4c\x3f\xe7\x96\xe9\xd8\xda\xb0\xe1\x2e\x8b\x59\x7e\xd8\xf0\xbe\x7d\x52\x3e\x16\xa8\x61\x08\x9c\xfa\x2f\xb5\xde\x1d\x56\x6f\xba\x3f\x6d\x84\xfc\x3d\xbb\xf9\x67\x6e\xd3\xfd\x5d\x3c\xaa\xd2\xbc\xa1\x48\x38\xd9\xad\x3f\x62\x45\x0a\xaf\xfb\xea\x61\xb9\x2e\x41\xd4\x65\x6c\xb5\x48\x98\x56\x32\xb7\x9d\x88\xda\x33\x72\x42\xc3\x6c\x6f\xbb\xaf\x3d\xc0\x5d\xc7\x38\x42\xa1\x5a\xb9\x5c\x74\xba\xea\xd4\xaf\x5c\x9d\xe9\x13\x56\x7d\xad\xf7\x3d\xc4\x20\xa1\x86\x6e\x29\x51\xa3\x5c\x75\x47\xaa\xe7\x8e\x1d\x4f\x69\x75\xa4\x64\x69\x20\xdb\xf0\xb4\x89\xd2\xb9\x0d\xc7\xf4\xe5\x2d\xbb\x41\xe1\xb4\xf8\x5f\xad\xed\x46\x60\x33\x2c\x2d\xa7\x31\xcd\x52\x7d\xad\x95\xd1\x03\xee\x83\x75\x8d\xbd\x86\xb9\x06\xd0\x6b\x28\xd1\xe6\xcc\x93\xc1\xd5\xdf\xe1\x6d\xca\xc2\xb7\x33\x5d\xb2\xb9\x37\xf3\xe8\x11\x09\x25\xd6\x72\x4f\xb9\xda\x84\x47\x9a\x81\x08\x96\x20\xc6\x36\x1d\x8c\xba\xee\x7b\x2d\x54\xac\xbe\xb1\xfc\xde\x3f\x77\x71\x09\x1d\x3a\x1f\xd5\x94\x60\xcc\xed\x88\x3d\x60\x04\x38\xee\xb9\x15\xa4\xf8\xcb\x40\xbd\x17\x66\xa7\xb8\x58\x23\x44\xf3\xf9\xde\x90\x7f\x02\xd5\x8b\xb4\xa3\xf6\x0a\x5c\xb5\xe1\x71\xb2\xb5\xc1\x61\x73\xcb\x91\xc2\x2c\x78\x15\x26\xce\x80\x9f\x88\x03\xf3\xfd\xaa\xb0\xd2\xb4\x6b\x79\x39\x9b\x17\xe2\xb9\x32\xf9\x08\x89\xd5\x69\x50\x03\xe6\x40\xca\x50\x5d\x5e\xf4\xc9\x21\xcf\x29\x12\x5a\x57\x5f\xbe\x76\xdb\x27\x23\x82\xb4\x0b\x0e\xc8\xb6\x85\x1e\xc2\xdb\xe2\x79\xc0\x52\xe1\x2b\xd8\x7c\xf1\x25\x4f\xe2\xa9\xf5\x60\xd2\xef\x99\xd8\x64\x4b\x65\xa7\x8f\xed\x8d\xd3\xd3\x63\xfb\xf5\x35\xb3\x8a\xcc\xff\xb5\xe4\xfe\x7e\x4e\xdb\x16\xdd\x77\x7f\x58\xcb\xbd\xef\x1e\xe7\xfe\x17\xe9\xf3\x02\x25\xa9\x0c\xe5\xc8\x84\x60\x6d\xae\xf6\x3d\x24\x5e\x9e\x25\xa0\x1e\x8f\x0d\xbe\x0e\x11\xd7\x40\x48\x0b\x0e\xa7\x14\x87\x8a\x35\x5a\x1a\xe7\x39\xfc\xb3\x5d\x36\x91\xed\x31\x8e\x45\xc0\x82\x10\x0e\x89\x10\x9e\x51\x19\x2c\xb5\x6b\x3c\x1e\x10\x03\x34\xf8\x61\x17\x09\xfe\xf1\x08\x32\xf2\x7d\xb0\x58\xf0\x24\x68\xf4\xb0\x4b\x47\xf7\x78\xe8\xb3\x61\xe3\x14\x51\xb7\xa4\x6a\x62\x4f\x5c\x2a\x20\x44\x41\xb0\xf0\x20\x2d\x26\xc1\xec\x12\xc2\xc7\x87\x0d\x53\xe5\x4a\xe5\xc0\x9a\x72\x7c\x38\xfe\x0f\xe9\x13\x05\x48\x41\xc4\x47\x86\xce\x40\xc1\x12\x54\xc3\x51\xa7\x96\x58\x93\x33\x65\xac\x36\xa8\x9d\x01\x45\x2f\x46\xce\x32\x9a\xd7\x49\x34\x62\xb9\x9c\x28\x3a\x40\x88\xe5\x82\xef\x84\xd4\xfb\x72\x7d\x0e\x0d\x00\xed\x3f\x01\x4d\x7b\xec\x55\x43\xed\x15\xc1\x75\xce\x8e\xfb\x76\x15\x67\x95\x85\xfc\x4e\x62\x65\x7b\xdf\x22\xf0\x80\xc1\xdb\xcb\x29\xc3\x71\xdf\x3a\xc3\x25\xa0\xf9\x7d\xdf\x38\xaa\x29\x8f\x4e\x27\x01\x43\x32\x9f\x90\x44\x38\x6d\x2c\xdd\x8e\x54\x59\x4e\x4d\x9b\x77\xf7\x44\x1f\x06\x39\x25\x2f\xc5\x90\xe4\xec\xff\xd0\xd3\x8b\x03\x29\x4b\x31\xb0\xb6\x1c\xef\x1c\x90\xd6\x37\x58\x58\xdf\xc0\xe5\xdb\x91\xda\x65\xf7\x7b\x85\xb0\xb1\x5d\xcb\x1b\x49\x4e\x4a\x0e\x96\xf7\x46\xff\x9a\x08\x46\xb6\x8c\xc1\x2c\xdf\xb8\x2a\x24\xbc\x71\xf7\x67\x6c\xc0\x1f\xb7\xef\xf9\xbe\xf3\xa1\x8f\x4a\x98\x56\x89\xfa\x36\x9b\xea\x0c\x1d\x46\x30\x9b\xaf\xb8\x0a\xb7\x43\x3f\xcc\xb4\xb2\x32\x1e\xe6\xe8\x70\xa5\x2f\x11\x3a\xe6\xbb\x0f\xc2\x79\x7f\xc6\x4c\x6d\xa1\x94\xd9\x1d\xd6\x94\x1e\x7c\x70\x8c\x21\x4e\x06\x31\xd6\x27\x57\x4d\x63\x1e\x16\x22\x76\x56\x34\xe0\xc4\xee\xcd\x26\x2a\x44\xf9\x0a\xea\x0e\x12\x66\x3e\x26\x3b\x1e\x42\x4c\xfb\x0b\x81\x7e\x3a\xc7\x41\x19\xc6\xc7\x58\x0c\x6a\x3e\x9d\x45\xa1\xf6\x60\xa3\x3f\x1e\x97\xcd\xfb\x5c\xca\xbf\x73\xcf\xce\x94\x10\x99\x4b\x8d\xc5\xd7\x4d\x15\x1f\x83\x7f\x4d\x1f\x36\x1f\xf3\x0b\xb1\xdd\x7c\xf2\x2f\x95\x65\xa3\x9c\x05\x13\x31\x8e\x58\x5a\x97\x07\xe8\x80\xaa\x43\xe0\xdb\x68\x1a\x96\x9d\x0e\x11\x2c\xdd\x9d\x60\xdb\xd6\x67\x5a\x66\x44\x76\x57\xcb\x34\xe8\x6e\x1e\x2b\x54\x1d\x7d\xbf\x77\x65\x72\x81\x51\x74\xf4\xcc\x05\x3f\xd0\x34\xcf\x8f\x30\x5d\x4e\x90\x80\xd7\xd5\xf4\xce\x69\x16\xec\x94\x5a\x21\x8c\x26\x04\x75\x9a\xda\xb2\xa7\x92\xc5\xe4\x15\xe2\x02\xb5\x5f\x24\xca\x6f\xb2\x8a\x84\x54\xe6\x39\xa4\x5d\x4f\xa5\x0a\xb7\xbd\x20\x61\x38\xdc\xc1\x6c\x3e\xa1\xaa\x5c\xc4\xe7\x0a\x49\xbc\xa3\x80\xaf\x10\x1c\x05\xb2\xe7\xf4\xf8\x0a\x67\x3d\x6a\xa1\x1a\xa3\xcd\x68\x25\xbc\xe7\xa9\x94\xa6\xa6\xee\x5b\xc3\x1e\x5d\x85\xce\xd7\xdc\x88\xf5\xb0\x40\x45\xa4\xce\xe7\x0b\x84\xdb\x3a\xbd\xb0\xe5\xdb\xdb\x6b\x7e\x27\x0b\x6b\x79\x74\x55\x78\x5d\x72\xfa\xb3\xd4\xa1\xc3\xc9\xc5\x50\xc6\x7e\x8f\xce\xf6\x71\x44\x23\x2f\x29\x38\xbc\x8d\x8f\x99\xdd\x76\xc0\x1a\x3c\x4d\xd2\xc2\x2c\xf5\xc3\x53\x81\xb6\x4b\x59\x70\x5b\x8e\x4b\x14\x02\xf5\xe9\x72\xf2\x90\xe9\xcb\x2a\xfc\x41\x6d\xaa\x57\x11\xdc\xac\x31\xb6\x99\x90\x63\x58\x35\xf4\xae\xca\x53\x7a\x4c\x8e\xb1\xcf\x58\xaf\x5b\xe9\x42\x97\x36\xca\x47\xb7\xe5\xd9\xce\xda\xcb\xa6\x4a\xa6\x27\xd1\xcf\x56\x05\xfb\xf1\xc8\xa6\xf9\x06\xaa\xb0\x80\xad\x02\x66\xf9\xef\x12\xdc\x1d\xd2\x24\xc9\xd7\xd3\xcf\xe0\x8a\xa1\xbf\xc3\xde\x6e\x60\x4e\x4d\xda\x2c\x15\x8f\x57\xfd\x98\xbc\xb4\x25\x9d\x1a\x4b\x95\xf5\x3f\x6e\xa9\xdf\xfe\x67\xf7\x71\xf1\xf6\x87\x9f\x62\x9b\x75\xcf\xff\xec\x61\x26\xe3\x67\x9f\x07\x15\x99\xb3\xbc\xe9\xc9\xec\xc9\x30\xe1\x7f\x47\xd0\x85\x72\xa6\xbd\xfa\x5b\xc9\xc3\xa5\xbe\x64\xeb\x83\x5f\xfd\x43\x09\x3f\x7c\x7d\x59\x18\x0f\xdf\xad\x28\xd6\x66\xfb\x31\xad\x87\xa5\xee\xe2\xd1\x5e\xc6\x71\xf6\x01\xbc\xc5\xbe\x7c\x36\x8f\xa5\x9b\xe6\xfb\x01\xc7\xfc\x86\x1f\xb9\x76\x6c\x50\x11\xe5\x65\x85\xd9\xd6\x7c\xed\xa4\x17\x5f\x4f\xb9\xdd\xbb\x1b\x8b\x56\x2b\x4e\x8f\x48\xce\x6d\x73\x10\x8b\xca\xe9\x93\x75\x68\x73\x17\x9c\x49\x5e\x3e\xd1\xb9\xa5\x0d\x02\xef\x2e\x97\x8e\x96\x91\xb5\x7c\xd7\xe3\x03\x5c\xb3\xd9\xf2\xdd\xd7\x7c\x7c\x10\xa3\xf9\x96\xea\xca\x10\x00\xb6\xa8\x8b\xaf\xe1\xf0\xd0\x0d\x67\xca\xd5\x52\x17\xee\xe2\x6b\x9b\x19\x11\xee\x92\x6b\x5f\x8d\xb3\xb5\x84\xe1\xe6\x73\xb3\x96\xc7\xcc\xad\x93\x0c\xc9\x9e\xf3\x55\xca\xe7\xe2\xae\x79\x7a\x43\x74\x69\x16\x6a\xde\xa7\xe5\x21\x66\xd5\x08\x0f\x39\x08\x37\x35\xf4\x26\x37\xe8\x2b\x1c\x96\xd7\x21\x1d\x76\x3c\x42\x69\xeb\x4b\x86\x87\xb4\x56\xa6\x90\xd6\x2a\xc3\x67\x5a\x57\xab\x29\xef\x8b\x4f\x52\xf1\x97\xf4\xcc\xf5\x3c\xa6\x9d\xbe\xb9\xbd\x2f\x51\xe9\x3e\x35\xb3\xdd\x73\x5c\x07\x95\xb2\x8b\x5c\x7c\x5d\x87\x63\xcb\x0e\x75\xf1\x95\x9b\xac\x19\x9f\x75\x6f\x98\xe9\x8c\x4b\xf4\x29\x98\x27\x31\x5b\x81\xdb\xa5\x2a\x21\x1f\x83\x83\x2f\x84\x09\xb4\x3e\xd4\xb6\x72\x19\xff\xac\x5d\xc9\xed\x44\x54\xbf\x05\xb2\xec\xd5\x0a\xb3\x2f\xf7\x76\xf5\xe5\xe3\xe2\xb2\xed\x23\x2e\xa6\xeb\x5b\xb0\xac\xb3\xbc\xff\x23\x7c\xf6\x8b\xcb\xce\x2e\xb3\xd4\xa7\x49\xaf\x22\x7c\x12\x35\x9a\x1f\xd7\xb5\xf8\xdf\x59\x64\x9a\x0a\x8e\xfc\x96\x85\x60\xeb\x4a\xee\x2c\x72\x18\x18\xdb\xc6\xa8\x90\xb0\x07\x1b\x64\xa5\x09\xe6\x77\x90\xdc\xda\x5a\xcc\x35\xbc\x49\xc2\x6c\x09\x93\x3f\x63\x98\x95\x72\x9d\x4d\xa4\xbc\x8c\xdc\x13\x9f\x1c\x41\x12\x98\x59\x3e\xe6\xcd\x1f\xb3\x8c\xf3\xe6\x11\xf5\x6c\xe7\x1d\xcc\x9f\xbc\x35\xdb\xa1\x23\xba\x9b\x5c\x7f\xa1\xc3\xc6\x78\xf9\x61\x4f\xa5\x2b\xc5\x53\x0b\x4c\xf1\xde\x16\x93\xe5\x11\x55\xe1\xdb\xe2\x27\x6f\x65\x22\xe6\xcb\x26\x27\x33\x6c\x6c\x32\x49\x6e\x2d\xc7\xe2\x78\x9f\x04\xe9\x5a\x9e\x3a\x55\x1a\x83\xfb\xea\x83\x8b\xeb\x33\x1b\x96\x47\x4c\x99\x52\xcf\x82\x99\xd8\x77\x33\xb6\xec\xd8\x81\x21\x95\xe5\xfa\xb4\x99\xac\x32\x93\x5f\xa2\x1b\x4b\x53\xc5\xb5\xcd\x70\x59\xa7\x69\x25\x37\xb7\xd8\x5b\x9b\x89\x92\xdf\x72\xcd\x90\x49\xf5\xbb\x5b\x3e\x2b\x7e\xfa\x13\x05\x59\xaa\x2f\x6e\xb1\x9a\x5b\x59\xca\xbf\x0c\x7c\x06\x73\xe3\x89\xc9\x5a\x0f\xed\x05\x4b\x21\xe7\xd4\xe7\xde\x69\x69\x31\xaa\x5f\x1c\x2d\x4f\x53\x42\x23\xaf\x8d\x34\x4b\x83\x99\xdd\xec\x7c\x58\x92\x58\x73\x3b\x8d\xdf\xac\x44\x6d\x6f\x48\x31\xa2\xd3\xdc\xc3\x03\x9d\x6e\xa9\x65\xcd\xa5\x73\x58\x03\xd1\x5c\xdd\x97\x41\xc4\xba\x7b\x44\x94\x66\x4c\x6e\xb6\x2e\xf2\x0e\x65\xc5\x80\xb0\xf1\x8a\x91\x2e\x2f\x31\xd7\xdd\x23\xc2\xbc\x7f\x64\x19\xd0\xfc\xf2\x19\x10\xa9\x66\xb0\x8c\x1a\xda\x57\x67\xb5\x3c\x01\x08\x6a\xad\xfd\xf7\x4b\x7f\xa6\x33\x63\xba\x3e\xef\x27\x1a\x65\xc1\xb8\x9d\xb4\xb2\xc5\x74\xc9\xad\xf5\x35\x35\xd1\x90\x77\xc8\x18\xaf\xaf\xab\x88\xc6\x1c\x06\xce\xb7\x39\x98\x89\xbc\x71\x86\x79\xea\xaa\x90\x5c\xc1\xf6\xd5\xb6\x4c\x61\xd8\x14\x77\xd9\x94\x5a\x98\x45\x77\x4a\x16\x63\xca\xe2\x72\xec\xd3\x6b\x7d\x5d\x1d\xb0\x9b\xc7\x42\xec\xd2\xa3\xd2\x80\x8f\x19\x97\xe9\x14\xcf\x3d\x20\xe6\x9f\x39\xe7\xc0\xc9\x27\xab\x30\x5f\x3b\x59\xa2\xd1\xd7\x49\xa7\xed\x6c\x30\x5e\x16\x1d\x99\xf3\x9a\xde\xe2\x19\xaf\xb8\xad\x1a\x2c\xff\x6e\x46\x59\xde\xf6\x64\xf8\xb9\x8b\xc3\xf3\x9e\xa4\xb1\xec\x11\x31\x5b\xb7\x73\x48\xe3\x72\xe9\x29\xcb\xb6\xcc\x72\x15\x19\xa8\xcc\xaa\x3b\xcd\x9b\xea\x12\x5f\xe2\xb1\x58\xf6\x1a\x5e\xd3\x9b\xc1\xe2\x2c\xf4\x7b\x18\x27\xbe\x8c\x75\xf1\x9d\x68\x9d\xdd\xd1\xcb\xa1\xa3\x7c\xad\xc3\x88\x97\xbc\x94\x6c\x69\x7b\xf1\xf5\xce\x69\x8a\x97\x66\x85\xd5\x11\x17\x97\xcd\xe6\x30\xaf\x30\x3f\x91\xd7\xec\x2f\x5e\x79\xbe\x78\x4f\x7c\xae\x7f\x13\xb1\x26\xf1\x9d\x6b\x3c\x90\x84\x37\xe7\x88\x86\xf1\xeb\xad\x15\xd0\xa6\xc3\xae\x68\x8f\x22\x5b\xaf\x45\xc4\x7e\xb0\x3a\x3f\xbc\xf2\x35\xa7\x2b\x51\x96\xfb\x4a\xd4\xd1\x42\x89\xd6\x46\x10\xcc\xb0\x86\xd5\x58\x86\x49\xad\xd2\x24\x79\xda\x90\xfa\x59\x4c\x34\xaf\xe0\x45\xdb\xa2\x87\x11\xb4\xf4\x14\x68\xbe\xc1\x16\x6b\xf3\x53\x11\xf2\x0f\xd5\x78\x2e\x13\xb4\x32\x66\x23\x5f\xdd\x32\xbb\xa8\x6e\x1e\x6d\x2d\x34\x3a\xb1\xf5\x05\xea\x7f\xe7\xf1\xb2\x52\xdd\x3a\xb4\x61\x86\x4f\xcd\x88\x35\x72\xd5\x2d\xa3\x80\xea\xea\x97\x4b\xeb\x62\xaa\x6b\xfe\x9c\x25\x40\xcd\xf9\xfc\x14\xaa\x9b\xbb\x3b\x45\xe7\x92\x62\x54\x37\x27\xf9\x54\xf1\xd2\x93\xb4\xd1\x2c\x44\x79\x88\x10\xe5\x51\x1f\x9a\xd9\xf5\x61\x02\x75\x07\xde\xdd\x1c\xf5\x41\x85\x53\x4f\x33\x38\xbd\xe5\x6f\xc5\xd0\x98\x05\xed\x0d\xe9\x43\xea\x6d\x6b\xe1\x55\x4e\xd7\x29\x29\xae\xb5\x15\x4b\xb1\x56\x16\xef\xc7\x71\x2c\x35\x40\x53\xaf\xee\xd5\xaf\x33\x1b\xf5\xe5\x03\x26\x91\xf5\xe5\x3f\xf0\xec\x15\xb0\xc8\xd8\x78\x96\xbe\x62\x2e\x47\xee\x9c\xa1\x4d\x58\xe3\xcf\xd2\x53\xad\xce\x33\x9b\xb6\xac\xd7\x12\xac\x1e\x51\x53\x25\xa2\xad\x40\xcc\xb5\xb5\x62\x8b\x20\xac\x41\xd3\x1b\xbe\xcd\xa6\xb6\xbe\xb6\xb6\x85\x59\x81\x83\x4a\x50\xa3\xea\x8c\x92\x90\x78\xac\xd5\xe8\xe5\x23\x0d\xa2\x58\xa9\xaa\x52\x49\xbe\x55\xc6\xd7\xdb\x9d\xa7\xae\x03\xbd\x5d\x10\xf9\x8c\x6f\x7e\xb9\x51\x22\x25\x58\xca\xf7\xed\xf4\x5e\xb2\x00\xf1\x06\xf7\x92\x09\x7d\x48\x51\x39\x72\x02\xc4\x0e\x4b\x8f\x13\xf1\x5a\xf4\x7f\xa9\xc2\x9a\xed\xda\xc6\xfe\x8c\x1a\x83\xd6\xc3\xd3\x49\xbc\xf0\x6c\x05\x21\x0f\xf8\x31\xc0\xf9\xfa\xf6\xd2\xf5\x90\x2a\xa1\x7a\x3c\xa9\x43\x48\x63\xe6\xf9\x49\x9d\xb7\xf7\xba\xac\x4b\x48\xc2\xf3\xe2\xc6\x77\xf9\x87\x7d\x5c\x05\x27\x74\x73\xed\x7a\xfb\x18\xf1\x68\xdf\x9b\xf3\x52\x3d\x28\x5d\x36\x56\x08\xbd\x55\x0f\x0f\xb4\xbe\xc3\x83\x3c\x0e\xf7\x0d\x9e\x0e\xbc\x84\x2a\xf8\x60\x70\x9a\xd6\xe9\xc5\x0b\x14\x44\xa8\x22\x3d\x4b\x00\x27\x2b\xf0\x97\xf3\x86\x84\xb7\xb7\x09\x78\x7b\x8b\x7c\xb7\xf7\x14\x6d\xf2\xce\x31\xd1\x7f\x55\x79\x2b\x8c\xd8\xe4\xb3\xe7\x72\xe9\xa0\x72\x62\x4a\xa8\x31\x0a\xff\xe3\x75\x0b\xfc\x13\xa3\xdb\x14\xd8\xdb\x04\x9f\x28\x63\x28\x56\xd9\x7a\xc4\xf3\xbc\x84\x3e\xa4\xf0\x33\x6f\xa4\x88\x8b\x7b\xd3\xe9\x03\x10\x07\x79\x6f\xb2\x84\x2e\xa0\xf5\x6f\x2c\x56\x70\x17\x02\x48\x74\x67\x97\x2f\x18\xc2\xb0\x95\xdd\xe1\x5e\x4c\xd5\xfd\x94\xef\xf4\xb9\xb1\xc9\xa7\xc8\x74\x3f\x2d\x68\x00\xd7\x07\xf1\x29\xf9\x80\x66\x6e\x7c\xf4\xf1\x73\x17\xbb\x37\x2b\x58\xf2\xf9\x93\x6c\x07\x87\xc9\x89\x65\x81\x4f\x72\x05\x9a\x38\xeb\xfa\x49\xbb\xab\x45\x42\x4e\x2c\x92\xc9\x73\x5e\x26\xbb\xef\x09\xa8\x11\x59\x98\xba\x27\x0e\x0f\xb0\xd0\x4a\x50\x9a\xf9\x4f\xda\x73\x91\xcf\xe4\x93\x78\x4c\xbe\x1b\x5a\x3c\xf9\xc8\x98\xed\x93\x0e\xb7\xf7\x8f\x20\xdf\x6e\x2d\xae\x74\xc0\x1d\x4f\x86\x02\x55\xb8\x89\x61\x62\x32\x9d\x3e\xe9\x50\xd9\x52\x9f\xe4\xf7\x23\x8b\xb0\x9a\x89\x25\x24\xbf\x5f\xe6\x18\x52\xbf\x09\x41\x52\xcd\xc4\x6a\x1f\xcb\xba\x0c\xa7\xd3\x25\xaf\xa1\x9e\x4e\x43\x97\x63\x49\x38\x93\xf4\x49\x79\x06\x94\x61\x39\xeb\x39\x86\x4f\xca\xe9\x03\x77\x8c\xd4\x6d\xfa\xdc\xb0\x80\xf2\x23\x80\x08\xe4\xd6\xf3\x37\x54\x77\x2f\xcd\x52\xcc\xd1\x3e\x49\x5e\x0f\x17\xbf\x66\x66\xcd\xf8\x77\x14\x79\xb7\x22\x15\x71\xe2\xdb\x2c\x58\x15\x1c\xf6\x29\x97\x8a\xcf\xf8\x54\x1c\xb2\x17\xc4\x4d\x23\xc3\x7c\x7f\x64\x37\xf0\x63\xa2\x8f\x3e\xf2\x38\x1e\x5f\xa8\x14\x0f\x5b\xf7\xa8\xc4\x4d\x8f\x18\x09\xd0\x1e\x58\xc8\xef\x42\xb4\x9a\x13\x94\x08\xfc\x7e\xf8\x46\x70\xff\xd3\xdd\xe6\x2a\xb5\x92\x9d\x25\x7d\x76\xb7\xf9\x9a\xb4\x0f\x23\x22\x0b\xdf\xdd\x6d\xe3\x8f\x48\x69\x20\x4f\x21\xaf\xa1\x3b\xae\x10\x38\xcd\x4f\xf4\xe3\xc6\x0f\xe7\x0d\x13\x08\x95\x58\x09\x05\x4b\x94\x4f\xfc\xee\x66\xb5\x24\x3f\x61\x56\x1c\xba\xfc\x8f\x9a\xfe\xb0\x90\xcb\xce\x31\x15\xa9\x4f\xa2\x36\xb6\x22\x22\x9d\x08\x50\x1a\x76\x16\xdf\x2a\xc5\xe5\x14\x70\xb4\x75\x70\x40\x60\xb0\x81\x4f\x81\x1b\x09\x88\xc1\xec\xee\xbc\x39\x47\xbb\x53\x71\xc2\x1d\x4f\x1e\x11\xc8\x95\xc3\x87\xcc\xac\xee\x9e\xde\xbd\xdd\x87\xc1\x91\xdf\x14\x49\x3e\xf6\xd1\x5d\xe4\xa3\x17\xdd\x45\xbf\x79\x79\x6b\xa0\xbb\xa8\xc7\x96\x09\x15\xf6\x28\x86\x26\xb7\x3b\x26\xe4\xc8\xa8\xf4\x4b\x06\x3c\x64\x20\x24\x69\x8e\x48\x73\xe4\xa4\x46\xb6\x1e\xf3\x9b\x09\x1f\x4d\xef\xee\x76\x8d\xfd\xbc\x3d\xff\xa9\x5f\xb7\x98\x79\x8d\xfa\xcd\xde\xdd\xe2\xd9\x2d\x31\x4c\xee\xe4\x85\xca\xee\x58\x7c\x81\xe4\x4c\x92\x5d\x9c\xae\x0f\xe6\x75\xbc\x97\x47\x20\xb2\x9f\xe9\xa4\xd0\xd3\x53\x08\xca\x22\x3d\x35\xdf\x54\xf6\x37\x83\x20\x05\x9e\x12\x94\x76\x91\xda\xf9\xee\xa8\x82\x5f\x8d\x8c\x36\xfb\x1d\xef\x46\x33\x10\x2f\x0b\xcf\x0d\x39\x3c\xee\x1e\x48\x2d\x1a\x8a\x88\x48\x11\x95\xa3\x59\x8f\xcc\xff\x14\x49\x6a\x91\xd4\xb3\x8a\xb7\x11\xbb\xe3\x35\x4c\x52\x82\xbe\x26\xa6\x07\x1e\xbb\xab\xf2\xfe\x8d\x00\x89\x8d\x3c\x40\x46\xaa\x2c\xbc\x2c\xb2\x36\xbb\x6b\x22\xa2\x9b\x81\x7a\xde\x3a\x05\xdc\xf9\x7f\xe8\x59\x38\x46\x9c\xd1\xa3\x8a\x6c\x30\x47\x95\x67\x74\xfe\xd3\xf6\x74\x42\x8e\xca\xe8\x2a\xc4\xcf\xe0\xaf\xc6\xf5\xe5\x6b\xd2\xc0\xde\x47\x95\xd4\x33\xe0\xe4\xbf\x8f\x4a\x41\xbf\x03\x59\x7d\x27\xcf\x24\xa9\xad\xa4\x96\x7e\xd4\xab\x1f\xdd\x2f\x22\xa4\x63\xd7\xee\x7e\x82\x5e\xcf\x05\xe4\x48\xfc\x68\x59\xfe\xe8\x0b\x49\x86\xc4\x62\x71\xe1\xf8\xd3\xbd\xdb\x2f\x1d\x84\x77\xef\xa0\xca\x3a\x3f\x01\xce\x2c\x7d\xa8\xad\xe3\x9d\xb6\x8e\x4f\x06\x2f\x72\x77\x7e\xb7\xad\x7b\xd7\xd4\xa1\x48\x70\x12\x95\x1d\xb0\xb0\x1f\x0a\x98\x10\x6f\xc7\x32\x24\x47\xbb\xb4\xd1\x04\xaa\xec\x1e\x74\x2f\x72\x7c\xba\xf7\x52\xf1\xbd\x4f\xfc\xe7\x4e\xcf\xaa\x78\xae\x82\xd0\x09\xb4\x0f\x2b\xfc\xaf\x12\x3d\x09\xf1\xaa\x9e\x1d\x89\xed\x7a\x5c\xbd\xfb\x90\x28\xe9\x4f\xeb\x88\xba\x8f\x73\x84\x41\x84\x3e\xa1\x5d\x8e\xf4\x13\x1d\xdd\xe4\xef\x50\xb5\x91\x37\x8b\x18\xa9\x90\x47\xc6\xd9\x74\x2b\x5f\x33\x5c\xd9\xc4\xd3\x97\xd9\xde\xfa\xe8\x9f\x21\x21\x74\x9f\xec\xb6\x36\x31\xbe\xec\x91\x18\xea\x93\x23\x0c\x2f\x0b\x8e\x1f\xc7\x58\x7d\x2e\xd1\x35\x84\x88\xb6\x9f\xcf\x4a\x58\x02\xfd\x2b\xe8\xe5\x86\x85\x70\x11\xc6\x47\xae\x94\x39\x51\x0a\x42\x23\x11\x32\x0b\x7f\x61\x1c\xa5\x48\x62\x1c\x7c\x68\x46\xd1\xae\x40\xb3\x33\x1f\x9f\xe4\x34\x0e\x34\x3d\x0f\x7c\xdb\x8f\x48\xb9\xa4\xf5\xf3\xb1\x69\x0a\x78\xd3\x40\x0b\x9c\x0f\x25\xeb\x5c\x7b\x1e\x51\x16\x44\xdf\x32\x81\x26\x67\xb0\x08\x47\xd5\x53\x59\xa8\x36\x31\x57\xc0\x29\xba\xf5\x70\x11\x23\x89\xbb\x36\x78\x3e\xe9\x3a\x2e\xcf\x13\xbb\x69\xa2\xfb\x10\x28\x1e\xa7\xc3\x27\xb3\xcc\x72\x01\x0c\x57\x55\x20\xd0\xae\xb3\x88\x1a\x18\xeb\x23\x07\x80\x1f\x20\x35\xf7\x9b\x66\x59\xe2\x57\x71\xbb\x4f\x89\x83\xcb\xf8\xb2\xf4\x61\x5c\xd9\x8b\xe3\xff\x43\x14\x98\x37\x89\x40\x93\x6f\x41\x67\xce\x5d\x6f\xbc\xb0\x2a\x69\xb6\x02\x67\x64\xae\xb9\xfb\xf2\x49\xef\x74\xcb\x14\x59\xb2\x35\xcd\xb7\x60\x96\x99\x33\x60\x0e\x6a\xa7\xab\x0f\x9a\xf4\x7e\xf1\x7f\xf0\xaa\x54\x55\x25\x76\x96\xb3\x96\xaf\x7d\x06\xcc\xa9\xd4\xb2\x4d\x03\xda\xa3\xe7\x3f\xdd\x97\x4b\xae\x03\xc9\x81\x74\xfe\x0f\xec\xa0\x84\x23\x89\x9f\x55\x9e\x13\xd3\x3a\x5e\xed\x71\x31\xc1\xec\x8a\xdf\xb9\xea\xbe\xd2\xa8\xc9\x6b\x8d\xaf\x5e\x35\xfd\x16\xd2\x44\xfd\xe2\x0e\xc0\x57\xff\x70\xd7\x1f\x3d\xfe\xde\x79\x2f\x9d\x15\x59\x8f\xe4\xf5\x33\x9a\xbd\x7e\xdc\x33\xfc\xd1\xa3\xf1\x52\x00\x15\xad\x0e\x03\x34\xd6\xca\xd4\x99\x5c\x9d\x94\x40\xef\x00\xa0\x79\x54\x11\xc1\x24\xdf\x40\x2d\x3e\xa1\xd4\x09\x8b\xed\xd2\xc2\x7e\xe5\x2a\x4d\x44\xad\x58\x45\x5a\x8f\xdf\xf3\x62\xad\x24\xc6\x16\x6d\xf9\x00\xfe\xc6\x7b\x8e\x8a\x25\xd2\x72\xb8\x95\x81\xbe\x60\xb0\x1e\xd5\x27\x9c\xb5\x53\x20\x64\x91\xaf\x56\x5f\x2b\x57\xd3\xda\xd5\x7a\x97\x36\x82\x54\x49\x4c\x0f\xe2\xa7\x1e\x1c\xe9\xbe\x35\x1c\xe9\xee\xbe\xe1\x23\x6c\xdd\xed\x92\xa4\x86\x93\x45\x0c\xb1\xf6\xc9\xa4\x8b\x4d\x1c\x40\x27\x3c\x0e\xcd\x74\x85\xaa\x4d\x0e\xe4\x58\x29\xa9\xb5\x67\x3d\x4e\xdf\x7d\xdf\x2f\x0e\xb9\x4b\x67\xd4\xab\xdb\xb4\x7d\x22\xa8\xc2\x97\xd8\x97\xce\xa7\x1b\x15\x7c\xf6\x08\x4b\x47\x75\xfb\x75\x8b\x67\xd5\x71\xbb\x27\xd1\xed\xd5\xf9\x7e\x7d\xd4\xe0\xd4\xf2\xef\xd5\xcd\xc0\xab\xbb\x3e\x87\x0e\x53\xc0\xe0\x2f\xe1\xfc\xa3\x91\xd2\xad\x54\xc6\xfa\x6c\x07\xe3\xa2\xdf\x21\x41\x9e\x92\x09\xec\x8b\x75\x96\x8e\xbf\x40\x84\x6c\x2d\x3a\xe1\x1e\xa6\x2d\x93\x2b\x22\x0c\x6b\x15\x5f\x0c\x9e\x88\xf0\x2c\x86\x56\xa0\x3f\x7d\xcb\x99\xa5\xb9\x12\xd6\x6a\xf1\x23\x23\x7a\x56\xa9\xfc\xf8\x36\xc7\xda\xd3\x91\x46\x6b\x13\xcd\x1e\xed\x9b\x93\x2f\x97\xdc\x65\x66\x95\xd3\xcf\x80\x62\x8c\x5d\x08\x06\x12\x34\x21\x96\x40\xcf\xa1\xe2\x75\x55\x81\xa4\xe5\x51\xbf\x2e\x8f\xbc\xba\xbc\xd3\x35\x91\x7e\x79\x53\xa8\x16\x5c\xf2\x0a\x17\xa9\xf9\xc8\x94\xdc\xcb\x9f\x29\xb2\x3f\xfa\x31\x28\x10\x5b\xf1\xd3\xf3\x53\x7d\xd7\x21\xc1\xe5\x31\xc6\xbf\x3c\x1f\xd0\xa8\xa2\x8b\x43\x6a\x13\x8a\x17\x54\xac\xfc\x29\x10\x54\x39\x7f\x84\x75\xbc\x71\xf9\x39\x06\xbd\x7c\xbe\x73\xd5\x5c\xf3\xbc\xf0\xb4\x40\x8d\x46\xae\x7e\xfa\xdd\xb2\xd9\x16\x28\xfa\xd5\xf1\x5e\x31\xa3\xe2\x87\x06\x59\xe5\xce\xbb\xa0\x04\xb5\x5f\x22\x84\x9b\xe9\x1a\xbe\x0c\x49\x2f\x1d\x8f\xb2\x8a\x28\xd7\x7b\xbe\x1a\xa6\x54\x56\x57\x84\x1c\xa3\x9a\x3d\x1b\x48\x30\xc3\xc1\x37\x30\x19\x34\x7e\xd1\x25\x0c\xeb\x0d\xc0\x56\xac\xd9\x51\xef\x4c\x35\x3a\x7a\x90\x71\xdb\xab\x49\xaa\xf3\x99\x7e\x60\x22\x21\x24\x4b\xdf\xc7\x24\x8d\x9d\x2f\xd6\x40\x5e\x79\x6e\xe5\x32\x11\x7a\xaa\xf9\x15\x79\x8c\xcc\x16\x62\x19\x30\x77\x6a\xc1\x45\x6e\xa6\x32\x6d\x25\x41\xa6\x9f\xba\x04\x02\xf2\x33\x31\xc6\x03\xc2\x66\x89\xc9\xe7\xe3\x6b\x0b\x56\x29\xd4\x07\xde\x61\x30\xc0\x46\x61\x7f\xca\xbf\x4c\xf4\x05\x7d\x04\x34\x4f\xc9\x0c\x78\xb6\x9c\x21\xb7\x01\x57\x38\x97\x88\x31\x41\xf0\xe1\xde\x30\xc0\xb8\x42\xe2\x3f\x9d\x59\x5f\x41\xe7\x9e\x57\xc8\xfc\xc7\xaf\xab\xb1\x9b\xbc\x7f\xb4\x5a\x0b\x14\xf3\xb8\x58\x88\xaa\xaa\xad\x7a\xc8\xbf\x88\xac\x65\xdc\x64\x60\xa2\xa8\x75\x85\x88\x79\x6d\x92\xaa\x4a\x93\x8a\x7e\x09\x0c\x1e\xe8\xa3\x43\xb2\x2b\x90\x13\xc4\xbf\x75\x6e\x06\xc2\xcf\x4c\x9f\xde\x4c\xeb\x22\x6c\x81\x14\x99\xba\x08\xe0\x60\x33\xa6\x86\x8c\xc4\xab\x5c\xd9\x77\xdd\x42\x05\xd8\x78\x00\xac\xe4\xcc\x52\x1d\x84\x15\xb7\x8b\xd9\xd0\xa7\x71\x14\xc2\xe7\xd1\x5c\x3a\x64\x7c\xa9\x84\x93\xa2\x6f\x25\xf6\xab\x8a\x28\x2a\x2e\xe3\xea\xde\x54\x12\xd5\xbb\x63\x73\xd5\x2b\x84\x45\x82\x12\xc9\xca\xef\x2d\xb0\xaa\x41\x56\xec\x10\x10\xf4\x1a\x5c\xf5\x49\xd6\x79\xfb\x55\xc3\x43\xb3\x5d\x10\xa7\x9f\x20\x1c\x85\x07\x67\x3b\x0d\x93\xd5\xc7\xa0\xb3\x8d\xab\x66\x07\xb7\xd9\x99\xdb\x3c\x03\xcc\x4e\xdc\xe6\xcd\x74\xee\x2d\xef\xf6\xc5\x31\xc5\x97\xcc\xa4\x7c\x9b\x01\x62\x88\x75\xd5\xd1\x2e\x4d\xab\xbe\xbf\xde\xaf\x71\xc3\x7b\x42\x6a\x78\x17\x89\xe3\xa0\x49\xc0\x02\xa5\x81\x61\xc8\x7b\xfe\x4f\x30\x8a\xe8\xe7\xe6\xa7\x05\xd1\xf5\x7c\xa4\x89\xfb\xdc\x92\xc8\xcf\xad\x49\xfc\xdc\x6c\xb9\xe6\x29\x15\x93\xa9\xaa\x4d\x41\x73\x49\xa7\x5e\xc1\x55\x47\x75\x81\x54\x89\xa0\xc8\xcd\x17\x19\xf8\x12\x79\x96\x70\x4f\xe9\xe1\x43\x0f\x3d\x1c\x07\xd5\xdc\x70\xc8\xd2\x48\x38\x34\x07\x82\x3e\xe3\x49\xa0\xe6\x83\x01\xd9\x63\xef\x69\x0c\x4d\xea\xe9\xab\x78\x75\x5e\x5d\xfe\x1f\x81\x0f\x97\x33\x7e\xa6\xc0\xba\xfc\x45\x06\x9e\x56\x04\x7c\x31\xc1\x0e\xbf\xf6\xa0\x8f\x2b\xf6\x70\x6f\x32\xcf\x0b\xf6\xa8\xbd\xc0\x0f\xab\xd5\x47\x35\xac\x3e\x2a\x44\x64\x6f\xcf\x89\xb8\xd5\xc7\xdb\x37\xf7\xe2\xc2\x20\xe8\xab\xe1\x77\xae\x89\x40\x60\xd7\xd6\xe9\x1a\xe4\x1c\xb9\xb3\xe6\x66\xc2\xad\xb0\x1e\x78\xb7\x52\x62\xae\x85\x18\x58\xee\x42\xe7\x23\x4b\x2c\xc9\x9f\x0b\x4f\x00\x95\x5e\xe0\x67\x4d\xbb\xbc\xbc\xd7\xf5\xe1\xbd\x1e\xd2\x13\x16\x9f\x71\x6a\xb1\x45\xf8\xaf\x3e\xc2\xa1\xb9\x4c\x6c\xab\x64\x26\x28\xcd\x64\x4f\x63\xf6\xc0\x16\x8a\x1a\x60\xc9\x4d\x9f\x3a\xef\x78\xe9\xbc\xf3\x43\xe7\x3d\x94\xa6\xda\x8d\x59\xcf\xe5\x4f\x0f\x92\xfd\x15\xd9\x5a\x3d\x9f\xe2\xed\xa1\xf1\x41\x08\x56\x3d\x59\xd7\xe1\x34\xab\x7a\x39\x8e\x89\x02\x5d\xa7\x63\x79\x6b\xe2\x13\x97\xb2\xf4\x69\xa1\x4b\xe1\xf5\x0a\x5b\x55\x1f\xc1\xe9\xa1\xf7\x21\xb1\xeb\x2c\x18\xf7\x0f\xae\xf0\xaa\xfa\xf9\xd3\xb3\x3b\xb8\xca\x65\x34\x4b\x19\x8d\x52\x76\xc7\x47\x8c\x36\xb7\xef\x59\x4d\x29\xa8\xec\x41\xd4\x26\xa5\x21\x9f\xfc\xa9\x64\x16\x46\xd7\x73\x90\x56\x27\x87\x28\x49\xb6\x03\xaf\x82\x28\x2e\x0c\x24\x0d\x39\x0e\x4a\x7f\x46\x8b\x90\xd1\x20\xe4\xfb\x91\xb3\x7c\x5f\x72\xf7\xa9\xcb\xc8\x9f\xfe\xb5\x4f\xb7\x46\x26\xeb\xf8\x24\xa7\x73\x70\x54\x48\x85\xd1\x39\x10\x59\xa9\x07\x2a\xfa\x9f\x54\xf6\x3c\x41\x6d\x81\x33\x88\xc1\x17\xfa\x00\x06\x0d\x05\xb3\xfc\x4c\xf5\x24\x67\x5d\x42\xcf\x99\x9f\x61\x63\x55\x42\xca\xfa\x44\x0e\xa3\x69\x49\xa3\x93\xfb\xa5\x39\x94\x79\x54\x9d\x8b\xfb\xe5\xc9\x72\x2e\x8f\x28\x0d\x41\x2e\x8f\x11\x29\xa0\x82\xf7\x72\x7b\x2e\x32\x05\xc4\x40\x27\x97\xa8\x8e\x62\xe6\x86\x3f\x17\x7e\x43\xa4\xe7\x92\x72\xdf\x29\x65\x65\x4e\x02\x26\x16\xb7\x58\x83\x05\x52\x5d\xd9\x6f\x32\xa4\xba\xb2\xc3\x63\x88\x75\x2b\xd6\x26\x33\x9e\x78\x12\x24\x49\xe4\x07\x9e\x7a\xae\x3a\xf6\x95\xfe\x3b\xd7\xc4\xaf\xff\x09\xc8\xb0\xca\x3b\x09\xb9\x16\x3f\xb5\x78\x8d\x22\x57\x3c\xc6\xdd\x73\x95\x2b\x6c\x3d\x57\xc8\x44\xd5\x8b\xe8\x5d\x5e\xc0\x16\x55\xf2\xa9\xea\xfa\x96\x1e\xad\xe5\x55\xcc\xd0\xe5\x8a\x1a\x2e\xad\x77\x7e\x17\x87\x94\x00\xc9\x39\x8c\x33\x9f\xe8\xee\xb9\xeb\x8e\x7a\xcf\x43\x25\xeb\x33\xe2\x52\x1e\xba\x3a\x2b\x80\xb3\x80\x10\x6c\x53\xba\x79\xdc\x41\xff\x52\xc3\x06\x26\xfa\x82\xd8\x06\x8d\xee\x65\xbd\x24\x8f\x9a\x72\xa0\x08\xbf\x35\x24\xbe\x8b\x28\x0a\xb5\x6b\x7a\x84\x94\x55\x09\xe6\x8d\xc6\x9d\x91\x64\xda\x9b\xdb\xd4\xfc\xd6\x5a\xfd\x4e\xb0\x41\xba\x3f\x9a\xea\x1f\xfc\x63\x34\xcf\x18\x75\xc1\x30\xe7\xef\x8f\xbc\x1a\x24\x11\xff\xa8\x6f\xf2\xf6\x20\x35\x3c\x72\xd4\x81\x91\xae\x6c\x01\x76\xb6\xa0\x87\x14\xfb\x5c\x52\x21\x24\xbb\x1a\x34\xe5\xf7\xd2\x7b\x32\xb4\xc1\x3c\xb1\x0f\x36\xa0\x85\xd9\x83\xbc\x42\xbb\x59\x93\x35\xa9\xea\xf4\x99\x1a\x46\xd1\x7d\x38\x87\xaa\xed\x99\x55\xa7\x67\x5b\x4d\x34\x4a\xaf\xce\x6e\x48\x2e\x58\x8b\x08\x1a\x70\xad\x32\xd5\x09\x8d\x3d\xb8\x64\xd6\x1e\x8f\xb0\xc3\x63\xc2\x70\x70\x8a\xf1\x19\x76\x99\xdb\x1b\x94\xe0\x42\xdc\xa2\xfb\xd5\x48\x62\x13\xae\xe2\xd0\xcd\x7c\xa0\x83\x51\xe3\x19\x43\x75\x41\xdf\xfc\xe9\x55\x5f\x95\x20\xa0\x82\xc0\x7a\xe5\x33\x3a\x5a\x2c\xe9\xef\x08\x1c\x4e\x6a\x26\x5a\x52\x98\x08\x60\x17\x9c\x12\x4a\x2c\x35\x88\x39\x17\x22\xf7\x2d\x05\xf7\x28\x47\x32\x84\x0d\x39\x7f\xce\x64\x73\x1f\x05\xb9\xf2\x02\x2e\x9f\x4a\xd4\x05\x8c\xf5\x84\xe2\x4a\x10\x13\xa3\x96\x95\xa9\xed\x97\x4b\xc9\xc3\x42\x8e\xb9\x4e\x38\x0c\xa7\xe3\x63\xd1\x16\xa6\x55\x80\xa9\x49\x24\x56\x0d\x6a\x3e\xbc\xd1\x1a\xca\x9a\x1d\xc2\x5f\x1e\x6c\x0a\xf4\x15\x0d\xc8\xe3\x55\xc6\xcd\x8e\x91\x66\x0e\xb1\x5b\x24\xb8\xf9\xaa\x96\xbe\x25\xd2\xaa\xd6\xa8\x16\xfc\x14\xf5\xfa\x45\xab\x66\xab\xbf\x8b\x4a\xd0\x11\x3a\x05\xac\x0a\x1f\x88\x8c\xff\x29\xf4\x49\x4d\x9f\x70\x81\x1e\x04\xad\xa5\xd2\xd5\x50\x2e\xc2\x08\x8e\xe3\x35\xad\xe1\xf2\xe3\x64\x6b\xce\x4d\x69\xa6\x46\x97\x82\x84\xa0\xd2\x49\x02\xea\xc7\x63\xb4\xc5\x5b\x3d\x5a\x6f\x04\xfe\x9d\x38\xce\xc8\x4c\xae\x2c\x4d\xa8\xc9\x9e\x35\x91\x47\xc1\x06\xa7\xf6\xbc\x17\xa4\xbc\xcd\x1a\x1f\x5a\xbf\x58\x68\x8f\xb0\x35\x71\x01\xd2\x25\xc0\x10\x91\x20\x4b\xce\x2c\xdc\xc4\xf5\x99\x8e\xf8\x95\x37\x71\xc9\x18\x95\x81\x02\x8c\x8a\xca\x50\x3e\x65\x22\x09\x91\xb2\x1b\x35\x60\x56\x17\xa9\x77\x9a\x65\xbf\x56\x9b\xdb\xd7\x70\x2c\xc1\xb3\xcc\x40\x8b\x1a\x24\x08\x2a\xe9\x4b\xac\x89\x2d\x16\x97\x96\xa4\xe1\x2a\x8c\x92\xd5\xd1\xe8\x96\x9f\xe9\x2b\xd9\x38\x24\x2a\x44\xae\xb7\x30\x86\x34\x3e\x25\xb3\x08\xf2\xed\x35\x3f\xf2\x34\xd7\xb3\xa4\x42\x54\xee\x9d\xca\x8f\x91\x87\xda\x94\xcc\xf8\x71\xdf\x5d\xff\xac\x42\x66\x80\x45\xac\x9d\x31\xea\x13\x05\x43\x2c\x99\x50\x9f\x7c\x5f\x3e\x8a\xe2\x53\x58\x6a\xca\x22\x1e\x0e\xbc\x2d\x8e\x71\x73\x44\x58\xd8\x47\x46\xc1\x96\xb0\x7a\x1a\xaa\x9b\xd5\xa7\x44\x97\xfc\xfc\xd4\x21\xe1\x4d\x48\x9e\x41\xe7\x34\x4b\xa8\x48\xeb\x06\x52\x3b\x72\x0f\xef\x15\x2b\x59\x3e\xb0\xe5\x70\xf1\xc2\xcd\xaa\x49\x50\x63\x5a\xbf\x8a\x73\xb6\x9a\x35\xbc\x68\xc8\xe1\x84\xcd\x63\xbc\x4a\xe5\xfe\x83\x92\xb2\x18\x94\x11\xf7\xcb\x52\xd5\xf8\x1d\x31\x85\x56\xdc\x78\x71\x91\x89\x49\x27\x52\x86\x95\x1f\x66\x3c\x44\x80\x67\xcb\x81\x7e\xe1\xc7\xf2\xcd\x41\xf4\x88\x90\x3a\xeb\x9e\x09\x96\x11\xc6\xa3\x3b\x75\x23\xe2\x87\x44\xdc\x90\xfa\x4a\x48\xce\x31\x88\x10\x22\x6c\x38\xe0\x61\x2b\x79\xcc\x4a\x6a\xa7\xce\x0d\x05\xb4\x2e\x88\x63\xd0\x2e\x56\x86\xf5\x01\x2f\x1f\x51\x3e\x2f\x1f\xbf\xb0\x94\x27\x6f\x89\xa9\xee\x1b\xe6\x72\xc4\x40\x6a\x96\x77\x3b\x0d\x08\xab\x77\x2d\x27\x33\x6f\x72\x36\x8b\xe1\xa8\x53\x1b\xef\x09\x11\xe9\x1f\x40\x35\x3e\xfc\x4e\x13\x9b\xcc\xeb\x73\xd5\x73\x04\x3c\x86\x11\x04\x92\x6a\x51\x2a\xfd\x83\xfe\xee\x4d\x02\xbf\xf5\x09\x1f\x82\x39\x4a\xa3\x4c\x48\x86\x8a\xd5\xdf\x22\xff\xb3\x57\x9f\x58\x7a\x12\xa3\x83\x9d\x96\x9c\xbc\xb4\x0e\x0a\xbb\xda\x94\xbf\x26\x61\x36\x99\x58\x0b\xe0\x3c\xf5\x8d\x52\xa3\x86\xe4\x53\xd0\x64\x06\xd9\x54\xaa\xc1\x1d\x3e\x16\xd9\x76\x21\xc2\x31\x09\x38\xc2\x33\x85\x47\x11\x2c\x4d\x87\x9e\x34\xa1\x12\x55\xf7\x61\x6a\x90\x27\x46\x08\xfc\xca\x3a\x68\x0d\x1b\x7c\xdb\xc4\x44\x37\xb8\x6a\xd8\x90\xbd\x61\x5b\x96\xd2\x89\x7d\x2d\x82\xd7\xb0\x55\x27\xcf\x8e\x18\x16\x7b\x7c\xd1\x50\xb5\x47\x0a\x5a\xa9\x03\x8d\x7f\xbd\xce\x3f\x6b\x58\xf6\x5a\x41\x12\x2c\x5e\xba\x4f\xce\x50\x72\x3f\xec\x57\x3e\x3f\xd3\x06\x13\x18\x48\x56\xed\x17\x52\x4b\x28\x27\x77\x98\xe5\x94\xbb\xd9\xe9\x8b\xad\x9e\x6f\x0b\x08\x8f\x5d\xf1\x13\x62\x52\x50\x78\x0f\x52\x10\xb7\xb5\xc1\x06\xe0\x61\x7f\x36\xb3\xd6\xa6\x3d\x99\x03\x33\x92\xb4\x3d\x45\xd1\x69\x91\xbc\x27\x2a\xce\x78\xcd\x49\x54\x99\x0a\x11\xd6\x1d\xcc\x1a\x76\x91\x1d\xc8\x12\x9f\x5a\xd1\xf8\x33\x82\x05\xdd\x6e\xac\x41\x0f\x93\xea\x6b\x67\x6a\x7c\x84\x7b\x6e\xef\xd7\xa0\x27\x32\x09\x59\x4e\xeb\x46\x64\x0d\x0f\x87\x12\x7b\x48\x40\xf2\x9a\x25\x81\xbc\xab\x01\xaf\xdc\xb2\x1a\x34\x04\x82\x39\x1a\xa9\xf0\x42\xda\x98\xf0\x18\x75\x57\x43\xf6\xea\x74\xc8\xed\xd3\xeb\x2e\x78\x0d\xe7\x89\x49\x5f\x0d\x67\xfc\x94\x4b\xf2\xe1\x44\xb4\xcf\x9c\x6c\x1d\x6b\x65\xd3\x54\xbd\xc4\x92\x80\x09\x45\x23\xa4\x1b\xa7\x82\x78\xdb\xb4\x86\xff\xc6\xa9\xb1\x82\x3c\x7f\x82\x22\x37\x5a\xd0\x39\xa0\x39\xcd\xf3\x06\x47\x79\x93\x28\x46\xeb\xf9\x83\x9e\xf0\x62\xa0\xf1\xb9\xbd\x48\x98\x04\x0c\xc0\x2a\x71\x59\x30\x9c\x65\xad\xab\xf3\xd2\x0a\x93\xc4\x52\x21\x18\x56\xa4\x8e\x21\x02\xc9\x3d\x6b\xc5\xd1\xec\xc2\x17\x95\x66\xe4\x12\x3c\x4f\xba\xf0\x54\x43\x9e\x95\xa1\xe8\xe9\x14\x41\x32\x74\x0e\xc5\xab\x93\x65\x64\x10\xec\x44\x37\xe1\x2b\x6c\x32\x8e\x11\x68\xda\xfd\xca\x2c\x35\x96\x89\x3e\xe3\xcb\x2f\xd5\xc9\x2b\x2d\x2c\x97\x4e\x95\xb0\x9b\x8e\x9d\xbb\x15\x26\x55\xb0\x20\xde\xba\x85\x5d\x43\x29\xd2\xec\x06\x79\x6a\x91\x40\xb7\x0c\x37\x01\x77\xbd\x06\x48\x37\xed\x35\xd8\x51\x60\xc1\xdd\xb4\x51\x22\x4d\x9b\x83\x86\x76\x61\x99\x99\x87\xa6\xb6\x65\x2f\x43\xd6\x3b\xb4\x1c\xe6\x7e\x78\x0d\x73\x37\x7c\x62\xf1\xbd\xbb\xa4\x4b\x00\x9a\xb5\x5d\x9a\x8c\xae\xed\xc5\xdc\x20\x9e\x58\x5d\x5a\x9f\x17\xc6\x5d\x2e\xd1\x64\x24\x79\x30\xee\x57\xd0\x0a\x36\x92\x58\x4b\xb6\x1e\x54\x21\x81\x43\x10\x0f\x24\x82\xce\x85\xf2\x7e\x39\x0e\x30\xef\x97\x69\x24\xd4\xf4\x45\x32\xe0\x14\x0b\xc8\x28\x6b\xf7\x92\xcf\x98\x0f\x5d\xb0\x30\xac\x26\x59\xf6\x22\x6a\x8e\x31\xf3\x70\x21\xcf\xcd\xd1\x89\xc5\x72\x6e\x5d\x1b\xf7\x4c\xc9\xc3\xb1\x62\x95\xfb\x23\x2a\xd7\xcc\x5c\x2e\xde\x96\x41\xfb\x6c\x1c\x0c\x83\x00\xac\x21\x12\x68\xb0\x8b\x65\xa0\xba\xae\x09\x12\xe1\x83\xdd\x43\xdc\x99\xcc\xce\x5e\x6d\x69\xb3\x66\x3e\xfd\x59\xf3\xd8\xa2\x17\x89\x5b\x4a\xb4\x89\x27\xac\x1e\x8c\x53\x97\x08\xa9\x06\x5a\x83\x96\xc9\xf9\xb0\x75\xa2\xa1\x92\xe7\x7a\x1d\x9e\xff\x36\xe9\x00\x86\xb7\x33\x62\x75\x70\xf5\x18\x8f\x87\x74\xf0\x43\xea\xf9\x40\x72\xc6\xac\x20\x78\xaa\x70\x4a\x61\x24\xf4\x34\xbd\x24\x22\xaf\x7b\x1d\x3a\xfe\x18\xd8\x20\x26\x24\xf5\x79\xb4\xae\x01\x60\x97\x93\x10\x8e\x45\xd4\x21\x0f\xa5\x33\x50\x63\x5d\x87\xfa\x14\x97\x72\xcb\x32\xe6\x01\xe1\x18\xca\x4b\x83\xbd\xd1\xe4\xa4\x43\x65\x9d\xa1\x3b\xf6\x83\x07\x1c\x43\xda\xd3\xb1\x89\xa4\x0d\x02\xdc\x9b\xb2\x4a\x2e\xf9\x99\xc7\x3e\x36\xaf\xef\x6e\x19\x14\x67\x8c\xb9\xb2\x01\xb7\x45\x9f\x4a\x65\xd8\x5e\x11\x21\xb3\x0a\xb3\x96\xf2\xe0\x60\xa4\xe0\xe4\x61\xa3\x3e\x36\x04\x36\x62\x78\xc4\x0c\xeb\xf0\xf3\x81\x75\xeb\xf1\x58\x20\xe7\xfe\x78\xf4\x6b\x24\xc9\xd0\x71\x6a\xc8\x36\x59\x19\x73\x0e\x3e\x96\x95\x38\x0a\xcd\xc9\x2a\x26\x41\xa0\xa0\x23\xf2\x71\xd3\xcf\x53\xf7\xcc\x35\x67\xdc\x18\x7e\xf1\x1b\x1c\x7d\xdc\x1a\xdd\x1b\x19\x80\x51\x2a\x01\x5d\x31\x1e\x3a\xa6\x1e\xfa\xc8\x30\x01\x2e\xd7\x81\x0d\x87\x91\xce\xd6\x65\xe5\x94\xa1\x3a\x4b\xfa\xe6\x7c\x1f\x45\xf7\xb6\x59\xc0\x25\x27\x96\x80\x3a\x66\x28\xf6\xea\x16\x0e\x55\xac\x7b\x23\x26\x59\xc0\xa0\x8b\xbd\xcc\x17\x5e\xf7\xcb\xf1\x1b\x05\xa4\xa3\x1f\xc7\xc0\xd3\x59\x8c\x12\xdb\x7e\x48\xd5\x20\x95\xab\x46\x7d\x20\xe8\x07\x02\x7e\x70\xec\x4e\xf5\xe2\xb4\x6c\xaa\xa7\xc4\x28\xc9\x49\xff\x51\x93\xe5\x6d\x2d\x9e\x8a\x4b\xe2\x28\xf7\x9f\x05\xa8\xe7\x2c\xce\xae\x8f\xf6\x04\xe7\xc3\xe5\x43\x97\x1f\x46\xef\x81\xff\xf3\x9f\xfe\x76\xb2\x59\xfa\xf6\x9e\xff\xe4\x2c\xbb\x00\x8a\x30\x21\x36\x8e\x0f\x9a\x97\xbc\x7d\x7c\xe9\x4e\x38\x43\xcd\xdc\x37\x9f\x88\x14\x0b\xa9\x7f\x60\x21\xd9\xc9\x82\x77\x38\xe5\x30\xbf\x00\xf6\x39\x9c\xa7\x98\x48\x24\x09\x70\xea\xde\x21\x46\xfa\x4f\xfc\x27\x2d\xcd\x3b\xa0\x06\xbc\x75\x33\xf1\x1d\xd0\x28\xbc\x43\xef\xbc\xd4\xfe\xce\x1a\x70\x8e\xfe\xe4\xb2\x79\x67\x84\x5f\xfe\xf4\x0f\x6e\x13\x11\xca\x25\x77\xf9\xa8\x45\x90\xab\x01\xb1\x50\x28\xbf\x3e\xe5\xc2\xaa\xfc\x07\xc7\x93\x3f\x3a\x82\xc1\xb6\xcb\x67\xd9\xd2\xf9\x58\x8b\xfd\x59\x1a\xec\x4f\xe5\xdb\x07\x0b\x94\xde\x88\x89\xf8\xa5\x47\x7c\x7e\xb5\xe5\xf9\x45\xcb\x33\xb6\xf0\x77\xc8\x5b\xc3\x7c\x73\x7c\x9c\xdc\x7e\x8f\xb8\x63\xd7\x8e\x21\x9b\xc7\xa0\x0f\x11\x8e\x18\x1d\x25\x7e\x44\x3c\xc3\x33\x62\x72\xf5\xcf\x88\x59\xa6\x0e\xac\xd3\x45\xe2\x8d\x09\xa9\xe5\xb7\xcf\xe4\x5f\xa6\x53\x0c\xe5\x34\xd7\x83\xdf\x60\x11\x8d\x55\x96\x1a\xeb\x68\x4c\x09\xf2\x4b\x1b\x76\x0c\x6a\x6a\xe9\x5e\xc2\xbf\x1a\x66\x27\x1f\xbe\x26\x60\x59\xf9\x12\xa2\x2b\x5f\x4c\x2a\x27\x89\x67\xf1\xb9\x76\x85\x9c\x6f\x02\xa7\x10\x02\x79\xc6\xad\x5a\x10\x83\x67\xc4\x26\x82\x77\xca\xdf\x5d\x84\xef\x1a\xa4\x5c\xfe\x92\xc2\x3b\x45\xf0\x02\x89\xcb\xa0\x6f\x38\x42\x2a\xaf\x89\xe4\x65\x40\xd1\xba\xb7\xea\x4e\xaf\x7e\x54\xb1\x52\x29\x14\xae\xef\x46\xa8\xce\x13\xa1\x46\x70\xdc\x45\x4f\xe8\x8c\x9b\x2f\x09\x50\x03\xe8\xd2\xc1\xfd\xa1\x61\x6a\xa7\x99\x34\xe8\xea\x2d\x12\xc5\xa6\x6b\x16\xfb\x34\xee\x30\xed\x30\xdd\xaa\x7f\x05\xd3\x3f\x54\xf6\xb2\x61\x58\xb3\x27\x09\x98\x8c\x1d\x96\x7c\x5f\x10\x2c\x5f\xb9\x56\xd5\x0d\x07\x34\xff\xf3\x7b\x37\x00\x9f\xfe\x1b\xba\x16\xa7\x44\x5d\xc5\x19\x96\xc6\x3c\xf9\xd3\x22\xc6\x18\xde\xf2\xde\xb4\x59\xcb\x2a\xcc\x93\x71\xed\x13\xc1\xbb\xca\x97\x74\x05\x35\xd3\x0c\xc7\x09\xdd\x7c\x9a\x67\x2c\xff\x6d\xd1\x37\x4f\xda\x2e\x6b\x23\x8c\x73\x7c\x19\xac\x9b\x39\x26\xb2\xe8\x53\xa3\x0e\x8c\xa8\xb7\x5c\xcb\xf4\xb3\x7b\x91\x57\xaf\x44\x8f\xe4\x0b\xab\xce\x32\xbc\x99\xe8\x4c\x62\xba\x86\x2f\x50\x6d\x0c\x4b\xd7\xb0\x22\xc1\x7b\xc8\x13\x52\x8d\x4c\x6e\xdf\x3d\x0a\x68\xa7\xf1\x5e\x45\x82\xc1\xd4\xab\x9d\xda\x82\xb1\x18\x16\xab\x54\x42\x24\x79\x8c\xcd\x8e\xae\x7e\x1b\x91\x2f\x85\x58\xd0\x0d\x28\x26\xd1\x85\x1b\x6e\x20\x2d\x64\x92\xd0\xbe\xe9\xef\xa4\x2f\x6d\x1c\x93\x89\x76\xb5\xe0\x54\xd2\x2b\xec\x2e\x82\x5f\x95\x53\x63\x3f\x4d\xcb\x5a\x89\x56\xa1\xb0\x42\xeb\xea\x73\x3d\x2c\xb1\xb9\x1e\x66\xa7\x2d\x19\x92\xdb\x0c\x19\x52\x0b\x8c\x4d\x93\xee\xeb\x42\x0c\x57\x7f\x04\xb3\x55\x07\x10\x0f\x99\xcc\x27\x66\xfd\xcb\x6c\x96\x95\x88\xb0\x15\xd8\x16\x37\x96\x95\xa3\x59\x56\x8c\xd6\x33\xb2\x5f\x2e\x14\x30\xea\x0a\x2e\x88\x5d\x05\x51\xab\x17\x3c\xe0\xd7\x3d\x04\x2c\x31\x7a\xa6\xfc\x8e\x1e\x5f\x95\x51\x38\xca\xa3\x21\x00\x81\x5a\x17\xfe\x0e\x17\x2c\x87\xfe\x8e\xa0\xa3\x21\x65\xd5\x22\x42\x64\xda\xd2\x95\x74\x65\x68\x90\x76\x5e\x88\xc0\x47\xb4\xcf\x52\x80\xb9\x55\x07\x19\x4b\x09\xca\x69\xda\x53\x51\x9e\x8c\x67\xdd\x87\xa4\x94\x91\xdc\xe1\x6e\xad\x0b\x26\xf3\x57\xb1\xd8\x25\xa4\x31\x3b\xac\x0a\x1d\x5a\x67\x8e\x23\x98\x4e\x40\xa4\x0e\xbe\xf5\xcf\xa0\x5a\x1b\x73\x1c\x43\x77\xef\x41\x4c\xdb\xbc\xf0\x45\xe2\x71\xc9\x99\x04\x81\x68\x08\x20\x64\x98\x61\x0e\xda\x9d\x30\x84\xe5\xff\xf2\xa8\xa6\x3f\x50\x70\x07\x8b\xc0\x43\xd2\x0f\x7b\x7a\x4d\xc8\xac\xf2\x4c\xd4\x92\x5c\x02\x41\xd5\xb6\xc7\xce\x61\xf3\xeb\xf1\x73\xd1\x58\x0d\xa7\x33\x4b\x87\x6d\xa3\x19\x31\x97\xdd\x02\xe5\x53\x44\x0b\x41\xa7\x72\xe4\xa5\x60\xb2\x15\x4c\xc6\xee\x33\x88\x7a\x99\x67\x5c\x32\xa2\x92\x2d\x26\xb9\xa6\xc5\x18\xd9\x55\x73\x90\xac\xe5\x6f\x50\xad\x12\x46\x14\x46\x84\x79\xf7\xf8\x32\x8d\x1c\x93\xa1\x56\xbd\x5c\xda\xe1\xcf\xcb\xa5\xee\x50\x1a\x4a\xcc\x1e\xb5\xc9\x16\x39\x61\xd3\xac\x36\x0f\x64\x8d\xe8\xf1\x0a\xd6\x1e\x10\x86\x6e\xb6\x32\x9e\x71\xb2\x0b\x76\x0b\x96\x0c\x7b\x3c\xe0\x07\xcb\x78\x15\xeb\x22\xee\x55\xe2\xf2\x78\x84\x68\x63\x8a\xc7\x23\xd4\xdb\xe0\x0f\x50\x0c\xd3\x25\x61\x73\x6a\x8d\xea\xe3\x51\xf5\x2d\x3d\x21\x19\x2d\xc3\xa3\xba\xc0\x40\xf3\xe5\x3c\x63\xbe\x97\xce\xea\x3c\xab\xb3\x4f\x57\x89\x7a\x8f\xa7\xf4\x61\xe4\xad\x36\x9d\x21\xaa\xaa\x36\x43\x37\x7b\x2a\x50\x9b\xa1\x87\x5e\xb0\x43\x09\x23\xb9\x60\x9f\x77\xd0\xd8\xdb\xc0\x07\x9d\x5b\xb8\xa1\x61\x75\x0c\xb5\x3d\x34\xfd\xea\x23\xb5\x5a\xe8\xd4\xa2\x43\xbe\x11\x52\xc7\x71\xcf\x57\x8e\x28\x39\x65\xda\x27\x46\xbe\x37\x9b\x22\xd7\xba\xe8\x31\xfc\x59\x5e\xfe\x27\x16\xbc\x55\x62\xc6\xb0\xc5\x18\xa1\x84\x73\xb1\x74\x26\x58\x79\xaa\x0e\x4e\x47\x4c\x82\xbc\x8f\x51\x85\xb0\x28\x56\x97\xd1\x9f\x13\xa9\xdc\xc2\xc9\x7e\xcd\x8c\x0f\xe9\x0b\x9c\xa3\x52\x25\x88\x9b\x32\x84\x17\x60\x29\x2c\x1f\x14\x98\xd9\xca\xdd\x4c\xf4\x5c\x97\x62\xd3\xb5\xa8\x62\x14\xca\x17\x41\x11\xa6\x0d\xaa\x62\xb9\x68\xac\xab\xd1\x04\xd1\xe4\x28\x45\xe9\x28\x45\xf2\xba\xb7\x92\x87\x88\x18\x85\xb3\x14\x84\xa8\xd1\xed\xe2\xe9\x6e\xb8\x51\xa6\x36\xc1\xbe\xad\x22\xc1\xb7\x43\xe7\xb1\xea\x69\x44\xee\x2d\x68\x6f\x70\x6f\xfa\x88\xb8\x60\x1b\x72\xde\x9b\x4e\x9b\x92\xbb\x7d\x0c\xb3\x55\x54\x86\x38\x28\x43\x00\xb3\x66\xf1\xe3\xee\x0b\x86\xfd\x84\xaf\xe2\xf6\x75\xf6\x69\xb7\x1c\xbf\xe6\x85\x36\xd3\xd3\xe3\x5c\x04\xa9\x41\xb7\x30\x33\xda\xb8\x9b\x86\xf5\x48\x52\x89\xe1\x31\xdd\x32\x83\xc9\xb0\x0f\x59\x30\x62\x3b\x87\x46\x37\x46\x46\xb7\x0d\x8c\x68\x88\x63\x52\x55\xfe\xe1\x52\xd8\xaa\xa3\x91\x49\x0e\xe3\x6b\xfa\x5c\x4f\xd3\xc5\x42\x80\x11\x8d\x70\xd2\x47\xff\x26\x34\x4b\x9f\x5f\xc4\x8b\xc9\xb4\xff\x6b\x71\x93\x8b\x5d\x06\x67\x24\x7b\xbe\x67\x0b\xaf\x14\x1e\x10\xf9\xfd\x36\x83\xe7\x7c\xe5\x52\xa0\xdf\x45\x7a\x24\xe3\x08\x4d\xa4\xed\x44\xbf\x9e\x4e\xf9\xfc\xd3\x39\xac\xe3\xd5\x3d\x5d\x42\x73\x18\xcf\x10\x11\x0f\x37\x32\x26\xc9\xcb\xfb\x02\x7f\x2c\x56\xc9\xff\x40\x37\x5c\x21\x4e\x7d\x66\xfd\xcb\x0c\x05\x09\xaa\xdd\x6d\xe2\xb7\x2d\x61\x33\x8f\xb4\x1b\xfe\x4c\x84\x18\xa5\x11\x97\x50\x46\xb4\x48\x8d\xb4\x87\xc5\x80\x98\x05\x98\x6d\x90\x9a\xda\x7b\x7e\xd4\x4c\xe0\x31\x3f\x88\xb8\x94\x85\x72\x75\xa6\xec\x1f\xcb\x28\x46\xa1\xbf\xff\xb8\xfd\xfd\x72\x6b\x95\xa1\x5f\x79\xad\x57\x9d\x85\xe5\xf6\x6f\x66\x76\x95\x6a\x3a\x7a\xf8\x3b\xa6\xd5\x68\x65\xfb\x83\x76\x40\x6f\xb7\x13\xa2\x40\xd0\xec\x15\xb9\xa6\xa5\x41\x12\xe3\x4d\x0f\xf0\xe2\x90\x8d\x0c\x35\xf0\x52\x5c\xf5\x53\x5f\xaf\x3c\x80\x48\x63\x53\x8a\x77\x56\x1c\x4c\x60\xc5\xbb\xe9\x0f\x04\x33\x80\x4c\x3b\x6d\xda\x49\x07\x86\x07\x4c\x0c\xd6\xdd\x87\xd7\xca\x6c\xf0\x57\x0a\x35\xdd\xd3\x87\x6e\x79\x5c\x4a\x74\xe3\x98\x61\x12\x83\x17\x84\x57\x6b\xcd\x7c\x8b\x61\x71\x31\x5b\x33\x95\x54\xb8\x58\x33\xaf\xa8\x38\x14\x53\x15\x9b\x2e\x66\x85\x2b\xfa\x54\xa3\xb1\x25\x2b\xe4\xc9\x54\x86\xd5\x05\xcb\x96\xea\xf7\x25\x26\xcc\xfa\x97\x59\xb7\xf8\x2b\x7d\x99\xdd\x6b\x69\xc7\xc1\xa7\xdb\x6b\xb6\xe7\x65\x95\x25\xbe\xf2\xe9\x17\xd5\x3e\x73\xbb\x44\x2f\xbb\xfd\x5a\xc2\x20\xfa\x65\x36\x43\xc8\xa5\xae\x29\x61\x3a\x93\x92\x5f\xab\xd9\x6b\xd1\x87\x0f\xd5\xf2\x8d\x6b\x5b\xdd\x42\xaf\x3a\x8c\x11\xac\x9e\x29\xd1\xb8\xd7\x0d\x8d\x63\xdd\x32\x06\x07\x15\x91\xac\x16\x41\x42\xdd\xc6\xc3\x60\x18\x21\xea\x6b\x29\x84\xce\x81\x88\xd6\x53\xa7\xf7\x55\x5f\xb3\xb3\x30\x43\xeb\xb8\xcc\xc3\xb4\x5f\xf7\x1c\x67\x60\x5c\x58\x6f\x8b\xd9\x2d\xa7\x18\x04\x5a\x24\xf5\x68\x08\xc3\xd9\xdd\xf1\x5e\xdf\x01\x84\xd8\x57\xb7\x0c\xfa\x84\xa9\x25\x7e\x35\x06\xf0\x03\xe4\xe7\xf4\x8f\xc9\xa2\x6f\x5e\xea\x7b\x4e\x8c\xf1\xd5\x11\x32\x0b\xf2\x68\x0c\xa0\xf9\x91\xe7\x02\x5f\xe5\x2d\x3f\x06\x61\xd7\xe6\xa0\xda\x25\xf9\x95\x7c\x19\x21\x58\xa5\xda\x37\xcc\x77\x69\x84\xa0\xc5\x15\x53\x3e\x0a\x8d\x34\x09\x91\xc8\xc9\x19\xe9\x63\x42\xd3\xae\x26\x9f\x71\xe1\x66\x53\x7d\xe7\x27\x34\x55\xf3\x72\x5a\x76\xed\x69\xce\x9e\xd0\xd1\x24\x37\x91\x7b\x6c\x50\xd3\xd2\xca\x45\xe3\x43\xd5\x0f\x56\x5b\x59\xc2\xaf\xba\x6c\x6e\x76\x9a\x4c\xd4\x0a\xc1\x69\xa7\xb5\x60\x23\xce\xd6\xdc\x88\x7d\x71\x33\xe2\x34\xf9\x4c\x64\xae\xfd\xbd\x99\xaf\x3e\xf5\xa9\x9f\x90\xe9\xad\xd9\xdc\x83\xe1\xd4\x6e\x6d\x06\x64\xcb\x1b\x4d\xde\xf5\x34\x17\xc1\xbe\x94\xd6\x96\x2a\xc9\xc4\xec\xdc\x6b\x3a\x99\xf5\x2f\xb3\x19\x2f\xa5\x88\x43\x68\x58\xac\x64\x6c\x8e\xda\x74\x91\x67\x7b\x29\xc4\x6c\xe5\xa5\x79\x6c\x2d\xcf\x54\x0e\x77\xfa\xe9\x66\xd8\x2c\x92\xb0\x95\x1f\x1e\xc8\x54\x6c\x6e\xef\x69\xb9\x9a\xa6\x15\x69\xbf\xec\x23\x6e\x7d\x59\xe6\xe8\x57\x44\x05\xeb\xb7\x9d\x03\x20\x86\x56\xae\xdb\x66\x81\x1d\x4a\x20\xdc\x97\xf6\x96\xc9\xd4\x7f\xae\xfa\x4f\xd3\x9f\x55\xbc\xcf\xfa\xcd\x10\xfe\xf7\xb9\x6e\xd7\x4d\xbc\x0d\x48\x9f\xae\x89\xad\x26\xe6\x7e\x7e\x6c\x8c\xcd\x8e\x55\x2a\xc2\x36\x58\xe9\xdd\x1a\x9c\xde\x83\x85\x55\x97\x65\xbe\xbe\x2c\x9a\xeb\x73\x53\x08\x6b\x59\x40\xef\x7c\xd6\x6f\x75\x44\xd4\x0c\x87\xa6\x55\xde\xd5\x53\x7c\xa8\x98\x1d\xc6\x58\xa9\x1d\x47\x58\xac\xc8\xc1\x5c\xf5\x54\x19\x7c\x15\xaa\x16\x4d\xd4\x2b\x93\xee\xab\x58\xe9\x17\xf7\x96\x2b\x96\x36\xcb\x18\x3c\xe0\xcb\xd8\x6d\x25\x4b\x48\xcc\x7f\x61\x68\xad\x1d\xe4\x3f\xc1\x60\xf6\x12\xa3\x8f\x5b\x57\xc5\x5e\x4b\x4b\xf2\xb2\x86\xe4\x35\xdb\x91\x97\x4f\xb3\xce\x33\x39\x80\xcc\x46\x75\xa6\x8b\x1d\xa1\x97\xb5\x0d\x2f\x59\xc4\x79\xe5\xb9\x78\x42\x18\x8e\xf5\x82\x17\x43\x9b\xb1\xbf\xdd\x73\x81\xa6\x1e\x00\xa8\x90\x6f\xf7\x34\x34\x57\xef\xdf\x0e\x6b\x4b\x6f\x27\x39\xad\xd3\xff\xb7\xf6\x31\xef\x27\xdf\xf5\x22\xa4\x45\xa9\xd3\x91\x9f\x30\x33\xe9\x07\xf9\xfd\x23\x99\xb2\xe1\x53\x21\xa0\xee\x37\xaa\x7b\xda\x23\x6f\x4e\x97\x53\x19\xd4\x05\x4a\x14\x37\x27\xa7\x66\x14\x41\xf3\x84\x23\x2b\x87\x0d\xc5\xb0\x39\x04\x18\x5d\xb2\x69\xb4\x32\x35\xd8\xb3\x6e\x70\x6c\x2e\x9a\xed\x27\x3c\x8f\x31\x77\xd5\xd4\x8f\x6d\xd3\xc3\xb9\x8c\xd0\xc8\x6c\x2e\x3d\xcd\xf7\x94\xa0\x97\x2c\x15\xa9\xcf\x54\x14\x2c\x7c\x30\xfc\x55\x58\x37\xa7\x13\x76\xc2\xa6\x69\x3e\xd4\x13\x2d\xca\xe6\xaa\xc5\xaf\x56\x0b\xb6\x62\xd6\x20\x70\xc1\x49\x40\x9f\x7e\x2d\xb1\x69\x5e\x15\x31\x6a\x97\x14\xf1\x46\xdd\x6d\xd7\x95\xac\xcd\x35\x16\xdc\x67\x96\x98\xfd\x1a\x33\x10\x92\x3b\xb2\x32\xe8\x76\x64\x51\x47\x90\xdd\x8c\xe6\x4a\x8f\x10\xd3\x47\xe9\x7a\x34\xbb\x84\xb4\xd9\xd8\xbc\xee\x4d\xea\xd3\x8b\x02\xcc\x81\xf9\xe8\x51\x8b\x21\xeb\x91\x51\x9f\xc6\x5d\x72\xc6\xbb\x01\x6b\xa3\xeb\xa2\x31\x63\xac\x8d\x28\x91\x7c\xf1\xfb\xd3\xe2\xb1\xc7\x3c\x10\xc4\x9e\x2d\x0a\x87\xdb\xb4\xeb\x27\x3c\x36\x40\x8f\xfa\xef\x8f\x70\xdf\x06\x7f\x3d\xfc\x3b\xaa\x3b\x51\xb9\xfc\x23\x60\x57\x72\xf3\x8f\x1a\xd0\xd8\x6f\xfe\x3c\xf9\xe9\x08\x81\xd0\xab\xd8\x8b\xd8\xfc\x39\x50\xfd\x19\xc2\x8f\xcb\xbd\x0c\xce\x1c\xbc\x7c\x54\x90\xe3\x61\x59\x43\x44\x33\x27\x22\x0f\xe2\xdc\xe1\x12\x02\xdf\x62\x94\x17\x4d\x15\x9f\x5e\x67\xa9\x9b\x8f\x19\x6d\x1c\xde\x21\x24\x74\x67\x87\x04\xa7\x19\x24\x66\x48\x9b\x4f\xfe\xa1\x13\x20\x60\xf5\x8e\x89\xb6\x15\x4c\xfa\x62\xab\x4f\xe7\xfa\xc6\x21\x93\x70\x26\x03\x0e\x9a\xe3\x46\x99\xfc\x1d\x1e\x12\xb2\x27\x55\xb3\xea\x1d\xa2\x5c\xf3\x40\xee\x36\xef\x31\x93\x61\x72\x4f\x2c\xbe\xb7\xe0\xcd\xee\xed\x5d\x35\x1c\xaa\xd5\xe5\x76\x0f\x7c\x04\xbe\xc9\xfb\x00\x0c\x4b\x7e\x6a\xb6\xb7\x52\x43\x7a\xa2\x1c\x5b\xd7\x05\xd8\x4d\x03\xe9\x98\x60\x08\x44\x1c\xf8\x74\x23\xf4\xed\x7b\x62\xe1\x2c\x86\x00\xdf\xd6\x4a\x32\x84\x17\xef\x10\x0f\x73\x28\x64\x1a\x75\x4b\x01\x63\x33\xb0\xd8\x04\x34\x24\x41\x4f\xd4\x11\xdc\x9f\xf0\x90\xa1\xba\x0a\xb6\xd5\x47\x50\x92\x8d\x23\xe4\x0c\xd1\xf2\xea\x33\x8c\x8c\xac\x89\x0f\x48\x07\x01\x58\x44\xcb\x1b\x96\x4b\xe3\x4c\xe7\xea\xe2\x16\x54\x78\x37\x41\xd4\x99\xd0\xb5\x29\xe0\x33\x52\x04\xa2\xf5\x55\x8c\x12\x30\x06\xa6\x04\x4d\x4f\x7d\xa1\x5e\xe5\x82\x66\x7a\x22\x56\x91\x26\x24\xde\x6c\x37\xd3\xfe\x45\x3b\x12\x67\x2b\xc7\x10\xfe\x41\x0b\x47\x0f\xb6\xe8\xef\xb9\xff\xae\x0c\x96\x08\x9b\xb5\x19\x11\x82\x53\xfb\x98\x6e\xd1\x9c\xe0\x53\x89\x98\x67\x6c\xd1\x76\x93\xb6\x18\x44\x80\xcc\x64\xf0\x2b\xa4\xa7\x41\x79\xb8\x59\xa0\x55\xba\x98\xf7\x27\x5a\x19\xc2\x40\xf9\xf8\x28\x40\x96\xe4\xd6\xbe\x31\x3c\xc6\x5e\x04\x9f\xc2\x05\x7a\x73\x41\x45\x6d\xb2\xe3\xb0\x4d\x36\xc6\x53\x17\x9e\x98\x78\x16\x21\xf0\x71\x54\xc4\x73\xcc\x7c\xe3\x91\xa5\xd6\xb5\x6c\xbd\x47\xb6\x32\x23\xa4\x49\xcd\x0e\x13\xa1\x2d\x6f\xda\x9a\xe4\x23\x18\x50\xa3\xf3\xe4\xd4\x66\x7c\x6a\x39\xac\x41\x48\xd3\x9b\xe3\xcc\xb5\x1c\x11\xd4\xbd\xcd\x08\xdc\x9b\xd3\x31\x29\x61\xd5\x9c\x85\x99\x51\x96\xa8\x50\x78\x7f\x98\xa0\x88\x64\x63\x04\xad\x6a\x1f\x78\x36\x15\x11\xae\x49\x15\xf1\xb9\x56\x34\x3c\x0c\x61\x0b\x55\x25\xe3\xa5\x7e\xc6\x97\x79\xdb\x6d\x7b\x7d\xb3\xd6\x2d\x0f\x8b\x26\x15\x03\xf2\x60\x24\xeb\x5a\xf3\xfb\x88\x1e\x03\xf1\xcd\x02\xb6\x50\xdf\xc8\xc4\x8f\x26\x49\xee\xe8\x6b\xb2\x2a\x24\x51\x33\x3e\xd1\xf1\x54\x6b\xe6\xea\xfc\x3e\x45\xc0\x1f\x2c\x20\x5e\x84\x02\x20\x4f\x0d\x58\x55\x8d\x77\x34\x07\xef\xf4\x11\xf0\x2b\xcd\x06\x5f\x76\x43\x69\xd4\xf9\x35\x57\xeb\x67\xab\xb7\x01\x39\x63\x78\xb5\xf6\x3e\x75\xf6\x3d\x0c\xcd\x8e\x6a\xf9\xe9\xad\xff\x95\x08\x78\xcd\xa3\x1a\x36\xf3\x45\x97\x50\x08\xc0\x87\x80\xcf\x8f\x0f\x70\x4d\x9b\x18\x32\xd4\x70\x20\x8f\x82\x7f\x40\x85\x8e\x96\x9f\x6c\x32\x27\xe8\x46\x79\x51\x86\xf1\x7d\x5b\x48\x66\xde\xba\x79\xd9\xbb\x06\x98\x67\xce\x64\x77\xec\xae\xf5\x15\x4f\x13\x0b\x25\xef\x96\x81\xf6\x09\xd5\xfc\xf4\x50\x25\xf7\x73\xfa\x85\x51\x3e\x26\x42\x9c\x96\x8a\x29\x58\x06\x4f\xd5\x6a\xa6\x3e\x4d\x2b\xa8\xc1\xd9\xc0\x70\xb7\x8e\xd9\xe6\xd6\x81\x16\xd7\xc6\x5b\x04\xba\x41\x75\x6d\x4d\x11\xbf\x0d\x3f\x21\x2c\x62\x3b\x96\x10\x7a\xef\x71\x17\xd5\xe3\x27\xc8\xe5\xfb\x18\x56\x67\x47\x42\x21\x8d\x74\xa2\x2e\x8e\xfc\xd1\x52\x18\xba\x6b\xb3\x8d\x7a\xf8\x24\x27\x60\x89\x78\x37\x6c\x7d\x74\x1b\xf5\x8c\xce\xbe\xb0\x51\x11\x89\x1a\x7d\xfb\x3b\x8c\x7c\x44\xc5\x6a\xc6\x86\x23\x2f\x04\x10\x70\x9d\x93\x9f\x51\x35\x0a\xb3\xb5\x18\xb5\x75\xa8\xe6\x4b\x0b\xc9\xb7\x86\xde\x77\xb4\x27\x6a\xcb\x68\x36\xe0\x1f\x34\xc4\x40\x86\xcd\x21\xcc\xe8\xdd\xce\xf9\x6c\xe3\x63\x5e\x6a\xde\xed\x6e\x53\xbf\x78\xfb\x40\xc0\x9e\xcb\x85\x7d\x47\xaa\x47\x3a\xe7\xdb\x75\xae\xbd\xbb\xff\x72\x84\x73\xea\xc5\x3b\xac\xc6\xdd\x55\x3f\x09\xa6\x01\x8c\x93\x41\x3b\x65\xa6\xa4\xaf\x26\xdd\x3c\x5e\x56\x59\x59\xd2\xc4\xa1\x23\xc2\xdd\xc5\xb0\xd5\xe9\xea\x09\x10\x0d\x58\x14\xa2\x76\x7f\xbb\x8b\xb7\x2a\x8b\x9f\x2a\x6d\x86\xf1\xb8\x53\x58\x8c\x88\xc2\x97\x1b\x73\xc9\x9d\xc6\x58\x8f\x68\xd9\x70\x17\x17\xce\x84\x08\x6b\x25\x24\x70\xe5\x19\xbf\xe4\x70\x7c\x62\x67\xb9\x1d\x96\x76\x22\x8b\xfe\xb7\xc1\x62\x52\x11\x0f\x7e\x3b\x5c\x01\x8c\x0f\xb3\x08\xf5\x69\x91\x4d\xa6\xc7\xad\xee\x7c\x64\x5c\x70\x31\x4f\xb0\x9e\xb7\xbb\xf4\xc2\xb6\x3e\xde\x20\x17\xb4\x5b\x66\xf0\xdd\x7a\xb3\x5f\x4c\xad\xc8\x06\x7e\x79\x32\x98\x27\xc1\xe4\x7e\x4c\xfa\x3b\x0d\x97\xe2\x57\x66\xfe\xd4\xb0\x84\xda\x6c\xb3\x52\x08\xdc\xb4\x81\x0c\x28\xb6\x70\x48\x38\xe4\x15\xc3\x97\x79\xe0\x0e\xc4\x42\x13\xa6\xc5\x5f\x70\xc5\x0c\x44\xdd\x54\x3e\x90\xd0\xbe\x18\xa2\x52\xe5\x7c\xf6\x24\x8b\x89\xbe\x21\x37\x89\xb1\x03\xc0\x5b\xbe\xf3\x91\x21\x8d\x56\x0d\xbb\x5b\x82\x37\xed\x14\x5e\xd9\xea\x45\xcd\xc8\x83\x9a\xe3\x84\x63\xfa\x52\x7c\xea\x56\x2d\x6a\x99\x91\xa9\xa8\x03\xd5\xb4\x7a\xb6\xac\xab\x2f\x05\x0d\xbd\x89\x40\xf8\xdb\xfc\x6d\x29\xd6\x26\x6d\xc7\x66\x03\x03\x33\xec\xaa\x84\x73\x3a\x60\x82\x1c\x47\xa7\x47\x68\x7e\x3b\x2c\x6e\x80\x2f\x71\xb9\x98\xf1\xd5\x31\x1e\x46\xec\x3d\x7c\xa6\x36\x9a\xd8\x1d\x4b\xd3\x47\x19\xf4\xe5\x50\x10\x58\xfb\x32\x9b\x36\x67\x31\xce\x4c\xeb\xb3\x82\xf7\x8b\x37\x7d\x14\xf3\xa5\xf1\x09\x35\x00\xed\x20\xf9\xf5\x7d\xc4\x87\x1f\xe2\x57\x60\xe9\xb6\xf6\x69\xd8\x37\xc2\xc2\x0a\x10\x9b\xb1\xd4\xe4\x31\x6b\xf2\xcb\xb1\x48\x3c\x86\xbe\x5a\x53\xfd\x0a\xd6\x2e\xbf\x42\x5c\x70\xd7\x72\xc6\x5e\xf6\x6e\x3b\xd9\xbb\xd7\x92\xf5\xec\x56\x71\xf4\xb3\x85\x55\x02\xeb\xd1\xb7\x2e\x4b\x09\xbb\x8f\x61\x93\x3d\xb2\x9d\x05\xa2\x23\xa9\x4c\xd4\x31\x8b\x50\xd3\xf8\xf9\xd4\xc6\x6a\x69\x4c\x4b\xd8\x8d\xd8\x97\x9a\xea\x53\xaf\x1a\x10\x23\x14\x98\xb2\xdf\xc9\x26\x92\x3c\x14\x34\xdd\xca\x0d\x5d\x66\x2a\x3e\x99\xe0\x4c\x61\xf5\x1b\x5c\x56\x7e\xed\x5e\x2d\x0b\x41\xec\xab\xdd\xd9\x48\xba\x0f\xa7\x68\x1e\x0c\x52\xb6\x4f\x9f\x6d\x2d\x4c\x30\xba\x5d\x22\x7d\x1c\xec\xe6\x72\x32\xe4\x21\xb0\x20\xb5\x79\xc9\x1b\x26\xaa\x6d\x1b\x25\x8c\xa1\x8b\x3e\xf0\xe2\x57\x54\x04\xc4\x65\xf5\xdc\xf8\xb1\x10\xf3\x7f\xf6\x6f\x97\xbb\x1f\x0b\x2e\x56\xf7\xae\x65\x15\x58\x88\x69\x6b\x78\x5f\x81\xcd\x90\xf4\x35\x20\xc5\x16\x64\xc2\xc9\x1f\xc5\x28\x4c\x61\xd3\xa8\x03\x65\xfd\x3a\x2e\xea\x6a\x66\xac\x0a\x26\x31\x84\x8b\xa1\x3e\x13\xc1\x7b\x34\xff\x30\x54\xa4\xc9\xcd\x77\xd5\xb0\xe8\xd4\xd3\x1b\x98\xe9\xab\x96\xbe\x1a\xfa\xa2\x7d\xaf\xd8\xac\xdc\x96\xec\x3a\x23\xd2\x17\x34\x75\x35\x33\x2d\x7e\xad\x7b\x03\x69\x6a\xda\xa9\x1f\x65\xab\x89\x05\xd6\x67\x9b\x75\x39\x1a\x42\x0f\x0b\x67\xbc\x42\x9a\x89\xf6\xae\x98\xe7\xde\x95\xf8\x51\xd4\x4d\x0f\x1f\xff\xe5\x6d\x03\x8f\x31\x2c\xd8\x3a\x15\xe3\x7b\xba\xb4\x55\x6a\xc6\x53\x17\x75\xc2\xcf\x28\x7a\xaf\xa9\xb7\xbb\x23\x34\x9e\xc5\x50\x59\xb1\x59\x6e\x16\xc4\x6b\x56\x07\xff\x9e\xa1\xbd\x55\x2f\x40\x91\x85\x32\x42\x66\x02\xdf\x42\x3c\x64\x5e\xcc\x50\x87\xd9\x84\x51\x11\x83\x15\x61\x48\x48\x34\xa4\x85\x2a\x9e\xba\x66\xb5\x59\x1d\x27\x68\xf8\xe5\xa2\x36\x36\x82\xb5\x45\xb9\x68\x38\x7a\x58\xcd\x23\x66\x1d\xd1\x95\x67\xb6\x67\x44\x20\x47\x0f\x7f\x72\x9e\x15\x22\x5b\x5c\x72\xd3\x24\xf3\x6d\x7d\x64\xd2\x3c\xb2\x21\x8f\xbd\x41\x37\x99\x5e\xc2\x31\x08\x39\x7e\x38\x97\x00\xf7\x6b\xd4\xfd\xd2\xfa\x31\x6a\x44\xa6\x61\x96\xa3\x4b\xcc\xbb\xde\x5c\x4b\xfb\x3c\xa4\xbd\xcb\xfd\x56\x06\xbb\x8d\x68\x42\x45\x48\xa1\xee\xc3\xe6\x11\x41\x2f\x36\x4f\x88\x2a\x0e\xfa\xbb\xd2\xfe\x45\x34\xfb\xc1\xa4\x9f\x25\x76\xc7\xbc\x0f\x3d\xa7\x21\x1a\x7c\x6c\x02\x19\x37\x75\xa6\x77\x37\x3f\xc0\xf9\xcd\x56\x1f\x4d\x32\x11\x34\x5e\xd8\x78\xdd\x67\xbb\x10\xba\x5f\xa0\x1a\x06\x03\xbf\x3e\xa1\xc6\x29\x93\x08\xbe\xa4\x3c\xc2\x2b\x44\xa8\xf3\xb3\x67\xf6\xfb\xcd\xc4\xc7\xe8\x54\xd1\x53\xe1\x8c\x34\x4f\xe2\x3c\xdb\x4a\xb8\xc0\x82\x08\x46\x65\x58\xad\xbb\x62\xfc\x31\x97\xf6\xed\x45\x67\x67\x2c\x18\xc3\x76\x6b\xa8\x25\x8c\x67\x97\xa8\x74\xb1\xb7\x78\xfb\x86\xf6\x47\x81\xe7\x63\xf0\xac\x9a\x07\x1e\xb3\x1b\x42\x6d\xd5\x6e\xa6\x5f\xa1\x2e\xc6\x75\x9a\x22\x40\xef\x5e\xd3\xc2\xa3\x8b\x6a\x63\x85\xe8\xeb\x53\xb2\x3f\xfa\x97\x8c\xaf\x62\xb8\x45\xfc\x82\xe2\x1f\xf5\x33\xdc\x56\x73\x08\x4f\x5d\x84\x14\xac\xbb\x63\xf9\x36\x1a\x40\x9e\x0b\xbd\x42\x2a\x0c\x66\xba\x72\x43\xa7\x66\x0b\xb9\x73\xbf\x8c\x91\x44\x31\xbf\xe4\xfb\xc6\xc9\x72\x02\x08\x72\x2c\xc1\x30\x36\x83\x65\x88\xcc\x04\x96\x6c\xc9\x60\x5f\x8e\xcb\xed\xb6\xf0\xb4\x67\x77\xce\x89\xbb\x90\xbe\x9a\xe0\xc3\x03\x7b\xa9\xc5\x68\x57\xac\xf6\xec\xe4\xca\xc8\x9e\xdd\xcf\xf4\xe9\x47\x72\x20\x23\x6b\xb3\x88\x64\x52\xa4\x9e\x62\x5f\x70\xc7\x82\xf8\x9e\x71\x93\x69\xd7\xa5\xab\x3d\x1f\x56\xcd\x32\xce\x7b\xb3\xdc\x53\x09\x5c\xb7\xfc\xf6\x7c\xce\x53\xb3\x4c\x7e\xbf\x09\xac\xdb\x04\x2e\x9f\x29\x37\x5c\x84\xda\xb3\xdd\x7a\xda\x73\xd0\xe1\x5a\x0e\x69\x47\xbf\xa2\x58\x7d\x01\xd1\x04\x31\x45\x9a\x30\x7e\x43\x8b\x9e\x63\x74\xdb\x3c\xed\xce\xbc\xcc\x98\x32\x9b\x36\x4b\x0b\x8b\x49\x37\x03\x6f\x27\x54\x94\xad\x26\xe1\xcb\x64\x86\xe3\xcf\xa0\xcd\x73\x8e\x31\xff\x1d\x28\x80\x79\x2d\x61\xcf\xd1\xc6\xc5\x39\xce\xb1\x7e\x8e\x18\xea\xb3\xe4\xce\x45\x1b\x8d\x7c\x9e\x5f\x0a\xc1\xfe\x4d\x34\x9f\xee\xcd\x92\x40\x10\x61\xe2\xc3\xca\xf4\x5d\x2d\x0e\xe7\x03\x41\x0b\x7f\x4d\xd3\xc5\x15\x72\xfb\xde\x68\x8a\x35\xbd\x18\x6d\xba\xf0\xf2\xd1\xe7\xfb\x81\xd7\xbc\x8d\xc1\xa7\x87\xbe\xed\xcd\x44\x9a\x83\x6c\x03\x95\x7c\xdf\x58\x0b\x07\xae\x68\xd4\xf3\x7d\xfb\x7b\xae\x07\x19\xb5\xc0\x6f\x5b\x5f\x63\x7c\xcc\xf0\x99\xa1\xc7\x62\xda\x70\xf1\x52\xe8\xe2\x67\x9a\xb1\xbb\x7d\x45\x4f\x9c\x79\x81\x39\x9a\xb5\x90\xc6\x74\x13\x9a\x5f\xa3\x25\x74\xfa\xa2\xdc\xa2\x19\xf8\x82\xed\xb4\xde\xfb\x8a\xa7\xbb\x7c\x60\xc6\x44\x24\x19\x28\xd1\xed\xf0\x6b\xa4\x79\xf5\x7b\xe1\x16\xd6\x58\x4a\xe1\x9e\x57\x2a\x84\x21\xd8\xe2\xd2\xbc\x4d\x69\x7c\x9a\xd6\xd5\xa8\x4e\xfd\xd9\x7f\x09\x0b\x39\x59\xa6\x2a\x37\xcb\xcb\xba\x9c\xb0\xd5\xc4\xe2\xcf\x8f\x71\x5b\xa2\x8b\x4f\x6d\xe6\xab\xb0\xd5\x6a\x5b\x92\x23\xd4\x8a\xb8\xf8\x8e\x96\x83\x70\x58\x2c\x86\x19\x74\x74\xfb\xb4\x15\xdd\xac\xee\x4c\x66\x50\xd1\x85\xe6\xa6\x45\x48\xa0\xfd\xa2\x16\xb2\xf0\xe9\x93\x5f\x8a\x80\xa7\x59\x06\x7f\x80\xc2\x6a\x23\x2c\x21\xcd\x09\x30\xb3\x7f\x02\x0a\xdf\x01\x85\xaf\xca\x5b\xb0\xaa\x4f\xf8\xeb\x6b\x9c\x27\xd1\x85\xf8\x6f\x06\xff\xf2\x58\x3f\xa1\x62\x9b\x67\x20\xd3\xf7\xe5\xb0\xf9\xff\x91\x75\xa5\x6b\xd2\xb2\x3a\xf0\x5a\x1d\x45\x65\x06\xc5\x97\xa5\x67\xb9\xfa\xf3\x40\x52\x95\xf4\x77\xfe\x74\x57\xb1\xcb\xbe\x84\x60\xf4\x3f\xd6\xd6\xc9\x5e\x6f\xf2\xe6\xc2\x6b\x75\xbe\xeb\x9b\x5b\xde\x8b\x21\xb3\x90\x7b\x72\xa1\xf4\x54\xad\xf8\x7d\xbd\x7f\x58\xd3\xdf\x77\xa5\x48\x11\xe0\x58\x9a\x27\x47\x36\xba\x0b\x9b\x33\x8e\xe6\x1f\x17\x14\x26\xbe\x6d\xc3\x8d\x14\xc9\xf3\x9b\x2a\x83\x3c\x4d\x77\xe4\x06\xc1\xac\x3f\xcb\x76\x08\x12\x3e\x19\x6d\xa2\xab\x25\x6f\x0b\x02\x30\x4b\xa1\xd0\xd7\x9b\x5b\x64\xcd\x98\xa1\x6c\x2e\xa0\xd4\xed\x2b\x79\x61\x7e\x90\x82\x9a\x2a\x10\x6e\x70\x6a\x0d\x4c\xf7\xbd\x14\xa6\x60\x0b\x97\x75\x27\x93\xc1\xcf\xc0\xce\x99\x4d\x42\x95\xb9\xc1\x68\x1a\x98\xbf\xbb\x3a\x7f\x53\xb6\xdb\x78\x7c\xf3\x66\xe2\x9d\x83\xe5\xe4\x3e\x7e\xc3\x0e\xef\x84\x16\x80\x77\xef\xd2\xd7\xd7\x37\x8c\x1c\xa5\x52\x0d\xc5\xd1\xbe\xa1\xdb\x64\xe0\xde\x6d\xce\x70\xef\x61\x73\x63\xc4\xbd\x07\xcb\xc6\xdd\x6a\xff\xc4\x8c\x72\xe7\x4c\x68\x42\xe4\xf4\x6e\x13\x9f\x7b\x77\x83\xf9\x20\xe6\xfe\x76\x6e\xca\xe5\xaa\x83\x50\xe6\xc8\x1e\xeb\xea\x83\xa8\xab\x4b\xe5\x64\xe6\xd4\x2e\xff\x92\x31\xd4\x6c\x7b\x36\xc2\x18\x48\xe6\xbe\xcd\x20\xae\xe3\xb8\x45\xe5\xb5\xf9\xe2\xbd\xe1\x41\xba\xab\x1a\x7b\xaf\xce\xdc\xfc\x77\xef\xdb\x8f\x6e\x83\x99\x0f\x4b\xf4\x61\x97\x96\x26\xe3\x44\xec\x3e\xb8\x13\x22\x98\x21\xe1\xc6\x32\x2d\xd3\x08\xef\xff\xb9\x79\x28\x8b\x3b\x8d\x31\x6e\x89\x50\x03\x66\xac\xbb\xe9\x4c\xe6\x2a\xb4\x1a\x58\xf8\x4e\x43\xc7\xe4\x1d\x23\x26\x97\x47\xf9\xfe\x94\x0b\x2d\xfc\xd6\x4f\xbb\xe0\x42\x86\x18\x3f\x6d\x06\x7d\x7f\x8a\x0e\x21\xc0\x66\xe6\xb7\x2b\xee\x4f\xf3\x7c\xbb\x5a\xce\x50\x6e\xeb\x17\x6f\xdc\x21\x19\x38\xfb\x32\xfa\xd7\x83\x4b\xe0\x60\xf0\x53\xa7\x2e\x32\x4e\x04\x06\x77\xf3\x93\x49\x69\x15\x56\x57\x38\xc2\x18\x43\x0d\x6b\xf7\x6c\xea\x2c\x72\x5e\xef\x16\xd9\xac\xaa\x1b\x3c\x45\x77\x92\xc5\x67\x9a\x94\x40\x2d\xc2\x62\x9f\x57\xe3\xe6\xbf\x68\x52\x3a\x8c\x14\x02\x9a\xec\xf0\xdf\x83\xeb\x12\x03\xdb\x2d\x86\xc9\x5c\x75\xad\x6f\x5d\x59\xb5\xae\x6c\xaa\x89\x7e\xf3\x14\x37\x57\xdf\xaa\xeb\xe9\x6a\xbe\xd9\xc5\xd7\x27\x5a\xf2\x78\x33\x65\x90\x66\x6e\x5a\x70\x8b\xa2\x41\xcb\xed\x29\x2f\x30\x0a\x6b\xfd\x3f\xcc\xd5\xd3\x6a\x8f\x35\x38\x6e\xce\x8b\x9b\x72\x0d\x1a\x57\x17\x56\xf1\x9d\x4d\x6d\xa5\xbf\x85\xd3\xdf\x9c\xf6\xff\x38\xa5\x95\xdd\x9e\x01\x73\x0e\x27\xb5\xdc\xc5\xdd\x1a\xc5\x96\xb0\x7e\xf9\x30\x2e\x73\x74\x79\x37\x17\x26\xc2\x20\x9b\x67\x2e\xd6\xeb\x31\xd6\x16\xfb\x8e\xb6\x1c\x56\xc9\x9b\xcb\xa8\xf9\x26\xbb\x25\x41\x68\x7b\xb7\x75\x41\xba\xb1\xb7\xf9\xb1\x77\x3e\x5e\xec\x82\x99\xb4\x39\xa7\x4f\x7a\x0f\xe6\xc9\xc5\x37\x1e\x7b\xe8\x98\xd4\x8d\x83\x93\x76\xe7\x98\xd3\xc3\xbb\xf9\x91\xbb\xbd\x35\xf3\x66\x17\xd5\x94\xd1\x13\x2f\xbf\xf3\xb9\x0a\xe2\xc3\x13\xce\xaa\x06\x36\xdf\xb7\xf3\x6d\x6b\xd1\xbb\xb9\x1b\x9a\xa0\xfc\x64\x5b\x77\xdf\x76\x41\x05\x24\x32\x95\x65\xd9\xe2\xea\x93\x2d\x06\xce\xf5\xa0\xee\x23\xd5\xe0\xf5\xee\x9e\x35\x6f\xea\x48\x7b\x0b\xae\xfa\xc0\xaa\x55\x45\x61\x16\x4e\xfc\xe8\xce\xe5\xbc\x1d\x63\x4e\xed\xb2\x0c\xa9\x8b\x32\x36\xb3\x79\xb9\x30\x5e\x2e\x84\x9c\x7c\x7d\xb1\x13\x72\x25\xde\xe5\x2b\x94\xca\x91\x55\xb8\x4b\xd9\xa4\xae\xae\xf4\x6b\x71\x1d\xfa\x2b\xb8\xda\xfd\x0a\x2c\x9c\x57\xb0\xca\xfb\x9a\xd5\x86\x3d\xcb\x2b\xe0\x1c\x49\x31\x2a\xc4\x20\xce\x53\xa9\x3e\xe4\xc2\x25\x9d\x90\xff\x84\xd8\x5c\x88\x2e\xb5\x2f\x57\xb6\x2f\x3f\x1f\x7a\xf9\x42\x7d\x45\x6e\x45\x4c\xec\xfd\xdf\x36\xa9\x7c\xe5\xd4\x91\xf3\x82\xe1\x07\x3b\x91\xf9\x7e\xf5\x54\x3d\x46\x1c\x76\x92\x91\xb9\xef\xc5\x21\x21\x3f\x7e\x0b\x42\x19\x3c\x3e\x1c\x95\x72\xd9\x78\x9c\x40\x22\x56\x8f\xad\x36\x20\xdf\x92\x1f\x96\xd2\xf3\x6b\x0a\x5f\xd6\xfc\xaf\x87\xd6\x74\xe7\x7b\x84\xa2\xb9\xc8\x65\x4d\xb9\x19\x63\xc9\x37\x17\x13\xe5\xe9\x09\x45\x55\x8a\xdf\x6e\x9b\x0c\xae\x8a\xdb\x60\x2b\x25\x58\x2f\x25\xc4\x59\xd5\x27\x5b\xdf\x52\x4a\xdc\xb8\xa3\x56\x4a\xfe\xc8\x65\x61\x64\x93\xb5\x77\x4b\x17\x92\x70\xb4\x8f\x52\xb8\x31\x5a\x8a\x9b\x13\x95\xd2\x9f\x66\xc8\x9b\x46\xfb\x92\xfe\x34\x4b\x52\xb7\xde\xbe\x70\x73\x3a\x57\x07\x9b\xee\xa0\xd5\xc6\xb1\xa5\x51\xac\x28\xf7\x9b\x67\x61\x82\x8d\x58\xee\x75\xce\xa2\xfb\x54\x80\xcf\xaa\xd8\xa7\x0a\xe6\xd5\xdb\x16\x77\x15\x49\x4d\x76\x5b\xe0\x4e\x7e\x2d\x6e\x1f\x80\x26\xde\x05\x2f\x9d\x4d\x6e\x27\x1f\xb9\x53\xb1\xe2\x24\x0c\xb6\xb4\xe8\xf6\xf5\xba\x6d\x08\xf6\x82\xef\xef\x4d\xaa\xd3\x6b\xbe\x85\xaf\x1e\x5f\xac\x47\xaf\x60\x66\xf4\xfd\x0a\x38\xf8\x52\x21\xc0\x35\xcf\xc0\x0a\x44\xe9\xd7\xb2\x60\xaf\xbb\x2c\x7b\x53\x4b\x91\x90\x5e\x0b\x0f\x72\xca\x72\xd3\xfd\xad\x77\xb3\x6c\x96\x39\x95\x14\x19\x96\xa3\x83\x82\xab\x2d\x6b\xa1\x68\x48\xb1\xab\x3e\x13\x9b\xa9\xd6\x81\x01\x7b\xd1\x3d\xd3\x12\x36\x79\x72\x08\xce\xb6\xe8\x7c\x6f\xb8\xcb\xb0\x96\x10\x1e\x46\x95\x6b\x66\xb0\x95\xc8\x64\xcf\x20\x96\x54\xa2\x68\xc3\x9f\xf0\x79\x10\x47\xc4\x6d\x45\x81\xb6\x9b\x2f\xf4\xef\x3f\xd4\xf9\x82\xc2\x85\xb5\xb0\xf7\x29\x3c\x30\x2d\xd9\x76\x06\x4b\xfe\xde\x60\xaa\x32\xae\x6b\xe9\x26\xd1\x58\x54\x76\xa3\xf4\x20\x09\xe9\xb8\xb4\xbc\x8a\xfe\x69\x83\x88\xd1\x84\x61\x57\x0a\xc3\x0e\x84\xef\xc7\xbe\x97\x3c\x4d\x05\xc3\xf9\x4c\xd5\x1b\x89\x77\xf0\xcc\x92\xac\x06\x7f\xff\x67\x20\xde\x39\xb1\xe9\xa2\x83\x6f\xfe\x4b\x36\xf6\xed\x40\xfb\x9c\x10\x18\xe2\x28\x9d\x26\x89\x87\xde\x63\x76\xf9\x7a\x27\xed\x3f\x14\x7e\xdc\x8a\x6e\x12\x35\x37\xb9\x93\xa9\x9f\x54\x13\xe7\x14\x0d\xae\x1d\x45\xe3\x02\xa0\x06\xcc\x01\x61\x8b\xe6\x31\x90\x66\x23\xa3\xa1\xf8\x91\xed\xfb\x74\x0a\xbe\x75\xbd\x07\x3f\x1f\xf9\x82\xc7\x66\x37\x22\x95\xc1\x8d\xcd\x68\x3b\x16\x53\x9d\x2b\xa9\x5e\x4f\xce\xca\x7a\x45\xca\x6b\xcb\x97\xce\x37\xbb\x44\xde\x98\x4f\xbf\x58\xf9\x6e\xcb\xfc\xc1\x29\xd7\xc6\xdb\x6c\xdb\x12\xef\xd9\xe0\xb7\x85\xf2\xce\xdb\x72\xd9\x65\x70\x21\x1b\x90\xb9\x50\x39\xbc\x6d\xb9\x6e\xd4\xda\x0d\x5d\xc5\x04\xb7\x42\x93\xec\xd9\xa8\x16\x6e\xa3\x64\xe9\x66\x2a\x79\x04\x4a\x66\x6e\x53\xb7\x89\x02\xb8\x84\xb3\x82\x40\x0a\xe2\x68\x8c\xa1\x05\x07\xc5\x52\xef\xf9\x6d\x53\x6a\x4e\x85\xcc\xb7\x05\xc3\xc1\x44\x08\xf0\x1b\x01\x7e\xdf\x30\xfa\x53\x93\x3f\x1a\xfc\x21\x3d\x7f\x7f\x5a\x19\xb6\x40\xd1\xf8\x01\x79\xab\x66\x0b\xcb\x2e\x7f\x28\xef\x01\xdb\xfc\xc7\xcd\xce\x81\x98\xfc\x80\x63\xaa\x89\x10\xf8\xc7\x82\x9b\xc4\x5b\xf8\x88\x89\x7a\xdd\xc8\xe8\x50\xe9\x4b\x03\x8b\x70\x37\xa5\xac\x9b\xc2\x5f\xc6\xb6\xea\xb1\xf8\x44\x08\x84\x42\x7c\x03\x46\xbd\x56\x33\xf1\xcb\x3c\x52\xe9\xcc\x16\x70\x32\xe9\x1f\x00\x12\xf6\x9c\x5c\xf7\x83\xc2\x25\xf2\xc7\x04\x09\x14\x33\x15\x69\xe1\x7e\xdc\x64\x2e\xa4\x41\x2c\xfa\xb4\x30\xd4\xc4\x25\xa0\x10\x67\xce\x70\xf3\xca\x4c\xf1\x7b\xfe\xa0\xde\x0e\x5b\xfb\x83\x96\xa5\x79\xcc\xd8\x21\xf0\x30\xa1\xdd\x6b\xdf\x82\x8d\x78\x8a\x99\x02\xd5\xc0\x37\xd1\x13\x1b\xa0\x85\x59\x82\x7d\xb8\x76\x24\x5b\xd8\x5c\xd8\xd0\xa0\x39\x51\xc4\x07\x70\xff\x55\xe0\x9b\x39\xc2\x0e\xf8\xa2\xf0\xe8\x1f\xeb\xed\xbe\x58\x43\x9d\x04\xc6\xc9\x22\xde\x7d\xa1\xec\xcb\x65\xc6\xf8\xba\x9d\xea\x37\x14\xd3\x22\xb8\x6a\xbe\x07\x0b\x32\x58\xea\x76\x3b\x9e\x54\xa2\x95\x76\x0f\x2c\x8a\x9d\x0b\xe5\x89\xab\x19\xd7\xe8\xbc\x56\x0b\x13\x6f\x16\x2a\x2b\x2e\x86\x82\xaa\x43\x71\x92\x09\x11\x6b\x5c\x63\x20\xa6\xcb\x44\x74\x3b\x4f\xb7\x99\xca\xb2\x51\x21\xd3\xc1\xb3\x72\xc5\xb4\xb0\x3d\x62\x21\x70\x54\xa0\xa4\x69\x62\xb4\xd4\x5d\xd2\x73\x84\x1b\xaa\x38\x8d\x6c\x9e\x21\x93\x40\x35\xba\x03\x0a\xa4\x05\xc2\x15\xfb\xf0\x60\x1a\xe2\xb6\xf0\x69\x69\x4e\xae\xdf\x48\x4c\x4d\xb2\x7e\xc3\x49\x06\x0c\x72\x30\x3d\x90\xa1\x14\x84\xe1\x72\x0b\x29\x7e\xd8\x27\x28\x61\x60\x4a\x5f\xb0\x5d\x9d\x37\x2c\xb1\x14\xa3\x87\x9a\xc4\x02\xb8\xad\x36\x4f\x62\x7e\xee\xe0\x43\xbe\xff\x75\x14\x72\x8a\x3e\x75\x2f\xd7\x7b\x4d\x86\x00\x58\x2c\xa9\x33\xff\x92\xde\x43\x1e\x88\x75\x2f\xf5\x8a\xc6\xa2\x3a\xb6\xb7\xc0\x55\x82\x40\xf8\xc7\x71\xde\x16\x2e\x53\x9b\xb4\xcd\x57\xd0\x38\xaf\x03\xa5\xc3\xdb\xf4\xd2\x92\xb6\x77\x5b\x2e\xdf\x9d\x89\xa6\xee\xea\x85\x00\x43\x6a\xb8\xad\x21\xdc\xa8\x11\x37\x6f\xc2\x6f\xe1\xce\xb6\xb1\x36\x98\x15\xb9\xdb\xc5\x9e\x84\x4e\xa0\xc0\x6e\xc3\xb1\xec\x16\x6e\x66\xa1\x2a\xa6\x7b\x67\xc8\xb4\x07\x72\xac\x02\x91\xc6\xc7\x77\x13\x0f\xd5\x19\x6d\xe1\x89\xac\xae\x8f\xd5\xba\x07\x22\x24\x5b\x78\xb2\x05\xe8\xba\x7e\xeb\xf7\x45\x05\x99\x62\xdc\x31\x1c\x30\x58\x27\x28\x84\x89\x11\xa6\xdf\xed\x75\x95\x81\x79\x7f\xf1\xbf\x4e\xed\x5b\x79\xdc\xab\x38\xba\x50\x6a\x75\xd1\xd5\x6a\x41\x44\xa6\xb0\x37\x43\x3a\x25\xdf\xc6\xb2\xf6\x4d\x93\xf8\x36\x15\x9a\x28\xb8\x0f\x9a\x4d\x71\xca\x01\x5e\xce\x01\x15\x31\x0c\x8c\x1c\x2c\x2a\x01\x38\x11\xee\xb4\x0f\x92\x2d\x97\x8b\x3f\xbe\x9d\x54\x84\xdd\xb6\x50\x46\xa7\x83\xe1\xaf\x6c\xe1\x15\x52\x7e\x48\xf3\xad\x31\x6f\x2e\x2f\xc6\x22\xcf\xf2\xbe\x84\xeb\x81\x3c\xda\x16\xca\x1e\x19\xe7\x9e\x72\xd6\x48\x78\x31\x7a\x0b\xe5\x48\xcb\x9f\x86\x3a\xba\xbb\x1e\x5a\x23\x1d\x03\x3c\xf1\xb7\x7e\xe9\xb9\xc0\xf0\xb4\x96\x5a\xce\xae\xf9\x5f\x38\xdb\x29\xd1\x8a\x68\xe0\x17\x21\x8a\xb4\xb8\x19\x53\xb1\xfb\x3f\x5b\x28\x49\xf4\xff\x0e\x34\xf2\x40\x21\xe4\xfc\x26\x6e\x0a\xd8\xbf\x96\x6b\xd9\x02\x50\x65\x86\x5c\xb2\xe9\x47\x9a\x2d\xaf\xae\x5c\xb4\xe9\x97\xf9\x92\xbb\xa0\x5e\xb5\x6f\x29\x37\x07\xf0\x62\xed\xb5\xe4\x9d\xca\x1c\x06\x3b\xac\xaa\xbb\x27\x04\x94\xf0\x4b\x9f\x90\x31\x4d\x1f\xa4\xb5\xb8\xba\x84\x3c\xd4\x4f\x30\x48\x92\x9b\x0d\x03\xea\x4b\xe4\x42\x4a\x7c\x45\xa8\xd9\x9d\x3c\xfb\x99\xcb\xe0\x7e\x40\x2e\xf2\x30\x14\xa0\xd7\x2a\xb8\x85\xf2\xaf\x2f\xc9\x86\xb4\xb9\x09\x66\x43\x59\x99\x8f\xdf\x11\xdb\x14\xa8\x94\x6c\xf9\x50\xe7\x23\xb4\x46\xd7\xd2\x1f\x6c\x37\x0c\x1e\x16\x02\x73\x64\x13\xac\x52\x55\x13\xe8\x80\x67\xd6\x44\x57\x37\x78\x95\x1a\x51\x35\xab\xb5\xd8\x9a\x58\xd5\xea\xb3\x70\x82\x52\x6a\xc3\xed\x0d\x21\xae\x0b\x2c\x6d\xf9\xc2\xba\x66\x10\xc6\xdb\x82\x95\x70\x9b\xb9\xd0\x0a\x4b\xb6\x59\x4d\xb6\x23\xa7\x2d\x94\x97\x9b\xc1\x95\x97\xbb\x50\xb7\x85\xf2\xbd\x34\xb4\xe4\xef\xa0\xf7\x8f\x07\xc6\xf5\xde\x81\x79\x7d\x77\x0b\xe5\x2f\x2c\xcc\x31\xaf\x9c\x4e\x99\xfa\x71\x2a\xe9\x20\xc3\xf0\xe6\x0c\xf5\xcf\xcb\x53\x2b\x63\x08\x9c\x27\xdb\x4b\xdc\xca\xd8\x80\xdc\x99\xa8\x3c\xad\x6d\xf0\xe5\x20\x9d\xc7\xd5\xfa\x9d\x79\x32\xf9\x4e\x18\x05\x8e\x29\x05\x9a\x77\x1b\x9a\x2b\xbb\xa9\x1a\x8b\x73\xc0\xac\xa1\xf2\xb6\x2d\xd4\x67\x31\xd7\x03\x3b\x0b\x6b\x45\xf5\xe1\x7c\x61\x40\x73\x93\x39\x3d\x9d\xdb\xbe\xcc\x55\xdb\x03\x9e\x04\xf3\x8b\x11\x2f\xdc\xcb\x39\xa5\xe2\xc2\x4e\x56\x8f\x0e\xf9\x2d\xee\x24\x71\x0b\x4e\x15\x9b\x10\xf5\xc4\x4d\x8d\x09\x6f\xe7\x84\xf1\x35\x3f\x5f\x6c\xd6\x3a\x5b\x70\xb1\xc9\x3b\x3f\x8b\xd9\x09\xc5\x97\x90\xbf\xe8\xfc\xf2\xb1\x4d\x6a\x7e\x2f\x5b\x07\x36\xbf\x10\x68\xb6\x10\x18\xd0\xdc\x54\x9f\xc2\x6a\xa9\xb0\xe2\x6a\x67\x61\xaf\xd3\xb2\xd5\x11\xa7\xb0\x0d\x04\x69\x1c\x04\x1d\xe7\x7c\x8c\x52\xa5\xe6\xb6\xf0\x5a\xaa\xad\xed\x85\x20\x88\x39\x52\x32\x31\x93\xbd\x59\xf9\x50\x6c\x02\xf2\xb2\xd9\x87\x29\x20\x1f\x58\xef\x56\x0c\x88\x4a\x68\x9a\xf5\x27\x86\x37\x76\x88\xaf\xec\xe6\x92\x2f\x1c\x03\x4e\x28\x75\xec\x5b\x0d\xbe\xe5\xd3\x7e\xa8\x4f\x63\x60\xc0\x48\xdd\xe3\x5b\x5c\x8e\x1b\x13\xaf\xb8\x1c\x05\x7d\x95\x60\xdc\x22\xf1\x54\x22\x57\x03\x38\x4e\x04\x86\x54\xe9\xf4\x16\x17\x7d\x0b\xcd\x61\x04\x82\xf3\x9e\xf9\xb4\xfe\x72\x33\x7d\x4d\xaf\xaa\x6c\xee\x9d\xda\xc9\x58\x34\x13\x42\x5d\xe9\x36\xdf\x80\x55\x1f\xfb\x0e\x1d\x4b\xc4\x2c\x0c\x33\x40\x30\xc3\x40\x8b\x24\x8e\x41\x57\x9e\x59\x98\x78\xb3\x50\x78\x34\x01\xa2\x15\x29\xee\x90\xff\x11\x18\x2d\x1e\xae\x40\x22\xe5\x77\x04\xd2\xcd\x61\x55\x38\xda\x43\x01\xdb\xe8\xbf\x30\x6a\x46\xf7\xb8\xc0\x16\x75\xc3\x26\xa6\xe5\xa1\x50\xc5\x60\x6c\x20\x54\x60\xb9\x99\xf2\xca\xcd\x14\x57\x6e\xa6\xe0\x7a\x8b\x29\x1e\xf8\x3e\x3d\xe9\x13\xb0\x01\xd1\x7b\x7f\x21\x97\x27\x9c\xf3\x86\x78\xc9\xaf\xbc\xb1\xab\x9e\x2e\x56\xb6\x78\xc5\xcd\xf2\x78\xbe\xd6\xc1\x2e\x4a\xe9\x9b\x1d\xe2\x62\x8d\xc2\xf6\xfa\x16\x9f\x94\xaf\xc5\x63\x94\xb3\xee\x1b\x6f\x91\x27\x72\x02\xd9\x40\xa4\x2d\x6d\x0a\xc7\x9c\x97\x49\xa8\x53\xd1\x33\x0b\xbe\xbe\xeb\x4a\x36\x03\xfa\x16\x6a\xee\xb1\x43\x10\xeb\xbc\x9c\xac\x5f\x5d\xa9\x08\x6f\x62\x74\x68\xb1\x7e\x60\x0f\x7a\x8b\x75\x35\x5d\x82\xca\x68\x13\xa8\x55\x42\x99\xb7\x89\x6f\x36\x4c\xca\xdb\xbd\x45\x72\xf8\x8b\x8f\xdb\x8f\x03\xa7\xad\x6d\xfc\x0d\x92\x2d\x89\xb6\x90\x10\xd2\x1d\xbb\xa0\x5a\x4c\xd8\xe3\xbd\x99\x5c\xa8\xd0\xdb\x8a\xa6\x7a\xc9\x87\x49\x21\xd2\xa9\xc4\xbe\xc8\x1d\x19\x82\x9a\xaf\x79\x70\xf7\x66\x0b\xfd\x90\x64\x2e\x24\xb7\x7f\xa0\x94\x4e\xfd\x31\x16\xb9\xd9\x46\xb7\xc6\x36\x6e\x41\xab\x01\x9a\x53\x5d\x3b\x4f\x96\x94\xc1\xef\x46\xe9\xa1\x2d\x56\x6e\x48\xc6\x2a\x23\x9b\x35\x85\xba\xc7\xc3\x32\x7a\x17\x35\x3c\x74\x7d\x64\x2b\xd6\xa3\x60\x6b\x30\xd6\xa3\x47\x17\xef\xd1\x9d\x8f\xce\x7e\xa7\xca\x1b\xab\xb7\x51\x68\x3d\x1b\x24\xdf\x56\xda\x71\x5e\x07\x61\x93\xae\xd1\x64\x45\x27\x3b\x43\xf1\xb9\xa6\x06\xb0\xa7\xb8\x9e\x62\x5a\x24\x3e\x0e\x33\xc9\xc6\x4f\xb9\xa6\xce\x78\x92\x5f\x0b\xfa\xc2\x06\x57\xac\x57\xb4\xdc\x34\x05\x4d\x20\xe9\x17\xe4\x58\x70\xa1\x67\x8b\x63\xe2\x6e\x15\xe3\xed\x0e\xc0\xe4\x76\x47\x0a\xd4\xdc\x52\x7b\xdb\x60\x76\x3d\x40\x19\xdd\x99\x8c\xb0\x32\xb3\x29\x6f\xd8\x02\x4b\x6e\x83\x57\xe9\x46\xfc\xfb\x66\xf3\xeb\x6d\x2c\x04\x6b\x6e\x4e\x59\xb9\x32\xda\x74\x57\x44\xf2\x5c\x05\xbb\x28\x6e\x52\x4c\xc8\x70\x75\xb1\x66\xde\xde\x56\x6f\x83\xc6\x40\x8f\x94\x29\xd8\x46\xc1\xac\x0e\x5f\xd6\xe3\x4e\xc2\xf0\x6b\x78\x6b\x4f\x26\xd2\x38\x89\x6b\x97\x95\x72\x7b\x83\x98\xc8\xe1\x64\xa9\x33\x7d\x35\x73\xd8\x1a\xd8\xe5\x04\x1f\xd3\x53\x6c\xf1\x40\xc2\x70\xe0\xbe\xb8\x5e\xb8\xd1\xbc\x8d\x65\xbd\xee\x66\xc6\xea\xb4\x10\x0f\x16\xad\xf0\x47\xea\xbb\x1f\xd5\x68\xf2\x5f\x17\x8c\x9e\xe2\x5d\x8a\xcd\xc2\x4d\x2f\xaa\x9f\xb4\x46\x27\x88\x28\x04\xcb\xba\x41\x82\x35\x0a\x27\x61\x35\x59\x87\x2a\xb6\xc1\xec\x38\x55\x19\xdd\x75\x3c\x23\xb8\xc5\x76\xfe\x96\xe5\xfa\xd0\xb1\xb5\x17\x4e\x10\x7b\xc1\x70\x6a\xf2\x4b\x82\xe1\x15\xaf\x44\x09\xb2\x3a\xf3\xb2\xb1\xc0\x09\x2a\x29\x79\x01\xb3\x8f\x7a\x45\x2b\x90\x17\xd6\xc5\x03\x31\x1e\x37\x92\xbd\x98\x2b\x2f\xeb\x5c\x5f\xb6\x1b\x34\x31\xe2\xc8\xc5\x35\xba\xc9\xd4\x6b\x4f\x6e\x28\x99\xcc\x2c\x34\xd0\x0c\x7b\x9e\x27\x66\x6a\x52\xdb\xf2\xda\xd0\x73\xe6\x55\x9f\xa1\x27\x86\x79\xb7\xab\x31\x60\x6a\x85\x5e\x30\x1f\x9c\xd5\x28\xd4\x70\x12\x4f\xb6\xf4\x12\xf7\xf8\xaf\x70\x2a\x90\xe9\x53\x8a\xc0\xaf\xb8\x62\xf9\xe7\xb7\x8b\xb3\x13\xc2\x9c\x84\xd7\xf3\x27\x63\xd4\xe6\x41\x36\x04\xb1\x45\x98\x51\x37\x71\x6d\x75\xcb\xfd\x83\xbd\xcd\xc0\x66\xaa\x55\x70\x40\x78\xe2\x21\xea\xdc\xa0\x90\x3c\xf9\xc6\x50\x34\x90\x41\x64\x2c\xce\x83\xcb\xb2\x33\x9e\x81\x61\x7a\xe4\xdb\xa0\x61\xab\x2c\xd6\x84\xca\xc2\x8c\x56\x28\x5f\x2b\xa4\x9a\x87\xf9\x46\xe4\x7f\x28\x82\x78\x02\xf6\x39\xca\xf2\x4d\x37\x50\x66\x37\x91\x7e\x6d\xe1\xd6\x4f\xa1\x0e\xde\x09\x55\xbe\x68\xe2\x26\x00\x75\xa1\x50\x3d\xa5\xdb\x80\x65\x84\x71\x47\x4e\x16\x53\xf7\x39\x31\x1c\x50\xd5\xf2\xc4\x74\xfc\x32\x53\x11\x0b\xda\x4a\xe6\xea\x95\xe2\x31\x03\x55\x66\x4a\xae\x35\xca\xd8\x3a\xa0\x02\x96\x46\x57\xc5\x8e\x5b\xe9\xd8\xc8\x2b\xfd\xfe\xc2\xbf\x46\x22\xbe\x38\xb0\x71\x23\xa8\x9b\xc6\xa8\x8d\x21\xf5\x0f\x0c\x53\xfd\xc3\x9d\xa1\x77\x4d\x50\x87\x6c\xeb\xd6\xe5\x57\x42\xd2\x37\xa6\xdc\x63\x79\x13\x6a\x40\xc8\x19\xe8\x8f\xdb\x3a\x57\xf0\x9d\x26\xee\x2d\x95\x8d\x62\x28\x1b\xa7\x4f\xbd\x4a\x4d\xa5\x02\xe4\xad\xdb\x92\x92\xca\x8f\xb7\xef\xa5\xe8\xe6\xe0\xb7\x9b\x33\x7c\xc7\x1b\xf2\x2a\x1b\xf3\x41\xc7\x76\xe4\xc6\xaf\x3c\x0e\x0f\x24\xd1\x86\xe5\x98\xfb\x7c\x01\x22\x16\x13\xcc\x2d\xe4\x31\x99\x13\x1d\x0d\x61\x99\x72\xef\x82\xc4\x00\x8d\x04\x27\x07\x54\xed\x01\x8d\xbd\x41\xf3\x3b\x7c\x68\xef\x1f\x44\xe5\xde\xcc\xc6\xb0\xda\x75\xb0\xb0\xae\x29\xd4\x08\xf5\x9a\x61\x3d\x45\x7d\xf5\x00\x34\xd1\x20\xd6\x79\x9c\x2a\x86\x29\xea\x25\x66\x81\x74\x11\x1f\xe7\x02\x8d\x2f\xac\xf9\xd6\xdb\xb6\x80\xde\xfc\x0f\xbe\xe7\x46\xcc\x74\x65\xaa\xf3\xc3\xa6\x5a\xd2\xc2\x86\xbc\x0c\xd8\xb7\x0c\x9b\xbd\xd2\x11\x78\x6b\x7c\x20\x73\xc9\xac\xc2\xcc\x7f\x9e\x73\xc0\x8c\x47\x1e\x02\xa5\x7e\xf0\xdc\x3f\xec\xee\xb0\x5e\x88\x1a\x63\x42\x24\x30\xd2\x05\xcf\x9b\x05\xe3\x1d\x82\xc1\x2e\xc8\xba\x0e\x52\x5e\xbc\x4e\x1f\xa6\x56\x44\x01\x71\xb5\xef\xde\x6d\x17\x3e\xec\xfb\x18\xb8\x88\x2b\x02\xc5\x6d\xa4\x60\x7b\x11\xe1\xc8\x76\xb2\x1c\x8e\xdc\x3c\x2b\x01\x62\xfd\xe1\x73\x31\x9d\x1b\x76\xfe\x1c\xec\xcd\xe5\xa0\xb7\xd8\xdf\xf0\x26\x04\x65\x9f\x58\x6f\x92\x59\xa2\x2a\x26\x68\x30\x0d\x09\x33\x78\x7f\x78\x1d\x78\x50\x1f\x92\x8b\x34\xac\xa8\x99\x0a\x25\xe9\x42\x50\xc2\xca\x50\xca\x93\xea\x76\x52\x48\x21\x5c\xb9\xfe\xea\x5b\x2d\xf3\x84\x5c\x32\xce\x5d\x9c\x0d\xfe\xd6\x6c\x48\xe1\xc5\xd4\x47\xd3\xf8\x21\x04\xe6\x1b\x41\xa4\xb5\x8d\xb9\x21\xf9\xea\x9e\xf2\x7d\xd0\x42\x47\x55\xdb\x49\x0c\x29\xe3\x28\x3c\xa4\xbe\x72\x9b\x07\x04\xae\x94\x69\xbe\xf0\xda\x24\xcf\xc5\xed\x04\xdc\x0e\xc0\xc3\xb5\x70\x36\x1d\xae\x85\xd3\x80\x81\xed\xb9\x2f\x32\x5a\x56\x57\x19\xc0\xfe\x63\x89\x08\x3e\x96\x74\xa9\xc3\x0f\x48\xaa\x0e\x58\x0a\xe4\x3e\x07\x6b\xba\xe2\x1b\xf8\x17\x68\xe4\x92\x4e\x9e\x07\x83\x84\x57\xb8\x44\xef\x34\x88\x69\x86\x0e\x17\x55\xed\x0e\x88\x59\x84\x62\x4f\xe8\xb9\xb8\x16\x2b\x0c\x16\x99\x17\xa2\x84\xd1\x7b\xf9\xd5\xed\x24\xc5\x52\x8f\xdc\x1d\xfe\xc0\x97\x09\xc3\x05\x61\x7f\x41\x52\x8a\x17\x67\xca\xe1\x8a\x87\x0a\x7a\x0b\x6c\x34\xbf\xe1\x98\x0f\xd3\x06\x5e\xbe\x0f\x76\xf5\x3e\x5c\xb6\xff\xab\x58\x9d\x64\x96\xc8\xc3\x17\xf7\x14\x93\x9c\x0b\x8e\xb8\x40\x10\xea\x73\xa2\x6f\xbd\x9e\xc8\x66\x35\x4f\x79\xf9\x95\x3c\xf2\x0d\xd7\x93\xa9\x1e\x72\x10\xcb\xe0\x47\x75\xde\x0c\x24\x15\xc2\xd7\x15\x1c\xdc\x0d\xc4\x65\x42\xe0\x5b\xca\x61\x3e\x05\xe9\xa0\x61\x9d\x64\x4f\xd8\x81\xa9\x8d\x33\x38\x35\x62\xc1\x29\x1c\x0a\x37\xf7\xb4\x02\xee\xfd\x93\x89\xc0\xb9\x7e\x1c\xb8\xd9\x62\xeb\x00\x44\x73\xea\x5e\x4d\x4d\x2f\x08\xad\x4c\xd8\x15\x84\x56\xbf\x15\xc9\x63\xb5\xf1\x52\x97\xa3\x06\x2d\x06\xf1\xaf\xa3\x22\x0e\x8d\xc2\xbd\x65\xde\x13\x11\x02\xa7\xe8\x4c\x07\xa2\xe3\x0e\xb3\x31\xa5\x89\x29\x4a\x91\xb8\x19\xce\xc4\xe6\x08\x1e\x47\xdd\xd5\xea\x30\x30\xea\xcc\x3d\xaf\x1a\x2a\xde\x43\xf8\x40\x2e\xef\x31\x2d\x48\xf4\xee\xd6\x5a\xca\xd4\xc2\x6f\x67\x85\xfb\x60\xfe\x1e\x96\xb9\x47\xb8\xd9\x0a\xef\x63\x2e\x4d\x40\x20\x06\xa2\xf0\x56\xc8\x0e\x40\x30\x02\xa2\xf6\xba\x70\x47\xae\xad\x88\xa5\x76\xdb\xd5\xd2\x01\x59\xcf\x07\x36\x53\x04\x98\xb0\xa7\x2a\x90\xc6\x4e\xeb\x33\x99\x59\xb2\xd0\x53\x7c\x39\x57\x2f\x73\x73\x67\xe6\xe2\x80\x30\xa6\xb8\x4e\xb8\xf9\x48\xb9\x40\xb8\x28\xa6\xb2\x34\xdc\x25\x72\x2f\x4b\x88\x33\xa7\x87\xcc\xf6\x54\xcf\xc2\x2f\xaf\x89\x19\x5b\x6f\x56\xc1\xca\xa0\x79\x86\x38\x2f\xa8\x1e\xc9\xca\xb6\xf1\xa9\x17\xc5\x88\xc9\xb7\x2b\x6b\x53\x6d\x0a\x17\x54\xe7\xc8\x9d\x49\x92\x9b\x63\x7b\x17\x2a\xdc\xed\x2c\x0b\x53\x2f\xc4\xac\x30\xe1\x99\xd0\xe6\xaa\xf3\x9d\x40\x0b\x3e\x22\x3f\x5b\x5c\xe9\x37\x36\x06\x0a\x2d\x34\x13\x3a\x75\x68\x53\x55\x02\x0b\xa3\x15\x68\x20\x9c\x1a\x29\x6d\xaa\x2d\xcc\xdb\x30\x12\x5b\xd0\x85\xbb\x7d\xf3\x13\xbb\xdd\xdc\x06\xd1\x7e\xd2\x3f\x1a\xfa\x26\x9a\x15\xde\x1e\x10\x0d\xb7\x09\xee\x0c\x7c\xeb\x16\x41\xb8\x5f\xe6\xfb\x15\x69\xa6\x7d\xef\xfd\x8a\x38\x2c\x0d\xf7\x0b\x15\xfc\x59\x3a\x64\xb5\x14\x83\x9c\x63\x00\x93\xac\x78\x24\x67\x9f\xb8\xf6\x22\x2a\xbc\xc2\x13\xfd\x31\x61\x78\x22\xd5\xb6\x86\x27\xd6\x96\x93\xce\xa2\x9e\xd8\xf0\x54\xd4\xc0\x67\x48\x11\x61\xda\xeb\xb2\x4a\xb4\xbb\x79\xf2\x7a\x8a\x9b\x7f\xb8\x51\x3b\x10\x4c\xb4\xe4\x06\x32\xd8\x0c\xe1\x68\x30\xfc\xeb\x22\x71\x71\x0b\x89\xf6\xc0\xec\x60\x63\x62\x53\xe0\x30\x3a\xa5\xd3\x83\xde\x1a\x29\x8e\x9a\x06\x7c\x2d\x7a\x31\x6c\x92\xbc\xd2\xef\x7c\xfe\x5c\xb3\x73\xde\x9b\x44\xa2\x85\x68\xa8\x4a\xb4\x08\x0b\xdf\x20\x1d\x10\x2e\xd0\x48\x8a\xe8\xa5\x0b\x3c\xdf\xb2\x93\xf4\x50\x32\x07\x12\x5c\x01\x9b\x40\x92\x56\xa0\xdf\x3d\x94\x8c\xf9\x44\xc1\xd4\xa3\x40\xb2\x91\xa7\xec\xa1\xcc\x27\xc8\x04\x3d\x88\x8b\x17\xc2\x42\x9d\xfa\xb6\x35\x0f\xaa\x69\x8d\x9e\x18\xa6\xa7\x6b\x0e\xd5\x54\x4b\x4e\xfc\x0d\x88\x1d\xd0\x50\xd7\xa9\x97\x0c\x35\xb1\xe6\xa6\x8a\x0e\x43\xd5\x3b\x7d\xa1\x3e\xf6\xda\xa4\x10\x35\xc7\x8b\x82\x41\x76\x91\xa5\x04\x70\x96\x42\x0f\x2d\xe8\xb3\x22\xee\x09\xfa\x50\x5b\xbc\xcc\x05\xdf\x17\x0e\xb5\x61\x0b\x64\x54\x16\x48\xe5\x05\x1c\x0a\x84\xb1\xc6\x46\xc5\x9c\x0a\xf3\x25\xd2\x86\x57\x54\x42\x3b\x55\x89\xe2\x1b\x81\xdd\x2f\xe7\xcf\xed\xf7\x72\xee\x7e\xdf\xba\x9a\x7e\x04\x9d\x5e\x0a\x52\xd3\xe1\x42\x3f\xbd\xdb\x1b\xbd\xa1\x8f\xa6\x89\x3d\x14\xc7\xd4\xd7\x73\x62\xae\x2a\x50\x9b\xff\x6b\x59\xd9\x4c\x5e\xdc\x01\x1f\x90\x66\xd1\xcc\xb4\x7a\xbc\x96\xe4\x3c\xdd\xb6\x3a\x7d\x8d\x9c\x12\x55\xbb\xc4\x12\xbf\xb2\x4a\x4f\x07\x15\xc0\x86\xd7\xf2\xd8\x7a\x51\x89\xd6\xb4\x17\xde\x39\x0c\x3a\xc6\xbf\xc2\xad\xdb\x88\x61\x6e\x2e\x23\x6d\xd8\x5a\x0e\xbc\xf4\x1a\x5e\x91\x5a\xec\x05\xa3\x6a\x88\x76\xc5\xc0\x8b\xaf\xc1\x5d\x7b\x0d\xaf\x79\x9c\xca\xd4\x64\x36\x5b\x69\xcf\x9a\x18\xbd\x48\x16\xe6\x4d\x58\xce\xc0\xc9\xa4\x93\x7b\xe1\xdc\x21\xfc\x2c\x6b\x28\xb8\x46\x42\xa6\xb9\xf9\xc3\x09\xef\x0f\x77\xfa\xc3\xcf\x72\x1c\x96\x0c\xb0\xff\x58\x6a\x6a\x40\x75\xd1\xf5\x83\xf7\x3c\x27\xa2\x17\x93\xc1\x11\x02\x27\x94\xbf\x19\x58\x4f\xd9\xc3\xcf\x7c\x23\xd4\xa2\xaf\x8f\x8f\x7e\x5d\x38\xf1\xfb\x59\x43\x60\xad\x99\x84\xe6\xe8\x87\x05\x4a\x05\x99\x98\xc1\x04\x3e\xe2\x28\x84\xee\x9f\xe6\xdd\x98\x42\x0d\xe3\xc9\xd8\x0b\x36\xc5\x85\xc0\x65\xd3\xcf\x9b\x9e\x62\x50\x75\x86\xfa\xf8\xe3\x16\xf2\x3f\x5c\xc7\x0f\xc4\x74\xd8\x3d\x98\x41\xba\xfb\x66\x2e\xb1\x27\x74\x6e\x2c\x09\xf9\xf0\xe1\x67\x13\xee\x20\x33\xa7\x50\x8c\x46\x7b\x3e\x47\x1c\x7e\xd6\x62\x6d\xed\x87\xba\x8e\x06\xec\xf6\xe2\x72\xf8\x71\x57\xf6\x94\xd0\x61\x2f\x96\x2a\xeb\x4d\x07\xa6\x0b\x0c\x37\x3f\x26\x9a\x37\x70\xb7\x2f\x18\xc4\x99\x9b\xfb\x6e\xc3\xec\xcf\x54\xcb\xa0\x35\x72\xac\xff\x08\x2c\x98\x8b\x05\x66\xaf\x76\x86\x9f\x50\xec\x76\xa7\x32\xb8\x42\x23\xff\x39\x31\xde\xff\x9c\x0b\xb6\x65\x15\xe3\xf3\xce\xf8\xe1\x32\x7d\x32\x38\x8b\xf3\xb2\xd2\x3b\x43\xec\xa0\x08\x25\x97\xf6\xce\xe0\x4d\xef\x3c\x87\x1f\xc8\xcd\x0c\x84\x5e\xe4\x07\xb3\xe4\x9f\xa9\x86\xb7\x39\x88\xfc\xa1\x78\x61\xf8\xc9\xb7\x6b\x6b\xf9\xf6\x4d\x3b\x97\xf1\x15\x1a\x40\x76\x79\xa1\xd2\x82\xe1\xe7\x31\xa9\x53\x21\xea\xe0\xe1\x45\x86\x89\xd9\x55\x0a\xd1\xe0\x1f\xb7\xc5\x26\x44\xa3\xa2\x64\xae\x40\x06\x14\xd6\x66\x7d\xf5\xcf\x13\x36\xec\x3a\x4e\xec\xc3\xe2\x16\xaa\x60\x0c\x38\x3f\xee\xfc\x5c\x08\x5d\xf9\xef\x08\xf6\x1d\xa1\x44\xf6\xe3\xca\x98\x89\x83\xda\x46\x1d\xa9\x39\xd6\xb4\x45\x0b\xd9\x5a\x13\x74\xca\x4c\xc4\x2f\x4c\x6e\x19\xf2\x63\x9a\xf6\x14\x3b\x67\xb7\xf5\xb8\x4e\xfb\x1d\x08\x73\x78\x6e\x0c\x2a\xcc\xee\x0b\x53\xe6\x17\xa6\xec\x73\x6e\x32\xe7\x3f\x5b\x46\x9a\x0e\x4e\x25\xde\x59\xf1\xe9\xc9\xc5\xfc\x58\x69\xe7\xdb\x6a\x81\xe9\xd9\x13\x02\xf7\x3c\x88\x1e\xb8\x3a\x27\x95\x2e\xaa\x53\x12\x35\x78\xf7\x25\xc7\x1b\x7a\xe1\x67\xde\x8b\x30\x1b\x9e\x5f\x29\x66\xb2\xfc\x13\xec\xa4\x4c\x50\x67\x7f\xfd\xf4\xc2\xad\xd2\x9f\xe6\xeb\x4b\xb3\xfa\xd2\x4c\x54\x79\x92\xea\x49\xf7\xde\xbb\x7d\xc3\x9b\x8c\x2a\x29\xdd\xc6\x5b\x66\xde\x3f\xff\x39\xe5\x37\x03\xba\x2c\xd6\xd9\x36\x2e\xb1\x7f\x9a\xcf\xed\x66\xb9\xed\x1f\x17\x56\x66\x36\xd6\x82\x9a\xe9\xb3\x99\x44\xf4\x5f\x68\x61\xb7\xb2\xbc\x16\xec\x5b\x0b\xab\x96\x86\x12\x2e\x04\x6e\x4b\x10\x21\xe6\x26\xde\x55\x7b\x93\x56\x38\x9a\xf5\x8f\x80\x25\xc2\x4f\xb7\xcd\xe5\x1f\x73\x90\xd0\x5d\xfc\x62\x7c\xdd\x21\x61\x37\x80\x64\xee\xbe\x7c\x58\x64\xfb\xc2\x97\x0e\xf7\x05\x0f\x8c\xb8\x73\x13\x9c\x9a\x8c\xff\x66\x28\xd2\x4b\x84\x33\x77\xe5\x76\x5f\x4c\xc8\x4f\x30\x5c\x37\xb6\x17\x21\x74\xde\xd5\xf1\x46\x6b\x24\x65\x43\xaa\xf5\x10\x73\x5f\xf0\xb4\xe2\x8e\xad\x8f\x9d\x0f\x40\xee\x0b\x85\x00\xf7\x25\x16\xf9\x6b\xfa\x28\xec\xce\x47\xcc\x76\x7d\x59\x77\x5f\x52\xe2\x99\xcd\x3e\x5f\x64\x50\x80\x30\x52\xd2\x9d\xbb\x7d\x49\x4e\x9f\xb6\x32\xd8\x50\xb5\xf3\xbe\x5c\x31\xc5\xa5\x38\xa8\x03\x04\xe9\x9f\xd2\x9b\x3b\x5d\xfb\x72\xaf\x08\xea\x5e\x23\x12\x2b\xaf\x3a\xec\x98\x1d\xed\x78\x4a\x68\x5f\xee\x86\x5d\x94\x5d\xa3\x2a\x28\xa5\xb2\x32\x50\x5e\x98\xdc\x21\x0c\xb9\xf3\x19\x84\x7d\xa9\xab\x2a\x1b\x06\xdc\x80\xef\xff\x10\xfa\x38\x6d\xde\xa7\x0c\xee\x5a\x70\x16\x2d\x6e\xcc\xd1\x4a\xdf\xee\x05\xa2\x9d\x11\xf0\x69\x33\x81\xe9\x57\x61\xb6\xa4\x0f\x02\x27\xf1\x30\xe3\xa8\xdb\x18\x02\x19\x0b\x43\x6e\x1a\x16\x15\xda\xef\x4b\xb7\x2a\xdc\x93\xda\xbf\x5c\x85\x7c\xb1\x3e\xbe\x32\xcb\x73\xc0\x06\xfb\xee\x1d\x77\x73\xdd\x9d\xf3\x4e\xf7\xb8\x1e\xbf\x63\xeb\x78\x00\x2d\x5d\xca\xb6\xee\x61\x41\x87\xb8\x07\xdc\x58\xda\x83\xcb\x9a\xc0\xc7\x87\xf6\xf0\x51\xb4\xbd\x85\x55\xae\x65\x09\x40\x86\xe2\x97\xb3\x17\xc5\xd2\x53\xc8\x96\xb0\x00\xb6\x33\x3e\xcf\xb9\x87\x80\x5a\x1f\x4c\xc3\xdc\xc4\x30\x96\xf3\x35\x84\xac\xec\xcd\x52\xb3\x3a\xa8\x7e\x8c\xdd\xa6\x16\x3b\x26\x16\x7b\x48\x5c\xed\xee\x61\x0a\x73\x8f\x3f\xb5\xbb\x16\x75\x3d\x57\x41\x02\x75\x24\xd9\x6d\xf3\x79\x0f\xb2\x0d\x90\x1c\x46\x08\x79\x47\x36\x14\xf7\x3c\x3b\x18\xb3\xa2\x70\x5a\xa2\x18\xdf\x51\x32\x3b\x84\x50\x30\xa3\x17\x48\x27\x2a\xee\xb1\x87\xd2\x50\x1e\x03\x71\x96\x0c\xea\x5c\x61\x67\x55\xd9\xdf\xbb\xcb\x3f\xef\xf2\x8f\x2e\x5f\x32\x97\x1b\x28\x8a\x03\x6a\x94\x17\x08\x97\x95\xdf\x55\xf9\x74\xd4\xce\xdd\x91\x89\xe0\x14\x1f\xd4\x37\xcd\xbe\x17\x43\x7c\xcd\xe7\x3d\x06\x8c\x90\x3c\xd8\x23\x8e\x4c\xf6\xf8\x61\x40\x33\x28\xae\x5f\xf2\x15\x71\x6d\x9c\x51\xee\x71\x3b\x98\x57\x71\xeb\x7a\xc4\xbf\xc7\xa0\x17\x0e\xf7\x18\xca\x1a\x08\xa4\xd5\x47\x79\x79\x64\x8f\xc7\xc9\x32\xb3\xab\xca\x53\xf0\xd6\x8c\xbb\xd5\xe9\x98\x96\x51\x7a\x88\x3a\xe1\x93\x63\x42\xb4\xa8\x77\x7c\x8b\x69\x8f\x7a\x06\xba\xc7\x64\x7b\xe1\x42\x9c\x39\x1d\x5b\xe5\x8a\xd7\x07\x27\x42\x76\xb1\x7d\x20\x9d\x0f\xef\x5a\x67\xed\x5e\x35\xee\xbc\xef\x14\xdd\xda\xbd\xb0\xfd\x6e\xa2\xf6\xbc\x13\x8f\xfb\x9a\x7b\x64\x1a\xe6\xd5\xd3\xa9\x52\x55\x42\x70\xfe\xe9\xbb\xd6\x08\xa3\xc6\x31\x7d\xce\x74\xf7\xd8\x2c\x4f\xd1\x45\xf2\xcc\x72\x8f\x3f\xb4\xfc\xe1\xc7\xfd\x30\x87\x13\x47\xde\xc4\x77\x49\x07\xb4\x02\x4f\x0b\x8e\x4d\xf7\x84\x91\x35\xe1\x95\xd0\x81\x7e\xe5\xff\xfa\xc0\x7b\x8f\x3b\xdf\x1d\xde\x13\x07\xb8\xb4\xf0\x35\x97\x89\xe9\xa0\xc0\xbe\xd0\x08\x52\x9b\x13\x6a\xf0\x1a\x30\x3e\x70\xa2\xdb\xe1\x62\x81\xf3\xc0\x5a\x31\x03\x83\x24\xbb\x40\x1a\x73\x68\x98\x90\x9f\x6d\x83\x80\x60\x5a\x7c\xc3\xf4\x57\x01\x94\x79\xec\x09\x82\x64\x7b\x0a\x61\x25\x42\x4c\x81\x2d\x27\x85\x2a\x12\x44\x7b\xb2\x86\x9c\xf4\xba\xe4\x00\x18\x35\x92\x7b\x96\x7a\x9f\x47\x5c\xe2\x2b\xf2\x91\xd8\x3d\xc5\xe7\x41\xc6\xc7\x62\xd2\xc6\x7b\x8a\x16\x74\xe6\xf6\xf0\xc4\xf0\x9a\x8f\xc3\x8c\x59\x13\x70\x97\x71\x9f\x0f\xe6\x08\x10\x11\xb4\x3d\xf1\x70\x6c\xc2\xcd\xd2\x66\xb9\x35\x46\x49\x2b\xc2\xdc\x91\xe9\x3c\xaa\x16\x48\x07\xdf\xda\x3b\x24\x9c\x9e\xee\xfa\x94\xf2\x9e\xfa\x98\x3c\xea\xb7\x4d\xcc\x94\xab\x98\xc6\xce\x97\x95\x27\x92\x70\xba\x26\xba\xa3\x58\xfa\x4d\x94\x6d\x53\x67\x32\x9b\x11\x25\xea\x2c\xda\x13\xb4\x47\xed\xee\x99\x8f\x3d\xf1\x4b\xfa\x5b\x85\xeb\xcd\x3b\x71\x15\x0e\x57\x77\x76\x5c\x61\xde\xb3\xee\xa4\xec\x59\x65\x13\x07\x80\x1d\xb6\x85\x26\x72\x86\xce\x94\xc6\x28\xab\xcc\x46\xab\xef\x39\xef\x99\x9a\x95\x76\x08\x52\xec\x19\x87\xa1\xbb\xbd\xa4\xbf\xe7\x14\x17\x84\x42\xa5\xe1\x7b\x1e\x93\x62\x73\xc2\x19\xf2\x84\x88\xca\x86\xd7\x7c\xe3\x0f\x51\x65\x8b\x3e\x9b\x19\x7c\x66\xbd\x76\xb7\xe7\xc2\xc8\xcb\x87\x4d\x98\x72\xe1\x8b\xeb\x8a\x69\x61\xcb\x16\x9c\x6b\x4f\xa0\x73\xae\x5c\xb0\xa9\x3c\x21\x3c\xd9\xd7\xea\x45\x9f\x3d\x97\xf0\x91\xdf\x30\x1d\x07\x7d\x47\x11\x90\x8e\x0e\x11\xc3\x1d\x50\x1e\xed\x1f\xe8\xeb\x76\x19\x25\x14\x56\xba\xc0\x1b\xb0\x06\x97\xec\xc1\x2c\xb6\x1a\xf0\x9d\xa1\xce\xbd\xae\x9b\x11\x4e\xb5\x62\xde\x1f\x75\x94\x09\x23\x6c\xe1\xcd\x5d\x93\x77\xbb\x07\xfc\x86\xe0\xe2\x9e\xa7\xe6\x3e\x73\x45\x3d\x7e\x8a\x99\xa2\xc3\x25\x95\x85\x73\x84\xc6\x2c\x3e\x42\x6b\xde\x49\x73\x7e\x29\xe4\x2a\x04\x9f\x76\x40\x55\xe8\xc0\xcc\xc6\x23\xeb\xb3\xf6\x7b\x2e\x49\x1e\xf6\x9e\x4a\x60\x38\xad\x52\xd2\x90\x8f\x17\xef\x60\x4f\x82\xe1\x0b\xba\x62\xa6\x2e\x71\x57\xd6\x17\x65\xa6\x84\xb8\x90\xea\xf2\x85\x98\x2b\x87\xb1\x5c\xea\x37\x93\xd1\x4e\x3c\x2c\x3d\x9f\x24\xb1\x75\x61\xb6\xb7\x06\x07\xb6\xd5\xc7\x20\x2a\x42\xb8\xe7\xf2\xbd\x94\xcd\x90\x3a\x1f\x03\xb8\xbd\x6e\xa8\xbc\x7a\x4b\x7c\x9e\x75\x38\xd9\xcd\x02\x71\xa5\x7c\xcf\x5a\x18\x1d\xf5\x41\xd7\x0a\xdc\x09\x12\x54\x3c\x66\x18\xa6\x30\x78\xcf\x3f\xf8\x9f\xdd\x46\x71\x4b\xf9\x81\xd1\x9b\x97\xe5\xd0\x99\x47\x59\x0e\x6b\xf7\xc5\x66\x05\x65\x99\x27\x3c\x7b\x59\xb8\xb0\x2b\xcb\x15\x3c\x56\x2f\x26\x82\x32\xc8\x97\xfc\x4f\xc5\xd1\xc9\xb0\xb9\x70\xc7\x7e\x64\xfa\x25\x65\xe9\x1b\x74\x84\xee\xbc\x97\x41\x1d\x41\x7b\xa1\x8e\xb2\x7d\x3e\x69\x2e\x7d\x4e\x09\x63\x4a\xab\xa6\x81\xb3\xf4\x12\xa8\x92\x60\x2f\xe1\xfe\x8b\x80\x90\x05\x04\x34\x0f\x42\x51\x0b\x0b\x9b\x08\x1f\x9e\x9d\x08\x89\x0d\xba\x60\xe5\xb6\xdb\x5e\x6c\xd3\x72\x9f\x1a\xac\xb1\xa1\xa2\x44\xc3\x88\xfc\x47\xd9\x4e\xa8\x2f\x93\x92\x48\xa7\x25\x4c\x23\xb2\x0f\x72\x42\x32\x20\x48\x97\xa9\x0e\x1a\x38\xaa\x93\x84\x30\xea\x17\x1d\xd6\x2f\x35\xb3\xa1\xae\xc4\x57\xc6\x44\xb4\x44\xcb\xee\x01\x7f\x81\x04\x64\xd6\x9a\x5c\x1d\x52\x4b\xd5\xa0\x32\x11\x22\xb4\x59\x46\xc9\x68\x4e\x25\x73\xcd\x5d\xb2\xbc\x6e\xbf\xcf\x8b\xf8\x68\x92\x83\x74\xa4\x48\xb5\xd5\xef\xa5\x47\x7e\x63\x8f\x1a\x67\x9f\x6b\x4a\x16\x46\x77\x4b\xcc\x8e\x47\xaf\x76\xbc\xa2\xbe\xf7\x90\x08\x80\x34\xf4\x7e\x40\xbd\xd5\xde\xd3\x6e\x97\x02\x94\xa9\xe3\xe4\x96\x27\x94\x16\xde\x7b\x92\x20\xd2\x15\xf5\x62\x94\x62\xa4\x24\xb9\x3b\x8f\x7b\x4f\xfa\x6e\xfa\x4e\x3d\x98\x13\xc1\xfa\xe2\xc3\xbf\x3b\x14\x8e\xef\x53\x33\x3f\x6a\x96\x12\x5a\xb1\xb7\x9c\xca\x0a\xb1\xab\xbf\xb3\x17\x99\xa2\x0f\x30\xc3\x51\xcb\xde\xe5\xa5\xeb\xbd\x97\x8f\xc0\xb9\x41\x2f\x1f\x5c\xa9\xf4\xb2\x6a\x47\xd8\x8b\xe5\x86\xbd\xc8\x3e\x31\x7b\x17\x3c\x1a\xb2\xdb\xfb\xec\x90\xa1\xb6\xfb\xdc\x3b\xa7\x40\x36\x01\xea\x3a\x1f\xed\x58\xa3\xf7\xd6\xf9\xca\xe8\x81\x7d\xd1\xc3\x4e\x17\x0e\x74\x7c\x03\x48\x85\x38\x78\xc2\x30\xd0\xac\xb4\x03\x54\xd1\x4c\x73\x2c\x3a\x4a\x1e\x63\x28\x9e\xe5\x73\x60\x10\x9e\x40\x5b\xe7\xc1\x0d\xc5\x63\xca\x69\x10\xbf\x78\x1d\xf2\x58\x2e\x26\x88\x45\x36\x60\x36\xd3\xfc\x66\xec\xcd\xcd\x22\xe8\xcd\x95\x63\xb9\x24\xb1\xba\xb8\x1a\xa0\x84\xdb\x63\x69\x06\xc7\xc2\xe4\x60\xba\x75\x2c\x7a\x03\x6d\x00\x44\x53\x36\xfa\xb6\xad\x93\x63\xa1\x7a\xe6\x01\x51\x80\xc7\x52\xec\x7d\xf2\x41\xb0\x1c\x3d\x16\xba\xd0\xf2\x42\x8d\x3c\x6c\xc3\xeb\x58\xe4\x6d\xbd\x63\xe9\x48\x4f\xbf\x1b\xa4\x9f\x8e\xe5\x0f\x1d\xe8\x01\x75\x93\x07\x36\xd8\x0e\x11\x60\x47\x9e\x0a\xd3\xa8\xb1\xfb\x20\x9a\xde\xb4\xc4\x27\xc6\x20\x4b\x86\x50\x85\xfe\xbd\x59\xfe\x79\xcb\xe6\xac\xda\x9b\x85\xb4\xf8\x49\xa4\xbe\x09\x9a\x8d\x65\x62\xa4\x4a\x5f\x11\x19\xc0\x3c\xb5\x10\xd4\x50\xeb\xee\x40\x0e\x5c\x0b\x9e\xab\x34\xfe\x2b\x4c\x85\xa2\x8e\x90\x37\x95\xa9\x39\x42\x3e\xca\xa2\xaf\x73\x1b\xd1\x68\x9d\x7c\xcb\x11\x32\x15\x41\x10\xab\x4d\xb9\x16\x0d\xb7\xb0\x2f\x3a\xfc\xa1\x0c\x08\x72\xa1\xb8\x6b\x6c\x53\x8f\x02\x5e\x13\x25\xa1\x53\xf2\x77\xc7\x7a\x78\x36\xb8\x3e\x3e\x22\x50\xbd\x9d\xb9\x36\x64\xc2\x09\xdd\xd7\x47\xdc\xa4\xee\x44\xbd\x7e\x76\x44\x14\x3b\xfa\xda\x23\xce\x3d\xc7\x23\xe2\xe9\xd4\x23\x16\x1d\x5f\x6c\x82\x8a\xd9\x29\xa7\xa6\x47\x5a\x74\x1f\x4b\x90\x86\x2e\x6a\xbe\x0e\xf7\xa6\xe7\xc4\xdd\xc8\xbc\xeb\x54\x04\x17\x86\x85\xda\x3f\xd0\xaf\x00\xad\x66\x89\x17\xd1\x0e\x3e\xb9\x79\xa4\xa0\x6b\x98\x23\xc5\x0f\xf9\xdb\xe0\x28\x5e\x0f\x02\x9b\xe7\xd9\x34\xb7\x65\xa6\x12\x89\x88\x4b\xfb\x23\xe5\x0f\xa6\x2d\xe7\x4b\xad\x79\x4f\x43\xf0\x2f\x1d\x43\xeb\xdf\x31\x56\xfa\x4b\xa1\x23\x7e\x4b\xc6\xb7\xe8\x3d\xe7\xc3\xad\xe1\x0f\x2e\x0d\x8f\x94\xf1\xa9\xdd\x5a\xe7\x5c\x15\xc3\xb4\x65\x18\xdf\x4b\xd1\x52\xbb\x75\x4f\x65\x80\x59\x32\x77\x46\x57\x9e\xf5\xac\xe8\xc8\x98\xf6\x08\x9a\x73\x9e\x09\xa5\x96\x64\x99\xfa\x1c\x19\x7a\x7d\x8f\x1c\x31\x57\x39\x72\x92\x25\xe5\x91\xe9\x0c\x36\xba\xd0\x39\xc6\x1c\x1c\x9d\xe5\xc4\xe2\xac\x69\xcb\xc2\x7a\xe5\xc8\xe8\xb7\x72\x6f\xe2\xe4\x65\x7a\x23\x84\xa8\xfd\x8b\x7a\x22\x04\x73\x8c\x3d\x70\x8d\xef\x28\x0b\xb6\x62\xa9\x53\x60\x02\xad\x0f\x65\xc1\xe6\xbf\x40\x3a\xdd\x68\x28\x47\x6b\x82\x9a\x33\x35\xb7\x3b\x8d\x6d\x2c\xe4\x9d\xcc\x77\xbd\x32\x63\x4a\xaf\xa6\x9c\xec\x0e\x8c\x8a\x24\x90\xe1\x3d\xa7\xb9\x41\x0f\xe4\xbb\x9f\x89\x71\x75\x73\x30\x95\x77\x12\xc8\x04\xd6\xc7\x82\x51\x9d\xce\x13\x99\x83\x4a\x43\xa9\x83\xc5\xd2\xd0\x2c\xaf\xdc\x4a\x4d\x19\x1d\x59\x4d\x2f\x2e\x67\x6c\x01\x47\x01\xf7\x09\x92\x83\x6f\xf8\x17\xf0\x56\x60\x47\x24\x64\x3a\xdd\x22\x7f\x69\x7a\x7e\x11\x10\xb2\x03\xaa\x28\x26\x92\x90\x43\xd8\x00\x50\x3c\x01\x23\x63\x09\xc7\xc2\x46\x5a\x02\x82\x8b\xe1\x65\x08\x49\x61\x6f\x58\x54\xc1\xc8\x51\x22\xe7\x7b\x03\x23\xf4\x28\x0b\x93\xc3\xe6\xef\x47\xc9\x0b\x6a\x6d\xc9\xac\x25\x39\x5f\x44\x88\x30\x57\x49\x4b\x6e\xa1\xfe\xeb\x12\xb4\x2e\x46\x05\x30\x42\x2e\x4d\x07\x7c\x9c\x31\x4a\x3b\xbf\x02\xeb\xc3\xc0\x46\xbe\x0d\x39\x43\xc9\x7f\x4c\xd0\x27\x82\x65\x0f\x3a\x4f\x3e\x4a\xdf\x77\xf9\xb7\x39\x57\xe9\x97\x34\x6c\x6d\x37\x7d\x19\x55\x5d\xd4\x31\x0e\xc2\x34\x77\xac\xdc\x8f\xce\xdb\x68\x47\x17\x0d\x8d\x6a\x4c\x61\x8b\x89\xd5\x54\x06\x37\x31\x8d\x16\x5a\x44\x60\x31\xa1\xc2\xf6\x98\x52\x86\xee\xb1\xa3\xb3\xb3\x44\x63\xd3\xf5\xfd\xd1\x53\x9c\x2d\x7e\x62\xd5\xd0\x73\x74\xec\xaf\x1e\xbd\xf2\x75\xa2\x83\xdd\x6c\x6f\x1c\x55\xbb\xd6\x94\xce\x12\xfe\xbd\x6e\x9c\x30\x1f\xbf\xd6\x1e\x7e\xa5\x5c\xcf\xc5\x04\xb9\x26\x36\x53\xc9\x33\x85\x30\xd7\xad\xef\x01\x12\xd1\xad\xf5\xf3\xa4\x96\xf5\x89\x24\xa6\xd3\x74\xbf\x9f\x38\xe4\x3f\x97\x38\x3f\xe1\x5c\xd4\x9c\x1b\x8f\x03\x76\x3b\xb7\x36\x8a\xc0\xc0\x33\x02\xc8\x70\xd8\x0c\x14\x07\xe9\xd1\x82\xc0\xa7\x5f\x17\x5d\x52\xf3\x84\x40\x38\xbd\xb7\xb8\xe2\x16\xc2\x49\x15\xee\x03\xe1\xfd\x0d\xc5\x8e\x48\x7d\xa4\x24\xe4\x00\x0c\x0e\xb9\xf7\x3c\x11\xff\x73\x90\x1b\x48\xbe\xa7\x2c\xb7\x9e\x86\x0f\xac\x15\xed\x5c\xca\x47\x2e\x06\x3b\xf1\xc6\xd3\xfa\xd3\xa6\xf5\xe7\x52\x10\x11\x05\x07\x4e\x08\x0e\x0c\x20\x75\xf2\xa4\x08\xc1\x40\x2a\xc1\xac\x50\x6a\xe7\xb9\x14\x7c\x7b\x79\xe8\x54\xa7\x0b\x03\xb1\xd4\xca\x9c\x7e\x9d\x4b\xa1\x8e\x89\x13\xeb\x83\x73\x31\x93\xc6\x14\x56\x16\x87\xec\x0c\x9c\x4e\x47\xcc\x49\x05\x31\x27\xeb\x01\x7a\xfe\xd3\xaa\x42\x47\xa6\xe3\xa0\xe7\x5c\xbe\xf1\xdd\xa8\x90\x7f\x68\xd8\x02\xe1\x75\x60\x7c\xe2\x1f\xec\x67\x32\xa0\x5a\x60\x00\x35\x60\xf5\x0d\xba\x9d\x7f\xf2\x79\xd0\x81\xda\xa9\x65\xa8\x78\x4e\x55\x84\x68\x00\x0f\x7c\x15\x0b\xa9\xc0\x88\x01\x95\xa6\xce\x9b\xb9\x6a\xf0\xd9\xce\x39\x0a\x9d\xb8\x56\x3e\x81\x2c\x14\x06\x94\x7f\xbd\x13\x7e\x06\x8a\xe3\x9c\x61\xcb\x37\xd6\xc9\x27\x04\x88\x07\xd0\xdc\xa4\xc8\xc0\x19\x50\xa1\xc3\x8e\x58\xdd\x5e\xd2\x19\x92\xfe\x5d\x01\xd6\x94\x83\x1d\x90\x66\x08\x38\xa1\xc2\x40\x13\xf4\x19\xb4\x3b\x3b\xc7\xe2\x6b\x73\x50\x53\x57\x3e\x96\x55\x05\xb1\xce\x50\xe8\xc0\xfa\xa7\x50\xae\x80\x4f\x29\x57\x7c\x87\xd2\x5b\x85\x92\x61\x9a\x9d\x99\x4e\x1b\xcf\x50\x21\xf0\x29\x10\x75\x49\xc9\x4b\x1c\xd9\xd6\xc2\x19\xbe\x19\xb9\x56\xf5\x30\x87\xa3\x73\x6e\x1a\x9c\x38\xbc\x38\xe3\x86\x94\xc7\x80\x2b\x1f\x80\x92\x8a\x98\x38\xa0\x9f\xba\xe9\x76\xc6\xdb\x1e\x0a\x14\x22\x71\x44\xdb\xc5\x3d\xa1\xd7\xe9\xc4\xc5\x98\x33\xc2\x15\x7a\x87\xa9\xe1\x46\xa3\x14\xa8\x51\x4e\x42\x37\x25\xa2\x8d\xcf\x93\xe4\xd3\x4e\x92\xcf\xcc\x66\x92\xad\x95\x64\x19\x07\x4f\x3c\x24\x7f\xe6\x0f\x8c\xac\x27\x14\xb4\xa8\x92\x82\x13\x27\x54\x27\xcf\x9e\xce\x79\x84\x44\x00\x33\x09\x51\x1f\x08\x3f\xa7\xe2\x14\x11\x5e\x18\x38\xa1\x78\x81\x61\x93\xc7\x3a\x5b\x33\x4f\x98\xce\x33\xcf\x6c\x57\x3c\xce\xb7\xcb\x64\x60\x6f\xee\x10\x84\x56\xea\xcc\x91\x2b\xab\xee\x6f\x53\xcf\x35\x10\xfa\xd9\x9c\xb7\xef\x88\xce\x3b\xe7\x1d\xe0\x01\xc0\x27\x3f\xe8\xa5\xb0\x31\x74\x66\x4c\x83\xcf\x5c\xe2\x1f\x23\x9e\xb8\x69\x42\x0b\x4d\x73\x5d\xf3\xa3\x1f\x53\xb8\x7a\xf3\x72\xd2\xa7\x8a\x8a\x9e\xb9\x3e\x4e\x55\xed\x58\x35\x47\x2d\xcb\x59\xb8\x9c\x84\x9d\xb9\x73\xac\x1a\xf0\x3b\xee\x9a\xf9\xfd\xc3\xea\xb9\x0e\x39\xd0\x2e\x72\xf6\x6b\xde\xe1\x9a\xff\x01\xc0\x5c\x0f\xd2\x16\xbd\xe8\x75\xce\x2d\x4a\x02\xf5\x1f\xf9\xcf\xcf\x10\xa2\x73\xf3\xc1\x78\x0e\x09\x42\x2b\x14\x42\xe7\x62\x7c\xc0\x6e\xa6\x9d\xc6\xea\x85\x4b\x98\x93\xc3\x01\x9f\xb1\x39\x7b\x21\x40\x83\xe8\xa5\x30\x25\x53\x92\x79\xfc\x69\xe9\xf1\x25\xaa\xb3\x9b\x96\xc1\xd3\xde\x1b\x3a\x39\x21\x3b\x7b\xfd\x32\xc3\x2f\x38\x6c\xc9\x10\x1c\x72\x4c\xeb\x7f\x7f\xa2\x63\xf1\xfc\xdd\xb0\xb6\x99\xb0\xcb\xed\x9e\x81\x33\x0b\xf6\xf7\x88\x7a\x53\xe9\xfc\x3d\x8a\xed\xea\x9c\xbf\x57\xb8\x65\xc7\xf6\xfc\xd5\xc7\x1d\xcf\xdf\xe7\xb4\x09\x81\x90\xe6\x6c\x00\x6f\x15\x70\x57\x58\xcd\xc7\xa0\x7f\x46\xb3\x7b\x1b\x6a\xd0\x76\x52\x2d\xbc\x52\xb3\x9d\xa7\x57\x42\x22\x94\x5b\xc5\xe5\x47\x76\x5a\xe2\xba\xe0\x6a\x63\x5c\x43\x4a\x3a\xed\x8d\x53\xf9\xa1\x80\x3b\xaf\xd4\x62\x11\xd7\x3c\x15\xc3\x4e\xd8\x4b\x55\x8f\xbd\x3e\xb3\x5a\xc5\x2d\x48\x0e\x0e\x90\xf0\xaf\x5b\x7f\x8a\x35\xa0\x49\xfe\x68\xd1\x0c\x49\xb9\x08\xd4\x65\x9c\x5c\x64\x5a\x1d\xe6\x1a\x13\x14\xfe\x6f\x5b\x65\x8e\xbe\xdf\xd6\xc4\x8e\x69\x38\x91\x7a\x34\xe3\xbb\xd2\xcc\xb8\x69\xd0\x09\x01\xe5\xb4\x40\xc1\xe5\x20\xfc\xa2\x6c\xdf\xf0\x9b\xa4\x96\xc4\x1d\x7f\x9a\x95\x7b\x5a\x0e\x79\xa4\x55\x18\x1a\x4e\xd4\xf3\x7e\xc0\x4c\x27\x38\x4e\x9d\xc8\xda\xf3\xa4\x29\xcc\xf5\x5e\x3c\x6e\x8e\xbf\x13\x8b\x87\x81\x34\xcd\xc7\x7c\x20\x41\x47\xb6\xc1\xf4\xa0\x70\x42\xb8\x86\x0c\x66\x94\xb7\x84\x07\xb2\xcb\xa0\x53\xe0\xb7\x03\x9a\x29\xee\xfe\x0c\x74\x19\xc2\x96\x25\x48\x7b\xb3\x42\xb2\x48\x5f\x41\x29\x15\x2d\x0a\x31\x73\x59\x4a\x4c\xc8\x83\x21\x32\xe7\xae\x61\xfc\x8e\x29\x7f\xa8\xab\x8c\xad\xd0\x88\x57\xa3\xe2\x7c\x34\x0a\x59\x26\x44\x22\x10\x8c\x10\x27\x53\x1f\x1f\xaa\xd7\x7b\x22\xfd\x80\xeb\xa3\xab\x99\x15\xc0\x45\x91\x4d\x81\x70\x6a\x93\x97\x78\x5d\x0b\xd7\xa4\x83\xa8\xb2\x8b\xa9\xec\x35\xd2\x18\xba\x33\x26\xac\x80\x4e\x4d\xc6\x60\xe6\x35\x27\x46\x7b\x75\x1c\xd9\x0a\xfe\x23\xd6\xc2\xbe\x1e\xc8\xd9\x0f\x48\x9d\xe0\x42\x68\x5e\x9a\x83\xda\x45\x08\x36\xe7\x4e\x89\xe4\xa0\x78\xa3\x79\xe0\x6f\xe4\xdc\x13\x4c\x1f\xb7\x32\xb3\xd1\x4e\x7f\xe0\xcd\x10\x3e\x90\xd7\x63\x06\xb4\x92\x9e\xcb\x3f\x24\x68\x42\xf6\x25\x93\x6b\x15\x18\xb8\x59\x16\x8d\xe1\x9e\x01\x27\x28\xc8\x18\x98\xe2\xf9\x93\x10\x65\x97\x31\xb8\x50\x12\xaf\x79\x71\x04\x41\x66\xcb\x24\xde\x1b\x11\xdc\x2d\x5b\x26\xa3\xb3\x6a\xc8\xdc\x63\x26\x30\xb0\x88\x85\x82\xda\x23\x1f\x93\x50\xe3\xfb\x64\xb5\x7a\x6c\xe5\x82\x67\xc7\xdf\x0d\x90\x79\x25\xda\xb7\xcf\x83\x23\xe7\x8e\xe7\x48\x83\xb8\x7b\x28\x93\xbe\x1c\x64\x0d\x7b\xfa\xe1\x02\xe8\x07\xbd\xf3\x01\xd4\x81\x9b\x73\xa2\x21\xde\x4b\x3f\xf8\x98\x41\xbc\xd7\xa5\xd8\xc5\xd3\x49\x91\x83\xc0\x6a\x01\xbd\xa2\x03\xe2\xfa\xe3\xc0\x15\x47\xcd\xf1\x5e\xcf\xbc\x98\xcd\x1c\x0a\xa4\xba\xdc\x6b\xbc\x7d\x24\xb1\x1a\x32\xf7\xb4\x36\x5d\xc1\x42\x9c\xb9\x96\x9d\xa9\x54\x19\x90\xd7\x22\x85\x38\xf3\xe8\xcc\x2d\x26\x79\x2a\x17\xb7\xbb\xe2\x7c\x68\x35\xbb\xe4\x95\xc0\x0b\xf1\xd1\x3d\x57\xa9\x98\x49\xf0\xba\x79\x8d\xd2\xba\x7f\x98\x9d\xe9\x64\x19\x0b\x18\x7b\x26\x2f\x4e\xb5\xfc\xdd\xac\x7e\x80\xac\x71\xdc\xee\xaa\x7e\xbc\xdd\x53\xca\x42\xe8\xe8\xc0\x61\xe7\x24\x18\x0a\x44\x77\x65\xb7\xa1\x1e\x06\xf4\xa8\x2a\x23\x8d\xa3\xdb\xbb\xa1\x63\x6c\x22\x66\x25\xdf\x16\x13\xc8\x84\x41\x6f\xa5\x42\x44\x4f\x1d\x96\x71\xaa\x7c\x69\xc1\xa0\x79\xe5\x63\x14\x46\x2c\xbd\x7e\x7c\xb9\x83\xc9\x26\x83\x20\x78\xb9\x76\x17\xe7\x7d\x08\x3a\xd9\x83\xcb\x2f\xea\x44\x13\xc8\x40\x4d\x27\xda\xc0\xc5\xb9\xb7\x07\xc3\x26\x7b\xb3\x2a\x0c\xaa\x94\x68\xe6\x95\x51\x38\xa1\xea\x68\x82\xcf\x03\xa2\x98\xf7\xa4\x42\x41\x02\x2f\x0b\x3e\x99\xc7\xe4\x52\x9d\x7c\x4a\x53\x74\x16\xdd\xea\xb3\x10\x64\x8b\x88\x88\xf2\x23\xf0\x20\x4e\x7c\x13\x20\x8b\x26\x42\x26\x90\xbe\x79\x39\x6c\xe0\x78\xa3\x8c\xf7\xee\xca\x01\xa2\x0a\x13\xd1\xa7\xb5\xb8\xc3\x32\xe5\xa0\x14\x7f\x74\x87\x32\xd1\x1d\xc5\x44\x39\x9c\xb0\x72\xf5\x3b\xb1\xd1\xed\xc5\xc6\x1b\xf7\x71\xa7\xfa\x67\xd4\x38\xbf\x31\xe2\xf5\x42\xc7\xdb\x6e\xe3\x2a\x66\x0c\x98\x45\x8d\x19\x83\x4e\x4e\xef\xf8\x8f\xc7\x22\xf3\xf1\x36\xc6\x35\xb1\x27\x5a\xac\xb1\x59\x8e\x4c\x8c\xef\xfc\xf4\x75\xf0\xd3\x4a\xf3\x93\x0d\xff\x13\x07\xbe\x02\x11\xeb\x97\x5a\xeb\x1b\x41\xf1\x66\xdf\x7c\xe7\x15\xdf\x7b\xe7\x95\x3d\xf0\x9d\x5f\x96\x6f\x42\x34\x0d\x73\x3a\x86\x34\x64\x53\xa5\x06\x02\x77\x54\xf4\x13\x9d\xa2\x9f\x89\x6b\xf4\x8e\x6a\xe4\xa5\xeb\x78\xdb\xfb\x2b\xf1\xe6\x6b\x2a\xf1\xae\xbc\x23\x35\xf0\x6d\x8d\x52\x08\xc2\x56\xa6\x61\x57\x5e\x5d\x8e\x77\xb5\xe9\x95\x60\x7a\x79\x2c\x17\xeb\x63\x53\xa9\x49\x9c\xb9\xb9\x8f\x56\x0d\xea\x13\x6b\xb5\x70\x9b\x15\x66\x6d\x0b\x1b\x11\x9f\xdf\x18\x90\x32\x45\x20\x4c\x2d\x95\x31\x4f\x7c\xaf\xde\xa6\x75\xe7\xa9\x99\xc6\x06\x72\x3a\x2d\xd6\xa7\xbe\xbd\xb1\x42\x8a\xef\x70\x2f\xae\x08\xbb\x6c\x90\xad\x98\x70\x0f\x64\x15\xae\xe2\x0d\x1f\x81\x0c\xaa\xbb\x5c\x63\x45\x6c\xe1\x30\xe3\x49\x92\xc1\xe6\x1d\x31\x15\x6d\xcc\x16\xd7\xff\xd2\x4e\x8f\x89\x4f\x3c\x0c\x86\x19\xd7\x3d\xef\xc8\x72\x18\x6c\x7c\xa6\x71\x62\xba\x76\x79\xd6\x42\x59\x97\xe4\x12\x51\xa8\xbc\x81\x0c\x1f\x37\xa8\x57\xc0\x30\x4d\xdc\x68\xd9\x42\xb1\x2e\x49\x88\xf3\xea\x9a\x68\x0b\x05\xca\xd1\x85\x60\x9b\x59\x98\x35\xd1\xc1\xb0\xf5\x37\x99\x5b\x55\xdc\x72\xb1\xf7\x48\xce\x96\x1a\xf6\x94\xb6\xe6\x2d\x9b\xcb\x83\x62\x8a\xf7\x26\xbd\xdd\xd8\x38\xe9\x7b\x1e\x3d\x09\x1b\xf5\x42\xf3\x5b\x96\x4d\xea\x22\xe6\xc4\x58\x89\x8b\xe7\x29\xa1\xf9\xec\x9b\xfc\xcd\x2f\xee\x8d\x91\x39\x4b\xab\x50\xa5\xe4\xc3\x87\x33\x5f\x0b\x7b\xb7\x7d\xf3\x68\x8f\x89\x09\xef\xbe\x90\xed\xb1\x78\xa3\xe6\xb7\xbe\x15\x5c\x0d\xab\x77\x6b\xea\xf0\x27\xa5\xfa\x33\x61\x51\x77\xb1\x85\x41\x85\xca\x64\xdf\x59\x0e\xba\xa3\xd7\x00\x16\x6f\xd1\xdb\xe3\x20\x8d\xa9\x2e\x93\x8c\x31\x61\x9a\x7f\xb7\xfc\xe3\xa6\x78\xca\xe8\x6c\x6a\xeb\xb2\x4c\x33\xe5\x5d\xf1\xd6\x3b\xd4\xc0\x7a\x24\xa6\xd8\x02\xb0\x69\x73\x9b\x8f\xa7\xbd\x91\x68\x21\x67\x3f\x87\x53\xca\xdc\x2f\xd9\x57\x4c\x61\xce\xed\xec\x85\x1d\x9f\xaa\x71\xde\xa8\xf9\xe5\xb4\x7c\x40\x4b\x66\x77\x1e\xba\xb5\xc8\xee\x46\xf0\x41\x5c\x0d\xef\x36\x0c\xd9\x9d\xd0\x78\xb3\x07\xeb\x05\x1f\x6e\x8a\x85\x26\xa6\xe9\xe1\x66\xbb\xd4\xf4\x13\xef\x97\xfb\x98\x57\x88\xc7\x89\x54\x0e\x82\x42\x7f\x41\x28\x50\xa0\xb9\x2f\x66\x6c\x4b\xf5\xfb\x65\xcf\x46\x09\xa1\xa3\x6a\xf7\x7c\x49\xff\x63\xdb\x2c\x01\xef\x83\x0e\x38\xca\xe9\xe5\xc6\xd9\x57\x3c\xdc\x52\x46\x19\x03\x52\x8a\x70\x4c\x01\xd1\x20\xe6\xc9\x3c\x64\xb7\xf4\x78\xe5\x88\x6a\xf4\xca\x5f\x96\xf8\xfc\x45\xd3\xc4\x11\xcf\x35\x21\x6b\x3f\xdf\x54\x5c\x37\xf0\x3c\xbb\x9b\xc4\xf6\x8a\xec\x4c\x2e\x3e\x0b\xb6\xe9\x46\xc3\x45\x05\x78\x42\xc3\x3b\x72\x71\x6a\xc3\x98\xde\x46\xb7\xa6\xc0\x94\x9d\x44\x11\xc6\x88\x65\xd1\x87\x9b\x62\x59\x2a\x3f\xb8\xe8\xde\x71\x2c\x71\xe3\x4d\x28\x2a\xa5\x8b\x53\x57\xaf\x04\x53\xca\xc2\x57\x84\x40\x34\x4f\x4a\xb1\x52\x9c\x98\xae\xac\x02\x4f\xac\xa1\x17\xdb\xa6\x12\xac\x19\xad\x04\x81\xb2\xcb\xf3\x1d\x5c\x0d\x0f\x36\x7e\x6b\xf8\xd1\x3f\x1d\x66\x65\x72\x34\x33\xcf\xa8\x7a\xcb\x97\x4a\x67\x4e\x48\x69\xc7\xc1\x72\xc1\xd6\x6c\xcd\xad\xe8\xf9\x8a\x62\xcd\xb2\x5a\xa1\xf6\x6e\x42\xf9\x8e\x5a\xb5\xd7\xe1\x47\x36\x79\x2a\x74\x9e\xbb\xac\x18\x9e\x54\x5c\x24\xf2\x21\x76\x54\xb1\x16\x2e\xba\xb1\x7d\x81\xe6\xf6\x9a\xda\xdc\x30\x90\xd8\x60\x46\x9d\x77\x03\xa9\x51\xc0\x0e\x38\x74\xe0\x7d\x2e\x7c\x17\xe1\x53\xdb\xfc\x27\xae\x76\x7e\x42\xca\xe2\x73\x79\xa0\x67\xe0\x13\xcf\x23\x0d\x20\xa5\xf1\xb9\xf4\xb1\xb2\x56\xd3\x2e\x8f\xe2\x7f\xf2\xf9\xc2\x4f\xe8\x03\xfd\xe4\x9b\x05\x9f\xd8\x30\x1b\x20\x2a\xca\xcf\x52\x36\xdd\xe9\x00\xfb\x53\x86\xe9\xc6\x67\x80\xbe\xe0\x89\x14\x46\x9d\xb0\x7d\xe6\x35\xcf\x27\x2d\x3e\xb3\x5e\x84\xff\xc4\x69\xe2\x27\xef\xbb\x7d\x66\xee\x96\xcc\xa7\x6e\xb4\x23\xfc\xcc\x5f\xb0\x97\x23\xd5\xcf\xcc\x50\x71\x08\xf3\x99\xe7\xab\x1a\x68\x71\xa0\x9a\xc8\xac\x97\xf6\xa0\x89\xf4\x33\xff\xca\x21\xd0\x67\xfe\xd5\x9c\xe8\x1f\x51\x25\xc2\x3f\xfb\x86\x86\x30\x60\xf0\x78\x03\xd0\xb3\xe6\x4f\x4a\x29\x7d\x76\x53\x50\x28\x58\xcb\x7a\x92\xe8\x6d\x34\x2d\x1d\x72\x34\x9f\x3d\x4e\xcd\x11\x9f\x3c\x59\xfb\xec\xd7\x43\x1f\x25\xca\xd9\xb9\x22\xf5\x5c\x9b\xfe\xd9\xe9\x85\x32\x0d\x61\x4c\x0a\xa6\xf1\x17\x0e\xfd\xbf\x54\x89\xd4\x57\xd0\x0a\xf3\x15\x94\x4b\xae\x7c\xc5\xed\x56\x31\x06\x81\xc0\x5a\x98\x5f\xbc\xf1\xf0\x15\x93\x86\x10\x6f\xfc\xc9\x7b\x48\x60\xc9\x10\xbc\xe8\x7a\x7b\x00\xcd\xbd\x09\x7f\x27\xd0\x7d\xc8\xaf\x1b\x33\xbe\xaf\x9b\xea\x0d\xbe\xa8\x72\xf9\xeb\xe6\x25\x18\x81\xe2\xfb\xb6\x43\xee\xaf\x1b\x33\xd7\x89\x10\x40\x16\xa1\x38\x77\xbd\x6f\x40\xda\x7e\xcf\x4b\xbe\xce\x66\xf4\xf1\x69\xf9\xd0\x8c\x9b\x88\x50\xa7\xc2\x53\x47\x3b\xcc\x70\xf4\x21\x50\xaa\xd4\xc0\xdd\x5c\x74\x3a\xb1\x4d\x4a\xc5\xb4\x40\x49\xa4\x65\xd5\x53\xfc\xb4\xac\xff\x7a\x40\x28\x22\x87\x90\x96\x0d\x89\x41\xcb\xd1\x55\x75\x5a\xae\xa0\x7f\xa0\x3c\x31\x15\x02\x73\xce\x1b\xd2\x72\x3d\x50\x40\x90\xb0\x64\x4c\x38\x0e\x1d\xe0\x82\xa0\x51\x5a\xa6\xd4\x1b\x11\x8e\x47\xe7\x4e\x78\x41\x10\x5a\x6b\xa8\xb5\x7e\x00\xb8\x2b\x2b\x36\xf6\x12\x64\x11\xa6\x1e\xe0\xf9\x5f\x6b\x56\x93\xca\x1c\xe1\x1d\x83\xb4\x34\x68\x9c\x4d\x0b\x37\x49\x27\xd4\x76\x26\x58\xe6\x11\x09\x6f\xcc\xa7\xa5\x1f\x4c\x65\xc7\xcc\x73\xc0\x8d\x01\xf7\xc2\x62\x1e\x10\xf8\x85\x7f\x78\x7f\x89\xf4\xb9\x00\xb5\xfc\x96\x6e\x24\x2d\xdf\xbf\x63\x09\xf5\x25\x09\x81\xea\xe3\xc4\x93\x0a\x2e\x64\x52\x58\x76\xb8\x0b\x54\x6f\x33\xe0\xaf\xfc\xdf\xf2\x87\xec\x1c\x48\x13\x30\x60\x13\x50\xcd\x5f\x85\x3b\xcb\x2a\xac\xeb\x26\xb8\xcd\x29\x34\x26\xa7\xb0\x9e\xb8\xcf\x30\xd7\xb7\xf0\xa7\xbf\x87\x82\x5d\x62\x93\x6b\x51\xf3\x3f\x22\xb6\x83\x7d\x6b\x0a\xb8\x47\x34\x50\xc5\x0a\x0d\x44\xcb\x26\xc4\xca\x58\x26\x4c\xf2\xb9\xf7\xd1\x4e\xa6\xea\xd6\xb3\x9f\x84\xfd\xf9\x04\x5e\x2b\x1d\x89\x41\x3b\x35\x51\xed\x5c\x8a\x08\x86\x10\xc3\xa6\x31\x3f\xe4\x2d\xea\xc4\x17\xda\x26\x22\x8c\xcc\x21\xd5\xed\x3b\xc0\xc1\xef\xf8\x89\xeb\xdb\x51\x6f\xa2\xfb\xc8\xfe\x21\x5a\xff\x30\xa1\xe6\xed\xc0\x06\x8b\x7a\xff\x70\x37\x58\xc0\xfe\x1c\x6b\xc0\x71\x83\x00\x69\x8a\x3c\xb3\x98\x90\xbb\x73\xca\xe8\x8a\x99\x19\x37\xad\x6f\x71\xc7\x58\x95\x22\x5f\xfb\x49\xb8\x6d\x91\xf8\xfc\x4d\x1a\x9f\x8c\x32\xd2\xab\xb2\x89\xbd\xad\x57\xcb\x9d\xdc\x73\x9a\x29\xb2\x0a\x23\x92\xaf\xe0\x4c\xd4\x8d\x16\x77\xfc\x62\x10\x17\xfe\x23\x22\xb8\x68\xf5\xcc\x3f\x15\x7b\xc0\xe2\x6f\x8c\x05\x98\xa3\xa4\x39\x3d\x54\xe3\x7c\x33\xf7\xfe\xf5\xb0\x5b\xe9\x4c\x66\x36\x98\x17\x0f\x12\x37\x02\x66\xa4\x10\x44\x00\x51\x75\xaa\x1c\xf7\x77\x35\xe4\x19\x73\x3b\xc5\x56\xc4\x24\xb5\xb7\x32\x1d\x4c\x7a\x25\x9d\x21\x0a\x3c\x9d\x38\x41\x8a\xb6\x66\x52\xcc\x98\xe2\xc1\xe2\xb5\x2a\xcd\x7b\x2f\x29\xbe\x82\x83\x9a\xcf\x2f\x5c\x64\x4b\xb8\x0e\x93\xf2\xb2\x13\x69\x8e\x52\x2a\x3c\xe5\xa5\x9d\xf8\x87\x1d\x94\x70\x4d\xa8\xf2\xae\x29\x7f\x7c\x68\xc0\xf9\xe3\xe3\x17\xbe\x3f\xd4\x48\x1b\xc8\xf8\xa7\xb8\x89\xb0\x3f\xc7\x1a\x5d\xa3\x77\xc8\xeb\x97\xd9\x67\xbe\xbc\xc0\x47\x0d\x53\xde\xe7\xf0\x4d\x75\x16\x26\x00\x36\x55\xf9\xca\x9c\x0f\x50\xcd\x6f\xcd\x8c\xac\x6b\xba\x04\x01\xae\x04\xc5\xc4\x29\xff\xeb\x54\x26\x96\xb2\xa5\x78\xce\xad\x12\x9e\xe3\x4a\xb9\x6f\x1a\x54\xc7\xf9\x6f\xe2\x3b\x81\x29\x5b\x01\xe8\xf1\xe6\xf8\x57\x0f\xcc\x7d\xa8\xc9\x48\xf9\x5b\xad\x7e\x25\x9d\x7d\xea\x76\x93\x9a\xd9\x9d\x9e\x37\x10\x0d\x00\x4c\x32\x66\x32\x24\xbc\xa3\x62\xf7\x55\xea\x75\x5f\xbf\x44\x58\x55\x50\x55\x4b\x19\x61\xfa\x5a\x2c\x98\x2d\xae\x18\x07\xa0\x72\x23\x41\x3a\x2c\xf5\x63\x44\x03\x6b\x7b\x7c\x61\xca\x5c\x58\x73\x1a\xcc\x2e\xc1\x4f\x4a\xa8\xf9\xac\x02\xfa\xa9\xcb\x12\x37\xe1\x64\x5b\x80\x38\x29\xf8\xff\x42\x2c\x32\xda\x9a\xae\x8e\xc4\x27\xf8\x06\xa2\xab\x66\xb6\x4c\x83\x48\x1b\xa7\xfe\xc3\xe0\x7f\x7a\x89\xc8\xe5\x89\x19\xc0\x0f\x0f\x29\xa0\xd1\x23\xfd\xca\x22\x73\xfe\xcf\x52\xba\x96\x75\xd9\x16\x2c\xf4\x2e\x37\x83\xbb\xe6\x73\x15\x5a\x01\x94\xbc\xd9\x68\x3c\xc2\xc2\x9b\x43\x75\xa6\xbf\x5b\x20\x80\xcd\xc1\xe8\x47\xcd\x86\xc4\xc2\xb5\x1c\xf7\x72\x47\xdd\x08\x18\x4c\x05\x2a\x01\xe9\x2a\x34\xed\x92\x94\xfc\x91\xa0\xff\x16\xfc\x8b\x34\xc6\x2d\xa0\x23\x57\xf2\x2b\x30\x31\xe1\xba\xec\xbc\x16\xaa\xfd\xbe\xf0\xe4\xed\xb5\xc4\xdb\x3d\x41\x00\xaa\x76\x9f\x78\x66\xef\xe2\xb4\xe7\x5a\xd2\xc2\x8f\x4a\x61\x8b\xd8\xb5\x02\x93\xd9\xdc\x60\xaf\xac\x93\x81\x6b\xae\xca\xf1\xed\x89\xa7\xc3\x82\x35\xae\x94\x2c\xa7\x79\x7c\x70\xe1\xf6\xc0\xb5\x5c\xc3\xf5\x9c\x6a\x5d\xcb\xbd\xac\xf8\xa4\xdb\xde\xc1\x15\xa2\xc6\x1b\x8b\xf4\xe6\x14\xf3\x5a\x10\xd9\x1d\x3a\x34\x72\x5d\x8b\x5e\x43\xbe\xf8\x94\xc3\xb5\xdc\x71\x41\x91\x4c\x39\x37\x1a\xef\xd2\x34\x01\x17\x7e\xbc\x70\xba\x7b\xba\x65\xbf\xb0\xf6\x5f\xfe\xe6\xd6\x85\xf3\xd8\xb5\x4c\x5c\x39\xbd\xb0\x5d\x30\x41\x71\x90\xd6\x32\xd1\xbd\x96\x3b\x87\xfe\xa2\x8b\xc6\x0f\xea\xf8\x9c\x3e\x35\x41\x16\x4b\x8d\x1a\xd0\x21\xf7\x5c\x07\x31\x77\x54\x1b\x75\xf1\xc2\xf2\xb5\x14\x68\x3f\xba\xe6\x7b\x20\x1a\x47\x39\x5c\x8b\x2a\x72\x57\x76\x80\x16\x2f\x85\x56\x9b\x74\x9d\x32\x41\xf3\xa6\xf4\xcf\xb8\x0a\x41\xf4\x85\x0e\xc1\xd1\x8b\x3b\x28\x03\xb1\x7d\x94\x8a\x63\x5a\xc5\x24\x0d\xd5\xb8\xb4\x5f\x86\xfd\xe2\x54\x50\x08\x70\x5d\x7b\xc2\x97\xe8\x52\xe2\x5a\xea\x17\x01\xa2\xab\x75\x59\x11\x58\x45\x4b\xae\xa6\xa6\x48\x88\x33\x47\xe5\x73\xcf\x56\x82\xa0\x12\xd8\x05\x8c\x8b\x17\x30\x2e\x7b\x9e\xf7\x5a\x5c\x3f\xd3\x54\x32\x0a\x8e\xde\x04\xa5\xc8\xff\xcc\x1a\x85\xd6\xce\x60\x37\x10\xaf\xa5\x95\xb8\xba\x5a\xda\x4a\xbc\xf2\xcd\x48\x68\x6c\x72\x14\x93\x18\xa0\x3d\xd2\xd8\xb7\x14\xa5\xf5\xea\xf5\x90\x2b\x2c\x26\x4d\x3f\xc8\x1b\xd2\x6c\x09\xda\x53\x84\xc5\x0e\x0c\x85\x68\x18\xeb\xb9\x60\xa7\x54\x49\xf5\x36\xf8\x70\x61\xfa\xd9\x61\x43\x8d\x18\x88\x70\xf3\x48\x67\x4f\x93\x20\x61\x5b\x5c\xc2\x4b\xa3\xe2\x96\xac\x40\xe7\x04\xf9\x11\x6c\x73\x49\x70\x22\x32\x9f\xeb\x9b\x73\xb4\xa0\xb0\x45\x17\x51\x73\xee\x9b\x8f\xca\xba\x9f\x10\x24\x97\xd2\x72\xaf\x67\x4e\xfa\xcd\xca\x7e\x85\x44\x6e\xcc\x5f\x21\xa5\x48\xd5\x5d\x60\x5a\xd3\x83\xde\x0e\x10\x00\xf7\x79\x43\x98\x19\x9b\xfd\x82\xab\x73\xf1\x67\xd8\xde\x18\xbd\x82\xf5\xe6\x50\x41\x39\x00\x3e\xe3\xca\x56\xae\x57\xf6\x95\x17\xf4\xcf\x51\x85\xb7\x1e\x8a\x4e\x84\x90\x78\xd3\x71\x42\x0e\x38\x38\xf3\xbd\xa0\x06\xe0\x0a\xf3\xe8\xda\x72\xf2\xf6\x75\x4b\xcf\xb3\x07\x38\x79\x78\x79\xe9\x51\xb0\x39\x82\xcc\xea\x15\xca\x98\x0a\x46\xb5\x28\x6b\x50\xa9\xd2\x89\x0b\x13\x3f\x0f\x84\x2d\xbb\x26\xb5\x7c\x11\x9a\xe0\x2f\xa2\xf6\x97\xb5\xa3\x65\x87\x32\x37\xcf\xf9\x55\x25\x6e\x38\x96\xba\x66\x2b\xea\x08\x3a\xba\x70\x63\x33\x53\x7c\x6e\x99\xb2\x13\x0c\x47\x53\x5b\xb1\x4f\xaf\x10\x29\x9d\x04\x5f\x21\xf5\xa5\xb1\xf9\x34\x57\x5a\xcd\x15\x55\xb3\x66\x35\xa0\x86\x3b\x60\xd7\xa5\xbf\x63\xfa\x0d\x6d\xb1\x03\x01\xb2\x6c\xa1\x3f\xe7\x6f\xa5\xa5\x10\xf8\x84\x9b\x90\x0b\x2f\x9d\x78\x4a\x77\xe8\x35\xda\xc9\x0a\x2d\x10\x2e\x4e\x57\xa5\x85\x20\xd7\x26\xfb\xf3\x56\x7f\x66\xf5\x6b\x15\x65\xea\x55\x40\xe6\x36\x46\x88\xbc\xe5\x01\xc8\x84\x98\xd2\x85\x79\xe4\x91\x62\x93\x09\x4e\x5c\xea\x25\x8e\x26\xd2\x86\x04\x6c\x36\x6a\xbe\xf2\x7a\xd6\x35\x16\x07\x1f\x5a\x63\x04\xaf\x80\xbc\xc1\x62\x0f\xf0\x79\xc1\x62\xc5\xd2\x9f\x4c\xac\xc3\x4f\x4c\x9b\x1e\x4e\x5f\x53\xfd\xb4\xfa\x4c\x53\x2e\xbd\x3a\x0b\x5e\x5a\x01\xfd\xf3\x96\x1a\xd6\x17\xcc\x12\x80\x66\x5c\xbc\x54\x3c\x9f\x14\x81\x5d\x71\x85\x2f\xdd\xeb\xbc\x22\xe4\xcb\xae\x78\xeb\x8d\xb9\x81\x68\x06\x57\x6e\x89\x0f\x86\x44\x71\xb2\x37\xa5\xae\xaa\xc7\x0c\x26\x5e\xe6\x3c\xf2\x15\xd6\x41\x6c\x10\x57\x82\x3c\xbf\xe7\x03\xe5\x9a\x47\x42\x98\xa9\x37\x3e\xf5\xee\x40\x85\x33\xd9\x01\x59\x71\x22\x02\x2f\x25\x13\x62\x75\x7f\x45\xcd\xcc\xba\xdc\xed\x2c\x2c\x55\xa3\x9a\x96\xba\x9e\x31\xbc\x10\x24\xcf\x1e\xc7\xd7\xea\xc4\x31\x56\x2a\xdf\x18\x18\xf7\xa3\x67\x1e\xbc\xcb\x60\x5c\xb1\x22\xa1\xbc\x70\x7d\xe1\x08\xe0\x8a\xb5\xd9\x0a\x61\x92\x70\x13\x32\x7c\x3b\x63\xbf\xde\x9e\x67\x07\xa3\xc3\xb9\xd5\x5b\x9b\xbd\xf1\x60\x66\x39\x8b\x7f\x3b\xbf\xbe\xdc\x46\x8c\x62\x64\x38\x75\x93\x5e\x54\xbf\x7a\xa9\xf0\xe3\x85\x2d\x95\x8b\x5b\x2a\x57\x46\x28\x59\xdf\x06\xbe\xf2\x87\x76\xec\x03\xa0\x92\x4c\xac\xf5\x02\x27\x17\x17\x0f\x2e\xae\xbc\xe9\x16\xe3\x44\x06\x39\xfa\x0a\x36\xd7\x53\xdf\x9d\x00\x46\xb1\x99\xce\xb5\x41\x64\xd1\x91\x37\x3b\x38\x12\x62\xd3\x87\xcc\xdb\x5c\x03\xca\x62\x20\x6f\x36\x83\x13\x0c\xc7\x58\x11\x9a\x1a\xca\x01\x51\xa5\x27\x44\xfa\xd2\xbc\x6d\x7b\xe5\xc4\xe5\xcd\x84\xb4\x4e\x3e\x4d\x93\xc1\x55\xb2\x55\x6a\x4e\xa2\xb6\xe3\xca\xa6\x47\xf8\xca\xf7\x5c\x3f\xac\x1e\x4b\xcd\xcd\xbc\x19\x7f\xe5\x3b\xa0\xf3\xb0\xc3\xf9\x01\x71\x93\xf6\xca\x77\x9e\xea\x33\xc8\x9e\x6c\x45\xa5\x0c\xc9\x10\xfa\xf7\x66\xf9\x67\x96\xd4\x89\x72\xe5\xdb\x44\xdb\x40\xd4\x57\xd6\x0c\xc9\x30\xd0\xad\xa9\x31\x91\x49\xf8\xb7\x28\x8b\x9b\x7e\x67\xa7\xdc\xe8\x9a\x6a\x35\x05\x6c\xda\x61\xe4\x12\x3f\xe4\xa4\xf5\xca\x45\xce\x5e\x65\x14\x74\xa3\x58\x2e\xcd\x00\xb2\xa0\xb4\xc3\x2d\x89\x9c\x7e\xc4\x0b\x9a\x63\x2e\x55\x1c\x73\x65\x1e\x3a\x08\x4c\x6a\x8a\x8a\xee\xe7\x39\xf6\xb6\xaa\x40\xa4\xbc\xc5\x17\xeb\xd5\xc4\xb4\x60\xa1\x8c\x29\x46\x75\x18\x79\x8e\x57\x6f\xaf\xdc\x5d\xdd\xeb\xae\xf2\x75\x5f\xfb\x3a\xaa\x1f\xee\x4a\x5c\xd9\x2e\x14\x5e\xaa\x48\x11\x65\xd6\x59\x46\x54\x2b\x7c\x65\x08\xe4\x4c\xa4\xfd\xcd\x80\xb4\x6f\xa7\x05\xa7\x5b\xa9\x17\xb7\x0a\x2f\xdb\x2a\xbc\x74\xab\xf0\xc2\x0e\xe1\x85\xe9\xb1\x9c\x3d\x5e\x7d\x8d\x09\x1b\x10\x1d\x7b\x43\x1d\x8f\x73\x5f\xd4\x68\x37\xd0\xfc\xa8\x9e\x54\x5e\x6c\x6a\xc6\x3c\x05\xc0\x4d\x4a\xcc\xfb\x9e\x5a\x7c\x78\x86\x01\xba\xfe\x1f\x47\xf3\x56\x03\xef\x19\x0d\x91\xc7\xd5\x97\x69\xe3\xb8\xfa\x75\xc1\xf1\x75\xb1\xe6\x4c\x4c\x7f\x38\x87\xbb\xfa\xbd\xc9\xcd\xd3\x81\xcc\xf1\x1d\xd7\xf8\xd8\x60\x4b\xfe\x47\xbe\x47\xdd\x7e\xbc\xa6\x50\x05\x3f\xae\xe0\x86\x92\x40\x44\x38\xb0\x16\x6c\xaf\x18\x24\x7b\x85\xa8\xce\xd5\x39\xff\x1b\x28\x62\xa7\x04\x02\xe0\x17\x2e\x7d\x5e\xdd\xaf\xbe\x6d\x6b\xf2\xe2\xed\x94\x81\x34\x61\x5c\x6a\x75\xa7\x43\x46\x88\x66\x2d\xed\x63\x5a\xde\x30\x1d\xb0\x3e\x9a\x3e\xe2\xcb\xa9\x23\xbe\xba\x0a\xa7\x0a\x60\x86\x35\xbb\x24\x71\xfd\x62\x4c\x97\xbb\x9b\x1a\xde\x2f\xba\x91\x5f\x6e\x99\x4f\x88\x32\xf8\xe5\x43\x7c\x03\xba\x3e\xe3\x5e\xd6\xa2\x13\xc4\x1b\xc2\x28\x37\xcf\xa1\x6f\xd5\x26\x7e\x53\x6f\xe8\x6d\x6a\x43\x6f\x3d\x96\xbe\x97\xfc\x12\xae\xbd\xdd\xe8\xaf\x63\xad\xe8\xda\x06\xcd\x84\xa6\xd4\x51\x08\x7c\x70\x2e\x74\x4f\x15\x15\x04\x6a\x5f\x35\xb5\xd8\xa7\x76\xb2\xa5\x80\x9a\x5d\x46\x11\xa7\xf2\x3f\x5a\x6b\x3c\x50\xc0\xa2\xc8\x3c\xf4\x1a\x98\xb0\x89\x91\x1b\xbd\x31\xdb\x5e\x9c\x64\x08\x56\xf7\x61\x6a\x41\xbf\xc3\x1a\x6a\x95\xb1\x49\x30\x57\xea\x46\x35\x50\xe5\x5a\x06\x61\x1d\x3d\xb7\x27\x32\x7b\xbc\xa1\x07\xe2\xa6\x1e\x88\x5b\x75\x11\xdd\x61\xa7\x96\x82\x3b\x58\x4a\x0e\xde\xce\x50\x0c\x6f\x07\xc5\x9e\xe5\x89\x7b\x7c\x87\x10\x78\x89\xc7\xf9\x91\x65\x08\x50\xd2\xc1\x9e\xb3\xa8\x22\x87\x3b\x94\x17\x62\x86\xec\xce\x0d\xfd\x80\x03\xc0\x08\x59\x3d\xc1\xa1\x7e\x7b\x41\xbd\x08\xbd\xc1\xc1\x2c\xfa\xa8\xb3\xac\x01\x34\x88\x38\x9f\x2c\xb8\xf1\x78\xef\x8d\x99\xff\x00\xac\x8a\xf1\x38\x44\x4b\xc7\x1d\x8f\x73\xfe\x9d\xd1\x0a\x36\xea\x9d\xf7\x1b\x6a\x19\xee\xd8\xca\x54\x4c\x50\xdf\xe9\xdf\x1b\xd5\x0f\xcc\x6b\xeb\xba\x25\x76\x67\x28\xbd\xbe\x33\xfc\xe6\x38\x07\xd1\x3b\x5f\x8b\xac\x1f\xe7\x1d\x5b\x75\x3e\x11\xd3\x91\x4d\x5e\x43\xb1\x56\xc9\x9c\x11\x58\xb9\xd4\xa7\xd3\xb8\x0c\x82\x98\x9d\xc6\x65\x10\x67\xc5\x30\xcb\x18\xca\xef\x09\x11\x0e\x9b\x60\x76\x7d\xd9\x9d\xb1\x81\x78\xe7\xc6\xff\xef\xe1\x5f\x3e\xcc\x3d\x18\x2c\x64\x03\x42\xb4\xec\x70\x06\xa4\x99\x85\x8f\x9e\xfd\x16\xfd\xf3\x0c\xac\xf3\x82\xe3\xed\x35\xd3\xdf\x59\x8e\xfa\xc7\x7f\xd1\x86\xd7\xd7\xc4\xc6\xd9\x6d\x4e\x79\x77\x7d\x9f\xf8\xb6\x0b\x6d\xfe\x09\xe1\x89\xd1\x78\x07\xd6\x42\xed\x05\x3b\x92\x77\x6f\x85\x4f\x2a\x28\x91\x1c\xa4\x5e\xa6\xfb\xf7\x7a\x44\x52\x61\x22\x91\xee\x98\x50\x4f\x59\xb2\xce\xba\xf2\x07\x2f\x94\xe5\x8f\x50\xf5\xff\x57\xed\x82\x8e\x9c\xf9\x63\xef\x15\x3b\x7e\xf9\x83\xb2\xfd\x02\xf1\x65\xca\x38\xf3\x32\x9e\x8c\xbd\x9c\xcd\x4b\xeb\x44\xfe\x48\xec\x97\x14\xc3\x5d\x32\x19\xdd\x49\xcc\x0d\x52\x96\x9c\xf8\xe3\x60\x78\x1e\x39\x7f\xdc\xf9\x87\x78\xf4\xc6\x41\x91\xec\xf0\x2a\x12\x6f\x35\xfc\xeb\xe6\x36\x94\x17\x3f\x61\x92\xd9\x05\x09\xa6\x87\xf2\x42\x0a\x2a\x2e\xb3\xe6\x8f\x9a\x53\xd0\xcc\x1c\xab\x8b\x85\x98\x97\x53\x40\xf0\x81\x83\x05\x0d\xdf\x9d\x61\x09\x51\x1f\x94\xfc\x16\x88\x78\x4d\xf2\x3b\x7f\x50\x78\x3a\x7f\x50\xae\x64\x42\x33\xd5\xcf\x5b\xd7\xa5\xb2\x4c\x56\x77\xc3\x34\xaf\xbc\xf8\x99\xd7\xb5\xeb\xdb\xbd\x03\xe2\x48\x22\xaf\x61\x11\xe9\x30\x0a\x1b\x73\x23\x35\x6f\x3a\x6b\x1e\xc0\x8e\x65\x07\x53\x14\xd6\xb1\x00\x11\xef\xc0\x12\xf1\xbe\xdb\xb6\xa7\x10\x09\x69\x42\x8d\x7a\x60\x7c\xed\xbe\x6b\xbb\xc9\xfb\xae\x8d\x5b\x90\x33\x8d\x08\x3a\x52\x07\x27\x08\x43\xe4\x46\x64\xd6\x6d\x14\x2c\x29\x33\x5e\x09\xcb\x71\x0e\x24\x63\xc1\x27\x16\x3c\x64\x36\xa9\xfe\x7c\x41\x64\x5a\x49\x5d\x55\x9e\x28\x53\x7b\x6b\xbe\x9b\x9b\xca\xe4\x07\xc1\x3d\x90\xec\xc8\xf3\x92\x38\xf2\xc0\x1e\x70\x15\x28\x99\xe6\x1e\x72\xcd\xee\x4e\x79\xe6\xbb\x88\x13\xa9\x5b\x54\x9e\x27\xde\x72\xcf\xdd\x31\xc5\x7a\xbb\xdb\x61\xf4\xfb\x83\x57\x26\x06\xf7\x5b\x26\x42\xfc\x03\x5a\xdb\x7e\xec\x46\xb7\x62\xa4\xed\x29\x99\x87\xf9\xf9\xe1\x25\xeb\xec\xaf\x7d\xe7\x07\xc9\x6b\xf1\xb2\x34\x80\x68\x14\x2e\x36\x68\x6b\xd7\xc5\xea\x94\xc7\x87\x65\xb1\x07\xc3\x15\x6b\x00\xaa\xaa\x58\x9e\xe5\x14\x93\xf5\x74\x0f\x42\x8d\x15\xac\xb5\xbf\x49\x60\xce\xa9\xf7\xc4\x66\x2a\x95\x63\xbe\xe8\x97\x88\xa4\xb3\x2a\x07\x9a\xca\x44\xcc\xcd\xc9\xfe\xde\x99\x06\x18\xd9\x12\x4b\x3c\x18\xe4\x6d\xfa\xb4\x41\xd4\x3d\xba\x97\x72\xc7\xb7\x99\xf2\x58\x6c\x2f\x48\x7b\x3b\xf3\x96\x7f\x1c\xfc\x05\xf6\xb2\x65\xb9\xae\x31\xf1\x6e\x60\xae\x76\x6a\x96\xeb\xa5\x53\x9f\x5c\x79\xd7\x6c\x42\x8c\x0d\xd5\xbd\xd4\xa8\xe4\x45\x6c\x2f\xc8\x64\x6c\x9b\xe5\xde\xf0\xec\x4d\x1e\x93\xa9\x03\xb0\x3e\x59\x76\xdc\x72\x6f\xfa\x80\xc2\x1c\x4e\xe5\x10\x6b\xc0\xad\x88\x4a\xd7\x81\xed\x85\x97\xc1\xa8\xaf\x6d\x10\x8a\xde\x0c\xf2\x88\x84\xea\x84\x94\x86\x19\xac\x38\x1f\x0d\xff\xba\xe7\x37\xf1\xa9\xca\x21\x07\xf9\x9e\xba\xc9\xa6\x73\xc4\xaa\x5a\x22\xf2\x0f\x65\xb9\x04\xea\xd7\xff\xc4\xcd\x4a\x7d\x12\xba\xb1\xf2\x9f\x44\xcd\x7f\x0f\xea\xd3\x11\xa2\x36\x8f\x1e\x13\x3d\xcb\x6a\xbb\x54\x42\x56\x22\xe7\x62\x6e\xb3\x01\xc2\xc9\x97\x66\xf3\x03\x79\x8f\x67\xd9\x78\xd7\xee\x59\x8e\x39\x41\x78\xe8\x08\xd5\xef\x71\x17\x7d\x34\x23\x1f\xb4\x8b\x87\xba\xcf\x1f\xea\x3e\x1f\x88\xae\x8b\x02\x13\x1b\x10\x9c\x80\x22\xa0\xda\xc1\x7d\xac\xcb\xe6\x71\x06\xa1\x0b\xaa\x76\x52\x2c\x79\xfe\x2c\x54\x1a\x37\xa0\x2d\x5d\x9e\x25\x55\x64\x51\x6a\xb3\x81\x3e\xa6\x94\xf1\x59\xee\x70\xfc\x62\xa7\x07\xec\x8f\x2c\x19\x22\x8c\x22\xd5\xf4\x2c\xf7\x1d\x2d\x98\x8c\x0d\x8b\x67\xb9\xdb\x19\x2c\xff\xc9\xf4\x8b\x6f\x26\xec\x51\x13\x4b\x4c\xe1\xc7\x97\x65\xcb\x3f\x6a\x3f\x31\xfd\xcf\x17\x33\xf4\x94\x61\xb0\x94\x42\x72\xd0\xcc\x7f\xab\xc3\x7f\xc4\xcf\x59\x16\xb3\xa9\x11\xe9\x54\x8c\x58\x56\x0b\x6a\x85\x50\xbc\x60\x6f\xee\x2c\x98\x22\x1c\xeb\x3f\x4b\xd9\x38\x21\x14\x02\x27\x5b\x66\xa5\xe1\xa7\xa3\xa7\x13\x78\x86\xca\x42\x01\xff\x7b\xe3\x4c\x37\x18\x7c\x1f\x01\xf5\xa3\x7c\x11\x30\xba\x14\xa5\x53\xd5\x9a\x00\x0e\x87\x79\x3d\x51\x35\x4b\xde\x22\x8d\x93\x7d\x47\x66\x06\x14\xda\x43\x5c\xe3\x59\x0a\x53\x5d\xa3\xe9\xbb\x7c\x16\xf6\x2f\x02\xe9\x9c\x31\xe3\xd6\xdb\x84\x6b\xd4\xa7\xb8\xc8\x9c\xbb\x49\x2d\x00\xe5\x2f\xf3\xac\x13\x34\x23\x96\x95\x34\xf0\xfe\xa7\xc9\xdf\x7f\x9d\xfc\x39\x27\x75\x41\xd2\x6d\xe7\x4b\x99\xc5\xfb\xa7\x8e\x2a\x62\xab\x8c\xc5\x69\xdc\x51\x62\x4e\x34\x80\xda\xa6\x7a\x44\x98\x4f\xf6\x47\xa6\xc3\xfd\x80\x1d\x55\xa6\xb1\xce\xe9\x0c\x4c\x00\x4b\xaa\x59\xb9\x52\x4e\xe4\x59\x5c\xd5\x79\x1b\x3a\x4d\x0f\xd0\xcc\x5d\x66\x78\x2b\x71\xd4\x69\xb8\x29\x73\xaf\x0e\x38\x33\xa8\x62\x2d\x5e\x31\x7d\x64\x36\x99\x56\xb2\xcd\x07\x94\xfe\xfd\x87\x22\xcb\x1a\x13\xc0\x8b\x0e\x8a\x99\x2d\x9d\xf9\xfb\x52\x93\x57\x4c\x96\xb7\x2f\xd8\x7e\xab\xc1\x37\x6c\x7e\x19\x27\xea\x6d\xb0\xd7\x7c\x27\xd6\xde\x3d\xe8\xde\xda\x03\x0d\xa5\xa6\xfc\xe8\x09\xd8\xf5\x78\xf0\x6e\xdd\x13\x9c\xca\xfe\x49\xe4\x95\xdb\x27\x6c\xcb\xa1\xc7\xda\x03\xdf\xed\x0d\x4a\x46\x51\x7e\xe5\x09\x5b\x9c\x3a\xac\x27\x0e\x6c\x79\xb8\x52\xf4\xf0\x92\xce\x13\x82\x5e\x90\x78\xc2\xa7\xdd\xcc\x7c\x20\xa6\xf1\x04\x2d\xf4\x60\x3b\x6f\x82\xff\x88\xf5\x44\xf6\x09\xf7\x1a\x93\x83\xc4\x7a\xb6\x31\xdf\x36\x27\x42\xfc\xf7\x86\x23\xcf\x31\xaf\x6f\x85\x69\x9d\x04\xce\x03\x27\x9a\x20\xf4\x1f\x9a\x4b\xf6\x1d\x1b\xa3\x88\x76\x11\xf3\x09\xb7\x2a\x91\x1c\x08\xc5\x3b\x26\x5b\xd6\xbd\x0a\xf3\x36\x8c\x42\x03\xa4\xc8\xe9\x13\x1e\x8e\x38\x13\xce\x9e\x30\x94\x35\x50\xc2\x5b\x99\xba\x99\x18\xc1\x89\x9e\x00\xe7\xcc\x26\xe7\xa0\x2f\x67\xd7\x69\x73\x32\xb4\xf8\xa0\xa1\x8d\x19\x5e\x62\xd6\x14\xbe\x51\xa7\x98\x21\x6d\xdd\x72\xb6\x84\xeb\xd1\x6d\x81\x27\x94\x3d\xac\xcd\x10\x3c\x4f\x85\x34\xf4\x60\xea\x69\x06\xe1\x65\xdf\x41\xb2\x0b\x77\xcf\x56\x4a\x42\xf8\xcd\xbb\xaf\x5c\x65\x2a\x7e\xf1\xde\x2e\xe7\xeb\x32\x4f\x9d\xe6\x91\x95\xa4\x44\x15\xdc\x00\x44\xfe\xc4\xe7\x54\xc9\x7e\x21\x05\x27\x88\x4f\x70\xbb\x50\x8f\x69\xd9\x12\xc8\xd8\xa0\x0c\x45\x20\x8d\xa9\xa7\x6d\x60\x6b\xe1\x05\x82\x69\x02\xf9\xd9\x57\x70\x5f\x3d\x09\x3e\x7a\x6a\x5c\x30\xef\xd1\x95\x0e\x97\xc3\x8f\x57\xb6\xf0\x8c\x9e\x6a\xb5\xbc\x9e\xcd\x86\x43\xd3\xe0\xae\x55\x0c\xd6\x2d\x75\x93\xbd\xdb\x59\xa8\x0f\xde\xb7\x54\x4c\x8b\x1a\xd6\x4e\x4f\x93\xbc\x5b\x31\xc1\x73\xd7\x9f\x56\xae\x11\xf1\x9e\x34\x20\x3b\x0d\xd0\x37\x6f\xd6\x8f\x80\x7a\x6b\x4e\xcd\x95\xfd\x9a\xe5\x13\xa1\x73\x46\x18\x8b\xce\x94\xae\x0c\xd2\x79\x03\x5f\x19\x9d\xf5\xc5\x15\xc6\x64\xf8\xb6\x66\x13\x72\xa7\x47\x6e\xe0\x5e\x3e\x2c\xb4\xc1\x10\xda\xc0\xf4\xd2\xd1\x95\x97\x5e\xcd\x79\x67\x3e\xbc\x2c\x15\xaf\x85\xfd\x60\x79\xb9\x24\xbc\x46\x7e\x1b\xf4\xe6\x2c\x9e\x17\x2b\x46\xad\xb6\xf0\x7f\xec\xe9\x62\x81\x74\xd4\x62\xc2\x97\x28\x46\xdf\xd8\x38\x32\x51\x68\xeb\x09\x7e\x9a\xe2\xe4\x94\x04\xb3\x20\x58\x6d\x5b\x8b\x6b\x66\x85\x6b\x5d\x6f\xe5\x3e\x27\x66\xca\x67\x98\x1b\x41\x12\xe5\x39\x6f\xed\x52\x70\x65\x70\x4a\x6d\x19\xa1\xdb\x5c\xb3\x4a\x85\x39\xa6\xb6\x29\x1c\x10\x8f\x32\xa2\x76\x19\x32\xf6\x03\x9a\x90\xfd\x73\xe6\xfa\x9c\x0b\xc4\xec\x49\xff\x40\x5b\xf6\x6f\x6a\x98\x81\xda\x73\xf6\x6f\x12\x68\x13\xfa\x54\xc7\x75\x29\x78\x8c\xe1\x89\xbc\x29\xf3\xe0\x38\x63\x82\x46\x98\x80\xb8\xfd\x32\x30\x3a\x24\x81\x0c\x4d\xdf\xb3\x7d\xe6\xb3\xce\x0c\x38\x14\x67\xac\xe5\x13\xed\x9d\xc0\x27\x26\x6c\xfc\x3d\x31\xe1\x94\x7a\x42\x33\x85\x78\xe5\xc4\xdf\x80\x19\x21\x5c\x0f\xd2\x89\xb3\x60\xb7\x25\xf6\x0c\x80\x23\xce\x07\x95\x33\x3e\x6a\xf9\xaf\x2b\x60\x97\x15\x4d\x03\xf7\xc3\xf7\x71\x9f\xd8\x02\xbc\xf2\xc8\x6a\x40\xd8\xaa\x60\xe4\xc3\x1e\x33\x36\xd4\xc6\xb4\x60\x97\x5d\xa0\x0e\x71\x50\x9f\x33\x40\x54\x70\x44\x9b\xd2\x2b\xfb\x23\xeb\x40\x37\x01\x87\x8c\x84\x87\x02\xa6\x26\x49\xa4\x8f\x5a\x25\x9f\xb4\x98\x4b\x34\xc9\x64\xa9\x6a\xb1\x75\xde\x0f\x7c\xf8\x88\xf2\x93\x16\xbe\xb1\xf6\xd8\x4d\xd4\x07\x0f\x1b\x0f\xa0\xdf\x9d\x38\xe1\xb4\x7b\xaa\x53\xe3\x0e\xfd\xe0\xd2\xea\x44\xe6\xb6\x3a\x07\x55\x5b\x27\x6f\xa2\x4e\xe4\xdc\xda\x6c\x81\xc7\x30\x4f\x0a\x1f\x41\x27\xee\xbc\x6e\xfa\xa4\xe0\xf2\x66\xd4\x35\x7c\xda\xd4\xc2\xab\x49\x66\x39\xa6\x88\x88\xb5\x3c\xed\xae\xe2\x93\x78\xd8\xf6\xf0\x12\xd7\x44\x34\xec\x07\x22\x42\xdd\x4c\x1d\xcd\x29\xf5\xeb\x03\xff\x34\x21\x80\x80\xe8\x93\xec\x0a\xb1\x62\xa4\xb7\xdf\xf8\xa2\x6e\x12\x83\x20\x28\xc8\x6e\xe2\x83\x4f\xea\x2d\xaf\xd8\x5e\x76\x4c\x2a\xf4\x1d\x3a\xbb\xa5\xcc\x72\xca\xd8\x3f\xca\xe8\x98\xb2\xf5\x4a\x13\x22\x62\x21\x7f\x46\x00\x79\x75\xe6\xc9\xdc\x2d\x1a\x48\x73\x29\x33\x00\xa7\xe0\x53\x88\x33\xd7\x8f\xce\x6e\x61\x9b\xdd\x0a\x16\xeb\xf3\x9c\xc2\xa5\xc9\x9c\x48\xd3\x99\xf4\xd8\x60\xca\x55\xb1\x97\x9c\x84\xe6\x0d\x66\xf8\xce\x64\x5b\x23\x39\xf1\x1e\xf9\xc3\x95\xdd\x00\x37\x21\x66\x21\x13\xe2\xd3\xd2\xaf\x49\x25\x83\x21\xc5\xd7\x83\x6f\x72\x7a\xfb\x85\xa8\x0b\x57\xd8\x79\xaa\x8b\x46\x6a\xf8\xb5\x0f\xa6\x56\x82\x18\xd3\xe3\x57\xf7\xd9\x6e\xee\x4c\x8c\x20\xcb\x1a\xd2\xc2\x37\xf1\x9e\x5c\x6e\x77\x53\xf4\xc9\x8c\xba\xb0\xd3\x98\xef\x0c\x23\x1b\x06\x6e\xe6\x26\xae\x99\x16\x6e\x8d\x22\x8c\x36\x73\x07\x7d\x80\x62\x5d\x86\x30\x75\x82\x2f\x40\xd3\xce\x54\xa1\xa7\x90\x55\x3b\xd7\x6a\xcf\xe8\x28\x83\xe7\x81\x19\x40\xe5\xf1\xc4\x83\x27\x44\x1f\x7b\x28\x77\x40\xde\xe8\x19\xe4\x71\x89\x9f\x8c\x36\x2e\x1b\x2d\x4b\xb0\x7a\xcb\x9d\x4d\xa6\xa7\xc6\xfa\x86\xb7\x48\x4d\x71\xee\x93\xad\xab\x82\xde\x86\x27\x5b\x9d\xf9\x66\x05\x98\xcf\xea\x42\x62\x0a\x2c\x19\x76\xae\x2a\xb0\x4d\x2d\x80\xe1\xc3\xf6\x20\x06\x86\xfb\x58\xb1\xec\x9f\x98\x87\xea\x93\x6a\x92\x0a\x47\x10\x5b\x1f\x8d\x12\x2b\xf4\x89\x0e\xbe\x58\x07\x3f\x21\x8d\x57\x0a\x82\x4c\xd2\xad\x52\x94\x31\x37\xf0\x10\x5d\x04\x98\x4e\x2e\x06\xe5\x3a\xb3\x84\xd5\x05\x17\x1f\xe6\xc5\x24\x2a\x19\x45\xd6\xc2\x3b\x7b\x73\xea\x83\x7c\x20\xed\x32\x59\xa5\x79\x35\x37\xa6\x38\x57\x19\x43\xa3\xb6\xdc\x41\xb2\x4b\xdf\x46\x49\x77\x21\xde\x06\x23\x7e\x09\xdb\x94\x4f\x45\x68\x9b\x2b\x77\x77\xfb\x06\x84\x11\x39\xd5\xb6\xca\x9c\x3b\x96\x95\xbb\xf1\x38\x49\x65\x3b\x03\xa3\xcb\xb1\xd0\x86\x55\x60\x72\xf6\x85\x19\x6c\xba\x5e\x85\x14\x5a\xc4\xa3\x3b\xf2\x83\x62\x83\xe6\x56\x51\x09\x8d\x92\x99\x0a\x6a\x60\xee\xb4\xd5\x3c\x65\xbe\xcd\xb9\x2a\xb4\xfc\xe5\x55\xad\x81\xdd\x05\xa3\x41\xb3\x8d\xe8\x25\xb8\xc3\xec\xc1\xec\x60\xef\x29\x81\x5b\xcf\x13\xf2\xa3\xb5\x0b\x66\x80\xe0\xce\x81\xef\x52\x26\xb7\x85\x4a\x09\x15\x73\xd3\x09\xe9\x8a\x07\xc3\x82\x6f\x7e\x8b\xe9\xfe\x1c\xc4\x6d\x5f\x2a\xb3\xb2\xaa\xae\x39\x38\x39\x05\x65\xb4\x89\x6f\x0d\xa5\xe2\x0d\x48\x3b\xa5\x9d\xc8\x8a\xa7\xf6\xcb\x85\x84\x69\xc7\x84\xe6\xb3\x5f\xae\xbd\x4d\xd6\xf9\xc5\x36\x0e\x4c\xdc\xa2\xb3\x71\x7b\x03\x93\x9a\x3c\xdb\x33\x1f\xb6\xde\x59\x38\xa2\x2c\xe7\x29\xe1\xb5\xe0\x04\x7e\x92\xc4\x6c\x7b\x2d\xee\x72\xfa\xe0\x6f\x99\xf5\x7a\xcf\xac\x97\xcb\xac\xa9\x69\xee\xcd\xa1\x39\x83\xde\xc2\xa7\x04\x76\x5c\xac\x8c\x5c\xee\x14\x5b\xe4\x94\xb8\xb1\x97\x8c\x81\xaf\x8b\x2a\x91\x6f\x88\xc7\xa1\xdb\x92\x25\x5e\xfa\x07\xdf\x17\xc7\x30\xc5\x1c\xc4\x4a\xbc\xe8\xea\x5e\x03\xc2\xba\xd7\xf8\x30\x6e\xf7\xc5\x9c\x3f\x95\x58\xad\xa3\x8f\xd5\x77\xf4\x7e\x16\x55\xa6\xcc\xb3\xa2\x98\x02\xaa\xa9\x6d\x40\x73\x96\x50\xf2\x07\x1b\xc0\x80\xdc\xe0\x23\xd3\x9e\x6a\x52\xfd\x9a\xfc\x41\x1f\x29\x58\x82\xc8\x10\xc2\x6a\xf5\x70\x62\x17\xf8\x9a\x16\x66\xd4\x98\x8f\x56\xb7\x0f\x3f\x0c\xb0\x67\x25\xd8\x2c\x20\xb5\x3d\xb0\x0d\xa8\x93\xc0\x1c\x53\xd7\x92\x37\x2a\xb7\x78\x4c\xb3\xe3\xe3\xf5\x3a\x3e\x5e\xab\xe3\x53\xf2\xbe\x58\x26\x0e\xe2\x90\xfa\xdd\xdd\x37\xed\xae\x73\x10\x62\x1f\x38\x28\x97\xc8\xc5\x84\x59\x06\x8e\xcd\x45\x12\x9b\x33\xb7\x75\xe9\xa4\x86\xf5\x95\xc4\x01\xbb\x8e\x50\x59\x9f\x3c\xb5\xdc\xa1\x01\xbf\x87\x8f\x75\x82\xba\xd4\x1f\x26\xc0\xf1\x94\x6c\x1a\x9f\x41\x68\x45\x41\x30\xc5\x4c\x95\x89\x7a\x3d\x25\x27\x13\x07\x12\x86\x48\x53\xfc\x51\x90\xb1\x62\x1d\xf8\x3e\x2c\x13\x06\x83\xcd\x15\x2b\x77\xcc\x26\x73\x16\x8c\xf9\xca\x2e\x0b\xaf\xcc\xe4\x5d\xd9\xd7\x60\xaa\xfa\x18\xf8\x69\x04\x74\xdd\xd3\x61\xb9\x77\xcf\x59\x9b\x05\x7b\xdb\x2c\x4e\x09\xa3\xcf\x7b\x09\x8b\xda\x3c\x8b\xfb\x90\x79\xc6\xbe\x59\x3b\x9f\x06\x8c\x61\x12\xa6\x88\x6f\x47\x00\xa3\xc6\x3f\x53\xbb\x86\x00\xec\x27\x94\xfc\x9c\xa1\x7a\x62\x51\xb8\x23\xd1\x92\xfd\x6e\x84\x32\x8b\x3f\x9a\xb2\x70\xa3\xaf\x37\xb7\x98\x99\x4c\xca\x62\xf8\xcf\xf4\xde\x0c\xd2\x3b\x6d\xef\xd6\x8c\x38\x57\xef\xb5\x3a\x73\x4b\x8d\x4d\x95\x0b\xee\xa9\x3c\x25\x17\x57\x69\xea\x82\x6f\x1e\x08\x71\xcf\x61\xd5\x82\xf7\xa3\xec\x24\x36\x9c\xe5\xfa\x58\x2b\xac\x8f\x6b\x6b\x83\xf0\x63\x9d\x3e\xea\xc9\x6c\x8a\x90\x5b\x70\x13\xaf\xc9\xbc\x0d\x83\x6b\xbe\x61\xb4\x50\x39\x35\x9d\xc4\xbc\x54\xe7\x85\xda\xe3\x41\x2c\x80\xc2\xf9\x90\x60\x06\x46\x31\x41\x21\xd5\x7a\x35\x93\x1a\x1c\xa4\x7f\x40\x45\xe4\x53\x72\xd7\xa0\x6c\x56\x91\x31\xa5\x50\xf5\xa3\x13\x94\x0f\x76\x5e\xaf\xb8\x39\xb7\x91\x89\x79\x45\x4b\xcb\xeb\x6d\x32\x92\xa7\xc2\x54\x47\x0e\x20\xdf\x47\x0a\x63\x68\xd9\xf7\x5c\xa6\x37\x55\x88\xb9\xfa\x62\x68\xdf\x9c\x3d\x58\xa6\x74\x9f\x8c\x6e\x35\xb6\x23\x1e\x8c\xfd\xf5\x57\x2f\x74\x4d\xe4\xb7\x44\x27\x7f\x96\xe6\xad\xb5\xb5\xf5\x8f\xe4\x00\x06\xd1\x41\x6c\x7f\x41\x98\xda\xac\x5f\xa8\x71\xbc\x53\xf3\x40\x17\xce\x00\x9a\x98\x7e\x98\x58\xf8\x7c\xaf\x84\xcb\x85\x9e\x92\x0a\xea\x3e\x5d\x5f\x48\x7c\x7a\xaa\x6c\xc6\x82\x25\xd7\x7a\x7a\xd9\x34\x7d\x12\xf4\x9e\x42\xfe\x48\x20\xb4\x4a\x2c\x16\xd7\x85\x83\xd7\x09\x89\x29\x6f\x03\x9d\x3b\x4f\xbf\x57\xac\xb0\x14\xd2\x38\x26\xa6\xfd\x86\x76\x73\x85\xce\x95\x1d\xf3\x4c\x86\x4c\xba\x7d\x46\xda\xfc\x7e\x42\xba\xe7\xd8\xd4\xcb\x7a\xda\x7e\xa1\x30\xf5\x50\xd4\xc8\x7a\xdc\x5e\x78\xed\x6c\x62\x75\xc7\x89\x69\x77\xe7\x05\xf6\x7a\xe3\x80\x72\xd5\x59\x91\x37\x45\x8d\xc1\xd3\x70\x03\xe0\x05\xe4\xa7\x17\xbe\xbe\x33\x71\x75\x90\xd1\x0c\x8c\xe4\x51\x7f\xac\x60\xa9\xd0\x03\xc2\x63\xed\xf0\xc7\x7c\xb1\x89\x70\x6f\xc5\xd4\x93\x29\x83\xa3\x12\x15\xe8\x70\xf2\xaf\x43\x40\xec\x5f\x5f\xb4\x36\xfe\xeb\x9c\x8d\xff\xeb\x90\x5a\xf9\xd7\x17\x77\x69\x52\x19\x9c\xdb\xa5\xc9\x7f\x23\xb5\xce\xe6\x6e\xb6\xc4\xfe\x27\x0f\x26\x6b\xae\x0c\x56\x82\xc5\x33\xc8\x3b\x53\x6d\x16\x93\x31\xc0\x82\x7d\x9b\x7f\x1d\xfb\xd6\xff\xfa\xf2\x42\x0f\xfe\xaf\xeb\x4e\xd2\xbf\x1e\x54\xab\xd0\xbf\x1e\x52\x62\xba\x51\x97\xff\x75\xa7\x2e\x5c\x08\xcc\x19\x59\x28\xd8\x2c\xfb\xd7\xd1\x5b\x4f\x64\x03\x20\xe8\x9b\x1d\x92\x12\xf9\xc2\xe5\xbf\x1e\xd7\x2f\xfc\x07\xb8\x8e\x53\x35\xc1\xfc\x67\x70\x31\x34\xb3\xa5\xe7\x44\xc3\x46\xf4\x62\x46\x44\xf7\xf9\xf1\x47\x7b\x28\xc0\x59\x2f\xff\xf5\xf8\xf7\x67\x71\xfc\xfd\xc1\xe7\xdf\x1f\x5d\x64\x4b\x84\x4e\xa3\xca\xf2\xf1\x11\x0c\x46\xa9\xf1\x80\xd3\xdb\xd4\xec\x3c\xeb\xa7\x53\xf8\xec\xd5\x3d\x0f\x6c\x4e\x33\x47\xb3\xb2\xec\x7b\x52\xd7\x3b\xca\xb4\x2c\x3a\xa4\x14\xa8\x7f\x1a\xa0\xe0\x19\xff\x41\xbe\xb5\x7c\xcb\x12\xef\x5f\xf9\x47\xb3\x9f\x1b\x58\x1e\x8b\xbb\x2f\xfc\x4b\x16\x95\x05\xea\x86\x07\xfa\x85\x21\x2f\x16\x96\x85\xb7\x09\x79\x41\xb7\x2c\xda\xdb\x95\x05\xf5\x64\xa0\x08\x90\x4b\x30\x28\x35\x66\xe2\xee\xcc\xbb\x59\x1c\x88\xe9\x46\xda\xee\x2f\x7c\xee\x5d\xf1\x2a\xf6\xc0\xf9\xe2\xf7\x0c\x02\xf3\x86\x00\x1e\x0e\x0f\x65\x41\x0a\x9f\xc6\x68\x07\x84\x35\x7b\x81\xb2\xcc\x65\x2a\xdf\xcb\xb7\xe7\xf2\x07\x92\x3c\x6d\x8c\x16\x25\xda\x2c\x53\x5c\xf5\x77\x82\xd8\xe5\xfd\xb2\x9b\x51\x84\xfd\x76\xd9\xcd\xa8\xb7\x56\xab\x97\x6e\xa7\x14\x48\x33\x15\x53\x85\x5a\x58\xfe\x08\xe8\x0f\xb9\xef\x1e\x6f\xb3\x7d\xc8\x81\x6c\xf5\x2a\xec\xa5\x4e\xd4\x7e\x33\x4f\x9b\x3a\x4a\xfa\x87\xbe\x7f\xe2\x3f\x73\xa7\xb2\xc1\x05\xaf\x31\x97\xb0\x30\x11\xb6\xfc\x16\xe2\xcc\xf5\x6b\xc2\x52\x2b\xc4\x35\x4a\xe0\x47\x06\x2c\xc0\x4b\xf8\x18\x7d\xa1\x96\x5c\xf8\xe8\xfb\xce\x10\x3f\x30\x67\x18\x30\xa6\xa6\xe8\xcb\x39\xf8\xa2\x3d\xb5\x15\x0b\x51\xf3\x75\x49\x6b\x84\xa4\xd2\xa4\x89\xce\x56\x1c\xa7\x0f\x78\x37\x07\x91\xc8\xd5\x55\xb0\xb0\xe2\x01\xbc\x01\xe3\x43\xf7\x26\x55\x24\xc4\x1c\x3d\xcc\xfe\x95\x8b\x4e\xd9\x7a\x0d\x48\x4f\x1c\xab\x78\x2d\x02\x25\x0c\x58\x29\xc3\xb3\xd1\x65\x12\x38\xfb\x72\x65\x30\x08\xcc\x93\x69\x93\x53\xe6\x6d\x18\x2a\x74\x81\x0a\x34\x63\x59\x70\xfb\xbd\xde\x12\xd6\x7c\x98\x78\x9f\x52\x5d\x3b\x29\xfb\x7b\xb7\xfc\x43\xd0\x93\x30\xf0\x9c\x78\x2b\x92\xcc\xe2\xb8\x9c\xa6\x20\x72\x3a\xbe\x9e\x70\xfb\x24\x4c\x4e\xdb\x7b\x8d\xae\x80\x33\x65\xde\x40\x2c\x09\xf7\x26\xa7\x60\x13\xdf\x39\xb2\x5f\x06\x77\xb4\xc6\xcd\xdb\xba\x2b\x4f\x8e\x47\x8b\xb6\xf8\xe4\x17\x4b\xbb\xdd\x8c\x57\x46\x1b\x9b\xc2\x96\xc0\x7d\x20\x81\xd6\xeb\x04\xbe\x21\x87\xbc\x2a\xf6\x10\x86\x32\x84\xd8\x96\xfb\xd0\x03\xb3\x22\xf7\xd8\xcc\x9d\xf5\x6f\x61\xbe\x3c\x87\xc8\xba\xdd\xcd\x21\x63\x54\x42\x59\xd8\xbd\x14\xf3\x57\xd8\xc0\xd7\x5e\x91\xf6\x6d\x61\x1e\x6d\x21\x58\x55\x1c\x04\xce\xb7\x70\x59\x23\xd9\x8a\x9d\x71\x29\x83\x7f\xdd\xc5\x9a\x88\xf9\x1c\xd0\x39\x04\x2b\xf2\xf9\x22\x1b\x1c\x73\xc7\x7e\x8c\x07\x6c\xeb\x3b\x2b\xfc\x6e\xf5\x7d\x8f\xec\x32\x76\x57\x37\xe5\x3d\x35\xb8\xf1\xd5\xd4\xc9\xc8\x29\x79\xb3\x82\x7f\xca\xcb\x95\x60\x2f\xa5\x29\x7e\xb3\xa0\xe7\x41\x90\xcb\x7b\xb1\x5b\x3b\xca\x2c\x00\x97\xf8\x39\xce\x9a\xb3\x80\xf1\x43\xb0\x39\x8b\x87\x2b\xe0\x9d\xaf\xf0\x0d\xec\x5a\xdc\xde\xd9\xdc\x06\xa4\xf7\x5e\x9d\x93\x4a\x17\xd5\x1c\x34\xe7\xc0\xa2\xe1\x87\x1e\xfe\x6b\x0e\xfb\x98\x43\xab\xf7\xb1\x24\x9a\xb8\x26\x34\x89\x26\xf4\x58\xd8\x9c\x06\x94\x8d\xea\x12\x8e\x70\xbb\x06\x24\xac\xbd\x11\xa6\x41\xa9\x66\xf7\x11\x79\x03\x09\x04\xc1\x9b\x0a\x21\x21\x2e\xfc\xe2\xba\xf3\xa3\x84\xc6\x64\x94\xe0\x86\xa1\xc9\x10\xc0\x3c\x0d\x40\x1a\xba\x55\xd8\xc3\x9d\x65\x83\xfd\x39\xd6\x3c\x66\x9c\xa6\x81\x72\x90\x72\xf0\x84\xa8\x84\x73\xf9\x98\xfa\x9c\xc8\xc3\x52\xac\xe0\x26\xf3\x36\x48\x53\x3c\x58\x9d\x58\x2e\xf3\xa5\xbf\x95\xa4\x5a\xa0\xb1\xb9\xec\x76\x97\x54\x41\x18\x54\xf3\x99\xed\xde\xb9\x13\xa2\x7e\x3e\x5d\xbb\xfa\xc4\x23\x32\x02\x11\xd0\x7c\x7a\x81\x91\x28\x83\xa5\x69\xc3\x9f\x07\x6a\xea\x28\x79\x07\xae\x13\x75\xf9\x38\xa1\xcd\x7b\xd2\xf2\xc3\xe4\x25\x7d\xba\x7f\x22\x0b\xe7\x17\x86\x26\xb1\x23\xc4\x99\x47\x6f\x4e\xaf\xe1\x70\xee\x0f\x4b\xa5\xd5\xb8\x29\x94\x43\xe7\x2f\x54\xf9\x64\x3d\x37\x04\x74\x06\x0a\x2f\x67\x1c\x5e\x08\x23\x06\x4e\x40\x52\x3c\x38\xcf\x14\xa2\x93\xac\x24\x2f\xf4\x9d\x2e\x00\x31\xa0\x5b\xa1\x16\xd0\x9b\x5b\xe7\xce\xb9\xe9\x6b\x43\xe2\x2e\xd7\x37\x5d\x0b\x3b\x13\xa7\x56\x54\x88\x99\x17\x8c\x47\x53\x41\x23\xdd\x84\xcd\xcc\x79\xa1\x1c\x84\x31\x44\x8b\x21\xde\x11\xba\x29\x06\xab\x56\x16\x26\xd0\x3b\xb0\x6b\xa5\x97\xf5\xfc\x26\xdb\x3b\xcf\x59\xab\xcd\x1b\x95\xd1\xa1\xd2\xff\x38\x66\xbd\xba\x72\x81\xa8\xc1\x20\x0d\xa6\x36\xe2\x9b\x02\x9b\x89\x61\xda\x6f\xd7\x94\x94\x21\x50\x27\x39\x23\x44\x9d\xdd\xe1\xdb\x8c\xf5\xb4\xaf\x84\xb7\x7d\x7d\x50\x67\x85\xa4\xcf\x47\x20\x69\xf1\x72\xd1\xe1\x12\x20\xc7\x79\x37\x79\xe1\x77\xdc\x23\x28\x33\x9e\xcc\x82\x10\x8a\x8e\x4a\x6f\x8b\xaa\x4f\x7f\x3f\xb4\x04\xbd\x80\x37\x41\xa1\xd9\x2f\x43\x7e\xc2\x92\xde\x08\xdc\x04\x5b\xbf\x4d\x42\xf3\xe4\xdd\xa7\xe4\xcc\xf1\x3d\xcf\xf8\x22\x87\xe9\xc4\x9a\xa1\x0a\xda\x6a\xbb\x11\xa6\x1f\xf7\xb0\x9b\x7c\xac\xb6\x4f\x69\x46\x8b\x17\xb2\x8d\x03\x9a\x24\xde\x64\x0d\x4e\x46\x7b\x75\x3e\x06\x35\x57\x2f\x37\xdb\x86\x54\xde\x40\xbf\x8c\xd0\x24\x96\x84\xc0\x49\x2e\x94\x55\x9d\x47\xf8\x34\xb7\x8a\xc9\x1d\x39\x9e\xf9\xc3\xd1\x18\x1b\xd8\xa8\x84\x59\x4b\x7a\x3f\xc6\x37\xee\xba\xd8\xff\x9c\xed\xd3\xc0\x42\xf4\x71\xd5\xf7\xb0\xab\x79\xf2\x9d\xdc\x64\xf4\x14\x5d\xbf\xa2\x8c\xdf\xc2\x93\xe3\x81\xb3\x5f\x28\x0b\x7d\xb3\x63\x66\x4c\x66\x61\x64\x5b\xa0\xfa\x63\xe0\xc9\xfc\x24\xf4\xed\x2c\x75\x52\x9f\xe4\x6c\x29\xce\xec\x97\x65\x1b\x7d\xee\xae\x0e\xe2\x3a\xbc\x49\x18\x6d\x77\x3b\x4b\x61\xee\x8f\xa3\xb2\xf6\xc4\xec\xeb\xc9\x0a\x91\x4f\x7b\x0f\xec\x0a\x88\x73\x31\xbf\x95\x39\x18\x36\xfa\x06\x66\xb3\x93\xc7\x5b\x83\xc3\x36\x8a\xfc\xf3\xeb\x8d\x7f\xb6\xdc\x18\x10\xc9\x30\xe9\x8f\x89\xdd\x94\x7e\x32\xf4\x06\x75\xed\xce\xa2\xc3\x43\xe0\x4d\xcb\x41\xae\x8f\x84\x8f\x9e\x84\x71\x58\x65\x1a\x10\x85\x58\x5d\xd3\xa5\xcc\x08\x44\x46\x1c\x44\xbb\xa8\xf3\xe5\x6b\x85\xc7\x4d\xe7\x29\x9a\xfb\x1b\xad\xbf\xc6\x6a\xdf\x3e\x09\xdd\x30\x1b\xe7\xc5\x0b\xef\x86\xa9\x89\x95\x45\x59\xe7\x33\x78\x80\x56\x5d\x2a\x9e\xc4\x13\x48\xaf\x99\x05\x3f\xa0\x05\x99\x6d\x9e\x5e\x73\x2f\x2b\x1b\xf6\x7c\x77\xd1\x82\x7d\x6c\xa6\x35\xb1\x39\x8b\xc5\xb9\x62\x05\xa8\x4f\x34\xf7\x89\xd7\xc2\x06\xcb\xd6\xcc\x06\xb1\x86\x2b\x0c\x1f\x48\xef\x16\x97\x25\xdb\x3d\x6d\x3b\x58\x76\x69\x68\xd9\x8d\x77\xb5\x71\xb3\x6b\x0c\xae\xae\x97\x14\x6a\x76\xd1\x7f\xed\xa4\x6f\x76\x0c\xb0\x63\x59\xe6\xc4\x7d\x06\x29\xc5\xe5\x50\xaf\xab\xab\xe3\x4a\xff\x63\x6b\x1f\x03\xae\x61\x35\x9f\xcc\x66\x89\x6c\x6e\x46\xd4\x96\x64\x8d\x5c\xc8\xbb\x95\x05\x96\xdc\xe8\xd9\xfc\x92\xa8\xd9\x32\xa8\x51\xdc\xa7\x84\x16\x39\xf9\x69\xf1\x46\x9b\x6a\x2c\xd9\x16\x39\x6b\x6a\x36\x56\x34\x8a\x73\x96\x30\xcf\x60\x2d\x1a\xb7\x64\x6d\x7e\x95\xda\x8a\x0d\xb5\x13\x33\x58\xff\x32\x29\x28\x1d\xc6\x8f\xee\x82\x18\x8c\x5f\xf7\xd6\xd7\x37\xd7\xd7\xb7\x92\xdf\x22\xce\x07\x2e\x91\x93\x59\xe4\xf9\x6d\x69\xc6\x89\xdd\x54\x19\xc5\xc0\xa1\x70\x50\x20\x3c\xbf\xfc\x0c\xe3\x65\x33\x8c\x01\xcd\xcd\xdb\x4a\xe2\x15\xbc\x8d\xc3\x2a\xd7\xa1\x10\x6d\x60\x10\x73\x53\x78\x3a\x4d\xd6\xe8\x4b\xe8\x7f\x1c\x33\x13\x5e\x9c\xfb\xbd\xfc\x76\xc7\x2b\x70\xaa\xf6\x72\x0f\xd3\x4f\x56\xcd\x8d\x35\x5a\xde\x57\x12\xf8\x66\x6e\x71\x33\x17\x5f\xd1\xcd\x34\x29\x58\x36\x60\x32\x44\x7f\x9c\xe8\xbd\xdc\xfe\xe8\x2b\xa2\x58\x5f\x79\x35\xd3\xfc\xe5\x31\x5d\xa4\xe6\x20\x03\x1e\xbd\xa7\xdb\xe4\x06\xe7\x54\xf2\x65\xdd\xe8\xcb\x75\xa3\xdf\xbe\xfd\x7c\x5b\xfb\x19\x90\x6e\xb8\x59\x77\x2e\x4f\xd5\x8b\x8c\xc4\x92\x9b\x67\x30\xbd\x2b\xe5\xb4\x7b\x04\xe5\xfc\x6d\xe7\xf5\x06\xc5\x0d\xb4\xa8\x0d\x80\x81\x94\xa2\x05\x25\x6e\xf2\xfe\xdc\x00\x09\x96\x28\xdf\xa8\xf7\x38\xe6\x1b\x85\x3d\x79\xac\xa3\x52\xdc\x25\x14\x1e\x30\x45\x03\x9a\x7b\xf1\x38\xd9\xa2\x79\x9f\x43\x10\x02\x39\x4e\x74\xd4\xf1\x88\x6a\xcd\xc3\x1d\xec\x1b\x47\xca\x2e\x0d\xa8\x59\x16\xb1\xf7\x1a\xa1\x6b\x6c\x20\xf8\x7c\x82\xfe\xe1\xb3\xa9\x13\xa8\x44\x3e\x57\x31\x20\xd2\xfc\x3c\xa8\x40\xb1\x6a\xb6\xb0\xba\xf2\x74\x25\x56\x56\x97\xa8\x3a\x24\x07\x98\xd5\x21\xea\xd1\xbb\x00\x2e\xed\xe3\xcb\x1a\xf7\x7c\x27\x74\x03\x42\x98\x2f\x1e\x06\x4c\xe8\x8c\x99\x0f\x2f\xd8\x6b\xca\x5e\x38\x2f\x1c\x48\x3d\xe4\xe5\x22\xc2\x30\x08\x65\xc5\x25\x7f\xc8\x0b\x93\x05\xca\x49\x06\x98\xc9\x86\xf8\x5e\x81\x96\xa6\x92\x6d\xfd\x92\x2f\x5c\x28\x07\x44\xdb\x02\xd5\xaa\x9f\xf3\x25\xa1\x65\x46\x9d\x39\xf0\x66\x3d\xbd\xc1\x52\x20\xab\x8a\x88\x01\x1a\x8d\xe8\xda\xcf\xe7\xb3\x8d\x70\x03\x66\xf8\xa3\x37\xd1\x1d\x5c\x72\x13\x79\xbd\x92\xbb\xd6\xdb\x79\x29\xe8\x06\xc6\x74\x25\x63\xf7\x30\x73\xf3\x30\xdb\x7c\x35\x63\xba\x3a\xef\x09\x88\x11\x5a\x71\xfe\x96\x53\x2b\xbd\x61\x34\xfe\x93\x21\x85\x1d\xf9\xdd\x3f\x38\xd9\x95\xa7\x9e\x92\x41\x8d\xa3\x6f\x6c\x6c\x14\x55\x29\x7d\x9b\xb1\xea\xf8\xd9\xd1\x81\xbb\xa3\x29\x1e\x4c\x75\x36\x3c\x3c\xf1\x54\xba\x4d\x01\x3a\x67\x8f\x68\xbc\x7d\x1e\xd3\x97\x7e\x45\x4c\xea\xba\xa9\x21\x54\xac\xdf\xda\xfd\x56\x7f\xbf\x2e\x1c\x14\xf6\x0b\xf3\xa2\x7e\xf1\xd4\xb5\xe3\xf2\x5f\xe9\xb7\xfc\x4a\x18\x8f\xbd\x24\x23\x44\x1d\x15\xcd\x0b\x2c\x49\x3b\x77\x72\x3a\xda\x4c\x77\x62\x96\x83\x68\x9b\xa8\x0b\x36\x62\xe6\xc4\x5e\x41\x6e\x9a\xbc\xba\x7c\xc0\x76\x5d\x4f\x3c\x2e\x53\x97\x35\x94\x2d\xcb\x46\x2b\x4f\x7d\xeb\xb2\x16\xd3\x00\x65\xac\xc8\x3d\x36\x3e\xd4\x32\xc0\xd4\x4e\xab\x5f\x42\xee\x2d\x23\x03\x99\x4c\xd3\xba\x96\x98\x02\x76\xbe\xea\x22\x1e\xf8\x1a\x54\x5d\x28\xb5\x58\x97\x3d\xe8\x9f\x8a\x8b\xd4\xe5\xe0\x89\x73\x95\xe7\x8b\x2b\x75\xb2\x56\xd9\xaf\xa8\xf6\x8a\x53\xc5\x31\x7e\xa5\x9e\xa0\x89\x66\x81\xd7\xc5\x9c\x25\x17\x6a\xb2\x4f\xc2\x9a\x63\xa0\x1b\x46\xd8\x9b\x51\x8c\xb8\xf5\x05\x90\x6a\x87\xfa\xd5\x9e\x64\x9a\x90\x8b\x7f\x30\x4d\x05\x83\x6b\x6a\x60\xcf\x91\x0d\xa2\x7d\x82\x40\xf3\xd5\xe9\xad\x5b\x1a\x5e\xa6\xd0\x5a\x99\xba\x79\x29\xb8\xed\xa0\x49\x09\x13\x3b\x98\x29\x8f\x11\xce\x63\x4c\x50\xe7\x13\xc7\xc9\x75\xb9\xf1\x34\x8c\x40\xc3\x00\x47\x87\x9e\x32\x25\xc1\x41\xc6\x17\xf9\xa5\x77\xc4\xed\xbd\xba\x3c\x2c\x83\x89\x90\x83\xcf\xbc\xeb\xce\xd4\x3d\x76\xf5\xbd\x42\xdb\x6e\x5d\xca\xba\xb0\x2a\x29\x56\xef\x53\x1b\x90\x5a\xb8\x72\xd1\xa6\x57\x17\x2b\x38\x08\x5a\x29\x52\x87\x6d\x3d\x03\xbe\x13\x05\xd1\x2c\x39\x94\x75\x15\x88\x8c\x72\xa0\x20\xd0\x58\x2c\xd0\x58\xb8\xb7\xa4\x8c\x81\x98\xc8\xbc\x32\xda\xd4\x9d\xa7\x53\x42\x7d\x32\x2a\x33\xc5\x3a\x1d\xc1\x48\x5f\x47\x93\x7d\xd1\xfa\x85\x96\xf5\xb2\xca\x84\x0a\xf4\xc2\x27\xbc\x32\x3a\x82\x17\x22\x7f\xa1\xeb\x13\x28\x86\xdf\x6a\xf2\x2d\xdd\x07\xb6\x0f\xeb\xba\xe8\x90\x30\x90\x8e\xe7\x75\x5d\xf6\x3d\xa7\x0d\xe6\xc9\x1c\x3b\x43\x9d\x1a\x0e\x48\x33\x33\x4a\x3a\xa8\x0e\xfc\x2b\xff\x17\x4d\x46\xf5\x44\xa6\x2a\xfb\xf3\x8c\xc9\xb8\x6f\x8b\x5a\x9f\x11\x1b\xa8\x69\x88\x65\x55\xbb\x02\xab\xb2\x13\xb1\x22\xae\x78\x7e\x6b\xa0\x17\x90\xaa\x4b\x1f\x08\x87\x59\x75\x5d\xb8\x40\xa9\xab\x2a\xad\x9c\x9b\xe6\x30\x7a\xcc\x69\x78\x58\x8d\x07\x86\xf1\x19\xb6\x9e\x88\x31\x03\x06\xae\x6f\x36\x7f\xc6\x0c\x21\x0b\x4f\xbb\xda\x61\x44\xe3\x3b\xe3\x5f\x8e\x1b\xe1\x73\x16\x26\xf6\xcc\x69\xc1\xcb\xc0\xc2\x2a\x03\xc1\x85\x51\xb9\x90\xa4\x02\xf9\x75\x8d\x77\x8b\x49\x37\x93\xc8\xd0\x46\x64\x5f\x4a\xbd\xe5\x7d\x37\x04\x07\x56\x51\xb2\xd5\x89\xac\x4b\xaf\xba\x66\x56\x84\x8c\xed\x2b\x81\x74\xca\xd0\x5d\x91\xe1\x81\xeb\x81\x6e\x9a\xa9\xe2\xb9\xba\x52\x13\x70\xa5\x74\xd5\x44\x87\x83\x0c\xa0\x5b\x58\xdf\xac\xa1\x10\x94\x9a\xc8\x0c\xed\xb9\x32\x65\x74\xd4\x2c\xc5\x65\xf9\x4e\x34\x77\x41\x86\x60\xd5\x95\xd7\xe6\x44\x1a\x3d\x01\x7d\x24\x33\x25\x62\xcb\x28\x10\x9e\x11\xa8\x73\x91\xba\x72\xe2\x36\xe0\x93\x0c\x76\xb6\x95\xc2\x69\xe2\xc4\xf1\x66\x65\x53\xc6\x64\x4e\xfa\xf7\x66\xf9\x07\xcb\x9e\x5c\xac\x42\xd4\x61\x57\x21\xb8\x6a\x9b\x01\x15\x5b\x01\xb2\x35\x69\xa6\x2c\xe8\x60\x2a\xe1\x2a\x64\xa3\xaa\x97\x8d\xaa\x26\x1b\x55\xc3\xc2\x6b\xa7\x95\xb7\x41\xab\x09\x17\x55\xbb\x68\x29\xd0\x19\xeb\xc6\x46\x9d\xd2\x2b\x70\x32\x37\x83\x74\x4c\x99\xcc\x59\xd0\xef\xc0\xf0\x6b\xf3\x2b\xa7\xc1\x98\x18\x19\x4a\xfe\xe7\x39\xb0\x4a\x96\x28\x32\x3f\xee\xf8\x7a\xb0\x12\x08\xc4\x68\x93\x53\xf9\x09\x90\xa0\x8d\xda\xea\x6a\xd8\xec\x38\x7e\x10\x1c\xbd\x54\x4a\x80\x54\x27\x01\x32\xb1\x05\xc3\x5a\x12\x38\x92\x04\xe6\xaf\x65\x6f\x20\xf8\x22\xba\xa4\xf7\x0e\x41\xb2\x25\xa0\xdb\x1c\x08\x8e\x0e\x97\xb2\xe3\x72\x69\x36\x25\x1e\x35\x1c\x85\xc7\xbc\x4a\xde\x6c\x58\x20\xca\x98\xf9\xca\xf5\x53\xe2\x71\x47\xd5\x07\x37\x09\xe7\x0c\x21\xea\xb3\x53\x13\x49\xcf\x16\x6c\xb0\x0e\xcc\xfa\x24\x5a\xa3\x04\x38\x33\xc4\x90\xf6\x35\x8f\x6e\x0f\x39\x96\x76\xb9\xcf\x57\x83\x3d\x42\x5b\xc3\x1d\x35\xdc\x39\xf1\x20\xb2\x64\xdf\x28\x78\xee\x04\x4f\xa8\x1f\x79\xf3\x3a\xfb\xc0\x3a\x70\x87\xbb\x76\xfa\xee\xae\xbe\x29\xd3\x7e\x5c\xe9\x9f\x59\x22\xa9\x48\x5b\xc3\xc6\x97\x60\xab\x2a\x37\xd4\xdc\x4d\xe8\x4a\x8d\xcc\xe2\xa4\xc9\x9f\x99\x40\x29\x26\x08\xd8\xb3\x70\x52\x33\x71\xf3\xd0\x9c\xb0\x8c\x85\xe8\xf7\x3f\x3d\xad\x27\x8a\xf4\xe9\x89\x5d\x4e\x98\xf2\xd8\x0e\x37\x43\x28\x75\x39\xa8\x81\x07\xaa\x2d\x00\x54\x57\xda\xd8\x4a\xb8\x17\xd4\xfa\x22\x8a\xc1\xab\x7f\x72\xb2\xfa\x07\x26\x2b\x1f\xaf\xa8\xa1\xf0\x93\x8a\x7d\x11\x4e\xe6\xdd\x7d\x5c\x1e\xac\x4c\x3d\xe1\xb6\x28\x13\x46\x0b\x33\xd4\xfc\xa8\xff\x7a\x7c\xc2\x86\x47\x62\x6b\x90\x2f\x6d\xcc\xb0\xd6\x6c\x39\xc4\x47\x0b\x6a\x30\xd1\xb8\x89\x0d\x88\xf5\x8f\x56\xa7\x73\xf9\xf8\xf8\x15\xb0\x65\xec\x53\x0a\x11\x97\xa7\x48\xbc\xd6\x73\xd1\x9d\xb1\x7a\xf2\x49\xac\x01\x83\xc7\xb7\x02\x4d\xdb\xc9\xa7\x37\x06\x0c\x1e\x6b\x48\x17\x91\x0a\x3a\xd7\x73\x79\xcc\xdd\x13\x3c\x86\xbd\xdc\x81\x9d\x48\x23\x7c\x18\x61\x31\x0f\x25\x78\xac\x9e\x8b\xb9\x7c\xf0\x4f\x3b\xec\xb8\x29\x76\x4e\x09\x6d\x42\x78\xda\x74\xfc\x74\xd3\xf0\x13\xf3\xf0\x93\x83\xda\xc9\x3f\x74\xa7\x67\x98\xd7\xf6\xc6\x3f\x32\x35\x70\xdc\x39\x43\xb2\x48\x26\x36\x0b\x86\xfd\x9c\x41\x37\x5d\x41\xe0\x28\x06\x3e\x40\x24\x44\x5d\x0d\x48\x37\x2c\x4b\x3e\xba\x3f\xa1\xe4\x6b\xbc\x2e\x8b\x33\x22\x4b\xf8\xb2\xdc\x80\x66\xab\x5e\x1e\x2b\x35\x3c\x50\x51\xcf\x58\xbe\x0c\xd1\x0b\x66\xdc\x67\x2c\x4c\x05\x2b\xe6\x69\x37\x15\xea\x69\x8f\xb1\x4f\xac\x2e\xf8\x24\x59\x3d\xb3\x9a\xc0\xa6\x10\xdc\xfa\xdf\xf0\xaf\x55\x05\xdb\x6f\xf5\xc4\x86\xd9\x44\x0c\x10\x19\x9c\x5f\xe8\xcf\x26\x24\xb6\x26\xc2\x06\x42\x15\xd2\x02\x19\xd4\xb7\xc6\xf8\x2d\x59\x54\xc2\x86\xa2\x28\xe1\x9b\x40\x47\x90\xb3\xc4\x94\x14\x20\xc7\x4b\xbc\xed\xfb\x07\x41\xd0\xd8\x54\x15\x94\x3c\xf6\x44\xe2\x2f\x9d\xbb\x2f\x67\xe9\xf7\x17\x81\xda\xcf\xbd\x3c\x38\xe0\xc6\x5c\x3d\xbb\x2d\xb0\x06\xa6\x29\x72\xad\x37\xfd\xb3\xca\x3a\x3f\x34\x7e\x44\x2c\x18\xe2\xca\x5b\x7a\x55\x6e\xb7\x54\xbb\xdc\x32\x61\x21\x50\xb3\x8d\xff\x2a\x63\x4f\x4d\x05\x35\xe2\xc5\xda\x1a\xf5\x96\x7a\xc5\x79\x57\x65\x85\x8e\x07\xa6\x1e\xf1\x38\x1b\xfe\x69\xa7\xfb\x4a\xf1\xe0\xb7\x0d\x98\x60\xef\x66\x72\x42\xfe\x1c\x71\xae\x38\x0e\xe1\xf8\x7b\x02\x46\xe3\xf7\x3d\x84\xad\xc8\x11\x65\xcc\x15\x7b\xff\x5c\x30\xf6\x7a\x62\xe2\xf8\x06\x15\x77\x35\xa6\x33\x77\x1c\x2c\xd5\x98\xb8\xcf\x38\xb1\x85\x93\xf4\x23\x13\x5b\x55\xbc\xa2\x4e\x3d\x67\xdb\x86\xa1\x35\xf3\xb1\xcc\x70\x58\x93\x7e\x3d\xc9\x42\x9d\x84\xc9\xbb\x3a\x03\xa4\xb8\xa5\x62\xef\x84\xdf\x79\xf5\xd4\x16\xee\x24\xc5\x7b\xd5\x21\x29\x42\xf6\x6a\x22\x78\xbd\x83\x34\x1a\xa8\x13\xaf\x76\x8a\x32\x20\x3c\x1c\x34\x61\x6a\xe4\xd5\x4a\x81\x5f\xe6\xe5\x8b\x21\xdf\x44\x5d\x07\x6e\x41\x1a\x24\x26\x4c\xec\xc4\x4c\x9e\x55\xa0\xe6\x6d\x33\x3f\x9c\x48\xc6\xbf\xe0\xe0\xb4\xfc\x72\x5b\x01\x5f\xc1\xad\x20\x27\x81\x9b\x6f\x03\x1a\xd5\x57\x4c\xfa\xe5\x5f\x10\xc1\x9e\x88\x86\x18\x38\xbf\x22\x9a\xe6\x17\xbb\xd3\xb4\x48\x5b\x4b\xdc\x31\x9e\xe8\xf6\x58\x73\x61\x10\x42\xdd\x8a\xaf\x69\x99\x2f\x5a\xd7\x64\x03\x7d\x72\x03\x7d\x5a\x18\x2a\x52\x91\x16\x4a\xd6\x29\xd6\x6c\xa4\x0e\xb9\x89\x18\x13\x32\x97\x8a\xe5\x2a\xeb\x90\x55\x20\x2a\x92\xab\x69\xe9\xa3\x11\x33\x02\xee\x50\xa5\x80\xd1\x36\x85\xf0\xa5\xff\x18\xac\x07\xfc\x55\x40\x57\x23\x6d\x13\x61\xd2\x95\x22\x33\x89\x3d\x8d\x29\x70\xab\x69\x6a\xea\x18\x7f\xf8\x54\xab\x4c\x89\x95\x64\xa2\xe2\xf1\x2f\x20\xdc\x62\xab\x23\x65\x67\x44\x33\x7e\x29\x85\x0a\x04\xd2\x69\x5f\xa5\x77\x35\x85\x71\x02\xe9\xe0\x5b\xff\xd4\xae\x43\xd7\x48\x4d\x9d\x9f\xda\x4d\x00\x54\xc9\x2f\x20\x0b\x0c\xb7\x76\x27\xa2\x5b\xfc\x63\xec\x96\x56\x70\xb1\x82\xcd\x67\xe7\xc5\x11\xdf\x91\xaf\x17\x67\x40\xbc\x1f\x3c\x11\x1c\x42\x1f\x73\xbd\x22\xcd\x22\xf7\x07\x2e\x9b\x33\xc8\x8b\xa7\x13\x71\x1a\x70\xf1\xf4\x7b\xc0\xe0\x31\xec\xe1\x3b\x7f\x49\x6a\xdd\xfb\x9f\xf5\xca\xb9\x9d\x04\xf0\x32\xe0\x0d\xd2\x4e\x9b\x42\xbb\xe7\x25\x15\x33\x9c\xee\x43\xed\x7a\xf4\x5c\xaf\xae\x06\x07\x66\x4d\x57\x67\x8b\xbf\x70\xd3\x6a\xa2\x99\xb8\x9b\x97\x1d\x2b\xdf\xb2\xab\xf7\xf2\xa5\x96\x05\x06\x0c\xe3\x0e\x9c\x66\x0f\x28\xee\xa8\x12\xa4\xf2\x99\xb0\x7a\xe7\x8f\x0f\xad\x0a\x37\xb7\xce\x6e\xce\x7e\x6e\x6e\x1f\xdd\x38\x9e\xab\xb7\x24\x3e\xa3\xa1\x67\x4c\xbe\xb3\xcd\xaf\x33\xa7\xd2\xf9\x43\x9a\x54\xe6\x09\x57\xb6\x6a\x96\x29\xe7\x3a\x61\x22\xc0\x38\xab\xc4\x39\xb7\xe5\xac\xb0\xbf\xb7\x00\xd0\xb3\x2a\xf1\xfe\xa4\x52\xe6\xd5\xeb\x2c\xad\x99\x2a\x49\x6b\xde\x9b\xfe\xb1\xff\xcb\xc7\x21\x9e\x70\x0a\xc5\x77\x7e\x6a\x86\x18\xea\x44\x66\x28\xdf\x9a\xb6\x18\xb8\x97\x9a\x53\xb8\x6e\x02\x0e\x99\xc2\xaa\x27\x48\xfc\x18\xaf\x71\x80\xac\xcc\x63\x6d\x8c\x39\x45\x18\x6e\x2e\x54\x9e\xc2\xe4\xd4\x91\x35\x14\x88\xa3\x38\x5c\xcd\xdc\x23\xce\x17\x8a\xe8\xfa\x90\x61\x37\x5f\x77\xc6\xb4\x02\x82\x72\x02\x34\xd7\x6e\x08\x32\xd4\x7c\x57\x89\x2c\xf3\x45\xd1\x6a\x6d\x66\x20\xe4\x4d\x96\xaa\x9c\x9f\xd3\x4a\x50\xb1\x86\x0a\x86\x8f\x7d\xce\x7c\xe5\x42\xa7\x42\xe0\xd6\x3f\x1a\xa5\x54\x5d\x96\x4d\xf3\x45\x3f\xa6\x14\x3c\xc1\x32\xb0\x24\x82\x02\xbe\x95\x9d\xeb\xe8\x2f\xe5\x43\x3b\x06\xd2\x8c\x17\x4a\xab\x2a\xcd\x99\xff\xf4\x89\xb3\xf7\x89\x10\x43\x97\xac\xec\x28\xd8\x31\xcb\x8a\x87\x94\xbf\x76\xbf\x3a\xf7\xc7\x3b\x2d\xd5\x2e\xe1\xd6\x07\xdb\x0c\xcf\xc2\x05\xd5\xc3\xd5\x2f\xb4\x8f\x55\xea\x1e\xab\x7c\xaf\x62\xa2\x64\xa6\xe6\x72\xde\x39\xac\xcf\x52\x2f\x18\xd5\x4b\xc5\x70\x88\x25\x57\x1f\x3c\xb1\x52\x1f\xb7\x94\xe5\x13\x00\xf5\xd1\xab\x1a\xf5\x09\x36\xf8\x3f\xec\xc7\x9f\xe0\x9b\x2e\x18\x92\x14\x7c\xfb\x04\x73\x96\x36\x29\x16\xb6\x1a\x34\x3f\x9c\x62\x3e\xc1\xf2\x0c\x2f\x09\x4c\x94\x08\x1b\x5e\x19\x57\x82\x59\xe0\xdb\x83\x03\x64\xaf\xe0\x98\xee\xab\x3d\xfa\x0e\x65\x75\x92\xef\x95\x82\xef\x03\x35\xf9\xb7\x4a\x61\x7a\xfe\xab\x6a\xd1\xaf\x0f\x66\x70\x63\x21\xce\xac\xc6\xb0\xfb\xc4\x55\xa2\xc0\x57\x72\x46\xf7\x44\x0d\x3e\xda\x5a\xeb\xb1\x29\xea\x13\x0b\x82\x2a\x0b\xbd\x94\xc5\xbc\x17\x02\xf3\x82\x9e\x64\x42\x6f\xdc\x19\x58\x74\x2f\xb4\x3a\xfe\x1f\xc7\x2c\x49\xf2\x37\x07\x28\x1b\x8b\xaf\xa9\xc8\x47\xa5\x1e\xe3\x6a\xaa\x83\xab\x28\x06\x2e\x24\xa8\x68\x29\x4c\x19\x7f\xc5\xb7\x36\xed\x09\xd9\x07\x09\xeb\x9e\xaa\x4e\xa3\xfa\x70\x26\xf7\x24\x4a\x10\x08\x64\x5c\xb1\xe1\x9f\x9d\xc2\x93\x4d\x04\xe1\x61\xef\x3f\x90\xb8\xd5\x77\xa7\xea\x03\x6d\x53\x13\xfd\x2a\xe0\xb1\xd7\x93\x6f\xb7\xac\xe1\x4d\x82\x89\x90\x19\x99\x53\xa3\x09\xb5\x1a\xe6\xd2\xea\xb5\xdc\x18\x42\xc8\x35\x8a\xe6\xe6\xa0\x4f\xf6\xe9\x66\xd6\xb2\x07\x7a\x38\x98\x3f\x94\xf0\x1d\x90\xd3\xe4\xa7\x30\xb7\xf5\x4e\xbb\x00\xb3\xa7\x52\xe5\xfa\x14\x5b\x26\x3f\x26\xb2\x36\x31\x9b\x9e\x60\xe4\x41\x71\xf1\xdb\x5e\xca\x53\x70\xf8\xf0\xa8\x5c\x4d\x7d\xba\xe4\x29\xdf\x9c\x18\x10\xe9\xe5\xdc\xf2\x71\xaf\x0a\xd7\x07\xdd\xc1\xbf\xbe\x50\x57\xc6\x20\xb6\xe0\x98\x4a\x43\xf4\x4b\x06\xa6\x29\xaf\x5f\x55\xd3\x04\x52\xff\xf5\xb0\x5c\x5a\xdf\xfe\xf5\x10\xfe\xcc\x4d\x08\x7f\x74\x93\x56\xba\xa7\x1e\xe2\x4a\x71\xff\x89\x2e\x67\xaa\xdf\xdf\x78\x62\xde\x16\x7b\x59\x1f\x44\xdd\x0b\xfb\xf3\x56\x7f\x66\x25\x89\x69\x14\x12\x6a\xba\x98\x6b\x9c\x6b\x37\x68\x61\xa9\x94\x1e\x6a\x63\xca\x58\x3c\x66\x80\xb8\xff\x20\xb0\x99\xf9\xaf\xfc\x47\xf5\x44\xf1\xab\x4a\x01\xec\x0a\x1d\xfa\x13\x5c\x0b\x3f\x32\x31\x25\x89\x0e\xdc\x66\x42\xe3\x71\xbe\x20\xe0\x7b\x3d\x09\x2c\xb2\x7b\x93\x57\x6f\x01\x4d\xbe\x82\x06\xe1\xcd\xfe\xef\xbf\xf6\x7f\x66\xcf\x14\xdc\x7f\xa2\xff\xab\xb6\xe5\x61\x1a\xb9\xb6\x68\x1c\x3d\xdb\x62\x65\x57\x2c\x77\x4a\x33\x4f\x14\xe1\x6a\x14\x11\x68\x8b\x2b\xa9\x16\x3c\x86\x7d\xf0\xad\xbb\x61\x26\xd6\xec\xa4\x5e\x44\x05\x0d\xe9\x9c\xae\x99\x9a\x8b\x89\xab\xf3\x59\xbd\xe7\x4e\x37\x1d\x5a\xf4\x6b\x5b\x3a\x33\xb9\xbf\xe5\x32\x13\xfe\x6b\x66\x68\x5a\x2d\x2c\xdb\xbe\xd4\xa6\x38\xe9\x39\x6b\x0b\xd8\xa7\x1f\x88\x6e\x03\xca\x36\x04\xe6\x6c\x60\xe5\x0b\x17\xfd\xdc\x53\x6a\xe7\x76\x24\x77\x5d\x38\x8e\xbe\x39\xb7\x5f\x86\x54\xf4\xdc\x63\x22\x96\xa7\xbc\xfc\x5b\x5b\x68\x67\xae\x6b\xa6\x6b\x1d\x6c\x9b\xbe\xb8\x56\x5b\xdc\x77\xfc\x63\xf9\xd6\x20\xd1\x3b\x11\x12\x1f\xa9\xfb\x18\x18\x75\x4b\x18\x62\xe6\x08\xdd\xa0\x57\xa7\xb6\xb9\x9f\x85\xbc\xf3\xbb\x5e\xed\x6d\xdb\xab\xbd\xed\x7b\x35\xeb\x40\x1b\x47\xa7\x66\x3d\x4a\xa3\x14\xef\x80\x3e\xcc\x52\x2c\x32\x56\xd6\x58\xd8\xc6\xf8\xb8\x80\x40\x18\x73\x7d\xdc\x64\x9b\x1c\x44\x3f\x3a\xb3\x02\x65\xba\x4b\x32\xd2\x35\x3b\x78\x6f\xf9\x0e\x1e\xab\x43\xd9\xeb\x6f\x94\xda\x18\x88\xf1\xda\x01\x40\xe3\xbe\x86\xdd\x52\x19\x30\xd2\xf0\x72\xa6\x97\x99\x6a\xf0\xb2\xb1\xdc\xca\x02\xc9\xd2\x81\x77\x22\xec\xeb\x2a\x64\x81\x0b\xdd\x73\xf9\x46\x7f\x62\x83\xe1\x80\xde\x25\xa6\xf5\x03\x8a\x20\xd5\x44\xc9\x99\xba\xc2\x2e\x4b\x0b\x87\x66\xa0\x62\xcd\x44\xa7\xf4\x66\x10\x36\xa8\x82\x07\xb2\x26\xbc\x1c\x74\x2e\xae\x64\xc9\x0b\xf7\x61\x5b\x0f\xa4\xe6\x98\xfb\x92\xad\x04\xaa\xa0\x1e\xa4\x56\xfa\x71\xbb\x8b\xc2\x68\xf3\x6d\x48\x8a\xba\x50\xf8\xad\x4d\x6d\xb6\x30\x5d\x35\x67\x71\xf3\x6b\x42\x5f\xb9\x27\x65\xec\xf1\xcb\xcc\x59\xd5\x26\xa4\xef\x87\xa6\x8f\xc1\x17\xbd\xb1\x16\x96\xbe\x52\xb8\x44\x09\x6d\x8e\x83\x0d\x18\x33\x89\xc6\x5d\x8b\x81\x92\x41\x3d\xf9\x69\x7d\x55\x65\xf3\x03\xca\x00\xda\x71\xfe\xd2\xfa\x16\x0d\xe1\x6b\xb8\xfb\x31\x90\x54\xc5\x9e\x5c\xf1\x4e\xc2\x12\xee\xbc\x56\x57\x1b\xd3\x84\xad\xd8\xc6\x53\x92\xd6\x9f\x60\x21\x3c\x3a\xd8\xf6\xb2\x69\x04\x36\x23\x6e\x7e\xd6\xd3\x7e\xf1\x49\xbf\x58\x9f\x0e\xa4\xdd\x53\xff\xd8\x22\x34\x2b\x0e\x82\x1b\x81\x13\x43\x70\x61\x60\xa0\x4f\x95\x6b\xe8\xf6\x4e\xb7\x62\xed\xa6\xfa\xc7\x67\xa7\xd0\x45\xff\x48\xf1\x7a\x23\x80\x57\x80\x14\x95\xe0\xc8\x78\x27\x93\xb4\x4f\x52\x9d\x15\xaf\x90\x4f\xd2\x18\xb0\xdd\x1b\xaf\xfd\x43\x1e\xca\x6d\xe1\x9d\x6d\x6f\x94\xa1\x50\xee\xab\x7f\x3c\x39\xdc\x0b\x48\xc9\xee\x23\x9c\x18\x95\x12\x46\x36\xcf\xd7\xb5\x8e\xf6\x8f\x6a\x59\x59\xe3\x16\x75\x1c\x16\x42\x1f\x7c\x95\x75\x90\xb6\x50\xca\x80\xac\xbd\xdb\x22\xa9\x4e\x3f\x28\x19\x2d\x1b\xf2\xc8\x6e\x8c\x81\xd0\x4d\x2f\x1f\x32\x86\x4e\x08\x37\x53\x5b\x75\xbe\xff\x43\x2d\x89\xf6\xc0\x92\x10\x04\xbe\xae\x14\xee\x11\x8c\x2f\x5c\xd7\x50\xab\xae\x58\x84\xc0\xfb\xba\xc6\x5b\xab\xcf\xba\x5a\x87\x3e\x09\x43\xc2\xf3\xcb\x13\x5f\xcc\x69\x0c\x46\x9d\xab\x76\xd4\xc9\xdd\x94\xc4\x0b\x81\x97\xdd\xc4\xd0\x07\xfe\xa1\x7b\xea\x78\x02\x41\x02\x77\xa8\x55\x11\x08\xe3\x03\x2b\x81\x81\xa4\x48\x8f\x03\x97\x2c\x15\xb3\x96\x0a\xd3\x68\x85\x68\x30\x71\x8d\x9b\x16\x35\x2f\x38\x56\x5c\xe1\xad\xbc\xc0\x5b\x7b\xda\xb3\x55\xd9\xb4\xf7\x82\x55\xe1\x24\x2c\x9a\x24\x73\x96\x9e\x74\xd8\xed\x89\x9a\x2a\x26\x86\xb3\xe7\xf4\xc1\x3d\xa7\x0f\x6f\x30\x0b\xb0\xe9\xd7\x5d\x1c\x56\x07\x74\x72\xca\x4a\xd5\xfd\x24\x7f\xef\x76\x7f\xb4\xb3\x49\xc0\x24\x30\xa7\x62\xf7\xda\xef\x0f\xae\xd9\x04\x4b\xb9\xdb\x7a\x4c\xbb\x43\x3d\x6a\xe6\x41\x73\xbf\x65\xfe\xd0\xe7\x5b\x7f\xd0\x5d\x36\xa9\xdd\x43\x98\x2c\x75\x67\x17\x73\x01\xb4\x69\xd5\x60\xa6\x33\x7e\x52\xdf\xdc\xe7\xcb\x6e\xdb\x1b\x41\x29\x0d\x66\xca\x09\x26\x7f\x31\x6b\x84\xe8\xd6\x50\x7f\x54\x08\xbe\x3f\xfe\x59\x24\x50\x78\x79\xcc\x34\x98\xd4\x94\x51\x04\xa6\xdc\xbc\x45\x1f\xa0\x6a\x28\x11\x6c\x15\x5d\x19\x13\xff\xb0\x7e\x3c\x4e\x85\x81\x32\x6f\x63\x3e\x72\xf5\xae\xaa\x39\x72\x8f\xb5\x93\x23\x77\x4d\xd5\x00\x48\xb4\x40\x8a\xeb\x1c\x9e\xc7\xe4\xd4\x95\xc0\xaa\xac\xe7\xc2\xe1\xa2\xa8\x19\x5e\x89\x18\x30\xb0\x11\x4d\x8c\x24\x17\x4e\xaf\x4c\x50\xb7\xeb\xb1\x6b\x2f\x17\x0b\xab\x50\xc7\xf7\xc0\x4e\x49\x18\x28\xdc\xdd\x98\x80\xf5\xf2\x2c\xd5\xb2\xa3\xf0\x49\xda\x81\xb9\x8d\xd4\xcb\x63\x8d\x65\x62\xc6\xe2\xf5\xfd\x4d\xea\x2a\xbd\x32\x73\x6b\x9b\xc7\xbd\xbc\xc2\xaf\x45\xfb\x52\x1d\xbd\x03\x42\x90\x63\x42\xf8\xad\xee\x2d\x4d\x30\xcd\x54\xbb\x95\xae\x18\x5d\xf6\x24\x0c\xe0\x09\x8c\x5b\xf6\x2b\x19\xd8\xc3\xb7\x17\x6b\x7f\x5b\xf5\x77\xb7\xee\x17\x8c\xd0\x38\x15\xfb\xe6\xee\xc6\xb7\xcd\xcd\x27\x54\xa7\xdf\x7e\xeb\xe1\x7b\xde\xb7\x41\xf0\xc2\xe0\xe5\x92\x83\xd9\x6f\x1e\x04\x7f\x2f\xdc\x4e\xf9\x5e\xda\x19\xcc\xdb\xaf\x83\x70\x8b\x59\xd8\x37\xae\x53\x4f\x44\xc3\xc0\xa5\xc8\x77\x08\x9c\xf6\xf3\xa6\xdb\x44\x74\x6c\xb2\x56\xdf\x5e\xd6\xea\x3b\x4c\x1d\xf0\xf5\xdb\x49\xf0\x7d\x53\x84\xef\xdb\x04\xf4\xbe\xb9\x56\xfc\x36\x09\xa9\x6f\x5b\x9d\x7d\x67\xf4\xf4\xdf\x99\xf7\x71\xbe\xb5\x8f\xfc\x4d\x69\xf9\xb0\xf6\x2e\x14\xf3\xc5\x5f\xd9\x91\x06\xce\x07\xab\x9e\x31\x69\x28\xbf\xd7\x47\x4e\x6a\x25\xd0\x9b\x6b\x5d\x16\xf2\x07\x72\x85\x56\xcc\xdd\x64\xb4\x73\xaf\x21\x2b\xb3\x40\x84\xe9\x77\x28\x7d\xf3\xc8\xcd\xac\xdf\x6b\x8c\x61\xa8\x6d\xbf\xd7\xd3\xec\x44\xca\x98\xa6\xe0\x5e\xcf\xf9\x08\xb2\x86\xa4\xf4\xef\x8d\x22\xa4\x7b\xcd\x0f\xb3\xec\xde\x5c\xfe\xdd\xf9\xfe\xbd\xe8\xac\xcd\x27\x90\x3c\x46\x64\xee\x1d\x71\xb0\x3f\xc7\xe0\xcb\x56\x35\xbf\xb5\xd9\x85\x0d\x12\x0d\x4e\x69\x7d\x77\xca\x3c\x52\xfe\xf7\x6e\xad\xb9\xd4\x96\x8f\x31\x94\xe9\x39\x06\xb7\xfd\xda\xf2\xc1\x05\xa8\xe0\xa6\xe6\x6b\x6c\x7d\xae\x71\xda\xb2\xe2\x34\x68\x7c\x9c\x74\x04\xee\x33\x27\xd4\x00\xa0\x5a\xbb\xe1\x68\xb9\xe1\xda\xdd\x00\x3a\x8f\x1b\x6d\xbe\x31\x4e\xec\x56\x4c\x84\x68\xbe\xfe\xc7\xd5\xb5\xad\x3b\xcb\xf2\xda\xf3\xde\x25\x55\x5e\x65\x4d\x2b\xfe\x88\x30\xed\xd5\xaf\x27\x23\x23\xc1\xf9\x1d\xb4\x8c\xb0\x09\x1b\x11\x21\x81\xe0\xc1\xae\x71\xf7\x4b\xcb\x6b\x70\xa3\x5c\x35\x6c\x3f\xf6\x21\x10\xec\x11\xf8\xf9\xaa\x63\x30\xa8\x61\xe3\x2c\xa3\xfa\x66\xd1\x1a\x3e\xe6\x3c\x7c\x18\xc7\xf6\x59\xd4\x80\x65\x26\xab\x05\x9c\x9c\x48\x96\x6c\x37\xde\x8f\x0d\xcc\x46\x58\xa9\x1e\x3b\x99\x8d\xb0\xa0\x83\xbe\x23\x53\xdf\x26\x25\x50\xd6\xb2\xe6\x7f\x78\x51\x0f\x4b\x55\x1e\x06\xca\x49\x3d\x43\x8c\x4f\x31\xde\xc5\xb9\xf9\xc5\xf1\x35\x94\xea\xf3\xb3\x1a\x78\x6e\xbb\xca\x87\x6b\x7b\x40\xc7\xe3\xf9\x9d\x35\x3e\xb1\x85\x47\xeb\x27\xa7\x3f\xd4\x13\x6a\xdb\x3a\xb4\x33\x02\x73\x26\xa4\xce\xb4\x86\xcb\x1f\xee\x35\x3a\xc4\xc5\xb0\xfa\x50\xb9\xd7\xd0\xe7\xa2\x2c\xed\x19\xff\x7a\x51\x7e\xad\x8a\xb4\x0e\x57\x1f\x26\x79\x5d\xe0\x58\xa3\x4b\xf4\xab\x19\x89\x03\xd8\x1e\xd0\xf0\xb4\xda\x99\xbf\x6a\x3b\x2c\x6b\xb4\x65\x7d\x75\xab\x99\x35\x6e\x71\xdc\x77\x2a\x94\xcd\xfb\x6a\xd4\xb1\xb3\x0e\x15\x60\xf5\x2f\x44\x8d\xd2\xe3\xdc\x1b\x84\x4f\xf3\x48\xd7\x11\x46\x86\x63\x37\x1d\xf0\x69\xb3\x67\xa1\x36\x8f\xc3\xc3\x0a\x84\xda\x64\xf1\x73\xd4\x47\x6e\xd5\x23\x5b\x93\xfb\x39\x22\x41\x93\x57\x73\x1f\x33\x54\x25\x98\x70\x9f\x07\x28\x0f\x68\x5d\x2a\xee\xd1\xf6\xfe\xd4\xb8\x9f\x4c\x6f\xd3\x3d\xc0\x81\xac\x04\xae\x77\xc5\x55\xfa\xce\xd6\x2b\x59\xc6\xe1\x6c\x23\x2c\x2d\x29\x4e\x3c\x9d\xd6\xa1\x22\x96\xc2\xf9\xa1\x40\xbc\x5e\x16\xad\x78\x89\x8a\xed\x03\x20\xf4\xf8\x2e\x9d\x11\x22\x8f\x1a\x16\xd6\x0a\x2f\x8a\x17\x6b\xbc\x2a\x02\x1f\x8f\xd4\x28\x3e\x8f\x73\x24\x78\x64\xe0\xbb\x81\x14\x9a\xf7\xaf\x8d\xb3\x82\xf8\x74\x7d\x6b\x3b\x10\x5f\x3f\x81\x4c\xb4\xda\x5b\xb2\x86\x6e\x5e\x31\x54\xdd\x15\x61\x90\xac\xa2\x4d\x01\x0c\x9a\xbf\x7d\x9b\xea\x1a\xfd\xce\x61\xc7\x16\x29\x97\x38\x62\x95\xf8\x48\x5e\xc2\x11\x2f\x0f\x33\x8a\xa1\xba\x73\xb7\xae\xc9\x6e\xd5\xaf\xeb\xd8\x5b\x09\x6c\xc5\xb6\xbd\x88\x40\xee\x59\x7c\xa8\x01\x46\xb3\xae\xb9\xec\x06\xf2\xb5\x28\x57\xdb\x9f\x41\x64\x4d\xe5\x0a\x6f\x81\x36\x84\xae\x0f\xfd\xa5\x12\xc3\xdf\xb7\xf7\x08\x35\x12\x70\x7f\x7b\xc5\x56\x6b\xf7\xf4\x17\x7d\x75\xb9\x64\x5d\x4b\x0e\x16\x37\xbf\xdf\xc3\x97\xd3\x01\x81\x76\xd2\x42\x70\x1f\x05\xd1\x9d\x1f\x75\x2d\x6a\xb3\xa2\xae\xb6\x9f\xae\xae\xd7\x58\x1f\xd4\xb5\x9b\x3a\x4f\xa0\xaf\xe4\x94\x78\xf8\x33\xfa\xb8\x57\xb9\xfa\x95\x63\x95\x72\x89\x9a\x28\xcd\x04\x28\x06\x34\xfb\x04\x41\xa3\x38\xc6\xc9\xfa\xad\x7d\xff\xd3\x18\xf4\xbc\x59\x46\xa3\x24\xb7\x1f\x59\x29\x06\x14\x77\xbb\x09\xf8\xc2\xa7\x4f\x62\x90\x69\xec\x6b\x1a\x17\x75\xd4\x34\xc6\x1e\x9b\x50\xd5\xb4\xff\x0c\xbf\xdd\x80\x8f\xf0\x80\x8e\xad\xea\xe3\x23\xeb\x6a\x13\xb3\xd2\xe4\x36\x9a\x6a\x3a\x29\x64\xaa\xc9\x37\x2c\x09\x34\xbf\x34\x06\x81\xf4\x3c\xce\x5a\x93\x3d\xd1\x34\x24\xb1\x35\x55\x6e\x2a\xa9\x39\x78\x23\xba\x91\x92\x9a\x97\x40\x60\xfb\xc6\x6a\xde\xd4\x63\x1b\x9f\x0d\x60\x4b\xb1\x0d\x1b\x45\x46\x34\xc6\x62\xfe\x99\xb7\xfd\x9a\xea\xa5\xe6\x9d\xf7\x1a\xd5\xbc\xdb\x15\x7d\xd5\x4e\xec\xd6\x7c\xd8\xa5\xac\xda\x1f\x86\x2a\xc6\x35\x31\x02\x2c\x4b\x6f\xb9\x5c\x5c\x20\x41\x6c\x51\x74\x7e\x99\xcb\x11\xe7\x6c\xe1\x2a\xbb\x16\xe0\x1b\xb1\x6a\x2e\xc5\x7c\x4d\xa2\x22\xf0\x7a\x40\x2b\x2c\x57\xda\x35\x9b\x4e\x19\xc8\x61\x1d\xc0\x5a\x3e\x5f\x63\x62\xe0\xbb\x62\xeb\xd8\x14\x5b\x6d\xdc\xc8\x9e\x09\x35\x3f\x35\xff\x6a\xf9\xca\x30\x2b\x59\xfd\xcb\x22\xc0\x26\x5a\xc5\xdf\xc2\x87\x01\xaf\x5a\xc6\xc8\x52\xc2\x1c\x9f\x98\x71\x29\x4e\x02\x1a\x1f\xb3\x12\xec\xbc\x65\x2d\xe1\xdf\xbf\x34\x78\x2f\x56\x1e\x1f\x8d\xfd\xfa\x0a\x45\x65\x64\x92\x6c\x63\x05\xb0\x67\xe4\x2b\xf5\xa1\xd6\x82\x56\xcb\xdf\x38\xbf\x8a\x42\xd1\xf6\xc4\x83\x38\x06\x72\x4f\x5c\x1f\x42\x78\x9a\x20\x1a\xc4\xe4\xf3\x07\xa7\x20\xa7\x7a\x92\xc1\x93\x3e\xee\xd6\x72\x7a\xa4\xfe\xf7\xac\x24\xc8\xf2\x27\xb0\x78\x55\xf7\x73\x5c\x14\x4a\xf2\xf7\x41\x0c\xfd\xe1\xa0\xed\x1d\x32\x8f\xbf\xd1\x9f\x9c\x29\x2b\x36\x22\x3d\x38\x8d\x1b\xef\x40\xa6\x47\x5d\xff\x3c\xe5\x71\x42\x93\x84\x4a\x0c\x41\x6c\xa1\x3e\x0b\xe7\x43\x8d\x10\x9f\xb4\x94\xbf\xf4\xf9\x27\xff\xa1\x29\x21\x59\x9f\x91\xaf\x3f\x8c\x3f\xd7\x23\xec\x08\xe5\x51\x56\xdb\x16\x66\xc4\xa3\xf6\x43\x72\xa9\xe4\x90\x21\x3a\xfd\x0c\x7d\x34\xc6\x7f\xf4\x1c\xb5\xf8\x32\x67\x7c\x93\x4b\x70\xb3\x5e\xb5\x84\x36\xba\xa0\x5b\x7c\x53\xfc\xf4\x7f\x06\xb8\xc1\x6d\x52\x23\xda\x59\xed\x85\xc5\xad\x1d\xde\xe5\x1f\x73\x80\x3f\xd7\x6a\x80\xba\xca\x5f\xca\x39\xd4\x87\xbf\x55\x27\x9a\xfb\x63\x2f\xad\x94\xcd\x8a\x30\x8c\x68\x0a\xc6\x5e\x34\x16\xe0\x93\x79\xd8\x49\xf0\xf5\x07\xc7\x07\xf6\xf8\x66\xd7\xaf\x96\x78\xf8\xea\xb4\xc4\xd3\x65\x91\x46\x78\x76\xee\x9f\xbc\xd8\x34\x1a\xa0\xb6\x00\x39\x51\xb5\xeb\x49\xa1\xd0\x1d\x31\x7d\x0c\xb2\x06\xf4\xdd\x10\xb5\x24\x73\x16\x1f\x71\xd2\x92\xf7\xac\xa2\xa1\xff\xd2\x96\xe5\x67\xbc\x7d\xc9\x47\x9c\x04\xd3\x30\xba\xdb\x63\xe8\x7a\x81\x3c\xb7\xca\x44\xc3\xb4\x49\x2d\xe9\xfa\x1c\xab\x35\x5a\x6a\x9c\xee\x97\x3c\xad\x81\x25\xc8\x1a\xd1\x3f\x8e\x25\x1f\x6b\x72\x68\x91\x0e\x2f\x9f\x7f\x4b\x4a\xbe\xde\xdb\x13\xf2\xb2\x28\xa1\x76\x6b\xab\xcb\xf2\x76\x0d\x95\x42\x2b\xf4\xa5\x29\x7c\x12\x07\x54\x07\xf6\x78\xfb\xec\xc9\xc7\xca\x42\xf0\xf0\xe5\x7c\x16\x16\xa2\x2c\xd9\x59\xdd\xae\x41\x2d\x57\x5d\x2d\x8e\xcd\x34\x4c\xcd\x8d\x5b\xf9\x6c\x7f\xab\x11\xec\x54\x17\xcf\xbe\x55\xb3\xa5\x05\xe5\xb4\x21\x53\x3f\xd7\x8b\x93\xb4\xeb\x73\x6d\xfe\x89\xf6\x4b\xef\xea\xe5\x5b\x3e\x04\xb2\x1c\xd7\x6e\xc7\xba\x15\x1a\x2e\x6f\x5e\x72\x2a\x30\x19\xf0\x2e\x7f\xd1\xd4\x4a\xbd\xca\x62\xa1\x23\xa3\xe2\x49\x6d\x9a\x7e\x15\xb5\x1e\x6d\xfe\x66\x8e\xa1\x5e\x26\xf0\xb8\x6a\xb4\xba\x03\xdd\x0a\x4d\x72\xe5\x42\xd8\xda\x7d\x97\xa2\x42\xe6\xd0\x7d\x92\xd9\x53\xd9\x06\xf2\xe0\xf1\xd0\x86\xec\x56\x21\xa3\x70\xb3\x52\xbd\xbd\xab\xdd\x25\xec\x6a\x5a\xc5\xe0\xd3\x9f\x6f\xad\x12\xdf\x41\xd8\xcd\xc0\xd7\x3b\xfd\xef\xb2\x9d\x1c\xd7\x36\xf9\x0c\x91\x58\x3f\x04\x20\x18\xe7\x63\x03\xfb\xf5\x38\x5f\x78\xf9\x71\x03\x41\xf6\xe5\xbb\xf6\xa1\x0d\xbe\xf6\xa4\xbb\xc3\xae\xdd\x15\x98\x02\x2d\x90\x9d\xf1\x3a\xde\x7e\xb7\x16\xb1\x05\xac\x79\xf3\x43\x70\xd7\xa1\x27\xd0\xe1\x3a\x3b\xea\xa8\xb5\x5f\x18\xb0\xfc\xa9\x04\x12\x17\xdd\xc3\xd5\x3a\x7e\x33\xc6\xe5\x97\x72\xf1\xeb\x7c\x99\xb9\xed\xeb\xb4\x85\xf6\x45\x03\x08\xd7\xe9\xbb\x47\x05\x1e\x16\x68\x67\xb4\xaf\x8a\x7b\x1c\x38\x16\x81\x32\x65\xa7\x12\x9a\xa0\x8e\xab\x18\xc6\x26\x8c\xeb\x37\x1b\xef\x16\x78\x64\x53\x80\xb6\x55\x0b\xd3\xe4\x72\x8d\x16\xa6\xc7\xda\xa1\x05\xbb\x86\xb6\x85\xa5\x58\xc2\x05\xcd\xde\xf4\x34\x5d\x0b\x5b\xb4\xa4\xa6\xee\x13\x34\x87\xe1\x3b\x0f\x7e\x9b\xcd\xeb\x5a\xd8\x6c\x7f\x87\x40\xc6\xe5\x78\xd4\xc2\x10\x24\xb6\xf0\xe7\x7a\x02\x23\x2d\xde\xe3\x6a\x82\x16\x0e\x17\x8f\x00\x5b\x4e\xfe\x89\x01\x64\x11\xf9\xe5\x00\x58\xbc\xb0\x43\x9a\xd9\x82\x8d\x56\x2d\x9c\x36\x44\x29\x34\xbe\xd5\x52\x5d\xdb\x03\x59\x22\x13\x2c\xb6\x21\x58\x6c\x7e\x90\xa9\xc5\x15\x7a\x53\x40\x8e\x10\x2d\x6e\x2d\x62\x7d\xde\xa2\x4e\xca\xda\xd8\x9f\xdf\x6c\xca\xda\x86\xde\xab\xc5\xdd\x76\x28\xb6\xc7\x95\x27\x2d\x8e\x7b\x03\xda\xf3\x82\x13\x10\xd1\x38\x9b\x29\xda\x16\xf7\x64\x7e\xbc\x68\x0d\x88\xb5\x1c\xc6\xdd\xfd\x92\x71\x6c\xcb\xd8\x46\x0e\xb6\x1c\x22\xe4\x07\x49\x29\xe3\x52\x5c\xa8\xd7\x62\x79\x33\x3f\x01\xf6\xc0\x62\x79\xe7\x53\xd3\xd9\x05\x2f\x82\x9c\xb5\x40\x67\x90\xf4\x14\x08\x91\x71\x1b\xc3\x87\x12\xd3\xa8\xb8\x4b\xd4\x04\x8e\x0a\x95\x4f\x9a\xae\x51\x13\x99\x52\x7b\x1e\x67\xa0\x9e\xc1\xe7\x6c\xd8\x7d\x32\xf8\xd4\xf8\xa6\x90\x14\x26\x72\xbd\x18\x35\x2d\x83\xcd\xf9\x27\x03\x97\x6f\x37\x13\xc0\xb5\x58\x33\xc1\x6f\xa8\xde\x44\xba\x30\x68\x5e\x9f\xf4\xb6\xd7\x2f\xbd\xfd\xd9\x02\xb2\x3f\x29\xe6\x64\xbe\xa5\x29\xf8\x1b\xef\x9a\xd1\x96\xa6\x9a\x3e\xd6\xde\x69\xaa\xf9\x11\xa7\x5e\x5c\xc0\x12\x1b\xe1\x46\x7e\xdd\xc4\x6f\x4b\x8b\x9d\x84\x6f\xc3\x30\x6c\x4b\x7e\xa6\xba\xc9\x08\xe2\x2d\x90\xa0\xc9\x32\x1e\x0f\xb5\x96\x12\xf6\x84\x1e\xf1\x6d\xfb\x77\x4b\x79\xf3\x84\xd9\x1b\x11\xd0\x52\xd9\x69\xaf\x96\x64\xf4\x75\xc0\x56\x10\xc8\xef\x52\x4b\xdc\x8c\xdb\x92\xaf\xe4\x5b\x2a\x97\xa7\x3f\xe5\xf3\xa4\xc9\x6c\xf5\xc2\x9b\x7a\xf1\x55\x7e\xdc\xd3\x2b\xd0\xbb\x10\xac\xe3\xbb\xaf\x3d\x0c\x3b\x48\xd1\xe4\x03\x6c\xe8\x32\xf6\xe3\x94\x0a\x09\x7b\x24\x95\x31\xea\x5f\x3f\x53\xdc\xb4\x71\xaf\x75\x1b\x97\x5a\xb7\xc7\x8d\xd6\x2d\x55\xdb\x4f\x03\x68\xd6\x7b\x84\x78\xbc\x1d\x4a\x59\xea\x92\xf2\x23\xbb\xc7\xb5\x5f\x4e\x59\x6b\xb7\xf1\x12\xa7\x96\x66\xba\xce\xe9\x6b\x76\x94\x5b\xb2\xab\x09\x87\x61\xe7\xc6\x9b\xed\xe0\x5a\xf5\x81\xbf\x86\xc7\xb9\xb8\x66\xf7\xfe\x34\x35\xfa\x26\x8e\xf3\xe1\xd7\xbc\xa1\x1f\xd0\x0f\xd0\xb9\x2a\x65\x7c\xb7\x89\x86\x14\x5b\xde\xc6\x82\x57\x89\xc6\xe4\x97\x31\xdf\x68\x16\x1e\xc8\x3b\x65\xde\x2e\x13\x9d\x2b\x1e\x03\x79\xde\x2e\xdf\x45\xd4\xf2\xc7\x7a\x43\x7e\x0c\x78\xd9\xfc\xec\x29\xb9\xdc\x07\xe8\xe4\x2e\xe0\x46\xdd\x61\xcb\x77\xe0\x54\xa2\x5d\x28\x3c\xeb\xa5\xc4\xd7\x88\x45\x3f\x49\xd7\xf6\x18\xfa\x61\x4b\x48\x37\xf8\x28\x66\x11\xf8\x29\xeb\xbe\xb0\xec\x76\xfb\xed\x63\xa3\x43\x1f\x52\xa1\x1e\x3c\xd4\xc2\x38\x1d\xef\xc1\x96\x55\xdd\xb4\xae\xdd\x84\x3e\xdd\x25\x3b\x3d\x24\xd8\xac\x33\x6f\x10\x4e\x35\x82\x1f\x77\xf5\x53\x24\x68\x77\xbf\xdd\x58\xfd\x18\xd8\x2c\xc1\x10\x39\xf7\x60\x09\x3c\xfa\x6e\xf9\xec\x15\x07\x11\x7a\x28\x6f\x2b\x9f\x9d\x6d\xed\xc1\xa5\x2d\x02\x2d\xf4\x63\x3c\x8a\x71\x2d\xc7\x88\x76\xb8\x9f\x47\x2b\x43\x3f\x45\xca\xe2\xdc\x70\x7c\xde\xd2\x4d\x9c\xd0\x87\x36\xb3\x9b\xbc\xb5\x0f\x0d\x66\x7f\xd8\xe3\xeb\x7e\x2c\x1a\xe8\x11\xc1\xf2\xaf\xfe\x28\x6a\x2c\x7e\x89\x12\x28\xcd\xdf\xc4\xf9\x3d\x34\x77\x8b\xb3\x6f\x9e\xbc\x8d\xf6\x6c\x06\x7e\x19\x76\x53\xfe\xd8\xe3\x78\x3c\xf1\xf1\x7c\xfc\x68\x45\x8f\xc1\x83\x8f\xec\xd0\xf3\x8b\x36\xe9\x02\xb2\xc4\x25\x71\xc2\x20\xf8\x36\xd7\x83\x5d\x25\xd5\x23\x17\x8d\x02\x2c\x58\x69\xeb\xca\xb6\x09\xb4\x47\x2f\xa7\x99\x4d\xe8\x31\x2d\xde\xae\x82\x19\xee\x86\x55\x00\xeb\xf0\xad\x5a\x94\x6d\xb2\xc2\x01\xcd\x0e\x2d\x95\x5b\x25\xea\x66\x93\xa8\x9b\x01\x00\x6e\xb6\xe9\xd1\xce\x7c\x10\xf1\x15\xee\x51\x43\xed\xbd\x58\x63\xe4\x6a\xbb\xaf\x91\xf7\x9c\xf7\x75\x04\x3f\x8c\x99\x08\x71\x72\xc6\xd1\xdd\x6e\x51\x77\x1b\x45\x82\xaa\xba\xc5\x58\x9a\x75\x74\x45\xc5\xf1\xd0\x03\x93\x7a\x86\x38\xe3\xb3\x3a\x9f\x1a\xcd\x75\x8f\x7d\xc0\xd1\xd1\xd7\xec\xc2\x89\x6e\x02\x9b\x9e\xcc\xda\x72\x4f\x66\x8b\xab\x3f\x4c\x3b\x01\xa3\xe5\xd3\xbf\x68\xef\xaa\x40\xf5\xdb\x34\x3e\x8f\x39\xf7\xa1\xe4\xf1\x95\x72\x77\x6b\x22\xdd\xd5\x3d\xdd\x4e\xbb\x08\x70\x2f\xe5\xb8\x8f\x9c\x39\xc1\x16\xe0\x25\xdb\x59\x18\xea\x77\xba\x6b\x05\xfb\x38\xdb\xda\x5d\x2b\x28\x68\x24\xf5\xba\xef\xba\x95\xb5\xf3\xd4\x40\xf7\x8b\x56\x3a\x57\xbe\x3d\x9d\x4a\x5a\xd3\xa5\xd3\xde\xf6\x64\x02\x96\xb1\x7e\xef\xa9\xae\x73\x09\xdd\x99\x28\x69\x45\x50\x6a\x27\x1e\x0f\x37\x8d\x37\x29\x0d\xe5\xae\xe0\x35\x6e\xe6\xbd\xba\x41\x53\xa1\x1e\x67\xcf\x94\xcc\x99\x11\x77\x93\xdf\x75\xdf\xed\x2e\x08\xd5\xcc\x36\x94\xe5\x4f\xe0\x11\x58\x40\x7b\x9c\xd9\xce\x83\x76\x1d\x9e\xb3\x8c\xe6\x96\xe4\x31\xb2\x67\x1b\x4c\x73\x9e\x0d\xd0\xf5\xcb\x1b\x7a\xf6\x5b\xe4\x04\x5a\xb0\x3d\xa4\x5c\x7e\x9e\x19\x2b\xa5\x59\x97\x6d\x36\xf4\xa1\xab\xa5\xb1\xed\x2a\x3d\x97\x73\xb5\x47\xa6\xd8\xb9\x0e\x6b\x60\x46\x78\x10\x87\x42\xdf\x26\xd9\x71\x02\x87\xc1\x25\x98\x2c\xac\x17\x3b\xfc\xdd\x87\xf4\xb4\xfb\x6d\x39\x7d\x5c\x92\x03\xb8\x99\xaf\x77\x82\x92\xcc\x04\x47\xd7\x63\xab\xd6\x0c\x63\x7d\xd3\xfd\xa4\xb4\x20\x35\x35\xd2\x5d\xdb\x0b\x64\x85\x31\x1d\x75\xe7\x49\x94\x3b\x4c\xeb\xf3\x20\xef\x1d\xed\x93\x08\xa4\x5c\x6f\x37\xc3\x76\x0f\x2b\x6c\x77\x76\x79\xdf\x37\xd2\xae\xf1\xf1\x56\x33\x04\x0f\xf9\xcb\x81\x1b\x6f\xe5\xbd\x38\x56\x98\x08\x3b\x3e\xf9\xac\xaf\xeb\x38\x62\xd1\x7f\xa3\xd1\x83\x8e\x23\x49\xe7\xd2\x53\xbc\x70\x1b\xe2\x95\x6c\x0b\x9d\x63\x74\xd6\x03\x07\x15\xe1\x7a\x83\x1d\x95\x29\x2b\x54\xd9\x87\xc9\xeb\x0e\xfd\xb8\x15\x9d\x22\x16\x18\x00\x57\x60\xda\xc7\x3f\x84\x8c\xb8\x42\xfa\x06\x04\x21\x86\x20\x59\x28\x29\x4c\x09\xfb\xbd\x69\x52\x65\x07\x41\x12\xc5\x48\x10\x22\xe9\x86\x87\x32\x45\x2c\x6c\x5e\x7a\x74\xa6\xc4\x19\x4b\x71\x71\x77\xa2\x34\x67\x71\x60\xdf\xb3\xc4\xaa\x8b\x14\x00\xf7\xc9\x49\xf7\x71\xec\x0c\x5a\x8b\x03\xd6\x46\x20\xce\x1a\x92\x52\xe7\xde\x60\x11\x92\x02\x2c\xe5\x97\xa6\xbc\xdd\x1a\xce\x4b\x09\x4a\xda\x7d\x62\x5e\xd2\x9e\x97\xb8\xeb\x42\xa5\x70\x7a\x5c\xd8\x49\x4a\x9e\x56\x79\x33\x25\xe8\x11\x4b\xa0\xc6\x93\x19\xb7\x36\x68\xfe\xb0\xf8\xf9\xc8\x4c\x70\xe4\x99\xb1\x8e\x7b\xd1\xba\x9f\x90\xfc\x01\xa0\x9c\xb2\xc6\x9e\x74\x79\x03\x8c\xd2\xa9\xdd\x8d\x97\x09\xdd\x30\x2a\x51\xcc\x26\x8b\xed\xf3\x7c\x5d\x67\xbd\xb4\x91\x75\x09\x76\x5e\xff\x70\x12\x0b\xb3\x0d\x17\xbb\x61\xe3\xb4\x2e\x08\xa0\xac\x15\x17\xab\x8b\xa7\xe0\xed\x21\x76\xab\xda\x3f\xe5\xc9\xab\x70\x88\x48\xf2\x19\x52\x38\x41\x5a\x08\x41\x9a\xa4\x69\xfc\x5f\x1a\x72\x15\x97\x87\x31\x04\x6e\xba\x4e\x32\x91\x1d\x05\x76\x10\xd7\x81\x25\x50\xca\x3b\xb8\x52\x76\xb7\x11\x24\x36\x8f\x51\xf0\xa7\xa1\xeb\xa7\x64\xcf\x70\x2e\xf7\x0b\x32\x3e\x29\x90\x09\xfb\x5a\x98\xf3\x29\xf9\x2c\xe1\x9d\xf7\x59\x5e\x3f\xc1\x1b\xfe\xad\x50\x4b\xa6\x9a\xa2\x85\xa5\xe4\xcf\x4b\xa5\x82\xf8\x2f\xea\x9c\x92\x65\xda\xf1\xb7\x6c\x5e\x9b\x2d\x40\x49\xd1\xc2\x16\xa5\x49\xbd\xc0\x1b\x3a\x44\x0b\xdb\xa2\x64\xd2\x32\x6f\x69\x7e\x51\x84\xa8\x85\xc5\x2e\x07\xb8\xb4\x3b\xec\xd0\xbc\x6f\xf4\x46\x17\x35\xba\xa0\x91\x62\x46\x38\x6c\xbc\xad\xa1\x5a\x5b\x53\x3e\x8d\x3c\x1a\x19\x7f\xde\xaa\x5d\x6f\xe1\x73\x24\x2d\xde\x1e\x66\x77\x95\xfb\x1e\x66\x02\x58\x78\x5f\x1d\x55\x8d\x88\xf4\xbb\xe5\xb8\xcb\xa4\x04\xfe\x09\xba\xbf\x3f\xd2\xcd\x16\x76\x8c\x46\x2d\x1c\xa8\xf6\x91\x6d\x05\xaf\xa2\xcd\x7f\x48\x79\xa8\xb5\x23\x05\xc8\x0f\x62\x4f\x72\x38\x72\x61\xfd\x0f\xab\xff\xa1\x2d\x77\xe4\xeb\xc9\xee\x1a\xfc\x2e\x67\x78\xd9\xf1\x1a\x23\x56\x43\xdf\x87\xb7\x70\xa3\x4c\xd5\x24\xaa\x70\xb9\xb6\x26\x6e\x1a\x3a\x45\x7b\x64\x8a\x33\xaa\x86\x71\x06\x32\x02\xc5\xa7\x46\x20\x4d\x81\x2c\x60\x25\x47\x0c\x05\x02\xb0\x6e\x9f\x08\x8d\x5b\xde\xb4\xae\x25\xe5\x72\x21\x9e\xcc\x3c\x50\x50\xf8\x9f\xd6\x59\xce\xc8\xe6\x39\xb3\xde\xd5\x4e\x11\x94\x78\xcc\x7a\xe3\x64\x46\xbc\x9c\xf6\x35\xbd\x13\xbb\xdd\x99\x3f\xb9\x6a\xc0\x19\xf4\x09\x0a\xe0\x53\x45\x5f\x3f\xab\x44\xd4\xa2\xd5\x64\xaf\xa5\x8a\x86\x4d\x1a\xec\xb2\x60\x80\xfb\xd5\xe2\xc4\x3b\x20\x5a\x8c\xaf\x16\x17\xad\x2e\x5c\x6b\x4d\x27\x34\x33\x92\x52\x64\x93\x21\xb7\xb8\x72\x10\x6a\x11\x2b\x71\x71\x18\x5b\xfa\x9b\xd4\x37\x6a\x79\x62\xda\x53\x2c\x74\xa5\xd8\x31\x19\xdf\xb4\x4b\x79\x94\x8b\x3e\xb1\xb8\xc5\x6d\x4b\xda\xbd\x05\x4d\x96\xef\x96\x27\x38\x57\xd5\x4f\x80\x49\xae\x55\x6e\xad\xb7\x31\x4f\x74\x59\x09\x0a\xad\x5b\xdc\xe3\x8e\xa7\xad\x00\x89\x4d\x7e\x61\xc2\x6a\x4b\x62\xa2\x27\x97\x5b\xbb\xd4\x9a\x32\x6b\xc8\xa9\x59\x7c\xe3\xaa\xe5\x81\x80\x9a\x3c\x21\xab\x26\x9f\x6a\xb1\x2b\xa3\xd7\xa2\x7c\xaa\xf5\x42\x85\x6c\x4d\xc1\x5b\xfe\xdf\x95\x3c\x12\xa8\x93\xd5\x73\x69\xf7\x90\x75\xb7\xb8\x5b\xda\x6b\x53\x86\x26\x09\xa2\xe0\x1b\xf7\xb7\xf9\xc0\x17\xcb\x9b\x45\x52\xf9\x37\x5c\x99\xaa\x99\x18\x5c\xdc\xb4\x94\x74\x4a\xf3\x96\x38\xc9\x44\x6a\xc8\xbd\x05\xe1\x79\x16\x3e\x4e\x17\xf3\xfd\x11\x81\x3b\x81\xde\x1c\x4b\x32\xd3\x99\xc0\x5a\x1b\x9b\x37\xaa\x54\x1c\x1f\x24\x17\x90\x17\x85\xfa\x0e\xba\x98\x1c\xa8\x71\x98\xc1\x76\x7f\x8b\xaa\x0f\xb0\x94\x8b\x6d\x0a\xa4\xb1\x28\x56\xa7\x50\x1d\x22\x75\x0c\x05\x84\xc6\xe1\xb4\x5e\xa0\x62\xf6\x81\xaa\xa6\xaa\x56\x7d\x79\xd5\xb6\x2d\xe8\x11\xf6\x87\x87\x11\x8b\x97\x15\xff\x27\xd3\x9d\xa3\x35\x64\x9d\x2b\x1f\xf6\xbc\xcb\x57\xdf\x68\x42\xba\x2a\xb7\x57\x40\xa4\x6f\xea\x59\x49\xa5\x37\x8b\x7e\x4a\x9e\x0c\xd3\x82\xd7\x69\xe5\x4b\x88\x99\x45\x40\xae\x26\xed\x57\x59\x7f\x8b\xbf\x56\x68\x3e\xbe\x24\x1f\x1f\x65\x49\x88\xb1\x8e\x8a\x80\xa7\xbc\xdf\xb1\x76\x24\xa5\x9a\xb2\x48\x96\x28\xe1\xd6\x19\x41\x04\x93\xde\x13\x30\x54\x05\x40\xdb\x2d\x6e\x5c\x30\xcd\x14\x44\x9e\x53\xd4\x62\x0b\xd8\x99\x2e\xea\x5d\xfd\xcd\xc6\x3a\x2a\x1a\xc4\x3d\xcf\x54\xaf\x39\x59\x1a\xa7\x19\x9e\xf7\x9a\x22\x52\x98\x0e\x42\xe1\x6d\xb9\xa9\x06\x02\x78\x8e\x98\x4b\x4a\x91\xa9\x8b\x10\x80\x4e\x0f\x57\x7a\x7d\x8a\x9d\xb1\x63\x97\x0c\x97\x78\xa6\x0f\x8a\x44\x55\x85\x00\xdd\xff\x99\xf7\xba\xbe\xa0\xb7\x60\x8a\x25\x97\x7c\xe6\x97\xab\x32\x60\xab\x1c\x2a\x8c\xc5\x2a\x0f\x7c\x13\xd0\xb5\xba\x6c\x5b\xd0\x67\xab\x93\xab\x09\x80\x2f\x4a\xda\x74\x04\x10\x17\x91\x3f\x6c\xa8\x0f\x2f\x1f\x6a\xc9\xc7\x81\xb4\xeb\x45\x06\x0f\x7d\xc9\x43\x41\xd2\xd2\x1e\x65\xf2\x25\xdf\x63\x85\xcc\xd4\x26\x16\x02\xe8\x83\x32\xec\xf2\x26\xe9\x5e\xed\xa6\xf3\xf7\x60\x80\xd9\xd1\x91\xea\x50\xcd\x02\x60\xc5\xc9\xdb\xe8\x5e\xa6\x70\x31\x75\x0b\xdc\xca\xfc\x04\x2a\x93\xc4\x55\x8d\x62\x96\xeb\xd0\xb9\xb4\x02\x14\xff\xb0\x22\x68\xe1\x74\x69\x23\x2e\xe7\x26\xa9\x2c\xfa\x1e\x50\x91\x23\x80\xd3\xbb\x54\xd2\x3c\xa2\xe9\x83\xb2\x19\x73\x53\x49\x17\xd4\x3b\x4a\x56\x9b\xe7\x41\xe3\x73\x6a\x2e\x2a\xaa\x77\xcd\x8f\x80\x93\x35\x39\xa1\x77\x72\x4d\x90\x02\xfb\xee\x2b\x51\xf9\xf2\x9c\x53\xd2\x98\x39\xf2\xb6\x19\x10\xe6\xc9\x9d\x46\xc0\x67\x7a\x52\xc8\xdb\xe6\x20\x54\x34\x51\xcd\xb4\xbd\x86\xbe\x49\x11\x4b\x7f\x26\xbf\xc1\x0b\x84\x43\xef\xc3\x30\x64\xa4\x48\xeb\xae\x2a\x26\x3e\x55\x55\x31\x91\xa8\xfe\x84\x31\x7e\xa5\x1a\x74\x29\x06\xc4\xce\x53\x03\x97\x8a\x2d\xe9\x89\x11\x24\xb4\x71\x89\x8a\x27\x01\x9b\x8f\xae\x4a\x68\x03\x50\x05\xf5\x50\x40\x11\xb2\xb6\xb5\x44\x99\xa2\x25\xb6\xca\xd0\x4c\x29\xd6\x57\x47\xb5\x52\x08\xbf\x58\x82\x16\x26\x3a\x1c\x32\x1a\x76\x57\xc2\x0f\x19\x4b\xcb\x4e\x95\xb9\x90\x60\xc3\x36\x79\xc3\x7f\xd5\x22\x1b\x00\x06\x3a\x2a\xac\x5a\xfa\xa6\xc8\x46\xfd\x26\x03\xd6\xba\xda\xbb\xa0\xa9\x9a\xe0\x1a\x53\x3b\xac\x4f\xcd\x15\xc6\x99\xa1\xc4\x6a\x59\xfb\x43\x8e\xf5\xac\x39\x57\xf1\x59\x92\xc4\x86\x6a\x0b\x0e\xa6\x32\xd9\x47\x59\x8d\x4f\x4d\x17\xf5\x5c\x4d\x37\xe2\x35\x5d\xa2\x99\xca\xcb\x15\x5e\x8c\x4a\x15\x97\x02\x9e\x94\x78\x12\x28\xae\x2c\x63\x95\x55\x1a\xb3\xcb\xa1\x12\x73\x28\xfd\x8f\x98\xe5\xa2\xa6\xac\xe5\xad\x06\xe5\x2c\xdd\x46\x9f\x1f\x75\x67\xa6\x39\x53\xd7\x83\x6c\xa6\xe0\x0a\xb4\x87\xbe\x0c\x77\xb5\x6a\x12\x5d\x79\x41\x2a\xb0\x03\x70\xde\x9d\xf3\x9c\x33\x47\x15\xd7\xa8\x09\x42\x3d\x6c\x12\x00\x80\x91\x36\x3f\x3e\xf8\x99\xd3\x99\xcc\x13\x63\x02\x58\x1f\xd6\x06\x47\x67\xe1\x81\xa3\xb3\x3f\xf0\x53\x1f\x55\xb5\x85\xdd\x10\x1b\x9a\x1a\xb8\x07\x31\xda\x57\x15\x72\x50\xc7\xcd\xaf\x87\x56\x8e\x50\xaa\x73\x6d\x87\xad\x5a\xaf\x4d\xa7\x16\x7a\xf9\x87\x66\xee\xca\x3b\x55\xd7\xf5\x30\xfd\xc8\x77\x4e\xdd\xb3\x02\xdc\x2f\xd3\xe1\xb9\xb6\xae\x87\x7f\xf2\xa3\xdd\x56\x20\x89\xc5\xcf\x97\x00\x93\x88\xf6\xa0\xe6\x93\xc5\xdd\x10\x87\x8f\xb8\x07\x95\xa9\x8b\x8b\x09\x6d\xb7\x8d\xd9\x3d\xa4\xb3\x4e\x19\xaf\x3c\xb0\xba\xd8\xc0\xc9\xa4\xaa\xbd\x13\xd7\x3d\x70\x13\x6d\xe7\x11\xc9\x8e\x55\x39\xd2\x6d\xc8\x75\xab\x5f\x16\xf5\xf3\x86\xc7\x2e\xbf\x69\x0d\xfb\x04\x8a\x22\x60\x41\x28\xc1\x3e\x33\xfa\x1e\x11\xae\x8d\xb2\xb3\x4d\xf6\x5d\xc9\xdd\x48\xa6\xdd\xb5\xa6\x9c\xf2\x53\x1b\x88\xa3\xd9\xe5\xff\x70\x36\x89\xd7\xfe\x8a\xc3\x28\x45\x39\x17\x72\x2e\xe6\xcd\xec\xcb\x07\x7f\xca\xb7\x7c\xea\x6a\xe1\xae\x05\x14\x9c\xb2\xc7\xaf\xe4\x57\x8d\xa1\x95\xa5\x54\x8f\x22\x35\xc2\xf3\xa2\x10\x00\xfa\x13\xcb\xf9\x5c\x95\x83\xb8\xe0\x20\x6b\xda\x1e\xce\x83\xde\x87\x79\x1f\x5a\xa8\xf3\x40\xb0\x15\x86\x5a\x45\x00\xe3\x58\xb5\x79\xa8\x4f\x04\x60\x50\x95\xa5\x47\xd9\xa3\x42\x99\x94\x5f\x45\xb1\x32\xaf\x5e\xac\xea\x7d\x4d\x90\xda\xe6\x22\x5e\x1c\x2c\xe6\x79\x94\x9c\xff\x29\x54\x21\x2c\x20\xe4\xed\xd4\x54\xaa\x9e\x12\xac\xaf\x45\xb2\x42\xc6\x0d\x0c\x9a\x95\xbc\x45\xe6\xd9\xb4\xf2\x8d\x75\x6f\x92\xfe\x37\x0a\xb3\x5f\x0d\xf9\x65\xc8\x2f\x13\xfc\x4a\x8c\xfb\x5f\x60\xaf\xba\x97\x4c\x40\xce\xaa\xe0\x14\x17\x65\x8a\xe1\x07\x7f\xab\xda\xd3\x12\x88\x06\x88\xe1\x67\x43\x06\x0a\x24\x0b\x41\xf7\x4b\x35\xa0\x0c\x02\xd2\x30\xa8\x45\x5d\x17\xaa\x40\xb3\x34\xa5\xa8\xa9\x44\xd5\x2d\x74\x35\x75\x49\x78\x40\x02\x3c\x11\xca\x1d\x75\x22\x38\x54\xa7\x82\xd8\xc8\x50\xa1\xba\x02\x75\xa8\x4f\x89\xb4\xb0\x82\x3c\xbe\x10\x7c\x2c\x4a\xb0\x11\xa0\x6c\x85\xaa\x15\xe5\x12\x17\xe5\x7a\xbf\x85\xc7\x9b\x45\x7a\x6b\x13\xab\x06\xb6\x47\x98\x09\x87\x63\xfe\x8b\x26\x17\x17\xc9\xe7\x45\x92\x4b\x50\x9c\x35\x28\xce\x0c\x8a\x33\x82\xb4\x45\xe3\xc1\xd0\xc3\x42\x0f\xad\x51\x3c\x10\x8c\x30\x04\x98\x5e\xd7\x15\xb8\x0a\x34\xb9\x22\x8b\x27\x2f\x5b\x4c\x05\x51\xd8\x97\xa9\xe0\xa5\x6b\x7e\x1c\x61\xe3\x36\x9b\xcf\xf6\xd6\x66\xd9\xb6\x59\x15\x37\x3d\x16\x3c\x84\xb3\xaa\x72\x43\x75\xbb\x5a\x46\x5e\xa8\x60\x8a\x5f\xba\x90\xfe\x0a\xde\x92\xfa\x69\xb7\x23\x40\x7c\x09\xaf\xf6\x68\xb8\x0f\x15\x0a\xe2\x02\x47\xb9\xd7\x8a\xc7\xbf\xda\xe7\x61\xf5\xef\xc3\xca\x6b\x0f\x00\x6e\x71\x36\x3e\x88\x35\xa8\x8a\xaa\xaf\xa1\xfc\xd3\x3a\xad\x38\x51\xa8\xae\xf9\x60\x95\x0b\xd7\x7d\xbe\x9a\x07\x00\xf2\x88\xf1\x2b\xac\x23\x36\x63\x40\x53\x6d\x71\xef\x88\x80\x9b\x59\x9a\x8a\x1a\x0a\x6a\x30\xa1\xd0\x49\xc0\x7e\xc3\xc1\xff\x61\x09\x4e\xae\x0d\xa8\x6f\xd6\xea\x03\x23\x5e\x8d\xfa\xff\x8e\x5b\x7d\x51\x01\x0d\xe7\xdc\x42\xd3\x30\x6d\x99\x54\xd5\xb8\x25\x54\xd0\xfa\xbf\x46\x3d\x81\x08\xe2\x13\x51\x2c\xd3\x4f\x0b\xd2\x49\x46\x5f\xb3\xb5\x53\xc6\x72\x82\x8a\xeb\x8e\xe3\x89\x52\xcb\x34\x47\xfc\x15\xfc\xd3\xf0\x2c\x60\x15\x07\xf9\xa7\x39\x77\x29\xb1\xeb\xb5\x81\xd0\x04\x0a\x10\x17\x8a\x6e\xe8\xb6\x95\xf1\xbf\xa8\xa3\x8b\x02\x44\xa1\x0a\x9c\x0a\xf0\x9e\x96\x85\x51\x00\x10\x45\x3f\xe4\x69\x21\x93\x85\x09\x36\x29\x94\x7e\xd2\x13\xd3\x58\x0a\xea\xcc\xa9\x31\x37\x7d\xb9\x69\xcb\xc5\xcd\xfd\x86\x7b\xa3\x7f\x26\x64\xb0\xcf\xef\x2d\xf7\x5d\x91\x76\x78\x41\xaa\x45\xa3\xee\x5c\x1c\xcd\x6b\xb7\x4a\xee\x33\x67\x54\x0a\x95\x13\x3b\x78\xda\xe7\x92\xd1\x9c\xfb\xac\x86\x49\x04\x71\x2c\x4a\xfb\xac\xaf\x07\x54\xf0\xdd\x16\xba\xd4\xc4\xab\x4d\x12\xd2\xac\xf2\xce\xac\x2d\x67\x7d\x14\xd4\xd2\x9b\x8e\xde\xd4\xf2\x1d\x86\x94\x99\xa2\x52\x7a\x46\xa8\xe9\xfc\x6b\x07\xa8\xc3\x07\x09\x94\xa7\x7a\xea\x91\x58\x43\xe4\x8f\xc3\x3b\xf4\xfb\xf2\xcf\x32\x96\x08\x63\xc1\x3d\x21\xe6\x39\x53\x7a\x09\xfd\x7f\xc7\x36\x2f\xf9\x2f\xf8\x07\x4f\xdd\x07\xd0\xd5\xaa\x43\x4f\xfc\xf0\x27\xfb\xf0\xa7\x93\xef\x4e\xc2\x97\x9f\x9b\x05\x74\x7f\x3f\x22\x02\x20\x26\x77\x0d\x01\x48\xd4\xc7\x1e\x82\x9e\x38\x00\xe8\xc9\x2c\xa8\xf4\x35\x75\xb5\xc4\x95\x69\x65\x04\xc5\xb2\x89\xd9\x7e\x39\x72\xa5\x2f\xb6\x75\xf4\x8c\x7d\x63\x3d\xd3\xa6\x31\xc0\x2d\x4e\x5c\xb2\xcc\x2c\x32\xc6\xff\x1c\x9d\xd6\x09\x4a\xe6\x8b\x98\xf5\xea\x41\x71\x35\x83\xbc\xfd\x2b\xe1\x23\x6f\xa6\x6d\x26\xd0\xed\x03\x28\x2e\x37\x12\x74\x3d\x58\x3a\xf6\x11\x8c\x5d\x04\x8a\x18\x7b\x97\x21\x51\x37\x15\x70\x4b\x01\x9c\x1d\x0e\x2a\x0c\x57\x2a\x9c\x33\x07\xfe\x9c\xe7\xf3\x86\x23\x1d\x11\x00\x24\x8c\xdf\xc0\x55\x12\xf6\x78\x35\xc7\xfc\x25\xaf\xaf\xf1\x92\xf1\x32\x17\x66\x51\x2c\x0b\x9b\x75\xe6\x02\x96\xdc\xc7\x00\x30\x07\xf5\x41\x11\xcb\x8f\xc5\xf3\xbd\x0c\x82\x31\x13\xe4\x2e\x06\xb8\x3a\x34\x65\xce\x4f\x73\xf9\x58\xb2\x8f\xa5\xf9\x20\xa6\x4e\x38\xc4\xb5\x08\x36\x8d\xc8\xe5\xe4\x3f\x0a\x7a\xae\xe9\xd0\xe6\x04\xb4\xd8\x5a\xf8\xba\xea\xbf\xf9\xd6\xb5\xaf\x49\xcb\x8f\x59\x0f\xf7\x3f\xc0\xd5\x38\x25\xa4\xaa\x72\xd0\x5e\xc2\x11\x8a\x0e\x22\x25\x1c\x8e\x74\xdf\x00\x00\x93\xc4\xff\x40\x4d\x1d\xa7\x1f\x8d\x48\xe5\x7e\xd7\x57\x91\xef\x61\xf1\x61\xb2\x8c\x71\xb2\x70\xa0\x7c\x6c\x95\x20\x26\x7b\x1c\xaa\xd1\x44\xfb\x8f\x27\xda\x31\x19\x29\x59\x1e\xac\x6d\x97\xe8\x25\x4b\xe5\xaf\xf9\xd5\xaf\x52\xbf\x50\x46\xf5\xcb\x76\xd4\xfc\x06\x98\x16\x50\x37\x4f\x6b\x91\x45\xbd\x12\xc7\x7a\xab\x20\x50\x49\x01\x71\xcf\x53\xb9\xf1\xe9\x11\x3c\xa7\xb0\xec\xd9\xc9\x85\xe6\xe0\x89\x89\xa8\x44\xff\xc5\x1e\xfd\x72\x18\x3e\xd6\xfc\x06\x2c\xa1\x4c\xab\xb8\x4a\xf9\x36\x86\x5f\x08\xb3\x8a\xe3\x63\x4d\x5a\x1a\xe0\xbb\xd2\x1b\x6e\xc2\x8d\x16\x2a\xc7\x17\x02\x95\xc0\x8e\x86\xdf\x7b\x1b\x1c\x07\x96\x78\xf7\xc6\x68\xf9\x58\xc3\x02\xd6\xf7\x96\xcf\x5a\xf2\x27\x54\x0b\xaa\x7a\xb0\x00\xfb\x4b\xee\xd7\x1d\x4a\xc4\x5f\xc1\xff\x59\x5f\x77\xb8\xb6\xf9\x75\x87\x8e\x2b\xb2\xc4\x95\x56\xbd\x63\x28\x5b\x36\x70\x8b\x73\xea\x98\xa5\x48\xfa\x05\x90\x04\x49\xfa\x28\x5f\x31\x79\x11\xee\xc8\x51\xe2\xc6\x24\x8c\xce\xfe\xba\xe3\xf5\x73\xbf\x7c\xdf\xca\x9d\x7f\x22\xb4\xb7\x77\xde\xf4\x7d\x13\x70\xbf\xee\x7c\x21\x94\x7b\x5a\xee\x0a\xc9\x06\x1c\xca\x79\xbe\xba\x1e\x85\x43\xea\xac\xe2\xde\xf8\x13\x9e\xb6\x0f\xe6\x1b\xdf\x25\xa4\x49\x5d\x94\x59\x90\x2c\xf8\xbf\x71\x4f\x75\x0d\xdb\xeb\x1b\xa9\xde\xfc\xc6\x63\xbd\x4b\x0c\xfb\xeb\x1b\xd1\xe1\xbe\x51\x07\xf7\x6f\x64\xcd\x05\xdc\xaf\x6f\xbc\x68\xfc\xf9\x9b\x96\xd7\x37\xed\x13\xe0\xee\x72\x28\xc1\x3f\x37\x1c\x7f\x70\x4f\x42\x32\x15\x32\xcd\xea\x32\x09\x52\x2c\xe9\x1d\x0b\x05\x86\x42\xc2\x13\xcc\x78\x2f\x94\x00\x7c\x92\x08\xa4\xe6\xe9\x38\x24\x46\x99\x20\x2b\xfd\x4a\xa7\x46\x26\x10\x32\x7d\x61\xfd\x51\x1c\x69\xf5\x6f\x86\x0d\x91\x6f\x56\x9d\xd9\x37\x67\x5c\x07\xae\xd1\xf3\xb2\x45\x03\xd9\x90\x55\x20\x3f\x8b\x9f\xf3\x16\xaa\x56\x36\xbb\x3c\xe6\x9b\x4d\x0c\xeb\x88\xbe\x7c\x07\xbe\x99\x25\xf2\xee\x0a\xa8\x2f\x05\x60\x7e\x0f\x48\x46\x07\xc5\xbd\xdf\x7b\xc9\x73\x98\xea\xbd\x01\x3a\xcf\x7b\xd1\xd7\xdc\x1a\xed\xfe\xf0\xcd\xfd\xff\x00\x00\x00\xff\xff\xc5\xb7\x9a\x20\x42\xe8\x06\x00") + +func utilWordsDictAdjectivesTxtBytes() ([]byte, error) { + return bindataRead( + _utilWordsDictAdjectivesTxt, + "util/words/dict/adjectives.txt", + ) +} + +func utilWordsDictAdjectivesTxt() (*asset, error) { + bytes, err := utilWordsDictAdjectivesTxtBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "util/words/dict/adjectives.txt", size: 452674, mode: os.FileMode(420), modTime: time.Unix(1473367638, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _utilWordsDictNounsTxt = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x6c\x5d\xd9\x9a\xb3\x2c\xb3\x3d\xef\xbb\x44\x25\xca\x17\x04\x9b\x21\x69\x73\xf5\xfb\xa9\xb5\xaa\xd0\xbc\xff\x3e\x90\x5a\x85\xcc\x63\x31\x3b\xf7\xe3\x9c\x2f\xc1\xc5\xe4\x6b\xfd\x71\x2e\x86\xf0\xe3\x5c\x59\x5e\xae\x3c\x01\xde\x39\x3e\x7e\xdc\xf4\xe3\x26\x27\xdf\x0c\x85\x30\xd4\xb9\x57\x45\x0d\xb4\x47\xd5\x20\x89\x39\x79\xa1\xfb\x41\xd5\x17\xb0\x69\xc9\xc9\x5f\xa8\x18\xda\x7d\x82\x33\x47\x0b\xb5\xe5\x24\xb0\xf2\x6f\xdd\xfc\xc2\x00\x0a\x36\x73\x35\x20\x1c\xcd\xad\x70\xac\x79\xfb\xd1\x68\xab\x05\x58\x68\xff\xe5\x4e\x3e\x93\x0c\x0b\x2d\x07\xd1\x91\xc8\x21\x76\x93\x9b\x4f\x21\xf4\x69\xf2\x64\xce\xda\xbc\x5b\x04\xe6\x46\x95\xa6\x72\xab\x5b\x90\x98\x4d\x70\xa4\xf8\x57\x70\x2d\x20\xdc\xca\xc0\xbf\x39\xf7\x98\x77\xf1\x43\xdc\x58\xc2\x6c\x86\x00\x61\x64\xc9\xbb\x87\x4e\x9f\x7d\xaa\x04\x66\xa8\xcf\x34\xe3\x67\xbf\xb8\x12\x5c\xba\x70\xdf\x07\x96\x00\xf9\xe8\xa1\xee\xb9\x3e\x05\x94\xe4\xdb\x86\x1f\xa5\xb8\x34\xfb\x81\x4c\x4f\xbd\xf0\xb5\xe2\x5f\xd3\xe4\xf3\xad\xb9\x48\x4a\x9f\x4f\xb5\xfd\x70\x05\xe9\xb0\xf9\x04\x0f\xb7\x5c\x8a\xe7\x2f\x40\x31\x1c\x16\x35\x1c\x16\xe5\x43\x5a\x35\xeb\x82\x6f\xae\xe1\xdf\xea\x82\xf8\x10\x62\x68\xe2\x50\xc8\xab\x4f\xbe\x22\xbb\x80\x59\x9e\x42\x36\xad\x56\xf2\x81\xa8\x84\x52\x42\xb3\x80\xff\xe7\xe7\x36\xca\x85\x30\x97\xb6\x69\xf6\x34\x74\xfb\x88\xf0\x7f\x9d\x61\x95\x20\x44\x37\x0f\xf7\xe2\x0d\x20\xe6\xd1\x75\x09\x47\xf4\x2b\xc3\x1d\xfd\xc1\x32\x17\xbb\x9a\xdc\xb7\x2c\x6a\x5e\x9c\x46\x25\x89\x59\xfe\x03\x84\x3b\x29\x97\xdd\x45\xa4\x3b\xa1\x9a\x05\xd6\xa0\x0a\x43\x6d\x71\x31\xbb\xb2\xb0\x94\xe6\x05\xea\x26\x79\x9d\xc3\xe2\x5d\x17\x10\x43\xdd\x10\x07\x20\xcd\xb8\x1c\x83\x7a\xad\x28\xd4\xfd\xce\xd0\x4c\x94\x08\xe4\xdd\x55\x14\x1f\x80\x0a\x10\x92\xc4\x50\x83\x93\x93\x65\x64\x2e\x61\x0d\xc9\xc2\x4c\x0e\xfa\x7d\x09\xcf\x82\xc0\xf6\x88\x54\x91\xba\x20\x61\x2a\x8e\x79\x5f\xb4\xfa\x16\x57\x19\x2c\x01\x2f\x0f\xf0\xe7\x2a\xe8\x47\x1c\x28\xde\x59\x36\x95\x00\x65\x59\x69\x33\x2c\xab\x46\xae\xe4\x91\xb0\x80\x48\xd8\xd2\x0f\xd3\xeb\x87\x65\x3a\xbe\x59\xf1\x1c\x6a\x75\x06\x68\xb4\xce\x39\x31\x80\x55\x4b\x6f\xf5\x69\x14\x02\xc1\xde\x0f\xc0\x24\x04\x56\x1b\x0d\x71\x15\x60\xfe\x85\xd4\x36\x6f\x40\x2d\xe4\xd8\x9b\xa5\x25\x18\x75\x1d\xf0\x32\xc2\x4c\xa9\x39\xbe\xe8\x7c\x2e\xd3\x55\x2d\xc0\x69\x08\x73\x99\x46\x51\x07\xf3\x70\x73\x60\xca\x80\x65\xad\x06\x54\x87\x8e\x76\xd9\x95\x54\xda\x7d\xbb\x7e\x59\x68\x04\xbe\xae\x70\x82\x55\xcf\x9b\x0b\x6c\x9b\x6b\xf3\x7b\xc8\xbd\x9a\xa9\x26\x69\x40\xfb\xcd\x97\x7a\x87\x97\x53\x2d\x24\x4b\xdc\x46\x47\x8a\xbb\xd5\x56\x65\xaf\x3f\xe6\x8a\x62\x4d\xa2\x8b\x6d\x17\x7b\xf3\x44\xf8\x8b\x09\x37\x67\x7a\xbd\x99\xea\x55\xe3\xd4\xcb\x72\x21\xfd\x2f\x2e\x6b\x01\xee\xa3\xd0\xf7\x02\xbe\xb2\x0e\x76\x96\xe3\x7e\x8b\x60\x6f\x21\xc2\xaf\x6e\xcd\x66\xd7\x66\xb3\x37\xc6\xeb\x25\x5f\x8e\xf2\xeb\xed\x9a\x90\x13\x91\x3a\xc5\xfe\xfc\xe3\x66\x37\x8b\xa7\xb3\x34\xa9\xb3\x5b\xfc\xee\x95\xaa\xae\xdf\xc3\x8c\xe6\xde\xb0\xd8\x26\x1e\xe8\x14\xfa\x5f\xee\x42\xe2\xcc\x58\xcc\x2e\xfa\x63\x13\x2a\xa5\xb1\x79\x45\x79\xf6\xc7\xe6\x22\x1d\x14\x7e\x09\x17\x46\x3b\x0b\xd8\x01\x8e\x44\x97\x8e\xc3\xa3\xbd\x98\x5d\x59\xa8\x53\x82\x53\xc3\x25\xcc\x61\xf1\x44\x0b\x49\x22\x9b\x63\x5e\x91\x63\x8a\x4f\xa2\x63\xcb\x93\x3a\x42\x5f\x7a\xf4\x75\x66\x29\x99\x25\x41\x08\xfc\x62\x5a\x1e\xb5\x74\x9e\x7d\xa4\xea\x8b\x93\x94\x56\xc8\xbc\x36\x26\x17\xc3\x56\xd0\xe7\xd9\xab\xe9\x64\x7f\x53\xeb\xda\x8e\x29\x33\xdc\x00\xa3\xa6\x8e\x36\xaa\xa0\x72\xd6\x2a\x92\xb5\xd0\x01\x0e\x43\xc3\xa9\x03\xcd\x07\x81\x39\xa8\x2e\xab\x1b\xb5\x22\xad\x6e\xdc\xa9\x28\xdc\x3c\xd6\xe6\x0a\x28\x7f\x99\xcf\x25\xf4\x0b\xc3\x74\x70\xf3\xec\x1a\x4a\xed\x2c\xd9\xa2\x61\x14\xd4\x06\x70\x91\x25\xe7\xe2\xbe\xfe\xd1\x5f\xe5\xcc\xbb\xb0\x04\xba\x74\x04\x8d\x4e\x74\x61\x37\xb4\x8f\x68\xc7\xf0\x2f\xae\xff\xf2\x6a\x09\xcc\xe7\xf6\xf3\xa5\x3e\xe7\xe8\x50\x9e\xe6\xbc\x4b\x87\x6a\x06\x8c\x7b\x8d\x4c\x50\x1d\x26\x6a\xde\x0f\x97\x82\xbf\xe1\x5d\xe3\x4c\xae\x5e\xf8\xbc\x98\x18\x66\x3f\x20\xbb\xd2\xc1\xdc\xec\x93\x96\x45\x89\x65\xbd\x40\x4b\xec\x5c\xb4\x94\xe6\xb2\x58\x88\x81\xcc\xb3\x3e\x6f\x7e\x38\x29\x4c\x2f\x17\xac\x74\xaf\xdb\xef\x74\x2f\x7b\x64\xaf\xc2\x07\x5e\x8b\x1c\x71\xbb\x41\x0a\xa3\x64\x43\x5a\x09\x8f\x78\xf3\xbb\xf9\x72\x63\xca\xf8\xc3\x88\x14\xbf\x84\xab\x18\x83\x1b\x06\xfc\xd0\xce\x6e\x1e\x09\x54\xba\x8b\xa4\xc3\x29\x28\x3d\xb6\x7e\xd5\xcf\x8b\xd3\x14\xe9\x3b\x55\xed\xb4\x04\xf6\x78\x19\x27\x73\xe5\x36\x35\x98\xd9\xbd\x38\xb5\x52\x5c\xbb\x4c\x94\x6a\x1d\xcb\x3c\xf7\xca\x40\xf5\xaa\xc9\xd3\xaf\x82\xd8\xab\x5f\x94\xd2\xb9\xda\xf2\x3e\xac\x4a\x56\xe0\xbf\x67\x5b\x27\xee\xb7\xcd\x57\x32\xbf\x9d\xb4\x4c\xcc\x1d\x5f\x96\x1c\x41\x5f\x1c\xf5\xcc\x57\x63\x46\x04\x53\xe2\x03\xec\x35\xe9\x65\x10\x75\x8f\x7e\x02\x64\xf1\xdb\x89\x32\x0f\x26\xab\xf6\x1e\x4c\x2f\x85\x78\xc3\x55\x84\x69\xe5\x9a\x51\x46\xcd\x37\xf7\xc9\xf1\xb2\x19\x1e\x63\x9c\x41\x0e\x11\xf6\x2d\x58\xe3\x48\x88\xc6\xc3\xb7\x40\x63\x79\xd2\x3e\x59\xb0\xe9\x5d\x16\xf2\x65\x21\x6b\x30\x72\x0a\xad\x84\xa8\xcc\xb1\xf9\xe4\x9b\x04\xf2\xe2\x87\x49\x19\x44\x15\xfd\xa3\xc9\x70\x46\x25\x6e\x0f\x29\x4f\x3e\x7d\xbc\x9a\x3e\x23\xa2\x7e\x71\x23\x2a\x67\xfc\x36\x37\x6f\xf9\x66\xce\xdf\x90\x8c\x23\x94\xb1\x54\x39\xe3\xd5\xf0\x90\xd3\xa8\x9d\x71\x97\xb1\x52\x9c\x5d\x99\x42\x42\x3e\x48\x5f\xc9\xac\xdf\x9c\x18\xda\xfc\xbc\x81\xc0\x8b\x2d\xf8\x97\x15\x7a\x60\x18\x79\xa2\x47\xdd\x62\x2e\xdb\xb9\x14\x5a\xce\xd1\x68\x37\x9d\xb4\x14\xf6\xcb\x80\xf9\x18\x1e\x95\xac\xfa\x25\xef\xae\x0d\x70\x69\x85\x99\x85\x4f\xb9\x74\xc1\x51\xc8\x8d\xdf\x2f\xfc\xf9\xfe\x97\x8f\x2d\x44\xf3\x70\xbf\x32\x3d\xcc\x1d\x7d\x3d\x68\xa1\x47\x82\x91\x5b\xe8\xe2\x83\x49\x27\x61\xb9\x17\x30\x70\x74\x62\x19\x05\x8c\x10\xe5\x25\x2c\xea\x98\xd5\xb4\xb0\xe4\x78\x52\x8c\x08\x4b\xbe\x6c\x64\xd3\xeb\x91\x95\x17\x68\xf8\xd2\x23\x13\x3c\x5c\xbd\x3f\x1b\xba\x90\x50\x01\x9f\xf2\xa1\xf3\x7d\xca\xd0\x7d\x7e\xa6\xfc\x8e\x9e\x43\x89\xc1\x68\xa6\x3d\x31\xc1\x30\xa3\xe8\x46\x1f\x6a\xcb\x43\xc6\x81\x20\xb6\xdf\xea\xfe\xce\x5c\x49\x54\x98\x02\x09\xe3\xb2\x39\x3b\x24\x74\x9e\x73\x93\x42\x93\x7d\x72\x37\x8b\x39\x9e\xb0\x29\xd5\x04\xb4\x88\x9f\xb9\xaa\x04\x07\x20\x81\xc9\x52\x60\x17\x04\x28\x77\x75\xb1\xcf\x5b\x00\xad\x68\x3f\x72\xaf\xcd\xe4\x41\x62\x89\x31\x3a\xa8\xdf\xee\x42\x32\xb1\x84\xcc\x68\xd3\x7e\xbb\xaf\x34\x13\xae\xe6\xe9\xb7\x87\x72\x75\x33\xc2\x59\x51\x06\x2e\x04\x55\x07\x93\x86\x47\x8b\xfc\xdb\x03\x45\x5d\x45\xc3\x51\x0a\xbe\x73\xb9\xb5\x6b\x85\x0a\xc4\xe8\xb9\x58\xfb\x55\xac\x44\x94\x51\x24\x4a\x78\x44\xf7\xb2\xdf\x7b\x4e\xd7\x88\x83\x3c\x8c\xe7\x09\xd5\x02\x94\x29\x50\x54\xae\xe5\xef\xf9\x74\x49\x0b\x51\xc9\x4b\x4e\x5a\x0f\x4a\x5e\x4e\x4a\xb4\x45\x5b\x85\x92\xd7\xe2\x30\xa5\x30\x97\x1c\x7d\xa0\x5e\x0c\x6d\x23\xa0\xd0\x2a\xb2\xe4\x6a\x6e\xef\x61\x2e\xea\xc6\xce\x84\x29\xa6\x9e\xf4\xe4\x70\x4d\x5d\x1c\xa2\x2e\xa0\x86\xfd\x90\xb1\x3a\x50\x3d\x02\x13\x26\xd7\x23\x1b\x6a\x61\x56\x90\x23\xa6\x76\xe6\x92\x35\x41\x85\x9a\x97\x02\xed\xaf\xc6\xee\x8c\xf7\x14\x97\xd6\x52\xc1\xad\x79\x2e\x67\x44\x73\x2b\xc9\x77\x93\x31\x9a\x54\x1f\x36\x24\x2d\x30\x89\x84\xc2\x25\x01\xf0\x40\x40\x57\x20\xcd\x45\x88\x51\x13\xf9\xd2\xe8\xc6\x8a\xb4\x13\x2a\x2b\xbe\xf0\x8b\x2f\xd2\x06\xb5\x61\x7e\x2d\x6e\xbf\x20\x46\x2a\x03\x9b\xa5\xc8\xfa\x02\xc8\xac\x10\xb8\x63\xfe\x50\x21\x93\x46\xf1\xf0\x6d\xcf\xe5\x72\x65\x3f\x67\x5f\x6f\x78\xb8\xb9\x9f\xb3\x45\x59\xf0\x2d\x32\xa6\x7b\xe4\x45\x51\xdb\x7c\x71\x87\x39\xd9\x8b\xbb\xa5\xc5\x27\x3b\x5a\x50\x7b\x2f\x77\x87\x99\x01\x1c\xf5\x46\x86\xd6\x9a\x9e\x2f\xd6\x7b\x1b\x6c\xcf\x2d\xef\x67\xae\x0c\x13\x1d\xa0\xe5\xa2\x36\x65\xd8\x32\x5a\x78\x72\xfb\x40\xcd\x10\x9d\x12\xf4\xb9\x9b\x4d\xc3\x91\xa2\x06\xae\x9f\xf4\xa7\xd3\x6a\x8f\x1e\xd9\xd8\x31\x1b\x39\xf7\x3d\x24\x33\xda\x8f\x9e\xe6\xd6\x91\xfe\x34\x53\x6d\xbe\x8d\x90\xee\x58\x63\x30\xe6\x3e\x66\x14\xba\xab\x03\x3f\x23\x04\x8b\xe5\xc7\x71\x7a\x6b\x71\x7b\x45\x5e\x2f\xee\x36\xec\x22\x63\x82\x2f\x38\xda\x17\x68\x6d\x1b\x70\x21\x1d\x89\xbc\x48\x07\xde\x58\x43\x16\x69\x2b\x96\xc5\xfd\x89\xea\xd3\xa2\x04\xbf\x20\xb3\x2f\x4b\xb8\xa6\x24\xc0\xd0\x13\x91\x83\xd9\x20\x0a\x54\xbd\xa2\xa6\x84\x4a\x1f\xa3\xa8\x18\xca\x40\x7d\xf6\x4a\xcd\x9e\xce\xdf\x2e\x5e\xba\x34\xb7\x64\x81\xbb\x4e\xc0\x2c\x3e\xb9\xb8\x4a\xad\x5b\x7c\xf2\x28\x05\x80\x68\x06\x85\xa2\xd6\x2c\x3e\x49\xe7\x34\x4b\x61\xa5\xd1\xbc\x9d\x47\x3e\x36\x76\xa1\xc2\x87\xe5\x66\x5b\xab\x8c\x20\x33\x7f\x6c\x68\x66\x04\x56\x57\xe6\xa1\x5f\xcd\xa7\xfc\x0a\x18\x94\x2f\x3e\x9d\xf1\x38\xd1\x6c\xd5\x63\x43\x4b\xb2\x78\x9b\x5a\x5b\xfc\x6f\x87\x00\x0e\x60\x79\x2c\x35\x1c\x99\xba\x79\x9d\x0e\x26\x5a\x0c\x34\x05\x05\x94\xc3\x5a\x80\x91\x6b\x5b\x98\x2c\xa1\x83\x43\x1b\xbf\x04\xb7\xe4\x79\xcb\x4f\x19\xf8\x22\x85\x82\x43\x2c\x18\x67\x32\xa8\x05\x03\xd3\x96\xd4\xd7\x9d\xa3\xa4\x25\x1c\x8c\x40\x10\x49\x94\x51\x0d\x47\x9e\xd1\x8c\x28\x0a\x6a\xe0\x6a\x2a\x85\x39\xfc\x1f\xfd\x3c\xb2\xcd\x23\x01\x87\x01\x50\x4c\x83\x78\xf9\x9f\xd3\x7e\x55\x91\xfc\xc0\x64\xf4\x0b\x7a\x39\x20\xfe\xff\xe5\x5e\x74\x81\x63\xf9\x0f\x4a\xbf\x96\x02\x8c\x41\x41\xf9\xaf\x73\xb6\x79\xc1\xe4\xb5\x51\x33\x57\x2e\x2b\x4c\xd0\xff\x7a\x51\x6b\xb5\x79\x03\xe6\x91\x0c\x70\xa8\xa7\x03\x47\x22\xf9\x27\x29\xb7\x4b\xf3\xb5\xec\x0e\xf1\xdb\xbd\xab\xdd\x24\x01\xe3\xc4\x32\x33\x77\x0f\x29\x40\x5c\x02\xaa\x6d\x04\x64\xb0\xb9\x7c\x73\x1c\x90\x5e\x3a\x25\xfc\x81\xbd\x64\x0f\x32\xa3\x9e\x0b\x17\x8d\x0e\xdb\xc5\xc5\x61\x76\x78\x69\x21\xbb\x4d\x99\x28\x77\x73\x4d\x67\x50\x96\x7d\x48\x29\x80\x6a\xf5\x8f\xcd\xd9\x22\xb2\x06\x67\x00\x14\x5a\x0a\x48\x91\x50\x07\x04\x32\x7a\xf9\xf5\xe3\x16\x6b\x16\x97\x84\x59\xf3\x08\xd4\x45\x43\xaa\x77\x9e\xc4\xd9\x7c\x4d\x6e\x2d\xf9\xde\xb6\x65\x6d\xb6\xb2\x35\x02\xf9\x96\x20\xf9\x9e\x1e\x79\x44\x38\x33\xbe\xb9\x24\xa3\x1a\xc8\x5c\x92\x78\x59\xa4\x21\x19\x4d\x00\x38\x16\xf7\x22\xe5\x1e\x54\x4c\xcb\xf8\x42\xdd\xc6\x37\x97\x60\x81\xf8\x9a\x79\x26\x87\x42\x78\xcd\x16\x8b\x28\x5e\xae\x38\x61\x8c\xe0\x08\x2e\x03\x4c\xa5\x1e\x9b\xce\xd5\x29\x1c\x06\x9a\xcd\xd5\x11\xfb\x0b\x21\x54\x80\x27\xc1\x96\xa5\x0f\x16\xa4\x41\xee\xfb\x74\xb9\x94\x38\x12\x5a\x5e\x92\xb1\x9a\x18\xc0\x85\x80\x6b\x7c\x86\x86\x2c\xb9\xbc\xac\xdb\x5a\x5e\x3e\x39\x92\xa6\x24\x60\x6a\xdf\xe0\xdd\x4e\xd2\xb2\xa2\xa8\x5c\xb0\xe6\xdd\x7f\x1b\xbb\x61\xb6\x4f\xc4\x77\xe7\xca\xa4\x24\xa0\xec\xbc\x7c\xe1\x1c\x20\xd0\xe5\x5c\xd1\x66\xe6\xe5\x4b\xd3\x54\x57\x68\xba\xa1\x8e\xb8\x93\x2b\x03\x62\x64\x44\xfc\xa1\x76\xa0\x0b\xa1\x5e\xf9\x0c\x66\x94\xb7\x57\x18\xf3\x28\xc0\x6a\x7c\x78\x61\xee\x0b\xd5\xea\xf9\xca\xb3\x43\x73\x2d\x80\xc1\xca\xa3\x55\x7b\xe5\x77\x25\x10\x13\x67\x72\x18\x3a\x2d\x27\xc6\xff\xcb\x47\x3e\xff\xe3\xbc\x8c\x0f\x45\xc7\xcf\xc1\xe4\x61\x3f\x53\x67\xf1\x6e\x95\x6e\xc9\x2f\x1e\xaa\x0e\x51\x09\x3c\xc0\x20\x0c\x91\x5f\xb2\xd9\x59\x03\x5b\x77\xbf\x06\xb0\x25\x37\x09\xaa\xcf\x31\x1c\xb4\x96\x23\x56\x16\x91\x4d\xc6\x9c\x02\xd3\x8f\xf3\xc7\x99\x4b\x82\xcd\xa2\x6b\xad\xa3\x20\x5b\x21\x46\x7f\xb7\x9d\xd2\x9b\x62\x0d\x1d\x7d\x10\x91\x24\xef\x6d\x5d\xdd\x97\xe0\xa1\x5e\xc3\x66\x5f\x32\x14\x8e\xbf\xc3\x98\x34\xff\xd6\x3a\xa9\xe1\x95\x28\xfd\x36\x7d\x37\xa8\x6b\xa6\x80\x0c\xb3\xc8\x0e\xa0\x4b\x4e\x9e\xa3\x26\x32\x4d\x65\x0f\xe5\x0c\xca\xa0\x87\x08\x39\x36\x9b\x37\xca\x56\x63\x68\xc8\x47\x57\x6d\x5a\xe2\x62\x69\xc8\xef\x58\x9e\x64\x28\x1e\x39\x44\x80\xd5\x2b\xc5\x38\xc0\x17\x1b\x05\x18\xf2\xe5\xc2\x74\x94\xa3\x01\x02\x73\xfb\x16\xff\x11\xf9\x5d\xeb\xbf\x42\xd5\xf4\xf3\xe6\x92\x8c\xad\x6e\x4c\x55\x6e\x09\x73\xd0\x88\xc8\x88\x22\xdf\x03\xa3\x43\x0c\xa2\x42\xc7\x98\x6d\x09\xcb\xc2\x0a\xcc\xb1\xe4\x7b\x19\x69\x9f\xd0\x10\x7b\x19\x12\x62\x8a\x57\xd0\xe6\x2c\xb5\x01\x35\xf0\xc7\x16\x64\xbc\x16\xff\xe5\xd5\xba\x8e\x23\x09\x93\xb9\xc4\x3a\x02\xd4\xf2\x85\x6e\x49\x76\x6c\xa7\xa6\xd9\x11\x5d\xba\x10\xa7\x3d\x84\xe9\x51\x03\x56\x67\x7f\xd4\x53\x61\x3e\x54\x33\xa4\x5e\x29\x7e\x0a\x97\x99\x65\xf5\xc0\x2c\x29\xd0\xe6\x35\x10\x95\xb5\x8a\xc0\x52\xa3\xb6\xab\x94\x73\x04\xe5\xaf\xa4\x82\x88\xf6\x5d\x9e\xae\x6a\x58\xfa\x2a\x51\xaa\x33\x94\x1e\xa5\xfb\xba\xa6\x54\x80\x10\x33\x00\x9d\x11\x19\x0c\x5c\x50\xa6\x02\x8e\x31\x99\x62\x54\x5b\x09\x6f\x63\x41\x13\xe2\xa5\x15\xf6\x6d\x83\xb1\x76\xab\x5b\xcd\x6a\xd6\xe3\xc7\x3d\x1e\xa3\xd9\x14\x68\x8d\xe6\xe3\xe1\x42\x51\xe2\x85\xfa\xb1\x9f\x00\xd8\x1a\x54\x32\x45\xc1\xf5\x3f\xe4\x34\x04\x69\x6a\xbc\xfc\x40\xea\x9b\x4f\x47\x48\x75\xde\x68\x3d\xa0\x63\x7d\x3c\xc2\xbc\xc1\x64\x58\xdc\x2b\x50\x27\x86\xe1\x75\x48\x6a\x39\x88\x34\xdc\x0c\x8d\xdf\x65\x57\xd7\xfe\x2e\xbd\x3f\xd3\x62\x6f\xf7\x78\x44\xd7\x3a\xc2\x15\xc3\x3d\x26\xe0\x8a\x21\xb5\x1d\x3b\xbb\x28\x41\x7f\x42\x44\x56\xbf\x92\x02\x1c\x3b\x92\xc7\xa3\xb8\x34\x6f\xa3\x63\x11\xfe\x54\x42\x67\x8b\x0f\xeb\xd6\xee\x78\x98\x94\xe6\xd3\x0f\xa4\x8e\x13\x33\xe1\x4a\x56\x93\x39\xdd\x82\x0c\xae\x18\x1a\x03\x8f\xc7\xa3\x53\x46\x7c\xac\x9b\x33\xe2\x5b\x55\x14\x7e\xdc\x23\xcc\x92\x45\x8b\xbb\x60\x16\xf8\xe4\x96\x1d\x49\xa2\xfc\x27\x65\xf4\x51\xbc\x94\xab\x47\x41\x5e\x94\x5c\xf6\x8c\x12\xfb\x68\xd2\xcf\x97\xb6\x29\xcc\xcb\xa9\xa8\x38\xd8\x13\xd8\x29\xd8\x19\x46\xdf\x2d\xcc\xec\x90\x11\x40\x52\x22\x81\xa2\x3b\x14\xe5\x1c\xcd\xda\x82\x4d\x56\x40\x7e\x7e\x12\x79\x14\x23\xe2\x35\xe6\xb7\xa2\x92\xdf\x16\x9a\xb5\xbb\xb2\x10\x6e\xde\xa9\xd1\xb0\x43\x76\x12\x18\xc3\x43\xd1\xee\xcc\x4e\xca\x59\x83\x7d\x8c\x08\x1c\xde\xa9\x9f\x47\xf0\xb3\x5a\xa9\x4a\x7c\xb2\xa9\x0b\xb0\x9b\x7b\x34\x83\xd9\x82\xda\x5c\x6d\x6a\xad\x6d\xb9\xaf\x9b\x1a\x69\x61\x37\xed\xe2\x9d\x15\x83\xe6\xcb\x3b\x5b\xc0\xdf\xb9\xc4\xe5\xc7\xad\x3f\x6e\x75\xf2\x45\x28\xe8\x32\x56\x17\x63\x9e\x37\x80\xdd\xb5\x3c\x74\xdf\x90\x2d\x57\xb7\xc3\xc6\xee\xa9\xbd\x07\x6a\xee\x6e\x8d\x79\x92\xa6\x87\x93\xbd\xab\xdb\xaf\x0d\x4a\xab\x93\xa6\x7d\x75\x87\xad\x96\xaf\xd2\xbd\xae\xae\x48\x17\x03\x22\x89\x22\xa0\xc1\xaa\xaa\x9e\xea\x1b\x19\xba\x3a\x29\xab\xeb\x24\xbf\xa4\x9b\x92\xe4\x5e\xad\xb0\xae\x3e\xfa\x5a\x0d\x27\xfe\x4f\x52\x00\x57\x9d\xbd\xb8\xc2\x82\xe4\x58\x45\x1c\xa1\x7e\x47\x91\x5b\x31\xe3\xbd\xae\x22\x72\xac\x6b\xc8\x25\x61\x3a\x23\x0b\x17\xf3\x3e\xc4\x98\xc1\x65\x18\x8f\xbd\x85\x34\x1a\x39\xe3\x87\x51\xe1\xc2\x05\x39\x91\xba\xae\xc5\x2d\xc3\x4c\x71\x69\x19\xd5\x7a\xb0\x65\xe0\xcf\xf7\xaf\x8f\xfd\x7a\xdd\x5c\x78\x59\x70\x0a\x76\x5d\x69\x3a\x90\x33\x43\xb6\x36\x4e\xa8\xc6\x83\x7f\x8d\x24\x5c\x45\xb6\x5a\x37\x49\x8b\x10\x9d\xe6\x76\xb0\x36\x7b\xb5\x28\x86\x0c\x85\x63\x05\x69\xf3\x11\xa0\x60\x0d\xd5\x1a\xa8\x98\xc7\x82\xe0\x59\x68\x47\xc9\xc7\x00\xe8\x2c\xd6\xe8\xa1\xe6\xca\x3c\x88\x7d\x86\xa5\x78\x92\xa2\xa8\x25\xec\x7b\x5b\x47\xaa\x26\x0f\x36\x5b\x3f\xb3\x26\x36\x2b\x6b\x62\xe3\x21\x14\xf3\xc2\x0a\xd0\xc1\xad\x79\x45\xef\xb6\xc2\x09\x5d\x56\x5d\x31\xcb\xbc\xe6\xe2\xa8\x9a\xe4\xb0\xe6\xde\x94\x04\x12\x31\x26\x91\x28\xce\x42\x51\xa4\x8f\x01\x45\x0d\x2a\x3a\xf9\x25\xc0\x96\x92\x24\xc3\x7a\xcc\xf3\xd9\x28\xe3\x40\xd4\x08\x34\x5d\x82\x4b\x6a\xc8\xfb\xab\xfc\x80\x19\x49\x5e\xbc\xe5\x7d\x09\x53\xaf\xc1\xb4\x11\xb9\x12\xb8\x4a\xec\x6f\x98\xb1\xb2\xa9\xff\xf5\x26\x20\xaf\x43\x32\x5e\xbf\x44\xe1\xf5\x26\x0a\xaf\xe5\x02\xbb\x4b\x0c\x29\x23\x2b\xc2\x19\xd3\x8f\x50\xad\x52\x64\x5b\x31\xff\x3e\xe4\xd0\x1b\x3b\x7e\xde\xbc\x23\x27\x7f\xa0\x21\x8d\x69\xf0\x09\x75\xbd\x53\x79\x7b\x2f\x45\xaf\xff\x07\xbf\xb1\x65\x60\x73\xe9\xe9\x00\xc2\x5e\x85\x64\x69\xbe\x36\xec\x14\xda\xba\x7c\x7e\xeb\x68\x91\xc2\x8f\xc3\x4c\x3c\xb7\x52\x06\x96\xb0\xb0\x16\xdf\xf0\x77\xed\x21\xc6\x0b\x50\xf3\x19\xa4\x7f\x0a\x4f\x2e\x1f\x85\x68\xad\x54\x88\x14\x5f\x83\x19\x8c\xcc\x8e\x10\x3b\x85\x4e\x7f\xc3\x92\x5c\xca\x60\xe8\x31\x30\x7e\xec\xd2\xd6\x73\x0f\x48\xd8\xaf\xb6\x4a\xc4\xa0\x50\xa6\x10\x23\x68\x96\xee\x24\x94\xb1\xe7\x4f\x60\x90\xe6\x5e\x40\xaf\x1b\x40\x2f\x95\xa6\x10\xc4\x32\x17\xf4\x0d\x0a\x30\x3b\xa5\xb8\x7e\x31\xef\x3c\x58\xff\x36\xaa\x5a\x3a\x7e\x01\x38\x84\x3e\x82\x97\x04\x0e\xe5\x81\x2e\x30\x14\x8e\x44\x42\x79\x48\x41\x17\xb0\xea\x0f\x95\xfd\x83\xf4\x85\xb0\x11\x2c\x66\xe8\x90\x83\x74\x87\x8d\x14\x1d\x94\x80\xe4\x8d\x22\xfa\x31\x33\x8a\x1a\x98\xdd\x25\x0e\x4b\x43\x51\x39\x3c\x94\x23\x17\xd8\xad\x16\x78\x33\x51\xc3\xfc\x34\x0f\x55\xd2\x16\x80\x12\x14\x4a\x95\x0e\x70\x57\x44\x0b\x70\xa6\x49\x58\xcc\xda\x5b\x04\xa9\x50\x46\xfa\xbc\x73\x69\x9b\xc5\xa2\x22\x8f\xc5\x52\x93\x3e\x51\xd4\x09\x63\x8a\xff\xc2\xcb\xfd\xb8\xa7\x8b\x50\xab\x34\x9b\x4f\xef\x9e\x5e\xc8\x14\x44\x05\xc4\x6f\x2c\x7f\x3f\x3d\x86\x11\xcf\x0d\xe5\x78\x4c\xd1\x0a\x90\xb2\xf5\xd4\x85\xab\xe7\xb5\x70\xf5\x7c\x51\x48\x8d\x3f\xf0\x25\xba\xc9\xed\x48\xbb\x88\xbd\xdf\xe8\x97\x05\xb2\x09\x26\xca\xd5\x10\x4a\xae\x42\xe9\xe8\xa2\x9b\xb9\x3e\x1d\x1d\xec\xa1\xc0\x46\xb7\xfb\x85\x34\xfc\xf6\x00\x90\xa9\x2e\x30\x95\xd4\xc3\x03\x0a\x4c\x16\xae\xc4\x12\x34\x00\xba\x2f\x69\x2c\x60\x92\xcf\x41\x99\x31\xea\x8a\x93\x2b\x3e\xc6\x4c\x84\x21\x76\x9c\xd0\xc9\x0b\x29\x59\x52\x3a\x4e\x7e\xc9\x4a\x74\x14\x19\x27\x5f\x56\xea\x49\xb6\x81\x30\xd2\x82\xce\x83\xc8\x26\xd7\xe2\xa4\x4b\x6f\x02\x60\x4b\xcd\x96\x9c\x3e\x00\xf4\x97\x0b\x35\xa4\x81\xdd\xa9\x32\x26\x71\x19\x7b\xfb\xf5\xb9\xfd\x0a\x83\xba\xe6\x0d\x72\x9f\x82\xe0\x5c\xa9\x59\x12\xfc\x9b\xdd\x86\xd5\xe4\x38\xb3\x5d\x8a\xb3\x8b\x4a\x0f\x14\x08\x05\xea\xc0\xec\x4e\xfd\xfb\x11\x11\x29\xce\x9b\xdf\x95\x30\xb1\x05\x9d\xa4\x52\xc3\x60\x27\x6f\x32\xd6\x24\x65\x98\x00\xa5\x9b\x30\xc4\x9c\x27\x33\xe2\xa9\xec\x3e\xe0\xe7\xeb\xcf\xc8\x87\xc1\x95\xe1\x08\x97\x51\xe2\x9c\x5f\xf0\xee\xcc\x49\xf7\xd9\x8f\x45\xd5\x88\x06\x58\xd4\x87\x0c\xcc\x23\xd6\x34\xd3\x00\xf3\xa5\x57\x2e\xc8\x6a\x1d\x97\xbc\xf9\x3f\x26\x24\x36\xf8\xc4\xc5\x18\x29\xeb\xa8\x7f\x71\xc9\x7f\x90\x73\xe3\x82\x1d\x32\x52\x4f\xa3\x9f\xa1\x64\xa4\x94\x9f\x5b\x39\x6d\x52\x23\x7a\x88\x9c\xd1\x6f\x19\x93\x0b\xd1\xef\x13\xd2\x07\xdb\x3e\xa3\x2f\x28\x42\x5a\xf1\xa2\x2f\xda\x3a\x44\xdf\xb6\xab\xb3\x1c\x1c\x1c\x44\x97\x10\x7d\x2f\x97\x1f\x5d\xc3\xe6\x5f\x0c\xd2\x1b\x43\x81\xe8\xff\x1c\x37\x4f\x1b\xaa\x06\x39\xd9\x16\xb9\x72\x22\x04\xd6\x4e\x0c\x30\xe2\xc3\x41\x51\x1a\x74\xee\x38\x3e\x72\xf9\x4f\xe8\x2a\x1f\x80\x2b\x25\xa3\xc2\xad\x7e\x2a\x83\x32\xc8\xab\x2f\xc1\x27\x84\x4a\xe0\x00\x8d\xe6\xd0\x06\x81\x5a\x66\x0b\x2e\xde\x36\x60\xc6\x55\x77\xac\xc6\x55\xf7\x1f\x08\xd0\xc4\x59\x11\xdc\xd5\x2a\xc2\x9a\xa3\x5b\x13\x1d\x24\x64\x08\xae\xf4\x5b\x2d\xf1\xd6\x51\xb6\xd6\x51\xae\xd6\xd1\x5b\xc6\x95\x5e\xeb\x62\x15\x40\xdb\x80\x54\xaa\x88\x41\xda\xd8\x38\xd6\x31\x62\x58\xb0\x0f\x32\x06\x54\xee\xe0\x2f\x99\x1c\xcc\xaa\xff\xac\x7c\x03\xc2\x93\xe0\x71\xac\x46\x28\x3d\x0b\x7a\x92\x42\x00\x4d\x3c\x44\x59\xd1\x59\x09\xa5\x0c\x10\xc3\x53\xc5\xb4\x18\x4c\x67\xbf\xb6\xc4\x0f\xe6\x75\x99\x82\x50\x86\x01\x92\x9a\x57\x27\x53\xc6\x48\x24\x86\xc3\x5a\xfe\x78\xb3\x76\x3a\x29\xa0\xe1\xc3\x8d\x60\xf1\x29\x9f\xb5\x29\x4f\x29\xc7\x48\x31\x41\xa3\x25\x1c\xcc\x49\x26\x28\xb1\x34\x57\x5c\xec\xf7\xad\xe9\x23\xdb\xae\x3f\x9f\xfb\x9f\x2f\x63\x75\xb8\xf5\x65\xe6\x63\xda\x59\x46\x86\x00\x6c\x2b\x9e\xe8\xcb\x41\x9a\x51\xa9\x4e\xc4\x89\xb1\xb3\x46\xf1\x79\x6f\x14\x9f\xae\x60\xe0\x14\x9f\xfe\xe9\xd3\x8a\xe8\x78\x3a\xe6\xcb\xee\xe1\x38\x4b\xf6\x33\xff\xb1\xb4\x3e\x11\x83\x33\x52\x1d\xe1\xc3\x0c\x6c\x8c\x6e\xde\xae\xe9\xb1\x28\xbd\x5c\xa3\x7e\x6a\x19\x61\x8d\x9c\x55\x89\xd1\xcf\x58\x05\x8a\x71\x0c\xa5\x04\xea\xbf\x35\x70\x85\x4c\x60\x2e\x61\xb6\x89\x6b\xe5\xeb\xcd\x86\xb0\x66\x4b\xd7\x5d\x15\x7e\xbe\x4d\x7d\x2e\x53\x27\x40\xa4\x07\xda\x4e\x47\x1f\xb9\x5f\xe3\x8e\xed\xd7\x2e\x8d\x0b\x51\x4e\xda\x55\x46\xaf\x69\x47\x60\x3d\x81\x70\x16\x8a\xb2\x52\xa7\x6d\x2c\x62\xd2\x7c\x61\xfa\x8b\x68\x04\xcf\x4e\x67\xc5\xe8\x69\xe1\x84\xe8\x14\xe3\x86\xc9\xc0\x18\x47\x72\x04\xe4\x49\x0c\xab\x59\x20\x7a\x84\x8a\x70\x87\xaa\x4e\x86\x6b\x9d\x6b\x30\xa3\xe4\xab\x86\x3a\x80\x1a\x12\xf7\xdc\x1b\x9c\x30\x33\x63\xe1\x04\x93\x16\xba\xdf\x4f\x39\x4e\x4e\x0a\xec\xc3\xcc\x62\xeb\x0c\xc0\x74\x34\x73\x7a\x42\x00\x85\xd9\x88\x21\xbe\xa6\x2a\xe0\x95\x49\xa3\xb9\xba\xe5\xc3\x57\x2e\xe4\x84\xc6\x26\x72\x87\x53\x8c\xd8\xe1\x34\x00\x6d\x1e\x1b\xeb\x42\xb4\x19\x6a\x41\xd1\xa9\x03\x47\x8e\xe7\x21\xd5\x47\x0d\xf7\xc2\xed\x95\x31\xe6\xea\x3a\x92\x23\xeb\x68\x3b\x72\xfd\xc5\x0f\x34\xf2\xd7\xd6\x65\x04\x61\x73\x3d\x81\xda\x3e\xd5\xca\xfb\x1a\x6d\x82\xd3\xfc\xcb\xb0\x58\x21\x45\xc7\x58\x8f\x40\xed\xb1\xd2\x0d\x58\x48\xc7\x51\xb5\x18\xbb\xe5\xeb\xed\xd0\x47\x8c\xfd\x65\xba\x2f\x4d\x70\x54\xcb\x78\x46\xa9\xfe\xbd\x78\xa9\x83\x3b\x5a\xb9\xdd\x25\x37\x93\x72\xd7\x1b\x11\x0a\xf2\xee\x77\xf4\xe0\x3b\x16\x3b\xe3\x2e\x22\xbc\x4a\xe9\x51\x84\x57\x98\x09\x85\xee\xc0\xc3\x3d\xa7\x85\x04\x61\xdd\x33\x25\x8d\x3d\x77\xd8\xa9\x6b\x78\xf1\x87\x20\x8c\x56\xe2\x5e\x4d\x3e\xd8\x39\x7a\x8a\xbb\x0d\x9c\xe2\xde\x67\x97\x1a\xc3\xd0\x91\x20\x7b\x17\x3b\xb7\x32\x65\x45\x2a\x7b\x28\x95\x2a\xa7\x52\xa4\x13\x94\x98\xe6\x0d\x2a\x6a\x5a\x4e\x96\x4a\x39\x3f\x0c\x1d\x7e\xa6\xc1\xae\x22\x86\x48\x44\x07\xce\x8f\xc6\xc3\x27\x0e\xbc\x04\x6d\xd8\x1a\x29\xa8\x36\x0c\xa1\xe2\x01\xb7\x8f\xcd\x4d\x68\xb4\x08\xae\x76\xc8\x78\xc4\x5a\x99\xcf\x3f\x3f\x3f\xfa\x33\xb4\x21\xd6\x1c\xe6\x91\x9e\x79\x89\x87\x49\xda\x00\xe2\x93\xe8\xd6\x20\xa3\x9f\xc8\x14\x6a\xae\xb0\xd3\x6d\xce\xa6\x37\x63\x73\x9f\xb0\xb3\xfe\x4a\xcd\x1e\x1d\x34\x98\x51\x0c\x6f\x4d\x02\xa6\x70\x2f\x7c\x4d\xfa\x2b\x77\xff\x83\xf1\xf2\x85\xbf\xcd\xbd\x86\x47\xd6\xed\xb7\xcd\xa1\xdc\xb5\x4d\x09\xa3\xd8\x82\x35\x01\x63\xd7\x77\x1c\x9b\xbe\x63\x0b\xad\xa3\x81\x6d\x19\x0a\xb6\xd9\xa3\x30\xb5\x8c\xdd\x1a\xc4\xa5\x33\x75\x00\x24\x75\xfa\xe2\xa5\xc4\x63\x19\x16\x3b\x83\x23\x46\x0f\x46\x91\xc9\x82\xc2\x85\x86\xa9\x31\x91\x42\xae\x86\xa8\xb3\xf9\xc6\xb7\xf1\x0f\x4b\x44\xc6\xa9\x03\xea\x0b\xf6\xfa\xc6\xbe\x97\x9c\x11\x20\xf3\x4a\x67\x24\x23\xa6\x91\xe2\xcb\x67\x04\x11\x54\x53\x57\x30\x2c\x9f\x15\x87\x1f\x77\xb7\x48\x6d\x10\xf2\x72\x0d\x20\x77\x21\x9b\x28\x11\x8a\x7b\x3a\xd0\xd5\xed\x46\xd5\x39\x63\x24\x0f\x76\xe9\x76\x61\x30\x75\x9f\x50\xb2\x76\x57\x5c\x6a\x70\x49\x06\x8c\x1e\xe0\x8c\x91\xff\xb8\x73\x4c\x28\x5b\xa1\xdd\x35\x9c\x0b\x21\x0d\x75\x63\xa6\x1b\x0b\xbf\xaf\xb2\x80\xb9\x6c\x90\x9e\x56\x64\xc5\xee\x6c\xf5\x71\xc7\xe2\xe4\xee\x3e\x36\x19\x2a\xd0\x3c\xf9\x30\xe0\x1f\xdd\x90\xbc\x8b\xa4\xbd\x4f\x28\xdd\x20\x95\xf4\xda\xfb\xb0\x73\xb8\x4b\x63\x52\x70\xf6\xc9\xd5\xea\x16\x44\xda\x20\x47\x3a\xca\x16\xb3\x87\x49\x86\x1d\xc7\x11\x45\x65\x87\x29\x68\x2d\x08\xe7\x24\x22\xbc\x23\xf8\x0f\x9b\xb7\x05\x41\xd2\xda\x27\xed\x7e\xf7\x29\x2c\xfe\x4f\x44\xc9\x76\x0e\xae\xdc\x42\x17\xbc\x99\x5b\xbb\x99\x59\xfb\xdd\x80\x8c\x22\x8b\x36\x6a\xfb\x14\x1a\x55\x9f\x16\xca\x94\xbb\x6d\x3c\x23\xb8\x59\x7c\xb9\x38\x1c\x7f\xd9\x39\x47\x62\x38\x12\x19\xb3\x78\xae\x23\x35\xe3\x99\x8f\xe0\x14\xe9\x62\xaa\x60\xec\x26\xdd\xa7\x0c\xc5\x86\x23\xfb\x44\x07\xf3\xc9\x54\x28\xbe\xb5\xcc\xa3\x0a\xfb\x64\xe9\x50\x38\x0f\x2c\x80\x1d\xdd\x3e\x31\x17\xaa\x63\xd0\x7a\x74\x33\xe6\x2c\x00\xd3\xd0\x4c\xcd\x90\x45\xcf\x76\xe7\xec\x53\xaf\xb3\xa3\x37\x44\x97\x66\x26\xda\x94\xe0\x8f\x47\x21\xf1\x53\x9e\xb1\xa4\x2c\x28\x2c\x2c\x92\x9e\x06\xa4\x95\xc3\x1f\xdd\x7c\xb0\xfb\x18\xee\x1b\x99\x94\x47\x11\x24\xd4\x30\x29\x83\x50\xf9\x98\xa7\x88\x45\xae\xfd\x36\xe2\x01\xbe\xdc\xe1\xd0\x53\xa8\x96\x68\x9f\x16\xfe\x30\xd3\xb9\x14\x34\x83\x0a\xb3\x62\x9a\xc5\x1e\x87\x5d\x06\xc8\xa6\x55\x66\x3a\x58\x02\x77\x9c\x98\xac\xb4\x7b\x4d\x60\xdf\xb6\x93\x81\x82\x48\x22\xf6\x83\x7c\x57\x08\xc3\x2d\x80\xc1\xa6\x5b\xf7\x30\xdf\x4c\xcc\x77\x23\x70\x36\x2c\xae\x2a\xd5\xb4\x60\xc6\xf3\xf0\xcc\xae\x1b\xe5\xf7\xb0\x70\x4b\x3b\x5a\x36\xe1\x06\x88\x24\xc7\x59\xd4\x24\x94\x15\xe1\x5b\x25\x1b\xc3\xce\xc0\x26\xf5\x28\x0d\x8f\x68\x5e\x53\x0c\xf3\x4b\x5f\xc7\x6f\x84\xc1\xc9\x9d\x38\x70\x31\x37\xf2\xb1\x49\x13\x36\x8c\x69\x86\x09\x1c\x01\x29\x50\x58\x22\x42\x33\xaa\x25\x83\x9e\x6a\x77\xb4\x6b\x58\xf6\x0c\x85\x1b\xb4\x05\x64\x43\xd8\x5b\x07\x3a\x34\x34\x16\x7b\xc6\xe8\x9c\xf4\xa6\x77\xed\xaf\x01\x6b\xd6\x98\xb9\x7b\x4e\xac\x57\x02\x74\xde\x67\xdf\xbb\xed\xf3\xdb\x75\x1e\x93\x74\x26\x40\x80\x53\xc8\xb3\x4f\x8d\xab\x6e\xc2\x25\x12\x38\x9f\x27\x6c\x3a\x46\x50\x33\x6b\x4b\xf6\x93\x9e\x93\x15\x68\x35\x27\xdf\xaa\x4e\x96\xf6\x2e\xa3\x5b\x90\xf1\x4d\x8c\xac\x7c\x58\xbf\x11\x55\x8b\x4e\x46\xab\x00\xc0\x9c\xd2\x01\xd7\x9e\x8b\xf6\x97\x82\x46\xab\x35\x64\x77\xa0\xbb\xfe\x25\x1d\x91\xb1\x1a\x90\xb9\xfd\x7a\xe7\x11\xc4\x1d\x37\x65\xec\xf9\x2d\x58\xda\xf4\xc3\x73\xcd\x54\x40\x3e\x18\xa3\xc3\x53\x1e\xd2\xfb\x3c\x84\x54\x27\xe2\xe9\x2e\x45\x25\xb7\x2c\x03\x56\xc1\xcd\x0a\xdb\xb1\x05\x57\xda\x66\x3d\x94\xb0\x9c\xe8\x15\x38\x61\xae\x8d\xe8\x0a\xb1\xb0\x52\xba\xd8\xbb\x09\xc7\xc4\x22\xd2\x30\x01\x63\x16\x46\xb1\xa1\xe2\xd0\xf9\x1c\x5b\x98\x0b\x57\x7f\x80\xdb\x99\xd3\x0d\xaa\xe9\x25\x1c\x1c\xe0\x83\x29\x79\x37\xf3\x1c\xb7\x12\xf5\x12\x08\x9f\xae\x0c\x57\x76\x37\x5b\x2c\xf6\xf0\x67\x71\xcb\x7f\x5d\x11\xdb\x7d\xc9\x12\x57\x66\x75\xb4\x4e\x0e\x1b\x0f\x07\x36\x9f\x9b\xb7\xb4\x6a\x9b\x8b\x6e\x37\x47\x44\xac\x1b\x89\x05\xa6\x0c\x73\xba\x4f\x8e\x4c\x2f\x16\xae\xb6\x9d\xc5\x5d\x70\x68\x5b\xce\x84\x56\xc2\xbc\xa9\x89\xbe\x13\x48\xdb\xc2\xdf\x7a\x6c\x49\x90\x3a\x93\x8b\x0e\xc6\x88\xeb\x33\x23\x70\xa3\x51\x3b\xc6\xce\x13\x81\xdc\x1c\x26\xe8\x56\x1b\xc1\x31\x1a\x51\x65\xcf\xfd\xc8\x9d\x99\x3a\x08\x73\xbb\xc7\xa8\xf9\xde\xdb\xb0\xdf\x75\xf5\x55\x90\x0c\x02\x77\x4e\xfc\xed\x52\x54\x5b\x41\x75\x15\xe1\xad\x43\x92\xe8\xd8\xf3\xb7\x77\x2c\x99\xed\x9d\xa9\xdf\x6d\x69\x7a\xe7\x01\xd0\x9d\xcb\xe5\x42\x6c\xe0\xb7\xdf\x86\x7b\xfb\xe9\xb1\xb0\xb0\x9f\xeb\x82\x55\x0b\x02\x6f\x00\x2d\x35\x10\x4b\xcf\xb9\x2e\x8c\x87\x8c\x09\xf7\x33\xb2\xd1\xd4\x43\x89\xfb\x19\xb5\xf1\x3e\xcd\xb8\x50\xad\x11\x67\x1c\xcd\xd1\x89\x51\x53\x0b\x6a\xd4\x9a\xd8\x13\xd5\x4f\x35\xd5\x61\x64\xfd\x99\x9b\x36\x85\xe7\x9f\x75\x7e\xc9\x69\x21\x13\x90\x9a\x78\x27\xa8\x2a\x41\xa5\x24\xa2\x96\xf6\xdb\x89\x37\x9c\x00\xe8\x64\x3a\x51\xa3\x79\x6c\xdb\x11\x34\xdb\xde\xfb\x84\x33\x84\xc9\xb0\x4e\xab\x26\x37\xc7\xa0\x2e\xce\xd9\xa7\x3c\x70\xec\x0d\xab\xc6\x86\x25\x67\x05\x63\x7b\x43\x12\x49\xc6\x8c\x32\x6b\x92\x5b\xfc\x4e\x92\x94\x97\xca\xaa\x86\x38\x5f\x98\x6c\x83\x64\xba\x6f\x80\x4c\xd7\x16\xc8\xfb\x91\xbc\x81\xc7\x44\xee\x97\xce\x39\x78\x4c\xbd\xa4\xfb\x66\xb2\xc1\xd0\xd6\xd8\x84\x91\xdc\x1a\xcf\x63\x1b\xc0\x04\x3f\x65\x4f\x43\x0d\xde\xaf\x49\x92\x4e\xed\xe5\x95\xe6\xb0\x13\x32\x7d\x2d\xb8\xdf\x38\x78\x17\x67\xcd\x85\xe8\xf7\x1d\x2e\xd9\x8c\x77\x92\xe1\xb8\x92\x6b\xde\x8e\x2c\xd3\x17\x51\xdd\x07\x6a\x8a\x46\x63\x0b\xae\x7b\x05\x08\x70\x3c\xaf\x5d\xc2\xe4\xd2\x62\xa8\x99\xb3\x27\x6a\x11\x00\x23\x14\x4f\x75\xfc\x34\xa2\x29\x27\xe8\x57\x7d\x38\x3f\x5f\x2e\x7f\x6e\xee\x7d\xe8\xde\x3e\x52\xd6\xfa\xd8\x74\xeb\xda\x14\x5f\xc9\xac\x2c\x6d\x68\x49\x3a\x9c\x67\x50\x0e\xa3\x1b\xaa\x63\x72\xda\xa8\x09\x38\xa3\xfb\xa3\x2d\x3b\x82\x4b\xb4\x9b\x63\xa8\x7c\x27\x91\x2f\x43\x77\x1c\xbd\x49\xee\x68\xa7\x3a\x51\x58\x35\xca\x6c\xa1\x04\x6a\x8a\xe0\x88\x74\x81\xf4\x05\x9d\xe1\x95\xfc\xda\x3d\x24\x57\x0f\xd6\xd5\xda\xac\x6e\xd6\x16\x56\x9c\x05\x16\x98\x47\xc8\x2a\x6e\x44\x42\x84\xf0\xaf\xb9\x49\x6b\x75\xd3\x78\x36\xaf\x01\x6b\x9b\x67\x81\x01\xb8\xa6\x50\x2e\x0d\xa6\xba\x72\x9f\x7f\x7f\x6b\xa6\x70\x39\x3e\xb9\x96\xf7\xbb\x13\xc2\xa9\x01\xdd\x4b\x41\xf4\xf9\x32\xf2\x19\x46\x90\x10\x8d\x75\x01\x92\x4d\x12\x81\x29\x4d\x5d\xba\xda\x24\x75\x0e\x67\xe6\x8b\x02\x8e\x26\x09\x61\x60\xe3\x2f\xc9\x44\x54\x9e\x19\x67\x82\xaa\xa1\x36\x00\x73\x01\x2d\x55\xf3\x03\x5d\xba\x8c\xce\xbc\xe5\x97\x47\x68\x04\xd1\x87\x5e\x9d\xd2\x40\x23\xa7\xb5\x38\xb8\x71\x47\x33\x0d\x98\x61\xc2\xe6\x09\x21\x11\x16\x11\xed\x39\xa3\xfd\x9d\xc5\xae\xa4\x80\xe6\xe7\xe2\x62\xa7\xc4\x95\x16\xdb\x94\x95\x16\xaf\x4d\xb2\x00\xfe\x0b\xe8\xb4\xd3\x92\xb9\x1a\x96\x96\xe2\x16\xfd\x55\xf2\x1c\x75\x56\x05\x4c\xbe\x61\x5e\x8f\x20\x70\x09\xd9\x73\xbb\x90\x70\x2a\x27\x08\x5c\x45\xe0\x54\x87\xd0\x21\x01\x9c\x43\xeb\x4c\xea\x02\x4a\x22\x76\x53\x2c\x4e\x51\x4e\x77\x47\xd5\xae\x6e\x47\x16\x58\x8f\x2d\xa4\x3f\xc3\x97\xb6\x2d\x74\x26\x3f\x2f\xba\xdb\x4a\xa1\xf6\x32\x83\x69\xc6\x0c\x23\xaa\x17\x31\x1c\x4b\xf7\xed\xe6\xba\x3b\x2f\xf9\x3d\xcf\x1a\x06\xbf\xeb\xb6\x72\x45\x68\x96\x0d\xd2\x8a\x35\xf3\x7e\xb7\x75\x3b\x85\x45\x75\x93\x3a\x74\x6c\x21\xaa\x96\x35\x35\xde\xea\x9f\xdf\x73\xd3\xb6\x43\xa0\x6d\x5e\xc6\x95\x47\xc7\xc6\xfd\x08\x89\x8b\x11\x09\x73\x1a\x57\x60\xae\xae\x48\xe1\x08\xc5\xbf\x1d\xd3\x3f\xfd\xd2\xad\x5b\xba\x77\x44\x8a\x47\x7d\xf3\xb8\xef\xe8\x07\x2b\x52\x10\x99\x93\xe7\xd2\x13\x68\x22\xc5\x4d\x44\xe9\x51\xdc\xdc\xba\x8e\x23\xb0\xfe\x9e\x56\xf7\x94\x91\x49\x5a\x31\xd9\x93\xb0\x57\x5f\x54\xce\xde\x08\xe2\xb1\x1c\x41\x01\x6d\x16\x81\xf5\x3a\xc2\xb1\xa1\x5f\x7d\xb4\x90\x63\x8d\x29\xad\x98\xed\x49\x6b\xb0\x71\xbe\x40\x1c\xba\xbf\xb2\x87\x3a\x07\x91\xd9\x0e\x38\xae\x28\xb4\x1e\xbe\xec\x84\x2d\x73\x60\xab\x18\x11\x13\x58\x02\x44\x81\x35\xba\xc0\xdf\x51\xd5\x83\xc1\x8e\x0c\x4b\xb4\x9a\x26\x68\xc7\xb1\x6f\x81\x6f\x4c\x9d\x03\x65\xfa\x14\xc3\x7c\x35\x77\xe0\x3e\x37\x8e\xa6\xd1\x24\x71\xeb\x5d\x5a\x6d\xd3\x50\x5a\x19\x47\x69\xa9\xe1\x52\xd7\x24\x1c\x97\x2b\x10\x9a\xe9\x1e\xc7\x94\x30\x19\xf5\xa4\xc7\x91\x41\x6f\x91\xe5\x26\x69\x31\x36\xe7\x71\x91\x43\x0e\xda\x53\x6e\x7e\xa1\x14\x28\x08\xa7\xe8\xd2\xf6\x3f\x46\x84\x57\x2c\xe3\x1c\x83\xcc\xf9\xed\x5c\x8a\x56\x28\x5c\x5e\x21\x02\x3a\x51\x33\xa4\x36\x82\x7c\x33\x32\x3f\xcc\x26\xfc\x85\xf8\x33\x6e\x2b\xb1\xab\x3b\x92\x75\xf3\x01\x26\x90\x8b\x61\xd7\x93\x4d\x88\x9d\x72\xac\x00\x01\x73\xae\x20\x3c\xdd\x63\xb0\xab\xf5\x6b\xd1\x56\xb9\x4b\xbf\x19\x52\xff\x6e\x2b\xb9\xc2\x8d\x94\x1d\xb7\x14\x11\x99\x0b\xec\x70\xb0\x07\x23\x85\xdd\xb4\x2d\xe1\x03\xc6\x62\x49\xed\x01\xd6\x6b\x73\x48\x62\x41\x0b\x5c\x62\x12\x1a\x9e\x9a\x17\xa1\x72\xd9\x23\x85\x9a\xe7\x5c\x54\x2f\xdb\x8e\x63\xc5\x27\x11\xd2\x52\x4d\x44\xfd\x7b\xcd\x3a\x09\x87\xc9\x17\x35\xad\x4b\x62\xe9\xa9\x47\x58\xd3\x53\x0a\xd7\x13\x16\x9f\xd1\x73\x63\x97\xa0\x06\xd2\x51\x52\x9f\x88\xc7\x53\x86\x22\xb6\x4f\x15\x1c\x97\xe2\x08\x83\x19\xb9\x77\x5b\xda\xfa\x46\x36\xdd\x92\x0c\xa8\xcb\xc9\x4d\xbe\xac\xf4\x1f\x53\x35\xa2\x32\x33\xac\x77\x4f\xde\xb1\xca\x25\x1f\xd1\xa3\x24\x6f\x27\x0e\x06\x64\x7a\x5f\x5c\x23\xe7\x49\x38\x64\x4b\x29\x6c\x21\x5e\x92\x23\x59\x73\x68\x30\xea\xd4\x8d\xbf\xec\x32\x93\x53\x78\x51\xb5\x43\x77\x29\xe5\x46\x75\x38\x97\x9b\x19\xce\x7d\x1c\x2f\x54\x86\xda\x7a\x25\xa6\x20\xd3\x19\x63\xc8\x94\x7a\xe0\x21\x5b\x20\x78\x71\x55\xfa\x74\xd5\xed\xc4\xe1\xa9\x50\xf3\x82\x6b\x30\x29\xf5\x34\x87\xcb\x18\x18\x04\x28\x4b\xb2\xe7\x39\xb8\x5a\xf3\x65\x02\x1b\xdc\xd2\x38\xc5\x95\xf4\x78\x56\xca\x5a\xf5\xf3\xe8\x14\x32\xff\x07\x9e\x86\x00\x50\xaf\x59\xe6\x74\xe8\x9f\xf2\xa8\x5f\x82\x2e\x51\x55\xb8\x13\x94\x0e\x61\xde\x51\x08\x6d\xa5\x73\xe6\xf8\x8e\x2b\xc6\x20\x8c\xb6\xa0\x9b\x33\x99\x17\x69\x62\x76\x31\x7a\x68\x1d\xaa\x11\x6a\xdb\x46\x77\x99\x8b\x7b\x82\x70\x5b\x91\x02\x06\xb8\xe8\xf5\x76\x40\x79\xe6\x78\x9b\x8c\x36\xee\xa3\xe3\xce\x55\xc3\x5b\xb3\x6d\xad\x4e\xf9\xcf\x06\x90\xf9\x6f\x00\x10\x09\x0e\x64\xc0\xda\xb0\x9f\x2f\xd5\x37\x52\x4b\xc8\x55\x02\xc9\xd9\x14\x08\x58\x98\x92\xb0\x41\xa2\x6c\xbc\x35\x27\x35\x6e\xd2\xb6\xcc\x52\x76\xbf\x60\x1b\xf0\x73\x19\xd2\xcd\x2e\xa9\xb9\xc3\xff\x81\x16\x4c\x42\x00\xb0\xc9\x6e\x53\x28\xf0\xc0\x43\xe1\x2c\x51\x6a\x7e\x5c\xa1\x37\xf0\x79\xe1\xa6\x90\xfb\xe6\x05\x6e\xba\x4a\x43\x7c\xa0\xcb\x17\x88\xcb\x71\x05\xe5\x5e\x68\xeb\x11\xfe\x48\xa3\xff\xd3\x70\xfa\xcd\x45\x5a\x88\x4c\xea\xe6\x13\x4e\x37\x08\x40\x23\x21\x34\x3c\xd4\x03\x94\x79\xa2\x3e\x7c\x3d\x28\x0e\x34\x7f\xf8\xc4\x55\x67\xe2\x1e\x55\x3b\x73\x70\x05\x34\xb4\x5a\x98\x33\x70\x09\x59\xeb\x96\xc8\x99\x99\xd6\xb9\x5a\x92\x9a\xbf\x3a\x9b\xb6\xf9\x78\x43\x7f\x0a\xf6\x90\x28\x55\x35\xec\x4f\x4c\x36\x5e\x12\x3a\x8c\x17\x25\xc1\xc2\xb7\xf9\x92\x3f\x94\x91\x21\xa5\x55\x80\xcc\xc9\x4c\x5c\xb7\x78\x3a\x4a\x25\xb8\x6a\x51\x2d\xe5\xa8\xc4\x64\x3c\xe2\x93\xc8\x24\x69\xc0\x33\xea\xbc\x4b\xdb\x44\xd6\x54\x23\xbc\x71\x24\xb5\xad\xe0\x7e\x32\x83\x66\xb2\xb8\x39\x61\x76\x88\x98\x4b\xac\xd9\x42\x47\x1d\xc3\xbf\x3d\xf0\x76\x2e\x70\xff\x9a\x64\xea\x60\x0b\x35\x29\x26\xc0\x75\xd6\x87\x1a\xd7\x0c\x88\xf1\xd7\xc6\xf9\x7f\xb4\xce\x4b\xe7\x9b\x8d\x17\xb2\xe2\x6b\x5c\xb9\x99\xba\x92\x4b\xd9\xeb\x9f\x89\xcf\x83\x2b\x77\xa3\x26\xd7\x2b\xc7\x49\x84\x51\xc9\xee\x9a\xfb\xbf\x1a\xed\x1f\x8d\xcf\xff\x63\x2d\xdf\xe3\x6f\x87\x09\x2e\xf6\xf2\x59\xf7\xcb\x18\xb7\xb9\x75\x64\x99\xf2\xd7\x5f\x69\xb4\x6e\x5c\xb6\xf4\xea\x45\x8b\x51\xb0\x33\x30\x36\x53\x29\x5a\xb7\x1d\xb0\x77\xb6\x91\xfd\xa7\x77\x6d\xc1\x15\x92\xb6\xf9\xa1\xd5\xff\x58\x60\xc3\xe4\xe6\x79\xc3\x1d\x93\x60\x38\xe1\x2d\xd0\x26\xd7\x00\xb5\xd6\x04\x1e\x69\xb3\x4a\x14\x66\x77\x84\x31\xb0\xbb\xb1\x4d\xd9\xe6\xb4\xa5\x56\xe6\xbc\xfe\x6c\x3a\x67\x41\x86\xbd\x5a\x0b\xb3\x4f\x35\x97\x6b\x6d\x60\x68\x71\xdd\x99\x6c\x2b\x37\x2f\x8d\x55\x87\x7d\xf1\x58\x26\xba\x19\xb8\x74\xbe\xcd\x7c\x79\xb2\x45\x36\x91\x41\x2f\x99\x93\x71\xec\x08\xba\x6e\xc9\x12\x18\x8e\x51\x34\xc8\x98\xb5\xe8\x6a\x95\xc1\xd1\xf0\xf7\xd2\x68\xdf\x1a\x97\xa7\xd4\xf9\xc7\xc6\x65\xde\x97\x6f\x07\x8d\xb7\xff\x61\x67\xd5\x15\x98\xfc\x40\x79\x94\x9d\x39\xbb\xdb\xf0\xe2\xe2\x2d\xcc\x39\xa4\x71\x81\x28\xf8\x7d\xf7\x65\xbe\x27\xde\x4d\xa7\xfd\xab\xd3\xce\x7f\x74\xae\x88\x65\xac\xb4\xdd\x1c\xe9\xe9\x72\x20\x3d\xfc\xe2\xcb\x4d\x84\xfb\x1f\xcd\xcb\x64\x2e\xfb\xbf\xec\xf0\x36\xdd\xee\xb4\x50\x0d\x5f\x5e\x26\xe9\xdf\x35\x6e\x75\x47\x34\x5b\x68\xd8\x59\x77\x8f\xa7\x74\xca\xdf\x25\x22\xa7\x17\x2f\x3f\xfe\x32\x76\xd3\x1b\xc1\x7a\xf5\x58\x55\x16\x08\x73\x2e\x9c\x0d\x02\x94\x61\xd4\xcb\x7f\x73\x97\x0f\xc5\x7f\x27\xc2\xe0\xdb\x8d\xff\x1f\x0b\xaf\x91\x02\x25\xb4\xef\xf2\x64\xd9\x7e\xce\xf1\xde\x62\x53\xc3\x66\x6e\x95\xb5\x02\x73\x26\xab\xcb\x82\x2c\x2c\x8b\xdf\xc7\x0c\xd3\xe0\x9a\x32\x87\x34\x48\x16\xe1\xc5\x97\xf0\xd2\x7d\x4c\xc2\x86\xea\x6b\x73\x93\x5d\xae\x7a\x9d\x18\x93\x9f\x79\xdd\xaf\xfc\x31\x4e\xdd\xc9\x45\x33\x52\x67\x84\x5a\x58\x4a\x5f\x01\xfc\x3c\xcb\x20\xde\x55\x6b\x77\xee\x1a\xe6\x9c\x5f\x3a\x17\xa0\xae\xbc\x19\x5a\x43\x63\xcd\xc3\xb8\xc0\xa1\xdb\x6e\xda\x23\x48\x7e\x3f\x42\x31\x1f\x89\x87\x31\x63\xd5\x24\xb6\x02\x04\x67\x7f\x8d\xb5\xbf\x9f\x73\x67\x94\xfc\x4b\xef\x07\x1f\x36\xff\x0e\x97\xea\xad\x14\xdc\x34\x86\x09\x3d\x04\x79\x33\x32\x74\xbe\xcd\xdc\x0a\xcb\xc3\xd5\x11\x5a\x62\x1a\x7d\xf8\xa9\x68\xd3\xff\xf0\x7b\x18\x8e\x2a\x63\x86\x4a\xc9\xbb\x5b\xb1\xe5\xf9\x9b\xbf\xcc\xf7\xe5\xaa\x19\xc6\xa9\xf1\xbc\xae\x56\x3e\x1e\xc5\xfb\x8f\x57\x68\x47\xc8\x85\xe9\x3a\x2b\x7a\x73\xe4\xae\x45\xdb\x9c\xb5\x04\xb5\x99\xc0\x16\x56\x9b\xe7\xc5\xb6\x37\x2c\x9c\xdc\xab\xc1\x5a\xdc\xa8\x23\x9b\xbb\x35\x7f\x43\x12\x0c\x1b\x2e\xe4\x10\x10\x7c\xb9\xe6\xf1\x2f\x5e\x6d\x87\x6a\xeb\xda\xc2\xf5\xfd\x2a\xca\xca\x34\x65\xf4\x1a\x5e\xc1\xa7\x74\x1d\x5a\x6a\x9e\xbe\x7d\x55\xc4\x67\xc2\x86\xc7\xd4\x42\xf4\x6b\xde\xbd\xb6\x14\xd1\x73\xfb\xb8\xc0\x30\xf9\x5b\xf7\x36\xd8\x76\x67\x47\x54\x63\x68\xbd\xac\xe3\x6f\x5e\x8d\x3a\x3d\x79\x40\x6e\xb8\xa6\xc2\x54\xd8\xdd\xec\x6a\x55\xb9\x60\x77\xf5\xe9\x07\xe4\x8c\x9e\x41\xd3\x6e\x7a\xe7\xc9\xfe\x0f\xdf\x8c\x6f\x66\x94\xb7\x6e\x98\x41\xe5\xd4\x98\x5f\x82\xf3\xaf\x9b\x3b\x97\xc6\x65\xe2\x5f\x03\xdf\xff\x93\x09\xf8\xc4\xdd\xcc\x15\x6f\xe0\xb2\x0b\x69\xfc\x5e\x32\x76\x49\x30\x77\x99\x30\x56\x1d\x47\xf9\xff\x8e\x58\x5e\x7c\xb9\x62\xa3\xdc\xfd\xdf\xe5\x76\x4e\xf7\x82\x34\xd8\x36\x58\x2d\xb2\x22\x7a\x2c\x03\xf2\xa6\xc8\xfd\x9b\x1d\x76\x6a\xb6\xc8\x62\x07\x83\x82\xa8\xe8\x56\x4e\x94\x51\x8b\xfd\x5b\xce\xd8\xcf\xda\xfe\x1f\x0d\xb3\x9b\xdc\x77\x2f\x97\xfe\x69\x45\x13\xee\xbf\xbe\xff\xee\xe5\x7f\xfe\x0e\xb7\x93\xef\x77\xf9\xcc\x58\xad\x8f\x60\xb1\xbb\xc5\x18\x8d\xa0\xd6\x1e\xcc\xde\x0c\xbb\x64\xd4\x1f\x13\x11\x31\x1f\x31\xf2\xc4\x24\x6f\x8c\x6f\x2c\x08\xd7\xbb\x1b\xe0\x5e\x1c\xe6\x86\xd4\xe7\xe8\xd5\xbf\x7c\x34\x9b\xfc\x1b\x0c\x3d\xc2\xa4\xc2\x92\x39\x0a\x0b\xf9\x2f\x2c\xd6\x94\x09\xd6\xe5\x2d\x61\xce\x75\x1c\xcc\xb9\xf1\x2a\x5b\xe5\x4f\x4e\x66\xef\x70\x73\x78\x98\x5f\xca\xd8\x9f\xe3\x4a\xc9\xc3\x1d\x97\xa1\xe3\xd2\x2d\x6e\xd2\x51\xaa\x30\x8d\x37\xb3\x81\xa9\x2d\x2b\xe2\x72\xc1\x2d\x1b\x44\xeb\x72\xa2\x6d\xd9\x5a\x52\x63\xfc\xe0\x4e\x43\x25\xe8\xca\xe6\x8d\xbb\xfd\xcc\xed\x8e\x47\x50\xa5\xc6\x35\x17\xad\x89\x3b\x7c\xa9\x47\x28\x23\xee\x5b\x88\x18\xd7\x0c\xf3\x26\x4a\x0b\xe0\xa4\x1c\xb1\xa1\xe2\x86\x53\xdb\xf9\x5d\x90\x0f\x2b\x03\x47\xb6\x34\xd0\x89\x08\x00\x73\x2c\x1f\x7d\x94\xa1\xa3\xb8\x95\x97\x29\xff\xa3\xf1\x2f\xab\xc1\x2d\x3e\xde\x7f\x92\xb3\x7f\x19\x77\x3d\xde\x3a\xd9\xa3\x64\xbb\xce\xf0\x66\xca\xda\xf2\xa3\xba\x38\x8a\xd5\x51\x31\x5f\xd6\x2c\x90\xbd\x84\xe6\xd4\xdc\x59\x46\x0f\x61\x7b\xeb\x52\x0b\xbf\x54\xfb\x97\x08\xf5\xdb\x2d\xcd\x70\x2b\xe3\x32\x82\xf2\xdb\xaf\xb2\x68\x6d\xf8\x6f\xf7\xb7\xff\x5a\x70\x7f\xbb\xd5\x8c\xa2\x77\x2a\x03\xa2\xa5\xbc\x63\xf3\xb1\xfc\xd3\x3c\x94\x7f\x9a\x87\xc1\x9b\xab\xfa\xc0\x8b\x85\xb3\xf8\x9b\x5d\x7f\xb3\xe7\xf5\x06\x4d\x60\x11\xed\xbf\x98\xcb\x58\x0c\xeb\x2d\x7d\x95\xaf\x97\x77\xd2\x4e\xb6\x51\xe0\x8a\x3e\xdf\xa2\xf0\xf2\xf9\xe8\x53\x0c\xf3\x95\x92\xc5\x57\xa9\xa2\x3a\xf6\x29\xfe\x15\xea\x97\x37\x26\xa9\x5d\xf1\xf8\x57\x76\x2b\x61\x5c\xcf\x7a\xe3\xf4\x5f\xde\x5d\xba\x15\xbb\x8b\xb7\xff\xe7\xcd\x2a\x19\xfd\x53\x36\x6e\x83\x97\xc0\xcf\xfe\x30\x99\x57\xb1\xd9\xa9\x32\x50\xfd\x12\x80\xab\x74\x88\xb7\xf1\x81\xf2\xd6\x60\x09\xdb\xaf\x6c\x02\x7b\x1f\xf0\x54\x7f\x58\x21\xac\xbe\x58\x00\x9e\xb7\x00\x3c\xbf\x03\x90\xef\xa3\xc0\x7b\x15\x27\x6e\x77\x3c\xf6\x86\x5d\x5a\x9a\xac\xd2\x58\x7c\xa5\xe3\x4d\x43\x9d\x38\x8a\xe7\xce\x65\x61\x9a\xcd\x1d\x01\x0e\x4b\xed\xaa\xa7\x55\x7a\xc0\x9b\xd8\x57\x5b\x09\xcf\x61\xc7\xf6\x52\xb4\x50\xfb\x92\x71\x49\x9b\x72\x8f\x47\x71\x43\x96\xaa\xfd\xc0\xa9\x8b\x7b\xcf\xf7\xad\xa7\xe6\xce\xf4\x55\x5b\x2e\x9e\xff\xdb\xe6\x31\xa5\xa5\x55\xfd\x9a\x3f\x0c\x7a\x97\x90\xa0\xe2\xb4\x5d\x6b\x58\xfa\xff\xaa\x5e\xad\xf0\x8a\x3b\xc0\x6e\x9a\x3a\xe3\x19\x7a\xba\x95\xc7\xde\x54\xa0\xb9\x0a\xf9\xcb\xcd\xb3\x76\xe8\x66\x8a\x5a\x83\xf3\x3a\x73\x19\xf4\x6e\x9d\xd4\xb8\x86\xd3\xb8\xb0\xdd\x6c\x1a\x35\xa7\x90\x82\x4b\x0c\x4a\x4e\x79\xd7\x5d\x34\x4d\xa7\xff\x1b\x25\x30\x2d\x38\x75\x2b\x38\x56\x93\x5a\xdb\x78\x03\x44\xea\x05\x69\xd0\xad\xad\xd3\x95\xea\x17\x56\x13\xff\x82\x47\x41\xfa\xbb\xc6\xe0\x39\x86\x1f\xa7\x5b\x60\x73\x69\x0e\x2a\xaf\x29\xcb\xa5\x61\x0d\x20\x50\x73\x4c\x34\xe6\xbe\xb8\xe5\xc7\x1d\x3f\x38\xf2\x7f\x38\xdc\x9a\x75\xe8\xde\xab\xc3\xf1\x3c\xad\x74\xa8\xaf\xb0\x9c\x30\x51\xfc\x7f\x19\x34\xb4\xf0\x00\x68\x9b\x0f\x0b\x11\x57\x4b\x04\x31\x44\x87\x5d\x4f\xa0\xbd\xe6\xe1\x78\x58\xf1\xc0\xc7\x6d\x1c\x87\xc7\x66\x93\xc3\x97\xb9\x83\x04\x91\x41\x51\x4b\x84\xa1\xde\x78\x69\x41\x30\xce\xb0\xb0\xf3\x3a\x7c\xbb\x2d\xc0\x80\x83\xee\xdf\x0f\x56\x48\x8e\xcd\x79\x4d\x3d\xbb\x61\xee\xd8\xdc\x53\x29\x37\x40\x13\x20\xfb\x8f\x8d\x29\x44\x3a\x0b\xd0\x49\x71\x82\xb1\x95\xe1\xd8\xb8\x26\x82\x7b\xde\xd4\x79\xa3\x48\x8b\x2d\x2c\x66\x91\xba\xd2\xf0\x90\xe7\x3a\x26\x77\x8a\x22\x46\xb6\x5d\x70\xdc\xd3\x0b\xf0\xe1\xbf\x92\x97\xa0\x61\x52\x88\x60\xb5\x0d\x5a\x5c\xf1\x3c\x82\x8a\xe4\x02\xc0\xe3\x66\xef\xe3\xba\x37\xe6\xb8\x5f\x1b\x03\xa6\xc3\xc0\x98\x3b\x3e\x6c\x43\xc1\x31\x4e\xd7\x1c\xd1\xa5\xb1\x18\x0b\x46\x37\xad\xd8\x76\xb0\x83\x53\xf0\x07\xdf\xef\x3b\x62\xaf\x28\xd1\x47\xf2\xf2\x33\xe1\x70\xc1\x91\x67\x17\xcf\xa3\xfa\x01\xad\x3d\x3c\x74\x2f\x03\xe9\x49\xd0\xc6\xde\x2e\xce\xa8\x23\x0d\x74\x6e\x5d\x8b\x44\x1e\xef\x3f\x0c\x68\xee\x65\x9b\x69\x04\xa6\x97\xe5\xc4\x51\x39\x43\x2a\x19\x1d\x79\x3e\x53\xdb\xd4\xf0\xe2\xc3\x91\x0c\xee\x4e\x29\xec\xeb\x16\xd4\x23\xdb\x8c\xc4\x91\x65\x64\x1f\xb0\x03\xf5\xd0\xf5\xe9\x23\xaf\xde\x93\xdc\x8a\x88\xad\xd2\x1d\xf9\xf9\x15\x2f\x5c\x8f\x81\x69\x7a\xa6\x2c\x11\xb6\x02\x72\x2e\xdf\x19\x60\xf1\xb8\xf2\x08\xe8\x33\x34\xbb\xd9\x46\x10\x62\x4f\xe0\xf7\x30\x37\xd2\x3f\xfa\xc7\xf9\x79\xfe\xbc\xae\x61\xc4\xb4\xfa\x40\x90\x25\x05\xb4\xcd\xaf\x3b\xe1\x89\xaa\x7f\x5b\x6b\xb9\x76\xf6\x1d\xf9\x88\xfe\x8f\x56\xce\x88\x5f\x85\xc1\xae\x21\x1f\x5a\x11\x50\x5c\x60\x46\xe2\x6e\x80\x0e\x8d\x8e\x48\xa0\x34\x67\x42\xa3\x37\xca\x5d\x34\xc4\x9c\xc6\x3e\x70\x9b\xd0\xb0\x9d\x6f\xbb\x6a\x8c\x1f\xee\x8d\x5b\x30\x84\xd1\xce\xeb\xc8\x6d\xf3\x33\x6b\x47\x1e\x3b\xc3\x01\x57\x03\x46\x2d\x81\xc4\xae\xa3\xab\x12\x82\xd1\x1a\x1e\xae\x50\x75\x6d\xde\xc2\xd3\x30\x6a\x94\xb4\x8f\x51\x69\xb2\x27\x37\x95\xd3\xe0\xb2\xe9\x44\x71\x03\xcc\x70\x4d\xe2\x7b\xe0\x74\x35\xc8\x58\x48\x05\x87\x2c\x17\x30\x56\xd1\x85\xd3\x67\x2b\x05\xde\xee\xa9\x05\x3b\x3c\xf6\x7c\x64\xf0\x38\x18\x2a\x1f\xf9\x74\x08\x91\x85\x82\xf8\xe5\xef\x78\x38\x16\xa3\xb7\x1f\x0c\xa9\x4f\x8b\xa6\x83\xb7\x07\xe1\x0c\x9e\x0a\xed\xae\x65\x32\x97\x11\x7f\x19\x09\xf3\x97\x21\xc9\xb1\x50\x07\x13\xcd\x46\xf8\x23\x68\xc1\x1c\xf9\xf8\xc8\xa8\x14\x48\x77\x1a\x83\x52\xc7\xe1\x97\xe3\xf0\xbc\x74\xf3\x38\x7c\x1b\x9e\xb7\xe1\xb7\xf6\x40\x87\x1d\x81\x3d\x8e\xe8\xfa\x32\x10\x9a\xaa\x23\xaa\x3a\xbb\xd2\x88\x78\x08\x4f\x50\x55\xe2\xfa\xac\xa6\x6a\x0a\x8d\xba\xe1\x9e\x11\x76\x4c\x5e\xd0\x7c\xcb\xd1\x78\x3f\xf2\x44\x96\x99\x12\x87\xd0\xa7\x98\x29\x1e\x83\x86\x8e\xc3\x94\xe3\xd8\x61\x3a\xaf\x6b\xd0\x87\xb6\x8e\x03\x9b\x16\xfc\x40\xc5\x90\x15\x04\xc1\x74\x4d\x64\x02\x1e\x94\x36\x3c\xcc\xd4\x5b\x20\xb3\x16\x1c\xec\x16\xb0\xa0\xe6\x3a\x8a\x6e\x71\xa1\xb2\xb8\x0a\xa2\xd9\xe2\xc7\xae\x8b\xc1\x5c\x45\x89\x1a\x59\x4d\x6e\x7a\x5c\x4d\xf1\x75\x53\xf9\xd0\x30\x67\xc0\xdc\x9d\x19\xa5\x41\xa1\x36\x17\xc6\x6a\x8b\x71\x58\x1f\x7a\x94\x4c\xd5\xcd\xdb\x2d\x82\xca\x5f\xf9\x00\x0d\xb3\x31\x5d\xf1\x00\xbe\xf9\x9f\xa7\x11\x8b\x7c\x94\xe0\xda\xed\x17\xf8\x61\x91\xdc\xeb\xdf\xff\x66\xf9\xf5\x15\x9a\x97\xa6\x66\x1e\x17\xf5\x91\x51\xc3\x7f\x4a\xc6\x1e\xad\x43\x2f\xa9\x3d\x8e\x5e\x9a\xd7\x71\xd9\x21\xa6\x8b\xc3\x4e\x8d\xa3\x84\x39\x37\x50\x93\x30\x88\x86\x1e\xbc\x36\x41\x8e\xc2\x58\xc9\x95\x9b\x49\xd8\x67\xd7\xb0\x04\xcc\x1c\x70\xa4\x73\xd8\xfb\x2a\x02\x4e\x09\x92\x9d\x94\xb6\x47\x10\x8e\xbf\x1f\xf7\xdb\x1d\x14\x9e\xa3\x14\x60\x72\xc8\x6f\x77\x22\xed\xe1\x98\xc8\x6f\x77\xdc\x78\xf5\xdb\xdd\x4d\x6f\x77\x29\x0c\xc8\x91\xfd\x6f\x77\xbc\x54\xf8\xb7\x8f\x9b\xfb\x04\xf2\xce\x30\x43\x05\x50\x4f\x13\x2b\x42\x5c\x31\x1f\x30\x80\x84\xfe\xb7\xbb\xba\xe5\x37\x40\xc3\x0b\x04\x0a\xd4\x11\xbe\xe0\xf5\xdb\x79\x2b\xd7\x6f\x97\x71\x37\xc1\x10\x35\x7f\x7b\x98\x63\x67\xfc\xc2\x2d\x7e\x77\x41\xeb\xb7\x73\x67\xc7\x6f\x0f\xb8\x42\xe4\x47\x3a\x8e\xe2\x26\x11\x77\x8b\x9b\x3c\x67\x8e\xaf\x4d\x33\x82\xb8\x41\xa1\xb8\x79\xc3\xd1\x27\x80\x4c\x64\x27\x69\xb1\xe9\xa7\xb8\xe4\xa9\x7d\x38\xec\x1d\x2c\x8e\x9b\xa1\x8b\xeb\x33\xef\x0f\x2a\x93\x8b\xd8\xdf\xaf\x40\x82\x22\x30\x18\x0c\x83\x72\xbb\xb8\xa1\xa1\xc9\x86\x81\xd8\x76\x6e\x92\x63\x11\xbc\x70\xa8\xc3\x20\x8a\x37\xa0\xbf\xd9\x1f\x8e\xaa\x23\x34\x94\xaf\x2b\xf3\xc1\xe0\x7a\x1c\x41\x57\x92\xde\x38\xf5\x24\xdf\xc0\x67\x84\x24\x97\x57\x68\x8e\x16\x3a\x1c\x6f\x05\x3f\x3a\x7a\xe6\x32\xff\xf0\x18\x41\x61\xa9\x2c\xb3\x4b\xe4\x34\xec\xb3\xc3\x14\x42\xc1\x43\x91\x30\xb0\x41\x71\x5e\x0f\x28\x12\xc7\x01\x54\x2a\x1b\xdc\x69\xf8\xb6\xea\x43\x0d\xab\x2c\xe4\x78\x6d\xba\x60\x36\x9b\x44\xbb\x01\x75\x92\x6d\x97\x20\x6e\x33\x2e\xf3\x36\xe1\x04\x80\x80\x50\xb7\x7c\xdc\x20\x16\x4f\xca\xbc\xcd\x39\x3d\x8a\x8c\xf6\x79\x7c\xb5\xcc\xdb\x42\xd5\x3b\xec\xbb\x1f\xd0\x69\x84\xc8\x95\xf3\xc6\xb0\xf5\x14\x36\xe4\xd9\x57\x35\xd7\xe7\x8d\x19\x47\xac\x16\xfa\x93\xbf\xfd\x08\x9a\x5f\x75\xc3\x7d\xc1\x5b\x70\xfb\xa9\xa8\xf1\x7e\x45\xc1\x57\x72\x7e\x25\xe2\x2d\x0d\x35\xe6\x76\x2a\x1e\x50\xff\xe8\x10\xc4\xe0\xf0\x0a\xdb\x29\x01\x30\xce\x2f\xf3\xf6\x08\x78\x63\xa5\xcc\x7a\x54\x92\x90\x63\x0e\x41\x4b\xb8\x27\x44\xf0\x47\xa8\x32\x80\x98\xcf\x6f\xde\xfe\x33\x0b\xf4\xf2\x5f\x22\xbb\xd4\x4b\xb8\x64\x74\x25\x3d\x7c\x74\x6b\x56\xbc\xe5\x84\xe1\x04\x18\x5e\xfe\x22\x50\x83\xd4\x70\x0b\xb1\xa1\xcc\xfb\xd7\x8d\xb5\xa2\x28\x15\xeb\xa5\x70\x50\x4b\xba\xc0\x87\x74\xcb\xbc\xc5\xae\x01\x4a\x96\x5b\x9a\xea\xb7\x7c\xcd\x57\x10\x8e\x12\xbc\xba\x41\xc8\x9e\x74\xb0\xc3\x0e\x5e\x3b\x28\xf3\x46\xb3\xb8\x0c\xa8\xcc\x36\xc0\x29\x73\xae\xfa\x28\x57\x61\xd8\x5b\x98\x6f\x59\xab\x1c\xec\xd8\x94\x6b\xc1\x3b\x49\x65\xf1\x13\x54\xc8\x66\x42\xb5\x17\x29\x0b\x73\x1e\x37\x29\x94\x85\x15\x7a\xb9\x26\xdf\x70\x95\x4c\xf1\x8e\x21\xf1\xa8\xd7\x5e\x92\x1e\xeb\x83\xc5\x6b\x43\xe9\xed\xda\x8c\x72\xed\xb4\x2a\x1e\xfd\x59\xb9\x15\xbe\x51\xf4\x3c\x6d\x35\x1e\x72\x29\x8f\x97\x5f\xaa\x35\xba\xe2\x3a\xae\x4f\x16\x35\x80\x54\x34\xc0\xbc\x66\x18\x44\x4d\xfa\xc4\x76\x6c\xdd\x32\xda\x8b\x35\xa8\x1a\xd5\x40\xe0\x65\x8b\x65\x8d\x7e\x82\x2a\x98\x46\x91\x38\x6b\x4e\x4a\x65\xdc\x54\xd6\x0c\x0f\x30\x1d\x5d\xd6\xce\x83\xa2\x65\xed\xda\xbc\x12\x58\xc2\x0e\xce\xc4\x0e\xd5\x61\x88\xce\x92\x79\x52\xa6\x6c\x67\xdb\x30\x87\xc1\xbe\x42\x0f\x27\x8e\x27\xe7\x4a\x40\xab\x13\x3c\x4e\x23\x15\xc4\x20\xc4\x88\xe5\x84\x12\x72\x95\xb2\x1d\x2a\xff\xd5\xa6\xad\xa5\xa2\x93\xd0\xb6\x43\x18\x6e\x37\x78\x0d\xdf\x6e\x5a\x37\x8d\xdb\x6e\x0a\xf0\x5a\xad\x71\x14\x01\x0b\xb5\x1c\x6d\x00\xf2\xd8\xc7\x80\x98\x38\x04\x67\xf7\xda\x14\xe9\x2f\x9f\xec\x58\x9f\xef\xc2\xeb\x49\x8b\xa4\xc7\x8e\xab\xcb\x85\x04\x0c\xcb\xcb\x6e\x7d\x1e\x81\xca\x0b\x65\xd7\x3b\x0f\x01\x4c\xe7\x04\xd1\x2a\xba\x4f\x38\x03\x58\x76\x69\xbb\x25\x7b\x30\x37\x5f\x76\x0f\xc7\x1e\x5d\xd2\x6f\xd7\x0b\xc5\xcb\xce\xb3\x27\x65\x0f\xec\x6c\x77\x5c\x0b\x0b\x82\xe0\xb0\x19\xd9\xc3\x91\x75\x00\x83\xc9\xfd\x40\x14\xe9\x64\xcc\x0e\x4e\xe5\x40\xff\x47\x64\x77\xd4\x99\x3d\x97\xc9\x3b\x76\xbb\x7b\x1e\x94\x05\x7e\xcf\x0c\x3c\xeb\x95\x90\x9b\xd9\x7e\x01\x18\x3a\xe8\xcf\x81\xf6\x6a\x2f\x6c\x30\x76\x8d\x35\x4c\x9c\x3c\x0e\x52\x74\x57\x7b\x49\x38\xfb\x52\x70\x30\xe5\xfe\x30\xa7\x62\xcd\xe6\x3c\x4e\xd7\x7d\xbf\xc3\xa9\x1c\x7f\xf0\xbd\x5a\xa1\xe0\x0f\x8f\x31\x0f\xcd\x81\xc9\x00\xc8\xb2\xdf\xee\x71\x53\xae\x02\xd6\x12\x7c\x18\xba\x95\xe2\xf4\x6e\x3f\x22\xcd\xe8\x22\x1d\xec\x1d\xd3\x40\x85\x7a\x52\x45\x18\x8a\x87\xf8\x26\x84\x9d\x80\x20\x18\xf3\x49\x8f\xf5\x97\x62\x62\xd6\x75\x9f\x7f\x29\x2b\xd4\xed\x66\xea\xaa\x7b\x25\x40\x99\x31\x32\x32\x48\x00\xa7\x71\xf7\x2c\x48\x24\xa5\xeb\x78\x2b\xcf\x1b\x42\x7d\x56\xe9\xaf\xe4\x95\x23\x01\x20\x4d\x29\x40\x14\x8b\x92\xd3\x12\x6a\x1d\x11\x16\x21\x58\x54\xde\xe9\x2b\x88\x17\x07\x09\xe2\x6d\x56\x44\xc8\xdf\x92\x4f\x04\x6d\x84\xbe\x7a\x9c\x6b\x00\x45\x20\xaa\xc7\xde\x28\xd0\xc5\x34\xec\x8f\x1e\x95\x06\x3c\x4e\xed\x3b\xeb\x16\x24\x84\x3c\xe2\x57\x30\xc8\x28\x78\x16\x47\x54\x96\xd6\x7a\x6c\x3e\xe9\xa6\x12\x19\x8d\x17\x5c\x26\x51\x9a\x7f\xe0\xc1\xc6\xd2\x3c\xd9\x9d\x13\xa5\xc5\x36\x24\x58\xec\x95\xff\xdc\x79\xd6\xbf\xdb\x33\x32\xc4\x75\x1e\x27\x59\xa9\xc1\x29\x0a\xe0\x66\xba\xd4\xa8\xfa\xd8\x41\x69\x8f\x6e\x4d\x59\xdb\x8a\xbe\x1a\x23\xd0\x26\x38\x70\xb0\x55\x6d\x63\x12\xd7\x0d\x84\x4a\x24\xd0\x02\xb1\x15\x7d\xc7\xb1\x70\x7f\xeb\xa2\xc8\xe4\x1e\x36\x75\xd8\x73\xf9\x54\x3e\x2a\xed\xd7\xa4\x91\xb2\xf3\x05\x6d\x8c\x6a\xac\xa6\x04\x19\x94\x8c\x16\x2c\x39\xc3\x83\x2d\x0d\x41\x31\x64\x4b\x57\x83\x1b\x2e\xc6\xa8\x89\x42\x84\xe9\xfc\x62\x57\xb6\x95\x16\xf2\xe2\x66\x3c\x67\x5c\x5a\xa8\xfa\xb3\xda\x15\xb0\x85\xab\x50\x20\x5e\x29\x5d\xbb\x2e\xcf\x2e\x0d\xbb\xbf\x35\xd0\xd6\x19\xb4\x77\x46\xcb\x8e\xf6\xb8\x57\x4c\xfa\x0b\x0d\x88\xf7\x4b\xf2\xe6\x9c\x70\x97\x9e\x21\xb4\x0e\x08\x08\x5f\x55\xf6\x44\x9a\x1a\x56\xac\xab\x7b\xf8\x16\x16\xa2\x3c\x60\x82\x2a\xc3\x37\x9c\xee\xaa\xae\xf0\x36\xcf\xca\x10\xd4\x49\x3e\xcf\x8b\x99\x15\x04\xc0\xcc\x71\x6a\xc5\xb0\x8c\x7a\x02\x17\xa3\x28\x8b\x32\x0c\xd2\x29\x34\x40\x49\x77\x01\x9c\x06\xa9\x7c\xad\xbf\xce\xbe\x34\x17\x6e\x97\xfe\x98\x8e\x1a\x07\xde\xcd\xac\xfa\xc5\xfe\x91\x14\x03\x8d\x3a\x07\x28\x0b\xfa\xb4\x6a\x2f\x4c\xd5\x39\x34\x0f\x1b\x3a\x35\x5f\xe7\x6c\xe2\x7c\x9d\xc7\x1b\xa1\x75\x66\x88\xac\x4c\x56\x4c\x32\xdc\x76\x96\x56\xc8\x76\x75\x81\xaf\x1e\x65\xa6\x72\xb9\xc4\x16\x4c\xeb\xb5\x2c\x5a\xd7\x5d\x6c\x6f\xf2\xb9\xf1\xda\x78\xdd\x66\x04\x6d\xf3\xf8\x89\x07\x8b\xeb\x16\xa5\x01\x06\x41\x07\x59\xb7\x9d\x86\x0e\x4e\x6a\xd6\x0d\x87\x5b\xeb\xd6\xd0\x70\x57\x6c\xb4\x44\x88\x45\xde\x62\x38\x9e\x9c\x9f\x15\x2a\x69\x80\x45\x4e\xde\xd7\x51\xb9\x2e\x53\x25\xde\x87\x34\xf1\x28\x1e\x84\x88\xcf\x01\x39\xbd\x1e\x3e\x41\x2d\x54\xd7\xf1\xdc\xab\x71\x48\x2e\xc3\xaa\x4f\xcf\x0f\x5f\xaa\xd9\xd3\x7c\xc5\xcc\x25\x45\x8a\x7a\x6c\x2e\x36\xa3\x9e\xbe\x6f\xb8\x8b\x6e\x40\x35\x97\x71\xcd\x5c\x3d\xb6\xf3\x8f\x61\x06\xd0\xd4\x57\x26\xc3\x23\xe4\xc1\x11\x16\xbc\x31\x08\xc8\x65\x7f\x80\x66\x3a\x66\x33\x94\x61\xaf\x78\xa5\xd2\x3c\xd7\x5b\x95\xa8\x6e\x75\x01\x34\xc4\x5b\x39\xac\xbc\x4d\x5f\x11\x2c\xd7\x71\x8d\x7e\xad\xc8\x98\xca\xbb\x56\x6b\xf5\xea\x84\xdf\xa7\x68\xd4\x0d\x20\x9d\x2b\xa1\x9a\xde\xa7\x78\x0e\xc0\x3c\xaf\xea\xee\x25\xf8\x02\x0f\xa1\x17\x5c\xa6\x75\x1e\xa0\x04\x30\x93\xe5\xcb\x64\x31\x93\x76\xdf\x1c\xe0\xd0\xb3\xad\xf4\xb5\x7a\xfe\x7b\x8d\x8b\x0b\x6b\x65\xc7\x49\x3a\x4a\x2f\x26\x33\x87\x91\xb0\x70\xff\x08\xd0\x18\xc2\xd4\x1a\xd6\xeb\x26\x2f\x72\x6d\x00\xb3\xba\xe2\xce\x62\x82\xa2\xc0\xc2\x18\xd6\xc4\x30\x86\xfd\x76\xf6\x4f\xd9\xe1\xc2\x7e\x3f\xeb\x37\xf8\x2b\xf6\xd4\x50\x87\xaa\xbe\x04\xa9\xb0\x5d\xc8\x92\x40\x27\x8f\x00\xd4\xd2\x07\x16\xe0\x5b\x9e\x7f\xf4\xec\xdd\x15\x1c\x70\x57\x39\xb9\x0e\xe6\x5d\x98\x2d\x81\xb2\x57\xd0\x6c\xb3\x89\x64\x81\xfa\x9a\x6d\x8d\xb9\x32\x3a\xdd\x99\xf0\x46\x0c\x43\x7d\x37\x7a\xd4\xd0\x14\x99\x9f\xbd\x98\xa3\xbd\x5c\x19\x46\xa1\x57\xa8\x3e\x2a\x23\x10\xf1\x6b\x5c\xec\xe4\xf3\x5d\x0c\xa8\x40\x54\x4f\x06\xaa\x79\x19\x5e\xea\x3d\x2e\xd8\x0e\xa9\x2d\x20\xe0\xd3\xc0\xae\xe0\xcf\x8c\x61\x5a\x4f\x81\x47\xa9\x6e\x1b\x2f\x72\x01\xc0\x0a\xa6\xa2\x4b\xd3\x9e\x16\xab\x32\x06\xfa\xb1\x0b\x30\xd4\x75\xe2\x0f\x43\x05\xc6\x8e\xf8\x18\xab\x47\xfe\xee\xac\xfd\x0d\xe6\x9c\x2d\xb5\x0f\x66\x38\x70\xb3\x1e\x27\xd0\xf1\x3a\xa8\xc2\xb1\x40\xa5\xbc\xe6\x4d\x83\x89\xe2\xe6\x8d\xf1\x2c\x7c\x89\x48\x81\x0d\x5d\x94\x65\xda\x15\xf7\x1c\x86\x6d\xd2\xb7\xb6\xb1\x1f\x5a\xe1\x28\x2c\x4d\xfa\x04\x6f\xce\x04\xca\xf1\x82\x74\x42\xa5\xb6\xdb\xfb\x27\x60\x72\x73\x49\xf1\x9c\xf7\xc3\xa9\x33\x3a\x3d\x25\x68\xc1\x5b\x19\x40\xe3\x35\x36\xe1\x4c\xae\x56\xcc\x62\x52\xf2\xea\x6f\xce\xeb\xdc\xc8\x80\xaa\xcd\x2c\x2f\x39\x2a\x71\x93\xfa\x10\xb3\x85\x78\x6c\x7e\x31\x5c\xdb\xc0\xea\x8a\x3d\xe5\x67\xd8\xb4\x2d\xab\x8a\x85\x8e\xd3\xe6\x86\x46\x04\x92\x7b\x85\x7b\x24\x94\xb7\x88\xe0\x2d\xf1\x01\xd5\xc5\xaf\x37\xf4\xa8\x71\xda\xd9\x9b\x8b\x55\x0f\xae\x52\xda\x39\xf4\xab\x6d\x3c\x7a\x5d\x79\x35\x53\x3d\x77\x0b\xef\xb9\x1f\x0d\x27\x18\xea\x99\xae\x1b\x93\xea\x99\x16\xbe\xa4\x51\x4f\xbd\x2d\xa2\xb9\x49\x8a\x4d\x73\xb3\xe3\x99\xda\xe6\xf8\x32\x59\x73\x3b\x49\x81\xc2\xf5\x8f\xe6\xf8\xa2\x38\x68\x13\xaa\xda\x7f\xb4\xab\xdb\xfa\x9b\x8f\x7e\xd6\xd5\x79\xc1\x7a\x8a\xab\x79\x2e\xbb\x09\x55\x9d\xcd\x25\x36\x06\x6d\x83\x47\x9b\xa7\xfb\x7a\x48\x8c\xd4\xc6\xb7\x38\x45\x29\x62\x8a\x54\x5b\xe7\x3b\x0d\xda\x83\x08\x38\x21\xb9\x3b\x05\xb7\x61\x47\xdb\x7c\x33\x14\x21\x6f\x81\x6a\xd3\xa3\x18\x7f\xf3\x72\x2e\x42\xad\xc4\x2a\x52\xcb\xb8\xe3\x92\x40\x54\xb1\xcb\x24\xda\xed\x58\x4b\x1b\x15\xbd\x8d\x5a\xde\xf6\x91\x75\x2d\x47\x49\xea\xbc\x43\xd1\x11\x7c\xd3\xc7\x81\xee\xd7\xdc\x00\xab\x29\x24\xc3\xed\x7e\x9b\x71\xbb\x0d\x47\x42\x6d\xec\x8a\x6c\x63\xff\x63\xcb\x76\x4d\x7e\xe3\xaa\x24\xa6\x40\xed\x97\xa8\x5c\x20\x19\x1d\x67\x2b\xbc\x21\x04\xb7\xb4\x29\x40\xea\x96\x3c\xfb\xd2\xa3\xc7\xad\xcf\xc2\xdd\xed\x64\x75\xb2\xf0\xc0\x20\xb6\x69\x48\x1b\x3e\xf6\x6b\x34\x09\x81\x15\xb0\x86\x1b\xf2\x40\x9c\x52\x04\x4d\x80\x06\xb6\xb9\xf9\xa9\x7a\xb7\x77\xc1\xda\xb7\x78\x0e\x76\x19\xc6\x06\x18\x6e\x04\x7d\x3b\xb7\x35\x77\xf4\xc8\x63\x8f\x8d\xc5\xb8\x79\xdc\x25\x88\x5a\x09\xa6\xdd\x7c\x11\x96\xae\x8d\x45\x78\x85\x4d\x91\xfd\xd5\x8c\x68\x77\xe9\x48\x38\x9b\x89\x55\xac\xbe\x68\xaf\x4f\x34\x0c\xd4\x76\x33\xe0\x0d\x50\x47\x24\xcc\x66\xdb\x34\x5b\x63\x2b\xec\x2f\x88\xe0\x06\x5b\x0b\x6a\xb6\x5e\x48\x10\xec\x31\x91\x2f\x56\xf3\x83\x3a\x9c\x22\x1a\x1c\x4b\x53\xcb\x25\xf9\x73\x00\x0a\x27\x60\xcc\x9b\xe2\xe6\x76\xcf\x07\xf0\xd7\x2f\xba\x52\xdc\x6c\x71\x04\x7c\x7d\x19\x67\xfc\x4a\x98\x94\x74\xb3\x25\xd0\xac\x01\xdf\xec\x09\x6f\x16\xdb\x4d\xdb\x2c\x9c\x3f\xae\x4f\x58\x81\xea\x93\x2f\xab\x51\x94\x45\x22\x0c\x83\xfb\x54\x82\xc7\x75\x05\x7d\xea\x25\xfd\x38\x7b\x32\x9f\x14\x57\xcb\xf6\x45\x3e\x77\x2b\xe6\xe0\xe0\xc5\x32\x96\xd3\x05\x5a\x32\xf4\x45\x6f\x04\xee\x7c\x19\xb8\x2f\x21\x53\xe5\xbd\x40\x82\xd8\xcb\x08\xd2\xd6\x41\x61\x51\xdd\x44\xa2\x8f\x62\x09\x6c\x27\xb7\xde\xf7\x25\xe8\x25\xf7\x1d\x6f\xbf\xf7\x45\x63\x2d\x20\x17\xa3\xa8\xac\x84\xcc\x37\xc1\x5c\x16\xec\xab\x7c\x58\xb7\xe9\xe8\x0e\x3b\x6b\x44\x5f\x6f\x33\xdc\x64\xf8\xb7\xab\x7a\x82\x54\x5d\x3d\xe8\x4f\xf9\x30\x4f\xda\xa3\x3d\xf6\xda\x31\x0f\xd0\x79\x43\x70\xdf\x43\x5c\xa4\x96\x61\xd3\x14\x2e\xf7\xec\xa9\x05\x62\xf9\x2f\x83\xa5\x5e\x74\x8e\xa0\x17\x18\x2d\x7e\x4c\xa3\xf4\xc2\xcb\x0f\x49\x13\x00\x86\xf1\xa0\x81\x1a\x1d\x06\x39\x41\xd3\x8b\x3e\xce\xac\xa0\xd0\xf6\xed\x0a\xc8\x5e\x70\x3f\x6d\x2f\x41\x85\x2c\x5d\xef\xec\x25\xcf\x1b\x5c\xca\x0c\x14\x92\xaf\xce\x3d\x8e\x04\x51\x06\x49\x5c\xb1\x13\x5c\xfa\x1d\x9d\x11\xe9\x7a\xa9\x3f\xe8\xad\xa8\xd4\xa6\x53\x73\x78\x19\xdf\x5f\xba\x1c\xac\xf6\xca\x43\x28\xde\x60\x3e\x78\xa3\x66\x52\x1d\x15\xb1\x7a\x73\x33\xa4\x9a\xae\x8b\x00\xa4\x0c\xba\xad\x06\x08\x78\x0e\xad\x27\x74\xfc\x3d\x30\x4d\x2f\xce\x12\x60\x25\x90\x57\x7e\xe3\x16\xf9\x2e\x7d\xe8\xb5\x23\xfa\x62\x73\xb9\x38\x06\xbb\x6d\xaa\x77\x7b\x96\x43\x39\x3f\x7e\xdc\x76\xfc\x9a\xc6\x55\x89\x55\xc7\x1c\x1b\x7d\x99\x72\xc3\x15\x33\xaa\x85\xb8\xa9\x73\x1a\xcd\x0c\xc5\x8d\x03\xe0\xbd\xe5\xc9\x6d\x89\x20\x5c\x57\x01\xdc\x58\x35\x85\x62\xd3\x32\x97\xa9\x01\x9a\xdd\x21\x48\x6e\xd3\x79\x52\xe1\x70\x9f\x16\x2d\x72\xa9\xb8\x28\xe6\x3b\x6f\x06\xcd\x04\x4f\x65\x0f\xa8\x41\x56\xee\x96\x1d\xaa\xa3\xd6\x22\x96\x1e\x05\x69\x4e\xe7\x39\xc7\x38\x36\xa2\xdc\xf8\xac\xde\xe7\xc2\x73\x20\xf6\x9b\x2b\x39\xdd\x96\x81\x00\xb2\x79\xd5\xd5\xf1\x93\x35\xa5\xe5\x25\x2c\x98\x8a\x14\x88\xab\x5a\x7a\xcb\xdf\xc5\x25\x8f\xf2\x92\x7d\xc9\x26\x1d\x19\xa7\x98\x9b\x33\xfb\xed\x3c\xa1\xe0\x50\x98\x35\x2b\x5f\xd3\xeb\xcd\x44\xf5\xde\xee\xd9\xb0\x9e\x6a\x6e\xc3\x54\x98\x80\xf3\xd0\x31\x5e\x6f\x39\xac\x76\x2d\xb2\x30\x69\xbc\x5a\x0c\x2e\x5f\x53\xac\xe0\x5b\xfe\xbb\x95\xdd\x1c\x6e\x57\x99\x08\xab\x05\x86\x0f\xc5\xd1\xf9\x18\xec\x96\x17\x86\x46\xf2\x3f\x0d\x44\x33\xbb\xa6\xe4\x8e\x79\x1c\x82\x51\x0b\xc8\x34\x37\xfb\xca\xb7\xee\x55\x4b\xfd\xb4\x21\xa3\xc1\xe1\xd2\x2d\x31\x84\x53\xd3\xd7\x09\x45\xe1\xf2\x14\x34\xa3\x00\x87\xed\x71\x53\x44\x6f\xe3\xb6\x07\x42\x06\x09\xbb\xde\x7b\xcb\x38\x20\x36\x82\x62\xcd\x73\xcb\x47\x88\xb9\x29\xaa\x1a\x27\xbd\xe0\xd5\x10\x1d\xba\x3f\x9b\x22\x6c\x35\xaf\xf0\x52\xb7\xd0\x4e\xbe\x38\xbb\x3e\xed\x1f\x96\xc6\x8a\x7f\xc4\x5b\xc6\x95\x71\xc7\x11\x98\xae\xc1\xaa\x56\x93\xea\x25\x80\x81\xcb\x87\xd6\x36\x69\x1f\x17\x86\xb7\xf6\x75\xf5\xb5\x85\xbb\x41\xd5\x52\x87\x2f\xd6\x42\xdd\xf4\xc9\x1f\x81\x7c\x38\x52\x90\xa5\x5a\x1b\x37\xf1\x90\xb9\x63\xbb\x93\x44\x39\x7a\xd0\x8a\x4b\xd5\x0e\x07\x19\xaf\x53\xa4\x60\xb3\x26\x87\xc9\xc2\x80\xb8\x18\xb8\xdb\xdc\x3a\x01\xff\xdd\x73\xab\xef\x24\xda\x73\x48\xf7\xf2\xe7\xd2\x90\x14\xfe\xb4\x00\xff\x05\x5e\x14\xc8\x2b\x33\xfa\x1f\x2f\xb2\x73\x84\xda\x34\xbd\x7e\xdc\xcb\x9e\x96\x78\xb9\xdb\x04\xd6\xeb\x6b\x62\xf1\xe5\xa2\x4b\x38\x95\xf0\x72\x05\x1d\x19\xe8\xd5\x18\xbc\x38\xea\x7b\x2d\xc7\x8f\x7b\x79\xb6\x80\x2f\x9f\x2a\xd4\x86\x17\x65\x05\x74\x6e\x25\x7b\xf9\xd4\x41\xb8\x86\xf7\xf2\x85\x02\xe3\x0b\x2f\x31\xd3\x41\x9b\x9c\xb5\xab\xd7\x5e\xeb\x8f\x7b\x71\x67\xfd\x78\x24\xc9\x5e\x48\x12\x5a\xc2\x9f\x00\x76\xeb\xd2\x3b\xbf\xae\xdd\x4b\xaf\xfb\xd6\xa5\x17\xef\xaf\x7f\xe9\x5a\xbb\x1e\xa9\x78\x85\x87\xeb\x09\x60\x1d\xae\xaf\xe6\x3c\x59\x9d\xc4\x78\x05\x19\xdf\x40\x82\x7b\x85\x9a\x45\xc5\x69\x6b\x96\x82\x57\xf8\x38\x3e\x81\xfc\x12\x4b\xf2\x3b\xf3\xd5\x82\xd7\x78\x3c\xe9\x95\x67\x11\x8b\x5e\xba\xf6\xf4\xca\x41\x47\x0f\x82\x10\x59\xdc\x6b\x24\xea\xd2\x0f\x3c\x91\xf5\xca\x95\x56\x3a\x07\x41\x00\x9a\x6a\xf9\x2d\xc3\xa5\x57\x7e\xdb\x4c\x9a\x40\x98\x79\x23\xb9\x7a\xd4\xa4\xec\x89\xab\x50\x3f\xee\xed\xb8\xed\xec\x8d\xd7\x32\x01\xca\xa2\x54\x73\xe0\x2d\xc6\xcc\xc5\xf7\xed\xc1\xe7\xb7\x97\xca\xa8\x78\x2c\xbb\xbd\x9f\xe2\x84\xe2\x28\xdf\x65\x21\xbe\x71\x27\xd2\x9b\x4f\x01\xbd\x93\x7c\xf0\x8c\xaf\x88\xff\xfd\xb8\x3f\xde\x28\x84\x21\xe5\x9f\x97\x2f\x8a\x52\x7f\xdc\x9f\xad\x78\xfd\x49\x21\xfa\x0b\x7a\xb7\xf0\x1f\x57\xe9\x41\x8a\x50\x56\x86\xbf\x90\x6c\x2e\xe6\xef\x3a\x57\xf1\x67\x02\xf5\x5f\x90\x91\x34\xe6\xfe\xfe\xa4\xf5\xfc\x8b\xbe\x15\x2f\x00\xc3\xf2\xbf\x1c\x73\x13\x5f\x32\x18\xdd\xa2\xf3\xc7\x5b\xf3\xf0\x30\xdc\xe9\xb6\xee\xea\xec\x7e\xdc\xe9\x7f\xdc\x29\x05\xe9\x44\xa4\x4e\xc9\xc8\xcf\x8f\xfb\xb8\xe8\x9d\x90\x24\x4a\xdb\x42\x3e\x58\xe6\x3f\x7e\x71\xbc\xf2\xfd\xe3\xed\x11\xa9\xcf\xed\xa4\x82\xe2\xf3\xc7\x7d\xb0\x68\x6b\x6f\xf7\x7c\x68\x3b\x4a\x90\x3e\xd7\x0b\x08\x9f\x1c\xf8\x1c\xc3\x07\x12\xef\x07\xcf\x21\xe8\x3d\xde\x1f\x4c\xe3\x88\x8a\x56\xea\x93\xe1\x4e\x16\xd9\x87\x63\xae\x4f\x8f\x38\x3f\xf4\x41\xed\xf8\x74\x2e\xd0\x7c\x7a\xd9\x5d\x74\x33\x6f\x2c\xfb\x9c\xab\xae\x2d\x4d\x3f\x93\xfb\x99\x9c\xab\x50\x9e\xee\xf8\x99\x1c\x74\x26\x57\x6b\x17\x3a\x45\x0e\x2c\x09\x8b\x50\xcc\x0e\x90\xa2\x5e\x4c\x6e\x0a\xd2\x80\x08\x2d\xbd\xe2\xdf\x13\x6a\xce\x54\x93\x12\x5f\x4e\x41\xc5\xcd\x19\x2e\xc2\x87\x1e\xa1\xd6\x8d\x76\x60\xe2\xc4\x3e\x29\x01\x76\x5a\x86\x8b\x82\x50\xa3\x8e\x14\xc8\x89\xbc\x83\x0b\x83\x5c\x72\xf1\x42\x2a\x7e\x2a\x3f\x8c\xa8\x2d\xdc\x2e\x24\x80\xcb\x49\x82\xc4\xdf\x79\x83\xe2\x76\x0f\x97\x36\x1f\x73\x19\x60\xc9\xfb\xc0\x1a\x3c\x32\xea\x4f\x88\x7c\x41\x90\x90\xee\x87\x86\x03\xad\x02\x9f\x50\x1c\x13\x6a\x7e\x62\x37\x0b\x80\x4f\xa8\xf6\x8a\x55\x13\x55\x18\x28\xbb\xa2\x7a\xd2\xe2\x03\x14\xef\x9e\xfa\x7b\xde\x18\xfd\xe7\x1c\xa5\x28\x00\xe1\xbe\x34\x41\x4b\x7e\xd3\x6b\xbc\x45\x3c\x71\x3e\x45\xc8\xc3\xc5\x48\x80\xc7\x89\x81\x62\x7e\x03\xac\x78\x9e\x82\xb0\xe4\xae\x01\xda\xdc\x0d\x68\xcb\x31\xd8\xa2\xb0\xd3\x51\xbe\xfb\x25\x48\x9a\x00\xa1\xd1\x55\x86\x2d\xf2\xa9\x31\xd5\xcd\xa4\x87\x25\xce\x71\x85\xf0\x88\x9a\xc1\x4f\xec\x87\x01\x90\x7a\x25\xa0\x3a\x86\xb4\xce\xbc\xe3\x81\x18\x87\x45\x8c\xf3\xb4\x52\x37\xef\xd5\xe7\x2a\x35\x8a\x60\xdd\xf4\x6f\xc4\xc1\x86\x0b\x5b\xc0\x6a\x0c\x16\xa9\x7a\x68\xee\xd5\x23\x4a\xe7\x08\xd8\xdc\x34\xd9\xff\xe6\x4e\x05\x78\xd6\x98\x50\x53\xbb\x4a\x03\xd4\x06\xbc\xfe\x97\xfc\x54\xa7\xde\x61\xdf\xcd\xa9\xf7\xf0\xff\x9d\x35\xcf\x81\xa4\xfd\x12\xa6\xd3\xd5\x97\x65\x99\x34\xca\xec\x75\x8c\x1b\xd9\xf2\xb6\x04\x17\xa0\xee\xbf\x9d\x25\xd6\x3b\xe7\xa5\x9a\xab\xa7\x96\xaf\xe8\x5e\x28\xbb\x74\x0e\x33\x85\xd2\xa6\xfc\xb0\x61\x71\x56\xb4\x65\x28\x7b\x41\xbe\x68\xaa\x38\x19\x90\x41\x8c\xc1\x78\x21\xb6\xd8\x37\xf6\xbc\x98\x93\x0d\x89\x71\x2d\xcc\x83\x3b\x36\x91\x24\xee\xdc\x65\x4f\x46\xf2\x77\x47\xb9\xdc\x32\x38\x4e\x3a\xdf\xd8\x61\x92\x95\xbe\x5d\xef\x11\x92\x93\x3e\x1a\x16\x3a\x46\xe6\x00\x1a\x9b\xce\x86\x62\x59\x7c\xf4\x27\x7f\x2e\x8b\xc7\x8b\xdb\x15\x38\x40\x6b\x55\x55\x52\x6f\x09\xab\x87\xd3\x4b\x48\x8c\xc3\x12\x92\x2f\x34\xc8\xf4\x5f\x76\x19\xbd\x00\x69\xe6\xa1\xe9\xf1\xed\x14\xf2\x78\x8c\xd6\x57\xa0\x55\x0a\xc1\x85\xd4\x96\x83\x84\x91\x88\x4b\x01\x5a\x5d\x45\xfd\x5b\x5d\xc3\x5e\xfd\xc9\xad\x70\x74\x7d\xa0\x82\xae\x2b\xc3\x02\xba\x73\x8d\x4d\x38\xbf\x80\x04\x75\x4f\x10\x5c\x5b\xcf\x77\x09\xb8\xda\x75\x72\xeb\x06\x25\x4a\xfe\xaf\x88\xc7\x1a\xa4\x8d\x5f\x19\x9b\x35\xe1\xc2\x59\x01\xd4\x3e\x02\xea\x2c\x28\x7c\xe9\x66\xa0\xd3\x80\x16\xd4\xf5\x1d\xe0\x17\x1f\x08\x04\x28\x4f\xa5\x92\xea\x9b\x5b\xba\xd8\x47\xcd\xdd\x3a\xd5\x57\x09\x5b\xf8\x99\x1c\xbe\xc5\x15\xf4\x1f\x61\x4d\x9e\xcd\x4f\x88\x50\x3c\xb1\x3f\x41\x02\xb9\xf0\x78\x18\xc5\xec\x02\xf0\x3b\xa0\x1d\xd2\x35\x75\x01\x68\xfd\x43\xcc\x9d\xac\xd6\x19\xca\x23\x93\x0b\x25\x51\xbd\xfa\xa8\x00\x83\x4c\xd1\xf0\x11\x43\xff\xc9\xc0\x65\x72\x4f\xcf\x33\x4f\x82\xac\x7d\x7c\xfa\xdd\xa3\x44\xb2\xd1\x7b\xb2\x77\x7c\x7a\x91\xd3\x04\x30\xfd\x9f\x5a\x31\x9f\x05\xea\x68\xd2\x24\x76\x71\x54\xdb\xe8\xa2\x0b\x4f\xa2\x84\x76\x2a\x72\x09\x4b\x40\x86\x5a\xa1\x36\x98\x99\x32\x49\x09\xeb\x8a\x38\x45\xa9\xf1\x4d\x81\x04\x23\x2e\x22\x2d\xe0\xd7\xe2\xcb\xc2\x6c\x8a\x0b\x56\xe3\x05\xc8\xf8\x83\xe6\x34\xea\x71\xc9\xbf\x5d\x2d\x1c\x2c\xa7\x04\x97\x81\x82\x5a\x8d\x54\x88\xde\xc3\xa8\x7f\x84\x42\xde\xa4\xcd\xc9\xb1\x70\x47\x8f\x1d\x15\x93\x8b\x61\xea\xa9\x31\xbe\x01\x5d\x60\x64\x82\xe1\xa5\x5a\xda\x78\xda\x1f\x98\x8a\x0c\x63\x74\x8b\x37\x4a\x0b\xd1\x2d\x6c\x2d\x04\xed\x39\xad\x43\x9b\x0c\x53\x5c\x78\x64\x45\xd4\x44\xc3\x10\x59\xa9\xd9\x60\x3a\x6a\x50\x23\xdf\x92\x03\x6a\x4a\xa4\x24\xfb\x1b\x0e\xf6\x9f\x06\xa4\xbf\x55\xcb\x94\x1f\x70\x96\xc6\x19\xe0\x2e\xdb\xc1\xd4\x01\x99\xb0\x11\x7b\x7a\xed\xf2\xf2\xfd\x7f\xb5\x8e\xed\xff\xd3\x63\xa4\xd8\xf8\xc5\x98\x93\x12\x0d\x73\x4e\x1a\x87\x6c\x7f\x72\xc2\x01\x01\x60\x35\xd3\x2c\x51\xb3\x25\x45\x6e\xcd\x1a\x29\x30\x96\x13\x87\x43\x15\x8e\xf1\xe0\x13\xc0\x80\x39\xa8\x41\xdc\x94\x8a\x2d\x63\x07\x88\x48\x7c\x02\xa0\xb9\xbb\xd9\x31\xfa\xfb\xc8\xe2\xe4\xaf\x1e\x44\x19\x44\x87\x61\xb5\xd2\x98\x0f\x5c\x7f\x27\x10\x82\x68\xac\x4c\x9d\xe6\x21\x90\xc5\x8e\x5f\xdd\xf2\x11\x33\xaf\x88\xd0\x8e\xa7\xee\x27\xbc\x90\x37\x07\xd3\xcb\xaa\x95\x3f\xa3\x21\x56\x4e\xac\xeb\x0a\x9b\x00\xa4\x9c\x90\xdf\x8e\x36\x20\xa1\x62\x27\x29\xef\x10\x9c\x78\xa4\x53\x69\x21\x60\x72\xa7\x65\xca\x7f\xa0\xde\x75\x52\x16\x22\x15\xac\x84\x60\x40\x34\xa0\x2f\x59\x99\x1c\xbd\xa2\x9a\x1c\xc5\x8b\xb4\x50\x0d\x73\xce\x74\xc5\x52\x50\xd0\x4a\xaa\x3f\x1a\x4a\x79\x5a\x22\xef\xb2\x20\xe4\xbf\xd1\x2f\xa4\x25\x4f\xbd\x52\x33\xd3\x7a\x8e\xde\x7e\x69\xb5\x4b\x0b\x06\x13\x2e\x99\x58\x91\x16\xde\x90\x61\x3e\xd6\x66\xc9\xd0\x8b\x53\x5a\x02\xd1\xdb\xad\x99\x76\xde\x61\x81\x0c\x4b\x37\xfd\xe4\x0b\x03\x78\x6b\x1b\xe8\xde\xea\x22\xc4\xae\xb4\x9a\x78\xac\x55\x19\xf7\xed\x0b\x69\x6c\xfe\x53\x80\xe2\xa8\xc2\x97\xa0\x02\xd1\xd8\x3c\x01\xa8\x91\xfd\x2f\x53\x65\x31\x4b\x4f\x28\x53\xce\x04\x34\xf3\x64\x12\x69\xf3\x9c\x9e\x25\xa3\xd5\x21\x50\x23\xa5\x1f\x6d\x00\x0c\x2d\xd2\x93\xa3\xa6\x14\x83\xef\x08\x23\x25\x2c\x21\x74\x10\xa0\xd9\x2f\x4d\xc7\x24\x99\x0c\x30\xc2\x88\xfb\xda\x26\x97\x7e\x3b\xed\x09\xe5\x9f\x5f\xeb\x5d\x53\xf5\x2c\x30\xd2\x5b\x08\x85\xc1\x86\xaa\x20\xe4\xed\x55\x08\x4e\x0d\xb7\x46\xe3\x95\x26\x46\xa7\x45\x05\x27\x02\x90\x27\x27\x63\x44\xa9\xa3\x47\x63\x43\x75\x60\x23\x29\x72\xe6\xd0\xbd\xa4\x40\x1f\xab\x21\x07\x77\xc8\x4c\x0e\x9f\x93\x0f\x40\x77\xf0\x08\x7c\x52\xa7\x51\xdd\x3c\xd9\x0f\xc8\x04\x85\xd0\xcd\x08\x45\x99\xb8\x8a\x39\x10\x43\x02\xa6\x9a\xfc\x46\x6e\xe8\xa3\x62\x02\x7d\xee\x26\x6c\x5a\x4b\x38\x4f\x75\xee\x0a\xa2\x12\xa5\xbf\xa6\x5f\x94\xb0\xf1\x2d\x56\x2e\x05\xe0\x9c\x18\x60\x53\xa2\x66\x82\x85\x3c\xcc\xea\x6e\xb8\x1c\x08\xec\xce\x04\x70\x50\x27\xa8\x17\xd7\x2e\x6c\x31\xc9\xda\x9e\x16\x0c\x96\xcb\xd4\x97\x4c\x1a\x55\x97\xfe\xbe\xd9\x8d\x96\xd9\x69\xa3\x80\x83\x6d\x42\x17\x28\xd0\x1a\x4d\x41\x59\xf4\x86\x63\x81\x2a\x00\x15\xff\x70\xf3\xe8\xac\x8b\x47\x73\x55\xfc\x6d\xdb\xdd\x64\xf3\x47\x02\x2a\x5b\xf7\x32\x1e\x14\x99\x5c\x79\x44\xb8\xb8\x3a\x88\x01\xa0\x4c\x3b\xba\xb5\x7a\xab\xad\x65\xf5\xaa\x13\x63\x26\x60\x79\x2f\xab\x3f\x34\xfc\xab\xaf\x96\x38\xeb\xc6\x31\x60\x09\x1b\x54\xb6\x86\x25\x50\x8f\x89\x36\x52\x92\xbd\x1b\x03\xf7\xf4\x9e\x72\x67\x79\xfa\x64\x09\xf9\x54\x1d\x4d\x1f\x4a\x86\x42\xe6\x0c\x81\x0e\x02\x67\xd9\x1d\xc4\x7e\xad\x87\xfc\x91\xdc\xcc\xb0\xa5\x25\x43\x34\x2c\xec\x75\x4a\xaa\x8d\xd3\xc1\x82\x75\x40\xa5\xef\xe4\xb0\x18\x66\xde\x6f\xaa\xf3\xb8\xa2\x71\x55\x06\xeb\xc1\xcb\xe8\xb7\x4b\x66\xaa\xdc\x8c\xe3\x25\x86\xeb\x3f\x97\x8b\x05\x25\xaa\xec\x5d\x4a\xb6\xfc\xd1\x4e\x1d\xf4\xfa\xc7\xa6\xa8\x64\xd4\xf0\x42\x41\xaf\x64\x2d\xe7\xba\xf7\x0c\x28\xa4\x5e\xb1\xa3\x1e\x1c\xc7\x4d\x25\xd7\xb7\x8e\x71\x0b\x1f\x48\xbe\x42\x3e\xd8\xe3\xfe\x7b\x3b\xd7\xf2\xaf\x19\xd3\x33\x83\xc5\xf5\xdd\x29\xe4\xd8\xad\x60\x1e\x54\x80\x06\xec\xb7\x5f\x99\x37\x9a\xb8\x82\x74\x61\xcb\x52\x6c\xde\x40\x10\x85\x17\xa0\xde\xec\x77\x5f\x2e\x44\x49\xad\x14\x4d\x96\xe2\xf6\x9e\xec\xb7\xc0\x40\x98\x66\xd5\x6b\x59\x9d\xd6\x24\x67\x45\x2b\xac\xd5\x45\x46\x83\xa6\xa1\xc2\x12\x60\xb7\xdf\x2a\x31\x03\xaa\xe0\x5f\x8a\x4f\x96\x51\xc5\x27\xcc\xa0\x02\x1a\x51\x1f\xfd\xf0\xd1\xe2\xec\x75\xc2\xa3\x94\x30\x53\x46\x51\x74\x69\x66\x22\xd3\x51\xb6\x9a\x3d\x8a\x5d\x38\x97\x22\xa4\xb3\xc3\x2f\xf5\xd0\x74\xab\x2d\xa3\xc3\x29\xba\xc5\x05\xa8\x28\x08\x1f\xd6\x06\x8e\x58\xcb\x89\x7b\x63\x10\x0a\xa6\xc1\xa9\xfa\xba\xc5\x49\x20\xb3\xe0\x6c\x18\x56\x97\x53\xc4\x51\xbe\x25\x47\x2e\x19\x15\x8d\xea\x62\x53\xa2\x63\xa0\xea\x74\xac\x55\xe7\xc0\x12\x5d\x67\xb6\x7c\x95\x8a\x8a\xfc\x75\x34\x2d\xd5\x4f\xbd\xb0\xd9\xa9\x7e\xce\x28\xb9\xd5\xab\x9c\x42\xc0\x7f\xac\xd8\xd5\x3a\xad\x6a\x4d\x5b\xf5\xe9\xbf\x00\x6a\xc3\xed\x8a\xb0\xd7\x0d\xd3\x4e\x75\xbb\x84\x91\xba\x85\xc9\x7d\x72\x97\xb6\xa6\x06\xeb\x65\x2a\xd7\x08\x05\x2c\xfa\x9e\x90\x62\xdd\xe0\xaf\x9c\xce\xc0\x82\x41\x9b\x55\x21\xb2\xd4\x10\x35\x26\x78\x9f\x5c\x41\xa5\x1f\x74\x5f\x53\xc2\xbc\x43\x50\x28\x95\x08\xb1\x24\x79\xfa\xc6\x52\x28\x08\x05\x49\x80\x0e\xac\xab\xba\x41\x27\xe0\x42\x75\x45\xbd\xe1\xf4\x59\x1d\x1e\x55\x8a\x43\xd5\x7a\xce\x5a\x33\x55\xb5\x9d\xb9\xd4\x26\xf0\xcd\x89\x51\x72\x2c\x73\xb5\x05\xaa\x28\xaf\x15\x67\x58\x08\x92\x33\x2d\x34\x48\xd5\x12\x50\x47\x39\xb5\x25\xc7\x77\x92\x26\x64\x63\xe3\xa0\x8b\x4d\x50\xa3\xb4\xdc\x7c\xf4\x98\x19\x68\x5a\xf9\xda\x23\xbf\x29\x85\x41\x94\x6c\x9b\x62\xab\x7b\x6d\xc3\xda\x2f\x91\xb5\xaf\x6d\xcb\x15\x04\x2f\x39\x12\xa0\x9e\xb4\xad\xf5\x09\xf4\xbc\xcc\x9e\xd6\xfa\xb6\xed\xac\xb3\x3b\x36\xaf\xd8\x4a\x7d\xdb\xce\xaf\xf6\xf1\xce\xa3\xdd\x6b\xe1\x09\xb5\x32\x6e\x2c\x8a\xac\x0c\xd8\xc3\x4b\x59\xa7\xa9\x30\x0d\xaa\xbd\x74\xb3\x59\x42\x0c\x23\x1b\x13\xa4\xe1\xc5\x2f\x05\x74\xc5\x92\xa7\xa1\x99\x12\xc2\xc0\x8f\xa1\x5a\x6b\x5e\x0d\x26\xfb\xc3\x89\xa9\xa6\xb2\x5d\xd3\x40\x36\xf3\x2f\x7a\x25\x2a\xec\x0b\xb4\xf9\x63\xe0\x92\xd5\xe5\x78\x79\x12\xfd\x11\xfc\x6c\xc6\x79\xa1\x04\x71\x51\x6a\x11\x6b\xd7\xf0\x8e\x98\x81\xe8\x34\xdf\x35\xa6\xbd\x49\xd1\x6b\x9d\x5d\x43\xb3\xf9\xa2\x3e\x21\x74\x7d\x81\xe2\x9f\xa8\x28\x7d\x29\x39\x49\xbe\xf6\x2d\x70\x0c\xd0\xa3\x44\xa9\xb3\xd4\xf7\x3f\x16\xad\x97\x2b\x3a\x38\x7b\x63\x63\x8d\x80\x09\xf2\xc9\x7b\xa6\xa8\xfd\x5e\xa0\x98\xf4\xf4\xe6\xec\xc0\x7b\x39\xad\x50\x69\x89\x7b\x37\xa4\xe0\x1b\xb5\x1f\x9f\x83\xb2\xb0\x58\x9c\x6e\xcf\x20\xa8\xde\xa7\x89\x91\xa7\xf6\xd5\x67\x96\x1c\x3b\xeb\xee\xd1\x0a\x9e\x5a\x95\x3e\x0e\x72\xf4\x07\x43\xd1\x4f\xce\x10\x9d\x41\x11\xf5\xe9\x67\x9a\xe2\xcf\x24\x75\x62\xf9\x99\xa4\x3e\x2d\x5e\x87\xf8\x4b\xfc\x99\x3c\xd6\x34\x44\x9d\xf2\x49\x30\x67\xbc\x7c\x02\x6c\x94\x9d\x94\x20\x89\x81\xd0\xb7\x77\xfc\x27\x69\xc5\x2b\x0d\x56\xfc\x82\xb9\x85\x16\x17\xf4\x7d\xde\x2d\x9a\x10\x18\xf1\x21\x91\x6c\xec\xe7\xdd\x12\xbd\x12\x2c\xa0\x78\xb7\x70\xc0\xe4\x9d\x0e\x16\x05\x68\x3e\x7a\xb7\xb0\x7d\xf2\x6e\xa5\x35\x3e\x72\x36\x79\x07\xcd\x27\xbd\x85\x33\xfb\xf0\x09\x16\x13\xe6\x3e\xbd\xe3\x1a\x93\x77\xe9\xe1\xd1\x0a\x79\x97\x18\x25\x19\xdd\x7b\x97\x28\x5e\x7a\xa9\x50\x99\x53\x18\x82\x9b\x8b\xf0\xe0\x7a\x51\x47\x18\x9b\xca\x53\xa8\x21\x31\xf9\x5f\x50\xaf\x48\xdd\x32\x3b\x78\x55\x16\xaa\x6c\x8b\x3c\x24\x6e\xda\x59\xc6\x92\x29\xb8\x96\xd3\xda\x11\x8e\xa2\x1e\x98\xc1\x31\x97\xe8\x5d\x39\xa4\xc7\xf1\xae\x54\x94\x67\xef\x0a\x8b\x84\x45\xac\x36\xc6\x0c\xed\x67\x25\x8a\x23\x55\xa4\xc2\xf0\x4d\x1e\x21\xd7\x3e\x38\x70\xf4\x4c\xb7\x8a\x0a\x4a\x01\xf1\x6f\x1d\x76\x3b\x94\xb5\x78\x3c\x41\x2d\xf8\xbf\x1c\x5d\xe0\xbf\x46\x75\xdc\xd4\x02\x4e\xe7\xab\x00\xef\x5e\x81\x65\x18\x04\x5a\xd7\x29\x1c\x1d\xfe\x13\xf5\x45\x13\x2f\x1b\x01\xfb\xc9\x7b\x2c\xad\x12\x49\x70\x26\x19\x67\x89\x0a\x81\xde\xcf\xf2\xcd\xee\x11\x66\xc9\x56\xc8\x8b\x5e\xea\xaa\x9f\xd1\x11\xfa\xf9\xc9\x15\x0c\x3f\xe7\x7d\xcc\x91\x7b\x49\xbc\xc5\x7d\xc6\x64\x8e\x5f\xa6\x2e\x29\xb1\xd8\x23\x44\x02\x63\x6e\x1b\x13\x68\x99\x33\x43\xb6\x2c\x4a\x54\xdf\xaf\x1d\xb5\x63\xb1\xb9\x5c\xbf\x48\x3b\xeb\x17\x4a\x15\x7e\xf1\x75\x00\x2b\xda\x8b\x7f\xd9\xcc\xb2\x5f\x1e\x32\xf0\x79\x03\x15\xb7\xc3\x81\xf0\xf1\xc9\x7e\x47\x14\x71\x21\x68\xa2\x80\x0e\x50\x8e\xdb\xfd\xb2\x6b\x5d\x10\xa0\x81\xda\x1d\xcd\x1e\xa8\xa2\xcb\x41\x5f\x55\x88\xf1\xcb\x91\x51\x6a\x96\xdf\x1e\x22\x40\xc1\x14\x89\x5f\x0a\x1a\x39\x6f\xd5\x72\x61\xd7\xe7\x17\xae\x98\x09\xa5\xd0\xe9\x97\xaa\x26\x2b\x3a\x00\xaf\x73\x3c\x8a\x34\x14\x3a\xd3\x23\xc0\xfe\xb5\x82\x72\xbc\xb4\x40\xeb\x2d\x30\xc6\x6f\x9e\xe1\x47\x5b\xeb\xfd\xa4\x6e\x79\x34\x58\x7e\xde\x12\x4a\x9a\x17\x79\xdc\xfb\x07\x94\xa9\x97\x95\x36\x1e\xb3\x7b\xc2\xda\xc3\xca\xb8\x7f\x58\xd1\xf7\x0f\xf1\xfb\x09\xa4\x35\xc6\xe3\x52\x8f\xc9\x7b\x1b\x11\x12\x31\xcc\x2a\x1d\x7a\x3c\x87\x3a\x79\x7f\x40\xa1\x29\x2a\x96\xcb\xbe\x0c\x3f\xca\xd1\x91\x5c\x7e\xd4\x3e\x5f\xdf\xee\x8f\x54\xdd\x45\xf8\x1b\x46\xc5\xde\xa3\xff\x04\xd1\xc6\xd6\xb3\x13\xf4\x32\xb2\xcb\x30\xfa\xf2\x70\x07\x93\x27\x88\xf1\x23\xa0\xfb\x55\x3f\x1f\xb9\xd3\x86\x00\x2d\x2a\x8f\xbe\x2c\xa3\x34\x93\x11\x13\x2b\x8a\xe7\x7a\x11\xb6\xbd\x82\xb8\x74\x0d\x38\x1a\x0b\x61\xde\xde\x9b\xbe\x84\x77\x0d\x9c\xa0\x02\x60\x7c\x56\x1c\xe0\x9c\xfc\xda\xc3\xf0\x12\xb8\x10\x20\x11\x57\xe9\x79\xfc\xe6\xe2\x03\xe4\x15\x64\x2c\xa3\x00\x73\x1a\x03\x37\xc3\x1d\x26\xbc\x5b\x5c\x54\xe0\xa9\xb3\x63\x49\xdb\x73\xf4\xef\xb7\x1c\xf5\x47\xce\xe2\x78\x40\x7f\x14\xb0\xb6\xe5\x19\xc2\xff\x80\xf1\xb9\x0d\xea\x58\x7e\xf0\x7a\x07\xdd\xe4\xa3\x76\x7b\x71\x41\x2d\x8b\xde\xad\x9d\x23\x1c\x6f\x9b\xd5\x04\xed\x1c\x79\xf8\xf8\x40\x7a\xc4\x55\xa2\x1e\x03\xf2\x25\xb2\x49\x8b\xc1\x8f\x1b\xc6\x8c\x1b\xdd\x87\xb0\x6a\xea\x92\x88\x94\x81\x36\x82\x19\xdd\xc2\x69\x77\x81\x65\x67\x1a\xc6\x88\x97\xd5\x00\xd0\x6b\x43\x62\x16\xb5\x69\xba\x5d\xeb\x07\x3e\x46\x4c\x41\x49\xa7\x3f\xe7\x3a\x7c\xe7\x73\x5a\x0c\x58\x0c\xab\x2f\xd8\xd5\x74\x63\xf8\x87\x6d\x53\xbc\x1c\xcb\x6f\x5a\xd7\xe2\x1d\xe3\xdb\x37\x4d\x2f\x6e\xf5\x11\x40\xbb\x27\x37\x33\x18\xa2\x99\x93\x13\xde\x40\xbd\x35\x26\x66\x3c\x31\x12\xf1\x76\x10\x4d\x50\xe2\xfa\x22\x84\x1d\x1f\xdb\x9c\x7b\x41\x1d\x8b\xcd\xf4\xb5\x5a\xc6\xa6\x81\x6c\x6f\x07\xab\x9d\x59\xf1\xf2\x94\xab\xfc\x2e\xec\x6e\x27\x20\x26\x3f\x1e\xda\x9f\x44\xc4\xf5\x09\x0d\x8a\x6e\xb2\x10\xba\x63\x76\x48\xd0\x68\x81\x38\xd4\xf5\x3a\xff\xed\x93\xc7\x7d\x89\xde\xe0\xd0\xd3\xd2\x91\x70\x33\xc2\x1d\xa3\x94\x27\x8f\x83\xfd\x06\xd2\x85\xed\x30\xff\x60\x51\xa6\x04\x37\xa3\x0c\x80\x7f\xe5\x38\x2c\x02\x37\xb3\xb8\xea\xf2\x97\x4f\xd2\x09\x8c\x72\x9d\xc2\x9a\x34\x51\x13\x36\xcd\x12\x55\x06\x2e\xb4\xac\xf1\xf8\x4f\x24\x26\x01\x74\x23\x31\xa2\x09\xa6\x39\xfe\xf1\xb8\x51\x99\xa6\x9b\x36\x9c\x78\x26\x6f\x78\xd5\xf7\xc9\x12\xf6\xe3\xa2\x9b\x3d\x07\xee\xe0\xf4\x3d\x52\x30\x5a\x8e\xb9\x9f\x49\xe9\x6d\x87\x93\xd0\xb0\x98\x19\xa3\x99\x1d\x55\xfa\xe4\xd9\x0d\xbd\x07\xae\x68\x06\x0c\x4a\x23\x49\x0a\xad\x84\xa8\xc6\x8e\xcd\x27\x0b\x4a\xb6\x97\xe5\xc0\xd4\x1e\x1f\xdc\x4e\x05\x16\x67\x9a\x62\x2e\x77\x8d\x47\xec\x37\x8d\x33\x1a\x35\x21\x26\x7d\xa0\xf7\xdb\xbd\x6b\x9b\xbb\x20\x72\x8c\x50\x53\xe5\xb7\xb3\xa9\xc2\x64\x31\x42\x00\x24\x69\x57\x66\x2e\x4b\xfb\xb2\x68\xb5\x29\x22\xf0\xa8\xc5\x62\x32\x10\xe6\x80\x20\x06\x49\xa1\x2e\x2b\x14\x0c\xe8\x85\xee\xd8\x9f\x46\x88\x2e\xa3\xac\x98\x27\xf1\x65\xad\xf3\x56\xb0\x59\xc7\x97\x20\x9f\x80\x27\x14\xcf\xd1\x80\xe7\x4c\xa7\x97\x56\x5f\x08\xb4\x86\x47\x28\x8f\xa5\x8a\xbc\xcd\x4a\x55\xaa\xf7\x3b\x29\x67\x4c\x7d\x41\x63\x5c\xda\xe6\x94\xa0\xfd\x2d\x48\x9b\x72\x46\xf3\xe5\x8c\xd1\x4a\x51\x75\x14\x72\xf1\x30\xd3\xe4\xab\xf4\xea\x70\x0a\xe8\xea\xd8\xaa\x6f\x9a\x0e\x55\x27\xb8\x3c\x6e\x0f\x9c\x7c\x0d\x7e\xb5\x34\x02\xc6\xbf\xdd\xc4\xe6\xba\x87\x62\x4e\xa2\x83\xab\xb9\x5d\x35\xa3\x36\xbd\xb6\x59\xe1\x09\x80\x1d\x95\x04\xe6\x70\xab\xd2\xb6\x6a\x1f\x29\x3a\x48\x93\xe6\xac\x1c\x36\xf7\x60\x84\xda\xd0\xc0\x09\xd0\xc9\x63\x78\xed\x91\x30\x6d\x53\xac\xbd\x79\x0b\xc8\x6e\x1c\xb1\x9b\x7c\xe3\x25\x37\x04\x08\x70\x2b\x59\x4b\x13\xb3\x40\x22\xae\x01\x6a\x6c\x4e\x1a\xaa\x72\x7b\x7b\x9f\xa6\x82\x39\x75\x32\x1a\xbd\x97\x05\xe2\x05\x8f\x5f\x1c\xe2\x6b\xa7\xa3\xfb\x6f\x27\xff\x7a\x89\x23\x50\xde\x63\x6b\x83\x7f\x07\xe9\x4b\x07\xa3\x3b\xa7\x0c\x9d\x06\xaf\x2c\x02\x6b\xe6\x2d\x0a\x62\xee\xcc\xc9\xd2\xfb\xc3\x6c\xfe\x20\x38\x1f\x5c\xa5\x3a\xf9\x4f\x86\x0c\x22\xf5\x15\x15\xf9\x43\x53\x8f\x9f\x69\xfd\x99\x36\xf7\x9f\x68\x6e\xee\x29\x49\x20\x24\x28\xd9\x5d\x59\xa1\x95\x56\xaa\xf8\x51\x24\xbd\x36\xf7\x82\x25\x11\xbd\xce\x9f\x69\x0b\x98\xb2\xdd\x42\xdd\x60\xfb\xf8\x99\xb6\x4e\xf3\x22\x40\x06\x69\xa5\xa4\x8c\x06\x27\xdd\x56\x70\x55\x94\xb6\x61\xdd\x38\x8c\x2d\xa8\x53\x98\xe4\xa3\x22\x91\x0b\x13\x07\xff\x41\xfa\x2a\x71\x47\x46\xd9\x61\x8a\x01\xb7\xbc\xef\x37\xdc\x14\x3f\x42\x34\xed\xd5\x28\x32\x9f\x50\xcf\xa3\xdc\x38\xfb\xf5\x8c\xfe\x30\x47\xf8\x0c\xe5\xc0\x2c\xbe\x83\x33\x1b\x36\x53\x62\x8c\xe9\x6b\xef\x6a\x58\xa4\xb5\x0b\xcf\xca\x1c\xfe\x66\xf9\xf0\xc3\xb2\xee\xb3\x52\x8c\xa6\x75\xe0\x30\x62\xcc\x67\xe9\x0d\x63\xba\x6c\xe0\xe1\x1f\x07\xd9\x06\x6f\x96\xf3\xb0\xdb\x30\x13\x46\xb8\xf9\xd9\x5d\xb8\xf0\xa1\x99\x3b\x3f\x2c\x61\x27\x84\x42\x9a\xb1\xf7\xc9\x09\x6d\x48\x1a\x66\xb7\xdb\x9b\x55\x37\xa6\x81\x29\x93\x12\xde\x4e\x38\xa1\xcf\x0e\xb3\x3f\x60\x71\xf4\x0e\x41\x2f\x3f\x07\x7c\x52\x42\x04\x80\x7c\x12\xe6\x1c\x91\x59\x56\x7e\xe6\x9c\x66\x3e\xf2\x05\x6c\x6f\x26\x90\x83\x1b\xb9\x90\xa2\xd6\x06\x9e\xc6\x51\x5a\x14\x30\x88\xba\x97\x29\x2c\xcb\x90\x2e\x81\x4d\xb6\x0c\x3a\x10\x0d\xcb\x82\x5f\xb0\xbe\x78\x58\x0d\x3f\x13\xe7\xe4\x82\x4f\xb8\x59\x66\x82\xac\x1a\xd0\x11\x44\x85\xb5\x75\x64\xdc\x18\xbc\x60\x3f\x54\x78\x3c\xa4\x91\x09\x0f\x6e\x9f\x9f\x6e\x1d\x63\xb0\x67\x0e\xa7\xf0\xe8\xc5\x86\xf7\x41\xaa\x68\x58\x71\x51\x57\x17\xc4\xb9\xc4\xb0\x62\x5a\x28\xac\x2b\x94\x40\x0c\xa7\x75\x53\x59\x58\x51\xea\x56\x8e\x84\xc2\xba\x61\xe5\x8d\x63\xdb\xb0\xee\xb9\x4b\x8b\x1a\xb4\xed\x09\x6b\xe2\xc0\x23\xac\xdd\x25\x06\x87\xfb\xc5\x40\x56\x6b\xef\xc3\x7f\x26\xbd\x87\xff\x72\xa7\xaa\x93\x9a\xe1\x09\x85\x30\x24\x49\xa3\xa8\xfb\x2b\x82\x65\x22\x4a\x8a\x32\xea\x60\xd4\x8e\x31\xc4\x29\x43\x05\xf6\x50\xcc\xab\x68\xcb\x94\x21\xae\xaa\x42\x4c\x0d\x71\x73\xe5\x83\x60\x2b\xc2\x44\x7d\x88\x21\xad\x7d\x78\x17\xf0\x2e\x7f\xfb\xb9\x9f\xbf\x16\x5c\xfa\x84\xf4\x8a\xe1\x1e\x38\xcc\x5b\x87\x18\x5e\xbe\x2c\xfc\xfd\x64\x14\x22\x14\x37\x61\x61\x2f\xc8\xa8\x01\x53\x51\x82\x3a\x75\xd4\x1c\xca\x88\x90\xc1\x6b\x16\x44\x5d\xbc\x12\x90\x23\x75\xc6\xaf\x0d\x1b\x20\x42\x8c\xc1\x9c\x0d\xb8\x40\xb2\x0d\x5c\x89\xd4\x7b\x29\x53\x2b\x2b\x4e\x8c\x9a\x4c\x42\x1d\x16\xa9\x83\x8e\x3a\x02\x77\x20\x05\xce\x84\x80\x04\x4b\x80\x78\xe4\x6a\x61\xc4\x0d\xf6\xea\x72\x6d\x41\x77\x15\x07\x8c\x42\x44\xc5\x10\x49\x80\x36\xd8\x31\x9e\xc8\xad\x3c\x8a\x69\xac\xcd\x23\xdc\x8d\x09\xb4\xcb\xe0\x30\x70\x7f\x56\xd8\xbd\xfa\xb4\xfb\x66\x9b\xb1\x06\x6e\xc4\x1b\x3a\x90\x5d\x12\xcc\x2a\xd5\x9e\x17\xab\xf9\x7b\x5e\xb0\x26\x15\x70\x40\x0b\x14\x1d\x38\xb2\x28\x59\x20\xb4\xb8\x09\x39\x41\x37\x1f\x38\xbd\x13\x74\x67\x0e\xa9\x26\x41\xc2\xbc\x69\x48\x0b\xc7\xe5\x90\x3b\xd4\xd4\x4a\xe8\xe1\xcc\xba\x05\x10\x9a\x5e\x33\x54\xfc\xd1\xd5\xea\x90\xf2\xa0\xf6\x0c\xfc\xc4\x17\xcb\xe2\x00\x8c\x35\x1f\x29\x03\xf8\x73\x9c\x37\xc2\x76\x2d\x9c\xa1\x67\xd2\x65\x5c\x32\x44\x70\xbb\xf4\x62\x0a\xf9\xdf\x6e\x2e\xff\xd3\xd3\xe5\xf1\xda\xae\x60\x9f\xac\xdf\xca\xf3\xe6\xf7\xa0\xda\x84\x85\xfa\xac\xea\x79\xe6\x41\x48\x4e\x30\x1a\x7b\x75\x81\x37\x0d\x5a\xd3\x76\xf5\xba\x52\x64\x0a\xd9\xcf\x37\x0b\x76\x02\x56\xa0\x54\x64\x7d\xf9\x62\xb0\xe3\x38\xa3\xe8\x24\x5f\xf4\xf1\x08\x70\x6b\x48\xde\x7a\x80\xfc\xf0\x7e\xe1\xce\xfe\x90\x1f\xd1\xbd\x32\x2e\x92\x16\x06\x12\x80\x2a\x3e\x29\x31\x37\x57\xff\x1d\xd1\xeb\x95\xea\x71\x6e\xd5\xff\x4c\x5f\x69\x79\xfd\xdf\x20\xb9\x63\x5f\xb5\xca\x01\xfb\x40\xed\x67\x1a\xe2\x40\x8e\x1d\x33\xe4\x3a\x0c\x1d\x5b\xac\xc3\xed\xf6\x64\x30\x95\x9a\x9e\xaa\x8c\x7b\x93\x62\x56\x0b\xbe\x69\x6d\xa9\x4f\xa6\x1a\x84\x4f\x49\x35\x52\xde\x6f\x88\xa1\xc1\xd9\xc4\x29\xdc\xee\x32\x19\x0c\x4c\x1e\x2a\x4c\xe5\x23\x07\x4b\x9f\xa3\xc2\x8a\x6e\x47\x18\x9b\xba\x43\xae\x79\xbe\xe2\x67\xab\x6d\xdc\xd7\xad\xce\xf1\x92\x16\xa0\xd3\x1e\x46\x9f\x44\xd8\x80\xea\xe7\xed\x2a\x76\x0d\xd5\x33\x73\xad\x31\xe4\xa6\x9e\xe1\x78\x1e\xa9\x19\xe5\xf9\x04\x3e\x74\x57\x75\xef\xd1\xe0\xb8\x7c\x45\x56\x6b\xfa\x81\x0a\xcb\x43\x3b\x02\xa4\x2a\x62\xb3\x5b\xd0\xf5\xaf\x70\x64\x98\xc8\xa3\x3a\x1e\x25\xdb\xd3\x11\x53\x38\xce\xe2\x76\x14\xa4\xdf\xee\x16\xee\x0a\xc2\xc3\x68\x56\x4f\xcb\x2c\xad\x0c\x9a\xe2\xb2\x70\xa1\x53\x00\xc7\x08\xa1\x2c\x33\x05\xb9\xc2\x16\xa7\xd8\xea\x4c\x28\xd8\xa3\x1e\xca\x12\x31\x03\x1b\xf4\x68\x41\x28\x4b\x65\x23\x53\x16\x9d\xad\x0e\xc5\x3f\x8a\xdd\x34\x31\x61\x6a\x05\x04\x43\x95\x20\xa3\xcb\x80\x6d\x58\x42\x25\x6d\x8a\xb6\xfd\x94\x70\x0a\x13\xbc\x94\x2e\xa9\x5f\xe8\x37\x43\xd9\xb6\x05\xcd\x47\x69\x3a\x0d\x23\x28\x69\xcf\x5f\xda\x76\x44\x37\xab\xf1\x72\xe9\x72\x48\x25\xc8\x3a\x5b\x42\xd4\x82\xd2\x36\x4e\x4c\x85\x3a\x63\xf3\x25\x06\x5e\xa1\x8e\x2e\x5a\x10\xda\xe3\x8a\xca\xfe\x07\xa4\xe3\x55\x76\x7a\xdc\xc5\x05\xa2\xe9\x6a\x97\x7e\x0b\x3a\x97\x92\xff\xce\x39\x77\x5c\x97\x2f\x5a\x12\xee\xba\xbb\x04\xff\xeb\x4e\x71\x05\x94\x95\x47\x21\x8b\x16\x98\xd3\x4c\xaa\x5e\x72\x90\x9d\x2a\x03\x88\xe9\x0b\xe4\x38\x6e\xac\x9f\x42\xad\xfe\x0f\x6b\x31\x01\x6b\xed\x01\x57\x75\x21\x51\xb5\xb3\xaa\x4d\xa3\xdc\x70\x8b\xac\x00\x54\x06\xa9\x00\x42\x7a\x7c\xb0\xdc\x60\xfe\x63\x19\xc8\xf4\x8e\xcd\x5d\x70\xfc\x3f\x36\x35\x60\x57\x07\x4d\x48\xcf\xe6\x4a\xd3\x62\x68\xe3\x43\x8e\x0e\xd9\x55\x31\x44\xcd\x73\xda\x3b\x5c\x33\xd6\x61\x5c\x42\x33\x85\x56\x69\xaa\x36\xf6\xd2\x0d\x0e\xe3\x62\x04\x16\x53\xc1\x5a\x8a\x04\x26\xa3\xea\x92\xc0\x6e\x76\xb4\x3c\x08\xac\x6f\xcc\xb3\x03\x6b\x57\x09\x88\xe9\x2b\x85\x85\x06\xcc\x71\x0d\x40\xdf\xd1\x32\xb7\x8e\x47\x56\xad\x9b\xee\x69\x3c\x51\x38\x85\x97\xd3\xc9\x38\x45\x27\xd1\x8b\x3a\xc8\xea\x57\x60\x2d\x7f\xe5\x8e\x11\x16\xc6\xdb\xe1\x23\x1f\x36\xf7\xd0\xa1\x8f\x18\xfd\x68\xa6\x7f\x50\x84\x9f\x3f\xd3\x73\x4a\x4b\xf9\x99\x9e\xe2\xee\x73\xfd\x99\x9e\x51\xb8\x43\x94\xfa\x23\xe3\xcd\xa8\x07\x8d\x48\x55\x2e\x8e\x38\x46\x26\xb9\x0d\xb4\x63\x2b\x5a\xc4\x91\xb2\x18\x2f\xe4\x4d\x57\x97\x1e\x88\x21\xcf\x02\xa2\x9c\x1b\x1a\x86\x83\x2e\x59\xc6\xeb\xe8\x19\xa1\x59\xeb\x92\x78\x44\x92\x85\x82\x66\x77\x28\xc0\x76\x1b\x22\x33\x36\xf7\x82\x0b\x11\xc1\x2c\x58\xc6\x12\xc4\x91\x42\xc4\x59\xb4\x59\x43\x67\x8b\x62\xc0\x52\xd1\x08\x2c\xa6\x14\x50\x81\xa2\x86\x86\xd7\x3d\x5f\x10\xcd\xa3\x70\x14\x5d\x15\x95\x76\x83\x36\x5a\x88\x76\x3c\x0d\xc0\x16\x5d\x85\xc1\x3b\x34\x40\xd1\xeb\x7f\x4a\x82\x82\x76\x2c\x9a\x19\xb2\x38\x5c\x96\x71\x54\x24\xe2\x2c\x1b\xf6\xa9\xc4\xeb\x2c\x1b\x60\xb6\x2c\x2a\x4e\xdd\xae\x7b\xb0\x5c\xad\x09\x8b\x5a\x02\xdb\xf0\xa7\x71\x70\x04\xa8\xab\xc6\xc4\x9a\x92\x2c\xf4\x51\x8f\x75\x09\x5a\x34\x3b\x85\xe2\xb5\x0b\xc3\x0c\x9b\xc0\xe3\x32\xc9\xea\xa1\xb8\x68\xdc\x17\x5a\xf2\x3c\x73\x18\x9d\x1f\x25\x47\x03\x80\x10\x33\x8f\xf6\x6b\x60\x1a\xb1\x96\x29\xea\xb7\xde\x58\xf7\x15\xe6\x5a\x09\x17\xae\x90\x48\x28\xac\x41\x89\xd8\x37\xcf\x53\xe9\x85\x60\x77\x90\x7a\x65\xd0\xa6\xfb\xb7\x15\x72\x4a\x4a\x98\x61\x57\xf7\x6b\x47\xdd\xa9\x4d\xaa\x59\x9d\x46\x56\x8d\xcd\xd2\x80\xb8\x9c\x7c\x8a\xba\xa1\x33\x3a\x69\x91\x35\x6c\x80\x63\x6c\xa6\x3c\x0d\x35\xaa\x58\x80\xb0\xb3\x21\x51\x97\xe5\xa3\x6d\x6b\x12\x60\xa1\x94\xc6\x2f\xfb\x68\xf0\x34\x17\xf2\x02\xa9\x8e\x10\xdd\x0b\xa0\x0c\xca\x01\x86\xf0\x08\xce\xbc\xe3\x45\xc6\x0a\x4f\xde\x54\x40\x8e\x3b\xcb\x00\x4d\x4c\x22\xd3\xce\xa8\xb8\x47\xb8\xd2\x38\x63\x34\xee\x2f\x16\xb4\xf9\x52\x9f\x81\x69\xd3\x27\xa6\xe5\xc7\x53\x45\x0c\x3f\x39\x0d\x60\x51\xfb\xe0\x95\x8b\x29\x2e\x12\x65\x7f\x7b\x08\x88\x1c\xcc\x13\x50\xcb\x32\xc2\xbb\x32\xaa\xa4\xb7\x37\x50\x00\x4f\x7f\xde\xfe\x34\x75\xa1\xc3\x3b\x3f\x89\xe2\x59\xd0\xb1\x62\x1b\x3d\x4f\xf2\x46\x11\xac\x37\xa3\xfc\x6f\x05\x49\xba\x1a\x25\x64\x13\xc2\x72\x6c\x8e\xd7\x47\x2b\xce\xf5\x80\x50\x1a\x7d\x65\xec\x7d\xd5\x66\xcf\xd7\x7a\x05\xa9\x56\xba\xc2\xfb\x3f\x26\x8c\xad\xa3\xd7\x6e\x26\xfa\x77\x68\x62\x8c\x42\x0c\x08\x8c\x0b\x10\x5f\x03\x5a\xc2\xa0\xe7\x42\x04\x60\x0f\x49\xd4\x71\xa2\x50\x6d\xf0\x04\xe5\x38\x36\x61\x0f\x5e\x4d\xd1\xbb\x90\x6e\xbf\x45\x38\x40\x39\x56\xac\x90\x67\xe9\x62\x48\x4f\xb6\x9a\x81\x27\x1a\x84\xd2\x62\xfb\x28\x41\x88\x10\x3e\x3a\x59\xeb\x55\x83\x55\x02\x89\xa1\x6d\x56\x64\xf0\x84\xa8\xdd\x1b\x20\xec\x87\xea\xb3\x04\xb4\xa0\xe1\xf3\xa1\x8f\x92\x86\xf9\x5a\x93\x05\x16\xb7\xb2\x64\x67\x9e\xa1\x3c\xa9\xb2\x09\x22\x28\x17\xea\xba\x18\x0d\x7e\x55\x23\xd6\x51\x09\xd4\xa3\x3d\x86\x87\x61\xd3\xd4\x9e\x41\xd1\x15\x12\xf2\xec\x40\xf2\x38\xc3\x2c\xf0\xea\x1c\x70\x6a\x37\x66\x96\x22\x21\xa6\x3f\x12\x9f\x2d\x70\xce\x0b\xfb\x2f\x01\xba\xb4\x2a\x78\xed\x21\xb6\x70\x19\xdd\x78\xbc\x5a\xe0\x4d\x57\x83\x9c\x6f\x5b\x86\xc8\xb5\x66\x0e\x5d\xc5\x4c\x18\xc8\x9c\x82\xf4\xe2\x18\xe0\x94\xbb\x86\x80\xc2\x92\xa0\xba\x79\xf5\xae\x36\x67\x01\x54\x81\x4c\xa1\x39\x25\xe2\xa4\xdb\x15\x77\x4b\xbe\xbc\xb4\x2d\x94\x7a\x8f\x83\x16\x2a\x22\xfa\x43\x7e\x57\x2b\x3b\x6b\x7c\xbe\xed\xc3\x89\x19\x37\xbb\x4c\x31\xd7\x4a\xd3\xb0\xc8\x0e\x33\x5b\x34\x35\x03\xb8\x5b\x2f\xe6\xb7\x8a\x37\x96\x9c\x6f\xad\x1e\xf9\x4d\x71\x20\xbf\x57\xc6\xf8\xbd\x69\x69\x78\xe3\x11\x08\x01\x41\x89\x79\xff\xd6\xc4\x7b\xe3\x81\x54\x01\xdc\x60\x13\xf3\x9b\x8d\x6e\x7e\xb3\x23\xcf\x6f\x9e\x60\x8d\xf9\xdd\x72\x61\xf8\xde\x9c\x3c\x8d\xf9\xdd\xc5\x8a\x38\xd8\x45\x3c\x43\xb0\x80\xb4\x8c\x75\x6d\x76\xfa\xc2\x63\xc0\x0a\xfc\x4d\x93\xd0\x43\xe1\x96\x00\x00\xf6\xb5\xdd\x73\x6a\x0f\x00\x51\xea\xd2\x21\x63\xe5\x16\x10\x8d\x93\x00\x6e\xce\x8c\x5d\x37\x3c\xc7\xee\x35\x71\xba\x5f\xcd\x89\xb5\x60\xa8\x1f\xbb\xb7\xe0\x71\xd3\x44\xec\x5e\x25\x1e\x02\x75\x5d\x93\xaa\x7b\x95\x20\xba\xd7\xb3\x7b\x82\xca\x17\xd2\x48\x50\xad\x4d\x89\xdf\x15\x64\x13\xb4\x2e\x86\xd5\xac\xdb\xd4\x69\xec\xea\xa9\x8c\xf4\x34\x02\xdc\x2c\x04\xa0\x1a\x26\xfc\x74\xaf\x22\x4f\xf7\x2a\xf1\x74\x34\x76\xfd\xf1\x60\x18\x1e\x0f\x0b\xbc\xfa\x7b\xd5\xe0\xae\xad\x2b\xe8\xd4\x2f\x3d\xd5\x5d\x95\x36\x33\x5f\x26\xaa\x14\x00\x7b\xb9\x3a\xab\xae\xbd\x4b\xbf\xed\x08\xe7\xc1\x42\x68\xbf\x24\x60\x98\x4b\x48\x3f\x38\x6d\x8b\x75\x30\x36\x54\x99\x17\xb2\x80\x22\x88\x0a\xb4\xd1\x11\x8e\x9b\xb0\x04\xbd\xb1\x35\x31\x3b\xbe\xd5\x24\x40\x9b\x8d\x7c\xdb\x2c\x98\x21\xe4\x66\x07\xc8\x16\x50\xe8\x08\x18\x52\x35\x3b\x1e\x05\xc9\xae\xb1\x60\x09\xe8\x21\x6a\x58\xb0\x96\xa9\x2d\x72\x76\x8d\x93\xbe\x00\x1a\xaa\xa6\x61\x6d\x78\x19\x45\x00\xe6\x0a\x48\x39\x0f\x92\x6d\xd3\xb2\x80\x37\xda\x98\x8c\x5b\x38\xe9\xb4\x3e\x0d\x23\x90\xbb\x60\x33\xc7\x37\x20\x27\x28\xac\x08\x91\x22\x01\xb0\x82\x4a\x01\xcf\xd3\x44\x43\x67\xcd\x7f\xb4\x87\x4e\x33\xeb\x0e\xc0\x3c\x3d\x22\x63\xca\xde\x38\x4f\x32\x40\x17\x35\xa4\x27\x00\x44\xb3\x3c\xe9\x16\xf1\x3c\x55\x28\xd1\x2f\x46\x17\xd5\x8f\xb6\xd9\x0f\x38\xac\x1b\x10\x2e\x7b\xc8\x93\xc6\x67\x7a\x73\xb8\x9c\x67\x87\x37\x45\x04\x20\x7d\xe7\x4b\x63\x86\x87\xe2\xfc\xe2\x65\xf0\x27\x44\x9a\x29\xbc\x7f\x2b\x95\x28\x2f\x2b\x8d\x6c\x41\x54\xac\x45\xe5\x25\x20\x44\x4b\xb8\xba\x00\xed\x17\xf2\x82\xbd\xa0\x79\x39\xa1\xcc\x1b\x76\x3d\xe6\xe5\xd4\xa1\x50\x5e\x4e\x35\x77\x72\x27\x2d\xda\xb3\xcc\x95\x9d\xfc\x78\x48\xa0\xe4\xf7\xca\x7d\xb3\x19\xb3\xc8\xa2\x32\xd7\xd6\x95\x05\x69\x5c\x03\x90\xd7\x95\x49\xc5\x50\x62\x9a\x39\xaf\x98\x0b\xce\x6b\x2b\xda\x58\xe7\x95\x35\x11\xf3\x65\x19\xc7\xf9\xf2\x96\x0b\x0a\x10\x47\x49\x20\xba\x69\x11\x58\x07\x45\x39\x44\xee\xb1\xcc\xa1\x72\xad\x26\x43\xc0\x18\x02\x77\x7e\xee\xee\x19\xf4\xd7\x53\x82\x2f\x49\x2f\xc2\x6b\xc6\xe9\xec\x1c\x17\x8e\x20\x15\x68\xf5\xcc\x38\xaa\x7e\x0d\xf7\x72\xbc\x00\x1c\x81\x0d\x9b\x22\xca\x3c\x53\x9b\xa3\xc7\xa4\x4b\x8e\x98\x11\xc9\x31\xbc\x50\x69\x63\x78\x05\xec\x1f\xc6\xe8\x2d\x47\x1e\xd0\xc8\xd8\x10\x25\xb5\x34\xe2\x57\x5e\x93\x23\xe5\x2e\x7f\x43\x27\xa0\x4e\xa7\x66\x3d\xa9\x9c\x63\xa5\xc7\xd6\x60\xe4\x58\x51\x2e\x62\x83\x82\xba\x18\xd5\x8a\x2e\xd2\xe4\xd8\xb8\x10\x96\x23\x2f\x19\x9a\x32\xae\x99\xc1\x80\x20\xef\x93\xb5\x2a\x40\xe1\x82\x5a\xd0\x80\xe1\xe9\xce\x03\x1a\x42\xb9\xfb\x26\xef\x93\xaa\xb4\xc4\x13\x76\x79\x9f\xb4\xa6\xef\x53\x2e\xd4\xa8\x1b\x7a\x29\x41\x5a\x95\xf7\xe9\x9c\x83\x18\x4a\x2e\x7d\x1c\x28\xaf\x03\xf3\xc4\x68\x39\x73\x9a\xe0\x33\x26\x53\x32\x5a\x2f\xb6\xc4\x39\x2d\xb6\xaf\x2f\xa7\x85\x87\xee\x00\xfe\x8f\xad\x2b\xdd\x72\xdc\xf5\x95\xdf\xe7\x2d\x89\x4d\x62\x26\x18\xfc\x63\x49\x3a\xfd\xf4\xf7\xa8\x4a\x02\x32\xff\x7b\x4e\xb7\x55\x22\xec\xfb\x22\x04\x6c\xef\xd5\x97\x17\x76\x0f\xb2\x5d\x2d\xce\xc9\xa6\x29\x82\x74\xbb\x32\xa7\x7d\x20\xfc\xe2\xb1\x20\x06\xd2\x6e\x33\xe9\xb0\xa7\x60\xd4\x8b\xe4\x71\xdb\x85\x94\xf9\x9d\x7c\x3d\xb4\xa6\x26\xaf\xfd\x54\xe2\x3e\x44\xc6\x09\x4b\x4e\x8f\xc2\x3a\x97\x8e\x7c\xa2\x66\x26\x6b\x2f\xdc\x1e\xce\x29\x34\x58\x64\x74\xd8\x99\x09\xb1\x48\x24\xdf\x82\xa3\x8f\xd3\x69\xfa\x6c\xb6\xe3\x93\x53\x75\x01\x04\x37\x79\x73\xaa\x57\x40\x9d\x48\xcd\x63\x51\x02\xd0\x99\x46\x54\x82\xf4\xd1\x6e\x29\xc9\xf4\x3d\xe7\x5b\x70\x2c\xc5\xcc\x89\x02\x1b\x68\xc6\xb1\x12\x88\x84\x32\x5b\x3e\xad\x3c\xed\x9c\x6a\xc0\xcf\xc0\xec\x57\xf2\x73\xc3\xdd\x2b\x01\x50\xf0\x28\x28\xd0\xc0\x6c\xcc\x61\x29\x3f\x4d\xe0\x56\xa1\x59\x61\xff\x9c\x9f\x3a\xcd\x03\x7a\xa9\x3d\xeb\x26\xd8\xf4\xd5\x81\xc5\x92\xbb\xc6\x02\x74\xb2\x9b\xb3\x6d\xb0\xe4\xfc\xe4\xfe\x85\x00\x4c\x44\x72\x7e\x56\x3d\xf5\x16\x78\xf8\x78\x27\x6a\x66\xaf\x36\xcc\x2a\x89\x50\x2f\x05\x61\xf9\x9c\xf3\x53\xbb\x50\x00\x29\x55\x4e\x6a\x41\x1c\xe3\x75\xb2\x3b\xce\xa7\x26\xe8\xac\x51\x7f\x81\x71\xda\x75\xe9\x01\x68\x7d\x69\xe6\x07\xe3\x41\x5e\x06\xf1\xcc\x38\xeb\xf8\x9d\xc1\x34\xab\xc9\x99\x49\x6c\x5e\x09\x4b\xa6\x1d\xf8\xb2\x00\xda\x5f\xb3\xca\x5d\x74\x01\x9e\x8a\x5d\x0c\x96\x01\x35\x63\xdb\x32\xc4\xe4\x16\x83\x45\x17\x83\xbc\x42\xfe\x86\x77\x02\x80\x5a\xbe\xac\x20\x59\xd7\x7e\x69\xf1\xd7\x6a\x32\x85\xf4\x91\x4c\xf4\x1b\xc5\x51\x9a\x32\x53\x28\x29\x17\xf7\xc4\x37\xe2\x9b\x68\x04\xd1\xb6\xcc\x7d\xe6\x5c\xdc\x0f\xbe\xbf\xc8\xc7\x72\xcb\xe5\xf3\x38\x51\xcf\xd1\x1c\x0b\xe4\xed\x41\xd0\xf9\x6a\xcf\x27\x04\xa2\x08\x44\x66\x14\x59\xb2\x80\xec\xef\xca\xce\xfe\xa9\xf8\x8d\x43\x41\xe1\xed\x94\x5c\x3c\xb9\xc3\x8c\xe1\x47\xc0\x07\x63\x02\xcf\xfe\x72\x49\x1e\x03\x51\x49\x9a\xb0\xfc\x88\x9f\xcd\x9b\xa5\x7c\x7c\xf6\x81\x13\xbf\xe8\xb9\x4b\xe6\xb5\x3e\x75\xd4\x31\xb1\x28\x23\xf1\xd4\x7a\x2c\x80\xcb\x1c\x00\x0d\xb1\x6e\xe8\x6f\x4b\x6d\xcc\x37\x30\xbf\x59\xe2\x56\x75\xe2\x51\xb7\x83\x9d\x43\xdd\x8e\x17\x1b\x0a\x3a\xbf\x0a\xf4\x54\x4b\x98\xe2\xe7\x6a\xda\x53\x32\xd6\x60\x99\xe3\x51\xa5\x56\x81\xcc\x1f\xaa\xba\xa8\xd8\xff\xcd\xb8\x11\xa8\xbf\xb0\x9b\xab\x8d\xae\x30\x74\xd5\xb7\xd7\xf3\x73\x54\xdd\xe6\xa8\x5a\x5c\x91\x19\xfd\x9a\x91\x49\x2b\xf1\x99\x08\x21\x05\x9d\xab\x0a\xa3\x65\x3b\x6a\xc8\xf3\xa8\x21\x73\x5c\xa4\x48\x3d\x65\x83\x74\x00\x6f\x47\xd1\x6b\x94\x80\x0a\x60\xab\x7c\xe6\xee\x98\x70\x8d\x00\x1f\x44\x0a\x65\xd1\x1a\xe7\x67\x5c\x4a\x81\xdc\x0a\xae\xf7\x00\x27\xce\xb3\x00\xb1\x20\xca\x2a\xc7\x2d\xad\xe1\x54\xb2\x34\x25\x61\x19\xf9\x0e\x79\x4b\x52\x54\x60\x41\xc8\xa4\x2e\xeb\x49\xbd\xec\x2c\x04\x09\xe9\x5b\xe4\x57\x22\xd3\x77\x7c\x28\x39\x9a\xfb\x9e\x83\x84\xd8\xef\x77\xcd\x39\x59\xf2\x08\x79\xb8\x90\x5e\x32\x68\x63\xe6\x35\x58\xe5\x0e\x7e\x2f\x94\x4a\xe7\x44\xae\x43\x5e\xc4\x85\x5a\x8d\x63\xe8\x92\xc8\xae\xe3\x31\x28\x2b\x1f\xe4\x1b\xe4\x0b\x89\x1a\x5a\x8d\xfe\xc5\xb1\x51\x51\x50\x47\x1e\xaa\x3e\x75\xd2\xd1\x63\x80\xb6\xb0\xdc\xa9\x8d\x48\x96\x2e\x90\xc4\x14\x30\x06\x61\x5d\x96\x09\x5d\xf2\xb0\xa7\xf9\xfb\x72\xdd\x48\xb8\x79\x93\x28\x43\x9f\xf8\x2d\x77\xad\xb8\xbd\x70\xa6\xd1\x75\xae\xd3\xcb\x83\x5f\x9f\x51\xee\x8a\xfc\x84\x61\x60\xda\xd7\xaf\x0a\xb1\xe6\x5e\x0a\xbf\x4e\x39\xc7\x33\xba\xdc\x4b\x63\x6f\xd1\x11\x2e\xab\x66\x6f\x41\x7f\x6d\x32\xb2\x63\xeb\x35\xf7\x17\xb5\xb3\xde\x72\xff\xcd\xfd\x29\x2d\xf6\xa5\xba\x2a\x08\x1a\x00\x82\x7b\xa9\xce\x80\xfc\xe2\x70\xf8\x96\x91\x7a\x1c\x4f\x19\x7b\x0e\xf8\x3b\x7f\x29\x5c\xd4\xbd\x47\xb6\xbe\x3d\x79\x4d\x09\x7b\x94\xb7\x2f\xdc\x4d\xc8\x6f\x2e\x0a\xde\x36\x99\x79\xeb\xe4\x44\x3b\x9c\xf7\x33\xa1\xc6\xbc\xe1\x89\xd6\x89\xf7\xac\x13\x6f\x1c\x8f\x80\x3c\x66\x90\x51\xad\xb1\x9f\x7d\x47\xb5\xcb\xe1\xfb\xcd\x3a\xf8\x86\x06\xbf\xfc\x66\xef\xf0\xae\x87\x9a\x5e\x50\xe9\x90\xdf\x54\x7e\x2e\x88\x99\xfa\x7e\x67\xd8\xff\x70\x68\x7d\x43\xfa\x34\xcb\x00\xf1\xc3\x4d\xa1\xfc\xa3\x7b\x26\xf9\xc7\x96\xd8\x3f\x1b\xa6\xee\x5c\x26\xfe\xe8\x24\xf0\x07\xd7\x10\xf2\x8f\x26\xf4\x67\x4c\x3d\x7f\x18\xde\x8f\x2e\xbb\x7f\xf4\xd0\x25\xff\xe8\xba\x46\xbc\xfe\xc0\xc3\x8f\x1d\x33\x09\x52\xb0\xd9\x32\xe8\x73\x2f\x78\x14\xf9\x96\x55\x81\x65\x9e\xfa\x2b\xf3\x07\x4d\xfa\x23\x5d\xdc\xa7\xfa\x64\x31\xfe\xcd\x7f\x6e\xd7\x9f\x5b\xf9\x73\x2b\x0e\x47\xbc\x65\x51\xba\x59\x4c\xeb\x66\x71\xdb\x26\x15\xb0\xe8\xca\x92\x45\x26\x5f\x4c\x3c\x04\x14\x25\xfc\xf5\xe0\x37\xf0\xb9\x44\xc5\xac\x2a\x8a\x73\x51\x88\x57\x10\x15\x56\xd7\x71\x6a\x0f\xae\x52\xb9\x79\xf2\xca\x4b\xaf\x2a\xe0\xa3\xda\x86\x95\x81\x8a\x74\x64\xc5\xc2\x7f\x94\xe3\xcb\x84\xc3\x32\x5e\xfc\x21\xa4\x74\x05\x20\x85\xfc\xa1\x2a\x53\xb7\x08\xa1\xd2\x21\x29\x6d\x46\x51\x4a\x65\x3d\xb0\x2b\x6e\xcb\x29\x30\xfa\xb4\xd6\xf0\x4e\xc0\xad\x38\x18\xee\x4e\xaa\x6f\x71\x7b\x66\xca\xf7\x9a\x61\x6d\xff\x98\x32\x65\x30\x33\x41\xfb\x87\x6a\xc2\xbf\x98\x3a\x98\x40\x5f\x3e\xcd\x33\x85\x08\xe9\xf1\x70\x7b\xde\x4c\x2d\xcd\xe0\xb3\xe2\xd2\x06\x18\x16\x58\x5a\xa6\x0e\xaf\x38\x0a\x71\x0a\xd5\x34\x06\x8f\x40\x03\x62\xcf\x50\x43\xda\x8e\x10\x77\xc2\x60\xe9\x0f\x69\x76\x99\xc2\x5d\x4e\x2d\x5f\x6c\xf0\x02\x6b\xb0\x33\x4a\x70\x0d\xb3\xd9\x01\x2d\xc4\x64\xca\x22\x0d\xcf\x1f\x30\x0f\x2e\x0e\xfd\x46\xc1\x21\xa5\x7c\x31\x3b\x10\x70\x32\xcc\x27\x1d\x3f\xf5\xf6\x63\x71\xe7\x8d\x45\x71\xde\xa2\xfa\x05\xe3\xc4\xda\x99\xf0\xba\x8c\x02\xfd\x79\xa9\x8e\xc0\x55\x86\x65\xe4\x41\xa2\xa1\xe6\x53\xb2\x6e\xa8\xcc\x23\x41\x81\x23\x9c\xbd\x40\x2c\x5f\x10\x0a\x8a\x12\x72\xc5\x25\x25\x49\x5d\xa4\xf0\xd0\x48\x55\xfd\x05\xa5\x55\x8f\x91\xc1\xb3\xaa\xe1\xc5\x5b\xd0\xa8\xc4\xb3\x64\x64\x4e\x47\x80\xce\x9f\x3b\xad\xc5\xe9\xfc\x09\x80\x39\x57\x75\x93\x03\xe8\x43\x0a\x25\x0f\x00\xde\x68\x31\x34\x42\xae\x54\x88\x01\x95\x49\x32\xe9\x49\x70\xd3\xf0\x64\x31\xc1\x28\x2e\xce\x60\x8a\x6b\xef\x5e\x2a\xac\x53\x9b\xf8\xad\xb8\x17\xd4\x83\x14\xa7\x2f\x31\x00\x95\x0f\x29\xad\xbe\xa0\x9f\xab\x68\xab\x79\x6b\xdf\xf3\x4e\xfc\x8e\xf8\xfc\xc0\xd1\x87\xbf\x7e\x3c\xdd\x7c\xac\x32\xff\x82\xfd\xb5\x9b\x0a\x85\xe7\x86\xc5\xfd\x06\xa3\x51\x89\xe6\xdf\x6f\x80\xbe\x5e\x75\x6d\x99\xf9\x1b\xe2\x34\x62\x47\x5c\x78\x9f\xbd\xd8\x91\x22\xef\x8c\xca\xd7\x54\x60\x00\x73\x0c\x10\x78\x2f\x10\x09\x2a\xb8\x80\x3e\x9a\x89\x70\x18\xa0\x04\xe1\x58\xbc\xe0\x5e\x7a\x56\x54\x5b\xbf\xdf\x09\x1b\x83\xdb\xdf\x7a\x1f\xd2\x30\x33\xdb\xbb\xe7\x3c\xe9\x06\xf7\xf0\x0a\x20\x05\x2c\x88\x5a\x78\x4d\x67\xaf\xd0\x3b\xb6\x5f\x0c\x99\xe9\xf0\x31\x6b\x84\x9e\x5c\x11\x0b\xd2\xbd\x77\x81\xed\xd0\x65\x83\x30\xfd\x22\x55\xdd\xae\x80\x76\x35\x09\x4c\x48\xcc\x88\xda\xb8\x35\x52\xbc\x9d\x4b\x03\x41\xbb\x2d\x11\xd7\xd0\x8a\x65\xbc\x05\x34\x5d\xb5\x64\x3a\x95\xd5\x82\xd1\x3e\xc1\x3b\xcd\xa1\x76\xf8\xaf\xac\x18\x91\x18\xe7\xfa\x8a\x1f\x8a\xd6\xf2\xd8\x36\xf4\x04\xa0\x3a\x48\x79\x2c\x77\x8a\xdf\x11\x3a\x3f\x2c\x7b\xbf\x1d\x7a\x50\x08\xac\x9a\x8f\x8b\xde\x29\x52\x64\xcb\xd7\xa2\xa7\xc4\x42\xed\x57\x6e\xf3\x17\xef\x7f\xbd\x12\x2d\x2c\xff\x3b\xa2\xfa\x38\x11\xa1\xe7\x13\x3f\x44\x2a\x49\x2a\xfe\xac\xb2\x0c\x3e\x62\xa7\x57\x2c\x94\x3a\x33\x46\x35\xae\x0a\xa8\x15\x3e\xbc\xf0\x21\xf4\xfc\xc2\x11\x15\xde\x13\x30\xe7\x5f\x6c\x1e\xfe\x85\xf1\xc6\xf3\x2e\x41\xf1\x6f\xad\x53\xec\xcd\x85\xd0\x58\xf7\xe5\x8b\xca\x5d\x09\x85\xbb\xb7\xe9\xee\xa3\xca\xb4\x12\x1c\xb1\x4a\x4d\x09\xd2\xc6\x14\x6e\xe3\x90\xbe\x84\x9b\xff\x62\x8a\x12\xb0\xc8\xeb\xb0\x3d\xa1\x87\x45\x80\xea\xfd\x18\x90\xd6\xb7\xe7\x33\xc4\x44\xa4\x3a\x1f\x15\x32\x86\x82\xad\x82\x84\xcd\xf6\x79\x14\x0e\x2b\x5a\xb1\x82\xa9\x26\x2e\x81\x6b\x74\xae\xa7\xe5\xfb\xe0\x34\x4d\x60\xe5\x96\xa1\xc0\x37\x76\x26\x4b\x80\x0a\x5e\x10\xeb\x07\x04\x73\xca\x07\xc8\xc1\x49\x10\x27\xf0\x80\x6f\x37\x5c\x5b\x04\xf6\x87\xc6\x09\x62\x93\x25\xec\xd1\x08\x62\xad\x53\x0a\xfe\xe6\xef\xdc\x16\x13\xa4\xae\xfc\x7d\xa9\xe1\xc1\xdf\x07\x2a\xfc\x5a\x71\xf8\x51\x1c\x70\xf6\x70\x4c\xe6\xc3\xed\x6a\x95\x88\x07\x2c\xc2\xb1\x75\xca\xb8\xb5\x1b\x65\x15\x01\x64\xbf\x26\xb0\x19\x3c\x54\xc9\x0b\xa0\x45\xe3\x71\x58\x13\x0e\x8f\xca\x79\x46\x88\xfa\x0d\xd4\x21\x6b\xf0\x33\xa0\x79\x49\xc6\xbc\x42\x59\x9c\xf7\x1e\xe3\x30\x19\xeb\xb3\xa2\x0a\xae\x4b\x38\x75\xdf\xb6\xa8\x6c\x7b\x51\xbf\x34\x6a\xda\x28\xe7\xcc\x26\x4c\xbd\xba\x25\xa4\xbf\x98\x05\xe0\x1c\x47\xbe\xe3\xc4\xa9\x04\x48\x71\x40\xd1\x55\x81\x04\x39\x68\xd4\xb1\x28\x64\xfe\xca\xd5\x21\x29\x7f\x40\xeb\x0c\xd5\x52\xaa\xa3\x47\xa8\x36\x51\x0a\x55\xe7\x12\xa1\x72\x40\x05\x6d\x9a\x53\x53\xd3\x46\x09\x15\x7b\x49\x58\xbb\x94\xd0\xea\x13\x1e\x63\x03\x01\xfb\x07\xc4\x66\xb9\xfd\xf2\x77\x8c\x91\x12\xe7\x6c\x43\x59\x76\xbb\xfb\x21\xe5\xf1\x1c\x10\x73\x37\xbb\x7d\xb3\x56\x2d\x58\xbb\xbc\xec\x54\x21\xaf\xa0\xe8\xdd\x5d\x11\x9b\x47\x76\x7b\x3d\x20\x1d\x09\xc8\xe6\x93\xa1\x6d\xa5\xa8\x1b\x4d\x4e\x96\x31\xed\x8e\x9f\x6f\xf2\xa1\x6e\x31\xa1\x58\x80\x29\x88\x34\xdb\x72\x0c\x00\x87\xd4\x87\x46\xc3\xc3\x48\x33\x03\x66\x0a\xbb\x69\x13\xd6\x10\xc0\xf8\xb0\x49\x65\x7f\xcb\xa0\x9c\x83\x65\x0c\x6b\x19\xc7\xbc\x20\xe8\x7d\xf0\x6e\x06\x53\x1e\x76\x33\x62\x1b\xcc\xe6\xed\x73\xcc\x35\xf2\x53\x7f\xd1\x0b\x90\x40\x5a\x55\x32\x2e\xf1\x97\x8c\xab\x23\x25\xe3\xae\x83\x5d\xf1\x2a\xf9\xf4\x31\x30\x2f\x4f\x9f\xa1\x6a\xab\xe4\x53\x33\xed\x0c\x3b\x9f\x8f\x04\xb6\x3b\x1d\xc0\xfa\x7b\x5d\xcc\x30\xc9\x9f\x8f\x34\x12\x33\x5a\x67\xc6\x05\xb3\x7c\xfa\x76\x38\x75\x9b\xef\x9c\x8f\xe7\x33\xb3\x34\xce\xf5\xe7\x04\x95\x44\xa4\xf6\x8c\xa6\xb2\xec\x16\x01\xdb\x30\xcd\x46\x4d\x14\x86\x9c\x2c\x14\x0d\x5f\xc9\xf7\x93\x1b\x92\x34\x28\xe5\x70\x8f\xc9\xaa\xe4\xfd\x64\xb0\x43\x31\xd9\xcf\x60\x28\x28\xa5\x0c\x5e\xd4\x21\xd3\x35\x36\x1a\x99\x35\x2e\x0d\x6b\xcc\x05\xaa\xdd\x5f\xaf\x64\x27\x65\xe3\x13\xc0\xe2\x81\x57\x19\x33\x00\x76\x97\x39\x73\xd8\x99\xd2\x33\x02\x4f\xce\x93\x71\x9e\x51\xf4\x68\x02\x54\x7d\xe1\xc9\x03\x00\x84\xe0\x05\x51\x9e\x40\x07\x95\x9c\x4f\x2a\x82\x14\x54\x1c\x33\x22\x9f\xf5\xbf\x1e\x8a\x61\x0a\x27\x94\x8c\x30\xd1\xed\x6b\x7b\xd4\x49\x0f\xe8\xa1\xd1\x14\x3c\x3a\x8b\x4c\xc1\x3b\x9b\xc2\x09\x71\xa7\x82\xc6\x1f\x0e\x77\x00\xbc\xf1\xa1\x3a\x05\x01\x2a\x03\x57\x38\x9d\xcc\xef\xc4\xa4\xbd\x75\x2a\x9a\xdf\xa3\x09\xbc\x13\xa7\x90\xf9\x9d\x54\x54\x43\xa0\x75\xbf\xba\xef\x52\xfa\xe6\x71\x40\x44\xa0\xb5\xbb\xf3\xfa\x87\x50\x64\x18\xa3\x09\xbd\xde\xa5\x07\x75\x48\x89\xef\xd2\xff\xc2\xf5\x5f\x29\x19\xa6\xaa\xc7\x0f\x22\x05\xaa\x3b\x18\xfd\xbc\x7d\x40\xf0\x03\x97\x7e\x3d\x79\x1b\x3c\xba\xaa\x8c\x57\x30\x4c\xe1\x14\xdd\xa7\x0a\x5a\x08\xb5\x5c\xec\x75\x9d\x3d\xf6\x7a\x5c\x7a\xe4\x20\x18\x73\xe2\x5e\x0f\x1d\x55\x81\x30\xce\xf5\x3a\x24\xbb\x89\x39\x76\xf7\xe6\xe2\x6c\xbe\xe0\xe6\xf3\x75\x66\xf0\x31\xf4\x3b\x2d\xd2\xf1\xf0\x71\x55\x7c\x24\xdc\x18\xbc\xfa\x0f\x7d\xfa\x8c\x5b\x3a\x84\x1f\x80\x44\xc2\x57\xba\x04\xfd\x66\xe9\x0c\xeb\x9f\x9b\xa4\xbe\x3e\xdb\x9f\x9b\xfc\x61\xcb\xb2\xc5\x3f\x37\x88\xe5\xf7\x3f\xb7\x7e\x93\x7f\xe9\xc2\x3a\xa5\x23\xba\x6e\x15\x75\x48\x49\xf4\x5b\xc6\x27\x69\xcb\xef\xdb\xe6\x28\x7a\x24\x48\x46\x9e\xbe\xc9\xc0\x43\x20\x5d\x5a\xc6\x6f\x3e\x35\x34\xcf\xce\xb7\x62\x84\x4a\x60\x52\xdf\xfb\xf6\x74\x68\x87\x02\x3e\x74\xf9\xa4\x1c\x41\x1f\x42\x78\x82\x58\x70\x7d\x7b\x42\xc9\xbb\x4a\x8f\x75\x76\xfd\x20\xd8\x86\x13\xf4\x41\x08\x4f\xee\xb6\x01\x40\xb4\xa5\x2f\x3b\x3c\x7d\x7b\xfe\xed\xe7\xa5\x5e\x30\x29\xcf\x68\x2c\xea\x7e\xdf\x9e\x8c\x8c\xac\x43\x41\x4e\x50\x6c\x33\x0a\xc5\x06\xa3\x00\x9c\xd6\x75\x7b\xb6\xa3\x9b\x9c\x75\x1f\x62\xd6\x82\x78\xaa\xd6\xb7\xe7\xfb\x80\x7e\xfe\xbe\x15\xc7\x5b\x7f\x5d\xe2\x46\x19\x91\xbe\xef\xd2\x4c\x85\x04\x10\xc4\x4c\x48\x70\x0a\x68\x4b\xc2\xe1\x7b\x10\x20\x01\x3a\x79\x04\x36\x25\xfa\x93\xd4\x45\xac\x3a\xfb\xfd\xee\xf8\xb5\xf9\xb8\xe0\x98\x8d\x72\x2f\x53\xa5\x9d\x84\x34\x25\xca\x9b\x82\xa1\x0e\x69\x0f\xf9\x4a\x8d\x24\xc5\xf0\x49\x38\x33\x58\x59\x49\xdf\x3d\x37\x9f\xd0\x03\x74\xc9\xd7\x07\x9f\xf0\xe9\x0f\xea\xe4\xee\x8f\x1b\xb4\xc2\x75\x5e\xf0\xed\x43\x4a\xa4\xe3\x3e\x6f\x37\x01\xa6\x8e\xbd\x96\xce\xd3\x4e\x21\xec\x60\xfb\x23\x66\xda\x86\xfc\x48\x7f\xa0\x97\xea\x0f\x5e\x3e\xea\x47\xc1\x47\xbb\xa9\x1e\x6e\x5d\x32\x56\xc5\x93\x84\xb2\xac\xa5\xb8\xe2\x0d\x9f\x40\x4c\x23\x19\xec\x7b\x1c\x31\xd2\x73\x07\x68\xfc\xeb\x51\xc5\x3e\x15\xa8\x47\xcf\x61\x17\x1e\x44\xc7\xef\xe6\x49\x79\x8a\x04\xf4\x01\x1d\x3a\xe0\x80\x1b\x28\x74\xa2\x93\x8e\x4d\x70\xb0\x18\xef\x3b\x6f\xdc\xf6\x79\xd1\x76\xc0\xc5\xb2\xc7\x55\xb4\x1e\xe3\x9d\x22\x15\x86\xd4\x87\xfb\x78\x33\x07\x0c\x7a\x50\x41\x45\x83\x1e\x1e\xff\xe3\xad\x56\xe8\x18\x21\x4c\xd4\xf5\x26\x2e\x29\x4b\x5b\x21\x83\x9c\xf5\x21\x46\x1e\x71\xf5\xc8\x55\x36\x29\xf3\xe0\xf2\xf4\xe3\x62\xd9\xc5\x58\x2c\x66\x25\x53\x29\x47\x8f\x51\xef\x31\xf4\x18\x9b\x57\x55\xb4\x3d\xc6\x37\x26\x61\x1d\x93\xaf\x6e\xf7\x76\x05\x98\x0f\x1f\xdb\x18\xed\x31\xc9\xbf\x00\xed\x4a\xe2\x1b\xa7\x99\xfd\x1c\x8f\x77\xf4\x93\xda\xb7\xd1\xb2\xcf\x5b\xf4\x50\x23\x66\x48\xdb\x88\x70\x38\xd7\x05\xba\x4f\xcb\x57\xbf\x64\x16\x03\x5c\x40\x21\x37\x46\x8a\xf5\x61\x3f\x11\x08\x3b\x8c\xf3\x64\xfb\x3b\x65\x76\x81\x60\x4e\xe4\x29\x97\x36\xfd\xe4\x16\xaa\xf5\x52\xe7\x85\xb0\x2f\xab\x5e\xe7\xa5\xbe\x5c\x99\x31\xbf\xda\xbc\xec\xdd\xe5\x17\x96\x69\xda\x0e\x3d\x14\x10\x68\x82\xc3\x3d\x8d\xe3\xcf\x8e\x09\x95\x7c\x21\xaf\xc3\xae\x12\x0a\xff\x3b\x97\x54\x20\x70\x63\x5a\xfb\x7b\xda\xa5\xfb\x46\xf4\x92\x2e\x1d\x7b\x82\xfa\x6d\x95\x76\xec\x49\xdb\x69\x7a\xd4\x06\x65\xbf\x82\x59\x57\x64\xb5\xd5\x29\x25\x0e\x82\x19\x75\x4f\x26\x1d\xdd\x13\xa6\x57\x5d\x96\x63\x8d\x00\xf1\x7b\xa2\xe1\x24\xf8\x90\x90\x9c\xe2\x9e\x88\x06\x8e\xae\xbb\x2a\x9b\xef\x49\x55\x3c\x75\x3e\x81\xd3\xd3\x07\x35\x04\xf5\x22\x7f\x18\x58\xfe\x70\x01\xda\xaf\xe2\x6b\x93\xb5\x3e\x46\x27\xec\x24\xf7\xa2\xc5\x57\x70\xe2\xdc\x31\xfe\x94\x1d\x55\x54\x08\x7f\xdb\x7d\x9a\xc2\xe9\xbd\xec\xac\xd3\x94\x13\x00\xe1\xe3\xa9\x03\xb7\x05\xb2\x9d\x0c\xce\x06\xff\x5e\x20\x95\xd3\x55\x5d\x21\xce\x18\x3b\xe4\x39\xe4\xfb\xa0\x91\x57\x52\x48\x18\xba\x4c\xa7\xe4\xab\xa6\x87\xad\x4d\x7a\x79\x44\x57\x8c\x22\x36\x8f\x6c\x1b\x39\x13\x0f\xcb\xd4\x19\x2a\x20\x83\x14\xf7\x42\x70\x50\x42\xd3\x0b\xee\x76\x77\x6d\x7a\xb8\xb4\xd8\xd1\x7e\xa0\x57\xa2\x53\xa1\x4f\x2f\x9c\x14\xf7\x02\xbb\xd1\xc1\xe7\x48\x75\xf8\x02\x0a\x09\xf7\xb4\x0d\xa9\x21\x2e\x82\x76\xaa\x14\xea\x63\x7a\xdb\xcb\xa9\x5e\x6a\xde\x6b\x2c\xed\xd1\x05\x22\x4e\x0c\x7b\x49\x99\xdd\x4c\xe1\x74\xb5\x73\x6e\x51\x10\x0d\x58\x2e\xee\x8d\x13\xbf\x5e\x54\xf8\xb5\x17\x4b\x20\x66\x1f\xd4\x62\xdd\x4d\x58\xa2\x97\x31\x78\x94\xea\xf8\x2d\x4a\x10\x4d\x86\xa6\xc3\x4d\x51\x05\xe7\xbd\x58\x26\x0f\xc7\xed\x60\x15\x62\xad\xd4\x6b\x85\xb2\x4c\xe9\x15\x8f\x1a\x74\xca\x43\xf4\x8a\x89\x56\xc5\xf6\x37\xfb\xa9\x7a\xf0\x05\x3b\x00\xdd\x91\x17\xac\x73\x77\x81\x9c\x4a\xd5\x43\xa5\xa7\x64\x76\x1b\x95\xd8\x1e\x36\x18\xb5\xaf\xaa\xc4\x81\xa6\x19\xbb\x28\xcd\xd4\x7a\x50\x38\xad\xd7\xe3\x70\xda\x25\x55\x28\x72\x9d\x53\xe6\x3e\x23\x63\x6e\x47\xed\xaa\xc7\x15\xf8\x53\xd1\x77\x34\x14\x9a\x0b\x88\x60\xcb\x3c\xda\x29\x89\x4f\xfb\xe9\x7d\xa8\xee\x75\xc3\xfa\xc3\x08\x16\x40\x83\x04\x56\x41\xbd\x5e\x91\x0d\xea\x96\x1d\x64\xa5\xb8\x61\x37\xfb\xf0\x00\xda\xb7\xd9\x97\x49\xff\x84\xdf\x21\x04\xd5\x2d\xfa\x78\x2c\xac\xd7\xa6\xd9\xd3\x7b\x93\x89\x43\xfd\x50\x4a\xb6\xd7\x8f\xc5\x45\x45\x62\xfb\xd0\xec\xd4\x9b\xdb\x83\x57\x64\x24\x47\xa5\x6a\x20\x21\xab\x4c\x0a\x29\x8f\xcf\x89\xa7\xe9\x68\x03\x26\xb7\x82\xa5\x01\x88\xd4\x55\x8d\x9d\x10\x76\x10\x82\xb4\x39\x0b\x84\x03\xb4\x1d\x9e\x25\x83\xf0\x74\x9b\xb0\x9f\xd7\x80\xe3\x77\xd6\x3a\x81\x5b\xb7\x9f\xef\x8c\xb1\x20\x6c\xaa\xd5\xc1\x0d\xcb\x77\x9d\x13\x10\x7f\x26\xfa\xb2\xa3\x03\x33\x34\x43\x27\x3f\x51\x35\x1f\xcf\x80\xd9\xd5\xb8\x9b\x0b\x74\xb9\x3a\x92\x51\x37\x5e\xea\xe8\xf3\x76\x6e\x9f\x57\x72\xbb\x5e\x62\x01\xad\x4f\x46\x83\xbd\x33\x15\x07\x82\x8c\x3c\xc8\x69\x24\x97\x17\x27\x00\x28\xa8\x35\xe0\x34\xce\xe6\xcf\x09\x7d\x26\x0a\xfb\xc0\x55\x29\x97\x89\xbd\xf1\x85\x7c\x01\x75\x44\x02\x51\xfa\x44\x7e\xb5\x34\x3f\x10\x5b\x23\x35\x9d\x77\xe0\x9a\x02\x54\xe5\x9f\x7c\x6a\x46\x61\x1b\xbc\xff\xfe\xe2\xc3\xfa\xfb\xfb\xab\x66\xd0\x62\xf3\xfa\x73\x7b\xb5\x3f\xb7\x37\xde\x10\xfa\xf9\x73\x93\xa9\xf5\xc7\x47\x59\xbb\x7c\xf4\xcb\x3d\xd2\xcf\x85\x73\x45\x10\xe5\x65\xa1\xf2\x91\xb6\xff\x29\xd8\x0e\xf8\x14\xb4\xa0\x0f\xaf\xde\x7f\x6a\xd5\xa7\x6b\x05\xd2\xa4\xe9\x11\xea\xc7\x1e\x27\xc4\xb2\xf3\xd3\xf2\x9b\xe7\x6f\x1f\x1c\x85\x7c\xde\xcc\xe2\x0f\xb7\x0a\x3f\x50\xda\xb5\xfd\xd9\xdc\x9f\xcd\xdd\xe4\xdf\x45\x7e\x1d\x89\x8c\x93\x0a\x1a\x81\x14\x85\x81\xac\x88\x34\xd1\x4d\xf2\x20\xc5\xd3\x01\x94\xce\x6f\xee\x76\x93\xd6\xa1\x14\x33\x5b\xc5\x12\x41\xc3\x90\xc6\x04\x66\xf8\x33\x02\x33\x06\xb7\x8f\x7c\xf7\x12\x5e\x8c\x88\x7e\x7f\x33\x7c\x09\x71\x47\x64\x02\xb9\xc4\xb0\x85\xf2\x50\x62\x32\x52\x43\x95\x2b\x1f\x43\xe8\x47\x16\x4c\x17\xd1\xf3\x0b\xad\xef\x40\x55\x4d\x1a\x89\x64\xed\xe6\x6e\xd2\xbb\x6d\xee\x96\x91\x91\x19\x72\x5f\x00\xcc\x1f\x8a\xe8\x02\xd0\x79\x6e\x9a\x25\x54\xbf\x20\x00\xf2\xd9\x00\x99\x76\xb9\xe3\x2d\x88\x62\xac\x9b\xbb\xf5\x8f\x58\xd9\x5c\x72\x17\x81\xf8\x8e\x73\xb6\xcd\x6d\x87\x8b\xb9\x01\x78\x7e\x2f\x63\x95\xfc\xa8\xbd\x90\x74\xb3\x73\x30\xb9\x00\xe7\x0e\xd2\xb7\x03\x16\xc3\x79\x83\xff\x90\x7e\x22\x65\x91\x6c\x4f\x7c\x58\x1d\xb6\xec\x64\xf5\x53\x01\x77\x7f\xd2\xdf\xbc\x7f\xa2\x51\x69\x45\x02\xfd\xf5\x21\x1d\xd6\x1f\x1e\x7a\x46\x00\x55\x31\xca\xc0\xb4\x8b\x2d\x15\x01\x27\xb7\xec\x05\x5e\x78\x64\x7f\x73\x1b\x5e\x49\xea\xc8\xd1\xad\x75\xf1\x47\x72\x69\xe7\x18\x48\x50\x3c\xc0\x4b\x0d\x5e\xec\xf6\x14\xda\x84\x7d\x73\x3b\x2e\x69\x6c\x7c\xf1\x11\x44\x4d\xab\x74\xa5\x44\xc7\xb4\x5b\xb5\xb6\xee\x3b\x7e\x84\x13\xec\xa5\x0b\x4d\x9b\x51\xfe\x98\x7e\x1d\x68\xe3\x57\x4d\x1b\xc6\x09\x20\x64\x0f\xb6\x13\x84\x04\x0b\x26\xc8\xe7\x94\x05\xeb\xe6\x76\xa6\xa3\x6f\x9e\xc9\xec\xd0\x6e\xb3\x39\xbf\xe1\x94\x1d\x08\x16\x7d\x1a\x17\x8b\x37\xe7\xf3\x29\x41\xfb\xea\x4a\xbe\xdc\xc5\xc2\x9b\x5c\x03\xc7\x00\x7c\xed\x45\xec\xde\xe5\x1f\x40\xba\xb5\xcd\x61\x0b\x02\xf5\xe6\x8e\x9f\xf8\xdb\xdd\x33\x17\x01\xe8\xad\x40\x82\x86\xf8\xa0\x7a\x3f\x7c\x64\x5b\x63\xe2\x46\xda\x1e\x10\x3e\xdc\xdc\x11\x60\x7e\x84\x28\x95\x05\x0b\x3f\x21\xef\x3f\x9b\x0b\x12\x7a\x60\xb3\x0a\xfc\x2c\x29\xd3\x2a\x19\x10\xc7\x50\x12\xbf\x0f\x96\x0a\x34\x6b\x08\x6d\x01\x91\xfe\xeb\xaf\xde\x8c\x66\x09\xe9\x6f\x56\x61\x2c\xc2\x62\x54\xb2\xf4\x6f\xa7\xed\xa7\xc7\x07\x57\xb5\x0c\xc0\xe6\x13\x19\xf5\x2c\xee\xe5\x4a\x43\xd4\xc4\xcb\x28\xfd\xdd\xa1\xe0\x57\x1b\x73\x1c\x2d\x3e\xba\x5b\x71\xd5\x9b\x31\xdb\x68\x74\x3b\x73\x3f\xba\xd8\x41\x4e\x27\xcb\x41\x45\x3b\x82\x13\x88\x88\x45\xaa\x60\x55\xd0\x14\x34\x33\x69\xb3\x36\x83\x55\x27\x39\xed\x8c\xa3\x3b\x3b\x7f\x4b\x3b\x0b\x34\x5a\x7c\xdb\xa1\xbf\xbc\xf8\x9a\xd5\xe6\xe2\xe6\x92\x67\xcc\x80\x2a\x51\x51\xe2\x97\xa0\x36\x0f\x8d\x37\x8e\x98\x46\x3c\xdc\x05\xba\xe3\xad\x33\x42\xdb\x49\x25\xd7\x1f\x6a\xc5\x52\x45\xc4\x30\x42\x5a\xac\x5a\x07\x25\xd0\x7e\xa7\x32\x43\x85\xf9\xa6\xb0\x19\xcd\x29\xa8\x63\x4d\x45\xe5\x9d\x46\xc0\x4b\x13\xd2\xc7\xf3\xf9\xca\x8d\x20\x05\x67\xb3\xc4\xd4\xef\xdc\x3b\xda\xf0\x74\x26\x52\xbb\x17\xda\xf6\x77\x7e\x55\x7b\xb0\xe0\xb4\x33\x08\x6f\x65\xe8\xf5\x3e\x22\x61\x67\x2d\xd0\x1b\x35\x82\x2a\x0d\x54\xb3\xd3\xe6\x22\xfc\xbc\x63\x0e\xbd\xb9\x18\x38\xd4\xc5\x70\x2b\xae\x2d\x50\xc3\x03\xce\x66\x0c\xf7\x41\xcb\x22\x68\x4d\x0b\x5b\x54\x9a\x95\xdc\xd8\x8d\xc7\x30\x92\x18\xf6\xbe\xa1\x5a\x85\x3b\xbf\xec\xb8\x63\xb8\xab\x48\xfc\xc0\xcc\x88\xf0\xc0\x4c\x84\xf9\x07\x66\x56\x8b\x30\x6a\x72\xc0\xdc\x20\x86\x4b\xab\x5b\xb8\xbc\x57\x5a\x8c\x1a\x52\x0b\x87\x05\x5c\xdd\x87\x8e\xab\x2c\xdf\x38\x54\xc4\xf0\x23\x5f\xb6\xc5\xa8\x19\xc4\x0c\xc5\x73\x06\xa0\x6c\x1e\xd0\xb4\xbd\xd9\xbc\x25\x72\x34\x8d\x31\xcc\xb1\xc6\x18\x76\x86\xc6\xd1\x11\x7b\xae\x08\x85\x9a\x06\xaa\x06\x30\x52\x33\x92\xb1\xa4\xe3\x3b\xba\x31\xb4\x43\xe6\xf9\x02\x47\x6e\xc5\x25\xab\xf0\x14\x2d\xe8\x7b\x18\xb1\x40\x4e\xe3\xf3\xe9\xd1\x88\x72\xf1\x9b\xbf\xb4\xa8\x73\x59\xea\x4b\x56\x85\x67\x84\x66\xc4\x0b\x6a\x03\x17\xfb\xfd\xd7\x4c\x69\xc0\x11\x28\xe6\x0f\x8d\x2f\x27\xb3\xc2\xc8\x2e\x16\xd7\xd2\x84\xf6\x93\xd9\xd7\xcf\x14\x46\xcd\x23\xc3\xf8\xf4\x13\xa3\x72\xec\x4d\x1b\xc6\xcb\xfa\x85\x97\x76\x60\x2f\xd6\xc9\x57\x68\x81\x08\x25\xf9\xd1\xaa\xfa\xd1\x2a\xfa\x19\x15\xf2\x73\xd5\x4c\xda\xd8\xe4\x04\x40\xf9\x9a\x60\x71\x2c\xf5\xf0\x74\x98\xc2\x42\x8b\xcb\x86\x1e\xf4\x30\x93\xe2\x76\xcf\xdc\x38\x9d\x4d\xb0\xa0\x1d\x4d\x48\xc7\x1c\xf6\x64\xd3\x3a\x6f\xc1\x61\x22\x76\xde\x98\xb4\xf3\xc6\x3a\x01\x8a\xe8\x9f\x37\xd6\xfb\xf3\x96\x1f\x81\x56\xb5\x73\x3f\x6f\x05\xe5\x73\xde\x4a\x90\xac\x63\x69\x9d\x1e\x6f\x6a\x02\x1c\x2e\x28\x8a\x74\xea\x63\xbe\x38\xc2\x9e\x1e\xd1\x60\xa7\x32\x14\x9c\x2e\xea\x4d\x09\x39\x12\x9e\xbe\x44\x9f\x1e\xea\x22\x06\x85\x1a\xe5\x50\xdd\x4e\x9e\xd1\x0a\x95\xfd\xf0\xc9\x84\xb3\xfe\x9f\x99\x99\x93\x4f\xf6\xa0\x67\xce\x98\x6a\x9c\xb9\x14\x0d\x39\xf7\x7b\xe4\x00\x6e\xb0\x18\x56\x2f\x04\x75\x18\x5e\xf8\xb8\x07\x5a\xb9\x00\x14\xdd\x79\xb9\xf0\x48\x03\xd0\xfd\xe5\x92\x06\x79\x39\xe8\x6c\x1b\xc6\x76\x88\x36\xb9\x8f\x62\x76\x95\xe7\xc5\x9d\x15\x41\xea\xc8\xcb\x32\x08\x08\x1b\x25\x02\xf4\x69\x7b\x81\x87\x4f\x34\x3b\xec\xc7\x03\xc3\x90\xd0\x62\x14\x8b\x57\xc1\xa3\x9d\x10\xb2\xb4\x2f\xcd\xd4\x8b\xa1\xe4\xdd\xbb\x64\x28\xd0\x5d\x46\x0f\x71\x5e\xb8\x61\x24\x00\x87\x52\x00\xec\x2e\xcf\x8b\x0a\xcd\x04\x69\xbe\x7c\xa2\xfe\x54\x0f\x4d\x11\x16\xab\x32\xa7\xbf\x07\xaa\x70\x11\x1c\x1e\x88\x77\x72\x81\xd3\xca\xe4\xd8\xd3\x25\x4c\x36\x92\x8c\xda\x9c\xb0\x25\xf6\xe0\xd6\x22\xd3\xd2\xa1\x0b\x1e\x74\xb5\xf0\xbb\x30\xec\x1b\x93\xbb\xfe\x8c\x65\x45\x62\xc5\x4c\x6c\xb5\xc9\xd5\xe6\x94\xd2\xee\x86\x0f\x72\x23\x6d\x7e\x19\x44\x85\x53\x2b\x32\xd3\xf9\x32\x9f\x31\xdc\x7c\x5c\x6c\x31\xa6\x9b\x19\x94\xc5\xda\x32\x3f\x4f\x5c\x92\xa4\x2d\x74\xfc\xb8\x7b\xe6\x93\xd0\x5b\x41\xb3\x4c\xfb\xec\x0e\xd3\x1e\x76\x87\x89\x36\x50\xf3\x13\xe9\xb4\x5b\x38\xf3\x9b\x6b\x33\x21\x78\x87\xc8\x60\x61\xf2\xf7\xc8\x93\x07\x42\xbd\x5d\x40\x86\x8a\x60\x88\x6d\x8d\x29\x38\x75\x33\xbd\x58\x68\x44\x16\x18\x85\xb8\x89\x8d\xda\x12\x8f\x38\x60\x68\x16\xfc\x5e\xa0\xd6\x93\x3d\xd3\x51\xee\xa4\x8c\xe5\xe7\x8e\x83\x38\x40\x25\xad\xa3\x82\xa1\x25\x24\x4f\x19\x6f\x41\xec\x07\x93\x97\x36\x40\x04\x8f\x96\xec\xf3\xba\x18\x4e\x94\x09\x14\xd0\x51\xef\x1e\x18\x13\x52\xd0\xca\xc8\x21\x32\xf1\x7a\xcb\x66\x6f\xee\x6e\x7c\x56\x97\xc4\x8f\x6c\x7e\x62\x8f\x08\xf9\x8b\xce\x22\x25\x5d\xab\x03\xc0\x4a\xf2\x91\x33\xa2\xa4\x71\x4a\x9c\x93\xe3\x6a\xad\x36\x84\x14\xb8\x51\x41\xc0\x1e\x4b\xf1\xac\xd7\x23\x86\xc9\x96\x1c\xc9\x22\x9b\xd4\x46\x4e\x5c\xb8\x09\xc2\x7e\x14\xa1\xd7\x80\xb3\xe9\x04\x25\xa3\xd1\xd0\xe6\x99\x96\x06\x97\x3d\xbf\xec\xbf\x52\x1e\xe5\xa4\x3f\x5b\xf8\x39\xf1\x8a\xa0\x42\xcd\xb1\x9c\x96\xa6\x99\x79\xb9\x4e\x51\x53\xf0\xbb\xfe\xfe\x6b\xbf\x17\x75\x6e\xf5\x59\xaf\xff\x0a\xba\xf8\xd3\xda\x7c\x72\xe3\x4a\x2b\x61\x40\xc5\xec\x28\x35\xee\xb4\x08\xf5\x5c\x1f\x0b\xcc\x1d\xb3\x9d\xd4\x50\x60\x8b\x17\x8d\xe3\xa3\xd0\xc2\xc5\x72\x6a\x1e\x43\xb1\xce\xac\x13\xb7\x31\x11\x78\x3b\x5c\x61\xcb\xd6\xc5\x45\x6a\x3a\x03\x4d\x2d\x44\xcf\xf2\x17\x64\x01\x87\xa5\x83\x68\xe1\x64\x2c\x83\xd9\x1b\x71\xb0\xbb\x24\x82\xd5\x3b\x9d\xa7\xa5\x46\x37\xea\x05\x94\x14\xb2\x6e\x34\x55\x68\x05\x58\x94\x58\xb6\xb5\xa2\x94\xb1\xd4\xf2\x7d\xb9\xaa\x44\x67\xc9\x02\xb5\x68\x3e\x0c\xe1\x37\xf3\xcb\x28\x42\xfd\x9f\x52\x09\x29\x73\xf2\x94\x7b\xdb\x8e\xdc\xa5\xc3\x94\x50\xd0\xbb\x5e\xb3\x5f\xbc\x86\x70\xb5\xe0\x2d\xcc\xdc\x16\xae\x39\xb6\x46\x62\xcd\x1c\x30\x48\x05\x10\x7d\x29\xa1\xea\x8f\xcd\xfd\x0a\x85\x33\xef\xd8\x53\x5c\xb2\x08\x37\xca\x5f\x68\x5c\x36\x19\x5d\x82\x1a\xa9\xa1\x2e\x39\x2e\xdd\x96\xb8\xd8\xf0\x31\x33\xbf\x02\xb2\xe5\x0a\x78\xfd\x59\x40\x54\x65\xa7\x82\x51\x0a\x57\x68\x4e\x49\x34\xaa\x75\x5a\xf1\x39\x61\x1b\x70\x54\x71\x65\xa7\x03\xcb\x8f\x25\x07\x82\x0c\x92\xa9\x0d\x58\x3e\x03\x7e\x59\xd1\x6c\x12\x8c\x01\xe2\xd2\x6c\xc8\xf8\x10\x26\x4b\xe6\xda\x0e\xaf\xd1\x0e\xaf\xb5\xf9\x5d\xa3\xf9\x5d\xb8\xe6\x2c\xb4\xf1\xeb\x6a\xa3\xaf\xf4\xec\xc2\xb3\x3e\x2d\x10\xc3\xc5\xc5\x6c\xb6\x6c\xba\x20\x9f\x03\x37\x25\xe0\xf6\x17\x91\x57\xba\x56\x85\xb2\xae\x9c\x8d\x63\xda\x84\x79\x10\x70\xa6\x77\x95\xcc\x3e\xe6\x82\xd3\xea\xc2\xc6\x44\xd7\xc0\xfd\xa1\xab\x62\xee\x72\x55\xee\xd2\x5c\x3c\x1f\x13\xb0\x64\x5f\xe5\xee\xcc\xd5\xb8\xf3\x02\x8a\xd1\x14\x48\x9b\xce\x65\xb6\xdb\x1a\xd9\x16\x5e\x6e\xfe\xf0\xb2\x88\xb6\xf0\xf2\x4a\xb5\xbe\xd8\x0f\x5d\x2b\x5e\xe7\x42\x55\x28\x03\xc5\x18\x7a\x7d\xb4\xae\x2d\x5b\x7d\x62\xbd\xb8\x1b\xf6\x3e\x8b\xbb\x21\x3d\x45\x87\x12\x50\x76\xe1\x84\x0b\x32\xfb\xbc\xc1\x29\x98\x3b\x37\x42\x11\x46\x61\x5b\x2f\x6e\xcb\xd1\xa8\x1f\xa0\x18\x1a\xb0\xd3\xd6\x9d\x76\x1e\xec\x0c\x8b\x3b\x6f\x4e\x69\x8e\x8a\x7c\x34\x3a\x6b\x19\xd9\xdf\xc9\xa6\x87\x26\xe5\x72\x4a\x36\xfa\xdc\xf0\x7d\xb9\x64\x54\x23\xf0\x72\x3a\x4a\x00\x56\x36\x04\x62\x5f\x5c\x20\xa3\x41\x73\x9b\xba\xdc\xdc\xc9\xfa\x21\x28\xec\x13\xb1\x67\x28\x37\x99\xa2\x1b\x60\xbc\xf0\x50\x36\xe8\xaf\x66\xc7\xcd\xab\x65\xf3\x20\x0c\xaf\xcc\x9b\x51\x08\xb7\x90\x98\x99\x37\x5c\x9f\xb7\xc0\xd5\x6b\x1b\x83\x89\xb2\xa1\xd1\xd6\xed\x39\x07\x43\xab\x69\x2e\x0a\x97\x2c\xbd\x8d\x96\x0b\xf8\xfb\xf5\xc3\xef\xf8\xe1\x13\x07\x58\x6c\xfc\x7c\xa2\xab\x7e\xe2\xb6\xe2\x61\x8b\xd9\xd8\xd3\xa6\x79\xd1\xcb\xfc\xb1\x17\xdf\xd8\x33\x11\xaf\xe6\x1a\x5d\x88\x17\x0c\xbc\x46\x5d\x38\x3f\x7e\xf8\xfd\xfa\xc1\xa2\xce\xc0\x3f\x63\x27\xb0\x6c\xee\x2f\x36\xed\x8b\x4c\xda\x1a\x41\xd5\x5f\xd0\x20\xcb\xc6\x7d\xd3\x05\xda\xdc\x03\x3c\x36\x88\x15\xb5\xcc\xed\x0d\xb0\xd5\x95\x4d\x7f\x45\xad\xdc\x65\xc5\x08\x40\xa1\x40\x41\x9b\xd3\x3d\xf9\xc2\x39\x71\xd9\xc7\xf4\xd8\x14\x54\xf3\x12\x66\xe4\x82\xb9\xec\xc1\x6f\x90\x28\x06\x7e\xb0\x46\xef\x81\x8b\x1a\x02\xcd\x76\x60\x9d\x77\x93\xd1\x6e\x87\xda\xb5\x40\xf3\xfe\x49\xe6\x6f\xd6\x03\x1a\x85\xd7\xb1\x62\x0d\x2f\xb3\x7d\xed\x61\x2e\x37\x95\x31\x0b\xa7\x7f\xb8\xa8\x4c\x63\x5e\xec\x2c\x05\x5c\x0c\xd9\x4c\x89\xd7\x86\xe7\x11\xf0\x3d\x5c\xb9\x26\xd2\xb8\x79\x9f\xb8\x7e\x16\xc4\xfc\xf0\x83\x70\x0c\x24\x42\x1c\xfc\x1d\xd6\x58\x5e\x43\xaf\xaa\xe0\x21\x10\xbb\xb9\xa2\xee\x95\xd1\xd9\x08\x4f\xda\xa4\xda\x3d\x8d\xb7\xe3\xad\x72\x77\xec\xe6\xee\xee\x07\x04\x6a\xb4\x04\x40\x9e\x50\x10\x36\x0f\xca\x81\xfd\x9d\x12\x1c\x4b\x3b\x60\x33\xb5\x84\x1b\x2b\x96\x0c\x36\x9c\x93\x2b\xd4\x48\x73\x07\xa7\x50\xc9\x80\x81\xc4\x4d\x81\xc2\x89\x5b\x99\xbb\xb8\x25\xe8\xd4\xaa\x04\x6e\x3f\xd8\x80\x55\x82\xed\x89\x95\x65\x18\x91\x09\xcd\x55\xf2\xce\xae\x23\x34\xcc\x3b\xb0\x22\x29\x30\xe1\x48\x5e\x74\x3e\x53\x74\x0a\x58\xe2\x3c\xa4\x29\x10\x3b\x50\x8a\xf7\x50\x36\x57\x4e\xf7\x48\x1a\x2c\xb7\x53\x8a\xf6\xcc\xd6\x9c\x60\x66\x45\x37\x66\x90\x45\x15\x5e\x13\xe9\xfa\x5d\xa0\x85\x35\x93\x99\x5c\x67\xef\x9f\xbc\x9e\xcb\x14\x6d\x97\xc9\xd3\x83\x75\x30\x2f\x29\xbc\x58\xf5\x53\x78\x65\x66\x32\x90\x85\x2b\x78\xc9\x95\x94\xab\x45\x74\xe4\x5a\xa2\xb6\xfb\xcd\x15\x9c\x3d\xf2\xda\x86\xd0\xc8\x2f\xab\xc5\x18\xb5\x32\x17\xdc\x85\x95\x58\x2b\x75\x6e\xda\xa3\x0b\xd0\x56\x92\xdb\xa0\xb4\xd3\x2b\xa3\x2a\xcd\x7a\x00\xf8\x89\xea\x73\xf1\xd7\xcb\x31\x7f\x2f\xda\xb9\xbc\x2e\x0e\x14\x69\x41\x91\xd1\xd5\x20\x38\x8e\x5d\x97\xd9\x6d\x4a\x6e\xee\x31\xd1\x63\xfc\x4a\x46\x9d\xb4\xe1\x69\xd3\x1d\x9d\x72\x1d\xa3\x55\x5f\x18\x07\xaf\xfc\xc8\xba\x6d\x5d\xae\xa5\xf9\x5f\xd3\x5e\x3e\xf1\x3a\x58\xe1\x46\x4d\xb9\xb2\x2c\x8f\x99\x96\x5c\xd4\x32\x9f\x77\x27\x6c\xf9\x24\xa4\x7d\x9b\x3c\xcc\x89\x40\xf1\x77\x2e\xd1\x0b\x77\x07\x4b\x09\x5a\xb3\x00\x74\x44\x2e\x5c\x98\x95\xd1\x20\x8a\xd6\x8d\x12\xda\x86\x5e\x4c\x0a\x4f\x8b\x58\x8b\x0d\xf7\x5b\x1c\x91\x8d\xa0\x05\x73\xd1\x82\xf2\xd2\xea\x32\x8b\xaa\x68\x1c\x3f\x5c\xe7\x96\xf2\xd9\x68\x9d\x3d\xf4\xb8\x4a\xbe\x39\xa6\x54\x4f\xa7\x4b\xd3\x6f\x54\xa2\xf5\x12\xa8\x19\x9a\x43\x95\x16\x75\xe3\x9a\xa1\xb4\x23\x6b\x00\x2d\x44\xf3\xd1\xda\x65\x1b\x3d\x76\x9b\x1d\x76\x5b\x8e\x81\x8d\xf9\x10\x53\xb1\x0c\x60\x52\x92\x82\x59\x34\x23\x5b\x36\x97\x96\x75\xe2\x5d\x5a\xd6\x99\x65\x69\xbc\x46\x28\xc8\x56\x0d\xa5\xbd\x0f\xaf\xa9\x53\x3d\x86\x9b\x2b\x5d\xd7\xe9\x65\x8c\xf2\x2f\xb7\x69\x83\xd2\xf9\x14\x97\xad\xe5\xa5\x55\xef\xe3\xb4\xb5\x7c\xec\x88\xa0\xfc\xa2\xbd\xe3\x5c\xa7\xba\x1b\x09\x17\x85\xf5\xe6\x24\xb1\x75\x73\x37\x78\x56\xf5\x04\xb9\xea\x34\xb4\x6e\x63\xaf\xba\xe2\xb9\xaa\x3f\x3a\xa6\x57\x3f\xa8\xe6\x78\xa5\xc2\x50\x82\x1f\xd0\x90\x94\xe8\xa8\x5f\xed\x79\x5c\x81\x9a\xf9\x75\xec\x56\x09\x6a\xf4\x53\xd7\xc8\xd5\x67\x0d\x84\xbf\x17\x7a\xa2\x1b\x42\x04\xfa\x93\xb6\x5f\x8c\xd1\xf5\x58\xd6\xb2\xf5\x70\x6f\x10\x8b\xdd\xa1\xb1\x3b\xf6\xe2\xb8\xf7\x55\x0f\x4f\x2b\x41\xd9\x93\x93\xf2\x7a\x64\x19\x94\x6a\x30\x3e\x9c\x41\x01\xb2\x5a\x77\x7d\x2b\xbc\x7d\xa2\x9f\xa8\x9a\xad\x96\xcd\xd5\x5d\x2e\x6d\x0a\x8b\xf7\x17\x51\x53\x13\xcb\xba\xea\x5e\x34\xf1\x85\x2d\xaf\x56\x5d\x0c\xd6\x1a\xf8\x4b\x50\xce\xe2\x62\x81\xb3\x88\x6b\x0d\xcd\x0e\x4c\x2b\x9e\x51\x06\x8d\xc3\x17\xae\xac\x6a\xcd\x1a\x60\xee\xdc\x3e\xaf\x35\xbf\x59\xff\x64\x15\x46\xa3\xa6\x33\xf4\x4a\xb7\x0d\x0f\x87\x4c\xa4\x93\x1f\xe5\x3e\x03\x5a\x62\x1a\x35\x65\x6f\xb6\x47\x5b\x5b\x78\xcc\x1f\x05\x67\x35\x66\x2e\x72\xda\x56\xcd\x34\x17\xaf\xae\x65\x55\xd2\xa6\xcb\xf2\x05\xf3\x00\x70\xd6\x6d\x80\x24\x6a\x8a\xac\x12\x74\x17\x31\x44\xd5\x6e\x13\x82\xda\xcd\x96\x9d\xa9\x54\x74\x4c\x62\xd6\xdc\x4d\x96\x87\xd5\x30\xf3\xb8\xb9\x5b\xd6\x40\x08\x91\x3d\xcd\x6d\x47\xf1\x66\x63\x8b\x6e\xc2\x8f\xda\xdd\xf2\x79\x23\xe8\x5c\x8f\x35\x77\xb7\x23\x2d\xe9\xdd\xd2\x70\xae\x93\xfe\xe6\xa2\xbf\xea\x87\x28\x2b\x79\x18\x45\xa6\x02\x59\x0c\x63\x7e\xa8\x67\x40\xe3\xf7\x3e\x2c\x5c\x0c\x96\x6f\xf4\x8c\x87\x92\x08\x7e\xd5\xc1\x29\xeb\x3e\x22\x4b\xda\x39\xa3\x76\xe6\x9e\xda\x44\x5c\x8d\x37\x77\x1d\x8e\x35\x54\x60\x9e\x19\x71\x1d\x50\x98\x42\xf8\x41\x4f\xdf\x1c\x9f\xa7\x51\x34\x9c\xe1\x85\x1e\x22\xff\xc3\x44\x5f\x3d\xd2\xed\xf0\xa4\x94\x03\xb4\xb6\x91\xc1\xb5\x95\x7c\x1d\x7e\xc1\x56\x38\xc6\xd1\x29\x95\x5a\x0e\xb4\x09\xbc\x51\x5a\xa3\xdd\x38\x0f\x6d\x1b\x07\xa3\x36\x0e\x68\xdb\x76\x98\xd1\x61\x06\x14\xbf\x19\xda\xc2\x14\x3e\x26\x63\x7b\xf0\x80\x4c\xa9\x3e\x6a\x09\x74\xb1\x6d\x2b\x2a\x9f\x81\x27\xd3\x2f\x52\x88\xc5\x69\xd7\xdf\xfc\x76\x58\xbe\x7a\xdd\x91\x00\x18\xfd\x07\x39\x46\x13\xf0\x1c\xa8\x19\xfa\xfd\xb2\xfc\x3b\x2c\x63\x28\x21\xb0\x95\x9c\x70\xdd\xe8\xe9\xd3\x02\x67\x8c\x84\xb3\x80\x1e\x59\xe6\xe3\xd6\xd8\xc8\x2f\x91\x7b\xe4\x62\x11\x11\xf8\xfb\xf5\x0b\x12\xce\x4d\x58\x21\x1a\x01\x3d\xef\x11\x30\x2c\xeb\x6c\xb0\x79\xad\xa6\xba\x4d\x38\x66\x72\xcd\x17\xee\x02\x12\xbf\x5d\xd7\xa2\xbc\x73\xf3\xa2\xdd\xb5\x44\xef\x56\x4c\xba\xa6\x6b\x0f\xec\xef\xb4\x43\x66\x1f\x55\x51\x5b\x53\xa4\x82\x82\xed\xf0\x3b\x86\x45\x82\x48\x74\x55\x16\xc9\xa1\x07\x77\x04\x4b\x06\x90\xff\x5d\xf9\xae\xde\xfe\x68\x78\xa1\x9e\xf4\x37\x63\xf8\x15\xfa\xfd\xc0\x16\xcc\xe2\x57\x9c\x72\xb4\x4d\x7c\xe2\x35\x44\xf2\x1a\x1d\x30\xe8\xfe\x14\xff\xfe\x63\xf1\x77\xb1\xf8\xe5\xfd\x62\x29\x4f\x53\x8d\xbc\xae\xa9\xdb\xd1\x91\x37\xea\xe3\x5f\xc7\xc2\xe0\xd6\xad\xed\x88\x37\x95\x12\x6a\x3c\xdc\x6b\x09\x43\x48\xcb\x17\x5f\xfb\xda\x5c\xb3\x83\xa6\x56\xd9\x06\x1a\x8f\xd0\x9b\xf5\x80\x4d\xdb\xc8\x98\x52\xb6\x36\x57\x58\x8d\x63\x08\xde\x41\x67\xe5\x68\xd1\x4e\xd7\x04\x42\x72\xa3\xb5\xcf\x75\x68\x1d\x52\x49\xaa\xee\x76\xf9\xa5\x33\x49\x9d\xcc\xee\xd8\xfd\xf5\xdd\x12\xd5\x77\xff\x03\x12\x28\x63\xda\x79\x4a\x87\x99\x65\x37\xd9\x9b\x6e\x72\x2d\x7d\x9e\x7a\xf6\x18\xee\x2a\xd9\x40\xc8\x09\x47\xe7\x59\x68\x57\xc1\x91\x1e\x39\x7d\xef\xf4\x07\x3f\xd5\xb9\x33\x2f\x8b\x1d\xee\x59\x08\x1a\x66\x16\x37\x22\x36\xc5\xc1\x34\x63\x5e\x36\x0f\x22\x67\xae\x3d\xbf\xcb\x9a\x5e\x17\x50\xbd\xaa\x90\x42\xaf\x7e\x58\xe3\x74\xa0\x57\x4f\xd2\xac\x3a\x01\x9a\xfb\xaf\x3a\xdf\xbf\x6a\x7c\xd7\xc2\xeb\x83\x0f\x99\x5b\x11\x7d\xdd\xb0\x7d\xc9\xbf\xf3\x2a\x87\xf6\x72\x51\x27\xa3\x2f\xa7\x32\xbe\x2f\x17\x83\xed\x59\x10\x9b\x4b\x95\xba\x11\xfa\x21\x2d\x83\xb2\x46\xbc\x9c\x1e\xe1\x60\xf3\xf7\xe5\x09\xd1\xfb\x0b\xc1\x2c\xe2\x65\xa7\xab\x9c\x59\xbf\xb4\x32\xbd\x3c\x54\x40\x01\xd1\x5a\xa1\xb1\xca\xf6\xbd\x7c\xc3\x74\xe4\x15\xd0\xf7\xbc\x90\x7f\xaf\xc0\xde\xe7\x85\x47\x38\x2d\x9e\x21\x0e\xd3\x2f\x63\x34\x92\xd7\x3c\x58\xd0\x82\x7a\x65\x5d\xc7\xbc\x98\x25\x62\x26\x53\x55\xa1\x1f\xbc\xb4\xbe\x39\x4d\xdf\x07\xa5\xb5\xfd\xd9\xb6\xf3\xcf\xb6\xff\x91\x2e\xc3\xbb\x94\x79\xe4\x25\x93\xf5\x59\xd6\x9e\xc5\x47\x29\x4d\x0f\xf1\x30\xe8\xb0\xd9\xfc\x1e\xf0\x41\x66\x7a\x8a\x86\xf9\x70\xe3\x37\xcb\x17\xb1\xf7\x21\x86\xfd\x20\x95\x88\xfb\x60\xea\xa7\x37\x1f\x1d\x36\xa9\x7c\x54\x4d\x21\x82\xb8\x67\xe3\xa3\xbf\xf1\x0b\x1d\x58\x8a\x4c\x81\xf6\x60\xcb\x80\x81\x1e\x79\x13\x28\x03\xf4\xe6\x92\x49\x88\xbe\x60\x44\x07\x30\x13\x12\x48\x0a\x80\xea\x13\xcc\x83\x19\x01\x56\x6e\x57\xf8\x18\x6e\x38\xa1\x07\x50\x13\x55\x52\x30\x20\x7f\xce\xdc\x31\xf4\x32\x90\xf0\xec\xda\x73\xc4\x01\xc1\xba\x12\xc8\x9b\x11\xe3\x1b\x75\x93\xc7\xc7\x48\xcd\x42\x9b\xe7\xeb\x9f\xb8\x19\xcf\xef\x2d\x60\xb1\x23\x30\x40\x4c\x52\xd0\x05\x2d\x0d\x90\x4d\xb0\xe3\x2d\xe2\x3a\x4c\x2d\x9f\x22\x0e\x4a\x40\xb9\x5f\x08\x88\xfe\x8e\x68\x38\xd1\xfd\x1a\x1f\x65\x39\xe7\xe3\x4c\xe9\x48\x1d\x22\xd6\x3a\x2a\x11\x4f\xc1\xfd\x69\xa2\xef\x40\x12\x67\x4e\x6c\x40\x2c\x12\xa7\x6e\xb1\x00\x30\x6f\x05\xa1\x9e\xc9\xef\x7c\x32\x74\x93\x3e\x09\x8f\x27\x4a\xfe\xa5\x7c\xa3\x4d\x00\x34\xee\x55\x70\xd8\xa7\x5c\x2f\xbf\x61\x8b\xcf\x27\x3e\xeb\x0c\x00\x27\xe8\xb4\x7c\xaa\xd9\xc8\xec\x4e\xc0\x72\x0c\xf0\xa9\xf6\x32\x3a\x54\xe5\x6c\x85\x08\xd6\x1b\xa5\x3f\x68\x33\x48\x1d\x6e\x14\x82\xd0\x0e\xb6\xff\xf4\x0e\xbb\xd2\x0f\xc1\x2b\x83\x7a\xbc\xc5\x98\x14\x87\xac\x82\x2f\x96\x31\x38\x98\xe6\xa6\xf5\xdc\x84\x02\xe2\x8c\x11\xf0\x0a\x7e\x53\x5c\xc3\xa9\x11\x10\x98\x0d\xd1\xc7\x60\x91\x0a\x37\x47\xcf\x03\x37\x32\x04\xe1\x69\xdf\x01\xcd\x22\x6f\xe9\x02\x9e\xde\xe8\xb0\x78\xfa\x61\xf1\xf2\xbb\x21\xa8\x33\x05\x84\x32\x79\x83\xf9\x49\x98\xd4\x35\x23\xa7\x43\x91\x4f\x10\x93\x03\x99\x07\x4d\xc6\xaa\x0b\x93\x2f\x33\xd8\x06\x64\x39\x01\xfe\x7e\xbb\xfd\x35\xb7\x5e\xc9\xcc\xcd\xe2\xf1\xb4\x30\xe1\xcc\x43\x93\x46\x04\xbc\xf7\xc7\x3f\xf1\x51\xa3\xdf\x7f\x8d\x9a\x5f\x99\xaf\xdf\xec\x17\x2d\x3b\xdd\x2e\x03\xba\x7c\x5b\x12\x35\x92\xc4\x66\x28\x40\x8a\xd9\x19\x73\x5a\x76\x96\x5c\xf3\x39\x20\x9f\xd4\x52\xc6\x9e\x4a\x04\xcb\x96\xd4\xfa\x15\xc7\xce\x2d\x24\x77\x27\x12\x8b\xb9\x48\x95\x91\x8a\x7f\x1d\x2e\xea\xec\x81\x5a\x34\x93\x01\x76\x11\x80\x23\xe9\xc2\xe5\xed\xc8\x85\x62\x4a\xe4\x39\x1c\x13\x4f\xa0\x75\xc6\x18\x04\x0b\x66\xf8\x73\xe5\xdd\x60\x3b\xa0\x6f\x7b\x83\x5c\x21\xe4\x07\x23\x69\xd8\x8c\x56\x05\xc8\xb0\xe2\xca\xe3\xc3\xdd\x0c\x5f\x5c\x6d\x9e\xbf\xf2\x27\x35\xc5\x56\xb0\xd0\xbc\x77\xfd\x39\x5f\x95\x2d\xaf\x6c\x94\xf6\xf4\x65\x43\x2a\xcb\x46\x2b\x70\xe9\x19\x38\x9e\xc3\x41\xca\xca\x32\xda\x14\x8c\x2c\x74\xe4\x6f\x25\x43\xa9\x91\x62\x5d\x47\x82\x51\x87\xd4\x93\x24\x48\x3b\xc3\xe2\xa1\xf7\x46\x6b\xc0\xe4\xe6\x6f\xb3\x7f\x02\xff\x01\xa8\x4c\x8c\x67\x34\x19\x0a\xef\x1b\xc8\x74\x07\x31\xd0\xdc\x60\x61\x14\xc8\xbf\x62\x52\xe4\x8b\x6d\x59\x1a\xd2\xd0\xc6\x8e\xa5\x2f\x38\x3b\xf3\x05\x8f\xe1\x36\xcd\x6b\x3e\x44\xbb\xf9\x02\xcb\xb2\x9e\x47\x1b\x29\x2d\xdc\x95\x84\xa5\x8f\x2c\xaa\x7c\xc4\x2f\x58\x73\x4c\x38\xd4\x85\xd2\x42\x2e\xae\x04\xc2\xd6\x99\x73\x2d\x57\xcc\xbb\x7c\xe9\xd1\x33\x45\x5c\x53\xfa\xd2\x99\xb2\x5e\xab\x26\xee\x25\x93\x05\x05\x51\x3b\xb7\xf2\xa2\xf8\x38\x80\x15\xcd\x0b\xcd\xa9\xbc\x82\x54\x2a\xde\x1a\x61\x3c\xc7\x9e\x9a\x1e\x4a\xf9\x5a\x8d\x95\xae\x18\xd5\xb4\x56\xbc\xb9\x44\xd0\x48\x21\x18\xa9\x53\x06\x3c\x97\x07\x8a\xe2\xe0\x65\x14\xdf\xdc\x86\x7d\x29\xdf\x38\x22\x23\xc6\xac\x84\xe3\xb1\x68\x85\x12\x08\xdc\xde\xff\x6c\xf7\xfd\xcf\x76\x3f\xfe\x6c\xf7\xf3\xcf\x76\xaf\x7f\xb6\xc7\x9f\xed\x71\xfe\xd9\x1e\xf5\xcf\x76\xfc\xd9\x0e\xdc\xcf\x10\xaf\x0e\x77\xc3\x38\x71\x38\x28\xc9\xde\x0e\xdc\xa1\x82\xec\xf0\x01\x75\xba\xa0\x27\x09\x9e\x7d\xd8\x0e\xe9\x46\x0e\xe7\x9b\x23\xc9\x98\x79\x01\x3d\x92\x6b\x87\x62\xb4\x43\xa0\xe6\x7e\x3e\x02\xef\x92\x33\x20\xca\xf2\xa8\xe2\xc0\xb5\x1a\xf9\x72\x65\x2d\x08\xda\x20\x14\x21\x87\x0f\xf7\x90\xf6\x73\xb8\x47\x09\x08\xed\xd1\xc1\x92\x09\x3c\xaf\x12\x00\xf5\x90\x84\xa8\xc8\x02\xa8\x03\x12\xb0\x0e\x43\xee\xe6\x52\x28\x59\xbe\xd1\xed\x1f\x45\xe1\xde\x88\xcc\x72\x31\xb5\x6c\x60\x78\xd3\x57\x60\xa5\xaf\xed\x83\xac\xc0\xa5\x98\x63\xbd\x15\x23\x59\xf9\x0b\xc3\x08\x31\x30\xcd\xf2\xb8\xf9\x1d\x4d\x50\x60\xd8\x8d\x52\x3c\x45\x70\xde\x86\xcd\x79\x1a\x30\x39\x94\xf9\x64\xd5\x23\xdd\x19\x04\xbc\xb4\x1b\x03\x53\x5b\xb8\x19\xc7\x45\xe3\xe1\xb0\x0b\x7b\xe0\x8e\x84\x52\xe8\x73\x22\xf3\xe4\x57\x47\x38\x81\xa8\xb0\x02\xa0\xb9\x17\x48\xa5\x66\x0e\x59\x02\x1d\xa4\x54\x40\x09\x18\x8e\xac\x00\x85\x17\xcd\x6e\x3f\xbd\xeb\x44\xed\x17\xf4\x63\x71\x43\xda\x4f\x2c\xbd\x84\x7a\x6a\x0e\x12\x7c\xa3\xaf\xe7\xcd\x2a\x88\xa0\xa8\x65\x2f\x18\xca\x12\x81\x8b\x43\x6e\x9c\x3e\x7a\x26\xf4\xf4\x0c\xe7\xd4\xda\x77\x8e\x5a\x76\xde\x35\x2f\xce\x50\x11\xd9\xf3\xa4\xdb\xcc\x38\x9b\x74\xb8\xa0\x6a\x71\xe4\x3d\x81\xc3\x9d\xb8\x20\x70\x50\xec\xdb\x4c\x20\xee\x7d\xa8\x7c\x36\x69\x35\xd0\xe8\xf7\x15\x1e\x49\x43\xa5\x70\xb5\x02\xab\x5d\x89\xe5\x91\x36\xb6\x8c\xb4\xcd\xb3\x70\x70\xd1\x68\xd4\x56\x04\x9c\xcb\x02\x17\xaf\xcc\x0a\x66\x0c\x02\x8a\xfa\xce\x89\xc1\x01\xe1\xe1\xc0\xd8\x26\xbd\xbd\x77\x98\x4c\xae\x02\x7a\xb1\x77\x52\xcb\xb3\xf4\x18\x6a\x35\x8d\xb3\x4e\x1b\xec\xbe\xe0\x35\x05\x8f\x65\x3d\x48\xd6\xe2\xf6\xb0\x03\x19\x60\xa8\x88\x25\xbc\xa8\x5c\x8f\x0c\x0d\x93\xe6\x43\xf2\x71\x9a\x98\x47\x69\x39\x8f\x23\x6b\x96\xf2\x07\x55\x2f\x55\xfd\xa9\xda\xf9\xd9\x81\x95\xa1\x7c\xb5\x1f\xe1\xac\x99\x74\x64\x8b\xe9\xa9\x20\xee\xd5\x4c\x99\x05\x10\xee\x34\x57\xc5\x12\xd8\x34\xff\x98\x4f\x90\x94\x3c\x5c\x96\xc1\xea\x70\x19\x56\x2e\x57\x0a\xbb\xb6\xcb\x41\x5e\xee\x70\x17\xcf\x8c\x0e\x08\x31\xca\x97\x4d\xe6\x62\xaa\x2f\xaf\x65\x00\xa0\x11\x06\x26\x0a\x1a\xf7\xcb\x5a\x08\xc0\xf6\x19\xb0\x4c\x68\xe9\xb9\xb4\x3f\xb8\xb4\x67\xbb\x96\x0e\xef\xba\x34\x7a\x1a\x1b\x88\xf1\x1d\xee\x2a\xae\x32\xb6\xba\x85\x76\xb8\x6b\x95\x63\x14\x56\x23\xd2\x7c\xd1\x5d\x3b\x61\x0a\x93\xf1\x5f\xd7\x11\xa4\xe8\xf7\x06\xa9\x7a\x41\x1b\xe3\x0d\xa5\xe7\x65\xa2\x31\x7d\x9e\x06\xdf\x3f\xb7\xb0\x2d\xec\xef\xbf\xb6\x7f\x57\xdb\x1f\x42\xf6\x36\x42\x2b\x01\x6e\x93\x08\x20\xbf\x65\x26\xbe\x6c\xd8\x5a\xf2\x86\xb5\xda\xb0\x7f\x2c\xde\x62\xec\xb5\x7b\x28\x5f\xcd\xa3\x7c\x37\x8f\xa2\xd5\xb8\x3c\xee\x2e\x14\x0d\x58\xbd\x1e\xc3\x5d\x09\xb9\x19\xd5\x6a\x55\xb8\x5b\x8b\x57\x5d\xbf\xfc\xb3\x60\xc2\xcb\xb1\x66\x71\x64\x2b\xcf\x83\xd6\x6d\x68\x2b\x78\x17\x77\x22\xcc\x16\x8d\xd1\x1c\x89\x78\xbc\x90\x50\xe3\xc4\x9d\x03\x00\x4b\x1e\xdd\x9d\x1a\xaf\xd3\x1a\x43\x19\x6f\x61\x0a\xa3\xad\xb4\xe4\xea\x39\x2b\x28\x57\x66\x20\xff\x75\x46\x93\xce\x67\xae\x15\xe6\x3d\x13\xae\xb5\xc3\xaa\x40\xa3\x82\x09\x85\x66\xa8\x43\x61\x69\x5a\x81\xd7\xe3\xf3\x63\x3d\x3f\x07\x73\x1d\x9f\xe8\x78\x1f\x72\xf2\x3f\x64\xca\x48\x04\x2f\xa0\x1c\xf3\x8c\xfc\x70\xe5\xa5\xde\x8f\xb1\x5f\xab\x5e\x3d\x42\xab\x68\x9d\x55\xfb\x1f\xe6\x69\x3d\xf3\xc3\x71\x3c\xa9\x67\x1e\x43\x19\x73\xa6\x56\x47\xc2\xeb\xe9\x40\x9d\xde\x55\x8e\x3d\x95\x9a\x6d\x0d\xd5\x61\xc8\xf9\xbe\xe0\x60\xc7\xd5\xca\xa8\x6d\xad\x0b\xb5\xdf\xd8\x6b\xc1\x42\xd3\x1e\x44\x28\xd4\x27\xef\xe4\xac\x87\x20\xa2\x7d\x16\x7e\x53\xfd\x44\x02\x1b\xcb\x11\x8a\x39\xf2\x8f\x41\x06\x38\xf6\xc5\x0f\xd7\xf7\xbb\x0d\x2b\x54\xe2\xa6\xa0\x4f\xc4\x0c\xee\xf1\xcc\x52\x2e\xc0\x4c\x41\xb7\x0e\xb7\x57\xee\x8a\x1c\xae\x37\xd7\xff\xeb\xb4\xf4\x0a\x56\x57\x09\xe1\xe6\x4d\x17\x88\xe3\x27\x33\x7f\x7f\x51\x38\xde\x5d\x9a\x7d\xde\x5d\x1a\x3d\xef\xae\xfa\xe4\x34\x90\x4a\x6b\xb6\xc3\xdf\xfc\xa6\x44\xea\xb7\x97\xb9\x5b\x06\x78\x52\xe4\x1d\x88\x5d\xb1\xdf\x38\x36\x81\xea\xbd\x18\x65\xa0\x95\xd6\x18\x9d\x32\x81\xa9\x03\xb0\x98\x81\x75\xda\xe9\xb7\xe7\x31\x7c\x3e\x35\x5e\xdb\x33\x63\x2a\xec\x37\x55\x8c\x0e\xa8\x53\x2e\x41\x90\x6c\x00\x1a\x61\x96\xfc\x26\xa8\x5d\x4d\xfa\x45\xfa\xf6\xe1\x71\xb0\xb6\x0a\x57\x74\x5c\xf0\xfb\xce\xc9\x0c\xf7\x5e\x0f\x3f\xd3\xed\x9f\xfc\xde\x38\x94\x78\xff\xb4\xc2\xf5\xfe\xa9\x1b\x1b\x07\x84\x09\x0e\x95\xa7\x38\xbc\x56\x04\xef\xcb\x1c\xe6\xbd\x2f\xd3\x61\x89\xde\x59\x48\xc0\x6c\x27\x60\xc6\x4c\xc0\x43\xa5\x04\xc8\xc8\x42\xc1\x5d\xfb\x4a\x61\x78\x1d\x9d\x90\xeb\x5f\xe0\x33\xa7\x69\xe7\x72\x65\x60\xde\x41\x11\x38\x23\xd3\x30\x55\xf5\xc8\xe4\xa0\x9b\x11\x82\xb8\x44\xfd\x28\xc3\xed\xc8\x03\xf7\xab\xe4\xab\x23\xa1\xd7\x65\x84\xb7\xcd\xcf\xc3\xcb\xfc\xb9\xd0\x56\xb8\x30\x65\xf3\xdc\xfa\x14\x9a\x02\x33\x1f\xe5\x72\x06\x48\x5a\x03\xf4\xc8\xad\x69\x61\x66\x6f\x65\xcc\x87\xf8\xfb\x18\x4e\x4c\xea\xa0\xec\x2f\xfd\xc9\x46\x21\x34\x97\xcb\xe2\xc4\xcd\x0c\x52\x56\x53\x4e\x6c\xfd\x99\xed\xd5\x0f\x30\x49\xab\xc1\x99\x2f\x9e\xcc\x00\x16\xed\x14\xcd\x16\x6f\xdb\x9a\xd7\xcb\xe5\x5b\x72\xf7\xe8\x7f\x88\xeb\x99\x87\xd7\xb6\x93\x04\xdc\x5c\x53\x84\xd2\xd4\xa8\xd4\x4f\x6a\xc7\x8c\x4c\x9b\x21\xe2\xf9\xab\xcb\x77\xee\x18\x4c\x13\x4b\x96\xb2\xea\x0f\x8e\xdc\x27\xb4\x1c\xb9\xdc\x8e\xe5\xac\x3f\x7b\x79\xc0\x6a\x62\x1f\xe8\x75\xc6\xe7\x13\x2f\x53\x1d\x3e\xe9\x52\xd5\xe7\xf4\xa8\x58\x85\x78\xc8\x48\x80\x58\xf3\x87\x86\x30\xa5\xa3\x86\x0a\x83\x28\x16\x96\x71\x79\x60\x5c\xf3\x25\x9c\x19\x4b\x42\x99\x94\x68\xe1\x96\x94\x7f\xd5\x56\x66\x6f\xa0\x7d\x48\x29\x1f\x5b\x4a\xf9\x52\xf1\x5e\x23\x20\xed\xf4\x9b\x12\x9e\x10\x1d\xbe\xbc\xd8\x1b\x94\x57\x4e\xbe\x21\xf4\xfa\xc4\x14\x54\xeb\x78\xad\x23\x7e\x15\xa2\x6f\x87\x2a\xaa\x02\x80\x66\x78\x41\x8d\x5f\xe9\xcc\x76\x83\x7a\xd3\x4d\x98\xd1\x64\x6a\xc3\x4d\xbe\xc3\x9a\x8e\x0e\x25\x1c\xd1\x3d\x4f\xc3\x80\xe8\xef\xcb\xe3\xe8\xe1\xf0\x2f\x25\x96\xcb\x2f\xd6\xa0\x97\xfd\x6c\x83\xbe\x7f\x15\xfb\x25\x73\xc2\x20\x88\x72\x1e\x87\x7f\x21\x61\xec\xe9\xfd\x1b\xf3\x11\xff\x0e\x49\x8a\x44\x3a\x11\xc9\x6d\x68\x6f\x07\xcd\xf8\x96\x9c\xeb\xa6\x22\xba\x93\xb5\xdf\x26\x46\x45\x11\xe2\x8c\xb6\x0f\x2a\x95\xe0\x5e\x09\x9a\x2d\xaa\x83\xa3\x91\xee\x92\x04\x5c\x19\xf7\x44\x69\xd0\x32\xc0\x47\x11\xc2\xda\xb6\xac\x06\x98\x90\x85\xed\x08\x11\x51\xde\xe8\xd7\xd3\xdd\x02\xd4\xa8\x00\xef\xde\x2b\x2a\x86\x7c\x32\x7a\x61\x00\x0e\xdb\xf3\xf2\xf4\xea\xa9\x9b\x28\x3c\x04\x3e\xa0\xdb\x40\xbe\x0c\x90\x1d\x6f\x40\x87\x17\xfc\x7d\xc7\xa8\x11\xfc\x5d\xf3\x57\x11\xc6\x79\xc5\xda\xd7\x69\x4d\x08\xf7\xbb\xed\xcf\x84\xfb\x1d\x05\x05\xca\x42\x17\x58\xa0\x78\xe2\x08\x0f\xdf\x1c\xd2\x44\x11\xd5\xc3\xd6\xb9\xe1\x91\xf1\x7b\xbc\xe9\x64\x23\xc4\xfd\xe6\x1d\x37\xb1\xc9\xec\x0a\x42\x41\xa5\x0a\x71\xf7\x4a\xca\x89\x69\x78\x88\xfb\xc1\xce\x3c\xc4\xa9\x84\x46\x98\x65\x08\x11\x2e\x3c\xfd\xe4\x4e\x3e\xf9\x09\x3c\x4d\x0b\xf3\x92\x99\xc5\x52\x80\x7a\x74\xd2\xb2\x1d\x13\x7d\x14\xb2\xa6\x08\x68\x04\x09\xaa\x68\x04\x5d\x9e\x32\x96\xd4\xde\x72\xe8\x31\xab\xd0\xa0\x64\x84\x1c\x27\xea\xf4\x70\x0e\x3a\x41\xb7\xad\x8f\x39\xf8\x84\xd3\x71\x64\x09\xa7\x83\x97\xe7\x0d\x5f\xcf\x6f\x51\xe2\x94\x9a\xf1\x94\xd4\x38\xc2\x09\x79\x6b\x52\x1b\xbd\xc9\xa0\x03\x0a\xe7\xc5\xaf\x4b\xbf\xac\x68\x58\x9d\x86\xe4\x6c\x7e\x13\x12\x83\x4e\x0e\xaf\xf4\x08\xba\x71\x77\x2d\x24\x5c\x77\x23\x3a\x94\xc8\xa8\x2f\x83\xac\xb2\x3c\xce\x15\x08\xa5\xe0\x10\x5f\xc2\xf7\xce\xde\x27\xa4\xe7\xf0\x23\xf3\xab\x77\x70\x00\x55\x20\x40\x70\x1c\xa6\x46\x33\x23\xf1\x5f\x1f\x3e\x60\x97\x27\xa4\xb7\x43\xb5\xca\x29\xef\xf9\x07\xc1\x23\x91\x97\xf5\x89\xe1\x3a\x3b\xba\x8f\x70\xe5\x08\x79\xc8\x23\x5c\x97\x4f\xbb\x63\x8d\xd0\xd5\x6d\xd0\x5b\x6a\x02\x90\x13\xa3\x4b\x0f\x58\xfb\x04\x76\x22\x65\x59\x6c\x84\xb9\xf3\x0d\xfc\x39\x93\x56\x98\x02\xc1\x5d\xb3\xa4\x42\xbc\x02\xaf\xbc\x07\xb3\x72\xe5\xdd\x4c\x65\x81\x8a\x95\xac\x31\x59\x9d\xea\x82\x3a\x94\xcb\xe8\xa8\x5e\xa5\x74\xab\x89\xa5\xf3\xcb\x97\xff\x0c\xb2\x40\x39\x20\x08\xa1\x5d\x04\x8e\xa3\x46\x21\x45\xf7\x10\x42\xd3\x85\x43\xe0\x2e\x66\x50\x71\x9a\x23\x70\x75\x10\x5a\xb3\x2b\xfb\x82\x7d\xb1\x9f\x5f\xf8\xb8\x38\x05\xf6\xc9\x7e\x08\xb4\x3f\x7b\xc9\x37\xba\xf3\xb3\x9b\x30\x39\x38\xb1\x1d\xf3\xdc\x26\x8d\x59\x3b\xe7\x98\x8b\xdb\x92\x57\x14\x95\x9e\xb7\xbe\x85\xc1\x84\xf1\x3b\x14\x1f\x04\x5c\x5f\x03\x9f\x86\xa5\x71\xb8\x03\xae\xe2\x50\x6c\xb0\x06\x76\x67\x3e\xed\xc1\xfd\xfa\x2b\xff\xe0\x28\x46\x0c\x78\xf0\x0e\x94\xb6\xe3\x63\x71\x7b\x74\x97\x86\x9d\x09\x4c\x82\xcc\x18\x14\x22\xf0\xb0\xc1\xb5\x9a\x40\x0b\x3d\xbb\xcd\xeb\x64\x60\x70\x92\x9e\x69\x74\xf3\xe9\xd7\x4f\x6e\x7d\x54\x81\x46\x76\xb5\x0c\x8c\x6f\xc7\xb4\xec\xdb\x41\x6d\x7f\x64\xf1\x3a\x03\xe1\x57\x12\xf8\xc6\x6b\x5a\x98\xfc\x5f\x0f\x4b\x14\xbe\xc3\x4b\xee\x3a\xda\xe1\x16\x8f\xaf\xc3\xf9\x99\x22\x44\x3f\xae\xcc\xea\x5a\x85\x34\x89\xc3\x36\xc3\x45\xdf\x68\xb8\x4c\xcf\x25\x2a\x86\x39\x7b\x04\x92\x96\x60\xfe\xb4\x23\xb8\xdf\x99\x9c\x56\xc2\x3d\xf6\xff\x4d\xff\x30\xff\x4a\x0f\x6a\xcf\x5a\xa1\xd6\xf8\xaf\x31\xbc\xa4\x29\xff\x4e\x6b\x25\x5f\x7a\x9d\xd0\xd8\xc3\xa7\xeb\x53\xc2\xbe\x78\xd6\x7c\x2b\x6e\xfb\x6c\xda\xa3\x49\xfe\x9f\xe2\x5f\x76\x29\x6f\xdc\x23\x10\x08\x7d\x23\x51\x97\x1b\x79\xc3\x5e\x3a\x37\x61\xf2\x36\x36\xde\xf3\x46\xe3\x3c\xec\x35\x27\x6b\xc1\xcc\x3d\x7d\x21\xda\x06\xf3\xd3\x54\x39\x00\xb2\xc9\xe5\xa7\x1f\x93\xd0\xfc\xf4\x3b\xd4\x98\x1c\x99\xcb\xdc\xfc\xf4\x74\x88\x20\xa2\x5f\xf5\x58\x81\x87\x18\xaf\x21\xbb\xd0\x66\xbc\xae\xab\x94\x9b\xdd\xa2\x19\xd4\x6f\xeb\x79\xb2\x7b\x1e\x0f\x6e\x4c\x7e\xb2\x9e\x24\x06\x4c\x14\x14\x05\x4a\xe6\x0a\x9b\x34\x52\x45\x89\x53\x6a\xd2\x62\xc2\x40\x96\xe0\x0c\x6e\x72\x96\x28\xe2\xf1\x5b\xe0\x97\x79\x8d\x81\xbc\xf9\x02\x01\x98\x23\xb3\x27\xc8\x31\x5b\x54\x50\x88\xaa\x55\x8c\x20\x6f\x99\xd1\x01\x83\x71\x5b\x21\xdb\x06\x99\xba\xfc\x32\x8c\x71\x6e\x4a\x34\xae\x20\x82\x85\xa8\x0d\x11\x52\x93\x9f\xc8\x18\xcc\xea\x72\x66\x72\x33\xb7\x82\xf2\x65\x5b\xae\x99\x43\xa4\x10\xb2\x31\x3f\x30\xbc\xe8\xfd\x90\x03\xaf\x5e\x6b\xfe\x8c\xcd\xdc\x5c\xa8\xc6\x46\x00\x43\xc5\xf8\x29\x1d\xe4\xe9\x6b\x96\xb9\xd9\x9f\x79\x64\x2f\xc0\x2b\xe5\x58\x90\xcb\x0e\x25\x85\x34\xd4\xaf\x23\x31\x8f\x29\xe7\x26\x20\xef\xc5\x9d\xfa\xeb\x32\xa6\x0e\x0e\xc9\x2c\xc1\x61\x12\x44\xa0\x7e\x68\xa2\x4a\xc8\xd4\x79\xc5\xc3\x9b\x8c\x3b\x76\xe3\x76\x27\x78\x7f\x85\x26\xeb\xf4\x69\x32\x00\x63\xc1\x63\x20\x08\x0d\x6b\xe8\xe1\x97\x26\xf9\xe6\x1a\x1b\x44\xc9\x8f\xa0\x74\x89\xe5\x1a\x49\x99\xc4\x68\xfd\x2f\x7a\x2a\x7b\x48\xc3\x67\x18\x4d\x2b\xa7\x16\x60\xe9\x55\xd5\x15\x4b\x3d\x47\x75\xe9\xf8\x60\xc2\x94\x7b\xe4\x0a\x5e\xaf\x99\x41\x2b\xe0\x91\xdf\xbb\x32\x7c\x55\x62\x3b\xb0\xab\x5a\xfc\xc9\xd1\xbd\xf8\xf3\x57\x41\xe5\xa4\xa7\x78\x69\x52\xae\x21\x86\x94\x63\x04\x91\x41\xc9\x8c\x90\x07\x92\x05\xfa\x63\xdb\x0a\x74\xa9\x00\xeb\x6e\x9a\x56\x4c\x7d\x5a\x48\x41\xd8\xd4\x43\x65\x30\xa6\x29\xa3\xb5\x4a\xb9\x09\xf7\x81\xd2\x40\x8b\x27\xe8\x5b\x00\xf5\x82\xd4\x64\x98\xcb\x64\x35\x73\x95\xe1\x15\x03\xe5\x2e\xcc\xd7\x17\x96\x55\xb0\xb0\xb5\x95\x7c\x1e\xf6\xf0\x11\xb8\x6f\x26\xe9\x29\x5c\xb1\xa6\x2a\xa0\x6b\x34\xb2\x12\xdc\x2c\x02\x92\x2e\xc0\x64\x21\xfe\x31\xb0\x5c\x5b\x8c\x34\xc6\x2a\x82\x03\x98\xbc\x65\xeb\x57\xbc\xd7\x58\x0b\x6e\x5f\x81\x4c\x03\xf3\x51\x2f\x34\x0c\xdc\x0c\x97\xdc\xbc\x65\xb4\x75\x38\x80\xb6\x4b\x53\xf2\xf9\x41\x85\x61\x25\xc8\xc9\xfd\x04\x9a\xa7\x59\xa0\x49\x57\x98\x8a\x98\xb2\x94\x6f\x61\x96\x43\x9a\xc5\x45\xb8\x14\x66\x5a\x62\x9f\xbe\x72\x67\x6a\xbe\x32\xc6\x7c\x53\x69\x1f\xc3\xc5\xcc\x35\x96\x79\xf1\x42\x65\x09\x07\x86\xd5\x4f\x75\x91\x75\x0d\xa8\x2a\x4a\xed\xf0\x27\xcb\xf3\x53\x5d\xc9\x37\x66\xce\xa7\xe6\x9b\x2f\xcc\x88\x4f\xcd\x1b\xbb\x3d\x40\xed\xef\x05\x8f\x54\x18\x66\x14\x8c\xd3\x70\xc7\x4a\x46\xb0\xce\x32\x05\x9e\x7e\x44\x08\xf3\x83\x69\xe9\xd2\xa1\x45\x70\xe3\xf2\x54\xe2\x8b\xfd\x9f\x7e\x73\x15\x83\x7d\xbf\xdd\xac\xa7\xc6\xa3\x32\xb0\x86\x67\x63\x78\x53\x60\xe2\x71\x00\xab\x8f\xca\x00\xbc\x29\xae\x2c\x50\xe2\xd9\x77\xc8\xe0\x1e\xfd\x0e\x43\xac\xf2\xfb\x94\xb8\xe8\x0f\x7c\xb8\x9c\xef\x4f\x5a\x7d\x72\x7e\xd0\x71\xb3\xe7\x40\x26\xe2\x99\x08\x75\x82\x39\x04\x9e\x88\x78\x28\x18\xab\xf5\x4e\x23\x2c\xbe\x7a\x1a\x3b\xcb\xdd\x4e\x3d\xfb\x75\x61\x87\xa9\x5f\x78\x21\x56\x50\x81\x98\xfc\xd1\x4b\x48\x0f\x82\xc8\xef\xe2\x6b\x49\xfc\xce\xe3\x36\x2a\xe9\x07\xd5\x68\x20\xfb\xbb\x56\xc5\xde\xb8\x2c\xee\xad\x05\x9a\xff\x32\x2d\x42\x25\x02\x1f\xe4\xea\xe7\xe4\x97\x8e\x3e\x63\x33\xf5\x73\xe2\x0d\x35\x80\x56\x3e\xd7\xbf\x8c\x76\x0c\x9f\x4b\x5a\x56\x70\xc9\x49\xcc\xc3\x4d\x35\x67\x86\x5b\x56\xb0\x21\x6d\xb2\x5c\x27\x69\x85\xed\x8b\xd0\x4e\x3a\x95\x93\xf4\x10\xfe\x18\xf8\xfd\xb2\xf1\x4b\x1b\x3e\x7e\x40\x64\x75\x0a\x92\xe0\xe3\x81\x4a\x27\x1d\xf5\x8d\x0a\x6a\x09\xc5\x12\x86\x92\xe0\x8b\x0c\x74\xec\x7a\xe4\xab\x5e\x53\x3a\x24\x44\xc6\xf8\xa4\xbc\x4b\x80\x1c\x2e\x0c\xbc\xed\x98\x84\xd3\x4b\xc4\xb0\x15\x20\x5f\x9c\x73\x13\x68\x43\x50\x66\x81\x23\x89\xca\x9e\x03\xfe\xce\x5f\xb8\x4f\xae\x1b\x39\xea\xda\xf3\x82\x60\x60\xb7\x09\xd2\x74\xcb\x96\x0c\x46\x1a\x42\x6b\xae\x2b\xa7\x5e\x0d\x1e\x25\xbc\x1a\x7c\xc0\xca\xac\x10\x84\xfe\x16\xb7\x68\x52\x00\x8f\xb9\x9e\x22\x64\x50\x1a\x9a\xdb\x08\x33\x03\xc2\x8a\x21\xa4\x47\x8f\x36\x4f\x06\x43\x27\xc9\x41\x84\x56\xc0\xe9\x99\xbe\xe4\x4e\xfa\xf1\x5f\x77\x41\x81\x57\x42\x11\xd8\xf3\x8b\x6b\x0b\x97\x15\xef\xde\x29\xba\x67\x59\xff\x32\x56\x9a\xf6\x8b\xfa\xfd\xb7\x70\x65\x08\x66\x86\x0b\xf7\xb7\x83\xcc\x1f\x43\xd9\xf0\x41\xaa\x0b\xfb\x79\xd0\x06\xda\xc3\xa0\xfa\x4b\x5f\x94\xee\x92\x95\x66\x42\xa4\x20\xba\xa5\x42\x1b\x6f\xce\x4d\xbc\xdc\xf0\xef\x3f\x16\x7f\x17\x8b\x33\x94\xf8\x65\x8b\x39\x5d\xf4\xf6\x8b\x80\xd3\x9d\xb7\xc0\x93\x93\x95\xfd\x4c\xf6\xcb\x0b\x33\x30\x7f\xce\x9b\x4f\x7b\xb8\x0d\xdf\x4c\x8c\x1a\xcc\xdd\x97\xc5\x67\x70\xd3\x21\xcf\x43\x14\xf6\xd5\x5e\xaf\x33\xb8\xc7\xa7\xac\xa1\x87\x34\x04\x06\xc1\xff\x75\xdb\xe2\x92\x9c\x45\x3d\xe6\xad\x2f\x4e\x8d\x65\x35\x10\x93\xe4\x5e\xe3\xde\xeb\x6a\x30\xa2\x98\x7a\x5b\x7f\x96\x8a\x3d\x12\x5a\xf2\xd7\x6f\x75\xe3\x93\xb9\x93\xbb\xd6\x5f\x2f\xbf\xfd\xcb\xce\x22\x3a\xab\x2a\xef\x1a\xcc\xb8\x10\xb1\x9a\x2c\x1e\xe0\x36\xcd\xca\xaf\xb9\x2e\xcc\xf7\x4f\x23\x41\xaf\x1c\x97\x2c\x41\xf0\x6c\x31\xa5\x1c\x9c\xd6\x85\x52\x02\xbf\x38\xa4\x53\x40\x2b\x79\xeb\xa7\x55\x9c\x92\x71\xb5\x57\x19\x92\x3a\x5a\x2d\xc6\xe0\x50\xbd\xeb\x3f\xa0\x54\xff\x29\x80\xbd\x54\xa5\x08\x40\xa8\x15\x47\x80\x2c\x12\x99\xdc\x27\xa3\x0e\x00\x13\x3b\x78\x5e\xa9\x26\x36\x50\xe4\x33\xd4\xf6\x72\x32\x7a\xa0\x91\x35\xb7\xcb\x2c\x7e\xdc\xcd\xd1\x16\xd7\x28\x30\x03\xca\x10\x1a\x5b\xf5\x2a\x1d\x1b\x5a\xf8\xf5\x83\xa2\x41\x02\x71\x73\x3f\x34\x76\x6a\x2d\x7f\x68\x09\x9b\x6a\x42\xd2\xc3\x13\x34\xd2\x79\x54\x39\x19\x0d\x94\xbd\x5a\xe3\xfa\x2b\x68\x3a\x84\x70\xa2\x05\xc8\x0d\xb3\x01\xe3\xc4\x99\xb8\xc7\x68\xee\x91\x01\x4d\x33\x0b\x95\xa4\x7d\x2a\xd5\xb8\x85\x97\xfc\xa3\x07\x7a\xb1\x6f\x7f\xa9\xc6\x77\x80\xd1\xb5\x80\xb1\x89\x8f\x72\x45\x11\x7c\x14\xf0\xbb\xda\xfe\xfd\xb2\xfd\x6b\xb6\x87\x19\x7a\xda\xd7\xeb\xf3\x47\x96\xc4\xcf\xf7\x9f\x2d\xfe\xd9\xa2\xbb\xa1\x49\x44\x77\xeb\xfa\x98\xda\x16\xdd\x76\x48\x7c\x22\x1f\x8d\xd9\xa2\xdb\xb9\x0c\x8e\x6e\xcf\x1b\x2f\x8e\x0a\x94\x2a\x27\x54\x77\xbd\x00\x55\xe3\x50\x84\xa2\xf7\x46\x40\x3f\xc2\xc9\x73\xbb\xe8\x42\x71\x7d\xd7\xfe\x4c\xb8\x8a\xe7\xe2\x27\x54\xfb\xe5\x05\xa9\x0d\x58\x42\xac\xce\x1b\xce\xcc\xe3\x10\x9d\x8c\xee\xfc\xeb\xce\xbb\xd4\x88\xe8\xc6\xbc\x2d\xba\x33\x17\x25\xde\x00\xca\x19\x68\xf4\xef\xc2\xf5\x62\xd4\x0f\x64\x56\x2f\x7e\xf1\x30\x3c\x90\x5a\xc1\x1b\x3f\x40\x54\x97\x10\x99\xaa\xb4\xf3\xa0\xd1\x3c\x57\x1e\x65\x15\x55\xd8\x4f\x28\xe3\x26\x13\x47\xf9\x0e\x09\xa3\xe8\xd2\x78\xec\x4f\x18\xcb\x2c\x00\xd6\x74\x61\x54\x62\x27\x3a\x3b\x03\x88\xee\xca\x8d\x59\x7e\x69\x0c\x85\xce\x5f\x2f\x5f\xb6\x48\xf1\x92\xe8\xae\x56\x1c\x7c\x42\x97\x02\xc2\x2c\xe0\xc7\xdd\x58\xc9\x05\x06\x04\x53\xac\x98\x8a\x4f\x90\x8c\xd6\xdb\x58\x52\x57\xa4\x85\xa6\x05\xb3\x2a\x92\x63\x70\x45\x3d\xe1\xd3\x1d\x0a\x34\x7f\x81\x27\x63\x4e\x99\x5d\xe5\x19\x18\x8d\x8c\x6f\xd5\x0a\xc2\x92\xae\x5a\x43\xea\xc5\xaf\xdf\x95\xd2\xb4\xf2\xcb\xb3\xee\xa8\x5a\x1e\x85\xca\xf4\x54\xfd\x27\x63\x99\x2d\x1c\x5a\x87\xc1\x66\xd0\x7e\x5e\x93\x07\x76\xf8\xb9\xf8\xa1\x94\xdb\x09\x82\x28\xd7\x22\x88\x72\x32\x71\x88\x1a\x45\x69\x01\xd3\x4b\x6c\x6d\x09\x69\xb8\x54\x62\x4c\x19\x2b\xe8\xc1\xe2\x7c\x72\xe1\xec\xc7\xce\x62\x7b\xf1\x0b\x3b\xaf\xb0\xdc\x37\x9b\x6c\x56\x86\x5b\x60\x03\x4e\x5b\xd1\x5c\xe7\x92\x14\x7d\xa2\x4e\x5a\xc9\x49\x1f\xad\x3d\xc5\x2b\x98\xb1\xb7\x86\xf3\xca\x1a\x97\x8e\x0c\x79\xff\x99\xd5\x0f\x79\xff\xb9\x69\xed\xff\x8c\xcc\xfb\x9c\xd8\x1b\x88\xee\x73\xb1\x76\x9b\x10\x41\x74\x1f\xbd\x30\x12\x3d\x4f\xa4\x85\x42\xbc\x57\xfb\x3a\xe1\xd9\x39\x79\x97\xec\x80\x52\xf0\x44\xd0\xc6\x2e\xa0\x9a\x07\x54\x89\x29\xa8\x5f\xa0\x45\x3b\x1a\xef\x0a\x55\x04\x0a\x52\xdb\x65\x5d\x81\x46\x3b\xec\x15\x30\x8d\x6a\x93\xa5\x83\x39\xa8\xdc\x89\x12\x88\x4b\xbf\x00\xe6\x8a\x71\x79\x8d\x15\x1e\x98\x07\x83\x7c\xa9\x0f\x2f\x48\x62\x44\x88\x30\xe1\x35\x82\xe8\xe1\x58\x86\x5b\xaa\x67\x22\xa6\x50\x1e\x71\x3b\x3c\x65\x01\x23\x56\x0d\x70\x7f\x72\xaa\xc5\xa7\x31\x30\x36\x45\x8f\xd1\x3c\x7a\x6c\x9c\x40\x41\x06\x2e\xe3\x47\x7f\x35\x5c\x9e\xa4\xc3\x0b\xea\x79\x82\x5b\xf1\x26\x0c\x36\xdf\x98\x38\x48\xa2\x80\xb0\x4b\xf2\x50\x95\x1e\x79\x6a\xcb\xe6\x64\xb8\x4d\xcc\x24\x97\x00\x6d\x31\x02\x2a\x0d\x9e\xfc\x6a\x8e\x96\xe7\x2c\xca\xf2\xd4\xee\xcf\x8f\xe3\xc6\xe8\x4b\x47\x8f\x00\x0a\x83\x17\x0f\x69\xa0\x7f\xd6\x5c\xbe\x98\x18\x04\xf4\x7e\xa8\xe2\x2e\xbc\x89\x8f\xfb\xbc\x31\xc0\x0f\xca\x31\xe8\xbb\x0a\x11\xfb\xc5\xf2\x45\x51\x04\x6c\xc2\x83\xb0\x8c\x04\x79\x54\x10\xbc\x44\x22\x5f\x93\xe4\xe6\x45\x8b\x18\x4e\xca\xe7\x6e\xc4\x88\x54\xd0\x0d\x3e\xe6\x44\x98\xdb\x7d\x82\x7f\x40\x38\x0a\x87\xf3\x16\xd2\x83\xd2\x31\x78\xf9\x7a\x8b\x21\xb9\x83\x24\xed\xda\xea\x78\x3c\xfd\x47\xcf\x5d\x62\xb0\xf0\xa7\xcb\x64\x0f\xb3\x10\x3e\x26\x63\x0d\x2b\x24\xc6\x30\x85\x0d\x93\x0f\x41\x3b\x88\xa6\x3c\x3d\xa7\x55\x5b\x78\x0a\xd4\x6d\x2c\x85\xa8\x0a\x21\xa9\x5c\x54\x0c\xc9\x9a\xeb\x38\xa4\x8e\x41\xc7\x25\x3d\x8d\x8e\x76\x1a\x1d\xc3\xc5\x87\xef\xb7\xc8\xc7\x5f\x22\x9e\x23\xb2\x21\xd0\xde\x26\x8a\xa1\x1e\xa7\x43\xaf\x06\x5f\x66\x13\xf8\xae\xf5\xc1\x34\xe6\xc4\xa0\xcd\x47\x0a\x32\xe3\xf2\x4f\xcc\x8e\x8c\x8a\x1a\xc6\x7c\xb3\x29\x04\xb5\xab\x51\x28\x58\xbe\x6a\xf8\x54\xf1\x7d\x85\x8c\x70\xde\x9e\xda\x91\xe7\x1d\x9f\xdd\x72\x39\x2f\xcf\x09\xc5\xbc\xdb\x61\x44\xcc\xfb\x95\x31\x59\xc8\x8f\x51\x22\x99\xba\x7d\x49\x27\x70\x44\xcc\x5c\x01\x45\xad\x63\xce\x83\xb3\x91\x98\x31\x29\x61\xa9\x8c\xdd\xcc\xa8\xfb\x0d\x31\x27\xd4\x6a\x08\x64\xc9\x17\xb9\x9d\x61\x54\xbd\x4e\x63\x72\xf5\x77\x09\xc4\xba\xb3\x5c\xfd\x44\xec\x28\x79\xe4\x22\x84\x5c\x2b\x81\xb7\x17\x63\xa6\x34\x6b\x64\x00\xed\xe0\xd7\x57\x7d\x11\x51\x39\xd5\x11\x46\x46\xab\x28\x30\x4e\x6e\x14\x5a\xe2\x1a\xd5\x45\x01\x30\x8f\x9b\x86\xd1\xf1\xd9\xf9\x65\xe3\xcb\x7d\xd7\x93\x3f\xc0\x5e\xd0\x9c\x72\x9f\xc5\xd0\xf7\x08\x71\x60\xa0\x21\x4d\x43\x4e\xed\xea\x34\x3c\xf2\x54\x22\x6a\x9a\xbb\xe6\x3b\x86\x4e\x5e\xd7\x00\x89\xde\x49\x33\xd7\x53\x8a\xa8\x99\xf8\xa6\x4c\x94\x80\xa5\xd8\x3f\x33\x57\x3f\xb3\xcd\xf5\x1b\x3e\xb3\xbf\xef\xb7\x6f\x06\xd3\x97\xae\xd3\x70\xec\x89\x3e\x00\xee\x2c\xc8\x7e\x3b\x98\xa4\x7e\xd3\x33\xb0\xd8\x6f\xd1\x8c\xd8\xf5\xf6\x9b\xd6\x6b\x00\xba\xb2\x99\x62\x47\xcd\x46\xfb\xc2\x86\x66\xec\xe7\x98\xb5\x60\xff\x32\xf6\x0b\xcf\x1f\xc4\xae\x95\x4f\xdf\x51\xdc\xe2\xe7\xc2\x5d\x4a\x3d\x8c\x88\x1f\xfe\x7e\xfe\xd9\xce\xf8\x67\x4b\xfe\x14\xd3\x14\x76\xc7\x2f\x2f\x6c\xa7\xb0\xe7\x1b\xf7\xeb\x05\x42\xa8\x01\xe0\x63\x46\x7a\x10\x90\xff\x6c\xd9\x6d\xbe\xbc\xd0\x45\x1a\xc4\x84\x28\x63\xba\x27\xdf\x91\x51\xc2\xd8\x33\xd3\x93\x41\x56\x65\x5d\x32\x08\x45\x92\x15\x70\xd4\x10\xe6\x3d\x11\xc4\x3c\x88\xa4\x21\x67\x7b\xe2\x07\xe0\x65\x41\x61\x35\x9e\xdd\xfe\xb7\x2f\x88\x55\x56\x71\xf8\x01\xec\x69\x44\x79\x7f\xf1\xf5\x1f\x5a\x7a\x2c\x4f\x11\x91\x93\x81\x84\xa8\x7a\x43\xe6\xf6\xd1\xb1\x75\x05\x20\x2d\x0d\xdd\x15\xee\x6a\x64\x17\x6f\xfc\x29\x32\x8d\xf3\x49\xa1\xec\x22\x75\xf2\x08\xa0\x84\x5b\x36\x0d\xab\x19\x77\x93\xe9\x39\x91\xba\x0e\x63\x7b\x25\xbb\x53\xb3\xef\x6a\x23\x22\x65\x5b\xb0\x75\x0d\x19\x7a\x7c\x96\xe8\xd2\x39\x6b\x83\xd0\x47\x47\x4f\x3f\x60\xd5\x62\xa8\x8d\xf5\x14\x08\x1d\x01\x14\x45\x65\xd7\x76\xcb\xa7\xe6\x69\x1a\xf8\x65\x84\x1a\x55\x2f\x0a\x40\xb5\xce\xae\xb7\x83\x05\xf1\x83\x30\x6f\xf2\xef\x62\x53\xc2\xb5\x9f\x32\x98\x06\xe4\x1b\xac\xdc\x68\x1b\x97\x07\x32\x1f\xde\x27\xd5\xa1\x2d\xdf\x6e\x32\xf9\xc9\xb2\xec\x09\x0f\xec\x7d\x09\x17\x60\x46\x47\x90\x17\xcd\x6a\xad\x17\x89\xdf\xed\xed\xc5\x77\x19\x58\xf2\xe6\xc2\xdc\xe2\xcd\xdb\x16\xf8\xdd\x95\x84\x1c\xf6\x7c\x7e\x36\xce\xab\xd4\xc8\x70\xbe\xb9\x2d\xf0\xbd\x0c\xe1\x78\xf8\x9e\xb7\x4d\x0d\x3e\x52\xc5\xd0\x10\xe6\xed\xcd\x4c\xcd\x55\x20\xb8\x82\x9d\xb7\x23\x7a\x44\xe4\x89\xdb\x3f\x42\x63\xc6\xcd\x6a\x81\x0d\xba\x10\x81\xc2\x40\x39\x2b\xa0\x7a\xf2\xbc\x3d\xa9\xc0\x2b\x6f\x4f\xbb\xd7\x2a\x10\xb2\xf8\x3a\x22\x82\xa8\x07\xfe\x43\x47\xda\xcf\xe7\xcd\x4e\x3f\x04\x59\x6f\x98\xb7\x67\xf4\x4a\x86\xef\xd1\xdf\x7a\x51\xa4\xab\x68\xc1\xf9\xce\x9f\x71\x92\x41\x0a\xd1\x4e\xc2\xb9\xf4\x22\x8f\xb1\x2e\x6f\xbc\xc4\x99\xb7\x67\xd1\xde\x62\x7b\x56\xaa\x88\x13\xc4\xbe\x53\x10\x8f\x92\x80\xba\x19\x31\x98\x7a\x69\x64\x64\x54\x1b\xb1\xae\x6f\xc7\x1c\x7e\x52\x77\x52\xe6\x15\x04\x88\xa7\xe4\x2d\x23\xab\xf3\x2d\x47\xb2\x27\x53\x96\x53\x5d\x14\xbc\x0b\xcf\xb0\x32\xa3\x9d\x2f\x96\x1d\x2f\x1c\xe5\x2d\x7f\x1c\xd2\x90\x7f\x79\x1b\x0f\x7d\x92\x74\xa3\x79\x67\xff\xb6\xf3\xce\x22\x76\x58\xf2\xee\x31\xfb\xd3\x3c\xd8\xfd\xdd\xa7\x9d\xbd\xc9\xce\x47\xfb\xb2\x3a\xe2\xc3\x93\x19\x6a\x96\xf2\xae\x1d\x01\x5f\x21\xcc\x3b\xef\x7f\x0b\x45\xaa\xf6\x60\x2f\x31\xe6\x7d\x59\xdd\x82\x51\x07\x68\x8b\xbb\xb6\xdb\x3d\x2a\x9f\x4f\xe6\xcf\x4e\xeb\x2a\x89\x99\xf7\xfa\x76\x31\x66\xc9\x29\x19\xcf\xb2\xdf\xf9\xa8\x81\x02\xed\x8b\xfd\xde\x47\x48\x03\xeb\x62\x21\xfb\xfb\x3d\x6c\x9c\x70\x67\x8f\x67\xf1\xb7\xec\xa3\xc3\x55\x63\x40\x6c\xa0\x72\xb4\x50\x86\x1e\xe1\xfc\x26\x4f\x15\x2c\x80\x98\x8f\x66\x7f\x5e\x16\x9c\x6a\x4d\x01\xd0\x5e\x76\xd5\xa0\x92\x87\x0a\x95\xbc\xe8\x50\x11\x4c\x49\x26\x41\xd5\x95\x0d\xa8\x63\x83\x2f\xfb\xf4\x8b\x83\xb5\xec\xff\xeb\xba\xb4\x21\xd4\x7a\xe0\x0b\xe4\x24\x85\x6a\x24\x00\xd8\xfd\x0a\x36\xbd\x52\x64\xd4\x83\xaa\xb1\xa8\xd5\xcf\x4d\xe6\xc9\x9a\x8b\xe6\x92\xd7\x9f\x04\xce\xda\x27\xf3\xf3\xa4\xbf\xbc\x86\xf3\x1f\xbf\xe9\x60\x46\xc8\x11\xcc\xff\x40\x1e\x02\x45\x68\x98\xd6\x9b\x4f\xdc\xc3\xcf\x77\x1b\x0f\xef\x77\x74\xd6\x42\x74\x1a\x06\xcc\x9b\x2c\x80\x3a\x41\x01\x86\x58\x2e\x10\x65\xba\x33\x6f\x51\x81\xec\xa8\xff\xf7\x3b\x6a\x92\x10\x26\x99\x5a\xac\xf3\xfd\x8e\x2d\xa6\x7c\xef\xc9\x46\x67\xa9\x7a\x0f\x8d\xdb\x23\xb4\x39\xb4\x3e\xc6\x8e\xb2\xc2\x91\xa5\x60\x11\xef\x47\x92\xb5\x2b\xae\xf3\x8f\x1f\x47\x7b\x7a\xa4\x50\x17\xef\xc0\xc5\x69\x2d\x54\xee\x0c\x00\x7a\xfa\x16\xa6\xd3\xdf\x2f\xa7\xbf\xdf\x4e\x7f\xa7\xd3\x5f\x75\x9a\xa1\xb4\x41\x40\xdd\xc2\xe2\x34\xbf\xd0\x9b\x3d\xe8\xaf\xaa\xb0\xcd\x32\xfd\xa1\xfa\x79\x85\x1a\x30\x18\xf8\x78\xf8\x60\x44\x9b\xd8\xe1\x35\x33\x0f\x3b\xd8\xc9\x7a\x40\x96\xa5\xa6\xd3\xbd\xaf\x33\x9f\x8e\x8c\xcf\x6d\x78\x2e\x10\xf9\x76\x40\x4b\x72\x3e\x32\x3a\x92\xa3\xa3\x23\x08\x77\x7c\x78\x11\x4e\x00\xa6\xeb\x19\x97\xc5\xe5\x0b\x06\x98\x97\x79\x73\x48\x5b\xd0\x27\x54\x33\x9f\x6f\xc8\x21\x1d\xbe\xd8\x6b\x28\x39\x40\x93\xd0\x82\xd5\x4e\xc3\x01\x6d\x46\x02\xb1\x1c\x92\x2c\x41\x36\x59\x01\xa0\xde\x71\x7c\x7a\xf2\x71\xeb\x2d\x3f\x7b\xcc\x05\x03\xac\x58\x8f\x0e\x9f\x6d\x6c\x6d\xe4\xa8\xaf\x70\xe6\xe8\xa4\xcf\x46\x7c\xa1\x2f\x43\xbe\xaa\x6f\x23\x47\x7b\x55\x28\xc7\xed\x08\x3c\xaa\x25\x44\xbf\x11\xb7\xdc\x0e\x07\x4f\x74\xc6\x9f\xe3\x5e\xb1\xd5\x85\xcd\xa3\x3c\xce\x46\x33\x54\xe9\xb1\x40\x28\xd0\x97\xa3\x87\xe4\x33\x46\x04\xc5\x79\xe0\xa0\xce\x73\x39\xc2\x2f\xe2\xee\x2b\x5b\x4f\xf4\x23\x00\xf4\x3d\xd1\xbf\x59\x3c\x11\xa3\x66\x94\xd5\x7c\xc6\x26\xc6\xe9\x0a\x13\x11\x36\x2e\x06\x04\x69\x1b\xe4\x34\x33\x86\xea\x99\x10\xca\x76\x61\x89\x4a\xa9\x10\xf9\xde\x94\x64\x3b\xd6\x5b\x39\x76\x8b\x5f\x06\x6d\x31\x40\xc5\x89\x11\xe2\x00\x42\x51\x05\x40\xd3\x00\x9c\x00\x0b\x1e\x6e\xaf\xa5\x0d\x92\x2d\x86\xc2\xfa\x83\x9a\x96\x9b\x16\x5c\xe4\xc4\xd3\x74\x84\x29\x68\xf6\x1b\x44\xf1\x05\xe9\x6f\x92\xef\x71\x81\xc3\x5f\x70\x56\x94\x71\x49\xb6\x25\xc8\x3b\x28\x87\x35\xa4\x8d\x2d\x4a\x41\xaf\x31\xf7\xdb\x58\x5a\x93\x0b\xdf\x3f\x9a\xbf\x1e\xab\x0d\xcd\x4a\x65\xda\xc2\x2c\x2e\x5e\x73\x7a\x09\x03\x8b\x90\x20\xa7\x29\x05\x33\xe3\xa4\x79\xed\x35\xf3\x3d\xa7\x00\x02\x82\x4b\x03\x8d\xce\x10\x6c\xd7\xb8\xe0\x8d\x13\xb5\x64\x72\xe1\x99\x0f\x6d\x66\x3e\x2d\x04\x52\x8c\x7e\x14\xd4\xc3\xa5\x87\xfd\xfc\x98\x31\x0e\xe7\x37\xd6\xe8\xcb\xf4\xb5\x58\x32\xf1\x90\x1a\x69\x60\x70\xa1\x9a\x1b\x5b\x4c\x0a\xdc\xa6\x57\xd9\x46\xb3\x18\xf3\x3e\x0c\xc3\x6e\x74\x96\x6d\xbe\x94\x50\x2a\x9a\x90\x2b\xd0\x18\xf3\x7f\x4a\xba\xa9\x1b\x5a\xb8\xb6\x70\x23\xab\x84\x5d\x7e\xe9\xc3\x89\x86\x46\x85\x40\x8a\x68\xd6\xb5\xc3\x89\x3d\x29\xd1\x83\x36\xc1\x23\xa1\x7d\xe9\x93\x63\xec\x4d\x49\x9e\x56\xb9\xf1\x2a\xe8\x65\x66\xe4\x3f\x45\x89\x1a\x63\x7d\x14\xf3\x8d\x1d\x45\xde\x3e\x9c\x41\x41\xfb\xb1\x7c\x25\xe7\x0f\xda\x64\x87\x1d\x39\x71\x16\xa2\x45\xcb\x48\xe9\x5b\x2d\x02\xd0\xfb\x82\x62\x10\x8e\xf6\xd0\x52\x8e\x53\x55\xd3\xc0\x6d\xe2\x59\x79\xf3\xd7\x48\x1b\x17\xa1\x99\x85\x99\x6e\xab\x45\x64\x1a\x69\x67\x95\xbf\xc6\xdd\xb8\xc8\xd8\x2c\xcc\x74\xf5\x6b\x1e\x51\xb1\x7e\xd6\x7d\x32\xa1\x74\x7f\x1d\xea\x56\x9f\x21\xcf\x28\xd9\xd4\x02\x3b\x31\x56\xb3\x5c\xd6\x20\x17\xcd\x77\xe0\xf6\xac\x7d\x7c\xa6\x5a\x46\x80\x11\xa7\xa2\x4f\x3b\x0a\xbc\xe9\xc1\x82\xe0\x4d\x6b\x76\x1e\x26\x77\x57\xdb\xf4\x76\xdc\x41\xce\xcb\xd3\xaf\x86\x8b\xa5\x90\xe7\x11\x00\x66\x32\xb7\xbe\x84\xe3\xca\x31\xe6\x5a\x47\xab\xc8\xd5\x46\x80\x5c\xab\xe6\x46\xb5\x21\x2b\x57\xaa\x48\xcb\x76\x7d\x2b\x47\x1c\x94\x82\xac\xb9\xd0\xbf\xb3\xa1\x2f\x49\xee\x96\xa4\xfe\x95\x8a\x3e\x22\xdb\x47\x6c\xfb\x57\x74\x2f\x2b\xe5\x2b\xeb\xa3\x05\x84\x9c\x6f\xc4\x6b\x44\x09\x8e\x35\x47\xa6\x12\xdb\x1c\x9b\x2d\xfe\x62\xbf\x15\x76\x08\xfd\x81\x61\xa0\x9f\xb7\xd1\xf0\x80\x3f\x86\x58\x76\xfd\xbc\x79\x8d\x7f\x1f\x0d\x41\x50\xb2\x9f\xc3\xb0\x38\xbc\xf1\x3a\x6c\xf6\x53\x1d\xa6\xd1\xaf\x2d\xef\xea\x92\x61\x82\x39\x61\x62\xd3\xc5\x18\x2f\x3e\xa1\x9b\xd5\x3d\xe7\x0c\xcd\x6e\xf9\x74\x58\xe7\x79\xc0\x36\x36\x6a\xf5\x59\x1f\x04\x71\xba\xd6\x21\x0d\xc7\xf6\x2b\x29\x51\xc2\x5a\x88\xa4\x15\x05\xb3\x7b\x21\xa7\x5e\xdc\x70\x28\x09\xe4\xf9\x25\xa3\xeb\x47\x49\xfe\x52\xca\x60\x35\x4d\xc8\x99\x7d\xf9\x41\x5d\x2e\xc5\x79\xde\x32\xbe\xbd\x2e\x23\xa1\xb2\x8b\x9f\xc2\xab\x97\x9d\x2a\xec\xf3\xb9\x4b\x3d\x39\x3d\x75\x17\xe4\xd3\xef\x1c\xbb\x04\x50\x67\x2b\x21\xd7\xbc\x02\x91\xbb\xa7\xdf\xb3\x92\xb7\x5a\x47\x90\xde\xce\x93\xf2\xc9\x58\x7a\x62\x46\x04\x90\xce\xfb\x75\xe9\x5c\xf4\xbc\x0f\x27\x77\x4c\x3b\xcf\x3b\x67\x5c\xa0\x6b\x9e\xdc\x55\xc1\x2c\xd1\x9a\xfc\x7b\xc1\xec\xec\x1c\x47\x5f\x84\xf6\x73\x68\x18\xef\x4e\xfd\x09\x15\x81\x35\x41\x0b\xdf\x20\x7d\x27\xd2\x71\x5e\xb9\x8f\xc1\xb1\xe3\x4c\x96\xda\x34\x88\x91\x23\xa7\x3f\x67\x9f\x34\xb8\x59\x27\x4e\x99\xa3\x0f\x57\x9e\x57\xfc\x80\xf6\x35\xad\xe0\xcf\x81\xa6\x7f\x23\x92\x3e\x55\x1b\x0f\x8c\xd1\xe4\x7d\x6b\x10\x9d\x06\x5f\xbe\x8b\x49\xfb\x1f\x83\x19\x8c\xc5\xaf\xb9\xf2\x19\x50\xeb\x8c\x69\x4e\x15\x54\x58\x88\x02\xc2\xa2\xac\x72\x31\x39\xbf\xb8\xb6\x72\xbf\xd3\xf6\x52\xdf\x4f\xbb\xf9\x06\xf8\x88\xde\x60\x9f\x36\xaa\x12\xbf\x44\x9a\x9c\x39\xac\x9c\xdc\x2a\x0a\x6c\xb2\x64\x3e\x06\xa7\x4b\x68\xdc\xc3\x83\x19\x83\xf5\xe5\x8b\x19\xf5\x21\xa8\xb6\x11\x83\xd6\x55\x9e\x67\x68\x23\xe3\x42\x6b\xec\x5d\x04\x79\x3f\x91\xe5\x07\x18\x0e\x19\xca\xcc\x00\x84\xd3\x73\x05\x65\x35\x2a\x3f\xcd\x42\x66\x5d\xe3\xce\x95\xd0\x65\x5b\x0c\xac\x96\x7c\xde\xb3\x39\xd0\x75\x22\xd0\xa8\x19\x82\x07\xd4\x50\x72\x9a\x1e\xa5\x2b\xba\xcd\x2f\xbc\xd1\xb7\xd7\xe4\x11\x62\xe2\x73\x4a\x5d\xe7\xe6\xc1\x79\xe6\x51\x2c\x3d\x7d\xd7\x0b\xf2\x1a\x58\x4f\xb3\x8a\x10\xb7\x89\x35\x66\x3d\x7d\x57\x15\xf2\xd3\x03\xac\x4d\x04\x0d\xa3\xb0\xad\xd5\x9f\xfc\x52\xfb\x61\x90\xda\xc4\x8b\xd7\xe0\x5e\xff\xd8\xb5\x4a\xd5\xd3\x62\xd1\x26\x3f\x60\xfe\xeb\x13\x39\x83\xc3\x87\xaf\xd4\xcf\xe4\x2e\xee\x9b\x9e\xeb\x28\x37\x22\xbe\x26\xbb\x7d\x25\xaa\x7d\x27\xa9\x7d\x59\x1c\x11\xb6\xaa\xd3\x5b\x9f\x19\x8a\x2f\xea\xda\xe5\x96\x95\x14\xb8\x75\x97\x92\x06\x13\x4e\x7b\x3b\x6b\xd5\xe5\x1e\x29\x28\xb2\x8e\xe9\x72\x69\x38\x81\x4a\xe1\x19\x69\x33\x98\xf1\xa6\x89\xd5\x7c\x72\x90\xe5\x00\xa3\x54\xbd\x2d\x5f\x3e\x95\x6f\x6f\x8a\x5e\x1a\x31\xfc\xfa\xfe\x2d\x9b\x1f\x16\x47\x7d\xf9\x15\xb0\x3a\x05\x2d\x9c\x14\x87\x26\x67\x8d\xd9\xf0\x57\x2d\x1c\x86\xd3\xc0\xc2\x1b\xfd\x8a\xc2\xa5\x9f\xbd\xdc\xdc\x35\x14\xe6\x30\x10\xd6\xb4\x7d\x8d\xda\x97\x6b\x54\xeb\x35\xa0\x56\xa0\xcb\x75\xc8\xec\x03\x71\x80\xbb\xbc\xa6\x6f\x3e\x71\x43\x66\x1a\x73\x62\x78\x5e\x3e\x7d\xf5\x19\xe0\xfb\xa9\xb0\x2e\x8e\x85\xd1\xec\xf3\x5a\xea\xde\xf6\x32\x15\x7e\x0c\xaa\xb5\x16\xa6\x73\xc1\x4b\x61\x08\x9f\xcb\x02\x47\xd9\x87\x25\xc6\xc1\x22\x1c\x4d\x8c\x19\x38\x24\x6d\xb5\xc0\xc3\x4a\x48\xcb\xa0\x0c\x7e\x58\xb2\x6d\x45\x61\xe6\x00\x73\xcd\x3d\x02\xc1\xa3\x9c\x09\x87\x3e\xb5\x69\xf2\x8f\x65\x0b\x99\xf2\x3e\xbf\x83\x5d\x9b\x92\x70\x5f\xcc\xb0\x34\xfd\xfa\x59\xa1\x16\x7e\xf4\x3f\xd3\x59\xf8\xaa\xe4\x31\xcc\xd4\x04\x37\xb2\x25\x6c\x6e\x81\x5f\x71\x58\x9b\x32\xef\x65\x10\x8c\xc0\x82\x45\x2b\xcc\x4c\x08\xff\x93\x09\x61\x4d\x74\x30\xef\x92\x7a\xa7\x75\x33\xe6\xd9\x60\xa0\xf3\x4d\xed\xdb\x2a\xfa\xbc\x58\x57\x73\x32\x5b\x32\xbd\xb3\x04\xe5\xa5\xb9\xe5\xba\xa4\x21\xeb\x48\x71\x41\x9d\xe6\x62\x3c\xeb\x98\xe0\x6c\x96\xea\xda\x92\x72\x35\x1f\x75\xdc\xbc\xf2\x52\x98\x79\xf4\x93\x7c\x7f\x18\xd4\x72\x84\xb7\x24\x15\xac\xf1\xe9\xa3\xa3\x2b\x7c\x27\x5a\x90\x5f\x32\xba\xf8\xc3\x4f\x3b\xc2\x7c\xc5\xc9\x4c\x96\x82\x55\xa3\xd5\x7d\x5d\x1b\x4d\xf1\xf5\x1f\x2f\xea\x62\xbb\x56\x8b\x45\xa8\x1c\x94\xaf\x12\x7e\x0d\x65\x9d\x2b\x11\xf9\x05\xd2\x51\xb3\x27\x0e\x27\x1e\x4d\xb2\xc7\x11\x8c\xc0\x25\x46\x3d\xd6\xbc\xd4\x90\x79\x82\x70\x5e\xbd\x3c\xdc\x37\xa3\xd1\xfb\x1a\xbf\xae\x65\xc0\xba\x6c\x94\xba\xbe\x5e\xe2\x00\xaf\x9d\x3a\x75\x2e\x92\x72\xfa\x06\xed\x8b\x1a\xd1\xca\xc9\x5d\x6d\x38\x3f\xc5\xcf\x2c\xcf\xe6\x2b\x92\x2c\xbe\x8d\xe6\x9f\x28\xab\x9f\xd3\x86\xcf\xf2\x6e\xcf\xe0\x10\xe3\x84\xc7\x34\x98\xc4\x64\xaf\x5c\xe4\xb4\x79\x17\x47\x7d\x20\x57\x0c\x69\x15\x4e\xfa\x44\x85\x80\xd0\x8c\xae\x8e\xc2\x14\x4c\x34\x36\xfa\xf5\x67\x73\xbe\xbc\x2e\x21\xac\x79\x9f\xda\xb7\xe9\xd7\x90\x67\x26\x9a\x8a\x45\xab\xbc\x70\x57\x33\xaa\x27\x75\x69\xe8\xea\x22\xec\xeb\x74\x6d\x9a\x9c\x5f\x5c\x5b\xb9\xe9\x75\x5f\xc7\x48\x59\xdb\xa4\x35\xd5\x65\xe9\xa8\xc1\xce\xfc\x2a\x83\x3e\xb2\xa5\xbd\xf0\x11\x14\x83\x23\x50\x61\xf2\x80\x75\xb1\xfe\x3b\xb1\xdd\x90\x26\xa7\xd6\xad\xd9\x18\xd4\x19\x3f\xae\xa0\xc9\x97\xa1\x1d\xba\x26\x4f\xdb\x11\xf4\xe7\xa0\x5b\xfa\x69\xe3\xa3\x3c\x00\x26\x69\x68\x0c\x73\xe1\x20\x09\xbe\x3c\xe8\x78\xde\x8d\x33\x46\x0b\x46\x71\x18\x39\x12\x52\xb2\xbc\x0c\x75\x96\x66\x18\xb1\xa6\xcc\x31\x81\x05\x6d\xfb\x9e\x82\xa6\xc5\x75\x9b\x33\x6d\x79\xb3\xbc\xc8\xdb\x88\x4a\xde\x2c\x22\xb2\x32\xd6\x9e\x38\x6d\x90\x57\x26\x5d\xcd\x5c\x53\x74\xe5\xa5\xea\xe5\x4e\xe1\x84\xb4\x95\x29\x30\x23\x4c\x9b\x60\xc4\xc2\x1e\x76\x56\xb8\xd4\x93\x7e\xb3\x63\x2c\x62\x45\x57\x58\xfc\xec\xa5\x4c\x3c\x0a\x12\x71\xdd\xfd\x39\x9b\xb0\x30\x4c\xec\x2e\x73\x97\xd9\xcc\xc0\x96\x09\x19\xc5\x7d\x99\xed\x80\x99\x15\x76\xd7\x27\x3b\x0c\xa9\x53\x89\x93\x9d\xb4\x4d\xb6\xad\x5c\x99\xcc\x88\x68\x78\x58\xe1\xee\x36\xd8\xa6\x3d\xd4\x2d\x5c\x6c\x85\x7b\x18\xb1\x08\x7a\x5e\x6f\xd6\x87\x60\x91\x62\xce\xe1\xc0\xe8\xe0\x9a\x70\xfc\x6f\x38\xc7\x11\xbd\xac\xbd\xd3\x9e\xcf\x90\xc6\xef\x4b\x6e\x0d\x9f\xb3\x92\xd6\xf8\xcc\x7b\x4e\x7b\xdf\xfc\x9a\x7f\x7d\x53\xab\x7d\x5b\x86\x2f\xb0\xaf\x95\x6b\x46\xad\xfe\x08\x0e\x5f\x1e\x8d\xe0\xfb\x3c\x87\x01\x93\xcb\x44\xda\xbd\x83\x2b\xc3\xfb\xa0\xde\xaf\xb3\x9b\xb4\x7f\xa2\x83\x22\x30\x40\xaf\x94\xdb\x7d\xac\x4d\xde\x1e\xb4\x92\xf9\x47\x66\xa5\xc5\xa6\x51\xba\xe3\x83\xe3\x38\x21\x53\x00\xcb\x38\xc6\xe9\xee\x4a\xf1\xf3\xa7\x31\x83\x34\xa8\x55\x4b\x39\x86\x34\x18\xfd\x69\xf7\x85\x73\x35\xc5\xd6\x91\x92\x63\x85\x54\x3c\x3c\x37\x4e\x7b\xe0\xd5\x40\xdd\x42\x43\x12\x81\x66\xf8\xdd\x17\xab\x62\x77\x4f\x4d\xd1\x44\x16\xad\xf2\x72\x04\xb5\x3a\xb3\x37\xda\x94\xc2\xd1\xe9\xdf\x6d\x8a\x91\xee\x1e\xd7\xae\x73\xba\x87\xdd\xdc\x05\xdb\x3d\x15\x38\x22\x20\x70\x31\x9d\x02\x16\x93\xb7\x1a\x73\x0f\xda\x60\xee\xe1\xd1\x97\x94\x0f\xce\xa2\xb1\x18\x68\xd0\xcb\xe8\x22\xcc\x48\x73\xb0\xfc\x87\x3c\xd7\x3e\xe0\xf4\xbb\x9c\xab\x53\x2a\x25\x26\xd2\x94\x86\xba\x2d\xd6\xeb\x36\xaa\x41\xd0\x3d\x98\x74\x8f\xee\xb1\x44\x77\xa9\x36\x31\xb0\x0d\x00\x0c\xc3\x3e\x32\x27\x97\x73\x69\x57\x64\x67\x7b\x02\xbf\x5a\x1d\x5e\xe4\x11\xcf\x5c\x4e\xcb\x15\xc0\x36\xa0\xf9\xb9\xce\x5a\x95\xa5\x53\xfd\x2e\x0b\xd1\x74\x2f\xda\xe2\xef\x25\x6c\xce\x1e\x41\xca\xd0\xdb\xde\x66\xf0\xc2\x99\x27\x39\xb5\x91\xdb\x7d\xed\x65\xef\x7d\xe9\x41\xef\x63\x44\xba\xf7\xc5\x23\x9d\xef\xb1\x17\x7b\xa0\x26\x3e\xbc\x5b\x24\x39\x95\x9d\x79\xf2\xf8\x9a\x74\x3d\xc6\xa4\xeb\xb1\x4c\xba\x1e\x6c\x06\x0f\x3f\x4b\xe2\xe1\x63\xb8\xf3\x59\xce\x85\x59\x7e\x6c\xbd\xdc\x16\xdb\xc9\x7c\x4d\xb3\xbe\x92\x99\x41\xa7\xd0\x56\x56\x1d\xf0\x59\x77\x41\x75\x78\x17\x38\xcd\x7c\xc4\xbc\x84\x11\xf3\x39\x9a\xba\x31\xe3\xb7\xde\xe6\x36\x28\x74\x8a\xcb\xb7\x83\x14\xd7\x96\x9e\xc9\x58\xd6\xc9\x47\xf1\x0f\x6d\x8e\x80\xd3\x96\x32\xa3\x29\x7f\x99\xac\x0e\x66\x07\x4e\x83\xe1\xf1\x30\x1c\x7d\x42\x1b\x06\xdc\xa1\x24\xb6\xfd\xca\xf4\x28\xa3\xa2\x13\x7e\x14\x5a\x7e\x96\x3e\xf7\x1d\xd2\xb2\x4d\x9f\xc6\x24\x35\x6c\x3a\xc9\xc2\xcd\x30\xa8\x03\x18\x87\xc9\x49\xa5\xe4\x73\x0a\x14\x74\x02\xe5\xe4\x2c\xe8\xcc\x21\x8c\xd9\x58\x28\xd9\xa6\x81\xea\xea\xaf\xdf\xac\x01\x2b\xc4\xaf\x7f\x4d\x68\x06\xc8\x76\xba\xd2\x5f\x3c\xb7\xc4\x58\x09\x66\x26\xff\xed\x33\x8f\x81\x99\x5b\x7f\xe7\x32\x48\x31\x7b\x59\xc5\x7a\xe2\x46\xd6\xa2\xb0\x74\x78\xc0\xe6\x93\x45\xcb\x4e\xf2\x78\x5d\x04\x04\x9e\x2c\x9b\x4a\x69\x56\x99\x84\x13\xd0\x91\xa1\x69\x95\x93\x00\x67\xf6\x08\xb5\x52\xa4\x45\x18\x02\x0c\x23\x91\x6c\x7f\x22\xa5\x30\x16\x08\x29\xbc\xac\x6f\x4a\xb6\x4a\x49\x39\xa8\x2e\xf2\x89\x6d\xec\x4e\x73\xc1\x9d\x52\xbf\xcd\x66\x95\xf7\xcc\xcc\xd4\xa2\x1e\x52\x85\xe9\xbf\xee\xd7\xcd\x3d\xf0\x8c\xd1\x7f\xdd\xb3\xf6\xfd\xd7\xb9\x59\x9a\x20\x25\xa0\xcb\xf0\x54\x5d\x7a\xf4\x60\x9d\x5a\xdd\x82\xd5\x43\x85\xcb\x89\x11\x8d\x96\xf7\x1c\x29\x5a\xba\xee\x4d\x7e\xcb\x9a\x26\xde\x63\x9f\x48\xd3\x34\x18\x6d\x17\xd5\x6f\xcb\x3b\x81\x83\x2f\x13\x9b\x43\x30\xd9\x7e\xe8\x8b\x79\x5f\x9b\x63\xd5\x17\xde\x80\xa6\x30\xa2\x71\x6b\x0c\x6d\x93\x06\x68\x26\xde\xff\xd7\xbf\xf1\x32\x18\x4f\x83\xe9\x4b\x79\xe9\xde\x12\xf1\x8c\x98\x32\x23\xa5\xe0\x59\x85\x94\x59\xa3\x2d\x06\x59\xd7\x57\xca\x95\x15\x6b\x7b\x34\x76\x04\xa8\x49\x90\x49\x81\xd5\x34\x32\xb3\xc2\x2b\x6f\x11\x13\xce\x5c\x4d\x89\x43\x30\xde\x1b\xb2\x51\x42\xb0\x46\x64\xca\x61\x02\x5b\x1c\xf2\x36\xd7\x6b\xc2\xb0\x63\xaf\x10\x74\x13\xb2\xfc\xa8\xa3\xd0\x78\xbb\x1c\x30\xec\xab\x0d\xe1\xb2\xd9\x0a\xeb\x72\xaf\xf2\x24\x12\xd4\x11\xa4\x91\xe2\xac\x5b\x9d\x8a\x2c\x9b\xed\x04\x14\x68\x04\x52\x9a\x65\xe6\x25\x5d\x5a\x55\x08\x29\xfa\x54\xaf\xb0\x59\xdf\x0b\xbc\x56\x99\x2b\xd8\x84\x14\xd0\x62\x0a\x6c\x7d\x7f\xc5\x49\xc3\x44\xd6\xb4\x85\xd3\xb7\x0e\xc0\x58\x56\x36\x97\x1a\x5b\x67\x6d\x6e\xb6\xfe\xf5\xdd\x75\x70\x65\x29\xaa\x16\xae\x95\x69\x63\xdc\x00\x63\x69\x06\x5e\x6d\x7d\x8d\x6d\x5f\x26\xed\x5f\x93\xb6\x78\xa7\xa9\x6c\x46\x6c\x33\x59\xb1\xba\x2d\x73\xf2\x46\x66\x38\x0b\xe9\x31\xe3\x57\xfa\x32\x6f\x11\x76\x1b\xd1\x2d\x7d\xf5\xa1\xaf\x7d\xee\xc2\xb7\x85\x5f\x1a\x90\x1a\x7c\xd9\x1f\x31\xe8\x1a\x44\xbf\x0d\x1d\x19\x6a\x6f\x35\x69\xff\x9a\x68\x24\x87\xc9\x88\x5d\xf7\x2a\x92\x99\x6a\x8f\x4a\x74\x92\x52\x7b\x1c\x25\xde\x63\xb3\x6a\x29\x70\x3a\x8f\x96\xe6\x7e\x2e\x60\xc4\xe9\x5c\xf6\x7d\x6a\x3f\xcf\xc5\xe5\x79\x8e\x5a\xd7\xcf\x6b\x31\xbf\xd6\xdc\x40\x98\x10\x41\x48\x4d\xa7\x73\x42\x5d\x1a\x90\x7e\x34\xf7\x50\x1f\x80\x54\x7e\x83\xcc\xac\xf6\xc2\xb2\xc1\xb4\x51\xf4\x44\x7a\x99\xd2\xd8\x65\x8f\x42\x0c\xac\x0f\x69\xee\x39\x4c\xd5\x9b\xd3\xce\x26\x14\x4f\x67\xf3\x34\x5b\x9a\x05\x27\x75\x8d\x61\x78\x7e\x6d\xbf\xa2\x79\x1c\xca\x81\xce\x96\x62\xdc\x92\x19\x34\xc9\xc3\x51\x2e\x73\x5c\x18\xfc\x9a\x5e\x9a\xcd\xae\x47\x0c\xda\x00\xcb\xd2\x5c\xf9\xf8\x15\x56\xeb\x5f\x7e\x69\x32\x65\xb4\xd9\x57\xd3\x11\xdf\xef\x71\x55\xf8\x73\x71\x34\xcd\xcb\x19\xd2\x97\xc5\xda\x8c\xba\xaf\x28\xd4\x51\xd0\x02\x67\x40\x36\xb5\x6b\xfe\xa7\x19\xd5\x89\x55\x43\xdf\xd7\xc2\xc3\xba\x3e\x81\x6b\x60\x21\xd9\xa0\x08\xd8\x26\x1a\x6d\x69\xb2\xdf\xbf\x9a\x87\xe8\x05\xfc\x82\xcd\xbc\xaf\x96\xe6\x3d\x05\x72\xd3\x49\x77\x23\xd8\xbe\x8c\x6e\x64\x2d\x91\x64\x5e\xff\xfc\xaa\x65\x1f\x52\x5f\xca\x40\xb8\x61\xbe\x44\x20\x0f\xf0\x95\xfe\xae\x4d\x80\x3f\xf3\xdd\x54\x01\x65\x2d\xd7\x39\xcc\x28\xb4\xcc\xa0\xa8\x5a\x6a\xfa\x75\x37\x5d\x67\x2b\xb4\x2c\x34\xae\x0d\x4e\x3d\x26\xfc\xfe\x21\x6b\x48\x83\x9b\x3f\xaf\x13\x59\xb0\x6b\xa5\x25\xbf\xd4\x18\x18\x7c\xff\x3c\xbc\xfe\xea\x65\x5b\x99\x5d\x87\x40\xab\x3d\xc5\x8d\xcd\x4f\xc1\xc1\xfa\x74\x65\xa6\x6f\xe4\x96\x7c\x55\xa3\xaf\x20\xf6\xb0\x04\x42\x26\x7c\xfd\x5c\x5b\x48\xab\xaf\xb8\x3b\x04\x90\x76\x13\x55\x98\xec\x62\x31\x6a\xe9\x15\x97\xb7\xa6\x9b\xc3\xad\xe0\x65\xae\x81\xe7\x51\x19\xd8\x2b\xd7\xe1\xe8\x2a\xf9\x32\xb8\xda\xe9\xaa\x22\x0c\x5c\x09\x7e\x64\xe4\x57\xbc\xcb\x3f\x09\xaf\x23\xcc\x45\x29\x13\x79\x5b\x59\x13\x2f\xbf\x7c\x6c\x2b\xaa\x15\xbf\xe5\xae\xb1\xf1\xbb\x4b\x5a\x1d\x8b\x97\x2e\x48\x83\x08\x37\xa3\x7d\xfa\x01\x66\xcd\x6f\x31\xb0\xec\x0e\x6d\xfd\x61\x71\xf4\x9a\xe5\x6b\xeb\x18\x1c\x7f\xb9\xb5\x5e\x81\x5f\xeb\x95\x9d\x95\xa5\xef\xa3\x32\x61\x5f\xbe\xd4\x39\x0e\xaf\x06\x6d\x31\xf8\x4c\x3c\xaa\x14\x18\xb3\xd6\x4f\xf7\xb5\xee\xa0\x81\x46\x48\xb0\x21\x1f\xff\xb1\x06\x3d\x7e\x82\x6c\xcf\xa5\xa7\x9d\x02\xa6\x69\xdd\xe5\xd0\x2a\xfe\x5a\xaf\xb8\xa6\xd7\x5c\x1b\xbe\xc6\x02\xf0\xe5\xc7\x7c\x74\x14\xe0\xcb\xa7\x30\x1d\xa5\x60\xbd\xde\x4b\xbb\x50\x94\xae\x9e\x2b\x19\x2e\x83\xb1\x10\x92\x4d\xd3\xdc\xff\x63\x76\xfe\xc3\xb7\x6f\xbe\x7d\xbe\xf9\xdf\x7f\xfd\xf0\x5f\x01\x1a\x53\x1e\x33\xda\x65\xbd\x7c\x44\x7e\xfd\x6d\x24\xa9\xac\xf1\x53\x66\x89\x51\xa9\xee\x57\xaf\xb6\x80\x1b\x41\xd5\xc5\x51\xb7\x30\xda\xf8\x79\xed\xbb\xc8\x7e\x45\xa6\x85\x34\xd0\x15\xdd\xf0\x5f\xaf\xdc\xa6\x97\xff\x99\x7d\xe1\xcb\x24\x07\xd2\xcb\x7f\x66\x2a\x3e\xfa\x76\x80\x61\xdd\x44\x78\xf9\x8f\x15\xed\x27\x97\xaf\xac\x03\xaf\x4e\xc2\xd6\xec\x08\xec\x35\x7b\xbb\x57\x48\xdb\x12\x70\x18\x21\x84\xb4\xad\x29\x0a\x08\x6e\xda\x63\xaf\xf4\x0a\xaf\xd9\x18\x94\x51\x07\xd9\x7a\xb8\xd7\xbc\x7a\x40\xac\x91\xd5\xcb\x47\x09\x3a\xdb\x96\x28\x0c\x15\x6e\xc0\xaf\xb1\xff\x2b\x0c\xb5\xb3\x09\x66\x20\x3d\xd6\x35\x92\xe3\x68\x9b\x70\x76\x1f\xf2\x73\xbe\xe1\xee\x2e\x6f\x05\xf3\x38\x32\xe3\xac\x20\xdf\xe5\xf3\xc4\xe7\x66\x80\xbf\xeb\xc1\x73\x7e\xda\xe5\xbc\xfc\x0c\x4a\x90\xf7\xf9\x09\x15\x08\x39\x3f\xeb\x81\x4e\x37\x3f\x6b\x83\x1e\x84\x9c\x9f\x7c\x29\x83\x9a\xb9\x73\x8e\xee\xe6\x0e\x02\x28\x75\x14\x80\x84\xe9\x7a\x33\xc7\x99\xbf\x39\x0e\x80\xe3\x0f\x48\x39\x53\x4c\x39\xa7\x0d\xcb\x30\x6d\x03\x39\xa9\xe6\xe7\x9c\x55\x31\x4f\x96\x69\x00\xc2\x45\x7c\x2e\x5a\xbb\xf4\xc9\x3c\x22\xcd\xdf\x81\x59\x80\xca\x8e\x5c\x23\x9f\xcd\x3d\x2b\xaa\x20\xa4\xc7\x86\x16\xa8\xf9\x9e\x13\x1d\x65\xbf\x7e\xa3\x17\x08\xa2\x31\xf7\xd9\x6c\xb2\x46\x14\xa5\x27\xb1\xbd\x5c\xb8\x39\xd0\xc8\x2f\xc3\xbc\x5c\x3c\x41\xca\xe6\xf5\x44\x86\x18\xbe\x5c\xae\xb4\x2f\xa4\xdd\xf7\x85\xb7\xdc\xf2\xe5\xa9\x47\x26\x5f\x1e\x0f\xab\x68\x8e\x5c\xbe\x0e\x73\xbb\xd0\x7e\x51\x4c\xe4\x0a\x94\x7e\xa1\xa6\x95\x7c\x8d\x15\xc7\xb5\xf4\xcd\x57\xc0\xc2\x05\x12\x48\x2a\xb3\x7e\xe5\xf8\xe1\x42\x49\xd1\x6c\x8a\x97\x06\x2a\x39\x7a\x18\xa8\x0a\xf4\x96\xb5\x40\x7d\x9e\x18\xb8\x9e\xbc\xd3\x7e\x5d\x94\xf1\xb9\x2c\x3e\xb8\x0d\x71\x15\xbf\x85\x6b\x5e\x6b\xbc\x54\x93\x7d\xbe\x4a\x8e\xee\xa1\x45\x0a\x26\x0e\x73\xcd\x4e\x53\x46\x2e\x08\xef\x6a\x00\xa8\xfa\xfb\x7c\xa1\xa2\xf3\x81\x91\x7c\x41\x37\x16\x88\x05\x04\x87\x1f\x6d\x28\x02\x68\xb0\xe1\x2c\xf9\xfa\x6c\x5d\xa5\x84\xae\xcf\x3d\x7c\x41\x8d\xfe\x47\xf5\xe1\xe4\xeb\x73\xe0\xb1\x7c\x05\x6a\x53\x23\xfe\x29\xfa\x56\x1c\x1e\x30\x7e\x1c\x6d\x22\x35\xb5\x67\xec\x14\xd2\xf7\xff\xba\xc7\x03\xc6\x84\xd0\xb0\x03\x80\x84\x03\xcc\xdb\x0e\xff\xf5\x60\x97\xec\x00\x15\x40\x3a\xe1\xbf\x1e\x30\x9f\x2a\x2a\x4e\x51\x9c\xee\x5e\x17\xf7\x37\x80\x44\x7e\xed\x32\x6f\x71\x31\xb2\x4a\x10\xd1\x51\xd4\x4b\x84\xc5\x71\x46\x5e\x6e\x68\xbc\xe5\xe6\x31\x19\x04\xa5\xff\x37\xaf\x06\x2a\xcb\x57\x6e\x43\xac\xaf\xdc\xa0\x40\x82\xc8\x2b\xa9\xcd\x5f\x84\x89\xbf\x20\x12\x88\x21\x15\xbe\xe4\xa2\xaf\xf8\x0a\x28\x20\xa3\x77\x06\xd4\x5c\x28\x7b\xb0\xb6\x5d\x76\xbc\x5a\xe4\x08\x19\xf6\x6e\x3f\xe5\x1b\xcd\x51\x09\x84\xb8\xdf\x4c\xf4\x62\x9a\xf6\x5e\x32\x3d\x57\x2d\x00\x04\x1a\x36\xa1\xfe\x4e\x45\x22\xe8\x1d\xcb\x3c\xd8\x29\x3e\x86\xc7\xe8\x8d\xf4\x8d\x15\x3c\x0d\xc0\xde\x58\x6a\x38\x66\x3e\xc5\xe7\x8b\x17\x52\x8b\xfe\x50\xaf\x6c\xc7\xf5\x45\x7a\xf3\xf2\x40\x21\x05\x93\x5f\xd5\xfd\xf6\xa2\x25\xa4\xde\x3c\xf1\xd1\xdc\xb2\x37\xae\x73\xd1\xd0\x86\x66\x86\xf2\xac\x5b\xf1\x6f\x20\x8b\x3a\xdc\x9f\x2c\xb3\xf1\xa8\xa7\x40\xbd\xc2\x84\x0b\xf8\x25\xdd\x1c\x6e\x87\x96\x44\xb5\x1b\x42\x55\xb7\x43\x49\x5b\xe1\xdd\x6f\x41\x81\xbf\x42\x19\x05\x1f\x4b\x05\xe1\x7e\x78\x49\xfe\xe4\xe8\x53\x34\x37\xa5\x93\xd3\x3e\x8b\x7a\xb9\x40\x30\xc1\x11\xa0\xc3\x7c\x31\x7d\x81\x40\x83\xa2\xd4\x92\x29\x3d\x29\x38\xf1\x54\xc0\xe5\x1f\xd0\x5b\x43\x3a\x7a\x7d\x0e\xb0\x98\x69\x86\x26\xf6\x4d\x42\x0f\x03\x9a\xbe\xda\xf0\x7c\x38\x11\x74\x43\x03\x5a\xb4\x3b\xbf\xd2\x93\x32\xd5\x9d\x31\xc3\xe3\x47\xb9\xf0\x5a\x6d\xd1\x8b\xb5\xa0\xac\x3d\xf9\xf4\xfa\x13\x2b\x7e\x4e\x54\x61\x81\x07\x90\xb5\x67\x81\xee\x51\xa5\x56\xb9\xf4\x16\x5e\xd1\x81\xb3\x2c\xd2\xff\x82\x1b\xa9\x1e\xe7\x2c\x4a\xea\xe7\x03\x34\xb9\x64\x56\x79\xb8\xb9\xe0\xdb\x05\xbf\xaf\xcc\x46\x23\x94\x57\xfc\x08\xb5\xb5\x01\x5b\x58\x90\xb4\xb1\xd1\x72\x95\xbb\x51\x8c\x99\x32\x31\xc6\x4d\x81\x7e\xf5\xca\xcf\xa6\x2b\xdc\xf8\x41\xcf\xfc\xcb\xc5\x9f\x58\x61\x2e\x3d\xce\x2b\x57\x37\xf1\x91\x02\x15\xcf\x20\x5a\x54\x82\x86\xf6\xe5\x5c\x10\xaa\x76\x70\xc5\xe9\x8c\xaa\x94\xf5\xd8\x09\xdc\xf2\x83\xdd\xfd\x06\xb3\xda\x61\x12\x8a\x7f\x84\x7d\xc2\x33\xa8\x40\x76\xe1\xbd\xf4\xb2\x76\x02\xc4\x63\x12\x62\xbc\xc5\x4d\x05\x10\x8a\xb4\x79\xa3\x79\x48\xee\x2c\xec\xe7\x8b\x45\xce\x14\x5e\x4a\x14\xaa\x91\x61\x77\x5a\xc2\xc3\xa7\x9d\x7d\x42\x09\x8f\x39\xa3\x24\x17\x67\x5c\xc2\x4b\xb3\xc5\xde\xb2\xca\xa5\xe4\xdb\x2d\x53\x58\x43\xf0\x52\x9e\xca\x69\x50\x79\xb1\xa5\x62\x16\x82\xbc\xfe\xba\xaf\xa1\x6a\x1b\x28\x79\x64\x7e\xae\x6b\x96\x08\x67\x76\xe7\xa9\x25\xb1\x06\xd7\xaf\xb5\xb4\xba\x0e\xe7\x40\x6b\x48\xfd\x6b\x63\x90\xbc\x79\xb6\x9c\x80\x81\x5b\x2d\x31\x94\x0a\xdd\x10\xa5\x6a\x17\x5a\x5d\xa0\x31\x39\xcf\x8b\xcf\xa5\x0e\x12\xd4\x99\x0e\xcc\xa5\xaa\x0d\x7e\xd4\x97\xe6\x8d\xfe\x80\xcc\xbd\x11\xc1\x9c\xa7\x70\x28\x1e\x2c\xbb\x14\x61\xa9\xf6\x53\x2d\x2b\xe1\x21\x0f\x00\x2d\x76\x2b\xec\x3e\xc5\x41\xca\x0b\x1f\x07\x0b\x2f\x9c\x0e\x95\x97\xce\x1b\xca\x4b\x07\xd9\x17\x2a\xed\x67\xa7\x62\xe3\x5c\x3e\x98\x92\x97\x4f\xf2\x37\xea\x2d\xa4\xb7\x1f\xf6\x1b\x9f\xeb\xa0\x77\x00\x6c\x74\x1f\x5c\x5a\x14\x58\xfd\xc6\x2f\xeb\x02\x33\x09\xfd\x36\xcf\xbb\x78\x70\x55\x79\xf8\x6d\x4a\xc7\x72\x3d\x3d\x1e\x84\x53\xc0\x01\x42\xf0\x94\x5b\x34\x0e\xce\x97\xcb\x73\x55\xf5\x3c\x55\x15\x32\xa9\xa7\xd9\xcf\xcb\x13\xb1\xc2\xee\x7c\x1c\x45\xe0\xc3\x6a\x00\xb1\x5a\x18\xca\xf3\x07\x33\x2d\xa9\x5e\x7c\xc1\xd1\x02\x5c\x23\x37\xa3\x96\x93\xeb\x6d\x22\x8a\x05\xd4\x53\x66\xcf\x61\x81\x4d\xd3\x68\xcc\xdc\x5f\x58\xcd\xce\x6f\xfe\xf7\x5f\x3b\x7e\xc1\xc3\x36\x5f\x1a\xc2\x7b\xb5\x42\xf8\x41\x9f\xc0\xc8\x62\xb6\x20\xa3\xd7\x0e\x3a\x14\x53\xe8\x16\xb5\x10\x7b\x73\x38\xd7\xa5\xd3\xaa\xeb\x3d\x46\xaa\xef\x52\x78\x72\x14\xe3\x4b\x57\x7e\x20\x9a\xb1\x37\xac\xad\xeb\x2f\x7a\xec\x22\x20\x18\xaa\x3a\xa3\xac\xbd\xf8\xf6\xd1\x41\x45\x0c\x9a\x4b\x0f\xf6\x73\x48\x2b\x1f\x67\xcd\xcd\x1f\x4e\x66\x78\x80\x49\x37\x41\x80\x68\x53\x37\x8e\xf4\x41\x7b\xa8\x25\xcc\xed\x70\x54\x29\x9b\xdb\xd1\x0b\xef\x7b\x37\x8e\xf3\x2d\xc4\xc8\x7c\x15\xa4\x80\xc2\x3e\xaa\x71\x44\xc6\x77\x13\xd2\x6d\xff\x75\x8f\xc2\xe3\x3d\xd3\xa6\x2d\x1c\xb4\x10\x90\xd0\x54\xcd\x82\x52\xfa\xde\xb2\xde\x3c\x17\x74\xe6\xce\x18\xb6\x9c\x54\xb5\x87\x40\x55\x36\x25\xf0\x3d\x4d\xdf\xd0\x46\x4a\xc8\x59\x1b\x5f\x73\xcf\xed\x8d\x4e\xbc\x7d\xa2\xe7\x6c\x56\xd5\x0e\x74\x3c\xcb\x9c\xa1\x1c\x55\xbe\x88\x87\x50\x46\xb0\x6f\xd4\xb2\x98\xfb\x03\xd1\xee\x0f\xb5\x11\xd1\xca\x3b\xde\x24\xcb\x3d\x86\x5b\x80\xde\x4c\x81\x14\x54\xef\x91\x8a\x58\xba\xaa\x0a\x10\xaa\x77\x47\xec\x8c\xad\x9f\xd4\xf7\x0c\xc0\x6e\xaa\x27\x6a\x9b\x02\xe5\x45\x7a\x83\x5a\xec\x60\x39\xbe\x03\x4e\x3b\xdf\x56\x4c\x8a\xa7\x27\x3c\x0b\x45\x6a\xb6\x09\x87\xf5\xea\x97\x1f\x16\xf3\xf5\xf0\xa6\xa7\xa6\x37\x84\x7b\x6a\x63\x3b\x71\xe0\xa2\xcc\xa0\x6e\xdb\xfa\x68\xb4\x6a\xf2\xf5\xf3\x3f\x3f\xe5\xf9\x53\x79\x74\xdd\xff\x21\xdf\x1a\xaf\x34\x1b\xf7\x8f\xe3\x9b\x8b\x4b\x6c\x8a\xa9\xbf\x50\x06\x3a\xd9\x88\x59\xbf\x07\x1e\x01\xde\x8a\x5b\x9c\x17\xa7\x7b\x6c\xc6\x62\xa7\x05\xcc\x76\x38\x8a\x82\x2b\xe7\x67\xb4\xa0\xaf\xfd\x8b\x71\x33\x05\x43\x8d\xbe\xb1\xa5\x2c\xe9\xdb\x3d\xd4\x87\xaf\x49\xda\xfd\xc9\x23\xec\xd5\xd0\xab\x5c\x2c\x99\x7a\x05\xbb\x08\x0a\x83\x3b\x0f\x53\x89\x7d\x58\xb2\x5a\xb8\x59\x88\xbe\xdc\xf1\xa2\xf9\x4c\x22\x9f\x08\x31\x5c\x66\x56\xe8\xed\x6d\xe0\xc7\x92\x91\xd0\x39\x64\xa7\x64\x5f\x26\x6d\x1a\x34\x6a\x08\x5c\x0a\x26\x94\x62\xca\x99\xc0\xff\xed\xd4\x10\x4f\xce\x6a\x2b\x61\xb8\x7b\x9e\x6d\xa8\x41\x19\x19\x7d\x7a\x57\x97\xbc\xd4\xf1\x8d\x98\x9b\x70\x03\xaf\x95\x28\xdf\xef\xbc\x8a\xb3\x1a\x8c\xc0\x2f\x37\x7d\xb9\xdc\x4c\xb5\x5e\x89\x22\xe6\x93\xfc\x83\xa9\x7e\x65\x66\x31\x5d\xb9\x2d\xe1\xe2\x56\xcf\x12\xdf\xab\x70\xeb\xd1\x98\xcb\x3d\x5c\xc2\x0c\x75\x98\x64\xde\xfd\x59\xf8\xb0\x56\x83\xe2\x57\x51\x52\x35\xba\xe2\x67\x32\xcb\x6e\xea\x3f\x26\x1c\x88\x60\x58\xa9\x13\x58\x99\x43\xdf\xe5\x1f\xec\xbd\x7d\x31\xeb\x8f\x98\xa9\x2c\x49\xaa\xd7\xf4\x94\x0f\x4b\x0f\xe6\xbc\x16\xa6\x7d\x15\x48\x6d\x85\xea\xa8\xc8\xf5\xdb\x5f\x3f\x2b\x70\xf3\x63\x3a\x6f\xfc\xec\x1f\xda\x51\xfa\x6c\xe1\xad\xb8\x54\xa7\xc0\x34\xcd\xf0\x2c\x94\x62\xed\xe7\x05\xbf\x38\x57\x25\x0e\x7e\x54\xe8\xb7\xd7\xcd\x26\x72\xdc\x52\x31\x6c\x35\xcf\x1a\x10\x94\xf5\xef\xb3\x41\x59\x96\x96\xcf\xbf\xe6\xf7\x1c\x9f\x86\x47\xf5\x2e\x9f\xcb\x67\x5e\x14\x00\x57\xa1\xe0\x5c\x31\xde\x0f\x25\x9e\xfd\x77\x9b\xfd\x31\x82\x02\xbe\x50\x65\x98\xb4\xef\x1d\xdd\xfe\xcf\x8e\x6e\x9f\x3b\xba\x5d\xc3\x9d\x37\x25\x05\xda\x2f\xca\x6b\x51\x5f\xac\x3f\xb6\x34\xe8\xba\x95\x0c\x3a\x77\x44\x7b\x51\x91\xf1\xfe\xbd\x23\xdc\x97\x4d\x60\xe9\x19\x74\x34\x2d\x1c\xe7\x7b\xa1\xc6\x24\xbd\x72\xd2\xf5\xc0\xa5\x97\xaa\x81\xb3\x05\x96\xf6\x15\x52\xf3\x55\x5d\x35\x8f\xd3\xb7\x5e\x9a\x6d\xd1\xf7\xd2\xcc\xeb\x39\xf3\xea\xc5\xd4\xa1\xf6\x32\x32\xb1\xb4\x0f\xa7\x76\xbd\xca\x3f\x00\xeb\x6c\xb5\x9b\x2b\x82\xf8\xe0\x38\x20\x0b\xb8\xda\xdb\xe8\xb9\xeb\x34\x4b\x85\x99\x7a\x3b\x46\x80\x8d\x3d\xa9\xb5\x8e\xd6\x4b\x70\x13\xd2\xfa\x8b\x53\x9b\x97\xb3\xb5\x39\xd1\x07\xa8\xd8\xc5\xd0\x17\x3f\xb6\xab\xf8\x82\x86\xaa\x97\xcd\xe1\x08\xbc\x9f\xb0\x0c\x98\x09\xb5\xbc\x04\x60\xeb\xe4\xa5\x92\x75\x2f\xaf\xfb\x62\xd0\xd5\x4c\xcf\x20\x88\xfa\xf2\xc5\x86\x89\x17\x9a\x10\x9d\x9b\xd7\xf3\x99\xa7\xfc\xc2\x09\xca\x0b\xb9\x26\x6d\xe8\xcd\xa0\xde\xcc\x57\x21\x58\xad\x10\xd8\x2f\xa3\x54\xde\x37\x76\xb6\xef\x1b\xf7\x74\xde\xb6\x9b\xfa\xbe\x05\x0c\xb5\xef\x5b\xa0\x47\xdc\x65\x7e\x6f\x4e\xd5\x2b\xe7\xb7\x6e\x72\xbd\x1f\xa1\xc0\xe9\xa1\x21\x1f\xbe\xdc\x94\xc2\xe5\xc1\x86\xf4\x0e\x3c\x7a\x78\xc3\x32\x35\xd5\x0b\x45\xfa\xdf\xb1\x36\x3c\x6d\x9f\xdf\x6c\x69\xef\x0b\x2d\xf1\x8d\xa7\xf5\xf3\xfb\x62\xf7\xf4\xc6\x93\xfb\xf9\x7d\xf5\x64\xb1\xe0\xb4\xf9\xcd\x48\xd7\x03\x93\xcf\xb7\x1e\xc4\xbc\x6b\x44\x25\x79\xeb\xfc\x54\xdc\xfe\x38\x7c\xe2\x03\x9b\x5e\x3f\xaa\x7b\x06\x14\x7e\xfc\x98\x0a\xd5\xcf\xdc\xa7\xfe\x18\xe5\xcc\xfe\xc3\xb9\xb7\xa0\x4b\xea\xde\xaf\xfc\x7b\xad\xaf\xbf\x7a\x28\xf2\xab\x59\x7c\xfd\xd9\xae\xfd\xcf\x76\xc5\x3f\xdb\x75\xfe\xd9\xae\xfc\x67\xbb\xc4\xb8\xfd\xd9\xca\x9f\xad\x38\x19\x5e\x8a\xbb\xe1\x73\xb3\x2e\xab\xe8\xbb\x36\x42\x91\x41\xc5\xdd\x3c\xe5\x5d\x89\xcc\x50\x5f\x88\x2d\xee\xc6\x19\x76\x71\xd8\x05\x2c\x6e\x7b\xba\xbf\x8e\x3f\x6d\xcf\x1b\xdf\x43\x19\x70\x06\xb3\x3d\x39\x8f\x14\xb4\x9a\x32\x24\xa1\x5a\x21\xc0\x34\xd2\xe8\x79\xb0\x06\xac\x31\xd9\x9e\xd8\xdd\x13\x00\xd5\x99\x02\xb8\xf3\x25\x88\x1e\xe4\x97\xea\xbe\x29\x6e\x8f\x46\x8a\xd2\x9a\xe9\xd1\x6e\x3e\xde\x1b\xbf\xc1\x62\x75\x6f\xe6\x21\x11\x7b\x00\xe1\x38\x30\x18\xa2\x97\xf0\xe3\xf1\x98\x89\x1a\x2a\xec\x8b\x7b\x98\x47\x4f\xc4\xe2\x29\x0d\xa7\x38\x68\xfb\x29\xee\xf4\xfc\x22\x35\xe7\x49\xdf\xce\x8b\xdf\xe9\x1d\xa7\x4b\x42\xd9\x0e\x04\x65\x78\xca\x0f\x6a\x43\x71\x69\xe4\x5f\xda\x7c\x64\x29\xa4\x1d\xbd\x40\x71\xcc\x8b\xe4\x35\x36\x00\x96\xaa\xe4\xeb\x2d\xa8\xb5\x90\x07\xd5\x65\xbc\x31\x1f\x85\xa7\x51\xaf\x95\x84\xb8\x4c\xcb\xfa\xda\x01\xb0\x0a\xfd\x03\xd7\x2d\x5f\xd3\x96\x3e\xd7\x09\xcc\xf5\xb1\x41\x35\xed\x0c\xe9\xc9\xef\x06\x65\x88\xc5\x8d\x27\x24\x05\x46\x35\x9a\x26\x97\xa6\xfb\xa9\xa7\x6b\x02\x75\x5a\x53\x5c\x4a\xf9\x41\xca\x20\x8a\xc7\xfa\xaf\xb8\xcb\x75\xd4\xe8\xcb\xf3\x6b\x2f\x55\x14\x77\xc1\xdf\xff\xba\x3e\xf6\x55\xb4\x36\xf2\x65\x9d\xc2\x27\xa8\xf1\x70\x25\x37\x45\x05\x5a\x64\x1a\xfd\x66\x2c\x34\xaf\x1a\xcb\xed\xe5\x10\x9f\x97\x4f\x66\xf9\xc5\xdf\x5f\x5a\x23\x5f\xe3\x7c\xb8\x38\xd4\x98\xb7\x15\xfd\x5b\xeb\x31\x52\xf0\x51\x6c\x3f\x7e\xe8\xfd\x47\xe7\x04\xc5\xfd\x7a\x7e\x47\x5d\xfa\x1d\xb9\xf7\xfb\xe1\xfa\xb9\x6c\x4e\x2a\xa3\x77\x23\x63\xbd\x3b\xf9\xdd\xfa\xa5\x3c\xc2\x01\xfd\x10\x2c\x76\xb5\x85\x7a\x8e\x60\xc5\xb3\xa0\xfc\x94\xa1\xc7\xa5\xbb\xe4\x0d\x4c\x88\xd8\xfa\x79\x43\x6c\xe0\xa6\xd8\x26\x33\x64\xb0\xb5\x25\x30\x17\xa3\x5a\x85\xbd\x4e\x4c\x15\xc4\x11\x3b\x76\x51\x5e\xb7\x8c\x01\xb0\x1d\x08\xd4\x02\x7a\x44\x81\xbf\x0e\x60\xec\x96\x02\xc7\x11\xfa\x1e\x9a\x12\xb7\xda\x58\xd6\xc9\xc5\xf4\x38\x97\x55\x8f\x73\x81\x92\xad\xe2\xf7\x3e\x1c\xf5\x38\x06\x54\x6c\x11\x17\x16\x82\xf7\xcb\x33\x0c\x05\xef\xd9\x14\xe8\xb6\x2d\xde\xb3\xf9\x7b\x8f\x57\x41\x40\x87\x35\x66\xb5\x47\xe9\x7b\xbb\x30\x5d\xfc\x39\x32\xf7\x5c\x73\xf7\x5c\xb3\xf7\xb4\x7c\x3c\x87\x2c\x7f\x19\xf7\xe8\x81\x34\x4b\xd9\xdb\x0a\x99\x3f\x72\xbb\x17\x20\xd2\x52\x9f\xbf\xea\xc5\x90\xc2\x47\x34\x85\x8c\x2d\xba\xe2\x33\x76\x68\x41\xd1\x32\xfc\xa5\xdf\xd1\xe6\xfc\x15\x76\xdc\xfb\x14\x54\x49\xda\x70\x7f\x05\x88\xc7\x17\x7f\x29\xaf\x27\x1b\x44\x9d\x10\x16\x70\x91\x37\x1b\x42\x84\x34\x6c\x66\x5e\xad\x4c\x43\xd5\xef\xdd\xc5\x38\x1a\xa4\xf0\x6c\x54\x78\x9c\x4c\x1a\x25\x37\x63\x85\x24\x25\x9a\xad\x2d\x73\xa8\xf1\x2f\x57\x59\x20\xaf\xc0\xea\xf6\xc6\x87\xf9\xf7\xf6\x51\x73\xfe\xed\xa3\x0e\x23\x9e\x53\x10\x52\xad\x32\xe1\x86\xcf\x8d\xbd\x7a\xd0\xd1\x39\xd8\xe8\x2c\xa0\xa9\x91\xbe\xe3\x52\xc2\x4d\xfd\xe3\x08\x1d\x74\xfc\x04\xa5\x55\x7e\x61\x17\x3d\x6d\x38\x97\xbb\x34\x25\x9c\x01\x67\x68\x0a\x18\xcd\x81\xb1\x57\x6b\x2c\x6a\x71\x98\xf2\xd1\x8a\x73\x51\x38\x87\x0d\xe3\xe8\xe0\xd4\x18\x5c\x46\x47\xd0\x55\xbd\xa9\xa6\xb5\x8a\x6f\x0b\xea\x53\x68\x45\xdf\xec\x29\xeb\xf3\x3c\x05\x3a\xc5\x40\x9f\xd1\x73\x93\xb4\x04\xde\x43\x12\x1a\xcd\x07\x15\xe6\x28\x21\x31\x9f\x78\xc2\x08\x9a\x41\xeb\x75\x84\xf4\x23\xf0\xba\xe8\xe3\xc5\x95\x51\x09\xec\xda\x43\xbd\x46\x4a\xeb\x75\x2b\x10\xdf\x10\xa8\x96\x46\x5b\x0c\x75\x24\xa9\x56\x86\x86\x2d\x65\x21\xf9\xa6\xd2\x2d\x05\xfd\x88\x94\x9f\x7a\xc9\x2a\x25\xc4\x0e\xfa\xc8\x68\x43\x1e\x98\x35\x4d\x59\xf4\xc1\x01\x2f\xb0\x0f\x5b\xd3\x02\x65\xc0\x04\xe2\xad\xa0\xa2\x72\x19\x25\xbc\x7c\xfb\xfd\xb3\xc9\x04\xba\x64\x9e\xb2\x0b\xb5\xf8\xe7\x0d\x8f\x85\x97\xbc\x1d\x5a\x69\xf2\x16\x76\xdd\x4d\x2f\x78\xf5\xa7\x98\x72\x0e\x80\x46\xca\x5a\x99\xb7\xbc\x43\x25\xb3\x22\x9c\x55\x08\x36\xe7\x68\xb3\x78\xbf\x40\xbe\xf4\x3f\x54\xae\x0f\x05\xf1\x40\xb3\x64\x9d\x49\xe6\xf3\xe6\x37\xd0\xe8\x31\x8c\xe6\x33\x17\x14\x6a\xd6\xef\x87\x5f\xa6\x1b\xf2\x29\xf2\xbd\xa9\xf3\x3c\xa7\x98\x82\xab\x46\x23\x3f\x93\x57\x0b\x89\x71\xb8\xf0\xe1\xeb\x1b\x45\x45\x77\x84\xa2\xab\x85\x10\x89\xd1\xa6\x26\xe1\x91\xd8\xaf\x71\x62\x93\x47\x22\x2a\x5b\x59\x66\xa8\x75\x5e\xa9\x15\xe6\xa6\x21\x10\x69\xa6\x09\xa3\x4e\x6e\x1c\x74\x81\x74\xc1\x01\x86\xf3\x32\x20\xec\x02\x02\x62\x12\x49\xc0\xfe\x23\xd7\x3a\x36\x17\xc9\x4c\xd0\xcc\x2f\xaf\xc4\xa2\x5b\xef\x41\x53\x50\x1f\x5f\x53\xf5\x5c\xeb\x61\x6b\x2f\x30\xac\xf4\x59\x1f\x3a\x15\x60\xc5\x54\x6b\x74\x97\x02\xaf\x61\x46\x6e\xaa\x10\x26\x0d\x61\x7a\x0d\x69\xa3\xcf\x23\x58\xc4\xf9\x86\x90\xa0\x4b\xa7\x4c\x02\xf9\x5a\x82\x40\xca\x52\x03\x65\x8b\x87\xa0\x6a\x50\x33\xa3\xe0\x25\x73\x41\x6d\xb8\xa0\x54\x02\x50\x50\xef\x1a\x47\xdd\x5c\xeb\x7b\xfc\x08\x7d\x65\x00\xc1\x4a\x89\x3a\xc3\x4b\x6e\x2e\xf2\xc5\x67\x40\xb6\x10\xc9\x9a\x36\xc0\x68\x40\x9c\xdb\xd9\x61\x42\xc1\x86\x8d\x7c\xb1\xee\xff\x3f\xba\xae\x74\xd9\x71\xd7\x57\x7e\x3f\x6f\x49\x6c\x12\x33\xc1\xe0\xc1\x90\x13\xe7\xe9\x6f\xa9\x5b\x02\x32\xbf\xff\xad\x4a\x4c\x8b\x7d\xdf\x91\x04\x04\xd3\xef\x4e\x1a\x8b\xa2\xa9\x53\xa4\xe4\x57\xeb\x84\xad\x8f\x05\xb1\x87\xcb\xbf\x2b\xbf\xa3\xa4\x7e\x57\xda\xa0\xcf\xbf\x77\xb3\xb8\xb1\x62\xff\x6e\xbd\x4a\xff\x3e\x6d\x22\xc1\x55\x18\x44\x33\xa9\x4a\x37\xc9\x5a\xc1\x6f\xea\xd9\xff\x9b\x74\x64\xc9\xbf\xbc\x84\x54\x32\xa6\x94\xf9\xc3\xc4\x48\x24\x9a\xfc\x21\x34\xa3\xb4\xc5\xae\x1d\x01\x26\xaa\x78\x7b\x26\x00\x3b\xaf\x00\x61\xa0\x77\x07\xec\x13\x05\xdb\x33\xf8\x02\x99\x4c\x05\x93\xf3\xb6\xda\x54\xab\xad\x6a\xe8\xad\xcf\x6c\x3e\xaa\x8e\x24\xa5\x69\xbf\x08\xd5\xf6\xf8\x40\xb1\xa0\x1b\xaf\x80\xe3\x66\x75\x69\xb2\x28\x97\xaf\x6a\xdd\xfa\xe4\x91\xf8\x31\x28\xb5\x4f\x89\x1b\xa5\xed\x3b\xea\x54\xdb\x0f\x86\x9a\x96\xad\x3b\x05\xee\x4e\x13\xb8\x3c\x96\x86\x51\xb2\x69\x89\x80\xd1\x31\xc4\x63\x94\x76\xb2\x8e\x40\x2d\x0a\x32\x54\x6a\x0f\xf1\x4e\x42\xa8\x95\xca\xaf\x5b\x3c\x33\xfa\xec\x55\xb1\xb1\x1d\x35\x64\xed\x47\xbd\xfa\xf8\x50\x04\xfc\xa2\x1b\xb9\x6e\xee\x26\xde\x5d\x7b\xae\x9b\x2f\x0e\x4b\xb1\x2b\xdf\xfa\x52\xef\xa2\x44\x7b\xaa\x9c\x02\x5c\x79\xbb\x56\x5d\xd0\x5c\x36\x32\x5c\xc3\x81\xad\x08\xaf\xbe\x02\xbc\x72\x77\xaa\xd7\xa6\xca\x65\xcf\x84\x15\xd1\x1a\xa5\x90\x08\x68\xe5\xe1\xd5\xed\x1c\x31\x4a\x1a\x2e\x17\x36\x33\xae\xa3\xba\x21\x90\x04\x64\x72\x2a\x7c\x6b\x50\x75\x22\x74\x12\x73\x1d\x35\x7f\x5b\xcd\x5f\x76\x73\x97\x44\x38\x51\x3d\x81\xa2\x93\x17\x15\x51\x04\xf2\x81\x4e\x5b\x51\xe8\xbe\x50\xda\x24\x61\x19\x56\x64\x8d\xaf\x4c\x0e\x4d\xe3\xd8\x66\xcc\xdc\x3b\x66\x01\xf5\x83\x34\x1f\x29\xfd\x88\xd0\xe6\x5a\x4a\x98\x95\xdd\x17\xcb\x98\x51\x28\x47\xcd\xe9\xb2\xb8\xf4\xd2\x10\x8c\xdb\x14\xcd\xd2\x54\x96\x2d\xf0\xf1\x0f\xc8\x17\x64\x3c\x0c\xfa\xa3\x43\x3a\xf0\xc5\x20\x19\x87\x13\xfc\x52\xa9\x0e\xa0\xaf\xb9\x8d\x9a\x46\xc5\xae\xa3\xf3\x2b\xa5\xe9\x3b\xf1\xe7\x3f\xb6\x3f\xdf\xb6\xe7\x7c\x9b\x34\xc4\xc1\x87\x03\xdd\xf9\xb3\x9c\x8b\xfc\xb7\x9f\xe5\x7c\xfe\x2c\xf5\x67\xa9\xde\x58\x10\x08\xfa\xc8\xac\xb1\xfa\x84\xad\x0a\x69\x49\x86\xfd\xcf\x52\x1f\x3f\x4b\x0d\x7b\xfe\x59\xaa\x18\x94\x9f\xa5\x9e\x3f\x4b\xfb\x59\x9a\x5b\x4b\xc0\x64\xb2\xb9\xbd\x2d\x9b\x0c\x38\xed\x26\x7f\x4c\xdb\x1b\xf7\x3a\xdb\x4d\x17\x51\x26\xac\x4e\x54\xdb\xea\x6b\x37\x69\x80\xf2\xdd\x30\x9f\x10\x24\x3e\xdf\x80\x3d\x3c\x93\x84\xb5\xdb\x98\x1c\x0a\x46\x76\x08\xa0\xa3\xa0\x32\x7a\xda\x0d\x65\x24\x4a\x85\xa2\x5f\xb2\x02\x12\xd4\xe0\x81\x2d\x12\xdb\xf2\xc4\x85\x5c\xaa\xd2\xe2\x04\x65\x55\xbc\x9a\x64\xbb\x1d\x08\x82\x69\x10\x74\xe0\x4c\xac\x2d\xda\x6f\xb6\xa5\x15\x86\x28\xee\x56\xc9\x96\xf5\xe6\x65\x1c\x6b\xab\x8c\x50\x6d\x7d\xc8\x22\x08\x0a\xec\x0b\xe8\x08\xfb\xaa\x6d\xe5\x76\x84\xcc\x59\x9b\x5f\xc4\x0b\xcf\xa4\x78\xcc\xa3\x31\xba\xb7\xe0\xfe\x48\x14\x03\x70\xc1\x4b\x34\xaa\x18\x50\x5a\xa0\x57\x81\x37\x69\x1a\x8f\xe4\xdb\x9f\x9f\xa5\x45\x29\xff\x86\x39\x4a\x83\xac\xfe\x16\x03\xa4\x8f\xb5\x18\x92\x72\x6e\x95\x71\x81\x77\x48\x75\x84\x68\x51\x1d\xf0\x1e\x84\xa8\x27\x14\x49\x52\xdc\xf1\xe9\x2b\xa1\x16\x0f\xc7\xaf\xd5\x59\x60\xdb\x20\x68\xf1\xc0\xec\xbf\x45\x7e\x18\x1f\x88\xe2\x84\x69\x0d\xe8\x6f\x05\xa0\x1c\x23\x3b\x0a\x51\x5f\x93\x8f\x42\x15\x03\x16\x30\x70\xa6\x36\xeb\x5b\x97\xd8\x2e\x08\xfe\xbf\x98\xa0\x17\x39\x6d\x00\x88\xb1\x5e\x45\xe8\x37\x11\x9a\x89\x0c\x07\xe0\x69\x11\xe0\x99\x77\x4b\xc9\x7e\xd3\x77\xfd\x82\xfa\x6e\x46\xdb\xe9\xd1\xee\xcb\x0d\xaf\x14\x1a\x78\x3f\xd7\x4c\xa9\x2e\x6d\x3f\x37\xf7\xfb\x03\xa9\xfb\x16\x71\xc2\x57\xf7\x57\xcb\x67\x6f\x31\xa7\xb0\x43\x2a\x03\x88\x2e\x9d\xdf\x44\xf6\xb7\xd4\xc5\xef\x11\x22\xf1\x8a\xb8\x8e\x6e\xc9\x87\xce\x59\xa7\x25\x4f\x67\x68\x2d\x40\x7f\xfc\x2b\x07\x01\x98\x06\xb5\x34\x18\xdb\xc9\xbc\xad\x1d\x26\x7e\xa0\x99\x78\xd6\x76\x50\x7e\x53\x3b\x50\x95\x0f\xad\xc9\x13\xa3\xd6\x76\xdc\x1b\x8c\xec\x86\x7b\x3b\x02\xa7\x2a\xed\x80\x80\x9d\x76\x1c\xfc\xd2\x90\x77\xfc\xdb\x21\xe3\x82\x72\x37\x69\x07\xaf\x67\xb7\xa3\xc8\xd0\xf9\x64\x50\x85\x46\xd8\xdc\x68\xe2\x54\xa6\x0e\x13\x83\xf0\x99\x35\x78\x23\x3b\x00\x3d\xb7\x13\x65\x83\x52\x48\x71\x71\x0d\x60\x5d\x69\x93\xf6\x23\x73\xcf\xc6\xb1\x1d\x8a\x66\xe2\x7c\xa2\x68\xcc\x4d\xa8\x0e\x0b\x10\x90\xd5\xca\x0d\x1f\x26\xa9\xdc\xf4\xee\x6f\xc3\x5d\xe0\x56\xa4\x99\x65\x82\x1d\x71\x5f\xf1\x09\xe6\x33\x77\xe7\xc9\x33\xa5\x41\x42\x8d\x7c\xab\xa6\x81\x3d\x79\x2b\x77\x7c\x3c\xa2\x1a\xe0\x0d\x9a\x7b\xa1\xd7\x21\x9f\x4e\x55\xcd\x95\xf1\x84\xa3\x71\x83\xab\x95\xce\x83\x48\x60\xa1\x02\xff\x62\x60\xd7\x53\x62\x8f\x54\xd4\xc4\xc4\xc3\x1d\x6a\xf7\x32\x4b\x17\x17\x45\xad\xec\xd2\x83\x31\x1b\xf1\x29\x8e\x29\x2e\xee\x4f\xa6\x73\xde\x12\xa7\x4a\x41\xf8\x82\x7f\xcd\x94\x67\x80\x5c\xbd\x59\xc8\x45\x7b\x77\x01\xda\xbd\x17\x4d\x2b\xf7\x72\xa8\xd2\x5d\xe8\x01\x8d\xb1\xa5\xa8\xd9\xc5\x43\x27\x1e\xb8\xca\xb7\xa7\xfe\xa4\x37\xe7\x54\xbc\x27\x4b\x77\xf0\x05\x6d\xe5\xec\x51\x92\x45\x15\x9d\x08\xd2\x8e\xa1\xf0\xdc\x9f\xaa\x5a\x8b\xee\x4d\x90\x50\x1a\x3c\xb3\x6d\xa5\x86\xa8\xa5\x39\xbc\x3c\x3d\x8d\x68\xe3\x65\x83\x65\x79\xe9\x77\x55\xc5\x1c\xbc\x58\x31\x5e\x56\x1f\x5e\x61\x12\x8f\x23\x24\xf2\xe1\xc4\x5c\xa6\xe1\xce\xa5\x4c\x9d\x2b\x95\x5f\x28\xac\xf1\x32\x11\x68\xe7\x81\x0f\x06\x01\x51\xac\x39\x08\x46\x4e\x20\xd0\x73\xe4\xd9\x79\x66\x7c\x79\x51\xa0\xe9\x5d\xc1\x76\xd6\xbc\xfa\x53\x01\x07\x12\x45\xda\x46\x84\xba\xa8\xee\xaa\x4c\xed\x15\x64\xcf\xf1\xb3\x52\xee\x02\x80\x6a\x50\x69\x10\x76\xd1\xaa\xc3\x22\xa6\x55\x6e\x75\x88\x9a\xa0\xa2\xda\x61\xd5\x8e\xb2\x07\x02\xe0\xb1\x5b\xb3\x33\xfa\x56\x91\xeb\xfa\xc6\xb3\x55\x7d\x6f\xd2\xb0\x42\x6e\xd8\xdc\x6c\xd8\xdb\xb4\xfc\xa8\x93\xe0\xce\x86\x2b\xf3\xad\x46\x0e\xbd\x50\xb9\x4f\xda\x2a\xab\x87\x28\x17\xd5\x0a\x85\x1d\x4e\xcd\x18\xbf\x2b\x9e\xd0\xb5\x7a\x68\x8d\xb4\x26\xce\x5d\x8a\x56\xeb\x56\x20\x03\xb3\xe9\x0b\x22\xaa\x16\xf1\xca\x18\xd7\xe8\x29\xd6\x0a\xd0\x82\xaf\xd7\xd6\x98\x13\xe8\xc0\xeb\xaf\x53\x3f\xb9\x82\x6d\xd6\xf6\x70\xed\xb7\x69\x1d\xfa\xdd\x7f\x96\xdf\xfc\xb3\xfc\xd6\x1f\x69\x85\x97\x94\xde\xe5\x92\xdb\x71\x90\x2c\xa8\x52\x35\x1a\xa9\xb9\x54\x52\xd9\xe5\x52\x5e\xb6\x92\xa5\x2f\x02\xce\x37\x17\x1d\xc6\x41\x21\x57\x5f\x76\x35\xc1\xd8\xae\x60\x78\x9e\x1f\x4d\x7c\x36\x3f\xb1\xbc\x32\xc7\x3a\x6f\x17\xa8\x5c\xc6\x01\x23\x4e\x50\x2c\x70\xac\x44\x04\xf0\xb6\xcb\xe5\xea\x86\x7e\x4e\x80\x34\x82\xeb\xe6\xf1\x30\x84\x6b\xf1\x41\xc9\x98\xd8\x29\xb1\xb7\xc8\x5f\x3a\xb4\x6b\x89\x8e\x2b\x20\x20\x44\x7b\x89\x0e\x76\x22\x75\xfd\x22\x33\x90\x6b\x31\x2e\xd4\xd7\xc2\x8e\xf2\x5a\xb8\x73\x2c\xaa\xd5\x97\x6b\x89\x99\x5f\xb7\xf8\x7a\x49\xa5\x57\x32\x3e\x9d\xe1\xc5\x1f\x9b\x8b\xf4\x49\x32\xc8\x33\x59\x4b\xb4\x15\x92\xc0\xcd\xbf\xbb\x03\xc1\xb5\x84\xee\x99\xae\xe7\x04\x5a\xb6\xa9\xf0\x6f\xa8\x41\x93\x93\xb3\xd4\x16\x8d\xd5\xe1\x54\x12\x0a\x89\xe2\xee\xc3\xc8\xaf\x28\x51\x85\xdd\x92\x4f\xd5\xad\x23\xd4\x83\xfc\x9b\x94\xe8\x2e\x20\x32\x4c\x71\xc9\x47\xb7\xc1\xfb\xc7\x82\xce\x40\x36\xdf\x46\x69\xd4\x4f\x9e\x82\x12\x5e\x9a\xd9\xb9\x6e\xd7\x6e\xfe\x11\x2f\x4a\x74\xdb\x3c\x32\x05\x82\xc0\xa3\x0d\xf9\x5c\x8b\x54\x94\xe2\x78\x53\x8e\xa6\x28\x12\x4c\x4d\x2e\xcd\xe4\x07\x76\x7f\x2e\x99\xd8\x5c\x51\xfe\x81\x33\x60\x80\xd2\x2f\x94\x0f\x92\x6d\x51\x69\xa4\x01\x10\x7b\xef\x0a\x91\xce\x28\xb3\x02\x08\x45\xbb\x76\x87\x4b\x73\xd7\x8e\x7a\x63\x67\x53\x00\xa8\xac\xfb\x4d\x7a\x36\x28\x78\xf9\x4d\x64\x80\xf9\x2f\x28\x9b\x4a\x47\x53\xbd\x41\x4e\xec\x2c\x99\x1d\x55\x88\x40\xab\xcf\xde\xab\xc5\x6e\xd2\xcd\xae\x5d\x32\x0b\xac\x7e\xaf\xf4\x10\xbd\x55\x12\x00\x59\xff\xd7\xc4\xd3\x4e\x30\x26\xe4\x57\x52\x16\xe4\xd7\xb1\xf1\xb5\xda\xc5\x85\xe7\xa5\x22\xda\xaf\x43\x32\x7c\x55\xa0\x67\x60\x82\xa5\x0e\x21\x9d\x07\x76\x7b\xae\xe3\xf4\x70\x5e\xaa\x96\xbd\x00\x2d\x70\xa4\x75\x5c\x3e\x17\xc8\xe2\x3b\x6b\x58\x7c\xe1\xbb\x44\x23\xe0\xdb\x59\x75\x2d\x7b\x9d\xb5\x5b\x45\x2f\x7d\x9d\x35\xf3\xb2\x1f\x90\xd7\x00\x74\x03\xe1\xc2\xb8\xa3\xaa\xe6\x8e\x8c\x35\xdc\x9c\x31\x78\x29\xec\xd1\xb1\x6a\xd7\xaf\xb2\x5f\x55\x17\x94\x57\xb5\x9e\xac\x66\x57\x96\x2d\x54\xe3\xd3\x77\xd5\xf9\xd1\x01\x28\x3e\x3a\x10\x18\x79\x86\x7e\xd5\xa9\xe5\x13\xf7\x8e\xaa\x93\x34\xc3\x91\x85\xda\xb3\x1d\x90\xcb\xf6\x3f\x04\x5c\xb8\xd8\xa5\x88\xf6\x48\x4b\x47\x3a\xec\x1d\x3e\xa1\x61\x55\xa9\x13\xa6\xb7\xb9\x72\xa5\x37\x71\x74\x28\xf8\x6a\x6f\xc2\xae\xaa\x4f\x34\x04\x58\x02\xcc\xa0\x9a\x46\x75\x6f\x0d\xb4\xba\x77\x4e\x9a\x49\xb9\xe6\xb7\xc6\x0a\xcf\x56\x4c\x5a\x9f\xd2\x41\x43\xfa\x80\x81\xca\x47\x1a\xca\xc7\x95\x55\xfa\x5d\x51\xa5\xc6\x7f\x5c\xf1\x2f\x5e\x6c\x02\x94\xe9\xd5\x47\x26\x0e\xaa\x9e\xb4\x13\xea\xc7\xfd\xac\x3f\xab\xfb\x59\x79\xb3\x47\x94\x48\x75\xd9\xc2\xf2\x14\x90\x73\x85\x79\x6e\xcb\x06\x80\x22\x5c\xdd\xe2\xe5\x03\xad\x65\x3b\x37\x59\xc6\xad\x0e\xb2\x44\xa9\x5c\x50\x65\x55\x2c\xc3\xb6\x60\xb8\x2a\x57\x4e\xaa\x96\xb2\x79\x38\xaf\x57\x54\x85\x7b\x60\x03\xa3\xd9\xcc\xe4\x65\x14\x8a\x46\xf1\xee\x1f\xd2\xb6\x57\x27\x51\x58\x57\xa0\xfc\xb3\x3a\xbf\x23\x2c\x51\x64\x50\x23\x32\x97\xf7\x3b\x3e\x6e\x0d\x31\x5e\x0a\xf3\x6f\x1a\xa4\x0c\x54\xa2\xe6\x35\xc4\x0e\xd4\x2c\x7f\x59\xe5\x2c\x75\x75\x8f\x87\xc3\x17\x71\x16\x85\xcb\xc1\xd5\x3d\x62\x46\x66\x3e\xf2\x0d\x36\x9a\x2f\xc5\x73\x20\xfe\xa2\xca\x17\x29\xb5\x75\xa6\x25\xac\x4d\xfe\xee\xe6\x09\x62\x10\xef\xb6\x8c\x64\x06\x5d\x8d\xac\x2e\x30\xdd\x61\xbf\x24\x17\x42\xaa\xdd\xe0\x6f\x0b\x25\x08\x28\x17\xbf\x4c\x64\x28\xd2\xf1\xae\x86\x12\x01\xaf\x97\xae\x2e\xc0\xe9\x79\xf1\xab\x13\xb0\xd5\xfd\xf1\x90\xc1\xb3\x3a\x49\xd9\x73\xdb\x25\x2a\x4f\x96\xff\x53\xcb\x5f\xf2\x2d\xc2\x0f\x69\xba\xa2\x78\x7c\x4e\x7a\x1c\x7d\x95\x64\x44\xb5\xa2\x12\x2f\x80\xe0\x71\x94\x6e\x7f\x11\x50\x91\x20\x51\xa4\xee\xae\xa8\x23\x3b\xeb\x95\x28\xb6\xba\x35\x4a\x27\xcc\x24\x0b\xd4\x84\x2f\x71\x59\x36\xba\x3c\x9f\xaa\x78\x9f\x98\x13\x3b\x0c\x7c\xaa\x12\xdb\xfd\x9e\xb3\x24\x61\x0f\xb2\x40\x59\xdd\xae\x1e\x30\xd9\x7b\xdf\x06\x58\xdd\x9e\xc3\x89\xeb\x0d\xab\xdb\x0f\xbd\xb4\x2a\xd0\xab\xd5\x43\x15\x5b\x75\x09\x36\x70\xfa\xa8\x0a\xa6\xa7\x0a\x51\xb3\x70\xe0\xbd\xba\xfd\x72\xe9\xe9\xc5\x47\xa1\x92\x93\xb1\x74\x75\xe9\xd6\x8a\xa2\x65\xca\x01\x3c\xb4\x80\x52\x69\xb8\x7a\x6c\x49\xad\x7c\xf3\x2c\xca\x90\xfa\x03\xea\x28\xae\x02\x45\x35\xc7\xf1\x98\x80\x8b\x5f\xe6\x79\xa2\x70\xdc\x95\x77\x2f\xa8\xd8\xa2\x59\xa8\xa8\x02\xac\x89\x61\x23\x48\xfd\xd3\x2b\x57\x2b\xae\x52\xad\x2e\xe1\xf8\x16\x2c\x7f\x5a\x51\x15\xb9\x75\xb8\xa2\xd7\xbf\x57\x77\x6c\xc9\x53\x41\x0d\x3f\x0e\x99\x7f\xc2\x93\xe2\x24\x6a\xe5\x26\x5e\xa1\x6d\x15\xbf\xfa\x17\x5a\xa8\xa2\x8a\x38\x14\xc4\xa0\x3c\xf0\x41\x6b\x29\xa8\x4a\x65\x14\x5a\x09\x19\x25\x56\x9e\x5a\x4c\xe5\x39\xca\xa7\x3c\x3b\xc0\x05\x61\x01\x7d\x5f\x4b\x88\x2a\x4b\xa5\xd5\x71\xe5\xaf\xaa\x19\x26\x14\x69\x51\x5f\xb5\x6a\x95\xfc\x40\x6f\x89\x3c\x2c\xd5\xfa\x86\xc2\xd6\x54\xea\xe4\xbe\xca\xf7\xf4\x41\x02\x38\x37\xb3\x79\x6e\xde\x53\x07\x2e\xce\x2d\x3c\x03\xd4\x23\x8b\x97\x78\xa1\xb6\x3a\x2e\x35\x55\xed\x5d\xc2\x59\x91\xd9\xe7\xc5\xf1\x5b\x90\x8c\xb7\x2b\x4a\x1e\x1d\x7c\x9d\x9a\x0d\xc4\xc0\xad\xae\xb2\x7b\x47\x35\xaa\x73\xb3\xaa\xb8\x36\x05\x90\xd4\x34\x35\x55\x48\x4a\x10\x35\xe3\x13\x59\x49\x2b\xc9\xb6\xe3\x5b\xc4\x63\x71\xd2\x6e\x9e\xdf\xa2\x8a\x04\xdc\x24\x01\xcd\x97\x73\xd9\x22\xca\xbb\x91\xbd\x83\x81\x9e\xac\x26\x0d\xb8\xa5\x29\xef\x5a\x1a\x6f\xec\x56\xd7\xf0\xe8\x53\x55\xdf\x01\xcd\x2a\xf2\xeb\xe5\xd3\xc1\x7a\xfd\x42\xdf\xf5\x2b\x7f\x6d\x0a\xbf\xe2\x3d\x8a\xf9\x97\x96\x25\x72\x17\x5a\xe1\x75\xf3\x6e\xc9\x44\x21\x46\xa8\x39\x3f\xa9\xc2\xda\xad\x78\x74\x8d\xd7\x8a\x5b\x72\x06\xe0\xf1\xa5\x7b\xe5\x40\xb0\xcd\x93\xf0\xd5\x5d\x78\xc8\xb2\x3a\x5e\xf4\x17\x95\x7d\xd7\x75\x1e\x85\xf5\xe8\x92\x92\x15\xb5\x06\xf4\x56\x17\x16\xad\xaa\xc2\xcf\xcf\x07\xd1\xbf\xfd\xac\xb7\xf8\xb3\xde\x4a\x58\xb5\x5d\x4d\xe3\x31\x86\xe3\xf5\x47\xc2\xf0\x5c\x6f\x69\x8f\xa0\xc9\x82\x82\x8c\x02\x92\x62\x01\xc0\x3e\x85\xc0\xbe\xa9\xdc\x09\xf1\xd1\xbb\xf5\xe6\xa5\x52\x79\xb7\xb2\x55\x01\x20\xe6\x82\x2e\x84\xb7\xde\x9d\x64\x99\x77\x2b\xb6\xc6\x04\x68\xfa\x81\x92\xef\x80\x11\x58\x39\x7e\x7a\xb7\x22\x33\xbc\x5b\xbb\x49\x91\xf5\x82\x00\xdc\x34\x26\x28\xb0\x6b\xfc\x6c\x14\x32\x76\xf7\x1e\x97\xfb\x6e\xdb\x1c\x42\x18\x18\xb9\x10\x19\x79\x63\xfb\x25\x90\xfd\xb3\x77\x51\xbd\xd8\x55\x60\x00\xf2\x66\x0f\xd2\x64\x89\xd2\x84\xcc\xbf\x7d\x6c\x8d\xac\x9e\xa9\x00\xe3\x0b\x51\x2d\x84\x54\xb7\x92\x8f\xbc\xe7\x72\x6c\xe8\x74\xbd\x2b\x16\xb3\x52\x11\x36\x5d\xd4\xed\xe6\x57\x05\x31\xff\x12\xa1\x7a\x0a\xe8\xf9\x56\xb7\xd1\x16\x40\x4d\x26\xa7\x66\x65\xdd\x6a\x71\x07\xd1\x2f\x6e\x55\xac\xfe\x26\x7f\x70\x38\x11\xb5\x3c\x2d\xda\x37\xc7\x6d\x7e\x41\xb6\xd7\x45\x3c\x69\x17\xa8\xd5\xab\x42\xb2\x2d\xdb\x64\x5f\x28\xdf\xd1\xb0\x81\xc4\x01\x9a\x7f\xb0\xe5\x71\x05\x49\x40\xc2\x2a\x61\xf5\x18\xed\x1c\xad\x00\x5a\x04\x75\x14\xf4\xb7\x40\x33\x16\xfb\x0d\xc2\x5f\x2c\xf8\x3c\xf9\x3f\xda\x86\x60\x18\x03\xab\xbb\x96\x34\xe4\x56\xf9\xd5\x30\x01\x10\x11\x54\xe8\x45\xfe\x0e\x6d\x49\x14\xcc\x62\x04\x15\xb7\x6c\x3b\xe0\x03\xd1\x5b\x1c\xe7\xb7\x7e\x71\x9b\x5f\x8b\xea\xd9\x49\xb9\xe0\xc8\xef\x32\x0d\xd1\x46\x23\x22\x82\x65\x5a\x26\xc3\xa2\x10\xc6\xd5\x0d\x44\xa8\x6a\x47\x3b\x79\x41\x87\xa6\x6e\x71\xf4\x2a\x2d\xfd\x10\x02\x24\x9d\xa6\x3a\x69\x99\xdb\x23\x4c\xba\x20\xb2\x1a\xa0\xa5\x2d\x90\x18\x3f\x6c\x08\x65\x3b\x81\x83\x56\xbf\x40\x7c\xfe\x31\xfc\x4c\x86\x57\xfc\x32\x7c\x5f\x91\x6d\xa8\x53\x93\x69\x2b\xdf\xd4\x77\xa8\xad\x7c\x05\xa4\x9e\xc8\x90\x35\x69\xcb\x22\xc6\x2b\xba\xe2\x40\xf9\x24\x9c\xc4\x22\x75\x7a\x76\x7e\x91\x57\x20\x88\xba\x45\xd5\xae\xec\x18\x16\x64\x8f\xd7\x04\xe0\xfa\x30\x40\x30\xc5\xa4\x37\x83\xea\x47\x76\x46\xd9\x30\xeb\x55\x34\x94\x80\x38\x7a\x33\x25\x72\x37\xc8\xbd\xb8\x41\xd1\xce\xfe\x0a\xa5\x03\xad\x5d\x38\x3e\x80\x9a\xd8\x8f\x08\x0a\x6d\x27\xaa\x3d\x54\xf0\x9a\x9c\x92\x6f\x1a\x75\x22\x46\x66\xa8\x3c\x29\x45\xaf\x11\xf9\xd2\xa5\x59\x81\xaa\x5f\x75\x7a\xf3\xd8\x6b\x13\x14\x73\xb1\x1d\xf5\xd5\x2f\x41\x8b\x2c\xdc\x5c\xa1\xea\xd1\x28\xc2\xda\x3b\x90\x05\x32\x44\xa0\x36\xa7\x2a\xf6\x31\x08\xfb\xa4\xd4\x2f\xc1\xda\x5b\x60\x59\x85\xde\x46\xf4\xc1\xba\xa0\x9d\xad\x4e\xd4\x29\xd1\x20\x3f\x33\x39\x43\xe6\x7e\xe8\x39\x0f\xe1\xe1\x0c\x42\xd6\xac\x53\x91\x82\x56\x4b\x02\xad\x3d\x52\xce\x13\xc1\xc8\xb4\xd0\x2b\xe6\x13\x1f\xa6\x9d\x9d\xd0\xf2\xd4\xd1\x72\x51\xb6\x73\x82\xb4\xc6\x3d\x99\xbe\xe7\x11\x0e\x00\x38\x8b\x2e\xec\x74\x89\x8d\x5a\x0d\x2f\xba\xc2\x5e\x6c\x3c\x29\x36\x9c\xd5\x72\x31\x57\xe7\xf9\x55\x68\x51\x25\x1c\x09\x1c\x43\x1b\x31\x3b\x66\xc1\xea\x38\xa4\x51\x31\x23\x6f\xe4\xaf\xde\x44\x52\x09\xd2\x42\xcc\x53\x7f\x04\x9c\x55\xfb\xab\x3b\x99\x45\xd2\x93\x2c\x5f\xc4\xb7\xd5\x62\x1d\x0f\xf0\xb7\x33\xeb\x76\x26\xe1\xea\x46\x7d\x7b\xd2\x66\x5f\xda\x3f\xde\xb4\xe1\xcf\x24\x43\x93\x64\x3e\xa7\xf2\x37\xa9\x86\x06\xc3\x64\xd1\x44\xfb\x09\x35\x09\x0c\x00\x59\xe7\xd9\xc3\x32\xf3\x96\x16\x72\xb2\x39\x9d\xbb\x2a\x69\x76\xa6\x86\x30\xf1\x4b\x19\x94\xd9\x63\x0f\x90\xdb\x81\x99\xa1\xef\x4f\x3c\x05\x32\x0d\x17\x13\x50\x30\x6a\x8b\x52\xa9\x5a\x65\x16\x54\xcd\xce\x3c\x6e\xf0\x12\xfe\xaa\xce\xce\xc5\x54\x1b\xb4\xfa\xd5\x7b\xe0\xca\x96\x58\xc8\x9f\x4a\x50\x50\x1d\x1d\xfd\xf4\x6e\x8a\xa0\xfd\x66\x7e\x10\x22\xa2\xad\x68\xb8\x26\x3f\xac\x43\x35\xa6\x72\xf6\xe2\x92\xf5\xa7\x28\x7c\xeb\xb1\xfa\x75\xe4\xd2\xda\xb3\x68\x0d\x77\xbc\x1e\x36\x1e\xea\xab\x5f\x73\x84\xa0\xf1\x5e\x25\x20\x25\xcb\xca\x7c\x16\x99\x05\xaa\x7e\x99\xa9\x13\x89\x1c\x26\x71\xfe\x0f\x26\x6e\x7e\xe7\xce\x9a\x02\x9d\x13\x7a\xdd\x43\xf0\xfe\xb8\x17\xef\x3f\x70\xa5\x7b\x07\x9e\x06\xe5\x81\xdb\x2d\x82\xc8\xf4\x51\x10\xde\x1a\x02\x54\x17\x9f\x6a\x11\x98\x25\xeb\xcf\x65\x4c\x76\xb1\x47\xba\xfa\xbb\xfc\xdd\x62\xa5\x2a\xb0\x40\x8d\x3d\x53\x88\x33\xb5\xf7\xa1\xbb\xab\xcd\x16\xab\xa9\xd4\xf1\x8e\xec\x56\x09\x47\x3e\x90\xea\x99\x74\xf7\xae\x3b\xa8\x9c\xfa\x12\x55\x45\xec\x5e\xee\x7e\xc4\xc4\x2f\x55\x95\xd9\xd7\x65\x32\x1e\xcd\xe2\x4e\x96\x53\x02\xf6\x30\x75\x2b\x24\x3f\x83\xb4\xa8\xce\x02\x44\x40\xaf\xec\x33\xef\xbc\xf5\x03\xe0\x3b\xf7\x05\x90\xa7\x37\xf5\xdb\xe5\xe9\x39\xd3\xbe\x4f\xa2\x41\x8d\x9a\xd2\x9f\xce\x39\xba\xa5\xc7\xc4\x06\x0c\x15\xed\x45\xa0\x51\x28\xaf\xd1\x94\xee\xc1\x0d\x60\x63\xf9\x3d\xdc\x70\xf7\xcc\x62\x69\x24\xf3\x22\xa8\xd0\x94\x0e\x2f\x85\x08\x8f\x4d\xee\x1e\x22\x27\xb6\xf7\x10\x7b\xc5\x08\x51\xcd\xd2\xe8\xe8\xee\xda\xf1\xdf\x43\x0a\xd6\x9a\x88\x4f\x45\x7d\xb9\x05\xc2\x62\x94\xc2\x5c\x4e\x42\xb2\xbb\xa0\xc0\xad\xe1\xfd\x90\xbf\x05\xe2\x1b\x69\x3d\xe9\x29\x8b\xa3\x1e\xc4\x5e\xf4\x2a\x82\x57\x50\x5e\x96\x16\xb5\x44\x95\xe8\xf6\xf3\x14\x8c\x2c\xd2\x99\xaa\xd8\xcc\x71\x8e\x41\x5d\xe6\xd8\x3b\x04\x62\x86\x93\xcb\x68\x42\x82\x4d\xb3\x3b\x2b\x9d\xb1\xbd\x51\x66\x67\x9f\x12\xdc\x39\x38\x10\xf7\xd9\x8f\x0a\x06\x53\x30\x9c\xaa\xb3\xe2\x5a\x9f\x4c\x81\xa0\x05\x41\x16\xa9\xe2\x2e\xd6\x24\xbe\x0a\x14\x90\x2d\x0e\x08\xa1\x57\x9f\x96\x96\x81\x75\xa8\x92\xde\xe3\xe1\xda\xc9\x41\x0d\x62\xb4\x1c\x6a\x0e\x61\x2f\x65\x25\xd5\x51\x74\x4b\x98\x88\x7d\x1e\x96\x1f\x11\xcb\xab\x59\x22\x96\x52\x86\x8b\xeb\x69\x12\xdc\xf3\x02\x44\x51\xd0\x37\x81\x3c\x6a\x8a\x03\xf0\xba\x22\x7d\x70\xec\x7a\x8c\x21\xf7\x81\xfb\x67\x00\xa3\x38\xb6\xd0\x1b\xd4\x46\xb6\x8a\x00\xc3\x9c\x32\x59\x56\xbf\xb5\xdd\x4d\x1d\x09\xc9\xcf\x44\x86\x79\x9b\xb5\x6b\xd0\x2d\x16\x7c\x6a\x00\x9c\x4d\x1b\x87\xfe\xe8\x49\x3a\x35\x59\xc4\xfd\xea\xf3\xbf\x3a\x7e\x76\x3e\xc5\xa2\xeb\x0c\x0b\x78\x8c\x96\xa5\xf4\x03\x6b\x66\x58\xb0\xd1\xe4\xe7\xd8\x5a\x44\xc3\xa8\x57\x01\x4e\xe6\x39\x58\xe8\x2b\xb8\x70\xa4\x7c\x66\xde\x42\x5e\x3d\x7b\x6f\xc3\xe3\xb9\xd2\xea\xd5\xa7\x37\x06\x9b\x3f\x83\x6f\x20\x09\xfa\xfa\x1c\xab\xe6\xa7\xad\x96\x9f\x7d\x69\xfb\xec\x4b\xdb\x27\x97\x09\xcf\xbe\x92\x7b\x3e\x65\x12\x21\xb1\x8c\x0e\x92\xa7\x7a\x44\x21\x3e\x1c\xea\x34\xa3\x8a\x3a\xde\xc4\x49\x23\x53\x83\x6d\x02\x13\x6a\xe9\x3c\x46\x93\x24\xd5\xfb\x6c\x90\xe6\xda\x3f\xd8\x08\x04\x54\x6f\xc0\x0c\xf1\x8a\xab\xcf\xc6\x54\x2c\xf8\xea\xe3\x5d\x32\x29\x06\x7c\x6e\x73\xe3\x51\x52\xad\x29\xf1\xfa\xc7\x94\xf1\xa5\x44\x70\x82\xc9\xbd\x10\xe7\xe9\xe9\x7e\x99\x43\x0f\x0b\x43\x7d\x6c\xa3\x00\xa2\x32\xd0\x55\x34\x16\xa8\x20\xc7\xc6\xb7\x8f\x61\x1f\xd3\x3b\x23\x5e\x48\x70\x48\x7e\x18\x24\xdf\xe3\x97\x3c\xb7\x56\x05\xfe\x6d\x3a\xcc\x28\xa6\xf6\xdf\x36\xc6\xb1\x18\xa6\x74\x7f\xe5\x5a\x28\x5c\xab\x4a\x65\x98\xac\x2b\x41\x4f\x5f\x2a\x47\x4a\xb1\xa6\xe8\xc5\x9d\x25\x02\x8e\xc6\xd8\x7f\x8c\x51\x3a\x89\x98\x97\x79\xe5\x47\x72\xd4\x9e\x63\x0b\x29\x4c\xc8\x77\xc8\xd8\x54\xf8\x51\xf5\x35\x84\xc0\x1c\x64\x0e\x16\xdb\x8d\x33\xeb\xa8\x7d\x70\x6c\x98\x5e\x47\xeb\x48\x27\xb1\xbd\x20\xaa\xd7\x85\x19\x31\xe7\x69\x91\x3b\x00\xbb\x7b\x80\x6b\xab\xc5\xca\xe8\xd9\xf0\xf3\x8f\xe1\xc7\x0c\xf3\xa3\xf9\x81\x90\x15\xc4\x6c\xaa\xc0\xd4\xb4\x69\xce\xae\x87\x45\x02\x34\x39\xbb\x2b\xcb\x08\xa0\xd8\x2c\x70\x77\x27\xee\x45\xcf\x51\x53\x9d\x29\x3e\x92\x9c\x39\x8f\xbb\xce\xb0\x83\x18\x7a\x97\xe8\xab\x80\x46\x94\x46\x2d\xc5\xc1\x9c\x03\x28\xae\x28\x40\xd5\xda\xfd\x99\xe8\x43\xdd\xae\x88\x3d\x85\xea\xab\x0c\x4c\x8b\xee\x27\xef\xe1\xe6\x4e\x0b\x0c\x62\x36\x14\x3e\xb0\x9b\xb5\x87\x3f\x79\xa3\x46\x0c\xd5\x4d\x4b\x41\xd3\xf8\x4c\x1a\x4d\xbd\xdc\x7d\xcd\x87\xc2\x9c\x56\x67\x41\x09\x41\x94\xfc\xd7\x6e\xc9\x1e\x0e\xbc\xb5\x14\x54\x7c\x0c\x98\x73\x0b\x3c\xa0\x4e\x0b\xc7\x9d\x1b\xdb\xa2\xec\xe1\x6f\x73\x5a\x0f\x82\x0d\x5f\xd2\xf2\x4e\xb5\xd2\xca\x83\xe0\x45\x41\xd4\x80\x19\x53\xf1\x3d\xe3\x23\xde\x8e\x14\x81\x1c\x71\xca\x8b\x8e\xe0\x40\xb5\x83\xd9\x05\xe8\xc9\xc9\x3a\xa6\x4c\x4a\xb0\xe0\xc6\xa9\xbd\x9f\x58\x40\x76\x82\xa1\xd8\x61\xa9\xdf\x73\x0c\xa7\xd9\x16\xa8\x53\x94\x1d\xec\x18\xd5\xf7\xf4\xe5\x67\x9a\x3d\x02\x03\xb4\x91\x65\x4a\xf7\x1e\x5a\x35\xd4\xcb\x34\xcd\xd7\x3b\xf5\xfa\xc7\xae\x25\xe3\x6b\x07\x4c\x49\x3f\x8c\x3e\xdf\x46\xda\xd4\x32\x3d\xea\x46\x60\x8f\xd7\x63\x77\xe8\x1c\x6b\x6f\xf1\x6b\x5b\x45\x69\x35\x2b\x3d\x42\xad\x14\x2e\xc8\x81\xa2\x02\x5a\x83\x87\x57\x55\xb1\xe4\xdd\x27\xd3\xe9\xd1\xc3\xdf\x95\x80\x45\x33\x07\xbf\x39\x61\x5d\xe7\x33\xe9\xb4\xf2\x8f\x95\x56\xfe\x6b\x03\x79\x4a\x38\xeb\xff\xe3\x4e\xf3\x8c\xf8\xdb\x07\xcd\x33\xbd\x1a\x06\x80\xcb\x3e\xfd\x59\xf8\x3f\x5a\x97\x6a\x7c\x99\x4e\xfa\xf0\x18\x1e\x8d\x81\x37\xb1\xe3\x4b\xdc\x45\x48\xcc\xe2\x14\xc6\x42\x82\x38\x53\x7b\xc7\xb7\x4e\x86\x60\xe4\xb5\xfc\x97\x56\x07\xe4\xf3\x45\x3c\x12\x17\x3e\xbe\xab\x5f\x9a\xba\xa2\x4f\x79\xe7\x77\x4c\x46\x06\x41\x91\x28\xff\xea\xd4\xa1\xc3\xa0\x73\x1d\x4e\xeb\x5c\x8b\x53\xb6\x33\x74\x9f\x72\x9b\x60\x5a\xbe\x09\x78\x03\x17\x67\x77\xfb\x55\x2b\x53\xaf\x93\xe9\xec\xfb\x9c\x84\x18\x41\xd2\x19\x6a\x9e\xf4\x6b\x9e\x4d\xa0\x22\xb4\xfa\x55\x99\x54\xa2\x96\x22\x0c\x8f\x40\x9f\xd9\x06\x47\xe8\xc4\x53\x68\x3f\xce\x26\xc0\x30\xd0\x13\xbc\xa1\x84\x45\xe9\x30\x2d\xe1\x52\x0d\xf7\x12\x16\x35\x88\x54\xd4\x20\xa9\xee\xb1\x65\x83\xcc\xdd\xca\x2b\x67\x40\xdd\x1f\x6e\x3a\xa4\xb1\xa0\x4a\x3a\x94\xa7\x96\xc6\x72\x46\x09\x94\x4c\x5e\x1d\x36\x60\xf2\xea\x48\x66\x6d\x2a\x82\x46\x3e\x90\xf2\x66\x65\x24\x9f\x14\x0d\x52\x1d\x95\x5d\x09\x89\x60\x7e\x87\x75\xf2\x09\x14\x1d\x08\xfc\x7c\x19\xa8\x4f\xef\xeb\x1f\xae\xc8\xd0\x9b\x16\x17\xa4\x66\xc7\x57\x09\xb7\x9c\xda\x12\xf5\x18\x63\xd6\xc9\x47\xc9\x15\xb7\x13\x4c\x1b\x56\xa4\x72\x1f\xae\x54\xad\x67\x06\xe7\xf2\x9f\xf5\xf6\x6f\xfa\x33\xdb\x61\xc6\x1f\xae\xf3\xad\x13\xca\xa7\x75\xf4\xa6\xa4\x7a\x4f\x7f\xf4\x1d\x9a\xc3\xe4\xf5\x77\x48\xeb\xe5\xfc\xee\xe8\x0e\xad\xba\x07\xc5\x7d\x11\xa8\x51\xd0\x2d\x83\x23\xf4\x4a\x05\x48\xcd\x3e\x7d\x3f\x62\x9e\x46\x1f\x52\x23\x46\xd3\x46\x82\x60\x86\x11\xf3\x65\xd9\x13\x5b\x5f\xdf\x1f\x39\xce\x33\x0e\x25\xe9\x02\xf8\xf3\x6d\xf4\x31\xa3\x59\x9a\x88\x68\x1c\xa3\x15\x28\xc1\x28\x4f\x2b\x58\xc1\x58\x0a\x1f\xb6\x94\x15\x60\x91\x02\x63\x49\xa8\x6a\x74\x06\x6d\x86\xd3\xd6\x35\x60\x2e\x03\xd1\x1c\x1e\x80\x61\x91\x5a\x2b\xee\xd5\xa7\x6e\x47\xd1\x19\x8c\x00\xcd\xb0\x32\x76\xf3\x88\xe9\xa7\xc2\xd0\x5d\xfa\xd1\xd6\x94\x30\x8b\xeb\xa4\xbf\x4e\x3b\x41\x24\xcd\xd6\x39\xed\xbb\x4d\x7b\xee\x84\xbd\xeb\x04\x69\x4e\x34\x67\xc8\xd8\x5d\x41\x0f\x4a\x4f\xe5\x0e\x5e\xd1\xf0\x07\x42\xc4\xf1\xfc\x31\x86\xc3\xa3\xd9\xc8\x72\xb4\x91\xf9\x8d\x91\x68\xca\xa2\x99\xbd\x09\xd8\xc9\x9a\x95\xe2\x4c\x7e\x2d\x70\x8c\xb8\x26\x05\xd8\x75\xd3\xc3\xcf\x98\xe6\xd3\xf4\xac\x60\x43\x19\x97\xa4\x7c\xd1\x05\x79\xf1\xb1\x57\x70\x62\x4d\x77\xf1\x7f\x5b\xe8\x65\x5b\xf4\x6c\x4d\x99\xa9\x08\x38\xcd\x64\xca\xac\x12\x5e\xfc\xf6\x20\xc3\x6b\x1e\x87\x2c\x8f\xca\xee\xf8\xbd\xa9\xc4\x00\x10\x75\xf3\x65\x57\xa8\x07\x77\x02\xf1\xf4\xc1\x20\xa6\x8e\xce\xc8\xde\x11\x96\xfe\xca\x5a\x31\x16\x0e\x40\x7c\xa8\x3c\x11\xf9\x1c\x5e\xe3\x5e\x6e\x77\x34\x19\xe0\x1a\xad\x60\xd5\xfa\x0a\x39\xf7\x98\x66\x7c\xfa\xcc\x02\x70\xd4\xd1\x52\x02\xbf\xdc\x95\x28\xe0\xae\x03\xd5\x72\x91\x97\x0b\x70\x3f\xce\x97\xca\x85\x61\x41\x1e\xbe\x78\xab\x04\xea\xc6\x4b\x2c\xc0\x2c\xb6\xd3\x4d\x27\x6d\x20\x46\x31\x9f\x4e\x77\xd9\xcf\x71\xfb\xe4\x1c\xd7\x4f\x70\xda\x72\x2e\x4e\x96\x15\x38\x61\x39\x17\x76\x91\x67\x3f\xe4\xc7\xe1\xcb\xe8\xc2\x48\xaa\x1d\xdb\xe9\x06\x0a\x5f\x76\xb4\x24\x01\xd9\xfa\xc9\x36\x49\xd4\x98\xc3\x87\x33\xba\x73\x29\xe1\x36\x7b\x5e\xc2\x4d\x7d\xd4\xf3\x9c\x21\x5c\xbb\xe3\x5e\x83\x8c\xd6\x6c\x30\xc9\xda\x06\xd5\x91\xc9\xd5\x16\x38\xa4\xe1\x0b\x25\xb3\x90\x29\xab\x94\x56\x1f\x4a\x55\xa5\xf7\x4f\xa7\x2f\xb5\x1b\x9a\x9b\xf2\x9a\xcd\x5f\x66\xfe\x1a\x3b\x8d\x64\xb7\x80\x49\xc8\x19\x96\xde\x9d\x11\x33\x5e\x43\x7c\x75\x27\x50\xfa\x43\x7c\xb5\x61\xb5\xff\x48\x23\x54\x4a\xb5\x56\x60\xc6\xda\xf6\x4f\x95\x6a\x2a\x68\x1a\x87\x40\xf4\x61\xe8\x0c\x65\xf2\xad\xa8\x1f\xd3\xd1\xe0\x19\x20\xcd\xd9\x2b\x34\x1f\x9f\xf8\x70\x26\x76\x9a\x82\x8d\x80\x73\xd7\x26\x7b\xee\x59\x2f\x69\x9c\x3b\x6e\xa6\x23\xf4\x1c\xc7\x2e\x14\x89\x62\x48\xd3\x9a\x6d\x58\x3a\x73\xe9\xa5\xff\xdf\x19\xc7\xf9\xff\x4c\x39\xce\x79\xce\x71\x1e\xce\x12\x25\x68\xec\x5b\x81\x9c\xca\xe9\x50\x2e\x35\x02\x7d\xd1\xf6\x70\xcc\x5b\x6e\xe7\x34\xd7\x38\x8f\xb0\x4c\x39\x0a\x6a\x64\xe9\x11\xce\x7f\x48\xf5\x38\x54\x3f\xc7\x20\xeb\x39\x09\x90\x15\xda\x31\x9d\x1a\x0c\x99\x24\x86\xd5\xba\xda\x9c\x37\x4f\x41\xb2\x2d\x1c\x63\xe6\x70\xfe\x6d\xe3\x18\xee\xb4\x8a\x2d\xea\x79\xe4\xa1\x09\xe2\xde\x22\xe8\xe0\x74\x1e\x8c\x5d\xa6\x69\x4a\x74\x4e\xdb\xef\x82\x2f\xaa\x75\x5c\x94\x1b\x42\xb9\x05\xe7\xdc\x53\x55\xad\x45\xd7\xa2\x87\xc5\x2a\xd2\x7a\x64\xa2\xd2\x23\xdf\xba\xc4\xec\x09\xb3\x93\xff\x96\x8f\x3d\xe8\xd9\x27\xd6\x20\x15\x65\x2d\x28\xde\xc7\xe0\x4b\x6a\xcc\xa8\x8c\x66\xcc\x48\x7c\xfe\x31\xfc\x98\xe1\xb1\x7d\x79\x34\x75\xf3\x67\xa3\x58\x36\xd6\x69\x89\x69\x75\xcb\x36\x2a\x8a\x50\xbd\xb5\x81\x28\x0a\x34\x9f\xc0\x6e\x88\xca\x64\x4f\x4f\xce\xba\xd0\xe9\xd5\x57\xbf\x54\x67\x6b\x94\xda\x37\xc7\x2b\x0f\x35\x15\x21\x07\xaa\x39\x48\xdd\x8e\xf2\x5d\x37\x48\xe3\x12\xc6\x74\x74\xa2\x98\xdf\xb5\x9f\x32\x92\x5d\xfa\x94\x22\xa5\x7b\xa9\xa9\x46\xfd\x97\xee\x3e\x93\x7a\x7d\x9b\x8f\xc4\x92\x2c\x1d\xb2\x4a\x1b\xd6\x28\xd8\xe9\x27\xa1\x6a\x9e\xb3\xa7\x67\x9d\xe3\x78\xd6\xaf\x18\x8e\xe3\x9c\x6a\x67\x6b\x75\x93\x75\x8f\x25\x72\xa3\xb4\xa7\xd5\x43\x8a\xb2\xa8\x79\x4e\x73\x4e\xae\xfe\x43\xaa\x77\xd9\x7a\xe9\xca\xdd\xc9\x9a\xdf\x63\xc5\xac\x44\x36\x83\x69\x31\xdd\xe5\x11\x18\x1c\x49\x51\xc1\x06\x40\xa3\xfc\x65\xe4\x9c\x5a\x26\x1e\xeb\x99\xc9\x3e\x2d\xa3\x3b\xd9\xbd\x0b\xc3\x09\xaf\x4a\xd4\xd2\xd2\x14\x11\xdb\x7d\xae\x6d\x1f\xbb\xe8\x8d\xdf\xea\x8b\x7b\x58\xa5\x00\x95\x32\x6f\x47\x0d\xe2\x1a\xd4\xe1\x27\x8c\x19\x93\x10\x9c\x14\x37\x15\x7b\x43\x64\x3c\x6f\x06\x65\xde\x20\x2e\x00\x35\x3f\xa9\xa9\x5a\xfa\xa8\x4a\xe0\x07\x9e\xbf\xf8\x59\xf1\x94\xc4\xbf\x5c\x6c\x96\xaa\x97\x1b\x45\x4e\x8c\x1c\x7d\xe1\x38\xe8\xe5\x63\x3e\x46\x71\x82\xf4\xc5\x90\x66\x2b\xf0\x81\x00\xc2\x64\xd7\xce\xd4\x5f\xc1\xf1\xb5\x1b\xa0\x85\x14\xb4\x09\xed\x33\x51\x95\x60\x0c\x82\x3a\x5f\xa6\x81\xe1\x15\xec\x26\xf1\x2b\xc4\xfe\xe2\x40\x08\xbd\xc3\xfc\x9a\x4e\x3d\x5e\x81\x2b\xb2\x57\x38\xbd\x57\x95\x3e\x9f\x1a\xc2\xd7\x02\x9b\xe4\x67\x22\xbf\xb6\xb0\x5e\xdf\x47\x1d\xaf\xef\xa3\x8e\x57\xc6\x9d\xc1\x17\xc6\xea\x2f\x6b\xd4\x98\x2c\xc6\x36\xe0\xcb\xda\xd5\x2b\x8f\xf9\x94\x60\xaf\xea\x30\x36\x37\xb5\x4b\xf7\x1d\x54\x77\xd8\x38\xa0\x0b\x18\x03\xf8\x2b\x37\x5b\xb0\xfc\xca\x1f\x33\x12\xe5\x7b\xb6\xfa\xdf\x25\x3a\x68\xaf\x25\xcb\xaa\xea\x57\x2f\x98\xff\x5a\xcf\xfd\x1b\x71\xc7\xf9\xed\x76\x5f\x37\x77\xb2\x63\x7d\x87\xbc\xb8\xb2\xa2\x72\xbd\xa5\xbe\x22\x3e\x82\x46\xfe\xbf\x6b\xb1\x88\x0a\x4c\x54\x83\xaa\xd9\xed\xc7\xe6\x2b\x1f\xce\x52\x67\xf2\xb1\xe4\x2e\x3e\x8d\xe4\x23\xb6\x85\xf3\x16\xa1\xca\xd8\xc5\x13\xb2\xeb\xf7\xb0\xc5\xd9\x27\xa4\xf9\x32\xf0\xfd\xf4\x09\x9c\xe7\xd6\xc7\xcf\xba\xb9\xa7\x7c\xa2\x7c\x0a\x9e\x28\x6d\x0e\x0b\xae\xcd\x15\x50\xe1\x59\x7e\xd6\x2d\xdf\x82\x7c\x65\x92\xba\xe5\x2c\x0d\x78\xcb\x15\x5a\xbf\x3f\xeb\xd6\x68\x95\x4c\x23\xd6\xed\x82\x3f\xe1\x67\x0d\xee\x86\x79\x58\x70\x37\xe9\x46\x01\x22\xf8\xef\x28\xba\x00\x72\x1c\x73\x14\x92\x56\x6d\x94\xda\x3b\xaa\x86\x3e\xb3\x8d\x2c\x2a\x1e\x20\x74\xc0\xfb\xef\x09\x21\x2d\xdb\x15\x69\x77\xc9\x78\x61\x4f\x14\x96\xae\x19\x96\x86\x30\x94\x45\xa6\x20\xe5\xb7\xba\x06\xb7\x7a\x2a\x79\xd9\xf4\x31\xa8\x33\x1a\xf1\xf7\x85\x77\x9f\x82\x7b\xe0\xa3\xef\x4a\x01\xfb\x6b\x4b\xa1\xf8\x80\x5e\xd1\xb8\x4b\xd7\x69\x3c\x30\xec\x14\x6d\xe2\xf4\x3a\xa8\xf4\xc1\x35\x38\x7b\x8d\x2a\x30\xa7\xf0\xa4\x07\x48\x77\xc4\x6d\x26\xaa\x4c\x04\x91\x7a\xab\x04\xe3\x42\xe2\x34\xd8\xd7\xc6\x83\xbc\x48\x14\x28\x38\x47\x0c\x8e\x22\x4d\x01\xd4\x40\x9c\xed\x1d\x55\x43\xcc\xe3\xc8\x43\x43\x05\x74\x70\x8d\xe3\x29\x52\x6a\xf5\x1a\x45\x1e\xaf\xb3\x5b\x66\x4a\xe3\xf5\xf9\x72\xf5\xe9\xae\x3e\x93\xab\x0f\x5d\x21\x3a\x3c\xbe\x1c\x48\x63\xa9\x7b\xcd\x41\x1b\x1b\x54\x3c\x9b\xbf\x22\x8e\xfa\xfa\x6b\xf6\xd9\x4a\x96\xa6\x42\x15\x4c\x30\x80\x47\xed\xd2\xa7\xc2\x82\x32\x6b\x46\x02\x37\x84\x35\xb8\xc3\x9d\x8c\xdc\xe1\x1a\xdb\xc1\xe1\x57\x2b\xbe\x83\xef\x9e\x02\x98\xbd\x88\x82\x97\xe2\x06\x34\xad\x82\x73\x8f\xb5\x51\x65\x98\x59\x43\x0f\x36\xd5\x23\x50\x0b\xb9\x57\xcd\x63\xcb\x75\xae\x8c\xc7\x56\xdc\x43\x91\x65\xf3\x11\x18\x0a\xdf\x48\x0b\xca\x93\x21\xf6\xee\x5e\x08\xa1\x68\xcd\x2f\x5a\xe4\xfa\x0a\x17\x20\x2b\x92\x09\x92\x3a\x65\x74\xcf\x65\x0b\xaa\xa1\xe3\x60\x70\xe7\x91\x0b\x41\x75\xd1\x0c\xab\xf6\x19\x02\x4c\xcb\xef\x4e\x41\xa1\x8a\xae\x48\x00\x84\xf2\x31\x4d\xe7\x25\x16\x05\x55\x7f\x9e\xae\x30\xef\xb1\xfd\x02\xe9\x64\x46\x18\x52\xdf\x6b\xde\x55\x21\x87\x09\xc5\x2c\x9c\x9a\x53\x6f\x34\xb5\xe0\x88\x59\x40\xb8\x29\xe8\x19\xfa\xd1\xea\xf0\x31\x5e\x13\xc0\x51\x55\x0c\x19\xa6\xc9\x53\x7f\x41\x35\xcc\x15\x9b\xb4\x55\xe8\x8f\x3e\xee\x0d\x37\x77\x5a\xc4\x6e\xae\xa2\x93\xb9\xe1\xdd\x40\xb8\xdd\x9a\x54\xc7\x1b\x98\x00\x89\x9a\xc1\xeb\x63\x0d\xb7\xb6\xf0\x1c\x39\x2c\x6e\xc9\x2b\xfa\xc5\xc5\xa1\xb0\xf8\x6e\x41\x3c\xe3\x35\x7c\x80\x63\xd3\xdd\x74\x5e\xe8\x09\xcb\xe6\x4e\x46\x52\xaf\xd6\x7b\x83\x79\x0d\xf7\xd8\x20\x2a\xd5\x52\x64\xfa\xc7\xe6\xd3\x15\xc1\xe6\x40\x34\xfe\x31\x9f\xed\xeb\xe4\x4d\x50\x5a\x19\x05\xa9\x9e\xfb\xe8\xf7\x8d\xae\x03\x7f\xbe\xcd\xe8\xbe\xe4\x60\x95\x89\xc4\x6e\xa8\x9a\xde\xee\xea\x40\x93\xa6\x15\xab\x91\x9d\xe8\x1e\xb2\xd7\x5b\x9e\x38\xe4\x12\xf5\x52\x05\x92\x43\x04\x62\x24\x5b\x9e\x1a\xd8\x13\xe6\xd1\x06\x8e\x25\x5b\x93\x5e\x72\xe5\x57\xc5\xc2\x09\x56\x56\x68\x6b\x58\x4a\xb6\xc0\x61\xab\x3a\x7e\xad\xcb\xef\x17\x84\x82\x72\x1e\x33\x10\xfa\x98\x39\x31\x22\x5b\x6d\x83\x96\x2a\xdb\xde\x52\x59\x96\x97\x4b\xe8\xd8\x58\x9c\x5f\x4c\x46\xae\x18\xd8\x5e\x96\x4b\x99\x49\xac\x61\x75\x63\xc4\x20\x3e\x81\x0e\xf6\x58\xeb\x1a\x9e\x2e\x00\x70\x38\x00\x6f\xbd\x35\xcb\x68\x2c\x29\x94\x90\x57\x10\x7a\x1b\x2b\xac\xd0\xba\x76\x56\xad\xf5\x4a\xac\x06\x5e\xbb\x55\x1f\x57\x66\x09\xae\x45\xe1\xad\x2d\x2e\x97\x4a\xed\x44\xdc\x70\x38\x1b\xfa\x78\xeb\xf1\xec\x19\xca\xa8\x1d\xfe\x0c\x7c\x70\x45\xc4\x32\xec\x0e\x6a\x66\x48\xb2\xfe\x87\x4e\xc5\x87\xf6\xab\xf5\xe4\x18\x05\x64\x1e\x81\x81\x95\x94\x8c\x14\xa8\xc2\xb9\xeb\x29\x69\x23\x05\xf4\x76\x89\xea\x15\x5b\x41\x37\x08\xad\xb3\x86\x78\xc3\xae\x46\xfc\xd2\xca\x93\x5e\xa8\x1c\xa5\xef\xf7\x1f\xbb\x29\x2e\xb3\xfe\x71\x69\xfc\xe7\x3f\x17\xc8\x27\x1a\x95\xe2\x7e\x0f\x4b\x8b\xe8\x26\xee\xf7\xb0\x76\x0f\x04\xea\xb4\x37\xdc\xef\xb1\x75\x83\xbe\x9e\x34\x6c\x0b\x4a\xa5\xfb\xb8\x73\xbf\x37\x1d\xa7\x05\xd9\xf4\x9c\xc4\x8c\xcd\x6e\xdf\xb0\x51\x2a\xce\xb6\x2c\xc4\xe9\xe2\x92\x52\xea\xa4\xc7\xf0\xe1\x76\xf4\xfa\xda\x59\x8c\x79\xd5\x43\x56\xe7\xa8\xa1\x82\x7a\x7c\x1e\xba\x50\x07\x18\x71\x20\xd5\xe3\x00\xf2\x6e\x00\x91\x11\x84\x2c\x24\xdb\x85\xf0\x08\x95\x5f\x70\x60\x36\x74\x0e\xb4\x77\xd8\xab\xdd\xa3\xdf\x68\x13\x38\x3a\xb2\xc7\xb4\x83\x2c\x04\xd8\x72\x00\xb1\xb9\x3d\xe2\xb5\xe8\x7a\x57\x30\x5a\xfc\x23\x0d\xd9\x5f\xa0\x78\x7c\x06\x04\x55\x7b\x06\x5c\x44\x65\x8c\xfb\x89\x94\xc2\x9e\xb5\xf6\x46\x30\x6c\xd7\xad\x84\xb5\x03\x26\xa2\x3f\x1b\x04\xd2\x47\xa3\x89\xf3\x08\xe8\x80\x61\xfd\x83\x7c\x48\x4c\xab\x16\x7f\x48\x07\xbc\x84\x64\x7a\x55\xe6\xd8\x2a\xe5\x7f\x0d\xcf\xa7\x2c\xa0\xc2\xb3\xa2\xe7\x15\x1d\x69\x4c\xb6\x75\x14\xa2\xeb\xdc\xcf\x3a\x81\xec\x8f\xd3\x96\x09\x89\x5e\x6a\x42\x71\x08\x17\xd4\xdd\xb2\xbc\xe3\xa4\xd1\x2b\xad\xe2\xa2\x6e\x2c\x80\xbe\x11\x17\xa2\x67\xf5\x8a\xbe\xea\x4b\x4c\x83\xcc\x1b\x13\x2b\xa8\xc8\x9a\x50\x44\x7a\x22\xbc\xed\x9b\x9a\xc1\xd6\xb2\x21\xb6\x17\x7b\x37\xcc\x14\x76\x9f\xc8\x64\x8b\x99\xbc\xdb\xb1\x87\x21\x5d\x16\xf2\x89\x95\x7c\x17\x77\x30\x0f\x77\x32\xe1\x5f\xed\xda\x04\x18\x2d\xe5\xf7\x35\x86\x51\xce\x55\x3b\xc0\xc3\x5f\x97\x90\x29\x5d\xf3\xe6\xd3\xc7\x4f\xb6\x17\x57\x6e\xbc\xba\xab\x1a\x6b\x78\xfa\x9a\x27\x1b\x42\xc6\x2f\x6a\x32\xfc\x37\x70\x6c\x74\xe6\x37\x6b\xef\x1e\xd6\xde\x35\x61\x23\x6e\x9b\xca\x6f\x0f\xa9\xf1\x8d\x0e\xe0\xb0\xd6\xa6\x6e\x67\xd7\xcc\xd0\xdc\x30\x5d\xa9\x94\xa6\x6a\x9e\x00\x32\x9d\x07\x66\x42\xfb\x2f\xda\xac\x78\x9a\x70\xef\x10\x23\x73\x72\x85\x5f\xce\x57\xb1\x5f\x27\x5f\x5e\xaf\x0d\x89\xec\x2d\x42\x7a\xdc\x50\x53\xd3\x83\x14\xc6\xf9\xf4\xa0\x9b\x87\xd5\x17\xc8\x80\x10\x25\xe3\x8b\xe1\x23\x49\x33\x1e\x99\x9c\x38\x45\x48\x3b\xc7\xcf\xa4\x01\x26\x5f\x20\xb4\x66\x0d\x29\x4b\x3b\x80\xcb\x7c\x97\xc5\x54\xd4\xe2\x4a\xf9\x74\x0d\x96\x71\x5c\x08\x2d\xf1\x22\x2f\x1e\x93\xe1\x8c\x2c\xce\x7e\xba\x84\x1b\x30\x7e\xa0\xae\xe5\x3e\x9e\x65\x99\x59\x74\x0b\x52\x90\x39\x39\x0c\x45\x59\x8f\x9a\x01\xac\x52\xe5\x43\x27\xdb\xe0\x92\x4f\x35\x4f\x86\x45\xcd\x0a\xc7\x45\x32\x15\x13\x95\x99\x9f\x4b\xdd\x74\x92\x9f\xcf\x87\xc7\x15\xd7\x00\x91\xc7\xd4\x7b\x63\x4c\xcb\x6f\xd6\x19\xab\x28\x87\x3f\xaa\xa2\x8d\xed\xc3\x46\x50\xce\x20\x3b\x18\x3c\xdc\xba\xce\x97\x45\x50\x98\x5d\xba\x72\xce\x06\xdb\xb5\xe2\xce\x69\x82\x4e\xc6\x4b\x67\x01\xe7\xc3\x3c\x93\x8e\x8d\x39\x7f\x6c\x92\xe1\x6a\x83\x50\xd6\x4d\x4a\x66\x4c\x1f\x14\x75\x4b\x82\x7b\x0f\x6f\x1a\xbd\x97\x3f\x90\x82\xe8\x96\xc6\x6c\x50\x16\x6d\x00\xad\xb4\x48\x98\x9d\xa7\xba\xe4\x65\x69\xb4\x97\xd7\xdc\xa1\x9a\xee\xce\x54\xf4\x7e\x40\xb5\x83\x6e\x49\x27\x2e\x8a\x4f\xb5\x91\x54\x1d\x79\x40\xce\x71\x04\x79\x25\xb0\x58\x66\x59\x3d\x71\xe9\x78\xc4\x5c\x35\xab\x12\x44\x05\x09\xca\x98\xbe\x1d\x5c\xd3\xe8\x1c\x50\xd6\xce\x52\x89\x19\x52\xc9\xd5\xe6\x8e\xc7\x99\xf9\xd5\x87\xe6\x1d\xca\xa4\xee\xc0\x7e\xaf\x82\xdc\x01\xa2\x51\x33\x53\x55\x2f\xac\x69\x0e\xdd\xba\x39\x2e\xa9\x25\x12\x63\x09\xb6\xf8\xa5\x2e\x8e\x1c\x38\x49\xad\xb2\x0e\x20\xcf\x1c\xd0\xfe\x3d\xdd\xd4\x87\xce\x84\x5e\x7e\x20\x6d\x2b\xa4\xd8\x01\x09\x9e\xb4\x73\xe9\x80\x39\x4e\xac\xd3\x6d\x12\xe6\xac\x0c\x67\x25\xbc\x81\xfa\xa6\x6d\x28\x23\x30\x1a\xbd\xd1\x69\xe1\xb6\x6d\x28\x1b\x76\x2e\xca\x86\x15\x6c\x09\x8f\x31\x83\x29\x01\x7d\x4e\x91\x99\x6b\x49\xab\x54\xaf\x02\x87\xf5\xee\xf8\x8e\x27\x14\xe3\xcf\x84\xb2\x9c\xf6\x58\x70\xca\xc8\xcd\x53\xe2\x42\xd0\xb0\x25\x1c\x4e\xb7\x2c\x9b\xd3\xf9\x87\x10\x19\x2b\x9b\x13\x62\x95\xa5\x2b\xb0\x59\xc8\xe9\xd6\x97\x4b\xe4\xfb\x31\x11\xa3\xb3\x39\xdd\xfd\x3e\x3d\xc7\x30\x9a\xb9\x2e\x44\xe8\x67\x96\x24\xb1\x28\xf7\x13\x35\x19\xce\xcf\x9b\x86\x46\x4f\xc6\xa3\x78\x3f\x27\x91\x74\x1f\x6c\xa8\xd1\x6d\xc7\x98\x7f\xbf\x4c\xa1\x61\x61\xa7\xd4\xa2\xe5\x8a\xe0\xee\xec\x38\xbc\x2b\xdd\xda\x01\xb9\xbc\x6a\x8f\x44\xdf\x58\xee\x3a\x93\xdb\x92\x6f\x23\xfe\x42\xbe\x34\xbf\x81\xd5\x9f\xb2\xbb\xee\x44\x0b\xf2\x74\x65\xba\x9b\xd3\xc9\x6e\xc4\x04\x97\xf9\xb2\xe2\x44\x67\xda\x3b\x4f\xbf\xdf\xe2\xa5\x38\x2f\x53\xc6\x9f\x96\x86\x73\xda\x25\x0e\xa7\x7b\xe5\x5f\x8d\xe0\x8b\x5c\x65\x02\x24\xc7\x58\x34\x3a\xd7\x8e\x70\xde\xf4\xca\xb9\x22\x4d\xcb\xad\x95\xd5\xa7\x6e\x47\x5a\xe2\x17\x01\x4b\x0b\x3e\xec\x2c\xfa\x05\x12\x41\x65\xed\xa8\xb7\xd9\x73\xf1\x47\x9d\x88\x92\xe6\x42\x14\x5a\xdd\xf8\x92\xc2\x3f\x26\x16\xf4\xe2\xcb\x31\x2d\x05\x8c\x9e\x2c\x43\xd4\x36\xfd\x09\x9c\x4a\x10\x68\xeb\x06\x31\x1d\x66\x0e\x8d\xc9\x0f\xea\x68\x88\x24\x0a\x97\x73\x4a\xfa\x09\x6a\x58\x36\x5d\x3f\xfb\x0b\x7b\xc0\xd1\x0a\x20\x0c\xe2\x4d\x94\x2d\xff\x22\x99\x42\xa2\xb3\xe3\xf7\x96\x63\x63\x2c\xc6\x0d\xf7\x4e\x30\xc2\xd3\x3b\x77\xa1\xf6\x7b\xb0\x7c\x07\xee\x1e\xee\x10\xc4\x4d\xb8\xeb\xcd\x1d\x12\x79\x9d\xa6\x1d\xa6\xa3\xd9\x81\x07\xe9\xdd\x8f\xb4\x4c\x17\x62\xba\xc6\xd4\x52\x4c\xc7\x62\x03\xaa\x17\x57\x4e\xfd\xb5\x18\xa8\xf4\xd5\xa3\x98\x46\x99\x88\xe1\x51\xfa\xea\xcf\x45\x67\xbe\x36\x43\x8d\xe9\x62\xc9\xd0\x18\xe6\x75\xc4\xa3\x4e\x6f\x46\xa8\x11\x52\xb3\xde\xc0\xc8\xd9\xa9\x4c\x70\xcb\x44\x8c\x44\x08\xf5\x95\x7d\xc7\x16\xb4\xa6\x69\x6f\x2b\xea\xf0\x1b\x58\x1d\xd7\xcd\xe3\xa9\x07\x46\xb7\x21\x04\xbf\xd3\x06\x8b\x1b\x5d\x46\x1f\x07\x4f\x93\x79\xac\xb0\xfa\xaf\x68\x28\xb3\x6c\x60\x7d\xe7\xa4\x70\xd4\x09\xbe\x7a\x0a\x67\x17\xa0\x48\x3c\x49\x26\xa4\x86\xaf\xdd\xdf\xe2\x8f\x1e\xff\xe2\xa7\xec\x2e\x7e\xf8\x00\x31\x6e\x1a\xdd\x49\xbe\xdb\x44\xb2\x2b\x03\xcb\x70\x35\x98\xb8\x87\x83\x34\xe5\x34\x8f\xf4\x3d\x29\x51\x77\x55\x83\xe6\xcb\xea\x30\x21\x84\x3a\x06\xe5\xd3\x3f\x12\xda\x92\xdf\x27\x36\x45\x46\x5a\x9e\x82\x2a\xee\x3c\x27\x8d\xbc\x86\x99\x7a\x34\x3f\x93\xbf\xbe\x0f\x25\x3e\x2d\x5b\xef\xec\x94\x18\x66\xab\xf5\xb7\x80\x43\xff\x2e\x83\xcf\x16\x46\x3f\xea\xd3\xc3\x3d\x46\x9d\x24\x39\x0c\x3b\x9f\x74\xa5\x64\xbd\xf2\x2f\xad\xe1\xc8\x4a\x31\xce\x96\x85\xfe\x22\xfb\x45\x07\xd0\x79\xbf\x4d\x14\x06\xc5\x4e\xff\x6d\x21\x86\x1b\xcf\xe9\xc3\xc9\x6b\x14\xfd\x11\xce\x3f\x1a\xbd\x5b\xfc\xaf\x2e\x17\x76\xe4\xe7\x17\x94\x9d\x5f\x38\xef\xee\xc5\x7a\x00\xe0\x3b\x6c\x13\x52\x5d\xbe\xef\xb7\x60\xef\xe1\xf1\x1f\x8a\xf6\xbe\xa7\x16\xff\xc9\xe4\x7b\x2b\x69\x8a\xfe\x23\x97\x91\xc7\x20\xe0\xcb\xa3\x38\xb6\x56\x80\xa9\x32\x81\x56\x2b\xfd\x26\xa1\x10\xe0\x29\xd7\x3d\x6a\x61\x6c\xa3\x91\xa2\x9b\x36\x6d\x67\x81\x9a\x7a\xce\x0d\x1f\xbb\x2a\x28\xb0\xec\xd9\xf2\x8d\x04\x1a\xdd\x06\xce\xcd\x44\x90\x0e\x27\xc8\xbb\x52\xbd\x0e\x3e\x4a\x58\x64\x64\xc9\xc3\x63\x2a\x40\x6d\x78\x9b\x7f\x8d\x0a\xbc\xe1\xda\x57\x38\xb7\x9c\xfc\xc9\x36\xbf\xe5\x34\x5f\x55\x57\x0d\x0d\x20\xa7\xdc\xfe\x63\x68\x25\xb0\x1d\xac\x03\x5b\xc1\x51\xc6\xb9\x55\x69\x2b\x40\xbf\xca\x97\x10\x50\xdb\x4b\x88\x7c\xec\x68\x79\x34\xe8\xfa\x45\x7e\xbe\x8d\x2d\xea\x61\x3f\x90\xbc\x4e\xa7\xc5\x27\x5d\x01\x08\x11\xa7\xae\x27\x24\x99\xb1\x3a\xb3\x38\x4d\x5f\x49\x30\x67\x04\x4f\x35\x28\xa4\x7b\x9c\x88\x87\xff\xea\xec\x43\x42\x9e\x5a\xe7\x1e\xd2\x16\x6e\x61\xd8\xae\xfe\x51\xdc\xbf\xa4\x05\x53\x3d\x84\x85\x4e\x78\xd4\x0d\xe8\x58\x9a\xfe\x8c\x88\xfe\xc1\x2c\xb5\x5b\xfb\xd3\xd2\x30\x12\xac\x1d\xfb\x9f\xc6\x39\xc9\x13\x9f\x69\xb2\xf0\x1c\x83\x53\xcc\xfd\x80\xfa\x8c\x79\x1d\xcd\x40\x88\x81\x2f\xc7\x3d\xe7\x73\xb7\xcd\x2c\x41\x16\x81\xdd\xcd\xf5\x9e\x54\x21\x1c\xf3\xf9\xdd\x5d\x23\xca\xbb\x57\x91\x30\x1d\x77\x6b\xe1\xd4\x45\x4b\xbe\xf9\x55\xd9\x4e\x80\xb8\x68\x3d\xdf\x62\x78\x4c\x2d\x26\x1f\xd3\xf0\x9f\x6d\x8e\x09\x30\xc2\x03\x19\xc3\x20\x1f\xae\xd7\x35\x12\x9f\xc9\x0f\xd0\x66\x18\xc6\xbb\xa2\x70\x1e\x6e\x1e\x83\x49\x15\x83\x63\x14\x3c\xf4\x2e\x07\x50\x1d\xd6\xfb\x80\xa5\xf0\xcb\x89\x5e\x3b\x0d\xe7\xe1\x6d\xad\x02\x7e\x41\x63\x08\x26\x39\x1a\x1c\xe8\x32\x8c\x7a\x2c\x8d\xb0\x6d\x6c\xd5\xc9\x65\xc6\xdd\x9d\x85\x95\x8f\x51\x88\xa4\xd4\x80\x87\xa9\x02\xb4\x68\x80\xcc\x62\x39\xfd\xea\x67\x97\xa2\x71\xf9\x8e\xcd\x93\xe9\xc4\x80\xa4\x45\xf6\x6b\xc4\xc7\xfb\x1b\x6c\x01\x9c\xc7\xe6\x93\xc1\x50\xc2\x54\xe3\x8f\xf0\x35\xcb\x39\xa2\x1b\x63\x15\x88\xa2\xe8\x32\xe4\xdd\x39\xd5\x19\xd0\xda\x4a\x66\x26\x4c\x4a\x4d\x39\x9c\x2d\xc5\x79\xea\xcb\x0f\x9b\xaa\x8f\xa7\x2e\xc0\xa7\x1f\x05\x4c\x2a\x9b\x35\x0b\xac\x38\xab\x76\x47\xf1\x6e\x35\x98\xf3\x5d\x01\x04\xa7\xa9\x1f\x9d\xfa\x8a\xd2\xd0\xed\x91\x9e\xb4\xfe\x87\xb5\xfa\xbf\xdc\x4e\x81\xe8\xe2\xee\x68\xf3\x74\x0f\xd4\x14\x6a\xb3\x2e\x73\x3c\x52\xe9\x78\x2a\x89\xa6\x1d\xfa\xdf\xe6\xe2\x74\x1b\x49\x34\x78\x0c\x47\x30\xf2\x12\x64\xe3\xce\xc4\xf4\xbc\x24\x9c\x32\xb2\x5a\x6b\x26\x9e\x46\x60\x99\x7e\x06\x35\xfa\x8e\xb7\xd2\x23\xe6\xc5\xcf\x31\x06\xe5\x89\xce\x83\x77\x69\x0c\x7e\xf9\x02\x9d\x39\xc4\x7c\xeb\x55\x4c\x30\x03\x6f\xba\xa3\x0a\x64\x41\xb4\x43\x5b\x9a\x20\x2d\x78\x69\x8f\xe7\xbd\x9f\xc5\x0d\x7a\x1c\x55\xa8\xde\x38\x13\x3a\xcf\xd1\xe5\x9f\x7d\x64\x3a\xbd\x0c\x0c\x86\xba\xde\xc7\x7b\x43\xdd\xf4\x63\xa6\xfb\x2d\xda\xe0\x04\xc2\x9b\xfe\x34\x2e\x2a\x95\x87\x51\x8b\xea\xc2\xce\x33\x04\x56\x73\x9b\x6a\xef\x9c\x8d\xb8\x48\x1c\x7d\xc6\x7c\xfa\x52\xa7\x00\x94\xd0\x41\x9d\xb4\x85\x57\x78\x03\x52\x60\x67\xcd\x60\xc4\xf0\xe1\x35\x06\x8a\xb3\x9f\x7e\x9e\x67\x88\xe1\x1f\xcc\xa8\x84\x3d\xc4\xde\x15\x93\xea\x7e\x05\x3c\xd7\xd7\x9a\x77\x86\xbd\x7d\x99\x8d\x7d\x96\x33\x1c\x6e\xaa\xaf\x24\x87\x49\x77\x72\xb8\xbe\xb5\x48\x4a\x9d\xe7\x25\x4c\x15\x8b\xe4\xa8\x9d\xa0\xbf\x0c\xbb\x8f\xf9\xe1\x93\x6a\xc7\x36\xfb\x10\xdb\x97\x07\xd3\x01\x15\xa9\xee\x41\x7c\x7d\x85\x1c\x5f\xdf\x21\xc7\x97\x65\x65\x8e\xda\x07\x9c\x39\xf5\xac\x07\xa4\xd3\x66\x3d\xd5\xd9\x5c\xaf\x0b\x02\x47\xbf\x4d\x46\x97\x3a\xdc\x0c\xae\x97\x82\x77\x3b\xa1\x63\xb9\x57\x70\xd4\xef\x8f\x49\x00\xfa\xc2\x12\x82\x1f\x3a\x98\xda\x5f\xf5\xf1\x1e\xd2\x93\x90\x6c\xd2\x0d\x39\x6b\x64\x24\x47\x59\x55\x9f\xd6\x7f\x28\x75\x96\xe6\xc1\xa8\x5f\x89\x07\x13\x9a\x8d\xaa\xde\x5b\x14\x04\x11\xb6\x06\x35\x76\x83\x57\x16\x09\xf5\x18\xa8\xbb\xb3\xaa\x5a\xc3\x98\xa0\x11\x8f\x7c\x03\x3d\x11\xb2\x4e\xd8\xa6\x62\x1b\x5a\xd1\xff\x6b\xcd\x02\x25\xd5\x43\xcb\xfd\xe1\x9a\x10\xf3\x4e\x4d\xd5\x97\x9c\x44\x16\x23\x6a\x14\x37\xef\xc2\x90\x1c\x26\x73\x76\x8d\x2b\x05\x82\x71\xf4\x0b\x90\xd8\x05\x11\x96\x0e\x7b\xbc\x84\xc8\x43\x5f\x35\xfd\x79\xce\xc1\xfa\xf3\x9c\x4b\xbd\x84\x5b\xd3\x83\x71\x25\x2c\x10\xc1\x3d\x16\x20\xa6\x4c\x85\x86\x85\x45\x6c\x7b\x7d\xb5\xf0\x0a\x8e\x80\xf4\x70\x6a\xbf\x9d\x3d\xb5\xed\x9c\xfb\xfd\xda\xca\xad\x57\xd4\x56\xb4\xe3\x67\x4e\xb4\x78\xd7\xfa\xd0\xe2\x5d\x77\xd7\x05\xf1\x3a\x27\xce\x4d\xbb\xf9\xb1\x99\x85\xa4\xb1\x06\xd0\x06\xa3\xb8\x2a\xd6\xb8\x34\xbd\x0a\x70\xea\x42\xb9\xd5\x5e\x08\x2f\x17\xb9\x63\x34\x37\xbb\xd1\xea\xc4\x23\x5c\x31\x02\x9b\x66\xf9\xf6\x7b\x0f\x8a\x79\xa8\x62\x73\xce\xba\xf4\xb5\x58\xdd\xf8\x0e\x94\x00\x1e\x6d\xc1\x6e\xd4\x02\x06\x85\x57\x71\xfb\x4d\x50\xe9\x97\x1a\x6a\x55\x7e\x30\x40\x17\xd4\xcc\xaf\xdd\x67\xa8\x75\xac\x44\x2a\x12\xd3\xec\xaa\x4f\x2b\x7e\x7a\xc8\x14\x5a\x19\xf3\x99\x97\xfc\x1d\x3e\x7d\xc1\xfd\x72\x51\x7b\xfd\x97\x23\x5d\xc6\x84\x43\x09\xd4\x81\x97\x5f\xf1\x25\x2e\x76\xe2\xff\xea\x0f\x60\x04\xf6\x5b\x2e\x82\xc3\x7d\xea\xb4\x55\x63\x78\x4d\xda\xbc\x3b\x27\x5d\xb3\x5f\xcd\x10\x5b\xf6\x7c\x06\xd7\x49\x6d\x9b\x46\x62\x4f\x05\x84\xb4\x94\x6c\xc4\xd9\xb7\x2b\x5e\x7c\x4d\x85\x3e\xee\x15\xf0\x59\xf9\x9d\x3a\x85\xd7\x60\x7b\x0b\x9c\xd4\x0a\x23\x32\xc6\xf9\x57\x48\xc3\x49\x32\xd3\x71\xd0\xf9\x0a\x5a\xe9\x5e\xd3\x03\xd2\xf0\x0a\x53\x87\x09\x62\x0a\xf8\x1c\x76\xac\x42\xbf\xa6\x27\xc0\x41\x5f\x20\x84\x57\x2e\x8b\x53\xd5\x9b\xda\x81\x25\x56\x19\xe1\x85\x17\xae\xd3\xbd\x5a\x7c\x68\xc5\x24\xd4\xb0\x80\xb3\x69\x77\xc7\x82\xb5\x70\x05\xaa\xb9\x45\xf0\x25\xb1\xc7\x83\x80\xf0\xc6\xd5\x01\x1e\xcd\xbd\x45\xfb\xd3\xf7\x4a\x3e\x1f\x9d\x91\xfd\xf9\x59\xff\x78\x30\x15\xfe\xe3\xa5\x65\xb9\xed\x67\xfd\x13\x6e\xaa\x26\x7c\x52\xf8\x59\x9f\x3f\xeb\xf3\xf1\xb3\x3e\xe3\xcf\xfa\xdc\x7f\xd6\xe7\xf9\xb3\xc6\xf2\xb3\x46\x09\x6e\xff\x59\x4d\x8c\x48\x76\x37\xf9\x20\x31\x99\x52\x74\xf2\xed\x26\xfe\xe4\xdb\xed\x92\xaf\xc4\x29\xdf\x22\x3e\x0e\xdf\x06\xd3\x02\x02\xdb\x37\x50\x20\x09\x20\x2f\xf2\x47\x94\xa1\xb0\x7f\xcb\x8b\x96\x12\xae\xc0\xe5\xe5\x89\xb3\xbc\x4c\xc6\xc0\xa2\xc0\xfa\x93\x43\x5a\x5e\x9e\xbb\xe3\xfd\x46\x40\xf6\x81\x79\x79\xf2\x12\x41\x5e\x9e\x17\x44\x44\x64\xce\x3d\x73\x3f\x1c\x05\xe2\xd3\x94\x3c\x4e\x49\xf3\x22\x5d\xaa\x0b\xbc\xd3\xa2\x94\xc5\xa6\x42\x48\xe8\x9a\x97\xb6\x6b\x9c\x01\xb4\x40\xf3\xba\x72\x3b\x20\xaf\x2b\xa2\xb3\xe2\x38\x3a\x77\x8e\xe8\x79\x66\x85\x0e\x22\xc9\xc2\x0c\x08\x07\xdf\x08\x72\x50\x55\x29\x63\xd5\x9d\xbf\x99\x71\x0b\x79\x45\x2c\x30\xe1\xcb\x83\x61\x67\x7c\xe8\x97\xd8\xf2\x92\x87\x30\xf2\x64\x93\x9a\xef\x77\x90\x0f\xf9\x43\x1e\xb3\xa8\x7c\x5b\x92\x1f\x37\x1c\x9e\xe7\xc7\x02\xd1\x1d\xa2\x6a\xff\x9a\x1f\x6b\x16\x3f\x51\x16\x0f\x6f\x84\x66\x1b\xae\xa2\xe4\xc7\x1d\xbb\x8d\xf9\x71\xa7\x80\x03\x01\xc8\xe0\x47\xdf\x0e\xce\xec\xc2\xa1\x48\xb5\x04\x80\xdb\x47\x7f\x1d\x94\x1f\x0f\xe8\x28\xe3\xe7\xfc\x40\x76\x3e\xa2\x47\x94\x77\xc7\x6f\xa2\x32\xf5\xb6\x4a\x76\x64\x1d\x82\x52\x0c\xd7\x6e\xd0\x2a\xaa\x86\x3e\x5f\x96\x3f\xb4\x7c\x5a\x76\x9c\x90\x7b\xbd\xe6\x47\xcd\xd8\xb3\xcc\x8f\x5a\x32\xdc\xbe\x34\x07\x55\x9c\x40\x7e\xf0\x5d\x13\xde\x25\x64\xd1\x08\xa8\xe9\x18\xab\x20\x30\x28\xff\x91\x22\x92\xa4\xc7\xb5\xb4\x5d\x62\x8b\xe2\x8c\x63\xaa\x98\xa3\xe7\xc5\x95\x1c\xc3\xb2\xe5\xe9\xda\xf3\xac\x71\x19\x79\xba\x86\x4b\x35\x99\x27\x78\x99\xbc\x66\x72\x44\x18\xd1\x15\x55\x78\x19\x18\x50\x8b\x25\x46\x2d\xb0\x18\x2d\xaf\xe3\x78\xa4\x95\x63\xcc\x07\x94\x8b\x5f\xe6\x79\xec\x0a\xec\xec\x1e\x94\xde\x43\xff\x87\x55\x70\x8e\x68\x74\x31\x17\xbb\xc9\x63\x18\x65\x1e\x27\xb6\xcd\x60\x33\x2d\x0a\xa5\x98\x50\xb5\x78\xc2\xbc\xe2\x33\x45\x0f\x69\x96\x94\xee\x38\x30\x01\x77\x84\xbc\xfb\x13\xb2\x21\x04\x8c\xa7\x2b\x9d\x42\x7c\x48\xb0\x55\xef\x81\xfc\xd2\x09\x02\x72\x4b\xa1\x39\x0d\xba\xa0\x18\x4c\x89\x32\xaf\xf7\x40\xe9\xea\x78\xc0\x25\xb4\x54\x4b\x35\x0a\xa6\x9a\x77\x2c\x9f\x3d\xa4\xac\x8a\x17\x47\xc9\xe1\xa3\xa1\x26\x65\x35\x68\xaf\x30\xa9\x4a\x8c\x19\x64\x7a\xc0\xfa\x1f\x5a\xc6\x7d\xae\x9c\xe8\x45\x1a\x79\x94\xb4\x57\x81\x38\x22\xf9\xde\x0a\x04\xb7\xe4\x44\x3f\x7b\xbf\x97\x9a\x64\x6f\xfa\xa0\x4d\x66\x48\x17\x13\x65\x83\x12\xfd\xad\x3d\x14\x15\x55\x4f\x5c\x85\xce\x79\xd3\xfb\xe6\xf4\x36\x47\x24\x16\x0f\xaf\x20\x49\x28\xe7\x5d\xcb\x23\xef\xbf\xbd\x2f\xc9\xfc\xdc\xc0\x99\x50\x40\x61\x67\x2e\xa3\x2b\xaa\x61\x2e\xf7\x02\xf9\x54\x39\x97\x3f\x98\xa2\xe5\x5c\x9e\xde\x1f\xea\xfc\x99\x32\xf5\x58\x19\xc1\x3e\x16\x6a\xc2\x64\x3e\xe7\x72\x04\xbf\xd0\xfd\xc1\x15\x8f\xa0\x7c\xd2\xd6\x19\x34\xe0\xb3\x7a\x26\x55\xd0\xa1\x00\x37\x09\x89\xa8\xf5\xcb\x04\x14\x1d\x4a\xb8\xdb\x04\xb3\xc3\xe1\x83\xd1\xe0\x70\xb5\x82\xa4\xa9\x3f\x37\xb0\x0e\x17\xc4\xaa\x8f\x3f\x46\x50\xbe\xc9\xcf\xe5\x8f\x04\x54\x76\x7c\xb8\x52\x55\x7e\xb7\xa2\xb0\x41\x96\x5d\x99\xce\xe4\xb2\x6b\x1b\x2d\x09\x1c\x37\x72\xb1\xf7\x60\xb9\x48\x5c\x0a\xdc\xd1\x06\x3b\x3b\x99\xe3\x19\x23\x60\x23\xb2\x1a\xbc\x54\xb6\x01\x1a\x41\x39\xe9\x8d\xc6\xd3\xee\xe8\x68\xb8\xda\xf0\x4f\x8e\xc3\x08\xa0\xdf\xcc\x23\x2a\xfa\x78\xcb\x28\x64\x73\x67\x9f\x95\xb9\x1d\x9e\x79\xea\x09\x05\x19\x73\x9e\xd6\xeb\x50\x4e\x3d\x54\xb1\x28\x86\xbc\xc1\x93\x29\xe0\xa9\x3f\x1e\xcc\x0c\x74\x1c\x37\xe5\xaa\x3a\x55\xc7\x93\xda\x23\x0f\xb1\xb8\x6b\x6e\x0e\x1f\x94\x69\xbb\x45\xff\xd0\x6b\x2a\x20\x36\xdd\xc0\xcc\x63\x3f\x02\xd0\xb4\x8c\xae\xa6\x6e\x58\xc0\x13\x23\x42\x40\xe0\xb7\x2b\x30\x9b\x1e\xa6\xba\xb9\xdd\xe8\xb0\xaa\x87\x63\x55\x26\xc4\x48\x44\xbb\x4d\x82\x9c\x72\x5b\xf0\xe9\xf1\x59\xa4\xda\x7b\x22\xf4\x91\x8d\x93\xb1\xf6\xd8\xf8\x95\x76\x74\x29\xcc\x0a\xb4\x67\x6f\x0f\x93\x90\x23\x90\xad\xbc\x3d\xb6\x9e\x49\x0d\xc3\x69\x3b\xf0\x39\x64\xf2\x2b\x08\xb3\xb5\x56\xc2\x92\x5b\xa4\x06\xfb\xbb\x56\xcc\x59\xc9\xad\x1b\xb2\x58\x9b\x26\xf2\xe3\xd4\xee\x27\xb0\x05\xbf\xf8\x59\x70\x5f\x2e\xbf\x3c\x27\x6b\x2f\xe5\x0f\xa0\x00\x6e\x7f\x79\x14\x41\x95\x1d\xd7\xef\x6a\x31\xfd\x55\xd9\x6c\x3c\x84\xe3\x59\xb4\x7c\x25\xbd\xbf\xdd\x92\x2d\x07\xf3\x6f\xa2\x6c\xa6\xfc\x9b\x64\x0a\x65\xe6\x69\xe1\x30\x41\x40\x8b\x6b\x71\x77\xda\x54\x0d\x3e\xa8\xcd\xbf\x69\x73\x4d\x01\x8e\x22\xd7\xee\x4b\x0f\x2f\x51\x08\x85\x00\x8e\x5f\xbf\xa9\xc8\xe4\xa7\x9b\x9f\x47\x6e\xf4\xfc\xac\x3a\x71\x16\x58\xf2\x93\xce\xce\x5f\x4e\x0d\x7e\x53\x75\xaa\x55\xb7\x92\x7f\x89\x82\x46\x96\x02\xd8\x14\xa8\x27\xb5\x60\x85\x04\x24\x93\xcf\xd4\xc3\xac\xad\xd0\xf6\xaf\x2b\x23\xce\xbf\x0e\x83\xe9\x2f\x73\xec\x74\x37\xe6\x23\x4b\xef\x3d\x6e\xe5\xe4\xb7\x3e\xab\xcc\xb2\xaa\xc8\x17\x06\xf8\x4b\xbc\x17\x35\xa2\xb3\xe7\xfc\xc8\x56\x19\x47\xfd\x59\xcb\xcf\x5a\xdc\xed\x26\x2d\xa5\x98\x64\xcd\xe2\x6e\xb4\x50\xdc\xe2\xbc\x0c\x4e\xfa\xc0\x06\x0a\x49\x74\xb6\xc5\xf9\x87\x67\x5f\x5e\xb0\xb5\xc6\x12\x91\xaf\xf7\xaa\x16\xaa\xc1\x7c\xbc\xd7\xd3\x1c\x00\x71\x20\xc3\x59\x6d\x71\x0f\x07\x67\x9c\x6c\x8a\x1a\xb5\xba\x15\xf7\x50\xb9\x01\xc5\x3d\x38\x5f\x2a\xfa\x04\xb3\xb8\x47\x56\x1f\x31\x5f\x87\xa2\x81\x09\x52\x2b\x5c\xba\x00\x51\x44\x09\x60\x02\xe3\x78\xc0\x92\xb3\x5a\x35\x5f\x72\x42\x67\x56\xdc\xa3\xe0\xc5\x56\x71\x8f\xd3\xfd\x9a\x8a\xf2\x17\xa8\x69\xdc\xea\xe6\x1c\x10\x23\x1c\x12\xbf\xea\x07\x00\x46\x24\xc1\x2a\x2f\xcf\xf6\xab\x44\xbd\x07\x1f\x55\x8b\x95\x53\x90\x56\x43\x81\xea\xf6\xe9\xf9\xd5\xe4\xa0\x54\x58\x26\x36\x8b\x26\x3a\xe9\xaf\xcd\x96\x89\x6c\x82\xa7\x54\xb7\x42\xe6\xac\x06\x87\x83\x56\x1e\x0c\x85\xa6\x3b\x96\x76\xc5\xed\xe7\x96\x51\x68\x07\x7d\x38\xd0\x9c\x0b\x24\xdf\x99\xda\x53\x68\x72\xf1\x88\x7a\x3d\x10\x62\x00\x2d\xc0\x17\x66\xa3\xc5\xfd\xf6\x2d\x90\xe2\x7e\xf9\x7a\x0b\xa0\x50\xf5\x49\xe6\xec\x82\x30\xbd\x07\x50\xbb\x25\xac\x4c\xca\xaf\x57\x85\x6e\xb4\xb4\x7e\x9f\x29\xdc\x69\xa0\x55\xfd\x77\x08\x45\x2c\xee\x57\x27\x1d\xc5\xfd\x9e\x9b\x7b\x29\xaa\xc5\x5c\x57\x88\x02\x2c\x2c\x89\x4b\x4b\xf6\xda\x38\x7c\x17\x77\xa9\x3d\x8e\xbc\x05\x91\xf4\x6e\x9c\x1e\x95\x2e\x15\x0e\x28\x6b\x7e\x41\xf4\x9e\x7c\x6f\xd9\x29\x8d\xb8\x79\xb7\xcf\x4e\xf7\x30\x20\x57\xd1\x40\x7d\x00\x12\x8a\x3d\x4f\xf1\x26\x81\x7f\x2d\x90\xd2\x53\x3c\x73\xc5\x73\xb9\x59\x64\x49\x56\x7c\x00\x2f\xf2\x22\xb9\x49\xdd\x93\x73\x05\x7b\xf6\x83\x97\x3e\xe6\x8d\xc0\x07\xc1\x4e\x59\x67\x0a\xbb\x36\x38\x33\x94\x70\xc3\x47\x7b\x92\xc0\x41\xb8\x84\x3b\x27\x06\x02\x6e\x58\x13\x08\xa2\x95\x7b\xe5\x7a\x41\xd0\x94\x9a\x70\xaf\x07\xda\x50\xb8\x57\x2e\xce\x0a\xa6\x7f\xf2\x85\xe8\xb4\xa2\x9b\xdf\xa2\x32\x12\x21\x46\xdb\x4a\x10\xac\xaf\xf1\x4a\x48\xcf\x51\x9f\x40\xd8\xa4\xa1\xe8\x5b\xbe\x12\x0e\xe3\xf8\x54\xc2\x71\x68\x54\x8f\x43\xbd\x3d\x74\x72\x59\xc2\xcb\x6b\x90\x2f\x1f\x3b\x52\x85\x0d\x34\x7c\x3e\x32\x7f\x29\xf9\xc1\x4c\xe5\x1b\xf5\x82\x35\x64\xc9\xba\x49\x2f\x40\x63\x90\x77\xbf\x3a\xea\xf1\x25\xb8\xa8\x30\x40\x88\x19\xef\x41\x4a\x96\x79\x73\xc9\xf9\xb0\xf2\x40\xfb\xcb\xc7\x5d\xaf\x0c\x95\x7c\x30\xa3\xf3\xa1\x52\x0a\x81\xe8\x85\xf6\x21\xd9\x12\x96\x79\xb9\x5e\x54\x26\x30\x1f\xe7\x58\x8e\x0b\x45\xd6\xd0\x82\x10\xb1\x83\x52\x55\x4b\x3e\xb7\x27\x34\x4e\x55\xec\x2d\x47\x21\x6f\xfd\xe8\x00\x4f\x7e\x7b\x54\xb5\x9a\xcf\x13\x98\x92\x5b\x97\x01\xa8\xc7\xc0\x45\x87\xc8\x92\x7f\xcf\xa0\x5d\xb4\x40\xb5\xd4\xb8\x6f\x25\x2a\x23\xdd\x58\xa5\x9b\x56\x69\xa8\x12\xab\xf6\x38\x2b\xbb\x85\x16\x56\x7e\x31\x01\x11\xa0\x23\x24\x5e\xb5\x94\xb6\x73\xaa\xa1\x80\xbe\xec\xf7\x40\xb7\xbb\x56\xca\xb6\x6b\x5c\xda\x8e\xd7\x7a\x45\x45\x32\x88\xca\xea\xd5\x76\x59\x96\x02\xa5\x27\x3b\xbd\x96\x9e\x36\xae\x0b\xee\xd9\xd4\xd0\xaf\xb7\xc3\xb3\xb0\x30\x8b\x2e\x17\xbc\xbf\x64\x5d\x2e\xdf\xb5\xa1\xfb\xbd\x6e\xa5\x21\x02\xb8\x48\x50\x2e\xbb\x8a\x5f\x2e\xf5\xf7\xca\x47\xa8\x9b\x5f\x58\xc8\x17\x2e\x88\x0b\x30\x8e\x7b\x86\xae\x9f\xf5\xfc\x59\xeb\xcf\x5a\xd7\x9f\x55\x85\xa1\xb6\x9f\xb5\x49\xa8\x4d\xf7\x27\x9a\x72\xf0\x6d\xba\xb2\x68\xfa\xa4\x49\x32\x3d\x56\x59\xee\x34\xee\x17\x5a\xee\xb7\x5b\xf0\xb0\x78\x1b\x67\xf0\xed\xd6\xdf\x28\xb6\x5b\x4e\x18\x79\x65\x4e\xdc\x16\x57\xf9\xc5\xc8\x0a\x3e\x3e\x32\x15\x86\x1b\xa8\xd4\x10\xef\x24\x1b\xdb\xf2\xa4\xb8\x52\x01\x1c\x45\x1a\x77\x11\xdb\xf2\x64\x4b\x6f\xcb\x13\x7d\x43\x5b\x9e\x9c\x1f\xb4\xe5\xf9\x0b\x49\x45\x02\x36\xcf\x00\x9f\xf0\x11\xb0\x06\x6b\xf2\xc0\x4c\x24\xf7\x16\xdb\x52\x71\xdc\xdc\x96\x4a\xb1\x9c\x4d\xbc\x91\xfa\xdf\x56\x08\xb3\x6d\xab\x8f\x5c\x36\x4b\x1d\x43\x12\xc4\x10\x62\xe6\x98\x6b\x80\x59\x40\xc4\x47\x75\x63\x84\x9e\x86\xeb\xb1\xcc\x6f\xc8\x15\x5f\xd5\xa5\x4c\x9a\xda\xfd\x0e\x77\xdc\xe0\x6b\x0f\xf5\xeb\x81\xb7\x41\xed\x81\xc6\xdb\x02\x33\x40\x94\x9b\x2c\xd9\x9b\xf4\x27\xed\x29\x3e\xca\x8c\xa0\x3d\xb9\xb5\xd7\x9e\xcf\x4d\xf4\xe2\x82\x8f\x5d\x9b\x6d\x71\xa1\x7c\xe8\xf6\x25\xb6\x51\x28\x54\x2a\x01\xc9\xc3\x3c\xe0\x1b\x99\xed\xd6\x4b\xb5\x18\xcf\x17\x2f\x06\xb6\xae\x65\x2c\xd9\xed\x58\xa1\x45\x14\xa4\x4c\x46\xda\x7e\xe3\x26\x41\xdb\x6f\x77\x99\xb7\xd9\xe1\x79\xdb\x6f\x6c\x4e\x6d\xd7\x39\x66\xdb\x6f\xbf\x8e\xc7\x4e\x6d\x87\x48\x9e\xb6\xff\xe3\x04\xa9\xdc\xf7\x67\x3e\xee\x00\x12\xe6\x2e\xcb\x5d\xdd\x6e\x6b\xfb\xc1\x7d\xcf\xc6\xd3\xd9\xb6\x5b\x37\xd9\x26\x71\xd6\x6d\x57\x89\x61\x0d\xbb\x42\x0d\x73\x88\x96\x56\xf7\xca\x20\xb1\xa0\x84\xa2\x31\x34\x68\xeb\x07\xdc\x69\x6b\xf4\xe1\xe1\xb0\x76\x6c\x49\x2b\x44\x7a\x6c\xac\xb2\x29\xf8\x5f\xc7\x85\x73\xe3\x71\x55\x4b\x61\xe8\xb0\x14\x13\x7a\x92\x96\x38\x37\x14\xf5\xa9\x1a\xea\x22\x65\x7e\x51\xe9\xb0\x09\xd4\x90\x15\xa2\x3d\x76\xa6\x01\x4d\x48\xe0\x44\xd4\xcd\x48\xbb\x33\xa7\x94\x3a\x4f\x3c\x15\x02\xcc\x7f\xfc\x9f\x96\x20\xef\x5f\xed\x25\x94\x41\xd6\x37\x81\x0a\x0e\xa9\x94\xa4\x95\xeb\x4a\xcb\xf4\xee\xc0\xa6\x51\xc3\xa0\x01\xc0\xa1\xb2\xe5\x5a\xcc\x07\xf2\x99\x68\x83\xc1\x55\xd3\x3d\x97\x46\x7d\xe4\x09\xe7\x90\xed\x60\x62\x0e\x3b\xe3\x6e\x1c\xd7\x44\x79\xab\x42\xeb\xd1\xbf\xd5\xaf\x38\xf1\x41\x24\xd5\x9d\xda\xd6\xa1\x42\xac\xee\x81\xd5\x72\x4e\x2b\xd8\xce\xb7\xe3\x10\x5a\xd6\xcf\x6d\xb0\xa9\x9c\xef\x98\x36\x4e\xe8\x5b\x71\xb1\xed\x8a\xb0\x87\xda\xf4\xc6\x48\xe7\xc7\xd7\x0a\xe6\xa9\xad\xa8\x3b\xbd\x8b\xd5\x28\xe2\xbb\xf1\x8a\x72\x2b\x3b\xd8\x65\xb4\x22\x99\x58\x18\x30\x1e\x95\x36\x0c\x4e\xad\x7c\xc2\xcf\xda\xce\x27\x3e\x56\x9b\xe1\xe2\xac\xec\x89\xcf\xaa\x95\xfe\xac\x7a\x23\x57\x4f\x92\xdb\x59\x37\xef\x0e\x80\xe1\x92\x55\xff\xac\x98\x9a\xb6\xb3\x62\x33\xaf\x9d\xf5\x50\x5a\xb7\xbd\xda\x59\x9b\x38\xc5\xae\x78\x9b\xee\xba\xb5\x3a\xce\x25\xc1\x21\xb8\x35\xca\xef\xa4\x8a\x69\x73\x7b\xc1\x8b\x97\xaf\x97\x78\x2a\x05\x76\xa1\xc6\xbf\x1c\xce\x84\x5f\x2e\xad\x2f\xf7\xb3\xfe\x62\x8f\xf5\xd7\xc5\x5d\xbe\xe5\xce\x6f\x6f\xa9\x24\xc4\x4c\x27\x59\xa2\x22\xfe\xbf\xf5\x67\xc5\x70\x79\xe9\x00\x75\x91\x45\xc9\xe5\xe5\x0f\x2b\x18\x2e\x2f\x7f\x56\xf4\xad\x97\xe7\xb0\x70\x79\x4e\x21\x25\x5e\x57\x32\x3e\x3d\x82\xb0\x64\x02\x90\x10\x09\xaa\x02\x49\x93\x02\xb5\x9d\x55\xe9\xcc\x02\x40\x4d\xde\xd9\x9b\x70\x60\xd4\xbd\x2b\x39\xf5\x10\x67\xf7\x57\x72\x7c\x9a\x7f\x25\xf8\x8e\x36\x72\x9d\x6e\xc9\x0d\x8c\x9f\xae\xd3\xad\xae\x3f\x4c\xba\x4e\x97\xc8\xd8\xc9\x29\x11\xc1\x40\xf8\x3a\xc1\x01\x87\xba\x37\xc7\x5d\x97\xeb\x5c\x8a\x53\x9b\x4b\x51\x36\x21\x17\x6f\x4e\x5d\x40\xe5\x41\x53\x7f\x82\x3d\x0d\xf0\xbd\xdf\xe1\xbd\xf0\xc6\x16\xf9\x71\x8e\x30\x3b\xaf\xe1\xeb\xec\xdc\xa9\xae\x33\xba\xa8\xc0\xbf\x15\x64\xf5\x7c\xf7\x29\x2b\xc7\x9e\x4e\x64\xa3\xaa\xc6\x79\xef\x3e\x1d\xae\xf8\x96\x0c\x57\x94\xea\x79\xf8\xc3\x8c\x37\xf7\xe8\xa8\xeb\xf9\x7d\x42\x4c\xa6\x3d\x42\x05\xd2\x50\xc0\x6a\x88\x28\x79\x55\x35\x2a\x47\x71\x1a\xf1\xa3\x64\x32\xa3\xb9\xce\xb2\x5d\x75\x53\xaf\xab\x8f\xbe\xf3\xad\x1a\x24\xa2\x57\xb7\xcb\x6c\x59\xa0\x95\x2f\x5f\x2f\x72\x0c\x82\xad\xc6\x58\xd4\x70\x2e\x32\x13\xfd\xfc\xac\x9f\xf0\x78\xf8\xea\xc2\xcf\xfa\xc9\x3f\xfe\xc7\xbb\x1f\x19\x6a\x3c\xf6\xcf\xf0\x45\x03\xf0\xee\x11\x3d\xbf\x5c\x78\x00\x56\x2a\xa8\xc7\xde\x3d\x8a\x68\x47\xee\x40\xff\x78\x97\xd0\x40\xbc\x13\x7f\x8a\x5b\x36\x31\x2d\xb7\x7c\x13\x05\xab\x05\xa8\x6d\x17\xf5\x1e\x1d\xe8\x7b\x8b\x3f\x58\x29\xc2\x21\xb0\x9a\x44\x99\x4c\x88\x1a\x34\x42\x25\x62\x9f\xc6\xbb\xb2\x87\x7e\xb3\x49\x28\x69\x65\x90\x00\x5e\xa8\xe8\x96\x9d\x60\xf5\x97\x7c\xa3\x04\x60\x6b\x5f\x40\x6c\x30\x29\xde\x2d\x1b\x80\x5a\x3d\xb7\x2c\xa9\x2c\x75\xe3\xd7\x27\xbc\x6b\x07\xee\x31\xa9\x1b\x57\x38\x0a\x67\x6d\xfa\x52\x37\x66\x89\x00\x2c\x2d\x00\x53\x53\x27\x07\x72\xbd\xd4\xed\x6f\x73\x4f\xf5\x1c\x12\xda\x81\xce\x0d\x8b\x5b\xc5\x21\x99\x76\x75\xaa\x89\x39\xa2\x21\x64\xd2\xaf\x7b\x43\x09\x0f\x2a\x96\x03\xf0\xf2\xec\xc7\x83\x82\x23\xbe\x98\xd7\x50\xe8\x1b\x2e\x07\xab\x29\xa3\x7f\xc2\xa8\xfa\x91\xf7\x4a\x3c\x14\x32\xab\xd9\xa1\x7b\xd7\xf3\xfb\xbc\x1e\xd9\x76\x32\xbc\xc3\x6a\x1b\x8b\x9a\x4b\x14\xc9\x4f\x75\xd0\x7e\xbc\x7b\x79\x7c\x4e\x5b\x0a\xfa\x1b\x0f\xae\xa1\x56\x0f\xf5\xfa\xf1\xb7\x16\xf5\x76\x23\x21\x38\x17\x99\x3e\xba\x0c\x7f\x6b\xf6\xa0\xd2\x2f\x3f\x7e\x91\xca\x8c\x51\xc9\x2f\xe0\xfe\xc4\x81\xd6\x2f\xcb\x76\xf1\xd1\xbe\x5f\x96\x88\x0f\x5a\xbf\x81\x22\xd5\x40\xb1\xac\xa5\xbe\x08\x69\xde\x4a\x2b\xab\xe6\x89\x2a\xd7\xa0\xd8\x54\x27\x12\x66\x25\x24\xc3\xeb\x05\x2f\x15\x9d\x54\x51\x39\x17\x4f\x7a\x93\x69\xaf\x5f\x36\x59\x9f\x49\x3e\x08\x8a\xaa\x22\x8d\x50\x59\x7e\xcb\xe6\x5f\x78\xd8\xef\x97\x2d\xac\x89\x6a\xb2\xe7\xf6\x24\x64\x12\xab\x30\xac\x04\x6a\xd6\x8a\xea\x64\x7c\x90\xaa\x2d\x83\x1d\x9f\x82\x63\x03\x62\xf2\xb7\xcc\x0e\x17\xc8\x1e\x4e\x08\xa1\xdd\x98\xc0\x57\x28\xf0\x3c\xba\x50\xa0\xec\x07\x33\x39\x3a\x89\xee\xe0\xcf\xe7\x97\x18\x0e\xa9\x9d\x54\x8b\x02\xe4\x40\x0c\x07\x0b\x40\xd9\xec\x01\x34\xaa\x27\x03\xcd\x90\xc6\xe7\x97\x1c\xf1\xb1\x6c\xb7\x5c\xa6\x1d\xf2\x91\xe3\xf9\xd2\x44\x9e\x13\x41\x57\x29\xef\x43\x3b\x30\x36\x84\xdd\xf8\xd3\x35\xe1\x3f\x6b\x4b\x3e\x0f\xbf\x04\x7f\x12\x82\xa7\x85\xa0\xd3\xa1\x29\x2f\x59\x99\xb5\xf9\x85\x13\x52\x51\x65\x1a\xea\x17\xf4\x47\x4c\x6c\x71\x78\x10\xe6\x97\xd2\x7e\xfc\x72\x56\x77\x4a\x00\x64\x0b\xe7\x17\x70\x28\xf0\x8b\x74\x2c\x9a\x39\xd2\xed\x4b\x86\xd6\x7c\x8b\xac\x48\x35\x2f\xb9\xc8\xd0\x02\x88\xe3\x16\x41\x5a\xee\x35\xfb\xf4\xb9\x76\xea\xd9\x94\xc1\x83\xf3\x51\xa1\x26\x99\x8f\x74\x84\xe0\xf3\xe1\x64\x18\xaf\xb4\x41\x89\x01\x40\x81\xc1\x90\xe7\x2c\x50\xc9\x0b\x63\x71\xba\xb2\x10\xd4\x6c\x81\x7c\x32\xec\x97\xbc\xba\xa5\x5e\x91\x25\x5f\x4b\xde\x3d\x6b\x12\x98\xcb\xa1\xb4\x14\xd9\xf6\xb0\x5f\x34\xab\x24\x57\xda\xee\x71\x28\x4e\xe7\xa4\xbe\x71\x1d\x18\x8d\x9d\xf8\x34\x34\xec\xd2\xa6\xcc\x72\xfd\xf2\xf1\x92\x93\xeb\x8f\x5f\x1d\x9d\xad\xb8\x3e\xf3\xe3\xd7\x35\xcb\x47\x74\x7c\xfc\xf5\x41\xba\xb3\x95\x96\x71\x69\xc7\xff\x60\x2f\x53\x3e\x37\x14\x2c\xf6\x7f\xfc\xaa\x7c\x54\x00\x1e\x3f\x7e\xdd\x7e\x7c\x97\x08\x20\x48\x27\xf2\x1e\x6c\xd0\xe4\x2b\x8b\x7e\x3f\x09\xc0\x24\x56\x3d\x78\x19\xee\x57\xef\x51\xd7\x40\xeb\x66\x55\xa6\x76\x54\x02\xf7\x4e\x06\xf1\x71\x93\xa5\xa0\x92\xb7\x48\x71\x10\x5d\x03\xf9\x38\xf8\x55\xfe\x6d\xc1\xc7\xf5\xb8\xb6\x65\xf0\x29\x22\xe5\xbd\x02\xfa\xab\xc8\xc2\x55\x72\x10\x88\x5a\x5b\x48\x76\x37\xaa\x1d\xbb\x60\x6e\xf1\x55\x46\x24\x1f\xb1\xc3\xee\x7d\xa4\x90\x66\xef\x23\x76\x0c\xbd\x8f\x1c\xe2\xbc\x6e\x26\xfb\xfb\x8f\xbf\x77\xe1\xcb\x84\x45\x54\xbf\x54\x55\x3a\x6d\x77\xf0\x8c\x42\x62\xee\xfa\xca\x8d\x40\x37\x9b\x3a\x31\xd9\xd7\xa7\xcf\x42\xec\x21\xb9\xe5\xea\xb0\x0e\x6f\xfb\x13\x02\x25\xec\xe2\x90\x91\x9f\x41\xa6\x35\x40\x25\xdb\x33\xa0\x2e\x96\x78\xa6\x18\xce\x08\x23\x2c\x6e\x70\xc4\x51\xfa\x22\x08\x66\x3d\x3c\x42\x0f\x28\x3c\xa0\x15\x3d\x1e\x4c\x03\xe6\x32\x05\xa4\xbc\xc7\x14\x55\x02\x30\x74\x02\x7a\x8b\x92\x4b\x55\xa5\x6f\x86\xfb\xc1\x4c\x4d\x21\x33\xb1\x64\x4e\xed\xfd\xfd\x6e\xd7\x0f\x3d\x79\xa0\x71\x45\xe2\x8d\x21\x9a\x9f\xf9\xa1\xf9\xbb\x74\x39\xf7\xfa\xe3\x1f\x3f\xfe\xe1\x28\x39\x90\x2f\x64\xbd\x31\x2d\xf3\x0f\x31\x7b\xe8\xbe\xa8\x7f\x3c\x20\xda\x02\xa0\x1d\xa2\x50\x17\x3b\x25\xfe\xf1\x48\x19\xd6\x0f\x30\x6a\xf1\x8f\xc7\x29\xe3\xe6\x8f\x7f\x48\x4f\xf4\x10\x4d\x74\x8c\x8f\x2c\xff\x79\x62\x60\x14\x82\xce\x5d\x11\x3f\x94\xb1\x8b\x81\x45\x50\x55\x1b\x95\x56\x8a\x7f\x8c\xc2\x79\x94\xa1\x30\x05\x45\xa6\xcc\xb8\x86\x8a\xef\x9a\x7f\x93\xa0\x8c\x91\x3c\xac\xf9\xfc\xf1\xe1\xe1\xd3\xbd\x78\x95\xf8\x49\xd2\x96\x43\xa0\x78\xd9\x99\x50\xeb\x2e\x27\x9f\xf2\xbd\x39\x49\x24\xa4\x92\xfa\xd4\xc1\x9e\x09\x5f\xaa\x8a\xbf\x4f\xf8\x97\x9e\x7c\xa5\x2d\x28\x17\xe8\x9c\xd5\xf3\x5e\x91\x0f\xc5\x93\x63\xb0\x0f\xa7\x14\x83\x64\x5d\x38\xab\x5f\xd7\xbb\x4c\xf8\xed\x0d\x26\x00\xdb\xdf\x1f\x8d\xd0\x9f\x20\x5d\xe6\x9f\x76\xae\x3f\xfe\x19\xc8\xda\xd7\x3f\x39\x7a\xc5\x1f\x1f\xdd\x2d\xf7\x17\x82\x46\xc1\x2b\xc5\xe2\x47\x74\x3e\x1f\xea\xc4\xf9\x8c\xd5\xa1\xc4\x2a\x3a\xd8\x4b\xab\x7c\x8f\x00\xe5\xdc\xf3\x0d\xcf\x9a\x95\x00\x67\x29\x81\x7c\x56\x01\xa4\xe5\x0b\x98\xa8\xe2\xdc\x1e\x32\x6d\x57\x8b\x4a\x35\x9d\x42\x9f\x21\x51\xd4\x40\xf5\x86\x18\x11\x8b\xf3\x25\x69\xba\xe5\x5f\x7e\x4b\x96\x95\x4a\x14\xe7\xab\x2f\xbc\x0f\x09\x68\xd3\xe7\xb8\x62\x3c\x88\x7e\x71\xfb\xe1\x90\x40\xcb\x4a\x05\x1e\xf7\x3f\x49\x59\x13\x51\x89\xdc\xaa\xa2\xea\x47\x63\xbf\xa3\xa8\xfe\x18\x1b\x49\xeb\xba\x94\xc4\x94\xc7\x30\x72\x01\x78\x0c\x34\x46\x5b\xa8\x25\x9b\x8a\x5d\x00\x16\xa0\x6a\x24\xe5\x52\xac\xb4\x54\xb9\x60\xbc\x9c\xff\xd5\x1b\xb6\xc6\x6c\x78\xd6\xb0\xa8\x90\xff\xb7\x4e\x36\xff\xd1\x91\xae\xe1\x3f\x5a\x93\xc3\xc6\x0e\x47\x49\xac\xbe\xeb\x3f\xe4\x64\x9e\xdd\xa3\xc5\x39\xd5\x59\x85\xbc\x7d\x85\xdd\x66\x0b\xab\x1f\xa8\x3f\x72\x34\x9d\xce\xe4\x7a\x68\x7c\x65\xcf\xfc\x0e\xc9\xb4\x6c\x93\x67\xa6\xad\x7f\xa4\x56\xe7\x01\x3a\xc7\x6a\xd6\x1c\x99\xf2\xad\xdb\x13\x0a\xbe\xeb\xcb\x1c\x2c\xf8\x8c\x68\xc5\xab\xe5\xdb\x93\x6f\xb7\x9b\xdf\xb3\xb2\x22\x56\x9d\x3f\xbd\x6e\x81\x1f\xf8\x5c\xb2\x71\xaa\x34\xdf\x45\x8c\x6d\xc9\x3e\xd4\xa8\x9e\x71\xbd\x1e\xf4\xe4\x7c\xce\x38\xec\x2a\x75\xfc\xf9\xc7\xd5\x67\xb8\x52\xc6\xd7\x5f\xd4\x14\xbf\xc1\x0d\xfb\x1f\x8d\xe1\x84\x57\x84\x3a\x55\x5d\x8c\x7a\xe7\xe0\x5f\xbd\x6b\xd2\xf1\xb9\xcc\xd4\x4c\x8c\xfa\xc6\x1d\x37\x23\xae\xaf\xf2\x24\x39\xe5\x7b\x4f\x5f\x72\x65\x99\x2b\x15\x85\x73\xbe\x46\xd3\xcd\xc9\x37\xbb\x74\x67\x3a\x53\x9a\x13\xc4\xd8\x2a\xa1\xbb\x1d\x9d\xe0\x03\x93\x89\x6e\x33\x55\xff\x89\x13\xd8\x61\xff\x53\xb0\x5d\x6f\xd8\x8a\xee\x6f\xf3\x13\x35\xe5\x47\x19\x73\x3e\xd3\xb8\x87\x34\xd5\x44\x72\x1f\x36\x62\xcb\x32\xf3\x53\xa2\xba\xb9\x28\xf9\x5c\x69\xf2\xe9\x6c\xe5\x31\x35\xfe\xf3\x4a\xca\xe3\x5a\x35\xaa\x7b\x4f\x84\x5f\xb6\xf4\xd5\x4d\xa9\xce\xb7\x8d\xaf\x74\xd5\xcd\x17\x77\xf8\x36\xc7\x82\x7a\x53\x76\x50\xe3\xcb\xcd\xdc\xbc\x6b\x4e\x23\x87\x8d\x7d\xb6\x91\xd7\x48\xb9\xe0\x32\x11\x73\x08\xd7\xf0\xde\x1e\xfa\x7c\x91\xdd\xf4\x37\xa4\x29\x6b\x9b\x06\xd4\x1c\x33\xe9\xa1\xc3\x21\x00\x75\x34\x94\x47\xa0\x02\xcd\x67\x2d\x4e\x54\xb8\xe6\xc8\x4e\xd5\xee\x70\x08\x19\xf0\xcd\x0c\x2b\x2d\x1b\xd3\xd8\x87\x6c\xe9\x93\xe8\x10\xc0\x75\x14\xac\x5f\x79\xf5\x26\xfd\xd2\x11\xdf\xbf\x3c\x69\x68\xdf\x7f\xf0\xca\x91\xbb\x8b\xb1\xef\xc5\xfb\x78\xd7\xd1\xff\x1e\x59\x55\x64\x4c\x33\xbf\x04\xc3\xaf\xc1\x4d\x0e\xf2\xd6\x3b\x3f\x2b\xa5\x10\xb5\xc1\x85\xc7\x30\x9d\xa6\x47\xeb\xda\xa7\xa9\x34\x42\x9f\x14\xb4\x3b\x09\xda\x8b\x84\x37\x3e\x41\x6c\x48\x84\x9e\xbc\x18\x86\x09\x67\xd4\x8d\x8d\x68\x4b\x76\x80\xde\xfb\x82\xc0\x54\x83\xdb\x1c\x7d\xe0\x26\xc9\x18\x0b\xee\x2e\x24\xe0\x31\x40\x29\x62\x3c\x32\xc5\x9d\x11\x68\xb9\xe5\x60\x5a\x5d\x27\x3d\x2c\x75\xf9\xb0\xe2\xcd\xac\x7b\xf9\xaf\x2e\x07\x88\x74\x27\x2f\x36\xe6\x57\xe3\xac\xa3\x2d\xc6\xcc\xd6\x30\xf2\x06\x42\x5e\xbd\xae\x22\x54\x5c\xfb\x2c\xad\xdd\xf7\x51\xb0\xd5\x12\xdc\x17\xa6\x07\xaf\xa1\xcb\x15\x08\x5e\xe2\xca\x57\x5c\x5f\xac\x95\x97\x76\x94\x17\xab\xb7\xfc\x9c\xbd\x14\xf6\x3b\xc5\x47\xf8\xdd\xa5\xae\xa3\xc5\xba\xbb\xb4\xd8\x1b\xe5\x99\x40\xd6\x19\x3d\x2c\xaa\x76\x79\x84\xe1\xd3\xd9\x39\xd0\x75\x02\x0e\x6e\x6e\x91\xa5\xf8\x7e\x73\x11\x33\x4a\x00\x66\xec\x7e\x73\xe9\xd9\xa1\xc9\x82\x07\x96\xb5\xc7\xc4\x80\x69\xe2\xbe\xf4\xcd\x7a\x49\xa8\xf3\x74\xab\x06\xc5\x1b\x51\x44\x17\xd4\x6a\xfc\x46\x84\xb8\x0c\xf9\x95\xd3\x4c\x41\x5d\x2f\xaa\xe0\xf0\x8e\xbb\x09\xf5\x3e\x9f\xe1\x15\x08\x68\x07\xa9\xa0\xfb\x2d\xe4\x9a\x17\x85\xb8\x25\x5d\x3a\x34\x37\xd1\x7d\xa8\x1b\xdd\x07\xc2\xa2\x0c\x4e\x16\x72\x2a\x88\x37\xfa\x17\x28\xd3\xd3\x9b\xae\x81\xec\xbf\xe5\x35\xd0\x13\xe3\x3c\x25\x10\x33\xe0\xfd\x22\x46\x4b\x04\xa8\x9e\xa0\x9d\x54\x69\x21\xf1\x16\x8a\xc0\x2c\xbd\xd0\x7e\xe3\xed\x71\x82\xee\x67\x5b\xb6\x56\xe8\xc1\xaf\x69\x96\xbe\xaf\x40\xcc\x02\x20\xbb\x23\x03\x17\x51\x5a\xb6\x61\xb3\xb3\xa1\x02\x75\xaa\xbf\x65\xc4\xba\x84\xb9\xc8\x4a\x1e\xb5\xa2\xe4\xb0\x5a\xc6\x2a\x66\xa6\x90\xb8\x14\xc6\x6e\x23\x76\x5f\xae\xc9\xff\x2b\xab\x82\x57\xf3\x84\xd1\x54\x1d\xca\x8d\x30\xf3\xc9\x31\x86\xf8\x19\xab\x01\xee\x6c\x74\xc8\x7c\x6e\xe7\xdf\xf6\xe3\xf7\xc5\x4b\x22\xf1\x47\xdc\xbc\xe7\x12\x65\xf7\xc9\xfa\x0a\x42\x64\xa2\x2f\x4e\xd6\x47\xbb\x3d\x3f\x35\x74\x19\xd2\x8e\x67\xd7\x07\xa5\x02\x60\x86\x1e\x74\xf7\x5c\xbc\xef\x5e\x42\xbe\xff\xf8\xdd\x66\x05\x7b\x78\x14\x7e\xd1\x61\xed\x5d\x66\xb9\xdf\x55\xea\xa3\x02\xf1\x2c\xc0\xaa\x46\x33\x9c\x60\x1e\x03\xa0\x0e\x4e\x65\xd0\xee\x77\xbc\xdf\xa5\x63\x3c\x12\xf0\xd2\xb8\xdd\x83\xbb\xd0\x82\x91\x2b\xa2\x66\x1e\x17\xfa\x7d\x57\x6b\x95\x5f\xdc\xd6\x35\x04\xdb\xb9\x1f\x64\x00\x6a\x2c\x65\xce\xcc\x02\xcd\x0c\x28\x9b\xc1\xe0\x60\x33\x11\x75\x22\x10\xd3\x3c\xd6\x8b\xc0\xdd\xbe\xa6\xe4\x90\xbf\xeb\x75\xef\x70\xac\x49\x87\x4b\x6e\x75\x00\x8c\xfe\xe1\x79\x13\x04\x3c\x04\x50\x64\x50\xb9\x59\xb8\x1f\x2c\x0d\x9c\x7e\x9e\x04\x73\x0b\x96\xe9\x21\xb6\x47\xf7\x23\xa0\xee\x1f\xa1\x84\xc5\xd4\x61\x4d\x28\x46\x50\x61\x55\x48\xbd\x38\x9a\xdf\x81\x95\x30\x0a\xea\x88\xf9\xea\x63\x39\x28\x6f\xda\x4c\x8a\xc9\x8a\xf6\xfb\x91\x3b\x1b\x2c\x21\xb8\x6a\xdf\x8f\xfc\xdb\xfb\xab\x43\x9b\x17\xd4\x1e\x18\x8f\xde\xf6\xa3\xb2\xef\x39\xf4\xca\x82\xdf\x8f\x4b\x93\x75\x15\x2f\xb3\x48\x80\x06\x2d\xa9\x89\x63\x70\xe8\x23\x03\xf6\xc0\x4e\x80\xbe\x2d\xb4\xb7\xa8\xdf\x3e\x43\x01\x31\x5e\x59\x1b\xbd\x0c\xff\xf4\x8d\x35\xa1\xe9\x61\xe2\x90\x7e\x7c\x22\x97\x5b\x9f\x9c\x6d\xc4\x24\xdd\x90\x4b\x2a\xc0\xc8\x27\xb7\xfb\xa8\x0a\xad\xee\xbc\x14\x46\x34\xf4\x26\x4d\x9e\x74\x12\xe2\x88\x51\x96\xad\xf8\x66\xe3\x2b\x01\xa2\x4d\x54\xaa\xc1\x4e\x10\x26\x02\x25\x4a\x1a\x35\x86\x90\xc2\x4f\x7d\x92\x41\xb6\x22\xa4\xb2\x53\x31\x49\x3a\x3e\x2d\xf2\x77\x6c\x61\x69\x71\xfb\xa1\xe9\x5b\xdc\x71\xf6\xfc\x4e\x8b\x2b\x47\x83\xf5\x7e\x96\xa9\xab\x62\x17\x1f\x74\x4a\xea\xac\x9b\xf9\xc5\xa7\x90\x69\xc0\xca\x00\xe7\x75\xf7\x3f\x0b\xee\x7f\x57\xda\x46\xef\x6e\xc6\xd1\x2d\x61\xd6\xb8\xfc\x3f\x7e\x8f\x30\xad\xbb\x30\xf2\x9c\xad\xb1\x43\x4e\xcb\x66\x6c\x23\x06\x53\x45\x45\xfd\x28\x60\x62\xb0\xa8\xb8\x74\x7d\xe3\x6b\x08\xe2\x54\xc7\x21\xa2\xbd\x0b\x2a\x61\xd5\x4c\x84\x68\x1a\x4d\x4c\x48\x54\x70\x8c\x55\x3a\x34\x9f\x42\x59\x62\xf7\x36\xe2\x83\x23\xdc\xa4\x9c\x5b\x09\x30\xf2\xa5\x25\xaf\xdd\x6a\x5e\x69\x28\x13\x54\x33\x8d\x87\x86\x9f\x77\x9e\x85\x02\xc9\x60\xa1\xb0\xed\x04\x47\x9f\x11\xa5\x25\x1f\xba\x8c\x4d\xca\x15\x54\xfd\x1d\x6c\x41\x3b\x05\x83\x12\x78\x8c\x9c\x96\x92\x29\x61\xd4\xa0\x59\x2e\xcd\x58\xdc\x09\x71\x1d\x06\x5b\xac\x76\x91\x4a\x28\x8e\xf6\x7e\xc6\xf0\x0b\x45\x75\x2d\x90\xeb\xa6\x30\x1f\x7e\x65\x4d\x30\x02\xcd\x60\x50\x08\xf7\x9a\x82\xbd\x4e\x2b\x44\x69\xd8\xab\xdb\x47\x62\x56\xb7\x67\x7f\x73\x40\xe9\xe1\xb5\x46\x01\x97\x6e\x25\x97\xda\x0d\x70\x1b\x09\x00\x5b\x97\xa6\x6b\xbb\x97\x69\xbd\xe1\xfe\x98\x4f\xab\x77\xdd\x07\xaf\x4c\x27\x15\x36\xc3\x3b\xa3\xce\xd2\x5b\x1f\x0e\xed\x74\xdd\x1c\xe3\x89\x79\x66\x5a\x03\x6a\xc0\x3a\xce\x08\xd2\x9a\x32\x32\x7d\xcd\x2e\x3d\x82\x45\x22\xcf\xf1\xcc\x5f\xf1\xb3\x53\xcc\xb4\x72\xb3\xcf\xb4\x41\x30\xda\x82\x0f\x82\xe2\x52\xd7\xd4\x43\xf5\x60\xae\xc7\x21\xbb\x51\x07\x2e\x1d\xcc\xd4\x64\xd8\xd7\xf0\x69\xd5\xa3\x52\x05\x1a\x81\x35\x27\xee\x01\x18\xd6\x70\x80\x35\x0e\x76\xb2\x9a\x56\x4a\x7b\x02\x40\xff\x0c\x55\x57\x73\x24\x08\xe2\xb5\x1f\x8c\x13\x8e\x9f\xb5\xfd\x2b\x55\x67\x42\x83\xb0\xae\x75\x9d\xfb\xd5\xb5\x9f\xd4\xa6\x35\x27\xdf\xba\xed\x71\x6a\x2b\x04\x64\x10\xe0\x0a\x08\x28\x69\xf7\x66\x8f\xd7\x98\x08\x2f\xb3\xcf\x33\x5d\x41\x79\x35\x4f\xca\xe9\x3b\xb0\x3a\xc3\x37\xa2\x04\x99\x80\x67\xbf\x02\xb8\xb5\xa3\xc8\x32\x4d\x2f\x6d\x08\x7a\x7a\x3e\x7f\x04\xb1\xf7\x0c\x38\xb3\x66\x24\x18\xee\x29\xca\xc5\x77\x64\x51\x3f\xab\xef\xa8\xbb\xc6\x1d\x74\xd5\xae\x9b\x8f\x81\x9d\x9a\x12\xc3\xa0\x58\xb5\xce\x14\x52\xa3\x88\xc3\xea\xca\x8b\x3a\xca\xac\x76\x70\xaa\xf5\x69\x3d\xf0\xca\x48\x00\xef\x0f\xa5\x95\x8f\x74\x08\x90\x32\x5d\x75\x24\x88\x77\xf2\x69\xc5\x25\x1e\x01\xe3\x32\xa7\x12\x76\x0a\x9c\xec\xde\x26\x10\xfd\x1f\xa2\x3c\x7d\x92\x79\x71\xd5\x59\x92\x11\xaa\x8f\xf8\x8a\xca\x82\x00\xda\x0d\xa8\x75\x1e\xf9\x0a\x92\x19\x26\xd1\x05\xc5\xf6\x61\x08\x51\x82\xe3\x44\x35\xdd\xbd\xbf\xc5\x6f\x02\x36\x7c\xbe\xdf\x4d\x57\x46\x13\x89\xf7\x38\x65\x4c\xf7\x1c\xd9\x59\x08\x30\x7b\xb9\x2c\x7e\xa4\xfe\xde\x19\x9d\x28\x86\xf5\x2f\xee\xb4\x13\x2d\x86\xd2\xcb\x0c\x86\xc0\x13\x37\x60\xc2\x42\x75\x64\x19\x78\xe6\x89\x8a\x9e\x8b\xe6\xbe\x5f\xe3\xf6\xe9\x81\xb2\x79\x60\x31\x01\x85\x56\xec\x09\xbe\x62\x5c\xdd\x02\x92\x59\x6f\x7a\xe4\x1b\xac\x77\x36\xb9\x3e\x3d\xe0\xac\xb8\x7b\xef\xc9\x41\x74\x53\x63\x53\x0c\xbc\x53\x61\xe5\x12\xa0\x21\x15\x5d\x97\x12\x4d\x89\x28\x7d\x9d\x9a\x1e\x2d\x5a\xa6\x6f\x9d\x25\xb1\x62\x71\x1a\x1e\xa8\xe8\x7f\xdc\x7e\x33\x33\xc1\x06\x75\x2f\x08\xa0\xeb\x5d\x53\x15\xfc\xc3\x49\xb4\xa8\x6a\xfe\x0c\x69\x65\x89\x3f\xfb\x40\x2d\xe3\xdb\x98\x9c\xa7\xe8\xca\x28\x12\x10\xb3\x81\x38\xc5\xed\x38\x9f\x86\x25\xa5\x27\x33\x73\x12\x4e\x5c\x2d\x20\x28\x0a\xba\xe1\xab\x3b\x7a\x75\x27\xbb\xb7\x5d\x8c\xb4\xb3\x62\x71\xe5\x92\x12\x4e\x82\x45\x79\x20\xda\xc9\x1b\xcf\x14\x60\x65\x86\xe2\x53\xca\xa3\x82\x03\x4b\x08\xa9\xc9\x4c\x57\x16\xcd\x29\x6b\xdb\x1e\x22\x58\x7d\x1f\x5a\x94\x75\x3b\x40\x9f\xe0\xeb\x79\x10\x14\xf1\x34\xb7\x51\x54\x7f\x5b\x40\x2d\x9a\xa6\x29\x05\x9b\xb0\x7d\x8a\x51\x82\x4e\x4f\x04\x98\x15\xf0\x58\x14\x35\x46\x64\x0f\x9f\x6d\x29\xe8\x96\x0c\x49\xe0\xa7\x83\x9c\x20\x9f\xc8\xe3\x50\xc0\x56\x42\x9f\x0b\x9e\xe1\x91\x54\xc1\xd4\x45\x00\x57\x77\xe9\x0c\x71\x34\x52\x21\x90\x9b\xa7\x4c\xf0\xcc\x71\xd4\xea\x7b\x26\x57\xba\xa6\x60\x68\x4a\x5b\xee\xb1\xc2\xec\x06\xf9\x77\x6a\xaf\x76\xfe\xba\xba\x99\xab\xea\x6e\x91\xb7\xe0\x89\x87\x3e\x37\x39\x06\x8f\x6f\x63\xe8\x6d\x95\x68\x62\xf7\x3d\x78\x7d\x0b\x62\xe6\x57\x1f\x3d\x67\x40\xd5\x47\xec\x09\x91\xc1\x3d\xd4\x62\xcb\x82\xea\x0b\x66\xac\x84\xb6\x83\xd2\xe7\x93\x63\x66\x52\x7d\xc9\xb7\xd0\xfd\x2e\x79\xc9\x71\x32\x7a\x40\xb8\x44\x52\x7f\xf2\xe6\x0f\x57\x27\xe3\x67\x48\xce\x02\xb1\xaa\x43\x39\x30\x54\x8f\xe4\x1b\xaa\x8a\x10\xa5\x6c\xfe\xdd\x9d\x9e\x23\x4a\xf9\x0b\xbe\x71\xe1\x98\x94\xde\xb3\x13\xac\xab\xd7\x0e\x35\x19\xe3\x6c\x4e\x28\x15\x9e\xdf\xf1\xe8\x6d\x54\xc3\xb2\x75\x73\x11\x23\x35\xd9\xa7\xd3\xc9\xe0\xa4\x3e\xb3\x51\xff\xe2\xa1\xee\x21\x0f\x36\x70\x02\xa1\x90\xba\xd7\x8e\x5d\x22\x99\x4c\x75\xab\x10\x3b\x69\xe1\x9b\xc8\x18\x42\xd4\xc1\x1a\xea\x28\x68\x56\xcb\x7e\xdd\x2d\xd9\xcd\xb6\xc1\xb2\x1d\x10\x2d\x17\xaa\xb7\x64\x0b\xa1\x59\x9f\x77\xbc\x0d\x34\x0c\x2e\x7e\xe8\xe5\xfb\xe5\xb6\x54\xb3\x0d\x65\x7a\x6d\x0d\x2a\x4b\x0c\xd9\x50\xb8\x82\xaa\xc5\x79\x2a\x96\xa5\x36\x8a\x4f\x5c\xe3\x8d\xf8\xc5\xe4\xa0\x72\x77\x4a\xd4\x63\x18\xf3\xda\xab\xac\xdc\x5c\xed\xba\xde\x31\xb9\xc5\x2f\xaa\x6c\x4e\x4d\x16\x4e\xad\x6b\xf1\xd1\xa9\xe1\xee\xeb\x49\xd4\xf7\x23\x85\x38\x54\xc9\x46\x4b\x16\xb7\xf2\x45\x68\xdb\xef\x1a\xa7\xfa\x7d\x32\x23\x75\xa5\x0e\x7e\x80\xdd\x63\xea\x5c\x9a\xa8\xdf\xd1\xb9\xb4\x25\x7a\xeb\xce\x88\x31\xab\x68\xbb\xef\xbd\x1c\x31\xb5\xd3\x60\x0a\xaa\x94\x59\x02\xa6\x25\x5b\xee\x51\x10\x7d\x07\xc5\x90\x06\xfd\x0a\xd3\x70\xf6\x0a\x34\x1f\x57\x72\xd2\x2b\x14\xdb\x12\x1a\x58\xf7\xd5\xbe\x35\x68\xe3\x1c\xfd\xf4\x2b\x4b\xfc\x5e\xf2\xd1\x79\xfe\xe7\xda\x47\xb3\x52\xe2\x32\xc8\xb3\xec\xfc\xe3\xf3\x2d\x64\xf1\x20\x6f\xe1\xc0\x2e\x45\x8e\xe1\xc0\xdd\x3d\xe9\x42\xb6\x1f\x9f\xf7\x1f\x2f\xe9\x25\xe3\x2e\x9f\x4f\x99\x96\xc8\x17\x95\x74\x82\xd2\xde\x8f\x1f\x7f\xb8\xa5\xca\xf7\x91\xa5\x7e\x1e\x2e\x41\x7c\x97\x03\xcc\xb8\x44\x24\xc0\x04\x95\xf9\x83\x97\x99\x0f\x5d\x11\x1e\xae\xe1\xe6\xfe\xe1\x43\xd1\x95\xc8\xe1\xc3\x99\xb9\x0b\x70\xcc\xbb\x14\x87\x4f\x2b\xae\x97\x1e\xbe\x1f\xac\x1e\xbe\x3c\xa4\x9f\x3b\xfc\xdb\xee\x04\x1d\x9b\x13\xff\x37\x2f\x13\x23\x28\xf4\x4a\x90\x4c\xb6\x05\x20\x56\x9b\xbf\x35\xaa\x2b\xa2\x2b\x2a\x26\x5f\xc7\x86\x3d\xe1\x0e\x58\x17\x8c\x60\xd1\x91\x92\xa9\xae\xa2\xae\xc7\xc0\xc2\x71\x04\x86\x96\x61\x47\xaa\x0d\xf2\x45\x9a\xc9\x11\xb4\xbf\x38\x02\x4f\x06\x8e\xb0\xe0\xe3\xe2\xf5\x26\xa0\x08\x6b\x40\x5d\x6b\x02\x1e\x50\x7d\xd7\xd1\xeb\xa3\x40\x98\xa1\x10\x15\xdf\x91\x5a\x0c\x0c\x0e\x57\xbf\xe9\x6f\x4e\xeb\x15\x69\x2f\xd7\x2b\x02\x94\x60\xa6\x4d\xbd\xb8\x96\xd8\x01\x56\x22\x47\x90\xf5\x37\x17\x8f\xc4\xbd\xd2\x0d\x52\xcd\xb8\x5e\x3d\x42\x97\x38\x0d\xbc\x5e\x5d\x9b\x72\xec\x04\x66\xaa\x18\xb9\x34\x71\xfd\x3e\x70\x87\x55\xb1\xa1\x98\x6b\x55\x0b\x18\xed\xa8\xb2\xb8\x05\x6a\xde\x70\x9a\x4b\x55\xd9\xa4\xcd\x54\x55\x4a\x96\xb2\x0a\x98\x93\x7c\xd8\x33\x99\x23\x59\x8f\x2b\x69\xfc\x2e\xd4\xd6\xf0\xec\x79\x6a\x3b\x80\x87\x0a\xbc\x14\xe0\x8f\x13\xb6\x62\xd8\x93\x19\xf6\xfc\xd2\xab\xe3\x07\x1e\x99\x52\x31\x52\x63\x39\x16\xd6\x8a\xb5\x15\x85\xfd\xca\x53\xd5\xd8\xaf\x53\x51\x72\xa8\xdc\x81\xaf\xa9\x04\xf8\x63\xd3\x7a\x1d\xfa\x72\x5c\xe6\xce\xd7\xb2\x29\x3e\x36\xc7\xa4\x80\xeb\xde\xee\x6d\x6b\xff\x5b\xa3\xce\x1a\x4c\x09\x2e\x73\xa0\x49\x06\x6b\xf4\x41\x05\x9b\x03\x5d\x91\x57\x1e\x88\xa3\x82\xb3\x6b\xb1\xd0\xf1\x54\x91\x5a\x60\x34\xe4\x8f\xd1\x17\x40\x5c\x0f\xee\x94\x2a\xb4\x98\x81\xa0\xfb\x5e\xb7\xce\x05\x37\x1f\x99\x97\xb2\x68\xdb\xa9\x1d\x74\xae\x72\x48\xc7\x42\xad\xac\x46\x95\x5f\xa7\x71\x3a\xab\x45\xf8\xac\xe6\xba\xfa\x7d\xaa\xe2\x46\x5e\x4a\x14\xad\x0d\x67\x8d\x6a\x3d\x47\x8d\x00\xc4\xf8\xf7\x7a\xc3\x77\x4f\x6a\x47\x5b\xde\x79\x45\x95\xe0\xef\x8f\x00\xef\xab\x56\xc3\x3a\xaa\x5e\x8f\x5c\x8f\x5b\x75\x6f\x78\x29\x13\x22\xb7\x6b\xad\x52\x82\xb1\x21\xc1\x1e\xa4\xef\x3f\x00\xea\xf6\x83\xe2\x49\xfb\xd3\x2b\x6f\xdd\x3c\x03\xd6\x4c\x9a\x04\x83\x1b\xc5\x14\xaa\x84\x70\x45\x9f\x2f\x2b\x1f\xb5\x82\xb7\x56\x51\x0d\x3e\x59\xd3\xfa\xc9\xda\xf0\x3f\xd9\x4c\x32\xaa\x6b\xc6\xe0\xc0\x52\x9a\xaa\x68\x4e\x97\x29\xb0\x75\xe0\xe3\x61\x4b\x12\x49\xd1\x96\xfe\x38\x03\x87\x8a\x93\x7c\xfb\xfc\xd1\x62\x96\xaf\x8d\xf4\xc7\xc5\xd7\xc0\xfe\xef\x8f\xff\x7b\xd4\x1f\xff\xb7\xf5\xc1\x5e\xa0\x0d\xd6\xe0\x91\x6f\x69\x06\x31\xdd\x01\xfe\x6b\x17\xb3\x01\x3e\xb3\x2d\xa4\xfa\x6f\x73\x89\xb2\x54\x15\xf6\x01\xff\x6f\x9b\x6e\xae\xff\x6d\xc3\x25\x7a\x8b\xbf\x8d\xb7\x33\xff\x36\x2f\xbd\x60\x0f\x0d\x14\xf8\x14\xf9\xbf\x2d\x38\x59\x77\x93\x73\xba\x90\x9d\x5b\xb7\x09\x02\xc2\x6c\xce\xb0\x05\xa0\x14\x43\xa1\xbc\xa0\x73\x58\x43\x1e\xff\x6d\x64\x2f\x0b\x90\xdf\x50\xc1\x0f\x83\x00\x7b\xa4\xea\x99\x4e\x6f\x04\x65\xcc\xef\x81\xa2\xde\x04\x1a\xc4\xa5\x44\x5a\x95\x6d\xfc\x44\x0e\xcf\x32\x98\x7c\xf7\x2c\xa5\x64\x4b\x80\x92\x6f\xc8\x2d\x66\xc3\xa0\xd5\xe2\xe9\xab\x46\xbc\xce\x25\xd7\xaf\xdf\xfc\x6d\x66\xf3\xc5\xaf\x1b\x31\xec\x17\x95\x04\x67\xde\x5a\x57\xd8\xfd\x07\xd1\x7d\x7d\xf5\x83\x71\x23\x34\x37\x5f\x19\x97\xcd\xa4\xf7\x2b\xce\x44\xf0\x02\x2e\xdf\x58\xec\x17\xd7\x45\x5a\x08\xf6\xd4\x52\x5b\x3c\xa2\x28\x37\x94\x87\x4a\xbe\xf4\xc5\xb3\x2a\x43\x45\x56\x14\xbf\xdb\xc2\xa0\x48\x95\x17\xb7\xbe\x72\x94\x28\x0f\xf9\xbb\xb3\xbf\x82\xa1\xac\x5d\x28\xca\x8f\xc0\x97\x87\x24\x6c\x09\x77\x88\x8b\x16\x72\xd5\x01\xbd\x3c\xec\x70\xa9\x3c\xec\x1a\x21\x11\x47\x90\xf2\xe8\xcf\x91\x00\x5f\xa6\xab\xa2\xa7\x05\x56\x7e\x29\x29\x16\x10\x11\x84\x3a\xb4\x18\x35\xee\x74\x8a\x9e\x4c\x80\x4a\x58\x24\x0f\xc3\x83\x93\xa8\x02\x51\xbf\xbe\x3c\x7f\x7c\x89\xe0\xa2\x23\x13\x0a\xd8\xc6\x4d\x4e\xaa\x59\xba\xc4\x02\xdd\xbc\x8e\xac\xcd\xe3\x6d\x8b\x60\x64\x28\x5e\x18\xa9\x96\x66\x79\x1e\xf7\x81\x80\xd5\xb4\x72\x44\x2f\xb9\x32\x4a\xd9\x1e\x86\xc9\x52\xb7\xcf\x4b\x84\xe0\x48\x80\xc5\x30\xaf\xe3\x77\x28\x09\x1a\xbb\xab\xa5\xf0\x8e\x5b\x01\x47\x48\x28\x58\xb2\x94\xe2\xaa\xa3\x62\x41\x14\x87\x6a\x5d\x98\x09\xb2\x8a\xed\xfd\x47\xc1\xe9\x77\x11\xd4\x6e\xfd\x2e\x6b\x69\x8b\x55\xf9\xd2\xd6\x60\x37\xd9\x81\x55\xf7\x98\x40\x4f\x30\x08\xc6\xee\x25\x33\xfb\x72\x31\xc3\xaf\x33\x1c\x3e\xba\xb3\x43\x4c\xfc\x0c\xd7\xad\x84\xb7\x90\x75\xc3\xd0\x2f\x80\xb3\x15\x22\xd4\x36\x22\xd4\x08\x81\xb6\x3e\x9e\x08\xce\x63\xa8\xb1\x5c\xdd\x91\xe0\x5e\xf3\x66\x0d\x64\x16\x34\x28\xf8\x5c\x89\x63\xcb\xb7\xe0\x06\x85\x59\x86\x12\x39\xf8\x29\x10\x36\x94\x73\x71\xe4\x8b\x04\xc8\x9d\x62\x05\x45\x11\xb3\x8a\x30\xab\x66\xc4\x2b\x66\x85\x07\x01\x26\x1d\xe7\xe2\x0e\xf3\x04\xe3\x11\x54\xf6\x8f\x80\x45\x55\xac\x4b\x05\x21\xab\x04\xf4\x49\xc5\xb9\x38\xb6\x1b\x01\x59\xa3\x56\x0e\x55\xcc\x2f\x1c\xc2\x12\x14\x2a\x75\xf2\x41\x29\x84\x01\xf6\x2e\xaa\xa2\x03\x27\x64\x5a\x36\xff\xeb\xa2\x02\x46\x2e\x47\x7a\x98\xd3\xc9\x84\x4b\xc9\xe1\xaa\xc4\xb9\x94\xfc\x2b\x4a\x53\x6f\xda\x9a\xa1\x44\x8d\x53\x8b\xcc\xd3\x56\x97\x0d\x8b\xc6\xd3\xb3\xa3\x38\xf1\x46\xf8\xd4\x8b\x8a\x27\xb4\x92\x97\x06\x70\x66\x9c\xa8\xfb\xb7\x40\xbc\x5d\xc7\x14\x9e\xb8\x01\x55\x6f\x57\x31\x3a\xae\x86\x87\x6e\xd7\x83\xa7\x76\x93\xe5\x94\x6c\x3b\xb0\x19\x22\x8a\x15\xf5\xe1\x1e\x29\xcf\x08\xaf\x57\x4f\x99\x4e\x22\xa2\x87\x4b\x60\xbe\xe3\x21\x15\x2a\x43\x6d\x52\x7d\xcf\xc3\x2f\xfc\x06\x1b\x0b\xce\xc3\x46\xb3\xf3\x08\xc8\x4b\x99\x4d\x33\x87\x8e\xe8\x12\xab\xc3\x91\x21\xe1\x97\x80\x61\x80\xd3\x05\x80\xcc\xf5\xce\xbf\x8d\x99\x5c\xf2\xe3\x87\x1e\x9f\xa8\x23\x27\x44\x23\x41\x65\x22\x65\x84\x3d\x4f\xb6\x75\x0a\x74\xd1\x59\xf0\x20\xea\x44\xd4\x6b\x10\x1a\xe3\x53\x9f\x2d\xc3\x5e\x75\xb7\x9f\x2e\xff\x0f\x21\xcd\x22\x03\xff\xb7\x64\x40\xd1\xbd\x6b\xa6\xa1\x6b\x37\xd5\xd3\xc5\x7e\x04\x1a\x25\xdc\x36\x20\xf0\x25\x03\xd2\x15\x43\xc2\xa0\x47\x30\x5d\x29\x31\x6e\x0b\x0a\xac\x03\x18\x14\x0a\xd9\x16\xfd\x02\xe8\xe7\xe6\xed\xa5\x87\x61\xc6\x75\xd3\xe3\xa8\xb3\x86\x7d\x4c\x0d\x40\x59\x80\x02\x51\x37\x6b\x78\x0d\xcd\x97\x69\xe6\x85\x5f\xd6\xa4\x9a\xb1\x43\x22\xa3\x2a\xa7\x44\x40\x5e\x8a\xb7\x16\x96\xb7\xa8\x21\xab\xce\x83\xde\x41\x72\xf0\x6a\x81\x0f\xb1\xc2\x46\x14\x22\xa4\xad\xb0\xd1\xd6\xc2\xbc\x2d\xe6\x17\xcf\x6c\x6d\x3f\x97\x62\xe6\xfd\xa9\x77\xa8\xcf\x26\xff\xa2\x57\xb7\x14\x5d\x3f\x5e\x86\x94\xea\x7c\x09\x59\x54\x4c\x89\x6d\x40\xae\x8b\xfc\x25\x7f\xc5\xce\xc2\x6b\xd1\x64\x2e\x2a\x0a\x86\x59\x59\xd5\x68\x45\x22\x64\x12\x04\xf7\x49\x31\x08\xb3\xd1\x27\xc1\x75\x93\xbf\xd4\xfb\xba\xb9\xe4\x76\xcc\xca\x05\x9a\xc2\x3c\x02\xac\x5b\xc7\x54\x21\x49\xfe\x75\x29\xe5\xe9\x06\xf1\xda\x7c\xf1\xd3\x84\xdc\x68\x04\xaf\xf8\xf3\x6d\xa6\x31\x86\x38\xf9\x6f\x87\xe1\x1f\xcb\x53\x35\x04\xf9\x65\xf6\x61\xf0\x32\x3b\x91\x6f\x0f\x73\x5c\x1c\x13\x8c\x1a\x28\x80\x74\x72\x90\x0c\x0f\x08\x25\x71\xcf\x4b\x01\x3c\xb0\xf3\xf7\xba\xa5\x7c\xcb\x10\xc8\x01\x3c\x3f\xfe\x1b\xb4\xd4\x6a\x50\x9c\xc0\x09\x7c\xa8\xa2\xbb\x21\x8a\xcd\xd0\x36\x31\x3a\xa1\x06\x1b\xc4\xcb\x68\x7c\x8d\x54\xb3\xa8\x0a\x65\xd6\xd4\x6f\x4a\xd3\x36\x6e\x35\xd4\xfe\x36\x41\xd0\xde\xce\xb0\x7c\x99\x75\x1d\xb5\x01\xe7\x93\x8d\x6e\x94\x53\x66\x2e\xa9\x95\xb7\xd6\x99\xfc\xbe\x46\xcd\x29\x4c\xef\x15\xf9\xed\x45\x74\xc5\x9b\x4f\x1f\xad\x2a\x57\x5c\x03\xea\x50\x76\xe5\x0c\xa6\xe7\xd3\x64\xdb\x6c\x9a\x32\xbc\x1a\xdb\x58\xd5\xb6\xb0\x6a\xf8\xdb\xd8\xe7\xd5\x24\x8d\xa5\x60\xac\x80\x5c\x2a\x5f\x5b\xf8\xf1\x55\x16\xa5\x75\xda\x76\xad\x7d\xd7\x55\x50\xfa\xf1\xed\xc7\xb7\x1b\xc4\xf5\x60\x0a\xda\x16\x30\x11\x16\x35\x5e\x07\xe6\x47\x0a\xa5\x55\x37\x48\x82\x27\x88\xb9\xa8\x4d\x66\x1a\x3c\x5b\x2c\xd7\xda\xb2\x15\x1a\x96\x2c\x5d\x5a\x32\xac\x57\x15\xda\x12\xd1\xcd\xb6\x85\xf3\xb1\xc6\x2b\x44\x80\xab\xf3\xbb\xde\x33\x6f\xab\x67\x2c\xa1\x4a\xff\xab\x48\x0a\x5b\xa1\x54\x3d\x83\x70\xd2\x7b\x67\x85\x52\x7d\xda\x3d\x3a\xae\x05\xda\xa3\xbf\x79\x6f\xca\x2c\x07\x00\x49\x7d\x48\x61\xfc\xf8\xa6\x3b\xa6\xfb\x80\x62\x3d\xba\x05\x0f\xdc\x1b\x19\xe5\x50\xb5\x96\x4b\x02\xc1\x5a\x66\x03\x20\x57\x05\x7c\x66\x8b\x1f\xb3\x28\x71\xdb\x7d\x74\x09\x59\x44\x06\x09\x2d\xa7\x0b\x5b\x23\x0d\x57\xec\xe9\xc5\xe1\x2a\x76\x73\x9b\x32\xd6\xf1\xed\xd8\x5c\x3b\x03\xf5\xf0\x6e\xcf\x02\x20\x85\x10\x8c\xbb\x8e\xa1\x6a\xe8\xf3\x65\xf9\xa3\x96\x35\x8f\x01\x7a\x07\x42\xb2\x4f\xf1\x49\x32\x4e\x1b\xb8\x8c\x88\x5a\x6e\xe6\xb2\x28\x28\xe0\xc5\x20\x20\x7b\xa8\xcd\x22\xd2\x34\x1e\xe0\xba\xd0\xc8\xcf\xc7\x37\xe5\xdc\x83\xf2\x20\x16\xe7\x25\xe0\x0c\xa0\x95\x80\x0b\x28\x2a\x7c\xd4\x37\x99\x4d\x21\x0e\xe5\x92\x79\x99\x27\xd2\x77\xa8\xad\x4c\x5e\x75\x9f\xae\x9a\x0f\xed\xb8\x1a\xce\x69\xda\x59\xd1\x5b\x35\x6e\x57\x35\x8c\x08\xcc\x5b\xdc\x7b\x84\x7b\x20\xc4\xb7\xe6\x85\x66\x32\x8d\xef\x5d\x72\xb3\x1b\xdf\xed\xed\x39\x87\x79\xb9\xc5\x36\x4e\x08\x65\xc0\x16\xe4\x61\x88\x79\xfc\xcb\x8d\x87\x12\x2f\x17\xdb\x17\xa4\xfd\xf1\x14\xf0\x25\x43\x71\x34\x35\x60\x60\x55\x6c\x6c\x1d\x26\xb2\x7e\x99\xb2\xcc\x94\x3e\x7b\x30\x24\x19\x13\xe2\xe1\x89\x24\xb6\xc3\x39\xb0\xcf\xb7\xf3\x0f\x9d\x1f\x79\x2c\x22\x49\x99\xad\xc3\xde\x26\x03\x2a\xe3\x7a\x25\x98\x51\x47\x96\x79\xc6\x79\x84\xe1\xe8\xec\xaa\x2d\x03\x5f\x62\xd5\x5e\xfc\xea\x95\x86\x97\x27\xaf\x70\x01\x98\x11\xbc\x94\x5b\xa7\x80\x33\xab\x4e\xe5\xb7\xf3\xef\x11\x02\x9d\x37\x79\xf0\x77\x1f\x3b\x23\x03\x62\xd3\x2f\x0f\x2e\xbf\x5e\xbe\xf0\x19\xf4\xc3\xbc\xd1\x6b\xf6\x2f\x5f\x98\x3e\x5f\xae\xd5\x5d\x6a\x1a\x16\xdc\xc9\x78\xd9\x2d\x7b\x01\xb0\xa5\x42\x07\x09\xaa\xd9\x8e\x90\x12\x43\xc0\xa4\x04\x8b\x6e\x38\x97\xbe\x11\x65\x04\x7c\xea\x3b\x3d\x44\x3d\xa7\x6c\xd3\xe7\x95\xb1\xbc\x79\x41\xbe\x9f\xaa\x6a\x3f\xea\x03\xa8\x7d\x26\x2a\x08\xbb\xb0\xf0\xa2\x48\x3f\xff\xb2\x7e\xc8\xc4\x20\xf9\xd7\x07\x43\xe1\x2f\xfe\x05\x9f\xeb\xc7\xbf\xdd\xe2\xcb\x4d\x63\xf4\xa6\xec\x37\xa8\x3d\xc7\xde\xf6\xb4\x16\x80\x03\x94\xc0\x61\x9a\xe1\xe4\xf1\xe8\xe9\x35\x82\x06\xb1\x76\xed\xd8\x9f\x9f\xbf\xc9\x27\xd5\xbf\xdd\x8e\x8f\x87\xb9\x3d\x57\x23\x32\x57\x14\x18\xa2\x80\x6e\x70\xdf\xe3\xed\x52\x9f\x73\xbf\x5d\xaa\x9b\xdf\x3b\x70\x82\x30\x31\x82\x82\x29\xd3\xdb\x61\x75\xa5\xe1\x9e\xc7\x88\xef\x22\x7f\x57\xd6\x11\xe8\xe2\x5e\x5f\x10\x49\x59\xbc\x47\x0f\xf0\x5e\xbc\xed\x47\x1a\xbc\x00\x0f\x73\x42\x34\x56\x07\x5d\x87\x75\x75\x90\xdd\xb8\x1c\xd5\x54\x0d\xa2\x0c\xdf\xca\x61\x11\x50\xdb\xe7\x68\x62\x6f\x24\x52\xe6\xda\x8f\x71\xe3\x4c\x69\xdf\x11\x5c\x6f\xd8\x05\x16\x14\x0e\xc8\xcd\x07\x42\x56\x2e\xe1\x80\x44\x32\x41\x65\x51\xad\xd3\x14\xdc\x0b\x13\xa4\x11\x0a\x75\x0a\x69\xde\x20\x7d\x8f\xf7\x89\x02\x7b\x69\x0b\xde\x2d\x44\x4d\x60\xa8\x66\x8d\x69\x8b\xf8\x38\x1e\x57\x09\xda\x55\xe9\x1e\x46\xd7\xc6\xed\xa1\xb7\xde\xc3\x7e\xf7\xeb\xd7\xef\x25\xb6\x75\x8a\x98\x3e\xd3\x13\x60\x11\x27\x9a\x75\xd1\x9a\x48\x8c\x1c\x05\x35\x9b\xa0\x99\x19\xa6\xef\xf9\x31\x25\x95\x04\xd3\x91\xf7\xbd\xa5\x3e\xc6\x4c\xb4\x1a\xf7\x07\x81\xef\x65\x70\x27\xe9\xf8\x22\xd6\x3c\x2a\xbe\x5b\x6d\xcb\x70\xd7\x6e\xc1\x26\x17\xef\xa5\xad\xfc\x06\x44\xb1\xc5\x63\x58\x2b\xe7\x17\xd2\x54\xb4\x32\xa7\xb5\x95\xb3\x29\x78\xe9\xf5\xa4\xf7\xd2\xce\xb9\x4c\xb9\xd9\x20\x2a\x63\xd5\xce\x53\x16\x7f\x0a\x24\x00\xac\x2f\xdf\x7e\xc1\x67\xba\xe9\x09\x4a\xa3\x03\x88\x3c\xf0\x0b\xa5\x0a\x13\x79\xd3\x32\x6b\x40\x43\x17\x85\xac\xa8\xfb\xda\x86\x4f\xf6\x56\x07\x04\xb6\x0f\xdf\x3c\x74\xef\xa7\xf6\x02\xd0\x01\x78\xbb\x4a\xfa\xc6\xa3\x9b\xd2\x41\x30\x8f\x49\xa1\xe4\x15\xa3\xb4\x05\x4f\x6b\x39\xa3\xbd\xf9\xd0\xd4\x81\x19\xe3\xe2\x95\x11\x7f\x9b\xe4\x2b\x11\x3c\x2b\x0b\xc7\x6f\xa0\x5e\x89\x7c\xc1\x79\xed\xdb\x17\xd5\xb8\xe7\xd8\x8b\x7c\xeb\x7b\x87\x6f\x99\x3a\x32\xd3\x80\xfa\x56\xb4\x92\xc3\xce\xc8\x2f\x90\xe3\xb2\xfa\x5b\x6f\x25\xbc\x21\xaf\x9e\x25\x01\x48\x5f\x4d\x88\xfd\x80\x5f\xfa\xcc\x9d\x41\x75\xd7\x99\xb6\xa2\xeb\x49\x57\x82\x06\xb9\xf4\xa4\x6e\x94\x9a\xe3\xdf\x5b\xeb\xad\x7b\x6b\x6c\xf8\x41\x5f\xc7\xbd\xc3\x83\x47\x2c\x02\xfa\x0c\xf6\x2d\x3e\xa2\xc7\xc3\x5c\xf2\xcd\xab\x73\xdc\xe7\x7f\x43\xa4\xeb\xd2\x51\xdf\xca\x7a\xeb\xb9\xed\x1b\x4d\x44\x05\xf6\xfb\xf7\xcc\xa9\xe3\x3d\xb8\x74\xbc\xf5\xda\xfd\x5b\xaf\x5b\xbd\xfb\xe5\xf8\xf7\xb8\x1b\xff\x1e\x57\xe3\xdf\xbc\x88\xf2\xce\x2b\xda\x51\xbf\x1b\xff\xd6\xab\xf1\x6f\xee\xb2\xbc\xb9\x9c\x86\x87\x20\xfb\x56\xe5\x5b\x32\xd8\xb2\x81\x18\x39\xc6\x73\xc9\xf7\x7c\x9d\xfd\x3d\xdd\x66\x7f\xf7\xcb\xec\x82\xea\xe6\xe2\xce\x78\xe8\xe1\xcc\xbb\xdf\x66\x7f\x4f\xd3\xbc\xb7\x4c\xf7\x7b\x0e\xa0\x26\x6a\xc7\x9c\x7b\xb5\x04\xda\x0d\x98\xd9\x47\xcd\x2c\xf4\x71\xa1\xfd\xdd\xef\xb3\xbf\x3b\x37\xb8\xb7\xdd\x62\x7f\xf7\xeb\xea\xef\x69\xf3\xf5\x6d\xbc\x03\x34\x52\x75\xe8\x07\x0b\xb3\x86\x45\x0b\xdd\x2e\xad\xbf\xfb\x56\xec\x5b\x0a\xe8\x70\x69\xea\xef\x85\xea\x03\xce\x41\x79\xa4\x04\x61\xb6\x83\x6c\x14\xf5\x5b\x97\xb9\xaf\x88\x51\xe9\x44\x35\xe2\x65\xf6\x6b\x6f\x98\xc4\x99\x41\x8d\xc7\xde\x6f\x08\x16\x67\x45\x06\x9c\xb4\x19\x2f\xe5\x6d\x33\xb4\x6d\xc6\xfd\x3e\xfc\xaa\x5b\x6d\x80\x93\xdb\x35\x98\x63\x3b\x7d\x31\xd8\xdb\xc7\x61\xec\xd1\xde\x87\xe7\x0d\x5a\x02\xea\x7c\xe5\x97\xb7\x2c\xf2\x69\x0d\xda\xf3\x1f\x5e\x33\xc8\xa7\x69\x90\x90\x4a\xa7\x2d\xcb\x60\xe9\x78\x34\xb3\x99\xae\x4a\x6b\xe5\x32\x38\x5b\x9d\xae\x9f\x0d\xba\x27\xcb\xe8\x5c\x26\xd2\xcf\x84\x99\xa8\xfb\x1a\x34\xe6\xa5\xf6\x30\x6c\x96\x7a\x8c\x72\xe9\xa5\x15\x46\xee\x87\xc2\x8c\x0a\xc5\xab\x11\x32\x28\x9c\xbd\xc3\x3f\xa2\x5e\x7a\x7c\x63\x17\x7e\xe8\x26\xf3\x2e\xba\x29\xf6\x76\x89\x53\x90\x8e\x60\x60\x82\x9d\x56\xb4\x1d\xe2\xd3\x50\x77\xd5\x67\x09\xe4\x92\x6d\x91\x8f\x79\x35\xdf\xb2\x16\x59\xcc\xa1\x9a\x3a\xdc\x67\xab\x1f\x71\xaa\x5a\x31\x17\xd3\x9c\xeb\x7c\xec\xf2\xc8\x94\x30\xdb\x73\xb9\x67\x7c\x92\x86\x9e\x8b\x29\xdd\x73\xeb\xc8\x71\x53\x42\xbe\x4e\x95\x48\x75\x34\x48\x3e\x96\x7b\x0f\xae\x42\x84\x59\x35\x6b\x7f\xe2\xd8\x29\x33\xd2\x9a\x49\xb6\xf4\x82\x4c\x56\x8a\xc2\xa1\xa9\xee\x15\x6a\x2d\x28\x5f\xb3\x65\x25\x35\x13\x28\x45\xa5\x3b\xca\x1d\x74\x2f\x71\xb4\xf6\x3e\x4a\x3e\xa6\xb6\xad\x14\x6d\xd9\x02\xeb\x7d\x74\xe6\x65\x02\x39\xe7\x3e\x5a\x79\x74\x67\xc0\x70\xf4\xb7\x85\xb3\x9f\xa5\xbe\x45\xe7\x74\xe9\xd1\xc6\xfa\x43\x49\x46\xf3\xc4\xc4\xea\xf4\x0b\x87\xea\xd3\x16\xd4\xef\xb3\xcf\x15\xce\xb0\xf4\x7a\x44\x8c\x70\x06\x3f\xa6\xb7\xb1\x46\xf6\x6f\xf1\xa3\xe2\x99\xb0\xd3\x23\xeb\x41\x8e\x8e\x44\xb5\xfa\xd4\x88\x74\xdf\x87\xe8\x34\x92\xa9\xc4\xe7\x1f\xc3\x8f\x1a\xce\xdd\xce\x24\x9c\x5d\x09\xb3\x13\x66\x3b\xe7\xbf\x54\x9f\x52\x82\xb4\x9a\x0b\x42\x83\x04\xb2\x0e\x66\x90\xc3\x8f\x81\x5e\x5f\x9e\xbd\x86\x49\x9e\x3d\xce\x0a\x98\x61\xa9\x8d\xd4\x25\xdd\xea\x79\xcb\x88\x36\x81\x39\x7b\x40\x4f\x39\x52\xa6\x35\xad\x51\xe6\x54\xf5\xd2\x74\x9c\xd0\xe9\x7d\xc2\x75\x60\x8d\x32\xf0\x1c\x4a\x96\xb5\xa5\xf9\x5b\x8c\x0b\x26\x6d\x87\x5e\x41\xc9\x56\xe0\xdd\xa5\xcc\x33\x8d\x43\xbe\xfc\x20\xb4\x23\xab\xa1\xf4\x85\x05\x31\xc3\xd0\xd7\x19\x00\x66\x35\x0f\xa4\xdd\x83\x89\x9d\xef\x88\xba\xc5\xdd\x72\x5c\x7f\x94\x81\xd7\x54\x47\x40\xd2\x8b\x59\x0a\xfd\xcc\xe9\x8b\x30\xab\x3f\x7d\x3c\x14\x8c\xbe\xa8\xfe\x53\x9d\x8b\xcb\x58\xe0\x8f\x0a\x5d\x1c\xe4\x0e\x75\x77\x26\x85\x48\x89\x73\xf2\xf2\xbc\x70\xf5\x8e\xc4\x7f\xf3\xb5\xb8\x97\x53\x86\x43\x83\x98\x4d\xea\x08\x13\xf4\xc7\x19\x71\x4e\x11\xe8\x9b\x53\x4a\x30\xfd\x32\x94\x98\x6b\xdd\x11\x56\x64\xe6\x16\x0b\xbf\x37\x1a\x8e\x31\xa5\x16\xb0\xea\x1d\xd4\x1c\x46\xee\x61\xe8\x4a\xb9\x16\x5b\x29\xb7\x9b\x9d\x43\xbf\xdb\xca\xdd\x93\x66\xdc\x2d\xde\x6d\x6c\xe9\xb4\x72\xe3\xd7\x71\x03\x55\x20\xe6\x67\x83\xc3\xcd\xe5\x70\x09\xfb\x72\xe7\x8f\xbf\xbc\xfc\xc9\xba\x51\xd4\x42\xa5\x6e\x50\xbd\x2c\xf9\x2f\x7f\x8b\xe0\x88\x7a\x79\xc8\xaa\x12\xb5\x90\xed\xa3\xa0\xfc\x2b\x2a\xf8\x60\x5e\xbe\xb3\xd0\xbe\x3c\xd8\xa9\x5f\xfe\x11\xc1\x44\xf5\xf2\x8f\x42\xc6\x44\x97\xdf\x50\x70\xa2\x66\xf8\x1a\xdd\x89\xe0\x18\x2b\x51\x3c\xbd\x88\x61\xa5\x92\x48\x4b\xdc\x7d\x3e\xbc\x92\xfa\x02\xf2\xe2\x6d\xca\x8b\x9a\xa7\x2f\x2f\x54\x54\xc2\x40\x1b\xe7\x86\xcd\x47\x01\x99\x66\x96\x80\x13\x73\xe2\xcb\x9f\x87\x1a\x54\x17\x9f\x04\xd8\x9e\xbb\x70\x68\x1b\x10\x34\xc5\x26\xfb\xcb\xff\x6a\x8c\x29\xaa\x5f\x40\x48\x4f\x53\x4d\x47\xab\x18\x4e\x9f\x2e\x78\x2e\x4b\xbc\x0b\xc1\x81\xeb\xef\x55\x42\xf9\xb9\xff\xdc\xdd\xcf\x1d\xc2\xb0\xef\x64\xa5\x20\x4a\x70\x4d\xd4\x12\x16\x55\x24\x49\x8a\x50\x88\x86\x33\xec\x37\xf4\x44\x00\xd6\xc0\x84\x28\xab\x17\x9b\xe2\xc7\x22\xe9\xbf\xbb\x05\x45\x2c\x2a\x5f\x8d\x92\x67\xad\x7c\x2b\xbf\x5e\x1d\x2f\x7e\xcc\x61\xef\x60\x2a\x20\x5f\x9f\x56\xaa\xd4\x8c\xdd\xb6\xf4\x06\x16\x31\x25\x10\x33\x15\x82\x2e\x20\x3d\x44\x39\xc3\xae\x4a\x40\x8a\x17\x84\x5b\xa5\x98\xee\xda\x91\xa8\xca\x9e\x76\x22\xd4\xe6\x14\xab\x1a\xbe\x49\x06\x59\xc7\xe2\x4a\xa9\x87\x57\x14\x5c\x34\xc4\xe8\xd4\x31\x22\x90\xc2\xce\x05\xa1\x3a\xaf\x8d\xb1\x68\x23\x42\x6d\x44\x47\x37\xbb\x15\xf6\x98\xc8\x0c\xe9\xee\x96\x16\x1d\x15\x58\x91\xbc\x5b\x57\xe3\x25\x46\xbc\xab\x2a\xbe\xd9\x28\x7c\xc7\xb1\xc6\xdd\xad\x8c\xe4\x9a\x7f\xee\x90\x3b\x29\x5f\xe4\x93\xcc\xea\xa1\x88\xaf\x5b\xbc\x39\x14\x4b\x60\x11\x87\x48\x67\xa1\x4b\xf2\x13\x8c\xcc\x0e\xc9\x85\x47\x83\xdf\xdc\xd7\x15\xd5\x3b\x7a\x4a\x74\x01\x55\xb5\x53\x21\x31\x74\x82\x3d\x86\x21\xd5\x91\x90\xa0\xdd\xe9\xdd\x05\xe9\x77\x9e\x44\xda\xe0\x05\x6a\x8c\x4a\xf4\x8e\x1a\xdd\x3a\x5b\x10\x11\xc2\x2e\xd7\x3d\x66\x35\xbc\xb6\x9c\x69\xff\x62\x4e\x85\x72\x45\x4d\x6c\xdd\xec\x24\x02\x44\xdf\x4b\x11\x2a\x37\xf1\xf2\xe9\x3d\x15\x8c\x7d\x77\x08\x32\xc0\x57\xc2\x79\x4a\xd3\x73\xf1\xe6\x50\x42\x71\xd9\x58\x05\xe2\xd2\x15\xd8\x06\xa8\x0a\xe0\x30\xae\x70\xb0\xfa\x82\xba\x14\xd7\xb3\xe6\x0c\x14\x27\xe6\xc8\x24\x2f\xaa\x6a\x1a\x19\x72\x64\x1b\x8f\xe0\x2a\x07\x10\xf4\xd6\xeb\xc0\x75\xe0\x7a\x29\xee\x8d\x2d\xc6\xdc\x68\x21\xff\x9a\xd6\xe9\x35\xab\xe2\xe9\x87\x5e\xad\x99\x00\x2c\x54\x04\xa1\xde\x7c\xf1\x7b\x51\xb2\x77\x2b\xc6\xed\x05\x88\xe6\x15\x82\x18\xef\x38\x20\xa0\xc9\xfb\xe7\xee\x24\xbe\xbb\x03\xf3\xfb\x3b\xb6\x84\x31\xde\xdc\xdd\x8e\x0f\x84\x90\xdb\xd4\x69\xd0\x70\xae\x04\x3c\x57\xfc\xf9\xc7\xe2\x67\xb2\xa8\xe9\xd9\x2d\x93\x76\xcb\xa1\x5d\xab\xf5\x1e\x22\xbd\x4a\xa0\x46\x19\xec\x2d\x36\x51\xc5\x63\xb4\x9f\xe4\x9e\x2e\x66\x80\x8a\xae\x35\x4d\xcc\x83\x94\x62\x20\xb8\xd0\x44\x75\xd4\xb3\xb4\x84\x8e\x2e\xcd\x53\xb0\xc1\x40\x34\x80\xe0\x39\x28\xff\x70\xaa\xa0\xc6\xa4\xbb\x43\x9f\x20\x2a\x52\x4a\xc0\x36\x9b\xb4\x2e\xe0\xc5\xba\xa8\x0f\x7c\xe8\x2d\xfd\x64\xf6\xa4\x3f\xa8\x8d\x29\x7a\x77\x87\x8a\x61\xec\xee\x12\xab\x6b\x4a\x92\x11\x89\x56\x21\x0a\x0e\xea\x89\xee\x9b\xcf\x53\xab\xa2\xdd\x54\xf7\xc0\x29\x33\x29\x33\xad\x76\xfa\x39\x91\x96\x74\xc8\x05\x10\x55\xfa\x12\x00\xd4\xbc\x54\x33\xfc\x84\x84\x21\x51\x33\x7a\x8e\xac\x7d\xd6\x5f\x34\xb8\x82\xf6\x5f\xdc\x8a\xc6\x2e\xb3\xc4\x5e\x45\x40\xf8\x62\x68\x57\xf0\x99\xcd\x3f\x66\xce\x45\x81\xc0\xff\x23\xeb\x4a\x97\x9c\x67\x79\xe5\xff\xdc\x25\xb1\x89\xcd\x13\x6c\xf9\x63\x99\x8c\x73\xf5\xa7\xd4\x2d\x61\xcf\x7b\xaa\x66\x50\x8b\x60\xf6\x45\x6c\x62\x9f\x05\xd9\x54\xc2\xc7\x36\x0d\x5f\xa1\x20\x44\xdc\xf0\x47\xc5\x2d\x53\x6c\x2d\x10\xa0\x6b\x50\x5a\xe9\xe6\x4a\x28\xf1\xf0\x02\x56\x88\xed\x1c\x35\x1f\x51\x7a\xac\xff\x25\x7e\x62\x86\xdd\x2b\x1a\x69\xd3\x3a\xfa\xc6\x92\x50\xd9\xca\x3b\x47\x6a\x60\x7e\x85\x02\x67\x48\xd3\x46\x2f\xb6\x58\x70\xda\x84\x10\x6e\x36\x3e\x24\xfe\x0a\xd4\x95\xab\xd4\x7a\xbb\xb2\xf1\x89\x77\x45\xa7\xc5\x6a\xc7\xfd\xc8\xd7\x68\x1f\x45\xab\x49\x29\x61\x21\x65\xf5\x05\x85\xe7\x2a\xa7\xbd\x42\xa9\x31\x5e\xc3\x82\x72\x70\x05\x69\xe8\x8a\x7f\x5b\x2d\x7c\x80\xc0\xfc\x6d\x39\x6a\x7d\xaf\x94\x05\xaa\x6f\x7e\x00\x4e\x70\xa2\xc0\x17\x0d\x9c\xbb\xec\xd1\x12\xeb\xe4\x53\x2e\xc7\x18\xb3\xeb\xc4\xb6\x5b\xa7\x24\x99\x37\x9d\xc1\xa0\x16\xd4\x89\xb5\x16\x2d\xa4\x5a\x47\x0d\x7a\xf5\x61\xc6\x8e\x3e\x12\x3c\xd2\x06\xb4\x09\x66\xff\xaf\x50\x1b\x94\xfb\x2b\x88\xf6\x7b\xe3\xa6\xb7\xa2\x34\xdf\x3a\xf0\xda\x12\x0e\x9c\xbc\xfc\x51\x99\x57\x68\x2e\x02\x34\x17\x00\x9a\x57\x9e\x36\x6a\x8e\x87\x80\xb2\x6d\xf1\xea\x3d\xda\x0a\x03\xa1\x2a\xb1\x1e\x5b\xa1\x15\x33\x60\x1a\xce\xa9\x08\x0a\xc8\x89\x7d\x2c\xdb\x6d\xbc\x6b\x69\xb9\x32\x02\xcc\xc8\x06\xe5\x2c\xb7\xbd\xb5\x36\x13\x0f\x46\x9a\x60\x78\x6e\xf8\xbb\xf3\x40\x63\x7c\x6f\x5d\xc7\xd4\x7a\xe3\x10\x54\xbf\xd9\x7d\xb4\x52\xf4\xa7\xf4\xa2\x9e\xf7\x09\x12\x62\xa7\x58\xd9\xf9\x90\xcc\x2b\xf4\x4c\xb3\xd1\x7c\xa5\x9d\x82\x8e\x61\x46\xac\xe7\x11\x87\x9e\xdb\x2d\x9d\x7d\x87\x81\x80\x5a\xec\xe8\xdc\xfa\xaf\x06\x39\x23\x85\x3f\x31\x63\x30\x57\xca\x15\x79\xc5\xc2\x8a\xf7\xc3\x82\xfb\x41\x75\xfb\x91\x72\xcb\xa4\x9f\xa1\x51\xec\x65\x1a\x88\x40\x39\x9a\x01\xf8\xb7\xd5\xed\x7a\x31\xf2\xc7\x9b\x7e\xf7\xa7\xbb\x47\xfd\xf2\x00\x31\xf9\xec\x30\xf0\xeb\x67\xbf\x1a\xa3\x66\xe9\x19\x32\x83\xf8\x42\x05\xd5\xeb\xf9\x78\x4d\x8f\xd7\x74\x3c\x5e\x53\x7d\xbc\xe2\xe3\x15\x03\x44\xc9\xa8\x42\x3c\x9f\xac\xe2\xd7\x31\x94\x2b\xa7\x62\x28\xf6\x98\xb2\xc2\x2a\x36\x5d\x7d\xc5\x50\x29\xeb\xc5\x30\x16\x73\x88\xf3\xe5\xa2\xd1\x8c\x08\x00\x0c\xab\x2c\x29\xeb\xb6\x61\xd3\xf2\xe9\xac\x4e\x97\x1c\x63\xc6\x64\xcc\xd4\x87\x37\x78\xab\xc4\xf0\x4b\xb4\x04\x89\xf1\x70\x82\xe1\xe4\x51\x21\x33\xfc\xbf\xa7\x4f\xf9\xda\x52\x9b\x56\xe7\x3e\x7c\x88\x40\xb9\x7c\xf9\x00\x31\x9c\x14\x7d\x6d\x0c\x5f\xfa\xf8\xb4\x53\x97\x44\x10\xd3\x15\xbd\x3a\xe2\xf7\x2c\x9e\x39\xcf\xa2\x5d\x51\x9c\xf4\xff\xad\x95\x39\x4e\xef\x5b\x44\xec\x4b\x1c\x91\x47\xc6\x4e\xdd\x55\x4e\x3a\xd6\x0a\x07\x48\x0f\xe7\x70\x46\x75\x38\xcf\x2a\x95\xc4\x59\x27\xb7\x09\x00\x87\x3d\x09\x72\xac\xd1\xe1\x18\x20\x9d\xdd\x2e\xd8\x06\xfc\xfe\x71\x64\xb1\x1b\x17\xaf\x5e\x71\x96\xa2\x11\x55\x5f\xe3\x55\xda\x71\xb6\xf2\x54\xb0\x90\xca\x2f\x28\x8a\x3c\x5a\xf9\xc6\x39\x4b\x03\xe5\x3b\x82\x8a\x4c\x70\x8f\x50\xe9\xa7\xc4\x9c\x5e\xb3\x8e\x88\xfc\x4a\x8b\xeb\x5e\x21\x56\xc7\x69\xc7\x2f\x88\x7f\x0e\x18\x43\x63\x9e\x2b\xeb\x59\x9e\xeb\x81\xea\x7d\xd3\xad\x3c\x18\x19\x3f\x8c\xbe\x27\x66\x2f\xca\x9c\x66\x98\x7b\x1c\xbf\xec\xf6\x4b\x0e\x2b\x08\x43\xc8\x3e\x1e\x0c\xc8\xc8\x3b\xc7\x4f\xdc\x93\x2c\x91\xe4\x63\x84\x73\x44\x3c\x81\x05\x33\xdd\xe2\xc2\x59\x82\x52\x10\xf6\x18\x31\x7b\x92\x9a\x05\xd4\xa7\x49\xcb\x23\x53\x48\x8a\x5a\xa6\x5b\x18\xe5\xa2\x22\x74\x54\x01\x41\x85\x0c\xdc\xbf\x9e\x61\xc3\xb7\x5f\x00\x22\x13\xb6\xa5\x3d\xd9\x4f\x57\xb2\xc1\x5c\xbf\x8f\x0a\xb4\xf1\x0d\x44\x03\xed\xf1\xe7\x5d\x98\x57\xdc\x18\xac\xf6\x6d\x51\xf9\x3d\x2c\xcc\x2f\x56\xed\x7d\x8a\x87\xe0\x2b\x6c\x36\xbd\xa0\xa8\x4f\x13\xc3\x4e\x3c\xee\x57\x6d\xdb\x63\x6d\xec\x8c\x01\xcb\x05\xdc\x01\x07\xbc\xb8\x6f\x68\x05\xfb\x8e\x16\xb6\xef\xa8\x09\x4a\x5e\x19\x9a\xaf\x5e\x71\xef\x4b\x89\x2a\x78\x44\x1d\x2c\xa3\xcc\x36\xe0\x2a\x42\x4e\x0b\xea\xa3\xbc\x58\xb9\x41\xad\x7c\x04\x2f\x08\x5f\xca\xa2\x80\x50\x81\x4a\xb0\x1a\x53\x9e\x3a\xc0\x46\xf4\x12\x25\x72\xce\x1f\xcb\xd2\xed\x06\xc5\x0b\x0f\x9a\xa9\x49\xd7\x5b\x68\x60\xcd\x3b\xd0\x31\xf4\x1a\x6b\x29\x74\xe6\xc7\x0b\xa5\x6c\x89\xa6\xfd\x8c\xf1\x29\x16\x30\xfb\xb3\x84\x37\x82\xdb\x59\xf9\xca\x5e\x21\x45\xc7\x22\xb7\x39\x25\x38\x06\x05\xcd\x02\x4a\xd1\xc6\x0a\x8f\xa7\x28\x48\x58\xec\x50\x30\x9d\x61\x67\xbd\x29\x25\xad\x71\x93\x25\xcb\x13\xbd\x72\x29\xe9\x7a\x98\x00\xac\x79\x96\x9a\xfd\x2e\x3a\xb9\x3c\x1d\xf6\x2d\xed\x8c\x6d\xe1\x55\x42\x73\x2e\x53\xdc\x07\x2a\x69\x38\x59\x8b\x6c\x17\x27\x3b\x4e\xcf\x18\x77\x8b\x94\xdc\x5f\x05\x81\x85\xbd\xa6\x70\xc3\x1e\x43\xd9\xc2\xbe\x84\x9d\xfd\x62\xf1\x47\x0f\x08\x25\x9f\x4f\xbe\xd3\x0b\x7e\x4f\xd3\x1b\xf5\xa8\x14\xa9\x29\xe3\x11\x19\x30\x2d\x35\xea\xec\x23\xd7\xf7\x45\x65\x3f\xe3\xce\xc3\x7c\xfe\x09\x7b\x98\x87\xab\x6f\x2a\x93\x8c\x8f\x20\xce\x52\xa2\x57\x93\xd3\x62\x45\xac\xc6\x65\x3c\xab\x4d\x9c\xea\xad\x72\x90\xf7\xda\x01\x8e\x29\x68\x7f\x9c\x7c\xff\xf3\xc9\xf7\xcf\x27\xdf\xeb\x93\x2f\x8b\x8a\x03\x90\xc7\xec\x07\x06\xb6\xaa\x09\x9a\x47\xe7\x27\xd9\x00\xa4\x68\x58\xb2\x35\x50\x9e\x89\x75\x52\x01\x91\x3f\x55\x64\x74\x45\x75\xaf\x6d\xc8\xec\xbc\x34\x93\x0d\x78\x5a\xab\x5d\x2c\x54\x24\xe6\x4c\xc4\xaa\x72\x6d\x75\x5a\x4b\x7a\x69\x4e\xc1\xbb\xd1\x44\x78\x0d\xe5\xc5\xba\x01\x6d\x47\xf8\x19\x6b\x74\xb1\x25\x8c\xed\x4a\x58\x07\x88\x1a\x11\xab\x50\xf3\x34\xb5\x91\xa4\x06\xb5\xfc\xaf\xc8\x81\xa2\xb1\x92\x28\x79\xf6\xba\x1a\x1c\x76\xee\xd6\x44\xe2\xd8\x5a\xe7\x3c\xc4\x90\x36\xd8\xa6\x32\x5b\xec\xfa\xcf\x96\xd5\xd1\x91\xf7\x19\xc6\x7d\x78\x26\xb7\x0d\xd4\x1c\x21\x8a\x40\xdf\x9b\x5b\xeb\x6c\xfa\x6c\x2e\x53\xe6\xd9\x8d\x0b\x9a\x67\x83\x53\x67\x3f\x88\xfc\x4f\x2c\xaf\xf8\x21\x18\x52\xba\x32\x45\xc4\x5c\x71\x16\x0e\xc4\x21\xc6\x96\x8a\xe2\xc7\x73\xe0\xfb\xd0\x9e\x73\x79\xbc\x96\xfd\xf1\x4a\x8f\x57\x0a\x93\xf6\x83\x29\xec\x3a\x34\x81\x18\x6b\x64\xe5\x7a\x52\xd2\x0c\x80\x8a\x0f\x25\xed\xf1\x4a\x4f\xfd\x7f\xaa\xa7\x69\x98\x7c\xa9\x1e\x90\x3b\x00\x80\xd4\xdd\xf0\x4a\xcf\x62\xe6\x70\x56\xe2\x2b\xe9\x68\xa7\x68\x7c\x50\x52\x36\xa2\xb5\xdc\x00\xb3\x50\x19\x27\x38\xce\x63\xd0\xb4\x5d\x19\x97\xcf\x7a\xb9\xa2\x56\x1c\x65\x84\x26\xaf\xa9\x02\x4e\x41\x1b\x15\x4a\x18\xac\xad\x19\x2a\x36\x0f\xa8\xe4\x1d\x68\x63\x64\xc4\x9e\xd3\x05\x1e\x5e\x57\xdc\x70\x04\xf4\x7e\x3b\x3d\x29\x4f\xa7\x27\x5a\x2b\xd6\xba\xd3\xb4\xd2\xec\x6a\xbe\xbd\xdf\x48\xc8\xd5\xa9\xc1\x60\x42\x7d\xfd\xdb\x2b\x4f\xf2\x57\x9a\x6e\x10\xf5\x97\xdc\xa8\x90\xce\x0e\xbf\xfe\xf8\x70\x5b\x38\x57\xa9\x29\xcd\xb3\xf6\x20\x20\x94\x09\x01\x29\x97\x03\xee\x71\xd8\x16\xa7\x5c\xb5\x02\xae\x2d\x8d\xdf\xf1\x6a\xc6\x2b\xcd\x31\x4d\xb2\xb9\x76\xf3\x3b\xaf\xdd\xa9\xb2\x95\x94\x4d\x24\xcd\x39\x82\xf4\x29\xf1\x83\xf8\x52\x43\xe7\x8c\x09\x6f\x58\x91\x72\x25\x46\xd1\xc6\xe5\x12\x85\xdc\x0a\x02\xc4\xf1\x01\x22\xec\xe0\x00\x72\xb1\xce\x11\xbd\xda\x67\x9a\xa3\x05\xa5\x58\xa6\x38\x60\x72\x84\x5e\x30\xe9\xec\x2b\x41\xa0\x48\x2f\x3c\x70\xa6\x54\x63\xa9\x39\xbf\xf0\x61\xb8\x17\x96\x51\x40\xad\xfe\x2c\x1d\x1a\x1a\x08\x2c\xf7\x09\xbd\xf7\x54\x36\x1a\xb1\xec\x5e\x38\x77\x54\x8a\xee\x28\x2d\x6c\xc3\x49\x65\x84\xf4\xd6\x2c\xd7\x76\x81\xba\x94\x83\xca\x47\x00\x16\x64\x0e\x10\x5a\x48\x59\x2d\xb5\x3d\xd1\x0d\x67\x44\x29\x3f\x23\x3c\xcc\xec\x82\xb1\x15\x93\x72\x9c\xd8\x18\x73\xb4\x82\xcd\x50\xc0\x0d\x40\x57\xf8\xc6\x2f\x9a\x02\x5a\x9a\x72\x7a\xc6\x85\xb4\x5b\x65\x77\xf8\x87\x61\x91\x67\xeb\xc1\x53\x4e\x0b\x67\x8a\x40\x4c\x47\x82\x82\x85\x57\x32\x2d\x8c\xda\x2d\x8c\x34\x66\x33\x69\xcd\xe8\xe4\x48\xa1\x3a\xf1\x51\x74\xa3\x1e\xc3\xac\xa2\x20\x08\xcb\x2c\xdf\xbc\xd5\xd2\xcb\x88\xcf\x36\x0b\xe9\x22\xfc\x6d\xf3\xd2\xcf\x9b\x79\x6a\x4b\x71\x29\x6f\x5b\x78\xbb\x9d\xdf\xb6\x53\x5c\x63\xf3\x88\x6c\xb5\x15\x86\x2b\x47\xee\xcc\x41\xa9\xd1\xa2\x0f\x6f\x11\x75\x8b\x48\x8b\xd7\x86\x95\x71\xa3\x3f\xc8\x23\x07\xdb\x4a\x73\xc4\xac\xfd\xf9\x8a\x12\x21\x81\x95\x09\x9a\x19\x14\x30\x2a\x61\xad\x00\x35\x07\xf8\xbf\x85\xe5\x02\x7f\xda\xb1\xe4\x97\xb0\xeb\xe6\x74\x73\xd0\x0c\x20\xdc\x3f\x1d\xd3\x6e\x63\xc5\xee\xab\xe7\x69\xb7\xbe\x84\x43\xca\xae\x43\xba\xad\xf9\xf8\x72\x0f\x2b\xf8\x1e\xef\xd1\xb8\x00\xba\x81\x9d\xd2\x48\xf2\xa9\x44\xda\x5f\x18\xe6\x12\xe7\x70\x20\x3e\x8e\x00\x97\x18\x66\xe4\x96\x72\xc3\x89\x4f\x29\xc0\x58\x55\x81\x02\xeb\x80\xae\x41\xe1\x8e\x15\x73\xc0\xa3\x60\x92\x0a\x5c\x5b\xc8\x6e\xdf\x50\xae\x3b\x84\x94\xb4\x8f\xc5\xe3\x74\x5d\xf1\xb2\xf7\xa5\x94\x90\xe1\xbc\x16\xdb\x23\xc3\x01\x6e\x6d\xbc\xd2\x8e\x90\x59\x91\x77\x8f\xc8\x4e\xe7\x83\x17\x18\xd3\x9a\x00\xb0\x4f\xfd\x4a\x82\xe4\x0a\x07\x41\x29\xa9\x75\x64\xcd\x71\xa0\xe4\xfe\xa7\xa9\x57\x5f\xd0\xda\x4b\xc4\xd2\x73\x2a\xde\xb5\x17\x6e\xf8\x13\x54\x3a\x79\x26\xf8\x78\x0d\xc9\x40\xcd\xc0\xf6\x34\xf0\x4b\x5a\xd8\x18\x80\xcc\x4d\x89\xc1\xfc\x2e\xc9\x43\xe9\x0b\xe8\x54\xc2\xc4\x4e\x57\x71\xac\xfc\x62\x0e\xdb\x41\x20\x74\x36\x73\x16\x94\x4a\x7c\xe5\xc0\xf5\x2b\xe0\x13\x74\xe9\x1e\x2f\x5b\x26\x4f\x25\xda\xf6\x87\x22\xb1\x30\xd9\xfb\x97\x78\x38\xcd\x61\x8a\x86\x2c\x3a\x87\x55\x84\x12\x8f\x22\xf2\x62\x69\x15\xb3\xaa\xec\x99\x4a\xf4\xd1\x03\xc8\xf2\xaf\xad\x52\xe8\x6d\x2b\x81\x91\xff\x04\xee\xb2\x03\x36\xf3\x84\xd2\x97\x02\x0e\x85\xc5\x76\xe0\x08\xe0\x97\x85\xfa\x46\x01\x96\xcd\x7b\xef\x62\xf1\xdf\xac\xaa\x94\xed\xc3\xf1\x8e\xe1\xee\xb7\xad\xba\x54\xaa\x49\xae\xa9\xa0\xba\xd7\xe9\x61\x1d\x77\x5d\x71\x52\x83\xe0\x93\x01\x10\x35\x25\x0c\x41\xd1\x49\x7a\x46\xd0\xd1\xa0\xea\xba\x60\x54\xab\x2b\x4e\x68\x28\xf0\x4e\xa7\x72\x67\x20\x55\x3c\x35\x0f\xe0\x6b\x29\x18\x46\x19\xa6\x9d\x2d\x50\x24\xa8\x27\x0a\xba\x21\x6e\x4b\xa5\xba\x7e\x38\xa6\xd6\xd5\xb2\xa4\xae\xa7\xd5\x4f\x43\x16\x54\x65\x6a\x41\xaf\x1e\xaf\xd6\x74\x84\x9b\x8c\x55\x2b\x87\x36\x54\xae\xda\x5e\x56\x33\x6a\x7b\x75\x04\xd7\x12\xb6\x00\x71\xb9\x19\x6b\x58\x8e\x18\xf7\xb6\xc5\xcc\xcf\xa1\x36\x5e\x01\x85\x35\xa5\x57\x17\xa7\x5e\x62\xd5\x51\x4d\x15\xc1\xd3\xb8\x10\xf7\x4a\xcd\xca\xb0\x39\x3f\xb6\x54\xf8\x74\x8b\x92\x6b\x68\xfa\x89\x30\x8e\xb4\x93\x2b\x30\x15\xff\x7a\x68\xbf\xe3\xfb\x5f\xfc\xfc\xcb\x1c\xf9\x65\x0e\xfc\xda\x60\xfe\x4b\xf2\x65\xa1\x7d\x31\x47\x4c\xdf\xaf\xd5\xc6\x7f\x10\xa0\xfe\xa1\xbf\xc8\x8f\x57\x0e\x4f\x18\x4f\x2b\xd1\x1c\x9e\x31\x63\xa4\xc8\x61\x9a\x6c\x42\x45\xe8\x0e\x20\xa9\x82\x60\x0d\x15\x67\x81\xd4\xd4\x28\xe6\xb0\xc0\xe0\x6a\x8f\x01\xcd\x84\x01\x31\x72\x18\xc7\x64\x39\xa3\x53\x34\xe2\x6e\x4e\x04\x3d\x61\x0e\x0b\xab\x71\xc6\xad\x35\x52\xa4\x3c\x43\x7f\xc8\x28\xf3\x1c\x16\xd4\xe5\x0c\x0d\x0c\x4a\x0e\xec\x05\xaa\xbc\xc0\xa1\xc8\xd0\xe9\xa8\x8d\x0f\xb9\x46\xa4\xa0\x05\xad\x0d\x40\x68\xf0\x19\xf5\x13\xaf\xc6\xbf\x72\x40\x52\xdf\x91\xa6\x75\x8d\x0a\x2d\xa6\x6f\xc6\xef\x3d\x72\x13\x29\xd9\x9e\x31\x74\x02\x39\x3d\x26\x86\x11\x97\x8d\x36\xd1\xd3\xb9\xc5\x95\x3a\xcb\x81\x77\x23\x3a\x17\x50\x80\xed\x7e\x05\xf6\x7b\x5b\x0b\x7b\xb0\x1c\x36\x68\x4d\x52\xb0\x8d\xa6\x91\x99\x27\x18\x6d\x41\x2c\xd2\xfb\x12\x8d\x14\xa3\x38\x72\x91\xc3\xfe\xa6\x69\xf6\x58\x85\x23\x1d\x09\x56\x86\x29\x26\x62\x45\x50\xcc\x9d\x68\xe2\x4d\x7a\x63\xa0\xbb\x95\xd7\x31\x8b\xcc\x2c\x93\x63\x2e\x5e\x4e\x07\x54\x3e\x29\xf8\x67\x95\x09\x87\xc6\x8c\x42\x16\x23\xb4\xca\x73\x20\x6b\x7d\xf8\xc2\x71\x31\x98\x17\x3f\x22\x5a\xd7\x67\xcf\x4f\xa2\xa9\x3f\x23\xd1\x28\x1e\xeb\xbf\x14\xd8\xd8\xa1\x10\xda\xf6\x81\x9a\x7f\x42\x7f\xdf\x4c\xb3\x1d\x80\x50\x50\x20\xa2\xe7\xd0\xa6\x80\x4f\x9a\xe7\x45\xf3\xb2\x6c\x94\x4e\x0c\xc4\xd1\x8c\xda\xea\x9f\x26\x4b\x7d\xb3\x2c\x6d\x50\x20\xa1\x60\xb8\xb5\xfd\x38\xa0\x72\xa1\xd3\x40\xe5\x77\x2d\x45\xa3\x4c\x54\x6b\x82\x4a\xdd\x7c\x3f\xc2\x21\xbf\xeb\xf4\x9b\x03\x8a\x02\x91\xd9\xac\x30\x3a\x11\x20\xc7\x3b\x27\x08\x39\x74\xab\x46\x9d\x67\x82\x00\x46\x6e\x76\xdc\xb7\x79\xe5\xf0\xf3\xa0\x4a\x80\x87\x6b\x06\x50\x2a\x97\x2a\x04\xb0\x6e\xbd\x4b\x26\x38\x8a\xb4\x68\x1f\xc9\xd1\xcb\xd1\x8b\x73\xc5\x88\x25\x8c\x2b\x54\xa4\x66\xf5\x81\x71\x65\xef\xe7\xda\x96\xc9\xe1\x17\x06\xd7\x50\x33\x14\xec\xbc\xf2\xe8\xbf\xd4\x6e\xfe\xd5\x78\xc7\x00\x03\x7b\x1f\xa0\x88\x62\x0c\x4f\x4c\xf5\x73\x44\x6b\x8e\xe1\x48\x74\xcc\x59\x58\xc6\x44\xd8\x5f\x4d\x7e\xe5\x38\x2f\x1c\x85\x73\xc4\x1c\x14\xa4\x90\x7a\x4e\x61\x2b\x44\xcd\xb4\x2f\x2a\xce\x18\xbc\x7e\x75\xb4\xf3\x68\x57\xa6\x92\x64\xa5\x95\x7e\xa1\x6e\x45\x8e\xe2\x4a\x39\x32\x2b\x1a\x61\x70\x4c\x76\x0c\x31\x31\xfb\x22\x5b\x8e\xbe\x05\xa6\x88\xf1\xfe\xc0\xe5\x2f\x8c\xb1\x1d\x08\xec\xa2\xb8\x32\x97\x35\xbf\xfa\x4d\x2d\xa1\xfb\x8a\xbf\x42\xd3\xe7\x40\x8a\x11\xd4\x6f\x97\x7a\xf9\xd0\xa5\xba\x17\xd7\x86\xb1\x32\xa8\x85\xf1\x1c\x45\x88\x35\xa4\x96\x16\xa5\x1a\xf7\x34\xe9\x28\x03\xf0\x86\x66\x70\xad\x36\x98\x57\x78\xd3\x55\xe2\x49\x4e\x9b\xf5\xbe\x04\xec\x2c\xd3\x56\xc7\xef\xbb\xe5\x84\x49\x39\x19\xf2\x7d\xe6\xc1\xb6\x99\xe8\x72\x6b\xeb\x88\x39\x1d\x87\xf5\xd9\x40\x5e\x4e\xc9\xfa\xab\xe4\x17\x2f\x06\x1c\x09\xa4\x98\x00\x62\xe2\x50\x4e\xd6\x4e\xf9\x6a\x21\x85\xd8\x9c\x7e\xd8\xf9\x58\x81\xcb\xa5\x32\x92\x0c\x3a\x6d\x05\x16\x8e\x70\x58\x57\xca\xc1\x4f\x42\x3b\x32\x6b\xae\x84\xe6\x83\x98\x4c\x30\xa6\x6b\xc5\x4c\xb9\x6e\x83\x33\xe1\x1f\x7b\x0e\xc7\xc0\x71\x00\x76\x22\x8e\x4f\xc7\xe8\x48\x14\x91\xbe\x69\x3e\xd1\xda\x04\x5f\xc4\x67\x2c\x9a\x54\xb1\x11\x5c\x7c\x04\x17\x9a\x32\xd3\x5c\x98\x33\x3a\x48\x58\x99\x8a\xf8\xd6\x62\x16\x31\xd3\x32\x41\x7c\x9a\xa7\x70\xca\x82\xb1\x46\xb8\x63\xaf\xd4\x42\x90\x62\x19\x23\xe5\x13\xf2\xdb\x7e\xfd\x22\xf6\x87\xcd\x1d\xb2\x1c\xd6\xe9\x8b\x15\xa5\x1c\x87\x17\x3f\x83\xd5\xf9\x54\x96\x12\xab\x91\xc9\x73\x03\x7b\x2e\x59\x4a\x7a\x76\x6c\xd2\x2b\x9c\x18\x22\xf6\x92\x29\x96\x5d\x0c\xfb\x48\x29\x2e\x5c\x29\x1a\x21\x41\x2d\xe3\xa8\x34\x52\x12\xd6\x32\x15\xe4\xc8\xe3\x27\x99\x93\x3c\x25\xee\x11\x15\xf4\xd8\x39\xc9\xcc\xb7\x3b\x5e\x59\xbc\xb2\x5c\x75\xa5\x71\xe5\x34\x4b\xab\x68\x1b\xd2\x6d\xd3\x2e\xb3\x43\xd5\xee\xd4\xfa\x14\xe9\x96\xe9\x1f\xf3\xe5\x63\x6c\x2c\x97\x85\x15\xf1\xc7\xc6\x24\x80\x66\x60\xe4\xde\xe7\xbe\x57\x6f\xac\x3b\x3a\xe2\xf4\x1e\x9f\xb2\x8b\x92\xcf\xd5\x13\xb2\xf3\x53\xd1\xa9\x3f\xe7\xae\xc3\x78\x9f\x5c\x87\xc4\x2b\x77\xfc\x68\x15\x71\xbc\x10\xfb\xca\x10\xe7\xb3\x89\xf2\x4a\x3d\x2a\x7d\x89\x99\x33\x36\x40\x56\x8b\x9e\x66\x9a\x76\x61\x81\x0c\x33\x14\x0a\x56\x47\x70\xc9\x0e\xa4\x01\xa1\xe8\x14\x7c\xef\xbf\x7f\xfd\x77\x0f\x11\xa2\x62\x1f\xf2\x20\x16\x7f\x72\xdf\x78\xc4\x2b\xf7\xfd\x1d\x07\xa5\x70\xd3\xf7\xb7\xd9\xb8\x85\x3c\xa9\x38\x5c\xe1\xb1\x4a\x3d\x56\xe7\x0a\x4d\xec\xba\x01\xd4\x89\xe3\x67\xbf\x57\xd0\xae\x15\x6c\x44\x52\x99\x61\x7b\x4b\x1c\xd8\xef\x9d\xb5\x3d\x35\xe0\xfd\xfe\x83\x07\x97\x3c\x1a\x32\x85\xf2\xf4\x9f\xe5\xf6\x9d\x69\x08\x22\xfe\x4f\xdc\xed\x3d\xa6\x0b\xbb\x3b\xac\x51\xe6\xce\xcd\x3a\x73\x5e\xe8\x8b\xd5\xcd\xee\x2b\xb4\x19\x8b\x88\x23\x6e\xd7\x8e\x32\x54\x73\xc0\x84\x7b\xeb\x68\x5d\x3e\xe9\xd8\x01\xb2\xbe\xa3\x0f\x91\xaa\xff\xc2\xa0\x0e\x54\x45\xe6\xd5\xef\x48\xd1\xa9\x5f\x9f\x57\x87\x6c\x13\xd4\x7c\x3e\x63\xc6\x4f\x26\x18\x9e\x4f\x0e\xc7\xe7\x53\xe8\x0c\xe6\x14\x7c\xf4\xa5\x04\x72\x9a\xac\xcc\xed\xc2\x7c\x62\xeb\x3a\x9f\xd6\x11\x9d\x7c\xd9\xe9\x95\xcf\x7a\x50\xc4\x38\xb9\xc8\x90\x4f\xca\xe9\xa7\x9f\x71\xc9\xe7\x67\x8d\x2a\xa4\x6f\x8f\xd7\xfe\x78\xc9\xe3\x25\x21\xab\xb1\xc1\xf0\xb6\x2b\xc1\x57\x31\xe5\xf9\x78\x41\xd5\xad\x17\x3f\x98\xef\x60\x92\x1a\x5e\x8e\x82\x6e\x5d\xa8\x5b\xe0\x25\x33\xa6\x25\xda\xab\x4b\x5c\xd5\x35\x57\x58\x64\xec\xe3\xc9\xd8\x90\x13\x6e\xbb\x09\x37\xcd\x64\xd1\xff\xa7\x7c\x94\xcc\xe4\xb4\xf2\xcb\xb2\xa0\x43\xc1\x90\xc0\xe8\x2d\x6c\xa4\x76\xde\x4d\x16\xb8\x62\x73\x90\x84\xf5\x4b\x49\x99\xeb\xfa\xd8\x8e\xc1\xdb\x9a\x8f\x97\xca\x91\x92\xc3\x04\xab\x3c\xb3\x2c\x6c\x1e\x05\x42\x07\x33\xe6\x4f\x92\x53\xa0\x39\x8d\x4b\x48\x60\x11\x97\xb1\x92\x0d\x84\x0e\x5c\x72\xa2\x29\x34\xb3\x71\xf4\x4b\x7b\x66\xc9\x6f\x18\x63\x03\x41\xf2\x5b\x87\x07\x07\xa8\x7c\x92\xdf\x9b\xf0\xa3\x37\x6f\xcd\x28\xaa\x5a\xa2\x4a\x3d\x0b\x32\xa2\x9a\x79\x92\x12\x00\xda\x36\x07\xc4\xa6\x92\x32\x24\x56\xc2\x58\xc3\x96\xdb\xb9\x03\xb1\x3b\xb9\x0a\xd4\xe5\x3e\xc3\xc0\xa8\x2f\x7c\x4d\x49\xa9\x05\xba\xcf\xda\xa5\x0a\x7f\x6c\x01\x13\x3f\x03\x39\x1a\x44\xf6\xe8\x70\x8d\x89\x9c\x77\xeb\x3a\x73\xe0\x51\x20\x11\x9c\xbd\x55\x90\x61\xa0\xa7\x13\xb1\xe3\xed\x22\x79\x85\x1e\x17\xfb\x2c\x5f\x99\x25\xb9\x4e\x5a\xbf\x99\x3b\x36\x7a\x89\x34\xae\x4d\x2a\x60\x8b\x05\x3a\x49\x4b\x9a\xcd\x95\x8d\xff\x22\x4c\xae\xb4\x97\x7f\xb6\xe0\x74\x9c\x48\x5b\x93\xd9\xac\x38\x55\x2d\x82\xf9\x92\x12\xed\x1d\x44\x9a\xc9\x1c\x8a\x84\xe3\x92\x48\xdb\xc2\x85\x76\xa3\x3a\x3b\x12\xb1\xa5\x21\x91\x76\x60\x4d\x11\x60\x36\x6a\x91\x31\x59\x4f\x11\x57\x90\x45\x1a\x57\x3c\x45\xf8\x12\xaf\x82\x3a\x15\x36\x76\xc5\x16\xa9\x2a\xf6\xfa\x0c\x18\xdc\x42\x72\x94\x0d\xc5\xc3\x00\x64\x2e\xa2\x3d\x3a\x62\xfe\xb7\x8f\xbb\x47\xaf\xa1\xd4\xf3\x83\xb3\x3c\xa8\x5e\x7f\xe9\x44\x11\xa2\x0f\xf0\x71\x95\x0a\x47\x7b\xe1\xe3\x95\x4a\xb1\x1e\xa1\x74\x0c\x0a\x64\xb8\x19\x26\x05\xa1\x14\x4e\xb2\xa4\x3c\x61\xc4\x60\x0b\x30\xc4\xf6\x53\x9a\xe7\x61\x9b\xe6\xd9\x94\x4c\x39\x37\xdc\x0c\x71\x40\x0a\x1d\x4f\x3e\x45\x50\x38\x96\xdb\x64\x9c\xef\x56\x74\x98\x0d\x7c\x99\xc6\x74\x06\xd8\xa7\x33\xca\xe0\x0a\x31\xdb\x37\xea\x96\xad\x8d\x4b\x89\x4f\x66\x53\x89\x4f\xb1\xc8\x28\x62\x55\x71\xe8\xfe\x28\x7b\x12\x70\xff\x4a\x4a\x9c\xc2\x3c\xa3\x28\x15\x72\x8f\xc9\x60\x36\xdb\x55\x92\x59\x9a\x82\x1c\x60\xd9\x2b\xce\xf8\x18\xd7\x4b\x8d\x03\x22\x71\x71\xc6\x70\x20\x25\xfa\xf1\x61\x85\x36\x8d\x51\xc8\x06\x54\xe2\xab\xb0\x29\x97\xb8\xe0\xbc\x85\x82\x9c\xb6\xc3\x3c\xe4\xde\x16\xc0\x3e\x72\xc4\xaf\xe5\x01\x76\x7e\xb4\x5e\x7a\x1b\xc0\x62\x7e\x44\x80\x85\x66\x85\x62\x51\xb2\x23\x7d\x44\xec\xb1\x01\xc7\xd7\xff\xfa\xec\x11\x7d\xef\xd6\x6d\x11\x66\x9e\x06\x95\x82\x6e\xa7\xc4\x1c\x2c\x4f\xb9\xd3\xa6\x20\x32\xf3\x73\xda\x9e\x04\x1e\x2c\x9b\x26\x28\x57\xf2\x80\x2b\xe3\xcf\x4d\x4b\x05\xc2\xea\x1a\xf7\x3a\x76\x6a\x8c\x63\xe4\xa4\xcc\xfe\xe0\x94\xb1\xb7\x4a\x1e\x8f\x60\x05\x70\xa0\x7f\x2b\xf1\xc0\x16\x87\x60\x53\xe1\x34\x10\xc3\x28\x4a\xae\x3e\x4a\x89\xff\xeb\x78\x58\x14\x98\x7b\x1a\x0a\xfa\xee\x59\x55\x03\xb7\xdb\x01\x13\x53\x5f\xe3\x50\x16\x65\xac\xb9\x5d\xc3\x3c\xb2\xad\xae\x58\xac\x03\xc2\x9a\x02\x90\x67\x4a\x5d\xc5\x62\xc2\x4d\x0c\x00\xf6\x70\x86\x6e\xa5\x5a\x73\x8c\x3f\xe6\xc8\x5c\x70\x25\x94\x68\xf1\x9f\xec\xbe\x92\xe3\x91\x57\xca\xdd\x99\x91\x6b\xb5\x59\xde\x28\xb8\x92\xd7\x86\x2f\xc9\xa3\x0b\x51\x51\xa7\x53\xda\x5c\x88\xe2\x08\xad\xad\x76\x84\xf9\xc2\xb7\xa6\x1f\xb9\x08\xa1\x40\xde\xec\xa0\xec\x76\x26\x11\x6b\x04\x9e\x55\x58\x2c\xa7\x3f\xa1\x78\xfe\x7f\x92\x55\xb0\x8f\x37\xef\x8f\x78\x8d\xfa\x78\xbf\xc0\x7b\x16\x52\x5e\x31\x35\xa7\xfc\x5e\x91\x95\xf9\x62\x66\x31\x72\x92\xde\xa3\xba\xd8\x31\x24\x47\x74\x62\x01\x2f\xe3\x1c\x00\x71\x31\x70\xeb\x6b\xbc\xd9\x72\x34\x29\xda\x9e\x3c\xdf\x91\x8f\xef\xab\x50\x7d\xda\x21\xe5\x9d\xad\x07\xc8\xd8\xf5\x90\x92\xa5\x8c\x36\x89\x46\xba\xdd\x6a\xdb\x16\xf2\x1c\xd7\x93\x75\x66\x0b\x14\x3c\x00\x86\xc0\x48\x8e\x31\xd9\x6c\x3f\xd8\x50\x73\x34\x3c\xbb\x44\x4b\x72\xe3\xb3\x11\x03\x0a\x24\x65\x0b\x4e\x2c\xe8\xeb\xb3\x76\xcb\x99\xcd\x25\x81\xc2\x42\xdf\x38\xed\x94\xb2\xa5\x29\x70\x81\xd1\xf0\xe9\x68\x78\x94\xe6\x7b\x42\x95\xbb\x86\x83\xdb\x2d\x0a\x29\xdb\x6e\x75\x75\x13\x12\xec\xff\x90\x96\x7b\x46\x90\xb7\x34\x81\xf9\xfe\xe7\xc7\xef\xed\xc7\xd3\xd1\xdd\x09\xe5\x64\x85\x7f\x3d\xbe\x79\xeb\x39\xdc\x47\x0e\xf7\xfc\x37\xa0\x11\x8c\x8d\xeb\x65\x3b\xb3\x91\xe1\x6c\xb7\x9a\xb2\xdf\xb2\xc4\x55\x9f\x39\x2c\xe9\x97\x18\xc4\x7a\xe3\x1a\xde\xd7\xf8\x5c\x4d\x24\x2a\x38\xc2\xc1\xb2\xaa\x9f\x31\xb0\xd7\xcf\xad\x72\xd5\xb3\xad\x90\xb4\xd9\x77\xb6\x90\x13\x47\xf1\x66\xe6\x91\xc2\x2e\x80\xeb\x24\xdb\xad\xa2\xb7\x15\xf2\xf1\x60\x6f\x5b\x9d\xe4\x18\x9a\xa9\x3c\x54\xb4\x7b\xef\xc6\x27\xc7\x15\x74\xbb\x6c\xe1\xb0\x39\xbc\x64\xfe\x62\x17\x58\x14\xec\xa1\xc5\xcb\x7a\x8f\x4e\xaf\x8e\xc8\x39\x6b\xb0\xfc\x90\x35\x0e\x5b\xbf\xc5\x91\x39\x50\x68\x3e\xd6\x1a\x68\x42\x05\xb3\xa2\x48\x13\x0b\xb1\x52\x6b\x32\xa1\xb3\x56\xd4\x3c\x25\x57\x7d\x00\xf7\xbd\x38\xa1\x4b\xd6\x4a\x4c\x83\xd1\xf9\xf8\x11\x1b\x00\x8b\x65\xf5\xfc\xe8\xb1\x35\x23\xfa\x95\xd6\xc7\x19\xf4\x59\x28\xd3\xf7\xbc\x71\x90\x1b\xfd\x55\xcf\x30\xdd\x7a\x5c\x67\x30\x65\x2f\xa0\x16\x4c\xdf\x67\x54\xef\xbe\xd3\x69\xa3\x28\x44\x60\x52\x43\xc7\x27\xe5\x69\x5b\x79\xd2\x8b\xaf\xc3\x4b\x2f\x63\x86\x2f\xbd\x2c\x0c\xa4\x1c\x5c\xc5\x50\x24\x36\x68\xf4\x52\xc2\xe2\x14\x9b\x17\x2a\x25\xe9\x20\xeb\x65\xd7\x0b\x8f\x64\x19\xe0\x57\xfc\xf8\x27\x06\x98\x92\x9d\xea\xf7\x9f\x0c\x03\x2e\x3e\x96\x1c\xad\xfe\xbf\x76\x61\x4f\x7e\x79\x76\x42\x7e\x97\x2c\x18\x26\x7f\x57\x7e\xf9\xbb\x9a\xbc\xf4\xeb\x9d\xed\xaf\x7d\xce\x15\x6a\xf9\x6d\x05\xf2\x98\xfa\x62\xeb\x03\x42\xe1\xf8\x6b\x5f\x1c\x8f\xd7\xb1\x3d\x5e\x2a\xb2\x1e\x55\xcd\xf2\x78\x95\x30\x85\x0a\xd2\xa8\x0b\xc0\xd5\x6a\x38\x08\xff\xe1\xa4\x0c\x66\xd4\x19\xe7\xbf\x7f\x78\xaf\xf8\xd0\xce\x31\x75\xbb\x14\x0b\x0e\x0b\x28\xce\x61\x48\x2b\x21\xee\xd0\x3b\x49\x04\x6a\x6b\xb7\x25\x2c\xe3\x7c\x33\x30\x5a\x51\x09\x36\x1c\x19\x70\x75\x1e\x83\xf7\xa8\x80\xbb\x45\x95\xfc\x15\x55\xdf\xb3\x2d\x63\xcf\xb6\xdc\xf7\x6c\x0b\x1e\x65\x15\x82\xcb\x8a\x51\x48\x15\x1f\x5e\xda\xff\x95\x79\xe2\x91\x01\x20\xb9\x41\x77\x6b\xe6\x9f\x4f\x62\x21\x61\x8f\x8a\x69\x0e\x12\xbe\x4f\x8f\xf1\x18\xf4\xe3\xef\x33\xd1\xb7\x47\xa2\x01\x13\xf3\x6c\x9f\x04\xc3\x28\x10\x1e\x4e\x03\x5e\xcc\xd9\x32\x66\x28\x64\xae\x38\xec\x4b\x3a\x82\xbb\x56\x98\x00\xdf\x21\x6f\x92\x16\xfa\xf8\x36\x5f\xde\x2f\xaa\x73\x21\xee\x17\x4e\xfb\x04\xb5\x61\x60\x3c\x1e\xef\x6c\x57\xb4\x15\x8f\xe0\xde\x87\xc9\xe1\x9a\xd5\xa6\xdf\xed\x55\xc2\x71\xd0\x44\xae\xb1\x62\xf0\x07\xa4\xd8\xd6\xb5\x00\x2c\x8b\x2c\xec\x4b\x47\x8e\x31\xb7\x12\x27\x7b\xb9\xb3\xf4\xdf\x9f\x14\x18\xac\xb9\x2a\xb6\xb4\xa4\x10\x8e\xfb\xec\x5b\x11\x25\x68\x0b\xc4\xfa\x36\xe6\xa0\x25\x7c\xb5\xfd\xf1\x18\x92\x9a\x5e\x0f\x15\xfa\xf4\xb6\xe0\xfe\x96\xd2\xf8\x4c\x46\x29\x5b\x00\x71\x31\xc1\xe0\x09\x34\x43\x30\x54\x20\x1b\xa9\xc9\x8a\x25\x46\xae\x2b\x18\xb0\x2f\xb3\xd5\xe2\x18\xb3\x84\x61\x29\xa6\xcc\xa1\xc4\xe8\x1f\x6b\x0f\x9b\x1c\x62\x3d\xcb\x51\x61\xc8\x1e\x63\x97\xf5\x15\xa1\x16\x47\x3f\x9b\x04\x74\x5a\x7a\xda\x9a\xac\x62\xc4\x88\x67\x2a\x08\xb1\x0a\xa0\x94\x4b\x86\x8e\xec\x57\xe6\xb3\xad\x2b\x92\x62\x58\x21\xbc\x7e\xa4\x0a\x96\x57\x89\xdb\xec\xd1\xda\x12\x7b\x8e\xd1\x5f\x58\x77\x11\xf7\x2f\x42\xfc\x1f\x0c\x5b\xae\x27\x1a\x9d\x01\x39\xfa\xf8\xbf\x6b\x25\xbf\x44\x9c\x2a\x07\xe1\x8f\x75\x8d\xfb\x40\x4e\x1b\xa9\x65\x24\x00\x27\x81\xca\x0c\x9f\x56\xdb\x46\x2a\xb1\xee\x4c\x39\xf7\x49\xca\x4d\x3a\x2f\xd1\x16\x45\xca\xa5\x0f\xa1\xa4\x5b\x97\x80\xc3\xee\x6a\xf2\x78\x5c\xe1\xc9\xe4\x92\x9e\xd4\xd4\x82\x8d\x9f\x19\x87\x3d\x08\x85\xa0\xd6\x18\x89\x2c\xc1\x89\x9a\xa5\x81\xdc\x8a\xad\x2e\xc5\x79\xc2\x14\xb1\xf0\x44\x32\xc8\x25\x97\x92\x4d\x37\xc6\x92\x9a\x18\x7e\xa4\xf5\x97\x1e\xf0\x76\x63\x49\xdc\x56\x2b\x89\x83\xae\x2d\x3b\x96\xf1\xf2\x39\xe1\x95\x0b\x69\x49\xb3\xc9\xd1\xc0\x96\x0f\x8b\x6f\x6b\x00\x4a\x89\xa6\xc8\xea\x55\xd2\x3f\x95\x91\x0b\xd6\xd7\x8a\x1d\xc8\x2d\x7e\x00\xb7\xa4\x9d\x29\xdb\x17\x5b\x3b\x28\xc9\x56\x9a\x00\x10\x15\xf8\xaa\xf2\x91\x8a\xd2\x8d\xb1\xad\xd8\x02\x2d\xa9\xb2\x1a\x27\x1e\xbf\x50\x3a\xd2\x5f\xd9\x50\x12\xec\x75\xb6\xa7\xa6\xad\x7d\x95\x84\xed\x2e\x9c\x73\x75\x8c\x30\x7d\xc1\xbf\xa4\xf6\x55\xf3\x47\x2c\xc2\x3f\xe2\x45\xfe\x23\xf9\xb2\xbb\x46\x4c\xeb\x87\xd2\xd7\xa3\xf8\x75\x8b\xef\x88\xd2\xf7\xcb\x2f\x31\x0b\x57\x93\x99\x20\xea\x5e\x80\x96\x27\xe2\x2b\x0b\x4e\xda\x15\xb1\xe3\x4d\xc5\x37\x45\x8b\x2c\xab\x6d\x43\x16\xe1\x91\x26\xd0\x32\xd1\x95\x1d\xab\x29\xb2\xd4\x03\xd7\x87\x8b\xe4\x34\x19\x61\x5e\x29\xba\x2e\xfa\xe2\xf6\x14\x82\xd2\x21\x4a\x13\x88\x85\x60\x35\xc7\x36\x51\x91\x1d\x2e\x31\x84\xc9\x6e\xcd\x5e\x76\xbf\xd1\xae\x90\x75\x8c\xa0\x5a\xbc\x76\xac\x44\x93\xda\xa9\x7b\x65\x78\x28\x07\xe8\xaa\xbb\xe0\xcc\xff\xf1\x90\x1a\x39\xbb\x8c\x01\x6c\xfe\xfa\x02\x89\x62\x5b\xf5\x2c\x42\x5f\x6b\xa3\xc9\x83\x19\x8e\xca\x80\x96\x8d\xb5\x79\xce\xd6\xe6\xbb\x20\x8a\xbd\xac\x00\xcd\xa5\xb5\x7b\x61\xce\x72\x5d\x4d\xe9\x70\xdb\x3c\x4b\x5a\x63\xbd\x94\xd6\x20\x44\x16\xe9\xfa\x0f\x60\x59\xf9\x81\x31\x24\xff\x22\x1f\x4b\xc9\xa7\x0e\xff\x3e\x4c\xc4\xe7\x16\x9d\xcf\xa8\x45\xf2\xf5\xd9\x56\xd1\x7f\x75\xd9\xa7\xfb\x0c\xc8\x58\xf8\xda\x55\x72\x0b\xbb\xa3\xe8\x80\x23\x65\x9f\x6e\x17\xf3\x4b\x5f\x60\x78\xa1\x2a\xf2\x5f\x50\x29\x7b\xb2\x64\x76\x7b\xf3\x92\xd0\xba\xa4\x6e\xb9\x0c\x7a\xa1\x93\xe0\xea\x40\x74\xaa\x75\x83\x62\xbe\xdc\xaa\x42\x4f\x8d\x67\x61\x4b\xdf\x0e\x9a\xe3\x8b\xed\x5a\x7e\x2e\xdc\xd3\x63\x50\xd7\xf6\x9e\x62\x9c\x4b\x20\x40\x47\xa5\x08\xb4\x5d\x75\x1a\x72\x76\x7d\xbc\xda\xe3\xa5\xe5\xca\x2b\x5b\x7d\x5a\x31\x6e\x82\xee\x46\x1b\x7e\xd0\x01\xac\xa3\x1f\xee\x3a\x44\x74\x8e\x8b\xdd\x26\x7f\x9a\x77\x7d\xb9\x6b\xf5\x01\xa7\x19\xd9\x17\x08\x0d\x9d\x1d\x6d\x5f\x56\xce\xb0\xfa\x92\x04\x26\x3b\x7b\x03\xfe\x6d\xf2\x7b\x72\x7d\xc9\x14\x03\xfa\xd2\x61\xc0\x2d\x5e\xf2\x78\xf5\x55\xed\xf3\x84\x39\x66\xcf\x7e\xdd\x81\x88\x12\x67\xcf\xcb\x18\x32\x7b\x5e\x04\x3f\x5f\x17\x4c\x80\x99\xc0\xbc\x06\xf8\x92\x96\xb4\x5f\x89\xc8\x99\xb6\x99\xbb\x99\xdd\x43\xc8\x2f\x6c\x6b\x74\xbf\xfa\xdc\x73\x16\x38\xdc\x02\x7e\xbf\x76\x00\x0c\x33\x64\x77\x7c\xf5\x3f\x9d\xdd\x8f\x4e\x22\x31\x69\xea\x9b\x3f\xbd\xf2\xea\x1b\x47\x4e\xa5\x63\xee\x0f\x45\xd3\x6a\x36\x98\x38\xa1\xd1\xb7\xb4\x60\x95\x08\xc0\x82\x05\x44\xa8\x5b\xe2\x05\xba\xae\xd6\x7b\xd8\x9e\xb6\x62\x32\xb0\x7e\x69\xca\x15\x1d\x04\x77\x72\x57\x29\xe6\x1c\x3d\xa3\x0e\x31\x4c\xf0\x74\xea\x6b\xf9\x6d\x68\x7c\x7f\xb1\x7f\x7f\x45\xd9\x0e\xd6\xd2\xb6\xcf\x09\x26\xea\xda\xfe\xc2\xb9\xd2\xbe\xbf\x22\xbf\x5d\x12\x4d\x97\x3e\x3a\x67\x03\x04\x94\x7d\x15\xd5\x16\xcc\x79\x93\x5f\xbb\x31\xdb\x71\xf4\x53\xcd\xea\x3c\xc3\xe0\x26\xa2\x52\x9d\xf0\x3b\xe2\x6f\x6f\x18\xc8\xee\xfd\x8d\x56\xb1\xef\x71\x26\xc9\x20\xc9\xe3\xcd\x33\x9c\x7d\xdf\xb9\x5f\xdd\x77\x4e\xc7\x3b\xfe\xaf\x15\xc3\x5e\xf0\x6b\x79\x46\xdc\x90\xef\xe5\x69\x47\x4a\x7a\xf1\xce\xab\x17\x2a\x4a\x00\x45\x2d\x28\xe6\x0d\x7c\x1a\xe0\xf2\x72\xf8\xfa\xea\xd8\xc5\xed\xda\x35\x35\xd0\xab\x1e\xdb\xe2\x66\x2f\xac\x51\x85\x87\x8b\x94\xf6\x45\x5b\x7f\xb1\xd1\xaf\x97\x2d\xf1\xe3\x9d\x15\xbc\xec\x23\x8a\xbb\x1f\x69\x57\xd8\x8c\x60\x26\xdc\x0b\xaa\x42\x11\x32\x38\xe2\xd6\x4d\xaf\x4e\x77\xbd\x3a\x0a\x3c\x36\xc5\xfc\x29\xcc\x06\x3b\xa3\xdb\x8b\x8e\x2d\x9c\x14\x10\x9b\xed\xd5\x31\x94\xbe\xb3\xc4\x14\xf4\xcc\x03\x11\x9d\xde\xab\x60\xd7\x2b\x16\x56\x7a\xf5\xe6\x54\x69\xd0\xe4\xad\xc5\x5e\x63\xc3\xb9\xbe\x7e\xa9\xf6\xe8\x37\xcd\x1e\x1d\x4b\x4c\x6a\x32\x01\x55\xc5\x23\xe4\x35\x8f\xd7\x8f\xa7\x17\x1c\x69\x5e\xd4\xfb\x11\xce\x4e\x6f\xea\x53\x3b\x4c\xfc\x5a\xe9\x93\x0f\x71\xbd\xf2\x6e\x4a\xaf\xdc\x41\x0e\x80\x74\xda\x30\xb2\x28\x9d\x48\x46\x93\x26\x46\x56\x63\x64\xf4\xef\x86\xa7\xac\x39\xb5\x6f\x4a\xd4\xb3\xb6\x62\x3f\xb6\x5f\xb7\xad\x3b\xee\x50\x8f\xe7\x0b\x8d\xd7\x1c\x68\xdc\x2a\xed\xad\x97\x40\x0f\x58\xb6\x38\x96\xb5\x19\xa0\x4b\xad\x68\x38\x7a\xd0\x91\xe7\x5f\x64\xef\xf7\x0b\x83\x5b\xd2\x7d\x48\x7d\x3f\x8f\xd7\xe7\xf1\xfa\xcc\x8f\xd7\xa9\xe3\xe4\x99\x5f\x9a\xf0\x53\x87\x84\x53\x25\xc5\xe5\xb1\x84\xc7\x12\x9e\xdc\xf9\x56\xa4\x10\x34\x16\x90\x6c\xb4\x88\x12\xec\xb7\x2b\x1d\xee\x63\xc9\x7d\xff\x26\x60\xf4\x15\x4b\x78\x6a\x86\x91\x68\xc9\x41\xcf\x0f\x4d\xfc\x2a\xfc\xf5\x7c\x2c\x61\x0e\x4f\xe9\x6a\x89\x6d\x55\x25\x49\xcd\x57\xc6\x8f\x0b\xdc\x2b\x89\xfc\x75\xc1\xa1\x9d\x25\xcc\x49\xa3\xc8\xd5\xbd\x25\xcc\x62\xeb\x05\x0e\xfb\xa6\xb0\x30\x1c\x50\xad\x79\x06\xed\x1b\x6c\x3e\x2f\xe1\xf5\x82\x11\x69\x16\x10\x6c\x05\x2d\xfc\x64\x81\xdd\x62\x44\xbb\x97\x25\x2c\xb8\xbc\xbc\x84\x05\xdd\xcc\x12\x56\x0b\x3c\xc5\xa6\x91\x83\x38\x3f\x0f\x90\x34\x7f\x99\x57\x98\x9a\x2a\xf1\xb1\x48\xf1\x10\x3d\xc0\xa4\x01\xf9\xdc\xe6\x12\x52\x83\x01\xac\xd1\xca\x01\xc6\xd4\x10\x97\x8c\xf7\x76\x1c\x20\x1a\x8a\xec\x88\xcc\xc5\x20\xdb\xc0\x1c\xd8\x7b\x73\xc6\xde\xa2\x35\xb6\x0e\x3f\xed\x0c\x94\x33\x44\x8b\x80\xac\x30\x77\x8f\x0e\x4e\xa3\x02\xb5\xc8\xb8\x0d\x8b\x5f\x9a\x08\xfb\x19\x76\x94\x0b\xaa\x42\xa6\xcb\x18\xaa\x11\xd2\xb8\xc3\x69\xdc\xf9\x2b\xae\xaa\x19\x62\xd2\x50\x21\x72\xca\x11\x1c\x9e\xf0\xa1\x17\xa6\xfd\x4b\x91\xd0\xcd\x41\x8a\xef\xb3\x2f\xce\x19\x66\x6e\xe0\x00\x84\xd2\x67\xf6\xfa\x97\x47\x5c\x72\x44\xed\xc9\x38\x25\x62\xd4\x22\x61\xb1\xb0\xeb\x9c\x40\x74\xc2\x6a\x9b\x73\x62\xf9\x13\x24\x66\x5e\x4e\xee\x71\xda\x42\x7f\x99\xa7\x49\xfb\x79\x66\xfa\x10\x32\x88\x79\x70\x97\xb8\x67\xf3\xc2\x92\x34\xd2\xc6\x9a\x9e\x73\xfa\x09\x7b\x73\xe7\x9f\x50\x0f\xa0\xbd\xd3\x95\xf0\x9a\x3a\xe0\x6e\x84\xb5\x3b\x67\x71\x1b\xf3\x51\x0e\xb6\x58\x45\xe6\xa1\x7c\x6e\xdf\x7f\x48\xb9\xac\xb3\x04\xff\x4e\x10\xa2\xce\x81\x94\xf4\x27\x73\x08\x6e\x7f\xc2\x58\x59\x73\x8e\x1e\xff\xb0\x0f\x34\xf4\xfd\xe3\xe4\x3b\x9c\xc8\x14\x7a\xb3\x32\x50\x76\x54\x6c\x63\xae\x5f\x0e\xbc\xd6\x35\xd5\x3f\xfc\xf8\x75\xd4\x67\x65\x5a\xf8\x4d\xc3\x1d\x5e\x93\x18\xee\xf0\x4a\x84\x45\x0b\xd5\xfd\xc7\xbf\x86\x93\x33\xbc\x1f\x4b\xd0\x9f\xb7\x27\x8c\x40\x73\x16\xd0\x58\x91\x86\xed\x99\x10\xc9\xed\x89\xd6\xbb\x59\x27\xba\x3d\x05\xd9\xbe\x3d\x4b\xcc\xa0\xbd\xa2\x7b\xd8\x60\x1b\x9f\x61\x01\x9d\x74\x28\x50\xf0\x8e\x91\xa5\x40\xc8\xea\x86\x77\x03\x41\xad\xba\x6c\xe6\xa4\xfa\xf2\x12\x18\xb9\xfd\x8e\x5e\x79\x8b\xd6\x5f\x6d\xb1\x85\x7d\x61\xdd\xd1\xec\x24\xe1\x6b\xd7\x84\x3e\x03\x26\xe7\x3d\x06\xb1\xb9\x42\xa7\xb3\xb1\xa1\x6f\xde\x6b\x6d\x16\xc3\x2d\xd0\x9c\x59\xa4\x9b\xc5\x70\x33\x4e\xf6\xc1\xdb\x07\xf7\x10\x59\xb3\x36\x24\x03\x35\x78\x67\xdb\xdc\xa3\xf6\xd5\x70\xbf\x2f\x5c\x0b\x5d\xb8\x4e\xad\x04\x47\x31\x00\x90\xa3\x4a\x11\x1a\x41\xd4\x5e\xf0\x74\x16\xf3\x4f\xc5\x07\xae\x14\x29\x62\x81\x28\xdd\xf9\x93\xe5\xd5\xae\x53\x1e\x25\x9f\x80\xcf\x93\xdb\xff\x43\x28\x3b\x2a\xfa\x6e\x0a\x1a\x14\x21\x8e\x82\xdc\xd9\x85\x29\xda\x2b\xfa\x07\x2e\x31\x80\x32\xdb\xf6\x96\x59\x27\xad\x43\x92\x0c\x03\x0b\x78\x0a\x10\x90\x66\x03\xeb\xc0\x11\x2b\xcd\x18\x67\x00\x5c\x81\x59\xa0\x6e\x1c\xbf\x58\xfd\x50\xb7\x85\xed\xbb\x3c\x61\x38\x13\xf6\xaf\x00\xd0\xeb\xf2\x24\x67\x59\x59\x9e\x82\x71\xaf\x4c\xc8\xb8\x32\x3f\x8b\x0a\xa1\x0b\xaf\x8d\x92\xf0\xbb\x39\xee\xc8\x64\x00\x86\x39\xc7\x22\x4f\x38\xa6\x81\x8d\xab\x25\x50\xf1\xc2\x12\x0a\x1c\x69\x19\x9e\x00\xc8\x88\xb2\x58\x3c\x16\x39\xd1\xc3\x01\xb0\xf1\x95\xf4\x0c\x19\xc2\x40\x61\x39\x0e\xf5\x21\x4b\x28\x56\xd6\x25\xa7\x49\x09\xe6\x3e\x4b\x28\x2c\x0c\x25\x2c\xa3\xb2\x27\x6e\x02\x03\xd6\x35\x5e\xa8\x38\x1a\xdf\x52\x96\x5e\x42\x91\xe6\xa4\x90\x3a\x6f\x16\x47\x7a\xc3\xa2\x30\xb4\xe2\xc2\x49\x29\x89\x8d\xbf\x14\x69\x46\xa2\xd3\x62\x60\xd8\xb8\x55\x87\xf8\x47\xe4\xf3\x05\xe5\x4e\xe4\xaf\xb9\x6a\xc8\xc2\x1f\xe4\x9d\xfe\x5c\xd9\x51\x54\x16\x94\x12\x76\xda\x86\xf4\x9b\x1a\xe9\x6f\x8d\x39\x99\xc5\xe5\x7d\xb5\x5d\x80\x25\xdc\x14\xea\x92\xa1\xed\x1b\x69\xab\x6f\x54\xe3\xca\xc3\x87\x4b\xa8\x14\x7f\x2a\x1a\x2b\x80\xfb\x2d\x56\xa3\xeb\xe8\x9e\xeb\xe8\x9b\x2b\x6b\xaf\x92\x18\xba\xa1\x45\x80\x38\x12\xb8\x5c\x4e\xb4\x90\x22\x40\xf3\xab\xc5\x22\x87\xcc\x80\x6b\xe8\x70\xd9\xc6\x0e\xbc\x32\x25\xe4\x05\x55\xb2\xb6\x12\x27\xea\x91\x75\x86\x0d\x9f\x2f\x58\x93\xb6\x64\x5f\xc9\xb4\xc7\x2d\x75\xe7\xec\xb1\x26\x63\xba\xcc\x71\x97\x7a\x7d\x2f\xd8\x09\xb8\x7d\x0d\xde\xdf\x81\xfa\x8f\xd5\x9f\x6f\xfe\xf8\xf2\x2f\xfe\xeb\x7f\xfd\xcd\x09\x25\x0c\x78\xf7\xec\xe6\x8d\x8e\x75\x17\x74\x5b\xcf\x94\x22\x75\x5a\x53\x1d\x11\xf3\xc1\xce\xb1\xbb\xbf\x07\x7a\x87\x25\x4d\x16\x81\x9e\xc3\x00\x5e\x2d\x3e\x52\xde\xea\x73\xd3\x9f\x50\x83\x1b\x4b\xb2\x45\x68\x01\x56\xc0\xdb\x2a\x8a\xc6\x98\xd5\x22\xeb\x4b\xa3\x36\xb6\x25\x34\xb3\x66\x57\x6a\x13\xcc\x65\x68\x4f\xe4\xe4\x6a\x09\x7d\x5a\x7d\xe4\x52\x58\x30\xb5\xe8\xd3\xaa\x9d\x55\x9f\x61\xc4\xb0\xa1\xd0\xfa\x4c\xc9\xa0\xcf\x5e\x83\xba\x49\xf1\xa0\xf4\xb5\x73\x88\xe8\x99\xaf\x6c\x2b\xf4\xae\xb8\x0f\xb1\xb0\x5b\x1f\xdc\xe1\x94\x56\xb5\x7a\x6d\xd6\x89\x96\x9a\x1e\xca\x0f\x7b\xd4\x1f\x0c\x1a\x3f\x31\xbf\x13\x3a\xa4\x1f\x1e\xfb\x5b\xc2\x4f\x82\xdc\xfa\x63\x0d\xfe\xa3\xff\x6f\x18\xee\xc3\xe7\x7d\xf5\x67\x27\x1c\x9f\xa1\x15\xed\xef\x4e\xce\x22\xce\xac\xf3\x55\x7c\x7e\x9a\xbb\xaf\xfe\x07\x74\xda\xdf\x68\x84\x7b\xfc\x8a\x38\x31\xa3\xe0\xc4\x5d\x00\xa3\xb4\xf1\x46\xfb\x3d\x02\xb2\x72\x7e\x2c\x73\x7d\x68\x32\x20\x7f\x46\xec\xa9\xb2\x19\x47\x1d\x42\xa2\x8e\x07\xbf\xa0\xc8\xc6\x18\x4a\x5d\xd3\xab\x01\x71\x8b\x6e\x89\xcf\xc7\x12\x35\xc1\x71\x7a\xcb\x63\x89\x73\x98\xf4\xf7\x88\x14\xc7\xa8\x3f\x44\x5e\xa7\x5f\x62\xd4\xea\x11\x21\x89\xc4\x25\x42\x49\x34\x40\x9d\xd6\xa8\x0d\x33\xae\x2e\xe5\xc7\x54\xd7\x00\x02\x37\xa9\xc9\xce\xe7\xd0\x16\x84\x99\xc3\x1c\x40\x6e\x8b\xce\x64\x07\xfd\x63\x39\x84\x4f\x67\x35\x3f\x0c\xb7\x73\xc0\xef\x5f\x57\xdf\xcb\xd5\xe8\x37\x63\x1e\x6e\x66\xfe\x3c\xc7\x7a\x94\x8e\xec\xc9\x33\xb3\x29\xc7\x69\x4d\x3a\x3d\x8d\x39\xee\x73\xcc\xb1\xbf\xe8\x56\xb9\xcb\x35\xb7\xae\x00\xdc\xf3\xb4\x58\xfa\x73\x8d\xd0\x4a\xb7\x44\xfc\xc7\xa4\x99\x14\x90\xf5\x1b\xb2\x60\xbb\x92\xb8\xa5\x3d\x29\x51\x89\x4b\x4d\xb7\xde\x54\x46\x88\x9b\x4b\x66\x40\x0b\xe9\x41\x8d\xe6\x8a\x47\x77\x13\xb7\x71\xf0\x8b\x58\xe3\x71\xff\xd9\xfa\xa2\xb8\x09\xd8\xe3\xcc\x48\xe3\x06\xbf\xeb\x53\xde\xa4\x7d\x22\xe0\xf4\x40\xc5\x06\xcc\xe5\xe2\x1e\x8e\x03\x16\xb3\x0e\xd7\x03\xa0\x6d\x53\x2d\x23\xab\x67\xdc\xa3\x36\x06\x10\x0f\x9b\xf8\x24\x2a\xda\x51\x41\x83\xa3\x11\x5b\x42\x32\xc6\xd6\x59\xc8\xe5\xc9\xed\xf3\x55\x09\x8c\xb5\x10\x81\x6b\xda\xe4\xe2\xda\x80\xed\xfa\xfc\xfb\xf7\xf3\xef\xf5\xf9\x3d\x3c\x0a\xdf\x97\x7e\x49\x87\x3f\xf7\x58\xa1\x93\x23\x2a\xe9\x97\x70\xa8\x64\x01\xc7\x55\x52\xc2\x51\xf7\x54\x3c\x9e\x1e\x43\x4c\x8e\x10\x76\xd4\x5c\x73\xba\xf2\xc7\x5e\xc0\x33\x48\x77\x3f\xc8\xaa\x34\x12\x94\xae\xb0\x2e\x2d\xd8\xca\x20\xff\x53\x82\x79\xd0\x0c\xa4\xb5\xd1\x8f\x46\x93\x29\x30\x89\x29\xee\x18\x40\xa3\x36\x21\x94\x8d\xc0\xad\x60\x49\x58\x01\xcb\x9b\x8a\x0b\x97\xb8\xf3\x9b\x82\x1c\xc7\x77\x35\xa2\x66\xee\xf0\xbc\x45\xbe\x4a\x6d\xd0\x23\x8a\x55\x39\xa3\x58\x78\x03\xce\xd0\xb7\x43\xe8\x1f\x8d\xea\x80\x13\x3c\xf6\x6b\x4d\xfc\x3a\xf3\xf1\x01\xc2\x2d\xec\x17\xf2\x85\x17\xf0\x37\xc8\x23\x14\x8a\xcb\xbd\xbb\xe1\x68\x11\xf7\x06\x77\x1d\xc6\xb8\x69\x3d\x18\xe6\x53\x77\x3d\x41\x8a\xd5\x94\xc9\x1e\x65\xbf\x20\x7c\x83\x3e\xca\xfd\x6a\x74\x17\x8f\x5f\x67\x18\x91\x66\x35\x27\x73\xac\xfc\xf1\xdc\xc3\xe6\x85\xef\x1c\x02\x5b\x60\xec\x42\x77\xb8\x42\x86\xda\xeb\xb7\xa1\x97\x28\x68\xca\x92\x2a\xa7\xc2\x8a\x33\x0c\x3c\x6d\x6f\x08\x0e\xf1\x9b\xe9\xbb\x9c\x58\x24\x37\xf5\x97\x37\xa6\x91\x81\xfe\x55\x43\xf4\x20\x4e\x6b\xd8\x2d\x66\x5b\x9c\xd3\xc4\x11\xc7\xe5\x46\x80\x72\xf9\x1d\xf1\xfa\xbd\x21\xfa\x20\xe5\x58\x6f\x79\x34\x78\xfc\x7a\xac\xc1\x7f\x50\x68\x76\x67\x1d\x39\x43\xa6\x1a\x44\xfd\x90\x43\x05\xb0\x11\xa6\x71\xf5\xc2\xf6\xa5\xec\xc3\xd6\x5e\x08\x55\x06\xab\xb5\x4a\x17\x8e\xb9\x51\xea\xc4\x07\x0f\x15\xf2\x45\x4b\x45\x2d\xb8\xa7\xdc\x37\x64\xdc\xea\xb9\xfb\xa0\xeb\x8b\x12\xf1\x5a\x82\x40\x8e\x14\xb4\xaa\x12\x76\x06\xa8\x40\x1c\x60\x90\xd0\x2e\xc5\xd2\x5f\x9e\x09\x3f\xc5\x57\x00\x41\x9b\x2a\x71\xef\xda\x2b\x17\x7b\x34\x64\x51\x29\xe8\xca\x64\x63\xea\x80\x48\x2e\xaa\x41\xd9\x6c\xee\x0d\xe4\x95\x58\x31\x07\x2a\x20\xc6\x61\x43\x5f\x5f\x4c\x03\xf0\xc2\x37\xca\x98\x0b\x06\x4f\x87\xd6\x46\xc6\x2b\x66\x4b\x2c\xe3\x71\x54\xc5\xb6\x9e\x08\x24\x13\x94\x4d\x1b\x33\x4a\xdd\x39\xfc\x02\xa5\xa6\x33\x85\xc9\x58\xea\x2c\xe5\xf5\xb2\xf8\xe1\x75\x2a\x05\x94\x41\x94\xa4\x1f\x58\xfc\x04\xe4\x75\x8d\x39\x8f\xc1\xb5\x42\x0c\xc7\x5b\x7e\x0b\x05\x95\xda\x42\x36\x6a\xb1\xae\xf0\x18\x0a\x79\xf2\x65\x97\xfc\x5e\x3a\x18\xb3\x64\xef\x08\xaa\x3f\xb4\xeb\xbe\xbc\x31\xa3\xa3\x69\x01\x22\xb1\xcd\x5b\x41\x38\x5a\xb7\xae\xfd\x2f\x72\xf8\x43\xa1\xea\xe4\xc8\xa5\x04\x69\x5c\xca\x63\x59\x83\x76\x6f\x6b\xc0\xa3\x41\x4a\xb5\xa5\xac\xa1\x8e\x6d\x6f\x30\xde\xc3\xad\xa1\xa9\xd1\x61\x7e\xf9\xc5\x37\x3d\x16\x4c\x8f\xd7\x58\x82\x80\x60\xee\x47\x45\x9a\xcb\x9a\x9e\x38\x57\x8c\x4a\xb9\xa6\x67\x56\xe7\x29\x67\x1d\x31\x56\xc8\xf6\x6a\xce\xda\x3d\xac\x7e\xb4\x01\x68\x84\x29\x3d\xd3\x1c\x52\xef\x7a\xe6\xfc\x58\xd2\x63\xc1\x76\x19\x4c\xd8\x27\xd3\xc4\xb3\xa4\x20\x2a\x8c\xa7\xe7\x03\x7a\x16\x0a\x62\x60\x18\x01\x50\xfb\x82\x12\xa1\xbd\xeb\x72\x20\x46\x46\x2b\xf2\x21\x34\x3d\x9f\x14\xa8\xa1\xfb\x13\x9b\x97\xf8\x5c\x53\x93\x9e\xda\x33\x6b\x57\x83\x6b\x5d\x74\x3f\x2f\x9a\x25\x90\x79\xd3\xcb\x6f\xa4\x28\xfc\x14\x5f\x6c\x49\xf8\x0f\xd3\x39\xa9\xc4\x94\x96\xb0\xc6\xd2\xbe\x40\xd6\xa3\x61\x6f\xd8\x4e\x2b\x1a\x83\xd4\x2d\x78\x86\x24\x4c\xab\xce\x48\x2e\xee\x04\x53\xe3\x24\x5a\x63\xb1\xe1\xb4\x83\x7e\x42\xd3\x78\x2c\x5c\x33\x49\x0b\x23\xbf\x48\x16\x10\x30\x9c\xa0\xe3\xf9\x84\xc5\x34\x27\x2e\x89\xb2\x6a\xca\xf3\x8a\xc5\xf0\x64\x82\x6a\x32\xfd\x93\x8b\x8e\xa2\x30\xe1\x78\x09\x09\xa4\x67\x12\x8d\x0f\x3f\x43\x69\xdb\xc9\x29\x50\x44\x2c\x67\xba\x38\xed\x14\xcb\x92\xb2\xa9\xa4\x5e\x52\xa6\xc2\x8a\x25\x6d\xa6\x56\x4d\x9d\x42\x82\x4d\x1b\x83\xdb\xb6\x00\x6e\x4b\x2a\x37\x92\xd2\xd5\xf1\x58\x50\xda\x7b\x04\xc2\x5e\x43\xda\x55\x4a\x36\x8a\x70\xb9\xfa\x77\xe9\xd2\x33\xec\xd5\x8e\x3a\xf1\xf6\x40\x2f\xd6\xb0\x81\x26\xf3\x23\xa9\x60\x04\xca\x29\x3d\x34\x9e\x60\x5e\x99\xf6\x37\x8c\x45\xf3\x16\xdb\xcd\x0b\x95\xdd\x91\x20\x64\x4a\x2d\xe9\x40\x2e\x70\xad\x3e\x1d\x3a\xd1\x4e\x47\x3d\xd1\x14\x14\x50\xdc\x50\xc4\x52\x3f\xea\x09\xdd\x2c\x4b\x2a\xdc\x75\x4a\xfe\x2e\x8c\xa2\xaa\x1d\x7b\x2a\x2c\x30\x25\xcc\xeb\x32\xf3\xf7\x39\x47\x9c\x76\x21\x84\x1b\xb8\xcf\x76\x22\x4f\xa1\x05\x58\x58\x5a\xe5\x6a\x6f\xa9\x68\x44\x55\xec\x82\x52\x1f\x35\x2d\x38\x1c\xba\x87\x6b\xed\xfe\xd4\xe4\x88\x94\x2a\x5b\x66\xa5\xc8\x8e\x9e\x37\xe1\x3f\x69\x52\x1a\xde\x9e\x5c\xd2\x4f\x64\xef\x85\x3b\x41\x4b\xfa\xaa\x2c\x9d\xbe\x5f\xac\x29\xe6\xc7\x42\xb5\x5d\xc1\x81\xf6\x65\x39\x4c\xf6\xce\x2f\x21\x7b\x4c\x85\xea\x03\x1e\xa7\xf2\x9e\xde\x99\x93\xb0\x2a\x99\x6d\x1d\x52\x11\x3f\xd4\x3e\x3e\x87\x99\xcf\xaa\x02\x09\x43\x54\xd0\xf9\x51\x32\xca\xdc\xc8\x61\xbe\x16\xc8\x73\x48\x6f\x53\x6c\x03\x9c\x2e\x5c\x68\x46\x92\x34\xec\x7f\x60\xb3\x31\xb8\xed\x7a\x9a\xcd\xb9\xe8\x3f\x8c\xde\x47\xb9\x5e\x9c\xfe\x71\xdf\x6f\x1f\xf4\xfb\x17\x5a\xa6\x19\x63\x9b\xb1\x98\x97\x11\xdc\x9d\xc1\xbc\x62\x57\xc6\x4e\x12\xf7\x6d\xd4\x7c\x52\x7b\x05\x99\x57\xcf\x04\xb6\x6a\x93\xb9\x04\x37\x80\x7f\xc4\x0b\xc6\x0e\xc7\xe7\xe8\x36\x14\x40\x3f\x13\x91\x94\xf7\x85\xfc\x23\x5b\x38\x32\x88\xe2\xec\x4f\x1b\xb8\x32\x9e\x5e\xe1\x71\x28\x30\x32\x8b\xdb\xcb\x16\x0c\xec\xc3\xad\xca\x73\x8c\x22\xf3\xfe\xcb\x43\xed\x40\x08\xee\x9b\x2e\x7a\x12\x78\x4a\xbe\x8c\xfa\xf3\xb1\x40\x53\x92\x9a\xac\x41\x31\x70\xfd\x3a\xc7\x67\x80\xa9\x5e\x47\x54\xa7\x48\x63\x86\x39\x06\xd2\x8c\x55\x8d\xcc\xb3\xd1\x4a\x6f\xb5\x28\x6a\x97\x96\xa3\x67\x7d\x84\x83\x7d\xe1\x70\x8c\x2d\x42\x6c\x4d\xe4\x14\x66\xed\xda\x72\x7a\x9a\x4b\xde\x29\x56\x4a\xf2\x7a\xa9\xb9\xc1\x88\x30\x37\xeb\x0a\xec\x8e\xac\x51\x38\x66\x5e\xa5\xfa\x86\x59\xd9\x16\x08\x8a\xa1\x7d\x96\xc7\x92\x05\x29\x17\xdb\xa3\x31\xed\x3c\x4b\x96\x27\x8c\x48\x93\x43\x37\x90\xf5\xe7\x8a\x9b\x2f\x58\x0f\xc6\xfc\x78\x26\xbc\x48\x11\x1e\xa6\xb1\x5f\xc9\x18\x85\x81\x31\x0a\x67\x79\xe2\xb6\xd9\x0d\x0f\x27\xac\xd2\x4a\xf9\xfd\xb4\xf2\x45\x1c\x42\xb8\x99\xde\x71\xaf\x47\xd2\x6e\x38\xcb\x82\x80\xb7\x31\xc5\x06\x36\x4f\x80\x64\x8f\xc7\x6a\xab\xb4\x66\xd5\x09\x49\xb8\x39\x93\x45\x36\x9a\x5e\x4b\x00\xe1\xf9\xa1\x06\x56\x0a\xa1\xf6\x66\xcc\xfa\xc8\x31\x1f\x0a\xd4\x2c\x10\x8c\x96\x28\x28\x69\x21\xae\x35\x18\xa1\x48\x4d\x68\x0e\xac\xa7\x92\x5a\x7d\x81\x1a\x78\xb3\x49\x02\x99\x68\xc0\x5c\x8e\x88\xd6\xea\xa9\x1b\x2b\x94\x0a\xaf\xb9\xdd\xc5\x99\xc7\x92\x03\xeb\x9e\x63\x8f\xd0\xd5\xd1\x1a\xe3\x1f\x8c\x48\xe1\xb7\xd6\x6e\x6b\x20\xca\x32\xf8\xd6\xfe\x4c\x51\x61\xb1\xc8\xee\xf0\xf2\xbb\xb5\xe1\x04\xad\x57\x7e\xac\x01\x41\xa3\xc8\x92\xe5\x03\x03\xfb\xe7\x59\x3e\xdc\xd8\xca\xf2\x9b\xb0\xcf\xa4\x22\x78\xee\x13\x74\xf2\x29\xc0\x0c\x43\x29\x0e\x14\xe4\x3e\xc9\x24\xa5\xa5\x49\x30\xe4\xf4\xe9\xda\x4c\x54\x66\x8f\xff\xe1\x5d\xf3\x3a\x38\xd7\xec\x06\x06\xc7\x1f\x00\xec\xd7\xea\x41\x49\xed\xf9\x85\x35\x2d\x32\xac\x1d\x7d\xea\x45\x76\x73\x43\x03\x3b\xf3\xb9\x23\x55\x3d\xda\xca\x2d\x94\xeb\xa8\x39\xd8\xc3\x0b\xb3\x33\x4d\x1e\x10\x3e\x6e\x01\xd7\x4c\x89\xd8\x2f\xf7\x16\x1a\x1e\x0a\x03\x8e\x6c\x2b\xbd\x45\x23\x6d\x4d\x9b\xfb\x10\x51\xcd\x7b\x33\x27\x7c\x3e\x93\xc8\x9b\x63\xbf\xaf\x6a\xe6\xde\x2c\xbd\xad\x31\x32\x4a\xef\x3f\x37\x16\xe9\x39\xc1\x88\x1b\xd2\x7e\x4e\xf1\x3a\x07\x47\x36\x5d\x68\x1f\x80\x29\x21\x1e\x68\xd8\xa9\x04\x62\xe0\x64\x09\x29\x73\xd2\xd6\x3f\x90\x49\x32\x6d\xa0\x3f\xdf\x01\xcb\xf0\xbc\x17\x37\x99\x9b\x5f\x60\xef\x0c\x13\x62\xc1\x4a\x4e\x87\xca\xfc\x80\xd7\x37\x7f\x6a\xcc\x39\xc9\x11\x8f\xe6\x69\x93\x23\xfe\x0e\xfb\x51\x77\xce\x51\x55\xce\xab\x76\x9c\xb7\xda\x71\xca\x6f\xc8\x96\x9e\x63\xa5\xc9\x16\x7a\xc7\xa8\x35\x83\x43\x54\x8f\x16\x32\x29\x3b\x86\xf3\x68\x98\x2c\x1b\xbc\xbc\x68\x7f\xbc\x68\xc3\x8b\xed\xb1\xec\xdc\x90\xdf\x83\x8a\x8b\x6a\x5a\xe5\xdb\x75\x26\xb8\x87\xe6\xda\x7f\x14\x53\x3d\xbc\x22\x3c\x5f\x47\xa0\xc5\xb5\x87\x0f\x7f\xa0\x18\xb1\xc7\x04\x2f\xb0\xba\xb7\x0b\x97\xb3\x76\xb9\x96\x8c\x0d\x9f\x44\xea\x13\xcb\x61\x97\x26\xcf\xf4\x07\xc3\x7b\x83\x48\xe5\xde\x1f\x2a\x7a\x4b\xd0\xff\x59\x8d\x97\x1a\x19\x86\x0a\xb6\x12\xb2\x6f\x33\x19\x44\xa4\x24\x98\x62\x4f\x45\xf6\x3e\xfc\x22\x61\xdf\xe1\x51\x83\x11\xf1\xb9\xcd\x51\x05\x9b\x4f\x08\x61\x3c\x22\xa7\xf8\x90\x5f\xd0\xfa\x8c\xc1\x7e\xe6\x66\xa8\x84\x1f\x9d\x2d\xc9\x13\xe7\x10\x84\x33\x50\x79\x3e\x55\x68\x58\x44\xde\xc6\x68\xb0\x9c\x5e\xca\x13\x6d\x55\x9e\x9a\x9e\x67\x6d\xbc\x3d\xb1\xc8\xf3\x7c\x2c\x32\x4f\x6b\xca\xea\xfd\x3c\x43\x8b\x34\x7e\x99\xe7\x48\x2b\x46\x06\x94\x52\x3d\x31\x17\x99\x85\x2f\x9a\x2d\x32\xc7\x7d\x0e\x04\x8d\xa6\x56\x3e\x99\x4d\x03\xc7\x22\xb3\x7f\x7c\x1d\x34\x93\x39\xa7\x77\xbc\xf0\x0d\xc1\xa7\x4d\xfc\x5b\xf9\x68\xe4\xe7\x23\x70\x2d\x49\xec\x50\x9d\xcc\x15\x13\x0e\x99\x3d\x36\x95\xd6\x1f\x9d\x20\x08\xbe\x8d\x56\x71\x04\xfb\x1f\x7c\xe2\x88\x84\xa1\x2c\x4b\x80\x99\xa1\xab\x9b\x48\x5d\x70\x66\x2b\xa8\x00\x49\xff\xe1\x9a\x07\xe0\x24\x35\x95\x38\xb1\xe9\x28\x79\x7e\x5a\x6d\x35\x48\x97\x79\xa6\x5a\xef\x81\xcc\x05\xd5\x79\x03\xf5\x03\x34\xee\xf1\x8c\x86\x2c\x0b\x14\x16\x99\x0d\x55\x6c\x46\x28\x34\x77\x7c\xac\xc1\xe0\x3e\xad\x8e\xb4\x5b\x01\xaa\xb4\x4a\x2a\xb4\xd0\xdd\xc6\x43\x7f\xa2\xd3\x6d\xac\x2f\x89\x3f\xf7\xa0\xa8\xad\x9c\xb6\x4a\x9e\xbb\xce\xa6\x24\xc7\x4d\xcd\x17\x0c\x7e\xc8\xd3\x64\xa4\x10\x6d\x25\x43\x59\xde\x22\x39\xa7\x8f\x2c\x03\x10\x9d\x9f\x51\x05\x79\x20\x4b\xb2\x26\x77\x7b\x46\xed\x3b\x65\x43\x4d\xdc\x9e\x56\x90\x78\xbb\x4b\xe9\xb1\xb2\x4d\xca\xd6\x9b\x66\xfb\x8e\x68\xed\x61\x36\x65\x40\x17\x46\x7d\xde\xfd\x04\x91\xe8\xf4\x35\x18\xc5\xdd\x02\x42\xc8\x49\xae\xbe\x65\xe1\x89\x1f\xd9\x5f\x01\x47\xd0\x0c\x24\xb7\xdc\x69\xa9\x09\xd8\x75\x3e\x88\x7a\xb3\x9b\x20\x28\x7b\x7a\xc1\xf4\x45\x62\x83\xc8\x0a\x6e\x24\xf2\xe1\xa3\x45\x74\xde\x2e\xbb\x4c\xd4\xf8\x08\x78\xd2\x2f\x81\x17\xa2\x9d\x25\x08\x4e\x34\x29\x12\x0f\x44\x0e\xb7\x2b\x65\x8d\xc1\x91\x18\x6c\x6b\x9c\x80\xce\xd0\x71\xb0\x51\xf6\x73\x0a\xdb\xc1\x4c\xdb\x4f\x35\x35\x67\x05\x8b\x4b\x22\xf3\x13\x75\x46\xe6\xfb\x6b\xd4\x8b\xdc\x9a\x9b\xe0\xc2\xa6\xd2\x61\x01\x45\xe3\x04\x3a\xe2\x11\x68\x32\x11\x7d\x79\xe1\x74\xef\x02\x4d\xf0\xf6\xc9\x02\x83\x6e\x16\xc9\x46\x8e\x1c\x35\x86\xc8\x1a\xd9\x67\x8d\xb7\x4a\xb5\xa2\x12\x0e\x3b\x45\x0c\xf9\x6a\xf2\x1a\x39\xa0\x55\x5f\x45\x38\xd6\xa7\x68\x61\x08\x35\x2e\xb8\x56\x0b\x68\x5d\x26\x04\x7d\x34\x34\xa9\xd4\x4f\xb2\xc8\x11\x94\xe7\x30\x04\xe2\xde\x2b\xfe\xb0\x23\x2a\x68\x54\xe5\xc9\x35\x1c\x29\x3c\xed\xc6\xcc\x2f\x8b\x99\x43\xfe\xa0\xce\x12\x12\xd4\x3c\x1e\x1e\x92\xa2\x75\x8a\x85\x5f\x50\x6b\x80\x56\xd4\xf1\x62\xed\xc3\xa7\xc4\x62\x5d\x0e\xd6\xb3\x9d\x72\x0f\xd0\xf1\x36\xe0\x97\xd6\xc8\x9f\xba\x62\xdf\x5e\xea\x6a\x7b\xd3\x52\xad\x8f\xac\x1b\x23\x5c\x0f\x34\x1f\x25\xf8\x4e\x81\x23\xc1\x3c\x4f\x81\xce\x7d\x55\xea\xdf\xf8\x0b\xe4\x4c\x15\xe3\x0f\x23\x1e\x4f\xc5\xa6\xa5\x9e\x4c\xc1\x58\x00\x74\x02\xb0\x4c\x6b\x3d\x0f\x96\x60\x2b\x9a\xd0\x0e\xd5\xe7\x8b\xf0\xa8\x83\xf4\x7f\x70\xd5\x71\xd5\x6d\x91\x5e\xc2\x96\x40\x67\x9a\x70\xea\x99\xd1\x3d\x37\x6e\x78\x23\x46\x46\x77\x1a\x1e\xc5\x8e\xb5\x22\xe9\x0d\x2f\x07\x2c\xd2\x7f\x62\x51\x11\x53\x2d\x7f\xf4\x5f\x59\x5f\xe7\x36\xce\x17\xba\xc9\x62\xc6\x0f\x78\x59\x72\x2e\x0f\xa8\x13\x23\x03\x36\xb8\x7c\x90\x5d\x1f\x0d\x0d\xa5\x81\x31\xe9\xb3\x73\x1d\xe2\xd0\x7e\xea\x98\xd4\xd0\xff\xf5\xb1\x1c\xdb\x63\x39\xea\x63\x29\x8f\xa5\xd8\x31\xf6\xe2\xe7\xd8\x4b\x78\x6a\x0d\xe1\xc1\x36\x35\xc7\xcc\x5e\x99\x6b\x84\x2c\x61\xf2\x33\xfb\xc4\x69\x00\x4d\x97\x22\x13\xa6\x09\xc5\x40\xbf\xbe\x7f\x67\x04\x31\xc3\xb0\xa9\x53\xc1\xf4\x5c\x4d\x68\x6a\x5b\x78\xf9\x59\x49\x42\x06\x18\x70\x3b\x7e\x61\xcf\xf9\x0f\xd8\x1c\x7a\x50\x73\x47\x49\x02\xb4\xe8\xc0\x03\xec\x9c\x6b\x2a\x82\xeb\xd7\x2b\x35\x44\xf7\xd5\x68\xe2\x2c\x8b\x02\x06\xfb\xe2\x38\x4a\xb5\x6a\x4b\x09\x58\x36\x05\x49\xf4\x9c\xd1\x4a\xfe\x58\x26\x71\x21\xe5\x2b\x48\x80\xe9\xfa\xd5\x3c\x4c\x3b\x78\x78\xa7\x02\xa9\x9a\xe5\x84\x9f\xd8\x37\xa2\xc7\x3a\x60\xde\xf2\x71\xdb\x42\x16\xac\x68\x03\x17\xa7\x68\xf0\x80\xe3\x05\xf0\x1b\x7b\xfb\xda\x1e\x4a\x37\xc6\x64\x52\x65\xe8\xa5\xa9\x3c\x50\x78\xf0\x93\x83\xf9\xb4\x87\x99\xdd\x88\xc2\x82\x6f\xf6\x99\x91\xdf\xe7\xd0\x59\x5c\xbb\x8b\x70\x0a\xe7\x70\x81\xf9\x74\xe8\x82\x9d\x72\x31\x3a\x65\xd5\x06\xee\xf6\xa3\x4b\x6c\x8a\x53\x16\x5c\x48\x37\xf7\x57\x65\xdb\x67\xe6\x9c\xd2\xed\x82\x75\x04\xe1\xb2\xdb\x85\xf3\x28\x89\x7d\xde\xe3\xb1\xc6\x8f\xe3\x61\x8b\xdb\xb1\x80\x47\x70\x7a\xa1\x12\x3d\xb1\x85\xa7\x8c\x14\x56\xac\x8a\x02\xb1\xa2\xed\x73\x6d\x56\x0f\x0d\x7a\x34\x78\x69\x68\x81\x52\x09\x23\x43\x4d\xd1\x60\xcd\xf1\x42\x55\xfa\x0e\xbf\x7f\x5d\x7d\xcd\x95\xd5\x44\xa5\x5c\x83\x04\xbe\x6c\xef\xdf\xa5\x1f\x31\x17\x3b\x73\x50\xe6\x44\x0d\xb1\x60\x78\xf6\x4e\xd1\xb1\x9e\xe6\xb0\x45\xa7\x0c\xce\x1a\xd0\x3e\x16\xb1\x88\xfd\xe7\xb1\x13\x68\x78\xb8\x8e\x46\x3d\xb0\x9e\xfd\xa0\x30\x19\x0a\x27\xc4\x56\x96\x40\x8d\xa2\x58\xe1\x8d\x89\x12\x8e\x48\x93\x57\x61\x01\x39\x99\x84\x6e\xc6\x93\xb4\x1a\x59\xc5\x9c\x98\x94\xa9\xf0\xc7\x5d\xaf\x34\xe3\x16\x1d\x60\xc2\xa5\xf0\xde\x6c\x94\xbb\x63\x07\x2d\x3a\xb8\xe5\xf0\x6d\x3b\xde\x99\xd3\x20\x8f\x2a\x96\x70\x60\x0f\x85\x5a\x3a\x40\xac\x33\x3e\x8e\x6c\x7d\xc3\xd1\xc4\xb3\x89\x07\x46\x95\x8e\x75\x6c\xca\x1e\x6a\x4e\xbd\x59\xb6\xd7\xca\xe3\x43\x8a\x4c\x18\x2f\x58\xd2\x96\xb7\xa3\xc3\x7d\xaa\xe9\xf2\x27\x5b\x25\xad\xf5\xc8\xcc\xaa\x5a\xff\x67\xf9\x5a\xeb\x27\xcd\xf2\xe1\x8c\xa9\xdc\xde\x44\x5f\x8a\x97\x76\xe3\x5b\xf1\x40\xd7\xd2\x20\x39\x77\x61\x16\x4c\x99\x69\x81\x52\x74\x53\xee\x64\xec\x49\x70\x55\xa0\x7e\x30\xa7\x7e\x60\x40\xa5\xa5\x82\x48\x73\xa6\x9e\x04\xe0\x6c\x64\xe6\xc6\x0b\x30\xc7\x64\x85\x1e\xc8\xf8\xad\x88\x0f\x85\xc4\x16\xbb\x9f\xab\x9a\xfc\x50\x91\x9c\xa2\x34\xc5\xed\x19\xb2\x90\x99\x2d\x9e\xfe\x1e\x27\xa0\xc9\xe2\x06\x8b\x39\x68\x61\xd8\xb6\x91\xa6\x9f\xd4\x06\xa0\xbb\xce\x86\xf6\x03\x8e\xaa\x8a\x01\xa2\x45\xe0\xa4\x28\x5a\xc2\x69\xe7\x1b\x4b\x38\x73\x58\x48\x2d\xe6\x67\x7d\xf2\xf3\x4f\x98\xde\x91\x28\x7a\xdf\x67\x1d\xc5\x37\x39\xc5\x37\x11\x4b\x46\x20\x78\x65\x93\xf0\x36\xea\x2b\x7b\x84\x84\xee\x4e\x71\x31\x4a\xc9\x55\x61\x1a\x2e\xdb\x84\x25\x85\x82\x57\xbd\x6f\x22\xbe\x5a\x0c\x84\x82\xc3\xb6\x42\x89\x13\x2e\x28\x95\x48\x63\xa6\x39\xfc\x43\x41\xc7\xc8\x8b\x39\x0a\x2c\x57\x14\xf1\x80\x3e\x61\x6b\xd9\x1d\x14\xa6\x0e\x6a\xa4\x4e\x02\x6f\x08\x80\xd5\x51\xb6\x5f\x97\xe1\xf9\x82\x87\x70\xef\xd8\x9c\x70\xc7\xd6\x50\x69\x06\xa5\xec\x17\x62\xff\x0c\xa6\x57\xf3\xcf\xf2\x37\xee\xbe\x2c\xa3\x18\x13\x79\x80\xf1\xf3\x95\x5a\x99\xde\x6c\xef\x51\x67\xdc\x62\x5e\x56\x36\x4e\x45\x50\x20\x49\x98\xa6\xf7\xf5\x61\xbd\x07\xe1\x95\x17\xb0\xbf\x5e\x06\x3f\x23\xc3\x9a\xe5\x81\x97\xa0\xd5\xda\x68\x77\xb7\x4a\x5c\xac\x54\x96\xc0\x05\x4a\xa2\xab\x99\x46\x9d\x3d\xe0\xde\x87\x32\xa9\xb2\x9c\x36\x1c\xb5\x28\x71\xc3\xea\x4e\x89\x3c\x80\x0f\x6a\x85\x42\x64\xc3\x3c\x38\xfa\xfe\xb9\x76\x8c\x8a\x4e\xd2\x4a\xf4\xfa\x1f\x47\xfd\x8f\xe7\xca\x60\x46\xf5\x8f\x56\xfd\x7d\x45\xb9\xc4\x51\xed\xa1\xe1\x45\x29\x86\xf0\x34\xc3\xe0\xd8\xcb\xb7\x32\x8d\x72\xeb\xb8\xa4\x99\xfb\xbf\x25\xc5\x17\xcd\x5b\xfd\x4f\x11\x15\x24\x41\x55\xe7\x0a\xf4\x43\x79\x5d\x11\xfd\x8c\x3f\x57\xe6\x60\xab\x4a\xcd\x48\x82\xcc\x00\x65\x4d\x03\xb4\xde\x14\x98\x75\x27\xbd\x5e\x8c\x02\x44\xd0\x64\x92\x67\x5a\x60\x94\xa4\x84\x77\x7e\x09\x16\x03\x4e\x0a\xa9\xd5\x9a\x94\x33\x77\x1f\x4b\xca\xa8\x8e\x69\xa3\x74\x0f\x5a\x08\xf2\x9b\x51\xdb\xf8\x83\xb7\xba\xb4\x39\xd8\xe7\x88\x1d\x92\x92\x4c\x6e\x01\x3d\x09\x18\xf2\xee\xeb\x36\xc5\x0e\x03\x14\x94\x6d\x3a\x0c\x63\x3a\x02\xbd\x31\x46\x68\x7d\x1b\xc5\xd2\x51\x59\xd4\xa9\x06\x4f\x4f\x8d\xf2\xea\xf9\x87\xd1\xa3\x82\x99\x85\x8a\x64\x40\x87\xf0\xc6\xd3\xd0\xdc\x4a\x2a\x76\x0b\x49\xa9\xf9\xd2\x6e\x0e\xdb\x86\xd5\x03\x47\xee\x72\xf3\xc3\x1b\x05\x83\x1d\xe5\x9e\x64\xc3\x29\x1e\xfc\x32\x0f\x7e\xbc\xe7\x4e\x3f\x68\xc1\xa6\x38\x86\x80\x3e\xe8\xc8\x20\x48\xaf\x70\x2b\xb5\xb0\x33\xb4\x5e\xc5\x3b\x14\x50\xe6\x8b\xd8\x84\x48\xf0\xf9\xb2\x98\x03\x57\xad\xae\x90\x53\x03\x59\x74\xe4\x56\x80\x2c\x10\x9f\x3e\x50\x42\x92\x0d\xb3\xd2\x22\xdb\x27\x22\x91\xac\x04\x22\x1b\x03\x96\xad\x5a\x78\xd8\x69\x02\xc1\x0f\x2c\x0e\xa9\xcf\x18\xde\x00\x13\xdb\x98\x54\x9f\xd2\xc8\x68\x06\x54\x5e\x68\x32\xa2\xd4\xaf\x9a\x08\xb4\xc5\xaa\x62\xb9\xb9\x22\xc7\x74\xe0\x9c\x54\x91\x3e\xad\x23\x3d\x6c\xb9\x50\x4c\x88\x1a\xac\x08\x6f\x0f\x32\x26\x7d\xa8\x2e\x36\xc6\x6d\x47\xff\x06\x05\x86\x57\xe3\x1c\xfa\x0c\x09\xb7\x30\x6c\x71\xd1\x13\xc8\x44\x1a\x85\x15\x12\x02\x10\xb4\x72\x19\x66\xd5\x00\xb4\x8c\x52\x78\x70\x40\x52\xfc\xe1\xa0\x45\x78\x3a\x62\x1b\x26\x44\x63\x93\x7e\xd0\xb4\xa8\x1e\x29\x1a\xb5\x18\x1e\x38\x56\x5a\x6c\x8c\x90\x5e\xcd\x21\x63\xc2\x5a\x67\x65\xf4\xc3\xc5\x13\x80\x81\xe0\xee\xc3\x28\x7e\x68\xf9\xb1\x1f\x3f\x3b\x03\xff\xa0\x0a\xcb\x89\x46\xd9\x4d\xbe\xe9\xfe\x62\x9c\xc2\xda\xd8\xeb\x19\xe2\xef\xdc\x5e\x2c\x50\xa7\x42\x02\x7b\xe4\x57\xbf\xed\xe8\x97\xf1\x40\x07\xa0\xa3\xa5\x74\x25\x76\xa9\xb3\x60\x6f\xaf\x74\xab\x97\xbe\xc7\x57\xfa\x76\x75\x93\x7d\x3b\x68\xae\x89\x6e\x8f\xe1\x2d\xd7\x2f\x4b\xb7\xb9\x46\x6f\xe8\x76\x4f\x95\x9d\x95\xf2\x64\x7d\x7b\x2c\x6d\x7a\x2c\x6d\x7e\x2c\xbc\x79\xd3\xda\x63\xe9\x8f\xa5\x87\x29\x6c\xd8\x87\xee\x61\x5a\x83\xb6\xca\x8e\x47\x06\x94\x80\x59\x3a\x9e\xc3\x56\x98\x02\xb6\xbd\x00\x74\x5a\xd1\xc3\xbf\x54\x82\x52\x9c\x42\xc3\x4f\xf8\x72\x0f\xcf\xb0\x07\x22\xfa\xc2\xad\x36\xa5\x27\x48\xe2\x60\xa6\xc8\x28\x9d\x49\x35\xbe\xc0\xd0\x38\x11\xec\xc9\x28\x66\x56\x44\x52\x1c\xc1\xd3\x32\x5a\x03\x70\x34\x4a\x47\xb3\x89\x1a\x1d\xf7\xe9\xf7\x01\x38\xbc\x2a\x53\x02\x53\x50\x66\xf6\x08\x8a\x58\xc1\xbb\x35\xe4\x1e\x7e\x10\x9b\x33\x3c\x23\xd3\x7d\x42\x90\x47\x7d\xd1\x60\x9f\xb1\xec\x81\x6a\x3f\xc8\xa4\x53\x9d\x69\x87\xad\x75\x44\x0b\xa4\x47\x1c\x58\xeb\x71\x27\x57\xe6\x8b\x22\xaa\xb1\xc4\x6f\x00\x5d\xe8\xb0\x24\x77\xa2\x23\x19\x86\xbf\x1e\x8b\x2d\x50\x3a\x32\x6b\x6e\xf5\x2b\x6d\x89\x3b\xc0\x8a\xd9\xde\x3a\x36\x2f\xd4\xf4\xac\x88\x77\x57\x84\xf3\x85\xd1\x0a\x21\x10\xf5\xd7\x2b\x7c\x1e\x4b\xe7\xbe\x4a\x4f\x4f\x35\xa8\xde\x5e\x81\x69\x15\x34\xa8\xb5\xad\xe3\xa1\xeb\xdd\x7e\xe6\xdd\xad\xce\xb3\x29\xdd\x52\x93\xb0\x40\x9d\xe0\x64\x81\x99\x67\x9a\x74\xe5\x87\x0d\x15\x59\x19\x8d\xf3\x86\x3d\x65\x7e\x71\x4d\xae\x94\xb9\x3a\x3a\xbc\x23\x8f\x7b\x26\x8a\x84\xd5\x57\x51\xb3\x48\x65\xfe\xe4\x03\x96\xc2\xfb\xd7\xdb\x01\x57\x7b\xd4\x1c\x4e\x07\xe6\x1a\x1d\x27\xdf\xba\x9f\x65\xeb\x58\xee\x84\x22\x29\x23\x94\x96\xa9\x5a\x8a\x09\x6e\x0b\x26\x85\xb8\x10\xd7\xb3\x36\xcb\x9e\x71\x11\xb6\xe7\x17\x0c\x4e\xb6\x3a\xcf\x4a\xf6\x4c\x63\x2c\x7d\x76\xaa\x09\xe8\x54\x0e\xd0\x73\x4e\xb7\x5f\x60\xda\x9a\x0e\xaa\x1b\x76\x65\xd4\x44\x2d\xde\x9e\xd2\x08\xe6\xa2\x43\x61\xdf\xb4\xfd\x60\xb9\xa7\x8f\x2b\x3d\x8a\x50\xfa\xdb\xc6\xe5\x02\xf4\x32\x7d\x3b\x38\x78\xf7\xad\xae\x5c\x8c\x53\x24\x70\xd8\x30\xf9\xe8\x1b\x7b\xf3\x8e\x46\xbe\x43\xf1\xeb\xd2\xf7\x49\xb8\xff\x8f\xa7\xa2\x60\xe2\x58\x46\xdf\xf9\x40\xa9\x03\x14\xf0\x0e\x9d\xb3\x4a\xf1\x38\xd9\xd2\xb1\xb2\xd3\x55\x60\xef\x3b\xef\xc0\xf5\xdd\x4e\x8f\x01\xb0\x3a\xee\xac\x00\xfb\xb8\xa7\xde\xf7\x2d\x62\x83\x9b\x4a\x7d\x16\xea\x55\x23\x71\x17\x9c\xdc\x98\x92\x1f\xa5\xe4\x4e\x8a\x52\x7d\xe7\x63\x34\x0a\x32\xba\xa7\xfd\x10\x8b\xd3\x21\x1f\xd6\xc7\xbd\x0c\x8f\xcb\xe5\x51\x85\xc1\x60\xb9\x6a\xd2\xf7\x6a\x8f\xae\x29\xe4\x76\x9d\x01\xff\xa6\x59\xe2\x00\xcc\xd2\xf2\xe4\x83\x99\x44\xdf\xcf\xa0\x9f\xe1\x2c\x68\x2f\xf3\x27\xa0\xb3\xc1\xc6\x86\x9a\x15\x64\xcc\x8e\x7b\xb1\x76\x59\xfe\x75\xb0\x3b\x5b\xa3\x8e\x31\xbd\x74\xcb\x04\xde\x58\xee\xfe\x84\xde\xd2\x6b\xc5\x47\x95\x86\xfb\x05\xe4\x73\xff\xa1\x99\x46\x91\xd6\x2e\x75\xdb\x9e\x7d\xc2\xe5\xde\x6e\xbb\xb3\xbd\xb1\xd3\x69\x3e\xb3\xed\xd8\xc2\x53\xd3\x3c\xa5\x80\xd8\xc7\xa1\x74\xa0\xba\x27\xb4\x32\x9d\x8d\xf2\xd7\x7e\xbf\x65\x35\xf8\xed\xc2\xa8\xeb\x86\xbf\x7f\xdd\x8d\x90\xd5\xc9\xcf\x03\xa7\x8e\xfb\x89\x12\x31\xd1\xf3\xe7\xb1\x7c\xce\x3d\xe9\xdc\xf4\xdc\xf4\x5f\x8b\xed\xdc\xde\x2b\x46\xaa\x73\xdb\x79\xe3\xd7\x00\x2e\x89\x5d\xf8\x1c\x8c\xe6\x17\x61\xdf\x0c\xb9\x0d\x4f\x1e\x9c\x9b\xe9\x8d\x20\xac\x72\xac\xe9\xce\x9c\x06\x0f\x5c\x90\x18\x10\x09\x25\x87\xc5\xc6\x73\xab\x59\x0b\xee\xdc\x43\x9c\x70\x7e\x1f\xc8\x6f\x33\x0c\xa6\x39\xf6\x05\xb4\xc1\x0d\x57\x9b\x46\x2d\xdc\x39\xfe\xb4\xcf\x85\x77\x5f\xfe\x72\x8c\xc9\xcd\x62\xb8\x26\xb0\xec\xd8\xe3\xc4\x2c\xd8\xef\xb1\xba\x45\x2a\x42\x58\x20\x1d\x71\xbb\x45\xed\x4f\xcc\xee\x11\x8b\x93\x1c\xa1\x59\x20\xc7\x2a\x4f\x3a\x19\x97\x4c\xce\x5d\xf0\x92\xb7\x82\x39\x49\x9c\x2c\xc6\x32\x62\x24\x9b\xec\x37\x7b\xdb\xab\x3d\x77\xa9\x8d\x0f\xcd\x19\xe6\x1d\xc9\xf3\x40\x21\x69\x2f\x7d\x1e\xd5\x6c\x78\x00\x5b\x01\xd7\x33\xce\x71\x14\xfb\xf4\xa3\xd8\xa7\x1f\x20\x3c\xed\x4a\x1e\x16\x7f\xcf\x71\x61\xfc\xa4\x26\x88\x73\xdc\x9a\x39\x75\x04\x39\x8b\x4c\xb2\x1d\x10\xbd\xcf\x22\x97\xde\x58\xe5\xe8\xe8\x48\x90\xc1\x15\xe1\xb1\x43\x45\x76\x1f\xdb\x10\xf3\xa1\x48\xe5\x85\x10\xac\x55\x91\x6d\x03\xb8\x9b\x9f\x80\xbd\x8f\xb3\x74\xe5\x5b\xfb\x17\x1e\xeb\x63\x0d\xe1\xa5\x46\x79\xac\x78\x0a\xb4\x04\x05\xcf\xfe\x54\x12\x77\x1d\xb2\x56\xa8\x68\x0a\xe8\x38\x6e\xf8\x24\x03\x69\x66\x45\xe8\xd8\x79\x23\xb4\x26\x3f\x18\xc1\xa7\x89\x3f\x8f\xcb\x2b\xc6\xd8\xee\x18\xb9\x29\x47\x43\xbb\xd3\xc9\x5d\xee\xfe\xfd\xa0\x1e\x48\xeb\xc1\x69\xbe\x3c\xeb\x77\x07\xb3\xf9\xdb\x9d\xc2\x91\x08\x52\xda\x61\xb4\x90\x1e\x6b\x98\xe2\x5b\xcd\x55\x47\xfb\x35\x4c\x29\xea\x28\xb6\x86\xe9\x1d\xb0\x51\xab\x88\x5b\xd1\x40\xbd\x39\x8d\xc8\x1f\x1c\x12\x59\xed\x8e\x82\xd2\xc4\x4f\xb2\x13\x2c\xd1\x10\xd2\xe1\x86\x94\x2a\x6d\xfe\xd3\x1e\x4f\xa7\x5a\xc3\x14\xd6\xf0\x79\xac\x61\x9e\x05\x4e\x90\x98\xf9\x1f\x0c\x8d\xf3\x5c\x90\xce\xb9\x48\x0d\x5d\xbd\x8d\xd3\x14\x99\xc5\x71\x83\x11\xa6\xb5\xc8\x16\x0d\x9f\xae\xd6\x09\xec\x62\xa7\xfb\x2c\xb7\x2e\x9b\x64\xec\xbe\xe0\x70\xf0\x0d\x73\x5f\x01\x16\x38\xb8\x66\x68\x8b\x97\xf5\xb0\x4d\x7b\x9a\x1c\x36\x8b\x41\xb3\xed\x0b\x63\xa6\x98\xc7\x0f\x53\x49\x97\xfd\x59\xff\xe0\xe1\x39\x37\x3c\x0c\xfb\x11\x3b\x63\xad\x97\xb9\xb8\x73\xe0\xf3\xe6\xcc\x13\xe4\x9a\x68\x8c\xb9\xb9\xf8\x3d\xf3\x48\x84\x32\x32\x98\xaf\x0c\x8c\x23\x7a\x0a\xcd\xe9\x2d\x61\x72\xcb\x73\x99\x24\x66\x47\xfb\x14\x77\xd7\xf3\x49\xab\x33\x78\x66\x5f\x29\x53\x74\xf7\x6d\x4e\xe1\x4a\xc0\x75\x31\x13\xdc\x78\x60\xdc\x3e\xb5\x53\xd4\x37\x3c\xe2\x89\x5c\xb0\x9f\xb4\xbb\xbb\x50\xbc\xa0\xbb\x25\x9e\x8c\x31\x15\x5f\x64\xda\x15\x97\x52\xd6\xb0\xc4\x81\x75\xba\x7e\xc3\xd6\x0f\xde\x6c\xec\xb3\xda\xc2\xf0\xa2\xb2\x55\xab\xb4\xbe\x4a\x09\xbf\x86\xe5\x97\x51\x2d\x11\xee\xd4\xc9\xeb\x45\x92\xbe\x6a\xe2\xb8\x0e\x6e\xdd\xad\xdc\x77\x5e\xc3\xeb\xdc\x59\xcf\x16\xfd\xf7\xb6\xba\xb0\xa9\x2e\x33\xf2\x9c\xea\x88\xd7\xb0\x2c\x61\x66\x65\x59\x16\x57\x65\xab\x38\x39\x59\x87\x15\xdb\xeb\x62\x72\x80\x22\x1b\xee\x00\xfd\xc8\xe4\xc5\xd8\x0f\xdc\xdc\x73\x58\xdc\xd6\xeb\xe8\x92\xbc\x86\x2e\xc9\x3a\xf7\x15\xcf\x04\x04\xd8\x15\xcc\x96\xd6\xb0\x40\x55\xcf\xaa\x5d\x78\x43\x02\x12\xfa\x81\x44\x23\x64\x10\xed\xc5\x50\x9e\x89\x71\x4d\xa6\x5c\xcb\x50\xd1\x8c\x4a\xf8\xa1\xe0\xf8\x0f\x40\x89\x61\x6e\xab\xe1\x5e\x89\xf8\xd0\x1c\x10\x72\x0d\x94\xe9\x20\x54\xf9\x4d\xf1\x2c\x24\xa6\x68\x7c\x60\xff\x1d\x2b\x9b\x0a\xd2\x8b\xc4\xb2\x33\x5d\xcf\xa5\x82\x49\x8c\x26\x14\xef\x28\xa5\x96\x65\x22\x24\xb7\xd4\x83\x6f\x08\xdf\x18\x0f\xa4\x1e\x65\xc0\x06\x5d\xf8\x84\x67\xa6\x17\xcd\x72\xa5\x7c\x62\xf8\x71\x97\x1f\xe6\x07\xba\xcf\x7f\xff\x60\x28\x7c\x47\x18\x5a\xfd\xdf\x49\x1d\xe4\xf0\x66\x49\x65\xe8\xab\x5b\x43\xf6\x76\x9b\xc3\x0f\x2d\x74\x4c\x74\x9a\x10\xc3\x31\xa4\xb1\x20\xf2\x0b\x86\x75\xfd\xf9\xf5\x64\x1c\xf3\xeb\xbe\xdd\xa3\xfc\xc6\x7e\x25\xbf\xf0\xd8\x1e\x40\xd4\x69\x8a\x22\x2b\xca\xfc\xfa\xa0\x7f\xcc\x89\x15\x3a\xa7\x49\x48\x31\x28\xe4\xa4\x02\x8b\xd2\x46\xd6\x7b\xb4\x9c\x9a\xbd\x4a\x4d\x0c\xbb\x0c\x83\xa9\xc8\x18\x87\x4c\xe5\xdc\x4a\x2d\x72\xa0\x38\x60\xe2\x80\xe9\xc9\x22\x24\x9f\x2b\xf2\xbc\xe5\xa1\x00\xeb\x26\x0a\xfa\x74\x8d\x2a\xce\x49\x19\x0c\xce\x60\x0f\xc6\xa2\x99\xfb\x2f\xc8\x07\x0d\x20\xc3\x23\x74\xd5\x19\x41\xca\x33\x09\xe4\x80\xec\x5f\xe3\x00\xb7\x07\x32\xfa\x31\x22\x8e\x9e\x79\xf4\xf0\x5a\xad\xc3\x6e\xa8\xa4\x69\xb5\x5c\x82\x87\xac\x5c\x4a\x68\xe7\xab\xed\x6b\xc8\xbd\x69\x67\x93\xad\xbc\x7f\xd0\x19\xe5\x93\x19\xa5\x21\x6c\x61\x2e\x67\x98\x07\xaa\x40\x19\xe6\xde\x42\x9d\xd6\x01\x89\x4a\x43\x0f\xbb\x85\x0e\x47\x4f\x96\xed\xf6\x2c\x62\x4d\x61\x7b\xf6\xb2\x38\x45\xc4\x30\x90\x6c\x11\x31\xc1\xa5\xc7\x15\x27\x5a\x40\xe8\x60\x8b\xa3\xe1\x2a\x1e\x96\x90\x5c\x09\x59\xa6\x8a\x32\x25\x09\x85\x4d\xe0\xf5\x66\x36\x47\x2c\xa3\x54\xc1\xc0\x9f\xda\x9c\xba\x27\xb8\x0d\xb3\x86\xed\xab\x29\xd9\xc3\x41\x13\xae\x76\xd4\xde\x7d\x86\xf1\x44\x47\xac\x14\xf5\x8d\x80\xce\xe6\x67\x80\xea\x58\xc0\xe8\x3f\x27\x07\x22\x6f\x82\xc2\x76\xc9\x55\x6f\x76\x57\xfb\x3c\x85\xe2\xb4\x11\x64\x46\x42\x41\x35\x54\x38\x34\xec\xf3\xd4\x5f\xaf\xfa\xb8\x3d\xf3\xb7\xe2\xa0\x4c\x6d\x03\x30\x59\xfb\xfc\xea\x0c\xde\xfa\xae\x7d\x5e\xfa\x0e\x8a\xa7\x2f\x14\xa4\xc9\x02\x52\x60\x29\x9e\xd3\x15\x16\x21\x66\xdc\x37\x96\x82\xde\x9d\xbd\x5c\x8c\x18\x25\x2c\xd2\x29\x7a\xc7\x32\xad\x29\xbe\xc0\xe4\x68\xe4\x69\x89\xf6\x0c\xcc\x1e\x6b\x7b\x79\x83\x10\xed\x6f\x9f\xb7\x90\xe6\x01\x22\x43\x97\xce\x38\x16\x76\x8a\xfb\xcc\x70\x29\x5f\x82\xda\xd0\xc8\x75\x7f\x52\x7e\x52\x57\x2f\x06\xa0\x32\xa0\xc7\x61\x2c\x78\x83\x81\x7a\x33\xa2\x32\x5c\x34\xaf\x15\xb5\x15\xb1\xdf\xaf\x6e\x79\x9f\xa9\x0f\x08\xc8\x33\xe2\x53\xd2\x28\x9b\xf3\x89\x7b\xc2\x80\x96\x9f\xf1\x95\xce\x88\x08\x2f\xd7\xc4\x62\x5f\x98\x4f\x0b\x54\xe0\xad\x54\xee\xa7\x04\xcb\x4d\x0a\xcc\xc7\xc5\x7c\x59\x76\xcb\x8f\xc5\x32\x08\x27\x07\x1f\xd8\x3a\x5e\xf1\xfa\x8c\x71\xde\x86\x76\x4a\xf6\xfb\x1b\xc1\x59\x56\x55\x66\x7c\xa7\xa7\x82\x52\xa3\xa0\x29\x45\x47\x17\x2d\xed\x63\x0d\xdf\x4b\xd4\x38\x6e\xe3\xe0\x61\x9d\xf6\x91\x2f\x09\xe2\xc8\x2e\x1f\x1c\x59\x0e\x74\x1a\x47\xb6\xbe\xf2\x38\xb8\x5d\x4e\xa4\x59\x8b\x66\xe7\x8f\xba\xaf\xe1\x68\x28\xf4\xa3\x45\xce\x0f\x78\xf5\x43\xe9\x10\xff\x8f\x36\x94\x44\xac\xa1\x84\x77\x42\x3c\x4b\x20\xbb\x3d\x63\x04\xd8\x97\x0e\xe7\x3c\x2c\x63\xc0\x26\x7c\xe5\x99\x2c\x7b\x0d\x59\xb5\x2e\x4f\x29\x46\x28\x1d\x2a\x32\x77\xd2\x07\x1d\xbf\x75\xfb\x71\xb6\x71\x52\x01\x6a\x48\xf1\xae\xa3\xcc\x5c\x62\x56\x34\x59\xf9\x94\x39\xee\x57\xb9\x9b\x66\xc1\x75\x28\x14\x54\xf4\x4a\xf5\x1a\x64\xcb\xbc\xba\xf7\x7f\x3a\x83\x32\x5b\x37\x49\xf0\x1f\xfb\x81\xca\xdd\xa7\xc4\xd8\x25\x2c\x08\x00\x79\x96\x8c\x16\x5d\x2e\xd7\x07\x2a\x45\x99\x3d\x7b\xe6\xe6\x11\x31\x01\xa5\xcc\x4d\xf8\xcb\xc7\xd3\x8b\x33\x69\x00\x16\x04\xb8\x68\x7d\xa5\x3d\xc5\x7a\xc5\x28\x62\xb6\x57\x62\x66\x08\xd1\xbf\x32\x19\xa1\xa4\x77\x60\xf9\x42\xb4\x29\x6f\xcf\x2c\x78\x86\xda\x5a\x72\xfc\x5f\x87\xc8\x65\x88\x73\x4d\x63\xac\x9a\x64\xfa\xa6\x63\x28\x32\x1d\x96\x5b\x68\x9c\xb4\x17\x0e\x47\x65\xf3\x55\x79\xc5\xb7\x6a\x5e\x36\xd9\xd3\x14\x2e\x94\xff\xfc\x20\xfb\x80\xc3\xd2\x37\xc0\x8c\xad\x3e\xde\x93\xb3\xe0\xa8\xc1\xdb\x50\xdf\x1c\x7d\xff\x38\xfe\x0e\xc7\x8c\xb9\xf8\x27\x8d\x33\xb5\xe2\xe1\xec\x2e\xd1\x16\xa9\x11\x23\x4e\x41\x9e\xb2\xbb\x2f\x87\x55\xae\xc3\xc2\x3c\x28\xb9\x81\x9a\x8b\x9a\xa6\x55\x58\x5b\x1d\xbb\x63\x84\xfd\xbf\x1e\x9f\x18\x41\x0d\x51\x74\x2c\x25\xcd\xcc\xc6\xe2\x16\x18\x20\x4d\xb7\x3a\x81\x57\xb3\x31\x3d\x29\x95\x12\x41\x61\x00\x34\x20\x1c\x94\x16\x9f\x50\x96\xa6\xb0\xe2\xfc\xcd\x1a\x4a\xaf\x47\xfc\x35\x90\x30\x87\x29\x3f\xe6\xe8\x27\xda\x50\x0f\x64\x83\x01\x30\x7b\xb5\x1a\xf7\xe3\x15\x71\x09\x67\xa5\x38\x63\x4b\x43\x54\x2a\x0f\x4a\x6b\x46\xa9\x9a\xa4\x81\x11\xb9\xfe\xfd\xba\xa2\xce\xd5\x6a\x2e\xd0\xfb\xd5\x16\x6f\x95\xa5\x36\xab\xa3\xbe\x06\xbd\x62\x9e\xd8\x9e\x1c\x47\xda\x53\x34\x19\x6d\x5a\xaf\x3e\xa0\x4d\xab\xf5\x20\xbc\x8c\x66\xd4\x7e\x42\x9c\x40\x2d\x69\xc0\xb6\x32\x61\x4f\x7b\x01\x58\x1e\xb7\x69\xa5\x28\x7a\x1d\xe1\x53\x6c\x67\xeb\x2f\x68\xdf\xd1\x6e\x35\xf9\xbd\xdd\x52\xd2\x38\x93\x69\xc5\xe2\x56\x30\xa1\xb3\x29\x4d\xbf\x96\xd2\x14\xaa\x83\xce\xdb\x8d\x6b\xe8\xcb\x4a\x73\xe4\x40\xcf\xec\x34\x7b\xb6\x84\x76\x8a\x03\x3d\x27\xa3\x5a\xfb\xfb\x0e\xb1\x93\xbb\x0a\x6b\xe8\x15\x83\x41\xaf\xaf\x12\x3a\x40\xa3\x49\x5d\x0a\x80\x7c\xb0\x62\x0d\xbd\x3d\x05\x43\x4c\xc7\x33\xe4\x46\x59\x7b\x3b\x9e\x86\x59\xc3\x8f\xfe\x47\x2b\xdc\x1f\xf8\xfd\x83\x2b\x40\xa0\x35\x98\x7d\xa9\x14\x68\x7f\x52\x9e\x31\x26\xff\x24\x0c\x0b\x3f\x32\xd1\xa4\x20\xa1\x55\xfc\xc3\x33\x67\xb8\x29\xa1\x86\x09\x82\x1f\x73\xf1\xc6\xaa\xd8\x87\xe3\xee\xc7\x84\x8e\xcf\x7b\x97\x4a\x8b\x6a\xd3\xaa\xcf\xbb\x9a\x7f\xef\x0f\x67\xcd\x1f\xba\xa8\x71\xe5\x90\xfc\xa9\xd1\x27\x98\x80\x87\x21\x04\xd3\xac\x8d\x68\x60\x27\xab\xd7\x39\x31\x95\x27\x0f\xa5\x2b\xa0\x70\x72\xe2\xc9\x59\xa5\x42\xba\x99\x5c\x74\x6e\x68\xb4\xa7\x15\xf6\x59\x92\x53\x74\xa7\xa7\x4d\xe7\xcf\x6a\x63\xc0\xf9\xe1\xb8\x76\x7e\x28\x9f\x7c\xd1\xd4\xbe\xb4\xfc\x72\xfb\x9a\xe0\xea\x0a\xbf\x70\x88\x0c\xff\xc6\xbc\xa2\x04\xbe\x11\xba\xba\x57\x28\x35\x60\xb9\xb3\xc7\xfb\x7a\xdd\xf9\x32\xdf\xbe\x08\xe1\xf9\x58\xa7\xfc\x58\xe7\xc7\x3a\xbf\x5f\x8f\x75\xfe\x5f\xa9\x0f\x0e\x83\x31\xcc\xb8\x09\xa2\x80\x6d\x4d\x01\x47\x5f\xa0\x5f\xd0\x69\x85\x3a\x46\x40\x4e\x3d\x62\x98\xb1\x02\x00\xa4\x41\xc7\x60\x62\xb6\x02\x34\x39\x05\x78\x8c\x50\x11\x74\x44\x2a\x58\xfb\xde\x06\x88\x97\x1d\xe2\x1b\xf9\x96\x9c\xd2\xec\xb1\xe1\x1b\x7e\x44\xde\xca\x94\xc1\x26\x23\xd1\x1e\x07\xa0\x87\xac\xae\x00\x3e\xbb\x8b\x01\xb7\xa7\x48\xab\x87\x4c\xc8\xa1\x5a\xd9\x64\xef\x8b\x2a\x83\x27\xf1\x15\xf0\xc0\x3f\x10\xab\x13\x10\xfd\xc2\xc5\x10\x02\x1d\xdc\x15\xc4\x30\xad\x86\x2c\x3f\x4a\x5a\x9c\x5a\x9c\x39\x77\x56\x89\xc3\x3f\x83\x64\xae\x74\x0a\xe5\x45\x14\xe9\x96\xa7\x71\x88\x2c\x9e\x75\x2d\x7c\x11\x0f\x8c\xa7\xcb\x05\x70\x85\x78\x42\x94\x10\xef\x4d\x19\xb2\x3c\xc5\x43\xd6\x04\x9e\x53\xb6\x86\x04\x54\x62\xd8\x1c\xde\x33\xf0\xc3\x67\x05\x08\xe9\x01\xde\x9b\x06\x90\x32\xc0\x7b\x00\x77\x8d\x07\x9c\x11\x35\xa4\x2d\xc3\x69\xe6\xaf\x99\xf5\x29\xb7\x75\xf4\xbc\xe0\x92\x63\xa4\xf9\xa0\xe3\x62\xc4\x7c\x73\xd9\x26\x86\x52\x19\xa3\xc2\x7a\x5a\x1a\x4d\xaf\xdd\xa5\x3d\x63\x30\xbb\x27\x17\x8f\x06\x34\x0f\xda\x53\xa7\x2a\xbb\x87\x5a\xda\xb3\x97\xfd\x42\x1e\xe2\x90\x0c\x81\x3d\x74\xa6\xa1\xb4\x15\xd7\xba\x0d\x36\x6b\x63\xc0\x96\xbd\xa5\xa5\xeb\xf3\xe1\xa7\xd7\xf6\xd2\xee\x95\xbc\x34\x27\x38\x88\x4c\xc8\xd9\x19\xa0\x1f\x73\x25\x37\x66\x65\xca\xb5\xb5\xc8\x93\x90\xd2\x21\x51\x41\xb9\x22\x1f\x6e\xe9\xb0\x42\x65\x1a\xda\x6a\x6b\xa9\x80\x89\xa5\xda\xd0\xef\x90\xce\xac\xba\x8d\x4a\x77\xa3\xe3\xd5\x82\x51\x3c\x16\x54\x9d\x1d\x5f\xdc\xad\x3d\x90\xb8\x7b\xc5\xc6\x69\x6c\xa3\xe9\x72\x0a\xdd\xe0\x8a\x7c\x36\x19\x43\x67\xbf\xf2\xc3\x68\xfd\x44\xd7\xc7\x48\x66\xbc\x57\x06\xb6\x90\x90\xbb\x9c\x9d\x9f\x68\xed\xf1\x39\xcb\x86\x92\x22\x08\x88\xd8\x33\x1e\x6b\x81\xde\x72\xc5\xbe\x0b\xa5\x10\x9b\x4c\x71\x0a\x4d\xb6\xa7\x81\xbd\x36\x6e\x1c\xc4\x69\xa5\x9c\x14\xa7\x77\xcc\xde\x73\xd8\x36\x50\x9c\x1a\x5b\xe5\xe4\x0a\xbe\x14\xca\x24\xed\xc4\x22\x8b\x32\x38\xd4\xe8\xe8\x58\x6f\xf0\x24\xce\xd6\x06\xc7\x9b\x1d\x80\x95\xeb\x59\x11\x07\x78\xd7\x38\xc7\x5d\x45\x0d\x48\x16\x91\xfd\x33\x7b\xd1\x79\x89\xab\x2c\x0e\xb8\xaa\x11\x71\xa0\x8d\x44\xc7\xb3\x38\x9b\x54\x0e\x80\xb2\x9b\x4d\xea\xc6\x78\x16\xcd\xc7\x38\x5f\x0d\x36\xde\x7b\x67\x1d\xac\x62\xcc\x9c\xce\xf1\x45\x4e\x25\xac\xed\x31\x7b\x2f\x1a\xf3\xc1\xad\x0c\x45\x42\xef\x73\x43\x73\xc7\x17\x5c\xe8\x8f\xaf\xd1\x62\x16\x4c\x6b\xe2\x12\x7d\x12\x40\xa8\x19\xb3\xf4\x0d\x55\x21\x41\xe4\xf4\x82\x1d\xcf\x42\x12\x6a\x6e\xa6\x5d\x05\x8b\x78\xe9\xb3\x58\x63\xc2\xef\x85\xf5\x3a\x15\xb7\xe4\xfa\x4a\x4c\x3e\x3c\x30\xc4\x64\x63\x47\x6a\xe9\xad\x91\x79\x7b\x79\xbf\xad\x6c\xdf\xa3\x0c\xdf\x57\x19\xbe\xaf\x72\x7b\x5f\xe5\xf6\xbe\xca\x2d\xcf\x71\x6f\x71\x57\x99\x29\xe6\x14\x62\x20\xdd\xdb\x8a\x8a\x91\x13\xc7\xd6\x9c\xa6\x48\x7e\x5a\xcb\x59\x55\x8a\x53\x6c\x43\x60\x4e\xd3\x08\x31\x73\x8a\x05\x7a\x30\xb8\x9c\x84\x26\xf6\xa5\xf8\xd4\x16\xf9\xb5\x60\xeb\x46\xf1\x6c\x51\xf0\x44\xe4\x74\xf3\xf2\xda\xff\x18\xcc\x39\x30\x2e\x69\x80\xb1\xcd\x10\x83\xc5\x9c\x78\xaa\xf3\xd8\x01\x71\x68\x0e\xb8\x39\xa4\x88\x9a\x2d\x09\xd7\x58\x82\xbb\xe0\xcd\xf2\x01\xd3\x7e\xc3\xd5\x62\x0b\xb5\xb1\x40\x5f\x09\x74\x70\xa0\x71\xe7\x84\x7b\xb5\x0a\x2c\xdf\x54\xb8\xc9\xf9\x49\xbd\x0f\x80\x62\x56\x85\x42\x4e\xce\x13\xa3\x64\x97\x66\x14\xc5\xa7\x30\x9d\x44\x8c\x03\xf0\x1f\x68\x4e\xec\x1b\xe6\x41\xe6\xb2\x54\xcc\x19\xf7\x09\xd9\x3a\x73\xa6\xb8\x0a\xd0\x31\x0c\x50\x57\x1e\xe8\xe8\x48\x73\x7e\xbb\x7b\x94\x22\x52\xb0\x41\x30\xc8\x5b\xda\x19\x5d\x80\xc4\xed\x36\xe3\xc6\x1e\xd4\x8d\x47\x64\x36\x93\x1b\x08\xac\x8e\x67\xc1\xed\x4e\x00\xcb\x51\xb1\x02\x64\x57\x91\x8f\xab\xcd\x67\xce\x8e\xb5\x19\x5f\x6d\x3f\x1f\x1b\xdb\x74\x3e\x36\xca\x2d\x59\x25\xac\x37\x88\x37\xe4\xfc\x13\x69\xaa\x97\x1a\xca\xb5\x71\xfd\x77\xdf\xfa\xff\x6d\x5b\xc7\x2d\xec\xbe\x3f\x7a\xdb\xb2\x1e\x1b\xd4\xbe\x25\x7d\xed\x48\x8f\x0d\xe9\xfb\x7e\xf4\x6d\x3b\xfa\xb6\x1b\x7d\xdb\x8c\xbe\xed\x3e\xff\xdd\x7c\xfe\xb3\xf7\x7c\xdb\x7a\x1e\x9b\xcd\xf7\xbd\x66\x62\xdf\x4f\x35\xae\x1c\xeb\x89\x5d\xda\x6b\x23\xfa\xbe\x0f\x7d\xdb\x79\xbe\x36\x9e\x23\xb3\x26\xe6\x13\x4f\xa1\x29\x2c\xc1\x56\x0a\xe3\x96\xc2\x84\x53\x71\x80\x78\xd7\x00\x68\x97\xa3\x1a\x9e\x74\xf6\x97\x31\x85\x52\x6e\x95\x32\xb3\x94\xb6\x34\x41\x53\x2c\x21\xb4\x52\x3a\x62\x2b\xd9\xd2\x1c\xb7\x54\xe3\x96\xfe\xd7\x6d\x2c\xdd\xd2\x2d\x1e\xc9\xf7\xa0\xe3\x96\xd6\x73\x2e\xee\xed\x3b\x94\xd3\x5c\x6c\xb1\x85\xa7\x70\x97\xe6\x62\x4f\x32\x7e\x06\xe9\x62\xcc\x03\x3b\x8c\xb4\x72\xcb\x3d\x6e\x50\xd1\xa7\xf4\x08\x25\x54\x77\x75\x84\xe2\x99\x9b\x8e\x1c\x3d\xed\x87\xcc\xf6\x7b\x8b\x25\xf0\xfb\x3a\xc9\xc8\xee\x64\x8a\x76\x07\xc4\x66\x36\x34\x2b\x27\x48\xef\xda\x38\xcb\x11\x77\x3a\xf1\x7e\x87\xc8\xa3\xab\x98\x11\xfc\x9e\x0b\x27\x0b\x9b\xf5\xc4\x9b\xcd\x40\xb8\x67\x73\x1d\x17\xf0\xd3\x02\x57\xc1\xff\xf7\x9c\xc0\x38\x1a\xf0\xf7\x64\x80\x71\xa3\x59\xc8\xcc\x94\xde\x8e\x0b\x38\xf3\x75\x17\xe3\xe8\xc0\x7f\x4e\x0e\x28\xdb\xeb\xc4\x6c\x95\xc5\x64\x9c\xeb\x34\xc1\x7f\x0e\x13\x28\xcb\xb1\x60\x1c\x2a\x30\x44\xaf\x6d\x2f\xee\x76\xa4\xe0\x7e\xa2\x00\x18\x87\xba\xd6\xdb\x71\x82\xdb\x69\x82\xdb\x61\x82\xff\x77\x96\x20\x6e\x50\x93\x54\x2c\x4c\xe0\x91\x71\x7e\xae\x60\x1c\x2b\x88\x9b\x8d\x16\xb1\x37\x4f\xf7\x35\x7c\x5c\x47\x0e\xae\x13\x07\x8a\x8a\x1c\x98\x22\x6c\x07\x0c\x4e\xd9\xe3\x56\x5b\x6a\xac\x09\x44\xc8\x54\xfd\x64\x7f\x62\x6b\x31\xee\x38\xe8\x14\xf7\x69\x65\x3f\x4a\x60\xfd\xe8\x3e\x89\x80\xce\x91\x6a\xc8\x0c\xae\x91\x67\x78\xc8\xd5\x33\x67\x3c\x75\xa7\x7c\x0a\xf3\xa9\x71\xde\x71\x42\x4c\x01\x72\x67\xe7\x3a\x49\xdc\xf7\x00\x93\x43\xc9\x8e\x73\x24\x11\x5a\x46\x58\x1d\x0d\x22\x4a\x70\x22\x65\x74\x4d\x07\xe6\xde\x47\x60\x3e\x82\x8e\xf5\xd2\x78\x84\x16\x90\x09\x28\xa2\x23\xb4\x91\xf9\x07\xae\xc6\x3b\xf8\xf3\x30\x09\xed\xea\xcd\x0f\x68\x98\x23\xba\x7b\x3d\xc6\x77\xc5\x9e\xeb\x07\x47\xd5\x43\x67\x67\x19\xf2\x06\x20\x67\x90\x47\x0b\x46\x98\x6f\x47\xbb\x72\x4d\xf1\xe8\x63\x8e\x16\xbc\x39\x1c\x8d\x65\xa2\x54\x1c\x15\x14\x1f\x01\x33\x86\xf8\x24\xf2\x96\x0e\x78\x66\xa9\x86\xaf\x32\x39\x1a\x7b\x91\xa3\xb1\xe3\x2c\x9c\xb7\x2a\xa1\x7f\x8a\x90\xd7\xe5\x09\x83\xf5\xb9\x3c\xa9\x74\x01\x88\x2b\x6d\xb1\x3c\xa9\xe7\x1a\xe8\x87\x02\x04\x11\x85\xb0\xa2\x32\x03\xbf\x41\x10\x14\x48\xca\x8c\x01\xac\xd8\xca\x45\xf1\xa9\x7e\x89\x33\xa4\xc0\x12\xe7\xdb\x31\x3b\x63\xb9\xa0\x69\x8c\xbf\x1b\x79\xf1\x36\x02\x83\xb5\x10\xe3\xec\xdf\xd3\x21\x7f\xb7\x63\xb1\x84\x5b\x18\xf0\x26\x03\x5e\xec\xe9\xdc\x18\x19\x9d\xb3\x5f\x48\x1a\xd3\x13\x2f\x95\x0b\x3a\xd1\x13\xb8\xff\x93\x92\x64\x62\x48\x49\xb6\xdd\xa5\x08\x35\xa5\xe8\x30\x87\x69\x6c\xc1\x68\x5b\xb6\x70\xac\x45\x66\x4b\xa5\x73\xa8\x21\x17\xe7\xbf\xc6\x7d\xf4\x0d\x65\x63\x42\x37\x34\x63\x25\x16\xa4\x76\xec\xa7\x01\x6b\xce\x58\x07\x28\xec\x27\xcb\x9e\xfc\xa5\x38\x32\xda\x91\x59\x0e\xec\x49\xac\x79\x94\x9d\xab\x93\xb1\x08\x8c\x7b\x82\xc5\x45\x6f\x45\x97\x25\xea\x6d\x11\x8b\x2a\xea\x7b\x11\xb6\xe5\x22\x7b\x8d\xf4\xed\x43\x2d\x27\x94\xc6\x0a\x22\x77\x60\x9f\x13\x71\x3b\xe2\x4d\x38\x71\x0e\x3e\xfc\xaf\x53\x3e\x2a\xb6\x74\x02\xca\x03\x09\xd0\x88\x6e\xb5\xa6\x7d\x1f\x6b\xac\x7e\x1e\x13\x88\x4d\xac\x8e\x83\x98\x84\x28\x8c\x7a\xc4\x02\x35\x1c\x03\xa2\xb6\x03\xef\x68\x51\xb5\x26\x54\xd9\x6a\x23\x76\x35\x65\xcf\x2b\xd7\xc6\x5a\xc0\x59\x54\x50\x26\x9c\x88\xbf\x25\xfb\x2d\xb9\x4d\x2c\x12\x30\x7a\xa2\x1e\x81\xed\xec\x52\x14\x4f\xb1\x98\x62\x0f\xe3\x39\xd2\x5e\xbf\x1b\xcf\x70\xdc\x42\x2a\xe5\x4e\x58\x98\x00\xd4\xa0\x61\xfe\xd7\x3d\xe2\xd9\x62\x62\x7b\x01\x6f\x30\xee\x46\x05\xc4\x2b\x68\xe5\xae\x09\xa6\xdb\x70\xb8\x32\x6e\x38\x95\x0b\xf2\x68\x81\x63\x56\x2a\x65\xf0\x0a\x10\x6a\xdf\x78\x2c\xca\xe0\x79\xf9\x79\x13\xa5\x06\xeb\xee\x76\x19\x11\xdd\x4f\x77\x71\xac\x57\xd0\xc7\x2a\x65\x04\x70\xac\x27\xb6\xdf\x9d\x19\xe9\x1d\xf5\x9e\x0f\x6c\x99\x76\x0b\x63\xad\x5d\x61\x90\x98\xe2\x8c\x0e\xf6\xfa\xf9\x8a\xe7\x10\xbd\xc8\x48\x19\x4e\x5a\x09\x53\xd8\x07\x77\x8e\x38\xf8\x7c\x10\x38\xe6\x2b\x91\x0d\x27\x98\x2e\xd6\x24\x62\xe0\xc2\xfe\x9d\x58\x0e\xc7\x2a\xab\x5d\x91\x21\x37\x62\x39\x04\x39\xcc\xa7\xb8\x15\x06\xc2\x21\x07\x7b\x34\xb1\xe7\xb0\x5b\x0f\xf3\x83\x89\x3a\x76\xec\xe2\x2f\x47\x33\x76\xf3\xc6\xa0\x46\x89\xb2\xfb\xdd\x36\xda\xf9\xa4\x61\x71\xac\x71\xf0\x1c\x06\x7f\x83\x99\x71\x72\xa7\x2a\xf4\xa3\x01\xfe\x86\x57\xee\x57\x48\x8b\x59\x9a\x94\xf6\x7b\x8d\x97\x0a\xaf\x8f\xae\xa1\x93\x58\x9e\x71\xff\x7a\xb8\xb0\x68\xeb\xb9\x49\xbe\xf8\xdf\xf3\xbf\xf1\xdf\xbc\x9d\x02\x9a\xc7\x3e\x0c\x03\xad\xb6\x2d\x6b\xdc\x99\xe3\xf8\xd4\xb8\x16\x1b\xb5\xf6\xd0\xda\xc1\x1e\x8e\xb5\x8d\x7c\x70\x92\xda\x88\xf3\x81\x09\xc0\x6f\x38\x64\x76\x7a\x02\xd8\xa0\xfe\x3b\xc6\x74\x43\x16\x3d\x3b\x22\x68\x08\xdd\xd2\xef\x7d\x9c\xff\x65\xe4\xe5\x19\xca\x33\x71\x1e\xf5\xcb\x91\xff\x97\xfd\xe3\xaf\xd4\x11\x4d\xe8\x7c\x05\x05\x7b\x66\x9a\x25\x56\x29\x53\xda\x91\x7b\xe7\x1c\xce\xc7\xfa\x7a\xac\xcb\x63\x5d\xda\x63\x5d\xe7\xc7\x9a\x02\x0e\xe3\xa5\x67\x98\xd6\xa4\xf4\xba\x3c\x68\x0c\x7b\x57\xc3\xda\xbd\xa6\x67\xaa\x13\x3e\x9a\xa6\x7e\x28\x79\xc3\x88\x27\x08\x1a\x4e\x9a\xde\x3c\x45\x90\x70\x69\x58\x49\x5e\x50\x42\x40\xe2\xd4\xac\x66\xaa\x25\x23\x62\xef\x94\x66\xea\x63\x5f\x71\x9f\xaf\x9b\x9a\x1f\xe5\xac\x61\x28\xf2\xae\x0c\xb8\x81\x6a\x04\xb9\x5b\x93\xe6\x72\x4d\x72\x95\x21\x88\x39\x6c\x48\x51\x2c\x61\xd2\x56\x9f\xf6\x5f\x72\x90\x2b\x0c\x30\x62\x8e\xdb\xc0\x27\x90\x9f\xbd\x55\x38\xc7\x30\x99\x7f\x02\xc5\xe6\x40\xd0\x7f\x8a\x9e\xe7\xe2\xcc\x1b\x72\x63\x3c\xfc\x63\x63\x7e\xb2\xc9\x38\xda\x42\xfb\xc3\x8c\xcf\x6c\x15\x2b\x5d\x8f\xf7\x39\x36\xdb\x4d\xf6\x37\x91\x45\xf0\x58\x71\x8f\x21\xc5\xd2\x0b\x1c\xd9\xc9\xe2\xb4\xac\x5c\x16\x55\x40\xd5\x01\x80\x72\x92\x62\x01\xd6\x00\xb3\x66\x59\x27\x9e\xe7\x4d\xcb\x4a\x3d\x51\x8a\x5e\xdc\x03\x4e\xcb\x7a\x3f\xde\xa2\x2c\x16\x93\xd2\xb2\xfe\xb3\x4b\x0a\x69\x59\xb9\xbb\xa0\x20\xbd\xa2\x01\x2c\x90\x02\xed\xb4\x1a\x3e\x14\x09\x74\xcd\x5a\x01\x8a\x8e\x30\xfd\x4b\xfb\x5b\xdd\xd0\xdf\x7c\x53\x7b\x41\x0e\xb5\x25\x5b\xa5\x40\x22\x73\xb6\x93\x5c\x54\x2b\xa0\xe4\x85\x45\x38\xa8\x16\xb0\x2f\x39\x57\x4e\x39\x73\xef\x04\xa0\x11\xe0\xa4\x0c\xe9\xc1\xef\xf1\x2d\x1a\x0d\x96\xcc\xd3\xe6\xed\x06\xff\x33\x4e\xca\x00\xf1\x28\x57\xda\xe7\x05\x15\x76\x9f\x13\xcc\xff\x75\xbe\x92\xa9\x98\x6f\xd7\x2b\xaa\x96\x1f\x98\x73\x41\x3d\xe7\x9a\x50\x7e\xbb\xb9\x6d\xb1\x58\x2e\x6a\x84\x0e\x0a\x4e\xe9\x58\xfb\xb2\xc4\xa2\xf1\x38\x8e\x90\xe3\xd4\xb8\xe8\xa1\x1c\x2b\xf9\x71\x44\x3c\x8e\xb8\x01\xfb\xa5\xa6\x81\x51\x93\x8e\x23\x45\x12\x64\xdc\x71\x08\xcd\x89\xaa\xc5\x88\x4b\x30\x34\x73\x9d\x4c\x21\xf5\x69\x00\x8e\x6a\x49\x7c\x12\xf9\xeb\x46\x83\x19\xf6\x98\xb2\x03\x4a\xc3\xdb\x88\xca\x90\x70\x81\x3b\x95\xb0\x04\x15\x2a\x53\xb1\x95\xfb\xc4\x0c\x2d\xb5\x37\xdb\x68\x02\x66\x2d\x2d\x1d\x62\x20\x69\x44\x6d\xa9\x47\xd8\xd3\x8c\xba\x04\x08\x77\xf5\xa0\x76\xa0\x35\xc1\x03\x1e\xbe\x49\x76\x92\x3c\x55\xe8\xaf\xc6\x5e\x97\x61\x22\xde\x1f\x07\xb2\xd5\x91\x54\xc7\xd2\x88\xc2\xeb\x55\x2c\xb0\x38\x33\x6c\xc0\xba\xa5\xea\xcb\xf2\x86\x38\x85\x19\x8c\x7d\x38\xb2\xb1\xba\xe4\x0c\x74\x0e\x3f\x6e\xaf\x47\x81\xb7\x68\xe1\x0a\xdb\x9f\xaf\xdd\xc2\xdc\xe1\x19\xa9\x3b\x9f\x43\xdd\x64\x78\x0b\xed\x74\x86\xc6\x4c\xc1\x58\xcb\x38\xc3\xed\xc2\xed\x74\xfc\x37\x41\x17\xcf\xe9\xcb\xdd\xce\x3f\x31\xda\x54\x02\xc6\xa2\x0f\x38\xd6\x2c\x22\xba\x28\xc9\xf6\x82\x1c\x23\x32\xb6\x1e\x92\x9a\x6b\xaf\x58\xed\xd0\x7e\xfa\x89\x30\x08\xeb\x63\xcd\x8f\x75\x7b\xac\x12\xa6\xf6\xd5\x50\x24\x14\x18\x33\xcd\x68\x1c\x4a\x5f\x42\x79\x15\x6c\x03\x49\x28\xb6\x14\x2e\x63\xc6\x2a\xa1\xd8\x3b\x01\xab\x04\xf7\xec\x17\x06\x7c\x79\xea\xff\x93\xf0\x99\xa9\xae\x69\x35\x45\xcb\xab\xf6\xae\xa6\xe4\x56\x29\xb9\x73\x85\xd2\x4e\x40\xe4\xab\x3c\x4d\xfb\xf2\x2a\x4f\x9e\x13\x95\x69\x5d\xbb\x8a\x82\xe8\xa1\xec\x10\x8b\xe0\x42\x2c\xc8\x09\x02\xf5\x23\xab\x0a\x25\x32\xe3\xfc\xad\x60\xaf\x4d\xcd\xc3\x21\x3a\x50\x99\x7d\x2f\x45\x66\x5f\xca\x93\xd9\x77\x43\x04\xff\xd0\xba\xb3\x4a\x84\x26\xe5\x55\xe0\x24\x56\x74\x6f\xa2\x99\xb4\xc0\xa3\x85\x27\x82\x64\x99\x56\x61\xa4\xec\xaa\x8b\x2c\x70\x04\x6d\x29\xa0\x0d\x84\x9f\x5f\x17\x5d\x64\xd9\xa0\x9c\x41\x81\xa0\x83\x96\x05\x27\x4a\x64\xa9\x3c\x19\x22\xcb\x27\xd0\x43\x9e\xae\x11\x1e\x2d\x16\xdb\xff\x52\x8a\xf1\x41\xde\xef\xae\xa6\xf6\x70\x92\x67\x8c\x6d\x92\xed\x70\x27\x5f\x0d\x26\x61\x5d\x94\x6c\xc7\x44\xc4\xc6\x09\xc9\x3c\xab\xac\xf4\xc7\x1c\x77\x38\x4c\x90\xa2\xc4\xc7\x09\x5b\x40\x16\xae\xad\x48\x66\x77\x2c\xd8\x0e\x51\xf3\xf3\x67\x73\x1e\x36\x37\xc8\x13\x96\x92\x73\xaf\x13\x05\x29\x4b\x76\xce\xa7\x95\x6e\x86\xef\xb8\x24\xaa\x2d\x37\xee\xdf\x73\xc3\x37\x32\x54\x0b\x83\x41\x2f\x22\x79\x14\xe5\x75\x8c\x57\x54\x54\x9e\x8b\xc5\x13\x98\xb6\xd0\x19\xa8\xe0\xbe\x14\x7e\xb1\x74\x74\xcd\xdf\x9c\xa1\xfd\xb1\x62\x4a\x02\x54\xd0\x37\x3a\x4c\xd5\xf0\xe9\x0e\x72\xd8\xdf\xb8\x39\x24\x59\xda\xda\xd9\xad\x28\xc6\xa6\x98\x64\x2b\xbc\x8c\x1c\x3c\xad\xff\x92\x7c\x42\x5d\xfd\x2a\x1a\xf6\x06\x39\x12\x44\x9d\x6e\x4f\x64\x9c\x5d\x54\x40\x07\x21\x5b\x7c\x42\xf4\x96\x2d\x4e\xd0\xa3\x63\x88\x05\x8a\xe7\xe6\x67\x82\xb1\x2f\xa4\x8c\xab\x10\x27\x33\xa0\x1d\xa6\x22\x72\x2f\xec\xaa\xf2\x05\x99\x31\x5b\x44\xc7\xca\x2a\x60\xcc\x69\x30\xe3\x4a\x37\xb0\x2f\x0d\x2b\x1e\x2b\xc0\xce\x6c\x37\x38\x7c\xb5\x37\xfd\x15\x1f\x19\x67\x7a\x46\xc2\x78\x56\x47\xb6\x78\x9d\xb7\x00\xd3\xe8\xc8\xce\xd7\x00\xb1\xe5\x18\xb2\xcf\x6b\x2b\x11\x2b\xc9\x5a\xda\x6c\xd4\x5b\xe4\x21\x19\x03\xe6\xf0\x74\xbf\x53\xe6\x5b\x9c\x80\x09\xa7\x11\x80\x98\xe8\x94\xc9\x0f\xd7\xcc\xb1\xb4\xa7\x99\x14\x3f\xf3\x96\x87\x6c\xf2\x2c\xb8\x48\x23\x1b\x96\x47\x4e\xa2\xdb\x42\x88\xb3\xfc\xe5\x96\xef\xf2\x37\xe3\xe5\x4f\xce\xcb\x2d\xeb\x6d\x15\x44\x36\x5e\xd1\x89\x0e\xb9\x1c\x22\xd7\x53\xfd\x86\xc7\xfa\xb0\xb3\x4c\xbf\xad\x89\x28\x10\x07\x5c\x0f\x21\xb2\x58\xa5\xab\x0c\x1d\x7b\x0c\xd3\xad\x14\xb5\x55\x5e\xc1\xf0\x61\xca\x32\xf0\xf7\xc2\x3d\x0e\xb4\xc5\x3d\x38\x63\x9e\x9c\x1e\xef\x3f\x59\x61\x59\xcd\xa5\x14\x52\x4f\xeb\x7e\x5a\xf8\x47\xe8\x95\x5e\x9b\xb0\x25\xae\x39\xd6\x91\xb9\x5b\xcf\x6c\x28\x87\x6a\x68\xac\xac\xc8\xf6\x9f\xb5\x14\xb5\xb0\xf5\x13\x40\x29\x66\xd9\xce\xec\xd1\xb3\x95\x13\xd9\x7c\xdd\x44\xd1\x58\x28\x91\xed\x96\x83\x7f\xf2\xef\x96\x7b\x6d\x8d\x16\x9a\xf5\x1c\xdb\xb5\x6e\x62\x98\x05\xdd\xf7\x89\x17\x84\x90\xd3\x3b\xba\x1b\xdc\xa4\x66\x4a\xf7\x58\x9b\x55\x54\x85\x27\x28\x9e\x76\x52\x40\xf6\xc4\xed\x03\x00\x9e\x65\x55\x38\xe1\x6c\x0d\x50\xa1\x7a\x2b\x30\x73\xfc\x10\x8c\x7e\x7e\x8f\x27\xaf\xd3\x39\x72\xa7\xb5\xdb\x70\x6d\x38\x5b\x20\x1e\xba\xb6\x1a\x9c\xb7\x50\xf3\xba\x9e\x0e\x0e\xdd\x97\x02\x2e\xdf\x2b\xa4\x57\xb8\xd0\x00\xf2\xe7\x0b\xde\x69\x10\x41\xec\x21\x08\xc8\x98\x93\x89\xe0\x02\x81\x08\x4e\xe6\x28\x81\x97\xa0\xcc\x79\x97\x0e\x64\x16\x01\xf9\xd8\xe1\x3e\x11\x64\x91\xbc\x60\xf0\x00\x9b\xe0\x79\x84\x75\xa8\x74\x57\x74\x14\x4c\x56\x70\x8f\x4a\xe4\x1d\x10\x8b\xf7\x15\x01\x0a\x2a\x62\x67\x68\x45\xde\xf5\x93\xec\x6a\x8c\xc8\x1b\xa3\xad\xbc\x79\x38\x4c\xe4\x0d\xb7\x39\x51\xd0\x20\xb0\x78\xa2\x56\x41\xd6\x11\x96\x88\x60\x49\x46\xe4\xb0\x04\x1c\x90\x61\xc4\xa6\x10\x22\xc7\xc7\x72\xa3\xc6\x45\x27\xb6\x22\x88\x26\xbb\x43\x69\x71\x87\x8e\x5d\x40\xb8\x87\xc8\x88\x00\x50\xe9\x8e\xeb\x2c\xb6\x1c\xf7\xc1\x84\xa1\x1f\x26\xa9\xd8\x85\x1a\x19\x97\x68\x6c\xb2\x28\x36\xa3\x12\x6a\xd1\x33\xea\x56\x93\x45\xe3\x68\x42\x5f\xa0\xec\x66\x95\x03\xba\x6f\x57\xd4\x8c\xa2\xa9\x2b\x18\x1a\xcb\x8c\xf5\x73\xa5\xc2\x12\x2c\xd1\x85\xd4\x92\xbe\xa8\x81\xa0\xcd\x96\xa0\x07\x67\x71\x2e\x18\x3a\xcb\xc6\x86\x51\xe0\x7e\x7f\xe2\xa4\xa5\x02\xcc\x97\x15\xe0\xdd\x6f\x42\x16\x68\x19\x37\x3f\x84\x17\x67\xa5\xec\xaf\x98\xc9\xa7\xf1\x4b\x6a\x02\x7a\xcb\xa6\xb2\xf3\xd0\xb3\x02\x0a\x59\x65\xf7\x31\xbf\xec\xbc\x8e\x22\x65\xb7\x92\x07\x80\x23\xc9\x34\x05\x92\xc0\xb5\xe6\x61\x90\xa9\xf7\xbc\x2e\x76\xbc\x48\xca\x10\x64\x0d\x5d\x96\x74\xd7\x22\x2a\x50\x29\xe9\x6a\x3b\xa5\xa4\xf9\x82\x43\x3f\x2e\xb8\x23\xe5\x8b\x63\x79\xa0\xfe\x96\x6a\xea\x15\x80\xe4\x97\x00\xf7\x04\x01\x78\x42\x59\xe1\x4c\xf2\xe2\x89\xc2\x6a\x1c\x05\x65\x45\x39\x5e\xf0\x24\xe0\x5a\x0b\x10\x6b\x97\x22\x4a\x47\xa5\xc6\xcc\x63\xfa\x03\x5a\xca\x6b\xcc\x31\x4e\xf6\x03\xdb\x02\x81\x09\xbd\xca\xb0\x89\x96\x1a\xa1\x76\x68\x20\xf7\xe0\xe0\xbd\x0f\x42\x4b\x52\x09\xf3\x88\x6b\xe5\xfc\xc0\x50\xb9\xa0\xa5\xca\x4b\xb3\x46\x93\xd7\x15\x8d\xd0\x3f\xbe\x65\x04\x46\x46\x14\x01\x47\x24\x47\x65\xe2\x74\x5c\x0a\x0b\x9d\x46\xdc\x29\x5e\x15\x28\x34\xc6\x63\xb5\x37\x86\xf5\x03\xc5\x53\x23\xcf\xd1\x0b\x6e\xcb\x09\x2f\xbc\x80\x68\xb2\xeb\x01\x23\x41\xc4\xaa\xc7\x5d\x33\x08\xd9\x3c\x00\x7b\x1d\xc3\xed\xbc\xf0\x10\x20\xc8\x73\x5a\x47\xcc\x94\x29\x66\x35\xad\x87\xe0\x3e\x02\xe7\x95\xb5\x05\x98\x8c\x58\x8b\xf6\x65\x8b\xf9\x86\x98\x76\x85\x8c\x70\xb3\xc8\x35\x74\xe3\xd5\x1e\x0c\xc7\x6b\xb5\xf6\x51\x1e\xb3\x9b\x6a\x3b\x86\xd2\x9e\x28\x04\x5e\x5c\xb1\x9e\xa6\x4d\xeb\x81\x0e\x90\x80\x76\x88\x4a\x8b\x5c\xce\x53\xf0\xf6\xe1\xae\x45\x4b\x4d\xb3\x9a\xd8\xee\x37\xd6\xc4\xf4\xba\xad\xe2\x03\x6c\xb3\xd3\x94\xd2\x2c\x94\x7a\x60\xb4\x6a\x8c\x78\x7f\x06\x74\x67\x7d\xc6\xf8\xc0\x7a\x0c\xa5\x83\x0f\xef\xc7\xa8\x54\x12\xd4\x1a\x49\xdf\x6d\x96\xd6\xf7\xfa\xee\xe8\xa2\xfa\x71\x40\xc0\x87\x9f\x70\x5d\xf8\x6c\xa4\xa2\xf4\xf0\x58\x75\x6d\x9a\x18\xb0\x80\x4e\x03\x7e\xde\x7a\x30\xe6\x3d\xda\x6f\x36\x64\xcf\x2d\x5e\xcc\xe5\x68\x78\x69\xb7\x0f\x14\x9a\x1e\x7c\xe2\x6c\x21\xe1\x7a\xaf\x02\x6a\xc2\x03\xe4\xcd\x5e\x47\xfe\xc9\x9f\xe9\x69\xaf\x71\x14\x80\xe1\x11\xb8\x79\x88\x27\x1d\x0d\x8d\xae\x56\x39\x8e\x1b\x5d\x1b\x7e\x9a\x1d\xed\x0e\x6c\x4c\x1c\xf8\x0a\xd0\x34\xf0\x03\x9b\xf2\x7c\x62\x13\xa2\x7a\xf5\x39\x48\xaf\x11\x2b\xa2\x0a\x3e\xa1\x6c\x23\x6a\x78\x07\x66\xa0\x31\xb9\x32\xbe\x58\x9e\xd8\xac\xc3\x90\x07\xf9\x29\x71\x72\xc6\x3d\x6c\x82\xcd\x6e\x3c\xe3\xa1\x36\x3f\x48\xfc\x4f\x2c\x76\xfb\x59\x21\x3e\xf9\x89\x85\xa7\x2a\x15\x35\x2e\xbe\xca\x87\x55\xec\x43\xc1\xe7\x43\x43\x3d\xf8\xbc\x60\xc0\x4c\x8d\x52\xf8\x07\x3f\x64\xc3\x18\xdf\x3e\xcd\xbf\xd5\x88\x9f\x1a\x91\x93\xab\x0f\x4a\xae\x45\x0c\x72\xdb\x63\x3d\x1e\x6b\x79\xac\xda\xc1\xeb\x5f\x52\xa7\xed\xb1\xf6\xb0\x75\x28\xaa\x5c\x7b\x38\xc2\xbe\x88\x82\xc2\x1b\x01\x04\x6a\xf3\xd4\x7f\x6c\x04\xf5\xe7\x53\xc8\x99\xe5\xa9\x26\x2e\x81\xf7\x67\x51\xd1\xb7\x4f\xef\xc0\xa1\xc7\x04\x4a\x10\x3b\x2f\x4f\x8c\x22\xeb\xd3\x9b\xc5\x6d\xe0\x06\x11\xdf\xce\x63\xda\x20\xfa\x93\xe2\xb8\x69\x8d\xed\x9a\x39\x43\x8d\x28\x90\x27\xb7\x2f\x71\x80\xb1\xee\x8e\xf5\x67\x23\x9b\x33\x5a\x74\x3d\x55\x4b\xa9\x8a\x68\x3d\x6b\x9c\xb5\xfd\x42\xe5\xa0\xa9\x76\x30\x6c\x10\x9f\x5a\xf7\xd7\xb1\xac\xd2\xc7\x23\xee\x80\x98\x93\x02\xf8\xc1\x1f\x32\xf8\x70\x33\x29\x91\xa0\x19\xb8\x9d\x40\xf9\xc3\x8f\xdf\x4f\x03\xdf\xbb\x8f\x5f\xf7\xf1\x8d\xdb\x25\x8a\x3c\x16\x4f\xcd\xee\x68\x68\x58\xf6\xc5\x08\xd3\x6f\x08\x7e\xcf\x76\x6b\xb9\x6f\xb3\xeb\x5a\x5d\xfb\x16\x4b\x07\x4d\xf3\x4d\xe6\x30\x96\xae\xd3\x9c\x78\xaa\x0c\x90\xf1\x74\x51\x45\x91\xd0\x55\x4e\xd7\xc7\x99\xef\x09\x13\xf2\x0b\x6d\xa1\xbc\x43\xd1\x6d\x4a\xde\x37\x3a\x91\x02\x65\xc0\x84\x96\x21\x72\x53\x97\xd2\x6f\x6f\x01\x2b\xd3\x8b\x91\xbb\x93\x03\x86\xd5\x48\x57\x12\xab\x88\xa1\x77\xfd\xdf\xfb\x1b\xff\xe1\xe8\x21\xc0\x36\x33\xbe\xc8\x01\x4c\xb8\xd4\x34\x4f\x90\xdf\xfb\x8c\x5b\x8b\xa4\x7e\x4b\xa2\x5b\x3e\xee\x8b\x2f\xc9\xf6\x1d\x5f\xbc\x01\xf9\x24\xbd\x5f\xea\xf2\x0b\x5d\x7d\xb7\xfb\x54\x7d\x37\xcd\x08\x06\xd8\xfb\xf5\xe3\xd0\x9e\xa2\x97\x69\xc5\xad\xc8\x5e\xd8\x2e\x8a\xb5\x8b\x32\xc8\x09\x42\x3f\x4b\x06\x57\x12\x77\xc6\x15\xf9\xa8\xd8\x21\xba\xac\x01\x5f\x21\x53\xb9\xd9\xd3\xcb\x78\xdb\x5e\xf1\xd5\x66\xef\x17\x6e\x7a\xe5\x15\x38\x52\x2c\x83\x11\xc2\x07\x20\x26\x01\x10\x9f\xd7\x95\x85\x5f\xdf\x30\xe8\xf0\xed\xf9\x53\x39\xba\xf5\x5a\x11\x21\x3e\xc3\xaa\x4d\x01\x5a\x28\xd4\x85\xc6\x10\x82\x80\x9a\xda\xe3\xf5\xc6\x93\x38\x1f\x0d\xe8\x73\xe6\xc7\x7a\x3e\xd6\x33\x4c\x3c\xe1\x6d\x40\x3b\xd9\x33\x60\xb5\xe2\x0c\x99\x5c\xbe\x9d\xe9\x3b\x4d\x2f\xcc\xe9\xea\x53\x00\xb8\x84\x32\xa0\xc6\x75\x30\x27\xf1\x86\x85\x85\x13\xaa\x54\x90\xb7\x80\x39\x68\xa4\xcf\x90\xf9\x3c\x25\x96\x20\xcf\x67\xd1\x31\x0e\x84\x3d\x80\xc1\x6d\xa0\xe6\xe8\xeb\x3f\xd7\xc7\x7a\xea\x47\x73\xd8\x9b\x20\xda\x73\x68\x2b\xb6\xda\x15\xc1\xc3\x79\x97\x29\x94\x03\x92\xcc\x39\xab\xc4\xa2\xe6\xc4\xdf\x4a\xc0\x63\xa2\x40\x7c\xaf\x99\x78\x5f\xa2\xd9\x6a\xde\x91\xae\x04\x65\x39\xd9\xe7\x3a\xd3\x0d\x57\xfb\x16\x37\x8e\x2f\x78\x67\xea\x63\x1c\x99\x00\x65\xe6\xce\xd4\xff\x07\xa0\x5d\x36\x29\x3a\x47\xc2\x6e\xe8\x8a\xdf\x57\x86\x27\x5f\x31\xcb\x91\x12\x27\xcc\x86\x22\x34\x83\x91\x54\xa8\x15\x90\x07\x36\xb0\x2a\x02\x54\x64\x1b\x5f\x4c\xa1\x3c\x2d\x6a\x76\xa8\xdd\x90\x9f\xf9\x26\x7b\xac\xc1\xe3\x26\xd7\x51\x95\xc1\x49\x5b\x53\xf8\x5e\x76\x78\x77\xcd\x61\x4b\xd5\x23\x8e\x3d\x79\xd6\x6c\xe5\xe6\x58\x7b\x7e\x5d\x2f\x94\xd3\x72\x9c\x3d\x56\x2e\x62\x67\xd4\x56\xb0\xd4\xe2\x25\x29\x3b\x2a\xdb\x99\x6f\x5f\xb2\xbe\x12\x78\xa6\xdd\x74\xff\x18\x37\x46\x20\xe7\xbf\x7f\x79\x5f\xb9\x23\x3b\x26\xb0\x17\x6b\x11\xf1\x46\xe1\x30\x96\x1b\x63\x6e\xb4\x39\x37\xff\x01\xcc\x48\x58\xf6\xfa\x26\xd9\xeb\xd3\x9f\xb0\xae\x80\xf2\x59\x47\x6a\x80\x47\x6c\xf3\x59\xdd\xf3\x5b\xa4\xf3\x79\xb9\xfe\xfe\x71\xfd\x75\xd7\x5b\x58\xee\x71\xd9\xc2\x3e\x5d\x3f\xe1\xf8\x1e\x60\x9c\x56\x1b\xba\xc9\xce\xbd\x06\xc7\xd9\x81\xce\xa2\x78\x50\xc1\xf8\x28\xe5\x8e\x6f\x29\xd9\xae\xcc\xe0\x3b\x2e\x80\x7b\xe8\x96\xe6\x3d\xb5\x5b\x29\x1e\x61\x72\x60\x2d\xf2\x5a\x46\x76\xc6\xbc\x38\x62\x91\xdf\x51\xfd\xbc\x03\x02\xc4\x9a\x37\xa1\x3c\xe3\x05\xad\xe9\x10\x5f\xd5\xcb\x04\x67\xc2\x91\x91\x0a\xbd\x27\x90\x5b\xa3\x3a\xf6\xd8\xb7\xdb\xb1\x65\xd8\xc9\x95\x65\x87\x5d\x36\x23\xfe\x78\xe2\x0f\xfb\xf9\x7f\x3d\xed\x23\xb8\xb2\xa6\xaf\xc5\xc9\x7e\xb6\x35\x11\x87\xb7\x58\x56\x76\xb6\x8a\xde\xc9\x80\x64\x07\x5b\x18\xc8\x5d\xd9\xba\x2f\x30\x44\x13\x47\x23\xaa\xda\x12\x47\x35\x53\x66\x64\x27\x98\xdb\x2f\xc7\x1a\xfe\x70\x77\x87\x76\x07\x03\x07\xc2\xb8\x80\xcc\xb3\x61\x71\x0a\x03\xde\x4e\xd9\x5f\x36\x23\x9b\xc6\x9e\x0b\x19\x1e\xbb\x07\xf6\xeb\x13\x38\x5d\x36\x02\xfd\x3d\xc7\x51\x34\xb2\xef\xd8\xe4\xe2\xf2\x00\x76\x24\x80\xdc\xe1\x6a\xb4\xc8\x8e\xee\xd6\x2e\x7e\x9d\x1c\x20\xe3\xb8\x85\x37\xe0\x49\x3c\x5a\xea\x38\x26\x7b\x2e\x89\x91\x50\xca\xc4\x01\xc1\x15\xde\xc4\x40\xb3\xf0\xb7\x27\x1c\xc1\xf3\xe5\x6a\x1a\xcb\xd5\x34\x96\xab\x0a\x2e\x57\x65\x58\xfe\x56\x86\x65\x14\xe8\xc2\xbc\x1b\x1b\x1e\xa7\x0a\xef\xe7\x7d\x6f\xf0\x62\x1a\x18\xbf\x00\xe0\x90\xb6\x5f\x71\x4b\x45\x6a\xb7\x45\x1e\xcb\x53\x60\x2b\x76\x03\x22\xb7\x9c\x41\x13\xd8\x68\x60\x00\xd8\x76\x5b\x06\x07\x3a\x41\xf9\xb9\x65\xcc\xb6\xcb\x7c\x21\x3a\xb8\x32\x77\xdb\x3d\x73\xb1\x0d\x8a\x81\x5c\xea\xc4\xc2\x92\x3a\x9d\x5e\xa6\xc4\x18\xa0\x0e\xfd\x0f\x53\xc7\x8a\xd3\x79\x84\x58\xdb\x1a\x9d\xc9\xcb\x05\xa9\x21\xe3\x3c\x74\xbc\x67\x1c\x8f\x50\xad\x1e\x22\xa7\x8f\x58\xc2\xb3\x4a\x39\xac\x6d\x2b\x3f\x4d\x9d\xa7\xca\x2e\xce\x4f\xb4\xd0\xc6\x04\x7e\x32\x3a\x1b\x66\x55\x00\x7b\xf7\xa7\xa5\x9f\x9b\xc3\x7e\xc7\x77\xef\x3a\x7b\x75\xc5\xb3\xbd\x2e\x6e\x5c\x3a\xec\x8c\x1d\xd9\x12\xf7\x90\x4d\x2e\xb8\x2c\x58\x92\xca\xdf\x7e\xba\xe7\x88\xb3\xcd\x13\x7c\xe5\x90\x32\xd0\x56\x14\x6e\xf1\xce\x6f\x48\x8b\x23\xdc\xdc\x4a\xbf\x02\x21\xd7\x8c\xdb\xc7\x76\xb5\xb1\xe3\x28\xb2\xf1\x3c\xaa\x07\x86\x57\x48\x00\xbf\x62\x17\xd7\x94\x7b\x06\x5c\x84\x70\x4f\xc8\x8e\xb9\x0d\xad\x9a\xc7\xee\x89\x6b\x5e\x86\xe2\x40\xd7\xd7\x92\x71\x57\x08\x58\xe7\xf0\x27\x05\x1b\x8b\xc4\x14\xf2\x74\x65\x93\x72\xe9\x8a\xc8\x14\x8e\xfd\xc2\xed\x4f\xd2\xa6\xd0\xd6\x50\x46\xd9\x40\x22\xba\x79\xa4\xec\x10\xd6\xdc\x62\xdc\x4a\xa4\x8d\x64\xe8\xd4\x91\x7c\xff\x6e\x58\xde\xad\x06\x4e\x3f\xe9\x5a\xce\x84\x4d\x0e\xb5\xfa\xfb\x94\x66\x93\x36\x74\x9f\x8a\x25\x2c\x7d\x3c\x19\x60\x56\x7f\xae\x8f\x99\x95\x76\xfc\x38\xdb\xe6\xbc\x94\x6d\x14\xaa\xf3\x37\x2f\xea\x94\xe2\xde\xd2\x9f\x42\x51\xeb\x58\x7e\x6c\x9f\xf8\xaf\xcd\x4f\xfc\xeb\xae\xa5\xd6\x35\x02\xb7\xda\x3a\x49\x29\x71\xba\xc7\x0a\xfc\xed\xbb\x62\x9a\xa6\x8c\xc1\xa1\xfe\x0b\xdf\x7e\x3a\xff\xd4\xe8\xe9\x0c\xb7\x46\x34\x9d\x6d\xbd\xe5\xf7\xd9\xae\x9f\xe6\x30\xb5\x73\xe4\xf5\x1c\x6f\x53\x7d\x5a\xe4\x34\x8d\x7e\x80\xdc\xbd\x1f\x98\x63\xbe\x31\x09\xb5\x65\x9c\xcd\xa2\xdd\x54\xe4\xca\x1d\xed\x03\x91\x89\xee\x7f\xfa\x49\xf5\xe2\xf4\xeb\x55\xfe\x54\xd6\xb9\x8f\xd8\xc5\x1c\x97\x30\x4a\xcc\x38\x73\xe6\xfa\x96\x89\xc7\x17\xdb\x9f\x8a\x13\x37\xf9\x5b\x2c\xb4\x18\x85\x1c\xf7\x59\xfe\xe4\x78\xc4\xdd\xf2\x14\x06\x7f\xa4\x3d\x1e\xab\x4e\xee\xaf\x30\xcc\xce\xfd\x28\xb1\xad\x97\x07\x7f\xba\xa0\x3f\x3d\x90\x3a\xfb\x93\x55\xf1\x37\xe4\x7b\x1f\x14\x7f\xa7\xdb\x7d\x9f\x9b\x4d\xbe\xa7\x40\xad\x22\xe7\xc3\xc6\xeb\xfc\xfe\x4f\x22\x7f\xb1\x2f\xe1\xde\x42\xbf\xe3\xfc\xb7\x1a\xbf\xe2\x8c\x5e\xd0\x6b\xff\x2b\xc7\xdf\x74\x0f\x99\x16\xf7\x80\x61\x33\xfc\xc4\xee\x18\x50\xff\x3f\xb6\xae\x34\xc9\x79\x96\xd7\xfe\xcf\x2e\x89\x4d\x1c\xda\x18\xf9\x65\x48\xda\xbd\xfa\x5b\x3a\x92\x00\x3f\xdf\xad\x4a\xd0\x11\xf3\x8c\xc0\x0c\x69\xaa\xcf\x9b\x8b\x3c\x02\x38\xe3\x0e\xf5\xae\xef\x76\x30\xa6\xde\xb3\x62\xf3\xad\xdc\xb3\x6e\x8b\xf4\x1c\x35\x61\x8b\xd7\x32\xf5\xf4\xcc\xde\xb9\x50\x46\xa8\x90\x17\x19\xfc\xf3\x92\x2d\x34\xe5\x34\x9e\x5a\x1d\x1b\xb3\x85\xbb\xed\xde\x85\xd6\x75\x72\x05\x29\x9a\x8c\xb0\x34\x4d\x76\x38\x8e\x36\x46\x0b\xe1\xe6\x9a\x17\xd2\xe6\xd3\x18\xfc\x42\x2a\x2d\x4e\xf5\x2c\x24\x7c\x5e\x59\xc6\xa5\xed\x43\x37\x6c\xa3\x97\x0a\x39\xff\x53\x25\xf6\x79\x30\xdc\xff\xe9\xaf\x77\x9f\xdd\xd4\xd6\x6f\xc3\x12\x17\xcc\x14\xc1\xe8\xb9\x6b\xdf\x2e\xe3\xda\x42\xb7\x7e\x22\x86\x73\x84\xc3\x72\xcb\xdc\xfd\x2a\x3f\x62\x1e\x5b\xa9\xf7\xd1\x0b\x17\xe6\x6a\xed\x3a\xfc\x7a\xeb\x64\x0e\xbf\x39\x15\xe6\xc1\xdd\x13\xc1\xbc\xec\x28\xed\x91\x31\x19\x52\xa0\x9c\x3b\x1e\x4c\x70\x33\xa7\x51\x3c\xb8\x1f\x9a\x02\x09\x2c\x73\xc4\x7b\x14\xa7\xdc\x39\x78\xca\x3e\xf5\xc3\xdc\x4f\x8c\xf4\x1e\x57\xf9\xa7\x1a\x25\x57\xa7\x6e\x27\xb9\xf1\x02\x87\x68\x50\x3e\xa6\xfc\x12\x76\x32\x6e\x95\xbb\x73\xcb\x0f\x7a\xd6\xdc\xee\x6d\xb8\x1b\x59\x52\x47\x32\x29\xd7\xb7\x1e\xc4\x02\x5b\x7a\x34\xa8\x54\xaf\x3b\x86\x94\x1d\x59\x48\x1f\xd7\xc7\x69\xfa\x1d\x51\xb7\x09\x07\xe0\x35\xad\x29\x9c\x3e\x8f\x43\xe5\x13\xd7\xcb\x89\xf9\xfa\xbe\x32\xd9\x0a\x97\xe8\xd1\xef\x35\xb8\x9a\xc3\x34\x18\xa0\xe3\x99\x7a\x8b\x13\xa7\xda\x5c\xec\x91\xc4\xd6\x6c\x67\x58\x27\x77\x3d\xaa\x67\x18\xe5\x75\x86\xed\x1f\x09\xee\x0c\x55\x1f\x1e\xb2\xd0\x74\x36\x2b\x70\xb8\x64\x51\x49\x73\xe8\x4c\xde\x74\x13\x75\x48\xd5\x95\x32\x05\xcb\xb3\xd2\xdf\xce\xe9\x67\x5d\xe0\x2b\x0f\x83\xec\x0b\xa5\x31\x5a\xe5\xb0\x86\x7f\x2b\x5c\xc6\x23\x0d\x3d\x82\x58\x92\x98\x07\xf5\xe2\xa2\x3d\x1b\x28\xfc\x92\xdb\x69\x4f\x1c\x89\x8e\x5f\xb2\x9f\x2c\x70\x3f\x3f\xf7\x0e\xd0\x18\x67\x90\x27\xad\xb9\x72\x99\xd6\xbf\xce\xfe\xfe\x71\x36\x47\x56\xf9\xbb\x27\xed\x96\xbc\x42\x47\x97\x24\xf5\xcd\x97\x5b\xb3\x2f\x72\x33\xa0\x40\xbf\xe0\xbd\xde\x5b\xb4\x6c\x2e\xcf\x58\x0f\x3d\x01\xb7\x67\x8d\xbe\xc7\xb5\x6d\x9b\x2f\xf5\x9e\x6c\xd3\x9b\x07\xac\xd2\xca\xe2\xcf\xbb\xc5\xea\x97\x77\xba\xb7\x64\xd9\x80\x21\x28\x15\x3f\x1b\x24\x9c\xeb\x1f\x58\x96\xb3\x3a\xab\x0b\x3a\xc6\x5b\x32\x65\xfb\x98\x33\x46\xf6\x92\xfb\x49\xe7\x9a\xf1\xad\xf9\x54\x5a\x6c\xfa\x0b\x2e\xcd\x1c\x26\xcd\x82\x5b\x7e\xba\x31\x98\x7c\x5c\x59\xec\x51\x6d\xd1\xc0\x84\x6a\xe2\x6a\xdf\x34\x02\x8d\xb0\x85\xe8\xd2\xd4\xdb\x7d\x42\x59\x66\x17\xb7\x0d\x05\xa6\x73\x84\x21\x61\x4e\x43\xf5\x5b\x54\xc9\x8a\xf7\xd4\x7f\xbc\xe7\x15\x49\x70\xc3\xc7\x37\x9d\xb4\xea\xdc\x34\xd1\xb8\xbd\x84\xb9\x49\x56\x48\x7d\xca\x7f\x4e\x93\xe7\xb3\x4f\x9e\x4f\x5d\x64\x3a\x13\x9d\xce\xaf\x12\xa1\x1e\x4b\x7b\x61\x48\x21\x65\x97\xb6\x1e\xa6\xbc\x31\x04\x38\x16\x66\x98\x09\x65\x1a\x6f\x85\xb7\x58\x83\x93\x81\x28\xf5\x6e\x0d\xa8\x1a\xfa\xfb\xc7\xf1\xdf\xcd\xf1\x5f\x77\x2c\x87\xfe\xaf\x93\xa0\x4c\xb3\x6b\xe2\xa9\xb1\x26\x80\x78\x6a\x2c\x89\x22\x17\x9f\xed\x18\xf5\x88\xfe\x9d\xc2\x92\x8b\x34\x99\x4e\x73\x4d\xe2\x89\xa5\x2d\x29\x32\x67\xbe\xeb\x51\x11\x16\x71\xa6\x09\x22\x2d\x72\x3d\x26\x23\x9e\x43\x79\x81\xf8\x64\xac\x40\x33\x91\x6e\xf3\x41\xfa\x67\x3a\xa8\xab\xe9\xd5\xdc\xeb\x9c\x6f\xb2\x4e\x69\xb2\x2b\xcc\x72\xe3\x2c\xa2\xca\xf7\x50\x33\x75\x4f\xc8\xfa\x7b\xb9\x30\xec\xa1\x02\x5b\xea\xba\x26\xbc\xe1\x36\x1b\x8d\xcb\xb5\xd8\x74\x79\x96\x79\x68\xd5\xca\x02\xe0\x3a\x32\x53\xac\xde\x8b\xf6\x3f\xf3\x06\x9a\x85\x60\xda\x5c\xa9\x3d\xb2\x53\x65\xa6\xcd\x77\x4d\x5b\xc4\xa1\x59\xcc\x65\xa6\x56\xb3\x3c\x4b\xbc\x34\x0b\xbc\xb4\x25\xd7\x67\x1c\xb4\x51\x72\x6b\x67\x2e\x19\xfb\x69\x92\x72\x69\x16\x72\x69\xfa\xce\xa1\xa6\xd7\x29\xe7\x70\xd4\x0b\x6e\xe4\x3d\xa4\x49\xd8\xc4\x22\xff\x8c\x2d\x05\x31\x1c\xc9\x92\x7e\x38\xab\xae\x43\xb6\xa2\x59\x94\xa2\xe3\x22\xdd\x46\x71\x9d\x94\xe4\xe0\x34\xd0\x10\xa7\xb0\x58\x6e\x65\x95\x48\x35\x79\x86\xc8\xed\x57\xa3\x79\xbe\x5d\xbe\xd2\xd6\x17\x0f\xef\x3a\xd7\xa4\xf3\xab\x98\x46\x41\x30\xd3\xbd\xed\x39\x21\x02\x87\xab\x7e\xe2\x42\xe7\xae\xad\xa3\x62\x97\x81\xf4\xac\x1b\xd0\x8a\xef\x0c\x23\xb4\xbb\x60\x42\x43\x18\xa1\x21\x8b\x90\x89\x22\xd4\x25\x91\xa9\x8b\xa4\xbb\x4c\x42\x67\x76\xbf\x1d\x0e\xe9\x84\x99\xea\xa7\x72\x52\xbe\x97\xfe\x59\x7c\x74\x67\xef\xba\xe9\x2c\xd7\xf2\x1e\xa6\xf5\xea\x03\x3e\x9d\x97\x96\x69\x5e\xde\x5e\x5b\x43\x99\xaa\x43\x71\x79\x51\x34\xcb\x24\xf4\x3f\xa2\x44\x97\x4f\xa9\x9c\xd9\x49\x62\xed\x28\x82\xc0\xb9\x8b\x15\x7e\x76\x8d\xbb\x12\xd5\x03\x39\x8b\xc5\xa8\xaf\xdc\x9f\xf3\xe2\xfc\xd9\xd7\xe6\x4f\x9a\xc6\x64\xc6\xad\xa8\x85\xb7\x12\x17\x6d\x5d\x55\xf6\x81\x77\xec\x97\x0e\x9c\x4e\x3b\x94\xe9\xde\xc9\xfd\x86\xc3\xc8\x8a\x89\xe3\xea\xba\xf6\x14\x66\x97\x08\x08\x03\x67\x99\xe0\x08\xa1\xd8\xf8\x40\x77\xb9\x80\x66\x41\x80\x2a\x36\xeb\xf4\x3e\x58\x4f\xf4\x33\xe2\xbc\x50\xaf\x7f\xb1\xf6\x2b\x63\xe3\x90\xf6\xc9\xea\xc9\x9f\x6f\xdb\xd1\xa1\xe6\x58\x09\xd3\x3a\x4c\x19\x1f\x05\xce\xd2\xd7\xf0\x05\x9a\x00\x5c\xfa\x82\xbe\x7c\xca\x28\xc8\x9e\x52\xe8\x64\xc2\x7d\xbd\xb5\x13\x30\x12\x37\x6c\xf7\x71\x06\x96\x0e\xcc\x8c\x16\x57\x5d\xf4\x67\x31\x77\x36\xa1\x29\x72\x97\x81\xfa\x97\xc3\x62\xa7\x32\x2e\xce\x5e\x93\x13\xf0\x25\x39\x3c\x82\x7b\x04\x77\x3c\xa1\xb4\xf2\x08\x2e\xd3\xc7\x6a\x55\x70\x35\xdb\xd9\xc8\x1b\x93\x2f\x61\x37\xaf\xd9\x1d\x9e\x8f\xf0\xf4\xbf\x8f\xf0\x0c\x2b\x2b\xe5\x11\x96\x47\x58\x3c\xff\x9f\x3e\x6f\xa0\x31\xa4\x1d\x80\x5c\x35\x1a\x92\x98\xd1\x2f\x88\xee\xef\x0b\x8b\x5f\xdc\xc9\xe4\xe5\x62\x64\x2a\xfb\x02\xc3\x82\x2d\x71\x5c\x8e\x61\x79\x27\xdf\x0e\x02\x87\x53\xe9\x4c\xad\x2c\x80\x21\xfa\xe0\xb6\x32\x56\xeb\x5b\x54\x77\x1c\x14\x05\x5e\xfd\xab\xed\xcc\x5e\xc6\x75\x5b\x51\xbd\x07\x16\xd9\x6a\x70\xdd\xba\x9d\x96\x9d\xd8\xc9\xac\xbe\x43\x0e\x9c\xc1\xa2\x91\x53\xe8\x18\xaf\xb1\x4d\x78\xd8\x2a\xb0\x14\x96\xc8\xc1\xcb\xb6\x10\xa6\x9c\x65\x92\x4d\x48\xbe\xd5\x79\x46\xb4\x60\xbb\x45\x87\x55\x20\x0e\xbc\x1b\x52\x9b\x52\x11\x06\x54\x0f\x47\x26\x50\xd2\xab\x18\x0d\x66\xd3\xb5\x3c\xa0\x9e\xc9\x94\x74\x80\x11\x28\xbd\x56\x58\xa8\xd8\x6d\x12\x01\x62\xb3\xaf\x79\x68\x54\x2f\x49\xad\xac\xae\x8f\xb0\x2e\xcd\x3f\xc2\xba\xbe\xc3\x83\x67\xda\x61\xf5\x0e\x4a\x14\xd5\xfa\x3e\x65\x38\x5e\x82\x0e\x03\x55\x01\xe7\x05\xc0\xdf\xec\xe2\xcf\x5c\x48\x3e\xae\xde\xe9\xf5\xec\x0c\xbb\xbd\xda\xe0\xdd\xf1\x72\x0b\xf7\x5b\x61\xe5\x39\xc1\x32\x1c\xa5\x1a\x5e\xa1\x2f\x34\x9a\xc6\xd2\x3d\x00\xeb\xcd\xa1\xc4\x44\x3e\xf7\x29\xe0\x3c\x37\x24\xa6\x96\x9d\xab\x6e\x2d\x60\xc0\xa2\x80\x78\xc8\x81\x04\x95\x40\x19\x2d\xd9\x95\x4b\x90\x90\xbe\x59\x82\x99\x2d\x52\xe1\x31\x0b\x58\x03\x0b\x14\xfd\x22\x8e\x0f\x51\xdd\x9c\x24\xe5\x25\xae\x61\x7c\x2b\x64\x46\x84\x61\x20\x7c\x14\x07\x92\x1a\xb6\xe2\xea\xa2\xab\xbe\x8f\x70\x67\xc5\x7e\xb9\x92\xc5\xb4\xe7\x55\x44\xbe\x44\x5c\xfb\x1b\x56\xa4\x04\x20\x42\x91\xaa\x06\x90\xb5\x78\x05\xff\x0d\x6c\xb3\x68\x65\x2f\x80\x51\x31\x28\x76\x87\x12\x29\xd2\x5a\x41\x53\x5d\xa0\xd8\x7d\x44\x59\x93\x1c\x35\x03\x18\xfe\x5f\xdc\xef\xb0\x0a\x0f\xfc\x23\xbc\x5e\x8f\xb0\x45\xa2\x47\xd8\x12\xff\xc7\x6a\x23\x18\xf6\x91\x69\x98\x35\x11\xe0\x86\x2d\x0d\x00\x34\x0c\xa9\x57\xa1\x2d\xe1\xf8\x5d\x0f\x5a\x78\xb1\x94\x31\xf2\x0a\x4a\xdc\x9d\x0a\xaa\xdd\x66\x46\xb8\xcd\x25\x27\x84\xdb\x11\x9e\x46\x5f\x39\xc4\xf7\xf9\x08\x6f\xd4\xbd\x9f\x50\xdf\x6e\x7d\x84\x9f\xc3\x3d\xc2\xce\x7d\xe8\xee\xf9\x8f\xa7\xd7\xc3\xce\x96\xe3\x23\x44\x0f\xb1\x2c\x44\x4f\x0b\xf7\x7a\x8a\xe5\xd2\xb6\x10\x59\x2a\x67\x15\xba\xbf\x8f\x10\x03\x2d\xdc\xd6\x23\xec\x05\x98\xee\x8f\x10\xe5\xe6\x0e\xa6\x92\x03\x31\xae\xa1\xb0\xc0\x23\xdb\xec\x42\x8c\x7e\x9b\xda\xb3\xb2\x9c\x2f\x0a\xff\x26\x93\x9e\xa1\xc2\x58\xae\x81\xab\xe1\x70\x0b\x8c\x64\x63\x64\x88\x31\x3c\xbd\xbe\x04\x3c\x18\x71\x2d\x8c\xb9\xe6\x0a\xdf\xf1\x31\x15\xa6\xb1\x23\xa0\x90\x24\x69\xb8\x82\x57\xc3\x03\xac\xdd\x0a\xb6\x98\xe6\x91\x3e\x2c\x73\x7a\x20\xd5\xa1\xa5\x59\x9a\x68\xe3\xc1\x31\x4e\x4b\xc5\x9d\x31\xdb\x35\x7b\x27\x5b\xf9\x42\x8c\x3c\x9b\x9d\xa2\x07\x16\x95\xc1\xf0\xb0\x65\x41\x08\x23\x39\xc2\x58\xf3\x43\x60\xb7\xae\xd2\x4a\x80\x48\x07\xd5\x9c\x17\x3d\xab\x3f\x70\x55\xfc\xe9\x69\x6e\x85\x74\x2b\x27\x18\xb5\x60\x9f\x12\x3b\xa3\x91\xc0\xf9\x7f\xab\xe2\x31\xb6\x4f\x18\xf6\x3e\x92\xbf\x87\xdc\x2e\x13\x22\x0f\xd5\x38\x47\x1c\xe4\x18\xb1\x90\x0b\x34\x24\x3b\xd3\xaf\x9c\xf8\x62\xd8\xa2\x07\x5e\x9d\x22\x21\x87\x0e\xce\x87\xdb\xd2\x28\xdc\xc3\x6d\xc4\x2a\x2c\xe0\xe6\x59\xa6\x4f\x97\x1d\xa2\x70\x60\x9f\x69\x80\xcc\x71\xb8\xec\xd9\xfd\x93\x67\x57\x9c\xfb\x8c\x0e\x04\xc1\x40\x0a\x8b\x9d\xee\x16\x25\xc6\xa6\xed\x97\x10\xbd\x01\x14\xe4\xf1\xe4\x0a\x29\x34\x98\x0b\xdc\x83\xa0\xba\x0c\xcd\x39\xe9\xa3\x41\xe1\x78\x66\xb7\x48\x5e\x3c\x33\xb7\xc1\xe3\x99\xfb\xe8\x73\x3c\x33\x6d\x31\x10\x50\xf3\xdd\x45\xab\x1d\x77\xdd\xb0\xba\x3f\x42\x94\x30\xd6\x1e\x61\xc5\x22\x5d\xc0\x6e\x0a\x56\xa9\x65\x1e\x7f\x8f\x00\xdb\xa3\x7d\xdc\x1a\xc7\x61\xd7\xba\x29\xfa\xcc\xfa\x5c\xf2\xc7\xe1\x96\x16\xd1\x68\x14\x5a\xa3\x39\xb0\x3b\x5c\x0d\xd2\x4d\xb3\x4a\x89\x71\x79\xe4\xa0\x8d\x79\xe2\xea\xcc\xd5\x6b\xe2\xba\x27\xdc\xfa\x66\x46\xad\x79\x57\x5a\x1e\x29\x31\xbe\xa7\xe6\xf0\x6b\xd0\xb8\x32\xaa\x37\x7d\x8b\x95\xe2\xaa\x78\xb9\xb9\xb7\x75\x51\xc1\x16\x4c\xfa\x27\xd8\xf4\x6f\xb0\x59\xbe\x64\x01\x4a\x23\x34\x64\x81\xe6\xde\x0c\x0f\xdc\x92\xb5\x8e\xee\xe2\x38\xc2\x86\xad\xab\x8a\xb4\x40\x04\x4b\x21\x84\x64\xfe\x33\xaa\xdd\x5d\x59\xc2\x88\x56\xa8\x61\x9b\x62\x19\x7e\xa5\x0f\x3b\x0e\x0c\x5b\xa5\xfb\x2b\xec\xd1\xa1\x58\x07\xfc\x1b\x96\x56\xed\x2b\x15\x8e\xbc\x14\x76\x58\x2b\xea\x3e\x0e\xcd\x68\xf1\xa6\xdc\x8b\x9f\x72\x2f\x7b\xca\xbd\xe0\x29\x57\x77\x8b\x9b\xf0\x3e\x0f\x66\xb6\xf8\xf7\x8f\xc5\xbf\x6e\xd1\xc7\x28\x69\xfd\x4c\x59\xc0\xcc\x28\x25\xfa\xf8\x9b\x99\x9f\x0d\x5b\x9a\x62\xd1\x92\x45\x41\x3e\x7d\xde\xbe\x7a\x2a\x63\xe6\xe4\x4a\x71\x6a\x65\x9e\x5f\x81\xd7\x0f\xc0\x65\xb0\x2a\xa8\x09\x2b\x4b\x62\xea\x25\x8b\x51\x42\x55\x9e\x34\xc6\xac\x67\xaf\xfb\x8f\x84\xb5\xc5\x5c\xe6\x46\x81\xb4\x6c\x3d\xc4\xd1\xa6\x46\x0f\xa6\xa7\x96\xfb\xc4\xd3\xb1\x4c\x09\x22\x4e\x81\xd0\x83\x9e\x2e\x48\x27\xc6\x40\x7d\x3b\x5d\x74\x42\xfc\xd0\x51\x4b\xf1\x1c\x01\x9d\xae\x77\xe9\x80\x24\x56\x92\x8f\xdd\x59\x36\x9b\xa3\xab\x3d\x5d\xb6\x5e\xf9\x74\xb9\x4e\xda\x55\xc3\xc8\xb5\xf7\x16\xca\x58\x5a\x98\x9b\x82\xcf\xb5\x07\x54\xca\x1c\x2f\xe6\x46\x0e\x38\x08\xb1\xa0\xe1\x66\x29\xdc\x2d\x05\xb2\xf3\xb7\xca\x7f\x6e\xa6\x9f\xee\x70\x8a\x74\xa9\x04\x5a\x83\xb7\x34\x31\x2c\x1d\xd5\xee\xc5\x47\x96\xc3\xc3\x71\x7a\x37\x9e\xb7\x52\x56\x92\xce\xc8\x92\xe4\x97\x65\xb6\xb3\x2c\x96\x69\x02\x55\xb7\xa5\x40\xa5\xdb\x69\x93\x6c\x7a\x9c\x7e\xed\x4e\x56\xf5\x7f\x9d\x32\xc0\xf7\x81\xea\x94\x53\x91\x0c\xd2\x6a\xe9\x10\x28\x36\x13\x4f\x06\x27\x97\xc2\x8f\xcc\x83\x34\xd0\xdd\x01\x5f\x03\xf7\x2c\xd0\x30\xf2\x3c\xfa\x80\xa5\x3c\x90\x8e\xe3\xa7\xcf\xf3\x87\xae\x49\x63\x0a\x56\x74\xa4\x28\x94\xf9\xfc\x6b\xfa\x19\xce\xc3\xd9\x4b\xc9\xe7\x97\x12\xbf\xdc\x03\xb1\x8f\xb9\x9d\x19\xfe\xbd\xa8\x37\xbe\x53\x07\xb8\x7f\xf9\x63\xc2\x75\xe0\xbf\xbb\xbd\xe1\x65\xe8\x6d\xc5\xe7\x5b\xd9\xe5\x50\x6e\x75\x44\xf8\x39\xed\x90\xc4\x0e\xec\x4a\x48\x23\x59\x63\xa8\xc6\xe6\x81\x9b\x17\x87\xbf\xfb\x70\x84\x5b\x8b\xf0\x59\xf5\x8b\x6c\xef\x9a\xe2\x5c\x6c\xc3\xd7\xc4\x75\x47\xe0\xfe\xfe\xb1\xfd\x0f\x67\x25\x5c\xc3\x14\x57\x61\xae\x89\x99\x32\xbb\xb6\xfc\xbc\xc5\x5e\x34\xe6\xf8\x43\x67\x04\xf4\xb9\x65\x60\x0d\x90\x17\x4f\x5f\xa7\x42\xab\xa3\xb2\xd9\xeb\xc9\x8a\x67\x97\x0d\x14\x15\x24\x40\xf1\x62\x4f\xa6\x74\xe6\x59\x48\x5b\xef\x1f\xe5\xe8\x19\x83\xc9\x23\x3b\xcf\x17\x8e\x33\xba\xb9\x31\x83\x1b\x09\x89\x2e\x8d\x1e\x85\x19\xf1\x2a\xba\x36\x97\x4e\x94\x8b\x66\x80\x2c\x58\x41\xc3\x2d\xd8\xd9\x12\x29\xee\x36\x86\x00\x7a\x4e\xf3\x2a\x65\x24\x9c\x29\x89\x91\x74\x70\xc0\x16\xc8\xad\x5b\xa6\x62\x16\x74\x42\x70\x9c\x14\x83\x94\x24\x96\xe0\xcc\x26\x66\xa6\x4b\xe7\x12\xcb\x13\x23\x49\xca\x8f\x9c\xa0\xa4\x09\xe3\x21\x7f\xb2\x97\xab\xf5\x64\x34\x8d\x18\x2c\x0a\x98\xa6\x44\x93\x72\x6d\xc9\x2d\xd7\xc0\x53\x54\x98\x9f\xac\x99\xdf\x45\xf5\xca\x94\x40\xae\x19\x16\xc8\xad\x89\xd0\x7d\xd0\x20\x69\xe3\x78\xdb\x45\x01\x19\x68\x87\x37\x94\x15\x19\xe8\x7d\x25\x35\x39\x7d\xa6\x50\x3d\x69\x69\xb5\x02\xa6\x0f\x1a\xbe\x1a\x08\x63\x66\xd8\x96\x3c\x57\x2b\xd3\x18\xf1\x53\x9d\x7f\x2c\xf4\xee\x27\xfb\x51\x1b\xb2\xae\xfe\x0b\x0c\xc5\x4f\x96\x42\xe9\x96\xb6\x34\x07\xe8\x6f\x13\x34\xe1\xeb\x6c\xb7\xfb\x58\x9c\xd1\x8c\x49\x0f\xc3\x25\x87\x5b\x07\xaf\x6f\xce\x2b\xfa\xc7\x20\xdc\xc2\x29\x23\x46\x80\xee\x1f\xcb\xf4\x4f\xbc\xca\x90\xcf\x07\x57\x3b\xf7\xb9\x59\xed\x19\xec\x8b\x15\x19\x1e\x78\x63\x1a\x30\x47\x99\xa0\xa4\x2b\xa8\x8b\x60\xcd\x8f\x11\x56\x7f\x19\x16\x4a\xa6\x5b\x28\x75\xef\x69\xee\xdf\xc0\x4d\x51\xa6\x67\x37\x38\x7d\x1e\xda\x67\x0e\x23\x8b\x85\xd3\x3c\x66\xc6\x9b\x9b\xcf\xcd\xeb\xcf\xdd\xeb\x8f\x1f\x71\xf8\x68\xcc\xe8\x13\xfa\xd0\xcf\x4c\x99\x42\x01\x47\xdd\x5e\xe9\x4e\xd4\x40\x1c\xb5\xe1\xbe\x75\xd1\x01\xb0\xf7\x32\x7a\x25\x78\x38\xce\x61\xf9\x66\xa1\xad\xbd\x1f\x6a\xb7\xaa\xd6\x36\xcd\xc2\xb6\xf5\x0c\x6c\xa1\x14\xeb\x17\x5a\x2c\x46\x35\xda\x8c\x46\xb9\xf6\xf6\x3e\x66\x9b\xa7\xcd\x35\xcf\x59\x7a\x3e\xef\xd2\x73\x1b\xdd\x4d\xbb\xcd\x9a\xcf\xa6\x25\xdd\x2a\x57\xe5\xa9\xb6\x7e\x1e\xd3\x1a\x50\x72\xcb\x32\x57\xe6\xce\x5b\x10\xa9\x1f\x52\x30\x58\x87\x89\x04\x0d\xa0\x5b\xa8\x94\x99\xad\x7c\xd4\xe3\xd5\x9d\x75\x0a\x77\xf5\xff\x35\xf5\x16\x70\x78\xbb\xde\xc6\xfd\xe4\xd6\x0f\x36\xfb\x70\x46\x0e\x46\x4d\xc6\xc6\x91\xce\x8e\x98\xc7\xe0\xe7\x94\x0a\x3b\x19\xd7\xa9\xb7\x37\x76\x18\xf3\xdc\xb0\xba\x8e\x88\x51\xe2\x46\xd5\x6d\x24\xbb\xf3\x15\x78\x42\xf0\xef\x3c\x7d\x8f\xf5\x89\x91\x6d\x84\xa5\xfc\x08\xec\x44\x9f\x3e\xb1\xdc\xad\xb9\x39\x27\x59\xeb\xad\x9f\x57\x67\xf6\x66\x83\x66\xc9\x5d\x74\xd0\x04\x87\x9d\x1a\xf0\x6a\x1c\xa0\x69\xca\xdd\x29\x93\xad\x8c\x0f\x11\x36\xcb\x99\x78\xb3\x50\x6d\x7f\x79\xc7\x23\x1a\x6d\x9d\xca\x8e\x99\x91\xca\xb6\xf5\xe9\xa1\x31\xdc\x6c\x93\xc3\xab\xc0\x43\x36\x49\x4f\x8f\xce\x29\x3d\xb3\xf7\xab\x42\x1c\xa3\x0e\xe9\xc9\xfe\x2e\xfc\x77\x71\x19\x47\x10\x06\xdf\x83\x5b\x5c\xf4\x65\xd1\x22\x58\x5c\x5a\x6f\x9c\x35\x9c\xb4\xb8\x73\xf6\xe4\xbc\xf9\x70\xba\x39\x5a\xc2\xdf\x5c\x2e\xe6\x2e\x2f\x7d\x2d\xa2\x73\x48\xdc\x82\x6b\x45\x27\xa3\x09\x17\xed\xe9\xd2\xe2\x5a\xd7\x6c\x75\x0e\x12\x0f\xb2\x60\x1f\x03\x98\xe2\x8d\x9a\x4b\x9f\x0a\xe5\x4b\x10\xda\x3c\x40\xf8\x88\xc5\xd3\xbc\xf5\xa7\x46\x87\x45\x59\xad\x03\xdc\xd4\x65\xae\xa6\xd0\xaa\xc4\xf2\x86\x42\xa3\x4e\x80\x51\xaf\xde\xb8\xa7\x29\xa4\xc5\xba\x64\x41\xb5\x83\x5e\x51\x16\x9e\x6b\x12\x40\x9a\xb2\x47\x18\x89\x4e\x9f\xf4\x18\xbc\x14\x8a\x77\xc5\x9c\x4c\x35\x7d\x09\x45\xdd\xca\xf8\x97\xe6\x32\xb1\x8d\xfa\x02\xc5\xda\xa7\x17\x6f\xf8\x68\x4e\x46\x28\x6c\x55\x02\x14\x79\xd4\x02\x88\x53\x81\xc9\x63\xae\x02\xa4\x2a\x32\xb2\x05\xef\xb4\x44\x11\xd1\x00\x34\x3a\xb1\xd9\xed\x38\x60\x8a\x6a\x5a\x5a\xe6\xc5\xef\xb4\xd0\x36\x2d\x89\x32\x9b\xc2\x9f\xd3\x1c\xa1\xb7\xcf\xfe\x8e\xc5\xd2\xf1\x6c\x63\x3b\xe6\xa4\x31\xaa\x2e\x1d\x5e\x49\x16\xfa\xcf\xda\xe1\xac\x35\xbb\x52\xbd\x3a\x6b\xd1\x3a\xd7\x48\xd1\xe8\x7e\xb4\x34\x77\x6d\x43\xe7\xe6\x29\xb4\xea\x9c\xea\xdb\xa2\x50\xe7\x67\x47\xa7\x5b\xea\xcc\xdd\xe3\x0e\xfe\x6e\xfd\x9e\x21\xe0\x6f\x16\x7a\x7f\xcc\x4c\xf4\x73\x12\xfb\x1c\x44\x98\xe0\x26\x8b\xc1\xf5\x5c\xb7\x4e\xf7\x16\x8e\xe9\xdd\xc2\x9a\x3b\xeb\x89\xff\xdc\xed\x94\x9b\x57\x69\xf1\xe1\xe3\xfe\x57\x63\xf2\xf8\x7f\x2a\x4f\x5a\x7d\x2a\x37\x37\xeb\x3f\x11\xec\x47\xac\xc0\x6c\xb9\xf5\x4c\x60\x66\x36\x98\xcb\x38\xa5\x26\xb4\xf8\xa5\xdd\x0a\x2e\x15\xbc\x0b\x65\x7e\x08\xd7\x97\xc4\x26\xad\xc9\x45\xb8\x4d\xa4\x86\x56\xfd\x5f\x1d\xcb\xb2\x54\x70\x8a\x69\x31\x3f\x29\xde\x52\x09\xfe\xe6\xa1\x6e\x04\x17\xe6\x0c\xcb\x3d\x39\xa5\xf6\x52\x4c\xd5\x97\x5b\xd5\x53\x8d\xd9\xb7\xbe\x0e\x30\x98\xab\x33\x23\xd3\x2a\x04\xd4\x5b\xbd\x1b\x7a\xb3\x7f\x1f\x9f\xc2\xf0\x50\xb9\xcb\xb8\x7f\x7c\xf8\x7f\x9c\x73\xd7\x35\x59\xa1\xdb\x90\x22\x9d\x21\xe5\x93\xe5\x94\xd1\xf1\xa8\x46\xb7\x04\x6e\xb2\xeb\x47\x91\x81\xed\x8c\x5a\xe9\x87\xe4\x84\x0b\xdb\x1c\x03\xe1\xa7\x38\xe6\xdc\xce\x7a\xb7\xd1\xce\xfa\xff\x58\xb1\xe8\x30\x63\x46\x08\x31\xbb\x52\x7a\x74\xb3\x77\xda\xad\xe6\x69\x55\x50\xb9\xe1\x67\xf6\x6b\x9b\x8c\xc6\xde\x7f\xf0\x36\x10\xe4\x69\xe4\xcf\xbd\xa1\xe7\x70\x4c\x99\xa8\x9c\xe4\x4f\x26\xf5\xa2\x95\x31\xb2\xb4\xe7\x0d\x8a\xcd\x86\xad\x4e\x69\x69\xd8\x5e\x91\x96\x16\x97\x61\x2b\x2e\xdd\x5a\x9c\x85\x0c\x70\x23\x11\xcc\x76\x37\xc7\xd3\x6a\x46\x3b\x9e\xd9\xaa\xf4\xad\xe3\xbe\x77\xd9\x2d\xdb\x12\xab\xe0\x91\x01\x2d\xf7\xc1\xa3\x65\xeb\x8b\x5a\xfe\x8c\xc0\x18\xeb\x98\xd5\xb2\x48\x0c\x9a\x1c\x8c\x59\x2b\xff\xdd\xd3\x81\x6c\xe6\x0c\x10\xc9\x5a\xe5\xc4\x74\x48\xab\x7f\x8e\x8a\xb7\xfa\x45\x93\xb0\xfa\x25\x9c\xef\x59\xca\x1e\x3a\x3d\x01\x6b\x9f\xc0\x2b\xfc\x4c\x26\x51\x49\x48\x77\x17\x74\x9c\x54\xfe\xd1\x1a\x5b\x3a\x84\x6d\x07\xd0\x4b\x54\x37\x7f\x92\x1a\x1a\x93\x0f\x2f\xef\xa6\x8e\xd3\xf8\x9b\x85\x69\x2d\x16\x7c\x2a\xff\xcb\xcf\x0e\xfe\x89\xf6\x2b\xa4\x21\xe4\xaf\xfe\x1d\x7a\xb5\x5c\xbd\x6c\x2a\x98\x4c\x55\xc3\x72\x26\xce\x21\xc5\x5b\x30\x7a\x7a\xd4\xe0\xe4\xc7\x91\xa6\x1d\x45\xc6\xa3\x59\x01\x63\x7d\x4a\x21\x0d\x5d\xf1\xea\xe0\x4e\xf3\x56\x74\xa6\x33\x05\xad\xa5\x3f\xa4\xe9\xd5\x84\xd0\xb5\xcf\x10\x56\x5d\xe8\x03\x90\xda\xa6\x48\xd6\xd2\xd3\xea\xc7\xc2\xfe\x60\x24\xcc\xb2\xe4\xf0\x9c\x23\xa1\x1a\x53\x1c\x4a\xcd\xed\x5e\x30\xa6\x33\x59\xaa\x3e\x1f\xff\x94\x86\x6a\x69\x40\xca\xd5\xff\x31\xef\xa9\x10\x5e\xe4\xc7\xc1\x55\x70\xbf\xa2\x4a\xca\xc3\x22\xaa\x4b\x46\xab\x02\xf3\x2b\x58\xc7\xb0\xe2\x19\x65\xd0\x20\xf5\x35\x2c\xba\x49\x90\x61\x35\x0f\x87\x43\xfd\xa6\x04\xa8\x5e\xbc\x5e\x5d\x4a\xec\xcc\x35\x31\x55\xe3\x3c\x58\xf1\x60\xeb\x8e\x36\x2d\x48\x06\x9a\x89\x0c\xa7\x06\x15\x36\xdf\xe9\x9c\xd7\xe1\x76\x06\xa8\x6b\x68\x6c\xb7\x21\x98\xaf\x61\x4b\x33\xee\xee\x49\x49\x0d\x62\x64\x67\xb5\x0d\x77\x8f\xcb\xe2\x73\x9a\x83\x56\x8d\x29\x6c\xd6\x39\xeb\xbf\x76\xce\xfa\x8f\xa5\x70\x46\xed\xb7\x42\x59\xb2\xf7\x73\x18\x7d\x7c\x00\x13\xee\x75\x62\x68\x75\x3b\xe7\x4d\xfe\xea\x1a\x73\x78\xd3\x7e\x25\x65\xc3\xe4\x7e\x16\x83\x8d\x9f\x5d\x17\x8a\x6d\xb6\x00\x7e\xb6\x50\x43\x9a\xd7\x5c\x4c\xe7\xc6\x6e\x6d\xfe\x5e\x73\xd7\x9c\xfc\xea\x73\xa7\x35\x58\xd5\xd3\x5a\xf9\x09\xab\xd1\x36\x7d\x7c\x99\x74\xd4\xbe\xb1\xc7\x8d\xab\x33\xa7\x51\x50\xee\xef\x7f\xbc\xfa\x9b\xbd\xba\x1b\x5a\x95\xff\x84\xb9\xe7\x15\x76\xa4\x83\x96\x6e\x44\x4b\xcd\x53\x79\x19\x2b\xde\x08\x37\xc5\x00\xdb\x58\x40\xb4\x65\xf0\x34\xef\xed\x16\xa9\x9a\x34\x6f\x5e\x31\x76\x0a\xf5\x7c\x7b\x7c\x3a\x4f\x2b\xe5\x22\x5d\x2b\x2e\xdc\xd5\x2c\xc5\x45\xba\x0a\x34\xfc\xdf\x0b\xd6\x71\x95\x25\x68\xdb\xde\x82\x82\xa8\xf0\xb8\x3d\x6f\xe1\x0a\x3b\xc2\x6d\x8b\xa8\x3d\xa0\xb6\x48\x38\x6d\xd1\xef\x12\x80\xde\xc0\xf0\xa8\x37\xb4\x76\xab\x40\xcd\x7a\x16\x06\x7a\x17\x3b\x73\xb1\x77\x18\x02\xbb\xae\x58\xb6\x36\xd5\xa2\xc4\x82\xa3\x23\xb5\xa7\x25\x88\x10\x6d\xfa\xbe\x93\xd6\xb1\x14\xb4\x36\x09\xb6\x68\x65\xc3\x0e\xaf\x5b\x25\xeb\x3a\x77\xf3\x3a\x73\x7f\xff\xda\xee\xc9\xb9\x6d\x18\x13\x1e\x51\xff\xea\x77\xe5\xe4\x9f\x7d\xd5\x1a\x18\xcb\xd4\x69\x96\x3b\xfd\xda\xa6\x49\x2e\x38\xb3\xff\x7a\x4d\x06\xcc\xf4\x92\x61\x6e\xf1\x37\x53\x3f\x67\xb4\xf0\xbd\x45\x74\x76\x18\xf3\xc0\x3e\x45\xdd\x74\xcc\xba\x8d\xfb\x80\x36\xa3\xf0\xb1\x5f\xd2\xcf\x8c\xde\xe6\xd0\xa1\xe8\xce\xc2\xbc\x70\x23\xd6\x91\xfa\xfc\xce\x47\xae\x43\xc3\xe6\x58\x3e\xf4\x5d\x78\xf7\xff\x8d\x14\xfc\xd7\x6e\x55\x13\x3c\x0c\xb2\xbb\x6d\x6f\x62\x8d\x72\x63\x27\x41\x03\xcc\xcd\x48\x63\x6d\x9f\xd9\x18\x05\x27\xd4\x6c\x95\xfb\xca\x9d\x2f\x4b\xab\x72\x97\x23\xb6\xf8\xcd\x33\x54\x1e\x9f\x8e\x29\x38\x61\x87\xd3\xcf\xdc\xda\x84\x1b\x86\xbf\xd8\x9a\xa2\x79\xf0\x3b\x56\x28\xfc\xef\xd2\xa6\x71\x40\xd9\xc9\x9d\xb7\x5d\x9b\x8c\x73\x87\x6f\x77\x5b\xc8\xe9\x1a\x93\x4b\x99\x07\xfb\x09\x8b\x4d\x9a\xf3\xec\x97\x6e\x99\xf6\x7b\xfa\x35\x74\x57\xca\x5c\xca\xcc\xeb\x10\xcc\xe7\xd9\xe6\xc8\xd2\xdf\x33\xdc\xbd\xbc\xad\x61\x1b\xff\x8f\x85\x30\x39\xbf\xaf\x6f\x74\x8d\xd9\xc5\xed\xf3\x16\x6b\xcc\x9f\x55\x3a\x3f\xbb\x68\x69\xae\xba\x72\xeb\xc6\xcc\x87\x7c\xab\x07\xbf\x35\xcf\xb1\xe6\xc9\xc0\xcb\x45\x11\xa6\xd1\x9b\x74\x4e\xcc\xc1\x75\xe7\x2f\x77\x8c\xd6\xf7\x72\x87\x58\x91\x9c\x7c\x89\x58\xc7\xc4\x29\xf5\x4a\xf1\xf4\x82\x40\x79\x6d\x59\x71\x0f\x32\xd5\x11\x60\x92\xde\x48\x00\xf6\x87\xa6\x97\xcb\x4b\x35\x2a\x35\xe5\xe5\xb2\x78\x53\xfb\x90\x28\x18\x3d\xf5\x7d\xea\xf2\xcf\xc4\x85\x7b\x95\x2e\x7f\x80\xc9\x0a\xd4\x1f\xa0\x91\xcc\x5b\x1f\x25\x9c\xf9\xbb\x58\x70\x4b\x4b\xab\x69\xda\xb7\xf9\xf4\xf2\xf4\x7a\xe9\x20\x34\x44\xd2\x97\xcf\x41\x5e\x97\x06\xb6\xad\x19\xc0\x24\x34\x6b\x8c\x72\x0d\x53\xac\xf3\xc8\x24\x3f\xa6\xe1\x2f\x5f\x2c\x01\x6d\xed\x9a\x61\xf5\xd1\xa8\xba\x09\x3e\xae\x46\xc5\x41\x90\x6b\xf2\x15\xc9\x5a\xee\x2b\x44\x71\x18\xfb\x3e\x0c\x63\x24\xa9\xe1\xc0\xa0\xf4\x0a\x62\x32\x4d\xe0\x84\x29\xe1\xe8\x29\x1a\x1a\xb3\x15\x59\x8a\x07\x94\x7e\xe3\x15\x92\x39\xc8\x07\xee\x21\xee\xd8\x74\x87\x79\xf7\xe9\x57\x23\x17\xdd\x31\x4a\x93\x99\xac\x60\xea\xd3\x94\x1d\x99\x19\xe5\x56\x16\xf3\x01\x5d\x9a\xc2\xd9\xb3\x6a\x9e\x4d\x56\xed\xcb\xf4\x60\xaa\x32\x92\x41\xf1\x56\xbd\xe2\xa8\x56\xb1\x57\x97\xe9\xa2\x1b\xe3\xa6\xa8\xf9\x9e\x32\x9b\xf0\x00\x4d\x9a\xea\x0b\x4d\xeb\x38\xaf\x48\x5f\x90\xd6\x35\x80\xb2\xc1\x3f\x27\x88\x67\x66\x2f\xd4\x33\xb2\x7a\x40\x71\xb5\x5a\xda\xaf\x0c\x51\x3c\x74\x2d\x7c\xc1\xa3\x3d\x50\xd6\x1c\xbf\x6f\xe0\x50\x1e\x31\xc9\xfd\xcb\x28\xa0\xc4\x3e\xbb\xe8\xce\xd2\x4b\x7b\x62\x35\x77\x71\x52\x7e\xe4\x92\xb0\x23\x9b\xb2\xcb\x7e\x15\x50\xe4\x4e\x48\xc1\x98\xea\xca\xac\xfa\x95\x65\x65\x56\xdc\x8f\xfd\x3f\xca\x20\x1a\xdc\x6e\x9f\x78\xec\x95\x99\x21\xf6\xbc\x5a\x51\x0b\x73\x47\xd2\x6e\xfd\x88\x7d\xc0\x78\x8d\x4d\xfd\x1d\x57\xc1\xa4\xe9\xdb\x5c\x6a\x1e\xb4\x2a\x79\xcb\x6e\x74\x85\xd2\xf8\x36\x3f\xcd\xa5\x78\x0e\x9a\x27\x66\xea\x92\xec\x5a\x1f\x41\xb3\xbe\x4d\x35\x37\x91\x3d\xb7\xa8\x6a\x22\xda\x05\x15\xe9\x7f\xb7\x48\xb3\x10\xb8\x69\xf4\x88\xe3\x8d\xd7\x9d\x7a\xc8\xcc\x48\x4c\x19\x69\x0e\x6e\xd9\x85\xbe\xfb\x92\x39\x49\x16\xc7\x77\x72\xd8\x25\x83\x2d\xbb\xcf\xa8\xab\x5b\xc6\xf8\x2b\xfe\x98\x0f\xb6\x47\x44\x61\xaf\x60\x5b\xa6\x76\x0a\xfd\xd6\x37\x83\x16\xad\x53\xdd\x5a\x9e\x66\xd4\x3c\x9f\x9b\x24\x15\x61\xa5\xf4\x15\xd7\x0e\x67\x27\x3d\x19\xc2\x65\xa0\x38\xac\x58\xcb\x7e\xcb\xae\xda\xf4\x76\xf9\xa0\xb9\x38\x44\x43\xc2\x69\xdc\x7b\x8e\xaf\x54\xe3\x1b\xd5\xed\x21\xfd\xce\xf6\xca\x34\x5e\xd4\x57\x2c\x41\x32\xca\xe1\x17\x50\xf3\xe7\x1d\x7a\x2c\xfb\xf1\x06\x81\xe2\x64\x7a\xe3\x8b\xb9\xdb\x4b\x1e\x5d\xc3\x62\x61\x77\xbd\x2b\x34\x4b\xad\xb7\x77\x5c\xc9\xfe\x08\x29\x1c\x7d\x63\x92\x62\xb5\x7b\x3b\xc1\x90\xee\x67\x18\x92\xf8\x11\x58\xec\x1d\xd9\x15\x4c\x0a\xc6\x27\xcd\xc0\x82\xa8\x04\xc1\x68\x40\x8d\x80\x40\x0c\x19\x80\xd4\xcd\xb5\xea\x08\x46\x1e\xfd\xf4\xce\xf6\xc7\xfa\xda\x1f\x6c\x51\x19\x81\xff\xd8\x2d\x09\x0c\xfb\xb1\x22\x60\xb1\x9e\x6f\x96\x31\x00\xfd\xe0\xa2\x49\x8e\x01\xb7\xa1\x5d\x6e\x28\x67\x10\xd1\x5c\x70\x5e\x34\xed\x78\x3a\x28\xa4\x3d\xc0\xa2\x1e\xa4\x49\x3b\x5a\xe0\x1e\xa5\x81\xef\xa5\x3a\xac\x22\xef\x3c\xd7\x02\x15\xd1\x28\xca\x65\xe6\x0c\xbe\xf0\x5c\x1e\xa0\x09\x29\x7a\x0e\x22\xca\x22\xa5\xce\x28\xe5\x34\x4d\xe2\xd0\x12\xb6\xa3\xa5\xa9\xdf\x4d\xb6\xfb\x88\x51\x5f\xda\xd6\x2f\xb5\x09\xb7\x9b\x87\x94\xf4\x29\x8d\x90\x12\x59\xab\x14\x74\x09\xd2\x12\x62\x34\xb2\x03\xa7\xe7\xc4\xea\xf0\x98\x21\x89\x4f\xbf\x53\xd6\xa5\xe6\xd3\x4a\x00\xc7\xbc\xe0\xad\x6c\xaf\x21\xe3\x16\xaa\x90\xe8\x89\x4b\x0c\x25\x3a\x74\xdb\xcc\x00\x0e\xed\x97\xe4\xce\x1e\x71\x00\x8c\xd0\x69\xd1\x4e\x9c\xd6\x79\xe1\x9b\x5e\xaf\x9b\x78\x4f\x98\x19\xda\xf7\x01\xe5\x86\xed\xfb\x66\xe7\x44\xa7\x6e\x43\xfc\x87\x57\xd7\xf8\xe8\xb4\x0c\xd8\xcb\x80\xf2\x26\xaa\x9b\x16\x53\xa8\xcc\x31\x2f\x41\x96\xa6\x05\x57\x2c\x93\xe8\x0e\x74\x46\x8d\xd5\xff\x42\x74\x4f\xa6\x6d\x6c\xbc\x4f\xff\xe1\xd5\x14\xa6\xa1\xaf\xd3\x01\x4b\x4f\xfb\x5f\x0b\x5a\x4b\x04\x49\x54\xff\x6b\x72\x6c\x00\x40\x35\xfa\xa2\x5b\xc7\xc1\x3c\x9e\xee\x6a\x32\x9e\xf2\x04\xc7\x62\x02\xcf\x63\xb1\x5a\x91\xc3\x26\x23\x2a\x1e\xa9\x0e\x29\xb7\xf2\x56\x22\x55\x8f\x2d\x4d\x77\x4b\x81\x69\x4f\x95\x83\x4b\x3f\xa6\xc4\x10\x17\x55\xdc\xd8\xee\x24\x99\xfd\x1a\x46\xe5\x10\x2e\x0e\x1f\xea\xb4\xc5\x87\x39\x59\xbf\xe0\x29\xb1\x07\xbd\xaf\x98\x83\x47\xdc\x75\x8b\xa3\x84\xb5\xe4\x79\x25\x52\xd9\xe1\x08\xe7\x7e\x41\xe4\x12\x5e\xc3\x97\x22\x9b\xe8\x00\xbf\xda\xd6\xf1\x07\x1b\xf0\x80\xf1\x90\x57\x9e\x18\x75\xdc\x37\xbd\x09\xa3\x31\xf0\x51\xce\xfb\xa7\x32\x8b\x09\xc5\x73\x12\x87\xfd\x79\xfa\x77\xbf\x76\x6b\xf0\xdd\xd4\x8e\x41\x74\x2c\xfa\xa7\xa8\xf3\x0e\x03\x65\xa7\xf4\xcb\x26\x5e\x00\x8b\x49\x55\x2d\x3c\x27\x17\x92\x8a\x1a\xf8\x90\x2d\x74\x6a\x6b\xf2\xb0\x37\x68\xf2\x4a\xb1\x88\x01\xf0\x0a\x7a\x7e\x62\x66\x11\x0f\xec\xd8\xd1\x38\x85\xd4\x27\x7f\x82\x49\xc2\xd1\xa7\xac\x15\xf6\x00\xfb\xce\x9a\x32\x96\x10\xa6\xaf\xea\x25\xe8\x4c\xaa\x24\xd7\xbf\x95\x02\x43\x93\xfa\x42\x58\xa1\x65\xae\x7d\xfd\x78\x15\x43\xaf\x44\x7d\x9f\xd7\xaa\x8d\xf9\x9b\xac\x4f\x2b\xd7\x85\xe2\xe7\xe6\xeb\xc7\xe2\x25\x57\x9a\x09\x98\xbc\x6e\x8b\x6d\xcb\x28\x28\xb0\xd3\xcf\x6b\x53\x60\x35\x9c\xd3\x46\x43\x45\xd2\xef\x28\xa3\x1f\x9d\xca\x19\xba\xb4\xc9\x58\x12\x7d\x86\xac\xc2\x86\x40\xcb\x95\x33\x8c\x6f\xd3\xca\x48\x00\x30\x9d\xa3\x51\x5d\xd4\x9e\x5b\xa0\x39\xaa\x36\xd6\x03\x99\xbf\xd5\x4d\x50\x13\x67\x42\x5c\xa9\xdd\x9f\x54\x9d\x49\x38\xc6\x4d\x35\xab\x3a\xf5\xb7\x2f\xdf\x97\xea\xc6\xf2\xaa\x32\x1a\x5f\xa9\xec\x35\x6c\xe6\x79\xd8\x86\xc5\xb0\x75\x7b\x61\x8e\x3b\x98\x61\xe0\x3b\xea\xe1\x85\x09\xa6\x45\x41\x6d\xd5\xac\x32\x2c\x1d\x76\x7f\xc7\x65\xbd\xee\xff\xd3\x3c\xfe\xd5\xa8\xff\x68\xfc\xdd\x9d\x69\x14\x55\xa5\x5d\xf2\x93\x67\x48\x5d\xf2\xd1\x6f\x83\xea\x28\xdf\x56\xbe\x85\x37\x4f\xda\x5c\x5b\x6a\x6e\x3d\x81\x02\x47\xfc\x06\xff\x8f\xb9\x16\x98\xf2\x16\x68\x7b\xde\xb6\x6f\x94\xf6\x44\x99\xf6\xf5\xc9\xd2\x5e\xaf\x9b\xcc\xc0\x1a\x63\x7d\x97\xb9\x51\x34\xc2\x48\x94\x5b\x74\x4a\x74\xbf\x60\xb1\x1b\xea\x04\x76\x37\x93\x8b\x90\x8c\x4e\xc6\x75\xc6\x52\x82\xed\x9c\xa5\x1a\x65\xa7\x18\x9e\x72\x26\x62\xd2\xb9\x59\xb7\x8d\x0c\x40\x55\x80\x7a\x6c\x07\x56\x0d\xaa\x83\x83\x5a\xaa\x37\x2f\x54\x67\x0e\x62\x7c\x2b\x1c\x8c\x25\x7d\xf0\x12\xde\xed\x62\xc2\x90\xca\x97\x27\xa2\x56\xa6\x5f\x1d\xb4\xbf\x36\x51\x66\xdd\x3a\x96\x77\xab\x93\xd3\xd0\xa9\x3a\x54\xaa\x7a\x9b\xac\xd7\xfb\x5c\xbd\xba\x8c\x8b\x33\x04\x20\xf8\xea\xd5\x5b\xbf\x4d\xf9\x02\x6e\xc6\x90\x95\x81\xce\xb7\x21\x4d\x60\xc7\xdd\x43\x6b\xd3\x0c\xbb\x1f\x56\x4b\xf5\xaa\xdb\x81\xcc\x17\xbb\x01\x77\xb4\xb8\x59\x4f\x23\x39\x34\x8e\x7f\xf8\x7a\xe7\x35\xd8\xce\xff\xfd\x3f\x9e\xfe\xfd\xe3\xa9\xe5\xd2\xb8\x76\x77\x66\xf2\xc4\x55\xcd\x46\xb0\x53\x76\x2b\x3f\x32\xdc\x1f\xf3\xde\x89\xea\x71\x58\xcf\x7c\x96\x93\x7b\xc3\x30\xad\xdd\x08\xf0\xea\xb0\x2a\xea\x9d\x45\x1d\x5b\x11\x00\xb3\x82\x9e\xc9\xd3\x92\x45\xc5\xb1\xca\x34\x2e\xb4\x14\x3c\x6f\xc0\x50\xde\xbc\x29\x93\x6e\xed\x1b\x4a\xab\x9d\xf6\x16\xf4\x99\x3c\xd3\x30\x87\x6f\xda\x0b\x9a\xed\x5e\x5b\x6f\x6f\x0d\x08\xbf\xfc\x8b\xad\x6c\x3b\x5b\x95\x5d\xdd\xec\xee\xf5\xea\x4f\x8b\x89\xc6\xd6\x33\x04\xd8\x5c\x6d\x5b\x6c\x75\xf4\x22\xd0\xca\xde\x1f\xc3\xc6\xf1\x6c\xd1\x2d\xb2\x2d\x07\x6f\x3d\x54\xb7\xcd\xd1\x38\xe7\xcf\x83\xac\x91\x9f\x94\x67\xbe\x40\x10\x99\x34\xea\x98\x4b\x31\xfb\x71\x21\xce\x8d\x2b\xe3\x5e\x32\xa0\x7e\xd5\x02\x18\xbc\x0e\x08\xb8\x8c\x85\x0f\x70\x39\x5b\xe9\xe4\xc5\xaf\x03\x4e\x39\xd2\x77\x52\x03\x97\x32\x19\x94\xd2\x0d\xde\x78\x0a\x6a\x8e\x8c\x69\x4d\xb5\x56\xf5\xcc\x4d\xc8\xd3\x8c\xa9\xfe\x73\x29\xbf\xe8\x44\x57\xde\x1d\x7e\xe4\x3a\x27\x70\xd4\xd7\x4b\xc0\x45\x4a\x77\x87\x14\x1b\x4b\x55\xb3\xce\xd1\xc1\xd3\xd5\x81\x6f\x65\xb8\xd0\x81\xd3\x18\x33\x4f\x3a\x09\xef\x6c\x4f\xc0\xff\xec\x06\x9e\x35\xef\x9e\x8a\x16\xdd\x5d\xfe\x63\x61\xf2\xe2\x74\x38\x9b\x34\xf8\xe8\x7f\x27\x73\x6c\x7a\x1d\xd1\x48\x69\x5e\x93\x1e\x5a\x53\x00\xa9\xe2\x93\xe4\x4d\xeb\x63\x37\x26\x0c\xbe\x86\x7b\x5a\x28\x8e\x50\x72\xf6\xb7\xd2\xca\x74\x2a\x6a\x27\x45\x67\xb8\x6f\xc2\xab\x3e\xaf\x1e\x6b\x0a\x6e\x96\x6f\x44\xbb\x86\x68\xf8\xe4\xbe\x68\x0e\xf6\xb6\x3f\x6a\xe6\xbb\xf9\xbf\x82\x0c\x34\xef\xfb\x97\x2a\x9e\x09\xa8\x03\xdd\xb4\xad\x20\xc6\x1e\xa1\x9b\xbb\xd7\xab\x95\x30\xf9\x2d\x1a\xc3\x7c\x5a\x95\xac\xd3\x7b\x03\xc2\xc9\x4e\xf4\x8a\xc7\x04\x96\x9a\x69\x35\x16\xe3\x66\x9c\xba\x08\x5f\x06\x98\x8b\x0f\x9f\x7c\xee\x1d\x29\xeb\xf5\x13\x91\xcc\xbf\x9c\x65\xcf\xcb\xc9\xc5\x66\xc0\x7e\x9d\x7b\xe8\xfc\xe2\x1c\xaa\x77\x9d\xa9\x7c\x5e\xba\x48\x2d\x70\xea\x92\x8d\xcd\xd7\x60\x87\x07\x75\x2a\xac\x57\x88\x71\x04\x3f\x7f\x56\x62\x9e\xdb\xef\x30\xed\x1f\x2f\x84\xf9\x18\xa4\xdc\x75\xf3\x5c\x52\x73\xa6\x6f\xf7\xb1\x27\x6f\xf1\x52\x99\x21\x6f\xdc\x87\x4f\x26\xb6\x92\x5c\x7d\xbe\xad\x06\x73\xa6\xfe\xb3\x4d\x18\x5a\xff\xd6\xb7\xdb\xca\x6b\x95\x8b\xf5\xc7\xf0\x9a\x83\x55\x9e\x40\xb9\x57\xe9\x20\x6f\x49\x76\x6c\xd9\xf3\xe3\x96\xe1\xf1\xcf\xdc\x26\xfb\x12\x26\x63\xea\x8e\x7f\xda\xba\x8d\x1a\x32\x2d\x67\x56\xbb\x6b\x5f\x2b\x40\x74\xcb\x54\x95\xa2\x3b\x7c\x9c\x9b\x27\x5e\x6c\xba\xf1\x69\x6b\xbd\x23\x8b\x2e\xaf\x37\xc3\xbc\xce\x7e\xb5\x9b\xa1\x77\x2f\x45\x3a\xa7\x07\x4c\x7e\xb6\x13\x7a\xaf\xc8\xb5\xa1\xb9\x8e\x7b\xe9\x47\x9a\xab\x73\x24\xb9\x87\x4f\x31\xde\xee\xeb\xcc\xcd\x5a\xeb\xb9\x04\x26\xf7\x16\x20\x2c\x16\x86\xc1\x59\x77\x14\xe9\xec\x3e\x37\x6b\x7c\xb1\xcd\x99\x71\xf0\xc0\xd7\x33\xe3\x70\x75\xd1\xfa\x72\x78\x67\x56\xbc\xbc\x11\x6b\x8c\xdc\x6e\xd3\x99\x3c\x33\x93\xb0\xa5\x1a\x23\x24\xb0\xd4\xfd\xb1\x3c\x3e\x7c\x29\x23\x02\xfe\xef\x8f\x14\x86\x59\x04\xce\xf3\xfd\x55\xe9\x7f\xf6\x74\x8a\xc6\xad\x4b\xb9\x8d\x5e\x47\xa8\x75\xd4\x3e\xe5\xae\x89\xcb\x03\xf7\x28\xda\xe5\x35\x60\xe8\x16\x38\xad\xff\x74\x4a\xac\x13\xe3\xcc\xde\x06\x74\xbb\x8a\x0f\x98\x47\xc0\x70\xba\xc9\xbb\x36\xae\x14\x57\x8d\xda\x6c\x80\x9f\xc4\xbc\x9c\xee\x82\x36\xf3\x23\x03\x92\x8d\xe5\x63\x94\xb9\x59\xfd\x67\xe8\x19\x1a\xff\x3a\x1b\xa1\xfd\x3b\xd7\x66\x4d\x8b\x96\xef\x60\xb3\xcf\x16\xe0\x5a\xef\x1f\x87\x64\x99\x46\xb1\xa4\x3e\x0a\x24\x9d\x61\x33\x6c\x69\x09\x5a\xee\x34\x8b\x59\xb7\xa5\x64\xe6\xbf\xc9\xe7\xe1\xee\xbc\xb7\x74\x61\xcd\xad\xde\x06\x32\x1b\xe7\x8f\xbb\xc9\xd5\xf9\x7c\xe3\xfa\x40\x81\x64\x69\xc3\xf3\xf8\x8a\xf4\x72\x03\x30\x76\xbf\x60\x67\x86\xd7\x34\x07\x4c\xc5\xc5\x0e\x87\x83\x32\xf5\xa4\x67\xf6\xf5\x56\x9f\x45\x63\xae\xd0\xd0\xb9\xbb\xe8\x7e\x01\x8f\x7c\xc0\xba\xb9\x19\xb2\x78\x33\xb9\xcb\xfe\x35\xcf\x02\x73\xf6\x5b\x32\x49\x1c\x72\xcc\x3c\xde\xde\x05\x1b\xe3\x46\x40\xd9\xf7\x83\xcc\xc2\xf2\x2c\x77\x0c\x08\xc2\xdf\x24\xa7\xec\xf5\x8c\xe9\xe4\x48\x3b\xaa\x4c\x4f\x67\x7d\x62\xa6\x01\x66\xbb\xb4\x8d\x7c\xcd\xed\xbc\x47\xb6\x9d\x23\xd1\x6d\x12\xd4\x8b\xb3\xc6\x53\x16\x9f\x3a\x7c\x13\x69\xb1\x94\x39\x43\xca\x2c\xca\xdf\xd6\x31\x2b\x9e\x4e\xc8\xbd\x34\xc1\x0c\xab\xd5\x59\x55\xb6\xaf\x66\x02\x8f\x5b\x72\x45\xe8\xb8\xf7\x16\xd8\xa6\x78\x63\xfb\xa7\xfc\x8a\x17\x18\xa6\x75\x5b\xd5\x98\x56\xcf\xaa\xcf\xd5\x4f\x7d\x13\x0b\xb4\x03\xbe\x5e\xd8\x85\x2e\x4c\x2a\xd8\xc6\x30\xa7\xa8\xe6\x30\x49\x0c\xcc\x69\xc3\xab\xdf\x90\xa6\xfe\x73\x92\xca\x3f\x96\x01\x9f\x9e\xb1\x1f\x17\xa3\xbf\x3a\x9e\x05\x26\x3c\x7d\x32\xa2\xca\xcd\x2d\x77\x48\x03\xde\xac\xdc\xe6\xa5\x9f\xe0\xbf\x03\x59\x47\x03\x6c\xce\x43\xb9\x49\x33\x1f\x8a\x53\xee\x7c\xbd\xfb\x4c\x29\x01\xab\x0e\xbf\x94\xa3\x2c\xb5\x94\x6a\xe3\x98\x3c\xbf\x1b\x52\x7d\xe7\xb1\x40\x0b\xc6\x70\x38\x9c\x12\x71\x32\x1f\x06\x17\x26\x1b\xd2\x48\xe0\x72\xbc\x3b\x23\x49\x0f\x43\x8c\xd1\x50\x43\x9d\xea\x0b\x4f\x33\xa6\xe2\x12\x76\xf4\x0a\xe0\xb5\x5e\xd0\xf1\xb4\xf8\x51\x72\x0b\x29\xe8\x3e\x69\xb6\x53\xaf\xb2\xf4\x6b\x27\x12\x04\xd6\x59\x5f\xa3\x27\x8a\x9b\xd7\xd7\x95\x1d\x91\xc8\x6e\x25\x05\xa9\xd3\xb0\x79\x8b\xd8\x60\xaf\x89\xbd\x1b\xce\x66\xf3\xf4\x45\x17\x09\x2b\xcf\xe9\xc7\xf0\xc5\x82\xfa\x5b\x92\x03\x68\xe9\xce\xbe\x7f\x00\x11\xdc\xbd\xb1\x0d\xb2\x40\xa3\xac\xb2\xad\x7e\x2b\xf2\x0a\x9b\x7a\x4e\xa2\xda\x46\x6a\x81\x3d\x16\x24\x1b\xa4\xfb\x7c\x28\xd3\xb4\x9b\xa3\x66\x0a\xe2\x33\x4d\xd2\x6d\xa6\xfb\x9d\x06\xa6\x31\x4c\x4d\xf8\xb0\xa7\x39\x05\x9e\xb3\x17\xc6\xe9\x78\x6a\x1a\x53\xae\xd1\xf8\xf2\xc1\x8c\x2e\x79\x9a\xfb\x69\x7a\x2b\x47\x14\x81\x9a\x0e\x6c\xb9\xcf\x2d\xf2\x7c\xc2\xb4\x8e\x53\x6f\xb5\x85\x3b\xea\x62\xc4\x60\xeb\x60\x6f\x66\x93\xc9\xe4\x35\xbe\xcd\x0d\x6b\x1f\xb3\x75\x8c\xbd\x33\xb5\x65\x09\xb1\xdc\x93\x33\xf5\x52\x2d\xca\xe8\xad\x8b\xd9\x63\x86\xd0\x52\x6f\x7c\x80\xc8\x18\x3c\xe3\x62\x51\x90\x37\x5d\x50\x24\xd3\xe6\x88\x7e\x71\x5d\x6a\x5d\x66\x69\x7d\x8e\xf7\xe1\xbf\x8a\x03\x9f\xe9\xde\xd0\xf4\x71\x11\x87\x24\x40\x6f\x9a\x1a\x34\xb0\xa4\x57\xa0\xf8\xc7\x50\x43\xfe\xb8\xd8\xa6\x36\x86\x3e\xb4\x57\x1a\xe1\xee\x86\x88\x1b\x8b\x33\x12\x98\xd4\x87\x81\xcc\xaa\x0f\x9b\x34\x1c\x46\x5d\x3c\x16\x46\xb4\x65\x73\xca\xc7\x4e\x6f\x8d\x8e\xf9\x73\xbb\xdd\xe1\x63\x67\xb9\x04\x20\x5a\x78\xa8\xb4\x2a\xec\x31\xd1\x33\x0e\x5c\xcf\xa4\x78\x70\x71\xc7\x53\xaf\x12\x31\xa6\xfa\x1b\xd3\x43\xc9\x16\x8d\x79\x05\x06\x9c\xfa\x6e\xb1\x98\xbf\x5f\x19\x37\x8c\x74\x74\x64\xdc\xd3\x5c\xcc\xdc\xae\xe0\x55\x38\x42\xbf\x7d\xb7\x95\x87\x7b\x2c\x04\x61\xc4\x83\xb0\x91\xf6\x53\x02\x87\x9d\x7e\xd0\xf6\x7e\x6e\x57\xb8\x51\x80\x61\x3e\xd3\x2c\xdc\xdd\x70\xe9\x06\x53\xe4\xca\xec\x61\xb9\xf9\x57\x47\x1c\x34\xff\xc2\xb4\x48\xf2\x19\x13\x4e\x40\x89\x21\x89\xcc\xf2\x21\x99\x7e\xf2\x10\xba\x60\x2f\x2d\x90\x64\x1f\x10\xa4\x45\x86\x69\xda\xae\x30\x8d\xb8\x1f\x8a\x9f\xde\x84\xc0\x58\x96\x33\x86\xdf\xe0\x5a\x4c\xf3\xe0\x66\xfc\x48\x46\x8b\x63\x8f\xf3\x57\x44\x8d\xaf\xcb\xe6\xf3\x85\xdb\x1f\x69\x45\xd5\x21\x6b\x67\xb4\xe2\xdb\x3b\x2e\xb7\xc5\x22\x0d\xad\x18\x57\x49\xda\x1b\xad\x7d\xf6\xc2\x90\x63\x43\x2b\x9e\x7c\x07\xe8\x6e\xe8\x2c\x5c\xc1\xf4\x04\x1e\xac\x8f\xcb\x38\x49\xaf\xe2\x24\xb9\xc4\x79\x5a\x61\x25\xbd\x84\x93\xe4\x79\x2a\xa6\x87\xf2\x88\x44\xa2\xd3\xe1\x44\x2d\x25\x7b\x3c\x3b\x50\xaa\x78\x08\x45\x16\x30\xa8\x3a\x28\x78\x97\x2c\x9c\x7e\x71\xcb\x23\xb0\x74\x76\x32\x4b\x07\x79\xf7\x08\x67\xe6\x3f\x25\x3c\x8e\xff\x08\x67\x79\x84\xff\x1e\x21\x3f\xf0\xcc\x9e\xee\xc7\x16\x21\x30\xbb\xe9\xca\x1f\x61\x2c\x7f\x39\xec\xec\x5f\x2d\x1a\x9b\xe4\xee\xff\x2c\xef\x4c\x87\x1c\x56\x3c\x21\xe1\x07\xbc\x04\xaa\xa1\x75\xcd\x39\xc8\xe1\x30\xa6\x96\x11\x39\xac\xb4\xb8\xb3\x34\xbd\xf1\x1b\xfc\x9b\xf0\xae\xc6\xd0\xb8\x96\xc9\xb8\xc8\x1e\x2b\x86\x16\x14\x4c\x4a\xf7\x52\xac\xee\x85\x0e\x4b\x02\xf4\x29\x3d\x5d\xde\x01\xbc\xa8\x19\xe4\xed\xc6\x07\x1c\xce\xac\xbe\x75\x8f\x19\x9e\x68\x64\x1d\x8e\x32\xa5\xc3\xc9\x16\x08\x86\x7a\x83\x7f\x87\x17\xb0\xec\xe9\x50\x20\x9e\x94\x23\xd4\xb7\xa0\x6a\x61\x7f\xb1\x3d\x9f\x81\xf7\xab\x00\x6c\x74\x03\xd0\x58\x32\xd0\x10\x18\x5a\x5c\x18\x8b\xc7\x1c\x22\xa6\x6d\x92\xbf\xd3\x0c\x4e\x31\xb7\xd8\x9c\xe7\x29\xfc\xe0\xea\x35\x71\x9a\xe0\xec\x97\xe8\xa6\xb3\x2e\x43\xa3\xd7\x86\xec\x17\x4a\xcb\xf4\xdd\x64\xd2\xb9\x59\xfa\xcc\x8d\x34\x67\xbf\x7a\x7f\xf3\x58\xf8\x9b\x05\x1c\x8c\x50\xa4\xb1\x55\x5c\x05\xb7\xa9\x92\x2a\x3b\x79\xf0\xca\x6e\x9b\x43\x10\xfe\x6e\x61\xfa\x0a\x3b\x34\x66\x2b\xd3\x9e\x26\x63\x27\xe3\x4d\xd4\xbe\xea\xa2\x73\xdd\xcf\xb0\x11\xfd\xc7\x8a\x43\xb1\x5a\x0b\x9b\x96\x8c\x42\x4b\x14\xb8\xd2\x7d\x63\xce\xc6\x92\xcc\x72\xc5\x1a\x6e\x31\xb8\xc9\x85\x9d\x9f\x2d\x4c\x77\xa5\x19\x3b\x19\xcf\x9b\x96\x8c\x9d\x8d\xbd\xbb\x15\xad\xf0\xb3\x85\xdb\x21\x9d\xa1\x71\xb3\x72\xbb\x56\x6a\xd2\x99\x2c\xdd\x66\xfc\x9d\x9f\x2d\x4c\x53\x6a\x65\xeb\xdd\xd4\xaa\xba\xbf\xed\x0c\xea\xfc\xec\xd7\x49\xe9\x16\x69\xd5\xf8\x1f\x2b\x53\x41\xf6\xef\xa6\x86\x67\xb3\x1c\xfc\x2d\x44\xd5\x98\xfc\xfb\xd8\x67\x02\xc1\xb7\xd0\x85\x9f\x2d\xd3\x32\xfb\x06\x76\x18\x77\x81\x45\xa0\x34\xea\x30\xd7\xd3\x70\xab\xa5\xb6\xab\x1b\xa8\xbb\xac\xb7\x7a\x6a\x97\xa4\xe7\xdc\x05\x91\xb1\x18\x52\xdc\x53\x1e\x43\x65\xb8\xd1\xe6\x95\xa2\xbf\x2f\x2e\x46\x7a\xba\xac\x08\xc7\x3d\x19\x27\x52\x07\x39\xd4\x37\x74\x20\x7b\x15\xd7\x7e\x65\xc8\x2a\x4f\xf7\x08\x65\x79\xcb\x83\x69\x8c\x3a\xc0\xb8\x50\x7c\x92\x57\x63\x43\x79\x07\x1e\x4e\x8a\x0e\x18\x25\xa4\x2d\x3a\x8e\x77\xe1\x00\x22\x76\x3d\x14\xdb\x11\x5c\x78\xc0\x2f\xd8\x06\x5c\x22\xdb\x61\x17\xc9\xb1\x15\x9a\xd2\x41\xff\x7c\x70\x1e\x1a\x41\xb8\x54\x03\xc6\xe2\xa2\x89\x23\x7d\xf9\x1d\x88\xfb\x6f\xa1\x97\x25\x98\x9e\x99\x58\x5c\x29\xf4\x6c\xd5\x71\xb7\x0e\x74\x45\x2f\xd8\xde\x69\x62\xf8\x76\xe2\xd1\xf2\xf6\x41\x01\x65\xa1\x32\x1a\x29\x0a\x66\x4d\x3a\xf7\x42\x8b\xec\x55\x2d\xb4\x88\xe8\x09\x80\x40\x97\xcb\x25\x88\x34\x02\x31\xea\x28\x14\x17\xb8\xc8\xa2\xd0\x1a\x9c\x0a\x10\x8c\xc7\x0b\x2b\x85\xc5\x98\x26\x20\x53\xe9\xe5\x48\x9b\x3b\xbc\xf8\x8b\x97\xa1\x99\xfa\xa4\x74\xb2\x15\x71\xe3\x49\xa1\x4d\x32\x73\xeb\x63\x0a\xb0\xb8\xe7\x41\xc8\x4b\x1e\x6d\x72\x64\xb9\xe8\x7b\x34\xc5\x5e\x88\x61\x10\x3e\x4c\xdf\xce\xd2\xfa\xf6\x28\xb0\x37\x6e\x1c\x2d\xf4\xbe\x50\xb6\x93\xec\x3b\x76\x14\x1a\xd2\x24\x4d\x07\x8e\x8a\x2d\xad\x16\x8a\xbe\x2d\xea\x35\xde\x0e\x29\x64\x21\x45\xda\x1a\x00\xa4\x2f\x10\xf5\x89\xd1\x5f\x0f\x04\xef\x69\xa1\xf2\x53\x7f\xcd\x38\xd8\xcb\x5a\x0c\xf0\xc8\x95\x01\xf5\x22\x79\xd1\x33\xf1\xab\xb0\x94\x07\xeb\xb4\x58\x85\x39\xdd\xf2\x16\xba\x81\x60\x5f\xac\xa0\x55\xea\x25\x1e\xae\x96\x55\xb2\xce\x48\xa0\xba\xf2\x5c\xe8\x8c\x5e\xea\xe7\x49\xab\x10\xcb\xa6\x53\x32\xe0\xcc\x5a\x27\xcf\x4c\xa7\xc3\x91\x73\xc1\xd7\x84\xc2\xea\x93\x77\x8b\xaf\xe6\xeb\x25\x95\x46\x5e\xd6\x61\x54\x2a\x1e\xd5\x61\xe0\x0f\xad\xa0\x78\x34\xcc\x80\x26\xbc\xba\x45\x09\x62\x55\x7d\x0a\xba\x46\x21\xd5\xac\x83\xa3\x83\xde\xc4\x2c\xf4\xfe\x9a\x1a\xb0\xba\xa5\x53\xf8\x2c\xa5\x22\x0f\x49\x33\xb8\x60\xa1\x34\x19\x79\x4b\x69\xaa\x72\xea\x2b\x9e\x99\x29\xf5\x7d\x98\x6c\xca\xb8\x71\x61\x56\xee\x3a\xaa\xc3\x5e\x07\x08\xf0\x95\xbb\x8a\xea\x62\x58\x7a\xe1\xe3\xcb\x56\x5d\xde\x3a\x81\xa9\xfe\x80\x32\xcc\x19\x73\x40\x55\x15\x89\x43\xed\xdf\x5a\xeb\x6d\xcb\x3c\xa7\x56\x11\x0e\x35\xa3\xa3\x16\x28\xbb\xa4\x15\x77\x5d\xf1\xe4\xf3\x08\x1f\xcc\x9e\x59\x95\xe4\x7e\x98\xbb\xf4\xac\xc5\xf7\x11\x7e\xb9\x4e\xfe\xf2\xbc\xe6\x11\x7e\x91\xb2\x3f\x97\xd7\x47\xf8\xe3\x6e\xf7\x0f\xf8\xe7\xf1\xe3\xdc\xf9\xf8\x71\xcf\x27\xbe\x5b\x0b\xf8\xd2\xb2\x5f\x8c\x43\x6e\x4c\x78\x92\xba\x06\xa0\xca\x6a\xcb\x2e\x3d\x7e\xdc\xe2\x22\xd4\xc3\x65\xd0\xe4\x40\xd8\x32\x50\x48\xf5\xcd\x74\x87\x22\x96\x77\x97\xdc\xe9\x8b\xc0\x4c\x04\xf0\x24\xf8\xbb\xec\xab\xfb\x82\x7a\x33\xf1\xa2\xef\x2f\x90\x57\x28\xe2\xe1\x2b\xb7\x20\x26\x6f\x77\x1c\x88\xf7\xb2\xef\x29\xbc\x3c\x90\x7c\x54\xed\x48\xcd\xcf\x10\xbd\x01\x96\x9c\x01\x35\x60\x89\x50\x59\xb2\x97\x08\x94\x37\x77\x4e\x40\x87\x8f\x8a\x52\x38\xc5\x83\x52\xdd\xa5\x80\x2b\xa7\xa0\xac\x71\xbf\x90\xaf\x6e\xa1\x27\xde\xe0\x06\x6a\xf0\x9f\x92\x24\xe7\xbf\xa6\x56\xfe\x6b\xfe\x70\x19\x7a\x3a\x2c\x33\xf2\xd1\x23\x72\x35\x0c\x4d\x5b\xd8\x55\x48\x9c\x22\xf6\x62\x5d\x91\xb8\xd5\x43\x91\x29\x0b\x23\x09\x79\xb5\xfb\xb9\x7f\x1c\x36\x0f\xfe\xb8\xcd\x41\x39\xe8\x8d\x12\x54\xcd\xad\xbb\xdc\x30\x6b\xf9\x71\x5b\x43\x99\x32\x21\x29\x7a\x86\x4d\x20\xfe\x52\xda\x21\x42\x79\x06\x24\x28\x44\xbc\x99\x07\x04\x9f\x43\x94\xa7\xf2\x7e\xa0\xb9\xa3\xdc\x23\xea\x5b\x74\x67\xe0\x18\x44\xcf\xa6\x91\x9b\x2d\x93\x0c\xb5\x95\xc0\xba\xc7\x13\x8a\x8b\xee\x72\x82\x90\x57\xc7\xd3\xbb\x06\x1a\x54\x9f\xb2\x17\xfb\x54\x84\x5c\x20\x56\x3a\x87\xd7\x5b\x79\x7f\xdc\x71\x22\xdd\xd0\x4e\x9b\x44\x32\x85\x52\x1c\x52\x2d\x77\x18\x29\xc5\xb7\x2a\xe0\x2c\x79\x23\x4e\x4f\x3c\xae\xc4\xc0\x43\x11\x08\xe7\x27\xa6\x8a\x0c\xae\x2d\x70\x7e\xb0\x59\x5e\x43\x0a\x46\xb9\xa7\xfb\x71\x79\x43\x49\x32\xf1\x70\x9f\xb7\xb1\x46\x60\x5c\x35\xf4\xd7\xf5\x23\x94\x95\x0e\xa6\xa4\xb5\x6b\x7a\x21\xf1\xc7\xe5\xec\xb8\x81\xe4\x0f\x1a\x4c\xfe\xb0\x5a\x80\x65\x8e\xfc\xe3\x8a\xc4\x18\x09\x2a\x6c\x50\xb9\xa1\x35\xdc\x22\x04\x50\x45\x0d\x5a\x21\x1a\xe7\xc1\x47\x44\x88\x1f\xf7\xf1\x11\xa5\xc6\x35\xfd\x8b\xec\xf8\x3e\x25\x8f\xbf\xf6\x5a\xe2\x8f\xfb\x6a\x33\xfd\xb2\xd3\x2f\xe4\xb7\x1f\xb4\x97\x4b\xab\xc9\xf5\x41\x71\x5d\x5f\x17\xc5\xc5\x1f\xa2\xf8\x07\xe5\x0f\x8a\x68\xff\x59\x2c\xfe\xfe\x0e\x0e\x6d\xa9\x8f\x1f\xef\xfa\x05\x6d\x8a\x2f\x06\xe9\xf1\xe3\x9f\x3e\x3e\x7e\xbc\x3f\x59\x41\x67\xe6\xb9\x3f\xf0\x6f\x6e\x29\xfe\xa7\x25\xed\xed\x05\xab\x0f\x3f\xb2\x49\x0c\x40\x9f\x16\x03\x6e\xc7\xe3\xc7\xc7\xe8\x9e\x0e\x34\x3c\x85\x58\x43\x61\xdc\xbf\xc4\x31\x47\x50\x2f\x51\x9f\x12\x9f\x18\x2f\xc9\x0a\x46\xe8\x71\xfc\xe1\x56\xae\x15\xfe\x78\x72\xcc\x0e\x84\xc6\x56\x13\xba\x06\x9f\x12\x6b\xd0\xe9\xf2\x3a\x12\x09\x96\xf5\xff\x6b\x21\x4b\x64\xd9\x8b\xfc\xe4\xc6\xe7\xf3\x93\x38\x8a\xd9\xfb\x15\xe4\x08\x48\x6e\x0e\x50\x77\xb1\xba\x73\xa9\xe9\x66\x97\xa2\xe8\xed\xc5\x22\x3d\xc9\x71\x62\xb3\x79\x91\x11\x02\xaa\x8d\xd8\x2e\x45\x2e\x69\xfb\xc1\x5b\x79\x3f\x9e\xeb\xa6\x2f\xf5\x49\xb4\x03\x20\x0c\xd6\xab\x0e\x8a\x1c\x6f\xfb\xf1\x55\xb6\xb0\xfc\xf8\x7a\x52\x86\x79\x41\x48\xb5\x22\xa0\x6a\x95\x0c\x68\x03\x45\x6e\x56\xa4\xb1\x3d\x7e\xfc\x17\x25\xfa\xf5\x68\xa8\x4c\x35\x3f\xf5\xda\x15\x03\x97\x20\xa3\x5f\x49\x88\xd6\xc3\xed\xf1\x83\x6e\x2e\x38\x7a\xfc\x70\x39\x86\x27\x17\x6a\xe0\x81\x8e\x09\xd4\xd7\xeb\x7a\xfc\x84\x8d\xff\x9b\xcf\x87\xe3\x24\x86\x6d\x43\xb4\xc2\x56\xb8\xc2\x87\x18\xa1\xc8\xa8\x15\x22\xcf\x2f\x7e\x74\xab\xc6\x4f\xc0\x26\xf7\x9f\x70\xf0\x3f\x6c\x6e\x0f\x0c\xb8\x78\xc3\x71\x4a\x2a\xb9\x08\x42\xda\x78\x18\x0c\xda\xf5\x84\xb4\x91\xa8\x2c\x27\x29\xa8\x00\x8d\xd5\x1f\x8e\x27\x0e\x4b\xfe\x84\x04\xe7\xdc\x95\x84\x94\xc3\x1e\xca\x1b\x86\xbf\x8f\x9f\x70\x06\xee\x96\x1e\x3f\xa1\x14\xee\x1b\x42\x4d\x5c\x76\xf8\x1e\xf4\x6c\x9c\x80\xf6\x13\x6a\x61\x1f\x3f\x6c\xeb\xe3\x1f\x3f\xe1\x8f\xbb\x4e\x7a\xfc\x10\x4e\xb0\x3e\x7e\xe8\xc9\xff\x27\x67\x1c\x49\xce\x80\x5c\xa0\xc8\x06\x7a\xbe\xe5\xf8\xfb\x0f\x3d\xa3\x2f\x5a\x3b\x89\x47\x77\x92\x11\x1a\x44\xba\x4d\x5a\x76\x82\xca\xe3\xa2\xf0\x3a\xae\xd1\x42\xba\xb9\x19\x10\xf5\x99\xfa\xa6\x15\x86\xb2\x0c\xf9\x43\xeb\xfb\x6c\x1c\x9a\xe7\x3f\x6b\xe0\xb8\x1c\x13\x64\x1e\x0f\x61\x12\xf5\x77\x82\x12\x84\x70\x13\x02\x59\xdc\xce\x4e\x43\x92\x48\x4b\x5d\x04\xb9\x40\xab\xa8\xd6\xa4\x81\xc5\x86\xf6\xf8\x14\xe4\xb2\x39\x00\xa9\x54\x40\x94\x8f\x87\x6c\x2f\xfb\xa1\x1f\xe2\xca\x44\x08\x69\xf7\xd2\x24\xb0\x0e\xce\xaa\x34\x0d\xda\xab\x93\xa4\xb3\xfc\x41\xb7\x9e\x83\x39\x0d\x3e\x46\x49\xb6\xd4\x24\x8a\xd6\x3a\x88\x2b\x0b\x32\x02\xe7\x13\x1f\x3f\x94\x57\xee\x5e\x28\x27\xc7\x72\x16\x65\x3a\x39\xaf\x33\x77\x59\x54\x78\x8a\xf1\x43\x78\x50\xe1\x87\x0a\x1a\x3e\xc1\x1b\xbc\x3c\xf0\x43\x2c\xe2\x62\x55\x5d\x20\x6b\x71\xb3\xa5\x2a\xc1\x6a\x53\xa4\xc6\xf5\x94\x1a\xa7\xa6\x21\xda\x88\x41\xcb\x49\xf4\x99\xfa\xe2\x0d\xa2\xfa\x1a\xac\x1d\xda\xb8\x64\xac\x57\x3f\x50\x9a\xa0\x43\x07\x1d\xbc\x40\x2c\x77\x02\x73\xba\x9a\x78\xa8\x79\xf9\xd1\x33\x2e\x82\x34\x87\xbe\xfc\xe7\x78\xb1\xfe\x05\x71\xfb\x87\x2e\x5b\xa0\xfe\xa1\x6b\xaa\xaf\x57\xef\x58\xe9\xca\x3c\x47\xfe\xc9\x8f\x9f\xc6\x85\xd8\x9e\x4f\x1e\x3d\x1b\x77\xcd\xed\x19\x64\xb7\xb7\xa1\x4b\x51\x0d\x34\x50\x12\xe8\xd5\x1a\x4b\x79\x6d\xe5\xbf\xc3\x32\x3f\x03\x68\x6d\x5e\xd4\x2c\x44\x9a\x88\x6d\x4a\xc4\x71\x6b\xe9\x31\x05\xa1\xca\xe1\x0c\xb6\x25\xf0\x76\x20\xfb\xa7\xad\x04\x65\x0b\x20\xc8\xf0\xb6\xd2\xce\x49\xd8\xf8\xff\x6a\x91\xc9\xe6\x73\x72\xad\x02\x86\x54\x40\x51\xe0\x42\x39\x45\x9b\x0c\x02\x6d\xeb\xf2\x65\xdb\xb8\x1a\x35\x48\x03\xac\x66\x10\xad\x8a\xd6\x8f\xb4\x1f\x51\x90\x53\x3f\x0d\xa5\x0f\x5a\x41\xc5\xce\x8e\x77\x94\x7f\x5a\xe4\x01\xb9\x1d\x4f\xab\x76\x80\x19\x94\xa0\x36\xee\x42\x1a\xde\x4e\x62\x62\x61\x1d\xa7\x2e\xad\x33\xcc\xe8\x67\x5a\x5a\xe8\xd1\xf7\x6f\x02\x48\x66\x25\x1e\x1f\x1b\xee\x6e\x10\xb2\x5d\x1c\xa5\x14\xe4\xe0\x9e\x20\x54\x9b\xc6\x42\x3c\xfb\x99\xe0\x1f\x26\x18\x20\x5e\x75\xe5\x44\x26\xa3\x00\x87\x3b\x2a\x66\x4b\x2a\xd7\xb7\xc4\xad\xa5\x25\x16\x9b\x1a\x4b\x36\xed\x44\x54\xb2\x83\x82\x53\x5a\x28\x9f\xec\xaa\xa8\x12\xd5\xcc\x23\x59\xcb\x3c\xed\xc5\x91\x28\x61\x6c\x13\x35\x98\x53\x89\x3d\x33\x01\x0e\x16\x51\x37\x50\x60\x72\xbd\x0f\xd3\x2f\x09\xe2\xac\x2a\xd5\xb5\x85\xf2\x29\x18\xd1\x97\x8d\x44\x4a\xbb\x86\xd6\x3c\x5c\xee\x65\x6b\x27\xc6\xe6\x81\x26\x6b\x84\x64\x14\x79\x67\x78\x72\x30\x3d\x3b\xac\xbc\x75\x69\xc2\x69\x98\x6a\x01\x65\x80\x61\xbd\x61\xda\xbb\x68\x02\x3f\x3e\x85\xee\x0b\x18\x09\xe0\xb7\xba\xbe\xcb\x6d\x7f\xec\xee\xb1\xbb\x27\xff\x9d\x40\x17\x85\x64\xb7\xd1\x05\x68\x5a\x04\x6b\x6d\x0f\x20\x7f\x6d\x79\x33\xe2\xb9\x3a\x1b\xaf\xcc\xbc\xf8\xff\x0a\x97\x7f\x33\xa8\x2e\x3d\x76\xb7\x11\x2b\xed\xb1\xbb\x77\x83\xcd\xe0\x38\xd8\xc0\x76\x43\x84\x82\xe2\x37\xe0\x73\x87\x5c\xf9\x77\x17\x12\x14\x16\xc9\x99\xe2\x3a\x89\x12\x0a\x33\x45\x2c\x17\x6c\x63\x57\xa4\x8e\x8a\x6e\xbd\xdb\xdd\x8f\x3f\x5b\x7d\xec\x92\xbe\xdd\x9d\x1c\x9f\xdd\x1f\x94\x00\x02\x94\x52\x75\xcd\x8f\xa7\xd2\xbb\x8b\xee\x80\x9a\x96\x37\x79\xa0\xfa\x26\x0e\x31\x82\xf3\x61\xd5\x7d\x20\xcc\x1c\x0e\x24\xb1\xf4\xc9\x40\x53\x13\x03\x14\xe4\x41\x44\x6a\x63\x78\x39\x24\x22\x5a\x6a\x62\x38\x39\xa7\xe2\x11\xe0\x07\xa5\x8d\xc9\xe9\x44\xdd\x41\x90\xd2\x58\xe4\xb2\x83\x8e\x10\x54\xf5\x87\x64\xe1\xe1\x16\xf1\xf0\x90\xb2\xe2\x89\x1d\x13\x68\xf9\xe8\xda\x8e\xd2\x76\x47\x80\xb2\xbb\x3f\x98\x9c\x12\xe0\x71\x5e\x51\x9d\x17\xef\xd9\x1e\xca\x29\xb9\xe3\x5a\x90\xf9\x08\x38\x79\x1f\xdf\x3c\x4b\xdc\x1d\x5c\xa5\xcd\x89\xca\x32\x9b\x81\x20\x46\x3f\x1c\x0e\xbe\xae\xee\x2e\x71\xfc\x53\x45\xe6\x24\x16\x54\x40\xdf\x3c\xcb\x62\xf4\xc7\x35\x83\x38\x9f\x36\x01\x49\x89\x4d\xda\x94\x43\xfc\x80\xfe\xba\x3e\x2b\xa7\x8f\xf1\xf0\x72\x56\x7a\x77\xc8\xce\x93\x76\xa8\x70\x72\x22\x37\xcf\xb6\x0b\xe1\xe8\x67\xf7\xd4\x1c\xcc\xba\xde\xc2\x68\x6f\x11\x34\xad\x0e\x54\x6c\xc2\x8f\x8c\x22\xce\x87\x5b\xdf\x2e\x3b\xb4\x8a\x4c\x8f\x5d\x53\x8e\xdb\xa8\x77\x97\x4f\x07\x92\x03\xd4\x56\x3c\xfc\x2b\xf0\x07\x8a\x54\xff\x7c\xc9\x52\x2f\x90\x6d\x91\x07\x13\xaf\x03\xf1\x07\xec\xba\x07\x0e\x9f\x09\x96\x17\xb9\x01\x4b\xd7\xac\xc8\x32\x06\x17\x6a\x24\xbb\x2b\x3c\xdc\xee\x8e\x05\x59\x56\x91\xd8\xf2\x0e\x59\xd8\x23\x08\x9f\x5b\x65\x5b\x1c\xb9\xea\x9e\x4e\x82\xac\xee\x29\x8f\x6a\x33\xd4\xaa\x50\x1d\x36\xf1\x00\x5c\x66\x2d\x5e\xa5\x2a\xf8\x43\x00\xd5\xf5\x05\x59\x66\x38\xb2\x41\x5c\x57\x4a\x82\x16\xe9\x2c\xea\x02\xfb\x6f\x1c\xc0\x04\x0a\x05\x79\x5c\xdf\xb4\x7a\xa1\x31\xec\xa8\x21\x5a\xd8\xf5\x5a\x03\x37\xab\xfa\xe7\xd3\x8f\x2c\x4c\xed\xae\x2d\x1c\xff\x86\x2c\xe7\x4e\x7c\x77\x1f\xf6\xe5\x03\xc3\x0b\x0d\xe8\xe2\x22\xfa\x73\xcb\x1b\x95\xe2\xcf\xd5\xb2\xb3\xbd\x3f\x2e\xba\xe7\x63\x5f\x1e\xfb\xc2\x6d\xc5\x3b\xfe\xd7\xc7\xee\x9f\xdc\x1d\xfa\x27\xd7\x57\xff\xc4\x00\xba\xfb\x67\xe4\xec\xf4\x8b\x5c\x9c\xc2\xa0\x5c\x8f\xdd\xaf\xfc\x5f\x61\xc4\x12\x88\xf7\x8f\xdd\xfb\x17\x2b\xec\x88\xcb\xdf\xfb\xe8\x36\x68\xc7\x27\xc1\x7b\x01\x3c\xbe\x30\x2e\x04\x8a\xda\xe8\x7d\x12\xdf\xbd\x5c\x7c\xa3\x97\xa2\x08\x91\xbe\xcc\xfb\x53\xad\x9c\x3c\xa9\x65\x5a\x58\x12\xdf\xbd\x2f\x6f\x4a\x1c\x1f\x68\x73\x1c\xac\x1f\xf6\x6c\x1f\xc2\xc9\xee\xdf\x3c\xc7\x62\x3d\xae\x00\xd6\x68\x7c\xa8\x91\x38\xf9\xd1\x3f\x3d\xc8\x0e\x95\xc3\x8b\x11\xce\x31\x21\x63\x82\xb2\xc0\x64\x7c\xf7\x91\xb8\x40\x7c\x94\x8d\x01\xbb\x8f\x70\x70\x62\x66\xc8\x20\xc0\xb3\x13\x46\x92\xce\x08\x4f\x24\xd0\xf8\xe1\x6a\xeb\x0f\x76\xc4\x20\xf1\xe0\xe1\x13\x17\x28\xae\x6a\x81\xca\x63\xf4\xce\xd9\x11\x41\x24\xed\x09\x86\x63\x18\xf0\x89\x94\x72\x63\xf5\xa9\x46\x2e\x8d\xc7\xee\xcf\xf0\xd8\x7d\x96\x27\xf3\x19\x54\x17\x37\xae\x86\xd8\x4d\xb4\x54\xa9\x9d\xca\x48\x12\x32\xbe\xa2\x29\xed\x1d\x0d\xd8\x1a\xd4\x13\x5a\x28\x35\xc3\x5c\x59\x15\xa0\x93\x00\x1e\xc0\x4b\x5a\x15\x67\x0d\x02\xcd\xb8\x1a\xa3\x03\x49\xc7\x5d\xbf\x07\x68\x91\x7b\x42\x41\xff\xe3\xf3\x53\x32\x23\xeb\x4a\xdc\xee\xf3\xf2\x0e\x28\xf8\x2c\x4a\x7b\xbd\x22\xf4\x0f\x5f\x94\xa0\x13\xc5\xa1\x0b\x26\x48\x99\x64\x6d\x4e\x6a\x94\x08\x46\x04\x65\x43\xc1\x64\xcc\x29\x19\x48\xfc\x8b\x37\x72\xf8\x0c\xfd\x6b\x43\x8a\x4b\xcd\xf0\xac\xa2\x0c\xeb\xf2\x6e\x5c\xb6\x55\x1c\xd7\xa9\xbc\x2a\xbd\xfd\x2f\x15\xd1\xd6\xfe\xc4\x6b\x2a\x98\x60\x34\x64\xd4\xb2\x22\xb5\x6b\x36\x7f\xc3\x01\x8d\x1a\x8d\xac\x3c\x43\x1b\x10\xbd\x83\xaf\x0d\xbd\xa0\xff\x38\x8c\x2a\xfe\x83\xe8\x7d\xa5\x62\xfe\x3e\x76\x24\xe4\x7a\x12\xc6\x6b\x7f\xbd\x09\xde\x5d\xd2\x36\xaf\x84\xf1\x43\x28\xfb\x76\x9d\x4d\xf6\xb7\xf2\x44\x3c\x52\x05\xd5\x58\x5f\x7a\x9d\xc1\xee\xaf\xaf\x83\xaf\x5f\x62\x4f\x5f\xc7\xc1\x61\xbe\x72\xe1\x3c\xd9\x1e\xfb\xf6\x7a\xec\x5b\x7e\xec\xdc\x2f\xbf\xdd\x0a\x91\xe1\x0d\x21\x84\xd5\xc2\x04\xb2\xc2\xbb\x0b\x0b\x6f\x17\x0b\x2c\x1f\x85\x13\xf1\x76\xa2\xa8\x19\x06\xab\xb7\x8c\xc5\x6f\x97\x8a\x3b\x38\xc5\x6f\x97\xc5\x93\x0a\x25\xc3\xfb\x8b\xbb\xb9\xb7\x87\x03\xbf\x86\x8f\x57\x1a\xc4\xab\xb0\x1e\xae\x6e\x88\x0f\xfd\xb0\x9d\x56\xf8\xff\xd8\x83\x63\x6f\x64\x7c\x0e\xae\x6d\xef\xc7\x1e\x9e\x4f\xce\xaa\xf0\x7c\xb6\xfa\x67\x34\x85\x9d\x21\xf4\x43\xe5\xe1\x96\x29\x46\x86\x20\xfd\x67\x78\x12\x77\x0d\x61\xd9\x9f\x8e\xbb\x55\x80\x18\x05\x48\x29\x84\x65\x5f\xe9\x9b\x00\xe0\x72\xd9\xe9\xf5\x02\x2d\x6f\xf7\x15\x20\x0f\x36\x02\xe2\xfe\x2a\x46\x15\x82\x50\x58\x76\xae\x74\x61\xd9\xbf\x6f\xf4\xbf\x01\x8b\xf8\x4c\xd0\x5c\x98\xea\xb2\x3d\x63\x24\x62\xe5\xce\x26\xac\xeb\xc5\x6a\xc2\xaa\xb3\x00\x43\xfe\x52\xf2\x25\x1e\xc7\xc3\x8a\x99\xff\x8e\xc6\x16\x7c\x7c\x3a\x2e\x9f\x00\xcb\xbe\xf8\xb8\xb5\xb7\xc2\x8c\x46\xc5\x25\x11\x76\x0a\xac\xb6\x83\xfb\x13\xc4\x34\xae\xb2\x74\xb8\x87\xe8\xf3\x06\xc2\xe1\xc4\xf0\xc3\x6a\x5c\x79\x30\x11\x9a\x01\x02\x72\x0c\x34\xa4\x14\x16\x61\xa4\xb3\x65\xb4\x87\x64\x56\x48\x28\xfc\x26\x28\x8e\x67\x80\xf0\x10\x9f\xdb\x85\xb6\x15\x60\x71\x91\x72\x10\xc3\xa5\x75\x74\x2d\x51\xd0\x7a\x25\x01\x9b\x6b\xc8\xb7\x48\xb8\x6e\xcf\xd0\x01\xf0\xf6\x19\x55\x21\xd2\x5b\x34\x64\x6d\x83\x11\x3e\xff\x0a\x90\x72\x8b\x14\xdb\xe1\xc5\x03\xb1\x7c\xf8\xcd\x8d\x10\xb5\xdb\x14\xa4\xd1\x3e\x48\x0d\x4f\x97\x8b\x5f\x04\x52\x28\xaa\x49\x2d\x49\x6a\xe4\x0b\x29\xa3\x2a\x59\x4d\x1f\x4d\xf0\x87\x78\xf8\x09\x91\xbe\xae\x02\x88\x22\x21\x55\x49\x76\x95\x5a\x72\x3c\x7d\x16\x89\x38\x1c\x98\xe5\x04\xe9\x51\x82\x4c\x1a\x90\x76\x96\x63\x42\x72\xbe\xd4\xb7\xc7\x40\x12\x12\x44\xa4\x90\x78\x46\x04\xca\x13\x26\xac\x90\x6d\x2e\x57\xa4\xd7\x18\x8c\xf7\x21\xad\x6f\xcf\x26\xab\x56\xc8\xb4\xfe\x70\x1b\x0d\x09\x27\xf9\x40\x43\x37\x12\xc9\x23\xa4\x61\x39\xfb\x1b\x16\x09\x41\xf2\x3a\x61\x52\x02\x82\x47\xc5\x15\xea\x36\x80\x1b\x27\x21\x0d\xfe\x02\xab\x83\x12\xa4\x53\x75\x5f\x82\x5c\x09\x05\x3c\x12\xed\x7b\x00\xb3\xf7\x77\xcf\x6f\x5e\xeb\xf0\xa7\x78\x04\xa4\xdd\xbb\x26\x73\xc3\xf7\x0c\x00\x29\xb7\xb4\x2d\xd8\xd4\x00\x84\x46\x9e\x36\x4c\xfa\x42\xda\xb4\x15\x08\x90\x30\x37\x5c\xf2\xbb\xcb\x1d\x93\xc5\xf2\x69\x83\x1c\xc3\xb4\x67\xec\x76\xb8\x5d\x9d\x1c\xae\x87\x7e\x4a\x11\x6e\x96\xa9\x5b\x49\x90\xb3\x42\xda\xbe\xea\xb1\xd8\xd8\xdd\x0f\x35\x00\xd4\xcf\x94\x82\x34\x4f\x6e\x81\x52\x57\x08\xaa\x79\x54\x30\xba\x84\x54\x64\x8d\x81\xe7\x65\x26\x7d\x04\x4a\x64\xa8\xb0\x7b\xe3\xd8\xa1\xf6\x46\x32\x8f\x09\xf9\xc9\xfa\x39\x6c\x98\xd1\x85\xbc\x43\x11\x0f\x71\x56\x93\xe9\x29\x6c\x59\xde\x5f\x87\x05\xca\x3d\x64\x8c\x98\xa1\xc0\x04\x79\x56\xde\x48\x56\x39\x90\x31\xe3\x1d\x74\xc1\xba\x7e\xc0\x0c\x7a\x53\xf5\x06\xa5\x57\xea\xc7\xa1\x52\x97\x2f\x3a\x77\xd6\xab\xee\x78\xb2\x88\xc9\xf0\xe9\x38\x2b\xeb\xf2\x86\x25\x50\x38\x16\x54\xd1\xba\x80\x0f\xc7\x72\xa4\x60\x6c\xd4\xdc\xa5\xe9\x55\x9f\x36\xa1\x70\x86\x30\x78\xfe\xc5\x54\x5b\x43\xc5\xb8\x1a\x6a\x45\xec\xaa\x34\xb2\x8a\x2d\x10\xd6\xcb\xd7\x1a\xbe\x52\x74\x15\xc9\xe2\x09\x42\xf8\x72\xae\x5d\x3c\x53\x0a\x57\x78\xec\xf1\xb1\x47\xf7\xf4\x19\xdf\xee\xf6\xe8\xd2\xf6\x72\x99\x47\xb2\xc8\x53\x89\x04\x8a\x0e\x3e\xba\x5f\xee\x55\xa2\x77\x1b\x67\x64\xf4\xcf\x12\x3c\xd2\x1b\xfd\xf9\xae\x20\x2c\xff\x61\xb6\x33\xf0\xc2\x0c\xe6\x62\x91\x0b\x12\xa4\x9c\x7a\xeb\xeb\xce\x93\x2d\x16\xbb\xa2\xca\xe3\xb2\x0c\x10\x89\x5e\x50\xeb\xf2\x46\xc1\xc6\x56\xb8\x7f\x89\x18\x72\x23\x24\x8e\xf4\xd8\x8f\xc7\x0e\x11\x43\xfa\xc7\xf4\xd8\x13\x86\xd6\xe4\x64\xfc\x14\x7a\x09\xf8\xe2\x8d\xc6\x3d\x71\xc1\x24\x87\x3b\x99\xf7\xe4\x4e\x28\xa7\xd8\x3e\x8b\x3a\x3f\xb1\x26\xbf\x27\x07\x6d\x16\x16\x58\x15\x9f\x3e\x3d\x77\x93\xfb\xc2\x13\xef\xfa\x95\x08\x60\xe0\x99\x5f\x76\xff\xcc\x3c\xca\x24\x1e\xcc\x92\xf7\x0b\x02\xf3\x5e\x24\xad\xe4\xf1\xed\x89\xe9\xe9\x56\xa5\x49\x68\xf0\x0b\x6c\xb0\x74\xc0\xad\xc9\x92\x85\xcd\x07\x42\xb0\xbc\xaa\x10\x4d\x12\xd0\x1a\x76\x42\xf5\x4e\x72\x70\x07\x14\x35\x26\x85\xfa\xf5\x48\x53\xf8\xb0\x58\x9c\xb8\x8f\x4e\xf8\x0c\x23\xce\xe8\xf9\x94\x48\xd1\x93\x25\x5e\x1e\x16\x12\x2d\xbb\x7b\x52\xab\x02\xc5\x74\xd9\xbb\x86\x65\x2b\x21\xb2\x14\xd5\x3d\x27\x95\x32\x60\x01\x86\x9d\xba\x65\x27\x01\x55\xcd\x05\xaa\x99\xd4\x4c\xe2\x4a\xf6\xf1\x4e\xe1\x06\xa0\xe5\x41\x15\x2b\xf8\x7b\xd2\xe0\xbf\x23\xdf\x19\x5b\x83\x4d\xf4\xf5\xa2\xc2\xc7\xaf\x1d\x33\x60\xcc\xd3\xa3\x9b\x4d\x9d\x2f\x19\xba\x99\x71\x3c\x43\xda\x30\xa7\x4f\x6d\x41\x2f\x27\x14\x1f\xa7\x27\x5c\x8c\xd1\x82\x01\xe6\xd0\x9b\xdc\xb8\xb0\xa7\x06\x2e\x0b\xc7\x33\x4e\xc2\x6a\x15\x71\xa1\x73\x39\xd0\x93\xe2\xfa\xd8\x69\x95\x1e\x99\x56\xda\xda\x63\x27\xae\x61\xf4\xaa\x0e\x2a\x24\x54\xda\x5c\x78\xec\xf4\x8e\x50\xb2\x7b\x32\x17\x22\xa5\x6b\x79\x73\xcb\x23\x8c\x82\x84\x35\x2b\xa6\xf4\xd8\x09\x21\xc5\x90\x30\xfd\xa7\xb8\xbf\xe9\x8f\x29\x1b\xf1\x20\xb9\x3f\x76\xe2\x21\x9d\x92\x03\x64\xa1\x90\xd2\x46\x89\xbd\x4e\xba\x27\x8c\x91\x0e\x82\x94\xaa\x93\x45\x35\xa2\x95\xbb\x78\xa2\x1d\x8a\x7b\xb6\xcc\x7d\x14\x51\x76\x3f\x68\xc9\x5c\x13\xe8\xf4\x5c\x7f\xe9\xc4\x5d\xcf\x0c\xde\xac\xf0\x80\x47\xe7\x0f\x47\x12\xeb\x54\xc4\x61\x64\xb7\xfe\x70\xa8\xdc\x13\x52\x7e\x89\x88\x4c\x98\x5e\x52\x96\x48\xca\x52\x12\x77\x1a\x84\x6e\x85\x0a\xc7\xa0\x8a\x82\x32\xa7\x5a\xdd\x13\x16\xea\x97\x85\x0a\x10\xf6\xb5\xc5\xf0\x0c\x6e\x61\x47\x0d\x13\x41\x6a\x67\x66\xd1\x93\x5a\x7e\x3a\x6e\x34\xd4\xb0\x34\x47\xad\xc0\xd7\xef\x1b\x99\xfd\x55\x8f\xcf\xe5\xb1\xe7\xc7\x9e\x1d\xfb\x2a\x23\x72\x76\x01\x2a\x26\xf2\xd9\xed\xf4\xc5\x12\x6f\x76\x87\xc7\x04\x0e\x27\x10\xf7\x8c\x03\x98\x7b\x76\xec\x3d\x07\x9c\xfd\x81\x79\x59\xf6\xa7\xb0\x4d\x66\x0b\x39\xf8\xad\x9c\x81\x8b\x3d\x87\x08\x55\xc4\xaf\x0c\x6b\xe1\xd3\x1e\x7b\xe6\xf4\x67\x3a\x3c\x8a\x53\x72\x05\x7b\x3b\xf7\x4c\x5c\x28\x99\x6d\x36\x69\x8a\xb9\x1d\xb8\x0c\x97\x41\x47\x70\x70\x9d\x10\x12\x4b\x78\xec\xf5\xb1\x37\x19\xaa\xda\xca\xa9\x6f\x6b\x63\xe5\x8f\x55\xff\x7e\xec\x4d\x57\x53\xda\xc6\xf1\x6a\x3b\xcf\xa9\x1a\xd7\xa9\x16\x39\xad\x9c\x95\xec\x8a\x23\xfa\x84\x2c\xda\xd2\x8a\x75\x5e\x46\x7f\x18\xd0\x2c\x7f\x5b\x5e\xde\xae\x12\x9e\xbe\xdf\x1b\x47\x87\x6b\x8c\xd4\x95\x96\x0b\x32\xb6\x65\xae\xef\x2d\xab\x50\xd4\x32\xcf\xc4\xa4\x40\xda\xc7\x95\xbf\xc7\xfe\x41\x37\xf2\x75\x0b\x97\xff\xd7\xa5\x3f\x90\x5c\xb9\x32\x7d\x5d\x79\x07\xca\xa8\x4e\x5f\xcf\xb1\xbc\xd0\x7d\x62\x45\xec\x72\x32\xd9\xbf\x78\x5a\x77\xe9\xc2\xf6\xc5\xed\xfa\x8a\x41\xd4\x04\xf5\x97\x55\x62\x9d\xc3\x24\xbb\xeb\x7c\xb3\xc4\x16\x83\x44\x0b\x2c\x00\x3c\xac\xc8\xfa\xab\x3d\xe2\x23\xba\x47\x74\xd8\x02\x15\xdd\x93\xff\x8e\x27\xe8\xd1\x3d\x57\x97\x04\xf8\x97\xde\x79\xc5\x38\x8a\x2a\xd6\x65\xff\x81\x00\xb1\x3b\xbd\x36\x63\x5c\xd7\xaf\x97\xa1\xbf\xc9\x46\xf5\x8f\xbe\x81\x55\xc0\x64\x3a\x0e\x84\x82\xfb\x78\xdc\xc8\x37\x99\x8b\xce\xe4\x42\xa2\xa1\x49\x91\xe3\x63\xc1\xa5\xc1\x5c\x02\x55\x20\x17\x9c\x85\xf6\x6f\x8b\xcc\xb5\xac\x64\xb2\xd9\xcc\x6a\xcb\x9a\x2c\x92\x8f\x53\xd1\x3d\xb3\x5b\x09\xb3\x48\xc6\x5e\xb4\xc2\x0a\x42\x4a\x25\x6a\x2d\x6b\xb6\x5e\x19\x3b\x03\x3b\xc2\xba\x55\xe7\x68\xa5\xc4\xbe\x2c\xfc\xc7\x4b\x66\x6c\x75\xf1\x50\x70\x5e\x07\xd7\xb4\x88\x1c\xcc\x30\x8b\x3a\xb2\xb2\x3f\xa3\x0c\x98\x9c\xd0\x8a\xc8\x2c\xfe\x6b\xee\x20\x24\x0b\x10\x4f\xdf\xbe\x80\xe4\xeb\xc0\xf7\xd8\x09\x5f\xc6\xc8\x8e\x85\xe8\xf4\x93\x68\x94\x8b\x82\x22\x57\x5d\x56\xdc\xea\x42\xe9\xe7\x85\xa2\x48\x38\x42\x0c\xc0\x35\xa5\xb0\x20\x33\x16\xd9\xa9\x1c\xb1\x19\x30\x1b\xed\x08\x96\xb3\x1d\x07\x37\x2c\x71\xcb\xc4\xc2\x56\x74\x4b\x75\xf1\xd9\x8e\x90\x04\x1f\x42\xd4\x08\xdf\xda\x14\x87\x97\xcf\xa3\xa4\x97\x4a\x4f\xb7\x84\x18\x9b\x72\x2f\x96\x20\xc5\x13\x2c\xab\x01\xc8\xa0\x02\x98\xbc\xd2\x51\xeb\x96\x4a\x67\xa6\xea\xcd\x99\xcc\x94\x04\x82\x36\xc9\xfd\xc6\x32\x1a\x68\xcf\xbf\x96\x78\xee\x1d\x1d\x17\x81\x35\x38\x2c\x84\x08\x39\x50\x75\x19\x7d\xdd\x05\x14\x60\x5b\x2c\xbc\xa5\xe8\xd6\x80\x12\x5b\xa5\x08\x56\x9e\xcc\x44\xb7\x8a\xb7\xd1\xbf\x5a\x14\x00\x27\x59\xe2\xbf\xc2\x33\xd9\x89\x06\xd0\xe0\xf4\x7a\x89\xa0\x2b\xb0\xbc\x01\x2c\x94\xcb\x64\x49\xc6\x3b\xd2\xba\x5e\x31\xec\xbe\x6b\x46\xfa\x88\xe7\x98\x42\x01\x24\xfa\x3e\xa2\xf3\x1f\xca\x54\x2d\xbb\xfc\x07\x07\x8c\x05\x48\x0e\x6d\x48\xa7\x64\xf7\xe6\x91\x5b\x12\x8f\x6d\x73\x88\x22\xa8\x06\xb4\xa9\x3d\xb3\x11\x92\x12\x4e\xc3\x96\x02\x8b\xc8\x8c\x74\xf7\x39\x23\x84\xbb\x35\xa4\x9d\x75\xde\x28\x88\xc0\xff\x65\xf4\x27\x61\x91\x4a\x38\x76\x39\x47\x17\x60\x11\x71\x08\x79\xd5\x84\xe9\x85\xfb\x0c\xde\x50\x39\x3b\x77\x0f\xe5\x95\xa5\xe1\xee\x1e\xdb\xbd\xa2\x93\xba\xbf\xfb\xf2\x66\x39\x21\xba\x9d\x9d\x48\xfe\xed\x85\x53\xca\xb3\x18\x90\xd3\x45\xa2\x3f\x68\x45\x0b\x3f\xd2\xe9\xea\xfb\x12\xf4\xa6\x67\x70\x02\xa3\xdf\x00\x39\xbe\x07\x80\x2b\x1e\x0d\xf4\x78\x42\x59\x9d\x12\x4d\x94\x3e\x87\x0a\x80\x78\x1d\xcf\x9d\xc7\x6c\x01\x09\x94\xc4\x3c\xfb\xff\x9a\xea\x14\x35\xf2\x72\xd5\x1f\x9e\x4c\x79\xe8\x95\x50\x4a\x03\x1e\x57\x7d\x1b\xb7\xf0\xb0\x2d\xd8\x6a\xf9\x61\x55\x04\xfb\x02\x4c\x66\x55\x56\xd3\x79\xc8\x81\xe9\xe8\x0e\x49\x56\x48\x46\x72\xd7\x30\xab\xfa\xee\x1c\xd0\x56\x4d\x4f\xfb\xcf\x43\xe6\x66\x11\x1f\x9e\x36\x1f\x04\x9f\x50\xd0\xcc\x98\xb8\x80\xa2\x38\x4e\x07\x27\xe7\x53\xbb\xae\xe3\xf4\x12\xfb\xd3\x67\x31\xd1\x20\x4f\xd9\x4c\xdd\x91\xfa\x4a\x6a\x4a\x38\x34\xd9\xd1\x65\x50\x06\x87\xe3\x3c\x49\x41\xf6\x62\x96\x71\x4a\x61\xe0\x4b\xe3\x53\xde\x6e\x15\xa4\x87\x1c\x0d\x4a\xed\x3e\xce\x4b\x46\x95\x43\x13\x99\x50\x89\xa5\x32\xa6\xc5\xff\x48\x32\xd2\xe2\x23\xc6\xa0\xb4\xf8\x13\xad\x37\xc9\x00\xc1\xa4\x08\x55\xe3\xaa\xed\x3c\xf5\x91\x20\x2d\x23\xab\x13\x34\x56\x77\x1c\x2e\x09\xef\x9a\x12\x0d\x60\x7d\x39\x54\xa2\xb4\xe2\x10\x30\x03\xbc\xd9\xd1\x91\x8e\xf0\xca\x24\xc1\xba\x87\x8e\xa1\x24\x2c\xad\xda\x29\xa5\xb5\xaf\x02\x81\xc1\x95\x5b\x82\xf2\xda\x81\x54\x69\xc1\xf9\xea\x50\x9b\x67\x5a\x63\xc3\xee\x3d\x86\xd2\x85\x32\xc5\xf0\xc6\x40\xfd\xc6\xe5\x47\x03\x75\xc7\xf4\x4d\x16\xa9\x2c\x23\x6e\x5a\xe5\x0a\xf8\x8e\x72\x87\x52\xc2\x69\x2d\x6f\xf3\x1f\x07\x5d\x01\x76\xf5\xb0\xf0\x0c\xfb\xad\xf6\x62\x37\xb6\x98\x31\x90\x9d\xf6\xcc\x7d\x5d\xd0\xa2\x85\xb5\xcd\x43\xe4\x4a\x5b\x50\x1a\x5d\x7b\x75\x20\x16\x37\xec\x0b\x03\xca\x6e\x13\x50\x1c\xbc\x93\x9b\xd9\x00\x8c\x54\xa3\xea\xa4\x05\xeb\x58\xe5\x1d\x4b\xf5\x93\x21\xb6\x2a\x81\x21\xd5\x04\x09\xd2\x27\xdb\x5b\x15\x8c\x0c\x68\x8e\x26\x2f\x32\x50\x22\xe9\xe9\xfb\x80\x97\xd0\xe3\xa5\xf2\x5f\xf3\x49\x6c\xe0\x18\x0a\x53\x69\x79\xa0\x56\x27\xeb\x5b\x0e\x70\x29\xc4\xe8\xc8\xb2\x91\xd8\x6c\x5b\x48\x63\x20\x4f\x6d\xe3\x71\x2f\x5d\x12\x39\xce\xf9\xd3\x65\x5d\xb1\x03\x26\x7c\x9d\xef\x50\x4a\x4e\x19\x58\x91\x2f\x1b\xd1\x9d\xc8\xea\x53\x46\xce\x33\xac\x0e\x55\xec\xb4\xbb\x28\x00\xc7\x56\x1f\x66\x55\x7c\x38\x83\xb0\xc0\xa7\xe4\xfc\x29\xb5\xe5\x3c\x91\xdc\x13\xc3\xdd\x59\x44\xaf\x88\x2b\x95\xc5\xfe\x6b\x1e\x3c\x1b\xe9\xa9\x97\xe8\xb2\x45\x2a\x2f\x5e\x32\x97\xc1\x05\xca\x79\x24\x66\xd2\x98\xf2\x8a\xe8\x64\x88\x03\xb8\xd7\xb0\x28\x12\x1a\x50\x27\x70\x0c\x31\x2c\xd0\xd9\xa1\x88\xe3\x5e\x9a\x79\x1f\x23\x7d\xde\xcb\x89\x42\xcf\xc9\xfd\x32\xc1\x3d\x2f\x02\x64\x68\x10\x20\x0d\x32\xe7\x26\xa9\xcd\xc8\x31\x91\x78\xf3\xc7\x41\x95\x77\x0d\xa2\xcb\x57\xda\xe4\x60\xfc\x8d\xbb\x94\xd1\x6e\x9c\x21\x4f\xe0\xa5\x94\x8c\x33\x4b\x74\xbe\x99\xfe\x1a\x6b\x12\x57\x67\x26\x67\xf2\xa5\x56\x99\x11\x10\xbb\x2d\x6e\x43\x2b\x2b\x0b\x32\xbd\x2c\xe1\x33\x4d\x02\xa4\x90\x50\x13\xb5\x55\xc8\x95\x93\x4c\x77\x71\xb0\xa3\x50\xc5\x76\x81\x68\x56\x8a\x3c\x5d\xc4\x88\x44\x15\xa7\x55\x89\xad\xef\x44\x14\x46\x85\x38\x52\x17\x55\xe1\x1d\x0e\x55\x6d\x02\x44\x50\xae\xcb\xbb\xd4\xac\x9a\x7e\xc1\xa9\x3c\x5c\x65\x81\x01\xbd\x5a\x41\xdf\x6f\x49\xc6\xe5\x6a\x36\xed\xc2\xf9\x2b\xa1\x32\x49\xa9\x7e\xdc\x63\xc3\x1c\x67\x07\x84\x99\xfa\xf6\xa2\x2a\xc9\x4a\x14\x04\x51\x25\x2a\x60\xf0\xf0\x32\x53\x3c\x89\x85\x22\xaf\x41\xd6\x13\x18\x41\x1a\xad\x96\x29\x00\x32\xa8\x6b\x9d\xa9\x90\x9b\xaa\x5a\xcf\x32\x42\x60\x7d\x98\x49\x58\xbc\x51\x9d\x9f\x30\xd6\xe0\x81\x02\xfb\xdf\xd6\x31\xef\x61\xdc\x45\x8c\x66\x42\x75\xeb\x8d\xb7\xad\x2a\x3d\x34\x69\x35\x6d\x85\xc5\xed\x3d\x3b\xdb\x24\xe1\x6d\xd3\xa4\x0a\x28\x95\x30\xbe\x36\x93\x00\xda\x41\xa9\x4a\x86\x36\x19\x84\xf5\xcb\xb3\x80\x33\x22\x5f\x5b\x5a\xe7\x89\x19\x58\xb5\xc3\xa8\xaa\xfb\x35\x6b\xe0\x49\xc6\x34\x50\x19\x24\x00\xe5\x3b\x44\x74\x2d\x3b\x51\xe3\xea\xdf\x17\xb2\xb5\x65\x19\x65\x5b\xf6\xae\x7a\x1d\xc9\xb0\xdb\x12\x44\xa3\xa6\x45\xdf\x72\xe3\x6a\x88\xbe\xa6\x71\x25\xc2\x05\xc8\x17\x76\xa2\x45\xd7\xbe\x52\x04\x1f\xfe\x3b\x28\x4f\x02\x41\x77\xf6\x71\x11\xe7\x77\x18\x49\x1f\xff\xb1\x8c\xfd\xd8\x14\xf1\xe3\x17\x54\xa2\x8f\xdc\xf4\x8d\xa5\x79\x51\x25\xfb\x3e\x36\xca\x7c\xc6\x18\xf3\x19\x7d\xce\x87\x62\x45\xc0\x6a\x9d\x67\x10\x5f\xf7\x0c\xeb\x68\x3a\x5f\x6c\x31\x8f\xe3\xbc\x8d\x41\x29\xad\xaf\x6d\x7a\x8e\xee\xbb\x05\x09\x9d\x81\x9a\x4a\x02\xb5\xd7\xfd\x4e\xf2\xc6\xf7\x30\xcf\xfa\xc4\xfa\x2b\x79\xfe\x85\xc2\x39\x29\x35\xfc\x5b\x5a\xe0\x68\x7f\x2f\xd8\xff\xb5\x3c\xf8\x95\xbb\x1b\x0d\xa8\xbf\xbf\x52\xf0\xbf\xca\x5e\xb2\x46\x1d\xdd\x85\x2f\xe8\xf2\x62\x13\x54\xc9\xe3\xcb\x6b\x5b\xbf\xb4\x6e\x68\x2d\xb8\xe8\xf5\x02\x11\xc7\x24\x09\xbb\x4c\x76\xb8\xf0\x20\x06\x83\xc6\xc5\xdf\xeb\xcb\x1f\xfa\xaa\x3f\x2e\xae\xca\x25\xf9\x67\x1d\xfd\x5f\x8b\x41\x09\x82\xf9\xb3\x1a\xf2\x77\xc9\x32\x71\x7c\x3e\xe2\xf3\xf5\x88\xcb\x23\x2e\xee\xc1\x33\x4a\xcf\x64\xba\xc4\x00\x0c\x47\xc3\xbb\x55\x37\x43\xe9\x15\x8f\x42\xa4\x2a\x7a\xb7\x22\xea\xde\xad\x27\xde\xf4\x60\x24\xf2\x8f\x77\x2b\x3e\xd6\xe3\x2e\x58\x56\x90\x05\xde\xbd\x64\x6e\xea\xdd\xeb\x4d\x32\x84\x7a\xf7\x0a\x16\xc0\x6b\x14\x1a\x18\x71\xcf\xe9\xdf\x19\x41\xd8\x01\x81\x3b\xe8\xed\xea\xf1\x2e\xd2\xb2\x56\x1b\x54\x19\xf5\x27\x4a\x7a\x92\xe8\x63\x1b\x35\x53\x14\x85\x77\x3d\x71\x1a\x99\xf3\x95\x69\xeb\x60\x13\x4d\x51\xec\x7d\x3b\xc1\xaa\xa7\xde\x14\x2f\x2a\xf6\x55\x00\xb1\x2c\x3c\x90\x58\x2f\x5e\x33\xa7\x28\xff\x86\xaa\x7e\x20\xb5\x55\xb3\x9d\xa9\x79\xc6\x58\x64\x27\xc5\x11\x2b\xc1\xca\x61\xb5\x5f\x71\x4f\x34\x33\x7a\xc4\x54\x39\x2b\x09\x39\x91\x3b\x3c\x96\xe9\x81\xe1\xbc\xcf\x58\x02\xf9\xf8\xa4\x44\x23\xfa\x31\x7d\x04\x25\xcd\xcf\x3f\x9f\x9e\xdd\x3e\x61\xf9\x09\xa3\xa7\xae\xe8\x46\xbf\xbc\x5d\xf5\xdc\xc3\xa0\x22\x32\x7b\x85\x03\x00\x5e\x31\xe9\x03\x34\xb8\x0b\xb4\x6d\x0d\x1f\x33\x19\x7f\xe1\x30\xd4\xb7\x8e\x7d\xc0\x21\x75\x20\x45\xb0\x54\x28\x10\x3a\xf5\x6e\x38\xa5\x4e\xfc\xc4\x18\xd1\x1f\xbd\x89\xe3\xc5\x1b\x3c\xbe\x90\xbd\xd1\x6c\xc0\x0c\xaf\xfa\xe6\xae\x15\x5f\x6a\xa0\xb2\x0d\x86\x5e\x45\x39\xef\x79\xb8\xf7\xfe\x85\x79\xbf\x47\x6e\x8c\x12\x41\x41\x78\x2c\xf7\xf8\x17\x6e\x7b\x61\x2a\x6d\xdd\xbf\xaa\xbe\xab\xc1\x90\x6d\xb0\x07\x9b\x5b\x00\xe5\x2c\x0a\x80\x38\xdb\xe4\x1c\x8a\x80\xaa\x76\xfa\xd2\x86\xdf\x24\x61\x4c\x8c\x6a\x1a\xb6\xc9\x0a\x29\xe1\x30\x37\xcf\x13\x42\x10\xf5\xd8\xcb\x58\xe5\x25\x4e\x9b\xcf\xab\x3f\xb0\x50\x30\xb0\xd9\xcc\x1a\x05\x94\xf8\xb6\x59\x7a\x75\xe1\xc6\x6f\x6f\x97\x4d\x4b\x24\x7c\xdf\xaf\xa4\x61\x28\xf1\x09\x94\x92\x4c\xde\xfd\x16\x4a\xec\xf1\x04\x96\x38\x2a\xb4\xa4\x80\xcd\xe1\xb7\xe3\x66\xae\x11\xad\x50\x51\xbf\x40\x35\x1f\xc3\x74\x1f\x65\x67\x2d\x9c\x1a\x8e\xbe\x60\x64\xec\x31\x60\xf7\x73\xca\xe6\x88\x9a\xbd\x49\x8b\xde\x32\x11\xec\xb7\xc3\x0b\x91\xdc\xd2\x16\x65\xf5\xfd\xcd\x49\x79\x37\xae\xd1\x81\xff\x74\x5c\x74\x80\x2b\x6f\xf9\x68\x3d\x60\x61\x81\x59\xb7\x88\x32\x95\x04\x82\x46\xcb\x65\x70\x86\xeb\x41\x35\xbc\x3a\xfa\x3c\x22\xea\x20\x76\x8f\x47\xbf\x5f\xf8\xd0\x20\x00\x35\x59\x62\x7e\x20\xfc\xe3\x90\xe2\x3a\x52\x28\x8b\x54\x20\x40\xb1\x88\x04\x1f\x94\xb0\x88\xc1\x40\x7b\xa3\xe3\x0c\x19\xae\x79\x2e\xa1\x52\x81\x4f\x1b\x0b\x9c\x20\x32\xb5\x01\xb4\x18\x33\x96\x80\x93\x3c\xd8\xc3\x40\xb3\x34\x49\xa5\x60\xd1\xd2\x27\x58\xd6\xc1\x24\xb1\xa0\x18\x15\xa0\xff\x4e\x35\x6c\x24\x94\xf5\xb1\xfc\x29\x67\x49\x8d\x4a\x70\x54\x45\x4b\x7a\xf7\x33\xac\x72\x75\x99\xc0\x53\xc5\xe7\xce\x48\x41\x1b\xa7\x33\x93\xc1\x9b\xd5\x12\x32\xca\xfe\x24\x9c\xb1\x8a\xfe\xcc\xdc\xa5\x35\xe8\xe5\x3e\xbd\x51\x7c\x09\x2a\x3a\xf5\x03\x56\xbd\xde\xe5\x9d\x55\xef\x4f\x69\xca\xf5\x2f\x4f\xe0\x92\x10\x76\x89\x49\x0f\xae\x7e\xce\xef\x90\x14\x63\x2b\xba\x20\x2d\x11\x85\xc3\x0b\xec\x02\x8d\xfe\xbf\x26\xa3\x59\x81\x28\x27\x4f\x62\x44\x5f\x4e\xbf\xfa\x3f\x76\x57\x0a\x3a\x0d\x26\xda\xd2\x4a\x11\x2b\x05\xcd\x10\x0b\x12\xbe\x54\x7a\x06\xf5\xbb\x5c\xec\xae\x8a\xc8\xe3\x47\xf7\x5c\xdf\x2e\x23\xed\x55\x2a\x30\x93\x0e\xb0\x6b\x4d\xa0\x0e\x5f\xb5\xaa\x74\x04\x24\xc5\x5e\xe5\x0e\x67\xe4\x10\xe3\x4e\xd1\x99\xd6\xda\x30\xe2\x57\x16\x8b\x7c\xe3\xff\x82\x9d\xab\x76\xff\x09\x68\x35\x6a\x88\x9e\xd8\xfc\x04\xb8\xb0\xf0\xa9\xf0\x32\x73\xee\xe9\xbb\x3f\xcc\x69\x42\xdb\xa2\x7b\x8c\x01\xa3\x85\x40\xa6\xc3\x9d\xa2\x6a\xa9\x9f\x38\x73\xbd\x08\x3e\x7d\x32\x2f\xcf\x11\x81\x93\x82\xef\xbe\x67\xce\x8b\x0e\xc9\x70\x37\x2f\x35\x2c\x16\xc9\xea\x7e\x7b\x68\xb2\xfe\xa1\x88\x73\xbc\x71\x86\xb6\x7d\xa4\x74\x1f\x29\xdd\x7b\x4a\xf7\x5b\x4a\xc1\x8d\x58\xee\x73\xc2\xf7\x91\xf0\x9d\x8c\x72\x95\xe9\xe6\x93\xbb\x29\x49\xfb\x48\xd2\x3e\xfc\x1a\x51\xdf\x2d\xc2\xdc\x55\x7d\xa4\x73\xf9\x88\x1c\xf9\x71\xb2\x6e\xac\xc0\x29\x12\x87\x8c\x08\x34\xe3\x99\x0c\x8a\x60\x64\xa0\xd0\x59\x8a\xff\x78\x51\xa3\x78\xa3\xdf\x34\x19\x68\x9b\xfb\x28\x2f\xd2\x39\x2e\xb0\x42\xc8\xc1\xd5\x37\xaa\x1f\x76\x1c\x31\xe9\xe3\xe6\x27\xd8\x90\x89\x6f\x49\xfe\x13\x54\x8a\xe8\x57\x4b\x2a\x54\x3b\x68\x08\x1f\xda\x22\x97\x1e\xec\x4d\x1f\x4c\xfa\x67\x12\xff\x45\xd6\x7c\x43\x91\x3a\xfa\x0d\xda\xe6\x78\x70\xfb\xf5\x28\xdc\x5f\x7b\x6d\x17\x10\x12\x2a\xa8\xee\xf1\x9b\x38\xb3\xd2\x7b\x21\x65\x4c\x3f\x29\xc5\x8b\xf1\x05\x7b\x07\x59\x63\x72\xcb\x1a\xd7\x23\xbe\x1e\x71\x7b\x44\x74\xe6\xfc\x7b\x3e\x78\x56\xd1\xcf\xc9\xc5\xe0\xf0\xe0\x4c\xc4\x5d\x19\x72\x7a\x28\x06\xee\x5b\x64\x19\x31\xb0\x7d\xbd\x1a\x37\x86\xa7\x5f\x16\x9e\xd1\x07\x7c\x69\x66\x15\xc5\xcc\x80\x8b\x29\xe8\xa7\x67\xa6\xc3\xc4\x8c\xc4\x20\x4f\x9f\xa0\x8d\x9d\x8d\x8e\x01\x6b\x87\x88\xa8\xc0\xbf\xbb\xdb\xbf\xe1\x56\xea\x03\xf0\x64\x05\x65\xc8\xa8\xca\x9b\xe4\x13\xee\x81\xe9\xa3\x9e\x8a\xf1\xec\x8f\x60\x04\xcb\xb5\x96\x55\x73\x2e\x48\xba\x55\x70\x6a\xcb\x02\xe5\x89\x9c\x46\x5e\xe7\x74\xe1\x99\x39\xcf\xb9\x9b\x0b\x72\xaa\x10\x14\x7d\xb4\x80\xac\x80\x14\x54\x59\x97\xef\x50\x43\x5b\xc6\x8b\x35\xca\xf4\xb1\x27\xe0\x9b\x41\x60\xd9\x35\x2c\x6f\xf1\x19\x42\x3b\xc8\xb4\xee\x24\x7c\x07\xc8\x03\x46\xbd\xa6\x75\xee\x02\x46\xcc\xdf\xd0\xdf\xcb\x19\x70\x56\x00\xdf\x91\x34\x3d\x92\xc1\x5c\x55\x56\xee\x3b\xc2\x4a\x50\x16\xe9\x46\x83\x7f\xbe\xb2\x6b\x47\x88\x88\x99\x67\x7b\x7e\x13\x99\x25\x78\x51\x6c\x81\x31\x78\xfd\x4a\x14\xf0\xb5\x09\x3a\x19\x8a\xf8\xd4\xa0\x54\x9f\x70\xd4\xb9\x63\x8e\xda\xcb\x43\x79\x46\xcc\x82\x18\x91\xab\x1d\x48\x68\x2f\xbf\x35\xa9\xd3\x2f\x3f\x26\xa8\xcc\xf4\xaf\xa4\x60\x92\xf8\x95\xa1\x16\x99\x25\x85\x97\xaf\xe1\x10\x03\x91\x05\xc3\xab\xe2\x83\x5c\xc0\x2b\xea\x4c\x30\x87\x0e\x9b\x93\x25\x13\x05\x2c\x2a\xc8\x9a\x2c\xab\x2b\x88\x96\xc3\xa6\xc2\xae\xdd\x25\xce\x80\x7d\xc2\x97\x2c\x56\x35\x0d\xdb\xbb\x8a\x00\x26\x08\xa3\xab\x7d\xe4\x12\x2a\x15\x16\x50\x92\xba\xbd\x2b\xde\x09\x52\xa4\x47\x5c\x63\xdf\xed\x67\xa8\xef\x99\x16\x0d\x5c\x83\x03\xd8\x03\x99\x32\x6a\x7b\x4f\xde\x8c\x68\x68\xd5\x64\x64\x37\x97\x82\x93\x09\x69\xd8\x92\x8b\xe4\xa1\x87\x8c\xdd\x6e\x75\x71\x93\x9a\xb8\x61\x27\x0d\xd3\x5e\x6f\x18\xfa\x18\xb5\x6f\x0d\x5b\x26\xb1\xd9\x78\x1e\xc9\x04\xba\x92\x81\xfb\xe8\xcd\xf6\xb1\x4c\x18\x76\x3f\xe9\xfb\x9b\x41\x0c\xf2\xdd\x7c\x94\x3c\x26\xc9\xb2\x68\x1e\x64\x71\x29\xec\xaa\xd7\x2a\x07\x19\x45\x59\x58\xe5\x62\x89\xec\xed\xe1\xd0\x13\x87\xc3\x49\x7a\x8e\x27\x14\x9b\x9a\x2b\x44\x00\xc7\x93\xa0\x36\x30\x1e\x0a\xc6\xca\x70\x78\x1c\x32\x60\x60\xa5\xaf\x08\xe1\x1f\x5e\xcc\xfe\x6b\x4e\x8c\x72\x10\xbf\xbd\xf8\x24\x67\x67\x80\x5a\x7c\x35\x71\xf2\x75\xe6\x58\xcb\xe1\x08\x16\x8f\x50\x45\x9d\x32\xe4\x08\xbd\x77\x3c\xfa\x10\xc8\xb0\x57\x8f\x23\xa8\x7f\x61\xae\x12\xd8\x4e\x16\xc3\x91\x94\x8c\x3e\xe4\xe8\x3d\xc8\x41\xc9\x4b\xfc\x48\x4b\xf9\x20\xbc\xb2\xc5\xe8\x14\x87\xf8\xfa\x12\x0e\xbd\xde\x5e\x90\x05\x71\x4a\x99\xe8\x0d\x25\x31\x1c\x78\x33\x08\x1f\xae\x42\x42\x71\x68\x87\xcd\x15\x8d\x45\x08\xac\x5f\x23\x20\x7c\xf7\x66\xf5\x14\xdb\x4b\x6e\x05\x65\x99\x96\x2a\x7e\xac\x98\x54\x85\xb4\x22\x8f\xd3\xca\x81\x8b\x8e\x57\x4f\xbd\xb5\x67\x45\x96\x39\xc9\x4f\x7b\x9d\x84\xab\x97\xa1\xbf\x49\xbf\xa3\xa7\x6e\xb4\x61\x98\xbd\x97\x4f\xab\x21\xf9\x45\xbf\x3e\xe0\xf0\x80\x58\x55\xf5\x85\xb5\xa7\x90\xd4\xb4\xa8\x31\x9c\x6d\x4e\xd4\x03\x64\x41\x19\xa7\x4d\x64\x73\x5c\xd9\x02\xd5\x0b\x49\x72\xdf\x9a\x3e\xd1\x04\x12\x52\x50\x80\xf2\x12\x10\x96\xa0\x41\x34\x93\x29\x42\x7a\x3b\xb8\x0c\x96\x0f\x92\x97\x1a\x8d\x1d\x8a\xe6\xd5\x2e\x3d\xa2\x5c\x47\x10\xf1\x0a\x3e\xba\xca\x04\x0e\x5f\x14\xf1\xc1\x01\xcf\xba\x0b\x13\xbd\x0c\x74\x8c\xd0\x57\x26\x9c\xbe\xcd\x86\x34\x76\x45\xe4\x12\x1e\x32\x57\xa1\x08\x48\x57\xfc\x83\x44\xac\x42\x28\x49\x9a\x99\xf5\xfb\xd6\x5a\x70\x9d\xef\x80\x01\x0a\x05\x41\x09\x73\xd0\x40\x5a\x9f\x48\xe2\x65\x93\xe1\x40\x09\x1d\xe3\x40\xbd\x0d\x8c\xfb\xaf\xa2\x5d\x92\x1d\xa7\xeb\xb1\xa3\xdd\x8f\x1d\xd1\x21\x9e\x58\xc9\x0a\x67\x1f\xdd\x4e\x91\xd1\xc3\x89\xb8\x9c\xdc\xd3\x2d\x02\xde\x19\xa2\x3f\x43\x08\xf5\xe1\x94\xf3\x40\x06\x0e\x27\x2b\x4d\x33\x5b\x8d\x85\xb8\x17\x4e\x3d\xff\xc7\xe8\x40\x28\x74\xfa\xdf\xa0\xc8\xb6\x3f\x85\x13\xb7\x0f\xaa\x67\x27\xea\x99\x2c\xdf\x86\xf3\x0c\x08\x99\x8b\x9d\xb3\xf4\x3f\xfe\x37\x4b\xd9\x7f\xcd\xbf\xdc\x12\xa4\x06\x08\x33\x99\xc8\x30\x2d\x7b\xc3\x98\x14\x13\x72\xfe\x6b\xbe\x89\x1e\xd2\xcc\x04\x37\xa4\x19\xee\x7e\xe8\xdb\x01\x02\xa5\x21\x01\xfd\x79\xd3\xd4\x32\x60\xd8\x04\x98\x04\x02\xf9\x2c\xcb\x96\x97\x90\x03\xad\x3e\xad\x98\xe4\x87\x1c\xce\x70\xb2\x95\x82\xd1\xa2\x9c\x50\xe0\x65\x99\x06\x2b\xc6\x06\x2b\x14\x54\x90\x62\xc3\xae\x36\x4f\x9c\x88\xc2\xb6\x99\xa2\x1c\xb2\x57\xc0\xa4\xd9\x2d\x48\x13\x29\x73\x87\x59\x1d\xcf\xf5\x43\x75\x60\x44\xb8\x12\xdf\xf5\x96\x7e\x01\x93\x88\x5c\x27\x11\xb9\x0e\x11\xb9\x0e\x11\x79\x7c\x47\x54\xf8\x77\x77\xfb\x37\xdc\x5a\x2c\x70\x6d\xe3\xc4\x4c\xf6\xa5\x18\x80\x64\x70\xe5\x89\x03\xce\x8b\x6c\xc2\x69\x2d\xc6\xaa\x90\x78\xf0\x56\x0d\xcb\x85\x8a\x8b\x71\x99\x92\xa8\xb2\xe9\x75\x40\x89\xd0\x7b\xd4\xde\xfa\x46\xc7\xcd\xc4\x9d\xee\xd7\xb4\x64\x00\xa9\x6f\x3a\x7a\xe8\xd8\xeb\x47\xea\x3e\xf9\xf3\x6d\xfb\x03\x98\x3f\xdf\xd2\x9d\x03\xd2\x80\xd2\xa8\x18\x0e\xcd\x6c\x1d\x45\x7d\x53\xf1\x9a\x52\x2a\x16\x0f\xbd\xbe\x1e\xd8\x76\x23\x28\xd6\xc0\xaa\x0e\x32\x0a\x87\x0d\x1d\x08\xea\xbb\xc9\xa5\xf7\x02\x25\x8f\xe4\x41\x16\x01\x96\xe9\x36\x19\x65\xa4\x57\x6a\x2b\xee\xb2\x7d\x3d\x50\xe7\x2b\x55\x8c\xf9\x55\x62\xa6\xf1\xd7\x1b\xb4\x22\x44\x73\x95\x3b\x04\x8a\xdb\xca\x93\x5b\x34\xc3\xda\xa0\xe4\x4d\x7a\x76\xa0\x31\x64\x77\xf6\x32\x46\x6a\x1a\x90\x59\x10\x33\xc4\xe6\x33\xa4\xab\xcf\x24\x4b\x7c\x26\xa9\xeb\xe3\x6f\x06\x4f\xef\x64\x7c\xfa\x0c\x01\xec\xd3\x57\x41\xc3\x47\xdb\xdb\x67\xb8\x10\x36\xdb\xf0\xf5\xf1\xb9\x7f\x88\x64\x46\x3e\x86\x30\x92\xaf\x54\x40\x38\x45\x02\xa8\x4e\xe4\xfb\x1c\xce\xa9\x40\xd5\x41\xe3\xe3\x71\x48\x2a\x86\x8f\x75\x39\x9f\xde\xcd\x7c\xfa\xc7\xcc\xf0\xc9\x36\x43\xfe\xc0\xf6\x17\xbd\xe6\x2f\xce\xfb\x4a\x09\x32\x46\x85\xff\x73\x50\x30\xc7\x60\xa2\x23\xca\xdf\x1f\x77\xad\xf1\x11\x65\x2f\x60\x74\x3c\x06\x62\xa2\x7c\x3c\x58\xee\x23\xc7\x72\x0a\xb1\x5c\x4e\xf2\x71\x8e\x74\xbb\x28\xb9\x15\xaf\xde\x0b\x40\xe5\x25\x4e\x31\xb9\x97\x58\xd3\x26\x47\x3c\x58\x90\x33\x19\x8f\x1c\x7c\x4d\x9c\xf7\xf0\x34\x89\xed\xa4\x9e\xf2\xe4\xf5\x55\x19\xc9\x67\x2a\xb2\x3d\x03\x0c\xcc\x8b\xfa\x1e\x5d\x24\xc9\x47\x22\x7a\xf2\x5f\x93\x2d\x37\xb0\x31\xb9\x44\x35\x0e\xd5\x46\x00\x87\xf1\xf4\x50\x74\x14\xa4\xa7\x8f\xdc\x14\x40\x91\x9e\x67\xa4\x18\x61\x42\x50\xa2\x13\x22\x9c\xb9\x2a\x8b\x4c\x4e\xe8\x29\xbd\xb1\x50\x89\xf4\x53\xc7\x2c\x7a\xda\x0d\x51\x80\x5e\x48\x43\xc4\x45\xc5\xad\x68\x91\x16\x07\x05\x36\x96\xa9\xb3\x15\x06\xde\x2f\xda\xd1\x0a\xa8\x0a\xb8\x96\x00\xfc\xcd\x2e\xfe\xcc\x85\x66\xd6\x22\xb2\xb7\x3d\x43\x12\xf5\x11\x92\x48\x28\x66\x2c\x6b\x11\xce\xd7\x30\x41\xc4\x96\xf0\xc0\x61\x63\x56\x20\x4b\xd1\xb2\x3f\xe9\xf7\xa1\xaf\x65\x82\x20\x0e\xfb\x8f\xfb\x82\xa6\x26\x3c\x29\x95\xc7\x1a\x3a\x42\xdd\x37\x46\x72\x09\x27\xba\x23\x2d\x04\x85\xc5\x28\x5a\x48\x8d\x48\xd3\x2a\x9f\xa4\x99\xda\x03\x90\xc2\x58\x3a\x00\x3f\x7e\x82\x96\x64\x61\xcd\x05\xce\x58\xe1\x79\xcf\x9e\x05\x52\x1e\x8b\x96\x07\xf6\x95\xd3\xa2\x58\xf2\x57\x64\x73\x7b\x06\x54\x5f\x00\x0d\x6a\x51\xf6\x2e\x10\xcf\x97\x08\xc2\x3a\xad\x5e\x9b\xc6\x6a\x33\x20\xc2\x37\x3d\x92\x6f\x7a\xb4\xca\x97\x2b\xd2\x1b\xcc\x22\xad\x41\x23\x81\x3f\xce\x52\xa1\x07\x27\x49\x02\x1a\x84\x4c\xe6\xe9\x55\xad\x25\xbd\xaa\x48\xdd\xc4\x5e\x6d\x82\x9c\x89\xd3\xb4\xe9\xad\xf1\x91\x36\xd9\xf2\x40\x88\x81\x7c\x6f\x06\x91\xe9\x36\x6d\xd8\x0e\x4c\xfd\xbb\x1a\xe9\x77\x35\x52\x7d\x96\x04\x59\xb5\x3a\xb6\x8d\xed\xf9\x8c\x83\x04\xac\x3b\xa0\x69\xf8\x22\x39\xb5\x41\x58\xef\xc0\x6c\xab\x04\x4f\xdb\x0f\xba\x87\x4d\x13\x41\x50\x44\xc0\x14\x20\x23\xb2\xe1\x4b\x61\xe0\x31\x9b\x36\x3a\xa4\x7b\x12\x20\x6d\x41\xb0\x58\x3c\x9d\x5f\x35\x1c\x5c\xff\xad\x50\x97\x8c\x05\x91\x42\x31\xc2\xf5\x3a\x0a\xe0\xc7\xe9\xb3\x04\x91\xe5\xd0\x9f\x22\xcd\x21\x7c\x6c\x25\x39\x2e\x1c\xc9\x7a\x3c\x16\x67\x29\xa4\x25\x12\xea\x7d\xd0\xcf\x12\xb4\xe3\x72\xe7\x07\x77\x2a\x63\xc7\xb6\x79\x1b\x21\x0d\x3f\xac\xc7\xe1\xde\x98\xb4\x76\xd8\x62\x0d\xa5\x3e\x36\x01\x6a\x4e\x27\xdf\x41\x86\x3a\x75\x8e\x98\x8b\xb1\x9a\x94\xf0\x2c\xf9\x02\xe6\x11\x6f\x15\x84\xc5\x1c\x80\x2f\xa8\xc5\x3c\xa1\xca\xf0\xd4\x8d\xc4\xbd\x2e\x38\x53\xda\xde\xd8\xdf\x0e\x90\xc4\x17\xad\x4e\x02\x6c\x62\xc2\x2c\x3e\xc9\x52\xda\x74\x83\x37\x23\x2f\x46\x92\x8b\xa0\xdd\xba\xee\xf7\xa2\x49\x4b\x96\x71\x00\x28\xcb\x44\x94\x99\xe8\x65\x81\x9d\xf1\x9c\x62\xd9\x77\x48\x69\x13\x09\x9f\x52\x58\xb0\xbc\x4f\x5c\xbb\x08\x43\x02\xbd\xa0\x38\x51\x39\xa9\xc4\xe3\x20\x91\xdc\x4c\xc1\x00\x3e\x93\x76\x62\xb4\x23\xff\x49\x14\x89\x36\xb2\x84\x92\x95\x02\xca\x4e\xf6\x1c\x13\x8b\x78\x68\xce\x54\xbc\xf4\x95\xb8\x5f\x25\x1b\x10\x07\xc5\x97\x9a\xb1\x3c\x48\x54\xd4\x4f\x04\x26\x0d\x5d\xbc\x3a\xdf\x64\xbb\xe4\x19\x9f\x72\x14\x40\x2e\xa4\x87\x9e\x5a\x93\xd9\x27\x9d\x25\x8c\xbc\xb7\x09\x13\xfd\xc7\xff\xe6\xc6\x1d\x88\xca\xa2\x2c\x65\xed\x86\xfe\x6b\x2c\x44\x3d\x22\xe1\x7b\x25\xb6\x4c\x53\xd6\xa1\x3e\xaf\xbd\xb2\xe5\x35\x9a\x9e\x4c\x26\xfa\xe6\x69\x89\x58\xde\xe4\xdc\x37\x10\xb2\x28\x07\x8c\x69\xb9\xaf\xac\x51\x0e\xb8\xc2\x88\x01\x16\x69\x28\x8b\x47\xc9\xc2\x40\x07\x06\x65\x9c\x4f\x8f\x54\x78\xea\x43\x80\xe8\x8d\x11\x8a\x7a\x89\x2b\x71\xa3\x9c\xae\x15\x72\x81\x4a\x5c\xb1\xd2\x4d\x58\x57\xa1\xb6\x1e\xd4\x90\x75\xcd\xf2\xa9\xad\xe5\xd4\x5d\x3d\xd4\x36\x18\xa1\x36\x34\x44\xab\x25\x28\xd2\x6f\x62\x9c\x6a\xe7\x82\x47\x30\x45\x03\x36\xf3\xa8\xc2\x22\x0b\xb4\xe2\x45\xee\x23\x7b\xb6\x3d\x4a\x55\x6a\xb5\x8b\x89\xd4\x2a\x76\xf3\x67\x74\x3e\xed\x83\x21\xa3\x49\x9d\x6e\x90\xe8\xc6\xc3\x33\x71\x7a\x74\x86\xf1\x26\xa6\xec\xe3\x24\xd5\xd2\x2c\xd5\xd2\xc7\xcb\x56\x28\xfa\x78\x39\x91\xcc\x68\xcc\xf8\x68\xc8\xb7\x0c\x65\x90\x67\xd0\x0b\x42\xa2\xf2\xf1\x25\x2c\x7b\xd7\x42\x30\x23\xb9\x5f\x54\x97\x2f\x4e\xb0\x32\xa5\x0b\x24\xa3\x2b\x01\x95\x81\xe1\xeb\xf3\x12\x5d\xd1\x21\xeb\x2b\x27\x04\xe8\x1b\x83\xf6\x1b\xdf\x1e\x97\xaf\x52\x6e\x37\xbf\xb4\xca\x02\x84\x22\xe9\xc2\x2f\x93\x80\x2e\x93\x80\xae\x3e\x24\x5d\xb2\x1b\x8b\xfe\x70\xb3\x40\x2c\x8f\x58\x96\x47\x64\x4b\xf5\x11\x9b\x6b\x8f\xd8\x9e\x0f\xdb\xe5\x0f\x62\x01\x37\x16\x07\x1b\xbe\xa9\xb4\x67\x96\x17\x3a\x15\x49\x2d\x53\x4c\x59\x21\xb2\x9c\x91\x09\x03\x6d\x71\xf8\x1e\x80\xaf\xc6\x4d\x57\x1a\x40\x2f\x50\x33\xe4\xc0\x96\xb0\x3a\x21\xe2\xcd\x62\x02\x7e\xe3\x72\x68\xcb\x1e\xbc\x90\xae\x3b\x4a\xae\x2d\xd3\x03\x08\xf2\x44\x5c\x6c\x4b\xeb\x1f\x7a\x14\x23\xa2\x2b\xff\xc3\x32\x76\x02\xb4\x95\x1e\xb1\x21\x0e\xaf\x17\x14\x8e\x07\xe7\x55\xdb\x36\xa7\x14\x99\xb3\x6d\x88\xc3\x56\x5c\x88\x4c\x39\xa9\x3a\x09\x54\xa6\xfb\xb9\x89\xf8\xda\x76\x9e\xb8\xe8\x8a\x85\x32\xdc\xd6\x1a\x8e\x55\x36\xec\x0d\x6d\x31\x3a\xee\x84\xe5\xe4\x6e\x6c\x43\xda\x69\x91\x4b\xe7\x78\x3a\x96\x03\xda\x21\x25\x74\xc8\xc3\x0a\x02\xd0\x9c\x0d\x69\x28\xc7\x53\xf6\xa1\x4d\x90\x3b\x17\x30\xa8\x6c\x82\x70\x62\x09\x50\xf6\xf9\xb7\x03\xa5\x19\x07\x0a\xf0\xcd\xc3\x45\x48\xf2\xdd\x03\x88\xfb\x92\x86\x09\x8c\x15\xe9\x11\x92\x75\xc5\xc0\x9a\x29\xc7\x74\xac\xa0\xc9\x71\x22\x42\x00\x07\x57\xe6\x76\x9c\x50\x7c\x3a\x33\x45\x5f\x75\x5b\xbd\xdc\xdc\xca\x44\xe6\x64\xfd\x0a\x57\x20\xeb\x2b\xda\x71\x96\x26\x12\x77\x4b\x58\x8d\x69\x49\xd7\xc5\xed\x19\xf9\xd8\x30\x4c\x60\x1f\xb1\xb1\x9e\xb4\x3b\xb6\xdd\xc5\x4c\xdf\x90\x07\x19\xc9\x96\x22\x46\xf2\x09\x09\xe7\xdc\x1a\x36\x70\xb6\xee\x70\x83\x22\x21\x6d\xa2\xe3\x95\xc0\xc3\x4d\xe3\x9d\xb6\x00\x55\xab\x02\x40\x05\xb8\x60\xb0\x4b\x4b\x6f\x68\x56\x09\x1f\x4b\x1a\x56\xbf\x9b\xac\x0b\xb6\x53\x4e\xf7\x31\x85\xd0\xdc\x4e\xee\xb1\x79\x50\x6a\x59\x63\x8f\xab\x9b\xa3\xbd\x0e\x1a\x65\x17\x5d\xcb\xbd\xed\xc8\x86\xc2\x56\xa6\xa1\xae\xf5\x2c\xe4\x4e\x40\xee\x77\x15\xd2\x81\x54\x2b\x46\x32\xed\x6e\xa5\xf6\x7d\xc0\xad\x54\x95\xb9\xb0\xf7\xd9\xf4\x7a\x53\x2b\x55\x5d\x64\xdf\x1d\x77\x0f\xa7\x56\x57\x2a\x0e\x35\xb4\xea\x64\x5f\x5b\x43\xe6\x56\x2f\xdb\x82\x9b\x2c\x82\x82\xf4\x19\x5c\xc3\x25\x27\x62\x57\x8e\xc3\x30\xc0\x2a\xa9\xe0\x1e\x52\xf5\x55\xbd\x79\x63\x5f\x62\xab\xaa\x2f\xce\xb9\xf2\xd9\x46\xe3\xf6\xcb\xe1\xfe\xb6\x18\xe4\x8c\x38\xe3\x1c\xb4\xb6\x03\x9a\xbd\x36\x37\xf0\xdf\xc6\xad\xe0\xf3\x88\xdf\xe3\x11\xbf\x2c\xec\x7c\xcf\x47\xfc\x7d\xc4\x6b\xe1\xbf\xf3\x50\x53\x7d\xe3\xbd\x82\x81\x2f\xc6\x58\x3e\xbf\xb8\x72\x5e\xf2\xfd\xf7\x5a\xde\x89\x9b\x1b\x53\x3b\x82\x71\xc9\x8e\x9a\x6b\xc1\xa3\x3b\x4a\x83\xb8\xa4\x12\x58\x6b\x5d\x11\xe3\x8b\xff\x9b\xf3\xd0\x3b\x78\x2a\xc0\xaa\x5b\x8d\xda\xb7\x5a\xe3\x50\xbb\xc0\xa4\x2d\xdc\x98\x61\xcd\x2e\xa9\x03\x47\x37\x57\xb6\xc9\x05\x58\x56\xc1\x0d\xd2\x70\xb2\x65\x97\x5a\x1c\x8e\xf0\xca\x62\xb7\xdb\xb5\x75\x1b\x8b\x60\xdb\xc7\x02\xae\xb8\x2c\x3b\x7d\x2e\x6d\xaa\xa0\x55\x28\x8a\x13\x47\x4f\xae\x1e\x51\x3a\xdf\xd3\x99\x77\x9c\x03\xbc\xb2\x0e\xf9\x57\x1e\xb3\x34\xc6\x7d\x1d\x41\x98\xc3\x40\x55\x30\x7c\x31\x43\x18\x15\xbd\x14\x83\x51\x12\xd5\x3f\x2c\xfc\xa2\x9b\xc2\xae\x42\x7f\x97\x80\xe2\xa0\xf6\xf3\xa6\x57\xad\xee\x71\x3c\x0e\xf7\x38\x9c\xcb\x8f\xc3\x3d\x7d\x64\xbc\xf0\xdf\x2d\x04\xb2\xba\xc3\x68\x70\x1d\x15\x0f\xf8\x5f\x13\x9a\x29\x05\x05\x94\x00\xbe\xac\x2e\x8e\x05\x0e\x00\xb3\x01\xfb\xb6\x9e\xc7\x70\xc5\x55\x21\x07\x4e\xba\x1f\x72\xb8\x7d\xa0\x20\xbe\xe9\xea\xf2\xe1\x96\x97\xcb\x38\x41\xc7\xb3\x48\x17\xb2\x13\x00\x4b\x6f\x5f\x45\x3f\x2c\xf6\x5c\xd6\x21\x77\x23\xab\xfc\xa5\xdc\x6c\xa2\xbe\xbe\x35\x0a\x6f\xb9\x3e\x5f\x10\xe7\xb1\x4c\x5c\x0f\xe4\xc4\x3b\x7b\xb1\x54\x21\xde\x87\x1d\xcc\x9f\xf8\x10\x52\xa5\xf2\x66\x04\xed\xdd\x67\x1f\x01\x42\x92\xac\xd8\x27\x1b\x11\xfe\x88\x0a\xaf\x09\x45\xb0\x64\xc9\x6a\x9c\xeb\x90\xb7\xd4\x98\x23\x51\x9f\x81\x30\x2b\x07\xd3\xf7\x0a\x4e\x9c\xda\x5e\x22\x76\xb9\xce\x8c\x2c\xcd\x8a\x06\x95\x43\xd1\x25\xe9\xcb\xd2\x10\x80\x56\xae\x31\x8a\x52\x95\xe2\xce\xe4\x17\x4a\x22\xdb\x81\xd5\xf7\xd2\x04\x63\x7d\x7e\x40\x0d\x65\xfe\x0e\xa8\x1a\x55\xad\x1d\x14\x3d\x56\x53\xc0\x25\x25\x6d\x89\xde\x52\x93\x5a\xcd\xf8\x5e\x04\xee\x7c\xb3\xd0\xa3\xf0\x2a\xdd\xc7\xb3\x58\xf4\xce\xaa\x65\x96\xa9\x9c\x84\x07\x2e\xdb\x31\x78\x75\x5c\x2a\x1d\xe6\x82\x3b\x7b\xd9\xeb\xcd\x2c\xae\x1f\x3e\xf0\xf2\x90\x12\xab\x21\x1a\x4d\x96\x79\x1e\x87\x5b\xdd\xab\x81\x84\x18\x61\x2e\x2d\x63\x75\xc8\xb3\x75\xc5\x06\x0b\xb4\xe9\x43\x8e\xfa\x1f\x6e\xf5\xd1\x4b\xd5\x5a\xfd\x41\xa1\xf8\x08\x1f\x57\xd9\x2f\x71\x38\x1c\x62\x3d\xdc\x6a\xae\xb2\x13\xe2\x45\xd5\xd8\x0b\x0a\x55\x70\xd8\x5c\xec\x40\xea\xe8\x9a\x83\x6a\xe1\x2d\xbe\xc3\xad\x95\x10\x35\x39\x29\x72\xe8\x51\x8c\xc3\xf9\xc8\x83\x1e\x1b\xf9\xe4\x56\x25\x01\x35\x82\x47\x2b\xae\x69\xaf\x97\xdc\xfb\x78\xb8\x57\xa0\x02\x9d\x1a\x98\xdd\xf8\x8f\x33\x26\x06\xc4\xa1\x42\xf6\x7e\x5b\x5d\xf4\x1c\x1e\x4a\x6c\xc3\xf3\xa6\x87\x83\x9c\xca\x84\x60\x27\x2c\xa2\x06\xc4\x6c\x0b\xf1\x04\x29\x5a\x8a\x8c\xf0\x3d\xcb\xa0\x36\x5d\x61\x90\x07\x06\x31\xb1\x3d\xdc\x86\xc6\xb3\xe9\xa7\xce\xc3\x6d\xc9\x45\xa9\x01\x5b\xb2\x15\x15\x60\x71\x9c\xbc\xd4\x1c\x80\xa1\xa5\x0e\x7c\x55\x22\x15\x0d\xa8\x58\x85\x10\x0e\x99\x23\xd0\xdc\x74\x7f\x6a\xf8\x1b\xbd\x8d\xf2\xb3\xe3\xbf\xee\x98\x8c\xe2\x55\xc8\x52\xb3\xb9\x20\x1f\xfd\x52\x75\xfe\xa2\x5a\x9b\x4f\xbd\x0b\xdc\xc6\x35\x7f\xca\xbc\xaf\x35\xd3\x7a\x25\x77\x8c\x48\xeb\xcd\x16\x83\x19\xfe\x5b\x64\x88\xce\x29\x95\xf6\xdd\xca\x38\x8e\xc1\x14\x73\x7d\xb5\xee\x7f\xe3\x96\xd5\xca\xd8\x9b\x63\x1c\x84\x71\x63\x24\xb9\x21\xd2\x7f\x6d\xe8\x63\x2d\x89\x11\x45\x2d\x12\x29\x05\xa9\x28\xa7\x54\x9b\xe6\x11\x14\x7a\x87\xb7\x8b\xfe\x09\x9a\xdd\x8f\x7b\x2b\x4a\xe8\x97\x81\x82\x80\x50\xde\x82\x2a\xea\xc6\xdb\x5d\x4e\xab\xe8\x5b\xab\xfb\xdb\x7f\xb9\x31\xbf\x71\xe7\xcf\xe1\xde\x51\x16\x63\x0e\xf7\xa6\xcd\xa5\x0b\x20\x21\x52\x6f\x6a\x70\x58\x3c\xf2\xf3\xdd\x58\x33\xac\x50\x50\x85\xc3\xea\x8d\x60\xd9\x4d\xa1\x77\xab\x41\x96\x4f\x05\x6a\x95\x0d\x6b\xd7\x2b\x3e\x63\xc7\xeb\xe1\xc2\xdb\x73\xcc\xd0\x94\xc7\x73\xc3\x8c\x9f\x68\x7c\x21\x3e\xe9\x17\x74\xc1\x91\xd2\x2c\x18\xdf\x80\x0e\x79\x92\x8c\x89\x38\x8f\xc8\xc3\x10\xa5\xfd\x87\x58\x64\x60\x0a\x87\xb7\xce\x06\x8b\x3b\x87\x0b\xe9\x99\x65\x54\x0e\x09\xb3\x7e\x03\x6a\x2a\x9b\x48\x18\xe1\xd9\x20\x06\x45\x54\x8d\x69\x2a\x6f\xef\xd5\x00\x17\xea\x09\xac\xee\x52\x90\x3d\xfa\xc9\x90\xaa\xeb\x7e\x31\x24\x85\x5e\x26\x73\xc0\x74\x1a\x35\xef\x29\x86\x05\x39\x5e\x74\xae\x74\xb8\x50\xf1\x8c\xc1\xe1\xc2\x1f\xb3\x3f\xbe\x20\x9f\x7e\xcc\xea\x0f\x7c\xfe\xa1\xac\xf6\x7f\xe4\x71\x8c\xc3\xfd\xb4\xa2\x7d\xfa\xee\x5f\x92\x1a\xe9\xea\x76\x8f\xef\x5a\x9a\x33\xbb\x6f\x27\xc8\xd7\x63\x53\xd5\xe1\xf4\xda\x51\x3d\x3c\x78\xb8\x3d\x36\xce\xcd\x1d\x5a\x85\x28\xa3\x2e\x62\xbb\xd7\xe1\xa2\x7b\x16\xca\xa7\xb6\x85\xc8\xc2\x8f\xd0\xb7\x74\x13\xd1\x2d\x41\x75\xec\x13\x6a\x67\x2e\x85\xe8\x03\x9d\xb8\x5f\xdd\x59\x5d\xf7\x6d\x95\xd3\xa4\x80\x3f\x4d\x5f\xed\x07\x77\xa0\x1b\xb6\x6e\x02\x77\xc2\x04\x4b\x12\x2e\x61\x60\xb2\x35\x9f\x24\x70\x11\xe1\x22\xca\x26\xba\xa3\x69\xdc\xb8\xe0\xc5\x45\xda\x9c\x52\x31\x39\x7d\x1e\xde\x9d\x27\x65\x8e\x53\x0f\xfe\xd4\xdd\x21\x8c\xb3\xa6\x2f\xef\x5e\x42\x2d\x25\x1c\x21\x8e\x44\x48\x58\x0b\x71\xe1\xd7\x5e\x23\x65\x47\x0f\xd3\xb5\xf7\x3d\xd1\x8b\x8e\x6d\x1b\x31\x2c\x69\xf4\xa3\x9b\x89\xde\x92\xe0\xcd\xbb\x97\x77\x45\xab\x56\x7c\x51\x3e\x7a\xf8\x01\x8a\x18\x4c\x4f\xcf\x30\x27\x7a\x9b\x6c\x14\x15\x88\x1a\x22\x3b\x0d\x45\x8b\x65\x43\x00\x9e\x89\x83\xca\xee\x29\x86\x45\x42\xd8\x03\x48\x84\x22\x59\x3c\x65\x2d\x4e\xf7\x33\xf5\xa3\x95\x83\x19\x71\x8f\xbe\xc7\x56\xb3\x80\x13\x88\x36\x1c\xe5\xa0\x8d\x5a\x23\x91\x02\x71\x3d\x3c\x88\xb2\xc4\x52\x67\x44\xc8\x47\x91\x62\x80\x60\x65\xbe\xd2\xb2\xc4\x56\x8c\x59\x29\x4f\xb9\x40\xe9\xe2\xb9\x3b\x0a\xb1\x3f\x54\xc2\x38\x73\x29\x48\xbe\x09\x66\x13\x49\x39\x42\xc7\xbd\x4c\x4c\xdf\x4e\x88\x88\x23\xf6\xd8\x93\xa0\x0d\x94\xa2\x10\x75\x50\x64\xb4\x8a\x1f\x27\xa3\x73\xfc\xf8\xdc\xc7\xdd\xf8\xa1\x50\xa4\x68\xbe\x6c\xc8\xa9\x42\xc7\x2e\x82\xd9\xf1\xe4\x76\x78\x78\x91\xca\x0e\x24\xf6\xc0\xb1\xc1\xc3\x1d\x87\xaa\x51\x89\x88\x1d\x40\xc8\x77\x46\xd6\x08\x05\x8b\x2e\x32\xfd\x38\xbc\xe8\x77\xdf\x08\x45\x70\x1c\x12\xd4\x41\x2a\x04\x09\xaa\x86\xaa\x38\x26\x08\xbd\x4c\x65\x51\x80\x71\x53\x8f\x10\x0a\x9e\x91\x8f\x88\xfd\xe9\x30\x99\x39\x44\x42\x60\xbb\x68\xa7\x49\xe7\x09\xc9\x6d\x5e\xdb\x5a\xc2\x15\x4a\x4a\x25\x5b\x01\x75\x6c\x49\x6e\x17\x35\x88\x27\xea\x8d\x58\xab\x48\x56\x7a\x12\x62\xc8\x33\x58\x25\xd5\xa8\x19\x84\xe4\x31\x83\x49\x4b\x38\x25\x06\x2b\x4f\xef\x9a\x20\x24\x22\xad\xee\x40\x6d\x4b\xab\xcb\x12\xda\xea\xaa\x83\xa4\xc1\x48\x5c\x05\x51\x9f\xea\x49\x88\x52\xa6\x69\x0d\xb4\x88\x2f\x18\x33\xd3\x4a\xea\x29\xd6\x52\x0c\x48\xa6\xa6\x95\xb2\x9a\x66\xb7\x51\x36\xb8\x8b\x9f\x32\xd7\x4a\x6b\x96\xd1\x2f\xad\xad\x8b\x22\x69\xbd\x24\xe9\xb0\xe9\xb1\x7c\x6f\x60\x34\x3e\xe1\xc5\x68\x73\x4f\xd4\xa0\xb4\x39\x15\x19\x19\xf9\x62\x28\x74\x3d\x9e\x90\xc4\x68\xbc\xaa\xf1\xdb\xf2\x9f\xc4\x47\x8b\x69\x8b\x4a\x49\xd4\xa4\xa6\x54\xaa\x87\xe4\x90\xb6\x4c\x1f\x38\xc7\x77\x29\x50\x48\x07\xe9\xdd\xa4\xc4\xd1\x24\x70\x8b\x2d\x93\x85\x6a\x0d\x82\x64\x0e\x03\xa0\x39\x85\xfd\xe7\x42\x4b\x75\xa9\x0e\x6c\x39\x02\x8e\x04\xc9\xc1\x64\x83\xda\x48\x71\x81\x32\xa8\xd4\x7a\xa6\x12\x0c\x49\x04\xb4\x42\x84\x13\x73\xa5\xcf\xc4\x90\x78\x86\x36\x91\x82\x04\x5e\x09\x95\xe6\x47\xea\xe5\x1e\x20\x63\xa4\xbe\x5c\xce\xd8\x36\x53\x03\x1b\x92\x8a\x9b\xa4\x2d\x24\xb9\xba\xea\x90\x9b\x68\x84\x68\x30\xc9\x5b\xda\x93\xcf\xb3\xb7\xa9\x7f\x3c\x38\xf4\x94\x37\x53\x4b\x5c\xbf\xa0\x18\x58\xfa\xa3\x94\xa4\x3f\x4a\xe4\xf1\x85\x87\x91\x09\xd2\x22\xaf\x24\xca\x7a\xf9\xe1\xe1\xd2\x89\x53\xd8\x87\x4b\xb2\x0c\x92\x70\x8b\x2c\xe8\x09\xbe\x48\x3f\x9f\xc4\xcf\x21\xe9\x25\xed\x77\x53\xe9\x57\x4e\x08\x73\x0d\x24\xfd\x64\x2a\xd5\x63\x80\x11\x2c\xdf\x13\x19\x36\xaf\xc2\xb3\xcc\xb1\x52\x75\xa7\x50\xef\x9a\xd0\xa8\x44\x9a\x76\xc5\x03\x22\x6a\xd7\x47\xac\xe0\x0a\x94\x8b\x7e\x05\x57\x59\xe2\x48\x15\xf2\x6d\xaa\x56\x01\x6a\x28\x4a\x4e\x33\x29\x45\x4c\xa4\x2a\x54\x0b\x26\xfa\xee\x87\x45\xbb\x4a\x73\xc5\x4b\x89\x4c\x21\x40\xa7\xf6\xcc\x32\xe7\x4a\x38\x56\x07\xf0\x12\x15\xc3\xfb\xd5\x71\xd3\x86\xd9\x76\x71\x78\x84\x62\xf9\xd7\x0e\xd9\xcb\xc6\x50\x8a\x4b\xfa\xa3\x56\x96\x1c\x4e\xc4\xe8\x0b\x39\x34\x5d\x67\x0c\x18\xad\xd3\x5f\xaf\xd7\x1c\x1d\xa9\xca\xe7\x29\x71\xfd\xaf\x69\x07\xf8\x7f\x6c\x5d\xd9\x7a\xf3\x2c\xaf\x3d\xef\x5d\x12\x9b\xd8\x7c\xc5\xe0\x97\x21\x6d\x7a\xf5\xfb\xd1\x92\x04\x22\xff\x3e\x48\x58\x0b\x33\xcf\xa3\xf8\xd7\x03\xff\xc7\xc8\x93\xd9\x7f\x1d\x49\x80\xa8\x14\xf7\x40\x91\x2e\x2c\xee\x41\x01\x17\x8a\xe2\x1e\x9d\xf3\x84\x46\x70\x50\xea\x50\xcf\x80\x51\x64\x71\x95\x1b\xce\xe2\xda\x89\x98\x30\x40\x4c\x0a\xcb\x2f\x21\xf0\xf2\x68\x3d\xcb\xc3\xc7\x39\x8f\x2c\xdc\x92\x92\xb2\x6a\x16\x51\x2b\xab\x1c\xa3\xb2\xe1\xcf\xc9\x54\xb7\x6c\x28\x17\xa4\x20\x09\x00\xd8\xe6\xa6\xfb\x27\x84\x4f\xd1\x3b\x7d\x75\x0a\xe4\x8b\x1c\x7f\x06\x96\x09\x43\xd9\xce\x9b\x5b\xd8\xb2\xe5\x14\x0e\x5e\xc7\x52\x8c\x89\x2a\x72\xa7\xf8\x6f\x6d\x3f\x8b\xe7\x9e\xb9\xf8\x3c\x8d\xfc\xfd\x21\x75\x10\x6e\x0c\x3e\xcb\x81\xd3\xa6\x8a\xda\xd0\x6b\xa2\xf7\xfe\xe2\x03\x9e\xf8\x47\xdd\x2a\x07\xaa\x37\x29\x23\x71\x8e\xe2\x5e\x4e\xac\x40\x86\x99\x00\x75\xba\x7b\x75\x11\x0d\x6d\x09\x34\x56\x67\x10\xf5\xc3\xd6\xa3\xac\x18\x95\xb0\x07\x9f\xd8\x6a\x38\x72\xdc\x19\x68\x2c\x02\x0f\x4a\x4a\x48\xaa\xec\x5e\x40\x51\x1d\x0d\x98\xcc\x87\x4a\x18\x73\x9b\x12\xee\xcc\x49\x1e\x1a\x97\xbc\xf2\x5f\x96\xf4\xfc\xc6\x1f\x8e\x40\x10\x18\xe3\xe6\xc2\x93\x98\xf2\x8d\x3a\x48\xca\xec\xd9\x98\x8d\x71\x25\xd1\x61\x58\x4a\xc8\xb7\x6f\x77\xe4\x29\x60\xf9\x3e\x33\x7f\xd5\x6f\xa8\x73\xe5\xbb\xf2\x90\xa4\x7c\x57\x5d\x52\x2a\xdf\x98\x24\x15\x14\x27\xee\xb1\xd1\xda\xaa\x5a\xef\xf0\xad\x44\xb6\xc6\x40\x38\x96\x98\x91\x30\x52\x9d\x5c\x39\xf8\x17\xda\xd0\x82\xeb\x3c\x00\xd2\xf0\x17\x0e\x59\xee\x4f\xa9\x92\x85\x5b\x5d\x52\x54\xe5\x38\x02\x48\x7e\x53\x8d\x46\x5b\x52\xb4\x06\x93\x3a\x3e\xf2\x24\x88\x81\x64\x40\x09\xe2\x3c\x80\x49\x49\xe1\x33\x2d\x79\xe9\xa3\x14\x0c\xb5\x49\x79\x70\xab\x4a\xf0\xe9\x10\x0b\x76\xbe\x7a\xe9\x41\x05\xc1\x36\xd6\x82\x4b\x3d\x31\x32\x85\x2a\x40\xbb\xac\x52\x47\xfd\xaa\xe7\x18\xd2\x97\x1a\x6e\x3d\x73\x42\xac\xdf\x41\x5c\x00\x32\x4d\x02\x69\xa0\x85\xc5\xd2\x5f\x69\xee\x60\x7d\x6a\xfe\x1d\x06\x00\x78\x12\x83\x15\x6d\x1f\xda\xe8\xdd\x04\x36\x85\x1a\xaa\xc6\xb9\x41\x43\x7a\xf9\x96\x0e\x17\xc5\x32\x26\x46\x45\x7a\x03\x9a\x2e\xb2\xfa\x2e\xa2\xec\xf9\x12\x34\x57\xd5\xc0\xba\xea\xcf\x29\xb1\xb2\xb7\x60\xa8\x2f\xea\xbb\xc6\x4c\xa5\xf0\x70\x8e\x3f\xfd\x85\x1b\x25\x93\x3e\x54\x17\x63\x90\xb9\x5f\xdd\xf0\xc7\xb5\xaf\x62\x27\x02\x20\xf2\x47\x61\x28\x75\x75\xeb\xb8\x3e\xc3\xae\x33\xe3\xdc\x17\x3c\x52\x97\x57\x01\x91\x87\xf5\x3c\x02\xaf\xc1\x00\x31\xc0\x6c\xa5\xfe\x87\xde\xb2\x7e\xe3\xcf\xf1\x89\x2d\xc0\x34\x20\xbb\xf3\x1d\x86\x0e\xd7\xa5\x9a\xb1\xf1\x30\x10\x42\xc7\x3e\xe7\x84\xf8\x56\x2e\xfe\x15\x97\x27\x44\xe5\x3a\xa5\x10\xda\x88\x48\x75\x1b\x9a\xae\x5a\xb9\x6c\x43\x2d\x02\xc4\xf1\xea\xaa\xeb\x68\x75\x6b\x95\x46\xa2\x56\xdf\x55\xad\x6c\x2f\x48\x42\xd5\xf0\x64\x45\xd3\xaa\xea\x81\x07\xc6\x92\x6a\xd5\x8c\xc7\x6a\xc5\x22\xa2\xbb\xf1\x05\xae\x34\x87\xb6\xb2\x36\xf7\x0b\x45\xce\xfa\xca\xcb\xa8\xac\x70\x91\x21\xa4\x9b\xbe\xcc\x64\x8c\x4c\x70\x8c\xf2\x88\xe8\x78\x86\xb0\x4c\x89\x00\x83\x8c\xc7\x41\xf8\xad\x28\x26\xec\x9f\xac\xd7\xe1\x38\x24\x2b\x23\xab\x5b\x78\x3e\x59\x95\x9d\x05\x42\x38\x60\xe0\xe4\x3b\x8f\x8f\x6a\x0b\x1c\x8d\xbc\xb9\xb2\x85\xc4\xbb\x3a\xb5\xe5\x5d\xdc\xc9\x61\x37\x31\xcc\x61\x1f\x16\x45\x18\x2c\x43\xff\xcb\xa8\x97\xc7\x08\x43\x97\x2a\x42\xc9\x86\x6e\xb0\xb9\x1d\x0d\x62\x43\xc9\x6b\xdb\xc9\x42\x68\x26\xe4\x16\x1c\x2c\x7f\x2b\xfa\x65\xe0\xc5\xa6\xc9\x1d\x62\x3c\xb9\xc5\x6b\x17\xdf\x6a\x64\xac\x79\x01\x17\x31\xa0\xab\xa5\x6d\x3b\x7f\x38\x1f\xd0\x7c\x34\x1f\x1d\x0f\x0c\x9b\xe7\x15\x48\xa8\xfc\xa9\xf0\xff\x93\xe6\xe6\x01\xb5\x14\xf7\x5f\xe2\x00\xb3\x49\x50\xae\x76\x46\xa3\xa4\xb8\x4d\x8c\x82\x26\xf8\xef\xc3\x81\x3f\xe3\x80\xc6\xd3\x97\xe0\xc5\xcf\x64\x9c\x4d\xea\xd0\x5b\x0d\x22\x5d\x4f\x7e\xbf\x87\x57\x0d\x94\xf1\x67\xfc\x87\xb8\x23\xba\x21\x39\xcf\xea\x8e\x99\xc4\x58\xf1\x90\x5e\xb6\xf1\xb2\x29\xe7\x37\x8d\x9e\x61\x1a\x53\xff\xc6\x45\xb1\x15\xae\xac\xad\x04\x88\x80\x1c\x68\x04\x52\x28\x27\x27\x93\x37\xc3\x4d\x14\x2f\x0e\xe0\x52\x3a\xa3\xb9\x9d\xa5\x8c\x8b\x4d\x09\x7a\x55\x91\x89\x9e\x52\x07\xbb\x72\x12\x84\x02\x53\xc4\x7e\x4e\x6a\x3e\xeb\x14\x95\xe0\xa8\x7e\x44\xa4\xca\xb5\x4a\x23\xe4\x86\xf7\x28\x61\xa5\xc9\x3f\x3c\xd7\x44\xd1\x54\x69\x52\xf2\xa8\x4e\x40\xd5\xb4\x68\xb2\xc0\xd1\xfa\xd8\x0c\x6e\x7a\xbc\x84\x61\x1a\x06\xd8\xe9\x2e\x6b\xbd\xed\x0f\x2d\x71\xc3\x90\xb2\xfd\xf1\xb6\x74\x7f\xd0\xa7\xbe\xe3\x2f\xea\x0e\x16\xa0\xb8\xd3\x79\x34\xdc\xc7\x7e\x40\x8f\x2f\xea\xd3\x3a\xaf\x04\x75\xdd\x49\xe9\xb2\x76\xd2\xd1\x41\xab\xe4\x3f\x20\x7c\xae\x7c\x2b\xf1\x72\x1d\xc3\xcd\x17\x5f\xbd\xbd\x20\x82\x9c\xfe\xc9\xaf\x17\xde\x03\x47\x17\x4c\x3d\xfb\x0f\x4f\x4c\x7f\xbe\xe7\xc4\xf4\x87\x57\xbd\x28\x13\x7e\x65\xd2\x42\x6a\xb8\xfd\x0e\x78\xf1\xbf\x13\x45\x2a\xc6\x6f\x18\x4b\x9d\xbf\xe1\x0a\xaa\xfe\x59\x4d\xae\x19\xbf\xe1\xea\xe2\x06\xe6\x23\xbf\xa1\xe2\x85\x26\x86\xdf\xa1\xb0\x73\xbf\xd0\xf8\xf1\x18\xa1\xbc\xc9\xb7\xb7\x48\x20\x03\xa2\x08\xbf\x79\xf3\xe2\x0d\x31\x4e\x28\xdc\x6f\x94\xb3\x77\x2e\x38\xf1\x07\xc4\x91\x7a\x67\x6d\x97\xdf\x37\xaf\x77\xbc\x6f\xac\xfb\xbf\x71\xf8\xff\x72\x7f\xce\xef\xdc\xda\xfd\xf1\x7e\xca\x1f\xb7\x6c\x7f\x3a\x19\xf8\xdb\x33\x1c\xc7\xf2\xff\xdf\x18\x07\xff\x69\x39\xfc\x1b\xcd\xe9\x5f\x47\xe2\xfc\xf5\x82\x81\xec\x1f\xbb\xf4\xf8\xba\xb6\xaf\xcb\xe3\x06\xf6\x85\x76\xdf\xbb\x9d\x46\x57\x50\x20\x3e\x95\x61\xfd\xc1\xd6\x06\x55\x13\xbe\x8c\x4d\x50\xcb\x9c\xa7\xa6\xcb\xf3\x9a\x31\x14\xd6\x0b\xe3\x2b\x0e\x6d\x11\xc0\x91\xab\xcb\x3b\x2d\x25\xde\x25\xb6\x84\x6b\x35\xa2\x8e\xde\x8d\xe9\x6c\x9a\x99\x0f\x2c\xff\x77\x28\xe3\x92\x35\x69\xa8\x67\x54\x71\xbd\xab\x91\x43\x53\xfb\x5c\xe5\x12\x16\x47\xf0\x21\x50\x4a\x54\xeb\x5d\x1d\x35\x8c\x71\x11\x10\xe4\xf0\xd8\xe5\x1d\xbe\x35\x9c\x2a\xbd\x20\x2d\x8e\x13\xb1\x8d\xc8\x43\x72\x02\xa9\x54\xae\xfc\xe6\xae\x37\x64\x79\x93\x7f\xd4\xb6\xf9\xed\x74\x89\x9a\x2d\x01\xd2\xf6\x0c\x26\xce\x30\x45\xe3\x2b\x78\xe8\x52\xcd\x15\xd4\x14\x69\x09\x17\x86\x80\x13\xcc\xe3\x51\x5c\xe1\x3c\x0e\x99\x36\xe7\xc0\xc4\x6f\x67\xe0\xa6\xc3\x53\x7d\xf5\x5b\x0c\x7f\x12\x6c\x5d\x09\xf2\x34\xaf\xa5\xe2\xe9\x77\x47\xa5\xca\xef\x28\x08\xbb\xe3\xb7\x59\x05\xc1\xed\x7d\x8f\xf3\xb8\xff\xe5\xf7\xe0\xf8\x7f\x7b\xb3\x8a\x77\x31\x11\xac\x41\x1a\x93\x24\x2a\x04\x7a\x8a\x81\x66\xdc\x91\x88\x02\xd5\x85\xfd\x59\x46\xd5\x44\x00\xd7\x39\x21\xec\xff\xc6\xff\x4e\x32\x7b\x1f\x63\x1e\x82\x1c\xeb\x1d\xcd\x16\x29\x19\x8a\x0d\xb1\x0d\x70\xe2\x98\xe5\x8d\x9b\x5f\xbf\xab\x30\x00\x85\xaf\x19\xf8\x36\xc2\x85\xc2\xb1\x47\x07\x16\x3d\x2c\x76\xb4\x73\xac\xaa\x0b\x3d\x46\x13\xaf\x4e\x23\x0c\x9a\xf3\xa1\xb9\xf0\xfe\x5b\x5c\xf6\xe5\x1b\x05\xd3\x97\xba\x9d\x0e\xa9\x26\x39\x26\x73\x5d\xef\x65\x03\xcb\x13\x39\xdc\x23\x34\x56\xb1\xb1\xe2\x0f\x37\x0e\xd2\x10\xe6\x88\xe8\xab\x88\x84\x76\x8f\x51\x01\x21\x39\x1e\xe3\x0f\xa7\xc7\x61\xfc\xe1\xf8\x05\x46\x42\xfc\xf4\x22\x21\x3c\x0b\xcd\x47\xd4\x2e\x96\xd7\xc7\x2e\x44\xab\x49\x03\xc6\x5d\xdc\x8b\xd9\x86\x22\xca\x53\x66\x06\x6f\x42\xee\x1c\x43\x35\xb8\x69\xad\x80\x46\x1d\x96\xaa\xa3\x41\xbc\xe7\x70\x32\xe2\x3b\xae\x40\xd4\x8b\xb3\xca\x1a\xc5\xb1\x06\xfa\x7c\x7f\x38\x3e\xfe\x07\x64\x0e\xd7\x08\x9d\x1f\x78\x2d\x9c\x29\x07\xaa\xf1\x71\x02\x41\x6c\xa7\x89\xa3\x78\x08\x92\x00\x1e\x82\xbc\x3c\x4e\x34\x5f\xfe\xe0\xb7\x91\x01\xa8\xac\x1e\xf9\x84\xbd\x12\x54\x21\xa7\x47\x05\x0d\x68\xeb\x82\xec\xb7\xf8\xc0\x61\x60\xbd\x8a\xa4\xa1\x00\xa1\x34\x45\x17\x7d\xdf\x18\x5d\x28\x35\xa3\x39\xc2\x83\x02\xac\x93\xb6\x93\x4f\x22\x0c\x2c\xc5\x45\xe8\x9b\x21\xf5\xa8\x50\x91\xda\x51\x96\xb4\x08\xc8\x51\x2a\xc0\x9d\x23\x4d\xf0\x12\x27\x35\x54\x8e\xdf\x05\x20\xd4\xb2\x38\x87\xe9\x1a\x84\x21\xd1\x3f\xaa\x53\xf4\x8d\xbf\xf9\xbf\xc0\x1b\x65\x3e\x06\x0c\xab\xbd\x3c\xc7\x4e\x20\xeb\xc8\x48\x30\xaa\x16\x41\x09\x1e\x50\x53\x84\x32\x1d\xf1\xd4\xf7\x85\xfe\x5c\xd6\xff\x7c\x8c\xe1\x19\xfb\x98\x5a\x7b\xd9\xd8\x80\x8a\x1c\x8f\x31\x6b\xb1\x89\x7a\x0b\xe0\xf2\x31\xef\x9e\x3d\xcf\x5c\x80\x71\x5b\x4e\xbe\x84\xf1\x85\x03\x90\x77\x69\x94\x63\xde\x8b\xbb\xdc\x44\x6d\x98\x40\xf8\x30\x0c\xf4\x31\xc7\x9c\xda\x29\xd9\x24\x6e\xc1\xe9\xb9\xc0\x45\xf8\xc0\x77\x2e\xdb\xb1\xcd\xbe\x32\x72\x71\x8b\x8d\x45\x9a\x5c\x1e\x87\xa2\xa1\x47\x11\xc2\x09\x76\x56\xa4\x6d\xbc\x1e\x05\xcb\x98\x0c\x46\x74\xa9\x79\xa4\xd6\xef\xe2\xbf\x00\x5b\xd9\x74\xac\x20\xa3\x5f\x25\x96\x76\xa4\xd9\x95\x97\x79\xcd\xe0\xbe\x18\xd2\x26\xfe\xfb\x30\xf8\x37\x0c\x2e\x5f\x86\x36\x3c\xaf\xee\x0c\x8f\xaf\x8b\xc6\x91\x3e\xf1\x31\x4a\x52\x31\x1c\xc0\x29\x2f\x1c\xf2\xe2\xa8\x60\xa3\x30\x30\xfa\xd7\x43\x52\xdd\x82\xd1\xac\x4f\x68\x3f\xd3\x6e\xee\x22\x09\x45\x3c\xd3\xee\xa3\x7f\x71\x03\xc0\x07\x44\x7c\xa2\x4e\x03\x7b\xe5\x80\x6a\x8e\x9b\x5b\x76\x1c\x87\x7c\x01\x90\x72\x29\xc8\xc9\x5e\x86\x79\xf3\x68\x29\x19\xe7\x6d\xeb\xfc\xa5\x4e\xc9\x7b\x4c\x59\x5f\x16\x84\x7c\xca\xb7\xc3\x9a\x04\xa1\x53\x9a\xc8\xc4\x07\x31\x48\x2d\xa7\x3b\x44\xaf\x6e\xa7\x17\x67\x72\x6d\x34\xb0\x25\xc8\x76\x65\x4f\x46\x74\x58\x39\xfd\x8b\xab\x4e\xaa\xad\x74\x4d\x77\x10\x8e\xf9\x32\xa8\x02\x1b\x66\xf0\xb2\x21\x84\xbd\x48\x2f\xc9\xa8\x29\x62\x2b\xb2\x2f\x4e\x80\x26\x8b\x10\x6a\x89\x19\x1b\xe4\x72\x25\x4e\x58\xae\xc8\x69\xf6\xdc\xa9\xe3\x8f\x4a\x0f\xe7\x60\x0f\x35\xb0\xd9\x37\x34\x6e\xb7\xf1\x00\xd9\xdf\xbe\x84\x5d\xe0\x29\x89\x7d\x97\xfc\x70\x3c\x4f\xf7\xff\xbe\x2e\x5f\x1e\x25\x63\x72\xe0\xcb\x86\x3f\xec\xf7\x70\xa8\xcb\xe6\xee\xe6\x92\x22\x0e\x1b\x60\xbe\xbb\xf8\x51\x36\x2a\x37\xda\x42\x16\x2e\x77\xa4\xcc\xb2\xca\x6c\x7c\x78\x43\x3d\x5d\xda\x31\x43\x98\xb8\x28\x69\x03\x98\xfa\xc4\x1a\x97\x04\x07\x5b\xd5\xbe\x6c\x61\x8e\x97\xcb\x16\xcc\xf0\xb5\x6c\x7d\xad\x74\x43\xe3\x12\x92\xbb\x9a\xe3\x10\xe1\xdf\xe3\x25\x0d\x02\x98\x3f\xcf\xe2\x5f\x0e\x6c\xdd\x01\xb1\x12\x36\x57\x6e\x00\x9a\xfb\x23\xa9\x39\x70\x41\xdd\xc0\x36\x8f\x2f\x81\x8b\x1d\xb5\xbf\x68\x71\x0a\xc6\x1b\x25\xb4\xbc\xf1\x11\x47\xcf\x97\x93\x8c\x67\xdf\xf8\xe3\x6c\x41\xbd\xe0\xb5\x75\x5f\xb8\xfd\x2b\x7c\xf4\x8c\xaf\xce\x5c\xbe\xe4\x03\x33\x75\x5f\xf2\x1d\x5d\xfa\xe6\x06\xaf\xa0\x91\x2c\xf9\x2f\x73\x13\x5e\x4a\xe0\x73\xc9\x40\x3c\xd6\x2b\xe5\x2d\x8b\x3c\x02\xb9\xc6\x96\xf2\x6e\x67\xee\x38\xf5\x84\xad\x1f\x5f\x37\x8c\x6e\x49\xe1\x7c\xaf\xbb\xbb\x50\x53\xea\x3c\xd3\x0a\x4a\xad\xe6\xdb\x51\xe1\xc6\xa4\xd2\x57\x3d\xc6\x8c\x40\x11\x3b\xdf\x68\x94\x2a\x84\xb4\x49\xb1\x64\xa2\x46\x78\x39\xce\xd7\x13\x7f\xc5\x3f\xbc\x7f\x7b\x26\xfd\x70\xae\x2a\x42\xff\x58\x4f\x48\x09\xc2\xab\xfa\x6f\x3e\xf9\xea\x2b\x92\x5b\xb3\x9e\x19\x62\xc9\xf0\x1a\xa8\x29\xfa\x5b\x0c\x73\x69\xad\x89\x27\xad\xbe\xe6\x07\x6a\x69\x65\x2c\x23\xb6\xca\xe3\x35\x8e\x65\x96\xd2\x50\x65\xdc\x66\x20\xbb\xb0\x65\x49\x01\x1d\x12\xd4\x7c\xb8\xda\x8a\xda\x3f\xa2\x77\x0c\x92\x6b\x32\x4b\x11\xc2\x0e\x48\x4f\x5c\x45\x82\x89\x36\x81\x55\xde\xc1\x1a\x48\xad\x82\xb0\x09\xf6\x97\xa5\x9d\x70\x1c\xb4\xd9\xac\xf9\xf6\xee\x9b\x81\x0c\xdd\xaa\x08\x3c\x21\x54\xfc\xd6\x24\x7c\x22\x67\x96\xa0\x9e\x11\xf5\x58\xca\x8d\x81\x47\x36\x42\xc4\x78\x3b\x73\x71\xbf\x03\x0e\x6d\xc9\xe3\x7f\x5d\x62\x83\xe0\xf0\x7a\x34\xa9\x5a\xba\x2a\x0a\x76\xad\x9e\x97\x6b\x7d\xad\xc1\xf7\xc2\x86\x43\x12\x45\x6d\x4b\x73\x56\x2b\x6e\x4a\x11\xe8\xe2\x20\x0e\xba\x78\x5e\x46\xf6\xb5\x85\xbf\x0c\x95\xba\x75\x8a\x2a\x0d\x20\xa4\x6f\x69\xee\x91\xa5\x71\x60\x08\x27\x9b\xa3\x6c\xed\x6c\x60\xe3\x37\xac\x14\x16\x31\x70\x96\xac\x87\x8e\x89\x86\x94\xdc\xc3\x95\x85\x0c\xc7\x0a\x4e\xdb\xfb\xe6\x9e\xfe\xc2\x6e\x89\x6f\xee\x70\xd1\xfd\xbe\x19\x8a\x0e\xb5\x79\x12\x2a\x53\x1a\x9a\xe3\x30\x8f\x77\x7f\x40\xfc\xad\x46\x97\xe3\xf6\xbe\xf1\xac\x9c\x14\xed\x90\x05\xff\x79\xc5\xa3\x86\xb4\x31\x57\x05\xfa\xb3\xfa\x79\xe3\x3a\x05\xac\x97\xfd\x2d\x9d\x16\xc7\xe9\x7f\x66\x68\xa3\x80\x74\x0c\x05\x32\x67\xd9\x44\x21\x13\x06\x90\x45\x50\x00\xe2\x92\x16\x23\xae\xdb\x82\xb8\x79\x6a\x6e\x24\xde\xc7\xda\xec\xa2\xc3\xa9\x70\x49\x68\x2f\x2f\x4e\x8e\x16\x00\xab\x92\xf7\xb9\x90\x51\x1a\x66\x65\xa1\x09\x15\xae\x00\x7b\x2d\x34\xf7\x29\x0a\xce\xb9\x01\xe5\x32\x80\x59\xb8\x80\x46\xbd\x79\xb1\x16\xac\x4c\x2b\xc5\x49\xba\xdd\xe7\xbb\x0e\x80\xd9\xb8\xc2\xa1\xad\xf6\x23\x9f\x8b\x13\xc8\xe1\xe6\x6b\x28\x6a\x56\x24\x75\x01\xd7\xf7\x76\x6a\x33\xd1\xc6\x14\xae\xb9\x6a\x0b\x6c\x35\xa3\x68\x30\x4d\x81\xe6\x4a\x95\x92\xdf\x4e\xcf\xa3\x4c\xc0\x61\x00\xd0\x0b\x96\xea\x4e\xb3\xfa\xd8\x75\xd8\xd1\x1c\x52\x6e\x22\x76\xe4\xf7\x1d\x3d\xfb\xfe\x97\x39\xdb\x20\x42\x9c\xef\x3a\x4d\x56\x05\x23\x1e\xe2\xeb\xd2\x9b\x40\x92\x13\x2b\x52\xc5\x80\xd4\x66\x1e\x37\x53\x0c\x79\x2b\xe3\xd2\x89\x96\xf4\x6b\x6d\x52\xa5\x96\xb3\x5c\x4c\x02\x34\xe8\x83\x93\x27\x55\xe1\x28\xd9\x79\xd2\xfc\x5f\x90\xbf\xf2\x11\xf3\x83\x53\xfe\x74\xaa\x2d\x25\xe6\x44\x7f\x28\x6d\x5b\x3b\xfd\x11\xc5\xa0\x4f\x3a\xff\x6c\x67\x80\x98\x02\xc0\xcc\xff\xbb\x28\xb6\x44\x11\xe5\xae\x0c\xf0\x6f\xc0\x11\xf8\x33\xb7\xe2\x7f\x35\x8c\xf9\x97\x87\x6d\x84\xde\x0f\x9f\xfe\x7c\x1a\x74\x3b\x23\xa7\xdf\xc9\x4e\xbf\xa3\x28\x6e\x80\x11\xba\xf7\x58\x86\x61\x2c\x16\xdf\xd1\xba\xf9\x8e\x9b\x6b\x7e\x3b\xb3\xda\xdf\xf3\xed\x04\x4e\x33\xa7\xbf\x9b\x4f\x79\xf0\xe4\xee\xb3\x9d\xce\x98\xb8\x5d\x71\x0f\xaf\x9e\xb5\x12\x50\x03\x17\x9f\xee\xf2\x96\x32\xc0\x35\x26\x6c\x5d\x1e\x24\x54\x32\x46\x53\x2d\xcf\x0c\xe4\x90\xe5\xf4\xbe\x54\x85\x05\xa9\x19\xc5\x45\x9e\x2e\x48\xe3\x5e\x46\xb3\x22\x17\xf2\x18\x55\x56\xa5\xeb\x6f\xc5\x5c\x7a\x60\xc6\x99\x52\xa4\x72\xc8\x30\xa3\xe9\x58\xa7\x99\xd1\x06\x6e\xdb\xd0\xbf\xe6\x5e\xc9\x29\xec\xee\x2f\x73\xfb\x56\x72\xc2\x5d\x2c\x42\xba\xd0\x23\x70\xac\xf3\xb4\x62\xe6\x39\xad\xe4\x51\xcf\xe5\x45\xb4\xcb\x43\xe4\xee\xe5\x69\xe2\xf0\x43\x2e\xfc\xf1\x60\xee\x6f\x0c\xe6\xfe\x7c\xe1\x09\x31\x01\x44\xea\xaf\xff\x39\x51\xa8\xfa\xfc\xfd\x39\x29\x9c\x7f\x7f\xb9\x05\x8c\x1d\x05\x51\x5c\x9f\x5f\xd7\x73\xff\xba\x8e\xaf\xeb\x20\xa5\x7c\x5d\x47\xfb\xba\xa8\x18\x87\xaf\x2b\xb8\xfc\x43\xff\x58\x6c\x08\x72\x75\x88\xa6\xaa\x38\xa6\x1f\x36\xf7\xf3\x90\x16\x19\x67\x8a\xc3\xc6\xd7\xa3\x02\xef\x4f\x86\xed\x84\xf8\xdb\x2b\xf0\xfb\xf9\x50\x59\xc1\x7f\x81\x1b\x25\x3b\x1a\xfc\x9e\x81\x6d\x4e\x4a\x85\x03\xfc\xba\xd1\xfe\x03\x27\xc7\xb7\x23\x0d\x6b\x4a\x0e\xb9\x1a\x45\xec\xe1\x36\x1a\xa1\xf6\x41\xf9\x29\x46\x21\xa3\x71\x01\x55\x6d\x99\xc2\x31\x1e\xa7\x18\x26\xe5\x40\xcb\xc8\x30\x38\xcb\xf4\xd3\xbc\x09\x04\x1a\xca\xd6\x83\xb8\x31\x6e\xf5\x85\xe5\x56\xdf\xf0\x63\xb9\xe8\x27\x1a\x49\x8d\xcb\xac\x9a\x71\xaa\x2d\xb4\x8e\x59\x00\x6b\xdc\x6a\x23\xd7\x4b\x51\x8f\xf9\x7a\x08\x29\x78\x7f\x68\x21\x7a\x2c\x02\x5a\x1d\xd3\xd1\x30\x2e\x12\x12\xda\x7d\xe3\x97\x56\x98\x85\x5a\xe5\x2d\x16\xe5\x38\x5a\x68\x74\x64\x3d\x95\xb1\x04\x6d\x7f\x6b\x0c\xcc\x0d\x44\x50\xdc\x42\xca\xe9\x53\x03\x77\xfe\x47\xfe\xfa\x28\xbb\x18\x20\xe9\x15\x8a\x5e\x57\x20\x8d\x27\xaf\x74\x02\x06\xac\x7e\x30\x8c\x92\x06\xcf\x5c\x6b\x90\x58\xeb\x12\xaf\x60\x89\xf8\x31\x72\x91\x0f\xbc\x85\x6d\x29\x18\x63\xc0\x14\xcc\xe5\x48\xc6\x19\xc7\x7d\x09\x9f\xee\x11\x9a\x6b\x4a\xe4\x29\x5c\x66\x3e\x69\x49\x38\xc5\x75\x7d\xe3\x95\x49\xd0\x20\xb1\x20\x48\x85\xe2\xbd\x2d\x1c\xb1\xff\x32\x30\x3d\xe6\xa4\x26\xf8\x6b\xdf\x69\x74\x66\xb9\x92\x4e\x52\xa0\x86\x90\xab\xfc\x06\x11\x20\x4b\x91\xb8\x42\x8c\xc1\xda\x09\x29\x60\x93\xf6\xcf\xe4\xbe\x88\x09\x03\x56\x45\x6f\x84\x86\xe5\x46\x28\xb1\x4c\x33\xf2\xa0\x65\xf5\x76\xd1\xf9\x9c\x6c\xd1\xbf\x5d\x54\x9d\x91\x04\x46\x6f\x98\x2a\x72\x2a\x92\x99\x8a\x8d\x64\xca\xb7\x4e\x19\xe6\x64\xe0\xf4\xf8\xd4\x72\x4a\xc8\xa6\xd9\xe4\x6f\xa3\x61\x12\x41\x79\xd1\x46\x6a\x0c\xfa\x84\x8c\x50\x95\xa0\xb1\xbe\xa9\xb1\xc0\x1b\x1c\x4c\xab\x16\xbe\xfb\xad\x4d\xdf\xfd\x5e\xb2\xa7\xf0\x7b\x5d\x82\xef\x92\xf7\x6e\xea\xa0\x78\x26\x7d\x86\xc2\x91\x5e\x75\xb6\x0b\x95\x6a\xdf\xae\xf8\x98\x55\xa8\xfa\x91\x18\x35\x50\x5d\x53\x37\xd1\xf9\x00\xdd\x5a\x2f\x9b\x2d\x2d\x76\x27\x21\xcc\x6b\xba\x0a\x75\x42\x0a\x3e\x6a\x47\x6d\x34\x76\xb1\xe1\x9d\xb7\x78\x41\x7b\x39\xfc\xf0\xe1\x27\xe0\x60\x0c\x61\xd9\x7e\x00\x1c\x21\x13\xc9\x9c\x8a\xdf\x8a\x92\x2c\xd2\x09\x13\xd3\xbc\x5f\x41\x88\x37\x2c\x18\x49\x25\xe6\x79\x4c\xd8\x70\xf4\x80\xd3\x77\x77\xcf\xe6\x4b\xca\x42\x02\xe5\xc2\xfe\xc0\x61\xbe\xb0\xf3\x8b\xcb\x57\xd8\xb7\xdc\x71\x40\x30\xec\xbb\x7b\x43\xf1\xd0\xdf\xa3\xd7\xe7\xef\x94\xa1\x23\x55\xc8\xa9\x0e\xc6\xf2\x32\x98\x9c\xe2\xfe\xce\x0f\xfb\x30\xe2\x6b\x74\x80\x12\x1d\x82\x7a\xb1\x2d\xec\x3b\x3c\x7e\x06\x1f\x61\x17\x85\x7e\x3f\x3c\xbe\x1d\x1d\x4a\x90\xb3\xa9\x61\x0f\x5c\x3d\xf7\x28\x3e\x45\x7f\x40\xe1\x9e\x66\x4f\xea\xa8\x46\xfc\xce\x5c\x7c\xf7\x82\x93\x72\x61\x2f\xe8\xfd\xf7\x82\x03\x55\x61\x9f\x9d\x02\x84\x54\x49\xa8\x01\xb9\x62\xee\xc8\xa2\x5d\xef\x10\x86\xbd\x76\x08\x0e\xbf\xc2\xde\x38\x53\xf7\x86\xe3\xb0\x61\xff\xf1\xfe\x1b\x6a\x78\x7a\x55\x51\x1a\xf6\x1f\x19\xab\x84\xfd\x8d\xd5\xd9\x80\x54\xa6\x90\x1f\x38\xea\xc0\x52\xeb\xb9\xdd\x3d\x92\x9e\xc4\x0d\x47\x71\x1c\xaf\xa3\x60\x61\x92\x54\x09\xed\x59\x1c\xc5\xe3\xdb\xed\xd4\xea\x7d\x93\xa1\x6f\x4e\x9a\xef\x17\x8d\x9a\x90\xe4\x7c\xe5\x2e\xf0\x61\x55\x3c\x62\x70\x85\xb8\xfb\x1f\x28\xe2\x1d\xbc\x8f\x5e\x8c\xf8\x51\x7b\xa3\xc7\xc3\xd2\x17\x5f\xea\x0c\x51\xe4\x14\x5e\x21\x3e\x33\x3b\x1e\x5c\xf1\x89\xbb\x3a\xc2\x68\x0c\xf0\xd0\x01\x29\x8d\xff\x79\x5d\x9e\x51\x53\x1f\x21\xaf\x7d\x21\xba\x16\xa0\xf4\x9a\xb0\x0d\xf8\x67\x0c\x89\x67\x2d\x38\xce\x31\x5e\xfa\x09\xf1\x1b\x7f\x1c\xe2\x6f\x48\x9d\x21\x30\x3c\xfb\xe6\xb5\x4b\x00\x58\xfb\xce\xf8\xaf\xf9\x56\x55\x3c\xff\xe6\x83\x20\x04\x70\xca\x08\x00\xfd\x1e\x9a\x85\x18\xe5\xac\x5b\x88\x71\xc3\x1d\xa0\x10\x23\x2e\xe3\x87\x18\xfd\xd3\x77\x3e\x6d\x0b\x12\x72\x09\x02\x23\xaf\x23\x11\x9e\xef\x94\x2a\x7d\x0b\x4a\x12\x97\xe8\x6f\xbf\x8b\x23\xd2\x3a\x45\xc9\x8c\x28\xa7\xc5\x03\xdf\xb9\x0b\x38\x69\x3a\x46\x8f\x91\x9f\x3f\x11\xc0\xc6\x02\x96\x85\x04\x24\x46\xfe\x92\x6f\xe2\x68\xd0\x01\x49\x8c\x7c\xc3\x1f\xa0\x48\xac\x82\x8e\x06\x62\x0c\xda\xdd\x33\x54\x2f\xb8\x8f\x47\x67\xfb\xb5\x74\xba\x0c\xd5\xd8\xe8\x63\x09\x67\x49\x26\x2e\xe7\x51\xae\xfa\x0a\x10\xdf\xd2\xc1\x2a\x0f\x42\xe4\x88\x03\xab\x78\xaf\x4d\x30\x86\x1d\x7c\x32\x49\xf4\xa4\x7f\x84\xe0\x44\xcc\x87\x08\x16\x2f\xae\xd0\x88\xac\x1d\x5e\xdc\x1a\x5d\x0c\xe1\xd1\x95\xc4\x18\xa4\xe1\x8d\xf1\xd6\xef\x7c\x59\x99\x40\x50\x9d\xce\xae\x8c\x3a\x12\x47\x7b\x11\xe3\xcf\x89\x6b\x6c\x84\xb0\x9e\x44\xa0\x48\x3b\x15\x51\xfe\x66\xa5\xcb\x9c\x6f\xff\xba\x6f\xd9\x71\xd9\x2f\x9e\xab\x18\x08\x1b\xbb\x38\x33\x91\xcc\xd7\xb8\xbd\xc0\xb7\xa9\xc3\x25\xc3\xcf\x4b\x64\x02\x84\x4b\xa4\x29\x20\xe1\x29\x49\x2f\x1c\xef\x27\x05\x06\x29\xe8\xc9\xe1\xef\xc4\x7f\x41\x99\x4a\x9b\xe7\x53\x36\x01\x0f\xbc\x5f\x1c\x57\xde\x73\x0b\x69\x1f\x7b\x1f\xc1\x3c\xab\x4e\x33\x76\x6d\xc8\x93\x97\xcb\x44\x92\xa5\xc9\x17\x94\xa9\x34\xe4\x7a\x0b\xce\x5b\x2e\x2d\x6c\x58\x13\x11\x1d\x19\x34\x09\x79\x0f\x28\x46\xa8\xa0\x23\x9d\x93\xaf\x3f\x1e\xef\xaa\x5d\x01\x67\x97\x71\x6a\x49\x86\x07\x72\xeb\x2d\xa4\xd3\x51\x01\xe2\x41\x9f\x1f\x48\xbc\xf8\x18\x0a\xa6\xf0\xc0\x90\x2f\x85\x0d\x0d\x2c\xa9\x17\xab\xf9\xba\x3b\xa7\x7f\x0a\x72\x03\x3a\xc8\x55\xae\x90\x02\x1b\xc2\x34\x33\x8d\x73\x70\x80\xbf\xac\xce\x46\x0e\x44\x1c\xba\xac\xd7\x97\x26\x0b\x9f\x89\xe3\x77\x0a\x48\x91\xef\x37\x37\x3e\x49\xcf\xc5\xe1\x6e\xa2\xd8\xa8\xe6\x5c\xaa\x52\x71\x64\xc8\xa2\x12\x82\xf4\xd4\x8f\x2f\xb1\xff\xe2\x4c\xff\xc6\x9f\xb4\x9c\x29\x79\x3d\xb3\x1c\x12\xce\x8b\x85\x94\x30\x0e\x48\x09\x8e\xa8\xef\x54\xda\xe3\x00\x15\xdf\xe0\x1c\x2f\x2b\x6b\xef\x97\xba\xe7\x42\xd4\xd9\x33\xbd\x0b\x1f\x12\xee\x4d\x43\xd1\x72\xd4\xb9\x8d\x4f\x48\xbd\x37\x5a\xeb\x8c\x5b\xb6\xb2\x68\x8e\x01\x4d\x71\x9b\xac\x84\x10\x84\x53\xc5\xd9\xf5\x97\x50\xf8\x8c\x72\xe0\xe5\x34\x6e\x2d\x8a\xbf\x73\x20\x77\x47\x2f\x84\x6a\x59\x62\xc0\xe6\x55\x28\x85\xad\xa0\x41\x29\xed\x9c\x45\xbd\x34\x73\x5e\x39\x94\x3f\x0a\x21\xa1\x6a\x6f\xc8\x13\x9b\xd7\xe2\x89\x7d\x64\x42\x75\xfb\xcb\x27\x29\x8c\x44\x78\xed\xa1\xe2\x86\xf7\xb0\x15\xc7\x5b\x99\xcc\xe4\x2e\x01\x70\x9e\x8e\xcf\xf5\x84\x3a\x84\x6b\x4d\xfc\x06\xbe\x6f\x3f\xa7\xba\x44\xa5\xc9\x27\x58\xfc\xe9\xe5\x32\xa0\xe5\x7a\x56\x2a\x54\x57\x68\xa0\xec\x87\x87\xa5\x99\x13\xbd\xa1\xba\x5a\x7d\x31\xc4\x46\xa1\x63\xf7\x65\x14\xf0\xfa\xf0\xa7\xe3\xf2\xc6\x30\x64\xc1\x31\x78\x1a\x8d\xd5\x0d\x7f\x2e\x5a\x0f\x94\xb2\xd9\xcd\x49\x1f\x58\xb7\x71\x4f\x26\xd4\xcd\x1f\x3e\x4d\x1b\x78\xc0\x8b\x6b\x82\x10\xa4\xc3\x76\x6a\x12\x62\x3b\x57\x9c\x39\xd5\xef\x33\xf8\xd7\x2c\x38\x15\xb2\x28\xcd\xea\x5a\xa8\x5b\xe6\xd7\x5a\x00\xa9\x31\x30\x5f\xd2\xe6\xa5\x2a\x31\xb9\xcd\x27\x9a\xf4\x08\xe4\x09\x83\x7e\x2a\x7e\x04\x08\xf0\x3d\x60\x53\xa4\xd1\xee\x30\xc6\x37\x9a\x43\xdd\x79\x70\x52\x77\x2f\xa2\xe2\x81\x2f\xef\x92\x58\x65\xc2\x76\x05\x77\x26\xa1\x8c\x11\x6f\xdd\x33\x87\x18\x6e\xe2\xfd\x60\x52\xe7\xd5\xe5\x50\xfd\x75\x9f\x4e\x8a\x97\x98\x35\xe7\x4c\x88\xf1\xca\x56\xf5\x25\x6c\xdc\x79\x29\x44\xf5\xad\xf3\x66\x04\x61\x04\xd4\xd7\xf1\xea\xe9\x15\xea\xd3\xd5\x53\xe1\x10\x96\xc0\x98\x83\xff\xf4\xda\x6e\xd7\x27\x86\x95\xd5\x08\x52\x00\x69\x1d\x9d\x41\x95\x57\xb8\x09\xf5\xb0\xab\x4b\x84\xf5\x90\xaa\x30\xb8\x3b\x8b\xc0\xe9\x6e\x28\xec\xfa\xc9\x77\x6a\x42\x0d\xbb\x4f\x6d\x29\x00\x21\x3d\x3d\xbf\x78\xce\x84\xc2\xc1\xe9\x2d\xc4\x18\xcc\x85\xbb\xe3\x1a\xd6\x4c\x87\xb4\x11\x4b\xca\x5d\x7c\x73\xff\xa3\xc3\x96\xff\xcb\xda\xe3\xd6\xef\x94\x7f\xf8\xe5\xdf\x2b\xe8\x3d\xdd\x50\xa3\xce\xb0\x2b\xbf\x02\x45\x20\xcf\x10\xdb\x5b\xfb\xca\x0a\xc3\x59\x7b\x92\x1b\xcf\x0b\x12\xcb\x12\xf0\x8c\x3f\x3c\x69\x85\xac\xcc\x87\x93\x09\x6b\xd5\x25\xa8\x9a\x8f\x77\x1a\x7a\x6f\xae\x66\x73\xd1\xa3\xea\x72\x46\xcd\x49\x26\xea\x95\x45\x6e\xcb\xe7\x7b\x42\xac\xa8\xcc\xa6\xe2\x76\xf3\xf6\x24\x9e\x3d\x31\x55\xea\xf6\x85\x93\x9e\x33\xe2\xc6\xf9\x50\x56\xd1\x0b\x55\xdc\x25\xd4\x48\xdf\x94\x44\x52\x2e\xa6\xf4\x08\xc5\x55\x70\x10\xc3\x45\xcb\x39\x21\xf5\xaf\xe4\x94\xbb\x8c\x82\xc0\x7a\xda\xc2\x0c\x5c\xc9\x22\x89\x64\xb0\xea\x38\x1c\x3d\x6d\xad\x0f\x83\xff\x7a\x6e\x0b\x61\x07\xc7\x22\x49\x2d\x7e\xfb\xe6\xaf\xc5\x9b\x92\x56\xfc\x6c\xfc\x21\x87\x6b\x58\xbc\x0b\x4e\x2c\x0c\x47\x87\x8e\x18\xe8\x51\x01\x3e\x63\xd8\x57\x25\x70\x55\x8b\x10\x95\x7f\x79\x5f\x1d\x2c\xdc\x9a\x74\x95\x67\x87\x50\xb9\xee\x6a\x92\x54\x79\xcc\x5a\xa0\x38\xc4\xed\x44\xc5\x75\xfc\x50\xeb\xed\x75\xf0\x5e\x6b\x73\x6d\xe4\x08\x08\xdb\x68\x1e\x55\x0f\x7b\x7d\xa1\x56\x76\xf0\x1d\xa3\x7b\x2c\x15\x0f\xd6\x9a\xfb\xb6\x4d\x4f\xe3\x69\x17\xd4\x64\x35\x0b\x03\x44\xb2\x3d\x30\x5c\xa9\x6d\xcb\x8e\x1d\x91\x47\xe5\x2f\x1d\x39\xd5\x16\x8e\xc2\x01\x6f\xd1\xb7\xcc\x6e\x16\xb1\x5e\x5c\xe2\x7b\xdc\x1a\x90\x82\xab\xf1\x93\x7a\x37\xba\x62\xb9\x28\x42\x20\xa8\xf5\x3e\x7c\x29\x46\x64\xe8\x15\x2a\xae\x6b\xd4\xe6\xb4\x76\x4f\x2e\x29\xd6\x65\xd4\x57\x7b\x95\x6a\xda\xab\x2a\xb0\x31\x87\x10\x8d\xff\x0a\xff\xab\x7a\x38\xd5\x97\x89\x6b\xe3\x78\xb7\xb3\x04\xe9\x47\x04\x72\xcd\xd4\x03\x60\xf3\x79\x97\x6b\x3c\xef\x72\xf1\xee\x51\x68\x79\x3b\x73\xda\x8b\x7c\xcd\xdf\xb9\x64\x16\x4b\x14\xe4\x9c\x5c\xc0\x55\x7b\xfa\x0f\x10\x04\x03\x07\x8b\xfc\x6b\x40\xf8\x0f\x33\xaf\xd6\xf8\xde\x47\x68\x7f\xbc\x6e\xf1\x3b\x76\x84\x09\x8e\xec\xfe\x1d\x4d\xf8\x2f\x62\xf1\x3b\x5b\x99\xdf\x7c\xcb\xcc\x40\x10\xec\x4a\xda\xfc\xe1\x38\x5e\xf8\xfb\x83\x6f\xa4\xf0\xc5\xbf\xef\xaf\xeb\xbb\x7d\x5d\xf1\xeb\x12\xe9\x42\xf1\xf7\xeb\xba\xbe\xae\xeb\x49\xbf\xfd\xeb\xe2\x9e\x3e\x61\x8e\x9c\xfc\x25\x2b\xfd\xf9\xeb\xca\x8e\x7e\x89\xfe\xda\xd7\x95\x1f\xf4\xc3\x31\xce\xfc\x78\x8c\x6b\x33\xc0\x97\xa8\x30\xb6\x51\x27\x83\x87\x29\x74\x1e\xc0\x84\x6d\x4a\x94\x01\xfe\xec\xf7\x3f\xfe\xae\xa7\xb5\x18\xc1\x41\x2e\x59\x79\xa3\xdf\xe6\x70\x30\x25\x6f\xa7\xc3\x7f\x88\x50\xbf\x7d\x49\xbd\x09\xaa\xa2\xbe\xa1\x86\x74\x40\x0e\xe8\x95\x77\x59\x6e\xc4\xe9\xeb\xbc\x53\x0b\x4a\xff\x70\x9c\xc6\x17\x54\x1c\x09\xa8\xce\x85\xff\x32\xae\x02\x30\xe1\x10\xef\x2a\x22\x4e\x11\x9f\x1b\x24\x96\x66\xbc\x99\x89\x73\x85\xd7\x40\x18\x49\x38\xca\xec\x09\x84\x0d\xc3\xc3\xcf\xca\x66\xc3\xd6\x61\x3b\x3c\xc7\xab\xb0\xca\xe2\x08\x20\xda\x92\xb4\x0f\xa8\x4e\xcb\x6e\x69\xde\x75\x51\x21\xef\x81\x85\x19\xe5\x7d\x66\x25\x75\x51\x48\x9a\x1e\xf9\x9d\x3c\x86\xea\x88\x8e\x4d\x09\x89\x31\xb8\xf0\xe4\x45\xbc\x4c\xc9\x77\x84\xc8\x1b\x6e\xf9\xc8\xf8\xe3\x2f\x9d\xd2\x9a\x05\xb6\xe5\xd3\xfd\x7c\x93\x82\xf4\x3f\x3b\xb4\x7e\xc8\x46\xd8\xb1\xf6\x93\x83\x87\xd7\xbc\x1e\x97\x03\xeb\xc9\x33\x5f\x40\x12\xdc\x50\xb9\xe8\x67\x1a\xce\xe4\xff\x68\xf8\xfe\x75\xe1\x7e\x5f\xfe\xae\x28\x1f\xe4\x03\x0a\x48\xd4\xac\xc7\xf5\x87\x3c\xa2\x47\x23\x5f\x4f\x6e\xd1\x44\x3e\xc7\xdd\xbd\xd0\xc6\xe4\xb8\xcb\xaa\x57\x8e\xbb\x8c\xea\x80\x0e\xa8\x3f\x38\x84\x86\x05\x1d\x16\xb0\x39\x9c\x13\x69\x9b\x39\xfa\x13\x33\xd8\x1c\x7d\xc5\xbc\x39\xc7\x91\x30\xac\x8f\xb3\xf7\x39\xc6\x21\x08\x22\xc7\x68\xb3\x0c\x0c\x11\x8e\xb1\xd3\x74\x81\x55\x94\x01\x9c\xbb\xa7\xff\x2d\xef\x3b\xa7\x12\x5e\xad\xb9\x32\x2f\x9b\x64\x5c\xa3\xcb\x6c\xea\xfd\xe0\x36\x10\xc8\xa7\x60\x30\x1c\xc3\xcf\xe3\x8f\x5a\x77\x28\x63\xd5\x12\x6c\x4c\x15\xf4\xf5\x8d\x2b\x5f\x5c\x94\x21\x59\x29\x5f\x5c\xc2\x29\xd4\xc9\xe1\x4f\x04\x2d\x65\x9c\x88\xc6\x43\xf6\x95\x55\xb6\x96\xdc\x9e\x70\x09\x31\x27\xea\x3e\x72\xe2\x3b\x98\xac\xaa\x91\x22\x37\xb1\x19\xbe\x19\xec\xec\x3e\xbb\x26\xf7\x89\x81\xe4\xe0\x40\x4e\xee\x8f\x63\x98\x76\xfe\x47\x30\xd0\xb6\x51\xe7\x7d\x88\x29\xaf\x2b\xae\x99\xa5\x4c\x0a\x18\x75\x31\xf9\x37\xff\x43\x1a\xa0\x80\xca\x88\xa6\x54\x07\xc7\xd8\xbf\x55\x95\xf7\xf8\x81\xe5\xac\xa7\x40\x2e\x34\xc9\xbf\xb9\x4f\xc8\x4c\xc5\x01\x54\x92\x74\xa0\xa0\x92\x22\xc1\x3b\x72\xe6\x30\x1d\x58\x6d\x60\x75\x36\x2b\x42\xc5\x09\xe0\x4b\xa1\xe4\x54\x0a\x9c\xe4\x41\x82\x22\x26\x24\xce\x41\x1d\x0a\x5c\xa1\xa1\x4a\x0b\x96\x82\x74\xef\x39\x21\x87\xa4\x21\x4d\xdf\x5e\x95\xd9\x60\x10\xbb\x33\x9c\x94\x95\x94\x9c\xbe\xf9\xb2\x6a\x4e\xdf\x55\x51\x12\xdf\xf2\xc3\x55\x39\x25\x07\xd2\x60\x41\xce\x74\x12\xa0\x19\x18\xca\x17\xe1\xc8\xef\xfd\x33\xc1\x8c\x0b\x08\xe7\x00\x2d\x9e\x2e\xda\x43\x82\x4a\xfd\x84\x12\x79\x26\x62\x23\xca\x77\x5e\x96\x15\x34\x1c\xc8\xb8\xf6\x0f\xd4\x54\x7d\x47\xbf\x4b\x74\xb4\xab\x4a\x79\x08\x2c\x21\xfc\x1e\xae\xbe\xb7\x28\xdf\xdf\x5c\x28\xf3\xee\xb6\xf6\x8e\x06\xaa\x5f\xcc\xd8\xb4\xdc\xd7\x50\xd4\x34\xe0\x3b\x7f\xf6\x5a\xd6\xb3\x17\xef\x9f\x21\xca\xbd\xb2\x9c\xc6\xe4\x85\x21\x1b\x18\x67\x1d\x19\xab\xfd\xc3\xa7\x61\x14\xab\xdf\x0c\xee\x73\x22\x2e\x3e\xe6\x08\x22\x11\xcc\x7f\x72\xca\x67\x8f\x1c\x97\xf3\xfd\x28\x61\x17\xb8\xb3\xe8\xd8\x9c\xb2\x68\x7d\x43\x54\x45\x4e\x39\xf2\x70\x98\x91\x56\x40\xe0\xb7\xa0\xb7\x7e\x0f\x52\x38\xf0\x4e\xa1\x04\x37\xe6\x43\xf2\x43\xee\x69\x29\xda\x04\x96\x6f\x06\xe2\x88\x9e\xb8\xbc\x94\x4d\xfd\x79\xea\x0a\x87\x1d\xb8\x19\xe2\x8d\xf0\xac\x09\x75\xcb\x71\x1f\x40\x08\xf1\x16\x28\xb1\xbf\xcf\x76\x4a\x75\x56\x6c\x5a\x10\x1c\x12\xf7\x03\x69\x64\xef\xe8\x87\xa3\x59\x8a\xb7\x08\x77\x17\x28\x8e\x67\x5b\xe1\x99\x4a\xf0\xef\xd1\x4e\x30\x6c\x0a\x87\xcd\xf7\x4c\x29\x9a\xa5\xc9\x33\xef\xa0\x75\x84\x5e\x4e\x82\x2b\xe4\x38\x17\x6c\x61\x12\xe0\xf3\xe3\x39\xe5\xea\xb6\xed\x74\xa3\x2e\x56\x2f\x65\xaa\x6a\xe5\xa2\xd6\xf7\x14\x84\x13\x9c\x8c\x79\x72\x33\x2a\xa7\x70\x09\x38\xb3\x38\x8d\xe6\x63\x7e\xba\x64\xfb\x9a\xc9\xdd\xb8\x96\x83\xb7\xd3\xab\x39\x3e\x20\x45\x20\x4b\x3a\xb7\x9c\x66\x5f\x05\xca\x8e\xb4\x22\x1d\x40\x6e\x25\x1c\xf1\x2d\xe5\xbb\x69\xfc\x1b\xaf\x1f\x66\x7e\xd4\x16\xe0\xe5\xa2\x74\xcb\x8a\xd9\xc0\xaf\x24\x03\x7c\xc0\x69\x69\x80\xcc\x2e\xc9\x48\x35\x61\xf6\xc4\xb6\x29\x49\xaa\xa4\x81\x79\x04\xe1\xca\xb2\x62\x9c\x53\x7b\x14\xdf\xb8\x48\x70\xb5\x69\x5e\x0a\x3f\x65\x0b\xd4\x23\x47\x19\x0c\x24\xf9\x12\x64\xa0\xa1\x62\xc3\x72\xea\xda\x00\x74\x73\x25\x66\x32\x0e\xc1\x9f\xdc\xdf\xe3\x86\x39\x8f\xb1\x4d\xe6\xe1\x48\x8e\x2f\xef\x59\x0d\x50\x13\xfe\x1e\xd8\xe0\x21\x40\x73\xcc\x9c\xd3\xe6\xe2\x13\xc0\xbf\xd9\x98\x34\xfe\x39\xe9\x55\xf5\xf1\x1a\x14\x21\x7e\x2e\x7b\x20\xee\x11\x73\xfa\xd7\x31\xb1\xcd\x39\x15\xe9\x31\x73\xe2\xd3\x7c\x39\xa7\xba\xb9\x5b\x10\x96\x00\x01\xd8\x91\xca\xb7\xd4\x14\x15\x81\x59\xbe\x06\x0e\x9a\xec\x50\xe5\x9c\xa4\xe3\x45\x4f\x97\x79\x79\x3c\xe7\xb2\xf1\x08\x24\x97\x67\xfe\x89\x00\xa7\x47\x74\x8b\x84\xaf\xf0\xce\x7b\xce\x45\x1d\xe0\xa0\x55\xcf\xdb\xaf\x84\x7e\x24\x21\x39\xdf\xb3\x8e\x4c\xa9\x3b\xbb\x75\x04\x09\xf9\x01\x78\xc2\xea\xca\x37\x0f\x4f\xef\x1b\x51\x51\x09\x68\x08\x19\x06\xaf\xb2\x0d\x9e\x0b\x4e\x5e\x93\x12\xb2\xbc\x20\xcb\x0c\x99\xba\xe8\x20\x63\x59\x84\x03\xdf\x48\xe4\xa6\xa4\x38\xe8\x3f\xf8\x4d\x1d\xa0\x18\xa9\x15\x2e\x1b\xa4\xd6\xe5\xc2\x53\xa8\xa2\x17\xce\x08\x71\x29\x2f\x3b\x97\xa4\x02\x71\x09\x99\x87\x20\x78\x53\x17\xaa\xc4\x11\xeb\x33\x94\x0c\x45\xe5\x34\xe6\x72\xb0\x05\x6e\x7b\x4a\x78\xf4\xa4\xbe\x73\x3b\x56\xae\x37\x77\x13\x05\x8c\x77\x7d\x72\xc9\xdb\x06\xa7\x39\x1d\xf4\x59\x30\x40\xb1\x8e\x1a\x5b\xee\xd3\xc5\xc8\x77\xca\x88\x70\xa5\x2e\xb7\x14\x07\x00\x49\xa0\xfb\x34\x5d\x1e\xb1\xa8\xea\x30\x3b\xa6\xd5\x4a\xc4\x23\x1d\x2d\x0a\xe4\xc9\x70\xb9\xe5\xad\xda\xf1\xe9\xf3\xeb\xf4\xaa\x99\x0f\xa8\xbf\x2c\xb4\x2a\xe3\xf8\x09\xfd\x23\x2c\xf0\xb8\xb9\x9d\x65\xc3\x11\xd4\xac\x6c\x98\xa2\x90\xa2\x25\xa8\xb4\x83\x4b\x2d\x83\x81\x38\xbd\x78\x99\x0f\x2a\x8e\xd1\x12\x32\x13\x09\x30\x2f\x26\xab\x57\x95\x35\x64\xd2\x5b\xda\x85\x63\x32\xb9\xb4\x8e\xc5\xae\x5c\x3a\x07\xeb\x87\x3b\xb8\xea\xd0\xfe\x92\xc2\x29\xcc\xa8\x01\xf1\x9d\xe7\x5c\x21\x2e\x85\x22\x57\x4f\xf7\x22\x25\x6f\x9e\x27\x2c\x2c\x3e\x29\xe3\x3e\x4a\x1e\x40\x1a\x0d\x64\x75\xad\x0f\xdc\x9a\x22\xd0\x13\xb7\x06\x15\x02\x39\xf2\xb8\x83\x92\x2b\x35\xa0\x52\x93\x06\x7e\x4f\xc2\x91\xa1\x40\xa1\x38\x72\x60\x1a\xaa\x1a\x9a\xcd\x76\xb2\x10\x85\xcc\x0b\x44\x50\x64\x8c\x4a\x50\xac\x9f\x5e\x6b\x3e\xe0\xd8\x05\x63\x1a\x0c\x91\x76\xa1\xa1\xc5\x69\x3a\x27\x97\x74\xd7\xcb\x85\xb9\x85\x97\x1b\x7a\x2f\x2f\x8a\x75\x57\x24\x38\xe5\x26\x81\xcf\x5b\xe1\x54\x69\x6c\x2b\x27\xdf\x8b\xc0\xc2\xff\x8f\xa0\xc3\x4c\x90\x6f\x45\xbc\x54\x23\x48\x22\x94\x0b\x76\x7a\x09\x6c\x10\x5a\xc5\x48\x5c\x12\x99\xe6\x80\xd3\x49\x82\x9c\xbf\x2d\x97\x5d\xc6\xd1\x4d\xdb\x46\x02\x63\x70\xd2\xe4\xce\x33\xc0\x9f\xd1\xc5\xc9\x13\x02\x10\x0b\x99\xb9\xa9\x6b\x4d\xb7\xad\x01\x11\x08\x94\x89\xd6\x8a\xe3\x15\xbe\x8c\xc2\xd2\x9f\x38\x79\x9e\xfb\x7f\x81\xca\x45\xe7\xb3\x3d\xb9\x63\xa6\xde\xe7\x04\xbd\xcf\x19\x7a\xd7\x29\x7a\x1f\x73\x74\x3c\xa3\x44\x0a\xb7\xd0\x90\x20\x43\xff\x62\x2e\xed\x2c\x6c\x2f\x77\x48\x49\x1f\xc0\x8b\x69\xc1\x6a\x1a\x92\xd4\x47\x0f\xce\xbc\xf2\x88\x80\x09\x64\xaa\x13\xf6\x0f\x87\xe9\x53\x4f\xea\xb1\xe4\x46\x2f\x5c\x2a\xba\xb6\x7e\x58\x39\xa4\x7f\x59\xa5\xe2\x55\x4f\x52\x1a\x8f\xc5\x08\x41\x9c\xe7\x78\x3e\x8f\x11\x5b\xae\x10\x8b\x41\xc0\x8b\x22\x4d\x5c\xaf\xcd\xe1\xa8\x6d\xee\xcd\x15\x0e\x23\x6a\x41\x6f\xe7\xa3\x78\xcf\xd3\x55\x90\x9c\x07\x79\x62\xa5\xa6\xb7\x73\xf8\xd4\xce\x1b\x42\xed\x80\x58\xdc\x17\xc1\x1f\xec\x1d\xe5\xce\x45\xf4\x35\x97\xa4\x5e\x66\x3d\x6a\x3e\xc7\x77\xd9\xe7\xf8\xae\xbc\x94\xff\x97\x16\x08\x6c\x2b\x66\x1e\x7a\xbc\x82\x97\x5a\xf8\x0a\x5e\x67\xd4\x3c\xb4\xf8\xe1\xb8\xff\x60\xc1\x33\xff\x52\xf4\x7f\x61\xe7\x37\x78\x7e\xf2\xf5\xca\x7f\x7f\xae\x48\xd3\xfa\xf7\xc7\xb2\x58\xef\xaf\xeb\x3e\xbe\x2e\xea\x4a\xee\xf3\xae\x5f\x17\xce\xc7\x94\xb0\x3b\x72\xae\x7e\x5d\x66\xef\xb9\xc6\xaf\x8b\x07\x73\xed\xeb\x6a\xfb\xd7\xd5\x0e\xfa\xf9\xaf\xab\xa1\x2d\x6d\xe9\xeb\xea\x5f\x57\xdf\x64\x26\x3c\x9e\xac\x23\x84\x5e\xb0\x6f\x72\x1a\xad\x6f\x01\xf4\x1b\x7f\x6e\x20\x72\x06\x0a\x1a\xd4\xbe\x7d\xb3\x84\x65\x01\xfc\xb1\xfe\xe0\x5c\x4a\xdf\xbe\x59\x16\x4c\xdf\x62\xdf\x48\xc1\x20\xdf\x0e\xcc\x49\x4b\x2f\x25\xf5\x0d\xc7\x5e\x48\x41\xd2\xf7\x2d\xbf\x42\xdd\x02\xbf\x52\x79\x75\xbc\x72\x43\xff\xba\xed\xd4\x71\x62\xbd\xef\xf4\xdb\xe0\xe1\xae\x75\xaa\xef\x7b\xd4\x05\x69\x60\x96\x3e\x03\xc8\xb9\xd6\x65\x09\xaa\xf3\x3b\xda\x57\xdf\x8f\x8e\x9a\xd9\x21\x6b\xba\xef\x2c\xe2\xa7\xef\x37\x1a\xf8\xbe\xdf\xfd\xa6\xd1\x76\xdf\x69\xc4\xd3\xf7\xfa\x1d\x58\xd0\x6e\xdf\x6b\x94\x33\x18\x02\x91\xcf\x7d\xe7\x97\x0e\x44\x9f\x47\x75\xdd\xcb\x58\xbb\xfb\x4a\xa3\x9a\xee\xff\xfe\x10\xf5\xe7\x73\x28\xa8\xc3\xfd\xf9\xe4\xd0\x3d\x1b\x19\x23\xf7\x58\xfe\x45\x3f\x0e\xc8\xc3\xea\xfc\x34\x1b\xa9\x9d\x8a\x08\xab\xe8\x56\x18\x72\xf6\xa0\x11\xea\xff\x35\x77\xd2\xf8\xa5\xf3\x9b\x04\x3d\x4a\x71\xeb\x38\x71\x88\x11\x79\x8f\x9e\x0a\x1b\x29\x1c\x80\x78\x80\x06\xff\xe0\x45\xc2\xce\x47\x12\xa0\x08\xd7\xf5\x94\xce\xab\x82\x3d\x46\xce\x47\x5e\x89\xee\x7c\xf4\xad\xe3\xac\x5a\x52\xd0\xdc\x4f\x7a\x0b\x29\xfd\xc1\xb6\x39\x37\x45\x9a\x44\x8f\x2c\x63\x8e\x54\xb4\xc0\xd4\x08\x4a\x10\x5a\x78\xf0\xa9\x0f\x40\x16\x0f\x4a\x70\x83\x0c\x9c\x43\xc8\xe9\x12\xe4\x67\x0b\x81\xec\x57\xc6\x58\x8e\x61\xc8\x7d\x03\x70\x18\xce\xe8\x6d\x0a\x10\xbc\x11\xec\x5d\x19\x7e\x6f\x19\x37\xa2\x18\x16\xb5\x23\x07\x74\x81\x3b\xcb\x3e\x26\xbc\x53\xd1\xbd\xb9\x51\x23\xee\xa9\x5c\x28\xfe\x3d\x5d\xaf\xe2\xcf\xd3\x99\xcb\xdd\xd0\x88\x18\x54\x03\xe2\x24\x27\x21\x88\xa2\xdd\x45\x5b\x0a\x33\xa3\x91\x1e\xbc\xaa\x41\xe8\x3f\x2f\x6e\xf3\x54\x1e\x08\x97\x50\x3a\xe4\x4d\x89\x8c\x15\x26\x5c\x1c\x09\x86\x91\x11\x83\xf0\xe9\x3d\x68\x70\x1f\x4e\x50\x17\x1e\x08\xb3\x44\x7a\x41\x2d\x54\x97\x94\x69\xa8\x96\x83\xee\xd0\x98\x81\xba\xa3\xbf\x73\x90\x5e\x4d\x34\xda\x40\xbf\x8a\x64\x6f\x60\x90\x36\x82\x79\xeb\xed\x55\x21\x1a\x97\x9b\x2f\x2c\x5c\xc3\xe1\xe2\x36\xbd\xde\x0f\xea\x9f\xc3\x7d\x9e\x81\x01\xe5\x64\x9e\x38\x20\x9d\x26\xb7\x83\x81\xbb\x16\x93\xd6\x77\xd3\x9f\x92\xce\x98\x76\x83\xf8\x52\x47\xa0\x5e\x41\x9e\xf1\x04\xfb\x71\x92\x45\x58\x74\xa3\x31\x66\xbf\x58\x2a\xb3\x9c\x59\x86\xf2\x86\x6a\x06\xc3\x1d\x0b\xd6\xfd\xa2\xd6\xbf\x13\x4f\x7b\x4f\x78\xed\xa6\xe3\x01\x8e\x9e\xc2\x16\x6e\x19\x89\x0f\xa2\x63\x9a\x6e\x5e\xda\x51\x2c\x33\xbe\x9e\xe4\xae\x7f\x97\xc5\xce\x9e\xf0\x2a\x4e\xe7\xe9\x28\x7a\x7f\x28\xff\x39\x6a\xbf\x61\x82\x67\xa2\x1d\x1b\xb0\x5d\xa7\x74\xbd\xec\x05\xd1\x29\x48\xd6\xc2\x22\x54\xf0\x14\x21\x0c\x53\x7d\x2e\x17\x8d\xb7\xa1\x68\xc8\x08\x23\xda\x7c\x19\xbd\x63\x2b\x84\xfe\xe1\x6d\x41\x22\x95\xc2\xf2\xc9\x7b\xe1\xe1\x2f\xa2\x5d\x69\x44\x18\x05\x70\xbd\xaa\x9b\x88\x7e\x23\xd4\x44\x51\x33\x2f\x1c\xc3\xee\xd4\x9b\x40\x89\x5e\x14\x0c\xa3\x7a\xdd\xf2\x30\x91\x79\x2f\x05\x47\xdf\x64\xad\x8d\xb1\x34\x04\xc0\x92\x81\xd5\x8f\xe9\x98\x60\x98\xe0\x60\xf2\x24\xb9\x57\xdc\x99\xeb\xe8\x63\xaa\xc4\x40\x87\x29\xbd\xf2\xfb\x9d\x57\xc7\xd5\x5e\xfa\x77\x1c\xb4\x21\xee\x8c\xa1\x1a\x97\xb9\x92\x00\x5e\xfa\x26\x62\x82\x11\xb6\x11\x8e\xff\x38\xb6\xdf\xf8\x73\x51\x64\xcb\xf6\xfa\xed\x0f\x56\x22\xbf\x07\x0a\xdc\x44\xe1\xe6\x9f\x10\x0a\x62\xfd\x0e\x6c\x60\x04\xf9\x5b\x04\xed\xf4\xfa\xcd\x9d\x5a\xfd\x2e\x9c\xe0\x18\xb4\xf6\x8a\x74\xfc\xd7\x1d\x47\xb9\x72\x1e\x54\x1e\x40\xe8\xe8\x8e\x41\xc8\x8c\x50\x4d\x6b\xe3\xfe\x97\xef\xe5\xf7\x8a\x16\x44\x1f\xec\xbc\x3a\xf9\x30\x6f\x23\x77\x23\xfd\xa3\xe3\x52\x3c\xd4\xc4\xa6\xca\x38\xc7\xd1\xf9\xb9\x91\x3e\x39\xba\xbc\xb6\x9d\xd8\xdf\xea\x6d\x3c\x39\xc3\x10\x35\xb5\x69\x2f\xdc\x6c\x3d\x6f\x90\x70\x20\x32\xdc\x7b\xd3\x6b\x26\xbd\xc1\x4f\xd9\xd8\xef\x8d\xdb\x56\x52\xa4\x99\x6e\xdd\x48\x1a\x11\x76\x29\xfa\x9b\xfa\x48\xa7\xc6\xbd\x71\xbf\x3a\x8d\xd3\xfe\x4e\xf4\xdf\x7f\x2a\xb5\xb0\xff\xfd\xe1\x33\x29\x31\xf3\xa9\x14\x90\xf2\x75\xbd\xbe\xae\x1f\x17\x03\x8d\xef\xde\x72\x53\x55\x1e\x59\x26\x35\xd2\x7f\x6d\x27\xde\xae\xbc\xde\x90\x29\xc5\x40\x2e\x5e\xbf\x37\x11\xcf\xf0\xde\x7c\x83\xcc\x06\x00\xbe\x82\xfd\xde\xec\x75\xc7\xf7\x46\x33\x64\x39\xd7\xf9\xde\x72\xe4\x7f\x29\x81\x6f\x2d\x7f\xef\x0d\x62\x21\xfe\xe0\x14\x8f\xe1\x48\xcd\x18\xf1\x10\xc2\xb5\x9d\xf7\x5e\xf8\xd1\xfd\xeb\xed\xa3\xbd\xbf\xfd\xf6\x28\x4e\x50\x24\x91\x08\x37\x31\xaa\x82\x36\x08\x6a\xf7\x42\x18\x21\x3f\xbe\xae\xb7\xba\x1a\xf3\xf9\xce\x61\xc7\x45\xb1\x77\x94\x85\xc4\x37\x85\x3c\x91\xd1\x3c\x53\x80\x25\x76\xc8\x96\x82\x61\x34\xf4\x16\xca\xbe\x4f\xd1\x1e\xef\xbc\xc5\x8c\x07\x05\xde\x79\xcb\x90\x52\xf4\x96\x5d\x93\x77\xf6\xbb\x47\x68\xb0\x5f\xc1\xfd\xd4\x7b\x5c\x04\x57\xd4\x71\x2f\xe3\x3d\xfd\x19\x91\xc9\xa7\xb9\x37\x6e\x99\x5a\xf9\x7e\x5f\x0c\x24\xbd\x39\xee\x98\x75\x6b\x01\x60\x32\xf3\x5d\x85\x5e\xbe\x51\x74\xdf\xf9\x66\xdd\xca\x5e\x70\x82\xe5\x9a\x25\x9a\x7c\x15\xea\x2d\x97\x9f\x48\x65\x57\x4a\x70\x92\x48\x22\xfd\xbe\x30\x94\xd1\x04\x41\xc8\x8c\x23\x40\xed\x24\x9e\x32\x85\x92\x45\xff\xf2\xa6\xc0\x28\x7b\x2b\x96\xab\xba\x93\x70\x29\x1e\x14\x06\xf9\xc6\x2d\x10\xfe\x0b\xa5\x5e\xc1\x65\xe6\x77\x65\x5b\xe4\x67\x6d\xee\xe0\x5d\x05\x81\x6f\x20\x6f\x06\x5d\x6f\xd9\x91\x7d\xb3\x60\x67\x28\xd2\xfa\x0a\x1e\xe6\xc2\x86\xb5\xa8\xf7\xd8\xb9\x65\xa4\x46\x67\x97\xcd\x0c\xa9\x51\x5b\xc0\x3a\xd2\x9b\x1a\xb4\x77\x3b\x8d\x83\x44\x78\x51\x8b\xe1\x9f\xc0\xbc\x49\xe1\x6e\x66\x41\x10\x44\xf7\xb6\x06\x79\x33\x8e\xa2\x68\x9a\x0a\xd6\xe6\x65\x70\xb5\x2b\xc9\xdd\x4e\xdd\x93\x1a\x70\x63\x7c\x67\xaf\xda\x04\x11\x57\xc5\xe2\x01\x85\xe9\xd7\x14\xae\x5f\x2d\xf0\xbf\x79\xa2\xa1\xc8\xf9\x23\xc1\x5d\x20\x35\x32\x1e\xf0\x15\x70\x0b\xff\x8f\x1a\xff\x3f\x1a\xde\x7c\xa5\xaf\xe4\x70\x72\x27\xb9\x47\x7e\xf0\x3f\x65\x14\x00\x85\x08\x00\x9d\x60\x72\x7c\x31\x3c\x41\x88\x79\x72\x34\x87\x4b\x8e\x90\x6f\x78\x79\x37\x39\xff\xea\xf5\x2b\x39\xc8\x05\x4a\x8e\xa6\x51\x2c\x03\x2e\x61\x41\x32\xb9\xa3\xbb\xf8\x95\x5c\x70\x3b\xfd\x03\xc6\x47\xa1\x7e\x3b\xf1\xc3\x79\xa4\x3c\x03\x3c\x09\x11\x6d\x3b\x81\xf1\xb0\x7e\x72\x21\xd5\x9c\xbf\x09\x14\xf2\x22\xd4\xef\x0c\xed\x17\x45\x91\x55\x9c\xe2\x67\x48\xf1\xd0\xf7\x19\x12\xa6\xce\xc9\x45\x5d\x16\x4e\xee\xd2\xae\x8e\x60\x6d\xac\xf5\xde\x38\x3c\x17\xa8\x37\x46\xfc\x8e\xff\x1b\xe2\x27\x12\xe4\x9a\xd0\x7f\xa5\xc9\x39\x81\xe6\x6e\x00\x4e\x8b\xeb\xa2\x00\x52\xfa\x22\x31\x92\xfb\xce\x5f\xfc\xc2\x1e\x3f\x6a\x96\xf8\xe2\x53\x72\xe9\xdb\x7b\x18\x4b\x6f\xfe\xe7\x99\x63\x72\x49\x2e\xf0\xa6\xf1\xfa\x8d\xa0\xc2\x7a\x43\xd4\x14\x11\xb9\xba\x43\x10\x77\x23\x93\x43\xc2\xdc\x2e\x92\x1f\x08\xd8\xcd\x19\x0b\x59\x0f\x5f\x56\xe6\x03\xe3\x89\x72\x14\xf0\x06\x08\xf0\xf9\xa6\xce\x3c\xb9\x7b\xac\xce\x24\x77\xe7\xe8\xe1\xfd\x7d\xc3\x41\xf6\xe5\x66\xe3\x37\xfc\x2a\x0e\xd3\x94\x81\x48\xb3\x6c\x9e\xd3\xbf\x6c\x38\x2f\x79\x4d\xd8\x14\xa2\x1c\x95\x4d\x75\xa6\xc8\x00\xb0\xe8\xef\xca\x2e\x65\xa4\x32\x54\xaa\x20\x13\x6e\x8c\x87\x95\xfa\x4e\x22\x39\x05\x74\x48\x6b\x55\x76\x0d\x04\x1f\x77\xfc\x65\xca\xb2\x72\x9c\x5c\x22\x0b\x95\xbb\xc2\xef\x22\x33\x10\x07\x0a\xbf\xbe\xc4\x28\xf3\x47\x91\xcc\x98\x68\xee\xe8\x7f\x49\xfd\x39\x51\xf8\x2b\x0f\x18\x18\xa0\x60\xd5\x39\x46\x49\x4e\xce\xfc\x08\xc0\x67\xaf\x05\xa2\x8a\x11\x6d\x82\x04\xe2\x53\xbe\x4f\x57\xde\x89\x7c\xd2\xf1\x5c\x82\xec\x7a\x3c\x79\x9e\x5c\xed\x28\xb4\x55\x6f\x97\x24\x47\xf6\x9b\x86\xa1\xa9\xff\x4d\x62\xd0\x74\xbf\x28\xb9\x76\x62\x49\xee\x2b\x0d\x33\x01\xf7\x73\x2b\xd2\x41\xc9\x65\x70\x9b\x98\x5d\x67\xfc\xf7\xe1\xc0\xdf\x70\x00\x4b\xed\x69\x8a\xa7\x05\x54\x37\x5f\xea\xe0\x4b\x5c\xa3\x64\x6c\x1a\x38\xb9\x81\x9f\x58\x3c\x7a\x82\x6c\xf3\xff\xdc\xf6\x0d\xa8\x09\xd1\x78\x16\x35\xfc\x67\xca\xde\xf7\x32\x82\xaf\x73\x2d\x85\x7f\xab\x85\x3f\xb5\xe0\x59\x19\xb6\xb2\x14\x72\x85\x14\xca\xbe\x91\x0e\x44\xb8\xb1\xa2\x61\xe9\x78\xcc\xda\x29\x82\xd9\x3b\x06\x94\xf8\x5e\xbd\x13\x45\x7c\xa6\x39\x4f\xd7\x0a\xd7\xe1\x56\x63\x97\x47\x0f\x0a\x8c\xd3\x9f\x8c\xe0\xd2\x8b\x7e\xae\xf0\x3f\x6a\x2e\x4a\xe8\xcb\x47\xfe\xc7\xd2\x16\xa1\xd6\x58\xff\x87\xfe\xc3\xe6\x59\x1b\xd7\x5b\x00\x0e\xfe\x9f\xed\x20\x48\xd4\x7c\x1a\xa7\xe6\x05\xa2\xf0\xbc\x5e\x30\x48\x7f\x3f\xee\xc1\xff\xd2\x87\x90\xde\x1f\xf5\x1c\xde\xb1\x28\x6f\x02\x58\x28\x4f\xde\x35\xd1\x79\xd0\xef\x11\xa8\x1d\xf6\x8f\x12\xa0\x85\xf0\x90\x32\xb2\x91\x09\xe5\x09\xd0\x9f\xd5\xfe\x53\x6d\x5e\xe8\x64\xa8\xe9\xe8\x37\x5f\x2b\xae\x9e\x5a\x8c\xdc\x54\x6a\x0c\xe2\xde\xad\xfd\xac\x22\x95\x95\xad\xee\xf2\x22\x86\x62\xf2\x9a\xca\xa2\xdf\xbe\x71\xef\x9c\xc0\x16\x33\x95\x16\xbf\x7d\xfb\xc2\x37\x6f\x08\xa3\xd7\xf0\xdb\x37\x9e\x00\x02\xa0\x6e\x8c\x54\x34\x96\x7e\xfb\xe6\x25\x76\x42\x2d\xb0\x0a\x31\x97\xc9\x6f\xc5\xd3\x28\x95\x00\xcd\x21\x42\x8c\xdc\xee\x79\x16\x7a\x32\x30\x9f\xa6\x61\x28\x2d\x88\x60\xd1\xc5\x75\x82\x32\xf1\xd4\x56\xe7\xf5\x6a\x65\xf2\x5b\x63\xbf\x9b\x2b\xde\xa4\x00\x1f\x10\x14\x44\xf6\xf7\x9d\xfe\xb1\xa7\x40\xca\x33\x50\xed\xf1\x7e\xd7\x24\xf6\x7b\xf4\xa2\xe0\xf2\x8c\xc0\xe2\x9e\x4d\xf0\x93\x0b\x02\x60\x8f\x82\xf8\x4e\x3b\x63\x7e\x0b\x49\x31\x35\xd3\xde\xcc\x72\x92\xf7\xf7\x57\x42\x2a\xdb\x75\xc0\xe4\x0f\xa7\x82\xdb\x19\x17\x56\x39\x6b\x19\x70\x1a\x1d\xa6\x61\x62\xc2\x85\xe1\x18\x8d\x93\x40\x64\xb7\x54\x02\x52\x0b\x3b\x15\xfd\x66\x7c\x02\x2b\x8a\xf4\x38\xbc\x50\xb6\x19\xc3\xe1\xbd\x02\x74\x07\x80\x41\xeb\xa0\xb0\x38\xc2\x94\xdb\x38\xf9\x2b\x0c\x89\x03\xa4\x11\x02\x66\xf7\x8b\x16\xd2\x83\xda\x0a\x1f\x8e\x93\xff\x1f\xf8\xcc\x80\x9b\x64\x21\x51\x73\x0b\xb4\x97\x89\xac\xb1\x6e\xcc\xd5\xea\x0b\x0a\x0d\xe5\x06\x8f\x52\x7c\x8c\x14\xbc\x58\x99\xf4\xeb\x91\xbf\x92\x87\xb8\xb8\x0d\x8d\x39\xe3\x78\x85\x84\xfa\x41\x63\x58\xbc\x8e\xcf\x10\x01\x36\xf2\x76\x06\x21\x47\x2f\x5f\x9a\x47\x21\xb8\xf0\xae\x78\xf2\x17\x39\x8e\x92\x98\x5d\xa9\xf7\x90\xf4\x95\x7c\xe6\x5b\x6d\x9b\x81\x9c\x9f\x93\x35\xb0\x4c\x53\x59\xe9\x1c\x2c\x95\xaf\xa5\x51\xc7\xee\xf3\xfe\xbe\x38\xf8\x79\xde\x7f\x4a\x3e\x87\xeb\x2e\x1e\x37\x43\xc4\x01\x1c\x5c\x4b\xb2\x9c\x75\x0d\xd4\x04\x51\x34\x68\xb0\x1e\x60\x9b\xff\x30\xd2\xf4\x22\x8a\x44\x80\xd8\x65\xf9\x73\x02\xda\x88\xc2\x60\x6d\x30\x38\x7c\x17\x49\x8c\xda\xc2\xa1\x09\x51\xdb\x1b\x95\x2f\x37\x9f\xde\xac\x16\x71\x07\xc7\x9d\x92\xcf\x6f\xea\x4f\x1f\x1c\xbf\x1b\x22\x73\x07\xa8\x40\x54\x16\x6e\x91\xad\xa6\x08\x1d\x32\xb0\x0e\x5c\x89\xfc\x40\xe1\xb9\xbf\xa2\xfb\x64\x38\x52\x42\x0f\x5c\x00\xf1\xf2\x0f\x24\x01\xf2\x6c\x1b\x50\xde\xee\x01\xe6\x15\x12\x86\x55\x81\xf8\xce\xe2\xbe\x58\x8e\x20\xa4\x1b\x33\x94\x6c\x50\x98\xa7\x63\x48\x74\x52\xa5\x0f\x67\x09\x84\xc3\x8d\x8a\xb9\x3a\xe3\x15\xd2\x84\x75\x90\xf7\x80\xbf\x3c\x6d\x4d\xfe\x0e\x88\x1a\xb7\x52\xb7\x0c\x37\xfd\xdd\x7a\xe2\xd0\x17\x1a\x19\x7a\x5c\x72\x4f\xbe\x64\x90\x97\x16\xa4\x42\x1d\x37\xfd\xcf\x91\xb7\x2f\xaf\x60\xd0\x01\x75\x36\x6c\xe5\xd5\x23\xdb\xd1\x65\x60\xc6\xa4\x57\xb7\x20\x2d\x4a\xcd\x35\x60\xa9\x1f\xa4\xe2\xcf\xc7\xc2\xf5\x0c\x79\x51\x39\xeb\x2a\x36\xe3\xa1\xb2\x5f\xf4\x8d\x1f\x9d\x48\xbe\x71\xa4\x5a\xed\x34\x0b\xf2\xfc\xa4\x4c\x62\x89\x67\xac\x14\xa8\x94\x0c\x4d\x1a\xe7\x8e\x3f\x24\x60\x1f\x19\x6b\xd6\x50\x40\x24\xdc\xbd\xb8\x5f\xc9\xc7\x3e\x73\xbe\x97\x10\xf1\x72\x21\x60\xf3\xa2\x8a\x31\x9a\x2d\x88\x60\x19\x50\x5e\xc6\x02\xe4\x05\x24\x40\xc8\xc9\x45\xc1\xdb\x90\xfc\x56\x8b\xfd\xc8\xcf\xf0\x28\x41\xbe\x41\xcc\x14\x23\x2e\xc0\xbd\xe4\xf3\x7d\xb3\xcc\x20\xf1\x77\x86\x69\x16\xe8\x5e\x8c\x83\xfa\xf5\x1a\x01\xe2\x38\xca\x00\x52\x91\xb1\xa1\x45\xb1\x8b\x74\xa2\xc5\xe1\xa1\xa3\x26\xa4\x4d\x20\x58\xdf\x34\xca\xe4\x0e\x9f\x78\xf3\xc5\xa5\x89\xd5\xe3\x11\xf6\x2a\x3b\x0a\x93\xa8\xd5\xd1\xb8\xf4\x51\xbe\x09\xf1\x92\xde\xc0\x6a\x84\xc7\x69\xbd\x72\x93\xdf\x11\xd2\xc6\xc3\xed\x09\xaf\x01\x51\x30\x18\x8e\x01\x5c\x6f\xc5\xb7\x96\x19\x85\x24\x40\x3f\x61\xdd\x49\xa0\x08\xc2\x4d\xfe\xe5\x0b\x84\x33\x24\x5e\x82\xf0\x3f\x1b\x8e\xfa\x26\xff\x43\x03\x5e\xff\xf3\xc4\xfb\xbf\xda\x07\xff\x1c\x05\xe7\x3d\x92\xff\x89\xef\x1f\x0f\x20\x0f\x37\x26\xff\xa3\x86\xf8\xcf\xe1\x41\x4b\x42\x0f\xef\x04\xe0\x7c\x09\xa3\x37\xab\xc5\xbb\x6f\xa0\x8d\x73\x96\x01\x87\xa0\xea\xd6\x29\xe1\xdd\xbb\x28\xda\xb8\xed\x02\x40\xf3\x7f\xff\x53\xc3\xf0\xd9\x54\x75\x22\x4d\x5d\xba\xdc\xc1\xf2\xfb\x98\xb0\x35\xb9\x33\x40\xf0\x76\xb7\x45\x7b\xbe\x26\x51\xe3\x20\x3a\x64\xfa\xa9\xb7\x86\x9c\xef\x7f\x12\x92\xcb\x98\x0c\x39\xfd\x2a\xae\xe5\x01\x4d\xab\x34\x87\x38\x47\xa0\x61\x97\x73\xfd\x97\xf2\xe0\x70\x21\x7f\xa5\x03\x65\xfe\xf8\xa1\xf1\x4c\x70\xe8\xdc\xa0\xb8\x0b\x63\xfe\xf0\xa0\xdf\x03\x6b\x24\xe1\x81\x7d\xba\x14\x1e\x31\xd0\x98\x39\x6c\x9b\xcc\xed\xc2\x26\x23\x9d\xb0\x61\x51\x07\x82\xe2\x92\x18\xfa\xa6\x10\x42\xe1\x37\x10\x18\x73\xff\xc5\xb2\x0a\x49\x49\x4e\x4c\xf3\xca\x8e\x80\x02\x24\x63\xc9\xb0\x61\xe0\xe4\x04\x8d\x20\x82\x0c\x80\xc2\x1b\xb6\x36\x66\x01\x61\x67\x3b\xfb\xce\xa7\x81\x12\xdb\x32\xb7\xac\x52\xd8\x29\x41\x78\xf8\x1e\x3c\x4b\xfa\x05\xc8\x5f\xb8\x8d\x91\x82\xa7\x46\x3e\x3c\x9f\x5f\x09\xd2\x90\x28\x5c\x98\x39\xd2\xff\xe6\x6e\x01\xb1\x3f\x26\x7a\xa8\x29\x96\xc3\x01\xf8\x44\xa3\x4c\xe8\xc8\x3f\x89\x11\x17\x33\x9c\xae\xf5\xa2\xf2\x4b\x91\xc0\xff\x39\x71\x25\x86\xa7\x68\xe1\x95\x58\x45\x7a\x02\x01\xbc\xe0\xde\xb8\x42\x8e\xec\x71\xb6\x7a\xba\xdd\x2b\x0c\x45\x82\xcd\x93\x3a\xa0\x3b\xab\x1e\x97\x22\x82\x3f\x0e\x32\x8a\x18\x7b\x0d\x05\x65\xd6\x51\x6c\xd2\x8d\xc1\x6a\x38\xa8\xb5\x42\x46\xa0\x01\x08\xb2\x68\x2d\xa0\x09\x80\x13\xdf\xbe\x9d\x9a\x7d\xdf\xdf\x9d\xbc\x24\x1b\xf1\x70\xe1\x2b\x05\xb2\x73\x8d\xd1\x33\xe0\x0f\xf5\xd0\xe1\x7a\x64\x88\xa8\xe8\xac\xcd\x4a\xe0\x22\x97\xb6\x7c\xdd\x39\xdf\x06\xa2\x85\xe4\x10\x25\xff\xc0\xfa\x50\xc0\xe0\x68\x63\xad\x3b\xa4\x0a\x80\x07\xc6\x01\x60\x21\xc9\xff\xe9\x2e\x2e\x82\x09\x31\xcd\x0f\x2e\xec\x99\x87\x5b\xe1\xa6\x52\x75\x9f\x34\xd9\x86\x98\xb9\xc4\xa7\x61\x48\x89\x7c\x8d\x34\x85\xf2\xe2\xc2\x87\x05\x33\xc4\xa1\xd1\x94\x92\x54\x18\x45\x7d\x0c\x38\x3f\x87\x70\x36\x5c\xc0\x60\x35\xc8\x37\xe6\x9c\x58\x33\x5f\xdb\x92\x0b\xad\x60\x0d\x8c\x54\xb1\x3f\xa4\xc1\x82\x6c\x3e\x46\x9a\x6c\x2b\x3d\x63\x2e\x18\x0e\x33\x3f\x7c\x1a\x60\x3a\xc9\x97\x4c\x3e\xf8\x9f\xe5\xf1\xbd\x79\xac\x5e\x10\x1b\x0f\x84\x33\xf3\xa5\x4e\x2c\xb1\x05\x84\xf4\x5f\x16\x19\xed\x8a\xc3\xb1\x1f\x2b\x40\x1a\xb8\xce\x04\xc9\x35\x8b\xfa\x96\x8f\xad\x04\x8e\x80\x71\x8c\x0b\x88\x0e\xca\x70\x01\x37\x85\xb7\xa3\xc6\x2d\xfc\xf1\x7b\x0e\x29\x3f\xe8\xc7\x8d\x58\x7e\xf0\x5e\x5f\xd2\x7b\xad\x29\x3f\x78\x2b\x1c\x80\x8b\x1e\xa1\x4a\x69\xa6\x0f\x0f\xe1\xee\x5b\xca\x5b\x73\xd7\x03\x63\x38\x85\x28\xe8\x93\x34\x90\x10\xfb\xe6\x06\xe2\x62\x97\xb7\xd6\xc3\xce\xaa\x38\xd0\x4b\x52\x55\x3a\x5c\x26\xf8\x3a\x9e\x9a\x49\xb8\x30\x08\x85\x4c\xec\x80\xb2\x7a\xc2\xd7\x3a\x49\x21\x73\x5e\xb7\x4b\x52\x56\x05\x12\x9f\x53\x3e\xe8\xc7\x7f\x94\xe8\x50\x88\x52\xe5\x83\xf0\x29\xfc\xcf\xce\x8d\x18\x1f\xe0\x23\x18\x86\xa6\x3e\xd5\x95\xa8\xff\x42\x07\x92\x2f\xb7\xf3\x3f\xa7\x04\x1e\xbb\x56\x95\x42\x78\xf1\x48\x0d\xc3\x72\xb2\xce\xff\x1b\x6f\x37\x0f\x8c\x31\x70\xbe\x82\xae\x58\x2a\x6c\x02\x39\x77\x19\xb2\xbd\x90\x3c\x5b\x61\xe3\x79\x73\x89\x8d\xc8\x15\x2f\x42\x3c\x20\x64\x80\xad\xa3\x81\xf9\xbb\x0e\xd9\x18\x92\x5e\x72\x0f\x97\x76\x91\x83\x0a\x3a\x1e\xfd\x02\x43\x25\x94\x24\x48\xee\xf1\xdf\x18\x0f\x13\x83\xb8\xf1\x41\xca\x5c\x9b\x20\x5e\x5c\x5d\x79\xd8\x8f\xe9\xcb\x14\x94\xc0\x34\xc7\xb1\x1e\x3c\xf8\xfa\x95\x03\x0e\x56\x1e\x63\x8d\x41\x35\x78\x89\x5a\xd8\x6d\xac\xe2\x74\x6c\x51\xe2\xaf\xb9\xec\x22\x3a\xc9\x1a\x2e\x6e\x2e\x90\x4c\x9d\xc9\xfb\x12\xa7\xcd\xed\xfe\x1a\x3b\x7c\xd0\xd9\xfc\x2e\xc5\x1f\x24\x7a\x93\x5e\xdb\xa6\xd1\xdf\x36\x7f\x37\x67\xcc\xdd\x6d\x31\xc6\x92\x1d\x98\x40\xf0\xc9\xe2\x45\xbe\xae\xbc\xbb\x66\x33\x86\x34\x6f\x27\x07\x7c\x44\x83\x46\x86\x40\xc5\x1b\xb7\xfb\xa5\xb7\xa5\x17\x6e\x63\x15\x76\x55\x35\x89\xb7\x7f\xdd\x85\x64\x42\x3c\x39\xaf\xa6\xb2\x5e\xd0\x8b\xc2\xca\x6b\x58\x5d\xfe\xd7\x43\x6b\x34\xc7\x21\x32\x03\x31\x4e\x9f\x4f\x96\xcb\x20\x23\x10\x38\x43\x61\xc9\x74\xb8\x0f\x7d\x5b\x8c\x20\x06\xca\x94\x14\xe6\xeb\xe7\xe1\x2f\x31\x29\x28\x04\x25\x00\xfb\x1e\x36\x4e\xd1\xdd\xdf\xb3\x20\xec\xa7\x08\x04\x11\x32\xf2\x0b\xd8\x44\x79\xff\xcf\x6d\xa3\x6c\xee\xff\xe5\x5e\x66\x55\xdb\xff\xeb\x4b\x65\x83\x9c\xaa\x25\xbc\xff\xb1\xc4\x8a\x81\xad\xd5\x3a\x82\x08\x29\x1f\xd6\x1a\x6b\x44\x13\x0a\x15\x16\x02\x92\x67\x44\xf3\xac\x2a\x7b\x2e\x69\x68\xdb\x50\xbe\x5c\x12\xf9\x2d\x4a\x9b\x3b\xbc\xad\x46\x10\xa0\x45\x4d\xc1\xa7\x5e\x2f\x1f\x5a\xa5\xcd\x54\x13\x26\x61\x7e\xe5\xcd\x59\xdc\xd8\xd4\xf3\xe9\x37\x93\x49\xcf\x67\x88\x61\xa1\x49\x63\xfd\x7c\x06\x91\x42\x33\xd9\x30\x78\x78\x51\x92\xac\xb6\x13\x39\x8a\xa9\x68\x87\xaa\xc5\xcf\xc8\xc6\xe0\xd3\x00\xd3\xb5\x21\x19\x8c\x49\x32\x16\xbe\x59\x2e\x1e\xf0\x10\x19\xc6\x8c\x06\x42\x6b\x4d\x1b\xa2\xc3\x88\x5c\x8f\x70\x8c\x62\x7c\x3d\x3e\x92\xf3\xf2\xc9\x96\x0c\x50\x93\xc1\x97\x4f\xfb\x74\x29\x2f\xc9\x7e\xdd\x67\x78\xac\x8e\x0d\x69\x59\xc4\x92\x93\xa5\x87\xf1\x1d\x3a\xd6\x02\x64\xe8\x4d\xa4\xa1\x48\xc1\x24\x71\x4a\xfe\xd7\x32\x1a\x03\xdb\x20\xa7\xd4\xe3\x08\x62\xca\xe9\x7d\x8d\x2f\x44\x16\xef\x1a\x4e\x35\x0e\xc7\x20\xf5\xca\x6d\x8c\x6f\x57\xf4\x48\x23\x73\xef\x16\x7f\xa0\x61\xdb\x46\xd2\x28\xa3\x60\x10\xab\x1f\xe6\xd3\x6e\x3f\xa7\xd9\x82\xdf\x38\x82\xba\x18\x86\x86\x71\x3b\xda\x1a\x7c\x8b\xe8\xa1\x11\xcf\xfb\x2e\x7e\x0b\xd6\x80\x70\x53\x0a\x86\x94\xb7\xc5\x9f\x29\x09\x4e\x78\x76\xdb\xb9\x06\x45\xb4\x86\x43\xe5\x41\xa3\x69\xdd\x32\x22\x8d\x83\x6f\x56\x2e\xde\x95\xcb\x8d\xe0\x95\xe2\x6c\x51\x2e\x25\xbc\x24\x9f\x4b\xc9\xc7\x48\x14\x21\xec\xaf\x4a\x9c\x9b\x2e\x52\xa3\x3f\x53\x50\xd9\x7b\x32\xbf\x7c\xf3\xe6\x5b\xa1\xee\x79\x29\xc9\xaa\x39\x02\x55\x37\x3c\xec\x30\x21\x0f\x80\x92\xab\xb7\x2f\x23\x81\xea\x1d\x8a\xb6\x19\xb5\xba\x1e\xc5\xb2\x8a\xc3\x9b\xc4\x24\x45\xad\xbe\x2e\x65\x01\x02\xf3\x48\xc3\xf2\x19\x92\x1a\xae\xb5\x4c\x8b\x8e\xf1\x21\x54\x9c\x4b\x1c\x44\x5a\xd4\x5a\xf3\x16\x56\x9b\xd9\x96\x8b\x5a\x73\x9a\x29\x58\xfb\x35\xdb\xe5\xda\x70\xb3\x40\x13\xad\x9d\xd1\x4b\x3c\x5b\x73\xdb\x39\x42\xd7\x38\x29\xa7\x17\x6d\x49\xc6\xd6\x6c\x26\xb5\xe6\xab\x69\x02\x5a\x2b\xe1\xd1\x97\xb4\xe9\xbb\x2d\x8f\xc4\x4c\x26\xf5\x76\xe2\x8d\xba\xe9\x82\xea\x0c\x0b\x10\x36\xf8\x51\xf4\x7a\xcb\x34\xf4\x34\x35\xfd\xe5\xd6\x04\x7d\xe5\xb0\x2f\xc5\x01\x1a\x12\xea\x87\xdb\x4e\x1f\xb9\xd7\x7b\xa0\xf1\xe4\x41\x7d\x7a\xb8\x14\xea\x48\x89\x87\x2b\x0f\x67\x5b\xc0\x87\xab\x6c\xdf\xbb\xce\xfe\x3c\xbc\xda\xf4\x31\xf8\x17\x67\xd2\xc3\xc7\x18\x0e\xf4\xeb\x62\x28\x79\x3d\x4b\x3d\x69\x98\xed\x24\xe9\xbc\x72\x1c\x06\x82\xdd\xda\x25\x1e\xc3\x42\x93\x1d\x4b\x3f\xa2\xbb\x6c\x4c\x89\xfb\xb1\x07\x07\x5e\xef\xd3\xdb\xd4\x52\x2d\x0e\x5d\xf4\x0e\x13\x8f\xf4\xc8\x4e\xcb\xd9\x23\xe7\xf1\x58\x38\x68\x29\xb8\x8f\x04\x8c\x65\xd5\xc0\x1f\xca\xb0\x2c\xb7\xac\x00\xf3\x4f\x15\xd8\xf3\x5b\xab\xf0\xa3\x97\xdd\x27\x33\x13\x22\x9d\x43\x7a\xd4\x47\xaf\x6f\xd5\xde\xa8\xb3\xc6\x5c\x96\x70\xda\xcd\x60\x70\x73\x77\x88\x72\xa8\x5a\x68\xd3\xd9\x0e\x33\x33\x28\xdd\xdc\x6d\x1f\xdc\x63\x9d\xb6\xf2\xf2\x18\x32\x1c\x94\xa7\x89\xa6\x76\x0a\xaf\xa5\x33\x84\x98\x4a\x8e\x23\xd6\x42\x0f\xe3\x6b\xf3\x87\x79\xb2\x89\xb5\xce\x1c\x47\x99\xde\x5c\xaf\xa3\xef\x03\x99\x76\x41\x66\x49\x97\x58\xfb\xe8\x1f\x73\xfc\xbf\x51\x2a\x96\x25\x1e\xf2\x74\x64\x34\x16\x0b\xa4\x5b\x2d\x86\xd0\x1e\x8a\xb7\xde\x5e\x9c\x55\x0d\x5e\x96\xca\x69\x3b\xe5\x5d\x12\xc1\x91\xdf\x4c\x63\x76\xdd\x6a\x05\xb2\x61\x16\x5f\x4f\xca\x9a\x0f\x9d\xda\x68\x4e\x2c\x75\x8a\xb9\x84\x81\x5f\x25\x61\x48\x1d\xc6\x92\xc0\x67\xe7\xf9\xb0\xa0\x23\x4b\x00\xf8\xb6\x8d\x35\x49\x3a\x26\xd7\x89\x5e\x78\x1f\x60\x9a\x68\xe6\x73\x0b\x7f\x5e\xe0\x8b\x06\x81\x8c\xa9\x50\x2d\xe9\xc1\x1b\xa7\x33\x9f\x56\xb9\xa1\xd0\x31\xc3\x81\x2d\xe6\xca\x53\xf1\xb4\x65\x77\x74\xdb\x18\x89\xc6\xb0\x97\x5d\xb4\x45\x3a\xfb\xb2\x8d\x4f\x84\x4d\xf6\xe7\xd1\x5e\x6f\xf9\x48\x61\x3a\x71\xa4\xf0\x37\xfc\xd6\xc7\x3e\xc6\x57\x33\xa9\x50\xf2\x56\x52\x8d\xa9\xba\xf8\x15\x74\x78\x4b\x10\xd3\x45\x75\x22\x46\x9a\x96\x1b\x0f\x62\x74\xb7\x1d\x67\x90\x8e\xdf\xec\x77\x19\xbc\x6e\x90\xe4\x64\xf4\xfb\xea\x67\x9c\xaf\xdd\x4e\x6e\x8a\x0f\x96\x4b\x48\x79\x38\xed\x0f\x89\xcc\x85\x0d\xd0\x5e\xdb\x12\x18\xd6\x19\xdf\x6d\x36\xe6\x65\x9e\x4d\x53\x60\x3c\xab\x6b\x4c\x5f\xde\x4c\x53\x98\xef\x1f\x61\xc2\xcb\xa0\xd6\x4d\x96\xa0\x6a\x1d\x09\xcd\x3a\x91\xf7\xa5\x26\xe6\x0b\x17\x6e\x16\x0b\xa2\xf1\xf2\x1f\xa6\xaa\x3a\x72\xfb\x54\xad\x8d\xdb\xb7\x99\xaf\xc4\xc2\x87\x6d\xc8\xcb\x1c\x79\xa8\xf4\x3d\x69\xa8\xce\x7e\xf6\xd6\x71\xb9\x1c\x6a\x58\x9b\x64\x9b\x31\xbf\x73\x0d\x6d\xf1\xd5\x54\x84\x6b\x1d\x7d\x1a\x8d\x35\xa0\x98\x3f\x2d\x19\x78\x9b\x29\x15\xa4\xf2\xc6\x0f\x96\xe7\xf0\xd4\x4a\xed\x05\x4d\x9b\x77\x71\x26\x3f\x84\xf8\x4a\x3f\x0d\x96\xb0\x56\x3c\xad\x0f\x2d\xe3\x40\xc2\xfb\x5c\x1a\x9e\xb4\xd9\xe0\xa4\x2d\x58\x62\x0b\x38\x33\x1b\xbb\xb4\xf5\x62\x6a\x63\xda\xfd\x65\x0b\x2f\x0d\x63\xeb\x27\x5f\xd2\x42\x3a\x40\xdb\xe7\x0f\x4d\xe3\xf1\x1e\x4c\x8c\xf7\xbc\xfa\xd1\x37\x1b\x5d\x3c\xd7\xb2\x7a\xd1\x37\x59\x05\xd8\x72\x7a\xfa\x7d\x29\xcc\xe9\x69\xdb\x02\x66\xcd\x16\xff\xa9\x65\x3c\x79\x9a\xe9\x2c\xa8\x99\x46\x83\xd7\x6d\xe1\x79\x4e\xba\x85\x8e\xa2\xcf\x6c\xfa\x56\x72\x5a\xb2\xfb\xf0\xd5\xb2\xd2\x4d\x68\x99\xbd\x27\x9b\xee\x1c\xa5\x2f\x95\x32\xfd\xd7\x0f\x1b\x2b\xa2\xc6\xdd\xff\x7a\x32\x2d\x5c\x4a\xde\xac\x29\x11\x0f\x2f\x13\xfe\x44\x65\x60\xb2\xfe\x58\xd2\x0b\x47\x16\xd6\x91\x08\x34\x3f\x35\x54\x44\xa9\x70\xbf\x2d\xd9\x52\xfd\xd6\xd7\x2a\x9f\xea\x4c\xf0\xea\xff\xd9\x74\x60\xba\x66\xdb\xd4\x5b\x9c\x28\xaf\xc5\x97\xf0\x51\x1a\xec\x54\x86\x68\x8e\x90\x36\x3a\xbf\xcf\x19\x08\x31\xcc\xa7\x46\xd9\xaa\xb3\x15\x87\xe0\xa0\x60\x59\x5f\xba\x02\x15\xb0\xbc\x46\xb0\x5f\x4b\x31\xb2\x33\x9c\x41\x17\x1b\xcd\x6d\x6d\xc0\x63\x1a\x05\x59\xd2\xbb\xb9\x6b\xe9\x57\x52\xf3\xd4\x4a\x7e\xba\xe7\x2f\x3c\x32\xe4\x3f\x2c\x7b\xf2\x79\x09\xbf\x68\xc5\x4f\xdb\xad\x7f\x5a\x4d\x8b\xa7\x75\x29\xdc\x6d\xae\xe6\x08\xfb\xb0\x1d\x92\xc9\x66\x66\xd3\x74\xea\x6e\xf9\xd8\x57\xa7\xd3\xe2\x74\xfa\x74\xba\x38\x3e\xe2\xa9\xcc\x96\xff\x56\xdc\x1e\x3e\x34\x0a\xef\x2c\x0a\xc5\x4c\xd0\x7c\xfe\x98\x19\x0e\xbd\x51\x38\x5a\x59\xea\x50\xeb\x97\xfb\xac\x13\x2f\x5f\x0e\x13\x5d\xa1\xef\x49\xeb\xda\x55\xb3\xd6\x62\xa1\xba\xd5\xc2\x0c\xe2\x8b\xc6\xc0\x4b\x16\xb2\xce\x87\x83\x6f\xeb\xde\x92\x04\xaf\xf0\xb2\x15\x2c\xdf\x4b\xcd\x19\x74\x34\x6c\xac\xa3\xf1\xcf\x65\x5f\xca\x5f\xb9\x97\x81\x09\x51\x6f\x5c\x2f\xc5\x8e\xb8\x94\xf1\xb2\x0b\xb8\x1d\x72\x96\xe2\xeb\x9d\x93\x69\xc7\x4b\xc9\xeb\x98\xae\x94\xbc\xf6\x5c\xa5\x74\x5d\xe0\x15\xb2\x24\x8e\xe8\xc4\x4f\x1b\x93\xd6\xcb\x3e\x2b\xb9\x68\xf9\x95\x8e\xef\xad\x39\x9d\x69\xe4\xfe\x3f\xe9\xd5\x97\xf4\x7a\xf9\x65\x1a\x50\xfc\x5a\x55\x99\x6b\x70\xcb\xdc\x4f\x21\x6c\x63\x02\x1a\xad\xc5\xfd\x63\x12\x03\x1d\xf1\xb6\xf8\x7d\x99\x9d\x6f\x25\xf0\x96\x9b\xba\x16\xda\x32\xc2\xec\x71\x69\x55\x7a\xbc\x6d\x2b\x07\x6a\x7c\xe2\x7b\xe1\x8b\x01\xbb\xa9\xa1\xa2\x17\x01\xaf\xc7\x32\x61\xea\xeb\xa2\xf0\xd6\x4b\xd0\xcd\x4e\x26\x8b\xd9\xe6\xc2\x18\x22\xed\xce\x0c\x49\x76\x39\x31\x0d\x74\x78\xeb\xc5\xee\xdd\x73\xe2\x87\x93\xc2\xb1\x7b\x84\x77\xba\xe0\x1f\x92\x58\xbb\xdf\xdc\x48\x76\x25\x6f\x25\x71\x5b\xe6\x53\xa4\x35\x24\xe5\x31\xf7\xa1\x29\xb2\x1b\x60\xc4\xef\x0f\x32\x23\xbe\xfb\x2d\xec\x7d\x09\xf6\x1c\xaf\x31\x5e\x0c\x47\xb7\xb8\x1c\x5d\xd1\x68\x6d\x79\xf9\x92\xd7\xb4\xd8\x97\xb0\xeb\x13\x78\x20\x4f\x17\xed\xb7\xf1\x02\xc2\x60\xa6\xf8\xa9\xc6\x74\xf8\x89\x53\x59\x8c\xac\xa3\x7e\x5b\xa3\xf9\xf4\xdb\x48\xe7\x27\x16\xe5\x86\xb5\x54\xfd\x84\x1f\x9e\xa5\x65\x4b\x47\x74\x56\x77\xcb\xcc\xb3\x67\x70\x0b\x6e\xc6\x5c\xc0\xc9\x4b\x75\x38\xc4\x31\xde\x23\x66\x97\x10\xc1\x35\x55\xb1\xd5\x62\xbd\x23\xbe\x06\x20\xda\xc4\x8b\x4b\x22\x64\x33\x8c\x64\x3a\xfc\x38\x7c\xf2\xb2\x83\x3d\x98\xf5\x48\x74\x86\xe5\xa3\xb8\xdd\x50\x69\x65\x76\x8f\xed\x16\x6f\xf0\x30\x12\xbd\xbd\x02\xca\x5a\xe1\xf1\xe1\x8d\xe8\x4c\x4b\x38\x91\x6a\xbf\x27\xbf\x7c\xfe\xd7\xcd\x72\x00\x69\xfc\x8f\x17\x2f\x5f\x9c\xf9\x8e\xb7\x41\x80\xf9\x9c\x2e\x90\x15\x32\x2e\x3a\xdb\x4c\x8d\xcb\x6c\xb1\x13\xc3\xe0\xcb\x66\x90\x6a\xd9\x92\x21\x7a\x6b\xe6\xa4\xc0\x5d\x0c\xcd\x53\xac\x76\x1d\x4e\x99\x77\x14\xc0\xf3\x9e\xcb\x28\x9b\xb7\x2b\xda\x82\xed\x1e\x3b\x26\x36\x14\xf7\xc7\x5c\x5b\x74\x46\xdc\x6f\xb3\x25\xc0\xcc\x2f\xdf\x66\x71\x34\xd3\xd9\x1d\x8f\x2b\x38\x4b\x6b\x18\x35\xe7\x2e\xee\x65\xbf\x15\xf7\x9a\xc1\x59\x36\x5d\xc0\x6b\x35\x2c\x58\x9b\x65\x69\xb8\x77\x5f\xb2\x2d\x3a\x60\x66\xd2\x4a\xf3\x37\x0c\xef\x6d\xda\x2e\x23\xfc\xdd\xf3\x26\x80\xc6\x0f\xbb\x00\x93\x8d\xd7\x47\x2c\x5d\x1c\xeb\xf1\x39\xdf\xc0\x82\x56\x5b\xb7\x7e\x58\x63\x56\x5a\x33\x10\xdd\xb9\xa4\xdb\xd0\x34\x1c\x48\x75\xd3\x70\xb1\x1d\x9b\xd1\xb0\x81\x60\xcd\x51\xb5\x5e\x3e\xe6\x7b\x7a\xf8\xb2\x89\xfb\x5a\x4b\xfd\x2b\x77\xd3\xd6\xfc\x52\x70\x34\xd4\x44\xac\xd9\x80\x13\x24\xa6\xd3\xdd\x83\xbb\x4f\x97\x16\x33\xdb\xc9\x12\x82\x99\x98\xe2\x00\x92\x4b\xb0\xd6\x9f\x68\x03\x9b\x09\x5e\x78\x9a\x59\x30\x31\x8c\x86\x4d\x54\xc3\xf3\xd9\xd7\x96\x95\x75\xd4\x3e\x26\xa9\x26\xed\x45\xc3\x9a\x37\xf3\xd8\x3d\x44\x67\xb7\xf0\x77\xb3\x3b\xb4\x87\x71\x89\x06\xa4\xcf\x0f\x77\xcc\x97\xd6\xf9\x50\xcc\xfd\x1a\xe2\x75\xd9\x93\x26\x6e\xb6\xf0\x88\x1a\x91\xad\xac\xf3\xe8\xa5\x5a\x0b\x9b\x9f\xfb\xf9\x44\xe7\xa2\xe7\x8e\x77\x90\xec\x7c\x03\x3a\xa3\xa5\x0a\x55\xc6\x49\x33\xac\x75\xeb\x65\xe9\x78\x42\x7d\x86\xa3\x17\xeb\x21\x36\xac\xfa\x1a\xa8\x90\x9a\x3f\x8a\x75\xc8\xce\xcc\xf7\x50\x2f\x7f\x3d\x7c\x31\xae\xc8\xeb\x28\x4c\x6e\xb7\x34\xd7\xd0\x98\x49\xb4\x2c\xb2\x81\x17\x63\x75\xce\x16\x88\x65\xf3\x85\xd7\x9f\x96\x70\x56\x5b\x5e\x6a\x0d\xb7\x33\x27\x82\x48\x27\xdb\x9c\x33\xef\x56\x2b\x4f\x47\x0f\xf5\x5c\x9a\xc3\x50\x5b\x2e\xab\x33\x2d\x17\x6b\xcb\xce\xba\x26\x5f\x52\xb9\xf5\xf2\x98\xb9\x64\x67\x54\x83\xbd\x07\x5b\xd7\xbc\xf7\xf0\x1a\x07\x25\x08\x2f\x63\x0b\xf0\x69\x6e\xcd\xdb\x57\x2e\xc3\x8f\x1e\xa7\x8f\x38\x99\xb6\x90\xe1\x57\xee\x0f\x1d\x61\x96\x90\xbe\x07\x94\x6d\xb6\xbd\xeb\x91\x37\x86\x12\x0a\x6a\x06\x27\x59\xb6\xd5\x99\x8e\x6f\x4b\x07\xb8\x6e\x9f\x78\x9a\x85\x0c\xf2\xe8\x31\x06\x0d\xf1\x60\xb0\xc7\xef\x87\x33\xb4\x93\x0a\x22\xc3\xfe\x78\x7a\x8b\xc8\xf3\xe9\x67\xf1\xf3\x4f\x4a\x5d\x71\xea\x69\x07\x54\xde\x34\x1e\x8c\x67\x6a\xfa\x23\xb3\x52\xfc\xb2\x86\xe1\xff\x9b\x43\x25\x2f\x4b\xf6\xd3\x92\x5c\xa3\x92\xf0\xd1\xa8\x6a\x80\x61\x67\x1d\x62\xfa\x38\x46\x98\xfc\x0e\xfa\x52\x16\xe4\x69\xf4\xf8\xe6\xb1\x92\x8f\xfe\x65\xbe\x2d\x6d\x8f\x8f\x4b\xdd\xf7\x3a\x01\xf4\x31\xa7\xc3\x68\xe7\x7b\x54\x7e\x1f\xf3\x5c\xbf\xf2\xb1\x6f\x66\x91\xc9\xaf\x6b\xac\xfe\x72\xc9\x1e\xf3\xf0\xd7\xc3\x95\x6f\x4b\x71\x40\x7d\x74\x74\xa4\xf1\xf7\x37\x47\xab\x1e\x2b\xfc\xd3\xb8\xa9\x10\x5e\x1f\xe9\x1d\x78\x1a\x9b\x27\xa1\x3c\x0b\x40\x1d\xc5\xd1\xb3\xd4\xd3\x19\xbe\x3b\x14\x3e\x79\x20\x70\x98\xbb\x63\x7e\xcf\x60\x98\x4d\x22\x22\x36\x67\x93\xdb\xc6\x86\x82\xb7\xbb\x4d\x3e\x6d\x38\xbe\x31\x3f\xee\xd9\x34\xda\x44\x7f\x26\x91\x3d\x5f\x9f\x9e\x54\x1d\xa7\xfe\xa1\xcf\x89\x31\x1b\x72\x40\x41\xdb\x7a\x90\x02\x47\xb4\xc4\x99\x36\x12\x27\xb5\x22\x7a\xcb\xe8\xcf\xa7\x57\x58\x2a\x56\x5a\xba\x79\xff\xcf\xae\xf9\x81\x19\xb3\xff\x8c\xac\x23\xe1\x06\x87\x18\x1e\x7c\x65\x9e\xa9\x8a\x53\x5b\x28\xbb\x5b\xdc\x48\x2e\xb3\x68\xe2\x4b\xc9\xcb\x32\x9e\x2f\x7d\x37\x53\x13\xa6\xc3\x70\x1f\x53\x4e\xcf\x9f\xeb\x1d\xc6\x89\x30\x5f\xef\xdc\xa5\x3f\xf0\xb5\xb9\xc7\x52\xe0\xf0\x34\x9e\x8d\x59\xed\xbc\xb7\xe9\xf9\x7b\xf3\x25\xcd\xe1\x07\xa8\x26\x49\x3b\xbd\x59\xf5\x51\x3a\x8d\x9e\x76\xdc\xe3\x59\xc0\x45\x4e\xbe\xe3\x45\x79\x1b\xb7\x97\xdb\x4c\xf2\xbd\x5c\x5c\x98\x5d\x6a\xf2\x2f\x57\x2d\x34\x25\xf9\xa5\x31\x32\xeb\x5e\xfe\x15\x66\x00\x5e\xd2\xa9\xc9\x88\xcf\xff\xd2\x28\x69\x6e\x5c\x30\x17\x7b\xbf\xee\x38\xcc\x4c\xc9\xff\x6e\x66\x24\xee\x7f\xb1\xe5\x62\xfc\xfe\xd5\xfd\xe6\x59\x5e\x7e\xb7\x75\xa1\xc6\xff\x9a\xcd\x18\xff\x8b\xd5\x15\xe3\x60\xaf\xab\x61\xac\x9f\xeb\x57\xaa\x8c\x6b\xfb\xf6\xeb\xe7\xda\xb2\xff\xf5\x65\x93\xc9\x96\xe2\xa2\x64\x1a\x82\x84\xc6\x25\xd0\x67\x78\x04\xf3\x5d\x98\x36\x00\xbf\xa7\x9d\x99\xf8\x5f\x33\xc4\x17\xd2\xc2\x6c\x56\x7e\x6f\xb7\xcc\xe6\x45\x43\x2d\x83\x58\xbf\x6f\xbf\xcf\x6e\x4b\xd9\x7b\xb2\x65\xc4\xe2\x7f\x6f\x53\x6d\x7f\xb1\x6c\x6f\x99\xda\x8b\x39\xd8\x10\xdf\x31\x7f\x78\xba\xc6\x68\x6e\x07\xfa\x5f\x9e\x3e\x2d\x86\xe7\xbe\x1e\x8d\xea\xd3\xb2\x10\x07\x9d\x35\xbe\xac\xf1\x61\xc0\xd8\x5f\x5d\xff\x98\xa2\x40\x63\xae\xd4\xf9\xdf\x16\x92\x29\x8d\x66\x20\xe5\x7f\xed\x62\x37\x98\x69\x09\x88\xae\xed\xc6\x6f\x2b\x4b\xc1\xe9\x8f\x39\x61\x1f\x4c\x3c\xed\x71\x26\xcf\xd3\x6d\x7e\xc9\x84\xa7\xdb\x46\x6c\x9f\x08\xc1\xf2\xed\xe3\x6c\xec\xd3\xed\xbb\x54\xb4\xa7\x0b\x51\xd2\xf9\xe9\x62\x5c\xd7\xcd\x9f\xee\x0a\x51\xdc\x4c\x4e\x0e\xc1\x3d\x5d\x6a\xae\x8a\x6e\xd9\xcc\x1e\xb9\xd2\x69\xbd\x6e\xc3\x1b\x3c\xeb\x69\xab\xd1\x93\x86\x15\xfb\xea\x5d\x33\x6e\x35\xeb\xd0\x6b\xdd\xde\x87\x86\x8c\x05\x9e\xde\xc9\x69\x39\xbb\x5c\xf6\xb1\x58\xc6\xd4\x38\xe0\x37\x11\xbb\x0f\xe2\x97\x4f\x18\xeb\xd9\x70\xf9\x39\xfa\x7b\xd2\xd0\x63\x09\x34\xcf\x18\x9c\xf5\xab\x5c\xf6\x72\xc1\xd3\x97\xbc\x7d\x58\xc9\xd3\xbd\xd2\xac\xcd\x97\x39\x5a\x4a\x34\xec\x93\x2d\x2d\xc4\xd3\xbf\x7c\x31\x47\xad\x9e\xb3\x61\x05\x5c\x33\x3c\xec\x7e\x78\x12\x8e\x53\x86\xc7\x98\x36\x2d\x13\xef\x27\xbf\x29\x0e\xc4\x92\x52\x19\x9a\xde\xed\x19\xea\x29\x57\x28\x41\xea\x0c\x7e\x98\xe7\x6f\x9f\xd1\x1d\x1f\x61\x88\xee\x18\xc5\xf9\x19\xdd\x77\x30\x5f\x5a\x1f\x7d\xf0\x60\x62\xd0\xff\xda\x7c\x04\x35\x99\x15\x43\xf9\x98\x41\x3d\x63\x1f\xaf\x6c\x32\x9d\x6e\x75\x9b\xba\x91\x6f\x07\x31\x18\xee\xf7\x5c\xcc\xaa\xda\x33\xf6\x5f\xa8\x90\xed\x80\x0d\xe5\x87\x39\xbd\xf3\xcc\xc5\x9b\x31\x15\xd1\x30\xfa\x2c\x62\x52\xfa\x73\x79\xfa\xd0\xa6\xa9\x4b\xd5\xd1\x46\x33\x31\x56\xe7\x6a\x25\xd6\x2a\xed\x72\x97\x6a\x98\x64\xc8\xc5\x0e\x02\x9f\xf9\xe3\x90\x16\x5e\xc5\x5d\xcb\x74\x71\x47\x30\x0e\x80\xaa\xfb\xc5\x25\x3b\x0a\x7f\x42\xd0\x53\x9a\xac\xef\x26\xbb\x06\x95\xaf\xde\xef\x7c\xf8\x86\xa0\x16\x93\x62\x36\x95\x95\x88\x79\x53\x6e\x4b\x38\x66\x4e\x80\xcc\xf0\x99\x2d\x76\x26\xe6\x53\x98\x2e\xf4\x6a\x0e\x64\x3c\xfb\xb1\xac\x10\x3f\x7b\x7c\x86\x38\xb6\x2f\x9e\x3d\xed\x4e\xdf\x81\x11\x9d\xa5\xd1\x18\x43\x02\x54\x83\xc3\x95\xd2\xf5\x1b\x13\x93\xa0\x87\x53\x65\x78\x77\x60\x27\xcd\xae\x26\x1d\x3e\xf5\x90\x8c\x81\xa5\x9f\x39\xa2\xe3\x12\x72\xc4\xbe\x65\x1e\x33\x1c\x5c\xee\x8e\x1c\x55\x7d\x72\xfd\x3c\xf2\x8b\x3a\x25\x49\x53\x66\x1a\xb1\xa3\xb8\xcd\x1e\xe5\x24\x3e\xf7\x74\x98\x99\x40\x15\xb7\x77\x59\xb8\x16\xac\x01\x82\x68\x5c\x06\xf7\x32\x60\xc4\x84\xc6\x96\x30\xd2\x58\x4b\x18\x64\x48\x37\x6b\xe0\x35\x02\xe0\x0f\x57\xd6\x20\x98\xc7\xb6\x89\x77\xaa\x63\xcd\x73\x98\xfa\x3c\x81\x7b\xf4\xc0\x07\xab\x8f\xde\x20\x89\x6a\xd8\x78\x5f\xc9\x71\x26\xf2\xa1\xb6\x99\x8d\xc2\x67\x61\x5f\x4f\xbd\x81\x99\xbb\x3c\xa7\x8b\x34\x6b\x4c\xc6\x40\xda\x03\x6e\x1e\x13\x2e\x1f\xa7\x23\x59\x47\x3c\xfa\x73\x65\xb7\xdf\xe4\xa9\x61\xc0\xa5\x20\xd0\x68\x7c\x5f\x43\x29\x3a\x73\xa5\xf7\xf4\xe5\xd3\x84\xae\x3e\x9f\xbe\x64\x55\x6d\xb6\x30\x1f\x0c\x8b\x3c\xcb\x77\x2c\xec\xe4\xb4\xe8\xe5\x0b\x52\x1f\xd5\x17\xa1\x36\xb0\xb9\xce\x3e\xea\xcc\xbd\xfa\x33\x47\x39\xb3\x7b\xf6\xcb\x0d\x73\x84\xa5\x26\x9d\x7d\xbd\x04\x72\xf6\x0b\x37\x26\xd3\xc7\x33\xda\x43\x87\x5d\xa7\x01\x01\xde\xb1\x9a\xe1\x0b\x3b\xa4\x35\x19\xb7\xc2\x91\x96\x84\x01\x0f\x0b\xcf\x57\x58\x72\x49\xa4\x8d\x0f\xd4\x4e\xc1\x7d\x2e\x4d\x2b\x6b\xd3\xe4\xb2\x5c\x00\x6e\x5a\x97\x70\xe1\x51\xea\x99\x61\xe1\x5a\x83\x75\x7d\x1c\x3f\x0f\x17\xa5\x95\x94\x64\x25\x62\xf4\x9a\x4b\x84\xe1\x32\x8b\x07\x42\xa6\x9f\x57\x4f\xc3\x7d\xc2\x7f\xe6\xdb\x2d\x47\x56\x08\x85\xb1\x90\x49\xcc\x0c\xad\x99\x9a\x8f\x7e\x5d\xdc\x17\x1d\x6b\xa0\x7c\x44\xe3\xf6\x76\xd5\x9b\xb9\x4d\xec\xeb\x9e\x8b\x24\xe1\x5a\x96\xd2\xc2\xb5\x8c\xf3\x03\x9f\x03\x9c\x4c\x36\x4a\xd6\xf0\x0c\x4d\xe3\x43\xd1\x17\x31\x98\xd2\x7c\x60\x09\x62\x5f\xb3\xe2\xee\x4b\x13\x10\xe4\xe4\x9f\xb1\xf2\x79\x64\x3c\xa4\xcd\xd7\xe5\xc8\x8d\x1c\x6e\x6d\x8a\xdb\x0c\x40\xda\xa2\x2d\x39\xf6\x6c\x5f\xf8\x3c\xda\x17\x70\xc4\xa0\xaa\x27\xeb\xf2\x76\xc0\xbe\xc2\x74\x77\x0f\xaf\x60\x56\x29\x03\xaf\x53\xbe\x0c\x9d\x6b\xa2\xc4\xf8\xb5\x69\x5b\x2a\x44\x73\x89\x87\x2f\x6d\x12\x1a\xf7\xdb\xda\x23\x1a\x26\xb1\x30\xe6\x2f\xfa\x75\x2e\x84\x28\xb1\x4e\xaf\x83\xc5\x40\xc3\xb9\xeb\x72\x8b\xf3\xac\x13\x57\x43\xc6\xcd\xd8\x67\x8c\x64\x24\x64\x53\xef\x69\xa6\x58\xe1\xa3\xcb\x16\x3e\x0d\x7f\x76\x06\xaa\x33\x3c\x50\xaa\x5f\xe7\x1e\x76\xf8\x9f\x16\x78\xe8\x4c\xf7\xff\xeb\x1f\x49\xfb\x5f\xd7\x84\xca\xf6\x74\x79\x48\x55\x16\x4e\x09\x15\xa3\x6d\xa6\xee\x83\x89\x0b\xb5\x85\xd6\x8d\xd1\xcf\xbd\xba\x80\xd3\xfb\xc3\xf2\xb2\xbd\x41\x14\x67\xab\x4d\xd7\xc6\x7a\xc1\x14\x98\xe6\xcb\xff\xac\x8e\x2c\xba\x36\x97\x48\x9b\xdf\x9f\x50\xba\x6e\xa5\xae\x5a\xd3\xad\xa7\x4d\x53\xcc\xad\x5b\xfb\x7f\x34\xda\xe2\xd3\x9d\xe3\x12\x97\xb2\x34\x14\xd0\x28\xbe\x7d\x06\x9b\xf4\x96\x04\x6a\x9e\x4f\x23\xed\x8b\xd6\x6b\x6e\x58\x5a\x3e\xc6\x81\x56\x73\x6a\x95\x8c\xdb\x01\xab\xfb\xd4\x0e\x95\xfa\xff\xe8\xad\x7e\xf6\xb0\xda\x7b\xad\x53\x5f\xd2\x48\xdb\x52\x90\x59\xc3\xa4\x7f\x09\x4b\xf3\x54\xd6\x6e\x3c\x88\x14\xd6\x45\xc7\xbf\xb2\xbd\x3d\x38\x74\xac\xab\xc5\xdc\x41\x21\xd6\x56\x0b\xeb\xd0\x89\x35\x24\x73\xff\xcb\x21\xc9\x30\xe0\xbf\x5e\xb2\x02\x7c\x8b\x9e\x86\xde\xba\xa7\x18\xfd\x01\x21\x57\x39\x45\x7b\x09\x8d\x4f\x3c\xe8\x14\x68\x3d\xff\x40\x4d\xd2\xbe\x8c\x99\x22\x9e\x92\x08\x32\x52\x15\xb6\x7c\x7f\xca\x97\xcb\x0c\xef\xe6\xab\x2a\x20\xff\xba\xd9\x0f\xe0\x1b\xb1\x12\x44\xe0\x38\x1d\x23\x3a\xfb\xf6\x18\xec\x5d\x1d\xb0\xd5\xef\xdf\x60\x36\xa5\x63\xde\x0c\x3e\x78\xe1\x44\x2e\xb9\x6a\x50\xd6\x2b\xaf\x31\xcb\xba\x60\xcc\x2f\x05\x6f\x5d\xd8\x88\xfd\x41\xc3\x38\xee\x13\x98\x2c\x9e\xf7\x79\x53\x3e\x8e\x47\x96\x98\xac\x5d\x77\xec\x07\xd9\x5e\xec\x5e\x14\xc7\x51\xac\xc0\xc7\x54\x81\x99\x35\xad\x17\xbd\x30\x14\xb2\x5f\xde\xcb\x40\x13\x54\xf2\xf5\x72\x54\x9d\xc6\x54\xe5\x72\xff\x65\xcd\x0f\x9a\xff\x2e\x51\xb9\x70\xb5\x79\x1a\x15\xf6\x9e\x6c\xda\x8c\xb6\xd1\x12\x3e\xdd\xb9\xc8\x38\xcf\x3e\x2f\x97\xcc\x36\x05\x8d\x51\x9f\xf6\xac\xac\x6a\x4c\xbb\xa9\x3f\xdd\xa6\xd3\xf5\x49\x65\x28\xaf\xe2\xb1\x14\x2d\xa1\x28\x25\xc8\xca\xbe\xe2\xff\xe7\xb3\x0d\x67\xb1\xc7\xa8\x2f\x57\xb7\x1e\xcd\x0c\x51\x35\x86\x03\x55\xc3\xcc\x52\xe4\x01\xdb\xe9\xf9\x85\x67\x8d\x6e\x93\x4c\xba\x20\xad\x77\xc6\x93\xa2\x34\x5d\xa6\x18\x89\xb3\xde\xd5\x65\x57\x53\x35\x66\xc5\xbf\x3c\xf5\x08\x36\x8b\x2f\xbf\xcf\x02\x7f\x61\xee\x62\x8b\xda\xe5\xe3\x7a\x79\x85\x77\xd7\x27\x52\xb9\x0d\x97\xc7\xf4\x4a\x33\xd9\x8b\x78\x06\x02\xf3\xd1\x48\xd6\x38\xf3\xbe\x84\xc0\x8e\x8c\x2f\x1c\x25\x54\x57\xcc\x83\x42\xa0\x22\x58\x10\x30\xd8\x41\xfc\x15\x8a\xdb\x96\x89\xfc\x15\xea\x76\xae\xd3\x51\xd2\x32\x6d\xf3\xb5\xb4\x05\x57\x36\x5f\xf2\xbe\x1c\xea\x02\x4f\x93\xd9\x67\xe3\xa1\x31\x5e\x70\x67\x36\x50\x33\x4e\x4e\x8f\xec\x89\xce\xf1\xa4\x20\xf0\x6b\x29\x66\xf6\x19\x39\xe2\xeb\x5b\x46\xd0\xa9\x4b\x42\x2e\x83\xe5\x6b\x1d\x2a\x2f\xef\x92\x30\x9f\xe3\xd1\xe5\xc9\x82\xc1\xa5\xe2\xb3\xd8\x72\x03\xeb\x64\x33\x07\xa6\xf8\x6f\xc2\xcb\x7e\xe8\xff\x88\xcb\x66\xad\x59\xc8\x8c\x60\x6b\x90\x5e\xac\xdd\x21\xc3\x7a\xb0\x69\xd4\xca\x71\x1e\x3c\xfa\xd5\xc0\xf0\xd4\xaf\x17\x6b\xff\x47\xdc\xf1\xd4\x62\xe7\xbc\xb5\x3b\xc5\xe4\x4e\x36\xcc\x99\xd1\xd8\x87\x64\xdb\xa9\x61\x82\xb5\xca\xb7\x1d\x1a\xd3\xb3\xf2\x5a\x02\x35\x64\x5c\x12\x99\x62\x06\x73\x9a\x32\xc3\x06\xe6\x84\x32\xa5\x59\x45\x0d\xa5\x45\x22\x50\x4a\xbc\x6e\xa9\x66\xec\xba\x65\xca\x4b\xd1\x49\x79\x9d\xe9\xa7\xdc\x8b\xd9\xde\x4c\x3d\xae\x3b\x67\xa9\x5f\x5a\x4f\x53\x6f\x25\x4c\x83\xad\xac\x8b\xc9\xa2\x33\x4b\x42\x7e\x98\x3d\xab\xfc\xc0\x81\x06\xeb\xb4\x68\x29\xa9\xdb\x68\xfc\xf2\x03\x37\x57\x86\xd5\xe5\x1e\x0b\xd1\xb1\x5d\x2f\xc4\x7a\xfa\x3f\x43\xf2\xfc\x58\xf6\xa9\xf3\x66\x66\x82\x79\xdb\xfa\x2d\xbd\x38\xe3\xe1\xcd\x9e\x4b\x78\x2e\x87\xd3\x48\xcb\xd2\xe7\xd3\xeb\x60\x0b\x78\x09\xc7\xf3\x19\x36\xb3\x28\x93\xcd\x19\x83\x9c\x56\x67\x6f\xa7\x5b\x0f\xf9\x0e\x89\xaa\xd7\xfc\xc4\x7c\x89\xce\x6d\x87\xdd\xf9\xb6\x07\x19\x95\x2d\xa6\x4b\x5e\xc7\x17\xeb\xdd\x04\x7e\x06\xf9\xcf\xf0\x60\x77\x4a\x72\x49\x6e\xbe\xc4\x9d\xf0\x56\xfa\xf2\xbd\xb7\xe8\x7e\xb8\xdb\xa3\x61\x12\x3f\x8b\x91\x53\xfe\x91\x43\xc2\xf9\xd7\x8c\xee\x88\x18\xbf\x28\xe2\xb6\x44\x30\xe7\x52\x7f\xbb\xc3\x89\x26\x86\xfe\x0c\xd7\x93\x74\xc2\x67\xe9\x66\x8d\xb8\x78\x11\x8d\x70\x98\xdb\x2d\x47\xf6\x6f\x77\x0f\xdf\xc4\x83\xe2\xf6\xfc\x6b\x9b\x4f\xd2\x8a\xd1\x6b\xc5\x04\x7d\x4b\xff\x47\xa4\x8e\x1b\x0f\xb7\x2b\x1e\x52\xbe\x12\x8b\x23\x11\x14\xb0\xcd\xa6\x11\x28\xc3\xeb\x62\x2e\x70\x81\x6d\x41\x4b\xe2\xa0\x33\xdc\xa5\x0d\x27\x6a\x1d\x57\xb8\x89\xa0\x7c\x98\x14\x68\xeb\xd6\xd7\xed\x3a\xcf\x0e\x6f\x37\x8e\xa7\xdc\x1e\xa7\x4c\x65\x70\x72\xfb\xd8\x64\x9d\xd6\xce\x13\x6f\x9f\xfc\x72\xb0\x58\x34\x46\x98\x78\xbf\x56\x02\xe2\x0b\x8e\xee\x5b\xd3\xa2\x63\x72\x47\xb4\xd4\x7e\xf9\x38\xed\x3f\x74\x8c\x13\xe1\x1e\x4d\xc8\xa4\xfa\x15\x4b\x1d\x8b\x97\x66\x25\x84\x98\xb9\x88\x28\x74\x04\x57\x67\x45\x2c\x7b\xd4\xf8\x61\xd6\x00\x89\xf9\x25\x05\x88\x1b\x0f\x3e\xa4\x2c\xa9\xce\xfa\x7d\x89\xe0\x8d\xa1\x55\x9f\x72\x0f\xa0\xb7\x24\x2b\xf1\x6e\x82\x0d\xfa\xf1\x79\x5a\xae\xe6\xe4\x03\xa8\x39\x60\x8e\x43\x8e\x73\x2d\x63\xd2\x61\x39\xa7\xb5\x02\xfa\xa2\xf3\x69\xa5\xdd\x7d\xc4\xc0\x5c\x52\x1b\x4c\xdd\xa3\x79\xb7\x35\x6b\xee\x64\x29\x93\x80\x9f\x21\xe6\xca\x32\x7a\x73\xba\x97\xf3\x6c\x77\x74\xcb\x02\x92\x70\x53\x8e\x96\x19\x2b\xd8\xfa\x51\x03\x14\xed\x25\x87\x3b\xf6\xd9\xd7\xde\x99\xa7\x0b\x77\xc6\xa3\x8f\xb3\x71\xbc\xb3\xc9\x9a\x1c\xfd\xc5\x13\x45\xdc\xb7\x5a\x2a\x03\x1f\x04\xaf\x2b\xb5\xee\xdc\x36\x93\x89\x2d\x5f\x8b\x81\x4b\x75\xcd\x85\x2a\xf0\x6a\xb6\x15\xf7\xe6\x3e\xf8\xce\xd5\xf4\x7e\xca\x4c\xfe\xe4\xda\xee\x3c\x6f\xeb\xde\x58\x98\xb3\x0b\x0e\x43\xc7\x24\x99\x68\x7d\x1a\x89\x1f\x06\x38\xcf\x8b\x5f\xa6\x87\xe0\xb7\x99\xdd\xdf\xc5\xef\xcb\xf1\xf8\xbb\xf8\xe7\x9a\x76\xa2\x61\x43\x60\x6f\xaa\x28\x33\xe7\x65\xee\xe2\x2f\x39\x1f\x76\x17\x7f\x9b\x6b\x3e\xd4\xe1\x3d\xde\xda\x41\x14\x1c\xc5\x7f\x4c\x66\xdc\xac\x1f\x0d\xa3\xea\x2c\xc1\x58\x64\x10\x82\x9b\xa1\x07\x3a\x57\x99\x83\xde\xc5\x9b\x53\x6a\xc4\xe6\x02\x96\x32\x93\x2f\x25\x5c\xe1\x43\x63\x34\x73\x25\x3f\x96\x70\xe5\x87\xf1\x31\xf3\xe5\xb7\x49\x7b\xf9\xa0\x26\xb3\xf3\xde\x37\x8d\x7b\x36\xd7\x98\x94\x59\xff\xf3\xb2\x6c\x7d\x97\xfc\x74\xc9\x7e\x7e\xba\x64\xbe\x99\x42\x37\x98\xc9\x9d\x6c\xcf\xbb\x82\xae\x49\xcd\x1a\x71\x71\x3f\xb4\x79\x32\x11\xef\xb5\x7e\x14\xe5\x92\xed\x81\xab\xbb\x64\x33\x5c\xbc\x4b\x8e\x1e\x4f\x9f\x68\xcc\x23\x0d\xd6\x6c\xca\xf0\x38\x76\x84\x88\xa8\x71\x3a\x86\xdf\x19\xb8\x18\x7e\xed\x27\x7b\x90\xf5\x2e\x90\xb2\x39\xb2\x99\xc6\x71\x56\x2c\x29\xb4\xb2\x35\xdd\xe3\x62\x7b\x3d\x43\x79\x97\x8c\x81\x8d\x9e\xf5\x11\x6e\x3f\x87\xb6\x1a\xe7\xa3\x4c\xb6\x8b\x2f\xf9\x2e\xc1\xcb\xbe\xa3\x32\x8d\x8b\xbd\xaa\x72\x97\x5c\xdd\xdc\x7c\x24\x6a\xef\xa1\x13\xb7\xbd\x87\x2c\xa6\x4e\x5c\x66\x12\x11\x5b\x63\xdd\x96\xdc\xc0\x0b\xde\x0a\xab\xad\x42\xd9\x9e\xbf\x02\xed\xf5\x83\x2d\x99\xde\xec\x89\x2b\xc3\x35\x24\xaf\xb0\x8f\x22\xfe\x32\x8b\x7a\x83\x2e\xae\xfd\x86\x6b\x44\xa2\x8f\x65\xf1\xbb\x3f\xec\xdc\x9b\xa9\x9a\xeb\xbe\xcc\x92\xdb\x63\x35\xc6\xd2\xb2\x76\x2f\xdc\x7c\x1e\xe7\xed\xef\x6e\xa5\x4f\xdd\xbd\x6c\xe7\x22\x61\x4e\x74\xbc\xc5\x45\x88\xc9\xbf\xbe\x1e\xd3\xbe\x3b\x96\xdc\x4d\x04\x3b\x75\xd0\x23\x52\x65\x9e\x01\xb9\x7b\x31\xb7\x9b\xef\xde\xec\x11\x1a\x1c\xc6\xb5\x0e\xff\x9b\xcb\x07\xff\xba\x4b\xed\x63\xe1\xa8\xb8\x7d\x5c\x1d\x14\xfc\x1e\x58\xdd\xc0\x1d\xf2\x69\x23\xed\xf9\x9a\x0c\x42\xf0\x18\xda\x86\xa1\xac\xc3\xf7\xe2\x9a\x5f\xbf\xfa\x8f\xcf\x4b\xa8\xcb\xba\x34\x31\x69\x5b\xe8\x70\xec\x73\xe1\xa2\xf8\x59\x30\x81\xb9\x46\x15\xef\xec\xd1\x1e\xa6\x26\x14\x22\x7f\x9e\x91\xb4\x5f\x38\xd7\x2b\xc1\xf0\x33\x08\xf3\xb4\x2f\xe0\xe2\x75\x5d\xb6\x54\x55\x63\xf1\xa7\xea\xf0\xba\xf8\x87\x8f\x03\xc4\xe1\x08\x93\x59\x2d\x0b\x5f\xc5\x6d\xa3\xfe\x58\x0d\xf1\x67\xf3\xe1\x6e\x0a\xef\x19\xa0\x8f\xc1\xb8\x6a\x8c\xf0\x6d\xe6\xc3\xe8\x0c\xb8\xf3\xf7\xd3\x37\x33\x40\x07\x9b\xc7\xea\x8a\xb9\xba\x4b\x58\x16\x15\x19\x9a\x60\x44\x77\x59\x6a\x65\x25\x11\x0d\x6a\x6b\x11\x53\x44\x3c\x6d\x8b\xdc\xb8\xa9\x65\xd3\x94\xf5\xc2\xe2\x83\xee\x9f\x15\xbf\x35\x97\x0e\x33\x6e\x2b\x7e\x93\x9b\xeb\xc6\x85\x6e\x45\x01\x14\xbf\x9b\xa3\xc5\xc5\xef\xdd\x2e\x4b\x16\x7b\x97\x78\x19\xe3\x14\x6f\x85\xaa\x94\xe5\x6a\xac\x32\x9b\x19\xcf\x79\x7f\xa3\xac\x37\x67\x8b\xb7\xbb\xaf\xca\x16\xbb\x7d\xa4\xf5\xb3\xdb\xb4\x5e\x6f\xd1\x82\x4b\x70\x8e\x65\x45\xb6\x78\x2b\x16\xb5\x78\x2b\x02\xab\x78\x39\xa9\x60\x74\xc2\xb5\xdc\x36\x2b\x3e\xac\x97\x14\x48\x83\xfa\x08\xa3\xf1\x9f\x8d\xbe\xd9\xc5\x62\xd1\x07\x33\x2e\xd6\xe3\xe8\x74\xa2\x22\x78\xa4\x7a\x74\xbf\xd6\x9c\x6e\xed\x17\xbf\xcc\x1c\x98\xda\xd2\x31\x25\x25\x15\x5c\x7b\x19\x2e\xac\x5b\x4b\xa4\x91\xfe\x75\xd3\xc2\xd3\x20\x6c\x5f\xdd\xbe\xfc\x3e\xd0\xf5\x30\x35\xd2\x4c\x11\x8b\xde\xcb\x9d\x1f\xfb\x9a\x25\x69\x37\xa5\x3f\xf9\x1f\xcd\xc8\x75\x58\x41\x43\xe2\x50\x14\x95\x45\x9f\xe6\xf9\x86\xcb\x85\x74\x46\x9a\xc6\xb7\x8f\x71\x96\x4c\x61\x6f\xc3\x86\xb9\x29\xf0\x99\x58\x0b\xd6\xe5\x8f\x13\xae\xc5\x43\x4c\xd5\x4c\xa2\x65\xbd\xbb\xf8\xff\x15\x71\x6a\xf4\x6c\xae\x7c\x0e\xcb\xad\x8e\xe6\xbf\xd5\x59\x6d\xfe\x3f\x8e\x55\xe3\x50\xa8\x9a\xa4\xeb\x90\x79\xf2\xc5\xc1\x6e\x7b\x3c\xff\xaf\x87\x62\x22\xc8\xd2\xad\x8d\x71\x11\x77\x6d\x8c\x8f\x9a\x58\x37\x5b\x0c\xea\xd6\x25\x22\xd5\x5f\x8f\x38\xd3\x78\x99\x7f\x30\xd5\x2f\xf3\x4e\xa2\x92\xb7\x21\x4d\xf1\x91\xac\xfd\x10\x83\xb5\x15\x83\xb5\x56\x4d\xe6\x12\x5b\xb2\xc6\xde\x71\x04\x7b\xb9\x8f\xcf\xaf\xb9\x89\x56\x3c\x86\x92\xab\x09\xd6\xb1\x99\x51\xef\xfc\x51\x00\x44\x67\x31\x64\x8f\x5c\x10\xcd\xb6\x80\x1b\xc9\x43\x20\xc1\xe4\xa0\x95\x28\x44\xcc\x8a\x59\x21\x5e\xd7\xae\xc7\xde\x8c\x22\xb6\x74\x13\xcd\x95\xfd\x83\x1a\xb3\x73\xee\x27\xc4\x16\x9a\x36\x05\x86\x12\xb1\x25\x86\xc7\xc6\x33\xfa\x6d\x69\xca\x1b\x75\x17\xa7\x35\x9d\xad\xf4\xf3\xb2\x5e\xfd\xa1\x49\x67\x5c\x58\x3a\xbc\x81\x45\xb1\xe9\x84\xb0\x24\x63\xd3\x9f\x35\x6c\xf2\x9b\x35\x9c\xe2\x5f\xc1\xe2\x97\x16\x66\xc0\x31\xe8\x59\x4f\x38\x30\x37\xc1\xb2\xe5\xe8\x7c\xf3\x19\x84\x72\xbe\xdb\xc9\xc3\xa7\x90\xb5\x59\x1a\xee\xe7\x8b\xc5\x3f\xcb\x00\x2b\x9b\x4c\xcb\xef\xe9\xf1\xdc\x9d\x2f\xf2\x00\x0d\x21\x16\xa6\x66\xb6\xf8\x4a\x5f\x36\xcf\x4a\x8f\x3a\x88\x33\x27\x0f\xcb\x72\xee\xb0\xf4\x5b\xf7\x9e\xab\xdb\x20\x1a\x53\x27\xc7\xd5\x6d\x65\x1e\x2b\x21\x46\x63\x54\x3f\x48\x5c\xef\x75\x56\x17\x44\x5a\x6d\x5d\x44\x54\x57\x17\xbd\xaa\xab\xb6\xf1\x29\x7e\x9c\x14\x20\x1d\x1b\x33\xe6\x1a\xe8\xea\xe2\xcb\x90\xf4\xb1\xfd\xc2\x3a\x1f\x47\x67\x87\xe6\x7b\x32\x6b\x5c\x43\x32\x57\x0a\x2a\x8d\x98\xc2\xc2\x87\xa9\xfb\x63\x79\x91\xa6\x52\x4b\xe4\xcc\x54\x97\x88\xa6\x70\x0b\xcb\xc9\x05\xd2\xa8\x4f\x67\x82\x62\xf7\xd0\xeb\xe6\x8a\x8e\x31\xeb\x76\xe6\xc8\x4b\xf9\x04\xb3\xe6\xac\xd9\x73\x13\x79\x6d\x5c\x64\xea\x56\x7a\x0b\x12\xd9\xff\x19\x81\x57\x3b\xd2\xad\x7e\x8b\x7d\x37\x39\xed\xcd\x36\x92\x90\x97\xb5\x5a\xfc\xf6\x1e\xb0\x4d\x83\x63\x97\xab\xfa\x7d\x2d\x98\xf5\xf3\x1e\x57\xf5\xc7\x72\x6d\xa5\xe2\x9a\xb0\xa1\xe1\x4f\x4b\xa5\xbd\xfb\x5b\xed\xc5\xf7\xaa\x02\x64\xea\xda\xd7\xd6\x8f\x6e\x16\x7c\xae\x01\x2a\x5d\x3e\xb7\x25\x86\xac\x61\xcd\x37\x33\xc3\x21\x8d\xbe\x38\xd7\x97\x98\x89\xa8\xb4\x55\x6b\xe6\x92\x10\xb1\x4c\x63\x1a\x1b\x74\x70\x1b\x76\x3b\xe8\xa9\xfe\x5f\x5f\x8f\xd3\x8b\x8e\xda\xfe\xd7\xbd\x1d\xdd\xe2\x2d\xd0\xa8\x68\xb1\x56\x5e\x61\x5b\xaa\xa3\xea\x58\xbf\xcb\x2b\x58\xda\xda\x3c\x69\xbb\xac\xc6\x83\xa8\x43\xe7\x38\x11\x52\x4f\x79\x39\x49\xba\xc2\x61\x5c\x08\x9b\x0f\x07\x57\xa5\xf1\x71\xf0\xf5\xfb\x88\xd4\x78\x3d\x11\xf8\xa5\x1e\x5c\x61\xce\x6e\xc0\x86\xa0\xe0\x1a\xac\x38\x50\x66\xab\x8b\x57\xd7\xba\x15\xec\xd5\x96\x1a\x96\x39\xd3\x94\x70\x5e\xaf\x2c\x37\xfd\x6b\x7e\xcc\x3b\xf8\x35\x3f\xc6\x82\xd5\x87\x08\x74\xa6\x26\x35\xf3\x16\x46\xfb\x2e\xc4\x98\x8c\xd6\xdc\x70\x31\xee\x41\x7d\x45\x7c\x66\x40\xf3\xe7\x35\x32\x16\x78\x38\x42\x4e\x6c\x8d\x73\x8e\x7d\x09\xce\xec\xba\x3e\x06\x40\x4c\x17\xa3\xaf\x51\x7e\x81\x25\x0e\xf7\x19\xd6\xf3\x19\x35\x53\x8f\x1c\x0e\x76\xf5\xfe\x28\xb9\xb7\x33\xdb\x84\x78\x0e\x4f\xe2\x76\x7b\x9b\x34\xc4\x96\x80\x8b\xc6\xb4\xf8\xe1\xac\xdf\xcc\xc9\x03\xa2\x36\x43\x95\x9a\xda\x7e\x9f\xbe\xd8\xe6\xe1\x0e\x29\x69\xe3\x7a\x9b\xe3\x69\xf5\x0e\x25\xb4\x89\x4c\x83\x09\xde\xad\x13\x65\xb9\xe5\x21\x1a\x93\x66\x9a\x6c\xf8\x25\xd8\xeb\xd1\xde\xe5\x65\x94\xba\x8c\x2d\xcd\x1b\x3f\xb5\xb9\x5b\x3a\xd7\xe6\x4a\x1b\x9a\x73\xfa\x49\x05\xd6\xb8\x03\x62\x5a\xb2\x86\xe2\xae\x46\xd7\xb2\xdf\xc2\x3d\x77\xae\x88\x2d\x1f\xf9\xc1\x2c\x02\x4b\x8e\xd3\x08\xf6\x90\x10\x95\xa1\x59\x82\xe6\x2d\x4e\x30\x68\xcb\x4e\xf5\x53\xfd\xee\xfb\x1a\xfd\xbe\x8b\xbf\x3d\x7e\x74\xee\xed\xbd\x44\xa1\x3f\xfe\x47\x2a\x69\xed\x38\x7f\x61\xe0\xea\x42\xb7\xc7\x33\x94\x99\x12\xa1\x3a\x1a\xf7\xfe\xb0\x42\x56\x6b\x7f\x44\xf3\x12\x48\xed\x0f\x2b\x8b\x41\xa8\xed\x8e\xfa\xc3\xcc\x8b\x95\x2d\xde\xad\xe7\x16\x6a\x7f\x98\xad\x1e\x61\xb7\xfd\x1a\xf6\xf7\x80\x73\x13\x94\x68\x73\x56\x7a\xaa\xd1\x31\xbe\x89\x96\x75\x10\x3a\x4b\x90\x96\xa9\x49\xed\x8f\x66\x7b\x02\xd0\xe9\x47\x5b\x3f\x45\x3f\xbf\x98\x41\x7f\xed\x0f\x33\xe0\x56\x66\x3d\xdd\xb6\x15\x0e\xa3\xdb\xc7\x2d\x7b\xd2\x91\xa1\xa6\x88\x28\xa8\xdd\xf8\xf3\xfc\xd8\x83\x13\x9d\x91\x4c\xcf\xe7\x28\xa4\xfd\x90\x76\xbf\x1f\x46\xae\x91\x32\xeb\xa3\x54\xfd\x7e\x5d\x39\x89\xd6\x4d\x1d\xe4\x0c\xe5\xfa\x3a\x0a\xf1\x75\x03\x74\xe8\xd8\x90\x41\x4b\x73\x7a\x39\xf1\x32\xa8\x0d\x45\x79\x3a\x8d\x45\x29\xe3\x8c\x4e\xed\x65\x4c\x59\x18\x6b\xea\xd4\x8f\xb3\x0b\x43\xc7\x86\x81\xb5\x3e\xf9\x2c\xfe\x63\xef\x04\x30\xcd\x00\x32\xb3\xe1\xab\xe6\xec\x6d\xfd\x09\x97\x9c\x4a\xa8\xef\xc8\x8f\xb1\xf1\x9e\x73\x7d\x5f\x1f\xb2\xb0\xea\xfb\xba\xbc\xdc\xfa\xa8\xef\xeb\x76\xed\x0c\x7f\x6a\xf7\x92\xc7\x78\x19\x7f\x88\x8c\xa8\xef\xb4\x9d\x65\xd9\xe9\x26\xad\x3c\x8f\x98\xd4\x77\xb2\x52\x10\xeb\x1b\x8f\x68\xf3\x39\x97\x86\xed\xdf\x81\x34\x99\x9a\x8b\xdf\x4b\x2f\xd1\x70\x49\x35\x5a\x9e\x78\x5b\xa8\xb9\x5f\x51\x4c\x56\x83\x59\xd3\x73\xd1\xae\xb9\x5f\x8e\x57\xfb\xb8\x0a\x25\xdc\xd8\x22\x0d\x35\xbb\x9d\xcb\x79\xd8\xe6\x7d\xcb\xcd\x45\xfd\xcc\x4c\xfa\xcc\xe6\xf9\x1a\x95\x71\x09\xd2\x80\xe7\x78\x1c\x02\x7e\x67\x90\x96\xd7\x96\xda\xfa\xd8\x12\x32\x54\x9c\x4d\xd5\x9a\x5a\x97\xa4\x44\x8c\x81\x75\x87\x35\xe2\xa7\x91\xe9\x6d\xc1\x1d\xc3\xd9\x5e\xb5\x73\x48\x50\x6a\x39\xae\x95\x98\x35\xa4\x68\x31\x19\x0e\x99\xcd\x90\x86\x53\x7f\x1c\xde\xe2\x96\x21\xae\x70\xe3\x24\xb5\x4e\x1f\x06\xda\xff\x18\x50\x4f\x8a\xe3\xd1\x24\x40\x51\x14\xec\xf7\xb0\x6c\xd3\x34\x6a\x65\x76\x75\x79\x39\x80\xdf\x8a\xa3\x98\x9b\x32\xdb\x8a\x5b\x45\x69\x43\x63\x3d\x5d\xa0\x5a\xda\xe0\x33\xb7\x2b\xe6\xd0\xb1\x2b\xda\xd0\x08\x8b\x85\x31\xf9\x50\xd6\x96\x30\x2c\x53\x21\xe8\xd8\xfb\x05\xd0\x30\xdd\x99\xf0\x36\x96\xd7\xa0\x81\x53\x62\xff\xc3\xdf\x2b\x5f\xbd\xfd\x68\x2b\xa7\xde\xe2\xb3\x3d\x1f\xd8\x8a\x7b\xf9\x38\x72\xe2\x35\x16\x73\xdb\xff\xee\x38\x91\xd6\xb8\xe7\x06\x22\xbe\xf8\x7a\x3b\x35\x22\x53\xa5\x46\x5d\x6f\x95\xbb\xe4\x4d\xdf\x4f\x69\xc5\x4a\x4d\x6e\xa5\xbb\x11\xa1\xae\xf5\xa3\x74\xcd\xf8\xce\x57\x3e\x5b\xbf\x7a\x5c\x6e\xf5\xb5\xf7\xbd\x94\x83\x77\xa1\x86\xe4\x7f\x74\x8c\x8d\xfe\x08\xff\xd6\xbb\xce\x3d\x6e\xcb\x8e\x75\xc7\xd3\x64\x8b\xc6\xee\x8b\xbd\x68\xdd\xd7\x19\x14\xd1\x29\x92\xb4\xa7\x29\xea\x45\x70\x13\xfc\xaf\xfb\xe9\x66\xa8\xc3\x76\x1b\xcf\xca\x8d\xfb\xa1\x3d\x41\x0e\xdb\x28\xfc\x93\x2f\xdf\x95\xdd\x25\x1c\xe7\x28\x01\x10\xf5\x26\x12\x36\x7a\x95\xbe\x59\x0e\xf7\x75\xd9\x3e\xee\x75\x1d\x21\xf7\xd9\x5a\x03\xce\x21\x61\x6f\x6d\xb6\x14\x2f\x37\x66\x92\x2f\xb7\xd9\x9b\xd6\x2f\xb7\x59\x61\x76\x2f\xb7\x1c\x7e\x20\xca\xa7\x72\x5e\x46\x92\x04\xe3\x36\x0d\x59\xa9\xf2\x60\x12\x24\x60\x63\x6c\xa9\xeb\x2f\x17\xbb\x04\xee\xce\xf3\xa4\x15\x33\x6b\xac\xd8\x19\x24\xd3\x59\xa6\xc1\x47\x2c\xcd\x56\xc8\x6b\x4a\x38\x7f\xad\x37\xdf\x5f\x4e\x45\x0c\xbe\xfc\xe1\x9b\xca\x30\x66\x32\xac\x0b\x9b\xad\xc0\x0b\x22\x6f\x66\x40\x3e\x24\xe0\xbc\xfc\xfa\xcc\x15\xf1\x85\x35\x23\x16\xf2\xe5\x3f\x04\x02\xb0\x86\xba\x5c\x1e\x33\x39\xfc\x7a\x44\xe0\xe5\x3f\xae\x87\xf1\xdb\xf3\xab\x53\xd5\x35\x13\xce\x62\xcf\x7e\x29\x9d\xa6\xab\xce\x44\x5e\x5e\x5e\xe9\x17\x18\x92\x2b\x62\x07\x1d\xb7\xf1\x62\xc9\x91\x60\xde\x3b\x62\xc2\xe3\xae\x57\xd8\x3e\x12\x3e\x6c\x2d\x8b\x93\xe1\x98\x2b\x21\x42\x66\x81\xa2\x12\x29\xeb\xd9\xc0\x6b\xfc\xc2\x32\x90\x79\x99\xc9\xe9\x2b\xe4\xb8\x84\x2c\x2f\xbb\xc3\xe0\xd3\xde\x7c\xc5\xeb\x15\x8a\xb1\x54\x5a\xf7\x03\x2d\x1e\xd7\x79\xe9\x8b\x89\xfd\xb4\x9a\xb4\x25\x25\xcc\xd3\xd5\xc0\xd3\x98\x99\x80\xbc\xc2\x2b\xcc\xe3\xc3\xc2\xac\x9b\xd9\x64\x22\xf0\xac\xeb\xe0\xd3\x60\xb4\xd9\x9f\xed\xfe\xea\xcb\x88\x16\x7e\xe5\xd8\x1f\xd6\x9c\x5d\x09\x79\xe9\x22\xfd\xab\xc7\x63\x84\xea\x87\xa7\x09\x3f\xde\x7d\xab\xc1\x9f\x53\x5a\xac\x9f\x5c\x64\xd0\xf2\xe7\x9d\x39\x0b\x99\xf9\x5d\x67\x52\xe4\xec\x78\xfe\xe6\x6b\x54\x08\x46\x4e\xbb\x63\xc2\xab\x0d\x39\x35\xbc\x05\x0e\x80\xbd\x03\x96\xca\x21\x77\xf5\x6e\x54\xdc\xe2\xf6\xe2\xf9\x15\x4e\x62\xfe\x0e\xc9\xdf\x67\x11\x8a\x97\xac\x45\x54\x51\xa1\xf9\x79\x89\xfc\x32\x02\x64\xc0\x94\xcb\x45\x34\x63\x2c\x09\x46\xd3\x70\xde\xaf\x30\x97\x2b\xd6\x7b\xd0\xe5\xca\x1b\x0b\x50\x2c\xe8\xd8\x4a\x3b\xb7\xdc\x53\x2b\x6f\xee\x26\x4b\x3b\x3d\x9f\xb3\x16\x84\x10\x0f\x9c\x06\x1d\x6a\xd4\x8c\x01\x4b\x93\x70\x5a\x94\x76\xfe\x78\x75\x90\x90\xda\x64\xcc\x0e\x92\x0d\xa4\x50\xf5\x0f\x77\x88\x8a\xe8\x56\xff\x88\xde\x33\x3a\x90\xc8\xd5\xdf\xc1\x6f\x6c\xf8\xe7\xf4\x38\x72\x52\xfd\x0f\xfb\x56\x3d\x8c\x9c\xf8\x63\xa7\x35\x78\x55\x4c\xe4\xc3\xcf\x97\xa5\xab\x79\x70\xba\x5a\x6d\x79\x65\xba\x36\x17\x0f\xe4\x05\x10\x6b\xe5\x8d\x95\x61\x26\x5f\x2e\x89\x21\x7e\x42\xbb\xb6\x82\x1e\xc7\x8c\x83\x6c\x7b\xd7\xb8\x4d\x22\x45\x6e\xb3\x8d\x36\xbb\x61\x12\x8c\x0c\x6a\xfe\x91\xf3\x37\xc0\xc6\x67\x03\xe6\x42\x55\xb3\x4f\x80\x13\x69\x50\x6f\xc7\x8b\xb4\x0d\x8f\xdb\x9f\x1a\x75\xe4\x85\x62\xde\xf7\x21\x05\x26\x6d\xc3\x4c\x44\x74\x85\xcf\xe1\x78\xa3\x7a\x4e\x6a\xde\x4e\x7e\xa1\xb9\x2d\x6f\xc2\xb5\x5c\x52\x60\x40\xe5\x80\xcf\xc1\xb6\xdc\xb1\xec\xca\xf1\x69\xbd\xa4\x4c\x00\xdf\xfa\x81\x4d\xfe\x7e\x9c\x50\x2e\x3f\x0e\x49\x29\x36\xfa\x08\x02\x61\x84\xab\xe3\xaf\x70\x4c\x70\x35\x08\xa1\xb6\x97\x84\x20\x34\xa4\xbf\xbc\xeb\x8d\x42\xfd\xa2\x1f\x80\xdb\xba\x48\x03\x1d\xfb\x4e\x2f\x94\x21\x1a\x81\x22\x95\x09\xb4\x26\x68\x56\x2e\x90\xc6\x20\x3a\x56\x11\xac\x97\x4f\xa0\x1c\x1c\x6e\x0f\x81\xf2\x23\xe4\x0d\x53\xcb\x1f\x49\xa4\x1f\xb2\xff\x43\x96\x7e\x4d\xd2\xbd\x79\x3a\xf2\x76\xfd\x2b\xe5\xbf\x3f\x6a\x6a\xca\x57\xaa\x5f\x14\x91\xfe\xa5\x12\x8e\xfb\x83\x7e\x0f\x72\xaf\x3f\xd0\xdd\xf7\x07\x96\x40\x09\x48\x29\xeb\x9b\x8f\x91\xa2\xde\xb7\x93\xf4\x37\x39\x55\x02\xc0\xf1\x60\x48\x9d\x1b\xa1\x20\x8a\x7c\xc8\x62\x39\x7a\x35\x9a\x13\xde\xa5\x07\xbc\xa3\xa3\xfc\x61\xac\xa7\x29\xc1\x6a\xd8\x87\x3f\x44\x14\x36\xab\xdf\x86\xbe\x78\xc2\x1c\x8f\xe5\xf7\x5d\xea\x46\xdf\x03\x8e\xa1\x9c\x04\x53\xf8\xfe\x4a\xfd\xc0\xc2\x4e\x3f\x0e\x2a\xe4\x5d\xdf\x10\xeb\x31\xba\xf3\xeb\xe3\x2a\x98\x65\xc8\xac\xa1\x81\x08\x83\xec\x18\xef\x32\xf6\xa2\x7b\xbb\xe2\x04\xe5\xc2\x8e\x73\x7a\xc6\x98\xbf\x52\xbf\x1e\x54\x54\x3b\xdf\x43\x85\x32\xc0\xcd\x85\xbb\x5f\x8f\x67\xa0\x66\xa7\x5f\x72\xbc\xa0\x5f\x8f\xfa\xdd\x63\x24\xb4\x23\xa4\x78\x52\x5f\x6f\xaa\x41\x95\x40\x5f\xfa\xc8\x08\xa1\x39\xae\x21\x26\x6d\x0c\x20\x0f\x10\x00\xb5\xe8\xf4\x2b\xc8\x3f\x2e\xf2\x1a\x8c\xc8\x33\x1e\x8f\xe7\x1b\x0e\x87\x2e\xa9\x09\xfd\x4a\x1c\x40\x0d\x30\x05\x2a\xb9\xe6\xbe\x59\xe5\x50\xe2\x28\x0f\x46\x59\x04\x33\x14\x94\xc2\x74\x42\xc8\x59\x4f\xd3\x68\x42\xe7\xd8\x8b\x3b\x4e\x32\x51\xc8\x51\x9c\x5f\xc3\x89\x2b\x17\x76\x46\x45\x94\xb7\xaa\xe8\x83\x7a\xa9\xbc\x25\xda\x45\x72\x3f\xab\x64\x98\x22\xa1\x4d\x65\x6f\xdc\x2a\xf6\xb6\x15\xb7\x7d\xf3\xf7\xc3\x21\x02\xed\x74\x68\x48\x7b\x83\xd8\x21\x02\x68\x22\x7b\xbb\x70\xb4\x88\x54\xf2\xa0\xdd\x61\xa3\x48\x36\xf4\xb7\xa4\xa0\xf5\x20\x20\x49\x33\x6e\x13\xca\x55\xc2\x34\x11\xa7\xe9\x7a\xc3\x70\xbd\x5e\xd8\x5b\x3d\x3d\x07\xa8\x71\xf8\x74\x14\x03\x84\x10\xfc\x20\xf1\x5e\x5f\xe9\xed\xa8\x2a\xbf\x5d\xfa\x23\x65\xfb\xf6\xf1\x74\xe5\x06\xd6\x4e\x08\x28\xdf\x02\x43\x72\x95\x4a\x04\xc1\x56\xf2\x8d\xc6\xf3\xbd\xb5\x7c\x9f\xf9\x01\x33\xfe\x2b\xbd\xe3\x71\xba\x20\x6a\x27\x95\xa2\xf0\xbe\xee\x93\xff\x9d\x28\x9e\xda\x64\xa0\x48\xb9\xf3\xae\xcd\x1d\x90\xbc\xf4\xc6\x39\x69\xb2\x83\xbe\x2d\x7f\x65\xf7\xfc\xca\xee\x9b\x7e\x57\xae\x95\xd4\x7e\x7d\x65\x57\xe8\x87\x4a\x90\x5d\x89\x79\x23\x13\x05\x93\xef\xec\x6a\x20\x73\xb5\x7d\x65\x87\xdf\xe6\xbe\x3d\xa9\x9e\x2c\x35\xb2\x41\x19\x13\xbf\xf2\xe3\x2b\x3f\xdc\x57\x7e\x90\xba\xb7\xaf\xfc\xf0\xee\xe4\x7f\x8a\x5d\x7e\xf8\xed\xf4\x5f\xf3\xce\xa6\xa0\x16\xa8\x43\xcd\x0f\x2f\x8d\x43\x7e\x50\x5b\xfd\x0d\xb5\x57\x52\x50\x77\xf2\xc3\xbf\xc9\xc7\xc7\xb3\xeb\x5b\x70\xf9\x11\xe8\xd7\xf0\xd7\xd9\x95\xff\xbe\xf8\xd2\xe7\xd7\xbc\xfb\x39\x90\xf6\xe7\x46\x43\x7a\xf5\xbc\xec\x3d\x28\xe3\x50\x2b\x6e\x13\x0f\x37\x46\x3f\xce\x34\x53\xf8\xfe\x1b\xe7\xab\x15\x43\x3b\x22\x05\x1f\x51\x3f\xc5\x70\x2c\x90\x0d\x05\xf3\xee\x03\xa8\x0c\x1a\x18\x7b\x51\xc5\xa8\x8e\x0b\x40\xc4\xfe\xbf\xce\xa1\xd3\x77\xdf\xc5\x83\x97\x9e\xcd\x06\x19\xba\xa3\xec\xe7\x07\xdf\x49\x70\x82\x86\xe6\xbf\x4e\xae\x5d\xbd\x4d\x07\x6c\xff\x97\x1f\x99\xb4\x72\xe4\x7f\xe4\x57\x91\x33\xbf\xf9\x31\x6e\x0a\xe4\x07\x7d\x20\x17\x38\x74\x75\xeb\x90\x75\x35\x10\x27\xf5\x20\xfa\x45\xf3\x43\x6f\xee\xe6\xc7\x7c\xf4\x82\xb0\xc8\x17\x94\xfb\xbb\x23\x7b\x99\x8d\xbc\x1d\x57\x7d\xed\x3d\x5f\xc5\xb9\xa8\x0d\x24\x2b\x03\x0c\xec\xe6\x35\xe0\xfc\xa8\xdc\xf3\xe4\x47\xcd\xd1\xd7\x4d\x40\x1b\x3e\x34\xb7\x21\x09\x6a\xf3\x4d\x94\xc2\xb2\x19\x06\x61\x73\x21\xb9\xed\xad\xc8\xd8\xe7\x9b\x99\x82\x34\x80\xad\xf8\x5b\xfb\x8e\x49\x47\xd2\xf3\x2e\x1e\x07\x7b\x3c\xf0\x61\xb0\x24\xea\xa4\xed\xeb\xf3\xf2\xf2\xe4\xc3\x8f\x2e\xe5\x78\x5e\xb2\xc8\x8f\x56\xfa\x0e\x7f\xec\x65\x8a\xfc\x68\x22\x4e\x95\xd0\xc8\x15\x40\xb8\xd0\xaf\xc7\xd0\xd5\x2d\x27\x7b\x55\x3a\x3f\xc6\x49\xad\xbc\x7d\xe5\xcd\xd1\x8f\x26\xfd\x5f\x79\xdb\x5c\xe5\x7f\xfe\xca\x80\xc7\x98\x86\x91\xdf\x83\xb1\x9b\x9b\x88\xeb\x52\x30\x4c\x85\xbb\x43\x57\xce\xd4\x08\xd2\xb8\x6c\xdb\x10\xb5\xcb\x98\xa2\x0b\x20\x5e\x02\x35\x41\xc3\xce\x8d\x15\xa9\x71\xc7\xdb\x5c\xf0\x06\x0c\xe2\x8a\xbc\xe9\x99\x37\x4f\x25\x82\xfe\x1d\x06\xd9\x80\x78\xa1\x92\x21\xef\xf3\x02\xe6\x43\x55\x99\xe3\x18\xa6\x46\x30\x16\xc8\x34\x6c\x54\x3f\x79\x04\x49\x6a\x26\x27\xd9\xde\x19\xb1\xcd\x42\x40\x5e\xf9\x51\xd8\x18\x49\x9f\x33\x31\x22\x7a\x16\xcf\xff\xf4\xe5\x1b\x2e\xe5\x16\x68\x50\x85\x1b\x63\x5f\x99\x5a\xd9\xad\x39\x9e\x52\x10\xe2\xff\x03\x21\x69\xee\xf4\x3b\xe6\xc0\x8a\x45\xfb\xf2\x9c\xb6\xcd\x25\xfe\x96\x8e\xa8\xa0\x47\x57\x24\x6d\x1b\xa7\x67\x73\x65\x43\x7c\x9b\x2b\x59\x5c\xa8\xed\x1d\x33\x9b\x69\xbe\x6f\x27\xd0\x8b\xdd\x78\x51\xe8\x50\x09\xb7\x26\xf2\xff\x06\x6a\x30\x99\x37\x9c\x0c\x42\x77\xb1\xb5\xbc\xfb\x6d\x9a\x03\xbb\xe0\x44\x7e\x66\xea\x31\xb7\x96\x0f\x32\x8c\xaa\x6c\x08\x97\x8a\x96\xef\xbc\xb3\x8a\x64\x6f\x59\x03\x99\xc7\xe3\x64\x79\x6b\x25\x07\x52\xfa\xcd\x94\x54\x0a\x20\x8e\xb4\x54\x46\xaa\x92\x33\xfb\x57\xde\xa9\xa8\xff\xeb\xfe\x2b\xef\xfb\x83\x86\x45\x79\xe7\x9a\xb6\xf3\x99\xd0\xbc\x4b\xbf\xb0\xef\x18\xb1\x67\xfe\x51\x91\x9a\x1b\xf8\x79\x47\x19\xdb\xb3\x24\x39\x00\x45\x7b\xc7\xce\x1a\x8d\x4a\x00\x03\x77\xf1\x04\xb5\x9f\x02\x3e\x7c\x7a\x2b\x8c\xb9\x56\x76\x8c\x18\x15\x42\x8b\xd5\x18\xc6\x5d\x02\x51\x36\x01\xef\x93\xc6\xe5\x79\xcf\x08\x03\xcb\x3c\xe0\x36\xed\x43\x02\x42\xde\x73\x27\x33\xef\x88\x3f\xa4\x31\xd4\xf6\x45\xdd\x8c\xdf\xc4\x55\xbf\xfb\xcb\x7d\x65\x1f\x62\xa4\xd9\x57\xf6\x49\x87\xc9\x02\xdf\x00\x97\x8f\x5f\xd9\x97\xda\xfc\xfe\x95\x7d\xcd\xf7\xe9\x0e\x4a\x5f\x9c\xcd\xda\x43\x8e\x0c\x43\x12\x55\x35\x28\xe2\x82\xa8\x88\xe2\xb9\x24\xb2\xd6\x5f\x14\x8d\xa7\x7b\x7f\xe5\xe7\x93\x06\x3c\xcf\xe7\x83\x46\xa4\x10\xcd\x40\xd5\x9b\xc5\x35\x48\xce\xa8\xec\x06\x16\xdc\x20\x5f\x67\x83\x83\x47\x83\xf8\x2b\xae\x28\x02\x64\xd1\xe0\x5e\x09\x02\x1e\xbe\x16\x39\x0f\x4c\x44\x0d\x2e\xee\xf9\x1a\xd8\x57\x3f\xb0\xce\x7c\x27\x9f\xe6\x74\xd9\x4e\x78\x6a\x8a\xd4\xcf\xb0\x7c\x6f\x59\xbd\x1b\xd9\xf4\x7c\x4a\x88\x55\x14\x75\x7e\x3e\xa3\xbb\x49\xb9\x4b\x60\x07\xeb\x96\xbb\x46\xac\x7a\xd6\x3a\x73\x66\x10\x24\x2e\xf5\x56\x23\x0d\x83\xca\x67\xf3\xbc\x06\x45\xad\xdf\xe1\xae\xaf\x7c\xec\x99\x9a\x15\x8c\x7d\x8e\x13\x3a\x81\xaa\xfa\x41\x59\x71\x5e\xf4\x73\x07\xa0\x14\xf2\xc0\x85\x3e\x7c\x7f\xa1\xfe\x86\xf8\x08\xd4\x3a\x85\xb8\x51\x0d\x0e\x71\x8b\x99\xda\x81\x10\xb7\x7e\x93\x02\x3b\xf1\x19\x7c\xdc\x19\x54\x7c\x95\x21\x58\x88\x73\x88\x17\xe2\xc5\x4e\x54\xef\x61\xb6\x7e\x07\xe6\x0d\xe5\x24\xa4\xbc\x9d\x19\x80\xf7\xb8\x72\x68\x61\x0b\xd4\xad\x7d\xe3\x77\x87\xaf\x4c\xb1\xfc\xce\xfd\x22\xa5\x90\x6e\xe3\x3f\x6d\xd3\xe2\x1e\x3c\xfd\x63\xa9\x2d\xc7\xfd\x27\x3c\x89\x7b\x77\xcc\x25\x68\xa2\x5c\xb4\x00\xf2\xf5\xde\x28\x20\x51\x56\xfc\x08\x34\x58\xda\x8a\x4b\x19\x5f\x9e\x41\x15\x7c\x60\xa6\xf5\x38\x8e\x35\x35\x82\x97\x2b\x07\xb6\xa8\xc1\x8a\xaf\x6c\xb8\x04\x7d\x4e\xd2\x10\x54\xb9\xe8\xdb\x59\x7c\x6f\x61\x27\x4c\x89\x1f\xf5\x28\x2d\xa3\xcc\x37\xbd\xa8\x1c\xc5\xf0\x70\x09\x46\xc2\x41\x2d\xfb\x00\x6f\xa0\xbc\x9d\xce\x23\xec\x84\x23\x4d\x11\x19\xbe\xdb\xe9\x2f\x6a\xaf\x88\xdd\x67\xf1\x69\x90\x1c\xc5\xee\x5d\x73\x12\xa8\x47\xa8\x77\xb1\x4f\x33\x2c\xf1\xa2\x17\xb6\x99\xe9\xef\xe5\xf9\x1f\x9b\x5e\x40\x4d\x00\xc7\x3f\x92\x51\x0a\x2d\x9a\x94\x98\x4b\xae\x64\xef\x7d\xdd\x81\x4a\xe5\xe5\xf6\xd3\xf5\x44\x00\x8d\x23\xd6\x18\xf2\xf5\xa0\x44\xa2\xff\x18\x43\xca\x04\xfb\xce\x73\xa9\xcb\x1f\x8e\xfe\xd1\xfe\x5f\xb2\x54\x95\x2f\x8f\x4f\xa9\xc1\x0d\x38\x11\x36\x74\x97\x66\x5f\x65\x88\x77\xc9\x78\xd3\x98\x4b\x39\x41\x6d\x5e\xaf\x14\xf0\xf7\xf0\x8e\x2b\x15\x61\x6a\xb7\xae\x14\x76\xbd\x78\x41\xe4\x29\x97\x05\x08\x4b\x09\xb8\x52\xb8\x73\x1b\xba\xe3\x5a\x3b\x91\xe2\xd2\xc1\x48\xcf\x38\x13\x7e\xa9\x9f\xaf\xb9\x57\x96\x2f\x34\xb1\x94\xbe\x82\xa8\x78\x5c\x08\x20\x87\x9c\x66\xa8\x34\x38\xf1\x8a\xeb\x00\xdf\xfe\x46\x2f\x94\xb0\xef\x92\x93\x74\xb1\x89\x85\x0b\x67\x3c\x33\x9a\x93\xf6\x00\x69\xcb\x6c\x7a\xcb\xf8\xba\x23\xbf\x58\x78\x7d\x4e\x3b\x95\xe7\x4b\x01\x45\x30\x8d\x4e\x30\xed\xb9\x6e\xf9\x26\xd3\xfe\xff\xd8\xba\xb6\xf5\xe6\x59\x5e\x79\xde\xbb\x24\x36\xb1\xf9\x8a\xc1\x2f\xe0\xb6\xee\xd5\xaf\x47\x33\x12\xe0\xfe\xeb\x20\x61\x84\xd9\x6f\x85\x00\x11\x4a\xe6\x0b\xac\x0f\x82\xf1\x0a\x7d\x90\xbb\xd3\xa3\xe7\xb8\x2a\x09\xcd\x3a\x9c\xbc\x26\x1d\x3b\x39\x05\x15\x23\x77\xb4\x00\x26\xfe\x73\xa4\xc0\x99\x8a\x9c\x30\x52\xa6\x28\xd3\x48\x8a\xd8\x8b\xf8\xc8\x49\x9a\x50\xb0\xcc\x09\x01\x89\x10\x60\x97\x01\x0d\xea\x36\x7c\x66\x8f\x48\xcb\x25\xc3\x56\xc2\x40\x9b\x6a\x74\x10\xcc\xea\x1c\x4e\xaf\x36\x9d\x27\x0d\xee\x18\xb0\x7d\x8c\x09\x3b\x49\x8b\x49\xf7\xb2\x23\xd8\x7b\xd9\x7b\x95\x2a\x91\x8b\x34\xe4\x74\xff\xe0\x4f\xea\x80\x7b\x12\x39\xbf\x3f\x32\x1f\xcd\xcb\xd0\x25\x8d\xfa\xc9\x5b\x4e\x68\xa9\x39\xba\x65\x17\x9f\xca\x23\x88\xb1\x8b\x81\x58\x71\x23\xfe\x23\xe7\x23\xb8\x4f\x31\x4e\xb7\xc3\x90\x7f\x6d\xde\x34\x97\x96\x11\x01\x9a\x54\x43\x0c\xe7\xce\xe8\x05\x57\x80\xd3\x97\x03\xe6\xee\x0b\x2d\x18\x42\xdb\xbd\x0c\xc6\x19\x23\xd5\xf9\x91\x4f\xf7\x91\x1f\x0a\x82\x94\x92\x0a\x11\xa4\x2d\x46\x95\x27\x65\x24\xea\x74\xea\x30\xca\x9f\x6d\xcc\xe7\x73\x01\x07\x76\xfa\xe4\x82\x72\xb0\xa7\x47\x7b\x39\x3d\x74\x89\x1b\x57\x70\x7a\x6c\x33\x89\xf9\x9d\xcb\xe7\x07\x1e\x75\xe6\xbf\x2d\x5f\x05\xa7\xf5\x63\xbc\x07\xdd\x91\xce\xe3\x0f\xdd\xcc\x46\x75\xaf\x18\x67\x4f\x5f\xb0\x20\x15\xf3\x8a\x17\x3d\xf9\xd6\x9c\x01\xd4\xba\xac\x26\x19\x7c\xae\x16\xda\x1e\x96\xe8\x31\x70\x9e\x3b\x76\x2b\x91\x09\x42\x61\x10\x00\xb5\xd5\x28\xa6\x6d\x83\x97\xb6\x3b\x19\x30\x15\x48\xbb\xe9\x70\x19\x18\x35\xa7\x44\x5e\xef\xe4\x0e\xeb\x9e\x66\x39\xa2\xe8\xf4\x3d\xa8\x3f\x8e\x95\xad\x35\x52\xfb\xf7\x4c\x3e\xc2\x12\x0b\x71\x0e\x51\x3f\x14\x60\x2d\xd2\xea\xa9\x09\xeb\xa3\x6b\xc4\xea\x55\xf6\x47\x43\x16\x42\xdb\x65\x1d\xa0\x30\xab\xd0\x5b\xa9\x35\x1f\xd9\x5c\xe5\x2d\xb9\x46\xf1\xd7\x89\x7e\x20\xff\x24\xf3\xea\xe3\x2a\xeb\xde\x53\x59\xeb\x53\x9a\xe4\x69\x7b\xf4\xf9\x3c\x33\x15\xdf\x28\xaa\x06\x1a\x40\x69\x17\x47\xc8\x8e\x27\xfb\x46\x5f\x75\xb4\xa9\x13\xdb\x97\xaa\xd9\xcb\xf2\xd1\x8f\xf1\x4c\x3a\xbe\xfe\x28\xf8\x52\x12\x6d\xea\xa9\xe7\xcb\x68\x26\xfd\xda\xd8\xda\x6b\x38\x20\x13\x3c\xc1\x36\xc8\x94\x0c\x53\x15\x55\x12\x20\xa5\x1c\xdf\x4e\x6c\xb1\xc2\x08\xb5\x83\xc3\x40\x53\x60\x1c\xab\x10\x17\xbf\x2a\xd9\xc5\x00\xc0\x1e\x41\xf4\xe6\x01\x54\x34\x98\xde\x4a\x5a\x6e\x37\xda\x87\xea\x32\xc8\xe7\x25\x6b\xa0\x0f\xae\xe1\xce\xab\x2e\x97\x74\x9d\x7f\x97\xab\xd5\x7d\x48\xce\xa5\x87\x16\x27\x35\x2c\xff\x1e\x46\xa4\x61\xd7\x12\x0c\xb3\x68\xb8\xc8\x96\x99\x93\xff\x5e\x0d\xac\x56\x80\x8a\x7e\xf7\x10\x21\x03\x5e\x4d\x4a\xa8\x38\xce\x95\x45\x25\x04\x36\x06\x68\xc7\x86\x21\xcc\x0b\x00\xe5\x54\x45\xa5\x58\xc5\xb5\x12\x7e\x3e\x72\x79\xc9\x4f\x75\x40\xd5\x09\x23\x9d\x24\x34\x50\x48\x4f\xe5\x5f\xc6\x33\x9a\x92\xc2\x45\x7e\x92\xe9\x05\xac\x22\x18\xb5\x22\x1c\xd5\x6a\x26\x0a\x95\x10\x9c\x4d\x59\x76\x1b\x9c\x05\xca\x0a\x6b\x20\xd4\x46\x27\x18\xb3\x51\x79\x7c\xb2\x0f\x61\x55\x63\x0a\x31\xac\x7d\x48\xe8\x54\xff\x32\x5c\xcd\x3e\x22\x8d\x4a\xa3\x29\xe8\x8e\x43\x92\xf5\x1e\x72\xb4\xf2\x24\x3f\x01\x59\xf7\xb2\x42\xa4\x5d\x56\xda\xeb\xb3\x93\x8a\x56\x05\x85\x23\x08\x4f\x8d\x77\xc0\x6c\xac\xfc\x33\x6f\x19\x7f\xa9\xd3\x60\xa4\xf9\x13\x4e\xb2\xf8\xcd\x09\xab\x58\xbc\x2e\x92\x8a\xc7\xdc\x5a\x84\xfb\x2f\xef\x22\xcc\x42\xd9\x50\xd0\x9b\x4b\x8e\x06\x96\x0a\x00\xfa\xd5\xc7\xa8\x36\x7d\x23\x4a\x29\xf4\x29\x83\xad\xc3\xa6\x1e\xc3\x18\x29\x48\x9a\xeb\xee\xf6\xf7\xe9\xc0\x3a\x24\x09\x94\x91\x64\xa0\xcf\xfb\xa4\xf0\x80\x88\x05\xd1\xd7\x18\x20\x7a\x65\x6e\x5d\x8e\x05\xa8\x61\x62\x1b\xda\x9d\xb2\xaa\x58\xea\xc3\x4a\x1d\x5e\x9a\xc2\x5f\x2d\x8b\x5f\x30\x80\x65\xc3\x7a\xbc\x84\x57\x90\x7f\x59\xff\x73\x57\x68\xd6\x39\x48\xac\x9a\x81\xb2\x5e\xa6\x14\x33\xba\xe3\x00\x82\xf5\xe6\x8e\x40\x13\x5e\xb6\x60\x86\x0e\x38\xc4\x16\x22\x30\xda\x72\xd8\x69\x03\x99\x78\xc1\x69\xbd\x5c\x80\x63\xc6\x9f\xf4\x58\x70\xf9\xe5\xc8\xf1\xfa\x30\xfd\x87\x1f\x4f\x45\x88\x9d\xd2\x18\x86\xb4\xb8\x24\x6f\x3b\x04\xd8\xb5\x97\x7f\x19\x72\x61\xb0\x18\x04\xa1\x75\x13\x58\x59\x1b\x75\x1b\x56\x06\x97\x04\x44\x59\x0a\xd9\x63\x81\xcb\x7e\xa7\x65\xbf\x2c\x1e\x9b\x3d\x95\x40\xfc\xca\x5a\x16\xad\xf1\xa5\x43\x58\x82\x99\x28\x23\x15\x36\x3c\x17\x1b\x91\x4b\xee\x82\xe4\x72\x82\x49\x84\x81\x75\x3d\xd0\xce\x31\xf2\xdc\x6d\x6c\x94\x15\x20\x5c\x07\x2d\xb9\x93\xf9\x2e\x1c\x57\x39\xea\x95\x50\x0b\xfb\x52\xf5\x81\x3d\xa3\x39\x1c\xa6\xfc\xc0\xf9\x8a\x05\x41\xb5\x9d\x02\xc1\x32\x70\xf1\x86\x65\x69\x72\x2b\xc1\xd5\x68\xc1\x04\x9f\xb4\x59\x1a\x81\x7c\x81\xf8\xd1\x8a\x21\xa1\x7e\xfd\xa9\x60\xf4\x0f\x21\xfa\xdc\x35\xa8\xde\xaf\xc4\xc6\x04\xbf\x9d\x50\xa7\xfb\xbd\xaa\x8c\x4a\xa8\xd3\xf9\xb5\xa7\xe6\xfc\x83\x2d\x61\xe7\x2e\xec\x30\x07\x29\x21\x93\x77\x8a\x8a\xfb\x09\x13\xd6\x28\xce\x8a\x25\x00\xab\x67\x34\x08\x45\x2e\x0d\x9c\x3b\xee\x11\x2b\xff\x05\xd8\x6f\x8d\x92\x6c\xae\x0d\xe4\xcd\x7d\x0b\x8b\xe5\xcd\xf6\x42\x85\x28\x19\x0e\x72\x44\x7c\xb2\xe2\xa8\x1f\xb9\x2e\xc2\x77\xd5\x71\x66\xd4\x70\x36\x6b\x5d\xfc\x75\x2c\xab\x08\x12\xda\xde\x48\x68\x2a\x71\x43\x1f\x83\xb2\x22\x38\xe8\xd3\x65\x1d\x93\x65\x55\x4e\xba\x62\x81\x50\x0f\x99\xd6\x30\x45\x57\x34\x68\x85\x28\x85\x7a\x84\xb5\xb0\x73\xd4\x23\x14\x5d\xad\xd7\x43\x0d\xeb\x01\xb5\xb3\xae\xf5\x30\xd7\x97\xcc\x2e\x30\xdc\x47\xae\xc9\xbd\xae\xb2\x7d\x40\x91\x21\x84\x4c\xf5\x44\xcb\x07\x67\x52\x2b\x66\xe7\x5a\x29\x4f\xa8\x35\x80\x2b\xa9\xd3\x2b\xcc\x24\x10\x57\x0d\xbc\x6e\x23\xdc\x26\x44\x7d\xb5\xd9\x6c\x59\x9b\x9f\x20\xa7\xca\xda\x7c\xaa\x59\x73\x45\xcc\xcf\x7d\x48\xea\xd8\x18\xc2\xda\x7c\x76\x52\x6f\x3d\x04\x13\x27\x0b\x94\x0e\x64\xd6\xcb\xb0\xee\x5d\x42\x88\x98\xb1\xf8\x57\x18\xcc\x0d\x87\x2c\x41\x87\x33\x33\xba\x25\x18\x71\xfb\x38\xa2\x3c\xc1\x7f\x1a\x52\x7f\xba\x48\x04\x8c\xd8\x79\x27\xce\x56\x4b\xcd\x0b\x63\xe0\x3b\xea\x71\x5b\xb1\x04\x2d\x33\x8c\xf3\x00\x18\xe0\x6b\xd3\x12\x8a\x4c\xf8\xe1\x64\x51\x57\x9b\x05\x5b\x1c\x1e\x02\x35\x74\x18\xfa\xed\x85\x08\x8a\x9e\x8b\x5b\x64\xa0\x53\x80\x55\x2c\x31\x1d\x86\x65\xa7\x09\x55\x0b\x32\xb2\x99\x14\x1f\x87\xf7\x50\x07\x8d\x05\xd1\xf2\x72\x4b\x0e\x5a\xde\xfd\x11\x92\xbf\x8a\xc3\x9a\x05\x8e\x73\x74\xe5\x4e\x5b\x2f\xe2\xd9\xe2\x06\x89\xf9\xa4\xcd\x0e\xf4\xcb\xdf\x90\xac\x30\x5b\x2e\xbb\x30\x54\xcf\x70\xea\x12\xbd\x16\x70\xb3\xfe\xd6\x6c\x02\x69\x4d\x3a\x72\x6b\xee\x4b\x42\x42\x7f\x68\x52\xb2\x0d\x27\xf2\xc4\x2c\x7c\xfa\x39\x5f\xee\xe5\xa4\xa1\x5f\x2e\x09\xd7\x22\x0c\xf8\xf5\x8a\x81\xc2\xb3\x6b\xfd\xc8\x17\xc5\x0e\x17\xba\xf1\x75\xc2\x81\xf0\xcf\x1f\xf9\xaa\xc2\x03\xf0\x01\x83\x7c\x35\xb4\xff\xab\xbd\xdc\xf2\x09\x33\xac\x2b\x3f\xbc\x8a\x77\xb4\xba\x42\xa4\x14\x49\x70\x91\xdc\xe3\xac\x4a\x37\x11\x00\x39\xa7\xab\x49\xfe\xe0\x6d\x41\xdb\xb9\xda\x52\x64\x7a\x87\x59\xab\x06\xb3\x14\xba\xbd\xca\x17\xdc\xf0\xa1\xf5\x05\x21\xae\xdf\xbc\x2e\x61\x50\xbd\x58\x6d\x0a\xfa\xf6\x0e\xdf\xdf\xd8\x06\xba\x9a\x8a\xaa\x15\xd0\x2f\x9e\x77\x54\xbf\xef\xd0\xd4\xd0\x4c\xbf\xa3\xa3\xe4\x49\x60\xfe\xa6\x79\xfd\x88\xb9\x95\x7c\x9d\x0a\xbe\xa5\xce\xaf\xb6\x5d\xe0\xf2\xaf\xb6\xbb\x0b\xf1\xf1\x10\x4e\xbe\x2c\xfc\xcf\xd0\x96\x5d\x26\x9f\xab\x45\x15\x43\x13\xf5\xcd\x00\x28\x6c\xfe\xe8\x7a\x9b\x01\x68\x78\x24\x2d\x06\xf5\x84\x49\x5b\xcc\x2f\xb5\xc8\x19\xa5\x79\xf0\x29\x1a\x38\xb6\x20\x6d\x37\xe4\x6a\xd4\x78\x4c\xd4\xcc\x24\x97\x77\x35\x68\x81\x53\x93\x81\x9e\xb9\xaa\xcd\x55\xcc\xd4\xac\x9c\xd7\x19\x22\x01\x9c\xfc\xbb\x70\x7b\x17\xf1\x15\x6d\x2b\x62\xf6\x11\xee\x52\x45\x4a\x02\x82\x66\xbd\x84\x6d\xeb\x68\xef\xe9\x2d\x38\x48\x45\xc4\xd4\x56\x3e\x7b\x0d\xc4\x44\x56\x96\x47\xdd\x33\x4d\x0b\xb2\x7e\x06\x75\x80\x31\xe6\x6a\xf5\x74\x89\x66\xfe\xb4\x1d\x92\xab\xf5\xfd\x79\x81\xc5\x37\x6e\xf7\x5e\xad\x7e\x6b\xfe\x00\x68\xd7\xae\x02\x87\xdf\xae\xac\xe6\xff\xdb\x31\x61\x14\x44\xd1\x84\xeb\x5f\x74\x9a\xdf\xfc\x91\xa5\x6f\x7e\x29\x97\xf2\x65\x4b\x0a\x5c\x6c\xd0\xf9\x02\x37\x1b\x6c\xbc\x34\x42\xed\x31\x12\x7d\xe9\x3a\xf6\x0b\xe3\xa7\x1d\xbe\xf8\xf2\xfc\xe3\xe6\xcc\x97\x4f\xdf\x4e\xb8\x2e\x01\xe0\xf5\xbe\x7c\x71\xaf\x9a\xcb\x69\xce\x85\x6c\xfe\x18\x93\x0d\xac\x64\x96\x44\x7d\x90\x1a\x52\x0b\xdc\x66\x58\x7c\xbf\x9d\x66\x16\xc9\xb4\x29\xaa\xc5\xd5\xaf\x5a\xd3\x82\xa7\xeb\x89\x27\xeb\xab\x4d\xe1\xae\x6b\x98\xbe\xbd\xdf\x38\x6d\x44\x18\xec\x0e\xd8\x83\x9e\x13\xf5\x7e\xc7\xd9\xf7\xb6\x15\xf7\xe5\x1e\xf4\x2c\x7c\x81\x95\xe9\x17\x00\x15\xa3\xdf\xc2\xc8\xf3\xf1\x9a\x0e\xb0\xc1\x26\xa9\xf2\x70\x12\x61\x4e\x4f\xfa\xc1\x7d\x14\xc3\x0f\x6f\xe7\x59\x1c\x14\x55\x19\xe5\xfb\x36\xe0\xc3\x62\x4e\xd9\x69\xba\xb4\x66\x57\xfb\xbc\xc9\x09\xcb\x36\x70\xd9\xae\xe3\x71\x61\x91\xb6\x38\xc7\x1c\xac\x99\xf9\xe2\xaa\xbd\x96\x35\x51\xb3\x8f\xda\xf5\x2e\x19\x69\x1a\x72\x40\xb7\x66\x6f\xd9\x29\xa9\xca\x93\x26\x6a\x0a\xed\xe5\xea\x6e\xef\x66\x82\xf6\x0e\x3b\xb3\x0a\xfb\x29\x2b\xd0\x0c\xf2\x85\x79\x89\xa0\x0f\xd6\x42\x46\x0e\x96\xb8\x40\x83\x49\xc3\xd0\x23\x82\x9c\x3f\xfb\x60\x49\xda\x5c\x5e\xa9\xf9\xb9\x5e\x5e\xd2\x3c\xd6\xdc\xb1\x7f\x7c\xc1\x6a\x07\x18\xb3\x17\xd0\x18\x83\x48\xc6\x38\x9a\x4b\x27\xcd\xdb\xd5\x46\xa1\x2b\xf5\x3b\x6a\xfd\x75\x45\x7d\xaf\x97\x14\x8a\x7c\x4a\xdc\x82\x19\x09\xa0\xeb\xbc\x37\x72\x99\x08\xdc\x3e\xa9\x23\x5c\xb3\xfa\x7d\x58\xfd\x0d\x9b\xe3\x01\xc0\x5c\x78\x42\x8f\x3d\x59\x58\x54\x4e\x4d\xc4\x97\x9b\xdd\x5e\xa6\xf5\x5b\xc9\x29\xc2\xeb\x4f\x84\x64\x77\xff\x58\x41\x85\xc5\x9c\xce\xdd\x95\x4d\x1b\x07\x76\x18\xc7\xcd\x80\x61\xa5\xb1\xed\xde\x9d\xd3\x17\xbf\x7c\x2a\x12\x0e\x63\xaa\xfe\x25\x94\xe5\x3a\xa8\x15\xdd\xa2\x09\x5f\x53\x71\x82\x98\x13\x11\xbd\x4b\xc3\x3b\x94\xc1\x68\x95\x2e\xd1\x7f\x4d\xed\x71\x89\x61\x12\x05\xc1\xa2\x4b\xfa\x49\xb5\xdd\x2b\xc6\xe9\x4e\x05\xbd\x3c\xb1\x87\x0e\x10\xf3\x34\x94\x2e\xdc\xa6\x24\x92\xd9\x3a\xfc\x29\xa6\x7c\x1c\x79\x4a\x62\x3e\xce\xae\x31\xa8\x5b\xb4\xf0\xe8\x86\x62\x17\x9d\x6e\x4d\x3e\xe8\x7b\xd0\xfe\xa7\x97\x4a\x4e\xac\x9f\x29\xd0\xb4\xf8\xd2\xf1\xfa\x27\x46\xbc\x87\x3d\x02\x37\x35\x4d\x8f\x0a\x7f\x68\xb0\x30\x1b\x1e\x19\x14\xd6\xfd\x61\xf1\x48\x7a\xc2\xdc\xed\xda\xff\x67\x37\x25\x01\x0a\x1e\x1e\x4e\xe6\x71\x6c\xe1\x75\xee\x69\x24\x53\x9b\xbf\x49\x12\xbb\x3e\xbc\x2d\xd3\xfd\xe8\x4e\x87\xd7\xf5\xc7\xe2\x99\xb4\x56\xb2\x55\x6c\x9e\x5a\x47\x3e\xff\x44\x85\x77\xf4\x46\x40\xb5\xc5\x30\x7d\xbd\xca\x73\xb4\xa2\x4d\xb5\x0a\xfa\xf2\xed\xf9\xf5\x1e\xb8\xf8\xf5\x1a\x2d\x1c\xd4\xc3\x2d\x76\x62\xe7\x86\x3b\xb6\x66\x41\xe5\xef\x75\x2e\xa7\x2b\xf6\x67\x92\x48\x43\x77\xcc\xf4\xbd\xe8\x53\xc8\x42\xad\x2e\xa4\x36\xf2\xb1\x7a\x57\x26\x62\x71\xa3\x99\xac\x7e\x99\x9b\xbd\x91\x53\xd5\xaf\xbe\x5f\x05\x24\xf9\xfe\x33\xff\xad\xfe\x1d\xe6\x4a\x5f\xbd\x3e\x79\xe7\xff\xd7\x6a\x84\x12\xa9\x58\x7c\x10\x7f\x9c\x3f\x5b\xe9\xea\x0f\x87\x2d\xf0\x4e\x4f\xca\x3b\x69\xd1\x9f\x6c\x54\xf2\x2f\x9b\xb1\xfa\x12\xfe\x58\xe8\x35\xf8\xa7\x5d\x28\x7e\xc0\x67\x1a\xfe\x9c\x2c\x85\xdd\x97\x8f\xf9\xec\x4d\x75\xf5\x5f\x79\x6e\xde\x6b\x78\xbf\xaf\x69\x3c\x22\xdd\x13\x1d\x26\xd6\x6c\x0d\xf6\x68\xd2\x44\x4d\xa5\x1a\xe2\x35\xb9\xc5\xe1\x23\x7b\xfe\xcd\xac\x8a\xf7\xb3\x87\x3a\x73\x05\x2b\x5e\x4d\x9e\xc8\xf1\xce\xc4\xa0\x27\xb1\xca\xb0\xb3\x36\x95\xb7\xf9\x09\xe3\xc9\x4a\x9b\xec\x9a\x95\x31\x58\x8b\x7b\x37\x43\x81\x52\x4e\x12\xdc\xb4\x27\xfe\xd6\xf1\x75\x2d\x38\xa4\x22\xe8\x56\x2b\xef\xb6\x69\x88\x67\xe3\x6d\x13\x5d\xc3\x44\x34\xf3\xb4\x5e\x53\xda\xfd\xfb\x8d\x75\x12\xe1\x93\x6f\xf6\xd1\x6f\x9d\x63\x20\x31\x85\x7e\x40\x21\x74\x1d\xdc\x95\x3f\xf4\xa6\xd9\xe4\xe6\xdc\x9d\xb1\xa0\x20\x9e\xe5\xe2\x8f\x33\xe6\x7b\x0a\x60\x66\xc1\x7d\x6a\xfb\x55\x83\xd3\x52\xf3\xe9\xeb\xd1\xd2\x7d\x6d\x33\x4b\xeb\x7f\x96\xf1\x0c\x40\xb7\x18\xd5\xee\x7f\x26\x3e\xd2\xff\x9c\x6e\x30\xab\x4a\xcd\x19\xff\x81\xfa\xd0\x39\xb7\x3f\x78\x4c\x85\xa7\x9e\x48\x47\x97\xe6\xe8\xcf\x5c\xa7\x8f\x7f\x3b\x95\xff\xe9\x9a\xe6\x67\x72\x44\xf0\x76\xcb\x48\x3b\x0f\x4d\x4d\x99\x7d\xcb\x38\x35\x53\xed\xc1\xa7\xbe\x8d\xfd\x7a\xbb\x23\xc4\x30\x38\x8f\xb7\x4b\x4b\x78\xba\xac\x6d\x7a\x7a\x94\x56\x5f\xb9\x3c\x78\x97\xb7\x77\xe5\xe1\xc9\x7b\x35\x8f\x90\xa8\x22\x92\x64\x69\x53\x9a\xf9\x62\xea\xf0\x14\xc0\x36\x75\x12\x67\x5d\x08\x26\x47\x32\x8d\x6b\x11\xbe\x63\xb0\x56\xff\x8e\xb9\x84\x75\x72\x75\xf5\xb9\x1f\x78\x0a\x20\xc7\x55\x41\x9a\x3c\xe4\x1c\x67\xbe\x0a\x0a\xa1\x0d\x8d\x75\x2f\xe8\x39\x9f\xc5\x85\x3f\x94\x65\xae\xb8\xf4\x39\x7d\xf1\x1e\xc7\x2d\x89\xff\x4d\xa9\x2b\xd7\x36\xf8\xe8\x77\xb9\xc2\x83\xdd\x7f\x97\xf1\x82\xb8\xd0\x9b\x2b\xbd\x81\x52\x3f\xf6\x83\x77\x82\xd5\x98\xac\x36\x9f\xa6\x95\x11\xa9\x1e\x34\xb4\x23\x2d\x73\xff\x99\x6c\xa6\x86\xb8\x45\xf7\xeb\xd7\x0e\x8d\xbd\xdb\x62\xc6\xdb\x13\xe6\x6a\x56\x09\xa0\x16\xed\xc1\x7c\x6f\x0f\x05\xf9\xdd\x06\x0a\xfe\x48\x3d\x86\x1f\x21\xdb\x4c\xf9\x75\xfe\x38\xbd\xb7\x48\x8b\x5c\x1f\x14\x24\x52\x5f\xbe\xec\xee\x3c\x87\xbf\xdd\xc9\x82\xaf\x97\xe0\xee\xca\x54\xe7\x3b\x16\x03\x9d\x82\xfa\xfc\x89\xb2\x75\x9d\xc0\xa7\xbb\xaf\x99\x8a\xe7\x9c\xe9\x3d\x1f\x7e\x62\x7b\xf6\xfc\x18\x6f\x49\xde\x8a\xeb\xd4\x37\xf6\x6b\x1b\x35\xc0\x67\xf2\xfb\x97\x63\xee\x79\x61\x55\xdd\xfe\x24\x26\xfb\xc7\x23\xf8\xb0\x9a\x9f\xa3\x87\x05\xdf\xa3\x7f\xd4\xf6\x78\x0a\x77\xa2\x1e\xdf\x87\x46\x17\xa5\xa9\xc5\x7a\xa4\xfd\x7f\x1f\x65\xff\x6b\x3b\xa7\x7f\x7a\x08\x9d\x74\x7f\xc0\xdc\x32\x35\x6c\x7e\x1f\xee\xec\x21\x73\x23\xf5\x25\xf3\xe1\xed\xcf\xdb\xe6\xb4\x7d\xc7\x99\xea\xba\xd7\x1e\xe4\x6d\xa4\x2a\x59\x50\x6a\xdc\x93\x99\xe9\xb9\x70\xa6\x27\xb4\x47\x3a\x26\xbb\x47\x4a\xfe\x3c\xb7\x6d\x96\xa9\xfa\x3f\xf4\xb3\xd7\xa8\x9d\x15\x6b\x6a\x98\xd9\x1e\xc4\xc4\x26\x3d\xde\xd3\xa6\xc5\x97\xaf\x63\x05\x30\x3d\xe7\x2c\xe4\x7f\x93\xf6\x03\xd0\x79\x6c\x67\x81\xbc\xe7\xd6\xfd\x5f\xbe\x1f\x8e\xaf\xf5\x0f\x73\xf9\xe9\xfd\x58\xc9\x7d\x06\x9d\x73\xa2\x5b\xa6\x16\x14\x5d\x77\x11\x5d\x5d\xc2\x73\xd2\x8e\xee\x5a\x67\xb7\x5f\xf3\x28\x1d\xdd\xcf\xc0\x60\x66\x46\xc6\x29\x20\x06\x98\x1e\x66\xa6\xc5\xd7\xdc\x27\x63\x7e\xb7\x99\xea\x6f\x2e\x4f\xe4\xf4\x99\x67\x2e\x09\xa7\x9a\x8a\x99\xc2\xc8\x12\xf3\x35\x25\x42\x2f\x80\x13\x53\x01\x34\x30\xdf\x67\x1e\xf9\xba\xfe\xac\x1d\xe3\x35\x67\xf3\x9a\x07\xa6\x78\xfd\x5c\x65\xc8\x65\x3a\xc9\x90\x0f\x37\xab\x5a\xed\x36\x7d\x94\x3d\x9c\xb4\x3b\x85\xda\x6c\xf8\x36\xf0\x5c\xb1\xfa\x22\xb0\xc2\x7e\x97\xee\x0b\x2f\xcc\xa5\x99\xe8\x2c\xcc\xe1\xfd\xe7\xf4\x21\xce\x59\x7f\x3e\xed\x4b\x9b\xf2\x64\x33\x0e\x5f\xf4\xc2\x6d\xa7\xc6\xb7\x90\x66\x21\x2a\xdf\xc8\x9d\xfb\x92\xd8\xd8\x38\x7a\xe4\xf5\x4f\xfe\xf3\x55\xd2\x23\xaa\xe7\xeb\xb6\xb0\xba\xeb\x9f\xb9\x29\xb9\x52\xa6\x1c\xfc\x7d\x58\x16\x76\xf3\x04\x95\xfc\x26\x9d\x79\x8e\x67\x7a\xac\x75\x26\x67\x3f\xe5\x31\x89\x4d\xe0\xfa\x2b\x3c\xea\x56\x5a\x2d\x29\x2c\x26\x8f\x4d\x79\x1e\x50\x87\x32\x90\x89\x9a\x03\x9a\xb4\x25\x80\x9e\xef\x95\x8b\xc5\x74\xc9\x96\xd4\xd4\xca\xfb\x85\x5a\xe0\xa7\x56\x4e\xda\x55\xff\xef\x7a\xd4\xf4\x9f\xab\x2b\xb4\xf9\x33\x4c\x8c\xa3\x7b\x83\x60\xea\x9e\x27\x86\x86\x85\x26\xee\x79\xea\x45\x6c\xa6\x27\x3c\x85\x3e\x5d\x78\xd4\xfd\xf4\xb0\xe5\x44\x3e\x3f\x4f\x67\xf1\x60\x35\x81\xe9\xa9\x2b\x5a\xb5\x12\x72\x5f\xa6\xd9\x1b\x96\xc0\xfe\x4f\x6b\x39\xff\x94\xc2\x89\xc5\xcc\xb8\xb0\x4b\x2b\x3c\x68\xd8\x7d\xd4\x3a\x8a\xe5\x0c\x4f\x79\xc9\x19\x5d\x48\x33\x35\xbd\x42\x48\x1b\x3f\x75\x7b\xa1\xda\xa3\xc3\xc1\x46\x4b\x01\x37\xc7\x04\xf0\x49\xc1\xb9\x40\x1e\x2f\x07\xd2\xe6\x9c\x67\x04\x92\x23\x97\xf3\x53\x82\xb4\xa8\x4f\x51\x1d\xef\x0a\xdc\x03\x4b\x05\x4c\xd4\xe4\xf0\xfb\x39\x28\xc1\x62\x96\xcc\x60\x5f\x61\x6a\x9d\x67\x7f\xc4\x47\xa9\xf9\x4a\x25\x6d\x1e\x32\xb3\x4e\x7f\x3d\xc2\x80\xdd\xf5\xc8\x44\xc9\x4b\x71\xdc\xbf\x1f\x9e\xc7\xab\x72\x4a\xeb\xab\x6d\x83\x9a\x03\xb0\x77\xda\x66\xb2\x3d\x1c\x9c\x0f\xf2\x81\x9f\x12\x99\x3f\x0f\x9e\xa9\x55\x9b\x64\xc0\xf3\xbb\x66\x4a\x7f\xe1\x46\xeb\xec\xe1\x6b\x2e\xab\xf1\x58\x19\xe8\xfe\xe4\x18\xa9\x34\x8f\x18\xcf\xf7\xb9\x68\x13\x26\xf1\x48\x71\x13\x9c\xa6\xb1\xbf\x6f\x5c\xc1\xce\x4f\xa9\x2c\x0f\x96\xbb\x4c\x8c\xed\x78\xa9\x88\x54\x7f\x9d\x48\xc9\xe8\x1f\x5f\xe7\xf7\x89\x68\xb5\x85\xe9\x3c\x1c\x6d\xe6\x66\xdb\xdf\xd6\x31\x62\x9b\x44\x7e\xcf\x07\x76\x68\x73\x84\x3a\x93\x8f\x37\x60\xfe\x5a\x3d\x12\x82\x3b\xe2\xeb\x6c\x91\xe3\x3c\xb9\xcd\xaf\x84\x90\x9e\x45\x4d\x25\x2c\x53\x79\x72\xcb\x17\x68\xdb\x9f\xa3\x43\x09\xdb\xd8\x8e\x04\x31\x7f\xca\x8f\xb6\x53\xf2\xb5\x4d\xa1\x9a\x46\x16\x12\x51\xa3\xb0\xa7\x23\xe6\xd1\xb2\xba\x75\xc2\xd3\x43\x0b\x59\xb5\xb8\xd9\x0c\x35\x3d\x89\x00\x12\xba\x69\xe7\x61\x46\x6d\xac\xba\xeb\x52\xae\x3f\xe3\xc8\x78\xa7\x40\xa9\xab\x0f\x41\xd5\x4f\x1c\x62\xf5\x96\xe0\xf9\x05\x01\xb5\x68\x41\x67\x0b\x8b\x67\xb2\xea\x81\x15\x9f\x26\x22\x3c\x13\x31\xb4\xe9\x0f\x7a\xb8\xee\x4c\xd3\xa4\x67\x9f\x24\xc4\x51\xc3\x9b\xaa\xda\xcf\x54\x17\xa0\xd2\xb4\x8a\x0b\x80\x10\x0c\x9a\x58\xa3\x86\xb1\x00\x01\x1e\xbd\x0c\x2a\xf0\xfd\x93\x1c\x5d\xf6\x8f\x82\x7c\x58\x7d\xfe\x4f\xa9\x8b\xcd\x5c\xec\x9f\x3d\x29\xb8\x05\x64\xf0\xc1\x73\xd7\xe8\xbd\x4a\x15\xeb\xcc\xe3\xd5\x23\xe7\x36\x39\x1b\x28\xbf\xa7\x54\xcb\x0c\x33\xca\x17\xd4\xfc\x31\xfc\x61\xde\x86\x46\xfa\xc9\x4a\x38\xb3\x79\x62\xa8\xf9\x8a\x06\xc6\xc4\xfd\x50\x56\xaf\x16\x8f\xe9\xc3\x94\xd4\x4f\xc3\xd1\xac\x6a\xfe\x41\x4f\x7d\xb8\x9e\x0f\x51\x44\x3d\x6d\x59\x53\xcf\xa0\xbe\xfe\x5d\xde\x1d\x8f\x42\x6b\x6e\xae\xab\x86\x63\xe0\x40\xde\xad\x6f\x37\x89\x04\x60\x33\x85\xde\xc2\xfb\x3d\x53\x0f\x81\x67\xa7\xe7\xe4\xb5\xd0\x16\xad\xba\x96\x97\x4f\x93\xd7\xd4\xd6\x0f\xc4\x80\x2a\xee\xb1\xdb\x5b\x71\x28\xa5\xb7\x35\xa5\xee\x99\x7a\x38\xce\x73\x41\xce\x9a\xdf\x61\x31\xb4\x9f\x4f\xe4\x98\x78\xbb\x86\x71\x12\xef\xc7\x44\x0a\x9d\xdc\xb5\xfd\x39\x9b\x00\xd5\xdc\xe6\x60\xee\x4b\x57\x19\x01\x3d\x34\x65\x3f\xac\xe6\xd2\xbf\xea\xf9\x87\xff\xac\xdf\xb3\x78\xbf\xde\xb5\xf9\xbf\x02\xf9\xa7\x36\x69\xb3\xd1\x0c\x36\xe1\x42\x87\x7d\x69\x13\xf1\x33\xaa\xab\x6b\x80\xb6\xe4\x35\xff\x2c\xb7\xe6\xd3\x9f\x36\x4b\x9b\xee\x5c\x98\xb1\xf9\xdb\xc4\xfc\xb4\xe9\x30\x45\xdb\xbd\x70\xa6\x8f\xf4\xef\x3e\x97\xb9\xa9\xb7\x3d\x2c\x9f\xd3\xe7\x89\x99\x6c\x3b\x94\xb3\xcd\x5d\xac\xed\x25\xcc\xcb\xe4\xb6\x97\x6c\xdb\x0c\x6d\x87\xd2\x5c\xc0\x47\x9b\xe2\xfd\x1c\x82\x31\x1b\x81\x98\xdd\x3c\x67\xa3\x16\x74\xd0\x1c\xca\xa2\x49\xe9\x72\xbe\xf1\xd2\x83\xa2\x21\xc8\x90\xfc\x7e\x2a\xba\x9e\x67\x26\xa0\xcb\xf7\x61\x61\x8b\x56\x2a\xad\x9d\x4a\xe5\xcb\xc5\xc7\x8e\x1b\x9e\xb0\x9a\x5b\xcf\x78\xd3\x8a\x54\x09\x4f\xca\x1a\xe3\x97\xdf\xb1\xb5\xee\x67\x6a\x0a\x77\xd2\xa8\x6a\xf4\xf5\x28\x87\xaf\xe0\xbf\x15\xfc\x99\xaf\xa9\xfb\x73\x0a\x2b\xc7\x66\x3b\x41\xdf\xb3\xa0\xa3\x6b\xba\x54\x22\xaa\x4c\xf4\xdb\xf3\x7a\xa1\xc2\x79\x4c\xfc\xde\x7d\x3c\x1e\x16\x61\x62\x07\xbe\x43\x5c\x67\x22\x3e\x5c\x9a\x04\xe4\xf7\x21\x43\x0a\xc2\xb9\x89\x79\xda\xa2\x61\x56\x0d\x2a\x54\xbf\x48\xa6\x38\x4b\xd2\x42\x75\xcb\x47\xfe\xca\x31\xcb\x7f\xf3\x95\x07\xc2\xf2\x57\x68\x38\xea\x48\xcc\x50\x31\x7d\xe5\x49\x05\xe9\xa0\x46\x3c\xb8\x97\xf5\x75\x1d\x1f\xf9\x1b\xea\xfb\xf2\x77\x94\x9f\x6f\xf2\xdf\xc7\xea\x6f\x14\x8c\xfc\xf3\x7a\xd4\xcf\x47\xfe\x71\xd0\xf4\x26\xa6\x24\xe1\xc7\xf1\xba\xc8\xcf\x2b\x7f\x7f\xe4\x9f\xc5\xc9\x94\xf9\xe3\x93\xfc\xdd\x62\xff\x46\x39\xfc\x6c\xb8\xc0\xf5\x03\x69\xb1\x98\xb8\xc9\xf0\x13\x56\x1c\x4d\xfc\xa1\x7a\x3c\x98\xcc\xfb\x8f\x7d\x0f\x7a\xaa\x9b\x0b\x59\x1b\xcb\xe6\x65\x2d\xb0\x24\xf3\x27\xac\x99\x9c\xb1\x06\x76\xe8\x7f\xe3\x57\x0b\x29\x22\x27\xa7\xa7\x22\x96\x9f\xe6\x42\x14\x83\x44\x4e\xdb\x25\xde\x6e\xb7\xf8\x76\x4b\x4b\x27\x11\x56\x98\x71\xf5\xfb\x8d\xa4\xdd\x2f\x9f\x7e\xf5\x73\xbf\xdd\xf0\x73\x2f\x3b\xb6\x5e\x60\xad\x99\xba\x7b\xa6\x6e\xdc\x34\x80\xc1\x32\x24\x1a\x1f\x79\xf4\x1e\x50\x99\x17\x62\xe6\xef\xde\x9d\x3f\xf2\x16\xf3\x2b\xc0\xc3\xb8\xbc\xf0\x73\xcb\xb0\x01\x90\xfc\x45\x8d\x03\x3f\x77\x75\xb1\xc1\xbc\xe2\xa9\x05\x7e\x37\xbc\x5a\x77\x2f\x51\xdd\xb4\x8c\xb3\xdf\x04\xe9\x23\xdf\x1f\xf9\xe6\x19\x78\xec\x91\xde\x3c\xee\x0b\x63\x71\x7a\x2c\x12\x14\x26\x52\x20\x1c\x31\x06\xfa\xe6\x71\xe3\xdf\x8f\xfc\x9b\x17\x4f\x8d\x35\xbf\x18\xa9\x7e\x73\x42\x02\xc4\x44\x66\x7e\x73\xca\x7a\xba\x4e\xa0\x5e\x30\x3e\x3f\x4e\xf7\x71\x3a\x17\x3f\x4e\xf7\xc2\x15\x81\xd3\x2d\x62\xb3\x2c\x3b\x0c\x8f\xbf\x03\x0f\xeb\x08\xe2\xbf\xb2\x9a\x02\xbf\xdd\x2d\x26\x5d\xef\x6e\xcd\x07\x41\x0c\x0b\x40\x48\x9f\x99\xa0\x06\x98\xf9\x8a\x04\x37\x4e\x89\x03\x45\x1c\xb4\x06\xac\x2e\xad\x85\x81\xdd\xb2\x2e\xf9\x78\xdc\x72\x56\x42\xba\x5c\x87\xcd\x60\xfe\xe8\x77\xa0\x09\xba\x2b\xba\xf9\xc4\x9f\x0c\x55\x34\xa5\x44\x4f\x6a\xf0\x83\x41\x47\x7b\x2e\x95\x2e\xec\xbb\x94\xb1\x98\x67\x74\x4c\xcf\x67\xb5\xc0\xaa\x5b\xd7\x48\xbb\xb6\x63\x66\x00\x2c\x2e\xc0\x0b\x42\xd4\x84\xcb\xa7\xd5\x21\xc8\xd5\x5d\xe2\x7d\x5d\x19\x83\x06\x21\xc6\x2b\xbb\xb2\x2a\x86\x3a\x0f\xc2\x02\x33\x2f\xf4\x75\xf3\xff\xf0\x91\x01\xaf\xf7\xf7\xce\x04\xad\xbe\x5b\xca\x60\x70\xba\x35\xaa\xa7\xe4\x10\x53\x66\xc4\x05\xdf\xa0\x22\xe6\x74\x6b\x75\xdf\x62\x5c\xae\x66\x09\xda\x23\xbb\x9e\x57\xe9\x4e\xe7\x57\xb7\xe5\x0d\x1f\x56\x5f\x1c\x8a\x52\x11\x2d\x83\x33\x7d\x61\x83\xaa\xc0\xf9\xe5\xce\x66\xa1\x28\x41\xef\xfd\xea\x04\x88\x68\xe1\xe7\x23\x97\x73\xcf\xfd\xc3\xb9\x87\x18\xa4\x31\x40\xf3\xe9\xe9\x7c\xba\x68\x22\x8f\x3e\x27\xf1\xb6\x21\xe6\x0d\xda\x44\x08\xec\xc0\x9e\x12\x28\xbe\xcd\xf2\x33\x09\xf4\x4e\xb6\x85\xcd\xcb\xa0\xa8\x66\x41\x90\xfe\x85\xa2\xd8\x50\x40\x5b\x5e\x1d\x0d\xe9\x60\xa7\x83\x1e\x8e\xa4\x40\x6a\x6b\xcf\xf8\xf3\xb2\x80\x3a\xdd\x8e\xcb\xb0\xa7\x0b\x3d\x63\x61\x43\x05\x87\x4f\xfc\x21\x39\x21\xe2\xef\x7d\xd1\x8c\xae\xa2\xd1\x85\x48\xbd\x1a\x27\x1b\xd0\x10\x1e\x0a\xfe\x0c\x91\x4d\x01\xef\x03\x7f\xda\xe4\x77\xe2\x85\x4f\xfc\xbf\xf2\x8f\x02\x1c\xdc\x06\x54\x1f\x8d\x6d\x2d\x24\xd4\x5a\x80\x65\x61\xb2\x20\x80\x47\x38\xd5\xf1\x3f\x65\x98\xd1\x8b\xdb\xff\xdc\x21\xd6\x9f\x1e\x7d\x5c\xd2\x1b\xdd\x0b\x5d\x34\x72\x7c\x88\xb2\x62\x80\xe9\x7d\xdb\x93\xe5\x3a\x3a\x9f\x5d\x12\x4e\xed\x9c\xad\x5e\xfd\x0e\xfe\x4c\xf7\xaf\xb9\xb9\x64\xc4\x82\x47\x92\x9e\xce\x87\x9d\xb9\xa2\x6a\xa5\xe1\xc2\x54\x2d\x29\x95\x38\x59\xe4\xd4\x2d\x5a\x3e\xfe\xf8\x30\xab\xee\x49\xb2\xf1\x48\xca\x68\xaf\xa0\x78\xa3\x8d\x04\x6e\x9c\x28\x9c\x43\x9d\xc2\x3b\xa4\x25\x69\x4f\x10\x7a\xe8\x9e\xea\x74\x9c\xe0\x1c\x4a\x7a\xe4\xf5\x37\x3f\xbf\xfe\xe6\xe9\x2b\x2e\x2e\x0b\xd2\x74\xa6\x4f\x32\x5a\xc0\xff\x2e\xad\x23\x20\xb5\xed\xe7\x4f\x94\x50\x46\x93\x54\x1c\xdd\x04\x1c\x08\x0c\x93\xbf\x90\x48\xc3\xfe\x62\xde\xbe\x34\xe4\x2f\x68\x88\x52\x64\xe9\xc5\xce\x4a\x22\xfe\xfd\x95\x36\x16\x3d\x52\xec\x9f\xb5\xd4\x9b\x91\x7a\x7c\x36\x2b\xff\xd6\x66\xf7\xa7\x2d\x3d\x9a\xd2\xdc\x92\xfe\x9f\x86\xf4\x3f\xed\xe8\x4f\x33\x7a\xb4\xa2\xbf\x8d\xe8\x7f\xdb\x90\xcf\x9b\x1a\xa3\x99\xf8\x49\xdf\x37\x49\xbd\x13\x39\x08\xfd\x60\x0d\xc8\x3f\x42\x7c\xb4\x19\x6f\x31\x3f\x5a\xce\x68\x38\x8f\x76\xc2\xdb\x63\x8f\xc0\xce\x31\xca\x0a\x55\xef\x65\x9f\xe8\x47\xab\x7a\x34\x2a\x21\xae\xe9\x9b\x35\x31\x4f\xb2\x65\x35\xd9\x0c\xde\x05\x03\x46\x0c\x9f\x0e\xd9\x0c\xc7\x59\x3d\x7d\x86\xb4\x96\x7c\xf8\x01\x83\xd9\x6f\x6a\x8c\x92\xeb\x84\xba\xc8\xab\x37\x60\x76\xd5\xa9\x5d\x75\x2b\xda\xd1\xa7\xf0\x14\x11\x65\x21\xc3\x11\x5b\x63\xd4\xe3\xf0\x02\x99\xe2\xe8\xdb\xd4\xaa\x7b\xc2\x63\xd0\xf1\x37\xda\xab\xc6\x0a\x33\x3d\xeb\x82\x11\x50\x83\xe6\x17\xe0\xa3\x7b\x39\x18\xd9\x81\xd5\x08\xbf\x59\x14\x02\x90\x52\xcb\xb9\x98\xde\x00\x66\x9d\x88\xd3\x0e\x6a\xd7\xd8\x5d\x8f\x9b\x05\x2e\x0b\x11\x31\x0e\xdf\x48\x1f\x21\xd1\x26\x7f\xd2\x02\x67\x14\x05\x9d\xf8\x9b\x7a\xf6\x39\x77\xec\xb3\x27\xf6\x0c\xfc\x6f\xdd\xa6\x6e\xc5\x7d\xf9\x8e\x42\x22\x6e\x66\x89\xd0\x9a\xf5\xec\xa6\x4b\xbd\xd3\xc5\x6b\x75\xaa\x03\x0a\x84\x36\xda\xbb\xf7\x59\x21\x0f\x87\x81\x47\xd0\xe9\x2a\x0c\x6f\x37\x1f\x94\x28\x0a\x32\xcc\x9d\x75\x46\xe0\xf5\xe3\xce\x26\x76\x9c\xb8\x4b\x02\x04\x66\x26\xb9\x05\x43\x49\x82\x92\x0b\x31\x57\x92\x4d\x59\x87\xe4\x54\x91\xd6\xe9\x12\xb4\x00\xc3\x2c\x2b\x6e\xfa\x08\xde\xdd\x0f\xcd\x92\xf5\xe8\xa3\x50\xb9\x1e\x06\x8b\x8d\x72\x69\x29\xde\x55\x03\xbc\x89\x1a\x7e\x7d\xb7\x40\xcd\x29\xb4\xd0\x85\xe0\xf5\xa2\xd3\x25\x26\x6d\x75\xe9\xc2\xc7\xd5\x83\x51\x4c\x2b\xd4\x84\x29\x58\x58\x79\x82\xa9\x86\x48\xf0\x38\x2f\x05\x8a\xbe\x72\x71\x6a\x7a\x9a\x57\xa1\xf9\xbd\x32\x04\xfd\x7f\x39\xb8\x87\x23\xbf\xdd\x05\x0c\x7a\xf2\x91\xff\xc6\x79\x26\xaf\x7d\x32\x51\xed\x3c\xc0\xb0\xea\x76\xad\x91\x7b\x4c\xca\xa6\xd2\xc1\x86\xa4\x8c\xbe\x9c\xb6\x1c\x59\x1c\xdb\x15\xb0\xd2\x3b\x1d\x74\x0a\x45\x22\x72\xcc\x89\x49\xc1\x15\x60\x98\x47\xc6\xdd\x2f\xc1\x34\xfe\x93\x55\x01\x0b\x21\xfa\xeb\x13\xaa\x88\x10\x95\xea\x83\x3a\x5d\x3a\xc2\x0f\xad\x12\xb9\xba\xc4\xe4\x59\x08\x29\x7c\x32\x21\x5a\xe8\x99\x4b\x96\x94\xcf\x88\xf2\xc9\x85\x6c\x4e\x3a\xc3\x09\x8f\xbd\x85\x25\x5e\x28\x67\xbe\x29\x10\x3e\x06\xec\xb6\x08\x05\xfa\x9b\xe8\xab\x39\xde\xdf\x06\x8c\x99\x75\xa6\x22\x38\x23\xa2\x1f\x6e\x8c\xb8\x49\x21\xd1\x6d\xf7\x1a\x59\xdb\xbd\x7a\xda\xf5\x53\xf0\x34\xf6\x5c\x15\x45\x35\xab\x6a\x4a\x15\x22\xaa\xeb\xcc\xff\xb7\xba\xc9\x23\xde\x69\x5e\x9a\x27\x97\x99\x0f\x19\x73\x8b\xcc\x7b\xe1\xf0\x1d\x85\xa5\x0c\xeb\xee\x58\x75\x03\x00\x37\xae\x33\x05\xb2\xfe\x9a\xfa\xa0\xd2\x75\x41\x78\x18\x51\xc0\xfd\xed\x34\x0c\xd6\xd1\x2f\x52\x25\xe3\x19\x56\xa9\x18\xc7\x60\x22\x73\xca\x23\x63\x16\xf0\x0a\xfa\xd8\x7e\x82\xef\x48\xb4\xff\xc6\xff\x8d\x30\x70\xaf\xee\x83\xef\x55\xe0\xff\xc5\xa5\x13\x50\x31\xa4\x9d\xe1\xe4\xbd\xa6\x0e\x6f\x82\x25\x86\x93\xc8\x02\xd9\x42\x89\x44\xbb\xd3\xa6\xab\x98\x3d\xe7\xf4\x7d\xb0\x3c\x7d\xf9\x4c\xe1\xed\x09\xbf\x3d\x36\x5b\x88\xb3\xc6\x2f\xab\x7d\x7c\x0f\x1c\xbb\x4e\x28\x00\x98\x50\xd3\x25\x12\xc8\x64\xa0\xb2\xd0\x81\x1b\xfd\xa3\xf1\x9c\x2c\xd4\xd3\xe6\x99\x33\xb3\xc9\x9c\xa7\x4f\xbb\x0f\x9c\xb4\xce\x13\x65\x7e\x96\x80\xf9\xe4\xbc\x58\xd4\x77\x19\xcd\x40\x89\x9b\x10\xce\xc5\x27\x8a\xb3\xb8\x97\x63\x9a\x8a\x7b\x85\xdc\x61\xe4\x82\xb1\x68\xd5\x15\xf7\xca\xd1\x19\xe8\x36\x10\x4a\x23\xad\x24\xcd\x4f\x9e\x6a\x54\x49\x5f\x0c\x67\xac\xbd\x0c\x62\x61\x52\x64\x61\xf2\xc9\x60\x17\x07\x15\x03\x80\x3e\x35\x6f\x49\x5a\x7c\xeb\x52\x25\xa3\x8f\x4c\xdf\xcb\x9e\x8b\x82\x92\x93\xa5\x68\xd9\xaf\xe6\x07\x2a\x1d\xce\x0e\x2c\xcd\x8b\x4c\x56\x44\xf7\x88\xf3\xae\x36\x15\x14\xa7\xf1\xae\x1a\xd0\x1a\x74\xfd\x2f\x70\x3b\x14\x54\xb5\xc9\xea\x07\x0b\x3b\x98\x26\xc0\x9f\x48\x6d\x59\xa0\xad\x86\x8a\xac\xef\x4f\x00\x5f\xf1\x58\x25\x8b\xfd\xfd\xd6\x42\x79\xbf\xd9\x3d\x8a\xc3\xf3\x7f\x73\x91\x8c\xf1\x5b\xf0\x65\x5e\xb7\x18\x2c\xd1\xd0\xa9\xab\xb6\x79\x53\x5f\x5a\x4d\x5b\x4e\x41\x8b\xc0\x46\x19\x45\xe6\x19\x9a\x56\xdc\x84\xb5\x1c\xbb\x7c\x4d\x08\x68\x9f\x11\xf0\xe9\x3d\x8b\x36\xca\x2c\xe2\x34\xb6\x39\xbd\xd1\x87\xd3\xd2\x1b\x27\x18\xdd\x8f\x02\x1f\xbd\x8c\xeb\x6b\x27\x87\x88\xc0\xe8\x63\xe0\xdf\xe7\x37\x2a\xe5\x00\x65\xb3\x4d\x71\xf1\x9e\x43\xb8\xab\xe6\x8d\x22\x36\xa2\x39\x98\xdb\x1a\x2e\xd9\xfa\x09\x5a\x80\x87\x6b\x8d\x65\x72\xf8\x85\x13\xbe\xc0\x15\x73\x63\x71\xba\x70\x2a\xaa\x83\x1a\x28\x98\x87\xd4\xab\xf7\xc8\x6a\x14\x2d\x78\x20\xab\x69\x12\x16\x61\xbe\x52\x5b\x6e\xc3\x0c\x13\x4f\x41\x69\xa3\xc3\xc8\x55\x5c\xca\x1a\x36\x5f\x6f\x10\x74\xba\xd2\x1b\xc8\xa9\xb9\xb1\x4f\x7b\x71\xda\x78\x09\xcb\xc0\xe6\x63\x2f\x36\x2a\x9c\xfb\x6d\x2c\x35\x88\xee\xc4\x26\xdf\xe2\xce\xbc\x76\x07\xc5\xfd\x98\x83\x92\xdf\x7a\x9c\x97\x5d\xf7\xb1\xa6\x29\xae\x5a\xea\xa1\xb8\x5f\xfd\x57\x1f\xbd\x96\x44\xb5\x26\x5a\xa7\xcb\x5a\x9d\x0e\xeb\xf8\xa8\xa5\x55\xc3\x34\x21\x76\xf2\xee\x84\xa5\xbc\xea\x50\x52\x9b\x53\x0b\x6a\x88\x01\xbc\x93\xeb\xad\x13\x44\x1f\x36\xc6\x8b\xb2\x83\x6a\xda\x78\x9a\xfb\xd1\x46\xd0\x7a\xfe\xdb\x6e\x4d\xab\xed\x37\xf4\x14\x2d\xca\x5d\x16\x61\x74\xf3\xa9\xe5\xde\xae\x17\xae\x98\x69\xa7\x37\xb2\x27\xf7\xcb\x69\x81\x7c\x59\xfb\xfa\xcd\x98\x96\xcb\xeb\x5a\x3e\x39\x2e\x2d\xe0\x11\xc5\xe0\x64\x56\x16\xaa\x20\x27\x62\x44\xcb\xde\x59\x79\xc1\x1e\xc2\xde\xa2\x37\x99\x05\x45\xce\x39\x98\x56\xcb\xea\x76\x1a\x3a\x51\x95\x55\x83\x59\xa7\xe3\xd9\x24\x69\x3f\x3d\xd0\x4e\x8a\xb5\xe2\xd9\x7c\xfd\xc6\x07\x9a\x00\x33\x19\xdb\xe2\x03\x27\x26\x9f\x96\xfd\x3e\x14\xd2\x3b\x93\xe4\x53\xd3\xc1\xc4\x4f\x65\x0f\xdc\xa6\x41\x76\x58\xf4\xe8\x53\x83\x56\x27\xc2\xde\x5a\x7c\xd1\x11\xb0\x07\x35\x8d\xbb\x12\x02\x4d\xf6\x59\x7f\xc9\xff\xdb\x81\xf3\x29\xef\xe8\xb9\x6c\x29\x5b\x6f\x99\x1b\xfb\xd5\xe6\x55\x72\x57\x94\x95\x28\xbb\x8f\x5a\xf7\x81\xc5\x18\xdc\x4e\xd1\xa7\x20\x2d\x99\xe0\x91\x04\xf5\x42\x16\x5d\x8c\x60\x25\x6a\x18\xfb\x4c\xa0\x35\x4c\xe6\xfa\x13\x7f\x48\x2a\xf9\xe6\xa2\xe2\xf0\xf2\x89\xf7\xe0\x04\x50\xf4\x5f\xf8\x12\xa1\x00\xfd\xbf\xd5\x60\x44\x31\xf4\xb1\x4b\xa1\x53\xf1\xe9\x83\xd6\x74\x73\x5d\x2d\x06\x5e\xeb\x01\xbc\xd4\x6a\x34\x80\xbc\xec\xa1\x73\x0c\x24\xfa\x27\x95\x11\x14\x6a\xb7\x62\xcf\xcf\x3a\x8f\x66\xac\x85\x0a\xbb\xa8\xf2\x1f\x39\x7a\x9a\xd4\x63\xeb\x88\xa9\x45\x96\x90\x41\xfc\xbb\x58\x21\xb9\xcf\xe4\xb9\x29\x0b\x92\x6d\x8a\xcc\x3f\x37\xd3\x74\x72\x12\x3b\x3d\x8b\xca\xfc\x8a\xc9\x8e\x83\x2c\x8d\xb9\x6d\x1a\xfe\x0b\x7b\x5b\xe9\xed\xaa\xe4\x4f\x75\x94\xcd\xd0\x35\x57\x41\x32\xaa\x5f\x68\x20\xcc\x1a\x8e\xe9\x71\x6b\xb3\x40\x9c\x2a\xcf\x2d\x35\xb1\xca\xb5\xc6\x6b\xd6\x15\x53\x41\xf0\x4d\xf7\x7a\x0a\xa5\xd8\xa5\xf9\x52\xf8\x75\xf7\x29\x2f\xae\x9c\x77\xa7\x26\x46\x81\x34\xd7\x84\x24\xa8\xba\x16\x47\x5a\x3f\xa6\x73\xaf\x3c\xe3\x1a\x4e\x6b\x35\x4a\xb4\x81\x6d\xd6\x04\xf5\xc7\x57\x98\x99\x7c\x5a\x45\x0b\xa6\x03\x2a\x8f\x9c\x5d\xd1\x46\xf3\x65\xe4\x31\x53\x3d\x0e\x50\xbf\xff\xe3\xf9\xd7\x3c\xb3\x17\xb4\x50\xb5\x78\x04\x94\xbb\x43\xeb\x4f\x4d\x27\xe7\x16\x46\x48\xad\xf7\xbe\xd6\x1f\x72\xea\x84\x75\x92\x16\x7e\x2d\xe4\xdf\x29\x38\x0a\x43\x4a\xb3\x00\xa6\xae\xab\xf3\x44\x2b\x61\xd5\x7a\x04\x7a\xf9\xa2\xe9\xba\x0a\x8f\xb7\x28\xee\x09\xa2\xcd\xad\x25\x71\x45\xd6\xe4\xc5\x5a\xfb\xf2\xe9\x32\x53\x87\x17\x81\xea\xf8\x8b\x6e\xbf\xf0\xea\x03\xe5\x39\x75\xc1\x54\x8c\x61\xbe\x7a\xe1\x43\xd0\x48\x2b\xd6\xd9\xd5\xb6\x06\xeb\xee\x22\x36\x42\xea\xfe\xc9\x0f\xb0\xfd\x77\xf9\x77\xc4\x91\x0e\x10\xd8\x1e\x11\x33\x91\x5d\xae\x75\x9a\x16\x6a\x75\x8b\x30\xa3\x8e\xd8\x1c\x40\x10\x58\x2b\xdb\x32\x4c\x0e\x50\xb5\xda\x00\x54\xab\x2b\x9e\x5f\xf1\xc2\xe1\xa9\x52\xbf\x5a\xd1\xe7\x6a\xc5\x21\x09\x5d\x7c\xd5\xea\x75\x25\x57\xf1\xf2\xe3\x4a\x44\x8b\xd0\xa5\x6b\x50\x95\xd4\x13\xc6\x92\x25\x5f\x52\xee\x8f\x3f\x67\xb6\x95\x1c\x19\x05\x55\xb8\xfc\x05\xd1\xb5\x43\x80\xfe\x62\x61\x13\xd1\xcd\xa7\x67\xa8\xd0\x15\x24\x80\xc5\x5f\x71\xfa\xe1\x14\xae\x03\xff\x9e\xff\xb6\x8e\xad\x8d\x19\x6c\x26\xd3\xa9\xe4\x21\xf1\x10\x26\xcd\xab\xa8\xa0\xcc\xb0\xb2\x08\x20\x47\x67\x52\xf2\xe8\xf0\xf7\xf9\xe5\x57\xc3\x0d\xcb\x12\xb2\xa2\xdd\x77\x70\x95\x01\xab\x5a\xc7\xa8\xe0\x50\xd3\x0a\xa0\x69\x02\x72\x51\xc3\xa9\x4b\x41\x73\x92\x48\x1f\x13\x6e\x03\xff\x3e\xdc\x35\x0b\x41\x3b\x0f\xb4\x9d\xb1\x22\x9b\x70\xd4\x04\xa4\x2f\x5b\xb5\x02\x6e\x86\xba\x29\xc9\x6a\xdc\x2e\x6f\x6e\xe3\x54\xd3\x96\x9d\xff\xfc\xda\xb7\xbb\xdb\xb2\xf3\xd8\x1d\xa0\xae\xf4\x91\x18\x13\x50\x36\x4c\x19\x4d\x3b\x6a\x63\x8b\x85\x9a\xba\xde\xd6\xa0\x61\xc1\x2b\x40\xa9\xb0\x1a\x5b\xbf\x47\x5b\x49\x25\x2b\x0f\xc1\xe6\xb7\xa4\xac\xd5\x8e\xed\x86\x3f\x5c\x4d\xdb\xdf\x21\xad\xfa\x59\x20\x07\xba\xb6\x83\x6f\x69\xfb\x63\xaf\xa5\xed\x79\x61\x41\x50\x31\x64\x07\x3a\x1b\x40\x79\x34\xd9\xd1\xa1\xff\x91\x9b\x12\x1f\xb6\x37\xa1\x16\xc9\x5f\x25\x77\x5f\x66\x28\xcd\x0e\xdc\x78\x1d\x44\x35\x65\x59\x7a\xc1\x95\xb4\x90\x9c\x1a\x0d\x3d\xb4\xa1\xd5\xb5\x20\x3d\x15\xdd\xb8\xbb\xcf\x0c\xb3\xf8\x3a\x97\x15\x5e\x6c\xa7\x59\x58\x75\x44\x5a\x37\x24\x38\x72\x29\xa1\x0d\x47\xa9\x9b\x50\xb7\xbf\x15\x29\x77\xa8\x94\xd6\x04\x89\xe1\x7b\x09\x3d\x0e\x9d\xe9\xf1\xf8\x5f\xd2\x10\x63\xee\x2c\x68\x2b\x36\x85\xe3\xba\xc7\xc7\x74\xed\x43\x20\xcb\xb4\x64\xdd\x1c\x16\x74\x68\x6a\x7a\x39\x97\xac\x16\x3a\xd5\x0b\xb2\x5c\x65\xdb\x22\x07\xfc\xed\xb0\x27\x35\x9b\xe7\x61\x87\xad\x80\xa6\x4d\xd6\x76\x04\x04\x68\xfb\xd0\x71\xa5\xe9\x43\xbb\x8a\x0e\xa7\x4c\x64\x6b\xe8\x57\x8d\xd9\xbb\x26\xd6\xee\x92\xea\xbc\x38\x93\x5c\x2a\x03\xbf\xb6\x9d\x66\x5c\x99\x8f\x2b\xe6\x6f\xca\x7f\xaf\x84\x4a\x13\xc3\x86\x8d\x8b\x4b\x1f\x31\x98\x57\x41\xcc\xab\xa0\x31\x6e\x90\xea\x8e\x59\x9c\x40\xbf\x0f\x27\x2c\x91\xab\xb8\x7f\x10\x5f\x5f\xf4\xf2\x25\x3f\x87\x3f\xc4\xa2\x0b\xa9\x2f\xaf\x73\x0d\x37\x42\xbf\x82\xf2\xea\x5f\x26\xa9\xfb\x0a\xfa\xbf\xc1\xc8\x74\x45\x1e\x97\x93\xea\x97\x26\xea\x5b\x7e\x44\x52\x1a\xdf\x5a\x75\xdf\xe9\x55\x32\x59\xb4\xef\xa4\x46\xdd\x21\xea\xf9\xa6\xa7\x1f\xf9\x7d\xc3\xb8\x79\x22\xe0\xa6\x0a\x9f\xd3\xdd\x2b\x7a\xd4\x8d\x51\x84\x0c\xfa\x1d\x33\x84\xf0\xf7\x61\xb3\x82\x22\xad\xeb\x5b\x33\x74\xa7\x70\xa8\xa1\xed\xfb\xce\xef\x37\x0c\x8c\x5f\xb7\xb4\x40\x31\xc5\xf1\x2f\x27\xda\xe5\xe3\x5c\xde\x1f\xe7\x12\x3e\xce\xa5\x7d\x9c\xeb\xc7\xe9\x3f\x4e\xef\xe4\xb7\x78\xfe\x8f\x79\x5d\xa8\x95\xc6\x98\x06\xfd\x38\x7d\xa4\x10\x25\x27\x98\x13\x86\x77\xd2\x02\xe4\xff\x15\xf3\x37\x91\xba\xb6\x26\xe1\xdd\x62\x9e\xb2\x6b\x34\xa5\x34\x68\x7a\x19\xed\x09\xed\x18\x5e\x27\x0f\x81\xef\x2c\xe5\xef\x1d\x42\xd8\xa5\xc9\x7b\x07\xdf\x9f\x3d\xfc\xd9\x27\xdc\x1e\xf9\x6a\x48\x16\x5c\xa7\xab\xa9\x01\x17\x67\x46\x36\x91\xc8\x12\xf9\xef\x95\xc2\xb1\x1d\x01\x64\xf1\x05\xf5\x58\x70\x95\x94\x40\xcf\x89\x01\x7f\x83\x15\xf0\x4e\x56\x4c\x88\x4e\xcf\xff\x9e\xde\x55\xf0\xd5\x34\x99\xcd\xea\xf9\xbf\x30\x0d\xd0\xd8\xcd\x80\x6a\x66\xcf\xf1\x2c\xa2\x2f\x0f\xf7\x5f\xf2\xff\x92\x1a\xc3\xd3\xbf\x30\x58\x98\x2f\x8a\xd7\xfd\x82\x3c\x2e\x8b\x5b\xf1\xbe\x1a\x20\xe6\x30\x00\x4b\xca\xb2\x80\x1f\x12\xb3\xbf\x13\x0a\xea\x2b\x88\x29\x59\x45\x95\xf0\x2c\x21\xcc\x46\x13\x05\xbe\x60\xb8\x87\x61\x13\xa6\x12\xe8\x5e\xc0\x59\x3d\xf6\xee\xeb\x17\x7d\xd5\x0b\x08\x7c\x01\x21\x1d\x5e\xa6\x77\x82\x58\xa6\x6f\xb4\x3f\x9c\x77\x62\xab\x00\xc4\x69\x26\x85\x68\x11\x80\x32\x16\x18\x1a\x6e\x09\x22\xff\xdf\x28\xce\xd5\xa1\x54\x56\x56\x85\x18\xec\x3e\x80\x63\x02\x56\xd2\x62\xd0\xfa\xd2\xc3\x5f\x34\x61\xa1\x47\xb0\xc6\x09\x2c\xbf\x72\xd2\x15\xb3\x31\x6a\xdc\xe1\x41\xb5\x18\xd4\x60\xa7\xa3\x5a\xd0\xfd\xf3\xa2\xe9\xa3\x99\xb6\xbb\x28\x14\xaa\x1b\x5b\x8e\x59\x23\x08\x9c\xf4\x09\x02\x93\x11\x36\xf4\x74\xbf\xf2\xf6\xac\x80\xbc\xe4\x65\xb9\xe8\x83\xfb\xd1\x7e\x8d\x68\xee\x62\x20\xc9\x96\x9b\x71\x42\x6c\x3e\x20\xe6\xd7\xbc\x30\x27\x5d\x45\xb5\x60\x95\x26\xfb\xae\x4e\x7f\x9c\x6a\xf0\xf6\x46\xce\xe9\xd7\x82\xe2\xe6\x23\xc1\xa7\xf7\x9f\xee\x95\xc5\xc6\xb3\x24\x55\x88\xe5\xd1\xac\x3c\x5b\xbc\x3f\xf7\x4c\xc7\xe7\x25\xd1\xd2\x92\xd3\x87\xf7\x85\xf5\x43\x7e\xc2\xfb\x32\x0d\x4e\xbe\x7d\x63\x01\xef\xbd\x5d\xaa\x02\x2c\x34\xc7\xa0\xe0\xbf\x85\xc5\xf7\x12\xef\xa6\x3c\xb9\x80\x1f\x31\x24\x47\x50\xb6\x83\x86\xba\x7d\xb3\x71\x88\x6d\xd8\x52\x0e\x92\x14\xb4\xfd\xff\x4c\x9b\xd3\xe9\x3f\x51\x81\x9f\xe2\x1e\xc2\x19\xff\x99\x05\x47\x26\x38\xba\xa2\x2f\xd7\x9c\x1e\xb9\x8a\x7e\xb9\x39\xe6\x44\xdd\x13\xf3\xf1\x2d\x7f\xbb\x83\x9b\xc0\x2e\x1c\x03\x42\x8c\x01\x8b\x22\xaf\x3d\x27\x46\xb7\x15\x67\x00\xb1\xf1\x30\x85\x8f\x51\xdb\x48\x8c\x01\x8f\x38\x08\xba\x54\x0d\xa5\x61\x2d\x80\x78\xd0\x0b\x04\x26\x3e\xe6\x82\xee\x1f\xc7\x95\x00\x10\x68\x33\x31\x37\x7c\x6b\x6c\xe7\xf6\xb2\xa5\x20\xd4\x4b\x64\xcf\x88\x98\x2c\xfd\x71\x68\xea\x8f\x73\x0f\x1b\x83\x07\x44\x58\xf2\x21\x4d\x6b\x85\xf9\x52\x2c\x08\xa4\x94\x0f\x1b\xc0\xdc\x60\x30\x75\x6a\xc9\xde\x91\xa8\xd4\x55\x40\x00\xad\xfd\x39\xad\xb8\x95\xf1\xa1\x3a\xaa\x6e\x05\xdd\x4e\xb7\x45\x0c\x71\x4e\xf5\x69\xe5\x59\x5b\x9f\x3c\xee\xd1\x02\xb5\xfe\x8c\x8e\x51\x7d\x66\x04\x69\x0d\x1c\x84\x26\xce\x43\x9f\x86\x2d\x40\x8d\xfe\xf2\x7f\xe8\x29\x50\xac\x1b\x00\x7b\x8f\x61\xae\xb7\x8b\xe9\xd0\xd7\xfa\x4e\x9c\x88\x8e\x66\xf6\x81\x81\x54\x98\x20\x33\x12\x52\xc5\xd9\x4c\x43\xe4\xa7\x06\xc5\x14\x84\x66\xc5\x1a\x9a\x3d\x9f\x7c\xfa\xa4\x1b\xa2\x3e\x51\xa3\xce\xe9\x13\x38\x58\x18\x56\x64\xc9\xf1\x7f\xf1\x99\x75\x9b\xb4\x06\x52\xe0\xff\xd4\x2f\x13\x94\xfe\x20\xc4\xc4\x54\xa7\x6c\x15\x99\x6e\xfe\x2f\xc5\xdc\xde\x25\xdf\x4e\xbf\xd9\x7e\x2c\x30\x27\x56\x45\xd2\x23\xc7\xa1\x34\x7b\xab\x51\x80\x85\x7c\x5e\x95\xac\x47\xaa\x0e\x71\x57\x96\x5f\xd5\x92\xab\x2a\xfe\x31\x64\x39\xab\xcd\x1f\xea\xa2\x91\x31\x49\xcd\xe1\x5c\x7b\x3e\x77\x89\x48\x6d\xd0\xd9\x52\x13\x6e\x0d\x86\x5b\x1a\x1f\x9a\x24\xe9\x17\x6b\x6b\x6d\x02\xd8\xba\x12\xa4\xcf\x98\x02\xc7\x73\x77\x44\x87\x2f\x3d\x84\x83\x83\x72\x6a\xa3\xa9\x01\xee\x38\x96\xbf\x06\x77\x70\xf0\x48\x78\xfe\x94\xe6\x66\x89\x3a\x21\x5b\x05\x1a\x21\xea\x89\x1f\xc8\x78\x31\xc7\x27\x7d\x13\x15\x08\x72\x00\x83\x78\x42\x90\x18\xaf\x8f\xf6\x30\xfa\x63\xa4\xa0\xda\x1e\x2d\x13\xcd\xb2\xe3\x35\x0e\x6a\x7b\x3e\xed\x52\x65\x06\x84\x76\x67\x36\x85\x96\x5f\x4e\xdf\x8b\x01\xb5\xaa\x6d\xec\xdf\x2b\x5b\x9d\x72\x08\xa9\xf1\x5a\x84\xa0\x51\x47\xed\x8e\x6a\x48\x2f\x92\x2e\xf5\xcb\x1a\xba\x20\xe8\x80\xc9\xd4\x5e\x11\x0d\x05\x4f\x09\x03\x8c\xdb\x9c\xa0\xa4\x18\x10\xa6\xae\xca\xbc\x6e\x39\xf3\x5c\xb3\xcf\x90\x6c\xc2\x90\xba\x90\xa6\x82\x47\xaf\xa4\xb9\x9f\x38\xfd\xe5\x4f\x16\xda\xc9\xc1\xe4\x84\x15\xa7\x34\x31\x96\x2c\x8b\x30\xc0\x6e\xb7\x15\x87\xe8\x05\x53\x5c\x08\x78\xe0\x08\x31\x60\xdd\x0b\x27\x82\x13\x47\x12\x30\x6f\x10\x16\x3a\x31\x7e\x14\xcf\x24\xd1\xa0\x0c\xc0\x9f\x8d\xf7\x4a\x88\x68\x42\x22\x0c\x73\x8c\xc2\xa4\x98\x26\x81\xbf\x8f\x0f\xbf\xfd\x03\x87\x73\xa8\x36\x86\x79\xbc\xfa\xf1\xa7\x4e\x61\x38\x2b\x2f\x15\xed\x10\xc9\xbc\x5a\x16\x48\x8b\x60\xb2\x11\x96\xc5\x87\x31\x4d\x93\x2a\x86\xc6\x18\x0a\xd5\xa9\x66\xb2\x5e\x00\x83\x06\xe7\xcf\x66\x66\x97\x02\x1a\xd9\x07\x6c\xd2\x4c\x28\xe0\xd7\xf3\xcb\x97\x79\xdb\xf9\xaf\x09\xd9\x63\xcf\x47\xbf\xd7\xd2\x71\x67\x76\x49\x67\xeb\x98\xc3\x46\xfa\xaa\x53\x8b\x70\xaa\xd4\xa4\x63\x46\x98\x47\x09\x02\xb3\xfc\x96\x4b\x65\x97\x1d\x72\x94\x23\x35\x25\xfe\xc2\x7b\x5a\x27\xf4\x1d\x5e\x58\x7f\xe1\x08\x1d\xbd\xae\x17\xff\xa7\x89\x8c\xd4\x28\x17\xbf\xcd\x19\x51\x8a\x21\x82\x50\x5f\xde\x1c\x04\x65\x58\x8a\x8c\xe9\xce\x02\x7d\xfb\x85\x03\x14\x10\xaa\x81\xc9\xed\xe4\x70\xa7\x21\x29\x64\x07\x1b\xd4\xf0\x35\x32\xf9\xee\x2f\xe5\x2b\x31\x7f\xc8\x04\xe5\x2b\x97\x8e\x2e\xc2\x49\x4d\x1d\x49\x06\x10\x18\xff\x60\xdf\x88\xd5\x7f\x2e\x87\x4e\xe6\xc0\x9a\x2b\x2d\x5a\x31\xbb\x45\x61\x70\x57\x5a\xba\xd6\x0e\xd0\x56\x71\x9b\xb0\x6e\x18\x8a\xca\x86\x25\xb9\x2f\x68\x5d\x76\xaa\xa2\x47\x0f\x0b\xb8\x0b\xf8\x93\x25\x09\x01\x9b\x76\xc0\xa6\x0f\x77\xb9\x84\xaa\x3a\xd2\x96\xe0\xae\x8d\xe9\x09\x7a\xb0\x07\xc8\x1f\x04\x99\xa3\x11\xd0\x45\x34\x4e\x58\x1a\x71\x1d\x86\x4f\x02\x6f\x27\x47\x41\x24\xad\xd7\x80\xd7\x54\xbb\xeb\x3d\xa7\xb5\x74\x2a\x72\x90\x11\xa4\xad\x23\xe0\x81\x06\x80\xe2\x52\x77\x78\x73\xce\x14\x94\x74\xc7\x1c\x2a\xcb\x0a\xbf\xaf\x21\xeb\x77\x41\x97\x59\x1a\xc8\xcd\x4c\x4e\x10\x25\xe8\x19\x66\x45\x9a\xdb\xcd\xd3\x6a\xd3\xe0\xb9\x09\x46\x60\x61\xd9\x9e\xad\x2f\x81\x05\x1f\xa7\x96\x12\xe2\xa5\x3e\x22\x4f\x58\xf8\x12\x6c\x06\x2e\x41\x8f\x72\x18\xd2\x06\x1c\x8e\xbb\x5a\xe0\x38\xb3\x31\x88\x01\x46\x1d\x82\xd0\x0f\x18\xd1\xc5\xd0\x91\x26\x64\x59\x0a\xc6\x09\x5a\x1c\x46\xb5\x89\xea\x89\x16\x52\xfb\x88\xe0\xb5\x87\xd5\x47\x73\xa1\xf4\xb9\x21\x10\xb6\xa9\xda\xb1\x25\xa8\x36\x3f\x60\x4f\x33\xdf\x0f\xd1\x0f\xa7\x6b\xbe\x2f\x8f\x4b\x38\x7d\xf3\x1a\xd4\xb9\x6b\xcf\x08\xfd\x8c\x09\xf0\xdd\x34\x11\x78\xe9\xa7\x76\x48\xb7\x90\xe5\x41\x1a\x58\x16\x82\xde\x82\xea\x3e\x0d\x5f\xa0\xc6\xf0\x65\x7a\x48\x00\x4f\x6b\x47\xba\xd3\x29\xa8\x66\xb2\x65\xa4\xa0\xd8\x61\xef\xd8\x12\x87\xeb\x7c\x5a\xf8\xb5\x59\x93\x12\x1e\x88\xa8\xed\x7a\x02\x88\x38\x76\x9c\x7b\xed\xca\x44\x69\x05\x25\xc5\xf4\xa9\x88\x1c\x95\x22\xc7\x02\xf8\x0e\x9b\x9a\xe9\x93\x31\xfc\xd7\x75\xce\x2b\x61\x99\xfa\x8f\xdb\x1a\x00\xc8\xff\xa7\xf2\xd1\x45\x97\xcd\x26\x83\x2a\x31\x2f\x97\xd5\x33\x92\x74\xb8\x77\xc9\x6c\x2a\x87\x8b\x31\xdf\x44\xc9\x66\x21\xc2\x61\xdb\x47\xd5\xc3\xa5\xcd\x25\x6d\x8c\x87\xb1\x75\xe5\xf0\x53\x35\x1c\xb3\x9c\x50\xa8\xde\x3f\x0e\x6f\xc3\xe7\xe1\x6d\x50\x3d\x64\xbd\xc2\x99\x1b\x2f\x0f\x4f\xe1\x80\x9c\x42\x0a\x7d\xde\x03\xfc\x9a\xbe\xb4\x31\x09\x1c\x57\x9b\x13\x73\xb5\x47\x6a\xae\xbe\x44\xed\x58\xfb\xcc\x71\x69\x2a\x93\x8a\xc4\x4a\x9a\xae\xfe\x93\xfc\xf4\x2d\x0c\x12\xd3\x4b\x62\x36\xa4\xb6\x61\x3d\x4d\x1d\xf6\x60\xe2\xa9\x8f\xd3\x9c\xd4\x39\xa5\x03\xe2\xb8\xd0\xab\x84\xda\xde\xc6\x42\xe5\x9f\x7b\xb0\x4a\x3c\x9d\x40\x73\xda\x05\x9f\x2d\x2c\x61\xa7\xb6\x8f\xd3\xb7\x91\x96\x73\xac\x27\x05\x5f\x7d\x7a\x26\x31\xfc\xb6\xcb\xea\x08\x78\xf2\x7f\xcd\xfe\xcd\xf7\xee\x13\x2f\x39\x9f\x50\x13\xf5\x33\x9a\x2a\xa8\x62\x48\xdd\xff\xbb\x42\xd5\x46\xa9\x4d\xa7\x5c\xff\xae\x40\x77\x2c\x2a\x5c\xcc\x3d\xa9\xb7\xc5\x62\x07\x66\xe4\xd5\x6b\x50\xd0\x8c\x62\x69\x25\xd1\x9d\xcb\x94\xc5\x21\xa7\x86\xb7\x35\xaf\x1a\x8e\xc3\xbe\x57\x5b\xdb\xf2\x60\x05\x0c\x67\xe6\xd4\x5e\xec\xbc\x05\xd1\x24\x9c\x30\xfa\x98\x70\x1b\x58\x93\x98\x1f\x32\x0c\xd2\x73\xd0\x71\xb8\x9b\xdd\x58\x56\xf3\xa4\x9e\x6f\xa6\xe7\xcf\xde\x30\x6e\x07\x40\xe5\x49\xe7\x66\xa9\xeb\xff\xcb\x4f\xd8\x52\x6c\x14\xd3\x7c\x86\xc5\x3d\xda\xba\xd8\x58\x1d\x03\x3f\xbf\xcd\x4c\x23\xc8\x1e\xe3\xe5\xd6\xf9\x1b\xc8\xa9\x38\x2f\xb7\x8e\x16\x02\xaa\x7c\x98\x2a\xb3\x87\xb7\x3a\x02\x9c\x7b\x7a\xbd\xe2\x5b\x7b\x44\x0b\xe9\x99\x66\x5a\x30\x84\x3e\x60\xb5\xab\xbc\x7a\xea\x94\x60\x81\x90\x60\x51\x0a\x1e\xe9\x02\xd5\xed\x6d\xb8\x6d\xc2\x5d\xe3\xfb\x85\x25\x57\xb9\x2a\x27\x62\x6e\x32\xf9\xf2\xd5\x13\xfd\xf5\x48\xf3\x50\xf1\x2d\xc4\xdf\x92\xfe\x9a\x08\xfc\x70\x46\xc2\x57\xdc\x1d\xf2\xd5\x7f\xc3\x90\xa1\xa6\x56\x4a\x60\x4c\xd3\x9b\x21\x49\x9d\xfe\xe9\xe2\xb1\x36\x95\x91\xd6\xbe\xce\xae\x76\xf6\x4d\xd0\x7b\x28\x04\x03\x1d\xb5\x33\x10\x8e\x7b\x83\xbe\x62\xef\x0f\xe2\x40\x24\x87\xcb\xf1\xe6\xb4\x4b\x35\x17\x29\x49\x68\x14\x93\x36\x87\x23\x0e\xbe\xe9\x9e\x0d\x2a\xaa\x79\xe5\x24\x9a\xa7\xa0\x48\x6f\xc5\x03\x54\x8a\x35\xdb\x1e\x56\x0e\x22\x4d\xd9\x3c\x31\x2f\x45\x76\x22\xc3\xdb\xf9\x1c\x3f\x8e\xe7\xf8\xe9\x74\x8e\x60\xd4\x27\x18\xff\x86\xc3\x59\xbe\x95\xf0\xb6\x7b\xdd\x20\xd8\x63\x5a\xc9\xcb\x4e\x05\x76\x13\xc5\xe3\x04\x42\xae\x39\x52\x0c\xde\x4a\xde\xd4\xb0\x2d\x73\x25\xd4\xe5\x16\x6f\xf0\x7c\xad\xe8\xd9\x63\x45\x93\x25\x4f\x53\x77\x42\x3d\x6a\xc4\xd1\x91\xa3\x16\xe8\x3b\x32\xd1\x55\xdf\x17\x16\xc4\x2e\xde\x5a\x6f\xaa\xad\x05\xdd\x26\x6b\x2d\xbc\xf3\x46\x8e\xbf\xb5\x21\xcd\x6e\x2c\x8b\x4b\x0f\xfe\x29\x42\x78\x57\x62\xb5\x5c\xa9\xa1\x89\x7c\xcb\x8f\x15\xfb\x0d\x36\xf9\xbb\x8b\x17\x29\x12\xff\xe6\x04\x79\xe3\x1c\xa8\xbf\x5b\x91\xb2\x7b\x7f\x9c\x6f\x59\xef\x6d\x1f\xe7\x7b\xfb\x38\xb7\x8f\x73\x77\x8b\x8a\x69\x64\x59\x20\xe5\xbe\x23\x54\xf9\x5f\xbd\x0c\xb3\xbb\xdb\xf8\x98\xbb\x21\xd5\x76\xd0\xc9\x4e\x4c\xf6\x7c\xf7\x1e\xd0\xf6\xa4\x76\x1c\x33\xf7\x1d\x94\x8e\xaa\xa2\x4a\x26\x12\xf8\x87\x66\x01\xef\xb8\xbb\x18\x95\x45\x35\xd8\x14\x1a\xb8\x10\x48\x52\x26\x47\x16\xeb\x45\x73\x95\x7c\xc9\x9b\x3b\x26\x78\x1b\xe6\x03\x80\x42\x64\xfe\x77\xdf\xcd\x31\x32\x00\xb7\x51\xac\x3e\x93\x8c\xb7\xd3\xb7\x51\x0a\x32\x7c\x97\xc3\x2d\xfa\x5a\xad\x52\xea\x4f\x20\x9f\x38\x9f\xbe\xe5\x2d\xe5\x3a\x3b\x10\xfa\xee\x94\xd5\x12\x09\x6d\x72\x83\x1c\x0e\xf9\xfc\xff\x4c\x4d\x2e\x79\x9a\x5b\xeb\x49\x6c\xe8\xef\x4e\x9b\x9d\x73\x26\x45\x1e\x78\x9f\x9e\xee\x33\x42\xf9\xf9\x89\x1a\xdf\xa6\x10\x50\x81\x15\x0e\x35\xb6\x7a\xb8\xff\xb0\x5f\x48\x42\xf8\xa6\xdd\x76\x52\x77\x1f\xb1\xda\x15\x93\x8f\x1c\x12\x42\xfc\xb5\xfb\x98\xf1\x0a\x3b\x18\x98\xc5\x61\xf0\x01\xf4\xd8\xbd\xdc\xa9\x4b\x49\x2d\x53\xdb\x0b\xe4\xa3\x39\x4d\x36\xfe\x0f\xf1\x70\xf0\x6b\x21\xfa\xa6\x43\x1b\x30\x06\xb7\xdd\xa7\x77\x2e\x87\xc6\x13\x7e\x60\x1c\x90\x4e\x9a\xcb\x49\xfa\x39\x28\x0b\x3c\x6b\x01\x09\x2a\x37\x6a\x82\x92\x67\x18\x96\x2b\x2b\x62\x41\x7c\x91\xde\x6b\x8c\xf9\x60\x2f\x54\x44\x2e\x66\xa2\xda\x4c\xb5\xbb\x53\x53\x88\x7a\x86\x5b\xe0\x49\xe9\x02\x4e\x91\xba\xb7\xac\xe8\x2d\x99\x6d\x0f\x53\x8e\xf0\x18\x3a\x10\x79\x5d\x20\x28\x8a\x51\x59\xf5\xee\xd3\x1d\xd5\x78\xde\xfc\xa1\x55\x1c\x41\xdf\x71\xf6\x63\xca\x66\x48\x2d\x52\x56\x56\x1c\x77\x5c\x03\x04\x6d\xf9\xe1\x63\x88\xe3\x06\x79\xb8\x98\xd3\x1d\xaf\xe2\x9d\x5a\x7f\xca\xe8\x75\xb1\x9f\x0a\xdd\x45\x76\xa0\xda\x1e\xb2\x39\x66\x59\x94\x7c\xb0\x8a\x82\xfc\x50\x77\x01\x82\xcd\x1d\x27\xbc\xf7\x00\x9b\xe8\x5e\x7e\x23\x58\x7d\x3c\xf7\x8b\x9f\xf0\xc4\x21\x46\x30\xc1\xd0\xc4\xc0\x9a\xe8\xe4\x4d\xc2\xce\x05\x2a\xa6\x2d\x1a\x3b\xe3\x56\xcc\x4a\x0d\x31\x58\x6c\xe1\x3c\xc3\x62\x48\x23\x8d\xd7\xe1\x93\x85\x96\x57\x9f\xb8\xed\x20\xc4\x76\x27\x06\xad\x8f\xa5\x1a\xc4\x86\xb4\x61\xf3\xa9\x0d\x23\xc4\x7c\x78\x66\x32\x9f\x6c\x63\x01\x72\x26\x18\x99\xd3\xe0\xc0\xdc\x53\x31\x7a\x08\x2c\xba\x8d\x71\xdb\xc3\x62\x0e\xc0\x72\x48\xe2\xf7\xaf\xdb\xdf\xd9\x2d\x53\xd7\xd4\xaa\xf5\x92\x6e\xc5\xab\x79\x21\xb0\x43\xc7\xb1\xf0\xfb\x71\xee\xd1\xbf\x74\xcc\x8a\xfe\x35\x3d\x32\x4a\x5a\xea\xe4\x78\xcd\x16\x10\x0e\x18\x1c\x89\xef\x16\x6d\x22\x7e\xff\x7c\xbd\x01\xb7\x43\x8d\x49\xa3\xdc\xb0\x30\x32\x63\x58\x63\xf9\x33\x8c\xbc\xe5\x93\xa3\x95\x40\x4d\x52\x2e\xe1\x37\xf0\xb3\x70\x29\xd7\xa2\xbd\x22\x66\x19\x71\xe2\xbd\x34\xc7\x3a\x12\x48\xa4\xd3\x6a\x5e\xf0\x14\x01\xa0\x7f\x79\x18\x1c\xa7\xf2\xe7\xf8\x92\xf0\xd7\x5f\x69\x05\xa1\x99\xca\xc9\x5d\xfd\xde\xea\xce\x4e\x91\x13\x15\xe5\x55\xc5\x66\x67\x53\x2f\xb1\x7e\x4d\x6b\x9f\x14\x32\xae\x60\xc1\xd0\xe3\x10\x8a\xab\x21\xf5\x6e\x36\xba\x42\xdf\x33\xa6\xe0\x8c\x73\xf0\x6b\x50\xe6\xec\x41\x6b\xea\x66\x8b\x9b\x36\xc3\xf1\xe4\xac\x73\x72\x9d\xb0\xa8\x1f\x7e\xa3\x1a\xac\x90\x3c\xf6\x21\x15\xab\x33\x95\x8a\x08\x64\x9e\x84\xad\x29\xea\xa5\xf8\xbe\x29\x31\xc8\xac\xce\x47\xc9\xe4\x26\xac\xad\xe6\xdb\x46\x58\x45\xa5\xc3\x1e\x79\xbb\x31\x88\xe4\xe2\x2b\xcd\x9c\x30\x65\xe6\xba\x71\xf0\x00\xd0\x74\x57\x30\x6c\xc9\x20\xcf\xfa\xf4\xe7\xbd\x0d\x71\x28\x57\x9c\x87\xeb\xd1\xfc\x95\xfe\x7d\xd2\x3a\xac\x42\xb7\x55\xb2\x20\x46\x60\x61\xd8\xf5\xc8\xb2\x5e\xd8\xef\x74\x0c\xa7\x26\xdf\x88\xfe\x89\xc2\x5c\xc5\xd7\x12\xfd\x48\x7d\x86\xfe\xe3\x60\x49\x61\xa1\x56\x96\x0a\x5f\x85\x33\xfa\x99\x87\xcc\xad\x52\xc3\x23\x59\x65\x54\x08\x48\x8c\xad\x84\x77\x9c\xe2\x15\xca\xc2\x43\x85\xe8\xab\xca\x82\xb4\x0e\x9b\x46\xd1\x32\xff\x17\xd7\xf6\xcc\x5c\xb5\xbc\xf8\x18\x15\x71\xad\xf2\x20\xc0\x2f\x82\x2c\x1c\x4d\x14\x4f\x2d\xf8\x61\x61\x4e\xf2\x71\x66\x0e\xab\x9d\x0a\x3d\x95\x79\xc9\xc9\xb4\x29\x3f\x68\x0a\xdb\x26\x9b\xdc\x43\x38\xc3\x08\xed\x34\x47\x57\xe1\x4d\x2e\x21\xd6\x50\x43\x6a\x7e\x2b\xa3\x34\xc4\xae\x66\xd3\x5b\x4d\x1b\xde\xf1\xef\xb0\x17\x91\x91\x96\xff\xf5\xa2\x7e\x7e\xff\x24\x47\x40\x83\x27\xce\x2d\xfb\xe8\xec\xa9\x46\xa5\xfd\xa2\x2c\xfa\xa0\xac\x23\xb5\xec\xbb\xd0\x11\x54\xda\x3a\x28\x3c\x35\x3a\xa8\x60\x1f\xdf\x21\x85\xba\xdb\x47\x52\xd3\xc7\x29\xbc\x77\xc4\xb5\x0b\x42\xec\xde\x12\x5e\xb9\x3c\x2a\x49\xbb\x21\x80\x37\xd4\x87\x92\xd6\x47\x2b\x22\xaa\xf2\x33\xd2\xaa\x7e\x1a\xbc\xda\x33\xf0\xe2\xbe\xae\xa2\xc1\x62\xef\x63\xfe\x1a\xa6\x2d\x5f\xa1\xff\xcb\x57\x3f\xb1\xfe\xa0\xb5\x36\x70\xce\x32\x68\x61\xc7\x60\x27\xca\xff\xd2\x96\x90\x61\x73\x4f\x16\x67\x09\xd6\x58\xe2\x85\x87\x83\x7a\xc7\x1c\x4b\xc5\xcc\x15\x91\x18\xee\x54\x60\x43\x2a\x60\xe9\xd3\x85\x92\x96\xc6\xa9\x80\x8e\xb0\x94\x39\x85\x83\x9e\x1d\xf4\xfe\x3d\xd1\xf6\x3d\xeb\xc6\x33\x08\x7d\x2d\xa2\x27\xe2\xc2\x12\x59\xa0\xa6\x23\xf1\x1c\xe0\xce\x27\xce\x47\xc3\xe3\x13\xf2\x84\xba\xed\x33\x70\x2f\x6c\xe1\x54\xcc\x55\x9f\xab\xdb\x98\x37\x00\xff\x67\xa8\xc9\x67\x77\x18\x9d\x79\x7f\x64\xf2\xcc\xf1\x3e\x2c\xd1\x28\xfc\xde\x5e\x65\xb0\xb4\x70\x1e\x93\x52\x7b\x4c\x4a\xa0\x72\x4a\x2e\xd4\xea\x7a\x55\x89\x5d\x59\x7d\x99\xa9\x1e\x32\x44\x90\x8f\xb2\x34\x3d\x87\xc0\xcd\xf5\xba\x14\x3c\x88\x3b\xb5\xbd\xf7\xf6\xe9\x2a\xae\x90\x7a\xe7\x16\x70\x28\xec\x78\x90\x1a\x57\xdb\x7d\x5e\xfb\x1c\x4d\xd5\x17\xee\xec\x2b\xeb\x6e\xd3\x1b\x0d\x49\xf3\x9d\xd3\x65\xce\xfe\x94\x65\x2b\x0e\x4f\x03\x59\xb9\x40\x93\xcd\x80\xbd\x2e\xdb\xf5\xb2\xa8\xfb\x68\x23\xa8\xfa\x36\x4a\xbf\xdd\x7f\x02\xbf\x2d\x05\xbf\x21\x2d\xf3\x27\x9d\x4f\x25\x52\xde\xe9\x86\x61\x23\x83\x61\xa4\x04\x44\xe7\x49\x8c\xba\x89\x19\x75\x71\xec\x21\xd0\x84\x63\x22\x8d\x82\x51\xa8\x60\x49\x6b\xbc\x28\x14\xa0\x07\x45\xe0\x7c\xca\x74\xf0\xca\x08\x06\x95\xc0\x74\x8c\x85\xa8\xa0\xbc\xdc\xb6\xaa\x93\xf5\xd4\x82\x20\xda\x1e\x4a\xd0\x25\x7e\xdb\x03\xc1\x25\xe1\xdd\x8b\x38\xe1\xc9\x44\x10\xf0\x4d\xdc\x23\xbd\xbb\xf0\xe2\x5e\xf2\x71\x2f\x10\x43\xee\x77\x74\xfc\x5f\x54\x24\x84\x0d\xbc\xfd\x8e\x3c\xe6\x8a\xbb\xed\xea\x30\xe6\x25\x42\x0a\xdb\x31\xb9\x89\x1b\x82\x04\x03\xea\x89\x4c\xbf\x00\xeb\x86\xc0\xe8\xc1\x82\x86\x54\xe0\xc6\x3d\xad\x3e\x57\x09\x69\xed\x55\xf0\x0f\x74\x9d\xec\x77\x54\xd9\xe2\x7e\x47\xc6\x8a\x69\xf0\x86\xb3\xda\x35\x36\x1a\x66\x8e\x2b\x56\x76\x62\xd8\xd0\xac\x18\x83\x8d\x60\x8e\x84\x8a\x74\xe1\x05\xaa\x07\xa0\x81\xe6\xa5\x38\xb5\xc2\xbd\xa0\xee\xc0\x6e\x09\x11\x5b\xcb\x13\x62\x94\x7c\x0d\xbd\xe8\x6b\x78\xf4\xa0\x41\xeb\x57\x6c\xea\xaa\x12\x81\xfd\xae\xb9\xb6\xb0\xe9\x0a\xfd\x6e\x43\x3b\xdc\x0e\xdd\xab\xab\x5a\x3f\x14\xc1\xc1\x22\xfb\xa4\xeb\x9d\xbb\x0d\x09\x2d\x89\x69\xaa\x99\x68\xf5\xf9\xfc\x36\x98\xf9\xbb\x3d\x9c\xed\xb9\xe8\xa2\xfe\x9e\xe3\x4d\x6a\xb8\x35\xf4\xaf\x0f\x45\x6e\xb3\x85\xfa\x39\xa3\x4b\x9f\xdd\xeb\x19\x29\x0f\xbc\x5b\x16\xce\xe7\xe1\xd1\x2c\xd4\x63\xcb\x3f\x41\x7d\x71\xc6\x08\xee\xfd\xf6\x62\x00\x27\xaa\x2d\xb3\x93\xe3\x30\x1b\xcc\xcc\xff\x77\x2e\x74\x50\xf1\x57\x71\x17\x06\x47\x45\x60\xfb\xfb\x2b\xe4\x6b\xc3\x09\xb4\xf0\x8a\xf9\x53\xd8\xcf\xf0\x2a\x79\xd9\x3f\x20\x33\x08\x8b\xc3\xdf\x2a\x83\x5a\x58\xa0\x45\x46\x8c\xac\x06\xd2\xb4\xb8\x1b\x6f\x7f\x70\x64\x08\x8b\x34\xbf\x18\x03\x21\x7a\x69\x58\x16\xa8\x46\xa3\xc9\x44\xca\x54\x11\x18\xcf\x1e\x96\xe0\x37\x7c\xff\x74\xd4\xf4\x23\xc8\x82\xff\x74\x3f\x6a\xc0\x0b\xae\x99\xc0\xf0\xb1\x83\x6f\xef\x57\x12\x4d\x0d\x75\xc5\xe8\xb1\xa3\x2e\x46\xd6\xc0\xcf\xdc\x9d\xb6\xdd\x25\x5a\x7e\x07\x7e\x4d\xcc\x7a\xea\x71\x09\x1b\x1b\x10\x42\x7e\xbb\xe2\x10\x53\xe6\xa9\x96\xb0\x18\xf3\x11\x96\x2c\x43\x68\x58\x72\x95\x19\x91\x8e\x1a\xff\x3d\x5d\x7e\xbb\x06\x0b\xee\xed\x86\x85\x8b\x09\x61\x2c\xb4\xa6\xc3\x62\x3c\x9d\xa2\x73\x27\xe4\xa3\x75\x3a\xb5\x77\x8b\xdf\x3f\x16\x56\x03\xbc\xff\x48\x73\xcb\x4c\x9c\xe0\xfa\xef\xf2\x93\x9b\xc9\xff\x25\x45\xa9\xf7\x18\x82\x2a\xb1\x0d\xeb\x86\x34\x89\x31\x9c\x4a\xc0\xfe\xe5\x54\xc7\xf7\x19\x3c\x2a\xd2\x43\xe9\xb0\x18\xbc\x35\x69\x48\x6d\xa1\xfb\xfd\x0c\x7e\x15\xae\x89\x99\xf6\x78\x20\xf6\x0c\xdc\x1b\x0a\xd8\xe5\x0e\x5e\xba\x0a\x6c\xe1\xaf\x2c\x66\xf6\x93\x7f\x81\x8f\x2e\x0a\x80\x3b\x2e\x9c\xa0\x51\xfd\x0c\xfe\x77\x5e\x14\x09\x49\xbe\x5e\xd9\x7e\xb1\xb0\xca\x22\x84\xb3\x37\xf4\x6d\x05\xa9\xbb\xed\x85\x4d\x95\xb0\x41\xb0\x07\x43\x2f\x68\x03\x73\x73\x0d\x90\x99\x10\xf4\x8d\x99\x33\x6c\x54\x78\x19\x36\xde\x09\x0a\x1b\x2c\x79\x45\x25\x6c\x1b\xca\x6d\x63\x81\x6e\xdb\xe8\x2d\xdb\xc6\xef\xb7\xb6\xfb\x0d\xc7\xf6\xc3\x16\x35\xd4\xc3\x33\x41\xdc\x8c\xa4\x69\x55\xb1\xa5\x0c\x89\x8c\x00\xd2\x57\xa5\x01\xa7\x38\x59\x1f\xb6\xca\x3e\xb0\xc9\xea\x87\xf5\x41\xa8\x11\x80\x2d\x0d\x5b\xfd\x0e\xb2\xc8\x0c\x1b\x14\x7f\x9f\x61\xd3\x1e\xf5\x29\xe1\x7f\x7a\xfc\x31\x69\x9f\x5a\x63\x9f\x5e\x8f\x46\x86\x4f\x5f\x9b\x7b\xbf\x3f\x4e\xf8\x8c\x0e\x48\xef\xa9\x29\x40\x58\xd1\x5d\xf2\x0f\x3f\x71\xd9\xb1\x75\x28\x80\xee\x3c\xfe\x64\xe6\x13\xe3\xa4\x51\x61\xf0\x54\x6b\x88\x6f\xbd\xee\x01\x44\x5f\x9b\x2b\x50\x62\x1d\xe2\x56\xc2\x61\xa6\xba\x0a\xf8\x43\x3e\x91\x39\xee\xec\xc1\x40\x56\x62\xc4\xf5\x0e\x19\xad\x50\x80\x31\xe2\xf8\x0d\x22\x8d\xd8\x88\x11\xf3\x5b\x8d\x05\xec\x55\x88\xd1\x92\x03\x3d\x0b\x1c\x05\x4c\xaf\x57\x88\x99\x9f\x9a\x26\xc1\xd4\x40\x08\xd2\x2d\x59\x81\x41\x0d\xa6\x0d\x17\x5a\x60\x70\x6c\x8c\x97\x26\xf4\x62\xa9\xa0\x18\x0e\x1f\xc9\x71\xd9\xb9\xe9\x70\x04\x03\x38\x49\x18\x8e\xd3\x17\xec\x14\xe2\xd5\x17\x1a\x92\x26\xc9\x5a\x72\x0b\x98\xa7\x90\xdc\x1b\xdc\x4a\xe0\x45\x8a\x90\x58\x0d\xc9\xea\x2b\xbd\xa0\xa1\x33\xa4\x65\x7f\xe1\xb6\x17\x50\xe6\x65\x50\xc1\xdc\xe2\x15\x44\xf7\xcb\x55\x79\x68\x8f\x25\x91\xbc\x3b\x19\x7b\xf2\x6a\x81\x82\x4c\x1e\xbb\x9d\x21\xbd\x35\xfc\xb7\x77\x4d\x83\xd0\x22\x4a\x78\x76\xf7\x64\xa1\x24\x4c\x08\x69\xbb\xf4\xaa\x4a\x50\x3d\x84\xc1\x7a\x61\xd2\x48\xd9\x13\x53\x80\x92\xd5\x80\xa1\x3c\x7d\xe2\x86\x5e\x48\x9f\x81\x06\x82\xfa\x2c\x19\x95\x93\x3e\x11\x5c\x72\xfc\x47\xaf\x15\x33\x2a\xd0\xde\x95\x12\x13\x47\x6d\xd6\x30\xe9\x00\xbe\x33\xcf\x8f\x87\xa4\x89\x39\x0b\x27\x8f\x64\x5a\xd7\x43\xaa\x67\xee\xb0\x15\x28\x2c\xc4\xea\x36\xa4\xe6\xf8\xbf\x82\xf3\x03\xca\x34\xd1\x83\x52\xe3\x0c\x9e\xb4\xcc\xd1\x19\x92\x76\xc8\xf4\xbd\x7b\xd4\x71\xd2\x91\x36\x51\x8b\x69\x48\x3f\xf8\x0b\x12\x43\x66\x57\x45\x3e\x72\xc2\x55\xa9\x60\x2d\xb4\x1f\x00\x10\x56\x30\x9c\x0e\x7f\x68\xac\xd0\x1b\xcd\x74\x9e\x7e\xc1\x92\x31\x9c\xaa\xe1\x1c\x40\x17\x28\x82\x2f\x3a\xd5\x49\x10\x42\x47\xf9\xd7\x6d\x9f\xc0\x33\x9a\x1d\x1a\xa0\x22\xa8\x70\xfa\xca\x3d\xad\x80\x23\x06\xe1\x54\x46\xe6\xb4\x9e\xae\x6d\x00\xca\xf0\x3c\x54\x0f\x84\x13\x19\x3b\x39\x98\x9d\x1a\x21\xdb\xf6\x59\x43\xe5\x79\x89\x70\xe2\x59\x1d\x29\x96\x7f\x17\xfe\x1c\xff\xb1\xf3\x0d\xa0\x07\x44\xc8\x86\x06\xea\x7c\x09\xd4\xc4\x18\x8a\xdb\xe0\xa1\xb8\xb4\xd3\x44\xb2\x4a\xc0\xae\x9d\xf8\x02\xa7\x84\x83\x01\x41\x95\xa0\x89\x89\xa0\x4a\xbe\x34\x1b\xd5\xe1\x4f\x42\xac\xbc\x51\x29\xa6\x71\x91\xc4\x05\x40\x26\x5e\x9d\xac\x3b\xc1\x21\xa0\x2e\xb8\x34\x1f\xea\xae\xc1\xcb\xd2\x92\x0b\xec\x50\x8f\x40\x2f\xba\x8c\x95\x2f\xcb\x1e\x32\x51\xc1\xad\x39\xea\xad\x0d\xb5\xa1\x45\x55\x76\x8e\xca\x6d\x48\x9a\x28\xc1\x3a\x52\x05\x06\x15\x85\x8c\xe6\xd9\xdc\x0e\x65\x8c\xa1\x51\x61\x68\x68\xcb\xfe\x8a\x3e\x09\x47\x1e\x54\x75\x02\x4d\xb6\x85\xb6\xec\x6f\x36\xc8\xd6\xef\xf4\x12\x6e\x04\x9c\x35\xda\xb2\xf7\x39\x18\x8a\x17\x1a\xc1\x99\x15\x58\xcb\x18\x4f\x95\x9d\xa1\xe9\x98\xd1\x76\xfc\x71\x1c\x68\xbb\x5f\x6c\xbf\xec\x0f\x8d\xf1\xb2\x8d\x54\x40\x65\x41\x68\x61\x9c\x48\x0a\x8d\x2c\xc6\x78\xee\x50\xf0\xb8\x9c\x14\x9a\x26\x97\x85\x02\xe5\xfb\xa1\xb1\x60\xac\x1a\xda\x15\x1a\x6b\x57\xd0\x94\xda\xab\xc8\xf0\x8e\xce\xd6\x6e\x5b\xd0\x86\x2f\xe4\xf0\xcb\x06\xfd\x1f\x74\xe2\x5f\x6e\x40\x87\xdf\x5f\xfc\x39\xfc\x7b\x2c\xe9\xc3\xef\xaf\x54\xd6\xe7\xc7\xf9\xb9\x7d\x9c\x9f\xed\xe3\x8c\x1f\x67\x74\x4b\x3f\x65\x05\x6c\x19\x12\x42\x3a\xb1\x98\x32\xa0\xd3\x94\x3c\x52\xff\xbb\xfc\xbf\x32\x4d\x64\x4d\x01\x57\x84\x20\xc0\x61\x44\xe8\x61\x74\x1d\x70\x30\x8c\x7c\x54\x02\xbb\xb3\x30\x74\x50\x06\xea\x09\xf8\xe4\xbf\x3a\xc1\x8a\x99\xa6\x8c\x4f\xd1\xbd\xc1\x14\x47\xb7\x21\x74\x26\x76\x0b\xa6\xf2\xc7\xf0\x31\x60\x33\x78\x13\x64\x7b\x51\x44\x29\xca\xd8\x3b\x86\xf2\x2e\xa5\xc2\x21\x8b\x06\x10\x5d\xf8\x12\x1d\x7a\x12\x0c\x44\x18\x58\x30\x01\xa9\x0a\x76\x79\xb0\x3f\x99\x09\x54\xb5\xb0\x42\xaa\x60\xef\x23\xf5\xf8\xc3\x08\xc2\xf3\x18\xb2\x82\x0c\x69\xdc\x52\x88\x2e\x70\x56\x8d\x50\x21\x26\xff\x81\x81\x20\xcc\xa4\x3a\xb6\xfa\x93\xff\x27\x0e\xeb\x14\x9a\xbb\x1a\x2c\x4e\x80\x86\xf4\x26\xfd\xa7\x3b\xfd\xec\x9b\xe3\xd9\x71\x60\x5f\xc3\xe1\xa2\x12\x99\x19\xc4\x21\x04\xf4\xf5\xe8\x70\x0c\x01\x20\xe8\x22\xa3\x43\x7e\xb7\xa3\xed\x0a\x8b\xda\x9a\xa0\x2e\x62\xc9\x04\xe5\xf5\x74\xf4\x69\xf9\xfa\x34\x6f\x5c\xf0\x46\x97\xb2\xde\x42\x10\xb8\xe1\x48\xb0\xe2\x1e\x71\x9e\x22\xce\x23\xe2\x3c\x22\xce\xb8\x32\x01\xc0\x53\xdc\x51\x5a\xae\x57\x87\x0c\xbc\xe1\x8a\x26\x40\x2f\x4c\x0b\xaa\x99\xb2\xdd\xe8\x38\x9d\x47\xea\x89\xa0\x18\x5e\xfe\xe9\x90\xcd\xa4\x1e\x4e\x0d\x9e\x55\x02\xdc\x7c\xec\x28\x99\xa5\x1e\x2a\x01\x46\xd1\xa0\xab\x83\xd4\x14\xd7\x23\xa8\x83\x3c\x02\xcb\xab\xef\x71\xa8\xe2\x44\x40\x9e\x27\x02\x54\x61\xb7\x62\x6d\xda\xf5\xc8\x16\x98\x5e\xda\x03\xae\x10\x45\x19\xc7\x4d\x53\x2f\x30\x2b\xf7\xdd\xad\x83\x35\x4c\x7b\xac\x46\x21\x79\x89\xd1\x89\xb0\x55\x52\x7b\x41\xf6\x9d\x13\x85\xbf\xcf\x2f\xbf\x16\x41\xd0\x28\x83\x95\x2e\xd0\xa5\x5f\x47\xdd\xd6\x36\x2a\xb7\x9a\x20\x34\x42\xbb\x4f\x54\xc0\xe0\x51\xb5\x8d\x9d\xa4\xbd\x1c\x07\x10\x16\x63\xf3\xb2\x9c\x10\xd3\x4e\xab\xe1\x58\x04\x15\x66\x00\xb2\x6b\x34\x7f\x38\x66\xae\xb1\xae\x34\x0d\xcd\xfa\x00\xd5\xd3\x8c\x97\x12\x80\x36\x35\x83\xdd\x35\x21\x35\x8a\xa4\x4d\x8b\x62\x50\x94\x49\xae\x16\x40\xee\x59\x08\xa9\x67\xb0\x85\x64\x61\xe1\xd5\x5d\x43\x7f\x42\x56\x1b\x4d\xa7\x92\xbf\xff\xe3\xe0\xf7\xe1\xa0\x4f\x40\xd1\xb5\xac\x0e\xa5\x3c\xb4\xcc\x2c\xd7\xf7\x34\x88\xb6\x9b\x2f\x79\xb5\x9d\xd4\xe7\x55\xf4\x08\x9e\x50\x98\x46\x05\x68\x5b\xbd\x56\x0e\x62\xb7\xe3\xff\x62\xc5\xa4\x6b\x57\x01\x58\x67\x09\x80\xe6\xae\xa8\xaa\x4c\xc4\xcc\xdf\x48\x92\xd6\x4e\x7f\x21\x5e\x30\x45\x14\x02\x0a\xf5\x38\x47\x77\xeb\x5a\x29\xba\x5b\xab\xf1\x56\x05\x23\x40\xac\xa6\xfb\x64\x85\xde\xc5\x3b\x6d\x00\x77\xc9\x19\x05\x7c\xd7\x65\xcf\xec\x82\x37\x55\x57\x47\x77\xb7\xdd\x52\x4c\xb5\x24\xd1\xdd\xdf\x85\x57\x89\x09\x2d\x47\x32\x11\xe3\xd5\x8b\x68\x21\xe3\xc1\xc5\xad\x03\x4d\x3b\x8e\x9c\x61\x16\xe1\xe1\xb3\xd9\x9a\xcd\xdb\xbb\x6a\x87\x36\x81\x19\x56\x7d\x04\x31\x5f\xbe\x8b\xfa\x5a\xba\x80\xc6\x7f\xfa\x79\xe1\xcf\xf3\x3f\x4c\xcf\xe7\x74\xfa\x18\xf8\xf7\xf9\xcd\x82\x7e\x09\x5b\xd9\x18\x06\x2c\x96\x96\xb7\x04\x4d\x53\x7d\x37\x14\x00\x8d\xd4\xe3\xe6\x29\x0c\x33\x8b\x9a\x8d\x66\x06\x1d\x84\x1d\x8b\x3e\x64\xde\x7e\x13\x04\xc1\xb6\xe2\xe6\x7e\x0c\xf5\x99\xd8\x5e\x9d\xc6\xfb\xd2\x83\xd1\x7b\xbc\x3f\xad\x6f\x4f\x8b\xc1\xe4\x60\x13\x5b\xfd\xe7\x71\xcd\x8a\xcf\x6e\xc8\xbf\x53\x12\x32\xf8\x28\xc3\xde\xc6\x96\xe2\x6b\xc8\xd5\x61\x18\xf2\xbc\x1a\x19\x7d\xdb\xa1\x92\x1f\x47\xc0\x64\xe8\xd5\xd9\xc8\x5f\xb4\x15\x3e\xfc\x56\xc0\x30\xae\x92\xd7\x1b\xe7\x5d\x80\x93\x9a\x67\xf2\xd7\x91\x87\x3d\x8f\xf4\x44\x7f\x91\xa1\x8e\xfe\xfb\x03\xd7\x20\x6c\xec\xf3\x3f\x7d\x42\xf5\x3f\x4c\xca\x0f\x3a\x1a\x42\x08\x83\xbb\x9b\xb8\xd5\xc8\xa7\xfb\xcf\xf1\xec\x20\xb6\xba\x3f\xa6\x0d\xef\x28\x2b\x5d\x6e\x40\xea\xf5\xfc\x18\x8e\x0a\x65\x3f\x31\xe8\x34\xad\x1d\x3d\xd0\x3f\x14\x48\xc4\x8c\xd6\x9b\x57\xb6\xf2\xbc\x4e\x8d\x3b\x63\xdd\x1c\xb3\xb0\x35\x99\x7b\xd7\x90\x6e\xc4\xdc\x06\xa3\x1c\x73\xa3\xa8\x23\xea\x62\x37\xe6\x6b\xdb\xd5\x80\x2e\x76\xa0\xfe\x85\xec\x94\x22\xe5\x99\x84\xaa\xbb\x43\xab\x07\xa6\x34\x09\xaf\x65\x88\xf1\x8d\x3f\x0d\xec\x5b\xed\x34\xa0\xef\x29\x98\xef\x1e\x88\xb8\x94\xc9\xe1\xa2\xc4\x4b\x4c\x9b\xf9\xa0\x30\xb7\xa7\xfe\xda\xf0\x67\xb3\xe5\xc5\x83\xd4\xd8\x7f\x89\x17\xc5\x48\xf1\x3a\x5e\xfc\x77\x5b\x26\x50\x37\x2f\xb6\xf7\xeb\x78\xf1\xb1\x00\x20\x0c\x12\x02\x2a\xc3\x78\x59\x4c\xc7\x4b\x43\x85\x54\x38\xe2\xf2\x68\xbc\x8e\x6c\x57\x04\x80\x59\xf5\xd7\x71\x6a\x14\x90\x39\xc4\x2b\xad\x2a\xf9\x8a\x57\xd2\x14\x6a\x9d\x5e\xa7\x94\x14\x9a\xf6\x35\x2b\xdc\x53\xca\x8f\x0f\x87\x21\x46\x31\x6b\xdd\x53\x4a\x1d\x07\xbe\x4a\x8d\x86\x81\x07\xaa\xe4\xdf\xd2\xd8\x20\x93\x8b\xd7\xe0\xa8\x08\x1b\x51\x52\x83\x53\xe6\xf5\x15\xfa\x9c\xaf\x98\x25\xf6\x65\xd2\x88\xc8\xf9\xe0\xe6\x15\xf6\xe3\xe3\xe4\xdd\x39\xf9\x77\x6a\x18\xeb\x61\x44\x35\x98\x17\x1c\x81\x55\x42\x3b\xb0\x52\xb6\xa9\x32\xc8\x7b\x10\x64\xad\x94\xd2\xf4\x29\xa5\x5b\x79\x4a\xf5\x7d\x2b\xa1\xed\x4c\x33\xfa\xfb\xcb\x2d\x81\x07\xc5\x41\x9a\x2e\x1d\x25\x92\xea\xd6\x07\x39\x8e\xa1\x80\xb4\x57\x8a\x28\xcb\x7b\x58\xa9\xe8\x1f\x76\x53\x76\x3a\x7b\xcc\x91\xe6\x91\x0e\x8c\x3b\x8a\x46\x80\xe9\x6f\x1a\x52\xbe\x22\x34\x27\xea\x19\x86\xb0\x60\x3f\x32\x7f\xe5\xb8\xb8\xff\x71\x8d\xa1\xf1\xe7\xe3\xcc\x1f\x67\x56\x45\x5d\x79\x28\xea\xca\xcb\x8e\x3d\xd2\xac\x12\xdc\x6c\x2b\x93\xbc\x60\xf6\x87\x78\x50\xb7\x57\x60\x90\x17\x00\x84\xa8\x20\xf3\x36\xdd\xa6\x48\xd5\x8a\xe4\xe5\x93\x7c\x5a\xc6\x76\x8b\xf0\xee\x33\x46\xfb\xed\xa4\x51\x50\x6e\x90\xb1\x7b\x21\xed\x27\xaf\x54\x83\x93\x75\x07\x23\xe3\x19\xbe\x0c\x9d\x4b\x30\x79\x57\x39\xaf\x9b\xe5\x65\xed\x7b\xa9\x84\x70\x8e\x01\x5f\xf9\xf2\xbc\xda\xa8\x9f\x57\x99\xe0\xf0\x85\xf3\x1b\xe2\x56\xac\x4e\x21\x83\x10\x54\xa7\x47\x11\xf2\x0a\xdd\x13\x30\x86\xa5\x17\x1f\x7d\x97\x3c\xe3\x60\x5e\x46\x99\xf9\xa6\x9c\xbc\x21\x96\x95\x11\xc8\xba\x12\xb7\x41\x45\xcc\x94\x9e\x91\x14\xb3\x6a\x38\xec\xdc\x99\xfd\x4f\xd6\x19\x79\xc3\x8b\x7c\x79\xf3\xb0\x90\xb1\x25\x6f\x6c\x4e\x79\x2b\xc2\x43\x31\x5d\xfb\xd5\xae\x4f\xf7\x2d\xd6\x41\x7e\x9b\x5e\x92\xcc\xe1\x33\x60\xce\x01\xb0\x35\x1e\x09\xe9\x36\xbc\xa8\x34\xd1\xf0\x13\xf1\x77\xc9\xff\xe1\x79\x6e\x33\x87\xb4\x04\x97\x10\x01\x84\xa7\x81\xb0\xf1\xdf\x45\x9a\x5e\x0d\xe5\xa5\x80\xed\x53\xa1\x19\x62\xd4\x48\x15\x6b\x10\x2c\x3e\x48\x53\x6d\xdc\x17\x8a\x2b\x7b\x41\xdf\x78\xc8\x21\xf7\x7f\x84\x87\xeb\x81\x30\x3a\xcd\x80\x3e\x4d\x67\x6f\xfe\xf4\x31\xb3\x14\x31\x16\x67\x48\x9b\xb3\xcd\x34\xa8\xf3\xe8\x16\x34\x88\xe8\x16\x34\x9d\xe8\xfa\xad\xf1\x4c\xfd\xc7\x36\xdf\xe7\x59\x1d\x32\x09\x1e\x3e\xca\x5d\x2b\x72\xb6\xcb\x9f\x79\xd6\x7e\x2c\x84\x8e\x1c\x06\x31\x5a\xe8\xa2\x08\x12\xbf\x1c\x3d\x3a\xb4\x18\x24\x17\x19\xb1\x73\xf4\xff\xe9\x5c\x93\xa3\x2c\x93\x96\x9d\x88\x35\x13\xf5\xb0\x21\x5e\x12\x46\x2e\xd4\xe5\x8d\x68\x85\xd1\x44\xbd\x44\x08\x52\x60\xb0\x4c\x05\xf1\xd5\x53\xe0\x18\xb0\xa3\x2a\xf0\x56\x63\xef\xa9\x0b\xcf\x01\x71\xb2\xc8\xc7\xed\x87\xad\xcc\x1d\xe8\x65\x31\x64\xfe\xff\x8f\xc7\xa7\x07\xfd\xdf\x35\x9a\xc6\x7f\x6f\x95\x13\xa4\xb3\x30\xd9\x54\x24\x3f\xca\x33\xd8\x79\x63\x42\xca\x36\x88\xb3\x01\x0d\x03\xf9\xf9\x0f\xc1\x7c\xa2\x84\x50\xe9\x94\x85\x89\xf9\x19\x78\x3e\x47\x70\xa2\x81\x31\x33\x46\x1d\x15\x63\xf4\x49\x0d\x8e\xc0\xd0\x10\x4a\x1f\x1e\x55\x86\x07\xfb\x7b\xda\x62\x57\xcc\xa1\x38\x17\x85\x1c\xae\x80\x7e\x67\x27\x3d\xd8\xf0\x9d\x91\x0f\x6e\x82\xe7\x18\x75\x94\x81\x0e\x30\x56\x64\xbc\x1a\xc4\x29\x40\xbd\xaf\x81\x50\x97\x3d\xe0\x9b\xfb\x02\x82\x34\x5c\x94\x8d\x4a\x39\x6c\x9b\x3f\xc7\x9c\x1c\x3b\x56\xcc\x96\x44\x68\xce\xa1\x1e\x8a\x1c\x9b\x2f\x9b\x57\xb7\xaa\xc5\x54\x01\x87\xb7\xc8\x3f\xb7\x94\x5b\x42\x68\x25\xb0\x41\xdf\xee\xc0\x62\x9b\x28\x29\x4a\xab\x8e\xe6\xc4\xea\x37\x35\x5c\xb6\x10\x48\xc5\x46\x40\x5d\x7d\x06\xa9\x7d\x50\x2f\x57\x95\xe9\x50\x82\x59\xba\x5f\x17\xd5\x18\x11\xea\x45\x92\x1c\x6f\xd5\xb7\x2e\xc8\xa7\xa6\x43\x74\xbc\xa1\x1d\xc3\x1b\xac\x9a\xfb\xdb\x0e\xea\x0a\x8c\x6e\x55\x60\x7d\xe4\x5e\xb2\x84\xbc\xb2\x20\x6e\xdc\xf3\xc1\x20\x18\xef\xe5\x6e\x3b\x5f\x1f\xcb\xf1\x9e\x14\x4b\x81\xc2\x0b\x64\x7f\x28\x16\xc4\xfa\x20\xc2\x59\x2d\x84\x9c\x9a\x42\x7f\xbc\xca\xad\xd5\x72\x7b\x6b\x17\xf7\xb8\x2d\x93\xe3\xbd\xb9\xe8\x14\xd8\xb0\x70\x53\x60\x25\xa0\xbb\xb2\x93\x38\x8a\x9b\xe6\x6a\xf3\x3d\x09\x9b\x66\x6d\xcb\x49\x4b\x44\x99\x1d\x43\x1a\xfb\x38\x9b\x23\xc4\x9d\x26\xc8\x48\x4d\x59\x96\x40\x3d\x78\xd7\x21\x5d\x84\xde\x46\x42\xcd\x67\xb1\x44\x1e\x58\xf2\xda\xd9\x47\x9a\x56\x76\x87\x9f\x87\xd6\x5b\x15\x7b\x18\xea\xae\x6e\x9c\xd7\xc8\xf1\x1e\x1a\x3c\x84\xb8\x96\xe8\x73\xb3\x48\xd3\xcd\x12\x3b\xf9\xef\x34\x55\x5d\xf3\x12\x70\x73\xda\xc4\xcf\xdd\x6d\x5a\x1f\x84\x69\x60\xcd\xba\x5e\xa9\x50\xa4\xde\x02\xf4\xe6\x0a\x8a\x19\xea\x6c\x04\x26\xaf\x21\x65\xb3\x29\xf9\x1c\x95\x89\xd3\x9d\xd2\x00\x48\xb5\x9b\x23\x3f\x65\x3e\x39\xde\x65\xbf\xdb\xce\x50\x2b\x9e\x99\x2e\x96\xe0\xea\xb5\xca\xeb\xe9\x34\x55\xb5\xdd\xbd\x68\xeb\x15\xdf\xdd\xe9\x15\xdf\x99\x32\x35\x52\x7a\xd0\x1f\x44\x3d\x7d\xaa\x10\x4d\x0b\xd9\xd5\x87\x29\xa1\x5a\x3c\x41\xa5\x95\x97\x49\x49\xf0\xd4\x27\xbf\xe9\x43\x6d\x8a\x5b\x71\x3c\x41\xfd\x68\xb6\xf6\x3a\x9b\xc1\x66\xd0\xbe\x5b\x5f\x1c\x2f\xa2\xe5\x78\x5f\xa9\xba\x76\x15\x4b\xfb\x55\xec\x06\x18\x08\xad\xa5\x2f\xa7\xf7\xa7\x05\x07\xdc\x61\x33\x74\xde\xa5\xe4\x18\x56\xab\xae\xaf\x1c\x9b\x0d\x52\x7c\xbb\x85\x80\x32\xfb\x7c\x60\x8f\x26\x1f\x64\xac\x0f\x47\x1d\xdf\xf9\xe0\x0d\xe1\x7c\xbc\x60\xcd\xbf\xad\xa8\x1e\x8e\x7c\x78\x8c\xb9\x07\x58\xb8\xe3\x8d\x33\x0d\xf9\x18\x7b\x8a\x1d\x33\xd7\x07\xae\x68\x4d\x4f\xa2\xf6\xe7\x74\xf3\x71\xe2\xcf\xf1\x59\x42\x41\x09\x21\x9f\x68\x59\xc7\x89\xe2\xe7\x0d\x01\x71\xce\x4c\xa7\x05\x12\xd8\x9c\x96\x5d\x1c\xa7\x15\x7f\x94\x36\x03\x74\xe7\xeb\x74\xed\x3c\xa7\x35\x7f\x92\x53\x4a\x2b\xf7\xb4\x59\x48\x98\x64\x13\x64\x4d\x39\x6d\x68\x18\x29\x70\xb6\xec\x9b\x05\x39\x21\x84\x86\x3f\x2c\x88\x31\x86\x25\xf7\x49\xb4\xa8\xe1\xa1\xe4\x56\xe0\x1b\x93\xa8\xee\xd5\x88\x19\x61\x44\x0f\xcd\x94\x39\xc9\x5a\x95\x09\xa6\xd0\x94\xbd\x2a\xdd\xdc\x8a\xcf\x38\x09\x87\xb5\x69\xce\x78\x00\x2c\xe7\x77\x73\xb0\xc3\x7c\x0f\x26\x2f\x47\x4a\x1d\x73\x2e\x2a\xb6\xcc\x59\x95\x72\x64\xec\x67\xcb\x3f\x36\x2f\x73\xfe\x92\xaf\x27\x95\xbe\x91\xbd\x83\x5a\x54\x98\x18\x1e\xce\xed\xc2\x27\x94\x10\xce\x6d\xd0\xfc\xcf\xe1\x6b\x3f\x39\x94\x4f\x9c\x11\xc9\x27\xd7\x21\xa7\x30\x34\xe8\xbc\x27\xc5\x26\xf9\x3c\x1d\xff\x35\xf8\x53\x6d\xd1\x4a\xc4\xe0\x3e\x6a\x3e\x31\x75\x9d\xe7\xcd\x83\x1d\x82\xec\x0b\xd6\x24\xe7\xc5\x1d\x44\x80\x89\x45\x3d\xc7\x73\x1d\x8a\xdb\xdd\xe1\xef\xd3\xd5\x6f\x77\x35\xac\xd9\x04\xcf\x49\xaf\x38\x06\xf0\xf2\xf2\x0e\xfa\x0a\x73\x59\x3c\xd5\x6e\x1a\x1a\xa1\xc2\x22\x51\xc7\x64\x26\xd7\x5a\x96\x8b\x27\x50\x72\x41\x93\x2e\xea\x92\x9d\x1f\x0b\xcb\xf2\xb9\x40\x05\xb7\x9e\x4b\xcb\xe5\x53\x79\x98\xd2\x79\xf6\xf2\xc9\x82\xef\x6d\x77\x6a\xb8\xe5\xdc\x6f\x76\x7d\xa2\xd4\x51\x2f\x13\x92\xbf\x0f\x32\xdb\xcd\x2a\x25\xa9\x91\x8f\x04\x62\xb0\x95\x47\x29\xa6\x08\x2d\x17\x55\xfb\x27\x80\x02\x1f\xb6\xa3\xa2\x8d\xbe\x90\x25\x28\xcd\xe9\x59\x20\x81\xec\x95\xa5\x2d\x57\x24\xf7\x5b\xf8\x3e\x01\xcd\x29\x1f\x4d\x03\x54\x99\x12\xd0\xf8\x64\x4d\xb8\xb4\x37\x8e\x19\x08\x50\xa6\xbb\xa8\x7a\x09\x69\xce\x4e\xbf\x91\x27\x2e\x2d\x78\xb3\x60\x0e\x4c\x4f\x43\x2e\x2d\xf6\xd2\x6d\x87\xac\xe5\x31\x6a\x94\x96\x23\x47\x99\xd2\x0a\xb6\x47\x15\xb0\x5d\x10\x5f\x1a\x66\x71\xb7\x66\xb8\x70\x07\x41\x90\x85\x29\xed\x53\x6a\x45\xa8\x8a\x17\x65\x79\xaf\x29\x57\xec\x3c\xe5\x8a\xe1\xa9\x86\x16\xde\x1f\xe3\x92\x13\x00\xb5\xa2\x08\x2c\x66\x57\x8c\x4d\xad\x63\x9c\xac\x36\x4e\x72\xc5\x50\xab\xd7\xbb\x3c\x0a\x6d\xbf\x97\x24\x9a\xb1\xa2\xf0\xfc\x40\x49\xa5\x50\x08\x76\xa8\x3e\x11\xcc\xa0\x19\x37\x7a\x1e\xe3\x6e\xee\xb5\xe6\x03\xab\x84\xda\xdc\xa2\x76\xa8\xb8\xda\x9c\x2c\xb4\x1b\xd7\x5f\xb5\xbd\xdc\x46\x33\xff\xa8\xc9\x60\x5e\xc5\xa9\x22\xaf\x5c\x1b\xcf\x07\x00\x7c\x39\x02\x6c\xd5\x03\x1c\xc7\x95\x34\x67\x6d\xc9\xe9\x1d\x92\x9e\x0b\x20\xdd\x8a\x25\x40\x39\x46\x8c\xb8\xca\x2f\x52\x61\xd6\xad\x88\x61\xf8\x9f\xae\x71\x27\xd7\xf6\x76\xbc\x2f\x96\x6b\xdb\x8a\x5b\x2f\x4e\x63\xb5\xed\xd7\x31\x9a\x67\x6d\x2c\x09\x0e\xd5\x62\x58\x82\xc2\x71\x16\xaf\x7a\x0f\x99\x17\xae\xcc\x6a\x8b\x7e\x0b\x2d\xd8\x13\xcf\x62\x11\x0e\x3c\xd2\x20\xf0\xd2\xdc\x71\x3d\x2a\x26\x46\x03\x80\x12\xac\x24\x4d\xb1\x7e\x87\x56\x57\xed\x08\xb2\x3a\x4b\xf6\x96\xd5\x1f\x9b\xa6\x36\xd5\x1a\x64\x6d\x29\x37\x2d\xeb\xb9\xb9\xb5\xe2\x57\x7f\x9c\x13\x79\x70\x68\x60\x23\x87\xff\x6b\x1a\x03\x6a\x2b\x7c\xc9\x31\xd7\x56\x97\x12\xce\xa6\xf0\x6a\x5e\x05\x4e\xb5\xd5\xb0\x25\x75\x73\x71\x27\xdc\x50\x4f\xfe\x18\x74\x89\xb5\x02\x2c\x56\xea\x12\x83\x72\x88\x2c\xde\x87\x0e\xad\x3c\x29\xd0\xd2\xf3\x8c\xb9\xb9\x23\x6f\xb8\xda\x0e\xa8\xdd\x42\xe0\xd8\xf3\xcf\x0d\xbb\xea\x62\x54\x35\x9c\x9a\x6c\x83\x7d\x35\xdb\x1c\xc6\xae\xf6\xf2\xd8\x2d\xca\xed\x95\x03\x65\x0c\xda\x74\xf1\x50\x4b\x6e\x38\xd1\x94\xad\x1d\xe9\xeb\x2b\x19\xcf\xae\x34\xb5\xe9\x0f\x57\x29\x61\x31\x90\x40\x9e\x81\xa1\x95\x9e\xd0\x44\xbf\xa0\x2c\x9b\x94\x50\xda\xdc\x08\x79\x1e\x46\xe9\xb6\x6b\x22\xb8\x3a\x11\xe3\x05\xd3\x04\x19\x36\x34\xc2\x34\x0b\xb6\xcf\xb6\x73\xad\x6f\x07\x40\x73\xdb\x2f\x15\x5b\x01\xa9\x2b\xbe\xc1\x93\x2d\xe5\xd1\x69\xee\xa3\x9e\xdb\x15\xf4\xd9\x11\xa6\xba\x16\x2f\xcc\xd9\xda\xb6\xdb\xc8\x52\x46\xc1\xe6\x42\x93\x93\x5a\x3b\xf3\x55\x4a\x10\x54\x77\x8f\x51\xa0\xe9\x71\xab\xdc\xd8\x00\xd0\x02\xac\xae\x35\x28\x95\x33\xf2\x04\x68\x6e\xac\x32\xcc\xbc\x17\x12\x78\xad\x9c\x0b\x2f\x19\x5e\x2f\x15\x70\x40\xad\xae\xfc\x2b\x3f\x78\x45\x1d\xa5\x2e\xaa\x06\xa7\xc9\x64\x5f\x69\x65\x8c\x02\x22\x4d\x7a\x1a\xea\xa6\xf2\x55\x5e\x99\xf3\x91\xb6\xd8\xab\x9c\xfa\x24\x83\x40\x95\x18\x5e\xb5\xaa\x30\xfa\xd2\x11\x55\x4c\x44\xc2\xdc\x7c\x23\xc6\x6f\x86\xff\x6d\xff\x3c\xf6\x2d\xa8\xef\x3e\x0a\x61\xf5\xf5\x3d\xeb\x93\xcf\xdf\xdf\xf9\xfb\xe3\xc4\x10\x7b\xa7\x86\xbb\xb9\xf9\xf7\xf7\x92\xe9\xcc\x01\xde\x1f\xe7\xf9\x71\x9e\xeb\xc7\x29\x3c\xeb\x19\x3f\xce\xf3\xf8\x38\xff\x7d\x9c\xe5\xe3\x2c\xce\x1d\xf2\x2f\x4b\x2a\xe1\x5a\x8b\x5b\x02\x5f\x59\x12\x54\x61\x8c\x87\x0d\x8d\x60\xcc\xa4\x7c\x07\xc5\xd0\x75\x28\xb2\x49\x17\x77\x14\x8a\xf3\x4b\xd0\x97\xe3\x41\xad\xa1\x07\xeb\xdf\x78\xce\xbc\x38\x1c\x90\x47\x8b\x53\x9c\xe1\xdd\xcb\x3c\x50\x10\x95\x4f\x0b\xce\x84\x0a\xe2\x3c\x54\x9c\x97\x91\x43\x5d\x36\xff\xd3\x1c\x91\xd9\xe4\xfe\x9a\x01\x29\x8e\x45\xc5\x99\x7a\x03\x4d\xc4\x53\xdb\x81\xd1\xea\x6f\xb3\xcd\x1e\x85\x93\x6d\x45\xca\x77\x58\xec\x97\xfc\x07\x5c\xcf\x80\xc9\x17\x5c\x0a\x85\x4e\x30\xa0\x17\x3c\x58\x24\xff\x25\x24\x96\x1d\xa8\xb8\x18\x9b\xf8\x61\xa1\x21\x44\x7e\x4f\x98\x1c\x8b\x9e\xc7\x2a\x38\x45\xc1\xc7\x56\x8b\x4b\x61\xdd\xcd\xd9\x27\xff\x3b\x5b\x2e\x04\x27\x92\xe2\x50\xea\x4c\x46\xf5\x79\xbd\x8f\xc0\x8a\x42\xf2\xd5\x8d\x1e\x6d\x84\x82\xf8\x05\x23\x88\x40\x1c\x9f\x29\x78\x81\x07\xae\x90\xc9\x2f\xd3\x81\x5f\xdc\x77\xe2\x3f\xbf\xfe\xb0\xdd\xdc\xa4\xee\xa9\x11\x83\x1a\x4d\xb7\x78\xf7\x92\x3e\xc6\x50\xbc\x5b\x16\x7f\xb6\x99\x52\x47\x8b\x30\x02\xd9\x94\x14\xaa\xc5\x19\xbb\x5e\x4d\xda\x48\x3f\x37\x34\x05\x72\x1d\x7d\xc6\x21\x5d\x27\x0a\xa3\x27\xc0\x08\x49\xcf\x12\x0a\xfc\x4c\xf9\x1b\x07\x0c\xc6\x57\xb3\x1a\x36\x3d\x2f\xcb\xbf\xcb\xe1\xb0\xb4\xc5\x4d\x25\x83\x3d\x32\x25\x8d\x3b\x53\xab\x06\xde\x59\x88\xe1\xf2\xe9\xc8\x6e\xb9\x17\xef\x56\x77\x80\x77\x07\x3c\xdb\xc8\xc9\xba\x86\x09\x17\xf3\xbb\xfa\x7f\x17\xb6\x45\x0d\xb7\x11\xee\xba\xfb\xe2\x2d\xad\x2b\xee\x4f\xf7\x4c\xad\xff\x5d\xb5\x0d\xea\x08\x49\x18\x8a\x29\xba\x6e\x93\x8b\x59\x14\xdf\xa1\xb2\xa3\x20\xb0\x13\x68\x54\x3e\x27\x3c\xc7\x77\x45\x7d\xe1\x44\x88\x2f\x5f\x5a\xa8\xa3\xd0\xcd\x42\xc3\xff\x0a\x96\xe8\xaf\xbc\xf4\xdc\x09\xd6\xa2\x11\xb6\x46\xd3\x35\x31\x7c\xc5\xbb\x77\xd7\xed\x0c\x22\xac\xee\x2b\x34\x23\x62\x30\xff\x4a\x4c\x0e\xcb\x31\x93\x31\x4c\xa1\xe0\x8d\x34\x25\xb6\xad\xb8\xaf\xe1\x72\xdb\x8a\x1f\x45\xa1\xd4\x54\xb3\x5b\x98\x6a\x70\x2b\x7e\xe4\x78\x2b\x43\x6c\x52\xbc\x8b\x9b\x87\x3a\x78\x81\xd1\x6f\xc3\x53\xc4\x51\x0c\x75\x14\xf3\xa8\xb2\x18\x65\x6a\xe9\x5f\xae\x3a\x7c\xb0\xbc\x64\x26\x1c\xe1\x1c\x2e\x6e\x6e\xca\xe3\xf1\x0a\x13\x8e\x0c\x46\xba\x1c\xb5\xd6\x15\xef\x12\x1e\xaa\x85\x88\x43\xa8\x94\xaf\xb4\x8c\xf4\x2b\xad\x4e\x65\x00\xb1\x16\x7c\x9e\xde\x95\x9e\xb2\x73\xd6\x7a\x0e\x7a\x1c\x21\x01\x29\xf3\x68\x0f\xf5\x3c\x8b\xdf\xed\x69\x04\xd2\xf9\x35\xbb\x2e\xf9\x4b\x3b\xd3\x69\x27\xda\x8a\x77\x45\x06\xca\x91\xb6\x52\xfc\xd4\xb6\xeb\xe2\x4b\x73\x61\x34\xc5\x5a\xfd\xf1\xd2\x42\x92\xe5\xcf\x48\x5c\xad\xd7\x48\x79\x6b\xf3\xa0\xf1\x95\xbf\x19\xf1\xcb\xa5\xcf\x72\x9d\x8d\xad\xf2\xe5\xca\xcb\x8d\x25\x7b\xf1\x2f\x1f\x83\x7f\x77\xf4\xc5\x12\x7a\xe1\xb6\x19\x4d\xb0\x77\x80\x7e\x1d\xcd\x4c\xc8\x77\x58\x42\xff\x5a\x5b\x8f\xd1\xdb\x72\xb4\xf8\x57\x60\x38\x31\x2f\x9f\x8e\xb9\x7f\x65\x88\x45\x05\x94\x92\x79\x39\x4c\x88\xdb\xba\xdb\xeb\xe2\x01\xaa\xe2\x17\x17\x97\x69\xac\x5c\xdc\x71\xba\xb0\x29\x4e\xd3\x43\x3f\xa0\xd7\xb0\x6a\xdf\x53\xc2\x5a\xeb\xe2\x52\xd2\x68\x16\x27\xf3\x3d\x57\x25\xa0\xc6\x50\xb6\xb8\xe9\x61\x03\x21\xaf\x1e\xb6\x5f\xad\xc3\x12\xde\x1d\x32\x18\x1f\xa5\x37\x3c\x88\xe1\x37\x41\xf3\x23\x90\x8e\x01\x44\x3a\xe7\x7b\xaa\xe2\x1f\x2a\x03\x0c\xcd\xdf\x73\xd1\x28\x65\x4d\x94\x0c\xb7\x49\x07\xaa\x58\xf4\x9e\xbd\xec\xee\x38\x83\xbd\xd3\x22\x74\x88\xab\x15\xef\xb2\x67\x1d\xae\x96\x90\x16\x46\x6d\xa7\x4d\x0a\x18\x22\xfb\x8a\xab\x0d\xcb\x3d\x88\x31\x56\x77\xbe\x29\x4d\x94\xa6\x5e\x88\x30\xec\xe7\x32\x0d\xe5\x51\x9f\x41\x6d\xeb\x14\x6e\x85\x58\xdf\x10\xb9\x1a\x10\xe6\x67\x8e\xf6\x2b\x8c\x6d\xc9\xe2\x97\xe8\xc2\x61\xd5\x20\x98\x8d\x79\x89\xb2\xb0\x7a\x14\x55\xf4\x3c\x1e\x2e\x90\x27\xe1\x05\xe5\x6a\x0d\x26\x2f\x8f\xa6\x90\x17\x2b\x9d\x3c\x8f\x90\x4b\xde\xc6\x54\xb2\xe8\xca\x0c\x28\x2d\x61\x34\x99\x1c\xa3\x3b\x87\x24\x83\x36\x63\xd8\x57\x4a\x0b\x4f\x88\xad\xfb\xeb\xa3\xe4\x92\x63\x77\x90\xa7\xd6\x95\xf9\xae\xb4\xa1\xe9\xc3\xf1\x72\x6d\x20\x2b\x95\x7c\xbc\xfa\xfe\x28\xc9\xab\x4e\xd4\x41\x36\x0e\xd0\x77\x2f\xc2\xea\x2e\xb3\xa7\xfe\xd0\x36\x29\x9f\xea\xe3\x6b\x88\x7f\x48\x2b\x97\xe3\x8c\x7e\x6a\x43\xa4\x27\x97\x63\xee\x20\xf5\x8c\xf4\x31\xd4\x4e\x16\x5f\x8f\x10\xa7\x09\x4e\xc8\x2b\x4e\x54\x71\xab\xef\x7d\x02\xe2\xf9\x38\xb2\x99\xb0\x35\x39\xc5\x98\xa6\x79\x00\x54\x99\xe1\xc3\x63\xe9\x7b\xc1\x6a\x31\xa5\x21\x2d\x73\x35\x26\x2a\xfc\xb1\x5c\xa6\xd5\x1f\x73\x7d\xa4\xf5\x59\x98\x69\x0d\x33\x71\x2d\x7f\x28\x6b\x14\xe9\xed\xe7\x50\xdf\x8f\x04\xbc\xc3\xf6\x68\x1a\x93\xd4\x4a\xc9\x89\x9b\x10\x3a\x97\xa3\x37\xd5\xf4\x9e\x53\xbf\xf9\xa9\xb9\xa4\xad\xb8\x36\xf7\x67\xbc\x87\x62\xe8\xf7\x61\xff\x6b\x6d\x20\xa5\xb9\xe9\xa7\x7f\x97\xaf\x96\x8e\xea\x97\x47\x32\xeb\x48\x62\x0d\xab\x7f\x7e\xcb\x31\xac\x0f\x0b\xbb\xa4\x36\xa8\x51\x3a\x55\x26\xdf\x29\xb4\x56\x1e\x25\x59\xaf\xd8\xdc\x1f\x7a\xf8\xbd\x0e\x3f\xe1\xb9\x49\x34\x7f\x9c\x8f\xec\x8b\x45\x2e\x2e\xf9\x51\x7c\x94\xa4\xa4\x89\x9a\x4a\xbe\x8d\xcc\xab\xe4\x50\x71\x78\x5d\xb3\xaf\x12\xbe\x46\xcf\x48\xd4\x90\x6b\xf0\xcb\x97\x6a\x91\x7d\x3d\x22\x93\x2f\xee\x0f\x3d\x53\xf7\x14\xe6\x57\x98\x0a\x24\xf7\x1e\x7b\x6a\xc8\x25\xcf\xad\x74\x08\xe1\x3a\x35\x5a\xbf\x70\x33\xd8\xd2\xea\x81\x97\x12\x56\x2b\xce\x22\xbc\xc8\xe4\xf5\x3a\x27\xaf\x57\xc2\x13\xd6\x1d\xda\x98\x07\xed\x66\xea\xa7\xf8\x35\xb4\x6e\xef\x39\x5c\x95\xd0\xd7\xc5\x5e\xd8\xd4\x30\x78\xde\x89\x6b\x5d\x86\x09\x6e\xf6\x52\xf7\xa5\x6a\x78\x57\xe1\x1d\x99\xe2\x97\x7b\x89\x90\xfb\x14\xc6\xb0\x3a\x9e\x75\x05\x1a\x45\xb1\xba\xf2\x69\xc9\x5f\x1d\x56\xf9\x7e\x9d\xbe\xea\xaa\x5c\x10\xa3\xc0\x69\x7f\x18\x7a\x08\x19\x98\x87\xed\x8b\x5f\xbd\xd3\x92\x17\xa4\x2c\xcb\xea\xb1\x19\x2f\xe0\xa5\xeb\x01\x22\x75\xf8\xe2\x82\x61\xf5\x2f\x8b\xc3\xdb\xa3\x40\xc4\xbd\xbc\x57\xf0\x08\xdd\x51\x9f\x53\x57\x99\x22\x47\xef\x12\x72\x9a\x24\x56\xbc\xb1\x38\x51\xa3\xeb\xac\xfe\xed\x20\xc7\x02\xf4\xae\xa3\xa5\x23\x6d\x04\x80\xd5\x60\x1f\xe6\x57\xf0\x90\xc6\x51\x09\x35\x26\xd4\xd5\x6f\x3e\x79\xeb\xd3\xab\xe7\x0b\x8d\x82\xa2\x16\xa2\xc7\xca\xc3\x4f\xb8\x7b\x8d\xe1\xe5\xcb\x83\x4e\xfe\x49\xfe\xbb\x46\xb4\x51\x8a\xcb\x70\x74\x0a\xae\x51\x3e\x87\x1d\xe6\x25\x91\xe6\xa5\xe7\xea\xf9\x20\xbd\xa6\x43\x9f\xd0\x33\x6a\x4c\x70\xab\x87\xb0\x7b\x82\xd9\xe2\x04\x2f\x33\x07\x38\x4d\x62\x42\x4d\xcd\x79\xf5\x4f\xaa\x2e\x3a\x9a\x08\x2c\x61\xaa\xeb\xea\x4b\x6f\x23\x82\xc7\x07\xed\x9d\x1a\x79\x6d\xc1\xee\xd9\x3d\x48\x6b\xba\xb4\x99\xbc\xcb\x58\x3a\x93\x65\x6e\x10\xf3\x22\x44\xa8\x90\x2c\x0d\xcd\xcf\xce\xc6\x40\xb5\x42\xed\xf9\x23\x0a\x5a\x98\xc7\x2f\x1f\xf3\x39\xc2\xfc\xca\xdd\x61\x70\x9b\x9e\xde\x2a\x7c\x08\xb4\xb3\x58\xa0\x62\x67\x0c\x84\xec\x21\xcc\xad\x39\x2c\xed\xe9\x6b\xfe\x32\x71\x16\x6b\xb0\xb9\x76\x0d\x5e\x83\x79\xbf\xb1\x24\x56\x9f\xd3\xcc\xb8\x86\x4f\x67\x71\x4d\x8c\xde\x1a\x20\xa3\x18\xc5\x23\xf4\x28\x49\xbd\x4f\x2f\xe8\x8c\xf9\x70\x13\xd4\xaa\x0a\x65\x0e\xac\xf8\x91\xa4\xfa\x58\xac\x0b\xfd\x5c\xa8\x8a\x4d\xb5\xd6\x10\xea\xcc\xbf\x08\xb9\xbb\xa2\x83\x5b\xa8\x13\x1b\x2c\x14\xa7\xac\x27\x35\x7b\xcd\xd7\x8c\x8b\xdb\xfc\xf3\x6b\xa9\x23\xa8\x2f\x5f\x46\x12\x72\xef\x72\x41\x1a\xee\xa3\x01\x0c\x9b\x9e\xc1\xfe\xb4\x17\xa8\xad\xb8\xc5\xc2\xdd\xae\x50\x07\xae\x16\x37\xdf\x01\x05\x3c\x42\xad\x5c\x8e\xae\xa1\xaa\xda\x35\x60\x7d\xe8\x7e\xe0\xf1\x65\x4c\x95\x42\x8d\xeb\xbf\x46\x5b\xd2\xcf\x3c\x82\x3e\x73\x1d\x6c\x20\xe9\x30\xe5\xe9\xbc\x9a\x1b\x41\x5c\xcd\x3d\xbf\x59\x6a\xa7\x09\x72\x95\x84\xb7\x50\xdf\x6e\x99\xad\x72\x9c\x5a\x4d\x6d\xb9\xcc\x54\x19\xf1\x3f\xd8\x88\x4e\xf7\x22\x6d\x25\x2c\xad\xe3\x51\x72\x78\xfe\xc1\x46\xb0\xf0\x35\x97\xc4\x57\xe8\x85\xf7\xa5\xaf\x9c\x11\x4f\x4e\x72\xe9\x5e\x05\xf6\x62\x4b\x38\x2a\x0c\x98\xf1\x90\xb1\xe6\x38\x4b\x45\x5b\x74\xf9\xd1\x0e\xf2\xdc\x06\xf2\xfc\x21\x99\xa5\x70\xaa\xdd\xf6\x7a\xb5\x0e\x34\x9d\xc5\xbd\x9b\x82\x6f\xb3\xc2\xd6\x95\x00\x93\x6b\x0b\xb4\x09\xf3\x7a\xac\x3b\xd6\xab\x7e\xc2\xbc\x93\x5e\xfd\x14\x9e\xa3\x47\x39\x78\x11\x99\x16\xbb\x2f\xff\xb6\x29\xd0\xbf\xa9\xc5\xa7\xf8\x69\x1f\xc1\xfb\x18\xb6\x69\x3d\x48\x72\x8c\x56\x3e\x3e\xba\x83\x91\x1a\xd1\xe1\xd2\x12\xce\xf1\xf5\x78\xb9\x52\x5c\xad\x56\xd0\xfe\x78\x65\x7b\xc6\x58\x28\x08\xfe\xc5\x4c\x36\x2d\xf9\x23\x0f\xdf\x78\x8d\x47\x61\xcc\xb7\xf7\x13\x9e\xec\x47\x78\xe7\xe4\xd7\xd2\x94\x46\x03\xf5\x69\x1a\x41\x7c\xc2\x00\xa1\x01\xa5\x3f\x23\x84\xcc\x94\xee\xcb\x82\x58\x73\xa9\xf3\x27\x21\xf5\x93\x99\xef\xb9\x41\xf9\xf4\xdf\x94\xac\x14\x65\x0c\x9b\x48\x61\xaf\x86\x4f\x25\xe7\xef\x43\xe4\xe6\x53\xc9\x31\x0e\xaa\xb9\x30\x53\x14\xc7\x59\x48\xed\x29\x9d\xf3\x38\x3a\x1b\x1c\x27\x4b\xac\x20\xad\x94\x79\xc1\x51\x80\xac\x20\x46\x85\xa5\xc7\x84\xe6\xcf\xb0\xfa\x43\x5b\xd6\xbf\xcb\xcd\x02\x0d\xff\xef\x0a\xc3\x61\x17\x59\xfa\x69\x1e\xf0\xd3\x70\xe1\xeb\xe2\x4e\xc6\x5d\x2b\x47\x28\x5f\x2b\xb7\x7e\x49\xe0\x08\x80\x9f\xb0\xf9\x6c\xbe\x58\x77\xf6\x5f\xee\x9c\x44\x0c\x46\x6a\x35\xd9\x53\x2e\x02\x87\x8c\xc3\x7f\xe9\x98\xa4\x82\x35\xff\x33\x35\x88\x1f\xf7\x68\xcd\x20\xb5\x34\x7f\x26\xee\xd4\xff\xcc\xb2\x1d\xff\x33\x2d\x9b\xfd\x8f\x30\xe9\x9d\xe8\xcf\x1f\x19\xa1\x69\xfb\x99\x1b\xe7\xcf\xee\x86\x68\xc3\xff\xec\x41\xf9\x64\x85\xcf\x0f\x16\xc0\x24\x9a\xf7\x3f\xa7\x4b\x23\x4e\xbc\xe5\xae\x15\x41\xa2\x4d\xdf\xa6\x11\xe1\x07\xcf\x4e\x19\x3f\x08\xb2\x76\x58\xc2\x14\x3c\xde\xc7\xeb\x41\x86\x32\x87\x38\x34\x1e\x90\xcc\x53\x4a\xa6\x59\x05\xd4\x88\xca\xf6\x85\x41\x4c\x3c\xa4\xff\x69\x3d\xa2\x16\xd2\x54\x35\x0d\x0a\x84\x06\x4f\xe2\x7f\xb0\x0e\xd5\xef\x90\x0b\xbf\xdd\x4b\x8d\x32\x0d\x8c\x46\xb2\xe4\xde\x3a\x1d\xbf\x9d\x8a\xd8\xed\x20\x8b\xa0\x23\xf4\x27\xea\x85\xfc\x32\xfb\x2f\xd5\x15\x5d\x64\xe9\xc0\x76\x63\xc3\xa6\x98\x9a\xad\xb7\x5f\xae\x34\xd6\x54\x6f\x5f\x26\x86\x0d\xd4\x18\x38\x27\x21\x08\x60\x0b\x5d\xd4\xfb\xf6\xc5\xf2\xa8\x70\x0e\xb2\x8c\x79\x1b\x54\x51\xd4\xe6\x98\xda\x43\xd8\xf8\x96\x1e\xa4\xc2\xfd\xb7\xbf\x56\x3d\xfc\x52\xfc\x53\xda\x62\xd4\x60\x25\x61\xd3\x47\xaa\x77\x9f\x83\xde\xe1\x47\x0d\xf3\x1a\x7b\x59\xf5\xc5\xe2\x3b\x97\x6d\x0e\x2b\x4f\x92\x1b\x21\x26\x69\xcc\x3b\x3f\xca\x6d\xb4\x8d\x77\x71\xa9\xaf\x5a\xdf\xc5\x5d\x2b\x81\xaf\xbc\x7c\x2a\x38\xf8\xb4\x9a\xa4\xec\x7d\x45\x49\x65\x4f\xf1\x35\x1a\xd0\xfb\x2a\x7a\x9d\xb5\xf8\xad\x0f\x92\x5c\xb7\x99\x9b\x2d\x94\x68\xb2\xe7\x2d\x4d\x95\x67\x37\xa5\x88\xba\x18\x40\x0f\x3e\x99\xef\xa2\x97\x68\x0a\xd5\x62\xcf\x62\xdc\xad\x04\xdf\xe5\x22\x5b\xc9\xdf\x5c\x27\x6f\x97\xc3\x8d\x38\x3f\x11\x2c\xc7\xed\xb2\x38\xae\xd0\x77\x64\xb7\x2b\x70\x09\xbb\xbb\x24\x6b\x83\x93\xb8\xac\x36\x7b\xec\xae\x1c\x39\xcd\x02\x61\xda\xdc\x0a\xbf\x54\x88\xb3\xbb\xa6\xd2\x82\xdd\xbb\xa2\xab\xf7\xdd\xdb\x4a\x7d\x12\x5e\xee\xbe\x0e\xd1\x3a\x09\xcb\x13\x0f\xe7\xeb\x6a\xac\x9f\xd4\x2f\x7e\xb7\x52\xb0\xf3\x34\x44\x16\x8b\x70\x4a\xdc\x6a\xd9\x79\x22\x8c\x45\xbc\x5f\x07\x73\xbe\xeb\xb5\xd8\xe2\xc3\xea\x9d\x9a\xe9\x59\x9c\x61\x92\x66\x07\xbe\xd6\x28\x00\x7a\xa6\x87\xa3\x18\xaf\x79\xf5\x1b\x4c\x2e\x22\x60\x76\x77\x4c\x99\x0a\xc7\x11\xb6\xd9\xcf\xe9\x42\xef\x8e\xe1\x38\x95\x45\x22\xb2\x7a\x51\x6a\xf2\x34\x0d\x7c\xe1\x21\xe8\x15\x2a\x7f\xf5\x3e\x15\x20\xca\xc5\x63\x66\x20\x66\x69\x46\x98\xc5\xb1\x21\x2d\xb9\xcc\x93\x5d\x48\x4b\xa1\x42\x7c\xc1\xab\x7f\x4d\x72\xdd\x00\x59\xed\xb3\xc4\x68\xc5\xb2\x16\x62\x5e\xfc\x87\xb4\x3e\x9d\x3e\x17\x04\x21\xad\xd7\x32\x25\x79\x12\xab\x08\x11\xb7\x29\x9c\xab\x2a\x2b\x11\xd2\xb4\x5f\x1c\x66\xa1\x6f\x48\xef\xf8\xf8\x34\x6d\x09\x0b\x75\x0d\x87\xbb\x7b\x05\x9b\xcb\x8c\x1a\x4e\x77\x5f\xc2\xa8\x03\x69\x11\xca\x31\x28\xee\x0e\x1f\x67\x09\x42\x7a\x48\x1f\x42\x9a\x24\x0e\x21\xd5\x90\xae\xc9\x27\x9f\xd8\x7b\x50\x6c\xa5\x21\xd5\xe6\xa6\x4d\x3d\xa1\xc3\x1f\xba\xcc\xe5\x54\xaf\xc7\xc7\xb1\x1b\x8a\xdb\x8f\x31\x4c\x85\x38\x49\x1c\x70\x25\x72\x92\xd1\x93\xde\xf9\x60\x96\x91\x7d\xe9\x0a\x52\xbb\x38\xf0\x59\xfc\x5c\x60\xcd\x97\xaf\xe0\xbf\x95\x98\x98\xaa\x30\x8b\x63\x49\x64\xab\x46\x19\x33\xc2\xf6\x70\x4a\x0b\x2b\x88\xaf\x69\x4b\x38\xa4\xaf\x47\x15\xe1\x60\xc1\x44\xc5\xa9\xe9\x97\x32\x07\x5b\xeb\xd5\x4b\xa4\x56\x9c\x99\xf1\xff\x5d\xd3\xf1\x11\x10\xc5\xd0\x64\xab\x9b\x80\xff\x5d\x25\xd4\x49\x2c\xf2\x9f\xf0\x54\x73\x17\xf8\x94\x66\x5f\x36\x57\xa0\x3b\xa6\xf8\x7e\x40\x45\x88\xe8\x5e\x94\xe7\x46\xf7\x62\xc6\xa2\xca\x32\xa2\x36\x2a\x31\x6d\x9e\x89\x5d\x5c\x1a\xed\x0c\x93\x20\xe5\x03\xa2\xfb\x1e\xa7\x76\x7c\xb4\x5e\x3a\x35\xfa\x38\x98\x86\x28\x73\x10\x86\xc3\x49\x61\x84\x10\x63\x73\x9e\x12\xc2\xe9\xcb\x34\x65\xc5\xb0\x18\xd7\x16\xc3\xa1\x06\xd9\xc7\x18\xfe\x5d\xd3\xc6\x43\x0c\x38\xb5\x60\xd1\x86\xb9\x52\x63\x76\x6a\x6a\x9a\x75\xfb\x5f\x4c\x16\xc6\xf5\x73\x3d\xf6\x9c\x11\xd5\xe1\xfa\x90\x73\x38\xb4\x5b\xab\x42\x55\xf0\x22\x20\xd9\x8c\x7a\xb8\x14\x84\x15\xe9\xb1\x1e\xd0\x35\xa5\xdf\xec\xf8\xae\x60\xbd\x0e\x2d\x50\xa5\x1e\xb6\x16\x10\xb3\xb3\xff\x07\x72\x33\x52\xd0\xae\xd2\xbf\xfc\x04\x95\x8e\x1e\x54\xc2\x62\xed\xe5\xf0\xab\xce\x58\xc7\x43\xbc\x26\x54\x73\xd3\x18\xaa\x16\xcf\xcf\x6c\x19\x87\x3f\x72\x71\x69\xe5\xb4\x73\xf8\xa4\x2c\xe5\x31\xfa\xd0\x11\xd6\x64\x8c\xd0\x11\xd6\x7a\x1d\xba\x33\xa3\x6b\xdc\x23\x74\xb2\x74\x0b\x6b\x5d\x3c\x92\xdc\x05\x9d\x13\xa9\x8d\xee\xcf\x29\xe6\xa7\x85\xc6\x99\x82\x8d\xc4\x47\xa8\xc5\x53\x0f\xc4\x94\xa1\xa0\xd9\xd4\xc9\xf3\x08\x3f\x96\xa2\x1f\x6b\x23\x47\x5e\x1f\x1d\xe8\x80\x4a\x4f\x9a\xea\x78\x3a\xa0\x74\xe4\x94\x79\xc5\xb3\xa0\x7c\xac\xbd\x1e\xb9\xbc\xc2\x28\xd6\xfc\xe7\x2c\xc0\x71\xad\x2b\xcf\xc8\x1c\xd7\x14\xd8\xd5\x02\xb9\x96\xe4\xb7\x69\x70\x4c\x7e\xcb\xd3\xd0\x6e\x87\x18\x05\x4c\x33\x67\xea\x42\x83\xa4\x87\x2c\x7d\x7e\xf9\xb5\xaf\x68\xf2\xeb\xbf\xd1\x17\xf3\x2b\x4e\x3d\x21\xbf\x62\x4e\x9b\xee\x8f\xe4\x57\xf5\xa5\xb3\x6d\x4a\x0d\x97\x8f\x11\x3e\xbf\x5a\xe9\xb3\x75\x7e\x7d\xcd\x9d\x25\x2f\xd3\x4c\x9e\x97\x65\xde\xc3\x13\xf2\x34\x06\x4b\x89\x36\xf0\xc3\x59\x18\xcd\x53\xe9\x62\x78\xec\xd4\xe6\xf7\xfb\xb9\xd5\x2c\x16\x74\x37\x1d\x2e\xcb\xe7\x34\x88\x90\x60\xe3\xce\xa6\x8d\x55\xe0\xcc\x05\xe4\x73\xe6\x63\x94\x32\x3f\xdd\x91\x89\x2c\xf1\x48\x44\x2f\xb9\xb2\xb9\x79\x97\x35\x5f\x7a\xe8\xb9\xf8\xfc\xe5\x4b\xdb\x4b\xc6\xa4\x84\xd6\x7f\x4e\xfb\x3b\xc0\x8c\xe3\x74\xd3\xca\x47\x88\xa4\x67\xff\x4e\x57\x5a\x98\xc5\x4c\xb0\x98\x89\x34\xba\xd6\xe9\x6c\x79\x79\xba\x31\x15\x9d\xae\x4b\x67\x4e\xbf\x5e\x69\x61\x83\x3c\x7d\xf2\x13\xff\x38\xbf\x69\x2b\xd4\x14\xc9\x2c\x74\xe5\x4d\x75\x45\xb8\xf7\x2d\x08\x5a\x5f\xb4\x38\xa6\x5b\x30\xc5\xcf\x45\xac\x5b\x2d\x0a\x71\x1d\xc5\x34\xf8\x0c\x9b\xee\xb4\xf9\xf9\x74\x54\x3f\xc5\xeb\xfb\xa9\x7a\xf4\xfa\x47\x71\x16\x3b\x68\xa2\x8f\xb3\x08\xc8\xb3\x90\xe1\x2c\xd2\x48\xbc\xc1\x3c\xd9\x3f\x4f\xa9\x09\x17\xdb\x45\xa9\x42\x4c\x13\x3d\xdf\x92\xe4\x7d\x82\xe2\xcf\xeb\xc5\x6d\x8f\xf3\x7a\xcd\xf2\xca\xf3\xd2\xd2\xb8\xe6\x9d\x86\xf3\x3a\x1d\x4d\x61\x73\x34\x25\x8a\x91\x72\xc8\x9d\xe6\x01\xe4\x1f\x97\x4d\xda\x9e\xfe\x5d\x79\xf4\xad\x02\x05\x5f\x5a\x40\xc5\x3f\x04\x56\x65\xda\x7a\xe4\x59\x9d\xa8\xf0\x33\xdb\x11\xac\x3f\xe7\x66\xec\xb0\xc9\x3a\x07\x92\xd3\x12\x62\x2f\x16\xb3\x08\x93\x93\x75\x92\xf5\x3c\x16\xfe\xb2\x82\x4e\x93\xd7\xf7\x55\x2d\x11\xdb\xe3\xc8\x68\xf1\xd3\x78\x45\x9e\xe3\x89\xad\x79\x4f\xdc\x86\xcc\xd9\x4b\xe7\x8e\x65\x5c\x6f\x33\x95\x4b\xed\xf0\xcb\x62\x3d\xae\x79\x35\x3c\xba\x18\x9b\xac\xa2\x3f\x13\x89\x14\xb9\xb2\x9c\x02\x43\x99\x32\x84\xd3\x80\x23\xd2\x79\x37\xa0\x78\x30\xd3\x13\xc7\x23\x36\x61\x8e\xbd\x9e\x39\xcd\x67\x91\x84\xb3\x2d\x2e\xf4\xc0\xb1\x29\xd0\x5d\xb7\xab\x28\xfa\x7a\x14\xd0\x97\x57\x5e\x59\x60\xe9\x05\x8c\xf7\x9c\x15\x2a\x4b\x2c\xa8\x0e\x7f\x26\x31\x81\x52\x39\x3f\xf5\xb4\x92\x37\x67\x4b\xb6\x92\x0f\x69\x7b\xb6\xa1\x5f\xf2\xed\x74\x9b\x0d\x4e\xab\xe3\xff\x52\xa4\xc9\x7a\x12\x5b\x37\x0b\x41\x5a\x9e\x53\xe2\xdf\x8d\x94\xea\xbe\xdc\xa6\x1c\x51\x7d\xdd\xcb\xa5\xfb\x88\xf5\x75\x67\x0a\x51\x81\x82\x53\xa8\xab\x78\x22\x65\x9c\x48\x30\x88\xa5\x4f\x84\xb2\x12\x7a\xa9\x6b\xbd\x96\x54\x9e\x9b\xb3\x4a\x8c\xd9\xc4\x2c\x34\xc7\xd5\xb3\x94\xaa\xa7\xc6\x11\x20\x3d\x70\x55\x67\x96\xb7\x8e\x1b\x09\xa6\x91\x0a\xa0\x57\x2f\x5a\xd5\xeb\x0f\x39\x04\x66\x8f\x46\xd7\x89\xce\x01\x75\x9b\xff\xa5\x9b\xd1\xde\xe2\x6c\x5d\x9a\x09\x62\xb8\x98\xf3\x39\xed\x1e\xd6\xc7\x28\x5a\xe7\x69\x09\x2c\xc1\x9c\xea\x89\x43\x50\xe2\xcb\x1b\xa1\x25\x3d\x46\xf1\xea\x5b\x1b\x83\x47\xdd\xdd\xca\x89\xb0\xee\x2a\x1d\x57\x2d\x68\x05\x2b\x8f\xe1\xce\x2e\x8f\x16\x5f\x43\xdf\x1f\x07\x6c\x03\xd9\xa0\x50\x6d\x27\xac\x86\x15\xb7\x47\x00\xc8\xf6\xd5\xb0\x25\xad\xc0\xbc\x0c\x7e\xd2\x08\x86\x96\x67\xb5\x25\xcf\x6e\x5c\xa9\xe4\x91\xbd\x79\xf2\x22\xd4\xa3\x49\x9f\x7e\x3e\x4e\x59\xab\x6a\x69\x13\xa8\x89\xab\xe4\x8c\x1f\x73\x5e\xad\x2a\xe6\x13\x50\x3e\x3f\x94\xe7\x98\x0e\xa0\xd6\xca\xfb\xda\x40\x97\xba\x55\xfe\x55\xc0\x34\xe2\xd7\x4a\xcd\xa8\x32\x74\xb8\xe3\x54\x90\x56\x4b\x88\xe2\xd9\x47\xf3\x5c\x14\xd6\x16\xd6\x30\x9f\xa7\x1c\x16\x9a\x8c\x16\xb4\x3e\x5a\x98\x25\x9b\x24\x79\xaa\xb6\x36\x61\xbf\x0e\xd6\x40\xc3\x05\x6d\x80\x62\x55\x89\xd1\x4d\xd1\xb5\x6d\x51\x6d\xaf\x75\xe6\x25\xeb\x35\x33\xaf\xf5\x7a\x4d\x4c\x5d\xbd\x5e\xe4\xbb\xa6\xcf\x73\x17\x27\x75\xce\x5f\xa7\x6d\x04\x21\xe7\x03\x13\xf5\xea\xb7\x48\xea\xf5\x9e\x4f\xbf\x08\xd9\x53\x7d\x6d\xd3\x79\x82\x7a\x85\x47\x27\xb6\x03\x69\xf3\x69\x34\xe0\xeb\x91\x25\xe8\x95\x6f\x93\x44\xea\x69\x75\x77\xab\x31\x42\x1b\xa9\xe5\x7f\x3d\x4f\xbf\x83\x36\x6f\x36\x79\xd5\x0b\x4b\x43\x0b\xae\x18\xa7\x83\xab\x9a\x26\x72\xae\x57\xf9\xf2\xea\xa2\x62\xcf\x67\xce\x0e\x34\x5d\xf4\x38\xea\x19\x96\x3f\xc4\x94\xab\x6f\xc7\x07\x27\x8a\xaf\xf7\xa1\x6f\xc3\x11\xef\x2a\x91\x15\xdc\xb4\xf5\xde\xaa\xd0\xbd\xf0\xcc\x06\x17\x20\xcd\xbd\xa6\xc6\xd4\x5c\x81\xea\x03\x20\x3d\xaa\x0d\xdd\x61\x1d\x20\x07\x4d\xf8\x8d\xe1\xc9\x8a\xb4\xf5\x2c\x36\x93\x18\xb4\x91\x19\x68\x23\x6b\x86\x06\xf0\x03\x59\xc6\xa8\x6b\x67\x78\x6b\xd3\x87\xa9\x31\x82\x6a\x3d\x4d\x25\x41\x09\x87\x8d\x30\x93\x05\xcb\x76\x58\x8c\xe0\xa4\xf7\x68\x51\x35\xff\xd3\xcc\x64\xd1\xec\x76\x0e\xa0\xe1\x39\x8d\xee\x2b\xa4\x2e\x5b\x69\xf9\x93\xcb\x43\xed\xa5\x0d\xef\x1c\xda\x30\xda\xec\x64\x06\xfa\x9d\xb2\x7c\x78\xf9\x6d\x4c\xbd\x20\xe7\x3e\x03\x8b\xa9\x4a\x84\x9c\x33\x2d\xf4\x43\x18\xdc\x8a\xfb\xe2\x20\xd2\x9e\xb3\x3c\x48\x2d\x9d\x36\x92\x7f\x17\x97\x34\xcb\xbf\xf4\x77\x3d\x77\x73\xbe\xdc\x32\xe3\x65\xea\xee\x5f\x0e\x4f\xa4\x58\x58\x5d\xa7\x89\xc2\x36\x7d\xe8\x17\xb5\xbe\x5c\xbc\xa6\x00\x4a\x78\x10\x7d\xdb\xec\xcb\x6f\x93\x28\x71\x5c\x5f\x13\xa8\x75\x3c\x89\x10\xbf\x9e\x73\x29\xe5\x89\x3a\xe5\x08\xa1\xf5\xf3\xe5\xcb\xa3\x48\xa6\x03\x1c\xc6\x94\x7d\x85\x2d\x74\x16\xf2\x2b\xe4\x51\xf4\x32\x14\x8c\xae\x39\x06\x06\x41\xad\x03\x4d\xbd\x8d\x13\x5f\x7c\x81\x41\xc0\xd8\x56\xf9\xca\xf1\x12\xee\x40\x5d\xb0\xcd\x7f\xe3\xea\x4b\x23\xe4\x7a\xee\xdb\xc7\x25\xf3\xf8\xe3\x77\x88\x73\x49\x7f\x8f\x4e\xf0\x9d\x4b\x5c\x47\x73\xfc\x1e\xb7\x23\x1e\x77\x17\xfd\xb7\xcd\x9c\x3f\x48\x3f\xff\x90\x84\xe0\xa8\x59\x17\x00\xda\x88\x0a\x79\xc7\xb0\xf8\xe9\xfe\x9f\x5e\x1a\xd5\x77\xb2\x8a\xe9\x36\x2b\xfa\x42\x16\x4d\x6a\x73\x16\x5c\x4f\x9c\xbe\x87\xd2\x1e\xf9\x1f\x12\x4a\x36\xc2\xa0\x03\xa3\xed\x92\x84\xc3\xa9\x5e\x72\x81\xa6\xfc\xa0\xd8\xae\x3c\x4c\xcd\x59\x98\xb5\x74\x96\xe9\x71\x37\xc1\x5f\xd0\x80\x26\x0b\xcf\x48\x1b\xdf\x43\xd2\x78\x7d\xc9\x30\x03\x1e\x60\x5d\xe9\xda\x62\xd6\x3c\x1d\xe1\x74\x1a\xce\x7c\x0b\x90\x94\x96\x96\xe2\x36\x70\x63\x8c\xdd\x31\xe3\xe1\x4d\xfd\x5c\x26\x82\xed\x71\xa2\x7a\xce\x64\x3e\xb5\x31\x8a\xd4\xc5\xc8\x4a\xae\xf4\x03\x1d\xf4\x62\x22\x0e\x36\x29\x31\xa0\xaa\x05\x08\xef\x9c\x00\xf5\x76\xa1\xc4\xa6\xd0\xa2\x4b\x4b\xff\x1c\xce\x1e\x2d\x89\xe1\x26\x9c\x5a\x07\x76\x9b\x17\x40\x13\x26\x90\xf5\x4f\xad\xb2\x32\x8b\x8e\x19\x39\x3c\x98\x6a\x55\xb8\x48\x53\x3f\x5b\xa2\x9a\x89\x70\x09\xd5\x1a\x5d\x2c\xd8\x89\xa8\x90\xf5\x08\x57\xc8\x2a\x79\x0d\xbd\xb9\x07\x6e\x20\x04\x5d\xef\x84\x1a\xdc\xfa\x89\x92\x62\x6d\x55\x69\x26\xd8\x07\x0c\xf5\x30\xc0\xe0\x55\x4f\x63\x91\x61\xd5\x52\xfa\x85\x3f\x6d\xa2\x5f\xae\xad\x59\x4f\x93\x0a\xc1\xae\x0b\xd4\xdd\xdb\x38\x11\xbe\xd8\x3d\xbe\x82\xde\x56\x51\x44\x1f\x9a\xea\x5f\xcf\xff\xb7\xca\x6c\x0d\xd2\x95\x12\x2c\x02\x09\x33\x3b\xfc\xbd\xa0\x3e\xd0\x96\x18\xd9\x2d\xd2\x3f\x71\x7f\xbe\x64\x07\xcd\x68\x25\xbb\x24\xeb\x22\xe6\x39\xbb\xf2\x0a\xba\xac\x57\x3f\x2f\xfc\xa1\x7e\xe8\xe4\x35\xea\x2a\x53\x47\x3e\xcc\x8d\x26\x4a\x7d\x5c\xdb\x53\x84\x54\x76\xac\xe5\x9f\x5f\x6a\x6d\x81\x45\xcf\x08\x72\xe5\x65\xa6\xbc\xe0\x8f\x8f\x96\x08\x38\x5e\x6c\x42\xf9\x71\xf3\x0c\x0f\x63\xd1\x6c\xbb\x5f\xa1\xd4\xbf\xe4\xe5\xa5\xa6\x5f\xd9\x77\xf2\xe2\x3d\xd9\x0b\x20\x96\x15\x5e\xbb\x76\x8c\x8c\xf5\x92\xc7\x5e\x56\xee\x27\xbc\xf3\x82\x77\xee\x99\xb9\x65\xcf\x99\x2e\xf7\x62\xab\xb9\x3c\xae\x48\x09\xec\xfb\x56\x79\x89\x56\x85\xd9\x6e\x2a\x7d\x99\x17\x5e\x06\x32\x22\x75\xd6\xd6\x58\x90\xcc\xdb\x13\x03\x69\xe9\x2e\xc5\xcd\xc7\x88\x27\xba\x0f\x3b\xc3\x4e\xd3\x8f\x8b\x9a\x86\x86\x47\xff\xc7\x93\xef\x1e\x5a\x5e\x54\x75\x31\x88\xd5\x79\x2d\xfa\x96\xd7\x01\xfb\x98\xaa\xc4\xad\xd0\xc2\xe8\x75\xbd\x34\x7b\xde\xb8\x63\xba\xbd\xf4\x2c\x38\x75\xed\x2e\xde\x60\x4f\xe3\x55\x7a\x9a\x08\xad\x14\x48\xf5\x08\x48\x5a\x50\xb6\x64\x05\x86\xef\x75\xe5\xbf\x52\x61\x9b\x58\x61\x21\xe1\x73\xcd\x07\xeb\x76\x2d\x9c\x47\xf3\x7a\x2d\xea\xe3\xc2\x71\x9a\x3c\xf6\x96\x09\x47\xf1\x4d\x4f\x96\x97\xcc\xb6\xec\x8f\x33\x14\x13\xbe\x0c\x0a\x01\xf9\xf4\x7b\x33\x0e\x2c\xa7\x10\xc4\x1b\x7f\x2e\xf5\x30\xdf\x4e\xf7\x92\xf2\xdb\x55\x0b\xe7\xcd\xdd\x93\x19\x37\x62\x3b\x08\x20\x50\xcd\xde\x9a\x15\x4e\x6a\xbb\x1f\x76\xc7\x93\xfe\xfd\xeb\x26\x5a\x8a\x7a\xa7\x20\xd2\xea\x20\x11\x1e\x94\xd5\xcd\x5b\x1f\xd0\x2b\x79\x5a\xa3\x29\x6e\x3d\xa7\x50\xb5\x49\x53\xdd\x36\x35\xa6\x11\x07\x54\x1c\xc5\x13\x74\x68\x05\x2a\x59\x83\xc0\x7e\xc9\x70\x24\x8c\x4c\x27\xae\x84\x09\x1c\xc0\x02\xbd\xea\x70\x7c\xf5\xf2\xba\xa6\x3d\x0a\xce\xbb\x7f\x69\x96\x03\x1f\xd2\x15\x13\x12\x6f\x8e\x56\x58\x72\x22\x9c\x2d\xe6\x46\x26\x29\xf7\x13\xf6\x40\x6d\x30\x96\xaa\x52\xb7\xe8\xcb\xea\x03\x31\x82\x62\x91\x8e\xfd\x8d\x8e\xb5\xe6\x06\xd9\x06\x39\x7f\x9a\xed\xa7\x6c\x90\xd6\xaf\x10\xb4\x33\xce\x49\xe6\xde\xf1\xec\x6a\x0a\x63\x9c\xfa\xcb\xff\xf1\xcc\x19\x4c\xad\xcf\x21\x0b\x30\xa8\xc1\xfc\xe7\xa7\xee\xf2\x9f\x89\xde\xf2\x7f\x98\x0d\x73\xc4\x8b\x1f\x44\xc7\x04\x3c\x91\x5a\x9c\x55\xe9\x51\xdb\x9d\xff\xd6\xc6\x10\xfd\xa6\x46\x3e\x7c\xb2\x2f\xa7\xd6\x43\xc4\x9a\x75\xde\xfb\xe9\x56\x3d\x40\xd2\xed\xff\xd8\xfa\xb2\x35\xe7\x59\x5e\xd9\xf3\xbe\x4b\x62\x13\x9b\x3f\xd8\xf8\x65\x48\xda\x7d\xf5\xfb\x51\x95\x04\xe4\xdb\xeb\x20\xa8\x44\x98\xcc\x3c\x4a\x03\x4f\x6e\x03\xb5\x06\x0b\x7a\x8e\x9d\x69\x55\xd7\x2a\xf4\x57\x3f\x30\x86\xdf\x1e\x60\xb2\x6b\x96\x06\xad\xa1\x8c\xee\x34\xea\x32\x00\x40\x85\x23\x28\xee\xff\xeb\x3b\x40\x60\x0d\xf8\xdc\x46\x12\x12\xb7\x95\x09\xb2\x21\xeb\x20\xfa\x71\x1f\x26\x81\xe9\x50\x5d\x7a\xd2\xed\x9d\x7c\x5c\xae\x28\x13\x56\x68\xe8\xea\xdc\x3e\xb9\xaf\xbb\x0e\xcb\xe3\x5a\x74\x3a\x42\x59\xf4\x8a\x2d\xf1\xd4\xd9\x1e\xa1\x78\x73\xa4\x01\xea\xea\x27\x1d\x49\x67\x23\x55\x39\xeb\xd2\x8f\x64\x71\xdb\x89\x0f\xd0\xa8\x84\xc7\xa5\xa2\xdf\x01\xd5\xed\x90\x13\x20\xb8\x3b\x6d\x71\x64\x13\x19\x8d\xbd\x45\xcd\xa9\xe3\x96\xd9\x2f\xbf\xea\x74\x1c\x12\xc6\x80\x7b\x7e\xed\xec\xa6\x3e\xca\x8e\x6e\xfb\xf4\xd7\x9e\xd5\xdb\x46\x73\x4f\x9c\x99\xa9\xbc\x2e\x1e\x57\xfd\xf4\x63\xab\xb9\x57\xa3\xcd\xfa\xcd\x5a\xc1\x0d\xd9\x0b\x09\x02\x60\x59\xf4\x67\x3b\x97\x60\xf2\xf9\x8c\xb5\xf4\x72\x58\x49\x4f\x9d\xf3\xa4\xa7\xa9\xb0\xc9\xe9\x72\x4b\x78\xea\x77\x28\xae\xc4\x7e\x85\x9a\x7a\x32\xdb\xd4\x05\x83\x1b\x89\x15\x56\xbb\x54\xc2\x1e\x1a\x99\x6a\x8c\xa5\x06\x38\x69\xec\x5b\x63\x2b\x05\x6a\xea\xf1\x54\xab\xab\xfb\xae\x39\xa4\x6a\x01\xcb\x94\x8d\x79\x21\x50\xbf\xc3\xab\x27\xea\x87\x07\x28\x96\x60\x9f\x7b\x62\x7d\x56\xbb\x9d\xb3\x7e\x01\x45\x81\x5f\xf4\x2f\x5f\x82\x86\xba\xb3\x33\xba\x20\x0b\xc3\xf5\x1c\x50\xb6\x87\xba\xdf\x51\xe5\xe2\xa4\x0b\x97\xb9\xd4\x1d\x6a\xc9\xea\xf7\x9b\x75\x10\x7c\x55\x58\xe7\xf9\xc7\xa5\xbd\xde\xc5\xdd\xe4\xa4\x22\xc5\x05\x9c\x5a\xee\x5d\xda\x61\x87\x73\x99\x98\xcd\x54\x2e\x6a\xf5\x5f\x27\xf5\xbf\x2e\xf4\x53\xc9\x1c\x3d\x36\x1e\x44\x25\x15\x6f\x08\x10\x46\x02\x4a\xa8\xac\x78\x17\xff\xec\x02\x99\x04\x9e\x29\x6a\x21\xe4\x30\xac\xc3\x24\x9c\x89\xac\x0d\x6b\x60\x6e\x45\xa9\x6f\x9d\xa7\xab\xda\x70\x39\x9e\x9e\xa7\xeb\x8e\x4a\x9c\x77\x1d\x69\xd5\x51\x49\xbc\x40\xbb\xff\xf5\x6b\x0e\x9d\xd7\xe9\x3b\x4e\x59\x59\x93\x00\x19\x31\x8f\xcc\x18\xc3\xf7\x91\x19\x5b\x71\x71\xc1\x44\x01\x09\xd6\x7f\x16\x7f\x6a\x27\x51\x96\x3d\x99\x22\x33\xb5\x08\xad\xb2\x31\x8e\x0d\xee\x34\xef\xd4\x71\x79\x9e\x4a\x1f\xf9\xca\xb8\x8b\x4f\x6c\xd6\xf1\xae\x7e\xa0\x61\x39\x4d\xe4\x94\xff\xfa\xf3\x18\xf8\x6f\x72\x68\x02\xef\x3b\x4b\xdd\xff\xd9\x0a\xba\x84\x83\xf7\x7a\x52\x89\xee\xad\x76\x40\xb7\x85\x99\xac\x5d\x17\x08\x7c\x16\x7a\xa5\x2b\xf9\xc0\x70\x2e\x9d\x05\xf0\x6e\xe2\xe8\xa3\xc7\xed\x44\xc2\x66\xb6\xba\x36\x07\x9c\x5a\x45\xb9\xa8\x36\x49\x91\xa6\x98\x7f\x59\x62\xab\xdb\xa2\xf4\x33\xa7\x72\xc5\x68\x50\xe4\xf3\xa9\x45\x44\x61\xce\x06\x55\xde\x97\x62\xfd\x9c\xba\x5b\x36\xd5\x1d\x12\xab\x87\x23\xb2\xe6\x2e\x1d\x56\xf0\x94\xe4\x2b\x60\x0c\xff\x43\x76\x52\x2a\x37\xae\xae\x5a\x95\x1b\x2c\x02\xaa\x98\xe5\x68\x50\x55\x96\xe4\xea\x4e\xb1\x3a\xb2\x79\x4f\x55\x31\xf3\x40\xe9\x80\x2c\x6f\xe2\xcb\x77\xc4\x42\xe8\x39\x50\xd9\x4a\xaa\x1e\xbb\xa7\xf1\x74\xd4\xa0\x45\xf9\x35\x3b\xab\xbd\xa8\x88\xb4\xdf\x22\x63\xad\x98\x1c\x13\xc1\xbd\x8b\x54\x7d\x38\x8d\xf6\x18\xc3\x49\x31\xd6\x82\x53\x5f\x56\x56\x9f\xcc\x41\x96\x0f\x9b\x4a\x5e\x6d\x34\xe4\x9c\x28\x85\x9d\x98\xea\xed\x04\x5b\x4a\xc7\x8d\x3d\x30\xac\x19\x75\x77\x32\x61\x54\x6b\x32\x9a\xcf\xbb\xa3\x36\x1d\x81\x56\x25\xea\x2e\x23\xb3\xd3\x28\x55\x27\x8d\xa0\x0c\x31\x1f\xc0\x96\x35\x43\x91\xad\x30\x1a\x68\xfa\x2a\xca\xb4\xec\x29\xaf\x96\x69\xb2\xf6\x27\xd8\xac\x24\xc7\x27\xa5\x71\x33\x5d\x98\xa6\x43\x00\x24\xd6\x6e\x4d\x87\x29\x44\x48\x70\xb8\x5c\xef\xac\x98\x02\xe3\x05\xaa\xa7\xd3\xb3\x31\xd7\xf9\x73\x92\x1d\xee\x08\xf4\x36\xb1\xae\xe9\xda\xa3\x2e\x54\x6b\x52\x85\x94\x06\xab\x42\xab\x59\x69\x3e\xb9\x4f\x15\xd2\x60\x0d\xf9\xa8\x6e\x7a\xd1\xa4\x5f\x9d\x16\xd7\xf4\x7b\x47\x8b\x82\xb2\xc8\x89\xa6\xb9\xae\xb1\x77\x67\xba\xab\x36\xb9\xca\x6e\x19\xb7\x1f\xc9\xf6\xf1\x6f\x7a\x68\x43\xac\x55\xb7\x5f\x78\x4b\xb5\x3d\x70\xbf\x89\xce\x5b\xd6\x94\xdc\x4c\x7a\xeb\xe1\x42\x22\xad\xb6\x88\x56\xaa\x0e\x1a\x6f\x18\xd3\x80\xfb\x9e\x87\xda\x71\xd8\x20\x50\x67\x56\x6f\x7f\xda\x2d\x06\xc1\x95\x52\x12\xd4\xbd\xba\xc8\xd8\x5d\x1b\x6f\xbf\x08\xfb\x44\xd5\x5e\x88\xa6\x77\xe8\xff\x9f\xe3\x10\xbc\x73\x9a\x24\x3b\x60\x50\xf4\x9f\x3f\xc6\x74\x85\xbc\x85\x5c\x12\x69\xb5\x65\xd6\x74\x51\x4a\xf1\xe8\xc1\xdf\xe9\x35\x0e\x15\xd2\x3b\xa9\x5c\x87\xf4\x4e\x2c\x24\xa1\xd6\x39\x7c\x60\xa8\xd3\x0f\x85\x5f\xe7\xf4\xd1\x09\x1b\x5a\xd7\x2f\x36\xe9\x2d\xb8\xdf\x71\xdf\x5b\xb0\xa6\x1e\xa7\x0f\x12\xa0\xb8\xe1\x64\xbe\x59\x7e\xb5\x95\xbb\xc2\x6d\x1d\x22\x11\xdb\x34\x2f\x6a\xf3\x8c\xa8\x21\xa9\xed\x54\xa9\x04\x00\x6a\x93\x41\xe4\x0b\x5a\x7f\x55\x46\x74\x13\x6d\x89\x94\x43\x56\x2b\x65\xd6\x89\xd8\x79\x86\x43\xe6\xef\x3f\x7f\xfe\x8d\x3f\x51\xa5\x1a\x0e\x09\x1b\xc4\xbb\x67\x1e\xab\xdc\x23\x6b\xef\xea\xa8\x9b\x2c\xdf\x75\x97\xc5\x52\xf9\xb9\x8a\x8b\x07\x4d\x2e\x74\x04\xa1\x6d\x08\xd0\x11\x99\xf0\x06\xa8\x9e\x07\x5a\x84\xb0\x3b\x28\x5f\x50\x80\x8c\xf6\x02\x97\x1d\x33\xbe\xe2\x17\x31\x54\xa9\x51\xf1\xd7\x4e\x97\xfe\xda\x7b\x4b\x35\x46\x82\xf2\x6d\xa5\xe9\x0e\x1d\xa4\xc1\x60\x12\x2c\xc8\x5f\x54\xf0\xab\x7f\xa4\x6f\xf1\x89\x6a\x25\x8b\xc7\x0d\x83\x18\x2d\xa4\x32\xb4\xac\x29\x10\x8b\x93\x0a\x48\xc8\x5c\x78\x0c\xb8\xf0\xc0\x09\x56\x43\xd2\x34\x58\xee\x03\x13\xfa\xbc\xb8\xdc\xfd\x0a\xdb\xcc\x17\x45\x58\xd9\x6c\x7e\xb6\x1a\x31\x2f\xc9\xc7\x0e\xcf\xa5\x7f\xc6\x92\xa0\xdc\x8b\xf8\x5e\x22\xe7\xa7\xca\xfa\x99\xb9\x76\xd6\x33\xb0\x2b\x6f\x5e\x0f\x36\x5b\x44\x7e\x45\x7f\x0d\xbc\xf9\xb3\x27\x72\xf7\x47\xba\xf6\x10\xbb\x9f\xdd\xe7\xc3\xc9\xa2\x72\xd5\x82\xf9\x8f\xdd\x48\x7b\x74\x8f\x91\x27\x51\x32\x78\x7c\x68\xf4\xaa\x7d\xa7\x73\xaa\x42\x87\x7c\xa3\xbe\xe2\xc1\xd8\x3f\x87\x8b\x53\x76\xe2\x7a\xf9\xdd\x19\xe9\xda\x8c\xe9\xb7\xba\xc9\xa6\xd3\x95\x8e\x31\x54\x0d\x3c\x52\x7c\xb4\xda\xe6\x54\x9e\xf7\x31\xd0\x97\x75\x9f\x22\xc0\xe2\x72\xd9\xe9\x6c\x82\x3c\x15\x96\x10\xab\x4a\x35\x30\xba\xf5\xdc\xf1\x3d\x70\xbe\xd0\x4c\xc9\xaa\xc2\x69\x30\x6f\x0c\x9e\xe5\xf9\x73\x95\xf0\x43\x35\x36\x25\x48\xa5\x0f\xd1\x14\xc1\xa3\x51\x84\x98\x96\x1b\x33\x04\x81\x87\xa7\xca\xec\x12\x6a\x75\x4b\xe0\x43\x33\x32\x5a\x57\x12\x72\x24\x2d\x08\x2b\x65\x07\xcd\xaf\xd8\x3a\xd5\xff\xb3\x3a\x84\x1a\x9f\xba\x7b\xa8\x49\x03\x57\xdd\xaf\x61\xaf\x64\xf5\xd1\xac\xba\x72\x39\x63\x6e\xc2\xa4\xc4\x2d\x18\xd0\x96\x62\x3c\xee\x55\x75\x78\xf7\x58\xc9\xa2\xc3\x02\xfb\x08\xa3\x0b\x18\xbc\x85\xbe\xec\xfe\x90\xd6\xa4\xec\x24\x47\x64\xe6\xa7\x78\xd7\xec\x0e\x67\xb8\xab\x2b\x04\xbb\xb9\xf8\x1e\x5a\xb9\x69\x65\x2a\x7e\xc8\xcd\x41\x77\xf5\x3d\xe0\xfa\x2c\x0a\x1c\x74\x2c\x74\x97\x96\xb8\xc8\x17\xba\x53\x62\x4c\xf7\xcb\x60\xea\xcf\x7c\x3b\x18\xf0\xe0\xbc\x81\x18\xd5\x1d\x0b\xa4\x89\x2f\x33\xd7\x83\x50\x0d\x94\xc0\xa7\x6f\x53\xc1\x62\x42\x36\xc1\xe1\x47\xb8\xef\x84\x98\xcd\x3d\xf1\x1d\xef\x2e\x1f\x6e\xf9\xfa\x7b\xbf\xcb\x48\x10\xb8\xff\x84\x67\x56\xdd\x07\x34\xb2\x10\xce\x9b\x19\xb0\x19\x49\x2e\xc9\x84\x24\x93\x6d\x99\x57\x3e\xc1\xa9\x72\x9c\x32\xb3\x73\x1c\x54\x6e\xe9\x5b\x1d\xe9\xa0\xd5\x7f\x79\xf5\x90\xe7\x4a\x90\xe7\x9c\xcc\xe8\x17\x51\xff\x63\x94\x46\x54\x7f\x2e\x68\x26\x80\x72\x3c\x2c\x1c\x12\xf4\x59\xc9\xf8\xb7\xf6\x4f\xef\xdc\x6d\xf8\xda\xd1\xf3\x91\x91\x95\xe7\x01\x26\x51\xd7\x15\xb1\x54\x54\xec\xe9\x93\x40\xef\xa3\x00\xea\xf7\x95\x61\x75\x43\x2f\x23\x28\x3a\xa5\x5d\x29\x1e\xb9\x1e\xe7\xad\xc3\x45\xdd\x7e\xae\x1a\x8c\x09\x05\xe9\x96\x05\x83\xca\x45\x92\x29\x3e\x96\x09\xba\xfd\x51\xaf\x9f\xab\x0a\xbd\x5d\xf4\x8b\x2e\xec\x84\x91\x4e\x07\x54\x6a\x70\x7b\xc8\x8f\xfb\x5b\xbc\xd0\xde\x1e\xf1\x47\xaf\xb4\x9f\x3f\x5f\x77\xdb\x81\x91\x2d\x44\xf4\x13\x6d\x8b\x03\x10\x42\x54\x04\x51\xa9\x1d\x11\x76\x10\x09\xb9\x53\xd4\x16\x27\xc6\x82\x39\x3b\xee\xcb\x43\x46\x3c\x54\xe1\xc2\xdb\xca\x93\x56\xd2\x0f\x94\x6f\xea\x7b\x1a\x10\x3a\x89\xe6\x06\x77\x0e\x9b\xde\xa8\x13\x8a\x27\x4c\xad\xab\xd0\x6c\xfe\x11\x93\x90\xac\xe7\xd1\x44\x48\xbf\xcf\x17\x6e\x72\x10\xa0\x58\xda\xf3\x09\xe3\x01\xb1\xd7\x02\x42\x5e\x01\x10\xb1\x90\x1b\x54\x72\xb2\x49\x12\x36\x07\xc9\x58\x6d\x5b\x13\xd8\xce\xf7\x14\x08\xe2\x5f\xfa\x8f\xa5\x64\x3b\xdd\x74\xbd\x8e\x2c\x12\x16\x74\xfb\xb1\x85\xa2\x0a\xbc\xdb\xff\x24\x9d\xaf\xf6\x73\x35\x49\x57\x5c\xf6\xac\x1b\xd5\x1d\x43\xc5\xba\xf0\x48\x69\x0c\x62\xbc\xc4\x57\x84\x8a\x72\x21\x37\x08\x57\x13\x8d\x2b\xda\x16\x2f\x18\x7a\x79\xb5\xc5\x2b\x54\x25\x9e\xce\xae\x80\xed\xe7\x16\x2f\x6a\xc1\x6d\x11\xe2\xbf\x5b\x2c\x2e\x93\xd8\xaa\x8a\x18\xe5\x2a\x28\xf1\x6f\xba\xf5\x0f\x08\x28\x13\xf4\x3f\x26\xa7\x98\xa6\xc9\x16\x4b\x32\xbb\xd4\xed\xf0\xa9\x6f\x3f\xb4\xd7\x28\xc7\x7f\xdf\x93\x1a\x34\xe5\xfa\x1f\x4d\xaf\x88\xb5\xf8\x0e\xf6\x91\xef\x80\x99\x12\xd4\xf6\xb6\x03\x77\x8f\x40\xc4\x8f\xf4\x65\x50\x33\x79\x86\xe5\x25\xb3\xb8\x76\x5c\x2c\xb1\xe3\xc2\x3d\x17\xd2\x02\x71\x77\xed\xe0\x8e\x6b\x3b\xae\x0f\x64\xeb\x37\x61\x4e\x09\xf6\x5c\x76\xad\x36\x82\x34\x3f\x01\x3f\x6a\x09\x55\xe0\x00\x19\xd4\x76\x21\xf0\xa6\x1f\x3a\x6c\x0c\xf5\x4a\x71\x2e\x7d\xa6\xa3\x78\xfe\x63\x78\x6f\x9a\xdf\x76\x53\x10\x67\x95\x42\x36\x18\xda\x3e\xce\x0d\xa6\xd5\xcc\xd3\x9a\xea\x78\xae\xd2\xe6\x43\xcb\x76\xbe\x60\x38\x9a\x3b\x48\x40\xe8\x27\xfd\x9d\x28\xb7\x93\x5b\x28\x8d\x01\x18\xe6\x73\x45\x02\x5c\x88\x6a\x50\x98\xde\x24\xbb\x2f\x07\x43\x1b\xdd\x15\x22\xcd\x88\xcd\x8b\x46\x2d\x50\x20\xac\x84\x82\xd0\xf0\xa0\x0d\x4a\x4c\x5c\x45\x12\xf0\x4c\x89\x6e\x55\x82\x71\xcb\x4e\x82\xc8\x8f\x18\xec\x0c\x77\xbc\xb5\x69\x79\xc5\x57\xb0\x21\xda\x43\xcb\x96\x9f\xe8\x5e\x84\xc0\xd1\xe6\x68\x6a\xf6\x66\x7b\x1c\x01\x84\x29\x03\x86\x32\x21\xbc\xec\x97\x88\x4f\xb8\x61\xe3\xe6\xa8\xde\xf0\x9c\xdb\xe8\x38\x02\xd0\x67\x9d\x2d\x47\x18\x0c\x2b\x06\xdf\x48\xe1\x23\x26\x8a\x74\x80\x26\x89\x6a\x14\xbe\x2e\xa6\xf7\x8a\x10\x76\x50\x15\x5b\xd0\x10\x85\xdf\x19\x6c\x99\x91\x8e\xab\x76\xe0\x47\x39\x67\xde\xca\xce\x74\x09\x1d\xf3\xa0\xc6\x33\x41\x9a\x6b\x45\x4d\x24\xcd\xae\x33\xb5\x5c\x38\x8f\x6d\xd9\x5e\x3d\x0b\x52\x47\x0d\x75\x51\xe8\x1b\x07\x31\x2d\xf7\x87\xb5\x6d\xb4\xd7\xdc\xca\x8e\x98\xbb\x70\x4c\x40\x66\x2e\x6f\x4f\xa2\x11\x17\x6b\x67\x65\xa7\xb6\x20\x82\x4a\xb0\xbb\x90\x81\x3c\x89\x25\x10\x63\x51\xc7\xda\x09\x96\xfd\xc2\xb7\x15\x59\x13\x09\x95\x3a\x78\xea\x56\x42\x9b\xb4\xd3\x00\x4b\x8a\xa0\xd3\x4a\x28\xb6\xd7\x5a\xa5\xb4\x15\xba\x11\x06\x07\x41\x82\xca\xa2\x9f\x65\xf8\x36\xdc\xef\x78\x2a\x7b\xd2\x95\xde\x5f\x05\xd2\x74\xd6\x1c\xb4\x49\xd4\x0a\xc3\x13\x33\x0e\x68\x22\x02\x21\x9b\x60\xde\x34\xd9\x83\xd5\x7a\x67\x36\x90\xbf\xbf\x68\x7b\x61\xc0\xda\xdc\x05\x66\xd2\x91\x3d\x7f\x7f\xaa\x2d\xe4\x93\x7f\xae\x4f\xfd\xb9\x6e\x27\x3f\xae\xad\xef\xe5\xd4\xb7\x16\x82\x52\xb9\xa0\x92\xfc\x5e\xfa\x2c\xfc\x16\xd6\x34\xdd\xde\x7e\xcc\x6e\x04\xe3\x9c\x73\xfc\xa5\xc7\x9e\x64\x19\xfc\x66\xa1\x6f\xc7\x4d\x13\x0d\xea\x96\x72\xba\xff\x87\x95\xc0\x8d\xb3\x88\x3b\xa6\x6c\xda\xc6\x05\x4b\xdd\xb8\xb1\x54\x16\x27\x63\x1d\x70\x63\x32\x08\xbb\x39\xf6\x24\x63\xbe\xd4\x1f\xc6\x96\xae\xbd\xee\x2e\x32\x0d\x29\xe7\xdd\x1b\x48\x44\xc5\xc5\x2b\x9c\xbf\x80\xfe\xaa\x61\xd1\xf4\x6a\xea\xfb\x16\xf0\x9d\xdd\x22\xeb\x3d\x07\x88\x09\xe7\x9d\xdd\x31\x28\xea\xca\x8d\xfd\x44\x31\x7b\xb6\x65\x97\xb7\x9b\x77\xc6\xee\xec\xfe\x70\x1b\x81\x00\x35\x84\x30\x11\xd2\x50\x7c\xea\x46\x06\x20\xe3\xf1\x75\x47\xa3\x25\xc2\x07\x66\x3f\x6e\x5f\x19\x73\x2b\xec\x33\xe9\x3b\x7b\xac\x18\xef\xbc\xfb\x18\x46\xd2\xc2\xaa\x69\x08\x6b\xfa\x95\xa5\x9b\xa2\x63\xb2\x36\x78\x0c\xc7\xd5\x48\x21\x4d\xa6\x13\xf5\xce\xe9\x11\x94\xd4\x86\x16\x75\xe3\x3e\x9e\xe7\xe2\xeb\xd6\x1b\x74\x9e\x50\x85\x2f\xf3\xee\xc7\x9d\x13\x1e\x5e\x65\x9d\x87\xde\x59\x96\x81\xbc\xeb\xa6\x58\x83\xd8\x34\xdc\xbe\xee\xbb\x87\xfe\xe9\x3b\x4f\xb9\xd1\xf3\x02\xb7\x1c\x34\x20\x5d\xe0\xde\x38\xdd\x5b\xd4\xbb\xae\xec\x88\x98\x53\x44\x0b\xa1\xaf\x2e\xc6\x96\x35\xb4\x9e\x7f\xb6\x1e\x11\x84\xad\x0c\x8d\x83\xf9\x84\xbd\x06\x21\x7b\x2a\xd7\x6e\x1f\x72\xed\x43\x63\xd2\x9d\x55\xa9\xbb\xfe\x67\x29\x2b\xd5\xf1\x03\x4a\x8b\x4f\xf3\x08\x55\xa6\xc6\x8c\x75\xd6\xcd\x6d\x76\x66\xc9\xaf\x56\x1e\x01\x16\xe8\xef\x1d\xf9\x6f\xde\xc3\x42\x9a\xaa\xfe\x99\xf7\x16\x93\x56\x8d\xac\x55\x13\x2a\x44\x59\xd4\x75\x5a\x77\x0b\x73\x2a\x41\x7f\xa2\x2a\x49\x6f\x69\x1c\xbf\xd6\xba\x7f\xa5\xf3\xba\x65\xd9\xf8\xef\xe7\x9f\x5b\xc3\xcf\x3f\xf7\xfc\xf9\xe7\xc2\xfa\xf3\xcf\x95\xb0\xba\x9f\x7f\xae\xfe\xfc\xf3\x3f\xff\xf6\x9f\x7f\xe1\x11\xdd\xcf\x3f\xf9\x2b\x9c\xd5\xe5\x9f\x7f\xf1\xe7\x5f\xba\xf6\x9f\x7f\xd7\xcf\xbf\xfc\xf3\xaf\xfe\xfc\xab\xe9\xe7\x5f\xcd\x3f\xff\xda\xcf\xbf\xe6\x64\x29\x71\x13\x14\x27\x33\x42\xc1\x2b\x8c\xec\x94\x6c\x26\x8d\x80\xec\xb9\x45\xdf\x61\x8b\x2e\x1b\x53\x15\x5c\x7b\x42\x2e\x92\x33\xdb\x6a\x9e\x6a\x58\x06\xea\xae\x64\x00\x05\xf4\xd1\x68\xd4\x04\xf8\x13\x27\x3f\xc0\x01\x17\x65\x20\xeb\xa0\x5b\x5c\xc5\xe0\xbd\x58\xd2\x88\xf3\xc4\x48\xf5\x25\xb7\xb9\x0e\x6a\x33\xbf\xd2\x26\xec\xf5\x89\xda\xf4\xb0\x22\xf4\xd6\x11\x9f\xe9\x18\x71\x5f\xd1\x6f\xc1\xcd\x8c\x7e\x1a\xde\xc1\x2a\x2c\x7a\x26\xa8\x9c\xe9\xc7\x25\x6b\x8f\x34\x66\xee\x36\xae\x7f\x75\x32\xef\xed\x90\x89\x03\xe1\xe5\xd7\x81\xa4\xdf\x57\x46\x27\x37\x9d\xab\x1d\xb2\x13\xf8\xd7\x9c\x67\x66\xe3\xf9\x59\x07\x38\x5a\xf8\xd7\x1c\xd6\x6f\xff\x9a\xdb\x60\x30\xb3\xb6\x23\xd0\xcb\x9e\x60\x1d\x96\x1d\x04\x19\x11\xf4\x50\xe5\x5f\x73\xaa\x7d\xf3\x5f\x73\xfc\xc2\xe9\xad\xb6\x72\x3a\xb0\x1a\x97\x89\xd8\x74\xff\xe9\xf4\x5d\xe8\x41\xd3\x66\x67\xff\x9a\x3b\x5c\x41\xa4\x54\xf4\x01\x90\x4e\xa4\xe6\xdc\x12\x48\xa5\xe9\x48\x58\x16\x67\xed\xd1\x9c\x15\x4f\xf8\xde\x3d\x7f\xc4\xe2\x3f\xec\xad\xe0\xaf\x27\xfa\xac\x16\x4b\x65\x71\xd8\x73\xf3\x01\x11\x7a\x7e\xc1\xd4\xfa\x2b\x54\xed\x33\xef\xd1\x28\x94\x65\x9b\x45\x98\xad\x55\xe5\x1c\xcc\xc5\xad\xe4\xd0\x7f\x2a\x4d\xaf\x24\x1b\x95\xa9\x8e\x42\xbc\xf2\x50\xbc\xfa\x81\x87\xe3\x67\x38\x59\x67\x3b\xa3\xad\x01\x9a\xd3\xf9\x79\x02\x29\xbd\x4d\x19\x55\xa3\xf8\xc5\x59\x1d\xc9\x50\x0b\xa9\xe0\x72\x4b\x4f\x4b\xa9\xee\xf9\x54\x46\x43\x0a\x51\xff\x4d\x24\x7f\x4a\x02\x3f\xaa\xb0\x03\x61\x8e\x94\xc2\xe6\x04\xb1\x47\x90\x28\xc3\x0c\x81\xd8\x17\x96\x87\x49\x80\xf9\x87\x65\xdc\x1f\xc2\xe0\xd3\x49\x00\xe5\xfd\x33\xb1\x72\xd6\x9a\xf1\x56\x00\x91\xbf\x2d\x53\xe0\xfd\xd6\x3c\xbc\x4b\x58\x05\x78\x64\xb9\x77\xc5\x2a\xb1\xc7\x19\x48\x52\x24\xfd\x6c\xf3\xfe\xa4\xb9\xb8\x97\x27\x92\xe5\x15\x00\x4e\xe1\x80\xb0\xbc\x02\x62\xe6\x42\x8c\xa7\x05\xaa\xb5\xc1\xc7\x7f\x4d\x46\xf0\x82\x60\xce\x65\xef\xa7\x69\x64\xe9\xe8\x5c\xf6\xbe\x12\x11\xd6\xb3\x57\x92\xec\xa9\xf8\x64\x9f\x17\xaa\x3c\x15\xc8\x52\x65\xd1\xf8\x5c\xae\xdc\x18\x3d\x32\xd1\x23\x04\xba\xd0\x92\xd5\x97\x9b\x06\xec\x6c\x6f\xf0\x23\x45\xb4\xc8\xe3\xcf\x29\x80\xd3\xb1\x77\xb0\xfe\x64\xee\x4e\x7c\x2d\xe8\x2b\x7c\xfd\x43\x15\xf4\xcd\xd3\x84\x43\x09\x2e\x3c\x1e\xcc\x11\x68\x4d\x14\xf2\xda\x21\xf8\x07\x50\xfa\x06\x22\x4d\x49\x90\x91\xea\x5c\x15\xa1\x92\x09\x08\x3a\x78\x09\xae\xfe\x22\xfa\x84\x5a\x7b\x87\x23\x7c\x42\x2b\x0d\xf0\xbd\xae\xfc\xd6\xb0\x9e\xed\x94\xbe\x22\xd8\x3a\xa4\x43\xfc\xed\x29\x9d\x95\x48\x29\xbb\xdb\xc0\xbb\x2d\x00\x16\x89\xc7\x56\x13\x01\x2c\xd0\x1c\x42\x8c\x34\x5d\x20\x65\x40\x91\xbd\x73\x88\x51\xeb\x0e\xdf\x95\x11\xa0\x60\x42\x8c\x9f\x94\xe9\x48\x4d\xf5\x5a\xd5\x21\x5c\x9d\x6e\xc9\xec\x93\x20\x13\x9d\x31\x9f\x36\x1f\x16\xbc\x18\x19\xad\x2a\x9c\x4b\x3b\x7f\x09\xc8\xaf\x7e\xc1\xcb\x15\xc3\x3a\x7a\x84\x73\xbf\x57\x4c\xc0\x04\xa3\x85\x86\x93\xd3\x19\x20\xa5\x89\x7f\x24\x66\xaf\xd0\xfe\x4f\x54\xd2\x2d\x3a\xe5\x5b\x2f\xe0\x5f\xd7\xff\x97\x21\x67\xcc\x3a\x06\x7f\x2b\xe7\xbf\xbf\xe3\x5f\xb3\xf6\x4e\x71\xf9\x3a\x5f\x00\xa3\x23\x31\xf0\x18\x6d\x27\x96\x41\x14\x12\x7e\x6e\x75\x9a\xad\xd5\x45\xa5\xf6\x8f\x57\x52\x4a\x0f\xa9\x6a\x26\x69\x4f\x07\xa0\x33\x86\x8e\xeb\x4e\xce\x6c\x5b\xcf\xda\x3a\xc9\x71\x16\xbe\x31\x17\xd1\xb1\xa1\x05\x85\xeb\x1a\xa3\x60\xb8\xb4\xe9\x86\x4b\xe6\x6f\x6c\x77\x81\xb5\x3a\xf7\xd1\x37\xb0\xc6\x14\xab\x4c\xac\xa4\xda\xa6\x2a\x9e\xd3\x00\x65\xcf\xcf\x52\xd9\x20\x40\x68\xc1\xc1\x7a\x4a\x01\xcf\x86\x4c\xf8\x4d\x56\xed\xff\x60\xf4\xf1\x21\xfc\xfd\x19\xb5\x93\xdf\xce\x68\x82\xd0\x1d\xa6\x35\x86\x07\xbe\x5a\x91\x84\x93\x90\xd3\x29\xc0\xfa\xf5\x92\x8f\x47\x0a\x52\x46\x11\x26\xd8\x63\x48\x37\xc9\x2e\x82\x10\x5f\xaa\x7c\x54\x79\x03\xa3\xd6\x09\xb1\xdb\xe5\xe0\xe4\x03\xf3\x4f\x76\x0f\xf9\xb9\x08\xb3\x26\x21\x0f\x77\x82\xf8\x0a\x12\x68\x9e\x4a\x64\xba\x4a\x24\xdf\x0c\xa4\xee\x24\x6e\x02\xb4\x59\xc2\x64\x20\xdf\x00\xd1\x2b\xc1\xd6\x01\x21\xbc\x21\x1a\xee\x5e\x00\x20\xa5\x82\xbc\x10\x6e\xf5\xe3\x61\xb2\x18\xd8\xb1\x01\xa0\x8c\x3f\x81\x5b\x42\x40\x8b\xdf\x93\x59\x1d\x4a\x98\x52\x01\x3a\x7b\x01\xd3\x22\xff\xa6\xaf\xcc\xed\x48\x81\x35\xcb\xbc\x41\xd0\xc7\x49\x6a\x96\xdd\xb5\xe7\xd3\x01\x61\x3f\x12\xa0\x90\x54\x02\xbd\x1e\x63\xa8\x02\x9d\x32\x8e\x02\xf0\x63\x18\xea\x8b\xdb\xba\x82\x90\xc5\x42\x3c\xa3\x7e\xf9\x5a\x94\xf2\x1f\xf4\xcb\xd9\x2d\x4c\x73\x3a\xab\x6f\x70\xa8\xb9\x21\xa3\xc7\x4f\x76\x12\xd8\xea\x32\xcd\x03\xc5\xb7\xba\xcc\xe3\xe7\xec\xd6\x35\x7a\xb5\xf4\xae\x81\x70\xc3\x23\x3b\xc8\x7c\x23\x41\xce\x02\xe8\x1f\x9a\x51\x2b\x55\x0b\x0b\x58\xec\x1b\xd7\x5e\x81\x89\xcf\x95\xc0\x47\xa5\xfa\x47\x64\x98\x4b\x8b\x9a\x4d\x6b\x08\x30\x13\xcd\x7e\x77\xad\x73\x6f\x96\xbf\x70\xad\x72\x99\xfd\x1f\x56\xff\x1e\xa7\xc3\x13\x6b\xff\xe5\xe4\xd6\xc5\xf5\xff\x8c\xf5\xfc\x8c\xb4\xb8\xfc\xd0\x6f\xe3\x39\xb2\xb9\x54\x26\x6b\x38\xdf\x7a\xb3\x60\x35\xce\x99\xc1\xfa\x5e\x8f\xd7\xc0\xc7\x34\x86\x2c\xdd\xb6\x6b\x30\x18\x0d\x3c\x64\x0b\x33\x14\xdc\x8f\x23\x13\xd9\xb5\x13\xa7\x39\xea\xf9\x73\xc7\xb7\xc6\xc6\x91\x79\x62\xfa\x3f\x32\x80\x94\xf9\xef\xbb\x27\xfc\xb0\x38\x64\x7d\x91\xf2\x9c\x62\xae\x38\x0c\x5a\x5e\x1c\x61\xc9\xf3\x5f\x67\x5b\xa2\x4c\x0e\xc1\x5c\x3c\x73\x22\x86\x64\x16\x85\x32\x9a\x19\xfc\x2a\xce\xc1\xab\xb7\x5e\x59\x83\x5e\x95\x20\x4c\xa7\xc5\x51\x64\x2e\x57\x7b\x65\xb1\x73\x60\x30\xd5\x47\x3f\x72\x5f\xb9\x1e\x74\x45\x29\xd5\xd9\xf1\x94\x32\x63\xa7\x7f\x71\x9f\x90\x5c\x3f\x2c\x9e\xd8\x7b\x30\x47\xc7\x7c\xc6\x4f\xc6\x3a\x15\xe2\xb3\x40\x2a\x9b\x15\xcb\xb0\xd1\x40\xdf\x20\x85\x19\xa3\x61\x34\x16\xd3\xaf\x98\x09\xbd\xd8\xca\x6a\xd0\xd0\xfb\x3c\x9f\x30\xbc\x07\x09\xb4\xb2\xae\x59\x50\x2a\x8a\x74\x78\x14\x1c\xbd\x12\x63\x0b\x3d\x66\x97\xa4\x37\x2b\x29\x48\x9a\x9f\x15\x06\xd2\xbf\xc9\xcf\xc1\x38\x78\x5a\x99\xdd\xf6\xa0\xf5\x23\x45\x71\x89\xfe\x6d\xd3\xfe\x7e\xdb\xbc\x75\xdb\x90\xd2\x92\xdd\x16\x60\x94\xc2\x6e\x6b\x8b\xa8\x76\x1b\x6b\xdf\x96\x1a\x82\xb8\xa8\xfb\x3b\xbb\xad\x32\x6c\xe8\x52\xca\x6e\xfb\x78\xbf\x82\xb2\x13\x14\x7a\x28\x15\x8f\x48\x7e\x58\x61\xc0\x7f\x88\x30\x16\x47\x46\xed\xa0\xe6\x3c\x53\x02\x04\x68\x64\xbd\x09\x51\xfa\x85\x0e\xd4\xb5\x40\x73\xc8\xde\x1f\x94\x29\x0e\xda\xd8\x91\x13\xe1\x7c\xb0\xe3\x0b\x27\xce\x77\x01\xd2\x07\x74\xd9\x3d\xfa\xfa\x70\x2e\xc9\xd1\xc7\x9a\xd3\x05\x00\x65\xc8\x00\x09\x32\x69\x29\x64\x83\xd9\x16\xce\xbe\xa6\x11\x86\x4f\xcd\x15\x69\xaa\x4e\xe6\x5a\x38\x65\x29\x71\x00\x7d\x5c\x55\x67\x1f\xcf\x6f\x2f\xe4\x0b\x13\x5a\xe8\xf5\x7f\xf2\x73\x3b\x4c\x09\xff\xe5\x61\xd0\xdc\x3d\x52\xc5\xf8\x5e\x01\x46\xaf\x3c\x28\x4b\xfc\x1f\x63\x80\x8b\x18\xef\x05\x97\xe2\x01\xe5\x6f\x49\x0a\x64\x11\x65\x77\x3c\x50\x4b\x0f\x1d\xda\x8f\x47\x3f\x15\x10\xa6\x55\xe4\xe5\x81\xe7\xff\x19\x8f\x87\x50\xeb\x8f\x00\x03\x61\x8d\xcd\x91\xec\x8e\xff\x61\x8c\xc3\xab\x44\x21\x23\x59\x07\xff\x4f\x2d\x3a\xf4\x12\xc7\x05\x03\x02\xc4\x00\x50\x4d\x8e\x2b\xbc\xf8\xaf\x86\x97\x93\x14\xd6\x51\x76\xb7\xbc\x74\x19\x27\x2c\xff\xac\xa8\x44\x07\x1a\x20\x3b\xce\x73\xd9\x69\x22\x54\xd0\xe0\x0d\x25\x02\x56\x8f\x53\x96\xc4\x42\x6c\x1a\x23\x48\xc3\x3f\x97\xd4\x6f\x9a\x83\x43\x83\x40\xfd\x39\x57\xfa\x5e\xd3\x61\x7f\xa3\x50\xce\x4d\xcd\x27\x04\xf4\x12\x93\x5c\xf4\x2d\x39\x76\xbe\x60\xf0\x8f\x97\x05\x50\x9c\xb6\xa9\x53\x9b\xde\x59\xd2\xa1\x84\xf6\xac\x32\x27\x3b\x14\x59\xe7\xe1\x9a\x70\x76\x49\x26\x84\xd7\x74\xa7\x80\x1c\xbe\xe7\x72\x35\xe8\x0c\xe4\xf2\x09\x39\x75\xf9\xc2\x56\x7a\xed\x1e\x26\x5a\xe5\xb5\x73\x6c\xb8\x2c\x27\x2e\x56\x9b\x2b\xa0\xdb\xbd\x62\x42\xa6\x5e\x17\xee\x39\x08\x30\x02\x57\x17\x2b\x2c\x05\x14\x29\xd5\x68\xf1\x00\xde\x06\xdd\xab\x2c\x8e\x0b\x8a\xec\x2e\xce\x52\x2e\xec\x97\x92\x4e\x5f\x50\xf1\x6d\xd9\x73\xb2\x3a\x8e\xdb\x80\x99\xb6\x6c\x55\x21\x33\xc9\x45\x3e\xa4\x3c\x52\x06\x5d\x30\x45\x2e\x3a\x8b\x07\x2a\xe8\x64\xd9\xd4\x0a\x6b\x47\x09\x05\x0b\xa2\x8e\xe0\x02\xf1\x14\x19\xf3\x90\xb4\x72\xc1\xe0\x21\xb0\xa0\x87\xcf\x8a\x18\xc8\x35\x9a\x8b\xc6\xc1\xc2\x2a\xed\x40\x5a\xf8\x85\x12\x4b\x75\x30\x74\x77\x02\xb0\xd7\xe8\xea\x38\x32\x54\xa4\x9c\x8d\xae\xba\x2b\x2a\xa8\x09\xab\x6c\xc1\xec\xd2\x85\xe8\x90\x5a\x17\xd5\xa4\x94\xb1\xdd\x00\x13\x8d\x10\xdf\x53\xfd\x14\xa1\x9f\x63\xf4\x1e\x61\x63\x1a\x58\xfd\x05\x6d\xed\x59\x3b\xa7\xfa\x0c\xa8\xaa\xb6\x38\xa8\x3b\x12\xb7\x77\xcf\x7b\x62\x6a\xf6\xf2\xe2\x4e\xd0\xac\x2b\x80\x43\xb0\xee\x58\x42\x91\xbc\x23\xf1\x24\xf8\x00\x4c\x2b\x6b\x48\x5d\xf4\xcf\xe0\x12\x7d\x99\xdd\xc9\x2e\xad\x7e\x3d\x4c\x1f\xbc\xcf\x13\x73\x0c\xcc\x4f\xfe\x7a\xa9\x3e\xf8\xc9\x93\x7d\x52\xd4\xf4\x71\xb6\x5e\xcb\xc3\x91\xd7\xc2\xb0\xfc\xe2\x36\x0a\x81\x7e\x8a\xe6\x59\x8d\xfe\x91\x7e\x0d\xe9\xc0\x23\x58\x07\x35\x81\x97\x96\x4a\x8d\xbe\x9c\xec\xd4\x05\xd7\xec\x2e\x40\xc6\x6d\x69\x50\xeb\xa6\x2d\xba\x2d\xa3\x91\xb4\x6d\x97\x4c\x6e\x9f\x14\x59\x73\xde\xa6\xe8\x87\x50\x52\xf4\xf6\xd1\x28\xd2\xf2\xf6\x3a\xac\xbe\xad\xcc\xde\x3e\x9a\x1f\x4f\x17\xb0\x0d\x5b\x42\x32\xdf\xcc\x92\x77\x48\x31\x80\x6a\xcb\x79\xdb\xe5\x91\xec\x3e\xda\x79\x7c\x10\xc3\x27\x9c\x36\x0b\xfc\x8c\xae\xff\xa3\x54\xbe\xe1\xc6\x98\x76\x4f\x23\xe7\x1d\x51\x5b\x6f\x7c\xf2\x9d\x4e\x4c\xee\xfe\xd0\xc5\xb0\x98\xfe\x52\x82\x49\xcc\x7d\x62\xa2\x80\x61\xee\x2f\x65\xad\xa6\x7f\x7f\x92\x15\xcb\xfa\x93\xb9\x0a\xfc\xc9\x4b\x74\x32\x3d\x59\xae\xfa\x93\x97\x77\xfe\x91\xa1\xdf\xff\x64\xef\x1e\x25\x65\xbe\xb2\xcb\xde\x2d\x8b\xbf\xb8\x77\x40\x86\x0f\xe8\x81\x23\x1e\x1c\x58\xfd\x11\x9b\xd6\x45\xe3\x91\x2d\x83\x41\xee\x78\x27\x43\xca\x18\x13\xbd\x5b\x4c\x48\x3b\xf3\xcc\x7f\x5d\x74\x27\x6b\xa2\xfd\xa1\xed\xbf\xdb\xb3\x7b\xf2\xd6\xfd\x29\x70\xb8\x6f\x32\xb8\x7b\x66\x07\x7e\x8f\xf8\xd1\xa2\xbc\x5b\x7b\x57\x20\xf8\xaa\xff\x65\xcd\xbd\x30\x3a\xc9\xf1\x6e\x5d\x7b\xca\x56\x7e\xde\xaa\x1b\xe8\x43\x30\x2d\xd1\x06\xfa\xbf\xd4\x54\xd9\x1d\xb8\xb6\x4e\x19\xb1\xfe\xaf\xb1\x77\x54\xd8\x9d\x99\xf0\x31\xe2\xda\x73\x60\x4d\xbd\x8c\xd6\x34\x05\xfb\xf6\xb9\x06\xd5\x5e\xd5\x55\xff\xab\xc3\xa1\x19\x4c\x18\x53\x10\x25\xf8\x77\xc8\x34\xeb\x2c\x53\x33\xe9\xfb\xff\x56\xf7\x0f\x4e\xd6\x32\x82\x36\x8d\x6e\xdb\xb2\x29\xbf\x9c\x75\xf8\x43\x4d\xbf\x43\x78\x31\xf8\x73\x58\x86\xad\xa7\x7c\xf4\x5f\xde\xfa\x2e\x7d\x6b\x4a\xaa\x8e\x58\x28\xd2\x6f\x8d\x22\x02\x67\xdd\xb7\xb7\x4e\xcc\xbb\x18\xa7\xc4\x44\x55\xe9\x0c\x38\x65\x4a\x8c\xa9\xe7\x76\x64\x64\x17\x04\xff\xbc\x80\xeb\xa4\xd7\xc7\xf8\xee\x55\x6b\x4f\x64\x32\xe0\xf9\x90\x2f\x1d\x59\x74\x98\x3a\x34\xc1\xfe\x5c\x07\x86\x4f\xbb\x39\x2e\x30\x0c\x5f\xe7\xe9\x7f\x27\x26\xd5\x99\xe9\xcf\xd9\x85\xed\xaa\x15\xb3\x77\x17\xc3\xbc\x74\x59\xed\x65\x1e\xe2\x7a\x19\x5f\xd7\xc8\x80\x49\x98\x22\xb8\xaf\x50\xe6\xb7\xcc\xe0\x65\xea\x2d\x83\x2f\x70\x57\x1e\x43\x36\x5d\x39\x4c\x01\x65\x08\x1b\xce\x9e\x65\x3d\xc4\x21\x81\xdb\x1a\xf6\x8b\x80\x2c\xf4\x7c\xa4\x56\x90\x26\x99\xe6\xa8\x5f\xcc\x10\xbb\x8b\x1a\x96\xa9\x5b\xc9\x1f\x97\x57\x2b\x0d\xaa\x1c\xcd\x94\x48\x4b\x32\x55\x8b\x32\x1d\x70\x90\x65\x06\x15\x0a\x80\x16\x04\x09\xc6\xb7\xc2\x6c\x71\x40\x10\xb7\xc5\x5f\x20\x43\x75\xfc\x35\x55\xd9\x52\xc2\x11\xe2\xfc\x5f\xe9\xed\xb3\x40\xc6\xea\xf8\x2b\xe5\x3a\xbc\x99\xb4\x4c\x32\x79\xf8\x31\xd1\x3b\xc6\x20\xbd\x32\x3b\xf2\x32\xda\xaa\x3e\x53\x32\xe1\x1c\x4c\x1e\xfd\x60\x5b\x43\x35\x6a\x56\x32\x3b\xa9\x53\x81\x37\xac\xf3\x47\xcf\xfd\x4e\x1f\xe6\xfc\xc7\xbd\x74\xe8\xf6\x0f\xf9\x39\x9a\xd2\x44\x00\xae\xca\xf6\x08\x49\x55\x24\x9a\x08\x6e\xba\xfa\xc7\x03\xf6\x7e\x81\x19\xd7\x74\x10\x70\x72\xab\xc8\x46\x6a\xff\x08\xb9\xee\x42\x65\x49\xe9\x1f\x98\x56\xfa\x47\x2a\x08\x49\xb5\x44\x09\xfa\x83\xc5\xd8\x0d\xf3\x8f\x16\xa2\xfe\xd9\x72\x40\xda\x1f\x0d\x21\xb6\x5a\x95\xe5\xdc\x03\x29\x59\x5c\x5c\x42\xef\xed\x06\x77\x4f\x9c\xe6\x85\xb0\xa3\xb6\x2d\x2e\xf6\x9d\x27\xbf\x88\xff\x38\xfd\x77\x6a\x0c\x2a\x4e\xeb\x6f\xfc\x73\x85\x3a\x07\x72\x75\x94\x1f\x2d\xcf\x0e\xc9\x6b\x30\x3a\x00\x2c\x8c\xcd\x07\x19\x99\x49\xd1\xcd\x2c\x3e\xbc\x47\xed\x26\xd7\x6b\xb7\x0a\x3b\x37\xa0\xa3\xd0\xe2\x31\xdd\xb2\xe8\xbc\x7e\x72\x6f\xc1\x8b\x3d\x97\x24\xcc\x5f\x5f\xe1\x35\xfe\xab\x3a\xec\x80\x76\xfd\xcd\x1d\xb1\x32\x74\xc6\x9c\x6b\x6a\x67\x45\x10\x19\xfa\x9e\x95\x0c\x0b\x3b\x9b\xcf\x9e\x8a\x5f\xe1\x91\x7b\x0e\x5e\xa6\x0a\x6f\x8d\x81\x10\xe1\x87\xcb\x93\x04\x2b\x16\x40\xfd\x2f\x27\x5b\xd9\x74\xce\x22\x20\x6b\xa9\x51\x8e\x49\x05\x63\xbe\xf2\x5c\xfe\xc1\x12\x1b\x58\xad\x28\x27\xf9\xd9\x51\xff\x13\x77\x62\x3b\x4c\x84\xfc\x9e\x97\xf6\x3b\x26\x78\x3e\x7b\x9c\xcf\x70\x02\x63\x92\xcf\x80\xfa\x00\xc0\x17\x75\x73\xee\x75\xc5\x51\xc4\xea\x83\x5d\xa7\x29\x9f\xc8\x7e\x49\x6e\x9b\x52\x9f\xbe\x26\x5b\x90\x75\xcf\x71\x75\x88\xbd\x57\xfc\x67\x6d\x03\x8c\x9f\x60\x77\xfe\xc7\xbc\x4a\x7a\x1a\xe0\x17\x0a\x64\xb3\xad\x32\xe3\x2d\x50\x95\xd6\xe6\xc7\xbf\xe9\x1c\x23\x3c\xd9\xbf\x99\xcd\x33\xd3\x26\xee\x78\x4c\xdf\x0e\x01\xfd\x7d\xfc\xfb\x92\xd7\xdf\x59\x4d\xf3\x31\xa6\x4e\x60\xea\xe4\x29\x68\x37\xb1\xa4\xe3\x72\x14\x4c\x48\x26\x4c\xb9\x37\xd4\x7c\x91\x6b\xa3\xc4\xcd\x5c\x64\xce\x60\xc1\x9e\x6c\x43\xc3\xcd\x12\xe2\xd4\x60\x95\x1f\x4d\x76\x52\x2d\xd0\x39\x26\x1d\xca\xbc\xa6\x80\x56\x7f\x96\x99\x35\x69\xbd\xe0\xe6\x29\x99\xb0\x32\x27\x9b\xf9\x51\x39\xce\xd3\xd9\x23\x0a\xb2\x53\x79\x9d\x67\x0a\xbc\x52\xd2\xb9\xce\xf0\x56\x01\x60\xf1\xcb\xfc\x85\x90\x3d\xfe\xc5\xf7\xd1\x51\xb8\x14\xc3\x3a\xff\xdb\xc5\x4f\x2b\x6b\xfa\x55\x66\x76\xaa\x32\x67\xe9\x9a\x54\xc0\x56\xb7\x68\xc8\xd5\x1f\x57\x9c\xff\x19\x23\xe0\x92\xba\xb2\x2b\x65\xf2\xe6\xfb\x27\x9b\x08\x5a\x65\xee\x91\x19\xef\x30\x42\xc0\x34\x65\xa1\xb2\x13\x02\x6d\xb8\xa9\x0b\x32\x12\xa6\x9d\x56\x8b\xda\xd5\xbf\x9a\x07\x79\x1e\x5a\xa5\xbf\x4a\xfb\xdd\x73\x17\xfa\xa6\xb3\x5f\xd8\xc1\xca\x34\x8e\x89\x00\xba\x15\x59\x2c\xb3\x94\x41\x65\xd9\x12\xfb\x54\x61\xd6\x59\x3d\x38\x75\xd4\xd6\x69\x04\xcb\xcd\x3a\x25\x41\xdd\xfb\x0d\x5d\x67\x53\x73\x84\x35\xa6\x1d\xb2\xd0\xda\xd8\xfb\x57\xbd\x0d\xa8\xd5\xd9\x58\x4b\x58\xb5\xd3\x38\xa9\x54\x34\xe7\xce\xc7\xf6\x3c\x04\xe1\x06\x05\xae\x2b\xd3\x94\x61\xea\x47\x95\x88\x93\x70\x4c\xa7\x78\x8c\x8c\xeb\xad\xbf\xa0\x18\xe4\x97\x16\xa7\x35\xdc\xd2\xae\xa9\x0a\x2a\x33\xf2\xab\x99\xee\x1b\xc1\xaa\x45\x07\xd0\xaa\x41\x2b\x96\xe9\x82\xe4\xcb\xa5\xf0\xd7\x5e\x9f\x56\x5b\x24\x62\x7b\xd3\xaf\xdc\x24\xf7\xeb\x03\x47\x2f\x7e\x7d\x64\xcf\x49\xc9\xfa\xc8\x01\x23\xd7\xfa\x68\x74\xd1\xa4\xce\xac\x8b\xbb\x40\xb0\x83\xee\x57\x49\x85\xc6\xb3\xe2\xb3\xfb\xb9\xa6\x47\xae\xac\x1e\xdf\xbe\xda\x24\x6b\x1d\xa3\xd0\x2a\x03\x43\xff\xd6\x55\xaa\xe3\x60\xa6\xd5\xe4\xea\xfd\x31\x3a\x1e\x72\xbd\x22\x0a\x8b\x82\x58\xfd\x33\xf4\x51\x60\xf5\xd3\x5a\x69\x9d\x95\x90\x91\xb5\xca\xab\x98\xe1\x1e\x68\xb4\xc3\x59\x9f\xd5\x1a\x54\x2f\x67\xd0\x4f\xea\xea\x9b\xc1\xc8\x18\x39\x3c\xdb\x5c\x7e\x9d\x14\x54\x80\x9b\xa6\xdf\xaa\x81\x5f\x83\x1d\xca\x8b\x85\xbb\x91\x59\x38\xdd\x11\x52\x64\x62\xb9\xee\xee\x5c\xfb\x08\xb5\x72\xb7\xc9\xaf\x5d\x3a\x9f\x60\x9e\xb2\xfb\x35\xb8\x1f\xaa\xd2\x57\x75\xad\xe6\x20\x3c\x7b\x0f\x3a\x54\xeb\x43\x49\x3e\xb7\x82\x04\x55\xbf\x8d\x6c\x08\xe5\xd1\x72\x5f\x81\x0f\x05\xf3\x5f\xca\xe3\x67\x6d\xf0\x5d\xcd\x7b\xc7\x63\xdc\x59\x43\x29\xbd\x97\x56\x8d\xeb\x53\x59\x4e\x2a\xd8\xa9\x30\x3d\xc4\xe8\x1e\xe3\xdf\xa1\xb3\xf0\x3f\x6a\xd8\x27\x5d\xe9\x43\x55\x7a\xf6\x6b\xf4\xa8\xb3\x16\x42\x8a\xda\x60\x88\xf0\x11\xa9\xf1\x40\x44\xb5\x9c\x2b\x9d\x6b\x58\xfa\x20\x2f\x93\xb4\xd9\xf5\x4a\x11\x9f\xc5\x33\x39\xd3\x7e\x0e\xe5\xe7\xa5\x0c\xc4\x26\x86\xf7\x19\xd9\xaf\x65\xc7\x81\x80\x5f\xcb\x8b\x05\x5a\x2a\x4e\x41\xfc\x5a\x29\x3d\x5b\x10\x56\x0d\x94\x30\x0a\x1a\x46\x95\x17\x66\xa4\xa7\xa1\x43\x13\xe2\x58\xd6\x7d\xd8\x51\xa4\x21\x36\x6b\xe9\xed\x5c\xb5\x53\x58\xdb\x15\x7f\xbe\x75\xb1\x0b\xf7\x0e\x01\x35\xa9\xfd\x69\x23\xfd\xe0\xb4\xd8\xaf\x1f\x0e\x14\x2b\x9e\x07\x66\xef\x1f\x49\x3e\x03\x5d\x4a\xef\x3a\xa4\x67\x58\x68\x6d\x9b\x44\x5e\x07\x18\xcf\xc7\x9c\xb3\x12\xf7\xec\xfd\x13\x86\xd6\x69\x8f\x03\x11\xef\xe3\xcf\xa4\xc9\x1d\x90\xd6\xbe\xf7\x8c\xb3\x6e\xf7\xff\xa8\x76\x57\x65\xed\x23\x0a\xe1\x5e\x83\x1b\x63\xa6\xe0\x62\xd6\x61\x54\x73\x3f\x66\x57\xfe\xb8\x76\xc7\x5d\x8c\x49\x43\x7b\xc6\xae\xf0\x50\xc8\xae\xb0\xff\x67\xea\xd8\xff\xab\x8d\xfd\x5b\x01\x3b\xb9\x4f\xc7\xdb\xec\xec\x7f\x53\x54\x43\xe9\xfa\x7f\x95\xac\x7f\xe9\x58\x9f\x14\xa3\x9b\x5e\xf4\x6f\xb5\xe8\xe0\xce\xd1\x31\x75\x0d\xe7\x93\x82\x73\xe8\x2c\x77\xe3\x1d\xef\xa4\xcf\xfc\x4b\x9d\x39\x94\x94\x2f\x6d\x62\xe2\xcc\x58\xf6\x61\xe5\xe0\x7f\x17\x37\x4a\xae\x2b\x16\xff\xd2\x12\x3e\xab\x02\xff\xd6\xcd\x4d\x6e\xd4\x50\x28\xea\xce\x13\x37\x6d\xef\x4d\xbb\x7b\x93\x0a\xef\x49\x83\xf7\x97\xce\xee\x8c\xda\xd7\x55\x67\xf7\x39\xc2\xb3\x67\xcb\xb3\x8f\xd3\x4f\xbf\xfa\xaf\x35\x24\x2d\x3a\x83\x43\xb2\xae\x21\x4b\xd1\xda\x0e\x83\xf5\x67\xd2\x96\x4d\x9c\x0d\x4c\x4a\x12\xb2\x7f\x3e\x65\xe6\xf0\x0c\x67\xef\xa9\xba\xa6\x2d\x42\x26\x07\x5e\x7b\xff\x07\xad\xb4\x5a\xf2\xcf\xd1\x70\x9e\xdf\x0b\x15\x65\xd9\x66\xc0\xd8\x75\x11\xe5\x26\x14\xfe\x34\xac\x4a\xf2\xab\xa4\x07\xfc\xfb\x15\xee\xef\x14\xec\x6f\xb7\x4e\x79\x4c\xd0\x9e\x31\x7d\x34\xaa\x66\x56\x29\x3f\x3d\x25\xd8\xab\x92\xed\xde\xa2\xc9\xf5\x16\x3d\x34\x70\x77\xfc\xfe\xfe\x4f\x4b\x29\x65\x4e\x00\x04\xb0\xe7\x9b\xf5\x75\x83\xfb\x9a\xbb\x3d\x27\xd9\x51\xca\x4d\x7f\x4c\x91\x64\x37\x65\x1d\xe4\x48\xf5\xac\x33\x2e\x8f\xff\x86\x7d\x0e\x23\x04\x5d\xdb\x02\x59\x81\x66\xcf\xd3\x15\xa2\x7e\xaa\xa8\x8a\xc2\xcd\x51\xd8\xbc\x4e\xac\x14\xf7\x54\x92\xd3\x08\xc3\x69\x5d\x9b\x61\x24\xa9\x61\x51\xfb\x6c\x90\x48\x00\x4d\xe3\xdd\x19\xe1\xdd\xa1\x6d\x99\x3c\x6d\x87\x4a\x80\x25\x43\x37\x31\x9f\xad\xe8\x5f\xd3\x59\xc2\x73\xac\x20\x9f\x8d\x19\xb3\xd9\x07\x6f\x2e\x62\x06\xb2\xd9\xfe\xc5\xd6\xb7\x2e\x28\xd7\x63\xd4\xfe\xcd\xe5\xd5\xd4\x3b\x60\xbb\x1d\x33\xf5\xcd\xf7\x02\xb4\xe4\x52\xfb\xf9\x04\xfb\xb2\x71\xd2\x8b\xde\x19\xe4\x8f\x6e\xe4\x6f\x3e\x4f\x4b\x8a\x6d\x73\x92\x11\x1b\xc5\xf5\x0a\x38\x8c\x9c\x46\x6b\x07\xdd\x17\x0e\x37\xfd\x66\x5c\x3f\x86\xec\x98\x7e\x74\xdb\x8b\xa0\xc3\x3c\xb2\x8d\xec\x59\x3b\x1c\x6e\x6c\xa3\x6b\xd2\xa7\xa7\x0c\x3c\x62\x7e\xbd\xb1\x7d\x6e\x31\xe5\xb9\x56\x6f\x07\x52\x97\x60\xc4\x80\x8d\xc8\x2d\x95\x14\x41\xdf\xbe\x9f\xa9\x6c\x88\x2e\xbb\xbe\x92\xdd\xf4\x2c\xd8\x6f\xa3\x93\xfc\x92\x0c\xad\x6c\x52\x37\xf3\xdc\x48\xd8\xa9\xec\xb2\xaf\xff\xfd\xd7\x82\x86\x0e\xf9\x59\x85\x7c\xc7\xf8\xb4\xb1\x12\x23\x1c\xb5\x83\x2c\x43\x99\x16\x68\xd3\xc6\x10\x60\x52\x07\x8d\x7f\xe6\xe9\xb0\x66\x67\xde\x77\x56\x75\xc8\x13\xb1\x7e\x03\x21\x0e\x55\x2b\x4f\xa0\xce\xd2\x23\xe1\x34\x64\x4f\xe5\x3f\x7b\xa3\x10\xd0\xf7\xc5\x4e\xc7\x4b\x61\xd9\x4b\xdd\x1d\x67\x32\xff\xd1\x0a\x9f\x3d\xb6\xdd\xc2\x76\xfe\x4c\xfa\xe1\xff\xa3\x15\xfe\x3f\x4a\xe1\xa1\x8e\x3d\xba\x51\x25\x67\x45\xee\x5f\x7a\xdc\xbf\xd4\xb8\x93\x09\xa5\x9f\x81\x60\x0a\x1a\x4e\xd7\xb6\xb1\x2f\x15\xce\xc5\xe5\xf3\xff\xe0\x58\xad\x87\x72\x77\xaa\x63\xe7\x27\x9d\xd3\x22\x0d\x4c\xed\x31\xac\x49\x56\xb9\x53\x80\xf3\x1c\x68\xd2\xd0\x3e\x2b\x68\xff\xd2\xcf\xde\xd5\xb3\x87\x39\xbf\x87\x9a\x76\xe2\x52\xa7\x7f\x42\x9c\x72\xea\x1c\x23\x25\xee\x74\x4d\xf1\x81\xe3\x07\x3c\xc7\x47\xfd\xaf\xa1\x91\x85\x33\x4d\x3b\xa6\x90\xdf\xab\xf6\xe3\x44\x65\x52\xb4\x4e\x26\x4c\xf1\x4e\x8a\xd6\x3b\xdb\xa3\x16\x6e\x66\xaa\xff\xe2\x26\x4f\xac\xd0\xe1\x6b\x93\x29\x7c\xed\x31\x0d\xb5\xec\x8a\xf5\x9b\xe6\xd5\x5b\x57\xb1\xae\xb0\xc7\xf6\xa5\x6d\x5d\x2d\xba\xd8\x5b\xe3\xfb\xfc\x90\xba\xd8\xfb\x36\xd4\x50\xcd\x0e\x2c\xf3\x9f\x7d\x84\x3c\xb4\x22\x40\x89\xba\xeb\x39\x3c\x07\x30\xab\x69\xff\xd2\xca\x4e\xa5\xec\x5b\x9a\x3e\xe1\x1d\xa6\x74\x0e\xa5\xec\x5f\x3a\xd9\xb3\xc7\x84\x3d\x94\x34\xf2\x9e\x27\x08\xff\xf3\x0b\xbb\x1b\x00\xb3\xa1\x93\xff\x25\xbd\xc3\x35\xe9\x6e\x9f\x14\xb6\xff\x57\x2b\xbb\xf0\xe8\x13\x6d\x82\x23\x5d\x07\xe4\xce\x67\x80\x69\x6c\x8c\x6e\x4c\x31\xa2\xf6\x28\x3d\x65\x93\x16\x54\x32\xbd\xa3\x05\xc3\x51\x45\x61\xed\xd0\xc2\x4d\x1a\x56\xa3\xab\x5f\x0e\x25\x02\x7a\xf0\xbf\x53\xdc\xbf\x81\x76\xf0\xed\x5d\x99\xd2\xe8\x9d\xa6\x7c\xec\x95\x44\x7f\xd6\x71\x65\x03\xcb\x2f\x25\xfa\xc5\x40\xf0\x1d\xa6\x90\xec\x28\x36\x86\x85\x26\x92\x14\x30\xd9\x16\xc2\x68\x82\x91\xb7\x82\x2d\x78\xee\xf9\x13\xfe\x2a\x62\x4a\x00\x34\x2f\x14\x57\xc3\xc5\xe2\xdd\xa6\xf3\xb7\x88\xd6\xaa\x73\x2b\x63\xb4\x20\x63\xf8\xd7\x5c\xbe\x15\xf9\x9f\x6f\x7d\xf3\x5f\x0a\xe6\xa1\x5f\x7e\xfd\x51\x35\xf3\x42\x7a\xf1\x77\x1d\xb5\x84\x56\x28\x92\xc4\xc3\x6d\xa7\x9f\xee\x8f\x1c\xce\xaa\x96\x22\xee\x89\x1d\xb8\x0a\xa4\x0a\xe7\xa1\x53\x5e\xab\xd2\xb7\xba\x79\xa8\x98\x37\x27\x99\x09\xee\x4a\xe7\x87\xce\x79\xa2\x51\x3d\xa9\x80\x5e\xf5\xce\x7f\x75\x9c\xc7\x23\xba\xf0\xf3\xad\x5f\x5e\xd5\xcb\x8f\xf1\x1a\xac\x79\xf0\x2b\xc2\xf7\xc7\x43\xa7\x31\x02\xad\xbf\xe9\x98\x7f\x48\xc1\x61\x35\xcd\x50\xa7\x75\xf5\x81\x91\x77\x1a\xcf\x21\x14\xd0\xda\x0f\x16\xdd\xbd\x16\x91\x1b\xa9\xe9\x2b\x72\xa0\xf7\x6c\xdf\x21\x77\xac\xa7\x9b\x24\x50\xe2\xd7\xc1\x64\xc7\x5a\xab\x3a\xfe\x08\xd0\x92\x8e\x53\x53\x9d\x1e\xf3\x9a\xec\x48\xab\xee\x41\x1c\xdf\xe7\x4e\x47\xe2\xbd\x56\x7f\x24\x29\xf0\x32\xec\xbf\xcb\x9f\x9b\x89\x9a\x00\x65\xea\xc0\xdf\xce\x34\x29\xe9\xac\xb8\xef\x6d\x88\x7e\xb3\xfb\x31\x15\xc8\x4a\xc7\x94\x0b\xec\xd4\x60\x8f\xd4\x27\xc5\xaa\x1c\x81\x2a\x93\x47\x26\xa7\xf9\x9c\xf5\xd0\x0b\x0e\xa0\x6c\x5f\x47\x7a\xf7\xde\xe3\x48\x6c\xa9\x47\x8b\x35\xcc\x0b\x72\xaa\x5e\x1e\x81\xb6\x69\xfe\x6d\xcc\x28\xb0\x36\x26\xe4\xa7\xeb\x85\x7f\xba\xf7\x68\x72\x27\x4e\x3d\x60\xbd\x6a\x7d\x13\xc0\x09\xd8\xb9\xfa\xbf\x77\xc2\xcc\xee\xec\xf7\x00\xce\xb5\xc1\xfc\xe3\xbc\xfc\xf4\x1b\x8b\x05\x20\x29\x30\xb7\x9e\x87\xb1\xb3\x3e\x7e\xe1\x78\x4f\xe0\xf4\x5c\xa5\x9e\x1b\x02\x42\x7f\x79\x06\xab\x3c\x44\xf2\x95\x90\x88\x84\xd7\xfd\x70\x91\xa6\x79\xda\x29\x0b\xd2\xa9\xf6\x4c\x77\x5c\xce\xf4\x35\x82\x7c\x5d\x78\x31\xf5\x0d\x40\x79\xf4\x56\x67\x7a\x0f\xf7\x6f\xcb\xba\xf4\x39\x95\xf4\x02\x3a\x4b\xf1\xd1\x51\xf3\xa5\xee\x38\x9c\xd3\x28\xa4\x07\x3a\xa7\xfe\xcb\x98\x2a\xbb\xe1\xb3\xc5\xf8\x95\xb0\x79\x9b\xe8\x7c\x27\xe9\x2d\xd2\x23\x8e\x22\x4a\x8f\xa1\x2e\xf8\x4b\xdf\xff\x97\x4a\xff\x59\x57\x7f\xf6\x29\x2f\xbb\x9f\xaa\x3b\x55\xeb\x73\xd4\xf9\x52\xb3\xdf\x59\xfd\x2b\x4c\x2b\x2f\x19\x25\x2f\xb7\x8d\xdc\xbe\x5c\x98\xcf\xa2\x84\x85\x37\x01\xec\x66\xaf\x71\xae\x70\xb9\xcc\x0e\x61\x28\xda\x17\x5c\x0a\xbb\xd2\x8b\xa7\x1d\xa6\x53\x3f\xfb\xcb\xbb\xe9\x98\x93\xdc\x88\xca\xeb\x74\xfe\xf2\xf3\x68\x7f\xd9\xa2\xe1\xf2\xcb\xae\xe1\xfa\x68\x9b\xcd\x0a\x6f\x83\x59\xc1\x58\xf9\x5f\xbe\xdf\x11\xbc\x7c\x1e\x17\x13\x2e\x88\xaa\x2d\xdf\xcc\x7b\x24\x26\x3f\x93\x35\x2c\x32\xc7\x08\xc5\xfa\x0f\xc0\xcc\xc8\xb3\x2e\xe7\x2f\xa8\x57\x25\xd0\xab\xe3\x84\x16\xd3\x24\x68\x20\xfb\x0b\x83\xfa\xa5\x2b\xfb\x2b\xba\x5e\x7f\x2f\x4e\x2b\xae\x68\x57\x06\xaf\xe8\x7b\xff\x23\x58\xc3\x8b\xfe\x1d\x08\xc2\xe2\x8c\xf6\x3f\x59\x1f\xaf\xf4\xb5\xee\xbb\xd2\xd5\xfe\x0f\x8b\xce\x60\xfb\xfc\x52\xcd\xd2\x44\x1a\x8c\x7e\x22\x1e\xdb\x80\x58\x63\x11\x3c\x7a\x4e\xea\xb2\x00\xed\xdf\x9d\xa0\x82\xf3\x26\x2c\x7d\xfd\xa4\x4c\x52\xe7\x75\x4e\x47\xeb\x15\x09\xd5\x14\x17\xca\x34\x2f\xf4\x72\xd9\xa8\x25\x66\x31\xaa\xd3\x7c\xff\xec\x4b\x6b\xf8\x37\x6b\x3b\x0d\xff\xb5\xab\x5f\x76\xd8\x78\x9d\xd9\x11\x8b\x1e\x4d\x4c\x6b\xc2\xeb\x7b\x85\x7f\xf5\x15\x3e\xd4\x60\xb2\x72\x10\xa9\xcf\xc0\x12\x57\x2d\x8c\x40\x9a\xd3\x39\x30\xab\x73\xa2\xe9\x26\xd9\x00\x66\xa1\x5e\x04\x4e\x45\x00\x7e\x1a\xbd\x86\xb6\x40\xe0\xf9\x0e\x49\xd7\xbe\x66\x70\xce\xd7\x69\xc5\xf1\x1f\x4d\x6c\xb0\xb0\x67\x67\xfe\x4b\xdf\x0f\xd8\xf4\x24\xad\x5e\x33\xf3\x6b\x78\xec\x17\x00\x71\xb4\x7d\xe1\xc1\x74\xf6\x14\x89\xd9\x81\x9b\x2e\x82\x0c\x1b\xa6\xb4\xb3\xc7\xcc\xfd\xfd\x7f\xce\xff\x66\xe7\xfd\xcf\x31\x1b\x83\x04\x49\x6d\xda\x2d\x5a\xe0\xd1\xca\x52\xd0\xf8\xe0\x49\x7e\x20\xb8\x31\xae\x74\xa1\x76\xf6\xdf\xdc\x87\xb5\x79\xeb\x66\xba\x1d\xf2\x4f\x7e\x5f\xa2\x51\x84\x0f\xbe\x2c\x38\x01\xc6\xa3\x6e\x0d\x9f\xd7\x9b\x2d\x8c\xf9\xb2\x73\xc7\x48\x7a\xe7\x58\x85\xff\x35\x9d\xc7\x09\x98\xc2\x62\x45\x9b\x9e\xbd\xfa\xec\xd7\x54\x40\xbf\xb6\xc8\xbe\xb6\x83\x64\xda\xc2\x55\x45\x1f\x00\xc5\x4b\xc1\xe3\x02\x5f\xf4\xbc\xae\xb8\xcf\x4d\xb0\xf4\x79\x26\x4f\x6a\x09\x5a\x0d\xa7\x64\x4b\xf1\x2e\x63\x4e\x5d\xf0\x4a\xd7\x17\x5e\x27\x18\xa7\x98\xc5\xaf\x0e\x64\xbe\x2b\x5c\x7c\xf8\xe3\x1e\x77\x99\x0e\xb5\x8a\xf5\xfe\xb8\xa7\xa9\xe5\x59\xa6\xcb\x30\x05\x7a\x8a\x46\xfd\x28\x90\x1a\x60\xce\xa6\x9d\xb6\xae\xee\xff\x4b\xdb\x3f\xd4\xf6\xf3\x31\x8f\x9f\xc7\x6a\x28\xf3\x5f\xbb\xd7\xac\xcb\x4a\x41\x9c\x6e\x16\xdb\xa7\x9b\x34\xfc\x67\x8f\xf3\xb9\xae\xc9\x5f\x60\xe3\x7b\x45\x55\xe3\x3f\xd0\xfd\xd3\xf5\xf9\x7f\xa9\xf3\x37\x6d\xfe\xa0\x4d\xdd\x37\x2c\x5c\xe7\x73\xf0\x32\xee\x0d\x95\x10\x43\x0f\x9a\xff\x9d\x73\xc5\x2b\x10\x85\x6a\x9f\x12\xae\xb1\x96\x98\x6e\xab\x02\x56\x43\x1a\x7f\xa9\xa3\xc7\x20\xd7\x2b\x3b\xd8\xf7\x37\x37\x1c\x4e\xfd\x53\x81\x58\x69\x01\xa7\x83\x10\x93\xec\x0b\xd4\xbe\xf5\xc6\x82\x3b\x42\x5f\x09\x4e\xb1\x8d\x78\xbf\x8e\xbb\x71\xd6\xfd\xc5\x0c\x2f\xbd\xa9\x94\x14\xa7\xd9\x3b\xb9\x39\x84\xa9\x60\x53\x7c\xab\x17\xeb\x2b\xca\xb8\xde\x53\x92\x5d\xa2\x29\x29\x3f\x2c\xcf\x52\x5e\x20\xed\x62\x40\x8a\xca\xe3\x1e\xe1\xf4\x72\xa2\xa4\x96\xd5\x8b\x80\xa9\x26\xa2\x94\x2f\xbf\x7c\x7d\xf4\xa5\xad\x44\xe8\x94\xfa\xcb\xb6\x60\x80\xe6\x40\xbe\x0e\xad\xb0\xa1\x36\xf9\xfa\x9a\xed\xcd\xbb\x6d\xc4\xfc\x2a\x85\xe6\xa3\x9f\xce\x94\x8b\x93\xe3\x72\x45\xd3\xd8\x2f\x4c\xfa\x2f\xae\x0a\x8b\xef\x20\x1b\x9a\x6a\x0e\xd9\x29\x35\xc9\xc6\x6f\xc2\xf7\xd7\x3f\x29\x0f\xd4\xbd\xb3\xfe\x4b\x13\xb6\x93\x06\x36\x47\xe6\xd4\x68\xfc\xd3\xf6\x60\xa9\xae\xe9\xfa\x91\x50\x27\x6d\x56\xbb\x2b\x24\x1f\x4f\x5e\xa7\xbc\xad\xbb\xcb\x39\x7d\x00\xc3\x74\x2e\x56\x6a\xb8\xbe\xb8\xbe\xcf\xf8\xd5\x1a\xbe\xea\x7f\x4d\x5f\x45\x51\xc7\x36\x5d\xc7\x1c\xeb\x84\xd5\xa4\xa9\xe9\xc2\x74\x99\x9d\xbc\x1f\x7f\xf1\xcb\x72\x98\x4e\xe6\xc8\x5a\xe8\xc0\x53\xaa\x70\xd8\x45\xff\x0d\x3b\x15\xa5\x3d\xc6\xc6\x5e\x91\x91\xb4\xcf\x1d\x4a\x7b\x8c\xcd\x84\xd2\x1e\xf3\x8d\x1c\x61\xab\x9b\x6e\xc8\x40\xa0\xa9\x90\x48\xc2\xc3\xc5\xd2\x0e\x59\xaa\x13\x0d\xbf\xd7\x34\xa3\x2a\x2d\x6f\x38\x26\xc0\x23\x78\xad\x5b\xb2\x2c\x1a\x89\x32\x46\xf3\x68\xe2\x19\x57\x99\x7b\x12\xe5\x58\x85\x5a\xb9\xfa\x44\xb1\xdc\xc7\x23\xcd\xa5\x7d\x9f\xaa\xba\x48\x0f\x67\x40\x43\x54\x82\xf4\x57\xcb\xee\xaa\x3b\x4f\xd5\x8d\x83\x0a\xe2\xa4\xd6\x78\x40\x50\x5d\x5e\x59\xdf\x80\xaa\xef\xc8\xbc\xe8\x6d\x42\x01\x5a\x49\xeb\xd8\x82\xac\x32\x7f\xa4\x27\xec\x8e\x49\x37\x47\x62\x0e\x88\xf8\xe1\x60\xb4\xc7\xad\xfe\xe2\xc5\x79\x9d\x91\x55\xd4\x5a\x08\x02\xf0\x35\x50\x56\x90\x20\xde\xe1\xfe\x7a\x4c\x01\xa6\xdb\x52\x97\x85\x32\x68\x72\x7c\x9e\x08\x32\x59\x69\xca\xa8\x9d\x41\x01\xb3\x52\x7b\x46\xa1\x2a\x07\xa1\x63\xa6\xe6\x6c\xb4\x1b\x37\x8c\x04\x9b\x9d\xe5\x8a\x2e\x4e\x6b\xb2\x8b\x27\xd5\xd6\x2a\x35\xd9\x89\x42\x4d\x4d\xe7\xc8\xb8\xfa\x39\x1a\x0a\x59\x73\x85\x13\xe9\xef\xff\xbe\x99\xc9\x59\x6f\x2b\xb5\x1f\x4f\x43\xc8\xc1\x54\xf7\xc1\x3f\x7d\x9e\xa0\xd6\x5b\xb0\xd1\xcd\xee\x46\x0b\xa2\xac\x84\xf9\x20\xaa\x66\x1e\x96\xf5\x18\xa7\x13\x81\xaa\xb7\x1f\xe7\xcb\x5a\x35\x07\xff\x36\x5b\xdd\x0d\xae\x58\x3e\xd4\x9c\xa6\xef\x48\x8b\x5f\x7b\x8a\xd2\xb8\x6c\x5f\xa1\x78\x3b\xa8\xb7\x27\x17\xba\x82\xfa\x6d\x85\x8a\x59\xff\xa8\xae\x93\xba\x5c\x70\x17\xde\x16\x0a\xca\x89\x02\x5f\x04\xdb\xb8\x65\xb0\x3b\xff\xcf\x00\x55\xf3\x58\xf7\x55\xe8\x6e\xea\x21\xdb\x81\x52\x2d\x5a\xdb\x5a\xc6\xbb\x71\xdf\xbe\xe6\x31\xd0\x2c\x65\x94\xdd\x81\xc2\x4a\xc8\x1a\xd2\xae\x3d\xc5\x7e\x90\xdc\x39\x29\xf0\x36\xed\xe4\x0b\xd6\xa4\xb5\xe2\x07\xfe\xba\x65\x82\x27\x24\x3a\x31\x78\xcb\xcf\x2d\xe3\x49\xae\x14\xc7\xd8\x0d\x9f\x6f\xf6\xbc\xdd\xc1\x1b\x8a\x02\xb4\x4c\xdf\x78\x66\x6f\x80\xc9\x7f\xbb\x6b\x7e\x85\xf3\xfe\xda\x46\x79\x7f\x6f\xa3\xbc\x6d\x1b\x45\xc0\xa8\x37\xef\x71\xfd\xfc\xed\xb7\x71\x3a\xf5\xf6\x7c\x13\xed\xdf\xe3\x0c\xc5\x20\x33\xec\xdd\x0f\x46\xde\x3e\x66\xc6\xa8\xfb\xba\x6f\x8f\x17\xfb\xa4\x63\x58\x04\x4b\x0f\x67\x0d\x53\xb0\x6c\xd4\xa0\xfc\x3b\x4f\x77\x47\x8d\xd3\xa8\xac\xb9\x28\xea\x96\xab\xce\x7e\xdf\x76\xfb\xc7\x72\x41\xd9\x9e\x86\x6c\x7e\x82\x06\x33\xd7\x11\xa9\x56\x4a\xd0\x56\x04\x98\xfb\x69\x4a\x42\x6e\xca\x5b\xab\x8c\x8a\xba\x97\x44\x5a\xcd\xa2\xce\x61\xd8\x72\xe2\x1d\xc6\x0b\x9b\x77\xf0\x9f\xa9\x0c\xc7\x2c\xfd\xad\xa3\xca\xfb\xeb\x08\xf8\x1d\xc6\xe1\xdb\x5b\x37\x07\xfa\xa5\x4c\x02\xad\x2a\xa1\x8c\x92\x93\x95\xe0\xe4\xab\xcd\xdb\xa8\x6f\x2a\xf6\xff\x66\xa7\x7f\xdf\x73\xea\xde\x1a\xe1\xdb\x76\x4b\x14\x32\x96\xb7\x26\xf8\xfd\x95\xc3\xe1\x3d\x16\x10\xef\xf0\x66\xb1\xa6\x65\x0a\x56\x98\x91\xb7\xe3\x28\xe8\x0d\x49\x2b\x20\x0c\x79\xcc\xdf\x0d\xba\x7e\x11\x68\xd8\xdc\x13\xa7\x9b\x04\x83\xad\x33\xf7\x67\x7f\x6a\xca\x79\x3b\xf7\x9d\x6e\x76\x3b\x6f\x56\xd3\xa6\xbe\x5a\xd4\xdb\xde\xef\xbe\x2b\xf0\xe1\xf3\xc4\x4f\xd6\xbe\xe4\xf7\x27\x3f\x7f\xf2\xf3\xf1\x93\xb7\x1f\x99\xa0\xfc\xe4\x2e\x02\x66\xff\xc9\xbb\x7b\xac\x2a\x01\x59\xf1\x9d\x0e\x27\x98\x42\xb5\x76\x08\xda\xcb\x3b\x54\x7c\xd5\xdd\x2f\xf8\xef\x52\xed\x9f\x0a\xe1\xb7\x3a\x19\xac\xf7\xc7\x0f\xe4\x6c\xe7\x9d\x97\x46\x77\x2c\x93\x77\x7f\x86\x85\x44\xc6\xdf\xdd\x27\x18\x0f\x5c\x64\xdd\x7d\x97\xa6\x44\x78\x03\xe8\xa5\x2b\xa2\x4c\xbb\xcb\xff\x12\xe8\xc0\x2c\xa8\x3a\x7a\xac\x50\x58\x03\x84\x25\x1a\x81\xba\xaa\x50\xd5\x84\xa8\xe1\x1a\x2d\x19\x84\xe9\x02\x80\xa8\xa7\xdd\x33\x85\x4d\x15\xdd\x18\x2c\xdd\xb6\x27\x91\x22\x9d\xe0\x84\x51\x87\x2d\x41\xf7\x6c\xde\x29\xde\xf0\x00\x9a\x94\xad\x82\x2d\x35\xa9\x1b\xce\x38\xf6\x70\x26\x9a\x8b\xcf\x49\x2d\x7a\x8e\x84\xd3\xe2\x0b\x27\x95\x32\x2a\xce\x9a\xcf\x63\x9a\xb2\x8f\x59\xca\x1e\xfe\xd2\x43\x13\xf0\x97\x18\x3f\xbe\x2e\xfc\xa5\xb0\x92\x1e\x5e\x29\x94\x72\x01\x5e\x49\xff\xbb\x5a\x21\x50\x75\x58\xc0\x7c\x18\xb1\x4b\x62\xd3\x4a\x39\xe1\x82\x20\xb4\x15\x00\xf1\xa5\x35\x2d\x10\x00\x5f\xf9\x77\x5a\xfd\xb9\xb2\x44\xd2\x9a\x62\xb7\x3e\x3b\xba\xb0\xe4\xdf\xd3\xf1\xa0\xf9\x95\x61\xe9\x78\x98\x88\x71\x32\x48\x7e\x3a\xf0\x52\x72\x4f\xe7\xb2\x13\x54\xb7\xb0\x8c\xda\xc3\x65\x09\xa8\x1d\x6a\x3a\x25\x5a\x2d\x6e\xb7\x58\x2a\xee\x43\x4d\xae\xa7\xf6\xbb\xff\x51\xf7\x43\x09\xeb\x00\x10\xca\xe3\x86\x08\x87\xe0\x7e\x38\xbf\x09\x2e\xd6\x24\xa4\x8a\xcd\x43\x7e\x2e\xae\x52\x5d\x03\x05\x12\x85\x47\xa7\x38\xd5\x0a\x0f\x48\x3b\x03\xe1\x5d\x68\x40\xde\xb4\x0e\x8f\x2d\x3b\xa9\x51\xe1\x91\x9e\xd1\x61\xf7\x3c\x3c\xa8\xe3\x1b\x6d\x25\x3c\x92\x91\xa4\xe4\x20\xff\x07\x9e\xc2\x98\x82\x74\x6c\x61\xf1\xbc\xa9\x0d\x9d\x28\x30\x21\x8b\x49\x01\x5c\xa8\x00\x87\xb0\xec\x94\xee\x14\x16\xc4\x88\x1d\x01\x4f\xf8\x82\xe1\x4d\x5e\x40\x50\xa9\x78\xa0\x15\x42\xab\x04\xde\x20\x11\x81\xbe\x28\x5a\x2f\x2c\xaf\xb2\xbb\x8f\x80\x84\xbb\x7d\x61\xc9\x6e\x11\x82\xf7\x2f\x61\x08\x2b\x08\xeb\xca\xf9\x49\x58\xb1\xb8\x08\x7c\x52\x12\x94\xd9\x3c\x4d\xde\x29\x17\x74\xa5\xa8\x76\x15\xf3\x6e\x41\x10\x0f\x15\x56\x5d\x0b\x28\xc8\x86\xf4\xe6\x80\x32\xb6\x93\x14\x56\x0d\x32\xe2\x03\xd6\x54\x51\x96\xfe\xe1\x97\x17\x2a\x42\xf0\x52\xc4\xfe\xb8\x02\x98\xa2\x49\x78\xba\x25\x50\xcd\x7a\x0e\x4f\x1d\x24\xc2\xf3\x09\x83\x91\x3e\x9f\x94\x0b\x16\xb0\x71\x26\xa6\x96\xc5\x53\x5f\xc9\x28\xe0\x84\x21\x98\x2f\x0a\xc3\x0a\x4f\x8b\x47\xca\x72\x73\x2b\xa4\x85\x84\xcd\x1d\x2e\xf3\xcb\x37\x57\xd3\x19\x00\xda\xca\x3f\x37\x7a\xd9\xf6\xea\x1e\x10\x4a\x85\xbb\xe3\xe3\x53\xb7\x7d\x6c\x0e\x08\x83\xc6\x22\x60\x58\x81\x8c\x38\x64\x15\x84\x1e\x0d\x81\x49\x87\x29\xa6\xfa\x4b\x10\xe2\x2b\xa0\x75\xab\x66\x76\x65\xe5\x3c\x2f\xfc\xef\x55\x56\xa7\xf8\x15\xca\x2e\xb5\x20\x06\xff\x96\x8c\x8b\x11\x06\x42\x17\x82\xfc\x96\x80\x50\xa1\xb1\xfc\x0e\xd6\x32\xc3\x61\x05\x78\x5c\x48\xdc\x21\xd3\x77\xa1\xda\x99\x86\xa3\xfd\x64\x54\xd8\x73\xc1\x86\x6d\x40\x9b\x3b\x57\x9f\x2f\x2c\x28\x99\x3b\xa7\x4a\x4a\x03\x80\xbf\x73\x5b\xd3\x9b\x00\x11\x9d\xdb\x16\xe8\x60\x77\xb1\x00\xf4\x89\x6a\x38\x37\x3b\xf1\x02\xa4\x3b\x95\x2f\x9a\xe1\x0c\x89\x3a\xb7\x82\x65\xb8\x00\x5c\x35\x15\x60\x6e\xaa\xfd\x45\xf9\x69\x10\xc3\x13\x52\x85\x01\x27\x54\x31\x2c\x74\x14\xde\xc5\xc7\x7c\xe1\xb2\xca\x76\x05\xeb\x4a\xf1\x6e\x58\xf2\xf3\x4a\x85\x3c\xa6\xed\xe1\x1a\x72\x8b\xc2\xc5\x4c\x13\x92\x95\x4a\x0c\x17\xa4\xcf\x84\xab\xa0\x95\x5e\xe5\xd4\x05\xaa\x2c\x14\x91\x6c\x4c\x54\x42\xd9\xa5\xa6\x8d\x99\xa7\x4a\x30\x0b\xe5\x05\x83\x6e\x5e\xd6\x3f\x14\x6d\x44\xa5\xb0\x1a\x49\x44\x68\xfd\x48\x5c\x9d\x2e\x2d\x84\x9a\xf2\xe9\x63\x14\xd7\xdc\x87\x0e\xb5\xa1\x4f\x85\x7e\x24\xf4\x73\x44\x47\x47\xd5\x90\xcd\x06\x43\xfd\x83\x61\xd1\xbf\xe5\x87\xa9\x12\x27\x86\x62\x0e\xd1\x53\xe0\xe4\x13\x30\xb9\x12\xf3\x81\x17\x3a\x82\xf8\xac\x2a\xbc\x91\x35\x6f\x4e\x3e\xc2\x3b\x60\xf4\x0b\xef\xc6\x2c\xbb\x25\xcc\xe3\x27\x77\x31\x67\x47\xf9\x91\x05\x2c\x6e\x0e\xa5\x49\x00\x4b\x72\xeb\xc3\xd3\xee\x11\x51\x57\x93\x5b\xf7\x14\xd9\xe3\x00\xe3\xb0\x22\xb9\x75\xe4\x48\x72\x6b\x4e\x3c\x2b\x10\xa8\x32\x50\x93\x5b\x4b\xf5\x1a\x01\xeb\x51\x72\x2b\xfa\x3b\xa1\x10\xc7\x97\x1c\x8c\xcc\x3f\xd5\xd1\xc3\x49\xde\x26\x8e\x3f\xe9\xf1\xa0\xe5\x03\x7d\x4c\xa2\x10\xd9\xf4\xf0\x30\xf0\x0f\x2d\x20\x39\x39\x27\xec\x27\xa5\x07\x06\xe5\xf4\x90\x0a\x2a\x66\xcf\xf7\xf4\x68\x45\xbb\x8e\xb4\xc8\xcf\x71\xad\x96\x16\x77\x3c\x12\x11\xe6\x5a\xfc\xf6\xe5\x25\x39\x13\x6f\x42\xa6\x9d\x32\xd1\x12\x55\x3b\xd8\x72\x3c\x75\xf9\xab\x40\xfd\x1f\x95\x3a\x94\x96\x17\x07\xcd\xb4\x58\x8d\x4b\xcb\x8b\xdd\x65\x5a\x5e\xe8\x28\xd3\xf2\x82\x5e\x7d\x01\x65\xc7\x7b\xad\xb4\xbc\x38\xc0\xa5\x25\x2d\x92\x27\x02\xb9\xf9\x0b\xa2\x57\xc2\xd3\xea\xf1\x67\x3a\xd2\x59\x51\xbc\x09\x3f\x3e\x74\x4a\x7c\x71\x98\xfc\x59\x31\x8d\x56\xa0\x92\x46\x27\x4e\x66\x53\x5f\xec\x3d\x78\x9b\xd7\x4d\xfc\xf4\xaf\xce\x79\x8d\xd5\x79\xdd\xcc\x4e\x8e\xbb\xfc\xcb\x7e\x7f\x33\x6d\xb2\x3a\x10\x13\xf9\xb6\xb5\x2e\xa2\x29\xf5\x6b\xe9\x44\xb8\x55\x93\xfe\x87\x5a\xf3\x12\x3f\x28\xb1\x18\xb5\x68\x62\xa4\x10\x26\x80\xfc\xd3\x2b\x65\x8c\x2a\x1d\x92\xa8\xf7\x30\x29\xc6\x23\x5d\xa0\x49\xfd\x31\x20\xc9\x18\x2a\x32\x14\xfa\xbf\xf0\xa3\x9a\x57\x7e\xba\x06\x16\x80\x3a\x44\xd8\x2a\x8b\xe6\xdf\xf1\x31\x70\xaf\x80\x87\x6b\x28\xbf\x03\x72\xff\x12\x77\x2b\xd2\x71\x8d\x6f\x3e\xee\x97\xfc\x73\xa2\xc4\x59\x7d\x4e\x0a\xdd\x15\x1a\x95\xa0\xd6\x09\x88\x74\x40\xc7\x38\xc5\xc3\x10\x91\xce\x6d\xf3\xa8\x5f\xb8\x00\x94\xce\x7f\x2d\xc0\x2f\x04\x5a\x25\x71\x8e\xea\x94\x9e\x30\x90\x8a\xf4\x64\x8d\x4c\x4f\x4e\x50\x52\x0a\xa7\x97\x7c\x49\x34\x58\x3e\xe9\x15\xf0\xdf\x01\x83\x1e\x0f\x0e\x84\x29\x1d\xcf\x16\x41\xad\x9a\xa7\x83\x4f\xb3\x92\x49\xc8\x4a\x09\x15\x29\x69\x6b\x47\x13\x4d\xbc\x17\x91\x92\xd9\x05\x98\x53\x17\x23\x0c\x5d\x96\xea\xe2\x4b\x11\x4b\x2d\x55\x0e\x4a\x29\xa1\x0b\x43\xdd\xbb\xbc\x4e\xce\x0c\xe5\x0e\xf9\x8d\x97\xdd\x6a\x24\x32\x4b\x5a\x64\x86\xf3\x61\x4c\x17\x67\x69\xe9\xb2\x6f\xa2\x68\xc1\x84\x8b\x8e\x62\x46\xc7\x7c\xcf\xff\x30\x10\x60\x32\x2b\x2b\xa2\x54\x1c\x0c\xa4\xa3\xb8\x33\x50\x96\x5b\x2a\x2a\x9f\x17\x40\x56\x1f\x02\x24\x86\xb2\x24\xcf\xf1\x91\x3d\x41\xf1\x0f\xc4\x5c\x3c\x5e\x35\x83\xa2\x1b\x29\x5e\xfb\x93\xe2\x31\x15\x4b\x05\x0a\x5d\x48\xe9\xf3\x70\xda\xbf\x08\x64\xe8\x3e\xa9\x1b\x65\x2b\x4d\x8d\x8f\x73\xf9\x84\x55\x4d\x2a\xf6\xad\x25\x9c\xda\x07\x91\xad\x3e\x46\x26\x99\x65\x55\x6a\x76\x24\x69\x71\x59\xe5\xc7\x0a\x0b\x47\x32\x84\xf6\xcb\x65\x49\xcf\x07\xb0\x37\x90\xaa\x3f\x59\x51\xeb\x26\xf3\x3e\x96\x79\x0d\xac\x89\x55\xd6\xfa\xd8\x66\x4a\x55\x72\x54\xc6\x66\x0a\xfb\x7d\x33\xab\x35\xa0\x94\x17\x3e\x6d\x4d\xfc\x8a\x5a\xfd\xa9\x73\xab\xc4\xc1\x39\xd5\x76\xae\x48\x45\x83\x1a\x90\x9c\x9a\x70\x8d\x03\x45\x5b\x92\xb4\x2b\x14\x24\x1e\x21\xa5\xb6\xf1\x4a\x94\x00\x0a\xbc\x31\x44\xcf\xdb\x4e\x41\x7b\x40\x4a\x6d\x50\x6c\xdb\xce\xb9\x14\x11\x32\xac\x6d\xbb\x2e\x09\x04\xf2\x24\x48\x30\xc7\xe1\xd4\x22\x5b\x76\xd3\xa9\x24\xae\xd8\x81\xac\x3a\x21\x86\x28\x9e\xd5\x42\xd3\x1e\x00\x14\x55\x43\x9f\x41\x91\xaa\x13\x99\x13\xcc\x5e\x7a\xfa\xce\x75\x74\x33\xed\x5c\xd9\xa4\x04\xb0\x5e\xb6\x73\xf2\x54\x30\xe1\x17\xd4\x2e\x52\x6d\x65\x64\x8b\xef\xe9\x2b\x23\xae\xc2\xb4\x94\xda\xff\xa4\xe1\x69\x6a\x90\x02\x70\x4d\x21\x35\xcd\xd5\x4a\x46\x93\x51\x35\x8f\xaa\xca\x87\x57\x84\xa0\x7e\x7f\x32\xaf\x79\xa6\x37\x5d\xbd\x47\x77\xfe\x91\x1f\xa2\xf8\x3c\xf0\xe0\x3f\x7d\xec\x91\x6f\xfa\xac\xf7\xf8\x76\x30\x12\xf0\x07\xb9\xf9\xc1\xb8\x88\x9b\x16\xe9\xa3\x43\xc1\x8d\x0b\x18\xe9\x9e\x76\xf4\x92\xea\xab\x55\x50\x15\xfc\x4d\x7f\xa3\x03\xfa\xd3\x1a\x02\xc1\xfd\xf9\x3a\x7e\xf2\x55\x7e\xf2\x55\x7f\xa4\x7c\x70\x9e\x5a\x7f\x72\x7b\xb8\x87\xf4\xc2\xed\x41\xf9\x9c\x8d\x42\x9c\x1a\xe7\x3b\x20\xac\x4b\x4d\x57\xe0\x42\xa5\xc9\x37\xca\xbf\x07\xe1\x2c\xaa\x3d\x1e\xb7\x98\x2b\xae\x5c\xb6\x07\xfe\x1d\xd2\x49\xdb\x83\x7d\x03\x28\x3a\x97\xf6\x60\x4f\xd0\x1e\xfd\x71\x40\x7b\x84\x05\x9a\x3a\x11\x12\x55\x63\xe5\xa6\x31\x61\xb7\x09\xc4\x59\x90\x59\x95\x4d\x12\xa2\x37\x6b\x0f\x6d\x79\x0d\xc9\xc1\x96\x7b\x5b\x76\x26\x1e\x5f\xb2\xbc\x8a\x53\x20\x03\xb9\xdd\x82\x6a\x2b\x56\xae\x92\xa0\x75\x85\x81\x2c\x10\xc2\x5e\x0e\x90\x13\x5d\xc0\x0b\x43\x08\xf4\xf2\xa2\x3c\x5b\x97\xe2\xa0\x7a\x78\x73\x5b\xbd\xfd\xe5\x4f\xbe\xdf\x6c\x78\x1e\x2b\x54\xcf\xb1\x15\xf4\x7d\x4f\xec\xa0\xb7\xe7\xc8\x12\x59\x09\xb7\xe7\x93\x90\x9f\x08\x8a\x3a\xd0\x74\xcd\xdc\xe4\xeb\x36\x49\xfb\x86\xcf\xde\x36\xda\x72\x61\xdb\x36\x5d\x01\x36\xe9\x55\x5b\x3f\xc0\x68\x3c\xdf\x6c\xd3\xfd\x10\x6c\x00\x70\xf1\xdf\xd8\x73\xa3\x08\x0e\xc7\x1d\x27\xee\x08\x35\x95\x87\x0c\x45\x75\x19\x6f\xaf\xf0\x29\xc7\x41\xd9\x9a\x8d\x12\x8e\xdb\x71\x48\x9c\x47\xca\x47\x3a\xf5\x0f\x08\x0b\x6e\x07\xb6\xc8\xda\x61\xb3\x74\x22\x46\x77\x6a\xa3\x6d\xa7\xdb\xd0\x8d\xb7\x93\x43\x76\x83\xf8\x62\x74\x18\x4a\xe0\x4a\xeb\x1b\x8a\xfc\xf4\xe5\xc0\x33\xbe\xc6\xa0\x5e\x74\xaa\x2e\x4f\x69\x66\x16\xe3\x99\x90\xb1\xa7\xc6\x85\xae\x45\x00\xb8\xaf\xd9\x67\xfb\x9e\x7c\xb6\x79\xee\xd9\xbe\xe6\x9a\xed\x6b\xaa\xd9\x4e\xdb\xf7\x11\x64\xad\xbe\x9d\x18\xc6\x1b\xc4\x04\xb7\x2b\x38\x49\xad\x8a\xfa\x6d\x79\x6a\xe7\x64\x0e\x03\x55\x41\x35\x77\x28\xcf\xf9\xa9\x35\x7a\xd7\x56\x76\xaf\x24\x83\x30\x53\xcb\xae\x8d\xb4\xc0\xc0\xa0\xdb\x0a\x8d\x31\x7d\x6c\xd3\xbb\x08\xc5\x68\x5c\x02\x87\x8b\x8e\x58\x07\x24\x90\xea\x1e\x10\xaf\x8e\x1e\x14\xb2\xe6\xd8\x72\x65\x96\xfd\xc4\xea\xbb\x43\xfb\xa3\xef\xa7\xb4\x3a\xdd\x66\x6c\xbc\x2e\x28\x3d\xad\x98\x3d\xb2\x3a\x32\x10\xab\xc8\xdb\xcb\x4f\xf7\xfb\x6e\x99\x84\xdf\xe9\x25\x6d\xe3\x4e\xf5\xa7\xfc\x14\xf7\x53\x1c\x66\x5e\xc5\x3d\xdc\x0a\x4d\x17\x82\x62\x02\xa9\xe9\x04\xbd\x49\x1f\xae\x0a\xf1\x59\xcc\x00\xab\xe8\x69\xa2\xe5\x17\x07\xd1\xc9\x42\x2a\x4d\x19\x9b\x01\x7c\x83\x27\xfe\x9b\x3d\xcd\xea\xa4\xd7\x29\xee\x61\x5b\x67\xc5\x2d\xf2\xd3\x78\x97\x47\x93\x60\x96\x65\x77\xd9\x15\xdf\x61\xed\x50\xd6\x53\x06\x9f\x77\x87\x5c\xe0\x4c\x5c\x1e\xff\x9d\x03\x69\x8c\x60\xb4\x6e\x28\x9b\xbe\x42\x48\x5f\x21\x24\x4d\x89\x5d\x0d\x20\x36\xbb\x26\x79\xba\x70\xd2\x25\x20\xaf\xa9\xb2\x7a\xce\x1c\x3e\x6b\xf7\x87\x92\x35\x19\xc2\x4e\x1d\x20\x9c\xbc\x60\x68\x36\xbc\x96\x98\xea\xfe\xa3\x62\xbe\x85\xc8\xe4\x5d\xa8\x54\xdd\x02\xcd\x20\x42\x28\x5f\x7d\xa0\x1e\xfd\x60\xbf\xff\x65\x36\x18\x8b\xca\x03\x1e\x93\x5d\x41\xe1\x19\x16\x3f\x50\x26\x8c\x7e\xf3\x1d\xf5\x97\x52\xb0\x60\x7a\x32\x2e\xcd\x19\x62\x24\x32\xaf\x5e\x6a\xf8\xe2\xba\x3f\x44\xb7\xba\x7f\xa8\x66\xd8\x9e\x25\x79\x30\x27\x08\x37\x43\x21\x46\x83\xe9\xa3\xc8\xb2\x88\x0a\xdf\x95\xde\x0a\xb0\x4a\x2a\x6e\xdd\xdd\xcb\x81\x92\x6b\x62\x06\x18\x19\xe5\xb9\x6a\x82\x28\xa8\xa4\xb8\xa7\xcb\xf2\xf7\xd3\x53\x28\xa7\xa0\x97\xf7\x17\xbf\xf2\xe9\xa9\x27\x4e\x90\xfa\x7b\x7a\x7c\x1e\x07\x21\xa1\x94\x54\x50\x28\x03\x56\x68\x76\xd0\x13\x25\x28\xe1\x2b\x37\x07\x63\x99\xb2\x71\xa3\x04\x76\x01\x47\x42\x3a\x36\x56\x04\xe4\xfa\xe6\x1f\xd2\x59\x09\xda\x5c\x06\x41\x14\x5b\xa8\xd5\xe1\x8b\x37\x69\xc2\x92\x62\xa1\x7b\x78\xfc\x14\xc7\x52\x0c\x88\x2c\x44\x18\x98\x78\x09\xb0\x9c\x0b\xcc\xb8\x10\xb5\x45\x53\x87\x82\x50\x2e\xc0\x04\x25\x23\xf6\xd7\x05\x15\xce\x05\x0a\x0e\xd0\xc2\x02\x2a\x60\x38\x2b\xab\x76\x38\x2b\xb4\xc0\x01\xa9\xf2\x37\xe0\xcb\xb5\x18\x90\x9c\x8a\xd2\x78\x39\xc9\xe9\x17\x20\x22\x7b\x81\x7f\x25\x71\x2f\x29\x8e\xce\x1d\x20\xba\x05\x26\x70\xce\xb5\x68\xb9\x16\xdd\x4a\xd3\x83\xd0\xaf\xde\x38\x07\x0c\x20\xc8\xaa\xb8\xec\xa8\x41\x28\x8a\xe8\xa7\xb0\xfd\x05\x33\x43\x37\x26\x50\xc2\x07\x45\x4f\xb6\x2c\xd1\xe7\x17\xe1\x16\x72\x24\x3a\x50\xee\x04\xda\xa2\xa3\x87\xd4\xa2\xa4\x7f\xf4\x60\x24\x9b\x22\x0e\x44\x48\xd3\xc9\xa4\x86\x25\xe5\x13\x39\x13\xc3\x72\x47\xf6\x79\x7a\x7b\x95\xa0\xb2\x76\xc5\xde\xdb\xc5\x70\xd2\xbd\x76\x6c\x31\x9c\x69\xfc\xf7\x76\x4a\xb4\xd3\x02\x44\x41\xc6\x88\x66\x11\x71\x83\x31\x17\x42\xa4\x0b\x8f\x27\x84\xa6\x8f\x65\x6f\x44\xc8\x87\xdb\x64\xf6\x09\x48\x93\x61\x1e\xe9\xa4\x60\x7b\x62\xcf\xe1\x24\x26\x7c\x12\x9d\x24\x23\xc8\x95\x74\x61\x1d\x55\x5c\xbc\xe0\xf2\x0a\x0b\xff\xbf\xc2\x16\x53\x29\xa1\x90\x39\x37\x95\x98\xa6\x1c\xce\x34\x15\xa7\x32\xff\x93\x26\xe6\x57\x68\xe1\xc8\x10\xf1\x45\xd5\x9d\x6b\x22\xc8\xd8\x14\x06\xb4\x2c\xa9\x8f\xf4\x4b\xca\xa6\x15\x2b\x84\x98\x66\xc2\xbd\xa1\x17\x52\xc4\x9c\xa9\x9d\x30\x00\x6d\x34\xb1\x72\xc4\x15\x14\x96\xb0\x12\xa0\x89\xc4\x6a\xd5\x3f\xd6\x90\xd5\x46\x87\x6c\xc1\x1d\x5c\x2c\xde\x7a\x59\x11\x0a\x52\x0f\xac\x8c\x55\xa6\x2a\x1d\xe1\xfb\x64\x7a\x3f\x35\x06\x61\x59\x17\xda\x86\x72\x6a\x7d\xfe\x4c\xc6\xbe\xbc\x61\xad\xaf\x35\x4a\x19\xf4\xc6\xb1\x69\xec\xef\xa9\x55\x8c\x5b\xc2\x60\xd0\x21\x45\x8a\x8b\x07\xb0\x50\xdf\xfd\xce\xe6\xc4\x20\x9d\x6f\x7a\x51\x0f\xac\xe7\xef\x44\x53\xec\x0e\xb7\xee\x01\xf4\x7f\x30\x31\x6f\x38\x6c\x44\x3a\x5c\x2e\x38\x3a\x2b\x4e\xa6\xd9\x30\xe1\xeb\x91\x60\xb6\x85\x96\x4d\xca\xeb\xf0\xaf\x1d\x44\x13\x7c\x3c\x13\x5c\x05\x1f\x41\x8a\x3f\x41\x19\x5c\xa8\x88\x36\xfc\xad\xe8\x17\x0f\xb6\x84\x03\x55\xea\x48\x6f\x46\x73\xc1\x40\x66\x1d\xd7\xce\x52\xc4\x91\x11\x09\xdd\x68\xbf\x79\x14\x4d\x7c\xc1\x40\x73\xb4\x8c\x2e\xee\x1c\x59\x7c\x3e\xfc\x19\xaa\xa4\xe9\x84\xe4\xbf\x29\x73\xcf\x59\x30\xa0\xb1\x08\x5f\xe0\x91\xce\xa9\xb0\xd5\xe6\x56\xd8\x3d\xe0\x8e\x8e\x8e\xba\x0d\xbd\x61\x1f\x80\xf1\x94\x23\x1b\x42\x5a\x56\x18\xe8\x83\x84\x7c\xd8\x6b\x9f\xab\xcb\x98\x9a\x9d\x2b\x07\x60\xa1\xe7\x8b\x20\x3a\x94\xa9\x22\x46\xb6\x3e\x62\x38\x6d\x1c\x3d\x57\xb6\xab\x13\x52\xfe\x48\xe9\x6a\x69\x11\x13\xfa\x62\xfd\xb2\x10\xcd\xb8\x73\xd5\xc6\x74\xae\x4f\xf4\x3a\xe7\xba\x45\xa7\x01\x6e\xd8\xbc\x00\x44\x3d\x39\xd7\x3d\xd1\xd3\x7e\x3b\xd0\xf0\xd6\x00\x63\x62\xea\xd8\x29\x9f\xeb\x05\xd9\xdf\x40\x61\x20\xba\xd1\x2d\x68\x81\x25\xb9\x8b\x00\xab\x64\x45\x99\x99\xf4\x09\x0b\x53\xf6\xe9\x36\x6c\x80\x67\x2f\xb9\xcd\x71\xb6\x71\x6e\xda\x8b\x9e\x5b\x46\x3d\x3f\xb7\xf6\x55\xa6\x1b\xb5\x54\xba\x09\xf7\x30\x5a\x98\x02\x14\x66\x2a\xee\x0d\x3a\x24\xf1\x3e\xa2\xb8\x13\x57\x56\x85\xae\xec\x66\xce\x80\x11\xea\x0c\x53\x83\x27\xc3\x72\x0e\xbd\xed\xe3\x7e\xc8\xcc\xfc\x7d\x31\x4c\xbb\xd6\x97\xff\x39\x94\xf9\x79\xbb\x82\x5c\x2f\xfe\x1d\xbc\xa6\x1d\x9f\x5f\x59\x73\x6a\x38\x0a\x29\x7c\xd7\x74\x86\xc5\x19\x92\xa0\x25\x6b\x2f\xf7\xbf\xd4\x40\x4f\xad\x66\x97\xc7\x47\x5c\xd8\x3b\x50\xea\xad\x16\x5d\xbb\xc7\xf8\xa6\xfa\x65\x00\xec\x2f\x1b\x17\x01\xf0\x5f\x5f\x29\x09\x66\x85\xba\x92\xad\x6f\xae\x74\xba\x65\xca\xcb\x2b\x9d\x73\x91\x90\xc5\x87\x5f\x96\x5e\x5e\x24\x11\x40\xeb\x6c\x0b\x96\x2b\x55\x04\x39\x7d\x05\x6b\xd5\x65\x3d\x03\x00\x4b\x45\x20\x7a\xc3\xeb\xb2\x42\xb9\xb2\xf3\x07\x72\xf0\xca\x1d\xa4\x87\x27\x8d\x7e\x3b\xcd\x2e\x6a\x0a\x72\xba\xd0\x75\x5d\x50\xed\x4e\x3b\x9d\xee\x5d\x9a\x84\xec\x1e\x6c\xca\x19\x95\x3e\xbb\x13\xdd\x7f\x76\x97\xb8\xce\x8b\x43\x22\xf2\xe2\x4f\x74\x6f\x79\xe1\xd4\x21\x2f\xc9\xad\xfe\x4c\x87\x32\x0b\xfe\x99\xd9\x8b\x68\x65\x30\xc9\x9f\xcb\x9e\xa4\xd9\x98\x93\xb0\x26\x8e\xd9\x79\x49\xd1\x1f\x66\x8d\x3d\x00\x20\xb3\x39\x5c\x1d\x2e\xaf\xdd\x6d\xad\xe3\x10\x35\xf4\x2b\x6a\x3a\xf1\x25\x2b\xfa\xde\xac\xf5\x3b\x43\x61\x9a\x50\xa9\x5b\x41\xdd\xa5\xf3\x96\x8e\x26\x6f\xae\x94\x64\x00\x15\x5e\x91\x76\x29\x19\x43\x56\x46\x9e\x61\x6e\x9f\x55\x25\x55\x71\x39\xa1\xb2\x64\xcc\x38\xf3\x05\x55\x50\xc5\xe5\xec\x16\xcf\x92\xc8\xd9\xfd\xa1\x4e\xe4\xdc\x8a\xea\xbb\x2b\x2e\x4b\x3d\xce\x5a\xbf\x32\xc7\x14\x21\xcc\x5f\x4e\xb4\x32\xba\x7c\x09\x17\x89\x28\x08\xa5\xbc\xa8\x2b\xa6\xb0\x6b\x2b\xc5\x3d\x6e\xd2\x67\x76\xb0\xa9\xd8\xb0\x2a\xae\x62\xe0\xa8\x0e\xe9\xab\xd2\xe4\xfb\x62\xad\x2e\x3b\xaa\x04\xb4\xcb\x08\x89\x5a\x59\x88\xd8\xe6\x6b\x18\x43\x78\x9d\x47\x19\x7b\x9e\x20\xc8\xeb\xdf\xe4\x98\xfc\x1a\xce\xbe\x84\xa9\xe1\x8c\xde\x3d\x89\x2e\x54\xb6\x1a\xac\xe6\xeb\x84\xa6\x86\x3c\xa7\x2d\xe4\xd1\xbf\x80\xd1\x80\x32\xe7\x02\x35\x14\xdb\xfb\xec\x4c\xea\x7d\x96\x58\x04\xf5\x50\x9e\xb7\x6d\x1e\x17\x0c\x9f\x42\x32\xfa\x92\x8a\x33\xca\xe2\x2a\xf4\x25\x15\x57\x2b\xe6\xbb\xb5\xe5\xe9\x9b\xf9\xc8\x85\x80\xe3\x54\x35\x19\x45\x0a\x93\x5a\x9e\x01\x73\x36\x20\x54\xad\x7a\xbb\x2d\xbb\xdd\x0d\x18\x08\x63\x7a\xd1\x32\xd3\x0c\x8e\xb5\x5a\xe0\x4a\x9a\x0e\x77\x06\x8c\x9e\x0d\x9d\x54\x5b\xbc\xae\xba\x80\x7e\x09\x38\x9d\x68\x5c\x5d\x37\x54\xba\xe6\xf3\x03\x72\xc8\x88\x5f\xd9\x61\xfd\xd7\x38\xcf\x6a\x1b\xdc\xa0\xe1\xb6\x8c\xe2\x6f\x39\xb1\x48\x1a\x06\xf5\xa6\x6b\xc5\x56\x4a\xcb\xac\x0f\x6f\xf9\x4d\x45\x2f\x93\xb6\x09\xc2\xdb\xdb\x6d\xfc\xe8\xb7\x3b\x11\xfa\x9b\xd9\xf6\xd6\xdd\x93\x37\x17\x23\x6f\x3f\x87\xe3\x63\x82\x5f\x24\xed\x4d\x77\x21\x65\x5d\xf5\x09\xd4\x85\xd0\x3b\xa4\x96\x8d\x8e\xbf\x5b\xff\x1f\x65\xf0\xc6\x03\x1f\x50\x04\xab\x7e\x52\x33\xeb\xd6\x6b\xc8\x1b\x11\xcb\xf2\xed\xa3\x5b\x02\x9f\x47\x3a\x31\xfa\x7d\x1e\x9c\xb2\x7f\x38\xb9\xf8\xac\x0d\x35\x8e\x35\xf9\xa3\x7d\xc1\x87\xb3\x8b\x0f\x85\xdb\x16\xf7\x39\x34\x94\x1b\xce\xa4\x78\x7e\xf7\x84\xf9\xfd\x6f\x78\x66\x66\xe9\x2f\x27\x5a\xbf\xbd\xfd\x13\xb1\x46\xff\xd6\x86\x59\x29\x03\xb8\x39\xfa\xdc\x92\xa0\xfb\x46\xa5\xf8\xf3\x98\x4d\x3d\x7e\xca\xe2\x68\x3c\xd0\xc9\x09\xb0\xf1\x6e\x81\xbe\x5d\x83\x18\xcd\x17\xf7\x88\xe8\xd6\x17\xf7\xe8\xb7\x4d\xca\xe2\x60\xf3\x7c\xa6\x38\x00\xe2\x5c\xdc\x16\x43\x92\x1e\x69\x99\x2e\xc8\x83\x91\x0e\x5c\xe8\xa6\x34\x2b\x51\xf6\xe3\xb6\x0e\x58\x2b\x16\x17\x75\x3e\xb6\x60\x99\x2c\x26\x75\xda\x02\x9e\x76\x7b\x92\x5c\x63\x34\x9e\xc1\xf6\xcf\x90\x7c\x15\xf3\x2b\x58\xa8\xbb\x00\x90\x25\x21\xa9\x7a\x8c\x3c\xba\x05\xbc\x2d\x4d\x09\x63\x27\x20\xdd\x63\x34\x04\xa5\x2f\xf3\x73\x40\xbe\x19\x10\xe7\xc5\x0b\x66\xee\x62\x06\x25\xb6\xee\x5a\x74\xce\x4b\xda\xbb\x2b\x63\x19\x30\xf0\xdf\xf7\x5f\x7f\xe3\x2f\xdd\xba\x57\x6e\x2a\x9e\x73\x0d\x4e\xa9\xf4\xc3\x8b\xc3\xc6\xba\xd0\x62\x41\xd5\x9e\x45\xd8\x1e\xd9\x88\xcc\xee\xf2\x34\x37\xf4\x1a\x86\xd0\x46\xc1\x40\x45\x32\xe0\x67\xf7\xcc\x8c\x6b\xd7\xeb\xb8\xb7\x72\xe8\x17\x16\x77\xe9\x2c\x62\x71\x57\x63\xc5\x40\x4a\x32\xab\xa1\x4c\x1b\x7c\x58\x3b\x64\xee\x99\x74\x33\x42\x4b\x54\xe6\x3e\xcb\xe2\xb2\x5f\x72\xfa\x10\x8d\x3c\x30\xac\x1f\x93\xd5\xf6\x49\xd3\x38\x48\x2c\x16\x34\x4d\xbf\x3a\x97\xe8\x28\x52\xf3\x1b\xa0\x67\x2a\x2e\x9a\x9e\x04\x75\x32\xbf\xd9\x42\xf4\xde\x34\xd0\xe1\x48\x65\x7a\xa1\x56\x3c\x71\x10\x58\x69\xa2\x8b\x65\x22\x84\x19\xad\xaf\xf2\x26\x8b\x22\xfd\x8c\x76\xd1\xe4\x1f\xfa\xca\xa3\x2c\x1e\x35\x11\x2a\xda\x93\x01\xe9\x09\x24\xb7\x68\xa2\xae\xdb\x51\x09\xfd\xf4\x73\x13\x0a\xf3\x86\x39\x66\xad\x10\xd3\xb1\x18\x65\x59\xfb\x0b\xeb\xff\x45\x32\xf1\x29\x5f\xfd\x14\x5b\x01\xbb\x4c\x3a\x41\x65\x26\x70\x02\xbd\xc5\xf4\x2b\xb6\xa6\x17\xa9\x17\x2c\xf8\xdd\x3f\x9f\x14\xe9\x22\x18\x59\x24\x64\xac\x01\x8c\x45\x2a\x15\x1f\x84\xea\x47\xff\xc9\xb4\xcd\x7f\xf2\xcd\x7b\x70\x6f\xf4\x84\xcb\x1e\x9e\xcf\x18\x00\xb8\x98\x52\x30\x9a\xce\xae\x8a\xfd\x05\xc9\x64\xf9\x45\x6f\x8c\x85\x19\x27\x84\xf3\x43\x83\xa8\x6c\xc4\xe9\xf0\x13\xd6\x11\x77\xd9\xc3\x1f\x4d\x9d\xa7\x02\x6e\xee\xb8\x0d\x4a\xd5\x35\x97\x69\x63\x8f\x80\x9b\xe9\xf7\xe2\x99\x1d\x64\xd2\x70\x75\x56\x05\xd7\x9e\xfd\xe9\x67\x06\x6d\x9a\xdc\xdd\x7d\xb3\x95\xe1\x16\xfb\x7e\x1f\x74\x12\x3d\xb7\x1a\x96\x5d\x16\x82\x2c\x9c\x18\x0e\xf7\xa7\x96\x49\x86\xa8\x65\x3f\x5c\xac\xf8\x80\x03\xd9\x79\x34\x5a\x9f\xba\x9c\x20\x2a\x04\xed\x4f\xad\x42\xd5\x50\xce\x94\xe8\x3c\xe5\x17\x0b\xfc\x4c\x39\xab\xab\xf4\xf7\x47\xbb\xc4\x8e\x1e\x94\xf5\x46\x10\x07\x5e\x60\x1e\x65\xf9\x89\xd3\x52\x49\x31\x38\x16\x4c\x8a\xec\xc5\xf6\x94\xa2\x12\x6c\x09\x10\x69\x32\x00\x6f\x45\x52\xde\xab\x62\xee\x91\x02\xf2\x96\x03\x71\xe8\xe0\xb4\xa0\xb0\x5c\x57\x94\x8f\x0e\xb9\xc1\x30\x31\x3d\xf5\x62\x51\x2d\x1c\xa8\xf4\x66\x43\x12\x96\xdb\xad\x80\x55\x15\xec\x91\xc3\x61\x1f\xe1\xcd\xc1\x6c\x4f\xdc\x30\x59\xf6\xa4\x49\xad\x35\x14\x9c\x53\x2d\x3b\x54\xaf\x0a\x0d\x24\x37\x56\x0f\xcb\xde\x02\xf2\xa6\xc1\x43\x63\xb4\xed\x86\xdd\x07\x95\xe0\x3e\x1f\x0e\x99\x20\xce\x83\x3b\xdc\x82\x86\x2f\x13\x6f\x59\x18\x2b\xc0\xee\xea\xa2\x8b\xd9\x05\x7b\xbc\xc8\x7e\x22\x09\x2e\xc4\xb0\x78\x02\x74\xdf\xe1\x90\x35\xbd\x80\xb3\x86\xde\x9f\x08\xa3\xff\x9f\x43\xaa\xfd\xe0\x52\xee\x8c\xed\x10\x2f\x21\x45\x8d\x2c\xf5\xd4\xe9\x93\x1d\x41\xf0\x9e\x64\xbd\xa3\x09\x01\xc6\x7f\x39\xef\xd6\x3e\x05\x63\xd0\x08\xa5\xa0\x62\xea\xb3\x4e\x00\x6c\xf4\x2c\xe1\xfd\x16\x97\xd1\x3d\x39\x0a\x44\x76\x7e\xd1\x67\x47\x62\x1b\xbd\xc0\x87\x59\x9e\xcb\x7e\x1b\x63\x2d\x3e\x5a\x3f\x06\x60\x56\x49\x37\xa4\x80\x17\xd7\xa2\x86\x95\x20\x26\x6f\xc6\x75\xf2\xd4\xff\xb1\xfc\x10\x7c\xed\x37\xa6\x2c\x1d\x5b\x50\x90\xe9\x82\x51\x43\xb8\x9e\x9a\x54\xbb\xdd\x1c\x36\xd7\x5f\x0a\x7b\x2f\x08\x96\x5d\x99\x42\x09\x3d\x69\xb6\xa4\xe7\x33\xca\xa4\x76\x49\xe8\x1d\x13\x54\x78\x09\x85\xae\x24\xa2\x5f\x10\x86\x26\x94\xe9\x48\x3a\x91\x4a\x32\x8f\x3a\x57\x2c\x43\xc0\x40\x15\x2d\x21\xdc\x1d\x0f\xfd\x8f\xd5\x2d\x9d\xcb\xee\x19\x16\x7a\xba\xc4\x50\x74\x32\x96\xd2\x85\xd3\xc6\x85\x97\xfe\x64\x1c\xfd\xe1\x61\xbe\x98\x29\xf2\xa1\x0e\x71\x47\xb2\x96\x47\x27\xd8\xf1\x02\x86\x53\x0f\x88\xef\x42\x50\x79\xc5\xf2\x0b\xd0\xd3\xb4\xb9\x65\x82\xe6\x2f\x45\x4a\x5e\xde\x6b\xa2\xf2\x38\x88\x13\xe6\x72\xea\x02\xdf\x97\x19\x75\x3e\x69\xaa\x8f\xd3\xce\xd3\x85\xb9\x9c\x3f\x99\x07\xd9\x42\xbc\x34\x3f\x01\x74\xc6\xab\x0c\x8a\x3f\x55\x18\x74\x5d\x19\x85\x4e\x35\x52\x4d\x17\x2d\xda\xb9\x62\x45\xb6\xe8\x82\x45\x28\xa6\xda\xa0\x6a\xa1\xc9\x66\x2f\x98\x5a\xa5\xa9\xff\xd6\x5d\x09\x56\x48\x8b\x5e\xb2\x02\xe8\x9d\x20\x66\x5d\xe9\xc3\x41\x16\x3f\xf7\x78\x28\x87\x2e\x39\xbb\x6d\xb3\x99\x65\x76\x87\xc3\x6a\x66\x31\x2d\xdd\x82\x4e\x98\x17\x4d\xed\xbd\xb3\xbb\x3c\x17\x06\x99\x5b\xa5\xa4\x56\x22\x98\xc1\x98\x97\xa0\xce\xba\xbb\x6b\xc4\x87\xf7\x00\x02\xea\xb2\x0f\xcf\x55\x0b\x9d\x88\x2e\xed\x13\xdc\x27\x0e\xef\x9f\xb3\x63\xaa\x80\x14\xe0\x69\x62\xf0\x02\x35\xfb\x95\xe4\x54\xc2\xcc\x12\x94\x94\x42\x9a\x98\xc0\x0f\xcd\x07\x57\x23\xd9\x7f\x56\x5e\xd4\x07\x36\xca\x1d\x48\x41\x17\xcf\xde\x04\x72\xb3\x77\xc1\x9b\x2b\x54\xf1\x1c\x7a\x7e\x87\x87\x5a\x74\x56\x07\xa6\x1c\xe8\x07\x57\x7e\x06\xa2\xab\x03\x6f\x97\x04\x9d\xec\x23\xb2\xfa\xb9\xaa\x12\x3d\x24\x00\x6e\xd9\x36\x55\x94\xf5\x8a\xf4\x15\xe6\x60\xf4\xf3\xf1\xa6\x1c\xf6\xa8\x44\x39\x3d\xd9\xf2\x00\xc6\x0a\x25\x27\xb8\x4e\xcc\x90\x14\x6d\x54\xd4\xdb\x6d\x04\x56\x80\xcd\xd6\xa0\xb9\x3d\x3e\x89\xa3\x34\xee\x5e\x15\x9e\xdf\x2f\x7a\xbb\x69\x20\x86\x00\xb9\x16\x23\xca\x76\x60\x1e\x9e\x9b\x56\x92\x76\xf5\x3b\x20\xca\x4c\x6e\xbb\xc8\x02\x32\x1c\xbf\x70\xf7\xc5\xfb\x0e\xc7\x04\x96\xec\xdf\x7f\xd8\xe1\x52\xc3\x81\x08\xbb\xb2\x60\xad\xbe\xb4\x55\x2a\x4a\x8b\x2b\x6e\xac\xdd\x8a\x6d\x95\xda\x22\xce\xfb\x96\x86\x2c\x6a\x3a\xaf\x05\xe5\xdf\xda\x0b\x37\x2c\x04\x9a\x2c\x41\x49\x99\x54\x01\x3a\x1b\x11\xc8\x82\x6b\x87\xe5\x69\xeb\x3d\x2f\xd6\x17\x4d\x5b\x13\xe8\x89\xed\xc8\xa5\x61\xe5\xd4\x72\xb6\x7c\x00\x1c\x79\xd4\xf2\xdb\x5a\x0b\x3a\x92\x56\x1d\x4d\x14\x44\xab\x3d\x82\x4a\xde\x8f\x49\x41\xd3\x2b\xc2\x82\x6a\xf4\x46\x1f\xad\x32\x20\xfc\x75\xdb\xf2\xe1\xc6\x04\x80\xfd\xdd\x7d\xed\xe9\x2f\xa1\x06\xdc\x17\xc7\xfd\x1b\xc7\xf8\xeb\x4f\xf1\xee\x07\x57\x4e\xf1\x85\xde\x2d\x09\x63\xb2\x00\x99\xd7\x7a\xb7\x4a\x9d\xf3\x6e\xcd\x18\x01\xbd\x7b\x72\x89\xe8\xdd\x13\x2f\xca\x08\xd1\xf7\x09\xfd\x44\x50\x68\xd0\x2d\xde\xbd\x02\xef\xc0\xca\xf7\x7a\x87\xff\xa2\xe3\x5f\x91\x5e\x59\x30\xde\x45\xae\x30\xbd\x3b\x60\xb8\x53\x09\x1b\xa7\xc0\x8c\xe4\x1c\xf4\x76\xf4\x40\x8f\xb1\x14\xf3\xee\x48\x8d\xa1\x1f\x36\xab\xa4\x1a\xb2\xe2\x9d\xde\x7c\xf0\x0e\x42\x03\x8b\x77\xff\x1a\xae\x2f\x40\xb0\xd7\xd8\x73\x01\xcb\x38\xf2\xd2\xb5\x32\x90\xd3\xfb\x23\xde\xe9\x52\x5f\x00\x86\x03\x05\x68\xcc\xde\x95\xdd\xc7\x48\x80\x51\xd2\xbb\x12\x96\x97\x85\x83\x27\x60\x85\xca\x5d\xcb\xb7\x3a\x57\x65\xe3\xc4\x30\x25\xaa\xdb\xb5\x78\x87\xc8\x34\xd7\x2d\xbe\xca\x75\xb1\x77\x95\xdd\x81\x77\x1f\x66\x1f\x6f\xc5\x78\x3c\xe2\x10\x82\xce\xd7\xbb\x4f\xca\x75\xb7\xfc\x7b\xe8\xc3\x61\x45\x89\x50\xaa\x12\x74\x81\x0a\x59\x92\x98\xa6\x3a\xa0\x74\x6d\x97\x1d\x61\x3a\x3a\x18\xb8\xd9\xc5\x88\xad\x9f\x0a\x75\x7d\x8e\x8a\xde\xf6\xc9\x4b\x7a\x40\xa5\x2e\x6a\x07\xb4\x02\x1a\xcd\x0a\x92\x52\xdd\x0b\x06\x2e\xa8\x7c\x3d\x6c\x5e\x35\xf3\x4b\xf6\x32\x0b\x16\x5a\x1d\x3a\x0d\xc2\x1c\x90\x71\xc4\xf7\x40\x5a\xb9\x16\x48\x71\x31\x90\x0c\x59\xe0\xf0\x8a\x40\xec\x4b\x2d\x14\x73\x5c\xbf\x54\xd5\x4f\x16\xc7\xcc\x30\x9c\x84\x4f\x80\x50\xcb\xe1\x9e\xac\x9f\xfe\x3a\x06\xac\x1d\xd6\xbb\xc3\xbf\x6f\xbf\x7f\xea\xf7\xe4\xa9\x8b\x5f\x9a\xba\x5e\x51\x15\x56\x53\x92\x01\x48\x8f\xab\xf4\x38\x7e\xc5\x21\x8e\x10\x99\x10\x79\xbd\xc3\x6b\xa0\xbb\xe5\xfb\x56\xbd\x30\x3a\xf3\x88\x23\x74\x67\xd3\xd0\xa1\x4a\xac\x4a\x57\x4c\xa5\xa8\x97\xbc\x70\xd9\x60\xd4\xe4\x4e\xe3\x89\x5f\x51\x0d\xa7\xdd\x6b\xef\x17\x88\xb6\x2e\xac\xc9\x1e\x6f\xea\x84\x2e\x6c\xca\x02\x0a\x01\x62\x36\x55\x54\x82\xa6\x6e\x42\xf5\x51\x09\x60\x47\xe3\x79\x29\x5f\x40\x0d\xe8\xe6\xbc\x3a\x78\x31\x9c\x43\x49\xef\xcb\xfc\x85\x0e\xdb\xd3\x5e\xbf\xc2\xe7\xa2\xf7\x4d\xbc\xc7\x46\xb7\xc7\x8d\x2f\xbf\x69\x9e\x6e\x73\x96\x6e\x32\xe1\xf1\x1b\x0c\x88\x0c\xec\xb5\x79\x48\x10\x9c\x30\xf3\x9d\x2c\xaa\xd0\xd6\x82\x9e\x92\xfa\x20\xbf\x05\x0f\x90\x05\x48\xc7\xee\xc3\x53\x8c\xed\xc4\x75\x4e\x05\x37\x51\x48\xb9\x03\x7e\x05\x31\xfe\x46\xed\x09\xec\x77\x02\x36\x41\xbc\x56\xcc\x80\x63\x30\xcf\xe7\x9e\x42\x0f\x9a\x1d\xf0\xe5\x5b\x87\xd7\x3e\x63\x0d\xe2\xe8\x7b\x69\x60\xa2\x51\xab\x58\xca\xd8\xff\x7a\x9f\x13\x58\x17\x31\x3e\x70\x7d\xea\xb5\xce\x87\x3f\x26\xeb\x4f\x93\xf5\xc7\xaf\xfb\xa3\x23\xdc\x47\xf3\xd1\xc9\xec\x9a\x99\x15\xdd\x0e\xf3\x88\x41\xfa\xca\xae\x3e\x89\xd0\x1b\x60\xf6\xcf\x5a\x94\x8c\x63\x45\x15\xcc\x3a\x23\x68\x72\x80\xe8\xa3\x3f\xd9\x23\x45\x59\xb6\x18\xe8\x36\xa8\xd7\xd1\x9f\x69\xf5\xe5\x36\x98\xce\x6a\xd8\x72\x2f\xce\x1b\x91\x83\x63\x56\xc5\x69\x63\x12\x4c\xc4\x48\x1d\xed\x26\x37\x21\xa4\x39\x74\x8b\x27\x8c\x9d\x43\x71\x7c\x72\xcd\x22\xe0\xbe\xce\x69\xc9\xeb\xe3\x73\x6a\x2e\xf1\x79\x24\x55\xb6\x20\x4c\xb7\x1d\x57\x75\x84\xf1\xfe\x35\x46\xcb\xf8\x2c\xed\xf9\x0c\x8b\x9e\xf2\xfb\xf8\xfc\x70\x7e\xc1\x09\x99\x8f\x91\xe3\x66\x2c\x37\xa2\x7b\x3b\x9a\xa8\x8d\x11\x3b\xc4\x5e\xf2\xe8\x70\xe1\xc4\xa1\xa2\x20\xb4\xec\xc3\x9d\x15\xfb\x9b\xde\x1e\x03\xd6\x8e\xe1\xcb\xe9\xf2\xd9\x1f\xae\x84\x51\xb1\x8c\xbb\x81\x7b\xd7\x65\x02\x38\x8b\x3f\xfc\xec\xda\x0f\xc7\x1a\x1b\x9f\x9e\x17\x7f\x04\x18\x6e\xae\x18\x47\x70\xeb\xee\xcb\x97\xc5\x89\xf9\x03\xda\xc6\xe0\xaa\x72\x1b\x3a\x5d\x41\xe1\x40\x59\x1c\x90\x13\xd1\x7d\x3f\xa2\x2b\xd7\x0e\x09\xa6\xc3\x2e\xfb\x37\x7d\x2d\xae\xba\x78\x6b\x60\xb8\xc2\x1c\x53\xd1\xbf\x42\x5e\xe2\x80\x5d\x53\x0e\x2d\xde\x43\x10\x14\x2c\x52\x8c\x49\x56\xd5\xc4\xdd\x56\xe6\x8c\x00\xe7\xe8\xba\x3b\x9b\xb2\x71\x5d\x3b\x99\xf1\xd0\xbc\xf5\xcd\xa2\x4a\x83\x2d\xd3\xe5\x4f\xda\xa8\x22\x10\xbd\xd7\x6c\x76\xb9\x8c\x08\x6b\x35\x68\x23\xf4\x11\x96\x3b\x06\x9d\x1c\x1c\x61\x75\xe7\xe6\xf3\x1c\xee\xea\x17\x77\x2b\x7a\xfa\xf3\xab\x4c\x54\x37\xe8\x6c\x31\x1d\x67\x80\x8f\x81\xcb\x38\x30\x97\x49\x8a\x24\x5b\x7c\xae\x06\xbb\x02\x16\xf0\xc1\xe9\x66\x14\x99\x6b\x77\xe7\x57\x9a\xc2\xa2\xb7\xf6\xe2\x64\x37\x41\x15\x8f\x34\x98\x39\xd1\x9c\x77\x13\x8c\xd7\x0c\xb0\xc9\x3c\xb2\x14\xd8\x20\x91\x91\x5e\xfc\xb9\xc4\xa4\xbd\xe4\x11\xb0\x51\xd7\x83\xf3\xbf\xdf\xd3\x2f\xb1\x31\x55\x7c\x56\x78\x5d\x67\x9e\x30\xcf\x30\x3e\xf4\x19\xa8\x2b\x68\xf2\xfd\x84\xb8\x97\x8e\x2c\x88\x67\x6c\x7a\xfb\x47\x18\x59\x0e\x68\x33\x0e\xcf\x76\x7e\x4d\x8f\x8e\xb0\x45\xf7\xc7\xb8\xb6\xc4\xca\xb8\xe1\x31\x9c\xa0\x9d\xa6\xeb\xf1\xed\xb2\x70\x3f\x47\x1e\xec\xa9\xa8\xf0\x3b\x70\x78\xd6\xa3\xe1\x52\xdd\x6b\x1c\xec\xbf\x29\x4d\xd0\xaf\x34\x17\x52\x6c\xbf\x1c\x21\x0f\x69\x92\xe1\xbb\xb6\x1e\x4e\xd6\x82\xdf\xac\x85\x74\x8c\x92\x3c\xee\xe9\xed\x89\x58\x9c\x2e\x1b\xc5\x95\x4d\xc2\x5b\x41\x19\x55\x7f\xfa\xa2\xd3\x7d\x67\xcf\xe9\xf3\x7b\x4e\xcb\x04\x5a\xcd\x53\x10\xd6\x6e\x05\xac\x03\xf5\x70\xa8\x9c\xa0\xbb\x16\x6e\x84\xd5\x7a\xce\x24\x0a\xd0\x9c\xca\x38\x3d\x62\x78\x7f\xe5\x47\xef\x1c\x43\xba\xf4\x1e\x37\xb0\x3f\x87\x13\xeb\x90\x43\x7a\x4f\x11\x5d\x6e\xd3\x8c\xb8\x5c\x76\xf1\xc6\xd9\x99\x72\x25\x54\x4b\xec\xe5\xca\x57\x25\xbd\x5c\xa9\x5e\x51\x85\x80\x0c\x60\xef\xb4\x75\x4a\x53\x9d\xa7\x8e\x62\x93\x8f\x71\x41\x9c\x16\xef\x91\x79\xd7\x9e\x0a\x46\x0a\x7d\x95\x06\xbb\xaf\x6f\xc4\x09\x2c\x9f\xe0\x91\xbd\xc6\x1c\x5c\xd8\xbc\xf8\xe8\xb4\x53\xba\x72\x78\xbb\x45\xff\xf9\x16\x3d\xfe\x65\xd5\x7d\xe7\xf4\xec\x57\x10\x3b\x3f\xfd\xfb\xa5\x79\x4d\xed\x66\xf7\x2d\x5f\xe9\xeb\xff\x7f\x8d\x57\x3a\xfc\x11\xb2\x5b\xbf\x2a\x61\x76\x53\xd5\xcd\xee\x33\xb0\x7f\xf8\x38\x50\xb4\x1a\x68\xdc\x94\x19\xaa\x09\x72\xc0\x39\x6e\xd5\xf1\x43\xa8\x62\xd1\xc9\x4c\xb2\x8d\xd5\x62\x16\x05\x4c\xab\x2e\x24\x93\x6c\x97\xa0\xf6\xcd\x5a\xc7\x02\x59\x33\x5f\x29\x6b\x53\x1b\xa7\xd5\x58\x08\x0a\xce\x5f\x1f\x52\x76\x5c\xa9\x10\x14\x9d\x8e\xa7\x25\x2d\x61\x0a\x43\xb9\xaa\x5c\xf4\x47\x2f\x19\x72\x23\xb0\x74\x9c\xaa\x4c\x18\xec\xe5\xc7\x63\xa3\x99\x9f\xf2\x4a\x05\x68\x11\xa6\xb3\xba\xe9\xaa\xa8\xd8\xd5\xf0\x7c\x0e\xae\x5d\xe8\xec\xc6\x7e\xa2\x3f\x42\xdd\x65\xc9\x2f\x25\x6c\x29\xe6\xbd\x57\x01\x59\x5f\x85\x10\x9f\xe5\x92\xa2\xd7\x9c\x18\x16\x63\x34\xa8\xf3\xbb\x35\xb1\x78\xe3\xe5\xae\xa0\x8f\xcb\x4f\xa7\x29\xfd\x84\x31\x37\x49\x7c\xbd\xe0\x8f\xab\x6f\xb1\xc8\xd7\xc2\xee\x74\xf9\x90\xae\x1e\x4d\x55\x67\xc0\xa7\xae\x57\x40\x75\xc1\xcd\x3b\x1c\x32\xba\x7a\x12\x38\x58\xd3\x53\x2a\xd1\xe9\x37\x84\x35\x5a\xa6\xc0\x9d\x3e\x76\x86\xb5\x27\x48\x91\x29\xfe\xb4\x9a\x24\x0b\x18\x45\x4c\x0a\x6e\xc4\xf9\xf3\xd4\x3d\x9b\xf3\x0c\x20\xf4\xdf\x57\xde\x8a\x2c\x2f\x95\xfd\x0f\x03\x8f\x98\x60\x9d\x93\x96\x9d\x62\x5a\x1d\xdc\x80\x4c\xc0\x90\xc3\x08\x86\x9b\x76\x94\xe9\x3e\x45\x1c\xf4\xe8\x9e\xf0\x3d\x79\xe8\x1d\xc5\x2c\x06\xde\xb8\xee\xc5\x0e\xc0\x3a\x93\xe9\x45\xbf\x50\xf7\xa3\xfd\x09\x59\x8a\x53\xbc\x6d\x7c\x6c\xb3\x7a\x4e\xa8\x71\x4e\xf2\x74\xc0\xc2\x6d\xb5\xb2\xa8\x14\x71\x49\x54\x55\x07\x57\xe7\x7a\x55\x96\x01\xdf\x7c\xd8\x9e\x82\xa2\xaf\xe4\x0c\x2b\x0d\x34\x4c\x2f\xe1\x66\xf6\x3b\x00\x8d\xd3\xd8\xbf\x29\xbc\x13\x15\x98\xc0\xea\x1b\xf3\xe6\x42\x1d\x92\x91\xa6\x97\x15\x98\x5e\x58\x10\xa1\xff\xcd\x74\xc4\xf0\x09\x91\x36\x85\xb5\xc3\xf7\x97\x4f\x14\x03\x50\x0e\xd2\x71\xe2\xc0\xc9\x5f\x41\xef\xf5\xf8\x2b\x21\xfe\xab\xbd\x9a\x50\x1c\x09\xfa\x0b\xa1\xa1\x66\x5f\x76\x05\xdc\x5f\xd5\x4e\x5a\x05\x1e\xef\x90\x07\x62\x1b\xbb\xaa\x34\xa2\x25\x58\x17\x2e\xfc\xd9\x3d\x9f\x32\x60\xaa\x35\xc3\x0f\x8b\x5e\x65\x06\x9e\xa0\x66\x4a\x9d\x42\x22\xac\x3b\x99\xc3\x9d\xea\xf6\x60\xc4\x90\x07\x26\xa0\xb9\xcd\xf7\x69\xce\x55\x35\xf2\xc6\x6c\xa8\xed\xea\xee\xa8\xf5\x05\xbe\x5b\xd4\xbd\x56\xa0\xac\x76\xdc\x76\xf7\xff\xfe\x89\xd1\xe6\x47\x63\x64\x91\xc6\x7f\x0d\xc5\x0c\x21\x21\xa4\xac\x6d\x04\x59\x91\x09\x5d\x05\xa7\xba\xb7\x3a\xd6\x22\x35\x2e\xe5\xce\xf4\xfc\x26\x8b\x6f\xf9\xd7\x02\x5d\x27\xe4\x96\x38\xce\x00\xb8\xbb\x07\x10\x60\x62\xe5\x8e\x65\xfa\x18\x84\xc1\x4a\x28\x79\x75\x0f\x21\x38\x93\xf6\xd9\x9f\x1c\x8d\x08\xb2\x22\x94\x3f\x94\x5c\x5d\x4c\xbc\x8c\xdf\x16\x92\xd7\xc1\x28\x3f\x61\xe0\xd9\x1e\xdf\xf3\x9b\x0b\x2c\xa2\xf3\xe6\xf9\xb1\x04\x3c\x1f\x55\x06\xde\x03\x1a\x03\xd4\xc3\xf5\xd6\x98\xfb\x30\x98\xfb\x10\x38\x2b\x90\x13\x6e\x09\x46\x51\x86\x90\xd5\xae\x15\x35\x87\xfe\x4c\xa4\x63\x0b\x04\x17\x04\x84\x22\x89\xd8\x9d\xca\xc1\xf6\x39\x14\x31\x03\xfa\xed\x08\x9f\x35\xaa\x93\x01\x9e\x1b\x83\x18\xd5\x21\x07\xdb\xd5\xcf\xff\xb3\xcf\xfd\x5f\xff\xc2\x83\x29\x3e\x54\xc4\xaa\x42\x76\xa0\x79\xac\xf5\xb3\x4d\x66\x21\x56\x06\x84\x57\x02\xbc\x3d\x1d\xf0\x59\x85\x2b\x99\x07\x13\xb5\x04\xcc\x87\x07\xf3\x2a\x14\xb7\xec\x7c\xbe\xd8\xeb\x81\x4e\xc7\x5c\x3e\x5f\x01\xdb\x7e\xf9\x6a\x11\xab\xef\x9c\xdd\x69\xc0\xdc\xe4\xd0\xf7\x03\x73\x1e\x93\x8a\x9c\x5b\x86\xfc\x16\x59\x8c\x62\x3e\x8a\xf6\xc6\x2a\x9a\xdf\x2c\xd3\xb7\x66\x05\x27\x84\xf9\x8d\xd7\xa4\xa4\xa3\xe7\x53\xb6\xf7\x7d\xe0\xf5\x4d\x20\x19\x6e\x6f\x01\xaa\x03\x3e\x01\x14\x34\x7b\x1b\x01\x62\x31\x9a\xdf\x81\x6d\x49\x40\x63\xf5\x7e\xa7\xc3\x2f\xbb\x2d\xcd\x84\x4d\x74\x53\x1c\xfa\x11\x1c\xad\xa1\x5d\x95\x7f\x2d\xe0\x99\x9e\x31\x8b\xcb\x8f\xa4\x73\x09\xe1\x77\xa5\xe9\x97\x1b\x6b\x82\x2f\xbf\x5a\x3b\x07\xab\x95\xa2\x50\x79\xcc\xe5\xc9\x15\x4b\xa9\x1d\x5f\x94\xea\x33\xb2\x46\x00\xef\x7e\x08\xac\x20\x9c\xe5\x54\x1a\xb8\xa1\xe0\x2b\x2f\x4c\x78\xee\x4a\x54\x3d\xa3\xf6\xb5\xc2\xc0\x5c\xa6\x72\x48\xae\x7a\x36\x53\xeb\xf4\x48\x15\x9c\x15\x6a\x57\xb0\x42\x48\x4f\x78\xaf\xeb\x2b\xce\x7e\x7d\xc5\x12\xb8\xe1\x9d\xbe\x10\x4e\x78\xde\x98\x6d\xbd\xfd\xf9\xe0\x81\xd8\xdb\x9f\x85\x84\x4f\x0a\x80\x6e\xd0\x0c\xb1\x29\x44\xec\x1c\x21\x79\x9a\xf1\xbf\xbd\x4e\x97\xde\x3c\x80\xfb\x70\xef\x8d\x27\x47\x1f\x1f\x23\xba\x57\x1c\xb3\x8b\xa9\xff\xf2\xab\x7e\xe7\xae\xfe\x77\x1e\x78\x7e\x9f\x29\x88\xbf\xdf\xca\x95\xd1\x6f\x65\x55\xfc\x65\xae\xfe\x56\x9e\x36\xfc\x8e\x01\xe6\x17\x9b\xd6\xbf\x35\x49\x30\x87\xe2\xa8\xae\xd5\x05\x8f\x9e\x15\x54\x43\x3a\x8a\x3c\x7f\xca\x53\x7a\x9b\xf2\x53\x9e\xc7\x4f\x79\x42\x24\xef\x4f\x79\xfe\xfd\x94\xed\xa7\x6c\xee\xc1\xd7\xa3\xdb\xfa\x53\xb6\xec\x9e\x4f\x3c\xe0\xdb\xc7\x9d\xed\x1d\x4f\xd6\xc5\x94\x48\x48\xb3\x80\x15\x86\xb6\x08\x41\x78\x6a\xba\xbb\x55\x2a\x32\x00\x44\xa2\xe8\x82\x42\xcc\x31\x35\xdc\xdd\x1a\x26\xb4\x81\xa6\xf4\x24\xfd\x28\xd1\x78\xd2\x47\xfb\xc1\x81\xd1\xd1\x0c\xf6\x56\x66\x84\x99\x3e\x3c\xdc\xdf\xdd\xda\x10\xea\xb3\xd2\xd4\xc8\x9e\x15\x87\x7e\xbb\xac\xb6\xdd\x75\x05\x40\x56\x99\x7d\xdc\x35\xd9\xdd\xc6\xab\x18\xbb\x43\xf4\x3b\x46\x93\xdd\xbd\xfc\x33\xd1\xe9\xcb\x63\xa3\x76\xe7\x23\xef\x9d\xf2\xbc\x84\x22\x13\x5f\x38\x8c\xdf\x1d\x73\x2e\xf2\xc9\xf0\xae\x17\xc4\x41\xab\xd2\x8f\x45\x18\x3f\x0e\x01\x21\x1e\xec\x7d\xee\x3c\xed\x05\x41\xff\xa0\x08\x5e\xf1\x6a\x74\xc7\x3d\x18\x78\x3f\x3c\xcd\xa7\x5b\xac\x29\x09\x3b\xe7\xfc\x71\x38\x16\x14\x44\xb6\x90\xea\x1f\xc8\x91\xe3\x4a\xc9\xa8\x3a\xc8\x5a\x90\x47\xd9\x03\x6d\x1a\x7c\x9c\x6b\xbe\x57\x26\xee\x5c\x6f\x25\x9b\x7b\x22\xc7\xcf\x17\xcd\x2b\xf8\x05\xa9\x3a\x4f\x3a\xa9\x5e\x69\x20\x69\xcc\x32\x34\x4b\x90\x9a\x3e\x08\xf3\xf2\x34\xe7\xd4\x67\x14\x6a\xf6\x34\x97\x9c\x78\xc7\x40\x98\xa7\xcb\x87\xe1\x5d\xef\x99\xed\x3c\x8d\xdf\xd9\x43\x41\xba\x06\xc8\x8b\x26\x0f\xd5\x81\xf4\x64\x6a\x77\xf9\xe2\xeb\x0b\x41\x66\x13\x18\xdf\xd5\x53\x71\x95\x5d\xef\x8f\x75\x46\x4b\x3e\x5f\xf8\x8c\xb2\xe3\xfc\x64\x77\x90\x53\xa6\x74\x71\xc4\x76\x25\x7b\x77\x6f\x8a\xe9\x05\x52\x0b\x48\x3c\x15\xc4\x48\xdf\xfa\x3f\x1a\xc5\x07\xff\x7c\x50\x09\x24\x1a\xef\x60\x68\x13\xc2\x73\xa6\x9d\xba\x02\x00\x18\x89\x77\x19\x6f\x4a\x05\x44\xbf\x15\x45\xdd\xd1\x87\xe7\xc6\xb2\x6c\xe6\x34\x48\x90\x11\xcd\x0b\x81\xe6\x68\x37\x9f\x38\x87\xd8\xfd\xc3\x91\x7f\xb0\xa9\x80\xaa\x93\x65\x0f\x15\x4d\xc7\xaf\x30\x58\x26\xde\x5b\x3c\xf4\xe0\x51\x31\xbc\xbf\x68\x5a\x97\xe2\xfd\xb5\x24\xe9\xc2\x04\xad\xfc\x02\x7f\xf1\x75\x88\xa0\xdd\x67\x0b\x0f\x58\xe3\xf4\xe3\x35\x84\x30\x56\x13\x01\x71\x19\xca\x60\xee\x1e\xb4\x1a\x78\x7f\x41\xf2\x1e\x91\x67\x9a\x7d\xcf\x33\x88\x14\xd8\xbd\xf4\xb0\x62\xaa\xef\xcd\xd7\x3f\xa1\xfd\x4b\x51\xec\x3e\xbc\xd8\x57\xf8\x10\x51\x46\xa1\x7a\xe4\xe3\x8b\x24\xae\xb8\x16\xbd\xe3\xc8\x89\xf7\x21\xc4\x34\x11\x28\x82\x29\x2b\x84\x28\x2b\x82\x0e\x0f\x45\xcc\xc1\x18\xed\x45\xdb\xee\x63\x1d\x74\xa0\xa9\xf5\xf8\x58\x03\xfd\xa3\xad\x79\xbe\x5b\xdf\xf5\x44\x49\xa8\xc6\x7e\x38\xf4\x3c\xfe\x74\x67\xc0\x7e\xe4\xce\x2c\x16\x90\x1f\xcc\x01\xe5\xd0\xae\x38\x63\x05\x21\xe5\x65\xf0\xdd\x4a\x32\x7f\xdc\x29\xad\xdd\xe3\xad\xd7\x8e\x81\x16\x81\x7c\x1e\x99\x65\x12\x64\x75\xb0\x87\x07\xf2\x30\x3c\xb4\x2e\x85\xc7\x43\x06\x3b\xd8\x61\xd5\xb2\x07\x6d\xa6\xb8\x89\x2e\xe6\xaa\xc4\x6c\xa7\x83\x6c\x61\xf9\x41\xe1\x69\x0f\x53\x08\x37\x63\x36\x9e\x7a\xee\xe1\x85\x6e\x57\x08\xd2\xf1\x2a\xb0\x95\x61\xde\x21\xc9\x76\xd3\x1f\xcb\x94\x9d\xa7\x52\x7b\x60\x97\x89\xca\x13\x4e\x88\x48\x16\xb0\x06\x38\x3c\x99\x24\x1e\x66\x91\x76\x0b\x44\x7e\xf6\x34\x9d\x2f\x0d\x83\x4f\x12\xf7\x70\xf2\xa5\x85\x00\x92\xcb\x9e\xa4\xef\x81\x1d\xa5\x2c\xdc\xf7\x70\xe9\xc5\x24\x20\x5a\x3f\x5a\xb0\xdc\xe0\xcc\x1a\xb1\x5f\x4f\x0a\x0d\x16\x18\x1d\xfd\x42\x81\x37\x34\xd7\xa1\x88\x85\x5a\x1c\x17\xaf\xa0\x9b\x56\x3b\x01\x32\x46\xf1\xbf\x8b\x65\xa3\x3d\x2f\x45\x27\x13\x24\xfe\xc1\xb1\x35\x5c\xbc\x67\x28\x20\x7b\xd4\x07\x41\xdc\x70\xda\xc3\x75\x6b\xca\xb3\x83\xdc\x0e\x3e\x32\xde\x43\xd6\x02\xce\x95\x26\x1f\x00\x0b\xd2\x68\x72\x55\x01\x2e\x0a\xbb\x75\x89\x1e\x47\x80\x82\x3f\x8e\x23\xa4\x41\xba\x2f\x78\x54\xbf\x87\x37\x0c\xd6\xb5\x37\xdf\xb7\xef\xe1\xad\x26\xdb\x4e\x78\x63\x18\x7c\xa5\xfa\x87\x22\xb7\xd7\x0f\xfb\xe9\x2e\x29\x33\x3e\x54\xd8\x99\x85\x09\xd5\x01\xaf\x9a\x76\x0a\xf2\x15\xca\x44\xa6\x21\xf8\x15\x4c\xa9\xb8\xb0\xb9\xa7\xb5\xcf\x81\x92\x87\xa1\x7d\x6d\xf2\x8f\xc8\xb6\x9f\x3c\xdf\xeb\xed\xc9\x47\xec\xe4\xef\xc9\xdb\xb7\x27\xdf\x3f\x3d\xa9\x05\xea\x9c\x22\xcc\x30\x92\x6a\x00\x03\xa4\xd0\xa0\x3d\x3d\x51\xd3\xd3\xd6\x4e\x25\x2c\xe9\xa4\xa9\xfe\x9f\xd4\x7f\xc8\xf2\xd9\xf5\x0b\x13\x12\x85\xa2\xb5\x31\x8f\xa1\xf3\x22\xf5\x9e\x2e\x3e\x86\xd8\xd3\xb5\x33\xec\xcb\x2e\x36\xef\xe9\x8a\xe1\x59\x27\xa8\xa9\xd1\x2a\x27\xa3\xf7\xaa\x94\x6e\x2e\x73\x50\xd9\x13\x27\x74\xc9\xfa\xe7\x27\x9c\x9c\x1d\xa6\x4b\x6f\x6c\xee\x29\x2b\xf1\x34\xa3\x66\x81\x7d\x36\x35\xdf\x02\x58\x57\x93\x72\xe5\x7d\x18\xa0\x74\x74\x97\xb8\x71\x28\x80\x97\x4d\x89\xfa\xbf\x4f\x2d\xb6\x5c\x77\xd6\x48\x41\x5a\x3c\x19\xf7\xa7\x41\x35\x5c\x2b\xd9\x5c\x4b\x65\x6e\x49\x45\x7c\xeb\xbf\xd2\x3c\x30\xf7\xe3\xf8\x96\xaa\x96\x46\xa5\x9d\xe5\x52\xd3\x86\x2c\xe0\x44\x04\xb8\x63\xbd\x73\xce\x99\xde\xa8\x8f\x42\xac\x17\x10\x4c\x1f\x6f\x1f\xb5\x74\xde\x3e\xea\xb8\x27\xf0\x4c\x0c\x81\x3d\xbf\xca\xab\x04\xb0\xdc\xf9\xf0\x8e\xd0\x9e\x3e\x2b\xe7\x61\x3a\xbc\x08\xe9\x15\xf6\x63\x45\xfe\x19\x56\x9a\xe8\xcf\xff\xda\x61\xa5\xf8\xd1\x42\xfa\xf4\x9b\x8a\x7b\xfa\xa4\xe7\xd8\x8d\xd9\xd3\xc7\xe6\x87\xe9\x73\x59\x25\xff\xf0\x99\xcb\x2e\xee\x2f\x49\x9e\xc4\x9f\xdd\xba\xee\x0e\xe0\xc2\x1e\xe6\x2e\x29\xd6\x4f\xc3\x95\x7a\x31\x99\x61\x58\x78\x8a\xb9\xa2\x3c\x04\x68\x7c\xd9\x7f\x46\xe4\xd9\x7f\x0e\xcd\xd2\x1c\xfc\x4b\x09\x43\x80\xea\x2d\x14\x14\x74\x6f\x81\x62\x11\x91\xc3\x8b\x5c\x8c\x16\x4c\x38\x2e\x25\xea\xf7\xa4\x8b\xf3\xc5\xca\x27\x88\xff\x60\x0b\x7f\xcf\xa9\x21\xb9\xed\x41\xf3\xc1\xce\x9e\x22\x37\x19\x66\x95\xfc\xab\xd9\x87\x03\x9f\xca\xd9\x82\xcd\x51\xdb\xf2\x12\x37\x10\x05\x69\x45\xdf\x9e\x48\x6c\xdb\x36\x10\x78\xd2\xc5\x44\xe3\x68\x45\x39\x88\x42\xab\x51\x69\x50\x2c\x2a\x8a\x0f\x2c\x7b\xab\x5a\xea\xad\xfa\xdb\x83\x32\xcd\xad\xb2\xd6\x35\x1d\x46\x5a\x7f\x4d\xb8\xeb\x75\x5b\x52\xde\x8b\xc5\x6b\xa1\xfd\xd6\x8f\xb9\xb9\xa4\xb8\xd9\x0d\x87\x9f\x12\x1c\x6e\x61\x60\x8f\x2d\xb8\xe8\x36\x88\xe2\x16\x18\x56\x21\x07\xa6\x94\xc1\x1d\x09\xb7\x5a\xc2\x43\x7e\xfa\x48\x26\x3c\x82\xde\x49\x51\x74\x0b\xe2\xe8\x1c\x1e\xac\x65\xe1\x71\x4b\xc8\xcb\x42\x7d\xcf\x05\x3b\x3c\x61\x09\x31\xb8\x33\x09\x7a\x3d\x64\x88\x92\xc9\x04\xf2\x24\x2c\xaf\x00\x17\x58\xe4\x82\xb0\x33\x06\xe4\x54\x30\x40\x70\x3a\x3e\xa8\x5f\x57\x0d\xcb\x8b\x55\x95\x52\x4b\xc2\xba\x36\x09\x6d\x05\xf6\x1c\xb9\x00\x68\xab\x65\x05\x74\xd2\xcd\xa2\x7f\x2d\x3b\x46\xc8\xb0\x7a\xd6\x68\x01\x4c\xc1\xea\x5f\x41\xff\xd2\x0b\xb6\x40\xea\x1f\x0d\x2c\xac\x96\x37\xab\xcf\xd4\xe8\x47\xd8\xb7\x0d\x07\x77\x2b\x13\x87\x07\xbc\x68\xd1\x60\xec\x1a\x19\x71\x28\x86\xaa\x63\xc4\x26\xce\x4e\xe0\x8e\x5e\x14\x48\x7a\x65\x01\x11\xb9\xbf\xaa\xe4\x30\x01\x97\x86\x5c\xaa\x7d\x45\xa9\x10\xa2\x0e\xf8\x09\xd7\x84\x98\x50\xce\xc1\x09\xa2\x02\xa6\x5a\x5f\x05\x1b\x32\xf7\x7a\xdf\x85\xea\x49\x4a\x80\x34\xbf\xe0\x0f\xec\xfc\x04\x9e\x77\x05\x9f\x33\x48\xa9\x20\x28\x26\x34\xeb\xf0\x84\x10\x3d\x1d\xa5\x64\xe6\x26\x33\x5e\x54\xc3\x8d\x59\xc7\x3c\xd7\xcb\xdc\x42\xc7\x0c\x13\x5c\x18\xd8\x9e\x6e\x84\x4d\xd6\x70\x62\xda\xce\x64\xd8\x64\x9e\x09\x59\x60\x42\x0e\x47\xd3\xfe\xb4\xc7\xa9\x61\x3b\x20\x7a\x44\x0b\x61\xc3\x9f\xb8\x41\x02\xc2\x5c\x05\xc2\xb4\x0c\xda\x81\x71\x33\x11\x08\x5b\xcb\x61\x3b\xad\x9e\x6d\x38\xe4\x0b\x1b\x85\xc2\xb0\xcd\x74\xe6\x1e\x8c\xa5\xc2\x38\x3b\xa9\x51\x1b\xa2\x94\x95\x38\xa5\x5e\x29\x76\x02\x15\x25\x45\x0c\x1c\xf2\x72\x4b\x40\xfe\xa2\xc4\xd1\x7d\x85\x17\x82\xe0\x9b\x7d\xbc\xa8\x0c\x7a\x46\x4c\x9a\x09\x74\x08\x0d\xd1\x97\x00\xf7\xfe\x57\xcc\x3d\x35\x6e\xb3\x06\x68\xc9\x27\xe9\xbc\x7e\x49\xa4\x86\x02\x82\x27\xe5\xf7\x2b\xf3\xed\xa8\x1d\x04\x51\x1d\xdb\x1f\x6c\x9e\x02\xd8\x06\x62\xf8\xd7\x9c\x52\xfc\xf3\x82\xe1\xb4\x1d\xc6\x97\x55\x82\xf8\xea\x75\x20\xbe\xb4\xe3\x88\x2f\x4e\x84\xd9\x9e\x63\x74\x0f\xe9\xf8\x43\x8c\xec\x2b\xf5\x75\xb1\xac\x30\x54\xe8\x2e\xb0\x05\x98\x60\xfc\x3a\x46\x54\x61\xf4\x4f\xa8\x2a\xd4\x29\xc4\x76\xae\xfc\x98\x86\xc7\x70\x01\x77\x06\xc5\xe4\x79\x48\xe0\x5a\x0f\x44\x17\xd8\xc0\xdd\x92\x0b\x4a\x40\x9e\x01\x00\x72\x3d\x02\x68\xe9\x79\xfb\x7c\x25\x88\x45\x04\xc6\x8b\x1c\x20\xed\xf7\x00\x21\x93\x77\xc2\x6c\x99\xc2\x72\x7b\x03\x90\xf7\xef\x09\x35\xa7\x04\x62\x6b\x2d\xc4\xf7\x38\x2d\x19\x0c\x26\xf5\x32\x1f\x0f\x68\x41\x07\x7a\xcf\xc3\xe5\x84\xc7\x2f\xe1\xa0\x19\xec\xa3\x8f\x60\x57\x52\x04\x7a\x12\xdd\x75\x0f\xc7\x38\x29\xb1\xd7\xa7\xe1\x48\x11\xef\x4b\x20\x92\xcc\x2d\x0a\x18\x29\x1e\x5a\x87\x83\xfd\xbd\x8c\xf8\xd0\xae\x53\xe9\xfc\x8a\x7a\x3a\x08\x58\xe8\x04\xea\x53\x4b\x38\x34\xc5\x2d\xba\x05\x9f\x43\xd4\xcc\x32\x2b\xd5\x42\x05\x4c\x6a\x59\xdd\xe9\x35\x5c\x32\x23\xcd\xe2\xf6\x74\xf1\xa1\xe0\xac\x7b\x86\x22\x32\x61\x28\x59\x02\x00\x69\x91\x66\x65\x8d\x5a\x30\x83\x3c\x97\x70\xc9\xa0\x2e\xd3\x6a\x04\x02\x3f\x7e\x61\xa6\x13\xe8\x80\x0a\x46\xc3\x22\x84\x3f\x99\x67\x89\x69\xb5\xf5\x7c\x26\x3c\x28\x27\xf0\xb5\x12\xdb\x0d\x8a\x70\x6e\x7d\xbb\x1f\x38\xf6\x44\xe1\x79\x15\xd5\x07\x69\x55\x94\x75\x72\xff\x37\xf6\x01\xa4\x63\xf5\x80\x2d\x6f\x52\x7e\xc4\x66\x02\x52\xc3\xb9\x15\xbc\x3a\x12\x70\x61\xf5\x16\xce\xad\xdf\x52\x32\x6c\x07\x4f\xca\xf7\x28\x1b\xc5\x13\x86\x13\x89\xd9\x9d\x8e\x98\x67\xd8\x32\xb3\x1c\xcb\x4a\x73\x0e\x45\xfb\xf6\x65\x01\x6a\x09\xa6\x98\x60\xb1\xdd\xb9\x47\xc5\x99\xa1\xce\x0b\xc3\xf9\xe2\x92\x0b\x1b\x01\x48\xf0\x34\xc6\x70\xda\x16\x78\x63\x23\x40\x68\xb6\xfd\x93\x2e\xf4\x4e\x9c\xd0\x85\xb3\xf5\xe0\x9b\x1e\xcd\x09\x1a\x15\xa6\xa9\xc9\xf3\x3b\x41\xb8\xde\xaa\x23\xef\xb5\xc3\xaf\x10\x26\x4e\x90\xbd\xb6\x25\x53\x2a\x04\x9b\xe9\xd2\x5f\x88\x24\xe9\x6a\xe7\xc2\xa3\xba\x20\xb6\x14\x70\x85\xd5\x7c\x60\x39\xe0\x9e\x7c\xb0\xe7\xce\x21\x47\xc8\x56\x0d\x39\xe1\xed\x4c\xc8\xb2\x40\x0a\x39\xcb\x7a\x3c\xe4\x06\x06\x07\x36\x3f\x74\x0f\x81\xa9\xa1\x2c\xe9\x83\xe8\xb8\x5b\x17\x4a\x49\x78\xbc\xa8\x8b\x7b\x10\x5e\xd8\x06\xec\x1d\xa8\x1e\x50\x6b\x03\xaf\xfa\x62\x24\x54\x57\x1b\x4e\x4c\x83\xac\x01\x7f\x0a\x0b\xb7\x72\x3f\x28\xd4\xa7\xa3\x2b\x3d\xfc\x0c\x95\xc2\x8f\x80\xa0\x11\x46\x92\xc4\xa9\x70\xd0\xf5\x5a\xa8\x3d\xff\x79\x44\x15\x58\x7f\x6a\xeb\x31\xfd\xbd\x72\xf0\x70\xfa\xc7\x07\x5b\xe1\x83\xcd\xf8\x20\x43\xdb\x2f\xce\x84\xc2\xef\x21\x79\xf2\x7b\xe9\x90\xf8\x5b\xd5\x44\x1e\x82\xd2\x01\x8a\xf7\x6f\x6a\x42\x7f\xf8\xc0\x3f\x93\x83\x10\xfe\x3c\x8c\xd9\x05\x92\xfb\x67\x39\xc3\x27\x01\xe1\xef\x0f\xe3\xcf\xff\xdc\xf1\x90\x05\xff\x0b\xef\xfb\xc5\x64\x38\x2f\x99\xf9\xbd\x30\xc4\x8a\xa9\x73\x0b\x81\x47\x7a\xa0\x53\x15\x7c\xe1\x73\x5e\xdc\x4a\x7e\xb9\x8a\xea\xfc\xf2\x32\x5f\x79\xf9\xd5\xc4\x18\xbf\xf8\xe2\xf5\x85\x4d\xd4\x97\xe4\xc4\x0b\x2f\x31\x5e\x3e\x6c\xb0\x0f\x70\xaf\x4d\x59\x41\x6f\xa0\x9d\x67\x50\x11\x1e\x79\x7b\x48\xe8\x2d\xe4\x82\x81\xa5\xef\x4b\x25\x8f\xbc\x86\xe4\x11\x81\x78\x00\x0f\xe5\x97\xe5\xe5\x33\x54\xf6\x01\xc0\x7b\x65\xf2\xea\xb2\xf7\x7e\x0a\x1c\x5f\x14\x03\x32\xf2\xba\xd8\x13\xb1\x17\x64\x6e\xbc\xfc\x87\x1b\xb6\x2f\x1e\x0a\x82\x50\x9a\xd8\x4b\xcf\x05\x5f\x5e\x4f\x79\x5e\x41\x7e\x4e\x4f\xb5\x0c\xc1\x57\x97\xa8\xf0\x0a\x4e\x27\x81\x8a\x68\x07\xa5\x8c\xe5\x15\x1e\xe9\x21\x64\x45\xab\x7b\x85\x15\x42\xb7\x5e\x01\x6a\xae\xca\x0b\xbb\xb0\x2f\x68\xd7\x13\xca\xd8\xc3\xff\x28\x8a\x0a\x40\xad\x62\xef\x99\x5f\x98\x9c\xbc\xa8\x61\x4e\x29\xfb\x61\xc1\x5f\xce\xcc\x2f\x4f\x28\x5f\x81\x39\x1f\x78\x9c\x24\x54\x9a\x09\x28\x1d\x1e\xf6\x94\x1a\xed\xf6\x15\xce\x67\xc4\xf4\xc1\xd0\xf8\x97\xc5\x16\x4e\x2e\x81\x5e\xe1\x7c\xc1\x3c\x19\xb0\xee\x89\xbe\xd0\x05\xaa\x97\xd4\x33\xf1\x82\x7e\x2a\x01\xff\x63\x39\xd8\x31\xf7\x4b\x7b\xab\x97\x76\x57\x2f\xdd\x9f\x7c\x85\x6c\x9f\x92\x0f\xfd\x52\x00\x3a\xce\x99\x8e\xb3\x9a\x6a\x5b\xd5\x0b\x6c\x87\x8c\x7a\x30\xcc\xed\x37\x5d\x42\x3a\xc4\x2b\xc0\xa4\x68\x88\x57\x7a\x05\x87\x72\x4a\xcc\x32\x3e\x8e\x7f\xc9\xc4\xf2\x35\x3d\xd2\x7d\xe9\x23\xdd\x17\x1e\xe9\x8a\xb9\xb8\x8b\x60\x72\x83\xbc\x69\xa7\xce\x31\x5f\x58\x8e\xb7\x15\xbd\xd8\x4b\x1c\xdc\xf4\x74\xab\xfc\x50\x00\xa6\xfd\xf6\xf8\xff\x7f\x2a\x7e\xfd\x75\x47\xb6\x5d\x50\xb5\xe1\xa2\x47\x00\xb2\xf0\xbe\x76\x59\xb7\xbc\xee\x0b\xeb\xb5\xd7\xad\xfa\xc7\xca\xeb\xa6\x00\xee\xd7\xad\x6f\x3e\x05\xe8\x6b\xfb\xd7\x5d\x3e\xba\x0f\xf8\xba\x99\xe5\xb7\x3d\xf0\x26\x42\x7a\xa2\x7b\x88\xc1\xc4\x08\x65\x86\x46\x87\xff\xb4\x77\x8f\x4e\xff\x8e\xd2\x57\x47\x95\xb2\x4a\xda\x07\xb8\xe8\x18\xde\x69\xe7\xb7\xd8\xe8\x8e\x4e\x6b\x44\xd4\xd7\xfd\xd1\x5d\xdc\x7d\x13\xc0\x49\x45\x74\x05\x26\x2c\xd1\x07\xf0\xb1\x7c\x74\x1a\x3b\x4f\xbf\x20\xc1\x49\x43\xb6\xc4\x57\x8a\x4c\x8e\xee\xdd\xeb\x42\x74\xef\xb4\x64\xdc\x77\x56\x88\x70\x3f\x3f\x45\x7a\xd6\xe8\xb1\x0d\x18\xbd\xb3\x8e\x38\x7a\x58\xe3\xc1\x21\x88\x9d\xcd\x46\x7d\x60\x17\x71\x36\x16\x71\x20\x86\xb0\x34\x5b\x23\x64\x46\x68\x18\x2a\x3e\x42\xc0\x98\x3c\x44\x3d\xd3\x32\xd7\x1f\xef\x14\xdd\x6c\x64\x11\x5d\x71\xf4\xbe\x8e\x80\x98\x3c\xff\xd6\xf0\xd0\x35\x83\x30\x14\xd6\x0d\x0a\xd9\x36\x3f\xa8\xc9\x20\x3b\xd4\x6a\x94\x28\x95\x2c\x62\xdf\x25\xf2\xe8\x06\xba\xd0\x4e\x2e\x12\x54\x2f\x1a\xa8\x06\x11\xd6\x31\x50\xc5\xc0\xe2\xb5\xa5\x7f\xb4\xd5\x77\xc4\xb5\x3a\x36\x5b\x31\xd9\xe5\x0a\xd2\x12\x0d\x17\x77\x2f\x05\x70\x8f\x33\x86\xeb\x75\xea\x7f\x67\x4a\xfa\x27\x9f\x27\x46\xed\x1a\x48\x29\xf9\x36\x86\x2e\xfa\x21\x86\x4b\xcf\xfb\x04\xe1\xd0\x5e\x00\x86\x36\x01\x5a\x77\x04\x61\x11\x06\x94\xf1\x44\x3b\x4a\x27\x93\xbd\x02\x7c\x82\xa6\xe6\x9d\xde\xa1\xfe\xfd\x94\x28\x3d\x78\x84\x7e\x41\xfc\x91\xc4\x71\xc2\x61\x1b\x88\xa7\x2d\xa5\xe1\xf3\x19\x12\x65\x8d\xc7\x84\xaf\x49\x5d\x61\x65\x51\x49\x72\x0a\xb9\x3b\x1f\xd3\xc5\x85\x54\x4c\xd2\xb5\x89\xd9\x9d\xc0\x3b\xaa\x37\x24\xe5\x8b\xd9\x3b\xf8\x48\xf5\x55\x25\xa6\xc6\xa1\x0e\xa0\x7b\xc5\xf9\x1d\x48\xb7\xc2\x8d\x1b\x90\xd8\xed\x3e\x4b\x72\x68\x45\xb6\x89\xdc\x6f\x38\xc4\xf4\xb9\xb0\xfb\x13\x93\x8a\xa1\x88\xb2\x18\x8e\xd8\x04\x5d\xfd\x66\x12\x08\x62\x63\x73\x68\x30\x64\x3c\x8b\x6d\x83\xe1\xf0\xa8\x35\xb6\xed\xe9\x65\x8a\x16\xdb\xb6\x61\x46\xa2\x40\x7a\xd6\xd8\x34\xdb\xda\xb6\x8d\x56\xd9\x58\x1b\x85\x6c\x6c\xdd\x02\x59\x3a\x90\x7b\x84\x99\x44\x6c\x87\x15\x09\x10\xef\x91\x10\x8f\x9e\xa6\x1d\x53\x4a\x8f\x98\x98\x00\x6d\xb5\x0d\xb7\xd3\x08\x6e\x25\xac\xb2\xb8\x22\x13\xdb\x28\x8b\xdb\xa8\xf4\x9d\x87\x76\x82\xa4\x29\x09\x8a\xdc\x26\x11\x80\x03\x3e\x01\xa6\x17\x13\xcc\x95\x7e\x09\xca\x07\xa9\x38\x20\x20\x5e\x4c\x8c\x05\x07\x14\x2e\x97\xc3\x65\xb7\xad\x46\xf5\x1f\x9e\x56\x1c\x8e\x43\xde\xc1\x8e\xef\x70\xac\x00\x47\xbf\xa5\x70\x0c\xc1\x71\x07\x5e\x22\x1d\x1e\x92\x77\x15\xc1\x89\xef\xc2\x99\x0f\xef\x5f\x62\x72\x53\x43\x68\xff\x83\xe7\xd3\xa4\xf2\x29\xb2\x78\x3c\xc2\xba\x49\x05\x3a\x82\xb7\x30\x43\x74\xbf\x20\x60\xa4\x0e\x1f\x7a\x28\x78\x48\x29\x1d\x81\xe9\xe4\x40\xc2\x8d\x06\xdc\xfa\x47\x98\xa1\xee\x45\x45\x1c\x0b\x16\x2b\x6c\xb2\x1c\x49\x8f\xd6\x8f\x04\x43\xaa\xa0\x98\xcb\xee\x70\xf9\x51\xf0\x9e\x8c\xe2\x4c\x40\x20\x47\x0e\xa0\xc6\xdd\x7d\xc1\xa3\x7f\x15\x4e\x2d\x4b\x35\xb7\x1a\xcf\x0b\xc1\xa1\x34\x52\x5a\x37\xba\x4b\x75\x7f\x60\x41\x05\xd8\xed\xb4\xd7\x04\x0e\xf6\xaf\x45\x91\xf4\x3b\xb2\x7f\x64\x84\x99\x37\x57\x1e\x2c\xed\x0c\x39\xef\x47\x5b\x6d\xcc\x3b\xda\xc6\x83\xe6\xa3\x69\xf7\x70\xdc\x15\x37\x22\x4f\xa4\x4f\x4c\x6e\xa0\x9d\x8e\x13\xc4\xd3\x3d\x9b\x98\x1b\x0c\xac\xa3\xd1\x2f\x9c\x18\xd9\xcf\xae\x41\x03\x48\x2f\x1b\x9c\xa6\x4e\xe3\xc4\x1e\xb0\x98\xd0\xd8\xac\xa8\xaa\x9d\x79\x7c\x79\xc8\x1c\x12\xc0\x61\x47\xd0\xc1\xf9\x8f\x40\xa8\x63\x04\xe2\x24\x51\x10\x27\x36\xa7\xb3\xad\xb5\xd3\x5d\x0f\xfd\x82\x6b\xcd\xd0\xb3\x2f\x90\x33\x94\xd3\x5d\x38\x9e\x30\x29\x73\xa4\xdd\xfd\x35\xc2\x18\xb7\x43\x4e\x9b\x07\x9c\xe8\xa9\x4f\x56\xe5\xd3\xe5\x48\xca\xa4\xeb\x8c\xff\x74\x4c\xeb\x9f\x0d\xda\xa7\x77\x2f\xc8\xbc\x15\x00\x17\x7e\x24\x15\x7b\xf9\x62\xf2\x0f\x33\x8d\xf6\xde\xf6\xf4\x1e\xb1\x78\xff\xe7\x39\xfc\xfc\x3f\xb6\xae\x6d\xbd\x79\x96\x57\x9e\xf7\x2e\xb1\x4d\x6c\xbe\xd8\xc0\x8b\xa1\x69\x7a\xf5\xeb\xd1\x8c\x04\xa4\xff\x3a\x08\x1a\x11\xcc\x7e\x23\x40\x40\x84\x2e\x48\x0c\x8b\x18\xf0\x45\x87\x4a\x52\x71\xaa\x58\x1c\x07\x7d\x6e\xec\x8e\x81\xd7\x6d\x09\x0d\xc3\xea\x34\x3b\x68\x1c\x44\x5d\xe4\x8e\x10\xe2\xc4\xd4\xf2\x09\xd9\x17\x9d\x6d\x44\x95\x92\x49\xbb\x57\x23\x07\x03\xfe\xd4\x7d\x46\x00\x22\x19\xce\xa2\x3e\x97\x0b\x60\x1f\x08\x94\xb9\x57\x14\xa9\x77\xe7\xf3\x8d\x77\xc4\xcc\x88\x7b\xe8\x31\xb1\x11\x45\xec\x34\x47\xbd\xa8\x8b\xd4\x62\xc5\x81\x3b\xb2\x9a\x40\xd9\x4a\x3d\x4f\xbf\x74\x5c\xa0\x58\xa3\x4f\x32\xdf\x91\xee\xea\x70\x87\xca\x91\x5e\x30\x78\x63\x92\x00\xdf\x41\x61\xb4\x5f\x5a\x8b\xd3\x6b\x39\x31\xfd\x10\x84\x5e\x3b\xa6\x17\x24\x6a\xa1\x05\xf2\x58\x4c\xaf\x8d\x7b\x82\x40\x89\x56\x0f\xf3\xfc\x41\xe5\x14\x41\x27\x1b\x49\xdf\x2c\x8d\xba\x31\x0a\x7a\xd3\x03\x9b\x4c\xc7\xf4\xca\xac\xb6\xe9\x95\x75\xc0\x25\x64\xe4\xa9\x4b\x05\x90\x7c\x07\x85\xe8\x84\x74\x25\x88\x37\xfc\x47\xbd\xf8\x28\x8e\x9d\xc5\xd8\x1e\x0f\xd6\xdb\xa6\x55\xa6\x8d\x2a\xd3\xac\xca\xd8\x3c\x43\x00\x74\xd2\xa3\xf5\x26\xf1\xed\xbf\xee\xe4\xb8\x7e\x25\x14\x03\x68\x62\x1b\xc0\x53\x03\x49\x1a\xaa\x74\xdb\x02\x98\xb1\x82\x24\xcc\xe4\x32\xab\x5c\x72\x39\x9d\x78\x97\x05\x58\x05\xa8\xe4\x32\x5b\x01\x9f\x66\xbe\x13\x24\x65\x3e\xc5\x7c\x27\x1d\x96\xd3\x62\x62\x67\x5a\x0a\xaf\xf9\x16\xf0\xaf\x49\xb5\x4d\x2b\xe3\xb5\xf2\xba\xa6\xb4\xae\x24\xe3\xc6\x70\x60\x13\x34\xf5\x28\x9b\xae\x2f\x8c\x63\x6e\xe3\x88\x1b\x51\xf5\x1d\xbd\x0d\xfd\x7e\x7c\xf5\xab\xe1\x78\x75\x90\x16\x3b\x04\x2a\x4c\xbf\xb2\x13\x0c\xae\x81\x10\x74\x2a\x09\x71\x6f\xe1\xe6\x81\x50\x58\xa4\x3d\xac\xee\x1c\xcc\x7d\x4d\xb8\x76\xac\xbe\xeb\xd9\x26\x81\x19\xdd\x94\x21\x58\x3e\x61\x6c\xe2\x9e\x71\x54\xd9\x42\x67\x70\x42\x50\xa4\xeb\x73\x0c\x6b\x09\x1b\x22\x69\x45\x2d\x95\x96\x9a\x36\x07\x43\xb3\xc2\xd4\xc9\xd3\xe6\x2e\x54\xb9\xb4\x2d\x8d\x2d\x3b\x6d\x9b\x9d\x72\x4d\xbc\x27\x38\x3d\x1c\x0c\xf9\xf3\xf1\x90\xfe\x23\x3d\x1e\x25\x54\x91\x4b\xd2\xa3\xe2\xcf\xca\x36\x29\x80\xeb\x4b\xe9\xa1\x5a\x18\xe9\x51\x39\x64\xa4\x07\xc4\x95\xf4\xd0\x8d\xa1\xf4\xa8\x14\xb1\x05\xa0\x3b\x49\xd8\x02\x4f\x92\x01\x32\x72\x25\xdd\x62\x4a\xe1\xc4\x82\x76\x0a\xc5\x91\x48\x1f\x9a\xfe\x93\x80\xff\x4b\x4d\x66\x6f\x10\x07\xd2\x93\xbb\xa9\xa4\xc8\xd1\xa7\x88\x26\x28\x26\xaa\x26\x80\x14\xd0\x48\x73\x33\x36\x91\x20\xc1\xe7\x78\xba\x2d\xd9\x6d\x35\xc9\xee\xaa\x01\xe8\xce\x7a\x2d\x92\x19\x25\x6d\x37\xfa\xad\x3e\x6f\x61\x50\x6d\x3b\xc0\x5c\x9c\x23\x7e\x03\x20\x06\x7e\xd5\xd0\xfc\x15\xb1\x77\x3e\xce\x67\x12\x8d\x00\xc1\xd1\xf3\x7e\x68\x33\xe9\x55\x1b\x8a\x64\xd6\x91\x4e\xaf\x57\xc7\x09\x2a\x58\xba\x49\xe7\x83\x59\x7b\x3e\x5c\x85\x52\x6b\x3a\x1f\x7e\xdf\x43\x22\xe2\x4e\x60\xc2\x9e\x48\x2a\x03\x59\xa4\x85\xc3\x26\x4c\x92\x79\xdf\x9e\x14\x14\x8d\x67\xd8\xf0\x7a\x8c\xb5\x58\xe3\x7b\xab\xa5\xc5\xda\x53\x02\x96\x29\xb1\xa7\x34\x04\xa5\x2b\xc4\x8d\xb0\xd1\xea\x11\xb6\xc0\xdc\x55\xa8\x99\x15\x1e\xa7\xdd\x57\x90\xce\x70\xa6\x7f\x8d\x47\x62\x94\x61\x24\x44\xdc\x49\x67\x80\xc6\x92\xd0\xdb\x3e\xd6\xbb\x94\xd2\xd9\x13\x85\x3d\x1d\x3c\xc1\x82\x26\x66\xef\x80\xdf\xe9\xbc\xa6\x02\x40\xb2\x93\x56\x8a\x14\xd7\xc3\x3d\x89\xa0\x52\x9a\x4e\xe9\x11\xe0\x5d\x1b\x59\xd1\xa6\x5c\x60\x75\x69\x2c\x9a\x66\xbe\xb6\x6a\xa5\xfa\x0d\xa3\x07\xf7\xcd\xa3\xae\x89\x3b\x81\xe9\xfc\x4e\xe7\x9b\x9d\xd2\xe5\x60\x70\x0b\x3a\xe9\xf5\x1f\x8c\xd7\xb8\x0b\x04\x50\x5f\xb2\x50\xec\xd9\xae\x84\xa9\xdc\xf7\x21\xc6\x6c\x26\x5d\xa3\xa3\xbe\x16\xdb\x7d\x02\x14\x29\x36\x5d\xbe\xdc\xae\x9d\x08\x84\xbd\xca\x75\x79\x3e\x31\x93\xae\xe8\xae\xa5\xa9\x9a\x47\xe7\x34\x21\x9d\x4d\x93\x53\x8d\xba\x31\xf0\x35\x6a\x49\x4e\x0c\xd2\xd1\xcf\x24\x1b\x14\x5b\xf1\x39\x3a\xed\x9b\x71\x2f\x81\x98\xec\x10\x78\xe4\x4c\x08\xf6\xba\x53\xdc\x58\xfb\x71\x19\x17\xae\xe2\x5a\xf9\xa0\x0f\x47\x31\x54\x94\xb8\x53\x94\x48\x51\x27\xaa\x02\x4c\xee\x4b\x71\x7f\x8a\xe8\x93\xe2\xae\xbd\xa6\x80\x62\xff\xd9\x2a\x59\x8a\x1c\x12\xb8\xf5\x03\xe2\x69\x1f\xfd\x38\x2b\x4b\xee\x77\x70\x48\x4e\x5a\x5a\x22\xb0\x9e\x28\x26\x9e\xef\x13\xd0\x67\xb2\x49\xf5\xb2\x52\xda\xd1\x2b\x22\x56\x49\xf2\x40\x44\x28\x4e\x04\x6c\xa6\x22\xf4\xe1\x6e\xeb\x7f\x53\x1d\xf7\xbf\x09\xa3\xef\x04\x0c\xe9\x4c\x24\xa2\xc4\x85\xed\xa4\xef\xc5\xd8\xb5\xbb\xa4\xfd\x9f\xe9\x56\x88\xce\x6b\x72\xc0\xa2\x87\xcb\x47\xe2\xfb\x81\x29\x1f\x25\xdd\x6f\xe4\x35\x9e\xb1\x11\x53\xb7\xf9\xcd\x93\xdc\xe3\x80\x27\x0a\x93\x22\xa1\xe8\xae\x8a\xe3\xf5\xcf\xa9\x2c\x30\x90\xc1\x65\x09\x15\xbd\x7d\x59\x8c\xa0\x0b\x2d\xab\x8a\x1e\x02\x24\x2a\x65\xeb\xfd\x4c\xd9\xe8\x7b\xf1\x3a\xda\x15\x9d\xe2\x28\xf0\xdd\xe1\x7e\xf0\x7f\x74\x77\x25\xc0\xc0\x01\x5a\xbd\xd3\x35\x95\xb4\xa0\xba\x95\x94\x6b\xe0\x55\x31\xa9\x24\x9e\x61\x15\xa0\x4a\x0d\x80\xe8\x0d\x54\x43\x27\x95\xac\x99\x55\x70\x59\x6b\x2a\x36\x19\x4f\x05\x67\xed\x40\x18\x44\x49\xaf\x51\x0b\x21\x6a\x51\x62\x56\xd5\x45\x21\x7c\x0e\x53\x90\xf9\x8a\xde\x53\xdc\x56\x5f\xba\xe0\x41\xf7\xcc\xaf\x26\xbf\x85\xe3\x4d\x5b\x8a\xbf\xf1\xc0\x07\x20\xa6\x9a\x82\x4c\x42\x6b\xeb\xc1\x16\xd2\x38\xfd\x4c\x4d\xaa\x5c\x83\x37\x63\xa3\x81\xf3\x61\x31\x4d\x20\x68\xfa\xfa\x96\xbe\x3c\x0e\x3a\xea\x1f\x5e\x07\xee\xe2\x8b\x3d\x28\x0e\x44\x2d\x14\xa0\x92\xd2\x83\xfd\x78\x8b\x5b\x2d\x90\xb3\x71\x95\x4a\x6a\x99\x2a\x59\xa9\x65\x28\x81\xa4\x96\x1f\x81\x34\xe0\x42\x82\xc4\x53\x56\xa9\xe5\x0b\xd7\x0c\xa6\x96\xef\x9c\xe8\x14\xa7\xe4\x40\xa6\xf8\xeb\x03\x3f\x22\x60\x98\x4d\x6e\x0a\xd8\x34\x9a\x6e\x10\xa5\x76\x3b\x7d\x7e\xc3\x20\x0b\xbf\xdd\x38\x44\x92\x9a\xbe\x2f\x2b\x80\xae\x58\x66\x42\x78\xb9\x21\xa7\xd2\x62\x7a\xc7\x4f\x89\xd4\x99\xe2\xd8\xd9\x4e\x6d\x75\x86\xdc\xe4\x20\xfe\xf9\xc7\xa2\xaa\xba\x1c\x02\xb8\x34\x66\xc8\x3e\xcd\xee\x45\xf0\xf2\x16\x93\x97\xef\x31\x51\xfa\xed\x63\x10\xf0\xed\x8b\x87\x96\x93\x21\xd4\xeb\xef\x80\x9a\x22\x04\xa7\x28\x80\xd8\x7f\x7c\x3f\x8f\x24\x83\xe3\x37\xf4\x7e\xd3\xcb\xc5\x1b\x44\x3c\xd3\x1d\x38\xce\xeb\xde\x00\x54\x6a\x95\xa9\x1b\x1c\x40\x25\x0c\x95\x48\xfe\x7e\x2f\xd8\x9f\x4c\xb8\x21\x2d\x7f\xdd\xd9\xc9\x4f\xca\x52\x4c\x6a\xef\x09\xe2\x53\xff\x80\x18\x0f\x04\xf0\x96\xcc\x4c\x71\x50\x08\xbb\x51\x20\x2c\x26\x0a\xa2\x26\x5b\x76\x7d\xe6\x20\x50\x72\x2f\xcf\xa7\xb6\xb3\x9e\xad\xcb\x38\x28\x27\x26\xe5\x3c\x20\x69\x17\x99\x67\x9f\x85\x70\x4d\x37\xbb\x2d\xfc\x08\xf1\xea\x1b\xff\xf6\xf5\x97\xfe\xec\x87\xaf\x35\x08\x3a\x60\xd2\xf6\x3c\x69\x6a\xcf\x2a\x90\xdf\x9d\x19\x9b\xcb\x99\x69\x8b\xab\x87\xc3\xb8\xf9\x1f\xd2\xa2\x16\x3b\xfd\x89\x41\xf9\x27\x3f\x57\x9d\x85\xac\xcf\x81\xe0\xfd\x30\x99\x7c\x66\x07\xae\xf0\x6d\xe5\xdc\x6f\x59\xc9\x9c\xdc\x81\x84\x05\x60\x57\x8b\xb0\x91\x58\xb3\xe6\xae\x72\xd6\x7d\x29\xa1\x7d\xf5\x46\x98\xd3\x6c\xb1\x69\x29\x80\x7f\x9c\x1a\x21\xf6\x7e\xa4\xfa\x8e\x25\x99\xc3\xbd\xe8\x6f\xe5\x8d\x7e\xd9\xf1\x30\x70\x86\x74\x23\x66\xe2\xbd\x40\x06\xab\x42\x95\x98\x80\xed\x52\xf0\xec\xf0\x6f\x5d\x0f\xea\x73\x65\x74\xd8\x32\xff\x22\x19\x85\x5f\x43\xd7\xc1\xcc\x58\x54\xdd\x1c\x0b\x1a\xd8\x3e\xae\xa6\x19\x95\x1d\xf5\x08\xb2\xb3\x82\x55\x85\xf0\xcc\x87\x89\xb2\x7b\xa9\x09\x4b\xef\x9e\x43\x46\x16\xce\xbb\xfb\xad\xa8\x18\xd5\x6a\x8a\x8a\x9f\xb1\x19\x94\x75\x0d\x57\xa8\x56\x3c\xef\xf8\xea\x3d\xd0\x65\x4e\x2f\x88\xfe\x82\x38\x49\xcf\x7e\x85\x31\x4f\xa1\x8d\xbd\x06\xac\x1d\x22\x13\xfc\xc7\xe4\x99\x6c\xff\x63\x58\x7a\x25\x37\xe9\x90\xf6\xc9\x31\xc2\x6b\xb8\xbc\x5a\xa9\xbe\x0b\x60\x6f\x58\x58\x86\x13\xd3\x06\x61\xc1\xa7\x37\x7a\x0f\x77\x95\x0a\xc9\x44\xfd\x86\xd1\x89\x55\xcf\xf5\xce\x66\xa2\xd2\xbf\xd6\xe8\xe0\xa8\x1f\x69\x4f\x6d\xed\x77\xd3\x80\xd1\x40\x4a\x5a\x52\x7f\xb2\x80\x16\xeb\x81\xfb\x6d\xca\xbb\x5b\xa4\x33\xf5\x47\xbf\x69\x45\xf1\xb4\xe3\x7c\x7c\x30\xc3\xaf\x5e\xcb\xc0\x1d\xfe\x0c\x1f\x9f\x9a\xc5\xf8\x1e\x36\xba\xd8\x46\x1b\x8e\xf2\xc4\x1f\xf1\xfc\x88\x50\x3e\x52\xfd\xfc\xdb\x6c\x26\x37\xf3\x7c\x78\xb6\xfa\x08\xaf\xb8\x2d\x7c\xfa\xf4\xf1\xb7\x30\x56\x97\x94\xb5\x00\x1a\xd3\xd5\x27\x08\x7f\x6f\x15\x52\x5e\xcb\x8d\x3a\x79\x99\x8a\x28\x20\x73\x45\xf0\xeb\x71\x59\x73\x21\x66\x57\x22\x0c\x16\xba\x32\x56\xa5\xc5\xe4\x8a\x05\x10\x36\x65\x0d\xd9\x07\x9b\xfa\xb2\x75\x99\x20\x8f\x0b\x57\x09\xf7\xc1\x24\x25\x3d\x07\xfc\x76\x77\xa4\xe3\x08\x90\xc6\xe1\xe5\x35\x74\x9a\x70\x18\xe8\xd9\xe9\x7b\xe1\xf1\xb3\xf3\x5c\x54\x45\x5a\x30\x37\xe4\xb2\xae\xdb\x0a\x0d\xab\x53\x1b\x8d\xfb\xa9\x21\x9f\x4d\xfb\x78\x4e\x97\xb2\x6a\xe7\x66\x6f\xbe\xc5\xad\xea\xb1\x88\xec\x13\x02\x67\x05\x2f\xbb\xde\xea\x93\x7d\x29\x6f\x2e\x1a\x65\x7f\xdf\xae\x54\xc5\x10\x47\xf3\xe1\x56\xdf\x8b\x0d\x0c\xdb\x1d\xa0\x48\x9d\xf9\x70\xbe\x60\xa6\x00\xe1\x3a\x1f\x6e\x8f\x0a\xec\xd1\x8c\x7c\xe0\xfe\x02\x21\x5c\xb9\x00\xd2\xea\x7e\xcc\x37\x84\x0e\x8e\x35\xe9\x98\x6e\x08\x15\x17\xd6\x68\x79\x03\x95\x10\xdc\x22\x65\x76\xaa\xe0\x49\x78\x13\x60\x85\x44\xc1\xf4\x7f\x2f\xc6\xc3\x17\xbc\x5b\x44\xa0\xf1\x0d\x51\x7b\x0c\x11\xa5\xd2\xf5\xf6\xd0\xbe\x27\x47\x25\x4c\xc1\x32\xf8\x1e\xc5\xed\x98\x0d\xcd\x18\x41\xbf\xf7\xab\xa7\x51\x31\x5a\xf3\x60\xde\xc6\x5d\x2e\x8e\xf8\xbc\x77\x9c\xdd\xce\xd0\x9d\xce\x38\x21\x91\x00\x3c\x4d\x5d\xb0\x05\xc4\xba\xb7\x20\xb3\xa1\x0c\x98\xc3\x6a\xb5\x38\xac\x1c\xa0\x84\x7a\xa5\x28\x1e\x6e\xe0\x83\xd8\x79\x13\x30\x5a\xc3\x02\x9e\x2d\x89\x8a\x74\x38\x09\x7e\xf7\xa7\xe7\x33\xc6\xd4\xd6\x14\x93\x9f\xd2\x7c\xc0\x78\xf4\xd0\xf7\x48\x57\x7b\xc2\xf7\x4f\x4f\x73\xa3\x0c\x17\x6c\xff\x49\x10\x25\x84\xf0\xf4\x11\xb3\x89\x4c\x55\xf4\x1c\x9e\xdd\x33\x26\x40\xf7\x5b\x05\x04\x6c\x45\x19\xa2\x9b\x93\x4a\x05\x82\xa8\x0a\x23\x88\x8d\x32\xe0\xda\x7f\x5a\x55\x84\x1a\x1d\x4d\xbe\x9e\x05\x44\xfb\x55\x25\xf3\x1c\xe2\xc6\x60\x85\x6a\xc0\x51\x37\x15\xa8\xc2\x9b\x83\xa6\x31\x4e\xbb\x8e\x99\xef\x59\xe6\x10\xc3\x03\x42\x5a\x3f\x4a\x9a\xb1\x69\x91\x43\x8c\x7d\xf9\x0c\x8c\xa6\x56\x25\x34\x50\xf5\x21\x6a\xe9\xc6\xe8\x95\x6a\x11\x61\x1d\x21\x87\x88\x37\x52\x85\xde\xe6\x5d\x8f\xfc\x50\xb9\xcc\x21\xd6\x63\xea\xd2\x43\xd4\x0a\x81\x11\x31\x14\x1d\x5e\x43\x71\x5e\x2d\x2c\x72\xc5\xe9\xe3\x40\x0a\xbb\x64\x80\x35\x35\x31\xf9\x81\x95\x60\xc1\x7d\xb3\x39\x14\xeb\x61\x42\x09\x55\x49\x1f\xe6\x43\x09\xdd\xd3\xc0\x4b\xa8\x80\xe6\x2c\x2c\xa1\xce\x37\x7f\x0d\x0b\x26\xce\xb8\x6b\x66\xea\xc4\x68\xf4\xc9\xfc\xfe\xf5\xe5\x77\xf6\x65\x38\x1d\xb2\x49\x28\x4f\x4d\xd0\x53\xcf\x92\x13\x76\x9c\xd6\xc3\x79\xd6\x27\xc5\x9c\xed\x93\xed\xff\x58\xc3\x0f\xd4\x2f\x26\xb2\xe6\x1e\xc6\x70\x1d\x4a\x8a\xe9\x74\x2b\x77\x5a\x72\x60\x93\x2b\xda\x7e\x71\xbd\x7c\x0e\xba\x0c\xaf\x80\x5e\x0c\xb9\x56\x6b\x77\x1d\xb3\xdc\x1c\xea\x43\xcb\xa9\x76\x9d\xec\xac\x7a\xb1\x59\x55\xe2\x84\x26\x66\x4e\xfd\xa5\xe9\xe3\xd2\x0a\x92\xf9\xfd\x75\x67\x6e\x8f\xe5\xd3\xc5\xf5\x88\x61\xb5\xdb\xa5\xd4\xc2\x06\xb3\xd3\xdd\x07\x27\x78\x84\x5c\x16\x00\xd6\x21\xed\x54\x4d\x06\x00\x6b\x10\x50\xea\xca\xa7\x7b\x3f\xb0\xa2\x95\x4f\xce\x75\x84\x68\xbf\x73\xfa\xd8\x97\x73\xc8\xcc\x4b\x49\xb0\x81\xec\x00\xd0\x14\x8d\x48\xfa\x48\x75\x6a\xa0\xa6\x20\x5d\x7e\xc7\x9b\x85\xf9\xf4\x8d\x17\xa2\x64\xd5\x83\xd2\x1d\xeb\x4c\x25\x48\x10\xb5\xae\x37\x89\xf2\x09\x1a\x30\xf9\xc4\x9a\x57\x3e\x13\xd4\x1e\xf2\xc9\x07\x78\xf2\xd9\x4c\x3f\x23\xb3\x85\xa6\xad\x5d\xec\x68\x6c\xe3\x43\x00\x1d\x84\xf3\x81\x73\x70\x82\x78\x34\x0b\x48\x27\xb1\xe9\xe9\x71\xf3\x84\x42\xfd\xff\xe9\x6f\x3d\x64\x9b\xd3\xd9\x45\xf3\xc4\x4b\x09\x85\xb6\x33\xe0\x1c\xa2\xe2\x1f\x22\x19\xed\x03\x6d\x19\x87\xb8\x73\xf3\x3f\xeb\x93\x8a\x42\xa5\x9b\xed\x96\x21\x2a\xb5\x07\xaf\x84\x49\x6b\x42\xbf\x97\xf4\x6d\x49\x01\x9d\xd2\x97\x7e\x34\xe2\xef\x3d\x91\xc2\xb3\xc2\xe1\x4a\x19\x31\xd9\xc9\x61\x75\x53\x4c\xab\x1c\xd8\x71\xce\x58\xef\xcc\xf6\x45\xd4\x4a\x26\x08\x4a\xb1\x82\xac\x4f\xd6\x37\xd5\x48\xd9\x39\xa4\x44\xbd\x55\x01\xc3\x5f\x38\xfa\xb8\x69\x54\x59\x8d\x71\xd1\x8b\x67\x05\xc5\x9d\xc2\x0d\x0b\xba\xaf\xf3\xe5\x54\xf4\x05\x40\xa0\x37\xb3\xc6\xce\xf7\x09\xea\xdb\x8a\x60\x52\x34\x6f\xf4\x51\x40\x41\xaa\xbe\x4f\xf8\x66\x72\xfa\x73\xdb\x02\x6b\x09\xeb\x91\xba\x2f\x7c\x06\x85\x28\xa8\x9b\xa2\x56\x0c\x9f\xb5\x33\x95\x3a\x7a\x81\x54\x6a\x98\x60\x17\xbc\x53\xa9\x46\x56\x2d\xd9\x52\xad\x7e\x11\x9d\xd3\x87\x77\x3f\x25\x0c\x8e\xba\x8a\x84\x56\x11\xc7\x55\x5f\xc0\x88\x1f\xfc\x9d\xbb\xf6\x54\x55\x7f\x35\xa7\x3a\xc6\x04\x55\x6c\xcb\x43\x2b\x20\xdb\x49\xeb\x9c\x1a\xce\x18\x64\x2a\xfe\x80\xe8\xb8\xa6\x4b\x6d\x59\x22\x85\xb7\xa8\x32\xb4\x39\xc5\x64\xe7\x56\x30\xf8\x17\xae\x7d\xe7\xe2\x75\xad\xa6\xf8\xf5\xd8\xfd\x0d\x8d\x54\x30\x77\x0d\x17\x46\x2e\xec\x3e\xe6\x12\x76\x9a\xe3\x00\xa1\x70\x3c\x1d\x95\x71\x99\xdb\xb9\x29\xb2\xae\x8e\xf8\xa9\xc8\x1b\x2d\x0a\x0e\xe7\xee\x0e\xcf\x6a\x90\x13\x79\x40\x4d\x5e\x09\x5d\x43\x56\xf1\xae\x88\x63\x2c\x10\xbb\x7c\x81\x53\x9c\x78\xad\x21\xa0\xca\x82\x25\x44\x5d\x86\x01\xea\x5e\xd1\x1f\x35\xbd\x92\xc3\xbe\xa9\xb7\xfa\xa9\x9b\xd0\xb9\xe0\x45\x69\x10\x8b\x58\xa3\x85\x0a\x6a\x85\x8b\x6a\x6d\x83\xc1\x3c\xe6\x59\xe7\xdc\x70\xe7\x3d\x00\x4d\x8e\x70\x2d\xe2\x4c\x2f\xa8\xfa\xd9\xa2\x2e\xac\xa0\x17\xd7\x8e\xb4\x4d\x37\xe6\xe5\xc6\xb7\x26\x41\xdf\xa4\xc1\x2c\x98\x0e\xea\xf4\xe5\xa6\xed\xa0\x15\x56\x83\x56\x63\x78\x82\xa2\x0d\x8a\x93\xf7\xce\x4d\xa1\x7f\x5f\xf7\xbf\xed\xeb\xfe\x27\xb4\xb9\x85\x26\x9f\xdb\xfa\xd7\x1c\x8e\xc0\xfc\x6b\x52\x48\x62\x6e\x6a\xcd\x37\x88\xff\x35\x77\xa2\x4f\x17\xa0\x97\x73\x13\x32\xbe\x82\x4f\x25\xfa\x21\xee\x48\xfb\xd7\xdc\xe5\x94\xb0\xb9\x08\x4c\xa8\xe4\x44\xbe\x7b\x30\x2e\xd1\xff\xd7\x90\x3b\x20\x0f\xc8\xd0\x80\xac\x41\x80\x93\xbb\xa2\x94\xb5\xe3\x5f\x1b\x43\xae\xe0\x7b\x04\x5b\xbb\x2d\x1b\xa0\x02\x2c\xec\x02\x87\xc9\x81\xe9\x4d\xff\x6b\x4e\xf5\x6e\x04\x51\x8c\x17\xf4\x54\xa2\x1e\xbd\xa8\x38\xf6\xaf\x79\xf7\x54\xc2\x7f\x3c\x53\xaa\xcf\x28\x09\xb8\xfa\xca\xe1\xbf\xe6\x3d\x36\xbb\x04\xfc\xea\xff\x7a\xd3\x26\x51\x9f\x99\xff\x6b\xbe\x7a\x87\xb3\xe9\xff\x5a\x40\xd1\x05\xe4\x85\xaa\x5b\xfd\x6b\x61\xc7\xaa\xe8\xbf\x16\x4e\xf5\x33\xb0\x44\xf8\xf6\x08\xe9\xf8\xc7\x50\xe4\x01\x5c\x41\xeb\x41\xaa\x99\x83\x03\x11\x3d\xf8\x50\x5c\xc1\x79\x10\x81\x5e\x09\xdf\x3c\xed\xd0\xfe\xd5\x1c\x0d\x3c\x7e\x0a\xc0\xf6\x28\x10\x6b\xb8\x0a\x2c\x3b\xf5\x54\xc3\x3f\x34\xad\x7f\x2d\xfc\x8a\x89\x4c\xc7\xab\xde\x25\x7c\xdd\xa5\xd5\xf0\x25\x51\xc1\xa5\xd4\x5e\x69\x17\x9a\x95\x13\x5f\xc6\xad\xd5\x44\xdf\xd0\x7c\x24\xfe\xfd\x70\xfe\xab\xce\xd5\xbb\xd3\x43\xb1\x15\x08\xbd\x7c\x1d\xab\x98\x02\x91\x84\xea\xd6\x15\xe6\xa1\x9a\xa8\x54\xb6\xac\xaa\x31\x4b\xda\xff\x78\xf0\x1d\x3d\x81\xbc\x64\xa6\xba\xb5\x22\x34\x1e\x5e\x27\x55\xa5\xa3\x8a\x65\xf7\xea\x36\xbb\x33\xac\x43\x57\xe7\x3f\x38\x32\x55\x87\x47\xb0\x85\xa8\x90\x5d\xa7\x85\x2b\xc1\xd2\xfe\xab\xd3\x70\x1e\x0f\x9a\xfc\xf3\xf1\xd0\x04\x22\x9e\xbb\xa7\xa9\xba\xd2\x80\xdc\x69\x10\xc8\x4b\x46\x2a\xf5\x98\xaa\xdb\x1f\x67\xcf\x44\x55\x78\xae\x78\x7b\x9c\xad\x84\x58\x9d\xee\xb8\xa9\x4a\x00\xf2\x75\x57\xe5\xd2\xea\xac\xd7\x07\x62\x1c\x22\xf7\xd8\x15\xbd\x15\x59\x48\xd6\xcf\x54\x17\xe2\x54\xbe\x21\xce\x45\xc4\x8b\x8e\x84\x8e\x31\xb8\xba\x40\x3b\x55\xea\x15\xc4\x7e\x44\x10\x26\xcc\x00\x58\xc5\xaa\x90\xff\xab\x5d\xa6\x57\x9d\x4c\x53\x02\x33\xff\x64\x5e\x9d\x6e\xbf\x86\xcd\x35\xf2\x5b\xea\x8c\xda\xf7\x08\x9d\x4f\x9a\xea\xe2\xa4\xa9\xf9\xad\x5a\xdb\x15\x37\xed\x55\xfb\x04\x07\x87\xab\xc3\x72\x72\x75\x57\x30\xe2\x94\x26\xd6\x11\x20\x2d\x61\x60\xa4\xe3\xc2\x1d\x1d\xa0\x5a\x04\x82\x7a\x2b\x16\xb6\xa8\x8b\x98\x68\x91\xbd\x7a\x98\xbd\xd6\x39\x6a\x17\x57\x2b\x8e\xc8\xfe\x08\x40\x23\x1c\x37\x2d\x76\x80\xa9\x51\x29\xaf\xee\x21\x9f\x0b\xe5\x11\x46\x41\x5a\xd8\x71\x0b\xac\x2b\x7a\x95\x38\x40\x53\x37\x5c\xce\x00\xe2\xe9\x6e\x81\x77\x0d\xcc\x3e\x36\x94\x78\x24\x75\xc4\x57\x1a\x00\xaa\xda\x04\x03\xcc\x9e\xf8\xeb\x94\x04\xb4\xdc\xec\x4f\x36\x9c\xec\x91\x05\xf9\xa0\xf9\x3e\xd3\x9a\xd6\xb5\xdd\x9d\xc5\x55\x57\xef\xce\x96\x72\x70\x35\x4b\x79\xce\xbb\xaa\xcb\x6c\x61\xf9\x64\xba\x69\xa8\xa8\x54\xd9\x45\x56\xbe\x51\xa7\xa5\xc0\x21\x47\x68\x63\xc6\xe8\x76\x87\x00\x55\x6b\xae\xae\x3c\xbb\xf3\xb9\x36\xf3\xc5\x76\xa1\x94\x2c\xab\x6d\x32\x55\xd7\x37\xdb\xab\x2b\x5a\x29\x4b\xb5\x48\x7d\xf7\x42\x2a\x76\xd5\x5f\xd5\xbd\xa6\x6a\xfb\x28\xd5\xdd\x61\x53\x57\x38\x66\x4e\x00\x1f\xf1\x37\x2b\x07\x52\x5b\xd5\xec\x1d\x85\x09\x55\x82\xe6\x08\x57\x7f\x86\x81\x79\x5b\x44\x75\x1a\xbf\xea\x79\x6b\x89\xa0\x5b\xbb\x24\x22\xeb\xe4\xea\xc3\x15\xb6\xd6\x7a\xf8\xc8\xb2\xe6\xd2\x63\xed\x29\x12\xaa\xfe\x01\xbd\x0d\xda\x35\x62\x55\x35\x8a\xaa\xde\x03\x4e\xca\xea\x40\x14\x34\x6c\x5b\xd7\xac\xae\xda\x24\x50\x20\xe7\x3c\x82\x0e\x7a\x93\x4e\x57\x35\x9c\x74\x42\xf3\x5f\x37\x64\xaa\x3e\x89\xcf\xec\x69\x5a\x3b\x6b\x53\x9e\x5a\x08\x55\x6f\xc8\x10\xca\xc0\x9a\x5a\xdb\x60\xd5\xec\x5e\x14\xc0\xec\x77\x4d\x6a\x2b\xc3\xf7\x6f\x35\x6f\x25\x3c\xd3\x5f\xdd\x4b\x8c\xf7\xa2\x3e\xbd\x99\x01\x7a\x3c\xae\x4a\x56\xb2\xfb\xf3\x6e\x1b\x3a\x34\xd5\xf7\x8b\x50\xab\x5d\xe3\x58\x21\xcb\x88\xa9\xf2\x7a\xf5\xee\x1c\x9d\xaf\x30\xbb\xda\x22\x0c\xbb\xef\x51\x00\x72\x04\x74\xf8\x7a\xd1\xe4\x26\x45\xd5\x17\x22\x85\x06\xaf\x74\x38\xd5\x4e\xc0\xbb\xab\xa4\xd3\xbc\xbf\xb4\x52\x78\x77\x55\xa9\xfd\xdd\x79\xc6\x1d\x04\xd5\x3b\x1d\x29\x71\x08\x84\x34\xe5\x0a\xb9\x55\x30\xdf\x4f\xac\xde\x69\x9f\xee\xa5\xf0\xb8\x8f\x0a\x9c\xdf\x7b\x50\x07\xfd\x89\xc5\x8a\xed\x99\xea\x3f\xf2\x0a\x63\x3a\x8e\x97\x54\xec\x7b\x88\xa9\x83\x8a\x1f\xd5\xdd\xfb\x53\xb7\x70\x14\x6a\xee\x78\xde\x9e\x22\x80\xbb\xe8\x86\xcc\xa9\x60\xf5\x40\xa5\x06\xef\x23\xe6\x5b\xd5\x6e\xb4\xac\x7a\xf0\xae\xe2\x90\x9d\x51\x1d\x82\x81\x71\x9e\xe4\x83\x29\x33\xd7\x7d\x39\xf5\x68\x49\xf5\x7a\x79\xb0\x02\x0e\x8d\x7a\x56\x40\xe8\x6d\xb1\x46\xbd\xf3\x3b\x42\xda\xb9\xd3\x21\xe0\x7a\x33\xf3\xf6\x74\xbb\x86\x6f\x58\x06\xc1\xa2\x7e\xe2\x6f\xc6\xf6\x3c\xed\xea\xfd\xca\xf7\x4c\xb4\xe0\x50\x47\x2e\xcb\xcb\xeb\x72\x24\x8c\x83\x50\x44\xea\xba\x19\xe8\xc5\x59\x54\xf5\x91\x85\x14\x57\xd4\x71\x50\x7e\x22\xc8\x60\xa2\xa9\xeb\x94\x75\xde\x90\xa9\xd3\x06\x8c\x60\xad\x13\x51\x35\x08\x15\xb1\xef\x20\xa6\x43\x4d\x01\x2a\x65\x5e\x8a\xaa\xa7\x55\x9f\xf5\x85\xfe\xea\xf3\x86\xab\x70\x01\x38\xa2\x2a\x2a\x1d\x6a\x51\xe4\xcd\x35\x3d\x5d\x58\x7d\x7e\xb8\xee\xd7\xa1\x77\xb1\x10\xa6\xca\xb8\x65\xcb\xa4\x7c\xea\x64\xad\xfa\x7c\x8d\x18\xf0\x01\x11\x42\xaf\x84\xff\xd8\x45\x05\x02\x99\x8f\xf9\xae\x58\x80\xaa\x3e\xd7\x04\xc7\xf8\xbb\x38\x2a\xa9\x56\xf6\xf9\xbe\xf8\xb4\x68\x39\x15\x9f\x56\x69\xc0\xce\x98\xb1\x67\xac\x3c\x9f\xa1\x1d\x8c\xfd\xb3\xf7\xdc\x15\xa6\xb0\x57\x20\x64\xb1\x18\xb6\x0f\x02\x34\x34\x3f\x18\x76\xe6\xc2\xeb\xa2\x32\x71\x58\xfb\x7e\x2c\x2c\x32\x65\x3f\xc0\x03\x0b\x51\x86\xeb\x47\x70\xc3\xa2\x3b\x19\x51\xcc\xb5\x07\x9e\xfb\x40\x61\x5c\x32\xc6\x3a\x65\xc3\x5a\x55\x94\x33\x6f\x2b\x4f\xfb\x13\xa7\x6b\x38\xaa\x23\x7f\x6a\x49\x79\xa4\xcf\xea\x1f\xa1\xb9\xb1\x67\xc8\xaa\x2f\xbc\xc1\x49\x00\xdf\xeb\x05\x32\x01\x54\x70\xb8\xa7\x2e\xbb\xf4\x49\x92\x2f\x1f\x96\xbf\x7f\x1c\x75\x99\xce\xab\xc0\x61\x3b\x66\x0a\x7a\x00\x71\xf1\x45\x7b\xcd\x62\xd5\xb4\xe8\x7d\x4b\x82\xb4\x86\x15\x0a\x63\x42\xeb\xf0\x3a\xda\xd3\xd3\x82\xb5\xc3\x29\x51\x2f\xd7\xea\x50\xe3\x8b\x1d\x4e\xbd\xf0\xa2\xfa\x62\xdf\xd5\x49\x87\xb4\x32\xaa\xf5\x18\xf5\xa2\x1e\xa3\x6c\x14\x6b\xb6\x2b\x47\x57\x1a\xcd\x6f\xbf\x25\xd6\xf5\x17\x0c\xed\x7d\x85\x6a\x00\x02\x6d\x18\x7a\x2d\x4c\xd4\x2b\xb3\x52\xbc\xb0\x04\x58\x25\x97\xd0\x91\x1e\x1e\xaa\xc8\x35\x2c\x58\x68\x17\x8a\x0f\xc2\xa2\x39\x15\xd0\x6d\x85\xf5\x70\x7c\xf8\x43\x20\xa4\x92\xb0\x8e\x24\x00\xbf\xeb\x41\xaf\xd0\x55\x87\xf5\x39\xca\x4b\x37\x3b\x84\x62\xf9\x57\x80\x0d\x41\x61\x7d\xfe\x07\x79\x80\x37\xc9\x39\xfb\xfa\xb4\x2f\x28\x75\x87\xf5\x89\xdb\xd1\x04\xf0\xc9\x56\x41\x55\x25\xcc\xb0\x3e\x19\xed\xf5\xd9\x32\xe9\xab\x3b\xd2\x11\x2c\xac\xcf\xf7\x42\x79\x01\xef\x22\x0d\x4d\x97\xf1\x4e\x52\x0d\x0f\x0d\x97\x75\x56\x48\x2f\x50\xbd\x79\xac\xff\xaf\x02\x1b\x61\xaf\x8d\xca\x0e\x57\x6c\x13\xe1\x5c\x68\x72\xa8\x17\x70\x57\xf5\xf7\x5c\x34\xaf\xcf\x25\x4d\xb6\xb4\xf2\x38\xfb\xa1\x80\xf5\xdb\x36\x5e\x05\x2c\xa1\x40\x90\xb1\x31\x24\x9c\x76\x9f\x57\xed\x97\x2e\x56\x5c\x85\x55\xc3\xf9\x76\x3b\x52\x85\x6e\x0f\x77\x27\x8d\x22\x12\x0e\xad\x93\x77\x2a\xd1\xb3\x71\xd3\x52\x1d\x57\x2d\x01\x06\xa5\x10\x0e\x03\xba\x86\x10\x77\x5e\x0f\x5b\x75\xa5\xb5\x8e\xb5\x53\xc2\x7d\x30\x89\x04\x2b\xc2\x55\xaf\xf6\x21\x4d\xfc\xeb\xc9\xfb\x42\x05\xb1\xce\x86\xf8\xb4\x55\x88\x10\x7b\xf1\xc6\x27\x17\x57\x6b\x88\x75\x94\x67\xd4\xf8\xa3\x51\x85\x8c\xb6\x8a\x77\xdd\x48\xe1\x26\x23\x9c\xac\x73\xa2\x90\xa7\xa4\xe6\x91\xd4\xdc\x58\x0e\xc5\x2d\x5a\x11\x59\x99\xe6\x19\x4f\x28\x79\xdc\xbf\x35\x71\x6c\xc5\xa1\x64\x3a\x2a\xac\x9a\x95\x2d\x4a\xcf\x4a\x02\x68\xb1\xd6\xf5\xb0\xba\x4a\x88\xcf\x71\x34\xa9\xf2\x48\x7c\x3d\xc5\x61\x72\x30\x2a\x4d\x7e\x9c\xa4\x7a\xa5\x75\x75\x5b\x02\x78\xd2\xe4\x7a\x8d\x00\x6a\xc3\x0b\x5c\x8a\x2a\xdc\x90\xe1\x81\xc2\x81\x59\xb5\xf4\x46\x5e\xa1\x3a\xf3\x4b\xeb\xb3\xaf\xfa\x00\xa3\x78\xd2\x68\xc9\x84\xd5\xd0\xae\xc0\x96\x12\xc9\xe8\xdf\xff\xe9\x41\x35\xc1\x14\xda\x92\x34\xf0\xd3\xec\x58\xe4\x69\x7d\x96\xd0\x43\xd4\x79\x58\x5a\x9f\xd5\x0d\xff\x55\xfc\xe4\x06\x60\x4d\xbb\x7f\x83\xc0\x44\x47\x95\xa4\xc7\xd2\x8d\x51\x65\xac\xdf\x4a\x7a\xd5\x4d\xc5\x41\x66\x48\x43\x44\x9e\xa8\x90\x20\xf2\xe7\x89\xf5\x0e\x3e\x6d\x0a\x32\xda\x3c\x0e\x85\x88\x89\xa2\x05\xa5\x12\x32\x31\xfd\xb9\xd8\xb5\xa5\x0b\x07\x24\x40\xd5\x45\xe5\x2e\x60\xfd\x38\x4d\x52\xa7\xe3\x24\xb5\x9f\x27\xa9\x83\x43\xad\xd7\xf3\x24\x17\xad\xd3\xe6\x3c\xfa\x41\x81\xde\xa8\xda\x50\xb6\x62\x03\x4a\xd1\x2f\x67\x30\xc5\x6f\xb0\x5a\x9f\xa2\xe7\xee\x13\x91\x81\xa3\x23\x1c\xdd\x04\x52\xfd\x64\xc3\x5a\x20\xd1\x5b\x75\x89\xdc\xca\x14\x30\xb5\x95\x14\xfd\xc5\xf7\xea\x3b\x2c\xea\x4a\x3d\xeb\xb3\xa9\x14\x71\xab\x65\xf7\x58\x25\x69\x41\x6c\x25\x8a\xba\x63\x36\x98\xbe\xb3\x58\x53\x62\x9d\x80\x6c\x9f\xac\x3c\xd1\xbb\xea\xc1\xd9\x9a\xf2\xaa\x6d\x05\x5d\x45\xb7\xdd\x1d\x92\x99\x35\xf0\x3c\xa7\x20\xdb\xba\x46\xca\xd4\x70\xa9\x29\xe7\xd1\x93\x82\xe9\xf2\x4d\xd2\xeb\x33\xaa\x5e\xdb\x5c\xed\xda\x66\x01\xac\x67\x99\xee\x5e\xbc\x53\x80\x88\x4e\xcb\xe4\xab\xb5\xcb\xe2\x7e\x40\x3c\x5e\x42\x25\xb4\xc9\x6f\x2a\xde\x6e\x93\xae\xbc\xc0\x08\x44\xdb\x4d\x61\xd3\x28\xfa\xf4\x4e\xd5\x4c\x2c\xcf\x9b\x7b\xb7\x3c\x06\x2b\xa6\x7e\x79\xcd\xa9\x66\x29\x95\xb7\xad\x1a\x01\x32\x67\xcb\xbb\x7a\x2b\x33\x62\x4d\x61\x1d\xf4\x89\x3a\x6f\x55\x86\x6b\xac\x38\x4d\x50\xa1\x26\x50\x53\xb3\xa9\x6b\xc2\xe4\x2d\x7d\x7b\x9d\x60\x5b\x1e\xbf\x34\x03\x5e\x3c\x45\x5b\xd3\x4b\xbe\x96\xbf\x24\x9b\x6e\xa8\x6a\x09\xb4\xe6\x50\xec\x22\xad\x5a\xdc\x43\x29\x5f\xfa\x87\x3f\xca\xc4\xe9\x9f\x47\x2a\x22\x3b\x69\x3c\x68\x87\x9b\x7f\x6a\x67\xc7\x7f\xd1\x6f\x33\xa3\xbe\xa8\xcb\x8f\xcf\xc6\x47\x4f\x06\x7c\xe9\xee\x73\x2d\x2e\xee\xbe\xff\xab\x83\x66\x81\xf2\xb8\x76\x47\x64\xec\xff\x31\x44\x81\x2b\x4c\x66\xa6\x79\x0c\x0f\x80\x99\xf7\x45\x0f\xf9\x57\xaa\x74\xd7\xc2\xde\x47\xc8\xee\x19\x87\xea\x77\x2e\x28\x11\xde\xd5\x60\xea\x96\xad\x23\x06\x09\x91\x43\xc8\x9d\xbd\xda\x84\x75\x8e\x5d\x9d\xb4\x90\xc1\xee\x46\xfb\x7c\xb6\x73\xea\x81\x6d\x67\x19\xae\x06\x9b\x89\x19\xc2\x65\xc7\xaa\x2e\xd8\xb4\x0f\xc1\xf4\x09\x47\x71\x55\x33\xb7\xea\x57\xdf\x2e\x58\xce\xbc\x68\xaa\xe6\x1e\xa0\xd6\xe7\xe2\x5e\x7d\x65\xb3\x38\xbd\x6f\x45\x10\xdd\x71\x8d\xaa\x50\x7e\x14\x32\x8a\x5f\x37\xd2\x00\xc2\xb0\xbc\x94\xd8\x7f\xd7\xfc\x9f\x16\x8e\x77\x17\xe7\x2e\x40\x14\xc1\x05\xb2\x86\x17\xae\xdf\x14\xaf\x4e\x7c\xc5\xd1\x0c\x20\xeb\x83\x04\xdb\xa5\x45\x9d\x31\xdf\xcf\x50\x7f\x21\x93\x17\x1f\x77\x96\x19\x80\xd5\x7a\xdf\xef\x3e\x24\xee\x93\x94\x82\xf5\x82\x22\x73\xed\xbe\xe0\x0c\x6e\x4b\x25\x72\xd1\x06\xec\x33\xcc\xdc\xf5\x5e\xfd\x3d\x31\x90\xd7\xc1\xd4\x43\x1f\x7b\x53\x3d\x70\x90\xa9\x77\x29\x1f\xb7\xc8\x91\xd5\x28\x52\xfc\x2d\xbe\xdd\x90\xe2\x08\x9e\x6d\x3d\x30\x1c\x17\x26\x2f\xf4\xaa\xc6\xd9\x47\xd1\xdb\xa9\x05\x8c\x7f\x54\x40\x2b\x14\x8f\x4d\xb2\x28\x01\x2a\x4b\x42\xa7\x1a\x1c\xe6\x27\x80\x6b\x09\x0f\x7e\x82\xbb\x8a\x6b\x09\x4f\xdf\xeb\x8d\xe0\x51\x07\x8c\xd3\x22\x08\x4f\xaf\xfd\x57\x09\xe6\x42\xff\xe9\xba\x0a\xc0\x6b\x6a\x85\x39\xd9\x55\x12\x3a\x1c\x55\x0d\x8a\x09\xe7\xd6\x3d\x0a\xd3\x1f\xc3\x5f\xbd\x25\xbe\x16\x76\xa0\x25\x68\x0f\x10\xfa\xc8\x05\xa8\xee\x73\xff\xb7\x7a\x2d\x4c\x85\xdd\x5a\x9b\x5c\xb0\x94\xc8\x08\x54\xd2\xe2\x49\xf0\x6a\x8b\x02\xcb\x3e\xbd\xa0\x81\x80\xd5\x27\x2d\xd4\x5b\xb7\x65\x0d\xb1\xb0\x79\xaf\xe1\xb7\x62\x5e\xdd\x57\x4b\xda\x5d\xe4\xf6\x4b\x97\x0a\x0a\x85\xad\x02\xf9\x09\xf3\xed\x42\x49\x89\x73\xa8\x92\xa2\xbe\x4d\x45\x98\x7e\x14\x59\x87\x9a\xe2\x4e\x81\x53\x90\x65\x5f\x8a\xbb\xed\xe4\x08\xd6\x11\x53\xe0\xfb\xf4\x1d\xe9\xaa\x10\x5e\x20\x77\x1d\xc4\x81\x7a\x14\xaa\xf6\xef\x10\x96\x4a\x92\xfe\xb8\x1e\xac\xff\xca\x68\x9e\xe4\xc3\x2b\x4d\x9a\x96\x7c\x58\x6f\x47\xc1\x80\xf7\xdf\xd7\x92\xb4\x07\x6a\x6b\xed\xaf\x14\x4f\x5c\xed\x9c\x1f\x68\x6e\x61\x6d\x63\xfb\xb1\x2b\x6f\x6a\x69\xcc\x48\xbd\x89\x49\xc0\x54\xe1\xdb\x95\xd9\xeb\x34\xe6\x8a\x49\x7b\xe5\xbd\x1e\x51\x3b\x2a\x42\xc6\xa4\x2d\x30\x70\xdf\x54\xd5\x9b\x34\xea\xb8\x49\x43\x20\x72\xb2\x2d\x4b\x2a\xd1\x2c\xa1\xd0\x01\xa2\x22\x9d\x41\x7e\x0e\xbf\x36\x15\x33\xda\x86\x07\x0a\x40\x51\x75\x09\x74\xd3\xa0\xf1\x4a\x43\x52\x5d\xfd\x68\x9b\xca\xa2\x6d\x3b\x12\x5b\x57\xdb\xfa\x5b\x88\xc0\x0c\x26\x24\x25\x3d\xfd\x6d\xb3\x08\x75\x15\x6a\x42\x04\xac\x0d\x01\x77\x0e\x72\xb0\x69\xcc\xc3\x76\x65\x9a\x94\x55\xf4\x1a\xa4\xda\xfa\xb5\x8e\x02\x9f\xd1\x26\x57\xfa\xca\x40\x6d\xd1\x52\x91\x1d\x4c\x4f\xf3\xe1\xd6\xa0\xc9\x02\xa3\xad\xab\x65\x68\x57\xf6\xb8\x66\xd5\x76\x01\xea\x96\xe8\xd4\x78\xb2\x92\x36\x65\xf7\xfc\x1c\x62\xb2\xb8\x67\xe5\x7e\x9f\x5e\xb3\xf8\x7d\xce\x55\xe6\xcd\xa1\xe9\x3d\xa9\x30\xbc\x6d\x6d\xee\xad\x55\x4e\xcf\x2b\x08\xfd\x9d\x1c\xfd\xaa\x23\x5b\x8c\x7d\x9f\xbd\xd9\x1b\x64\xf8\xa9\x7f\x2f\x13\x1a\xb6\x1a\xc1\x0c\x3f\xdd\x35\x70\x39\xf2\xcd\x36\xf1\x86\x64\xf7\xd6\xb5\xcf\x37\x65\xe1\x77\xc1\x9a\x4a\xfb\xba\x5b\x1f\x42\x9a\xa3\x34\x20\xd4\x54\xec\x9a\xe3\x53\xc8\x52\x55\xdb\xe2\x96\x45\xe6\x98\x02\xec\x9b\xc5\x2d\xf3\x23\xe3\x6d\x71\xeb\x9a\x50\xff\x05\x7a\xee\x28\x0a\xd4\xfc\x26\x1c\x8e\xcb\x64\x5f\xe6\x3f\xda\x78\x94\xbf\x2d\x0e\x57\xfe\x0a\xbd\xf4\x26\xe4\xf1\x4f\xb7\x49\xea\xe4\x3b\xad\x16\xaa\x9f\x1c\x3e\x1e\xa7\x3e\x52\xdb\x16\x54\x35\x10\xe8\x24\x10\x31\xce\xfb\x5e\xfc\x3e\xbe\x3a\x60\x9e\xbb\x5f\x0a\x5f\xfc\x11\x8e\xcf\x1e\x77\x37\xe7\x19\x9c\x79\x7c\x5e\x9c\x95\x09\xe4\xcd\x8d\x86\x26\xf7\x5c\x54\x65\xc0\xd3\x85\xd1\x9d\xeb\xb9\x30\x89\xaf\xc2\xd5\xf0\xaf\x8d\x8c\x06\x6b\x1f\xe6\xf9\x65\x71\xf0\xde\x95\x1e\xab\x9c\x8b\x54\xab\x30\xfd\x4d\x0b\xf5\xb9\x2c\xd3\x4b\xfc\xc2\xaf\x47\xa8\x7e\x65\x72\xa1\x21\x2f\xf4\xd2\x1c\x2e\xaa\xce\x28\xb0\xf2\x6e\x7b\x85\x58\x05\xeb\x81\x94\x59\xc0\x6d\x8b\xbb\x6f\x7f\x2d\xa7\xe5\x3d\xb9\xb7\xe2\xd4\x4f\xe7\xb5\xc5\xd5\xea\xfb\x5d\xd3\x60\x53\xc1\xe9\x81\x81\xd9\x5b\xb5\xc5\xb5\x2d\x4c\x75\x51\xb8\x73\x44\xa0\x6d\xa1\x7b\x22\x98\xf1\x5f\x5c\xc0\xbd\x40\x8a\x64\xa8\x54\xf8\x82\x24\x24\xcc\xc9\x4d\x62\x81\x32\xed\x02\xd5\xbf\x6e\x6f\xf4\xd2\x3a\xb3\x38\x86\xb7\x78\xaa\xe5\x48\x17\xee\x68\x43\x45\x21\x01\x61\xc7\xba\x92\x40\xce\xaa\x81\xae\xb0\x0d\xc4\xbf\x5b\xf1\x4e\xda\xe5\xb2\xba\xa1\x37\x2e\x5c\xe6\xa3\x9e\x1d\xb2\xe6\x2a\x63\x19\xb2\xba\xb2\xa8\x4f\xab\x46\x75\xc5\x21\x50\xd2\xc0\x90\x57\xdd\x29\x54\x94\x14\x55\xa3\xfa\x9d\xcc\x67\x8a\x86\xd2\xcc\x33\xeb\x10\x56\xe8\xd6\x08\xcd\x96\xc9\x2b\xc3\x39\x5c\xe0\xe9\x1b\x60\xbb\xee\x10\x0c\x0f\xff\x02\x72\x07\x06\xf0\x36\x14\xfc\x83\xe0\x4c\xc5\x52\x11\xe2\x5a\xf5\x31\x75\xe1\xca\x0a\x75\x32\x81\x1a\x8f\xf0\x3d\xed\x6c\xb4\x65\x3d\x9d\x51\xcd\xb9\xb3\x47\xfe\x74\xdf\x50\xa1\x17\xe8\xcb\xb3\x83\x9e\x7b\x67\xb8\xb4\xef\x00\xfc\x51\x84\x47\x19\xda\xb2\x8a\x40\xb5\x6a\x35\xea\x4c\xff\x38\x5d\x97\x9e\x53\x9f\x98\xf9\x5f\x1f\xb7\x11\xcd\x74\x5d\xe1\xbe\x9d\xe6\x6f\xe7\x66\xf7\x41\x5f\xca\x9d\xb9\xe1\xbd\xf1\xd3\x17\x79\x3c\xad\x4f\xfe\xf4\xa3\x3d\x2a\xdf\xff\x8d\xab\xfb\x9e\xfe\x8c\x53\xd1\xa6\xb8\xfa\x29\x6c\xe3\x78\x0f\xcd\x6c\x63\xb1\x89\x0f\x5f\xac\xf7\x10\x2e\x95\x6b\x1a\x23\xba\xcd\x39\x87\x17\xa7\x98\xc6\x7b\x0d\xd3\xf7\xf7\x74\xca\x96\x16\xbe\x7c\xbb\x9e\xf1\xb8\xe5\xb5\x7c\x7c\x8e\xbd\xe7\xd9\xa2\x9d\x03\x8d\x1c\x8a\xd5\x6b\x2d\x4f\xb8\x18\x3a\x76\xa6\xb8\xf5\x03\xf7\xb0\x6a\x71\x69\xa5\x5a\x86\xf0\x25\xa7\x39\xe4\x52\x3d\x2b\x49\xc2\xcb\x2f\x02\x1a\xf7\xab\x05\x7e\x6b\xfe\x14\x3f\x9d\x17\x05\xef\x9f\x0a\x72\x18\x23\xc9\x5a\x2c\x76\x25\xdd\xbd\x85\xda\x2a\xb9\xc0\x62\xb5\xb3\xf5\x01\x4f\x61\x4f\x63\x2b\xc5\x92\xd5\x3e\x8e\x2d\xb4\x65\x7d\xf3\xe5\x19\x43\xf0\x6a\x73\x55\x2b\xe1\xe6\xdd\xca\x88\x10\x69\x58\x9b\x6a\x82\x08\x5a\xc4\x4b\xb3\x7e\x84\xd8\xfb\xd7\xcd\x9f\x7a\xeb\x69\xc7\xe3\x9f\x60\xcd\x77\xf3\x97\x94\x55\x99\xfe\x9c\x06\xd2\xcd\x67\x57\xaa\xf5\xaa\x9b\xcf\x32\xd1\x9e\x60\xb2\x68\xe6\x64\xd6\xad\xaa\x55\x09\xdf\xfa\x16\x93\x70\xdf\x2c\x80\x2d\xcc\xc9\x08\xee\xd4\x21\x6d\x0b\x2e\x73\x41\x55\xf0\x7a\xe8\xf2\x97\x30\xea\xb4\xf4\x66\x6e\xd8\xf2\x77\x0b\xba\xc1\xa7\x30\xae\x3d\xfa\xc6\x8e\x82\x16\x2b\x99\x44\x13\x7f\x87\x38\xfd\x63\x8b\x2f\x6d\xd9\x52\x0f\x2c\x9d\x12\x9d\xd5\xe7\x43\xa7\x2b\x7f\xec\x18\xcb\x74\xe1\x3d\x0e\xe0\xd2\x58\xa2\x5b\x9b\x9b\xd7\xd6\x38\x40\x6f\x6d\x44\xaf\xf9\x6d\xfc\xcd\x02\xf5\xeb\x81\xbe\xdf\xf7\xc1\x91\x28\xf0\x6b\xff\x78\xf8\x8f\xf4\x78\xc9\x41\xf5\xcf\x9f\x7d\x00\xc4\x09\xa6\x7b\x62\x65\x92\xad\x21\xe4\xc4\xcc\xf2\xff\xec\x50\x5b\x93\x01\x61\xed\xa2\x0a\x9f\x99\x07\x1d\x9d\xb8\xbf\xd7\xc3\x5b\x0d\xf7\xf7\xed\x65\xae\x78\xf6\x4f\x7e\xb0\x32\xc4\x3f\x7f\xfc\xda\xcc\xe1\x4f\xf5\xf1\x9e\x04\x02\xb3\xb0\x0f\xa9\x75\x0e\x8a\xa3\xff\x40\xfa\x31\xd1\x9b\xf0\x0a\xcc\xea\x87\x2f\xe5\xad\x63\xd9\xc3\xdf\x73\x5e\xe8\xfd\x8b\x02\x76\x6d\x9f\x8f\x70\xdf\x06\xcf\xa4\xde\x0a\xd0\xa6\xfc\x38\x71\x39\x90\x80\xc6\x31\xf9\x31\x8e\x3e\x09\x53\xbc\x85\x45\x68\x95\xee\x81\x95\x35\xd2\xd9\xf9\xf5\xd1\xad\x3c\xa4\xd3\x40\xc1\x3d\x8a\xeb\xe5\xf4\x28\x50\x55\x11\xe0\xef\xc3\xfc\x6f\x57\x18\x4d\xf4\xd1\x46\x2d\xde\x71\x60\x3a\x4e\x65\xa1\x36\x53\x3f\xb2\xfb\xf8\x21\xd9\xed\xb8\xf7\x04\x94\xa3\xeb\x7e\xa6\x45\x57\xc9\xc8\x4c\x32\xee\x9e\x36\x92\xfe\xe6\x8f\x31\xcc\x30\xc3\x96\xf6\xbd\xa8\xe0\xb4\x17\x17\x67\x7f\xb4\xde\xec\x05\x6b\xe2\x6d\xd9\xd9\xc7\xec\x6f\x96\xc0\xfe\x2e\x8c\xcc\xe1\x28\xa8\x1c\xbc\x6b\x15\x1f\x53\xcb\x86\x54\x0b\x47\xe0\xbf\x06\x1d\xcb\xdb\xf8\x97\x0b\x2a\xa5\x1c\xaa\xfd\x26\xa8\xe8\xa7\x05\x6d\xe7\x08\xe5\x6e\x96\x90\x23\x95\xf0\x9b\x62\x1d\x75\x55\xf7\x19\xda\x72\xbc\x2f\x1f\xb5\x1f\x3c\xde\x39\xd5\x83\x67\xab\x84\x83\x7a\x06\x6a\x46\xd8\x7c\xa7\x88\x75\x38\xf5\x9b\x10\xd7\xde\x63\x04\x5e\x9e\x22\xe0\x31\x5a\xa4\x30\x6d\x48\x18\xc6\x6a\xa5\x0e\xf1\x71\xba\xeb\x9a\xff\x96\x09\x51\x25\xbe\x7d\x19\x7f\xe0\xde\x03\x96\x46\x67\xac\x38\x42\xac\xd2\x18\xcd\x29\x9e\xf0\xbf\x6f\x73\x5c\x65\x9c\x3e\x15\x97\x34\x75\x3f\x21\x6d\x3a\xe0\x04\xe8\x83\xb5\xe5\x3f\x18\x6e\xb5\x39\x18\x15\xd6\xda\xf2\x9f\xf6\xd2\x42\xa7\x25\x71\xb5\x98\xe0\xa8\xf9\x64\xb5\xc3\x54\x86\xb5\xe4\xbf\x14\x4c\x24\xfb\x8f\xab\x55\x6d\xf9\x8f\x77\x7f\x2b\xb0\x84\xfd\xd7\x46\x83\x00\x66\x9a\xfe\x9b\xda\xc6\x53\xab\x8a\x50\x28\xfb\xb6\xe5\x74\xf9\xe6\xdc\x94\xc8\xee\xfc\x6b\xcb\xa9\x47\xb5\x80\x58\x05\xa4\xf7\x6c\xc5\x2c\xf7\x70\x8f\x26\x64\xac\x76\x1f\xa7\xf4\x79\x1d\x31\x26\x67\x58\x8a\xbe\xfa\x3f\x31\x16\xfd\x33\xac\x3e\x6a\x30\x1c\x11\xce\xe0\x65\x5e\xee\x34\x7b\x3b\x5b\xc9\x7d\x88\x63\x90\x7b\x2d\x2a\x32\xbd\x1d\xf6\x1a\xdd\x70\x69\x8e\x9e\x1c\x7c\xcf\x86\x75\xb6\xde\x27\x9c\xed\xa7\xfb\x70\x39\xc6\x40\x3b\x9b\xcb\x45\x1e\x33\xe8\xd0\x22\xad\x6f\xde\x00\x24\x75\xc0\xd7\x2d\x0d\x99\xe5\x7d\xb0\x5a\x99\xee\xaf\x20\xae\xaa\x0a\xfa\xe1\x69\x98\xb6\x5c\xde\x45\x2d\xa4\xcb\x6f\x41\x13\x0b\xd8\x23\x67\x6f\x6b\x0b\xbc\x16\xf5\xcc\x97\xdd\xe4\x4f\xc1\xd3\x18\x72\xf9\x72\xff\x65\xd5\xa7\xc0\xb9\xe1\x15\x62\x90\x92\x9b\xfa\xcc\x49\x74\x07\x1c\x55\xf5\x4a\xa7\xe7\x6d\x06\x82\x4b\xdd\x75\x3e\x7c\xb5\x35\xdd\x4c\x43\x3b\x6b\xc8\xea\xa2\x95\xa0\xf2\x0b\xde\xdf\x1b\xfd\x0a\xb4\x06\xda\x12\x43\x35\x99\x30\xa6\x21\x4a\xc5\xa4\x76\x6d\x3d\x3d\xbb\xc1\xd8\x2c\xb1\xb1\xd5\x22\x82\xdb\x28\xbc\xb4\x9c\xf3\xd2\x42\x5a\xee\xb5\x95\x99\x4d\xf3\x44\x22\x2d\xb5\xdd\x83\x7b\x3c\x02\x33\x8e\xa8\x74\xa8\x52\x44\xca\x6e\xf6\x3b\x43\x96\x9b\xf8\x1a\x2e\xf6\x70\xa9\x2c\x61\x9d\x7a\xf8\x54\xb4\x01\xe1\x12\x3c\x15\x52\x89\x2d\x9d\x83\xd3\x56\x97\xca\xfc\xa7\xd6\x1f\x19\x51\x6e\x15\x48\xd2\x8f\x76\x43\xd9\xad\x4f\xcd\xfb\xec\x76\x5c\x40\x2b\x28\x72\x82\x9a\x5d\xb1\x07\x74\xc0\x9c\xc1\x99\x78\x23\x42\xaa\xd1\x2e\xff\x76\x66\x76\xf5\x26\x60\x42\xb3\xbb\xb5\x4b\x21\xb2\x36\x90\xf5\xd1\x1d\x43\xde\x9c\x57\x5b\x3f\xca\xee\xbb\xcb\x56\xd2\x19\x4f\xe9\xcf\x7e\x6b\x51\x57\x60\xb2\x3f\xcf\x36\xd6\xd9\x8c\xed\x1e\xfa\x12\x38\xf4\xe6\x23\xdd\xf9\xd0\x5a\x93\x8f\x42\x9d\x77\x81\xef\x93\x25\xa1\x97\x4d\xd0\x36\xdc\x55\x03\x3b\xa5\xb3\xe6\x34\x27\x9f\xda\xb6\xb2\xf6\x07\xbc\x40\xba\x2d\x39\xf9\x48\x17\xd0\x1a\x10\x9a\x27\x51\x81\xc7\x7c\x85\xde\x9d\x8e\x36\x3d\xb8\x9e\x3b\xe9\xae\xf7\x5a\x42\xa6\xeb\xe2\x57\x9f\x2d\x1b\x8d\xb1\x94\x14\xbf\x85\xf5\x0f\x63\xc1\x16\xff\xd0\x61\x45\xa1\x76\xb4\xb9\xf8\x43\x44\x44\x6b\xde\xb9\xe0\xd5\x3a\xd6\xdc\x5c\x82\x05\x15\x52\xb1\x7c\x14\xdc\xa3\x57\xd2\x72\x72\x38\xcb\xa5\x8b\xf1\x0a\x27\x47\x8f\xde\x8b\x77\xa6\x47\x54\xf9\xf0\xd7\x62\xfe\x3c\xd4\xb9\xb7\xce\x25\x55\x3f\x05\x56\xfd\x9f\xe0\xbe\x83\xf6\x65\xb9\x8d\x07\x17\x85\x2b\x27\x85\xa6\x49\x18\x57\x99\x87\x50\x44\x5c\xe6\x58\x51\x51\x99\xda\xc2\x1f\xf8\x6d\x78\xb5\x08\x15\x47\xb9\x13\x1b\xf2\x00\x7d\xf0\x2b\xde\x66\x5a\xc5\x2f\x5e\x4f\x47\x09\x63\xf1\x27\xa2\x9f\x7e\x5a\x46\x28\xde\xd6\x64\x8b\x9e\x93\x00\x9a\xfa\x87\xe2\x47\xbd\x2a\xfe\x0c\xc3\x95\xd5\xb2\x32\xd6\xa6\x4a\xd8\x7b\xd3\x00\xee\x71\xd7\xc1\xa0\xa4\x31\xfe\xf3\xd8\xa7\xd0\xda\x62\xff\x0a\x4c\xff\x2c\xb5\xaa\x23\x55\xd1\xee\x5c\x28\x92\x74\x3b\x5a\xdc\xee\x0c\xb6\xd0\x7b\xbb\x2b\x9b\x6d\x0d\x65\x9c\xdb\x87\x45\x1b\x53\x62\x99\xf9\x6c\xea\xa3\xe0\xcb\x90\xb6\xa7\x69\xa5\x44\x1a\x86\xf6\xe9\x0a\xad\x0e\xb0\xc9\x74\x1f\x85\xd1\x0a\x7f\xfb\xb5\x78\x9b\xf1\x77\xa6\x7f\xa7\x8d\xe4\x1e\xa2\xd6\x8d\xe7\x18\x35\x11\x7e\xb7\x8e\xe8\x96\xb2\x64\x6f\x71\xcf\xab\x4e\xc2\xb4\x69\x68\xb9\x7d\x56\xf7\xff\xfa\xf2\xfb\xed\x8b\x4e\xbf\x6e\x5f\xbe\xc3\x64\x0d\x46\x83\xd2\xcf\x5e\x9a\xc0\x03\x27\x92\x04\xf8\xa2\x8b\xb6\xfa\xa6\xbf\x80\xc2\x1d\x8a\xe9\xf5\xe6\xc1\xd0\xbf\xb0\xf5\x70\x82\xd6\xcd\x3b\x6c\xa1\x3f\x2c\x42\x76\x0c\xe1\xe0\xba\x3b\xf5\xe3\xec\x1d\x0c\xd4\xed\xbb\x87\xbf\xae\x74\xd0\xf3\x92\x4f\x8c\xb4\xe5\xb6\xc9\x30\xef\x0d\x17\xaa\x22\xda\xad\xf5\xd4\x6e\x49\x15\xd4\xaf\xac\x6c\x8b\xde\x16\x29\x60\x5c\x76\x37\xb8\x29\xae\xe3\x9e\x3b\x65\x34\x7b\x55\xdb\x43\xd0\x9f\x4b\x2c\xda\x32\x8e\x81\xb7\x45\x8f\x8b\x02\x58\xa2\xfe\x1e\x04\xa4\x55\x0d\x7d\x65\xa2\xb3\x1a\xae\xb2\xdd\x7f\xf2\x7f\x3e\xd6\x56\x4f\xee\xdb\xcf\x78\xfa\x70\x7c\x14\xaa\x4d\x52\x80\xc7\x1f\x89\xb3\x05\x28\x69\x75\xc0\x5d\x68\x32\x1a\x29\xeb\x68\x3f\xf5\x5f\x94\xd7\x0a\x3c\xb6\x81\xdb\x72\xb7\x73\xa5\xc4\x74\xb7\xf3\x61\x1f\xb7\xf3\xa1\x45\x06\x64\x96\xf9\xe8\xb6\x02\xd5\xfa\x1a\x4d\xaf\x65\x5f\x28\x0a\xf5\xd4\xb5\xe2\x35\xc3\xde\x71\x0c\x58\xc6\xd8\x87\xef\xc8\xc1\xba\x42\xdf\xa9\x12\xfe\xb0\x92\xf0\xb1\x46\xa1\x5d\xba\x1f\x92\x7d\xf5\xb9\x77\x74\xc0\x16\x70\xf5\xe5\xd1\x58\xca\xb8\xd7\x35\x76\xd8\x97\xd6\xaa\xff\xa1\x1f\x78\x7e\x1e\x28\x8c\x61\xa7\x4e\x27\xb3\x95\xd3\xf8\x84\xca\x9a\x5e\x27\xc7\xa7\xa6\xb2\xa6\x18\x56\x82\x4c\x61\x5f\x80\xda\x54\x0e\xb4\x35\xe9\x9c\xb0\x26\x6d\xee\x58\x83\x9d\xa0\x05\x5a\xdc\xe1\x29\x75\xd7\xe2\xe2\x7d\xb6\xbe\x69\x35\xf1\xef\xce\x7f\xee\x8a\xd5\xa2\xd3\x7e\x01\xb7\xcd\xc4\x3a\x63\x0d\x57\x2d\xd4\x17\x9e\x42\x12\x14\x3e\x37\xeb\xaa\xf4\xb8\x0a\xf2\x39\x95\x5d\x2d\x2d\x7e\x72\xa8\xa9\xb5\x59\x46\xb4\xa8\x52\x66\xb5\x95\x2b\x80\x1e\x3e\x4e\x87\xb4\xa5\x45\x2c\x9a\x59\xec\x5b\xe4\x6a\x68\x8b\x01\xf2\x2c\x70\x59\x94\xc8\xbc\xb3\x87\x49\xbe\xfa\x81\x7f\xe7\xff\x58\x0c\x0d\x05\x02\xbb\x6f\xa7\x2f\x5d\x08\xbc\x75\x73\x8f\x48\xfb\x85\x6f\x4f\xc1\xe1\x7b\x4c\xfe\xbf\xc7\x4c\x08\x70\x34\x60\xb2\xda\x4b\x7c\xfb\x52\xfd\x62\xad\x10\x5c\x31\x34\x8f\x82\xdf\xfe\xee\x6b\xbf\xdf\x61\x65\x87\x0a\x60\xf9\xf2\x2d\xb3\x3c\x8d\x46\xa8\x6e\xae\x8c\xe4\x7f\x67\xbe\xcc\x7d\xdd\x8b\xde\xe1\xc4\x47\x1c\xc8\x7c\x86\xee\x58\x5b\x5e\x81\x25\x65\xda\x14\x44\x3a\x8b\xfd\x85\x1a\x70\x5b\x57\xec\x09\xaf\xab\xdf\x5c\x84\x9e\xb0\x60\x2a\x87\x0b\xe2\xe1\x31\x41\x08\x19\xb4\xdf\x64\x43\x96\x71\x24\xec\x99\x06\x76\x68\x12\x90\x57\xaf\x82\xae\x61\xaf\xd8\x0c\xeb\x0e\xe6\x9d\x31\xe1\xde\x27\x7b\xac\x23\xb8\x5f\xe8\x63\xb7\x75\x55\x1f\xa8\xd9\x0a\xf0\x26\xad\xdc\x15\x14\xa4\xb4\x15\xa3\xea\x16\x6f\x5e\x83\x36\x06\xd8\xf4\x5e\x7b\x83\xf4\xca\xe6\x95\xeb\xda\x7a\xda\x9e\xf6\x98\x44\x33\x5d\xf8\xa6\xc7\x53\x84\x52\xe2\x5a\x0b\x97\x45\x70\xbe\xb5\xad\xbc\x08\xa5\xad\x25\xd1\x56\x8b\x72\xd3\xd7\x2c\xb8\x92\xa5\x70\x83\x61\xef\x80\x34\x28\xa3\x89\xf9\x71\xb3\x56\xc3\x19\x78\xae\x74\x43\x98\x78\x3c\x7c\x99\xc4\x68\xb0\x4c\x8f\x40\xb8\x7b\x3c\xf4\x9a\x87\x86\x09\xac\xa6\xf1\xf1\xc0\x42\x83\x10\x46\xea\xd1\x6f\x4b\x68\x8f\x07\xb5\x8c\x15\x40\x4d\xb8\x63\x36\x01\x70\x1c\xbb\x1f\x1f\x0b\xaf\x8f\x47\xd3\x0c\xdb\x51\x3f\x77\xa7\xd7\x2d\x08\xb2\x85\xc3\x7d\x48\x28\xbb\x2b\x99\x33\xb4\x7d\xf7\x77\xd7\x71\x53\xae\x18\x1a\xab\x15\xca\xf6\x24\x93\x67\x88\xfb\xc7\x72\xf6\x8e\x50\xc3\xd7\xdd\x6c\x07\x94\x8b\x65\x81\x86\xee\x25\xb3\x4b\xd1\x87\x35\x9b\xee\x19\x3c\xc3\xdb\x3d\xe5\xcb\xe7\x13\x4d\xe3\xf9\x64\x95\x3a\x7b\x1f\xa8\x03\xea\xf9\x70\x7b\x73\x31\xf0\xe2\x72\x61\x2f\x5f\xf0\x4a\x25\xb9\x18\x4e\x7d\xee\x05\x5c\xc5\xdb\xe8\xc6\xe6\xf7\xec\x34\xbf\xcb\xe4\x4d\xb9\xfd\x70\x58\x70\xf1\x26\x36\x08\xbe\xc6\x08\xfe\xd9\x2e\x84\xd3\xa8\x3d\xc2\x9d\x7e\x86\x7d\x50\xd7\x29\x8e\xa8\xd8\x16\x12\x91\x7d\x97\xa2\xd9\xa1\x57\x17\x70\xf9\x7a\x38\xb5\x46\x6b\x12\x32\x75\x43\x60\xab\x82\xd1\x5b\x09\x37\x39\xd2\x2e\xf7\x3c\x7b\xfd\x3e\xf3\x21\x33\x2f\x4b\x3e\x8e\x8e\x8e\xac\x82\x72\xdc\x94\x57\xf9\xf8\xc8\x2c\xb2\x3d\xb7\xf2\x31\x67\x97\x2d\x03\x00\x4c\xf9\x23\xac\x46\x0e\xf0\x77\x62\xfb\xa7\xd2\xe3\x28\x9a\xf3\x30\x1f\xc1\xfc\x9c\x72\x11\xcc\x64\x3f\xfc\x4b\xb1\xdb\xb2\x79\x03\x4e\x79\x89\x53\x9e\x1a\x12\xb3\x55\xe8\xe4\x43\xdf\x0c\x05\x96\x0c\x37\xfc\x11\xf1\x8f\x5c\x16\x96\x9e\x56\xf4\xef\x42\x9c\x51\xc6\xb3\xf6\xd5\xd5\xb3\xf6\x36\x28\x11\xbc\xdc\x4a\x53\xaa\xf9\x25\x55\x1f\x47\x9a\xc5\xec\x4d\x0f\xdb\xff\xa4\xe3\x5b\xc1\x7d\xd0\x22\x87\x66\x4b\x58\x0d\xfd\x7e\x38\xf9\xed\x4e\xd4\xdf\xfe\xa7\xfe\xe1\x7b\x5f\x21\xf8\x1c\xa1\xf5\x17\x50\x88\xbd\x21\x9e\x66\x23\xc4\xe9\x33\x40\x1e\x0a\x6b\x17\x5e\x41\x04\xd1\x00\x75\x9b\x5f\x00\xfc\x4d\x30\x34\xbe\x19\x06\x7b\x9f\x2b\x4f\x37\x50\x36\x89\x63\x5c\xa0\xc0\x2f\x94\x47\x98\x89\xd8\x7f\xc4\x05\x1a\xdf\x42\xa1\x5a\xde\x22\x9f\x34\x69\x71\xd1\x27\x49\x04\xbd\x40\xa8\x45\xde\xe2\x82\xf7\x94\x40\x11\x7e\xdc\x1c\xfc\xdf\x7a\x5f\x1e\x37\x8f\x4f\x36\x2e\x3f\xc6\x2d\xed\x24\xaf\x68\x94\x11\xd9\x74\x45\x27\x6e\xbd\x80\xe2\x46\x0d\xd2\x16\x75\xd0\x8a\xa6\xdf\xde\xa2\xde\xb6\x25\x80\x71\xda\x8b\x87\xfc\x17\x71\xd2\xa7\xc5\x27\x63\x3c\x8d\xe1\x51\x75\x87\x5b\x44\xd0\xb1\x07\x83\x23\x7c\x2d\x16\xbc\x68\xd1\xa2\xce\x5a\x22\x4b\x28\xde\x07\x77\xbc\x22\xae\xbc\x02\xe0\x8e\x77\xfc\xb8\x71\xae\x45\x5e\x4b\x22\x34\xa9\xbb\x5a\x12\xf3\x5b\x7b\xee\xc8\xca\x2d\x04\x5f\xf0\xe8\x43\x8b\xd8\x31\x4b\xdf\xbe\xba\x56\x78\xcb\xbc\x4c\x54\x46\xed\xcd\x1f\x23\x25\x38\x6c\x3a\xff\x7f\x76\x5a\x1d\x61\x71\x43\x58\x9f\x9d\xdc\xad\x6c\x93\x9f\xc2\xce\x7f\x4b\x01\xb2\xdc\x84\x5d\x71\x70\x61\xf6\x71\xa5\xce\xc3\xf4\xc9\x7a\x04\xdf\xd7\x43\x61\x11\xa6\x00\xd6\x67\x4c\xaf\xd3\x6f\xfb\xec\xe0\x5f\x0b\x77\x98\x3d\x9d\x06\x3e\xe3\x27\x2f\xda\x47\x78\x9b\xcb\xf5\x4f\xba\xb7\x6d\xf6\x6d\x13\x29\xfd\xf3\x93\x3f\x5a\x8a\x6a\xf7\x37\x4b\x61\x35\x3b\x49\x25\x4e\xd1\xf6\x25\x6d\x6f\xe9\x40\x57\xfb\xe0\xf1\x08\x63\xbb\x98\x16\x5d\xa7\x91\xac\xc9\x13\x19\x67\x12\x29\xbd\x00\xef\xc5\x7d\xcf\x5f\xee\x43\xed\x24\xe3\x66\xea\x59\xa5\x11\x36\xcf\xb1\x78\x05\xfe\x4c\xaf\xa9\xa4\x4e\x56\x3d\x81\xd7\x32\xe7\x06\xb9\xde\x09\x88\x55\x0c\x97\x9b\xea\x55\x1c\xba\x7d\xca\x8e\xff\xb2\x9e\xde\x23\x93\xcb\xb8\xb4\x1f\x36\x65\xd1\xfd\x58\x30\x5b\xfb\x0c\xa7\x40\xf7\xbd\x47\xb1\x60\xf7\x30\xcc\x41\xe3\x12\xe0\xc9\xbf\x7b\x6c\x7b\x92\x85\x1a\xa2\xef\xec\x98\xc9\x83\x97\xa9\xec\x7d\x4c\x45\x54\xab\x5b\xff\xf0\xff\xd3\x48\x6a\xf5\x52\xc7\x87\x93\x31\x9d\x9d\xf8\x8f\xfa\xd8\x75\x15\x85\xf9\x96\x3c\x1a\xff\xf1\xf0\x7a\xc3\xeb\xa3\xbf\xce\x0a\x61\xf1\x27\x75\xe7\x0c\x7f\x7f\xc6\x62\xf1\xd1\xe3\x69\x3c\x63\xbe\xed\x8d\x2a\x58\x50\x5d\x51\x10\x36\x1e\xa7\x16\xba\x9c\xfa\x1c\x0e\x98\xc9\x3e\x9d\xb3\xab\x74\x2d\x8a\xf8\x5e\x8c\xc2\x39\x55\x4b\x69\x96\xb3\xab\x5b\x78\xea\x95\xcc\xe9\x47\x10\x1f\x4a\x8f\xe4\xa7\x53\xa3\x66\x93\xdf\x86\xf3\x47\x9f\x05\x7e\x4e\xf7\xea\xf4\xee\x61\x65\x66\x6f\xf0\x50\x12\x61\x75\xfd\x60\x01\x2d\xda\xec\xf0\xfb\xa3\xad\xac\x3e\xaa\x92\x07\x98\xe2\x45\xf2\xfa\xa8\x88\xeb\xa1\x2f\x8e\x90\x09\xdf\xee\x2c\x9f\x0e\xc2\x19\xfe\xc7\x02\x92\x05\xf0\x87\x3e\x63\xc6\xe3\x5f\xe1\xea\xb0\x7f\x93\x42\x5c\xfb\xa2\x26\x2c\xae\xe5\xa3\x3b\xfe\xa3\x72\xd8\x6d\x74\xf5\x77\xe2\x7b\x6d\x83\x45\x99\x96\xab\x68\x97\x7d\x0d\x1f\xbe\xe4\xd3\xff\x8c\x5c\x4f\x97\x6d\xa3\xcc\x4e\x4a\x9f\xea\xc2\x22\x0e\x65\x80\x89\xff\x9e\x7c\x81\xcd\x88\x49\x7c\x7c\xa6\x2e\x3e\xc2\xd0\x7e\x51\x9b\x4f\xad\xc2\x61\x49\xe1\x64\xe2\xa7\x50\xe6\x4e\x72\x4d\x71\x4c\x89\xc8\x4f\x0b\xd5\x66\x51\xbe\xdd\x67\x0b\x1d\x8a\x84\xca\x94\xb0\xb4\x0f\x5f\x78\x23\x01\x99\xb2\xfd\xc9\xcf\x59\x87\x50\x2c\x8a\xdf\xac\x6d\xae\x85\xb2\x19\x21\x2e\xb3\x1a\xf8\xc3\x97\xae\x16\x08\xa6\xfc\xa9\x50\x6f\x6e\x0a\x02\xc6\xcf\x2f\x37\x3d\xf4\x08\xec\x97\x6a\x68\xfd\x88\xd4\xe6\xa5\xf3\xec\x7f\xf6\x0c\xdc\xfc\x50\xc3\x00\xdb\xf5\xfe\xc8\x61\x41\x73\x0a\xcc\xab\x1c\x4c\xfc\xa1\xfd\x07\xab\x78\x4f\x5e\x9b\xc6\x1f\x98\x6f\x7f\xa6\x3c\x3a\x57\x68\xf5\xf5\x93\xf1\x6a\x93\x26\xaf\x82\x5b\xd2\xf9\x27\xa9\x21\x9f\xe9\x72\x36\x0c\x52\x97\x6f\xfa\xe2\xb6\xb3\x0a\xe4\x86\x66\x8b\xf2\x9f\xc5\xba\x85\x6f\xa9\x91\xdb\xe0\x46\x45\xea\x3a\x7c\xc0\x5d\x3f\x0f\xdc\xdc\x26\x37\xae\x6e\x08\x2a\xb8\x3c\xd5\x6a\xd1\x56\xbc\xdb\x62\x6a\x14\x18\xc5\xa2\x2d\x9f\x65\xba\xb5\x79\x95\x31\xfb\xe2\xd7\x14\xa9\xb8\x28\xcc\xd6\x3e\xfe\xfb\xa3\xba\x47\xab\x59\x5a\xf0\xd6\xfd\xf9\xd3\x2d\xe9\x53\xc8\x42\xa1\x0e\x97\xe4\xde\x9d\x9b\x25\x09\xec\xbb\xcd\x7d\x30\x2d\xce\x0f\xdf\xd2\xdc\xa4\xbc\x4c\xcd\x27\x2e\x1f\xbc\x8d\x0e\xdc\x87\x26\x21\x2c\x1e\xa9\xac\x1f\x16\x25\x9d\xe7\xc4\xab\x82\xa1\xc0\x69\x0b\xaf\xb3\x56\x28\x9e\x97\x7d\xce\xc3\xb7\xd7\x29\x09\xe1\x67\xcd\xf1\xdf\x73\xe7\xe3\x7f\x44\xe0\x99\xbc\x1e\x0a\x88\xe0\x56\x7f\x9e\xb3\x6b\xe5\xdf\x9d\x0f\x9f\x5f\xaf\xa1\xce\x49\xfa\x59\xa7\xd3\x17\xb0\x98\xc5\x12\xff\x93\xdd\xd4\xb5\xfa\x1f\xbe\x0e\xf4\x61\x11\xb7\x30\x7a\x03\xff\xa3\xfb\x9f\xc4\x1f\xfd\xb0\xf1\x1f\x15\xe3\x87\x02\xf2\x87\x55\xf5\x1f\x61\x56\x29\x36\x2b\xe2\xae\x1f\x09\x5c\x74\x6c\x7a\xf8\xb5\x7d\x8c\x36\xb4\x18\x5f\x79\x6f\xe0\x72\xe7\xc0\x21\x4e\x72\xe6\xc3\xcf\x49\x7b\x84\xa5\x7c\x0c\x69\x58\x94\xbb\x0d\xc7\x51\x47\xa1\x8b\x3c\x25\x60\xa8\x62\x82\xa9\x06\x7e\x14\x9c\xde\xe4\x8f\x87\x0c\x65\xdd\xff\x93\xea\xb4\x06\x47\xbc\xce\x36\x63\xf3\x26\x7d\xc8\xe3\x8f\x74\xf6\x6c\x91\x91\x69\xaa\x4f\xb3\xe6\xa6\xb2\x61\xfb\x1c\xba\x1e\xed\x7c\x84\xb9\x6a\x4f\x6a\x99\xe0\x46\x79\xec\x4e\x97\xeb\x81\x4f\xf7\x33\xf0\xe9\xe2\x34\xff\xda\x7d\xf4\x25\x8d\x2e\x76\x0f\xbd\x5f\xda\xcf\xf4\x67\xd0\xd8\xd3\xb6\x4d\x4c\x9a\xc4\xb0\xbd\xb8\xad\xf5\x6e\x7e\x2f\xc3\x97\xcf\x73\xeb\x6a\xf5\x29\x31\xed\xcd\xc9\x07\x56\xfc\x7b\x33\xfb\xb7\x15\xd0\xe1\x5d\xbf\xe2\x5d\xf9\x2e\xe7\x1f\xd2\x76\xdf\x1d\x27\x43\x1a\x81\x23\xec\x7c\x39\x09\x4c\xbb\xdc\xa8\x4b\xe0\x26\x4f\xdb\x25\x13\x17\x65\xde\x39\xad\xbc\x72\x5b\x58\xa8\x5b\x0e\xa7\xe1\x84\x7a\xdb\x94\x86\x70\x61\x6c\x9a\xf9\x92\x96\xcf\x02\x0c\x71\xf5\xb6\xa9\x49\xf6\xfc\xa8\xbc\x62\xd1\x3e\x9b\x5e\x88\x93\xf0\xf4\xd7\xb3\xa2\x7a\x83\xe4\xda\xb5\x8c\x1e\xa2\xf3\x6f\xe3\x37\x8f\x67\x93\x26\x17\x5b\x58\xeb\xa8\x4c\xc2\x3f\x86\x7a\x85\xda\x7c\x87\xcd\x5e\x21\xf9\x6b\x35\xbe\x9b\xe5\x36\x61\xcf\xfd\xc3\x13\xc9\xa9\xcf\x8a\xa4\x96\x3d\x6e\x7f\x82\xfd\xdb\x56\x03\x24\xbb\x5e\x6c\xaa\x98\x3a\xb9\x47\x5b\x9a\xfe\xdf\x7d\xfc\x1b\xe0\xee\xa7\x69\x24\xce\x25\xb8\xb9\x24\x3e\x64\x96\x10\xff\x6b\xfa\xf6\x31\xd9\x98\xd6\x39\x3c\x5d\x2e\xf8\x2c\xa7\x59\xa3\x82\x16\x43\x01\x00\x7c\x65\xf6\xbf\x3f\xf9\x3a\xb1\xf7\x87\x87\x75\x16\x7d\x42\xac\xe9\xfc\xbb\xe6\x12\xe2\x67\x7f\x1a\xe2\x77\x7f\x87\x19\xbc\xbe\xd3\x0a\x5c\x4a\xa8\x1f\x73\xa1\xff\x5a\x09\xf7\x16\xa6\x74\x23\xd5\x9f\x6d\xd5\x56\x4b\x34\x15\xda\x38\x20\x10\x7c\xe6\xf0\xe9\x3e\xc6\x9c\xf3\x8f\x40\x7c\x86\xa7\x3f\x03\xaf\x8a\x25\x1f\xfd\x40\xda\x92\xcf\xe4\xec\x6f\x3e\x40\xdf\xe3\x7a\xb6\x9f\xbf\x12\xec\xe5\xce\xde\xdf\x8c\xe1\x82\x7b\x71\x00\x7c\xdf\x46\xb1\xc8\x8a\x9f\x5f\xdf\x6b\x9b\xd7\x2f\x2e\x07\x15\x6b\x4d\xe0\xe5\x37\x3c\x32\x65\x5c\xac\x53\x64\xae\xf0\x33\xc6\xd2\x49\x5d\x13\x5c\x49\x73\x29\x5e\xa9\x4e\x39\x7e\x41\x8f\x5b\x99\xe8\xe6\xfc\x8a\xff\x83\xa7\x56\x37\x2c\x6a\xb7\xe8\xe7\xd5\x27\x7e\x84\x1b\x3d\x36\x0f\x2d\xe0\xe8\xf7\x33\x4c\x8d\x32\x7e\x36\x98\xf8\x67\x2c\x8a\xe9\xcf\x82\x56\x4c\xdf\xba\x02\x18\xa5\x8f\xfc\xc8\x49\x53\x16\xd5\xc8\xa7\xc5\x6f\x61\x84\x94\x96\x8f\x96\x95\x96\x33\xcc\x22\x58\x5a\x6e\x68\x2b\x4e\x61\xa5\xc7\x43\x2a\xfe\xf7\xa7\x55\x58\x3f\x4b\x5f\xb5\x44\x87\x47\xfd\xc5\x62\x70\xa5\xaf\x17\x7c\xa8\x83\x82\xdf\xdd\xe7\x7a\x41\x2a\xd1\x8d\x6e\x30\xb5\x9a\x9b\xe1\x9f\xa9\x8e\x99\x5e\x28\xe0\x7b\xf7\xb3\xa7\xd9\x15\x77\xf7\xb1\x42\xb9\x5e\x3a\xd9\xdd\xb7\xdb\xfb\x9f\x75\xca\x9e\xec\xa4\x6b\xac\x1f\xcc\xf8\x0e\x12\xd2\x14\x8a\x2f\x77\xc7\x93\x8a\xa6\xb0\x63\xb8\xcf\x9f\x19\x95\x4f\xd7\xfe\x8c\x1c\x19\x07\xc4\x3f\xf8\xf7\x65\xf9\xa5\xda\x98\xf3\x12\xcf\x87\x82\x26\xf8\x39\xe7\xc9\x7d\x7f\xf8\x77\x7f\x3a\x78\x75\xcf\x8b\x0b\x36\x62\xe5\xe2\x57\xf7\xa7\x4d\x63\x3d\x6f\x6e\x3f\xb9\x78\xc9\xcd\xc9\x33\x0c\xaa\x53\x9b\xca\x38\x44\xe0\x67\xe6\xc3\x35\x1e\x84\xe9\x3c\xd4\xe0\xc7\xb7\xad\xcc\x95\x31\xb7\xd1\x5d\xaa\x76\x23\xd0\xf6\x29\xf9\x17\x3f\xaf\xcf\x15\xff\x08\x71\x92\xd5\x8b\x7f\x9c\xfe\xf3\xff\x64\x02\x30\xb1\x9b\xff\xdc\xff\x2c\x03\x53\x81\x71\xe6\xfb\xd9\x71\x70\x57\x8b\xfe\xd3\x3d\xde\x59\x98\xc3\xe7\xe3\xa0\x73\x1e\x75\xbb\xb9\x16\x88\x65\x9a\x0f\x43\xcd\x76\x7f\x1c\x8e\x2b\x5f\x60\x81\x4b\x9e\x3e\x0a\xee\x76\x6b\x09\x8f\x3e\x62\xde\xee\xe1\xe7\x3f\x1f\xbd\x76\xde\x6e\x77\x7f\x9a\xf2\xed\x82\x45\xfe\x76\xa7\xde\x07\x3e\x73\xba\xc7\x06\x9b\xb8\xb7\xa9\xd3\xbe\xdd\x8c\xcb\xea\xac\xe9\xdc\x32\x71\x7e\xcc\xe5\xf4\xa1\x43\x29\xfc\xea\xe2\x66\xdd\xfd\x9f\xb1\xfb\xf6\x6e\x44\x02\x1a\x90\x33\x9e\x9c\x81\x9d\xab\x3e\x74\x21\x3f\xf8\xde\x11\xdd\x7e\xeb\x83\xc6\xed\x3f\xea\xc8\x2d\xe2\xca\xa8\x7b\x37\x06\xfe\xb1\x0f\x38\x59\x0d\xcf\xe2\xdf\x56\x07\xbd\xca\x69\x4c\xe8\x7c\xfd\xe4\xe7\x50\x3e\xd7\xc7\x6f\xff\xa7\x39\x42\xdf\xb2\x97\x29\x99\xcf\x4a\x74\xcf\x53\xc7\xdb\x7f\xfb\xcf\xc4\x7f\xfb\x29\x55\x47\x98\x16\x6b\xee\x70\xe5\xb9\x29\xde\x22\x1b\x4f\x8e\xc3\xaf\x05\x7b\xf5\x57\x12\xc0\x52\x43\x12\xe8\xf4\xd7\x54\xfc\x60\x67\x87\xf0\x7e\xce\xc3\x14\xfb\x4e\xc9\xc7\x73\xdf\xb0\xe8\x3a\x91\xc6\x7c\xca\x41\x9f\xcf\xee\xc1\xa6\xf6\x3e\x1d\xaf\x27\x74\xa8\xcf\x24\x28\x57\x3a\xaa\x7e\x82\x53\x2d\x9f\x6f\x04\x55\x8b\x99\x19\xeb\xe5\x43\x21\x91\xcc\x7c\xbb\x94\x5a\x85\x79\x6f\x6d\xd6\x5a\x04\xfb\xfe\x5c\x1e\x9b\x94\xf0\xc0\xcd\x1a\x2d\xb0\x30\xdd\x08\x32\xd3\x70\x73\xb7\x92\x4b\xef\xc9\xef\x86\x27\x39\x7b\x94\x95\xfd\x88\xda\xcb\xfb\x39\x66\xef\x2b\x3b\xdc\xc1\x49\x6e\xa8\x39\x82\xe5\x85\xe0\x82\xab\x3e\xf2\x4d\x5c\x4c\x57\x13\x9c\x4e\xb1\xab\xbf\xf2\x5c\xcc\x1f\xeb\x12\xf5\x70\xf1\x39\xb4\xab\x60\x93\x4a\x6a\xfb\x94\x0d\x14\xac\x27\x0f\x54\x61\x03\xb0\xef\x0d\xd4\x31\x8a\xd5\xe2\x76\xbf\xbd\x3b\x13\xef\x95\xa2\xfc\xe4\x67\xd7\x6a\x17\xa6\x75\x0f\x55\x45\x4f\xd1\xbb\xc3\x6f\xf4\x76\xe3\xfb\x49\x85\x4f\xb8\x32\x6d\xd5\x7d\xbb\xb3\x79\x83\xf7\x14\xe6\xb7\x8f\x93\x64\xf1\xed\xe3\x34\xad\x9f\x74\xe7\xc0\xfd\x4c\xe9\xfd\x0e\xd0\x12\xfb\x28\x2f\xda\xd9\xc7\x61\xef\x3a\xd3\x64\x53\xf9\xe3\xfa\x9e\x7c\xbb\x6d\x45\x8d\x3a\x77\x3d\x0a\xa1\xce\x29\xfc\x16\x21\xa4\x7f\xf5\x72\x7d\xc5\x59\x9f\x5a\x23\x2c\xe7\x76\x4e\xd3\xfe\xb7\x5b\x6d\xf5\xf3\xd7\xbb\x59\xa2\x9f\x64\x3c\x81\x8c\xc2\x38\x4e\x9d\x4f\x1c\x87\xcc\x68\xa5\x79\x68\xe6\xf1\x9e\x2e\x10\xd5\x79\xc8\x38\xb8\xd2\x3d\x03\xa7\x6e\xec\xca\x7c\x40\xcb\x4d\x85\xdd\x89\x05\x38\x6e\x52\xc8\x79\x0c\xe1\x80\x75\xb8\x09\xab\x33\x6f\xa6\xee\x26\x9f\x41\xfd\x4b\x65\x1e\xc9\xc9\x4e\x61\x98\x56\xb8\x08\xc3\x4a\x58\x5f\x67\x11\x6d\x3a\x1a\x9f\xe7\xb5\xbe\x3c\x8d\x87\xf0\xa4\xb8\x7e\x44\xf1\x0f\xab\x83\x4a\x71\x7f\xa6\x26\xb0\x98\x66\x22\x13\x5f\xc9\xe3\xf0\x89\x32\xfe\x72\x6b\x98\xf0\x5b\x51\x4f\x4f\xf1\x50\x1d\x11\x8a\xd2\xf9\xf7\x75\x37\x9c\x87\x2e\xd0\x1b\xc3\xf5\x85\xad\xe8\x0d\x2b\x65\xf5\x06\xb0\x9d\x36\x50\x01\xc4\x6b\x72\x40\x89\xdf\x49\x9f\xdc\x87\x27\x55\xb1\x2e\x0f\x18\x14\xf6\x40\x8b\x82\xca\x82\x29\x0f\x55\x39\x29\x0f\xbd\x59\xce\x90\xba\x04\xa6\xba\x0a\x18\x7e\xb4\xba\xbb\x9a\xa5\x0f\xb4\xd3\x0f\x54\x71\xa4\x3c\x02\xc3\x34\x67\xd8\x0a\x04\xd2\x4b\xf4\xf0\x40\x69\xd3\x94\xf1\x9a\x29\x52\x64\x1c\x90\xf9\xb5\x73\x56\x59\xac\x17\x2d\x63\xd2\x35\xd4\x7d\xca\xa5\xf2\x43\xb9\x52\x8b\x73\x45\xa2\x85\xfe\xd7\x4e\x5c\x51\xd5\x30\x2b\x12\x2a\xd3\x97\x7e\xcd\x74\x2b\x78\x46\x94\xa0\xdd\x46\x39\x14\x62\x50\x40\x05\xe4\xf0\x50\x0c\x4d\x9f\xb3\x3c\x8b\xb7\x3a\x53\x8a\x5f\x5a\x65\x37\xab\x98\xdf\x15\x3f\x8e\xe6\x96\x82\x1d\x60\xc3\x48\x2b\x16\xef\xfd\x40\x2a\x25\x96\x69\x8d\xbf\x94\xd4\xba\x0f\x02\x35\xaf\x39\x76\x94\x8a\xcb\xa7\x5b\xf9\x86\xe1\xc3\x69\x9d\x5c\xf9\xf6\x6f\x75\xfa\xed\xdf\xe8\x4b\x08\x2c\x8c\xef\xf0\x3d\x9a\x25\xb8\x53\x81\x3a\x16\xa0\x8e\xef\xd5\x67\x3b\x33\x01\x3c\x24\xee\xfb\x08\x62\x9e\x41\x3a\x15\xbe\xe3\x6f\xd3\xae\xfe\xaa\x7f\xeb\xaf\x9d\x13\x4d\x5f\x67\x3d\xcf\x0b\xf0\xc7\x9e\x19\x40\xd8\xa5\x44\xb0\xb8\x13\x4f\x61\x19\x88\x5f\xda\x30\xfe\x67\x04\x9f\xd5\x22\xee\x5b\xda\x68\x7f\x76\x8b\x48\x7b\xc3\x9b\x07\x0e\xbc\xc2\xde\x8d\x4e\x1b\x67\xb8\x52\x0c\xf5\xa0\x5b\x14\x9e\xc3\xe7\x9b\x45\x20\x9a\x75\x15\x95\xa5\x72\x61\x58\x05\x99\x5f\xaf\x02\x11\x81\xa4\xf8\xe5\x16\x18\xd0\x32\x7e\xb9\x1d\x86\xa7\x49\x1b\x8c\x28\x2f\xb7\xdf\x0a\x02\xcc\x13\x6e\x58\xdd\x5f\xd0\x5f\xe1\x5b\x82\xc4\xbc\xf9\xf8\xe5\xae\x00\x33\xd3\xa4\x87\x97\x0c\x0b\x1b\x10\xc2\x87\x77\x91\x07\xff\x5f\xae\xbf\xf7\xf8\x72\xfa\xba\xf5\xcb\xc5\xfb\xc9\x40\xb3\x7a\x51\xdc\x7f\x4a\xd0\x0e\x14\x21\x44\xfa\x22\x5d\xd3\x0b\x7b\x27\x62\xea\x47\xfd\x5d\x1d\xc1\xbf\x58\x71\x78\xb9\xfb\x58\x4c\x79\x5a\xef\x3b\x7e\xe1\x32\xd9\x97\xaa\xd4\xbd\xf4\xe1\xc3\x17\x2f\x5c\x7d\x79\xbe\x9e\x28\xf4\x95\x10\x98\x97\x6e\x4b\x4c\xde\x66\x05\x94\x7e\x08\xd4\xa9\xad\xbe\x0b\xbc\x8f\x94\x89\x78\x63\xfc\x0b\x8a\xd4\x2f\xef\xe3\x1b\x24\xf3\xc5\x81\x97\x5e\x9b\x2c\xb4\xf7\x00\xc2\x18\xe1\xbb\x6b\x1d\xd2\xba\x2e\x3c\x84\x41\x18\xd4\x03\xbd\x54\x98\x08\x6d\x53\x20\xb6\x05\x08\x83\x37\xfa\xc2\xbd\xa2\x2f\x3b\xc5\x2d\x80\xc5\x2e\x40\x53\x6a\xc2\xa8\xa0\x9b\x89\xf1\x3d\x31\xa7\x3e\x50\x28\xe8\xf0\x6e\xb3\x46\xf9\xb2\x4b\x98\x5f\x9e\x2f\x68\xbd\xfc\xb7\x17\x8f\xc3\x83\xb9\x14\x1e\x8c\x46\x78\x54\x56\xaa\xf0\xb0\x70\xc2\x0e\x83\x15\x52\xdf\x15\x78\x05\x3c\xd8\x56\x89\xe8\x33\x81\x7d\x74\x51\x4b\xef\x85\xe7\xd9\xf1\x45\xf4\x34\xb5\xae\x29\x62\x7b\x11\x2e\xa3\xd8\x42\xdc\xb5\x08\x78\x23\x2a\xfd\xc0\x78\x48\xba\xb8\x62\x90\x0a\x9e\x82\xed\x51\x3b\xc1\xdd\xb6\xcf\x18\x5e\xfa\xa0\xc0\x2b\xf0\x8e\xed\x17\x2f\xdd\x07\xb1\xc0\x04\x9e\xd0\x4d\x24\xe6\x88\xf9\xb2\x7b\xf9\x15\xa4\xa4\x70\x0f\xe5\x54\xc8\x12\x12\xc4\x3b\x91\x00\xdf\xf6\xb9\x7e\xfd\xed\x4f\x25\xda\x50\xc3\x37\x73\xef\xf7\x17\x31\x4a\xd2\x0f\xa4\xa1\x17\xfd\x4a\xd8\x4c\x7f\xa1\x80\x59\xd3\x53\xd9\x16\xab\xff\x82\x71\x8a\x49\x90\x3e\x68\x26\x50\x4b\x3f\x95\x8d\xb1\x22\xd0\x3c\x4e\x65\xcb\xa7\x7b\x0f\x64\x5e\xdd\xdd\xf1\xfd\xe1\x5a\x1f\xef\x10\xa8\xb1\xd6\x1b\xbb\x5f\xbc\xb1\xfb\xf5\xfe\xba\xdf\x8b\xe3\x56\x13\x01\x7a\x84\xf7\xaa\x2a\xea\x02\x70\x84\xed\xbd\xd2\x80\x29\x7d\xa7\x98\x50\x0b\x7a\xaf\xbc\x01\x15\x08\x7b\xe5\x6f\xcf\xe3\x3d\x6f\x69\x61\x78\x76\xf9\x7d\x9e\x6e\x81\x62\x0f\x50\x30\x6a\x62\x27\xb9\xc7\x1f\x1e\x31\x11\x74\x7a\x05\xfa\x78\x4f\xc7\xb8\x75\x12\x5c\x5b\x0c\xdc\x00\x9e\x57\x4a\xbe\x4f\x5c\xbf\x3f\xbc\x15\x4e\x32\x40\x21\x3c\xcb\x07\x4d\x19\x9c\xde\xe7\xb7\xa3\xa9\x69\x38\xbf\xc7\x53\x10\xc2\xc0\x52\x3e\xbb\x96\x80\xfb\xda\x01\x18\xd8\xb5\xa4\x53\xc9\x58\xb6\x53\xb6\xa3\x1e\x19\x72\x57\x47\x55\x91\xbe\x17\xa0\x58\x12\x78\x5d\xbe\x3a\x73\x0b\x3c\x31\x65\x0e\x0a\xfc\x08\x01\xec\xef\x07\x0b\xff\x64\x02\x6c\x8f\xb8\x2b\x57\x3f\xf9\x10\x3b\x82\x8a\x77\x9f\x34\xbf\xaf\x7c\xe0\xe8\xa8\x80\x14\x79\xa6\x84\x38\xb8\x8e\x46\x14\xc8\xd6\x0e\x7f\x3f\xfe\x51\x0f\xdf\x9a\x7f\xf9\x4c\x2b\xbd\xd3\xbb\x43\xdf\xd8\xd9\xe4\x83\x86\xc4\x6a\x5b\x53\xa7\xfd\x55\x05\xb0\xf4\x29\x3a\x5f\x7c\x87\x37\xae\xb3\x71\x60\xf6\x84\x17\x6d\xdf\xd1\x9d\x3e\x1f\xb4\x3b\x77\xfd\x33\xdf\x5e\xa9\x7e\x9a\xab\x37\x1a\x89\xf8\xe6\xac\x80\x7a\x94\xb4\xe9\x87\x60\xec\xa3\x1f\x7d\x5a\x47\x21\x62\x0c\xc8\x0f\x7f\xe8\x8c\xaf\x9b\x93\xe2\x8f\xf5\x28\xc9\xe8\xfa\x5e\x4f\xbd\x34\x99\x16\x8f\x13\x47\xa2\xc8\x4c\xf9\x6b\x3c\xca\xc8\x98\x6b\xe0\xdf\x3f\x0e\x7f\x27\x87\x76\x5b\xb3\xb1\x26\x72\x91\xff\xf8\xb3\x47\x85\x7b\x67\x04\xc9\xd2\xb6\xa6\x3c\x82\x11\x9c\x8a\x42\xba\x2d\xbe\x5a\xa4\x44\x20\x67\x10\xef\xaa\x5f\x6f\x30\xdc\x8a\x25\xa2\x6b\x30\x68\xc9\x10\xbd\xf5\x93\x6d\x02\x57\xea\xb8\x2a\x61\xf8\x5b\x58\x95\x88\x5c\xac\xc0\xfc\xd5\x39\x0a\x10\x7b\xc9\x77\xdc\xf8\x6a\xd8\x3b\xfa\x75\x4b\x78\xe4\x43\xe0\xc1\x82\x15\x80\xca\x1b\xfd\x6a\xb5\x2c\xca\xfc\x06\xed\x39\x8e\xb8\xf9\xa2\xbd\x09\x51\x55\x44\xf7\xe6\x66\xaa\x87\x3b\xa4\xb7\x77\xec\xaf\xd8\xbf\xa5\x6c\x14\x3d\x5d\x79\x33\x35\x09\x99\x93\xfc\xd3\x33\xde\x29\xa2\xef\x01\x85\xc4\x4d\x38\x15\x9d\xb0\xb4\xcf\x47\x3d\xdc\x79\x31\xbc\x64\x55\x3a\xe5\xaa\xd1\x4b\x77\xf5\x96\x8b\xe9\xee\x2d\x27\x7d\xeb\x17\xdf\x7c\xc5\xe4\x1d\xab\xeb\x09\xae\x0e\xef\x28\xbd\xfb\x9e\xa4\xa0\x1f\x90\x91\x17\x76\x79\x94\xa1\xda\xe1\xa8\x8d\x64\x59\x19\xa5\xf7\x99\x6a\x34\xd9\xf9\xaf\xab\xc3\xfe\x05\x3a\xda\x58\x3f\x9a\x42\xfd\xa8\xef\x75\xd4\x76\x9e\x59\x7d\xa3\x9f\x97\xde\x6b\xb8\x12\x6e\xf4\xb8\xc6\xbd\x0d\x23\xad\xd2\x4f\x7d\xdd\x6f\xf1\x09\x4f\xd3\x2b\xf5\x4a\xd3\xf5\xe6\xeb\xae\xc2\x49\x56\x14\x1d\x49\xf0\x3c\xd0\xfb\xbe\x5d\xb1\x71\x11\x81\x70\x81\x11\x44\x5f\x15\x35\xdc\x53\x62\x3c\x62\x6f\xcc\xf4\x51\xf7\x67\x3a\xfc\xd4\xf9\xe9\x23\x4b\x8b\x70\x9f\xbe\x4f\x7e\x7f\xfa\xd0\xbf\xc7\x79\xa9\xf7\xef\x7b\x7f\x7f\x55\xe7\xaa\xfb\xaa\x6e\x91\x1f\x2e\x69\x14\x5a\x94\xf8\x2a\x94\x3a\xd3\xd5\x2d\xfe\x84\x59\x68\x46\xb7\x9e\x1e\xf0\xa6\x49\x5d\x86\x2a\x32\x40\x75\xfd\xa3\xd3\xd1\xc4\x30\xcb\xd7\xb1\x61\xba\x46\x2a\x9d\xe1\x41\xf8\x68\x27\x01\x66\x41\x40\x77\x4e\x29\x4e\xb0\x3b\xa1\xdf\x7c\x67\xc6\x5e\xd3\x26\x6d\x17\x40\x62\x5a\x52\xa1\xe9\x8d\x56\xd2\x00\x5f\x79\xe6\xb4\xba\x45\xed\x71\xca\x5a\x73\xd3\xd8\xdf\x99\x9d\x21\xbc\x5e\xdd\xe5\x0e\xb7\x0a\x92\x88\x48\x27\x03\x53\x85\xde\x8e\xcb\x1b\x38\xd0\xbc\x2f\xaf\xc0\x9e\x77\x15\x8e\x22\x90\xa1\x7c\x10\x0e\x8f\xde\xae\xfd\xa0\xf9\x81\x59\x5d\x91\x21\x0a\x78\x38\x7f\xdb\xa3\x1d\x83\x91\x3a\x35\x38\xc6\xe3\x7d\xbe\x2b\x03\x7d\x4f\xfe\x8f\x78\xbe\x91\xcc\xf5\x78\xe7\xe3\x7d\x62\x58\x23\x17\xbd\x86\xa8\x2f\xad\x55\xb7\xea\x9b\x29\x40\x8d\xf7\x4b\xe3\x11\x73\x7d\xc3\xbc\xf2\x75\x15\x21\xc1\x1c\x3e\x51\x09\x38\xb7\x04\x65\xe9\xad\xc8\x4a\x7c\x89\x87\xa9\xab\x5b\x13\x0c\xc8\x6b\xd5\xad\xbc\xf7\x5f\xfa\xac\x2f\x76\x5c\x4a\x82\x8b\x44\x8c\x75\xed\x47\xa1\x84\x69\x42\xa4\x2e\x6c\x39\x21\x5c\x54\x63\xbc\xa5\x47\x82\x27\xd8\x08\x71\x4f\x01\x21\xf3\xd9\xc7\x00\x69\x05\x08\x91\x78\x3c\x5c\x81\x0f\x8f\x87\x47\xd3\x79\x3c\x70\x0b\x8d\x00\x49\xf9\x03\xfe\x4a\x72\xf6\x13\x97\x7c\x04\x85\x78\x77\x07\x38\x21\x8d\xfb\xe5\x51\x0b\xf6\x02\xd7\x47\x88\xf2\xe1\x21\x39\x72\xdc\xf0\x50\xc8\xe6\xc4\x22\xec\x30\x1c\xcc\xd3\xad\x52\xd6\x70\x12\xce\x85\x39\x26\x00\x8d\x26\x9c\x9c\x1e\x09\x42\xf6\x86\x13\x0b\x5a\x06\x68\xc5\x0c\x0f\x8c\x91\x90\x9e\x61\xe1\xe4\xe1\x31\x41\xa9\x28\xc1\x62\xa5\x40\x3e\x57\x41\x94\x15\x9c\x2e\x12\x15\xa7\xff\xdd\xcf\x40\xe7\x77\x46\x3b\x0b\x27\xaf\xcd\x10\xf4\xea\x71\x90\xe9\xe7\x17\xee\x96\x16\x63\x2e\xb4\x90\x51\xa0\xff\x7d\x55\xf7\x74\x30\xd0\xac\x9e\x3e\x3d\x1e\xa4\xdf\xf0\x83\xf5\xeb\x09\x1f\x24\x37\x4e\x27\x35\x44\x80\xd4\x0c\xa4\xed\xf4\x3a\x2f\xc3\x43\xea\x55\x89\xdf\x00\x68\x7b\xd3\xbc\x10\xe6\xc9\x3a\x74\xe2\xe5\x39\xd0\x84\x8f\x82\xfd\xdf\x9f\x4a\x04\xae\x47\x52\xdb\xbe\x6b\xaa\x2f\xb4\x0b\x79\x78\x34\xbd\xf3\x19\x10\x15\x1c\xb0\x15\xba\x24\x7c\x8e\x97\x9e\x85\xda\x77\x67\x7a\x29\x09\xdd\xea\x7d\x24\x52\x0d\xff\x7c\x63\x99\xa4\xba\x93\x21\xb7\x27\x4c\x38\x7e\x79\x29\x55\xa9\xad\x97\x76\xb4\x97\x53\x12\xb7\xe6\x00\x8a\x11\x94\x87\x80\xa4\xb4\x91\x22\x03\x41\x37\x05\x37\x5d\xde\x34\x0f\x78\xb0\xa0\xcf\xbb\xa4\x07\x35\xea\x0c\xd0\x07\x22\x84\xee\x47\x9e\x5d\x63\xa7\x57\x98\xa9\xd0\x2f\x34\xb8\xeb\x82\x2b\xa8\x51\x03\xb0\x3c\xae\x8c\x70\x04\xa2\x99\xf0\x62\xbf\xea\x22\xde\x0f\x11\xca\xff\x37\x2f\xa9\x8f\x68\x29\x71\xf7\x67\x22\x8d\xeb\xfb\xcb\x2e\x34\x01\xd5\x98\xc5\xae\x42\x4e\xdc\x63\x86\x45\x0d\x12\x1e\x12\x25\xbe\xcc\x03\xd6\x9d\xb8\xd3\xff\xd4\xaf\x07\x13\x8e\x9d\x78\xdc\x5b\xa0\x1f\x52\xc6\x91\x9d\x70\xe4\xa3\xb6\xd5\x45\x44\x1a\x95\x3b\x3e\x59\x2d\x44\x34\xdc\xbe\x74\x67\xb2\x72\x7f\x11\x14\xd2\x2c\x9e\xa4\xa7\x49\xd7\x91\x8d\x1a\xaf\x52\x54\x5d\x10\xc4\x73\xf5\x51\x89\x54\x85\x78\xc3\xb2\x52\xdf\x88\x68\x8c\x6f\xe4\xf8\x3d\x84\xbe\xee\xe4\x77\x76\x82\xee\x2f\x5a\x25\x8b\x95\x55\x28\xd6\x82\x3f\xb2\x83\xb1\x36\xe4\x75\x76\x9b\x2f\xb4\x11\xc7\xe8\x22\xb2\x67\xd5\xb5\x32\xe5\x5e\x34\xaa\x5f\xf6\x9a\x1f\xd9\x57\xfa\xe6\xf1\x98\x53\x95\x31\x2c\x1f\x69\x41\x67\x9a\x0f\x76\xdc\x99\xc7\x8d\xab\xcb\x21\xad\x8e\x54\x63\x9d\x03\x7c\x46\x15\xc2\x52\x28\x48\x05\x61\x56\x64\x1c\x76\x25\x85\x3d\x9c\xde\xec\x8c\xf0\x73\x5b\xd8\x36\x04\x54\xa4\x9e\x4b\x9e\x39\x30\xb1\x3a\x54\x0a\x28\x13\x9f\xa7\x59\x8a\xdc\x66\xa8\x2a\x6a\xfa\xaf\x7e\xf9\xe3\x56\x24\xab\x2c\x29\xdd\x07\x40\x69\x0a\x5a\xad\x8c\x7b\xd9\x02\xef\x9a\xad\x14\x66\x8a\xef\x7e\xa3\xa8\xcb\x8e\x84\x08\xf1\x8c\x6d\x40\x37\x58\x24\x82\x92\xb1\x85\x86\x95\x59\x89\x4f\x49\xbc\xa0\x04\x63\x77\x95\xe0\x09\x13\x9e\x65\x18\xfc\x3c\xbb\x76\x06\x22\x7a\x30\x67\x45\x71\xbb\x5a\xa2\xd3\x2c\x85\x9b\x8e\x40\x8c\x4d\x61\x06\x97\x1b\x85\x55\x6e\xb5\xbe\x45\x72\x71\x02\x50\x6f\x8c\x20\x74\x8d\xb7\x66\x7c\x9d\xa5\xac\x52\x29\xdc\x15\x13\x2b\x74\x77\x9e\xe0\x97\xed\xb6\x60\x4d\xb5\xba\x3b\x98\xf4\x82\x3e\xea\x7e\xea\x95\x7e\x03\x6a\xe3\xb9\x9f\x78\x4f\x9a\x3e\xde\x7c\x66\x56\x4b\xf5\x46\x95\xba\x6f\x0c\xea\x42\xf8\xfd\xcd\x67\xf2\x80\x2a\x08\x3a\xf1\xbb\xaa\x69\xbb\xff\x60\xa6\x6e\xcc\xc2\xaf\xd6\x85\x4b\xcf\x26\x04\xd6\x35\x35\x27\xf5\xbd\x56\x1e\x51\xd2\xe1\x46\x58\x24\x48\xc0\xed\xce\x13\xb0\xfb\x50\x99\xc3\xb5\x32\x46\x42\x75\x78\xab\x35\x25\x25\xfa\x57\x4a\xac\x8d\xd2\x9b\x73\xf7\xad\xba\x86\xda\xd0\x4a\x5a\xd2\x49\x69\xa6\x15\xbc\x76\xf9\x36\xf8\xaf\xa1\xf0\x5a\xc5\xeb\xda\xc8\xe3\x56\xd3\x4e\xa2\xcb\x69\x03\xd7\x8e\xdf\x44\x17\x83\xa9\xf6\x9a\x76\xc7\xbd\x58\x5b\xc5\xfc\xb6\xba\x6f\xf9\x79\x54\x59\x5c\xc4\x2c\x1f\xca\xa8\xf7\xb2\xd3\xf0\xd5\xbd\x68\x19\xc5\xf3\x57\x86\x09\x6b\x14\xd4\xeb\x8d\x7f\x7f\xe4\x37\x86\x95\x9f\x69\x54\xf9\xb1\x30\x7f\x28\x60\xfd\xec\xd8\xb0\x60\x1e\xfe\x04\x18\x2b\x66\x3c\x3f\x61\xf3\x3c\xb3\x67\x18\x7e\xf5\x4a\xf5\x13\x4c\xb8\xa1\x04\xfc\xc3\x06\xfb\x13\x5e\x28\xc4\x1f\x86\x92\xa2\xa6\x1f\x48\x7d\xe3\x09\xa9\xea\x7e\xb2\xd3\x08\x67\xf7\x66\x14\xc4\xfa\x8d\x4e\xf2\xf7\xd7\x7d\xd5\xe5\xab\x2e\xf7\x57\x5d\xbf\xea\x7a\x78\xbc\x89\x8c\xd5\xec\xef\x14\x7d\xfd\x15\x5c\xbe\x24\x54\x11\xbc\xbd\xd3\xc1\xc8\xbb\xd5\x3d\x3d\xa9\xb4\x28\xcf\x97\x4b\x95\xb2\xce\x0b\x46\x80\xde\xad\x2d\x2b\xc1\x98\xe2\x9d\x76\xa4\xde\x3d\x61\x78\xa9\x51\x40\xb8\x8b\xa1\x7a\x07\x57\x17\x0c\xfa\x7b\xe1\x76\x16\x01\xac\xe0\xde\x5d\x6c\x44\xde\x41\x42\x12\x82\x88\xe1\xbf\xa1\x50\x2e\x0c\xae\x40\x00\x28\x09\x11\x29\xf4\xa1\xf4\x36\xe4\xed\xae\x0a\x41\xa3\x31\x79\xc7\x4e\xdb\xbb\x7b\xf6\x10\x4d\x15\x84\xfe\x58\x53\xe5\x3b\x68\x42\x0e\x86\xa3\xb3\x47\x05\x9a\x76\x6b\xa2\xde\x41\x35\xa3\x7a\xf7\x4b\xff\x7e\x91\x07\xab\xb4\x74\xf9\x5b\x84\x6c\xbf\x1e\x16\xaf\xf5\x88\x1e\xcb\x5a\x80\x32\xf5\x20\xe5\x62\x49\x67\x86\x6b\x9d\x96\x10\x9a\xdd\xbf\xe6\x89\xf4\x05\x45\x62\x9b\x98\x81\xb1\x16\x66\x8c\xd9\x0f\xb5\x2b\xac\xe7\x9a\xa7\xb8\x8c\xb8\x7a\xbc\xd9\x2f\x44\x9c\x8f\xd7\xb1\x04\x23\xce\xf2\x15\x92\xe9\x59\xa0\xbe\xef\x07\x55\xef\x55\x9a\xf2\x3e\xbe\x17\xbe\x7d\x5a\xbd\xcf\xfc\xa6\xfa\xa2\x13\x0a\xef\x45\x5c\xf5\x3c\xbd\x06\xca\xea\xe5\xeb\x51\xc2\xb6\xd3\x75\x52\xb9\x5a\x21\x3a\x03\x60\xc4\xe2\x21\x3f\x31\xe4\xbb\xfd\xf2\x92\x3f\x3b\xc6\x4c\xbf\x37\x0a\x57\xde\x26\x38\x5e\x26\x38\xfe\xa9\xab\x5e\xd5\x3f\x39\x5c\xfa\x67\x4d\xfd\x3e\xc4\xea\xf1\xed\x39\xd6\x81\x85\xb9\x50\xe8\xa7\x48\x74\x7e\xad\x9c\xc9\xf9\x13\x1d\x9a\x65\x34\x8a\xfa\xf4\x6b\xba\xae\x16\x6d\x6f\xe2\x7f\x6c\x6e\xb5\xc2\x73\x7f\x02\xb7\x06\xf2\x08\xe7\x05\xb0\xd3\x74\x24\x31\x69\x50\x7e\x4f\x91\xa1\x50\x18\x24\x90\x19\xba\x21\xaf\x1e\x8e\x09\xba\x31\xe8\x7c\x8d\xa1\x27\x98\x38\xab\xcf\x17\xe4\x5d\xbc\x81\xb0\x1e\x4e\x2b\x81\x70\xac\xd3\x40\x85\x9f\x5d\x09\x12\xa9\xc7\x09\xc1\x7c\x70\xc2\xe0\x4f\x3f\x6a\x18\x31\x5d\x27\xb5\xc1\xbe\xc0\x84\xf9\xaf\xc6\x7d\x44\xcf\xd6\xfe\x0d\xa7\x91\x40\x2e\xfe\x2b\xfa\xc8\x73\xf0\x23\xaa\xf9\x74\xf7\x65\x48\x5d\xa4\xa2\x7e\x16\x3e\x0c\x2e\xb8\x38\x46\x5c\x57\x4a\x14\x59\xe8\x7c\x8b\x90\x08\xf7\xf5\x02\x6a\x76\x41\xdf\xc1\x16\xbc\x61\x21\x23\xed\x07\xdf\xeb\x8d\xe7\x03\x1b\x82\xa4\x8a\x5f\x53\x4c\x3b\xaf\x59\xcb\x69\x9f\x00\xa8\xe9\x99\x96\x2f\x6c\xda\x42\x9f\xeb\x3b\xfb\xdb\xeb\xd8\xad\xfc\xab\x84\xee\xe5\xbb\xa7\xa0\xd5\x74\xa7\xd2\xee\xce\xe4\x54\xe8\x87\x6a\xc0\x29\xd4\xd2\x9c\x3c\x91\x96\x7f\x3e\xc8\x3c\xf8\x1c\x78\xf5\x67\x18\x3e\xb0\xf1\x6b\xf7\x78\x9e\x7d\x6c\x38\x21\xf0\xf9\xf3\xa4\x1c\xe1\xcf\x93\x4f\xbc\x10\x61\x41\x84\x88\xa1\x0b\x1a\xff\xaa\x9f\x22\x38\x58\x0e\x9d\xc8\x97\x8f\x21\xdf\x9f\x29\x1f\x8e\xf5\x3c\xe9\x08\xea\x4f\xae\x4d\x91\x6a\x74\x6f\xb8\xbe\x16\x2c\x37\x48\xf7\x34\xa9\xef\x83\x67\x07\x7b\x65\x18\xf8\x5c\x88\x33\xaa\xfd\x06\x30\x44\x53\xc2\x6a\xe3\x05\x39\x76\x9c\x57\xc6\x94\x9c\xb4\x4d\xa1\x64\xce\x90\x3c\x2e\xcb\x25\xa1\x3b\xb6\x9a\x2b\x27\x9a\xc5\xfa\x7b\xe2\xfe\x79\x2a\x63\x08\x13\xae\xcf\xb2\x94\xd3\x68\xa7\x29\x7f\xc8\xf5\x3f\x92\x5e\x27\x5f\xe8\x7b\x1d\xce\xea\xe8\xaa\xaf\xac\x42\xac\x97\x19\xb1\x64\x81\x38\x89\x5d\x10\xf2\x71\x1a\x28\x23\xd6\x63\x84\x34\x4c\xe2\x7c\xd4\x15\x1f\x01\xe4\x31\x31\xe6\x15\x9e\x24\x08\x3d\xa2\x19\xe8\x0d\x39\x7a\xbe\x6c\x2a\x12\x3d\x6f\xa6\x07\xcd\x3e\xff\x28\x53\x54\xa8\x5a\x45\xf0\xc0\xac\x0b\x10\xda\x15\xaa\xfc\x40\x9b\x91\x59\xe4\xfa\x57\x23\xb3\xc8\xf5\x3f\x4e\xac\xf3\x00\x76\x7f\xd4\x5d\xc1\xb8\x11\xfd\x32\xd7\x22\xb0\xe8\x6c\x04\xcd\xf6\x5a\x7b\xa2\xc7\xab\xd4\x02\xc0\xa2\x4b\xe8\x8b\x83\x63\x6d\xb0\x2f\x0d\xfa\x28\xd9\xc5\x56\xc1\x49\xb8\x8f\x51\xff\x90\xba\x12\x19\x9d\xa4\x7f\xa5\x88\x2d\x17\x41\xe4\xb5\x41\xc5\x54\xca\xa1\x1d\x24\x34\x6b\xd5\x11\x36\x6c\xab\x8f\x99\xe9\xcc\x01\x83\x51\xcc\xaa\x79\x56\x7d\x2c\x5e\x64\x90\x78\xfb\x5d\x1b\x48\xbc\xa7\x79\x48\x3f\xf5\x37\xbf\x4c\x53\xe7\xd3\x9e\x60\x3e\x70\x77\x62\xcd\x3a\xde\x21\xcd\x38\x7e\xd9\xe1\x41\xa1\xca\x32\x3d\xc8\xb4\xca\x2d\x01\x01\xbb\x52\x2b\x3e\xf5\xa4\xfa\x72\x24\x99\x87\xfa\x58\x2f\xae\xdf\xe1\xe6\x4a\xf6\x29\xb1\x31\xf5\x53\xc3\x8c\x6c\xb7\x69\x75\xe7\x19\xbe\xb0\xab\x15\x91\x71\x19\x32\x2a\x7a\x71\x4a\x2a\xe3\xd5\xcd\xea\xf3\x81\xb6\x91\x0f\xcd\xe5\x7c\x94\x44\xf4\xaf\x05\x88\x0c\x12\x70\x71\x87\x2f\x22\x63\x7b\x1d\xbb\xf0\xee\x76\x85\xd6\x36\xea\x4a\x71\x35\xd9\x2e\x5e\xe7\xde\x0a\x75\xe4\x14\x78\xc1\x47\x2c\x56\x08\x41\x5a\x0a\x9a\x4e\x59\x21\x74\x95\x15\xb5\xaa\xf8\xc5\x63\xfc\x2c\x7e\x09\x11\xd2\x54\xf1\x5b\x02\xe1\x96\x1e\x3b\xa1\xb2\x53\x73\x1b\xb9\x6a\x8c\x26\xad\xb3\xc8\xf7\xb2\x33\x30\x1a\x6e\xd7\x4f\x28\xe3\x15\xdc\x9c\x65\xe5\x5a\xe6\x7b\xb4\x94\x35\x3f\x2f\x55\x6e\x26\xd4\xc4\xf3\x32\x29\x45\x43\x68\x30\xce\xfc\x6c\xea\x5b\x75\x5a\x8a\x82\x91\x8a\x8b\x3e\x22\x04\x26\x3b\x6a\x78\xe9\x43\xba\x2d\x59\x73\x25\x87\xe8\x13\xf2\x0b\x1f\xa2\x0c\x79\x64\x8a\x94\x43\x69\x81\xa6\x1e\x28\x97\x33\xf5\x52\x61\xd0\x6c\x7f\x59\x64\x8a\xfb\xfd\x45\x0e\x17\x9f\x4f\xaf\xff\xb2\x34\xca\xd4\x16\x4a\x09\x6b\x3a\x53\x53\xcc\xfc\x2b\xe1\xd1\x91\x06\xa0\xaf\x54\x8d\x1e\x6b\xb2\xba\x3e\xd9\xfa\xc1\xb2\x0c\x3a\xfb\xfb\xf9\x3d\xff\x84\xd9\xdb\x6d\xa9\xf6\xcc\x0a\x5f\xb7\xe1\xf6\x9a\x41\xb8\xfd\xc5\x93\xdb\x15\xaf\x56\x71\x7f\xc2\xdf\xa8\xde\x58\xbe\xb0\x20\xee\x9b\xa3\x25\xe8\x5a\x81\x42\xe5\xf0\x71\x57\x35\x7b\x3d\xb9\xab\x8d\xa8\x77\xd5\x4a\x71\x73\xfe\xa0\xf3\xa6\xbb\xfa\x1b\x64\x68\xf5\x28\xa7\x7f\xe3\x4e\x48\x34\x4f\x62\xfa\x1a\xf8\xd1\x05\x55\x42\x41\xfa\x5d\xc2\x56\x52\x64\x00\x0d\xad\xa1\x8e\x4b\x85\xc9\xfc\x4e\x0c\x8a\xa8\x3a\xf8\x5a\x5d\xa9\xe9\xf0\x9b\xf6\xed\x75\x4c\xd7\xd0\xb8\x74\xa6\x22\x64\xc1\xa2\x8a\xc8\x6b\x34\x17\x77\xf3\x98\x10\xb9\xc2\x29\x47\x2d\x6e\x75\x2c\x6a\x81\xbe\x23\x7b\x18\x72\x70\xc9\xd7\xe3\x7d\x7e\xba\x48\x76\x79\xa4\x5a\x25\x4c\x9b\x04\xbe\xa9\x5d\x01\x46\xed\x36\x71\x71\x69\x74\xb6\xb7\x36\x9a\x5a\xdc\xe3\x6c\xff\xe3\xfd\xce\xd4\x03\x74\xa9\xa3\xe2\xa9\x90\x8b\x08\xb9\x60\x5e\x08\x63\x5f\x1c\xef\x4d\x45\x3b\x65\x52\x7e\x97\x82\x15\x55\xb1\x39\xfb\x47\xda\x1a\x6b\xd1\x39\x3f\x81\xe6\xac\xe0\x3a\xac\x25\x72\x5b\x70\xe5\xee\xa9\xb2\x07\x61\x3a\xf3\x99\x19\xf9\xf4\x7b\x70\x86\x53\xd8\x34\xa8\x9c\xb6\x0e\xcc\xea\x7d\x5a\xdc\x8b\x95\x4a\x59\x8f\xee\xb9\x08\xb7\x32\xb7\x6b\xd7\xe0\xed\x2f\x95\xe0\x05\x9a\x7a\x19\xb8\xd1\x7c\x3a\xa3\xa1\xfd\x5a\x1e\x27\x2d\x5e\x1e\xc8\x15\xf4\x46\x8d\x61\xaa\xed\x68\x4f\xf5\xaf\xaf\xea\x7f\x9c\xa0\x9f\x0a\x63\xe1\x80\xf6\x53\xb1\xde\xef\x7f\x6a\xb3\xce\x40\x21\x9d\x61\x20\x7b\x94\xaf\xba\x7f\xd5\x3d\x7e\x55\x6e\x75\x1e\x0e\xc6\x29\x6d\x6e\xcc\xd2\x60\x81\x04\x02\xa9\x34\x00\x2c\xd5\x5f\xc0\x7d\xdb\x12\x82\x72\x7d\xe3\x77\xe6\xf9\xb7\xda\x86\x8d\xaf\xbd\x0a\x3e\xcd\x77\x91\xd2\xb1\x17\x2c\x58\x3d\xc7\x3e\xd2\x81\x9d\x16\x31\x6b\xb2\xa5\x78\xe5\x30\x1e\xb2\x6c\x0f\xdd\xaf\x98\x0f\x44\x81\x19\xa2\x88\x70\x37\x46\xad\x81\xd1\x93\x1f\x0e\x36\x05\x11\x41\xaf\x00\xa2\xff\xb5\xae\xe5\xa0\x4c\xc1\x9c\x8d\x18\xe7\x17\x06\x16\x37\xde\xc5\x7a\x14\x99\x17\x5e\x1f\x5c\x05\x07\xdd\x2e\x01\x64\x51\xa8\x42\xa5\x50\x40\xa9\x4b\xa4\xfd\xcc\xb0\xa9\xef\x99\xfb\xfd\xfb\xbf\xa6\x90\x2c\xd6\x7b\x14\xab\x6d\x35\x15\xa5\x7a\xf8\x85\x3d\xcb\xe1\x57\x07\x93\x25\xe0\x3d\xa6\x62\x87\x7f\x54\x9a\xb9\xa4\xf4\x10\x88\x4a\xe2\xf5\x1b\xf5\x43\x93\x73\x52\x4e\x3c\xfc\x05\xaf\x2e\x38\x89\xc8\x4e\x21\x1b\xda\xf4\xe1\x13\xde\xf7\xa5\x07\x69\xf5\x11\x91\xa4\x47\x9d\x65\x02\x95\xb5\xff\xb4\x62\x01\xdd\x44\x5b\x50\xab\x4d\xf7\x5c\x0e\x9f\x76\x5d\x03\x20\xe4\xdf\x27\x4d\xbc\xed\x03\x94\x76\xcd\x97\x34\xe9\x6b\x76\x96\xe5\x00\xfc\xfb\xf9\xd7\xef\xf8\xab\x79\x43\xf4\x53\x97\xae\x81\xe2\xda\x11\x6a\xa8\xa2\x95\x30\x95\x7c\x58\xaa\xb8\x22\x7b\xf8\xa4\xcb\x1a\x82\x0e\xb7\x77\x14\x0d\x69\x5d\x17\xf8\x3e\x4f\xcb\x3f\xc6\xa6\x2c\x96\xe2\xb2\x24\x52\x7f\x29\xad\xbd\x0a\x90\xb9\x09\xe7\x34\x97\x9e\xe2\xd2\xfd\x61\xb0\x77\x1a\x31\x25\xae\x1d\xc3\x45\x71\xd9\x37\xf3\x55\x04\x1d\x3a\x28\x2e\xdf\x61\x53\x44\x87\xcb\x19\x76\x80\xf0\xd9\x24\x4a\xd8\x82\x3a\x0d\xcc\x1a\x60\xfe\x77\x4d\x6b\x68\x60\xcf\x7d\x30\x5e\xc9\xa9\xf4\xc3\xa5\xa6\x0d\xc0\xa2\x77\x05\x3c\x3a\x45\x58\xf5\xf3\xe4\xe2\xe7\x97\x69\x71\xc5\x16\x8e\x3a\xaf\xe3\x0c\xf8\xf5\xf0\x97\xa5\xb3\x73\xcc\x30\xe1\xad\x6c\x04\xa7\x86\x99\x3b\x19\x7d\x8b\x96\xdc\x16\xec\x7e\x52\xe5\xed\x72\x53\xb2\x38\x33\x3d\x5a\x42\xb7\xf9\x88\x88\x5a\x99\x17\xbb\x3b\xbf\x5d\xfc\x70\xd1\xe7\x09\xca\x8d\xfe\x17\xfc\x94\xc8\x8f\x3f\xfa\x33\x7f\x64\xcf\x2e\x87\x91\x6d\xd2\x7c\x4d\xb3\x8a\x56\xef\x11\xca\xe5\xf6\xe8\xa1\x06\x33\xaf\x57\xcd\x6b\x55\xc4\xa9\x97\x45\xa2\x86\xaf\xe1\x14\x27\x7c\xe7\x63\xbc\xc6\xae\xb6\x93\xe3\x13\xa3\xeb\x88\x9b\xae\xa1\x11\x07\x68\xd2\x29\xc3\xa7\x4e\x94\xa9\x9f\x29\x12\x99\x72\x82\xa3\x18\xb8\x27\xae\xf0\xa7\x27\x71\xae\xd7\x57\xaa\x53\x65\xee\xe3\x96\xc0\x84\x6a\x7d\xbb\x86\x65\xb4\xc3\x4a\xa2\xa2\xa2\x35\xaa\x6d\x12\xc1\xab\xd7\x57\x3d\x82\xd3\xae\x31\xb8\x3b\xdd\xa4\x8d\xf4\xd7\xfe\xc0\xd5\xe2\xf5\x08\xeb\x13\xe7\x44\x14\x71\x80\x0a\xd4\x6b\x12\x8a\x57\x3d\x3b\xf2\x8a\x4f\xef\x1e\x44\x3a\x4a\x04\x0f\xde\x7f\x63\xaf\x5e\x80\x9d\x82\xa8\x07\xcf\x70\x08\x3d\x68\x2e\x2c\x9b\xb0\x8f\xfc\x00\xee\x39\x10\x44\xa0\x3d\xc2\xb5\x30\x8a\x97\x29\xd0\x11\x16\x74\x01\x06\xd5\x6f\xe1\xb8\x73\xaa\x38\x20\x01\x97\x2f\x38\xe0\xa9\x0b\xfa\x62\xba\xcb\x2d\x69\x21\xbe\xab\x26\x2f\xee\x6d\xb2\x6e\x97\xfb\x2f\xec\x86\xcd\xfa\x39\xa6\x98\x47\x50\xd1\x20\xc4\xa7\x79\xac\xb9\x18\xcd\x45\x72\xe7\x9a\x0e\x0c\x1a\x82\x37\x7f\xbc\x21\xa0\x84\xa4\x77\xcb\x43\xea\x1b\x6c\x30\x56\xa6\x49\x6e\x66\xec\x9f\xc5\xad\x41\x05\x99\x90\x56\x57\x16\xa7\x32\x4f\x48\xeb\xdb\xf5\x6f\x04\x4b\x9b\x05\xa3\x33\x9b\x23\xa4\x47\xc3\x62\xf3\x11\x34\x4a\xdd\xbd\xcd\x95\x05\x86\x4e\xf5\xbf\x37\x1d\x67\xdc\xe7\xd3\xa1\x16\x60\xca\x87\x06\x23\x60\x58\x69\x08\x77\x88\xbd\x22\xa6\x7e\x1c\x5e\x98\x26\x33\xde\x53\xa1\x97\x9a\x1c\x0a\x55\x88\x8e\x50\x50\x9f\x85\x30\xe2\xe5\x9e\xf4\xa7\x8e\x50\xf0\x52\x0f\x00\x6a\xda\x5d\x59\x49\x84\x72\x37\x8e\x2a\x15\x47\x3a\x51\xf5\x13\x33\x2c\x5d\x81\x63\x49\x42\x71\x25\x99\x02\xad\x2a\x7b\x0a\x93\xb2\xdb\xe9\x10\x8c\xf4\x08\xfd\xaf\x7b\x76\x37\xf0\x0f\x08\x3a\xfc\x84\x23\xbf\x48\x9c\xae\x7e\x1d\xba\xf0\x73\xa4\x12\x69\x52\x9b\x0d\x88\xf5\x3b\x95\xa8\xad\x2b\x95\x38\x25\x31\xb1\x33\xe6\xa1\xfb\xa5\xd8\x72\xa2\x5a\x3c\xa0\x49\xa1\xcc\x9e\xfa\xfa\xe9\x7c\x48\xdf\x18\xac\x18\x28\xc6\xe1\x3c\x61\xb2\x98\x6d\x3f\xe6\x5c\x4d\xed\x86\x8a\xdd\x51\x30\x97\x3c\x8a\xbb\x29\x6f\x0b\x60\x05\x2f\xee\xdb\x83\xbc\xac\x86\x17\x46\x5e\xdf\xa5\x23\x78\x20\x44\xa2\xfb\x50\x18\xa6\x0f\xa8\x03\x23\x30\xdb\x47\x55\x89\xf6\x43\xc5\x7b\x9a\x5b\xb8\xb8\x34\x67\xb2\x6a\xf1\x3e\x6b\x0f\x5e\xfc\x35\xc9\xd0\xc5\x53\xa9\x92\x80\x1d\x22\x20\xff\xb4\xea\x5c\xbc\xa5\xca\xdf\x47\x3a\x11\xf9\x00\xd9\xb4\xe0\xfc\x59\xcf\x0e\x61\xb9\xd1\xca\x47\x9b\x48\xf8\x69\xc8\x3d\x0e\x21\xd3\x31\xc5\xff\x92\x98\x92\x64\x07\xff\x88\x71\x02\xc2\x20\x67\x02\x25\xe1\xf3\x74\x2d\xbd\x0a\x16\x5c\x34\xac\x20\xad\x27\x17\x62\x95\xe3\x58\x00\xec\xed\xf8\x8d\xf2\x6c\xe6\x80\xcf\x10\xb1\x25\x41\xce\xc6\x52\x30\xf9\x38\xfd\xa2\x72\x35\x2d\x30\xe2\xf5\x4f\x87\xd3\x46\xc0\xec\x62\x53\xc1\x91\x0b\x50\x6d\x6a\x25\xd5\x19\x30\xed\x52\xdb\x5a\x35\x08\x25\x82\xa3\xa4\x97\xeb\x48\xab\x7f\xc1\xa5\x10\xa0\xda\xc0\x0b\x5f\x5d\x20\x80\xe3\xa6\x3e\x35\xe6\x5c\xeb\x0e\xe9\x19\x17\x0f\x8f\x26\xe5\xd7\x76\x18\x3b\xea\x8c\x50\x0c\x3f\xed\x3f\x69\x94\xed\x0c\x4a\xd0\x10\xdb\xb5\xd0\x84\x67\xed\x5a\xa0\x5c\x29\x20\x42\xe1\x14\x08\x01\xb7\x0b\x6f\x56\x2a\xbc\xd7\x82\x41\x55\x60\x65\xf3\x68\xd7\x42\x3d\xe0\xa3\x5d\x52\x49\x74\xe1\x9a\x94\x0a\xa5\x8a\xd3\x59\x07\xfe\x31\xb8\x9e\x2e\x0f\x9c\x5a\x77\x3f\x7c\xd1\x9e\x01\x38\x43\x69\x81\xf8\x3e\x34\x03\xc9\xfd\x6b\x1a\x23\x70\x54\x3d\x33\x86\xa5\x68\x0c\x9a\x5d\xc3\xba\x20\xc1\x83\xde\xbc\x25\x8f\x5e\xaa\xd0\x7c\xbc\xf8\x70\x65\x3d\xde\xa7\x5b\xd9\x6a\xde\x17\x4d\x3e\x77\x02\xa4\x14\xdd\xfc\x9b\xd3\xf6\x77\x71\x2a\x44\xbe\x8b\x09\xc8\xef\x92\xdc\xe6\x75\x77\x40\xb8\xd5\x9d\x6b\xa8\x3a\xca\x80\x97\xf9\x9c\xfd\x1b\xb6\xde\x1c\xc0\xcd\xff\xa4\xf1\x07\x37\xee\x04\xdd\xf6\x7f\x4d\x8c\xa3\xa0\x1f\x13\xe4\x8c\x9b\x9c\x89\x80\xa1\xdf\xfe\x68\x22\xb0\xfd\x2d\x84\xa9\xb8\x5d\xe4\x30\x19\xbe\x6a\xc0\x0a\x6c\xc0\x8c\x29\x2c\x21\x99\xa2\x97\x08\xa5\x38\xa7\xc3\xec\x0e\xcc\x3a\x95\x99\xc2\x4a\x81\x20\xa8\x0a\xb8\xd0\x2e\x0a\x85\xf5\xc9\x7a\x23\x00\x5a\xc3\x32\x24\x85\x6d\x11\x61\x05\x6a\x69\x85\xf4\xfd\x0a\xf1\x29\x1f\x6c\x9e\x15\x21\x6c\x7a\x72\x40\x40\xef\xa8\xc2\xa6\x9b\xe6\x61\xf3\x25\x64\x50\x7d\x5f\x9d\x70\xa0\xb7\xd0\x60\x9f\x51\x5d\x27\x6c\xef\x8a\x3e\x2c\x78\xb6\xce\xe0\xf1\x28\x08\x3e\xf2\xd2\x09\x89\x97\xfe\x72\x91\x63\x5b\xf0\xc8\xbe\xc0\xff\xb1\x0b\x10\x74\x1b\x00\x14\xe5\x0f\x05\xbe\xf0\x78\x60\xce\x19\x1e\x18\x10\x02\x84\x34\x31\xfd\xdb\x13\x70\x78\x10\x34\x72\x67\x3f\x74\x0c\x10\x34\xec\xb8\x38\x22\xe8\x85\xac\xd8\xb1\x8e\x14\x76\x9a\xdc\x33\x0c\x4f\x71\xf2\x94\x52\x7b\xca\xc0\x7f\x08\x2b\xf1\x3a\x5d\x46\xf9\x9d\x4b\x93\xae\x21\x9c\x1b\xfe\xa1\xa1\x91\x38\x3d\xff\x62\xa6\xa8\x2e\x33\xee\x36\xd8\x6e\x7e\xcc\x82\x11\x02\x7d\xcf\x70\x9e\x01\xda\x8f\x02\x90\x33\x67\x3d\x68\xb2\xb4\xce\x8a\x83\xb8\x35\xa8\xf2\x71\xb8\x16\xd4\x17\x21\x1e\x14\x1e\x0a\xd1\x2f\x04\x32\x7c\x41\xff\xb1\x38\x04\x6a\xb1\x0b\xa4\x56\x12\xa0\x79\xbf\x14\xaf\x04\xde\x83\xf1\xab\xfe\xe9\x9f\x3c\x4e\x6e\x50\xfd\xf7\xa7\xd5\x83\xcb\xab\xd2\xbb\xa0\x53\x75\x8c\xf0\x3c\xb9\x98\xb7\xfb\x36\xc4\xd3\xdb\x06\xbb\xcc\x11\x2e\xaf\xc7\x5e\xc2\xe5\x2d\x76\x5e\x9f\x7a\xab\xe1\xe2\x65\xbf\x00\xf6\x81\xc6\xc1\xd6\x61\xc2\x35\x2e\xc6\x11\x06\xab\x17\xa8\x32\xd1\x5d\x49\x72\x2e\xb2\xa5\xc5\xb5\xd2\xc4\x5a\x23\x6f\xb9\x20\x41\xbf\x8a\xd6\x1c\x70\x84\x23\x44\x8f\x56\x15\xd9\x9d\x86\xf8\x48\xa8\x09\x08\x58\x9f\x9c\x01\xe0\xbf\x14\xd0\x42\xb4\x3c\xa1\x60\x1f\xa2\x36\xdf\xa8\x27\x38\x42\x64\xc9\x53\xcc\x0f\x71\xb8\x8f\xfa\x7f\x0c\x38\x8f\x11\x22\x74\xb8\x42\xbc\x2f\xe8\xc0\x07\x7d\x4a\xa6\x62\x40\x09\x51\x3b\x00\xee\x1a\x86\x28\x1f\x4e\xc7\x6f\x86\x05\xaa\xd7\x7c\x74\x20\xc4\xae\x60\xa2\x10\xb5\x96\xc7\xc4\x6a\x88\x3c\x2f\x14\xa2\x96\x03\xa8\x7c\x96\xf1\xbe\x4f\x0d\x99\xfa\x74\x42\x41\xa4\xad\x50\x21\x2a\x50\x9f\x18\xa7\xd4\xc1\xde\x96\xb8\x7c\x57\x87\xf6\xac\xda\xc4\x81\xca\xbc\xa1\x60\xb7\xbd\xc1\x66\xee\x8f\x8a\xe7\x5d\x44\x35\x14\xc9\x83\x92\xc4\x10\x01\x49\x3e\xba\xb1\xaa\x1a\xee\xbb\x81\xbc\x50\xcc\x50\x97\x0d\xfa\x40\x14\x00\x5a\x5c\x55\x71\x1a\x00\x59\x51\x5d\x4c\x32\x09\x56\x58\x39\x11\x0f\x95\x7d\x27\x63\x57\x1f\x24\x68\xfd\xdc\x21\x09\x3a\xf3\x0b\xe8\xd1\xd1\xaa\x35\xa7\x6b\xf8\xfe\x80\x09\xae\x4f\xf6\xa7\x10\x70\xc4\x14\x39\x91\xfe\x70\xb5\x3b\x54\xa6\xaf\x5e\xd4\x33\x0c\x15\x17\x37\x83\x9a\x6f\x8c\xd8\xec\xff\x14\x80\xfa\xdc\x96\xfe\xa7\xbd\x7f\x59\xc3\x2f\xf3\xe4\xf7\xf7\xfd\x55\xcf\xf4\x55\xaf\xaf\x7a\x71\xbe\x9f\xa4\x93\x90\xd1\x94\x5d\x7a\x32\xf9\x5a\xc0\x29\x33\x91\xe4\xb6\xde\x91\x26\xb7\x69\x9d\x23\x92\x71\x3a\x39\x11\x86\xc5\x84\xf4\x98\x9c\x24\x26\xa9\xbe\x60\x1a\x3a\xbd\x02\x4d\xd3\x58\xe6\xbd\x32\xe9\x5c\x93\x51\xae\x89\xa6\x45\xbc\x5e\x82\x0c\x8f\x69\x49\xfb\x2e\x39\x92\x16\xf1\x7f\x5d\xa1\x1f\x9e\xa8\xb3\x99\x56\xae\x48\x59\xbd\x4d\x7a\x1a\x55\xc0\xb0\xca\x07\xcf\x5b\xa5\xf5\x96\xe4\x27\x49\xe9\x26\x03\x56\xd2\x11\x31\x41\xf5\x0f\xd2\xbc\x48\xce\x49\x5a\x79\xf2\xab\xc8\x50\xc9\x53\x90\x4f\x9e\x42\x5c\x12\xc9\x5e\xdc\x48\xad\x4d\x8f\x87\x07\x96\x38\xef\xf2\x73\x30\x70\x46\x26\xed\xd8\x3c\xd3\x54\xab\xe4\x98\x76\x1c\x8e\x00\x91\x80\xb1\x3c\x9b\x24\x7e\xf2\xe5\xd1\x96\x74\xb4\xaf\x8a\xfe\x24\x61\x10\x11\xb3\x2a\x81\x07\x02\x2a\xff\xb8\x93\xde\xd3\x24\xcc\x0b\xdd\x4c\x7a\x22\x5d\x4f\x1f\x69\xb2\x2c\x9e\x96\x2b\x7d\xe8\x4a\xcf\x14\xb1\xf5\x9e\x4e\x1a\xe2\xfe\x5c\x12\xce\x13\xa6\x73\x69\x55\xa7\xfe\x98\xea\xf2\x9a\x63\x5d\x8a\xfa\xb8\xf3\x98\x1c\xa6\x2b\xe3\xca\xb6\x01\x19\xfc\xe0\xaa\x71\x52\x55\x93\x1d\x41\x4c\xa7\x8a\x7e\xe9\x1c\x51\x60\xfe\x9c\x7a\x00\x2b\x9d\xa7\xea\xdd\xa6\xf3\xb4\x51\x27\x9d\xe7\xc5\x88\x9f\x88\x57\x83\xa1\xee\x9b\xa7\x8f\x4d\x93\xd1\x7a\x18\x0d\x75\xe1\x6c\x6f\x10\x98\x12\xcb\xcb\x1d\xee\xf5\xec\x00\x01\x5c\xee\x3c\xfd\x1b\x20\xc2\x94\xf6\x9d\x88\x40\x16\x18\x6e\x05\x61\x5e\xe2\x7e\x02\x52\x7c\xb9\x58\x53\xb9\xd0\x2f\x42\x92\x94\x82\x83\x56\x67\xba\x1e\x6c\x3d\xa0\xac\x22\x80\xa3\xad\x71\x2f\x2b\x61\xea\x22\x26\x0e\x21\xa4\x4b\x0f\x3c\xa6\xbe\x3e\x9a\xc6\xea\x68\xba\x52\x29\xe9\x25\x80\x67\x80\xd2\x55\xa5\x17\x03\xd4\x4b\x8b\x6b\x9f\xf6\xa6\xb8\x49\x7c\x11\xc7\xe8\x4f\xb7\x39\x82\xde\xeb\xa6\x88\x5d\x12\xaa\xe3\xa4\xd8\xd7\xea\x09\xe9\x80\x75\x12\x87\x87\x52\xdc\x99\x5d\x91\xb5\x5b\x88\x76\x26\x02\x6f\x52\x74\x9a\xb8\xd6\x0f\xa6\xc6\x84\xc7\xe7\x52\x1c\xc9\x67\x37\x9d\xa2\x94\x4c\x64\x5b\x88\xf0\x9c\x87\x79\x52\x8c\x6a\x8a\x18\x94\xe2\xfc\x65\xef\x02\x22\xce\x04\x82\x9c\x98\x02\xf8\x0f\xee\x6d\x1c\x27\x04\xc4\xa9\xff\x01\x81\x20\x45\x8a\x00\x09\x7b\xe8\x2c\x33\x69\x30\x3f\xa0\x08\x25\x9d\xd6\x97\x4b\xf9\x21\x79\xe9\x54\x45\x1d\x22\xb3\xa4\x66\x76\x4a\xe7\x7d\xa0\xa7\x20\x27\xa9\x4a\x8c\x30\xdb\x40\xaa\x07\x0f\xc5\x0a\xd2\xc3\x2f\x02\xa7\x92\x49\xf5\xc8\x3c\x57\x01\x88\xf9\x82\xa0\xa9\x6b\x48\x55\x97\x66\x52\xaa\xe4\x6f\x49\x97\xf4\x6d\x99\x9b\xc4\x29\xbb\x5f\x9a\xba\x3d\x95\xf2\xea\x38\x17\x4f\x19\x57\xb5\xd5\x04\x3d\xa1\xc4\x66\x97\x1f\x38\xe6\x48\xac\xcf\x17\x08\x84\x57\x07\x6f\x64\x12\x84\x9c\x12\x31\x00\x6f\x47\xc3\xb4\x2a\x97\x9f\x11\xd5\x38\x4f\x69\xc9\xbc\x76\x5c\x40\x7a\xf4\xe1\x22\xb3\x2e\xe5\x8b\x03\x4a\xbe\x42\x8c\xa8\xda\x19\x3d\x6e\x1e\x7b\xb7\x86\xe1\x7f\xd7\xb9\x49\xd9\x3a\xbf\xcc\x53\x14\xa4\xb4\x40\x00\x89\x02\x8e\x2a\x6f\x27\x3d\xf4\x94\x32\x8f\xa6\xa6\x0c\x47\xb7\x31\xec\x4e\xf2\x7d\xf9\x13\xbe\xdf\x49\xff\xc0\xd4\x25\xe5\xfb\x5d\x9b\x48\xb0\x8c\x3d\x74\xd6\xd1\xd9\x61\xd2\x97\xec\x8d\x67\x41\xbe\x18\x5c\x61\x1c\x34\xd9\x25\x96\xf5\xb0\xc3\x97\x82\x83\x01\x1e\x32\x48\xc5\xbb\x8d\xde\x7a\x91\x81\x52\xb1\xed\xad\x54\x02\x0c\x98\xd2\xcb\x20\x76\x40\x74\x1f\x1d\x5a\x7b\x89\x0e\x2b\x8b\xa9\x44\xed\xd2\xe8\x0f\x8e\x7e\xa7\x92\x3d\x5d\x09\x65\x01\x94\xcc\xef\x35\x45\xff\xd8\x90\x0b\xec\xb8\x61\x94\x4a\x51\x79\x1c\x48\x73\xa0\xdc\x90\xe8\x12\xe6\xc1\x62\x22\x3e\x77\xa0\xd9\x07\x15\x3e\x4b\x2d\xf4\x09\x13\xa1\xc3\x53\x66\x51\x65\xfb\x2e\x54\xbf\xc5\xd7\x35\xac\xe9\x3c\xd1\x62\x0b\xe4\x2e\x03\xf4\xa8\xa6\xc0\x20\x01\xee\xc3\x9f\x27\x39\xfd\xba\x84\x95\x69\xad\x8d\xb7\x72\x12\xda\x5c\x81\x4a\xc5\x38\x79\x96\x6e\xbc\xe5\x28\xb4\x49\xb3\x11\x88\xc5\x6a\x68\xe9\xd7\x7e\x1d\xa3\xf2\x6f\x05\xb6\x27\x4b\x06\x05\x58\xdd\xbf\xc6\x6e\xa4\xfa\x8b\xa6\x7e\xa8\x7b\x75\xda\xfe\x6b\x60\x8e\x72\x52\x91\x6a\xc8\xee\xbc\xba\x77\x95\x13\x8f\xd4\x56\x94\x8c\x10\xf4\x8b\x6d\x3d\xa6\x81\xb9\xe9\x1d\x50\x40\x5c\xb8\x16\xa4\x5f\x1e\x5c\xc4\x16\x14\xc6\x07\x7d\xe2\x25\x0c\x77\x08\x05\x71\x0d\x40\x90\x8d\x65\xad\xd7\xc4\xb6\x1f\x9c\x53\x0b\x0a\x9e\xd4\x3c\xd9\xd1\x18\x1b\x3b\x8f\x06\x47\x05\x07\xd3\x53\x2b\x8b\x74\xb8\x48\x50\x2b\x3c\xde\xad\x37\x0a\xa4\xc6\xcd\x74\xd0\x6a\x14\x43\x63\xc3\x1d\xf9\x8c\x81\x5d\x11\x0f\xe8\x37\xb4\x65\x41\x74\x87\xe3\x22\xf8\x93\x39\xfa\xed\x0a\xd4\x5b\x00\x6e\xa0\x17\x07\x90\x97\x2b\x76\xa1\x29\x19\x83\x8b\x2b\x20\xec\x00\x5f\xa8\xb8\x76\xdf\x18\xaf\x9e\x85\xc9\xe6\xf1\xe2\x34\x5b\x28\x3c\xa5\x1c\xf6\xd2\xc8\xbe\xae\x14\xf1\x2f\x9c\x46\x3a\x61\xae\xbd\xe2\xbd\xe2\xac\xa7\x20\x28\xac\x09\x50\x4f\xe3\x9d\x7d\xc2\xde\xac\x60\x9d\xfa\xa4\x57\x7c\x79\xc6\x2d\x3b\x0c\x14\x2f\xae\x60\xa4\x17\xe6\xd7\x18\x93\x7e\x9c\xbf\xd0\xbe\x7f\xdc\xb9\xb4\x0b\x7d\xd3\x8f\xd3\x5d\x94\xf4\x63\x7f\xf2\xb2\xd3\xb1\xa8\x85\xf5\xac\xd3\xa8\x75\xa1\xca\xd8\xff\x9c\x30\xfc\xd0\xcf\x60\x7b\xfe\xe9\x87\x7d\xc7\x0f\xf6\x49\xd9\xb3\x11\xbf\x89\x4e\xa7\xd7\xd3\x54\x08\x46\x38\xda\x95\x70\x59\x42\xfe\xaa\x79\xfb\xaa\x32\x80\xc8\x70\x91\xaf\xaf\x5a\xbe\x6a\x71\x8b\x5f\x71\xc0\xa5\xb8\x15\xcf\x3e\x4a\xf5\xa2\x4a\xa3\x98\x5d\x22\x25\x63\x15\x5f\x39\xb5\x2f\x4a\xc8\x1e\xde\x19\x3d\x0d\xb0\x55\x01\x4b\xfc\x09\x20\x08\x00\x72\x71\x17\x30\x2d\x25\xc5\xf5\x08\xfd\x5b\xdb\x46\x25\xd3\x0f\x56\x28\x4b\x01\x82\x4c\xd5\xc3\x6d\x9d\xd3\x7f\x4e\xfd\x1a\xb2\xb8\x80\xf7\xe2\x6e\x77\xaa\x4b\xf3\x1c\x35\x8e\xa7\xce\x8b\x2e\xa4\x0a\xe5\x4d\x67\x84\x7d\x18\x15\x0e\xd5\x44\x00\xee\xaa\xab\x54\x5c\x2c\x78\x0d\x84\x1e\xd6\x91\x73\x3d\xf9\x18\x1f\x84\xe2\x50\x14\x54\xed\x38\x19\x17\x93\x3d\x40\xe1\x46\x0c\x08\xeb\xaa\xc0\x5b\xea\x50\x70\xca\x68\xd8\x9b\xb7\xea\x5a\x9c\xbe\xbc\xda\x91\x6a\xf5\xcc\x6c\x1d\xec\x60\x18\xa1\xad\xe9\x53\x62\xc4\x41\xfd\x04\x52\x7f\x1e\x0f\x91\x2f\x48\xa7\x5a\x01\x56\x7d\xd9\x9d\xc4\xf2\xf8\xe2\x45\xd1\xea\xc9\x8e\x77\x31\xa2\xff\xb2\xeb\xa3\x85\x0e\xd5\x24\x30\xe9\xea\x7f\x30\x0d\x7b\xca\xfa\x75\x83\x9b\x70\x2e\xa7\xfb\x65\xbe\xf4\x0b\x24\x8a\xde\x20\x51\x5c\x88\xbc\x5c\x02\x48\x47\x74\xc1\xde\x2b\x55\x5e\xcb\x38\x44\x76\x19\x82\x34\xfb\x42\xe4\x7d\x11\x82\x28\x30\x16\xc7\x62\xb5\x2c\x12\xda\x07\x2e\xb2\x56\x3c\x76\xeb\xac\xc2\xc4\x86\x80\x5c\xbb\x56\x87\xaf\x2f\x0b\xf1\xba\xbc\x46\x5a\x50\x87\x6c\x75\x57\x8a\xbc\x3f\xa0\xb8\x2b\xdb\x7f\x39\xf5\x6f\x09\x27\x6b\x2d\xc7\xab\x24\x56\xa5\x0b\x6b\xc4\x3a\x59\x14\x72\x90\xee\x8c\x4d\x44\xfd\x8a\xff\xda\xb8\x87\x68\xf0\xf4\x17\xcc\x27\x67\x49\x8e\x6a\x4a\x7d\xc6\x3b\xe9\x9d\x53\x7f\xee\x5e\xc1\xa5\xbf\x55\x1d\x46\xde\x13\xce\xed\xb5\x71\x67\xb8\xc6\xcf\x6e\x10\x9f\x54\xdb\xfe\xd8\x5e\xff\x63\x53\xff\xda\xfc\xce\x5f\x1e\x7c\xc4\x91\x4c\x3a\xed\xe9\xc6\xce\xb7\x0f\x8b\x12\x96\xee\x98\x67\xb3\x3e\xcf\x4b\x81\xc3\x15\x7c\xf3\x57\xad\x7c\x4f\xac\xb4\x9d\xd2\xe1\xb0\xf7\x33\x3e\x7b\xf3\xea\xcc\xe4\x85\x8f\x2c\xf4\x78\x7b\x8b\xc3\x43\x89\xbb\x8f\xee\xec\xb1\x29\x9d\x56\x0a\x8c\x3f\x07\xbc\x7d\xc7\x7e\x82\x3d\xcf\x1f\xbe\x58\x29\x3d\x7c\x99\x3f\x2d\x7e\xb2\x0f\x16\x6a\xd8\x3f\x92\x0f\x7e\x4a\xce\x23\x9c\xf5\xf3\xff\x9f\x81\xcf\xf6\xa3\xa8\xbf\x00\xd2\xd9\x1e\x18\xde\x25\xbd\x66\xc6\xbc\x6e\x77\x77\xa4\x1a\x52\x82\x77\xbb\xcd\x1b\x9c\xbd\xaf\x40\xa6\x5d\xbd\xf2\xdf\xc1\xcf\xb0\x8e\x7a\x1c\xce\xf9\xaf\x13\x5a\x4c\x53\xe4\xba\x8d\x65\x93\xee\x85\x01\x56\xa3\x5c\x33\x27\x1e\x9f\x8e\x6b\x56\x8c\xed\xc5\x04\xd5\xfa\xf9\xbf\x62\x5f\x69\x09\x9c\xae\x7e\x94\x2b\xf8\x73\xf2\xee\xe4\xc2\xa1\xc2\x1e\xe8\x39\x62\xaa\x77\xe3\x00\xa6\x75\x76\xd3\xd6\x91\x64\x32\x16\x4a\x8b\xae\x28\xa6\xe2\xf4\xf4\xd9\x15\xf8\xa6\x9d\x32\xf7\x98\x4d\x74\x8b\xe1\x74\x3c\x9f\x38\x59\x4c\x8e\x71\xdd\xf5\xc0\x3d\x3a\xca\x4d\xee\x2c\x95\x57\xda\xcb\xa4\xc5\x0f\xab\x76\xaf\x96\xf1\x57\xfb\xcc\x30\xf0\x73\x86\x89\xc5\xfc\x69\xf7\x38\x69\x75\xcb\x4a\x5c\x19\x19\x02\x66\xaa\x2d\xd9\x47\xff\x51\xc3\xb3\xcf\x35\x6c\xb3\x45\xf8\xf8\x3b\xc5\xcd\xc2\xc9\x29\x7e\xe4\x18\xae\xb2\x9f\x9d\xde\xee\xf3\xef\xdb\xb2\x28\xa7\x7b\x78\x32\x57\xb1\x5c\xd2\xda\xe3\x86\x77\x5b\x3f\x33\xe8\xb3\x41\xb4\xe5\xae\x10\x1d\x86\x83\x0f\xab\xa9\x47\x6d\x9b\x8a\x2e\x84\xdd\xfd\xb7\x3b\xdb\xcc\xce\x1d\x1b\x1f\x70\x00\xd6\xbc\x45\x8e\x66\xbd\xf7\xa5\xb8\xcc\x83\x0d\xc5\x65\xff\xeb\x95\xaa\xb4\x07\x74\x2b\x4a\x76\x24\x80\x1c\xa5\x44\x41\x59\x55\x69\x8a\xde\x9b\x52\x70\x63\x8a\x66\x80\xe4\x05\xc6\xb4\x7c\x1f\xba\xae\x63\x58\xc7\xfa\xdc\x62\x4d\x02\xee\x83\x66\xff\x96\x66\xad\xd4\xfe\x29\xae\x99\xa4\xd8\x28\x27\x36\xbd\xfa\xce\xe0\x18\x66\xbe\x61\x60\xb1\x82\x0a\x35\x62\xea\x70\xfd\xdd\x07\xf5\x91\x35\x78\xd2\xc2\xec\xaa\x0e\xe6\xdf\xfe\x66\xa9\x7f\x27\xca\xc1\xaf\x93\xe6\x54\x21\x5e\xea\x15\x98\xf7\x95\x16\x2c\x57\x17\xde\xa2\x30\x84\x11\xf2\x6f\x22\x73\xd1\x2f\x06\x32\xd5\x1e\xa1\xfa\x27\x57\xe4\x05\x5c\xd0\x8c\x11\xa4\x07\x4c\xf5\x01\x0f\xa5\x53\x6b\xf2\xee\xe6\x37\x5c\xab\x53\xd0\xad\x18\x50\xa5\x89\x45\x01\x01\x5a\x0f\xbd\x43\x7a\xfc\x22\x73\x63\x58\xac\x9e\xc5\xe2\x37\xbf\xda\x1c\x95\xa3\x95\xf7\x87\xae\x12\x15\x3f\xad\x8f\x16\xaf\x9b\x03\x02\xb8\xa4\x5d\xbc\xc7\x12\x5b\xf1\x0f\x77\x80\x24\x3a\x38\x1c\x26\x34\x42\x13\x63\x62\xfb\xc1\xc5\x3f\x29\xd9\x7b\x2e\x6a\x90\x72\xb3\xad\xe0\xda\x42\x88\x35\x1e\x6a\x89\x06\xe0\xee\xf2\x71\x9b\x72\x9c\x02\x9b\xbf\x74\x31\x0f\x28\x91\xf2\xbb\xc6\x05\x3b\xa0\xe9\x3b\x4b\x03\x4e\xb0\x82\x68\xc7\x27\x90\x41\x02\x50\x2c\xf5\x10\x6a\x55\x6b\xaf\xf8\xec\xfa\x28\x25\x78\x57\xca\x96\xe6\xf3\xc1\x9a\xe5\xf3\xe8\x9b\x7c\x4e\x11\x3a\xf8\x86\x78\xd5\xa6\xb1\x7a\x54\xb4\xf8\x3b\x63\xee\xf7\xa5\x87\x77\xc5\xd4\x52\xe6\x12\x25\xa9\x95\x90\x60\xcb\x33\xa4\xf1\xdb\x61\x77\xa0\xf8\x6f\xae\x51\x17\x2f\x9c\x88\x30\x61\xaa\x41\xc1\xad\x5e\x67\x47\x80\xef\x33\x9d\xde\xc5\x2d\x5d\xef\x15\xc2\x46\x80\x10\x1b\xdc\xc6\x66\x17\x58\x64\x9c\x0a\x06\xbd\xf2\x0a\xa0\x6f\xb6\x19\xa7\xc9\x35\x0e\x65\x10\xf4\x4c\x45\x09\xee\xc7\x0e\xb8\x15\xd3\x9d\x15\x90\x94\xd0\xdb\x85\xf3\xb0\xb0\x98\xd4\x49\x54\x81\xf8\x8f\xc7\xd2\xb8\x00\x9d\x81\x85\xc5\x6c\x3e\xb5\xb4\xc5\x82\x73\x79\xa0\x0f\x25\xe9\x12\xf4\x30\x97\x80\x74\x25\x1c\x42\x4a\x48\xe2\x32\xa5\x64\x69\xd1\x9d\x06\x98\x67\x4b\x8b\x9d\xea\xd4\x23\x2c\xad\x72\xf0\x16\x84\x7f\x57\x35\xf3\x4d\x5a\x1c\x97\x57\x4b\x90\x59\x35\xcb\x5b\x20\x24\x4e\x80\x0f\xdb\x21\x87\x93\xfd\xfd\x60\xd3\x70\xd9\x2d\x35\xd8\x7e\x02\x4d\x71\x42\x69\x77\x8d\x59\xb3\x1d\xc7\xc6\xcc\xa6\x1f\xc3\x32\x8b\xcf\xc3\x59\x62\x9b\xd6\x37\x0b\x62\x3d\xd2\xfe\xee\xb6\xb6\x76\x62\xcc\x5b\xe1\x65\x0e\xae\x14\x59\xa5\x88\xa7\x84\xa6\x5c\x79\x6d\x03\x98\x61\xad\xab\x06\x61\x3d\x4a\xd2\x6a\x20\xf0\x72\x75\x82\xf6\xc7\x93\x26\xbb\xde\xd0\xef\x8f\x04\xb4\x1d\x12\x61\xb8\x11\x6b\x88\x03\x53\x58\x9f\xb6\xda\x10\xd6\x53\x63\x29\x33\xba\x46\xbf\x53\x55\xa2\xd5\x75\x2d\xa9\x87\x2b\x1f\x02\xbc\xd9\xdb\x63\xb0\x0c\x1b\xfb\xda\xf0\x57\xe3\xb2\x84\xad\xd1\x53\x3b\xc4\x57\x64\x42\xae\x01\x79\xcc\xea\x02\x23\xe8\xf5\x44\x9b\x21\x7c\x4d\x91\xf0\xd2\x78\x3c\x4e\x23\x85\xb4\x2f\x67\x0a\xd3\x52\xf6\xa5\x37\x31\x1c\x14\xd4\x3a\xc1\x43\x83\xff\x53\xe2\x0f\xbd\xf0\x49\x50\x51\xb4\x3b\x9a\x3a\x0f\x08\xbb\x2a\xa5\x99\x9e\x38\x29\x77\xbb\x4a\xd8\xcf\xf7\xea\x2d\x94\xfd\x7c\x67\xda\x5a\x9c\xf6\x44\x33\x2a\xf1\x4a\x6d\xdf\xaa\x33\x94\x02\x3a\xf7\x56\x46\xa3\xc4\xed\xbf\x12\xba\x94\x12\xfa\xb1\xc5\x12\x42\xda\xe6\x34\x09\x0b\xf5\xb4\xa8\xf9\xf0\x84\x09\xe1\xbd\x97\x09\x39\x6b\x5b\xe7\x42\x4b\x7f\xa1\xb3\x86\x16\x53\xeb\x1d\xd1\x19\x78\x9f\x07\xd5\x58\x4b\x1f\x2f\x09\xb0\xe0\x12\x4e\xcb\xc7\x33\x2d\x5a\xc8\xd6\x22\x2e\xa7\x35\x9d\x33\xae\x70\x79\xab\x90\x3d\x0f\x10\xfb\x2d\x68\xf6\x5c\x73\x23\x25\x23\xb9\x1c\xba\x45\x49\x9a\xa1\x97\x79\x79\x69\xad\xbe\xd2\xd6\x93\xa8\x27\x78\x14\x68\x5a\xf4\xac\x47\x19\x13\x2e\xf5\xd6\xba\x77\xb4\xfe\xc5\xc7\x5f\x0d\x1f\xfc\x5a\xfc\xcd\x3e\x12\xac\x96\x79\xec\x16\xa6\xaf\x3e\xb1\xef\x93\x31\xc7\xb9\x4f\xab\xbd\xf8\xb7\x6f\x5c\x17\x3e\xa9\x28\xf4\xc9\x7e\x5c\x28\x53\x24\xa8\xe8\x7f\xcc\x58\x54\x24\xca\x07\x81\x61\x25\x9e\xd7\x06\xc0\xe7\x94\x36\x82\x9e\xd0\x2c\xec\xa2\xb3\x3b\xaf\x50\xe9\x30\xbb\x52\x4d\x94\xe7\x7a\x53\xc8\xfe\x94\xe9\xbf\xc5\x90\x0f\xf6\xf5\x3c\xcc\x87\xb3\x3c\x1e\x89\xd2\x7a\x36\xde\x42\x05\xa3\x5a\xf1\x02\xdf\x2a\x95\xd8\xf5\x60\x02\x18\x43\xa1\x14\x41\xc2\x78\x7a\x4b\x19\x0b\x52\x4f\xbf\x96\x80\x53\x2b\x20\xca\x9e\x81\x14\x2d\x4b\x85\x34\xd5\x3b\x2a\x21\x57\x0b\xab\xbe\xd9\x89\xe4\xfa\xc6\x4e\x56\x09\xf9\x15\x20\x4e\x60\xc3\xa0\xa0\x8a\x17\xb7\x51\xfa\xc7\x33\x9e\x5f\x78\x3b\x60\x5d\x0f\x67\x4d\xf9\x3e\xdc\x0b\xf4\xe9\xc2\xe6\x9f\xce\x96\xc0\xc5\xc6\x5b\x03\xe0\x9d\x18\x25\xdc\x69\xad\x6e\xb4\xcd\x5b\x7b\x71\x11\x6b\x10\xb7\x9b\x37\x78\x29\xfc\xa5\x37\xb5\x9f\x07\x15\x26\x30\xce\x38\xe1\x60\x51\xe8\x6f\x41\x74\x86\x75\x14\x7e\x56\x17\x13\x8b\x10\x88\x71\xb3\x93\x90\x8a\xe8\xf0\xd0\xc6\x01\x85\x53\xaf\x88\x95\xaa\x6a\xab\xad\x8c\x78\xd5\x16\x38\x2d\x38\x11\xb3\xcd\xb4\x8b\x0d\x4a\xa8\x57\x9b\xef\x30\x80\xd6\x85\x26\x52\x10\x53\xdb\xcf\x15\x1b\x44\xbe\x7c\xb3\xc4\xbe\xe7\x8b\x02\x8c\xbd\x3a\x64\x75\x10\x68\xb9\xf4\xcd\xd8\x26\x2e\x6a\x26\xe4\x58\x12\x11\x96\x8d\x46\xa0\x52\xaf\xc4\xe8\x79\xf1\x3e\x09\x61\x02\x0e\x73\x60\x30\xc0\x56\x41\x5a\x0f\xce\xf7\x04\xe0\x8c\xd7\x17\xda\x78\xda\xb8\x36\xaf\x90\x51\xd3\x9e\x27\x85\x27\x3e\x0d\x1a\x63\xce\xa1\x12\x7a\xda\x44\x11\x3f\x51\xe9\xb2\x24\xaa\x97\x08\xc5\x6c\x81\x9a\x2c\xd0\xd5\xdf\x4c\x22\x48\x17\x8f\x33\x11\xb0\xdc\xd2\x85\xf3\x84\x22\xa3\x59\x3f\x99\xfa\xb9\xb5\x92\x2e\x94\x7d\x82\x18\x95\xe2\x76\xfc\xe7\x75\x70\x55\x8f\x18\x16\x77\xf3\x85\xaa\xc4\x96\xd2\x5d\xd5\x5d\x76\x3e\xb1\x98\x08\x99\xb7\xd9\xb1\x38\x58\xb7\x52\x1e\x6e\x0e\x77\xea\x55\xd7\x05\x87\x40\x4f\x56\x6e\xc1\x7a\x53\x15\xf0\x6f\x32\xff\x31\x7e\x53\x2f\xa0\xa8\x62\x40\x2f\x6d\xe5\x7f\x67\x9e\x4a\xef\xd0\xaf\xa6\x07\x9a\xb7\xb6\xbb\x2f\x28\x3b\x68\x08\x01\xea\xde\x49\xca\xfd\x48\x5d\x49\x2c\xe4\x7a\x64\x5b\x89\x4a\x55\x97\xaf\x93\x2e\xeb\xa4\xfa\x46\xb6\xb6\xc5\x6d\xd8\xaf\x14\x88\x66\x01\xaa\x5b\x83\x64\x54\xb3\xa3\x33\x6c\x48\xe0\xba\xf5\x98\xf9\x93\xed\x5a\x19\xe0\xc7\xdc\x2b\xb5\x1d\x71\x6b\x71\x55\xd7\xcc\xe1\x96\x8d\xe5\x4c\x23\xe9\xa2\x63\x6a\xf7\x8d\x0d\xf1\x92\x1a\x12\xd2\xbe\x69\xea\x25\x45\x02\x35\xd1\xed\xdb\x33\x21\x58\x0c\xe0\xe5\xcf\x85\xbb\x99\x20\x9d\x27\x92\x7a\xd0\x74\xde\xd7\x38\x4d\x6c\x68\xa3\x0d\xf2\x60\x5b\x79\xe3\xae\x80\x4d\x0f\xa6\x08\x36\x1a\xf4\x3f\x66\x86\x3e\x81\x45\xc0\x6d\x80\xb6\x36\x6b\xf5\x0a\x11\xd2\x86\x73\x26\xa5\xf9\x8f\x0b\x8e\x4a\xfb\x3f\xb6\xae\x74\xfb\x5d\x96\xd7\x7e\xf7\x2e\xa9\x52\xe5\x5f\x04\x1f\x06\xfd\xd9\xab\x3f\x2b\x3b\x01\x62\xdf\xb3\x56\x0b\x3b\xc8\x3c\x86\x29\x58\xcf\xf1\xae\x2d\xdf\xea\xfb\x6d\x59\x43\x3a\x2b\x82\xe1\xba\x50\xc1\x81\x54\x2f\x35\x89\xf0\xce\x99\x84\x4b\x14\xa4\x32\x3b\x4c\xa0\x34\x9d\xe3\x47\x48\xb8\x36\xe0\x61\x8f\xef\xfc\xa5\xba\x67\xec\x0b\x12\x0c\x7d\x6c\xaa\x34\x21\x16\x24\x0b\x17\x00\x32\x8e\x55\x6c\x6a\xd4\xf0\x69\x5e\x8b\x60\xe2\x54\x43\xb0\xa2\x8b\x47\x32\xc5\xad\x78\xd7\x0f\xa0\xb0\x3a\x96\x5c\x6a\x2e\x2f\xb9\xaa\x82\x2b\x2b\xb6\xe9\xd2\x7c\xd5\xb7\x31\x7a\xd4\x7e\xf0\x92\xe1\x3a\x08\xb5\x80\x51\x65\x11\xb9\xe6\x72\xc5\xfe\xa2\x19\x68\x84\x8c\x96\x53\xf5\xc9\xa3\x74\x0f\xbf\x6e\x30\x86\x37\x57\xc5\xfb\x30\x6f\x6f\x4e\x6e\x57\xf7\x61\x42\xcc\x3c\xe9\x69\xb8\xf5\x6b\xf7\x61\x52\x96\x53\x86\xe9\x3e\x70\x34\x93\x75\xf7\xed\x46\x7c\xff\x28\xdd\x07\x4e\x16\x01\xf2\x49\x9c\x84\x59\x17\x9f\x2d\xc9\xd4\xb3\x67\x93\x96\xb8\x43\xb7\x27\xde\xc1\x62\x48\x9d\x60\xa6\x01\x56\xf4\xcc\x76\x5c\xa1\x91\x36\xbb\xa9\xe4\xcf\x54\x72\x64\x58\x03\x04\xce\xe6\x9a\xea\xea\xa6\x52\xa7\x52\x71\xa6\xb9\x1a\x96\xdc\x5c\x5f\xf4\x07\xc0\xe6\x4c\xc5\x03\x0f\x94\x09\x90\x5c\x57\x5f\x36\x80\xcf\xaa\xf2\xd5\x26\xcc\x82\x00\x1e\xef\x23\x0c\x93\xef\xd3\xc4\x69\xf8\xfb\xe9\xd7\xb9\x9a\x03\x37\x93\x5f\x1b\xdf\x11\x3c\xf6\x98\x1b\x46\x19\x10\xd1\xe3\x2b\x87\x60\xea\xcb\xbd\xed\x1f\x74\xaa\x88\xf5\x85\xe5\x84\x3a\xe6\xff\xb5\x3f\xe0\x40\xc8\xb2\x86\x15\x99\xfa\xaa\x72\x2d\xba\xce\x5b\x25\xab\xdc\x31\x54\xbe\xb9\x52\xe7\x48\xff\xa9\xd4\x37\x45\xe4\xfd\x86\x82\x2f\x6f\x56\x60\xf9\x5d\x36\x91\xbd\x5b\xdf\xbc\x52\x5a\xf9\xbd\xb4\x52\x79\x8e\x55\xd7\xe4\x3e\x53\xa9\x54\x40\xc2\xb0\x52\x4e\xca\x81\x07\x8e\x92\xa7\x16\x41\x6a\x93\x6d\x40\x98\x4f\xac\x54\xcf\x36\xbc\x7b\x59\x80\x8b\xaa\x4f\xdd\x5f\xde\xbe\xa8\x3b\x01\xe2\x89\x7a\x95\xb5\xb6\x3a\x2e\xff\x56\xb9\x0a\x51\xf7\x21\x32\xab\xb6\x7b\x08\xb5\xdf\x43\xa8\x6d\x2f\x95\xaf\x9c\x55\x2c\xbd\xd5\x1d\x63\x0a\x7a\xa3\xba\x1f\x3c\xf6\xd4\xbd\xfa\x22\xda\x38\x7d\x44\x24\x71\x22\x95\xaa\x6d\x55\x6b\x9d\x35\x2c\xe8\x4b\x6a\x58\x50\x21\xe1\x45\xb0\xda\xc2\x10\xaf\x5c\xb1\xfc\x56\x83\x95\xab\x02\x15\x42\xd7\x6b\x58\xf9\xe9\x6b\x46\xd4\xc0\x00\x68\x2c\x66\xc0\xdf\x98\x76\xb3\x11\xad\x99\x7a\xd6\x51\x32\x10\xc3\x5e\xe5\x2c\xa6\xf4\x6a\xd0\x38\xe0\x20\xc3\x4a\x0d\x81\x72\xe1\x80\x50\xf9\xda\x2e\x38\x56\x70\xe0\x72\x22\xa8\xa6\x17\x2a\x5a\xc2\x83\x68\xa4\x5b\xef\xf9\xe1\x5b\x22\xb0\x74\xc0\xb5\xa2\x11\x62\xad\xe5\x3d\x21\x49\x76\x7a\x71\xd6\x26\x9c\xdd\xaf\x90\x36\x41\x2a\x78\x43\x00\x79\x94\x16\xc4\x5b\x82\x80\x18\x02\xe1\x67\x89\xfc\x67\xc5\xf1\x01\xd1\xbb\x84\xf0\xcc\xf1\xc3\x31\x5b\x69\x63\x5a\x4d\xb8\x3b\x5c\xd3\x1b\x4a\xeb\x1b\xd2\x9b\x1b\x91\xbc\x19\x4d\xa0\xc7\x7a\x1d\xb1\x5e\x39\xe3\xd3\xca\x31\xe0\xba\x95\x3e\xf6\x16\x8d\x47\x91\x9a\x76\x9b\x50\x36\x69\xc7\xa2\x72\x4d\xc1\xbc\xd0\xf9\x12\xc2\xa3\xaa\x80\xfc\x02\x25\x20\x1f\xe2\x04\xa0\x61\xbc\xb2\xec\x68\x68\xf0\x3c\x6c\xd8\x09\xa9\x49\x8a\x35\x05\xb4\x9f\x14\x24\xf0\x80\xe3\xee\xa4\x4b\x30\xcc\x47\xd4\x14\x0e\xac\x20\xd4\x14\x72\x94\xb0\xf2\xc1\x99\x1e\x32\x5f\x83\x02\xe2\x5e\x21\x05\xd9\x99\xac\x29\x54\x0e\x00\x6f\xbe\x23\x9d\xe1\x4a\x90\x2f\x59\xd3\x61\xe5\xb0\x2d\x41\xd4\xdb\x74\xb8\x52\x17\x36\x41\x56\xfd\x57\xf9\x74\x5f\x65\x79\x64\xd0\xf8\x04\x56\x4d\x49\x4e\x1f\xd5\x54\x7c\xd3\xf8\x24\x1c\xe0\x02\x8e\x02\xb0\xb9\x28\xd4\x78\xba\x05\xf8\x77\x5a\x0a\x27\x63\xb6\x50\x33\x0e\xb6\x55\x1a\x29\x6a\xe6\x2e\x2d\x67\xb3\x41\x43\x3f\x9a\x33\xe7\x6b\x86\x44\x3f\x68\x70\x90\xd1\xde\x31\x54\xd7\x62\x79\x9d\xbf\x16\x1b\x0c\x65\x72\x71\x91\x87\xa3\xca\x55\x8e\xa5\x9b\x11\xc8\xa8\x2d\x05\x15\x04\x83\xd0\x1f\x8e\x63\x56\xa2\x6f\xf0\x75\x97\x61\x19\xf3\xac\x27\x02\x54\x70\x97\xac\x44\x5f\x86\xaf\x81\x5c\xe6\xe6\xc7\x1f\x85\x8d\x21\x55\x2a\x25\x3f\x0d\x5a\xf0\x7a\x67\x82\xfe\x65\xdd\x9f\x56\xb4\x3d\x76\x80\x09\xd2\x65\x43\x81\x13\xe2\x12\x2f\xc7\xb7\xcc\x2f\x07\x96\xf5\x6a\xb7\x0b\x2f\xc7\x2a\xc5\xc6\x09\xa3\x7d\xb9\x20\x1b\x3e\x78\x2d\x13\x2a\x2c\x85\xb7\xe7\x83\x74\x17\x5e\x8e\x22\xed\x23\xbe\xb4\x7b\x51\x97\x4b\x62\xc2\xa1\x2a\x8e\x88\x08\xfe\x54\xe0\xb6\x1d\x8c\xbc\x28\xde\xf1\xcd\x50\xfa\x9a\x4b\xd8\x90\x7b\xe6\xd5\x9e\x7b\xc6\x81\xeb\x9b\x8c\xd6\xa9\xdc\x54\x8b\x6f\x04\x74\x7b\x16\x89\x71\xcb\x20\x79\xf3\xd5\xba\x7b\xc7\xb1\x1f\x68\x98\x84\x31\x82\x3c\x37\x81\xae\x41\x9a\x2d\x01\xdc\x53\xb9\x8f\x89\xcf\x17\xdf\x07\x9e\xf8\x24\x7d\xc6\x39\x88\x1b\x52\x17\x05\x50\xab\x4d\xb0\xde\x6f\x04\xdd\x47\x97\xca\x2b\xe2\x70\x9b\x69\x93\x8c\xab\xa4\xe2\x0a\x14\xe3\x4d\x8e\xb2\x13\x92\x09\x12\x60\x16\x43\xcc\x69\x59\x47\xda\x80\xa8\x19\xf2\xab\x5e\xd0\x44\xaf\x70\xd1\x4f\x6e\x33\xe4\x2a\x44\x98\x6d\xa9\x6d\x5e\x10\x1c\x23\xf7\x11\x03\x64\xd7\x11\xa1\xf4\xe3\xda\xf7\x38\xae\x7d\x8f\xe3\xda\xf7\xd1\xe3\x7b\x4d\xe5\x6e\xcb\x63\x77\x32\x41\xc9\x08\x17\x12\xbc\x23\x63\xb0\xcf\x0c\xbf\x1d\xca\x7d\x2e\xc6\x6d\x68\x05\x75\xb3\x4e\x01\x26\xf8\x11\xa1\xcc\x72\x49\x04\x77\x7f\xf9\xb6\x3b\x43\x06\x65\x4b\x0e\xdb\x41\x37\x95\xf0\xd7\x2c\x0b\x31\x22\x5f\x2a\xd5\xaf\xb0\x9f\x5f\xb0\x9f\xc4\x7d\x7e\x1b\xf7\xf9\x15\xee\xf3\x2b\xdc\xe7\xb7\x71\x9f\x5f\xb7\xef\x54\x7d\xbe\x8e\x7e\xdb\x54\xa7\xfa\x72\xb6\xdc\xa4\xfd\x57\xe5\x60\xf1\x54\xe7\xa9\x52\x29\x55\x88\x29\xaf\x4b\xa4\x3f\x8f\x85\xf5\xcd\x99\x55\x57\xe3\xdd\x54\x57\x51\x90\xce\xba\xf6\xd9\x66\xdd\x3c\xf9\xb3\xd5\x54\xa7\xea\xa6\xea\x42\x31\x7c\xbd\xad\xba\xe2\x0d\x4e\x04\xd4\x0f\xa5\xb6\x7e\xe8\xef\xee\x48\x5a\xf5\xd6\xdb\xa9\xc2\xad\xa7\x46\x0e\x95\x8b\x19\xb0\x65\x69\xa5\xf9\x2f\xa9\x90\xf1\x5f\x79\x3f\xb3\xfa\x40\x66\x21\x26\xb3\x50\xb7\x56\x7d\xc4\x2e\xc5\x3d\x55\x8f\x66\x5b\x7d\x71\x70\x46\x9a\x08\x1c\x16\xa2\xee\x8c\x68\x44\x76\xb8\x90\x59\x7d\x89\xa4\x40\xb0\x60\x49\x0e\x02\x65\x41\xbf\x1d\xf5\xd1\x02\xbd\x78\xcc\x18\x6b\x4e\x9a\xe2\x98\x97\x64\xa8\x1c\x04\x14\x06\x78\xb4\x47\x6c\xef\xb6\x98\xbe\x2e\xcc\x26\x6e\x4e\x5d\xa0\xd2\x30\x91\x52\xe8\x34\x8b\xf5\x79\xd2\xb7\xd0\x38\x3e\x37\x3c\x14\x52\x7c\xd3\x6f\xf8\xb3\x81\x95\x2f\x99\xe5\x42\x09\xa6\xa1\x9d\x61\x17\x68\x0f\xf2\xe4\x65\x5e\xc1\xa9\x92\x83\x4a\x7f\x61\xda\xeb\xfe\xb2\x9e\x55\xd8\x03\x20\x4e\x99\xa5\x15\xd4\xfd\xe5\xfa\x8a\xab\x10\xe4\xc7\xfe\x4a\x86\xd5\xd5\x36\xbd\x17\x3a\x18\x61\xcf\xdf\xb1\xb5\x5a\x77\x67\x3e\x53\xdd\xbd\xa9\x14\xc4\x41\x7f\x47\x31\xdc\x29\x13\x82\x21\x4e\x4d\xe6\x8c\x44\xfd\xb3\x73\xe9\x44\x4c\xfd\x70\x12\x91\x39\xa6\x43\xe6\xad\x20\x8b\xdd\xbb\x40\x62\x36\x48\xa6\xbf\xcc\x4e\x06\x35\x2b\xe7\x33\x9e\x77\x97\x51\x62\xd0\xfe\xc7\x02\x8d\x0b\x4c\x8c\xa3\x43\xa0\xf9\x29\xfe\xff\x31\xd0\xee\x89\x3f\x37\xe5\x11\x66\xed\x62\xb3\x99\xcc\x25\xee\x23\x86\xf3\x7f\xd5\xa9\x13\x58\x64\x92\x20\x94\x47\x25\x6b\x31\x14\x4d\x4d\x29\xeb\x8b\x3d\x7a\x76\x2d\x9b\xd5\xe9\x5d\x76\x97\x74\xf4\x16\x3e\x0c\xa5\x0c\xe2\xf3\x7b\x4c\xfc\x3a\x3c\xe1\x14\xdd\xf0\xf7\x34\x10\x3f\xac\xe3\x74\xda\x50\x6a\x7a\x9a\x34\x39\xab\xa0\x5c\x1e\xa9\x7c\xbf\x75\x38\xef\xb7\x77\xba\x94\x56\x3e\x1c\x37\x22\xee\xfd\xa3\xdc\xa8\xf5\x6a\xf7\xbb\xf9\x0e\xc7\xfb\xcb\xad\x55\x45\x63\x7f\xb9\xa2\x33\x6f\x77\x0f\xa7\xe3\x20\x70\xa3\xd4\xc7\xa8\xd3\xb3\xd7\xac\xaa\x65\x30\xde\xac\xea\x2b\x6f\xe8\x77\xca\xed\xe2\x65\x70\xbb\xb6\x95\xaf\x67\xd4\xc3\x9f\x8e\x1b\x0f\x6f\x5f\x1a\x9c\x89\x52\x87\xb8\x40\x5a\xe3\xb5\xdb\x03\xbb\x1f\x23\xf6\x42\x6b\x0b\x34\x57\x57\x64\xb2\xb3\x7b\xd4\x46\x32\xda\x6c\xc8\x4f\xa3\x68\xe6\x4d\xfb\xdb\xa3\x90\x16\x9d\xb3\x89\x9f\x93\x78\x78\x98\xfa\x92\x52\x0d\x26\x67\xe3\x1e\x31\xce\xd9\x3e\xda\x6f\xce\xee\xe1\x63\xce\x75\x57\x79\x8c\x03\x1c\xbd\x60\x4b\x31\x43\xd4\xf2\xa0\x87\xef\xa5\x8b\x53\x17\x42\x07\x55\xf8\x0c\xfb\xc3\xc0\xbd\xaa\x36\xa9\x50\x16\x33\xeb\x22\xc1\x62\xd9\xb0\x52\x36\xf2\xb6\xf1\x17\xca\x44\x22\x55\x59\xee\xd2\x23\x4f\x4e\xe4\x42\x8f\xf7\xf9\x93\x29\xa7\xeb\x49\x3c\x89\xcf\x52\x36\x41\x2a\x9b\xf1\xd2\xe4\x65\x46\xc4\x2e\x95\xed\xd7\xa7\xdf\x4e\xa9\xe1\x65\x94\xb8\x30\x22\x69\xde\x3c\xd2\xf7\x32\x29\xc9\x93\xeb\x44\xe4\x6d\xf8\xf3\xd2\x4f\xcc\x80\xac\x45\xb5\xf8\x97\xf5\xce\xbe\x1b\xa0\x69\x5e\x83\xa3\x04\x5f\x36\x2c\x0f\xca\xbe\xdd\xec\x8c\x57\x06\x67\xe4\x29\x31\x28\xb7\x06\x4e\xfa\xcb\xbd\xc6\x91\x23\x22\xbd\xd3\x54\x2a\xdb\x62\x60\xcf\xf3\x2b\x7c\xed\x8b\xb7\x79\xf4\x32\x2f\xbe\x7d\xa8\xc8\x9c\x55\xf2\x7c\x8c\x8b\xeb\x44\xcd\x9b\x8a\x69\x34\x59\x55\xe4\x57\xc4\x04\x42\xc5\x20\xfa\xee\x6b\x8c\xfd\xa0\x04\x51\x35\x2c\x23\x44\x1a\x0f\x74\x96\x11\xed\xb4\xbf\xb7\x72\x9a\x4c\xaf\x32\x2f\x88\xcc\xed\x84\x35\xea\xc2\x16\x1b\x3c\xca\x34\x39\xfb\x1e\xb8\x89\x2c\x01\xe1\xbd\x33\x41\xd1\x65\xe0\xf8\x51\x41\x40\x8c\x81\xef\xd9\x51\xf7\x43\x77\x9a\xb3\xf1\xfe\x41\xed\x1d\x86\xa5\x57\xdf\xd9\x34\x61\x14\xc0\xe3\x6d\xe1\x46\x7e\x07\x79\x3c\x5a\xd9\x6c\x0e\x62\x98\x1f\x06\xcf\xf0\x53\x70\xa7\xee\x8d\x67\x93\x6b\xaf\x47\xb3\x29\x76\x8d\x49\x35\xcb\xd9\x94\x2d\xfa\xd6\x2a\x67\x53\xb3\x6e\x91\xb3\xa9\x0f\xdf\xad\x51\x3d\xfb\x0c\x71\xfb\x8f\xcf\xc9\x3e\x07\xe0\xd9\x26\xbc\xa6\x09\xbf\x71\x58\x7f\x34\x5a\xa6\x47\x19\x83\x56\xbe\x6f\xc4\xd4\xab\xc2\x9b\x37\x93\xcb\x83\x68\xfe\x58\x9b\xb4\x37\xd6\xa6\x9e\xb9\x9b\xf3\xcb\xa8\x39\xf3\xe6\x4e\xe3\x75\xe6\xb0\x01\x7b\x53\x93\x57\x56\x9d\x81\x8a\x4b\x9d\x34\xc9\x03\x51\x59\x4f\x73\x75\x45\xf9\x42\x06\xfb\xcc\xaf\xa3\x34\x12\x6f\xbd\x74\x0b\x67\x4f\x35\xc1\x66\xec\x9f\x03\xe7\xec\xcd\xb8\x6d\x0d\x32\x89\x23\x4f\x03\xc0\x5b\x8f\xc7\x33\xb1\x9a\xa4\x9a\xd0\x2b\x23\xa8\x81\x4f\x9b\x3a\xc1\xfb\xf7\x35\xcc\x2c\x9e\x50\x8c\xe3\x1a\x62\x9e\x07\xa7\x36\xc7\x07\x1b\x84\x1b\x15\xbd\x8d\xf2\x7d\x0a\x45\xee\xef\x98\x1e\x05\x14\xf7\x3d\x06\x45\xc8\xcb\x45\xa7\xb6\x50\xcb\x8f\xc9\xf1\xe8\x3b\x61\x90\x5b\x46\x76\x62\xf0\x81\x64\x66\x8b\xfb\xf1\xc3\x1b\x97\x65\x3c\x03\x69\x1f\xf6\xbd\xfd\xd3\x94\xfb\x09\x4f\x06\xf6\xff\xd7\xb0\xc7\xe3\x77\xf4\x87\x19\x24\x14\x8e\x1a\x1b\xf7\xa3\x3e\x33\x84\x1a\x00\xfb\x10\x16\x1b\xf2\xf3\x5b\xbf\xab\x25\x79\xdf\x0d\x7e\xad\xa8\x3c\x0f\x4b\x9d\x75\x24\x02\x6e\x5a\xa8\x02\x84\x41\x27\x68\xb6\xa7\x02\x58\x93\xe2\x21\xe6\x18\xf2\xec\xf4\x93\x29\xcd\x2c\x86\x67\x44\xf3\xfc\x63\xc5\xce\xa9\x77\x50\x44\xd2\xcc\xcb\xfe\x58\xc1\xad\x19\x1d\xd3\x1c\xfd\x23\xa2\x39\xfa\x76\x74\x95\xe9\xe2\xb0\x82\xd7\x26\x6d\x64\x26\x4f\xe1\x3c\xfc\x91\xf7\x6d\x7e\x02\xe4\x97\x69\xb4\xff\x62\xe2\x7f\x9c\x96\xfa\xe3\xee\x37\x03\xf4\xfb\x03\xc3\x00\xbc\x3d\x11\x0f\x9e\x79\x66\x21\x06\xad\xe6\x85\x5f\x4e\x89\x8c\xea\x6e\x7e\xf2\xef\x44\x98\xba\xe4\x71\x52\x5c\x87\xc9\x06\x3a\xee\x67\xf5\x8f\xea\x87\xb3\x77\x8f\xa0\x62\x5a\xdc\xa3\xa5\xfc\x57\x6d\x29\xaa\x3f\x21\x0b\x23\x50\x10\xe3\x53\xb2\x3f\x19\xdd\x4c\xba\xfd\x54\x8f\xa2\xaa\x22\xe8\x47\x1c\x61\xd2\xa9\xfa\x98\xdb\xc2\xa0\xfc\x0f\x9d\xef\x06\x47\x2f\x16\x6b\x19\x51\x3e\xad\xee\x68\xe3\xdd\x50\x32\xef\x3e\x9d\x9d\x71\x0a\x7d\x44\x9d\x49\x89\x77\xb2\xcb\x73\x18\x49\x76\xd1\x1c\xd3\x9c\xea\x62\x15\x6e\xce\xaa\xed\x99\x83\xa2\x6f\x15\xb5\xdd\x6d\x67\x38\xbc\xa9\x2f\x3d\xaa\x56\xdf\x65\x09\x31\x85\x85\x85\x30\xd3\xd4\x5e\x3b\x7a\xf4\x7d\x18\x5d\x16\x03\x81\x52\x6c\xb4\xe0\xd1\xcc\x96\xe7\x8b\x9d\xf1\xf4\x02\x10\x5f\xb2\x63\xa8\xa7\xb5\x8b\x9d\xf5\x98\xb2\xd8\xb7\x35\x3a\xfd\x6c\xa0\xfc\x7c\xdb\xf9\xe1\xfc\x4d\x73\x83\xa7\xfd\x47\xef\x28\x06\xda\x85\x0b\xda\x3f\x17\xc6\x54\x4a\x48\x6d\x9b\xf7\x84\xe6\x1b\xc4\x3f\x3b\xeb\xb8\x50\xc7\xad\x39\x8a\xc5\x7a\xf7\xb2\x6a\x19\xa0\x1b\x68\x1f\x1f\x73\xde\xc5\x42\x52\x59\x19\x2c\x55\x37\xf9\x6a\x93\x90\x4b\x7a\x24\x53\x8c\x1e\x3e\xef\x35\x0d\x22\xb8\x87\xfd\x10\xdb\x3d\x32\xe3\x61\x70\x20\xe3\x5a\x23\x6e\xb4\x72\x71\x3c\x27\xeb\x0b\x65\xc3\xcc\x27\x79\x85\x82\x38\xe6\xfd\xd7\x20\x35\xaa\xc4\x06\x97\x7f\x35\x17\x65\x91\xb7\xc1\x3a\xee\xc6\xae\x8c\x34\x27\xe3\x76\x01\x7e\xe1\x4b\x07\x2c\xe5\xd2\x38\xef\xde\xef\x46\xa4\x57\x0b\xf0\xc5\x77\x48\x1a\xfe\x74\xb4\x77\x54\x1a\xf2\xfe\x6e\xf0\xb4\x9e\xe7\xe5\x8d\x52\xa4\xe3\x25\x57\xc6\x90\xd7\xaa\x70\x72\xb3\x90\x71\x71\xb3\xed\xb8\xf9\x1c\x4b\x89\x2d\x68\x9c\xef\xe9\x42\x3a\x19\xe0\x22\x7b\x83\x61\x6e\xdf\x21\x97\xb6\xc7\x80\x1f\x87\x6c\x78\x35\x8b\xeb\x11\x82\x3c\x18\x86\x75\x69\xc0\xf9\x11\xe3\x9a\xb2\xe9\x18\x72\x54\x59\x1e\xa8\x39\x3a\xc0\x0b\xf2\x42\x24\xbe\xd4\xd0\xa8\xd2\x50\xee\x66\xb9\xc7\x6b\x36\xb9\x7f\xaf\xdd\x82\x75\x23\xef\x66\xec\xde\x0a\xde\xcc\xde\x8b\x49\x08\x3f\x42\xde\x88\x17\xf2\x3e\x0e\x0b\xd8\xfe\x6f\x44\x8b\xed\xc6\xd3\x52\x86\xdd\x6d\x4c\x92\x76\xe2\x63\x5b\xf1\xcf\xae\xb8\xaf\x0d\x0f\x22\x49\xb9\xcc\xde\x2c\x23\x83\x67\x6f\xba\xb9\x4d\x1f\x05\x71\xa8\xa6\x09\x50\x35\xfd\x4b\x2c\x9b\x82\xca\x9f\x5a\x5a\x11\xce\x11\x8f\xd3\x84\x4e\x95\x81\x86\x83\xc8\xc2\x87\x5a\x3a\xe3\xbe\xcb\x42\x7c\x23\x7b\xbb\xf8\xe5\x69\xc4\x88\xb7\x52\x3b\xc9\x53\xbb\x1e\x68\xfc\x74\x74\x0c\x5f\xa9\x7f\x0e\xc2\x7a\xb2\x41\xca\x0a\x97\x5e\xbb\x66\xec\xc5\x0a\x54\xa6\xf1\xdd\x4d\xeb\xb0\x70\x1f\x0d\xd6\x96\x67\x35\xf9\x8e\xd2\x48\x4a\x4d\xa7\x84\xb7\x58\x33\xb7\xe8\x2e\xd6\x8c\x9a\xb3\x50\x23\x8c\x87\xea\x58\xc4\xe4\x61\xe0\xc4\x7b\x62\x0b\x20\x45\x4d\xa8\xd6\x26\x16\x97\x21\xcd\xb1\x67\x09\x19\x80\xdf\x69\x59\xbe\xb8\x1e\x95\x38\x0a\x62\x89\x2d\x1a\x31\xf7\xcf\x2d\xd8\x78\x35\xcf\x68\x40\xef\xd0\x05\x05\x7b\x1b\x5a\x92\xa9\xeb\x36\x6c\x5d\x36\xe5\x46\x54\x3e\x94\x0e\xca\xf6\x16\x8e\x17\x13\xef\x91\x4c\x1b\x56\x5c\xcb\x13\xea\xef\x88\x99\x07\xe6\x85\xe5\x9c\x02\xbc\x7b\x37\xd2\xce\xa3\x74\xa2\xa5\xe9\x6d\x68\x4c\xbf\x1b\xe1\x67\x48\xf2\x12\x0a\x77\x9d\x19\xdb\xfe\xd6\x73\xa7\x7b\x78\x6f\xab\xfa\xc9\xb7\xf5\x12\xc5\xb7\xb3\x61\x69\xb0\x8c\xea\xfd\xf6\x66\xb7\x1d\xe2\x5c\x88\x10\x31\x2e\x03\xaa\xc0\x7c\xbc\x04\xc5\x58\x7a\x26\x12\xd1\x9b\x12\x4d\x16\x04\xa5\xe1\x3d\x41\xdc\xf8\x12\xd2\xfe\x57\xc7\xf0\xf2\x4e\xd8\x58\x16\x1c\xe7\x66\xab\x4a\x9a\x57\xd3\x85\x98\x0a\x1d\xfd\xc0\xe9\xd5\xd1\x62\x83\x32\x1f\x65\xc4\xfc\x81\xef\x44\xf1\xb6\xc7\x77\x75\xa9\xf5\x16\xab\x8f\x6d\x30\x58\x7b\x4a\xd7\x96\x15\x6b\xec\x7e\xc7\x31\x0f\xee\xa4\x0a\x0d\x74\x2b\xd7\x35\x99\x65\x20\x08\xbe\x7b\x50\xa3\x0b\x5b\x9b\x84\x89\x46\xf5\x00\x52\xec\xb1\x4d\xf1\xf2\x03\xf6\x98\x57\xd3\xba\x58\x40\xd7\xed\xd7\xd0\xb3\x64\x33\x2f\x57\x1a\xdc\xf7\x61\xac\x56\xcd\x98\x5e\x7b\xee\x6c\xd6\x9c\xb6\x63\x2f\x31\xc5\xd3\x0c\x82\x32\xc4\x55\x30\x11\x53\x1e\x19\x0b\x51\x80\xbb\x71\x12\xaf\xad\x4a\xd6\x3a\xe2\x89\xea\xc8\x2e\x17\x72\x4d\xa3\xbb\x73\x4f\x76\x86\x05\x85\x32\x3c\x75\x34\xff\x19\x1c\x58\x13\xec\x7a\x85\xf8\x67\x82\xeb\x8d\xea\x9f\x91\x52\xfc\x17\x5f\xaf\x9e\xb5\xff\xa2\x6b\x81\xff\xab\xbd\x61\xff\xab\x38\x96\x01\xac\x6b\xdb\xa7\xbb\x23\xb4\xb4\x1a\xe2\xcd\x2b\xa6\x66\x87\x88\xaa\xa8\xd6\xdc\x20\xf6\x5d\x50\x0d\x4b\xea\xb1\xf7\xfc\xcc\xbb\xe0\x01\xb9\x75\x37\x62\xed\xb5\x05\x6b\xab\x0d\xb7\x2c\xf5\xbd\xcf\xf7\xce\x56\x79\xe5\x54\xe8\x77\xb7\xfc\xee\x66\xbd\xa3\xf3\x6e\x24\xca\xbb\xdd\x75\xe3\x60\x15\x6f\x47\x64\x2f\x4d\x22\x06\xec\x6e\xa5\x42\xf8\xde\x68\x7d\x5c\xd6\xf1\xbd\x8f\x44\xa3\x1e\xf0\x89\x6c\x81\xfc\x2e\xb7\x10\xad\x77\xd8\x4d\xca\x5b\x6b\xad\x42\xf4\x78\x88\x54\x52\xc1\x2d\x7b\x76\x6b\x46\xcb\xd9\xed\xe2\x4c\xaf\x02\xbb\xf5\x9d\xdd\xdb\x59\x86\xb3\xe0\xa0\xa0\x53\xbe\x82\x4a\xdd\x49\x1b\x41\xf7\x38\xb2\x66\xa7\x41\x5a\xc1\x3e\xba\xec\x35\xfb\x86\x43\xef\xfe\x42\x2c\x1d\xd5\xe4\xf2\x36\x6a\x7f\xc8\xb1\xc5\x3b\x8c\x71\x3e\x54\x5c\xed\x68\xc1\xc5\xf7\x1b\x07\x78\x98\x38\x5c\x18\x5f\xd2\x6a\x82\x9e\x97\x88\x89\x9a\x97\xa4\xc3\xcc\xa3\xb8\x8f\x1e\xd5\x83\x67\x85\xdd\xbc\x31\x93\xb8\x62\x34\xbb\xe3\xe1\x43\x2a\x3d\xb7\x8e\xde\x2f\x1d\x46\x8d\x83\x47\xab\x1e\x87\x2d\xc5\x0d\x86\xea\xe8\x95\xf4\x70\x5e\x15\x1e\x5e\xde\x11\x14\x46\xe1\x1d\xbe\x95\x34\xdf\x27\x17\xd8\x46\xf7\xa3\xcd\x09\x8e\xd1\x86\x8f\x78\xf4\x2d\x74\xa6\x53\xe3\xf2\x8e\x98\x46\x80\x31\x67\x8b\xb3\x5f\x42\x36\xe7\x09\xf3\xd5\x4e\x84\xd2\x27\x0a\x98\x5d\x75\xf7\xed\x52\xb3\x50\xae\x33\x5f\x47\x72\x81\x32\xcc\x77\xb2\x07\x92\x22\x4b\x77\x51\x94\x8a\x68\x8a\xfb\x51\xd4\xd7\x2e\xa7\xa1\x1b\x1c\xea\x2b\x96\x7f\x99\xfa\xaf\xda\x96\xdd\x89\xe5\xd5\x30\xe6\x9b\xfa\x0d\xfb\xbd\x41\x35\xb5\x4f\xc9\xae\x3d\x08\xc2\xb9\x1f\xba\x60\x13\x4a\x67\x97\x2e\xc3\x66\x38\x36\xd6\x70\x2b\xa9\x14\x4d\xef\xf1\x52\x7c\xb5\xef\x83\xcf\x4b\x71\xb4\x36\x3c\xf9\xd6\x50\x8b\x16\x4e\x95\x31\xac\xdd\xff\xda\xdd\x64\x33\x27\x97\x4b\xab\x0f\x54\xc9\xf3\x83\x7d\xca\xa6\x5f\x73\x12\xfa\xec\x39\x9f\x55\x07\x9b\x67\xbc\x20\xd7\x70\x8c\xbe\xe1\xd8\x66\x8b\x2c\xc9\x67\xe0\xc6\x2b\x67\xdb\x4a\x35\xf7\x39\x6a\xc6\x63\x7b\x0d\xcf\xc9\xe2\x06\xf5\x93\x1c\xa3\x7a\xee\x85\x96\xed\xc8\x8f\xcc\x0c\x50\x0b\xd1\xa6\xb3\xf7\xdd\x90\xad\x3e\xbe\x74\xd3\xbf\xd2\xd3\xb9\xd1\x30\xd1\x0b\x22\x6f\xf6\xd8\x6c\x1b\xff\x33\x71\x87\x6d\xea\x9d\x37\x67\x7d\xff\x80\xb3\x33\x02\x93\x82\x2d\x88\x2d\x76\xc3\x38\xbe\xa7\x2a\x0c\x16\xa4\x6a\x0a\xea\x43\x49\x76\x6b\x50\xdd\x33\x91\xb6\x05\xd8\xb9\x84\xfc\x69\x9d\x4e\xfe\x8c\xe0\x3e\x2d\xd3\xbc\xb5\x8d\xcb\xcf\x7d\x48\xc9\xbe\x8e\x5c\x88\x33\x1f\xb9\x62\xa2\x4d\x2b\x70\x9a\x55\x50\x9a\x6d\xaf\x8d\x39\xf6\x30\x62\xed\x76\x6b\x1b\x94\x73\xc4\x79\xd6\xb5\x45\xa9\x71\x7a\xf9\xe8\xa9\x38\xda\xac\x98\xda\x9c\xb3\xb9\x11\x3d\x19\x87\x1b\x7c\x55\x3e\x46\xa3\xc8\x07\x2e\xfb\x30\x86\xd4\xf4\x06\x1b\x9b\x91\xc7\x60\x91\x8b\xd9\x8f\x0e\x9f\x2b\x3d\xcd\x44\xad\xf5\xb0\xd1\x08\x4a\xa8\xc7\xf7\xa2\x66\x64\xb9\x98\xee\x97\xdd\x3b\xea\x21\xda\xab\x33\x8d\x42\xa8\x5a\x5b\x1c\x1f\x6e\x17\x2a\xa9\x48\x27\x73\x28\xd8\x7b\xa8\x5c\xd2\x68\x22\x25\xa9\x58\xa5\xce\x8d\xa8\x13\x51\x4c\xd6\xf7\x7b\x24\xa8\x36\x46\x24\xd7\xa3\x77\xf4\x84\x47\x79\x56\x35\x95\xca\xd7\x88\xd4\x35\x72\x52\xa5\xea\xb2\xa3\x8b\xca\x97\x6d\xd5\xb1\x0c\x16\xa4\x98\x31\x34\x16\xe3\x3f\x0d\x1d\x63\xa0\x2a\x2c\x1d\xa5\x11\xa3\x0d\xb7\xe7\xe5\x07\x51\x3a\xee\x49\xe4\xcb\xb6\x02\xfb\xe2\x88\xbc\xbd\xd4\x88\xa4\x17\x1d\xf8\xad\x1b\xc1\xbd\xc9\x15\xd7\x41\x0f\x06\xf2\xe9\x19\xc6\x1e\x48\xab\xcd\x22\x07\x50\x70\x13\xb6\x22\x64\xef\xeb\x58\x0a\x81\xc0\xda\x61\x6b\xf2\xb8\xba\xd0\x50\x5b\x4a\x2b\x63\x7a\x8e\x23\xc4\x8c\xf8\xa4\x26\x70\xcd\x3d\xbf\x6a\x19\x92\xe2\x60\x70\x1a\xdf\xda\xfa\x69\x72\x6e\xbd\xeb\x69\xaa\x1f\x59\x70\xda\xd5\xea\x01\x08\xbb\x1b\xfe\x61\xd0\x59\xa5\xb3\x0f\xc3\xa7\x9b\x5b\xb3\x3d\x9d\xed\x63\xcb\xe9\xfc\x58\xc7\x3a\x63\xef\x54\xae\xde\x24\x2f\xd3\x99\x3c\xc0\xc1\xbc\x5c\x98\x53\x36\x5c\x46\x3d\xb8\xcc\xd9\x1d\x9f\x3d\xde\x90\xf8\x29\xa8\x71\xbe\xd7\x66\xdb\xbc\xfa\x1a\x16\x5d\x5f\x88\xba\xfa\x5c\x5b\x5e\xcc\xe8\xb8\x77\xaa\x57\x4c\xad\x13\xbf\x7a\xe3\x93\x33\xc5\xc0\xf7\xe8\xe5\xef\xf8\x91\x88\x7d\xfb\xd0\x45\xa8\x71\x3b\xc0\x6a\x95\x0a\x03\xdf\xa3\x9b\x11\xe9\x75\x6a\x12\xa6\x5f\xfb\x00\xed\xd6\xf0\xa4\x9f\xcb\xde\xdc\xca\xdd\xff\x63\xa4\x3c\xfd\x79\xaf\x5d\x8c\x92\xee\x03\x9f\xdb\x66\x8d\x56\x0e\xce\xc7\x82\xdb\x19\x6b\xe9\xc4\xd5\xf7\x3b\xec\xdf\xe3\xf8\x08\xd1\x9a\x74\xe6\xd8\x4c\xd0\x06\xef\xf7\xf3\xb4\x92\x3c\xaf\xa9\xe8\x9f\x23\x72\x8b\xc3\x9c\x41\x1f\x13\x59\x64\xac\x75\xf9\x60\x09\x62\xca\xff\x9f\x73\x91\x30\xa8\xfa\xc8\xcb\xe2\xf4\xe9\xbd\xc5\x9d\x8f\x39\xb1\x2c\x43\x44\xa9\x4c\xd1\x3f\xf6\x66\x62\x7d\x69\x9f\x52\xcc\xb9\xe7\x44\x7d\xe9\x78\x54\xdf\x26\xdd\x8a\x7b\x96\x5b\x63\x84\x74\x51\x3c\x36\x95\x96\xc7\x51\xa4\xe5\x1e\x55\xc1\xd2\x74\xae\x63\x42\xa5\x53\x68\xaf\x38\xec\x21\x26\xef\xe7\x2e\x11\xd1\x03\xea\xfc\xb6\x2b\x58\xd6\x1e\xa2\xc5\xd4\x7b\x6c\xe0\xd8\xf1\x70\x27\x11\x0f\xa7\x34\x69\x53\xd4\xe1\xe3\x3d\x92\xf5\x58\xca\xb3\xe1\x4d\x4c\x84\xfa\x1a\xfe\x91\xe5\x9e\x6c\x1b\xca\x56\xb3\x33\xd8\x48\xb6\xe1\x74\xca\xea\x7f\xf5\x87\x18\xae\xfe\x1b\x47\x65\xec\x7f\xd5\x9d\x71\x6c\xe9\x31\x37\xdd\x08\x1c\xf6\x1e\xdf\x70\x4b\x4f\xa7\xfa\x34\x3a\x61\x67\x3f\x3f\x44\x50\x15\xb9\xfd\xc3\xe6\x5d\x54\xa7\xf5\x94\xd1\x88\xd7\x5f\x3b\x3c\x33\x0c\x5c\x79\xb8\x79\xe6\xe4\xdf\x66\x6a\x96\x6a\x62\xff\x0e\x13\x1e\x1f\x69\x6a\xa2\x1d\x1f\x7a\x13\x8e\xc8\xe5\x71\x10\xd4\xfe\x1d\x3e\x3e\x3d\x78\x36\x29\x1a\xe5\xb5\x83\xb7\x71\x7e\xe4\xd5\xdb\xb8\xa2\x0e\xcb\xbd\xcd\xee\xbc\x6b\x27\x5b\xde\x7c\xa6\x27\x09\x74\xcb\xc3\x9b\xf3\x71\xca\x96\xe8\x47\xdd\x7e\x5b\xc3\x8b\xb0\x6f\x6b\xd4\x09\xa0\x37\x55\xdc\x9e\x3c\xa6\x94\x1b\xfb\x20\x74\x44\x2d\xce\x41\xa9\x08\x58\x5e\x5e\x00\x4c\xa5\xfb\xe8\x16\xdb\x21\x75\x25\x3d\xef\xde\x2e\xed\x1d\x96\x8e\xfe\xc4\xb2\xb7\x79\xeb\xdb\xdc\x6f\x6f\xff\x54\x2c\xbd\x4b\xcf\xae\xe7\x1d\x65\xe3\x89\x80\x54\xfb\x77\x0c\x3d\x28\xf5\xa2\x45\x45\x6b\xd0\x89\x8c\x34\x2d\xb4\xe6\x61\xa2\xcf\x5e\x81\x54\xf5\x90\x68\x77\x3e\xed\xef\x8f\x23\x95\xef\x98\xca\xe3\xd0\x13\x0c\xd4\x71\x83\xf7\xe3\x40\x1f\xf7\xca\xca\x76\x32\x6b\x5b\x37\x7c\xa7\xc7\x51\xc4\x77\x32\xe1\xd3\xb1\x35\xea\x90\xe0\x3b\x39\xfb\xf0\x94\xc8\x91\x83\xc9\xc9\xa5\xbf\x86\xc7\x87\x33\x7a\x1d\x38\xae\x73\x88\x45\xc2\xed\x43\x1d\xe7\xf0\xa8\x17\x1b\xf9\x43\xc4\xf8\xd0\xfb\x41\xea\xc4\x57\x91\x28\xcc\x06\x86\x26\xc1\x23\xa8\xd5\xd4\x7e\x54\x72\xc5\xf9\x09\x35\x5a\x61\x65\xbb\x9d\x1e\xe0\xa3\x39\xe3\x4b\xaf\x5e\xbc\xe4\x3d\x3e\x54\x17\x3a\xe5\xf4\x11\xb5\xf5\xe7\xf8\xd8\xea\x6b\x81\xd0\x2e\xf6\x86\xa9\xf1\x15\x0b\xdd\xa3\x0a\x34\x7a\x04\x95\x1e\xe7\x54\x56\xea\xb4\x47\x0d\x21\x92\x6f\x0c\x32\x7e\xd4\x05\xea\xf3\x8d\xde\xb7\x5f\xa9\xb6\x62\x71\xbb\x17\xde\x5a\xb9\x0e\x43\xc7\xf2\xf2\x5a\x1d\x7f\xf0\x46\x34\x2c\x21\xad\xb5\x94\x9a\x7a\xd6\x60\x21\x5c\x45\x73\x33\xae\x1f\xef\xdb\x4c\x58\xc6\x9d\x9c\xb0\x75\x61\x91\x84\x8b\x3e\x9a\xbd\x41\x4c\x15\x7f\xa1\x5e\x63\x53\xd4\x39\xb0\x5d\x46\x8a\x37\x9b\xa2\x3a\xd2\xb1\xb9\x45\x0d\xa4\x9b\xf3\x8f\x04\xd3\x04\xbf\xcd\xe6\xc6\x32\xfb\x16\x7b\x45\xd9\x62\x7f\xc4\x0d\x04\xae\xc6\x2a\xf7\x31\xf7\x0a\x00\xa9\xb6\x3d\x4d\x44\x0c\xac\xf2\xa1\xa6\xe4\x7a\xee\x3a\xfa\xb3\xac\x32\xe2\xfd\x71\x17\xa5\xf5\xb1\x6e\x8e\x38\x84\x26\x12\xc4\x04\x70\xbf\xe6\x64\x86\x36\xae\x9b\x01\xa3\xe3\x71\xb2\x3b\x04\xdd\xa8\x99\x81\x63\xb1\xbd\x4f\x72\x3c\xda\xd0\x4d\xee\x0e\x9f\x4e\x5b\x9c\x57\x1c\xa1\x50\xb9\xd8\xa5\x66\xb1\x2f\x4a\x86\x16\x51\xbe\xd2\xec\x54\xd9\xde\xcd\xfa\x60\x4a\xdd\xbe\x9b\x19\xd5\x68\x18\x60\x79\x79\xd0\x87\x7d\x9c\xd8\xef\x06\xca\x8f\xe3\xa7\x63\x73\x3b\x0f\x77\xc3\x51\x98\x35\x8f\xe7\x02\x78\x23\x15\xaf\xf0\x38\x02\xe3\xc2\xdb\x9b\x5d\x1d\xd2\x73\xad\x4e\x2b\x03\x9b\x9e\x06\xb8\xad\xa6\xbd\xfc\x57\x1f\x49\x0f\x3a\x82\x21\xc4\xb9\xea\x8f\xbf\x37\x63\x5c\xc8\x8f\x91\xd5\x05\xd9\xca\xd5\x36\x34\x0f\xe9\x02\xe6\xce\x73\xa9\xe6\x61\xe2\x56\xf7\x63\x87\x4c\x46\xe6\x85\x62\x93\xcd\x83\x99\x80\xc1\x4f\x19\x90\xd1\xe3\x28\x99\x0b\x34\xb1\xd5\x36\x4e\xca\x62\xed\xed\xe9\xca\x18\xa7\xa5\x26\xe9\x53\xd3\xf2\x30\x96\x00\x54\x6c\x2d\x5a\x8b\x48\x4c\xdc\x5c\x32\xfa\xbc\xab\xcb\xec\x1a\x0e\xda\xe5\xc0\xf0\xac\xca\xc5\xf4\xee\xc6\xa9\x38\xf3\x74\x4e\xbc\x39\xa1\x98\x76\x3e\xdf\xb1\x30\x58\x15\xbd\x66\xc0\x8e\x1a\xb5\x6b\xa2\x28\x42\x7c\x65\xe2\xfb\xeb\xcb\x77\xf8\xd2\x43\x53\xb1\x67\x92\x7c\xf8\x17\xe7\xd8\x67\x26\xff\x88\x21\x7c\x1c\x21\x26\x93\x0e\x4f\x1b\x5c\xff\xf2\xb1\x7b\x3f\xc8\xf7\x71\x6a\xc8\xfd\xe0\x39\x29\x45\xc6\x6b\x94\x0b\x51\xad\xab\x02\xd7\xaf\x6a\x9c\x37\xd4\xdd\x2f\x9d\xaa\x9a\xb7\xf0\xfa\x52\x86\xb7\x5a\xdc\x2d\xd1\x63\xbc\xf6\xf6\xec\xa7\xf2\xbc\x9b\x9f\x47\x37\xbd\xd3\x47\xfd\xbd\xfb\xd8\x1f\xd2\xbb\x8d\xa7\xef\x44\x74\xf3\x5d\x95\xaa\x77\xc5\xad\x0f\x2f\xcf\xd1\x69\xfb\x28\x6b\x34\x3e\x6a\x4e\xc9\xc7\xd3\xfe\x90\xca\xc9\x2d\x1c\xaa\xaf\xf3\x48\x7d\x6d\xc2\x23\x09\x2f\x6e\xd6\xa9\xad\x6b\x7d\x3d\x32\xae\xee\x7a\x14\xf7\xb7\x3e\xbc\xbf\x9b\xf5\xe7\xde\xd4\x6e\xdc\x62\x07\x7b\xd2\xf6\xef\xf0\xea\xda\x68\xde\xbc\x97\xa7\x62\xbd\x9b\x30\x4a\x60\x37\xda\x83\x10\xd4\x75\x87\xfd\x71\x40\x7d\x37\xe9\xb4\xfa\xbe\x03\x1b\x28\x9a\x77\xfa\x94\xd7\x6c\x30\xa8\xfc\x60\xe8\xd9\xa0\x17\x07\x76\x03\x9d\xf6\x2e\xcd\x36\x8c\xf6\x48\xb4\xd3\x9e\xa7\xb9\xa6\xc1\x54\xed\x36\xd9\xf2\xbc\x2d\xb1\x3f\xfb\x59\x90\x8f\x7a\xba\xdb\xb2\xc5\x45\x67\xb1\x2d\x6e\xd6\x1c\xde\xee\xfe\x46\x04\xe3\x82\x27\xa7\xe0\x17\x5e\xa0\x53\xf6\x62\x1f\xba\xf6\xd8\x25\x69\x80\x18\x8d\x72\xaf\xb9\xdd\x03\xef\x44\xff\xf4\x60\xdf\xf6\x3b\x3f\x8f\x46\x92\x81\xb2\x1e\x8c\x66\x9a\x82\x39\xdd\x3a\xd2\x29\x64\xcf\xe7\x60\x4d\xe9\x70\xb6\x39\x8f\x3c\x65\x5a\x8f\x3d\xc1\xbe\x1f\xac\x4e\xb0\x6e\xdd\x5e\x71\x54\x0a\x31\xa8\xda\x24\x9d\xda\x81\x68\xb5\xf4\x2c\x21\x1e\xa5\x99\x3b\xc5\xd5\x04\xb0\x1a\x9d\x28\x6e\xd6\xd5\x34\xd4\x5d\x77\x0d\xf1\xb5\xe8\x2b\xa2\xf1\x65\xf3\xc0\xde\xe9\x05\xa7\xf8\xca\x14\xa0\xa2\xc6\xc9\xce\xf8\xca\x34\xd9\xd7\x96\x4b\xd2\xd3\xe9\xf8\x7a\x78\x35\xcf\xf5\x90\xb5\xe4\x47\xf5\x8c\x4b\xc4\x13\xdd\x4f\x13\x45\xbd\x9f\x07\x67\xb1\x51\xac\xdd\x3f\x5a\x7a\x0c\x0f\x9f\x0e\x66\x4b\xec\xa0\x9f\x73\x70\x32\x88\x8f\x9e\x23\x1e\xb5\x0d\x48\x31\x29\x76\xe1\xe0\xf7\x6e\x08\xfc\xdc\xad\x38\xac\x3d\x47\xeb\x3e\x6c\x78\x1c\x94\x3e\x6c\x78\xf0\x20\x07\xb5\xc6\xc7\x09\xf0\x03\x07\xae\xfa\xbb\x07\x30\x78\xae\x1b\x91\xc1\x83\x13\xe1\x51\x5a\xc0\xe1\x34\x1b\x43\x26\x55\x2f\xa3\x1c\x58\x85\x7e\xd2\xda\x2b\x87\xcd\x8a\xfc\x5f\xed\x16\x64\x1f\xea\x70\xfa\x2e\xd9\xe1\xcd\xe8\x8b\x71\xbb\xa0\xd0\x9c\x4d\x79\xe4\x4d\xd5\x4b\x06\x78\x66\x79\xdc\x0d\x7b\x5e\x20\x21\x8a\xeb\xc2\xa1\x2f\x90\x1d\x10\x15\xde\x89\xfd\x50\xde\xe3\xc1\x00\x4d\x1f\x83\x57\x07\xa1\xbf\xa5\x81\xca\xa3\x7f\xe1\xed\xe7\x91\x19\xbc\x61\xae\x0c\x30\x03\x57\xb7\x5e\xbb\x81\xff\xb5\xf2\x63\xc1\x8f\xcf\xb7\xbe\x59\x75\x24\x3b\x3f\x7a\x02\xdc\x92\xfd\x21\x0f\x57\x54\x85\x12\x93\x1f\x3b\x59\x7f\x8f\x3f\x5e\x2c\x66\xb6\xbf\x06\x3f\x36\x7e\x12\x41\x06\x45\xa7\x53\x0c\xb4\x95\xf7\xe3\x32\xf1\x91\xec\x3f\x1a\x78\x7b\x47\x7e\x40\x1c\xfc\xe8\x12\x8e\x64\x0f\x93\xf4\xe7\x23\x3e\x2f\x36\xb6\x8d\xf7\x87\xa7\x38\x32\x5a\x1f\x96\x7e\xee\x97\x90\x49\x3f\xdd\x7f\x24\x2c\x07\xea\x32\x23\x76\xe4\x49\x0f\xf8\x13\x9a\x3b\x75\x46\xc7\xe5\xc1\xb9\xb4\xd3\x0b\xa7\xfd\x35\x68\x99\x14\xdf\x63\x92\x49\x94\x7b\x64\x21\xd3\x5e\x5b\xa8\xaa\xd8\xe2\xcf\xa2\xfa\x91\xa2\x77\xef\x91\xae\xb8\xbb\xfc\x68\xcb\x38\x3c\x31\x88\xc3\x3d\x33\x25\x66\xe3\x66\x45\x1d\xcf\xac\x8e\x67\x7c\x5c\x24\x3b\x52\xfc\x6b\xf7\xc6\x8f\xba\x86\x67\x0d\xc1\x65\x0d\xff\x6b\xd2\x67\x32\x8d\xea\x1f\x47\xa9\xd7\x92\xda\x82\x12\x63\xf9\xf0\x1f\x39\x7e\x8f\xd9\xf6\x7f\xd5\x3e\x56\x7d\xfe\xab\x36\xff\x2c\xd9\xfe\x57\xdd\xdc\x56\xb5\xd2\xcf\x25\xce\x64\x8e\x87\x00\x80\x64\x7a\xa7\xdb\xde\x96\x10\xa4\xa0\x2c\x2e\x24\x6b\xfa\x02\x53\xb2\x2d\x4d\xf2\x8e\x43\x03\x2a\x1e\xc9\xbe\x68\x96\xa6\x02\xfb\xb9\x2f\xd2\xe8\xe6\xd1\x1c\xc3\xfc\xb8\x76\x9d\xec\x5c\xf9\xae\x51\x37\x68\x51\xb4\x3f\x9b\x2f\xc9\xfe\xd4\x0b\x18\xa8\x75\xc6\x64\x3d\x24\x51\xad\x83\x56\x2b\xf3\x4c\xa9\x80\xf1\x38\x0c\x0f\x61\x9d\xb8\x3b\xa1\xbd\xd9\x63\xca\x56\x87\xb3\xc7\xa2\xfc\x79\x70\xec\xd4\xb6\x1d\xc7\x9f\x05\x05\x8c\xf0\xf9\x6a\xa1\xce\xac\x43\x3b\xe3\x03\xcc\x0c\x74\x60\xff\x7b\x85\x50\x9f\xcc\x39\x9f\x86\xf9\x69\x10\x9f\xeb\x0f\xcd\xe8\xe9\xfd\x4f\x63\x4e\xf6\x78\xdc\x06\x4b\x96\x67\xfc\x0f\xba\x60\x47\x91\x63\xa1\x7d\xcb\x96\x4f\x8c\x0b\x5a\xc6\x87\xe8\xab\xf2\x22\xc7\x9a\xe6\x47\x32\xf3\x73\xe3\x40\x0c\x9e\x36\xe2\x4f\x36\xb0\x89\x8a\x69\x2e\xa2\x3d\xdc\xe1\xcc\x02\x7f\x79\x8a\x23\x40\x17\xb9\x3e\xa2\x81\x09\xae\x0a\x43\xe4\x64\x01\x3d\x79\x75\x5c\xf1\x56\x4e\xd5\x1a\x71\x72\xab\xe6\xcd\x92\x8b\x45\x53\x47\xf7\x3d\xbe\xc6\x34\x19\x22\x5f\x6b\x48\x55\xc7\xa7\x6a\xde\x21\xd5\xce\x04\xe3\x44\x94\x7f\x6c\x86\x65\xb3\x74\xd4\x37\xd0\x08\x22\x3f\xb3\x59\x1f\xdd\x44\x36\xeb\xb0\xa3\xaa\x29\x11\x4f\x7b\x7e\xa0\xe7\xec\x31\x1b\xea\x0b\x9f\x77\xb2\xd9\x4c\x96\x72\x85\x60\x6f\xf1\x86\xf4\x98\x0a\x64\x13\xda\x97\xe2\x74\xf0\x45\xb7\x52\x22\xf5\x9c\xb4\x9f\xfc\x8a\xca\x23\x1c\xfd\xb2\x03\xf2\x82\x46\x36\xa7\x4e\xe2\xa9\x5d\x9c\xb1\x0e\x6a\x36\xfa\xd6\x5c\x9e\x4d\xea\xb3\x87\x3c\xc7\xa4\xe6\xae\x79\x4e\x86\x45\x4c\xd6\xc0\x47\xbf\x74\x54\xad\x51\xb2\x58\x89\x7e\x6e\x9b\xf1\x81\xb0\x07\x3d\x06\x87\x6c\x97\x31\xde\xe6\x9f\x2d\xb2\x6c\x97\xaa\x57\xac\x40\x3f\x7c\x7a\xb0\xd2\xd9\xda\xd1\x79\x65\xeb\xdf\xbf\x17\x52\xc8\x6c\x70\xe2\x19\x7d\x4b\xcf\xff\x67\x4f\x03\xf2\x11\x54\xc8\x55\xfb\xf4\x7b\xc5\x35\xdb\xe7\x95\x6b\xa6\x55\xd2\xd2\x98\x28\xe5\xc7\x94\x53\x0e\xbb\x3d\xdc\x96\xe2\x7b\x17\xc2\x94\x0c\x54\x99\xda\x69\xb7\xb7\x8d\x51\x2b\x6f\xe6\x18\x4b\x24\x79\x33\xe9\xe8\xb8\x83\x78\x0d\x0b\xc9\x5e\xcb\x20\x5c\xf8\xa8\xba\xb8\xb5\x0b\xa1\x19\x4f\x73\x74\x42\xaf\x52\x65\xb7\xbb\xce\x60\x67\xb7\x8f\x2e\x3d\xbb\xbd\xfa\xe7\xdd\xe5\xec\x74\x6d\x72\x0f\x61\x35\x59\x8e\x1e\x0f\x52\x47\xc5\x05\x9d\xed\x1f\xe7\x95\x3f\x1f\xe7\x35\xc9\x12\xc2\x94\x6d\xdf\xf9\xbc\xec\xe3\xd5\x61\x5d\x57\x55\x0b\x7c\x4f\xeb\x1e\xfb\x02\x52\xde\x63\xec\xd7\x65\xf3\x5e\x7b\xad\x0a\xf1\xf5\x52\x8e\xc3\xf8\x12\x5f\x23\x09\x71\x76\x6d\x25\x32\xc7\x77\xe9\xc6\xde\xee\x61\x10\xcf\x6d\x51\xbe\xb8\xdd\xf2\x93\x08\x05\x87\x9d\xaa\xaa\x49\xf4\x7a\x00\xce\x71\xd7\x51\xd8\x5f\xa3\x9e\xc4\xa0\x7b\xe5\x1c\x8f\x0d\xc2\xfa\xd5\x85\x55\x65\x26\xbd\x48\x3c\x7e\xe7\xdd\x39\xa6\x45\x45\x45\x79\x5f\x75\x31\xc4\x1a\x86\xa5\xda\x23\xf4\x64\xd6\xf2\xa1\x24\x26\xe4\x83\x3a\xbf\x56\xe2\xc7\x53\xba\x08\x8e\x1f\x6a\x87\x5d\x34\x24\x11\x6e\x56\x38\xb9\xc1\x8f\x66\xaa\x8f\x2a\xba\x47\xfc\xb9\x4e\x8f\x67\xe4\x54\x03\x3f\x1e\xd3\x70\x9a\xef\x9a\x5d\x95\xb4\xe6\xdb\x73\x31\xab\x1b\x78\x04\x52\x4c\xa9\x7a\xaa\x9c\x8b\x35\xcb\xdb\xf4\x91\x8e\x68\xb5\x4b\x86\x5a\xdf\xb1\x7b\xbf\x3b\x8e\x61\xd8\x89\x38\xa7\xdf\x88\x3a\xfc\xc2\xb1\xe7\x41\xd9\x47\x4b\x69\xa7\x0f\x33\x1e\xbb\xe9\xa6\xf5\xf5\x8a\x2a\xcc\xaa\x57\x0d\xe4\x28\x62\x27\x0e\x95\xb0\x9a\x46\xa6\x97\x5b\x6d\x97\xe6\xfa\xd2\x8f\x16\x56\xf5\x34\x5e\x2b\x89\xfa\x1a\x3b\xaf\xb9\xbe\xc0\x68\x28\xeb\x90\x6b\x36\x90\xaa\x49\x6c\xa0\xed\xbe\x9f\x33\xce\x5c\xd7\x95\xe6\x08\xca\x86\x7f\xab\xc1\xa5\xfa\xd1\xa2\xab\x3f\x36\xfd\xe9\x39\xa7\x64\x81\xb9\x8f\xf9\x0d\x8c\xde\xfe\xd7\xd2\xe3\x3e\x3f\x4c\x9e\x8b\x84\x30\xca\x4f\x86\x17\x87\x39\x95\x9b\xe3\x29\xe2\x23\xeb\x78\x8d\xf5\xbe\x5c\x33\x2f\x05\xf5\xce\xb0\x19\x28\x97\xf9\x71\xcc\x44\x68\x9d\x87\x68\x23\x2a\x2a\xd7\xe3\x24\x5b\xbe\xc3\xbc\xa5\xa8\x78\xad\x62\xfa\xce\x6f\x31\x59\x6f\x56\x17\xd3\x2b\x5f\xb1\xfb\xa1\x2f\x90\x83\xce\x3a\x43\x8b\x55\xbb\xe2\x20\xbc\x55\x9f\x74\x94\x98\x6e\x16\xb3\xb2\xa6\xc6\xe7\xf2\xa8\xde\x45\x1d\x0e\x2b\x9b\x81\xb8\xfa\x4e\x8e\x29\x62\xd9\x9c\x5e\x7b\xa3\x96\xa7\xc6\x16\x21\x47\xbc\x88\x1e\x59\x53\xb6\x98\xfa\x1b\xf1\x20\xeb\x83\xef\x2d\x5b\x72\x43\x5a\x42\x71\xcb\x80\x6a\x53\xba\xb8\xbd\x37\x23\xe2\x19\x55\x7f\x5a\xa2\x7f\xd4\xe6\x12\x53\x9f\x28\x33\x1e\x1f\x1e\x59\xab\x63\x15\x95\xac\x2d\x7e\x3a\x7b\xa4\x8f\xc9\xe1\xbf\x7e\x34\x1a\xa4\x7e\x8f\x19\x06\xe3\xad\x62\x26\xc7\x9b\xaf\x8d\x56\x95\xff\xe7\x41\x56\x31\x50\xef\x89\x6a\x13\xff\x70\xf5\x90\x2c\xf7\xfb\x18\x23\x4c\xf4\x5b\x81\x6c\xa0\x59\x3d\x3c\x8a\x37\xf0\x3e\x04\x18\x96\x34\x26\x6c\x38\x53\x38\x30\x6e\x0a\x42\x57\x85\xd8\x64\xa2\x0b\x1c\xc6\x5a\xcc\x39\x19\x3c\x6a\xb0\x96\x64\x5e\x83\x88\x41\x1d\xb6\x9f\x52\x47\x43\xc5\x23\xff\x8d\xd0\xf2\x6a\x6a\xb6\x4f\x6a\xc4\xac\xe6\x3e\x96\x55\x25\x6b\xaa\xe6\xc7\x38\x55\xff\x1e\x1b\x2d\xa7\xd1\xeb\x43\x27\x4e\x07\x95\x41\xf5\x48\x9c\xc6\x85\x0e\xf5\x0a\xeb\x69\x1e\x67\x29\x4f\x73\xc4\x7e\xb6\x86\x09\xf5\x2d\xe9\x19\xcb\xd9\x6f\xd5\x9f\xb8\x6a\xda\xeb\x80\x90\xca\xe2\x90\x9e\x73\xea\xe3\x3a\xa7\x0d\x51\x6d\xba\xfd\x0a\x74\x3c\xed\xf3\x28\xcd\x69\xd3\x6b\xec\xf9\x9c\x36\x2d\x9d\xd9\x38\x6d\xc2\xa6\xec\x88\xc2\x53\xe8\xd5\x89\x83\xb7\x0f\xaf\x68\x82\xa5\xbf\x83\xee\xae\x8b\x5b\x9f\xf6\xff\x1e\xa7\xca\x70\xec\xfa\x49\x3f\xa8\xc7\xa4\xf8\x74\x61\x71\x7a\x1a\x73\xba\xa8\x57\x86\x4e\xf7\x68\xed\xa7\xd3\xf3\x92\xd3\x95\x91\x5f\xae\x24\xdb\x0b\x07\x84\x72\x55\xea\x8f\x28\x9b\xd3\x9d\xcf\xfc\x73\x43\xf2\xdf\x19\xe7\x27\xaf\x77\x3e\x38\xcd\x33\xfe\x6c\x98\x92\xc1\x63\xfc\x3c\xe3\x4f\xe1\x54\xbf\x76\x0e\xff\x32\x1f\x55\xb1\x2f\x93\x52\x3f\x7c\x73\x3d\x87\x18\x1c\x30\x57\xa4\x35\xea\x34\x8e\xdc\x5e\xb8\x36\xb7\xeb\x2d\xbd\x6b\x8b\xea\xc5\x9a\x1a\x2e\x67\x7d\xef\x8b\x2f\xd7\x25\xe5\x5d\x7a\xee\x70\x3d\xa6\x0e\x97\x0b\xbc\x09\x7d\xb9\xcc\xb7\x5b\xaf\xb1\x9c\x7e\x39\x2d\x95\xf0\x72\x7a\x8d\xe5\xc2\x21\x87\xeb\xb1\x6c\x76\x45\x9d\xa0\xa8\x24\xcd\xe0\x10\x7b\x1f\x19\x2e\xc5\xd8\x5d\xc9\xe8\x5e\xe9\x4a\x51\xef\xef\xde\x9c\xa2\x16\xc0\x1d\x75\x17\x76\x4c\xf5\x30\xa4\x9b\xdb\x4c\xf5\x90\xa7\xfb\x01\x0a\x69\xc9\x05\xbe\x8d\x7a\x74\xa9\x1b\xc7\xab\xa6\x4c\x1f\xe7\x14\x8f\x83\x3f\x2e\x78\x16\xbb\x1e\x22\x31\xe0\x58\xe5\xee\xc4\xd1\xee\x58\x1f\x9b\x35\xa7\xf1\x02\xf0\x49\x04\x80\x03\x64\x96\x69\xde\xf1\x4d\x30\x45\x3b\xd5\xe3\x63\x2d\x45\x92\xaf\x04\x1f\x4d\x8e\xf3\xe1\xdd\x9b\x83\x3c\x20\xde\x22\xe3\x3d\xd0\x7a\x24\xc3\x07\x3a\x8e\xe4\x58\x8e\xc7\x91\xa2\x49\xa2\x8d\x1a\x76\xa4\x18\x7b\xce\x32\x01\x4b\x10\x36\x72\x34\xc9\xe3\xf5\xc8\x5b\xa4\xe4\xf0\xc5\xad\x23\x3b\x4f\xb3\x9b\xe3\x79\x71\x88\xc8\x54\x9a\xde\xcd\xf0\x14\x56\x3d\xf2\xc5\xf1\xcf\x7c\x77\xe1\x28\x06\xc6\x65\x4b\xf1\x62\x1d\x77\x55\x8e\x42\x53\x4c\x8a\x03\xbf\x39\x5b\x8f\x31\x32\xa7\xa9\x52\xf3\xf0\xa4\xe1\xf5\x0f\xd2\x2b\x7d\x30\x78\x02\xa0\x26\x13\x8c\xbf\x21\x10\x2f\x99\x80\xb8\x92\x1e\xda\x47\xcc\x25\x93\x19\x74\x65\xba\x4b\x29\x1f\x04\xce\xbc\x74\xea\x66\xcc\xd2\xb7\x09\xf1\x7b\x14\x04\x6f\x44\x27\xb9\x49\x56\x91\xd2\xab\x6f\x5d\x10\xec\xe7\x6c\x98\xd8\x1b\x28\x02\x9a\x13\x74\x3f\x00\xdf\xee\xc0\x75\xd9\x4c\x22\x03\x25\x2d\x53\x4d\xd6\x40\xc9\x64\x4c\x73\x38\x4e\x84\x5d\x9a\x1e\x59\xcd\x11\x72\xa1\x01\x0f\x5c\xc2\x4b\x96\x73\x44\xb2\xce\x06\xa8\x28\x70\x68\x11\x8f\x3b\xe2\xd9\x51\x31\xc8\x9d\xd8\xa8\x52\x25\x79\xf0\x0f\x20\x19\xd1\xed\x3c\x6c\x25\xc8\xa1\x67\xd8\xc4\x63\x0f\xe2\xee\x84\xb8\x10\xc1\x40\x78\x5e\x03\x87\x23\x48\x9d\x63\x2b\x42\x96\xce\x5e\x93\x0b\xfc\x65\x14\x6e\x7b\x2b\xa7\x26\xfc\xdf\x7c\x6b\x85\x9f\xb3\xa8\x78\xbc\x0d\x59\x15\xf1\x4a\x2a\x79\x11\x17\x08\x37\x4f\x71\x8d\x3b\x84\xdc\x57\x4e\x2e\x74\x2e\x55\x3c\x03\x40\xda\xbd\x72\x56\xf6\x38\x47\x9a\xab\xc1\xf5\x9f\x01\x7b\x3b\xd5\x54\x30\x56\x19\x41\x12\x19\xf8\x5b\xf3\xe6\xa2\x9f\x6a\xc6\xad\x20\x91\xfc\xa7\x58\x92\x3c\x9e\x92\xc6\xf3\x5e\x35\x6f\xe6\x55\xdc\x24\x77\x9d\x48\x65\xf9\xda\x34\x03\x7e\x19\x88\x12\xca\xa5\xdf\xac\xc8\x95\xfe\xef\x54\xe7\x42\x00\xbd\xc5\x83\x99\xc9\x35\x1d\xdd\x6e\x3a\xe4\xfb\x3d\xd5\x7c\x4d\xb5\x4c\xb5\x98\xa9\x92\xf7\x05\xcd\x0b\xd3\x03\x4f\x7a\x32\x7e\xa5\x04\xd1\x80\xbd\xc4\xc4\x40\x9d\x36\x6b\x03\xb9\xbe\x87\x05\x4c\x21\x94\x78\x74\x7b\x09\x6f\xc6\x40\xaf\xfc\x30\x41\x2d\x78\xe2\x96\x32\x42\x1e\x6d\x80\xce\xf1\x3d\x8d\x37\xa4\xa6\x78\xa2\x35\x9c\x54\xc1\x4f\xcb\x0e\x4f\x9c\xbf\x3d\x71\x99\x84\xaa\xcc\x59\x7d\xab\x6f\x67\xf3\xfc\xac\x5e\x6a\x2d\x71\x71\x78\x25\xe0\xc1\xcf\x9d\xd3\x69\xa6\xd3\x98\x65\x3a\xcd\x4c\x7f\xec\x89\x43\xe7\x5e\x8a\x20\xd2\xd3\x00\x35\xcf\xd3\xcc\x73\xab\x66\x0a\xeb\x4f\x31\x09\xb4\xa2\x3b\xd3\xc0\xb7\x3b\x84\x88\x15\x02\xce\xfb\x6e\x08\xcc\xce\x2b\xdc\x54\xca\x5a\xb0\x9d\xde\x4e\x9a\xfd\x24\x5c\xf7\xe9\x34\xab\x79\xc5\xb0\x74\x40\x95\x8b\x70\x22\x67\x38\xbd\xde\x00\xc5\xaf\xb1\xa8\x84\x5c\x84\x46\xc4\x66\x02\x85\xe6\xc2\xea\x75\xfe\x88\x01\x79\xe0\x28\x4e\xee\x8c\x0b\xf9\xfe\x2f\x91\xed\x8f\xb5\x7e\xa2\x42\xa2\xf2\x3b\x8d\x67\x05\xbc\x17\x12\xc3\x38\xe2\x84\xdf\xa0\xee\xa9\x1d\x39\x6c\x8f\x3d\x42\x2f\x9c\x59\xde\x76\xeb\x85\x55\xc3\x5a\x5d\x58\xa8\x69\xf8\x21\xa9\x66\x29\x13\xf8\xe6\x46\xf9\x75\x61\x8d\x80\x9c\x97\x6d\xbd\x8f\x10\x07\xea\x32\xb4\x5e\x0c\xde\xdb\x99\xea\x17\x10\x9c\x44\x2e\x42\x8f\xa2\xa1\x3c\xca\xdd\x6e\x4c\xa3\x50\x15\x73\x4f\x44\x85\x6d\xf6\x7c\xdc\xd8\x01\xd1\x1c\x54\x29\x6e\x5f\xd9\xd6\xe8\x03\x40\xf1\x27\xce\x84\xd3\xb2\x2a\x59\x43\x35\x5e\x74\x54\xf7\xd3\xec\x2c\x4b\xec\x34\xfb\x01\x65\x8b\x29\x00\xb8\x64\x45\xe7\xec\x22\xd3\x60\x88\x25\x61\xc0\x03\x21\x43\xd4\xa9\x60\xb0\x66\x48\x68\x31\xac\x7a\xd1\xc4\x07\x58\x5f\xa1\x40\x30\x4c\x03\xdc\x0c\x02\xd5\x63\xd1\x51\xc9\x71\xe1\x24\x09\xc0\x5a\xfb\xc9\x43\xdb\x69\xc2\xce\xf1\xf9\xaf\x76\x3b\x80\xcd\x56\xe1\x1a\x7d\xb4\xe2\x3b\x7a\xf1\x1d\xc8\x39\x1a\xc3\xe4\xe1\x72\x26\x4a\x89\x8c\xe4\xa5\x28\xc6\xb2\x4a\xc1\x44\x2f\x30\x10\xcd\x0e\xf3\xfa\x8f\x69\x18\x11\x35\x89\xa6\xfc\xab\x09\x5c\x54\x83\x9b\xb2\x3c\x3c\xff\xaf\xda\x44\x51\x21\x7b\x68\x31\x22\x0c\x8f\x40\x58\xb9\x2e\x27\x4b\x3d\x4f\xa2\x76\x09\xab\x7d\x56\xf5\x98\xfe\x81\xe0\x14\x26\xc7\xc5\x46\x3a\x07\x93\x70\x72\xde\x30\x8a\xb3\xf5\x56\x60\x76\xb9\x23\xf1\x71\xe6\x0e\xf1\x1c\x7c\x3f\xe0\x3a\xfc\x42\xaa\x12\xce\x20\x91\x1e\x16\x8e\xb0\xe3\xd8\xc5\x39\xd6\xc3\x8b\x9d\x28\x81\x46\x3f\x9c\x47\x09\x1d\x27\x89\x04\xc5\x9c\x9b\x8b\x96\x83\xc9\xe5\xb9\x59\xc8\x92\x27\x4e\x9e\x88\x21\xf8\x47\x2a\x57\x74\xd2\xd0\xae\x13\xce\x71\xc2\xcd\xee\x50\x37\x12\x7a\xad\x44\x75\xaa\xe9\xec\x7b\x4b\x2f\x9a\x0c\xa5\x31\xcf\xed\xb4\x52\xc7\xbd\x98\x88\x46\xad\x47\x43\xcd\x32\x8c\x9c\x26\x47\x88\x57\x4b\xbd\x43\x53\x06\x88\x71\x8e\x8b\xf3\xa6\x74\x7f\x98\x94\x4f\x2e\x6c\xee\xe5\x1a\xe5\xdd\x3a\xac\x81\xa8\x68\x93\x39\x8a\xcc\x17\x82\xbc\xcf\xae\xb0\x38\xe6\x9b\xf2\xdc\x81\xe7\xc8\x57\xab\xe5\x66\x33\x6b\xdc\x42\xb2\xec\x8f\x9e\x22\x64\xfa\x6c\x0b\xe3\x04\xd0\xcd\x93\x07\x85\x07\x42\x06\x7d\x18\x13\x02\x01\x56\x88\x55\x43\x39\x0a\xe4\xaa\x5a\x7d\x61\x15\x79\x2c\x97\xa9\x4f\xc3\x8f\xf4\x9d\x86\x46\x53\x8a\x5f\x6a\x3a\xc5\x00\x37\xe5\xcf\xd7\x74\x2e\xd3\x69\x29\xbe\xd6\xa0\xf6\x58\xc9\x53\x16\x7d\xc7\xda\x4c\xdd\x07\xb1\xd5\xfb\xaf\x01\xf1\xd9\xa7\xa5\xce\xc7\x90\x0e\x2e\xe8\xb4\x34\x09\x3a\xed\x4a\x7f\x8a\x1f\x2e\x74\xbf\x28\xda\x40\x3c\x56\x74\x88\x6e\x6b\xdc\xf9\x3e\xed\x66\x77\xee\x33\xec\x06\xb6\x04\x3a\x57\x04\xeb\xfc\xd4\x96\x5b\x4e\x4b\x05\x62\x59\x6a\x16\xe9\xa8\x94\xd6\xc9\x5b\x66\x84\xd0\x0f\x5b\x6a\x0b\xd6\x9b\xdd\x06\xe8\x78\x28\x9e\x41\xab\x68\xd6\x77\xb0\x40\xc9\x9f\xc8\xb6\x31\xca\x59\xef\x56\x64\x8d\x77\x3d\x92\xde\x5b\x94\xa4\xf5\xfd\x59\x16\xc2\xec\x75\x9c\xdd\x61\x17\x2b\x90\xad\xc5\x05\x7c\x2d\xce\x33\x27\xd1\x32\xeb\x45\x34\x04\xc5\x3e\xa0\x0e\x5a\x7f\x22\x49\xa4\x59\x8e\xcf\x69\x65\xdd\xf5\xa4\xb9\x00\x29\xdc\x25\xd9\x56\x5f\x6c\x58\x30\xd2\xd8\xb0\x58\xd1\x12\x6b\x05\xfe\x03\xa0\x2d\xdb\xb0\xb4\x45\x66\xc6\xad\x47\xb3\x22\x26\x1a\x28\xb2\xeb\x0a\xbf\x2c\xfb\x65\xc1\x0f\x32\xe0\xcc\x0f\x96\x4f\x41\x25\xb6\x96\x7a\x64\xf4\x42\xcc\xd9\x1f\xef\x03\xb2\xed\x45\xa9\x41\xdd\x82\xc5\x06\x93\xb9\xd7\xc8\xb0\x5a\xee\x6a\xf5\x09\x8e\xb1\xa8\xa6\x96\xd4\x08\xc2\x85\xd3\xf1\x72\x09\x22\xad\x08\x29\x4f\x71\x69\x03\x2b\x70\xac\x36\x0f\xc6\x8a\x1c\x11\x59\x42\x50\x66\x88\x39\x8f\x81\xa4\xa3\x6a\x72\x8b\x53\x12\x0b\x1a\xe6\x54\x97\xee\x8f\xb0\xdc\x82\x1e\xc6\xd5\xb7\xa6\xa6\x48\x6e\x68\xcd\x40\xa7\x8a\x8d\x6a\x16\xec\xe3\x7f\x95\x9b\xd4\xa0\x38\xa6\x49\x46\x18\xac\x2e\x8e\x75\xa3\xe7\x6a\xe3\x69\x03\x97\x35\xb7\x1d\xbd\xb6\xc5\x14\xe2\x99\x98\xfb\xa0\xe2\x94\x29\x9f\x60\x46\x2f\x28\xe3\xc6\x4a\xa3\x90\x37\x0c\xf7\x8e\x4a\x43\xec\xf3\x6b\x5c\x51\x69\x94\x38\xe3\x1a\x9f\x5e\x8e\xb3\x3c\xbd\xdc\xc2\xda\x7b\xb4\xc0\xf4\x6a\x59\x99\x16\x66\xb0\x6d\x5a\xa4\x46\x31\x80\x98\x13\x22\xdc\x5c\x58\x5f\x93\xcb\x8c\x02\x6b\xe8\xc3\xa0\xb3\x33\xce\x68\xd2\x55\x56\x70\x1c\x56\xfb\x8a\xe8\x48\x6d\xe2\x2e\x22\xad\xde\xe0\xbb\x5b\xda\x49\xd8\xe7\x9a\x6c\xa3\x7a\x6b\x4b\x7c\x3f\xee\x84\xf4\xbb\x9d\x2c\x61\xa8\xb0\x49\x32\xc9\xe5\x3d\xb2\x8e\xf8\xaa\xe5\x5c\xa6\x44\x87\xcf\xff\x20\x36\xe7\xb4\xe9\x93\xcc\x7e\x70\x3a\xbc\x5b\x19\xec\xdc\x7b\xa6\x1d\x5c\x89\x13\xe8\x38\xb0\xdd\xcd\xb5\x57\x59\xa6\x24\x1f\x76\x7e\xca\x0b\xc8\xf7\xef\x4d\x53\x4e\x54\xdb\x48\x3b\x67\xe9\x1e\x6b\xd9\x26\x5c\x0c\x7d\xbc\xae\xab\x4d\x76\x4d\x7d\xd5\x77\xff\xb0\xed\x1f\xdf\x3a\x92\x56\x94\x82\xe4\x61\x70\x39\x4b\xfd\x88\x78\x19\xf5\xb4\x29\x39\xc3\x25\x98\xaa\x18\xd4\x7e\x91\xa9\x51\x92\x81\x30\xc8\x18\xd0\x1f\x2b\xe3\x7a\x5d\x9c\x2f\x4a\x9d\x2c\x9f\x09\x7b\xba\x12\x87\xec\x6c\x32\x0c\x74\x95\xcc\xbd\x80\xb3\xb4\x8f\xdc\xbe\xa0\x60\xb9\x5c\x59\xb1\x2f\xf6\x01\x80\xf3\x9f\xa1\xb8\x28\xf6\x0f\x9a\x9b\x6d\x16\xc0\x85\x0a\x20\x22\xd6\x06\xd9\x9d\xb9\xd6\x70\x8b\x5b\x11\x68\xa9\xa4\xd2\x3c\x12\xba\x65\x95\x22\x91\x39\xd7\x48\x0b\x8d\x16\x7f\x5a\x4a\xb3\xae\x2c\xf9\x80\x82\x70\x49\x03\x2f\x41\x20\x8b\x5e\xb8\x8a\xe5\xc3\x61\x16\x48\x80\x1a\x4c\xce\x16\x36\x11\x06\xc6\xa6\x5c\x9a\x8d\xe2\x5e\xdc\xff\xe4\xe2\xd6\xa6\xf3\xb8\x9d\x99\xb9\xb1\x22\xae\x9a\x80\xb8\x49\x37\xf7\xee\x59\x7a\xc6\x5c\x4f\xe6\x34\x18\x70\x75\x26\x17\x65\xde\x58\x15\x3e\x82\xf3\x0c\xeb\x1d\xac\xf7\x09\x2d\x4e\x6f\xe1\x63\x84\x02\xfc\xd7\x52\xae\xb7\x42\x4e\xdb\xae\xf1\x10\x82\x35\x2a\x00\x44\x8d\x50\x1b\xde\x08\x53\x3a\xd6\x69\xc8\x90\x38\x9d\x59\x2a\xf5\x46\x8e\xf2\xce\x99\xb0\x90\x5a\xdc\x4c\x16\x59\x9a\xe1\xe9\x5e\x68\xff\x8e\x26\x92\xcc\x0b\x11\xdc\x4c\x3a\x18\x61\x5c\x64\x70\x33\xe0\x87\x9e\x3b\xec\xce\xf1\xe6\xab\x20\x4a\x06\x50\x84\xee\x9a\x86\xf9\x09\xa1\x9c\x0d\x40\x9b\x1e\xb8\x57\x4d\x01\xa1\xcf\x34\x79\x22\x15\xad\x0d\xa0\x08\x70\x03\xa1\x79\x3f\xf6\x88\x20\xde\x8c\x94\xd5\x26\x5e\x64\x68\xb8\x00\x26\xbb\x76\xe3\x64\xd1\x60\x08\xc5\xbb\xe9\xb8\x01\x77\xba\x79\xbb\x73\xc6\x13\xb3\x27\x38\xe4\x55\x00\x67\xe8\xec\x72\x96\x8e\xd4\xcd\x71\x2f\x5d\xcf\xec\xa0\xb8\x5d\x34\xdc\xe1\x63\xd8\xfb\x1b\xa1\x90\x60\xc0\xef\xe3\xc3\x57\x3e\xc4\xa6\x11\xf3\x2b\x80\x43\xe2\xad\xe1\x86\x54\xd2\x79\x99\xc5\xcd\x7c\x48\x05\x80\x66\x54\x0e\x27\xc8\x25\x0d\x04\x25\x84\x6a\xbc\xc0\x5a\x29\x8c\xc5\x46\x56\x17\x97\x3f\x8c\x5a\x31\x0b\xef\x4d\xc3\x0e\x62\xba\xdc\xe4\x00\x8e\xed\x35\x89\x4c\x24\xd2\xde\xbc\xe5\x43\x10\xd5\xdf\xd9\x8b\xe5\x29\x9e\x6e\x45\x42\x56\xea\x51\x48\x95\x4a\x05\x54\x06\xe2\x32\x65\x2c\xe9\x5a\x83\x84\xce\x20\x35\xc4\x01\x30\x44\xfd\x5b\x91\x67\x2b\x66\xfd\xd3\x63\x7b\x90\x08\x62\x8c\xdd\x86\x19\xb9\xdb\x2a\x18\x77\xc4\xc5\x9b\x9b\x1a\x6e\xef\x8c\x9d\x57\x1d\x2c\x08\x04\xe9\xd9\x81\x37\x0b\xf1\x72\xce\x4b\x86\x42\x97\xef\x2e\x34\xbd\x7f\x73\xcd\x4f\x82\x23\x36\x20\x6f\x06\xc1\x76\xaf\xf1\x5e\x36\xa0\x15\xbf\xec\xf0\x4b\x86\x11\x5c\x2d\x9f\x4e\x54\xb1\x1d\xeb\x77\x0e\x93\x0f\xb7\x1f\x84\x03\x2b\x6e\xa5\x5e\x4a\x00\xe7\x1e\xde\x69\x9b\xf8\xb6\x72\xeb\x1a\xd4\xcd\x65\x22\xa4\xed\x87\x65\xa4\x9f\x31\x32\xf6\xb1\xbf\x7a\x72\x15\x0c\x76\x61\x55\xe4\x59\x12\x5e\x4d\xd7\x5b\xd0\x84\x53\x64\x0f\xad\xe7\x3e\x88\x79\x70\x17\xec\x0d\x1e\xc7\x85\xbe\xbd\x31\x30\x97\xab\x5c\xf8\xe7\x48\x44\x28\xad\xc7\x68\xbc\xb3\x13\x5e\x99\x75\x7c\x81\x5c\xd1\xd3\x71\x87\x12\x6e\xcf\xaa\x99\x6d\xb9\x29\xc9\x42\xb6\x64\xde\xfe\x65\xc3\xb7\x9b\xdb\xb2\x29\x5b\x6e\x61\x18\x3d\x14\xc3\x6a\xcf\x45\xb5\xcf\x2c\x2f\x71\x92\x86\x12\x8c\xde\x49\xe7\x48\x88\x6f\xb8\x02\x8b\x59\x64\xd9\xf7\x82\x11\x06\xae\xee\x50\x40\x18\xf5\x5c\x32\x34\xa6\xba\x64\xbd\xb9\xa1\xef\x68\x47\xc9\xb2\x69\x5b\x02\x73\x69\x85\xf1\x8a\xa1\xcd\x25\xee\xed\x93\x5b\x94\x0d\x07\xe9\xcd\x0c\x10\xf1\xe4\x98\x59\x06\x60\x13\xb8\x92\xf1\xc4\x25\xe9\xab\x31\xa0\x93\x6a\x9a\xb5\x52\xad\x68\x63\xe1\x12\x1b\xec\xb9\x5b\x88\x39\x4e\x8f\x4d\xf7\xd3\xa5\xca\x1c\xa1\x4b\x72\xdb\x8f\x1f\x2b\x3d\x11\x08\x06\x03\x66\xaf\x5c\x9e\xcd\xbc\x81\xa6\x5e\xb9\xf0\x32\xac\x10\x29\x1e\x6e\x06\xd5\x92\x91\xdb\x15\x39\x82\xbd\x6a\x30\x4c\x6c\x21\x66\x2b\x7a\x73\x02\x39\xbb\x0d\xcc\xc3\xac\xfb\x53\x43\xb7\x99\xbb\xef\x1c\x5b\xf8\x35\x5a\x11\x73\x5c\xd0\xda\x81\x74\xa2\xf0\x0e\x0f\x83\xd2\x6c\x70\x25\xce\xac\x16\x24\xaa\x2a\x5e\x54\x28\x8e\x7f\x95\x09\x0c\xa3\xef\xc3\x0a\x8f\x12\xf0\xa0\x68\xf7\xa5\x3b\x2f\x32\x11\x02\x40\x34\x8b\xf6\xa5\x28\x4f\x64\x5a\xeb\x8a\x01\xeb\x4d\x6c\x3f\xb6\xea\x4e\x07\xa1\x09\x41\x00\xd2\x5e\x5c\xf7\xa1\x31\x0f\xc4\x2f\x16\xb4\xb2\xa2\x9a\x30\xf1\xb3\xa8\xb9\x2c\xe1\x11\x07\x29\x7a\x55\xa4\x69\x65\x66\x5d\x4d\x5e\x98\xec\x5d\x8f\xcc\xf8\x48\x47\x7b\x80\xae\x52\x90\x38\x4c\xce\x84\x82\x6a\xdf\x4e\x67\xb0\x05\x26\x10\x47\x7d\x46\x83\x29\x04\x78\x9a\xb0\xb8\xa6\x5b\xc4\xfb\x94\x35\x1c\x77\x5a\x58\x6d\x95\xec\xec\x75\xec\x74\x87\x4c\x2d\x04\xca\xf7\xc3\xa8\xf1\xe6\x1c\xab\x00\x03\x73\x71\x32\x89\x68\xfd\xa1\xe7\xfe\xb3\xfd\x9e\xfa\xe9\xbe\xf4\xe7\x1e\xf1\xdb\x5a\xc1\x97\x87\x20\xd2\x98\x07\x20\xc4\x73\x4d\xf7\x75\xdd\xac\x1b\xc1\xef\x6f\xa6\x8e\xca\x5b\x37\x9d\x71\x3a\xe3\x4c\x7f\xf3\x62\x95\x32\x8b\xf4\xca\x4c\x64\x9c\x65\x33\x84\xc1\xde\x40\x11\x50\x9a\x9d\x96\xf9\x4c\x50\xa4\xba\xd0\x31\xdc\x7a\x63\x55\xac\x58\x18\xba\xb7\x6c\xf5\x35\xdc\x3e\x33\x11\xd3\xf4\x73\x4a\xe6\x8c\xcb\xc7\x4c\x67\x5c\x6d\x06\x57\x0d\xb1\xbf\x2c\x5d\x11\xaa\x14\x03\xc1\xbe\x4c\x43\xc4\xe8\x88\x88\xc2\x15\xc4\x09\x4f\x6d\x72\xe0\x0e\x7c\x49\x74\xdd\x39\xf2\x80\x9f\x97\x3e\xb1\x94\xdd\xba\x70\x26\x7a\x9b\x6a\x24\x9c\xfb\x3e\x4f\x13\xc8\x99\xe0\x67\x13\x64\x16\xc4\x18\x79\x48\x28\x36\xbd\xad\x47\x75\x0a\x76\x11\xb6\x6b\x01\x61\xd7\x09\xda\xcb\x78\x2f\x90\x03\x88\xec\xf6\xf0\x7c\x58\xe0\x8c\x1e\x31\x05\xa2\x16\x40\xea\x6a\x59\x97\xd0\x8b\x91\xae\x10\x70\xe0\x8e\xea\x6e\x45\xeb\x06\x7d\x40\x7d\x1e\x4d\x22\x32\x74\xe1\x22\x9d\xe2\x70\x80\xef\x1f\xa2\x08\x61\xc5\xe7\xa3\x54\xae\x6a\xbe\xb6\xd4\x9e\x88\xf6\xc9\x3c\x4f\xf4\x67\xfc\x83\xc6\xcb\x4d\x71\x87\xc3\x1d\xf3\xc5\xb8\x3b\x9a\x44\x40\xe3\xd6\x49\xb0\xa6\x96\x71\x44\x90\x9b\xb8\xc4\x28\x1a\xc7\xe0\xb1\xc2\x14\xdb\x0a\x53\x4c\xf9\x70\x34\x3f\x8c\x3c\xe5\x8d\x98\xf2\x82\x0b\x8b\x6d\xf6\x0b\xc0\x69\xea\x13\xdc\x58\x38\x09\xa8\x95\x9c\x65\xc2\x6a\xc7\x0a\x01\x9e\xd0\xb3\x79\xf3\xb5\x92\x33\x62\x69\x23\x56\x9a\x4a\xd0\xc7\x8b\xfe\x08\x17\xec\x32\xd2\x7b\x73\xa9\xdd\xcc\xb5\x40\x27\x46\xf5\x98\xce\x34\x9d\x38\xb4\xb3\xbf\x84\x57\x4e\xbc\x3a\x4f\xe1\xd5\x75\x3a\x2b\x57\x34\xa9\xa5\x42\x91\x27\xb5\xd7\x40\x41\xa5\x21\x8a\x38\xa3\xef\xc3\xd9\xb7\x3b\xeb\xd5\xb4\xaa\x6a\x5a\x3d\x82\x5b\x65\xde\xca\x68\x04\x0c\x8a\x7d\x58\xa5\x52\x30\x2a\xf7\xa4\x0e\xac\x01\x72\x0c\xb0\xfb\x5c\xfd\x21\x0b\x44\x84\x5a\xe4\x72\x47\xdc\x32\xcf\xe9\x3c\xbd\x9f\xae\xe9\x32\x2f\x5c\x95\xba\xcc\xfc\x81\x62\xa1\x72\x8d\xbc\xcc\x42\xff\x05\xdf\xf9\x7d\x9f\xcb\x08\xe5\x48\xd9\x8d\x27\x2d\x18\x52\xb3\x2d\xa2\x15\x58\x21\x9f\xde\x40\xef\x37\x14\x07\x93\xb7\x67\x4d\x42\x78\xa3\x81\x91\xce\x56\x11\xbf\x8b\xcd\xd6\xd1\xfb\x5c\x28\x49\x52\x45\xea\xea\x65\xd6\xd5\x40\x25\x86\x97\xf4\xd6\xd9\x13\x8e\x41\x34\xf1\x68\xc5\xe3\x2c\x02\x88\x7b\x66\xe8\x23\x52\x28\xd6\xbb\xed\x66\x79\xd8\x1d\x56\xb1\x68\x7c\x19\xc8\xe6\xbe\xcc\x16\xe3\x74\x19\x47\xe9\x73\x9c\x8d\x2e\x40\x61\x9f\x5c\x48\x34\xe2\x13\xb8\x70\x11\x71\x62\xd1\xb5\x50\x5f\xc4\xb0\xb3\xfc\x5a\x3c\x80\x34\x44\xd9\x76\xc4\x39\xce\x6f\x1d\x40\xf7\x1c\xac\x13\x03\x6e\x27\x97\xc1\x8a\xc7\x65\x3e\x94\x21\x28\xc1\x71\x84\x91\x70\x80\x9a\x58\x75\x72\xeb\xf0\x32\x1f\xf7\x35\x79\xa3\x82\xf4\x0b\x96\x40\x01\x92\x39\xc9\x07\x94\x92\xe7\x08\xf8\x8f\x79\xc5\x5a\x18\x5d\xe6\x06\x80\x7f\xfe\xd3\xcc\xe3\x29\x06\xf2\xdd\x43\x31\xac\xbe\x9a\xce\x9f\xcc\xc6\x5a\x42\xee\x79\xcf\xeb\xb1\x84\x50\x85\xd0\x3d\x43\x7f\x7b\xb4\x69\x82\x78\x70\x89\x81\x44\x6a\x7c\x3b\x4c\xfb\x78\x2f\xc9\xe0\x63\xe0\x68\x11\x1f\x7c\x19\x5f\xbe\xac\xc2\xd6\xfe\xf2\xad\x7a\xef\x16\xca\x3b\x56\xd2\x77\x58\xde\x8f\xba\x8b\x76\x58\x78\xb6\x1f\xfc\x01\x2a\xca\x2c\xf0\xfa\x34\x03\x5f\x51\xa2\xb8\xce\x15\x01\x58\x5b\xb9\x42\x04\xb7\x9a\x00\x1d\xb5\x2c\x48\x7d\x0f\x5c\x84\xa1\xa8\x2a\x7e\x98\x02\xa7\x87\x0d\x85\xcb\xf1\x70\x21\xcf\x9b\xb9\x00\x0b\x15\xd5\x71\xd8\x90\xc5\xe4\xe0\x07\x53\x2e\x93\xcc\xea\xa0\x15\x64\x6d\x7a\x41\x71\xc8\xd4\x24\xed\x9b\x89\x05\x95\x81\x34\xb4\x1a\x02\x60\x6f\x00\x93\x68\xdd\x64\x8f\xa8\xfe\x69\x91\x7a\x96\x16\x3c\x1c\xc0\x20\xee\x53\x97\x41\x7e\x19\xb4\xda\x64\xf1\x88\xcc\x40\x3b\x92\x9e\x6c\xb3\xfd\x16\x7b\x6f\x1a\xf4\x08\x6c\x16\xcd\x8a\x9f\xa2\x21\xd0\x8a\x26\x61\x8f\xe7\x32\x89\xba\xa5\xa4\x32\x89\xdf\x2e\x81\xce\x49\xda\x39\xde\xfb\x66\x4d\x6a\x87\x2c\x89\xee\x20\x86\x55\xac\x00\x71\xf5\x91\x75\x6e\x02\x5d\xd3\xa1\x70\x17\xc0\x67\xdd\x2e\x93\x0e\x2e\xb5\x74\x18\xb6\xcd\x15\x0e\xaf\x5f\xc0\x3c\x99\x15\x7d\x61\xc2\xd1\x20\xd1\xfb\xfc\x55\x68\x6b\x3b\x4a\x0d\xc5\x8e\x50\x1e\xc9\x2e\xac\x05\xd1\xc4\xa6\x6b\xde\x4b\x7c\xf0\x64\x05\xe9\xec\x2c\x73\x35\x68\x65\x91\xd1\x7a\x49\x83\xa5\x5c\x04\x20\x66\xc5\xa1\xda\x23\xbb\x73\x17\x84\x07\xcc\x6d\x37\x6f\x2f\x93\x51\x3c\x79\x6b\x4d\x93\xd0\xe5\x01\x5a\x6f\x95\xf1\xac\x38\xe9\xf0\x9c\x34\x2e\x6e\x42\x57\x1c\x98\x2d\x89\x87\xad\x7c\xf1\x82\x38\x74\xee\x41\xf2\xc6\x2d\x37\x6f\x52\x57\xf2\x86\x73\xaf\x40\xa5\xbe\xa0\x77\x5f\x0f\x28\xdd\xaf\x63\xf4\xfd\x78\x46\xbf\xe9\x1c\x31\x69\x71\xb9\xd8\x97\xc9\x1f\x74\x31\xb9\xf0\x7a\x09\xa3\x28\x46\xcd\x8b\x62\x5b\x8f\x42\xd0\x79\x71\xcd\x09\x29\xf6\xb2\x8e\xbf\xb5\x33\xb9\x84\x93\xf5\xac\x93\x25\xf2\xaf\x18\x8a\x64\x99\x37\xe9\xe7\xcb\xbc\xcd\x9c\xe9\x65\xde\x96\xb8\x4e\x4d\x3e\xf9\xe3\x18\x39\x08\x55\x0f\xcb\xbc\xed\xd2\x77\x17\x7e\xff\x0e\x80\xf3\xac\xcc\x1b\x4b\xf7\x07\x2c\xd2\x1f\x96\x79\xbb\xb8\x69\x70\x35\x2b\x78\x0f\x92\xc1\x2b\xf1\x00\x45\xb0\xa2\x19\x15\xbc\x9a\x17\x93\x82\x3c\x42\x09\x55\x35\x59\xb9\x91\x12\xc6\xc9\x6b\x81\x12\x55\x7e\xe7\x0d\xa0\x05\xfc\xe6\x81\x80\x10\x57\x9f\x82\x17\xc3\x82\x38\x6d\x05\x58\x5a\xab\x24\xd0\x8b\xb2\xe0\x7d\xa5\x77\x43\x23\x4f\x5a\x45\x63\x20\x95\xbe\xc8\x93\x44\x8c\xac\x8f\x62\x23\xcf\xe6\x90\x48\xe7\xcd\x4a\xb6\xe0\x84\x75\x47\x12\xd9\xfc\x71\x1d\x1e\x92\xc3\xd8\x7d\x91\x37\xe2\x41\x72\x13\x21\x60\x9b\x67\xc4\x91\xe0\x2b\x5c\x48\x6d\xc3\xd4\x99\x35\xe9\x88\x8b\x4c\x11\x2e\x53\x67\x70\x02\x95\x19\x82\xd3\x4a\x0d\x39\x2d\xa4\x6d\x12\x58\x2b\x47\xf0\xb4\xde\x86\x15\xcd\x8d\x8f\xaa\x41\xc7\x36\x1f\xa1\xe6\xe1\x69\x23\x78\xac\xd3\x52\xe4\xce\x96\xad\xd4\x27\x5c\x34\xf4\xfe\xd1\xff\x65\x13\x2a\xe7\xdf\xcb\xa1\x50\xfe\xe0\xf4\xaf\x59\xfe\x3b\x3c\x77\x5d\x7f\x92\xb2\xbf\x8b\xcb\xe4\x0f\xef\xc0\x71\xba\x6f\x71\x7b\xbf\x0d\x97\xf1\xcd\x8f\x61\x11\xb0\xcc\x38\xdc\x19\x0a\xc7\xff\xfe\xae\x31\x52\x9d\x79\x4d\xd7\x3c\x5d\xcb\x74\x59\xe2\x47\xc8\x85\x35\x9f\xb7\xcb\x1b\xc0\xa3\xeb\x56\xe2\x7f\x09\xb7\xc1\x9a\xe1\x0a\xd0\x4c\x3c\x14\xf8\xea\xcb\x26\x5a\xb7\x1f\x86\x8f\x12\x62\x68\x3e\x1c\x54\x3b\xa0\x59\xfe\x72\x44\x0c\x88\x00\x3c\xbc\x5a\xd3\xaf\x05\xc9\xb3\x14\xb8\xe0\xd1\x7c\xa4\xf1\x49\x76\xe3\x2f\xc8\x86\x42\x2c\xb2\x45\x94\x32\x7b\x8f\xa7\xc1\x44\x57\x7e\x11\x29\xfd\xaa\x22\x24\x66\x44\xcf\x18\xe1\x18\x0f\x1f\x5a\x6e\x11\x26\x76\x2d\x37\x42\xb9\x1c\x99\x55\x5a\x77\xcc\x50\xd5\x62\xbe\x10\xc1\x1a\x57\x4d\x6b\xbe\x1c\xff\x17\xfd\x5f\xec\xdf\x0b\x96\x5e\xef\x48\xbd\xa3\x7d\x31\x0f\xca\x3a\xaa\x9f\x7d\xf1\x4b\x09\x04\x50\x6d\xad\xcc\x10\xec\x62\x7d\x07\x14\x81\x85\x1a\x84\x5d\x78\xdc\x46\xdd\xb2\x16\x8d\xae\x5f\x8e\x26\xf4\xe1\xb7\xbe\x2e\x6b\x61\xeb\x83\xc1\xc5\xda\x8f\x45\xcc\xa0\xcb\xe7\xc0\x9c\xb4\xb5\x01\x36\x0e\x36\x3e\xba\x57\x9c\x3c\xbc\x66\xc9\x1a\x59\xa3\xde\xca\xba\xd5\x12\x4b\x0a\x61\x75\xfc\x08\x2c\x30\xec\x8b\xa7\xa4\x75\xba\x79\xc9\x78\x15\x34\xba\x22\x26\x71\xb1\x12\x1f\xe1\x2e\x2d\xce\xb2\xde\x2c\xa5\x25\xb2\x46\x11\x71\xd9\x86\xcd\x3a\x70\x2d\xf6\x1f\xa6\x5d\x96\x18\x77\xeb\xe7\x51\xa1\xfc\x32\xea\x8b\xe7\x74\x8b\x04\x70\x02\x11\x34\xf3\x52\xd0\x69\x76\x78\x59\xff\xa1\xbe\xdd\x7a\xff\xb2\x1c\x1f\xef\xf1\xf8\x00\x83\x66\xc4\x1c\x17\x81\xe8\xad\x00\xf0\x6c\xfc\x48\x2f\xaf\x0a\x13\xd1\xa2\xe2\x79\xab\x89\x50\xe6\x92\xf7\x5e\x9e\xd0\xb9\xac\xe7\xd1\xdf\x7a\x58\x40\xb7\x28\x19\xe9\x2f\x57\xf2\xbc\xc1\x33\x8a\x56\x98\x37\x56\x61\x3f\xc8\x60\x66\x43\xf6\xf6\x5e\x30\xdd\x80\xd0\x6b\x1e\xcf\x6c\xb2\xab\x43\xc3\x4e\xf6\x8a\xfe\x4d\xa0\x19\x84\x56\x01\x53\x66\x4d\x2c\xe4\x8f\xa3\x70\xb3\xb4\xc5\x0c\xa2\xa8\x36\xc1\x72\x1b\x52\x43\x6d\xae\xdd\xc9\x1d\x90\xd3\x95\x0b\xf7\x7a\x56\xda\x70\x6b\x3b\xa5\x8c\x82\xb9\xa7\xeb\x3d\x5d\x1b\xe2\x4e\xea\x0b\x85\x09\x84\x59\x1c\xa3\x20\x5f\x13\x34\xf8\xbe\x99\x1d\xca\x4e\x6d\x81\x74\x31\x0d\xeb\x12\xe3\xc2\xde\x85\xd5\x42\xc7\x7b\x3d\xd7\x86\xb2\xde\x4c\x7a\xb3\x8a\x31\x86\x80\x6b\x3a\xf3\xb8\x1b\x4e\x69\x5e\x9b\x29\x21\x22\x06\xf5\x98\xae\x0d\x1d\xe5\x66\x11\x27\x6b\x8a\x35\x89\x01\x3f\x59\x09\xc8\x4d\x98\x1b\x34\xa9\x2f\x93\x52\xbc\x34\x86\xf7\xa0\xa8\xb2\x10\x9a\x37\xe3\xc4\xb0\x7d\x94\xaa\x44\xd0\x35\x1d\x69\xb3\x16\x6f\x4e\x01\xe4\x8e\x38\x8f\x81\x64\x7a\xbc\x59\xfb\x15\xcf\x44\x5a\xf7\xb5\x59\x0f\x4b\x1e\x49\x49\x34\x48\x5a\x46\x97\x2b\x1b\x27\x0d\x23\xdb\x66\x0b\x9f\x23\x24\x54\xd8\x17\x18\xdf\x90\x70\x4d\xa0\x0f\x2c\x1b\x65\xa4\x5b\x68\xba\xb4\xb9\xf7\x9b\x55\x38\x21\xbd\xb0\xee\x9b\x01\x55\x4b\x14\x87\x5b\x77\xe3\xad\x4d\x4e\x13\x14\x86\xdb\xa1\xbc\xc0\x06\x6e\x6e\x3f\xb8\xe7\xde\xdc\x9e\x2d\x7f\xef\x52\x3e\x2f\xb0\xc2\x9b\x0b\xf3\x86\x12\xc1\x94\x7e\x6b\x67\x20\xaf\xcd\x1d\x33\xd8\xb7\xcd\x1d\x78\x8e\x92\x00\x57\x02\xe8\x39\x18\x45\x16\xd6\x39\x93\xdd\x71\x8c\x98\x1e\x47\x8c\xe9\xc2\x70\xbd\xb9\x23\x19\x04\x7c\x64\x56\x69\x80\x23\xbd\x18\xf9\x9e\x0b\x5e\xb8\x61\x88\x8e\x7a\x73\x07\xaf\x75\x6c\xee\x90\xda\xe1\xf8\xdd\xcc\xc2\xd0\xcd\x98\x1d\x02\xae\x6e\x65\x74\xc4\xe8\x19\x5d\x2e\x2c\x8c\x6e\xd1\x78\xb0\xd9\x1c\xa7\x29\x7f\x38\x11\xf9\xc3\x19\x94\x3f\xac\xf5\x9c\x23\x24\xe9\xca\x85\x55\x29\x10\xac\x83\xe0\x43\xb1\x66\x46\x6d\x70\xc4\xdc\xbb\x22\xc8\xa2\x81\x31\xe2\x30\x8b\x9d\xa9\x5f\x01\xa8\x02\x16\xb3\x0b\x92\xfa\x41\x48\x62\x57\xec\x9b\xe3\xcd\x4f\x53\x08\x40\xcd\x21\xd4\x83\xcf\xbb\x2b\xe2\xa0\xe0\x86\x80\xc0\xc4\x3d\x80\x2b\xf6\x92\x2c\x26\xd4\xfc\xbe\xba\x7b\xbc\x26\x44\xa8\x99\x8c\x1a\xea\x4a\x7b\x5d\x14\x18\xad\x11\xfa\x15\x13\xfb\x9d\xb8\xc3\xc1\x36\x0d\xdb\xa2\x28\xc7\x05\xe2\xac\x71\xd3\xf4\xcd\xde\x47\x6f\x1f\x2c\x16\x2e\xa1\x72\xbf\x25\x28\x4d\xcf\x9b\xa9\x44\xa1\x47\xdc\x22\x32\x89\x1f\xbc\x26\x1d\x69\x88\xd8\xc2\x84\x8e\x20\xa5\x46\xc6\xe4\xa1\x16\x56\xbd\x15\x9e\x73\x13\xeb\x64\x07\xfd\x03\x26\xa8\xdb\x8d\xf6\xe7\xa6\xcb\x51\x3a\xdc\xfc\x69\xf1\x83\x20\x1f\xd1\xb8\x8f\x70\x78\x3c\x96\x35\x79\xec\x95\x08\xe4\x1a\xe9\x54\xa6\x6e\xfe\xf0\x2b\x7b\x97\xc3\x95\xb2\x8b\x5f\x9a\x27\x0d\x04\x97\x24\x0d\xfb\xd4\xeb\x93\x5e\xa0\x51\x63\x76\x0b\xe5\x2f\xa9\x6c\x87\x0a\xd5\xc9\xd0\xeb\xc4\xa1\x0d\xb0\xf9\x66\x65\xa1\x59\xaa\x7b\x5b\x1c\x46\x21\x30\xd8\x02\x6a\x0c\xbc\xea\xe3\x24\x2c\x59\xa5\x74\xeb\xca\xf1\x5b\x79\x71\x88\xfb\x3c\xb7\xf2\x32\x26\x23\xf2\x55\xd2\xe3\x97\xd9\x70\x47\xe6\xfc\x62\x5f\x16\x63\x1a\xae\xc5\x4a\x38\x7e\x79\x3b\xaa\xfe\x04\x30\xbf\x72\x9e\x79\x30\xe7\x17\xcf\x11\xc5\x1d\x5e\x36\xe9\x8e\xb8\xd2\x61\x5e\x3b\xae\x19\x5f\xae\x0d\x94\xc4\x88\xed\x18\x62\x85\x25\x73\xbc\x30\x87\xeb\x27\x6b\xb7\xe3\x30\xc1\x70\x1e\x35\xd3\xb5\xe5\x38\x00\xe2\x69\x01\x0f\x31\xdc\x5f\x08\x6c\x3f\xa0\x85\x99\x9a\x3c\x34\x5e\x60\x75\x60\x0e\x9c\x30\x07\xd0\x99\xdf\x44\x1f\xe2\xf8\x1e\x16\xe9\x2f\xb3\x36\x5d\x72\x34\x2c\xaf\x64\xcd\x87\x51\xa5\x06\xe8\xc2\x32\x63\x98\x4b\x0d\x23\xdb\xfa\x23\x22\x72\x7f\x9a\x34\x9e\x9e\x12\xf0\x48\x0b\x01\x89\x71\x58\xd6\xf6\x71\xe3\xb5\x4d\x17\x1a\xb7\xea\x82\xe4\xf2\xb8\x96\x4b\xf8\x1f\x3f\xd2\x4c\x90\xd9\x73\x02\x56\x34\x9a\xa8\x73\x10\xbb\x13\x7f\xe3\x25\x9a\x97\x7a\x40\xf8\xc0\x82\x12\x60\x6e\x16\x0f\x77\xb0\x59\x12\x27\xa9\x47\x92\x57\x3b\x08\xcc\xc9\x5a\x4e\xbd\x3c\x22\x09\x88\xae\x9c\x40\x41\x17\x4e\xa8\x4a\xe3\x0a\x0b\x2a\x59\x58\xfa\xd5\x5f\x26\x90\xab\x08\xaf\x35\x5f\x42\xee\xf5\x62\x57\x76\x6d\x89\x63\xf4\xae\x9e\x89\x1e\x29\x40\xc9\x20\x16\x77\x08\x24\x3e\xe5\x2d\x1e\x0c\xc0\xae\x8a\xbd\x95\x99\x27\x17\xd6\x96\xb5\xeb\x28\x2e\x6e\x1b\x61\x55\x2d\x8c\x08\x64\xd9\xda\x0a\x67\xc5\x73\x90\x0c\x12\x78\x5c\x17\x24\xa1\x1f\x2e\x85\x8f\xb7\x9b\xb9\x10\x0a\x97\x07\x4c\xb9\x6d\x87\xa0\x4a\x32\x92\x32\xba\x42\x17\xa4\x2e\x15\x9b\x7a\x8e\x10\x86\xc0\x28\x21\xba\x8d\xb5\x95\x03\x4d\x94\x64\x43\x88\x29\x1c\xaa\x6c\x70\x67\xc8\x31\x2b\xa9\xd7\xac\x2f\x19\x70\xf7\x86\x96\x9d\x2c\xb6\x5a\x53\x87\x9c\x3d\xc9\x32\xf3\xe5\x12\xfa\x9d\x0e\x42\x23\xc0\x63\x39\x48\x89\xf4\xe2\x9a\x60\x73\xcd\x26\x39\x86\x85\x03\xc1\x6a\x15\xeb\x2d\xf0\xb6\xc8\x4f\x90\xfb\x60\x06\xb9\x21\xaa\x4f\x3c\x42\xb3\x20\x82\xcb\x65\x19\x8e\x5d\xb6\x33\x0f\x4e\x7a\xb6\x43\x98\xca\x2c\x6f\xcc\x15\x2b\x51\x05\x97\xcb\x07\x94\x96\x0f\x98\x66\x9a\x49\x0b\x30\xb8\x68\x50\x73\x05\xe9\x02\xaf\x42\xaa\xac\x43\x39\x2c\xa5\xdd\x0c\xa4\x47\x46\xc7\x52\x6c\x30\xab\xdd\x23\xec\x6c\x46\xba\xb5\xb2\x2d\xc9\x5c\xc4\x3a\x0a\x44\xf4\x18\x8e\x7a\xc0\x74\xe8\x14\xbb\xb4\xa9\x57\xcc\x36\x3f\x07\x68\x3e\x8b\x9c\x01\x82\x58\xc0\xd4\x58\xfb\x8d\xc8\xaa\x22\x13\x9e\x86\x46\xf8\xf8\x26\xbd\x99\x97\x11\x9e\x6c\x9e\xb2\x08\x87\x66\x46\x0c\x97\x3b\x2d\xba\xbe\xd3\x92\xd9\x97\xfe\x60\x7c\xa0\x51\xbe\x7c\xa6\xeb\x43\x0c\x8d\x9f\xae\xfd\x33\x5d\x71\xba\xb0\x9f\x15\xcd\x72\x99\x3f\xaa\xaf\x11\xeb\x28\xf1\xf5\xb2\x6b\xa4\x78\x44\xd9\x17\x8c\x98\x25\x47\xfc\x7b\x49\xc4\x81\x68\x24\x9b\xae\x48\x7e\xc2\x03\x9a\x8a\x45\x0f\x56\x3a\xfa\x37\xb3\x53\xd1\xbf\x37\x3c\xe7\x4a\xa8\x33\x38\xd1\xbf\x51\x49\xa3\x7f\x27\x1a\xf5\x58\x37\x94\x8d\x0c\x9d\x82\x95\x2d\xe4\x17\xba\xc7\x88\x63\xd3\x31\x88\x0d\x4a\x58\xf4\x27\x87\x79\x62\x59\x91\x11\x85\xc2\x61\xec\x26\x70\xb5\x20\x34\xa2\xb0\xcb\x36\x2d\xd0\x07\xa3\x4d\x1c\x6f\x1f\x00\x0f\x24\x83\x59\xdc\x5f\x50\x88\xc1\xa3\x3e\x82\xd5\x77\xa4\x59\x4a\xdc\x6d\x32\xa4\x89\xce\xc5\x0f\x4d\x7a\x8e\xd8\xf6\x8e\x00\x46\x3e\x86\xf6\x0e\x3d\x43\x9e\xeb\xc7\xf6\xb4\x24\x60\x3f\xcb\x71\xc5\x10\xe0\x3b\xac\xf4\xfa\xc1\xe9\x8b\xcb\x8b\xd3\x1f\x17\x7e\xf0\x9e\xd1\x1f\xf4\xd9\x40\x9e\x16\x63\x4c\x3f\x00\x84\x7f\x6b\x78\xd8\xc0\x1a\x31\xa1\xd8\x00\xb7\x37\x20\x61\xc3\x08\xd7\xd2\xf4\x32\x8c\x4a\xf3\x87\xba\x00\xb3\x08\xec\x71\xb5\x81\x77\x8d\x62\x5c\xd6\xc4\xf3\xc6\x18\x97\xcd\x5e\xe2\xc3\xd6\xcd\x5c\x77\x23\x39\x44\x20\x71\x84\x7c\xb7\xc5\x05\x0d\x7d\xc4\x12\x2f\xb9\x13\x38\x2c\x0f\x7b\x04\xc1\xf9\x10\xc0\x69\x16\x42\xa9\xd2\x1c\x10\x00\x15\x36\x62\x3c\xbd\x18\x61\xd5\x98\x00\x75\x48\xa4\xb7\x90\x4a\xe5\xf5\x84\x18\x7b\x2b\x8a\x8b\x14\x17\x83\xf6\x35\xa6\x4f\xcb\x0c\xee\x38\xd1\xc6\x63\xe4\x76\x42\x2d\x38\x46\x2f\xf8\x6d\x3d\xd3\x6b\x5f\x00\xec\x84\x78\xe2\xdb\x60\x1b\xa3\xef\x75\x95\xda\xc1\xab\x16\x24\xc8\x1f\x86\x0b\xcc\xe7\x0e\x24\x19\x52\x33\xa1\xb3\x6f\xc9\x78\x47\x3a\xa7\xbc\x7c\x49\x6d\x93\x6f\xcc\x44\x63\x62\x06\x2c\xa6\xe5\x15\xd1\xd4\x53\xe3\xba\x62\x5a\x86\x4d\x8e\x5d\x5a\x46\xaf\x16\xd3\x72\x78\xe2\x28\x62\x5a\x64\xaa\xc4\xd9\x93\xba\x68\x33\xc6\x6d\xa3\x2c\xa6\x0f\x78\x3c\xd2\x79\xc9\x88\x90\x04\xca\x6b\x82\x2d\x5b\xd3\x47\x36\x0d\x81\xaa\x20\x89\x03\xe9\x5c\x4c\x80\xad\x1b\x48\x1f\x1d\xb7\x0f\x6f\xea\xcb\xd3\xad\xa2\xf3\x76\x42\x4c\xbc\xb3\x1d\xd3\xe7\x70\x76\x66\xbf\x79\x67\x8a\x86\x40\xf0\x30\x31\x7d\xf8\x8e\x24\x21\x5e\xb7\x24\xd0\x82\x42\x77\x38\x64\xe8\x34\x8c\xe8\xc1\x9b\x7d\x36\x19\x41\xec\x9c\x9e\x5d\x7a\xcb\xb4\xf3\xd2\x5c\x17\xb9\x43\x28\x61\x1d\x36\xa6\x9d\xc9\x8c\x75\xd4\x98\x76\x69\xf5\xa9\xb5\xab\x84\x4b\xc7\xd0\xa5\x0f\x49\xe9\xe6\xad\xbf\xd8\xc4\xd0\x01\xb1\xc1\xe6\x8e\xd1\x07\xa5\x9c\x6d\x61\xf3\xc2\xde\x83\xe8\x4b\xea\x04\x55\xfe\x71\x8f\x5e\xc3\x22\x16\xab\x54\xa4\x2b\x53\x0c\x8e\x7d\xba\xd2\x74\x31\x1b\x90\x0c\xca\x3e\xb5\x5d\x71\x79\x87\x1a\x3a\xb2\x24\xe1\x18\x35\x24\x0b\xb1\x2a\x41\x52\x2d\x83\x45\xcb\x5f\xda\x8c\x38\xd9\xf9\x83\x3a\x99\xa4\x5d\x93\xce\xf9\x87\xbd\xd3\xd4\x56\x1a\x93\xcc\x24\x48\xf7\x1d\x70\x98\xb8\x55\xc2\x5a\xeb\x43\x53\x9b\x9a\x31\xe0\xda\x2a\x6b\x53\x49\x38\xd1\x24\x1c\x25\xeb\xdd\x61\x2e\xac\xf2\x6e\x4e\xc2\x72\x85\x18\xf1\xd2\x37\x21\x6c\xcf\x11\xc4\x17\x8e\x99\x93\x24\xc9\x22\x40\x8a\x61\xe5\x75\x5b\x46\xdd\xb0\x19\xf5\x02\x23\x82\x7a\xd6\x1e\x87\xd8\xf8\x8b\x24\x1b\x35\xe9\x0e\x16\x41\xb3\xdc\xd8\xab\xfa\xb7\xe5\x51\x13\x8f\x0b\xf3\x88\x57\x93\xa7\xf9\x18\xc4\x2c\x5d\x35\x95\xaf\xe3\x0d\x26\x40\x80\x3c\x5d\xb7\x9d\xae\x9b\x6c\xdf\x21\x4c\xd7\x0d\x7e\xe3\x6f\xfa\x33\x3e\x62\xbd\x88\xec\x41\x6c\x8b\x19\x80\x38\x5f\x40\xeb\x1a\x08\xf2\xb1\x19\xb8\x66\x00\x19\x32\xc4\xdb\x30\xb5\x1b\x01\xc7\x76\x7b\x2f\x18\x5b\x75\x1c\x50\x99\xfe\xe6\xe9\x6f\xf6\xd3\xdf\x32\xfd\xd9\x97\x9d\xa7\x3f\x1b\x9c\x21\x35\xce\xe9\xce\x05\x68\x71\x66\x0d\x58\x7a\x00\x15\xe7\xcd\x22\x4e\x36\xc4\xd5\xec\x37\x03\x6a\x12\x62\x63\xf5\x31\x67\xf1\x05\x62\x6b\x08\xb0\xfd\x63\xa3\x41\x83\x51\x7c\x0d\x04\xdb\x29\xd2\x88\xcd\x48\xee\x7d\x12\x3c\x36\xb3\x36\x54\x36\xe3\x77\xb1\x7c\x6c\x37\x25\x42\x10\x12\x6d\x53\xcc\x36\xb1\x21\x62\xe3\xa6\x3f\x07\xf1\x48\x16\x77\x77\x88\x88\xb9\x26\x13\xa6\x3f\xfa\x1c\x0d\x22\x96\xa6\xbf\x6b\xfa\xbb\x3d\x19\xdf\xde\xee\x50\x29\x4b\x6f\xcf\x57\x3c\xff\x6e\x1f\xa1\xcc\x26\x1d\x00\x88\xdf\x40\x36\x0d\x7c\x03\x7a\xa8\x14\x77\x2b\x28\x8a\x47\x59\xb4\x92\x50\x3e\x37\xe4\xc1\x50\xb5\x17\x08\xf7\x37\xb9\x87\x19\xda\x1d\x69\x75\x9f\xee\xe9\x36\xaf\x17\xa9\xf3\x56\x58\xa5\x6a\x0d\xd0\xfa\x5c\x10\xf9\x49\x71\x67\x7a\x53\x1f\x72\x9b\x65\xba\xf9\xf8\xd8\x8d\x73\x57\x50\x29\xf7\x6e\x43\x5f\x3f\x1f\x33\xdd\x86\x28\xe2\xc9\x6e\x73\xc4\x0f\x54\xe0\x03\x8a\x4d\xd3\x6d\x12\x6c\xa7\x17\xcb\xcb\x9c\x70\x4d\x82\x14\x4a\x2f\x74\xc4\x2b\x2d\x26\xed\xd0\xb1\x6a\x49\x80\x63\x92\x96\x5c\x1c\xa2\x93\xf6\xea\x3f\x70\x03\xf3\x78\xb6\xd9\xde\x6d\x12\x31\xb2\x0c\xe2\x35\xdd\x26\x6f\x3b\x42\x2d\x66\xdd\x60\x5e\xc8\x5d\x25\x7f\x2b\xc7\xb0\x16\x47\xd1\xbf\x3c\x29\xbc\xad\x7b\x1b\x88\xe8\xba\xcd\xc5\x11\xbf\xb0\x77\x76\x9b\xaf\x29\x66\xba\x97\xe9\x5e\xf2\x74\x5b\xde\x52\xb8\xdb\xde\xe6\x6d\x4d\x82\x82\x31\x93\x40\x37\x86\x67\x56\x8e\xb4\xdc\x96\xc6\x1e\xa8\xdc\xd3\xde\x76\x5d\xa1\x20\xe2\xd6\x2f\x89\xad\x79\xf2\x05\x6b\x3c\xac\x61\x9e\xde\x60\xea\xd0\x12\x13\x2e\x18\x19\x06\xb8\xf1\x8a\x08\x13\xde\xae\x59\xa0\x84\x48\x10\x6b\xcc\x02\x79\xd5\x94\x09\x4e\x2c\x43\x1a\xe2\x6e\xeb\x91\x0d\x54\xb6\x36\x50\x0e\xd8\x48\x7f\x8e\x2e\x69\x89\x22\x90\x5e\xf4\x25\x6f\xee\x84\x5e\x6c\x22\x9e\xa1\x23\x09\x18\xf2\xdf\x4e\x3b\x90\xe4\x09\x6f\x04\x51\x67\x2f\x38\x52\xe1\x00\x62\x7c\x67\x28\x79\x5c\x1c\x29\x64\xf5\x9a\x6e\x37\xdd\x6e\x99\x1e\xb2\xef\x6e\x47\xb5\xc3\x1d\x87\xb3\x13\x1a\xe7\x1d\x5f\xd3\x4d\x49\x81\x98\xac\xc4\xba\x00\xaa\xd5\x71\x61\x62\x35\xa4\x6c\x50\x6a\x2a\xa4\x3b\x28\x01\x1a\x1b\x6d\x6e\x07\x9f\x8f\xf7\xe3\x49\x79\x4b\x29\xc5\x8f\xf5\xd3\x4d\xb3\x91\x3b\xc2\x01\xc4\x7c\xdc\x31\x41\xf9\x20\x84\x1a\x56\x9e\x8e\x00\x72\x0d\x21\x84\x26\x4b\x48\xac\xe5\x09\xe2\xfb\xa6\x87\x10\xbf\xfb\xe0\x5e\xf8\x4e\x79\xba\x89\xdf\xa7\x4e\x50\x00\x19\x33\xa2\x46\x5f\x4a\xe2\x4f\xa9\x91\xb1\x98\x50\x58\x8c\xdc\x5d\xa9\xe4\xea\x3c\x9b\xe9\xae\x1e\x98\x32\xa1\x7a\x8b\x75\x92\xbb\xfe\x57\x71\x3b\xec\xa6\xf4\x7e\xa7\xaf\x79\x99\xd5\x3b\xea\x8b\xbe\x66\x36\xa5\x06\xd2\x3f\xd3\xd7\x2c\x8b\x23\x0d\xdb\x37\x5f\xe3\x5e\xa6\xe4\x4a\x20\x91\xcd\x8f\xd9\xa0\x16\x52\x6b\xfe\x98\xe9\x6b\x76\x6a\x9f\xa4\x3b\x56\xc3\x62\x52\x07\x6e\xfa\xf2\xa4\xfd\x6b\x44\xac\xf5\x17\x83\xcf\xdf\xed\xeb\x4e\x18\x47\xb2\xbf\xe6\x30\xc5\x9a\x25\x12\x2a\x0e\x81\xe0\x75\x5c\x0a\x33\xd9\x17\x79\x9c\xde\xa4\x7c\x71\x27\xee\x6b\x72\x49\x75\x25\xf0\x37\x7d\xcd\xed\xc2\x84\xe7\xfe\xe5\xa5\x7f\xd6\xd2\x3d\xe9\xd7\xfe\xbf\x18\xd7\xbe\xb8\x5e\x0c\x15\xec\x0d\x10\x7f\x4d\x06\x2d\xe3\x6b\x5f\x75\xfa\xda\x79\xde\x5c\x88\xd3\xd7\x92\xc9\x12\x0d\x7c\xb3\xd3\xd7\x22\xac\x96\x4a\xbb\xe7\x72\x92\xad\x60\x02\x79\x1b\x16\x10\x34\xd8\x7d\x2d\x8b\x99\xf9\xda\x63\xbb\xc9\xea\x01\x19\xfd\xd3\xd7\xa6\x08\x05\x3e\x27\xf0\x23\x5f\x9b\x0b\x94\x56\x29\xbe\xb6\x90\x77\x75\xdd\xcd\xf4\xdd\xe2\xf4\x75\x2f\x88\x15\x06\x28\xd3\xd7\xbd\xdf\xd3\xd7\xad\x5f\xb3\x8a\xd6\x96\xf7\x1a\x95\xa6\xaf\xa3\x8c\x72\x1e\x17\xd6\xbf\x4e\x4a\xc9\x85\x19\x0a\x75\x99\xa4\x3b\xd1\x3f\xcc\xc7\x10\x94\x31\x6d\x40\x78\xd6\x88\x9b\xf0\x9b\xca\xd4\x13\x5a\xa1\x18\xf6\x7a\x35\x94\x34\x17\xfe\x51\x11\xa7\x78\x54\x8a\x4f\x18\x5e\x13\x4b\x41\xda\x65\xfc\xc2\x46\x07\xfd\x0f\x04\x90\x66\xe3\x7d\xbc\x81\x10\x63\xd2\x38\x9a\x84\xe0\x14\x80\xea\x0d\xd0\x4d\x31\x28\x1c\x3d\xcc\xe6\x28\x13\x81\xc8\x39\x64\xb5\x4d\x5f\xf7\x45\x61\xf8\x58\xee\xe9\x1b\xa7\x6f\x34\xf4\xb7\x50\x39\x96\x64\xbe\x38\x33\x4f\xdf\x08\x63\x5b\x70\xca\xf8\x1b\x57\x13\xa6\x6f\xc4\x2b\x30\xd3\x37\xee\x2f\xc7\x2a\x11\x72\xfd\xfe\x1b\xc3\x42\x4e\x02\xcc\x2c\x96\x21\xbf\xbc\x8e\xf2\x8d\x90\x1f\xf1\x8d\x14\x26\xb1\x4a\x7b\xd3\x1d\x4e\xb5\x81\xa0\x5e\xe4\x1b\xe3\x6a\xe3\xda\x74\xc9\xe3\x48\xdc\x13\xa2\x43\x46\x7c\x22\x82\x31\x97\x47\x54\x36\xdd\x42\xaa\x87\x82\x75\x7a\x06\x1c\x88\x1c\x95\x67\x04\x13\xbe\x6f\x46\x20\x26\x2a\x67\x01\x68\x87\x11\x89\x8a\xcc\xe5\x7d\xa3\xf0\x69\x02\xc4\x86\xf0\x69\x8c\x52\x15\x7b\x77\x61\x7b\xde\x84\x4f\x61\x5f\x0e\x6f\x32\x72\x1d\xaf\x4f\xed\x0c\x22\xc4\x4b\xd5\x4e\xc1\x95\xdc\x26\xfc\xc6\x58\xec\xbc\x05\x37\xc3\x53\xf0\x40\xd0\xff\xa8\xdd\xc4\x84\x0e\xec\x0b\xdb\xd3\x37\xde\xc4\x5b\x7e\xeb\x3c\x6f\x90\xaa\x05\x44\x7d\xfa\xb7\xae\xdf\x8b\xd8\x8e\xef\xe5\xf8\x10\xc1\x17\xcb\x7e\x09\x25\x76\xaf\xe6\xa0\xe8\x22\x81\xf7\x4a\xac\x17\x69\x92\x80\x7b\x8d\xed\x83\x44\xee\x5e\x63\x69\x1a\x15\xf3\xbd\x9b\x0c\x8d\x58\xdd\xa6\x5b\x76\xb4\x4b\x1e\x13\xb8\x9b\x11\x73\x1f\x84\xc8\xe4\xff\x02\x00\x00\xff\xff\x4a\x3e\x4e\xd9\x7c\xaa\x09\x00") + +func utilWordsDictNounsTxtBytes() ([]byte, error) { + return bindataRead( + _utilWordsDictNounsTxt, + "util/words/dict/nouns.txt", + ) +} + +func utilWordsDictNounsTxt() (*asset, error) { + bytes, err := utilWordsDictNounsTxtBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "util/words/dict/nouns.txt", size: 633468, mode: os.FileMode(420), modTime: time.Unix(1473367638, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "util/words/dict/adjectives.txt": utilWordsDictAdjectivesTxt, + "util/words/dict/nouns.txt": utilWordsDictNounsTxt, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "util": &bintree{nil, map[string]*bintree{ + "words": &bintree{nil, map[string]*bintree{ + "dict": &bintree{nil, map[string]*bintree{ + "adjectives.txt": &bintree{utilWordsDictAdjectivesTxt, map[string]*bintree{}}, + "nouns.txt": &bintree{utilWordsDictNounsTxt, map[string]*bintree{}}, + }}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} diff --git a/vendor/code.cloudfoundry.org/cli/version/version.go b/vendor/code.cloudfoundry.org/cli/version/version.go new file mode 100644 index 0000000..504a72c --- /dev/null +++ b/vendor/code.cloudfoundry.org/cli/version/version.go @@ -0,0 +1,31 @@ +package version + +import "github.com/blang/semver" + +const DefaultVersion = "0.0.0-unknown-version" + +var ( + binaryVersion string + binarySHA string + binaryBuildDate string +) + +func VersionString() string { + versionString, err := semver.Make(binaryVersion) + if err != nil { + versionString, _ = semver.Make(DefaultVersion) + } + + metaData := []string{} + if binarySHA != "" { + metaData = append(metaData, binarySHA) + } + + if binaryBuildDate != "" { + metaData = append(metaData, binaryBuildDate) + } + + versionString.Build = metaData + + return versionString.String() +} diff --git a/vendor/code.cloudfoundry.org/gofileutils/LICENSE b/vendor/code.cloudfoundry.org/gofileutils/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/code.cloudfoundry.org/gofileutils/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/code.cloudfoundry.org/gofileutils/NOTICE b/vendor/code.cloudfoundry.org/gofileutils/NOTICE new file mode 100644 index 0000000..af7e5e6 --- /dev/null +++ b/vendor/code.cloudfoundry.org/gofileutils/NOTICE @@ -0,0 +1,11 @@ +Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +This project contains software that is Copyright (c) 2014-2015 Pivotal Software, Inc. + +This project is licensed to you under the Apache License, Version 2.0 (the "License"). + +You may not use this project except in compliance with the License. + +This project may include a number of subcomponents with separate copyright notices +and license terms. Your use of these subcomponents is subject to the terms and +conditions of the subcomponent's license, as noted in the LICENSE file. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/dir_utils.go b/vendor/code.cloudfoundry.org/gofileutils/fileutils/dir_utils.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/gofileutils/fileutils/dir_utils.go rename to vendor/code.cloudfoundry.org/gofileutils/fileutils/dir_utils.go diff --git a/vendor/code.cloudfoundry.org/gofileutils/fileutils/file_utils.go b/vendor/code.cloudfoundry.org/gofileutils/fileutils/file_utils.go new file mode 100644 index 0000000..ac9b6eb --- /dev/null +++ b/vendor/code.cloudfoundry.org/gofileutils/fileutils/file_utils.go @@ -0,0 +1,74 @@ +package fileutils + +import ( + "io" + "io/ioutil" + "os" + "path" + "path/filepath" +) + +func Open(path string) (file *os.File, err error) { + err = os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm) + if err != nil { + return + } + + return os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) +} + +func Create(path string) (file *os.File, err error) { + err = os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm) + if err != nil { + return + } + + return os.Create(path) +} + +func CopyPathToPath(fromPath, toPath string) (err error) { + srcFileInfo, err := os.Stat(fromPath) + if err != nil { + return err + } + + if srcFileInfo.IsDir() { + err = os.MkdirAll(toPath, srcFileInfo.Mode()) + if err != nil { + return err + } + + files, err := ioutil.ReadDir(fromPath) + if err != nil { + return err + } + + for _, file := range files { + err = CopyPathToPath(path.Join(fromPath, file.Name()), path.Join(toPath, file.Name())) + if err != nil { + return err + } + } + } else { + var dst *os.File + dst, err = Create(toPath) + if err != nil { + return err + } + defer dst.Close() + + dst.Chmod(srcFileInfo.Mode()) + + src, err := os.Open(fromPath) + if err != nil { + return err + } + defer src.Close() + + _, err = io.Copy(dst, src) + if err != nil { + return err + } + } + return err +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/tmp_utils.go b/vendor/code.cloudfoundry.org/gofileutils/fileutils/temp_utils.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/fileutils/tmp_utils.go rename to vendor/code.cloudfoundry.org/gofileutils/fileutils/temp_utils.go diff --git a/vendor/github.com/SermoDigital/jose/.gitignore b/vendor/github.com/SermoDigital/jose/.gitignore new file mode 100644 index 0000000..7bae159 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/.gitignore @@ -0,0 +1,29 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof + +*.out +*.tmp +tags + diff --git a/vendor/github.com/SermoDigital/jose/.travis.yml b/vendor/github.com/SermoDigital/jose/.travis.yml new file mode 100644 index 0000000..6f70d93 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/.travis.yml @@ -0,0 +1,14 @@ +language: go + +go: + - 1.6 + - 1.7 + - tip + +sudo: false + +install: + - go get -u github.com/golang/lint/golint + +script: + - ./_test.sh diff --git a/vendor/github.com/SermoDigital/jose/LICENSE b/vendor/github.com/SermoDigital/jose/LICENSE new file mode 100644 index 0000000..d2d35b6 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Sermo Digital LLC + +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/SermoDigital/jose/README.md b/vendor/github.com/SermoDigital/jose/README.md new file mode 100644 index 0000000..621862e --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/README.md @@ -0,0 +1,40 @@ +JOSE +============ +[![Build Status](https://travis-ci.org/SermoDigital/jose.svg?branch=master)](https://travis-ci.org/SermoDigital/jose) +[![GoDoc](https://godoc.org/github.com/SermoDigital/jose?status.svg)](https://godoc.org/github.com/SermoDigital/jose) + +JOSE is a comprehensive set of JWT, JWS, and JWE libraries. + +## Why + +The only other JWS/JWE/JWT implementations are specific to JWT, and none +were particularly pleasant to work with. + +These libraries should provide an easy, straightforward way to securely +create, parse, and validate JWS, JWE, and JWTs. + +## Notes: +JWE is currently unimplemented. + +## Version 0.9: + +## Documentation + +The docs can be found at [godoc.org] [docs], as usual. + +A gopkg.in mirror can be found at https://gopkg.in/jose.v1, thanks to +@zia-newversion. (For context, see issue #30.) + +### [JWS RFC][jws] +### [JWE RFC][jwe] +### [JWT RFC][jwt] + +## License + +[MIT] [license]. + +[docs]: https://godoc.org/github.com/SermoDigital/jose +[license]: https://github.com/SermoDigital/jose/blob/master/LICENSE.md +[jws]: https://tools.ietf.org/html/rfc7515 +[jwe]: https://tools.ietf.org/html/rfc7516 +[jwt]: https://tools.ietf.org/html/rfc7519 diff --git a/vendor/github.com/SermoDigital/jose/_test.sh b/vendor/github.com/SermoDigital/jose/_test.sh new file mode 100755 index 0000000..a36a470 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/_test.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +go build ./... +go test ./... +golint ./... +go vet ./... \ No newline at end of file diff --git a/vendor/github.com/SermoDigital/jose/base64.go b/vendor/github.com/SermoDigital/jose/base64.go new file mode 100644 index 0000000..f7275fb --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/base64.go @@ -0,0 +1,44 @@ +package jose + +import "encoding/base64" + +// Encoder is satisfied if the type can marshal itself into a valid +// structure for a JWS. +type Encoder interface { + // Base64 implies T -> JSON -> RawURLEncodingBase64 + Base64() ([]byte, error) +} + +// Base64Decode decodes a base64-encoded byte slice. +func Base64Decode(b []byte) ([]byte, error) { + buf := make([]byte, base64.RawURLEncoding.DecodedLen(len(b))) + n, err := base64.RawURLEncoding.Decode(buf, b) + return buf[:n], err +} + +// Base64Encode encodes a byte slice. +func Base64Encode(b []byte) []byte { + buf := make([]byte, base64.RawURLEncoding.EncodedLen(len(b))) + base64.RawURLEncoding.Encode(buf, b) + return buf +} + +// EncodeEscape base64-encodes a byte slice but escapes it for JSON. +// It'll return the format: `"base64"` +func EncodeEscape(b []byte) []byte { + buf := make([]byte, base64.RawURLEncoding.EncodedLen(len(b))+2) + buf[0] = '"' + base64.RawURLEncoding.Encode(buf[1:], b) + buf[len(buf)-1] = '"' + return buf +} + +// DecodeEscaped decodes a base64-encoded byte slice straight from a JSON +// structure. It assumes it's in the format: `"base64"`, but can handle +// cases where it's not. +func DecodeEscaped(b []byte) ([]byte, error) { + if len(b) > 1 && b[0] == '"' && b[len(b)-1] == '"' { + b = b[1 : len(b)-1] + } + return Base64Decode(b) +} diff --git a/vendor/github.com/SermoDigital/jose/crypto/doc.go b/vendor/github.com/SermoDigital/jose/crypto/doc.go new file mode 100644 index 0000000..16cf476 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/doc.go @@ -0,0 +1,4 @@ +// Package crypto implements "SigningMethods" and "EncryptionMethods"; +// that is, ways to sign and encrypt JWS and JWEs, respectively, as well +// as JWTs. +package crypto diff --git a/vendor/github.com/SermoDigital/jose/crypto/ecdsa.go b/vendor/github.com/SermoDigital/jose/crypto/ecdsa.go new file mode 100644 index 0000000..3ef12ba --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/ecdsa.go @@ -0,0 +1,117 @@ +package crypto + +import ( + "crypto" + "crypto/ecdsa" + "crypto/rand" + "encoding/asn1" + "encoding/json" + "errors" + "math/big" +) + +// ErrECDSAVerification is missing from crypto/ecdsa compared to crypto/rsa +var ErrECDSAVerification = errors.New("crypto/ecdsa: verification error") + +// SigningMethodECDSA implements the ECDSA family of signing methods signing +// methods +type SigningMethodECDSA struct { + Name string + Hash crypto.Hash + _ struct{} +} + +// ECPoint is a marshalling structure for the EC points R and S. +type ECPoint struct { + R *big.Int + S *big.Int +} + +// Specific instances of EC SigningMethods. +var ( + // SigningMethodES256 implements ES256. + SigningMethodES256 = &SigningMethodECDSA{ + Name: "ES256", + Hash: crypto.SHA256, + } + + // SigningMethodES384 implements ES384. + SigningMethodES384 = &SigningMethodECDSA{ + Name: "ES384", + Hash: crypto.SHA384, + } + + // SigningMethodES512 implements ES512. + SigningMethodES512 = &SigningMethodECDSA{ + Name: "ES512", + Hash: crypto.SHA512, + } +) + +// Alg returns the name of the SigningMethodECDSA instance. +func (m *SigningMethodECDSA) Alg() string { return m.Name } + +// Verify implements the Verify method from SigningMethod. +// For this verify method, key must be an *ecdsa.PublicKey. +func (m *SigningMethodECDSA) Verify(raw []byte, signature Signature, key interface{}) error { + + ecdsaKey, ok := key.(*ecdsa.PublicKey) + if !ok { + return ErrInvalidKey + } + + // Unmarshal asn1 ECPoint + var ecpoint ECPoint + if _, err := asn1.Unmarshal(signature, &ecpoint); err != nil { + return err + } + + // Verify the signature + if !ecdsa.Verify(ecdsaKey, m.sum(raw), ecpoint.R, ecpoint.S) { + return ErrECDSAVerification + } + return nil +} + +// Sign implements the Sign method from SigningMethod. +// For this signing method, key must be an *ecdsa.PrivateKey. +func (m *SigningMethodECDSA) Sign(data []byte, key interface{}) (Signature, error) { + + ecdsaKey, ok := key.(*ecdsa.PrivateKey) + if !ok { + return nil, ErrInvalidKey + } + + r, s, err := ecdsa.Sign(rand.Reader, ecdsaKey, m.sum(data)) + if err != nil { + return nil, err + } + + signature, err := asn1.Marshal(ECPoint{R: r, S: s}) + if err != nil { + return nil, err + } + return Signature(signature), nil +} + +func (m *SigningMethodECDSA) sum(b []byte) []byte { + h := m.Hash.New() + h.Write(b) + return h.Sum(nil) +} + +// Hasher implements the Hasher method from SigningMethod. +func (m *SigningMethodECDSA) Hasher() crypto.Hash { + return m.Hash +} + +// MarshalJSON is in case somebody decides to place SigningMethodECDSA +// inside the Header, presumably because they (wrongly) decided it was a good +// idea to use the SigningMethod itself instead of the SigningMethod's Alg +// method. In order to keep things sane, marshalling this will simply +// return the JSON-compatible representation of m.Alg(). +func (m *SigningMethodECDSA) MarshalJSON() ([]byte, error) { + return []byte(`"` + m.Alg() + `"`), nil +} + +var _ json.Marshaler = (*SigningMethodECDSA)(nil) diff --git a/vendor/github.com/SermoDigital/jose/crypto/ecdsa_utils.go b/vendor/github.com/SermoDigital/jose/crypto/ecdsa_utils.go new file mode 100644 index 0000000..4bd75d2 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/ecdsa_utils.go @@ -0,0 +1,48 @@ +package crypto + +import ( + "crypto/ecdsa" + "crypto/x509" + "encoding/pem" + "errors" +) + +// ECDSA parsing errors. +var ( + ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key") + ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key") +) + +// ParseECPrivateKeyFromPEM will parse a PEM encoded EC Private +// Key Structure. +func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { + block, _ := pem.Decode(key) + if block == nil { + return nil, ErrKeyMustBePEMEncoded + } + return x509.ParseECPrivateKey(block.Bytes) +} + +// ParseECPublicKeyFromPEM will parse a PEM encoded PKCS1 or PKCS8 public key +func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) { + + block, _ := pem.Decode(key) + if block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + parsedKey, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return nil, err + } + parsedKey = cert.PublicKey + } + + pkey, ok := parsedKey.(*ecdsa.PublicKey) + if !ok { + return nil, ErrNotECPublicKey + } + return pkey, nil +} diff --git a/vendor/github.com/SermoDigital/jose/crypto/errors.go b/vendor/github.com/SermoDigital/jose/crypto/errors.go new file mode 100644 index 0000000..34fbd25 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/errors.go @@ -0,0 +1,9 @@ +package crypto + +import "errors" + +var ( + // ErrInvalidKey means the key argument passed to SigningMethod.Verify + // was not the correct type. + ErrInvalidKey = errors.New("key is invalid") +) diff --git a/vendor/github.com/SermoDigital/jose/crypto/hmac.go b/vendor/github.com/SermoDigital/jose/crypto/hmac.go new file mode 100644 index 0000000..1cb7f6e --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/hmac.go @@ -0,0 +1,81 @@ +package crypto + +import ( + "crypto" + "crypto/hmac" + "encoding/json" + "errors" +) + +// SigningMethodHMAC implements the HMAC-SHA family of SigningMethods. +type SigningMethodHMAC struct { + Name string + Hash crypto.Hash + _ struct{} +} + +// Specific instances of HMAC-SHA SigningMethods. +var ( + // SigningMethodHS256 implements HS256. + SigningMethodHS256 = &SigningMethodHMAC{ + Name: "HS256", + Hash: crypto.SHA256, + } + + // SigningMethodHS384 implements HS384. + SigningMethodHS384 = &SigningMethodHMAC{ + Name: "HS384", + Hash: crypto.SHA384, + } + + // SigningMethodHS512 implements HS512. + SigningMethodHS512 = &SigningMethodHMAC{ + Name: "HS512", + Hash: crypto.SHA512, + } + + // ErrSignatureInvalid is returned when the provided signature is found + // to be invalid. + ErrSignatureInvalid = errors.New("signature is invalid") +) + +// Alg implements the SigningMethod interface. +func (m *SigningMethodHMAC) Alg() string { return m.Name } + +// Verify implements the Verify method from SigningMethod. +// For this signing method, must be a []byte. +func (m *SigningMethodHMAC) Verify(raw []byte, signature Signature, key interface{}) error { + keyBytes, ok := key.([]byte) + if !ok { + return ErrInvalidKey + } + hasher := hmac.New(m.Hash.New, keyBytes) + hasher.Write(raw) + if hmac.Equal(signature, hasher.Sum(nil)) { + return nil + } + return ErrSignatureInvalid +} + +// Sign implements the Sign method from SigningMethod for this signing method. +// Key must be a []byte. +func (m *SigningMethodHMAC) Sign(data []byte, key interface{}) (Signature, error) { + keyBytes, ok := key.([]byte) + if !ok { + return nil, ErrInvalidKey + } + hasher := hmac.New(m.Hash.New, keyBytes) + hasher.Write(data) + return Signature(hasher.Sum(nil)), nil +} + +// Hasher implements the SigningMethod interface. +func (m *SigningMethodHMAC) Hasher() crypto.Hash { return m.Hash } + +// MarshalJSON implements json.Marshaler. +// See SigningMethodECDSA.MarshalJSON() for information. +func (m *SigningMethodHMAC) MarshalJSON() ([]byte, error) { + return []byte(`"` + m.Alg() + `"`), nil +} + +var _ json.Marshaler = (*SigningMethodHMAC)(nil) diff --git a/vendor/github.com/SermoDigital/jose/crypto/none.go b/vendor/github.com/SermoDigital/jose/crypto/none.go new file mode 100644 index 0000000..db3d139 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/none.go @@ -0,0 +1,72 @@ +package crypto + +import ( + "crypto" + "encoding/json" + "hash" + "io" +) + +func init() { + crypto.RegisterHash(crypto.Hash(0), h) +} + +// h is passed to crypto.RegisterHash. +func h() hash.Hash { + return &f{Writer: nil} +} + +type f struct{ io.Writer } + +// Sum helps implement the hash.Hash interface. +func (_ *f) Sum(b []byte) []byte { return nil } + +// Reset helps implement the hash.Hash interface. +func (_ *f) Reset() {} + +// Size helps implement the hash.Hash interface. +func (_ *f) Size() int { return -1 } + +// BlockSize helps implement the hash.Hash interface. +func (_ *f) BlockSize() int { return -1 } + +// Unsecured is the default "none" algorithm. +var Unsecured = &SigningMethodNone{ + Name: "none", + Hash: crypto.Hash(0), +} + +// SigningMethodNone is the default "none" algorithm. +type SigningMethodNone struct { + Name string + Hash crypto.Hash + _ struct{} +} + +// Verify helps implement the SigningMethod interface. +func (_ *SigningMethodNone) Verify(_ []byte, _ Signature, _ interface{}) error { + return nil +} + +// Sign helps implement the SigningMethod interface. +func (_ *SigningMethodNone) Sign(_ []byte, _ interface{}) (Signature, error) { + return nil, nil +} + +// Alg helps implement the SigningMethod interface. +func (m *SigningMethodNone) Alg() string { + return m.Name +} + +// Hasher helps implement the SigningMethod interface. +func (m *SigningMethodNone) Hasher() crypto.Hash { + return m.Hash +} + +// MarshalJSON implements json.Marshaler. +// See SigningMethodECDSA.MarshalJSON() for information. +func (m *SigningMethodNone) MarshalJSON() ([]byte, error) { + return []byte(`"` + m.Alg() + `"`), nil +} + +var _ json.Marshaler = (*SigningMethodNone)(nil) diff --git a/vendor/github.com/SermoDigital/jose/crypto/rsa.go b/vendor/github.com/SermoDigital/jose/crypto/rsa.go new file mode 100644 index 0000000..80596df --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/rsa.go @@ -0,0 +1,80 @@ +package crypto + +import ( + "crypto" + "crypto/rand" + "crypto/rsa" + "encoding/json" +) + +// SigningMethodRSA implements the RSA family of SigningMethods. +type SigningMethodRSA struct { + Name string + Hash crypto.Hash + _ struct{} +} + +// Specific instances of RSA SigningMethods. +var ( + // SigningMethodRS256 implements RS256. + SigningMethodRS256 = &SigningMethodRSA{ + Name: "RS256", + Hash: crypto.SHA256, + } + + // SigningMethodRS384 implements RS384. + SigningMethodRS384 = &SigningMethodRSA{ + Name: "RS384", + Hash: crypto.SHA384, + } + + // SigningMethodRS512 implements RS512. + SigningMethodRS512 = &SigningMethodRSA{ + Name: "RS512", + Hash: crypto.SHA512, + } +) + +// Alg implements the SigningMethod interface. +func (m *SigningMethodRSA) Alg() string { return m.Name } + +// Verify implements the Verify method from SigningMethod. +// For this signing method, must be an *rsa.PublicKey. +func (m *SigningMethodRSA) Verify(raw []byte, sig Signature, key interface{}) error { + rsaKey, ok := key.(*rsa.PublicKey) + if !ok { + return ErrInvalidKey + } + return rsa.VerifyPKCS1v15(rsaKey, m.Hash, m.sum(raw), sig) +} + +// Sign implements the Sign method from SigningMethod. +// For this signing method, must be an *rsa.PrivateKey structure. +func (m *SigningMethodRSA) Sign(data []byte, key interface{}) (Signature, error) { + rsaKey, ok := key.(*rsa.PrivateKey) + if !ok { + return nil, ErrInvalidKey + } + sigBytes, err := rsa.SignPKCS1v15(rand.Reader, rsaKey, m.Hash, m.sum(data)) + if err != nil { + return nil, err + } + return Signature(sigBytes), nil +} + +func (m *SigningMethodRSA) sum(b []byte) []byte { + h := m.Hash.New() + h.Write(b) + return h.Sum(nil) +} + +// Hasher implements the SigningMethod interface. +func (m *SigningMethodRSA) Hasher() crypto.Hash { return m.Hash } + +// MarshalJSON implements json.Marshaler. +// See SigningMethodECDSA.MarshalJSON() for information. +func (m *SigningMethodRSA) MarshalJSON() ([]byte, error) { + return []byte(`"` + m.Alg() + `"`), nil +} + +var _ json.Marshaler = (*SigningMethodRSA)(nil) diff --git a/vendor/github.com/SermoDigital/jose/crypto/rsa_pss.go b/vendor/github.com/SermoDigital/jose/crypto/rsa_pss.go new file mode 100644 index 0000000..3847ae2 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/rsa_pss.go @@ -0,0 +1,96 @@ +// +build go1.4 + +package crypto + +import ( + "crypto" + "crypto/rand" + "crypto/rsa" + "encoding/json" +) + +// SigningMethodRSAPSS implements the RSAPSS family of SigningMethods. +type SigningMethodRSAPSS struct { + *SigningMethodRSA + Options *rsa.PSSOptions +} + +// Specific instances for RS/PS SigningMethods. +var ( + // SigningMethodPS256 implements PS256. + SigningMethodPS256 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS256", + Hash: crypto.SHA256, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA256, + }, + } + + // SigningMethodPS384 implements PS384. + SigningMethodPS384 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS384", + Hash: crypto.SHA384, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA384, + }, + } + + // SigningMethodPS512 implements PS512. + SigningMethodPS512 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS512", + Hash: crypto.SHA512, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA512, + }, + } +) + +// Verify implements the Verify method from SigningMethod. +// For this verify method, key must be an *rsa.PublicKey. +func (m *SigningMethodRSAPSS) Verify(raw []byte, signature Signature, key interface{}) error { + rsaKey, ok := key.(*rsa.PublicKey) + if !ok { + return ErrInvalidKey + } + return rsa.VerifyPSS(rsaKey, m.Hash, m.sum(raw), signature, m.Options) +} + +// Sign implements the Sign method from SigningMethod. +// For this signing method, key must be an *rsa.PrivateKey. +func (m *SigningMethodRSAPSS) Sign(raw []byte, key interface{}) (Signature, error) { + rsaKey, ok := key.(*rsa.PrivateKey) + if !ok { + return nil, ErrInvalidKey + } + sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, m.sum(raw), m.Options) + if err != nil { + return nil, err + } + return Signature(sigBytes), nil +} + +func (m *SigningMethodRSAPSS) sum(b []byte) []byte { + h := m.Hash.New() + h.Write(b) + return h.Sum(nil) +} + +// Hasher implements the Hasher method from SigningMethod. +func (m *SigningMethodRSAPSS) Hasher() crypto.Hash { return m.Hash } + +// MarshalJSON implements json.Marshaler. +// See SigningMethodECDSA.MarshalJSON() for information. +func (m *SigningMethodRSAPSS) MarshalJSON() ([]byte, error) { + return []byte(`"` + m.Alg() + `"`), nil +} + +var _ json.Marshaler = (*SigningMethodRSAPSS)(nil) diff --git a/vendor/github.com/SermoDigital/jose/crypto/rsa_utils.go b/vendor/github.com/SermoDigital/jose/crypto/rsa_utils.go new file mode 100644 index 0000000..43aeff3 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/rsa_utils.go @@ -0,0 +1,70 @@ +package crypto + +import ( + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "errors" +) + +// Errors specific to rsa_utils. +var ( + ErrKeyMustBePEMEncoded = errors.New("invalid key: Key must be PEM encoded PKCS1 or PKCS8 private key") + ErrNotRSAPrivateKey = errors.New("key is not a valid RSA private key") + ErrNotRSAPublicKey = errors.New("key is not a valid RSA public key") +) + +// ParseRSAPrivateKeyFromPEM parses a PEM encoded PKCS1 or PKCS8 private key. +func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS1PrivateKey(block.Bytes); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil { + return nil, err + } + } + + var pkey *rsa.PrivateKey + var ok bool + if pkey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, ErrNotRSAPrivateKey + } + + return pkey, nil +} + +// ParseRSAPublicKeyFromPEM parses PEM encoded PKCS1 or PKCS8 public key. +func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { + if cert, err := x509.ParseCertificate(block.Bytes); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + var pkey *rsa.PublicKey + var ok bool + if pkey, ok = parsedKey.(*rsa.PublicKey); !ok { + return nil, ErrNotRSAPublicKey + } + + return pkey, nil +} diff --git a/vendor/github.com/SermoDigital/jose/crypto/signature.go b/vendor/github.com/SermoDigital/jose/crypto/signature.go new file mode 100644 index 0000000..37571f9 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/signature.go @@ -0,0 +1,36 @@ +package crypto + +import ( + "encoding/json" + + "github.com/SermoDigital/jose" +) + +// Signature is a JWS signature. +type Signature []byte + +// MarshalJSON implements json.Marshaler for a signature. +func (s Signature) MarshalJSON() ([]byte, error) { + return jose.EncodeEscape(s), nil +} + +// Base64 helps implements jose.Encoder for Signature. +func (s Signature) Base64() ([]byte, error) { + return jose.Base64Encode(s), nil +} + +// UnmarshalJSON implements json.Unmarshaler for signature. +func (s *Signature) UnmarshalJSON(b []byte) error { + dec, err := jose.DecodeEscaped(b) + if err != nil { + return err + } + *s = Signature(dec) + return nil +} + +var ( + _ json.Marshaler = (Signature)(nil) + _ json.Unmarshaler = (*Signature)(nil) + _ jose.Encoder = (Signature)(nil) +) diff --git a/vendor/github.com/SermoDigital/jose/crypto/signing_method.go b/vendor/github.com/SermoDigital/jose/crypto/signing_method.go new file mode 100644 index 0000000..c8b8874 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/crypto/signing_method.go @@ -0,0 +1,24 @@ +package crypto + +import "crypto" + +// SigningMethod is an interface that provides a way to sign JWS tokens. +type SigningMethod interface { + // Alg describes the signing algorithm, and is used to uniquely + // describe the specific crypto.SigningMethod. + Alg() string + + // Verify accepts the raw content, the signature, and the key used + // to sign the raw content, and returns any errors found while validating + // the signature and content. + Verify(raw []byte, sig Signature, key interface{}) error + + // Sign returns a Signature for the raw bytes, as well as any errors + // that occurred during the signing. + Sign(raw []byte, key interface{}) (Signature, error) + + // Used to cause quick panics when a crypto.SigningMethod whose form of hashing + // isn't linked in the binary when you register a crypto.SigningMethod. + // To spoof this, see "crypto.SigningMethodNone". + Hasher() crypto.Hash +} diff --git a/vendor/github.com/SermoDigital/jose/doc.go b/vendor/github.com/SermoDigital/jose/doc.go new file mode 100644 index 0000000..7abb7bf --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/doc.go @@ -0,0 +1,3 @@ +// Package jose implements some helper functions and types for the children +// packages, jws, jwt, and jwe. +package jose diff --git a/vendor/github.com/SermoDigital/jose/header.go b/vendor/github.com/SermoDigital/jose/header.go new file mode 100644 index 0000000..4499a76 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/header.go @@ -0,0 +1,124 @@ +package jose + +import "encoding/json" + +// Header implements a JOSE Header with the addition of some helper +// methods, similar to net/url.Values. +type Header map[string]interface{} + +// Get retrieves the value corresponding with key from the Header. +func (h Header) Get(key string) interface{} { + if h == nil { + return nil + } + return h[key] +} + +// Set sets Claims[key] = val. It'll overwrite without warning. +func (h Header) Set(key string, val interface{}) { + h[key] = val +} + +// Del removes the value that corresponds with key from the Header. +func (h Header) Del(key string) { + delete(h, key) +} + +// Has returns true if a value for the given key exists inside the Header. +func (h Header) Has(key string) bool { + _, ok := h[key] + return ok +} + +// MarshalJSON implements json.Marshaler for Header. +func (h Header) MarshalJSON() ([]byte, error) { + if len(h) == 0 { + return nil, nil + } + b, err := json.Marshal(map[string]interface{}(h)) + if err != nil { + return nil, err + } + return EncodeEscape(b), nil +} + +// Base64 implements the Encoder interface. +func (h Header) Base64() ([]byte, error) { + return h.MarshalJSON() +} + +// UnmarshalJSON implements json.Unmarshaler for Header. +func (h *Header) UnmarshalJSON(b []byte) error { + if b == nil { + return nil + } + b, err := DecodeEscaped(b) + if err != nil { + return err + } + return json.Unmarshal(b, (*map[string]interface{})(h)) +} + +// Protected Headers are base64-encoded after they're marshaled into +// JSON. +type Protected Header + +// Get retrieves the value corresponding with key from the Protected Header. +func (p Protected) Get(key string) interface{} { + if p == nil { + return nil + } + return p[key] +} + +// Set sets Protected[key] = val. It'll overwrite without warning. +func (p Protected) Set(key string, val interface{}) { + p[key] = val +} + +// Del removes the value that corresponds with key from the Protected Header. +func (p Protected) Del(key string) { + delete(p, key) +} + +// Has returns true if a value for the given key exists inside the Protected +// Header. +func (p Protected) Has(key string) bool { + _, ok := p[key] + return ok +} + +// MarshalJSON implements json.Marshaler for Protected. +func (p Protected) MarshalJSON() ([]byte, error) { + b, err := json.Marshal(map[string]interface{}(p)) + if err != nil { + return nil, err + } + return EncodeEscape(b), nil +} + +// Base64 implements the Encoder interface. +func (p Protected) Base64() ([]byte, error) { + b, err := json.Marshal(map[string]interface{}(p)) + if err != nil { + return nil, err + } + return Base64Encode(b), nil +} + +// UnmarshalJSON implements json.Unmarshaler for Protected. +func (p *Protected) UnmarshalJSON(b []byte) error { + var h Header + if err := h.UnmarshalJSON(b); err != nil { + return err + } + *p = Protected(h) + return nil +} + +var ( + _ json.Marshaler = (Protected)(nil) + _ json.Unmarshaler = (*Protected)(nil) + _ json.Marshaler = (Header)(nil) + _ json.Unmarshaler = (*Header)(nil) +) diff --git a/vendor/github.com/SermoDigital/jose/jws/claims.go b/vendor/github.com/SermoDigital/jose/jws/claims.go new file mode 100644 index 0000000..4cc616c --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/claims.go @@ -0,0 +1,190 @@ +package jws + +import ( + "encoding/json" + "time" + + "github.com/SermoDigital/jose" + "github.com/SermoDigital/jose/jwt" +) + +// Claims represents a set of JOSE Claims. +type Claims jwt.Claims + +// Get retrieves the value corresponding with key from the Claims. +func (c Claims) Get(key string) interface{} { + return jwt.Claims(c).Get(key) +} + +// Set sets Claims[key] = val. It'll overwrite without warning. +func (c Claims) Set(key string, val interface{}) { + jwt.Claims(c).Set(key, val) +} + +// Del removes the value that corresponds with key from the Claims. +func (c Claims) Del(key string) { + jwt.Claims(c).Del(key) +} + +// Has returns true if a value for the given key exists inside the Claims. +func (c Claims) Has(key string) bool { + return jwt.Claims(c).Has(key) +} + +// MarshalJSON implements json.Marshaler for Claims. +func (c Claims) MarshalJSON() ([]byte, error) { + return jwt.Claims(c).MarshalJSON() +} + +// Base64 implements the Encoder interface. +func (c Claims) Base64() ([]byte, error) { + return jwt.Claims(c).Base64() +} + +// UnmarshalJSON implements json.Unmarshaler for Claims. +func (c *Claims) UnmarshalJSON(b []byte) error { + if b == nil { + return nil + } + + b, err := jose.DecodeEscaped(b) + if err != nil { + return err + } + + // Since json.Unmarshal calls UnmarshalJSON, + // calling json.Unmarshal on *p would be infinitely recursive + // A temp variable is needed because &map[string]interface{}(*p) is + // invalid Go. + + tmp := map[string]interface{}(*c) + if err = json.Unmarshal(b, &tmp); err != nil { + return err + } + *c = Claims(tmp) + return nil +} + +// Issuer retrieves claim "iss" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.1 +func (c Claims) Issuer() (string, bool) { + return jwt.Claims(c).Issuer() +} + +// Subject retrieves claim "sub" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.2 +func (c Claims) Subject() (string, bool) { + return jwt.Claims(c).Subject() +} + +// Audience retrieves claim "aud" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.3 +func (c Claims) Audience() ([]string, bool) { + return jwt.Claims(c).Audience() +} + +// Expiration retrieves claim "exp" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.4 +func (c Claims) Expiration() (time.Time, bool) { + return jwt.Claims(c).Expiration() +} + +// NotBefore retrieves claim "nbf" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.5 +func (c Claims) NotBefore() (time.Time, bool) { + return jwt.Claims(c).NotBefore() +} + +// IssuedAt retrieves claim "iat" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.6 +func (c Claims) IssuedAt() (time.Time, bool) { + return jwt.Claims(c).IssuedAt() +} + +// JWTID retrieves claim "jti" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.7 +func (c Claims) JWTID() (string, bool) { + return jwt.Claims(c).JWTID() +} + +// RemoveIssuer deletes claim "iss" from c. +func (c Claims) RemoveIssuer() { + jwt.Claims(c).RemoveIssuer() +} + +// RemoveSubject deletes claim "sub" from c. +func (c Claims) RemoveSubject() { + jwt.Claims(c).RemoveIssuer() +} + +// RemoveAudience deletes claim "aud" from c. +func (c Claims) RemoveAudience() { + jwt.Claims(c).Audience() +} + +// RemoveExpiration deletes claim "exp" from c. +func (c Claims) RemoveExpiration() { + jwt.Claims(c).RemoveExpiration() +} + +// RemoveNotBefore deletes claim "nbf" from c. +func (c Claims) RemoveNotBefore() { + jwt.Claims(c).NotBefore() +} + +// RemoveIssuedAt deletes claim "iat" from c. +func (c Claims) RemoveIssuedAt() { + jwt.Claims(c).IssuedAt() +} + +// RemoveJWTID deletes claim "jti" from c. +func (c Claims) RemoveJWTID() { + jwt.Claims(c).RemoveJWTID() +} + +// SetIssuer sets claim "iss" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.1 +func (c Claims) SetIssuer(issuer string) { + jwt.Claims(c).SetIssuer(issuer) +} + +// SetSubject sets claim "iss" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.2 +func (c Claims) SetSubject(subject string) { + jwt.Claims(c).SetSubject(subject) +} + +// SetAudience sets claim "aud" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.3 +func (c Claims) SetAudience(audience ...string) { + jwt.Claims(c).SetAudience(audience...) +} + +// SetExpiration sets claim "exp" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.4 +func (c Claims) SetExpiration(expiration time.Time) { + jwt.Claims(c).SetExpiration(expiration) +} + +// SetNotBefore sets claim "nbf" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.5 +func (c Claims) SetNotBefore(notBefore time.Time) { + jwt.Claims(c).SetNotBefore(notBefore) +} + +// SetIssuedAt sets claim "iat" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.6 +func (c Claims) SetIssuedAt(issuedAt time.Time) { + jwt.Claims(c).SetIssuedAt(issuedAt) +} + +// SetJWTID sets claim "jti" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.7 +func (c Claims) SetJWTID(uniqueID string) { + jwt.Claims(c).SetJWTID(uniqueID) +} + +var ( + _ json.Marshaler = (Claims)(nil) + _ json.Unmarshaler = (*Claims)(nil) +) diff --git a/vendor/github.com/SermoDigital/jose/jws/doc.go b/vendor/github.com/SermoDigital/jose/jws/doc.go new file mode 100644 index 0000000..165836d --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/doc.go @@ -0,0 +1,2 @@ +// Package jws implements JWSs per RFC 7515 +package jws diff --git a/vendor/github.com/SermoDigital/jose/jws/errors.go b/vendor/github.com/SermoDigital/jose/jws/errors.go new file mode 100644 index 0000000..0512a0e --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/errors.go @@ -0,0 +1,62 @@ +package jws + +import "errors" + +var ( + + // ErrNotEnoughMethods is returned if New was called _or_ the Flat/Compact + // methods were called with 0 SigningMethods. + ErrNotEnoughMethods = errors.New("not enough methods provided") + + // ErrCouldNotUnmarshal is returned when Parse's json.Unmarshaler + // parameter returns an error. + ErrCouldNotUnmarshal = errors.New("custom unmarshal failed") + + // ErrNotCompact signals that the provided potential JWS is not + // in its compact representation. + ErrNotCompact = errors.New("not a compact JWS") + + // ErrDuplicateHeaderParameter signals that there are duplicate parameters + // in the provided Headers. + ErrDuplicateHeaderParameter = errors.New("duplicate parameters in the JOSE Header") + + // ErrTwoEmptyHeaders is returned if both Headers are empty. + ErrTwoEmptyHeaders = errors.New("both headers cannot be empty") + + // ErrNotEnoughKeys is returned when not enough keys are provided for + // the given SigningMethods. + ErrNotEnoughKeys = errors.New("not enough keys (for given methods)") + + // ErrDidNotValidate means the given JWT did not properly validate + ErrDidNotValidate = errors.New("did not validate") + + // ErrNoAlgorithm means no algorithm ("alg") was found in the Protected + // Header. + ErrNoAlgorithm = errors.New("no algorithm found") + + // ErrAlgorithmDoesntExist means the algorithm asked for cannot be + // found inside the signingMethod cache. + ErrAlgorithmDoesntExist = errors.New("algorithm doesn't exist") + + // ErrMismatchedAlgorithms means the algorithm inside the JWT was + // different than the algorithm the caller wanted to use. + ErrMismatchedAlgorithms = errors.New("mismatched algorithms") + + // ErrCannotValidate means the JWS cannot be validated for various + // reasons. For example, if there aren't any signatures/payloads/headers + // to actually validate. + ErrCannotValidate = errors.New("cannot validate") + + // ErrIsNotJWT means the given JWS is not a JWT. + ErrIsNotJWT = errors.New("JWS is not a JWT") + + // ErrHoldsJWE means the given JWS holds a JWE inside its payload. + ErrHoldsJWE = errors.New("JWS holds JWE") + + // ErrNotEnoughValidSignatures means the JWS did not meet the required + // number of signatures. + ErrNotEnoughValidSignatures = errors.New("not enough valid signatures in the JWS") + + // ErrNoTokenInRequest means there's no token present inside the *http.Request. + ErrNoTokenInRequest = errors.New("no token present in request") +) diff --git a/vendor/github.com/SermoDigital/jose/jws/jws.go b/vendor/github.com/SermoDigital/jose/jws/jws.go new file mode 100644 index 0000000..49e7b97 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/jws.go @@ -0,0 +1,490 @@ +package jws + +import ( + "bytes" + "encoding/json" + "net/http" + "strings" + + "github.com/SermoDigital/jose" + "github.com/SermoDigital/jose/crypto" +) + +// JWS implements a JWS per RFC 7515. +type JWS interface { + // Payload Returns the payload. + Payload() interface{} + + // SetPayload sets the payload with the given value. + SetPayload(p interface{}) + + // Protected returns the JWS' Protected Header. + Protected() jose.Protected + + // ProtectedAt returns the JWS' Protected Header. + // i represents the index of the Protected Header. + ProtectedAt(i int) jose.Protected + + // Header returns the JWS' unprotected Header. + Header() jose.Header + + // HeaderAt returns the JWS' unprotected Header. + // i represents the index of the unprotected Header. + HeaderAt(i int) jose.Header + + // Verify validates the current JWS' signature as-is. Refer to + // ValidateMulti for more information. + Verify(key interface{}, method crypto.SigningMethod) error + + // ValidateMulti validates the current JWS' signature as-is. Since it's + // meant to be called after parsing a stream of bytes into a JWS, it + // shouldn't do any internal parsing like the Sign, Flat, Compact, or + // General methods do. + VerifyMulti(keys []interface{}, methods []crypto.SigningMethod, o *SigningOpts) error + + // VerifyCallback validates the current JWS' signature as-is. It + // accepts a callback function that can be used to access header + // parameters to lookup needed information. For example, looking + // up the "kid" parameter. + // The return slice must be a slice of keys used in the verification + // of the JWS. + VerifyCallback(fn VerifyCallback, methods []crypto.SigningMethod, o *SigningOpts) error + + // General serializes the JWS into its "general" form per + // https://tools.ietf.org/html/rfc7515#section-7.2.1 + General(keys ...interface{}) ([]byte, error) + + // Flat serializes the JWS to its "flattened" form per + // https://tools.ietf.org/html/rfc7515#section-7.2.2 + Flat(key interface{}) ([]byte, error) + + // Compact serializes the JWS into its "compact" form per + // https://tools.ietf.org/html/rfc7515#section-7.1 + Compact(key interface{}) ([]byte, error) + + // IsJWT returns true if the JWS is a JWT. + IsJWT() bool +} + +// jws represents a specific jws. +type jws struct { + payload *payload + plcache rawBase64 + clean bool + + sb []sigHead + + isJWT bool +} + +// Payload returns the jws' payload. +func (j *jws) Payload() interface{} { + return j.payload.v +} + +// SetPayload sets the jws' raw, unexported payload. +func (j *jws) SetPayload(val interface{}) { + j.payload.v = val +} + +// Protected returns the JWS' Protected Header. +func (j *jws) Protected() jose.Protected { + return j.sb[0].protected +} + +// Protected returns the JWS' Protected Header. +// i represents the index of the Protected Header. +// Left empty, it defaults to 0. +func (j *jws) ProtectedAt(i int) jose.Protected { + return j.sb[i].protected +} + +// Header returns the JWS' unprotected Header. +func (j *jws) Header() jose.Header { + return j.sb[0].unprotected +} + +// HeaderAt returns the JWS' unprotected Header. +// |i| is the index of the unprotected Header. +func (j *jws) HeaderAt(i int) jose.Header { + return j.sb[i].unprotected +} + +// sigHead represents the 'signatures' member of the jws' "general" +// serialization form per +// https://tools.ietf.org/html/rfc7515#section-7.2.1 +// +// It's embedded inside the "flat" structure in order to properly +// create the "flat" jws. +type sigHead struct { + Protected rawBase64 `json:"protected,omitempty"` + Unprotected rawBase64 `json:"header,omitempty"` + Signature crypto.Signature `json:"signature"` + + protected jose.Protected + unprotected jose.Header + clean bool + + method crypto.SigningMethod +} + +func (s *sigHead) unmarshal() error { + if err := s.protected.UnmarshalJSON(s.Protected); err != nil { + return err + } + return s.unprotected.UnmarshalJSON(s.Unprotected) +} + +// New creates a JWS with the provided crypto.SigningMethods. +func New(content interface{}, methods ...crypto.SigningMethod) JWS { + sb := make([]sigHead, len(methods)) + for i := range methods { + sb[i] = sigHead{ + protected: jose.Protected{ + "alg": methods[i].Alg(), + }, + unprotected: jose.Header{}, + method: methods[i], + } + } + return &jws{ + payload: &payload{v: content}, + sb: sb, + } +} + +func (s *sigHead) assignMethod(p jose.Protected) error { + alg, ok := p.Get("alg").(string) + if !ok { + return ErrNoAlgorithm + } + + sm := GetSigningMethod(alg) + if sm == nil { + return ErrNoAlgorithm + } + s.method = sm + return nil +} + +type generic struct { + Payload rawBase64 `json:"payload"` + sigHead + Signatures []sigHead `json:"signatures,omitempty"` +} + +// Parse parses any of the three serialized jws forms into a physical +// jws per https://tools.ietf.org/html/rfc7515#section-5.2 +// +// It accepts a json.Unmarshaler in order to properly parse +// the payload. In order to keep the caller from having to do extra +// parsing of the payload, a json.Unmarshaler can be passed +// which will be then to unmarshal the payload however the caller +// wishes. Do note that if json.Unmarshal returns an error the +// original payload will be used as if no json.Unmarshaler was +// passed. +// +// Internally, Parse applies some heuristics and then calls either +// ParseGeneral, ParseFlat, or ParseCompact. +// It should only be called if, for whatever reason, you do not +// know which form the serialized JWT is in. +// +// It cannot parse a JWT. +func Parse(encoded []byte, u ...json.Unmarshaler) (JWS, error) { + // Try and unmarshal into a generic struct that'll + // hopefully hold either of the two JSON serialization + // formats. + var g generic + + // Not valid JSON. Let's try compact. + if err := json.Unmarshal(encoded, &g); err != nil { + return ParseCompact(encoded, u...) + } + + if g.Signatures == nil { + return g.parseFlat(u...) + } + return g.parseGeneral(u...) +} + +// ParseGeneral parses a jws serialized into its "general" form per +// https://tools.ietf.org/html/rfc7515#section-7.2.1 +// into a physical jws per +// https://tools.ietf.org/html/rfc7515#section-5.2 +// +// For information on the json.Unmarshaler parameter, see Parse. +func ParseGeneral(encoded []byte, u ...json.Unmarshaler) (JWS, error) { + var g generic + if err := json.Unmarshal(encoded, &g); err != nil { + return nil, err + } + return g.parseGeneral(u...) +} + +func (g *generic) parseGeneral(u ...json.Unmarshaler) (JWS, error) { + + var p payload + if len(u) > 0 { + p.u = u[0] + } + + if err := p.UnmarshalJSON(g.Payload); err != nil { + return nil, err + } + + for i := range g.Signatures { + if err := g.Signatures[i].unmarshal(); err != nil { + return nil, err + } + if err := checkHeaders(jose.Header(g.Signatures[i].protected), g.Signatures[i].unprotected); err != nil { + return nil, err + } + + if err := g.Signatures[i].assignMethod(g.Signatures[i].protected); err != nil { + return nil, err + } + } + + g.clean = len(g.Signatures) != 0 + + return &jws{ + payload: &p, + plcache: g.Payload, + clean: true, + sb: g.Signatures, + }, nil +} + +// ParseFlat parses a jws serialized into its "flat" form per +// https://tools.ietf.org/html/rfc7515#section-7.2.2 +// into a physical jws per +// https://tools.ietf.org/html/rfc7515#section-5.2 +// +// For information on the json.Unmarshaler parameter, see Parse. +func ParseFlat(encoded []byte, u ...json.Unmarshaler) (JWS, error) { + var g generic + if err := json.Unmarshal(encoded, &g); err != nil { + return nil, err + } + return g.parseFlat(u...) +} + +func (g *generic) parseFlat(u ...json.Unmarshaler) (JWS, error) { + + var p payload + if len(u) > 0 { + p.u = u[0] + } + + if err := p.UnmarshalJSON(g.Payload); err != nil { + return nil, err + } + + if err := g.sigHead.unmarshal(); err != nil { + return nil, err + } + g.sigHead.clean = true + + if err := checkHeaders(jose.Header(g.sigHead.protected), g.sigHead.unprotected); err != nil { + return nil, err + } + + if err := g.sigHead.assignMethod(g.sigHead.protected); err != nil { + return nil, err + } + + return &jws{ + payload: &p, + plcache: g.Payload, + clean: true, + sb: []sigHead{g.sigHead}, + }, nil +} + +// ParseCompact parses a jws serialized into its "compact" form per +// https://tools.ietf.org/html/rfc7515#section-7.1 +// into a physical jws per +// https://tools.ietf.org/html/rfc7515#section-5.2 +// +// For information on the json.Unmarshaler parameter, see Parse. +func ParseCompact(encoded []byte, u ...json.Unmarshaler) (JWS, error) { + return parseCompact(encoded, false, u...) +} + +func parseCompact(encoded []byte, jwt bool, u ...json.Unmarshaler) (*jws, error) { + + // This section loosely follows + // https://tools.ietf.org/html/rfc7519#section-7.2 + // because it's used to parse _both_ jws and JWTs. + + parts := bytes.Split(encoded, []byte{'.'}) + if len(parts) != 3 { + return nil, ErrNotCompact + } + + var p jose.Protected + if err := p.UnmarshalJSON(parts[0]); err != nil { + return nil, err + } + + s := sigHead{ + Protected: parts[0], + protected: p, + Signature: parts[2], + clean: true, + } + + if err := s.assignMethod(p); err != nil { + return nil, err + } + + var pl payload + if len(u) > 0 { + pl.u = u[0] + } + + j := jws{ + payload: &pl, + plcache: parts[1], + sb: []sigHead{s}, + isJWT: jwt, + } + + if err := j.payload.UnmarshalJSON(parts[1]); err != nil { + return nil, err + } + + j.clean = true + + if err := j.sb[0].Signature.UnmarshalJSON(parts[2]); err != nil { + return nil, err + } + + // https://tools.ietf.org/html/rfc7519#section-7.2.8 + cty, ok := p.Get("cty").(string) + if ok && cty == "JWT" { + return &j, ErrHoldsJWE + } + return &j, nil +} + +var ( + // JWSFormKey is the form "key" which should be used inside + // ParseFromRequest if the request is a multipart.Form. + JWSFormKey = "access_token" + + // MaxMemory is maximum amount of memory which should be used + // inside ParseFromRequest while parsing the multipart.Form + // if the request is a multipart.Form. + MaxMemory int64 = 10e6 +) + +// Format specifies which "format" the JWS is in -- Flat, General, +// or compact. Additionally, constants for JWT/Unknown are added. +type Format uint8 + +const ( + // Unknown format. + Unknown Format = iota + + // Flat format. + Flat + + // General format. + General + + // Compact format. + Compact +) + +var parseJumpTable = [...]func([]byte, ...json.Unmarshaler) (JWS, error){ + Unknown: Parse, + Flat: ParseFlat, + General: ParseGeneral, + Compact: ParseCompact, + 1<<8 - 1: Parse, // Max uint8. +} + +func init() { + for i := range parseJumpTable { + if parseJumpTable[i] == nil { + parseJumpTable[i] = Parse + } + } +} + +func fromHeader(req *http.Request) ([]byte, bool) { + if ah := req.Header.Get("Authorization"); len(ah) > 7 && strings.EqualFold(ah[0:7], "BEARER ") { + return []byte(ah[7:]), true + } + return nil, false +} + +func fromForm(req *http.Request) ([]byte, bool) { + if err := req.ParseMultipartForm(MaxMemory); err != nil { + return nil, false + } + if tokStr := req.Form.Get(JWSFormKey); tokStr != "" { + return []byte(tokStr), true + } + return nil, false +} + +// ParseFromHeader tries to find the JWS in an http.Request header. +func ParseFromHeader(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) { + if b, ok := fromHeader(req); ok { + return parseJumpTable[format](b, u...) + } + return nil, ErrNoTokenInRequest +} + +// ParseFromForm tries to find the JWS in an http.Request form request. +func ParseFromForm(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) { + if b, ok := fromForm(req); ok { + return parseJumpTable[format](b, u...) + } + return nil, ErrNoTokenInRequest +} + +// ParseFromRequest tries to find the JWS in an http.Request. +// This method will call ParseMultipartForm if there's no token in the header. +func ParseFromRequest(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) { + token, err := ParseFromHeader(req, format, u...) + if err == nil { + return token, nil + } + + token, err = ParseFromForm(req, format, u...) + if err == nil { + return token, nil + } + + return nil, err +} + +// IgnoreDupes should be set to true if the internal duplicate header key check +// should ignore duplicate Header keys instead of reporting an error when +// duplicate Header keys are found. +// +// Note: +// Duplicate Header keys are defined in +// https://tools.ietf.org/html/rfc7515#section-5.2 +// meaning keys that both the protected and unprotected +// Headers possess. +var IgnoreDupes bool + +// checkHeaders returns an error per the constraints described in +// IgnoreDupes' comment. +func checkHeaders(a, b jose.Header) error { + if len(a)+len(b) == 0 { + return ErrTwoEmptyHeaders + } + for key := range a { + if b.Has(key) && !IgnoreDupes { + return ErrDuplicateHeaderParameter + } + } + return nil +} + +var _ JWS = (*jws)(nil) diff --git a/vendor/github.com/SermoDigital/jose/jws/jws_serialize.go b/vendor/github.com/SermoDigital/jose/jws/jws_serialize.go new file mode 100644 index 0000000..923fdc2 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/jws_serialize.go @@ -0,0 +1,132 @@ +package jws + +import ( + "bytes" + "encoding/json" +) + +// Flat serializes the JWS to its "flattened" form per +// https://tools.ietf.org/html/rfc7515#section-7.2.2 +func (j *jws) Flat(key interface{}) ([]byte, error) { + if len(j.sb) < 1 { + return nil, ErrNotEnoughMethods + } + if err := j.sign(key); err != nil { + return nil, err + } + return json.Marshal(struct { + Payload rawBase64 `json:"payload"` + sigHead + }{ + Payload: j.plcache, + sigHead: j.sb[0], + }) +} + +// General serializes the JWS into its "general" form per +// https://tools.ietf.org/html/rfc7515#section-7.2.1 +// +// If only one key is passed it's used for all the provided +// crypto.SigningMethods. Otherwise, len(keys) must equal the number +// of crypto.SigningMethods added. +func (j *jws) General(keys ...interface{}) ([]byte, error) { + if err := j.sign(keys...); err != nil { + return nil, err + } + return json.Marshal(struct { + Payload rawBase64 `json:"payload"` + Signatures []sigHead `json:"signatures"` + }{ + Payload: j.plcache, + Signatures: j.sb, + }) +} + +// Compact serializes the JWS into its "compact" form per +// https://tools.ietf.org/html/rfc7515#section-7.1 +func (j *jws) Compact(key interface{}) ([]byte, error) { + if len(j.sb) < 1 { + return nil, ErrNotEnoughMethods + } + + if err := j.sign(key); err != nil { + return nil, err + } + + sig, err := j.sb[0].Signature.Base64() + if err != nil { + return nil, err + } + return format( + j.sb[0].Protected, + j.plcache, + sig, + ), nil +} + +// sign signs each index of j's sb member. +func (j *jws) sign(keys ...interface{}) error { + if err := j.cache(); err != nil { + return err + } + + if len(keys) < 1 || + len(keys) > 1 && len(keys) != len(j.sb) { + return ErrNotEnoughKeys + } + + if len(keys) == 1 { + k := keys[0] + keys = make([]interface{}, len(j.sb)) + for i := range keys { + keys[i] = k + } + } + + for i := range j.sb { + if err := j.sb[i].cache(); err != nil { + return err + } + + raw := format(j.sb[i].Protected, j.plcache) + sig, err := j.sb[i].method.Sign(raw, keys[i]) + if err != nil { + return err + } + j.sb[i].Signature = sig + } + + return nil +} + +// cache marshals the payload, but only if it's changed since the last cache. +func (j *jws) cache() (err error) { + if !j.clean { + j.plcache, err = j.payload.Base64() + j.clean = err == nil + } + return err +} + +// cache marshals the protected and unprotected headers, but only if +// they've changed since their last cache. +func (s *sigHead) cache() (err error) { + if !s.clean { + s.Protected, err = s.protected.Base64() + if err != nil { + return err + } + s.Unprotected, err = s.unprotected.Base64() + if err != nil { + return err + } + } + s.clean = true + return nil +} + +// format formats a slice of bytes in the order given, joining +// them with a period. +func format(a ...[]byte) []byte { + return bytes.Join(a, []byte{'.'}) +} diff --git a/vendor/github.com/SermoDigital/jose/jws/jws_validate.go b/vendor/github.com/SermoDigital/jose/jws/jws_validate.go new file mode 100644 index 0000000..e5e3abd --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/jws_validate.go @@ -0,0 +1,203 @@ +package jws + +import ( + "fmt" + + "github.com/SermoDigital/jose/crypto" +) + +// VerifyCallback is a callback function that can be used to access header +// parameters to lookup needed information. For example, looking +// up the "kid" parameter. +// The return slice must be a slice of keys used in the verification +// of the JWS. +type VerifyCallback func(JWS) ([]interface{}, error) + +// VerifyCallback validates the current JWS' signature as-is. It +// accepts a callback function that can be used to access header +// parameters to lookup needed information. For example, looking +// up the "kid" parameter. +// The return slice must be a slice of keys used in the verification +// of the JWS. +func (j *jws) VerifyCallback(fn VerifyCallback, methods []crypto.SigningMethod, o *SigningOpts) error { + keys, err := fn(j) + if err != nil { + return err + } + return j.VerifyMulti(keys, methods, o) +} + +// IsMultiError returns true if the given error is type *MultiError. +func IsMultiError(err error) bool { + _, ok := err.(*MultiError) + return ok +} + +// MultiError is a slice of errors. +type MultiError []error + +// Errors implements the error interface. +func (m *MultiError) Error() string { + var s string + var n int + for _, err := range *m { + if err != nil { + if n == 0 { + s = err.Error() + } + n++ + } + } + switch n { + case 0: + return "" + case 1: + return s + case 2: + return s + " and 1 other error" + } + return fmt.Sprintf("%s (and %d other errors)", s, n-1) +} + +// Any means any of the JWS signatures need to verify. +// Refer to verifyMulti for more information. +const Any int = 0 + +// VerifyMulti verifies the current JWS as-is. Since it's meant to be +// called after parsing a stream of bytes into a JWS, it doesn't do any +// internal parsing like the Sign, Flat, Compact, or General methods do. +func (j *jws) VerifyMulti(keys []interface{}, methods []crypto.SigningMethod, o *SigningOpts) error { + + // Catch a simple mistake. Parameter o is irrelevant in this scenario. + if len(keys) == 1 && + len(methods) == 1 && + len(j.sb) == 1 { + return j.Verify(keys[0], methods[0]) + } + + if len(j.sb) != len(methods) { + return ErrNotEnoughMethods + } + + if len(keys) < 1 || + len(keys) > 1 && len(keys) != len(j.sb) { + return ErrNotEnoughKeys + } + + // TODO do this better. + if len(keys) == 1 { + k := keys[0] + keys = make([]interface{}, len(methods)) + for i := range keys { + keys[i] = k + } + } + + var o2 SigningOpts + if o == nil { + o = new(SigningOpts) + } + + var m MultiError + for i := range j.sb { + err := j.sb[i].verify(j.plcache, keys[i], methods[i]) + if err != nil { + m = append(m, err) + } else { + o2.Inc() + if o.Needs(i) { + o.ptr++ + o2.Append(i) + } + } + } + + err := o.Validate(&o2) + if err != nil { + m = append(m, err) + } + if len(m) == 0 { + return nil + } + return &m +} + +// SigningOpts is a struct which holds options for validating +// JWS signatures. +// Number represents the cumulative which signatures need to verify +// in order for the JWS to be considered valid. +// Leave 'Number' empty or set it to the constant 'Any' if any number of +// valid signatures (greater than one) should verify the JWS. +// +// Use the indices of the signatures that need to verify in order +// for the JWS to be considered valid if specific signatures need +// to verify in order for the JWS to be considered valid. +// +// Note: +// The JWS spec requires *at least* one +// signature to verify in order for the JWS to be considered valid. +type SigningOpts struct { + // Minimum of signatures which need to verify. + Number int + + // Indices of specific signatures which need to verify. + Indices []int + ptr int + + _ struct{} +} + +// Append appends x to s' Indices member. +func (s *SigningOpts) Append(x int) { + s.Indices = append(s.Indices, x) +} + +// Needs returns true if x resides inside s' Indices member +// for the given index. It's used to match two SigningOpts Indices members. +func (s *SigningOpts) Needs(x int) bool { + return s.ptr < len(s.Indices) && s.Indices[s.ptr] == x +} + +// Inc increments s' Number member by one. +func (s *SigningOpts) Inc() { s.Number++ } + +// Validate returns any errors found while validating the +// provided SigningOpts. The receiver validates |have|. +// It'll return an error if the passed SigningOpts' Number member is less +// than s' or if the passed SigningOpts' Indices slice isn't equal to s'. +func (s *SigningOpts) Validate(have *SigningOpts) error { + if have.Number < s.Number || + (s.Indices != nil && + !eq(s.Indices, have.Indices)) { + return ErrNotEnoughValidSignatures + } + return nil +} + +func eq(a, b []int) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +// Verify verifies the current JWS as-is. Refer to verifyMulti +// for more information. +func (j *jws) Verify(key interface{}, method crypto.SigningMethod) error { + if len(j.sb) < 1 { + return ErrCannotValidate + } + return j.sb[0].verify(j.plcache, key, method) +} + +func (s *sigHead) verify(pl []byte, key interface{}, method crypto.SigningMethod) error { + if s.method.Alg() != method.Alg() || s.method.Hasher() != method.Hasher() { + return ErrMismatchedAlgorithms + } + return method.Verify(format(s.Protected, pl), s.Signature, key) +} diff --git a/vendor/github.com/SermoDigital/jose/jws/jwt.go b/vendor/github.com/SermoDigital/jose/jws/jwt.go new file mode 100644 index 0000000..53da1fc --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/jwt.go @@ -0,0 +1,115 @@ +package jws + +import ( + "net/http" + "time" + + "github.com/SermoDigital/jose" + "github.com/SermoDigital/jose/crypto" + "github.com/SermoDigital/jose/jwt" +) + +// NewJWT creates a new JWT with the given claims. +func NewJWT(claims Claims, method crypto.SigningMethod) jwt.JWT { + j, ok := New(claims, method).(*jws) + if !ok { + panic("jws.NewJWT: runtime panic: New(...).(*jws) != true") + } + j.sb[0].protected.Set("typ", "JWT") + j.isJWT = true + return j +} + +// Serialize helps implements jwt.JWT. +func (j *jws) Serialize(key interface{}) ([]byte, error) { + if j.isJWT { + return j.Compact(key) + } + return nil, ErrIsNotJWT +} + +// Claims helps implements jwt.JWT. +func (j *jws) Claims() jwt.Claims { + if j.isJWT { + if c, ok := j.payload.v.(Claims); ok { + return jwt.Claims(c) + } + } + return nil +} + +// ParseJWTFromRequest tries to find the JWT in an http.Request. +// This method will call ParseMultipartForm if there's no token in the header. +func ParseJWTFromRequest(req *http.Request) (jwt.JWT, error) { + if b, ok := fromHeader(req); ok { + return ParseJWT(b) + } + if b, ok := fromForm(req); ok { + return ParseJWT(b) + } + return nil, ErrNoTokenInRequest +} + +// ParseJWT parses a serialized jwt.JWT into a physical jwt.JWT. +// If its payload isn't a set of claims (or able to be coerced into +// a set of claims) it'll return an error stating the +// JWT isn't a JWT. +func ParseJWT(encoded []byte) (jwt.JWT, error) { + t, err := parseCompact(encoded, true) + if err != nil { + return nil, err + } + c, ok := t.Payload().(map[string]interface{}) + if !ok { + return nil, ErrIsNotJWT + } + t.SetPayload(Claims(c)) + return t, nil +} + +// IsJWT returns true if the JWS is a JWT. +func (j *jws) IsJWT() bool { + return j.isJWT +} + +func (j *jws) Validate(key interface{}, m crypto.SigningMethod, v ...*jwt.Validator) error { + if j.isJWT { + if err := j.Verify(key, m); err != nil { + return err + } + var v1 jwt.Validator + if len(v) > 0 { + v1 = *v[0] + } + c, ok := j.payload.v.(Claims) + if ok { + if err := v1.Validate(j); err != nil { + return err + } + return jwt.Claims(c).Validate(jose.Now(), v1.EXP, v1.NBF) + } + } + return ErrIsNotJWT +} + +// Conv converts a func(Claims) error to type jwt.ValidateFunc. +func Conv(fn func(Claims) error) jwt.ValidateFunc { + if fn == nil { + return nil + } + return func(c jwt.Claims) error { + return fn(Claims(c)) + } +} + +// NewValidator returns a jwt.Validator. +func NewValidator(c Claims, exp, nbf time.Duration, fn func(Claims) error) *jwt.Validator { + return &jwt.Validator{ + Expected: jwt.Claims(c), + EXP: exp, + NBF: nbf, + Fn: Conv(fn), + } +} + +var _ jwt.JWT = (*jws)(nil) diff --git a/vendor/github.com/SermoDigital/jose/jws/payload.go b/vendor/github.com/SermoDigital/jose/jws/payload.go new file mode 100644 index 0000000..58bfd06 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/payload.go @@ -0,0 +1,52 @@ +package jws + +import ( + "encoding/json" + + "github.com/SermoDigital/jose" +) + +// payload represents the payload of a JWS. +type payload struct { + v interface{} + u json.Unmarshaler + _ struct{} +} + +// MarshalJSON implements json.Marshaler for payload. +func (p *payload) MarshalJSON() ([]byte, error) { + b, err := json.Marshal(p.v) + if err != nil { + return nil, err + } + return jose.EncodeEscape(b), nil +} + +// Base64 implements jose.Encoder. +func (p *payload) Base64() ([]byte, error) { + b, err := json.Marshal(p.v) + if err != nil { + return nil, err + } + return jose.Base64Encode(b), nil +} + +// MarshalJSON implements json.Unmarshaler for payload. +func (p *payload) UnmarshalJSON(b []byte) error { + b2, err := jose.DecodeEscaped(b) + if err != nil { + return err + } + if p.u != nil { + err := p.u.UnmarshalJSON(b2) + p.v = p.u + return err + } + return json.Unmarshal(b2, &p.v) +} + +var ( + _ json.Marshaler = (*payload)(nil) + _ json.Unmarshaler = (*payload)(nil) + _ jose.Encoder = (*payload)(nil) +) diff --git a/vendor/github.com/SermoDigital/jose/jws/rawbase64.go b/vendor/github.com/SermoDigital/jose/jws/rawbase64.go new file mode 100644 index 0000000..f2c4060 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/rawbase64.go @@ -0,0 +1,28 @@ +package jws + +import "encoding/json" + +type rawBase64 []byte + +// MarshalJSON implements json.Marshaler for rawBase64. +func (r rawBase64) MarshalJSON() ([]byte, error) { + buf := make([]byte, len(r)+2) + buf[0] = '"' + copy(buf[1:], r) + buf[len(buf)-1] = '"' + return buf, nil +} + +// MarshalJSON implements json.Unmarshaler for rawBase64. +func (r *rawBase64) UnmarshalJSON(b []byte) error { + if len(b) > 1 && b[0] == '"' && b[len(b)-1] == '"' { + b = b[1 : len(b)-1] + } + *r = rawBase64(b) + return nil +} + +var ( + _ json.Marshaler = (rawBase64)(nil) + _ json.Unmarshaler = (*rawBase64)(nil) +) diff --git a/vendor/github.com/SermoDigital/jose/jws/signing_methods.go b/vendor/github.com/SermoDigital/jose/jws/signing_methods.go new file mode 100644 index 0000000..525806f --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jws/signing_methods.go @@ -0,0 +1,63 @@ +package jws + +import ( + "sync" + + "github.com/SermoDigital/jose/crypto" +) + +var ( + mu sync.RWMutex + + signingMethods = map[string]crypto.SigningMethod{ + crypto.SigningMethodES256.Alg(): crypto.SigningMethodES256, + crypto.SigningMethodES384.Alg(): crypto.SigningMethodES384, + crypto.SigningMethodES512.Alg(): crypto.SigningMethodES512, + + crypto.SigningMethodPS256.Alg(): crypto.SigningMethodPS256, + crypto.SigningMethodPS384.Alg(): crypto.SigningMethodPS384, + crypto.SigningMethodPS512.Alg(): crypto.SigningMethodPS512, + + crypto.SigningMethodRS256.Alg(): crypto.SigningMethodRS256, + crypto.SigningMethodRS384.Alg(): crypto.SigningMethodRS384, + crypto.SigningMethodRS512.Alg(): crypto.SigningMethodRS512, + + crypto.SigningMethodHS256.Alg(): crypto.SigningMethodHS256, + crypto.SigningMethodHS384.Alg(): crypto.SigningMethodHS384, + crypto.SigningMethodHS512.Alg(): crypto.SigningMethodHS512, + + crypto.Unsecured.Alg(): crypto.Unsecured, + } +) + +// RegisterSigningMethod registers the crypto.SigningMethod in the global map. +// This is typically done inside the caller's init function. +func RegisterSigningMethod(sm crypto.SigningMethod) { + alg := sm.Alg() + if GetSigningMethod(alg) != nil { + panic("jose/jws: cannot duplicate signing methods") + } + + if !sm.Hasher().Available() { + panic("jose/jws: specific hash is unavailable") + } + + mu.Lock() + signingMethods[alg] = sm + mu.Unlock() +} + +// RemoveSigningMethod removes the crypto.SigningMethod from the global map. +func RemoveSigningMethod(sm crypto.SigningMethod) { + mu.Lock() + delete(signingMethods, sm.Alg()) + mu.Unlock() +} + +// GetSigningMethod retrieves a crypto.SigningMethod from the global map. +func GetSigningMethod(alg string) (method crypto.SigningMethod) { + mu.RLock() + method = signingMethods[alg] + mu.RUnlock() + return method +} diff --git a/vendor/github.com/SermoDigital/jose/jwt/claims.go b/vendor/github.com/SermoDigital/jose/jwt/claims.go new file mode 100644 index 0000000..d3d93bf --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jwt/claims.go @@ -0,0 +1,274 @@ +package jwt + +import ( + "encoding/json" + "time" + + "github.com/SermoDigital/jose" +) + +// Claims implements a set of JOSE Claims with the addition of some helper +// methods, similar to net/url.Values. +type Claims map[string]interface{} + +// Validate validates the Claims per the claims found in +// https://tools.ietf.org/html/rfc7519#section-4.1 +func (c Claims) Validate(now time.Time, expLeeway, nbfLeeway time.Duration) error { + if exp, ok := c.Expiration(); ok { + if now.After(exp.Add(expLeeway)) { + return ErrTokenIsExpired + } + } + + if nbf, ok := c.NotBefore(); ok { + if !now.After(nbf.Add(-nbfLeeway)) { + return ErrTokenNotYetValid + } + } + return nil +} + +// Get retrieves the value corresponding with key from the Claims. +func (c Claims) Get(key string) interface{} { + if c == nil { + return nil + } + return c[key] +} + +// Set sets Claims[key] = val. It'll overwrite without warning. +func (c Claims) Set(key string, val interface{}) { + c[key] = val +} + +// Del removes the value that corresponds with key from the Claims. +func (c Claims) Del(key string) { + delete(c, key) +} + +// Has returns true if a value for the given key exists inside the Claims. +func (c Claims) Has(key string) bool { + _, ok := c[key] + return ok +} + +// MarshalJSON implements json.Marshaler for Claims. +func (c Claims) MarshalJSON() ([]byte, error) { + if c == nil || len(c) == 0 { + return nil, nil + } + return json.Marshal(map[string]interface{}(c)) +} + +// Base64 implements the jose.Encoder interface. +func (c Claims) Base64() ([]byte, error) { + b, err := c.MarshalJSON() + if err != nil { + return nil, err + } + return jose.Base64Encode(b), nil +} + +// UnmarshalJSON implements json.Unmarshaler for Claims. +func (c *Claims) UnmarshalJSON(b []byte) error { + if b == nil { + return nil + } + + b, err := jose.DecodeEscaped(b) + if err != nil { + return err + } + + // Since json.Unmarshal calls UnmarshalJSON, + // calling json.Unmarshal on *p would be infinitely recursive + // A temp variable is needed because &map[string]interface{}(*p) is + // invalid Go. (Address of unaddressable object and all that...) + + tmp := map[string]interface{}(*c) + if err = json.Unmarshal(b, &tmp); err != nil { + return err + } + *c = Claims(tmp) + return nil +} + +// Issuer retrieves claim "iss" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.1 +func (c Claims) Issuer() (string, bool) { + v, ok := c.Get("iss").(string) + return v, ok +} + +// Subject retrieves claim "sub" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.2 +func (c Claims) Subject() (string, bool) { + v, ok := c.Get("sub").(string) + return v, ok +} + +// Audience retrieves claim "aud" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.3 +func (c Claims) Audience() ([]string, bool) { + // Audience claim must be stringy. That is, it may be one string + // or multiple strings but it should not be anything else. E.g. an int. + switch t := c.Get("aud").(type) { + case string: + return []string{t}, true + case []string: + return t, true + case []interface{}: + return stringify(t...) + case interface{}: + return stringify(t) + } + return nil, false +} + +func stringify(a ...interface{}) ([]string, bool) { + if len(a) == 0 { + return nil, false + } + + s := make([]string, len(a)) + for i := range a { + str, ok := a[i].(string) + if !ok { + return nil, false + } + s[i] = str + } + return s, true +} + +// Expiration retrieves claim "exp" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.4 +func (c Claims) Expiration() (time.Time, bool) { + return c.GetTime("exp") +} + +// NotBefore retrieves claim "nbf" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.5 +func (c Claims) NotBefore() (time.Time, bool) { + return c.GetTime("nbf") +} + +// IssuedAt retrieves claim "iat" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.6 +func (c Claims) IssuedAt() (time.Time, bool) { + return c.GetTime("iat") +} + +// JWTID retrieves claim "jti" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.7 +func (c Claims) JWTID() (string, bool) { + v, ok := c.Get("jti").(string) + return v, ok +} + +// RemoveIssuer deletes claim "iss" from c. +func (c Claims) RemoveIssuer() { c.Del("iss") } + +// RemoveSubject deletes claim "sub" from c. +func (c Claims) RemoveSubject() { c.Del("sub") } + +// RemoveAudience deletes claim "aud" from c. +func (c Claims) RemoveAudience() { c.Del("aud") } + +// RemoveExpiration deletes claim "exp" from c. +func (c Claims) RemoveExpiration() { c.Del("exp") } + +// RemoveNotBefore deletes claim "nbf" from c. +func (c Claims) RemoveNotBefore() { c.Del("nbf") } + +// RemoveIssuedAt deletes claim "iat" from c. +func (c Claims) RemoveIssuedAt() { c.Del("iat") } + +// RemoveJWTID deletes claim "jti" from c. +func (c Claims) RemoveJWTID() { c.Del("jti") } + +// SetIssuer sets claim "iss" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.1 +func (c Claims) SetIssuer(issuer string) { + c.Set("iss", issuer) +} + +// SetSubject sets claim "iss" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.2 +func (c Claims) SetSubject(subject string) { + c.Set("sub", subject) +} + +// SetAudience sets claim "aud" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.3 +func (c Claims) SetAudience(audience ...string) { + if len(audience) == 1 { + c.Set("aud", audience[0]) + } else { + c.Set("aud", audience) + } +} + +// SetExpiration sets claim "exp" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.4 +func (c Claims) SetExpiration(expiration time.Time) { + c.SetTime("exp", expiration) +} + +// SetNotBefore sets claim "nbf" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.5 +func (c Claims) SetNotBefore(notBefore time.Time) { + c.SetTime("nbf", notBefore) +} + +// SetIssuedAt sets claim "iat" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.6 +func (c Claims) SetIssuedAt(issuedAt time.Time) { + c.SetTime("iat", issuedAt) +} + +// SetJWTID sets claim "jti" per its type in +// https://tools.ietf.org/html/rfc7519#section-4.1.7 +func (c Claims) SetJWTID(uniqueID string) { + c.Set("jti", uniqueID) +} + +// GetTime returns a Unix timestamp for the given key. +// +// It converts an int, int32, int64, uint, uint32, uint64 or float64 into a Unix +// timestamp (epoch seconds). float32 does not have sufficient precision to +// store a Unix timestamp. +// +// Numeric values parsed from JSON will always be stored as float64 since +// Claims is a map[string]interface{}. However, the values may be stored directly +// in the claims as a different type. +func (c Claims) GetTime(key string) (time.Time, bool) { + switch t := c.Get(key).(type) { + case int: + return time.Unix(int64(t), 0), true + case int32: + return time.Unix(int64(t), 0), true + case int64: + return time.Unix(int64(t), 0), true + case uint: + return time.Unix(int64(t), 0), true + case uint32: + return time.Unix(int64(t), 0), true + case uint64: + return time.Unix(int64(t), 0), true + case float64: + return time.Unix(int64(t), 0), true + default: + return time.Time{}, false + } +} + +// SetTime stores a UNIX time for the given key. +func (c Claims) SetTime(key string, t time.Time) { + c.Set(key, t.Unix()) +} + +var ( + _ json.Marshaler = (Claims)(nil) + _ json.Unmarshaler = (*Claims)(nil) +) diff --git a/vendor/github.com/SermoDigital/jose/jwt/doc.go b/vendor/github.com/SermoDigital/jose/jwt/doc.go new file mode 100644 index 0000000..6004d0f --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jwt/doc.go @@ -0,0 +1,2 @@ +// Package jwt implements JWTs per RFC 7519 +package jwt diff --git a/vendor/github.com/SermoDigital/jose/jwt/eq.go b/vendor/github.com/SermoDigital/jose/jwt/eq.go new file mode 100644 index 0000000..3113269 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jwt/eq.go @@ -0,0 +1,47 @@ +package jwt + +func verifyPrincipals(pcpls, auds []string) bool { + // "Each principal intended to process the JWT MUST + // identify itself with a value in the audience claim." + // - https://tools.ietf.org/html/rfc7519#section-4.1.3 + + found := -1 + for i, p := range pcpls { + for _, v := range auds { + if p == v { + found++ + break + } + } + if found != i { + return false + } + } + return true +} + +// ValidAudience returns true iff: +// - a and b are strings and a == b +// - a is string, b is []string and a is in b +// - a is []string, b is []string and all of a is in b +// - a is []string, b is string and len(a) == 1 and a[0] == b +func ValidAudience(a, b interface{}) bool { + s1, ok := a.(string) + if ok { + if s2, ok := b.(string); ok { + return s1 == s2 + } + a2, ok := b.([]string) + return ok && verifyPrincipals([]string{s1}, a2) + } + + a1, ok := a.([]string) + if !ok { + return false + } + if a2, ok := b.([]string); ok { + return verifyPrincipals(a1, a2) + } + s2, ok := b.(string) + return ok && len(a1) == 1 && a1[0] == s2 +} diff --git a/vendor/github.com/SermoDigital/jose/jwt/errors.go b/vendor/github.com/SermoDigital/jose/jwt/errors.go new file mode 100644 index 0000000..96b240d --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jwt/errors.go @@ -0,0 +1,28 @@ +package jwt + +import "errors" + +var ( + // ErrTokenIsExpired is return when time.Now().Unix() is after + // the token's "exp" claim. + ErrTokenIsExpired = errors.New("token is expired") + + // ErrTokenNotYetValid is return when time.Now().Unix() is before + // the token's "nbf" claim. + ErrTokenNotYetValid = errors.New("token is not yet valid") + + // ErrInvalidISSClaim means the "iss" claim is invalid. + ErrInvalidISSClaim = errors.New("claim \"iss\" is invalid") + + // ErrInvalidSUBClaim means the "sub" claim is invalid. + ErrInvalidSUBClaim = errors.New("claim \"sub\" is invalid") + + // ErrInvalidIATClaim means the "iat" claim is invalid. + ErrInvalidIATClaim = errors.New("claim \"iat\" is invalid") + + // ErrInvalidJTIClaim means the "jti" claim is invalid. + ErrInvalidJTIClaim = errors.New("claim \"jti\" is invalid") + + // ErrInvalidAUDClaim means the "aud" claim is invalid. + ErrInvalidAUDClaim = errors.New("claim \"aud\" is invalid") +) diff --git a/vendor/github.com/SermoDigital/jose/jwt/jwt.go b/vendor/github.com/SermoDigital/jose/jwt/jwt.go new file mode 100644 index 0000000..feb1712 --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/jwt/jwt.go @@ -0,0 +1,144 @@ +package jwt + +import ( + "time" + + "github.com/SermoDigital/jose/crypto" +) + +// JWT represents a JWT per RFC 7519. +// It's described as an interface instead of a physical structure +// because both JWS and JWEs can be JWTs. So, in order to use either, +// import one of those two packages and use their "NewJWT" (and other) +// functions. +type JWT interface { + // Claims returns the set of Claims. + Claims() Claims + + // Validate returns an error describing any issues found while + // validating the JWT. For info on the fn parameter, see the + // comment on ValidateFunc. + Validate(key interface{}, method crypto.SigningMethod, v ...*Validator) error + + // Serialize serializes the JWT into its on-the-wire + // representation. + Serialize(key interface{}) ([]byte, error) +} + +// ValidateFunc is a function that provides access to the JWT +// and allows for custom validation. Keep in mind that the Verify +// methods in the JWS/JWE sibling packages call ValidateFunc *after* +// validating the JWS/JWE, but *before* any validation per the JWT +// RFC. Therefore, the ValidateFunc can be used to short-circuit +// verification, but cannot be used to circumvent the RFC. +// Custom JWT implementations are free to abuse this, but it is +// not recommended. +type ValidateFunc func(Claims) error + +// Validator represents some of the validation options. +type Validator struct { + Expected Claims // If non-nil, these are required to match. + EXP time.Duration // EXPLeeway + NBF time.Duration // NBFLeeway + Fn ValidateFunc // See ValidateFunc for more information. + + _ struct{} // Require explicitly-named struct fields. +} + +// Validate validates the JWT based on the expected claims in v. +// Note: it only validates the registered claims per +// https://tools.ietf.org/html/rfc7519#section-4.1 +// +// Custom claims should be validated using v's Fn member. +func (v *Validator) Validate(j JWT) error { + if iss, ok := v.Expected.Issuer(); ok && + j.Claims().Get("iss") != iss { + return ErrInvalidISSClaim + } + if sub, ok := v.Expected.Subject(); ok && + j.Claims().Get("sub") != sub { + return ErrInvalidSUBClaim + } + if iat, ok := v.Expected.IssuedAt(); ok { + if t, ok := j.Claims().GetTime("iat"); !t.Equal(iat) || !ok { + return ErrInvalidIATClaim + } + } + if jti, ok := v.Expected.JWTID(); ok && + j.Claims().Get("jti") != jti { + return ErrInvalidJTIClaim + } + + if aud, ok := v.Expected.Audience(); ok { + aud2, ok := j.Claims().Audience() + if !ok || !ValidAudience(aud, aud2) { + return ErrInvalidAUDClaim + } + } + + if v.Fn != nil { + return v.Fn(j.Claims()) + } + return nil +} + +// SetClaim sets the claim with the given val. +func (v *Validator) SetClaim(claim string, val interface{}) { + v.expect() + v.Expected.Set(claim, val) +} + +// SetIssuer sets the "iss" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.1 +func (v *Validator) SetIssuer(iss string) { + v.expect() + v.Expected.Set("iss", iss) +} + +// SetSubject sets the "sub" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.2 +func (v *Validator) SetSubject(sub string) { + v.expect() + v.Expected.Set("sub", sub) +} + +// SetAudience sets the "aud" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.3 +func (v *Validator) SetAudience(aud string) { + v.expect() + v.Expected.Set("aud", aud) +} + +// SetExpiration sets the "exp" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.4 +func (v *Validator) SetExpiration(exp time.Time) { + v.expect() + v.Expected.Set("exp", exp) +} + +// SetNotBefore sets the "nbf" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.5 +func (v *Validator) SetNotBefore(nbf time.Time) { + v.expect() + v.Expected.Set("nbf", nbf) +} + +// SetIssuedAt sets the "iat" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.6 +func (v *Validator) SetIssuedAt(iat time.Time) { + v.expect() + v.Expected.Set("iat", iat) +} + +// SetJWTID sets the "jti" claim per +// https://tools.ietf.org/html/rfc7519#section-4.1.7 +func (v *Validator) SetJWTID(jti string) { + v.expect() + v.Expected.Set("jti", jti) +} + +func (v *Validator) expect() { + if v.Expected == nil { + v.Expected = make(Claims) + } +} diff --git a/vendor/github.com/SermoDigital/jose/time.go b/vendor/github.com/SermoDigital/jose/time.go new file mode 100644 index 0000000..f366a7a --- /dev/null +++ b/vendor/github.com/SermoDigital/jose/time.go @@ -0,0 +1,6 @@ +package jose + +import "time" + +// Now returns the current time in UTC. +func Now() time.Time { return time.Now().UTC() } diff --git a/vendor/github.com/blang/semver/LICENSE b/vendor/github.com/blang/semver/LICENSE new file mode 100644 index 0000000..5ba5c86 --- /dev/null +++ b/vendor/github.com/blang/semver/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2014 Benedikt Lang + +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/blang/semver/README.md b/vendor/github.com/blang/semver/README.md new file mode 100644 index 0000000..4399639 --- /dev/null +++ b/vendor/github.com/blang/semver/README.md @@ -0,0 +1,191 @@ +semver for golang [![Build Status](https://drone.io/github.com/blang/semver/status.png)](https://drone.io/github.com/blang/semver/latest) [![GoDoc](https://godoc.org/github.com/blang/semver?status.png)](https://godoc.org/github.com/blang/semver) [![Coverage Status](https://img.shields.io/coveralls/blang/semver.svg)](https://coveralls.io/r/blang/semver?branch=master) +====== + +semver is a [Semantic Versioning](http://semver.org/) library written in golang. It fully covers spec version `2.0.0`. + +Usage +----- +```bash +$ go get github.com/blang/semver +``` +Note: Always vendor your dependencies or fix on a specific version tag. + +```go +import github.com/blang/semver +v1, err := semver.Make("1.0.0-beta") +v2, err := semver.Make("2.0.0-beta") +v1.Compare(v2) +``` + +Also check the [GoDocs](http://godoc.org/github.com/blang/semver). + +Why should I use this lib? +----- + +- Fully spec compatible +- No reflection +- No regex +- Fully tested (Coverage >99%) +- Readable parsing/validation errors +- Fast (See [Benchmarks](#benchmarks)) +- Only Stdlib +- Uses values instead of pointers +- Many features, see below + + +Features +----- + +- Parsing and validation at all levels +- Comparator-like comparisons +- Compare Helper Methods +- InPlace manipulation +- Ranges `>=1.0.0 <2.0.0 || >=3.0.0 !3.0.1-beta.1` +- Sortable (implements sort.Interface) +- database/sql compatible (sql.Scanner/Valuer) +- encoding/json compatible (json.Marshaler/Unmarshaler) + +Ranges +------ + +A `Range` is a set of conditions which specify which versions satisfy the range. + +A condition is composed of an operator and a version. The supported operators are: + +- `<1.0.0` Less than `1.0.0` +- `<=1.0.0` Less than or equal to `1.0.0` +- `>1.0.0` Greater than `1.0.0` +- `>=1.0.0` Greater than or equal to `1.0.0` +- `1.0.0`, `=1.0.0`, `==1.0.0` Equal to `1.0.0` +- `!1.0.0`, `!=1.0.0` Not equal to `1.0.0`. Excludes version `1.0.0`. + +A `Range` can link multiple `Ranges` separated by space: + +Ranges can be linked by logical AND: + + - `>1.0.0 <2.0.0` would match between both ranges, so `1.1.1` and `1.8.7` but not `1.0.0` or `2.0.0` + - `>1.0.0 <3.0.0 !2.0.3-beta.2` would match every version between `1.0.0` and `3.0.0` except `2.0.3-beta.2` + +Ranges can also be linked by logical OR: + + - `<2.0.0 || >=3.0.0` would match `1.x.x` and `3.x.x` but not `2.x.x` + +AND has a higher precedence than OR. It's not possible to use brackets. + +Ranges can be combined by both AND and OR + + - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1` + +Range usage: + +``` +v, err := semver.Parse("1.2.3") +range, err := semver.ParseRange(">1.0.0 <2.0.0 || >=3.0.0") +if range(v) { + //valid +} + +``` + +Example +----- + +Have a look at full examples in [examples/main.go](examples/main.go) + +```go +import github.com/blang/semver + +v, err := semver.Make("0.0.1-alpha.preview+123.github") +fmt.Printf("Major: %d\n", v.Major) +fmt.Printf("Minor: %d\n", v.Minor) +fmt.Printf("Patch: %d\n", v.Patch) +fmt.Printf("Pre: %s\n", v.Pre) +fmt.Printf("Build: %s\n", v.Build) + +// Prerelease versions array +if len(v.Pre) > 0 { + fmt.Println("Prerelease versions:") + for i, pre := range v.Pre { + fmt.Printf("%d: %q\n", i, pre) + } +} + +// Build meta data array +if len(v.Build) > 0 { + fmt.Println("Build meta data:") + for i, build := range v.Build { + fmt.Printf("%d: %q\n", i, build) + } +} + +v001, err := semver.Make("0.0.1") +// Compare using helpers: v.GT(v2), v.LT, v.GTE, v.LTE +v001.GT(v) == true +v.LT(v001) == true +v.GTE(v) == true +v.LTE(v) == true + +// Or use v.Compare(v2) for comparisons (-1, 0, 1): +v001.Compare(v) == 1 +v.Compare(v001) == -1 +v.Compare(v) == 0 + +// Manipulate Version in place: +v.Pre[0], err = semver.NewPRVersion("beta") +if err != nil { + fmt.Printf("Error parsing pre release version: %q", err) +} + +fmt.Println("\nValidate versions:") +v.Build[0] = "?" + +err = v.Validate() +if err != nil { + fmt.Printf("Validation failed: %s\n", err) +} +``` + + +Benchmarks +----- + + BenchmarkParseSimple-4 5000000 390 ns/op 48 B/op 1 allocs/op + BenchmarkParseComplex-4 1000000 1813 ns/op 256 B/op 7 allocs/op + BenchmarkParseAverage-4 1000000 1171 ns/op 163 B/op 4 allocs/op + BenchmarkStringSimple-4 20000000 119 ns/op 16 B/op 1 allocs/op + BenchmarkStringLarger-4 10000000 206 ns/op 32 B/op 2 allocs/op + BenchmarkStringComplex-4 5000000 324 ns/op 80 B/op 3 allocs/op + BenchmarkStringAverage-4 5000000 273 ns/op 53 B/op 2 allocs/op + BenchmarkValidateSimple-4 200000000 9.33 ns/op 0 B/op 0 allocs/op + BenchmarkValidateComplex-4 3000000 469 ns/op 0 B/op 0 allocs/op + BenchmarkValidateAverage-4 5000000 256 ns/op 0 B/op 0 allocs/op + BenchmarkCompareSimple-4 100000000 11.8 ns/op 0 B/op 0 allocs/op + BenchmarkCompareComplex-4 50000000 30.8 ns/op 0 B/op 0 allocs/op + BenchmarkCompareAverage-4 30000000 41.5 ns/op 0 B/op 0 allocs/op + BenchmarkSort-4 3000000 419 ns/op 256 B/op 2 allocs/op + BenchmarkRangeParseSimple-4 2000000 850 ns/op 192 B/op 5 allocs/op + BenchmarkRangeParseAverage-4 1000000 1677 ns/op 400 B/op 10 allocs/op + BenchmarkRangeParseComplex-4 300000 5214 ns/op 1440 B/op 30 allocs/op + BenchmarkRangeMatchSimple-4 50000000 25.6 ns/op 0 B/op 0 allocs/op + BenchmarkRangeMatchAverage-4 30000000 56.4 ns/op 0 B/op 0 allocs/op + BenchmarkRangeMatchComplex-4 10000000 153 ns/op 0 B/op 0 allocs/op + +See benchmark cases at [semver_test.go](semver_test.go) + + +Motivation +----- + +I simply couldn't find any lib supporting the full spec. Others were just wrong or used reflection and regex which i don't like. + + +Contribution +----- + +Feel free to make a pull request. For bigger changes create a issue first to discuss about it. + + +License +----- + +See [LICENSE](LICENSE) file. diff --git a/vendor/github.com/blang/semver/json.go b/vendor/github.com/blang/semver/json.go new file mode 100644 index 0000000..a74bf7c --- /dev/null +++ b/vendor/github.com/blang/semver/json.go @@ -0,0 +1,23 @@ +package semver + +import ( + "encoding/json" +) + +// MarshalJSON implements the encoding/json.Marshaler interface. +func (v Version) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} + +// UnmarshalJSON implements the encoding/json.Unmarshaler interface. +func (v *Version) UnmarshalJSON(data []byte) (err error) { + var versionString string + + if err = json.Unmarshal(data, &versionString); err != nil { + return + } + + *v, err = Parse(versionString) + + return +} diff --git a/vendor/github.com/blang/semver/range.go b/vendor/github.com/blang/semver/range.go new file mode 100644 index 0000000..0a8eaa1 --- /dev/null +++ b/vendor/github.com/blang/semver/range.go @@ -0,0 +1,224 @@ +package semver + +import ( + "fmt" + "strings" + "unicode" +) + +type comparator func(Version, Version) bool + +var ( + compEQ comparator = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == 0 + } + compNE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) != 0 + } + compGT = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == 1 + } + compGE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) >= 0 + } + compLT = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == -1 + } + compLE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) <= 0 + } +) + +type versionRange struct { + v Version + c comparator +} + +// rangeFunc creates a Range from the given versionRange. +func (vr *versionRange) rangeFunc() Range { + return Range(func(v Version) bool { + return vr.c(v, vr.v) + }) +} + +// Range represents a range of versions. +// A Range can be used to check if a Version satisfies it: +// +// range, err := semver.ParseRange(">1.0.0 <2.0.0") +// range(semver.MustParse("1.1.1") // returns true +type Range func(Version) bool + +// OR combines the existing Range with another Range using logical OR. +func (rf Range) OR(f Range) Range { + return Range(func(v Version) bool { + return rf(v) || f(v) + }) +} + +// AND combines the existing Range with another Range using logical AND. +func (rf Range) AND(f Range) Range { + return Range(func(v Version) bool { + return rf(v) && f(v) + }) +} + +// ParseRange parses a range and returns a Range. +// If the range could not be parsed an error is returned. +// +// Valid ranges are: +// - "<1.0.0" +// - "<=1.0.0" +// - ">1.0.0" +// - ">=1.0.0" +// - "1.0.0", "=1.0.0", "==1.0.0" +// - "!1.0.0", "!=1.0.0" +// +// A Range can consist of multiple ranges separated by space: +// Ranges can be linked by logical AND: +// - ">1.0.0 <2.0.0" would match between both ranges, so "1.1.1" and "1.8.7" but not "1.0.0" or "2.0.0" +// - ">1.0.0 <3.0.0 !2.0.3-beta.2" would match every version between 1.0.0 and 3.0.0 except 2.0.3-beta.2 +// +// Ranges can also be linked by logical OR: +// - "<2.0.0 || >=3.0.0" would match "1.x.x" and "3.x.x" but not "2.x.x" +// +// AND has a higher precedence than OR. It's not possible to use brackets. +// +// Ranges can be combined by both AND and OR +// +// - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1` +func ParseRange(s string) (Range, error) { + parts := splitAndTrim(s) + orParts, err := splitORParts(parts) + if err != nil { + return nil, err + } + var orFn Range + for _, p := range orParts { + var andFn Range + for _, ap := range p { + opStr, vStr, err := splitComparatorVersion(ap) + if err != nil { + return nil, err + } + vr, err := buildVersionRange(opStr, vStr) + if err != nil { + return nil, fmt.Errorf("Could not parse Range %q: %s", ap, err) + } + rf := vr.rangeFunc() + + // Set function + if andFn == nil { + andFn = rf + } else { // Combine with existing function + andFn = andFn.AND(rf) + } + } + if orFn == nil { + orFn = andFn + } else { + orFn = orFn.OR(andFn) + } + + } + return orFn, nil +} + +// splitORParts splits the already cleaned parts by '||'. +// Checks for invalid positions of the operator and returns an +// error if found. +func splitORParts(parts []string) ([][]string, error) { + var ORparts [][]string + last := 0 + for i, p := range parts { + if p == "||" { + if i == 0 { + return nil, fmt.Errorf("First element in range is '||'") + } + ORparts = append(ORparts, parts[last:i]) + last = i + 1 + } + } + if last == len(parts) { + return nil, fmt.Errorf("Last element in range is '||'") + } + ORparts = append(ORparts, parts[last:]) + return ORparts, nil +} + +// buildVersionRange takes a slice of 2: operator and version +// and builds a versionRange, otherwise an error. +func buildVersionRange(opStr, vStr string) (*versionRange, error) { + c := parseComparator(opStr) + if c == nil { + return nil, fmt.Errorf("Could not parse comparator %q in %q", opStr, strings.Join([]string{opStr, vStr}, "")) + } + v, err := Parse(vStr) + if err != nil { + return nil, fmt.Errorf("Could not parse version %q in %q: %s", vStr, strings.Join([]string{opStr, vStr}, ""), err) + } + + return &versionRange{ + v: v, + c: c, + }, nil + +} + +// splitAndTrim splits a range string by spaces and cleans leading and trailing spaces +func splitAndTrim(s string) (result []string) { + last := 0 + for i := 0; i < len(s); i++ { + if s[i] == ' ' { + if last < i-1 { + result = append(result, s[last:i]) + } + last = i + 1 + } + } + if last < len(s)-1 { + result = append(result, s[last:]) + } + // parts := strings.Split(s, " ") + // for _, x := range parts { + // if s := strings.TrimSpace(x); len(s) != 0 { + // result = append(result, s) + // } + // } + return +} + +// splitComparatorVersion splits the comparator from the version. +// Spaces between the comparator and the version are not allowed. +// Input must be free of leading or trailing spaces. +func splitComparatorVersion(s string) (string, string, error) { + i := strings.IndexFunc(s, unicode.IsDigit) + if i == -1 { + return "", "", fmt.Errorf("Could not get version from string: %q", s) + } + return strings.TrimSpace(s[0:i]), s[i:], nil +} + +func parseComparator(s string) comparator { + switch s { + case "==": + fallthrough + case "": + fallthrough + case "=": + return compEQ + case ">": + return compGT + case ">=": + return compGE + case "<": + return compLT + case "<=": + return compLE + case "!": + fallthrough + case "!=": + return compNE + } + + return nil +} diff --git a/vendor/github.com/blang/semver/semver.go b/vendor/github.com/blang/semver/semver.go new file mode 100644 index 0000000..bbf85ce --- /dev/null +++ b/vendor/github.com/blang/semver/semver.go @@ -0,0 +1,395 @@ +package semver + +import ( + "errors" + "fmt" + "strconv" + "strings" +) + +const ( + numbers string = "0123456789" + alphas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-" + alphanum = alphas + numbers +) + +// SpecVersion is the latest fully supported spec version of semver +var SpecVersion = Version{ + Major: 2, + Minor: 0, + Patch: 0, +} + +// Version represents a semver compatible version +type Version struct { + Major uint64 + Minor uint64 + Patch uint64 + Pre []PRVersion + Build []string //No Precendence +} + +// Version to string +func (v Version) String() string { + b := make([]byte, 0, 5) + b = strconv.AppendUint(b, v.Major, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Minor, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Patch, 10) + + if len(v.Pre) > 0 { + b = append(b, '-') + b = append(b, v.Pre[0].String()...) + + for _, pre := range v.Pre[1:] { + b = append(b, '.') + b = append(b, pre.String()...) + } + } + + if len(v.Build) > 0 { + b = append(b, '+') + b = append(b, v.Build[0]...) + + for _, build := range v.Build[1:] { + b = append(b, '.') + b = append(b, build...) + } + } + + return string(b) +} + +// Equals checks if v is equal to o. +func (v Version) Equals(o Version) bool { + return (v.Compare(o) == 0) +} + +// EQ checks if v is equal to o. +func (v Version) EQ(o Version) bool { + return (v.Compare(o) == 0) +} + +// NE checks if v is not equal to o. +func (v Version) NE(o Version) bool { + return (v.Compare(o) != 0) +} + +// GT checks if v is greater than o. +func (v Version) GT(o Version) bool { + return (v.Compare(o) == 1) +} + +// GTE checks if v is greater than or equal to o. +func (v Version) GTE(o Version) bool { + return (v.Compare(o) >= 0) +} + +// GE checks if v is greater than or equal to o. +func (v Version) GE(o Version) bool { + return (v.Compare(o) >= 0) +} + +// LT checks if v is less than o. +func (v Version) LT(o Version) bool { + return (v.Compare(o) == -1) +} + +// LTE checks if v is less than or equal to o. +func (v Version) LTE(o Version) bool { + return (v.Compare(o) <= 0) +} + +// LE checks if v is less than or equal to o. +func (v Version) LE(o Version) bool { + return (v.Compare(o) <= 0) +} + +// Compare compares Versions v to o: +// -1 == v is less than o +// 0 == v is equal to o +// 1 == v is greater than o +func (v Version) Compare(o Version) int { + if v.Major != o.Major { + if v.Major > o.Major { + return 1 + } + return -1 + } + if v.Minor != o.Minor { + if v.Minor > o.Minor { + return 1 + } + return -1 + } + if v.Patch != o.Patch { + if v.Patch > o.Patch { + return 1 + } + return -1 + } + + // Quick comparison if a version has no prerelease versions + if len(v.Pre) == 0 && len(o.Pre) == 0 { + return 0 + } else if len(v.Pre) == 0 && len(o.Pre) > 0 { + return 1 + } else if len(v.Pre) > 0 && len(o.Pre) == 0 { + return -1 + } + + i := 0 + for ; i < len(v.Pre) && i < len(o.Pre); i++ { + if comp := v.Pre[i].Compare(o.Pre[i]); comp == 0 { + continue + } else if comp == 1 { + return 1 + } else { + return -1 + } + } + + // If all pr versions are the equal but one has further prversion, this one greater + if i == len(v.Pre) && i == len(o.Pre) { + return 0 + } else if i == len(v.Pre) && i < len(o.Pre) { + return -1 + } else { + return 1 + } + +} + +// Validate validates v and returns error in case +func (v Version) Validate() error { + // Major, Minor, Patch already validated using uint64 + + for _, pre := range v.Pre { + if !pre.IsNum { //Numeric prerelease versions already uint64 + if len(pre.VersionStr) == 0 { + return fmt.Errorf("Prerelease can not be empty %q", pre.VersionStr) + } + if !containsOnly(pre.VersionStr, alphanum) { + return fmt.Errorf("Invalid character(s) found in prerelease %q", pre.VersionStr) + } + } + } + + for _, build := range v.Build { + if len(build) == 0 { + return fmt.Errorf("Build meta data can not be empty %q", build) + } + if !containsOnly(build, alphanum) { + return fmt.Errorf("Invalid character(s) found in build meta data %q", build) + } + } + + return nil +} + +// New is an alias for Parse and returns a pointer, parses version string and returns a validated Version or error +func New(s string) (vp *Version, err error) { + v, err := Parse(s) + vp = &v + return +} + +// Make is an alias for Parse, parses version string and returns a validated Version or error +func Make(s string) (Version, error) { + return Parse(s) +} + +// Parse parses version string and returns a validated Version or error +func Parse(s string) (Version, error) { + if len(s) == 0 { + return Version{}, errors.New("Version string empty") + } + + // Split into major.minor.(patch+pr+meta) + parts := strings.SplitN(s, ".", 3) + if len(parts) != 3 { + return Version{}, errors.New("No Major.Minor.Patch elements found") + } + + // Major + if !containsOnly(parts[0], numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in major number %q", parts[0]) + } + if hasLeadingZeroes(parts[0]) { + return Version{}, fmt.Errorf("Major number must not contain leading zeroes %q", parts[0]) + } + major, err := strconv.ParseUint(parts[0], 10, 64) + if err != nil { + return Version{}, err + } + + // Minor + if !containsOnly(parts[1], numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1]) + } + if hasLeadingZeroes(parts[1]) { + return Version{}, fmt.Errorf("Minor number must not contain leading zeroes %q", parts[1]) + } + minor, err := strconv.ParseUint(parts[1], 10, 64) + if err != nil { + return Version{}, err + } + + v := Version{} + v.Major = major + v.Minor = minor + + var build, prerelease []string + patchStr := parts[2] + + if buildIndex := strings.IndexRune(patchStr, '+'); buildIndex != -1 { + build = strings.Split(patchStr[buildIndex+1:], ".") + patchStr = patchStr[:buildIndex] + } + + if preIndex := strings.IndexRune(patchStr, '-'); preIndex != -1 { + prerelease = strings.Split(patchStr[preIndex+1:], ".") + patchStr = patchStr[:preIndex] + } + + if !containsOnly(patchStr, numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in patch number %q", patchStr) + } + if hasLeadingZeroes(patchStr) { + return Version{}, fmt.Errorf("Patch number must not contain leading zeroes %q", patchStr) + } + patch, err := strconv.ParseUint(patchStr, 10, 64) + if err != nil { + return Version{}, err + } + + v.Patch = patch + + // Prerelease + for _, prstr := range prerelease { + parsedPR, err := NewPRVersion(prstr) + if err != nil { + return Version{}, err + } + v.Pre = append(v.Pre, parsedPR) + } + + // Build meta data + for _, str := range build { + if len(str) == 0 { + return Version{}, errors.New("Build meta data is empty") + } + if !containsOnly(str, alphanum) { + return Version{}, fmt.Errorf("Invalid character(s) found in build meta data %q", str) + } + v.Build = append(v.Build, str) + } + + return v, nil +} + +// MustParse is like Parse but panics if the version cannot be parsed. +func MustParse(s string) Version { + v, err := Parse(s) + if err != nil { + panic(`semver: Parse(` + s + `): ` + err.Error()) + } + return v +} + +// PRVersion represents a PreRelease Version +type PRVersion struct { + VersionStr string + VersionNum uint64 + IsNum bool +} + +// NewPRVersion creates a new valid prerelease version +func NewPRVersion(s string) (PRVersion, error) { + if len(s) == 0 { + return PRVersion{}, errors.New("Prerelease is empty") + } + v := PRVersion{} + if containsOnly(s, numbers) { + if hasLeadingZeroes(s) { + return PRVersion{}, fmt.Errorf("Numeric PreRelease version must not contain leading zeroes %q", s) + } + num, err := strconv.ParseUint(s, 10, 64) + + // Might never be hit, but just in case + if err != nil { + return PRVersion{}, err + } + v.VersionNum = num + v.IsNum = true + } else if containsOnly(s, alphanum) { + v.VersionStr = s + v.IsNum = false + } else { + return PRVersion{}, fmt.Errorf("Invalid character(s) found in prerelease %q", s) + } + return v, nil +} + +// IsNumeric checks if prerelease-version is numeric +func (v PRVersion) IsNumeric() bool { + return v.IsNum +} + +// Compare compares two PreRelease Versions v and o: +// -1 == v is less than o +// 0 == v is equal to o +// 1 == v is greater than o +func (v PRVersion) Compare(o PRVersion) int { + if v.IsNum && !o.IsNum { + return -1 + } else if !v.IsNum && o.IsNum { + return 1 + } else if v.IsNum && o.IsNum { + if v.VersionNum == o.VersionNum { + return 0 + } else if v.VersionNum > o.VersionNum { + return 1 + } else { + return -1 + } + } else { // both are Alphas + if v.VersionStr == o.VersionStr { + return 0 + } else if v.VersionStr > o.VersionStr { + return 1 + } else { + return -1 + } + } +} + +// PreRelease version to string +func (v PRVersion) String() string { + if v.IsNum { + return strconv.FormatUint(v.VersionNum, 10) + } + return v.VersionStr +} + +func containsOnly(s string, set string) bool { + return strings.IndexFunc(s, func(r rune) bool { + return !strings.ContainsRune(set, r) + }) == -1 +} + +func hasLeadingZeroes(s string) bool { + return len(s) > 1 && s[0] == '0' +} + +// NewBuildVersion creates a new valid build version +func NewBuildVersion(s string) (string, error) { + if len(s) == 0 { + return "", errors.New("Buildversion is empty") + } + if !containsOnly(s, alphanum) { + return "", fmt.Errorf("Invalid character(s) found in build meta data %q", s) + } + return s, nil +} diff --git a/vendor/github.com/blang/semver/sort.go b/vendor/github.com/blang/semver/sort.go new file mode 100644 index 0000000..e18f880 --- /dev/null +++ b/vendor/github.com/blang/semver/sort.go @@ -0,0 +1,28 @@ +package semver + +import ( + "sort" +) + +// Versions represents multiple versions. +type Versions []Version + +// Len returns length of version collection +func (s Versions) Len() int { + return len(s) +} + +// Swap swaps two versions inside the collection by its indices +func (s Versions) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +// Less checks if version at index i is less than version at index j +func (s Versions) Less(i, j int) bool { + return s[i].LT(s[j]) +} + +// Sort sorts a slice of versions +func Sort(versions []Version) { + sort.Sort(Versions(versions)) +} diff --git a/vendor/github.com/blang/semver/sql.go b/vendor/github.com/blang/semver/sql.go new file mode 100644 index 0000000..eb4d802 --- /dev/null +++ b/vendor/github.com/blang/semver/sql.go @@ -0,0 +1,30 @@ +package semver + +import ( + "database/sql/driver" + "fmt" +) + +// Scan implements the database/sql.Scanner interface. +func (v *Version) Scan(src interface{}) (err error) { + var str string + switch src := src.(type) { + case string: + str = src + case []byte: + str = string(src) + default: + return fmt.Errorf("Version.Scan: cannot convert %T to string.", src) + } + + if t, err := Parse(str); err == nil { + *v = t + } + + return +} + +// Value implements the database/sql/driver.Valuer interface. +func (v Version) Value() (driver.Value, error) { + return v.String(), nil +} diff --git a/vendor/github.com/bmizerany/pat/.gitignore b/vendor/github.com/bmizerany/pat/.gitignore new file mode 100644 index 0000000..72f13bd --- /dev/null +++ b/vendor/github.com/bmizerany/pat/.gitignore @@ -0,0 +1,3 @@ +*.prof +*.out +example/example diff --git a/vendor/github.com/bmizerany/pat/README.md b/vendor/github.com/bmizerany/pat/README.md new file mode 100644 index 0000000..2bb12fa --- /dev/null +++ b/vendor/github.com/bmizerany/pat/README.md @@ -0,0 +1,82 @@ +# pat (formerly pat.go) - A Sinatra style pattern muxer for Go's net/http library + +[![GoDoc](https://godoc.org/github.com/bmizerany/pat?status.svg)](https://godoc.org/github.com/bmizerany/pat) + +## INSTALL + + $ go get github.com/bmizerany/pat + +## USE + +```go +package main + +import ( + "io" + "net/http" + "github.com/bmizerany/pat" + "log" +) + +// hello world, the web server +func HelloServer(w http.ResponseWriter, req *http.Request) { + io.WriteString(w, "hello, "+req.URL.Query().Get(":name")+"!\n") +} + +func main() { + m := pat.New() + m.Get("/hello/:name", http.HandlerFunc(HelloServer)) + + // Register this pat with the default serve mux so that other packages + // may also be exported. (i.e. /debug/pprof/*) + http.Handle("/", m) + err := http.ListenAndServe(":12345", nil) + if err != nil { + log.Fatal("ListenAndServe: ", err) + } +} +``` + +It's that simple. + +For more information, see: +http://godoc.org/github.com/bmizerany/pat + +## CONTRIBUTORS + +* Alexis Svinartchouk (@zvin) +* Blake Mizerany (@bmizerany) +* Brian Ketelsen (@bketelsen) +* Bryan Matsuo (@bmatsuo) +* Caleb Spare (@cespare) +* Evan Shaw (@edsrzf) +* Gary Burd (@garyburd) +* George Rogers (@georgerogers42) +* Keith Rarick (@kr) +* Matt Williams (@mattyw) +* Mike Stipicevic (@wickedchicken) +* Nick Saika (@nesv) +* Timothy Cyrus (@tcyrus) +* binqin (@binku87) + +## LICENSE + +Copyright (C) 2012 by Keith Rarick, Blake Mizerany + +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/bmizerany/pat/mux.go b/vendor/github.com/bmizerany/pat/mux.go new file mode 100644 index 0000000..ec86fcd --- /dev/null +++ b/vendor/github.com/bmizerany/pat/mux.go @@ -0,0 +1,310 @@ +// Package pat implements a simple URL pattern muxer +package pat + +import ( + "net/http" + "net/url" + "strings" +) + +// PatternServeMux is an HTTP request multiplexer. It matches the URL of each +// incoming request against a list of registered patterns with their associated +// methods and calls the handler for the pattern that most closely matches the +// URL. +// +// Pattern matching attempts each pattern in the order in which they were +// registered. +// +// Patterns may contain literals or captures. Capture names start with a colon +// and consist of letters A-Z, a-z, _, and 0-9. The rest of the pattern +// matches literally. The portion of the URL matching each name ends with an +// occurrence of the character in the pattern immediately following the name, +// or a /, whichever comes first. It is possible for a name to match the empty +// string. +// +// Example pattern with one capture: +// /hello/:name +// Will match: +// /hello/blake +// /hello/keith +// Will not match: +// /hello/blake/ +// /hello/blake/foo +// /foo +// /foo/bar +// +// Example 2: +// /hello/:name/ +// Will match: +// /hello/blake/ +// /hello/keith/foo +// /hello/blake +// /hello/keith +// Will not match: +// /foo +// /foo/bar +// +// A pattern ending with a slash will add an implicit redirect for its non-slash +// version. For example: Get("/foo/", handler) also registers +// Get("/foo", handler) as a redirect. You may override it by registering +// Get("/foo", anotherhandler) before the slash version. +// +// Retrieve the capture from the r.URL.Query().Get(":name") in a handler (note +// the colon). If a capture name appears more than once, the additional values +// are appended to the previous values (see +// http://golang.org/pkg/net/url/#Values) +// +// A trivial example server is: +// +// package main +// +// import ( +// "io" +// "net/http" +// "github.com/bmizerany/pat" +// "log" +// ) +// +// // hello world, the web server +// func HelloServer(w http.ResponseWriter, req *http.Request) { +// io.WriteString(w, "hello, "+req.URL.Query().Get(":name")+"!\n") +// } +// +// func main() { +// m := pat.New() +// m.Get("/hello/:name", http.HandlerFunc(HelloServer)) +// +// // Register this pat with the default serve mux so that other packages +// // may also be exported. (i.e. /debug/pprof/*) +// http.Handle("/", m) +// err := http.ListenAndServe(":12345", nil) +// if err != nil { +// log.Fatal("ListenAndServe: ", err) +// } +// } +// +// When "Method Not Allowed": +// +// Pat knows what methods are allowed given a pattern and a URI. For +// convenience, PatternServeMux will add the Allow header for requests that +// match a pattern for a method other than the method requested and set the +// Status to "405 Method Not Allowed". +// +// If the NotFound handler is set, then it is used whenever the pattern doesn't +// match the request path for the current method (and the Allow header is not +// altered). +type PatternServeMux struct { + // NotFound, if set, is used whenever the request doesn't match any + // pattern for its method. NotFound should be set before serving any + // requests. + NotFound http.Handler + handlers map[string][]*patHandler +} + +// New returns a new PatternServeMux. +func New() *PatternServeMux { + return &PatternServeMux{handlers: make(map[string][]*patHandler)} +} + +// ServeHTTP matches r.URL.Path against its routing table using the rules +// described above. +func (p *PatternServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { + for _, ph := range p.handlers[r.Method] { + if params, ok := ph.try(r.URL.Path); ok { + if len(params) > 0 && !ph.redirect { + r.URL.RawQuery = url.Values(params).Encode() + "&" + r.URL.RawQuery + } + ph.ServeHTTP(w, r) + return + } + } + + if p.NotFound != nil { + p.NotFound.ServeHTTP(w, r) + return + } + + allowed := make([]string, 0, len(p.handlers)) + for meth, handlers := range p.handlers { + if meth == r.Method { + continue + } + + for _, ph := range handlers { + if _, ok := ph.try(r.URL.Path); ok { + allowed = append(allowed, meth) + } + } + } + + if len(allowed) == 0 { + http.NotFound(w, r) + return + } + + w.Header().Add("Allow", strings.Join(allowed, ", ")) + http.Error(w, "Method Not Allowed", 405) +} + +// Head will register a pattern with a handler for HEAD requests. +func (p *PatternServeMux) Head(pat string, h http.Handler) { + p.Add("HEAD", pat, h) +} + +// Get will register a pattern with a handler for GET requests. +// It also registers pat for HEAD requests. If this needs to be overridden, use +// Head before Get with pat. +func (p *PatternServeMux) Get(pat string, h http.Handler) { + p.Add("HEAD", pat, h) + p.Add("GET", pat, h) +} + +// Post will register a pattern with a handler for POST requests. +func (p *PatternServeMux) Post(pat string, h http.Handler) { + p.Add("POST", pat, h) +} + +// Put will register a pattern with a handler for PUT requests. +func (p *PatternServeMux) Put(pat string, h http.Handler) { + p.Add("PUT", pat, h) +} + +// Del will register a pattern with a handler for DELETE requests. +func (p *PatternServeMux) Del(pat string, h http.Handler) { + p.Add("DELETE", pat, h) +} + +// Options will register a pattern with a handler for OPTIONS requests. +func (p *PatternServeMux) Options(pat string, h http.Handler) { + p.Add("OPTIONS", pat, h) +} + +// Patch will register a pattern with a handler for PATCH requests. +func (p *PatternServeMux) Patch(pat string, h http.Handler) { + p.Add("PATCH", pat, h) +} + +// Add will register a pattern with a handler for meth requests. +func (p *PatternServeMux) Add(meth, pat string, h http.Handler) { + p.add(meth, pat, h, false) +} + +func (p *PatternServeMux) add(meth, pat string, h http.Handler, redirect bool) { + handlers := p.handlers[meth] + for _, p1 := range handlers { + if p1.pat == pat { + return // found existing pattern; do nothing + } + } + handler := &patHandler{ + pat: pat, + Handler: h, + redirect: redirect, + } + p.handlers[meth] = append(handlers, handler) + + n := len(pat) + if n > 0 && pat[n-1] == '/' { + p.add(meth, pat[:n-1], http.HandlerFunc(addSlashRedirect), true) + } +} + +func addSlashRedirect(w http.ResponseWriter, r *http.Request) { + u := *r.URL + u.Path += "/" + http.Redirect(w, r, u.String(), http.StatusMovedPermanently) +} + +// Tail returns the trailing string in path after the final slash for a pat ending with a slash. +// +// Examples: +// +// Tail("/hello/:title/", "/hello/mr/mizerany") == "mizerany" +// Tail("/:a/", "/x/y/z") == "y/z" +// +func Tail(pat, path string) string { + var i, j int + for i < len(path) { + switch { + case j >= len(pat): + if pat[len(pat)-1] == '/' { + return path[i:] + } + return "" + case pat[j] == ':': + var nextc byte + _, nextc, j = match(pat, isAlnum, j+1) + _, _, i = match(path, matchPart(nextc), i) + case path[i] == pat[j]: + i++ + j++ + default: + return "" + } + } + return "" +} + +type patHandler struct { + pat string + http.Handler + redirect bool +} + +func (ph *patHandler) try(path string) (url.Values, bool) { + p := make(url.Values) + var i, j int + for i < len(path) { + switch { + case j >= len(ph.pat): + if ph.pat != "/" && len(ph.pat) > 0 && ph.pat[len(ph.pat)-1] == '/' { + return p, true + } + return nil, false + case ph.pat[j] == ':': + var name, val string + var nextc byte + name, nextc, j = match(ph.pat, isAlnum, j+1) + val, _, i = match(path, matchPart(nextc), i) + p.Add(":"+name, val) + case path[i] == ph.pat[j]: + i++ + j++ + default: + return nil, false + } + } + if j != len(ph.pat) { + return nil, false + } + return p, true +} + +func matchPart(b byte) func(byte) bool { + return func(c byte) bool { + return c != b && c != '/' + } +} + +func match(s string, f func(byte) bool, i int) (matched string, next byte, j int) { + j = i + for j < len(s) && f(s[j]) { + j++ + } + if j < len(s) { + next = s[j] + } + return s[i:j], next, j +} + +func isAlpha(ch byte) bool { + return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' +} + +func isDigit(ch byte) bool { + return '0' <= ch && ch <= '9' +} + +func isAlnum(ch byte) bool { + return isAlpha(ch) || isDigit(ch) +} diff --git a/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/LICENSE b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/NOTICE b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/NOTICE new file mode 100644 index 0000000..4115d15 --- /dev/null +++ b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/NOTICE @@ -0,0 +1,11 @@ +Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +This project contains software that is Copyright (c) 2015 Pivotal Software, Inc. + +This project is licensed to you under the Apache License, Version 2.0 (the "License"). + +You may not use this project except in compliance with the License. + +This project may include a number of subcomponents with separate copyright notices +and license terms. Your use of these subcomponents is subject to the terms and +conditions of the subcomponent's license, as noted in the LICENSE file. diff --git a/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/web/list_plugins_handler.go b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/web/list_plugins_handler.go new file mode 100644 index 0000000..9666bf7 --- /dev/null +++ b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/web/list_plugins_handler.go @@ -0,0 +1,20 @@ +package web + +import ( + "encoding/json" + "io" + "net/http" +) + +func NewListPluginsHandler(plugins PluginsJson, logger io.Writer) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, err := json.Marshal(plugins) + if err != nil { + logger.Write([]byte("Error marshalling plugin models: " + err.Error())) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write(b) + }) +} diff --git a/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/web/plugins.go b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/web/plugins.go new file mode 100644 index 0000000..ff0b436 --- /dev/null +++ b/vendor/github.com/cloudfoundry-incubator/cli-plugin-repo/web/plugins.go @@ -0,0 +1,45 @@ +package web + +import "time" + +var ValidPlatforms = []string{"osx", "linux32", "linux64", "win32", "win64"} + +type Plugin struct { + Name string `json:"name"` + Description string `json:"description"` + Version string `json:"version"` + Created time.Time `json:"created"` + Updated time.Time `json:"updated"` + Company string `json:"company"` + Authors []Author `json:"authors"` + Homepage string `json:"homepage"` + Binaries []Binary `json:"binaries"` +} + +type Binary struct { + Platform string `json:"platform"` + Url string `json:"url"` + Checksum string `json:"checksum"` +} + +type PluginsJson struct { + Plugins []Plugin `json:"plugins"` +} + +type Author struct { + Name string `json:"name"` + Homepage string `json:"homepage"` + Contact string `json:"contact"` +} + +func (p PluginsJson) Len() int { + return len(p.Plugins) +} + +func (p PluginsJson) Less(i, j int) bool { + return p.Plugins[i].Updated.After(p.Plugins[j].Updated) +} + +func (p PluginsJson) Swap(i, j int) { + p.Plugins[i], p.Plugins[j] = p.Plugins[j], p.Plugins[i] +} diff --git a/vendor/github.com/cloudfoundry/cli/LICENSE b/vendor/github.com/cloudfoundry/cli/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/cloudfoundry/cli/NOTICE b/vendor/github.com/cloudfoundry/cli/NOTICE new file mode 100644 index 0000000..4e6a3b3 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/NOTICE @@ -0,0 +1,11 @@ +Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +This project contains software that is Copyright (c) 2013-2015 Pivotal Software, Inc. + +This project is licensed to you under the Apache License, Version 2.0 (the "License"). + +You may not use this project except in compliance with the License. + +This project may include a number of subcomponents with separate copyright notices +and license terms. Your use of these subcomponents is subject to the terms and +conditions of the subcomponent's license, as noted in the LICENSE file. diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor.go new file mode 100644 index 0000000..ff08a08 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor.go @@ -0,0 +1,90 @@ +package configuration + +import ( + "io/ioutil" + "os" +) + +const ( + filePermissions = 0600 + dirPermissions = 0700 +) + +//go:generate counterfeiter . Persistor + +type Persistor interface { + Delete() + Exists() bool + Load(DataInterface) error + Save(DataInterface) error +} + +//go:generate counterfeiter . DataInterface + +type DataInterface interface { + JSONMarshalV3() ([]byte, error) + JSONUnmarshalV3([]byte) error +} + +type DiskPersistor struct { + filePath string +} + +func NewDiskPersistor(path string) DiskPersistor { + return DiskPersistor{ + filePath: path, + } +} + +func (dp DiskPersistor) Exists() bool { + _, err := os.Stat(dp.filePath) + if err != nil && !os.IsExist(err) { + return false + } + return true +} + +func (dp DiskPersistor) Delete() { + _ = os.Remove(dp.filePath) +} + +func (dp DiskPersistor) Load(data DataInterface) error { + err := dp.read(data) + if os.IsPermission(err) { + return err + } + + if err != nil { + err = dp.write(data) + } + return err +} + +func (dp DiskPersistor) Save(data DataInterface) error { + return dp.write(data) +} + +func (dp DiskPersistor) read(data DataInterface) error { + err := dp.makeDirectory() + if err != nil { + return err + } + + jsonBytes, err := ioutil.ReadFile(dp.filePath) + if err != nil { + return err + } + + err = data.JSONUnmarshalV3(jsonBytes) + return err +} + +func (dp DiskPersistor) write(data DataInterface) error { + bytes, err := data.JSONMarshalV3() + if err != nil { + return err + } + + err = ioutil.WriteFile(dp.filePath, bytes, filePermissions) + return err +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_unix.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_unix.go new file mode 100644 index 0000000..b1d4520 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_unix.go @@ -0,0 +1,12 @@ +// +build !windows + +package configuration + +import ( + "os" + "path/filepath" +) + +func (dp DiskPersistor) makeDirectory() error { + return os.MkdirAll(filepath.Dir(dp.filePath), dirPermissions) +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_win.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_win.go new file mode 100644 index 0000000..859d252 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/config_disk_persistor_win.go @@ -0,0 +1,30 @@ +// +build windows + +package configuration + +import ( + "os" + "path/filepath" + "syscall" +) + +func (dp DiskPersistor) makeDirectory() error { + dir := filepath.Dir(dp.filePath) + + err := os.MkdirAll(dir, dirPermissions) + if err != nil { + return err + } + + p, err := syscall.UTF16PtrFromString(dir) + if err != nil { + return err + } + + attrs, err := syscall.GetFileAttributes(p) + if err != nil { + return err + } + + return syscall.SetFileAttributes(p, attrs|syscall.FILE_ATTRIBUTE_HIDDEN) +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/confighelpers/config_helpers.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/confighelpers/config_helpers.go new file mode 100644 index 0000000..7cfe273 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/confighelpers/config_helpers.go @@ -0,0 +1,47 @@ +package confighelpers + +import ( + "fmt" + "os" + "path/filepath" + "runtime" +) + +func DefaultFilePath() (string, error) { + var homeDir string + + if os.Getenv("CF_HOME") != "" { + homeDir = os.Getenv("CF_HOME") + + if _, err := os.Stat(homeDir); os.IsNotExist(err) { + return "", fmt.Errorf("Error locating CF_HOME folder '%s'", homeDir) + } + } else { + homeDir = userHomeDir() + } + + return filepath.Join(homeDir, ".cf", "config.json"), nil +} + +// See: http://stackoverflow.com/questions/7922270/obtain-users-home-directory +// we can't cross compile using cgo and use user.Current() +var userHomeDir = func() string { + + if runtime.GOOS == "windows" { + home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") + if home == "" { + home = os.Getenv("USERPROFILE") + } + return home + } + + return os.Getenv("HOME") +} + +var PluginRepoDir = func() string { + if os.Getenv("CF_PLUGIN_HOME") != "" { + return os.Getenv("CF_PLUGIN_HOME") + } + + return userHomeDir() +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/access_token.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/access_token.go new file mode 100644 index 0000000..c0102f0 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/access_token.go @@ -0,0 +1,60 @@ +package coreconfig + +import ( + "encoding/base64" + "encoding/json" + "strings" +) + +type TokenInfo struct { + Username string `json:"user_name"` + Email string `json:"email"` + UserGUID string `json:"user_id"` +} + +func NewTokenInfo(accessToken string) (info TokenInfo) { + tokenJSON, err := DecodeAccessToken(accessToken) + if err != nil { + return TokenInfo{} + } + + info = TokenInfo{} + err = json.Unmarshal(tokenJSON, &info) + if err != nil { + return TokenInfo{} + } + + return info +} + +func DecodeAccessToken(accessToken string) (tokenJSON []byte, err error) { + tokenParts := strings.Split(accessToken, " ") + + if len(tokenParts) < 2 { + return + } + + token := tokenParts[1] + encodedParts := strings.Split(token, ".") + + if len(encodedParts) < 3 { + return + } + + encodedTokenJSON := encodedParts[1] + return base64Decode(encodedTokenJSON) +} + +func base64Decode(encodedData string) ([]byte, error) { + return base64.StdEncoding.DecodeString(restorePadding(encodedData)) +} + +func restorePadding(seg string) string { + switch len(seg) % 4 { + case 2: + seg = seg + "==" + case 3: + seg = seg + "=" + } + return seg +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/api_config_refresher.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/api_config_refresher.go new file mode 100644 index 0000000..cec12df --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/api_config_refresher.go @@ -0,0 +1,55 @@ +package coreconfig + +import ( + "strings" + + . "code.cloudfoundry.org/cli/cf/i18n" +) + +//go:generate counterfeiter . EndpointRepository + +type EndpointRepository interface { + GetCCInfo(string) (*CCInfo, string, error) +} + +type APIConfigRefresher struct { + EndpointRepo EndpointRepository + Config ReadWriter + Endpoint string +} + +func (a APIConfigRefresher) Refresh() (Warning, error) { + ccInfo, endpoint, err := a.EndpointRepo.GetCCInfo(a.Endpoint) + if err != nil { + return nil, err + } + + if endpoint != a.Config.APIEndpoint() { + a.Config.ClearSession() + } + + a.Config.SetAPIEndpoint(endpoint) + a.Config.SetAPIVersion(ccInfo.APIVersion) + a.Config.SetAuthenticationEndpoint(ccInfo.AuthorizationEndpoint) + a.Config.SetSSHOAuthClient(ccInfo.SSHOAuthClient) + a.Config.SetMinCLIVersion(ccInfo.MinCLIVersion) + a.Config.SetMinRecommendedCLIVersion(ccInfo.MinRecommendedCLIVersion) + + a.Config.SetDopplerEndpoint(ccInfo.DopplerEndpoint) + a.Config.SetRoutingAPIEndpoint(ccInfo.RoutingAPIEndpoint) + + if !strings.HasPrefix(endpoint, "https://") { + return new(insecureWarning), nil + } + return nil, nil +} + +type Warning interface { + Warn() string +} + +type insecureWarning struct{} + +func (w insecureWarning) Warn() string { + return T("Warning: Insecure http API endpoint detected: secure https API endpoints are recommended\n") +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/config_data.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/config_data.go new file mode 100644 index 0000000..8bda12b --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/config_data.go @@ -0,0 +1,72 @@ +package coreconfig + +import ( + "encoding/json" + + "code.cloudfoundry.org/cli/cf/models" +) + +type AuthPromptType string + +const ( + AuthPromptTypeText AuthPromptType = "TEXT" + AuthPromptTypePassword AuthPromptType = "PASSWORD" +) + +type AuthPrompt struct { + Type AuthPromptType + DisplayName string +} + +type Data struct { + ConfigVersion int + Target string + APIVersion string + AuthorizationEndpoint string + DopplerEndPoint string + UaaEndpoint string + RoutingAPIEndpoint string + AccessToken string + UAAOAuthClient string + UAAOAuthClientSecret string + SSHOAuthClient string + RefreshToken string + OrganizationFields models.OrganizationFields + SpaceFields models.SpaceFields + SSLDisabled bool + AsyncTimeout uint + Trace string + ColorEnabled string + Locale string + PluginRepos []models.PluginRepo + MinCLIVersion string + MinRecommendedCLIVersion string +} + +func NewData() *Data { + data := new(Data) + + data.UAAOAuthClient = "cf" + data.UAAOAuthClientSecret = "" + + return data +} + +func (d *Data) JSONMarshalV3() ([]byte, error) { + d.ConfigVersion = 3 + return json.MarshalIndent(d, "", " ") +} + +func (d *Data) JSONUnmarshalV3(input []byte) error { + err := json.Unmarshal(input, d) + if err != nil { + return err + } + + if d.ConfigVersion != 3 { + *d = Data{} + return nil + } + + return nil +} diff --git a/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/config_repository.go b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/config_repository.go new file mode 100644 index 0000000..639a31d --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/cf/configuration/coreconfig/config_repository.go @@ -0,0 +1,565 @@ +package coreconfig + +import ( + "sync" + + "code.cloudfoundry.org/cli/cf/configuration" + "code.cloudfoundry.org/cli/cf/models" + "code.cloudfoundry.org/cli/version" + "github.com/blang/semver" +) + +type ConfigRepository struct { + CFCLIVersion string + data *Data + mutex *sync.RWMutex + initOnce *sync.Once + persistor configuration.Persistor + onError func(error) +} + +type CCInfo struct { + APIVersion string `json:"api_version"` + AuthorizationEndpoint string `json:"authorization_endpoint"` + DopplerEndpoint string `json:"doppler_logging_endpoint"` + MinCLIVersion string `json:"min_cli_version"` + MinRecommendedCLIVersion string `json:"min_recommended_cli_version"` + SSHOAuthClient string `json:"app_ssh_oauth_client"` + RoutingAPIEndpoint string `json:"routing_endpoint"` +} + +func NewRepositoryFromFilepath(filepath string, errorHandler func(error)) Repository { + if errorHandler == nil { + return nil + } + return NewRepositoryFromPersistor(configuration.NewDiskPersistor(filepath), errorHandler) +} + +func NewRepositoryFromPersistor(persistor configuration.Persistor, errorHandler func(error)) Repository { + data := NewData() + if !persistor.Exists() { + //set default plugin repo + data.PluginRepos = append(data.PluginRepos, models.PluginRepo{ + Name: "CF-Community", + URL: "https://plugins.cloudfoundry.org", + }) + } + + return &ConfigRepository{ + data: data, + mutex: new(sync.RWMutex), + initOnce: new(sync.Once), + persistor: persistor, + onError: errorHandler, + } +} + +type Reader interface { + APIEndpoint() string + APIVersion() string + HasAPIEndpoint() bool + + AuthenticationEndpoint() string + DopplerEndpoint() string + UaaEndpoint() string + RoutingAPIEndpoint() string + AccessToken() string + UAAOAuthClient() string + UAAOAuthClientSecret() string + SSHOAuthClient() string + RefreshToken() string + + OrganizationFields() models.OrganizationFields + HasOrganization() bool + + SpaceFields() models.SpaceFields + HasSpace() bool + + Username() string + UserGUID() string + UserEmail() string + IsLoggedIn() bool + IsSSLDisabled() bool + IsMinAPIVersion(semver.Version) bool + IsMinCLIVersion(string) bool + MinCLIVersion() string + MinRecommendedCLIVersion() string + CLIVersion() string + + AsyncTimeout() uint + Trace() string + + ColorEnabled() string + + Locale() string + + PluginRepos() []models.PluginRepo +} + +//go:generate counterfeiter . ReadWriter + +type ReadWriter interface { + Reader + ClearSession() + SetAPIEndpoint(string) + SetAPIVersion(string) + SetMinCLIVersion(string) + SetMinRecommendedCLIVersion(string) + SetAuthenticationEndpoint(string) + SetDopplerEndpoint(string) + SetUaaEndpoint(string) + SetRoutingAPIEndpoint(string) + SetAccessToken(string) + SetUAAOAuthClient(string) + SetUAAOAuthClientSecret(string) + SetSSHOAuthClient(string) + SetRefreshToken(string) + SetOrganizationFields(models.OrganizationFields) + SetSpaceFields(models.SpaceFields) + SetSSLDisabled(bool) + SetAsyncTimeout(uint) + SetTrace(string) + SetColorEnabled(string) + SetLocale(string) + SetPluginRepo(models.PluginRepo) + UnSetPluginRepo(int) + SetCLIVersion(string) +} + +//go:generate counterfeiter . Repository + +type Repository interface { + ReadWriter + Close() +} + +// ACCESS CONTROL + +func (c *ConfigRepository) init() { + c.initOnce.Do(func() { + err := c.persistor.Load(c.data) + if err != nil { + c.onError(err) + } + }) +} + +func (c *ConfigRepository) read(cb func()) { + c.mutex.RLock() + defer c.mutex.RUnlock() + c.init() + + cb() +} + +func (c *ConfigRepository) write(cb func()) { + c.mutex.Lock() + defer c.mutex.Unlock() + c.init() + + cb() + + err := c.persistor.Save(c.data) + if err != nil { + c.onError(err) + } +} + +// CLOSERS + +func (c *ConfigRepository) Close() { + c.read(func() { + // perform a read to ensure write lock has been cleared + }) +} + +// GETTERS + +func (c *ConfigRepository) APIVersion() (apiVersion string) { + c.read(func() { + apiVersion = c.data.APIVersion + }) + return +} + +func (c *ConfigRepository) AuthenticationEndpoint() (authEndpoint string) { + c.read(func() { + authEndpoint = c.data.AuthorizationEndpoint + }) + return +} + +func (c *ConfigRepository) DopplerEndpoint() (dopplerEndpoint string) { + c.read(func() { + dopplerEndpoint = c.data.DopplerEndPoint + }) + + return +} + +func (c *ConfigRepository) UaaEndpoint() (uaaEndpoint string) { + c.read(func() { + uaaEndpoint = c.data.UaaEndpoint + }) + return +} + +func (c *ConfigRepository) RoutingAPIEndpoint() (routingAPIEndpoint string) { + c.read(func() { + routingAPIEndpoint = c.data.RoutingAPIEndpoint + }) + return +} + +func (c *ConfigRepository) APIEndpoint() (apiEndpoint string) { + c.read(func() { + apiEndpoint = c.data.Target + }) + return +} + +func (c *ConfigRepository) HasAPIEndpoint() (hasEndpoint bool) { + c.read(func() { + hasEndpoint = c.data.APIVersion != "" && c.data.Target != "" + }) + return +} + +func (c *ConfigRepository) AccessToken() (accessToken string) { + c.read(func() { + accessToken = c.data.AccessToken + }) + return +} + +func (c *ConfigRepository) UAAOAuthClient() (clientID string) { + c.read(func() { + clientID = c.data.UAAOAuthClient + }) + return +} + +func (c *ConfigRepository) UAAOAuthClientSecret() (clientID string) { + c.read(func() { + clientID = c.data.UAAOAuthClientSecret + }) + return +} + +func (c *ConfigRepository) SSHOAuthClient() (clientID string) { + c.read(func() { + clientID = c.data.SSHOAuthClient + }) + return +} + +func (c *ConfigRepository) RefreshToken() (refreshToken string) { + c.read(func() { + refreshToken = c.data.RefreshToken + }) + return +} + +func (c *ConfigRepository) OrganizationFields() (org models.OrganizationFields) { + c.read(func() { + org = c.data.OrganizationFields + }) + return +} + +func (c *ConfigRepository) SpaceFields() (space models.SpaceFields) { + c.read(func() { + space = c.data.SpaceFields + }) + return +} + +func (c *ConfigRepository) UserEmail() (email string) { + c.read(func() { + email = NewTokenInfo(c.data.AccessToken).Email + }) + return +} + +func (c *ConfigRepository) UserGUID() (guid string) { + c.read(func() { + guid = NewTokenInfo(c.data.AccessToken).UserGUID + }) + return +} + +func (c *ConfigRepository) Username() (name string) { + c.read(func() { + name = NewTokenInfo(c.data.AccessToken).Username + }) + return +} + +func (c *ConfigRepository) IsLoggedIn() (loggedIn bool) { + c.read(func() { + loggedIn = c.data.AccessToken != "" + }) + return +} + +func (c *ConfigRepository) HasOrganization() (hasOrg bool) { + c.read(func() { + hasOrg = c.data.OrganizationFields.GUID != "" && c.data.OrganizationFields.Name != "" + }) + return +} + +func (c *ConfigRepository) HasSpace() (hasSpace bool) { + c.read(func() { + hasSpace = c.data.SpaceFields.GUID != "" && c.data.SpaceFields.Name != "" + }) + return +} + +func (c *ConfigRepository) IsSSLDisabled() (isSSLDisabled bool) { + c.read(func() { + isSSLDisabled = c.data.SSLDisabled + }) + return +} + +// SetCLIVersion should only be used in testing +func (c *ConfigRepository) SetCLIVersion(v string) { + c.CFCLIVersion = v +} + +func (c *ConfigRepository) CLIVersion() string { + if c.CFCLIVersion == "" { + return version.VersionString() + } else { + return c.CFCLIVersion + } +} + +func (c *ConfigRepository) IsMinAPIVersion(requiredVersion semver.Version) bool { + var apiVersion string + c.read(func() { + apiVersion = c.data.APIVersion + }) + + actualVersion, err := semver.Make(apiVersion) + if err != nil { + return false + } + return actualVersion.GTE(requiredVersion) +} + +func (c *ConfigRepository) IsMinCLIVersion(checkVersion string) bool { + if checkVersion == version.DefaultVersion { + return true + } + var minCLIVersion string + c.read(func() { + minCLIVersion = c.data.MinCLIVersion + }) + if minCLIVersion == "" { + return true + } + + actualVersion, err := semver.Make(checkVersion) + if err != nil { + return false + } + requiredVersion, err := semver.Make(minCLIVersion) + if err != nil { + return false + } + return actualVersion.GTE(requiredVersion) +} + +func (c *ConfigRepository) MinCLIVersion() (minCLIVersion string) { + c.read(func() { + minCLIVersion = c.data.MinCLIVersion + }) + return +} + +func (c *ConfigRepository) MinRecommendedCLIVersion() (minRecommendedCLIVersion string) { + c.read(func() { + minRecommendedCLIVersion = c.data.MinRecommendedCLIVersion + }) + return +} + +func (c *ConfigRepository) AsyncTimeout() (timeout uint) { + c.read(func() { + timeout = c.data.AsyncTimeout + }) + return +} + +func (c *ConfigRepository) Trace() (trace string) { + c.read(func() { + trace = c.data.Trace + }) + return +} + +func (c *ConfigRepository) ColorEnabled() (enabled string) { + c.read(func() { + enabled = c.data.ColorEnabled + }) + return +} + +func (c *ConfigRepository) Locale() (locale string) { + c.read(func() { + locale = c.data.Locale + }) + return +} + +func (c *ConfigRepository) PluginRepos() (repos []models.PluginRepo) { + c.read(func() { + repos = c.data.PluginRepos + }) + return +} + +// SETTERS + +func (c *ConfigRepository) ClearSession() { + c.write(func() { + c.data.AccessToken = "" + c.data.RefreshToken = "" + c.data.OrganizationFields = models.OrganizationFields{} + c.data.SpaceFields = models.SpaceFields{} + }) +} + +func (c *ConfigRepository) SetAPIEndpoint(endpoint string) { + c.write(func() { + c.data.Target = endpoint + }) +} + +func (c *ConfigRepository) SetAPIVersion(version string) { + c.write(func() { + c.data.APIVersion = version + }) +} + +func (c *ConfigRepository) SetMinCLIVersion(version string) { + c.write(func() { + c.data.MinCLIVersion = version + }) +} + +func (c *ConfigRepository) SetMinRecommendedCLIVersion(version string) { + c.write(func() { + c.data.MinRecommendedCLIVersion = version + }) +} + +func (c *ConfigRepository) SetAuthenticationEndpoint(endpoint string) { + c.write(func() { + c.data.AuthorizationEndpoint = endpoint + }) +} + +func (c *ConfigRepository) SetDopplerEndpoint(endpoint string) { + c.write(func() { + c.data.DopplerEndPoint = endpoint + }) +} + +func (c *ConfigRepository) SetUaaEndpoint(uaaEndpoint string) { + c.write(func() { + c.data.UaaEndpoint = uaaEndpoint + }) +} + +func (c *ConfigRepository) SetRoutingAPIEndpoint(routingAPIEndpoint string) { + c.write(func() { + c.data.RoutingAPIEndpoint = routingAPIEndpoint + }) +} + +func (c *ConfigRepository) SetAccessToken(token string) { + c.write(func() { + c.data.AccessToken = token + }) +} + +func (c *ConfigRepository) SetUAAOAuthClient(clientID string) { + c.write(func() { + c.data.UAAOAuthClient = clientID + }) +} + +func (c *ConfigRepository) SetUAAOAuthClientSecret(clientID string) { + c.write(func() { + c.data.UAAOAuthClientSecret = clientID + }) +} + +func (c *ConfigRepository) SetSSHOAuthClient(clientID string) { + c.write(func() { + c.data.SSHOAuthClient = clientID + }) +} + +func (c *ConfigRepository) SetRefreshToken(token string) { + c.write(func() { + c.data.RefreshToken = token + }) +} + +func (c *ConfigRepository) SetOrganizationFields(org models.OrganizationFields) { + c.write(func() { + c.data.OrganizationFields = org + }) +} + +func (c *ConfigRepository) SetSpaceFields(space models.SpaceFields) { + c.write(func() { + c.data.SpaceFields = space + }) +} + +func (c *ConfigRepository) SetSSLDisabled(disabled bool) { + c.write(func() { + c.data.SSLDisabled = disabled + }) +} + +func (c *ConfigRepository) SetAsyncTimeout(timeout uint) { + c.write(func() { + c.data.AsyncTimeout = timeout + }) +} + +func (c *ConfigRepository) SetTrace(value string) { + c.write(func() { + c.data.Trace = value + }) +} + +func (c *ConfigRepository) SetColorEnabled(enabled string) { + c.write(func() { + c.data.ColorEnabled = enabled + }) +} + +func (c *ConfigRepository) SetLocale(locale string) { + c.write(func() { + c.data.Locale = locale + }) +} + +func (c *ConfigRepository) SetPluginRepo(repo models.PluginRepo) { + c.write(func() { + c.data.PluginRepos = append(c.data.PluginRepos, repo) + }) +} + +func (c *ConfigRepository) UnSetPluginRepo(index int) { + c.write(func() { + c.data.PluginRepos = append(c.data.PluginRepos[:index], c.data.PluginRepos[index+1:]...) + }) +} diff --git a/vendor/github.com/cloudfoundry/cli/plugin/cli_connection.go b/vendor/github.com/cloudfoundry/cli/plugin/cli_connection.go new file mode 100644 index 0000000..4964b1e --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/plugin/cli_connection.go @@ -0,0 +1,383 @@ +package plugin + +import ( + "errors" + "fmt" + "net" + "net/rpc" + "os" + "time" + + "code.cloudfoundry.org/cli/plugin/models" +) + +type cliConnection struct { + cliServerPort string +} + +func NewCliConnection(cliServerPort string) *cliConnection { + return &cliConnection{ + cliServerPort: cliServerPort, + } +} + +func (c *cliConnection) withClientDo(f func(client *rpc.Client) error) error { + client, err := rpc.Dial("tcp", "127.0.0.1:"+c.cliServerPort) + if err != nil { + return err + } + defer client.Close() + + return f(client) +} + +func (c *cliConnection) sendPluginMetadataToCliServer(metadata PluginMetadata) { + var success bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.SetPluginMetadata", metadata, &success) + }) + + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + if !success { + os.Exit(1) + } + + os.Exit(0) +} + +func (c *cliConnection) isMinCliVersion(version string) bool { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.IsMinCliVersion", version, &result) + }) + + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + return result +} + +func (c *cliConnection) CliCommandWithoutTerminalOutput(args ...string) ([]string, error) { + return c.callCliCommand(true, args...) +} + +func (c *cliConnection) CliCommand(args ...string) ([]string, error) { + return c.callCliCommand(false, args...) +} + +func (c *cliConnection) callCliCommand(silently bool, args ...string) ([]string, error) { + var ( + success bool + cmdOutput []string + callCoreCommandErr error + getOutputAndResetErr error + disableTerminalOutputErr error + ) + + c.withClientDo(func(client *rpc.Client) error { + disableTerminalOutputErr = client.Call("CliRpcCmd.DisableTerminalOutput", silently, &success) + callCoreCommandErr = client.Call("CliRpcCmd.CallCoreCommand", args, &success) + getOutputAndResetErr = client.Call("CliRpcCmd.GetOutputAndReset", success, &cmdOutput) + + return nil + }) + + if disableTerminalOutputErr != nil { + return []string{}, disableTerminalOutputErr + } + + if callCoreCommandErr != nil { + return []string{}, callCoreCommandErr + } + + if !success { + return []string{}, errors.New("Error executing cli core command") + } + + if getOutputAndResetErr != nil { + return []string{}, errors.New("something completely unexpected happened") + } + + return cmdOutput, nil +} + +func (c *cliConnection) pingCLI() { + //call back to cf saying we have been setup + var connErr error + var conn net.Conn + for i := 0; i < 5; i++ { + conn, connErr = net.Dial("tcp", "127.0.0.1:"+c.cliServerPort) + if connErr != nil { + time.Sleep(200 * time.Millisecond) + } else { + conn.Close() + break + } + } + if connErr != nil { + fmt.Println(connErr) + os.Exit(1) + } +} + +func (c *cliConnection) GetCurrentOrg() (plugin_models.Organization, error) { + var result plugin_models.Organization + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetCurrentOrg", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetCurrentSpace() (plugin_models.Space, error) { + var result plugin_models.Space + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetCurrentSpace", "", &result) + }) + + return result, err +} + +func (c *cliConnection) Username() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.Username", "", &result) + }) + + return result, err +} + +func (c *cliConnection) UserGuid() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.UserGuid", "", &result) + }) + + return result, err +} + +func (c *cliConnection) UserEmail() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.UserEmail", "", &result) + }) + + return result, err +} + +func (c *cliConnection) IsSSLDisabled() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.IsSSLDisabled", "", &result) + }) + + return result, err +} + +func (c *cliConnection) IsLoggedIn() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.IsLoggedIn", "", &result) + }) + + return result, err +} + +func (c *cliConnection) HasOrganization() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.HasOrganization", "", &result) + }) + + return result, err +} + +func (c *cliConnection) HasSpace() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.HasSpace", "", &result) + }) + + return result, err +} + +func (c *cliConnection) ApiEndpoint() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.ApiEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) HasAPIEndpoint() (bool, error) { + var result bool + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.HasAPIEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) ApiVersion() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.ApiVersion", "", &result) + }) + + return result, err +} + +func (c *cliConnection) LoggregatorEndpoint() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.LoggregatorEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) DopplerEndpoint() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.DopplerEndpoint", "", &result) + }) + + return result, err +} + +func (c *cliConnection) AccessToken() (string, error) { + var result string + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.AccessToken", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetApp(appName string) (plugin_models.GetAppModel, error) { + var result plugin_models.GetAppModel + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetApp", appName, &result) + }) + + return result, err +} + +func (c *cliConnection) GetApps() ([]plugin_models.GetAppsModel, error) { + var result []plugin_models.GetAppsModel + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetApps", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetOrgs() ([]plugin_models.GetOrgs_Model, error) { + var result []plugin_models.GetOrgs_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetOrgs", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetSpaces() ([]plugin_models.GetSpaces_Model, error) { + var result []plugin_models.GetSpaces_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetSpaces", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetServices() ([]plugin_models.GetServices_Model, error) { + var result []plugin_models.GetServices_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetServices", "", &result) + }) + + return result, err +} + +func (c *cliConnection) GetOrgUsers(orgName string, args ...string) ([]plugin_models.GetOrgUsers_Model, error) { + var result []plugin_models.GetOrgUsers_Model + + cmdArgs := append([]string{orgName}, args...) + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetOrgUsers", cmdArgs, &result) + }) + + return result, err +} + +func (c *cliConnection) GetSpaceUsers(orgName string, spaceName string) ([]plugin_models.GetSpaceUsers_Model, error) { + var result []plugin_models.GetSpaceUsers_Model + + cmdArgs := []string{orgName, spaceName} + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetSpaceUsers", cmdArgs, &result) + }) + + return result, err +} + +func (c *cliConnection) GetOrg(orgName string) (plugin_models.GetOrg_Model, error) { + var result plugin_models.GetOrg_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetOrg", orgName, &result) + }) + + return result, err +} + +func (c *cliConnection) GetSpace(spaceName string) (plugin_models.GetSpace_Model, error) { + var result plugin_models.GetSpace_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetSpace", spaceName, &result) + }) + + return result, err +} + +func (c *cliConnection) GetService(serviceInstance string) (plugin_models.GetService_Model, error) { + var result plugin_models.GetService_Model + + err := c.withClientDo(func(client *rpc.Client) error { + return client.Call("CliRpcCmd.GetService", serviceInstance, &result) + }) + + return result, err +} diff --git a/vendor/github.com/cloudfoundry/cli/plugin/plugin.go b/vendor/github.com/cloudfoundry/cli/plugin/plugin.go new file mode 100644 index 0000000..c5b6358 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/plugin/plugin.go @@ -0,0 +1,70 @@ +package plugin + +import "code.cloudfoundry.org/cli/plugin/models" + +/** + Command interface needs to be implemented for a runnable plugin of `cf` +**/ +type Plugin interface { + Run(cliConnection CliConnection, args []string) + GetMetadata() PluginMetadata +} + +//go:generate counterfeiter . CliConnection +/** + List of commands avaiable to CliConnection variable passed into run +**/ +type CliConnection interface { + CliCommandWithoutTerminalOutput(args ...string) ([]string, error) + CliCommand(args ...string) ([]string, error) + GetCurrentOrg() (plugin_models.Organization, error) + GetCurrentSpace() (plugin_models.Space, error) + Username() (string, error) + UserGuid() (string, error) + UserEmail() (string, error) + IsLoggedIn() (bool, error) + IsSSLDisabled() (bool, error) + HasOrganization() (bool, error) + HasSpace() (bool, error) + ApiEndpoint() (string, error) + ApiVersion() (string, error) + HasAPIEndpoint() (bool, error) + LoggregatorEndpoint() (string, error) + DopplerEndpoint() (string, error) + AccessToken() (string, error) + GetApp(string) (plugin_models.GetAppModel, error) + GetApps() ([]plugin_models.GetAppsModel, error) + GetOrgs() ([]plugin_models.GetOrgs_Model, error) + GetSpaces() ([]plugin_models.GetSpaces_Model, error) + GetOrgUsers(string, ...string) ([]plugin_models.GetOrgUsers_Model, error) + GetSpaceUsers(string, string) ([]plugin_models.GetSpaceUsers_Model, error) + GetServices() ([]plugin_models.GetServices_Model, error) + GetService(string) (plugin_models.GetService_Model, error) + GetOrg(string) (plugin_models.GetOrg_Model, error) + GetSpace(string) (plugin_models.GetSpace_Model, error) +} + +type VersionType struct { + Major int + Minor int + Build int +} + +type PluginMetadata struct { + Name string + Version VersionType + MinCliVersion VersionType + Commands []Command +} + +type Usage struct { + Usage string + Options map[string]string +} + +type Command struct { + Name string + Alias string + HelpText string + UsageDetails Usage //Detail usage to be displayed in `cf help ` +} diff --git a/vendor/github.com/cloudfoundry/cli/plugin/plugin_shim.go b/vendor/github.com/cloudfoundry/cli/plugin/plugin_shim.go new file mode 100644 index 0000000..42c6457 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/plugin/plugin_shim.go @@ -0,0 +1,44 @@ +package plugin + +import ( + "fmt" + "os" + "strconv" +) + +/** + * This function is called by the plugin to setup their server. This allows us to call Run on the plugin + * os.Args[1] port CF_CLI rpc server is running on + * os.Args[2] **OPTIONAL** + * SendMetadata - used to fetch the plugin metadata +**/ +func Start(cmd Plugin) { + cliConnection := NewCliConnection(os.Args[1]) + + cliConnection.pingCLI() + if isMetadataRequest(os.Args) { + cliConnection.sendPluginMetadataToCliServer(cmd.GetMetadata()) + } else { + if version := MinCliVersionStr(cmd.GetMetadata().MinCliVersion); version != "" { + ok := cliConnection.isMinCliVersion(version) + if !ok { + fmt.Printf("Minimum CLI version %s is required to run this plugin command\n\n", version) + os.Exit(0) + } + } + + cmd.Run(cliConnection, os.Args[2:]) + } +} + +func isMetadataRequest(args []string) bool { + return len(args) == 3 && args[2] == "SendMetadata" +} + +func MinCliVersionStr(version VersionType) string { + if version.Major == 0 && version.Minor == 0 && version.Build == 0 { + return "" + } + + return strconv.Itoa(version.Major) + "." + strconv.Itoa(version.Minor) + "." + strconv.Itoa(version.Build) +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/fakes/fake_cli_connection.go b/vendor/github.com/cloudfoundry/cli/plugin/pluginfakes/fake_cli_connection.go similarity index 87% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/fakes/fake_cli_connection.go rename to vendor/github.com/cloudfoundry/cli/plugin/pluginfakes/fake_cli_connection.go index 61446ce..4c605da 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/plugin/fakes/fake_cli_connection.go +++ b/vendor/github.com/cloudfoundry/cli/plugin/pluginfakes/fake_cli_connection.go @@ -1,11 +1,11 @@ // This file was generated by counterfeiter -package fakes +package pluginfakes import ( "sync" - "github.com/cloudfoundry/cli/plugin" - "github.com/cloudfoundry/cli/plugin/models" + "code.cloudfoundry.org/cli/plugin" + "code.cloudfoundry.org/cli/plugin/models" ) type FakeCliConnection struct { @@ -216,6 +216,8 @@ type FakeCliConnection struct { result1 plugin_models.GetSpace_Model result2 error } + invocations map[string][][]interface{} + invocationsMutex sync.RWMutex } func (fake *FakeCliConnection) CliCommandWithoutTerminalOutput(args ...string) ([]string, error) { @@ -223,6 +225,7 @@ func (fake *FakeCliConnection) CliCommandWithoutTerminalOutput(args ...string) ( fake.cliCommandWithoutTerminalOutputArgsForCall = append(fake.cliCommandWithoutTerminalOutputArgsForCall, struct { args []string }{args}) + fake.recordInvocation("CliCommandWithoutTerminalOutput", []interface{}{args}) fake.cliCommandWithoutTerminalOutputMutex.Unlock() if fake.CliCommandWithoutTerminalOutputStub != nil { return fake.CliCommandWithoutTerminalOutputStub(args...) @@ -256,6 +259,7 @@ func (fake *FakeCliConnection) CliCommand(args ...string) ([]string, error) { fake.cliCommandArgsForCall = append(fake.cliCommandArgsForCall, struct { args []string }{args}) + fake.recordInvocation("CliCommand", []interface{}{args}) fake.cliCommandMutex.Unlock() if fake.CliCommandStub != nil { return fake.CliCommandStub(args...) @@ -287,6 +291,7 @@ func (fake *FakeCliConnection) CliCommandReturns(result1 []string, result2 error func (fake *FakeCliConnection) GetCurrentOrg() (plugin_models.Organization, error) { fake.getCurrentOrgMutex.Lock() fake.getCurrentOrgArgsForCall = append(fake.getCurrentOrgArgsForCall, struct{}{}) + fake.recordInvocation("GetCurrentOrg", []interface{}{}) fake.getCurrentOrgMutex.Unlock() if fake.GetCurrentOrgStub != nil { return fake.GetCurrentOrgStub() @@ -312,6 +317,7 @@ func (fake *FakeCliConnection) GetCurrentOrgReturns(result1 plugin_models.Organi func (fake *FakeCliConnection) GetCurrentSpace() (plugin_models.Space, error) { fake.getCurrentSpaceMutex.Lock() fake.getCurrentSpaceArgsForCall = append(fake.getCurrentSpaceArgsForCall, struct{}{}) + fake.recordInvocation("GetCurrentSpace", []interface{}{}) fake.getCurrentSpaceMutex.Unlock() if fake.GetCurrentSpaceStub != nil { return fake.GetCurrentSpaceStub() @@ -337,6 +343,7 @@ func (fake *FakeCliConnection) GetCurrentSpaceReturns(result1 plugin_models.Spac func (fake *FakeCliConnection) Username() (string, error) { fake.usernameMutex.Lock() fake.usernameArgsForCall = append(fake.usernameArgsForCall, struct{}{}) + fake.recordInvocation("Username", []interface{}{}) fake.usernameMutex.Unlock() if fake.UsernameStub != nil { return fake.UsernameStub() @@ -362,6 +369,7 @@ func (fake *FakeCliConnection) UsernameReturns(result1 string, result2 error) { func (fake *FakeCliConnection) UserGuid() (string, error) { fake.userGuidMutex.Lock() fake.userGuidArgsForCall = append(fake.userGuidArgsForCall, struct{}{}) + fake.recordInvocation("UserGuid", []interface{}{}) fake.userGuidMutex.Unlock() if fake.UserGuidStub != nil { return fake.UserGuidStub() @@ -387,6 +395,7 @@ func (fake *FakeCliConnection) UserGuidReturns(result1 string, result2 error) { func (fake *FakeCliConnection) UserEmail() (string, error) { fake.userEmailMutex.Lock() fake.userEmailArgsForCall = append(fake.userEmailArgsForCall, struct{}{}) + fake.recordInvocation("UserEmail", []interface{}{}) fake.userEmailMutex.Unlock() if fake.UserEmailStub != nil { return fake.UserEmailStub() @@ -412,6 +421,7 @@ func (fake *FakeCliConnection) UserEmailReturns(result1 string, result2 error) { func (fake *FakeCliConnection) IsLoggedIn() (bool, error) { fake.isLoggedInMutex.Lock() fake.isLoggedInArgsForCall = append(fake.isLoggedInArgsForCall, struct{}{}) + fake.recordInvocation("IsLoggedIn", []interface{}{}) fake.isLoggedInMutex.Unlock() if fake.IsLoggedInStub != nil { return fake.IsLoggedInStub() @@ -437,6 +447,7 @@ func (fake *FakeCliConnection) IsLoggedInReturns(result1 bool, result2 error) { func (fake *FakeCliConnection) IsSSLDisabled() (bool, error) { fake.isSSLDisabledMutex.Lock() fake.isSSLDisabledArgsForCall = append(fake.isSSLDisabledArgsForCall, struct{}{}) + fake.recordInvocation("IsSSLDisabled", []interface{}{}) fake.isSSLDisabledMutex.Unlock() if fake.IsSSLDisabledStub != nil { return fake.IsSSLDisabledStub() @@ -462,6 +473,7 @@ func (fake *FakeCliConnection) IsSSLDisabledReturns(result1 bool, result2 error) func (fake *FakeCliConnection) HasOrganization() (bool, error) { fake.hasOrganizationMutex.Lock() fake.hasOrganizationArgsForCall = append(fake.hasOrganizationArgsForCall, struct{}{}) + fake.recordInvocation("HasOrganization", []interface{}{}) fake.hasOrganizationMutex.Unlock() if fake.HasOrganizationStub != nil { return fake.HasOrganizationStub() @@ -487,6 +499,7 @@ func (fake *FakeCliConnection) HasOrganizationReturns(result1 bool, result2 erro func (fake *FakeCliConnection) HasSpace() (bool, error) { fake.hasSpaceMutex.Lock() fake.hasSpaceArgsForCall = append(fake.hasSpaceArgsForCall, struct{}{}) + fake.recordInvocation("HasSpace", []interface{}{}) fake.hasSpaceMutex.Unlock() if fake.HasSpaceStub != nil { return fake.HasSpaceStub() @@ -512,6 +525,7 @@ func (fake *FakeCliConnection) HasSpaceReturns(result1 bool, result2 error) { func (fake *FakeCliConnection) ApiEndpoint() (string, error) { fake.apiEndpointMutex.Lock() fake.apiEndpointArgsForCall = append(fake.apiEndpointArgsForCall, struct{}{}) + fake.recordInvocation("ApiEndpoint", []interface{}{}) fake.apiEndpointMutex.Unlock() if fake.ApiEndpointStub != nil { return fake.ApiEndpointStub() @@ -537,6 +551,7 @@ func (fake *FakeCliConnection) ApiEndpointReturns(result1 string, result2 error) func (fake *FakeCliConnection) ApiVersion() (string, error) { fake.apiVersionMutex.Lock() fake.apiVersionArgsForCall = append(fake.apiVersionArgsForCall, struct{}{}) + fake.recordInvocation("ApiVersion", []interface{}{}) fake.apiVersionMutex.Unlock() if fake.ApiVersionStub != nil { return fake.ApiVersionStub() @@ -562,6 +577,7 @@ func (fake *FakeCliConnection) ApiVersionReturns(result1 string, result2 error) func (fake *FakeCliConnection) HasAPIEndpoint() (bool, error) { fake.hasAPIEndpointMutex.Lock() fake.hasAPIEndpointArgsForCall = append(fake.hasAPIEndpointArgsForCall, struct{}{}) + fake.recordInvocation("HasAPIEndpoint", []interface{}{}) fake.hasAPIEndpointMutex.Unlock() if fake.HasAPIEndpointStub != nil { return fake.HasAPIEndpointStub() @@ -587,6 +603,7 @@ func (fake *FakeCliConnection) HasAPIEndpointReturns(result1 bool, result2 error func (fake *FakeCliConnection) LoggregatorEndpoint() (string, error) { fake.loggregatorEndpointMutex.Lock() fake.loggregatorEndpointArgsForCall = append(fake.loggregatorEndpointArgsForCall, struct{}{}) + fake.recordInvocation("LoggregatorEndpoint", []interface{}{}) fake.loggregatorEndpointMutex.Unlock() if fake.LoggregatorEndpointStub != nil { return fake.LoggregatorEndpointStub() @@ -612,6 +629,7 @@ func (fake *FakeCliConnection) LoggregatorEndpointReturns(result1 string, result func (fake *FakeCliConnection) DopplerEndpoint() (string, error) { fake.dopplerEndpointMutex.Lock() fake.dopplerEndpointArgsForCall = append(fake.dopplerEndpointArgsForCall, struct{}{}) + fake.recordInvocation("DopplerEndpoint", []interface{}{}) fake.dopplerEndpointMutex.Unlock() if fake.DopplerEndpointStub != nil { return fake.DopplerEndpointStub() @@ -637,6 +655,7 @@ func (fake *FakeCliConnection) DopplerEndpointReturns(result1 string, result2 er func (fake *FakeCliConnection) AccessToken() (string, error) { fake.accessTokenMutex.Lock() fake.accessTokenArgsForCall = append(fake.accessTokenArgsForCall, struct{}{}) + fake.recordInvocation("AccessToken", []interface{}{}) fake.accessTokenMutex.Unlock() if fake.AccessTokenStub != nil { return fake.AccessTokenStub() @@ -664,6 +683,7 @@ func (fake *FakeCliConnection) GetApp(arg1 string) (plugin_models.GetAppModel, e fake.getAppArgsForCall = append(fake.getAppArgsForCall, struct { arg1 string }{arg1}) + fake.recordInvocation("GetApp", []interface{}{arg1}) fake.getAppMutex.Unlock() if fake.GetAppStub != nil { return fake.GetAppStub(arg1) @@ -695,6 +715,7 @@ func (fake *FakeCliConnection) GetAppReturns(result1 plugin_models.GetAppModel, func (fake *FakeCliConnection) GetApps() ([]plugin_models.GetAppsModel, error) { fake.getAppsMutex.Lock() fake.getAppsArgsForCall = append(fake.getAppsArgsForCall, struct{}{}) + fake.recordInvocation("GetApps", []interface{}{}) fake.getAppsMutex.Unlock() if fake.GetAppsStub != nil { return fake.GetAppsStub() @@ -720,6 +741,7 @@ func (fake *FakeCliConnection) GetAppsReturns(result1 []plugin_models.GetAppsMod func (fake *FakeCliConnection) GetOrgs() ([]plugin_models.GetOrgs_Model, error) { fake.getOrgsMutex.Lock() fake.getOrgsArgsForCall = append(fake.getOrgsArgsForCall, struct{}{}) + fake.recordInvocation("GetOrgs", []interface{}{}) fake.getOrgsMutex.Unlock() if fake.GetOrgsStub != nil { return fake.GetOrgsStub() @@ -745,6 +767,7 @@ func (fake *FakeCliConnection) GetOrgsReturns(result1 []plugin_models.GetOrgs_Mo func (fake *FakeCliConnection) GetSpaces() ([]plugin_models.GetSpaces_Model, error) { fake.getSpacesMutex.Lock() fake.getSpacesArgsForCall = append(fake.getSpacesArgsForCall, struct{}{}) + fake.recordInvocation("GetSpaces", []interface{}{}) fake.getSpacesMutex.Unlock() if fake.GetSpacesStub != nil { return fake.GetSpacesStub() @@ -773,6 +796,7 @@ func (fake *FakeCliConnection) GetOrgUsers(arg1 string, arg2 ...string) ([]plugi arg1 string arg2 []string }{arg1, arg2}) + fake.recordInvocation("GetOrgUsers", []interface{}{arg1, arg2}) fake.getOrgUsersMutex.Unlock() if fake.GetOrgUsersStub != nil { return fake.GetOrgUsersStub(arg1, arg2...) @@ -807,6 +831,7 @@ func (fake *FakeCliConnection) GetSpaceUsers(arg1 string, arg2 string) ([]plugin arg1 string arg2 string }{arg1, arg2}) + fake.recordInvocation("GetSpaceUsers", []interface{}{arg1, arg2}) fake.getSpaceUsersMutex.Unlock() if fake.GetSpaceUsersStub != nil { return fake.GetSpaceUsersStub(arg1, arg2) @@ -838,6 +863,7 @@ func (fake *FakeCliConnection) GetSpaceUsersReturns(result1 []plugin_models.GetS func (fake *FakeCliConnection) GetServices() ([]plugin_models.GetServices_Model, error) { fake.getServicesMutex.Lock() fake.getServicesArgsForCall = append(fake.getServicesArgsForCall, struct{}{}) + fake.recordInvocation("GetServices", []interface{}{}) fake.getServicesMutex.Unlock() if fake.GetServicesStub != nil { return fake.GetServicesStub() @@ -865,6 +891,7 @@ func (fake *FakeCliConnection) GetService(arg1 string) (plugin_models.GetService fake.getServiceArgsForCall = append(fake.getServiceArgsForCall, struct { arg1 string }{arg1}) + fake.recordInvocation("GetService", []interface{}{arg1}) fake.getServiceMutex.Unlock() if fake.GetServiceStub != nil { return fake.GetServiceStub(arg1) @@ -898,6 +925,7 @@ func (fake *FakeCliConnection) GetOrg(arg1 string) (plugin_models.GetOrg_Model, fake.getOrgArgsForCall = append(fake.getOrgArgsForCall, struct { arg1 string }{arg1}) + fake.recordInvocation("GetOrg", []interface{}{arg1}) fake.getOrgMutex.Unlock() if fake.GetOrgStub != nil { return fake.GetOrgStub(arg1) @@ -931,6 +959,7 @@ func (fake *FakeCliConnection) GetSpace(arg1 string) (plugin_models.GetSpace_Mod fake.getSpaceArgsForCall = append(fake.getSpaceArgsForCall, struct { arg1 string }{arg1}) + fake.recordInvocation("GetSpace", []interface{}{arg1}) fake.getSpaceMutex.Unlock() if fake.GetSpaceStub != nil { return fake.GetSpaceStub(arg1) @@ -959,4 +988,76 @@ func (fake *FakeCliConnection) GetSpaceReturns(result1 plugin_models.GetSpace_Mo }{result1, result2} } +func (fake *FakeCliConnection) Invocations() map[string][][]interface{} { + fake.invocationsMutex.RLock() + defer fake.invocationsMutex.RUnlock() + fake.cliCommandWithoutTerminalOutputMutex.RLock() + defer fake.cliCommandWithoutTerminalOutputMutex.RUnlock() + fake.cliCommandMutex.RLock() + defer fake.cliCommandMutex.RUnlock() + fake.getCurrentOrgMutex.RLock() + defer fake.getCurrentOrgMutex.RUnlock() + fake.getCurrentSpaceMutex.RLock() + defer fake.getCurrentSpaceMutex.RUnlock() + fake.usernameMutex.RLock() + defer fake.usernameMutex.RUnlock() + fake.userGuidMutex.RLock() + defer fake.userGuidMutex.RUnlock() + fake.userEmailMutex.RLock() + defer fake.userEmailMutex.RUnlock() + fake.isLoggedInMutex.RLock() + defer fake.isLoggedInMutex.RUnlock() + fake.isSSLDisabledMutex.RLock() + defer fake.isSSLDisabledMutex.RUnlock() + fake.hasOrganizationMutex.RLock() + defer fake.hasOrganizationMutex.RUnlock() + fake.hasSpaceMutex.RLock() + defer fake.hasSpaceMutex.RUnlock() + fake.apiEndpointMutex.RLock() + defer fake.apiEndpointMutex.RUnlock() + fake.apiVersionMutex.RLock() + defer fake.apiVersionMutex.RUnlock() + fake.hasAPIEndpointMutex.RLock() + defer fake.hasAPIEndpointMutex.RUnlock() + fake.loggregatorEndpointMutex.RLock() + defer fake.loggregatorEndpointMutex.RUnlock() + fake.dopplerEndpointMutex.RLock() + defer fake.dopplerEndpointMutex.RUnlock() + fake.accessTokenMutex.RLock() + defer fake.accessTokenMutex.RUnlock() + fake.getAppMutex.RLock() + defer fake.getAppMutex.RUnlock() + fake.getAppsMutex.RLock() + defer fake.getAppsMutex.RUnlock() + fake.getOrgsMutex.RLock() + defer fake.getOrgsMutex.RUnlock() + fake.getSpacesMutex.RLock() + defer fake.getSpacesMutex.RUnlock() + fake.getOrgUsersMutex.RLock() + defer fake.getOrgUsersMutex.RUnlock() + fake.getSpaceUsersMutex.RLock() + defer fake.getSpaceUsersMutex.RUnlock() + fake.getServicesMutex.RLock() + defer fake.getServicesMutex.RUnlock() + fake.getServiceMutex.RLock() + defer fake.getServiceMutex.RUnlock() + fake.getOrgMutex.RLock() + defer fake.getOrgMutex.RUnlock() + fake.getSpaceMutex.RLock() + defer fake.getSpaceMutex.RUnlock() + return fake.invocations +} + +func (fake *FakeCliConnection) recordInvocation(key string, args []interface{}) { + fake.invocationsMutex.Lock() + defer fake.invocationsMutex.Unlock() + if fake.invocations == nil { + fake.invocations = map[string][][]interface{}{} + } + if fake.invocations[key] == nil { + fake.invocations[key] = [][]interface{}{} + } + fake.invocations[key] = append(fake.invocations[key], args) +} + var _ plugin.CliConnection = new(FakeCliConnection) diff --git a/vendor/github.com/cloudfoundry/cli/util/testhelpers/io/io.go b/vendor/github.com/cloudfoundry/cli/util/testhelpers/io/io.go new file mode 100644 index 0000000..df710d8 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/util/testhelpers/io/io.go @@ -0,0 +1,88 @@ +package io + +import ( + "bytes" + "io" + "os" + "runtime" + "strings" + + "github.com/fatih/color" + "github.com/mattn/go-colorable" +) + +func SimulateStdin(input string, block func(r io.Reader)) { + reader, writer := io.Pipe() + + go func() { + writer.Write([]byte(input)) + defer writer.Close() + }() + + block(reader) +} + +func CaptureOutput(block func()) []string { + oldSTDOUT := os.Stdout + r, w, err := os.Pipe() + if err != nil { + panic(err) + } + + os.Stdout = w + defer func() { + os.Stdout = oldSTDOUT + }() + + ////// + // We use fmt.Fprintf() to write to the "github.com/fatih/color".Output file + // to get colors on Windows machines. + // That variable gets initialized with a reference to os.Stdout when that library is imported. + // That means that when we muck with os.Stdout above, it doesn't get reflected in + // the printing code for windows. + // Instead, we can just redeclare that color.Output variable with a colorable version of our + // redirect pipe. + if runtime.GOOS == "windows" { + color.Output = colorable.NewColorable(w) + } + ////// + + doneWriting := make(chan bool) + result := make(chan []string) + + go captureOutputAsyncronously(doneWriting, result, r) + + block() + w.Close() + doneWriting <- true + return <-result +} + +/* + The reason we're doing is that you can't write an infinite amount of bytes into a pipe. + On some platforms, the limit is fairly high; on other platforms, the limit is infuriatingly small + (looking at you, Windows). To counteract this, we need to read in a goroutine from one end of + the pipe and return the result across a channel. +*/ +func captureOutputAsyncronously(doneWriting <-chan bool, result chan<- []string, reader io.Reader) { + var readingString string + + for { + var buf bytes.Buffer + io.Copy(&buf, reader) + readingString += buf.String() + + _, ok := <-doneWriting + if ok { + // there is no guarantee that the writer did not + // write more in between the read above and reading from this channel + // so we absolute must read once more if we want all the bytes + var buf bytes.Buffer + io.Copy(&buf, reader) + readingString += buf.String() + break + } + } + + result <- strings.Split(readingString, "\n") +} diff --git a/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/all_requests_called_matcher.go b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/all_requests_called_matcher.go new file mode 100644 index 0000000..591b719 --- /dev/null +++ b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/all_requests_called_matcher.go @@ -0,0 +1,44 @@ +package matchers + +import ( + "fmt" + + "code.cloudfoundry.org/cli/util/testhelpers/net" + "github.com/onsi/gomega" +) + +func HaveAllRequestsCalled() gomega.OmegaMatcher { + return &allRequestsCalledMatcher{} +} + +type allRequestsCalledMatcher struct { + failureMessage string +} + +func (matcher *allRequestsCalledMatcher) Match(actual interface{}) (bool, error) { + testHandler, ok := actual.(*net.TestHandler) + if !ok { + return false, fmt.Errorf("Expected a test handler, got %T", actual) + } + + if testHandler.AllRequestsCalled() { + matcher.failureMessage = "Expected all requests to not be called, but they were all called" + return true, nil + } + + message := fmt.Sprint("Failed to call requests:\n") + for i := testHandler.CallCount; i < len(testHandler.Requests); i++ { + message += fmt.Sprintf("%#v\n", testHandler.Requests[i]) + } + message += "\n" + matcher.failureMessage = message + return false, nil +} + +func (matcher *allRequestsCalledMatcher) FailureMessage(actual interface{}) string { + return matcher.failureMessage +} + +func (matcher *allRequestsCalledMatcher) NegatedFailureMessage(actual interface{}) string { + return matcher.failureMessage +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/be_in_display_order.go b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/be_in_display_order.go similarity index 94% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/be_in_display_order.go rename to vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/be_in_display_order.go index 419a512..ed52746 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/be_in_display_order.go +++ b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/be_in_display_order.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "code.cloudfoundry.org/cli/cf/terminal" "github.com/onsi/gomega" ) @@ -56,7 +57,7 @@ func (matcher *OrderMatcher) Match(actualStr interface{}) (success bool, err err func matchSingleLine(actual string, expected []string) (bool, string) { matched := false for i, target := range expected { - if index := strings.Index(actual, target); index != -1 { + if index := strings.Index(terminal.Decolorize(actual), target); index != -1 { if i == len(expected)-1 { return true, "" } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/contain_substrings.go b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/contain_substrings.go similarity index 97% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/contain_substrings.go rename to vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/contain_substrings.go index 1a53030..bc31c21 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/contain_substrings.go +++ b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/contain_substrings.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/cloudfoundry/cli/cf/terminal" + "code.cloudfoundry.org/cli/cf/terminal" "github.com/onsi/gomega" ) diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/have_succeeded.go b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/have_succeeded.go similarity index 77% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/have_succeeded.go rename to vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/have_succeeded.go index e9304bc..e20f9b3 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/have_succeeded.go +++ b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/have_succeeded.go @@ -1,8 +1,9 @@ package matchers import ( - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" + "fmt" + + testcmd "code.cloudfoundry.org/cli/util/testhelpers/commands" "github.com/onsi/gomega" ) @@ -18,7 +19,7 @@ func (matcher haveSucceededMatcher) Match(actual interface{}) (bool, error) { result := actual.(testcmd.RunCommandResult) return result == testcmd.RunCommandResultSuccess, nil default: - return false, errors.NewWithFmt("Expected actual value to be an enum, but it was a %T", actual) + return false, fmt.Errorf("Expected actual value to be an enum, but it was a %T", actual) } } diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/passed_requirements.go b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/passed_requirements.go similarity index 80% rename from Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/passed_requirements.go rename to vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/passed_requirements.go index 4dcc17e..548b1aa 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/cli/testhelpers/matchers/passed_requirements.go +++ b/vendor/github.com/cloudfoundry/cli/util/testhelpers/matchers/passed_requirements.go @@ -1,8 +1,9 @@ package matchers import ( - "github.com/cloudfoundry/cli/cf/errors" - testcmd "github.com/cloudfoundry/cli/testhelpers/commands" + "fmt" + + testcmd "code.cloudfoundry.org/cli/util/testhelpers/commands" "github.com/onsi/gomega" ) @@ -21,7 +22,7 @@ func (matcher havePassedRequirementsMatcher) Match(actual interface{}) (bool, er result := actual.(testcmd.RunCommandResult) return result == testcmd.RunCommandResultSuccess, nil default: - return false, errors.NewWithFmt("Expected actual value to be a bool or enum, but it was a %T", actual) + return false, fmt.Errorf("Expected actual value to be a bool or enum, but it was a %T", actual) } } diff --git a/vendor/github.com/cloudfoundry/go-ccapi/LICENSE b/vendor/github.com/cloudfoundry/go-ccapi/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/cloudfoundry/go-ccapi/NOTICE b/vendor/github.com/cloudfoundry/go-ccapi/NOTICE new file mode 100644 index 0000000..56399e4 --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/NOTICE @@ -0,0 +1,9 @@ +Copyright (c) 2016-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +This project is licensed to you under the Apache License, Version 2.0 (the "License"). + +You may not use this project except in compliance with the License. + +This project may include a number of subcomponents with separate copyright notices +and license terms. Your use of these subcomponents is subject to the terms and +conditions of the subcomponent's license, as noted in the LICENSE file. diff --git a/vendor/github.com/cloudfoundry/go-ccapi/v3/client/client.go b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/client.go new file mode 100644 index 0000000..6b7b3f1 --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/client.go @@ -0,0 +1,119 @@ +package client + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + + "github.com/cloudfoundry/go-ccapi/v3/routing" + "github.com/tedsuo/rata" +) + +//go:generate counterfeiter -o fakes/fake_client.go . Client +type Client interface { + GetApplications(queryParams url.Values) ([]byte, error) + GetResource(path string) ([]byte, error) + GetResources(path string, limit int) ([]byte, error) + + TokensUpdated() bool + GetUpdatedTokens() (string, string) +} + +type client struct { + ccEndpoint string + accessToken string + refreshToken string + + ccRequestGenerator *rata.RequestGenerator + httpClient *http.Client + baseFetcher Fetcher + + updatedAccessToken string + updatedRefreshToken string +} + +func NewClient(ccEndpoint, uaaEndpoint, accessToken, refreshToken string) Client { + tokenRefresher := NewTokenRefresher(uaaEndpoint) + baseFetcher := NewBaseFetcher(tokenRefresher, refreshToken) + return &client{ + ccEndpoint: ccEndpoint, + accessToken: accessToken, + refreshToken: refreshToken, + + ccRequestGenerator: rata.NewRequestGenerator(ccEndpoint, routing.CCRoutes), + httpClient: &http.Client{}, + baseFetcher: baseFetcher, + } +} + +func (c client) TokensUpdated() bool { + return c.updatedAccessToken != "" && c.updatedAccessToken != c.accessToken +} + +func (c client) GetUpdatedTokens() (string, string) { + return c.updatedAccessToken, c.updatedRefreshToken +} + +func (c client) GetApplications(queryParams url.Values) ([]byte, error) { + req, err := c.ccRequestGenerator.CreateRequest("apps", rata.Params{}, strings.NewReader("")) + if err != nil { + return []byte{}, err + } + + req.URL.RawQuery = queryParams.Encode() + req.Header.Set("Authorization", c.accessToken) + + paginatedResourceFetcher := NewPaginatedResourceFetcher(0, c.baseFetcher, c.refreshToken) + responseJSON, err := paginatedResourceFetcher.Fetch(req) + if err != nil { + return []byte{}, err + } + + c.updatedAccessToken, c.updatedRefreshToken = paginatedResourceFetcher.GetUpdatedTokens() + + return responseJSON, nil +} + +func (c client) GetResource(path string) ([]byte, error) { + url := c.ccEndpoint + "/" + strings.TrimLeft(path, "/") + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return []byte{}, err + } + + req.Header.Set("Authorization", c.accessToken) + + resp, err := c.httpClient.Do(req) + if err != nil { + return []byte{}, err + } + defer resp.Body.Close() + + responseBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + return []byte{}, err + } + + return responseBytes, nil +} + +func (c client) GetResources(path string, limit int) ([]byte, error) { + u, err := url.Parse(path) + if err != nil { + return []byte{}, err + } + + req, err := http.NewRequest("GET", c.ccEndpoint+u.Path, nil) + if err != nil { + return []byte{}, err + } + + req.URL.RawQuery = u.Query().Encode() + req.Header.Set("Authorization", c.accessToken) + + paginatedResourceFetcher := NewPaginatedResourceFetcher(limit, c.baseFetcher, c.refreshToken) + + return paginatedResourceFetcher.Fetch(req) +} diff --git a/vendor/github.com/cloudfoundry/go-ccapi/v3/client/fetcher.go b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/fetcher.go new file mode 100644 index 0000000..1533de4 --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/fetcher.go @@ -0,0 +1,82 @@ +package client + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" +) + +const invalidTokenCode = 1000 + +//go:generate counterfeiter -o fakes/fake_fetcher.go . Fetcher +type Fetcher interface { + Fetch(req *http.Request) ([]byte, error) + GetUpdatedTokens() (string, string) +} + +type baseFetcher struct { + httpClient *http.Client + tokenRefresher TokenRefresher + accessToken string + refreshToken string +} + +func NewBaseFetcher(tokenRefresher TokenRefresher, refreshToken string) Fetcher { + return &baseFetcher{ + httpClient: &http.Client{}, + tokenRefresher: tokenRefresher, + refreshToken: refreshToken, + } +} + +type responseWithCode struct { + Code int `json:"code"` +} + +func (f *baseFetcher) GetUpdatedTokens() (string, string) { + return f.accessToken, f.refreshToken +} + +func (f *baseFetcher) Fetch(req *http.Request) ([]byte, error) { + if f.accessToken != "" { + req.Header.Set("Authorization", f.accessToken) + } + + responseBytes, err := f.performRequest(req) + if err != nil { + return []byte{}, err + } + + responseWithCode := responseWithCode{} + err = json.Unmarshal(responseBytes, &responseWithCode) + if err != nil { + return []byte{}, err + } + + if responseWithCode.Code == invalidTokenCode { + accessToken, refreshToken, err := f.tokenRefresher.Refresh(f.refreshToken) + if err != nil { + return []byte{}, fmt.Errorf("Failed to refresh auth token: %s", err.Error()) + } + + f.accessToken = accessToken + f.refreshToken = refreshToken + + req.Header.Set("Authorization", accessToken) + + return f.performRequest(req) + } + + return responseBytes, nil +} + +func (f *baseFetcher) performRequest(req *http.Request) ([]byte, error) { + resp, err := f.httpClient.Do(req) + if err != nil { + return []byte{}, err + } + defer resp.Body.Close() + + return ioutil.ReadAll(resp.Body) +} diff --git a/vendor/github.com/cloudfoundry/go-ccapi/v3/client/models.go b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/models.go new file mode 100644 index 0000000..3e782d1 --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/models.go @@ -0,0 +1,18 @@ +package client + +type GetResourcesResponse struct { + Pagination Pagination `json:"pagination,omitempty"` + Resources []interface{} `json:"resources,omitempty"` +} + +type Pagination struct { + TotalResults *int `json:"total_results"` + First *Link `json:"first"` + Last *Link `json:"last"` + Next *string `json:"next"` + Previous *string `json:"previous"` +} + +type Link struct { + Href string `json:"href"` +} diff --git a/vendor/github.com/cloudfoundry/go-ccapi/v3/client/paginated_resource_fetcher.go b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/paginated_resource_fetcher.go new file mode 100644 index 0000000..90b626b --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/paginated_resource_fetcher.go @@ -0,0 +1,88 @@ +package client + +import ( + "encoding/json" + "net/http" + "net/url" +) + +type paginatedResourceFetcher struct { + limit int + baseFetcher Fetcher + refreshToken string +} + +func NewPaginatedResourceFetcher( + limit int, + baseFetcher Fetcher, + refreshToken string, +) Fetcher { + return &paginatedResourceFetcher{ + baseFetcher: baseFetcher, + limit: limit, + refreshToken: refreshToken, + } +} + +func (f paginatedResourceFetcher) GetUpdatedTokens() (string, string) { + return f.baseFetcher.GetUpdatedTokens() +} + +func (f paginatedResourceFetcher) Fetch(req *http.Request) ([]byte, error) { + resources, nextPath, err := f.performRequest(req) + if err != nil { + return []byte{}, err + } + + var rs []interface{} + var nextReq *http.Request + + for nextPath != nil && (f.limit == 0 || len(resources) < f.limit) { + u, err := url.Parse(*nextPath) + if err != nil { + return []byte{}, err + } + + nextReq = &http.Request{ + URL: &url.URL{ + Scheme: req.URL.Scheme, + Host: req.URL.Host, + Path: u.Path, + RawQuery: u.Query().Encode(), + }, + } + + rs, nextPath, err = f.performRequest(nextReq) + if err != nil { + return []byte{}, err + } + + resources = append(resources, rs...) + } + + if f.limit > 0 { + resources = resources[:f.limit] + } + + responseJSON, err := json.Marshal(resources) + if err != nil { + return []byte{}, err + } + + return responseJSON, nil +} + +func (f paginatedResourceFetcher) performRequest(req *http.Request) ([]interface{}, *string, error) { + responseBytes, err := f.baseFetcher.Fetch(req) + if err != nil { + return []interface{}{}, nil, err + } + + response := &GetResourcesResponse{} + err = json.Unmarshal(responseBytes, response) + if err != nil { + return []interface{}{}, nil, err + } + + return response.Resources, response.Pagination.Next, nil +} diff --git a/vendor/github.com/cloudfoundry/go-ccapi/v3/client/token_refresher.go b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/token_refresher.go new file mode 100644 index 0000000..e37896f --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/v3/client/token_refresher.go @@ -0,0 +1,89 @@ +package client + +import ( + "encoding/base64" + "encoding/json" + "errors" + "io/ioutil" + "net/http" + "net/url" + "strings" + + "github.com/cloudfoundry/go-ccapi/v3/routing" + "github.com/tedsuo/rata" +) + +//go:generate counterfeiter -o fakes/fake_token_refresher.go . TokenRefresher +type TokenRefresher interface { + Refresh(oldRefreshToken string) (string, string, error) +} + +type tokenRefresher struct { + uaaRequestGenerator *rata.RequestGenerator + httpClient *http.Client +} + +func NewTokenRefresher(uaaEndpoint string) TokenRefresher { + return &tokenRefresher{ + uaaRequestGenerator: rata.NewRequestGenerator(uaaEndpoint, routing.UAARoutes), + httpClient: &http.Client{}, + } +} + +func (t tokenRefresher) Refresh(oldRefreshToken string) (string, string, error) { + req, err := t.uaaRequestGenerator.CreateRequest("refresh_token", rata.Params{}, strings.NewReader("")) + if err != nil { + return "", "", err + } + + data := url.Values{ + "refresh_token": {oldRefreshToken}, + "grant_type": {"refresh_token"}, + "scope": {""}, + } + + req.Header.Set("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte("cf:"))) + req.Header.Set("Accept", "application/json") + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.URL.RawQuery = data.Encode() + + resp, err := t.httpClient.Do(req) + if err != nil { + return "", "", err + } + defer resp.Body.Close() + + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", "", err + } + + errorResponse := errorResponse{} + err = json.Unmarshal(b, &errorResponse) + if err != nil { + return "", "", err + } + + if errorResponse.Code != "" { + return "", "", errors.New(errorResponse.Description) + } + + authResponse := authResponse{} + err = json.Unmarshal(b, &authResponse) + if err != nil { + return "", "", err + } + + return authResponse.AccessToken, authResponse.RefreshToken, nil +} + +type errorResponse struct { + Code string `json:"error"` + Description string `json:"error_description"` +} + +type authResponse struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + RefreshToken string `json:"refresh_token"` +} diff --git a/vendor/github.com/cloudfoundry/go-ccapi/v3/routing/routing.go b/vendor/github.com/cloudfoundry/go-ccapi/v3/routing/routing.go new file mode 100644 index 0000000..806a756 --- /dev/null +++ b/vendor/github.com/cloudfoundry/go-ccapi/v3/routing/routing.go @@ -0,0 +1,11 @@ +package routing + +import "github.com/tedsuo/rata" + +var CCRoutes = rata.Routes{ + {Name: "apps", Method: "GET", Path: "/v3/apps"}, +} + +var UAARoutes = rata.Routes{ + {Name: "refresh_token", Method: "POST", Path: "/oauth/token"}, +} diff --git a/vendor/github.com/cloudfoundry/noaa/.gitignore b/vendor/github.com/cloudfoundry/noaa/.gitignore new file mode 100644 index 0000000..8f6229f --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/.gitignore @@ -0,0 +1,9 @@ +*.coverprofile +src/ +pkg/ +.idea +*.iml + +# compiled binaries +bin/ +!bin/test diff --git a/vendor/github.com/cloudfoundry/noaa/.travis.yml b/vendor/github.com/cloudfoundry/noaa/.travis.yml new file mode 100644 index 0000000..4a0a9fb --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/.travis.yml @@ -0,0 +1,28 @@ +language: go +notifications: + email: + - cf-lamb@pivotallabs.com +before_install: +- go get github.com/mattn/goveralls +- go get github.com/onsi/ginkgo/ginkgo +after_success: +- 'echo "mode: set" > all.coverprofile' +- 'find . -name "*.coverprofile" -exec grep -v mode: {} >> all.coverprofile \;' +- PATH=$HOME/gopath/bin:$PATH goveralls -coverprofile=all.coverprofile -repotoken=$COVERALLS_TOKEN +install: +- go get -d -v -t ./... + +script: PATH=$HOME/gopath/bin:$PATH bin/test + +go: +- 1.6 +- 1.7 +- tip + +matrix: + allow_failures: + - go: tip + +env: + global: + secure: wulSvmmwbaIe8APoYwTjN6zLFdIXYrazmBTOuFpyui0BUpxmKdXJ/hEMVVI0p3BvehYkKU+xVrjjBc3/IZgUXFybM9MwYQ+CH4wtsMSp0ndHnzkYGaxut1kUXb+e5edjJ5bOi9Xy9qGxeH9rqpl/F1z4piGnujd2jJjVTlwVXGM= diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/LICENSE b/vendor/github.com/cloudfoundry/noaa/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/noaa/LICENSE rename to vendor/github.com/cloudfoundry/noaa/LICENSE diff --git a/vendor/github.com/cloudfoundry/noaa/NOTICE b/vendor/github.com/cloudfoundry/noaa/NOTICE new file mode 100644 index 0000000..53aae89 --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/NOTICE @@ -0,0 +1,15 @@ +noaa + +Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vendor/github.com/cloudfoundry/noaa/README.md b/vendor/github.com/cloudfoundry/noaa/README.md new file mode 100644 index 0000000..5e5b4bd --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/README.md @@ -0,0 +1,127 @@ +#NOAA + +[![Concourse Status](https://loggregator.ci.cf-app.com/api/v1/pipelines/loggregator/jobs/noaa-unit-tests/badge)](https://loggregator.ci.cf-app.com/teams/main/pipelines/loggregator/jobs/noaa-unit-tests) +[![Coverage Status](https://coveralls.io/repos/cloudfoundry/noaa/badge.png)](https://coveralls.io/r/cloudfoundry/noaa) +[![GoDoc](https://godoc.org/github.com/cloudfoundry/noaa?status.png)](https://godoc.org/github.com/cloudfoundry/noaa) + +noaa is a client library to consume metric and log messages from Doppler. + +##Get the Code + +This Go project is designed to be imported into `$GOPATH`, rather than being cloned into any working directory. There are two ways to do this. + +- The easiest way with with `go get`. This will import the project, along with all dependencies, into your `$ GOPATH`. + ``` + $ echo $GOPATH + /Users/myuser/go + + $ go get github.com/cloudfoundry/noaa + + $ ls ~/go/src/github.com/cloudfoundry/ + noaa/ sonde-go/ + ``` + +- You can also manually clone the repo into your `$GOPATH`, but you then have to manually import dependencies. + ``` + $ echo $GOPATH + /Users/myuser/go + + $ cd /Users/myuser/go/src/github.com/cloudfoundry + $ git clone git@github.com:cloudfoundry/noaa.git + $ cd noaa + $ go get ./... + ``` + +## Updates + +### Reconnecting to Traffic Controller + +noaa has recently updated its reconnect strategy from trying to reconnect five +times in quick succession to a back-off strategy. The back-off strategy can be +configured by setting the [SetMinRetryDelay()](https://godoc.org/github.com/cloudfoundry/noaa/consumer#Consumer.SetMinRetryDelay) +and the [SetMaxRetryDelay()](https://godoc.org/github.com/cloudfoundry/noaa/consumer#Consumer.SetMaxRetryDelay). + +During reconnection, noaa will wait initially at the `MinRetryDelay` interval +and double until it reaches `MaxRetryDelay` where it will try reconnecting +indefinitely at the `MaxRetryDelay` interval. + +This behavior will affect functions like `consumer.Firehose()`, `consumer.Stream()` +and `consumer.TailingLogs()`. + +## Sample Applications + +### Prerequisites + +In order to use the sample applications below, you will have to export the +following environment variables: + +* `CF_ACCESS_TOKEN` - You can get this value by executing (`$ cf oauth-token`). + Example: + +```bash +export CF_ACCESS_TOKEN="bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI3YmM2MzllOC0wZGM0LTQ4YzItYTAzYS0xYjkyYzRhMWFlZTIiLCJzdWIiOiI5YTc5MTVkOS04MDc1LTQ3OTUtOTBmOS02MGM0MTU0YTJlMDkiLCJzY29wZSI6WyJzY2ltLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLmFkbWluIiwicGFzc3dvcmQud3JpdGUiLCJzY2ltLndyaXRlIiwib3BlbmlkIiwiY2xvdWRfY29udHJvbGxlci53cml0ZSIsImNsb3VkX2NvbnRyb2xsZXIucmVhZCJdLCJjbGllbnRfaWQiOiJjZiIsImNpZCI6ImNmIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjlhNzkxNWQ5LTgwNzUtNDc5NS05MGY5LTYwYzQxNTRhMmUwOSIsInVzZXJfbmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbiIsImlhdCI6MTQwNDg0NzU3NywiZXhwIjoxNDA0ODQ4MTc3LCJpc3MiOiJodHRwczovL3VhYS4xMC4yNDQuMC4zNC54aXAuaW8vb2F1dGgvdG9rZW4iLCJhdWQiOlsic2NpbSIsIm9wZW5pZCIsImNsb3VkX2NvbnRyb2xsZXIiLCJwYXNzd29yZCJdfQ.mAaOJthCotW763lf9fysygqdES_Mz1KFQ3HneKbwY4VJx-ARuxxiLh8l_8Srx7NJBwGlyEtfYOCBcIdvyeDCiQ0wT78Zw7ZJYFjnJ5-ZkDy5NbMqHbImDFkHRnPzKFjJHip39jyjAZpkFcrZ8_pUD8XxZraqJ4zEf6LFdAHKFBM" +``` + +* `DOPPLER_ADDR` - It is based on your environment. Example: + +```bash +export DOPPLER_ADDR="wss://doppler.10.244.0.34.xip.io:4443" +``` + + +### Application logs + +The `samples/app_logs/main.go` application streams logs for a particular app. +The following environment variable needs to be set: + +* `APP_GUID` - You can get this value from running `$ cf app APP --guid`. + Example: + +``` +export APP_GUID=55fdb274-d6c9-4b8c-9b1f-9b7e7f3a346c +``` + +Then you can run the sample app like this: + +``` +go build -o bin/app_logs samples/app_logs/main.go +bin/app_logs +``` + +### Logs and metrics firehose + +The `samples/firehose/main.go` application streams metrics data and logs for +all apps. + +You can run the firehose sample app like this: + +``` +go build -o bin/firehose samples/firehose/main.go +bin/firehose +``` + +Multiple subscribers may connect to the firehose endpoint, each with a unique +subscription_id (configurable in `main.go`). Each subscriber (in practice, a +pool of clients with a common subscription_id) receives the entire stream. For +each subscription_id, all data will be distributed evenly among that +subscriber's client pool. + +### Container metrics + +The `samples/container_metrics/consumer/main.go` application streams container +metrics for the specified appId. + +You can run the container metrics sample app like this: + +``` +go build -o bin/container_metrics samples/container_metrics/consumer/main.go +bin/container_metrics +``` + +For more information to setup a test environment in order to pull container +metrics look at the README.md in the container_metrics sample. + +##Development + +Use `go get -d -v -t ./... && ginkgo --race --randomizeAllSpecs --failOnPending --skipMeasurements --cover` to +run the tests. diff --git a/vendor/github.com/cloudfoundry/noaa/consumer/async.go b/vendor/github.com/cloudfoundry/noaa/consumer/async.go new file mode 100644 index 0000000..af0c7f2 --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/consumer/async.go @@ -0,0 +1,524 @@ +package consumer + +import ( + "bufio" + "encoding/base64" + "errors" + "fmt" + "io/ioutil" + "net" + "net/http" + "net/url" + "strings" + "sync" + "sync/atomic" + "time" + + noaa_errors "github.com/cloudfoundry/noaa/errors" + "github.com/cloudfoundry/sonde-go/events" + "github.com/gogo/protobuf/proto" + "github.com/gorilla/websocket" +) + +const ( + DefaultMinRetryDelay = 500 * time.Millisecond + DefaultMaxRetryDelay = time.Minute +) + +// SetMinRetryDelay sets the duration that automatically reconnecting methods +// on c (e.g. Firehose, Stream, TailingLogs) will sleep for after receiving +// an error from the traffic controller. +// +// Successive errors will double the sleep time, up to c's max retry delay, +// set by c.SetMaxRetryDelay. +// +// Defaults to DefaultMinRetryDelay. +func (c *Consumer) SetMinRetryDelay(d time.Duration) { + atomic.StoreInt64(&c.minRetryDelay, int64(d)) +} + +// SetMaxRetryDelay sets the maximum duration that automatically reconnecting +// methods on c (e.g. Firehose, Stream, TailingLogs) will sleep for after +// receiving many successive errors from the traffic controller. +// +// Defaults to DefaultMaxRetryDelay. +func (c *Consumer) SetMaxRetryDelay(d time.Duration) { + atomic.StoreInt64(&c.maxRetryDelay, int64(d)) +} + +// TailingLogs listens indefinitely for log messages only; other event types +// are dropped. +// Whenever an error is encountered, the error will be sent down the error +// channel and TailingLogs will attempt to reconnect up to 5 times. After +// five failed reconnection attempts, TailingLogs will give up and close the +// error and LogMessage channels. +// +// If c is closed, the returned channels will both be closed. +// +// Errors must be drained from the returned error channel for it to continue +// retrying; if they are not drained, the connection attempts will hang. +func (c *Consumer) TailingLogs(appGuid, authToken string) (<-chan *events.LogMessage, <-chan error) { + return c.tailingLogs(appGuid, authToken, true) +} + +// TailingLogsWithoutReconnect functions identically to TailingLogs but without +// any reconnect attempts when errors occur. +func (c *Consumer) TailingLogsWithoutReconnect(appGuid string, authToken string) (<-chan *events.LogMessage, <-chan error) { + return c.tailingLogs(appGuid, authToken, false) +} + +// Stream listens indefinitely for all log and event messages. +// +// Messages are presented in the order received from the loggregator server. +// Chronological or other ordering is not guaranteed. It is the responsibility +// of the consumer of these channels to provide any desired sorting mechanism. +// +// Whenever an error is encountered, the error will be sent down the error +// channel and Stream will attempt to reconnect indefinitely. +func (c *Consumer) Stream(appGuid string, authToken string) (outputChan <-chan *events.Envelope, errorChan <-chan error) { + return c.runStream(appGuid, authToken, true) +} + +// StreamWithoutReconnect functions identically to Stream but without any +// reconnect attempts when errors occur. +func (c *Consumer) StreamWithoutReconnect(appGuid string, authToken string) (<-chan *events.Envelope, <-chan error) { + return c.runStream(appGuid, authToken, false) +} + +// Firehose streams all data. All clients with the same subscriptionId will +// receive a proportionate share of the message stream. Each pool of clients +// will receive the entire stream. +// +// Messages are presented in the order received from the loggregator server. +// Chronological or other ordering is not guaranteed. It is the responsibility +// of the consumer of these channels to provide any desired sorting mechanism. +// +// Whenever an error is encountered, the error will be sent down the error +// channel and Firehose will attempt to reconnect indefinitely. +func (c *Consumer) Firehose(subscriptionId string, authToken string) (<-chan *events.Envelope, <-chan error) { + return c.firehose(subscriptionId, authToken, true) +} + +// FirehoseWithoutReconnect functions identically to Firehose but without any +// reconnect attempts when errors occur. +func (c *Consumer) FirehoseWithoutReconnect(subscriptionId string, authToken string) (<-chan *events.Envelope, <-chan error) { + return c.firehose(subscriptionId, authToken, false) +} + +// SetDebugPrinter sets the websocket connection to write debug information to +// debugPrinter. +func (c *Consumer) SetDebugPrinter(debugPrinter DebugPrinter) { + c.debugPrinter = debugPrinter +} + +// SetOnConnectCallback sets a callback function to be called with the +// websocket connection is established. +func (c *Consumer) SetOnConnectCallback(cb func()) { + c.callbackLock.Lock() + defer c.callbackLock.Unlock() + c.callback = cb +} + +// Close terminates all previously opened websocket connections to the traffic +// controller. It will return an error if there are no open connections, or +// if it has problems closing any connection. +func (c *Consumer) Close() error { + c.connsLock.Lock() + defer c.connsLock.Unlock() + if len(c.conns) == 0 { + return errors.New("connection does not exist") + } + for len(c.conns) > 0 { + if err := c.conns[0].close(); err != nil { + return err + } + c.conns = c.conns[1:] + } + return nil +} + +func (c *Consumer) SetIdleTimeout(idleTimeout time.Duration) { + c.idleTimeout = idleTimeout +} + +func (c *Consumer) onConnectCallback() func() { + c.callbackLock.RLock() + defer c.callbackLock.RUnlock() + return c.callback +} + +func (c *Consumer) tailingLogs(appGuid, authToken string, retry bool) (<-chan *events.LogMessage, <-chan error) { + outputs := make(chan *events.LogMessage) + errors := make(chan error, 1) + callback := func(env *events.Envelope) { + if env.GetEventType() == events.Envelope_LogMessage { + outputs <- env.GetLogMessage() + } + } + + conn := c.newConn() + go func() { + defer close(errors) + defer close(outputs) + c.streamAppDataTo(conn, appGuid, authToken, callback, errors, retry) + }() + return outputs, errors +} + +func (c *Consumer) runStream(appGuid, authToken string, retry bool) (<-chan *events.Envelope, <-chan error) { + outputs := make(chan *events.Envelope) + errors := make(chan error, 1) + + callback := func(env *events.Envelope) { + outputs <- env + } + + conn := c.newConn() + go func() { + defer close(errors) + defer close(outputs) + c.streamAppDataTo(conn, appGuid, authToken, callback, errors, retry) + }() + return outputs, errors +} + +func (c *Consumer) streamAppDataTo(conn *connection, appGuid, authToken string, callback func(*events.Envelope), errors chan<- error, retry bool) { + streamPath := fmt.Sprintf("/apps/%s/stream", appGuid) + if retry { + c.retryAction(c.listenAction(conn, streamPath, authToken, callback), errors) + return + } + err, _ := c.listenAction(conn, streamPath, authToken, callback)() + errors <- err +} + +func (c *Consumer) firehose(subID, authToken string, retry bool) (<-chan *events.Envelope, <-chan error) { + outputs := make(chan *events.Envelope) + errors := make(chan error, 1) + callback := func(env *events.Envelope) { + outputs <- env + } + + streamPath := "/firehose/" + subID + conn := c.newConn() + go func() { + defer close(errors) + defer close(outputs) + if retry { + c.retryAction(c.listenAction(conn, streamPath, authToken, callback), errors) + return + } + err, _ := c.listenAction(conn, streamPath, authToken, callback)() + errors <- err + }() + return outputs, errors +} + +func (c *Consumer) listenForMessages(conn *connection, callback func(*events.Envelope)) error { + if conn.closed() { + return nil + } + ws := conn.websocket() + for { + if c.idleTimeout != 0 { + ws.SetReadDeadline(time.Now().Add(c.idleTimeout)) + } + _, data, err := ws.ReadMessage() + + // If the connection was closed (i.e. if conn.Close() was called), we + // will have a non-nil error, but we want to return a nil error. + if conn.closed() { + return nil + } + + if c.isTimeoutErr(err) { + return noaa_errors.NewRetryError(err) + } + + if err != nil { + return err + } + + envelope := &events.Envelope{} + err = proto.Unmarshal(data, envelope) + if err != nil { + continue + } + + callback(envelope) + } +} + +func (c *Consumer) listenAction(conn *connection, streamPath, authToken string, callback func(*events.Envelope)) func() (err error, done bool) { + return func() (error, bool) { + if conn.closed() { + return nil, true + } + ws, err := c.establishWebsocketConnection(streamPath, authToken) + if err != nil { + return err, false + } + conn.setWebsocket(ws) + return c.listenForMessages(conn, callback), false + } +} + +func (c *Consumer) retryAction(action func() (err error, done bool), errors chan<- error) { + oldConnectCallback := c.onConnectCallback() + defer c.SetOnConnectCallback(oldConnectCallback) + + context := retryContext{ + sleep: atomic.LoadInt64(&c.minRetryDelay), + } + + c.SetOnConnectCallback(func() { + atomic.StoreInt64(&context.sleep, atomic.LoadInt64(&c.minRetryDelay)) + if oldConnectCallback != nil { + oldConnectCallback() + } + }) + + for { + err, done := action() + if done { + return + } + + if _, ok := err.(noaa_errors.NonRetryError); ok { + c.debugPrinter.Print("WEBSOCKET ERROR", fmt.Sprintf("%s. Retrying...", err.Error())) + errors <- err + return + } + + if err != nil { + c.debugPrinter.Print("WEBSOCKET ERROR", fmt.Sprintf("%s. Retrying...", err.Error())) + err = noaa_errors.NewRetryError(err) + } + + errors <- err + + ns := atomic.LoadInt64(&context.sleep) + time.Sleep(time.Duration(ns)) + ns = atomic.AddInt64(&context.sleep, ns) + max := atomic.LoadInt64(&c.maxRetryDelay) + if ns > max { + atomic.StoreInt64(&context.sleep, max) + } + } +} + +func (c *Consumer) isTimeoutErr(err error) bool { + if err == nil { + return false + } + + // This is an unfortunate way to validate this, + // however the error type is `*websocket.netError` + // which is not exported + return strings.Contains(err.Error(), "i/o timeout") +} + +func (c *Consumer) newConn() *connection { + conn := &connection{} + c.connsLock.Lock() + defer c.connsLock.Unlock() + c.conns = append(c.conns, conn) + return conn +} + +func (c *Consumer) websocketConn(path, authToken string) (*websocket.Conn, error) { + if authToken == "" && c.refreshTokens { + return c.websocketConnNewToken(path) + } + + URL, err := url.Parse(c.trafficControllerUrl + path) + if err != nil { + return nil, noaa_errors.NewNonRetryError(err) + } + + if URL.Scheme != "wss" && URL.Scheme != "ws" { + return nil, noaa_errors.NewNonRetryError(fmt.Errorf("Invalid scheme '%s'", URL.Scheme)) + } + + ws, httpErr := c.tryWebsocketConnection(path, authToken) + if httpErr != nil { + err = httpErr.error + if httpErr.statusCode == http.StatusUnauthorized && c.refreshTokens { + ws, err = c.websocketConnNewToken(path) + } + } + return ws, err +} + +func (c *Consumer) websocketConnNewToken(path string) (*websocket.Conn, error) { + token, err := c.getToken() + if err != nil { + return nil, err + } + ws, httpErr := c.tryWebsocketConnection(path, token) + if httpErr != nil { + return nil, httpErr.error + } + return ws, nil +} + +func (c *Consumer) establishWebsocketConnection(path, authToken string) (*websocket.Conn, error) { + ws, err := c.websocketConn(path, authToken) + if err != nil { + return nil, err + } + + callback := c.onConnectCallback() + if err == nil && callback != nil { + callback() + } + + return ws, nil +} + +func (c *Consumer) tryWebsocketConnection(path, token string) (*websocket.Conn, *httpError) { + header := http.Header{"Origin": []string{"http://localhost"}, "Authorization": []string{token}} + URL := c.trafficControllerUrl + path + + c.debugPrinter.Print("WEBSOCKET REQUEST:", + "GET "+path+" HTTP/1.1\n"+ + "Host: "+c.trafficControllerUrl+"\n"+ + "Upgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Version: 13\nSec-WebSocket-Key: [HIDDEN]\n"+ + headersString(header)) + + ws, resp, err := c.dialer.Dial(URL, header) + if resp != nil { + c.debugPrinter.Print("WEBSOCKET RESPONSE:", + resp.Proto+" "+resp.Status+"\n"+ + headersString(resp.Header)) + } + + httpErr := &httpError{} + if resp != nil { + if resp.StatusCode == http.StatusUnauthorized { + bodyData, _ := ioutil.ReadAll(resp.Body) + err = noaa_errors.NewUnauthorizedError(string(bodyData)) + } + httpErr.statusCode = resp.StatusCode + } + if err != nil { + errMsg := "Error dialing trafficcontroller server: %s.\n" + + "Please ask your Cloud Foundry Operator to check the platform configuration (trafficcontroller is %s)." + httpErr.error = fmt.Errorf(errMsg, err.Error(), c.trafficControllerUrl) + return nil, httpErr + } + return ws, nil +} + +func (c *Consumer) proxyDial(network, addr string) (net.Conn, error) { + targetUrl, err := url.Parse("http://" + addr) + if err != nil { + return nil, err + } + + proxy := c.proxy + if proxy == nil { + proxy = http.ProxyFromEnvironment + } + + proxyUrl, err := proxy(&http.Request{URL: targetUrl}) + if err != nil { + return nil, err + } + if proxyUrl == nil { + return net.Dial(network, addr) + } + + connectHeader := make(http.Header) + if user := proxyUrl.User; user != nil { + proxyUser := user.Username() + if proxyPassword, passwordSet := user.Password(); passwordSet { + credential := base64.StdEncoding.EncodeToString([]byte(proxyUser + ":" + proxyPassword)) + connectHeader.Set("Proxy-Authorization", "Basic "+credential) + } + } + + proxyConn, err := net.Dial(network, proxyUrl.Host) + if err != nil { + return nil, err + } + + connectReq := &http.Request{ + Method: "CONNECT", + URL: targetUrl, + Host: targetUrl.Host, + Header: connectHeader, + } + connectReq.Write(proxyConn) + + connectResp, err := http.ReadResponse(bufio.NewReader(proxyConn), connectReq) + if err != nil { + proxyConn.Close() + return nil, err + } + if connectResp.StatusCode != http.StatusOK { + f := strings.SplitN(connectResp.Status, " ", 2) + proxyConn.Close() + return nil, errors.New(f[1]) + } + + return proxyConn, nil +} + +func headersString(header http.Header) string { + var result string + for name, values := range header { + result += name + ": " + strings.Join(values, ", ") + "\n" + } + return result +} + +type connection struct { + ws *websocket.Conn + isClosed bool + lock sync.Mutex +} + +func (c *connection) websocket() *websocket.Conn { + c.lock.Lock() + defer c.lock.Unlock() + return c.ws +} + +func (c *connection) setWebsocket(ws *websocket.Conn) { + c.lock.Lock() + defer c.lock.Unlock() + if c.isClosed { + return + } + c.ws = ws +} + +func (c *connection) close() error { + c.lock.Lock() + defer c.lock.Unlock() + c.isClosed = true + if c.ws == nil { + return nil + } + err := c.ws.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""), time.Time{}) + if err != nil { + return err + } + return c.ws.Close() +} + +func (c *connection) closed() bool { + c.lock.Lock() + defer c.lock.Unlock() + return c.isClosed +} + +// retryContext is a struct to keep track of a retryAction call's context. We +// use it primarily to guarantee 64-bit byte alignment on 32-bit systems. +// https://golang.org/src/sync/atomic/doc.go?#L50 +type retryContext struct { + // sleep must be the first word within this struct to ensure 64-bit byte + // alignment. + sleep int64 +} diff --git a/vendor/github.com/cloudfoundry/noaa/consumer/consumer.go b/vendor/github.com/cloudfoundry/noaa/consumer/consumer.go new file mode 100644 index 0000000..6d08405 --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/consumer/consumer.go @@ -0,0 +1,115 @@ +package consumer + +import ( + "crypto/tls" + "errors" + "io/ioutil" + "net/http" + "net/url" + "regexp" + "sync" + "time" + + "github.com/cloudfoundry/noaa/consumer/internal" + + noaa_errors "github.com/cloudfoundry/noaa/errors" + "github.com/gorilla/websocket" +) + +var ( + // KeepAlive sets the interval between keep-alive messages sent by the client to loggregator. + KeepAlive = 25 * time.Second + + boundaryRegexp = regexp.MustCompile("boundary=(.*)") + ErrNotOK = errors.New("unknown issue when making HTTP request to Loggregator") + ErrNotFound = ErrNotOK // NotFound isn't an accurate description of how this is used; please use ErrNotOK instead + ErrBadResponse = errors.New("bad server response") + ErrBadRequest = errors.New("bad client request") + ErrLostConnection = errors.New("remote server terminated connection unexpectedly") +) + +//go:generate hel --type DebugPrinter --output mock_debug_printer_test.go + +// DebugPrinter is a type which handles printing debug information. +type DebugPrinter interface { + Print(title, dump string) +} + +type nullDebugPrinter struct { +} + +func (nullDebugPrinter) Print(title, body string) { +} + +// Consumer represents the actions that can be performed against trafficcontroller. +// See sync.go and async.go for trafficcontroller access methods. +type Consumer struct { + // minRetryDelay and maxRetryDelay must be the first words in this struct + // in order to be used atomically by 32-bit systems. + // https://golang.org/src/sync/atomic/doc.go?#L50 + minRetryDelay, maxRetryDelay int64 + + trafficControllerUrl string + idleTimeout time.Duration + callback func() + callbackLock sync.RWMutex + proxy func(*http.Request) (*url.URL, error) + debugPrinter DebugPrinter + client *http.Client + dialer websocket.Dialer + + conns []*connection + connsLock sync.Mutex + + refreshTokens bool + refresherMutex sync.RWMutex + tokenRefresher TokenRefresher +} + +// New creates a new consumer to a trafficcontroller. +func New(trafficControllerUrl string, tlsConfig *tls.Config, proxy func(*http.Request) (*url.URL, error)) *Consumer { + transport := &http.Transport{Proxy: proxy, TLSClientConfig: tlsConfig, TLSHandshakeTimeout: internal.Timeout, DisableKeepAlives: true} + consumer := &Consumer{ + trafficControllerUrl: trafficControllerUrl, + proxy: proxy, + debugPrinter: nullDebugPrinter{}, + client: &http.Client{ + Transport: transport, + Timeout: internal.Timeout, + }, + minRetryDelay: int64(DefaultMinRetryDelay), + maxRetryDelay: int64(DefaultMaxRetryDelay), + } + consumer.dialer = websocket.Dialer{HandshakeTimeout: internal.Timeout, NetDial: consumer.proxyDial, TLSClientConfig: tlsConfig} + return consumer +} + +type httpError struct { + statusCode int + error error +} + +func checkForErrors(resp *http.Response) *httpError { + if resp.StatusCode == http.StatusUnauthorized { + data, _ := ioutil.ReadAll(resp.Body) + return &httpError{ + statusCode: resp.StatusCode, + error: noaa_errors.NewUnauthorizedError(string(data)), + } + } + + if resp.StatusCode == http.StatusBadRequest { + return &httpError{ + statusCode: resp.StatusCode, + error: ErrBadRequest, + } + } + + if resp.StatusCode != http.StatusOK { + return &httpError{ + statusCode: resp.StatusCode, + error: ErrNotOK, + } + } + return nil +} diff --git a/vendor/github.com/cloudfoundry/noaa/consumer/internal/timeout.go b/vendor/github.com/cloudfoundry/noaa/consumer/internal/timeout.go new file mode 100644 index 0000000..c8a56b5 --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/consumer/internal/timeout.go @@ -0,0 +1,8 @@ +package internal + +import "time" + +var ( + // DO NOT USE + Timeout = 10 * time.Second +) diff --git a/vendor/github.com/cloudfoundry/noaa/consumer/sync.go b/vendor/github.com/cloudfoundry/noaa/consumer/sync.go new file mode 100644 index 0000000..7665ada --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/consumer/sync.go @@ -0,0 +1,171 @@ +package consumer + +import ( + "bytes" + "errors" + "fmt" + "mime/multipart" + "net/http" + "net/url" + "strings" + + "github.com/cloudfoundry/noaa" + "github.com/cloudfoundry/sonde-go/events" + "github.com/gogo/protobuf/proto" +) + +// RecentLogs connects to trafficcontroller via its 'recentlogs' http(s) +// endpoint and returns a slice of recent messages. It does not guarantee any +// order of the messages; they are in the order returned by trafficcontroller. +// +// The noaa.SortRecent function is provided to sort the data returned by +// this method. +func (c *Consumer) RecentLogs(appGuid string, authToken string) ([]*events.LogMessage, error) { + envelopes, err := c.readTC(appGuid, authToken, "recentlogs") + if err != nil { + return nil, err + } + messages := make([]*events.LogMessage, 0, 200) + for _, env := range envelopes { + messages = append(messages, env.GetLogMessage()) + } + return messages, nil +} + +// ContainerMetrics is deprecated in favor of ContainerEnvelopes, since +// returning the ContainerMetric type directly hides important +// information, like the timestamp. +// +// The returned values will be the same as ContainerEnvelopes, just with +// the Envelope stripped out. +func (c *Consumer) ContainerMetrics(appGuid string, authToken string) ([]*events.ContainerMetric, error) { + envelopes, err := c.ContainerEnvelopes(appGuid, authToken) + if err != nil { + return nil, err + } + messages := make([]*events.ContainerMetric, 0, len(envelopes)) + for _, env := range envelopes { + messages = append(messages, env.GetContainerMetric()) + } + noaa.SortContainerMetrics(messages) + return messages, nil +} + +// ContainerEnvelopes connects to trafficcontroller via its 'containermetrics' +// http(s) endpoint and returns the most recent dropsonde envelopes for an app. +func (c *Consumer) ContainerEnvelopes(appGuid, authToken string) ([]*events.Envelope, error) { + envelopes, err := c.readTC(appGuid, authToken, "containermetrics") + if err != nil { + return nil, err + } + for _, env := range envelopes { + if env.GetEventType() == events.Envelope_LogMessage { + return nil, errors.New(fmt.Sprintf("Upstream error: %s", env.GetLogMessage().GetMessage())) + } + } + return envelopes, nil +} + +func (c *Consumer) readTC(appGuid string, authToken string, endpoint string) ([]*events.Envelope, error) { + trafficControllerUrl, err := url.ParseRequestURI(c.trafficControllerUrl) + if err != nil { + return nil, err + } + + scheme := "https" + if trafficControllerUrl.Scheme == "ws" { + scheme = "http" + } + + recentPath := fmt.Sprintf("%s://%s/apps/%s/%s", scheme, trafficControllerUrl.Host, appGuid, endpoint) + + resp, err := c.requestTC(recentPath, authToken) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + reader, err := getMultipartReader(resp) + if err != nil { + return nil, err + } + + var buffer bytes.Buffer + + var envelopes []*events.Envelope + for part, loopErr := reader.NextPart(); loopErr == nil; part, loopErr = reader.NextPart() { + buffer.Reset() + + _, err = buffer.ReadFrom(part) + if err != nil { + break + } + + envelope := new(events.Envelope) + proto.Unmarshal(buffer.Bytes(), envelope) + + envelopes = append(envelopes, envelope) + } + + return envelopes, nil +} + +func (c *Consumer) requestTC(path, authToken string) (*http.Response, error) { + if authToken == "" && c.refreshTokens { + return c.requestTCNewToken(path) + } + var err error + resp, httpErr := c.tryTCConnection(path, authToken) + if httpErr != nil { + err = httpErr.error + if httpErr.statusCode == http.StatusUnauthorized && c.refreshTokens { + resp, err = c.requestTCNewToken(path) + } + } + return resp, err +} + +func (c *Consumer) requestTCNewToken(path string) (*http.Response, error) { + token, err := c.getToken() + if err != nil { + return nil, err + } + conn, httpErr := c.tryTCConnection(path, token) + if httpErr != nil { + return nil, httpErr.error + } + return conn, nil +} + +func (c *Consumer) tryTCConnection(recentPath, token string) (*http.Response, *httpError) { + req, _ := http.NewRequest("GET", recentPath, nil) + req.Header.Set("Authorization", token) + + resp, err := c.client.Do(req) + if err != nil { + message := `Error dialing trafficcontroller server: %s. +Please ask your Cloud Foundry Operator to check the platform configuration (trafficcontroller endpoint is %s).` + return nil, &httpError{ + statusCode: -1, + error: errors.New(fmt.Sprintf(message, err, c.trafficControllerUrl)), + } + } + + return resp, checkForErrors(resp) +} + +func getMultipartReader(resp *http.Response) (*multipart.Reader, error) { + contentType := resp.Header.Get("Content-Type") + + if len(strings.TrimSpace(contentType)) == 0 { + return nil, ErrBadResponse + } + + matches := boundaryRegexp.FindStringSubmatch(contentType) + + if len(matches) != 2 || len(strings.TrimSpace(matches[1])) == 0 { + return nil, ErrBadResponse + } + reader := multipart.NewReader(resp.Body, matches[1]) + return reader, nil +} diff --git a/vendor/github.com/cloudfoundry/noaa/consumer/token_refresher.go b/vendor/github.com/cloudfoundry/noaa/consumer/token_refresher.go new file mode 100644 index 0000000..b8ebef7 --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/consumer/token_refresher.go @@ -0,0 +1,22 @@ +package consumer + +//go:generate hel --type TokenRefresher --output mock_token_refresher_test.go + +type TokenRefresher interface { + RefreshAuthToken() (token string, authError error) +} + +func (c *Consumer) RefreshTokenFrom(tr TokenRefresher) { + c.refresherMutex.Lock() + defer c.refresherMutex.Unlock() + + c.refreshTokens = true + c.tokenRefresher = tr +} + +func (c *Consumer) getToken() (string, error) { + c.refresherMutex.RLock() + defer c.refresherMutex.RUnlock() + + return c.tokenRefresher.RefreshAuthToken() +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/errors/error_codes.go b/vendor/github.com/cloudfoundry/noaa/errors/error_codes.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/noaa/errors/error_codes.go rename to vendor/github.com/cloudfoundry/noaa/errors/error_codes.go diff --git a/vendor/github.com/cloudfoundry/noaa/errors/non_retry_error.go b/vendor/github.com/cloudfoundry/noaa/errors/non_retry_error.go new file mode 100644 index 0000000..c4473ca --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/errors/non_retry_error.go @@ -0,0 +1,22 @@ +package errors + +import "fmt" + +// NonRetryError is a type that noaa uses when it encountered an error, +// and is not going to retry the operation. When errors of this type +// are encountered, they should result in a closed connection. +type NonRetryError struct { + Err error +} + +// NewNonRetryError constructs a NonRetryError from any error. +func NewNonRetryError(err error) NonRetryError { + return NonRetryError{ + Err: err, + } +} + +// Error implements error. +func (e NonRetryError) Error() string { + return fmt.Sprintf("Please ask your Cloud Foundry Operator to check the platform configuration: %s", e.Err.Error()) +} diff --git a/vendor/github.com/cloudfoundry/noaa/errors/retry_error.go b/vendor/github.com/cloudfoundry/noaa/errors/retry_error.go new file mode 100644 index 0000000..46ef391 --- /dev/null +++ b/vendor/github.com/cloudfoundry/noaa/errors/retry_error.go @@ -0,0 +1,20 @@ +package errors + +// RetryError is a type that noaa uses when it encountered an error, +// but is going to retry the operation. When errors of this type +// are encountered, they should not result in a closed connection. +type RetryError struct { + Err error +} + +// NewRetryError constructs a RetryError from any error. +func NewRetryError(err error) RetryError { + return RetryError{ + Err: err, + } +} + +// Error implements error. +func (e RetryError) Error() string { + return e.Err.Error() +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/errors/unauthorized_error.go b/vendor/github.com/cloudfoundry/noaa/errors/unauthorized_error.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/noaa/errors/unauthorized_error.go rename to vendor/github.com/cloudfoundry/noaa/errors/unauthorized_error.go diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_container_metrics.go b/vendor/github.com/cloudfoundry/noaa/sort_container_metrics.go similarity index 99% rename from Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_container_metrics.go rename to vendor/github.com/cloudfoundry/noaa/sort_container_metrics.go index 647d816..25e76b3 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_container_metrics.go +++ b/vendor/github.com/cloudfoundry/noaa/sort_container_metrics.go @@ -1,8 +1,9 @@ package noaa import ( - "github.com/cloudfoundry/sonde-go/events" "sort" + + "github.com/cloudfoundry/sonde-go/events" ) // SortContainerMetrics sorts a slice of containerMetrics by InstanceIndex. diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_recent.go b/vendor/github.com/cloudfoundry/noaa/sort_recent.go similarity index 99% rename from Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_recent.go rename to vendor/github.com/cloudfoundry/noaa/sort_recent.go index b62762d..f660974 100644 --- a/Godeps/_workspace/src/github.com/cloudfoundry/noaa/sort_recent.go +++ b/vendor/github.com/cloudfoundry/noaa/sort_recent.go @@ -1,8 +1,9 @@ package noaa import ( - "github.com/cloudfoundry/sonde-go/events" "sort" + + "github.com/cloudfoundry/sonde-go/events" ) // SortRecent sorts a slice of LogMessages by timestamp. The sort is stable, so messages with the same timestamp are sorted diff --git a/vendor/github.com/cloudfoundry/sonde-go/LICENSE b/vendor/github.com/cloudfoundry/sonde-go/LICENSE new file mode 100644 index 0000000..f433b1a --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/vendor/github.com/cloudfoundry/sonde-go/NOTICE b/vendor/github.com/cloudfoundry/sonde-go/NOTICE new file mode 100644 index 0000000..29ab4af --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/NOTICE @@ -0,0 +1,15 @@ +sonde-go + +Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +Limitations under the License. diff --git a/vendor/github.com/cloudfoundry/sonde-go/events/envelope.pb.go b/vendor/github.com/cloudfoundry/sonde-go/events/envelope.pb.go new file mode 100644 index 0000000..bd73cf0 --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/events/envelope.pb.go @@ -0,0 +1,1186 @@ +// Code generated by protoc-gen-gogo. +// source: envelope.proto +// DO NOT EDIT! + +/* + Package events is a generated protocol buffer package. + + It is generated from these files: + envelope.proto + error.proto + http.proto + log.proto + metric.proto + uuid.proto + + It has these top-level messages: + Envelope + Error + HttpStartStop + LogMessage + ValueMetric + CounterEvent + ContainerMetric + UUID +*/ +package events + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +// / Type of the wrapped event. +type Envelope_EventType int32 + +const ( + // Removed Heartbeat at position 1 + // Removed HttpStart at position 2 + // Removed HttpStop at position 3 + Envelope_HttpStartStop Envelope_EventType = 4 + Envelope_LogMessage Envelope_EventType = 5 + Envelope_ValueMetric Envelope_EventType = 6 + Envelope_CounterEvent Envelope_EventType = 7 + Envelope_Error Envelope_EventType = 8 + Envelope_ContainerMetric Envelope_EventType = 9 +) + +var Envelope_EventType_name = map[int32]string{ + 4: "HttpStartStop", + 5: "LogMessage", + 6: "ValueMetric", + 7: "CounterEvent", + 8: "Error", + 9: "ContainerMetric", +} +var Envelope_EventType_value = map[string]int32{ + "HttpStartStop": 4, + "LogMessage": 5, + "ValueMetric": 6, + "CounterEvent": 7, + "Error": 8, + "ContainerMetric": 9, +} + +func (x Envelope_EventType) Enum() *Envelope_EventType { + p := new(Envelope_EventType) + *p = x + return p +} +func (x Envelope_EventType) String() string { + return proto.EnumName(Envelope_EventType_name, int32(x)) +} +func (x *Envelope_EventType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Envelope_EventType_value, data, "Envelope_EventType") + if err != nil { + return err + } + *x = Envelope_EventType(value) + return nil +} +func (Envelope_EventType) EnumDescriptor() ([]byte, []int) { return fileDescriptorEnvelope, []int{0, 0} } + +// / Envelope wraps an Event and adds metadata. +type Envelope struct { + Origin *string `protobuf:"bytes,1,req,name=origin" json:"origin,omitempty"` + EventType *Envelope_EventType `protobuf:"varint,2,req,name=eventType,enum=events.Envelope_EventType" json:"eventType,omitempty"` + Timestamp *int64 `protobuf:"varint,6,opt,name=timestamp" json:"timestamp,omitempty"` + Deployment *string `protobuf:"bytes,13,opt,name=deployment" json:"deployment,omitempty"` + Job *string `protobuf:"bytes,14,opt,name=job" json:"job,omitempty"` + Index *string `protobuf:"bytes,15,opt,name=index" json:"index,omitempty"` + Ip *string `protobuf:"bytes,16,opt,name=ip" json:"ip,omitempty"` + Tags map[string]string `protobuf:"bytes,17,rep,name=tags" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Removed Heartbeat at position 3 + // Removed HttpStart at position 4 + // Removed HttpStop at position 5 + HttpStartStop *HttpStartStop `protobuf:"bytes,7,opt,name=httpStartStop" json:"httpStartStop,omitempty"` + LogMessage *LogMessage `protobuf:"bytes,8,opt,name=logMessage" json:"logMessage,omitempty"` + ValueMetric *ValueMetric `protobuf:"bytes,9,opt,name=valueMetric" json:"valueMetric,omitempty"` + CounterEvent *CounterEvent `protobuf:"bytes,10,opt,name=counterEvent" json:"counterEvent,omitempty"` + Error *Error `protobuf:"bytes,11,opt,name=error" json:"error,omitempty"` + ContainerMetric *ContainerMetric `protobuf:"bytes,12,opt,name=containerMetric" json:"containerMetric,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Envelope) Reset() { *m = Envelope{} } +func (m *Envelope) String() string { return proto.CompactTextString(m) } +func (*Envelope) ProtoMessage() {} +func (*Envelope) Descriptor() ([]byte, []int) { return fileDescriptorEnvelope, []int{0} } + +func (m *Envelope) GetOrigin() string { + if m != nil && m.Origin != nil { + return *m.Origin + } + return "" +} + +func (m *Envelope) GetEventType() Envelope_EventType { + if m != nil && m.EventType != nil { + return *m.EventType + } + return Envelope_HttpStartStop +} + +func (m *Envelope) GetTimestamp() int64 { + if m != nil && m.Timestamp != nil { + return *m.Timestamp + } + return 0 +} + +func (m *Envelope) GetDeployment() string { + if m != nil && m.Deployment != nil { + return *m.Deployment + } + return "" +} + +func (m *Envelope) GetJob() string { + if m != nil && m.Job != nil { + return *m.Job + } + return "" +} + +func (m *Envelope) GetIndex() string { + if m != nil && m.Index != nil { + return *m.Index + } + return "" +} + +func (m *Envelope) GetIp() string { + if m != nil && m.Ip != nil { + return *m.Ip + } + return "" +} + +func (m *Envelope) GetTags() map[string]string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *Envelope) GetHttpStartStop() *HttpStartStop { + if m != nil { + return m.HttpStartStop + } + return nil +} + +func (m *Envelope) GetLogMessage() *LogMessage { + if m != nil { + return m.LogMessage + } + return nil +} + +func (m *Envelope) GetValueMetric() *ValueMetric { + if m != nil { + return m.ValueMetric + } + return nil +} + +func (m *Envelope) GetCounterEvent() *CounterEvent { + if m != nil { + return m.CounterEvent + } + return nil +} + +func (m *Envelope) GetError() *Error { + if m != nil { + return m.Error + } + return nil +} + +func (m *Envelope) GetContainerMetric() *ContainerMetric { + if m != nil { + return m.ContainerMetric + } + return nil +} + +func init() { + proto.RegisterType((*Envelope)(nil), "events.Envelope") + proto.RegisterEnum("events.Envelope_EventType", Envelope_EventType_name, Envelope_EventType_value) +} +func (m *Envelope) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Envelope) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Origin == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("origin") + } else { + data[i] = 0xa + i++ + i = encodeVarintEnvelope(data, i, uint64(len(*m.Origin))) + i += copy(data[i:], *m.Origin) + } + if m.EventType == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("eventType") + } else { + data[i] = 0x10 + i++ + i = encodeVarintEnvelope(data, i, uint64(*m.EventType)) + } + if m.Timestamp != nil { + data[i] = 0x30 + i++ + i = encodeVarintEnvelope(data, i, uint64(*m.Timestamp)) + } + if m.HttpStartStop != nil { + data[i] = 0x3a + i++ + i = encodeVarintEnvelope(data, i, uint64(m.HttpStartStop.Size())) + n1, err := m.HttpStartStop.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.LogMessage != nil { + data[i] = 0x42 + i++ + i = encodeVarintEnvelope(data, i, uint64(m.LogMessage.Size())) + n2, err := m.LogMessage.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.ValueMetric != nil { + data[i] = 0x4a + i++ + i = encodeVarintEnvelope(data, i, uint64(m.ValueMetric.Size())) + n3, err := m.ValueMetric.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + } + if m.CounterEvent != nil { + data[i] = 0x52 + i++ + i = encodeVarintEnvelope(data, i, uint64(m.CounterEvent.Size())) + n4, err := m.CounterEvent.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.Error != nil { + data[i] = 0x5a + i++ + i = encodeVarintEnvelope(data, i, uint64(m.Error.Size())) + n5, err := m.Error.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.ContainerMetric != nil { + data[i] = 0x62 + i++ + i = encodeVarintEnvelope(data, i, uint64(m.ContainerMetric.Size())) + n6, err := m.ContainerMetric.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n6 + } + if m.Deployment != nil { + data[i] = 0x6a + i++ + i = encodeVarintEnvelope(data, i, uint64(len(*m.Deployment))) + i += copy(data[i:], *m.Deployment) + } + if m.Job != nil { + data[i] = 0x72 + i++ + i = encodeVarintEnvelope(data, i, uint64(len(*m.Job))) + i += copy(data[i:], *m.Job) + } + if m.Index != nil { + data[i] = 0x7a + i++ + i = encodeVarintEnvelope(data, i, uint64(len(*m.Index))) + i += copy(data[i:], *m.Index) + } + if m.Ip != nil { + data[i] = 0x82 + i++ + data[i] = 0x1 + i++ + i = encodeVarintEnvelope(data, i, uint64(len(*m.Ip))) + i += copy(data[i:], *m.Ip) + } + if len(m.Tags) > 0 { + for k, _ := range m.Tags { + data[i] = 0x8a + i++ + data[i] = 0x1 + i++ + v := m.Tags[k] + mapSize := 1 + len(k) + sovEnvelope(uint64(len(k))) + 1 + len(v) + sovEnvelope(uint64(len(v))) + i = encodeVarintEnvelope(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintEnvelope(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintEnvelope(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Envelope(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Envelope(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintEnvelope(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *Envelope) Size() (n int) { + var l int + _ = l + if m.Origin != nil { + l = len(*m.Origin) + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.EventType != nil { + n += 1 + sovEnvelope(uint64(*m.EventType)) + } + if m.Timestamp != nil { + n += 1 + sovEnvelope(uint64(*m.Timestamp)) + } + if m.HttpStartStop != nil { + l = m.HttpStartStop.Size() + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.LogMessage != nil { + l = m.LogMessage.Size() + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.ValueMetric != nil { + l = m.ValueMetric.Size() + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.CounterEvent != nil { + l = m.CounterEvent.Size() + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.ContainerMetric != nil { + l = m.ContainerMetric.Size() + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.Deployment != nil { + l = len(*m.Deployment) + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.Job != nil { + l = len(*m.Job) + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.Index != nil { + l = len(*m.Index) + n += 1 + l + sovEnvelope(uint64(l)) + } + if m.Ip != nil { + l = len(*m.Ip) + n += 2 + l + sovEnvelope(uint64(l)) + } + if len(m.Tags) > 0 { + for k, v := range m.Tags { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovEnvelope(uint64(len(k))) + 1 + len(v) + sovEnvelope(uint64(len(v))) + n += mapEntrySize + 2 + sovEnvelope(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovEnvelope(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozEnvelope(x uint64) (n int) { + return sovEnvelope(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Envelope) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Envelope: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Envelope: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Origin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Origin = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EventType", wireType) + } + var v Envelope_EventType + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (Envelope_EventType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.EventType = &v + hasFields[0] |= uint64(0x00000002) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Timestamp = &v + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HttpStartStop", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HttpStartStop == nil { + m.HttpStartStop = &HttpStartStop{} + } + if err := m.HttpStartStop.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogMessage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LogMessage == nil { + m.LogMessage = &LogMessage{} + } + if err := m.LogMessage.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValueMetric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ValueMetric == nil { + m.ValueMetric = &ValueMetric{} + } + if err := m.ValueMetric.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterEvent", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CounterEvent == nil { + m.CounterEvent = &CounterEvent{} + } + if err := m.CounterEvent.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &Error{} + } + if err := m.Error.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerMetric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ContainerMetric == nil { + m.ContainerMetric = &ContainerMetric{} + } + if err := m.ContainerMetric.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deployment", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Deployment = &s + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Job", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Job = &s + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Index = &s + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ip", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Ip = &s + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEnvelope + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthEnvelope + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Tags == nil { + m.Tags = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEnvelope + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthEnvelope + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Tags[mapkey] = mapvalue + } else { + var mapvalue string + m.Tags[mapkey] = mapvalue + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEnvelope(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthEnvelope + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("origin") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("eventType") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEnvelope(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEnvelope + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEnvelope + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEnvelope + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthEnvelope + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEnvelope + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipEnvelope(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthEnvelope = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEnvelope = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("envelope.proto", fileDescriptorEnvelope) } + +var fileDescriptorEnvelope = []byte{ + // 522 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x52, 0x4f, 0x6f, 0x9b, 0x4e, + 0x10, 0x15, 0x38, 0x76, 0xcc, 0xe0, 0x3f, 0x64, 0x92, 0xdf, 0xaf, 0x2b, 0xab, 0xb2, 0x68, 0x7a, + 0xe1, 0x52, 0x22, 0x59, 0xaa, 0x6a, 0xb5, 0xea, 0xa1, 0xa9, 0x5c, 0xf5, 0xd0, 0x5c, 0x48, 0xd4, + 0x3b, 0x86, 0x0d, 0xa1, 0xc1, 0x2c, 0x5d, 0x16, 0xab, 0x7c, 0xc3, 0x1e, 0xfb, 0x11, 0x2a, 0x7f, + 0x8a, 0x1e, 0x2b, 0x06, 0xb0, 0x71, 0xd4, 0xdb, 0xbc, 0x79, 0xef, 0x31, 0xb3, 0x6f, 0x80, 0x09, + 0x4f, 0xb7, 0x3c, 0x11, 0x19, 0x77, 0x33, 0x29, 0x94, 0xc0, 0x01, 0xdf, 0xf2, 0x54, 0xe5, 0xb3, + 0x57, 0x51, 0xac, 0x1e, 0x8a, 0xb5, 0x1b, 0x88, 0xcd, 0x55, 0x24, 0x22, 0x71, 0x45, 0xf4, 0xba, + 0xb8, 0x27, 0x44, 0x80, 0xaa, 0xda, 0x36, 0x83, 0x07, 0xa5, 0xb2, 0xa6, 0x36, 0x12, 0x11, 0x35, + 0xe5, 0x68, 0xc3, 0x95, 0x8c, 0x83, 0x06, 0x99, 0x5c, 0x4a, 0x21, 0x6b, 0x70, 0xf9, 0xa7, 0x0f, + 0xc3, 0x55, 0x33, 0x1b, 0xff, 0x87, 0x81, 0x90, 0x71, 0x14, 0xa7, 0x4c, 0xb3, 0x75, 0xc7, 0xf0, + 0x1a, 0x84, 0x4b, 0x30, 0x68, 0x9f, 0xbb, 0x32, 0xe3, 0x4c, 0xb7, 0x75, 0x67, 0xb2, 0x98, 0xb9, + 0xf5, 0x86, 0x6e, 0x6b, 0x76, 0x57, 0xad, 0xc2, 0x3b, 0x88, 0xf1, 0x39, 0x18, 0x2a, 0xde, 0xf0, + 0x5c, 0xf9, 0x9b, 0x8c, 0x0d, 0x6c, 0xcd, 0xe9, 0x79, 0x87, 0x06, 0xbe, 0x83, 0x71, 0xb5, 0xf0, + 0xad, 0xf2, 0xa5, 0xba, 0x55, 0x22, 0x63, 0xa7, 0xb6, 0xe6, 0x98, 0x8b, 0xff, 0xda, 0x6f, 0x7f, + 0xee, 0x92, 0xde, 0xb1, 0x16, 0x17, 0x00, 0x89, 0x88, 0x6e, 0x78, 0x9e, 0xfb, 0x11, 0x67, 0x43, + 0x72, 0x62, 0xeb, 0xfc, 0xb2, 0x67, 0xbc, 0x8e, 0x0a, 0x5f, 0x83, 0xb9, 0xf5, 0x93, 0x82, 0xdf, + 0x50, 0x1e, 0xcc, 0x20, 0xd3, 0x79, 0x6b, 0xfa, 0x7a, 0xa0, 0xbc, 0xae, 0x0e, 0x97, 0x30, 0x0a, + 0x44, 0x91, 0x2a, 0x2e, 0xe9, 0x91, 0x0c, 0xc8, 0x77, 0xd1, 0xfa, 0x3e, 0x76, 0x38, 0xef, 0x48, + 0x89, 0x2f, 0xa1, 0x4f, 0x69, 0x33, 0x93, 0x2c, 0xe3, 0x7d, 0x6a, 0x55, 0xd3, 0xab, 0x39, 0xfc, + 0x00, 0xd3, 0x40, 0xa4, 0xca, 0x8f, 0x53, 0x2e, 0x9b, 0xcd, 0x46, 0x24, 0x7f, 0x76, 0x98, 0x70, + 0x44, 0x7b, 0x4f, 0xf5, 0x38, 0x07, 0x08, 0x79, 0x96, 0x88, 0x72, 0x53, 0xed, 0x37, 0xb6, 0x35, + 0xc7, 0xf0, 0x3a, 0x1d, 0xb4, 0xa0, 0xf7, 0x4d, 0xac, 0xd9, 0x84, 0x88, 0xaa, 0xc4, 0x0b, 0xe8, + 0xc7, 0x69, 0xc8, 0x7f, 0xb0, 0x29, 0xf5, 0x6a, 0x80, 0x13, 0xd0, 0xe3, 0x8c, 0x59, 0xd4, 0xd2, + 0xe3, 0x0c, 0x5d, 0x38, 0x51, 0x7e, 0x94, 0xb3, 0x33, 0xbb, 0xe7, 0x98, 0xff, 0x38, 0xfa, 0x9d, + 0x1f, 0xe5, 0xab, 0x54, 0xc9, 0xd2, 0x23, 0xdd, 0xec, 0x0d, 0x18, 0xfb, 0x56, 0x35, 0xf4, 0x91, + 0x97, 0x4c, 0xab, 0x87, 0x3e, 0xf2, 0xb2, 0x1a, 0x4a, 0xb9, 0x32, 0xbd, 0x1e, 0x4a, 0xe0, 0xad, + 0xbe, 0xd4, 0x2e, 0xbf, 0x83, 0xb1, 0xff, 0x81, 0xf0, 0x0c, 0xc6, 0x47, 0xa7, 0xb7, 0x4e, 0x70, + 0x02, 0x70, 0xb8, 0xa9, 0xd5, 0xc7, 0x29, 0x98, 0x9d, 0x73, 0x59, 0x03, 0xb4, 0x60, 0xd4, 0xbd, + 0x83, 0x75, 0x8a, 0x06, 0xf4, 0x29, 0x66, 0x6b, 0x88, 0xe7, 0x30, 0x7d, 0x12, 0xa1, 0x65, 0x5c, + 0xbf, 0xff, 0xb9, 0x9b, 0x6b, 0xbf, 0x76, 0x73, 0xed, 0xf7, 0x6e, 0xae, 0xc1, 0x0b, 0x21, 0x23, + 0x37, 0x48, 0x44, 0x11, 0xde, 0x8b, 0x22, 0x0d, 0x65, 0xe9, 0x86, 0x52, 0x64, 0xb9, 0x48, 0x43, + 0xde, 0xbc, 0xfa, 0x7a, 0x44, 0x5f, 0xfe, 0xe4, 0x07, 0x4a, 0xc8, 0xf2, 0x6f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x44, 0xf5, 0x54, 0xc4, 0xb3, 0x03, 0x00, 0x00, +} diff --git a/vendor/github.com/cloudfoundry/sonde-go/events/error.pb.go b/vendor/github.com/cloudfoundry/sonde-go/events/error.pb.go new file mode 100644 index 0000000..92f65ed --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/events/error.pb.go @@ -0,0 +1,427 @@ +// Code generated by protoc-gen-gogo. +// source: error.proto +// DO NOT EDIT! + +package events + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// / An Error event represents an error in the originating process. +type Error struct { + Source *string `protobuf:"bytes,1,req,name=source" json:"source,omitempty"` + Code *int32 `protobuf:"varint,2,req,name=code" json:"code,omitempty"` + Message *string `protobuf:"bytes,3,req,name=message" json:"message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Error) Reset() { *m = Error{} } +func (m *Error) String() string { return proto.CompactTextString(m) } +func (*Error) ProtoMessage() {} +func (*Error) Descriptor() ([]byte, []int) { return fileDescriptorError, []int{0} } + +func (m *Error) GetSource() string { + if m != nil && m.Source != nil { + return *m.Source + } + return "" +} + +func (m *Error) GetCode() int32 { + if m != nil && m.Code != nil { + return *m.Code + } + return 0 +} + +func (m *Error) GetMessage() string { + if m != nil && m.Message != nil { + return *m.Message + } + return "" +} + +func init() { + proto.RegisterType((*Error)(nil), "events.Error") +} +func (m *Error) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Error) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Source == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("source") + } else { + data[i] = 0xa + i++ + i = encodeVarintError(data, i, uint64(len(*m.Source))) + i += copy(data[i:], *m.Source) + } + if m.Code == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("code") + } else { + data[i] = 0x10 + i++ + i = encodeVarintError(data, i, uint64(*m.Code)) + } + if m.Message == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") + } else { + data[i] = 0x1a + i++ + i = encodeVarintError(data, i, uint64(len(*m.Message))) + i += copy(data[i:], *m.Message) + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Error(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Error(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintError(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *Error) Size() (n int) { + var l int + _ = l + if m.Source != nil { + l = len(*m.Source) + n += 1 + l + sovError(uint64(l)) + } + if m.Code != nil { + n += 1 + sovError(uint64(*m.Code)) + } + if m.Message != nil { + l = len(*m.Message) + n += 1 + l + sovError(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovError(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozError(x uint64) (n int) { + return sovError(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Error) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowError + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowError + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthError + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Source = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowError + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Code = &v + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowError + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthError + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Message = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000004) + default: + iNdEx = preIndex + skippy, err := skipError(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthError + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("source") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("code") + } + if hasFields[0]&uint64(0x00000004) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipError(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowError + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowError + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowError + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthError + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowError + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipError(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthError = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowError = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("error.proto", fileDescriptorError) } + +var fileDescriptorError = []byte{ + // 192 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4e, 0x2d, 0x2a, 0xca, + 0x2f, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4b, 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0x96, + 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0x4f, 0xcf, + 0xd7, 0x07, 0x4b, 0x27, 0x95, 0xa6, 0x81, 0x79, 0x60, 0x0e, 0x98, 0x05, 0xd1, 0xa6, 0xe4, 0xcb, + 0xc5, 0xea, 0x0a, 0x32, 0x45, 0x48, 0x8c, 0x8b, 0xad, 0x38, 0xbf, 0xb4, 0x28, 0x39, 0x55, 0x82, + 0x51, 0x81, 0x49, 0x83, 0x33, 0x08, 0xca, 0x13, 0x12, 0xe2, 0x62, 0x49, 0xce, 0x4f, 0x49, 0x95, + 0x60, 0x52, 0x60, 0xd2, 0x60, 0x0d, 0x02, 0xb3, 0x85, 0x24, 0xb8, 0xd8, 0x73, 0x53, 0x8b, 0x8b, + 0x13, 0xd3, 0x53, 0x25, 0x98, 0xc1, 0x8a, 0x61, 0x5c, 0x27, 0xdb, 0x13, 0x8f, 0xe4, 0x18, 0x2f, + 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x91, 0x4b, 0x31, 0xbf, 0x28, 0x5d, 0x2f, 0x39, 0x27, + 0xbf, 0x34, 0x25, 0x2d, 0xbf, 0x34, 0x2f, 0xa5, 0xa8, 0x52, 0x2f, 0xa5, 0x28, 0xbf, 0xa0, 0x38, + 0x3f, 0x2f, 0x25, 0x55, 0x0f, 0xe2, 0x5c, 0x27, 0x1e, 0xb0, 0xed, 0x6e, 0x89, 0xc9, 0x25, 0xf9, + 0x45, 0x95, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x46, 0xed, 0x44, 0xa1, 0xd2, 0x00, 0x00, 0x00, +} diff --git a/Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/event.go b/vendor/github.com/cloudfoundry/sonde-go/events/event.go similarity index 100% rename from Godeps/_workspace/src/github.com/cloudfoundry/sonde-go/events/event.go rename to vendor/github.com/cloudfoundry/sonde-go/events/event.go diff --git a/vendor/github.com/cloudfoundry/sonde-go/events/http.pb.go b/vendor/github.com/cloudfoundry/sonde-go/events/http.pb.go new file mode 100644 index 0000000..ad23b8d --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/events/http.pb.go @@ -0,0 +1,1186 @@ +// Code generated by protoc-gen-gogo. +// source: http.proto +// DO NOT EDIT! + +package events + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// / Type of peer handling request. +type PeerType int32 + +const ( + PeerType_Client PeerType = 1 + PeerType_Server PeerType = 2 +) + +var PeerType_name = map[int32]string{ + 1: "Client", + 2: "Server", +} +var PeerType_value = map[string]int32{ + "Client": 1, + "Server": 2, +} + +func (x PeerType) Enum() *PeerType { + p := new(PeerType) + *p = x + return p +} +func (x PeerType) String() string { + return proto.EnumName(PeerType_name, int32(x)) +} +func (x *PeerType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(PeerType_value, data, "PeerType") + if err != nil { + return err + } + *x = PeerType(value) + return nil +} +func (PeerType) EnumDescriptor() ([]byte, []int) { return fileDescriptorHttp, []int{0} } + +// / HTTP method. +type Method int32 + +const ( + Method_GET Method = 1 + Method_POST Method = 2 + Method_PUT Method = 3 + Method_DELETE Method = 4 + Method_HEAD Method = 5 + Method_ACL Method = 6 + Method_BASELINE_CONTROL Method = 7 + Method_BIND Method = 8 + Method_CHECKIN Method = 9 + Method_CHECKOUT Method = 10 + Method_CONNECT Method = 11 + Method_COPY Method = 12 + Method_DEBUG Method = 13 + Method_LABEL Method = 14 + Method_LINK Method = 15 + Method_LOCK Method = 16 + Method_MERGE Method = 17 + Method_MKACTIVITY Method = 18 + Method_MKCALENDAR Method = 19 + Method_MKCOL Method = 20 + Method_MKREDIRECTREF Method = 21 + Method_MKWORKSPACE Method = 22 + Method_MOVE Method = 23 + Method_OPTIONS Method = 24 + Method_ORDERPATCH Method = 25 + Method_PATCH Method = 26 + Method_PRI Method = 27 + Method_PROPFIND Method = 28 + Method_PROPPATCH Method = 29 + Method_REBIND Method = 30 + Method_REPORT Method = 31 + Method_SEARCH Method = 32 + Method_SHOWMETHOD Method = 33 + Method_SPACEJUMP Method = 34 + Method_TEXTSEARCH Method = 35 + Method_TRACE Method = 36 + Method_TRACK Method = 37 + Method_UNBIND Method = 38 + Method_UNCHECKOUT Method = 39 + Method_UNLINK Method = 40 + Method_UNLOCK Method = 41 + Method_UPDATE Method = 42 + Method_UPDATEREDIRECTREF Method = 43 + Method_VERSION_CONTROL Method = 44 +) + +var Method_name = map[int32]string{ + 1: "GET", + 2: "POST", + 3: "PUT", + 4: "DELETE", + 5: "HEAD", + 6: "ACL", + 7: "BASELINE_CONTROL", + 8: "BIND", + 9: "CHECKIN", + 10: "CHECKOUT", + 11: "CONNECT", + 12: "COPY", + 13: "DEBUG", + 14: "LABEL", + 15: "LINK", + 16: "LOCK", + 17: "MERGE", + 18: "MKACTIVITY", + 19: "MKCALENDAR", + 20: "MKCOL", + 21: "MKREDIRECTREF", + 22: "MKWORKSPACE", + 23: "MOVE", + 24: "OPTIONS", + 25: "ORDERPATCH", + 26: "PATCH", + 27: "PRI", + 28: "PROPFIND", + 29: "PROPPATCH", + 30: "REBIND", + 31: "REPORT", + 32: "SEARCH", + 33: "SHOWMETHOD", + 34: "SPACEJUMP", + 35: "TEXTSEARCH", + 36: "TRACE", + 37: "TRACK", + 38: "UNBIND", + 39: "UNCHECKOUT", + 40: "UNLINK", + 41: "UNLOCK", + 42: "UPDATE", + 43: "UPDATEREDIRECTREF", + 44: "VERSION_CONTROL", +} +var Method_value = map[string]int32{ + "GET": 1, + "POST": 2, + "PUT": 3, + "DELETE": 4, + "HEAD": 5, + "ACL": 6, + "BASELINE_CONTROL": 7, + "BIND": 8, + "CHECKIN": 9, + "CHECKOUT": 10, + "CONNECT": 11, + "COPY": 12, + "DEBUG": 13, + "LABEL": 14, + "LINK": 15, + "LOCK": 16, + "MERGE": 17, + "MKACTIVITY": 18, + "MKCALENDAR": 19, + "MKCOL": 20, + "MKREDIRECTREF": 21, + "MKWORKSPACE": 22, + "MOVE": 23, + "OPTIONS": 24, + "ORDERPATCH": 25, + "PATCH": 26, + "PRI": 27, + "PROPFIND": 28, + "PROPPATCH": 29, + "REBIND": 30, + "REPORT": 31, + "SEARCH": 32, + "SHOWMETHOD": 33, + "SPACEJUMP": 34, + "TEXTSEARCH": 35, + "TRACE": 36, + "TRACK": 37, + "UNBIND": 38, + "UNCHECKOUT": 39, + "UNLINK": 40, + "UNLOCK": 41, + "UPDATE": 42, + "UPDATEREDIRECTREF": 43, + "VERSION_CONTROL": 44, +} + +func (x Method) Enum() *Method { + p := new(Method) + *p = x + return p +} +func (x Method) String() string { + return proto.EnumName(Method_name, int32(x)) +} +func (x *Method) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Method_value, data, "Method") + if err != nil { + return err + } + *x = Method(value) + return nil +} +func (Method) EnumDescriptor() ([]byte, []int) { return fileDescriptorHttp, []int{1} } + +// / An HttpStartStop event represents the whole lifecycle of an HTTP request. +type HttpStartStop struct { + StartTimestamp *int64 `protobuf:"varint,1,req,name=startTimestamp" json:"startTimestamp,omitempty"` + StopTimestamp *int64 `protobuf:"varint,2,req,name=stopTimestamp" json:"stopTimestamp,omitempty"` + RequestId *UUID `protobuf:"bytes,3,req,name=requestId" json:"requestId,omitempty"` + PeerType *PeerType `protobuf:"varint,4,req,name=peerType,enum=events.PeerType" json:"peerType,omitempty"` + Method *Method `protobuf:"varint,5,req,name=method,enum=events.Method" json:"method,omitempty"` + Uri *string `protobuf:"bytes,6,req,name=uri" json:"uri,omitempty"` + RemoteAddress *string `protobuf:"bytes,7,req,name=remoteAddress" json:"remoteAddress,omitempty"` + UserAgent *string `protobuf:"bytes,8,req,name=userAgent" json:"userAgent,omitempty"` + StatusCode *int32 `protobuf:"varint,9,req,name=statusCode" json:"statusCode,omitempty"` + ContentLength *int64 `protobuf:"varint,10,req,name=contentLength" json:"contentLength,omitempty"` + ApplicationId *UUID `protobuf:"bytes,12,opt,name=applicationId" json:"applicationId,omitempty"` + InstanceIndex *int32 `protobuf:"varint,13,opt,name=instanceIndex" json:"instanceIndex,omitempty"` + InstanceId *string `protobuf:"bytes,14,opt,name=instanceId" json:"instanceId,omitempty"` + Forwarded []string `protobuf:"bytes,15,rep,name=forwarded" json:"forwarded,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *HttpStartStop) Reset() { *m = HttpStartStop{} } +func (m *HttpStartStop) String() string { return proto.CompactTextString(m) } +func (*HttpStartStop) ProtoMessage() {} +func (*HttpStartStop) Descriptor() ([]byte, []int) { return fileDescriptorHttp, []int{0} } + +func (m *HttpStartStop) GetStartTimestamp() int64 { + if m != nil && m.StartTimestamp != nil { + return *m.StartTimestamp + } + return 0 +} + +func (m *HttpStartStop) GetStopTimestamp() int64 { + if m != nil && m.StopTimestamp != nil { + return *m.StopTimestamp + } + return 0 +} + +func (m *HttpStartStop) GetRequestId() *UUID { + if m != nil { + return m.RequestId + } + return nil +} + +func (m *HttpStartStop) GetPeerType() PeerType { + if m != nil && m.PeerType != nil { + return *m.PeerType + } + return PeerType_Client +} + +func (m *HttpStartStop) GetMethod() Method { + if m != nil && m.Method != nil { + return *m.Method + } + return Method_GET +} + +func (m *HttpStartStop) GetUri() string { + if m != nil && m.Uri != nil { + return *m.Uri + } + return "" +} + +func (m *HttpStartStop) GetRemoteAddress() string { + if m != nil && m.RemoteAddress != nil { + return *m.RemoteAddress + } + return "" +} + +func (m *HttpStartStop) GetUserAgent() string { + if m != nil && m.UserAgent != nil { + return *m.UserAgent + } + return "" +} + +func (m *HttpStartStop) GetStatusCode() int32 { + if m != nil && m.StatusCode != nil { + return *m.StatusCode + } + return 0 +} + +func (m *HttpStartStop) GetContentLength() int64 { + if m != nil && m.ContentLength != nil { + return *m.ContentLength + } + return 0 +} + +func (m *HttpStartStop) GetApplicationId() *UUID { + if m != nil { + return m.ApplicationId + } + return nil +} + +func (m *HttpStartStop) GetInstanceIndex() int32 { + if m != nil && m.InstanceIndex != nil { + return *m.InstanceIndex + } + return 0 +} + +func (m *HttpStartStop) GetInstanceId() string { + if m != nil && m.InstanceId != nil { + return *m.InstanceId + } + return "" +} + +func (m *HttpStartStop) GetForwarded() []string { + if m != nil { + return m.Forwarded + } + return nil +} + +func init() { + proto.RegisterType((*HttpStartStop)(nil), "events.HttpStartStop") + proto.RegisterEnum("events.PeerType", PeerType_name, PeerType_value) + proto.RegisterEnum("events.Method", Method_name, Method_value) +} +func (m *HttpStartStop) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *HttpStartStop) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.StartTimestamp == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("startTimestamp") + } else { + data[i] = 0x8 + i++ + i = encodeVarintHttp(data, i, uint64(*m.StartTimestamp)) + } + if m.StopTimestamp == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("stopTimestamp") + } else { + data[i] = 0x10 + i++ + i = encodeVarintHttp(data, i, uint64(*m.StopTimestamp)) + } + if m.RequestId == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") + } else { + data[i] = 0x1a + i++ + i = encodeVarintHttp(data, i, uint64(m.RequestId.Size())) + n1, err := m.RequestId.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.PeerType == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") + } else { + data[i] = 0x20 + i++ + i = encodeVarintHttp(data, i, uint64(*m.PeerType)) + } + if m.Method == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("method") + } else { + data[i] = 0x28 + i++ + i = encodeVarintHttp(data, i, uint64(*m.Method)) + } + if m.Uri == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") + } else { + data[i] = 0x32 + i++ + i = encodeVarintHttp(data, i, uint64(len(*m.Uri))) + i += copy(data[i:], *m.Uri) + } + if m.RemoteAddress == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("remoteAddress") + } else { + data[i] = 0x3a + i++ + i = encodeVarintHttp(data, i, uint64(len(*m.RemoteAddress))) + i += copy(data[i:], *m.RemoteAddress) + } + if m.UserAgent == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("userAgent") + } else { + data[i] = 0x42 + i++ + i = encodeVarintHttp(data, i, uint64(len(*m.UserAgent))) + i += copy(data[i:], *m.UserAgent) + } + if m.StatusCode == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("statusCode") + } else { + data[i] = 0x48 + i++ + i = encodeVarintHttp(data, i, uint64(*m.StatusCode)) + } + if m.ContentLength == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("contentLength") + } else { + data[i] = 0x50 + i++ + i = encodeVarintHttp(data, i, uint64(*m.ContentLength)) + } + if m.ApplicationId != nil { + data[i] = 0x62 + i++ + i = encodeVarintHttp(data, i, uint64(m.ApplicationId.Size())) + n2, err := m.ApplicationId.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.InstanceIndex != nil { + data[i] = 0x68 + i++ + i = encodeVarintHttp(data, i, uint64(*m.InstanceIndex)) + } + if m.InstanceId != nil { + data[i] = 0x72 + i++ + i = encodeVarintHttp(data, i, uint64(len(*m.InstanceId))) + i += copy(data[i:], *m.InstanceId) + } + if len(m.Forwarded) > 0 { + for _, s := range m.Forwarded { + data[i] = 0x7a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Http(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Http(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintHttp(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *HttpStartStop) Size() (n int) { + var l int + _ = l + if m.StartTimestamp != nil { + n += 1 + sovHttp(uint64(*m.StartTimestamp)) + } + if m.StopTimestamp != nil { + n += 1 + sovHttp(uint64(*m.StopTimestamp)) + } + if m.RequestId != nil { + l = m.RequestId.Size() + n += 1 + l + sovHttp(uint64(l)) + } + if m.PeerType != nil { + n += 1 + sovHttp(uint64(*m.PeerType)) + } + if m.Method != nil { + n += 1 + sovHttp(uint64(*m.Method)) + } + if m.Uri != nil { + l = len(*m.Uri) + n += 1 + l + sovHttp(uint64(l)) + } + if m.RemoteAddress != nil { + l = len(*m.RemoteAddress) + n += 1 + l + sovHttp(uint64(l)) + } + if m.UserAgent != nil { + l = len(*m.UserAgent) + n += 1 + l + sovHttp(uint64(l)) + } + if m.StatusCode != nil { + n += 1 + sovHttp(uint64(*m.StatusCode)) + } + if m.ContentLength != nil { + n += 1 + sovHttp(uint64(*m.ContentLength)) + } + if m.ApplicationId != nil { + l = m.ApplicationId.Size() + n += 1 + l + sovHttp(uint64(l)) + } + if m.InstanceIndex != nil { + n += 1 + sovHttp(uint64(*m.InstanceIndex)) + } + if m.InstanceId != nil { + l = len(*m.InstanceId) + n += 1 + l + sovHttp(uint64(l)) + } + if len(m.Forwarded) > 0 { + for _, s := range m.Forwarded { + l = len(s) + n += 1 + l + sovHttp(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovHttp(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozHttp(x uint64) (n int) { + return sovHttp(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *HttpStartStop) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HttpStartStop: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HttpStartStop: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTimestamp", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.StartTimestamp = &v + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StopTimestamp", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.StopTimestamp = &v + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RequestId == nil { + m.RequestId = &UUID{} + } + if err := m.RequestId.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + hasFields[0] |= uint64(0x00000004) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerType", wireType) + } + var v PeerType + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (PeerType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.PeerType = &v + hasFields[0] |= uint64(0x00000008) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) + } + var v Method + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (Method(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Method = &v + hasFields[0] |= uint64(0x00000010) + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Uri = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000020) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RemoteAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.RemoteAddress = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000040) + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserAgent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.UserAgent = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000080) + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StatusCode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.StatusCode = &v + hasFields[0] |= uint64(0x00000100) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentLength", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ContentLength = &v + hasFields[0] |= uint64(0x00000200) + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApplicationId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ApplicationId == nil { + m.ApplicationId = &UUID{} + } + if err := m.ApplicationId.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InstanceIndex", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.InstanceIndex = &v + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InstanceId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.InstanceId = &s + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Forwarded", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttp + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHttp + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Forwarded = append(m.Forwarded, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipHttp(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthHttp + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("startTimestamp") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("stopTimestamp") + } + if hasFields[0]&uint64(0x00000004) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("requestId") + } + if hasFields[0]&uint64(0x00000008) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("peerType") + } + if hasFields[0]&uint64(0x00000010) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("method") + } + if hasFields[0]&uint64(0x00000020) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("uri") + } + if hasFields[0]&uint64(0x00000040) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("remoteAddress") + } + if hasFields[0]&uint64(0x00000080) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("userAgent") + } + if hasFields[0]&uint64(0x00000100) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("statusCode") + } + if hasFields[0]&uint64(0x00000200) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("contentLength") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipHttp(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttp + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttp + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttp + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthHttp + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttp + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipHttp(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthHttp = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowHttp = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("http.proto", fileDescriptorHttp) } + +var fileDescriptorHttp = []byte{ + // 811 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x64, 0x54, 0xdd, 0x72, 0xda, 0x46, + 0x18, 0x1d, 0xc0, 0x60, 0x58, 0x0c, 0xfe, 0xbc, 0x49, 0x5a, 0xd5, 0x4d, 0xa9, 0xe2, 0xa6, 0x2e, + 0x75, 0x53, 0x32, 0xe3, 0xeb, 0xde, 0x08, 0x69, 0x6d, 0x54, 0x84, 0x56, 0xb3, 0x2c, 0x4e, 0x73, + 0xd5, 0x21, 0x68, 0x8d, 0x99, 0x31, 0x5a, 0x55, 0x5a, 0xa5, 0xf5, 0x73, 0xf4, 0x9d, 0x3a, 0xbd, + 0xec, 0x23, 0x74, 0xfc, 0x24, 0x9d, 0x5d, 0x61, 0x6c, 0x9a, 0xbb, 0xf3, 0x9d, 0x73, 0xf6, 0xfb, + 0x39, 0x1a, 0x40, 0xe8, 0x46, 0xa9, 0x74, 0x90, 0x66, 0x52, 0x49, 0xdc, 0x10, 0x1f, 0x45, 0xa2, + 0xf2, 0xe3, 0x1f, 0x97, 0x2b, 0x75, 0x53, 0x7c, 0x18, 0x2c, 0xe4, 0xfa, 0xed, 0x52, 0x2e, 0xe5, + 0x5b, 0x23, 0x7f, 0x28, 0xae, 0x4d, 0x65, 0x0a, 0x83, 0xca, 0x67, 0xc7, 0xa8, 0x28, 0x56, 0x71, + 0x89, 0x4f, 0xfe, 0xdc, 0x43, 0x9d, 0x91, 0x52, 0xe9, 0x54, 0xcd, 0x33, 0x35, 0x55, 0x32, 0xc5, + 0xa7, 0xa8, 0x9b, 0xeb, 0x82, 0xaf, 0xd6, 0x22, 0x57, 0xf3, 0x75, 0x6a, 0x55, 0xec, 0x6a, 0xbf, + 0xc6, 0xfe, 0xc7, 0xe2, 0xd7, 0xa8, 0x93, 0x2b, 0x99, 0x3e, 0xda, 0xaa, 0xc6, 0xb6, 0x4b, 0xe2, + 0x33, 0xd4, 0xca, 0xc4, 0x6f, 0x85, 0xc8, 0x95, 0x1f, 0x5b, 0x35, 0xbb, 0xda, 0x6f, 0x9f, 0x1f, + 0x0c, 0xca, 0xb5, 0x07, 0xb3, 0x99, 0xef, 0xb1, 0x47, 0x19, 0xbf, 0x41, 0xcd, 0x54, 0x88, 0x8c, + 0xdf, 0xa5, 0xc2, 0xda, 0xb3, 0xab, 0xfd, 0xee, 0x39, 0x3c, 0x58, 0xa3, 0x0d, 0xcf, 0xb6, 0x0e, + 0x7c, 0x8a, 0x1a, 0x6b, 0xa1, 0x6e, 0x64, 0x6c, 0xd5, 0x8d, 0xb7, 0xfb, 0xe0, 0x9d, 0x18, 0x96, + 0x6d, 0x54, 0x0c, 0xa8, 0x56, 0x64, 0x2b, 0xab, 0x61, 0x57, 0xfb, 0x2d, 0xa6, 0xa1, 0xde, 0x3c, + 0x13, 0x6b, 0xa9, 0x84, 0x13, 0xc7, 0x99, 0xc8, 0x73, 0x6b, 0xdf, 0x68, 0xbb, 0x24, 0x7e, 0x89, + 0x5a, 0x45, 0x2e, 0x32, 0x67, 0x29, 0x12, 0x65, 0x35, 0x8d, 0xe3, 0x91, 0xc0, 0x3d, 0x84, 0x72, + 0x35, 0x57, 0x45, 0xee, 0xca, 0x58, 0x58, 0x2d, 0xbb, 0xda, 0xaf, 0xb3, 0x27, 0x8c, 0x9e, 0xb1, + 0x90, 0x89, 0x12, 0x89, 0x0a, 0x44, 0xb2, 0x54, 0x37, 0x16, 0x2a, 0xd3, 0xd9, 0x21, 0xf1, 0x39, + 0xea, 0xcc, 0xd3, 0xf4, 0x76, 0xb5, 0x98, 0xab, 0x95, 0x4c, 0xfc, 0xd8, 0x3a, 0xb0, 0x2b, 0x9f, + 0x24, 0xb4, 0x6b, 0xd1, 0x9d, 0x57, 0x49, 0xae, 0xe6, 0xc9, 0x42, 0xf8, 0x49, 0x2c, 0xfe, 0xb0, + 0x3a, 0x76, 0xa5, 0x5f, 0x67, 0xbb, 0xa4, 0xde, 0x6f, 0x4b, 0xc4, 0x56, 0xd7, 0xae, 0xf4, 0x5b, + 0xec, 0x09, 0xa3, 0xaf, 0xbb, 0x96, 0xd9, 0xef, 0xf3, 0x2c, 0x16, 0xb1, 0x75, 0x68, 0xd7, 0xf4, + 0x75, 0x5b, 0xe2, 0xec, 0x04, 0x35, 0x1f, 0x12, 0xc7, 0x08, 0x35, 0xdc, 0xdb, 0x95, 0x48, 0x14, + 0x54, 0x34, 0x9e, 0x8a, 0xec, 0xa3, 0xc8, 0xa0, 0x7a, 0xf6, 0xd7, 0x1e, 0x6a, 0x94, 0x51, 0xe3, + 0x7d, 0x54, 0xbb, 0x24, 0x1c, 0x2a, 0xb8, 0x89, 0xf6, 0x22, 0x3a, 0xe5, 0x50, 0xd5, 0x54, 0x34, + 0xe3, 0x50, 0xd3, 0x4f, 0x3c, 0x12, 0x10, 0x4e, 0x60, 0x4f, 0xcb, 0x23, 0xe2, 0x78, 0x50, 0xd7, + 0xb2, 0xe3, 0x06, 0xd0, 0xc0, 0xcf, 0x11, 0x0c, 0x9d, 0x29, 0x09, 0xfc, 0x90, 0xfc, 0xea, 0xd2, + 0x90, 0x33, 0x1a, 0xc0, 0xbe, 0x36, 0x0e, 0xfd, 0xd0, 0x83, 0x26, 0x6e, 0xa3, 0x7d, 0x77, 0x44, + 0xdc, 0xb1, 0x1f, 0x42, 0x0b, 0x1f, 0xa0, 0xa6, 0x29, 0xe8, 0x8c, 0x03, 0x32, 0x12, 0x0d, 0x43, + 0xe2, 0x72, 0x68, 0xeb, 0x17, 0x2e, 0x8d, 0xde, 0xc3, 0x01, 0x6e, 0xa1, 0xba, 0x47, 0x86, 0xb3, + 0x4b, 0xe8, 0x68, 0x18, 0x38, 0x43, 0x12, 0x40, 0x57, 0xeb, 0x81, 0x1f, 0x8e, 0xe1, 0xd0, 0x20, + 0xea, 0x8e, 0x01, 0xb4, 0x3c, 0x21, 0xec, 0x92, 0xc0, 0x11, 0xee, 0x22, 0x34, 0x19, 0x3b, 0x2e, + 0xf7, 0xaf, 0x7c, 0xfe, 0x1e, 0x70, 0x59, 0xbb, 0x4e, 0x40, 0x42, 0xcf, 0x61, 0xf0, 0xcc, 0x58, + 0xc7, 0x2e, 0x0d, 0xe0, 0x39, 0x3e, 0x42, 0x9d, 0xc9, 0x98, 0x11, 0xcf, 0x67, 0xc4, 0xe5, 0x8c, + 0x5c, 0xc0, 0x0b, 0x7c, 0x88, 0xda, 0x93, 0xf1, 0x3b, 0xca, 0xc6, 0xd3, 0xc8, 0x71, 0x09, 0x7c, + 0xa6, 0x67, 0x4c, 0xe8, 0x15, 0x81, 0xcf, 0xf5, 0x92, 0x34, 0xe2, 0x3e, 0x0d, 0xa7, 0x60, 0xe9, + 0xae, 0x94, 0x79, 0x84, 0x45, 0x0e, 0x77, 0x47, 0xf0, 0x85, 0xee, 0x5a, 0xc2, 0x63, 0x93, 0x17, + 0xf3, 0xe1, 0x4b, 0x7d, 0x63, 0xc4, 0x68, 0x74, 0xa1, 0xcf, 0x7f, 0x89, 0x3b, 0xa8, 0xa5, 0xab, + 0xd2, 0xf5, 0x95, 0x0e, 0x93, 0x11, 0x93, 0x4c, 0xaf, 0xc4, 0x11, 0x65, 0x1c, 0xbe, 0x36, 0xdf, + 0x85, 0x38, 0xcc, 0x1d, 0x81, 0xad, 0x87, 0x4c, 0x47, 0xf4, 0xdd, 0x84, 0xf0, 0x11, 0xf5, 0xe0, + 0x95, 0x6e, 0x61, 0xd6, 0xfa, 0x79, 0x36, 0x89, 0xe0, 0x44, 0xcb, 0x9c, 0xfc, 0xc2, 0x37, 0xf6, + 0x6f, 0xf4, 0x0e, 0x9c, 0xe9, 0xad, 0x5f, 0x3f, 0xc0, 0x31, 0x7c, 0xab, 0x1b, 0xce, 0x42, 0x33, + 0xe8, 0x54, 0xbf, 0x98, 0x85, 0xdb, 0xdc, 0xbf, 0x2b, 0x35, 0x13, 0x66, 0x7f, 0x83, 0x75, 0x9c, + 0xdf, 0x1b, 0x1c, 0x79, 0x0e, 0x27, 0x70, 0x86, 0x5f, 0xa0, 0xa3, 0x12, 0x3f, 0x0d, 0xea, 0x07, + 0xfc, 0x0c, 0x1d, 0x5e, 0x11, 0x36, 0xf5, 0x69, 0xb8, 0xfd, 0xd8, 0x6f, 0x86, 0x3f, 0xfd, 0x7d, + 0xdf, 0xab, 0xfc, 0x73, 0xdf, 0xab, 0xfc, 0x7b, 0xdf, 0xab, 0xa0, 0x57, 0x32, 0x5b, 0x0e, 0x16, + 0xb7, 0xb2, 0x88, 0xaf, 0x65, 0x91, 0xc4, 0xd9, 0xdd, 0x20, 0xce, 0x64, 0x9a, 0xcb, 0x24, 0x16, + 0x9b, 0x5f, 0xc5, 0xb0, 0xad, 0xff, 0xb0, 0x2e, 0xe6, 0x0b, 0x25, 0xb3, 0xbb, 0xff, 0x02, 0x00, + 0x00, 0xff, 0xff, 0xfb, 0xdc, 0x82, 0x50, 0x10, 0x05, 0x00, 0x00, +} diff --git a/vendor/github.com/cloudfoundry/sonde-go/events/log.pb.go b/vendor/github.com/cloudfoundry/sonde-go/events/log.pb.go new file mode 100644 index 0000000..15966a0 --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/events/log.pb.go @@ -0,0 +1,603 @@ +// Code generated by protoc-gen-gogo. +// source: log.proto +// DO NOT EDIT! + +package events + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// / MessageType stores the destination of the message (corresponding to STDOUT or STDERR). +type LogMessage_MessageType int32 + +const ( + LogMessage_OUT LogMessage_MessageType = 1 + LogMessage_ERR LogMessage_MessageType = 2 +) + +var LogMessage_MessageType_name = map[int32]string{ + 1: "OUT", + 2: "ERR", +} +var LogMessage_MessageType_value = map[string]int32{ + "OUT": 1, + "ERR": 2, +} + +func (x LogMessage_MessageType) Enum() *LogMessage_MessageType { + p := new(LogMessage_MessageType) + *p = x + return p +} +func (x LogMessage_MessageType) String() string { + return proto.EnumName(LogMessage_MessageType_name, int32(x)) +} +func (x *LogMessage_MessageType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(LogMessage_MessageType_value, data, "LogMessage_MessageType") + if err != nil { + return err + } + *x = LogMessage_MessageType(value) + return nil +} +func (LogMessage_MessageType) EnumDescriptor() ([]byte, []int) { return fileDescriptorLog, []int{0, 0} } + +// / A LogMessage contains a "log line" and associated metadata. +type LogMessage struct { + Message []byte `protobuf:"bytes,1,req,name=message" json:"message,omitempty"` + MessageType *LogMessage_MessageType `protobuf:"varint,2,req,name=message_type,json=messageType,enum=events.LogMessage_MessageType" json:"message_type,omitempty"` + Timestamp *int64 `protobuf:"varint,3,req,name=timestamp" json:"timestamp,omitempty"` + AppId *string `protobuf:"bytes,4,opt,name=app_id,json=appId" json:"app_id,omitempty"` + SourceType *string `protobuf:"bytes,5,opt,name=source_type,json=sourceType" json:"source_type,omitempty"` + SourceInstance *string `protobuf:"bytes,6,opt,name=source_instance,json=sourceInstance" json:"source_instance,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *LogMessage) Reset() { *m = LogMessage{} } +func (m *LogMessage) String() string { return proto.CompactTextString(m) } +func (*LogMessage) ProtoMessage() {} +func (*LogMessage) Descriptor() ([]byte, []int) { return fileDescriptorLog, []int{0} } + +func (m *LogMessage) GetMessage() []byte { + if m != nil { + return m.Message + } + return nil +} + +func (m *LogMessage) GetMessageType() LogMessage_MessageType { + if m != nil && m.MessageType != nil { + return *m.MessageType + } + return LogMessage_OUT +} + +func (m *LogMessage) GetTimestamp() int64 { + if m != nil && m.Timestamp != nil { + return *m.Timestamp + } + return 0 +} + +func (m *LogMessage) GetAppId() string { + if m != nil && m.AppId != nil { + return *m.AppId + } + return "" +} + +func (m *LogMessage) GetSourceType() string { + if m != nil && m.SourceType != nil { + return *m.SourceType + } + return "" +} + +func (m *LogMessage) GetSourceInstance() string { + if m != nil && m.SourceInstance != nil { + return *m.SourceInstance + } + return "" +} + +func init() { + proto.RegisterType((*LogMessage)(nil), "events.LogMessage") + proto.RegisterEnum("events.LogMessage_MessageType", LogMessage_MessageType_name, LogMessage_MessageType_value) +} +func (m *LogMessage) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LogMessage) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Message == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") + } else { + data[i] = 0xa + i++ + i = encodeVarintLog(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + } + if m.MessageType == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("message_type") + } else { + data[i] = 0x10 + i++ + i = encodeVarintLog(data, i, uint64(*m.MessageType)) + } + if m.Timestamp == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") + } else { + data[i] = 0x18 + i++ + i = encodeVarintLog(data, i, uint64(*m.Timestamp)) + } + if m.AppId != nil { + data[i] = 0x22 + i++ + i = encodeVarintLog(data, i, uint64(len(*m.AppId))) + i += copy(data[i:], *m.AppId) + } + if m.SourceType != nil { + data[i] = 0x2a + i++ + i = encodeVarintLog(data, i, uint64(len(*m.SourceType))) + i += copy(data[i:], *m.SourceType) + } + if m.SourceInstance != nil { + data[i] = 0x32 + i++ + i = encodeVarintLog(data, i, uint64(len(*m.SourceInstance))) + i += copy(data[i:], *m.SourceInstance) + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Log(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Log(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintLog(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *LogMessage) Size() (n int) { + var l int + _ = l + if m.Message != nil { + l = len(m.Message) + n += 1 + l + sovLog(uint64(l)) + } + if m.MessageType != nil { + n += 1 + sovLog(uint64(*m.MessageType)) + } + if m.Timestamp != nil { + n += 1 + sovLog(uint64(*m.Timestamp)) + } + if m.AppId != nil { + l = len(*m.AppId) + n += 1 + l + sovLog(uint64(l)) + } + if m.SourceType != nil { + l = len(*m.SourceType) + n += 1 + l + sovLog(uint64(l)) + } + if m.SourceInstance != nil { + l = len(*m.SourceInstance) + n += 1 + l + sovLog(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovLog(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozLog(x uint64) (n int) { + return sovLog(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *LogMessage) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LogMessage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LogMessage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthLog + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = append(m.Message[:0], data[iNdEx:postIndex]...) + if m.Message == nil { + m.Message = []byte{} + } + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageType", wireType) + } + var v LogMessage_MessageType + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (LogMessage_MessageType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.MessageType = &v + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Timestamp = &v + hasFields[0] |= uint64(0x00000004) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthLog + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.AppId = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthLog + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.SourceType = &s + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceInstance", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthLog + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.SourceInstance = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipLog(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthLog + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("message") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("message_type") + } + if hasFields[0]&uint64(0x00000004) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("timestamp") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipLog(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLog + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLog + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLog + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthLog + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLog + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipLog(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthLog = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowLog = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("log.proto", fileDescriptorLog) } + +var fileDescriptorLog = []byte{ + // 294 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x4c, 0x90, 0xd1, 0x4a, 0xc3, 0x30, + 0x14, 0x86, 0x69, 0xe7, 0x36, 0x76, 0x36, 0xe6, 0x08, 0x08, 0x45, 0xa4, 0xab, 0xbb, 0xb1, 0x37, + 0x66, 0xe0, 0xad, 0x57, 0x0e, 0x14, 0x06, 0x8a, 0x50, 0xe6, 0xf5, 0xc8, 0x9a, 0x2c, 0x16, 0xd6, + 0x9e, 0x90, 0xa4, 0x42, 0x1f, 0xc1, 0x37, 0xf3, 0xd2, 0x47, 0x90, 0x3d, 0x89, 0x2c, 0x8d, 0xd4, + 0xab, 0xfc, 0xff, 0x77, 0x4e, 0xce, 0x9f, 0x1c, 0x18, 0x1d, 0x50, 0x52, 0xa5, 0xd1, 0x22, 0x19, + 0x88, 0x0f, 0x51, 0x59, 0x73, 0x79, 0x2b, 0x0b, 0xfb, 0x5e, 0xef, 0x68, 0x8e, 0xe5, 0x52, 0xa2, + 0xc4, 0xa5, 0x2b, 0xef, 0xea, 0xbd, 0x73, 0xce, 0x38, 0xd5, 0x5e, 0x5b, 0x7c, 0x86, 0x00, 0xcf, + 0x28, 0x5f, 0x84, 0x31, 0x4c, 0x0a, 0x12, 0xc1, 0xb0, 0x6c, 0x65, 0x14, 0x24, 0x61, 0x3a, 0xc9, + 0xfe, 0x2c, 0x79, 0x80, 0x89, 0x97, 0x5b, 0xdb, 0x28, 0x11, 0x85, 0x49, 0x98, 0x4e, 0xef, 0x62, + 0xda, 0xc6, 0xd2, 0x6e, 0x06, 0xf5, 0xe7, 0xa6, 0x51, 0x22, 0x1b, 0x97, 0x9d, 0x21, 0x57, 0x30, + 0xb2, 0x45, 0x29, 0x8c, 0x65, 0xa5, 0x8a, 0x7a, 0x49, 0x98, 0xf6, 0xb2, 0x0e, 0x90, 0x0b, 0x18, + 0x30, 0xa5, 0xb6, 0x05, 0x8f, 0xce, 0x92, 0x20, 0x1d, 0x65, 0x7d, 0xa6, 0xd4, 0x9a, 0x93, 0x39, + 0x8c, 0x0d, 0xd6, 0x3a, 0xf7, 0xb1, 0x7d, 0x57, 0x83, 0x16, 0xb9, 0xa9, 0x37, 0x70, 0xee, 0x1b, + 0x8a, 0xca, 0x58, 0x56, 0xe5, 0x22, 0x1a, 0xb8, 0xa6, 0x69, 0x8b, 0xd7, 0x9e, 0x2e, 0xe6, 0x30, + 0xfe, 0xf7, 0x34, 0x32, 0x84, 0xde, 0xeb, 0xdb, 0x66, 0x16, 0x9c, 0xc4, 0x63, 0x96, 0xcd, 0xc2, + 0xd5, 0xfd, 0xd7, 0x31, 0x0e, 0xbe, 0x8f, 0x71, 0xf0, 0x73, 0x8c, 0x03, 0xb8, 0x46, 0x2d, 0x69, + 0x7e, 0xc0, 0x9a, 0xef, 0xb1, 0xae, 0xb8, 0x6e, 0x28, 0xd7, 0xa8, 0x0c, 0x56, 0x5c, 0xf8, 0x4f, + 0xaf, 0x4e, 0x9b, 0x7b, 0x62, 0xb9, 0x45, 0xdd, 0xfc, 0x06, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x4c, + 0x0b, 0xe4, 0x8b, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/cloudfoundry/sonde-go/events/metric.pb.go b/vendor/github.com/cloudfoundry/sonde-go/events/metric.pb.go new file mode 100644 index 0000000..79d6814 --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/events/metric.pb.go @@ -0,0 +1,1048 @@ +// Code generated by protoc-gen-gogo. +// source: metric.proto +// DO NOT EDIT! + +package events + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// / A ValueMetric indicates the value of a metric at an instant in time. +type ValueMetric struct { + Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` + Value *float64 `protobuf:"fixed64,2,req,name=value" json:"value,omitempty"` + Unit *string `protobuf:"bytes,3,req,name=unit" json:"unit,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ValueMetric) Reset() { *m = ValueMetric{} } +func (m *ValueMetric) String() string { return proto.CompactTextString(m) } +func (*ValueMetric) ProtoMessage() {} +func (*ValueMetric) Descriptor() ([]byte, []int) { return fileDescriptorMetric, []int{0} } + +func (m *ValueMetric) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *ValueMetric) GetValue() float64 { + if m != nil && m.Value != nil { + return *m.Value + } + return 0 +} + +func (m *ValueMetric) GetUnit() string { + if m != nil && m.Unit != nil { + return *m.Unit + } + return "" +} + +// / A CounterEvent represents the increment of a counter. It contains only the change in the value; it is the responsibility of downstream consumers to maintain the value of the counter. +type CounterEvent struct { + Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` + Delta *uint64 `protobuf:"varint,2,req,name=delta" json:"delta,omitempty"` + Total *uint64 `protobuf:"varint,3,opt,name=total" json:"total,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *CounterEvent) Reset() { *m = CounterEvent{} } +func (m *CounterEvent) String() string { return proto.CompactTextString(m) } +func (*CounterEvent) ProtoMessage() {} +func (*CounterEvent) Descriptor() ([]byte, []int) { return fileDescriptorMetric, []int{1} } + +func (m *CounterEvent) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *CounterEvent) GetDelta() uint64 { + if m != nil && m.Delta != nil { + return *m.Delta + } + return 0 +} + +func (m *CounterEvent) GetTotal() uint64 { + if m != nil && m.Total != nil { + return *m.Total + } + return 0 +} + +// / A ContainerMetric records resource usage of an app in a container. +type ContainerMetric struct { + ApplicationId *string `protobuf:"bytes,1,req,name=applicationId" json:"applicationId,omitempty"` + InstanceIndex *int32 `protobuf:"varint,2,req,name=instanceIndex" json:"instanceIndex,omitempty"` + CpuPercentage *float64 `protobuf:"fixed64,3,req,name=cpuPercentage" json:"cpuPercentage,omitempty"` + MemoryBytes *uint64 `protobuf:"varint,4,req,name=memoryBytes" json:"memoryBytes,omitempty"` + DiskBytes *uint64 `protobuf:"varint,5,req,name=diskBytes" json:"diskBytes,omitempty"` + MemoryBytesQuota *uint64 `protobuf:"varint,6,opt,name=memoryBytesQuota" json:"memoryBytesQuota,omitempty"` + DiskBytesQuota *uint64 `protobuf:"varint,7,opt,name=diskBytesQuota" json:"diskBytesQuota,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ContainerMetric) Reset() { *m = ContainerMetric{} } +func (m *ContainerMetric) String() string { return proto.CompactTextString(m) } +func (*ContainerMetric) ProtoMessage() {} +func (*ContainerMetric) Descriptor() ([]byte, []int) { return fileDescriptorMetric, []int{2} } + +func (m *ContainerMetric) GetApplicationId() string { + if m != nil && m.ApplicationId != nil { + return *m.ApplicationId + } + return "" +} + +func (m *ContainerMetric) GetInstanceIndex() int32 { + if m != nil && m.InstanceIndex != nil { + return *m.InstanceIndex + } + return 0 +} + +func (m *ContainerMetric) GetCpuPercentage() float64 { + if m != nil && m.CpuPercentage != nil { + return *m.CpuPercentage + } + return 0 +} + +func (m *ContainerMetric) GetMemoryBytes() uint64 { + if m != nil && m.MemoryBytes != nil { + return *m.MemoryBytes + } + return 0 +} + +func (m *ContainerMetric) GetDiskBytes() uint64 { + if m != nil && m.DiskBytes != nil { + return *m.DiskBytes + } + return 0 +} + +func (m *ContainerMetric) GetMemoryBytesQuota() uint64 { + if m != nil && m.MemoryBytesQuota != nil { + return *m.MemoryBytesQuota + } + return 0 +} + +func (m *ContainerMetric) GetDiskBytesQuota() uint64 { + if m != nil && m.DiskBytesQuota != nil { + return *m.DiskBytesQuota + } + return 0 +} + +func init() { + proto.RegisterType((*ValueMetric)(nil), "events.ValueMetric") + proto.RegisterType((*CounterEvent)(nil), "events.CounterEvent") + proto.RegisterType((*ContainerMetric)(nil), "events.ContainerMetric") +} +func (m *ValueMetric) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ValueMetric) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Name == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") + } else { + data[i] = 0xa + i++ + i = encodeVarintMetric(data, i, uint64(len(*m.Name))) + i += copy(data[i:], *m.Name) + } + if m.Value == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("value") + } else { + data[i] = 0x11 + i++ + i = encodeFixed64Metric(data, i, uint64(math.Float64bits(float64(*m.Value)))) + } + if m.Unit == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("unit") + } else { + data[i] = 0x1a + i++ + i = encodeVarintMetric(data, i, uint64(len(*m.Unit))) + i += copy(data[i:], *m.Unit) + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *CounterEvent) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CounterEvent) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Name == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") + } else { + data[i] = 0xa + i++ + i = encodeVarintMetric(data, i, uint64(len(*m.Name))) + i += copy(data[i:], *m.Name) + } + if m.Delta == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("delta") + } else { + data[i] = 0x10 + i++ + i = encodeVarintMetric(data, i, uint64(*m.Delta)) + } + if m.Total != nil { + data[i] = 0x18 + i++ + i = encodeVarintMetric(data, i, uint64(*m.Total)) + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *ContainerMetric) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerMetric) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ApplicationId == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("applicationId") + } else { + data[i] = 0xa + i++ + i = encodeVarintMetric(data, i, uint64(len(*m.ApplicationId))) + i += copy(data[i:], *m.ApplicationId) + } + if m.InstanceIndex == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("instanceIndex") + } else { + data[i] = 0x10 + i++ + i = encodeVarintMetric(data, i, uint64(*m.InstanceIndex)) + } + if m.CpuPercentage == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("cpuPercentage") + } else { + data[i] = 0x19 + i++ + i = encodeFixed64Metric(data, i, uint64(math.Float64bits(float64(*m.CpuPercentage)))) + } + if m.MemoryBytes == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("memoryBytes") + } else { + data[i] = 0x20 + i++ + i = encodeVarintMetric(data, i, uint64(*m.MemoryBytes)) + } + if m.DiskBytes == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("diskBytes") + } else { + data[i] = 0x28 + i++ + i = encodeVarintMetric(data, i, uint64(*m.DiskBytes)) + } + if m.MemoryBytesQuota != nil { + data[i] = 0x30 + i++ + i = encodeVarintMetric(data, i, uint64(*m.MemoryBytesQuota)) + } + if m.DiskBytesQuota != nil { + data[i] = 0x38 + i++ + i = encodeVarintMetric(data, i, uint64(*m.DiskBytesQuota)) + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Metric(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Metric(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintMetric(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *ValueMetric) Size() (n int) { + var l int + _ = l + if m.Name != nil { + l = len(*m.Name) + n += 1 + l + sovMetric(uint64(l)) + } + if m.Value != nil { + n += 9 + } + if m.Unit != nil { + l = len(*m.Unit) + n += 1 + l + sovMetric(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *CounterEvent) Size() (n int) { + var l int + _ = l + if m.Name != nil { + l = len(*m.Name) + n += 1 + l + sovMetric(uint64(l)) + } + if m.Delta != nil { + n += 1 + sovMetric(uint64(*m.Delta)) + } + if m.Total != nil { + n += 1 + sovMetric(uint64(*m.Total)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ContainerMetric) Size() (n int) { + var l int + _ = l + if m.ApplicationId != nil { + l = len(*m.ApplicationId) + n += 1 + l + sovMetric(uint64(l)) + } + if m.InstanceIndex != nil { + n += 1 + sovMetric(uint64(*m.InstanceIndex)) + } + if m.CpuPercentage != nil { + n += 9 + } + if m.MemoryBytes != nil { + n += 1 + sovMetric(uint64(*m.MemoryBytes)) + } + if m.DiskBytes != nil { + n += 1 + sovMetric(uint64(*m.DiskBytes)) + } + if m.MemoryBytesQuota != nil { + n += 1 + sovMetric(uint64(*m.MemoryBytesQuota)) + } + if m.DiskBytesQuota != nil { + n += 1 + sovMetric(uint64(*m.DiskBytesQuota)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovMetric(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozMetric(x uint64) (n int) { + return sovMetric(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ValueMetric) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValueMetric: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValueMetric: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetric + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Name = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + iNdEx += 8 + v = uint64(data[iNdEx-8]) + v |= uint64(data[iNdEx-7]) << 8 + v |= uint64(data[iNdEx-6]) << 16 + v |= uint64(data[iNdEx-5]) << 24 + v |= uint64(data[iNdEx-4]) << 32 + v |= uint64(data[iNdEx-3]) << 40 + v |= uint64(data[iNdEx-2]) << 48 + v |= uint64(data[iNdEx-1]) << 56 + v2 := float64(math.Float64frombits(v)) + m.Value = &v2 + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Unit", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetric + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Unit = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000004) + default: + iNdEx = preIndex + skippy, err := skipMetric(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthMetric + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("value") + } + if hasFields[0]&uint64(0x00000004) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("unit") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CounterEvent) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CounterEvent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CounterEvent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetric + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.Name = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Delta", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Delta = &v + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Total = &v + default: + iNdEx = preIndex + skippy, err := skipMetric(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthMetric + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("name") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("delta") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerMetric) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerMetric: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerMetric: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApplicationId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMetric + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.ApplicationId = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InstanceIndex", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.InstanceIndex = &v + hasFields[0] |= uint64(0x00000002) + case 3: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field CpuPercentage", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + iNdEx += 8 + v = uint64(data[iNdEx-8]) + v |= uint64(data[iNdEx-7]) << 8 + v |= uint64(data[iNdEx-6]) << 16 + v |= uint64(data[iNdEx-5]) << 24 + v |= uint64(data[iNdEx-4]) << 32 + v |= uint64(data[iNdEx-3]) << 40 + v |= uint64(data[iNdEx-2]) << 48 + v |= uint64(data[iNdEx-1]) << 56 + v2 := float64(math.Float64frombits(v)) + m.CpuPercentage = &v2 + hasFields[0] |= uint64(0x00000004) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemoryBytes", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.MemoryBytes = &v + hasFields[0] |= uint64(0x00000008) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DiskBytes", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DiskBytes = &v + hasFields[0] |= uint64(0x00000010) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemoryBytesQuota", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.MemoryBytesQuota = &v + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DiskBytesQuota", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMetric + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DiskBytesQuota = &v + default: + iNdEx = preIndex + skippy, err := skipMetric(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthMetric + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("applicationId") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("instanceIndex") + } + if hasFields[0]&uint64(0x00000004) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("cpuPercentage") + } + if hasFields[0]&uint64(0x00000008) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("memoryBytes") + } + if hasFields[0]&uint64(0x00000010) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("diskBytes") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipMetric(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetric + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetric + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetric + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthMetric + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMetric + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipMetric(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthMetric = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowMetric = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("metric.proto", fileDescriptorMetric) } + +var fileDescriptorMetric = []byte{ + // 357 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x92, 0xdf, 0xaa, 0x13, 0x31, + 0x10, 0x87, 0xd9, 0xed, 0x1f, 0x69, 0xda, 0xaa, 0x04, 0x2f, 0x96, 0x22, 0x65, 0x2d, 0x22, 0x45, + 0x70, 0xfb, 0x06, 0x5e, 0xb4, 0x28, 0x14, 0x51, 0x74, 0x2f, 0xbc, 0x4f, 0x93, 0xe9, 0x1a, 0xdc, + 0xcd, 0x2c, 0xd9, 0x49, 0x71, 0x9f, 0xc4, 0x57, 0xf2, 0xd2, 0x47, 0x90, 0x3e, 0x89, 0x24, 0x29, + 0xda, 0x9e, 0xc3, 0xb9, 0x9b, 0xdf, 0x37, 0x5f, 0x66, 0x27, 0x4b, 0xd8, 0xac, 0x01, 0xb2, 0x5a, + 0x16, 0xad, 0x45, 0x42, 0x3e, 0x86, 0x13, 0x18, 0xea, 0x16, 0x6f, 0x2a, 0x4d, 0xdf, 0xdc, 0xa1, + 0x90, 0xd8, 0x6c, 0x2a, 0xac, 0x70, 0x13, 0xda, 0x07, 0x77, 0x0c, 0x29, 0x84, 0x50, 0xc5, 0x63, + 0x0b, 0xe6, 0x9c, 0x56, 0xb1, 0x5e, 0x7d, 0x60, 0xd3, 0xaf, 0xa2, 0x76, 0xf0, 0x31, 0xcc, 0xe5, + 0x9c, 0x0d, 0x8d, 0x68, 0x20, 0x4b, 0xf2, 0x74, 0x3d, 0x29, 0x43, 0xcd, 0x9f, 0xb1, 0xd1, 0xc9, + 0x2b, 0x59, 0x9a, 0xa7, 0xeb, 0xa4, 0x8c, 0xc1, 0x9b, 0xce, 0x68, 0xca, 0x06, 0xd1, 0xf4, 0xf5, + 0xea, 0x13, 0x9b, 0xed, 0xd0, 0x19, 0x02, 0xfb, 0xce, 0x2f, 0xf6, 0xd0, 0x34, 0x05, 0x35, 0x89, + 0x30, 0x6d, 0x58, 0xc6, 0xe0, 0x29, 0x21, 0x89, 0x3a, 0x1b, 0xe4, 0x89, 0xa7, 0x21, 0xac, 0x7e, + 0xa6, 0xec, 0xc9, 0x0e, 0x0d, 0x09, 0x6d, 0xc0, 0x5e, 0x36, 0x7c, 0xc9, 0xe6, 0xa2, 0x6d, 0x6b, + 0x2d, 0x05, 0x69, 0x34, 0x7b, 0x75, 0x19, 0x7e, 0x0b, 0xbd, 0xa5, 0x4d, 0x47, 0xc2, 0x48, 0xd8, + 0x1b, 0x05, 0x3f, 0xc2, 0xd7, 0x46, 0xe5, 0x2d, 0xf4, 0x96, 0x6c, 0xdd, 0x67, 0xb0, 0x12, 0x0c, + 0x89, 0x0a, 0xc2, 0x65, 0x92, 0xf2, 0x16, 0xf2, 0x9c, 0x4d, 0x1b, 0x68, 0xd0, 0xf6, 0xdb, 0x9e, + 0xa0, 0xcb, 0x86, 0x61, 0xef, 0x6b, 0xc4, 0x9f, 0xb3, 0x89, 0xd2, 0xdd, 0xf7, 0xd8, 0x1f, 0x85, + 0xfe, 0x7f, 0xc0, 0x5f, 0xb3, 0xa7, 0x57, 0xf2, 0x17, 0x87, 0x24, 0xb2, 0x71, 0xb8, 0xe6, 0x3d, + 0xce, 0x5f, 0xb1, 0xc7, 0xff, 0x0e, 0x46, 0xf3, 0x51, 0x30, 0xef, 0xd0, 0xed, 0xdb, 0x5f, 0xe7, + 0x65, 0xf2, 0xfb, 0xbc, 0x4c, 0xfe, 0x9c, 0x97, 0x09, 0x7b, 0x81, 0xb6, 0x2a, 0x64, 0x8d, 0x4e, + 0x1d, 0xd1, 0x19, 0x65, 0xfb, 0x42, 0x59, 0x6c, 0x3b, 0x34, 0x0a, 0x8a, 0xf8, 0x44, 0xb6, 0xf3, + 0xf8, 0xfb, 0xde, 0x0b, 0x49, 0x68, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xbe, 0x10, + 0xbe, 0x48, 0x02, 0x00, 0x00, +} diff --git a/vendor/github.com/cloudfoundry/sonde-go/events/uuid.pb.go b/vendor/github.com/cloudfoundry/sonde-go/events/uuid.pb.go new file mode 100644 index 0000000..713cb4d --- /dev/null +++ b/vendor/github.com/cloudfoundry/sonde-go/events/uuid.pb.go @@ -0,0 +1,362 @@ +// Code generated by protoc-gen-gogo. +// source: uuid.proto +// DO NOT EDIT! + +package events + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" + +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// / Type representing a 128-bit UUID. +// +// The bytes of the UUID should be packed in little-endian **byte** (not bit) order. For example, the UUID `f47ac10b-58cc-4372-a567-0e02b2c3d479` should be encoded as `UUID{ low: 0x7243cc580bc17af4, high: 0x79d4c3b2020e67a5 }` +type UUID struct { + Low *uint64 `protobuf:"varint,1,req,name=low" json:"low,omitempty"` + High *uint64 `protobuf:"varint,2,req,name=high" json:"high,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *UUID) Reset() { *m = UUID{} } +func (m *UUID) String() string { return proto.CompactTextString(m) } +func (*UUID) ProtoMessage() {} +func (*UUID) Descriptor() ([]byte, []int) { return fileDescriptorUuid, []int{0} } + +func (m *UUID) GetLow() uint64 { + if m != nil && m.Low != nil { + return *m.Low + } + return 0 +} + +func (m *UUID) GetHigh() uint64 { + if m != nil && m.High != nil { + return *m.High + } + return 0 +} + +func init() { + proto.RegisterType((*UUID)(nil), "events.UUID") +} +func (m *UUID) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *UUID) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Low == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("low") + } else { + data[i] = 0x8 + i++ + i = encodeVarintUuid(data, i, uint64(*m.Low)) + } + if m.High == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("high") + } else { + data[i] = 0x10 + i++ + i = encodeVarintUuid(data, i, uint64(*m.High)) + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Uuid(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Uuid(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintUuid(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *UUID) Size() (n int) { + var l int + _ = l + if m.Low != nil { + n += 1 + sovUuid(uint64(*m.Low)) + } + if m.High != nil { + n += 1 + sovUuid(uint64(*m.High)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovUuid(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozUuid(x uint64) (n int) { + return sovUuid(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *UUID) Unmarshal(data []byte) error { + var hasFields [1]uint64 + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUuid + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UUID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UUID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Low", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUuid + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Low = &v + hasFields[0] |= uint64(0x00000001) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field High", wireType) + } + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUuid + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.High = &v + hasFields[0] |= uint64(0x00000002) + default: + iNdEx = preIndex + skippy, err := skipUuid(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthUuid + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("low") + } + if hasFields[0]&uint64(0x00000002) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("high") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipUuid(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowUuid + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowUuid + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowUuid + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthUuid + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowUuid + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipUuid(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthUuid = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowUuid = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("uuid.proto", fileDescriptorUuid) } + +var fileDescriptorUuid = []byte{ + // 171 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x2d, 0xcd, 0x4c, + 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4b, 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0x96, 0xd2, + 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0x4f, 0xcf, 0xd7, + 0x07, 0x4b, 0x27, 0x95, 0xa6, 0x81, 0x79, 0x60, 0x0e, 0x98, 0x05, 0xd1, 0xa6, 0xa4, 0xc3, 0xc5, + 0x12, 0x1a, 0xea, 0xe9, 0x22, 0x24, 0xc0, 0xc5, 0x9c, 0x93, 0x5f, 0x2e, 0xc1, 0xa8, 0xc0, 0xa4, + 0xc1, 0x12, 0x04, 0x62, 0x0a, 0x09, 0x71, 0xb1, 0x64, 0x64, 0xa6, 0x67, 0x48, 0x30, 0x81, 0x85, + 0xc0, 0x6c, 0x27, 0x9b, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, + 0x91, 0x4b, 0x31, 0xbf, 0x28, 0x5d, 0x2f, 0x39, 0x27, 0xbf, 0x34, 0x25, 0x2d, 0xbf, 0x34, 0x2f, + 0xa5, 0xa8, 0x52, 0x2f, 0xa5, 0x28, 0xbf, 0xa0, 0x38, 0x3f, 0x2f, 0x25, 0x55, 0x0f, 0xe2, 0x1a, + 0x27, 0xee, 0xd0, 0xd2, 0xcc, 0x14, 0xb7, 0xc4, 0xe4, 0x92, 0xfc, 0xa2, 0x4a, 0x40, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xc1, 0x49, 0x67, 0x8e, 0xaf, 0x00, 0x00, 0x00, +} diff --git a/vendor/github.com/fatih/color/.travis.yml b/vendor/github.com/fatih/color/.travis.yml new file mode 100644 index 0000000..2405aef --- /dev/null +++ b/vendor/github.com/fatih/color/.travis.yml @@ -0,0 +1,3 @@ +language: go +go: 1.3 + diff --git a/vendor/github.com/fatih/color/LICENSE.md b/vendor/github.com/fatih/color/LICENSE.md new file mode 100644 index 0000000..25fdaf6 --- /dev/null +++ b/vendor/github.com/fatih/color/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Fatih Arslan + +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/fatih/color/README.md b/vendor/github.com/fatih/color/README.md new file mode 100644 index 0000000..d6fb06a --- /dev/null +++ b/vendor/github.com/fatih/color/README.md @@ -0,0 +1,151 @@ +# Color [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/fatih/color) [![Build Status](http://img.shields.io/travis/fatih/color.svg?style=flat-square)](https://travis-ci.org/fatih/color) + + + +Color lets you use colorized outputs in terms of [ANSI Escape Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It has support for Windows too! The API can be used in several ways, pick one that suits you. + + + +![Color](http://i.imgur.com/c1JI0lA.png) + + +## Install + +```bash +go get github.com/fatih/color +``` + +## Examples + +### Standard colors + +```go +// Print with default helper functions +color.Cyan("Prints text in cyan.") + +// A newline will be appended automatically +color.Blue("Prints %s in blue.", "text") + +// These are using the default foreground colors +color.Red("We have red") +color.Magenta("And many others ..") + +``` + +### Mix and reuse colors + +```go +// Create a new color object +c := color.New(color.FgCyan).Add(color.Underline) +c.Println("Prints cyan text with an underline.") + +// Or just add them to New() +d := color.New(color.FgCyan, color.Bold) +d.Printf("This prints bold cyan %s\n", "too!.") + +// Mix up foreground and background colors, create new mixes! +red := color.New(color.FgRed) + +boldRed := red.Add(color.Bold) +boldRed.Println("This will print text in bold red.") + +whiteBackground := red.Add(color.BgWhite) +whiteBackground.Println("Red text with white background.") +``` + +### Custom print functions (PrintFunc) + +```go +// Create a custom print function for convenience +red := color.New(color.FgRed).PrintfFunc() +red("Warning") +red("Error: %s", err) + +// Mix up multiple attributes +notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() +notice("Don't forget this...") +``` + +### Insert into noncolor strings (SprintFunc) + +```go +// Create SprintXxx functions to mix strings with other non-colorized strings: +yellow := color.New(color.FgYellow).SprintFunc() +red := color.New(color.FgRed).SprintFunc() +fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error")) + +info := color.New(color.FgWhite, color.BgGreen).SprintFunc() +fmt.Printf("This %s rocks!\n", info("package")) + +// Use helper functions +fmt.Printf("This", color.RedString("warning"), "should be not neglected.") +fmt.Printf(color.GreenString("Info:"), "an important message." ) + +// Windows supported too! Just don't forget to change the output to color.Output +fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) +``` + +### Plug into existing code + +```go +// Use handy standard colors +color.Set(color.FgYellow) + +fmt.Println("Existing text will now be in yellow") +fmt.Printf("This one %s\n", "too") + +color.Unset() // Don't forget to unset + +// You can mix up parameters +color.Set(color.FgMagenta, color.Bold) +defer color.Unset() // Use it in your function + +fmt.Println("All text will now be bold magenta.") +``` + +### Disable color + +There might be a case where you want to disable color output (for example to +pipe the standard output of your app to somewhere else). `Color` has support to +disable colors both globally and for single color definition. For example +suppose you have a CLI app and a `--no-color` bool flag. You can easily disable +the color output with: + +```go + +var flagNoColor = flag.Bool("no-color", false, "Disable color output") + +if *flagNoColor { + color.NoColor = true // disables colorized output +} +``` + +It also has support for single color definitions (local). You can +disable/enable color output on the fly: + +```go +c := color.New(color.FgCyan) +c.Println("Prints cyan text") + +c.DisableColor() +c.Println("This is printed without any color") + +c.EnableColor() +c.Println("This prints again cyan...") +``` + +## Todo + +* Save/Return previous values +* Evaluate fmt.Formatter interface + + +## Credits + + * [Fatih Arslan](https://github.com/fatih) + * Windows support via @shiena: [ansicolor](https://github.com/shiena/ansicolor) + +## License + +The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details + diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go new file mode 100644 index 0000000..f715d62 --- /dev/null +++ b/vendor/github.com/fatih/color/color.go @@ -0,0 +1,378 @@ +package color + +import ( + "fmt" + "os" + "strconv" + "strings" + + "github.com/mattn/go-isatty" + "github.com/shiena/ansicolor" +) + +// NoColor defines if the output is colorized or not. It's dynamically set to +// false or true based on the stdout's file descriptor referring to a terminal +// or not. This is a global option and affects all colors. For more control +// over each color block use the methods DisableColor() individually. +var NoColor = !isatty.IsTerminal(os.Stdout.Fd()) + +// Color defines a custom color object which is defined by SGR parameters. +type Color struct { + params []Attribute + noColor *bool +} + +// Attribute defines a single SGR Code +type Attribute int + +const escape = "\x1b" + +// Base attributes +const ( + Reset Attribute = iota + Bold + Faint + Italic + Underline + BlinkSlow + BlinkRapid + ReverseVideo + Concealed + CrossedOut +) + +// Foreground text colors +const ( + FgBlack Attribute = iota + 30 + FgRed + FgGreen + FgYellow + FgBlue + FgMagenta + FgCyan + FgWhite +) + +// Background text colors +const ( + BgBlack Attribute = iota + 40 + BgRed + BgGreen + BgYellow + BgBlue + BgMagenta + BgCyan + BgWhite +) + +// New returns a newly created color object. +func New(value ...Attribute) *Color { + c := &Color{params: make([]Attribute, 0)} + c.Add(value...) + return c +} + +// Set sets the given parameters immediately. It will change the color of +// output with the given SGR parameters until color.Unset() is called. +func Set(p ...Attribute) *Color { + c := New(p...) + c.Set() + return c +} + +// Unset resets all escape attributes and clears the output. Usually should +// be called after Set(). +func Unset() { + if NoColor { + return + } + + fmt.Fprintf(Output, "%s[%dm", escape, Reset) +} + +// Set sets the SGR sequence. +func (c *Color) Set() *Color { + if c.isNoColorSet() { + return c + } + + fmt.Fprintf(Output, c.format()) + return c +} + +func (c *Color) unset() { + if c.isNoColorSet() { + return + } + + Unset() +} + +// Add is used to chain SGR parameters. Use as many as parameters to combine +// and create custom color objects. Example: Add(color.FgRed, color.Underline). +func (c *Color) Add(value ...Attribute) *Color { + c.params = append(c.params, value...) + return c +} + +func (c *Color) prepend(value Attribute) { + c.params = append(c.params, 0) + copy(c.params[1:], c.params[0:]) + c.params[0] = value +} + +// Output defines the standard output of the print functions. By default +// os.Stdout is used. +var Output = ansicolor.NewAnsiColorWriter(os.Stdout) + +// Print formats using the default formats for its operands and writes to +// standard output. Spaces are added between operands when neither is a +// string. It returns the number of bytes written and any write error +// encountered. This is the standard fmt.Print() method wrapped with the given +// color. +func (c *Color) Print(a ...interface{}) (n int, err error) { + c.Set() + defer c.unset() + + return fmt.Fprint(Output, a...) +} + +// Printf formats according to a format specifier and writes to standard output. +// It returns the number of bytes written and any write error encountered. +// This is the standard fmt.Printf() method wrapped with the given color. +func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { + c.Set() + defer c.unset() + + return fmt.Fprintf(Output, format, a...) +} + +// Println formats using the default formats for its operands and writes to +// standard output. Spaces are always added between operands and a newline is +// appended. It returns the number of bytes written and any write error +// encountered. This is the standard fmt.Print() method wrapped with the given +// color. +func (c *Color) Println(a ...interface{}) (n int, err error) { + c.Set() + defer c.unset() + + return fmt.Fprintln(Output, a...) +} + +// PrintFunc returns a new function that prints the passed arguments as +// colorized with color.Print(). +func (c *Color) PrintFunc() func(a ...interface{}) { + return func(a ...interface{}) { c.Print(a...) } +} + +// PrintfFunc returns a new function that prints the passed arguments as +// colorized with color.Printf(). +func (c *Color) PrintfFunc() func(format string, a ...interface{}) { + return func(format string, a ...interface{}) { c.Printf(format, a...) } +} + +// PrintlnFunc returns a new function that prints the passed arguments as +// colorized with color.Println(). +func (c *Color) PrintlnFunc() func(a ...interface{}) { + return func(a ...interface{}) { c.Println(a...) } +} + +// SprintFunc returns a new function that returns colorized strings for the +// given arguments with fmt.Sprint(). Useful to put into or mix into other +// string. Windows users should use this in conjuction with color.Output, example: +// +// put := New(FgYellow).SprintFunc() +// fmt.Fprintf(color.Output, "This is a %s", put("warning")) +func (c *Color) SprintFunc() func(a ...interface{}) string { + return func(a ...interface{}) string { + return c.wrap(fmt.Sprint(a...)) + } +} + +// SprintfFunc returns a new function that returns colorized strings for the +// given arguments with fmt.Sprintf(). Useful to put into or mix into other +// string. Windows users should use this in conjuction with color.Output. +func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { + return func(format string, a ...interface{}) string { + return c.wrap(fmt.Sprintf(format, a...)) + } +} + +// SprintlnFunc returns a new function that returns colorized strings for the +// given arguments with fmt.Sprintln(). Useful to put into or mix into other +// string. Windows users should use this in conjuction with color.Output. +func (c *Color) SprintlnFunc() func(a ...interface{}) string { + return func(a ...interface{}) string { + return c.wrap(fmt.Sprintln(a...)) + } +} + +// sequence returns a formated SGR sequence to be plugged into a "\x1b[...m" +// an example output might be: "1;36" -> bold cyan +func (c *Color) sequence() string { + format := make([]string, len(c.params)) + for i, v := range c.params { + format[i] = strconv.Itoa(int(v)) + } + + return strings.Join(format, ";") +} + +// wrap wraps the s string with the colors attributes. The string is ready to +// be printed. +func (c *Color) wrap(s string) string { + if c.isNoColorSet() { + return s + } + + return c.format() + s + c.unformat() +} + +func (c *Color) format() string { + return fmt.Sprintf("%s[%sm", escape, c.sequence()) +} + +func (c *Color) unformat() string { + return fmt.Sprintf("%s[%dm", escape, Reset) +} + +// DisableColor disables the color output. Useful to not change any existing +// code and still being able to output. Can be used for flags like +// "--no-color". To enable back use EnableColor() method. +func (c *Color) DisableColor() { + c.noColor = boolPtr(true) +} + +// EnableColor enables the color output. Use it in conjuction with +// DisableColor(). Otherwise this method has no side effects. +func (c *Color) EnableColor() { + c.noColor = boolPtr(false) +} + +func (c *Color) isNoColorSet() bool { + // check first if we have user setted action + if c.noColor != nil { + return *c.noColor + } + + // if not return the global option, which is disabled by default + return NoColor +} + +// Equals returns a boolean value indicating whether two colors are equal. +func (c *Color) Equals(c2 *Color) bool { + if len(c.params) != len(c2.params) { + return false + } + + for _, attr := range c.params { + if !c2.attrExists(attr) { + return false + } + } + + return true +} + +func (c *Color) attrExists(a Attribute) bool { + for _, attr := range c.params { + if attr == a { + return true + } + } + + return false +} + +func boolPtr(v bool) *bool { + return &v +} + +// Black is an convenient helper function to print with black foreground. A +// newline is appended to format by default. +func Black(format string, a ...interface{}) { printColor(format, FgBlack, a...) } + +// Red is an convenient helper function to print with red foreground. A +// newline is appended to format by default. +func Red(format string, a ...interface{}) { printColor(format, FgRed, a...) } + +// Green is an convenient helper function to print with green foreground. A +// newline is appended to format by default. +func Green(format string, a ...interface{}) { printColor(format, FgGreen, a...) } + +// Yellow is an convenient helper function to print with yellow foreground. +// A newline is appended to format by default. +func Yellow(format string, a ...interface{}) { printColor(format, FgYellow, a...) } + +// Blue is an convenient helper function to print with blue foreground. A +// newline is appended to format by default. +func Blue(format string, a ...interface{}) { printColor(format, FgBlue, a...) } + +// Magenta is an convenient helper function to print with magenta foreground. +// A newline is appended to format by default. +func Magenta(format string, a ...interface{}) { printColor(format, FgMagenta, a...) } + +// Cyan is an convenient helper function to print with cyan foreground. A +// newline is appended to format by default. +func Cyan(format string, a ...interface{}) { printColor(format, FgCyan, a...) } + +// White is an convenient helper function to print with white foreground. A +// newline is appended to format by default. +func White(format string, a ...interface{}) { printColor(format, FgWhite, a...) } + +func printColor(format string, p Attribute, a ...interface{}) { + if !strings.HasSuffix(format, "\n") { + format += "\n" + } + + c := &Color{params: []Attribute{p}} + c.Printf(format, a...) +} + +// BlackString is an convenient helper function to return a string with black +// foreground. +func BlackString(format string, a ...interface{}) string { + return New(FgBlack).SprintfFunc()(format, a...) +} + +// RedString is an convenient helper function to return a string with red +// foreground. +func RedString(format string, a ...interface{}) string { + return New(FgRed).SprintfFunc()(format, a...) +} + +// GreenString is an convenient helper function to return a string with green +// foreground. +func GreenString(format string, a ...interface{}) string { + return New(FgGreen).SprintfFunc()(format, a...) +} + +// YellowString is an convenient helper function to return a string with yellow +// foreground. +func YellowString(format string, a ...interface{}) string { + return New(FgYellow).SprintfFunc()(format, a...) +} + +// BlueString is an convenient helper function to return a string with blue +// foreground. +func BlueString(format string, a ...interface{}) string { + return New(FgBlue).SprintfFunc()(format, a...) +} + +// MagentaString is an convenient helper function to return a string with magenta +// foreground. +func MagentaString(format string, a ...interface{}) string { + return New(FgMagenta).SprintfFunc()(format, a...) +} + +// CyanString is an convenient helper function to return a string with cyan +// foreground. +func CyanString(format string, a ...interface{}) string { + return New(FgCyan).SprintfFunc()(format, a...) +} + +// WhiteString is an convenient helper function to return a string with white +// foreground. +func WhiteString(format string, a ...interface{}) string { + return New(FgWhite).SprintfFunc()(format, a...) +} diff --git a/vendor/github.com/fatih/color/doc.go b/vendor/github.com/fatih/color/doc.go new file mode 100644 index 0000000..1790878 --- /dev/null +++ b/vendor/github.com/fatih/color/doc.go @@ -0,0 +1,114 @@ +/* +Package color is an ANSI color package to output colorized or SGR defined +output to the standard output. The API can be used in several way, pick one +that suits you. + +Use simple and default helper functions with predefined foreground colors: + + color.Cyan("Prints text in cyan.") + + // a newline will be appended automatically + color.Blue("Prints %s in blue.", "text") + + // More default foreground colors.. + color.Red("We have red") + color.Yellow("Yellow color too!") + color.Magenta("And many others ..") + +However there are times where custom color mixes are required. Below are some +examples to create custom color objects and use the print functions of each +separate color object. + + // Create a new color object + c := color.New(color.FgCyan).Add(color.Underline) + c.Println("Prints cyan text with an underline.") + + // Or just add them to New() + d := color.New(color.FgCyan, color.Bold) + d.Printf("This prints bold cyan %s\n", "too!.") + + + // Mix up foreground and background colors, create new mixes! + red := color.New(color.FgRed) + + boldRed := red.Add(color.Bold) + boldRed.Println("This will print text in bold red.") + + whiteBackground := red.Add(color.BgWhite) + whiteBackground.Println("Red text with White background.") + + +You can create PrintXxx functions to simplify even more: + + // Create a custom print function for convenient + red := color.New(color.FgRed).PrintfFunc() + red("warning") + red("error: %s", err) + + // Mix up multiple attributes + notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() + notice("don't forget this...") + + +Or create SprintXxx functions to mix strings with other non-colorized strings: + + yellow := New(FgYellow).SprintFunc() + red := New(FgRed).SprintFunc() + + fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error")) + + info := New(FgWhite, BgGreen).SprintFunc() + fmt.Printf("this %s rocks!\n", info("package")) + +Windows support is enabled by default. All Print functions works as intended. +However only for color.SprintXXX functions, user should use fmt.FprintXXX and +set the output to color.Output: + + fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) + + info := New(FgWhite, BgGreen).SprintFunc() + fmt.Fprintf(color.Output, "this %s rocks!\n", info("package")) + +Using with existing code is possible. Just use the Set() method to set the +standard output to the given parameters. That way a rewrite of an existing +code is not required. + + // Use handy standard colors. + color.Set(color.FgYellow) + + fmt.Println("Existing text will be now in Yellow") + fmt.Printf("This one %s\n", "too") + + color.Unset() // don't forget to unset + + // You can mix up parameters + color.Set(color.FgMagenta, color.Bold) + defer color.Unset() // use it in your function + + fmt.Println("All text will be now bold magenta.") + +There might be a case where you want to disable color output (for example to +pipe the standard output of your app to somewhere else). `Color` has support to +disable colors both globally and for single color definition. For example +suppose you have a CLI app and a `--no-color` bool flag. You can easily disable +the color output with: + + var flagNoColor = flag.Bool("no-color", false, "Disable color output") + + if *flagNoColor { + color.NoColor = true // disables colorized output + } + +It also has support for single color definitions (local). You can +disable/enable color output on the fly: + + c := color.New(color.FgCyan) + c.Println("Prints cyan text") + + c.DisableColor() + c.Println("This is printed without any color") + + c.EnableColor() + c.Println("This prints again cyan...") +*/ +package color diff --git a/vendor/github.com/gogo/protobuf/LICENSE b/vendor/github.com/gogo/protobuf/LICENSE new file mode 100644 index 0000000..7be0cc7 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/LICENSE @@ -0,0 +1,36 @@ +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/gogo/protobuf/gogoproto/Makefile b/vendor/github.com/gogo/protobuf/gogoproto/Makefile new file mode 100644 index 0000000..02f9c62 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/gogoproto/Makefile @@ -0,0 +1,37 @@ +# Protocol Buffers for Go with Gadgets +# +# Copyright (c) 2013, The GoGo Authors. All rights reserved. +# http://github.com/gogo/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +regenerate: + go install github.com/gogo/protobuf/protoc-gen-gogo + protoc --gogo_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor:. --proto_path=../../../../:../protobuf/:. *.proto + +restore: + cp gogo.pb.golden gogo.pb.go + +preserve: + cp gogo.pb.go gogo.pb.golden diff --git a/vendor/github.com/gogo/protobuf/gogoproto/doc.go b/vendor/github.com/gogo/protobuf/gogoproto/doc.go new file mode 100644 index 0000000..5ecfae1 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/gogoproto/doc.go @@ -0,0 +1,168 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package gogoproto provides extensions for protocol buffers to achieve: + + - fast marshalling and unmarshalling. + - peace of mind by optionally generating test and benchmark code. + - more canonical Go structures. + - less typing by optionally generating extra helper code. + - goprotobuf compatibility + +More Canonical Go Structures + +A lot of time working with a goprotobuf struct will lead you to a place where you create another struct that is easier to work with and then have a function to copy the values between the two structs. +You might also find that basic structs that started their life as part of an API need to be sent over the wire. With gob, you could just send it. With goprotobuf, you need to make a parallel struct. +Gogoprotobuf tries to fix these problems with the nullable, embed, customtype and customname field extensions. + + - nullable, if false, a field is generated without a pointer (see warning below). + - embed, if true, the field is generated as an embedded field. + - customtype, It works with the Marshal and Unmarshal methods, to allow you to have your own types in your struct, but marshal to bytes. For example, custom.Uuid or custom.Fixed128 + - customname (beta), Changes the generated fieldname. This is especially useful when generated methods conflict with fieldnames. + - casttype (beta), Changes the generated fieldtype. All generated code assumes that this type is castable to the protocol buffer field type. It does not work for structs or enums. + - castkey (beta), Changes the generated fieldtype for a map key. All generated code assumes that this type is castable to the protocol buffer field type. Only supported on maps. + - castvalue (beta), Changes the generated fieldtype for a map value. All generated code assumes that this type is castable to the protocol buffer field type. Only supported on maps. + +Warning about nullable: According to the Protocol Buffer specification, you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of Protocol Buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset. + +Let us look at: + + github.com/gogo/protobuf/test/example/example.proto + +for a quicker overview. + +The following message: + + package test; + + import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + + message A { + optional string Description = 1 [(gogoproto.nullable) = false]; + optional int64 Number = 2 [(gogoproto.nullable) = false]; + optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; + } + +Will generate a go struct which looks a lot like this: + + type A struct { + Description string + Number int64 + Id github_com_gogo_protobuf_test_custom.Uuid + } + +You will see there are no pointers, since all fields are non-nullable. +You will also see a custom type which marshals to a string. +Be warned it is your responsibility to test your custom types thoroughly. +You should think of every possible empty and nil case for your marshaling, unmarshaling and size methods. + +Next we will embed the message A in message B. + + message B { + optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; + repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; + } + +See below that A is embedded in B. + + type B struct { + A + G []github_com_gogo_protobuf_test_custom.Uint128 + } + +Also see the repeated custom type. + + type Uint128 [2]uint64 + +Next we will create a custom name for one of our fields. + + message C { + optional int64 size = 1 [(gogoproto.customname) = "MySize"]; + } + +See below that the field's name is MySize and not Size. + + type C struct { + MySize *int64 + } + +The is useful when having a protocol buffer message with a field name which conflicts with a generated method. +As an example, having a field name size and using the sizer plugin to generate a Size method will cause a go compiler error. +Using customname you can fix this error without changing the field name. +This is typically useful when working with a protocol buffer that was designed before these methods and/or the go language were avialable. + +Gogoprotobuf also has some more subtle changes, these could be changed back: + + - the generated package name for imports do not have the extra /filename.pb, + but are actually the imports specified in the .proto file. + +Gogoprotobuf also has lost some features which should be brought back with time: + + - Marshalling and unmarshalling with reflect and without the unsafe package, + this requires work in pointer_reflect.go + +Why does nullable break protocol buffer specifications: + +The protocol buffer specification states, somewhere, that you should be able to tell whether a +field is set or unset. With the option nullable=false this feature is lost, +since your non-nullable fields will always be set. It can be seen as a layer on top of +protocol buffers, where before and after marshalling all non-nullable fields are set +and they cannot be unset. + +Goprotobuf Compatibility: + +Gogoprotobuf is compatible with Goprotobuf, because it is compatible with protocol buffers. +Gogoprotobuf generates the same code as goprotobuf if no extensions are used. +The enumprefix, getters and stringer extensions can be used to remove some of the unnecessary code generated by goprotobuf: + + - gogoproto_import, if false, the generated code imports github.com/golang/protobuf/proto instead of github.com/gogo/protobuf/proto. + - goproto_enum_prefix, if false, generates the enum constant names without the messagetype prefix + - goproto_enum_stringer (experimental), if false, the enum is generated without the default string method, this is useful for rather using enum_stringer, or allowing you to write your own string method. + - goproto_getters, if false, the message is generated without get methods, this is useful when you would rather want to use face + - goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method. + - goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension + - goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields. + +Less Typing and Peace of Mind is explained in their specific plugin folders godoc: + + - github.com/gogo/protobuf/plugin/ + +If you do not use any of these extension the code that is generated +will be the same as if goprotobuf has generated it. + +The most complete way to see examples is to look at + + github.com/gogo/protobuf/test/thetest.proto + +Gogoprototest is a seperate project, +because we want to keep gogoprotobuf independant of goprotobuf, +but we still want to test it thoroughly. + +*/ +package gogoproto diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go new file mode 100644 index 0000000..f6a2483 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go @@ -0,0 +1,792 @@ +// Code generated by protoc-gen-gogo. +// source: gogo.proto +// DO NOT EDIT! + +/* +Package gogoproto is a generated protocol buffer package. + +It is generated from these files: + gogo.proto + +It has these top-level messages: +*/ +package gogoproto + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +var E_GoprotoEnumPrefix = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.EnumOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 62001, + Name: "gogoproto.goproto_enum_prefix", + Tag: "varint,62001,opt,name=goproto_enum_prefix,json=goprotoEnumPrefix", + Filename: "gogo.proto", +} + +var E_GoprotoEnumStringer = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.EnumOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 62021, + Name: "gogoproto.goproto_enum_stringer", + Tag: "varint,62021,opt,name=goproto_enum_stringer,json=goprotoEnumStringer", + Filename: "gogo.proto", +} + +var E_EnumStringer = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.EnumOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 62022, + Name: "gogoproto.enum_stringer", + Tag: "varint,62022,opt,name=enum_stringer,json=enumStringer", + Filename: "gogo.proto", +} + +var E_EnumCustomname = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.EnumOptions)(nil), + ExtensionType: (*string)(nil), + Field: 62023, + Name: "gogoproto.enum_customname", + Tag: "bytes,62023,opt,name=enum_customname,json=enumCustomname", + Filename: "gogo.proto", +} + +var E_Enumdecl = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.EnumOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 62024, + Name: "gogoproto.enumdecl", + Tag: "varint,62024,opt,name=enumdecl", + Filename: "gogo.proto", +} + +var E_EnumvalueCustomname = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.EnumValueOptions)(nil), + ExtensionType: (*string)(nil), + Field: 66001, + Name: "gogoproto.enumvalue_customname", + Tag: "bytes,66001,opt,name=enumvalue_customname,json=enumvalueCustomname", + Filename: "gogo.proto", +} + +var E_GoprotoGettersAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63001, + Name: "gogoproto.goproto_getters_all", + Tag: "varint,63001,opt,name=goproto_getters_all,json=goprotoGettersAll", + Filename: "gogo.proto", +} + +var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63002, + Name: "gogoproto.goproto_enum_prefix_all", + Tag: "varint,63002,opt,name=goproto_enum_prefix_all,json=goprotoEnumPrefixAll", + Filename: "gogo.proto", +} + +var E_GoprotoStringerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63003, + Name: "gogoproto.goproto_stringer_all", + Tag: "varint,63003,opt,name=goproto_stringer_all,json=goprotoStringerAll", + Filename: "gogo.proto", +} + +var E_VerboseEqualAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63004, + Name: "gogoproto.verbose_equal_all", + Tag: "varint,63004,opt,name=verbose_equal_all,json=verboseEqualAll", + Filename: "gogo.proto", +} + +var E_FaceAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63005, + Name: "gogoproto.face_all", + Tag: "varint,63005,opt,name=face_all,json=faceAll", + Filename: "gogo.proto", +} + +var E_GostringAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63006, + Name: "gogoproto.gostring_all", + Tag: "varint,63006,opt,name=gostring_all,json=gostringAll", + Filename: "gogo.proto", +} + +var E_PopulateAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63007, + Name: "gogoproto.populate_all", + Tag: "varint,63007,opt,name=populate_all,json=populateAll", + Filename: "gogo.proto", +} + +var E_StringerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63008, + Name: "gogoproto.stringer_all", + Tag: "varint,63008,opt,name=stringer_all,json=stringerAll", + Filename: "gogo.proto", +} + +var E_OnlyoneAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63009, + Name: "gogoproto.onlyone_all", + Tag: "varint,63009,opt,name=onlyone_all,json=onlyoneAll", + Filename: "gogo.proto", +} + +var E_EqualAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63013, + Name: "gogoproto.equal_all", + Tag: "varint,63013,opt,name=equal_all,json=equalAll", + Filename: "gogo.proto", +} + +var E_DescriptionAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63014, + Name: "gogoproto.description_all", + Tag: "varint,63014,opt,name=description_all,json=descriptionAll", + Filename: "gogo.proto", +} + +var E_TestgenAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63015, + Name: "gogoproto.testgen_all", + Tag: "varint,63015,opt,name=testgen_all,json=testgenAll", + Filename: "gogo.proto", +} + +var E_BenchgenAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63016, + Name: "gogoproto.benchgen_all", + Tag: "varint,63016,opt,name=benchgen_all,json=benchgenAll", + Filename: "gogo.proto", +} + +var E_MarshalerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63017, + Name: "gogoproto.marshaler_all", + Tag: "varint,63017,opt,name=marshaler_all,json=marshalerAll", + Filename: "gogo.proto", +} + +var E_UnmarshalerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63018, + Name: "gogoproto.unmarshaler_all", + Tag: "varint,63018,opt,name=unmarshaler_all,json=unmarshalerAll", + Filename: "gogo.proto", +} + +var E_StableMarshalerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63019, + Name: "gogoproto.stable_marshaler_all", + Tag: "varint,63019,opt,name=stable_marshaler_all,json=stableMarshalerAll", + Filename: "gogo.proto", +} + +var E_SizerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63020, + Name: "gogoproto.sizer_all", + Tag: "varint,63020,opt,name=sizer_all,json=sizerAll", + Filename: "gogo.proto", +} + +var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63021, + Name: "gogoproto.goproto_enum_stringer_all", + Tag: "varint,63021,opt,name=goproto_enum_stringer_all,json=goprotoEnumStringerAll", + Filename: "gogo.proto", +} + +var E_EnumStringerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63022, + Name: "gogoproto.enum_stringer_all", + Tag: "varint,63022,opt,name=enum_stringer_all,json=enumStringerAll", + Filename: "gogo.proto", +} + +var E_UnsafeMarshalerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63023, + Name: "gogoproto.unsafe_marshaler_all", + Tag: "varint,63023,opt,name=unsafe_marshaler_all,json=unsafeMarshalerAll", + Filename: "gogo.proto", +} + +var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63024, + Name: "gogoproto.unsafe_unmarshaler_all", + Tag: "varint,63024,opt,name=unsafe_unmarshaler_all,json=unsafeUnmarshalerAll", + Filename: "gogo.proto", +} + +var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63025, + Name: "gogoproto.goproto_extensions_map_all", + Tag: "varint,63025,opt,name=goproto_extensions_map_all,json=goprotoExtensionsMapAll", + Filename: "gogo.proto", +} + +var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63026, + Name: "gogoproto.goproto_unrecognized_all", + Tag: "varint,63026,opt,name=goproto_unrecognized_all,json=goprotoUnrecognizedAll", + Filename: "gogo.proto", +} + +var E_GogoprotoImport = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63027, + Name: "gogoproto.gogoproto_import", + Tag: "varint,63027,opt,name=gogoproto_import,json=gogoprotoImport", + Filename: "gogo.proto", +} + +var E_ProtosizerAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63028, + Name: "gogoproto.protosizer_all", + Tag: "varint,63028,opt,name=protosizer_all,json=protosizerAll", + Filename: "gogo.proto", +} + +var E_CompareAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63029, + Name: "gogoproto.compare_all", + Tag: "varint,63029,opt,name=compare_all,json=compareAll", + Filename: "gogo.proto", +} + +var E_TypedeclAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63030, + Name: "gogoproto.typedecl_all", + Tag: "varint,63030,opt,name=typedecl_all,json=typedeclAll", + Filename: "gogo.proto", +} + +var E_EnumdeclAll = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63031, + Name: "gogoproto.enumdecl_all", + Tag: "varint,63031,opt,name=enumdecl_all,json=enumdeclAll", + Filename: "gogo.proto", +} + +var E_GoprotoGetters = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64001, + Name: "gogoproto.goproto_getters", + Tag: "varint,64001,opt,name=goproto_getters,json=goprotoGetters", + Filename: "gogo.proto", +} + +var E_GoprotoStringer = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64003, + Name: "gogoproto.goproto_stringer", + Tag: "varint,64003,opt,name=goproto_stringer,json=goprotoStringer", + Filename: "gogo.proto", +} + +var E_VerboseEqual = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64004, + Name: "gogoproto.verbose_equal", + Tag: "varint,64004,opt,name=verbose_equal,json=verboseEqual", + Filename: "gogo.proto", +} + +var E_Face = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64005, + Name: "gogoproto.face", + Tag: "varint,64005,opt,name=face", + Filename: "gogo.proto", +} + +var E_Gostring = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64006, + Name: "gogoproto.gostring", + Tag: "varint,64006,opt,name=gostring", + Filename: "gogo.proto", +} + +var E_Populate = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64007, + Name: "gogoproto.populate", + Tag: "varint,64007,opt,name=populate", + Filename: "gogo.proto", +} + +var E_Stringer = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 67008, + Name: "gogoproto.stringer", + Tag: "varint,67008,opt,name=stringer", + Filename: "gogo.proto", +} + +var E_Onlyone = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64009, + Name: "gogoproto.onlyone", + Tag: "varint,64009,opt,name=onlyone", + Filename: "gogo.proto", +} + +var E_Equal = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64013, + Name: "gogoproto.equal", + Tag: "varint,64013,opt,name=equal", + Filename: "gogo.proto", +} + +var E_Description = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64014, + Name: "gogoproto.description", + Tag: "varint,64014,opt,name=description", + Filename: "gogo.proto", +} + +var E_Testgen = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64015, + Name: "gogoproto.testgen", + Tag: "varint,64015,opt,name=testgen", + Filename: "gogo.proto", +} + +var E_Benchgen = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64016, + Name: "gogoproto.benchgen", + Tag: "varint,64016,opt,name=benchgen", + Filename: "gogo.proto", +} + +var E_Marshaler = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64017, + Name: "gogoproto.marshaler", + Tag: "varint,64017,opt,name=marshaler", + Filename: "gogo.proto", +} + +var E_Unmarshaler = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64018, + Name: "gogoproto.unmarshaler", + Tag: "varint,64018,opt,name=unmarshaler", + Filename: "gogo.proto", +} + +var E_StableMarshaler = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64019, + Name: "gogoproto.stable_marshaler", + Tag: "varint,64019,opt,name=stable_marshaler,json=stableMarshaler", + Filename: "gogo.proto", +} + +var E_Sizer = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64020, + Name: "gogoproto.sizer", + Tag: "varint,64020,opt,name=sizer", + Filename: "gogo.proto", +} + +var E_UnsafeMarshaler = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64023, + Name: "gogoproto.unsafe_marshaler", + Tag: "varint,64023,opt,name=unsafe_marshaler,json=unsafeMarshaler", + Filename: "gogo.proto", +} + +var E_UnsafeUnmarshaler = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64024, + Name: "gogoproto.unsafe_unmarshaler", + Tag: "varint,64024,opt,name=unsafe_unmarshaler,json=unsafeUnmarshaler", + Filename: "gogo.proto", +} + +var E_GoprotoExtensionsMap = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64025, + Name: "gogoproto.goproto_extensions_map", + Tag: "varint,64025,opt,name=goproto_extensions_map,json=goprotoExtensionsMap", + Filename: "gogo.proto", +} + +var E_GoprotoUnrecognized = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64026, + Name: "gogoproto.goproto_unrecognized", + Tag: "varint,64026,opt,name=goproto_unrecognized,json=goprotoUnrecognized", + Filename: "gogo.proto", +} + +var E_Protosizer = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64028, + Name: "gogoproto.protosizer", + Tag: "varint,64028,opt,name=protosizer", + Filename: "gogo.proto", +} + +var E_Compare = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64029, + Name: "gogoproto.compare", + Tag: "varint,64029,opt,name=compare", + Filename: "gogo.proto", +} + +var E_Typedecl = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64030, + Name: "gogoproto.typedecl", + Tag: "varint,64030,opt,name=typedecl", + Filename: "gogo.proto", +} + +var E_Nullable = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 65001, + Name: "gogoproto.nullable", + Tag: "varint,65001,opt,name=nullable", + Filename: "gogo.proto", +} + +var E_Embed = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 65002, + Name: "gogoproto.embed", + Tag: "varint,65002,opt,name=embed", + Filename: "gogo.proto", +} + +var E_Customtype = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65003, + Name: "gogoproto.customtype", + Tag: "bytes,65003,opt,name=customtype", + Filename: "gogo.proto", +} + +var E_Customname = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65004, + Name: "gogoproto.customname", + Tag: "bytes,65004,opt,name=customname", + Filename: "gogo.proto", +} + +var E_Jsontag = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65005, + Name: "gogoproto.jsontag", + Tag: "bytes,65005,opt,name=jsontag", + Filename: "gogo.proto", +} + +var E_Moretags = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65006, + Name: "gogoproto.moretags", + Tag: "bytes,65006,opt,name=moretags", + Filename: "gogo.proto", +} + +var E_Casttype = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65007, + Name: "gogoproto.casttype", + Tag: "bytes,65007,opt,name=casttype", + Filename: "gogo.proto", +} + +var E_Castkey = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65008, + Name: "gogoproto.castkey", + Tag: "bytes,65008,opt,name=castkey", + Filename: "gogo.proto", +} + +var E_Castvalue = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 65009, + Name: "gogoproto.castvalue", + Tag: "bytes,65009,opt,name=castvalue", + Filename: "gogo.proto", +} + +var E_Stdtime = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 65010, + Name: "gogoproto.stdtime", + Tag: "varint,65010,opt,name=stdtime", + Filename: "gogo.proto", +} + +var E_Stdduration = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 65011, + Name: "gogoproto.stdduration", + Tag: "varint,65011,opt,name=stdduration", + Filename: "gogo.proto", +} + +func init() { + proto.RegisterExtension(E_GoprotoEnumPrefix) + proto.RegisterExtension(E_GoprotoEnumStringer) + proto.RegisterExtension(E_EnumStringer) + proto.RegisterExtension(E_EnumCustomname) + proto.RegisterExtension(E_Enumdecl) + proto.RegisterExtension(E_EnumvalueCustomname) + proto.RegisterExtension(E_GoprotoGettersAll) + proto.RegisterExtension(E_GoprotoEnumPrefixAll) + proto.RegisterExtension(E_GoprotoStringerAll) + proto.RegisterExtension(E_VerboseEqualAll) + proto.RegisterExtension(E_FaceAll) + proto.RegisterExtension(E_GostringAll) + proto.RegisterExtension(E_PopulateAll) + proto.RegisterExtension(E_StringerAll) + proto.RegisterExtension(E_OnlyoneAll) + proto.RegisterExtension(E_EqualAll) + proto.RegisterExtension(E_DescriptionAll) + proto.RegisterExtension(E_TestgenAll) + proto.RegisterExtension(E_BenchgenAll) + proto.RegisterExtension(E_MarshalerAll) + proto.RegisterExtension(E_UnmarshalerAll) + proto.RegisterExtension(E_StableMarshalerAll) + proto.RegisterExtension(E_SizerAll) + proto.RegisterExtension(E_GoprotoEnumStringerAll) + proto.RegisterExtension(E_EnumStringerAll) + proto.RegisterExtension(E_UnsafeMarshalerAll) + proto.RegisterExtension(E_UnsafeUnmarshalerAll) + proto.RegisterExtension(E_GoprotoExtensionsMapAll) + proto.RegisterExtension(E_GoprotoUnrecognizedAll) + proto.RegisterExtension(E_GogoprotoImport) + proto.RegisterExtension(E_ProtosizerAll) + proto.RegisterExtension(E_CompareAll) + proto.RegisterExtension(E_TypedeclAll) + proto.RegisterExtension(E_EnumdeclAll) + proto.RegisterExtension(E_GoprotoGetters) + proto.RegisterExtension(E_GoprotoStringer) + proto.RegisterExtension(E_VerboseEqual) + proto.RegisterExtension(E_Face) + proto.RegisterExtension(E_Gostring) + proto.RegisterExtension(E_Populate) + proto.RegisterExtension(E_Stringer) + proto.RegisterExtension(E_Onlyone) + proto.RegisterExtension(E_Equal) + proto.RegisterExtension(E_Description) + proto.RegisterExtension(E_Testgen) + proto.RegisterExtension(E_Benchgen) + proto.RegisterExtension(E_Marshaler) + proto.RegisterExtension(E_Unmarshaler) + proto.RegisterExtension(E_StableMarshaler) + proto.RegisterExtension(E_Sizer) + proto.RegisterExtension(E_UnsafeMarshaler) + proto.RegisterExtension(E_UnsafeUnmarshaler) + proto.RegisterExtension(E_GoprotoExtensionsMap) + proto.RegisterExtension(E_GoprotoUnrecognized) + proto.RegisterExtension(E_Protosizer) + proto.RegisterExtension(E_Compare) + proto.RegisterExtension(E_Typedecl) + proto.RegisterExtension(E_Nullable) + proto.RegisterExtension(E_Embed) + proto.RegisterExtension(E_Customtype) + proto.RegisterExtension(E_Customname) + proto.RegisterExtension(E_Jsontag) + proto.RegisterExtension(E_Moretags) + proto.RegisterExtension(E_Casttype) + proto.RegisterExtension(E_Castkey) + proto.RegisterExtension(E_Castvalue) + proto.RegisterExtension(E_Stdtime) + proto.RegisterExtension(E_Stdduration) +} + +func init() { proto.RegisterFile("gogo.proto", fileDescriptorGogo) } + +var fileDescriptorGogo = []byte{ + // 1178 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x98, 0x4b, 0x6f, 0x1c, 0x45, + 0x10, 0x80, 0x85, 0x48, 0x64, 0x6f, 0xf9, 0x85, 0xd7, 0xc6, 0x84, 0x08, 0x44, 0x72, 0xe3, 0xe4, + 0x9c, 0x22, 0x94, 0xb6, 0x22, 0xcb, 0xb1, 0x1c, 0x2b, 0x08, 0x83, 0x65, 0xe2, 0x00, 0xe2, 0xb0, + 0x1a, 0xef, 0xb6, 0x27, 0x0b, 0x33, 0xd3, 0xc3, 0x74, 0x4f, 0x14, 0xe7, 0x86, 0xc2, 0x43, 0x08, + 0xf1, 0x46, 0x82, 0x84, 0x24, 0xc0, 0x81, 0xf7, 0x33, 0x3c, 0xaf, 0x5c, 0x78, 0x5c, 0xf9, 0x0f, + 0x5c, 0x00, 0xf3, 0xf6, 0xcd, 0x17, 0x54, 0x33, 0x55, 0xb3, 0xbd, 0xeb, 0x95, 0xba, 0xf7, 0x36, + 0xbb, 0xee, 0xef, 0xdb, 0x9a, 0xaa, 0xe9, 0xaa, 0x69, 0x03, 0x84, 0x2a, 0x54, 0xb3, 0x69, 0xa6, + 0x8c, 0xaa, 0xd7, 0xf0, 0xba, 0xb8, 0x3c, 0x78, 0x28, 0x54, 0x2a, 0x8c, 0xe4, 0x91, 0xe2, 0xd3, + 0x46, 0xbe, 0x79, 0xa4, 0x25, 0x75, 0x33, 0x6b, 0xa7, 0x46, 0x65, 0xe5, 0x62, 0x71, 0x2f, 0x4c, + 0xd1, 0xe2, 0x86, 0x4c, 0xf2, 0xb8, 0x91, 0x66, 0x72, 0xb3, 0x7d, 0xbe, 0x7e, 0xdb, 0x6c, 0x49, + 0xce, 0x32, 0x39, 0xbb, 0x94, 0xe4, 0xf1, 0x7d, 0xa9, 0x69, 0xab, 0x44, 0x1f, 0xb8, 0xfe, 0xcb, + 0x8d, 0x87, 0x6e, 0xb8, 0x73, 0x78, 0x6d, 0x92, 0x50, 0xfc, 0xdb, 0x6a, 0x01, 0x8a, 0x35, 0xb8, + 0xb9, 0xcb, 0xa7, 0x4d, 0xd6, 0x4e, 0x42, 0x99, 0x39, 0x8c, 0xdf, 0x93, 0x71, 0xca, 0x32, 0xde, + 0x4f, 0xa8, 0x58, 0x84, 0xb1, 0x41, 0x5c, 0x3f, 0x90, 0x6b, 0x54, 0xda, 0x92, 0x65, 0x98, 0x28, + 0x24, 0xcd, 0x5c, 0x1b, 0x15, 0x27, 0x41, 0x2c, 0x1d, 0x9a, 0x1f, 0x0b, 0x4d, 0x6d, 0x6d, 0x1c, + 0xb1, 0xc5, 0x8a, 0x12, 0x02, 0x86, 0xf1, 0x9b, 0x96, 0x6c, 0x46, 0x0e, 0xc3, 0x4f, 0x14, 0x48, + 0xb5, 0x5e, 0x9c, 0x81, 0x69, 0xbc, 0x3e, 0x17, 0x44, 0xb9, 0xb4, 0x23, 0x39, 0xdc, 0xd7, 0x73, + 0x06, 0x97, 0xb1, 0xec, 0xe7, 0x8b, 0xfb, 0x8a, 0x70, 0xa6, 0x2a, 0x81, 0x15, 0x93, 0x55, 0xc5, + 0x50, 0x1a, 0x23, 0x33, 0xdd, 0x08, 0xa2, 0x7e, 0xe1, 0x9d, 0x6c, 0x47, 0x95, 0xf1, 0xd2, 0x76, + 0x77, 0x15, 0x97, 0x4b, 0x72, 0x21, 0x8a, 0xc4, 0x3a, 0xdc, 0xd2, 0xe7, 0xa9, 0xf0, 0x70, 0x5e, + 0x26, 0xe7, 0xf4, 0x9e, 0x27, 0x03, 0xb5, 0xab, 0xc0, 0xdf, 0x57, 0xb5, 0xf4, 0x70, 0xbe, 0x41, + 0xce, 0x3a, 0xb1, 0x5c, 0x52, 0x34, 0xde, 0x0d, 0x93, 0xe7, 0x64, 0xb6, 0xa1, 0xb4, 0x6c, 0xc8, + 0xc7, 0xf2, 0x20, 0xf2, 0xd0, 0x5d, 0x21, 0xdd, 0x04, 0x81, 0x4b, 0xc8, 0xa1, 0xeb, 0x18, 0x0c, + 0x6f, 0x06, 0x4d, 0xe9, 0xa1, 0xb8, 0x4a, 0x8a, 0x21, 0x5c, 0x8f, 0xe8, 0x02, 0x8c, 0x86, 0xaa, + 0xbc, 0x25, 0x0f, 0xfc, 0x1a, 0xe1, 0x23, 0xcc, 0x90, 0x22, 0x55, 0x69, 0x1e, 0x05, 0xc6, 0x27, + 0x82, 0x37, 0x59, 0xc1, 0x0c, 0x29, 0x06, 0x48, 0xeb, 0x5b, 0xac, 0xd0, 0x56, 0x3e, 0xe7, 0x61, + 0x44, 0x25, 0xd1, 0x96, 0x4a, 0x7c, 0x82, 0x78, 0x9b, 0x0c, 0x40, 0x08, 0x0a, 0xe6, 0xa0, 0xe6, + 0x5b, 0x88, 0x77, 0xb6, 0x79, 0x7b, 0x70, 0x05, 0x96, 0x61, 0x82, 0x1b, 0x54, 0x5b, 0x25, 0x1e, + 0x8a, 0x77, 0x49, 0x31, 0x6e, 0x61, 0x74, 0x1b, 0x46, 0x6a, 0x13, 0x4a, 0x1f, 0xc9, 0x7b, 0x7c, + 0x1b, 0x84, 0x50, 0x2a, 0x37, 0x64, 0xd2, 0x3c, 0xeb, 0x67, 0x78, 0x9f, 0x53, 0xc9, 0x0c, 0x2a, + 0x16, 0x61, 0x2c, 0x0e, 0x32, 0x7d, 0x36, 0x88, 0xbc, 0xca, 0xf1, 0x01, 0x39, 0x46, 0x2b, 0x88, + 0x32, 0x92, 0x27, 0x83, 0x68, 0x3e, 0xe4, 0x8c, 0x58, 0x18, 0x6d, 0x3d, 0x6d, 0x82, 0x8d, 0x48, + 0x36, 0x06, 0xb1, 0x7d, 0xc4, 0x5b, 0xaf, 0x64, 0x57, 0x6c, 0xe3, 0x1c, 0xd4, 0x74, 0xfb, 0x82, + 0x97, 0xe6, 0x63, 0xae, 0x74, 0x01, 0x20, 0xfc, 0x10, 0xdc, 0xda, 0x77, 0x4c, 0x78, 0xc8, 0x3e, + 0x21, 0xd9, 0x4c, 0x9f, 0x51, 0x41, 0x2d, 0x61, 0x50, 0xe5, 0xa7, 0xdc, 0x12, 0x64, 0x8f, 0x6b, + 0x15, 0xa6, 0xf3, 0x44, 0x07, 0x9b, 0x83, 0x65, 0xed, 0x33, 0xce, 0x5a, 0xc9, 0x76, 0x65, 0xed, + 0x34, 0xcc, 0x90, 0x71, 0xb0, 0xba, 0x7e, 0xce, 0x8d, 0xb5, 0xa4, 0xd7, 0xbb, 0xab, 0xfb, 0x30, + 0x1c, 0xac, 0xd2, 0x79, 0xde, 0xc8, 0x44, 0x23, 0xd3, 0x88, 0x83, 0xd4, 0xc3, 0x7c, 0x9d, 0xcc, + 0xdc, 0xf1, 0x97, 0x2a, 0xc1, 0x4a, 0x90, 0xa2, 0xfc, 0x41, 0x38, 0xc0, 0xf2, 0x3c, 0xc9, 0x64, + 0x53, 0x85, 0x49, 0xfb, 0x82, 0x6c, 0x79, 0xa8, 0xbf, 0xe8, 0x29, 0xd5, 0xba, 0x85, 0xa3, 0xf9, + 0x14, 0xdc, 0x54, 0xbd, 0xab, 0x34, 0xda, 0x71, 0xaa, 0x32, 0xe3, 0x30, 0x7e, 0xc9, 0x95, 0xaa, + 0xb8, 0x53, 0x05, 0x26, 0x96, 0x60, 0xbc, 0xf8, 0xe8, 0xfb, 0x48, 0x7e, 0x45, 0xa2, 0xb1, 0x0e, + 0x45, 0x8d, 0xa3, 0xa9, 0xe2, 0x34, 0xc8, 0x7c, 0xfa, 0xdf, 0xd7, 0xdc, 0x38, 0x08, 0xa1, 0xc6, + 0x61, 0xb6, 0x52, 0x89, 0xd3, 0xde, 0xc3, 0xf0, 0x0d, 0x37, 0x0e, 0x66, 0x48, 0xc1, 0x2f, 0x0c, + 0x1e, 0x8a, 0x6f, 0x59, 0xc1, 0x4c, 0xb9, 0x07, 0x26, 0x7a, 0xde, 0x07, 0xea, 0x77, 0xec, 0xb1, + 0xac, 0x48, 0xad, 0x83, 0xb0, 0x12, 0x3d, 0xbe, 0x43, 0x9d, 0xa3, 0xfb, 0x75, 0x40, 0xdc, 0x83, + 0x45, 0xea, 0x1e, 0xda, 0x6e, 0xd9, 0xc5, 0x9d, 0xaa, 0x4e, 0x5d, 0x33, 0x5b, 0x9c, 0x84, 0xb1, + 0xae, 0x81, 0xed, 0x56, 0x3d, 0x41, 0xaa, 0x51, 0x7b, 0x5e, 0x8b, 0xa3, 0xb0, 0x0f, 0x87, 0xaf, + 0x1b, 0x7f, 0x92, 0xf0, 0x62, 0xb9, 0x38, 0x0e, 0xc3, 0x3c, 0x74, 0xdd, 0xe8, 0x53, 0x84, 0x56, + 0x08, 0xe2, 0x3c, 0x70, 0xdd, 0xf8, 0xd3, 0x8c, 0x33, 0x82, 0xb8, 0x7f, 0x0a, 0xbf, 0x7b, 0x76, + 0x1f, 0x35, 0x4d, 0xce, 0xdd, 0x1c, 0x0c, 0xd1, 0xa4, 0x75, 0xd3, 0xcf, 0xd0, 0x8f, 0x33, 0x21, + 0xee, 0x82, 0xfd, 0x9e, 0x09, 0x7f, 0x8e, 0xd0, 0x72, 0xbd, 0x58, 0x84, 0x11, 0x6b, 0xba, 0xba, + 0xf1, 0xe7, 0x09, 0xb7, 0x29, 0x0c, 0x9d, 0xa6, 0xab, 0x5b, 0xf0, 0x02, 0x87, 0x4e, 0x04, 0xa6, + 0x8d, 0x07, 0xab, 0x9b, 0x7e, 0x91, 0xb3, 0xce, 0x88, 0x98, 0x87, 0x5a, 0xd5, 0x2c, 0xdd, 0xfc, + 0x4b, 0xc4, 0x77, 0x18, 0xcc, 0x80, 0xd5, 0xac, 0xdd, 0x8a, 0x97, 0x39, 0x03, 0x16, 0x85, 0xdb, + 0xa8, 0x77, 0x00, 0xbb, 0x4d, 0xaf, 0xf0, 0x36, 0xea, 0x99, 0xbf, 0x58, 0xcd, 0xa2, 0x67, 0xb9, + 0x15, 0xaf, 0x72, 0x35, 0x8b, 0xf5, 0x18, 0x46, 0xef, 0x44, 0x73, 0x3b, 0x5e, 0xe3, 0x30, 0x7a, + 0x06, 0x9a, 0x58, 0x85, 0xfa, 0xde, 0x69, 0xe6, 0xf6, 0xbd, 0x4e, 0xbe, 0xc9, 0x3d, 0xc3, 0x4c, + 0x3c, 0x00, 0x33, 0xfd, 0x27, 0x99, 0xdb, 0x7a, 0x69, 0xa7, 0xe7, 0xec, 0x61, 0x0f, 0x32, 0x71, + 0xba, 0x73, 0xf6, 0xb0, 0xa7, 0x98, 0x5b, 0x7b, 0x79, 0xa7, 0xfb, 0x68, 0x6a, 0x0f, 0x31, 0xb1, + 0x00, 0xd0, 0x19, 0x20, 0x6e, 0xd7, 0x15, 0x72, 0x59, 0x10, 0x6e, 0x0d, 0x9a, 0x1f, 0x6e, 0xfe, + 0x2a, 0x6f, 0x0d, 0x22, 0x70, 0x6b, 0xf0, 0xe8, 0x70, 0xd3, 0xd7, 0x78, 0x6b, 0x30, 0x22, 0xe6, + 0x60, 0x38, 0xc9, 0xa3, 0x08, 0x9f, 0xad, 0xfa, 0xed, 0x7d, 0xc6, 0x8c, 0x8c, 0x5a, 0x0c, 0xff, + 0xba, 0x4b, 0x30, 0x03, 0xe2, 0x28, 0xec, 0x97, 0xf1, 0x86, 0x6c, 0xb9, 0xc8, 0xdf, 0x76, 0xb9, + 0x9f, 0xe0, 0x6a, 0x31, 0x0f, 0x50, 0x9e, 0x7c, 0x31, 0x0a, 0x17, 0xfb, 0xfb, 0x6e, 0x79, 0x08, + 0xb7, 0x90, 0x8e, 0xa0, 0x38, 0x3a, 0x3b, 0x04, 0xdb, 0xdd, 0x82, 0xe2, 0xb4, 0x7c, 0x0c, 0x86, + 0x1e, 0xd1, 0x2a, 0x31, 0x41, 0xe8, 0xa2, 0xff, 0x20, 0x9a, 0xd7, 0x63, 0xc2, 0x62, 0x95, 0x49, + 0x13, 0x84, 0xda, 0xc5, 0xfe, 0x49, 0x6c, 0x05, 0x20, 0xdc, 0x0c, 0xb4, 0xf1, 0xb9, 0xef, 0xbf, + 0x18, 0x66, 0x00, 0x83, 0xc6, 0xeb, 0x47, 0xe5, 0x96, 0x8b, 0xfd, 0x9b, 0x83, 0xa6, 0xf5, 0xe2, + 0x38, 0xd4, 0xf0, 0xb2, 0xf8, 0xa7, 0x81, 0x0b, 0xfe, 0x87, 0xe0, 0x0e, 0x81, 0xbf, 0xac, 0x4d, + 0xcb, 0xb4, 0xdd, 0xc9, 0xfe, 0x97, 0x2a, 0xcd, 0xeb, 0xc5, 0x02, 0x8c, 0x68, 0xd3, 0x6a, 0xe5, + 0x59, 0x50, 0xcc, 0x0e, 0x07, 0xfe, 0xdf, 0x6e, 0x75, 0x22, 0xad, 0x98, 0x13, 0x87, 0x61, 0xaa, + 0xa9, 0xe2, 0x5e, 0xf0, 0x04, 0x2c, 0xab, 0x65, 0xb5, 0x5a, 0xec, 0xa2, 0xff, 0x03, 0x00, 0x00, + 0xff, 0xff, 0x06, 0x21, 0xec, 0x88, 0xfd, 0x12, 0x00, 0x00, +} diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden new file mode 100644 index 0000000..f6502e4 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden @@ -0,0 +1,45 @@ +// Code generated by protoc-gen-go. +// source: gogo.proto +// DO NOT EDIT! + +package gogoproto + +import proto "github.com/gogo/protobuf/proto" +import json "encoding/json" +import math "math" +import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + +// Reference proto, json, and math imports to suppress error if they are not otherwise used. +var _ = proto.Marshal +var _ = &json.SyntaxError{} +var _ = math.Inf + +var E_Nullable = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 51235, + Name: "gogoproto.nullable", + Tag: "varint,51235,opt,name=nullable", +} + +var E_Embed = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 51236, + Name: "gogoproto.embed", + Tag: "varint,51236,opt,name=embed", +} + +var E_Customtype = &proto.ExtensionDesc{ + ExtendedType: (*google_protobuf.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 51237, + Name: "gogoproto.customtype", + Tag: "bytes,51237,opt,name=customtype", +} + +func init() { + proto.RegisterExtension(E_Nullable) + proto.RegisterExtension(E_Embed) + proto.RegisterExtension(E_Customtype) +} diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto b/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto new file mode 100644 index 0000000..1895252 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto @@ -0,0 +1,130 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; +package gogoproto; + +import "google/protobuf/descriptor.proto"; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "GoGoProtos"; + +extend google.protobuf.EnumOptions { + optional bool goproto_enum_prefix = 62001; + optional bool goproto_enum_stringer = 62021; + optional bool enum_stringer = 62022; + optional string enum_customname = 62023; + optional bool enumdecl = 62024; +} + +extend google.protobuf.EnumValueOptions { + optional string enumvalue_customname = 66001; +} + +extend google.protobuf.FileOptions { + optional bool goproto_getters_all = 63001; + optional bool goproto_enum_prefix_all = 63002; + optional bool goproto_stringer_all = 63003; + optional bool verbose_equal_all = 63004; + optional bool face_all = 63005; + optional bool gostring_all = 63006; + optional bool populate_all = 63007; + optional bool stringer_all = 63008; + optional bool onlyone_all = 63009; + + optional bool equal_all = 63013; + optional bool description_all = 63014; + optional bool testgen_all = 63015; + optional bool benchgen_all = 63016; + optional bool marshaler_all = 63017; + optional bool unmarshaler_all = 63018; + optional bool stable_marshaler_all = 63019; + + optional bool sizer_all = 63020; + + optional bool goproto_enum_stringer_all = 63021; + optional bool enum_stringer_all = 63022; + + optional bool unsafe_marshaler_all = 63023; + optional bool unsafe_unmarshaler_all = 63024; + + optional bool goproto_extensions_map_all = 63025; + optional bool goproto_unrecognized_all = 63026; + optional bool gogoproto_import = 63027; + optional bool protosizer_all = 63028; + optional bool compare_all = 63029; + optional bool typedecl_all = 63030; + optional bool enumdecl_all = 63031; +} + +extend google.protobuf.MessageOptions { + optional bool goproto_getters = 64001; + optional bool goproto_stringer = 64003; + optional bool verbose_equal = 64004; + optional bool face = 64005; + optional bool gostring = 64006; + optional bool populate = 64007; + optional bool stringer = 67008; + optional bool onlyone = 64009; + + optional bool equal = 64013; + optional bool description = 64014; + optional bool testgen = 64015; + optional bool benchgen = 64016; + optional bool marshaler = 64017; + optional bool unmarshaler = 64018; + optional bool stable_marshaler = 64019; + + optional bool sizer = 64020; + + optional bool unsafe_marshaler = 64023; + optional bool unsafe_unmarshaler = 64024; + + optional bool goproto_extensions_map = 64025; + optional bool goproto_unrecognized = 64026; + + optional bool protosizer = 64028; + optional bool compare = 64029; + + optional bool typedecl = 64030; +} + +extend google.protobuf.FieldOptions { + optional bool nullable = 65001; + optional bool embed = 65002; + optional string customtype = 65003; + optional string customname = 65004; + optional string jsontag = 65005; + optional string moretags = 65006; + optional string casttype = 65007; + optional string castkey = 65008; + optional string castvalue = 65009; + + optional bool stdtime = 65010; + optional bool stdduration = 65011; +} diff --git a/vendor/github.com/gogo/protobuf/gogoproto/helper.go b/vendor/github.com/gogo/protobuf/gogoproto/helper.go new file mode 100644 index 0000000..f47708b --- /dev/null +++ b/vendor/github.com/gogo/protobuf/gogoproto/helper.go @@ -0,0 +1,353 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package gogoproto + +import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" +import proto "github.com/gogo/protobuf/proto" + +func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Embed, false) +} + +func IsNullable(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Nullable, true) +} + +func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Stdtime, false) +} + +func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool { + return proto.GetBoolExtension(field.Options, E_Stdduration, false) +} + +func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool { + nullable := IsNullable(field) + if field.IsMessage() || IsCustomType(field) { + return nullable + } + if proto3 { + return false + } + return nullable || *field.Type == google_protobuf.FieldDescriptorProto_TYPE_BYTES +} + +func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool { + typ := GetCustomType(field) + if len(typ) > 0 { + return true + } + return false +} + +func IsCastType(field *google_protobuf.FieldDescriptorProto) bool { + typ := GetCastType(field) + if len(typ) > 0 { + return true + } + return false +} + +func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool { + typ := GetCastKey(field) + if len(typ) > 0 { + return true + } + return false +} + +func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool { + typ := GetCastValue(field) + if len(typ) > 0 { + return true + } + return false +} + +func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { + return proto.GetBoolExtension(enum.Options, E_Enumdecl, proto.GetBoolExtension(file.Options, E_EnumdeclAll, true)) +} + +func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Typedecl, proto.GetBoolExtension(file.Options, E_TypedeclAll, true)) +} + +func GetCustomType(field *google_protobuf.FieldDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Customtype) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func GetCastType(field *google_protobuf.FieldDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Casttype) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func GetCastKey(field *google_protobuf.FieldDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Castkey) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func GetCastValue(field *google_protobuf.FieldDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Castvalue) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool { + name := GetCustomName(field) + if len(name) > 0 { + return true + } + return false +} + +func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool { + name := GetEnumCustomName(field) + if len(name) > 0 { + return true + } + return false +} + +func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool { + name := GetEnumValueCustomName(field) + if len(name) > 0 { + return true + } + return false +} + +func GetCustomName(field *google_protobuf.FieldDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Customname) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_EnumCustomname) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string { + if field == nil { + return "" + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_EnumvalueCustomname) + if err == nil && v.(*string) != nil { + return *(v.(*string)) + } + } + return "" +} + +func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string { + if field == nil { + return nil + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Jsontag) + if err == nil && v.(*string) != nil { + return (v.(*string)) + } + } + return nil +} + +func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string { + if field == nil { + return nil + } + if field.Options != nil { + v, err := proto.GetExtension(field.Options, E_Moretags) + if err == nil && v.(*string) != nil { + return (v.(*string)) + } + } + return nil +} + +type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool + +func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { + return proto.GetBoolExtension(enum.Options, E_GoprotoEnumPrefix, proto.GetBoolExtension(file.Options, E_GoprotoEnumPrefixAll, true)) +} + +func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_GoprotoStringer, proto.GetBoolExtension(file.Options, E_GoprotoStringerAll, true)) +} + +func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_GoprotoGetters, proto.GetBoolExtension(file.Options, E_GoprotoGettersAll, true)) +} + +func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Onlyone, proto.GetBoolExtension(file.Options, E_OnlyoneAll, false)) +} + +func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Gostring, proto.GetBoolExtension(file.Options, E_GostringAll, false)) +} + +func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Equal, proto.GetBoolExtension(file.Options, E_EqualAll, false)) +} + +func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_VerboseEqual, proto.GetBoolExtension(file.Options, E_VerboseEqualAll, false)) +} + +func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Stringer, proto.GetBoolExtension(file.Options, E_StringerAll, false)) +} + +func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Face, proto.GetBoolExtension(file.Options, E_FaceAll, false)) +} + +func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Description, proto.GetBoolExtension(file.Options, E_DescriptionAll, false)) +} + +func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Populate, proto.GetBoolExtension(file.Options, E_PopulateAll, false)) +} + +func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Testgen, proto.GetBoolExtension(file.Options, E_TestgenAll, false)) +} + +func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Benchgen, proto.GetBoolExtension(file.Options, E_BenchgenAll, false)) +} + +func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Marshaler, proto.GetBoolExtension(file.Options, E_MarshalerAll, false)) +} + +func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Unmarshaler, proto.GetBoolExtension(file.Options, E_UnmarshalerAll, false)) +} + +func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_StableMarshaler, proto.GetBoolExtension(file.Options, E_StableMarshalerAll, false)) +} + +func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Sizer, proto.GetBoolExtension(file.Options, E_SizerAll, false)) +} + +func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Protosizer, proto.GetBoolExtension(file.Options, E_ProtosizerAll, false)) +} + +func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { + return proto.GetBoolExtension(enum.Options, E_GoprotoEnumStringer, proto.GetBoolExtension(file.Options, E_GoprotoEnumStringerAll, true)) +} + +func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { + return proto.GetBoolExtension(enum.Options, E_EnumStringer, proto.GetBoolExtension(file.Options, E_EnumStringerAll, false)) +} + +func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_UnsafeMarshaler, proto.GetBoolExtension(file.Options, E_UnsafeMarshalerAll, false)) +} + +func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_UnsafeUnmarshaler, proto.GetBoolExtension(file.Options, E_UnsafeUnmarshalerAll, false)) +} + +func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_GoprotoExtensionsMap, proto.GetBoolExtension(file.Options, E_GoprotoExtensionsMapAll, true)) +} + +func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + if IsProto3(file) { + return false + } + return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true)) +} + +func IsProto3(file *google_protobuf.FileDescriptorProto) bool { + return file.GetSyntax() == "proto3" +} + +func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool { + return proto.GetBoolExtension(file.Options, E_GogoprotoImport, true) +} + +func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { + return proto.GetBoolExtension(message.Options, E_Compare, proto.GetBoolExtension(file.Options, E_CompareAll, false)) +} diff --git a/vendor/github.com/gogo/protobuf/proto/Makefile b/vendor/github.com/gogo/protobuf/proto/Makefile new file mode 100644 index 0000000..41c7175 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/Makefile @@ -0,0 +1,43 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +install: + go install + +test: install generate-test-pbs + go test + + +generate-test-pbs: + make install + make -C testdata + protoc-min-version --version="3.0.0" --proto_path=.:../../../../:../protobuf --gogo_out=Mtestdata/test.proto=github.com/gogo/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/gogo/protobuf/types:. proto3_proto/proto3.proto + make diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone.go b/vendor/github.com/gogo/protobuf/proto/clone.go similarity index 77% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone.go rename to vendor/github.com/gogo/protobuf/proto/clone.go index ba3e94b..5d4cba4 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone.go +++ b/vendor/github.com/gogo/protobuf/proto/clone.go @@ -30,7 +30,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Protocol buffer deep copy and merge. -// TODO: MessageSet and RawMessage. +// TODO: RawMessage. package proto @@ -75,22 +75,29 @@ func Merge(dst, src Message) { } func mergeStruct(out, in reflect.Value) { + sprop := GetProperties(in.Type()) for i := 0; i < in.NumField(); i++ { f := in.Type().Field(i) if strings.HasPrefix(f.Name, "XXX_") { continue } - mergeAny(out.Field(i), in.Field(i)) + mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) } - if emIn, ok := in.Addr().Interface().(extensionsMap); ok { - emOut := out.Addr().Interface().(extensionsMap) - mergeExtension(emOut.ExtensionMap(), emIn.ExtensionMap()) - } else if emIn, ok := in.Addr().Interface().(extensionsBytes); ok { + if emIn, ok := in.Addr().Interface().(extensionsBytes); ok { emOut := out.Addr().Interface().(extensionsBytes) bIn := emIn.GetExtensions() bOut := emOut.GetExtensions() *bOut = append(*bOut, *bIn...) + } else if emIn, ok := extendable(in.Addr().Interface()); ok { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } } uf := in.FieldByName("XXX_unrecognized") @@ -103,7 +110,10 @@ func mergeStruct(out, in reflect.Value) { } } -func mergeAny(out, in reflect.Value) { +// mergeAny performs a merge between two values of the same type. +// viaPtr indicates whether the values were indirected through a pointer (implying proto2). +// prop is set if this is a struct field (it may be nil). +func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { if in.Type() == protoMessageType { if !in.IsNil() { if out.IsNil() { @@ -117,7 +127,21 @@ func mergeAny(out, in reflect.Value) { switch in.Kind() { case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64: + if !viaPtr && isProto3Zero(in) { + return + } out.Set(in) + case reflect.Interface: + // Probably a oneof field; copy non-nil values. + if in.IsNil() { + return + } + // Allocate destination if it is not set, or set to a different type. + // Otherwise we will merge as normal. + if out.IsNil() || out.Elem().Type() != in.Elem().Type() { + out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) + } + mergeAny(out.Elem(), in.Elem(), false, nil) case reflect.Map: if in.Len() == 0 { return @@ -132,7 +156,7 @@ func mergeAny(out, in reflect.Value) { switch elemKind { case reflect.Ptr: val = reflect.New(in.Type().Elem().Elem()) - mergeAny(val, in.MapIndex(key)) + mergeAny(val, in.MapIndex(key), false, nil) case reflect.Slice: val = in.MapIndex(key) val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) @@ -148,13 +172,21 @@ func mergeAny(out, in reflect.Value) { if out.IsNil() { out.Set(reflect.New(in.Elem().Type())) } - mergeAny(out.Elem(), in.Elem()) + mergeAny(out.Elem(), in.Elem(), true, nil) case reflect.Slice: if in.IsNil() { return } if in.Type().Elem().Kind() == reflect.Uint8 { // []byte is a scalar bytes field, not a repeated field. + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value, and should not + // be merged. + if prop != nil && prop.proto3 && in.Len() == 0 { + return + } + // Make a deep copy. // Append to []byte{} instead of []byte(nil) so that we never end up // with a nil result. @@ -172,7 +204,7 @@ func mergeAny(out, in reflect.Value) { default: for i := 0; i < n; i++ { x := reflect.Indirect(reflect.New(in.Type().Elem())) - mergeAny(x, in.Index(i)) + mergeAny(x, in.Index(i), false, nil) out.Set(reflect.Append(out, x)) } } @@ -189,7 +221,7 @@ func mergeExtension(out, in map[int32]Extension) { eOut := Extension{desc: eIn.desc} if eIn.value != nil { v := reflect.New(reflect.TypeOf(eIn.value)).Elem() - mergeAny(v, reflect.ValueOf(eIn.value)) + mergeAny(v, reflect.ValueOf(eIn.value), false, nil) eOut.value = v.Interface() } if eIn.enc != nil { diff --git a/vendor/github.com/gogo/protobuf/proto/decode.go b/vendor/github.com/gogo/protobuf/proto/decode.go new file mode 100644 index 0000000..737f273 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/decode.go @@ -0,0 +1,978 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for decoding protocol buffer data to construct in-memory representations. + */ + +import ( + "errors" + "fmt" + "io" + "os" + "reflect" +) + +// errOverflow is returned when an integer is too large to be represented. +var errOverflow = errors.New("proto: integer overflow") + +// ErrInternalBadWireType is returned by generated code when an incorrect +// wire type is encountered. It does not get returned to user code. +var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") + +// The fundamental decoders that interpret bytes on the wire. +// Those that take integer types all return uint64 and are +// therefore of type valueDecoder. + +// DecodeVarint reads a varint-encoded integer from the slice. +// It returns the integer and the number of bytes consumed, or +// zero if there is not enough. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func DecodeVarint(buf []byte) (x uint64, n int) { + for shift := uint(0); shift < 64; shift += 7 { + if n >= len(buf) { + return 0, 0 + } + b := uint64(buf[n]) + n++ + x |= (b & 0x7F) << shift + if (b & 0x80) == 0 { + return x, n + } + } + + // The number is too large to represent in a 64-bit value. + return 0, 0 +} + +func (p *Buffer) decodeVarintSlow() (x uint64, err error) { + i := p.index + l := len(p.buf) + + for shift := uint(0); shift < 64; shift += 7 { + if i >= l { + err = io.ErrUnexpectedEOF + return + } + b := p.buf[i] + i++ + x |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + p.index = i + return + } + } + + // The number is too large to represent in a 64-bit value. + err = errOverflow + return +} + +// DecodeVarint reads a varint-encoded integer from the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) DecodeVarint() (x uint64, err error) { + i := p.index + buf := p.buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + p.index++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return p.decodeVarintSlow() + } + + var b uint64 + // we already checked the first byte + x = uint64(buf[i]) - 0x80 + i++ + + b = uint64(buf[i]) + i++ + x += b << 7 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 7 + + b = uint64(buf[i]) + i++ + x += b << 14 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 14 + + b = uint64(buf[i]) + i++ + x += b << 21 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 21 + + b = uint64(buf[i]) + i++ + x += b << 28 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 28 + + b = uint64(buf[i]) + i++ + x += b << 35 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 35 + + b = uint64(buf[i]) + i++ + x += b << 42 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 42 + + b = uint64(buf[i]) + i++ + x += b << 49 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 49 + + b = uint64(buf[i]) + i++ + x += b << 56 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 56 + + b = uint64(buf[i]) + i++ + x += b << 63 + if b&0x80 == 0 { + goto done + } + // x -= 0x80 << 63 // Always zero. + + return 0, errOverflow + +done: + p.index = i + return x, nil +} + +// DecodeFixed64 reads a 64-bit integer from the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) DecodeFixed64() (x uint64, err error) { + // x, err already 0 + i := p.index + 8 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-8]) + x |= uint64(p.buf[i-7]) << 8 + x |= uint64(p.buf[i-6]) << 16 + x |= uint64(p.buf[i-5]) << 24 + x |= uint64(p.buf[i-4]) << 32 + x |= uint64(p.buf[i-3]) << 40 + x |= uint64(p.buf[i-2]) << 48 + x |= uint64(p.buf[i-1]) << 56 + return +} + +// DecodeFixed32 reads a 32-bit integer from the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) DecodeFixed32() (x uint64, err error) { + // x, err already 0 + i := p.index + 4 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-4]) + x |= uint64(p.buf[i-3]) << 8 + x |= uint64(p.buf[i-2]) << 16 + x |= uint64(p.buf[i-1]) << 24 + return +} + +// DecodeZigzag64 reads a zigzag-encoded 64-bit integer +// from the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) DecodeZigzag64() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) + return +} + +// DecodeZigzag32 reads a zigzag-encoded 32-bit integer +// from the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) DecodeZigzag32() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) + return +} + +// These are not ValueDecoders: they produce an array of bytes or a string. +// bytes, embedded messages + +// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { + n, err := p.DecodeVarint() + if err != nil { + return nil, err + } + + nb := int(n) + if nb < 0 { + return nil, fmt.Errorf("proto: bad byte length %d", nb) + } + end := p.index + nb + if end < p.index || end > len(p.buf) { + return nil, io.ErrUnexpectedEOF + } + + if !alloc { + // todo: check if can get more uses of alloc=false + buf = p.buf[p.index:end] + p.index += nb + return + } + + buf = make([]byte, nb) + copy(buf, p.buf[p.index:]) + p.index += nb + return +} + +// DecodeStringBytes reads an encoded string from the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) DecodeStringBytes() (s string, err error) { + buf, err := p.DecodeRawBytes(false) + if err != nil { + return + } + return string(buf), nil +} + +// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. +// If the protocol buffer has extensions, and the field matches, add it as an extension. +// Otherwise, if the XXX_unrecognized field exists, append the skipped data there. +func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error { + oi := o.index + + err := o.skip(t, tag, wire) + if err != nil { + return err + } + + if !unrecField.IsValid() { + return nil + } + + ptr := structPointer_Bytes(base, unrecField) + + // Add the skipped field to struct field + obuf := o.buf + + o.buf = *ptr + o.EncodeVarint(uint64(tag<<3 | wire)) + *ptr = append(o.buf, obuf[oi:o.index]...) + + o.buf = obuf + + return nil +} + +// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. +func (o *Buffer) skip(t reflect.Type, tag, wire int) error { + + var u uint64 + var err error + + switch wire { + case WireVarint: + _, err = o.DecodeVarint() + case WireFixed64: + _, err = o.DecodeFixed64() + case WireBytes: + _, err = o.DecodeRawBytes(false) + case WireFixed32: + _, err = o.DecodeFixed32() + case WireStartGroup: + for { + u, err = o.DecodeVarint() + if err != nil { + break + } + fwire := int(u & 0x7) + if fwire == WireEndGroup { + break + } + ftag := int(u >> 3) + err = o.skip(t, ftag, fwire) + if err != nil { + break + } + } + default: + err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t) + } + return err +} + +// Unmarshaler is the interface representing objects that can +// unmarshal themselves. The method should reset the receiver before +// decoding starts. The argument points to data that may be +// overwritten, so implementations should not keep references to the +// buffer. +type Unmarshaler interface { + Unmarshal([]byte) error +} + +// Unmarshal parses the protocol buffer representation in buf and places the +// decoded result in pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// Unmarshal resets pb before starting to unmarshal, so any +// existing data in pb is always removed. Use UnmarshalMerge +// to preserve and append to existing data. +func Unmarshal(buf []byte, pb Message) error { + pb.Reset() + return UnmarshalMerge(buf, pb) +} + +// UnmarshalMerge parses the protocol buffer representation in buf and +// writes the decoded result to pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// UnmarshalMerge merges into existing data in pb. +// Most code should use Unmarshal instead. +func UnmarshalMerge(buf []byte, pb Message) error { + // If the object can unmarshal itself, let it. + if u, ok := pb.(Unmarshaler); ok { + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// DecodeMessage reads a count-delimited message from the Buffer. +func (p *Buffer) DecodeMessage(pb Message) error { + enc, err := p.DecodeRawBytes(false) + if err != nil { + return err + } + return NewBuffer(enc).Unmarshal(pb) +} + +// DecodeGroup reads a tag-delimited group from the Buffer. +func (p *Buffer) DecodeGroup(pb Message) error { + typ, base, err := getbase(pb) + if err != nil { + return err + } + return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base) +} + +// Unmarshal parses the protocol buffer representation in the +// Buffer and places the decoded result in pb. If the struct +// underlying pb does not match the data in the buffer, the results can be +// unpredictable. +// +// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. +func (p *Buffer) Unmarshal(pb Message) error { + // If the object can unmarshal itself, let it. + if u, ok := pb.(Unmarshaler); ok { + err := u.Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + + typ, base, err := getbase(pb) + if err != nil { + return err + } + + err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base) + + if collectStats { + stats.Decode++ + } + + return err +} + +// unmarshalType does the work of unmarshaling a structure. +func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error { + var state errorState + required, reqFields := prop.reqCount, uint64(0) + + var err error + for err == nil && o.index < len(o.buf) { + oi := o.index + var u uint64 + u, err = o.DecodeVarint() + if err != nil { + break + } + wire := int(u & 0x7) + if wire == WireEndGroup { + if is_group { + if required > 0 { + // Not enough information to determine the exact field. + // (See below.) + return &RequiredNotSetError{"{Unknown}"} + } + return nil // input is satisfied + } + return fmt.Errorf("proto: %s: wiretype end group for non-group", st) + } + tag := int(u >> 3) + if tag <= 0 { + return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire) + } + fieldnum, ok := prop.decoderTags.get(tag) + if !ok { + // Maybe it's an extension? + if prop.extendable { + if e, eok := structPointer_Interface(base, st).(extensionsBytes); eok { + if isExtensionField(e, int32(tag)) { + if err = o.skip(st, tag, wire); err == nil { + ext := e.GetExtensions() + *ext = append(*ext, o.buf[oi:o.index]...) + } + continue + } + } else if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) { + if err = o.skip(st, tag, wire); err == nil { + extmap := e.extensionsWrite() + ext := extmap[int32(tag)] // may be missing + ext.enc = append(ext.enc, o.buf[oi:o.index]...) + extmap[int32(tag)] = ext + } + continue + } + } + // Maybe it's a oneof? + if prop.oneofUnmarshaler != nil { + m := structPointer_Interface(base, st).(Message) + // First return value indicates whether tag is a oneof field. + ok, err = prop.oneofUnmarshaler(m, tag, wire, o) + if err == ErrInternalBadWireType { + // Map the error to something more descriptive. + // Do the formatting here to save generated code space. + err = fmt.Errorf("bad wiretype for oneof field in %T", m) + } + if ok { + continue + } + } + err = o.skipAndSave(st, tag, wire, base, prop.unrecField) + continue + } + p := prop.Prop[fieldnum] + + if p.dec == nil { + fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name) + continue + } + dec := p.dec + if wire != WireStartGroup && wire != p.WireType { + if wire == WireBytes && p.packedDec != nil { + // a packable field + dec = p.packedDec + } else { + err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType) + continue + } + } + decErr := dec(o, p, base) + if decErr != nil && !state.shouldContinue(decErr, p) { + err = decErr + } + if err == nil && p.Required { + // Successfully decoded a required field. + if tag <= 64 { + // use bitmap for fields 1-64 to catch field reuse. + var mask uint64 = 1 << uint64(tag-1) + if reqFields&mask == 0 { + // new required field + reqFields |= mask + required-- + } + } else { + // This is imprecise. It can be fooled by a required field + // with a tag > 64 that is encoded twice; that's very rare. + // A fully correct implementation would require allocating + // a data structure, which we would like to avoid. + required-- + } + } + } + if err == nil { + if is_group { + return io.ErrUnexpectedEOF + } + if state.err != nil { + return state.err + } + if required > 0 { + // Not enough information to determine the exact field. If we use extra + // CPU, we could determine the field only if the missing required field + // has a tag <= 64 and we check reqFields. + return &RequiredNotSetError{"{Unknown}"} + } + } + return err +} + +// Individual type decoders +// For each, +// u is the decoded value, +// v is a pointer to the field (pointer) in the struct + +// Sizes of the pools to allocate inside the Buffer. +// The goal is modest amortization and allocation +// on at least 16-byte boundaries. +const ( + boolPoolSize = 16 + uint32PoolSize = 8 + uint64PoolSize = 4 +) + +// Decode a bool. +func (o *Buffer) dec_bool(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + if len(o.bools) == 0 { + o.bools = make([]bool, boolPoolSize) + } + o.bools[0] = u != 0 + *structPointer_Bool(base, p.field) = &o.bools[0] + o.bools = o.bools[1:] + return nil +} + +func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + *structPointer_BoolVal(base, p.field) = u != 0 + return nil +} + +// Decode an int32. +func (o *Buffer) dec_int32(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word32_Set(structPointer_Word32(base, p.field), o, uint32(u)) + return nil +} + +func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u)) + return nil +} + +// Decode an int64. +func (o *Buffer) dec_int64(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word64_Set(structPointer_Word64(base, p.field), o, u) + return nil +} + +func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + word64Val_Set(structPointer_Word64Val(base, p.field), o, u) + return nil +} + +// Decode a string. +func (o *Buffer) dec_string(p *Properties, base structPointer) error { + s, err := o.DecodeStringBytes() + if err != nil { + return err + } + *structPointer_String(base, p.field) = &s + return nil +} + +func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error { + s, err := o.DecodeStringBytes() + if err != nil { + return err + } + *structPointer_StringVal(base, p.field) = s + return nil +} + +// Decode a slice of bytes ([]byte). +func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error { + b, err := o.DecodeRawBytes(true) + if err != nil { + return err + } + *structPointer_Bytes(base, p.field) = b + return nil +} + +// Decode a slice of bools ([]bool). +func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + v := structPointer_BoolSlice(base, p.field) + *v = append(*v, u != 0) + return nil +} + +// Decode a slice of bools ([]bool) in packed format. +func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error { + v := structPointer_BoolSlice(base, p.field) + + nn, err := o.DecodeVarint() + if err != nil { + return err + } + nb := int(nn) // number of bytes of encoded bools + fin := o.index + nb + if fin < o.index { + return errOverflow + } + + y := *v + for o.index < fin { + u, err := p.valDec(o) + if err != nil { + return err + } + y = append(y, u != 0) + } + + *v = y + return nil +} + +// Decode a slice of int32s ([]int32). +func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + structPointer_Word32Slice(base, p.field).Append(uint32(u)) + return nil +} + +// Decode a slice of int32s ([]int32) in packed format. +func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error { + v := structPointer_Word32Slice(base, p.field) + + nn, err := o.DecodeVarint() + if err != nil { + return err + } + nb := int(nn) // number of bytes of encoded int32s + + fin := o.index + nb + if fin < o.index { + return errOverflow + } + for o.index < fin { + u, err := p.valDec(o) + if err != nil { + return err + } + v.Append(uint32(u)) + } + return nil +} + +// Decode a slice of int64s ([]int64). +func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error { + u, err := p.valDec(o) + if err != nil { + return err + } + + structPointer_Word64Slice(base, p.field).Append(u) + return nil +} + +// Decode a slice of int64s ([]int64) in packed format. +func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error { + v := structPointer_Word64Slice(base, p.field) + + nn, err := o.DecodeVarint() + if err != nil { + return err + } + nb := int(nn) // number of bytes of encoded int64s + + fin := o.index + nb + if fin < o.index { + return errOverflow + } + for o.index < fin { + u, err := p.valDec(o) + if err != nil { + return err + } + v.Append(u) + } + return nil +} + +// Decode a slice of strings ([]string). +func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error { + s, err := o.DecodeStringBytes() + if err != nil { + return err + } + v := structPointer_StringSlice(base, p.field) + *v = append(*v, s) + return nil +} + +// Decode a slice of slice of bytes ([][]byte). +func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error { + b, err := o.DecodeRawBytes(true) + if err != nil { + return err + } + v := structPointer_BytesSlice(base, p.field) + *v = append(*v, b) + return nil +} + +// Decode a map field. +func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { + raw, err := o.DecodeRawBytes(false) + if err != nil { + return err + } + oi := o.index // index at the end of this map entry + o.index -= len(raw) // move buffer back to start of map entry + + mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V + if mptr.Elem().IsNil() { + mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem())) + } + v := mptr.Elem() // map[K]V + + // Prepare addressable doubly-indirect placeholders for the key and value types. + // See enc_new_map for why. + keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K + keybase := toStructPointer(keyptr.Addr()) // **K + + var valbase structPointer + var valptr reflect.Value + switch p.mtype.Elem().Kind() { + case reflect.Slice: + // []byte + var dummy []byte + valptr = reflect.ValueOf(&dummy) // *[]byte + valbase = toStructPointer(valptr) // *[]byte + case reflect.Ptr: + // message; valptr is **Msg; need to allocate the intermediate pointer + valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V + valptr.Set(reflect.New(valptr.Type().Elem())) + valbase = toStructPointer(valptr) + default: + // everything else + valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V + valbase = toStructPointer(valptr.Addr()) // **V + } + + // Decode. + // This parses a restricted wire format, namely the encoding of a message + // with two fields. See enc_new_map for the format. + for o.index < oi { + // tagcode for key and value properties are always a single byte + // because they have tags 1 and 2. + tagcode := o.buf[o.index] + o.index++ + switch tagcode { + case p.mkeyprop.tagcode[0]: + if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil { + return err + } + case p.mvalprop.tagcode[0]: + if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil { + return err + } + default: + // TODO: Should we silently skip this instead? + return fmt.Errorf("proto: bad map data tag %d", raw[0]) + } + } + keyelem, valelem := keyptr.Elem(), valptr.Elem() + if !keyelem.IsValid() { + keyelem = reflect.Zero(p.mtype.Key()) + } + if !valelem.IsValid() { + valelem = reflect.Zero(p.mtype.Elem()) + } + + v.SetMapIndex(keyelem, valelem) + return nil +} + +// Decode a group. +func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error { + bas := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(bas) { + // allocate new nested message + bas = toStructPointer(reflect.New(p.stype)) + structPointer_SetStructPointer(base, p.field, bas) + } + return o.unmarshalType(p.stype, p.sprop, true, bas) +} + +// Decode an embedded message. +func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) { + raw, e := o.DecodeRawBytes(false) + if e != nil { + return e + } + + bas := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(bas) { + // allocate new nested message + bas = toStructPointer(reflect.New(p.stype)) + structPointer_SetStructPointer(base, p.field, bas) + } + + // If the object can unmarshal itself, let it. + if p.isUnmarshaler { + iv := structPointer_Interface(bas, p.stype) + return iv.(Unmarshaler).Unmarshal(raw) + } + + obuf := o.buf + oi := o.index + o.buf = raw + o.index = 0 + + err = o.unmarshalType(p.stype, p.sprop, false, bas) + o.buf = obuf + o.index = oi + + return err +} + +// Decode a slice of embedded messages. +func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error { + return o.dec_slice_struct(p, false, base) +} + +// Decode a slice of embedded groups. +func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error { + return o.dec_slice_struct(p, true, base) +} + +// Decode a slice of structs ([]*struct). +func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error { + v := reflect.New(p.stype) + bas := toStructPointer(v) + structPointer_StructPointerSlice(base, p.field).Append(bas) + + if is_group { + err := o.unmarshalType(p.stype, p.sprop, is_group, bas) + return err + } + + raw, err := o.DecodeRawBytes(false) + if err != nil { + return err + } + + // If the object can unmarshal itself, let it. + if p.isUnmarshaler { + iv := v.Interface() + return iv.(Unmarshaler).Unmarshal(raw) + } + + obuf := o.buf + oi := o.index + o.buf = raw + o.index = 0 + + err = o.unmarshalType(p.stype, p.sprop, is_group, bas) + + o.buf = obuf + o.index = oi + + return err +} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode_gogo.go b/vendor/github.com/gogo/protobuf/proto/decode_gogo.go similarity index 91% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode_gogo.go rename to vendor/github.com/gogo/protobuf/proto/decode_gogo.go index 6a77aad..6fb74de 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/decode_gogo.go @@ -1,5 +1,7 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -96,7 +98,7 @@ func setPtrCustomType(base structPointer, f field, v interface{}) { if v == nil { return } - structPointer_SetStructPointer(base, f, structPointer(reflect.ValueOf(v).Pointer())) + structPointer_SetStructPointer(base, f, toStructPointer(reflect.ValueOf(v))) } func setCustomType(base structPointer, f field, value interface{}) { @@ -115,14 +117,8 @@ func setCustomType(base structPointer, f field, value interface{}) { oldHeader.Len = v.Len() oldHeader.Cap = v.Cap() default: - l := 1 size := reflect.TypeOf(value).Elem().Size() - if kind == reflect.Array { - l = reflect.TypeOf(value).Elem().Len() - size = reflect.TypeOf(value).Size() - } - total := int(size) * l - structPointer_Copy(toStructPointer(reflect.ValueOf(value)), structPointer_Add(base, f), total) + structPointer_Copy(toStructPointer(reflect.ValueOf(value)), structPointer_Add(base, f), int(size)) } } @@ -169,7 +165,8 @@ func (o *Buffer) dec_custom_slice_bytes(p *Properties, base structPointer) error } newBas := appendStructPointer(base, p.field, p.ctype) - setCustomType(newBas, 0, custom) + var zero field + setCustomType(newBas, zero, custom) return nil } diff --git a/vendor/github.com/gogo/protobuf/proto/duration.go b/vendor/github.com/gogo/protobuf/proto/duration.go new file mode 100644 index 0000000..93464c9 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/duration.go @@ -0,0 +1,100 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// This file implements conversions between google.protobuf.Duration +// and time.Duration. + +import ( + "errors" + "fmt" + "time" +) + +const ( + // Range of a Duration in seconds, as specified in + // google/protobuf/duration.proto. This is about 10,000 years in seconds. + maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60) + minSeconds = -maxSeconds +) + +// validateDuration determines whether the Duration is valid according to the +// definition in google/protobuf/duration.proto. A valid Duration +// may still be too large to fit into a time.Duration (the range of Duration +// is about 10,000 years, and the range of time.Duration is about 290). +func validateDuration(d *duration) error { + if d == nil { + return errors.New("duration: nil Duration") + } + if d.Seconds < minSeconds || d.Seconds > maxSeconds { + return fmt.Errorf("duration: %#v: seconds out of range", d) + } + if d.Nanos <= -1e9 || d.Nanos >= 1e9 { + return fmt.Errorf("duration: %#v: nanos out of range", d) + } + // Seconds and Nanos must have the same sign, unless d.Nanos is zero. + if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) { + return fmt.Errorf("duration: %#v: seconds and nanos have different signs", d) + } + return nil +} + +// DurationFromProto converts a Duration to a time.Duration. DurationFromProto +// returns an error if the Duration is invalid or is too large to be +// represented in a time.Duration. +func durationFromProto(p *duration) (time.Duration, error) { + if err := validateDuration(p); err != nil { + return 0, err + } + d := time.Duration(p.Seconds) * time.Second + if int64(d/time.Second) != p.Seconds { + return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p) + } + if p.Nanos != 0 { + d += time.Duration(p.Nanos) + if (d < 0) != (p.Nanos < 0) { + return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p) + } + } + return d, nil +} + +// DurationProto converts a time.Duration to a Duration. +func durationProto(d time.Duration) *duration { + nanos := d.Nanoseconds() + secs := nanos / 1e9 + nanos -= secs * 1e9 + return &duration{ + Seconds: secs, + Nanos: int32(nanos), + } +} diff --git a/vendor/github.com/gogo/protobuf/proto/duration_gogo.go b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go new file mode 100644 index 0000000..18e2a5f --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go @@ -0,0 +1,203 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2016, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "reflect" + "time" +) + +var durationType = reflect.TypeOf((*time.Duration)(nil)).Elem() + +type duration struct { + Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` + Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` +} + +func (m *duration) Reset() { *m = duration{} } +func (*duration) ProtoMessage() {} +func (*duration) String() string { return "duration" } + +func init() { + RegisterType((*duration)(nil), "gogo.protobuf.proto.duration") +} + +func (o *Buffer) decDuration() (time.Duration, error) { + b, err := o.DecodeRawBytes(true) + if err != nil { + return 0, err + } + dproto := &duration{} + if err := Unmarshal(b, dproto); err != nil { + return 0, err + } + return durationFromProto(dproto) +} + +func (o *Buffer) dec_duration(p *Properties, base structPointer) error { + d, err := o.decDuration() + if err != nil { + return err + } + word64_Set(structPointer_Word64(base, p.field), o, uint64(d)) + return nil +} + +func (o *Buffer) dec_ref_duration(p *Properties, base structPointer) error { + d, err := o.decDuration() + if err != nil { + return err + } + word64Val_Set(structPointer_Word64Val(base, p.field), o, uint64(d)) + return nil +} + +func (o *Buffer) dec_slice_duration(p *Properties, base structPointer) error { + d, err := o.decDuration() + if err != nil { + return err + } + newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))) + var zero field + setPtrCustomType(newBas, zero, &d) + return nil +} + +func (o *Buffer) dec_slice_ref_duration(p *Properties, base structPointer) error { + d, err := o.decDuration() + if err != nil { + return err + } + structPointer_Word64Slice(base, p.field).Append(uint64(d)) + return nil +} + +func size_duration(p *Properties, base structPointer) (n int) { + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return 0 + } + dur := structPointer_Interface(structp, durationType).(*time.Duration) + d := durationProto(*dur) + size := Size(d) + return size + sizeVarint(uint64(size)) + len(p.tagcode) +} + +func (o *Buffer) enc_duration(p *Properties, base structPointer) error { + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return ErrNil + } + dur := structPointer_Interface(structp, durationType).(*time.Duration) + d := durationProto(*dur) + data, err := Marshal(d) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + return nil +} + +func size_ref_duration(p *Properties, base structPointer) (n int) { + dur := structPointer_InterfaceAt(base, p.field, durationType).(*time.Duration) + d := durationProto(*dur) + size := Size(d) + return size + sizeVarint(uint64(size)) + len(p.tagcode) +} + +func (o *Buffer) enc_ref_duration(p *Properties, base structPointer) error { + dur := structPointer_InterfaceAt(base, p.field, durationType).(*time.Duration) + d := durationProto(*dur) + data, err := Marshal(d) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + return nil +} + +func size_slice_duration(p *Properties, base structPointer) (n int) { + pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))).(*[]*time.Duration) + durs := *pdurs + for i := 0; i < len(durs); i++ { + if durs[i] == nil { + return 0 + } + dproto := durationProto(*durs[i]) + size := Size(dproto) + n += len(p.tagcode) + size + sizeVarint(uint64(size)) + } + return n +} + +func (o *Buffer) enc_slice_duration(p *Properties, base structPointer) error { + pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))).(*[]*time.Duration) + durs := *pdurs + for i := 0; i < len(durs); i++ { + if durs[i] == nil { + return errRepeatedHasNil + } + dproto := durationProto(*durs[i]) + data, err := Marshal(dproto) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + } + return nil +} + +func size_slice_ref_duration(p *Properties, base structPointer) (n int) { + pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(durationType)).(*[]time.Duration) + durs := *pdurs + for i := 0; i < len(durs); i++ { + dproto := durationProto(durs[i]) + size := Size(dproto) + n += len(p.tagcode) + size + sizeVarint(uint64(size)) + } + return n +} + +func (o *Buffer) enc_slice_ref_duration(p *Properties, base structPointer) error { + pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(durationType)).(*[]time.Duration) + durs := *pdurs + for i := 0; i < len(durs); i++ { + dproto := durationProto(durs[i]) + data, err := Marshal(dproto) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + } + return nil +} diff --git a/vendor/github.com/gogo/protobuf/proto/encode.go b/vendor/github.com/gogo/protobuf/proto/encode.go new file mode 100644 index 0000000..2b30f84 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/encode.go @@ -0,0 +1,1362 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "errors" + "fmt" + "reflect" + "sort" +) + +// RequiredNotSetError is the error returned if Marshal is called with +// a protocol buffer struct whose required fields have not +// all been initialized. It is also the error returned if Unmarshal is +// called with an encoded protocol buffer that does not include all the +// required fields. +// +// When printed, RequiredNotSetError reports the first unset required field in a +// message. If the field cannot be precisely determined, it is reported as +// "{Unknown}". +type RequiredNotSetError struct { + field string +} + +func (e *RequiredNotSetError) Error() string { + return fmt.Sprintf("proto: required field %q not set", e.field) +} + +var ( + // errRepeatedHasNil is the error returned if Marshal is called with + // a struct with a repeated field containing a nil element. + errRepeatedHasNil = errors.New("proto: repeated field has nil element") + + // errOneofHasNil is the error returned if Marshal is called with + // a struct with a oneof field containing a nil element. + errOneofHasNil = errors.New("proto: oneof field has nil value") + + // ErrNil is the error returned if Marshal is called with nil. + ErrNil = errors.New("proto: Marshal called with nil") + + // ErrTooLarge is the error returned if Marshal is called with a + // message that encodes to >2GB. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") +) + +// The fundamental encoders that put bytes on the wire. +// Those that take integer types all accept uint64 and are +// therefore of type valueEncoder. + +const maxVarintBytes = 10 // maximum length of a varint + +// maxMarshalSize is the largest allowed size of an encoded protobuf, +// since C++ and Java use signed int32s for the size. +const maxMarshalSize = 1<<31 - 1 + +// EncodeVarint returns the varint encoding of x. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +// Not used by the package itself, but helpful to clients +// wishing to use the same encoding. +func EncodeVarint(x uint64) []byte { + var buf [maxVarintBytes]byte + var n int + for n = 0; x > 127; n++ { + buf[n] = 0x80 | uint8(x&0x7F) + x >>= 7 + } + buf[n] = uint8(x) + n++ + return buf[0:n] +} + +// EncodeVarint writes a varint-encoded integer to the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) EncodeVarint(x uint64) error { + for x >= 1<<7 { + p.buf = append(p.buf, uint8(x&0x7f|0x80)) + x >>= 7 + } + p.buf = append(p.buf, uint8(x)) + return nil +} + +// SizeVarint returns the varint encoding size of an integer. +func SizeVarint(x uint64) int { + return sizeVarint(x) +} + +func sizeVarint(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} + +// EncodeFixed64 writes a 64-bit integer to the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) EncodeFixed64(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24), + uint8(x>>32), + uint8(x>>40), + uint8(x>>48), + uint8(x>>56)) + return nil +} + +func sizeFixed64(x uint64) int { + return 8 +} + +// EncodeFixed32 writes a 32-bit integer to the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) EncodeFixed32(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24)) + return nil +} + +func sizeFixed32(x uint64) int { + return 4 +} + +// EncodeZigzag64 writes a zigzag-encoded 64-bit integer +// to the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) EncodeZigzag64(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +func sizeZigzag64(x uint64) int { + return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +// EncodeZigzag32 writes a zigzag-encoded 32-bit integer +// to the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) EncodeZigzag32(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) +} + +func sizeZigzag32(x uint64) int { + return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) +} + +// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) EncodeRawBytes(b []byte) error { + p.EncodeVarint(uint64(len(b))) + p.buf = append(p.buf, b...) + return nil +} + +func sizeRawBytes(b []byte) int { + return sizeVarint(uint64(len(b))) + + len(b) +} + +// EncodeStringBytes writes an encoded string to the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) EncodeStringBytes(s string) error { + p.EncodeVarint(uint64(len(s))) + p.buf = append(p.buf, s...) + return nil +} + +func sizeStringBytes(s string) int { + return sizeVarint(uint64(len(s))) + + len(s) +} + +// Marshaler is the interface representing objects that can marshal themselves. +type Marshaler interface { + Marshal() ([]byte, error) +} + +// Marshal takes the protocol buffer +// and encodes it into the wire format, returning the data. +func Marshal(pb Message) ([]byte, error) { + // Can the object marshal itself? + if m, ok := pb.(Marshaler); ok { + return m.Marshal() + } + p := NewBuffer(nil) + err := p.Marshal(pb) + if p.buf == nil && err == nil { + // Return a non-nil slice on success. + return []byte{}, nil + } + return p.buf, err +} + +// EncodeMessage writes the protocol buffer to the Buffer, +// prefixed by a varint-encoded length. +func (p *Buffer) EncodeMessage(pb Message) error { + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return ErrNil + } + if err == nil { + var state errorState + err = p.enc_len_struct(GetProperties(t.Elem()), base, &state) + } + return err +} + +// Marshal takes the protocol buffer +// and encodes it into the wire format, writing the result to the +// Buffer. +func (p *Buffer) Marshal(pb Message) error { + // Can the object marshal itself? + if m, ok := pb.(Marshaler); ok { + data, err := m.Marshal() + p.buf = append(p.buf, data...) + return err + } + + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return ErrNil + } + if err == nil { + err = p.enc_struct(GetProperties(t.Elem()), base) + } + + if collectStats { + (stats).Encode++ // Parens are to work around a goimports bug. + } + + if len(p.buf) > maxMarshalSize { + return ErrTooLarge + } + return err +} + +// Size returns the encoded size of a protocol buffer. +func Size(pb Message) (n int) { + // Can the object marshal itself? If so, Size is slow. + // TODO: add Size to Marshaler, or add a Sizer interface. + if m, ok := pb.(Marshaler); ok { + b, _ := m.Marshal() + return len(b) + } + + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return 0 + } + if err == nil { + n = size_struct(GetProperties(t.Elem()), base) + } + + if collectStats { + (stats).Size++ // Parens are to work around a goimports bug. + } + + return +} + +// Individual type encoders. + +// Encode a bool. +func (o *Buffer) enc_bool(p *Properties, base structPointer) error { + v := *structPointer_Bool(base, p.field) + if v == nil { + return ErrNil + } + x := 0 + if *v { + x = 1 + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error { + v := *structPointer_BoolVal(base, p.field) + if !v { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, 1) + return nil +} + +func size_bool(p *Properties, base structPointer) int { + v := *structPointer_Bool(base, p.field) + if v == nil { + return 0 + } + return len(p.tagcode) + 1 // each bool takes exactly one byte +} + +func size_proto3_bool(p *Properties, base structPointer) int { + v := *structPointer_BoolVal(base, p.field) + if !v && !p.oneof { + return 0 + } + return len(p.tagcode) + 1 // each bool takes exactly one byte +} + +// Encode an int32. +func (o *Buffer) enc_int32(p *Properties, base structPointer) error { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return ErrNil + } + x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error { + v := structPointer_Word32Val(base, p.field) + x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range + if x == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func size_int32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return 0 + } + x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +func size_proto3_int32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32Val(base, p.field) + x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range + if x == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +// Encode a uint32. +// Exactly the same as int32, except for no sign extension. +func (o *Buffer) enc_uint32(p *Properties, base structPointer) error { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return ErrNil + } + x := word32_Get(v) + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error { + v := structPointer_Word32Val(base, p.field) + x := word32Val_Get(v) + if x == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, uint64(x)) + return nil +} + +func size_uint32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32(base, p.field) + if word32_IsNil(v) { + return 0 + } + x := word32_Get(v) + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +func size_proto3_uint32(p *Properties, base structPointer) (n int) { + v := structPointer_Word32Val(base, p.field) + x := word32Val_Get(v) + if x == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += p.valSize(uint64(x)) + return +} + +// Encode an int64. +func (o *Buffer) enc_int64(p *Properties, base structPointer) error { + v := structPointer_Word64(base, p.field) + if word64_IsNil(v) { + return ErrNil + } + x := word64_Get(v) + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, x) + return nil +} + +func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error { + v := structPointer_Word64Val(base, p.field) + x := word64Val_Get(v) + if x == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, x) + return nil +} + +func size_int64(p *Properties, base structPointer) (n int) { + v := structPointer_Word64(base, p.field) + if word64_IsNil(v) { + return 0 + } + x := word64_Get(v) + n += len(p.tagcode) + n += p.valSize(x) + return +} + +func size_proto3_int64(p *Properties, base structPointer) (n int) { + v := structPointer_Word64Val(base, p.field) + x := word64Val_Get(v) + if x == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += p.valSize(x) + return +} + +// Encode a string. +func (o *Buffer) enc_string(p *Properties, base structPointer) error { + v := *structPointer_String(base, p.field) + if v == nil { + return ErrNil + } + x := *v + o.buf = append(o.buf, p.tagcode...) + o.EncodeStringBytes(x) + return nil +} + +func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error { + v := *structPointer_StringVal(base, p.field) + if v == "" { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeStringBytes(v) + return nil +} + +func size_string(p *Properties, base structPointer) (n int) { + v := *structPointer_String(base, p.field) + if v == nil { + return 0 + } + x := *v + n += len(p.tagcode) + n += sizeStringBytes(x) + return +} + +func size_proto3_string(p *Properties, base structPointer) (n int) { + v := *structPointer_StringVal(base, p.field) + if v == "" && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += sizeStringBytes(v) + return +} + +// All protocol buffer fields are nillable, but be careful. +func isNil(v reflect.Value) bool { + switch v.Kind() { + case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return v.IsNil() + } + return false +} + +// Encode a message struct. +func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error { + var state errorState + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return ErrNil + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, err := m.Marshal() + if err != nil && !state.shouldContinue(err, nil) { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + return state.err + } + + o.buf = append(o.buf, p.tagcode...) + return o.enc_len_struct(p.sprop, structp, &state) +} + +func size_struct_message(p *Properties, base structPointer) int { + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return 0 + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, _ := m.Marshal() + n0 := len(p.tagcode) + n1 := sizeRawBytes(data) + return n0 + n1 + } + + n0 := len(p.tagcode) + n1 := size_struct(p.sprop, structp) + n2 := sizeVarint(uint64(n1)) // size of encoded length + return n0 + n1 + n2 +} + +// Encode a group struct. +func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error { + var state errorState + b := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(b) { + return ErrNil + } + + o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) + err := o.enc_struct(p.sprop, b) + if err != nil && !state.shouldContinue(err, nil) { + return err + } + o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) + return state.err +} + +func size_struct_group(p *Properties, base structPointer) (n int) { + b := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(b) { + return 0 + } + + n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup)) + n += size_struct(p.sprop, b) + n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup)) + return +} + +// Encode a slice of bools ([]bool). +func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return ErrNil + } + for _, x := range s { + o.buf = append(o.buf, p.tagcode...) + v := uint64(0) + if x { + v = 1 + } + p.valEnc(o, v) + } + return nil +} + +func size_slice_bool(p *Properties, base structPointer) int { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return 0 + } + return l * (len(p.tagcode) + 1) // each bool takes exactly one byte +} + +// Encode a slice of bools ([]bool) in packed format. +func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(l)) // each bool takes exactly one byte + for _, x := range s { + v := uint64(0) + if x { + v = 1 + } + p.valEnc(o, v) + } + return nil +} + +func size_slice_packed_bool(p *Properties, base structPointer) (n int) { + s := *structPointer_BoolSlice(base, p.field) + l := len(s) + if l == 0 { + return 0 + } + n += len(p.tagcode) + n += sizeVarint(uint64(l)) + n += l // each bool takes exactly one byte + return +} + +// Encode a slice of bytes ([]byte). +func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error { + s := *structPointer_Bytes(base, p.field) + if s == nil { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(s) + return nil +} + +func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error { + s := *structPointer_Bytes(base, p.field) + if len(s) == 0 { + return ErrNil + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(s) + return nil +} + +func size_slice_byte(p *Properties, base structPointer) (n int) { + s := *structPointer_Bytes(base, p.field) + if s == nil && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += sizeRawBytes(s) + return +} + +func size_proto3_slice_byte(p *Properties, base structPointer) (n int) { + s := *structPointer_Bytes(base, p.field) + if len(s) == 0 && !p.oneof { + return 0 + } + n += len(p.tagcode) + n += sizeRawBytes(s) + return +} + +// Encode a slice of int32s ([]int32). +func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + p.valEnc(o, uint64(x)) + } + return nil +} + +func size_slice_int32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + for i := 0; i < l; i++ { + n += len(p.tagcode) + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + n += p.valSize(uint64(x)) + } + return +} + +// Encode a slice of int32s ([]int32) in packed format. +func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + // TODO: Reuse a Buffer. + buf := NewBuffer(nil) + for i := 0; i < l; i++ { + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + p.valEnc(buf, uint64(x)) + } + + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(len(buf.buf))) + o.buf = append(o.buf, buf.buf...) + return nil +} + +func size_slice_packed_int32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + var bufSize int + for i := 0; i < l; i++ { + x := int32(s.Index(i)) // permit sign extension to use full 64-bit range + bufSize += p.valSize(uint64(x)) + } + + n += len(p.tagcode) + n += sizeVarint(uint64(bufSize)) + n += bufSize + return +} + +// Encode a slice of uint32s ([]uint32). +// Exactly the same as int32, except for no sign extension. +func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + x := s.Index(i) + p.valEnc(o, uint64(x)) + } + return nil +} + +func size_slice_uint32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + for i := 0; i < l; i++ { + n += len(p.tagcode) + x := s.Index(i) + n += p.valSize(uint64(x)) + } + return +} + +// Encode a slice of uint32s ([]uint32) in packed format. +// Exactly the same as int32, except for no sign extension. +func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + // TODO: Reuse a Buffer. + buf := NewBuffer(nil) + for i := 0; i < l; i++ { + p.valEnc(buf, uint64(s.Index(i))) + } + + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(len(buf.buf))) + o.buf = append(o.buf, buf.buf...) + return nil +} + +func size_slice_packed_uint32(p *Properties, base structPointer) (n int) { + s := structPointer_Word32Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + var bufSize int + for i := 0; i < l; i++ { + bufSize += p.valSize(uint64(s.Index(i))) + } + + n += len(p.tagcode) + n += sizeVarint(uint64(bufSize)) + n += bufSize + return +} + +// Encode a slice of int64s ([]int64). +func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + p.valEnc(o, s.Index(i)) + } + return nil +} + +func size_slice_int64(p *Properties, base structPointer) (n int) { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + for i := 0; i < l; i++ { + n += len(p.tagcode) + n += p.valSize(s.Index(i)) + } + return +} + +// Encode a slice of int64s ([]int64) in packed format. +func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return ErrNil + } + // TODO: Reuse a Buffer. + buf := NewBuffer(nil) + for i := 0; i < l; i++ { + p.valEnc(buf, s.Index(i)) + } + + o.buf = append(o.buf, p.tagcode...) + o.EncodeVarint(uint64(len(buf.buf))) + o.buf = append(o.buf, buf.buf...) + return nil +} + +func size_slice_packed_int64(p *Properties, base structPointer) (n int) { + s := structPointer_Word64Slice(base, p.field) + l := s.Len() + if l == 0 { + return 0 + } + var bufSize int + for i := 0; i < l; i++ { + bufSize += p.valSize(s.Index(i)) + } + + n += len(p.tagcode) + n += sizeVarint(uint64(bufSize)) + n += bufSize + return +} + +// Encode a slice of slice of bytes ([][]byte). +func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error { + ss := *structPointer_BytesSlice(base, p.field) + l := len(ss) + if l == 0 { + return ErrNil + } + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(ss[i]) + } + return nil +} + +func size_slice_slice_byte(p *Properties, base structPointer) (n int) { + ss := *structPointer_BytesSlice(base, p.field) + l := len(ss) + if l == 0 { + return 0 + } + n += l * len(p.tagcode) + for i := 0; i < l; i++ { + n += sizeRawBytes(ss[i]) + } + return +} + +// Encode a slice of strings ([]string). +func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error { + ss := *structPointer_StringSlice(base, p.field) + l := len(ss) + for i := 0; i < l; i++ { + o.buf = append(o.buf, p.tagcode...) + o.EncodeStringBytes(ss[i]) + } + return nil +} + +func size_slice_string(p *Properties, base structPointer) (n int) { + ss := *structPointer_StringSlice(base, p.field) + l := len(ss) + n += l * len(p.tagcode) + for i := 0; i < l; i++ { + n += sizeStringBytes(ss[i]) + } + return +} + +// Encode a slice of message structs ([]*struct). +func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error { + var state errorState + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + + for i := 0; i < l; i++ { + structp := s.Index(i) + if structPointer_IsNil(structp) { + return errRepeatedHasNil + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, err := m.Marshal() + if err != nil && !state.shouldContinue(err, nil) { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + continue + } + + o.buf = append(o.buf, p.tagcode...) + err := o.enc_len_struct(p.sprop, structp, &state) + if err != nil && !state.shouldContinue(err, nil) { + if err == ErrNil { + return errRepeatedHasNil + } + return err + } + } + return state.err +} + +func size_slice_struct_message(p *Properties, base structPointer) (n int) { + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + n += l * len(p.tagcode) + for i := 0; i < l; i++ { + structp := s.Index(i) + if structPointer_IsNil(structp) { + return // return the size up to this point + } + + // Can the object marshal itself? + if p.isMarshaler { + m := structPointer_Interface(structp, p.stype).(Marshaler) + data, _ := m.Marshal() + n += sizeRawBytes(data) + continue + } + + n0 := size_struct(p.sprop, structp) + n1 := sizeVarint(uint64(n0)) // size of encoded length + n += n0 + n1 + } + return +} + +// Encode a slice of group structs ([]*struct). +func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error { + var state errorState + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + + for i := 0; i < l; i++ { + b := s.Index(i) + if structPointer_IsNil(b) { + return errRepeatedHasNil + } + + o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) + + err := o.enc_struct(p.sprop, b) + + if err != nil && !state.shouldContinue(err, nil) { + if err == ErrNil { + return errRepeatedHasNil + } + return err + } + + o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) + } + return state.err +} + +func size_slice_struct_group(p *Properties, base structPointer) (n int) { + s := structPointer_StructPointerSlice(base, p.field) + l := s.Len() + + n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup)) + n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup)) + for i := 0; i < l; i++ { + b := s.Index(i) + if structPointer_IsNil(b) { + return // return size up to this point + } + + n += size_struct(p.sprop, b) + } + return +} + +// Encode an extension map. +func (o *Buffer) enc_map(p *Properties, base structPointer) error { + exts := structPointer_ExtMap(base, p.field) + if err := encodeExtensionsMap(*exts); err != nil { + return err + } + + return o.enc_map_body(*exts) +} + +func (o *Buffer) enc_exts(p *Properties, base structPointer) error { + exts := structPointer_Extensions(base, p.field) + + v, mu := exts.extensionsRead() + if v == nil { + return nil + } + + mu.Lock() + defer mu.Unlock() + if err := encodeExtensionsMap(v); err != nil { + return err + } + + return o.enc_map_body(v) +} + +func (o *Buffer) enc_map_body(v map[int32]Extension) error { + // Fast-path for common cases: zero or one extensions. + if len(v) <= 1 { + for _, e := range v { + o.buf = append(o.buf, e.enc...) + } + return nil + } + + // Sort keys to provide a deterministic encoding. + keys := make([]int, 0, len(v)) + for k := range v { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, k := range keys { + o.buf = append(o.buf, v[int32(k)].enc...) + } + return nil +} + +func size_map(p *Properties, base structPointer) int { + v := structPointer_ExtMap(base, p.field) + return extensionsMapSize(*v) +} + +func size_exts(p *Properties, base structPointer) int { + v := structPointer_Extensions(base, p.field) + return extensionsSize(v) +} + +// Encode a map field. +func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { + var state errorState // XXX: or do we need to plumb this through? + + /* + A map defined as + map map_field = N; + is encoded in the same way as + message MapFieldEntry { + key_type key = 1; + value_type value = 2; + } + repeated MapFieldEntry map_field = N; + */ + + v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V + if v.Len() == 0 { + return nil + } + + keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) + + enc := func() error { + if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil { + return err + } + if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil { + return err + } + return nil + } + + // Don't sort map keys. It is not required by the spec, and C++ doesn't do it. + for _, key := range v.MapKeys() { + val := v.MapIndex(key) + + keycopy.Set(key) + valcopy.Set(val) + + o.buf = append(o.buf, p.tagcode...) + if err := o.enc_len_thing(enc, &state); err != nil { + return err + } + } + return nil +} + +func size_new_map(p *Properties, base structPointer) int { + v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V + + keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) + + n := 0 + for _, key := range v.MapKeys() { + val := v.MapIndex(key) + keycopy.Set(key) + valcopy.Set(val) + + // Tag codes for key and val are the responsibility of the sub-sizer. + keysize := p.mkeyprop.size(p.mkeyprop, keybase) + valsize := p.mvalprop.size(p.mvalprop, valbase) + entry := keysize + valsize + // Add on tag code and length of map entry itself. + n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry + } + return n +} + +// mapEncodeScratch returns a new reflect.Value matching the map's value type, +// and a structPointer suitable for passing to an encoder or sizer. +func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) { + // Prepare addressable doubly-indirect placeholders for the key and value types. + // This is needed because the element-type encoders expect **T, but the map iteration produces T. + + keycopy = reflect.New(mapType.Key()).Elem() // addressable K + keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K + keyptr.Set(keycopy.Addr()) // + keybase = toStructPointer(keyptr.Addr()) // **K + + // Value types are more varied and require special handling. + switch mapType.Elem().Kind() { + case reflect.Slice: + // []byte + var dummy []byte + valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte + valbase = toStructPointer(valcopy.Addr()) + case reflect.Ptr: + // message; the generated field type is map[K]*Msg (so V is *Msg), + // so we only need one level of indirection. + valcopy = reflect.New(mapType.Elem()).Elem() // addressable V + valbase = toStructPointer(valcopy.Addr()) + default: + // everything else + valcopy = reflect.New(mapType.Elem()).Elem() // addressable V + valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V + valptr.Set(valcopy.Addr()) // + valbase = toStructPointer(valptr.Addr()) // **V + } + return +} + +// Encode a struct. +func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { + var state errorState + // Encode fields in tag order so that decoders may use optimizations + // that depend on the ordering. + // https://developers.google.com/protocol-buffers/docs/encoding#order + for _, i := range prop.order { + p := prop.Prop[i] + if p.enc != nil { + err := p.enc(o, p, base) + if err != nil { + if err == ErrNil { + if p.Required && state.err == nil { + state.err = &RequiredNotSetError{p.Name} + } + } else if err == errRepeatedHasNil { + // Give more context to nil values in repeated fields. + return errors.New("repeated field " + p.OrigName + " has nil element") + } else if !state.shouldContinue(err, p) { + return err + } + } + if len(o.buf) > maxMarshalSize { + return ErrTooLarge + } + } + } + + // Do oneof fields. + if prop.oneofMarshaler != nil { + m := structPointer_Interface(base, prop.stype).(Message) + if err := prop.oneofMarshaler(m, o); err == ErrNil { + return errOneofHasNil + } else if err != nil { + return err + } + } + + // Add unrecognized fields at the end. + if prop.unrecField.IsValid() { + v := *structPointer_Bytes(base, prop.unrecField) + if len(o.buf)+len(v) > maxMarshalSize { + return ErrTooLarge + } + if len(v) > 0 { + o.buf = append(o.buf, v...) + } + } + + return state.err +} + +func size_struct(prop *StructProperties, base structPointer) (n int) { + for _, i := range prop.order { + p := prop.Prop[i] + if p.size != nil { + n += p.size(p, base) + } + } + + // Add unrecognized fields at the end. + if prop.unrecField.IsValid() { + v := *structPointer_Bytes(base, prop.unrecField) + n += len(v) + } + + // Factor in any oneof fields. + if prop.oneofSizer != nil { + m := structPointer_Interface(base, prop.stype).(Message) + n += prop.oneofSizer(m) + } + + return +} + +var zeroes [20]byte // longer than any conceivable sizeVarint + +// Encode a struct, preceded by its encoded length (as a varint). +func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error { + return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state) +} + +// Encode something, preceded by its encoded length (as a varint). +func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error { + iLen := len(o.buf) + o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length + iMsg := len(o.buf) + err := enc() + if err != nil && !state.shouldContinue(err, nil) { + return err + } + lMsg := len(o.buf) - iMsg + lLen := sizeVarint(uint64(lMsg)) + switch x := lLen - (iMsg - iLen); { + case x > 0: // actual length is x bytes larger than the space we reserved + // Move msg x bytes right. + o.buf = append(o.buf, zeroes[:x]...) + copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) + case x < 0: // actual length is x bytes smaller than the space we reserved + // Move msg x bytes left. + copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) + o.buf = o.buf[:len(o.buf)+x] // x is negative + } + // Encode the length in the reserved space. + o.buf = o.buf[:iLen] + o.EncodeVarint(uint64(lMsg)) + o.buf = o.buf[:len(o.buf)+lMsg] + return state.err +} + +// errorState maintains the first error that occurs and updates that error +// with additional context. +type errorState struct { + err error +} + +// shouldContinue reports whether encoding should continue upon encountering the +// given error. If the error is RequiredNotSetError, shouldContinue returns true +// and, if this is the first appearance of that error, remembers it for future +// reporting. +// +// If prop is not nil, it may update any error with additional context about the +// field with the error. +func (s *errorState) shouldContinue(err error, prop *Properties) bool { + // Ignore unset required fields. + reqNotSet, ok := err.(*RequiredNotSetError) + if !ok { + return false + } + if s.err == nil { + if prop != nil { + err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field} + } + s.err = err + } + return true +} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode_gogo.go b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go similarity index 93% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode_gogo.go rename to vendor/github.com/gogo/protobuf/proto/encode_gogo.go index f77cfb1..32111b7 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go @@ -1,7 +1,7 @@ -// Extensions for Protocol Buffers to create more go like structures. +// Protocol Buffers for Go with Gadgets // -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Go support for Protocol Buffers - Google's data interchange format // @@ -196,12 +196,10 @@ func size_ref_struct_message(p *Properties, base structPointer) int { // Encode a slice of references to message struct pointers ([]struct). func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer) error { var state errorState - ss := structPointer_GetStructPointer(base, p.field) - ss1 := structPointer_GetRefStructPointer(ss, field(0)) - size := p.stype.Size() - l := structPointer_Len(base, p.field) + ss := structPointer_StructRefSlice(base, p.field, p.stype.Size()) + l := ss.Len() for i := 0; i < l; i++ { - structp := structPointer_Add(ss1, field(uintptr(i)*size)) + structp := ss.Index(i) if structPointer_IsNil(structp) { return errRepeatedHasNil } @@ -233,13 +231,11 @@ func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer) //TODO this is only copied, please fix this func size_slice_ref_struct_message(p *Properties, base structPointer) (n int) { - ss := structPointer_GetStructPointer(base, p.field) - ss1 := structPointer_GetRefStructPointer(ss, field(0)) - size := p.stype.Size() - l := structPointer_Len(base, p.field) + ss := structPointer_StructRefSlice(base, p.field, p.stype.Size()) + l := ss.Len() n += l * len(p.tagcode) for i := 0; i < l; i++ { - structp := structPointer_Add(ss1, field(uintptr(i)*size)) + structp := ss.Index(i) if structPointer_IsNil(structp) { return // return the size up to this point } diff --git a/vendor/github.com/gogo/protobuf/proto/equal.go b/vendor/github.com/gogo/protobuf/proto/equal.go new file mode 100644 index 0000000..2ed1cf5 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/equal.go @@ -0,0 +1,300 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer comparison. + +package proto + +import ( + "bytes" + "log" + "reflect" + "strings" +) + +/* +Equal returns true iff protocol buffers a and b are equal. +The arguments must both be pointers to protocol buffer structs. + +Equality is defined in this way: + - Two messages are equal iff they are the same type, + corresponding fields are equal, unknown field sets + are equal, and extensions sets are equal. + - Two set scalar fields are equal iff their values are equal. + If the fields are of a floating-point type, remember that + NaN != x for all x, including NaN. If the message is defined + in a proto3 .proto file, fields are not "set"; specifically, + zero length proto3 "bytes" fields are equal (nil == {}). + - Two repeated fields are equal iff their lengths are the same, + and their corresponding elements are equal. Note a "bytes" field, + although represented by []byte, is not a repeated field and the + rule for the scalar fields described above applies. + - Two unset fields are equal. + - Two unknown field sets are equal if their current + encoded state is equal. + - Two extension sets are equal iff they have corresponding + elements that are pairwise equal. + - Two map fields are equal iff their lengths are the same, + and they contain the same set of elements. Zero-length map + fields are equal. + - Every other combination of things are not equal. + +The return value is undefined if a and b are not protocol buffers. +*/ +func Equal(a, b Message) bool { + if a == nil || b == nil { + return a == b + } + v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) + if v1.Type() != v2.Type() { + return false + } + if v1.Kind() == reflect.Ptr { + if v1.IsNil() { + return v2.IsNil() + } + if v2.IsNil() { + return false + } + v1, v2 = v1.Elem(), v2.Elem() + } + if v1.Kind() != reflect.Struct { + return false + } + return equalStruct(v1, v2) +} + +// v1 and v2 are known to have the same type. +func equalStruct(v1, v2 reflect.Value) bool { + sprop := GetProperties(v1.Type()) + for i := 0; i < v1.NumField(); i++ { + f := v1.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + f1, f2 := v1.Field(i), v2.Field(i) + if f.Type.Kind() == reflect.Ptr { + if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { + // both unset + continue + } else if n1 != n2 { + // set/unset mismatch + return false + } + b1, ok := f1.Interface().(raw) + if ok { + b2 := f2.Interface().(raw) + // RawMessage + if !bytes.Equal(b1.Bytes(), b2.Bytes()) { + return false + } + continue + } + f1, f2 = f1.Elem(), f2.Elem() + } + if !equalAny(f1, f2, sprop.Prop[i]) { + return false + } + } + + if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_InternalExtensions") + if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { + return false + } + } + + if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_extensions") + if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { + return false + } + } + + uf := v1.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return true + } + + u1 := uf.Bytes() + u2 := v2.FieldByName("XXX_unrecognized").Bytes() + if !bytes.Equal(u1, u2) { + return false + } + + return true +} + +// v1 and v2 are known to have the same type. +// prop may be nil. +func equalAny(v1, v2 reflect.Value, prop *Properties) bool { + if v1.Type() == protoMessageType { + m1, _ := v1.Interface().(Message) + m2, _ := v2.Interface().(Message) + return Equal(m1, m2) + } + switch v1.Kind() { + case reflect.Bool: + return v1.Bool() == v2.Bool() + case reflect.Float32, reflect.Float64: + return v1.Float() == v2.Float() + case reflect.Int32, reflect.Int64: + return v1.Int() == v2.Int() + case reflect.Interface: + // Probably a oneof field; compare the inner values. + n1, n2 := v1.IsNil(), v2.IsNil() + if n1 || n2 { + return n1 == n2 + } + e1, e2 := v1.Elem(), v2.Elem() + if e1.Type() != e2.Type() { + return false + } + return equalAny(e1, e2, nil) + case reflect.Map: + if v1.Len() != v2.Len() { + return false + } + for _, key := range v1.MapKeys() { + val2 := v2.MapIndex(key) + if !val2.IsValid() { + // This key was not found in the second map. + return false + } + if !equalAny(v1.MapIndex(key), val2, nil) { + return false + } + } + return true + case reflect.Ptr: + // Maps may have nil values in them, so check for nil. + if v1.IsNil() && v2.IsNil() { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return equalAny(v1.Elem(), v2.Elem(), prop) + case reflect.Slice: + if v1.Type().Elem().Kind() == reflect.Uint8 { + // short circuit: []byte + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value. + if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) + } + + if v1.Len() != v2.Len() { + return false + } + for i := 0; i < v1.Len(); i++ { + if !equalAny(v1.Index(i), v2.Index(i), prop) { + return false + } + } + return true + case reflect.String: + return v1.Interface().(string) == v2.Interface().(string) + case reflect.Struct: + return equalStruct(v1, v2) + case reflect.Uint32, reflect.Uint64: + return v1.Uint() == v2.Uint() + } + + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to compare %v", v1) + return false +} + +// base is the struct type that the extensions are based on. +// x1 and x2 are InternalExtensions. +func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { + em1, _ := x1.extensionsRead() + em2, _ := x2.extensionsRead() + return equalExtMap(base, em1, em2) +} + +func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { + if len(em1) != len(em2) { + return false + } + + for extNum, e1 := range em1 { + e2, ok := em2[extNum] + if !ok { + return false + } + + m1, m2 := e1.value, e2.value + + if m1 != nil && m2 != nil { + // Both are unencoded. + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + continue + } + + // At least one is encoded. To do a semantically correct comparison + // we need to unmarshal them first. + var desc *ExtensionDesc + if m := extensionMaps[base]; m != nil { + desc = m[extNum] + } + if desc == nil { + log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) + continue + } + var err error + if m1 == nil { + m1, err = decodeExtension(e1.enc, desc) + } + if m2 == nil && err == nil { + m2, err = decodeExtension(e2.enc, desc) + } + if err != nil { + // The encoded form is invalid. + log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) + return false + } + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + } + + return true +} diff --git a/vendor/github.com/gogo/protobuf/proto/extensions.go b/vendor/github.com/gogo/protobuf/proto/extensions.go new file mode 100644 index 0000000..0dfcb53 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/extensions.go @@ -0,0 +1,693 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Types and routines for supporting protocol buffer extensions. + */ + +import ( + "errors" + "fmt" + "reflect" + "strconv" + "sync" +) + +// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. +var ErrMissingExtension = errors.New("proto: missing extension") + +// ExtensionRange represents a range of message extensions for a protocol buffer. +// Used in code generated by the protocol compiler. +type ExtensionRange struct { + Start, End int32 // both inclusive +} + +// extendableProto is an interface implemented by any protocol buffer generated by the current +// proto compiler that may be extended. +type extendableProto interface { + Message + ExtensionRangeArray() []ExtensionRange + extensionsWrite() map[int32]Extension + extensionsRead() (map[int32]Extension, sync.Locker) +} + +// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous +// version of the proto compiler that may be extended. +type extendableProtoV1 interface { + Message + ExtensionRangeArray() []ExtensionRange + ExtensionMap() map[int32]Extension +} + +type extensionsBytes interface { + Message + ExtensionRangeArray() []ExtensionRange + GetExtensions() *[]byte +} + +// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. +type extensionAdapter struct { + extendableProtoV1 +} + +func (e extensionAdapter) extensionsWrite() map[int32]Extension { + return e.ExtensionMap() +} + +func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { + return e.ExtensionMap(), notLocker{} +} + +// notLocker is a sync.Locker whose Lock and Unlock methods are nops. +type notLocker struct{} + +func (n notLocker) Lock() {} +func (n notLocker) Unlock() {} + +// extendable returns the extendableProto interface for the given generated proto message. +// If the proto message has the old extension format, it returns a wrapper that implements +// the extendableProto interface. +func extendable(p interface{}) (extendableProto, bool) { + if ep, ok := p.(extendableProto); ok { + return ep, ok + } + if ep, ok := p.(extendableProtoV1); ok { + return extensionAdapter{ep}, ok + } + return nil, false +} + +// XXX_InternalExtensions is an internal representation of proto extensions. +// +// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, +// thus gaining the unexported 'extensions' method, which can be called only from the proto package. +// +// The methods of XXX_InternalExtensions are not concurrency safe in general, +// but calls to logically read-only methods such as has and get may be executed concurrently. +type XXX_InternalExtensions struct { + // The struct must be indirect so that if a user inadvertently copies a + // generated message and its embedded XXX_InternalExtensions, they + // avoid the mayhem of a copied mutex. + // + // The mutex serializes all logically read-only operations to p.extensionMap. + // It is up to the client to ensure that write operations to p.extensionMap are + // mutually exclusive with other accesses. + p *struct { + mu sync.Mutex + extensionMap map[int32]Extension + } +} + +// extensionsWrite returns the extension map, creating it on first use. +func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { + if e.p == nil { + e.p = new(struct { + mu sync.Mutex + extensionMap map[int32]Extension + }) + e.p.extensionMap = make(map[int32]Extension) + } + return e.p.extensionMap +} + +// extensionsRead returns the extensions map for read-only use. It may be nil. +// The caller must hold the returned mutex's lock when accessing Elements within the map. +func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { + if e.p == nil { + return nil, nil + } + return e.p.extensionMap, &e.p.mu +} + +type extensionRange interface { + Message + ExtensionRangeArray() []ExtensionRange +} + +var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem() +var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem() +var extendableBytesType = reflect.TypeOf((*extensionsBytes)(nil)).Elem() +var extensionRangeType = reflect.TypeOf((*extensionRange)(nil)).Elem() + +// ExtensionDesc represents an extension specification. +// Used in generated code from the protocol compiler. +type ExtensionDesc struct { + ExtendedType Message // nil pointer to the type that is being extended + ExtensionType interface{} // nil pointer to the extension type + Field int32 // field number + Name string // fully-qualified name of extension, for text formatting + Tag string // protobuf tag style + Filename string // name of the file in which the extension is defined +} + +func (ed *ExtensionDesc) repeated() bool { + t := reflect.TypeOf(ed.ExtensionType) + return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 +} + +// Extension represents an extension in a message. +type Extension struct { + // When an extension is stored in a message using SetExtension + // only desc and value are set. When the message is marshaled + // enc will be set to the encoded form of the message. + // + // When a message is unmarshaled and contains extensions, each + // extension will have only enc set. When such an extension is + // accessed using GetExtension (or GetExtensions) desc and value + // will be set. + desc *ExtensionDesc + value interface{} + enc []byte +} + +// SetRawExtension is for testing only. +func SetRawExtension(base Message, id int32, b []byte) { + if ebase, ok := base.(extensionsBytes); ok { + clearExtension(base, id) + ext := ebase.GetExtensions() + *ext = append(*ext, b...) + return + } + epb, ok := extendable(base) + if !ok { + return + } + extmap := epb.extensionsWrite() + extmap[id] = Extension{enc: b} +} + +// isExtensionField returns true iff the given field number is in an extension range. +func isExtensionField(pb extensionRange, field int32) bool { + for _, er := range pb.ExtensionRangeArray() { + if er.Start <= field && field <= er.End { + return true + } + } + return false +} + +// checkExtensionTypes checks that the given extension is valid for pb. +func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { + var pbi interface{} = pb + // Check the extended type. + if ea, ok := pbi.(extensionAdapter); ok { + pbi = ea.extendableProtoV1 + } + if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { + return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String()) + } + // Check the range. + if !isExtensionField(pb, extension.Field) { + return errors.New("proto: bad extension number; not in declared ranges") + } + return nil +} + +// extPropKey is sufficient to uniquely identify an extension. +type extPropKey struct { + base reflect.Type + field int32 +} + +var extProp = struct { + sync.RWMutex + m map[extPropKey]*Properties +}{ + m: make(map[extPropKey]*Properties), +} + +func extensionProperties(ed *ExtensionDesc) *Properties { + key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} + + extProp.RLock() + if prop, ok := extProp.m[key]; ok { + extProp.RUnlock() + return prop + } + extProp.RUnlock() + + extProp.Lock() + defer extProp.Unlock() + // Check again. + if prop, ok := extProp.m[key]; ok { + return prop + } + + prop := new(Properties) + prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) + extProp.m[key] = prop + return prop +} + +// encode encodes any unmarshaled (unencoded) extensions in e. +func encodeExtensions(e *XXX_InternalExtensions) error { + m, mu := e.extensionsRead() + if m == nil { + return nil // fast path + } + mu.Lock() + defer mu.Unlock() + return encodeExtensionsMap(m) +} + +// encode encodes any unmarshaled (unencoded) extensions in e. +func encodeExtensionsMap(m map[int32]Extension) error { + for k, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + et := reflect.TypeOf(e.desc.ExtensionType) + props := extensionProperties(e.desc) + + p := NewBuffer(nil) + // If e.value has type T, the encoder expects a *struct{ X T }. + // Pass a *T with a zero field and hope it all works out. + x := reflect.New(et) + x.Elem().Set(reflect.ValueOf(e.value)) + if err := props.enc(p, props, toStructPointer(x)); err != nil { + return err + } + e.enc = p.buf + m[k] = e + } + return nil +} + +func extensionsSize(e *XXX_InternalExtensions) (n int) { + m, mu := e.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + defer mu.Unlock() + return extensionsMapSize(m) +} + +func extensionsMapSize(m map[int32]Extension) (n int) { + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + et := reflect.TypeOf(e.desc.ExtensionType) + props := extensionProperties(e.desc) + + // If e.value has type T, the encoder expects a *struct{ X T }. + // Pass a *T with a zero field and hope it all works out. + x := reflect.New(et) + x.Elem().Set(reflect.ValueOf(e.value)) + n += props.size(props, toStructPointer(x)) + } + return +} + +// HasExtension returns whether the given extension is present in pb. +func HasExtension(pb Message, extension *ExtensionDesc) bool { + if epb, doki := pb.(extensionsBytes); doki { + ext := epb.GetExtensions() + buf := *ext + o := 0 + for o < len(buf) { + tag, n := DecodeVarint(buf[o:]) + fieldNum := int32(tag >> 3) + if int32(fieldNum) == extension.Field { + return true + } + wireType := int(tag & 0x7) + o += n + l, err := size(buf[o:], wireType) + if err != nil { + return false + } + o += l + } + return false + } + // TODO: Check types, field numbers, etc.? + epb, ok := extendable(pb) + if !ok { + return false + } + extmap, mu := epb.extensionsRead() + if extmap == nil { + return false + } + mu.Lock() + _, ok = extmap[extension.Field] + mu.Unlock() + return ok +} + +func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int { + ext := pb.GetExtensions() + for offset < len(*ext) { + tag, n1 := DecodeVarint((*ext)[offset:]) + fieldNum := int32(tag >> 3) + wireType := int(tag & 0x7) + n2, err := size((*ext)[offset+n1:], wireType) + if err != nil { + panic(err) + } + newOffset := offset + n1 + n2 + if fieldNum == theFieldNum { + *ext = append((*ext)[:offset], (*ext)[newOffset:]...) + return offset + } + offset = newOffset + } + return -1 +} + +// ClearExtension removes the given extension from pb. +func ClearExtension(pb Message, extension *ExtensionDesc) { + clearExtension(pb, extension.Field) +} + +func clearExtension(pb Message, fieldNum int32) { + if epb, doki := pb.(extensionsBytes); doki { + offset := 0 + for offset != -1 { + offset = deleteExtension(epb, fieldNum, offset) + } + return + } + epb, ok := extendable(pb) + if !ok { + return + } + // TODO: Check types, field numbers, etc.? + extmap := epb.extensionsWrite() + delete(extmap, fieldNum) +} + +// GetExtension parses and returns the given extension of pb. +// If the extension is not present and has no default value it returns ErrMissingExtension. +func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { + if epb, doki := pb.(extensionsBytes); doki { + ext := epb.GetExtensions() + o := 0 + for o < len(*ext) { + tag, n := DecodeVarint((*ext)[o:]) + fieldNum := int32(tag >> 3) + wireType := int(tag & 0x7) + l, err := size((*ext)[o+n:], wireType) + if err != nil { + return nil, err + } + if int32(fieldNum) == extension.Field { + v, err := decodeExtension((*ext)[o:o+n+l], extension) + if err != nil { + return nil, err + } + return v, nil + } + o += n + l + } + return defaultExtensionValue(extension) + } + epb, ok := extendable(pb) + if !ok { + return nil, errors.New("proto: not an extendable proto") + } + if err := checkExtensionTypes(epb, extension); err != nil { + return nil, err + } + + emap, mu := epb.extensionsRead() + if emap == nil { + return defaultExtensionValue(extension) + } + mu.Lock() + defer mu.Unlock() + e, ok := emap[extension.Field] + if !ok { + // defaultExtensionValue returns the default value or + // ErrMissingExtension if there is no default. + return defaultExtensionValue(extension) + } + + if e.value != nil { + // Already decoded. Check the descriptor, though. + if e.desc != extension { + // This shouldn't happen. If it does, it means that + // GetExtension was called twice with two different + // descriptors with the same field number. + return nil, errors.New("proto: descriptor conflict") + } + return e.value, nil + } + + v, err := decodeExtension(e.enc, extension) + if err != nil { + return nil, err + } + + // Remember the decoded version and drop the encoded version. + // That way it is safe to mutate what we return. + e.value = v + e.desc = extension + e.enc = nil + emap[extension.Field] = e + return e.value, nil +} + +// defaultExtensionValue returns the default value for extension. +// If no default for an extension is defined ErrMissingExtension is returned. +func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { + t := reflect.TypeOf(extension.ExtensionType) + props := extensionProperties(extension) + + sf, _, err := fieldDefault(t, props) + if err != nil { + return nil, err + } + + if sf == nil || sf.value == nil { + // There is no default value. + return nil, ErrMissingExtension + } + + if t.Kind() != reflect.Ptr { + // We do not need to return a Ptr, we can directly return sf.value. + return sf.value, nil + } + + // We need to return an interface{} that is a pointer to sf.value. + value := reflect.New(t).Elem() + value.Set(reflect.New(value.Type().Elem())) + if sf.kind == reflect.Int32 { + // We may have an int32 or an enum, but the underlying data is int32. + // Since we can't set an int32 into a non int32 reflect.value directly + // set it as a int32. + value.Elem().SetInt(int64(sf.value.(int32))) + } else { + value.Elem().Set(reflect.ValueOf(sf.value)) + } + return value.Interface(), nil +} + +// decodeExtension decodes an extension encoded in b. +func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { + o := NewBuffer(b) + + t := reflect.TypeOf(extension.ExtensionType) + + props := extensionProperties(extension) + + // t is a pointer to a struct, pointer to basic type or a slice. + // Allocate a "field" to store the pointer/slice itself; the + // pointer/slice will be stored here. We pass + // the address of this field to props.dec. + // This passes a zero field and a *t and lets props.dec + // interpret it as a *struct{ x t }. + value := reflect.New(t).Elem() + + for { + // Discard wire type and field number varint. It isn't needed. + if _, err := o.DecodeVarint(); err != nil { + return nil, err + } + + if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil { + return nil, err + } + + if o.index >= len(o.buf) { + break + } + } + return value.Interface(), nil +} + +// GetExtensions returns a slice of the extensions present in pb that are also listed in es. +// The returned slice has the same length as es; missing extensions will appear as nil elements. +func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { + extensions = make([]interface{}, len(es)) + for i, e := range es { + extensions[i], err = GetExtension(pb, e) + if err == ErrMissingExtension { + err = nil + } + if err != nil { + return + } + } + return +} + +// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. +// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing +// just the Field field, which defines the extension's field number. +func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { + epb, ok := extendable(pb) + if !ok { + return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb) + } + registeredExtensions := RegisteredExtensions(pb) + + emap, mu := epb.extensionsRead() + if emap == nil { + return nil, nil + } + mu.Lock() + defer mu.Unlock() + extensions := make([]*ExtensionDesc, 0, len(emap)) + for extid, e := range emap { + desc := e.desc + if desc == nil { + desc = registeredExtensions[extid] + if desc == nil { + desc = &ExtensionDesc{Field: extid} + } + } + + extensions = append(extensions, desc) + } + return extensions, nil +} + +// SetExtension sets the specified extension of pb to the specified value. +func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { + if epb, doki := pb.(extensionsBytes); doki { + ClearExtension(pb, extension) + ext := epb.GetExtensions() + et := reflect.TypeOf(extension.ExtensionType) + props := extensionProperties(extension) + p := NewBuffer(nil) + x := reflect.New(et) + x.Elem().Set(reflect.ValueOf(value)) + if err := props.enc(p, props, toStructPointer(x)); err != nil { + return err + } + *ext = append(*ext, p.buf...) + return nil + } + epb, ok := extendable(pb) + if !ok { + return errors.New("proto: not an extendable proto") + } + if err := checkExtensionTypes(epb, extension); err != nil { + return err + } + typ := reflect.TypeOf(extension.ExtensionType) + if typ != reflect.TypeOf(value) { + return errors.New("proto: bad extension value type") + } + // nil extension values need to be caught early, because the + // encoder can't distinguish an ErrNil due to a nil extension + // from an ErrNil due to a missing field. Extensions are + // always optional, so the encoder would just swallow the error + // and drop all the extensions from the encoded message. + if reflect.ValueOf(value).IsNil() { + return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) + } + + extmap := epb.extensionsWrite() + extmap[extension.Field] = Extension{desc: extension, value: value} + return nil +} + +// ClearAllExtensions clears all extensions from pb. +func ClearAllExtensions(pb Message) { + if epb, doki := pb.(extensionsBytes); doki { + ext := epb.GetExtensions() + *ext = []byte{} + return + } + epb, ok := extendable(pb) + if !ok { + return + } + m := epb.extensionsWrite() + for k := range m { + delete(m, k) + } +} + +// A global registry of extensions. +// The generated code will register the generated descriptors by calling RegisterExtension. + +var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) + +// RegisterExtension is called from the generated code. +func RegisterExtension(desc *ExtensionDesc) { + st := reflect.TypeOf(desc.ExtendedType).Elem() + m := extensionMaps[st] + if m == nil { + m = make(map[int32]*ExtensionDesc) + extensionMaps[st] = m + } + if _, ok := m[desc.Field]; ok { + panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) + } + m[desc.Field] = desc +} + +// RegisteredExtensions returns a map of the registered extensions of a +// protocol buffer struct, indexed by the extension number. +// The argument pb should be a nil pointer to the struct type. +func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { + return extensionMaps[reflect.TypeOf(pb).Elem()] +} diff --git a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go new file mode 100644 index 0000000..ea6478f --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go @@ -0,0 +1,294 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "bytes" + "errors" + "fmt" + "reflect" + "sort" + "strings" + "sync" +) + +func GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset bool) bool { + if reflect.ValueOf(pb).IsNil() { + return ifnotset + } + value, err := GetExtension(pb, extension) + if err != nil { + return ifnotset + } + if value == nil { + return ifnotset + } + if value.(*bool) == nil { + return ifnotset + } + return *(value.(*bool)) +} + +func (this *Extension) Equal(that *Extension) bool { + return bytes.Equal(this.enc, that.enc) +} + +func (this *Extension) Compare(that *Extension) int { + return bytes.Compare(this.enc, that.enc) +} + +func SizeOfInternalExtension(m extendableProto) (n int) { + return SizeOfExtensionMap(m.extensionsWrite()) +} + +func SizeOfExtensionMap(m map[int32]Extension) (n int) { + return extensionsMapSize(m) +} + +type sortableMapElem struct { + field int32 + ext Extension +} + +func newSortableExtensionsFromMap(m map[int32]Extension) sortableExtensions { + s := make(sortableExtensions, 0, len(m)) + for k, v := range m { + s = append(s, &sortableMapElem{field: k, ext: v}) + } + return s +} + +type sortableExtensions []*sortableMapElem + +func (this sortableExtensions) Len() int { return len(this) } + +func (this sortableExtensions) Swap(i, j int) { this[i], this[j] = this[j], this[i] } + +func (this sortableExtensions) Less(i, j int) bool { return this[i].field < this[j].field } + +func (this sortableExtensions) String() string { + sort.Sort(this) + ss := make([]string, len(this)) + for i := range this { + ss[i] = fmt.Sprintf("%d: %v", this[i].field, this[i].ext) + } + return "map[" + strings.Join(ss, ",") + "]" +} + +func StringFromInternalExtension(m extendableProto) string { + return StringFromExtensionsMap(m.extensionsWrite()) +} + +func StringFromExtensionsMap(m map[int32]Extension) string { + return newSortableExtensionsFromMap(m).String() +} + +func StringFromExtensionsBytes(ext []byte) string { + m, err := BytesToExtensionsMap(ext) + if err != nil { + panic(err) + } + return StringFromExtensionsMap(m) +} + +func EncodeInternalExtension(m extendableProto, data []byte) (n int, err error) { + return EncodeExtensionMap(m.extensionsWrite(), data) +} + +func EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err error) { + if err := encodeExtensionsMap(m); err != nil { + return 0, err + } + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + for _, k := range keys { + n += copy(data[n:], m[int32(k)].enc) + } + return n, nil +} + +func GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) { + if m[id].value == nil || m[id].desc == nil { + return m[id].enc, nil + } + if err := encodeExtensionsMap(m); err != nil { + return nil, err + } + return m[id].enc, nil +} + +func size(buf []byte, wire int) (int, error) { + switch wire { + case WireVarint: + _, n := DecodeVarint(buf) + return n, nil + case WireFixed64: + return 8, nil + case WireBytes: + v, n := DecodeVarint(buf) + return int(v) + n, nil + case WireFixed32: + return 4, nil + case WireStartGroup: + offset := 0 + for { + u, n := DecodeVarint(buf[offset:]) + fwire := int(u & 0x7) + offset += n + if fwire == WireEndGroup { + return offset, nil + } + s, err := size(buf[offset:], wire) + if err != nil { + return 0, err + } + offset += s + } + } + return 0, fmt.Errorf("proto: can't get size for unknown wire type %d", wire) +} + +func BytesToExtensionsMap(buf []byte) (map[int32]Extension, error) { + m := make(map[int32]Extension) + i := 0 + for i < len(buf) { + tag, n := DecodeVarint(buf[i:]) + if n <= 0 { + return nil, fmt.Errorf("unable to decode varint") + } + fieldNum := int32(tag >> 3) + wireType := int(tag & 0x7) + l, err := size(buf[i+n:], wireType) + if err != nil { + return nil, err + } + end := i + int(l) + n + m[int32(fieldNum)] = Extension{enc: buf[i:end]} + i = end + } + return m, nil +} + +func NewExtension(e []byte) Extension { + ee := Extension{enc: make([]byte, len(e))} + copy(ee.enc, e) + return ee +} + +func AppendExtension(e Message, tag int32, buf []byte) { + if ee, eok := e.(extensionsBytes); eok { + ext := ee.GetExtensions() + *ext = append(*ext, buf...) + return + } + if ee, eok := e.(extendableProto); eok { + m := ee.extensionsWrite() + ext := m[int32(tag)] // may be missing + ext.enc = append(ext.enc, buf...) + m[int32(tag)] = ext + } +} + +func encodeExtension(e *Extension) error { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + return nil + } + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + et := reflect.TypeOf(e.desc.ExtensionType) + props := extensionProperties(e.desc) + + p := NewBuffer(nil) + // If e.value has type T, the encoder expects a *struct{ X T }. + // Pass a *T with a zero field and hope it all works out. + x := reflect.New(et) + x.Elem().Set(reflect.ValueOf(e.value)) + if err := props.enc(p, props, toStructPointer(x)); err != nil { + return err + } + e.enc = p.buf + return nil +} + +func (this Extension) GoString() string { + if this.enc == nil { + if err := encodeExtension(&this); err != nil { + panic(err) + } + } + return fmt.Sprintf("proto.NewExtension(%#v)", this.enc) +} + +func SetUnsafeExtension(pb Message, fieldNum int32, value interface{}) error { + typ := reflect.TypeOf(pb).Elem() + ext, ok := extensionMaps[typ] + if !ok { + return fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String()) + } + desc, ok := ext[fieldNum] + if !ok { + return errors.New("proto: bad extension number; not in declared ranges") + } + return SetExtension(pb, desc, value) +} + +func GetUnsafeExtension(pb Message, fieldNum int32) (interface{}, error) { + typ := reflect.TypeOf(pb).Elem() + ext, ok := extensionMaps[typ] + if !ok { + return nil, fmt.Errorf("proto: bad extended type; %s is not extendable", typ.String()) + } + desc, ok := ext[fieldNum] + if !ok { + return nil, fmt.Errorf("unregistered field number %d", fieldNum) + } + return GetExtension(pb, desc) +} + +func NewUnsafeXXX_InternalExtensions(m map[int32]Extension) XXX_InternalExtensions { + x := &XXX_InternalExtensions{ + p: new(struct { + mu sync.Mutex + extensionMap map[int32]Extension + }), + } + x.p.extensionMap = m + return *x +} + +func GetUnsafeExtensionsMap(extendable Message) map[int32]Extension { + pb := extendable.(extendableProto) + return pb.extensionsWrite() +} diff --git a/vendor/github.com/gogo/protobuf/proto/lib.go b/vendor/github.com/gogo/protobuf/proto/lib.go new file mode 100644 index 0000000..7580bb4 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/lib.go @@ -0,0 +1,898 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package proto converts data structures to and from the wire format of +protocol buffers. It works in concert with the Go source code generated +for .proto files by the protocol compiler. + +A summary of the properties of the protocol buffer interface +for a protocol buffer variable v: + + - Names are turned from camel_case to CamelCase for export. + - There are no methods on v to set fields; just treat + them as structure fields. + - There are getters that return a field's value if set, + and return the field's default value if unset. + The getters work even if the receiver is a nil message. + - The zero value for a struct is its correct initialization state. + All desired fields must be set before marshaling. + - A Reset() method will restore a protobuf struct to its zero state. + - Non-repeated fields are pointers to the values; nil means unset. + That is, optional or required field int32 f becomes F *int32. + - Repeated fields are slices. + - Helper functions are available to aid the setting of fields. + msg.Foo = proto.String("hello") // set field + - Constants are defined to hold the default values of all fields that + have them. They have the form Default_StructName_FieldName. + Because the getter methods handle defaulted values, + direct use of these constants should be rare. + - Enums are given type names and maps from names to values. + Enum values are prefixed by the enclosing message's name, or by the + enum's type name if it is a top-level enum. Enum types have a String + method, and a Enum method to assist in message construction. + - Nested messages, groups and enums have type names prefixed with the name of + the surrounding message type. + - Extensions are given descriptor names that start with E_, + followed by an underscore-delimited list of the nested messages + that contain it (if any) followed by the CamelCased name of the + extension field itself. HasExtension, ClearExtension, GetExtension + and SetExtension are functions for manipulating extensions. + - Oneof field sets are given a single field in their message, + with distinguished wrapper types for each possible field value. + - Marshal and Unmarshal are functions to encode and decode the wire format. + +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Getters are only generated for message and oneof fields. + - Enum types do not get an Enum method. + +The simplest way to describe this is to see an example. +Given file test.proto, containing + + package example; + + enum FOO { X = 17; } + + message Test { + required string label = 1; + optional int32 type = 2 [default=77]; + repeated int64 reps = 3; + optional group OptionalGroup = 4 { + required string RequiredField = 5; + } + oneof union { + int32 number = 6; + string name = 7; + } + } + +The resulting file, test.pb.go, is: + + package example + + import proto "github.com/gogo/protobuf/proto" + import math "math" + + type FOO int32 + const ( + FOO_X FOO = 17 + ) + var FOO_name = map[int32]string{ + 17: "X", + } + var FOO_value = map[string]int32{ + "X": 17, + } + + func (x FOO) Enum() *FOO { + p := new(FOO) + *p = x + return p + } + func (x FOO) String() string { + return proto.EnumName(FOO_name, int32(x)) + } + func (x *FOO) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FOO_value, data) + if err != nil { + return err + } + *x = FOO(value) + return nil + } + + type Test struct { + Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` + Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` + Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` + Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` + // Types that are valid to be assigned to Union: + // *Test_Number + // *Test_Name + Union isTest_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` + } + func (m *Test) Reset() { *m = Test{} } + func (m *Test) String() string { return proto.CompactTextString(m) } + func (*Test) ProtoMessage() {} + + type isTest_Union interface { + isTest_Union() + } + + type Test_Number struct { + Number int32 `protobuf:"varint,6,opt,name=number"` + } + type Test_Name struct { + Name string `protobuf:"bytes,7,opt,name=name"` + } + + func (*Test_Number) isTest_Union() {} + func (*Test_Name) isTest_Union() {} + + func (m *Test) GetUnion() isTest_Union { + if m != nil { + return m.Union + } + return nil + } + const Default_Test_Type int32 = 77 + + func (m *Test) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" + } + + func (m *Test) GetType() int32 { + if m != nil && m.Type != nil { + return *m.Type + } + return Default_Test_Type + } + + func (m *Test) GetOptionalgroup() *Test_OptionalGroup { + if m != nil { + return m.Optionalgroup + } + return nil + } + + type Test_OptionalGroup struct { + RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` + } + func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } + func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } + + func (m *Test_OptionalGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" + } + + func (m *Test) GetNumber() int32 { + if x, ok := m.GetUnion().(*Test_Number); ok { + return x.Number + } + return 0 + } + + func (m *Test) GetName() string { + if x, ok := m.GetUnion().(*Test_Name); ok { + return x.Name + } + return "" + } + + func init() { + proto.RegisterEnum("example.FOO", FOO_name, FOO_value) + } + +To create and play with a Test object: + + package main + + import ( + "log" + + "github.com/gogo/protobuf/proto" + pb "./example.pb" + ) + + func main() { + test := &pb.Test{ + Label: proto.String("hello"), + Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, + Optionalgroup: &pb.Test_OptionalGroup{ + RequiredField: proto.String("good bye"), + }, + Union: &pb.Test_Name{"fred"}, + } + data, err := proto.Marshal(test) + if err != nil { + log.Fatal("marshaling error: ", err) + } + newTest := &pb.Test{} + err = proto.Unmarshal(data, newTest) + if err != nil { + log.Fatal("unmarshaling error: ", err) + } + // Now test and newTest contain the same data. + if test.GetLabel() != newTest.GetLabel() { + log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) + } + // Use a type switch to determine which oneof was set. + switch u := test.Union.(type) { + case *pb.Test_Number: // u.Number contains the number. + case *pb.Test_Name: // u.Name contains the string. + } + // etc. + } +*/ +package proto + +import ( + "encoding/json" + "fmt" + "log" + "reflect" + "sort" + "strconv" + "sync" +) + +// Message is implemented by generated protocol buffer messages. +type Message interface { + Reset() + String() string + ProtoMessage() +} + +// Stats records allocation details about the protocol buffer encoders +// and decoders. Useful for tuning the library itself. +type Stats struct { + Emalloc uint64 // mallocs in encode + Dmalloc uint64 // mallocs in decode + Encode uint64 // number of encodes + Decode uint64 // number of decodes + Chit uint64 // number of cache hits + Cmiss uint64 // number of cache misses + Size uint64 // number of sizes +} + +// Set to true to enable stats collection. +const collectStats = false + +var stats Stats + +// GetStats returns a copy of the global Stats structure. +func GetStats() Stats { return stats } + +// A Buffer is a buffer manager for marshaling and unmarshaling +// protocol buffers. It may be reused between invocations to +// reduce memory usage. It is not necessary to use a Buffer; +// the global functions Marshal and Unmarshal create a +// temporary Buffer and are fine for most applications. +type Buffer struct { + buf []byte // encode/decode byte stream + index int // read point + + // pools of basic types to amortize allocation. + bools []bool + uint32s []uint32 + uint64s []uint64 + + // extra pools, only used with pointer_reflect.go + int32s []int32 + int64s []int64 + float32s []float32 + float64s []float64 +} + +// NewBuffer allocates a new Buffer and initializes its internal data to +// the contents of the argument slice. +func NewBuffer(e []byte) *Buffer { + return &Buffer{buf: e} +} + +// Reset resets the Buffer, ready for marshaling a new protocol buffer. +func (p *Buffer) Reset() { + p.buf = p.buf[0:0] // for reading/writing + p.index = 0 // for reading +} + +// SetBuf replaces the internal buffer with the slice, +// ready for unmarshaling the contents of the slice. +func (p *Buffer) SetBuf(s []byte) { + p.buf = s + p.index = 0 +} + +// Bytes returns the contents of the Buffer. +func (p *Buffer) Bytes() []byte { return p.buf } + +/* + * Helper routines for simplifying the creation of optional fields of basic type. + */ + +// Bool is a helper routine that allocates a new bool value +// to store v and returns a pointer to it. +func Bool(v bool) *bool { + return &v +} + +// Int32 is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it. +func Int32(v int32) *int32 { + return &v +} + +// Int is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it, but unlike Int32 +// its argument value is an int. +func Int(v int) *int32 { + p := new(int32) + *p = int32(v) + return p +} + +// Int64 is a helper routine that allocates a new int64 value +// to store v and returns a pointer to it. +func Int64(v int64) *int64 { + return &v +} + +// Float32 is a helper routine that allocates a new float32 value +// to store v and returns a pointer to it. +func Float32(v float32) *float32 { + return &v +} + +// Float64 is a helper routine that allocates a new float64 value +// to store v and returns a pointer to it. +func Float64(v float64) *float64 { + return &v +} + +// Uint32 is a helper routine that allocates a new uint32 value +// to store v and returns a pointer to it. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint64 is a helper routine that allocates a new uint64 value +// to store v and returns a pointer to it. +func Uint64(v uint64) *uint64 { + return &v +} + +// String is a helper routine that allocates a new string value +// to store v and returns a pointer to it. +func String(v string) *string { + return &v +} + +// EnumName is a helper function to simplify printing protocol buffer enums +// by name. Given an enum map and a value, it returns a useful string. +func EnumName(m map[int32]string, v int32) string { + s, ok := m[v] + if ok { + return s + } + return strconv.Itoa(int(v)) +} + +// UnmarshalJSONEnum is a helper function to simplify recovering enum int values +// from their JSON-encoded representation. Given a map from the enum's symbolic +// names to its int values, and a byte buffer containing the JSON-encoded +// value, it returns an int32 that can be cast to the enum type by the caller. +// +// The function can deal with both JSON representations, numeric and symbolic. +func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { + if data[0] == '"' { + // New style: enums are strings. + var repr string + if err := json.Unmarshal(data, &repr); err != nil { + return -1, err + } + val, ok := m[repr] + if !ok { + return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) + } + return val, nil + } + // Old style: enums are ints. + var val int32 + if err := json.Unmarshal(data, &val); err != nil { + return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) + } + return val, nil +} + +// DebugPrint dumps the encoded data in b in a debugging format with a header +// including the string s. Used in testing but made available for general debugging. +func (p *Buffer) DebugPrint(s string, b []byte) { + var u uint64 + + obuf := p.buf + sindex := p.index + p.buf = b + p.index = 0 + depth := 0 + + fmt.Printf("\n--- %s ---\n", s) + +out: + for { + for i := 0; i < depth; i++ { + fmt.Print(" ") + } + + index := p.index + if index == len(p.buf) { + break + } + + op, err := p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: fetching op err %v\n", index, err) + break out + } + tag := op >> 3 + wire := op & 7 + + switch wire { + default: + fmt.Printf("%3d: t=%3d unknown wire=%d\n", + index, tag, wire) + break out + + case WireBytes: + var r []byte + + r, err = p.DecodeRawBytes(false) + if err != nil { + break out + } + fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) + if len(r) <= 6 { + for i := 0; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } else { + for i := 0; i < 3; i++ { + fmt.Printf(" %.2x", r[i]) + } + fmt.Printf(" ..") + for i := len(r) - 3; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } + fmt.Printf("\n") + + case WireFixed32: + u, err = p.DecodeFixed32() + if err != nil { + fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) + + case WireFixed64: + u, err = p.DecodeFixed64() + if err != nil { + fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) + + case WireVarint: + u, err = p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) + + case WireStartGroup: + fmt.Printf("%3d: t=%3d start\n", index, tag) + depth++ + + case WireEndGroup: + depth-- + fmt.Printf("%3d: t=%3d end\n", index, tag) + } + } + + if depth != 0 { + fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) + } + fmt.Printf("\n") + + p.buf = obuf + p.index = sindex +} + +// SetDefaults sets unset protocol buffer fields to their default values. +// It only modifies fields that are both unset and have defined defaults. +// It recursively sets default values in any non-nil sub-messages. +func SetDefaults(pb Message) { + setDefaults(reflect.ValueOf(pb), true, false) +} + +// v is a pointer to a struct. +func setDefaults(v reflect.Value, recur, zeros bool) { + v = v.Elem() + + defaultMu.RLock() + dm, ok := defaults[v.Type()] + defaultMu.RUnlock() + if !ok { + dm = buildDefaultMessage(v.Type()) + defaultMu.Lock() + defaults[v.Type()] = dm + defaultMu.Unlock() + } + + for _, sf := range dm.scalars { + f := v.Field(sf.index) + if !f.IsNil() { + // field already set + continue + } + dv := sf.value + if dv == nil && !zeros { + // no explicit default, and don't want to set zeros + continue + } + fptr := f.Addr().Interface() // **T + // TODO: Consider batching the allocations we do here. + switch sf.kind { + case reflect.Bool: + b := new(bool) + if dv != nil { + *b = dv.(bool) + } + *(fptr.(**bool)) = b + case reflect.Float32: + f := new(float32) + if dv != nil { + *f = dv.(float32) + } + *(fptr.(**float32)) = f + case reflect.Float64: + f := new(float64) + if dv != nil { + *f = dv.(float64) + } + *(fptr.(**float64)) = f + case reflect.Int32: + // might be an enum + if ft := f.Type(); ft != int32PtrType { + // enum + f.Set(reflect.New(ft.Elem())) + if dv != nil { + f.Elem().SetInt(int64(dv.(int32))) + } + } else { + // int32 field + i := new(int32) + if dv != nil { + *i = dv.(int32) + } + *(fptr.(**int32)) = i + } + case reflect.Int64: + i := new(int64) + if dv != nil { + *i = dv.(int64) + } + *(fptr.(**int64)) = i + case reflect.String: + s := new(string) + if dv != nil { + *s = dv.(string) + } + *(fptr.(**string)) = s + case reflect.Uint8: + // exceptional case: []byte + var b []byte + if dv != nil { + db := dv.([]byte) + b = make([]byte, len(db)) + copy(b, db) + } else { + b = []byte{} + } + *(fptr.(*[]byte)) = b + case reflect.Uint32: + u := new(uint32) + if dv != nil { + *u = dv.(uint32) + } + *(fptr.(**uint32)) = u + case reflect.Uint64: + u := new(uint64) + if dv != nil { + *u = dv.(uint64) + } + *(fptr.(**uint64)) = u + default: + log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) + } + } + + for _, ni := range dm.nested { + f := v.Field(ni) + // f is *T or []*T or map[T]*T + switch f.Kind() { + case reflect.Ptr: + if f.IsNil() { + continue + } + setDefaults(f, recur, zeros) + + case reflect.Slice: + for i := 0; i < f.Len(); i++ { + e := f.Index(i) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + + case reflect.Map: + for _, k := range f.MapKeys() { + e := f.MapIndex(k) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + } + } +} + +var ( + // defaults maps a protocol buffer struct type to a slice of the fields, + // with its scalar fields set to their proto-declared non-zero default values. + defaultMu sync.RWMutex + defaults = make(map[reflect.Type]defaultMessage) + + int32PtrType = reflect.TypeOf((*int32)(nil)) +) + +// defaultMessage represents information about the default values of a message. +type defaultMessage struct { + scalars []scalarField + nested []int // struct field index of nested messages +} + +type scalarField struct { + index int // struct field index + kind reflect.Kind // element type (the T in *T or []T) + value interface{} // the proto-declared default value, or nil +} + +// t is a struct type. +func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { + sprop := GetProperties(t) + for _, prop := range sprop.Prop { + fi, ok := sprop.decoderTags.get(prop.Tag) + if !ok { + // XXX_unrecognized + continue + } + ft := t.Field(fi).Type + + sf, nested, err := fieldDefault(ft, prop) + switch { + case err != nil: + log.Print(err) + case nested: + dm.nested = append(dm.nested, fi) + case sf != nil: + sf.index = fi + dm.scalars = append(dm.scalars, *sf) + } + } + + return dm +} + +// fieldDefault returns the scalarField for field type ft. +// sf will be nil if the field can not have a default. +// nestedMessage will be true if this is a nested message. +// Note that sf.index is not set on return. +func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { + var canHaveDefault bool + switch ft.Kind() { + case reflect.Ptr: + if ft.Elem().Kind() == reflect.Struct { + nestedMessage = true + } else { + canHaveDefault = true // proto2 scalar field + } + + case reflect.Slice: + switch ft.Elem().Kind() { + case reflect.Ptr: + nestedMessage = true // repeated message + case reflect.Uint8: + canHaveDefault = true // bytes field + } + + case reflect.Map: + if ft.Elem().Kind() == reflect.Ptr { + nestedMessage = true // map with message values + } + } + + if !canHaveDefault { + if nestedMessage { + return nil, true, nil + } + return nil, false, nil + } + + // We now know that ft is a pointer or slice. + sf = &scalarField{kind: ft.Elem().Kind()} + + // scalar fields without defaults + if !prop.HasDefault { + return sf, false, nil + } + + // a scalar field: either *T or []byte + switch ft.Elem().Kind() { + case reflect.Bool: + x, err := strconv.ParseBool(prop.Default) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Float32: + x, err := strconv.ParseFloat(prop.Default, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) + } + sf.value = float32(x) + case reflect.Float64: + x, err := strconv.ParseFloat(prop.Default, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Int32: + x, err := strconv.ParseInt(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) + } + sf.value = int32(x) + case reflect.Int64: + x, err := strconv.ParseInt(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.String: + sf.value = prop.Default + case reflect.Uint8: + // []byte (not *uint8) + sf.value = []byte(prop.Default) + case reflect.Uint32: + x, err := strconv.ParseUint(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) + } + sf.value = uint32(x) + case reflect.Uint64: + x, err := strconv.ParseUint(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) + } + sf.value = x + default: + return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) + } + + return sf, false, nil +} + +// Map fields may have key types of non-float scalars, strings and enums. +// The easiest way to sort them in some deterministic order is to use fmt. +// If this turns out to be inefficient we can always consider other options, +// such as doing a Schwartzian transform. + +func mapKeys(vs []reflect.Value) sort.Interface { + s := mapKeySorter{ + vs: vs, + // default Less function: textual comparison + less: func(a, b reflect.Value) bool { + return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface()) + }, + } + + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps; + // numeric keys are sorted numerically. + if len(vs) == 0 { + return s + } + switch vs[0].Kind() { + case reflect.Int32, reflect.Int64: + s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } + case reflect.Uint32, reflect.Uint64: + s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } + } + + return s +} + +type mapKeySorter struct { + vs []reflect.Value + less func(a, b reflect.Value) bool +} + +func (s mapKeySorter) Len() int { return len(s.vs) } +func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } +func (s mapKeySorter) Less(i, j int) bool { + return s.less(s.vs[i], s.vs[j]) +} + +// isProto3Zero reports whether v is a zero proto3 value. +func isProto3Zero(v reflect.Value) bool { + switch v.Kind() { + case reflect.Bool: + return !v.Bool() + case reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint32, reflect.Uint64: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.String: + return v.String() == "" + } + return false +} + +// ProtoPackageIsVersion2 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const GoGoProtoPackageIsVersion2 = true + +// ProtoPackageIsVersion1 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const GoGoProtoPackageIsVersion1 = true diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib_gogo.go b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go similarity index 91% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib_gogo.go rename to vendor/github.com/gogo/protobuf/proto/lib_gogo.go index a6c2c06..4b4f7c9 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go @@ -1,5 +1,7 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set.go b/vendor/github.com/gogo/protobuf/proto/message_set.go similarity index 79% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set.go rename to vendor/github.com/gogo/protobuf/proto/message_set.go index 9d912bc..fd982de 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set.go +++ b/vendor/github.com/gogo/protobuf/proto/message_set.go @@ -44,11 +44,11 @@ import ( "sort" ) -// ErrNoMessageTypeId occurs when a protocol buffer does not have a message type ID. +// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. // A message type ID is required for storing a protocol buffer in a message set. -var ErrNoMessageTypeId = errors.New("proto does not have a message type ID") +var errNoMessageTypeID = errors.New("proto does not have a message type ID") -// The first two types (_MessageSet_Item and MessageSet) +// The first two types (_MessageSet_Item and messageSet) // model what the protocol compiler produces for the following protocol message: // message MessageSet { // repeated group Item = 1 { @@ -58,27 +58,20 @@ var ErrNoMessageTypeId = errors.New("proto does not have a message type ID") // } // That is the MessageSet wire format. We can't use a proto to generate these // because that would introduce a circular dependency between it and this package. -// -// When a proto1 proto has a field that looks like: -// optional message info = 3; -// the protocol compiler produces a field in the generated struct that looks like: -// Info *_proto_.MessageSet `protobuf:"bytes,3,opt,name=info"` -// The package is automatically inserted so there is no need for that proto file to -// import this package. type _MessageSet_Item struct { TypeId *int32 `protobuf:"varint,2,req,name=type_id"` Message []byte `protobuf:"bytes,3,req,name=message"` } -type MessageSet struct { +type messageSet struct { Item []*_MessageSet_Item `protobuf:"group,1,rep"` XXX_unrecognized []byte // TODO: caching? } -// Make sure MessageSet is a Message. -var _ Message = (*MessageSet)(nil) +// Make sure messageSet is a Message. +var _ Message = (*messageSet)(nil) // messageTypeIder is an interface satisfied by a protocol buffer type // that may be stored in a MessageSet. @@ -86,7 +79,7 @@ type messageTypeIder interface { MessageTypeId() int32 } -func (ms *MessageSet) find(pb Message) *_MessageSet_Item { +func (ms *messageSet) find(pb Message) *_MessageSet_Item { mti, ok := pb.(messageTypeIder) if !ok { return nil @@ -100,24 +93,24 @@ func (ms *MessageSet) find(pb Message) *_MessageSet_Item { return nil } -func (ms *MessageSet) Has(pb Message) bool { +func (ms *messageSet) Has(pb Message) bool { if ms.find(pb) != nil { return true } return false } -func (ms *MessageSet) Unmarshal(pb Message) error { +func (ms *messageSet) Unmarshal(pb Message) error { if item := ms.find(pb); item != nil { return Unmarshal(item.Message, pb) } if _, ok := pb.(messageTypeIder); !ok { - return ErrNoMessageTypeId + return errNoMessageTypeID } return nil // TODO: return error instead? } -func (ms *MessageSet) Marshal(pb Message) error { +func (ms *messageSet) Marshal(pb Message) error { msg, err := Marshal(pb) if err != nil { return err @@ -130,7 +123,7 @@ func (ms *MessageSet) Marshal(pb Message) error { mti, ok := pb.(messageTypeIder) if !ok { - return ErrNoMessageTypeId + return errNoMessageTypeID } mtid := mti.MessageTypeId() @@ -141,9 +134,9 @@ func (ms *MessageSet) Marshal(pb Message) error { return nil } -func (ms *MessageSet) Reset() { *ms = MessageSet{} } -func (ms *MessageSet) String() string { return CompactTextString(ms) } -func (*MessageSet) ProtoMessage() {} +func (ms *messageSet) Reset() { *ms = messageSet{} } +func (ms *messageSet) String() string { return CompactTextString(ms) } +func (*messageSet) ProtoMessage() {} // Support for the message_set_wire_format message option. @@ -156,9 +149,21 @@ func skipVarint(buf []byte) []byte { // MarshalMessageSet encodes the extension map represented by m in the message set wire format. // It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { - if err := encodeExtensionMap(m); err != nil { - return nil, err +func MarshalMessageSet(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + if err := encodeExtensions(exts); err != nil { + return nil, err + } + m, _ = exts.extensionsRead() + case map[int32]Extension: + if err := encodeExtensionsMap(exts); err != nil { + return nil, err + } + m = exts + default: + return nil, errors.New("proto: not an extension map") } // Sort extension IDs to provide a deterministic encoding. @@ -169,7 +174,7 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { } sort.Ints(ids) - ms := &MessageSet{Item: make([]*_MessageSet_Item, 0, len(m))} + ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))} for _, id := range ids { e := m[int32(id)] // Remove the wire type and field number varint, as well as the length varint. @@ -185,8 +190,18 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { // UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. // It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { - ms := new(MessageSet) +func UnmarshalMessageSet(buf []byte, exts interface{}) error { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m = exts.extensionsWrite() + case map[int32]Extension: + m = exts + default: + return errors.New("proto: not an extension map") + } + + ms := new(messageSet) if err := Unmarshal(buf, ms); err != nil { return err } @@ -216,7 +231,16 @@ func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { // MarshalMessageSetJSON encodes the extension map represented by m in JSON format. // It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(m map[int32]Extension) ([]byte, error) { +func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m, _ = exts.extensionsRead() + case map[int32]Extension: + m = exts + default: + return nil, errors.New("proto: not an extension map") + } var b bytes.Buffer b.WriteByte('{') @@ -259,7 +283,7 @@ func MarshalMessageSetJSON(m map[int32]Extension) ([]byte, error) { // UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. // It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, m map[int32]Extension) error { +func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { // Common-case fast path. if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { return nil diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_reflect.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go similarity index 97% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_reflect.go rename to vendor/github.com/gogo/protobuf/proto/pointer_reflect.go index c68b125..fb512e2 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_reflect.go +++ b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build appengine +// +build appengine js // This file contains an implementation of proto field accesses using package reflect. // It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can @@ -139,13 +139,18 @@ func structPointer_StringSlice(p structPointer, f field) *[]string { return structPointer_ifield(p, f).(*[]string) } +// Extensions returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return structPointer_ifield(p, f).(*XXX_InternalExtensions) +} + // ExtMap returns the address of an extension map field in the struct. func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { return structPointer_ifield(p, f).(*map[int32]Extension) } -// Map returns the reflect.Value for the address of a map field in the struct. -func structPointer_Map(p structPointer, f field, typ reflect.Type) reflect.Value { +// NewAt returns the reflect.Value for a pointer to a field in the struct. +func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { return structPointer_field(p, f).Addr() } diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go new file mode 100644 index 0000000..1763a5f --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go @@ -0,0 +1,85 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2016, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build appengine js + +package proto + +import ( + "reflect" +) + +func structPointer_FieldPointer(p structPointer, f field) structPointer { + panic("not implemented") +} + +func appendStructPointer(base structPointer, f field, typ reflect.Type) structPointer { + panic("not implemented") +} + +func structPointer_InterfaceAt(p structPointer, f field, t reflect.Type) interface{} { + panic("not implemented") +} + +func structPointer_InterfaceRef(p structPointer, f field, t reflect.Type) interface{} { + panic("not implemented") +} + +func structPointer_GetRefStructPointer(p structPointer, f field) structPointer { + panic("not implemented") +} + +func structPointer_Add(p structPointer, size field) structPointer { + panic("not implemented") +} + +func structPointer_Len(p structPointer, f field) int { + panic("not implemented") +} + +func structPointer_GetSliceHeader(p structPointer, f field) *reflect.SliceHeader { + panic("not implemented") +} + +func structPointer_Copy(oldptr structPointer, newptr structPointer, size int) { + panic("not implemented") +} + +func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice { + panic("not implemented") +} + +type structRefSlice struct{} + +func (v *structRefSlice) Len() int { + panic("not implemented") +} + +func (v *structRefSlice) Index(i int) structPointer { + panic("not implemented") +} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_unsafe.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go similarity index 96% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_unsafe.go rename to vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go index 48bc0fa..6b5567d 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_unsafe.go +++ b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build !appengine +// +build !appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. @@ -126,12 +126,16 @@ func structPointer_StringSlice(p structPointer, f field) *[]string { } // ExtMap returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f))) +} + func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// Map returns the reflect.Value for the address of a map field in the struct. -func structPointer_Map(p structPointer, f field, typ reflect.Type) reflect.Value { +// NewAt returns the reflect.Value for a pointer to a field in the struct. +func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f))) } diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go similarity index 78% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go rename to vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go index 6bc85fa..f156a29 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go @@ -1,5 +1,7 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -24,7 +26,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build !appengine +// +build !appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. @@ -70,16 +72,13 @@ func structPointer_Copy(oldptr structPointer, newptr structPointer, size int) { func appendStructPointer(base structPointer, f field, typ reflect.Type) structPointer { size := typ.Elem().Size() + oldHeader := structPointer_GetSliceHeader(base, f) + oldSlice := reflect.NewAt(typ, unsafe.Pointer(oldHeader)).Elem() newLen := oldHeader.Len + 1 - slice := reflect.MakeSlice(typ, newLen, newLen) - bas := toStructPointer(slice) - for i := 0; i < oldHeader.Len; i++ { - newElemptr := uintptr(bas) + uintptr(i)*size - oldElemptr := oldHeader.Data + uintptr(i)*size - copyUintPtr(oldElemptr, newElemptr, int(size)) - } - + newSlice := reflect.MakeSlice(typ, newLen, newLen) + reflect.Copy(newSlice, oldSlice) + bas := toStructPointer(newSlice) oldHeader.Data = uintptr(bas) oldHeader.Len = newLen oldHeader.Cap = newLen @@ -106,3 +105,24 @@ func structPointer_Add(p structPointer, size field) structPointer { func structPointer_Len(p structPointer, f field) int { return len(*(*[]interface{})(unsafe.Pointer(structPointer_GetRefStructPointer(p, f)))) } + +func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice { + return &structRefSlice{p: p, f: f, size: size} +} + +// A structRefSlice represents a slice of structs (themselves submessages or groups). +type structRefSlice struct { + p structPointer + f field + size uintptr +} + +func (v *structRefSlice) Len() int { + return structPointer_Len(v.p, v.f) +} + +func (v *structRefSlice) Index(i int) structPointer { + ss := structPointer_GetStructPointer(v.p, v.f) + ss1 := structPointer_GetRefStructPointer(ss, 0) + return structPointer_Add(ss1, field(uintptr(i)*v.size)) +} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties.go b/vendor/github.com/gogo/protobuf/proto/properties.go similarity index 80% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties.go rename to vendor/github.com/gogo/protobuf/proto/properties.go index 13245c0..44b3320 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties.go +++ b/vendor/github.com/gogo/protobuf/proto/properties.go @@ -1,7 +1,7 @@ -// Extensions for Protocol Buffers to create more go like structures. +// Protocol Buffers for Go with Gadgets // -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Go support for Protocol Buffers - Google's data interchange format // @@ -42,6 +42,7 @@ package proto import ( "fmt" + "log" "os" "reflect" "sort" @@ -89,6 +90,15 @@ type decoder func(p *Buffer, prop *Properties, base structPointer) error // A valueDecoder decodes a single integer in a particular encoding. type valueDecoder func(o *Buffer) (x uint64, err error) +// A oneofMarshaler does the marshaling for all oneof fields in a message. +type oneofMarshaler func(Message, *Buffer) error + +// A oneofUnmarshaler does the unmarshaling for a oneof field in a message. +type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error) + +// A oneofSizer does the sizing for all oneof fields in a message. +type oneofSizer func(Message) int + // tagMap is an optimization over map[int]int for typical protocol buffer // use-cases. Encoded protocol buffers are often in tag order with small tag // numbers. @@ -137,6 +147,22 @@ type StructProperties struct { order []int // list of struct field numbers in tag order unrecField field // field id of the XXX_unrecognized []byte field extendable bool // is this an extendable proto + + oneofMarshaler oneofMarshaler + oneofUnmarshaler oneofUnmarshaler + oneofSizer oneofSizer + stype reflect.Type + + // OneofTypes contains information about the oneof fields in this message. + // It is keyed by the original name of a field. + OneofTypes map[string]*OneofProperties +} + +// OneofProperties represents information about a specific field in a oneof. +type OneofProperties struct { + Type reflect.Type // pointer to generated struct type for this oneof field + Field int // struct field number of the containing oneof in the message + Prop *Properties } // Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. @@ -152,6 +178,7 @@ func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order type Properties struct { Name string // name of the field, for error messages OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc Wire string WireType int Tag int @@ -161,11 +188,13 @@ type Properties struct { Packed bool // relevant for repeated primitives only Enum string // set for enum types only proto3 bool // whether this is known to be a proto3 field; set for []byte only + oneof bool // whether this is a oneof field - Default string // default value - HasDefault bool // whether an explicit default was provided - CustomType string - def_uint64 uint64 + Default string // default value + HasDefault bool // whether an explicit default was provided + CustomType string + StdTime bool + StdDuration bool enc encoder valEnc valueEncoder // set for bool and numeric types only @@ -210,12 +239,16 @@ func (p *Properties) String() string { if p.Packed { s += ",packed" } - if p.OrigName != p.Name { - s += ",name=" + p.OrigName + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName } if p.proto3 { s += ",proto3" } + if p.oneof { + s += ",oneof" + } if len(p.Enum) > 0 { s += ",enum=" + p.Enum } @@ -288,10 +321,14 @@ func (p *Properties) Parse(s string) { p.Packed = true case strings.HasPrefix(f, "name="): p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] case strings.HasPrefix(f, "enum="): p.Enum = f[5:] case f == "proto3": p.proto3 = true + case f == "oneof": + p.oneof = true case strings.HasPrefix(f, "def="): p.HasDefault = true p.Default = f[4:] // rest of string @@ -304,6 +341,10 @@ func (p *Properties) Parse(s string) { p.OrigName = strings.Split(f, "=")[1] case strings.HasPrefix(f, "customtype="): p.CustomType = strings.Split(f, "=")[1] + case f == "stdtime": + p.StdTime = true + case f == "stdduration": + p.StdDuration = true } } } @@ -319,11 +360,22 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock p.enc = nil p.dec = nil p.size = nil - if len(p.CustomType) > 0 { + isMap := typ.Kind() == reflect.Map + if len(p.CustomType) > 0 && !isMap { p.setCustomEncAndDec(typ) p.setTag(lockGetProp) return } + if p.StdTime && !isMap { + p.setTimeEncAndDec(typ) + p.setTag(lockGetProp) + return + } + if p.StdDuration && !isMap { + p.setDurationEncAndDec(typ) + p.setTag(lockGetProp) + return + } switch t1 := typ; t1.Kind() { default: fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1) @@ -506,17 +558,13 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock p.dec = (*Buffer).dec_slice_int64 p.packedDec = (*Buffer).dec_slice_packed_int64 case reflect.Uint8: - p.enc = (*Buffer).enc_slice_byte p.dec = (*Buffer).dec_slice_byte - p.size = size_slice_byte - // This is a []byte, which is either a bytes field, - // or the value of a map field. In the latter case, - // we always encode an empty []byte, so we should not - // use the proto3 enc/size funcs. - // f == nil iff this is the key/value of a map field. - if p.proto3 && f != nil { + if p.proto3 { p.enc = (*Buffer).enc_proto3_slice_byte p.size = size_proto3_slice_byte + } else { + p.enc = (*Buffer).enc_slice_byte + p.size = size_slice_byte } case reflect.Float32, reflect.Float64: switch t2.Bits() { @@ -598,6 +646,10 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock // so we need encoders for the pointer to this type. vtype = reflect.PtrTo(vtype) } + + p.mvalprop.CustomType = p.CustomType + p.mvalprop.StdDuration = p.StdDuration + p.mvalprop.StdTime = p.StdTime p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) } p.setTag(lockGetProp) @@ -708,18 +760,25 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { propertiesMap[t] = prop // build properties - prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) + prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) || + reflect.PtrTo(t).Implements(extendableProtoV1Type) || + reflect.PtrTo(t).Implements(extendableBytesType) prop.unrecField = invalidField prop.Prop = make([]*Properties, t.NumField()) prop.order = make([]int, t.NumField()) + isOneofMessage := false for i := 0; i < t.NumField(); i++ { f := t.Field(i) p := new(Properties) name := f.Name p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) - if f.Name == "XXX_extensions" { // special case + if f.Name == "XXX_InternalExtensions" { // special case + p.enc = (*Buffer).enc_exts + p.dec = nil // not needed + p.size = size_exts + } else if f.Name == "XXX_extensions" { // special case if len(f.Tag.Get("protobuf")) > 0 { p.enc = (*Buffer).enc_ext_slice_byte p.dec = nil // not needed @@ -729,10 +788,15 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { p.dec = nil // not needed p.size = size_map } - } - if f.Name == "XXX_unrecognized" { // special case + } else if f.Name == "XXX_unrecognized" { // special case prop.unrecField = toField(&f) } + oneof := f.Tag.Get("protobuf_oneof") // special case + if oneof != "" { + isOneofMessage = true + // Oneof fields don't use the traditional protobuf tag. + p.OrigName = oneof + } prop.Prop[i] = p prop.order[i] = i if debug { @@ -742,7 +806,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { } print("\n") } - if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") { + if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" { fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]") } } @@ -750,6 +814,41 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { // Re-order prop.order. sort.Sort(prop) + type oneofMessage interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + } + if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); isOneofMessage && ok { + var oots []interface{} + prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs() + prop.stype = t + + // Interpret oneof metadata. + prop.OneofTypes = make(map[string]*OneofProperties) + for _, oot := range oots { + oop := &OneofProperties{ + Type: reflect.ValueOf(oot).Type(), // *T + Prop: new(Properties), + } + sft := oop.Type.Elem().Field(0) + oop.Prop.Name = sft.Name + oop.Prop.Parse(sft.Tag.Get("protobuf")) + // There will be exactly one interface field that + // this new value is assignable to. + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Type.Kind() != reflect.Interface { + continue + } + if !oop.Type.AssignableTo(f.Type) { + continue + } + oop.Field = i + break + } + prop.OneofTypes[oop.Prop.OrigName] = oop + } + } + // build required counts // build tags reqCount := 0 @@ -813,3 +912,57 @@ func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[ } enumStringMaps[typeName] = unusedNameMap } + +// EnumValueMap returns the mapping from names to integers of the +// enum type enumType, or a nil if not found. +func EnumValueMap(enumType string) map[string]int32 { + return enumValueMaps[enumType] +} + +// A registry of all linked message types. +// The string is a fully-qualified proto name ("pkg.Message"). +var ( + protoTypes = make(map[string]reflect.Type) + revProtoTypes = make(map[reflect.Type]string) +) + +// RegisterType is called from generated code and maps from the fully qualified +// proto name to the type (pointer to struct) of the protocol buffer. +func RegisterType(x Message, name string) { + if _, ok := protoTypes[name]; ok { + // TODO: Some day, make this a panic. + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + protoTypes[name] = t + revProtoTypes[t] = name +} + +// MessageName returns the fully-qualified proto name for the given message type. +func MessageName(x Message) string { + type xname interface { + XXX_MessageName() string + } + if m, ok := x.(xname); ok { + return m.XXX_MessageName() + } + return revProtoTypes[reflect.TypeOf(x)] +} + +// MessageType returns the message type (pointer to struct) for a named message. +func MessageType(name string) reflect.Type { return protoTypes[name] } + +// A registry of all linked proto files. +var ( + protoFiles = make(map[string][]byte) // file name => fileDescriptor +) + +// RegisterFile is called from generated code and maps from the +// full file name of a .proto file to its compressed FileDescriptorProto. +func RegisterFile(filename string, fileDescriptor []byte) { + protoFiles[filename] = fileDescriptor +} + +// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. +func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/gogo/protobuf/proto/properties_gogo.go b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go new file mode 100644 index 0000000..b6b7176 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go @@ -0,0 +1,111 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "os" + "reflect" +) + +func (p *Properties) setCustomEncAndDec(typ reflect.Type) { + p.ctype = typ + if p.Repeated { + p.enc = (*Buffer).enc_custom_slice_bytes + p.dec = (*Buffer).dec_custom_slice_bytes + p.size = size_custom_slice_bytes + } else if typ.Kind() == reflect.Ptr { + p.enc = (*Buffer).enc_custom_bytes + p.dec = (*Buffer).dec_custom_bytes + p.size = size_custom_bytes + } else { + p.enc = (*Buffer).enc_custom_ref_bytes + p.dec = (*Buffer).dec_custom_ref_bytes + p.size = size_custom_ref_bytes + } +} + +func (p *Properties) setDurationEncAndDec(typ reflect.Type) { + if p.Repeated { + if typ.Elem().Kind() == reflect.Ptr { + p.enc = (*Buffer).enc_slice_duration + p.dec = (*Buffer).dec_slice_duration + p.size = size_slice_duration + } else { + p.enc = (*Buffer).enc_slice_ref_duration + p.dec = (*Buffer).dec_slice_ref_duration + p.size = size_slice_ref_duration + } + } else if typ.Kind() == reflect.Ptr { + p.enc = (*Buffer).enc_duration + p.dec = (*Buffer).dec_duration + p.size = size_duration + } else { + p.enc = (*Buffer).enc_ref_duration + p.dec = (*Buffer).dec_ref_duration + p.size = size_ref_duration + } +} + +func (p *Properties) setTimeEncAndDec(typ reflect.Type) { + if p.Repeated { + if typ.Elem().Kind() == reflect.Ptr { + p.enc = (*Buffer).enc_slice_time + p.dec = (*Buffer).dec_slice_time + p.size = size_slice_time + } else { + p.enc = (*Buffer).enc_slice_ref_time + p.dec = (*Buffer).dec_slice_ref_time + p.size = size_slice_ref_time + } + } else if typ.Kind() == reflect.Ptr { + p.enc = (*Buffer).enc_time + p.dec = (*Buffer).dec_time + p.size = size_time + } else { + p.enc = (*Buffer).enc_ref_time + p.dec = (*Buffer).dec_ref_time + p.size = size_ref_time + } + +} + +func (p *Properties) setSliceOfNonPointerStructs(typ reflect.Type) { + t2 := typ.Elem() + p.sstype = typ + p.stype = t2 + p.isMarshaler = isMarshaler(t2) + p.isUnmarshaler = isUnmarshaler(t2) + p.enc = (*Buffer).enc_slice_ref_struct_message + p.dec = (*Buffer).dec_slice_ref_struct_message + p.size = size_slice_ref_struct_message + if p.Wire != "bytes" { + fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T \n", typ, t2) + } +} diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/skip_gogo.go b/vendor/github.com/gogo/protobuf/proto/skip_gogo.go similarity index 95% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/skip_gogo.go rename to vendor/github.com/gogo/protobuf/proto/skip_gogo.go index 4fe7e08..5a5fd93 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/skip_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/skip_gogo.go @@ -1,5 +1,7 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are diff --git a/vendor/github.com/gogo/protobuf/proto/text.go b/vendor/github.com/gogo/protobuf/proto/text.go new file mode 100644 index 0000000..d63732f --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/text.go @@ -0,0 +1,928 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for writing the text protocol buffer format. + +import ( + "bufio" + "bytes" + "encoding" + "errors" + "fmt" + "io" + "log" + "math" + "reflect" + "sort" + "strings" + "sync" + "time" +) + +var ( + newline = []byte("\n") + spaces = []byte(" ") + gtNewline = []byte(">\n") + endBraceNewline = []byte("}\n") + backslashN = []byte{'\\', 'n'} + backslashR = []byte{'\\', 'r'} + backslashT = []byte{'\\', 't'} + backslashDQ = []byte{'\\', '"'} + backslashBS = []byte{'\\', '\\'} + posInf = []byte("inf") + negInf = []byte("-inf") + nan = []byte("nan") +) + +type writer interface { + io.Writer + WriteByte(byte) error +} + +// textWriter is an io.Writer that tracks its indentation level. +type textWriter struct { + ind int + complete bool // if the current position is a complete line + compact bool // whether to write out as a one-liner + w writer +} + +func (w *textWriter) WriteString(s string) (n int, err error) { + if !strings.Contains(s, "\n") { + if !w.compact && w.complete { + w.writeIndent() + } + w.complete = false + return io.WriteString(w.w, s) + } + // WriteString is typically called without newlines, so this + // codepath and its copy are rare. We copy to avoid + // duplicating all of Write's logic here. + return w.Write([]byte(s)) +} + +func (w *textWriter) Write(p []byte) (n int, err error) { + newlines := bytes.Count(p, newline) + if newlines == 0 { + if !w.compact && w.complete { + w.writeIndent() + } + n, err = w.w.Write(p) + w.complete = false + return n, err + } + + frags := bytes.SplitN(p, newline, newlines+1) + if w.compact { + for i, frag := range frags { + if i > 0 { + if err := w.w.WriteByte(' '); err != nil { + return n, err + } + n++ + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + } + return n, nil + } + + for i, frag := range frags { + if w.complete { + w.writeIndent() + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + if i+1 < len(frags) { + if err := w.w.WriteByte('\n'); err != nil { + return n, err + } + n++ + } + } + w.complete = len(frags[len(frags)-1]) == 0 + return n, nil +} + +func (w *textWriter) WriteByte(c byte) error { + if w.compact && c == '\n' { + c = ' ' + } + if !w.compact && w.complete { + w.writeIndent() + } + err := w.w.WriteByte(c) + w.complete = c == '\n' + return err +} + +func (w *textWriter) indent() { w.ind++ } + +func (w *textWriter) unindent() { + if w.ind == 0 { + log.Print("proto: textWriter unindented too far") + return + } + w.ind-- +} + +func writeName(w *textWriter, props *Properties) error { + if _, err := w.WriteString(props.OrigName); err != nil { + return err + } + if props.Wire != "group" { + return w.WriteByte(':') + } + return nil +} + +// raw is the interface satisfied by RawMessage. +type raw interface { + Bytes() []byte +} + +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// isAny reports whether sv is a google.protobuf.Any message +func isAny(sv reflect.Value) bool { + type wkt interface { + XXX_WellKnownType() string + } + t, ok := sv.Addr().Interface().(wkt) + return ok && t.XXX_WellKnownType() == "Any" +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { + turl := sv.FieldByName("TypeUrl") + val := sv.FieldByName("Value") + if !turl.IsValid() || !val.IsValid() { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + b, ok := val.Interface().([]byte) + if !ok { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + parts := strings.Split(turl.String(), "/") + mt := MessageType(parts[len(parts)-1]) + if mt == nil { + return false, nil + } + m := reflect.New(mt.Elem()) + if err := Unmarshal(b, m.Interface().(Message)); err != nil { + return false, nil + } + w.Write([]byte("[")) + u := turl.String() + if requiresQuotes(u) { + writeString(w, u) + } else { + w.Write([]byte(u)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.ind++ + } + if err := tm.writeStruct(w, m.Elem()); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.ind-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { + if tm.ExpandAny && isAny(sv) { + if canExpand, err := tm.writeProto3Any(w, sv); canExpand { + return err + } + } + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < sv.NumField(); i++ { + fv := sv.Field(i) + props := sprops.Prop[i] + name := st.Field(i).Name + + if strings.HasPrefix(name, "XXX_") { + // There are two XXX_ fields: + // XXX_unrecognized []byte + // XXX_extensions map[int32]proto.Extension + // The first is handled here; + // the second is handled at the bottom of this function. + if name == "XXX_unrecognized" && !fv.IsNil() { + if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Field not filled in. This could be an optional field or + // a required field that wasn't filled in. Either way, there + // isn't anything we can show for it. + continue + } + if fv.Kind() == reflect.Slice && fv.IsNil() { + // Repeated field that is empty, or a bytes field that is unused. + continue + } + + if props.Repeated && fv.Kind() == reflect.Slice { + // Repeated field. + for j := 0; j < fv.Len(); j++ { + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + v := fv.Index(j) + if v.Kind() == reflect.Ptr && v.IsNil() { + // A nil message in a repeated field is not valid, + // but we can handle that more gracefully than panicking. + if _, err := w.Write([]byte("\n")); err != nil { + return err + } + continue + } + if len(props.Enum) > 0 { + if err := tm.writeEnum(w, v, props); err != nil { + return err + } + } else if err := tm.writeAny(w, v, props); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Map { + // Map fields are rendered as a repeated struct with key/value fields. + keys := fv.MapKeys() + sort.Sort(mapKeys(keys)) + for _, key := range keys { + val := fv.MapIndex(key) + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + // open struct + if err := w.WriteByte('<'); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + // key + if _, err := w.WriteString("key:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, key, props.mkeyprop); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + // nil values aren't legal, but we can avoid panicking because of them. + if val.Kind() != reflect.Ptr || !val.IsNil() { + // value + if _, err := w.WriteString("value:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, val, props.mvalprop); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + // close struct + w.unindent() + if err := w.WriteByte('>'); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { + // empty bytes field + continue + } + if props.proto3 && fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { + // proto3 non-repeated scalar field; skip if zero value + if isProto3Zero(fv) { + continue + } + } + + if fv.Kind() == reflect.Interface { + // Check if it is a oneof. + if st.Field(i).Tag.Get("protobuf_oneof") != "" { + // fv is nil, or holds a pointer to generated struct. + // That generated struct has exactly one field, + // which has a protobuf struct tag. + if fv.IsNil() { + continue + } + inner := fv.Elem().Elem() // interface -> *T -> T + tag := inner.Type().Field(0).Tag.Get("protobuf") + props = new(Properties) // Overwrite the outer props var, but not its pointee. + props.Parse(tag) + // Write the value in the oneof, not the oneof itself. + fv = inner.Field(0) + + // Special case to cope with malformed messages gracefully: + // If the value in the oneof is a nil pointer, don't panic + // in writeAny. + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Use errors.New so writeAny won't render quotes. + msg := errors.New("/* nil */") + fv = reflect.ValueOf(&msg).Elem() + } + } + } + + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if b, ok := fv.Interface().(raw); ok { + if err := writeRaw(w, b.Bytes()); err != nil { + return err + } + continue + } + + if len(props.Enum) > 0 { + if err := tm.writeEnum(w, fv, props); err != nil { + return err + } + } else if err := tm.writeAny(w, fv, props); err != nil { + return err + } + + if err := w.WriteByte('\n'); err != nil { + return err + } + } + + // Extensions (the XXX_extensions field). + pv := sv + if pv.CanAddr() { + pv = sv.Addr() + } else { + pv = reflect.New(sv.Type()) + pv.Elem().Set(sv) + } + if pv.Type().Implements(extensionRangeType) { + if err := tm.writeExtensions(w, pv); err != nil { + return err + } + } + + return nil +} + +// writeRaw writes an uninterpreted raw message. +func writeRaw(w *textWriter, b []byte) error { + if err := w.WriteByte('<'); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + if err := writeUnknownStruct(w, b); err != nil { + return err + } + w.unindent() + if err := w.WriteByte('>'); err != nil { + return err + } + return nil +} + +// writeAny writes an arbitrary field. +func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { + v = reflect.Indirect(v) + + if props != nil { + if len(props.CustomType) > 0 { + custom, ok := v.Interface().(Marshaler) + if ok { + data, err := custom.Marshal() + if err != nil { + return err + } + if err := writeString(w, string(data)); err != nil { + return err + } + return nil + } + } else if props.StdTime { + t, ok := v.Interface().(time.Time) + if !ok { + return fmt.Errorf("stdtime is not time.Time, but %T", v.Interface()) + } + tproto, err := timestampProto(t) + if err != nil { + return err + } + props.StdTime = false + err = tm.writeAny(w, reflect.ValueOf(tproto), props) + props.StdTime = true + return err + } else if props.StdDuration { + d, ok := v.Interface().(time.Duration) + if !ok { + return fmt.Errorf("stdtime is not time.Duration, but %T", v.Interface()) + } + dproto := durationProto(d) + props.StdDuration = false + err := tm.writeAny(w, reflect.ValueOf(dproto), props) + props.StdDuration = true + return err + } + } + + // Floats have special cases. + if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { + x := v.Float() + var b []byte + switch { + case math.IsInf(x, 1): + b = posInf + case math.IsInf(x, -1): + b = negInf + case math.IsNaN(x): + b = nan + } + if b != nil { + _, err := w.Write(b) + return err + } + // Other values are handled below. + } + + // We don't attempt to serialise every possible value type; only those + // that can occur in protocol buffers. + switch v.Kind() { + case reflect.Slice: + // Should only be a []byte; repeated fields are handled in writeStruct. + if err := writeString(w, string(v.Bytes())); err != nil { + return err + } + case reflect.String: + if err := writeString(w, v.String()); err != nil { + return err + } + case reflect.Struct: + // Required/optional group/message. + var bra, ket byte = '<', '>' + if props != nil && props.Wire == "group" { + bra, ket = '{', '}' + } + if err := w.WriteByte(bra); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + if etm, ok := v.Interface().(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = w.Write(text); err != nil { + return err + } + } else if err := tm.writeStruct(w, v); err != nil { + return err + } + w.unindent() + if err := w.WriteByte(ket); err != nil { + return err + } + default: + _, err := fmt.Fprint(w, v.Interface()) + return err + } + return nil +} + +// equivalent to C's isprint. +func isprint(c byte) bool { + return c >= 0x20 && c < 0x7f +} + +// writeString writes a string in the protocol buffer text format. +// It is similar to strconv.Quote except we don't use Go escape sequences, +// we treat the string as a byte sequence, and we use octal escapes. +// These differences are to maintain interoperability with the other +// languages' implementations of the text format. +func writeString(w *textWriter, s string) error { + // use WriteByte here to get any needed indent + if err := w.WriteByte('"'); err != nil { + return err + } + // Loop over the bytes, not the runes. + for i := 0; i < len(s); i++ { + var err error + // Divergence from C++: we don't escape apostrophes. + // There's no need to escape them, and the C++ parser + // copes with a naked apostrophe. + switch c := s[i]; c { + case '\n': + _, err = w.w.Write(backslashN) + case '\r': + _, err = w.w.Write(backslashR) + case '\t': + _, err = w.w.Write(backslashT) + case '"': + _, err = w.w.Write(backslashDQ) + case '\\': + _, err = w.w.Write(backslashBS) + default: + if isprint(c) { + err = w.w.WriteByte(c) + } else { + _, err = fmt.Fprintf(w.w, "\\%03o", c) + } + } + if err != nil { + return err + } + } + return w.WriteByte('"') +} + +func writeUnknownStruct(w *textWriter, data []byte) (err error) { + if !w.compact { + if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { + return err + } + } + b := NewBuffer(data) + for b.index < len(b.buf) { + x, err := b.DecodeVarint() + if err != nil { + _, ferr := fmt.Fprintf(w, "/* %v */\n", err) + return ferr + } + wire, tag := x&7, x>>3 + if wire == WireEndGroup { + w.unindent() + if _, werr := w.Write(endBraceNewline); werr != nil { + return werr + } + continue + } + if _, ferr := fmt.Fprint(w, tag); ferr != nil { + return ferr + } + if wire != WireStartGroup { + if err = w.WriteByte(':'); err != nil { + return err + } + } + if !w.compact || wire == WireStartGroup { + if err = w.WriteByte(' '); err != nil { + return err + } + } + switch wire { + case WireBytes: + buf, e := b.DecodeRawBytes(false) + if e == nil { + _, err = fmt.Fprintf(w, "%q", buf) + } else { + _, err = fmt.Fprintf(w, "/* %v */", e) + } + case WireFixed32: + x, err = b.DecodeFixed32() + err = writeUnknownInt(w, x, err) + case WireFixed64: + x, err = b.DecodeFixed64() + err = writeUnknownInt(w, x, err) + case WireStartGroup: + err = w.WriteByte('{') + w.indent() + case WireVarint: + x, err = b.DecodeVarint() + err = writeUnknownInt(w, x, err) + default: + _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) + } + if err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + return nil +} + +func writeUnknownInt(w *textWriter, x uint64, err error) error { + if err == nil { + _, err = fmt.Fprint(w, x) + } else { + _, err = fmt.Fprintf(w, "/* %v */", err) + } + return err +} + +type int32Slice []int32 + +func (s int32Slice) Len() int { return len(s) } +func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } +func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// writeExtensions writes all the extensions in pv. +// pv is assumed to be a pointer to a protocol message struct that is extendable. +func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { + emap := extensionMaps[pv.Type().Elem()] + e := pv.Interface().(Message) + + var m map[int32]Extension + var mu sync.Locker + if em, ok := e.(extensionsBytes); ok { + eb := em.GetExtensions() + var err error + m, err = BytesToExtensionsMap(*eb) + if err != nil { + return err + } + mu = notLocker{} + } else if _, ok := e.(extendableProto); ok { + ep, _ := extendable(e) + m, mu = ep.extensionsRead() + if m == nil { + return nil + } + } + + // Order the extensions by ID. + // This isn't strictly necessary, but it will give us + // canonical output, which will also make testing easier. + + mu.Lock() + ids := make([]int32, 0, len(m)) + for id := range m { + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) + mu.Unlock() + + for _, extNum := range ids { + ext := m[extNum] + var desc *ExtensionDesc + if emap != nil { + desc = emap[extNum] + } + if desc == nil { + // Unknown extension. + if err := writeUnknownStruct(w, ext.enc); err != nil { + return err + } + continue + } + + pb, err := GetExtension(e, desc) + if err != nil { + return fmt.Errorf("failed getting extension: %v", err) + } + + // Repeated extensions will appear as a slice. + if !desc.repeated() { + if err := tm.writeExtension(w, desc.Name, pb); err != nil { + return err + } + } else { + v := reflect.ValueOf(pb) + for i := 0; i < v.Len(); i++ { + if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { + return err + } + } + } + } + return nil +} + +func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { + if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + return nil +} + +func (w *textWriter) writeIndent() { + if !w.complete { + return + } + remain := w.ind * 2 + for remain > 0 { + n := remain + if n > len(spaces) { + n = len(spaces) + } + w.w.Write(spaces[:n]) + remain -= n + } + w.complete = false +} + +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { + val := reflect.ValueOf(pb) + if pb == nil || val.IsNil() { + w.Write([]byte("")) + return nil + } + var bw *bufio.Writer + ww, ok := w.(writer) + if !ok { + bw = bufio.NewWriter(w) + ww = bw + } + aw := &textWriter{ + w: ww, + complete: true, + compact: tm.Compact, + } + + if etm, ok := pb.(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = aw.Write(text); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil + } + // Dereference the received pointer so we don't have outer < and >. + v := reflect.Indirect(val) + if err := tm.writeStruct(aw, v); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil +} + +// Text is the same as Marshal, but returns the string directly. +func (tm *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + tm.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + +// MarshalText writes a given protocol buffer in text format. +// The only errors returned are from w. +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } + +// MarshalTextString is the same as MarshalText, but returns the string directly. +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } + +// CompactText writes a given protocol buffer in compact text format (one line). +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } + +// CompactTextString is the same as CompactText, but returns the string directly. +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_gogo.go b/vendor/github.com/gogo/protobuf/proto/text_gogo.go similarity index 82% rename from Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_gogo.go rename to vendor/github.com/gogo/protobuf/proto/text_gogo.go index cdb2337..1d6c6aa 100644 --- a/Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/text_gogo.go @@ -1,5 +1,7 @@ -// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. -// http://github.com/gogo/protobuf/gogoproto +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -31,10 +33,10 @@ import ( "reflect" ) -func writeEnum(w *textWriter, v reflect.Value, props *Properties) error { +func (tm *TextMarshaler) writeEnum(w *textWriter, v reflect.Value, props *Properties) error { m, ok := enumStringMaps[props.Enum] if !ok { - if err := writeAny(w, v, props); err != nil { + if err := tm.writeAny(w, v, props); err != nil { return err } } @@ -46,7 +48,7 @@ func writeEnum(w *textWriter, v reflect.Value, props *Properties) error { } s, ok := m[key] if !ok { - if err := writeAny(w, v, props); err != nil { + if err := tm.writeAny(w, v, props); err != nil { return err } } diff --git a/vendor/github.com/gogo/protobuf/proto/text_parser.go b/vendor/github.com/gogo/protobuf/proto/text_parser.go new file mode 100644 index 0000000..9db12e9 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/text_parser.go @@ -0,0 +1,1013 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for parsing the Text protocol buffer format. +// TODO: message sets. + +import ( + "encoding" + "errors" + "fmt" + "reflect" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +// Error string emitted when deserializing Any and fields are already set +const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" + +type ParseError struct { + Message string + Line int // 1-based line number + Offset int // 0-based byte offset from start of input +} + +func (p *ParseError) Error() string { + if p.Line == 1 { + // show offset only for first line + return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) + } + return fmt.Sprintf("line %d: %v", p.Line, p.Message) +} + +type token struct { + value string + err *ParseError + line int // line number + offset int // byte number from start of input, not start of line + unquoted string // the unquoted version of value, if it was a quoted string +} + +func (t *token) String() string { + if t.err == nil { + return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) + } + return fmt.Sprintf("parse error: %v", t.err) +} + +type textParser struct { + s string // remaining input + done bool // whether the parsing is finished (success or error) + backed bool // whether back() was called + offset, line int + cur token +} + +func newTextParser(s string) *textParser { + p := new(textParser) + p.s = s + p.line = 1 + p.cur.line = 1 + return p +} + +func (p *textParser) errorf(format string, a ...interface{}) *ParseError { + pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} + p.cur.err = pe + p.done = true + return pe +} + +// Numbers and identifiers are matched by [-+._A-Za-z0-9] +func isIdentOrNumberChar(c byte) bool { + switch { + case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': + return true + case '0' <= c && c <= '9': + return true + } + switch c { + case '-', '+', '.', '_': + return true + } + return false +} + +func isWhitespace(c byte) bool { + switch c { + case ' ', '\t', '\n', '\r': + return true + } + return false +} + +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} + +func (p *textParser) skipWhitespace() { + i := 0 + for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { + if p.s[i] == '#' { + // comment; skip to end of line or input + for i < len(p.s) && p.s[i] != '\n' { + i++ + } + if i == len(p.s) { + break + } + } + if p.s[i] == '\n' { + p.line++ + } + i++ + } + p.offset += i + p.s = p.s[i:len(p.s)] + if len(p.s) == 0 { + p.done = true + } +} + +func (p *textParser) advance() { + // Skip whitespace + p.skipWhitespace() + if p.done { + return + } + + // Start of non-whitespace + p.cur.err = nil + p.cur.offset, p.cur.line = p.offset, p.line + p.cur.unquoted = "" + switch p.s[0] { + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': + // Single symbol + p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] + case '"', '\'': + // Quoted string + i := 1 + for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { + if p.s[i] == '\\' && i+1 < len(p.s) { + // skip escaped char + i++ + } + i++ + } + if i >= len(p.s) || p.s[i] != p.s[0] { + p.errorf("unmatched quote") + return + } + unq, err := unquoteC(p.s[1:i], rune(p.s[0])) + if err != nil { + p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) + return + } + p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] + p.cur.unquoted = unq + default: + i := 0 + for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { + i++ + } + if i == 0 { + p.errorf("unexpected byte %#x", p.s[0]) + return + } + p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] + } + p.offset += len(p.cur.value) +} + +var ( + errBadUTF8 = errors.New("proto: bad UTF-8") + errBadHex = errors.New("proto: bad hexadecimal") +) + +func unquoteC(s string, quote rune) (string, error) { + // This is based on C++'s tokenizer.cc. + // Despite its name, this is *not* parsing C syntax. + // For instance, "\0" is an invalid quoted string. + + // Avoid allocation in trivial cases. + simple := true + for _, r := range s { + if r == '\\' || r == quote { + simple = false + break + } + } + if simple { + return s, nil + } + + buf := make([]byte, 0, 3*len(s)/2) + for len(s) > 0 { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", errBadUTF8 + } + s = s[n:] + if r != '\\' { + if r < utf8.RuneSelf { + buf = append(buf, byte(r)) + } else { + buf = append(buf, string(r)...) + } + continue + } + + ch, tail, err := unescape(s) + if err != nil { + return "", err + } + buf = append(buf, ch...) + s = tail + } + return string(buf), nil +} + +func unescape(s string) (ch string, tail string, err error) { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", "", errBadUTF8 + } + s = s[n:] + switch r { + case 'a': + return "\a", s, nil + case 'b': + return "\b", s, nil + case 'f': + return "\f", s, nil + case 'n': + return "\n", s, nil + case 'r': + return "\r", s, nil + case 't': + return "\t", s, nil + case 'v': + return "\v", s, nil + case '?': + return "?", s, nil // trigraph workaround + case '\'', '"', '\\': + return string(r), s, nil + case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X': + if len(s) < 2 { + return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) + } + base := 8 + ss := s[:2] + s = s[2:] + if r == 'x' || r == 'X' { + base = 16 + } else { + ss = string(r) + ss + } + i, err := strconv.ParseUint(ss, base, 8) + if err != nil { + return "", "", err + } + return string([]byte{byte(i)}), s, nil + case 'u', 'U': + n := 4 + if r == 'U' { + n = 8 + } + if len(s) < n { + return "", "", fmt.Errorf(`\%c requires %d digits`, r, n) + } + + bs := make([]byte, n/2) + for i := 0; i < n; i += 2 { + a, ok1 := unhex(s[i]) + b, ok2 := unhex(s[i+1]) + if !ok1 || !ok2 { + return "", "", errBadHex + } + bs[i/2] = a<<4 | b + } + s = s[n:] + return string(bs), s, nil + } + return "", "", fmt.Errorf(`unknown escape \%c`, r) +} + +// Adapted from src/pkg/strconv/quote.go. +func unhex(b byte) (v byte, ok bool) { + switch { + case '0' <= b && b <= '9': + return b - '0', true + case 'a' <= b && b <= 'f': + return b - 'a' + 10, true + case 'A' <= b && b <= 'F': + return b - 'A' + 10, true + } + return 0, false +} + +// Back off the parser by one token. Can only be done between calls to next(). +// It makes the next advance() a no-op. +func (p *textParser) back() { p.backed = true } + +// Advances the parser and returns the new current token. +func (p *textParser) next() *token { + if p.backed || p.done { + p.backed = false + return &p.cur + } + p.advance() + if p.done { + p.cur.value = "" + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { + // Look for multiple quoted strings separated by whitespace, + // and concatenate them. + cat := p.cur + for { + p.skipWhitespace() + if p.done || !isQuote(p.s[0]) { + break + } + p.advance() + if p.cur.err != nil { + return &p.cur + } + cat.value += " " + p.cur.value + cat.unquoted += p.cur.unquoted + } + p.done = false // parser may have seen EOF, but we want to return cat + p.cur = cat + } + return &p.cur +} + +func (p *textParser) consumeToken(s string) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != s { + p.back() + return p.errorf("expected %q, found %q", s, tok.value) + } + return nil +} + +// Return a RequiredNotSetError indicating which required field was not set. +func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < st.NumField(); i++ { + if !isNil(sv.Field(i)) { + continue + } + + props := sprops.Prop[i] + if props.Required { + return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} + } + } + return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen +} + +// Returns the index in the struct for the named field, as well as the parsed tag properties. +func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { + i, ok := sprops.decoderOrigNames[name] + if ok { + return i, sprops.Prop[i], true + } + return -1, nil, false +} + +// Consume a ':' from the input stream (if the next token is a colon), +// returning an error if a colon is needed but not present. +func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ":" { + // Colon is optional when the field is a group or message. + needColon := true + switch props.Wire { + case "group": + needColon = false + case "bytes": + // A "bytes" field is either a message, a string, or a repeated field; + // those three become *T, *string and []T respectively, so we can check for + // this field being a pointer to a non-string. + if typ.Kind() == reflect.Ptr { + // *T or *string + if typ.Elem().Kind() == reflect.String { + break + } + } else if typ.Kind() == reflect.Slice { + // []T or []*T + if typ.Elem().Kind() != reflect.Ptr { + break + } + } else if typ.Kind() == reflect.String { + // The proto3 exception is for a string field, + // which requires a colon. + break + } + needColon = false + } + if needColon { + return p.errorf("expected ':', found %q", tok.value) + } + p.back() + } + return nil +} + +func (p *textParser) readStruct(sv reflect.Value, terminator string) error { + st := sv.Type() + sprops := GetProperties(st) + reqCount := sprops.reqCount + var reqFieldErr error + fieldSet := make(map[string]bool) + // A struct is a sequence of "name: value", terminated by one of + // '>' or '}', or the end of the input. A name may also be + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + if tok.value == "[" { + // Looks like an extension or an Any. + // + // TODO: Check whether we need to handle + // namespace rooted names (e.g. ".something.Foo"). + extName, err := p.consumeExtName() + if err != nil { + return err + } + + if s := strings.LastIndex(extName, "/"); s >= 0 { + // If it contains a slash, it's an Any type URL. + messageName := extName[s+1:] + mt := MessageType(messageName) + if mt == nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) + } + tok = p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + v := reflect.New(mt.Elem()) + if pe := p.readStruct(v.Elem(), terminator); pe != nil { + return pe + } + b, err := Marshal(v.Interface().(Message)) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", messageName, err) + } + if fieldSet["type_url"] { + return p.errorf(anyRepeatedlyUnpacked, "type_url") + } + if fieldSet["value"] { + return p.errorf(anyRepeatedlyUnpacked, "value") + } + sv.FieldByName("TypeUrl").SetString(extName) + sv.FieldByName("Value").SetBytes(b) + fieldSet["type_url"] = true + fieldSet["value"] = true + continue + } + + var desc *ExtensionDesc + // This could be faster, but it's functional. + // TODO: Do something smarter than a linear scan. + for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { + if d.Name == extName { + desc = d + break + } + } + if desc == nil { + return p.errorf("unrecognized extension %q", extName) + } + + props := &Properties{} + props.Parse(desc.Tag) + + typ := reflect.TypeOf(desc.ExtensionType) + if err := p.checkForColon(props, typ); err != nil { + return err + } + + rep := desc.repeated() + + // Read the extension structure, and set it in + // the value we're constructing. + var ext reflect.Value + if !rep { + ext = reflect.New(typ).Elem() + } else { + ext = reflect.New(typ.Elem()).Elem() + } + if err := p.readAny(ext, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + ep := sv.Addr().Interface().(Message) + if !rep { + SetExtension(ep, desc, ext.Interface()) + } else { + old, err := GetExtension(ep, desc) + var sl reflect.Value + if err == nil { + sl = reflect.ValueOf(old) // existing slice + } else { + sl = reflect.MakeSlice(typ, 0, 1) + } + sl = reflect.Append(sl, ext) + SetExtension(ep, desc, sl.Interface()) + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + continue + } + + // This is a normal, non-extension field. + name := tok.value + var dst reflect.Value + fi, props, ok := structFieldByName(sprops, name) + if ok { + dst = sv.Field(fi) + } else if oop, ok := sprops.OneofTypes[name]; ok { + // It is a oneof. + props = oop.Prop + nv := reflect.New(oop.Type.Elem()) + dst = nv.Elem().Field(0) + field := sv.Field(oop.Field) + if !field.IsNil() { + return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) + } + field.Set(nv) + } + if !dst.IsValid() { + return p.errorf("unknown field name %q in %v", name, st) + } + + if dst.Kind() == reflect.Map { + // Consume any colon. + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Construct the map if it doesn't already exist. + if dst.IsNil() { + dst.Set(reflect.MakeMap(dst.Type())) + } + key := reflect.New(dst.Type().Key()).Elem() + val := reflect.New(dst.Type().Elem()).Elem() + + // The map entry should be this sequence of tokens: + // < key : KEY value : VALUE > + // However, implementations may omit key or value, and technically + // we should support them in any order. See b/28924776 for a time + // this went wrong. + + tok := p.next() + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return err + } + if err := p.readAny(key, props.mkeyprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + case "value": + if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { + return err + } + if err := p.readAny(val, props.mvalprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + default: + p.back() + return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } + } + + dst.SetMapIndex(key, val) + continue + } + + // Check that it's not already set if it's not a repeated field. + if !props.Repeated && fieldSet[name] { + return p.errorf("non-repeated field %q was repeated", name) + } + + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Parse into the field. + fieldSet[name] = true + if err := p.readAny(dst, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + if props.Required { + reqCount-- + } + + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + + } + + if reqCount > 0 { + return p.missingRequiredFieldError(sv) + } + return reqFieldErr +} + +// consumeExtName consumes extension name or expanded Any type URL and the +// following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + } + return strings.Join(parts, ""), nil +} + +// consumeOptionalSeparator consumes an optional semicolon or comma. +// It is used in readStruct to provide backward compatibility. +func (p *textParser) consumeOptionalSeparator() error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ";" && tok.value != "," { + p.back() + } + return nil +} + +func (p *textParser) readAny(v reflect.Value, props *Properties) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "" { + return p.errorf("unexpected EOF") + } + if len(props.CustomType) > 0 { + if props.Repeated { + t := reflect.TypeOf(v.Interface()) + if t.Kind() == reflect.Slice { + tc := reflect.TypeOf(new(Marshaler)) + ok := t.Elem().Implements(tc.Elem()) + if ok { + fv := v + flen := fv.Len() + if flen == fv.Cap() { + nav := reflect.MakeSlice(v.Type(), flen, 2*flen+1) + reflect.Copy(nav, fv) + fv.Set(nav) + } + fv.SetLen(flen + 1) + + // Read one. + p.back() + return p.readAny(fv.Index(flen), props) + } + } + } + if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr { + custom := reflect.New(props.ctype.Elem()).Interface().(Unmarshaler) + err := custom.Unmarshal([]byte(tok.unquoted)) + if err != nil { + return p.errorf("%v %v: %v", err, v.Type(), tok.value) + } + v.Set(reflect.ValueOf(custom)) + } else { + custom := reflect.New(reflect.TypeOf(v.Interface())).Interface().(Unmarshaler) + err := custom.Unmarshal([]byte(tok.unquoted)) + if err != nil { + return p.errorf("%v %v: %v", err, v.Type(), tok.value) + } + v.Set(reflect.Indirect(reflect.ValueOf(custom))) + } + return nil + } + if props.StdTime { + fv := v + p.back() + props.StdTime = false + tproto := ×tamp{} + err := p.readAny(reflect.ValueOf(tproto).Elem(), props) + props.StdTime = true + if err != nil { + return err + } + tim, err := timestampFromProto(tproto) + if err != nil { + return err + } + if props.Repeated { + t := reflect.TypeOf(v.Interface()) + if t.Kind() == reflect.Slice { + if t.Elem().Kind() == reflect.Ptr { + ts := fv.Interface().([]*time.Time) + ts = append(ts, &tim) + fv.Set(reflect.ValueOf(ts)) + return nil + } else { + ts := fv.Interface().([]time.Time) + ts = append(ts, tim) + fv.Set(reflect.ValueOf(ts)) + return nil + } + } + } + if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr { + v.Set(reflect.ValueOf(&tim)) + } else { + v.Set(reflect.Indirect(reflect.ValueOf(&tim))) + } + return nil + } + if props.StdDuration { + fv := v + p.back() + props.StdDuration = false + dproto := &duration{} + err := p.readAny(reflect.ValueOf(dproto).Elem(), props) + props.StdDuration = true + if err != nil { + return err + } + dur, err := durationFromProto(dproto) + if err != nil { + return err + } + if props.Repeated { + t := reflect.TypeOf(v.Interface()) + if t.Kind() == reflect.Slice { + if t.Elem().Kind() == reflect.Ptr { + ds := fv.Interface().([]*time.Duration) + ds = append(ds, &dur) + fv.Set(reflect.ValueOf(ds)) + return nil + } else { + ds := fv.Interface().([]time.Duration) + ds = append(ds, dur) + fv.Set(reflect.ValueOf(ds)) + return nil + } + } + } + if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr { + v.Set(reflect.ValueOf(&dur)) + } else { + v.Set(reflect.Indirect(reflect.ValueOf(&dur))) + } + return nil + } + switch fv := v; fv.Kind() { + case reflect.Slice: + at := v.Type() + if at.Elem().Kind() == reflect.Uint8 { + // Special case for []byte + if tok.value[0] != '"' && tok.value[0] != '\'' { + // Deliberately written out here, as the error after + // this switch statement would write "invalid []byte: ...", + // which is not as user-friendly. + return p.errorf("invalid string: %v", tok.value) + } + bytes := []byte(tok.unquoted) + fv.Set(reflect.ValueOf(bytes)) + return nil + } + // Repeated field. + if tok.value == "[" { + // Repeated field with list notation, like [1,2,3]. + for { + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + err := p.readAny(fv.Index(fv.Len()-1), props) + if err != nil { + return err + } + ntok := p.next() + if ntok.err != nil { + return ntok.err + } + if ntok.value == "]" { + break + } + if ntok.value != "," { + return p.errorf("Expected ']' or ',' found %q", ntok.value) + } + } + return nil + } + // One value of the repeated field. + p.back() + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + return p.readAny(fv.Index(fv.Len()-1), props) + case reflect.Bool: + // true/1/t/True or false/f/0/False. + switch tok.value { + case "true", "1", "t", "True": + fv.SetBool(true) + return nil + case "false", "0", "f", "False": + fv.SetBool(false) + return nil + } + case reflect.Float32, reflect.Float64: + v := tok.value + // Ignore 'f' for compatibility with output generated by C++, but don't + // remove 'f' when the value is "-inf" or "inf". + if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { + v = v[:len(v)-1] + } + if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { + fv.SetFloat(f) + return nil + } + case reflect.Int32: + if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { + fv.SetInt(x) + return nil + } + + if len(props.Enum) == 0 { + break + } + m, ok := enumValueMaps[props.Enum] + if !ok { + break + } + x, ok := m[tok.value] + if !ok { + break + } + fv.SetInt(int64(x)) + return nil + case reflect.Int64: + if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { + fv.SetInt(x) + return nil + } + + case reflect.Ptr: + // A basic field (indirected through pointer), or a repeated message/group + p.back() + fv.Set(reflect.New(fv.Type().Elem())) + return p.readAny(fv.Elem(), props) + case reflect.String: + if tok.value[0] == '"' || tok.value[0] == '\'' { + fv.SetString(tok.unquoted) + return nil + } + case reflect.Struct: + var terminator string + switch tok.value { + case "{": + terminator = "}" + case "<": + terminator = ">" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + // TODO: Handle nested messages which implement encoding.TextUnmarshaler. + return p.readStruct(fv, terminator) + case reflect.Uint32: + if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { + fv.SetUint(uint64(x)) + return nil + } + case reflect.Uint64: + if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { + fv.SetUint(x) + return nil + } + } + return p.errorf("invalid %v: %v", v.Type(), tok.value) +} + +// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb +// before starting to unmarshal, so any existing data in pb is always removed. +// If a required field is not set and no other error occurs, +// UnmarshalText returns *RequiredNotSetError. +func UnmarshalText(s string, pb Message) error { + if um, ok := pb.(encoding.TextUnmarshaler); ok { + err := um.UnmarshalText([]byte(s)) + return err + } + pb.Reset() + v := reflect.ValueOf(pb) + if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil { + return pe + } + return nil +} diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp.go b/vendor/github.com/gogo/protobuf/proto/timestamp.go new file mode 100644 index 0000000..9324f65 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/timestamp.go @@ -0,0 +1,113 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// This file implements operations on google.protobuf.Timestamp. + +import ( + "errors" + "fmt" + "time" +) + +const ( + // Seconds field of the earliest valid Timestamp. + // This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). + minValidSeconds = -62135596800 + // Seconds field just after the latest valid Timestamp. + // This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). + maxValidSeconds = 253402300800 +) + +// validateTimestamp determines whether a Timestamp is valid. +// A valid timestamp represents a time in the range +// [0001-01-01, 10000-01-01) and has a Nanos field +// in the range [0, 1e9). +// +// If the Timestamp is valid, validateTimestamp returns nil. +// Otherwise, it returns an error that describes +// the problem. +// +// Every valid Timestamp can be represented by a time.Time, but the converse is not true. +func validateTimestamp(ts *timestamp) error { + if ts == nil { + return errors.New("timestamp: nil Timestamp") + } + if ts.Seconds < minValidSeconds { + return fmt.Errorf("timestamp: %#v before 0001-01-01", ts) + } + if ts.Seconds >= maxValidSeconds { + return fmt.Errorf("timestamp: %#v after 10000-01-01", ts) + } + if ts.Nanos < 0 || ts.Nanos >= 1e9 { + return fmt.Errorf("timestamp: %#v: nanos not in range [0, 1e9)", ts) + } + return nil +} + +// TimestampFromProto converts a google.protobuf.Timestamp proto to a time.Time. +// It returns an error if the argument is invalid. +// +// Unlike most Go functions, if Timestamp returns an error, the first return value +// is not the zero time.Time. Instead, it is the value obtained from the +// time.Unix function when passed the contents of the Timestamp, in the UTC +// locale. This may or may not be a meaningful time; many invalid Timestamps +// do map to valid time.Times. +// +// A nil Timestamp returns an error. The first return value in that case is +// undefined. +func timestampFromProto(ts *timestamp) (time.Time, error) { + // Don't return the zero value on error, because corresponds to a valid + // timestamp. Instead return whatever time.Unix gives us. + var t time.Time + if ts == nil { + t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp + } else { + t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC() + } + return t, validateTimestamp(ts) +} + +// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto. +// It returns an error if the resulting Timestamp is invalid. +func timestampProto(t time.Time) (*timestamp, error) { + seconds := t.Unix() + nanos := int32(t.Sub(time.Unix(seconds, 0))) + ts := ×tamp{ + Seconds: seconds, + Nanos: nanos, + } + if err := validateTimestamp(ts); err != nil { + return nil, err + } + return ts, nil +} diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go new file mode 100644 index 0000000..d427647 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go @@ -0,0 +1,229 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2016, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "reflect" + "time" +) + +var timeType = reflect.TypeOf((*time.Time)(nil)).Elem() + +type timestamp struct { + Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` + Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` +} + +func (m *timestamp) Reset() { *m = timestamp{} } +func (*timestamp) ProtoMessage() {} +func (*timestamp) String() string { return "timestamp" } + +func init() { + RegisterType((*timestamp)(nil), "gogo.protobuf.proto.timestamp") +} + +func (o *Buffer) decTimestamp() (time.Time, error) { + b, err := o.DecodeRawBytes(true) + if err != nil { + return time.Time{}, err + } + tproto := ×tamp{} + if err := Unmarshal(b, tproto); err != nil { + return time.Time{}, err + } + return timestampFromProto(tproto) +} + +func (o *Buffer) dec_time(p *Properties, base structPointer) error { + t, err := o.decTimestamp() + if err != nil { + return err + } + setPtrCustomType(base, p.field, &t) + return nil +} + +func (o *Buffer) dec_ref_time(p *Properties, base structPointer) error { + t, err := o.decTimestamp() + if err != nil { + return err + } + setCustomType(base, p.field, &t) + return nil +} + +func (o *Buffer) dec_slice_time(p *Properties, base structPointer) error { + t, err := o.decTimestamp() + if err != nil { + return err + } + newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))) + var zero field + setPtrCustomType(newBas, zero, &t) + return nil +} + +func (o *Buffer) dec_slice_ref_time(p *Properties, base structPointer) error { + t, err := o.decTimestamp() + if err != nil { + return err + } + newBas := appendStructPointer(base, p.field, reflect.SliceOf(timeType)) + var zero field + setCustomType(newBas, zero, &t) + return nil +} + +func size_time(p *Properties, base structPointer) (n int) { + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return 0 + } + tim := structPointer_Interface(structp, timeType).(*time.Time) + t, err := timestampProto(*tim) + if err != nil { + return 0 + } + size := Size(t) + return size + sizeVarint(uint64(size)) + len(p.tagcode) +} + +func (o *Buffer) enc_time(p *Properties, base structPointer) error { + structp := structPointer_GetStructPointer(base, p.field) + if structPointer_IsNil(structp) { + return ErrNil + } + tim := structPointer_Interface(structp, timeType).(*time.Time) + t, err := timestampProto(*tim) + if err != nil { + return err + } + data, err := Marshal(t) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + return nil +} + +func size_ref_time(p *Properties, base structPointer) (n int) { + tim := structPointer_InterfaceAt(base, p.field, timeType).(*time.Time) + t, err := timestampProto(*tim) + if err != nil { + return 0 + } + size := Size(t) + return size + sizeVarint(uint64(size)) + len(p.tagcode) +} + +func (o *Buffer) enc_ref_time(p *Properties, base structPointer) error { + tim := structPointer_InterfaceAt(base, p.field, timeType).(*time.Time) + t, err := timestampProto(*tim) + if err != nil { + return err + } + data, err := Marshal(t) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + return nil +} + +func size_slice_time(p *Properties, base structPointer) (n int) { + ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))).(*[]*time.Time) + tims := *ptims + for i := 0; i < len(tims); i++ { + if tims[i] == nil { + return 0 + } + tproto, err := timestampProto(*tims[i]) + if err != nil { + return 0 + } + size := Size(tproto) + n += len(p.tagcode) + size + sizeVarint(uint64(size)) + } + return n +} + +func (o *Buffer) enc_slice_time(p *Properties, base structPointer) error { + ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))).(*[]*time.Time) + tims := *ptims + for i := 0; i < len(tims); i++ { + if tims[i] == nil { + return errRepeatedHasNil + } + tproto, err := timestampProto(*tims[i]) + if err != nil { + return err + } + data, err := Marshal(tproto) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + } + return nil +} + +func size_slice_ref_time(p *Properties, base structPointer) (n int) { + ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(timeType)).(*[]time.Time) + tims := *ptims + for i := 0; i < len(tims); i++ { + tproto, err := timestampProto(tims[i]) + if err != nil { + return 0 + } + size := Size(tproto) + n += len(p.tagcode) + size + sizeVarint(uint64(size)) + } + return n +} + +func (o *Buffer) enc_slice_ref_time(p *Properties, base structPointer) error { + ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(timeType)).(*[]time.Time) + tims := *ptims + for i := 0; i < len(tims); i++ { + tproto, err := timestampProto(tims[i]) + if err != nil { + return err + } + data, err := Marshal(tproto) + if err != nil { + return err + } + o.buf = append(o.buf, p.tagcode...) + o.EncodeRawBytes(data) + } + return nil +} diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile new file mode 100644 index 0000000..3496dc9 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile @@ -0,0 +1,36 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +regenerate: + go install github.com/gogo/protobuf/protoc-gen-gogo + go install github.com/gogo/protobuf/protoc-gen-gostring + protoc --gogo_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto + protoc --gostring_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go new file mode 100644 index 0000000..a85bf19 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go @@ -0,0 +1,118 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Package descriptor provides functions for obtaining protocol buffer +// descriptors for generated Go types. +// +// These functions cannot go in package proto because they depend on the +// generated protobuf descriptor messages, which themselves depend on proto. +package descriptor + +import ( + "bytes" + "compress/gzip" + "fmt" + "io/ioutil" + + "github.com/gogo/protobuf/proto" +) + +// extractFile extracts a FileDescriptorProto from a gzip'd buffer. +func extractFile(gz []byte) (*FileDescriptorProto, error) { + r, err := gzip.NewReader(bytes.NewReader(gz)) + if err != nil { + return nil, fmt.Errorf("failed to open gzip reader: %v", err) + } + defer r.Close() + + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, fmt.Errorf("failed to uncompress descriptor: %v", err) + } + + fd := new(FileDescriptorProto) + if err := proto.Unmarshal(b, fd); err != nil { + return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err) + } + + return fd, nil +} + +// Message is a proto.Message with a method to return its descriptor. +// +// Message types generated by the protocol compiler always satisfy +// the Message interface. +type Message interface { + proto.Message + Descriptor() ([]byte, []int) +} + +// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it +// describing the given message. +func ForMessage(msg Message) (fd *FileDescriptorProto, md *DescriptorProto) { + gz, path := msg.Descriptor() + fd, err := extractFile(gz) + if err != nil { + panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err)) + } + + md = fd.MessageType[path[0]] + for _, i := range path[1:] { + md = md.NestedType[i] + } + return fd, md +} + +// Is this field a scalar numeric type? +func (field *FieldDescriptorProto) IsScalar() bool { + if field.Type == nil { + return false + } + switch *field.Type { + case FieldDescriptorProto_TYPE_DOUBLE, + FieldDescriptorProto_TYPE_FLOAT, + FieldDescriptorProto_TYPE_INT64, + FieldDescriptorProto_TYPE_UINT64, + FieldDescriptorProto_TYPE_INT32, + FieldDescriptorProto_TYPE_FIXED64, + FieldDescriptorProto_TYPE_FIXED32, + FieldDescriptorProto_TYPE_BOOL, + FieldDescriptorProto_TYPE_UINT32, + FieldDescriptorProto_TYPE_ENUM, + FieldDescriptorProto_TYPE_SFIXED32, + FieldDescriptorProto_TYPE_SFIXED64, + FieldDescriptorProto_TYPE_SINT32, + FieldDescriptorProto_TYPE_SINT64: + return true + default: + return false + } +} diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go new file mode 100644 index 0000000..6c4d80f --- /dev/null +++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go @@ -0,0 +1,2088 @@ +// Code generated by protoc-gen-gogo. +// source: descriptor.proto +// DO NOT EDIT! + +/* +Package descriptor is a generated protocol buffer package. + +It is generated from these files: + descriptor.proto + +It has these top-level messages: + FileDescriptorSet + FileDescriptorProto + DescriptorProto + FieldDescriptorProto + OneofDescriptorProto + EnumDescriptorProto + EnumValueDescriptorProto + ServiceDescriptorProto + MethodDescriptorProto + FileOptions + MessageOptions + FieldOptions + OneofOptions + EnumOptions + EnumValueOptions + ServiceOptions + MethodOptions + UninterpretedOption + SourceCodeInfo + GeneratedCodeInfo +*/ +package descriptor + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +type FieldDescriptorProto_Type int32 + +const ( + // 0 is reserved for errors. + // Order is weird for historical reasons. + FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1 + FieldDescriptorProto_TYPE_FLOAT FieldDescriptorProto_Type = 2 + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + FieldDescriptorProto_TYPE_INT64 FieldDescriptorProto_Type = 3 + FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4 + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + FieldDescriptorProto_TYPE_INT32 FieldDescriptorProto_Type = 5 + FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6 + FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7 + FieldDescriptorProto_TYPE_BOOL FieldDescriptorProto_Type = 8 + FieldDescriptorProto_TYPE_STRING FieldDescriptorProto_Type = 9 + FieldDescriptorProto_TYPE_GROUP FieldDescriptorProto_Type = 10 + FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11 + // New in version 2. + FieldDescriptorProto_TYPE_BYTES FieldDescriptorProto_Type = 12 + FieldDescriptorProto_TYPE_UINT32 FieldDescriptorProto_Type = 13 + FieldDescriptorProto_TYPE_ENUM FieldDescriptorProto_Type = 14 + FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15 + FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16 + FieldDescriptorProto_TYPE_SINT32 FieldDescriptorProto_Type = 17 + FieldDescriptorProto_TYPE_SINT64 FieldDescriptorProto_Type = 18 +) + +var FieldDescriptorProto_Type_name = map[int32]string{ + 1: "TYPE_DOUBLE", + 2: "TYPE_FLOAT", + 3: "TYPE_INT64", + 4: "TYPE_UINT64", + 5: "TYPE_INT32", + 6: "TYPE_FIXED64", + 7: "TYPE_FIXED32", + 8: "TYPE_BOOL", + 9: "TYPE_STRING", + 10: "TYPE_GROUP", + 11: "TYPE_MESSAGE", + 12: "TYPE_BYTES", + 13: "TYPE_UINT32", + 14: "TYPE_ENUM", + 15: "TYPE_SFIXED32", + 16: "TYPE_SFIXED64", + 17: "TYPE_SINT32", + 18: "TYPE_SINT64", +} +var FieldDescriptorProto_Type_value = map[string]int32{ + "TYPE_DOUBLE": 1, + "TYPE_FLOAT": 2, + "TYPE_INT64": 3, + "TYPE_UINT64": 4, + "TYPE_INT32": 5, + "TYPE_FIXED64": 6, + "TYPE_FIXED32": 7, + "TYPE_BOOL": 8, + "TYPE_STRING": 9, + "TYPE_GROUP": 10, + "TYPE_MESSAGE": 11, + "TYPE_BYTES": 12, + "TYPE_UINT32": 13, + "TYPE_ENUM": 14, + "TYPE_SFIXED32": 15, + "TYPE_SFIXED64": 16, + "TYPE_SINT32": 17, + "TYPE_SINT64": 18, +} + +func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type { + p := new(FieldDescriptorProto_Type) + *p = x + return p +} +func (x FieldDescriptorProto_Type) String() string { + return proto.EnumName(FieldDescriptorProto_Type_name, int32(x)) +} +func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type") + if err != nil { + return err + } + *x = FieldDescriptorProto_Type(value) + return nil +} +func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{3, 0} +} + +type FieldDescriptorProto_Label int32 + +const ( + // 0 is reserved for errors + FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1 + FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2 + FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3 +) + +var FieldDescriptorProto_Label_name = map[int32]string{ + 1: "LABEL_OPTIONAL", + 2: "LABEL_REQUIRED", + 3: "LABEL_REPEATED", +} +var FieldDescriptorProto_Label_value = map[string]int32{ + "LABEL_OPTIONAL": 1, + "LABEL_REQUIRED": 2, + "LABEL_REPEATED": 3, +} + +func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label { + p := new(FieldDescriptorProto_Label) + *p = x + return p +} +func (x FieldDescriptorProto_Label) String() string { + return proto.EnumName(FieldDescriptorProto_Label_name, int32(x)) +} +func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label") + if err != nil { + return err + } + *x = FieldDescriptorProto_Label(value) + return nil +} +func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{3, 1} +} + +// Generated classes can be optimized for speed or code size. +type FileOptions_OptimizeMode int32 + +const ( + FileOptions_SPEED FileOptions_OptimizeMode = 1 + // etc. + FileOptions_CODE_SIZE FileOptions_OptimizeMode = 2 + FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3 +) + +var FileOptions_OptimizeMode_name = map[int32]string{ + 1: "SPEED", + 2: "CODE_SIZE", + 3: "LITE_RUNTIME", +} +var FileOptions_OptimizeMode_value = map[string]int32{ + "SPEED": 1, + "CODE_SIZE": 2, + "LITE_RUNTIME": 3, +} + +func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode { + p := new(FileOptions_OptimizeMode) + *p = x + return p +} +func (x FileOptions_OptimizeMode) String() string { + return proto.EnumName(FileOptions_OptimizeMode_name, int32(x)) +} +func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode") + if err != nil { + return err + } + *x = FileOptions_OptimizeMode(value) + return nil +} +func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{9, 0} +} + +type FieldOptions_CType int32 + +const ( + // Default mode. + FieldOptions_STRING FieldOptions_CType = 0 + FieldOptions_CORD FieldOptions_CType = 1 + FieldOptions_STRING_PIECE FieldOptions_CType = 2 +) + +var FieldOptions_CType_name = map[int32]string{ + 0: "STRING", + 1: "CORD", + 2: "STRING_PIECE", +} +var FieldOptions_CType_value = map[string]int32{ + "STRING": 0, + "CORD": 1, + "STRING_PIECE": 2, +} + +func (x FieldOptions_CType) Enum() *FieldOptions_CType { + p := new(FieldOptions_CType) + *p = x + return p +} +func (x FieldOptions_CType) String() string { + return proto.EnumName(FieldOptions_CType_name, int32(x)) +} +func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType") + if err != nil { + return err + } + *x = FieldOptions_CType(value) + return nil +} +func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{11, 0} +} + +type FieldOptions_JSType int32 + +const ( + // Use the default type. + FieldOptions_JS_NORMAL FieldOptions_JSType = 0 + // Use JavaScript strings. + FieldOptions_JS_STRING FieldOptions_JSType = 1 + // Use JavaScript numbers. + FieldOptions_JS_NUMBER FieldOptions_JSType = 2 +) + +var FieldOptions_JSType_name = map[int32]string{ + 0: "JS_NORMAL", + 1: "JS_STRING", + 2: "JS_NUMBER", +} +var FieldOptions_JSType_value = map[string]int32{ + "JS_NORMAL": 0, + "JS_STRING": 1, + "JS_NUMBER": 2, +} + +func (x FieldOptions_JSType) Enum() *FieldOptions_JSType { + p := new(FieldOptions_JSType) + *p = x + return p +} +func (x FieldOptions_JSType) String() string { + return proto.EnumName(FieldOptions_JSType_name, int32(x)) +} +func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType") + if err != nil { + return err + } + *x = FieldOptions_JSType(value) + return nil +} +func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{11, 1} +} + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +type FileDescriptorSet struct { + File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} } +func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorSet) ProtoMessage() {} +func (*FileDescriptorSet) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{0} } + +func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto { + if m != nil { + return m.File + } + return nil +} + +// Describes a complete .proto file. +type FileDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` + // Names of files imported by this file. + Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"` + // Indexes of the public imported files in the dependency list above. + PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"` + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"` + // All top-level definitions in this file. + MessageType []*DescriptorProto `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"` + EnumType []*EnumDescriptorProto `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` + Service []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"` + Extension []*FieldDescriptorProto `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"` + Options *FileOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} } +func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorProto) ProtoMessage() {} +func (*FileDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{1} } + +func (m *FileDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *FileDescriptorProto) GetPackage() string { + if m != nil && m.Package != nil { + return *m.Package + } + return "" +} + +func (m *FileDescriptorProto) GetDependency() []string { + if m != nil { + return m.Dependency + } + return nil +} + +func (m *FileDescriptorProto) GetPublicDependency() []int32 { + if m != nil { + return m.PublicDependency + } + return nil +} + +func (m *FileDescriptorProto) GetWeakDependency() []int32 { + if m != nil { + return m.WeakDependency + } + return nil +} + +func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto { + if m != nil { + return m.MessageType + } + return nil +} + +func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto { + if m != nil { + return m.EnumType + } + return nil +} + +func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto { + if m != nil { + return m.Service + } + return nil +} + +func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto { + if m != nil { + return m.Extension + } + return nil +} + +func (m *FileDescriptorProto) GetOptions() *FileOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo { + if m != nil { + return m.SourceCodeInfo + } + return nil +} + +func (m *FileDescriptorProto) GetSyntax() string { + if m != nil && m.Syntax != nil { + return *m.Syntax + } + return "" +} + +// Describes a message type. +type DescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Field []*FieldDescriptorProto `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"` + Extension []*FieldDescriptorProto `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"` + NestedType []*DescriptorProto `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"` + EnumType []*EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` + ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"` + OneofDecl []*OneofDescriptorProto `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"` + Options *MessageOptions `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"` + ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DescriptorProto) Reset() { *m = DescriptorProto{} } +func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto) ProtoMessage() {} +func (*DescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{2} } + +func (m *DescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *DescriptorProto) GetField() []*FieldDescriptorProto { + if m != nil { + return m.Field + } + return nil +} + +func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto { + if m != nil { + return m.Extension + } + return nil +} + +func (m *DescriptorProto) GetNestedType() []*DescriptorProto { + if m != nil { + return m.NestedType + } + return nil +} + +func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto { + if m != nil { + return m.EnumType + } + return nil +} + +func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange { + if m != nil { + return m.ExtensionRange + } + return nil +} + +func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto { + if m != nil { + return m.OneofDecl + } + return nil +} + +func (m *DescriptorProto) GetOptions() *MessageOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange { + if m != nil { + return m.ReservedRange + } + return nil +} + +func (m *DescriptorProto) GetReservedName() []string { + if m != nil { + return m.ReservedName + } + return nil +} + +type DescriptorProto_ExtensionRange struct { + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} } +func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto_ExtensionRange) ProtoMessage() {} +func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{2, 0} +} + +func (m *DescriptorProto_ExtensionRange) GetStart() int32 { + if m != nil && m.Start != nil { + return *m.Start + } + return 0 +} + +func (m *DescriptorProto_ExtensionRange) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +// Range of reserved tag numbers. Reserved tag numbers may not be used by +// fields or extension ranges in the same message. Reserved ranges may +// not overlap. +type DescriptorProto_ReservedRange struct { + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DescriptorProto_ReservedRange) Reset() { *m = DescriptorProto_ReservedRange{} } +func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto_ReservedRange) ProtoMessage() {} +func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{2, 1} +} + +func (m *DescriptorProto_ReservedRange) GetStart() int32 { + if m != nil && m.Start != nil { + return *m.Start + } + return 0 +} + +func (m *DescriptorProto_ReservedRange) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +// Describes a field within a message. +type FieldDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` + Label *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"` + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"` + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"` + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"` + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` + Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } +func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*FieldDescriptorProto) ProtoMessage() {} +func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{3} } + +func (m *FieldDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *FieldDescriptorProto) GetNumber() int32 { + if m != nil && m.Number != nil { + return *m.Number + } + return 0 +} + +func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label { + if m != nil && m.Label != nil { + return *m.Label + } + return FieldDescriptorProto_LABEL_OPTIONAL +} + +func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type { + if m != nil && m.Type != nil { + return *m.Type + } + return FieldDescriptorProto_TYPE_DOUBLE +} + +func (m *FieldDescriptorProto) GetTypeName() string { + if m != nil && m.TypeName != nil { + return *m.TypeName + } + return "" +} + +func (m *FieldDescriptorProto) GetExtendee() string { + if m != nil && m.Extendee != nil { + return *m.Extendee + } + return "" +} + +func (m *FieldDescriptorProto) GetDefaultValue() string { + if m != nil && m.DefaultValue != nil { + return *m.DefaultValue + } + return "" +} + +func (m *FieldDescriptorProto) GetOneofIndex() int32 { + if m != nil && m.OneofIndex != nil { + return *m.OneofIndex + } + return 0 +} + +func (m *FieldDescriptorProto) GetJsonName() string { + if m != nil && m.JsonName != nil { + return *m.JsonName + } + return "" +} + +func (m *FieldDescriptorProto) GetOptions() *FieldOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a oneof. +type OneofDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } +func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*OneofDescriptorProto) ProtoMessage() {} +func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{4} } + +func (m *OneofDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *OneofDescriptorProto) GetOptions() *OneofOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes an enum type. +type EnumDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` + Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } +func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*EnumDescriptorProto) ProtoMessage() {} +func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{5} } + +func (m *EnumDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto { + if m != nil { + return m.Value + } + return nil +} + +func (m *EnumDescriptorProto) GetOptions() *EnumOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a value within an enum. +type EnumValueDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } +func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*EnumValueDescriptorProto) ProtoMessage() {} +func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{6} +} + +func (m *EnumValueDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *EnumValueDescriptorProto) GetNumber() int32 { + if m != nil && m.Number != nil { + return *m.Number + } + return 0 +} + +func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a service. +type ServiceDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` + Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } +func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*ServiceDescriptorProto) ProtoMessage() {} +func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{7} } + +func (m *ServiceDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto { + if m != nil { + return m.Method + } + return nil +} + +func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a method of a service. +type MethodDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + InputType *string `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"` + OutputType *string `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"` + Options *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"` + // Identifies if client streams multiple client messages + ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` + // Identifies if server streams multiple server messages + ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } +func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*MethodDescriptorProto) ProtoMessage() {} +func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{8} } + +const Default_MethodDescriptorProto_ClientStreaming bool = false +const Default_MethodDescriptorProto_ServerStreaming bool = false + +func (m *MethodDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *MethodDescriptorProto) GetInputType() string { + if m != nil && m.InputType != nil { + return *m.InputType + } + return "" +} + +func (m *MethodDescriptorProto) GetOutputType() string { + if m != nil && m.OutputType != nil { + return *m.OutputType + } + return "" +} + +func (m *MethodDescriptorProto) GetOptions() *MethodOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *MethodDescriptorProto) GetClientStreaming() bool { + if m != nil && m.ClientStreaming != nil { + return *m.ClientStreaming + } + return Default_MethodDescriptorProto_ClientStreaming +} + +func (m *MethodDescriptorProto) GetServerStreaming() bool { + if m != nil && m.ServerStreaming != nil { + return *m.ServerStreaming + } + return Default_MethodDescriptorProto_ServerStreaming +} + +type FileOptions struct { + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` + // If set true, then the Java code generator will generate equals() and + // hashCode() methods for all messages defined in the .proto file. + // This increases generated code size, potentially substantially for large + // protos, which may harm a memory-constrained application. + // - In the full runtime this is a speed optimization, as the + // AbstractMessage base class includes reflection-based implementations of + // these methods. + // - In the lite runtime, setting this option changes the semantics of + // equals() and hashCode() to more closely match those of the full runtime; + // the generated methods compute their results based on field values rather + // than object identity. (Implementations should not assume that hashcodes + // will be consistent across runtimes or versions of the protocol compiler.) + JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash,def=0" json:"java_generate_equals_and_hash,omitempty"` + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + JavaStringCheckUtf8 *bool `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"` + OptimizeFor *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"` + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"` + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` + JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` + PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"` + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"` + // Namespace for generated classes; defaults to the package. + CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FileOptions) Reset() { *m = FileOptions{} } +func (m *FileOptions) String() string { return proto.CompactTextString(m) } +func (*FileOptions) ProtoMessage() {} +func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{9} } + +var extRange_FileOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_FileOptions +} + +const Default_FileOptions_JavaMultipleFiles bool = false +const Default_FileOptions_JavaGenerateEqualsAndHash bool = false +const Default_FileOptions_JavaStringCheckUtf8 bool = false +const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED +const Default_FileOptions_CcGenericServices bool = false +const Default_FileOptions_JavaGenericServices bool = false +const Default_FileOptions_PyGenericServices bool = false +const Default_FileOptions_Deprecated bool = false +const Default_FileOptions_CcEnableArenas bool = false + +func (m *FileOptions) GetJavaPackage() string { + if m != nil && m.JavaPackage != nil { + return *m.JavaPackage + } + return "" +} + +func (m *FileOptions) GetJavaOuterClassname() string { + if m != nil && m.JavaOuterClassname != nil { + return *m.JavaOuterClassname + } + return "" +} + +func (m *FileOptions) GetJavaMultipleFiles() bool { + if m != nil && m.JavaMultipleFiles != nil { + return *m.JavaMultipleFiles + } + return Default_FileOptions_JavaMultipleFiles +} + +func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { + if m != nil && m.JavaGenerateEqualsAndHash != nil { + return *m.JavaGenerateEqualsAndHash + } + return Default_FileOptions_JavaGenerateEqualsAndHash +} + +func (m *FileOptions) GetJavaStringCheckUtf8() bool { + if m != nil && m.JavaStringCheckUtf8 != nil { + return *m.JavaStringCheckUtf8 + } + return Default_FileOptions_JavaStringCheckUtf8 +} + +func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode { + if m != nil && m.OptimizeFor != nil { + return *m.OptimizeFor + } + return Default_FileOptions_OptimizeFor +} + +func (m *FileOptions) GetGoPackage() string { + if m != nil && m.GoPackage != nil { + return *m.GoPackage + } + return "" +} + +func (m *FileOptions) GetCcGenericServices() bool { + if m != nil && m.CcGenericServices != nil { + return *m.CcGenericServices + } + return Default_FileOptions_CcGenericServices +} + +func (m *FileOptions) GetJavaGenericServices() bool { + if m != nil && m.JavaGenericServices != nil { + return *m.JavaGenericServices + } + return Default_FileOptions_JavaGenericServices +} + +func (m *FileOptions) GetPyGenericServices() bool { + if m != nil && m.PyGenericServices != nil { + return *m.PyGenericServices + } + return Default_FileOptions_PyGenericServices +} + +func (m *FileOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_FileOptions_Deprecated +} + +func (m *FileOptions) GetCcEnableArenas() bool { + if m != nil && m.CcEnableArenas != nil { + return *m.CcEnableArenas + } + return Default_FileOptions_CcEnableArenas +} + +func (m *FileOptions) GetObjcClassPrefix() string { + if m != nil && m.ObjcClassPrefix != nil { + return *m.ObjcClassPrefix + } + return "" +} + +func (m *FileOptions) GetCsharpNamespace() string { + if m != nil && m.CsharpNamespace != nil { + return *m.CsharpNamespace + } + return "" +} + +func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type MessageOptions struct { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"` + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"` + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementions still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MessageOptions) Reset() { *m = MessageOptions{} } +func (m *MessageOptions) String() string { return proto.CompactTextString(m) } +func (*MessageOptions) ProtoMessage() {} +func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{10} } + +var extRange_MessageOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_MessageOptions +} + +const Default_MessageOptions_MessageSetWireFormat bool = false +const Default_MessageOptions_NoStandardDescriptorAccessor bool = false +const Default_MessageOptions_Deprecated bool = false + +func (m *MessageOptions) GetMessageSetWireFormat() bool { + if m != nil && m.MessageSetWireFormat != nil { + return *m.MessageSetWireFormat + } + return Default_MessageOptions_MessageSetWireFormat +} + +func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool { + if m != nil && m.NoStandardDescriptorAccessor != nil { + return *m.NoStandardDescriptorAccessor + } + return Default_MessageOptions_NoStandardDescriptorAccessor +} + +func (m *MessageOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_MessageOptions_Deprecated +} + +func (m *MessageOptions) GetMapEntry() bool { + if m != nil && m.MapEntry != nil { + return *m.MapEntry + } + return false +} + +func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type FieldOptions struct { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). By default these types are + // represented as JavaScript strings. This avoids loss of precision that can + // happen when a large value is converted to a floating point JavaScript + // numbers. Specifying JS_NUMBER for the jstype causes the generated + // JavaScript code to use the JavaScript "number" type instead of strings. + // This option is an enum to permit additional types to be added, + // e.g. goog.math.Integer. + Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outher message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // For Google-internal migration only. Do not use. + Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FieldOptions) Reset() { *m = FieldOptions{} } +func (m *FieldOptions) String() string { return proto.CompactTextString(m) } +func (*FieldOptions) ProtoMessage() {} +func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{11} } + +var extRange_FieldOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_FieldOptions +} + +const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING +const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL +const Default_FieldOptions_Lazy bool = false +const Default_FieldOptions_Deprecated bool = false +const Default_FieldOptions_Weak bool = false + +func (m *FieldOptions) GetCtype() FieldOptions_CType { + if m != nil && m.Ctype != nil { + return *m.Ctype + } + return Default_FieldOptions_Ctype +} + +func (m *FieldOptions) GetPacked() bool { + if m != nil && m.Packed != nil { + return *m.Packed + } + return false +} + +func (m *FieldOptions) GetJstype() FieldOptions_JSType { + if m != nil && m.Jstype != nil { + return *m.Jstype + } + return Default_FieldOptions_Jstype +} + +func (m *FieldOptions) GetLazy() bool { + if m != nil && m.Lazy != nil { + return *m.Lazy + } + return Default_FieldOptions_Lazy +} + +func (m *FieldOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_FieldOptions_Deprecated +} + +func (m *FieldOptions) GetWeak() bool { + if m != nil && m.Weak != nil { + return *m.Weak + } + return Default_FieldOptions_Weak +} + +func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type OneofOptions struct { + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OneofOptions) Reset() { *m = OneofOptions{} } +func (m *OneofOptions) String() string { return proto.CompactTextString(m) } +func (*OneofOptions) ProtoMessage() {} +func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{12} } + +var extRange_OneofOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OneofOptions +} + +func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type EnumOptions struct { + // Set this option to true to allow mapping different tag names to the same + // value. + AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"` + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumOptions) Reset() { *m = EnumOptions{} } +func (m *EnumOptions) String() string { return proto.CompactTextString(m) } +func (*EnumOptions) ProtoMessage() {} +func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{13} } + +var extRange_EnumOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_EnumOptions +} + +const Default_EnumOptions_Deprecated bool = false + +func (m *EnumOptions) GetAllowAlias() bool { + if m != nil && m.AllowAlias != nil { + return *m.AllowAlias + } + return false +} + +func (m *EnumOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_EnumOptions_Deprecated +} + +func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type EnumValueOptions struct { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } +func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } +func (*EnumValueOptions) ProtoMessage() {} +func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{14} } + +var extRange_EnumValueOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_EnumValueOptions +} + +const Default_EnumValueOptions_Deprecated bool = false + +func (m *EnumValueOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_EnumValueOptions_Deprecated +} + +func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type ServiceOptions struct { + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } +func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } +func (*ServiceOptions) ProtoMessage() {} +func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{15} } + +var extRange_ServiceOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ServiceOptions +} + +const Default_ServiceOptions_Deprecated bool = false + +func (m *ServiceOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_ServiceOptions_Deprecated +} + +func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type MethodOptions struct { + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MethodOptions) Reset() { *m = MethodOptions{} } +func (m *MethodOptions) String() string { return proto.CompactTextString(m) } +func (*MethodOptions) ProtoMessage() {} +func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{16} } + +var extRange_MethodOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_MethodOptions +} + +const Default_MethodOptions_Deprecated bool = false + +func (m *MethodOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_MethodOptions_Deprecated +} + +func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +type UninterpretedOption struct { + Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` + PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` + NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` + DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } +func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } +func (*UninterpretedOption) ProtoMessage() {} +func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{17} } + +func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { + if m != nil { + return m.Name + } + return nil +} + +func (m *UninterpretedOption) GetIdentifierValue() string { + if m != nil && m.IdentifierValue != nil { + return *m.IdentifierValue + } + return "" +} + +func (m *UninterpretedOption) GetPositiveIntValue() uint64 { + if m != nil && m.PositiveIntValue != nil { + return *m.PositiveIntValue + } + return 0 +} + +func (m *UninterpretedOption) GetNegativeIntValue() int64 { + if m != nil && m.NegativeIntValue != nil { + return *m.NegativeIntValue + } + return 0 +} + +func (m *UninterpretedOption) GetDoubleValue() float64 { + if m != nil && m.DoubleValue != nil { + return *m.DoubleValue + } + return 0 +} + +func (m *UninterpretedOption) GetStringValue() []byte { + if m != nil { + return m.StringValue + } + return nil +} + +func (m *UninterpretedOption) GetAggregateValue() string { + if m != nil && m.AggregateValue != nil { + return *m.AggregateValue + } + return "" +} + +// The name of the uninterpreted option. Each string represents a segment in +// a dot-separated name. is_extension is true iff a segment represents an +// extension (denoted with parentheses in options specs in .proto files). +// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents +// "foo.(bar.baz).qux". +type UninterpretedOption_NamePart struct { + NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` + IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOption_NamePart{} } +func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } +func (*UninterpretedOption_NamePart) ProtoMessage() {} +func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{17, 0} +} + +func (m *UninterpretedOption_NamePart) GetNamePart() string { + if m != nil && m.NamePart != nil { + return *m.NamePart + } + return "" +} + +func (m *UninterpretedOption_NamePart) GetIsExtension() bool { + if m != nil && m.IsExtension != nil { + return *m.IsExtension + } + return false +} + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +type SourceCodeInfo struct { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } +func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } +func (*SourceCodeInfo) ProtoMessage() {} +func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{18} } + +func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { + if m != nil { + return m.Location + } + return nil +} + +type SourceCodeInfo_Location struct { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"` + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` + TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` + LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } +func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } +func (*SourceCodeInfo_Location) ProtoMessage() {} +func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{18, 0} +} + +func (m *SourceCodeInfo_Location) GetPath() []int32 { + if m != nil { + return m.Path + } + return nil +} + +func (m *SourceCodeInfo_Location) GetSpan() []int32 { + if m != nil { + return m.Span + } + return nil +} + +func (m *SourceCodeInfo_Location) GetLeadingComments() string { + if m != nil && m.LeadingComments != nil { + return *m.LeadingComments + } + return "" +} + +func (m *SourceCodeInfo_Location) GetTrailingComments() string { + if m != nil && m.TrailingComments != nil { + return *m.TrailingComments + } + return "" +} + +func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { + if m != nil { + return m.LeadingDetachedComments + } + return nil +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +type GeneratedCodeInfo struct { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } +func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } +func (*GeneratedCodeInfo) ProtoMessage() {} +func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{19} } + +func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { + if m != nil { + return m.Annotation + } + return nil +} + +type GeneratedCodeInfo_Annotation struct { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` + // Identifies the filesystem path to the original source .proto. + SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"` + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` + // Identifies the ending offset in bytes in the generated code that + // relates to the identified offset. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_Annotation{} } +func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } +func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} +func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { + return fileDescriptorDescriptor, []int{19, 0} +} + +func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { + if m != nil { + return m.Path + } + return nil +} + +func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string { + if m != nil && m.SourceFile != nil { + return *m.SourceFile + } + return "" +} + +func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 { + if m != nil && m.Begin != nil { + return *m.Begin + } + return 0 +} + +func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +func init() { + proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet") + proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto") + proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") + proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange") + proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") + proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto") + proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto") + proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") + proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto") + proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto") + proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto") + proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions") + proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions") + proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions") + proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions") + proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions") + proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions") + proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions") + proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions") + proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption") + proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart") + proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo") + proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location") + proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo") + proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation") + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) + proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) + proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) + proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) +} + +func init() { proto.RegisterFile("descriptor.proto", fileDescriptorDescriptor) } + +var fileDescriptorDescriptor = []byte{ + // 2273 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0xdb, 0xc8, + 0x15, 0x5f, 0xea, 0xcb, 0xd2, 0x93, 0x2c, 0x8f, 0xc7, 0xde, 0x84, 0x71, 0x36, 0x1b, 0x47, 0x9b, + 0x34, 0x4e, 0xd2, 0x3a, 0x0b, 0xe7, 0x63, 0xb3, 0xde, 0x62, 0x0b, 0x59, 0x62, 0xbc, 0x0a, 0x64, + 0x4b, 0xa5, 0xec, 0x36, 0xbb, 0x3d, 0x10, 0x63, 0x72, 0x24, 0x33, 0xa1, 0x86, 0x2c, 0x49, 0x25, + 0xf1, 0x9e, 0x02, 0xf4, 0x54, 0xf4, 0x1f, 0x28, 0xda, 0xa2, 0x28, 0xf6, 0xb2, 0x40, 0xff, 0x80, + 0x1e, 0x7a, 0xef, 0xb5, 0x40, 0xef, 0x3d, 0x16, 0x68, 0xff, 0x83, 0x5e, 0x8b, 0x99, 0x21, 0x29, + 0xea, 0x6b, 0xe3, 0x2e, 0xb0, 0x1f, 0x27, 0x6b, 0x7e, 0xef, 0xf7, 0x1e, 0xdf, 0xbc, 0x79, 0x7c, + 0xef, 0x71, 0x0c, 0xc8, 0xa2, 0x81, 0xe9, 0xdb, 0x5e, 0xe8, 0xfa, 0xdb, 0x9e, 0xef, 0x86, 0x2e, + 0x5e, 0x19, 0xb8, 0xee, 0xc0, 0xa1, 0x72, 0x75, 0x32, 0xea, 0xd7, 0x0e, 0x60, 0xf5, 0xb1, 0xed, + 0xd0, 0x66, 0x42, 0xec, 0xd1, 0x10, 0x3f, 0x82, 0x5c, 0xdf, 0x76, 0xa8, 0xaa, 0x6c, 0x66, 0xb7, + 0xca, 0x3b, 0xd7, 0xb7, 0xa7, 0x94, 0xb6, 0x27, 0x35, 0xba, 0x1c, 0xd6, 0x85, 0x46, 0xed, 0x5f, + 0x39, 0x58, 0x9b, 0x23, 0xc5, 0x18, 0x72, 0x8c, 0x0c, 0xb9, 0x45, 0x65, 0xab, 0xa4, 0x8b, 0xdf, + 0x58, 0x85, 0x25, 0x8f, 0x98, 0xcf, 0xc9, 0x80, 0xaa, 0x19, 0x01, 0xc7, 0x4b, 0xfc, 0x2e, 0x80, + 0x45, 0x3d, 0xca, 0x2c, 0xca, 0xcc, 0x33, 0x35, 0xbb, 0x99, 0xdd, 0x2a, 0xe9, 0x29, 0x04, 0xdf, + 0x81, 0x55, 0x6f, 0x74, 0xe2, 0xd8, 0xa6, 0x91, 0xa2, 0xc1, 0x66, 0x76, 0x2b, 0xaf, 0x23, 0x29, + 0x68, 0x8e, 0xc9, 0x37, 0x61, 0xe5, 0x25, 0x25, 0xcf, 0xd3, 0xd4, 0xb2, 0xa0, 0x56, 0x39, 0x9c, + 0x22, 0x36, 0xa0, 0x32, 0xa4, 0x41, 0x40, 0x06, 0xd4, 0x08, 0xcf, 0x3c, 0xaa, 0xe6, 0xc4, 0xee, + 0x37, 0x67, 0x76, 0x3f, 0xbd, 0xf3, 0x72, 0xa4, 0x75, 0x74, 0xe6, 0x51, 0x5c, 0x87, 0x12, 0x65, + 0xa3, 0xa1, 0xb4, 0x90, 0x5f, 0x10, 0x3f, 0x8d, 0x8d, 0x86, 0xd3, 0x56, 0x8a, 0x5c, 0x2d, 0x32, + 0xb1, 0x14, 0x50, 0xff, 0x85, 0x6d, 0x52, 0xb5, 0x20, 0x0c, 0xdc, 0x9c, 0x31, 0xd0, 0x93, 0xf2, + 0x69, 0x1b, 0xb1, 0x1e, 0x6e, 0x40, 0x89, 0xbe, 0x0a, 0x29, 0x0b, 0x6c, 0x97, 0xa9, 0x4b, 0xc2, + 0xc8, 0x8d, 0x39, 0xa7, 0x48, 0x1d, 0x6b, 0xda, 0xc4, 0x58, 0x0f, 0x3f, 0x84, 0x25, 0xd7, 0x0b, + 0x6d, 0x97, 0x05, 0x6a, 0x71, 0x53, 0xd9, 0x2a, 0xef, 0xbc, 0x33, 0x37, 0x11, 0x3a, 0x92, 0xa3, + 0xc7, 0x64, 0xdc, 0x02, 0x14, 0xb8, 0x23, 0xdf, 0xa4, 0x86, 0xe9, 0x5a, 0xd4, 0xb0, 0x59, 0xdf, + 0x55, 0x4b, 0xc2, 0xc0, 0xd5, 0xd9, 0x8d, 0x08, 0x62, 0xc3, 0xb5, 0x68, 0x8b, 0xf5, 0x5d, 0xbd, + 0x1a, 0x4c, 0xac, 0xf1, 0x05, 0x28, 0x04, 0x67, 0x2c, 0x24, 0xaf, 0xd4, 0x8a, 0xc8, 0x90, 0x68, + 0x55, 0xfb, 0x6f, 0x1e, 0x56, 0xce, 0x93, 0x62, 0x1f, 0x41, 0xbe, 0xcf, 0x77, 0xa9, 0x66, 0xfe, + 0x9f, 0x18, 0x48, 0x9d, 0xc9, 0x20, 0x16, 0xbe, 0x66, 0x10, 0xeb, 0x50, 0x66, 0x34, 0x08, 0xa9, + 0x25, 0x33, 0x22, 0x7b, 0xce, 0x9c, 0x02, 0xa9, 0x34, 0x9b, 0x52, 0xb9, 0xaf, 0x95, 0x52, 0x4f, + 0x61, 0x25, 0x71, 0xc9, 0xf0, 0x09, 0x1b, 0xc4, 0xb9, 0x79, 0xf7, 0x4d, 0x9e, 0x6c, 0x6b, 0xb1, + 0x9e, 0xce, 0xd5, 0xf4, 0x2a, 0x9d, 0x58, 0xe3, 0x26, 0x80, 0xcb, 0xa8, 0xdb, 0x37, 0x2c, 0x6a, + 0x3a, 0x6a, 0x71, 0x41, 0x94, 0x3a, 0x9c, 0x32, 0x13, 0x25, 0x57, 0xa2, 0xa6, 0x83, 0x3f, 0x1c, + 0xa7, 0xda, 0xd2, 0x82, 0x4c, 0x39, 0x90, 0x2f, 0xd9, 0x4c, 0xb6, 0x1d, 0x43, 0xd5, 0xa7, 0x3c, + 0xef, 0xa9, 0x15, 0xed, 0xac, 0x24, 0x9c, 0xd8, 0x7e, 0xe3, 0xce, 0xf4, 0x48, 0x4d, 0x6e, 0x6c, + 0xd9, 0x4f, 0x2f, 0xf1, 0x7b, 0x90, 0x00, 0x86, 0x48, 0x2b, 0x10, 0x55, 0xa8, 0x12, 0x83, 0x87, + 0x64, 0x48, 0x37, 0x1e, 0x41, 0x75, 0x32, 0x3c, 0x78, 0x1d, 0xf2, 0x41, 0x48, 0xfc, 0x50, 0x64, + 0x61, 0x5e, 0x97, 0x0b, 0x8c, 0x20, 0x4b, 0x99, 0x25, 0xaa, 0x5c, 0x5e, 0xe7, 0x3f, 0x37, 0x3e, + 0x80, 0xe5, 0x89, 0xc7, 0x9f, 0x57, 0xb1, 0xf6, 0xdb, 0x02, 0xac, 0xcf, 0xcb, 0xb9, 0xb9, 0xe9, + 0x7f, 0x01, 0x0a, 0x6c, 0x34, 0x3c, 0xa1, 0xbe, 0x9a, 0x15, 0x16, 0xa2, 0x15, 0xae, 0x43, 0xde, + 0x21, 0x27, 0xd4, 0x51, 0x73, 0x9b, 0xca, 0x56, 0x75, 0xe7, 0xce, 0xb9, 0xb2, 0x7a, 0xbb, 0xcd, + 0x55, 0x74, 0xa9, 0x89, 0x3f, 0x86, 0x5c, 0x54, 0xe2, 0xb8, 0x85, 0xdb, 0xe7, 0xb3, 0xc0, 0x73, + 0x51, 0x17, 0x7a, 0xf8, 0x32, 0x94, 0xf8, 0x5f, 0x19, 0xdb, 0x82, 0xf0, 0xb9, 0xc8, 0x01, 0x1e, + 0x57, 0xbc, 0x01, 0x45, 0x91, 0x66, 0x16, 0x8d, 0x5b, 0x43, 0xb2, 0xe6, 0x07, 0x63, 0xd1, 0x3e, + 0x19, 0x39, 0xa1, 0xf1, 0x82, 0x38, 0x23, 0x2a, 0x12, 0xa6, 0xa4, 0x57, 0x22, 0xf0, 0x67, 0x1c, + 0xc3, 0x57, 0xa1, 0x2c, 0xb3, 0xd2, 0x66, 0x16, 0x7d, 0x25, 0xaa, 0x4f, 0x5e, 0x97, 0x89, 0xda, + 0xe2, 0x08, 0x7f, 0xfc, 0xb3, 0xc0, 0x65, 0xf1, 0xd1, 0x8a, 0x47, 0x70, 0x40, 0x3c, 0xfe, 0x83, + 0xe9, 0xc2, 0x77, 0x65, 0xfe, 0xf6, 0xa6, 0x73, 0xb1, 0xf6, 0x97, 0x0c, 0xe4, 0xc4, 0xfb, 0xb6, + 0x02, 0xe5, 0xa3, 0x4f, 0xbb, 0x9a, 0xd1, 0xec, 0x1c, 0xef, 0xb5, 0x35, 0xa4, 0xe0, 0x2a, 0x80, + 0x00, 0x1e, 0xb7, 0x3b, 0xf5, 0x23, 0x94, 0x49, 0xd6, 0xad, 0xc3, 0xa3, 0x87, 0xf7, 0x51, 0x36, + 0x51, 0x38, 0x96, 0x40, 0x2e, 0x4d, 0xb8, 0xb7, 0x83, 0xf2, 0x18, 0x41, 0x45, 0x1a, 0x68, 0x3d, + 0xd5, 0x9a, 0x0f, 0xef, 0xa3, 0xc2, 0x24, 0x72, 0x6f, 0x07, 0x2d, 0xe1, 0x65, 0x28, 0x09, 0x64, + 0xaf, 0xd3, 0x69, 0xa3, 0x62, 0x62, 0xb3, 0x77, 0xa4, 0xb7, 0x0e, 0xf7, 0x51, 0x29, 0xb1, 0xb9, + 0xaf, 0x77, 0x8e, 0xbb, 0x08, 0x12, 0x0b, 0x07, 0x5a, 0xaf, 0x57, 0xdf, 0xd7, 0x50, 0x39, 0x61, + 0xec, 0x7d, 0x7a, 0xa4, 0xf5, 0x50, 0x65, 0xc2, 0xad, 0x7b, 0x3b, 0x68, 0x39, 0x79, 0x84, 0x76, + 0x78, 0x7c, 0x80, 0xaa, 0x78, 0x15, 0x96, 0xe5, 0x23, 0x62, 0x27, 0x56, 0xa6, 0xa0, 0x87, 0xf7, + 0x11, 0x1a, 0x3b, 0x22, 0xad, 0xac, 0x4e, 0x00, 0x0f, 0xef, 0x23, 0x5c, 0x6b, 0x40, 0x5e, 0x64, + 0x17, 0xc6, 0x50, 0x6d, 0xd7, 0xf7, 0xb4, 0xb6, 0xd1, 0xe9, 0x1e, 0xb5, 0x3a, 0x87, 0xf5, 0x36, + 0x52, 0xc6, 0x98, 0xae, 0xfd, 0xf4, 0xb8, 0xa5, 0x6b, 0x4d, 0x94, 0x49, 0x63, 0x5d, 0xad, 0x7e, + 0xa4, 0x35, 0x51, 0xb6, 0x66, 0xc2, 0xfa, 0xbc, 0x3a, 0x33, 0xf7, 0xcd, 0x48, 0x1d, 0x71, 0x66, + 0xc1, 0x11, 0x0b, 0x5b, 0x33, 0x47, 0xfc, 0x85, 0x02, 0x6b, 0x73, 0x6a, 0xed, 0xdc, 0x87, 0xfc, + 0x04, 0xf2, 0x32, 0x45, 0x65, 0xf7, 0xb9, 0x35, 0xb7, 0x68, 0x8b, 0x84, 0x9d, 0xe9, 0x40, 0x42, + 0x2f, 0xdd, 0x81, 0xb3, 0x0b, 0x3a, 0x30, 0x37, 0x31, 0xe3, 0xe4, 0xaf, 0x14, 0x50, 0x17, 0xd9, + 0x7e, 0x43, 0xa1, 0xc8, 0x4c, 0x14, 0x8a, 0x8f, 0xa6, 0x1d, 0xb8, 0xb6, 0x78, 0x0f, 0x33, 0x5e, + 0x7c, 0xa9, 0xc0, 0x85, 0xf9, 0x83, 0xca, 0x5c, 0x1f, 0x3e, 0x86, 0xc2, 0x90, 0x86, 0xa7, 0x6e, + 0xdc, 0xac, 0x7f, 0x30, 0xa7, 0x05, 0x70, 0xf1, 0x74, 0xac, 0x22, 0xad, 0x74, 0x0f, 0xc9, 0x2e, + 0x9a, 0x36, 0xa4, 0x37, 0x33, 0x9e, 0xfe, 0x3a, 0x03, 0x6f, 0xcf, 0x35, 0x3e, 0xd7, 0xd1, 0x2b, + 0x00, 0x36, 0xf3, 0x46, 0xa1, 0x6c, 0xc8, 0xb2, 0x3e, 0x95, 0x04, 0x22, 0xde, 0x7d, 0x5e, 0x7b, + 0x46, 0x61, 0x22, 0xcf, 0x0a, 0x39, 0x48, 0x48, 0x10, 0x1e, 0x8d, 0x1d, 0xcd, 0x09, 0x47, 0xdf, + 0x5d, 0xb0, 0xd3, 0x99, 0x5e, 0xf7, 0x3e, 0x20, 0xd3, 0xb1, 0x29, 0x0b, 0x8d, 0x20, 0xf4, 0x29, + 0x19, 0xda, 0x6c, 0x20, 0x0a, 0x70, 0x71, 0x37, 0xdf, 0x27, 0x4e, 0x40, 0xf5, 0x15, 0x29, 0xee, + 0xc5, 0x52, 0xae, 0x21, 0xba, 0x8c, 0x9f, 0xd2, 0x28, 0x4c, 0x68, 0x48, 0x71, 0xa2, 0x51, 0xfb, + 0xcd, 0x12, 0x94, 0x53, 0x63, 0x1d, 0xbe, 0x06, 0x95, 0x67, 0xe4, 0x05, 0x31, 0xe2, 0x51, 0x5d, + 0x46, 0xa2, 0xcc, 0xb1, 0x6e, 0x34, 0xae, 0xbf, 0x0f, 0xeb, 0x82, 0xe2, 0x8e, 0x42, 0xea, 0x1b, + 0xa6, 0x43, 0x82, 0x40, 0x04, 0xad, 0x28, 0xa8, 0x98, 0xcb, 0x3a, 0x5c, 0xd4, 0x88, 0x25, 0xf8, + 0x01, 0xac, 0x09, 0x8d, 0xe1, 0xc8, 0x09, 0x6d, 0xcf, 0xa1, 0x06, 0xff, 0x78, 0x08, 0x44, 0x21, + 0x4e, 0x3c, 0x5b, 0xe5, 0x8c, 0x83, 0x88, 0xc0, 0x3d, 0x0a, 0xf0, 0x3e, 0x5c, 0x11, 0x6a, 0x03, + 0xca, 0xa8, 0x4f, 0x42, 0x6a, 0xd0, 0x5f, 0x8e, 0x88, 0x13, 0x18, 0x84, 0x59, 0xc6, 0x29, 0x09, + 0x4e, 0xd5, 0xf5, 0xb4, 0x81, 0x4b, 0x9c, 0xbb, 0x1f, 0x51, 0x35, 0xc1, 0xac, 0x33, 0xeb, 0x13, + 0x12, 0x9c, 0xe2, 0x5d, 0xb8, 0x20, 0x0c, 0x05, 0xa1, 0x6f, 0xb3, 0x81, 0x61, 0x9e, 0x52, 0xf3, + 0xb9, 0x31, 0x0a, 0xfb, 0x8f, 0xd4, 0xcb, 0x69, 0x0b, 0xc2, 0xc9, 0x9e, 0xe0, 0x34, 0x38, 0xe5, + 0x38, 0xec, 0x3f, 0xc2, 0x3d, 0xa8, 0xf0, 0xf3, 0x18, 0xda, 0x9f, 0x53, 0xa3, 0xef, 0xfa, 0xa2, + 0xb9, 0x54, 0xe7, 0xbc, 0xdc, 0xa9, 0x20, 0x6e, 0x77, 0x22, 0x85, 0x03, 0xd7, 0xa2, 0xbb, 0xf9, + 0x5e, 0x57, 0xd3, 0x9a, 0x7a, 0x39, 0xb6, 0xf2, 0xd8, 0xf5, 0x79, 0x4e, 0x0d, 0xdc, 0x24, 0xc6, + 0x65, 0x99, 0x53, 0x03, 0x37, 0x8e, 0xf0, 0x03, 0x58, 0x33, 0x4d, 0xb9, 0x6d, 0xdb, 0x34, 0xa2, + 0x29, 0x3f, 0x50, 0xd1, 0x44, 0xbc, 0x4c, 0x73, 0x5f, 0x12, 0xa2, 0x34, 0x0f, 0xf0, 0x87, 0xf0, + 0xf6, 0x38, 0x5e, 0x69, 0xc5, 0xd5, 0x99, 0x5d, 0x4e, 0xab, 0x3e, 0x80, 0x35, 0xef, 0x6c, 0x56, + 0x11, 0x4f, 0x3c, 0xd1, 0x3b, 0x9b, 0x56, 0xbb, 0x21, 0xbe, 0xdc, 0x7c, 0x6a, 0x92, 0x90, 0x5a, + 0xea, 0xc5, 0x34, 0x3b, 0x25, 0xc0, 0x77, 0x01, 0x99, 0xa6, 0x41, 0x19, 0x39, 0x71, 0xa8, 0x41, + 0x7c, 0xca, 0x48, 0xa0, 0x5e, 0x4d, 0x93, 0xab, 0xa6, 0xa9, 0x09, 0x69, 0x5d, 0x08, 0xf1, 0x6d, + 0x58, 0x75, 0x4f, 0x9e, 0x99, 0x32, 0xb9, 0x0c, 0xcf, 0xa7, 0x7d, 0xfb, 0x95, 0x7a, 0x5d, 0x84, + 0x69, 0x85, 0x0b, 0x44, 0x6a, 0x75, 0x05, 0x8c, 0x6f, 0x01, 0x32, 0x83, 0x53, 0xe2, 0x7b, 0xa2, + 0xbb, 0x07, 0x1e, 0x31, 0xa9, 0x7a, 0x43, 0x52, 0x25, 0x7e, 0x18, 0xc3, 0xf8, 0x29, 0xac, 0x8f, + 0x98, 0xcd, 0x42, 0xea, 0x7b, 0x3e, 0xe5, 0x43, 0xba, 0x7c, 0xd3, 0xd4, 0x7f, 0x2f, 0x2d, 0x18, + 0xb3, 0x8f, 0xd3, 0x6c, 0x79, 0xba, 0xfa, 0xda, 0x68, 0x16, 0xac, 0xed, 0x42, 0x25, 0x7d, 0xe8, + 0xb8, 0x04, 0xf2, 0xd8, 0x91, 0xc2, 0x7b, 0x68, 0xa3, 0xd3, 0xe4, 0xdd, 0xef, 0x33, 0x0d, 0x65, + 0x78, 0x17, 0x6e, 0xb7, 0x8e, 0x34, 0x43, 0x3f, 0x3e, 0x3c, 0x6a, 0x1d, 0x68, 0x28, 0x7b, 0xbb, + 0x54, 0xfc, 0xcf, 0x12, 0x7a, 0xfd, 0xfa, 0xf5, 0xeb, 0x4c, 0xed, 0x6f, 0x19, 0xa8, 0x4e, 0x4e, + 0xbe, 0xf8, 0xc7, 0x70, 0x31, 0xfe, 0x4c, 0x0d, 0x68, 0x68, 0xbc, 0xb4, 0x7d, 0x91, 0x87, 0x43, + 0x22, 0x67, 0xc7, 0x24, 0x84, 0xeb, 0x11, 0xab, 0x47, 0xc3, 0x9f, 0xdb, 0x3e, 0xcf, 0xb2, 0x21, + 0x09, 0x71, 0x1b, 0xae, 0x32, 0xd7, 0x08, 0x42, 0xc2, 0x2c, 0xe2, 0x5b, 0xc6, 0xf8, 0x82, 0xc0, + 0x20, 0xa6, 0x49, 0x83, 0xc0, 0x95, 0x2d, 0x20, 0xb1, 0xf2, 0x0e, 0x73, 0x7b, 0x11, 0x79, 0x5c, + 0x1b, 0xeb, 0x11, 0x75, 0xea, 0xb8, 0xb3, 0x8b, 0x8e, 0xfb, 0x32, 0x94, 0x86, 0xc4, 0x33, 0x28, + 0x0b, 0xfd, 0x33, 0x31, 0xaf, 0x15, 0xf5, 0xe2, 0x90, 0x78, 0x1a, 0x5f, 0x7f, 0x73, 0x67, 0x90, + 0x8e, 0xe3, 0x3f, 0xb3, 0x50, 0x49, 0xcf, 0x6c, 0x7c, 0x04, 0x36, 0x45, 0x7d, 0x56, 0xc4, 0xeb, + 0xfb, 0xde, 0x57, 0x4e, 0x78, 0xdb, 0x0d, 0x5e, 0xb8, 0x77, 0x0b, 0x72, 0x92, 0xd2, 0xa5, 0x26, + 0x6f, 0x9a, 0xfc, 0x85, 0xa5, 0x72, 0x3e, 0x2f, 0xea, 0xd1, 0x0a, 0xef, 0x43, 0xe1, 0x59, 0x20, + 0x6c, 0x17, 0x84, 0xed, 0xeb, 0x5f, 0x6d, 0xfb, 0x49, 0x4f, 0x18, 0x2f, 0x3d, 0xe9, 0x19, 0x87, + 0x1d, 0xfd, 0xa0, 0xde, 0xd6, 0x23, 0x75, 0x7c, 0x09, 0x72, 0x0e, 0xf9, 0xfc, 0x6c, 0xb2, 0xc4, + 0x0b, 0xe8, 0xbc, 0x81, 0xbf, 0x04, 0xb9, 0x97, 0x94, 0x3c, 0x9f, 0x2c, 0xac, 0x02, 0xfa, 0x06, + 0x53, 0xff, 0x2e, 0xe4, 0x45, 0xbc, 0x30, 0x40, 0x14, 0x31, 0xf4, 0x16, 0x2e, 0x42, 0xae, 0xd1, + 0xd1, 0x79, 0xfa, 0x23, 0xa8, 0x48, 0xd4, 0xe8, 0xb6, 0xb4, 0x86, 0x86, 0x32, 0xb5, 0x07, 0x50, + 0x90, 0x41, 0xe0, 0xaf, 0x46, 0x12, 0x06, 0xf4, 0x56, 0xb4, 0x8c, 0x6c, 0x28, 0xb1, 0xf4, 0xf8, + 0x60, 0x4f, 0xd3, 0x51, 0x26, 0x7d, 0xbc, 0x01, 0x54, 0xd2, 0xe3, 0xda, 0xb7, 0x93, 0x53, 0x7f, + 0x55, 0xa0, 0x9c, 0x1a, 0xbf, 0x78, 0xe3, 0x27, 0x8e, 0xe3, 0xbe, 0x34, 0x88, 0x63, 0x93, 0x20, + 0x4a, 0x0a, 0x10, 0x50, 0x9d, 0x23, 0xe7, 0x3d, 0xb4, 0x6f, 0xc5, 0xf9, 0x3f, 0x2a, 0x80, 0xa6, + 0x47, 0xb7, 0x29, 0x07, 0x95, 0xef, 0xd4, 0xc1, 0x3f, 0x28, 0x50, 0x9d, 0x9c, 0xd7, 0xa6, 0xdc, + 0xbb, 0xf6, 0x9d, 0xba, 0xf7, 0x7b, 0x05, 0x96, 0x27, 0xa6, 0xb4, 0xef, 0x95, 0x77, 0xbf, 0xcb, + 0xc2, 0xda, 0x1c, 0x3d, 0x5c, 0x8f, 0xc6, 0x59, 0x39, 0x61, 0xff, 0xe8, 0x3c, 0xcf, 0xda, 0xe6, + 0xdd, 0xb2, 0x4b, 0xfc, 0x30, 0x9a, 0x7e, 0x6f, 0x01, 0xb2, 0x2d, 0xca, 0x42, 0xbb, 0x6f, 0x53, + 0x3f, 0xfa, 0x04, 0x97, 0x33, 0xee, 0xca, 0x18, 0x97, 0x5f, 0xe1, 0x3f, 0x04, 0xec, 0xb9, 0x81, + 0x1d, 0xda, 0x2f, 0xa8, 0x61, 0xb3, 0xf8, 0x7b, 0x9d, 0xcf, 0xbc, 0x39, 0x1d, 0xc5, 0x92, 0x16, + 0x0b, 0x13, 0x36, 0xa3, 0x03, 0x32, 0xc5, 0xe6, 0xb5, 0x2f, 0xab, 0xa3, 0x58, 0x92, 0xb0, 0xaf, + 0x41, 0xc5, 0x72, 0x47, 0x7c, 0x7c, 0x90, 0x3c, 0x5e, 0x6a, 0x15, 0xbd, 0x2c, 0xb1, 0x84, 0x12, + 0xcd, 0x77, 0xe3, 0x8b, 0x82, 0x8a, 0x5e, 0x96, 0x98, 0xa4, 0xdc, 0x84, 0x15, 0x32, 0x18, 0xf8, + 0xdc, 0x78, 0x6c, 0x48, 0x0e, 0xad, 0xd5, 0x04, 0x16, 0xc4, 0x8d, 0x27, 0x50, 0x8c, 0xe3, 0xc0, + 0xbb, 0x19, 0x8f, 0x84, 0xe1, 0xc9, 0xeb, 0x9a, 0xcc, 0x56, 0x49, 0x2f, 0xb2, 0x58, 0x78, 0x0d, + 0x2a, 0x76, 0x60, 0x8c, 0xef, 0x0d, 0x33, 0x9b, 0x99, 0xad, 0xa2, 0x5e, 0xb6, 0x83, 0xe4, 0xa2, + 0xa8, 0xf6, 0x65, 0x06, 0xaa, 0x93, 0xf7, 0x9e, 0xb8, 0x09, 0x45, 0xc7, 0x35, 0x89, 0x48, 0x04, + 0x79, 0xe9, 0xbe, 0xf5, 0x86, 0xab, 0xd2, 0xed, 0x76, 0xc4, 0xd7, 0x13, 0xcd, 0x8d, 0xbf, 0x2b, + 0x50, 0x8c, 0x61, 0x7c, 0x01, 0x72, 0x1e, 0x09, 0x4f, 0x85, 0xb9, 0xfc, 0x5e, 0x06, 0x29, 0xba, + 0x58, 0x73, 0x3c, 0xf0, 0x08, 0x13, 0x29, 0x10, 0xe1, 0x7c, 0xcd, 0xcf, 0xd5, 0xa1, 0xc4, 0x12, + 0xe3, 0xb0, 0x3b, 0x1c, 0x52, 0x16, 0x06, 0xf1, 0xb9, 0x46, 0x78, 0x23, 0x82, 0xf1, 0x1d, 0x58, + 0x0d, 0x7d, 0x62, 0x3b, 0x13, 0xdc, 0x9c, 0xe0, 0xa2, 0x58, 0x90, 0x90, 0x77, 0xe1, 0x52, 0x6c, + 0xd7, 0xa2, 0x21, 0x31, 0x4f, 0xa9, 0x35, 0x56, 0x2a, 0x88, 0x4b, 0xb5, 0x8b, 0x11, 0xa1, 0x19, + 0xc9, 0x63, 0xdd, 0xda, 0x3f, 0x14, 0x58, 0x8d, 0x07, 0x78, 0x2b, 0x09, 0xd6, 0x01, 0x00, 0x61, + 0xcc, 0x0d, 0xd3, 0xe1, 0x9a, 0x4d, 0xe5, 0x19, 0xbd, 0xed, 0x7a, 0xa2, 0xa4, 0xa7, 0x0c, 0x6c, + 0x0c, 0x01, 0xc6, 0x92, 0x85, 0x61, 0xbb, 0x0a, 0xe5, 0xe8, 0x52, 0x5b, 0xfc, 0x67, 0x44, 0x7e, + 0xf5, 0x81, 0x84, 0xf8, 0xa4, 0x8f, 0xd7, 0x21, 0x7f, 0x42, 0x07, 0x36, 0x8b, 0xae, 0xda, 0xe4, + 0x22, 0xbe, 0xc0, 0xcb, 0x25, 0x17, 0x78, 0x7b, 0xbf, 0x80, 0x35, 0xd3, 0x1d, 0x4e, 0xbb, 0xbb, + 0x87, 0xa6, 0xbe, 0x3c, 0x83, 0x4f, 0x94, 0xcf, 0x60, 0x3c, 0x9d, 0xfd, 0x49, 0x51, 0xbe, 0xc8, + 0x64, 0xf7, 0xbb, 0x7b, 0x7f, 0xce, 0x6c, 0xec, 0x4b, 0xd5, 0x6e, 0xbc, 0x53, 0x9d, 0xf6, 0x1d, + 0x6a, 0x72, 0xef, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xd0, 0xf2, 0xf3, 0xa9, 0xf1, 0x19, 0x00, + 0x00, +} diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go new file mode 100644 index 0000000..785d6f9 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go @@ -0,0 +1,715 @@ +// Code generated by protoc-gen-gogo. +// source: descriptor.proto +// DO NOT EDIT! + +/* +Package descriptor is a generated protocol buffer package. + +It is generated from these files: + descriptor.proto + +It has these top-level messages: + FileDescriptorSet + FileDescriptorProto + DescriptorProto + FieldDescriptorProto + OneofDescriptorProto + EnumDescriptorProto + EnumValueDescriptorProto + ServiceDescriptorProto + MethodDescriptorProto + FileOptions + MessageOptions + FieldOptions + OneofOptions + EnumOptions + EnumValueOptions + ServiceOptions + MethodOptions + UninterpretedOption + SourceCodeInfo + GeneratedCodeInfo +*/ +package descriptor + +import fmt "fmt" +import strings "strings" +import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" +import sort "sort" +import strconv "strconv" +import reflect "reflect" +import proto "github.com/gogo/protobuf/proto" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +func (this *FileDescriptorSet) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 5) + s = append(s, "&descriptor.FileDescriptorSet{") + if this.File != nil { + s = append(s, "File: "+fmt.Sprintf("%#v", this.File)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *FileDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 16) + s = append(s, "&descriptor.FileDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Package != nil { + s = append(s, "Package: "+valueToGoStringDescriptor(this.Package, "string")+",\n") + } + if this.Dependency != nil { + s = append(s, "Dependency: "+fmt.Sprintf("%#v", this.Dependency)+",\n") + } + if this.PublicDependency != nil { + s = append(s, "PublicDependency: "+fmt.Sprintf("%#v", this.PublicDependency)+",\n") + } + if this.WeakDependency != nil { + s = append(s, "WeakDependency: "+fmt.Sprintf("%#v", this.WeakDependency)+",\n") + } + if this.MessageType != nil { + s = append(s, "MessageType: "+fmt.Sprintf("%#v", this.MessageType)+",\n") + } + if this.EnumType != nil { + s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n") + } + if this.Service != nil { + s = append(s, "Service: "+fmt.Sprintf("%#v", this.Service)+",\n") + } + if this.Extension != nil { + s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.SourceCodeInfo != nil { + s = append(s, "SourceCodeInfo: "+fmt.Sprintf("%#v", this.SourceCodeInfo)+",\n") + } + if this.Syntax != nil { + s = append(s, "Syntax: "+valueToGoStringDescriptor(this.Syntax, "string")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *DescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 14) + s = append(s, "&descriptor.DescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Field != nil { + s = append(s, "Field: "+fmt.Sprintf("%#v", this.Field)+",\n") + } + if this.Extension != nil { + s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n") + } + if this.NestedType != nil { + s = append(s, "NestedType: "+fmt.Sprintf("%#v", this.NestedType)+",\n") + } + if this.EnumType != nil { + s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n") + } + if this.ExtensionRange != nil { + s = append(s, "ExtensionRange: "+fmt.Sprintf("%#v", this.ExtensionRange)+",\n") + } + if this.OneofDecl != nil { + s = append(s, "OneofDecl: "+fmt.Sprintf("%#v", this.OneofDecl)+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.ReservedRange != nil { + s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n") + } + if this.ReservedName != nil { + s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *DescriptorProto_ExtensionRange) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.DescriptorProto_ExtensionRange{") + if this.Start != nil { + s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") + } + if this.End != nil { + s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *DescriptorProto_ReservedRange) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.DescriptorProto_ReservedRange{") + if this.Start != nil { + s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") + } + if this.End != nil { + s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *FieldDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 14) + s = append(s, "&descriptor.FieldDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Number != nil { + s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n") + } + if this.Label != nil { + s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "descriptor.FieldDescriptorProto_Label")+",\n") + } + if this.Type != nil { + s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "descriptor.FieldDescriptorProto_Type")+",\n") + } + if this.TypeName != nil { + s = append(s, "TypeName: "+valueToGoStringDescriptor(this.TypeName, "string")+",\n") + } + if this.Extendee != nil { + s = append(s, "Extendee: "+valueToGoStringDescriptor(this.Extendee, "string")+",\n") + } + if this.DefaultValue != nil { + s = append(s, "DefaultValue: "+valueToGoStringDescriptor(this.DefaultValue, "string")+",\n") + } + if this.OneofIndex != nil { + s = append(s, "OneofIndex: "+valueToGoStringDescriptor(this.OneofIndex, "int32")+",\n") + } + if this.JsonName != nil { + s = append(s, "JsonName: "+valueToGoStringDescriptor(this.JsonName, "string")+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *OneofDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.OneofDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *EnumDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 7) + s = append(s, "&descriptor.EnumDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Value != nil { + s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *EnumValueDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 7) + s = append(s, "&descriptor.EnumValueDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Number != nil { + s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *ServiceDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 7) + s = append(s, "&descriptor.ServiceDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.Method != nil { + s = append(s, "Method: "+fmt.Sprintf("%#v", this.Method)+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *MethodDescriptorProto) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 10) + s = append(s, "&descriptor.MethodDescriptorProto{") + if this.Name != nil { + s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") + } + if this.InputType != nil { + s = append(s, "InputType: "+valueToGoStringDescriptor(this.InputType, "string")+",\n") + } + if this.OutputType != nil { + s = append(s, "OutputType: "+valueToGoStringDescriptor(this.OutputType, "string")+",\n") + } + if this.Options != nil { + s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") + } + if this.ClientStreaming != nil { + s = append(s, "ClientStreaming: "+valueToGoStringDescriptor(this.ClientStreaming, "bool")+",\n") + } + if this.ServerStreaming != nil { + s = append(s, "ServerStreaming: "+valueToGoStringDescriptor(this.ServerStreaming, "bool")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *FileOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 19) + s = append(s, "&descriptor.FileOptions{") + if this.JavaPackage != nil { + s = append(s, "JavaPackage: "+valueToGoStringDescriptor(this.JavaPackage, "string")+",\n") + } + if this.JavaOuterClassname != nil { + s = append(s, "JavaOuterClassname: "+valueToGoStringDescriptor(this.JavaOuterClassname, "string")+",\n") + } + if this.JavaMultipleFiles != nil { + s = append(s, "JavaMultipleFiles: "+valueToGoStringDescriptor(this.JavaMultipleFiles, "bool")+",\n") + } + if this.JavaGenerateEqualsAndHash != nil { + s = append(s, "JavaGenerateEqualsAndHash: "+valueToGoStringDescriptor(this.JavaGenerateEqualsAndHash, "bool")+",\n") + } + if this.JavaStringCheckUtf8 != nil { + s = append(s, "JavaStringCheckUtf8: "+valueToGoStringDescriptor(this.JavaStringCheckUtf8, "bool")+",\n") + } + if this.OptimizeFor != nil { + s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "descriptor.FileOptions_OptimizeMode")+",\n") + } + if this.GoPackage != nil { + s = append(s, "GoPackage: "+valueToGoStringDescriptor(this.GoPackage, "string")+",\n") + } + if this.CcGenericServices != nil { + s = append(s, "CcGenericServices: "+valueToGoStringDescriptor(this.CcGenericServices, "bool")+",\n") + } + if this.JavaGenericServices != nil { + s = append(s, "JavaGenericServices: "+valueToGoStringDescriptor(this.JavaGenericServices, "bool")+",\n") + } + if this.PyGenericServices != nil { + s = append(s, "PyGenericServices: "+valueToGoStringDescriptor(this.PyGenericServices, "bool")+",\n") + } + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.CcEnableArenas != nil { + s = append(s, "CcEnableArenas: "+valueToGoStringDescriptor(this.CcEnableArenas, "bool")+",\n") + } + if this.ObjcClassPrefix != nil { + s = append(s, "ObjcClassPrefix: "+valueToGoStringDescriptor(this.ObjcClassPrefix, "string")+",\n") + } + if this.CsharpNamespace != nil { + s = append(s, "CsharpNamespace: "+valueToGoStringDescriptor(this.CsharpNamespace, "string")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *MessageOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 9) + s = append(s, "&descriptor.MessageOptions{") + if this.MessageSetWireFormat != nil { + s = append(s, "MessageSetWireFormat: "+valueToGoStringDescriptor(this.MessageSetWireFormat, "bool")+",\n") + } + if this.NoStandardDescriptorAccessor != nil { + s = append(s, "NoStandardDescriptorAccessor: "+valueToGoStringDescriptor(this.NoStandardDescriptorAccessor, "bool")+",\n") + } + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.MapEntry != nil { + s = append(s, "MapEntry: "+valueToGoStringDescriptor(this.MapEntry, "bool")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *FieldOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 11) + s = append(s, "&descriptor.FieldOptions{") + if this.Ctype != nil { + s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "descriptor.FieldOptions_CType")+",\n") + } + if this.Packed != nil { + s = append(s, "Packed: "+valueToGoStringDescriptor(this.Packed, "bool")+",\n") + } + if this.Jstype != nil { + s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "descriptor.FieldOptions_JSType")+",\n") + } + if this.Lazy != nil { + s = append(s, "Lazy: "+valueToGoStringDescriptor(this.Lazy, "bool")+",\n") + } + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.Weak != nil { + s = append(s, "Weak: "+valueToGoStringDescriptor(this.Weak, "bool")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *OneofOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 5) + s = append(s, "&descriptor.OneofOptions{") + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *EnumOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 7) + s = append(s, "&descriptor.EnumOptions{") + if this.AllowAlias != nil { + s = append(s, "AllowAlias: "+valueToGoStringDescriptor(this.AllowAlias, "bool")+",\n") + } + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *EnumValueOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.EnumValueOptions{") + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *ServiceOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.ServiceOptions{") + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *MethodOptions) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.MethodOptions{") + if this.Deprecated != nil { + s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") + } + if this.UninterpretedOption != nil { + s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") + } + s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n") + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *UninterpretedOption) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 11) + s = append(s, "&descriptor.UninterpretedOption{") + if this.Name != nil { + s = append(s, "Name: "+fmt.Sprintf("%#v", this.Name)+",\n") + } + if this.IdentifierValue != nil { + s = append(s, "IdentifierValue: "+valueToGoStringDescriptor(this.IdentifierValue, "string")+",\n") + } + if this.PositiveIntValue != nil { + s = append(s, "PositiveIntValue: "+valueToGoStringDescriptor(this.PositiveIntValue, "uint64")+",\n") + } + if this.NegativeIntValue != nil { + s = append(s, "NegativeIntValue: "+valueToGoStringDescriptor(this.NegativeIntValue, "int64")+",\n") + } + if this.DoubleValue != nil { + s = append(s, "DoubleValue: "+valueToGoStringDescriptor(this.DoubleValue, "float64")+",\n") + } + if this.StringValue != nil { + s = append(s, "StringValue: "+valueToGoStringDescriptor(this.StringValue, "byte")+",\n") + } + if this.AggregateValue != nil { + s = append(s, "AggregateValue: "+valueToGoStringDescriptor(this.AggregateValue, "string")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *UninterpretedOption_NamePart) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&descriptor.UninterpretedOption_NamePart{") + if this.NamePart != nil { + s = append(s, "NamePart: "+valueToGoStringDescriptor(this.NamePart, "string")+",\n") + } + if this.IsExtension != nil { + s = append(s, "IsExtension: "+valueToGoStringDescriptor(this.IsExtension, "bool")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *SourceCodeInfo) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 5) + s = append(s, "&descriptor.SourceCodeInfo{") + if this.Location != nil { + s = append(s, "Location: "+fmt.Sprintf("%#v", this.Location)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *SourceCodeInfo_Location) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 9) + s = append(s, "&descriptor.SourceCodeInfo_Location{") + if this.Path != nil { + s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n") + } + if this.Span != nil { + s = append(s, "Span: "+fmt.Sprintf("%#v", this.Span)+",\n") + } + if this.LeadingComments != nil { + s = append(s, "LeadingComments: "+valueToGoStringDescriptor(this.LeadingComments, "string")+",\n") + } + if this.TrailingComments != nil { + s = append(s, "TrailingComments: "+valueToGoStringDescriptor(this.TrailingComments, "string")+",\n") + } + if this.LeadingDetachedComments != nil { + s = append(s, "LeadingDetachedComments: "+fmt.Sprintf("%#v", this.LeadingDetachedComments)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *GeneratedCodeInfo) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 5) + s = append(s, "&descriptor.GeneratedCodeInfo{") + if this.Annotation != nil { + s = append(s, "Annotation: "+fmt.Sprintf("%#v", this.Annotation)+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *GeneratedCodeInfo_Annotation) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 8) + s = append(s, "&descriptor.GeneratedCodeInfo_Annotation{") + if this.Path != nil { + s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n") + } + if this.SourceFile != nil { + s = append(s, "SourceFile: "+valueToGoStringDescriptor(this.SourceFile, "string")+",\n") + } + if this.Begin != nil { + s = append(s, "Begin: "+valueToGoStringDescriptor(this.Begin, "int32")+",\n") + } + if this.End != nil { + s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") + } + if this.XXX_unrecognized != nil { + s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func valueToGoStringDescriptor(v interface{}, typ string) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) +} +func extensionToGoStringDescriptor(m github_com_gogo_protobuf_proto.Message) string { + e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m) + if e == nil { + return "nil" + } + s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{" + keys := make([]int, 0, len(e)) + for k := range e { + keys = append(keys, int(k)) + } + sort.Ints(keys) + ss := []string{} + for _, k := range keys { + ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString()) + } + s += strings.Join(ss, ",") + "})" + return s +} diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go new file mode 100644 index 0000000..e0846a3 --- /dev/null +++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go @@ -0,0 +1,390 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package descriptor + +import ( + "strings" +) + +func (msg *DescriptorProto) GetMapFields() (*FieldDescriptorProto, *FieldDescriptorProto) { + if !msg.GetOptions().GetMapEntry() { + return nil, nil + } + return msg.GetField()[0], msg.GetField()[1] +} + +func dotToUnderscore(r rune) rune { + if r == '.' { + return '_' + } + return r +} + +func (field *FieldDescriptorProto) WireType() (wire int) { + switch *field.Type { + case FieldDescriptorProto_TYPE_DOUBLE: + return 1 + case FieldDescriptorProto_TYPE_FLOAT: + return 5 + case FieldDescriptorProto_TYPE_INT64: + return 0 + case FieldDescriptorProto_TYPE_UINT64: + return 0 + case FieldDescriptorProto_TYPE_INT32: + return 0 + case FieldDescriptorProto_TYPE_UINT32: + return 0 + case FieldDescriptorProto_TYPE_FIXED64: + return 1 + case FieldDescriptorProto_TYPE_FIXED32: + return 5 + case FieldDescriptorProto_TYPE_BOOL: + return 0 + case FieldDescriptorProto_TYPE_STRING: + return 2 + case FieldDescriptorProto_TYPE_GROUP: + return 2 + case FieldDescriptorProto_TYPE_MESSAGE: + return 2 + case FieldDescriptorProto_TYPE_BYTES: + return 2 + case FieldDescriptorProto_TYPE_ENUM: + return 0 + case FieldDescriptorProto_TYPE_SFIXED32: + return 5 + case FieldDescriptorProto_TYPE_SFIXED64: + return 1 + case FieldDescriptorProto_TYPE_SINT32: + return 0 + case FieldDescriptorProto_TYPE_SINT64: + return 0 + } + panic("unreachable") +} + +func (field *FieldDescriptorProto) GetKeyUint64() (x uint64) { + packed := field.IsPacked() + wireType := field.WireType() + fieldNumber := field.GetNumber() + if packed { + wireType = 2 + } + x = uint64(uint32(fieldNumber)<<3 | uint32(wireType)) + return x +} + +func (field *FieldDescriptorProto) GetKey3Uint64() (x uint64) { + packed := field.IsPacked3() + wireType := field.WireType() + fieldNumber := field.GetNumber() + if packed { + wireType = 2 + } + x = uint64(uint32(fieldNumber)<<3 | uint32(wireType)) + return x +} + +func (field *FieldDescriptorProto) GetKey() []byte { + x := field.GetKeyUint64() + i := 0 + keybuf := make([]byte, 0) + for i = 0; x > 127; i++ { + keybuf = append(keybuf, 0x80|uint8(x&0x7F)) + x >>= 7 + } + keybuf = append(keybuf, uint8(x)) + return keybuf +} + +func (field *FieldDescriptorProto) GetKey3() []byte { + x := field.GetKey3Uint64() + i := 0 + keybuf := make([]byte, 0) + for i = 0; x > 127; i++ { + keybuf = append(keybuf, 0x80|uint8(x&0x7F)) + x >>= 7 + } + keybuf = append(keybuf, uint8(x)) + return keybuf +} + +func (desc *FileDescriptorSet) GetField(packageName, messageName, fieldName string) *FieldDescriptorProto { + msg := desc.GetMessage(packageName, messageName) + if msg == nil { + return nil + } + for _, field := range msg.GetField() { + if field.GetName() == fieldName { + return field + } + } + return nil +} + +func (file *FileDescriptorProto) GetMessage(typeName string) *DescriptorProto { + for _, msg := range file.GetMessageType() { + if msg.GetName() == typeName { + return msg + } + nes := file.GetNestedMessage(msg, strings.TrimPrefix(typeName, msg.GetName()+".")) + if nes != nil { + return nes + } + } + return nil +} + +func (file *FileDescriptorProto) GetNestedMessage(msg *DescriptorProto, typeName string) *DescriptorProto { + for _, nes := range msg.GetNestedType() { + if nes.GetName() == typeName { + return nes + } + res := file.GetNestedMessage(nes, strings.TrimPrefix(typeName, nes.GetName()+".")) + if res != nil { + return res + } + } + return nil +} + +func (desc *FileDescriptorSet) GetMessage(packageName string, typeName string) *DescriptorProto { + for _, file := range desc.GetFile() { + if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { + continue + } + for _, msg := range file.GetMessageType() { + if msg.GetName() == typeName { + return msg + } + } + for _, msg := range file.GetMessageType() { + for _, nes := range msg.GetNestedType() { + if nes.GetName() == typeName { + return nes + } + if msg.GetName()+"."+nes.GetName() == typeName { + return nes + } + } + } + } + return nil +} + +func (desc *FileDescriptorSet) IsProto3(packageName string, typeName string) bool { + for _, file := range desc.GetFile() { + if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { + continue + } + for _, msg := range file.GetMessageType() { + if msg.GetName() == typeName { + return file.GetSyntax() == "proto3" + } + } + for _, msg := range file.GetMessageType() { + for _, nes := range msg.GetNestedType() { + if nes.GetName() == typeName { + return file.GetSyntax() == "proto3" + } + if msg.GetName()+"."+nes.GetName() == typeName { + return file.GetSyntax() == "proto3" + } + } + } + } + return false +} + +func (msg *DescriptorProto) IsExtendable() bool { + return len(msg.GetExtensionRange()) > 0 +} + +func (desc *FileDescriptorSet) FindExtension(packageName string, typeName string, fieldName string) (extPackageName string, field *FieldDescriptorProto) { + parent := desc.GetMessage(packageName, typeName) + if parent == nil { + return "", nil + } + if !parent.IsExtendable() { + return "", nil + } + extendee := "." + packageName + "." + typeName + for _, file := range desc.GetFile() { + for _, ext := range file.GetExtension() { + if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) { + if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) { + continue + } + } else { + if ext.GetExtendee() != extendee { + continue + } + } + if ext.GetName() == fieldName { + return file.GetPackage(), ext + } + } + } + return "", nil +} + +func (desc *FileDescriptorSet) FindExtensionByFieldNumber(packageName string, typeName string, fieldNum int32) (extPackageName string, field *FieldDescriptorProto) { + parent := desc.GetMessage(packageName, typeName) + if parent == nil { + return "", nil + } + if !parent.IsExtendable() { + return "", nil + } + extendee := "." + packageName + "." + typeName + for _, file := range desc.GetFile() { + for _, ext := range file.GetExtension() { + if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) { + if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) { + continue + } + } else { + if ext.GetExtendee() != extendee { + continue + } + } + if ext.GetNumber() == fieldNum { + return file.GetPackage(), ext + } + } + } + return "", nil +} + +func (desc *FileDescriptorSet) FindMessage(packageName string, typeName string, fieldName string) (msgPackageName string, msgName string) { + parent := desc.GetMessage(packageName, typeName) + if parent == nil { + return "", "" + } + field := parent.GetFieldDescriptor(fieldName) + if field == nil { + var extPackageName string + extPackageName, field = desc.FindExtension(packageName, typeName, fieldName) + if field == nil { + return "", "" + } + packageName = extPackageName + } + typeNames := strings.Split(field.GetTypeName(), ".") + if len(typeNames) == 1 { + msg := desc.GetMessage(packageName, typeName) + if msg == nil { + return "", "" + } + return packageName, msg.GetName() + } + if len(typeNames) > 2 { + for i := 1; i < len(typeNames)-1; i++ { + packageName = strings.Join(typeNames[1:len(typeNames)-i], ".") + typeName = strings.Join(typeNames[len(typeNames)-i:], ".") + msg := desc.GetMessage(packageName, typeName) + if msg != nil { + typeNames := strings.Split(msg.GetName(), ".") + if len(typeNames) == 1 { + return packageName, msg.GetName() + } + return strings.Join(typeNames[1:len(typeNames)-1], "."), typeNames[len(typeNames)-1] + } + } + } + return "", "" +} + +func (msg *DescriptorProto) GetFieldDescriptor(fieldName string) *FieldDescriptorProto { + for _, field := range msg.GetField() { + if field.GetName() == fieldName { + return field + } + } + return nil +} + +func (desc *FileDescriptorSet) GetEnum(packageName string, typeName string) *EnumDescriptorProto { + for _, file := range desc.GetFile() { + if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { + continue + } + for _, enum := range file.GetEnumType() { + if enum.GetName() == typeName { + return enum + } + } + } + return nil +} + +func (f *FieldDescriptorProto) IsEnum() bool { + return *f.Type == FieldDescriptorProto_TYPE_ENUM +} + +func (f *FieldDescriptorProto) IsMessage() bool { + return *f.Type == FieldDescriptorProto_TYPE_MESSAGE +} + +func (f *FieldDescriptorProto) IsBytes() bool { + return *f.Type == FieldDescriptorProto_TYPE_BYTES +} + +func (f *FieldDescriptorProto) IsRepeated() bool { + return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REPEATED +} + +func (f *FieldDescriptorProto) IsString() bool { + return *f.Type == FieldDescriptorProto_TYPE_STRING +} + +func (f *FieldDescriptorProto) IsBool() bool { + return *f.Type == FieldDescriptorProto_TYPE_BOOL +} + +func (f *FieldDescriptorProto) IsRequired() bool { + return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REQUIRED +} + +func (f *FieldDescriptorProto) IsPacked() bool { + return f.Options != nil && f.GetOptions().GetPacked() +} + +func (f *FieldDescriptorProto) IsPacked3() bool { + if f.IsRepeated() && f.IsScalar() { + if f.Options == nil || f.GetOptions().Packed == nil { + return true + } + return f.Options != nil && f.GetOptions().GetPacked() + } + return false +} + +func (m *DescriptorProto) HasExtension() bool { + return len(m.ExtensionRange) > 0 +} diff --git a/vendor/github.com/google/go-querystring/LICENSE b/vendor/github.com/google/go-querystring/LICENSE new file mode 100644 index 0000000..ae121a1 --- /dev/null +++ b/vendor/github.com/google/go-querystring/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2013 Google. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/google/go-querystring/query/encode.go b/vendor/github.com/google/go-querystring/query/encode.go new file mode 100644 index 0000000..37080b1 --- /dev/null +++ b/vendor/github.com/google/go-querystring/query/encode.go @@ -0,0 +1,320 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package query implements encoding of structs into URL query parameters. +// +// As a simple example: +// +// type Options struct { +// Query string `url:"q"` +// ShowAll bool `url:"all"` +// Page int `url:"page"` +// } +// +// opt := Options{ "foo", true, 2 } +// v, _ := query.Values(opt) +// fmt.Print(v.Encode()) // will output: "q=foo&all=true&page=2" +// +// The exact mapping between Go values and url.Values is described in the +// documentation for the Values() function. +package query + +import ( + "bytes" + "fmt" + "net/url" + "reflect" + "strconv" + "strings" + "time" +) + +var timeType = reflect.TypeOf(time.Time{}) + +var encoderType = reflect.TypeOf(new(Encoder)).Elem() + +// Encoder is an interface implemented by any type that wishes to encode +// itself into URL values in a non-standard way. +type Encoder interface { + EncodeValues(key string, v *url.Values) error +} + +// Values returns the url.Values encoding of v. +// +// Values expects to be passed a struct, and traverses it recursively using the +// following encoding rules. +// +// Each exported struct field is encoded as a URL parameter unless +// +// - the field's tag is "-", or +// - the field is empty and its tag specifies the "omitempty" option +// +// The empty values are false, 0, any nil pointer or interface value, any array +// slice, map, or string of length zero, and any time.Time that returns true +// for IsZero(). +// +// The URL parameter name defaults to the struct field name but can be +// specified in the struct field's tag value. The "url" key in the struct +// field's tag value is the key name, followed by an optional comma and +// options. For example: +// +// // Field is ignored by this package. +// Field int `url:"-"` +// +// // Field appears as URL parameter "myName". +// Field int `url:"myName"` +// +// // Field appears as URL parameter "myName" and the field is omitted if +// // its value is empty +// Field int `url:"myName,omitempty"` +// +// // Field appears as URL parameter "Field" (the default), but the field +// // is skipped if empty. Note the leading comma. +// Field int `url:",omitempty"` +// +// For encoding individual field values, the following type-dependent rules +// apply: +// +// Boolean values default to encoding as the strings "true" or "false". +// Including the "int" option signals that the field should be encoded as the +// strings "1" or "0". +// +// time.Time values default to encoding as RFC3339 timestamps. Including the +// "unix" option signals that the field should be encoded as a Unix time (see +// time.Unix()) +// +// Slice and Array values default to encoding as multiple URL values of the +// same name. Including the "comma" option signals that the field should be +// encoded as a single comma-delimited value. Including the "space" option +// similarly encodes the value as a single space-delimited string. Including +// the "semicolon" option will encode the value as a semicolon-delimited string. +// Including the "brackets" option signals that the multiple URL values should +// have "[]" appended to the value name. "numbered" will append a number to +// the end of each incidence of the value name, example: +// name0=value0&name1=value1, etc. +// +// Anonymous struct fields are usually encoded as if their inner exported +// fields were fields in the outer struct, subject to the standard Go +// visibility rules. An anonymous struct field with a name given in its URL +// tag is treated as having that name, rather than being anonymous. +// +// Non-nil pointer values are encoded as the value pointed to. +// +// Nested structs are encoded including parent fields in value names for +// scoping. e.g: +// +// "user[name]=acme&user[addr][postcode]=1234&user[addr][city]=SFO" +// +// All other values are encoded using their default string representation. +// +// Multiple fields that encode to the same URL parameter name will be included +// as multiple URL values of the same name. +func Values(v interface{}) (url.Values, error) { + values := make(url.Values) + val := reflect.ValueOf(v) + for val.Kind() == reflect.Ptr { + if val.IsNil() { + return values, nil + } + val = val.Elem() + } + + if v == nil { + return values, nil + } + + if val.Kind() != reflect.Struct { + return nil, fmt.Errorf("query: Values() expects struct input. Got %v", val.Kind()) + } + + err := reflectValue(values, val, "") + return values, err +} + +// reflectValue populates the values parameter from the struct fields in val. +// Embedded structs are followed recursively (using the rules defined in the +// Values function documentation) breadth-first. +func reflectValue(values url.Values, val reflect.Value, scope string) error { + var embedded []reflect.Value + + typ := val.Type() + for i := 0; i < typ.NumField(); i++ { + sf := typ.Field(i) + if sf.PkgPath != "" && !sf.Anonymous { // unexported + continue + } + + sv := val.Field(i) + tag := sf.Tag.Get("url") + if tag == "-" { + continue + } + name, opts := parseTag(tag) + if name == "" { + if sf.Anonymous && sv.Kind() == reflect.Struct { + // save embedded struct for later processing + embedded = append(embedded, sv) + continue + } + + name = sf.Name + } + + if scope != "" { + name = scope + "[" + name + "]" + } + + if opts.Contains("omitempty") && isEmptyValue(sv) { + continue + } + + if sv.Type().Implements(encoderType) { + if !reflect.Indirect(sv).IsValid() { + sv = reflect.New(sv.Type().Elem()) + } + + m := sv.Interface().(Encoder) + if err := m.EncodeValues(name, &values); err != nil { + return err + } + continue + } + + if sv.Kind() == reflect.Slice || sv.Kind() == reflect.Array { + var del byte + if opts.Contains("comma") { + del = ',' + } else if opts.Contains("space") { + del = ' ' + } else if opts.Contains("semicolon") { + del = ';' + } else if opts.Contains("brackets") { + name = name + "[]" + } + + if del != 0 { + s := new(bytes.Buffer) + first := true + for i := 0; i < sv.Len(); i++ { + if first { + first = false + } else { + s.WriteByte(del) + } + s.WriteString(valueString(sv.Index(i), opts)) + } + values.Add(name, s.String()) + } else { + for i := 0; i < sv.Len(); i++ { + k := name + if opts.Contains("numbered") { + k = fmt.Sprintf("%s%d", name, i) + } + values.Add(k, valueString(sv.Index(i), opts)) + } + } + continue + } + + for sv.Kind() == reflect.Ptr { + if sv.IsNil() { + break + } + sv = sv.Elem() + } + + if sv.Type() == timeType { + values.Add(name, valueString(sv, opts)) + continue + } + + if sv.Kind() == reflect.Struct { + reflectValue(values, sv, name) + continue + } + + values.Add(name, valueString(sv, opts)) + } + + for _, f := range embedded { + if err := reflectValue(values, f, scope); err != nil { + return err + } + } + + return nil +} + +// valueString returns the string representation of a value. +func valueString(v reflect.Value, opts tagOptions) string { + for v.Kind() == reflect.Ptr { + if v.IsNil() { + return "" + } + v = v.Elem() + } + + if v.Kind() == reflect.Bool && opts.Contains("int") { + if v.Bool() { + return "1" + } + return "0" + } + + if v.Type() == timeType { + t := v.Interface().(time.Time) + if opts.Contains("unix") { + return strconv.FormatInt(t.Unix(), 10) + } + return t.Format(time.RFC3339) + } + + return fmt.Sprint(v.Interface()) +} + +// isEmptyValue checks if a value should be considered empty for the purposes +// of omitting fields with the "omitempty" option. +func isEmptyValue(v reflect.Value) bool { + switch v.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + + if v.Type() == timeType { + return v.Interface().(time.Time).IsZero() + } + + return false +} + +// tagOptions is the string following a comma in a struct field's "url" tag, or +// the empty string. It does not include the leading comma. +type tagOptions []string + +// parseTag splits a struct field's url tag into its name and comma-separated +// options. +func parseTag(tag string) (string, tagOptions) { + s := strings.Split(tag, ",") + return s[0], s[1:] +} + +// Contains checks whether the tagOptions contains the specified option. +func (o tagOptions) Contains(option string) bool { + for _, s := range o { + if s == option { + return true + } + } + return false +} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/.gitignore b/vendor/github.com/gorilla/websocket/.gitignore similarity index 100% rename from Godeps/_workspace/src/github.com/gorilla/websocket/.gitignore rename to vendor/github.com/gorilla/websocket/.gitignore diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/.travis.yml b/vendor/github.com/gorilla/websocket/.travis.yml similarity index 100% rename from Godeps/_workspace/src/github.com/gorilla/websocket/.travis.yml rename to vendor/github.com/gorilla/websocket/.travis.yml diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/AUTHORS b/vendor/github.com/gorilla/websocket/AUTHORS similarity index 100% rename from Godeps/_workspace/src/github.com/gorilla/websocket/AUTHORS rename to vendor/github.com/gorilla/websocket/AUTHORS diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/LICENSE b/vendor/github.com/gorilla/websocket/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/gorilla/websocket/LICENSE rename to vendor/github.com/gorilla/websocket/LICENSE diff --git a/vendor/github.com/gorilla/websocket/README.md b/vendor/github.com/gorilla/websocket/README.md new file mode 100644 index 0000000..9d71959 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/README.md @@ -0,0 +1,61 @@ +# Gorilla WebSocket + +Gorilla WebSocket is a [Go](http://golang.org/) implementation of the +[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. + +### Documentation + +* [API Reference](http://godoc.org/github.com/gorilla/websocket) +* [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) +* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command) +* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo) +* [File watch example](https://github.com/gorilla/websocket/tree/master/examples/filewatch) + +### Status + +The Gorilla WebSocket package provides a complete and tested implementation of +the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The +package API is stable. + +### Installation + + go get github.com/gorilla/websocket + +### Protocol Compliance + +The Gorilla WebSocket package passes the server tests in the [Autobahn Test +Suite](http://autobahn.ws/testsuite) using the application in the [examples/autobahn +subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn). + +### Gorilla WebSocket compared with other packages + + + + + + + + + + + + + + + + + + +
github.com/gorillagolang.org/x/net
RFC 6455 Features
Passes Autobahn Test SuiteYesNo
Receive fragmented messageYesNo, see note 1
Send close messageYesNo
Send pings and receive pongsYesNo
Get the type of a received data messageYesYes, see note 2
Other Features
Limit size of received messageYesNo
Read message using io.ReaderYesNo, see note 3
Write message using io.WriteCloserYesNo, see note 3
+ +Notes: + +1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html). +2. The application can get the type of a received data message by implementing + a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal) + function. +3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries. + Read returns when the input buffer is full or a frame boundary is + encountered. Each call to Write sends a single frame message. The Gorilla + io.Reader and io.WriteCloser operate on a single WebSocket message. + diff --git a/vendor/github.com/gorilla/websocket/client.go b/vendor/github.com/gorilla/websocket/client.go new file mode 100644 index 0000000..6138906 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/client.go @@ -0,0 +1,341 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "bytes" + "crypto/tls" + "errors" + "io" + "io/ioutil" + "net" + "net/http" + "net/url" + "strings" + "time" +) + +// ErrBadHandshake is returned when the server response to opening handshake is +// invalid. +var ErrBadHandshake = errors.New("websocket: bad handshake") + +// NewClient creates a new client connection using the given net connection. +// The URL u specifies the host and request URI. Use requestHeader to specify +// the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies +// (Cookie). Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etc. +// +// Deprecated: Use Dialer instead. +func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { + d := Dialer{ + ReadBufferSize: readBufSize, + WriteBufferSize: writeBufSize, + NetDial: func(net, addr string) (net.Conn, error) { + return netConn, nil + }, + } + return d.Dial(u.String(), requestHeader) +} + +// A Dialer contains options for connecting to WebSocket server. +type Dialer struct { + // NetDial specifies the dial function for creating TCP connections. If + // NetDial is nil, net.Dial is used. + NetDial func(network, addr string) (net.Conn, error) + + // Proxy specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxy func(*http.Request) (*url.URL, error) + + // TLSClientConfig specifies the TLS configuration to use with tls.Client. + // If nil, the default configuration is used. + TLSClientConfig *tls.Config + + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // Input and output buffer sizes. If the buffer size is zero, then a + // default value of 4096 is used. + ReadBufferSize, WriteBufferSize int + + // Subprotocols specifies the client's requested subprotocols. + Subprotocols []string +} + +var errMalformedURL = errors.New("malformed ws or wss URL") + +// parseURL parses the URL. +// +// This function is a replacement for the standard library url.Parse function. +// In Go 1.4 and earlier, url.Parse loses information from the path. +func parseURL(s string) (*url.URL, error) { + // From the RFC: + // + // ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ] + // wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ] + + var u url.URL + switch { + case strings.HasPrefix(s, "ws://"): + u.Scheme = "ws" + s = s[len("ws://"):] + case strings.HasPrefix(s, "wss://"): + u.Scheme = "wss" + s = s[len("wss://"):] + default: + return nil, errMalformedURL + } + + if i := strings.Index(s, "?"); i >= 0 { + u.RawQuery = s[i+1:] + s = s[:i] + } + + if i := strings.Index(s, "/"); i >= 0 { + u.Opaque = s[i:] + s = s[:i] + } else { + u.Opaque = "/" + } + + u.Host = s + + if strings.Contains(u.Host, "@") { + // Don't bother parsing user information because user information is + // not allowed in websocket URIs. + return nil, errMalformedURL + } + + return &u, nil +} + +func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { + hostPort = u.Host + hostNoPort = u.Host + if i := strings.LastIndex(u.Host, ":"); i > strings.LastIndex(u.Host, "]") { + hostNoPort = hostNoPort[:i] + } else { + switch u.Scheme { + case "wss": + hostPort += ":443" + case "https": + hostPort += ":443" + default: + hostPort += ":80" + } + } + return hostPort, hostNoPort +} + +// DefaultDialer is a dialer with all fields set to the default zero values. +var DefaultDialer = &Dialer{ + Proxy: http.ProxyFromEnvironment, +} + +// Dial creates a new client connection. Use requestHeader to specify the +// origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). +// Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etcetera. The response body may not contain the entire response and does not +// need to be closed by the application. +func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + + if d == nil { + d = &Dialer{ + Proxy: http.ProxyFromEnvironment, + } + } + + challengeKey, err := generateChallengeKey() + if err != nil { + return nil, nil, err + } + + u, err := parseURL(urlStr) + if err != nil { + return nil, nil, err + } + + switch u.Scheme { + case "ws": + u.Scheme = "http" + case "wss": + u.Scheme = "https" + default: + return nil, nil, errMalformedURL + } + + if u.User != nil { + // User name and password are not allowed in websocket URIs. + return nil, nil, errMalformedURL + } + + req := &http.Request{ + Method: "GET", + URL: u, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: make(http.Header), + Host: u.Host, + } + + // Set the request headers using the capitalization for names and values in + // RFC examples. Although the capitalization shouldn't matter, there are + // servers that depend on it. The Header.Set method is not used because the + // method canonicalizes the header names. + req.Header["Upgrade"] = []string{"websocket"} + req.Header["Connection"] = []string{"Upgrade"} + req.Header["Sec-WebSocket-Key"] = []string{challengeKey} + req.Header["Sec-WebSocket-Version"] = []string{"13"} + if len(d.Subprotocols) > 0 { + req.Header["Sec-WebSocket-Protocol"] = []string{strings.Join(d.Subprotocols, ", ")} + } + for k, vs := range requestHeader { + switch { + case k == "Host": + if len(vs) > 0 { + req.Host = vs[0] + } + case k == "Upgrade" || + k == "Connection" || + k == "Sec-Websocket-Key" || + k == "Sec-Websocket-Version" || + (k == "Sec-Websocket-Protocol" && len(d.Subprotocols) > 0): + return nil, nil, errors.New("websocket: duplicate header not allowed: " + k) + default: + req.Header[k] = vs + } + } + + hostPort, hostNoPort := hostPortNoPort(u) + + var proxyURL *url.URL + // Check wether the proxy method has been configured + if d.Proxy != nil { + proxyURL, err = d.Proxy(req) + } + if err != nil { + return nil, nil, err + } + + var targetHostPort string + if proxyURL != nil { + targetHostPort, _ = hostPortNoPort(proxyURL) + } else { + targetHostPort = hostPort + } + + var deadline time.Time + if d.HandshakeTimeout != 0 { + deadline = time.Now().Add(d.HandshakeTimeout) + } + + netDial := d.NetDial + if netDial == nil { + netDialer := &net.Dialer{Deadline: deadline} + netDial = netDialer.Dial + } + + netConn, err := netDial("tcp", targetHostPort) + if err != nil { + return nil, nil, err + } + + defer func() { + if netConn != nil { + netConn.Close() + } + }() + + if err := netConn.SetDeadline(deadline); err != nil { + return nil, nil, err + } + + if proxyURL != nil { + connectReq := &http.Request{ + Method: "CONNECT", + URL: &url.URL{Opaque: hostPort}, + Host: hostPort, + Header: make(http.Header), + } + + connectReq.Write(netConn) + + // Read response. + // Okay to use and discard buffered reader here, because + // TLS server will not speak until spoken to. + br := bufio.NewReader(netConn) + resp, err := http.ReadResponse(br, connectReq) + if err != nil { + return nil, nil, err + } + if resp.StatusCode != 200 { + f := strings.SplitN(resp.Status, " ", 2) + return nil, nil, errors.New(f[1]) + } + } + + if u.Scheme == "https" { + cfg := d.TLSClientConfig + if cfg == nil { + cfg = &tls.Config{ServerName: hostNoPort} + } else if cfg.ServerName == "" { + shallowCopy := *cfg + cfg = &shallowCopy + cfg.ServerName = hostNoPort + } + tlsConn := tls.Client(netConn, cfg) + netConn = tlsConn + if err := tlsConn.Handshake(); err != nil { + return nil, nil, err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return nil, nil, err + } + } + } + + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize) + + if err := req.Write(netConn); err != nil { + return nil, nil, err + } + + resp, err := http.ReadResponse(conn.br, req) + if err != nil { + return nil, nil, err + } + if resp.StatusCode != 101 || + !strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") || + !strings.EqualFold(resp.Header.Get("Connection"), "upgrade") || + resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) { + // Before closing the network connection on return from this + // function, slurp up some of the response to aid application + // debugging. + buf := make([]byte, 1024) + n, _ := io.ReadFull(resp.Body, buf) + resp.Body = ioutil.NopCloser(bytes.NewReader(buf[:n])) + return nil, resp, ErrBadHandshake + } + + resp.Body = ioutil.NopCloser(bytes.NewReader([]byte{})) + conn.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") + + netConn.SetDeadline(time.Time{}) + netConn = nil // to avoid close in defer. + return conn, resp, nil +} diff --git a/vendor/github.com/gorilla/websocket/conn.go b/vendor/github.com/gorilla/websocket/conn.go new file mode 100644 index 0000000..e8b6b3e --- /dev/null +++ b/vendor/github.com/gorilla/websocket/conn.go @@ -0,0 +1,831 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "encoding/binary" + "errors" + "io" + "io/ioutil" + "math/rand" + "net" + "strconv" + "time" +) + +const ( + maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask + maxControlFramePayloadSize = 125 + finalBit = 1 << 7 + maskBit = 1 << 7 + writeWait = time.Second + + defaultReadBufferSize = 4096 + defaultWriteBufferSize = 4096 + + continuationFrame = 0 + noFrame = -1 +) + +// Close codes defined in RFC 6455, section 11.7. +const ( + CloseNormalClosure = 1000 + CloseGoingAway = 1001 + CloseProtocolError = 1002 + CloseUnsupportedData = 1003 + CloseNoStatusReceived = 1005 + CloseAbnormalClosure = 1006 + CloseInvalidFramePayloadData = 1007 + ClosePolicyViolation = 1008 + CloseMessageTooBig = 1009 + CloseMandatoryExtension = 1010 + CloseInternalServerErr = 1011 + CloseTLSHandshake = 1015 +) + +// The message types are defined in RFC 6455, section 11.8. +const ( + // TextMessage denotes a text data message. The text message payload is + // interpreted as UTF-8 encoded text data. + TextMessage = 1 + + // BinaryMessage denotes a binary data message. + BinaryMessage = 2 + + // CloseMessage denotes a close control message. The optional message + // payload contains a numeric code and text. Use the FormatCloseMessage + // function to format a close message payload. + CloseMessage = 8 + + // PingMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PingMessage = 9 + + // PongMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PongMessage = 10 +) + +// ErrCloseSent is returned when the application writes a message to the +// connection after sending a close message. +var ErrCloseSent = errors.New("websocket: close sent") + +// ErrReadLimit is returned when reading a message that is larger than the +// read limit set for the connection. +var ErrReadLimit = errors.New("websocket: read limit exceeded") + +// netError satisfies the net Error interface. +type netError struct { + msg string + temporary bool + timeout bool +} + +func (e *netError) Error() string { return e.msg } +func (e *netError) Temporary() bool { return e.temporary } +func (e *netError) Timeout() bool { return e.timeout } + +// CloseError represents close frame. +type CloseError struct { + + // Code is defined in RFC 6455, section 11.7. + Code int + + // Text is the optional text payload. + Text string +} + +func (e *CloseError) Error() string { + return "websocket: close " + strconv.Itoa(e.Code) + " " + e.Text +} + +var ( + errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} + errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} + errBadWriteOpCode = errors.New("websocket: bad write message type") + errWriteClosed = errors.New("websocket: write closed") + errInvalidControlFrame = errors.New("websocket: invalid control frame") +) + +func hideTempErr(err error) error { + if e, ok := err.(net.Error); ok && e.Temporary() { + err = &netError{msg: e.Error(), timeout: e.Timeout()} + } + return err +} + +func isControl(frameType int) bool { + return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage +} + +func isData(frameType int) bool { + return frameType == TextMessage || frameType == BinaryMessage +} + +func maskBytes(key [4]byte, pos int, b []byte) int { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 +} + +func newMaskKey() [4]byte { + n := rand.Uint32() + return [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)} +} + +// Conn represents a WebSocket connection. +type Conn struct { + conn net.Conn + isServer bool + subprotocol string + + // Write fields + mu chan bool // used as mutex to protect write to conn and closeSent + closeSent bool // true if close message was sent + + // Message writer fields. + writeErr error + writeBuf []byte // frame is constructed in this buffer. + writePos int // end of data in writeBuf. + writeFrameType int // type of the current frame. + writeSeq int // incremented to invalidate message writers. + writeDeadline time.Time + + // Read fields + readErr error + br *bufio.Reader + readRemaining int64 // bytes remaining in current frame. + readFinal bool // true the current message has more frames. + readSeq int // incremented to invalidate message readers. + readLength int64 // Message size. + readLimit int64 // Maximum message size. + readMaskPos int + readMaskKey [4]byte + handlePong func(string) error + handlePing func(string) error +} + +func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int) *Conn { + mu := make(chan bool, 1) + mu <- true + + if readBufferSize == 0 { + readBufferSize = defaultReadBufferSize + } + if writeBufferSize == 0 { + writeBufferSize = defaultWriteBufferSize + } + + c := &Conn{ + isServer: isServer, + br: bufio.NewReaderSize(conn, readBufferSize), + conn: conn, + mu: mu, + readFinal: true, + writeBuf: make([]byte, writeBufferSize+maxFrameHeaderSize), + writeFrameType: noFrame, + writePos: maxFrameHeaderSize, + } + c.SetPingHandler(nil) + c.SetPongHandler(nil) + return c +} + +// Subprotocol returns the negotiated protocol for the connection. +func (c *Conn) Subprotocol() string { + return c.subprotocol +} + +// Close closes the underlying network connection without sending or waiting for a close frame. +func (c *Conn) Close() error { + return c.conn.Close() +} + +// LocalAddr returns the local network address. +func (c *Conn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +// RemoteAddr returns the remote network address. +func (c *Conn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +// Write methods + +func (c *Conn) write(frameType int, deadline time.Time, bufs ...[]byte) error { + <-c.mu + defer func() { c.mu <- true }() + + if c.closeSent { + return ErrCloseSent + } else if frameType == CloseMessage { + c.closeSent = true + } + + c.conn.SetWriteDeadline(deadline) + for _, buf := range bufs { + if len(buf) > 0 { + n, err := c.conn.Write(buf) + if n != len(buf) { + // Close on partial write. + c.conn.Close() + } + if err != nil { + return err + } + } + } + return nil +} + +// WriteControl writes a control message with the given deadline. The allowed +// message types are CloseMessage, PingMessage and PongMessage. +func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { + if !isControl(messageType) { + return errBadWriteOpCode + } + if len(data) > maxControlFramePayloadSize { + return errInvalidControlFrame + } + + b0 := byte(messageType) | finalBit + b1 := byte(len(data)) + if !c.isServer { + b1 |= maskBit + } + + buf := make([]byte, 0, maxFrameHeaderSize+maxControlFramePayloadSize) + buf = append(buf, b0, b1) + + if c.isServer { + buf = append(buf, data...) + } else { + key := newMaskKey() + buf = append(buf, key[:]...) + buf = append(buf, data...) + maskBytes(key, 0, buf[6:]) + } + + d := time.Hour * 1000 + if !deadline.IsZero() { + d = deadline.Sub(time.Now()) + if d < 0 { + return errWriteTimeout + } + } + + timer := time.NewTimer(d) + select { + case <-c.mu: + timer.Stop() + case <-timer.C: + return errWriteTimeout + } + defer func() { c.mu <- true }() + + if c.closeSent { + return ErrCloseSent + } else if messageType == CloseMessage { + c.closeSent = true + } + + c.conn.SetWriteDeadline(deadline) + n, err := c.conn.Write(buf) + if n != 0 && n != len(buf) { + c.conn.Close() + } + return hideTempErr(err) +} + +// NextWriter returns a writer for the next message to send. The writer's +// Close method flushes the complete message to the network. +// +// There can be at most one open writer on a connection. NextWriter closes the +// previous writer if the application has not already done so. +// +// The NextWriter method and the writers returned from the method cannot be +// accessed by more than one goroutine at a time. +func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { + if c.writeErr != nil { + return nil, c.writeErr + } + + if c.writeFrameType != noFrame { + if err := c.flushFrame(true, nil); err != nil { + return nil, err + } + } + + if !isControl(messageType) && !isData(messageType) { + return nil, errBadWriteOpCode + } + + c.writeFrameType = messageType + return messageWriter{c, c.writeSeq}, nil +} + +func (c *Conn) flushFrame(final bool, extra []byte) error { + length := c.writePos - maxFrameHeaderSize + len(extra) + + // Check for invalid control frames. + if isControl(c.writeFrameType) && + (!final || length > maxControlFramePayloadSize) { + c.writeSeq++ + c.writeFrameType = noFrame + c.writePos = maxFrameHeaderSize + return errInvalidControlFrame + } + + b0 := byte(c.writeFrameType) + if final { + b0 |= finalBit + } + b1 := byte(0) + if !c.isServer { + b1 |= maskBit + } + + // Assume that the frame starts at beginning of c.writeBuf. + framePos := 0 + if c.isServer { + // Adjust up if mask not included in the header. + framePos = 4 + } + + switch { + case length >= 65536: + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 127 + binary.BigEndian.PutUint64(c.writeBuf[framePos+2:], uint64(length)) + case length > 125: + framePos += 6 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 126 + binary.BigEndian.PutUint16(c.writeBuf[framePos+2:], uint16(length)) + default: + framePos += 8 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | byte(length) + } + + if !c.isServer { + key := newMaskKey() + copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) + maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:c.writePos]) + if len(extra) > 0 { + c.writeErr = errors.New("websocket: internal error, extra used in client mode") + return c.writeErr + } + } + + // Write the buffers to the connection. + c.writeErr = c.write(c.writeFrameType, c.writeDeadline, c.writeBuf[framePos:c.writePos], extra) + + // Setup for next frame. + c.writePos = maxFrameHeaderSize + c.writeFrameType = continuationFrame + if final { + c.writeSeq++ + c.writeFrameType = noFrame + } + return c.writeErr +} + +type messageWriter struct { + c *Conn + seq int +} + +func (w messageWriter) err() error { + c := w.c + if c.writeSeq != w.seq { + return errWriteClosed + } + if c.writeErr != nil { + return c.writeErr + } + return nil +} + +func (w messageWriter) ncopy(max int) (int, error) { + n := len(w.c.writeBuf) - w.c.writePos + if n <= 0 { + if err := w.c.flushFrame(false, nil); err != nil { + return 0, err + } + n = len(w.c.writeBuf) - w.c.writePos + } + if n > max { + n = max + } + return n, nil +} + +func (w messageWriter) write(final bool, p []byte) (int, error) { + if err := w.err(); err != nil { + return 0, err + } + + if len(p) > 2*len(w.c.writeBuf) && w.c.isServer { + // Don't buffer large messages. + err := w.c.flushFrame(final, p) + if err != nil { + return 0, err + } + return len(p), nil + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.c.writePos:], p[:n]) + w.c.writePos += n + p = p[n:] + } + return nn, nil +} + +func (w messageWriter) Write(p []byte) (int, error) { + return w.write(false, p) +} + +func (w messageWriter) WriteString(p string) (int, error) { + if err := w.err(); err != nil { + return 0, err + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.c.writePos:], p[:n]) + w.c.writePos += n + p = p[n:] + } + return nn, nil +} + +func (w messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { + if err := w.err(); err != nil { + return 0, err + } + for { + if w.c.writePos == len(w.c.writeBuf) { + err = w.c.flushFrame(false, nil) + if err != nil { + break + } + } + var n int + n, err = r.Read(w.c.writeBuf[w.c.writePos:]) + w.c.writePos += n + nn += int64(n) + if err != nil { + if err == io.EOF { + err = nil + } + break + } + } + return nn, err +} + +func (w messageWriter) Close() error { + if err := w.err(); err != nil { + return err + } + return w.c.flushFrame(true, nil) +} + +// WriteMessage is a helper method for getting a writer using NextWriter, +// writing the message and closing the writer. +func (c *Conn) WriteMessage(messageType int, data []byte) error { + wr, err := c.NextWriter(messageType) + if err != nil { + return err + } + w := wr.(messageWriter) + if _, err := w.write(true, data); err != nil { + return err + } + if c.writeSeq == w.seq { + if err := c.flushFrame(true, nil); err != nil { + return err + } + } + return nil +} + +// SetWriteDeadline sets the write deadline on the underlying network +// connection. After a write has timed out, the websocket state is corrupt and +// all future writes will return an error. A zero value for t means writes will +// not time out. +func (c *Conn) SetWriteDeadline(t time.Time) error { + c.writeDeadline = t + return nil +} + +// Read methods + +// readFull is like io.ReadFull except that io.EOF is never returned. +func (c *Conn) readFull(p []byte) (err error) { + var n int + for n < len(p) && err == nil { + var nn int + nn, err = c.br.Read(p[n:]) + n += nn + } + if n == len(p) { + err = nil + } else if err == io.EOF { + err = errUnexpectedEOF + } + return +} + +func (c *Conn) advanceFrame() (int, error) { + + // 1. Skip remainder of previous frame. + + if c.readRemaining > 0 { + if _, err := io.CopyN(ioutil.Discard, c.br, c.readRemaining); err != nil { + return noFrame, err + } + } + + // 2. Read and parse first two bytes of frame header. + + var b [8]byte + if err := c.readFull(b[:2]); err != nil { + return noFrame, err + } + + final := b[0]&finalBit != 0 + frameType := int(b[0] & 0xf) + reserved := int((b[0] >> 4) & 0x7) + mask := b[1]&maskBit != 0 + c.readRemaining = int64(b[1] & 0x7f) + + if reserved != 0 { + return noFrame, c.handleProtocolError("unexpected reserved bits " + strconv.Itoa(reserved)) + } + + switch frameType { + case CloseMessage, PingMessage, PongMessage: + if c.readRemaining > maxControlFramePayloadSize { + return noFrame, c.handleProtocolError("control frame length > 125") + } + if !final { + return noFrame, c.handleProtocolError("control frame not final") + } + case TextMessage, BinaryMessage: + if !c.readFinal { + return noFrame, c.handleProtocolError("message start before final message frame") + } + c.readFinal = final + case continuationFrame: + if c.readFinal { + return noFrame, c.handleProtocolError("continuation after final message frame") + } + c.readFinal = final + default: + return noFrame, c.handleProtocolError("unknown opcode " + strconv.Itoa(frameType)) + } + + // 3. Read and parse frame length. + + switch c.readRemaining { + case 126: + if err := c.readFull(b[:2]); err != nil { + return noFrame, err + } + c.readRemaining = int64(binary.BigEndian.Uint16(b[:2])) + case 127: + if err := c.readFull(b[:8]); err != nil { + return noFrame, err + } + c.readRemaining = int64(binary.BigEndian.Uint64(b[:8])) + } + + // 4. Handle frame masking. + + if mask != c.isServer { + return noFrame, c.handleProtocolError("incorrect mask flag") + } + + if mask { + c.readMaskPos = 0 + if err := c.readFull(c.readMaskKey[:]); err != nil { + return noFrame, err + } + } + + // 5. For text and binary messages, enforce read limit and return. + + if frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage { + + c.readLength += c.readRemaining + if c.readLimit > 0 && c.readLength > c.readLimit { + c.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, ""), time.Now().Add(writeWait)) + return noFrame, ErrReadLimit + } + + return frameType, nil + } + + // 6. Read control frame payload. + + var payload []byte + if c.readRemaining > 0 { + payload = make([]byte, c.readRemaining) + c.readRemaining = 0 + if err := c.readFull(payload); err != nil { + return noFrame, err + } + if c.isServer { + maskBytes(c.readMaskKey, 0, payload) + } + } + + // 7. Process control frame payload. + + switch frameType { + case PongMessage: + if err := c.handlePong(string(payload)); err != nil { + return noFrame, err + } + case PingMessage: + if err := c.handlePing(string(payload)); err != nil { + return noFrame, err + } + case CloseMessage: + c.WriteControl(CloseMessage, []byte{}, time.Now().Add(writeWait)) + closeCode := CloseNoStatusReceived + closeText := "" + if len(payload) >= 2 { + closeCode = int(binary.BigEndian.Uint16(payload)) + closeText = string(payload[2:]) + } + return noFrame, &CloseError{Code: closeCode, Text: closeText} + } + + return frameType, nil +} + +func (c *Conn) handleProtocolError(message string) error { + c.WriteControl(CloseMessage, FormatCloseMessage(CloseProtocolError, message), time.Now().Add(writeWait)) + return errors.New("websocket: " + message) +} + +// NextReader returns the next data message received from the peer. The +// returned messageType is either TextMessage or BinaryMessage. +// +// There can be at most one open reader on a connection. NextReader discards +// the previous message if the application has not already consumed it. +// +// The NextReader method and the readers returned from the method cannot be +// accessed by more than one goroutine at a time. +func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { + + c.readSeq++ + c.readLength = 0 + + for c.readErr == nil { + frameType, err := c.advanceFrame() + if err != nil { + c.readErr = hideTempErr(err) + break + } + if frameType == TextMessage || frameType == BinaryMessage { + return frameType, messageReader{c, c.readSeq}, nil + } + } + return noFrame, nil, c.readErr +} + +type messageReader struct { + c *Conn + seq int +} + +func (r messageReader) Read(b []byte) (int, error) { + + if r.seq != r.c.readSeq { + return 0, io.EOF + } + + for r.c.readErr == nil { + + if r.c.readRemaining > 0 { + if int64(len(b)) > r.c.readRemaining { + b = b[:r.c.readRemaining] + } + n, err := r.c.br.Read(b) + r.c.readErr = hideTempErr(err) + if r.c.isServer { + r.c.readMaskPos = maskBytes(r.c.readMaskKey, r.c.readMaskPos, b[:n]) + } + r.c.readRemaining -= int64(n) + return n, r.c.readErr + } + + if r.c.readFinal { + r.c.readSeq++ + return 0, io.EOF + } + + frameType, err := r.c.advanceFrame() + switch { + case err != nil: + r.c.readErr = hideTempErr(err) + case frameType == TextMessage || frameType == BinaryMessage: + r.c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader") + } + } + + err := r.c.readErr + if err == io.EOF && r.seq == r.c.readSeq { + err = errUnexpectedEOF + } + return 0, err +} + +// ReadMessage is a helper method for getting a reader using NextReader and +// reading from that reader to a buffer. +func (c *Conn) ReadMessage() (messageType int, p []byte, err error) { + var r io.Reader + messageType, r, err = c.NextReader() + if err != nil { + return messageType, nil, err + } + p, err = ioutil.ReadAll(r) + return messageType, p, err +} + +// SetReadDeadline sets the read deadline on the underlying network connection. +// After a read has timed out, the websocket connection state is corrupt and +// all future reads will return an error. A zero value for t means reads will +// not time out. +func (c *Conn) SetReadDeadline(t time.Time) error { + return c.conn.SetReadDeadline(t) +} + +// SetReadLimit sets the maximum size for a message read from the peer. If a +// message exceeds the limit, the connection sends a close frame to the peer +// and returns ErrReadLimit to the application. +func (c *Conn) SetReadLimit(limit int64) { + c.readLimit = limit +} + +// SetPingHandler sets the handler for ping messages received from the peer. +// The appData argument to h is the PING frame application data. The default +// ping handler sends a pong to the peer. +func (c *Conn) SetPingHandler(h func(appData string) error) { + if h == nil { + h = func(message string) error { + err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) + if err == ErrCloseSent { + return nil + } else if e, ok := err.(net.Error); ok && e.Temporary() { + return nil + } + return err + } + } + c.handlePing = h +} + +// SetPongHandler sets the handler for pong messages received from the peer. +// The appData argument to h is the PONG frame application data. The default +// pong handler does nothing. +func (c *Conn) SetPongHandler(h func(appData string) error) { + if h == nil { + h = func(string) error { return nil } + } + c.handlePong = h +} + +// UnderlyingConn returns the internal net.Conn. This can be used to further +// modifications to connection specific flags. +func (c *Conn) UnderlyingConn() net.Conn { + return c.conn +} + +// FormatCloseMessage formats closeCode and text as a WebSocket close message. +func FormatCloseMessage(closeCode int, text string) []byte { + buf := make([]byte, 2+len(text)) + binary.BigEndian.PutUint16(buf, uint16(closeCode)) + copy(buf[2:], text) + return buf +} diff --git a/vendor/github.com/gorilla/websocket/doc.go b/vendor/github.com/gorilla/websocket/doc.go new file mode 100644 index 0000000..7228627 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/doc.go @@ -0,0 +1,151 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package websocket implements the WebSocket protocol defined in RFC 6455. +// +// Overview +// +// The Conn type represents a WebSocket connection. A server application uses +// the Upgrade function from an Upgrader object with a HTTP request handler +// to get a pointer to a Conn: +// +// var upgrader = websocket.Upgrader{ +// ReadBufferSize: 1024, +// WriteBufferSize: 1024, +// } +// +// func handler(w http.ResponseWriter, r *http.Request) { +// conn, err := upgrader.Upgrade(w, r, nil) +// if err != nil { +// log.Println(err) +// return +// } +// ... Use conn to send and receive messages. +// } +// +// Call the connection's WriteMessage and ReadMessage methods to send and +// receive messages as a slice of bytes. This snippet of code shows how to echo +// messages using these methods: +// +// for { +// messageType, p, err := conn.ReadMessage() +// if err != nil { +// return +// } +// if err = conn.WriteMessage(messageType, p); err != nil { +// return err +// } +// } +// +// In above snippet of code, p is a []byte and messageType is an int with value +// websocket.BinaryMessage or websocket.TextMessage. +// +// An application can also send and receive messages using the io.WriteCloser +// and io.Reader interfaces. To send a message, call the connection NextWriter +// method to get an io.WriteCloser, write the message to the writer and close +// the writer when done. To receive a message, call the connection NextReader +// method to get an io.Reader and read until io.EOF is returned. This snippet +// snippet shows how to echo messages using the NextWriter and NextReader +// methods: +// +// for { +// messageType, r, err := conn.NextReader() +// if err != nil { +// return +// } +// w, err := conn.NextWriter(messageType) +// if err != nil { +// return err +// } +// if _, err := io.Copy(w, r); err != nil { +// return err +// } +// if err := w.Close(); err != nil { +// return err +// } +// } +// +// Data Messages +// +// The WebSocket protocol distinguishes between text and binary data messages. +// Text messages are interpreted as UTF-8 encoded text. The interpretation of +// binary messages is left to the application. +// +// This package uses the TextMessage and BinaryMessage integer constants to +// identify the two data message types. The ReadMessage and NextReader methods +// return the type of the received message. The messageType argument to the +// WriteMessage and NextWriter methods specifies the type of a sent message. +// +// It is the application's responsibility to ensure that text messages are +// valid UTF-8 encoded text. +// +// Control Messages +// +// The WebSocket protocol defines three types of control messages: close, ping +// and pong. Call the connection WriteControl, WriteMessage or NextWriter +// methods to send a control message to the peer. +// +// Connections handle received ping and pong messages by invoking a callback +// function set with SetPingHandler and SetPongHandler methods. These callback +// functions can be invoked from the ReadMessage method, the NextReader method +// or from a call to the data message reader returned from NextReader. +// +// Connections handle received close messages by returning an error from the +// ReadMessage method, the NextReader method or from a call to the data message +// reader returned from NextReader. +// +// Concurrency +// +// Connections support one concurrent reader and one concurrent writer. +// +// Applications are responsible for ensuring that no more than one goroutine +// calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, +// WriteJSON) concurrently and that no more than one goroutine calls the read +// methods (NextReader, SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, +// SetPingHandler) concurrently. +// +// The Close and WriteControl methods can be called concurrently with all other +// methods. +// +// Read is Required +// +// The application must read the connection to process ping and close messages +// sent from the peer. If the application is not otherwise interested in +// messages from the peer, then the application should start a goroutine to read +// and discard messages from the peer. A simple example is: +// +// func readLoop(c *websocket.Conn) { +// for { +// if _, _, err := c.NextReader(); err != nil { +// c.Close() +// break +// } +// } +// } +// +// Origin Considerations +// +// Web browsers allow Javascript applications to open a WebSocket connection to +// any host. It's up to the server to enforce an origin policy using the Origin +// request header sent by the browser. +// +// The Upgrader calls the function specified in the CheckOrigin field to check +// the origin. If the CheckOrigin function returns false, then the Upgrade +// method fails the WebSocket handshake with HTTP status 403. +// +// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail +// the handshake if the Origin request header is present and not equal to the +// Host request header. +// +// An application can allow connections from any origin by specifying a +// function that always returns true: +// +// var upgrader = websocket.Upgrader{ +// CheckOrigin: func(r *http.Request) bool { return true }, +// } +// +// The deprecated Upgrade function does not enforce an origin policy. It's the +// application's responsibility to check the Origin header before calling +// Upgrade. +package websocket diff --git a/vendor/github.com/gorilla/websocket/json.go b/vendor/github.com/gorilla/websocket/json.go new file mode 100644 index 0000000..4f0e368 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/json.go @@ -0,0 +1,55 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "encoding/json" + "io" +) + +// WriteJSON is deprecated, use c.WriteJSON instead. +func WriteJSON(c *Conn, v interface{}) error { + return c.WriteJSON(v) +} + +// WriteJSON writes the JSON encoding of v to the connection. +// +// See the documentation for encoding/json Marshal for details about the +// conversion of Go values to JSON. +func (c *Conn) WriteJSON(v interface{}) error { + w, err := c.NextWriter(TextMessage) + if err != nil { + return err + } + err1 := json.NewEncoder(w).Encode(v) + err2 := w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +// ReadJSON is deprecated, use c.ReadJSON instead. +func ReadJSON(c *Conn, v interface{}) error { + return c.ReadJSON(v) +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// See the documentation for the encoding/json Unmarshal function for details +// about the conversion of JSON to a Go value. +func (c *Conn) ReadJSON(v interface{}) error { + _, r, err := c.NextReader() + if err != nil { + return err + } + err = json.NewDecoder(r).Decode(v) + if err == io.EOF { + // One value is expected in the message. + err = io.ErrUnexpectedEOF + } + return err +} diff --git a/vendor/github.com/gorilla/websocket/server.go b/vendor/github.com/gorilla/websocket/server.go new file mode 100644 index 0000000..3a9805f --- /dev/null +++ b/vendor/github.com/gorilla/websocket/server.go @@ -0,0 +1,250 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "errors" + "net" + "net/http" + "net/url" + "strings" + "time" +) + +// HandshakeError describes an error with the handshake from the peer. +type HandshakeError struct { + message string +} + +func (e HandshakeError) Error() string { return e.message } + +// Upgrader specifies parameters for upgrading an HTTP connection to a +// WebSocket connection. +type Upgrader struct { + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // size is zero, then a default value of 4096 is used. The I/O buffer sizes + // do not limit the size of the messages that can be sent or received. + ReadBufferSize, WriteBufferSize int + + // Subprotocols specifies the server's supported protocols in order of + // preference. If this field is set, then the Upgrade method negotiates a + // subprotocol by selecting the first match in this list with a protocol + // requested by the client. + Subprotocols []string + + // Error specifies the function for generating HTTP error responses. If Error + // is nil, then http.Error is used to generate the HTTP response. + Error func(w http.ResponseWriter, r *http.Request, status int, reason error) + + // CheckOrigin returns true if the request Origin header is acceptable. If + // CheckOrigin is nil, the host in the Origin header must not be set or + // must match the host of the request. + CheckOrigin func(r *http.Request) bool +} + +func (u *Upgrader) returnError(w http.ResponseWriter, r *http.Request, status int, reason string) (*Conn, error) { + err := HandshakeError{reason} + if u.Error != nil { + u.Error(w, r, status, err) + } else { + http.Error(w, http.StatusText(status), status) + } + return nil, err +} + +// checkSameOrigin returns true if the origin is not set or is equal to the request host. +func checkSameOrigin(r *http.Request) bool { + origin := r.Header["Origin"] + if len(origin) == 0 { + return true + } + u, err := url.Parse(origin[0]) + if err != nil { + return false + } + return u.Host == r.Host +} + +func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { + if u.Subprotocols != nil { + clientProtocols := Subprotocols(r) + for _, serverProtocol := range u.Subprotocols { + for _, clientProtocol := range clientProtocols { + if clientProtocol == serverProtocol { + return clientProtocol + } + } + } + } else if responseHeader != nil { + return responseHeader.Get("Sec-Websocket-Protocol") + } + return "" +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// application negotiated subprotocol (Sec-Websocket-Protocol). +func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { + if r.Method != "GET" { + return u.returnError(w, r, http.StatusMethodNotAllowed, "websocket: method not GET") + } + if values := r.Header["Sec-Websocket-Version"]; len(values) == 0 || values[0] != "13" { + return u.returnError(w, r, http.StatusBadRequest, "websocket: version != 13") + } + + if !tokenListContainsValue(r.Header, "Connection", "upgrade") { + return u.returnError(w, r, http.StatusBadRequest, "websocket: could not find connection header with token 'upgrade'") + } + + if !tokenListContainsValue(r.Header, "Upgrade", "websocket") { + return u.returnError(w, r, http.StatusBadRequest, "websocket: could not find upgrade header with token 'websocket'") + } + + checkOrigin := u.CheckOrigin + if checkOrigin == nil { + checkOrigin = checkSameOrigin + } + if !checkOrigin(r) { + return u.returnError(w, r, http.StatusForbidden, "websocket: origin not allowed") + } + + challengeKey := r.Header.Get("Sec-Websocket-Key") + if challengeKey == "" { + return u.returnError(w, r, http.StatusBadRequest, "websocket: key missing or blank") + } + + subprotocol := u.selectSubprotocol(r, responseHeader) + + var ( + netConn net.Conn + br *bufio.Reader + err error + ) + + h, ok := w.(http.Hijacker) + if !ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: response does not implement http.Hijacker") + } + var rw *bufio.ReadWriter + netConn, rw, err = h.Hijack() + if err != nil { + return u.returnError(w, r, http.StatusInternalServerError, err.Error()) + } + br = rw.Reader + + if br.Buffered() > 0 { + netConn.Close() + return nil, errors.New("websocket: client sent data before handshake is complete") + } + + c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize) + c.subprotocol = subprotocol + + p := c.writeBuf[:0] + p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) + p = append(p, computeAcceptKey(challengeKey)...) + p = append(p, "\r\n"...) + if c.subprotocol != "" { + p = append(p, "Sec-Websocket-Protocol: "...) + p = append(p, c.subprotocol...) + p = append(p, "\r\n"...) + } + for k, vs := range responseHeader { + if k == "Sec-Websocket-Protocol" { + continue + } + for _, v := range vs { + p = append(p, k...) + p = append(p, ": "...) + for i := 0; i < len(v); i++ { + b := v[i] + if b <= 31 { + // prevent response splitting. + b = ' ' + } + p = append(p, b) + } + p = append(p, "\r\n"...) + } + } + p = append(p, "\r\n"...) + + // Clear deadlines set by HTTP server. + netConn.SetDeadline(time.Time{}) + + if u.HandshakeTimeout > 0 { + netConn.SetWriteDeadline(time.Now().Add(u.HandshakeTimeout)) + } + if _, err = netConn.Write(p); err != nil { + netConn.Close() + return nil, err + } + if u.HandshakeTimeout > 0 { + netConn.SetWriteDeadline(time.Time{}) + } + + return c, nil +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// This function is deprecated, use websocket.Upgrader instead. +// +// The application is responsible for checking the request origin before +// calling Upgrade. An example implementation of the same origin policy is: +// +// if req.Header.Get("Origin") != "http://"+req.Host { +// http.Error(w, "Origin not allowed", 403) +// return +// } +// +// If the endpoint supports subprotocols, then the application is responsible +// for negotiating the protocol used on the connection. Use the Subprotocols() +// function to get the subprotocols requested by the client. Use the +// Sec-Websocket-Protocol response header to specify the subprotocol selected +// by the application. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// negotiated subprotocol (Sec-Websocket-Protocol). +// +// The connection buffers IO to the underlying network connection. The +// readBufSize and writeBufSize parameters specify the size of the buffers to +// use. Messages can be larger than the buffers. +// +// If the request is not a valid WebSocket handshake, then Upgrade returns an +// error of type HandshakeError. Applications should handle this error by +// replying to the client with an HTTP error response. +func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) { + u := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize} + u.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { + // don't return errors to maintain backwards compatibility + } + u.CheckOrigin = func(r *http.Request) bool { + // allow all connections by default + return true + } + return u.Upgrade(w, r, responseHeader) +} + +// Subprotocols returns the subprotocols requested by the client in the +// Sec-Websocket-Protocol header. +func Subprotocols(r *http.Request) []string { + h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol")) + if h == "" { + return nil + } + protocols := strings.Split(h, ",") + for i := range protocols { + protocols[i] = strings.TrimSpace(protocols[i]) + } + return protocols +} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/util.go b/vendor/github.com/gorilla/websocket/util.go similarity index 100% rename from Godeps/_workspace/src/github.com/gorilla/websocket/util.go rename to vendor/github.com/gorilla/websocket/util.go diff --git a/vendor/github.com/mattn/go-colorable/.travis.yml b/vendor/github.com/mattn/go-colorable/.travis.yml new file mode 100644 index 0000000..42768b8 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/.travis.yml @@ -0,0 +1,8 @@ +language: go +go: + - tip + +sudo: false + +script: + - go test -v diff --git a/vendor/github.com/mattn/go-colorable/LICENSE b/vendor/github.com/mattn/go-colorable/LICENSE new file mode 100644 index 0000000..91b5cef --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +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/mattn/go-colorable/README.md b/vendor/github.com/mattn/go-colorable/README.md new file mode 100644 index 0000000..e84226a --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/README.md @@ -0,0 +1,43 @@ +# go-colorable + +Colorable writer for windows. + +For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.) +This package is possible to handle escape sequence for ansi color on windows. + +## Too Bad! + +![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/bad.png) + + +## So Good! + +![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/good.png) + +## Usage + +```go +logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true}) +logrus.SetOutput(colorable.NewColorableStdout()) + +logrus.Info("succeeded") +logrus.Warn("not correct") +logrus.Error("something error") +logrus.Fatal("panic") +``` + +You can compile above code on non-windows OSs. + +## Installation + +``` +$ go get github.com/mattn/go-colorable +``` + +# License + +MIT + +# Author + +Yasuhiro Matsumoto (a.k.a mattn) diff --git a/vendor/github.com/mattn/go-colorable/colorable_others.go b/vendor/github.com/mattn/go-colorable/colorable_others.go new file mode 100644 index 0000000..a7fe19a --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/colorable_others.go @@ -0,0 +1,27 @@ +// +build !windows + +package colorable + +import ( + "io" + "os" +) + +// NewColorable return new instance of Writer which handle escape sequence. +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + return file +} + +// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. +func NewColorableStdout() io.Writer { + return os.Stdout +} + +// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. +func NewColorableStderr() io.Writer { + return os.Stderr +} diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go new file mode 100644 index 0000000..628ad90 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/colorable_windows.go @@ -0,0 +1,820 @@ +package colorable + +import ( + "bytes" + "io" + "math" + "os" + "strconv" + "strings" + "syscall" + "unsafe" + + "github.com/mattn/go-isatty" +) + +const ( + foregroundBlue = 0x1 + foregroundGreen = 0x2 + foregroundRed = 0x4 + foregroundIntensity = 0x8 + foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity) + backgroundBlue = 0x10 + backgroundGreen = 0x20 + backgroundRed = 0x40 + backgroundIntensity = 0x80 + backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) +) + +type wchar uint16 +type short int16 +type dword uint32 +type word uint16 + +type coord struct { + x short + y short +} + +type smallRect struct { + left short + top short + right short + bottom short +} + +type consoleScreenBufferInfo struct { + size coord + cursorPosition coord + attributes word + window smallRect + maximumWindowSize coord +} + +type consoleCursorInfo struct { + size dword + visible int32 +} + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") + procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") + procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") + procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW") + procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute") + procGetConsoleCursorInfo = kernel32.NewProc("GetConsoleCursorInfo") + procSetConsoleCursorInfo = kernel32.NewProc("SetConsoleCursorInfo") +) + +type Writer struct { + out io.Writer + handle syscall.Handle + lastbuf bytes.Buffer + oldattr word + oldpos coord +} + +// NewColorable return new instance of Writer which handle escape sequence from File. +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + if isatty.IsTerminal(file.Fd()) { + var csbi consoleScreenBufferInfo + handle := syscall.Handle(file.Fd()) + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + return &Writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}} + } else { + return file + } +} + +// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. +func NewColorableStdout() io.Writer { + return NewColorable(os.Stdout) +} + +// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. +func NewColorableStderr() io.Writer { + return NewColorable(os.Stderr) +} + +var color256 = map[int]int{ + 0: 0x000000, + 1: 0x800000, + 2: 0x008000, + 3: 0x808000, + 4: 0x000080, + 5: 0x800080, + 6: 0x008080, + 7: 0xc0c0c0, + 8: 0x808080, + 9: 0xff0000, + 10: 0x00ff00, + 11: 0xffff00, + 12: 0x0000ff, + 13: 0xff00ff, + 14: 0x00ffff, + 15: 0xffffff, + 16: 0x000000, + 17: 0x00005f, + 18: 0x000087, + 19: 0x0000af, + 20: 0x0000d7, + 21: 0x0000ff, + 22: 0x005f00, + 23: 0x005f5f, + 24: 0x005f87, + 25: 0x005faf, + 26: 0x005fd7, + 27: 0x005fff, + 28: 0x008700, + 29: 0x00875f, + 30: 0x008787, + 31: 0x0087af, + 32: 0x0087d7, + 33: 0x0087ff, + 34: 0x00af00, + 35: 0x00af5f, + 36: 0x00af87, + 37: 0x00afaf, + 38: 0x00afd7, + 39: 0x00afff, + 40: 0x00d700, + 41: 0x00d75f, + 42: 0x00d787, + 43: 0x00d7af, + 44: 0x00d7d7, + 45: 0x00d7ff, + 46: 0x00ff00, + 47: 0x00ff5f, + 48: 0x00ff87, + 49: 0x00ffaf, + 50: 0x00ffd7, + 51: 0x00ffff, + 52: 0x5f0000, + 53: 0x5f005f, + 54: 0x5f0087, + 55: 0x5f00af, + 56: 0x5f00d7, + 57: 0x5f00ff, + 58: 0x5f5f00, + 59: 0x5f5f5f, + 60: 0x5f5f87, + 61: 0x5f5faf, + 62: 0x5f5fd7, + 63: 0x5f5fff, + 64: 0x5f8700, + 65: 0x5f875f, + 66: 0x5f8787, + 67: 0x5f87af, + 68: 0x5f87d7, + 69: 0x5f87ff, + 70: 0x5faf00, + 71: 0x5faf5f, + 72: 0x5faf87, + 73: 0x5fafaf, + 74: 0x5fafd7, + 75: 0x5fafff, + 76: 0x5fd700, + 77: 0x5fd75f, + 78: 0x5fd787, + 79: 0x5fd7af, + 80: 0x5fd7d7, + 81: 0x5fd7ff, + 82: 0x5fff00, + 83: 0x5fff5f, + 84: 0x5fff87, + 85: 0x5fffaf, + 86: 0x5fffd7, + 87: 0x5fffff, + 88: 0x870000, + 89: 0x87005f, + 90: 0x870087, + 91: 0x8700af, + 92: 0x8700d7, + 93: 0x8700ff, + 94: 0x875f00, + 95: 0x875f5f, + 96: 0x875f87, + 97: 0x875faf, + 98: 0x875fd7, + 99: 0x875fff, + 100: 0x878700, + 101: 0x87875f, + 102: 0x878787, + 103: 0x8787af, + 104: 0x8787d7, + 105: 0x8787ff, + 106: 0x87af00, + 107: 0x87af5f, + 108: 0x87af87, + 109: 0x87afaf, + 110: 0x87afd7, + 111: 0x87afff, + 112: 0x87d700, + 113: 0x87d75f, + 114: 0x87d787, + 115: 0x87d7af, + 116: 0x87d7d7, + 117: 0x87d7ff, + 118: 0x87ff00, + 119: 0x87ff5f, + 120: 0x87ff87, + 121: 0x87ffaf, + 122: 0x87ffd7, + 123: 0x87ffff, + 124: 0xaf0000, + 125: 0xaf005f, + 126: 0xaf0087, + 127: 0xaf00af, + 128: 0xaf00d7, + 129: 0xaf00ff, + 130: 0xaf5f00, + 131: 0xaf5f5f, + 132: 0xaf5f87, + 133: 0xaf5faf, + 134: 0xaf5fd7, + 135: 0xaf5fff, + 136: 0xaf8700, + 137: 0xaf875f, + 138: 0xaf8787, + 139: 0xaf87af, + 140: 0xaf87d7, + 141: 0xaf87ff, + 142: 0xafaf00, + 143: 0xafaf5f, + 144: 0xafaf87, + 145: 0xafafaf, + 146: 0xafafd7, + 147: 0xafafff, + 148: 0xafd700, + 149: 0xafd75f, + 150: 0xafd787, + 151: 0xafd7af, + 152: 0xafd7d7, + 153: 0xafd7ff, + 154: 0xafff00, + 155: 0xafff5f, + 156: 0xafff87, + 157: 0xafffaf, + 158: 0xafffd7, + 159: 0xafffff, + 160: 0xd70000, + 161: 0xd7005f, + 162: 0xd70087, + 163: 0xd700af, + 164: 0xd700d7, + 165: 0xd700ff, + 166: 0xd75f00, + 167: 0xd75f5f, + 168: 0xd75f87, + 169: 0xd75faf, + 170: 0xd75fd7, + 171: 0xd75fff, + 172: 0xd78700, + 173: 0xd7875f, + 174: 0xd78787, + 175: 0xd787af, + 176: 0xd787d7, + 177: 0xd787ff, + 178: 0xd7af00, + 179: 0xd7af5f, + 180: 0xd7af87, + 181: 0xd7afaf, + 182: 0xd7afd7, + 183: 0xd7afff, + 184: 0xd7d700, + 185: 0xd7d75f, + 186: 0xd7d787, + 187: 0xd7d7af, + 188: 0xd7d7d7, + 189: 0xd7d7ff, + 190: 0xd7ff00, + 191: 0xd7ff5f, + 192: 0xd7ff87, + 193: 0xd7ffaf, + 194: 0xd7ffd7, + 195: 0xd7ffff, + 196: 0xff0000, + 197: 0xff005f, + 198: 0xff0087, + 199: 0xff00af, + 200: 0xff00d7, + 201: 0xff00ff, + 202: 0xff5f00, + 203: 0xff5f5f, + 204: 0xff5f87, + 205: 0xff5faf, + 206: 0xff5fd7, + 207: 0xff5fff, + 208: 0xff8700, + 209: 0xff875f, + 210: 0xff8787, + 211: 0xff87af, + 212: 0xff87d7, + 213: 0xff87ff, + 214: 0xffaf00, + 215: 0xffaf5f, + 216: 0xffaf87, + 217: 0xffafaf, + 218: 0xffafd7, + 219: 0xffafff, + 220: 0xffd700, + 221: 0xffd75f, + 222: 0xffd787, + 223: 0xffd7af, + 224: 0xffd7d7, + 225: 0xffd7ff, + 226: 0xffff00, + 227: 0xffff5f, + 228: 0xffff87, + 229: 0xffffaf, + 230: 0xffffd7, + 231: 0xffffff, + 232: 0x080808, + 233: 0x121212, + 234: 0x1c1c1c, + 235: 0x262626, + 236: 0x303030, + 237: 0x3a3a3a, + 238: 0x444444, + 239: 0x4e4e4e, + 240: 0x585858, + 241: 0x626262, + 242: 0x6c6c6c, + 243: 0x767676, + 244: 0x808080, + 245: 0x8a8a8a, + 246: 0x949494, + 247: 0x9e9e9e, + 248: 0xa8a8a8, + 249: 0xb2b2b2, + 250: 0xbcbcbc, + 251: 0xc6c6c6, + 252: 0xd0d0d0, + 253: 0xdadada, + 254: 0xe4e4e4, + 255: 0xeeeeee, +} + +// Write write data on console +func (w *Writer) Write(data []byte) (n int, err error) { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + + er := bytes.NewReader(data) + var bw [1]byte +loop: + for { + r1, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + if r1 == 0 { + break loop + } + + c1, err := er.ReadByte() + if err != nil { + break loop + } + if c1 != 0x1b { + bw[0] = c1 + w.out.Write(bw[:]) + continue + } + c2, err := er.ReadByte() + if err != nil { + w.lastbuf.WriteByte(c1) + break loop + } + if c2 != 0x5b { + w.lastbuf.WriteByte(c1) + w.lastbuf.WriteByte(c2) + continue + } + + var buf bytes.Buffer + var m byte + for { + c, err := er.ReadByte() + if err != nil { + w.lastbuf.WriteByte(c1) + w.lastbuf.WriteByte(c2) + w.lastbuf.Write(buf.Bytes()) + break loop + } + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + m = c + break + } + buf.Write([]byte(string(c))) + } + + var csbi consoleScreenBufferInfo + switch m { + case 'A': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'B': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'C': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'D': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + if n, err = strconv.Atoi(buf.String()); err == nil { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + } + case 'E': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'F': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'G': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = short(n - 1) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'H': + token := strings.Split(buf.String(), ";") + if len(token) != 2 { + continue + } + n1, err := strconv.Atoi(token[0]) + if err != nil { + continue + } + n2, err := strconv.Atoi(token[1]) + if err != nil { + continue + } + csbi.cursorPosition.x = short(n2 - 1) + csbi.cursorPosition.y = short(n1 - 1) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'J': + n, err := strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + var cursor coord + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + } + var count, written dword + count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x) + procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'K': + n, err := strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + var cursor coord + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y} + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y} + } + var count, written dword + count = dword(csbi.size.x - csbi.cursorPosition.x) + procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'm': + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + attr := csbi.attributes + cs := buf.String() + if cs == "" { + procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr)) + continue + } + token := strings.Split(cs, ";") + for i := 0; i < len(token); i++ { + ns := token[i] + if n, err = strconv.Atoi(ns); err == nil { + switch { + case n == 0 || n == 100: + attr = w.oldattr + case 1 <= n && n <= 5: + attr |= foregroundIntensity + case n == 7: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 22 == n || n == 25 || n == 25: + attr |= foregroundIntensity + case n == 27: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 30 <= n && n <= 37: + attr &= backgroundMask + if (n-30)&1 != 0 { + attr |= foregroundRed + } + if (n-30)&2 != 0 { + attr |= foregroundGreen + } + if (n-30)&4 != 0 { + attr |= foregroundBlue + } + case n == 38: // set foreground color. + if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256foreAttr == nil { + n256setup() + } + attr &= backgroundMask + attr |= n256foreAttr[n256] + i += 2 + } + } else { + attr = attr & (w.oldattr & backgroundMask) + } + case n == 39: // reset foreground color. + attr &= backgroundMask + attr |= w.oldattr & foregroundMask + case 40 <= n && n <= 47: + attr &= foregroundMask + if (n-40)&1 != 0 { + attr |= backgroundRed + } + if (n-40)&2 != 0 { + attr |= backgroundGreen + } + if (n-40)&4 != 0 { + attr |= backgroundBlue + } + case n == 48: // set background color. + if i < len(token)-2 && token[i+1] == "5" { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256backAttr == nil { + n256setup() + } + attr &= foregroundMask + attr |= n256backAttr[n256] + i += 2 + } + } else { + attr = attr & (w.oldattr & foregroundMask) + } + case n == 49: // reset foreground color. + attr &= foregroundMask + attr |= w.oldattr & backgroundMask + case 90 <= n && n <= 97: + attr = (attr & backgroundMask) + attr |= foregroundIntensity + if (n-90)&1 != 0 { + attr |= foregroundRed + } + if (n-90)&2 != 0 { + attr |= foregroundGreen + } + if (n-90)&4 != 0 { + attr |= foregroundBlue + } + case 100 <= n && n <= 107: + attr = (attr & foregroundMask) + attr |= backgroundIntensity + if (n-100)&1 != 0 { + attr |= backgroundRed + } + if (n-100)&2 != 0 { + attr |= backgroundGreen + } + if (n-100)&4 != 0 { + attr |= backgroundBlue + } + } + procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr)) + } + } + case 'h': + cs := buf.String() + if cs == "?25" { + var ci consoleCursorInfo + procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci))) + ci.visible = 1 + procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci))) + } + case 'l': + cs := buf.String() + if cs == "?25" { + var ci consoleCursorInfo + procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci))) + ci.visible = 0 + procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci))) + } + case 's': + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + w.oldpos = csbi.cursorPosition + case 'u': + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&w.oldpos))) + } + } + return len(data) - w.lastbuf.Len(), nil +} + +type consoleColor struct { + rgb int + red bool + green bool + blue bool + intensity bool +} + +func (c consoleColor) foregroundAttr() (attr word) { + if c.red { + attr |= foregroundRed + } + if c.green { + attr |= foregroundGreen + } + if c.blue { + attr |= foregroundBlue + } + if c.intensity { + attr |= foregroundIntensity + } + return +} + +func (c consoleColor) backgroundAttr() (attr word) { + if c.red { + attr |= backgroundRed + } + if c.green { + attr |= backgroundGreen + } + if c.blue { + attr |= backgroundBlue + } + if c.intensity { + attr |= backgroundIntensity + } + return +} + +var color16 = []consoleColor{ + consoleColor{0x000000, false, false, false, false}, + consoleColor{0x000080, false, false, true, false}, + consoleColor{0x008000, false, true, false, false}, + consoleColor{0x008080, false, true, true, false}, + consoleColor{0x800000, true, false, false, false}, + consoleColor{0x800080, true, false, true, false}, + consoleColor{0x808000, true, true, false, false}, + consoleColor{0xc0c0c0, true, true, true, false}, + consoleColor{0x808080, false, false, false, true}, + consoleColor{0x0000ff, false, false, true, true}, + consoleColor{0x00ff00, false, true, false, true}, + consoleColor{0x00ffff, false, true, true, true}, + consoleColor{0xff0000, true, false, false, true}, + consoleColor{0xff00ff, true, false, true, true}, + consoleColor{0xffff00, true, true, false, true}, + consoleColor{0xffffff, true, true, true, true}, +} + +type hsv struct { + h, s, v float32 +} + +func (a hsv) dist(b hsv) float32 { + dh := a.h - b.h + switch { + case dh > 0.5: + dh = 1 - dh + case dh < -0.5: + dh = -1 - dh + } + ds := a.s - b.s + dv := a.v - b.v + return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv))) +} + +func toHSV(rgb int) hsv { + r, g, b := float32((rgb&0xFF0000)>>16)/256.0, + float32((rgb&0x00FF00)>>8)/256.0, + float32(rgb&0x0000FF)/256.0 + min, max := minmax3f(r, g, b) + h := max - min + if h > 0 { + if max == r { + h = (g - b) / h + if h < 0 { + h += 6 + } + } else if max == g { + h = 2 + (b-r)/h + } else { + h = 4 + (r-g)/h + } + } + h /= 6.0 + s := max - min + if max != 0 { + s /= max + } + v := max + return hsv{h: h, s: s, v: v} +} + +type hsvTable []hsv + +func toHSVTable(rgbTable []consoleColor) hsvTable { + t := make(hsvTable, len(rgbTable)) + for i, c := range rgbTable { + t[i] = toHSV(c.rgb) + } + return t +} + +func (t hsvTable) find(rgb int) consoleColor { + hsv := toHSV(rgb) + n := 7 + l := float32(5.0) + for i, p := range t { + d := hsv.dist(p) + if d < l { + l, n = d, i + } + } + return color16[n] +} + +func minmax3f(a, b, c float32) (min, max float32) { + if a < b { + if b < c { + return a, c + } else if a < c { + return a, b + } else { + return c, b + } + } else { + if a < c { + return b, c + } else if b < c { + return b, a + } else { + return c, a + } + } +} + +var n256foreAttr []word +var n256backAttr []word + +func n256setup() { + n256foreAttr = make([]word, 256) + n256backAttr = make([]word, 256) + t := toHSVTable(color16) + for i, rgb := range color256 { + c := t.find(rgb) + n256foreAttr[i] = c.foregroundAttr() + n256backAttr[i] = c.backgroundAttr() + } +} diff --git a/vendor/github.com/mattn/go-colorable/noncolorable.go b/vendor/github.com/mattn/go-colorable/noncolorable.go new file mode 100644 index 0000000..ca588c7 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/noncolorable.go @@ -0,0 +1,61 @@ +package colorable + +import ( + "bytes" + "io" +) + +// NonColorable hold writer but remove escape sequence. +type NonColorable struct { + out io.Writer + lastbuf bytes.Buffer +} + +// NewNonColorable return new instance of Writer which remove escape sequence from Writer. +func NewNonColorable(w io.Writer) io.Writer { + return &NonColorable{out: w} +} + +// Write write data on console +func (w *NonColorable) Write(data []byte) (n int, err error) { + er := bytes.NewReader(data) + var bw [1]byte +loop: + for { + c1, err := er.ReadByte() + if err != nil { + break loop + } + if c1 != 0x1b { + bw[0] = c1 + w.out.Write(bw[:]) + continue + } + c2, err := er.ReadByte() + if err != nil { + w.lastbuf.WriteByte(c1) + break loop + } + if c2 != 0x5b { + w.lastbuf.WriteByte(c1) + w.lastbuf.WriteByte(c2) + continue + } + + var buf bytes.Buffer + for { + c, err := er.ReadByte() + if err != nil { + w.lastbuf.WriteByte(c1) + w.lastbuf.WriteByte(c2) + w.lastbuf.Write(buf.Bytes()) + break loop + } + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + break + } + buf.Write([]byte(string(c))) + } + } + return len(data) - w.lastbuf.Len(), nil +} diff --git a/vendor/github.com/mattn/go-isatty/LICENSE b/vendor/github.com/mattn/go-isatty/LICENSE new file mode 100644 index 0000000..65dc692 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/LICENSE @@ -0,0 +1,9 @@ +Copyright (c) Yasuhiro MATSUMOTO + +MIT License (Expat) + +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/mattn/go-isatty/README.md b/vendor/github.com/mattn/go-isatty/README.md new file mode 100644 index 0000000..74845de --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/README.md @@ -0,0 +1,37 @@ +# go-isatty + +isatty for golang + +## Usage + +```go +package main + +import ( + "fmt" + "github.com/mattn/go-isatty" + "os" +) + +func main() { + if isatty.IsTerminal(os.Stdout.Fd()) { + fmt.Println("Is Terminal") + } else { + fmt.Println("Is Not Terminal") + } +} +``` + +## Installation + +``` +$ go get github.com/mattn/go-isatty +``` + +# License + +MIT + +# Author + +Yasuhiro Matsumoto (a.k.a mattn) diff --git a/vendor/github.com/mattn/go-isatty/doc.go b/vendor/github.com/mattn/go-isatty/doc.go new file mode 100644 index 0000000..17d4f90 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/doc.go @@ -0,0 +1,2 @@ +// Package isatty implements interface to isatty +package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go new file mode 100644 index 0000000..e6282b5 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_bsd.go @@ -0,0 +1,17 @@ +// +build darwin freebsd openbsd netbsd + +package isatty + +import ( + "syscall" + "unsafe" +) + +const ioctlReadTermios = syscall.TIOCGETA + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_linux.go b/vendor/github.com/mattn/go-isatty/isatty_linux.go new file mode 100644 index 0000000..8b361d7 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_linux.go @@ -0,0 +1,17 @@ +// +build linux + +package isatty + +import ( + "syscall" + "unsafe" +) + +const ioctlReadTermios = syscall.TCGETS + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go new file mode 100644 index 0000000..562ee39 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_windows.go @@ -0,0 +1,18 @@ +// +build windows + +package isatty + +import ( + "syscall" + "unsafe" +) + +var kernel32 = syscall.NewLazyDLL("kernel32.dll") +var procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +} diff --git a/vendor/github.com/nicksnyder/go-i18n/LICENSE b/vendor/github.com/nicksnyder/go-i18n/LICENSE new file mode 100644 index 0000000..609cce7 --- /dev/null +++ b/vendor/github.com/nicksnyder/go-i18n/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 Nick Snyder https://github.com/nicksnyder + +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/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/bundle/bundle.go b/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle.go similarity index 75% rename from Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/bundle/bundle.go rename to vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle.go index 11a6938..155543b 100644 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/bundle/bundle.go +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle.go @@ -5,13 +5,13 @@ import ( "encoding/json" "fmt" "io/ioutil" - - // "launchpad.net/goyaml" - "path/filepath" + "reflect" + "sync" "github.com/nicksnyder/go-i18n/i18n/language" "github.com/nicksnyder/go-i18n/i18n/translation" + "gopkg.in/yaml.v2" ) // TranslateFunc is a copy of i18n.TranslateFunc to avoid a circular dependency. @@ -24,6 +24,8 @@ type Bundle struct { // Translations that can be used when an exact language match is not possible. fallbackTranslations map[string]map[string]translation.Translation + + sync.RWMutex } // New returns an empty bundle. @@ -80,10 +82,8 @@ func parseTranslations(filename string, buf []byte) ([]translation.Translation, switch format := filepath.Ext(filename); format { case ".json": unmarshalFunc = json.Unmarshal - /* - case ".yaml": - unmarshalFunc = goyaml.Unmarshal - */ + case ".yaml": + unmarshalFunc = yaml.Unmarshal default: return nil, fmt.Errorf("unsupported file extension %s", format) } @@ -91,7 +91,7 @@ func parseTranslations(filename string, buf []byte) ([]translation.Translation, var translationsData []map[string]interface{} if len(buf) > 0 { if err := unmarshalFunc(buf, &translationsData); err != nil { - return nil, err + return nil, fmt.Errorf("failed to load %s because %s", filename, err) } } @@ -110,6 +110,8 @@ func parseTranslations(filename string, buf []byte) ([]translation.Translation, // // It is useful if your translations are in a format not supported by LoadTranslationFile. func (b *Bundle) AddTranslation(lang *language.Language, translations ...translation.Translation) { + b.Lock() + defer b.Unlock() if b.translations[lang.Tag] == nil { b.translations[lang.Tag] = make(map[string]translation.Translation, len(translations)) } @@ -130,7 +132,38 @@ func (b *Bundle) AddTranslation(lang *language.Language, translations ...transla // Translations returns all translations in the bundle. func (b *Bundle) Translations() map[string]map[string]translation.Translation { - return b.translations + t := make(map[string]map[string]translation.Translation) + b.RLock() + for tag, translations := range b.translations { + t[tag] = make(map[string]translation.Translation) + for id, translation := range translations { + t[tag][id] = translation + } + } + b.RUnlock() + return t +} + +// LanguageTags returns the tags of all languages that that have been added. +func (b *Bundle) LanguageTags() []string { + var tags []string + b.RLock() + for k := range b.translations { + tags = append(tags, k) + } + b.RUnlock() + return tags +} + +// LanguageTranslationIDs returns the ids of all translations that have been added for a given language. +func (b *Bundle) LanguageTranslationIDs(languageTag string) []string { + var ids []string + b.RLock() + for id := range b.translations[languageTag] { + ids = append(ids, id) + } + b.RUnlock() + return ids } // MustTfunc is similar to Tfunc except it panics if an error happens. @@ -196,6 +229,8 @@ func (b *Bundle) supportedLanguage(pref string, prefs ...string) *language.Langu func (b *Bundle) translatedLanguage(src string) *language.Language { langs := language.Parse(src) + b.RLock() + defer b.RUnlock() for _, lang := range langs { if len(b.translations[lang.Tag]) > 0 || len(b.fallbackTranslations[lang.Tag]) > 0 { @@ -210,44 +245,45 @@ func (b *Bundle) translate(lang *language.Language, translationID string, args . return translationID } - translations := b.translations[lang.Tag] - if translations == nil { - translations = b.fallbackTranslations[lang.Tag] - if translations == nil { - return translationID - } - } - - translation := translations[translationID] + translation := b.translation(lang, translationID) if translation == nil { return translationID } + var data interface{} var count interface{} - if len(args) > 0 && isNumber(args[0]) { - count = args[0] - args = args[1:] - } - - plural, _ := lang.Plural(count) - template := translation.Template(plural) - if template == nil { - return translationID - } - - var data map[string]interface{} - if len(args) > 0 { - data, _ = args[0].(map[string]interface{}) + if argc := len(args); argc > 0 { + if isNumber(args[0]) { + count = args[0] + if argc > 1 { + data = args[1] + } + } else { + data = args[0] + } } - if isNumber(count) { + if count != nil { if data == nil { data = map[string]interface{}{"Count": count} } else { - data["Count"] = count + dataMap := toMap(data) + dataMap["Count"] = count + data = dataMap + } + } else { + dataMap := toMap(data) + if c, ok := dataMap["Count"]; ok { + count = c } } + p, _ := lang.Plural(count) + template := translation.Template(p) + if template == nil { + return translationID + } + s := template.Execute(data) if s == "" { return translationID @@ -255,6 +291,19 @@ func (b *Bundle) translate(lang *language.Language, translationID string, args . return s } +func (b *Bundle) translation(lang *language.Language, translationID string) translation.Translation { + b.RLock() + defer b.RUnlock() + translations := b.translations[lang.Tag] + if translations == nil { + translations = b.fallbackTranslations[lang.Tag] + if translations == nil { + return nil + } + } + return translations[translationID] +} + func isNumber(n interface{}) bool { switch n.(type) { case int, int8, int16, int32, int64, string: @@ -262,3 +311,34 @@ func isNumber(n interface{}) bool { } return false } + +func toMap(input interface{}) map[string]interface{} { + if data, ok := input.(map[string]interface{}); ok { + return data + } + v := reflect.ValueOf(input) + switch v.Kind() { + case reflect.Ptr: + return toMap(v.Elem().Interface()) + case reflect.Struct: + return structToMap(v) + default: + return nil + } +} + +// Converts the top level of a struct to a map[string]interface{}. +// Code inspired by github.com/fatih/structs. +func structToMap(v reflect.Value) map[string]interface{} { + out := make(map[string]interface{}) + t := v.Type() + for i := 0; i < t.NumField(); i++ { + field := t.Field(i) + if field.PkgPath != "" { + // unexported field. skip. + continue + } + out[field.Name] = v.FieldByName(field.Name).Interface() + } + return out +} diff --git a/vendor/github.com/nicksnyder/go-i18n/i18n/i18n.go b/vendor/github.com/nicksnyder/go-i18n/i18n/i18n.go new file mode 100644 index 0000000..c478ff6 --- /dev/null +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/i18n.go @@ -0,0 +1,158 @@ +// Package i18n supports string translations with variable substitution and CLDR pluralization. +// It is intended to be used in conjunction with the goi18n command, although that is not strictly required. +// +// Initialization +// +// Your Go program should load translations during its initialization. +// i18n.MustLoadTranslationFile("path/to/fr-FR.all.json") +// If your translations are in a file format not supported by (Must)?LoadTranslationFile, +// then you can use the AddTranslation function to manually add translations. +// +// Fetching a translation +// +// Use Tfunc or MustTfunc to fetch a TranslateFunc that will return the translated string for a specific language. +// func handleRequest(w http.ResponseWriter, r *http.Request) { +// cookieLang := r.Cookie("lang") +// acceptLang := r.Header.Get("Accept-Language") +// defaultLang = "en-US" // known valid language +// T, err := i18n.Tfunc(cookieLang, acceptLang, defaultLang) +// fmt.Println(T("Hello world")) +// } +// +// Usually it is a good idea to identify strings by a generic id rather than the English translation, +// but the rest of this documentation will continue to use the English translation for readability. +// T("Hello world") // ok +// T("programGreeting") // better! +// +// Variables +// +// TranslateFunc supports strings that have variables using the text/template syntax. +// T("Hello {{.Person}}", map[string]interface{}{ +// "Person": "Bob", +// }) +// +// Pluralization +// +// TranslateFunc supports the pluralization of strings using the CLDR pluralization rules defined here: +// http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html +// T("You have {{.Count}} unread emails.", 2) +// T("I am {{.Count}} meters tall.", "1.7") +// +// Plural strings may also have variables. +// T("{{.Person}} has {{.Count}} unread emails", 2, map[string]interface{}{ +// "Person": "Bob", +// }) +// +// Sentences with multiple plural components can be supported with nesting. +// T("{{.Person}} has {{.Count}} unread emails in the past {{.Timeframe}}.", 3, map[string]interface{}{ +// "Person": "Bob", +// "Timeframe": T("{{.Count}} days", 2), +// }) +// +// Templates +// +// You can use the .Funcs() method of a text/template or html/template to register a TranslateFunc +// for usage inside of that template. +package i18n + +import ( + "github.com/nicksnyder/go-i18n/i18n/bundle" + "github.com/nicksnyder/go-i18n/i18n/language" + "github.com/nicksnyder/go-i18n/i18n/translation" +) + +// TranslateFunc returns the translation of the string identified by translationID. +// +// If there is no translation for translationID, then the translationID itself is returned. +// This makes it easy to identify missing translations in your app. +// +// If translationID is a non-plural form, then the first variadic argument may be a map[string]interface{} +// or struct that contains template data. +// +// If translationID is a plural form, the function accepts two parameter signatures +// 1. T(count int, data struct{}) +// The first variadic argument must be an integer type +// (int, int8, int16, int32, int64) or a float formatted as a string (e.g. "123.45"). +// The second variadic argument may be a map[string]interface{} or struct{} that contains template data. +// 2. T(data struct{}) +// data must be a struct{} or map[string]interface{} that contains a Count field and the template data, +// Count field must be an integer type (int, int8, int16, int32, int64) +// or a float formatted as a string (e.g. "123.45"). +type TranslateFunc func(translationID string, args ...interface{}) string + +// IdentityTfunc returns a TranslateFunc that always returns the translationID passed to it. +// +// It is a useful placeholder when parsing a text/template or html/template +// before the actual Tfunc is available. +func IdentityTfunc() TranslateFunc { + return func(translationID string, args ...interface{}) string { + return translationID + } +} + +var defaultBundle = bundle.New() + +// MustLoadTranslationFile is similar to LoadTranslationFile +// except it panics if an error happens. +func MustLoadTranslationFile(filename string) { + defaultBundle.MustLoadTranslationFile(filename) +} + +// LoadTranslationFile loads the translations from filename into memory. +// +// The language that the translations are associated with is parsed from the filename (e.g. en-US.json). +// +// Generally you should load translation files once during your program's initialization. +func LoadTranslationFile(filename string) error { + return defaultBundle.LoadTranslationFile(filename) +} + +// ParseTranslationFileBytes is similar to LoadTranslationFile except it parses the bytes in buf. +// +// It is useful for parsing translation files embedded with go-bindata. +func ParseTranslationFileBytes(filename string, buf []byte) error { + return defaultBundle.ParseTranslationFileBytes(filename, buf) +} + +// AddTranslation adds translations for a language. +// +// It is useful if your translations are in a format not supported by LoadTranslationFile. +func AddTranslation(lang *language.Language, translations ...translation.Translation) { + defaultBundle.AddTranslation(lang, translations...) +} + +// LanguageTags returns the tags of all languages that have been added. +func LanguageTags() []string { + return defaultBundle.LanguageTags() +} + +// LanguageTranslationIDs returns the ids of all translations that have been added for a given language. +func LanguageTranslationIDs(languageTag string) []string { + return defaultBundle.LanguageTranslationIDs(languageTag) +} + +// MustTfunc is similar to Tfunc except it panics if an error happens. +func MustTfunc(languageSource string, languageSources ...string) TranslateFunc { + return TranslateFunc(defaultBundle.MustTfunc(languageSource, languageSources...)) +} + +// Tfunc returns a TranslateFunc that will be bound to the first language which +// has a non-zero number of translations. +// +// It can parse languages from Accept-Language headers (RFC 2616). +func Tfunc(languageSource string, languageSources ...string) (TranslateFunc, error) { + tfunc, err := defaultBundle.Tfunc(languageSource, languageSources...) + return TranslateFunc(tfunc), err +} + +// MustTfuncAndLanguage is similar to TfuncAndLanguage except it panics if an error happens. +func MustTfuncAndLanguage(languageSource string, languageSources ...string) (TranslateFunc, *language.Language) { + tfunc, lang := defaultBundle.MustTfuncAndLanguage(languageSource, languageSources...) + return TranslateFunc(tfunc), lang +} + +// TfuncAndLanguage is similar to Tfunc except it also returns the language which TranslateFunc is bound to. +func TfuncAndLanguage(languageSource string, languageSources ...string) (TranslateFunc, *language.Language, error) { + tfunc, lang, err := defaultBundle.TfuncAndLanguage(languageSource, languageSources...) + return TranslateFunc(tfunc), lang, err +} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/language.go b/vendor/github.com/nicksnyder/go-i18n/i18n/language/language.go similarity index 100% rename from Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/language.go rename to vendor/github.com/nicksnyder/go-i18n/i18n/language/language.go diff --git a/vendor/github.com/nicksnyder/go-i18n/i18n/language/operands.go b/vendor/github.com/nicksnyder/go-i18n/i18n/language/operands.go new file mode 100644 index 0000000..877bcc8 --- /dev/null +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/language/operands.go @@ -0,0 +1,119 @@ +package language + +import ( + "fmt" + "strconv" + "strings" +) + +// http://unicode.org/reports/tr35/tr35-numbers.html#Operands +type operands struct { + N float64 // absolute value of the source number (integer and decimals) + I int64 // integer digits of n + V int64 // number of visible fraction digits in n, with trailing zeros + W int64 // number of visible fraction digits in n, without trailing zeros + F int64 // visible fractional digits in n, with trailing zeros + T int64 // visible fractional digits in n, without trailing zeros +} + +// NmodEqualAny returns true if o represents an integer equal to any of the arguments. +func (o *operands) NequalsAny(any ...int64) bool { + for _, i := range any { + if o.I == i && o.T == 0 { + return true + } + } + return false +} + +// NmodEqualAny returns true if o represents an integer equal to any of the arguments modulo mod. +func (o *operands) NmodEqualsAny(mod int64, any ...int64) bool { + modI := o.I % mod + for _, i := range any { + if modI == i && o.T == 0 { + return true + } + } + return false +} + +// NmodInRange returns true if o represents an integer in the closed interval [from, to]. +func (o *operands) NinRange(from, to int64) bool { + return o.T == 0 && from <= o.I && o.I <= to +} + +// NmodInRange returns true if o represents an integer in the closed interval [from, to] modulo mod. +func (o *operands) NmodInRange(mod, from, to int64) bool { + modI := o.I % mod + return o.T == 0 && from <= modI && modI <= to +} + +func newOperands(v interface{}) (*operands, error) { + switch v := v.(type) { + case int: + return newOperandsInt64(int64(v)), nil + case int8: + return newOperandsInt64(int64(v)), nil + case int16: + return newOperandsInt64(int64(v)), nil + case int32: + return newOperandsInt64(int64(v)), nil + case int64: + return newOperandsInt64(v), nil + case string: + return newOperandsString(v) + case float32, float64: + return nil, fmt.Errorf("floats should be formatted into a string") + default: + return nil, fmt.Errorf("invalid type %T; expected integer or string", v) + } +} + +func newOperandsInt64(i int64) *operands { + if i < 0 { + i = -i + } + return &operands{float64(i), i, 0, 0, 0, 0} +} + +func newOperandsString(s string) (*operands, error) { + if s[0] == '-' { + s = s[1:] + } + n, err := strconv.ParseFloat(s, 64) + if err != nil { + return nil, err + } + ops := &operands{N: n} + parts := strings.SplitN(s, ".", 2) + ops.I, err = strconv.ParseInt(parts[0], 10, 64) + if err != nil { + return nil, err + } + if len(parts) == 1 { + return ops, nil + } + fraction := parts[1] + ops.V = int64(len(fraction)) + for i := ops.V - 1; i >= 0; i-- { + if fraction[i] != '0' { + ops.W = i + 1 + break + } + } + if ops.V > 0 { + f, err := strconv.ParseInt(fraction, 10, 0) + if err != nil { + return nil, err + } + ops.F = f + } + if ops.W > 0 { + t, err := strconv.ParseInt(fraction[:ops.W], 10, 0) + if err != nil { + return nil, err + } + ops.T = t + } + return ops, nil +} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/plural.go b/vendor/github.com/nicksnyder/go-i18n/i18n/language/plural.go similarity index 100% rename from Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/language/plural.go rename to vendor/github.com/nicksnyder/go-i18n/i18n/language/plural.go diff --git a/vendor/github.com/nicksnyder/go-i18n/i18n/language/pluralspec.go b/vendor/github.com/nicksnyder/go-i18n/i18n/language/pluralspec.go new file mode 100644 index 0000000..fc35226 --- /dev/null +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/language/pluralspec.go @@ -0,0 +1,74 @@ +package language + +import "strings" + +// PluralSpec defines the CLDR plural rules for a language. +// http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html +// http://unicode.org/reports/tr35/tr35-numbers.html#Operands +type PluralSpec struct { + Plurals map[Plural]struct{} + PluralFunc func(*operands) Plural +} + +var pluralSpecs = make(map[string]*PluralSpec) + +func normalizePluralSpecID(id string) string { + id = strings.Replace(id, "_", "-", -1) + id = strings.ToLower(id) + return id +} + +func registerPluralSpec(ids []string, ps *PluralSpec) { + for _, id := range ids { + id = normalizePluralSpecID(id) + pluralSpecs[id] = ps + } +} + +// Plural returns the plural category for number as defined by +// the language's CLDR plural rules. +func (ps *PluralSpec) Plural(number interface{}) (Plural, error) { + ops, err := newOperands(number) + if err != nil { + return Invalid, err + } + return ps.PluralFunc(ops), nil +} + +// getPluralSpec returns the PluralSpec that matches the longest prefix of tag. +// It returns nil if no PluralSpec matches tag. +func getPluralSpec(tag string) *PluralSpec { + tag = NormalizeTag(tag) + subtag := tag + for { + if spec := pluralSpecs[subtag]; spec != nil { + return spec + } + end := strings.LastIndex(subtag, "-") + if end == -1 { + return nil + } + subtag = subtag[:end] + } +} + +func newPluralSet(plurals ...Plural) map[Plural]struct{} { + set := make(map[Plural]struct{}, len(plurals)) + for _, plural := range plurals { + set[plural] = struct{}{} + } + return set +} + +func intInRange(i, from, to int64) bool { + return from <= i && i <= to +} + +func intEqualsAny(i int64, any ...int64) bool { + for _, a := range any { + if i == a { + return true + } + } + return false +} diff --git a/vendor/github.com/nicksnyder/go-i18n/i18n/language/pluralspec_gen.go b/vendor/github.com/nicksnyder/go-i18n/i18n/language/pluralspec_gen.go new file mode 100644 index 0000000..c9b4f26 --- /dev/null +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/language/pluralspec_gen.go @@ -0,0 +1,567 @@ +package language + +// This file is generated by i18n/language/codegen/generate.sh + +func init() { + + registerPluralSpec([]string{"bm", "bo", "dz", "id", "ig", "ii", "in", "ja", "jbo", "jv", "jw", "kde", "kea", "km", "ko", "lkt", "lo", "ms", "my", "nqo", "root", "sah", "ses", "sg", "th", "to", "vi", "wo", "yo", "zh"}, &PluralSpec{ + Plurals: newPluralSet(Other), + PluralFunc: func(ops *operands) Plural { + return Other + }, + }) + registerPluralSpec([]string{"am", "as", "bn", "fa", "gu", "hi", "kn", "mr", "zu"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // i = 0 or n = 1 + if intEqualsAny(ops.I, 0) || + ops.NequalsAny(1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"ff", "fr", "hy", "kab"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // i = 0,1 + if intEqualsAny(ops.I, 0, 1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"ast", "ca", "de", "en", "et", "fi", "fy", "gl", "it", "ji", "nl", "sv", "sw", "ur", "yi"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // i = 1 and v = 0 + if intEqualsAny(ops.I, 1) && intEqualsAny(ops.V, 0) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"si"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0,1 or i = 0 and f = 1 + if ops.NequalsAny(0, 1) || + intEqualsAny(ops.I, 0) && intEqualsAny(ops.F, 1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"ak", "bh", "guw", "ln", "mg", "nso", "pa", "ti", "wa"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0..1 + if ops.NinRange(0, 1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"tzm"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0..1 or n = 11..99 + if ops.NinRange(0, 1) || + ops.NinRange(11, 99) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"pt"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0..2 and n != 2 + if ops.NinRange(0, 2) && !ops.NequalsAny(2) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"af", "asa", "az", "bem", "bez", "bg", "brx", "ce", "cgg", "chr", "ckb", "dv", "ee", "el", "eo", "es", "eu", "fo", "fur", "gsw", "ha", "haw", "hu", "jgo", "jmc", "ka", "kaj", "kcg", "kk", "kkj", "kl", "ks", "ksb", "ku", "ky", "lb", "lg", "mas", "mgo", "ml", "mn", "nah", "nb", "nd", "ne", "nn", "nnh", "no", "nr", "ny", "nyn", "om", "or", "os", "pap", "ps", "rm", "rof", "rwk", "saq", "sdh", "seh", "sn", "so", "sq", "ss", "ssy", "st", "syr", "ta", "te", "teo", "tig", "tk", "tn", "tr", "ts", "ug", "uz", "ve", "vo", "vun", "wae", "xh", "xog"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1 + if ops.NequalsAny(1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"pt_PT"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1 and v = 0 + if ops.NequalsAny(1) && intEqualsAny(ops.V, 0) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"da"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1 or t != 0 and i = 0,1 + if ops.NequalsAny(1) || + !intEqualsAny(ops.T, 0) && intEqualsAny(ops.I, 0, 1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"is"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 + if intEqualsAny(ops.T, 0) && intEqualsAny(ops.I%10, 1) && !intEqualsAny(ops.I%100, 11) || + !intEqualsAny(ops.T, 0) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"mk"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i % 10 = 1 or f % 10 = 1 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%10, 1) || + intEqualsAny(ops.F%10, 1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"fil", "tl"}, &PluralSpec{ + Plurals: newPluralSet(One, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I, 1, 2, 3) || + intEqualsAny(ops.V, 0) && !intEqualsAny(ops.I%10, 4, 6, 9) || + !intEqualsAny(ops.V, 0) && !intEqualsAny(ops.F%10, 4, 6, 9) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"lv", "prg"}, &PluralSpec{ + Plurals: newPluralSet(Zero, One, Other), + PluralFunc: func(ops *operands) Plural { + // n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 + if ops.NmodEqualsAny(10, 0) || + ops.NmodInRange(100, 11, 19) || + intEqualsAny(ops.V, 2) && intInRange(ops.F%100, 11, 19) { + return Zero + } + // n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 + if ops.NmodEqualsAny(10, 1) && !ops.NmodEqualsAny(100, 11) || + intEqualsAny(ops.V, 2) && intEqualsAny(ops.F%10, 1) && !intEqualsAny(ops.F%100, 11) || + !intEqualsAny(ops.V, 2) && intEqualsAny(ops.F%10, 1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"lag"}, &PluralSpec{ + Plurals: newPluralSet(Zero, One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0 + if ops.NequalsAny(0) { + return Zero + } + // i = 0,1 and n != 0 + if intEqualsAny(ops.I, 0, 1) && !ops.NequalsAny(0) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"ksh"}, &PluralSpec{ + Plurals: newPluralSet(Zero, One, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0 + if ops.NequalsAny(0) { + return Zero + } + // n = 1 + if ops.NequalsAny(1) { + return One + } + return Other + }, + }) + registerPluralSpec([]string{"iu", "kw", "naq", "se", "sma", "smi", "smj", "smn", "sms"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1 + if ops.NequalsAny(1) { + return One + } + // n = 2 + if ops.NequalsAny(2) { + return Two + } + return Other + }, + }) + registerPluralSpec([]string{"shi"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Other), + PluralFunc: func(ops *operands) Plural { + // i = 0 or n = 1 + if intEqualsAny(ops.I, 0) || + ops.NequalsAny(1) { + return One + } + // n = 2..10 + if ops.NinRange(2, 10) { + return Few + } + return Other + }, + }) + registerPluralSpec([]string{"mo", "ro"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Other), + PluralFunc: func(ops *operands) Plural { + // i = 1 and v = 0 + if intEqualsAny(ops.I, 1) && intEqualsAny(ops.V, 0) { + return One + } + // v != 0 or n = 0 or n != 1 and n % 100 = 1..19 + if !intEqualsAny(ops.V, 0) || + ops.NequalsAny(0) || + !ops.NequalsAny(1) && ops.NmodInRange(100, 1, 19) { + return Few + } + return Other + }, + }) + registerPluralSpec([]string{"bs", "hr", "sh", "sr"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%10, 1) && !intEqualsAny(ops.I%100, 11) || + intEqualsAny(ops.F%10, 1) && !intEqualsAny(ops.F%100, 11) { + return One + } + // v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 + if intEqualsAny(ops.V, 0) && intInRange(ops.I%10, 2, 4) && !intInRange(ops.I%100, 12, 14) || + intInRange(ops.F%10, 2, 4) && !intInRange(ops.F%100, 12, 14) { + return Few + } + return Other + }, + }) + registerPluralSpec([]string{"gd"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Few, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1,11 + if ops.NequalsAny(1, 11) { + return One + } + // n = 2,12 + if ops.NequalsAny(2, 12) { + return Two + } + // n = 3..10,13..19 + if ops.NinRange(3, 10) || ops.NinRange(13, 19) { + return Few + } + return Other + }, + }) + registerPluralSpec([]string{"sl"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Few, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i % 100 = 1 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%100, 1) { + return One + } + // v = 0 and i % 100 = 2 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%100, 2) { + return Two + } + // v = 0 and i % 100 = 3..4 or v != 0 + if intEqualsAny(ops.V, 0) && intInRange(ops.I%100, 3, 4) || + !intEqualsAny(ops.V, 0) { + return Few + } + return Other + }, + }) + registerPluralSpec([]string{"dsb", "hsb"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Few, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i % 100 = 1 or f % 100 = 1 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%100, 1) || + intEqualsAny(ops.F%100, 1) { + return One + } + // v = 0 and i % 100 = 2 or f % 100 = 2 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%100, 2) || + intEqualsAny(ops.F%100, 2) { + return Two + } + // v = 0 and i % 100 = 3..4 or f % 100 = 3..4 + if intEqualsAny(ops.V, 0) && intInRange(ops.I%100, 3, 4) || + intInRange(ops.F%100, 3, 4) { + return Few + } + return Other + }, + }) + registerPluralSpec([]string{"he", "iw"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Many, Other), + PluralFunc: func(ops *operands) Plural { + // i = 1 and v = 0 + if intEqualsAny(ops.I, 1) && intEqualsAny(ops.V, 0) { + return One + } + // i = 2 and v = 0 + if intEqualsAny(ops.I, 2) && intEqualsAny(ops.V, 0) { + return Two + } + // v = 0 and n != 0..10 and n % 10 = 0 + if intEqualsAny(ops.V, 0) && !ops.NinRange(0, 10) && ops.NmodEqualsAny(10, 0) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"cs", "sk"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // i = 1 and v = 0 + if intEqualsAny(ops.I, 1) && intEqualsAny(ops.V, 0) { + return One + } + // i = 2..4 and v = 0 + if intInRange(ops.I, 2, 4) && intEqualsAny(ops.V, 0) { + return Few + } + // v != 0 + if !intEqualsAny(ops.V, 0) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"pl"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // i = 1 and v = 0 + if intEqualsAny(ops.I, 1) && intEqualsAny(ops.V, 0) { + return One + } + // v = 0 and i % 10 = 2..4 and i % 100 != 12..14 + if intEqualsAny(ops.V, 0) && intInRange(ops.I%10, 2, 4) && !intInRange(ops.I%100, 12, 14) { + return Few + } + // v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 + if intEqualsAny(ops.V, 0) && !intEqualsAny(ops.I, 1) && intInRange(ops.I%10, 0, 1) || + intEqualsAny(ops.V, 0) && intInRange(ops.I%10, 5, 9) || + intEqualsAny(ops.V, 0) && intInRange(ops.I%100, 12, 14) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"be"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n % 10 = 1 and n % 100 != 11 + if ops.NmodEqualsAny(10, 1) && !ops.NmodEqualsAny(100, 11) { + return One + } + // n % 10 = 2..4 and n % 100 != 12..14 + if ops.NmodInRange(10, 2, 4) && !ops.NmodInRange(100, 12, 14) { + return Few + } + // n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 + if ops.NmodEqualsAny(10, 0) || + ops.NmodInRange(10, 5, 9) || + ops.NmodInRange(100, 11, 14) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"lt"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n % 10 = 1 and n % 100 != 11..19 + if ops.NmodEqualsAny(10, 1) && !ops.NmodInRange(100, 11, 19) { + return One + } + // n % 10 = 2..9 and n % 100 != 11..19 + if ops.NmodInRange(10, 2, 9) && !ops.NmodInRange(100, 11, 19) { + return Few + } + // f != 0 + if !intEqualsAny(ops.F, 0) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"mt"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1 + if ops.NequalsAny(1) { + return One + } + // n = 0 or n % 100 = 2..10 + if ops.NequalsAny(0) || + ops.NmodInRange(100, 2, 10) { + return Few + } + // n % 100 = 11..19 + if ops.NmodInRange(100, 11, 19) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"ru", "uk"}, &PluralSpec{ + Plurals: newPluralSet(One, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i % 10 = 1 and i % 100 != 11 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%10, 1) && !intEqualsAny(ops.I%100, 11) { + return One + } + // v = 0 and i % 10 = 2..4 and i % 100 != 12..14 + if intEqualsAny(ops.V, 0) && intInRange(ops.I%10, 2, 4) && !intInRange(ops.I%100, 12, 14) { + return Few + } + // v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%10, 0) || + intEqualsAny(ops.V, 0) && intInRange(ops.I%10, 5, 9) || + intEqualsAny(ops.V, 0) && intInRange(ops.I%100, 11, 14) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"br"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n % 10 = 1 and n % 100 != 11,71,91 + if ops.NmodEqualsAny(10, 1) && !ops.NmodEqualsAny(100, 11, 71, 91) { + return One + } + // n % 10 = 2 and n % 100 != 12,72,92 + if ops.NmodEqualsAny(10, 2) && !ops.NmodEqualsAny(100, 12, 72, 92) { + return Two + } + // n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 + if (ops.NmodInRange(10, 3, 4) || ops.NmodEqualsAny(10, 9)) && !(ops.NmodInRange(100, 10, 19) || ops.NmodInRange(100, 70, 79) || ops.NmodInRange(100, 90, 99)) { + return Few + } + // n != 0 and n % 1000000 = 0 + if !ops.NequalsAny(0) && ops.NmodEqualsAny(1000000, 0) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"ga"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n = 1 + if ops.NequalsAny(1) { + return One + } + // n = 2 + if ops.NequalsAny(2) { + return Two + } + // n = 3..6 + if ops.NinRange(3, 6) { + return Few + } + // n = 7..10 + if ops.NinRange(7, 10) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"gv"}, &PluralSpec{ + Plurals: newPluralSet(One, Two, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // v = 0 and i % 10 = 1 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%10, 1) { + return One + } + // v = 0 and i % 10 = 2 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%10, 2) { + return Two + } + // v = 0 and i % 100 = 0,20,40,60,80 + if intEqualsAny(ops.V, 0) && intEqualsAny(ops.I%100, 0, 20, 40, 60, 80) { + return Few + } + // v != 0 + if !intEqualsAny(ops.V, 0) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"ar"}, &PluralSpec{ + Plurals: newPluralSet(Zero, One, Two, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0 + if ops.NequalsAny(0) { + return Zero + } + // n = 1 + if ops.NequalsAny(1) { + return One + } + // n = 2 + if ops.NequalsAny(2) { + return Two + } + // n % 100 = 3..10 + if ops.NmodInRange(100, 3, 10) { + return Few + } + // n % 100 = 11..99 + if ops.NmodInRange(100, 11, 99) { + return Many + } + return Other + }, + }) + registerPluralSpec([]string{"cy"}, &PluralSpec{ + Plurals: newPluralSet(Zero, One, Two, Few, Many, Other), + PluralFunc: func(ops *operands) Plural { + // n = 0 + if ops.NequalsAny(0) { + return Zero + } + // n = 1 + if ops.NequalsAny(1) { + return One + } + // n = 2 + if ops.NequalsAny(2) { + return Two + } + // n = 3 + if ops.NequalsAny(3) { + return Few + } + // n = 6 + if ops.NequalsAny(6) { + return Many + } + return Other + }, + }) +} diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation.go b/vendor/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation.go similarity index 100% rename from Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation.go rename to vendor/github.com/nicksnyder/go-i18n/i18n/translation/plural_translation.go diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/single_translation.go b/vendor/github.com/nicksnyder/go-i18n/i18n/translation/single_translation.go similarity index 100% rename from Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/single_translation.go rename to vendor/github.com/nicksnyder/go-i18n/i18n/translation/single_translation.go diff --git a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/template.go b/vendor/github.com/nicksnyder/go-i18n/i18n/translation/template.go similarity index 75% rename from Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/template.go rename to vendor/github.com/nicksnyder/go-i18n/i18n/translation/template.go index 1efc207..c8756fa 100644 --- a/Godeps/_workspace/src/github.com/nicksnyder/go-i18n/i18n/translation/template.go +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/translation/template.go @@ -4,7 +4,6 @@ import ( "bytes" "encoding" "strings" - //"launchpad.net/goyaml" gotemplate "text/template" ) @@ -60,21 +59,3 @@ func (t *template) parseTemplate(src string) (err error) { var _ = encoding.TextMarshaler(&template{}) var _ = encoding.TextUnmarshaler(&template{}) - -/* -func (t *template) GetYAML() (tag string, value interface{}) { - return "", t.src -} - -func (t *template) SetYAML(tag string, value interface{}) bool { - panic(tag) - src, ok := value.(string) - if !ok { - return false - } - return t.parseTemplate(src) == nil -} - -var _ = goyaml.Getter(&template{}) -var _ = goyaml.Setter(&template{}) -*/ diff --git a/vendor/github.com/nicksnyder/go-i18n/i18n/translation/translation.go b/vendor/github.com/nicksnyder/go-i18n/i18n/translation/translation.go new file mode 100644 index 0000000..fa93180 --- /dev/null +++ b/vendor/github.com/nicksnyder/go-i18n/i18n/translation/translation.go @@ -0,0 +1,83 @@ +// Package translation defines the interface for a translation. +package translation + +import ( + "fmt" + + "github.com/nicksnyder/go-i18n/i18n/language" +) + +// Translation is the interface that represents a translated string. +type Translation interface { + // MarshalInterface returns the object that should be used + // to serialize the translation. + MarshalInterface() interface{} + ID() string + Template(language.Plural) *template + UntranslatedCopy() Translation + Normalize(language *language.Language) Translation + Backfill(src Translation) Translation + Merge(Translation) Translation + Incomplete(l *language.Language) bool +} + +// SortableByID implements sort.Interface for a slice of translations. +type SortableByID []Translation + +func (a SortableByID) Len() int { return len(a) } +func (a SortableByID) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a SortableByID) Less(i, j int) bool { return a[i].ID() < a[j].ID() } + +// NewTranslation reflects on data to create a new Translation. +// +// data["id"] must be a string and data["translation"] must be either a string +// for a non-plural translation or a map[string]interface{} for a plural translation. +func NewTranslation(data map[string]interface{}) (Translation, error) { + id, ok := data["id"].(string) + if !ok { + return nil, fmt.Errorf(`missing "id" key`) + } + var pluralObject map[string]interface{} + switch translation := data["translation"].(type) { + case string: + tmpl, err := newTemplate(translation) + if err != nil { + return nil, err + } + return &singleTranslation{id, tmpl}, nil + case map[interface{}]interface{}: + // The YAML parser uses interface{} keys so we first convert them to string keys. + pluralObject = make(map[string]interface{}) + for k, v := range translation { + kStr, ok := k.(string) + if !ok { + return nil, fmt.Errorf(`invalid plural category type %T; expected string`, k) + } + pluralObject[kStr] = v + } + case map[string]interface{}: + pluralObject = translation + case nil: + return nil, fmt.Errorf(`missing "translation" key`) + default: + return nil, fmt.Errorf(`unsupported type for "translation" key %T`, translation) + } + + templates := make(map[language.Plural]*template, len(pluralObject)) + for k, v := range pluralObject { + pc, err := language.NewPlural(k) + if err != nil { + return nil, err + } + str, ok := v.(string) + if !ok { + return nil, fmt.Errorf(`plural category "%s" has value of type %T; expected string`, pc, v) + } + tmpl, err := newTemplate(str) + if err != nil { + return nil, err + } + templates[pc] = tmpl + } + return &pluralTranslation{id, templates}, nil +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/.gitignore b/vendor/github.com/onsi/ginkgo/.gitignore similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/.gitignore rename to vendor/github.com/onsi/ginkgo/.gitignore diff --git a/vendor/github.com/onsi/ginkgo/.travis.yml b/vendor/github.com/onsi/ginkgo/.travis.yml new file mode 100644 index 0000000..19ca78b --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/.travis.yml @@ -0,0 +1,14 @@ +language: go +go: + - 1.5 + - 1.6 + - 1.7 + +install: + - go get -v -t ./... + - go get golang.org/x/tools/cmd/cover + - go get github.com/onsi/gomega + - go install github.com/onsi/ginkgo/ginkgo + - export PATH=$PATH:$HOME/gopath/bin + +script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --randomizeSuites --race --trace diff --git a/vendor/github.com/onsi/ginkgo/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/CHANGELOG.md new file mode 100644 index 0000000..5bc46f9 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/CHANGELOG.md @@ -0,0 +1,137 @@ +## HEAD + +Improvements: + +- `Skip(message)` can be used to skip the current test. +- Added `extensions/table` - a Ginkgo DSL for [Table Driven Tests](http://onsi.github.io/ginkgo/#table-driven-tests) +- Add `GinkgoRandomSeed()` - shorthand for `config.GinkgoConfig.RandomSeed` + +Bug Fixes: + +- Ginkgo tests now fail when you `panic(nil)` (#167) + +## 1.2.0 5/31/2015 + +Improvements + +- `ginkgo -coverpkg` calls down to `go test -coverpkg` (#160) +- `ginkgo -afterSuiteHook COMMAND` invokes the passed-in `COMMAND` after a test suite completes (#152) +- Relaxed requirement for Go 1.4+. `ginkgo` now works with Go v1.3+ (#166) + +## 1.2.0-beta + +Ginkgo now requires Go 1.4+ + +Improvements: + +- Call reporters in reverse order when announcing spec completion -- allows custom reporters to emit output before the default reporter does. +- Improved focus behavior. Now, this: + + ```golang + FDescribe("Some describe", func() { + It("A", func() {}) + + FIt("B", func() {}) + }) + ``` + + will run `B` but *not* `A`. This tends to be a common usage pattern when in the thick of writing and debugging tests. +- When `SIGINT` is received, Ginkgo will emit the contents of the `GinkgoWriter` before running the `AfterSuite`. Useful for debugging stuck tests. +- When `--progress` is set, Ginkgo will write test progress (in particular, Ginkgo will say when it is about to run a BeforeEach, AfterEach, It, etc...) to the `GinkgoWriter`. This is useful for debugging stuck tests and tests that generate many logs. +- Improved output when an error occurs in a setup or teardown block. +- When `--dryRun` is set, Ginkgo will walk the spec tree and emit to its reporter *without* actually running anything. Best paired with `-v` to understand which specs will run in which order. +- Add `By` to help document long `It`s. `By` simply writes to the `GinkgoWriter`. +- Add support for precompiled tests: + - `ginkgo build ` will now compile the package, producing a file named `package.test` + - The compiled `package.test` file can be run directly. This runs the tests in series. + - To run precompiled tests in parallel, you can run: `ginkgo -p package.test` +- Support `bootstrap`ping and `generate`ing [Agouti](http://agouti.org) specs. +- `ginkgo generate` and `ginkgo bootstrap` now honor the package name already defined in a given directory +- The `ginkgo` CLI ignores `SIGQUIT`. Prevents its stack dump from interlacing with the underlying test suite's stack dump. +- The `ginkgo` CLI now compiles tests into a temporary directory instead of the package directory. This necessitates upgrading to Go v1.4+. +- `ginkgo -notify` now works on Linux + +Bug Fixes: + +- If --skipPackages is used and all packages are skipped, Ginkgo should exit 0. +- Fix tempfile leak when running in parallel +- Fix incorrect failure message when a panic occurs during a parallel test run +- Fixed an issue where a pending test within a focused context (or a focused test within a pending context) would skip all other tests. +- Be more consistent about handling SIGTERM as well as SIGINT +- When interupted while concurrently compiling test suites in the background, Ginkgo now cleans up the compiled artifacts. +- Fixed a long standing bug where `ginkgo -p` would hang if a process spawned by one of the Ginkgo parallel nodes does not exit. (Hooray!) + +## 1.1.0 (8/2/2014) + +No changes, just dropping the beta. + +## 1.1.0-beta (7/22/2014) +New Features: + +- `ginkgo watch` now monitors packages *and their dependencies* for changes. The depth of the dependency tree can be modified with the `-depth` flag. +- Test suites with a programmatic focus (`FIt`, `FDescribe`, etc...) exit with non-zero status code, even when they pass. This allows CI systems to detect accidental commits of focused test suites. +- `ginkgo -p` runs the testsuite in parallel with an auto-detected number of nodes. +- `ginkgo -tags=TAG_LIST` passes a list of tags down to the `go build` command. +- `ginkgo --failFast` aborts the test suite after the first failure. +- `ginkgo generate file_1 file_2` can take multiple file arguments. +- Ginkgo now summarizes any spec failures that occured at the end of the test run. +- `ginkgo --randomizeSuites` will run tests *suites* in random order using the generated/passed-in seed. + +Improvements: + +- `ginkgo -skipPackage` now takes a comma-separated list of strings. If the *relative path* to a package matches one of the entries in the comma-separated list, that package is skipped. +- `ginkgo --untilItFails` no longer recompiles between attempts. +- Ginkgo now panics when a runnable node (`It`, `BeforeEach`, `JustBeforeEach`, `AfterEach`, `Measure`) is nested within another runnable node. This is always a mistake. Any test suites that panic because of this change should be fixed. + +Bug Fixes: + +- `ginkgo boostrap` and `ginkgo generate` no longer fail when dealing with `hyphen-separated-packages`. +- parallel specs are now better distributed across nodes - fixed a crashing bug where (for example) distributing 11 tests across 7 nodes would panic + +## 1.0.0 (5/24/2014) +New Features: + +- Add `GinkgoParallelNode()` - shorthand for `config.GinkgoConfig.ParallelNode` + +Improvements: + +- When compilation fails, the compilation output is rewritten to present a correct *relative* path. Allows ⌘-clicking in iTerm open the file in your text editor. +- `--untilItFails` and `ginkgo watch` now generate new random seeds between test runs, unless a particular random seed is specified. + +Bug Fixes: + +- `-cover` now generates a correctly combined coverprofile when running with in parallel with multiple `-node`s. +- Print out the contents of the `GinkgoWriter` when `BeforeSuite` or `AfterSuite` fail. +- Fix all remaining race conditions in Ginkgo's test suite. + +## 1.0.0-beta (4/14/2014) +Breaking changes: + +- `thirdparty/gomocktestreporter` is gone. Use `GinkgoT()` instead +- Modified the Reporter interface +- `watch` is now a subcommand, not a flag. + +DSL changes: + +- `BeforeSuite` and `AfterSuite` for setting up and tearing down test suites. +- `AfterSuite` is triggered on interrupt (`^C`) as well as exit. +- `SynchronizedBeforeSuite` and `SynchronizedAfterSuite` for setting up and tearing down singleton resources across parallel nodes. + +CLI changes: + +- `watch` is now a subcommand, not a flag +- `--nodot` flag can be passed to `ginkgo generate` and `ginkgo bootstrap` to avoid dot imports. This explicitly imports all exported identifiers in Ginkgo and Gomega. Refreshing this list can be done by running `ginkgo nodot` +- Additional arguments can be passed to specs. Pass them after the `--` separator +- `--skipPackage` flag takes a regexp and ignores any packages with package names passing said regexp. +- `--trace` flag prints out full stack traces when errors occur, not just the line at which the error occurs. + +Misc: + +- Start using semantic versioning +- Start maintaining changelog + +Major refactor: + +- Pull out Ginkgo's internal to `internal` +- Rename `example` everywhere to `spec` +- Much more! diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/LICENSE b/vendor/github.com/onsi/ginkgo/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/LICENSE rename to vendor/github.com/onsi/ginkgo/LICENSE diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/README.md b/vendor/github.com/onsi/ginkgo/README.md similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/README.md rename to vendor/github.com/onsi/ginkgo/README.md diff --git a/vendor/github.com/onsi/ginkgo/config/config.go b/vendor/github.com/onsi/ginkgo/config/config.go new file mode 100644 index 0000000..4b5485b --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/config/config.go @@ -0,0 +1,187 @@ +/* +Ginkgo accepts a number of configuration options. + +These are documented [here](http://onsi.github.io/ginkgo/#the_ginkgo_cli) + +You can also learn more via + + ginkgo help + +or (I kid you not): + + go test -asdf +*/ +package config + +import ( + "flag" + "time" + + "fmt" +) + +const VERSION = "1.2.0" + +type GinkgoConfigType struct { + RandomSeed int64 + RandomizeAllSpecs bool + RegexScansFilePath bool + FocusString string + SkipString string + SkipMeasurements bool + FailOnPending bool + FailFast bool + FlakeAttempts int + EmitSpecProgress bool + DryRun bool + + ParallelNode int + ParallelTotal int + SyncHost string + StreamHost string +} + +var GinkgoConfig = GinkgoConfigType{} + +type DefaultReporterConfigType struct { + NoColor bool + SlowSpecThreshold float64 + NoisyPendings bool + Succinct bool + Verbose bool + FullTrace bool +} + +var DefaultReporterConfig = DefaultReporterConfigType{} + +func processPrefix(prefix string) string { + if prefix != "" { + prefix = prefix + "." + } + return prefix +} + +func Flags(flagSet *flag.FlagSet, prefix string, includeParallelFlags bool) { + prefix = processPrefix(prefix) + flagSet.Int64Var(&(GinkgoConfig.RandomSeed), prefix+"seed", time.Now().Unix(), "The seed used to randomize the spec suite.") + flagSet.BoolVar(&(GinkgoConfig.RandomizeAllSpecs), prefix+"randomizeAllSpecs", false, "If set, ginkgo will randomize all specs together. By default, ginkgo only randomizes the top level Describe/Context groups.") + flagSet.BoolVar(&(GinkgoConfig.SkipMeasurements), prefix+"skipMeasurements", false, "If set, ginkgo will skip any measurement specs.") + flagSet.BoolVar(&(GinkgoConfig.FailOnPending), prefix+"failOnPending", false, "If set, ginkgo will mark the test suite as failed if any specs are pending.") + flagSet.BoolVar(&(GinkgoConfig.FailFast), prefix+"failFast", false, "If set, ginkgo will stop running a test suite after a failure occurs.") + + flagSet.BoolVar(&(GinkgoConfig.DryRun), prefix+"dryRun", false, "If set, ginkgo will walk the test hierarchy without actually running anything. Best paired with -v.") + + flagSet.StringVar(&(GinkgoConfig.FocusString), prefix+"focus", "", "If set, ginkgo will only run specs that match this regular expression.") + flagSet.StringVar(&(GinkgoConfig.SkipString), prefix+"skip", "", "If set, ginkgo will only run specs that do not match this regular expression.") + + flagSet.BoolVar(&(GinkgoConfig.RegexScansFilePath), prefix+"regexScansFilePath", false, "If set, ginkgo regex matching also will look at the file path (code location).") + + flagSet.IntVar(&(GinkgoConfig.FlakeAttempts), prefix+"flakeAttempts", 1, "Make up to this many attempts to run each spec. Please note that if any of the attempts succeed, the suite will not be failed. But any failures will still be recorded.") + + flagSet.BoolVar(&(GinkgoConfig.EmitSpecProgress), prefix+"progress", false, "If set, ginkgo will emit progress information as each spec runs to the GinkgoWriter.") + + if includeParallelFlags { + flagSet.IntVar(&(GinkgoConfig.ParallelNode), prefix+"parallel.node", 1, "This worker node's (one-indexed) node number. For running specs in parallel.") + flagSet.IntVar(&(GinkgoConfig.ParallelTotal), prefix+"parallel.total", 1, "The total number of worker nodes. For running specs in parallel.") + flagSet.StringVar(&(GinkgoConfig.SyncHost), prefix+"parallel.synchost", "", "The address for the server that will synchronize the running nodes.") + flagSet.StringVar(&(GinkgoConfig.StreamHost), prefix+"parallel.streamhost", "", "The address for the server that the running nodes should stream data to.") + } + + flagSet.BoolVar(&(DefaultReporterConfig.NoColor), prefix+"noColor", false, "If set, suppress color output in default reporter.") + flagSet.Float64Var(&(DefaultReporterConfig.SlowSpecThreshold), prefix+"slowSpecThreshold", 5.0, "(in seconds) Specs that take longer to run than this threshold are flagged as slow by the default reporter.") + flagSet.BoolVar(&(DefaultReporterConfig.NoisyPendings), prefix+"noisyPendings", true, "If set, default reporter will shout about pending tests.") + flagSet.BoolVar(&(DefaultReporterConfig.Verbose), prefix+"v", false, "If set, default reporter print out all specs as they begin.") + flagSet.BoolVar(&(DefaultReporterConfig.Succinct), prefix+"succinct", false, "If set, default reporter prints out a very succinct report") + flagSet.BoolVar(&(DefaultReporterConfig.FullTrace), prefix+"trace", false, "If set, default reporter prints out the full stack trace when a failure occurs") +} + +func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultReporterConfigType) []string { + prefix = processPrefix(prefix) + result := make([]string, 0) + + if ginkgo.RandomSeed > 0 { + result = append(result, fmt.Sprintf("--%sseed=%d", prefix, ginkgo.RandomSeed)) + } + + if ginkgo.RandomizeAllSpecs { + result = append(result, fmt.Sprintf("--%srandomizeAllSpecs", prefix)) + } + + if ginkgo.SkipMeasurements { + result = append(result, fmt.Sprintf("--%sskipMeasurements", prefix)) + } + + if ginkgo.FailOnPending { + result = append(result, fmt.Sprintf("--%sfailOnPending", prefix)) + } + + if ginkgo.FailFast { + result = append(result, fmt.Sprintf("--%sfailFast", prefix)) + } + + if ginkgo.DryRun { + result = append(result, fmt.Sprintf("--%sdryRun", prefix)) + } + + if ginkgo.FocusString != "" { + result = append(result, fmt.Sprintf("--%sfocus=%s", prefix, ginkgo.FocusString)) + } + + if ginkgo.SkipString != "" { + result = append(result, fmt.Sprintf("--%sskip=%s", prefix, ginkgo.SkipString)) + } + + if ginkgo.FlakeAttempts > 1 { + result = append(result, fmt.Sprintf("--%sflakeAttempts=%d", prefix, ginkgo.FlakeAttempts)) + } + + if ginkgo.EmitSpecProgress { + result = append(result, fmt.Sprintf("--%sprogress", prefix)) + } + + if ginkgo.ParallelNode != 0 { + result = append(result, fmt.Sprintf("--%sparallel.node=%d", prefix, ginkgo.ParallelNode)) + } + + if ginkgo.ParallelTotal != 0 { + result = append(result, fmt.Sprintf("--%sparallel.total=%d", prefix, ginkgo.ParallelTotal)) + } + + if ginkgo.StreamHost != "" { + result = append(result, fmt.Sprintf("--%sparallel.streamhost=%s", prefix, ginkgo.StreamHost)) + } + + if ginkgo.SyncHost != "" { + result = append(result, fmt.Sprintf("--%sparallel.synchost=%s", prefix, ginkgo.SyncHost)) + } + + if ginkgo.RegexScansFilePath { + result = append(result, fmt.Sprintf("--%sregexScansFilePath", prefix)) + } + + if reporter.NoColor { + result = append(result, fmt.Sprintf("--%snoColor", prefix)) + } + + if reporter.SlowSpecThreshold > 0 { + result = append(result, fmt.Sprintf("--%sslowSpecThreshold=%.5f", prefix, reporter.SlowSpecThreshold)) + } + + if !reporter.NoisyPendings { + result = append(result, fmt.Sprintf("--%snoisyPendings=false", prefix)) + } + + if reporter.Verbose { + result = append(result, fmt.Sprintf("--%sv", prefix)) + } + + if reporter.Succinct { + result = append(result, fmt.Sprintf("--%ssuccinct", prefix)) + } + + if reporter.FullTrace { + result = append(result, fmt.Sprintf("--%strace", prefix)) + } + + return result +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo_dsl.go b/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go similarity index 93% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo_dsl.go rename to vendor/github.com/onsi/ginkgo/ginkgo_dsl.go index 36f6d8e..8fe0b70 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/ginkgo_dsl.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go @@ -68,6 +68,14 @@ type GinkgoTestingT interface { Fail() } +//GinkgoRandomSeed returns the seed used to randomize spec execution order. It is +//useful for seeding your own pseudorandom number generators (PRNGs) to ensure +//consistent executions from run to run, where your tests contain variability (for +//example, when selecting random test data). +func GinkgoRandomSeed() int64 { + return config.GinkgoConfig.RandomSeed +} + //GinkgoParallelNode returns the parallel node number for the current ginkgo process //The node number is 1-indexed func GinkgoParallelNode() int { @@ -168,6 +176,8 @@ func CurrentGinkgoTestDescription() GinkgoTestDescription { // //You use the Time() function to time how long the passed in body function takes to run //You use the RecordValue() function to track arbitrary numerical measurements. +//The RecordValueWithPrecision() function can be used alternatively to provide the unit +//and resolution of the numeric measurement. //The optional info argument is passed to the test reporter and can be used to // provide the measurement data to a custom reporter with context. // @@ -175,6 +185,7 @@ func CurrentGinkgoTestDescription() GinkgoTestDescription { type Benchmarker interface { Time(name string, body func(), info ...interface{}) (elapsedTime time.Duration) RecordValue(name string, value float64, info ...interface{}) + RecordValueWithPrecision(name string, value float64, units string, precision int, info ...interface{}) } //RunSpecs is the entry point for the Ginkgo test runner. @@ -215,7 +226,7 @@ func RunSpecsWithCustomReporters(t GinkgoTestingT, description string, specRepor func buildDefaultReporter() Reporter { remoteReportingServer := config.GinkgoConfig.StreamHost if remoteReportingServer == "" { - stenographer := stenographer.New(!config.DefaultReporterConfig.NoColor) + stenographer := stenographer.New(!config.DefaultReporterConfig.NoColor, config.GinkgoConfig.FlakeAttempts > 1) return reporters.NewDefaultReporter(config.DefaultReporterConfig, stenographer) } else { return remote.NewForwardingReporter(remoteReportingServer, &http.Client{}, remote.NewOutputInterceptor()) @@ -347,6 +358,28 @@ func XIt(text string, _ ...interface{}) bool { return true } +//Specify blocks are aliases for It blocks and allow for more natural wording in situations +//which "It" does not fit into a natural sentence flow. All the same protocols apply for Specify blocks +//which apply to It blocks. +func Specify(text string, body interface{}, timeout ...float64) bool { + return It(text, body, timeout...) +} + +//You can focus individual Specifys using FSpecify +func FSpecify(text string, body interface{}, timeout ...float64) bool { + return FIt(text, body, timeout...) +} + +//You can mark Specifys as pending using PSpecify +func PSpecify(text string, is ...interface{}) bool { + return PIt(text, is...) +} + +//You can mark Specifys as pending using XSpecify +func XSpecify(text string, is ...interface{}) bool { + return XIt(text, is...) +} + //By allows you to better document large Its. // //Generally you should try to keep your Its short and to the point. This is not always possible, however, diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location.go b/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/codelocation/code_location.go rename to vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node.go b/vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/containernode/container_node.go rename to vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer.go b/vendor/github.com/onsi/ginkgo/internal/failer/failer.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/failer/failer.go rename to vendor/github.com/onsi/ginkgo/internal/failer/failer.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go similarity index 82% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go index bc0dd1a..9c3eed2 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go +++ b/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go @@ -28,20 +28,27 @@ func (b *benchmarker) Time(name string, body func(), info ...interface{}) (elaps b.mu.Lock() defer b.mu.Unlock() - measurement := b.getMeasurement(name, "Fastest Time", "Slowest Time", "Average Time", "s", info...) + measurement := b.getMeasurement(name, "Fastest Time", "Slowest Time", "Average Time", "s", 3, info...) measurement.Results = append(measurement.Results, elapsedTime.Seconds()) return } func (b *benchmarker) RecordValue(name string, value float64, info ...interface{}) { - measurement := b.getMeasurement(name, "Smallest", " Largest", " Average", "", info...) + measurement := b.getMeasurement(name, "Smallest", " Largest", " Average", "", 3, info...) b.mu.Lock() defer b.mu.Unlock() measurement.Results = append(measurement.Results, value) } -func (b *benchmarker) getMeasurement(name string, smallestLabel string, largestLabel string, averageLabel string, units string, info ...interface{}) *types.SpecMeasurement { +func (b *benchmarker) RecordValueWithPrecision(name string, value float64, units string, precision int, info ...interface{}) { + measurement := b.getMeasurement(name, "Smallest", " Largest", " Average", units, precision, info...) + b.mu.Lock() + defer b.mu.Unlock() + measurement.Results = append(measurement.Results, value) +} + +func (b *benchmarker) getMeasurement(name string, smallestLabel string, largestLabel string, averageLabel string, units string, precision int, info ...interface{}) *types.SpecMeasurement { measurement, ok := b.measurements[name] if !ok { var computedInfo interface{} @@ -57,6 +64,7 @@ func (b *benchmarker) getMeasurement(name string, smallestLabel string, largestL LargestLabel: largestLabel, AverageLabel: averageLabel, Units: units, + Precision: precision, Results: make([]float64, 0), } b.measurements[name] = measurement diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/it_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/it_node.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go new file mode 100644 index 0000000..870ad82 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go @@ -0,0 +1,113 @@ +package leafnodes + +import ( + "fmt" + "github.com/onsi/ginkgo/internal/codelocation" + "github.com/onsi/ginkgo/internal/failer" + "github.com/onsi/ginkgo/types" + "reflect" + "time" +) + +type runner struct { + isAsync bool + asyncFunc func(chan<- interface{}) + syncFunc func() + codeLocation types.CodeLocation + timeoutThreshold time.Duration + nodeType types.SpecComponentType + componentIndex int + failer *failer.Failer +} + +func newRunner(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, nodeType types.SpecComponentType, componentIndex int) *runner { + bodyType := reflect.TypeOf(body) + if bodyType.Kind() != reflect.Func { + panic(fmt.Sprintf("Expected a function but got something else at %v", codeLocation)) + } + + runner := &runner{ + codeLocation: codeLocation, + timeoutThreshold: timeout, + failer: failer, + nodeType: nodeType, + componentIndex: componentIndex, + } + + switch bodyType.NumIn() { + case 0: + runner.syncFunc = body.(func()) + return runner + case 1: + if !(bodyType.In(0).Kind() == reflect.Chan && bodyType.In(0).Elem().Kind() == reflect.Interface) { + panic(fmt.Sprintf("Must pass a Done channel to function at %v", codeLocation)) + } + + wrappedBody := func(done chan<- interface{}) { + bodyValue := reflect.ValueOf(body) + bodyValue.Call([]reflect.Value{reflect.ValueOf(done)}) + } + + runner.isAsync = true + runner.asyncFunc = wrappedBody + return runner + } + + panic(fmt.Sprintf("Too many arguments to function at %v", codeLocation)) +} + +func (r *runner) run() (outcome types.SpecState, failure types.SpecFailure) { + if r.isAsync { + return r.runAsync() + } else { + return r.runSync() + } +} + +func (r *runner) runAsync() (outcome types.SpecState, failure types.SpecFailure) { + done := make(chan interface{}, 1) + + go func() { + finished := false + + defer func() { + if e := recover(); e != nil || !finished { + r.failer.Panic(codelocation.New(2), e) + select { + case <-done: + break + default: + close(done) + } + } + }() + + r.asyncFunc(done) + finished = true + }() + + select { + case <-done: + case <-time.After(r.timeoutThreshold): + r.failer.Timeout(r.codeLocation) + } + + failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation) + return +} +func (r *runner) runSync() (outcome types.SpecState, failure types.SpecFailure) { + finished := false + + defer func() { + if e := recover(); e != nil || !finished { + r.failer.Panic(codelocation.New(2), e) + } + + failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation) + }() + + r.syncFunc() + finished = true + + return +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go rename to vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/aggregator.go b/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go similarity index 99% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/aggregator.go rename to vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go index 1e34dbf..0655a62 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/aggregator.go +++ b/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go @@ -239,6 +239,7 @@ func (aggregator *Aggregator) registerSuiteEnding(suite *types.SuiteSummary) (fi aggregatedSuiteSummary.NumberOfFailedSpecs += suiteSummary.NumberOfFailedSpecs aggregatedSuiteSummary.NumberOfPendingSpecs += suiteSummary.NumberOfPendingSpecs aggregatedSuiteSummary.NumberOfSkippedSpecs += suiteSummary.NumberOfSkippedSpecs + aggregatedSuiteSummary.NumberOfFlakedSpecs += suiteSummary.NumberOfFlakedSpecs } aggregatedSuiteSummary.RunTime = time.Since(aggregator.startTime) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go b/vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go rename to vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor.go b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor.go rename to vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go new file mode 100644 index 0000000..980065d --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go @@ -0,0 +1,55 @@ +// +build freebsd openbsd netbsd dragonfly darwin linux solaris + +package remote + +import ( + "errors" + "io/ioutil" + "os" +) + +func NewOutputInterceptor() OutputInterceptor { + return &outputInterceptor{} +} + +type outputInterceptor struct { + redirectFile *os.File + intercepting bool +} + +func (interceptor *outputInterceptor) StartInterceptingOutput() error { + if interceptor.intercepting { + return errors.New("Already intercepting output!") + } + interceptor.intercepting = true + + var err error + + interceptor.redirectFile, err = ioutil.TempFile("", "ginkgo-output") + if err != nil { + return err + } + + // Call a function in ./syscall_dup_*.go + // If building for everything other than linux_arm64, + // use a "normal" syscall.Dup2(oldfd, newfd) call. If building for linux_arm64 (which doesn't have syscall.Dup2) + // call syscall.Dup3(oldfd, newfd, 0). They are nearly identical, see: http://linux.die.net/man/2/dup3 + syscallDup(int(interceptor.redirectFile.Fd()), 1) + syscallDup(int(interceptor.redirectFile.Fd()), 2) + + return nil +} + +func (interceptor *outputInterceptor) StopInterceptingAndReturnOutput() (string, error) { + if !interceptor.intercepting { + return "", errors.New("Not intercepting output!") + } + + interceptor.redirectFile.Close() + output, err := ioutil.ReadFile(interceptor.redirectFile.Name()) + os.Remove(interceptor.redirectFile.Name()) + + interceptor.intercepting = false + + return string(output), err +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go rename to vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/server.go b/vendor/github.com/onsi/ginkgo/internal/remote/server.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/remote/server.go rename to vendor/github.com/onsi/ginkgo/internal/remote/server.go diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go new file mode 100644 index 0000000..9550d37 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go @@ -0,0 +1,11 @@ +// +build linux,arm64 + +package remote + +import "syscall" + +// linux_arm64 doesn't have syscall.Dup2 which ginkgo uses, so +// use the nearly identical syscall.Dup3 instead +func syscallDup(oldfd int, newfd int) (err error) { + return syscall.Dup3(oldfd, newfd, 0) +} diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go new file mode 100644 index 0000000..75ef7fb --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go @@ -0,0 +1,9 @@ +// +build solaris + +package remote + +import "golang.org/x/sys/unix" + +func syscallDup(oldfd int, newfd int) (err error) { + return unix.Dup2(oldfd, newfd) +} diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go new file mode 100644 index 0000000..ef62559 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go @@ -0,0 +1,11 @@ +// +build !linux !arm64 +// +build !windows +// +build !solaris + +package remote + +import "syscall" + +func syscallDup(oldfd int, newfd int) (err error) { + return syscall.Dup2(oldfd, newfd) +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/index_computer.go b/vendor/github.com/onsi/ginkgo/internal/spec/index_computer.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/index_computer.go rename to vendor/github.com/onsi/ginkgo/internal/spec/index_computer.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec.go b/vendor/github.com/onsi/ginkgo/internal/spec/spec.go similarity index 94% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec.go rename to vendor/github.com/onsi/ginkgo/internal/spec/spec.go index ef788b7..d32dec6 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/spec.go +++ b/vendor/github.com/onsi/ginkgo/internal/spec/spec.go @@ -17,9 +17,10 @@ type Spec struct { containers []*containernode.ContainerNode - state types.SpecState - runTime time.Duration - failure types.SpecFailure + state types.SpecState + runTime time.Duration + failure types.SpecFailure + previousFailures bool } func New(subject leafnodes.SubjectNode, containers []*containernode.ContainerNode, announceProgress bool) *Spec { @@ -58,6 +59,10 @@ func (spec *Spec) Passed() bool { return spec.state == types.SpecStatePassed } +func (spec *Spec) Flaked() bool { + return spec.state == types.SpecStatePassed && spec.previousFailures +} + func (spec *Spec) Pending() bool { return spec.state == types.SpecStatePending } @@ -109,6 +114,10 @@ func (spec *Spec) ConcatenatedString() string { } func (spec *Spec) Run(writer io.Writer) { + if spec.state == types.SpecStateFailed { + spec.previousFailures = true + } + startTime := time.Now() defer func() { spec.runTime = time.Since(startTime) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/specs.go b/vendor/github.com/onsi/ginkgo/internal/spec/specs.go similarity index 76% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/specs.go rename to vendor/github.com/onsi/ginkgo/internal/spec/specs.go index 9c671e3..6f4fbd3 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/spec/specs.go +++ b/vendor/github.com/onsi/ginkgo/internal/spec/specs.go @@ -10,6 +10,7 @@ type Specs struct { specs []*Spec numberOfOriginalSpecs int hasProgrammaticFocus bool + RegexScansFilePath bool } func NewSpecs(specs []*Spec) *Specs { @@ -45,7 +46,7 @@ func (e *Specs) ApplyFocus(description string, focusString string, skipString st if focusString == "" && skipString == "" { e.applyProgrammaticFocus() } else { - e.applyRegExpFocus(description, focusString, skipString) + e.applyRegExpFocusAndSkip(description, focusString, skipString) } } @@ -67,12 +68,27 @@ func (e *Specs) applyProgrammaticFocus() { } } -func (e *Specs) applyRegExpFocus(description string, focusString string, skipString string) { +// toMatch returns a byte[] to be used by regex matchers. When adding new behaviours to the matching function, +// this is the place which we append to. +func (e *Specs) toMatch(description string, spec *Spec) []byte { + if e.RegexScansFilePath { + return []byte( + description + " " + + spec.ConcatenatedString() + " " + + spec.subject.CodeLocation().FileName) + } else { + return []byte( + description + " " + + spec.ConcatenatedString()) + } +} + +func (e *Specs) applyRegExpFocusAndSkip(description string, focusString string, skipString string) { for _, spec := range e.specs { matchesFocus := true matchesSkip := false - toMatch := []byte(description + " " + spec.ConcatenatedString()) + toMatch := e.toMatch(description, spec) if focusString != "" { focusFilter := regexp.MustCompile(focusString) diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/random_id.go b/vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/random_id.go rename to vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go b/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go similarity index 89% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go rename to vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go index 7ca7740..eeb3169 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go +++ b/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go @@ -137,21 +137,20 @@ func (runner *SpecRunner) runSpecs() bool { if skipRemainingSpecs { spec.Skip() } - runner.reportSpecWillRun(spec.Summary(runner.suiteID)) if !spec.Skipped() && !spec.Pending() { - runner.runningSpec = spec - spec.Run(runner.writer) - runner.runningSpec = nil - if spec.Failed() { + if passed := runner.runSpec(spec); !passed { suiteFailed = true } } else if spec.Pending() && runner.config.FailOnPending { + runner.reportSpecWillRun(spec.Summary(runner.suiteID)) suiteFailed = true + runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed()) + } else { + runner.reportSpecWillRun(spec.Summary(runner.suiteID)) + runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed()) } - runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed()) - if spec.Failed() && runner.config.FailFast { skipRemainingSpecs = true } @@ -160,6 +159,26 @@ func (runner *SpecRunner) runSpecs() bool { return !suiteFailed } +func (runner *SpecRunner) runSpec(spec *spec.Spec) (passed bool) { + maxAttempts := 1 + if runner.config.FlakeAttempts > 0 { + // uninitialized configs count as 1 + maxAttempts = runner.config.FlakeAttempts + } + + for i := 0; i < maxAttempts; i++ { + runner.reportSpecWillRun(spec.Summary(runner.suiteID)) + runner.runningSpec = spec + spec.Run(runner.writer) + runner.runningSpec = nil + runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed()) + if !spec.Failed() { + return true + } + } + return false +} + func (runner *SpecRunner) CurrentSpecSummary() (*types.SpecSummary, bool) { if runner.runningSpec == nil { return nil, false @@ -252,6 +271,9 @@ func (runner *SpecRunner) reportSpecWillRun(summary *types.SpecSummary) { } func (runner *SpecRunner) reportSpecDidComplete(summary *types.SpecSummary, failed bool) { + if failed && len(summary.CapturedOutput) == 0 { + summary.CapturedOutput = string(runner.writer.Bytes()) + } for i := len(runner.reporters) - 1; i >= 1; i-- { runner.reporters[i].SpecDidComplete(summary) } @@ -300,6 +322,10 @@ func (runner *SpecRunner) summary(success bool) *types.SuiteSummary { return ex.Passed() }) + numberOfFlakedSpecs := runner.countSpecsSatisfying(func(ex *spec.Spec) bool { + return ex.Flaked() + }) + numberOfFailedSpecs := runner.countSpecsSatisfying(func(ex *spec.Spec) bool { return ex.Failed() }) @@ -320,5 +346,6 @@ func (runner *SpecRunner) summary(success bool) *types.SuiteSummary { NumberOfSkippedSpecs: numberOfSkippedSpecs, NumberOfPassedSpecs: numberOfPassedSpecs, NumberOfFailedSpecs: numberOfFailedSpecs, + NumberOfFlakedSpecs: numberOfFlakedSpecs, } } diff --git a/vendor/github.com/onsi/ginkgo/internal/suite/suite.go b/vendor/github.com/onsi/ginkgo/internal/suite/suite.go new file mode 100644 index 0000000..949bd34 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/suite/suite.go @@ -0,0 +1,171 @@ +package suite + +import ( + "math/rand" + "time" + + "github.com/onsi/ginkgo/config" + "github.com/onsi/ginkgo/internal/containernode" + "github.com/onsi/ginkgo/internal/failer" + "github.com/onsi/ginkgo/internal/leafnodes" + "github.com/onsi/ginkgo/internal/spec" + "github.com/onsi/ginkgo/internal/specrunner" + "github.com/onsi/ginkgo/internal/writer" + "github.com/onsi/ginkgo/reporters" + "github.com/onsi/ginkgo/types" +) + +type ginkgoTestingT interface { + Fail() +} + +type Suite struct { + topLevelContainer *containernode.ContainerNode + currentContainer *containernode.ContainerNode + containerIndex int + beforeSuiteNode leafnodes.SuiteNode + afterSuiteNode leafnodes.SuiteNode + runner *specrunner.SpecRunner + failer *failer.Failer + running bool +} + +func New(failer *failer.Failer) *Suite { + topLevelContainer := containernode.New("[Top Level]", types.FlagTypeNone, types.CodeLocation{}) + + return &Suite{ + topLevelContainer: topLevelContainer, + currentContainer: topLevelContainer, + failer: failer, + containerIndex: 1, + } +} + +func (suite *Suite) Run(t ginkgoTestingT, description string, reporters []reporters.Reporter, writer writer.WriterInterface, config config.GinkgoConfigType) (bool, bool) { + if config.ParallelTotal < 1 { + panic("ginkgo.parallel.total must be >= 1") + } + + if config.ParallelNode > config.ParallelTotal || config.ParallelNode < 1 { + panic("ginkgo.parallel.node is one-indexed and must be <= ginkgo.parallel.total") + } + + r := rand.New(rand.NewSource(config.RandomSeed)) + suite.topLevelContainer.Shuffle(r) + specs := suite.generateSpecs(description, config) + suite.runner = specrunner.New(description, suite.beforeSuiteNode, specs, suite.afterSuiteNode, reporters, writer, config) + + suite.running = true + success := suite.runner.Run() + if !success { + t.Fail() + } + return success, specs.HasProgrammaticFocus() +} + +func (suite *Suite) generateSpecs(description string, config config.GinkgoConfigType) *spec.Specs { + specsSlice := []*spec.Spec{} + suite.topLevelContainer.BackPropagateProgrammaticFocus() + for _, collatedNodes := range suite.topLevelContainer.Collate() { + specsSlice = append(specsSlice, spec.New(collatedNodes.Subject, collatedNodes.Containers, config.EmitSpecProgress)) + } + + specs := spec.NewSpecs(specsSlice) + specs.RegexScansFilePath = config.RegexScansFilePath + + if config.RandomizeAllSpecs { + specs.Shuffle(rand.New(rand.NewSource(config.RandomSeed))) + } + + specs.ApplyFocus(description, config.FocusString, config.SkipString) + + if config.SkipMeasurements { + specs.SkipMeasurements() + } + + if config.ParallelTotal > 1 { + specs.TrimForParallelization(config.ParallelTotal, config.ParallelNode) + } + return specs +} + +func (suite *Suite) CurrentRunningSpecSummary() (*types.SpecSummary, bool) { + return suite.runner.CurrentSpecSummary() +} + +func (suite *Suite) SetBeforeSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.beforeSuiteNode != nil { + panic("You may only call BeforeSuite once!") + } + suite.beforeSuiteNode = leafnodes.NewBeforeSuiteNode(body, codeLocation, timeout, suite.failer) +} + +func (suite *Suite) SetAfterSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.afterSuiteNode != nil { + panic("You may only call AfterSuite once!") + } + suite.afterSuiteNode = leafnodes.NewAfterSuiteNode(body, codeLocation, timeout, suite.failer) +} + +func (suite *Suite) SetSynchronizedBeforeSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.beforeSuiteNode != nil { + panic("You may only call BeforeSuite once!") + } + suite.beforeSuiteNode = leafnodes.NewSynchronizedBeforeSuiteNode(bodyA, bodyB, codeLocation, timeout, suite.failer) +} + +func (suite *Suite) SetSynchronizedAfterSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.afterSuiteNode != nil { + panic("You may only call AfterSuite once!") + } + suite.afterSuiteNode = leafnodes.NewSynchronizedAfterSuiteNode(bodyA, bodyB, codeLocation, timeout, suite.failer) +} + +func (suite *Suite) PushContainerNode(text string, body func(), flag types.FlagType, codeLocation types.CodeLocation) { + container := containernode.New(text, flag, codeLocation) + suite.currentContainer.PushContainerNode(container) + + previousContainer := suite.currentContainer + suite.currentContainer = container + suite.containerIndex++ + + body() + + suite.containerIndex-- + suite.currentContainer = previousContainer +} + +func (suite *Suite) PushItNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.running { + suite.failer.Fail("You may only call It from within a Describe or Context", codeLocation) + } + suite.currentContainer.PushSubjectNode(leafnodes.NewItNode(text, body, flag, codeLocation, timeout, suite.failer, suite.containerIndex)) +} + +func (suite *Suite) PushMeasureNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, samples int) { + if suite.running { + suite.failer.Fail("You may only call Measure from within a Describe or Context", codeLocation) + } + suite.currentContainer.PushSubjectNode(leafnodes.NewMeasureNode(text, body, flag, codeLocation, samples, suite.failer, suite.containerIndex)) +} + +func (suite *Suite) PushBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.running { + suite.failer.Fail("You may only call BeforeEach from within a Describe or Context", codeLocation) + } + suite.currentContainer.PushSetupNode(leafnodes.NewBeforeEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) +} + +func (suite *Suite) PushJustBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.running { + suite.failer.Fail("You may only call JustBeforeEach from within a Describe or Context", codeLocation) + } + suite.currentContainer.PushSetupNode(leafnodes.NewJustBeforeEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) +} + +func (suite *Suite) PushAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) { + if suite.running { + suite.failer.Fail("You may only call AfterEach from within a Describe or Context", codeLocation) + } + suite.currentContainer.PushSetupNode(leafnodes.NewAfterEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex)) +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go b/vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go similarity index 95% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go rename to vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go index a2b9af8..090445d 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go +++ b/vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go @@ -50,7 +50,7 @@ func (t *ginkgoTestingTProxy) Log(args ...interface{}) { } func (t *ginkgoTestingTProxy) Logf(format string, args ...interface{}) { - fmt.Fprintf(t.writer, format, args...) + t.Log(fmt.Sprintf(format, args...)) } func (t *ginkgoTestingTProxy) Failed() bool { @@ -65,7 +65,7 @@ func (t *ginkgoTestingTProxy) Skip(args ...interface{}) { } func (t *ginkgoTestingTProxy) Skipf(format string, args ...interface{}) { - fmt.Printf(format, args...) + t.Skip(fmt.Sprintf(format, args...)) } func (t *ginkgoTestingTProxy) SkipNow() { diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/fake_writer.go b/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go similarity index 85% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/fake_writer.go rename to vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go index ac6540f..6739c3f 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/internal/writer/fake_writer.go +++ b/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go @@ -26,6 +26,11 @@ func (writer *FakeGinkgoWriter) DumpOutWithHeader(header string) { writer.EventStream = append(writer.EventStream, "DUMP_WITH_HEADER: "+header) } +func (writer *FakeGinkgoWriter) Bytes() []byte { + writer.EventStream = append(writer.EventStream, "BYTES") + return nil +} + func (writer *FakeGinkgoWriter) Write(data []byte) (n int, err error) { return 0, nil } diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/writer.go b/vendor/github.com/onsi/ginkgo/internal/writer/writer.go new file mode 100644 index 0000000..6b23b1a --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/writer/writer.go @@ -0,0 +1,81 @@ +package writer + +import ( + "bytes" + "io" + "sync" +) + +type WriterInterface interface { + io.Writer + + Truncate() + DumpOut() + DumpOutWithHeader(header string) + Bytes() []byte +} + +type Writer struct { + buffer *bytes.Buffer + outWriter io.Writer + lock *sync.Mutex + stream bool +} + +func New(outWriter io.Writer) *Writer { + return &Writer{ + buffer: &bytes.Buffer{}, + lock: &sync.Mutex{}, + outWriter: outWriter, + stream: true, + } +} + +func (w *Writer) SetStream(stream bool) { + w.lock.Lock() + defer w.lock.Unlock() + w.stream = stream +} + +func (w *Writer) Write(b []byte) (n int, err error) { + w.lock.Lock() + defer w.lock.Unlock() + + n, err = w.buffer.Write(b) + if w.stream { + return w.outWriter.Write(b) + } + return n, err +} + +func (w *Writer) Truncate() { + w.lock.Lock() + defer w.lock.Unlock() + w.buffer.Reset() +} + +func (w *Writer) DumpOut() { + w.lock.Lock() + defer w.lock.Unlock() + if !w.stream { + w.buffer.WriteTo(w.outWriter) + } +} + +func (w *Writer) Bytes() []byte { + w.lock.Lock() + defer w.lock.Unlock() + b := w.buffer.Bytes() + copied := make([]byte, len(b)) + copy(copied, b) + return copied +} + +func (w *Writer) DumpOutWithHeader(header string) { + w.lock.Lock() + defer w.lock.Unlock() + if !w.stream && w.buffer.Len() > 0 { + w.outWriter.Write([]byte(header)) + w.buffer.WriteTo(w.outWriter) + } +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/default_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/default_reporter.go rename to vendor/github.com/onsi/ginkgo/reporters/default_reporter.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/fake_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/fake_reporter.go rename to vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/junit_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go similarity index 90% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/junit_reporter.go rename to vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go index 278a88e..75f3f91 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/junit_reporter.go +++ b/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go @@ -31,6 +31,7 @@ type JUnitTestCase struct { FailureMessage *JUnitFailureMessage `xml:"failure,omitempty"` Skipped *JUnitSkipped `xml:"skipped,omitempty"` Time float64 `xml:"time,attr"` + SystemOut string `xml:"system-out,omitempty"` } type JUnitFailureMessage struct { @@ -74,6 +75,10 @@ func (reporter *JUnitReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary reporter.handleSetupSummary("AfterSuite", setupSummary) } +func failureMessage(failure types.SpecFailure) string { + return fmt.Sprintf("%s\n%s\n%s", failure.ComponentCodeLocation.String(), failure.Message, failure.Location.String()) +} + func (reporter *JUnitReporter) handleSetupSummary(name string, setupSummary *types.SetupSummary) { if setupSummary.State != types.SpecStatePassed { testCase := JUnitTestCase{ @@ -83,8 +88,9 @@ func (reporter *JUnitReporter) handleSetupSummary(name string, setupSummary *typ testCase.FailureMessage = &JUnitFailureMessage{ Type: reporter.failureTypeForState(setupSummary.State), - Message: fmt.Sprintf("%s\n%s", setupSummary.Failure.ComponentCodeLocation.String(), setupSummary.Failure.Message), + Message: failureMessage(setupSummary.Failure), } + testCase.SystemOut = setupSummary.CapturedOutput testCase.Time = setupSummary.RunTime.Seconds() reporter.suite.TestCases = append(reporter.suite.TestCases, testCase) } @@ -98,8 +104,9 @@ func (reporter *JUnitReporter) SpecDidComplete(specSummary *types.SpecSummary) { if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked { testCase.FailureMessage = &JUnitFailureMessage{ Type: reporter.failureTypeForState(specSummary.State), - Message: fmt.Sprintf("%s\n%s", specSummary.Failure.ComponentCodeLocation.String(), specSummary.Failure.Message), + Message: failureMessage(specSummary.Failure), } + testCase.SystemOut = specSummary.CapturedOutput } if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending { testCase.Skipped = &JUnitSkipped{} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/reporter.go b/vendor/github.com/onsi/ginkgo/reporters/reporter.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/reporter.go rename to vendor/github.com/onsi/ginkgo/reporters/reporter.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go similarity index 80% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go rename to vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go index ce5433a..45b8f88 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go @@ -22,24 +22,24 @@ func (s *consoleStenographer) colorize(colorCode string, format string, args ... } func (s *consoleStenographer) printBanner(text string, bannerCharacter string) { - fmt.Println(text) - fmt.Println(strings.Repeat(bannerCharacter, len(text))) + fmt.Fprintln(s.w, text) + fmt.Fprintln(s.w, strings.Repeat(bannerCharacter, len(text))) } func (s *consoleStenographer) printNewLine() { - fmt.Println("") + fmt.Fprintln(s.w, "") } func (s *consoleStenographer) printDelimiter() { - fmt.Println(s.colorize(grayColor, "%s", strings.Repeat("-", 30))) + fmt.Fprintln(s.w, s.colorize(grayColor, "%s", strings.Repeat("-", 30))) } func (s *consoleStenographer) print(indentation int, format string, args ...interface{}) { - fmt.Print(s.indent(indentation, format, args...)) + fmt.Fprint(s.w, s.indent(indentation, format, args...)) } func (s *consoleStenographer) println(indentation int, format string, args ...interface{}) { - fmt.Println(s.indent(indentation, format, args...)) + fmt.Fprintln(s.w, s.indent(indentation, format, args...)) } func (s *consoleStenographer) indent(indentation int, format string, args ...interface{}) string { diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go rename to vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go similarity index 84% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go rename to vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go index 8d1a438..e1d0a8c 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go @@ -8,8 +8,11 @@ package stenographer import ( "fmt" + "io" + "runtime" "strings" + "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable" "github.com/onsi/ginkgo/types" ) @@ -58,16 +61,26 @@ type Stenographer interface { SummarizeFailures(summaries []*types.SpecSummary) } -func New(color bool) Stenographer { +func New(color bool, enableFlakes bool) Stenographer { + denoter := "•" + if runtime.GOOS == "windows" { + denoter = "+" + } return &consoleStenographer{ - color: color, - cursorState: cursorStateTop, + color: color, + denoter: denoter, + cursorState: cursorStateTop, + enableFlakes: enableFlakes, + w: colorable.NewColorableStdout(), } } type consoleStenographer struct { - color bool - cursorState cursorStateType + color bool + denoter string + cursorState cursorStateType + enableFlakes bool + w io.Writer } var alternatingColors = []string{defaultStyle, grayColor} @@ -146,11 +159,16 @@ func (s *consoleStenographer) AnnounceSpecRunCompletion(summary *types.SuiteSumm status = s.colorize(boldStyle+redColor, "FAIL!") } + flakes := "" + if s.enableFlakes { + flakes = " | " + s.colorize(yellowColor+boldStyle, "%d Flaked", summary.NumberOfFlakedSpecs) + } + s.print(0, "%s -- %s | %s | %s | %s ", status, s.colorize(greenColor+boldStyle, "%d Passed", summary.NumberOfPassedSpecs), - s.colorize(redColor+boldStyle, "%d Failed", summary.NumberOfFailedSpecs), + s.colorize(redColor+boldStyle, "%d Failed", summary.NumberOfFailedSpecs)+flakes, s.colorize(yellowColor+boldStyle, "%d Pending", summary.NumberOfPendingSpecs), s.colorize(cyanColor+boldStyle, "%d Skipped", summary.NumberOfSkippedSpecs), ) @@ -197,7 +215,7 @@ func (s *consoleStenographer) announceSetupFailure(name string, summary *types.S s.println(0, s.colorize(redColor+boldStyle, "%s [%.3f seconds]", message, summary.RunTime.Seconds())) - indentation := s.printCodeLocationBlock([]string{name}, []types.CodeLocation{summary.CodeLocation}, summary.ComponentType, 0, true, true) + indentation := s.printCodeLocationBlock([]string{name}, []types.CodeLocation{summary.CodeLocation}, summary.ComponentType, 0, summary.State, true) s.printNewLine() s.printFailure(indentation, summary.State, summary.Failure, fullTrace) @@ -216,13 +234,13 @@ func (s *consoleStenographer) AnnounceCapturedOutput(output string) { } func (s *consoleStenographer) AnnounceSuccesfulSpec(spec *types.SpecSummary) { - s.print(0, s.colorize(greenColor, "•")) + s.print(0, s.colorize(greenColor, s.denoter)) s.stream() } func (s *consoleStenographer) AnnounceSuccesfulSlowSpec(spec *types.SpecSummary, succinct bool) { s.printBlockWithMessage( - s.colorize(greenColor, "• [SLOW TEST:%.3f seconds]", spec.RunTime.Seconds()), + s.colorize(greenColor, "%s [SLOW TEST:%.3f seconds]", s.denoter, spec.RunTime.Seconds()), "", spec, succinct, @@ -231,7 +249,7 @@ func (s *consoleStenographer) AnnounceSuccesfulSlowSpec(spec *types.SpecSummary, func (s *consoleStenographer) AnnounceSuccesfulMeasurement(spec *types.SpecSummary, succinct bool) { s.printBlockWithMessage( - s.colorize(greenColor, "• [MEASUREMENT]"), + s.colorize(greenColor, "%s [MEASUREMENT]", s.denoter), s.measurementReport(spec, succinct), spec, succinct, @@ -261,24 +279,24 @@ func (s *consoleStenographer) AnnounceSkippedSpec(spec *types.SpecSummary, succi s.startBlock() s.println(0, s.colorize(cyanColor+boldStyle, "S [SKIPPING]%s [%.3f seconds]", s.failureContext(spec.Failure.ComponentType), spec.RunTime.Seconds())) - indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, spec.Failure.ComponentType, spec.Failure.ComponentIndex, true, succinct) + indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, spec.Failure.ComponentType, spec.Failure.ComponentIndex, spec.State, succinct) s.printNewLine() - s.printFailure(indentation, spec.State, spec.Failure, fullTrace) + s.printSkip(indentation, spec.Failure) s.endBlock() } } func (s *consoleStenographer) AnnounceSpecTimedOut(spec *types.SpecSummary, succinct bool, fullTrace bool) { - s.printSpecFailure("•... Timeout", spec, succinct, fullTrace) + s.printSpecFailure(fmt.Sprintf("%s... Timeout", s.denoter), spec, succinct, fullTrace) } func (s *consoleStenographer) AnnounceSpecPanicked(spec *types.SpecSummary, succinct bool, fullTrace bool) { - s.printSpecFailure("•! Panic", spec, succinct, fullTrace) + s.printSpecFailure(fmt.Sprintf("%s! Panic", s.denoter), spec, succinct, fullTrace) } func (s *consoleStenographer) AnnounceSpecFailed(spec *types.SpecSummary, succinct bool, fullTrace bool) { - s.printSpecFailure("• Failure", spec, succinct, fullTrace) + s.printSpecFailure(fmt.Sprintf("%s Failure", s.denoter), spec, succinct, fullTrace) } func (s *consoleStenographer) SummarizeFailures(summaries []*types.SpecSummary) { @@ -311,7 +329,7 @@ func (s *consoleStenographer) SummarizeFailures(summaries []*types.SpecSummary) } else if summary.Failed() { s.print(0, s.colorize(redColor+boldStyle, "[Fail] ")) } - s.printSpecContext(summary.ComponentTexts, summary.ComponentCodeLocations, summary.Failure.ComponentType, summary.Failure.ComponentIndex, true, true) + s.printSpecContext(summary.ComponentTexts, summary.ComponentCodeLocations, summary.Failure.ComponentType, summary.Failure.ComponentIndex, summary.State, true) s.printNewLine() s.println(0, s.colorize(lightGrayColor, summary.Failure.Location.String())) } @@ -344,7 +362,7 @@ func (s *consoleStenographer) printBlockWithMessage(header string, message strin s.startBlock() s.println(0, header) - indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, types.SpecComponentTypeInvalid, 0, false, succinct) + indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, types.SpecComponentTypeInvalid, 0, spec.State, succinct) if message != "" { s.printNewLine() @@ -358,7 +376,7 @@ func (s *consoleStenographer) printSpecFailure(message string, spec *types.SpecS s.startBlock() s.println(0, s.colorize(redColor+boldStyle, "%s%s [%.3f seconds]", message, s.failureContext(spec.Failure.ComponentType), spec.RunTime.Seconds())) - indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, spec.Failure.ComponentType, spec.Failure.ComponentIndex, true, succinct) + indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, spec.Failure.ComponentType, spec.Failure.ComponentIndex, spec.State, succinct) s.printNewLine() s.printFailure(indentation, spec.State, spec.Failure, fullTrace) @@ -382,6 +400,12 @@ func (s *consoleStenographer) failureContext(failedComponentType types.SpecCompo return "" } +func (s *consoleStenographer) printSkip(indentation int, spec types.SpecFailure) { + s.println(indentation, s.colorize(cyanColor, spec.Message)) + s.printNewLine() + s.println(indentation, spec.Location.String()) +} + func (s *consoleStenographer) printFailure(indentation int, state types.SpecState, failure types.SpecFailure, fullTrace bool) { if state == types.SpecStatePanicked { s.println(indentation, s.colorize(redColor+boldStyle, failure.Message)) @@ -402,7 +426,7 @@ func (s *consoleStenographer) printFailure(indentation int, state types.SpecStat } } -func (s *consoleStenographer) printSpecContext(componentTexts []string, componentCodeLocations []types.CodeLocation, failedComponentType types.SpecComponentType, failedComponentIndex int, failure bool, succinct bool) int { +func (s *consoleStenographer) printSpecContext(componentTexts []string, componentCodeLocations []types.CodeLocation, failedComponentType types.SpecComponentType, failedComponentIndex int, state types.SpecState, succinct bool) int { startIndex := 1 indentation := 0 @@ -411,7 +435,11 @@ func (s *consoleStenographer) printSpecContext(componentTexts []string, componen } for i := startIndex; i < len(componentTexts); i++ { - if failure && i == failedComponentIndex { + if (state.IsFailure() || state == types.SpecStateSkipped) && i == failedComponentIndex { + color := redColor + if state == types.SpecStateSkipped { + color = cyanColor + } blockType := "" switch failedComponentType { case types.SpecComponentTypeBeforeSuite: @@ -430,9 +458,9 @@ func (s *consoleStenographer) printSpecContext(componentTexts []string, componen blockType = "Measurement" } if succinct { - s.print(0, s.colorize(redColor+boldStyle, "[%s] %s ", blockType, componentTexts[i])) + s.print(0, s.colorize(color+boldStyle, "[%s] %s ", blockType, componentTexts[i])) } else { - s.println(indentation, s.colorize(redColor+boldStyle, "%s [%s]", componentTexts[i], blockType)) + s.println(indentation, s.colorize(color+boldStyle, "%s [%s]", componentTexts[i], blockType)) s.println(indentation, s.colorize(grayColor, "%s", componentCodeLocations[i])) } } else { @@ -449,8 +477,8 @@ func (s *consoleStenographer) printSpecContext(componentTexts []string, componen return indentation } -func (s *consoleStenographer) printCodeLocationBlock(componentTexts []string, componentCodeLocations []types.CodeLocation, failedComponentType types.SpecComponentType, failedComponentIndex int, failure bool, succinct bool) int { - indentation := s.printSpecContext(componentTexts, componentCodeLocations, failedComponentType, failedComponentIndex, failure, succinct) +func (s *consoleStenographer) printCodeLocationBlock(componentTexts []string, componentCodeLocations []types.CodeLocation, failedComponentType types.SpecComponentType, failedComponentIndex int, state types.SpecState, succinct bool) int { + indentation := s.printSpecContext(componentTexts, componentCodeLocations, failedComponentType, failedComponentIndex, state, succinct) if succinct { if len(componentTexts) > 0 { @@ -489,15 +517,15 @@ func (s *consoleStenographer) measurementReport(spec *types.SpecSummary, succinc message = append(message, fmt.Sprintf(" %s - %s: %s%s, %s: %s%s ± %s%s, %s: %s%s", s.colorize(boldStyle, "%s", measurement.Name), measurement.SmallestLabel, - s.colorize(greenColor, "%.3f", measurement.Smallest), + s.colorize(greenColor, measurement.PrecisionFmt(), measurement.Smallest), measurement.Units, measurement.AverageLabel, - s.colorize(cyanColor, "%.3f", measurement.Average), + s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.Average), measurement.Units, - s.colorize(cyanColor, "%.3f", measurement.StdDeviation), + s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.StdDeviation), measurement.Units, measurement.LargestLabel, - s.colorize(redColor, "%.3f", measurement.Largest), + s.colorize(redColor, measurement.PrecisionFmt(), measurement.Largest), measurement.Units, )) } @@ -514,15 +542,15 @@ func (s *consoleStenographer) measurementReport(spec *types.SpecSummary, succinc s.colorize(boldStyle, "%s", measurement.Name), info, measurement.SmallestLabel, - s.colorize(greenColor, "%.3f", measurement.Smallest), + s.colorize(greenColor, measurement.PrecisionFmt(), measurement.Smallest), measurement.Units, measurement.LargestLabel, - s.colorize(redColor, "%.3f", measurement.Largest), + s.colorize(redColor, measurement.PrecisionFmt(), measurement.Largest), measurement.Units, measurement.AverageLabel, - s.colorize(cyanColor, "%.3f", measurement.Average), + s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.Average), measurement.Units, - s.colorize(cyanColor, "%.3f", measurement.StdDeviation), + s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.StdDeviation), measurement.Units, )) } diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE new file mode 100644 index 0000000..91b5cef --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +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/onsi/ginkgo/reporters/stenographer/support/go-colorable/README.md b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/README.md new file mode 100644 index 0000000..e84226a --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/README.md @@ -0,0 +1,43 @@ +# go-colorable + +Colorable writer for windows. + +For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.) +This package is possible to handle escape sequence for ansi color on windows. + +## Too Bad! + +![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/bad.png) + + +## So Good! + +![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/good.png) + +## Usage + +```go +logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true}) +logrus.SetOutput(colorable.NewColorableStdout()) + +logrus.Info("succeeded") +logrus.Warn("not correct") +logrus.Error("something error") +logrus.Fatal("panic") +``` + +You can compile above code on non-windows OSs. + +## Installation + +``` +$ go get github.com/mattn/go-colorable +``` + +# License + +MIT + +# Author + +Yasuhiro Matsumoto (a.k.a mattn) diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go new file mode 100644 index 0000000..52d6653 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go @@ -0,0 +1,24 @@ +// +build !windows + +package colorable + +import ( + "io" + "os" +) + +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + return file +} + +func NewColorableStdout() io.Writer { + return os.Stdout +} + +func NewColorableStderr() io.Writer { + return os.Stderr +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go new file mode 100644 index 0000000..1088009 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go @@ -0,0 +1,783 @@ +package colorable + +import ( + "bytes" + "fmt" + "io" + "math" + "os" + "strconv" + "strings" + "syscall" + "unsafe" + + "github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty" +) + +const ( + foregroundBlue = 0x1 + foregroundGreen = 0x2 + foregroundRed = 0x4 + foregroundIntensity = 0x8 + foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity) + backgroundBlue = 0x10 + backgroundGreen = 0x20 + backgroundRed = 0x40 + backgroundIntensity = 0x80 + backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) +) + +type wchar uint16 +type short int16 +type dword uint32 +type word uint16 + +type coord struct { + x short + y short +} + +type smallRect struct { + left short + top short + right short + bottom short +} + +type consoleScreenBufferInfo struct { + size coord + cursorPosition coord + attributes word + window smallRect + maximumWindowSize coord +} + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") + procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") + procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") + procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW") + procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute") +) + +type Writer struct { + out io.Writer + handle syscall.Handle + lastbuf bytes.Buffer + oldattr word +} + +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + if isatty.IsTerminal(file.Fd()) { + var csbi consoleScreenBufferInfo + handle := syscall.Handle(file.Fd()) + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + return &Writer{out: file, handle: handle, oldattr: csbi.attributes} + } else { + return file + } +} + +func NewColorableStdout() io.Writer { + return NewColorable(os.Stdout) +} + +func NewColorableStderr() io.Writer { + return NewColorable(os.Stderr) +} + +var color256 = map[int]int{ + 0: 0x000000, + 1: 0x800000, + 2: 0x008000, + 3: 0x808000, + 4: 0x000080, + 5: 0x800080, + 6: 0x008080, + 7: 0xc0c0c0, + 8: 0x808080, + 9: 0xff0000, + 10: 0x00ff00, + 11: 0xffff00, + 12: 0x0000ff, + 13: 0xff00ff, + 14: 0x00ffff, + 15: 0xffffff, + 16: 0x000000, + 17: 0x00005f, + 18: 0x000087, + 19: 0x0000af, + 20: 0x0000d7, + 21: 0x0000ff, + 22: 0x005f00, + 23: 0x005f5f, + 24: 0x005f87, + 25: 0x005faf, + 26: 0x005fd7, + 27: 0x005fff, + 28: 0x008700, + 29: 0x00875f, + 30: 0x008787, + 31: 0x0087af, + 32: 0x0087d7, + 33: 0x0087ff, + 34: 0x00af00, + 35: 0x00af5f, + 36: 0x00af87, + 37: 0x00afaf, + 38: 0x00afd7, + 39: 0x00afff, + 40: 0x00d700, + 41: 0x00d75f, + 42: 0x00d787, + 43: 0x00d7af, + 44: 0x00d7d7, + 45: 0x00d7ff, + 46: 0x00ff00, + 47: 0x00ff5f, + 48: 0x00ff87, + 49: 0x00ffaf, + 50: 0x00ffd7, + 51: 0x00ffff, + 52: 0x5f0000, + 53: 0x5f005f, + 54: 0x5f0087, + 55: 0x5f00af, + 56: 0x5f00d7, + 57: 0x5f00ff, + 58: 0x5f5f00, + 59: 0x5f5f5f, + 60: 0x5f5f87, + 61: 0x5f5faf, + 62: 0x5f5fd7, + 63: 0x5f5fff, + 64: 0x5f8700, + 65: 0x5f875f, + 66: 0x5f8787, + 67: 0x5f87af, + 68: 0x5f87d7, + 69: 0x5f87ff, + 70: 0x5faf00, + 71: 0x5faf5f, + 72: 0x5faf87, + 73: 0x5fafaf, + 74: 0x5fafd7, + 75: 0x5fafff, + 76: 0x5fd700, + 77: 0x5fd75f, + 78: 0x5fd787, + 79: 0x5fd7af, + 80: 0x5fd7d7, + 81: 0x5fd7ff, + 82: 0x5fff00, + 83: 0x5fff5f, + 84: 0x5fff87, + 85: 0x5fffaf, + 86: 0x5fffd7, + 87: 0x5fffff, + 88: 0x870000, + 89: 0x87005f, + 90: 0x870087, + 91: 0x8700af, + 92: 0x8700d7, + 93: 0x8700ff, + 94: 0x875f00, + 95: 0x875f5f, + 96: 0x875f87, + 97: 0x875faf, + 98: 0x875fd7, + 99: 0x875fff, + 100: 0x878700, + 101: 0x87875f, + 102: 0x878787, + 103: 0x8787af, + 104: 0x8787d7, + 105: 0x8787ff, + 106: 0x87af00, + 107: 0x87af5f, + 108: 0x87af87, + 109: 0x87afaf, + 110: 0x87afd7, + 111: 0x87afff, + 112: 0x87d700, + 113: 0x87d75f, + 114: 0x87d787, + 115: 0x87d7af, + 116: 0x87d7d7, + 117: 0x87d7ff, + 118: 0x87ff00, + 119: 0x87ff5f, + 120: 0x87ff87, + 121: 0x87ffaf, + 122: 0x87ffd7, + 123: 0x87ffff, + 124: 0xaf0000, + 125: 0xaf005f, + 126: 0xaf0087, + 127: 0xaf00af, + 128: 0xaf00d7, + 129: 0xaf00ff, + 130: 0xaf5f00, + 131: 0xaf5f5f, + 132: 0xaf5f87, + 133: 0xaf5faf, + 134: 0xaf5fd7, + 135: 0xaf5fff, + 136: 0xaf8700, + 137: 0xaf875f, + 138: 0xaf8787, + 139: 0xaf87af, + 140: 0xaf87d7, + 141: 0xaf87ff, + 142: 0xafaf00, + 143: 0xafaf5f, + 144: 0xafaf87, + 145: 0xafafaf, + 146: 0xafafd7, + 147: 0xafafff, + 148: 0xafd700, + 149: 0xafd75f, + 150: 0xafd787, + 151: 0xafd7af, + 152: 0xafd7d7, + 153: 0xafd7ff, + 154: 0xafff00, + 155: 0xafff5f, + 156: 0xafff87, + 157: 0xafffaf, + 158: 0xafffd7, + 159: 0xafffff, + 160: 0xd70000, + 161: 0xd7005f, + 162: 0xd70087, + 163: 0xd700af, + 164: 0xd700d7, + 165: 0xd700ff, + 166: 0xd75f00, + 167: 0xd75f5f, + 168: 0xd75f87, + 169: 0xd75faf, + 170: 0xd75fd7, + 171: 0xd75fff, + 172: 0xd78700, + 173: 0xd7875f, + 174: 0xd78787, + 175: 0xd787af, + 176: 0xd787d7, + 177: 0xd787ff, + 178: 0xd7af00, + 179: 0xd7af5f, + 180: 0xd7af87, + 181: 0xd7afaf, + 182: 0xd7afd7, + 183: 0xd7afff, + 184: 0xd7d700, + 185: 0xd7d75f, + 186: 0xd7d787, + 187: 0xd7d7af, + 188: 0xd7d7d7, + 189: 0xd7d7ff, + 190: 0xd7ff00, + 191: 0xd7ff5f, + 192: 0xd7ff87, + 193: 0xd7ffaf, + 194: 0xd7ffd7, + 195: 0xd7ffff, + 196: 0xff0000, + 197: 0xff005f, + 198: 0xff0087, + 199: 0xff00af, + 200: 0xff00d7, + 201: 0xff00ff, + 202: 0xff5f00, + 203: 0xff5f5f, + 204: 0xff5f87, + 205: 0xff5faf, + 206: 0xff5fd7, + 207: 0xff5fff, + 208: 0xff8700, + 209: 0xff875f, + 210: 0xff8787, + 211: 0xff87af, + 212: 0xff87d7, + 213: 0xff87ff, + 214: 0xffaf00, + 215: 0xffaf5f, + 216: 0xffaf87, + 217: 0xffafaf, + 218: 0xffafd7, + 219: 0xffafff, + 220: 0xffd700, + 221: 0xffd75f, + 222: 0xffd787, + 223: 0xffd7af, + 224: 0xffd7d7, + 225: 0xffd7ff, + 226: 0xffff00, + 227: 0xffff5f, + 228: 0xffff87, + 229: 0xffffaf, + 230: 0xffffd7, + 231: 0xffffff, + 232: 0x080808, + 233: 0x121212, + 234: 0x1c1c1c, + 235: 0x262626, + 236: 0x303030, + 237: 0x3a3a3a, + 238: 0x444444, + 239: 0x4e4e4e, + 240: 0x585858, + 241: 0x626262, + 242: 0x6c6c6c, + 243: 0x767676, + 244: 0x808080, + 245: 0x8a8a8a, + 246: 0x949494, + 247: 0x9e9e9e, + 248: 0xa8a8a8, + 249: 0xb2b2b2, + 250: 0xbcbcbc, + 251: 0xc6c6c6, + 252: 0xd0d0d0, + 253: 0xdadada, + 254: 0xe4e4e4, + 255: 0xeeeeee, +} + +func (w *Writer) Write(data []byte) (n int, err error) { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + + er := bytes.NewBuffer(data) +loop: + for { + r1, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + if r1 == 0 { + break loop + } + + c1, _, err := er.ReadRune() + if err != nil { + break loop + } + if c1 != 0x1b { + fmt.Fprint(w.out, string(c1)) + continue + } + c2, _, err := er.ReadRune() + if err != nil { + w.lastbuf.WriteRune(c1) + break loop + } + if c2 != 0x5b { + w.lastbuf.WriteRune(c1) + w.lastbuf.WriteRune(c2) + continue + } + + var buf bytes.Buffer + var m rune + for { + c, _, err := er.ReadRune() + if err != nil { + w.lastbuf.WriteRune(c1) + w.lastbuf.WriteRune(c2) + w.lastbuf.Write(buf.Bytes()) + break loop + } + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + m = c + break + } + buf.Write([]byte(string(c))) + } + + var csbi consoleScreenBufferInfo + switch m { + case 'A': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'B': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'C': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'D': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + if n, err = strconv.Atoi(buf.String()); err == nil { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + } + case 'E': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'F': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'G': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'H': + token := strings.Split(buf.String(), ";") + if len(token) != 2 { + continue + } + n1, err := strconv.Atoi(token[0]) + if err != nil { + continue + } + n2, err := strconv.Atoi(token[1]) + if err != nil { + continue + } + csbi.cursorPosition.x = short(n2) + csbi.cursorPosition.x = short(n1) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'J': + n, err := strconv.Atoi(buf.String()) + if err != nil { + continue + } + var cursor coord + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + } + var count, written dword + count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x) + procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'K': + n, err := strconv.Atoi(buf.String()) + if err != nil { + continue + } + var cursor coord + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y} + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y} + } + var count, written dword + count = dword(csbi.size.x - csbi.cursorPosition.x) + procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'm': + attr := csbi.attributes + cs := buf.String() + if cs == "" { + procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr)) + continue + } + token := strings.Split(cs, ";") + for i := 0; i < len(token); i += 1 { + ns := token[i] + if n, err = strconv.Atoi(ns); err == nil { + switch { + case n == 0 || n == 100: + attr = w.oldattr + case 1 <= n && n <= 5: + attr |= foregroundIntensity + case n == 7: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 22 == n || n == 25 || n == 25: + attr |= foregroundIntensity + case n == 27: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 30 <= n && n <= 37: + attr = (attr & backgroundMask) + if (n-30)&1 != 0 { + attr |= foregroundRed + } + if (n-30)&2 != 0 { + attr |= foregroundGreen + } + if (n-30)&4 != 0 { + attr |= foregroundBlue + } + case n == 38: // set foreground color. + if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256foreAttr == nil { + n256setup() + } + attr &= backgroundMask + attr |= n256foreAttr[n256] + i += 2 + } + } else { + attr = attr & (w.oldattr & backgroundMask) + } + case n == 39: // reset foreground color. + attr &= backgroundMask + attr |= w.oldattr & foregroundMask + case 40 <= n && n <= 47: + attr = (attr & foregroundMask) + if (n-40)&1 != 0 { + attr |= backgroundRed + } + if (n-40)&2 != 0 { + attr |= backgroundGreen + } + if (n-40)&4 != 0 { + attr |= backgroundBlue + } + case n == 48: // set background color. + if i < len(token)-2 && token[i+1] == "5" { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256backAttr == nil { + n256setup() + } + attr &= foregroundMask + attr |= n256backAttr[n256] + i += 2 + } + } else { + attr = attr & (w.oldattr & foregroundMask) + } + case n == 49: // reset foreground color. + attr &= foregroundMask + attr |= w.oldattr & backgroundMask + case 90 <= n && n <= 97: + attr = (attr & backgroundMask) + attr |= foregroundIntensity + if (n-90)&1 != 0 { + attr |= foregroundRed + } + if (n-90)&2 != 0 { + attr |= foregroundGreen + } + if (n-90)&4 != 0 { + attr |= foregroundBlue + } + case 100 <= n && n <= 107: + attr = (attr & foregroundMask) + attr |= backgroundIntensity + if (n-100)&1 != 0 { + attr |= backgroundRed + } + if (n-100)&2 != 0 { + attr |= backgroundGreen + } + if (n-100)&4 != 0 { + attr |= backgroundBlue + } + } + procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr)) + } + } + } + } + return len(data) - w.lastbuf.Len(), nil +} + +type consoleColor struct { + rgb int + red bool + green bool + blue bool + intensity bool +} + +func (c consoleColor) foregroundAttr() (attr word) { + if c.red { + attr |= foregroundRed + } + if c.green { + attr |= foregroundGreen + } + if c.blue { + attr |= foregroundBlue + } + if c.intensity { + attr |= foregroundIntensity + } + return +} + +func (c consoleColor) backgroundAttr() (attr word) { + if c.red { + attr |= backgroundRed + } + if c.green { + attr |= backgroundGreen + } + if c.blue { + attr |= backgroundBlue + } + if c.intensity { + attr |= backgroundIntensity + } + return +} + +var color16 = []consoleColor{ + consoleColor{0x000000, false, false, false, false}, + consoleColor{0x000080, false, false, true, false}, + consoleColor{0x008000, false, true, false, false}, + consoleColor{0x008080, false, true, true, false}, + consoleColor{0x800000, true, false, false, false}, + consoleColor{0x800080, true, false, true, false}, + consoleColor{0x808000, true, true, false, false}, + consoleColor{0xc0c0c0, true, true, true, false}, + consoleColor{0x808080, false, false, false, true}, + consoleColor{0x0000ff, false, false, true, true}, + consoleColor{0x00ff00, false, true, false, true}, + consoleColor{0x00ffff, false, true, true, true}, + consoleColor{0xff0000, true, false, false, true}, + consoleColor{0xff00ff, true, false, true, true}, + consoleColor{0xffff00, true, true, false, true}, + consoleColor{0xffffff, true, true, true, true}, +} + +type hsv struct { + h, s, v float32 +} + +func (a hsv) dist(b hsv) float32 { + dh := a.h - b.h + switch { + case dh > 0.5: + dh = 1 - dh + case dh < -0.5: + dh = -1 - dh + } + ds := a.s - b.s + dv := a.v - b.v + return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv))) +} + +func toHSV(rgb int) hsv { + r, g, b := float32((rgb&0xFF0000)>>16)/256.0, + float32((rgb&0x00FF00)>>8)/256.0, + float32(rgb&0x0000FF)/256.0 + min, max := minmax3f(r, g, b) + h := max - min + if h > 0 { + if max == r { + h = (g - b) / h + if h < 0 { + h += 6 + } + } else if max == g { + h = 2 + (b-r)/h + } else { + h = 4 + (r-g)/h + } + } + h /= 6.0 + s := max - min + if max != 0 { + s /= max + } + v := max + return hsv{h: h, s: s, v: v} +} + +type hsvTable []hsv + +func toHSVTable(rgbTable []consoleColor) hsvTable { + t := make(hsvTable, len(rgbTable)) + for i, c := range rgbTable { + t[i] = toHSV(c.rgb) + } + return t +} + +func (t hsvTable) find(rgb int) consoleColor { + hsv := toHSV(rgb) + n := 7 + l := float32(5.0) + for i, p := range t { + d := hsv.dist(p) + if d < l { + l, n = d, i + } + } + return color16[n] +} + +func minmax3f(a, b, c float32) (min, max float32) { + if a < b { + if b < c { + return a, c + } else if a < c { + return a, b + } else { + return c, b + } + } else { + if a < c { + return b, c + } else if b < c { + return b, a + } else { + return c, a + } + } +} + +var n256foreAttr []word +var n256backAttr []word + +func n256setup() { + n256foreAttr = make([]word, 256) + n256backAttr = make([]word, 256) + t := toHSVTable(color16) + for i, rgb := range color256 { + c := t.find(rgb) + n256foreAttr[i] = c.foregroundAttr() + n256backAttr[i] = c.backgroundAttr() + } +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go new file mode 100644 index 0000000..fb976db --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go @@ -0,0 +1,57 @@ +package colorable + +import ( + "bytes" + "fmt" + "io" +) + +type NonColorable struct { + out io.Writer + lastbuf bytes.Buffer +} + +func NewNonColorable(w io.Writer) io.Writer { + return &NonColorable{out: w} +} + +func (w *NonColorable) Write(data []byte) (n int, err error) { + er := bytes.NewBuffer(data) +loop: + for { + c1, _, err := er.ReadRune() + if err != nil { + break loop + } + if c1 != 0x1b { + fmt.Fprint(w.out, string(c1)) + continue + } + c2, _, err := er.ReadRune() + if err != nil { + w.lastbuf.WriteRune(c1) + break loop + } + if c2 != 0x5b { + w.lastbuf.WriteRune(c1) + w.lastbuf.WriteRune(c2) + continue + } + + var buf bytes.Buffer + for { + c, _, err := er.ReadRune() + if err != nil { + w.lastbuf.WriteRune(c1) + w.lastbuf.WriteRune(c2) + w.lastbuf.Write(buf.Bytes()) + break loop + } + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + break + } + buf.Write([]byte(string(c))) + } + } + return len(data) - w.lastbuf.Len(), nil +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE new file mode 100644 index 0000000..65dc692 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE @@ -0,0 +1,9 @@ +Copyright (c) Yasuhiro MATSUMOTO + +MIT License (Expat) + +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/onsi/ginkgo/reporters/stenographer/support/go-isatty/README.md b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/README.md new file mode 100644 index 0000000..74845de --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/README.md @@ -0,0 +1,37 @@ +# go-isatty + +isatty for golang + +## Usage + +```go +package main + +import ( + "fmt" + "github.com/mattn/go-isatty" + "os" +) + +func main() { + if isatty.IsTerminal(os.Stdout.Fd()) { + fmt.Println("Is Terminal") + } else { + fmt.Println("Is Not Terminal") + } +} +``` + +## Installation + +``` +$ go get github.com/mattn/go-isatty +``` + +# License + +MIT + +# Author + +Yasuhiro Matsumoto (a.k.a mattn) diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go new file mode 100644 index 0000000..17d4f90 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go @@ -0,0 +1,2 @@ +// Package isatty implements interface to isatty +package isatty diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go new file mode 100644 index 0000000..83c5887 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go @@ -0,0 +1,9 @@ +// +build appengine + +package isatty + +// IsTerminal returns true if the file descriptor is terminal which +// is always false on on appengine classic which is a sandboxed PaaS. +func IsTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go new file mode 100644 index 0000000..98ffe86 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go @@ -0,0 +1,18 @@ +// +build darwin freebsd openbsd netbsd +// +build !appengine + +package isatty + +import ( + "syscall" + "unsafe" +) + +const ioctlReadTermios = syscall.TIOCGETA + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go new file mode 100644 index 0000000..9d24bac --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go @@ -0,0 +1,18 @@ +// +build linux +// +build !appengine + +package isatty + +import ( + "syscall" + "unsafe" +) + +const ioctlReadTermios = syscall.TCGETS + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go new file mode 100644 index 0000000..1f0c6bf --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go @@ -0,0 +1,16 @@ +// +build solaris +// +build !appengine + +package isatty + +import ( + "golang.org/x/sys/unix" +) + +// IsTerminal returns true if the given file descriptor is a terminal. +// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c +func IsTerminal(fd uintptr) bool { + var termio unix.Termio + err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) + return err == nil +} diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go new file mode 100644 index 0000000..83c398b --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go @@ -0,0 +1,19 @@ +// +build windows +// +build !appengine + +package isatty + +import ( + "syscall" + "unsafe" +) + +var kernel32 = syscall.NewLazyDLL("kernel32.dll") +var procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +} diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/teamcity_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/reporters/teamcity_reporter.go rename to vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/code_location.go b/vendor/github.com/onsi/ginkgo/types/code_location.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/types/code_location.go rename to vendor/github.com/onsi/ginkgo/types/code_location.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/synchronization.go b/vendor/github.com/onsi/ginkgo/types/synchronization.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/types/synchronization.go rename to vendor/github.com/onsi/ginkgo/types/synchronization.go diff --git a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types.go b/vendor/github.com/onsi/ginkgo/types/types.go similarity index 83% rename from Godeps/_workspace/src/github.com/onsi/ginkgo/types/types.go rename to vendor/github.com/onsi/ginkgo/types/types.go index 583b347..dcf95ba 100644 --- a/Godeps/_workspace/src/github.com/onsi/ginkgo/types/types.go +++ b/vendor/github.com/onsi/ginkgo/types/types.go @@ -1,6 +1,9 @@ package types -import "time" +import ( + "strconv" + "time" +) const GINKGO_FOCUS_EXIT_CODE = 197 @@ -16,7 +19,10 @@ type SuiteSummary struct { NumberOfSkippedSpecs int NumberOfPassedSpecs int NumberOfFailedSpecs int - RunTime time.Duration + // Flaked specs are those that failed initially, but then passed on a + // subsequent try. + NumberOfFlakedSpecs int + RunTime time.Duration } type SpecSummary struct { @@ -35,7 +41,7 @@ type SpecSummary struct { } func (s SpecSummary) HasFailureState() bool { - return s.State == SpecStateTimedOut || s.State == SpecStatePanicked || s.State == SpecStateFailed + return s.State.IsFailure() } func (s SpecSummary) TimedOut() bool { @@ -100,6 +106,17 @@ type SpecMeasurement struct { LargestLabel string AverageLabel string Units string + Precision int +} + +func (s SpecMeasurement) PrecisionFmt() string { + if s.Precision == 0 { + return "%f" + } + + str := strconv.Itoa(s.Precision) + + return "%." + str + "f" } type SpecState uint @@ -115,6 +132,10 @@ const ( SpecStateTimedOut ) +func (state SpecState) IsFailure() bool { + return state == SpecStateTimedOut || state == SpecStatePanicked || state == SpecStateFailed +} + type SpecComponentType uint const ( diff --git a/vendor/github.com/onsi/gomega/.gitignore b/vendor/github.com/onsi/gomega/.gitignore new file mode 100644 index 0000000..720c13c --- /dev/null +++ b/vendor/github.com/onsi/gomega/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +*.test +. +.idea +gomega.iml diff --git a/vendor/github.com/onsi/gomega/.travis.yml b/vendor/github.com/onsi/gomega/.travis.yml new file mode 100644 index 0000000..8ed1e44 --- /dev/null +++ b/vendor/github.com/onsi/gomega/.travis.yml @@ -0,0 +1,12 @@ +language: go +go: + - 1.5 + - 1.6.2 + - stable + +install: + - go get -v ./... + - go get github.com/onsi/ginkgo + - go install github.com/onsi/ginkgo/ginkgo + +script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --failOnPending --randomizeSuites --race diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md new file mode 100644 index 0000000..0c5ede5 --- /dev/null +++ b/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -0,0 +1,70 @@ +## HEAD + +Improvements: + +- Added `BeSent` which attempts to send a value down a channel and fails if the attempt blocks. Can be paired with `Eventually` to safely send a value down a channel with a timeout. +- `Ω`, `Expect`, `Eventually`, and `Consistently` now immediately `panic` if there is no registered fail handler. This is always a mistake that can hide failing tests. +- `Receive()` no longer errors when passed a closed channel, it's perfectly fine to attempt to read from a closed channel so Ω(c).Should(Receive()) always fails and Ω(c).ShoudlNot(Receive()) always passes with a closed channel. +- Added `HavePrefix` and `HaveSuffix` matchers. +- `ghttp` can now handle concurrent requests. +- Added `Succeed` which allows one to write `Ω(MyFunction()).Should(Succeed())`. +- Improved `ghttp`'s behavior around failing assertions and panics: + - If a registered handler makes a failing assertion `ghttp` will return `500`. + - If a registered handler panics, `ghttp` will return `500` *and* fail the test. This is new behavior that may cause existing code to break. This code is almost certainly incorrect and creating a false positive. +- `ghttp` servers can take an `io.Writer`. `ghttp` will write a line to the writer when each request arrives. +- Added `WithTransform` matcher to allow munging input data before feeding into the relevant matcher +- Added boolean `And`, `Or`, and `Not` matchers to allow creating composite matchers + +Bug Fixes: +- gexec: `session.Wait` now uses `EventuallyWithOffset` to get the right line number in the failure. +- `ContainElement` no longer bails if a passed-in matcher errors. + +## 1.0 (8/2/2014) + +No changes. Dropping "beta" from the version number. + +## 1.0.0-beta (7/8/2014) +Breaking Changes: + +- Changed OmegaMatcher interface. Instead of having `Match` return failure messages, two new methods `FailureMessage` and `NegatedFailureMessage` are called instead. +- Moved and renamed OmegaFailHandler to types.GomegaFailHandler and OmegaMatcher to types.GomegaMatcher. Any references to OmegaMatcher in any custom matchers will need to be changed to point to types.GomegaMatcher + +New Test-Support Features: + +- `ghttp`: supports testing http clients + - Provides a flexible fake http server + - Provides a collection of chainable http handlers that perform assertions. +- `gbytes`: supports making ordered assertions against streams of data + - Provides a `gbytes.Buffer` + - Provides a `Say` matcher to perform ordered assertions against output data +- `gexec`: supports testing external processes + - Provides support for building Go binaries + - Wraps and starts `exec.Cmd` commands + - Makes it easy to assert against stdout and stderr + - Makes it easy to send signals and wait for processes to exit + - Provides an `Exit` matcher to assert against exit code. + +DSL Changes: + +- `Eventually` and `Consistently` can accept `time.Duration` interval and polling inputs. +- The default timeouts for `Eventually` and `Consistently` are now configurable. + +New Matchers: + +- `ConsistOf`: order-independent assertion against the elements of an array/slice or keys of a map. +- `BeTemporally`: like `BeNumerically` but for `time.Time` +- `HaveKeyWithValue`: asserts a map has a given key with the given value. + +Updated Matchers: + +- `Receive` matcher can take a matcher as an argument and passes only if the channel under test receives an objet that satisfies the passed-in matcher. +- Matchers that implement `MatchMayChangeInTheFuture(actual interface{}) bool` can inform `Eventually` and/or `Consistently` when a match has no chance of changing status in the future. For example, `Receive` returns `false` when a channel is closed. + +Misc: + +- Start using semantic versioning +- Start maintaining changelog + +Major refactor: + +- Pull out Gomega's internal to `internal` diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/LICENSE b/vendor/github.com/onsi/gomega/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/LICENSE rename to vendor/github.com/onsi/gomega/LICENSE diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/README.md b/vendor/github.com/onsi/gomega/README.md similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/README.md rename to vendor/github.com/onsi/gomega/README.md diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/format/format.go b/vendor/github.com/onsi/gomega/format/format.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/format/format.go rename to vendor/github.com/onsi/gomega/format/format.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/gomega_dsl.go rename to vendor/github.com/onsi/gomega/gomega_dsl.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion.go b/vendor/github.com/onsi/gomega/internal/assertion/assertion.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/internal/assertion/assertion.go rename to vendor/github.com/onsi/gomega/internal/assertion/assertion.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go b/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go similarity index 95% rename from Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go rename to vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go index 7bbec43..bce0853 100644 --- a/Godeps/_workspace/src/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go +++ b/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go @@ -6,6 +6,7 @@ import ( "reflect" "time" + "github.com/onsi/gomega/internal/oraclematcher" "github.com/onsi/gomega/types" ) @@ -86,21 +87,12 @@ func (assertion *AsyncAssertion) pollActual() (interface{}, error) { return assertion.actualInput, nil } -type oracleMatcher interface { - MatchMayChangeInTheFuture(actual interface{}) bool -} - func (assertion *AsyncAssertion) matcherMayChange(matcher types.GomegaMatcher, value interface{}) bool { if assertion.actualInputIsAFunction() { return true } - oracleMatcher, ok := matcher.(oracleMatcher) - if !ok { - return true - } - - return oracleMatcher.MatchMayChangeInTheFuture(value) + return oraclematcher.MatchMayChangeInTheFuture(matcher, value) } func (assertion *AsyncAssertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool { diff --git a/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go b/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go new file mode 100644 index 0000000..66cad88 --- /dev/null +++ b/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go @@ -0,0 +1,25 @@ +package oraclematcher + +import "github.com/onsi/gomega/types" + +/* +GomegaMatchers that also match the OracleMatcher interface can convey information about +whether or not their result will change upon future attempts. + +This allows `Eventually` and `Consistently` to short circuit if success becomes impossible. + +For example, a process' exit code can never change. So, gexec's Exit matcher returns `true` +for `MatchMayChangeInTheFuture` until the process exits, at which point it returns `false` forevermore. +*/ +type OracleMatcher interface { + MatchMayChangeInTheFuture(actual interface{}) bool +} + +func MatchMayChangeInTheFuture(matcher types.GomegaMatcher, value interface{}) bool { + oracleMatcher, ok := matcher.(OracleMatcher) + if !ok { + return true + } + + return oracleMatcher.MatchMayChangeInTheFuture(value) +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go b/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go rename to vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers.go b/vendor/github.com/onsi/gomega/matchers.go similarity index 83% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers.go rename to vendor/github.com/onsi/gomega/matchers.go index 3b39677..0c30aa1 100644 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers.go +++ b/vendor/github.com/onsi/gomega/matchers.go @@ -26,6 +26,15 @@ func BeEquivalentTo(expected interface{}) types.GomegaMatcher { } } +//BeIdenticalTo uses the == operator to compare actual with expected. +//BeIdenticalTo is strict about types when performing comparisons. +//It is an error for both actual and expected to be nil. Use BeNil() instead. +func BeIdenticalTo(expected interface{}) types.GomegaMatcher { + return &matchers.BeIdenticalToMatcher{ + Expected: expected, + } +} + //BeNil succeeds if actual is nil func BeNil() types.GomegaMatcher { return &matchers.BeNilMatcher{} @@ -205,6 +214,15 @@ func MatchJSON(json interface{}) types.GomegaMatcher { } } +//MatchYAML succeeds if actual is a string or stringer of YAML that matches +//the expected YAML. The YAML's are decoded and the resulting objects are compared via +//reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter. +func MatchYAML(yaml interface{}) types.GomegaMatcher { + return &matchers.MatchYAMLMatcher{ + YAMLToMatch: yaml, + } +} + //BeEmpty succeeds if actual is empty. Actual must be of type string, array, map, chan, or slice. func BeEmpty() types.GomegaMatcher { return &matchers.BeEmptyMatcher{} @@ -217,6 +235,13 @@ func HaveLen(count int) types.GomegaMatcher { } } +//HaveCap succeeds if actual has the passed-in capacity. Actual must be of type array, chan, or slice. +func HaveCap(count int) types.GomegaMatcher { + return &matchers.HaveCapMatcher{ + Count: count, + } +} + //BeZero succeeds if actual is the zero value for its type or if actual is nil. func BeZero() types.GomegaMatcher { return &matchers.BeZeroMatcher{} @@ -343,3 +368,51 @@ func BeARegularFile() types.GomegaMatcher { func BeADirectory() types.GomegaMatcher { return &matchers.BeADirectoryMatcher{} } + +//And succeeds only if all of the given matchers succeed. +//The matchers are tried in order, and will fail-fast if one doesn't succeed. +// Expect("hi").To(And(HaveLen(2), Equal("hi")) +// +//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func And(ms ...types.GomegaMatcher) types.GomegaMatcher { + return &matchers.AndMatcher{Matchers: ms} +} + +//SatisfyAll is an alias for And(). +// Ω("hi").Should(SatisfyAll(HaveLen(2), Equal("hi"))) +func SatisfyAll(matchers ...types.GomegaMatcher) types.GomegaMatcher { + return And(matchers...) +} + +//Or succeeds if any of the given matchers succeed. +//The matchers are tried in order and will return immediately upon the first successful match. +// Expect("hi").To(Or(HaveLen(3), HaveLen(2)) +// +//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func Or(ms ...types.GomegaMatcher) types.GomegaMatcher { + return &matchers.OrMatcher{Matchers: ms} +} + +//SatisfyAny is an alias for Or(). +// Expect("hi").SatisfyAny(Or(HaveLen(3), HaveLen(2)) +func SatisfyAny(matchers ...types.GomegaMatcher) types.GomegaMatcher { + return Or(matchers...) +} + +//Not negates the given matcher; it succeeds if the given matcher fails. +// Expect(1).To(Not(Equal(2)) +// +//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func Not(matcher types.GomegaMatcher) types.GomegaMatcher { + return &matchers.NotMatcher{Matcher: matcher} +} + +//WithTransform applies the `transform` to the actual value and matches it against `matcher`. +//The given transform must be a function of one parameter that returns one value. +// var plus1 = func(i int) int { return i + 1 } +// Expect(1).To(WithTransform(plus1, Equal(2)) +// +//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func WithTransform(transform interface{}, matcher types.GomegaMatcher) types.GomegaMatcher { + return matchers.NewWithTransformMatcher(transform, matcher) +} diff --git a/vendor/github.com/onsi/gomega/matchers/and.go b/vendor/github.com/onsi/gomega/matchers/and.go new file mode 100644 index 0000000..94c42a7 --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/and.go @@ -0,0 +1,64 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/internal/oraclematcher" + "github.com/onsi/gomega/types" +) + +type AndMatcher struct { + Matchers []types.GomegaMatcher + + // state + firstFailedMatcher types.GomegaMatcher +} + +func (m *AndMatcher) Match(actual interface{}) (success bool, err error) { + m.firstFailedMatcher = nil + for _, matcher := range m.Matchers { + success, err := matcher.Match(actual) + if !success || err != nil { + m.firstFailedMatcher = matcher + return false, err + } + } + return true, nil +} + +func (m *AndMatcher) FailureMessage(actual interface{}) (message string) { + return m.firstFailedMatcher.FailureMessage(actual) +} + +func (m *AndMatcher) NegatedFailureMessage(actual interface{}) (message string) { + // not the most beautiful list of matchers, but not bad either... + return format.Message(actual, fmt.Sprintf("To not satisfy all of these matchers: %s", m.Matchers)) +} + +func (m *AndMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + /* + Example with 3 matchers: A, B, C + + Match evaluates them: T, F, => F + So match is currently F, what should MatchMayChangeInTheFuture() return? + Seems like it only depends on B, since currently B MUST change to allow the result to become T + + Match eval: T, T, T => T + So match is currently T, what should MatchMayChangeInTheFuture() return? + Seems to depend on ANY of them being able to change to F. + */ + + if m.firstFailedMatcher == nil { + // so all matchers succeeded.. Any one of them changing would change the result. + for _, matcher := range m.Matchers { + if oraclematcher.MatchMayChangeInTheFuture(matcher, actual) { + return true + } + } + return false // none of were going to change + } else { + // one of the matchers failed.. it must be able to change in order to affect the result + return oraclematcher.MatchMayChangeInTheFuture(m.firstFailedMatcher, actual) + } +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go b/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go rename to vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_directory.go b/vendor/github.com/onsi/gomega/matchers/be_a_directory.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_directory.go rename to vendor/github.com/onsi/gomega/matchers/be_a_directory.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_regular_file.go b/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_a_regular_file.go rename to vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_an_existing_file.go b/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_an_existing_file.go rename to vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_closed_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_closed_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_empty_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_empty_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_false_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_false_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_false_matcher.go diff --git a/vendor/github.com/onsi/gomega/matchers/be_identical_to.go b/vendor/github.com/onsi/gomega/matchers/be_identical_to.go new file mode 100644 index 0000000..fdcda4d --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/be_identical_to.go @@ -0,0 +1,37 @@ +package matchers + +import ( + "fmt" + "runtime" + + "github.com/onsi/gomega/format" +) + +type BeIdenticalToMatcher struct { + Expected interface{} +} + +func (matcher *BeIdenticalToMatcher) Match(actual interface{}) (success bool, matchErr error) { + if actual == nil && matcher.Expected == nil { + return false, fmt.Errorf("Refusing to compare to .\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.") + } + + defer func() { + if r := recover(); r != nil { + if _, ok := r.(runtime.Error); ok { + success = false + matchErr = nil + } + } + }() + + return actual == matcher.Expected, nil +} + +func (matcher *BeIdenticalToMatcher) FailureMessage(actual interface{}) string { + return format.Message(actual, "to be identical to", matcher.Expected) +} + +func (matcher *BeIdenticalToMatcher) NegatedFailureMessage(actual interface{}) string { + return format.Message(actual, "not to be identical to", matcher.Expected) +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_nil_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_nil_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_numerically_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_numerically_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_sent_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_sent_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_temporally_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_temporally_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_true_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_true_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_true_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_zero_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/be_zero_matcher.go rename to vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/consist_of.go b/vendor/github.com/onsi/gomega/matchers/consist_of.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/consist_of.go rename to vendor/github.com/onsi/gomega/matchers/consist_of.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_element_matcher.go b/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_element_matcher.go rename to vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_substring_matcher.go b/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/contain_substring_matcher.go rename to vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/equal_matcher.go b/vendor/github.com/onsi/gomega/matchers/equal_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/equal_matcher.go rename to vendor/github.com/onsi/gomega/matchers/equal_matcher.go diff --git a/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go new file mode 100644 index 0000000..7ace93d --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go @@ -0,0 +1,28 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveCapMatcher struct { + Count int +} + +func (matcher *HaveCapMatcher) Match(actual interface{}) (success bool, err error) { + length, ok := capOf(actual) + if !ok { + return false, fmt.Errorf("HaveCap matcher expects a array/channel/slice. Got:\n%s", format.Object(actual, 1)) + } + + return length == matcher.Count, nil +} + +func (matcher *HaveCapMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nto have capacity %d", format.Object(actual, 1), matcher.Count) +} + +func (matcher *HaveCapMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nnot to have capacity %d", format.Object(actual, 1), matcher.Count) +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_matcher.go rename to vendor/github.com/onsi/gomega/matchers/have_key_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go rename to vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_len_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_len_matcher.go rename to vendor/github.com/onsi/gomega/matchers/have_len_matcher.go diff --git a/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go new file mode 100644 index 0000000..ebdd717 --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go @@ -0,0 +1,33 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveOccurredMatcher struct { +} + +func (matcher *HaveOccurredMatcher) Match(actual interface{}) (success bool, err error) { + // is purely nil? + if actual == nil { + return false, nil + } + + // must be an 'error' type + if !isError(actual) { + return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1)) + } + + // must be non-nil (or a pointer to a non-nil) + return !isNil(actual), nil +} + +func (matcher *HaveOccurredMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected an error to have occurred. Got:\n%s", format.Object(actual, 1)) +} + +func (matcher *HaveOccurredMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected error:\n%s\n%s\n%s", format.Object(actual, 1), format.IndentString(actual.(error).Error(), 1), "not to have occurred") +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_prefix_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_prefix_matcher.go rename to vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_suffix_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go similarity index 95% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_suffix_matcher.go rename to vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go index eb1b284..afc78fc 100644 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/have_suffix_matcher.go +++ b/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go @@ -16,7 +16,7 @@ func (matcher *HaveSuffixMatcher) Match(actual interface{}) (success bool, err e return false, fmt.Errorf("HaveSuffix matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1)) } suffix := matcher.suffix() - return len(actualString) >= len(suffix) && actualString[len(actualString) - len(suffix):] == suffix, nil + return len(actualString) >= len(suffix) && actualString[len(actualString)-len(suffix):] == suffix, nil } func (matcher *HaveSuffixMatcher) suffix() string { diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_error_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_error_matcher.go rename to vendor/github.com/onsi/gomega/matchers/match_error_matcher.go diff --git a/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go new file mode 100644 index 0000000..e61978a --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go @@ -0,0 +1,64 @@ +package matchers + +import ( + "bytes" + "encoding/json" + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type MatchJSONMatcher struct { + JSONToMatch interface{} +} + +func (matcher *MatchJSONMatcher) Match(actual interface{}) (success bool, err error) { + actualString, expectedString, err := matcher.prettyPrint(actual) + if err != nil { + return false, err + } + + var aval interface{} + var eval interface{} + + // this is guarded by prettyPrint + json.Unmarshal([]byte(actualString), &aval) + json.Unmarshal([]byte(expectedString), &eval) + + return reflect.DeepEqual(aval, eval), nil +} + +func (matcher *MatchJSONMatcher) FailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.prettyPrint(actual) + return format.Message(actualString, "to match JSON of", expectedString) +} + +func (matcher *MatchJSONMatcher) NegatedFailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.prettyPrint(actual) + return format.Message(actualString, "not to match JSON of", expectedString) +} + +func (matcher *MatchJSONMatcher) prettyPrint(actual interface{}) (actualFormatted, expectedFormatted string, err error) { + actualString, ok := toString(actual) + if !ok { + return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1)) + } + expectedString, ok := toString(matcher.JSONToMatch) + if !ok { + return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.JSONToMatch, 1)) + } + + abuf := new(bytes.Buffer) + ebuf := new(bytes.Buffer) + + if err := json.Indent(abuf, []byte(actualString), "", " "); err != nil { + return "", "", fmt.Errorf("Actual '%s' should be valid JSON, but it is not.\nUnderlying error:%s", actualString, err) + } + + if err := json.Indent(ebuf, []byte(expectedString), "", " "); err != nil { + return "", "", fmt.Errorf("Expected '%s' should be valid JSON, but it is not.\nUnderlying error:%s", expectedString, err) + } + + return abuf.String(), ebuf.String(), nil +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_regexp_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/match_regexp_matcher.go rename to vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go diff --git a/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go new file mode 100644 index 0000000..69fb51a --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go @@ -0,0 +1,74 @@ +package matchers + +import ( + "fmt" + "reflect" + "strings" + + "github.com/onsi/gomega/format" + "gopkg.in/yaml.v2" +) + +type MatchYAMLMatcher struct { + YAMLToMatch interface{} +} + +func (matcher *MatchYAMLMatcher) Match(actual interface{}) (success bool, err error) { + actualString, expectedString, err := matcher.toStrings(actual) + if err != nil { + return false, err + } + + var aval interface{} + var eval interface{} + + if err := yaml.Unmarshal([]byte(actualString), &aval); err != nil { + return false, fmt.Errorf("Actual '%s' should be valid YAML, but it is not.\nUnderlying error:%s", actualString, err) + } + if err := yaml.Unmarshal([]byte(expectedString), &eval); err != nil { + return false, fmt.Errorf("Expected '%s' should be valid YAML, but it is not.\nUnderlying error:%s", expectedString, err) + } + + return reflect.DeepEqual(aval, eval), nil +} + +func (matcher *MatchYAMLMatcher) FailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.toNormalisedStrings(actual) + return format.Message(actualString, "to match YAML of", expectedString) +} + +func (matcher *MatchYAMLMatcher) NegatedFailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.toNormalisedStrings(actual) + return format.Message(actualString, "not to match YAML of", expectedString) +} + +func (matcher *MatchYAMLMatcher) toNormalisedStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) { + actualString, expectedString, err := matcher.toStrings(actual) + return normalise(actualString), normalise(expectedString), err +} + +func normalise(input string) string { + var val interface{} + err := yaml.Unmarshal([]byte(input), &val) + if err != nil { + panic(err) // guarded by Match + } + output, err := yaml.Marshal(val) + if err != nil { + panic(err) // guarded by Unmarshal + } + return strings.TrimSpace(string(output)) +} + +func (matcher *MatchYAMLMatcher) toStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) { + actualString, ok := toString(actual) + if !ok { + return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1)) + } + expectedString, ok := toString(matcher.YAMLToMatch) + if !ok { + return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.YAMLToMatch, 1)) + } + + return actualString, expectedString, nil +} diff --git a/vendor/github.com/onsi/gomega/matchers/not.go b/vendor/github.com/onsi/gomega/matchers/not.go new file mode 100644 index 0000000..2c91670 --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/not.go @@ -0,0 +1,30 @@ +package matchers + +import ( + "github.com/onsi/gomega/internal/oraclematcher" + "github.com/onsi/gomega/types" +) + +type NotMatcher struct { + Matcher types.GomegaMatcher +} + +func (m *NotMatcher) Match(actual interface{}) (bool, error) { + success, err := m.Matcher.Match(actual) + if err != nil { + return false, err + } + return !success, nil +} + +func (m *NotMatcher) FailureMessage(actual interface{}) (message string) { + return m.Matcher.NegatedFailureMessage(actual) // works beautifully +} + +func (m *NotMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return m.Matcher.FailureMessage(actual) // works beautifully +} + +func (m *NotMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + return oraclematcher.MatchMayChangeInTheFuture(m.Matcher, actual) // just return m.Matcher's value +} diff --git a/vendor/github.com/onsi/gomega/matchers/or.go b/vendor/github.com/onsi/gomega/matchers/or.go new file mode 100644 index 0000000..3bf7998 --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/or.go @@ -0,0 +1,67 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/internal/oraclematcher" + "github.com/onsi/gomega/types" +) + +type OrMatcher struct { + Matchers []types.GomegaMatcher + + // state + firstSuccessfulMatcher types.GomegaMatcher +} + +func (m *OrMatcher) Match(actual interface{}) (success bool, err error) { + m.firstSuccessfulMatcher = nil + for _, matcher := range m.Matchers { + success, err := matcher.Match(actual) + if err != nil { + return false, err + } + if success { + m.firstSuccessfulMatcher = matcher + return true, nil + } + } + return false, nil +} + +func (m *OrMatcher) FailureMessage(actual interface{}) (message string) { + // not the most beautiful list of matchers, but not bad either... + return format.Message(actual, fmt.Sprintf("To satisfy at least one of these matchers: %s", m.Matchers)) +} + +func (m *OrMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return m.firstSuccessfulMatcher.NegatedFailureMessage(actual) +} + +func (m *OrMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + /* + Example with 3 matchers: A, B, C + + Match evaluates them: F, T, => T + So match is currently T, what should MatchMayChangeInTheFuture() return? + Seems like it only depends on B, since currently B MUST change to allow the result to become F + + Match eval: F, F, F => F + So match is currently F, what should MatchMayChangeInTheFuture() return? + Seems to depend on ANY of them being able to change to T. + */ + + if m.firstSuccessfulMatcher != nil { + // one of the matchers succeeded.. it must be able to change in order to affect the result + return oraclematcher.MatchMayChangeInTheFuture(m.firstSuccessfulMatcher, actual) + } else { + // so all matchers failed.. Any one of them changing would change the result. + for _, matcher := range m.Matchers { + if oraclematcher.MatchMayChangeInTheFuture(matcher, actual) { + return true + } + } + return false // none of were going to change + } +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/panic_matcher.go b/vendor/github.com/onsi/gomega/matchers/panic_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/panic_matcher.go rename to vendor/github.com/onsi/gomega/matchers/panic_matcher.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/receive_matcher.go b/vendor/github.com/onsi/gomega/matchers/receive_matcher.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/receive_matcher.go rename to vendor/github.com/onsi/gomega/matchers/receive_matcher.go diff --git a/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go b/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go new file mode 100644 index 0000000..721ed55 --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go @@ -0,0 +1,33 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type SucceedMatcher struct { +} + +func (matcher *SucceedMatcher) Match(actual interface{}) (success bool, err error) { + // is purely nil? + if actual == nil { + return true, nil + } + + // must be an 'error' type + if !isError(actual) { + return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1)) + } + + // must be nil (or a pointer to a nil) + return isNil(actual), nil +} + +func (matcher *SucceedMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected success, but got an error:\n%s\n%s", format.Object(actual, 1), format.IndentString(actual.(error).Error(), 1)) +} + +func (matcher *SucceedMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return "Expected failure, but got no error." +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go rename to vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go rename to vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go rename to vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/node/node.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/support/goraph/node/node.go rename to vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go new file mode 100644 index 0000000..d76a1ee --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go @@ -0,0 +1,7 @@ +package util + +import "math" + +func Odd(n int) bool { + return math.Mod(float64(n), 2.0) == 1.0 +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/type_support.go b/vendor/github.com/onsi/gomega/matchers/type_support.go similarity index 93% rename from Godeps/_workspace/src/github.com/onsi/gomega/matchers/type_support.go rename to vendor/github.com/onsi/gomega/matchers/type_support.go index ef9b448..04020f0 100644 --- a/Godeps/_workspace/src/github.com/onsi/gomega/matchers/type_support.go +++ b/vendor/github.com/onsi/gomega/matchers/type_support.go @@ -150,6 +150,17 @@ func lengthOf(a interface{}) (int, bool) { return 0, false } } +func capOf(a interface{}) (int, bool) { + if a == nil { + return 0, false + } + switch reflect.TypeOf(a).Kind() { + case reflect.Array, reflect.Chan, reflect.Slice: + return reflect.ValueOf(a).Cap(), true + default: + return 0, false + } +} func isNil(a interface{}) bool { if a == nil { diff --git a/vendor/github.com/onsi/gomega/matchers/with_transform.go b/vendor/github.com/onsi/gomega/matchers/with_transform.go new file mode 100644 index 0000000..8e58d8a --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/with_transform.go @@ -0,0 +1,72 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/internal/oraclematcher" + "github.com/onsi/gomega/types" +) + +type WithTransformMatcher struct { + // input + Transform interface{} // must be a function of one parameter that returns one value + Matcher types.GomegaMatcher + + // cached value + transformArgType reflect.Type + + // state + transformedValue interface{} +} + +func NewWithTransformMatcher(transform interface{}, matcher types.GomegaMatcher) *WithTransformMatcher { + if transform == nil { + panic("transform function cannot be nil") + } + txType := reflect.TypeOf(transform) + if txType.NumIn() != 1 { + panic("transform function must have 1 argument") + } + if txType.NumOut() != 1 { + panic("transform function must have 1 return value") + } + + return &WithTransformMatcher{ + Transform: transform, + Matcher: matcher, + transformArgType: reflect.TypeOf(transform).In(0), + } +} + +func (m *WithTransformMatcher) Match(actual interface{}) (bool, error) { + // return error if actual's type is incompatible with Transform function's argument type + actualType := reflect.TypeOf(actual) + if !actualType.AssignableTo(m.transformArgType) { + return false, fmt.Errorf("Transform function expects '%s' but we have '%s'", m.transformArgType, actualType) + } + + // call the Transform function with `actual` + fn := reflect.ValueOf(m.Transform) + result := fn.Call([]reflect.Value{reflect.ValueOf(actual)}) + m.transformedValue = result[0].Interface() // expect exactly one value + + return m.Matcher.Match(m.transformedValue) +} + +func (m *WithTransformMatcher) FailureMessage(_ interface{}) (message string) { + return m.Matcher.FailureMessage(m.transformedValue) +} + +func (m *WithTransformMatcher) NegatedFailureMessage(_ interface{}) (message string) { + return m.Matcher.NegatedFailureMessage(m.transformedValue) +} + +func (m *WithTransformMatcher) MatchMayChangeInTheFuture(_ interface{}) bool { + // TODO: Maybe this should always just return true? (Only an issue for non-deterministic transformers.) + // + // Querying the next matcher is fine if the transformer always will return the same value. + // But if the transformer is non-deterministic and returns a different value each time, then there + // is no point in querying the next matcher, since it can only comment on the last transformed value. + return oraclematcher.MatchMayChangeInTheFuture(m.Matcher, m.transformedValue) +} diff --git a/Godeps/_workspace/src/github.com/onsi/gomega/types/types.go b/vendor/github.com/onsi/gomega/types/types.go similarity index 100% rename from Godeps/_workspace/src/github.com/onsi/gomega/types/types.go rename to vendor/github.com/onsi/gomega/types/types.go diff --git a/vendor/github.com/tedsuo/rata/LICENSE b/vendor/github.com/tedsuo/rata/LICENSE new file mode 100644 index 0000000..673e132 --- /dev/null +++ b/vendor/github.com/tedsuo/rata/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Ted Young + +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/tedsuo/rata/README.md b/vendor/github.com/tedsuo/rata/README.md new file mode 100644 index 0000000..495cb2b --- /dev/null +++ b/vendor/github.com/tedsuo/rata/README.md @@ -0,0 +1,67 @@ +# Rata: It's a smat rata. Wicked smat. +Rata is a router with Pat-style path patterns, plus more. + +API Docs: https://godoc.org/github.com/tedsuo/rata + +Package rata provides three things: Routes, a Router, and a RequestGenerator. + +Routes are structs that define which Method and Path each associated http handler +should respond to. Unlike many router implementations, the routes and the handlers +are defined separately. This allows for the routes to be reused in multiple contexts. +For example, a proxy server and a backend server can be created by having one set of +Routes, but two sets of Handlers (one handler that proxies, another that serves the +request). Likewise, your client code can use the routes with the RequestGenerator to +create requests that use the same routes. Then, if the routes change, unit tests in +the client and proxy service will warn you of the problem. This contract helps components +stay in sync while relying less on integration tests. + +For example, let's imagine that you want to implement a "pet" resource that allows +you to view, create, update, and delete which pets people own. Also, you would +like to include the owner_id and pet_id as part of the URL path. + +First off, the routes might look like this: +```go + petRoutes := rata.Routes{ + {Name: "get_pet", Method: rata.GET, Path: "/people/:owner_id/pets/:pet_id"}, + {Name: "create_pet", Method: rata.POST, Path: "/people/:owner_id/pets"}, + {Name: "update_pet", Method: rata.PUT, Path: "/people/:owner_id/pets/:pet_id"}, + {Name: "delete_pet", Method: rata.DELETE, Path: "/people/:owner_id/pets/:pet_id"}, + } +``` + +On the server, create a matching set of http handlers, one for each route: +```go + petHandlers := rata.Handlers{ + "get_pet": newGetPetHandler(), + "create_pet": newCreatePetHandler(), + "update_pet": newUpdatePetHandler(), + "delete_pet": newDeletePetHandler() + } +``` + +You can create a router by mixing the routes and handlers together: +```go + router, err := rata.NewRouter(petRoutes, petHandlers) + if err != nil { + panic(err) + } + + // The router is just an http.Handler, so it can be used to create a server in the usual fashion: + server := httptest.NewServer(router) +``` + +Handlers can obtain parameters derived from the URL path: +```go + ownerId := rata.Param(request, "owner_id") +``` + +Meanwhile, on the client side, you can create a request generator: +```go + requestGenerator := rata.NewRequestGenerator(server.URL, petRoutes) + + // You can use the request generator to ensure you are creating a valid request: + req, err := requestGenerator.CreateRequest("get_pet", rata.Params{"owner_id": "123", "pet_id": "5"}, nil) + + // The generated request can be used like any other http.Request object: + res, err := http.DefaultClient.Do(req) +``` diff --git a/vendor/github.com/tedsuo/rata/VERSION b/vendor/github.com/tedsuo/rata/VERSION new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/vendor/github.com/tedsuo/rata/VERSION @@ -0,0 +1 @@ +1.0.0 diff --git a/vendor/github.com/tedsuo/rata/docs.go b/vendor/github.com/tedsuo/rata/docs.go new file mode 100644 index 0000000..f54cdce --- /dev/null +++ b/vendor/github.com/tedsuo/rata/docs.go @@ -0,0 +1,57 @@ +/* +Package rata provides three things: Routes, a Router, and a RequestGenerator. + +Routes are structs that define which Method and Path each associated http handler +should respond to. Unlike many router implementations, the routes and the handlers +are defined separately. This allows for the routes to be reused in multiple contexts. +For example, a proxy server and a backend server can be created by having one set of +Routes, but two sets of Handlers (one handler that proxies, another that serves the +request). Likewise, your client code can use the routes with the RequestGenerator to +create requests that use the same routes. Then, if the routes change, unit tests in +the client and proxy service will warn you of the problem. This contract helps components +stay in sync while relying less on integration tests. + +For example, let's imagine that you want to implement a "pet" resource that allows +you to view, create, update, and delete which pets people own. Also, you would +like to include the owner_id and pet_id as part of the URL path. + +First off, the routes might look like this: + petRoutes := rata.Routes{ + {Name: "get_pet", Method: rata.GET, Path: "/people/:owner_id/pets/:pet_id"}, + {Name: "create_pet", Method: rata.POST, Path: "/people/:owner_id/pets"}, + {Name: "update_pet", Method: rata.PUT, Path: "/people/:owner_id/pets/:pet_id"}, + {Name: "delete_pet", Method: rata.DELETE, Path: "/people/:owner_id/pets/:pet_id"}, + } + + +On the server, create a matching set of http handlers, one for each route: + handlers := rata.Handlers{ + "get_pet": newGetPetHandler(), + "create_pet": newCreatePetHandler(), + "update_pet": newUpdatePetHandler(), + "delete_pet": newDeletePetHandler() + } + +You can create a router by mixing the routes and handlers together: + router, err := rata.NewRouter(petRoutes, handlers) + if err != nil { + panic(err) + } + +The router is just an http.Handler, so it can be used to create a server in the usual fashion: + server := httptest.NewServer(router) + +The handlers can obtain parameters derived from the URL path: + + ownerId := rata.Param(request, "owner_id") + +Meanwhile, on the client side, you can create a request generator: + requestGenerator := rata.NewRequestGenerator(server.URL, petRoutes) + +You can use the request generator to ensure you are creating a valid request: + req, err := requestGenerator.CreateRequest("get_pet", rata.Params{"owner_id": "123", "pet_id": "5"}, nil) + +The generated request can be used like any other http.Request object: + res, err := http.DefaultClient.Do(req) +*/ +package rata diff --git a/vendor/github.com/tedsuo/rata/param.go b/vendor/github.com/tedsuo/rata/param.go new file mode 100644 index 0000000..5ba64f0 --- /dev/null +++ b/vendor/github.com/tedsuo/rata/param.go @@ -0,0 +1,8 @@ +package rata + +import "net/http" + +// Param returns the parameter with the given name from the given request. +func Param(req *http.Request, paramName string) string { + return req.URL.Query().Get(":" + paramName) +} diff --git a/vendor/github.com/tedsuo/rata/requests.go b/vendor/github.com/tedsuo/rata/requests.go new file mode 100644 index 0000000..9551dd4 --- /dev/null +++ b/vendor/github.com/tedsuo/rata/requests.go @@ -0,0 +1,60 @@ +package rata + +import ( + "fmt" + "io" + "net/http" + "strings" +) + +// RequestGenerator creates http.Request objects with the correct path and method +// pre-filled for the given route object. You can also set the the host and, +// optionally, any headers you would like included with every request. +type RequestGenerator struct { + Header http.Header + host string + routes Routes +} + +// NewRequestGenerator creates a RequestGenerator for a given host and route set. +// Host is of the form "http://example.com". +func NewRequestGenerator(host string, routes Routes) *RequestGenerator { + return &RequestGenerator{ + Header: make(http.Header), + host: host, + routes: routes, + } +} + +// CreateRequest creates a new http Request for the matching handler. If the +// request cannot be created, either because the handler does not exist or because +// the given params do not match the params the route requires, then CreateRequest +// returns an error. +func (r *RequestGenerator) CreateRequest( + name string, + params Params, + body io.Reader, +) (*http.Request, error) { + route, ok := r.routes.FindRouteByName(name) + if !ok { + return &http.Request{}, fmt.Errorf("No route exists with the name %s", name) + } + path, err := route.CreatePath(params) + if err != nil { + return &http.Request{}, err + } + + url := r.host + "/" + strings.TrimLeft(path, "/") + + req, err := http.NewRequest(route.Method, url, body) + if err != nil { + return &http.Request{}, err + } + + for key, values := range r.Header { + req.Header[key] = make([]string, len(values)) + copy(req.Header[key], values) + } + + return req, nil +} diff --git a/vendor/github.com/tedsuo/rata/router.go b/vendor/github.com/tedsuo/rata/router.go new file mode 100644 index 0000000..ea4dd7f --- /dev/null +++ b/vendor/github.com/tedsuo/rata/router.go @@ -0,0 +1,49 @@ +package rata + +import ( + "fmt" + "net/http" + "strings" + + "github.com/bmizerany/pat" +) + +// Supported HTTP methods. +const ( + GET = "GET" + HEAD = "HEAD" + POST = "POST" + PUT = "PUT" + PATCH = "PATCH" + DELETE = "DELETE" + CONNECT = "CONNECT" + OPTIONS = "OPTIONS" + TRACE = "TRACE" +) + +// Handlers map route names to http.Handler objects. Each Handler key must +// match a route Name in the Routes collection. +type Handlers map[string]http.Handler + +// NewRouter combines a set of Routes with their corresponding Handlers to +// produce a http request multiplexer (AKA a "router"). If any route does +// not have a matching handler, an error occurs. +func NewRouter(routes Routes, handlers Handlers) (http.Handler, error) { + p := pat.New() + + for _, route := range routes { + handler, ok := handlers[route.Name] + if !ok { + return nil, fmt.Errorf("missing handler %s", route.Name) + } + + switch method := strings.ToUpper(route.Method); method { + case GET, HEAD, POST, PUT, PATCH, DELETE, CONNECT, OPTIONS, TRACE: + p.Add(method, route.Path, handler) + default: + return nil, fmt.Errorf("invalid verb: %s", route.Method) + } + } + + return p, nil +} diff --git a/vendor/github.com/tedsuo/rata/routes.go b/vendor/github.com/tedsuo/rata/routes.go new file mode 100644 index 0000000..544110a --- /dev/null +++ b/vendor/github.com/tedsuo/rata/routes.go @@ -0,0 +1,122 @@ +package rata + +import ( + "fmt" + "net/http" + "net/url" + "runtime" + "strings" +) + +// Params map path keys to values. For example, if your route has the path pattern: +// /person/:person_id/pets/:pet_type +// Then a correct Params map would lool like: +// router.Params{ +// "person_id": "123", +// "pet_type": "cats", +// } +type Params map[string]string + +// A Route defines properties of an HTTP endpoint. At runtime, the router will +// associate each Route with a http.Handler object, and use the Route properties +// to determine which Handler should be invoked. +// +// Currently, the properties used for matching are Method and Path. +// +// Method can be one of the following: +// GET HEAD POST PUT PATCH DELETE CONNECT OPTIONS TRACE +// +// Path conforms to Pat-style pattern matching. The following docs are taken from +// http://godoc.org/github.com/bmizerany/pat#PatternServeMux +// +// Path Patterns may contain literals or captures. Capture names start with a colon +// and consist of letters A-Z, a-z, _, and 0-9. The rest of the pattern +// matches literally. The portion of the URL matching each name ends with an +// occurrence of the character in the pattern immediately following the name, +// or a /, whichever comes first. It is possible for a name to match the empty +// string. +// +// Example pattern with one capture: +// /hello/:name +// Will match: +// /hello/blake +// /hello/keith +// Will not match: +// /hello/blake/ +// /hello/blake/foo +// /foo +// /foo/bar +// +// Example 2: +// /hello/:name/ +// Will match: +// /hello/blake/ +// /hello/keith/foo +// /hello/blake +// /hello/keith +// Will not match: +// /foo +// /foo/bar +type Route struct { + // Name is a key specifying which HTTP handler the router + // should associate with the endpoint at runtime. + Name string + // Method is any valid HTTP method + Method string + // Path contains a path pattern + Path string +} + +// CreatePath combines the route's path pattern with a Params map +// to produce a valid path. +func (r Route) CreatePath(params Params) (string, error) { + components := strings.Split(r.Path, "/") + for i, c := range components { + if len(c) == 0 { + continue + } + if c[0] == ':' { + val, ok := params[c[1:]] + if !ok { + return "", fmt.Errorf("missing param %s", c) + } + components[i] = val + } + } + + u, err := url.Parse(strings.Join(components, "/")) + if err != nil { + return "", err + } + return u.String(), nil +} + +// Routes is a Route collection. +type Routes []Route + +// Route looks up a Route by it's Handler key. +func (r Routes) FindRouteByName(name string) (Route, bool) { + for _, route := range r { + if route.Name == name { + return route, true + } + } + return Route{}, false +} + +// Path looks up a Route by it's Handler key and computes it's path +// with a given Params map. +func (r Routes) CreatePathForRoute(name string, params Params) (string, error) { + route, ok := r.FindRouteByName(name) + if !ok { + return "", fmt.Errorf("No route exists with the name %", name) + } + return route.CreatePath(params) +} + +// Router is deprecated, please use router.NewRouter() instead +func (r Routes) Router(handlers Handlers) (http.Handler, error) { + _, file, line, _ := runtime.Caller(1) + fmt.Printf("\n\033[0;35m%s\033[0m%s:%d:%s\n", "WARNING:", file, line, " Routes.Router() is deprecated, please use router.NewRouter() instead") + return NewRouter(r, handlers) +} diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/crypto/PATENTS b/vendor/golang.org/x/crypto/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/crypto/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go similarity index 93% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/terminal.go rename to vendor/golang.org/x/crypto/ssh/terminal/terminal.go index 965f0cf..18379a9 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/terminal.go +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go @@ -132,8 +132,11 @@ const ( keyPasteEnd ) -var pasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'} -var pasteEnd = []byte{keyEscape, '[', '2', '0', '1', '~'} +var ( + crlf = []byte{'\r', '\n'} + pasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'} + pasteEnd = []byte{keyEscape, '[', '2', '0', '1', '~'} +) // bytesToKey tries to parse a key sequence from b. If successful, it returns // the key and the remainder of the input. Otherwise it returns utf8.RuneError. @@ -333,7 +336,7 @@ func (t *Terminal) advanceCursor(places int) { // So, if we are stopping at the end of a line, we // need to write a newline so that our cursor can be // advanced to the next line. - t.outBuf = append(t.outBuf, '\n') + t.outBuf = append(t.outBuf, '\r', '\n') } } @@ -593,6 +596,35 @@ func (t *Terminal) writeLine(line []rune) { } } +// writeWithCRLF writes buf to w but replaces all occurrences of \n with \r\n. +func writeWithCRLF(w io.Writer, buf []byte) (n int, err error) { + for len(buf) > 0 { + i := bytes.IndexByte(buf, '\n') + todo := len(buf) + if i >= 0 { + todo = i + } + + var nn int + nn, err = w.Write(buf[:todo]) + n += nn + if err != nil { + return n, err + } + buf = buf[todo:] + + if i >= 0 { + if _, err = w.Write(crlf); err != nil { + return n, err + } + n += 1 + buf = buf[1:] + } + } + + return n, nil +} + func (t *Terminal) Write(buf []byte) (n int, err error) { t.lock.Lock() defer t.lock.Unlock() @@ -600,7 +632,7 @@ func (t *Terminal) Write(buf []byte) (n int, err error) { if t.cursorX == 0 && t.cursorY == 0 { // This is the easy case: there's nothing on the screen that we // have to move out of the way. - return t.c.Write(buf) + return writeWithCRLF(t.c, buf) } // We have a prompt and possibly user input on the screen. We @@ -620,7 +652,7 @@ func (t *Terminal) Write(buf []byte) (n int, err error) { } t.outBuf = t.outBuf[:0] - if n, err = t.c.Write(buf); err != nil { + if n, err = writeWithCRLF(t.c, buf); err != nil { return } @@ -740,8 +772,6 @@ func (t *Terminal) readLine() (line string, err error) { t.remainder = t.inBuf[:n+len(t.remainder)] } - - panic("unreachable") // for Go 1.0. } // SetPrompt sets the prompt to be used when reading subsequent lines. @@ -789,6 +819,10 @@ func (t *Terminal) SetSize(width, height int) error { // If the width didn't change then nothing else needs to be // done. return nil + case len(t.line) == 0 && t.cursorX == 0 && t.cursorY == 0: + // If there is nothing on current line and no prompt printed, + // just do nothing + return nil case width < oldWidth: // Some terminals (e.g. xterm) will truncate lines that were // too long when shinking. Others, (e.g. gnome-terminal) will @@ -886,3 +920,32 @@ func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) { } return s.entries[index], true } + +// readPasswordLine reads from reader until it finds \n or io.EOF. +// The slice returned does not include the \n. +// readPasswordLine also ignores any \r it finds. +func readPasswordLine(reader io.Reader) ([]byte, error) { + var buf [1]byte + var ret []byte + + for { + n, err := reader.Read(buf[:]) + if n > 0 { + switch buf[0] { + case '\n': + return ret, nil + case '\r': + // remove \r from passwords on Windows + default: + ret = append(ret, buf[0]) + } + continue + } + if err != nil { + if err == io.EOF && len(ret) > 0 { + return ret, nil + } + return ret, err + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util.go b/vendor/golang.org/x/crypto/ssh/terminal/util.go new file mode 100644 index 0000000..d9969b5 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util.go @@ -0,0 +1,119 @@ +// Copyright 2011 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. + +// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal + +import ( + "syscall" + "unsafe" +) + +// State contains the state of a terminal. +type State struct { + termios syscall.Termios +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + return nil, err + } + + newState := oldState.termios + // This attempts to replicate the behaviour documented for cfmakeraw in + // the termios(3) manpage. + newState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON + newState.Oflag &^= syscall.OPOST + newState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN + newState.Cflag &^= syscall.CSIZE | syscall.PARENB + newState.Cflag |= syscall.CS8 + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0); err != 0 { + return err + } + return nil +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + var dimensions [4]uint16 + + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 { + return -1, -1, err + } + return int(dimensions[1]), int(dimensions[0]), nil +} + +// passwordReader is an io.Reader that reads from a specific file descriptor. +type passwordReader int + +func (r passwordReader) Read(buf []byte) (int, error) { + return syscall.Read(int(r), buf) +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + var oldState syscall.Termios + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 { + return nil, err + } + + newState := oldState + newState.Lflag &^= syscall.ECHO + newState.Lflag |= syscall.ICANON | syscall.ISIG + newState.Iflag |= syscall.ICRNL + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + return nil, err + } + + defer func() { + syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0) + }() + + return readPasswordLine(passwordReader(fd)) +} diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_bsd.go b/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_bsd.go rename to vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_linux.go b/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_linux.go rename to vendor/golang.org/x/crypto/ssh/terminal/util_linux.go diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go new file mode 100644 index 0000000..799f049 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go @@ -0,0 +1,58 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal + +import ( + "fmt" + "runtime" +) + +type State struct{} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + return false +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + return nil, fmt.Errorf("terminal: MakeRaw not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + return nil, fmt.Errorf("terminal: GetState not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + return fmt.Errorf("terminal: Restore not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + return 0, 0, fmt.Errorf("terminal: GetSize not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + return nil, fmt.Errorf("terminal: ReadPassword not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go new file mode 100644 index 0000000..90d374a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go @@ -0,0 +1,73 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package terminal + +import ( + "golang.org/x/sys/unix" + "io" + "syscall" +) + +// State contains the state of a terminal. +type State struct { + termios syscall.Termios +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + // see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c + var termio unix.Termio + err := unix.IoctlSetTermio(fd, unix.TCGETA, &termio) + return err == nil +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + // see also: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libast/common/uwin/getpass.c + val, err := unix.IoctlGetTermios(fd, unix.TCGETS) + if err != nil { + return nil, err + } + oldState := *val + + newState := oldState + newState.Lflag &^= syscall.ECHO + newState.Lflag |= syscall.ICANON | syscall.ISIG + newState.Iflag |= syscall.ICRNL + err = unix.IoctlSetTermios(fd, unix.TCSETS, &newState) + if err != nil { + return nil, err + } + + defer unix.IoctlSetTermios(fd, unix.TCSETS, &oldState) + + var buf [16]byte + var ret []byte + for { + n, err := syscall.Read(fd, buf[:]) + if err != nil { + return nil, err + } + if n == 0 { + if len(ret) == 0 { + return nil, io.EOF + } + break + } + if buf[n-1] == '\n' { + n-- + } + ret = append(ret, buf[:n]...) + if n < len(buf) { + break + } + } + + return ret, nil +} diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_windows.go b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go similarity index 88% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_windows.go rename to vendor/golang.org/x/crypto/ssh/terminal/util_windows.go index 2dd6c3d..e0a1f36 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.crypto/ssh/terminal/util_windows.go +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go @@ -17,7 +17,6 @@ package terminal import ( - "io" "syscall" "unsafe" ) @@ -87,8 +86,8 @@ func MakeRaw(fd int) (*State, error) { if e != 0 { return nil, error(e) } - st &^= (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput) - _, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(st), 0) + raw := st &^ (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput) + _, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(raw), 0) if e != 0 { return nil, error(e) } @@ -123,6 +122,13 @@ func GetSize(fd int) (width, height int, err error) { return int(info.size.x), int(info.size.y), nil } +// passwordReader is an io.Reader that reads from a specific Windows HANDLE. +type passwordReader int + +func (r passwordReader) Read(buf []byte) (int, error) { + return syscall.Read(syscall.Handle(r), buf) +} + // ReadPassword reads a line of input from a terminal without local echo. This // is commonly used for inputting passwords and other sensitive data. The slice // returned does not include the \n. @@ -145,30 +151,5 @@ func ReadPassword(fd int) ([]byte, error) { syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(old), 0) }() - var buf [16]byte - var ret []byte - for { - n, err := syscall.Read(syscall.Handle(fd), buf[:]) - if err != nil { - return nil, err - } - if n == 0 { - if len(ret) == 0 { - return nil, io.EOF - } - break - } - if buf[n-1] == '\n' { - n-- - } - if n > 0 && buf[n-1] == '\r' { - n-- - } - ret = append(ret, buf[:n]...) - if n < len(buf) { - break - } - } - - return ret, nil + return readPasswordLine(passwordReader(fd)) } diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/net/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/net/PATENTS b/vendor/golang.org/x/net/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/net/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/net/websocket/client.go b/vendor/golang.org/x/net/websocket/client.go new file mode 100644 index 0000000..20d1e1e --- /dev/null +++ b/vendor/golang.org/x/net/websocket/client.go @@ -0,0 +1,113 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "crypto/tls" + "io" + "net" + "net/http" + "net/url" +) + +// DialError is an error that occurs while dialling a websocket server. +type DialError struct { + *Config + Err error +} + +func (e *DialError) Error() string { + return "websocket.Dial " + e.Config.Location.String() + ": " + e.Err.Error() +} + +// NewConfig creates a new WebSocket config for client connection. +func NewConfig(server, origin string) (config *Config, err error) { + config = new(Config) + config.Version = ProtocolVersionHybi13 + config.Location, err = url.ParseRequestURI(server) + if err != nil { + return + } + config.Origin, err = url.ParseRequestURI(origin) + if err != nil { + return + } + config.Header = http.Header(make(map[string][]string)) + return +} + +// NewClient creates a new WebSocket client connection over rwc. +func NewClient(config *Config, rwc io.ReadWriteCloser) (ws *Conn, err error) { + br := bufio.NewReader(rwc) + bw := bufio.NewWriter(rwc) + err = hybiClientHandshake(config, br, bw) + if err != nil { + return + } + buf := bufio.NewReadWriter(br, bw) + ws = newHybiClientConn(config, buf, rwc) + return +} + +// Dial opens a new client connection to a WebSocket. +func Dial(url_, protocol, origin string) (ws *Conn, err error) { + config, err := NewConfig(url_, origin) + if err != nil { + return nil, err + } + if protocol != "" { + config.Protocol = []string{protocol} + } + return DialConfig(config) +} + +var portMap = map[string]string{ + "ws": "80", + "wss": "443", +} + +func parseAuthority(location *url.URL) string { + if _, ok := portMap[location.Scheme]; ok { + if _, _, err := net.SplitHostPort(location.Host); err != nil { + return net.JoinHostPort(location.Host, portMap[location.Scheme]) + } + } + return location.Host +} + +// DialConfig opens a new client connection to a WebSocket with a config. +func DialConfig(config *Config) (ws *Conn, err error) { + var client net.Conn + if config.Location == nil { + return nil, &DialError{config, ErrBadWebSocketLocation} + } + if config.Origin == nil { + return nil, &DialError{config, ErrBadWebSocketOrigin} + } + switch config.Location.Scheme { + case "ws": + client, err = net.Dial("tcp", parseAuthority(config.Location)) + + case "wss": + client, err = tls.Dial("tcp", parseAuthority(config.Location), config.TlsConfig) + + default: + err = ErrBadScheme + } + if err != nil { + goto Error + } + + ws, err = NewClient(config, client) + if err != nil { + client.Close() + goto Error + } + return + +Error: + return nil, &DialError{config, err} +} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi.go b/vendor/golang.org/x/net/websocket/hybi.go similarity index 93% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi.go rename to vendor/golang.org/x/net/websocket/hybi.go index f8c0b2e..60bbc84 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi.go +++ b/vendor/golang.org/x/net/websocket/hybi.go @@ -157,6 +157,9 @@ func (buf hybiFrameReaderFactory) NewFrameReader() (frame frameReader, err error if err != nil { return } + if lengthFields == 8 && i == 0 { // MSB must be zero when 7+64 bits + b &= 0x7f + } header = append(header, b) hybiFrame.header.Length = hybiFrame.header.Length*256 + int64(b) } @@ -264,7 +267,7 @@ type hybiFrameHandler struct { payloadType byte } -func (handler *hybiFrameHandler) HandleFrame(frame frameReader) (r frameReader, err error) { +func (handler *hybiFrameHandler) HandleFrame(frame frameReader) (frameReader, error) { if handler.conn.IsServerConn() { // The client MUST mask all frames sent to the server. if frame.(*hybiFrameReader).header.MaskingKey == nil { @@ -288,20 +291,19 @@ func (handler *hybiFrameHandler) HandleFrame(frame frameReader) (r frameReader, handler.payloadType = frame.PayloadType() case CloseFrame: return nil, io.EOF - case PingFrame: - pingMsg := make([]byte, maxControlFramePayloadLength) - n, err := io.ReadFull(frame, pingMsg) - if err != nil && err != io.ErrUnexpectedEOF { + case PingFrame, PongFrame: + b := make([]byte, maxControlFramePayloadLength) + n, err := io.ReadFull(frame, b) + if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { return nil, err } io.Copy(ioutil.Discard, frame) - n, err = handler.WritePong(pingMsg[:n]) - if err != nil { - return nil, err + if frame.PayloadType() == PingFrame { + if _, err := handler.WritePong(b[:n]); err != nil { + return nil, err + } } return nil, nil - case PongFrame: - return nil, ErrNotImplemented } return frame, nil } @@ -370,6 +372,23 @@ func generateNonce() (nonce []byte) { return } +// removeZone removes IPv6 zone identifer from host. +// E.g., "[fe80::1%en0]:8080" to "[fe80::1]:8080" +func removeZone(host string) string { + if !strings.HasPrefix(host, "[") { + return host + } + i := strings.LastIndex(host, "]") + if i < 0 { + return host + } + j := strings.LastIndex(host[:i], "%") + if j < 0 { + return host + } + return host[:j] + host[i:] +} + // getNonceAccept computes the base64-encoded SHA-1 of the concatenation of // the nonce ("Sec-WebSocket-Key" value) with the websocket GUID string. func getNonceAccept(nonce []byte) (expected []byte, err error) { @@ -389,7 +408,10 @@ func getNonceAccept(nonce []byte) (expected []byte, err error) { func hybiClientHandshake(config *Config, br *bufio.Reader, bw *bufio.Writer) (err error) { bw.WriteString("GET " + config.Location.RequestURI() + " HTTP/1.1\r\n") - bw.WriteString("Host: " + config.Location.Host + "\r\n") + // According to RFC 6874, an HTTP client, proxy, or other + // intermediary must remove any IPv6 zone identifier attached + // to an outgoing URI. + bw.WriteString("Host: " + removeZone(config.Location.Host) + "\r\n") bw.WriteString("Upgrade: websocket\r\n") bw.WriteString("Connection: Upgrade\r\n") nonce := generateNonce() @@ -515,15 +537,15 @@ func (c *hybiServerHandshaker) ReadHandshake(buf *bufio.Reader, req *http.Reques return http.StatusSwitchingProtocols, nil } -// Origin parses Origin header in "req". -// If origin is "null", returns (nil, nil). +// Origin parses the Origin header in req. +// If the Origin header is not set, it returns nil and nil. func Origin(config *Config, req *http.Request) (*url.URL, error) { var origin string switch config.Version { case ProtocolVersionHybi13: origin = req.Header.Get("Origin") } - if origin == "null" { + if origin == "" { return nil, nil } return url.ParseRequestURI(origin) diff --git a/vendor/golang.org/x/net/websocket/server.go b/vendor/golang.org/x/net/websocket/server.go new file mode 100644 index 0000000..0895dea --- /dev/null +++ b/vendor/golang.org/x/net/websocket/server.go @@ -0,0 +1,113 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "fmt" + "io" + "net/http" +) + +func newServerConn(rwc io.ReadWriteCloser, buf *bufio.ReadWriter, req *http.Request, config *Config, handshake func(*Config, *http.Request) error) (conn *Conn, err error) { + var hs serverHandshaker = &hybiServerHandshaker{Config: config} + code, err := hs.ReadHandshake(buf.Reader, req) + if err == ErrBadWebSocketVersion { + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + fmt.Fprintf(buf, "Sec-WebSocket-Version: %s\r\n", SupportedProtocolVersion) + buf.WriteString("\r\n") + buf.WriteString(err.Error()) + buf.Flush() + return + } + if err != nil { + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + buf.WriteString("\r\n") + buf.WriteString(err.Error()) + buf.Flush() + return + } + if handshake != nil { + err = handshake(config, req) + if err != nil { + code = http.StatusForbidden + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + buf.WriteString("\r\n") + buf.Flush() + return + } + } + err = hs.AcceptHandshake(buf.Writer) + if err != nil { + code = http.StatusBadRequest + fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code)) + buf.WriteString("\r\n") + buf.Flush() + return + } + conn = hs.NewServerConn(buf, rwc, req) + return +} + +// Server represents a server of a WebSocket. +type Server struct { + // Config is a WebSocket configuration for new WebSocket connection. + Config + + // Handshake is an optional function in WebSocket handshake. + // For example, you can check, or don't check Origin header. + // Another example, you can select config.Protocol. + Handshake func(*Config, *http.Request) error + + // Handler handles a WebSocket connection. + Handler +} + +// ServeHTTP implements the http.Handler interface for a WebSocket +func (s Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { + s.serveWebSocket(w, req) +} + +func (s Server) serveWebSocket(w http.ResponseWriter, req *http.Request) { + rwc, buf, err := w.(http.Hijacker).Hijack() + if err != nil { + panic("Hijack failed: " + err.Error()) + } + // The server should abort the WebSocket connection if it finds + // the client did not send a handshake that matches with protocol + // specification. + defer rwc.Close() + conn, err := newServerConn(rwc, buf, req, &s.Config, s.Handshake) + if err != nil { + return + } + if conn == nil { + panic("unexpected nil conn") + } + s.Handler(conn) +} + +// Handler is a simple interface to a WebSocket browser client. +// It checks if Origin header is valid URL by default. +// You might want to verify websocket.Conn.Config().Origin in the func. +// If you use Server instead of Handler, you could call websocket.Origin and +// check the origin in your Handshake func. So, if you want to accept +// non-browser clients, which do not send an Origin header, set a +// Server.Handshake that does not check the origin. +type Handler func(*Conn) + +func checkOrigin(config *Config, req *http.Request) (err error) { + config.Origin, err = Origin(config, req) + if err == nil && config.Origin == nil { + return fmt.Errorf("null origin") + } + return err +} + +// ServeHTTP implements the http.Handler interface for a WebSocket +func (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + s := Server{Handler: h, Handshake: checkOrigin} + s.serveWebSocket(w, req) +} diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket.go b/vendor/golang.org/x/net/websocket/websocket.go similarity index 99% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket.go rename to vendor/golang.org/x/net/websocket/websocket.go index 0f4917b..da0dd96 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket.go +++ b/vendor/golang.org/x/net/websocket/websocket.go @@ -216,10 +216,11 @@ func (ws *Conn) Write(msg []byte) (n int, err error) { // Close implements the io.Closer interface. func (ws *Conn) Close() error { err := ws.frameHandler.WriteClose(ws.defaultCloseStatus) + err1 := ws.rwc.Close() if err != nil { return err } - return ws.rwc.Close() + return err1 } func (ws *Conn) IsClientConn() bool { return ws.request == nil } diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/sys/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/sys/PATENTS b/vendor/golang.org/x/sys/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/sys/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore new file mode 100644 index 0000000..e482715 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/.gitignore @@ -0,0 +1 @@ +_obj/ diff --git a/vendor/golang.org/x/sys/unix/asm.s b/vendor/golang.org/x/sys/unix/asm.s new file mode 100644 index 0000000..8ed2fdb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm.s @@ -0,0 +1,10 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +TEXT ·use(SB),NOSPLIT,$0 + RET diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_386.s b/vendor/golang.org/x/sys/unix/asm_darwin_386.s new file mode 100644 index 0000000..8a72783 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s b/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s new file mode 100644 index 0000000..6321421 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_arm.s b/vendor/golang.org/x/sys/unix/asm_darwin_arm.s new file mode 100644 index 0000000..333242d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_arm.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm,darwin + +#include "textflag.h" + +// +// System call support for ARM, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s b/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s new file mode 100644 index 0000000..97e0174 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm64,darwin + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s new file mode 100644 index 0000000..d5ed672 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, DragonFly +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-64 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-88 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-112 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-64 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_386.s b/vendor/golang.org/x/sys/unix/asm_freebsd_386.s new file mode 100644 index 0000000..c9a0a26 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s new file mode 100644 index 0000000..3517247 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s b/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s new file mode 100644 index 0000000..9227c87 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2012 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s new file mode 100644 index 0000000..4db2909 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_386.s @@ -0,0 +1,35 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for 386, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) + +TEXT ·seek(SB),NOSPLIT,$0-28 + JMP syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s new file mode 100644 index 0000000..44e25c6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for AMD64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·gettimeofday(SB),NOSPLIT,$0-16 + JMP syscall·gettimeofday(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s new file mode 100644 index 0000000..cf0b574 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for arm, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-32 + B syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s new file mode 100644 index 0000000..4be9bfe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s @@ -0,0 +1,24 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build arm64 +// +build !gccgo + +#include "textflag.h" + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s new file mode 100644 index 0000000..724e580 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s new file mode 100644 index 0000000..8d231fe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -0,0 +1,28 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for ppc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s new file mode 100644 index 0000000..1188985 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s @@ -0,0 +1,28 @@ +// Copyright 2016 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. + +// +build s390x +// +build linux +// +build !gccgo + +#include "textflag.h" + +// +// System calls for s390x, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_386.s b/vendor/golang.org/x/sys/unix/asm_netbsd_386.s new file mode 100644 index 0000000..48bdcd7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s new file mode 100644 index 0000000..2ede05c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s b/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s new file mode 100644 index 0000000..e892857 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_386.s b/vendor/golang.org/x/sys/unix/asm_openbsd_386.s new file mode 100644 index 0000000..00576f3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s new file mode 100644 index 0000000..790ef77 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s new file mode 100644 index 0000000..43ed17a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go +// + +TEXT ·sysvicall6(SB),NOSPLIT,$0-64 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-64 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go new file mode 100644 index 0000000..6e32296 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bluetooth_linux.go @@ -0,0 +1,35 @@ +// Copyright 2016 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. + +// Bluetooth sockets and messages + +package unix + +// Bluetooth Protocols +const ( + BTPROTO_L2CAP = 0 + BTPROTO_HCI = 1 + BTPROTO_SCO = 2 + BTPROTO_RFCOMM = 3 + BTPROTO_BNEP = 4 + BTPROTO_CMTP = 5 + BTPROTO_HIDP = 6 + BTPROTO_AVDTP = 7 +) + +const ( + HCI_CHANNEL_RAW = 0 + HCI_CHANNEL_USER = 1 + HCI_CHANNEL_MONITOR = 2 + HCI_CHANNEL_CONTROL = 3 +) + +// Socketoption Level +const ( + SOL_BLUETOOTH = 0x112 + SOL_HCI = 0x0 + SOL_L2CAP = 0x6 + SOL_RFCOMM = 0x12 + SOL_SCO = 0x11 +) diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go new file mode 100644 index 0000000..a96f0eb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/constants.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +const ( + R_OK = 0x4 + W_OK = 0x2 + X_OK = 0x1 +) diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go new file mode 100644 index 0000000..45e281a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unix.go @@ -0,0 +1,27 @@ +// Copyright 2010 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. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +// Unix environment variables. + +package unix + +import "syscall" + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/unix/env_unset.go b/vendor/golang.org/x/sys/unix/env_unset.go new file mode 100644 index 0000000..9222262 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unset.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package unix + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/unix/flock.go b/vendor/golang.org/x/sys/unix/flock.go new file mode 100644 index 0000000..ce67a59 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/flock.go @@ -0,0 +1,24 @@ +// +build linux darwin freebsd openbsd netbsd dragonfly + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package unix + +import "unsafe" + +// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux +// systems by flock_linux_32bit.go to be SYS_FCNTL64. +var fcntl64Syscall uintptr = SYS_FCNTL + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) + if errno == 0 { + return nil + } + return errno +} diff --git a/vendor/golang.org/x/sys/unix/flock_linux_32bit.go b/vendor/golang.org/x/sys/unix/flock_linux_32bit.go new file mode 100644 index 0000000..362831c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/flock_linux_32bit.go @@ -0,0 +1,13 @@ +// +build linux,386 linux,arm + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +func init() { + // On 32-bit Linux systems, the fcntl syscall that matches Go's + // Flock_t type is SYS_FCNTL64, not SYS_FCNTL. + fcntl64Syscall = SYS_FCNTL64 +} diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go new file mode 100644 index 0000000..94c8232 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo.go @@ -0,0 +1,46 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +package unix + +import "syscall" + +// We can't use the gc-syntax .s files for gccgo. On the plus side +// much of the functionality can be written directly in Go. + +//extern gccgoRealSyscall +func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} + +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c new file mode 100644 index 0000000..07f6be0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_c.c @@ -0,0 +1,41 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +#include +#include +#include + +#define _STRINGIFY2_(x) #x +#define _STRINGIFY_(x) _STRINGIFY2_(x) +#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) + +// Call syscall from C code because the gccgo support for calling from +// Go to C does not support varargs functions. + +struct ret { + uintptr_t r; + uintptr_t err; +}; + +struct ret +gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) +{ + struct ret r; + + errno = 0; + r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); + r.err = errno; + return r; +} + +// Define the use function in C so that it is not inlined. + +extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline)); + +void +use(void *p __attribute__ ((unused))) +{ +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go new file mode 100644 index 0000000..bffe1a7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go @@ -0,0 +1,20 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo,linux,amd64 + +package unix + +import "syscall" + +//extern gettimeofday +func realGettimeofday(*Timeval, *byte) int32 + +func gettimeofday(tv *Timeval) (err syscall.Errno) { + r := realGettimeofday(tv, nil) + if r < 0 { + return syscall.GetErrno() + } + return 0 +} diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh new file mode 100755 index 0000000..3e224c5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -0,0 +1,285 @@ +#!/usr/bin/env bash +# Copyright 2009 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. + +# The unix package provides access to the raw system call +# interface of the underlying operating system. Porting Go to +# a new architecture/operating system combination requires +# some manual effort, though there are tools that automate +# much of the process. The auto-generated files have names +# beginning with z. +# +# This script runs or (given -n) prints suggested commands to generate z files +# for the current system. Running those commands is not automatic. +# This script is documentation more than anything else. +# +# * asm_${GOOS}_${GOARCH}.s +# +# This hand-written assembly file implements system call dispatch. +# There are three entry points: +# +# func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); +# func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); +# func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); +# +# The first and second are the standard ones; they differ only in +# how many arguments can be passed to the kernel. +# The third is for low-level use by the ForkExec wrapper; +# unlike the first two, it does not call into the scheduler to +# let it know that a system call is running. +# +# * syscall_${GOOS}.go +# +# This hand-written Go file implements system calls that need +# special handling and lists "//sys" comments giving prototypes +# for ones that can be auto-generated. Mksyscall reads those +# comments to generate the stubs. +# +# * syscall_${GOOS}_${GOARCH}.go +# +# Same as syscall_${GOOS}.go except that it contains code specific +# to ${GOOS} on one particular architecture. +# +# * types_${GOOS}.c +# +# This hand-written C file includes standard C headers and then +# creates typedef or enum names beginning with a dollar sign +# (use of $ in variable names is a gcc extension). The hardest +# part about preparing this file is figuring out which headers to +# include and which symbols need to be #defined to get the +# actual data structures that pass through to the kernel system calls. +# Some C libraries present alternate versions for binary compatibility +# and translate them on the way in and out of system calls, but +# there is almost always a #define that can get the real ones. +# See types_darwin.c and types_linux.c for examples. +# +# * zerror_${GOOS}_${GOARCH}.go +# +# This machine-generated file defines the system's error numbers, +# error strings, and signal numbers. The generator is "mkerrors.sh". +# Usually no arguments are needed, but mkerrors.sh will pass its +# arguments on to godefs. +# +# * zsyscall_${GOOS}_${GOARCH}.go +# +# Generated by mksyscall.pl; see syscall_${GOOS}.go above. +# +# * zsysnum_${GOOS}_${GOARCH}.go +# +# Generated by mksysnum_${GOOS}. +# +# * ztypes_${GOOS}_${GOARCH}.go +# +# Generated by godefs; see types_${GOOS}.c above. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="./mksyscall.pl" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +run="sh" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +GOOSARCH_in=syscall_$GOOSARCH.go +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +darwin_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_amd64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm) + mkerrors="$mkerrors" + mksysnum="./mksysnum_darwin.pl /usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_amd64) + mkerrors="$mkerrors -m64" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -arm" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across over platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +linux_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="./mksysnum_linux.pl /usr/include/asm/unistd_32.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +linux_amd64) + unistd_h=$(ls -1 /usr/include/asm/unistd_64.h /usr/include/x86_64-linux-gnu/asm/unistd_64.h 2>/dev/null | head -1) + if [ "$unistd_h" = "" ]; then + echo >&2 cannot find unistd_64.h + exit 1 + fi + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +linux_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -arm" + mksysnum="curl -s 'http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/arch/arm/include/uapi/asm/unistd.h' | ./mksysnum_linux.pl -" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +linux_arm64) + unistd_h=$(ls -1 /usr/include/asm/unistd.h /usr/include/asm-generic/unistd.h 2>/dev/null | head -1) + if [ "$unistd_h" = "" ]; then + echo >&2 cannot find unistd_64.h + exit 1 + fi + mksysnum="./mksysnum_linux.pl $unistd_h" + # Let the type of C char be signed for making the bare syscall + # API consistent across over platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +linux_ppc64) + GOOSARCH_in=syscall_linux_ppc64x.go + unistd_h=/usr/include/asm/unistd.h + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +linux_ppc64le) + GOOSARCH_in=syscall_linux_ppc64x.go + unistd_h=/usr/include/powerpc64le-linux-gnu/asm/unistd.h + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +linux_s390x) + GOOSARCH_in=syscall_linux_s390x.go + unistd_h=/usr/include/asm/unistd.h + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + # Let the type of C char be signed to make the bare sys + # API more consistent between platforms. + # This is a deliberate departure from the way the syscall + # package generates its version of the types file. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +netbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -openbsd" + mksysctl="./mksysctl_openbsd.pl" + zsysctl="zsysctl_openbsd.go" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -openbsd" + mksysctl="./mksysctl_openbsd.pl" + zsysctl="zsysctl_openbsd.go" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +solaris_amd64) + mksyscall="./mksyscall_solaris.pl" + mkerrors="$mkerrors -m64" + mksysnum= + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + *) + syscall_goos="syscall_$GOOS.go" + case "$GOOS" in + darwin | dragonfly | freebsd | netbsd | openbsd) + syscall_goos="syscall_bsd.go $syscall_goos" + ;; + esac + if [ -n "$mksyscall" ]; then echo "$mksyscall $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; fi + ;; + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then + echo "echo // +build $GOARCH,$GOOS > ztypes_$GOOSARCH.go"; + echo "$mktypes types_$GOOS.go | go run mkpost.go >>ztypes_$GOOSARCH.go"; + fi +) | $run diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh new file mode 100755 index 0000000..c40d788 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -0,0 +1,476 @@ +#!/usr/bin/env bash +# Copyright 2009 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. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +if test -z "$GOARCH" -o -z "$GOOS"; then + echo 1>&2 "GOARCH or GOOS not defined in environment" + exit 1 +fi + +CC=${CC:-cc} + +if [[ "$GOOS" -eq "solaris" ]]; then + # Assumes GNU versions of utilities in PATH. + export PATH=/usr/gnu/bin:$PATH +fi + +uname=$(uname) + +includes_Darwin=' +#define _DARWIN_C_SOURCE +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_DragonFly=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_FreeBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __FreeBSD__ >= 10 +#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10 +#undef SIOCAIFADDR +#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data +#undef SIOCSIFPHYADDR +#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data +#endif +' + +includes_Linux=' +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#ifndef __LP64__ +#define _FILE_OFFSET_BITS 64 +#endif +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MSG_FASTOPEN +#define MSG_FASTOPEN 0x20000000 +#endif + +#ifndef PTRACE_GETREGS +#define PTRACE_GETREGS 0xc +#endif + +#ifndef PTRACE_SETREGS +#define PTRACE_SETREGS 0xd +#endif +' + +includes_NetBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Needed since refers to it... +#define schedppq 1 +' + +includes_OpenBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// We keep some constants not supported in OpenBSD 5.5 and beyond for +// the promise of compatibility. +#define EMUL_ENABLED 0x1 +#define EMUL_NATIVE 0x2 +#define IPV6_FAITH 0x1d +#define IPV6_OPTIONS 0x1 +#define IPV6_RTHDR_STRICT 0x1 +#define IPV6_SOCKOPT_RESERVED1 0x3 +#define SIOCGIFGENERIC 0xc020693a +#define SIOCSIFGENERIC 0x80206939 +#define WALTSIG 0x4 +' + +includes_SunOS=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package unix + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo 'import "syscall"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + $2 ~ /^ELF_.*$/ {next}# contains ELF_ARCH, etc. + + $2 ~ /^EXTATTR_NAMESPACE_NAMES/ || + $2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next} + + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 == "BOTHER" || + $2 ~ /^CI?BAUD(EX)?$/ || + $2 == "IBSHIFT" || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 == "XCASE" || + $2 == "ALTWERASE" || + $2 == "NOKERNINFO" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^O?XTABS$/ || + $2 ~ /^TC[IO](ON|OFF)$/ || + $2 ~ /^IN_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || + $2 == "ICMPV6_FILTER" || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 ~ /^(MS|MNT)_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 !~ "NLA_TYPE_MASK" && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 ~ /^TCGET/ || + $2 ~ /^TCSET/ || + $2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 ~ /^CLOCK_/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT' +echo +echo "// +build ${GOARCH},${GOOS}" +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +int errors[] = { +" + for i in $errors + do + echo -E ' '$i, + done + + echo -E " +}; + +int signals[] = { +" + for i in $signals + do + echo -E ' '$i, + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +intcmp(const void *a, const void *b) +{ + return *(int*)a - *(int*)b; +} + +int +main(void) +{ + int i, j, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errors = [...]string {\n"); + qsort(errors, nelem(errors), sizeof errors[0], intcmp); + for(i=0; i 0 && errors[i-1] == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signals = [...]string {\n"); + qsort(signals, nelem(signals), sizeof signals[0], intcmp); + for(i=0; i 0 && signals[i-1] == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/unix/mkpost.go b/vendor/golang.org/x/sys/unix/mkpost.go new file mode 100644 index 0000000..ed50d90 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkpost.go @@ -0,0 +1,62 @@ +// Copyright 2016 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. + +// +build ignore + +// mkpost processes the output of cgo -godefs to +// modify the generated types. It is used to clean up +// the sys API in an architecture specific manner. +// +// mkpost is run after cgo -godefs by mkall.sh. +package main + +import ( + "fmt" + "go/format" + "io/ioutil" + "log" + "os" + "regexp" +) + +func main() { + b, err := ioutil.ReadAll(os.Stdin) + if err != nil { + log.Fatal(err) + } + s := string(b) + + goarch := os.Getenv("GOARCH") + goos := os.Getenv("GOOS") + if goarch == "s390x" && goos == "linux" { + // Export the types of PtraceRegs fields. + re := regexp.MustCompile("ptrace(Psw|Fpregs|Per)") + s = re.ReplaceAllString(s, "Ptrace$1") + + // Replace padding fields inserted by cgo with blank identifiers. + re = regexp.MustCompile("Pad_cgo[A-Za-z0-9_]*") + s = re.ReplaceAllString(s, "_") + + // Replace other unwanted fields with blank identifiers. + re = regexp.MustCompile("X_[A-Za-z0-9_]*") + s = re.ReplaceAllString(s, "_") + + // Replace the control_regs union with a blank identifier for now. + re = regexp.MustCompile("(Control_regs)\\s+\\[0\\]uint64") + s = re.ReplaceAllString(s, "_ [0]uint64") + } + + // gofmt + b, err = format.Source([]byte(s)) + if err != nil { + log.Fatal(err) + } + + // Append this command to the header to show where the new file + // came from. + re := regexp.MustCompile("(cgo -godefs [a-zA-Z0-9_]+\\.go.*)") + b = re.ReplaceAll(b, []byte("$1 | go run mkpost.go")) + + fmt.Printf("%s", b) +} diff --git a/vendor/golang.org/x/sys/unix/mksyscall.pl b/vendor/golang.org/x/sys/unix/mksyscall.pl new file mode 100755 index 0000000..b1e7766 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mksyscall.pl @@ -0,0 +1,323 @@ +#!/usr/bin/env perl +# Copyright 2009 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. + +# This program reads a file containing function prototypes +# (like syscall_darwin.go) and generates system call bodies. +# The prototypes are marked by lines beginning with "//sys" +# and read like func declarations if //sys is replaced by func, but: +# * The parameter lists must give a name for each argument. +# This includes return parameters. +# * The parameter lists must give a type for each argument: +# the (x, y, z int) shorthand is not allowed. +# * If the return parameter is an error number, it must be named errno. + +# A line beginning with //sysnb is like //sys, except that the +# goroutine will not be suspended during the execution of the system +# call. This must only be used for system calls which can never +# block, as otherwise the system call could cause all goroutines to +# hang. + +use strict; + +my $cmdline = "mksyscall.pl " . join(' ', @ARGV); +my $errors = 0; +my $_32bit = ""; +my $plan9 = 0; +my $openbsd = 0; +my $netbsd = 0; +my $dragonfly = 0; +my $arm = 0; # 64-bit value should use (even, odd)-pair + +if($ARGV[0] eq "-b32") { + $_32bit = "big-endian"; + shift; +} elsif($ARGV[0] eq "-l32") { + $_32bit = "little-endian"; + shift; +} +if($ARGV[0] eq "-plan9") { + $plan9 = 1; + shift; +} +if($ARGV[0] eq "-openbsd") { + $openbsd = 1; + shift; +} +if($ARGV[0] eq "-netbsd") { + $netbsd = 1; + shift; +} +if($ARGV[0] eq "-dragonfly") { + $dragonfly = 1; + shift; +} +if($ARGV[0] eq "-arm") { + $arm = 1; + shift; +} + +if($ARGV[0] =~ /^-/) { + print STDERR "usage: mksyscall.pl [-b32 | -l32] [file ...]\n"; + exit 1; +} + +if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { + print STDERR "GOARCH or GOOS not defined in environment\n"; + exit 1; +} + +sub parseparamlist($) { + my ($list) = @_; + $list =~ s/^\s*//; + $list =~ s/\s*$//; + if($list eq "") { + return (); + } + return split(/\s*,\s*/, $list); +} + +sub parseparam($) { + my ($p) = @_; + if($p !~ /^(\S*) (\S*)$/) { + print STDERR "$ARGV:$.: malformed parameter: $p\n"; + $errors = 1; + return ("xx", "int"); + } + return ($1, $2); +} + +my $text = ""; +while(<>) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, errno error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Go function header. + my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my @uses = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass dummy pointer in that case. + # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && ($openbsd || $netbsd)) { + push @args, "0"; + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $dragonfly) { + if ($func !~ /^extp(read|write)/i) { + push @args, "0"; + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $_32bit ne "") { + if(@args % 2 && $arm) { + # arm abi specifies 64-bit argument uses + # (even, odd) pair + push @args, "0" + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } + } else { + push @args, "uintptr($name)"; + } + } + + # Determine which form to use; pad args with zeros. + my $asm = "Syscall"; + if ($nonblock) { + $asm = "RawSyscall"; + } + if(@args <= 3) { + while(@args < 3) { + push @args, "0"; + } + } elsif(@args <= 6) { + $asm .= "6"; + while(@args < 6) { + push @args, "0"; + } + } elsif(@args <= 9) { + $asm .= "9"; + while(@args < 9) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # System call number. + if($sysname eq "") { + $sysname = "SYS_$func"; + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar + $sysname =~ y/a-z/A-Z/; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm($sysname, $args)"; + + # Assign return values. + my $body = ""; + my @ret = ("_", "_", "_"); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err" && !$plan9) { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } elsif($name eq "err" && $plan9) { + $ret[0] = "r0"; + $ret[2] = "e1"; + next; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1" || $plan9) { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + foreach my $use (@uses) { + $text .= "\t$use\n"; + } + $text .= $body; + + if ($plan9 && $ret[2] eq "e1") { + $text .= "\tif int32(r0) == -1 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } elsif ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = errnoErr(e1)\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n\n"; +} + +chomp $text; +chomp $text; + +if($errors) { + exit 1; +} + +print <) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + $package = $1 if !$package && /^package (\S+)$/; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, err error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # So file name. + if($modname eq "") { + $modname = "libc"; + } + + # System call name. + if($sysname eq "") { + $sysname = "$func"; + } + + # System call pointer variable name. + my $sysvarname = "proc$sysname"; + + my $strconvfunc = "BytePtrFromString"; + my $strconvtype = "*byte"; + + $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase. + + # Runtime import of function to allow cross-platform builds. + $dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n"; + # Link symbol to proc address variable. + $linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n"; + # Library proc address variable. + push @vars, $sysvarname; + + # Go function header. + $out = join(', ', @out); + if($out ne "") { + $out = " ($out)"; + } + if($text ne "") { + $text .= "\n" + } + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my @uses = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, $errvar = $strconvfunc($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, _ = $strconvfunc($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass nil in that case. + $text .= "\tvar _p$n *$1\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && $_32bit ne "") { + if($_32bit eq "big-endian") { + push @args, "uintptr($name >> 32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name >> 32)"; + } + } elsif($type eq "bool") { + $text .= "\tvar _p$n uint32\n"; + $text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n"; + push @args, "uintptr(_p$n)"; + $n++; + } else { + push @args, "uintptr($name)"; + } + } + my $nargs = @args; + + # Determine which form to use; pad args with zeros. + my $asm = "sysvicall6"; + if ($nonblock) { + $asm = "rawSysvicall6"; + } + if(@args <= 6) { + while(@args < 6) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm(uintptr(unsafe.Pointer(&$sysvarname)), $nargs, $args)"; + + # Assign return values. + my $body = ""; + my $failexpr = ""; + my @ret = ("_", "_", "_"); + my @pout= (); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err") { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1") { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + foreach my $use (@uses) { + $text .= "\t$use\n"; + } + $text .= $body; + + if ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n"; +} + +if($errors) { + exit 1; +} + +print < "net.inet", + "net.inet.ipproto" => "net.inet", + "net.inet6.ipv6proto" => "net.inet6", + "net.inet6.ipv6" => "net.inet6.ip6", + "net.inet.icmpv6" => "net.inet6.icmp6", + "net.inet6.divert6" => "net.inet6.divert", + "net.inet6.tcp6" => "net.inet.tcp", + "net.inet6.udp6" => "net.inet.udp", + "mpls" => "net.mpls", + "swpenc" => "vm.swapencrypt" +); + +# Node mappings +my %node_map = ( + "net.inet.ip.ifq" => "net.ifq", + "net.inet.pfsync" => "net.pfsync", + "net.mpls.ifq" => "net.ifq" +); + +my $ctlname; +my %mib = (); +my %sysctl = (); +my $node; + +sub debug() { + print STDERR "$_[0]\n" if $debug; +} + +# Walk the MIB and build a sysctl name to OID mapping. +sub build_sysctl() { + my ($node, $name, $oid) = @_; + my %node = %{$node}; + my @oid = @{$oid}; + + foreach my $key (sort keys %node) { + my @node = @{$node{$key}}; + my $nodename = $name.($name ne '' ? '.' : '').$key; + my @nodeoid = (@oid, $node[0]); + if ($node[1] eq 'CTLTYPE_NODE') { + if (exists $node_map{$nodename}) { + $node = \%mib; + $ctlname = $node_map{$nodename}; + foreach my $part (split /\./, $ctlname) { + $node = \%{@{$$node{$part}}[2]}; + } + } else { + $node = $node[2]; + } + &build_sysctl($node, $nodename, \@nodeoid); + } elsif ($node[1] ne '') { + $sysctl{$nodename} = \@nodeoid; + } + } +} + +foreach my $ctl (@ctls) { + $ctls{$ctl} = $ctl; +} + +# Build MIB +foreach my $header (@headers) { + &debug("Processing $header..."); + open HEADER, "/usr/include/$header" || + print STDERR "Failed to open $header\n"; + while (
) { + if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ || + $_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ || + $_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) { + if ($1 eq 'CTL_NAMES') { + # Top level. + $node = \%mib; + } else { + # Node. + my $nodename = lc($2); + if ($header =~ /^netinet\//) { + $ctlname = "net.inet.$nodename"; + } elsif ($header =~ /^netinet6\//) { + $ctlname = "net.inet6.$nodename"; + } elsif ($header =~ /^net\//) { + $ctlname = "net.$nodename"; + } else { + $ctlname = "$nodename"; + $ctlname =~ s/^(fs|net|kern)_/$1\./; + } + if (exists $ctl_map{$ctlname}) { + $ctlname = $ctl_map{$ctlname}; + } + if (not exists $ctls{$ctlname}) { + &debug("Ignoring $ctlname..."); + next; + } + + # Walk down from the top of the MIB. + $node = \%mib; + foreach my $part (split /\./, $ctlname) { + if (not exists $$node{$part}) { + &debug("Missing node $part"); + $$node{$part} = [ 0, '', {} ]; + } + $node = \%{@{$$node{$part}}[2]}; + } + } + + # Populate current node with entries. + my $i = -1; + while (defined($_) && $_ !~ /^}/) { + $_ =
; + $i++ if $_ =~ /{.*}/; + next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/; + $$node{$1} = [ $i, $2, {} ]; + } + } + } + close HEADER; +} + +&build_sysctl(\%mib, "", []); + +print <){ + if(/^#define\s+SYS_(\w+)\s+([0-9]+)/){ + my $name = $1; + my $num = $2; + $name =~ y/a-z/A-Z/; + print " SYS_$name = $num;" + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + if($name =~ /^SYS_CAP_+/ || $name =~ /^SYS___CAP_+/){ + next + } + + print " $name = $num; // $proto\n"; + + # We keep Capsicum syscall numbers for FreeBSD + # 9-STABLE here because we are not sure whether they + # are mature and stable. + if($num == 513){ + print " SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); }\n"; + print " SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \\\n"; + print " SYS_CAP_ENTER = 516 // { int cap_enter(void); }\n"; + print " SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }\n"; + } + } +} + +print < 999){ + # ignore deprecated syscalls that are no longer implemented + # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716 + return; + } + $name =~ y/a-z/A-Z/; + print " SYS_$name = $num;\n"; +} + +my $prev; +open(GCC, "gcc -E -dD $ARGV[0] |") || die "can't run gcc"; +while(){ + if(/^#define __NR_syscalls\s+/) { + # ignore redefinitions of __NR_syscalls + } + elsif(/^#define __NR_(\w+)\s+([0-9]+)/){ + $prev = $2; + fmt($1, $2); + } + elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){ + $prev = $2; + fmt($1, $2); + } + elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){ + fmt($1, $prev+$2) + } +} + +print <){ + if($line =~ /^(.*)\\$/) { + # Handle continuation + $line = $1; + $_ =~ s/^\s+//; + $line .= $_; + } else { + # New line + $line = $_; + } + next if $line =~ /\\$/; + if($line =~ /^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$/) { + my $num = $1; + my $proto = $6; + my $compat = $8; + my $name = "$7_$9"; + + $name = "$7_$11" if $11 ne ''; + $name =~ y/a-z/A-Z/; + + if($compat eq '' || $compat eq '30' || $compat eq '50') { + print " $name = $num; // $proto\n"; + } + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$/){ + my $num = $1; + my $proto = $3; + my $name = $4; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print < uint64(len(b)) { + return nil, nil, EINVAL + } + return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil +} + +// UnixRights encodes a set of open file descriptors into a socket +// control message for sending to another process. +func UnixRights(fds ...int) []byte { + datalen := len(fds) * 4 + b := make([]byte, CmsgSpace(datalen)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_RIGHTS + h.SetLen(CmsgLen(datalen)) + data := cmsgData(h) + for _, fd := range fds { + *(*int32)(data) = int32(fd) + data = unsafe.Pointer(uintptr(data) + 4) + } + return b +} + +// ParseUnixRights decodes a socket control message that contains an +// integer array of open file descriptors from another process. +func ParseUnixRights(m *SocketControlMessage) ([]int, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_RIGHTS { + return nil, EINVAL + } + fds := make([]int, len(m.Data)>>2) + for i, j := 0, 0; i < len(m.Data); i += 4 { + fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i]))) + j++ + } + return fds, nil +} diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go new file mode 100644 index 0000000..35ed664 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/str.go @@ -0,0 +1,26 @@ +// Copyright 2009 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. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + uitoa(uint(-val)) + } + return uitoa(uint(val)) +} + +func uitoa(val uint) string { + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go new file mode 100644 index 0000000..571e699 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -0,0 +1,76 @@ +// Copyright 2009 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. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +// Package unix contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display OS-specific documentation for the current +// system. If you want godoc to display OS documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package unix + +import "unsafe" + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mkunix.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} + +func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 } + +// use is a no-op, but the compiler cannot see that it is. +// Calling use(p) ensures that p is kept live until that point. +//go:noescape +func use(p unsafe.Pointer) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go new file mode 100644 index 0000000..e967176 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -0,0 +1,628 @@ +// Copyright 2009 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. + +// +build darwin dragonfly freebsd netbsd openbsd + +// BSD system call wrappers shared by *BSD based systems +// including OS X (Darwin) and FreeBSD. Like the other +// syscall_*.go files it is compiled as Go code but also +// used as input to mksyscall which parses the //sys +// lines and generates system call stubs. + +package unix + +import ( + "runtime" + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // 64 bits should be enough. (32 bits isn't even on 386). Since the + // actual system call is getdirentries64, 64 is a good guess. + // TODO(rsc): Can we use a single global basep for all calls? + var base = (*uintptr)(unsafe.Pointer(new(uint64))) + return Getdirentries(fd, buf, base) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys Shutdown(s int, how int) (err error) + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet4 + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet6 + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) || n == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Index == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = sa.Len + sa.raw.Family = AF_LINK + sa.raw.Index = sa.Index + sa.raw.Type = sa.Type + sa.raw.Nlen = sa.Nlen + sa.raw.Alen = sa.Alen + sa.raw.Slen = sa.Slen + for i := 0; i < len(sa.raw.Data); i++ { + sa.raw.Data[i] = sa.Data[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_LINK: + pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) + sa := new(SockaddrDatalink) + sa.Len = pp.Len + sa.Family = pp.Family + sa.Index = pp.Index + sa.Type = pp.Type + sa.Nlen = pp.Nlen + sa.Alen = pp.Alen + sa.Slen = pp.Slen + for i := 0; i < len(sa.Data); i++ { + sa.Data[i] = pp.Data[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + if pp.Len < 2 || pp.Len > SizeofSockaddrUnix { + return nil, EINVAL + } + sa := new(SockaddrUnix) + + // Some BSDs include the trailing NUL in the length, whereas + // others do not. Work around this by subtracting the leading + // family and len. The path is then scanned to see if a NUL + // terminator still exists within the length. + n := int(pp.Len) - 2 // subtract leading Family, Len + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + // found early NUL; assume Len included the NUL + // or was overestimating. + n = i + break + } + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + if runtime.GOOS == "darwin" && len == 0 { + // Accepted socket has no address. + // This is likely due to a bug in xnu kernels, + // where instead of ECONNABORTED error socket + // is accepted, but has no address. + Close(nfd) + return 0, nil, ECONNABORTED + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + // TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be + // reported upstream. + if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 { + rsa.Addr.Family = AF_UNIX + rsa.Addr.Len = SizeofSockaddrUnix + } + return anyToSockaddr(&rsa) +} + +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) + +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) + +func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { + var change, event unsafe.Pointer + if len(changes) > 0 { + change = unsafe.Pointer(&changes[0]) + } + if len(events) > 0 { + event = unsafe.Pointer(&events[0]) + } + return kevent(kq, change, len(changes), event, len(events), timeout) +} + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +// sysctlmib translates name to mib number and appends any additional args. +func sysctlmib(name string, args ...int) ([]_C_int, error) { + // Translate name to mib number. + mib, err := nametomib(name) + if err != nil { + return nil, err + } + + for _, a := range args { + mib = append(mib, _C_int(a)) + } + + return mib, nil +} + +func Sysctl(name string) (string, error) { + return SysctlArgs(name) +} + +func SysctlArgs(name string, args ...int) (string, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return "", err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return "", err + } + if n == 0 { + return "", nil + } + + // Read into buffer of that size. + buf := make([]byte, n) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return "", err + } + + // Throw away terminating NUL. + if n > 0 && buf[n-1] == '\x00' { + n-- + } + return string(buf[0:n]), nil +} + +func SysctlUint32(name string) (uint32, error) { + return SysctlUint32Args(name) +} + +func SysctlUint32Args(name string, args ...int) (uint32, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(4) + buf := make([]byte, 4) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 4 { + return 0, EIO + } + return *(*uint32)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlUint64(name string, args ...int) (uint64, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(8) + buf := make([]byte, 8) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 8 { + return 0, EIO + } + return *(*uint64)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlRaw(name string, args ...int) ([]byte, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Read into buffer of that size. + buf := make([]byte, n) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return nil, err + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n], nil +} + +//sys utimes(path string, timeval *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimes(path, nil) + } + // TODO: The BSDs can do utimensat with SYS_UTIMENSAT but it + // isn't supported by darwin so this uses utimes instead + if len(ts) != 2 { + return EINVAL + } + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := [2]Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys futimes(fd int, timeval *[2]Timeval) (err error) + +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimes(fd, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// TODO: wrap +// Acct(name nil-string) (err error) +// Gethostuuid(uuid *byte, timeout *Timespec) (err error) +// Madvise(addr *byte, len int, behav int) (err error) +// Mprotect(addr *byte, len int, prot int) (err error) +// Msync(addr *byte, len int, flags int) (err error) +// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go new file mode 100644 index 0000000..0d1771c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -0,0 +1,509 @@ +// Copyright 2009,2010 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. + +// Darwin system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + errorspkg "errors" + "syscall" + "unsafe" +) + +const ImplementsGetwd = true + +func Getwd() (string, error) { + buf := make([]byte, 2048) + attrs, err := getAttrList(".", attrList{CommonAttr: attrCmnFullpath}, buf, 0) + if err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 { + wd := string(attrs[0]) + // Sanity check that it's an absolute path and ends + // in a null byte, which we then strip. + if wd[0] == '/' && wd[len(wd)-1] == 0 { + return wd[:len(wd)-1], nil + } + } + // If pkg/os/getwd.go gets ENOTSUP, it will fall back to the + // slow algorithm. + return "", ENOTSUP +} + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + if dirent.Reclen == 0 { + buf = nil + break + } + buf = buf[dirent.Reclen:] + if dirent.Ino == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:dirent.Namlen]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } +func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } + +const ( + attrBitMapCount = 5 + attrCmnFullpath = 0x08000000 +) + +type attrList struct { + bitmapCount uint16 + _ uint16 + CommonAttr uint32 + VolAttr uint32 + DirAttr uint32 + FileAttr uint32 + Forkattr uint32 +} + +func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) { + if len(attrBuf) < 4 { + return nil, errorspkg.New("attrBuf too small") + } + attrList.bitmapCount = attrBitMapCount + + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return nil, err + } + + _, _, e1 := Syscall6( + SYS_GETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attrBuf[0])), + uintptr(len(attrBuf)), + uintptr(options), + 0, + ) + if e1 != 0 { + return nil, e1 + } + size := *(*uint32)(unsafe.Pointer(&attrBuf[0])) + + // dat is the section of attrBuf that contains valid data, + // without the 4 byte length header. All attribute offsets + // are relative to dat. + dat := attrBuf + if int(size) < len(attrBuf) { + dat = dat[:size] + } + dat = dat[4:] // remove length prefix + + for i := uint32(0); int(i) < len(dat); { + header := dat[i:] + if len(header) < 8 { + return attrs, errorspkg.New("truncated attribute header") + } + datOff := *(*int32)(unsafe.Pointer(&header[0])) + attrLen := *(*uint32)(unsafe.Pointer(&header[4])) + if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) { + return attrs, errorspkg.New("truncated results; attrBuf too small") + } + end := uint32(datOff) + attrLen + attrs = append(attrs, dat[datOff:end]) + i = end + if r := i % 4; r != 0 { + i += (4 - r) + } + } + return +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +/* + * Wrapped + */ + +//sys kill(pid int, signum int, posix int) (err error) + +func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exchangedata(path1 string, path2 string, options int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64 +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Getuid() (uid int) +//sysnb Issetugid() (tainted bool) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sys Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setprivexec(flag int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Mmap +// Mlock +// Munlock +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Poll +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// Mlockall +// Munlockall +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// sendfile +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Msync_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go new file mode 100644 index 0000000..c172a3d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go @@ -0,0 +1,77 @@ +// Copyright 2009 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. + +// +build 386,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/386 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go new file mode 100644 index 0000000..fc1e5a4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -0,0 +1,79 @@ +// Copyright 2009 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. + +// +build amd64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go new file mode 100644 index 0000000..d286cf4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go @@ -0,0 +1,71 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go new file mode 100644 index 0000000..c33905c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -0,0 +1,77 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 16384 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/arm64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go new file mode 100644 index 0000000..fbbe0dc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -0,0 +1,411 @@ +// Copyright 2009,2010 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. + +// FreeBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + reclen := int(16+dirent.Namlen+1+7) & ^7 + buf = buf[reclen:] + if dirent.Fileno == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:dirent.Namlen]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pread(fd int, p []byte, offset int64) (n int, err error) { + return extpread(fd, p, 0, offset) +} + +//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + return extpwrite(fd, p, 0, offset) +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + * TODO(jsing): Update this list for DragonFly. + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Mmap +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Poll +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Msync_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go new file mode 100644 index 0000000..da7cb79 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go @@ -0,0 +1,61 @@ +// Copyright 2009 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. + +// +build amd64,dragonfly + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go new file mode 100644 index 0000000..ec56ed6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -0,0 +1,682 @@ +// Copyright 2009,2010 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. + +// FreeBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + if dirent.Reclen == 0 { + buf = nil + break + } + buf = buf[dirent.Reclen:] + if dirent.Fileno == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:dirent.Namlen]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, errno +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// Derive extattr namespace and attribute name + +func xattrnamespace(fullattr string) (ns int, attr string, err error) { + s := -1 + for idx, val := range fullattr { + if val == '.' { + s = idx + break + } + } + + if s == -1 { + return -1, "", ENOATTR + } + + namespace := fullattr[0:s] + attr = fullattr[s+1:] + + switch namespace { + case "user": + return EXTATTR_NAMESPACE_USER, attr, nil + case "system": + return EXTATTR_NAMESPACE_SYSTEM, attr, nil + default: + return -1, "", ENOATTR + } +} + +func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { + if len(dest) > idx { + return unsafe.Pointer(&dest[idx]) + } else { + return unsafe.Pointer(_zero) + } +} + +// FreeBSD implements its own syscalls to handle extended attributes + +func Getxattr(file string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) +} + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) +} + +// flags are unused on FreeBSD + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + return +} + +func Setxattr(file string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + return +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + return +} + +func Removexattr(file string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFile(file, nsid, a) + return +} + +func Fremovexattr(fd int, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFd(fd, nsid, a) + return +} + +func Lremovexattr(link string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteLink(link, nsid, a) + return +} + +func Listxattr(file string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + // FreeBSD won't allow you to list xattrs from multiple namespaces + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + + /* Errors accessing system attrs are ignored so that + * we can implement the Linux-like behavior of omitting errors that + * we don't have read permissions on + * + * Linux will still error if we ask for user attributes on a file that + * we don't have read permissions on, so don't ignore those errors + */ + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Mmap +// Mlock +// Munlock +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Poll +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// Mlockall +// Munlockall +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Msync_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go new file mode 100644 index 0000000..6a0cd80 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -0,0 +1,61 @@ +// Copyright 2009 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. + +// +build 386,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go new file mode 100644 index 0000000..e142540 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -0,0 +1,61 @@ +// Copyright 2009 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. + +// +build amd64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go new file mode 100644 index 0000000..5504cb1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -0,0 +1,61 @@ +// Copyright 2012 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. + +// +build arm,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return ts.Sec*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = nsec / 1e9 + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go new file mode 100644 index 0000000..6d10c9c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -0,0 +1,1115 @@ +// Copyright 2009 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. + +// Linux system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import ( + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +func Access(path string, mode uint32) (err error) { + return Faccessat(AT_FDCWD, path, mode, 0) +} + +func Chmod(path string, mode uint32) (err error) { + return Fchmodat(AT_FDCWD, path, mode, 0) +} + +func Chown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, 0) +} + +func Creat(path string, mode uint32) (fd int, err error) { + return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) +} + +//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) + +func Link(oldpath string, newpath string) (err error) { + return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) +} + +func Mkdir(path string, mode uint32) (err error) { + return Mkdirat(AT_FDCWD, path, mode) +} + +func Mknod(path string, mode uint32, dev int) (err error) { + return Mknodat(AT_FDCWD, path, mode, dev) +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) +} + +//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + return openat(dirfd, path, flags|O_LARGEFILE, mode) +} + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +//sys readlinkat(dirfd int, path string, buf []byte) (n int, err error) + +func Readlink(path string, buf []byte) (n int, err error) { + return readlinkat(AT_FDCWD, path, buf) +} + +func Rename(oldpath string, newpath string) (err error) { + return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) +} + +func Rmdir(path string) error { + return unlinkat(AT_FDCWD, path, AT_REMOVEDIR) +} + +//sys symlinkat(oldpath string, newdirfd int, newpath string) (err error) + +func Symlink(oldpath string, newpath string) (err error) { + return symlinkat(oldpath, AT_FDCWD, newpath) +} + +func Unlink(path string) error { + return unlinkat(AT_FDCWD, path, 0) +} + +//sys unlinkat(dirfd int, path string, flags int) (err error) + +func Unlinkat(dirfd int, path string, flags int) error { + return unlinkat(dirfd, path, flags) +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + var ts [2]Timespec + ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) + ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // If the utimensat syscall isn't available (utimensat was added to Linux + // in 2.6.22, Released, 8 July 2007) then fall back to utimes + var tv [2]Timeval + for i := 0; i < 2; i++ { + tv[i].Sec = ts[i].Sec + tv[i].Usec = ts[i].Nsec / 1000 + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func Futimes(fd int, tv []Timeval) (err error) { + // Believe it or not, this is the best we can do on Linux + // (and is what glibc does). + return Utimes("/proc/self/fd/"+itoa(fd), tv) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + n, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + // Getcwd returns the number of bytes written to buf, including the NUL. + if n < 1 || n > len(buf) || buf[n-1] != 0 { + return "", EINVAL + } + return string(buf[0 : n-1]), nil +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 1<<16 on Linux. + if n < 0 || n > 1<<20 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +type WaitStatus uint32 + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the +// "continued" status is 0xFFFF, distinguishing itself +// from stopped via the core dump bit. + +const ( + mask = 0x7F + core = 0x80 + exited = 0x00 + stopped = 0x7F + shift = 8 +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } + +func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } + +func (w WaitStatus) Continued() bool { return w == 0xFFFF } + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int(w>>shift) & 0xFF +} + +func (w WaitStatus) Signal() syscall.Signal { + if !w.Signaled() { + return -1 + } + return syscall.Signal(w & mask) +} + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { + if w.StopSignal() != SIGTRAP { + return -1 + } + return int(w>>shift) >> 8 +} + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +func Mkfifo(path string, mode uint32) (err error) { + return Mknod(path, mode|S_IFIFO, 0) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +type SockaddrLinklayer struct { + Protocol uint16 + Ifindex int + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]byte + raw RawSockaddrLinklayer +} + +func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_PACKET + sa.raw.Protocol = sa.Protocol + sa.raw.Ifindex = int32(sa.Ifindex) + sa.raw.Hatype = sa.Hatype + sa.raw.Pkttype = sa.Pkttype + sa.raw.Halen = sa.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil +} + +type SockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 + raw RawSockaddrNetlink +} + +func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_NETLINK + sa.raw.Pad = sa.Pad + sa.raw.Pid = sa.Pid + sa.raw.Groups = sa.Groups + return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil +} + +type SockaddrHCI struct { + Dev uint16 + Channel uint16 + raw RawSockaddrHCI +} + +func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Dev = sa.Dev + sa.raw.Channel = sa.Channel + return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_NETLINK: + pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) + sa := new(SockaddrNetlink) + sa.Family = pp.Family + sa.Pad = pp.Pad + sa.Pid = pp.Pid + sa.Groups = pp.Groups + return sa, nil + + case AF_PACKET: + pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) + sa := new(SockaddrLinklayer) + sa.Protocol = pp.Protocol + sa.Ifindex = int(pp.Ifindex) + sa.Hatype = pp.Hatype + sa.Pkttype = pp.Pkttype + sa.Halen = pp.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + if pp.Path[0] == 0 { + // "Abstract" Unix domain socket. + // Rewrite leading NUL as @ for textual display. + // (This is the standard convention.) + // Not friendly to overwrite in place, + // but the callers below don't care. + pp.Path[0] = '@' + } + + // Assume path ends at NUL. + // This is not technically the Linux semantics for + // abstract Unix domain sockets--they are supposed + // to be uninterpreted fixed-size binary blobs--but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { + var value Ucred + vallen := _Socklen(SizeofUcred) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + var err error + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +// BindToDevice binds the socket associated with fd to device. +func BindToDevice(fd int, device string) (err error) { + return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) + +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + // The peek requests are machine-size oriented, so we wrap it + // to retrieve arbitrary-length data. + + // The ptrace syscall differs from glibc's ptrace. + // Peeks returns the word in *data, not as the return value. + + var buf [sizeofPtr]byte + + // Leading edge. PEEKTEXT/PEEKDATA don't require aligned + // access (PEEKUSER warns that it might), but if we don't + // align our reads, we might straddle an unmapped page + // boundary and not get the bytes leading up to the page + // boundary. + n := 0 + if addr%sizeofPtr != 0 { + err = ptrace(req, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(out, buf[addr%sizeofPtr:]) + out = out[n:] + } + + // Remainder. + for len(out) > 0 { + // We use an internal buffer to guarantee alignment. + // It's not documented if this is necessary, but we're paranoid. + err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copied := copy(out, buf[0:]) + n += copied + out = out[copied:] + } + + return n, nil +} + +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) +} + +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) +} + +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + // As for ptracePeek, we need to align our accesses to deal + // with the possibility of straddling an invalid page. + + // Leading edge. + n := 0 + if addr%sizeofPtr != 0 { + var buf [sizeofPtr]byte + err = ptrace(peekReq, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(buf[addr%sizeofPtr:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr-addr%sizeofPtr, word) + if err != nil { + return 0, err + } + data = data[n:] + } + + // Interior. + for len(data) > sizeofPtr { + word := *((*uintptr)(unsafe.Pointer(&data[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += sizeofPtr + data = data[sizeofPtr:] + } + + // Trailing edge. + if len(data) > 0 { + var buf [sizeofPtr]byte + err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copy(buf[0:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += len(data) + } + + return n, nil +} + +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) +} + +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) +} + +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +func PtraceSetOptions(pid int, options int) (err error) { + return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) +} + +func PtraceGetEventMsg(pid int) (msg uint, err error) { + var data _C_long + err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) + msg = uint(data) + return +} + +func PtraceCont(pid int, signal int) (err error) { + return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) +} + +func PtraceSyscall(pid int, signal int) (err error) { + return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) +} + +func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } + +func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } + +func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } + +//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) + +func Reboot(cmd int) (err error) { + return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") +} + +func clen(n []byte) int { + for i := 0; i < len(n); i++ { + if n[i] == 0 { + return i + } + } + return len(n) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + return Getdents(fd, buf) +} + +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + count = 0 + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + buf = buf[dirent.Reclen:] + if dirent.Ino == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:clen(bytes[:])]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) + +func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + // Certain file systems get rather angry and EINVAL if you give + // them an empty string of data, rather than NULL. + if data == "" { + return mount(source, target, fstype, flags, nil) + } + datap, err := BytePtrFromString(data) + if err != nil { + return err + } + return mount(source, target, fstype, flags, datap) +} + +// Sendto +// Recvfrom +// Socketpair + +/* + * Direct access + */ +//sys Acct(path string) (err error) +//sys Adjtimex(buf *Timex) (state int, err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys Close(fd int) (err error) +//sys Dup(oldfd int) (fd int, err error) +//sys Dup3(oldfd int, newfd int, flags int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sysnb EpollCreate1(flag int) (fd int, err error) +//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys Exit(code int) = SYS_EXIT_GROUP +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fsync(fd int) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sysnb Getpgid(pid int) (pgid int, err error) + +func Getpgrp() (pid int) { + pid, _ = Getpgid(0) + return +} + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Gettid() (tid int) +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) +//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) +//sysnb InotifyInit1(flags int) (fd int, err error) +//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) +//sysnb Kill(pid int, sig syscall.Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG +//sys Listxattr(path string, dest []byte) (sz int, err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT +//sysnb prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) = SYS_PRLIMIT64 +//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Removexattr(path string, attr string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) +//sys Setns(fd int, nstype int) (err error) + +// issue 1435. +// On linux Setuid and Setgid only affects the current thread, not the process. +// This does not match what most callers expect so we must return an error +// here rather than letting the caller think that the call succeeded. + +func Setuid(uid int) (err error) { + return EOPNOTSUPP +} + +func Setgid(uid int) (err error) { + return EOPNOTSUPP +} + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setxattr(path string, attr string, data []byte, flags int) (err error) +//sys Sync() +//sysnb Sysinfo(info *Sysinfo_t) (err error) +//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) +//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 +//sys Unshare(flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys exitThread(code int) (err error) = SYS_EXIT +//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ +//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE + +// mmap varies by architecture; see syscall_linux_*.go. +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Munlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Munlockall() (err error) + +/* + * Unimplemented + */ +// AddKey +// AfsSyscall +// Alarm +// ArchPrctl +// Brk +// Capget +// Capset +// ClockGetres +// ClockNanosleep +// ClockSettime +// Clone +// CreateModule +// DeleteModule +// EpollCtlOld +// EpollPwait +// EpollWaitOld +// Eventfd +// Execve +// Fgetxattr +// Flistxattr +// Fork +// Fremovexattr +// Fsetxattr +// Futex +// GetKernelSyms +// GetMempolicy +// GetRobustList +// GetThreadArea +// Getitimer +// Getpmsg +// IoCancel +// IoDestroy +// IoGetevents +// IoSetup +// IoSubmit +// Ioctl +// IoprioGet +// IoprioSet +// KexecLoad +// Keyctl +// Lgetxattr +// Llistxattr +// LookupDcookie +// Lremovexattr +// Lsetxattr +// Mbind +// MigratePages +// Mincore +// ModifyLdt +// Mount +// MovePages +// Mprotect +// MqGetsetattr +// MqNotify +// MqOpen +// MqTimedreceive +// MqTimedsend +// MqUnlink +// Mremap +// Msgctl +// Msgget +// Msgrcv +// Msgsnd +// Msync +// Newfstatat +// Nfsservctl +// Personality +// Pselect6 +// Ptrace +// Putpmsg +// QueryModule +// Quotactl +// Readahead +// Readv +// RemapFilePages +// RequestKey +// RestartSyscall +// RtSigaction +// RtSigpending +// RtSigprocmask +// RtSigqueueinfo +// RtSigreturn +// RtSigsuspend +// RtSigtimedwait +// SchedGetPriorityMax +// SchedGetPriorityMin +// SchedGetaffinity +// SchedGetparam +// SchedGetscheduler +// SchedRrGetInterval +// SchedSetaffinity +// SchedSetparam +// SchedYield +// Security +// Semctl +// Semget +// Semop +// Semtimedop +// SetMempolicy +// SetRobustList +// SetThreadArea +// SetTidAddress +// Shmat +// Shmctl +// Shmdt +// Shmget +// Sigaltstack +// Signalfd +// Swapoff +// Swapon +// Sysfs +// TimerCreate +// TimerDelete +// TimerGetoverrun +// TimerGettime +// TimerSettime +// Timerfd +// Tkill (obsolete) +// Tuxcall +// Umount2 +// Uselib +// Utimensat +// Vfork +// Vhangup +// Vmsplice +// Vserver +// Waitid +// _Sysctl diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go new file mode 100644 index 0000000..2b881b9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -0,0 +1,399 @@ +// Copyright 2009 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. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +// +build 386,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// 64-bit file system and 32-bit uid calls +// (386 default is 32-bit file system and 16-bit uid). +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +// Vsyscalls on amd64. +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Utime(path string, buf *Utimbuf) (err error) + +// On x86 Linux, all the socket calls go through an extra indirection, +// I think because the 5-register system call interface can't handle +// the 6-argument calls like sendto and recvfrom. Instead the +// arguments to the underlying system call are the number below +// and a pointer to an array of uintptr. We hide the pointer in the +// socketcall assembly to avoid allocation on every system call. + +const ( + // see linux/net.h + _SOCKET = 1 + _BIND = 2 + _CONNECT = 3 + _LISTEN = 4 + _ACCEPT = 5 + _GETSOCKNAME = 6 + _GETPEERNAME = 7 + _SOCKETPAIR = 8 + _SEND = 9 + _RECV = 10 + _SENDTO = 11 + _RECVFROM = 12 + _SHUTDOWN = 13 + _SETSOCKOPT = 14 + _GETSOCKOPT = 15 + _SENDMSG = 16 + _RECVMSG = 17 + _ACCEPT4 = 18 + _RECVMMSG = 19 + _SENDMMSG = 20 +) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e != 0 { + err = e + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e != 0 { + err = e + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0) + if e != 0 { + err = e + } + return +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + if e != 0 { + err = e + } + return +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e != 0 { + err = e + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Listen(s int, n int) (err error) { + _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Shutdown(s, how int) (err error) { + _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go new file mode 100644 index 0000000..18911c2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -0,0 +1,157 @@ +// Copyright 2009 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. + +// +build amd64,linux + +package unix + +import "syscall" + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//go:noescape +func gettimeofday(tv *Timeval) (err syscall.Errno) + +func Gettimeofday(tv *Timeval) (err error) { + errno := gettimeofday(tv) + if errno != 0 { + return errno + } + return nil +} + +func Getpagesize() int { return 4096 } + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + errno := gettimeofday(&tv) + if errno != 0 { + return 0, errno + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Rip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go new file mode 100644 index 0000000..71d8702 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -0,0 +1,263 @@ +// Copyright 2009 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. + +// +build arm,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +// 64-bit file system and 32-bit uid calls +// (16-bit uid calls are not always supported in newer kernels) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +// Vsyscalls on amd64. +//sysnb Gettimeofday(tv *Timeval) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go new file mode 100644 index 0000000..4b6ff2a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -0,0 +1,192 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,linux + +package unix + +const _SYS_dup = SYS_DUP3 + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Getpagesize() int { return 65536 } + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} + +func Dup2(oldfd int, newfd int) (err error) { + return Dup3(oldfd, newfd, 0) +} + +func Pause() (err error) { + _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// TODO(dfc): constants that should be in zsysnum_linux_arm64.go, remove +// these when the deprecated syscalls that the syscall package relies on +// are removed. +const ( + SYS_GETPGRP = 1060 + SYS_UTIMES = 1037 + SYS_FUTIMESAT = 1066 + SYS_PAUSE = 1061 + SYS_USTAT = 1070 + SYS_UTIME = 1063 + SYS_LCHOWN = 1032 + SYS_TIME = 1062 + SYS_EPOLL_CREATE = 1042 + SYS_EPOLL_WAIT = 1069 +) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + if len(fds) == 0 { + return ppoll(nil, 0, ts, nil) + } + return ppoll(&fds[0], len(fds), ts, nil) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go new file mode 100644 index 0000000..440f54e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -0,0 +1,215 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le + +package unix + +// Linux introduced getdents64 syscall for N64 ABI only in 3.10 +// (May 21 2013, rev dec33abaafc89bcbd78f85fad0513170415a26d5), +// to support older kernels, we have to use getdents for mips64. +// Also note that struct dirent is different for these two. +// Lookup linux_dirent{,64} in kernel source code for details. +const _SYS_getdents = SYS_GETDENTS + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Getpagesize() int { return 65536 } + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +type stat_t struct { + Dev uint32 + Pad0 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad1 [3]uint32 + Size int64 + Atime uint32 + Atime_nsec uint32 + Mtime uint32 + Mtime_nsec uint32 + Ctime uint32 + Ctime_nsec uint32 + Blksize uint32 + Pad2 uint32 + Blocks int64 +} + +//sys fstat(fd int, st *stat_t) (err error) +//sys lstat(path string, st *stat_t) (err error) +//sys stat(path string, st *stat_t) (err error) + +func Fstat(fd int, s *Stat_t) (err error) { + st := &stat_t{} + err = fstat(fd, st) + fillStat_t(s, st) + return +} + +func Lstat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = lstat(path, st) + fillStat_t(s, st) + return +} + +func Stat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = stat(path, st) + fillStat_t(s, st) + return +} + +func fillStat_t(s *Stat_t, st *stat_t) { + s.Dev = st.Dev + s.Ino = st.Ino + s.Mode = st.Mode + s.Nlink = st.Nlink + s.Uid = st.Uid + s.Gid = st.Gid + s.Rdev = st.Rdev + s.Size = st.Size + s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)} + s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)} + s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)} + s.Blksize = st.Blksize + s.Blocks = st.Blocks +} + +func (r *PtraceRegs) PC() uint64 { return r.Regs[64] } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Regs[64] = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go new file mode 100644 index 0000000..60770f6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -0,0 +1,135 @@ +// Copyright 2009 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. + +// +build linux +// +build ppc64 ppc64le + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) = SYS_SYNC_FILE_RANGE2 +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Getpagesize() int { return 65536 } + +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Nip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go new file mode 100644 index 0000000..81c5f47 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -0,0 +1,329 @@ +// Copyright 2016 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. + +// +build s390x,linux + +package unix + +import ( + "unsafe" +) + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) + +func Getpagesize() int { return 4096 } + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0. + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. +// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} + r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0) + use(unsafe.Pointer(&mmap_args[0])) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// On s390x Linux, all the socket calls go through an extra indirection. +// The arguments to the underlying system call (SYS_SOCKETCALL) are the +// number below and a pointer to an array of uintptr. +const ( + // see linux/net.h + netSocket = 1 + netBind = 2 + netConnect = 3 + netListen = 4 + netAccept = 5 + netGetSockName = 6 + netGetPeerName = 7 + netSocketPair = 8 + netSend = 9 + netRecv = 10 + netSendTo = 11 + netRecvFrom = 12 + netShutdown = 13 + netSetSockOpt = 14 + netGetSockOpt = 15 + netSendMsg = 16 + netRecvMsg = 17 + netAccept4 = 18 + netRecvMMsg = 19 + netSendMMsg = 20 +) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { + args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) error { + args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socket(domain int, typ int, proto int) (int, error) { + args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)} + fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error { + args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))} + _, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error { + args := [4]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val)} + _, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func Listen(s int, n int) error { + args := [2]uintptr{uintptr(s), uintptr(n)} + _, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func Shutdown(s, how int) error { + args := [2]uintptr{uintptr(s), uintptr(how)} + _, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go new file mode 100644 index 0000000..c4e945c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -0,0 +1,492 @@ +// Copyright 2009,2010 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. + +// NetBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { + var olen uintptr + + // Get a list of all sysctl nodes below the given MIB by performing + // a sysctl for the given MIB with CTL_QUERY appended. + mib = append(mib, CTL_QUERY) + qnode := Sysctlnode{Flags: SYSCTL_VERS_1} + qp := (*byte)(unsafe.Pointer(&qnode)) + sz := unsafe.Sizeof(qnode) + if err = sysctl(mib, nil, &olen, qp, sz); err != nil { + return nil, err + } + + // Now that we know the size, get the actual nodes. + nodes = make([]Sysctlnode, olen/sz) + np := (*byte)(unsafe.Pointer(&nodes[0])) + if err = sysctl(mib, np, &olen, qp, sz); err != nil { + return nil, err + } + + return nodes, nil +} + +func nametomib(name string) (mib []_C_int, err error) { + + // Split name into components. + var parts []string + last := 0 + for i := 0; i < len(name); i++ { + if name[i] == '.' { + parts = append(parts, name[last:i]) + last = i + 1 + } + } + parts = append(parts, name[last:]) + + // Discover the nodes and construct the MIB OID. + for partno, part := range parts { + nodes, err := sysctlNodes(mib) + if err != nil { + return nil, err + } + for _, node := range nodes { + n := make([]byte, 0) + for i := range node.Name { + if node.Name[i] != 0 { + n = append(n, byte(node.Name[i])) + } + } + if string(n) == part { + mib = append(mib, _C_int(node.Num)) + break + } + } + if len(mib) != partno+1 { + return nil, EINVAL + } + } + + return mib, nil +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + if dirent.Reclen == 0 { + buf = nil + break + } + buf = buf[dirent.Reclen:] + if dirent.Fileno == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:dirent.Namlen]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +//sysnb pipe() (fd1 int, fd2 int, err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// ____semctl13 +// __clone +// __fhopen40 +// __fhstat40 +// __fhstatvfs140 +// __fstat30 +// __getcwd +// __getfh30 +// __getlogin +// __lstat30 +// __mount50 +// __msgctl13 +// __msync13 +// __ntp_gettime30 +// __posix_chown +// __posix_fadvise50 +// __posix_fchown +// __posix_lchown +// __posix_rename +// __setlogin +// __shmctl13 +// __sigaction_sigtramp +// __sigaltstack14 +// __sigpending14 +// __sigprocmask14 +// __sigsuspend14 +// __sigtimedwait +// __stat30 +// __syscall +// __vfork14 +// _ksem_close +// _ksem_destroy +// _ksem_getvalue +// _ksem_init +// _ksem_open +// _ksem_post +// _ksem_trywait +// _ksem_unlink +// _ksem_wait +// _lwp_continue +// _lwp_create +// _lwp_ctl +// _lwp_detach +// _lwp_exit +// _lwp_getname +// _lwp_getprivate +// _lwp_kill +// _lwp_park +// _lwp_self +// _lwp_setname +// _lwp_setprivate +// _lwp_suspend +// _lwp_unpark +// _lwp_unpark_all +// _lwp_wait +// _lwp_wakeup +// _pset_bind +// _sched_getaffinity +// _sched_getparam +// _sched_setaffinity +// _sched_setparam +// acct +// aio_cancel +// aio_error +// aio_fsync +// aio_read +// aio_return +// aio_suspend +// aio_write +// break +// clock_getres +// clock_gettime +// clock_settime +// compat_09_ogetdomainname +// compat_09_osetdomainname +// compat_09_ouname +// compat_10_omsgsys +// compat_10_osemsys +// compat_10_oshmsys +// compat_12_fstat12 +// compat_12_getdirentries +// compat_12_lstat12 +// compat_12_msync +// compat_12_oreboot +// compat_12_oswapon +// compat_12_stat12 +// compat_13_sigaction13 +// compat_13_sigaltstack13 +// compat_13_sigpending13 +// compat_13_sigprocmask13 +// compat_13_sigreturn13 +// compat_13_sigsuspend13 +// compat_14___semctl +// compat_14_msgctl +// compat_14_shmctl +// compat_16___sigaction14 +// compat_16___sigreturn14 +// compat_20_fhstatfs +// compat_20_fstatfs +// compat_20_getfsstat +// compat_20_statfs +// compat_30___fhstat30 +// compat_30___fstat13 +// compat_30___lstat13 +// compat_30___stat13 +// compat_30_fhopen +// compat_30_fhstat +// compat_30_fhstatvfs1 +// compat_30_getdents +// compat_30_getfh +// compat_30_ntp_gettime +// compat_30_socket +// compat_40_mount +// compat_43_fstat43 +// compat_43_lstat43 +// compat_43_oaccept +// compat_43_ocreat +// compat_43_oftruncate +// compat_43_ogetdirentries +// compat_43_ogetdtablesize +// compat_43_ogethostid +// compat_43_ogethostname +// compat_43_ogetkerninfo +// compat_43_ogetpagesize +// compat_43_ogetpeername +// compat_43_ogetrlimit +// compat_43_ogetsockname +// compat_43_okillpg +// compat_43_olseek +// compat_43_ommap +// compat_43_oquota +// compat_43_orecv +// compat_43_orecvfrom +// compat_43_orecvmsg +// compat_43_osend +// compat_43_osendmsg +// compat_43_osethostid +// compat_43_osethostname +// compat_43_osetrlimit +// compat_43_osigblock +// compat_43_osigsetmask +// compat_43_osigstack +// compat_43_osigvec +// compat_43_otruncate +// compat_43_owait +// compat_43_stat43 +// execve +// extattr_delete_fd +// extattr_delete_file +// extattr_delete_link +// extattr_get_fd +// extattr_get_file +// extattr_get_link +// extattr_list_fd +// extattr_list_file +// extattr_list_link +// extattr_set_fd +// extattr_set_file +// extattr_set_link +// extattrctl +// fchroot +// fdatasync +// fgetxattr +// fktrace +// flistxattr +// fork +// fremovexattr +// fsetxattr +// fstatvfs1 +// fsync_range +// getcontext +// getitimer +// getvfsstat +// getxattr +// ioctl +// ktrace +// lchflags +// lchmod +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// lgetxattr +// lio_listio +// listxattr +// llistxattr +// lremovexattr +// lseek +// lsetxattr +// lutimes +// madvise +// mincore +// minherit +// modctl +// mq_close +// mq_getattr +// mq_notify +// mq_open +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +// mremap +// msgget +// msgrcv +// msgsnd +// nfssvc +// ntp_adjtime +// pmc_control +// pmc_get_info +// poll +// pollts +// preadv +// profil +// pselect +// pset_assign +// pset_create +// pset_destroy +// ptrace +// pwritev +// quotactl +// rasctl +// readv +// reboot +// removexattr +// sa_enable +// sa_preempt +// sa_register +// sa_setconcurrency +// sa_stacks +// sa_yield +// sbrk +// sched_yield +// semconfig +// semget +// semop +// setcontext +// setitimer +// setxattr +// shmat +// shmdt +// shmget +// sstk +// statvfs1 +// swapctl +// sysarch +// syscall +// timer_create +// timer_delete +// timer_getoverrun +// timer_gettime +// timer_settime +// undelete +// utrace +// uuidgen +// vadvise +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go new file mode 100644 index 0000000..afaca09 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go @@ -0,0 +1,42 @@ +// Copyright 2009 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. + +// +build 386,netbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go new file mode 100644 index 0000000..a6ff04c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go @@ -0,0 +1,42 @@ +// Copyright 2009 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. + +// +build amd64,netbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int64(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go new file mode 100644 index 0000000..68a6969 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go @@ -0,0 +1,42 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,netbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go new file mode 100644 index 0000000..530792e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly freebsd netbsd openbsd + +package unix + +const ImplementsGetwd = false + +func Getwd() (string, error) { return "", ENOTSUP } diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go new file mode 100644 index 0000000..246131d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -0,0 +1,303 @@ +// Copyright 2009,2010 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. + +// OpenBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func nametomib(name string) (mib []_C_int, err error) { + + // Perform lookup via a binary search + left := 0 + right := len(sysctlMib) - 1 + for { + idx := left + (right-left)/2 + switch { + case name == sysctlMib[idx].ctlname: + return sysctlMib[idx].ctloid, nil + case name > sysctlMib[idx].ctlname: + left = idx + 1 + default: + right = idx - 1 + } + if left > right { + break + } + } + return nil, EINVAL +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + if dirent.Reclen == 0 { + buf = nil + break + } + buf = buf[dirent.Reclen:] + if dirent.Fileno == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:dirent.Namlen]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +//sysnb pipe(p *[2]_C_int) (err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// __getcwd +// __semctl +// __syscall +// __sysctl +// adjfreq +// break +// clock_getres +// clock_gettime +// clock_settime +// closefrom +// execve +// faccessat +// fchmodat +// fchownat +// fcntl +// fhopen +// fhstat +// fhstatfs +// fork +// fstatat +// futimens +// getfh +// getgid +// getitimer +// getlogin +// getresgid +// getresuid +// getrtable +// getthrid +// ioctl +// ktrace +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// linkat +// mincore +// minherit +// mkdirat +// mkfifoat +// mknodat +// mount +// mquery +// msgctl +// msgget +// msgrcv +// msgsnd +// nfssvc +// nnpfspioctl +// openat +// poll +// preadv +// profil +// pwritev +// quotactl +// readlinkat +// readv +// reboot +// renameat +// rfork +// sched_yield +// semget +// semop +// setgroups +// setitimer +// setrtable +// setsockopt +// shmat +// shmctl +// shmdt +// shmget +// sigaction +// sigaltstack +// sigpending +// sigprocmask +// sigreturn +// sigsuspend +// symlinkat +// sysarch +// syscall +// threxit +// thrsigdivert +// thrsleep +// thrwakeup +// unlinkat +// utimensat +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go new file mode 100644 index 0000000..a66ddc5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go @@ -0,0 +1,42 @@ +// Copyright 2009 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. + +// +build 386,openbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go new file mode 100644 index 0000000..0776c1f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go @@ -0,0 +1,42 @@ +// Copyright 2009 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. + +// +build amd64,openbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = nsec / 1e9 + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go new file mode 100644 index 0000000..eb489b1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -0,0 +1,713 @@ +// Copyright 2009 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. + +// Solaris system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_solaris.go or syscall_unix.go. + +package unix + +import ( + "sync/atomic" + "syscall" + "unsafe" +) + +// Implemented in runtime/syscall_solaris.go. +type syscallFunc uintptr + +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +type SockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 + raw RawSockaddrDatalink +} + +func clen(n []byte) int { + for i := 0; i < len(n); i++ { + if n[i] == 0 { + return i + } + } + return len(n) +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + if dirent.Reclen == 0 { + buf = nil + break + } + buf = buf[dirent.Reclen:] + if dirent.Ino == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:clen(bytes[:])]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} + +func pipe() (r uintptr, w uintptr, err uintptr) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + r0, w0, e1 := pipe() + if e1 != 0 { + err = syscall.Errno(e1) + } + p[0], p[1] = int(r0), int(w0) + return +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + // Getcwd will return an error if it failed for any reason. + _, err = Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + // Check for error and sanity check group count. Newer versions of + // Solaris allow up to 1024 (NGROUPS_MAX). + if n < 0 || n > 1024 { + if err != nil { + return nil, err + } + return nil, EINVAL + } else if n == 0 { + return nil, nil + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if n == -1 { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // TODO(rsc): Can we use a single global basep for all calls? + return Getdents(fd, buf, new(uintptr)) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +func wait4(pid uintptr, wstatus *WaitStatus, options uintptr, rusage *Rusage) (wpid uintptr, err uintptr) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + r0, e1 := wait4(uintptr(pid), wstatus, uintptr(options), rusage) + if e1 != 0 { + err = syscall.Errno(e1) + } + return int(r0), err +} + +func gethostname() (name string, err uintptr) + +func Gethostname() (name string, err error) { + name, e1 := gethostname() + if e1 != 0 { + err = syscall.Errno(e1) + } + return name, err +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) (err error) { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0) + if e1 != 0 { + return e1 + } + return nil +} + +//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +// Solaris doesn't have an futimes function because it allows NULL to be +// specified as the path for futimesat. However, Go doesn't like +// NULL-style string interfaces, so this simple wrapper is provided. +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimesat(fd, nil, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + // Assume path ends at NUL. + // This is not technically the Solaris semantics for + // abstract Unix domain sockets -- they are supposed + // to be uninterpreted fixed-size binary blobs -- but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.recvmsg + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrights = (*int8)(unsafe.Pointer(&oob[0])) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); n == -1 { + return + } + oobn = int(msg.Accrightslen) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.sendmsg + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrights = (*int8)(unsafe.Pointer(&oob[0])) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys acct(path *byte) (err error) + +func Acct(path string) (err error) { + if len(path) == 0 { + // Assume caller wants to disable accounting. + return acct(nil) + } + + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + return acct(pathp) +} + +/* + * Expose the ioctl function + */ + +//sys ioctl(fd int, req int, arg uintptr) (err error) + +func IoctlSetInt(fd int, req int, value int) (err error) { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req int, value *Winsize) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req int, value *Termios) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermio(fd int, req int, value *Termio) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlGetInt(fd int, req int) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req int) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req int) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermio(fd int, req int) (*Termio, error) { + var value Termio + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Creat(path string, mode uint32) (fd int, err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) +//sysnb Getgid() (gid int) +//sysnb Getpid() (pid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgid int, err error) +//sys Geteuid() (euid int) +//sys Getegid() (egid int) +//sys Getppid() (ppid int) +//sys Getpriority(which int, who int) (n int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) = libsocket.listen +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Madvise(b []byte, advice int) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Setuid(uid int) (err error) +//sys Shutdown(s int, how int) (err error) = libsocket.shutdown +//sys Stat(path string, stat *Stat_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sys Truncate(path string, length int64) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = libc.umount +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.bind +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.connect +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.sendto +//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.socket +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.socketpair +//sys write(fd int, p []byte) (n int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.getsockopt +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys sysconf(name int) (n int64, err error) + +// pageSize caches the value of Getpagesize, since it can't change +// once the system is booted. +var pageSize int64 // accessed atomically + +func Getpagesize() int { + n := atomic.LoadInt64(&pageSize) + if n == 0 { + n, _ = sysconf(_SC_PAGESIZE) + atomic.StoreInt64(&pageSize, n) + } + return int(n) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go new file mode 100644 index 0000000..5aff62c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go @@ -0,0 +1,35 @@ +// Copyright 2009 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. + +// +build amd64,solaris + +package unix + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = int64(nsec / 1e9) + return +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + // TODO(aram): implement this, see issue 5847. + panic("unimplemented") +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go new file mode 100644 index 0000000..b46b250 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -0,0 +1,297 @@ +// Copyright 2009 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. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import ( + "runtime" + "sync" + "syscall" + "unsafe" +) + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +const ( + darwin64Bit = runtime.GOOS == "darwin" && sizeofPtr == 8 + dragonfly64Bit = runtime.GOOS == "dragonfly" && sizeofPtr == 8 + netbsd32Bit = runtime.GOOS == "netbsd" && sizeofPtr == 4 +) + +// Do the interface allocations only once for common +// Errno values. +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + } + return e +} + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// Mmap manager, for use by operating system-specific implementations. + +type mmapper struct { + sync.Mutex + active map[*byte][]byte // active mappings; key is last byte in mapping + mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) + munmap func(addr uintptr, length uintptr) error +} + +func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + if length <= 0 { + return nil, EINVAL + } + + // Map the requested memory. + addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) + if errno != nil { + return nil, errno + } + + // Slice memory layout + var sl = struct { + addr uintptr + len int + cap int + }{addr, length, length} + + // Use unsafe to turn sl into a []byte. + b := *(*[]byte)(unsafe.Pointer(&sl)) + + // Register mapping in m and return it. + p := &b[cap(b)-1] + m.Lock() + defer m.Unlock() + m.active[p] = b + return b, nil +} + +func (m *mmapper) Munmap(data []byte) (err error) { + if len(data) == 0 || len(data) != cap(data) { + return EINVAL + } + + // Find the base of the mapping. + p := &data[cap(data)-1] + m.Lock() + defer m.Unlock() + b := m.active[p] + if b == nil || &b[0] != &data[0] { + return EINVAL + } + + // Unmap the memory and update m. + if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { + return errno + } + delete(m.active, p) + return nil +} + +func Read(fd int, p []byte) (n int, err error) { + n, err = read(fd, p) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Write(fd int, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = write(fd, p) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func Bind(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getpeername(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getpeername(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { + var n int32 + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return int(n), err +} + +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { + ptr, n, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, flags, ptr, n) +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) +} + +func SetsockoptInt(fd, level, opt int, value int) (err error) { + var n = int32(value) + return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) +} + +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) +} + +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) +} + +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) +} + +func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { + return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) +} + +func SetsockoptString(fd, level, opt int, s string) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s))) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) +} + +func Socket(domain, typ, proto int) (fd int, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return -1, EAFNOSUPPORT + } + fd, err = socket(domain, typ, proto) + return +} + +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + var fdx [2]int32 + err = socketpair(domain, typ, proto, &fdx) + if err == nil { + fd[0] = int(fdx[0]) + fd[1] = int(fdx[1]) + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +var ioSync int64 + +func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } + +func SetNonblock(fd int, nonblocking bool) (err error) { + flag, err := fcntl(fd, F_GETFL, 0) + if err != nil { + return err + } + if nonblocking { + flag |= O_NONBLOCK + } else { + flag &= ^O_NONBLOCK + } + _, err = fcntl(fd, F_SETFL, flag) + return err +} diff --git a/vendor/golang.org/x/sys/unix/types_darwin.go b/vendor/golang.org/x/sys/unix/types_darwin.go new file mode 100644 index 0000000..1153261 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_darwin.go @@ -0,0 +1,250 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define __DARWIN_UNIX03 0 +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timeval32 C.struct_timeval32 + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat64 + +type Statfs_t C.struct_statfs64 + +type Flock_t C.struct_flock + +type Fstore_t C.struct_fstore + +type Radvisory_t C.struct_radvisory + +type Fbootstraptransfer_t C.struct_fbootstraptransfer + +type Log2phys_t C.struct_log2phys + +type Fsid C.struct_fsid + +type Dirent C.struct_dirent + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet4Pktinfo C.struct_in_pktinfo + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfmaMsghdr2 = C.sizeof_struct_ifma_msghdr2 + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfmaMsghdr2 C.struct_ifma_msghdr2 + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) diff --git a/vendor/golang.org/x/sys/unix/types_dragonfly.go b/vendor/golang.org/x/sys/unix/types_dragonfly.go new file mode 100644 index 0000000..f3c971d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_dragonfly.go @@ -0,0 +1,242 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.struct_fsid + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios diff --git a/vendor/golang.org/x/sys/unix/types_freebsd.go b/vendor/golang.org/x/sys/unix/types_freebsd.go new file mode 100644 index 0000000..ae24557 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_freebsd.go @@ -0,0 +1,353 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +// This structure is a duplicate of stat on FreeBSD 8-STABLE. +// See /usr/include/sys/stat.h. +struct stat8 { +#undef st_atimespec st_atim +#undef st_mtimespec st_mtim +#undef st_ctimespec st_ctim +#undef st_birthtimespec st_birthtim + __dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + __dev_t st_rdev; +#if __BSD_VISIBLE + struct timespec st_atimespec; + struct timespec st_mtimespec; + struct timespec st_ctimespec; +#else + time_t st_atime; + long __st_atimensec; + time_t st_mtime; + long __st_mtimensec; + time_t st_ctime; + long __st_ctimensec; +#endif + off_t st_size; + blkcnt_t st_blocks; + blksize_t st_blksize; + fflags_t st_flags; + __uint32_t st_gen; + __int32_t st_lspare; +#if __BSD_VISIBLE + struct timespec st_birthtimespec; + unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); + unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); +#else + time_t st_birthtime; + long st_birthtimensec; + unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec)); + unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec)); +#endif +}; + +// This structure is a duplicate of if_data on FreeBSD 8-STABLE. +// See /usr/include/net/if.h. +struct if_data8 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_spare_char1; + u_char ifi_spare_char2; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + u_long ifi_hwassist; + time_t ifi_epoch; + struct timeval ifi_lastchange; +}; + +// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE. +// See /usr/include/net/if.h. +struct if_msghdr8 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data8 ifm_data; +}; +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat8 + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.struct_fsid + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPMreqn C.struct_ip_mreqn + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPMreqn = C.sizeof_struct_ip_mreqn + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + sizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfMsghdr = C.sizeof_struct_if_msghdr8 + sizeofIfData = C.sizeof_struct_if_data + SizeofIfData = C.sizeof_struct_if_data8 + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type ifMsghdr C.struct_if_msghdr + +type IfMsghdr C.struct_if_msghdr8 + +type ifData C.struct_if_data + +type IfData C.struct_if_data8 + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfZbuf = C.sizeof_struct_bpf_zbuf + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr + SizeofBpfZbufHeader = C.sizeof_struct_bpf_zbuf_header +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfZbuf C.struct_bpf_zbuf + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfZbufHeader C.struct_bpf_zbuf_header + +// Terminal handling + +type Termios C.struct_termios diff --git a/vendor/golang.org/x/sys/unix/types_linux.go b/vendor/golang.org/x/sys/unix/types_linux.go new file mode 100644 index 0000000..7dea79a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_linux.go @@ -0,0 +1,450 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#define _FILE_OFFSET_BITS 64 +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef TCSETS2 +// On systems that have "struct termios2" use this as type Termios. +typedef struct termios2 termios_t; +#else +typedef struct termios termios_t; +#endif + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_ll s5; + struct sockaddr_nl s6; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +// copied from /usr/include/linux/un.h +struct my_sockaddr_un { + sa_family_t sun_family; +#if defined(__ARM_EABI__) || defined(__powerpc64__) + // on ARM char is by default unsigned + signed char sun_path[108]; +#else + char sun_path[108]; +#endif +}; + +#ifdef __ARM_EABI__ +typedef struct user_regs PtraceRegs; +#elif defined(__aarch64__) +typedef struct user_pt_regs PtraceRegs; +#elif defined(__powerpc64__) +typedef struct pt_regs PtraceRegs; +#elif defined(__mips__) +typedef struct user PtraceRegs; +#elif defined(__s390x__) +typedef struct _user_regs_struct PtraceRegs; +#else +typedef struct user_regs_struct PtraceRegs; +#endif + +#if defined(__s390x__) +typedef struct _user_psw_struct ptracePsw; +typedef struct _user_fpregs_struct ptraceFpregs; +typedef struct _user_per_struct ptracePer; +#else +typedef struct {} ptracePsw; +typedef struct {} ptraceFpregs; +typedef struct {} ptracePer; +#endif + +// The real epoll_event is a union, and godefs doesn't handle it well. +struct my_epoll_event { + uint32_t events; +#if defined(__ARM_EABI__) || defined(__aarch64__) + // padding is not specified in linux/eventpoll.h but added to conform to the + // alignment requirements of EABI + int32_t padFd; +#elif defined(__powerpc64__) || defined(__s390x__) + int32_t _padFd; +#endif + int32_t fd; + int32_t pad; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong + PathMax = C.PATH_MAX +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timex C.struct_timex + +type Time_t C.time_t + +type Tms C.struct_tms + +type Utimbuf C.struct_utimbuf + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +type Flock_t C.struct_flock + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_my_sockaddr_un + +type RawSockaddrLinklayer C.struct_sockaddr_ll + +type RawSockaddrNetlink C.struct_sockaddr_nl + +type RawSockaddrHCI C.struct_sockaddr_hci + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPMreqn C.struct_ip_mreqn + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet4Pktinfo C.struct_in_pktinfo + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +type Ucred C.struct_ucred + +type TCPInfo C.struct_tcp_info + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll + SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl + SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPMreqn = C.sizeof_struct_ip_mreqn + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter + SizeofUcred = C.sizeof_struct_ucred + SizeofTCPInfo = C.sizeof_struct_tcp_info +) + +// Netlink routing and interface messages + +const ( + IFA_UNSPEC = C.IFA_UNSPEC + IFA_ADDRESS = C.IFA_ADDRESS + IFA_LOCAL = C.IFA_LOCAL + IFA_LABEL = C.IFA_LABEL + IFA_BROADCAST = C.IFA_BROADCAST + IFA_ANYCAST = C.IFA_ANYCAST + IFA_CACHEINFO = C.IFA_CACHEINFO + IFA_MULTICAST = C.IFA_MULTICAST + IFLA_UNSPEC = C.IFLA_UNSPEC + IFLA_ADDRESS = C.IFLA_ADDRESS + IFLA_BROADCAST = C.IFLA_BROADCAST + IFLA_IFNAME = C.IFLA_IFNAME + IFLA_MTU = C.IFLA_MTU + IFLA_LINK = C.IFLA_LINK + IFLA_QDISC = C.IFLA_QDISC + IFLA_STATS = C.IFLA_STATS + IFLA_COST = C.IFLA_COST + IFLA_PRIORITY = C.IFLA_PRIORITY + IFLA_MASTER = C.IFLA_MASTER + IFLA_WIRELESS = C.IFLA_WIRELESS + IFLA_PROTINFO = C.IFLA_PROTINFO + IFLA_TXQLEN = C.IFLA_TXQLEN + IFLA_MAP = C.IFLA_MAP + IFLA_WEIGHT = C.IFLA_WEIGHT + IFLA_OPERSTATE = C.IFLA_OPERSTATE + IFLA_LINKMODE = C.IFLA_LINKMODE + IFLA_LINKINFO = C.IFLA_LINKINFO + IFLA_NET_NS_PID = C.IFLA_NET_NS_PID + IFLA_IFALIAS = C.IFLA_IFALIAS + IFLA_MAX = C.IFLA_MAX + RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE + RT_SCOPE_SITE = C.RT_SCOPE_SITE + RT_SCOPE_LINK = C.RT_SCOPE_LINK + RT_SCOPE_HOST = C.RT_SCOPE_HOST + RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE + RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC + RT_TABLE_COMPAT = C.RT_TABLE_COMPAT + RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT + RT_TABLE_MAIN = C.RT_TABLE_MAIN + RT_TABLE_LOCAL = C.RT_TABLE_LOCAL + RT_TABLE_MAX = C.RT_TABLE_MAX + RTA_UNSPEC = C.RTA_UNSPEC + RTA_DST = C.RTA_DST + RTA_SRC = C.RTA_SRC + RTA_IIF = C.RTA_IIF + RTA_OIF = C.RTA_OIF + RTA_GATEWAY = C.RTA_GATEWAY + RTA_PRIORITY = C.RTA_PRIORITY + RTA_PREFSRC = C.RTA_PREFSRC + RTA_METRICS = C.RTA_METRICS + RTA_MULTIPATH = C.RTA_MULTIPATH + RTA_FLOW = C.RTA_FLOW + RTA_CACHEINFO = C.RTA_CACHEINFO + RTA_TABLE = C.RTA_TABLE + RTN_UNSPEC = C.RTN_UNSPEC + RTN_UNICAST = C.RTN_UNICAST + RTN_LOCAL = C.RTN_LOCAL + RTN_BROADCAST = C.RTN_BROADCAST + RTN_ANYCAST = C.RTN_ANYCAST + RTN_MULTICAST = C.RTN_MULTICAST + RTN_BLACKHOLE = C.RTN_BLACKHOLE + RTN_UNREACHABLE = C.RTN_UNREACHABLE + RTN_PROHIBIT = C.RTN_PROHIBIT + RTN_THROW = C.RTN_THROW + RTN_NAT = C.RTN_NAT + RTN_XRESOLVE = C.RTN_XRESOLVE + RTNLGRP_NONE = C.RTNLGRP_NONE + RTNLGRP_LINK = C.RTNLGRP_LINK + RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY + RTNLGRP_NEIGH = C.RTNLGRP_NEIGH + RTNLGRP_TC = C.RTNLGRP_TC + RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR + RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE + RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE + RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE + RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR + RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE + RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE + RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO + RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX + RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE + RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT + SizeofNlMsghdr = C.sizeof_struct_nlmsghdr + SizeofNlMsgerr = C.sizeof_struct_nlmsgerr + SizeofRtGenmsg = C.sizeof_struct_rtgenmsg + SizeofNlAttr = C.sizeof_struct_nlattr + SizeofRtAttr = C.sizeof_struct_rtattr + SizeofIfInfomsg = C.sizeof_struct_ifinfomsg + SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg + SizeofRtMsg = C.sizeof_struct_rtmsg + SizeofRtNexthop = C.sizeof_struct_rtnexthop +) + +type NlMsghdr C.struct_nlmsghdr + +type NlMsgerr C.struct_nlmsgerr + +type RtGenmsg C.struct_rtgenmsg + +type NlAttr C.struct_nlattr + +type RtAttr C.struct_rtattr + +type IfInfomsg C.struct_ifinfomsg + +type IfAddrmsg C.struct_ifaddrmsg + +type RtMsg C.struct_rtmsg + +type RtNexthop C.struct_rtnexthop + +// Linux socket filter + +const ( + SizeofSockFilter = C.sizeof_struct_sock_filter + SizeofSockFprog = C.sizeof_struct_sock_fprog +) + +type SockFilter C.struct_sock_filter + +type SockFprog C.struct_sock_fprog + +// Inotify + +type InotifyEvent C.struct_inotify_event + +const SizeofInotifyEvent = C.sizeof_struct_inotify_event + +// Ptrace + +// Register structures +type PtraceRegs C.PtraceRegs + +// Structures contained in PtraceRegs on s390x (exported by mkpost.go) +type ptracePsw C.ptracePsw + +type ptraceFpregs C.ptraceFpregs + +type ptracePer C.ptracePer + +// Misc + +type FdSet C.fd_set + +type Sysinfo_t C.struct_sysinfo + +type Utsname C.struct_utsname + +type Ustat_t C.struct_ustat + +type EpollEvent C.struct_my_epoll_event + +const ( + AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +type PollFd C.struct_pollfd + +const ( + POLLIN = C.POLLIN + POLLPRI = C.POLLPRI + POLLOUT = C.POLLOUT + POLLRDHUP = C.POLLRDHUP + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLNVAL = C.POLLNVAL +) + +type Sigset_t C.sigset_t + +// Terminal handling + +type Termios C.termios_t diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_netbsd.go new file mode 100644 index 0000000..d15f93d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_netbsd.go @@ -0,0 +1,232 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +type Mclpool C.struct_mclpool + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfTimeval C.struct_bpf_timeval + +// Terminal handling + +type Termios C.struct_termios + +// Sysctl + +type Sysctlnode C.struct_sysctlnode diff --git a/vendor/golang.org/x/sys/unix/types_openbsd.go b/vendor/golang.org/x/sys/unix/types_openbsd.go new file mode 100644 index 0000000..b66fe25 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_openbsd.go @@ -0,0 +1,244 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +type Mclpool C.struct_mclpool + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfTimeval C.struct_bpf_timeval + +// Terminal handling + +type Termios C.struct_termios diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go new file mode 100644 index 0000000..6ad50ea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_solaris.go @@ -0,0 +1,260 @@ +// Copyright 2009 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. + +// +build ignore + +/* +Input to cgo -godefs. See also mkerrors.sh and mkall.sh +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +// These defines ensure that builds done on newer versions of Solaris are +// backwards-compatible with older versions of Solaris and +// OpenSolaris-based derivatives. +#define __USE_SUNOS_SOCKETS__ // msghdr +#define __USE_LEGACY_PROTOTYPES__ // iovec +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong + PathMax = C.PATH_MAX +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timeval32 C.struct_timeval32 + +type Tms C.struct_tms + +type Utimbuf C.struct_utimbuf + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Select + +type FdSet C.fd_set + +// Misc + +type Utsname C.struct_utsname + +type Ustat_t C.struct_ustat + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_EACCESS = C.AT_EACCESS +) + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfTimeval C.struct_bpf_timeval + +type BpfHdr C.struct_bpf_hdr + +// sysconf information + +const _SC_PAGESIZE = C._SC_PAGESIZE + +// Terminal handling + +type Termios C.struct_termios + +type Termio C.struct_termio + +type Winsize C.struct_winsize diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go new file mode 100644 index 0000000..8e63888 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go @@ -0,0 +1,1576 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x8008427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc0086924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6981 + SIOCRSLVMULTI = 0xc008693b + SIOCSDRVSPEC = 0x801c697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40087458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x20 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go new file mode 100644 index 0000000..9594f93 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -0,0 +1,1576 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go new file mode 100644 index 0000000..a410e88 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go @@ -0,0 +1,1293 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +// +build arm,darwin + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go new file mode 100644 index 0000000..3189c6b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -0,0 +1,1576 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go new file mode 100644 index 0000000..0feceee --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go @@ -0,0 +1,1530 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,dragonfly + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x21 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x23 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x22 + AF_NATM = 0x1d + AF_NETGRAPH = 0x20 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DEFAULTBUFSIZE = 0x1000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MAX_CLONES = 0x80 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DBF = 0xf + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0x8 + EVFILT_MARKER = 0xf + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x8 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_NODATA = 0x1000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTEXIT_LWP = 0x10000 + EXTEXIT_PROC = 0x0 + EXTEXIT_SETINT = 0x1 + EXTEXIT_SIMPLE = 0x0 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x118e72 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NPOLLING = 0x100000 + IFF_OACTIVE = 0x400 + IFF_OACTIVE_COMPAT = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_POLLING = 0x10000 + IFF_POLLING_COMPAT = 0x10000 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xf3 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SKIP = 0x39 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UNKNOWN = 0x102 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PKTOPTIONS = 0x34 + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_RESETLOG = 0x37 + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CONTROL_END = 0xb + MADV_CONTROL_START = 0xa + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_INVAL = 0xa + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SETMAP = 0xb + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_NOCORE = 0x20000 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_SIZEALIGN = 0x40000 + MAP_STACK = 0x400 + MAP_TRYFIXED = 0x10000 + MAP_VPAGETABLE = 0x2000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FBLOCKING = 0x10000 + MSG_FMASK = 0xffff0000 + MSG_FNONBLOCKING = 0x20000 + MSG_NOSIGNAL = 0x400 + MSG_NOTIFICATION = 0x200 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_SYNC = 0x800 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x4 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x20000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x8000000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FAPPEND = 0x100000 + O_FASYNCWRITE = 0x800000 + O_FBLOCKING = 0x40000 + O_FBUFFERED = 0x2000000 + O_FMASK = 0x7fc0000 + O_FNONBLOCKING = 0x80000 + O_FOFFSET = 0x200000 + O_FSYNC = 0x80 + O_FSYNCWRITE = 0x400000 + O_FUNBUFFERED = 0x1000000 + O_MAPONREAD = 0x4000000 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0xb + RTAX_MPLS1 = 0x8 + RTAX_MPLS2 = 0x9 + RTAX_MPLS3 = 0xa + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_MPLS1 = 0x100 + RTA_MPLS2 = 0x200 + RTA_MPLS3 = 0x400 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPLSOPS = 0x1000000 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x6 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_IWCAPSEGS = 0x400 + RTV_IWMAXSEGS = 0x200 + RTV_MSL = 0x100 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8040720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8040720b + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc0206926 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPOLLCPU = 0xc020697e + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFTSOLEN = 0xc0206980 + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFPOLLCPU = 0x8020697d + SIOCSIFTSOLEN = 0x8020697f + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDSPACE = 0x100a + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_FASTKEEP = 0x80 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x20 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0x100 + TCP_MIN_WINSHIFT = 0x5 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_SIGNATURE_ENABLE = 0x10 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCISPTMASTER = 0x20007455 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VCHECKPT = 0x13 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EASYNC = syscall.Errno(0x63) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x63) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEDIUM = syscall.Errno(0x5d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUNUSED94 = syscall.Errno(0x5e) + EUNUSED95 = syscall.Errno(0x5f) + EUNUSED96 = syscall.Errno(0x60) + EUNUSED97 = syscall.Errno(0x61) + EUNUSED98 = syscall.Errno(0x62) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCKPT = syscall.Signal(0x21) + SIGCKPTEXIT = syscall.Signal(0x22) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "no medium found", + 94: "unknown error: 94", + 95: "unknown error: 95", + 96: "unknown error: 96", + 97: "unknown error: 97", + 98: "unknown error: 98", + 99: "unknown error: 99", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread Scheduler", + 33: "checkPoint", + 34: "checkPointExit", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go new file mode 100644 index 0000000..7b95751 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -0,0 +1,1743 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf6 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xb + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f72 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NET_RT_MAXID = 0x6 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_NORTREF = 0x2 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CONGESTION = 0x40 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go new file mode 100644 index 0000000..e48e779 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -0,0 +1,1748 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf6 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xb + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f72 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NET_RT_MAXID = 0x6 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_NORTREF = 0x2 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8040720a + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8040720b + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CONGESTION = 0x40 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go new file mode 100644 index 0000000..2afbe2d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -0,0 +1,1729 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf6 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xb + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f72 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NET_RT_MAXID = 0x6 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_NORTREF = 0x2 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CONGESTION = 0x40 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go new file mode 100644 index 0000000..8f92012 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -0,0 +1,1819 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + EPOLL_NONBLOCK = 0x800 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_NODAD = 0x2 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x7 + IFF_802_1Q_VLAN = 0x1 + IFF_ALLMULTI = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BONDING = 0x20 + IFF_BRIDGE_PORT = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DISABLE_NETPOLL = 0x1000 + IFF_DONT_BRIDGE = 0x800 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_EBRIDGE = 0x2 + IFF_ECHO = 0x40000 + IFF_ISATAP = 0x80 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MACVLAN_PORT = 0x2000 + IFF_MASTER = 0x400 + IFF_MASTER_8023AD = 0x8 + IFF_MASTER_ALB = 0x10 + IFF_MASTER_ARPMON = 0x100 + IFF_MULTICAST = 0x1000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_OVS_DATAPATH = 0x8000 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_SLAVE_INACTIVE = 0x4 + IFF_SLAVE_NEEDARP = 0x40 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_TX_SKB_SHARING = 0x10000 + IFF_UNICAST_FLT = 0x20000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFF_WAN_HDLC = 0x200 + IFF_XMIT_DST_RELEASE = 0x400 + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DOFORK = 0xb + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x8000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_MASK = 0xff + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SEIZE_DEVEL = 0x80000000 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0xe + RTAX_MTU = 0x2 + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x10 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELNEIGH = 0x1d + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x4f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x10 + RTM_NR_MSGTYPES = 0x40 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_F_DEAD = 0x1 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_DEBUG = 0x1 + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_MARK = 0x24 + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CONGESTION = 0xd + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_QUICKACK = 0xc + TCP_SYNCNT = 0x7 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETHDRSZ = 0x800454d7 + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETHDRSZ = 0x400454d8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x6 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale NFS file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "unknown error 133", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go new file mode 100644 index 0000000..49b6c35 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -0,0 +1,1820 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + EPOLL_NONBLOCK = 0x800 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_NODAD = 0x2 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x7 + IFF_802_1Q_VLAN = 0x1 + IFF_ALLMULTI = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BONDING = 0x20 + IFF_BRIDGE_PORT = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DISABLE_NETPOLL = 0x1000 + IFF_DONT_BRIDGE = 0x800 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_EBRIDGE = 0x2 + IFF_ECHO = 0x40000 + IFF_ISATAP = 0x80 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MACVLAN_PORT = 0x2000 + IFF_MASTER = 0x400 + IFF_MASTER_8023AD = 0x8 + IFF_MASTER_ALB = 0x10 + IFF_MASTER_ARPMON = 0x100 + IFF_MULTICAST = 0x1000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_OVS_DATAPATH = 0x8000 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_SLAVE_INACTIVE = 0x4 + IFF_SLAVE_NEEDARP = 0x40 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_TX_SKB_SHARING = 0x10000 + IFF_UNICAST_FLT = 0x20000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFF_WAN_HDLC = 0x200 + IFF_XMIT_DST_RELEASE = 0x400 + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DOFORK = 0xb + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ARCH_PRCTL = 0x1e + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_MASK = 0xff + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SEIZE_DEVEL = 0x80000000 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0xe + RTAX_MTU = 0x2 + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x10 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELNEIGH = 0x1d + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x4f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x10 + RTM_NR_MSGTYPES = 0x40 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_F_DEAD = 0x1 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_DEBUG = 0x1 + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_MARK = 0x24 + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CONGESTION = 0xd + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_QUICKACK = 0xc + TCP_SYNCNT = 0x7 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETHDRSZ = 0x800454d7 + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETHDRSZ = 0x400454d8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x6 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale NFS file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "unknown error 133", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go new file mode 100644 index 0000000..f036758 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -0,0 +1,1743 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x27 + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_PHY = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ELF_NGREG = 0x12 + ELF_PRARGSZ = 0x50 + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EPOLLERR = 0x8 + EPOLLET = -0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + EPOLL_NONBLOCK = 0x800 + ETH_P_1588 = 0x88f7 + ETH_P_8021Q = 0x8100 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_AARP = 0x80f3 + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_NODAD = 0x2 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x7 + IFF_ALLMULTI = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DYNAMIC = 0x8000 + IFF_LOOPBACK = 0x8 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DOFORK = 0xb + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CONNECTOR = 0xb + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x1000 + O_LARGEFILE = 0x20000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x1000 + O_SYNC = 0x1000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_BROADCAST = 0x1 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FASTROUTE = 0x6 + PACKET_HOST = 0x0 + PACKET_LOOPBACK = 0x5 + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MULTICAST = 0x2 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PARENB = 0x100 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CLEAR_SECCOMP_FILTER = 0x25 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECCOMP_FILTER = 0x23 + PR_GET_SECUREBITS = 0x1b + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_SECCOMP_FILTER_EVENT = 0x1 + PR_SECCOMP_FILTER_SYSCALL = 0x0 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_KEEPCAPS = 0x8 + PR_SET_NAME = 0xf + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_SECCOMP = 0x16 + PR_SET_SECCOMP_FILTER = 0x24 + PR_SET_SECUREBITS = 0x1c + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETCRUNCHREGS = 0x19 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETHBPREGS = 0x1d + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETVFPREGS = 0x1b + PTRACE_GETWMMXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x16 + PTRACE_KILL = 0x8 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_MASK = 0x7f + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SETCRUNCHREGS = 0x1a + PTRACE_SETFPREGS = 0xf + PTRACE_SETHBPREGS = 0x1e + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETVFPREGS = 0x1c + PTRACE_SETWMMXREGS = 0x13 + PTRACE_SET_SYSCALL = 0x17 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_DATA_ADDR = 0x10004 + PT_TEXT_ADDR = 0x10000 + PT_TEXT_END_ADDR = 0x10008 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0xe + RTAX_MTU = 0x2 + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x10 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELNEIGH = 0x1d + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x4f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x10 + RTM_NR_MSGTYPES = 0x40 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_F_DEAD = 0x1 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_DEBUG = 0x1 + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_MARK = 0x24 + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CONGESTION = 0xd + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_QUICKACK = 0xc + TCP_SYNCNT = 0x7 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETHDRSZ = 0x800454d7 + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETHDRSZ = 0x400454d8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x6 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale NFS file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "unknown error 133", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go new file mode 100644 index 0000000..16dcbc9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -0,0 +1,1897 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ELF_NGREG = 0x22 + ELF_PRARGSZ = 0x50 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_NODAD = 0x2 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x7 + IFF_802_1Q_VLAN = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BONDING = 0x20 + IFF_BRIDGE_PORT = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DISABLE_NETPOLL = 0x1000 + IFF_DONT_BRIDGE = 0x800 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_EBRIDGE = 0x2 + IFF_ECHO = 0x40000 + IFF_ISATAP = 0x80 + IFF_LIVE_ADDR_CHANGE = 0x100000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MACVLAN = 0x200000 + IFF_MACVLAN_PORT = 0x2000 + IFF_MASTER = 0x400 + IFF_MASTER_8023AD = 0x8 + IFF_MASTER_ALB = 0x10 + IFF_MASTER_ARPMON = 0x100 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_OVS_DATAPATH = 0x8000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_SLAVE_INACTIVE = 0x4 + IFF_SLAVE_NEEDARP = 0x40 + IFF_SUPP_NOFCS = 0x80000 + IFF_TAP = 0x2 + IFF_TEAM_PORT = 0x40000 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_TX_SKB_SHARING = 0x10000 + IFF_UNICAST_FLT = 0x20000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFF_WAN_HDLC = 0x200 + IFF_XMIT_DST_RELEASE = 0x400 + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x1000ff + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0xf + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x11 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x57 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x12 + RTM_NR_MSGTYPES = 0x48 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_F_DEAD = 0x1 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_DEBUG = 0x1 + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETHDRSZ = 0x800454d7 + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETHDRSZ = 0x400454d8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x6 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go new file mode 100644 index 0000000..36535b2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -0,0 +1,1917 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build mips64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x2000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x16 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5b + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x13 + RTM_NR_MSGTYPES = 0x4c + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x11 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x29 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCFLSH = 0x5407 + TCIFLUSH = 0x0 + TCIOFLUSH = 0x2 + TCOFLUSH = 0x1 + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go new file mode 100644 index 0000000..112f05d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -0,0 +1,1917 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build mips64le,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x2000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x16 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5b + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x13 + RTM_NR_MSGTYPES = 0x4c + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x11 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_WIFI_STATUS = 0x29 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCFLSH = 0x5407 + TCIFLUSH = 0x0 + TCIOFLUSH = 0x2 + TCOFLUSH = 0x1 + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go new file mode 100644 index 0000000..8b42ca2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -0,0 +1,1970 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build ppc64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x1000ff + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0xf + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x11 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x57 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x12 + RTM_NR_MSGTYPES = 0x48 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_F_DEAD = 0x1 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_DEBUG = 0x1 + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETHDRSZ = 0x400454d7 + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETHDRSZ = 0x800454d8 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x5 + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4000 + XTABS = 0xc00 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 58: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go new file mode 100644 index 0000000..e8d12b5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -0,0 +1,1969 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build ppc64le,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_NODAD = 0x2 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x7 + IFF_802_1Q_VLAN = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BONDING = 0x20 + IFF_BRIDGE_PORT = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DISABLE_NETPOLL = 0x1000 + IFF_DONT_BRIDGE = 0x800 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_EBRIDGE = 0x2 + IFF_ECHO = 0x40000 + IFF_ISATAP = 0x80 + IFF_LIVE_ADDR_CHANGE = 0x100000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MACVLAN = 0x200000 + IFF_MACVLAN_PORT = 0x2000 + IFF_MASTER = 0x400 + IFF_MASTER_8023AD = 0x8 + IFF_MASTER_ALB = 0x10 + IFF_MASTER_ARPMON = 0x100 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_OVS_DATAPATH = 0x8000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_SLAVE_INACTIVE = 0x4 + IFF_SLAVE_NEEDARP = 0x40 + IFF_SUPP_NOFCS = 0x80000 + IFF_TAP = 0x2 + IFF_TEAM_PORT = 0x40000 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_TX_SKB_SHARING = 0x10000 + IFF_UNICAST_FLT = 0x20000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFF_WAN_HDLC = 0x200 + IFF_XMIT_DST_RELEASE = 0x400 + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BLOCK_SOURCE = 0x26 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x1000ff + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0xf + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x11 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x57 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x12 + RTM_NR_MSGTYPES = 0x48 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_F_DEAD = 0x1 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_DEBUG = 0x1 + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETHDRSZ = 0x400454d7 + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETHDRSZ = 0x800454d8 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x5 + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4000 + XTABS = 0xc00 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 58: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go new file mode 100644 index 0000000..329f25e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -0,0 +1,2027 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build s390x,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_DISABLE_TE = 0x5010 + PTRACE_ENABLE_TE = 0x5009 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_LAST_BREAK = 0x5006 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_AREA = 0x5003 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_AREA = 0x5002 + PTRACE_PEEKUSR = 0x3 + PTRACE_PEEKUSR_AREA = 0x5000 + PTRACE_PEEK_SYSTEM_CALL = 0x5007 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_AREA = 0x5005 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_AREA = 0x5004 + PTRACE_POKEUSR = 0x6 + PTRACE_POKEUSR_AREA = 0x5001 + PTRACE_POKE_SYSTEM_CALL = 0x5008 + PTRACE_PROT = 0x15 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLEBLOCK = 0xc + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TE_ABORT_RAND = 0x5011 + PTRACE_TRACEME = 0x0 + PT_ACR0 = 0x90 + PT_ACR1 = 0x94 + PT_ACR10 = 0xb8 + PT_ACR11 = 0xbc + PT_ACR12 = 0xc0 + PT_ACR13 = 0xc4 + PT_ACR14 = 0xc8 + PT_ACR15 = 0xcc + PT_ACR2 = 0x98 + PT_ACR3 = 0x9c + PT_ACR4 = 0xa0 + PT_ACR5 = 0xa4 + PT_ACR6 = 0xa8 + PT_ACR7 = 0xac + PT_ACR8 = 0xb0 + PT_ACR9 = 0xb4 + PT_CR_10 = 0x168 + PT_CR_11 = 0x170 + PT_CR_9 = 0x160 + PT_ENDREGS = 0x1af + PT_FPC = 0xd8 + PT_FPR0 = 0xe0 + PT_FPR1 = 0xe8 + PT_FPR10 = 0x130 + PT_FPR11 = 0x138 + PT_FPR12 = 0x140 + PT_FPR13 = 0x148 + PT_FPR14 = 0x150 + PT_FPR15 = 0x158 + PT_FPR2 = 0xf0 + PT_FPR3 = 0xf8 + PT_FPR4 = 0x100 + PT_FPR5 = 0x108 + PT_FPR6 = 0x110 + PT_FPR7 = 0x118 + PT_FPR8 = 0x120 + PT_FPR9 = 0x128 + PT_GPR0 = 0x10 + PT_GPR1 = 0x18 + PT_GPR10 = 0x60 + PT_GPR11 = 0x68 + PT_GPR12 = 0x70 + PT_GPR13 = 0x78 + PT_GPR14 = 0x80 + PT_GPR15 = 0x88 + PT_GPR2 = 0x20 + PT_GPR3 = 0x28 + PT_GPR4 = 0x30 + PT_GPR5 = 0x38 + PT_GPR6 = 0x40 + PT_GPR7 = 0x48 + PT_GPR8 = 0x50 + PT_GPR9 = 0x58 + PT_IEEE_IP = 0x1a8 + PT_LASTOFF = 0x1a8 + PT_ORIGGPR2 = 0xd0 + PT_PSWADDR = 0x8 + PT_PSWMASK = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x16 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5b + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x13 + RTM_NR_MSGTYPES = 0x4c + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x11 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCGARP = 0x8954 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ATM = 0x108 + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_PACKET = 0x107 + SOL_RAW = 0xff + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x6 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go new file mode 100644 index 0000000..b4338d5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go @@ -0,0 +1,1712 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + EN_SW_CTL_INF = 0x1000 + EN_SW_CTL_PREC = 0x300 + EN_SW_CTL_ROUND = 0xc00 + EN_SW_DATACHAIN = 0x80 + EN_SW_DENORM = 0x2 + EN_SW_INVOP = 0x1 + EN_SW_OVERFLOW = 0x8 + EN_SW_PRECLOSS = 0x20 + EN_SW_UNDERFLOW = 0x10 + EN_SW_ZERODIV = 0x4 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go new file mode 100644 index 0000000..4994437 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go @@ -0,0 +1,1702 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x8010427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80104272 + BIOCSUDPF = 0x80104273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8038720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8038720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc028697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0986920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0106926 + SIOCGIFDATA = 0xc0986985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc0286987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc0106978 + SIOCINITIFADDR = 0xc0706984 + SIOCSDRVSPEC = 0x8028697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8098691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x80286988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0986986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80087445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80087444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go new file mode 100644 index 0000000..ac85ca6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go @@ -0,0 +1,1688 @@ +// mkerrors.sh -marm +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -marm _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PRI_IOFLUSH = 0x7c + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x48087446 + TIOCPTSNAME = 0x48087448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go new file mode 100644 index 0000000..3322e99 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -0,0 +1,1584 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_MASK = 0x3ff000 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go new file mode 100644 index 0000000..1758ecc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go @@ -0,0 +1,1583 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8058693c + SIOCBRDGADDS = 0x80586941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8058693d + SIOCBRDGDELS = 0x80586942 + SIOCBRDGFLUSH = 0x80586948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc058693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGSIFS = 0xc058693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0586942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80586955 + SIOCBRDGSIFFLGS = 0x8058693f + SIOCBRDGSIFPRIO = 0x80586954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go new file mode 100644 index 0000000..a08922b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go @@ -0,0 +1,1436 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,solaris + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_802 = 0x12 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_FILE = 0x1 + AF_GOSIP = 0x16 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1a + AF_INET_OFFLOAD = 0x1e + AF_IPX = 0x17 + AF_KEY = 0x1b + AF_LAT = 0xe + AF_LINK = 0x19 + AF_LOCAL = 0x1 + AF_MAX = 0x20 + AF_NBS = 0x7 + AF_NCA = 0x1c + AF_NIT = 0x11 + AF_NS = 0x6 + AF_OSI = 0x13 + AF_OSINET = 0x15 + AF_PACKET = 0x20 + AF_POLICY = 0x1d + AF_PUP = 0x4 + AF_ROUTE = 0x18 + AF_SNA = 0xb + AF_TRILL = 0x1f + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_X25 = 0x14 + ARPHRD_ARCNET = 0x7 + ARPHRD_ATM = 0x10 + ARPHRD_AX25 = 0x3 + ARPHRD_CHAOS = 0x5 + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_FC = 0x12 + ARPHRD_FRAME = 0xf + ARPHRD_HDLC = 0x11 + ARPHRD_IB = 0x20 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IPATM = 0x13 + ARPHRD_METRICOM = 0x17 + ARPHRD_TUNNEL = 0x1f + B0 = 0x0 + B110 = 0x3 + B115200 = 0x12 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B153600 = 0x13 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B230400 = 0x14 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x15 + B38400 = 0xf + B460800 = 0x16 + B4800 = 0xc + B50 = 0x1 + B57600 = 0x10 + B600 = 0x8 + B75 = 0x2 + B76800 = 0x11 + B921600 = 0x17 + B9600 = 0xd + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = -0x3fefbd89 + BIOCGDLTLIST32 = -0x3ff7bd89 + BIOCGETIF = 0x4020426b + BIOCGETLIF = 0x4078426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGRTIMEOUT32 = 0x4008427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = -0x7ffbbd90 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = -0x3ffbbd9a + BIOCSDLT = -0x7ffbbd8a + BIOCSETF = -0x7fefbd99 + BIOCSETF32 = -0x7ff7bd99 + BIOCSETIF = -0x7fdfbd94 + BIOCSETLIF = -0x7f87bd94 + BIOCSHDRCMPLT = -0x7ffbbd8b + BIOCSRTIMEOUT = -0x7fefbd86 + BIOCSRTIMEOUT32 = -0x7ff7bd86 + BIOCSSEESENT = -0x7ffbbd87 + BIOCSTCPF = -0x7fefbd8e + BIOCSUDPF = -0x7fefbd8d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x800 + CLOCK_HIGHRES = 0x4 + CLOCK_LEVEL = 0xa + CLOCK_MONOTONIC = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x5 + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x3 + CLOCK_THREAD_CPUTIME_ID = 0x2 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + CSWTCH = 0x1a + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_BACNET_MS_TP = 0xa5 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FRELAY = 0x6b + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xa2 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_PPPD = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMPTY_SET = 0x0 + EMT_CPCOVF = 0x1 + EQUALITY_CHECK = 0x0 + EXTA = 0xe + EXTB = 0xf + FD_CLOEXEC = 0x1 + FD_NFDBITS = 0x40 + FD_SETSIZE = 0x10000 + FLUSHALL = 0x1 + FLUSHDATA = 0x0 + FLUSHO = 0x2000 + F_ALLOCSP = 0xa + F_ALLOCSP64 = 0xa + F_BADFD = 0x2e + F_BLKSIZE = 0x13 + F_BLOCKS = 0x12 + F_CHKFL = 0x8 + F_COMPAT = 0x8 + F_DUP2FD = 0x9 + F_DUP2FD_CLOEXEC = 0x24 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x25 + F_FREESP = 0xb + F_FREESP64 = 0xb + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETXFL = 0x2d + F_HASREMOTELOCKS = 0x1a + F_ISSTREAM = 0xd + F_MANDDNY = 0x10 + F_MDACC = 0x20 + F_NODNY = 0x0 + F_NPRIV = 0x10 + F_PRIV = 0xf + F_QUOTACTL = 0x11 + F_RDACC = 0x1 + F_RDDNY = 0x1 + F_RDLCK = 0x1 + F_REVOKE = 0x19 + F_RMACC = 0x4 + F_RMDNY = 0x4 + F_RWACC = 0x3 + F_RWDNY = 0x3 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLK64_NBMAND = 0x2a + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETLK_NBMAND = 0x2a + F_SETOWN = 0x18 + F_SHARE = 0x28 + F_SHARE_NBMAND = 0x2b + F_UNLCK = 0x3 + F_UNLKSYS = 0x4 + F_UNSHARE = 0x29 + F_WRACC = 0x2 + F_WRDNY = 0x2 + F_WRLCK = 0x2 + HUPCL = 0x400 + ICANON = 0x2 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFF_ADDRCONF = 0x80000 + IFF_ALLMULTI = 0x200 + IFF_ANYCAST = 0x400000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x7f203003b5a + IFF_COS_ENABLED = 0x200000000 + IFF_DEBUG = 0x4 + IFF_DEPRECATED = 0x40000 + IFF_DHCPRUNNING = 0x4000 + IFF_DUPLICATE = 0x4000000000 + IFF_FAILED = 0x10000000 + IFF_FIXEDMTU = 0x1000000000 + IFF_INACTIVE = 0x40000000 + IFF_INTELLIGENT = 0x400 + IFF_IPMP = 0x8000000000 + IFF_IPMP_CANTCHANGE = 0x10000000 + IFF_IPMP_INVALID = 0x1ec200080 + IFF_IPV4 = 0x1000000 + IFF_IPV6 = 0x2000000 + IFF_L3PROTECT = 0x40000000000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x800 + IFF_MULTI_BCAST = 0x1000 + IFF_NOACCEPT = 0x4000000 + IFF_NOARP = 0x80 + IFF_NOFAILOVER = 0x8000000 + IFF_NOLINKLOCAL = 0x20000000000 + IFF_NOLOCAL = 0x20000 + IFF_NONUD = 0x200000 + IFF_NORTEXCH = 0x800000 + IFF_NOTRAILERS = 0x20 + IFF_NOXMIT = 0x10000 + IFF_OFFLINE = 0x80000000 + IFF_POINTOPOINT = 0x10 + IFF_PREFERRED = 0x400000000 + IFF_PRIVATE = 0x8000 + IFF_PROMISC = 0x100 + IFF_ROUTER = 0x100000 + IFF_RUNNING = 0x40 + IFF_STANDBY = 0x20000000 + IFF_TEMPORARY = 0x800000000 + IFF_UNNUMBERED = 0x2000 + IFF_UP = 0x1 + IFF_VIRTUAL = 0x2000000000 + IFF_VRRP = 0x10000000000 + IFF_XRESOLV = 0x100000000 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6TO4 = 0xca + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_IPV4 = 0xc8 + IFT_IPV6 = 0xc9 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_AUTOCONF_MASK = 0xffff0000 + IN_AUTOCONF_NET = 0xa9fe0000 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_CLASSE_NET = 0xffffffff + IN_LOOPBACKNET = 0x7f + IN_PRIVATE12_MASK = 0xfff00000 + IN_PRIVATE12_NET = 0xac100000 + IN_PRIVATE16_MASK = 0xffff0000 + IN_PRIVATE16_NET = 0xc0a80000 + IN_PRIVATE8_MASK = 0xff000000 + IN_PRIVATE8_NET = 0xa000000 + IPPROTO_AH = 0x33 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x4 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_HELLO = 0x3f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_ND = 0x4d + IPPROTO_NONE = 0x3b + IPPROTO_OSPF = 0x59 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_UDP = 0x11 + IPV6_ADD_MEMBERSHIP = 0x9 + IPV6_BOUND_IF = 0x41 + IPV6_CHECKSUM = 0x18 + IPV6_DONTFRAG = 0x21 + IPV6_DROP_MEMBERSHIP = 0xa + IPV6_DSTOPTS = 0xf + IPV6_FLOWINFO_FLOWLABEL = 0xffff0f00 + IPV6_FLOWINFO_TCLASS = 0xf00f + IPV6_HOPLIMIT = 0xc + IPV6_HOPOPTS = 0xe + IPV6_JOIN_GROUP = 0x9 + IPV6_LEAVE_GROUP = 0xa + IPV6_MULTICAST_HOPS = 0x7 + IPV6_MULTICAST_IF = 0x6 + IPV6_MULTICAST_LOOP = 0x8 + IPV6_NEXTHOP = 0xd + IPV6_PAD1_OPT = 0x0 + IPV6_PATHMTU = 0x25 + IPV6_PKTINFO = 0xb + IPV6_PREFER_SRC_CGA = 0x20 + IPV6_PREFER_SRC_CGADEFAULT = 0x10 + IPV6_PREFER_SRC_CGAMASK = 0x30 + IPV6_PREFER_SRC_COA = 0x2 + IPV6_PREFER_SRC_DEFAULT = 0x15 + IPV6_PREFER_SRC_HOME = 0x1 + IPV6_PREFER_SRC_MASK = 0x3f + IPV6_PREFER_SRC_MIPDEFAULT = 0x1 + IPV6_PREFER_SRC_MIPMASK = 0x3 + IPV6_PREFER_SRC_NONCGA = 0x10 + IPV6_PREFER_SRC_PUBLIC = 0x4 + IPV6_PREFER_SRC_TMP = 0x8 + IPV6_PREFER_SRC_TMPDEFAULT = 0x4 + IPV6_PREFER_SRC_TMPMASK = 0xc + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x13 + IPV6_RECVHOPOPTS = 0x14 + IPV6_RECVPATHMTU = 0x24 + IPV6_RECVPKTINFO = 0x12 + IPV6_RECVRTHDR = 0x16 + IPV6_RECVRTHDRDSTOPTS = 0x17 + IPV6_RECVTCLASS = 0x19 + IPV6_RTHDR = 0x10 + IPV6_RTHDRDSTOPTS = 0x11 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SEC_OPT = 0x22 + IPV6_SRC_PREFERENCES = 0x23 + IPV6_TCLASS = 0x26 + IPV6_UNICAST_HOPS = 0x5 + IPV6_UNSPEC_SRC = 0x42 + IPV6_USE_MIN_MTU = 0x20 + IPV6_V6ONLY = 0x27 + IP_ADD_MEMBERSHIP = 0x13 + IP_ADD_SOURCE_MEMBERSHIP = 0x17 + IP_BLOCK_SOURCE = 0x15 + IP_BOUND_IF = 0x41 + IP_BROADCAST = 0x106 + IP_BROADCAST_TTL = 0x43 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPINIT_IF = 0x45 + IP_DONTFRAG = 0x1b + IP_DONTROUTE = 0x105 + IP_DROP_MEMBERSHIP = 0x14 + IP_DROP_SOURCE_MEMBERSHIP = 0x18 + IP_HDRINCL = 0x2 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x10 + IP_MULTICAST_LOOP = 0x12 + IP_MULTICAST_TTL = 0x11 + IP_NEXTHOP = 0x19 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x9 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVSLLA = 0xa + IP_RECVTTL = 0xb + IP_RETOPTS = 0x8 + IP_REUSEADDR = 0x104 + IP_SEC_OPT = 0x22 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x16 + IP_UNSPEC_SRC = 0x42 + ISIG = 0x1 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + MADV_ACCESS_DEFAULT = 0x6 + MADV_ACCESS_LWP = 0x7 + MADV_ACCESS_MANY = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80 + MAP_ALIGN = 0x200 + MAP_ANON = 0x100 + MAP_ANONYMOUS = 0x100 + MAP_FIXED = 0x10 + MAP_INITDATA = 0x800 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TEXT = 0x400 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x10 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_DUPCTRL = 0x800 + MSG_EOR = 0x8 + MSG_MAXIOVLEN = 0x10 + MSG_NOTIFICATION = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x20 + MSG_WAITALL = 0x40 + MSG_XPG4_2 = 0x8000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_OLDSYNC = 0x0 + MS_SYNC = 0x4 + M_FLUSH = 0x86 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENFAIL = -0x1 + OPOST = 0x1 + O_ACCMODE = 0x600003 + O_APPEND = 0x8 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DSYNC = 0x40 + O_EXCL = 0x400 + O_EXEC = 0x400000 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x4 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NOLINKS = 0x40000 + O_NONBLOCK = 0x80 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x8000 + O_SEARCH = 0x200000 + O_SIOCGIFCONF = -0x3ff796ec + O_SIOCGLIFCONF = -0x3fef9688 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + O_XATTR = 0x4000 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x3 + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_NUMBITS = 0x9 + RTA_SRC = 0x100 + RTF_BLACKHOLE = 0x1000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INDIRECT = 0x40000 + RTF_KERNEL = 0x80000 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTIRT = 0x10000 + RTF_PRIVATE = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SETSRC = 0x20000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTF_ZONE = 0x100000 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0xf + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_FREEADDR = 0x10 + RTM_GET = 0x4 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_VERSION = 0x3 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_AWARE = 0x1 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_RIGHTS = 0x1010 + SCM_TIMESTAMP = 0x1013 + SCM_UCRED = 0x1012 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIG2STR_MAX = 0x20 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDRT = -0x7fcf8df6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fdb96e0 + SIOCDELMULTI = -0x7fdf96ce + SIOCDELRT = -0x7fcf8df5 + SIOCDXARP = -0x7fff9658 + SIOCGARP = -0x3fdb96e1 + SIOCGDSTINFO = -0x3fff965c + SIOCGENADDR = -0x3fdf96ab + SIOCGENPSTATS = -0x3fdf96c7 + SIOCGETLSGCNT = -0x3fef8deb + SIOCGETNAME = 0x40107334 + SIOCGETPEER = 0x40107335 + SIOCGETPROP = -0x3fff8f44 + SIOCGETSGCNT = -0x3feb8deb + SIOCGETSYNC = -0x3fdf96d3 + SIOCGETVIFCNT = -0x3feb8dec + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fdf96f3 + SIOCGIFBRDADDR = -0x3fdf96e9 + SIOCGIFCONF = -0x3ff796a4 + SIOCGIFDSTADDR = -0x3fdf96f1 + SIOCGIFFLAGS = -0x3fdf96ef + SIOCGIFHWADDR = -0x3fdf9647 + SIOCGIFINDEX = -0x3fdf96a6 + SIOCGIFMEM = -0x3fdf96ed + SIOCGIFMETRIC = -0x3fdf96e5 + SIOCGIFMTU = -0x3fdf96ea + SIOCGIFMUXID = -0x3fdf96a8 + SIOCGIFNETMASK = -0x3fdf96e7 + SIOCGIFNUM = 0x40046957 + SIOCGIP6ADDRPOLICY = -0x3fff965e + SIOCGIPMSFILTER = -0x3ffb964c + SIOCGLIFADDR = -0x3f87968f + SIOCGLIFBINDING = -0x3f879666 + SIOCGLIFBRDADDR = -0x3f879685 + SIOCGLIFCONF = -0x3fef965b + SIOCGLIFDADSTATE = -0x3f879642 + SIOCGLIFDSTADDR = -0x3f87968d + SIOCGLIFFLAGS = -0x3f87968b + SIOCGLIFGROUPINFO = -0x3f4b9663 + SIOCGLIFGROUPNAME = -0x3f879664 + SIOCGLIFHWADDR = -0x3f879640 + SIOCGLIFINDEX = -0x3f87967b + SIOCGLIFLNKINFO = -0x3f879674 + SIOCGLIFMETRIC = -0x3f879681 + SIOCGLIFMTU = -0x3f879686 + SIOCGLIFMUXID = -0x3f87967d + SIOCGLIFNETMASK = -0x3f879683 + SIOCGLIFNUM = -0x3ff3967e + SIOCGLIFSRCOF = -0x3fef964f + SIOCGLIFSUBNET = -0x3f879676 + SIOCGLIFTOKEN = -0x3f879678 + SIOCGLIFUSESRC = -0x3f879651 + SIOCGLIFZONE = -0x3f879656 + SIOCGLOWAT = 0x40047303 + SIOCGMSFILTER = -0x3ffb964e + SIOCGPGRP = 0x40047309 + SIOCGSTAMP = -0x3fef9646 + SIOCGXARP = -0x3fff9659 + SIOCIFDETACH = -0x7fdf96c8 + SIOCILB = -0x3ffb9645 + SIOCLIFADDIF = -0x3f879691 + SIOCLIFDELND = -0x7f879673 + SIOCLIFGETND = -0x3f879672 + SIOCLIFREMOVEIF = -0x7f879692 + SIOCLIFSETND = -0x7f879671 + SIOCLOWER = -0x7fdf96d7 + SIOCSARP = -0x7fdb96e2 + SIOCSCTPGOPT = -0x3fef9653 + SIOCSCTPPEELOFF = -0x3ffb9652 + SIOCSCTPSOPT = -0x7fef9654 + SIOCSENABLESDP = -0x3ffb9649 + SIOCSETPROP = -0x7ffb8f43 + SIOCSETSYNC = -0x7fdf96d4 + SIOCSHIWAT = -0x7ffb8d00 + SIOCSIFADDR = -0x7fdf96f4 + SIOCSIFBRDADDR = -0x7fdf96e8 + SIOCSIFDSTADDR = -0x7fdf96f2 + SIOCSIFFLAGS = -0x7fdf96f0 + SIOCSIFINDEX = -0x7fdf96a5 + SIOCSIFMEM = -0x7fdf96ee + SIOCSIFMETRIC = -0x7fdf96e4 + SIOCSIFMTU = -0x7fdf96eb + SIOCSIFMUXID = -0x7fdf96a7 + SIOCSIFNAME = -0x7fdf96b7 + SIOCSIFNETMASK = -0x7fdf96e6 + SIOCSIP6ADDRPOLICY = -0x7fff965d + SIOCSIPMSFILTER = -0x7ffb964b + SIOCSLGETREQ = -0x3fdf96b9 + SIOCSLIFADDR = -0x7f879690 + SIOCSLIFBRDADDR = -0x7f879684 + SIOCSLIFDSTADDR = -0x7f87968e + SIOCSLIFFLAGS = -0x7f87968c + SIOCSLIFGROUPNAME = -0x7f879665 + SIOCSLIFINDEX = -0x7f87967a + SIOCSLIFLNKINFO = -0x7f879675 + SIOCSLIFMETRIC = -0x7f879680 + SIOCSLIFMTU = -0x7f879687 + SIOCSLIFMUXID = -0x7f87967c + SIOCSLIFNAME = -0x3f87967f + SIOCSLIFNETMASK = -0x7f879682 + SIOCSLIFPREFIX = -0x3f879641 + SIOCSLIFSUBNET = -0x7f879677 + SIOCSLIFTOKEN = -0x7f879679 + SIOCSLIFUSESRC = -0x7f879650 + SIOCSLIFZONE = -0x7f879655 + SIOCSLOWAT = -0x7ffb8cfe + SIOCSLSTAT = -0x7fdf96b8 + SIOCSMSFILTER = -0x7ffb964d + SIOCSPGRP = -0x7ffb8cf8 + SIOCSPROMISC = -0x7ffb96d0 + SIOCSQPTR = -0x3ffb9648 + SIOCSSDSTATS = -0x3fdf96d2 + SIOCSSESTATS = -0x3fdf96d1 + SIOCSXARP = -0x7fff965a + SIOCTMYADDR = -0x3ff79670 + SIOCTMYSITE = -0x3ff7966e + SIOCTONLINK = -0x3ff7966f + SIOCUPPER = -0x7fdf96d8 + SIOCX25RCV = -0x3fdf96c4 + SIOCX25TBL = -0x3fdf96c3 + SIOCX25XMT = -0x3fdf96c5 + SIOCXPROTO = 0x20007337 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NDELAY = 0x200000 + SOCK_NONBLOCK = 0x100000 + SOCK_RAW = 0x4 + SOCK_RDM = 0x5 + SOCK_SEQPACKET = 0x6 + SOCK_STREAM = 0x2 + SOCK_TYPE_MASK = 0xffff + SOL_FILTER = 0xfffc + SOL_PACKET = 0xfffd + SOL_ROUTE = 0xfffe + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ALL = 0x3f + SO_ALLZONES = 0x1014 + SO_ANON_MLP = 0x100a + SO_ATTACH_FILTER = 0x40000001 + SO_BAND = 0x4000 + SO_BROADCAST = 0x20 + SO_COPYOPT = 0x80000 + SO_DEBUG = 0x1 + SO_DELIM = 0x8000 + SO_DETACH_FILTER = 0x40000002 + SO_DGRAM_ERRIND = 0x200 + SO_DOMAIN = 0x100c + SO_DONTLINGER = -0x81 + SO_DONTROUTE = 0x10 + SO_ERROPT = 0x40000 + SO_ERROR = 0x1007 + SO_EXCLBIND = 0x1015 + SO_HIWAT = 0x10 + SO_ISNTTY = 0x800 + SO_ISTTY = 0x400 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOWAT = 0x20 + SO_MAC_EXEMPT = 0x100b + SO_MAC_IMPLICIT = 0x1016 + SO_MAXBLK = 0x100000 + SO_MAXPSZ = 0x8 + SO_MINPSZ = 0x4 + SO_MREADOFF = 0x80 + SO_MREADON = 0x40 + SO_NDELOFF = 0x200 + SO_NDELON = 0x100 + SO_NODELIM = 0x10000 + SO_OOBINLINE = 0x100 + SO_PROTOTYPE = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVPSH = 0x100d + SO_RCVTIMEO = 0x1006 + SO_READOPT = 0x1 + SO_RECVUCRED = 0x400 + SO_REUSEADDR = 0x4 + SO_SECATTR = 0x1011 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STRHOLD = 0x20000 + SO_TAIL = 0x200000 + SO_TIMESTAMP = 0x1013 + SO_TONSTOP = 0x2000 + SO_TOSTOP = 0x1000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_VRRP = 0x1017 + SO_WROFF = 0x2 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCIFLUSH = 0x0 + TCIOFLUSH = 0x2 + TCOFLUSH = 0x1 + TCP_ABORT_THRESHOLD = 0x11 + TCP_ANONPRIVBIND = 0x20 + TCP_CONN_ABORT_THRESHOLD = 0x13 + TCP_CONN_NOTIFY_THRESHOLD = 0x12 + TCP_CORK = 0x18 + TCP_EXCLBIND = 0x21 + TCP_INIT_CWND = 0x15 + TCP_KEEPALIVE = 0x8 + TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17 + TCP_KEEPALIVE_THRESHOLD = 0x16 + TCP_KEEPCNT = 0x23 + TCP_KEEPIDLE = 0x22 + TCP_KEEPINTVL = 0x24 + TCP_LINGER2 = 0x1c + TCP_MAXSEG = 0x2 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOTIFY_THRESHOLD = 0x10 + TCP_RECVDSTADDR = 0x14 + TCP_RTO_INITIAL = 0x19 + TCP_RTO_MAX = 0x1b + TCP_RTO_MIN = 0x1a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETSF = 0x5410 + TCSETSW = 0x540f + TCXONC = 0x5406 + TIOC = 0x5400 + TIOCCBRK = 0x747a + TIOCCDTR = 0x7478 + TIOCCILOOP = 0x746c + TIOCEXCL = 0x740d + TIOCFLUSH = 0x7410 + TIOCGETC = 0x7412 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x7414 + TIOCGPPS = 0x547d + TIOCGPPSEV = 0x547f + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5469 + TIOCGWINSZ = 0x5468 + TIOCHPCL = 0x7402 + TIOCKBOF = 0x5409 + TIOCKBON = 0x5408 + TIOCLBIC = 0x747e + TIOCLBIS = 0x747f + TIOCLGET = 0x747c + TIOCLSET = 0x747d + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMSET = 0x741a + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x7471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7473 + TIOCREMOTE = 0x741e + TIOCSBRK = 0x747b + TIOCSCTTY = 0x7484 + TIOCSDTR = 0x7479 + TIOCSETC = 0x7411 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIGNAL = 0x741f + TIOCSILOOP = 0x746d + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x7415 + TIOCSPPS = 0x547e + TIOCSSOFTCAR = 0x546a + TIOCSTART = 0x746e + TIOCSTI = 0x7417 + TIOCSTOP = 0x746f + TIOCSWINSZ = 0x5467 + TOSTOP = 0x100 + VCEOF = 0x8 + VCEOL = 0x9 + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTATUS = 0x10 + VSTOP = 0x9 + VSUSP = 0xa + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WCONTFLG = 0xffff + WCONTINUED = 0x8 + WCOREFLG = 0x80 + WEXITED = 0x1 + WNOHANG = 0x40 + WNOWAIT = 0x80 + WOPTMASK = 0xcf + WRAP = 0x20000 + WSIGMASK = 0x7f + WSTOPFLG = 0x7f + WSTOPPED = 0x4 + WTRAPPED = 0x2 + WUNTRACED = 0x4 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x39) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x2f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x31) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOCKUNMAPPED = syscall.Errno(0x48) + ELOOP = syscall.Errno(0x5a) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTACTIVE = syscall.Errno(0x49) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTRECOVERABLE = syscall.Errno(0x3b) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x30) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0x3a) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMOTE = syscall.Errno(0x42) + ERESTART = syscall.Errno(0x5b) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCANCEL = syscall.Signal(0x24) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGFREEZE = syscall.Signal(0x22) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x29) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGJVM1 = syscall.Signal(0x27) + SIGJVM2 = syscall.Signal(0x28) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x25) + SIGLWP = syscall.Signal(0x21) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHAW = syscall.Signal(0x23) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWAITING = syscall.Signal(0x20) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) + SIGXRES = syscall.Signal(0x26) +) + +// Error table +var errors = [...]string{ + 1: "not owner", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "I/O error", + 6: "no such device or address", + 7: "arg list too long", + 8: "exec format error", + 9: "bad file number", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "not enough space", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "file table overflow", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "argument out of domain", + 34: "result too large", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "deadlock situation detected/avoided", + 46: "no record locks available", + 47: "operation canceled", + 48: "operation not supported", + 49: "disc quota exceeded", + 50: "bad exchange descriptor", + 51: "bad request descriptor", + 52: "message tables full", + 53: "anode table overflow", + 54: "bad request code", + 55: "invalid slot", + 56: "file locking deadlock", + 57: "bad font file format", + 58: "owner of the lock died", + 59: "lock is not recoverable", + 60: "not a stream device", + 61: "no data available", + 62: "timer expired", + 63: "out of stream resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "locked lock was unmapped ", + 73: "facility is not active", + 74: "multihop attempted", + 77: "not a data message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in more shared libraries than system limit", + 87: "can not exec a shared library directly", + 88: "illegal byte sequence", + 89: "operation not applicable", + 90: "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS", + 91: "error 91", + 92: "error 92", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "option not supported by protocol", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported on transport endpoint", + 123: "protocol family not supported", + 124: "address family not supported by protocol family", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection because of reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 143: "cannot send after socket shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale NFS file handle", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal Instruction", + 5: "trace/Breakpoint Trap", + 6: "abort", + 7: "emulation Trap", + 8: "arithmetic Exception", + 9: "killed", + 10: "bus Error", + 11: "segmentation Fault", + 12: "bad System Call", + 13: "broken Pipe", + 14: "alarm Clock", + 15: "terminated", + 16: "user Signal 1", + 17: "user Signal 2", + 18: "child Status Changed", + 19: "power-Fail/Restart", + 20: "window Size Change", + 21: "urgent Socket Condition", + 22: "pollable Event", + 23: "stopped (signal)", + 24: "stopped (user)", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual Timer Expired", + 29: "profiling Timer Expired", + 30: "cpu Limit Exceeded", + 31: "file Size Limit Exceeded", + 32: "no runnable lwp", + 33: "inter-lwp signal", + 34: "checkpoint Freeze", + 35: "checkpoint Thaw", + 36: "thread Cancellation", + 37: "resource Lost", + 38: "resource Control Exceeded", + 39: "reserved for JVM 1", + 40: "reserved for JVM 2", + 41: "information Request", +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go new file mode 100644 index 0000000..031034a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go @@ -0,0 +1,1427 @@ +// mksyscall.pl -l32 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go new file mode 100644 index 0000000..ee96f78 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -0,0 +1,1443 @@ +// mksyscall.pl syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go new file mode 100644 index 0000000..e52cd0d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go @@ -0,0 +1,1427 @@ +// mksyscall.pl syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go new file mode 100644 index 0000000..9863ef9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -0,0 +1,1427 @@ +// mksyscall.pl syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go new file mode 100644 index 0000000..78de48d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -0,0 +1,1413 @@ +// mksyscall.pl -dragonfly syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,dragonfly + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go new file mode 100644 index 0000000..fade994 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -0,0 +1,1665 @@ +// mksyscall.pl -l32 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go new file mode 100644 index 0000000..c28281e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -0,0 +1,1665 @@ +// mksyscall.pl syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go new file mode 100644 index 0000000..a18ba5c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -0,0 +1,1665 @@ +// mksyscall.pl -l32 -arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + use(unsafe.Pointer(_p0)) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go new file mode 100644 index 0000000..1f7a756 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -0,0 +1,1660 @@ +// mksyscall.pl -l32 syscall_linux.go syscall_linux_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go new file mode 100644 index 0000000..b4e24fc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -0,0 +1,1854 @@ +// mksyscall.pl syscall_linux.go syscall_linux_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go new file mode 100644 index 0000000..20bf33c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -0,0 +1,1761 @@ +// mksyscall.pl -l32 -arm syscall_linux.go syscall_linux_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go new file mode 100644 index 0000000..c7286db --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -0,0 +1,1734 @@ +// mksyscall.pl syscall_linux.go syscall_linux_arm64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm64,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go new file mode 100644 index 0000000..b709ed2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -0,0 +1,1803 @@ +// mksyscall.pl syscall_linux.go syscall_linux_mips64x.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build mips64,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go new file mode 100644 index 0000000..5cb1c56 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -0,0 +1,1803 @@ +// mksyscall.pl syscall_linux.go syscall_linux_mips64x.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build mips64le,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go new file mode 100644 index 0000000..873bb18 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -0,0 +1,1865 @@ +// mksyscall.pl syscall_linux.go syscall_linux_ppc64x.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build ppc64,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go new file mode 100644 index 0000000..bf08835 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -0,0 +1,1865 @@ +// mksyscall.pl syscall_linux.go syscall_linux_ppc64x.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build ppc64le,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go new file mode 100644 index 0000000..dbaa53b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -0,0 +1,1645 @@ +// mksyscall.pl syscall_linux.go syscall_linux_s390x.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build s390x,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + use(unsafe.Pointer(_p2)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + use(unsafe.Pointer(_p0)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + use(unsafe.Pointer(_p0)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(newlimit)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go new file mode 100644 index 0000000..b16e1d0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -0,0 +1,1327 @@ +// mksyscall.pl -l32 -netbsd syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,netbsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go new file mode 100644 index 0000000..b63667d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -0,0 +1,1327 @@ +// mksyscall.pl -netbsd syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,netbsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go new file mode 100644 index 0000000..b0d1903 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -0,0 +1,1327 @@ +// mksyscall.pl -l32 -arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,netbsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go new file mode 100644 index 0000000..f91a5b8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -0,0 +1,1387 @@ +// mksyscall.pl -l32 -openbsd syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,openbsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go new file mode 100644 index 0000000..2e8d59d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -0,0 +1,1387 @@ +// mksyscall.pl -openbsd syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,openbsd + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + use(_p0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go new file mode 100644 index 0000000..4326427 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -0,0 +1,1559 @@ +// mksyscall_solaris.pl syscall_solaris.go syscall_solaris_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,solaris + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" +//go:cgo_import_dynamic libc_utimes utimes "libc.so" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" +//go:cgo_import_dynamic libc_futimesat futimesat "libc.so" +//go:cgo_import_dynamic libc_accept accept "libsocket.so" +//go:cgo_import_dynamic libc_recvmsg recvmsg "libsocket.so" +//go:cgo_import_dynamic libc_sendmsg sendmsg "libsocket.so" +//go:cgo_import_dynamic libc_acct acct "libc.so" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:cgo_import_dynamic libc_access access "libc.so" +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" +//go:cgo_import_dynamic libc_chdir chdir "libc.so" +//go:cgo_import_dynamic libc_chmod chmod "libc.so" +//go:cgo_import_dynamic libc_chown chown "libc.so" +//go:cgo_import_dynamic libc_chroot chroot "libc.so" +//go:cgo_import_dynamic libc_close close "libc.so" +//go:cgo_import_dynamic libc_creat creat "libc.so" +//go:cgo_import_dynamic libc_dup dup "libc.so" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" +//go:cgo_import_dynamic libc_exit exit "libc.so" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" +//go:cgo_import_dynamic libc_fchown fchown "libc.so" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" +//go:cgo_import_dynamic libc_fstat fstat "libc.so" +//go:cgo_import_dynamic libc_getdents getdents "libc.so" +//go:cgo_import_dynamic libc_getgid getgid "libc.so" +//go:cgo_import_dynamic libc_getpid getpid "libc.so" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" +//go:cgo_import_dynamic libc_getegid getegid "libc.so" +//go:cgo_import_dynamic libc_getppid getppid "libc.so" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" +//go:cgo_import_dynamic libc_getuid getuid "libc.so" +//go:cgo_import_dynamic libc_kill kill "libc.so" +//go:cgo_import_dynamic libc_lchown lchown "libc.so" +//go:cgo_import_dynamic libc_link link "libc.so" +//go:cgo_import_dynamic libc_listen listen "libsocket.so" +//go:cgo_import_dynamic libc_lstat lstat "libc.so" +//go:cgo_import_dynamic libc_madvise madvise "libc.so" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" +//go:cgo_import_dynamic libc_mknod mknod "libc.so" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" +//go:cgo_import_dynamic libc_mlock mlock "libc.so" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" +//go:cgo_import_dynamic libc_munlock munlock "libc.so" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" +//go:cgo_import_dynamic libc_open open "libc.so" +//go:cgo_import_dynamic libc_openat openat "libc.so" +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" +//go:cgo_import_dynamic libc_pause pause "libc.so" +//go:cgo_import_dynamic libc_pread pread "libc.so" +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" +//go:cgo_import_dynamic libc_read read "libc.so" +//go:cgo_import_dynamic libc_readlink readlink "libc.so" +//go:cgo_import_dynamic libc_rename rename "libc.so" +//go:cgo_import_dynamic libc_renameat renameat "libc.so" +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" +//go:cgo_import_dynamic libc_lseek lseek "libc.so" +//go:cgo_import_dynamic libc_setegid setegid "libc.so" +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" +//go:cgo_import_dynamic libc_setgid setgid "libc.so" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.so" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" +//go:cgo_import_dynamic libc_setregid setregid "libc.so" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" +//go:cgo_import_dynamic libc_setsid setsid "libc.so" +//go:cgo_import_dynamic libc_setuid setuid "libc.so" +//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" +//go:cgo_import_dynamic libc_stat stat "libc.so" +//go:cgo_import_dynamic libc_symlink symlink "libc.so" +//go:cgo_import_dynamic libc_sync sync "libc.so" +//go:cgo_import_dynamic libc_times times "libc.so" +//go:cgo_import_dynamic libc_truncate truncate "libc.so" +//go:cgo_import_dynamic libc_fsync fsync "libc.so" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" +//go:cgo_import_dynamic libc_umask umask "libc.so" +//go:cgo_import_dynamic libc_uname uname "libc.so" +//go:cgo_import_dynamic libc_umount umount "libc.so" +//go:cgo_import_dynamic libc_unlink unlink "libc.so" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" +//go:cgo_import_dynamic libc_ustat ustat "libc.so" +//go:cgo_import_dynamic libc_utime utime "libc.so" +//go:cgo_import_dynamic libc_bind bind "libsocket.so" +//go:cgo_import_dynamic libc_connect connect "libsocket.so" +//go:cgo_import_dynamic libc_mmap mmap "libc.so" +//go:cgo_import_dynamic libc_munmap munmap "libc.so" +//go:cgo_import_dynamic libc_sendto sendto "libsocket.so" +//go:cgo_import_dynamic libc_socket socket "libsocket.so" +//go:cgo_import_dynamic libc_socketpair socketpair "libsocket.so" +//go:cgo_import_dynamic libc_write write "libc.so" +//go:cgo_import_dynamic libc_getsockopt getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_sysconf sysconf "libc.so" + +//go:linkname procgetsockname libc_getsockname +//go:linkname procGetcwd libc_getcwd +//go:linkname procgetgroups libc_getgroups +//go:linkname procsetgroups libc_setgroups +//go:linkname procutimes libc_utimes +//go:linkname procutimensat libc_utimensat +//go:linkname procfcntl libc_fcntl +//go:linkname procfutimesat libc_futimesat +//go:linkname procaccept libc_accept +//go:linkname procrecvmsg libc_recvmsg +//go:linkname procsendmsg libc_sendmsg +//go:linkname procacct libc_acct +//go:linkname procioctl libc_ioctl +//go:linkname procAccess libc_access +//go:linkname procAdjtime libc_adjtime +//go:linkname procChdir libc_chdir +//go:linkname procChmod libc_chmod +//go:linkname procChown libc_chown +//go:linkname procChroot libc_chroot +//go:linkname procClose libc_close +//go:linkname procCreat libc_creat +//go:linkname procDup libc_dup +//go:linkname procDup2 libc_dup2 +//go:linkname procExit libc_exit +//go:linkname procFchdir libc_fchdir +//go:linkname procFchmod libc_fchmod +//go:linkname procFchmodat libc_fchmodat +//go:linkname procFchown libc_fchown +//go:linkname procFchownat libc_fchownat +//go:linkname procFdatasync libc_fdatasync +//go:linkname procFpathconf libc_fpathconf +//go:linkname procFstat libc_fstat +//go:linkname procGetdents libc_getdents +//go:linkname procGetgid libc_getgid +//go:linkname procGetpid libc_getpid +//go:linkname procGetpgid libc_getpgid +//go:linkname procGetpgrp libc_getpgrp +//go:linkname procGeteuid libc_geteuid +//go:linkname procGetegid libc_getegid +//go:linkname procGetppid libc_getppid +//go:linkname procGetpriority libc_getpriority +//go:linkname procGetrlimit libc_getrlimit +//go:linkname procGetrusage libc_getrusage +//go:linkname procGettimeofday libc_gettimeofday +//go:linkname procGetuid libc_getuid +//go:linkname procKill libc_kill +//go:linkname procLchown libc_lchown +//go:linkname procLink libc_link +//go:linkname proclisten libc_listen +//go:linkname procLstat libc_lstat +//go:linkname procMadvise libc_madvise +//go:linkname procMkdir libc_mkdir +//go:linkname procMkdirat libc_mkdirat +//go:linkname procMkfifo libc_mkfifo +//go:linkname procMkfifoat libc_mkfifoat +//go:linkname procMknod libc_mknod +//go:linkname procMknodat libc_mknodat +//go:linkname procMlock libc_mlock +//go:linkname procMlockall libc_mlockall +//go:linkname procMprotect libc_mprotect +//go:linkname procMunlock libc_munlock +//go:linkname procMunlockall libc_munlockall +//go:linkname procNanosleep libc_nanosleep +//go:linkname procOpen libc_open +//go:linkname procOpenat libc_openat +//go:linkname procPathconf libc_pathconf +//go:linkname procPause libc_pause +//go:linkname procPread libc_pread +//go:linkname procPwrite libc_pwrite +//go:linkname procread libc_read +//go:linkname procReadlink libc_readlink +//go:linkname procRename libc_rename +//go:linkname procRenameat libc_renameat +//go:linkname procRmdir libc_rmdir +//go:linkname proclseek libc_lseek +//go:linkname procSetegid libc_setegid +//go:linkname procSeteuid libc_seteuid +//go:linkname procSetgid libc_setgid +//go:linkname procSethostname libc_sethostname +//go:linkname procSetpgid libc_setpgid +//go:linkname procSetpriority libc_setpriority +//go:linkname procSetregid libc_setregid +//go:linkname procSetreuid libc_setreuid +//go:linkname procSetrlimit libc_setrlimit +//go:linkname procSetsid libc_setsid +//go:linkname procSetuid libc_setuid +//go:linkname procshutdown libc_shutdown +//go:linkname procStat libc_stat +//go:linkname procSymlink libc_symlink +//go:linkname procSync libc_sync +//go:linkname procTimes libc_times +//go:linkname procTruncate libc_truncate +//go:linkname procFsync libc_fsync +//go:linkname procFtruncate libc_ftruncate +//go:linkname procUmask libc_umask +//go:linkname procUname libc_uname +//go:linkname procumount libc_umount +//go:linkname procUnlink libc_unlink +//go:linkname procUnlinkat libc_unlinkat +//go:linkname procUstat libc_ustat +//go:linkname procUtime libc_utime +//go:linkname procbind libc_bind +//go:linkname procconnect libc_connect +//go:linkname procmmap libc_mmap +//go:linkname procmunmap libc_munmap +//go:linkname procsendto libc_sendto +//go:linkname procsocket libc_socket +//go:linkname procsocketpair libc_socketpair +//go:linkname procwrite libc_write +//go:linkname procgetsockopt libc_getsockopt +//go:linkname procgetpeername libc_getpeername +//go:linkname procsetsockopt libc_setsockopt +//go:linkname procrecvfrom libc_recvfrom +//go:linkname procsysconf libc_sysconf + +var ( + procgetsockname, + procGetcwd, + procgetgroups, + procsetgroups, + procutimes, + procutimensat, + procfcntl, + procfutimesat, + procaccept, + procrecvmsg, + procsendmsg, + procacct, + procioctl, + procAccess, + procAdjtime, + procChdir, + procChmod, + procChown, + procChroot, + procClose, + procCreat, + procDup, + procDup2, + procExit, + procFchdir, + procFchmod, + procFchmodat, + procFchown, + procFchownat, + procFdatasync, + procFpathconf, + procFstat, + procGetdents, + procGetgid, + procGetpid, + procGetpgid, + procGetpgrp, + procGeteuid, + procGetegid, + procGetppid, + procGetpriority, + procGetrlimit, + procGetrusage, + procGettimeofday, + procGetuid, + procKill, + procLchown, + procLink, + proclisten, + procLstat, + procMadvise, + procMkdir, + procMkdirat, + procMkfifo, + procMkfifoat, + procMknod, + procMknodat, + procMlock, + procMlockall, + procMprotect, + procMunlock, + procMunlockall, + procNanosleep, + procOpen, + procOpenat, + procPathconf, + procPause, + procPread, + procPwrite, + procread, + procReadlink, + procRename, + procRenameat, + procRmdir, + proclseek, + procSetegid, + procSeteuid, + procSetgid, + procSethostname, + procSetpgid, + procSetpriority, + procSetregid, + procSetreuid, + procSetrlimit, + procSetsid, + procSetuid, + procshutdown, + procStat, + procSymlink, + procSync, + procTimes, + procTruncate, + procFsync, + procFtruncate, + procUmask, + procUname, + procumount, + procUnlink, + procUnlinkat, + procUstat, + procUtime, + procbind, + procconnect, + procmmap, + procmunmap, + procsendto, + procsocket, + procsocketpair, + procwrite, + procgetsockopt, + procgetpeername, + procsetsockopt, + procrecvfrom, + procsysconf syscallFunc +) + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getcwd(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func acct(path *byte) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func ioctl(fd int, req int, arg uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Close(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Creat(path string, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) + nfd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Exit(code int) { + sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +func Fchdir(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Fdatasync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getgid() (gid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +func Getpid() (pid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getpgrp() (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Geteuid() (euid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0) + euid = int(r0) + return +} + +func Getegid() (egid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0) + egid = int(r0) + return +} + +func Getppid() (ppid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0) + ppid = int(r0) + return +} + +func Getpriority(which int, who int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getuid() (uid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = e1 + } + return +} + +func Listen(s int, backlog int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mlockall(flags int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Munlockall() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pause() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) + use(unsafe.Pointer(_p0)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = e1 + } + return +} + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = e1 + } + return +} + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Setegid(egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Seteuid(euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setgid(gid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setsid() (pid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Setuid(uid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Shutdown(s int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if e1 != 0 { + err = e1 + } + return +} + +func Sync() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Fsync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Umask(mask int) (oldmask int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + oldmask = int(r0) + return +} + +func Uname(buf *Utsname) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) + use(unsafe.Pointer(_p0)) + if e1 != 0 { + err = e1 + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procbind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procconnect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = e1 + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsocket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsocketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = e1 + } + return +} + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = e1 + } + return +} + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func sysconf(name int) (n int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0) + n = int64(r0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go new file mode 100644 index 0000000..2786773 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go new file mode 100644 index 0000000..09de240 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go new file mode 100644 index 0000000..b8c9aea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go @@ -0,0 +1,358 @@ +// mksysnum_darwin.pl /usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS___SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_ATSOCKET = 206 + SYS_ATGETMSG = 207 + SYS_ATPUTMSG = 208 + SYS_ATPSNDREQ = 209 + SYS_ATPSNDRSP = 210 + SYS_ATPGETREQ = 211 + SYS_ATPGETRSP = 212 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SEM_GETVALUE = 274 + SYS_SEM_INIT = 275 + SYS_SEM_DESTROY = 276 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MAXSYSCALL = 440 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go new file mode 100644 index 0000000..26677eb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go new file mode 100644 index 0000000..d6038fa --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go @@ -0,0 +1,304 @@ +// mksysnum_dragonfly.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,dragonfly + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void exit(int rval); } + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, \ + SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); } + SYS_ACCESS = 33 // { int access(char *path, int flags); } + SYS_CHFLAGS = 34 // { int chflags(char *path, int flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, int flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { pid_t vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_GETDOMAINNAME = 162 // { int getdomainname(char *domainname, int len); } + SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); } + SYS_UNAME = 164 // { int uname(struct utsname *name); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, \ + SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, \ + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \ + // SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int + SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \ + SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, \ + SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\ + SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_AIO_READ = 318 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 319 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(u_char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, \ + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,\ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,\ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, \ + SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_SCTP_PEELOFF = 364 // { int sctp_peeloff(int sd, caddr_t name ); } + SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \ + SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); } + SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); } + SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); } + SYS_EXEC_SYS_REGISTER = 465 // { int exec_sys_register(void *entry); } + SYS_EXEC_SYS_UNREGISTER = 466 // { int exec_sys_unregister(int id); } + SYS_SYS_CHECKPOINT = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); } + SYS_MOUNTCTL = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); } + SYS_UMTX_SLEEP = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); } + SYS_UMTX_WAKEUP = 470 // { int umtx_wakeup(volatile const int *ptr, int count); } + SYS_JAIL_ATTACH = 471 // { int jail_attach(int jid); } + SYS_SET_TLS_AREA = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_GET_TLS_AREA = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_CLOSEFROM = 474 // { int closefrom(int fd); } + SYS_STAT = 475 // { int stat(const char *path, struct stat *ub); } + SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); } + SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, \ + SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); } + SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, \ + SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); } + SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); } + SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); } + SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); } + SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); } + SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, \ + SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \ + SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, \ + SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, \ + SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, \ + SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \ + SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); } + SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); } + SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); } + SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); } + SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); } + SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); } + SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); } + SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); } + SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, \ + SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); } + SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, \ + SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, \ + SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, \ + SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); } + SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, \ + SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, \ + SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); } + SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); } + SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, \ + SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, \ + SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, \ + SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \ + SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \ + SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, \ + SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \ + SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); } + SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); } + SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); } + SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_SWAPOFF = 529 // { int swapoff(char *name); } + SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, \ + SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_EACCESS = 532 // { int eaccess(char *path, int flags); } + SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } + SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } + SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go new file mode 100644 index 0000000..262a845 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -0,0 +1,351 @@ +// mksysnum_freebsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } + SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go new file mode 100644 index 0000000..57a60ea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -0,0 +1,351 @@ +// mksysnum_freebsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } + SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go new file mode 100644 index 0000000..206b9f6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -0,0 +1,351 @@ +// mksysnum_freebsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } + SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go new file mode 100644 index 0000000..ba952c6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -0,0 +1,355 @@ +// mksysnum_linux.pl /usr/include/asm/unistd_32.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86OLD = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_VM86 = 166 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_MADVISE1 = 219 + SYS_GETDENTS64 = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_SET_THREAD_AREA = 243 + SYS_GET_THREAD_AREA = 244 + SYS_IO_SETUP = 245 + SYS_IO_DESTROY = 246 + SYS_IO_GETEVENTS = 247 + SYS_IO_SUBMIT = 248 + SYS_IO_CANCEL = 249 + SYS_FADVISE64 = 250 + SYS_EXIT_GROUP = 252 + SYS_LOOKUP_DCOOKIE = 253 + SYS_EPOLL_CREATE = 254 + SYS_EPOLL_CTL = 255 + SYS_EPOLL_WAIT = 256 + SYS_REMAP_FILE_PAGES = 257 + SYS_SET_TID_ADDRESS = 258 + SYS_TIMER_CREATE = 259 + SYS_TIMER_SETTIME = 260 + SYS_TIMER_GETTIME = 261 + SYS_TIMER_GETOVERRUN = 262 + SYS_TIMER_DELETE = 263 + SYS_CLOCK_SETTIME = 264 + SYS_CLOCK_GETTIME = 265 + SYS_CLOCK_GETRES = 266 + SYS_CLOCK_NANOSLEEP = 267 + SYS_STATFS64 = 268 + SYS_FSTATFS64 = 269 + SYS_TGKILL = 270 + SYS_UTIMES = 271 + SYS_FADVISE64_64 = 272 + SYS_VSERVER = 273 + SYS_MBIND = 274 + SYS_GET_MEMPOLICY = 275 + SYS_SET_MEMPOLICY = 276 + SYS_MQ_OPEN = 277 + SYS_MQ_UNLINK = 278 + SYS_MQ_TIMEDSEND = 279 + SYS_MQ_TIMEDRECEIVE = 280 + SYS_MQ_NOTIFY = 281 + SYS_MQ_GETSETATTR = 282 + SYS_KEXEC_LOAD = 283 + SYS_WAITID = 284 + SYS_ADD_KEY = 286 + SYS_REQUEST_KEY = 287 + SYS_KEYCTL = 288 + SYS_IOPRIO_SET = 289 + SYS_IOPRIO_GET = 290 + SYS_INOTIFY_INIT = 291 + SYS_INOTIFY_ADD_WATCH = 292 + SYS_INOTIFY_RM_WATCH = 293 + SYS_MIGRATE_PAGES = 294 + SYS_OPENAT = 295 + SYS_MKDIRAT = 296 + SYS_MKNODAT = 297 + SYS_FCHOWNAT = 298 + SYS_FUTIMESAT = 299 + SYS_FSTATAT64 = 300 + SYS_UNLINKAT = 301 + SYS_RENAMEAT = 302 + SYS_LINKAT = 303 + SYS_SYMLINKAT = 304 + SYS_READLINKAT = 305 + SYS_FCHMODAT = 306 + SYS_FACCESSAT = 307 + SYS_PSELECT6 = 308 + SYS_PPOLL = 309 + SYS_UNSHARE = 310 + SYS_SET_ROBUST_LIST = 311 + SYS_GET_ROBUST_LIST = 312 + SYS_SPLICE = 313 + SYS_SYNC_FILE_RANGE = 314 + SYS_TEE = 315 + SYS_VMSPLICE = 316 + SYS_MOVE_PAGES = 317 + SYS_GETCPU = 318 + SYS_EPOLL_PWAIT = 319 + SYS_UTIMENSAT = 320 + SYS_SIGNALFD = 321 + SYS_TIMERFD_CREATE = 322 + SYS_EVENTFD = 323 + SYS_FALLOCATE = 324 + SYS_TIMERFD_SETTIME = 325 + SYS_TIMERFD_GETTIME = 326 + SYS_SIGNALFD4 = 327 + SYS_EVENTFD2 = 328 + SYS_EPOLL_CREATE1 = 329 + SYS_DUP3 = 330 + SYS_PIPE2 = 331 + SYS_INOTIFY_INIT1 = 332 + SYS_PREADV = 333 + SYS_PWRITEV = 334 + SYS_RT_TGSIGQUEUEINFO = 335 + SYS_PERF_EVENT_OPEN = 336 + SYS_RECVMMSG = 337 + SYS_FANOTIFY_INIT = 338 + SYS_FANOTIFY_MARK = 339 + SYS_PRLIMIT64 = 340 + SYS_NAME_TO_HANDLE_AT = 341 + SYS_OPEN_BY_HANDLE_AT = 342 + SYS_CLOCK_ADJTIME = 343 + SYS_SYNCFS = 344 + SYS_SENDMMSG = 345 + SYS_SETNS = 346 + SYS_PROCESS_VM_READV = 347 + SYS_PROCESS_VM_WRITEV = 348 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go new file mode 100644 index 0000000..ddac31f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -0,0 +1,321 @@ +// mksysnum_linux.pl /usr/include/asm/unistd_64.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,linux + +package unix + +const ( + SYS_READ = 0 + SYS_WRITE = 1 + SYS_OPEN = 2 + SYS_CLOSE = 3 + SYS_STAT = 4 + SYS_FSTAT = 5 + SYS_LSTAT = 6 + SYS_POLL = 7 + SYS_LSEEK = 8 + SYS_MMAP = 9 + SYS_MPROTECT = 10 + SYS_MUNMAP = 11 + SYS_BRK = 12 + SYS_RT_SIGACTION = 13 + SYS_RT_SIGPROCMASK = 14 + SYS_RT_SIGRETURN = 15 + SYS_IOCTL = 16 + SYS_PREAD64 = 17 + SYS_PWRITE64 = 18 + SYS_READV = 19 + SYS_WRITEV = 20 + SYS_ACCESS = 21 + SYS_PIPE = 22 + SYS_SELECT = 23 + SYS_SCHED_YIELD = 24 + SYS_MREMAP = 25 + SYS_MSYNC = 26 + SYS_MINCORE = 27 + SYS_MADVISE = 28 + SYS_SHMGET = 29 + SYS_SHMAT = 30 + SYS_SHMCTL = 31 + SYS_DUP = 32 + SYS_DUP2 = 33 + SYS_PAUSE = 34 + SYS_NANOSLEEP = 35 + SYS_GETITIMER = 36 + SYS_ALARM = 37 + SYS_SETITIMER = 38 + SYS_GETPID = 39 + SYS_SENDFILE = 40 + SYS_SOCKET = 41 + SYS_CONNECT = 42 + SYS_ACCEPT = 43 + SYS_SENDTO = 44 + SYS_RECVFROM = 45 + SYS_SENDMSG = 46 + SYS_RECVMSG = 47 + SYS_SHUTDOWN = 48 + SYS_BIND = 49 + SYS_LISTEN = 50 + SYS_GETSOCKNAME = 51 + SYS_GETPEERNAME = 52 + SYS_SOCKETPAIR = 53 + SYS_SETSOCKOPT = 54 + SYS_GETSOCKOPT = 55 + SYS_CLONE = 56 + SYS_FORK = 57 + SYS_VFORK = 58 + SYS_EXECVE = 59 + SYS_EXIT = 60 + SYS_WAIT4 = 61 + SYS_KILL = 62 + SYS_UNAME = 63 + SYS_SEMGET = 64 + SYS_SEMOP = 65 + SYS_SEMCTL = 66 + SYS_SHMDT = 67 + SYS_MSGGET = 68 + SYS_MSGSND = 69 + SYS_MSGRCV = 70 + SYS_MSGCTL = 71 + SYS_FCNTL = 72 + SYS_FLOCK = 73 + SYS_FSYNC = 74 + SYS_FDATASYNC = 75 + SYS_TRUNCATE = 76 + SYS_FTRUNCATE = 77 + SYS_GETDENTS = 78 + SYS_GETCWD = 79 + SYS_CHDIR = 80 + SYS_FCHDIR = 81 + SYS_RENAME = 82 + SYS_MKDIR = 83 + SYS_RMDIR = 84 + SYS_CREAT = 85 + SYS_LINK = 86 + SYS_UNLINK = 87 + SYS_SYMLINK = 88 + SYS_READLINK = 89 + SYS_CHMOD = 90 + SYS_FCHMOD = 91 + SYS_CHOWN = 92 + SYS_FCHOWN = 93 + SYS_LCHOWN = 94 + SYS_UMASK = 95 + SYS_GETTIMEOFDAY = 96 + SYS_GETRLIMIT = 97 + SYS_GETRUSAGE = 98 + SYS_SYSINFO = 99 + SYS_TIMES = 100 + SYS_PTRACE = 101 + SYS_GETUID = 102 + SYS_SYSLOG = 103 + SYS_GETGID = 104 + SYS_SETUID = 105 + SYS_SETGID = 106 + SYS_GETEUID = 107 + SYS_GETEGID = 108 + SYS_SETPGID = 109 + SYS_GETPPID = 110 + SYS_GETPGRP = 111 + SYS_SETSID = 112 + SYS_SETREUID = 113 + SYS_SETREGID = 114 + SYS_GETGROUPS = 115 + SYS_SETGROUPS = 116 + SYS_SETRESUID = 117 + SYS_GETRESUID = 118 + SYS_SETRESGID = 119 + SYS_GETRESGID = 120 + SYS_GETPGID = 121 + SYS_SETFSUID = 122 + SYS_SETFSGID = 123 + SYS_GETSID = 124 + SYS_CAPGET = 125 + SYS_CAPSET = 126 + SYS_RT_SIGPENDING = 127 + SYS_RT_SIGTIMEDWAIT = 128 + SYS_RT_SIGQUEUEINFO = 129 + SYS_RT_SIGSUSPEND = 130 + SYS_SIGALTSTACK = 131 + SYS_UTIME = 132 + SYS_MKNOD = 133 + SYS_USELIB = 134 + SYS_PERSONALITY = 135 + SYS_USTAT = 136 + SYS_STATFS = 137 + SYS_FSTATFS = 138 + SYS_SYSFS = 139 + SYS_GETPRIORITY = 140 + SYS_SETPRIORITY = 141 + SYS_SCHED_SETPARAM = 142 + SYS_SCHED_GETPARAM = 143 + SYS_SCHED_SETSCHEDULER = 144 + SYS_SCHED_GETSCHEDULER = 145 + SYS_SCHED_GET_PRIORITY_MAX = 146 + SYS_SCHED_GET_PRIORITY_MIN = 147 + SYS_SCHED_RR_GET_INTERVAL = 148 + SYS_MLOCK = 149 + SYS_MUNLOCK = 150 + SYS_MLOCKALL = 151 + SYS_MUNLOCKALL = 152 + SYS_VHANGUP = 153 + SYS_MODIFY_LDT = 154 + SYS_PIVOT_ROOT = 155 + SYS__SYSCTL = 156 + SYS_PRCTL = 157 + SYS_ARCH_PRCTL = 158 + SYS_ADJTIMEX = 159 + SYS_SETRLIMIT = 160 + SYS_CHROOT = 161 + SYS_SYNC = 162 + SYS_ACCT = 163 + SYS_SETTIMEOFDAY = 164 + SYS_MOUNT = 165 + SYS_UMOUNT2 = 166 + SYS_SWAPON = 167 + SYS_SWAPOFF = 168 + SYS_REBOOT = 169 + SYS_SETHOSTNAME = 170 + SYS_SETDOMAINNAME = 171 + SYS_IOPL = 172 + SYS_IOPERM = 173 + SYS_CREATE_MODULE = 174 + SYS_INIT_MODULE = 175 + SYS_DELETE_MODULE = 176 + SYS_GET_KERNEL_SYMS = 177 + SYS_QUERY_MODULE = 178 + SYS_QUOTACTL = 179 + SYS_NFSSERVCTL = 180 + SYS_GETPMSG = 181 + SYS_PUTPMSG = 182 + SYS_AFS_SYSCALL = 183 + SYS_TUXCALL = 184 + SYS_SECURITY = 185 + SYS_GETTID = 186 + SYS_READAHEAD = 187 + SYS_SETXATTR = 188 + SYS_LSETXATTR = 189 + SYS_FSETXATTR = 190 + SYS_GETXATTR = 191 + SYS_LGETXATTR = 192 + SYS_FGETXATTR = 193 + SYS_LISTXATTR = 194 + SYS_LLISTXATTR = 195 + SYS_FLISTXATTR = 196 + SYS_REMOVEXATTR = 197 + SYS_LREMOVEXATTR = 198 + SYS_FREMOVEXATTR = 199 + SYS_TKILL = 200 + SYS_TIME = 201 + SYS_FUTEX = 202 + SYS_SCHED_SETAFFINITY = 203 + SYS_SCHED_GETAFFINITY = 204 + SYS_SET_THREAD_AREA = 205 + SYS_IO_SETUP = 206 + SYS_IO_DESTROY = 207 + SYS_IO_GETEVENTS = 208 + SYS_IO_SUBMIT = 209 + SYS_IO_CANCEL = 210 + SYS_GET_THREAD_AREA = 211 + SYS_LOOKUP_DCOOKIE = 212 + SYS_EPOLL_CREATE = 213 + SYS_EPOLL_CTL_OLD = 214 + SYS_EPOLL_WAIT_OLD = 215 + SYS_REMAP_FILE_PAGES = 216 + SYS_GETDENTS64 = 217 + SYS_SET_TID_ADDRESS = 218 + SYS_RESTART_SYSCALL = 219 + SYS_SEMTIMEDOP = 220 + SYS_FADVISE64 = 221 + SYS_TIMER_CREATE = 222 + SYS_TIMER_SETTIME = 223 + SYS_TIMER_GETTIME = 224 + SYS_TIMER_GETOVERRUN = 225 + SYS_TIMER_DELETE = 226 + SYS_CLOCK_SETTIME = 227 + SYS_CLOCK_GETTIME = 228 + SYS_CLOCK_GETRES = 229 + SYS_CLOCK_NANOSLEEP = 230 + SYS_EXIT_GROUP = 231 + SYS_EPOLL_WAIT = 232 + SYS_EPOLL_CTL = 233 + SYS_TGKILL = 234 + SYS_UTIMES = 235 + SYS_VSERVER = 236 + SYS_MBIND = 237 + SYS_SET_MEMPOLICY = 238 + SYS_GET_MEMPOLICY = 239 + SYS_MQ_OPEN = 240 + SYS_MQ_UNLINK = 241 + SYS_MQ_TIMEDSEND = 242 + SYS_MQ_TIMEDRECEIVE = 243 + SYS_MQ_NOTIFY = 244 + SYS_MQ_GETSETATTR = 245 + SYS_KEXEC_LOAD = 246 + SYS_WAITID = 247 + SYS_ADD_KEY = 248 + SYS_REQUEST_KEY = 249 + SYS_KEYCTL = 250 + SYS_IOPRIO_SET = 251 + SYS_IOPRIO_GET = 252 + SYS_INOTIFY_INIT = 253 + SYS_INOTIFY_ADD_WATCH = 254 + SYS_INOTIFY_RM_WATCH = 255 + SYS_MIGRATE_PAGES = 256 + SYS_OPENAT = 257 + SYS_MKDIRAT = 258 + SYS_MKNODAT = 259 + SYS_FCHOWNAT = 260 + SYS_FUTIMESAT = 261 + SYS_NEWFSTATAT = 262 + SYS_UNLINKAT = 263 + SYS_RENAMEAT = 264 + SYS_LINKAT = 265 + SYS_SYMLINKAT = 266 + SYS_READLINKAT = 267 + SYS_FCHMODAT = 268 + SYS_FACCESSAT = 269 + SYS_PSELECT6 = 270 + SYS_PPOLL = 271 + SYS_UNSHARE = 272 + SYS_SET_ROBUST_LIST = 273 + SYS_GET_ROBUST_LIST = 274 + SYS_SPLICE = 275 + SYS_TEE = 276 + SYS_SYNC_FILE_RANGE = 277 + SYS_VMSPLICE = 278 + SYS_MOVE_PAGES = 279 + SYS_UTIMENSAT = 280 + SYS_EPOLL_PWAIT = 281 + SYS_SIGNALFD = 282 + SYS_TIMERFD_CREATE = 283 + SYS_EVENTFD = 284 + SYS_FALLOCATE = 285 + SYS_TIMERFD_SETTIME = 286 + SYS_TIMERFD_GETTIME = 287 + SYS_ACCEPT4 = 288 + SYS_SIGNALFD4 = 289 + SYS_EVENTFD2 = 290 + SYS_EPOLL_CREATE1 = 291 + SYS_DUP3 = 292 + SYS_PIPE2 = 293 + SYS_INOTIFY_INIT1 = 294 + SYS_PREADV = 295 + SYS_PWRITEV = 296 + SYS_RT_TGSIGQUEUEINFO = 297 + SYS_PERF_EVENT_OPEN = 298 + SYS_RECVMMSG = 299 + SYS_FANOTIFY_INIT = 300 + SYS_FANOTIFY_MARK = 301 + SYS_PRLIMIT64 = 302 + SYS_NAME_TO_HANDLE_AT = 303 + SYS_OPEN_BY_HANDLE_AT = 304 + SYS_CLOCK_ADJTIME = 305 + SYS_SYNCFS = 306 + SYS_SENDMMSG = 307 + SYS_SETNS = 308 + SYS_GETCPU = 309 + SYS_PROCESS_VM_READV = 310 + SYS_PROCESS_VM_WRITEV = 311 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go new file mode 100644 index 0000000..45ced17 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -0,0 +1,356 @@ +// mksysnum_linux.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,linux + +package unix + +const ( + SYS_OABI_SYSCALL_BASE = 0 + SYS_SYSCALL_BASE = 0 + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_VHANGUP = 111 + SYS_SYSCALL = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_GETDENTS64 = 217 + SYS_PIVOT_ROOT = 218 + SYS_MINCORE = 219 + SYS_MADVISE = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_LOOKUP_DCOOKIE = 249 + SYS_EPOLL_CREATE = 250 + SYS_EPOLL_CTL = 251 + SYS_EPOLL_WAIT = 252 + SYS_REMAP_FILE_PAGES = 253 + SYS_SET_TID_ADDRESS = 256 + SYS_TIMER_CREATE = 257 + SYS_TIMER_SETTIME = 258 + SYS_TIMER_GETTIME = 259 + SYS_TIMER_GETOVERRUN = 260 + SYS_TIMER_DELETE = 261 + SYS_CLOCK_SETTIME = 262 + SYS_CLOCK_GETTIME = 263 + SYS_CLOCK_GETRES = 264 + SYS_CLOCK_NANOSLEEP = 265 + SYS_STATFS64 = 266 + SYS_FSTATFS64 = 267 + SYS_TGKILL = 268 + SYS_UTIMES = 269 + SYS_ARM_FADVISE64_64 = 270 + SYS_PCICONFIG_IOBASE = 271 + SYS_PCICONFIG_READ = 272 + SYS_PCICONFIG_WRITE = 273 + SYS_MQ_OPEN = 274 + SYS_MQ_UNLINK = 275 + SYS_MQ_TIMEDSEND = 276 + SYS_MQ_TIMEDRECEIVE = 277 + SYS_MQ_NOTIFY = 278 + SYS_MQ_GETSETATTR = 279 + SYS_WAITID = 280 + SYS_SOCKET = 281 + SYS_BIND = 282 + SYS_CONNECT = 283 + SYS_LISTEN = 284 + SYS_ACCEPT = 285 + SYS_GETSOCKNAME = 286 + SYS_GETPEERNAME = 287 + SYS_SOCKETPAIR = 288 + SYS_SEND = 289 + SYS_SENDTO = 290 + SYS_RECV = 291 + SYS_RECVFROM = 292 + SYS_SHUTDOWN = 293 + SYS_SETSOCKOPT = 294 + SYS_GETSOCKOPT = 295 + SYS_SENDMSG = 296 + SYS_RECVMSG = 297 + SYS_SEMOP = 298 + SYS_SEMGET = 299 + SYS_SEMCTL = 300 + SYS_MSGSND = 301 + SYS_MSGRCV = 302 + SYS_MSGGET = 303 + SYS_MSGCTL = 304 + SYS_SHMAT = 305 + SYS_SHMDT = 306 + SYS_SHMGET = 307 + SYS_SHMCTL = 308 + SYS_ADD_KEY = 309 + SYS_REQUEST_KEY = 310 + SYS_KEYCTL = 311 + SYS_SEMTIMEDOP = 312 + SYS_VSERVER = 313 + SYS_IOPRIO_SET = 314 + SYS_IOPRIO_GET = 315 + SYS_INOTIFY_INIT = 316 + SYS_INOTIFY_ADD_WATCH = 317 + SYS_INOTIFY_RM_WATCH = 318 + SYS_MBIND = 319 + SYS_GET_MEMPOLICY = 320 + SYS_SET_MEMPOLICY = 321 + SYS_OPENAT = 322 + SYS_MKDIRAT = 323 + SYS_MKNODAT = 324 + SYS_FCHOWNAT = 325 + SYS_FUTIMESAT = 326 + SYS_FSTATAT64 = 327 + SYS_UNLINKAT = 328 + SYS_RENAMEAT = 329 + SYS_LINKAT = 330 + SYS_SYMLINKAT = 331 + SYS_READLINKAT = 332 + SYS_FCHMODAT = 333 + SYS_FACCESSAT = 334 + SYS_PSELECT6 = 335 + SYS_PPOLL = 336 + SYS_UNSHARE = 337 + SYS_SET_ROBUST_LIST = 338 + SYS_GET_ROBUST_LIST = 339 + SYS_SPLICE = 340 + SYS_ARM_SYNC_FILE_RANGE = 341 + SYS_TEE = 342 + SYS_VMSPLICE = 343 + SYS_MOVE_PAGES = 344 + SYS_GETCPU = 345 + SYS_EPOLL_PWAIT = 346 + SYS_KEXEC_LOAD = 347 + SYS_UTIMENSAT = 348 + SYS_SIGNALFD = 349 + SYS_TIMERFD_CREATE = 350 + SYS_EVENTFD = 351 + SYS_FALLOCATE = 352 + SYS_TIMERFD_SETTIME = 353 + SYS_TIMERFD_GETTIME = 354 + SYS_SIGNALFD4 = 355 + SYS_EVENTFD2 = 356 + SYS_EPOLL_CREATE1 = 357 + SYS_DUP3 = 358 + SYS_PIPE2 = 359 + SYS_INOTIFY_INIT1 = 360 + SYS_PREADV = 361 + SYS_PWRITEV = 362 + SYS_RT_TGSIGQUEUEINFO = 363 + SYS_PERF_EVENT_OPEN = 364 + SYS_RECVMMSG = 365 + SYS_ACCEPT4 = 366 + SYS_FANOTIFY_INIT = 367 + SYS_FANOTIFY_MARK = 368 + SYS_PRLIMIT64 = 369 + SYS_NAME_TO_HANDLE_AT = 370 + SYS_OPEN_BY_HANDLE_AT = 371 + SYS_CLOCK_ADJTIME = 372 + SYS_SYNCFS = 373 + SYS_SENDMMSG = 374 + SYS_SETNS = 375 + SYS_PROCESS_VM_READV = 376 + SYS_PROCESS_VM_WRITEV = 377 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go new file mode 100644 index 0000000..2e9514f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -0,0 +1,272 @@ +// mksysnum_linux.pl /usr/include/asm-generic/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_RENAMEAT = 38 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go new file mode 100644 index 0000000..5ffe1c7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -0,0 +1,327 @@ +// mksysnum_linux.pl /usr/include/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build mips64,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go new file mode 100644 index 0000000..d192b94 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -0,0 +1,327 @@ +// mksysnum_linux.pl /usr/include/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build mips64le,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go new file mode 100644 index 0000000..e1b08f0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -0,0 +1,360 @@ +// mksysnum_linux.pl /usr/include/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build ppc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go new file mode 100644 index 0000000..45e63f5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -0,0 +1,353 @@ +// mksysnum_linux.pl /usr/include/powerpc64le-linux-gnu/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build ppc64le,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go new file mode 100644 index 0000000..42d4f5c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -0,0 +1,328 @@ +// mksysnum_linux.pl /usr/include/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build s390x,linux + +package unix + +const ( + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_RESTART_SYSCALL = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SIGNAL = 48 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_LOOKUP_DCOOKIE = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_GETDENTS = 141 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_READAHEAD = 222 + SYS_SETXATTR = 224 + SYS_LSETXATTR = 225 + SYS_FSETXATTR = 226 + SYS_GETXATTR = 227 + SYS_LGETXATTR = 228 + SYS_FGETXATTR = 229 + SYS_LISTXATTR = 230 + SYS_LLISTXATTR = 231 + SYS_FLISTXATTR = 232 + SYS_REMOVEXATTR = 233 + SYS_LREMOVEXATTR = 234 + SYS_FREMOVEXATTR = 235 + SYS_GETTID = 236 + SYS_TKILL = 237 + SYS_FUTEX = 238 + SYS_SCHED_SETAFFINITY = 239 + SYS_SCHED_GETAFFINITY = 240 + SYS_TGKILL = 241 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_EPOLL_CREATE = 249 + SYS_EPOLL_CTL = 250 + SYS_EPOLL_WAIT = 251 + SYS_SET_TID_ADDRESS = 252 + SYS_FADVISE64 = 253 + SYS_TIMER_CREATE = 254 + SYS_TIMER_SETTIME = 255 + SYS_TIMER_GETTIME = 256 + SYS_TIMER_GETOVERRUN = 257 + SYS_TIMER_DELETE = 258 + SYS_CLOCK_SETTIME = 259 + SYS_CLOCK_GETTIME = 260 + SYS_CLOCK_GETRES = 261 + SYS_CLOCK_NANOSLEEP = 262 + SYS_STATFS64 = 265 + SYS_FSTATFS64 = 266 + SYS_REMAP_FILE_PAGES = 267 + SYS_MBIND = 268 + SYS_GET_MEMPOLICY = 269 + SYS_SET_MEMPOLICY = 270 + SYS_MQ_OPEN = 271 + SYS_MQ_UNLINK = 272 + SYS_MQ_TIMEDSEND = 273 + SYS_MQ_TIMEDRECEIVE = 274 + SYS_MQ_NOTIFY = 275 + SYS_MQ_GETSETATTR = 276 + SYS_KEXEC_LOAD = 277 + SYS_ADD_KEY = 278 + SYS_REQUEST_KEY = 279 + SYS_KEYCTL = 280 + SYS_WAITID = 281 + SYS_IOPRIO_SET = 282 + SYS_IOPRIO_GET = 283 + SYS_INOTIFY_INIT = 284 + SYS_INOTIFY_ADD_WATCH = 285 + SYS_INOTIFY_RM_WATCH = 286 + SYS_MIGRATE_PAGES = 287 + SYS_OPENAT = 288 + SYS_MKDIRAT = 289 + SYS_MKNODAT = 290 + SYS_FCHOWNAT = 291 + SYS_FUTIMESAT = 292 + SYS_UNLINKAT = 294 + SYS_RENAMEAT = 295 + SYS_LINKAT = 296 + SYS_SYMLINKAT = 297 + SYS_READLINKAT = 298 + SYS_FCHMODAT = 299 + SYS_FACCESSAT = 300 + SYS_PSELECT6 = 301 + SYS_PPOLL = 302 + SYS_UNSHARE = 303 + SYS_SET_ROBUST_LIST = 304 + SYS_GET_ROBUST_LIST = 305 + SYS_SPLICE = 306 + SYS_SYNC_FILE_RANGE = 307 + SYS_TEE = 308 + SYS_VMSPLICE = 309 + SYS_MOVE_PAGES = 310 + SYS_GETCPU = 311 + SYS_EPOLL_PWAIT = 312 + SYS_UTIMES = 313 + SYS_FALLOCATE = 314 + SYS_UTIMENSAT = 315 + SYS_SIGNALFD = 316 + SYS_TIMERFD = 317 + SYS_EVENTFD = 318 + SYS_TIMERFD_CREATE = 319 + SYS_TIMERFD_SETTIME = 320 + SYS_TIMERFD_GETTIME = 321 + SYS_SIGNALFD4 = 322 + SYS_EVENTFD2 = 323 + SYS_INOTIFY_INIT1 = 324 + SYS_PIPE2 = 325 + SYS_DUP3 = 326 + SYS_EPOLL_CREATE1 = 327 + SYS_PREADV = 328 + SYS_PWRITEV = 329 + SYS_RT_TGSIGQUEUEINFO = 330 + SYS_PERF_EVENT_OPEN = 331 + SYS_FANOTIFY_INIT = 332 + SYS_FANOTIFY_MARK = 333 + SYS_PRLIMIT64 = 334 + SYS_NAME_TO_HANDLE_AT = 335 + SYS_OPEN_BY_HANDLE_AT = 336 + SYS_CLOCK_ADJTIME = 337 + SYS_SYNCFS = 338 + SYS_SETNS = 339 + SYS_PROCESS_VM_READV = 340 + SYS_PROCESS_VM_WRITEV = 341 + SYS_S390_RUNTIME_INSTR = 342 + SYS_KCMP = 343 + SYS_FINIT_MODULE = 344 + SYS_SCHED_SETATTR = 345 + SYS_SCHED_GETATTR = 346 + SYS_RENAMEAT2 = 347 + SYS_SECCOMP = 348 + SYS_GETRANDOM = 349 + SYS_MEMFD_CREATE = 350 + SYS_BPF = 351 + SYS_S390_PCI_MMIO_WRITE = 352 + SYS_S390_PCI_MMIO_READ = 353 + SYS_EXECVEAT = 354 + SYS_USERFAULTFD = 355 + SYS_MEMBARRIER = 356 + SYS_RECVMMSG = 357 + SYS_SENDMMSG = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_MLOCK2 = 374 + SYS_SELECT = 142 + SYS_GETRLIMIT = 191 + SYS_LCHOWN = 198 + SYS_GETUID = 199 + SYS_GETGID = 200 + SYS_GETEUID = 201 + SYS_GETEGID = 202 + SYS_SETREUID = 203 + SYS_SETREGID = 204 + SYS_GETGROUPS = 205 + SYS_SETGROUPS = 206 + SYS_FCHOWN = 207 + SYS_SETRESUID = 208 + SYS_GETRESUID = 209 + SYS_SETRESGID = 210 + SYS_GETRESGID = 211 + SYS_CHOWN = 212 + SYS_SETUID = 213 + SYS_SETGID = 214 + SYS_SETFSUID = 215 + SYS_SETFSGID = 216 + SYS_NEWFSTATAT = 293 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go new file mode 100644 index 0000000..f60d8f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go @@ -0,0 +1,273 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go new file mode 100644 index 0000000..48a91d4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go @@ -0,0 +1,273 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go new file mode 100644 index 0000000..612ba66 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go @@ -0,0 +1,273 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go new file mode 100644 index 0000000..3e8ce2a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go @@ -0,0 +1,207 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_KILL = 37 // { int sys_kill(int pid, int signum); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go new file mode 100644 index 0000000..bd28146 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go @@ -0,0 +1,207 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_KILL = 37 // { int sys_kill(int pid, int signum); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go new file mode 100644 index 0000000..c708659 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,solaris + +package unix + +// TODO(aram): remove these before Go 1.3. +const ( + SYS_EXECVE = 59 + SYS_FCNTL = 62 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go new file mode 100644 index 0000000..2de1d44 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -0,0 +1,447 @@ +// +build 386,darwin +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 struct{} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go new file mode 100644 index 0000000..0446578 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -0,0 +1,462 @@ +// +build amd64,darwin +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Pad_cgo_0 [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + Pad_cgo_0 [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Pad_cgo_0 [8]byte + Pad_cgo_1 [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} + +const ( + AT_FDCWD = -0x2 + AT_SYMLINK_NOFOLLOW = 0x20 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go new file mode 100644 index 0000000..66df363 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -0,0 +1,449 @@ +// NOTE: cgo can't generate struct Stat_t and struct Statfs_t yet +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +// +build arm,darwin + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 [0]byte + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go new file mode 100644 index 0000000..85d56ea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -0,0 +1,457 @@ +// +build arm64,darwin +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Pad_cgo_0 [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + Pad_cgo_0 [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Pad_cgo_0 [8]byte + Pad_cgo_1 [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go new file mode 100644 index 0000000..8a6f4e1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -0,0 +1,443 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_dragonfly.go + +// +build amd64,dragonfly + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Ino uint64 + Nlink uint32 + Dev uint32 + Mode uint16 + Padding1 uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare1 int64 + Qspare2 int64 +} + +type Statfs_t struct { + Spare2 int64 + Bsize int64 + Iosize int64 + Blocks int64 + Bfree int64 + Bavail int64 + Files int64 + Ffree int64 + Fsid Fsid + Owner uint32 + Type int32 + Flags int32 + Pad_cgo_0 [4]byte + Syncwrites int64 + Asyncwrites int64 + Fstypename [16]int8 + Mntonname [80]int8 + Syncreads int64 + Asyncreads int64 + Spares1 int16 + Mntfromname [80]int8 + Spares2 int16 + Pad_cgo_1 [4]byte + Spare [2]int64 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Namlen uint16 + Type uint8 + Unused1 uint8 + Unused2 uint32 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + SizeofIfMsghdr = 0xb0 + SizeofIfData = 0xa0 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Pad_cgo_0 [2]byte + Mtu uint64 + Metric uint64 + Link_state uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Unused uint64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Pksent uint64 + Expire uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Recvpipe uint64 + Hopcount uint64 + Mssopt uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Msl uint64 + Iwmaxsegs uint64 + Iwcapsegs uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go new file mode 100644 index 0000000..8cf3094 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -0,0 +1,502 @@ +// +build 386,freebsd +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec + Pad_cgo_0 [8]byte +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + X__fds_bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0x64 + SizeofIfMsghdr = 0x60 + sizeofIfData = 0x54 + SizeofIfData = 0x50 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Baudrate_pf uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint64 + Epoch int32 + Lastchange Timeval +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Epoch int32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go new file mode 100644 index 0000000..e5feb20 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -0,0 +1,505 @@ +// +build amd64,freebsd +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + X__fds_bits [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Baudrate_pf uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Filler [3]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go new file mode 100644 index 0000000..5472b54 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -0,0 +1,497 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -fsigned-char types_freebsd.go + +// +build arm,freebsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + X__fds_bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0x70 + SizeofIfMsghdr = 0x70 + sizeofIfData = 0x60 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Baudrate_pf uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Pad_cgo_0 [4]byte + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go new file mode 100644 index 0000000..f3ddf53 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -0,0 +1,627 @@ +// +build 386,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [2]byte + X__st_ino uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [2]byte + Size int64 + Blksize int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [1]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 + X__cmsg_data [0]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x1d + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name [0]int8 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go new file mode 100644 index 0000000..a923bef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -0,0 +1,645 @@ +// +build amd64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad0 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__unused [3]int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 + X__cmsg_data [0]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x1d + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name [0]int8 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go new file mode 100644 index 0000000..817ac9c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -0,0 +1,607 @@ +// +build arm,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [2]byte + X__st_ino uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [6]byte + Size int64 + Blksize int32 + Pad_cgo_2 [4]byte + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 + X__cmsg_data [0]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x1d + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name [0]uint8 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Uregs [18]uint32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]uint8 +} + +type Utsname struct { + Sysname [65]uint8 + Nodename [65]uint8 + Release [65]uint8 + Version [65]uint8 + Machine [65]uint8 + Domainname [65]uint8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]uint8 + Fpack [6]uint8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go new file mode 100644 index 0000000..e786add --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -0,0 +1,624 @@ +// +build arm64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -fsigned-char types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad1 uint64 + Size int64 + Blksize int32 + X__pad2 int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__glibc_reserved [2]int32 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 + X__cmsg_data [0]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x22 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name [0]int8 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go new file mode 100644 index 0000000..b29894d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -0,0 +1,627 @@ +// +build mips64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x27 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [102]uint64 + U_tsize uint64 + U_dsize uint64 + U_ssize uint64 + Start_code uint64 + Start_data uint64 + Start_stack uint64 + Signal int64 + U_ar0 uint64 + Magic uint64 + U_comm [32]int8 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [32]uint8 + Pad_cgo_0 [3]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go new file mode 100644 index 0000000..d9af71b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -0,0 +1,627 @@ +// +build mips64le,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x27 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [102]uint64 + U_tsize uint64 + U_dsize uint64 + U_ssize uint64 + Start_code uint64 + Start_data uint64 + Start_stack uint64 + Signal int64 + U_ar0 uint64 + Magic uint64 + U_comm [32]int8 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [32]uint8 + Pad_cgo_0 [3]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go new file mode 100644 index 0000000..4218170 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -0,0 +1,634 @@ +// +build ppc64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad2 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__glibc_reserved4 uint64 + X__glibc_reserved5 uint64 + X__glibc_reserved6 uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 + X__cmsg_data [0]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x23 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name [0]uint8 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]uint8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]uint8 + Nodename [65]uint8 + Release [65]uint8 + Version [65]uint8 + Machine [65]uint8 + Domainname [65]uint8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go new file mode 100644 index 0000000..7db4c78 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -0,0 +1,634 @@ +// +build ppc64le,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad2 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__glibc_reserved4 uint64 + X__glibc_reserved5 uint64 + X__glibc_reserved6 uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 + X__cmsg_data [0]uint8 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x22 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name [0]uint8 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]uint8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]uint8 + Nodename [65]uint8 + Release [65]uint8 + Version [65]uint8 + Machine [65]uint8 + Domainname [65]uint8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go new file mode 100644 index 0000000..76ee57c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -0,0 +1,649 @@ +// +build s390x,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -fsigned-char types_linux.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + _ [3]int64 +} + +type Statfs_t struct { + Type uint32 + Bsize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen uint32 + Frsize uint32 + Flags uint32 + Spare [4]uint32 + _ [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + _ [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x6 + FADV_NOREUSE = 0x7 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x27 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + _ [4]byte + Fprs [16]float64 +} + +type PtracePer struct { + _ [0]uint64 + _ [24]byte + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + _ [6]byte + Address uint64 + Access_id uint8 + _ [7]byte +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go new file mode 100644 index 0000000..caf755f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -0,0 +1,396 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_netbsd.go + +// +build 386,netbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x84 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData + Pad_cgo_1 [4]byte +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go new file mode 100644 index 0000000..91b4a53 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -0,0 +1,403 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_netbsd.go + +// +build amd64,netbsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter uint32 + Flags uint32 + Fflags uint32 + Pad_cgo_0 [4]byte + Data int64 + Udata int64 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfTimeval struct { + Sec int64 + Usec int64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go new file mode 100644 index 0000000..c0758f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -0,0 +1,401 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_netbsd.go + +// +build arm,netbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 + Pad_cgo_0 [4]byte +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go new file mode 100644 index 0000000..860a469 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -0,0 +1,441 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_openbsd.go + +// +build 386,openbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xec + SizeofIfData = 0xd4 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval + Mclpool [7]Mclpool +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go new file mode 100644 index 0000000..23c5272 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -0,0 +1,448 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_openbsd.go + +// +build amd64,openbsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Pad_cgo_0 [4]byte + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + Pad_cgo_0 [4]byte + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_1 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xf8 + SizeofIfData = 0xe0 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Pad_cgo_0 [4]byte + Lastchange Timeval + Mclpool [7]Mclpool + Pad_cgo_1 [4]byte +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go new file mode 100644 index 0000000..b3b928a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -0,0 +1,422 @@ +// +build amd64,solaris +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_solaris.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x400 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad_cgo_0 [4]byte + Blocks int64 + Fstype [16]int8 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Sysid int32 + Pid int32 + Pad [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Name [1]int8 + Pad_cgo_0 [5]byte +} + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [236]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *int8 + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Accrights *int8 + Accrightslen int32 + Pad_cgo_2 [4]byte +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + X__icmp6_filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x20 + SizeofSockaddrAny = 0xfc + SizeofSockaddrUnix = 0x6e + SizeofSockaddrDatalink = 0xfc + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x24 + SizeofICMPv6Filter = 0x20 +) + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [257]int8 + Nodename [257]int8 + Release [257]int8 + Version [257]int8 + Machine [257]int8 +} + +type Ustat_t struct { + Tfree int64 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_0 [4]byte +} + +const ( + AT_FDCWD = 0xffd19553 + AT_SYMLINK_NOFOLLOW = 0x1000 + AT_SYMLINK_FOLLOW = 0x2000 + AT_REMOVEDIR = 0x1 + AT_EACCESS = 0x4 +) + +const ( + SizeofIfMsghdr = 0x54 + SizeofIfData = 0x44 + SizeofIfaMsghdr = 0x14 + SizeofRtMsghdr = 0x4c + SizeofRtMetrics = 0x28 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Lastchange Timeval32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +const _SC_PAGESIZE = 0xb + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Pad_cgo_0 [1]byte +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line int8 + Cc [8]uint8 + Pad_cgo_0 [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE new file mode 100644 index 0000000..a68e67f --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/LICENSE @@ -0,0 +1,188 @@ + +Copyright (c) 2011-2014 - Canonical Inc. + +This software is licensed under the LGPLv3, included below. + +As a special exception to the GNU Lesser General Public License version 3 +("LGPL3"), the copyright holders of this Library give you permission to +convey to a third party a Combined Work that links statically or dynamically +to this Library without providing any Minimal Corresponding Source or +Minimal Application Code as set out in 4d or providing the installation +information set out in section 4e, provided that you comply with the other +provisions of LGPL3 and provided that you meet, for the Application the +terms and conditions of the license(s) which apply to the Application. + +Except as stated in this special exception, the provisions of LGPL3 will +continue to comply in full to this Library. If you modify this Library, you +may apply this exception to your version of this Library, but you are not +obliged to do so. If you do not wish to do so, delete this exception +statement from your version. This exception does not (and cannot) modify any +license terms which apply to the Application, with which you must still +comply. + + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/vendor/gopkg.in/yaml.v2/LICENSE.libyaml b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml new file mode 100644 index 0000000..8da58fb --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/LICENSE.libyaml @@ -0,0 +1,31 @@ +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +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/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md new file mode 100644 index 0000000..7b8bd86 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/README.md @@ -0,0 +1,131 @@ +# YAML support for the Go language + +Introduction +------------ + +The yaml package enables Go programs to comfortably encode and decode YAML +values. It was developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a +pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) +C library to parse and generate YAML data quickly and reliably. + +Compatibility +------------- + +The yaml package supports most of YAML 1.1 and 1.2, including support for +anchors, tags, map merging, etc. Multi-document unmarshalling is not yet +implemented, and base-60 floats from YAML 1.1 are purposefully not +supported since they're a poor design and are gone in YAML 1.2. + +Installation and usage +---------------------- + +The import path for the package is *gopkg.in/yaml.v2*. + +To install it, run: + + go get gopkg.in/yaml.v2 + +API documentation +----------------- + +If opened in a browser, the import path itself leads to the API documentation: + + * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) + +API stability +------------- + +The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). + + +License +------- + +The yaml package is licensed under the LGPL with an exception that allows it to be linked statically. Please see the LICENSE file for details. + + +Example +------- + +```Go +package main + +import ( + "fmt" + "log" + + "gopkg.in/yaml.v2" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go new file mode 100644 index 0000000..95ec014 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/apic.go @@ -0,0 +1,742 @@ +package yaml + +import ( + "io" + "os" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// File read handler. +func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_file.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_file_read_handler + parser.input_file = file +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) bool { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + } + return true +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// File write handler. +func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_file.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_file_write_handler + emitter.output_file = file +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +//// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } + return true +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } + return true +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, implicit bool) bool { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } + return true +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } + return true +} + +///* +// * Create ALIAS. +// */ +// +//YAML_DECLARE(int) +//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) +//{ +// mark yaml_mark_t = { 0, 0, 0 } +// anchor_copy *yaml_char_t = NULL +// +// assert(event) // Non-NULL event object is expected. +// assert(anchor) // Non-NULL anchor is expected. +// +// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 +// +// anchor_copy = yaml_strdup(anchor) +// if (!anchor_copy) +// return 0 +// +// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) +// +// return 1 +//} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } + return true +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compliler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go new file mode 100644 index 0000000..085cddc --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/decode.go @@ -0,0 +1,683 @@ +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "math" + "reflect" + "strconv" + "time" +) + +const ( + documentNode = 1 << iota + mappingNode + sequenceNode + scalarNode + aliasNode +) + +type node struct { + kind int + line, column int + tag string + value string + implicit bool + children []*node + anchors map[string]*node +} + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *node +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + + if len(b) == 0 { + b = []byte{'\n'} + } + + yaml_parser_set_input_string(&p.parser, b) + + p.skip() + if p.event.typ != yaml_STREAM_START_EVENT { + panic("expected stream start event, got " + strconv.Itoa(int(p.event.typ))) + } + p.skip() + return &p +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +func (p *parser) skip() { + if p.event.typ != yaml_NO_EVENT { + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + yaml_event_delete(&p.event) + } + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + } else if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *node, anchor []byte) { + if anchor != nil { + p.doc.anchors[string(anchor)] = n + } +} + +func (p *parser) parse() *node { + switch p.event.typ { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + default: + panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ))) + } + panic("unreachable") +} + +func (p *parser) node(kind int) *node { + return &node{ + kind: kind, + line: p.event.start_mark.line, + column: p.event.start_mark.column, + } +} + +func (p *parser) document() *node { + n := p.node(documentNode) + n.anchors = make(map[string]*node) + p.doc = n + p.skip() + n.children = append(n.children, p.parse()) + if p.event.typ != yaml_DOCUMENT_END_EVENT { + panic("expected end of document event but got " + strconv.Itoa(int(p.event.typ))) + } + p.skip() + return n +} + +func (p *parser) alias() *node { + n := p.node(aliasNode) + n.value = string(p.event.anchor) + p.skip() + return n +} + +func (p *parser) scalar() *node { + n := p.node(scalarNode) + n.value = string(p.event.value) + n.tag = string(p.event.tag) + n.implicit = p.event.implicit + p.anchor(n, p.event.anchor) + p.skip() + return n +} + +func (p *parser) sequence() *node { + n := p.node(sequenceNode) + p.anchor(n, p.event.anchor) + p.skip() + for p.event.typ != yaml_SEQUENCE_END_EVENT { + n.children = append(n.children, p.parse()) + } + p.skip() + return n +} + +func (p *parser) mapping() *node { + n := p.node(mappingNode) + p.anchor(n, p.event.anchor) + p.skip() + for p.event.typ != yaml_MAPPING_END_EVENT { + n.children = append(n.children, p.parse(), p.parse()) + } + p.skip() + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *node + aliases map[string]bool + mapType reflect.Type + terrors []string +} + +var ( + mapItemType = reflect.TypeOf(MapItem{}) + durationType = reflect.TypeOf(time.Duration(0)) + defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = defaultMapType.Elem() +) + +func newDecoder() *decoder { + d := &decoder{mapType: defaultMapType} + d.aliases = make(map[string]bool) + return d +} + +func (d *decoder) terror(n *node, tag string, out reflect.Value) { + if n.tag != "" { + tag = n.tag + } + value := n.value + if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "") { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + if u, ok := out.Addr().Interface().(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { + switch n.kind { + case documentNode: + return d.document(n, out) + case aliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.kind { + case scalarNode: + good = d.scalar(n, out) + case mappingNode: + good = d.mapping(n, out) + case sequenceNode: + good = d.sequence(n, out) + default: + panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) + } + return good +} + +func (d *decoder) document(n *node, out reflect.Value) (good bool) { + if len(n.children) == 1 { + d.doc = n + d.unmarshal(n.children[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *node, out reflect.Value) (good bool) { + an, ok := d.doc.anchors[n.value] + if !ok { + failf("unknown anchor '%s' referenced", n.value) + } + if d.aliases[n.value] { + failf("anchor '%s' value contains itself", n.value) + } + d.aliases[n.value] = true + good = d.unmarshal(an, out) + delete(d.aliases, n.value) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { + var tag string + var resolved interface{} + if n.tag == "" && !n.implicit { + tag = yaml_STR_TAG + resolved = n.value + } else { + tag, resolved = resolve(n.tag, n.value) + if tag == yaml_BINARY_TAG { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + if out.Kind() == reflect.Map && !out.CanAddr() { + resetMap(out) + } else { + out.Set(reflect.Zero(out.Type())) + } + return true + } + if s, ok := resolved.(string); ok && out.CanAddr() { + if u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok { + err := u.UnmarshalText([]byte(s)) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == yaml_BINARY_TAG { + out.SetString(resolved.(string)) + good = true + } else if resolved != nil { + out.SetString(n.value) + good = true + } + case reflect.Interface: + if resolved == nil { + out.Set(reflect.Zero(out.Type())) + } else { + out.Set(reflect.ValueOf(resolved)) + } + good = true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch resolved := resolved.(type) { + case int: + if !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + good = true + } + case int64: + if !out.OverflowInt(resolved) { + out.SetInt(resolved) + good = true + } + case uint64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + good = true + } + case float64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + good = true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + good = true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + good = true + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + good = true + case int64: + out.SetFloat(float64(resolved)) + good = true + case uint64: + out.SetFloat(float64(resolved)) + good = true + case float64: + out.SetFloat(resolved) + good = true + } + case reflect.Ptr: + if out.Type().Elem() == reflect.TypeOf(resolved) { + // TODO DOes this make sense? When is out a Ptr except when decoding a nil value? + elem := reflect.New(out.Type().Elem()) + elem.Elem().Set(reflect.ValueOf(resolved)) + out.Set(elem) + good = true + } + } + if !good { + d.terror(n, tag, out) + } + return good +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { + l := len(n.children) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, yaml_SEQ_TAG, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.children[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + out.Set(out.Slice(0, j)) + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Slice: + return d.mappingSlice(n, out) + case reflect.Map: + // okay + case reflect.Interface: + if d.mapType.Kind() == reflect.Map { + iface := out + out = reflect.MakeMap(d.mapType) + iface.Set(out) + } else { + slicev := reflect.New(d.mapType).Elem() + if !d.mappingSlice(n, slicev) { + return false + } + out.Set(slicev) + return true + } + default: + d.terror(n, yaml_MAP_TAG, out) + return false + } + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + mapType := d.mapType + if outt.Key() == ifaceType && outt.Elem() == ifaceType { + d.mapType = outt + } + + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + } + l := len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.children[i], k) { + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.children[i+1], e) { + out.SetMapIndex(k, e) + } + } + } + d.mapType = mapType + return true +} + +func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { + outt := out.Type() + if outt.Elem() != mapItemType { + d.terror(n, yaml_MAP_TAG, out) + return false + } + + mapType := d.mapType + d.mapType = outt + + var slice []MapItem + var l = len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + item := MapItem{} + k := reflect.ValueOf(&item.Key).Elem() + if d.unmarshal(n.children[i], k) { + v := reflect.ValueOf(&item.Value).Elem() + if d.unmarshal(n.children[i+1], v) { + slice = append(slice, item) + } + } + } + out.Set(reflect.ValueOf(slice)) + d.mapType = mapType + return true +} + +func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + name := settableValueOf("") + l := len(n.children) + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) + elemType = inlineMap.Type().Elem() + } + + for i := 0; i < l; i += 2 { + ni := n.children[i] + if isMerge(ni) { + d.merge(n.children[i+1], out) + continue + } + if !d.unmarshal(ni, name) { + continue + } + if info, ok := sinfo.FieldsMap[name.String()]; ok { + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = out.FieldByIndex(info.Inline) + } + d.unmarshal(n.children[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.children[i+1], value) + inlineMap.SetMapIndex(name, value) + } + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) merge(n *node, out reflect.Value) { + switch n.kind { + case mappingNode: + d.unmarshal(n, out) + case aliasNode: + an, ok := d.doc.anchors[n.value] + if ok && an.kind != mappingNode { + failWantMap() + } + d.unmarshal(n, out) + case sequenceNode: + // Step backwards as earlier nodes take precedence. + for i := len(n.children) - 1; i >= 0; i-- { + ni := n.children[i] + if ni.kind == aliasNode { + an, ok := d.doc.anchors[ni.value] + if ok && an.kind != mappingNode { + failWantMap() + } + } else if ni.kind != mappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } +} + +func isMerge(n *node) bool { + return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) +} diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go new file mode 100644 index 0000000..2befd55 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/emitterc.go @@ -0,0 +1,1685 @@ +package yaml + +import ( + "bytes" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + emitter.column = 0 + emitter.line++ + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + emitter.column = 0 + emitter.line++ + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +// +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + emitter.indent += emitter.best_indent + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + return yaml_emitter_emit_node(emitter, event, true, false, false, false) +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS") + } + return false +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an achor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceeded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceeded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceeded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceeded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + emitter.indention = true + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + emitter.whitespace = false + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go new file mode 100644 index 0000000..84f8499 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/encode.go @@ -0,0 +1,306 @@ +package yaml + +import ( + "encoding" + "fmt" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" +) + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool +} + +func newEncoder() (e *encoder) { + e = &encoder{} + e.must(yaml_emitter_initialize(&e.emitter)) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)) + e.emit() + e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true)) + e.emit() + return e +} + +func (e *encoder) finish() { + e.must(yaml_document_end_event_initialize(&e.event, true)) + e.emit() + e.emitter.open_ended = false + e.must(yaml_stream_end_event_initialize(&e.event)) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT { + e.must(false) + } +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + if !in.IsValid() { + e.nilv() + return + } + iface := in.Interface() + if m, ok := iface.(Marshaler); ok { + v, err := m.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + in = reflect.ValueOf(v) + } else if m, ok := iface.(encoding.TextMarshaler); ok { + text, err := m.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + } + switch in.Kind() { + case reflect.Interface: + if in.IsNil() { + e.nilv() + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + if in.IsNil() { + e.nilv() + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Struct: + e.structv(tag, in) + case reflect.Slice: + if in.Type().Elem() == mapItemType { + e.itemsv(tag, in) + } else { + e.slicev(tag, in) + } + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if in.Type() == durationType { + e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) + } else { + e.intv(tag, in) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) itemsv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) + for _, item := range slice { + e.marshal("", reflect.ValueOf(item.Key)) + e.marshal("", reflect.ValueOf(item.Value)) + } + }) +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = in.FieldByIndex(info.Inline) + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + f() + e.must(yaml_mapping_end_event_initialize(&e.event)) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + rtag, rs := resolve("", s) + if rtag == yaml_BINARY_TAG { + if tag == "" || tag == yaml_STR_TAG { + tag = rtag + s = rs.(string) + } else if tag == yaml_BINARY_TAG { + failf("explicitly tagged !!binary data must be base64-encoded") + } else { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + } + if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } else if strings.Contains(s, "\n") { + style = yaml_LITERAL_SCALAR_STYLE + } else { + style = yaml_PLAIN_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // FIXME: Handle 64 bits here. + s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { + implicit := tag == "" + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.emit() +} diff --git a/vendor/gopkg.in/yaml.v2/parserc.go b/vendor/gopkg.in/yaml.v2/parserc.go new file mode 100644 index 0000000..0a7037a --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/parserc.go @@ -0,0 +1,1096 @@ +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + return &parser.tokens[parser.tokens_head] + } + return nil +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } + return false +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** +// +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + return true +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* +// +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +// +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +// +// +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true +} + +// +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * +// +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * +// +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go new file mode 100644 index 0000000..f450791 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/readerc.go @@ -0,0 +1,394 @@ +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go new file mode 100644 index 0000000..93a8632 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/resolve.go @@ -0,0 +1,203 @@ +package yaml + +import ( + "encoding/base64" + "math" + "strconv" + "strings" + "unicode/utf8" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, + {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, + {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, + {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, + {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, + {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, + {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", yaml_MERGE_TAG, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + // TODO This can easily be made faster and produce less garbage. + if strings.HasPrefix(tag, longTagPrefix) { + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG: + return true + } + return false +} + +func resolve(tag string, in string) (rtag string, out interface{}) { + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: + return + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt(plain[3:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, -int(intv) + } else { + return yaml_INT_TAG, -intv + } + } + } + // XXX Handle timestamps here. + + default: + panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") + } + } + if tag == yaml_BINARY_TAG { + return yaml_BINARY_TAG, in + } + if utf8.ValidString(in) { + return yaml_STR_TAG, in + } + return yaml_BINARY_TAG, encodeBase64(in) +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go new file mode 100644 index 0000000..d97d76f --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/scannerc.go @@ -0,0 +1,2710 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/cvs/current.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet") +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + // Check if we really need to fetch more tokens. + need_more_tokens := false + + if parser.tokens_head == len(parser.tokens) { + // Queue is empty. + need_more_tokens = true + } else { + // Check if any potential simple key may occupy the head position. + if !yaml_parser_stale_simple_keys(parser) { + return false + } + + for i := range parser.simple_keys { + simple_key := &parser.simple_keys[i] + if simple_key.possible && simple_key.token_number == parser.tokens_parsed { + need_more_tokens = true + break + } + } + } + + // We are finished. + if !need_more_tokens { + break + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // Remove obsolete potential simple keys. + if !yaml_parser_stale_simple_keys(parser) { + return false + } + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +// Check the list of potential simple keys and remove the positions that +// cannot contain simple keys anymore. +func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { + // Check for a potential simple key for each flow level. + for i := range parser.simple_keys { + simple_key := &parser.simple_keys[i] + + // The specification requires that a simple key + // + // - is limited to a single line, + // - is shorter than 1024 characters. + if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) { + + // Check if the potential simple key to be removed is required. + if simple_key.required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + } + } + return true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // A simple key is required only when it is the first token in the current + // line. Therefore it is always allowed. But we add a check anyway. + if required && !parser.simple_key_allowed { + panic("should not happen") + } + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + } + simple_key.mark = parser.mark + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + return true +} + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + // Increase the flow level. + parser.flow_level++ + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1] + } + return true +} + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + // Loop through the indentation levels in the stack. + for parser.indent > column { + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if simple_key.possible { + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found uknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +// +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && !(s[0] == '!' && s[1] == 0) { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the tag is non-empty. + if len(s) == 0 { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". + if parser.flow_level > 0 && + parser.buffer[parser.buffer_pos] == ':' && + !is_blankz(parser.buffer, parser.buffer_pos+1) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found unexpected ':'") + return false + } + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab character that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violate indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go new file mode 100644 index 0000000..5958822 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/sorter.go @@ -0,0 +1,104 @@ +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + return bl + } + var ai, bi int + var an, bn int64 + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go new file mode 100644 index 0000000..190362f --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/writerc.go @@ -0,0 +1,89 @@ +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + // If the output encoding is UTF-8, we don't need to recode the buffer. + if emitter.encoding == yaml_UTF8_ENCODING { + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true + } + + // Recode the buffer into the raw buffer. + var low, high int + if emitter.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + high, low = 1, 0 + } + + pos := 0 + for pos < emitter.buffer_pos { + // See the "reader.c" code for more details on UTF-8 encoding. Note + // that we assume that the buffer contains a valid UTF-8 sequence. + + // Read the next UTF-8 character. + octet := emitter.buffer[pos] + + var w int + var value rune + switch { + case octet&0x80 == 0x00: + w, value = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, value = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, value = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, value = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = emitter.buffer[pos+k] + value = (value << 6) + (rune(octet) & 0x3F) + } + pos += w + + // Write the character. + if value < 0x10000 { + var b [2]byte + b[high] = byte(value >> 8) + b[low] = byte(value & 0xFF) + emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1]) + } else { + // Write the character using a surrogate pair (check "reader.c"). + var b [4]byte + value -= 0x10000 + b[high] = byte(0xD8 + (value >> 18)) + b[low] = byte((value >> 10) & 0xFF) + b[high+2] = byte(0xDC + ((value >> 8) & 0xFF)) + b[low+2] = byte(value & 0xFF) + emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3]) + } + } + + // Write the raw buffer. + if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + emitter.raw_buffer = emitter.raw_buffer[:0] + return true +} diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go new file mode 100644 index 0000000..d133edf --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yaml.go @@ -0,0 +1,346 @@ +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/go-yaml/yaml +// +package yaml + +import ( + "errors" + "fmt" + "reflect" + "strings" + "sync" +) + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. The UnmarshalYAML +// method receives a function that may be called to unmarshal the original +// YAML value into a field or variable. It is safe to call the unmarshal +// function parameter more than once if necessary. +type Unmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +// +func Unmarshal(in []byte, out interface{}) (err error) { + defer handleErr(&err) + d := newDecoder() + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only unmarshalled if they are exported (have an upper case +// first letter), and are unmarshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Does not apply to zero valued structs. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int "a,omitempty" +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshal("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("Multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct: + sinfo, err := getStructInfo(field.Type) + if err != nil { + return nil, err + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + default: + //return nil, errors.New("Option ,inline needs a struct value or map field") + return nil, errors.New("Option ,inline needs a struct value field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "Duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{fieldsMap, fieldsList, inlineMap} + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +func isZero(v reflect.Value) bool { + switch v.Kind() { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go new file mode 100644 index 0000000..d60a6b6 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yamlh.go @@ -0,0 +1,716 @@ +package yaml + +import ( + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota + + yaml_PLAIN_SCALAR_STYLE // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. +) + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occured. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_file io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +// +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_file io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/vendor/gopkg.in/yaml.v2/yamlprivateh.go b/vendor/gopkg.in/yaml.v2/yamlprivateh.go new file mode 100644 index 0000000..8110ce3 --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/yamlprivateh.go @@ -0,0 +1,173 @@ +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +}